--- linux-aws-4.15.0.orig/Documentation/ABI/testing/debugfs-aufs +++ linux-aws-4.15.0/Documentation/ABI/testing/debugfs-aufs @@ -0,0 +1,50 @@ +What: /debug/aufs/si_/ +Date: March 2009 +Contact: J. R. Okajima +Description: + Under /debug/aufs, a directory named si_ is created + per aufs mount, where is a unique id generated + internally. + +What: /debug/aufs/si_/plink +Date: Apr 2013 +Contact: J. R. Okajima +Description: + It has three lines and shows the information about the + pseudo-link. The first line is a single number + representing a number of buckets. The second line is a + number of pseudo-links per buckets (separated by a + blank). The last line is a single number representing a + total number of psedo-links. + When the aufs mount option 'noplink' is specified, it + will show "1\n0\n0\n". + +What: /debug/aufs/si_/xib +Date: March 2009 +Contact: J. R. Okajima +Description: + It shows the consumed blocks by xib (External Inode Number + Bitmap), its block size and file size. + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see the aufs manual. + +What: /debug/aufs/si_/xino0, xino1 ... xinoN +Date: March 2009 +Contact: J. R. Okajima +Description: + It shows the consumed blocks by xino (External Inode Number + Translation Table), its link count, block size and file + size. + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see the aufs manual. + +What: /debug/aufs/si_/xigen +Date: March 2009 +Contact: J. R. Okajima +Description: + It shows the consumed blocks by xigen (External Inode + Generation Table), its block size and file size. + If CONFIG_AUFS_EXPORT is disabled, this entry will not + be created. + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see the aufs manual. --- linux-aws-4.15.0.orig/Documentation/ABI/testing/sysfs-aufs +++ linux-aws-4.15.0/Documentation/ABI/testing/sysfs-aufs @@ -0,0 +1,31 @@ +What: /sys/fs/aufs/si_/ +Date: March 2009 +Contact: J. R. Okajima +Description: + Under /sys/fs/aufs, a directory named si_ is created + per aufs mount, where is a unique id generated + internally. + +What: /sys/fs/aufs/si_/br0, br1 ... brN +Date: March 2009 +Contact: J. R. Okajima +Description: + It shows the abolute path of a member directory (which + is called branch) in aufs, and its permission. + +What: /sys/fs/aufs/si_/brid0, brid1 ... bridN +Date: July 2013 +Contact: J. R. Okajima +Description: + It shows the id of a member directory (which is called + branch) in aufs. + +What: /sys/fs/aufs/si_/xi_path +Date: March 2009 +Contact: J. R. Okajima +Description: + It shows the abolute path of XINO (External Inode Number + Bitmap, Translation Table and Generation Table) file + even if it is the default path. + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see the aufs manual. --- linux-aws-4.15.0.orig/Documentation/admin-guide/kernel-parameters.txt +++ linux-aws-4.15.0/Documentation/admin-guide/kernel-parameters.txt @@ -660,6 +660,10 @@ 0: default value, disable debugging 1: enable debugging at boot time + cpufreq_driver= [X86] Allow only the named cpu frequency scaling driver + to register. Example: cpufreq_driver=powernow-k8 + Format: { none | STRING } + cpuidle.off=1 [CPU_IDLE] disable the cpuidle sub-system @@ -2684,7 +2688,8 @@ disable unhandled interrupt sources. no_timer_check [X86,APIC] Disables the code which tests for - broken timer IRQ sources. + broken timer IRQ sources. For AWS, this is defaulted + to disabled, can be re-enabled using no_timer_check=0. noisapnp [ISAPNP] Disables ISA PnP code. @@ -2742,8 +2747,6 @@ norandmaps Don't use address space randomization. Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space - noreplace-paravirt [X86,IA-64,PV_OPS] Don't patch paravirt_ops - noreplace-smp [X86-32,SMP] Don't replace SMP instructions with UP alternatives @@ -4278,6 +4281,7 @@ as the stability checks done at bootup. Used to enable high-resolution timer mode on older hardware, and in virtualized environment. + [x86] unreliable: mark tsc clocksource as unreliable. [x86] noirqtime: Do not use TSC to do irq accounting. Used to run time disable IRQ_TIME_ACCOUNTING on any platforms where RDTSC is slow and this accounting --- linux-aws-4.15.0.orig/Documentation/cgroups/namespace.txt +++ linux-aws-4.15.0/Documentation/cgroups/namespace.txt @@ -0,0 +1,142 @@ + CGroup Namespaces + +CGroup Namespace provides a mechanism to virtualize the view of the +/proc//cgroup file. The CLONE_NEWCGROUP clone-flag can be used with +clone() and unshare() syscalls to create a new cgroup namespace. +The process running inside the cgroup namespace will have its /proc//cgroup +output restricted to cgroupns-root. cgroupns-root is the cgroup of the process +at the time of creation of the cgroup namespace. + +Prior to CGroup Namespace, the /proc//cgroup file used to show complete +path of the cgroup of a process. In a container setup (where a set of cgroups +and namespaces are intended to isolate processes), the /proc//cgroup file +may leak potential system level information to the isolated processes. + +For Example: + $ cat /proc/self/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/batchjobs/container_id1 + +The path '/batchjobs/container_id1' can generally be considered as system-data +and its desirable to not expose it to the isolated process. + +CGroup Namespaces can be used to restrict visibility of this path. +For Example: + # Before creating cgroup namespace + $ ls -l /proc/self/ns/cgroup + lrwxrwxrwx 1 root root 0 2014-07-15 10:37 /proc/self/ns/cgroup -> cgroup:[4026531835] + $ cat /proc/self/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/batchjobs/container_id1 + + # unshare(CLONE_NEWCGROUP) and exec /bin/bash + $ ~/unshare -c + [ns]$ ls -l /proc/self/ns/cgroup + lrwxrwxrwx 1 root root 0 2014-07-15 10:35 /proc/self/ns/cgroup -> cgroup:[4026532183] + # From within new cgroupns, process sees that its in the root cgroup + [ns]$ cat /proc/self/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/ + + # From global cgroupns: + $ cat /proc//cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/batchjobs/container_id1 + + # Unshare cgroupns along with userns and mountns + # Following calls unshare(CLONE_NEWCGROUP|CLONE_NEWUSER|CLONE_NEWNS), then + # sets up uid/gid map and execs /bin/bash + $ ~/unshare -c -u -m + # Originally, we were in /batchjobs/container_id1 cgroup. Mount our own cgroup + # hierarchy. + [ns]$ mount -t cgroup cgroup /tmp/cgroup + [ns]$ ls -l /tmp/cgroup + total 0 + -r--r--r-- 1 root root 0 2014-10-13 09:32 cgroup.controllers + -r--r--r-- 1 root root 0 2014-10-13 09:32 cgroup.populated + -rw-r--r-- 1 root root 0 2014-10-13 09:25 cgroup.procs + -rw-r--r-- 1 root root 0 2014-10-13 09:32 cgroup.subtree_control + +The cgroupns-root (/batchjobs/container_id1 in above example) becomes the +filesystem root for the namespace specific cgroupfs mount. + +The virtualization of /proc/self/cgroup file combined with restricting +the view of cgroup hierarchy by namespace-private cgroupfs mount +should provide a completely isolated cgroup view inside the container. + +In its current form, the cgroup namespaces patcheset provides following +behavior: + +(1) The 'cgroupns-root' for a cgroup namespace is the cgroup in which + the process calling unshare is running. + For ex. if a process in /batchjobs/container_id1 cgroup calls unshare, + cgroup /batchjobs/container_id1 becomes the cgroupns-root. + For the init_cgroup_ns, this is the real root ('/') cgroup + (identified in code as cgrp_dfl_root.cgrp). + +(2) The cgroupns-root cgroup does not change even if the namespace + creator process later moves to a different cgroup. + $ ~/unshare -c # unshare cgroupns in some cgroup + [ns]$ cat /proc/self/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/ + [ns]$ mkdir sub_cgrp_1 + [ns]$ echo 0 > sub_cgrp_1/cgroup.procs + [ns]$ cat /proc/self/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/sub_cgrp_1 + +(3) Each process gets its CGROUPNS specific view of /proc//cgroup +(a) Processes running inside the cgroup namespace will be able to see + cgroup paths (in /proc/self/cgroup) only inside their root cgroup + [ns]$ sleep 100000 & # From within unshared cgroupns + [1] 7353 + [ns]$ echo 7353 > sub_cgrp_1/cgroup.procs + [ns]$ cat /proc/7353/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/sub_cgrp_1 + +(b) From global cgroupns, the real cgroup path will be visible: + $ cat /proc/7353/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/batchjobs/container_id1/sub_cgrp_1 + +(c) From a sibling cgroupns (cgroupns root-ed at a different cgroup), cgroup + path relative to its own cgroupns-root will be shown: + # ns2's cgroupns-root is at '/batchjobs/container_id2' + [ns2]$ cat /proc/7353/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/../container_id2/sub_cgrp_1 + + Note that the relative path always starts with '/' to indicate that its + relative to the cgroupns-root of the caller. + +(4) Processes inside a cgroupns can move in-and-out of the cgroupns-root + (if they have proper access to external cgroups). + # From inside cgroupns (with cgroupns-root at /batchjobs/container_id1), and + # assuming that the global hierarchy is still accessible inside cgroupns: + $ cat /proc/7353/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/sub_cgrp_1 + $ echo 7353 > batchjobs/container_id2/cgroup.procs + $ cat /proc/7353/cgroup + 0:cpuset,cpu,cpuacct,memory,devices,freezer,hugetlb:/../container_id2 + + Note that this kind of setup is not encouraged. A task inside cgroupns + should only be exposed to its own cgroupns hierarchy. Otherwise it makes + the virtualization of /proc//cgroup less useful. + +(5) Setns to another cgroup namespace is allowed when: + (a) the process has CAP_SYS_ADMIN in its current userns + (b) the process has CAP_SYS_ADMIN in the target cgroupns' userns + No implicit cgroup changes happen with attaching to another cgroupns. It + is expected that the somone moves the attaching process under the target + cgroupns-root. + +(6) When some thread from a multi-threaded process unshares its + cgroup-namespace, the new cgroupns gets applied to the entire process (all + the threads). For the unified-hierarchy this is expected as it only allows + process-level containerization. For the legacy hierarchies this may be + unexpected. So all the threads in the process will have the same cgroup. + +(7) The cgroup namespace is alive as long as there is atleast 1 + process inside it. When the last process exits, the cgroup + namespace is destroyed. The cgroupns-root and the actual cgroups + remain though. + +(8) Namespace specific cgroup hierarchy can be mounted by a process running + inside cgroupns: + $ mount -t cgroup -o __DEVEL__sane_behavior cgroup $MOUNT_POINT + + This will mount the unified cgroup hierarchy with cgroupns-root as the + filesystem root. The process needs CAP_SYS_ADMIN in its userns and mntns. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/README +++ linux-aws-4.15.0/Documentation/filesystems/aufs/README @@ -0,0 +1,393 @@ + +Aufs4 -- advanced multi layered unification filesystem version 4.x +http://aufs.sf.net +Junjiro R. Okajima + + +0. Introduction +---------------------------------------- +In the early days, aufs was entirely re-designed and re-implemented +Unionfs Version 1.x series. Adding many original ideas, approaches, +improvements and implementations, it becomes totally different from +Unionfs while keeping the basic features. +Recently, Unionfs Version 2.x series begin taking some of the same +approaches to aufs1's. +Unionfs is being developed by Professor Erez Zadok at Stony Brook +University and his team. + +Aufs4 supports linux-4.0 and later, and for linux-3.x series try aufs3. +If you want older kernel version support, try aufs2-2.6.git or +aufs2-standalone.git repository, aufs1 from CVS on SourceForge. + +Note: it becomes clear that "Aufs was rejected. Let's give it up." + According to Christoph Hellwig, linux rejects all union-type + filesystems but UnionMount. + + +PS. Al Viro seems have a plan to merge aufs as well as overlayfs and + UnionMount, and he pointed out an issue around a directory mutex + lock and aufs addressed it. But it is still unsure whether aufs will + be merged (or any other union solution). + + + +1. Features +---------------------------------------- +- unite several directories into a single virtual filesystem. The member + directory is called as a branch. +- you can specify the permission flags to the branch, which are 'readonly', + 'readwrite' and 'whiteout-able.' +- by upper writable branch, internal copyup and whiteout, files/dirs on + readonly branch are modifiable logically. +- dynamic branch manipulation, add, del. +- etc... + +Also there are many enhancements in aufs, such as: +- test only the highest one for the directory permission (dirperm1) +- copyup on open (coo=) +- 'move' policy for copy-up between two writable branches, after + checking free space. +- xattr, acl +- readdir(3) in userspace. +- keep inode number by external inode number table +- keep the timestamps of file/dir in internal copyup operation +- seekable directory, supporting NFS readdir. +- whiteout is hardlinked in order to reduce the consumption of inodes + on branch +- do not copyup, nor create a whiteout when it is unnecessary +- revert a single systemcall when an error occurs in aufs +- remount interface instead of ioctl +- maintain /etc/mtab by an external command, /sbin/mount.aufs. +- loopback mounted filesystem as a branch +- kernel thread for removing the dir who has a plenty of whiteouts +- support copyup sparse file (a file which has a 'hole' in it) +- default permission flags for branches +- selectable permission flags for ro branch, whether whiteout can + exist or not +- export via NFS. +- support /fs/aufs and /aufs. +- support multiple writable branches, some policies to select one + among multiple writable branches. +- a new semantics for link(2) and rename(2) to support multiple + writable branches. +- no glibc changes are required. +- pseudo hardlink (hardlink over branches) +- allow a direct access manually to a file on branch, e.g. bypassing aufs. + including NFS or remote filesystem branch. +- userspace wrapper for pathconf(3)/fpathconf(3) with _PC_LINK_MAX. +- and more... + +Currently these features are dropped temporary from aufs4. +See design/08plan.txt in detail. +- nested mount, i.e. aufs as readonly no-whiteout branch of another aufs + (robr) +- statistics of aufs thread (/sys/fs/aufs/stat) + +Features or just an idea in the future (see also design/*.txt), +- reorder the branch index without del/re-add. +- permanent xino files for NFSD +- an option for refreshing the opened files after add/del branches +- light version, without branch manipulation. (unnecessary?) +- copyup in userspace +- inotify in userspace +- readv/writev + + +2. Download +---------------------------------------- +There are three GIT trees for aufs4, aufs4-linux.git, +aufs4-standalone.git, and aufs-util.git. Note that there is no "4" in +"aufs-util.git." +While the aufs-util is always necessary, you need either of aufs4-linux +or aufs4-standalone. + +The aufs4-linux tree includes the whole linux mainline GIT tree, +git://git.kernel.org/.../torvalds/linux.git. +And you cannot select CONFIG_AUFS_FS=m for this version, eg. you cannot +build aufs4 as an external kernel module. +Several extra patches are not included in this tree. Only +aufs4-standalone tree contains them. They are described in the later +section "Configuration and Compilation." + +On the other hand, the aufs4-standalone tree has only aufs source files +and necessary patches, and you can select CONFIG_AUFS_FS=m. +But you need to apply all aufs patches manually. + +You will find GIT branches whose name is in form of "aufs4.x" where "x" +represents the linux kernel version, "linux-4.x". For instance, +"aufs4.0" is for linux-4.0. For latest "linux-4.x-rcN", use +"aufs4.x-rcN" branch. + +o aufs4-linux tree +$ git clone --reference /your/linux/git/tree \ + git://github.com/sfjro/aufs4-linux.git aufs4-linux.git +- if you don't have linux GIT tree, then remove "--reference ..." +$ cd aufs4-linux.git +$ git checkout origin/aufs4.0 + +Or You may want to directly git-pull aufs into your linux GIT tree, and +leave the patch-work to GIT. +$ cd /your/linux/git/tree +$ git remote add aufs4 git://github.com/sfjro/aufs4-linux.git +$ git fetch aufs4 +$ git checkout -b my4.0 v4.0 +$ (add your local change...) +$ git pull aufs4 aufs4.0 +- now you have v4.0 + your_changes + aufs4.0 in you my4.0 branch. +- you may need to solve some conflicts between your_changes and + aufs4.0. in this case, git-rerere is recommended so that you can + solve the similar conflicts automatically when you upgrade to 4.1 or + later in the future. + +o aufs4-standalone tree +$ git clone git://github.com/sfjro/aufs4-standalone.git aufs4-standalone.git +$ cd aufs4-standalone.git +$ git checkout origin/aufs4.0 + +o aufs-util tree +$ git clone git://git.code.sf.net/p/aufs/aufs-util aufs-util.git +- note that the public aufs-util.git is on SourceForge instead of + GitHUB. +$ cd aufs-util.git +$ git checkout origin/aufs4.0 + +Note: The 4.x-rcN branch is to be used with `rc' kernel versions ONLY. +The minor version number, 'x' in '4.x', of aufs may not always +follow the minor version number of the kernel. +Because changes in the kernel that cause the use of a new +minor version number do not always require changes to aufs-util. + +Since aufs-util has its own minor version number, you may not be +able to find a GIT branch in aufs-util for your kernel's +exact minor version number. +In this case, you should git-checkout the branch for the +nearest lower number. + +For (an unreleased) example: +If you are using "linux-4.10" and the "aufs4.10" branch +does not exist in aufs-util repository, then "aufs4.9", "aufs4.8" +or something numerically smaller is the branch for your kernel. + +Also you can view all branches by + $ git branch -a + + +3. Configuration and Compilation +---------------------------------------- +Make sure you have git-checkout'ed the correct branch. + +For aufs4-linux tree, +- enable CONFIG_AUFS_FS. +- set other aufs configurations if necessary. + +For aufs4-standalone tree, +There are several ways to build. + +1. +- apply ./aufs4-kbuild.patch to your kernel source files. +- apply ./aufs4-base.patch too. +- apply ./aufs4-mmap.patch too. +- apply ./aufs4-standalone.patch too, if you have a plan to set + CONFIG_AUFS_FS=m. otherwise you don't need ./aufs4-standalone.patch. +- copy ./{Documentation,fs,include/uapi/linux/aufs_type.h} files to your + kernel source tree. Never copy $PWD/include/uapi/linux/Kbuild. +- enable CONFIG_AUFS_FS, you can select either + =m or =y. +- and build your kernel as usual. +- install the built kernel. + Note: Since linux-3.9, every filesystem module requires an alias + "fs-". You should make sure that "fs-aufs" is listed in your + modules.aliases file if you set CONFIG_AUFS_FS=m. +- install the header files too by "make headers_install" to the + directory where you specify. By default, it is $PWD/usr. + "make help" shows a brief note for headers_install. +- and reboot your system. + +2. +- module only (CONFIG_AUFS_FS=m). +- apply ./aufs4-base.patch to your kernel source files. +- apply ./aufs4-mmap.patch too. +- apply ./aufs4-standalone.patch too. +- build your kernel, don't forget "make headers_install", and reboot. +- edit ./config.mk and set other aufs configurations if necessary. + Note: You should read $PWD/fs/aufs/Kconfig carefully which describes + every aufs configurations. +- build the module by simple "make". + Note: Since linux-3.9, every filesystem module requires an alias + "fs-". You should make sure that "fs-aufs" is listed in your + modules.aliases file. +- you can specify ${KDIR} make variable which points to your kernel + source tree. +- install the files + + run "make install" to install the aufs module, or copy the built + $PWD/aufs.ko to /lib/modules/... and run depmod -a (or reboot simply). + + run "make install_headers" (instead of headers_install) to install + the modified aufs header file (you can specify DESTDIR which is + available in aufs standalone version's Makefile only), or copy + $PWD/usr/include/linux/aufs_type.h to /usr/include/linux or wherever + you like manually. By default, the target directory is $PWD/usr. +- no need to apply aufs4-kbuild.patch, nor copying source files to your + kernel source tree. + +Note: The header file aufs_type.h is necessary to build aufs-util + as well as "make headers_install" in the kernel source tree. + headers_install is subject to be forgotten, but it is essentially + necessary, not only for building aufs-util. + You may not meet problems without headers_install in some older + version though. + +And then, +- read README in aufs-util, build and install it +- note that your distribution may contain an obsoleted version of + aufs_type.h in /usr/include/linux or something. When you build aufs + utilities, make sure that your compiler refers the correct aufs header + file which is built by "make headers_install." +- if you want to use readdir(3) in userspace or pathconf(3) wrapper, + then run "make install_ulib" too. And refer to the aufs manual in + detail. + +There several other patches in aufs4-standalone.git. They are all +optional. When you meet some problems, they will help you. +- aufs4-loopback.patch + Supports a nested loopback mount in a branch-fs. This patch is + unnecessary until aufs produces a message like "you may want to try + another patch for loopback file". +- vfs-ino.patch + Modifies a system global kernel internal function get_next_ino() in + order to stop assigning 0 for an inode-number. Not directly related to + aufs, but recommended generally. +- tmpfs-idr.patch + Keeps the tmpfs inode number as the lowest value. Effective to reduce + the size of aufs XINO files for tmpfs branch. Also it prevents the + duplication of inode number, which is important for backup tools and + other utilities. When you find aufs XINO files for tmpfs branch + growing too much, try this patch. +- lockdep-debug.patch + Because aufs is not only an ordinary filesystem (callee of VFS), but + also a caller of VFS functions for branch filesystems, subclassing of + the internal locks for LOCKDEP is necessary. LOCKDEP is a debugging + feature of linux kernel. If you enable CONFIG_LOCKDEP, then you will + need to apply this debug patch to expand several constant values. + If don't know what LOCKDEP, then you don't have apply this patch. + + +4. Usage +---------------------------------------- +At first, make sure aufs-util are installed, and please read the aufs +manual, aufs.5 in aufs-util.git tree. +$ man -l aufs.5 + +And then, +$ mkdir /tmp/rw /tmp/aufs +# mount -t aufs -o br=/tmp/rw:${HOME} none /tmp/aufs + +Here is another example. The result is equivalent. +# mount -t aufs -o br=/tmp/rw=rw:${HOME}=ro none /tmp/aufs + Or +# mount -t aufs -o br:/tmp/rw none /tmp/aufs +# mount -o remount,append:${HOME} /tmp/aufs + +Then, you can see whole tree of your home dir through /tmp/aufs. If +you modify a file under /tmp/aufs, the one on your home directory is +not affected, instead the same named file will be newly created under +/tmp/rw. And all of your modification to a file will be applied to +the one under /tmp/rw. This is called the file based Copy on Write +(COW) method. +Aufs mount options are described in aufs.5. +If you run chroot or something and make your aufs as a root directory, +then you need to customize the shutdown script. See the aufs manual in +detail. + +Additionally, there are some sample usages of aufs which are a +diskless system with network booting, and LiveCD over NFS. +See sample dir in CVS tree on SourceForge. + + +5. Contact +---------------------------------------- +When you have any problems or strange behaviour in aufs, please let me +know with: +- /proc/mounts (instead of the output of mount(8)) +- /sys/module/aufs/* +- /sys/fs/aufs/* (if you have them) +- /debug/aufs/* (if you have them) +- linux kernel version + if your kernel is not plain, for example modified by distributor, + the url where i can download its source is necessary too. +- aufs version which was printed at loading the module or booting the + system, instead of the date you downloaded. +- configuration (define/undefine CONFIG_AUFS_xxx) +- kernel configuration or /proc/config.gz (if you have it) +- behaviour which you think to be incorrect +- actual operation, reproducible one is better +- mailto: aufs-users at lists.sourceforge.net + +Usually, I don't watch the Public Areas(Bugs, Support Requests, Patches, +and Feature Requests) on SourceForge. Please join and write to +aufs-users ML. + + +6. Acknowledgements +---------------------------------------- +Thanks to everyone who have tried and are using aufs, whoever +have reported a bug or any feedback. + +Especially donators: +Tomas Matejicek(slax.org) made a donation (much more than once). + Since Apr 2010, Tomas M (the author of Slax and Linux Live + scripts) is making "doubling" donations. + Unfortunately I cannot list all of the donators, but I really + appreciate. + It ends Aug 2010, but the ordinary donation URL is still available. + +Dai Itasaka made a donation (2007/8). +Chuck Smith made a donation (2008/4, 10 and 12). +Henk Schoneveld made a donation (2008/9). +Chih-Wei Huang, ASUS, CTC donated Eee PC 4G (2008/10). +Francois Dupoux made a donation (2008/11). +Bruno Cesar Ribas and Luis Carlos Erpen de Bona, C3SL serves public + aufs2 GIT tree (2009/2). +William Grant made a donation (2009/3). +Patrick Lane made a donation (2009/4). +The Mail Archive (mail-archive.com) made donations (2009/5). +Nippy Networks (Ed Wildgoose) made a donation (2009/7). +New Dream Network, LLC (www.dreamhost.com) made a donation (2009/11). +Pavel Pronskiy made a donation (2011/2). +Iridium and Inmarsat satellite phone retailer (www.mailasail.com), Nippy + Networks (Ed Wildgoose) made a donation for hardware (2011/3). +Max Lekomcev (DOM-TV project) made a donation (2011/7, 12, 2012/3, 6 and +11). +Sam Liddicott made a donation (2011/9). +Era Scarecrow made a donation (2013/4). +Bor Ratajc made a donation (2013/4). +Alessandro Gorreta made a donation (2013/4). +POIRETTE Marc made a donation (2013/4). +Alessandro Gorreta made a donation (2013/4). +lauri kasvandik made a donation (2013/5). +"pemasu from Finland" made a donation (2013/7). +The Parted Magic Project made a donation (2013/9 and 11). +Pavel Barta made a donation (2013/10). +Nikolay Pertsev made a donation (2014/5). +James B made a donation (2014/7 and 2015/7). +Stefano Di Biase made a donation (2014/8). +Daniel Epellei made a donation (2015/1). +OmegaPhil made a donation (2016/1). +Tomasz Szewczyk made a donation (2016/4). +James Burry made a donation (2016/12). + +Thank you very much. +Donations are always, including future donations, very important and +helpful for me to keep on developing aufs. + + +7. +---------------------------------------- +If you are an experienced user, no explanation is needed. Aufs is +just a linux filesystem. + + +Enjoy! + +# Local variables: ; +# mode: text; +# End: ; --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/01intro.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/01intro.txt @@ -0,0 +1,171 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Introduction +---------------------------------------- + +aufs [ei ju: ef es] | /ey-yoo-ef-es/ | [a u f s] +1. abbrev. for "advanced multi-layered unification filesystem". +2. abbrev. for "another unionfs". +3. abbrev. for "auf das" in German which means "on the" in English. + Ex. "Butter aufs Brot"(G) means "butter onto bread"(E). + But "Filesystem aufs Filesystem" is hard to understand. +4. abbrev. for "African Urban Fashion Show". + +AUFS is a filesystem with features: +- multi layered stackable unification filesystem, the member directory + is called as a branch. +- branch permission and attribute, 'readonly', 'real-readonly', + 'readwrite', 'whiteout-able', 'link-able whiteout', etc. and their + combination. +- internal "file copy-on-write". +- logical deletion, whiteout. +- dynamic branch manipulation, adding, deleting and changing permission. +- allow bypassing aufs, user's direct branch access. +- external inode number translation table and bitmap which maintains the + persistent aufs inode number. +- seekable directory, including NFS readdir. +- file mapping, mmap and sharing pages. +- pseudo-link, hardlink over branches. +- loopback mounted filesystem as a branch. +- several policies to select one among multiple writable branches. +- revert a single systemcall when an error occurs in aufs. +- and more... + + +Multi Layered Stackable Unification Filesystem +---------------------------------------------------------------------- +Most people already knows what it is. +It is a filesystem which unifies several directories and provides a +merged single directory. When users access a file, the access will be +passed/re-directed/converted (sorry, I am not sure which English word is +correct) to the real file on the member filesystem. The member +filesystem is called 'lower filesystem' or 'branch' and has a mode +'readonly' and 'readwrite.' And the deletion for a file on the lower +readonly branch is handled by creating 'whiteout' on the upper writable +branch. + +On LKML, there have been discussions about UnionMount (Jan Blunck, +Bharata B Rao and Valerie Aurora) and Unionfs (Erez Zadok). They took +different approaches to implement the merged-view. +The former tries putting it into VFS, and the latter implements as a +separate filesystem. +(If I misunderstand about these implementations, please let me know and +I shall correct it. Because it is a long time ago when I read their +source files last time). + +UnionMount's approach will be able to small, but may be hard to share +branches between several UnionMount since the whiteout in it is +implemented in the inode on branch filesystem and always +shared. According to Bharata's post, readdir does not seems to be +finished yet. +There are several missing features known in this implementations such as +- for users, the inode number may change silently. eg. copy-up. +- link(2) may break by copy-up. +- read(2) may get an obsoleted filedata (fstat(2) too). +- fcntl(F_SETLK) may be broken by copy-up. +- unnecessary copy-up may happen, for example mmap(MAP_PRIVATE) after + open(O_RDWR). + +In linux-3.18, "overlay" filesystem (formerly known as "overlayfs") was +merged into mainline. This is another implementation of UnionMount as a +separated filesystem. All the limitations and known problems which +UnionMount are equally inherited to "overlay" filesystem. + +Unionfs has a longer history. When I started implementing a stackable +filesystem (Aug 2005), it already existed. It has virtual super_block, +inode, dentry and file objects and they have an array pointing lower +same kind objects. After contributing many patches for Unionfs, I +re-started my project AUFS (Jun 2006). + +In AUFS, the structure of filesystem resembles to Unionfs, but I +implemented my own ideas, approaches and enhancements and it became +totally different one. + +Comparing DM snapshot and fs based implementation +- the number of bytes to be copied between devices is much smaller. +- the type of filesystem must be one and only. +- the fs must be writable, no readonly fs, even for the lower original + device. so the compression fs will not be usable. but if we use + loopback mount, we may address this issue. + for instance, + mount /cdrom/squashfs.img /sq + losetup /sq/ext2.img + losetup /somewhere/cow + dmsetup "snapshot /dev/loop0 /dev/loop1 ..." +- it will be difficult (or needs more operations) to extract the + difference between the original device and COW. +- DM snapshot-merge may help a lot when users try merging. in the + fs-layer union, users will use rsync(1). + +You may want to read my old paper "Filesystems in LiveCD" +(http://aufs.sourceforge.net/aufs2/report/sq/sq.pdf). + + +Several characters/aspects/persona of aufs +---------------------------------------------------------------------- + +Aufs has several characters, aspects or persona. +1. a filesystem, callee of VFS helper +2. sub-VFS, caller of VFS helper for branches +3. a virtual filesystem which maintains persistent inode number +4. reader/writer of files on branches such like an application + +1. Callee of VFS Helper +As an ordinary linux filesystem, aufs is a callee of VFS. For instance, +unlink(2) from an application reaches sys_unlink() kernel function and +then vfs_unlink() is called. vfs_unlink() is one of VFS helper and it +calls filesystem specific unlink operation. Actually aufs implements the +unlink operation but it behaves like a redirector. + +2. Caller of VFS Helper for Branches +aufs_unlink() passes the unlink request to the branch filesystem as if +it were called from VFS. So the called unlink operation of the branch +filesystem acts as usual. As a caller of VFS helper, aufs should handle +every necessary pre/post operation for the branch filesystem. +- acquire the lock for the parent dir on a branch +- lookup in a branch +- revalidate dentry on a branch +- mnt_want_write() for a branch +- vfs_unlink() for a branch +- mnt_drop_write() for a branch +- release the lock on a branch + +3. Persistent Inode Number +One of the most important issue for a filesystem is to maintain inode +numbers. This is particularly important to support exporting a +filesystem via NFS. Aufs is a virtual filesystem which doesn't have a +backend block device for its own. But some storage is necessary to +keep and maintain the inode numbers. It may be a large space and may not +suit to keep in memory. Aufs rents some space from its first writable +branch filesystem (by default) and creates file(s) on it. These files +are created by aufs internally and removed soon (currently) keeping +opened. +Note: Because these files are removed, they are totally gone after + unmounting aufs. It means the inode numbers are not persistent + across unmount or reboot. I have a plan to make them really + persistent which will be important for aufs on NFS server. + +4. Read/Write Files Internally (copy-on-write) +Because a branch can be readonly, when you write a file on it, aufs will +"copy-up" it to the upper writable branch internally. And then write the +originally requested thing to the file. Generally kernel doesn't +open/read/write file actively. In aufs, even a single write may cause a +internal "file copy". This behaviour is very similar to cp(1) command. + +Some people may think it is better to pass such work to user space +helper, instead of doing in kernel space. Actually I am still thinking +about it. But currently I have implemented it in kernel space. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/02struct.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/02struct.txt @@ -0,0 +1,258 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Basic Aufs Internal Structure + +Superblock/Inode/Dentry/File Objects +---------------------------------------------------------------------- +As like an ordinary filesystem, aufs has its own +superblock/inode/dentry/file objects. All these objects have a +dynamically allocated array and store the same kind of pointers to the +lower filesystem, branch. +For example, when you build a union with one readwrite branch and one +readonly, mounted /au, /rw and /ro respectively. +- /au = /rw + /ro +- /ro/fileA exists but /rw/fileA + +Aufs lookup operation finds /ro/fileA and gets dentry for that. These +pointers are stored in a aufs dentry. The array in aufs dentry will be, +- [0] = NULL (because /rw/fileA doesn't exist) +- [1] = /ro/fileA + +This style of an array is essentially same to the aufs +superblock/inode/dentry/file objects. + +Because aufs supports manipulating branches, ie. add/delete/change +branches dynamically, these objects has its own generation. When +branches are changed, the generation in aufs superblock is +incremented. And a generation in other object are compared when it is +accessed. When a generation in other objects are obsoleted, aufs +refreshes the internal array. + + +Superblock +---------------------------------------------------------------------- +Additionally aufs superblock has some data for policies to select one +among multiple writable branches, XIB files, pseudo-links and kobject. +See below in detail. +About the policies which supports copy-down a directory, see +wbr_policy.txt too. + + +Branch and XINO(External Inode Number Translation Table) +---------------------------------------------------------------------- +Every branch has its own xino (external inode number translation table) +file. The xino file is created and unlinked by aufs internally. When two +members of a union exist on the same filesystem, they share the single +xino file. +The struct of a xino file is simple, just a sequence of aufs inode +numbers which is indexed by the lower inode number. +In the above sample, assume the inode number of /ro/fileA is i111 and +aufs assigns the inode number i999 for fileA. Then aufs writes 999 as +4(8) bytes at 111 * 4(8) bytes offset in the xino file. + +When the inode numbers are not contiguous, the xino file will be sparse +which has a hole in it and doesn't consume as much disk space as it +might appear. If your branch filesystem consumes disk space for such +holes, then you should specify 'xino=' option at mounting aufs. + +Aufs has a mount option to free the disk blocks for such holes in XINO +files on tmpfs or ramdisk. But it is not so effective actually. If you +meet a problem of disk shortage due to XINO files, then you should try +"tmpfs-ino.patch" (and "vfs-ino.patch" too) in aufs4-standalone.git. +The patch localizes the assignment inumbers per tmpfs-mount and avoid +the holes in XINO files. + +Also a writable branch has three kinds of "whiteout bases". All these +are existed when the branch is joined to aufs, and their names are +whiteout-ed doubly, so that users will never see their names in aufs +hierarchy. +1. a regular file which will be hardlinked to all whiteouts. +2. a directory to store a pseudo-link. +3. a directory to store an "orphan"-ed file temporary. + +1. Whiteout Base + When you remove a file on a readonly branch, aufs handles it as a + logical deletion and creates a whiteout on the upper writable branch + as a hardlink of this file in order not to consume inode on the + writable branch. +2. Pseudo-link Dir + See below, Pseudo-link. +3. Step-Parent Dir + When "fileC" exists on the lower readonly branch only and it is + opened and removed with its parent dir, and then user writes + something into it, then aufs copies-up fileC to this + directory. Because there is no other dir to store fileC. After + creating a file under this dir, the file is unlinked. + +Because aufs supports manipulating branches, ie. add/delete/change +dynamically, a branch has its own id. When the branch order changes, +aufs finds the new index by searching the branch id. + + +Pseudo-link +---------------------------------------------------------------------- +Assume "fileA" exists on the lower readonly branch only and it is +hardlinked to "fileB" on the branch. When you write something to fileA, +aufs copies-up it to the upper writable branch. Additionally aufs +creates a hardlink under the Pseudo-link Directory of the writable +branch. The inode of a pseudo-link is kept in aufs super_block as a +simple list. If fileB is read after unlinking fileA, aufs returns +filedata from the pseudo-link instead of the lower readonly +branch. Because the pseudo-link is based upon the inode, to keep the +inode number by xino (see above) is essentially necessary. + +All the hardlinks under the Pseudo-link Directory of the writable branch +should be restored in a proper location later. Aufs provides a utility +to do this. The userspace helpers executed at remounting and unmounting +aufs by default. +During this utility is running, it puts aufs into the pseudo-link +maintenance mode. In this mode, only the process which began the +maintenance mode (and its child processes) is allowed to operate in +aufs. Some other processes which are not related to the pseudo-link will +be allowed to run too, but the rest have to return an error or wait +until the maintenance mode ends. If a process already acquires an inode +mutex (in VFS), it has to return an error. + + +XIB(external inode number bitmap) +---------------------------------------------------------------------- +Addition to the xino file per a branch, aufs has an external inode number +bitmap in a superblock object. It is also an internal file such like a +xino file. +It is a simple bitmap to mark whether the aufs inode number is in-use or +not. +To reduce the file I/O, aufs prepares a single memory page to cache xib. + +As well as XINO files, aufs has a feature to truncate/refresh XIB to +reduce the number of consumed disk blocks for these files. + + +Virtual or Vertical Dir, and Readdir in Userspace +---------------------------------------------------------------------- +In order to support multiple layers (branches), aufs readdir operation +constructs a virtual dir block on memory. For readdir, aufs calls +vfs_readdir() internally for each dir on branches, merges their entries +with eliminating the whiteout-ed ones, and sets it to file (dir) +object. So the file object has its entry list until it is closed. The +entry list will be updated when the file position is zero and becomes +obsoleted. This decision is made in aufs automatically. + +The dynamically allocated memory block for the name of entries has a +unit of 512 bytes (by default) and stores the names contiguously (no +padding). Another block for each entry is handled by kmem_cache too. +During building dir blocks, aufs creates hash list and judging whether +the entry is whiteouted by its upper branch or already listed. +The merged result is cached in the corresponding inode object and +maintained by a customizable life-time option. + +Some people may call it can be a security hole or invite DoS attack +since the opened and once readdir-ed dir (file object) holds its entry +list and becomes a pressure for system memory. But I'd say it is similar +to files under /proc or /sys. The virtual files in them also holds a +memory page (generally) while they are opened. When an idea to reduce +memory for them is introduced, it will be applied to aufs too. +For those who really hate this situation, I've developed readdir(3) +library which operates this merging in userspace. You just need to set +LD_PRELOAD environment variable, and aufs will not consume no memory in +kernel space for readdir(3). + + +Workqueue +---------------------------------------------------------------------- +Aufs sometimes requires privilege access to a branch. For instance, +in copy-up/down operation. When a user process is going to make changes +to a file which exists in the lower readonly branch only, and the mode +of one of ancestor directories may not be writable by a user +process. Here aufs copy-up the file with its ancestors and they may +require privilege to set its owner/group/mode/etc. +This is a typical case of a application character of aufs (see +Introduction). + +Aufs uses workqueue synchronously for this case. It creates its own +workqueue. The workqueue is a kernel thread and has privilege. Aufs +passes the request to call mkdir or write (for example), and wait for +its completion. This approach solves a problem of a signal handler +simply. +If aufs didn't adopt the workqueue and changed the privilege of the +process, then the process may receive the unexpected SIGXFSZ or other +signals. + +Also aufs uses the system global workqueue ("events" kernel thread) too +for asynchronous tasks, such like handling inotify/fsnotify, re-creating a +whiteout base and etc. This is unrelated to a privilege. +Most of aufs operation tries acquiring a rw_semaphore for aufs +superblock at the beginning, at the same time waits for the completion +of all queued asynchronous tasks. + + +Whiteout +---------------------------------------------------------------------- +The whiteout in aufs is very similar to Unionfs's. That is represented +by its filename. UnionMount takes an approach of a file mode, but I am +afraid several utilities (find(1) or something) will have to support it. + +Basically the whiteout represents "logical deletion" which stops aufs to +lookup further, but also it represents "dir is opaque" which also stop +further lookup. + +In aufs, rmdir(2) and rename(2) for dir uses whiteout alternatively. +In order to make several functions in a single systemcall to be +revertible, aufs adopts an approach to rename a directory to a temporary +unique whiteouted name. +For example, in rename(2) dir where the target dir already existed, aufs +renames the target dir to a temporary unique whiteouted name before the +actual rename on a branch, and then handles other actions (make it opaque, +update the attributes, etc). If an error happens in these actions, aufs +simply renames the whiteouted name back and returns an error. If all are +succeeded, aufs registers a function to remove the whiteouted unique +temporary name completely and asynchronously to the system global +workqueue. + + +Copy-up +---------------------------------------------------------------------- +It is a well-known feature or concept. +When user modifies a file on a readonly branch, aufs operate "copy-up" +internally and makes change to the new file on the upper writable branch. +When the trigger systemcall does not update the timestamps of the parent +dir, aufs reverts it after copy-up. + + +Move-down (aufs3.9 and later) +---------------------------------------------------------------------- +"Copy-up" is one of the essential feature in aufs. It copies a file from +the lower readonly branch to the upper writable branch when a user +changes something about the file. +"Move-down" is an opposite action of copy-up. Basically this action is +ran manually instead of automatically and internally. +For desgin and implementation, aufs has to consider these issues. +- whiteout for the file may exist on the lower branch. +- ancestor directories may not exist on the lower branch. +- diropq for the ancestor directories may exist on the upper branch. +- free space on the lower branch will reduce. +- another access to the file may happen during moving-down, including + UDBA (see "Revalidate Dentry and UDBA"). +- the file should not be hard-linked nor pseudo-linked. they should be + handled by auplink utility later. + +Sometimes users want to move-down a file from the upper writable branch +to the lower readonly or writable branch. For instance, +- the free space of the upper writable branch is going to run out. +- create a new intermediate branch between the upper and lower branch. +- etc. + +For this purpose, use "aumvdown" command in aufs-util.git. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/03atomic_open.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/03atomic_open.txt @@ -0,0 +1,85 @@ + +# Copyright (C) 2015-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Support for a branch who has its ->atomic_open() +---------------------------------------------------------------------- +The filesystems who implement its ->atomic_open() are not majority. For +example NFSv4 does, and aufs should call NFSv4 ->atomic_open, +particularly for open(O_CREAT|O_EXCL, 0400) case. Other than +->atomic_open(), NFSv4 returns an error for this open(2). While I am not +sure whether all filesystems who have ->atomic_open() behave like this, +but NFSv4 surely returns the error. + +In order to support ->atomic_open() for aufs, there are a few +approaches. + +A. Introduce aufs_atomic_open() + - calls one of VFS:do_last(), lookup_open() or atomic_open() for + branch fs. +B. Introduce aufs_atomic_open() calling create, open and chmod. this is + an aufs user Pip Cet's approach + - calls aufs_create(), VFS finish_open() and notify_change(). + - pass fake-mode to finish_open(), and then correct the mode by + notify_change(). +C. Extend aufs_open() to call branch fs's ->atomic_open() + - no aufs_atomic_open(). + - aufs_lookup() registers the TID to an aufs internal object. + - aufs_create() does nothing when the matching TID is registered, but + registers the mode. + - aufs_open() calls branch fs's ->atomic_open() when the matching + TID is registered. +D. Extend aufs_open() to re-try branch fs's ->open() with superuser's + credential + - no aufs_atomic_open(). + - aufs_create() registers the TID to an internal object. this info + represents "this process created this file just now." + - when aufs gets EACCES from branch fs's ->open(), then confirm the + registered TID and re-try open() with superuser's credential. + +Pros and cons for each approach. + +A. + - straightforward but highly depends upon VFS internal. + - the atomic behavaiour is kept. + - some of parameters such as nameidata are hard to reproduce for + branch fs. + - large overhead. +B. + - easy to implement. + - the atomic behavaiour is lost. +C. + - the atomic behavaiour is kept. + - dirty and tricky. + - VFS checks whether the file is created correctly after calling + ->create(), which means this approach doesn't work. +D. + - easy to implement. + - the atomic behavaiour is lost. + - to open a file with superuser's credential and give it to a user + process is a bad idea, since the file object keeps the credential + in it. It may affect LSM or something. This approach doesn't work + either. + +The approach A is ideal, but it hard to implement. So here is a +variation of A, which is to be implemented. + +A-1. Introduce aufs_atomic_open() + - calls branch fs ->atomic_open() if exists. otherwise calls + vfs_create() and finish_open(). + - the demerit is that the several checks after branch fs + ->atomic_open() are lost. in the ordinary case, the checks are + done by VFS:do_last(), lookup_open() and atomic_open(). some can + be implemented in aufs, but not all I am afraid. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/03lookup.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/03lookup.txt @@ -0,0 +1,113 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Lookup in a Branch +---------------------------------------------------------------------- +Since aufs has a character of sub-VFS (see Introduction), it operates +lookup for branches as VFS does. It may be a heavy work. But almost all +lookup operation in aufs is the simplest case, ie. lookup only an entry +directly connected to its parent. Digging down the directory hierarchy +is unnecessary. VFS has a function lookup_one_len() for that use, and +aufs calls it. + +When a branch is a remote filesystem, aufs basically relies upon its +->d_revalidate(), also aufs forces the hardest revalidate tests for +them. +For d_revalidate, aufs implements three levels of revalidate tests. See +"Revalidate Dentry and UDBA" in detail. + + +Test Only the Highest One for the Directory Permission (dirperm1 option) +---------------------------------------------------------------------- +Let's try case study. +- aufs has two branches, upper readwrite and lower readonly. + /au = /rw + /ro +- "dirA" exists under /ro, but /rw. and its mode is 0700. +- user invoked "chmod a+rx /au/dirA" +- the internal copy-up is activated and "/rw/dirA" is created and its + permission bits are set to world readable. +- then "/au/dirA" becomes world readable? + +In this case, /ro/dirA is still 0700 since it exists in readonly branch, +or it may be a natively readonly filesystem. If aufs respects the lower +branch, it should not respond readdir request from other users. But user +allowed it by chmod. Should really aufs rejects showing the entries +under /ro/dirA? + +To be honest, I don't have a good solution for this case. So aufs +implements 'dirperm1' and 'nodirperm1' mount options, and leave it to +users. +When dirperm1 is specified, aufs checks only the highest one for the +directory permission, and shows the entries. Otherwise, as usual, checks +every dir existing on all branches and rejects the request. + +As a side effect, dirperm1 option improves the performance of aufs +because the number of permission check is reduced when the number of +branch is many. + + +Revalidate Dentry and UDBA (User's Direct Branch Access) +---------------------------------------------------------------------- +Generally VFS helpers re-validate a dentry as a part of lookup. +0. digging down the directory hierarchy. +1. lock the parent dir by its i_mutex. +2. lookup the final (child) entry. +3. revalidate it. +4. call the actual operation (create, unlink, etc.) +5. unlock the parent dir + +If the filesystem implements its ->d_revalidate() (step 3), then it is +called. Actually aufs implements it and checks the dentry on a branch is +still valid. +But it is not enough. Because aufs has to release the lock for the +parent dir on a branch at the end of ->lookup() (step 2) and +->d_revalidate() (step 3) while the i_mutex of the aufs dir is still +held by VFS. +If the file on a branch is changed directly, eg. bypassing aufs, after +aufs released the lock, then the subsequent operation may cause +something unpleasant result. + +This situation is a result of VFS architecture, ->lookup() and +->d_revalidate() is separated. But I never say it is wrong. It is a good +design from VFS's point of view. It is just not suitable for sub-VFS +character in aufs. + +Aufs supports such case by three level of revalidation which is +selectable by user. +1. Simple Revalidate + Addition to the native flow in VFS's, confirm the child-parent + relationship on the branch just after locking the parent dir on the + branch in the "actual operation" (step 4). When this validation + fails, aufs returns EBUSY. ->d_revalidate() (step 3) in aufs still + checks the validation of the dentry on branches. +2. Monitor Changes Internally by Inotify/Fsnotify + Addition to above, in the "actual operation" (step 4) aufs re-lookup + the dentry on the branch, and returns EBUSY if it finds different + dentry. + Additionally, aufs sets the inotify/fsnotify watch for every dir on branches + during it is in cache. When the event is notified, aufs registers a + function to kernel 'events' thread by schedule_work(). And the + function sets some special status to the cached aufs dentry and inode + private data. If they are not cached, then aufs has nothing to + do. When the same file is accessed through aufs (step 0-3) later, + aufs will detect the status and refresh all necessary data. + In this mode, aufs has to ignore the event which is fired by aufs + itself. +3. No Extra Validation + This is the simplest test and doesn't add any additional revalidation + test, and skip the revalidation in step 4. It is useful and improves + aufs performance when system surely hide the aufs branches from user, + by over-mounting something (or another method). --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/04branch.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/04branch.txt @@ -0,0 +1,74 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Branch Manipulation + +Since aufs supports dynamic branch manipulation, ie. add/remove a branch +and changing its permission/attribute, there are a lot of works to do. + + +Add a Branch +---------------------------------------------------------------------- +o Confirm the adding dir exists outside of aufs, including loopback + mount, and its various attributes. +o Initialize the xino file and whiteout bases if necessary. + See struct.txt. + +o Check the owner/group/mode of the directory + When the owner/group/mode of the adding directory differs from the + existing branch, aufs issues a warning because it may impose a + security risk. + For example, when a upper writable branch has a world writable empty + top directory, a malicious user can create any files on the writable + branch directly, like copy-up and modify manually. If something like + /etc/{passwd,shadow} exists on the lower readonly branch but the upper + writable branch, and the writable branch is world-writable, then a + malicious guy may create /etc/passwd on the writable branch directly + and the infected file will be valid in aufs. + I am afraid it can be a security issue, but aufs can do nothing except + producing a warning. + + +Delete a Branch +---------------------------------------------------------------------- +o Confirm the deleting branch is not busy + To be general, there is one merit to adopt "remount" interface to + manipulate branches. It is to discard caches. At deleting a branch, + aufs checks the still cached (and connected) dentries and inodes. If + there are any, then they are all in-use. An inode without its + corresponding dentry can be alive alone (for example, inotify/fsnotify case). + + For the cached one, aufs checks whether the same named entry exists on + other branches. + If the cached one is a directory, because aufs provides a merged view + to users, as long as one dir is left on any branch aufs can show the + dir to users. In this case, the branch can be removed from aufs. + Otherwise aufs rejects deleting the branch. + + If any file on the deleting branch is opened by aufs, then aufs + rejects deleting. + + +Modify the Permission of a Branch +---------------------------------------------------------------------- +o Re-initialize or remove the xino file and whiteout bases if necessary. + See struct.txt. + +o rw --> ro: Confirm the modifying branch is not busy + Aufs rejects the request if any of these conditions are true. + - a file on the branch is mmap-ed. + - a regular file on the branch is opened for write and there is no + same named entry on the upper branch. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/05wbr_policy.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/05wbr_policy.txt @@ -0,0 +1,64 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Policies to Select One among Multiple Writable Branches +---------------------------------------------------------------------- +When the number of writable branch is more than one, aufs has to decide +the target branch for file creation or copy-up. By default, the highest +writable branch which has the parent (or ancestor) dir of the target +file is chosen (top-down-parent policy). +By user's request, aufs implements some other policies to select the +writable branch, for file creation several policies, round-robin, +most-free-space, and other policies. For copy-up, top-down-parent, +bottom-up-parent, bottom-up and others. + +As expected, the round-robin policy selects the branch in circular. When +you have two writable branches and creates 10 new files, 5 files will be +created for each branch. mkdir(2) systemcall is an exception. When you +create 10 new directories, all will be created on the same branch. +And the most-free-space policy selects the one which has most free +space among the writable branches. The amount of free space will be +checked by aufs internally, and users can specify its time interval. + +The policies for copy-up is more simple, +top-down-parent is equivalent to the same named on in create policy, +bottom-up-parent selects the writable branch where the parent dir +exists and the nearest upper one from the copyup-source, +bottom-up selects the nearest upper writable branch from the +copyup-source, regardless the existence of the parent dir. + +There are some rules or exceptions to apply these policies. +- If there is a readonly branch above the policy-selected branch and + the parent dir is marked as opaque (a variation of whiteout), or the + target (creating) file is whiteout-ed on the upper readonly branch, + then the result of the policy is ignored and the target file will be + created on the nearest upper writable branch than the readonly branch. +- If there is a writable branch above the policy-selected branch and + the parent dir is marked as opaque or the target file is whiteouted + on the branch, then the result of the policy is ignored and the target + file will be created on the highest one among the upper writable + branches who has diropq or whiteout. In case of whiteout, aufs removes + it as usual. +- link(2) and rename(2) systemcalls are exceptions in every policy. + They try selecting the branch where the source exists as possible + since copyup a large file will take long time. If it can't be, + ie. the branch where the source exists is readonly, then they will + follow the copyup policy. +- There is an exception for rename(2) when the target exists. + If the rename target exists, aufs compares the index of the branches + where the source and the target exists and selects the higher + one. If the selected branch is readonly, then aufs follows the + copyup policy. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/06dirren.dot +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/06dirren.dot @@ -0,0 +1,31 @@ + +// to view this graph, run dot(1) command in GRAPHVIZ. + +digraph G { +node [shape=box]; +whinfo [label="detailed info file\n(lower_brid_root-hinum, h_inum, namelen, old name)"]; + +node [shape=oval]; + +aufs_rename -> whinfo [label="store/remove"]; + +node [shape=oval]; +inode_list [label="h_inum list in branch\ncache"]; + +node [shape=box]; +whinode [label="h_inum list file"]; + +node [shape=oval]; +brmgmt [label="br_add/del/mod/umount"]; + +brmgmt -> inode_list [label="create/remove"]; +brmgmt -> whinode [label="load/store"]; + +inode_list -> whinode [style=dashed,dir=both]; + +aufs_rename -> inode_list [label="add/del"]; + +aufs_lookup -> inode_list [label="search"]; + +aufs_lookup -> whinfo [label="load/remove"]; +} --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/06dirren.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/06dirren.txt @@ -0,0 +1,102 @@ + +# Copyright (C) 2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Special handling for renaming a directory (DIRREN) +---------------------------------------------------------------------- +First, let's assume we have a simple usecase. + +- /u = /rw + /ro +- /rw/dirA exists +- /ro/dirA and /ro/dirA/file exist too +- there is no dirB on both branches +- a user issues rename("dirA", "dirB") + +Now, what should aufs behave against this rename(2)? +There are a few possible cases. + +A. returns EROFS. + since dirA exists on a readonly branch which cannot be renamed. +B. returns EXDEV. + it is possible to copy-up dirA (only the dir itself), but the child + entries ("file" in this case) should not be. it must be a bad + approach to copy-up recursively. +C. returns a success. + even the branch /ro is readonly, aufs tries renaming it. Obviously it + is a violation of aufs' policy. +D. construct an extra information which indicates that /ro/dirA should + be handled as the name of dirB. + overlayfs has a similar feature called REDIRECT. + +Until now, aufs implements the case B only which returns EXDEV, and +expects the userspace application behaves like mv(1) which tries +issueing rename(2) recursively. + +A new aufs feature called DIRREN is introduced which implements the case +D. There are several "extra information" added. + +1. detailed info per renamed directory + path: /rw/dirB/$AUFS_WH_DR_INFO_PFX. +2. the inode-number list of directories on a branch + path: /rw/dirB/$AUFS_WH_DR_BRHINO + +The filename of "detailed info per directory" represents the lower +branch, and its format is +- a type of the branch id + one of these. + + uuid (not implemented yet) + + fsid + + dev +- the inode-number of the branch root dir + +And it contains these info in a single regular file. +- magic number +- branch's inode-number of the logically renamed dir +- the name of the before-renamed dir + +The "detailed info per directory" file is created in aufs rename(2), and +loaded in any lookup. +The info is considered in lookup for the matching case only. Here +"matching" means that the root of branch (in the info filename) is same +to the current looking-up branch. After looking-up the before-renamed +name, the inode-number is compared. And the matched dentry is used. + +The "inode-number list of directories" is a regular file which contains +simply the inode-numbers on the branch. The file is created or updated +in removing the branch, and loaded in adding the branch. Its lifetime is +equal to the branch. +The list is refered in lookup, and when the current target inode is +found in the list, the aufs tries loading the "detailed info per +directory" and get the changed and valid name of the dir. + +Theoretically these "extra informaiton" may be able to be put into XATTR +in the dir inode. But aufs doesn't choose this way because +1. XATTR may not be supported by the branch (or its configuration) +2. XATTR may have its size limit. +3. XATTR may be less easy to convert than a regular file, when the + format of the info is changed in the future. +At the same time, I agree that the regular file approach is much slower +than XATTR approach. So, in the future, aufs may take the XATTR or other +better approach. + +This DIRREN feature is enabled by aufs configuration, and is activated +by a new mount option. + +For the more complicated case, there is a work with UDBA option, which +is to dected the direct access to the branches (by-passing aufs) and to +maintain the cashes in aufs. Since a single cached aufs dentry may +contains two names, before- and after-rename, the name comparision in +UDBA handler may not work correctly. In this case, the behaviour will be +equivalen to udba=reval case. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/06fhsm.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/06fhsm.txt @@ -0,0 +1,120 @@ + +# Copyright (C) 2011-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +File-based Hierarchical Storage Management (FHSM) +---------------------------------------------------------------------- +Hierarchical Storage Management (or HSM) is a well-known feature in the +storage world. Aufs provides this feature as file-based with multiple +writable branches, based upon the principle of "Colder, the Lower". +Here the word "colder" means that the less used files, and "lower" means +that the position in the order of the stacked branches vertically. +These multiple writable branches are prioritized, ie. the topmost one +should be the fastest drive and be used heavily. + +o Characters in aufs FHSM story +- aufs itself and a new branch attribute. +- a new ioctl interface to move-down and to establish a connection with + the daemon ("move-down" is a converse of "copy-up"). +- userspace tool and daemon. + +The userspace daemon establishes a connection with aufs and waits for +the notification. The notified information is very similar to struct +statfs containing the number of consumed blocks and inodes. +When the consumed blocks/inodes of a branch exceeds the user-specified +upper watermark, the daemon activates its move-down process until the +consumed blocks/inodes reaches the user-specified lower watermark. + +The actual move-down is done by aufs based upon the request from +user-space since we need to maintain the inode number and the internal +pointer arrays in aufs. + +Currently aufs FHSM handles the regular files only. Additionally they +must not be hard-linked nor pseudo-linked. + + +o Cowork of aufs and the user-space daemon + During the userspace daemon established the connection, aufs sends a + small notification to it whenever aufs writes something into the + writable branch. But it may cost high since aufs issues statfs(2) + internally. So user can specify a new option to cache the + info. Actually the notification is controlled by these factors. + + the specified cache time. + + classified as "force" by aufs internally. + Until the specified time expires, aufs doesn't send the info + except the forced cases. When aufs decide forcing, the info is always + notified to userspace. + For example, the number of free inodes is generally large enough and + the shortage of it happens rarely. So aufs doesn't force the + notification when creating a new file, directory and others. This is + the typical case which aufs doesn't force. + When aufs writes the actual filedata and the files consumes any of new + blocks, the aufs forces notifying. + + +o Interfaces in aufs +- New branch attribute. + + fhsm + Specifies that the branch is managed by FHSM feature. In other word, + participant in the FHSM. + When nofhsm is set to the branch, it will not be the source/target + branch of the move-down operation. This attribute is set + independently from coo and moo attributes, and if you want full + FHSM, you should specify them as well. +- New mount option. + + fhsm_sec + Specifies a second to suppress many less important info to be + notified. +- New ioctl. + + AUFS_CTL_FHSM_FD + create a new file descriptor which userspace can read the notification + (a subset of struct statfs) from aufs. +- Module parameter 'brs' + It has to be set to 1. Otherwise the new mount option 'fhsm' will not + be set. +- mount helpers /sbin/mount.aufs and /sbin/umount.aufs + When there are two or more branches with fhsm attributes, + /sbin/mount.aufs invokes the user-space daemon and /sbin/umount.aufs + terminates it. As a result of remounting and branch-manipulation, the + number of branches with fhsm attribute can be one. In this case, + /sbin/mount.aufs will terminate the user-space daemon. + + +Finally the operation is done as these steps in kernel-space. +- make sure that, + + no one else is using the file. + + the file is not hard-linked. + + the file is not pseudo-linked. + + the file is a regular file. + + the parent dir is not opaqued. +- find the target writable branch. +- make sure the file is not whiteout-ed by the upper (than the target) + branch. +- make the parent dir on the target branch. +- mutex lock the inode on the branch. +- unlink the whiteout on the target branch (if exists). +- lookup and create the whiteout-ed temporary name on the target branch. +- copy the file as the whiteout-ed temporary name on the target branch. +- rename the whiteout-ed temporary name to the original name. +- unlink the file on the source branch. +- maintain the internal pointer array and the external inode number + table (XINO). +- maintain the timestamps and other attributes of the parent dir and the + file. + +And of course, in every step, an error may happen. So the operation +should restore the original file state after an error happens. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/06mmap.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/06mmap.txt @@ -0,0 +1,72 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +mmap(2) -- File Memory Mapping +---------------------------------------------------------------------- +In aufs, the file-mapped pages are handled by a branch fs directly, no +interaction with aufs. It means aufs_mmap() calls the branch fs's +->mmap(). +This approach is simple and good, but there is one problem. +Under /proc, several entries show the mmapped files by its path (with +device and inode number), and the printed path will be the path on the +branch fs's instead of virtual aufs's. +This is not a problem in most cases, but some utilities lsof(1) (and its +user) may expect the path on aufs. + +To address this issue, aufs adds a new member called vm_prfile in struct +vm_area_struct (and struct vm_region). The original vm_file points to +the file on the branch fs in order to handle everything correctly as +usual. The new vm_prfile points to a virtual file in aufs, and the +show-functions in procfs refers to vm_prfile if it is set. +Also we need to maintain several other places where touching vm_file +such like +- fork()/clone() copies vma and the reference count of vm_file is + incremented. +- merging vma maintains the ref count too. + +This is not a good approach. It just fakes the printed path. But it +leaves all behaviour around f_mapping unchanged. This is surely an +advantage. +Actually aufs had adopted another complicated approach which calls +generic_file_mmap() and handles struct vm_operations_struct. In this +approach, aufs met a hard problem and I could not solve it without +switching the approach. + +There may be one more another approach which is +- bind-mount the branch-root onto the aufs-root internally +- grab the new vfsmount (ie. struct mount) +- lazy-umount the branch-root internally +- in open(2) the aufs-file, open the branch-file with the hidden + vfsmount (instead of the original branch's vfsmount) +- ideally this "bind-mount and lazy-umount" should be done atomically, + but it may be possible from userspace by the mount helper. + +Adding the internal hidden vfsmount and using it in opening a file, the +file path under /proc will be printed correctly. This approach looks +smarter, but is not possible I am afraid. +- aufs-root may be bind-mount later. when it happens, another hidden + vfsmount will be required. +- it is hard to get the chance to bind-mount and lazy-umount + + in kernel-space, FS can have vfsmount in open(2) via + file->f_path, and aufs can know its vfsmount. But several locks are + already acquired, and if aufs tries to bind-mount and lazy-umount + here, then it may cause a deadlock. + + in user-space, bind-mount doesn't invoke the mount helper. +- since /proc shows dev and ino, aufs has to give vma these info. it + means a new member vm_prinode will be necessary. this is essentially + equivalent to vm_prfile described above. + +I have to give up this "looks-smater" approach. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/06xattr.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/06xattr.txt @@ -0,0 +1,96 @@ + +# Copyright (C) 2014-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Listing XATTR/EA and getting the value +---------------------------------------------------------------------- +For the inode standard attributes (owner, group, timestamps, etc.), aufs +shows the values from the topmost existing file. This behaviour is good +for the non-dir entries since the bahaviour exactly matches the shown +information. But for the directories, aufs considers all the same named +entries on the lower branches. Which means, if one of the lower entry +rejects readdir call, then aufs returns an error even if the topmost +entry allows it. This behaviour is necessary to respect the branch fs's +security, but can make users confused since the user-visible standard +attributes don't match the behaviour. +To address this issue, aufs has a mount option called dirperm1 which +checks the permission for the topmost entry only, and ignores the lower +entry's permission. + +A similar issue can happen around XATTR. +getxattr(2) and listxattr(2) families behave as if dirperm1 option is +always set. Otherwise these very unpleasant situation would happen. +- listxattr(2) may return the duplicated entries. +- users may not be able to remove or reset the XATTR forever, + + +XATTR/EA support in the internal (copy,move)-(up,down) +---------------------------------------------------------------------- +Generally the extended attributes of inode are categorized as these. +- "security" for LSM and capability. +- "system" for posix ACL, 'acl' mount option is required for the branch + fs generally. +- "trusted" for userspace, CAP_SYS_ADMIN is required. +- "user" for userspace, 'user_xattr' mount option is required for the + branch fs generally. + +Moreover there are some other categories. Aufs handles these rather +unpopular categories as the ordinary ones, ie. there is no special +condition nor exception. + +In copy-up, the support for XATTR on the dst branch may differ from the +src branch. In this case, the copy-up operation will get an error and +the original user operation which triggered the copy-up will fail. It +can happen that even all copy-up will fail. +When both of src and dst branches support XATTR and if an error occurs +during copying XATTR, then the copy-up should fail obviously. That is a +good reason and aufs should return an error to userspace. But when only +the src branch support that XATTR, aufs should not return an error. +For example, the src branch supports ACL but the dst branch doesn't +because the dst branch may natively un-support it or temporary +un-support it due to "noacl" mount option. Of course, the dst branch fs +may NOT return an error even if the XATTR is not supported. It is +totally up to the branch fs. + +Anyway when the aufs internal copy-up gets an error from the dst branch +fs, then aufs tries removing the just copied entry and returns the error +to the userspace. The worst case of this situation will be all copy-up +will fail. + +For the copy-up operation, there two basic approaches. +- copy the specified XATTR only (by category above), and return the + error unconditionally if it happens. +- copy all XATTR, and ignore the error on the specified category only. + +In order to support XATTR and to implement the correct behaviour, aufs +chooses the latter approach and introduces some new branch attributes, +"icexsec", "icexsys", "icextr", "icexusr", and "icexoth". +They correspond to the XATTR namespaces (see above). Additionally, to be +convenient, "icex" is also provided which means all "icex*" attributes +are set (here the word "icex" stands for "ignore copy-error on XATTR"). + +The meaning of these attributes is to ignore the error from setting +XATTR on that branch. +Note that aufs tries copying all XATTR unconditionally, and ignores the +error from the dst branch according to the specified attributes. + +Some XATTR may have its default value. The default value may come from +the parent dir or the environment. If the default value is set at the +file creating-time, it will be overwritten by copy-up. +Some contradiction may happen I am afraid. +Do we need another attribute to stop copying XATTR? I am unsure. For +now, aufs implements the branch attributes to ignore the error. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/07export.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/07export.txt @@ -0,0 +1,58 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Export Aufs via NFS +---------------------------------------------------------------------- +Here is an approach. +- like xino/xib, add a new file 'xigen' which stores aufs inode + generation. +- iget_locked(): initialize aufs inode generation for a new inode, and + store it in xigen file. +- destroy_inode(): increment aufs inode generation and store it in xigen + file. it is necessary even if it is not unlinked, because any data of + inode may be changed by UDBA. +- encode_fh(): for a root dir, simply return FILEID_ROOT. otherwise + build file handle by + + branch id (4 bytes) + + superblock generation (4 bytes) + + inode number (4 or 8 bytes) + + parent dir inode number (4 or 8 bytes) + + inode generation (4 bytes)) + + return value of exportfs_encode_fh() for the parent on a branch (4 + bytes) + + file handle for a branch (by exportfs_encode_fh()) +- fh_to_dentry(): + + find the index of a branch from its id in handle, and check it is + still exist in aufs. + + 1st level: get the inode number from handle and search it in cache. + + 2nd level: if not found in cache, get the parent inode number from + the handle and search it in cache. and then open the found parent + dir, find the matching inode number by vfs_readdir() and get its + name, and call lookup_one_len() for the target dentry. + + 3rd level: if the parent dir is not cached, call + exportfs_decode_fh() for a branch and get the parent on a branch, + build a pathname of it, convert it a pathname in aufs, call + path_lookup(). now aufs gets a parent dir dentry, then handle it as + the 2nd level. + + to open the dir, aufs needs struct vfsmount. aufs keeps vfsmount + for every branch, but not itself. to get this, (currently) aufs + searches in current->nsproxy->mnt_ns list. it may not be a good + idea, but I didn't get other approach. + + test the generation of the gotten inode. +- every inode operation: they may get EBUSY due to UDBA. in this case, + convert it into ESTALE for NFSD. +- readdir(): call lockdep_on/off() because filldir in NFSD calls + lookup_one_len(), vfs_getattr(), encode_fh() and others. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/08shwh.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/08shwh.txt @@ -0,0 +1,52 @@ + +# Copyright (C) 2005-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Show Whiteout Mode (shwh) +---------------------------------------------------------------------- +Generally aufs hides the name of whiteouts. But in some cases, to show +them is very useful for users. For instance, creating a new middle layer +(branch) by merging existing layers. + +(borrowing aufs1 HOW-TO from a user, Michael Towers) +When you have three branches, +- Bottom: 'system', squashfs (underlying base system), read-only +- Middle: 'mods', squashfs, read-only +- Top: 'overlay', ram (tmpfs), read-write + +The top layer is loaded at boot time and saved at shutdown, to preserve +the changes made to the system during the session. +When larger changes have been made, or smaller changes have accumulated, +the size of the saved top layer data grows. At this point, it would be +nice to be able to merge the two overlay branches ('mods' and 'overlay') +and rewrite the 'mods' squashfs, clearing the top layer and thus +restoring save and load speed. + +This merging is simplified by the use of another aufs mount, of just the +two overlay branches using the 'shwh' option. +# mount -t aufs -o ro,shwh,br:/livesys/overlay=ro+wh:/livesys/mods=rr+wh \ + aufs /livesys/merge_union + +A merged view of these two branches is then available at +/livesys/merge_union, and the new feature is that the whiteouts are +visible! +Note that in 'shwh' mode the aufs mount must be 'ro', which will disable +writing to all branches. Also the default mode for all branches is 'ro'. +It is now possible to save the combined contents of the two overlay +branches to a new squashfs, e.g.: +# mksquashfs /livesys/merge_union /path/to/newmods.squash + +This new squashfs archive can be stored on the boot device and the +initramfs will use it to replace the old one at the next boot. --- linux-aws-4.15.0.orig/Documentation/filesystems/aufs/design/10dynop.txt +++ linux-aws-4.15.0/Documentation/filesystems/aufs/design/10dynop.txt @@ -0,0 +1,47 @@ + +# Copyright (C) 2010-2017 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +Dynamically customizable FS operations +---------------------------------------------------------------------- +Generally FS operations (struct inode_operations, struct +address_space_operations, struct file_operations, etc.) are defined as +"static const", but it never means that FS have only one set of +operation. Some FS have multiple sets of them. For instance, ext2 has +three sets, one for XIP, for NOBH, and for normal. +Since aufs overrides and redirects these operations, sometimes aufs has +to change its behaviour according to the branch FS type. More importantly +VFS acts differently if a function (member in the struct) is set or +not. It means aufs should have several sets of operations and select one +among them according to the branch FS definition. + +In order to solve this problem and not to affect the behaviour of VFS, +aufs defines these operations dynamically. For instance, aufs defines +dummy direct_IO function for struct address_space_operations, but it may +not be set to the address_space_operations actually. When the branch FS +doesn't have it, aufs doesn't set it to its address_space_operations +while the function definition itself is still alive. So the behaviour +itself will not change, and it will return an error when direct_IO is +not set. + +The lifetime of these dynamically generated operation object is +maintained by aufs branch object. When the branch is removed from aufs, +the reference counter of the object is decremented. When it reaches +zero, the dynamically generated operation object will be freed. + +This approach is designed to support AIO (io_submit), Direct I/O and +XIP (DAX) mainly. +Currently this approach is applied to address_space_operations for +regular files only. --- linux-aws-4.15.0.orig/Documentation/kmsg/IPVS +++ linux-aws-4.15.0/Documentation/kmsg/IPVS @@ -0,0 +1,81 @@ +/*? Text: "%s(): NULL arg\n" */ +/*? Text: "%s(): NULL scheduler_name\n" */ +/*? Text: "%s(): [%s] pe already existed in the system\n" */ +/*? Text: "%s(): [%s] pe already linked\n" */ +/*? Text: "%s(): [%s] pe is not in the list. failed\n" */ +/*? Text: "%s(): [%s] scheduler already existed in the system\n" */ +/*? Text: "%s(): [%s] scheduler already linked\n" */ +/*? Text: "%s(): [%s] scheduler is not in the list. failed\n" */ +/*? Text: "%s(): done error\n" */ +/*? Text: "%s(): init error\n" */ +/*? Text: "%s(): lower threshold is higher than upper threshold\n" */ +/*? Text: "%s(): no memory\n" */ +/*? Text: "%s(): request for already hashed, called from %pF\n" */ +/*? Text: "%s(): request for unhash flagged, called from %pF\n" */ +/*? Text: "%s(): server weight less than zero\n" */ +/*? Text: "%s: %s %pI4:%d - %s\n" */ +/*? Text: "%s: %s [%pI6]:%d - %s\n" */ +/*? Text: "%s: %s [%pI6c]:%d - %s\n" */ +/*? Text: "%s: FWM %u 0x%08X - %s\n" */ +/*? Text: "%s: enter\n" */ +/*? Text: "%s: loaded support on port[%d] = %d\n" */ +/*? Text: "BACKUP v0, Dropping buffer bogus conn options\n" */ +/*? Text: "BACKUP v0, bogus conn\n" */ +/*? Text: "BACKUP, Dropping buffer, Err: %d in decoding\n" */ +/*? Text: "BACKUP, Dropping buffer, Unknown version %d\n" */ +/*? Text: "BACKUP, Dropping buffer, msg > buffer\n" */ +/*? Text: "BACKUP, Dropping buffer, to small\n" */ +/*? Text: "BACKUP, Invalid PE parameters\n" */ +/*? Text: "BUG control DEL with n=0 : %s:%d to %s:%d\n" */ +/*? Text: "Connection hash table configured (size=%d, memory=%ldKbytes)\n" */ +/*? Text: "Error binding address of the mcast interface\n" */ +/*? Text: "Error binding to the multicast addr\n" */ +/*? Text: "Error connecting to the multicast addr\n" */ +/*? Text: "Error during creation of socket; terminating\n" */ +/*? Text: "Error joining to the multicast group\n" */ +/*? Text: "Error setting outbound mcast interface\n" */ +/*? Text: "Failed to stop Backup Daemon\n" */ +/*? Text: "Failed to stop Master Daemon\n" */ +/*? Text: "Registered protocols (%s)\n" */ +/*? Text: "SYNC, connection pe_data invalid\n" */ +/*? Text: "Schedule: port zero only supported in persistent services, check your ipvs configuration\n" */ +/*? Text: "Scheduler module ip_vs_%s not found\n" */ +/*? Text: "There is no net ptr to find in the skb in %s() line:%d\n" */ +/*? Text: "UDP no ns data\n" */ +/*? Text: "You probably need to specify IP address on multicast interface.\n" */ +/*? Text: "[%s] pe registered.\n" */ +/*? Text: "[%s] pe unregistered.\n" */ +/*? Text: "[%s] scheduler registered.\n" */ +/*? Text: "[%s] scheduler unregistered.\n" */ +/*? Text: "can't register hooks.\n" */ +/*? Text: "can't register netlink/ioctl.\n" */ +/*? Text: "can't setup connection table.\n" */ +/*? Text: "can't setup control.\n" */ +/*? Text: "cannot register Generic Netlink interface.\n" */ +/*? Text: "cannot register sockopt.\n" */ +/*? Text: "get_ctl: len %u < %u\n" */ +/*? Text: "ip_vs_send_async error %d\n" */ +/*? Text: "ip_vs_sync_buff_create failed.\n" */ +/*? Text: "ipvs loaded.\n" */ +/*? Text: "ipvs unloaded.\n" */ +/*? Text: "length: %u != %u\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "not enough space in Netlink message\n" */ +/*? Text: "persistence engine module ip_vs_pe_%s not found\n" */ +/*? Text: "receiving message error\n" */ +/*? Text: "request control ADD for already controlled: %s:%d to %s:%d\n" */ +/*? Text: "request control DEL for uncontrolled: %s:%d to %s:%d\n" */ +/*? Text: "set_ctl: invalid protocol: %d %pI4:%d %s\n" */ +/*? Text: "set_ctl: len %u != %u\n" */ +/*? Text: "shouldn't reach here, because the box is on the half connection in the tun/dr module.\n" */ +/*? Text: "stopping backup sync thread %d ...\n" */ +/*? Text: "stopping master sync thread %d ...\n" */ +/*? Text: "sync thread started: state = BACKUP, mcast_ifn = %s, syncid = %d\n" */ +/*? Text: "sync thread started: state = MASTER, mcast_ifn = %s, syncid = %d\n" */ +/*? Text: "unknown Generic Netlink command\n" */ +/*? Text: "sync thread started: state = MASTER, mcast_ifn = %s, syncid = %d, id = %d\n" */ +/*? Text: "sync thread started: state = BACKUP, mcast_ifn = %s, syncid = %d, id = %d\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "Unknown mcast interface: %s\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/aes_s390 +++ linux-aws-4.15.0/Documentation/kmsg/s390/aes_s390 @@ -0,0 +1,45 @@ +/*? + * Text: "Allocating XTS fallback algorithm %s failed\n" + * Severity: Error + * Parameter: + * @1: algorithm name + * Description: + * The aes_s390 module failed to allocate a software fallback for the AES + * modes that are not supported by the hardware. A possible reason for this + * problem is that the aes_generic module that provides the fallback + * algorithms is not available. + * User action: + * Ensure that the aes_generic module is available and loaded and reload + * the aes_s390 module. + */ + +/*? + * Text: "Allocating AES fallback algorithm %s failed\n" + * Severity: Error + * Parameter: + * @1: algorithm name + * Description: + * The advanced encryption standard (AES) algorithm includes three modes with + * 128-bit, 192-bit, and 256-bit keys. Your hardware system only provides + * hardware acceleration for the 128-bit mode. The aes_s390 module failed to + * allocate a software fallback for the AES modes that are not supported by the + * hardware. A possible reason for this problem is that the aes_generic module + * that provides the fallback algorithms is not available. + * User action: + * Use the 128-bit mode only or ensure that the aes_generic module is available + * and loaded and reload the aes_s390 module. + */ + +/*? + * Text: "AES hardware acceleration is only available for 128-bit keys\n" + * Severity: Informational + * Description: + * The advanced encryption standard (AES) algorithm includes three modes with + * 128-bit, 192-bit, and 256-bit keys. Your hardware system only provides + * hardware acceleration for the 128-bit key mode. The aes_s390 module + * will use the less performant software fallback algorithm for the 192-bit + * and 256-bit key modes. + * User action: + * None. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/af_iucv +++ linux-aws-4.15.0/Documentation/kmsg/s390/af_iucv @@ -0,0 +1,23 @@ +/*? + * Text: "Application %s on z/VM guest %s exceeds message limit\n" + * Severity: Error + * Parameter: + * @1: application name + * @2: z/VM user ID + * Description: + * Messages or packets destined for the application have accumulated and + * reached the maximum value. The default for the message limit is 65535. + * You can specify a different limit as the value for MSGLIMIT within + * the IUCV statement of the z/VM virtual machine on which the application + * runs. + * User action: + * Ensure that you do not send data faster than the application retrieves + * them. Ensure that the message limit on the z/VM guest virtual machine + * on which the application runs is high enough. + */ + +/*? Text: "Attempt to release alive iucv socket %p\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/ap +++ linux-aws-4.15.0/Documentation/kmsg/s390/ap @@ -0,0 +1,49 @@ +/*? + * Text: "%d is not a valid cryptographic domain\n" + * Severity: Warning + * Parameter: + * @1: AP domain index + * Description: + * The cryptographic domain specified for the 'domain=' module or kernel + * parameter must be an integer in the range 0 to 15. + * User action: + * Reload the cryptographic device driver with a correct module parameter. + * If the device driver has been compiled into the kernel, correct the value + * in the kernel parameter line and reboot Linux. + */ + +/*? + * Text: "The hardware system does not support AP instructions\n" + * Severity: Warning + * Description: + * The ap module addresses AP adapters through AP instructions. The hardware + * system on which the Linux instance runs does not support AP instructions. + * The ap module cannot detect any AP adapters. + * User action: + * Load the ap module only if your Linux instance runs on hardware that + * supports AP instructions. If the ap module has been compiled into the kernel, + * ignore this message. + */ + +/*? + * Text: "Registering adapter interrupts for AP device %02x.%04x failed\n" + * Severity: Error + * Parameter: + * @1: AP device ID + * @2: AP queue + * Description: + * The hardware system supports AP adapter interrupts but failed to enable + * an adapter for interrupts. Possible causes for this error are: + * i) The AP adapter firmware does not support AP interrupts. + * ii) An AP adapter firmware update to a firmware level that supports AP + * adapter interrupts failed. + * iii) The AP adapter firmware has been successfully updated to a level that + * supports AP interrupts but the new firmware has not been activated. + * User action: + * Ensure that the firmware on your AP adapters support AP interrupts and that + * any firmware updates have completed successfully. If necessary, deconfigure + * your cryptographic adapters and reconfigure them to ensure that any firmware + * updates become active, then reload the ap module. If the ap module has been + * compiled into the kernel, reboot Linux. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/appldata +++ linux-aws-4.15.0/Documentation/kmsg/s390/appldata @@ -0,0 +1,91 @@ +/*? + * Text: "Starting the data collection for %s failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: appldata module + * @2: return code + * Description: + * The specified data collection module used the z/VM diagnose call + * DIAG 0xDC to start writing data. z/VM returned an error and the data + * collection could not start. If the return code is 5, your z/VM guest + * virtual machine is not authorized to write data records. + * User action: + * If the return code is 5, ensure that your z/VM guest virtual machine's + * entry in the z/VM directory includes the OPTION APPLMON statement. + * For other return codes see the section about DIAGNOSE Code X'DC' + * in "z/VM CP Programming Services". + */ + +/*? + * Text: "Stopping the data collection for %s failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: appldata module + * @2: return code + * Description: + * The specified data collection module used the z/VM diagnose call DIAG 0xDC + * to stop writing data. z/VM returned an error and the data collection + * continues. + * User action: + * See the section about DIAGNOSE Code X'DC' in "z/VM CP Programming Services". + */ + +/*? + * Text: "Starting a new OS data collection failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * After a CPU hotplug event, the record size for the running operating + * system data collection is no longer correct. The appldata_os module tried + * to start a new data collection with the correct record size but received + * an error from the z/VM diagnose call DIAG 0xDC. Any data collected with + * the current record size might be faulty. + * User action: + * Start a new data collection with the cappldata_os module. For information + * about starting data collections see "Device Drivers, Features, and + * Commands". For information about the return codes see the section about + * DIAGNOSE Code X'DC' in "z/VM CP Programming Services". + */ + +/*? + * Text: "Stopping a faulty OS data collection failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * After a CPU hotplug event, the record size for the running operating + * system data collection is no longer correct. The appldata_os module tried + * to stop the faulty data collection but received an error from the z/VM + * diagnose call DIAG 0xDC. Any data collected with the current record size + * might be faulty. + * User action: + * Try to restart appldata_os monitoring. For information about stopping + * and starting data collections see "Device Drivers, Features, and + * Commands". For information about the return codes see the section about + * DIAGNOSE Code X'DC' in "z/VM CP Programming Services". + */ + +/*? + * Text: "Maximum OS record size %i exceeds the maximum record size %i\n" + * Severity: Error + * Parameter: + * @1: no of bytes + * @2: no of bytes + * Description: + * The OS record size grows with the number of CPUs and is adjusted by the + * appldata_os module in response to CPU hotplug events. For more than 110 + * CPUs the record size would exceed the maximum record size of 4024 bytes + * that is supported by the z/VM hypervisor. To prevent the maximum supported + * record size from being exceeded while data collection is in progress, + * you cannot load the appldata_os module on Linux instances that are + * configured for a maximum of more than 110 CPUs. + * User action: + * If you do not want to collect operating system data, you can ignore this + * message. If you want to collect operating system data, reconfigure your + * Linux instance to support less than 110 CPUs. + */ + +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/bpf_jit +++ linux-aws-4.15.0/Documentation/kmsg/s390/bpf_jit @@ -0,0 +1,16 @@ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ + +/*? + * Text: "Unknown opcode %02x\n" + * Severity: Error + * Parameter: + * @1: Instruction opcode + * Description: + * The BPF JIT compiler has found an unknown instruction in the BPF program + * and therefore stops the compilation. As a fallback, the interpreter is used. + * User action: + * Report this problem and the error message to your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/cio +++ linux-aws-4.15.0/Documentation/kmsg/s390/cio @@ -0,0 +1,247 @@ +/*? + * Text: "%s is not a valid device for the cio_ignore kernel parameter\n" + * Severity: Warning + * Parameter: + * @1: device bus-ID + * Description: + * The device specification for the cio_ignore kernel parameter is + * syntactically incorrect or specifies an unknown device. This device is not + * excluded from being sensed and analyzed. + * User action: + * Correct your device specification in the kernel parameter line to have the + * device excluded when you next reboot Linux. You can write the correct + * device specification to /proc/cio_ignore to add the device to the list of + * devices to be excluded. This does not immediately make the device + * inaccessible but the device is ignored if it disappears and later reappears. + */ + +/*? + * Text: "0.%x.%04x to 0.%x.%04x is not a valid range for cio_ignore\n" + * Severity: Warning + * Parameter: + * @1: from subchannel set ID + * @2: from device number + * @3: to subchannel set ID + * @4: to device number + * Description: + * The device range specified for the cio_ignore kernel parameter is + * syntactically incorrect. No devices specified with this range are + * excluded from being sensed and analyzed. + * User action: + * Correct your range specification in the kernel parameter line to have the + * range of devices excluded when you next reboot Linux. You can write the + * correct range specification to /proc/cio_ignore to add the range of devices + * to the list of devices to be excluded. This does not immediately make the + * devices in the range inaccessible but any of these devices are ignored if + * they disappear and later reappear. + */ + +/*? + * Text: "Processing %s for channel path %x.%02x\n" + * Severity: Notice + * Parameter: + * @1: configuration change + * @2: channel subsystem ID + * @3: CHPID + * Description: + * A configuration change is in progress for the given channel path. + * User action: + * None. + */ + +/*? + * Text: "No CCW console was found\n" + * Severity: Warning + * Description: + * Linux did not find the expected CCW console and tries to use an alternative + * console. A possible reason why the console was not found is that the console + * has been specified in the cio_ignore list. + * User action: + * None, if an appropriate alternative console has been found, and you want + * to use this alternative console. If you want to use the CCW console, ensure + * that is not specified in the cio_ignore list, explicitly specify the console + * with the 'condev=' kernel parameter, and reboot Linux. + */ + +/*? + * Text: "Channel measurement facility initialized using format %s (mode %s)\n" + * Severity: Informational + * Parameter: + * @1: format + * @2: mode + * Description: + * The channel measurement facility has been initialized successfully. + * Format 'extended' should be used for z990 and later mainframe systems. + * Format 'basic' is intended for earlier mainframes. Mode 'autodetected' means + * that the format has been set automatically. Mode 'parameter' means that the + * format has been set according to the 'format=' kernel parameter. + * User action: + * None. + */ + +/*? + * Text: "The CSS device driver initialization failed with errno=%d\n" + * Severity: Alert + * Parameter: + * @1: Return code + * Description: + * The channel subsystem bus could not be established. + * User action: + * See the errno man page to find out what caused the problem. + */ + /*? Text: "%s: Got subchannel machine check but no sch_event handler provided.\n" */ + +/*? + * Text: "%s: Setting the device online failed because it is boxed\n" + * Severity: Warning + * Parameter: + * @1: Device bus-ID + * Description: + * Initialization of a device did not complete because it did not respond in + * time or it was reserved by another operating system. + * User action: + * Make sure that the device is working correctly, then try again to set it + * online. For devices that support the reserve/release mechanism (for example + * DASDs), you can try to override the reservation of the other system by + * writing 'force' to the 'online' sysfs attribute of the affected device. + */ + +/*? + * Text: "%s: Setting the device online failed because it is not operational\n" + * Severity: Warning + * Parameter: + * @1: Device bus-ID + * Description: + * Initialization of a device did not complete because it is not present or + * not operational. + * User action: + * Make sure that the device is present and working correctly, then try again + * to set it online. + */ + +/*? + * Text: "%s: The device stopped operating while being set offline\n" + * Severity: Warning + * Parameter: + * @1: Device bus-ID + * Description: + * While the device was set offline, it was not present or not operational. + * The device is now inactive, but setting it online again might fail. + * User action: + * None. + */ + +/*? + * Text: "%s: The device entered boxed state while being set offline\n" + * Severity: Warning + * Parameter: + * @1: Device bus-ID + * Description: + * While the device was set offline, it did not respond in time or it was + * reserved by another operating system. The device is now inactive, but + * setting it online again might fail. + * User action: + * None. + */ + +/*? + * Text: "Logging for subchannel 0.%x.%04x failed with errno=%d\n" + * Severity: Warning + * Parameter: + * @1: subchannel set ID + * @2: subchannel number + * @3: errno + * Description: + * Capturing model-dependent logs and traces could not be triggered for the + * specified subchannel. + * User action: + * See the errno man page to find out what caused the problem. + */ + +/*? + * Text: "Logging for subchannel 0.%x.%04x was triggered\n" + * Severity: Notice + * Parameter: + * @1: subchannel set ID + * @2: subchannel number + * Description: + * Model-dependent logs and traces may be captured for the specified + * subchannel. + * User action: + * None. + */ + +/*? + * Text: "%s: No interrupt was received within %lus (CS=%02x, DS=%02x, CHPID=%x.%02x)\n" + * Severity: Warning + * Parameter: + * @1: device number + * @2: timeout value + * @3: channel status + * @4: device status + * @5: channel subsystem ID + * @6: CHPID + * Description: + * Internal I/Os are used by the common I/O layer to ensure that devices are + * operational and accessible. + * The common I/O layer did not receive an interrupt for an internal I/O + * during the specified timeout period. + * As a result, the device might assume a state that makes the device + * unusable to Linux until the problem is resolved. + * User action: + * Make sure that the device is working correctly and try the action again. + */ + +/*? + * Text: "Link stopped: RS=%02x RSID=%04x IC=%02x IUPARAMS=%s IUNODEID=%s AUPARAMS=%s AUNODEID=%s\n" + * Severity: Error + * Parameter: + * @1: reporting source + * @2: reporting source ID + * @3: incident code + * @4: incident unit parameters + * @5: incident unit node ID + * @6: attached unit parameters + * @7: attached unit node ID + * + * Description: + * A hardware error has occurred. A unit at one end of an interface + * link has detected a failure in the link or in one of the units attached to + * the link. As a result, data transfer across the link has stopped. In the + * message text, the node IDs of involved units are represented in the + * following format: TTTTTT/MDL,MMM.PPSSSSSSSSSSSS,XXXX where TTTTTT refers to + * the machine type, MDL the model number, MMM the manufacturer, PP the + * manufacturing plant, SSSSSSSSSSSS the unit sequence number and XXXX the + * machine type-dependent physical interface number. If no data is available + * for the unit parameters or node ID field, "n/a" is used instead. + * + * User action: + * Report the problem to your support organization. + */ + +/*? + * Text: "Link degraded: RS=%02x RSID=%04x IC=%02x IUPARAMS=%s IUNODEID=%s AUPARAMS=%s AUNODEID=%s\n" + * Severity: Warning + * Parameter: + * @1: reporting source + * @2: reporting source ID + * @3: incident code + * @4: incident unit parameters + * @5: incident unit node ID + * @6: attached unit parameters + * @7: attached unit node ID + * Description: + * A hardware error has occurred. A unit at one end of an interface + * link has detected a failure in the link or in one of the units attached to + * the link. As a result, data transfer across the link is degraded. In the + * message text, the node IDs of involved units are represented in the + * following format: TTTTTT/MDL,MMM.PPSSSSSSSSSSSS,XXXX where TTTTTT refers to + * the machine type, MDL the model number, MMM the manufacturer, PP the + * manufacturing plant, SSSSSSSSSSSS the unit sequence number and XXXX the + * machine type-dependent physical interface number. If no data is available + * for the unit parameters or node ID field, "n/a" is used instead. + * + * User action: + * Report the problem to your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/cpcmd +++ linux-aws-4.15.0/Documentation/kmsg/s390/cpcmd @@ -0,0 +1,16 @@ +/*? + * Text: "The cpcmd kernel function failed to allocate a response buffer\n" + * Severity: Warning + * Description: + * IPL code, console detection, and device drivers like vmcp or vmlogrdr use + * the cpcmd kernel function to send commands to the z/VM control program (CP). + * If a program that uses the cpcmd function does not allocate a contiguous + * response buffer below 2 GB guest real storage, cpcmd creates a bounce buffer + * to be used as the response buffer. Because of low memory or memory + * fragmentation, cpcmd could not create the bounce buffer. + * User action: + * Look for related page allocation failure messages and at the stack trace to + * find out which program or operation failed. Free some memory and retry the + * failed operation. Consider allocating more memory to your z/VM guest virtual + * machine. + */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/cpu +++ linux-aws-4.15.0/Documentation/kmsg/s390/cpu @@ -0,0 +1,46 @@ +/*? + * Text: "%d configured CPUs, %d standby CPUs\n" + * Severity: Informational + * Parameter: + * @1: number of configured CPUs + * @2: number of standby CPUs + * Description: + * The kernel detected the given number of configured and standby CPUs. + * User action: + * None. + */ + +/*? + * Text: "The CPU configuration topology of the machine is:" + * Severity: Informational + * Description: + * The first six values of the topology information represent fields Mag6 to + * Mag1 of system-information block (SYSIB) 15.1.2. These fields specify the + * maximum numbers of topology-list entries (TLE) at successive topology nesting + * levels. The last value represents the MNest value of SYSIB 15.1.2 which + * specifies the maximum possible nesting that can be configured through + * dynamic changes. For details see the SYSIB 15.1.2 information in the + * "Principles of Operation." + * User action: + * None. + */ + +/*? + * Text: "CPU %i exceeds the maximum %i and is excluded from the dump\n" + * Severity: Warning + * Parameter: + * @1: CPU number + * @2: maximum CPU number + * Description: + * The Linux kernel is used as a system dumper but it runs on more CPUs than + * it has been compiled for with the CONFIG_NR_CPUS kernel configuration + * option. The system dump will be created but information on one or more + * CPUs will be missing. + * User action: + * Update the system dump kernel to a newer version that supports more + * CPUs or reduce the number of installed CPUs and reproduce the problem + * that should be analyzed. If you send the system dump that prompted this + * message to a support organization, be sure to communicate that the dump + * does not include all CPU information. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/cpum_cf +++ linux-aws-4.15.0/Documentation/kmsg/s390/cpum_cf @@ -0,0 +1,68 @@ +/*? + * Text: "Enabling the performance measuring unit failed with rc=%x\n" + * Severity: Error + * Parameter: + * @1: error condition + * Description: + * The device driver failed to enable CPU counter sets with the + * load counter controls (lcctl) instruction. + * See the section about lcctl in "The Load-Program-Parameter and the CPU-Measurement + * Facilities", SA23-2260, for an explanation of the error conditions. + * User action: + * Stop the performance measurement programs and try again. + */ + +/*? + * Text: "Disabling the performance measuring unit failed with rc=%x\n" + * Severity: Error + * Parameter: + * @1: error condition + * Description: + * The device driver failed to disable CPU counter sets with the + * load counter controls (lcctl) instruction. + * See the section about lcctl in "The Load-Program-Parameter and the CPU-Measurement + * Facilities", SA23-2260, for an explanation of the error conditions. + * User action: + * Stop the performance measurement programs and try again. + */ + +/*? + * Text: "Registering the cpum_cf PMU failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: error code + * Description: + * The device driver could not register the Performance Measurement Unit (PMU) + * for the CPU-measurement counter facility. + * A possible cause of this problem is memory constraints. + * User action: + * If the error code is -12 (ENOMEM), consider assigning more memory + * to your Linux instance. + */ + +/*? + * Text: "CPU[%i] Counter data was lost\n" + * Severity: Error + * Parameter: + * @1: cpu number + * Description: + * CPU counter data was lost because of machine internal + * high-priority activities. + * User action: + * None. + */ + +/*? + * Text: "Registering for CPU-measurement alerts failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: error code + * Description: + * The device driver could not register to receive CPU-measurement alerts. + * Alerts make you aware of measurement errors. + * A possible cause of this problem is memory constraints. + * User action: + * If the error code is -12 (ENOMEM), consider assigning more memory + * to your Linux instance. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/cpum_sf +++ linux-aws-4.15.0/Documentation/kmsg/s390/cpum_sf @@ -0,0 +1,104 @@ +/*? + * Text: "The sampling buffer limits have changed to: min=%lu max=%lu (diag=x%lu)\n" + * Severity: Informational + * Parameter: + * @1: minimum size in sample-data-blocks + * @2: maximum size in sample-data-blocks + * @3: size factor for buffering diagnostic-sampling data entries + * Description: + * The minimum or maximum size limit for the sampling facility buffer was + * changed. The change is effective immediately. + * User action: + * None. + */ + +/*? + * Text: "Switching off the sampling facility failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: error condition + * Description: + * The CPU-measurement sampling facility could not be switched off and continues + * to run. For details, see LOAD SAMPLING CONTROLS in + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * If this problem persists, reboot your Linux instance. + */ + +/*? + * Text: "Sample data was lost\n" + * Severity: Error + * Description: + * Sample data was lost because of machine-internal high-priority activities. + * The sampling facility is stopped. + * User action: + * End all performance measurement sessions. Discard the measurement data, + * which are likely to be flawed. Repeat your measurements. + * If the problem persists, contact your hardware administrator. + */ + +/*? + * Text: "Sampling facility support for perf is not available: reason=%04x\n" + * Severity: Error + * Parameter: + * @1: reason code + * Description: + * The device driver could not initialize the sampling facility support. + * Possible reason codes are: + * 0001: The device driver failed to query CPU-measurement sampling facility + * information. + * + * 0002: The device driver does not support the basic-sampling function that + * is available on the LPAR within which the Linux instance runs. + * + * 0003: The device driver could not register to receive CPU-measurement alerts. + * A possible cause of this problem is memory constraints. + * + * 0004: The device driver could not register the Performance Measurement Unit + * (PMU) for the CPU-measurement sampling facility. + * A possible cause of this problem is memory constraints. + * User action: + * Consider assigning more memory to your Linux instance. + */ + +/*? + * Text: "Loading sampling controls failed: op=%i err=%i\n" + * Severity: Error + * Parameter: + * @1: Type of operation + * @2: Error condition + * Description: + * The sampling facility support could not load sampling controls to enable + * (operation type 1) or disable (operation type 2) the CPU-measurement sampling + * facility. For details of the error condition, see LOAD SAMPLING CONTROLS in + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * If the problem persists, reboot your Linux instance. + */ + +/*? + * Text: "A sampling buffer entry is incorrect (alert=0x%x)\n" + * Severity: Error + * Parameter: + * @1: Alert code + * Description: + * An incorrect sampling facility buffer entry was detected. The alert code + * indicates the root cause, for example, an incorrect entry address or an + * incorrect sample-data-block-table entry. + * User action: + * End active performance measurement sessions, for example, perf processes. If + * the problem persists, reboot your Linux instance. + */ + +/*? + * Text: "Registering for s390dbf failed\n" + * Severity: Error + * Description: + * The device driver failed to register for the s390 debug feature. You will + * not receive any debug information. A possible cause of this problem is + * memory constraints. + * User action: + * Consider assigning more memory + * to your Linux instance. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/crc32-vx +++ linux-aws-4.15.0/Documentation/kmsg/s390/crc32-vx @@ -0,0 +1 @@ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/ctcm +++ linux-aws-4.15.0/Documentation/kmsg/s390/ctcm @@ -0,0 +1,202 @@ +/*? + * Text: "%s: An I/O-error occurred on the CTCM device\n" + * Severity: Error + * Parameter: + * @1: bus ID of the CTCM device + * Description: + * An I/O error was detected on one of the subchannels of the CTCM device. + * Depending on the error, the CTCM device driver might attempt an automatic + * recovery. + * User action: + * Check the status of the CTCM device, for example, with ifconfig. If the + * device is not operational, perform a manual recovery. See "Device Drivers, + * Features, and Commands" for details about how to recover a CTCM device. + */ + +/*? + * Text: "%s: An adapter hardware operation timed out\n" + * Severity: Error + * Parameter: + * @1: bus ID of the CTCM device + * Description: + * The CTCM device uses an adapter to physically connect to its communication + * peer. An operation on this adapter timed out. + * User action: + * Check the status of the CTCM device, for example, with ifconfig. If the + * device is not operational, perform a manual recovery. See "Device Drivers, + * Features, and Commands" for details about how to recover a CTCM device. + */ + +/*? + * Text: "%s: An error occurred on the adapter hardware\n" + * Severity: Error + * Parameter: + * @1: bus ID of the CTCM device + * Description: + * The CTCM device uses an adapter to physically connect to its communication + * peer. An operation on this adapter returned an error. + * User action: + * Check the status of the CTCM device, for example, with ifconfig. If the + * device is not operational, perform a manual recovery. See "Device Drivers, + * Features, and Commands" for details about how to recover a CTCM device. + */ + +/*? + * Text: "%s: The communication peer has disconnected\n" + * Severity: Notice + * Parameter: + * @1: channel ID + * Description: + * The remote device has disconnected. Possible reasons are that the remote + * interface has been closed or that the operating system instance with the + * communication peer has been rebooted or shut down. + * User action: + * Check the status of the peer device. Ensure that the peer operating system + * instance is running and that the peer interface is operational. + */ + +/*? + * Text: "%s: The remote operating system is not available\n" + * Severity: Notice + * Parameter: + * @1: channel ID + * Description: + * The operating system instance with the communication peer has disconnected. + * Possible reasons are that the operating system instance has been rebooted + * or shut down. + * User action: + * Ensure that the peer operating system instance is running and that the peer + * interface is operational. + */ + +/*? + * Text: "%s: The adapter received a non-specific IRQ\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the CTCM device + * Description: + * The adapter hardware used by the CTCM device received an IRQ that cannot + * be mapped to a particular device. This is a hardware problem. + * User action: + * Check the status of the CTCM device, for example, with ifconfig. Check if + * the connection to the remote device still works. If the CTCM device is not + * operational, set it offline and back online. If this does not resolve the + * problem, perform a manual recovery. See "Device Drivers, Features, and + * Commands" for details about how to recover a CTCM device. If this problem + * persists, gather Linux debug data, collect the hardware logs, and report the + * problem to your support organization. + */ + +/*? + * Text: "%s: A check occurred on the subchannel\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the CTCM device + * Description: + * A check condition has been detected on the subchannel. + * User action: + * Check if the connection to the remote device still works. If the CTCM device + * is not operational, set it offline and back online. If this does not resolve + * the problem, perform a manual recovery. See "Device Drivers, Features, and + * Commands" for details about how to recover a CTCM device. If this problem + * persists, gather Linux debug data and report the problem to your support + * organization. + */ + +/*? + * Text: "%s: The communication peer is busy\n" + * Severity: Informational + * Parameter: + * @1: channel ID + * Description: + * A busy target device was reported. This might be a temporary problem. + * User action: + * If this problem persists or is reported frequently ensure that the target + * device is working properly. + */ + +/*? + * Text: "%s: The specified target device is not valid\n" + * Severity: Error + * Parameter: + * @1: channel ID + * Description: + * A target device was called with a faulty device specification. This is an + * adapter hardware problem. + * User action: + * Gather Linux debug data, collect the hardware logs, and contact IBM support. + */ + +/*? + * Text: "An I/O operation resulted in error %04x\n" + * Severity: Error + * Parameter: + * @1: channel ID + * @2: error information + * Description: + * A hardware operation ended with an error. + * User action: + * Check the status of the CTCM device, for example, with ifconfig. If the + * device is not operational, perform a manual recovery. See "Device Drivers, + * Features, and Commands" for details about how to recover a CTCM device. + * If this problem persists, gather Linux debug data, collect the hardware logs, + * and report the problem to your support organization. + */ + +/*? + * Text: "%s: Initialization failed with RX/TX init handshake error %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the CTCM device + * @2: error information + * Description: + * A problem occurred during the initialization of the connection. If the + * connection can be established after an automatic recovery, a success message + * is issued. + * User action: + * If the problem is not resolved by the automatic recovery process, check the + * local and remote device. If this problem persists, gather Linux debug data + * and report the problem to your support organization. + */ + +/*? + * Text: "%s: The network backlog for %s is exceeded, package dropped\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the CTCM device + * @2: calling function + * Description: + * There is more network traffic than can be handled by the device. The device + * is closed and some data has not been transmitted. The device might be + * recovered automatically. + * User action: + * Investigate and resolve the congestion. If necessary, set the device + * online to make it operational. + */ + +/*? + * Text: "%s: The XID used in the MPC protocol is not valid, rc = %d\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the CTCM device + * @2: return code + * Description: + * The exchange identification (XID) used by the CTCM device driver when + * in MPC mode is not valid. + * User action: + * Note the error information provided with this message and contact your + * support organization. + */ + +/*? Text: "CTCM driver unloaded\n" */ +/*? Text: "%s: %s Internal error: net_device is NULL, ch = 0x%p\n" */ +/*? Text: "%s / Initializing the ctcm device driver failed, ret = %d\n" */ +/*? Text: "%s: %s: Internal error: Can't determine channel for interrupt device %s\n" */ +/*? Text: "CTCM driver initialized\n" */ +/*? Text: "%s: setup OK : r/w = %s/%s, protocol : %d\n" */ +/*? Text: "%s: Connected with remote side\n" */ +/*? Text: "%s: Restarting device\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/dasd +++ linux-aws-4.15.0/Documentation/kmsg/s390/dasd @@ -0,0 +1,704 @@ +/* dasd_ioctl */ + +/*? + * Text: "%s: The DASD has been put in the quiesce state\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * No I/O operation is possible on this device. + * User action: + * Resume the DASD to enable I/O operations. + */ + +/*? + * Text: "%s: I/O operations have been resumed on the DASD\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD is no longer in state quiesce and I/O operations can be performed + * on the device. + * User action: + * None. + */ + +/*? + * Text: "%s: The DASD cannot be formatted while it is enabled\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD you try to format is enabled. Enabled devices cannot be formatted. + * User action: + * Contact the owner of the formatting tool. + */ + +/*? + * Text: "%s: The specified DASD is a partition and cannot be formatted\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD you try to format is a partition. Partitions cannot be formatted + * separately. You can only format a complete DASD including all its partitions. + * User action: + * Format the complete DASD. + * ATTENTION: Formatting irreversibly destroys all data on all partitions + * of the DASD. + */ + +/*? + * Text: "%s: The specified DASD is a partition and cannot be checked\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD you try to check is a partition. Partitions cannot be checked + * separately. You can only check a complete DASD including all its partitions. + * User action: + * Check the complete DASD. + */ + +/*? + * Text: "%s: Formatting unit %d failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: start track + * @3: return code + * Description: + * The formatting process might have been interrupted by a signal, for example, + * CTRL+C. If the process was not interrupted intentionally, an I/O error + * might have occurred. + * User action: + * Retry to format the device. If the error persists, check the log file for + * related error messages. If you cannot resolve the error, note the return + * code and contact your support organization. + */ + + +/* dasd */ + +/*? + * Text: "%s: Cancelling request %p failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to request + * @3: return code of previous function + * Description: + * In response to a user action, the DASD device driver tried but failed to + * cancel a previously started I/O operation. + * User action: + * Try the action again. + */ + +/*? + * Text: "%s: Flushing the DASD request queue failed for request %p\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to request + * Description: + * As part of the unloading process, the DASD device driver flushes the + * request queue. This failed because a previously started I/O operation + * could not be canceled. + * User action: + * Try again to unload the DASD device driver or to shut down Linux. + */ + +/*? + * Text: "The DASD device driver could not be initialized\n" + * Severity: Informational + * Description: + * The initialization of the DASD device driver failed because of previous + * errors. + * User action: + * Check for related previous error messages. + */ + +/*? + * Text: "%s: Accessing the DASD failed because it is in probeonly mode\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * The dasd= module or kernel parameter specified the probeonly attribute for + * the DASD you are trying to access. The DASD device driver cannot access + * DASDs that are in probeonly mode. + * User action: + * Change the dasd= parameter as to omit probeonly for the DASD and reload + * the DASD device driver. If the DASD device driver has been compiled into + * the kernel, reboot Linux. + */ + +/*? + * Text: "%s: cqr %p timed out (%lus), %i retries remaining\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: request + * @3: timeout value + * @4: number of retries left + * Description: + * A try of the error recovery procedure (ERP) for the channel queued request + * (cqr) timed out and failed to recover the error. ERP continues for the DASD. + * User action: + * Ignore this message if it occurs infrequently and if the recovery succeeds + * during one of the retries. If this error persists, check for related + * previous error messages and report the problem to your support organization. + * + * The timeout can be changed by writing a new value to the sysfs 'expires' attribute of the DASD. The value specifies the timeout in seconds. + */ + +/*? + * Text: "%s: cqr %p timed out (%lus) but cannot be ended, retrying in 5 s\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: request + * @3: timeout value + * Description: + * A try of the error recovery procedure (ERP) for the channel queued request + * (cqr) timed out and failed to recover the error. The I/O request submitted + * during the try could not be canceled. The ERP waits for 5 seconds before + * trying again. + * User action: + * Ignore this message if it occurs infrequently and if the recovery succeeds + * during one of the retries. If this error persists, check for related + * previous error messages and report the problem to your support organization. + * + * The timeout can be changed by writing a new value to the sysfs 'expires' attribute of the DASD. The value specifies the timeout in seconds. + */ + +/*? + * Text: "%s: The DASD cannot be set offline while it is in use\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD cannot be set offline because it is in use by an internal process. + * An action to free the DASD might not have completed yet. + * User action: + * Wait some time and set the DASD offline later. + */ + +/*? + * Text: "%s: The DASD cannot be set offline with open count %i\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: count + * Description: + * The DASD is being used by one or more processes and cannot be set offline. + * User action: + * Ensure that the DASD is not in use anymore, for example, unmount all + * partitions. Then try again to set the DASD offline. + */ + +/*? + * Text: "%s: Setting the DASD online failed with rc=%d\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * Description: + * The DASD could not be set online because of previous errors. + * User action: + * Look for previous error messages. If you cannot resolve the error, note + * the return code and contact your support organization. + */ + +/*? + * Text: "%s Setting the DASD online with discipline %s failed with rc=%i\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: discipline + * @3: return code + * Description: + * The DASD could not be set online because of previous errors. + * User action: + * Look for previous error messages. If you cannot resolve the error, note the + * return code and contact your support organization. + */ + +/*? + * Text: "%s Setting the DASD online failed because of missing DIAG discipline\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD was to be set online with discipline DIAG but this discipline of + * the DASD device driver is not available. + * User action: + * Ensure that the dasd_diag_mod module is loaded. If your Linux system does + * not include this module, you cannot set DASDs online with the DIAG + * discipline. + */ + +/*? + * Text: "%s Setting the DASD online failed because of a missing discipline\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD was to be set online with a DASD device driver discipline that + * is not available. + * User action: + * Ensure that all DASD modules are loaded correctly. + */ + +--------------------------- + +/*? + * Text: "The statistics feature has been switched off\n" + * Severity: Informational + * Description: + * The statistics feature of the DASD device driver has been switched off. + * User action: + * None. + */ + +/*? + * Text: "The statistics feature has been switched on\n" + * Severity: Informational + * Description: + * The statistics feature of the DASD device driver has been switched on. + * User action: + * None. + */ + +/*? + * Text: "The statistics have been reset\n" + * Severity: Informational + * Description: + * The DASD statistics data have been reset. + * User action: + * None. + */ + +/*? + * Text: "%s is not a supported value for /proc/dasd/statistics\n" + * Severity: Warning + * Parameter: + * @1: value + * Description: + * An incorrect value has been written to /proc/dasd/statistics. + * The supported values are: 'set on', 'set off', and 'reset'. + * User action: + * Write a supported value to /proc/dasd/statistics. + */ + +/*? + * Text: "%s is not a valid device range\n" + * Severity: Error + * Parameter: + * @1: range + * Description: + * A device range specified with the dasd= parameter is not valid. + * User action: + * Examine the dasd= parameter and correct the device range. + */ + +/*? + * Text: "The probeonly mode has been activated\n" + * Severity: Informational + * Description: + * The probeonly mode of the DASD device driver has been activated. In this + * mode the device driver rejects any 'open' syscalls with EPERM. + * User action: + * None. + */ + +/*? + * Text: "The IPL device is not a CCW device\n" + * Severity: Error + * Description: + * The value for the dasd= parameter contains the 'ipldev' keyword. During + * the boot process this keyword is replaced with the device from which the + * IPL was performed. The 'ipldev' keyword is not valid if the IPL device is + * not a CCW device. + * User action: + * Do not specify the 'ipldev' keyword when performing an IPL from a device + * other than a CCW device. + */ + +/*? + * Text: "A closing parenthesis ')' is missing in the dasd= parameter\n" + * Severity: Warning + * Description: + * The specification for the dasd= kernel or module parameter has an opening + * parenthesis '(' * without a matching closing parenthesis ')'. + * User action: + * Correct the parameter value. + */ + +/*? + * Text: "The autodetection mode has been activated\n" + * Severity: Informational + * Description: + * The autodetection mode of the DASD device driver has been activated. In + * this mode the DASD device driver sets all detected DASDs online. + * User action: + * None. + */ + +/*? + * Text: "%*s is not a supported device option\n" + * Severity: Warning + * Parameter: + * @1: length of option code + * @2: option code + * Description: + * The dasd= parameter includes an unknown option for a DASD or a device range. + * Options are specified in parenthesis and immediately follow a device or + * device range. + * User action: + * Check the dasd= syntax and remove any unsupported options from the dasd= + * parameter specification. + */ + +/*? + * Text: "PAV support has be deactivated\n" + * Severity: Informational + * Description: + * The 'nopav' keyword has been specified with the dasd= kernel or module + * parameter. The Parallel Access Volume (PAV) support of the DASD device + * driver has been deactivated. + * User action: + * None. + */ + +/*? + * Text: "'nopav' is not supported on z/VM\n" + * Severity: Informational + * Description: + * For Linux instances that run as guest operating systems of the z/VM + * hypervisor Parallel Access Volume (PAV) support is controlled by z/VM not + * by Linux. + * User action: + * Remove 'nopav' from the dasd= module or kernel parameter specification. + */ + +/*? + * Text: "High Performance FICON support has been deactivated\n" + * Severity: Informational + * Description: + * The 'nofcx' keyword has been specified with the dasd= kernel or module + * parameter. The High Performance FICON (transport mode) support of the DASD + * device driver has been deactivated. + * User action: + * None. + */ + +/*? + * Text: "The dasd= parameter value %s has an invalid ending\n" + * Severity: Warning + * Parameter: + * @1: parameter value + * Description: + * The specified value for the dasd= kernel or module parameter is not correct. + * User action: + * Check the module or the kernel parameter. + */ + +/*? + * Text: "Registering the device driver with major number %d failed\n" + * Severity: Warning + * Parameter: + * @1: DASD major + * Description: + * Major number 94 is reserved for the DASD device driver. The DASD device + * driver failed to register with this major number. Another device driver + * might have used major number 94. + * User action: + * Determine which device driver uses major number 94 instead of the DASD + * device driver and unload this device driver. Then try again to load the + * DASD device driver. + */ + +/*? + * Text: "%s: default ERP has run out of retries and failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The error recovery procedure (ERP) tried to recover an error but the number + * of retries for the I/O was exceeded before the error could be resolved. + * User action: + * Check for related previous error messages. + */ + +/*? + * Text: "%s: Unable to terminate request %p on suspend\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to request + * Description: + * As part of the suspend process, the DASD device driver terminates requests + * on the request queue. This failed because a previously started I/O operation + * could not be canceled. The suspend process will be stopped. + * User action: + * Try again to suspend the system. + */ + +/*? + * Text: "%s: ERP failed for the DASD\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * An error recovery procedure (ERP) was performed for the DASD but failed. + * User action: + * Check the message log for previous related error messages. + */ + +/*? + * Text: "%s: An error occurred in the DASD device driver, reason=%s\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: reason code + * Description: + * This problem indicates a program error in the DASD device driver. + * User action: + * Note the reason code and contact your support organization. +*/ + +/*? + * Text: "%s: No operational channel path is left for the device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * All channel paths to the device have become non-operational. The DASD + * device driver suspends I/O operations and queues I/O requests for this + * device until at least one channel path becomes operational again. + * User action: + * Ensure that each channel path to the device has been set up correctly + * and that the related physical cable connections are in place. + */ + +/*? + * Text: "%s: No verified channel paths remain for the device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * All verified channel paths to the device have become non-operational. + * Any other paths to the device have previously been identified as not usable. + * The DASD device driver suspends I/O operations and queues I/O requests + * for this device until at least one channel path becomes operational + * again. + * User action: + * Ensure that each channel path to the device has been set up correctly + * and that the related physical cable connections are in place. + * Set all paths to the device offline and online again to repeat the path + * verification. Alternatively, set the device offline and online again to + * verify all available paths for this device. + * If this problem persists, gather Linux debug data and report the problem + * to your support organization. + */ + +/*? + * Text: "%s: A channel path to the device has become operational\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * At least one channel path of this device has become operational again. + * The DASD device driver resumes I/O operations to the device and processes + * the I/O requests that were queued while there was no operational channel path. + * User action: + * None. + */ + +------------------------------------------------------------------------------------ +/* dasd_diag */ + +/*? + * Text: "%s: A 64-bit DIAG call failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * 64-bit DIAG calls require a 64-bit z/VM version. + * User action: + * Use z/VM 5.2 or later or set the sysfs 'use_diag' attribute of the DASD to 0 + * to switch off DIAG. + */ + +/*? + * Text: "%s: Accessing the DASD failed because of an incorrect format (rc=%d)\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * Description: + * The format of the DASD is not correct. + * User action: + * Check the device format. For details about the return code see the + * section about the INITIALIZE function for DIAGNOSE Code X'250' + * in "z/VM CP Programming Services". If you cannot resolve the error, note + * the return code and contact your support organization. + */ + +/*? + * Text: "%s: New DASD with %ld byte/block, total size %ld KB%s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * @2: bytes per block + * @3: size + * @4: access mode + * Description: + * A DASD with the indicated block size and total size has been set online. + * If the DASD is configured as read-only to the real or virtual hardware, + * the message includes an indication of this hardware access mode. The + * hardware access mode is independent from the 'readonly' attribute of + * the device in sysfs. + * User action: + * None. + */ + +/*? + * Text: "%s: DIAG ERP failed with rc=%d\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * Description: + * An error in the DIAG processing could not be recovered by the error + * recovery procedure (ERP) of the DIAG discipline. + * User action: + * Note the return code, check for related I/O errors, and report this problem + * to your support organization. + */ + +/*? + * Text: "%s: DIAG initialization failed with rc=%d\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * Description: + * Initializing the DASD with the DIAG discipline failed. Possible reasons for + * this problem are that the device has a device type other than FBA or ECKD, + * or has a block size other than one of the supported sizes: + * 512 byte, 1024 byte, 2048 byte, or 4096 byte. + * User action: + * Ensure that the device can be written to and has a supported device type + * and block size. For details about the return code see the section about + * the INITIALIZE function for DIAGNOSE Code X'250' in "z/VM CP Programming + * Services". If you cannot resolve the error, note the error code and contact + * your support organization. + */ + +/*? + * Text: "%s: Device type %d is not supported in DIAG mode\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: device type + * Description: + * Only DASD of type FBA and ECKD are supported in DIAG mode. + * User action: + * Set the sysfs 'use_diag' attribute of the DASD to 0 and try again to access + * the DASD. + */ + +/*? + * Text: "Discipline %s cannot be used without z/VM\n" + * Severity: Informational + * Parameter: + * @1: discipline name + * Description: + * The discipline that is specified with the dasd= kernel or module parameter + * is only available for Linux instances that run as guest operating + * systems of the z/VM hypervisor. + * User action: + * Remove the unsupported discipline from the parameter string. + */ + +/*? + * Text: "%s: The access mode of a DIAG device changed to read-only\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A device changed its access mode from writeable to + * read-only while in use. + * User action: + * Set the device offline, ensure that the device is configured correctly in + * z/VM, then set the device online again. + */ + +------------------------------------------------------------------------------------ +/* dasd_erp */ + +/*? + * Text: "%s: A timeout error occurred for cqr %p\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to request + * Description: + * A channel queued request (cqr) failed because it timed out. + * One possible reason for this error is that a request did not + * complete within the timeout interval specified for the DASD. + * The timeout interval is set as the value of the 'timeout' sysfs + * attribute of a DASD. A value of 0 disables the timeout function. + * The timeout function can be used; for example, by mirroring setups; + * to quickly process a request queue for a DASD that has become unavailable. + * User action: + * Check the message log for previous related error messages. Verify + * that the storage server and the connection from host to storage + * server are operational. If the 'timeout' sysfs attribute of the + * DASD has been set to a value other than 0, verify that this + * setting is intentional and change it if required. + */ + +/*? + * Text: "%s: A transport error occurred for cqr %p\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to request + * Description: + * A channel queued request (cqr) failed because the connection to the + * device was lost and the 'failfast' flag is set for the request. + * This flag can result from, for example: + * + * - A software layer above the DASD device driver; + * for example, in a host based mirroring setup. + * + * - Value 1 for the 'failfast' sysfs attribute of the DASD. + * This setting applies to all requests on the DASD. + * + * User action: + * Ensure that each channel path to the device has been set up + * correctly and that the related physical cable connections are in + * place. If the 'failfast' attribute of the DASD is set to 1, + * verify that this setting is intentional and change it to 0 if required. + */ + +/*? + * Text: "%s Setting the DASD online failed because the required module %s could not be loaded (rc=%d)\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: kernel module name + * @3: return code + * Description: + * The DASD was to be set online with discipline DIAG but this discipline of + * the DASD device driver is not available and an attempt to load the + * corresponding kernel module failed with the specified return code. + * + * User action: + * Ensure that the kernel module with the specified name is correctly installed + * or set the sysfs 'use_diag' attribute of the DASD to 0 to switch off DIAG. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/dasd-eckd +++ linux-aws-4.15.0/Documentation/kmsg/s390/dasd-eckd @@ -0,0 +1,2154 @@ +/* dasd_eckd */ + +/*? + * Text: "%s: ERP failed for the DASD\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * An error recovery procedure (ERP) was performed for the DASD but failed. + * User action: + * Check the message log for previous related error messages. + */ + +/*? + * Text: "%s: An error occurred in the DASD device driver, reason=%s\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: reason code + * Description: + * This problem indicates a program error in the DASD device driver. + * User action: + * Note the reason code and contact your support organization. +*/ + +/*? + * Text: "%s: Allocating memory for private DASD data failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD device driver maintains data structures for each DASD it manages. + * There is not enough memory to allocate these data structures for one or + * more DASD. + * User action: + * Free some memory and try the operation again. + */ + +/*? + * Text: "%s: DASD with %d KB/block, %d KB total size, %d KB/track, %s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * @2: block size + * @3: DASD size + * @4: track size + * @5: disc layout + * Description: + * A DASD with the shown characteristics has been set online. + * User action: + * None. + */ + +/*? + * Text: "%s: Start track number %u used in formatting is too big\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: track number + * Description: + * The DASD format I/O control was used incorrectly by a formatting tool. + * User action: + * Contact the owner of the formatting tool. + */ + +/*? + * Text: "%s: Stop track number %u used in formatting is too big\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: track number + * Description: + * The DASD format I/O control was used incorrectly by a formatting tool. + * User action: + * Contact the owner of the formatting tool. + */ + +/*? + * Text: "%s: The DASD is not formatted\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A DASD has been set online but it has not been formatted yet. You must + * format the DASD before you can use it. + * User action: + * Format the DASD, for example, with dasdfmt. + */ + +/*? + * Text: "%s: 0x%x is not a known command\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: command + * Description: + * This problem is likely to be caused by a programming error. + * User action: + * Contact your support organization. + */ + +/*? + * Text: "%s: Track 0 has no records following the VTOC\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * Linux has identified a volume table of contents (VTOC) on the DASD but + * cannot read any data records following the VTOC. A possible cause of this + * problem is that the DASD has been used with another System z operating + * system. + * User action: + * Format the DASD for usage with Linux, for example, with dasdfmt. + * ATTENTION: Formatting irreversibly destroys all data on the DASD. + */ + +/*? + * Text: "%s: An I/O control call used incorrect flags 0x%x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: flags + * Description: + * The DASD format I/O control was used incorrectly. + * User action: + * Contact the owner of the formatting tool. + */ + +/*? + * Text: "%s: New DASD %04X/%02X (CU %04X/%02X) with %d cylinders, %d heads, %d sectors%s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * @2: device type + * @3: device model + * @4: control unit type + * @5: control unit model + * @6: number of cylinders + * @7: tracks per cylinder + * @8: sectors per track + * @9: access mode + * Description: + * A DASD with the shown characteristics has been set online. + * If the DASD is configured as read-only to the real or virtual hardware, + * the message includes an indication of this hardware access mode. The + * hardware access mode is independent from the 'readonly' attribute of + * the device in sysfs. + * User action: + * None. + */ + +/*? + * Text: "%s: The disk layout of the DASD is not supported\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD device driver only supports the following disk layouts: CDL, LDL, + * FBA, CMS, and CMS RESERVED. + * User action: + * None. + */ + +/*? + * Text: "%s: Start track %u used in formatting exceeds end track\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: track number + * Description: + * The DASD format I/O control was used incorrectly by a formatting tool. + * User action: + * Contact the owner of the formatting tool. + */ + +/*? + * Text: "%s: The DASD cache mode was set to %x (%i cylinder prestage)\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * @2: operation mode + * @3: number of cylinders + * Description: + * The DASD cache mode has been changed. See the storage system documentation + * for information about the different cache operation modes. + * User action: + * None. + */ + +/*? + * Text: "%s: The DASD cannot be formatted with block size %u\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: block size + * Description: + * The block size specified for a format instruction is not valid. The block + * size must be between 512 and 4096 byte and must be a power of 2. + * User action: + * Call the format command with a supported block size. + */ + +/*? + * Text: "%s: The UID of the DASD has changed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The Unique Identifier (UID) of a DASD that is currently in use has changed. + * This indicates that the physical disk has been replaced. + * User action: + * None if the replacement was intentional. + * If the disk change is not expected, stop using the disk to prevent possible + * data loss. +*/ + + +/* dasd_3990_erp */ + +/*? + * Text: "%s: is offline or not installed - INTERVENTION REQUIRED!!\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD to be accessed is not in an accessible state. The I/O operation + * will wait until the device is operational again. This is an operating system + * independent message that is issued by the storage system. + * User action: + * Make the DASD accessible again. For details see the storage system + * documentation. + */ + +/*? + * Text: "%s: The DASD cannot be reached on any path (lpum=%x/opm=%x)\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: last path used mask + * @3: online path mask + * Description: + * After a path to the DASD failed, the error recovery procedure of the DASD + * device driver tried but failed to reconnect the DASD through an alternative + * path. + * User action: + * Ensure that the cabling between the storage server and the mainframe + * system is securely in place. Check the file systems on the DASD when it is + * accessible again. + */ + +/*? + * Text: "%s: Unable to allocate DCTL-CQR\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an internal error. + * User action: + * Contact your support organization. + */ + +/*? + * Text: "%s: FORMAT 0 - Invalid Parameter\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A data argument of a command is not valid. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - DPS Installation Check\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This operating system independent message is issued by the storage system + * for one of the following reasons: + * - A 3380 Model D or E DASD does not have the Dynamic Path Selection (DPS) + * feature in the DASD A-unit. + * - The device type of an attached DASD is not supported by the firmware. + * - A type 3390 DASD is attached to a 3 MB channel. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 2 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Drive motor switch is off\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - CCW Count less than required\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The CCW count of a command is less than required. This is an operating + * system independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Channel requested ... %02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: reason code + * Description: + * This is an operating system independent message that is issued by the + * storage system. The possible reason codes indicate the following problems: + * 00 No Message. + * 01 The channel has requested unit check sense data. + * 02 The channel has requested retry and retry is exhausted. + * 03 A SA Check-2 error has occurred. This sense is presented with + * Equipment Check. + * 04 The channel has requested retry and retry is not possible. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Status Not As Required: reason %02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: reason code + * Description: + * This is an operating system independent message that is issued by the + * storage system. There are several potential reasons for this message; + * byte 8 contains the reason code. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Device status 1 not valid\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Storage Path Restart\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * An operation for an active channel program was queued in a Storage Control + * when a warm start was received by the path. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Reset Notification\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A system reset or its equivalent was received on an interface. The Unit + * Check that generates this sense is posted to the next channel initiated + * selection following the resetting event. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Invalid Command Sequence\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * An incorrect sequence of commands has occurred. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Missing device address bit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Subsystem Processing Error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A firmware logic error has been detected. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Seek incomplete\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Invalid Command\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A command was issued that is not in the 2107/1750 command set. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Command Invalid on Secondary Address\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A command or order not allowed on a PPRC secondary device has been received + * by the secondary device. This is an operating system independent message + * that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Invalid Defective/Alternate Track Pointer\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A defective track has been accessed. The subsystem generates an invalid + * Defective/Alternate Track Pointer as a part of RAID Recovery. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Channel Returned with Incorrect retry CCW\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A command portion of the CCW returned after a command retry sequence does + * not match the command for which retry was signaled. This is an operating + * system independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Diagnostic of Special Command Violates File Mask\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A command is not allowed under the Access Authorization specified by the + * File Mask. This is an operating system independent message that is issued + * by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Head address does not compare\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Device did not respond to selection\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Device check-2 error or Set Sector is not complete\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Device Error Source\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The device has completed soft error logging. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Data Pinned for Device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * Modified data in cache or in persistent storage exists for the DASD. The + * data cannot be destaged to the device. This track is the first track pinned + * for this device. This is an operating system independent message that is + * issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel C\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Device Status 1 not as expected\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 0 - Device Fenced - device = %02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: sense data byte 4 + * Description: + * The device shown in sense byte 4 has been fenced. This is an operating + * system independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Interruption cannot be reset\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Index missing\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - DASD Fast Write inhibited\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * DASD Fast Write is not allowed because of a nonvolatile storage battery + * check condition. This is an operating system independent message that is + * issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Invalid tag-in for an extended command sequence\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Key area error; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Count area error; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Track physical address did not compare\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 2 - 3990 check-2 error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Offset active cannot be reset\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - RCC 1 and RCC 2 sequences not successful\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in count address area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Data area error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel A\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in count address area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the key area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Caching status reset to default\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The storage director has assigned two new subsystem status devices and + * resets the status to its default value. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the data area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Device not ready\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in key area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - DASD controller failed to set or reset the long busy latch\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 1 - Cylinder address did not compare\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 3 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in data area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 2 - Support facility errors\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Key area error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - End operation with transfer count not zero\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 2 - Microcode detected error %02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: error code + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the count area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 3 - Allegiance terminated\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * Allegiance terminated because of a Reset Allegiance or an Unconditional + * Reserve command on another channel. This is an operating system independent + * message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Home address area error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Count area error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Invalid tag-in during selection sequence\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in data area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in home address area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Home address area error; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - Data area error; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in home address area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the home address area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the home address area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the count area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 4 - No sync byte in key area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Invalid DCC selection response or timeout\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the data area\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Operation Terminated\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The storage system ends an operation related to an active channel program + * when termination and redrive are required and logging is not desired. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel B\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 5 - Data Check in the key area; offset active\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Volume is suspended duplex\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The duplex pair volume has entered the suspended duplex state because of a + * failure. This is an operating system independent message that is issued by + * the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel D\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - RCC 1 sequence not successful\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel E\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - 3990 microcode time out when stopping selection\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel F\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - RCC initiated by a connection check alert\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel G\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - extra RCC required\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 6 - Overrun on channel H\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - Unexpected end operation response code\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Permanent path error (DASD controller not available)\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Missing end operation; device transfer incomplete\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Cache or nonvolatile storage equipment failure\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * An equipment failure has occurred in the cache storage or nonvolatile + * storage of the storage system. This is an operating system independent + * message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - DPS cannot be filled\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - Error correction code hardware fault\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Missing end operation; device transfer complete\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - DASD controller not available on disconnected command chain\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - No interruption from device during a command chain\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - No response to selection after a poll interruption\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 9 - Track physical address did not compare while oriented\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 9 - Head address did not compare\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Invalid tag-in for an immediate command sequence\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 9 - Cylinder address did not compare\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - DPS checks after a system reset or selective reset\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Caching reinitiated\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * Caching has been automatically reinitiated following an error. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - End operation with transfer count zero\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 7 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 9 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - Short busy time-out during device selection\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Caching terminated\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The storage system was unable to initiate caching or had to suspend caching + * for a 3990 control unit. If this problem is caused by a failure condition, + * an additional message will provide more information about the failure. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * Check for additional messages that point out possible failures. For more + * information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Subsystem status cannot be determined\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The status of a DASD Fast Write or PPRC volume cannot be determined. + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Nonvolatile storage terminated\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The storage director has stopped using nonvolatile storage or cannot + * initiate nonvolatile storage. If this problem is caused by a failure, an + * additional message will provide more information about the failure. This is + * an operating system independent message that is issued by the storage system. + * User action: + * Check for additional messages that point out possible failures. For more + * information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT 8 - Reserved\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: Write inhibited path encountered\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an informational message. + * User action: + * None. + */ + +/*? + * Text: "%s: FORMAT 9 - Device check-2 error\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * This is an operating system independent message that is issued by the + * storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Track format incorrect\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A track format error occurred while data was being written to the DASD or + * while a duplex pair was being established. This is an operating system + * independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: FORMAT F - Cache fast write access not authorized\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * A request for Cache Fast Write Data access cannot be satisfied because + * of missing access authorization for the storage system. This is an operating + * system independent message that is issued by the storage system. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: Data recovered during retry with PCI fetch mode active\n" + * Severity: Emerg + * Parameter: + * @1: bus ID of the DASD + * Description: + * A data error has been recovered on the storages system but the Linux file + * system cannot be informed about the data mismatch. To prevent Linux from + * running with incorrect data, the DASD device driver will trigger a kernel + * panic. + * User action: + * Reset your real or virtual hardware and reboot Linux. + */ + +/*? + * Text: "%s: The specified record was not found\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The record to be accessed does not exist. The DASD might be unformatted + * or defect. + * User action: + * Try to format the DASD or replace it. + * ATTENTION: Formatting irreversibly destroys all data on the DASD. + */ + +/*? + * Text: "%s: ERP %p (%02x) refers to %p\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: pointer to ERP + * @3: ERP status + * @4: cqr + * Description: + * This message provides debug information for the enhanced error recovery + * procedure (ERP). + * User action: + * If you do not need this information, you can suppress this message by + * switching off ERP logging, for example, by writing '1' to the 'erplog' + * sysfs attribute of the DASD. + */ + +/*? + * Text: "%s: ERP chain at END of ERP-ACTION\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * This message provides debug information for the enhanced error recovery + * procedure (ERP). + * User action: + * If you do not need this information, you can suppress this message by + * switching off ERP logging, for example, by writing '1' to the 'erplog' + * sysfs attribute of the DASD. + */ + +/*? + * Text: "%s: The cylinder data for accessing the DASD is inconsistent\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * An error occurred in the storage system hardware. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: Accessing the DASD failed because of a hardware error\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * An error occurred in the storage system hardware. + * User action: + * For more information see the documentation of your storage system. + */ + +/*? + * Text: "%s: ERP chain at BEGINNING of ERP-ACTION\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * This message provides debug information for the enhanced error recovery + * procedure (ERP). + * User action: + * If you do not need this information, you can suppress this message by + * switching off ERP logging, for example, by writing '1' to the 'erplog' + * sysfs attribute of the DASD. + */ + +/*? + * Text: "%s: ERP %p has run out of retries and failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: ERP pointer + * Description: + * The error recovery procedure (ERP) tried to recover an error but the number + * of retries for the I/O was exceeded before the error could be resolved. + * User action: + * Check for related previous error messages. + */ + +/*? + * Text: "%s: SIM - SRC: %02x%02x%02x%02x\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: sense byte + * @3: sense byte + * @4: sense byte + * @5: sense byte + * Description: + * This error message is a System Information Message (SIM) generated by the + * storage system. The System Reference Code (SRC) defines the error in detail. + * User action: + * Look up the SRC in the storage server documentation. + */ + +/*? + * Text: "%s: log SIM - SRC: %02x%02x%02x%02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: sense byte + * @3: sense byte + * @4: sense byte + * @5: sense byte + * Description: + * This System Information Message (SIM) is generated by the storage system. + * The System Reference Code (SRC) defines the error in detail. + * User action: + * Look up the SRC in the storage server documentation. + */ + +/*? + * Text: "%s: Reading device feature codes failed with rc=%d\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * Description: + * The device feature codes state which advanced features are supported by a + * device. + * Examples for advanced features are PAV or high performance FICON. + * Some early devices do not provide feature codes and no advanced features are + * available on these devices. + * User action: + * None, if the DASD does not provide feature codes. If the DASD provides + * feature codes, make sure that it is working correctly, then set it offline + * and back online. + */ + +/*? + * Text: "%s: A channel path group could not be established\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * Initialization of a DASD did not complete because a channel path group + * could not be established. + * User action: + * Make sure that the DASD is working correctly, then try again to set it + * online. If initialization still fails, reboot. + */ + +/*? + * Text: "%s: The DASD is not operating in multipath mode\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD channel path group could not be configured to use multipath mode. + * This might negatively affect I/O performance on this DASD. + * User action: + * Make sure that the DASD is working correctly, then try again to set it + * online. If initialization still fails, reboot. + */ + +/*? + * Text: "%s: Detecting the DASD disk layout failed because of an I/O error\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The disk layout of the DASD could not be detected because of an unexpected + * I/O error. The DASD device driver treats the device like an unformatted DASD, + * and partitions on the device are not accessible. + * User action: + * If the DASD is formatted, make sure that the DASD is working correctly, + * then set it offline and back online. If the DASD is unformatted, format the + * DASD, for example, with dasdfmt. + * ATTENTION: Formatting irreversibly destroys all data on the DASD. + */ + +/*? + * Text: "%s: An I/O request was rejected because writing is inhibited\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * An I/O request was returned with an error indication of 'command reject' + * and 'write inhibited'. The most likely reason for this error is a + * failed write request to a device that was attached as read-only in z/VM. + * User action: + * Set the device offline, ensure that the device is configured correctly in + * z/VM, then set the device online again. + */ + +/*? + * Text: "%s: An Alias device was reassigned to a new base device with UID: %s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the alias + * @2: UID of new base device + * Description: + * The alias device with the indicated bus ID has been reassigned. The UID of the new base device is shown in the message. + * User action: + * None. + */ + +/*? + * Text: "%s: Detecting the maximum supported data size for zHPF requests failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * High Performance FICON (zHPF) requests are limited to a hardware-dependent + * maximum data size. The DASD device driver failed to detect this size and zHPF + * is not available for this device. + * User action: + * Set the device offline and online again. If this problem persists, gather + * Linux debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Reading device feature codes failed (rc=%d) for new path %x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * @3: path mask + * Description: + * A new path has been made available to the a device. + * A command to read the device feature codes on this device returned an error. + * The new path will not be used for I/O. + * User action: + * Set the new path offline and online again to repeat the path verification. + * Alternatively, set the device offline and online again to + * verify all available paths for this device. + * If this problem persists, gather Linux debug data and report the problem + * to your support organization. + */ + +/*? + * Text: "%s: Detecting the maximum data size for zHPF requests failed (rc=%d) for a new path %x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: return code + * @3: path mask + * Description: + * High Performance FICON (zHPF) requests are limited to a hardware-dependent + * maximum data size. A command to detect this size for + * a new path returned an error. The new path will not be used for I/O. + * User action: + * Set the new path offline and online again to repeat the path verification. + * Alternatively, set the device offline and online again to + * verify all available paths for this device. + * If this problem persists, gather Linux debug data and report the problem + * to your support organization. + */ + +/*? + * Text: "%s: The maximum data size for zHPF requests %u on a new path %x is below the active maximum %u\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * @2: size in bytes + * @3: path mask + * @4: size in bytes + * Description: + * High Performance FICON (zHPF) requests are limited to a hardware-dependent + * maximum data size. The maximum of the new path is below + * the previously established common maximum for the + * existing paths for this device. This could cause requests on the new + * path to fail. The new path will not be used for I/O. + * User action: + * Set the device offline and online again to establish a new common maximum + * data size for the device. + */ + +/*? + * Text: "%s: The device reservation was lost\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * This Linux instance has lost its reservation of the device to another + * operating system instance. Depending on the reservation policy for the + * device, I/O might be blocked until the other operating system instance + * surrenders the reservation or all I/O requests might fail until the + * device is reset. + * User action: + * None, if this situation is handled by system automation software. + * If this situation is not handled by automation, check the + * last_known_reservation_state attribute of the device in sysfs. + * If the value is 'lost', verify that the device is no longer reserved + * by another operating system instance, then set the device offline and + * online again. For any other value of the last_known_reservation_state + * no action is required. I/O will resume when the device reservation is + * surrendered by the other operating system instance. + */ + +/*? + * Text: "%s: The storage server does not support raw-track access\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD cannot be accessed in raw-track access mode because the storage + * server does not have all required features for this access mode. + * In raw-track access mode, the DASD device driver accesses complete ECKD + * tracks. + * By default, the DASD device driver accesses only the data fields of ECKD + * devices and omits the count and key data fields. + * User action: + * Ensure that the raw_track_access sysfs attribute of the DASD has the value + * 0 to access the device in default ECKD mode. + */ + +/*? + * Text: "%s: The newly added channel path %02X will not be used because it leads to a different device %s\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: logical path mask + * @3: UID + * Description: + * The newly added channel path has a different UID than the DASD device. This indicates + * an incorrect cabling. This path is not going to be used. + * User action: + * Check the cabling of the DASD device. Disconnect and reconnect the cable. + */ + +/*? + * Text: "%s: Not all channel paths lead to the same device, path %02X leads to device %s instead of %s\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: logical path mask + * @3: UID + * @4: UID + * Description: + * Some channel paths have a different UID than others. This indicates + * an incorrect cabling. The DASD device is not enabled. + * User action: + * Check cabling of the DASD device and retry to enable the device. + */ + +/*? + * Text: "Service on the storage server caused path %x.%02x to go offline" + * Severity: Warning + * Parameter: + * @1: channel subsystem ID + * @2: CHPID + * Description: + * A channel path to the DASD has been set offline because of + * a service action on the storage server. The path will be set back + * online automatically when the service action is completed. + * User action: + * None. + */ + +/*? + * Text: "Path %x.%02x is back online after service on the storage server" + * Severity: Informational + * Parameter: + * @1: channel subsystem ID + * @2: CHPID + * Description: + * A path had been set offline temporarily because of a service + * action on the storage server. + * The service action has completed, and the channel path is available + * again. + * User action: + * None. + */ + +/*? + * Text: "%s: High Performance FICON disabled\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * Description: + * High Performance FICON (HPF) has been disabled. Either the device + * lost HPF functionality, or none of the remaining channel paths are + * HPF capable. + * User action: + * Report the problem to your support organization. + * Ensure that the cabling between the storage server and the mainframe + * system is securely in place. + * Reset the device and channel paths by writing "all" or a logical path mask + * to the path_reset sysfs attribute of the device. + */ + +/*? + * Text: "%s: Channel path %02X lost HPF functionality and is disabled\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: logical path mask + * Description: + * A channel path has lost High Performance FICON (HPF) functionality + * and was removed from regular operations. + * User action: + * Report the problem to your support organization. + * Ensure that the cabling between the storage server and the mainframe + * system is securely in place. + * Reset the device and channel paths by writing "all" or a logical path mask + * to the path_reset sysfs attribute of the device. + */ + +/*? + * Text: "%s: Path %x.%02x (pathmask %02x) is disabled - IFCC threshold exceeded\n" + * Severity: Error + * Parameter: + * @1: bus ID of the DASD + * @2: cssid + * @3: chpid + * @4: logical path mask + * Description: + * Due to numerous interface or channel control checks (IFCCs), a channel path + * was removed from regular operations to retain good I/O performance. + * User action: + * Ensure that the cabling between the storage server and the mainframe + * system is securely in place. + * Reset the device and channel paths by writing "all" or a logical path mask + * to the path_reset sysfs attribute of the device. + * If the problem persists, report it to your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/dasd-fba +++ linux-aws-4.15.0/Documentation/kmsg/s390/dasd-fba @@ -0,0 +1,36 @@ + +/*? + * Text: "%s: New FBA DASD %04X/%02X (CU %04X/%02X) with %d MB and %d B/blk%s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the DASD + * @2: device type + * @3: device model + * @4: control unit type + * @5: control unit model + * @6: size + * @7: bytes per block + * @8: access mode + * Description: + * A DASD with the shown characteristics has been set online. + * If the DASD is configured as read-only to the real or virtual hardware, + * the message includes an indication of this hardware access mode. The + * hardware access mode is independent from the 'readonly' attribute of + * the device in sysfs. + * User action: + * None. + */ + +/*? + * Text: "%s: Allocating memory for private DASD data failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the DASD + * Description: + * The DASD device driver maintains data structures for each DASD it manages. + * There is not enough memory to allocate these data structures for one or + * more DASD. + * User action: + * Free some memory and try the operation again. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/dcssblk +++ linux-aws-4.15.0/Documentation/kmsg/s390/dcssblk @@ -0,0 +1,206 @@ +/*? + * Text: "Adjacent DCSSs %s and %s are not contiguous\n" + * Severity: Error + * Parameter: + * @1: name 1 + * @2: name 2 + * Description: + * You can only map a set of two or more DCSSs to a single DCSS device if the + * DCSSs in the set form a contiguous memory space. The DCSS device cannot be + * created because there is a memory gap between two adjacent DCSSs. + * User action: + * Ensure that you have specified all DCSSs that belong to the set. Check the + * definitions of the DCSSs on the z/VM hypervisor to verify that they form + * a contiguous memory space. + */ + +/*? + * Text: "DCSS %s and DCSS %s have incompatible types\n" + * Severity: Error + * Parameter: + * @1: name 1 + * @2: name 2 + * Description: + * You can only map a set of two or more DCSSs to a single DCSS device if + * either all DCSSs in the set have the same type or if the set contains DCSSs + * of the two types EW and EN but no other type. The DCSS device cannot be + * created because at least two of the specified DCSSs are not compatible. + * User action: + * Check the definitions of the DCSSs on the z/VM hypervisor to verify that + * their types are compatible. + */ + +/*? + * Text: "DCSS %s is of type SC and cannot be loaded as exclusive-writable\n" + * Severity: Error + * Parameter: + * @1: device name + * Description: + * You cannot load a DCSS device in exclusive-writable access mode if the DCSS + * devise maps to one or more DCSSs of type SC. + * User action: + * Load the DCSS in shared access mode. + */ + +/*? + * Text: "DCSS device %s is removed after a failed access mode change\n" + * Severity: Error + * Parameter: + * @1: device name + * Description: + * To change the access mode of a DCSS device, all DCSSs that map to the device + * were unloaded. Reloading the DCSSs for the new access mode failed and the + * device is removed. + * User action: + * Look for related messages to find out why the DCSSs could not be reloaded. + * If necessary, add the device again. + */ + +/*? + * Text: "All DCSSs that map to device %s are saved\n" + * Severity: Informational + * Parameter: + * @1: device name + * Description: + * A save request has been submitted for the DCSS device. Changes to all DCSSs + * that map to the device are saved permanently. + * User action: + * None. + */ + +/*? + * Text: "Device %s is in use, its DCSSs will be saved when it becomes idle\n" + * Severity: Informational + * Parameter: + * @1: device name + * Description: + * A save request for the device has been deferred until the device becomes + * idle. Then changes to all DCSSs that the device maps to will be saved + * permanently. + * User action: + * None. + */ + +/*? + * Text: "A pending save request for device %s has been canceled\n" + * Severity: Informational + * Parameter: + * @1: device name + * Description: + * A save request for the DCSSs that map to a DCSS device has been pending + * while the device was in use. This save request has been canceled. Changes to + * the DCSSs will not be saved permanently. + * User action: + * None. + */ + +/*? + * Text: "Loaded %s with total size %lu bytes and capacity %lu sectors\n" + * Severity: Informational + * Parameter: + * @1: DCSS names + * @2: total size in bytes + * @3: total size in 512 byte sectors + * Description: + * The listed DCSSs have been verified as contiguous and successfully loaded. + * The displayed sizes are the sums of all DCSSs. + * User action: + * None. + */ + +/*? + * Text: "Device %s cannot be removed because it is not a known device\n" + * Severity: Warning + * Parameter: + * @1: device name + * Description: + * The DCSS device you are trying to remove is not known to the DCSS device + * driver. + * User action: + * List the entries under /sys/devices/dcssblk/ to see the names of the + * existing DCSS devices. + */ + +/*? + * Text: "Device %s cannot be removed while it is in use\n" + * Severity: Warning + * Parameter: + * @1: device name + * Description: + * You are trying to remove a device that is in use. + * User action: + * Make sure that all users of the device close the device before you try to + * remove it. + */ + +/*? + * Text: "Device %s has become idle and is being saved now\n" + * Severity: Informational + * Parameter: + * @1: device name + * Description: + * A save request for the DCSSs that map to a DCSS device has been pending + * while the device was in use. The device has become idle and all changes + * to the DCSSs are now saved permanently. + * User action: + * None. + */ + +/*? + * Text: "Writing to %s failed because it is a read-only device\n" + * Severity: Warning + * Parameter: + * @1: device name + * Description: + * The DCSS device is in shared access mode and cannot be written to. Depending + * on the type of the DCSSs that the device maps to, you might be able to + * change the access mode to exclusive-writable. + * User action: + * If the DCSSs of the device are of type SC, do not attempt to write to the + * device. If the DCSSs of the device are of type ER or SR, change the access + * mode to exclusive-writable before writing to the device. + */ + +/*? + * Text: "The address range of DCSS %s changed while the system was suspended\n" + * Severity: Error + * Parameter: + * @1: device name + * Description: + * After resuming the system, the start address or end address of a DCSS does + * not match the address when the system was suspended. DCSSs must not be + * changed after the system was suspended. + * This error cannot be recovered. The system is stopped with a kernel panic. + * User action: + * Reboot Linux. + */ + +/*? + * Text: "Suspending the system failed because DCSS device %s is writable\n" + * Severity: Error + * Parameter: + * @1: device name + * Description: + * A system cannot be suspended if one or more DCSSs are accessed in exclusive- + * writable mode. DCSS segment types EW, SW, and EN are always writable and + * must be removed before a system is suspended. + * User action: + * Remove all DCSSs of segment types EW, SW, and EN by writing the DCSS name to + * the sysfs 'remove' attribute. Set the access mode for all DCSSs of segment + * types SR and ER to read-only by writing 1 to the sysfs 'shared' attribute of + * the DCSS. Then try again to suspend the system. + */ + +/*? + * Text: "DCSS %s is of type SN or EN and cannot be saved\n" + * Severity: Warning + * Parameter: + * @1: DCSS name + * Description: + * DCSSs of type SN or EN cannot be saved. + * User action: + * If the DCSS was set up with the intention to prevent the content from being saved, + * no action is necessary. + * To be able to save the content, you must define the DCSS with a type other than SN or EN. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/diag288_wdt +++ linux-aws-4.15.0/Documentation/kmsg/s390/diag288_wdt @@ -0,0 +1,66 @@ +/*? + * Text: "The watchdog cannot be activated\n" + * Severity: Error + * Description: + * Diagnose instruction 0x288 was called to activate the diag288 watchdog. + * The diagnose call returned an error that cannot be handled by the device driver. + * The watchdog stays inactive. + * User action: + * Contact your support organization. + */ + +/*? + * Text: "The watchdog cannot be initialized\n" + * Severity: Error + * Description: + * Diagnose instruction 0x288 was called to initialize the diag288 watchdog. + * The diagnose call returned an error that cannot be handled by the device driver. + * The watchdog stays inactive. + * A possible reason for this error is that your real or virtual hardware does not support + * the diag288 watchdog. + * User action: + * Confirm that the diag288 watchdog is supported in your environment. + * Use a watchdog that is supported in your environment. + */ + +/*? + * Text: "The watchdog cannot be deactivated\n" + * Severity: Error + * Description: + * Diagnose instruction 0x288 was called to deactivate the diag288 watchdog. + * The diagnose call returned an error that cannot be handled by the device driver. + * The watchdog stays active and a watchdog timeout will trigger the configured timeout action. + * The diag288 watchdog device driver might intentionally be configured to prevent deactivation. + * User action: + * You can configure the diag288 watchdog device driver such that it can be deactivated. + * If the diag288 device driver has been compiled as a separate module, diag288_wdt, reload the module + * without specifying the 'nowayout' module parameter. + * If the diag288 device driver has been compiled into your kernel, + * reboot Linux without specifying the 'diag288.nowayout' kernel parameter'. + */ + +/*? + * Text: "The watchdog timer cannot be started or reset\n" + * Severity: Error + * Description: + * Diagnose instruction 0x288 was called to start the diag288 watchdog or to set timer back to zero. + * The diagnose call returned an error that cannot be handled by the device driver. + * The watchdog stays inactive or becomes inactive. + * User action: + * Contact your support organization. + */ + +/*? + * Text: "Linux cannot be suspended while the watchdog is in use\n" + * Severity: Error + * Description: + * The watchdog must not time out while Linux is suspended. + * Therefore, the diag288 watchdog device driver prevents Linux from being suspended + * while the watchdog is in use. + * User action: + * i) Stop the watchdog application. ii) If the problem persists, close the watchdog + * device node by issuing 'echo V > /dev/watchdog'. + * iii) If the device driver still prevents Linux from being suspended, + * contact your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/extmem +++ linux-aws-4.15.0/Documentation/kmsg/s390/extmem @@ -0,0 +1,293 @@ +/*? + * Text: "Querying a DCSS type failed with rc=%ld\n" + * Severity: Warning + * Parameter: + * @1: return code + * Description: + * The DCSS kernel interface used z/VM diagnose call X'64' to query the + * type of a DCSS. z/VM failed to determine the type and returned an error. + * User action: + * Look for related messages to find out which DCSS is affected. + * For details about the return codes see the section about DIAGNOSE Code + * X'64' in "z/VM CP Programming Services". + */ + +/*? + * Text: "Loading DCSS %s failed with rc=%ld\n" + * Severity: Warning + * Parameter: + * @1: DCSS name + * @2: return code + * Description: + * The DCSS kernel interface used diagnose call X'64' to load a DCSS. z/VM + * failed to load the DCSS and returned an error. + * User action: + * For details about the return codes see the section about DIAGNOSE Code + * X'64' in "z/VM CP Programming Services". + */ + +/*? + * Text: "DCSS %s of range %p to %p and type %s loaded as exclusive-writable\n" + * Severity: Informational + * Parameter: + * @1: DCSS name + * @2: starting page address + * @3: ending page address + * @4: DCSS type + * Description: + * The DCSS was loaded successfully in exclusive-writable access mode. + * User action: + * None. + */ + +/*? + * Text: "DCSS %s of range %p to %p and type %s loaded in shared access mode\n" + * Severity: Informational + * Parameter: + * @1: DCSS name + * @2: starting page address + * @3: ending page address + * @4: DCSS type + * Description: + * The DCSS was loaded successfully in shared access mode. + * User action: + * None. + */ + +/*? + * Text: "DCSS %s is already in the requested access mode\n" + * Severity: Informational + * Parameter: + * @1: DCSS name + * Description: + * A request to reload a DCSS with a new access mode has been rejected + * because the new access mode is the same as the current access mode. + * User action: + * None. + */ + +/*? + * Text: "DCSS %s is in use and cannot be reloaded\n" + * Severity: Warning + * Parameter: + * @1: DCSS name + * Description: + * Reloading a DCSS in a different access mode has failed because the DCSS is + * being used by one or more device drivers. The DCSS remains loaded with the + * current access mode. + * User action: + * Ensure that the DCSS is not used by any device driver then try again to + * load the DCSS with the new access mode. + */ + +/*? + * Text: "DCSS %s overlaps with used memory resources and cannot be reloaded\n" + * Severity: Warning + * Parameter: + * @1: DCSS name + * Description: + * The DCSS has been unloaded and cannot be reloaded because it overlaps with + * another loaded DCSS or with the memory of the z/VM guest virtual machine + * (guest storage). + * User action: + * Ensure that no DCSS is loaded that has overlapping memory resources + * with the DCSS you want to reload. If the DCSS overlaps with guest storage, + * use the DEF STORE CONFIG z/VM CP command to create a sufficient storage gap + * for the DCSS. For details, see the section about the DCSS device driver in + * "Device Drivers, Features, and Commands". + */ + +/*? + * Text: "Reloading DCSS %s failed with rc=%ld\n" + * Severity: Warning + * Parameter: + * @1: DCSS name + * @2: return code + * Description: + * The DCSS kernel interface used z/VM diagnose call X'64' to reload a DCSS + * in a different access mode. The DCSS was unloaded but z/VM failed to reload + * the DCSS. + * User action: + * For details about the return codes see the section about DIAGNOSE Code + * X'64' in "z/VM CP Programming Services". + */ + +/*? + * Text: "Unloading unknown DCSS %s failed\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * The specified DCSS cannot be unloaded. The DCSS is known to the DCSS device + * driver but not to the DCSS kernel interface. This problem indicates a + * program error in extmem.c. + * User action: + * Report this problem to your support organization. + */ + +/*? + * Text: "Saving unknown DCSS %s failed\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * The specified DCSS cannot be saved. The DCSS is known to the DCSS device + * driver but not to the DCSS kernel interface. This problem indicates a + * program error in extmem.c. + * User action: + * Report this problem to your support organization. + */ + +/*? + * Text: "Saving a DCSS failed with DEFSEG response code %i\n" + * Severity: Error + * Parameter: + * @1: response-code + * Description: + * The DEFSEG z/VM CP command failed to permanently save changes to a DCSS. + * User action: + * Ensure that the z/VM guest virtual machine is authorized to issue + * the CP DEFSEG command (typically privilege class E). + * Look for related messages to find the cause of this error. See also message + * HCPE in the DEFSEG section of the "z/VM CP Command and + * Utility Reference". + */ + +/*? + * Text: "Saving a DCSS failed with SAVESEG response code %i\n" + * Severity: Error + * Parameter: + * @1: response-code + * Description: + * The SAVESEG z/VM CP command failed to permanently save changes to a DCSS. + * User action: + * Ensure that the z/VM guest virtual machine is authorized to issue + * the CP SAVESEG command (typically privilege class E). + * Look for related messages to find the cause of this error. See also message + * HCPE in the SAVESEG section of the "z/VM CP Command and + * Utility Reference". + */ + +/*? + * Text: "DCSS %s cannot be loaded or queried\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * You cannot load or query the specified DCSS because it either is not defined + * in the z/VM hypervisor, or it is a class S DCSS, or it is above 2047 MB + * and the Linux system is a 31-bit system. + * User action: + * Use the CP command "QUERY NSS" to find out if the DCSS is a valid + * DCSS that can be loaded. + */ + +/*? + * Text: "DCSS %s cannot be loaded or queried without z/VM\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * A DCSS is a z/VM resource. Your Linux instance is not running as a z/VM + * guest operating system and, therefore, cannot load DCSSs. + * User action: + * Load DCSSs only on Linux instances that run as z/VM guest operating systems. + */ + +/*? + * Text: "Loading or querying DCSS %s resulted in a hardware error\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * Either the z/VM DIAGNOSE X'64' query or load call issued for the DCSS + * returned with an error. + * User action: + * Look for previous extmem message to find the return code from the + * DIAGNOSE X'64' query or load call. For details about the return codes see + * the section about DIAGNOSE Code X'64' in "z/VM CP Programming Services". + */ + +/*? + * Text: "DCSS %s has multiple page ranges and cannot be loaded or queried\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * You can only load or query a DCSS with multiple page ranges if: + * - The DCSS has 6 or fewer page ranges + * - The page ranges form a contiguous address space + * - The page ranges are of type EW or EN + * User action: + * Check the definition of the DCSS to make sure that the conditions for + * DCSSs with multiple page ranges are met. + */ + +/*? + * Text: "%s needs used memory resources and cannot be loaded or queried\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * You cannot load or query the DCSS because it overlaps with an already + * loaded DCSS or with the memory of the z/VM guest virtual machine + * (guest storage). + * User action: + * Ensure that no DCSS is loaded that has overlapping memory resources + * with the DCSS you want to load or query. If the DCSS overlaps with guest + * storage, use the DEF STORE CONFIG z/VM CP command to create a sufficient + * storage gap for the DCSS. For details, see the section about the DCSS + * device driver in "Device Drivers, Features, and Commands". + */ + +/*? + * Text: "DCSS %s is already loaded in a different access mode\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * The DCSS you are trying to load has already been loaded in a different + * access mode. You cannot simultaneously load the DCSS in different modes. + * User action: + * Reload the DCSS in a different mode or load it with the same mode in which + * it has already been loaded. + */ + +/*? + * Text: "There is not enough memory to load or query DCSS %s\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * The available memory is not enough to load or query the DCSS. + * User action: + * Free some memory and repeat the failed operation. + */ + +/*? + * Text: "DCSS %s overlaps with used storage and cannot be loaded\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * You cannot load the DCSS because it overlaps with an already loaded DCSS + * or with the memory of the z/VM guest virtual machine (guest storage). + * User action: + * Ensure that no DCSS is loaded that has overlapping memory resources + * with the DCSS you want to load. If the DCSS overlaps with guest storage, + * use the DEF STORE CONFIG z/VM CP command to create a sufficient storage gap + * for the DCSS. For details, see the section about the DCSS device driver in + * "Device Drivers, Features, and Commands". + */ + +/*? + * Text: "DCSS %s exceeds the kernel mapping range (%lu) and cannot be loaded\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * @2: kernel mapping range in bytes + * Description: + * You cannot load the DCSS because it exceeds the kernel mapping range limit. + * User action: + * Ensure that the DCSS range is defined below the kernel mapping range. + */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/hmcdrv +++ linux-aws-4.15.0/Documentation/kmsg/s390/hmcdrv @@ -0,0 +1,22 @@ +/*? + * Text: "Allocating the requested cache size of %zu bytes failed\n" + * Severity: Error + * Parameter: + * @1: size + * Description: + * You cannot use the 'hmcdrv' module. + * Either the cache size that was specified for the 'hmcdrv' module exceeded + * the maximum of 1048576 (1 megabyte), or not enough free memory was + * available. + * If the 'hmcdrv' module was compiled into the kernel, the cache size was + * specified with the 'hmcdrv.cachesize' kernel parameter. + * For a separate 'hmcdrv' module, the cache size was specified with the + * 'cachesize=' module parameter. + * User action: + * Specify a smaller cache size and try again to load the module. + * Do not exceed the maximum specification of 1048576 (1 megabyte). + * If necessary, free some memory and try again. + * If the module is compiled into the kernel, you must reboot Linux to change + * the cache size specification. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/hugetlb +++ linux-aws-4.15.0/Documentation/kmsg/s390/hugetlb @@ -0,0 +1,13 @@ +/*? + * Text: "hugepagesz= specifies an unsupported page size %s\n" + * Severity: Error + * Parameter: + * @1: size + * Description: + * The hugepagesz= kernel parameter specifies a huge page size + * that is not supported. + * User action: + * Specify "1M" for 1 MB huge pages. These are supported as of z10. + * Specify "2G" for 2 GB huge pages. These are supported as of zEC12 + * and zBC12 machines. + */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/hvc_iucv +++ linux-aws-4.15.0/Documentation/kmsg/s390/hvc_iucv @@ -0,0 +1,123 @@ +/*? + * Text: "The z/VM IUCV HVC device driver cannot be used without z/VM\n" + * Severity: Notice + * Description: + * The z/VM IUCV hypervisor console (HVC) device driver requires the + * z/VM inter-user communication vehicle (IUCV). + * User action: + * Set "hvc_iucv=" to zero in the kernel parameter line and reboot Linux. + */ + +/*? + * Text: "%lu is not a valid value for the hvc_iucv= kernel parameter\n" + * Severity: Error + * Parameter: + * @1: hvc_iucv_devices + * Description: + * The "hvc_iucv=" kernel parameter specifies the number of z/VM IUCV + * hypervisor console (HVC) terminal devices. + * The parameter value ranges from 0 to 8. + * If zero is specified, the z/VM IUCV HVC device driver is disabled + * and no IUCV-based terminal access is available. + * User action: + * Correct the "hvc_iucv=" setting in the kernel parameter line and + * reboot Linux. + */ + +/*? + * Text: "Creating a new HVC terminal device failed with error code=%d\n" + * Severity: Error + * Parameter: + * @1: errno + * Description: + * The device driver initialization failed to allocate a new + * HVC terminal device. + * A possible cause of this problem is memory constraints. + * User action: + * If the error code is -12 (ENOMEM), consider assigning more memory + * to your z/VM guest virtual machine. + */ + +/*? + * Text: "Registering HVC terminal device as Linux console failed\n" + * Severity: Error + * Description: + * The device driver initialization failed to set up the first HVC terminal + * device for use as Linux console. + * User action: + * If the error code is -12 (ENOMEM), consider assigning more memory + * to your z/VM guest virtual machine. + */ + +/*? + * Text: "Registering IUCV handlers failed with error code=%d\n" + * Severity: Error + * Parameter: + * @1: errno + * Description: + * The device driver initialization failed to register with z/VM IUCV to + * handle IUCV connections, as well as sending and receiving of IUCV messages. + * User action: + * Check for related IUCV error messages and see the errno manual page + * to find out what caused the problem. + */ + +/*? + * Text: "Allocating memory failed with reason code=%d\n" + * Severity: Error + * Parameter: + * @1: reason + * Description: + * The z/VM IUCV hypervisor console (HVC) device driver initialization failed, + * because of a general memory allocation failure. The reason code indicates + * the memory operation that has failed: + * kmem_cache (reason code=1), + * mempool (reason code=2), or + * hvc_iucv_allow= (reason code=3) + * User action: + * Consider assigning more memory to your z/VM guest virtual machine. + */ + +/*? + * Text: "hvc_iucv_allow= does not specify a valid z/VM user ID list\n" + * Severity: Error + * Description: + * The "hvc_iucv_allow=" kernel parameter specifies a comma-separated list + * of z/VM user IDs that are permitted to connect to the z/VM IUCV hypervisor + * device driver. + * The z/VM user IDs in the list must not exceed eight characters and must + * not contain spaces. + * User action: + * Correct the "hvc_iucv_allow=" setting in the kernel parameter line and reboot + * Linux. + */ + +/*? + * Text: "hvc_iucv_allow= specifies too many z/VM user IDs\n" + * Severity: Error + * Description: + * The "hvc_iucv_allow=" kernel parameter specifies a comma-separated list + * of z/VM user IDs that are permitted to connect to the z/VM IUCV hypervisor + * device driver. + * The number of z/VM user IDs that are specified with the "hvc_iucv_allow=" + * kernel parameter exceeds the maximum of 500. + * User action: + * Correct the "hvc_iucv_allow=" setting by reducing the z/VM user IDs in + * the list and reboot Linux. + */ + +/*? + * Text: "A connection request from z/VM user ID %s was refused\n" + * Severity: Informational + * Parameter: + * @1: ID + * Description: + * An IUCV connection request from another z/VM guest virtual machine has been + * refused. The request was from a z/VM guest virtual machine that is not + * listed by the "hvc_iucv_allow=" kernel parameter. + * User action: + * Check the "hvc_iucv_allow=" kernel parameter setting. + * Consider adding the z/VM user ID to the "hvc_iucv_allow=" list in the kernel + * parameter line and reboot Linux. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/hypfs +++ linux-aws-4.15.0/Documentation/kmsg/s390/hypfs @@ -0,0 +1,56 @@ +/*? + * Text: "The hardware system does not support hypfs\n" + * Severity: Error + * Description: + * hypfs requires DIAGNOSE Code X'204' but this diagnose code is not available + * on your hardware. You need more recent hardware to use hypfs. + * User action: + * None. + */ + +/*? + * Text: "The hardware system does not provide all functions required by hypfs\n" + * Severity: Error + * Description: + * hypfs requires DIAGNOSE Code X'224' but this diagnode code is not available + * on your hardware. You need more recent hardware to use hypfs. + * User action: + * None. + */ + +/*? + * Text: "Updating the hypfs tree failed\n" + * Severity: Error + * Description: + * There was not enough memory available to update the hypfs tree. + * User action: + * Free some memory and try again to update the hypfs tree. Consider assigning + * more memory to your LPAR or z/VM guest virtual machine. + */ + +/*? + * Text: "%s is not a valid mount option\n" + * Severity: Error + * Parameter: + * @1: mount option + * Description: + * hypfs has detected mount options that are not valid. + * User action: + * See "Device Drivers Features and Commands" for information about valid + * mount options for hypfs. + */ + +/*? + * Text: "Initialization of hypfs failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: error code + * Description: + * Initialization of hypfs failed because of resource or hardware constraints. + * Possible reasons for this problem are insufficient free memory or missing + * hardware interfaces. + * User action: + * See errno.h for information about the error codes. + */ + +/*? Text: "Hypervisor filesystem mounted\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/iucv +++ linux-aws-4.15.0/Documentation/kmsg/s390/iucv @@ -0,0 +1,33 @@ +/*? + * Text: "Defining an interrupt buffer on CPU %i failed with 0x%02x (%s)\n" + * Severity: Warning + * Parameter: + * @1: CPU number + * @2: hexadecimal error value + * @3: short error code explanation + * Description: + * Defining an interrupt buffer for external interrupts failed. Error + * value 0x03 indicates a problem with the z/VM directory entry of the + * z/VM guest virtual machine. This problem can also be caused by a + * program error. + * User action: + * If the error value is 0x03, examine the z/VM directory entry of your + * z/VM guest virtual machine. If the directory entry is correct or if the + * error value is not 0x03, report this problem to your support organization. + */ + +/*? + * Text: "Suspending Linux did not completely close all IUCV connections\n" + * Severity: Warning + * Description: + * When resuming a suspended Linux instance, the IUCV base code found + * data structures from one or more IUCV connections that existed before the + * Linux instance was suspended. Modules that use IUCV connections must close + * these connections when a Linux instance is suspended. This problem + * indicates an error in a program that used an IUCV connection. + * User action: + * Report this problem to your support organization. + */ + +/*? Text: "iucv_external_interrupt: out of memory\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/lcs +++ linux-aws-4.15.0/Documentation/kmsg/s390/lcs @@ -0,0 +1,169 @@ +/*? + * Text: "%s: Allocating a socket buffer to interface %s failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the LCS device + * @2: network interface + * Description: + * LAN channel station (LCS) devices require a socket buffer (SKB) structure + * for storing incoming data. The LCS device driver failed to allocate an SKB + * structure to the LCS device. A likely cause of this problem is memory + * constraints. + * User action: + * Free some memory and repeat the failed operation. + */ + +/*? + * Text: "%s: Shutting down the LCS device failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the LCS device + * Description: + * A request to shut down a LAN channel station (LCS) device resulted in an + * error. The error is logged in the LCS trace at trace level 4. + * User action: + * Try again to shut down the device. If the error persists, see the LCS trace + * to find out what causes the error. + */ + +/*? + * Text: "%s: Detecting a network adapter for LCS devices failed with rc=%d (0x%x)\n" + * Severity: Error + * Parameter: + * @1: bus ID of the LCS device + * @2: lcs_detect return code in decimal notation + * @3: lcs_detect return code in hexadecimal notation + * Description: + * The LCS device driver could not initialize a network adapter. + * User action: + * Ensure that the physical connection from the port to the network is + * in place. If the error persists, note the return code from the error + * message and contact IBM support. + */ + +/*? + * Text: "%s: A recovery process has been started for the LCS device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the LCS device + * Description: + * The LAN channel station (LCS) device is shut down and restarted. The recovery + * process might have been initiated by a user or started automatically as a + * response to a device problem. + * User action: + * Wait until a message indicates the completion of the recovery process. + */ + +/*? + * Text: "%s: An I/O-error occurred on the LCS device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the LCS device + * Description: + * The LAN channel station (LCS) device reported a problem that can be recovered + * by the LCS device driver. Repeated occurrences of this problem indicate a + * malfunctioning device. + * User action: + * If this problem occurs frequently, initiate a recovery process for the + * device, for example, by writing '1' to the 'recover' sysfs attribute of the + * device. + */ + +/*? + * Text: "%s: A command timed out on the LCS device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the LCS device + * Description: + * The LAN channel station (LCS) device reported a problem that can be recovered + * by the LCS device driver. Repeated occurrences of this problem indicate a + * malfunctioning device. + * User action: + * If this problem occurs frequently, initiate a recovery process for the + * device, for example, by writing '1' to the 'recover' sysfs attribute of the + * device. + */ + +/*? + * Text: "%s: An error occurred on the LCS device, rc=%ld\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the LCS device + * @2: return code + * Description: + * The LAN channel station (LCS) device reported a problem that can be recovered + * by the LCS device driver. Repeated occurrences of this problem indicate a + * malfunctioning device. + * User action: + * If this problem occurs frequently, initiate a recovery process for the + * device, for example, by writing '1' to the 'recover' sysfs attribute of the + * device. + */ + +/*? + * Text: "%s: The LCS device stopped because of an error, dstat=0x%X, cstat=0x%X \n" + * Severity: Warning + * Parameter: + * @1: bus ID of the LCS device + * @2: device status + * @3: subchannel status + * Description: + * The LAN channel station (LCS) device reported an error. The LCS device driver + * might start a device recovery process. + * User action: + * If the device driver does not start a recovery process, initiate a recovery + * process, for example, by writing '1' to the 'recover' sysfs attribute of the + * device. If the problem persists, note the status information provided with + * the message and contact IBM support. + */ + +/*? + * Text: "%s: Starting an LCS device resulted in an error, rc=%d!\n" + * Severity: Error + * Parameter: + * @1: bus ID of the LCS device + * @2: ccw_device_start return code in decimal notation + * Description: + * The LAN channel station (LCS) device driver failed to initialize an LCS + * device. The device is not operational. + * User action: + * Initiate a recovery process, for example, by writing '1' to the 'recover' + * sysfs attribute of the device. If the problem persists, contact IBM support. + */ + +/*? + * Text: "%s: Sending data from the LCS device to the LAN failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: bus ID of the LCS device + * @2: ccw_device_resume return code in decimal notation + * Description: + * The LAN channel station (LCS) device driver could not send data to the LAN + * using the LCS device. This might be a temporary problem. Operations continue + * on the LCS device. + * User action: + * If this problem occurs frequently, initiate a recovery process, for example, + * by writing '1' to the 'recover' sysfs attribute of the device. If the + * problem persists, contact IBM support. + */ + +/*? Text: "Query IPAssist failed. Assuming unsupported!\n" */ +/*? Text: "Stoplan for %s initiated by LGW\n" */ +/*? Text: "Not enough memory to add new multicast entry!\n" */ +/*? Text: "Not enough memory for debug facility.\n" */ +/*? Text: "Adding multicast address failed. Table possibly full!\n" */ +/*? Text: "Error in opening device!\n" */ +/*? Text: "LCS device %s %s IPv6 support\n" */ +/*? Text: "Device %s successfully recovered!\n" */ +/*? Text: "LCS device %s %s Multicast support\n" */ +/*? Text: " Initialization failed\n" */ +/*? Text: "Loading %s\n" */ +/*? Text: "Initialization failed\n" */ +/*? Text: "Terminating lcs module.\n" */ +/*? Text: "Device %s could not be recovered!\n" */ +/*? Text: "Initializing the lcs device driver failed\n" */ +/*? Text: "%s: The lcs device driver failed to recover the device\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/monreader +++ linux-aws-4.15.0/Documentation/kmsg/s390/monreader @@ -0,0 +1,128 @@ +/*? + * Text: "Reading monitor data failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * The z/VM *MONITOR record device driver failed to read monitor data + * because the IUCV REPLY function failed. The read function against + * the monitor record device returns EIO. All monitor data that has been read + * since the last read with 0 size is incorrect. + * User action: + * Disregard all monitor data that has been read since the last read with + * 0 size. If the device driver has been compiled as a separate module, unload + * and reload the monreader module. If the device driver has been compiled + * into the kernel, reboot Linux. For more information about possible causes + * of the error see the IUCV section in "z/VM CP Programming Services" and + * the *MONITOR section in "z/VM Performance". + */ + +/*? + * Text: "z/VM *MONITOR system service disconnected with rc=%i\n" + * Severity: Error + * Parameter: + * @1: IPUSER SEVER return code + * Description: + * The z/VM *MONITOR record device driver receives monitor records through + * an IUCV connection to the z/VM *MONITOR system service. This connection + * has been severed and the read function of the z/VM *MONITOR device driver + * returns EIO. All data received since the last read with 0 size is incorrect. + * User action: + * Disregard all monitor data read since the last read with 0 size. Close and + * reopen the monitor record device. For information about the IPUSER SEVER + * return codes see "z/VM Performance". + */ + +/*? + * Text: "The read queue for monitor data is full\n" + * Severity: Warning + * Description: + * The read function of the z/VM *MONITOR device driver returns EOVERFLOW + * because not enough monitor data has been read since the monitor device + * has been opened. Monitor data already read are valid and subsequent reads + * return valid data but some intermediate data might be missing. + * User action: + * Be aware that monitor data might be missing. Assure that you regularly + * read monitor data after opening the monitor record device. + */ + +/*? + * Text: "Connecting to the z/VM *MONITOR system service failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: IUCV CONNECT return code + * Description: + * The z/VM *MONITOR record device driver receives monitor records through + * an IUCV connection to the z/VM *MONITOR system service. This connection + * could not be established when the monitor record device was opened. If + * the return code is 15, your z/VM guest virtual machine is not authorized + * to connect to the *MONITOR system service. + * User action: + * If the return code is 15, ensure that the IUCV *MONITOR statement is + * included in the z/VM directory entry for your z/VM guest virtual machine. + * For other IUCV CONNECT return codes see the IUCV section in "CP Programming + * Services" and the *MONITOR section in "z/VM Performance". + */ + +/*? + * Text: "Disconnecting the z/VM *MONITOR system service failed with rc=%i\n" + * Severity: Warning + * Parameter: + * @1: IUCV SEVER return code + * Description: + * The z/VM *MONITOR record device driver receives monitor data through an + * IUCV connection to the z/VM *MONITOR system service. This connection + * could not be closed when the monitor record device was closed. You might + * not be able to resume monitoring. + * User action: + * No immediate action is necessary. If you cannot open the monitor record + * device in the future, reboot Linux. For information about the IUCV SEVER + * return codes see the IUCV section in "CP Programming Services" and the + * *MONITOR section in "z/VM Performance". + */ + +/*? + * Text: "The z/VM *MONITOR record device driver cannot be loaded without z/VM\n" + * Severity: Error + * Description: + * The z/VM *MONITOR record device driver uses z/VM system services to provide + * monitor data about z/VM guest operating systems to applications on Linux. + * On Linux instances that run in environments other than the z/VM hypervisor, + * the z/VM *MONITOR record device driver does not provide any useful + * function and the corresponding monreader module cannot be loaded. + * User action: + * Load the z/VM *MONITOR record device driver only on Linux instances that run + * as guest operating systems of the z/VM hypervisor. If the z/VM *MONITOR + * record device driver has been compiled into the kernel, ignore this message. + */ + +/*? + * Text: "The z/VM *MONITOR record device driver failed to register with IUCV\n" + * Severity: Error + * Description: + * The z/VM *MONITOR record device driver receives monitor data through an IUCV + * connection and needs to register with the IUCV device driver. This + * registration failed and the z/VM *MONITOR record device driver was not + * loaded. A possible cause of this problem is insufficient memory. + * User action: + * Free some memory and try again to load the module. If the z/VM *MONITOR + * record device driver has been compiled into the kernel, you might have to + * configure more memory and reboot Linux. If you do not want to read monitor + * data, ignore this message. + */ + +/*? + * Text: "The specified *MONITOR DCSS %s does not have the required type SC\n" + * Severity: Error + * Parameter: + * @1: DCSS name + * Description: + * The DCSS that was specified with the monreader.mondcss kernel parameter or + * with the mondcss module parameter cannot be a *MONITOR DCSS because it is + * not of type SC. + * User action: + * Confirm that you are using the name of the DCSS that has been configured as + * the *MONITOR DCSS on the z/VM hypervisor. If the default name, MONDCSS, is + * used, omit the monreader.mondcss or mondcss parameter. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/monwriter +++ linux-aws-4.15.0/Documentation/kmsg/s390/monwriter @@ -0,0 +1,17 @@ +/*? + * Text: "Writing monitor data failed with rc=%i\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * The monitor stream application device driver used the z/VM diagnose call + * DIAG X'DC' to start writing monitor data. z/VM returned an error and the + * monitor data cannot be written. If the return code is 5, your z/VM guest + * virtual machine is not authorized to write monitor data. + * User action: + * If the return code is 5, ensure that your z/VM guest virtual machine's + * entry in the z/VM directory includes the OPTION APPLMON statement. + * For other return codes see the section about DIAGNOSE Code X'DC' + * in "z/VM CP Programming Services". + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/netiucv +++ linux-aws-4.15.0/Documentation/kmsg/s390/netiucv @@ -0,0 +1,156 @@ +/*? + * Text: "%s: The peer interface of the IUCV device has closed the connection\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the IUCV device + * Description: + * The peer interface on the remote z/VM guest virtual machine has closed the + * connection. Do not expect further packets on this interface. Any packets + * you send to this interface will be dropped. + * User action: + * None. + */ + +/*? + * Text: "%s: The IUCV device failed to connect to z/VM guest %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the IUCV device + * @2: z/VM user ID + * Description: + * The connection cannot be established because the z/VM guest virtual + * machine with the peer interface is not running. + * User action: + * Ensure that the z/VM guest virtual machine with the peer interface is + * running; then try again to establish the connection. + */ + +/*? + * Text: "%s: The IUCV device failed to connect to the peer on z/VM guest %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the IUCV device + * @2: z/VM user ID + * Description: + * The connection cannot be established because the z/VM guest virtual machine + * with the peer interface is not configured for IUCV connections. + * User action: + * Configure the z/VM guest virtual machine with the peer interface for IUCV + * connections; then try again to establish the connection. + */ + +/*? + * Text: "%s: Connecting the IUCV device would exceed the maximum number of IUCV connections\n" + * Severity: Error + * Parameter: + * @1: bus ID of the IUCV device + * Description: + * The connection cannot be established because the maximum number of IUCV + * connections has been reached on the local z/VM guest virtual machine. + * User action: + * Close some of the established IUCV connections on the local z/VM guest + * virtual machine; then try again to establish the connection. + */ + +/*? + * Text: "%s: z/VM guest %s has too many IUCV connections to connect with the IUCV device\n" + * Severity: Error + * Parameter: + * @1: bus ID of the IUCV device + * @2: remote z/VM user ID + * Description: + * Connecting to the remote z/VM guest virtual machine failed because the + * maximum number of IUCV connections for the remote z/VM guest virtual + * machine has been reached. + * User action: + * Close some of the established IUCV connections on the remote z/VM guest + * virtual machine; then try again to establish the connection. + */ + +/*? + * Text: "%s: The IUCV device cannot connect to a z/VM guest with no IUCV authorization\n" + * Severity: Error + * Parameter: + * @1: bus ID of the IUCV device + * Description: + * Because the remote z/VM guest virtual machine is not authorized for IUCV + * connections, the connection cannot be established. + * User action: + * Add the statements 'IUCV ALLOW' and 'IUCV ANY' to the z/VM directory + * entry of the remote z/VM guest virtual machine; then try again to + * establish the connection. See "z/VM CP Planning and Administration" + * for details about the IUCV statements. + */ + +/*? + * Text: "%s: Connecting the IUCV device failed with error %d\n" + * Severity: Error + * Parameter: + * @1: bus ID of the IUCV device + * @2: error code + * Description: + * The connection cannot be established because of an IUCV CONNECT error. + * User action: + * Report this problem to your support organization. + */ + +/*? + * Text: "%s: The IUCV device has been connected successfully to %s\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the IUCV device + * @2: remote z/VM user ID + * Description: + * The connection has been established and the interface is ready to + * transmit communication packages. + * User action: + * None. + */ + +/*? + * Text: "%s: The IUCV interface to %s has been established successfully\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the IUCV device + * @2: remote z/VM user ID + * Description: + * The IUCV interface to the remote z/VM guest virtual machine has been + * established and can be activated with "ifconfig up" or an equivalent + * command. + * User action: + * None. + */ + +/*? + * Text: "%s: The IUCV device is connected to %s and cannot be removed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the IUCV device + * @2: remote z/VM user ID + * Description: + * Removing a connection failed because the interface is active with a peer + * interface on a remote z/VM guest virtual machine. + * User action: + * Deactivate the interface with "ifconfig down" or an equivalent command; + * then try again to remove the interface. + */ + +/*? + * Text: "%s: The peer z/VM guest %s has closed the connection\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the IUCV device + * @2: remote z/VM user ID + * Description: + * The peer interface is no longer available. + * User action: + * Either deactivate and remove the interface, or wait for the peer + * z/VM guest to re-establish the interface. + */ + +/*? Text: "driver unloaded\n" */ +/*? Text: "driver initialized\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/numa +++ linux-aws-4.15.0/Documentation/kmsg/s390/numa @@ -0,0 +1,11 @@ +/*? + * Text: "NUMA mode: %s\n" + * Severity: Informational + * Parameter: + * @1: mode + * Description: + * Linux started with the specified NUMA mode. + * User action: + * None. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/numa_emu +++ linux-aws-4.15.0/Documentation/kmsg/s390/numa_emu @@ -0,0 +1,50 @@ +/*? + * Text: "Not enough memory for %d nodes, reducing node count\n" + * Severity: Warning + * Parameter: + * @1: requested number of nodes + * Description: + * Using the requested memory stripe size for emulating the requested number of + * NUMA nodes requires more than the available memory. The number of nodes is + * specified with the emu_nodes= kernel parameter. The memory stripe size to + * be used for distributing the available memory among the nodes is specified + * with the emu_size= kernel parameter. Fewer nodes were created than the + * requested number; each node has one memory stripe of the requested size. + * User action: + * Specify fewer nodes, reduce the memory stripe size, or make more memory + * available to your Linux instance. + */ + +/*? + * Text: "Creating %d nodes with memory stripe size %ld MB\n" + * Severity: Informational + * Parameter: + * @1: number of nodes + * @2: stripe size + * Description: + * NUMA emulation is activated with the reported number of NUMA nodes. + * The specified memory stripe size is used to distribute, in round-robin + * fashion, the available memory among the nodes. + * User action: + * None. + */ + +/*? + * Text: "Increasing memory stripe size from %ld MB to %ld MB\n" + * Severity: Warning + * Parameter: + * @1: requested memory stripe size + * @2: adjusted memory stripe size + * Description: + * NUMA emulation could not use the requested memory stripe size and + * therefore has increased it to the next possible value. + * The requested memory stripe size is a default value or it was specified + * with the emu_size= kernel parameter. + * The memory stripe size must be a multiple of the memory block size that + * can be read in hexadecimal notation from + * /sys/devices/system/memory/block_size_bytes. + * User action: + * To avoid this message in the future, specify a valid memory stripe size + * with the emu_size= kernel parameter. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/os_info +++ linux-aws-4.15.0/Documentation/kmsg/s390/os_info @@ -0,0 +1,36 @@ +/*? + * Text: "entry %i: %s (addr=0x%lx size=%lu)\n" + * Severity: Informational + * Parameter: + * @1: entry ID + * @2: entry state + * @3: entry address + * @4: entry size + * Description: + * Linux is running in kdump mode and reports information defined by the + * previously running production kernel. Possible values for + * "entry state" are: + * + * - copied: The entry has been found, verified, and copied + * + * - not available: The entry has not been defined + * + * - checksum failed: The entry has been found, but it is not valid + * User action: + * If kdump fails, contact your service organization and include this message + * in the error report. + */ + +/*? + * Text: "crashkernel: addr=0x%lx size=%lu\n" + * Severity: Informational + * Parameter: + * @1: address + * @2: size + * Description: + * Linux is running in kdump mode and reports the address and size of + * the memory area that was reserved for kdump by the previously running + * production kernel. + * User action: + * None. + */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/perf +++ linux-aws-4.15.0/Documentation/kmsg/s390/perf @@ -0,0 +1,90 @@ +/*? + * Text: "CPU[%i] CPUM_CF: ver=%u.%u A=%04x E=%04x C=%04x\n" + * Severity: Informational + * Parameter: + * @1: cpu number + * @2: first version number + * @3: second version number + * @4: counter set authorization + * @5: counter set enable controls + * @6: counter set activation controls + * Description: + * This message displays information about the CPU-measurement counter facility + * (CPUM_CF) on a particular CPU. For details, see + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * None. + */ + +/*? + * Text: "CPU[%i] CPUM_SF: basic=%i diag=%i min=%lu max=%lu cpu_speed=%u\n" + * Severity: Informational + * Parameter: + * @1: cpu number + * @2: authorization status for the basic-sampling function + * @3: authorization status for the diagnostic-sampling function + * @4: minimum sampling interval + * @5: maximum sampling interval + * @6: cpu speed + * Description: + * This message displays generic information about the CPU-measurement sampling + * facility (CPUM_SF) on a particular CPU. For details, see + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * None. + */ + +/*? + * Text: "CPU[%i] CPUM_SF: Basic-sampling: a=%i e=%i c=%i bsdes=%i tear=%016lx dear=%016lx\n" + * Severity: Informational + * Parameter: + * @1: cpu number + * @2: authorization control + * @3: enable control + * @4: activation control + * @5: basic-sampling-data-entry size + * @6: tear register contents + * @7: dear register contents + * Description: + * This message displays information about the basic-sampling function of the + * CPU-measurement sampling facility (CPUM_SF) on a particular CPU. + * For details, see + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * None. + */ + +/*? + * Text: "CPU[%i] CPUM_SF: Diagnostic-sampling: a=%i e=%i c=%i dsdes=%i tear=%016lx dear=%016lx\n" + * Severity: Informational + * Parameter: + * @1: cpu number + * @2: authorization control + * @3: enable control + * @4: activation control + * @5: diagnostic-sampling-data-entry size + * @6: tear register contents + * @7: dear register contents + * Description: + * This message displays information about the diagnostic-sampling function of the + * CPU-measurement sampling facility (CPUM_SF) on a particular CPU. + * For details, see + * "The Load-Program-Parameter and the CPU-Measurement Facilities", SA23-2260. + * User action: + * None. + */ + +/*? + * Text: "The sampling facility is already reserved by %p\n" + * Severity: Warning + * Parameter: + * @1: address of perf sampling support owner + * Description: + * A process tried to reserve the sampling facility support, but it was already + * reserved by another process. + * User action: + * Check whether another process, for example, the perf program or OProfile is + * currently active. Retry activating the sampling facility after the other + * process has ended. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/prng +++ linux-aws-4.15.0/Documentation/kmsg/s390/prng @@ -0,0 +1,103 @@ +/* prng */ + +/*? + * Text: "prng runs in TDES mode with chunksize=%d and reseed_limit=%u\n" + * Severity: Informational + * Parameter: + * @1: read chunk size in bytes + * @2: reseed limit + * Description: + * The pseudo-random number device driver started in triple DES mode. + * For IBM mainframes earlier than IBM zEnterprise EC12 (zEC12), + * triple DES is the only available mode. + * As of zEC12, the preferred mode is SHA-512. + * User action: + * If triple DES is the expected mode, no action is required. + * Otherwise, verify that the prng started with the mode= module or + * prng.mode= kernel parameter set to a value other than 1. + * The value 1 forces triple DES mode. Also ensure that the mainframe + * runs with the latest firmware level. + */ + +/*? + * Text: "The prng module stopped after running in triple DES mode\n" + * Severity: Informational + * Description: + * The pseudo-random number device driver was running in triple DES mode. + * The device driver module, prng, was unloaded, or it stopped + * because Linux shut down. + * User action: + * None. + */ + +/*? + * Text: "The prng module cannot start in SHA-512 mode\n" + * Severity: Error + * Description: + * The pseudo-random number device driver was loaded with the mode= module parameter + * or the prng.mode= kernel parameter set to 2. This setting forces SHA-512 mode, + * but the required support for MSA 5 is not available. This support requires an IBM + * zEnterprise EC12 (zEC12) or later mainframe. + * User action: + * If your mainframe is earlier than zEC12, set the mode= module or + * prng.mode= kernel parameter to 0 or 1 to run the + * pseudo-random number device driver in triple DES mode. + * Otherwise, ensure that MSA 5 support available. + */ + +/*? + * Text: "prng runs in SHA-512 mode with chunksize=%d and reseed_limit=%u\n" + * Severity: Informational + * Parameter: + * @1: read chunk size in bytes + * @2: reseed limit + * Description: + * The pseudo-random number device driver started in SHA-512 mode. + * As of IBM zEnterprise EC12, this is the preferred mode. + * User action: + * None. + */ + +/*? + * Text: "The prng module stopped after running in SHA-512 mode\n" + * Severity: Informational + * Description: + * The pseudo-random number device driver was running in SHA-512 mode. + * The device driver module, prng, was unloaded, or stopped + * because Linux shut down. + * User action: + * None. + */ + +/*? + * Text: "The prng self test state test for the SHA-512 mode failed\n" + * Severity: Error + * Description: + * The pseudo-random number device driver is not operational because the self test failed. + * After processing a published National Institute of Standards and Technology (NIST) test vector for the + * Deterministic Random Bit Generator (DRBG) algorithm, the device driver + * was not in the expected working state. This failure might indicate + * that the cryptographic software or hardware is not working correctly. + * The processed NIST test vector was: Hash Drbg, Sha-512, Count #0. + * User action: + * Unload and reload the prng module, or + * if prng was compiled into the kernel, restart Linux. + * If the error persists, contact your support organization. + */ + +/*? + * Text: "The prng self test data test for the SHA-512 mode failed\n" + * Severity: Error + * Description: + * The pseudo-random number device driver is not operational because the self test failed. + * After processing a published National Institute of Standards and Technology (NIST) test vector for the + * Deterministic Random Bit Generator (DRBG) algorithm, the device driver + * did not produce the expected pseudo-random data. This failure might indicate + * that the cryptographic software or hardware is not working correctly. + * The processed NIST test vector was: Hash Drbg, Sha-512, Count #0. + * User action: + * Unload and reload the prng module, or + * if prng was compiled into the kernel, restart Linux. + * If the error persists, contact your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/qeth +++ linux-aws-4.15.0/Documentation/kmsg/s390/qeth @@ -0,0 +1,929 @@ +/*? + * Text: "%s: The LAN is offline\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A start LAN command was sent by the qeth device driver but the physical or + * virtual adapter has not started the LAN. The LAN might take a few seconds + * to become available. + * User action: + * Check the status of the qeth device, for example, with the lsqeth command. + * If the device does not become operational within a few seconds, initiate a + * recovery process, for example, by writing '1' to the 'recover' sysfs + * attribute of the device. + */ + +/*? + * Text: "%s: A recovery process has been started for the device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A recovery process was started either by the qeth device driver or through + * a user command. + * User action: + * Wait until a message indicates the completion of the recovery process. + */ + +/*? + * Text: "%s: The qeth device driver failed to recover an error on the device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth device driver performed an automatic recovery operation to recover + * an error on a qeth device. The recovery operation failed. + * User action: + * Try the following actions in the given order: i) Check the status of the + * qeth device, for example, with the lsqeth command. ii) Initiate a recovery + * process by writing '1' to the 'recover' sysfs attribute of the device. + * iii) Ungroup and regroup the subchannel triplet of the device. vi) Reboot + * Linux. v) If the problem persists, gather Linux debug data and report the + * problem to your support organization. + */ + +/*? + * Text: "%s: Device recovery failed to restore all offload features\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth device driver performed a recovery operation on a qeth device. Part + * of the recovery is to restore the offload features that were enabled before + * the recovery. At least one of those offload features could not be restored. + * User action: + * Check which offload features are enabled on the device, for example with + * the "ethtool -k" command. Try to explicitly re-enable the missing offload + * features for the device, for example with the "ethtool -K" command. + */ + +/*? + * Text: "%s: The link for interface %s on CHPID 0x%X failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * @3: CHPID + * Description: + * A network link failed. A possible reason for this error is that a physical + * network cable has been disconnected. + * User action: + * Ensure that the network cable on the adapter hardware is connected properly. + * If the connection is to a guest LAN, ensure that the device is still coupled + * to the guest LAN. + */ + +/*? + * Text: "%s: The link for %s on CHPID 0x%X has been restored\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * @3: CHPID + * Description: + * A failed network link has been re-established. A device recovery is in + * progress. + * User action: + * Wait until a message indicates the completion of the recovery process. + */ + +/*? + * Text: "%s: A hardware operation timed out on the device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A hardware operation timed out on the qeth device. + * User action: + * Check the status of the qeth device, for example, with the lsqeth command. + * If the device is not operational, initiate a recovery process, for example, + * by writing '1' to the 'recover' sysfs attribute of the device. + */ + +/*? + * Text: "%s: The adapter hardware is of an unknown type\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth device driver does not recognize the adapter hardware. The cause + * of this problem could be a hardware error or a Linux level that does not + * support your adapter hardware. + * User action: + * i) Investigate if your adapter hardware is supported by your Linux level. + * Consider using hardware that is supported by your Linux level or upgrading + * to a Linux level that supports your hardware. ii) Install the latest + * firmware on your adapter hardware. iii) If the problem persists and is not + * caused by a version mismatch, contact IBM support. + */ + +/*? + * Text: "%s: The adapter is used exclusively by another host\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth adapter is exclusively used by another host. + * User action: + * Use another qeth adapter or configure this one not exclusively to a + * particular host. + */ + +/*? + * Text: "%s: QDIO reported an error, rc=%i\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: return code + * Description: + * The QDIO subsystem reported an error. + * User action: + * Check for related QDIO errors. Check the status of the qeth device, for + * example, with the lsqeth command. If the device is not operational, initiate + * a recovery process, for example, by writing '1' to the 'recover' sysfs + * attribute of the device. + */ + +/*? + * Text: "%s: There is no kernel module to support discipline %d\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * @2: discipline + * Description: + * The qeth device driver or a user command requested a kernel module for a + * particular qeth discipline. Either the discipline is not supported by the + * qeth device driver or the requested module is not available to your Linux + * system. + * User action: + * Check if the requested discipline module has been compiled into the kernel + * or is present in /lib/modules//kernel/drivers/s390/net. + */ + +/*? + * Text: "Initializing the qeth device driver failed\n" + * Severity: Error + * Parameter: + * Description: + * The base module of the qeth device driver could not be initialized. + * User action: + * See errno.h to determine the reason for the error. + * i) Reboot Linux. ii) If the problem persists, gather Linux debug data and + * report the problem to your support organization. + */ + +/*? + * Text: "%s: Registering IP address %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: IP address + * Description: + * An IP address could not be registered with the network adapter. + * User action: + * Check if another operating system instance has already registered the + * IP address with the same network adapter or at the same logical IP subnet. + */ + +/*? + * Text: "%s: Reading the adapter MAC address failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth device driver could not read the MAC address from the network + * adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Starting ARP processing support for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not start ARP support on the network adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Starting IP fragmentation support for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not start IP fragmentation support on the + * network adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Starting VLAN support for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not start VLAN support on the network adapter. + * User action: + * None if you do not require VLAN support. If you need VLAN support, + * ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Starting multicast support for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not start multicast support on the network + * adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Activating IPv6 support for %s failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not activate IPv6 support on the network + * adapter. + * User action: + * None if you do not require IPv6 communication. If you need IPv6 support, + * ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Enabling the passthrough mode for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not enable the passthrough mode on the + * network adapter. The passthrough mode is required for all network traffic + * other than IPv4. In particular, the passthrough mode is required for IPv6 + * traffic. + * User action: + * None if all you want to support is IPv4 communication. If you want to support + * IPv6 or other network traffic apart from IPv4, ungroup and regroup the + * subchannel triplet of the device. If this does not resolve the problem, + * reboot Linux. If the problem persists, gather Linux debug data and report + * the problem to your support organization. + */ + +/*? + * Text: "%s: Enabling broadcast filtering for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not enable broadcast filtering on the network + * adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Setting up broadcast filtering for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not set up broadcast filtering on the network + * adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Setting up broadcast echo filtering for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not set up broadcast echo filtering on the + * network adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: Starting HW checksumming for %s failed, using SW checksumming\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The network adapter supports hardware checksumming for IP packages + * but the qeth device driver could not start hardware checksumming on the + * adapter. The qeth device driver continues to use software checksumming for + * IP packages. + * User action: + * None if you do not require hardware checksumming for network + * traffic. If you want to enable hardware checksumming, ungroup and regroup + * the subchannel triplet of the device. If this does not resolve the problem, + * reboot Linux. If the problem persists, gather Linux debug data and report + * the problem to your support organization. + */ + +/*? + * Text: "%s: Enabling HW checksumming for %s failed, using SW checksumming\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The network adapter supports hardware checksumming for IP packages + * but the qeth device driver could not enable hardware checksumming on the + * adapter. The qeth device driver continues to use software checksumming for + * IP packages. + * User action: + * None if you do not require hardware checksumming for network + * traffic. If you want to enable hardware checksumming, ungroup and regroup + * the subchannel triplet of the device. If this does not resolve the problem, + * reboot Linux. If the problem persists, gather Linux debug data and report + * the problem to your support organization. + */ + +/*? + * Text: "%s: Starting outbound TCP segmentation offload for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The network adapter supports TCP segmentation offload, but the qeth device + * driver could not start this support on the adapter. + * User action: + * None if you do not require TCP segmentation offload. If you want to + * enable TCP segmentation offload, ungroup and regroup the subchannel triplet + * of the device. If this does not resolve the problem, reboot Linux. If the + * problem persists, gather Linux debug data and report the problem to your + * support organization. + */ + +/*? + * Text: "%s: The network adapter failed to generate a unique ID\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * In IBM mainframe environments, network interfaces are not identified by + * a specific MAC address. Therefore, the network adapters provide the network + * interfaces with unique IDs to be used in their IPv6 link local addresses. + * Without such a unique ID, duplicate addresses might be assigned in other + * LPARs. + * User action: + * Install the latest firmware on the adapter hardware. Manually, configure + * an IPv6 link local address for this device. + */ + +/*? + * Text: "There is no IPv6 support for the layer 3 discipline\n" + * Severity: Warning + * Description: + * If you want to use IPv6 with the layer 3 discipline, you need a Linux kernel + * with IPv6 support. Because your Linux kernel has not been compiled with + * IPv6 support, you cannot use IPv6 with the layer 3 discipline, even if your + * adapter supports IPv6. + * User action: + * Use a Linux kernel that has been complied to include IPv6 support if you + * want to use IPv6 with layer 3 qeth devices. + */ + +/*? + * Text: "%s: The qeth device is not configured for the OSI layer required by z/VM\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A qeth device that connects to a virtual network on z/VM must be configured for the + * same Open Systems Interconnection (OSI) layer as the virtual network. An ETHERNET + * guest LAN or VSWITCH uses the data link layer (layer 2) while an IP guest LAN + * or VSWITCH uses the network layer (layer 3). + * User action: + * If you are connecting to an ETHERNET guest LAN or VSWITCH, set the layer2 sysfs + * attribute of the qeth device to 1. If you are connecting to an IP guest LAN or + * VSWITCH, set the layer2 sysfs attribute of the qeth device to 0. + */ + +/*? + * Text: "%s: Starting source MAC-address support for %s failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The qeth device driver could not enable source MAC-address on the network + * adapter. + * User action: + * Ungroup and regroup the subchannel triplet of the device. If this does not + * resolve the problem, reboot Linux. If the problem persists, gather Linux + * debug data and report the problem to your support organization. + */ + +/*? + * Text: "%s: MAC address %pM already exists\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: MAC-address + * Description: + * Setting the MAC address for the qeth device fails, because this + * MAC address is already defined on the OSA CHPID. + * User action: + * Use a different MAC address for this qeth device. + */ + +/*? + * Text: "%s: MAC address %pM is not authorized\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: MAC-address + * Description: + * This qeth device is a virtual network interface card (NIC), to which z/VM + * has already assigned a MAC address. z/VM MAC address verification does + * not allow you to change this predefined address. + * User action: + * None; use the MAC address that has been assigned by z/VM. + */ + +/*? + * Text: "%s: The HiperSockets network traffic analyzer is activated\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The sysfs 'sniffer' attribute of the HiperSockets device has the value '1'. + * The corresponding HiperSockets interface has been switched into promiscuous mode. + * As a result, the HiperSockets network traffic analyzer is started on the device. + * User action: + * None. + */ + + /*? + * Text: "%s: The HiperSockets network traffic analyzer is deactivated\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The sysfs 'sniffer' attribute of the HiperSockets device has the value '1'. + * Promiscuous mode has been switched off for the corresponding HiperSockets interface + * As a result, the HiperSockets network traffic analyzer is stopped on the device. + * User action: + * None. + */ + +/*? + * Text: "%s: The device is not authorized to run as a HiperSockets network traffic analyzer\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The sysfs 'sniffer' attribute of the HiperSockets device has the value '1'. + * The corresponding HiperSockets interface is switched into promiscuous mode + * but the network traffic analyzer (NTA) rules configured at the Support Element (SE) + * do not allow tracing. Possible reasons are: + * - Tracing is not authorized for all HiperSockets LANs in the mainframe system + * - Tracing is not authorized for this HiperSockets LAN + * - LPAR is not authorized to enable an NTA + * User action: + * Configure appropriate HiperSockets NTA rules at the SE. + */ + +/*? + * Text: "%s: A HiperSockets network traffic analyzer is already active in the HiperSockets LAN\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The sysfs 'sniffer' attribute of the HiperSockets device has the value '1'. + * The HiperSockets interface is switched into promiscuous mode but another + * HiperSockets device on the same HiperSockets LAN is already running as + * a network traffic analyzer. + * A HiperSockets LAN can only have one active network traffic analyzer. + * User action: + * Do not configure multiple HiperSockets devices in the same HiperSockets LAN as + * tracing devices. + */ + +/*? + * Text: "%s: Enabling HW TX checksumming for %s failed, using SW TX checksumming\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * Description: + * The network adapter supports hardware checksumming for outgoing IP packages + * but the qeth device driver could not enable hardware TX checksumming on the + * adapter. The qeth device driver continues to use software checksumming for + * outgoing IP packages. + * User action: + * None if you do not require hardware checksumming for outgoing network + * traffic. If you want to enable hardware checksumming, ungroup and regroup + * the subchannel triplet of the device. If this does not resolve the problem, + * reboot Linux. If the problem persists, gather Linux debug data and report + * the problem to your support organization. + */ + +/*? + * Text: "%s: A connection could not be established because of an OLM limit\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * z/OS has activated Optimized Latency Mode (OLM) for a connection through an OSA Express3 adapter. + * This reduces the maximum number of concurrent connections per physical port for shared adapters. + * The new connection would exceed the maximum. Linux cannot establish further connections using + * this adapter. + * User action: + * If possible, deactivate an existing connection that uses this adapter and try again to establish + * the new connection. If you cannot free an existing connection, use a different adapter for the + * new connection. + */ + +/*? + * Text: "%s: Setting the device online failed because of insufficient authorization\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The qeth device is configured with OSX CHPIDs. An OSX CHPID cannot be activated unless the LPAR is explicitly authorized to access it. + * For z/VM guest operating systems, the z/VM user ID must be explicitly authorized in addition to the LPAR. + * You grant these authorizations through the Service Element. + * User action: + * At the Service Element, authorize the LPAR and, if applicable, the z/VM user ID for using the OSX CHPIDs with which the qeth device has been configured. + * Then try again to set the device online. + */ + +/*? + * Text: "%s: portname is deprecated and is ignored\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * An OSA-Express port name was required to identify a shared OSA port. + * All operating system instances that shared the port had to use the same port name. + * This requirement no longer applies, and the specified portname attribute is ignored. + * User action: + * For future upgrades, remove OSA port name specifications from your + * network configuration. + */ + +/*? Text: "core functions removed\n" */ +/*? Text: "%s: Device is a%s card%s%s%s\nwith link type %s.\n" */ +/*? Text: "%s: issue_next_read failed: no iob available!\n" */ +/*? Text: "%s: Priority Queueing not supported\n" */ +/*? Text: "%s: sense data available. cstat 0x%X dstat 0x%X\n" */ +/*? Text: "loading core functions\n" */ +/*? Text: "%s: MAC address %pM successfully registered on device %s\n" */ +/*? Text: "%s: Device successfully recovered!\n" */ +/*? Text: "register layer 2 discipline\n" */ +/*? Text: "unregister layer 2 discipline\n" */ +/*? Text: "%s: Hardware IP fragmentation not supported on %s\n" */ +/*? Text: "%s: IPv6 not supported on %s\n" */ +/*? Text: "%s: VLAN not supported on %s\n" */ +/*? Text: "%s: Inbound source MAC-address not supported on %s\n" */ +/*? Text: "%s: IPV6 enabled\n" */ +/*? Text: "%s: ARP processing not supported on %s!\n" */ +/*? Text: "%s: Hardware IP fragmentation enabled \n" */ +/*? Text: "%s: set adapter parameters not supported.\n" */ +/*? Text: "%s: VLAN enabled\n" */ +/*? Text: "register layer 3 discipline\n" */ +/*? Text: "%s: Outbound TSO enabled\n" */ +/*? Text: "%s: Broadcast not supported on %s\n" */ +/*? Text: "%s: Outbound TSO not supported on %s\n" */ +/*? Text: "%s: Inbound HW Checksumming not supported on %s,\ncontinuing using Inbound SW Checksumming\n" */ +/*? Text: "%s: Using no checksumming on %s.\n" */ +/*? Text: "%s: Broadcast enabled\n" */ +/*? Text: "%s: Multicast not supported on %s\n" */ +/*? Text: "%s: Using SW checksumming on %s.\n" */ +/*? Text: "%s: HW Checksumming (%sbound) enabled\n" */ +/*? Text: "unregister layer 3 discipline\n" */ +/*? Text: "%s: Multicast enabled\n" */ +/*? Text: "%s: QDIO data connection isolation is deactivated\n" */ +/*? Text: "%s: QDIO data connection isolation is activated\n" */ +/*? Text: "%s: Adapter does not support QDIO data connection isolation\n" */ +/*? Text: "%s: Adapter is dedicated. QDIO data connection isolation not supported\n" */ +/*? Text: "%s: TSO does not permit QDIO data connection isolation\n" */ +/*? Text: "%s: HW TX Checksumming enabled\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "qeth_l3: ignoring TR device\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ + +/*? + * Text: "%s: Turning off reflective relay mode at the adjacent switch failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The policy for the QDIO data connection isolation was + * changed successfully, and communications are now handled according to the + * new policy. The ISOLATION_FORWARD policy is no longer used, but the qeth + * device driver could not turn off the reflective relay mode on the adjacent + * switch port. + * User action: + * Check the adjacent switch for errors and correct the problem. + */ + +/*? + * Text: "%s: The adjacent switch port does not support reflective relay mode\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The 'isolation' sysfs attribute of the qeth device could not be set to 'forward'. + * This setting selects the ISOLATION_FORWARD policy for the QDIO data connection + * isolation. The ISOLATION_FORWARD policy requires a network adapter in Virtual + * Ethernet Port Aggregator (VEPA) mode with an adjacent switch port in reflective + * relay mode. + * User action: + * Use a switch port that supports reflective relay mode if you want to use the + * ISOLATION_FORWARD policy for the qeth device. + */ + +/*? + * Text: "%s: The reflective relay mode cannot be enabled at the adjacent switch port" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The 'isolation' sysfs attribute of the qeth device could not be set to 'forward'. + * This setting selects the ISOLATION_FORWARD policy for the QDIO data connection + * isolation. The ISOLATION_FORWARD policy requires a network adapter in Virtual + * Ethernet Port Aggregator (VEPA) mode with an adjacent switch port in reflective relay + * mode. The qeth device driver failed to enable the required reflective relay mode on + * the adjacent switch port although the switch port supports this mode. + * User action: + * Enable reflective relay mode on the switch for the adjacent port and try again. + */ + +/*? + * Text: "%s: Interface %s is down because the adjacent port is no longer in reflective relay mode\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * @2: interface name + * Description: + * The ISOLATION_FORWARD policy is active for the QDIO data connection isolation + * of the qeth device. This policy requires a network adapter in Virtual Ethernet + * Port Aggregator (VEPA) mode with an adjacent switch port in reflective relay mode. + * The reflective relay mode on the adjacent switch port was disabled. The qeth device + * was set offline and the interface was deactivated to prevent any unintended network traffic. + * User action: + * Enable the reflective relay mode again on the adjacent port or use the 'isolation' + * sysfs attribute of the qeth device to set a different policy for the QDIO data connection + * isolation. You can then resume operations by setting the qeth device back + * online and activating the interface. + */ + +/*? + * Text: "%s: Failed to create completion queue\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The HiperSockets device could not be configured with a completion queue. + * A completion queue is required to operate AF_IUCV communication in an LPAR. + * User action: + * i) Investigate if you have the latest firmware level in place. + * ii) If the problem persists and is not caused by a version mismatch, contact IBM + * support. + */ + +/*? + * Text: "%s: Completion Queueing supported\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The HiperSockets device supports completion queueing. This is required to + * set up AF_IUCV communication in an LPAR. + */ + +/*? + * Text: "%s: Completion Queue support enabled" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The HiperSockets device is enabled for completion queueing. This is part of + * the process to set up AF_IUCV communication in an LPAR. + */ + +/*? + * Text: "%s: Completion Queue support disabled" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The HiperSockets device is disabled for completion queueing. This device + * cannot or no longer be used to set up AF_IUCV communication in an LPAR. + */ + +/*? + * Text: "%s: The device represents a Bridge Capable Port\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * Description: + * You can configure this device as a Bridge Port. + * User action: + * None. + */ + +/*? + * Text: "%s: The device is not configured as a Bridge Port\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The Bridge Port role cannot be withdrawn from a device + * that is not configured as a Bridge Port. + * User action: + * None. + */ + +/*? + * Text: "%s: The LAN already has a primary Bridge Port\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A LAN can have multiple secondary Bridge Ports, but only + * one primary Bridge Port. Configuring the device as a + * primary Bridge Port failed because another port on the + * LAN has been configured as the primary Bridge Port. + * User action: + * Find out which operating system instance has configured the primary + * Bridge Port. Assure that the primary role for this port is withdrawn + * before trying again to configure your device as the primary Bridge + * Port. Alternatively, consider configuring your device as a secondary + * Bridge Port. + */ + +/*? + * Text: "%s: The device is already a secondary Bridge Port\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A device cannot be configured as a primary or secondary + * Bridge Port if it is already configured as a secondary Bridge Port. + * User action: + * None, if you want the device to be a secondary Bridge Port. + * If you want to configure the device as the primary Bridge Port, + * withdraw the secondary role by writing 'none' to the 'bridgeport_role' + * sysfs attribute of the device. Then try again to configure the + * device as the primary Bridge Port. + */ + +/*? + * Text: "%s: The LAN cannot have more secondary Bridge Ports\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A LAN can have up to five secondary Bridge Ports. + * You cannot configure a further device as a secondary + * Bridge Port unless the Bridge Ports role is withdrawn from one of + * the existing secondary Bridge Ports. + * User action: + * Assure that the Bridge Port role is withdrawn from one of the + * existing secondary Bridge Ports before trying again to configure your + * device as a secondary Bridge Port. + */ + +/*? + * Text: "%s: The device is already a primary Bridge Port\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * A device cannot be configured as a primary or secondary + * Bridge Port if it is already configured as a primary Bridge Port. + * User action: + * None, if you want the device to be a primary Bridge Port. + * If you want to configure the device as a secondary Bridge Port, + * withdraw the primary role by writing 'none' to the 'bridgeport_role' + * sysfs attribute of the device. Then try again to configure the + * device as the secondary Bridge Port. + */ + +/*? + * Text: "%s: The device is not authorized to be a Bridge Port\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * The device cannot be configured as a Bridge Port because + * the required authorizations in the hardware are not in place. + * User action: + * See your hardware documentation about how to authorize + * ports for becoming a Bridge Port. + */ + +/*? + * Text: "%s: A Bridge Port is already configured by a different operating system\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * Linux instances cannot configure the target port as a Bridge Port. + * Another operating system already uses a Bridge Port on the HiperSockets + * or on the OSA adapter. For example, a z/VM instance might be using + * a port in a VSWITCH configuration. Multiple Bridge Ports on the same + * HiperSockets or OSA adapter must be configured by instances of the same + * operating system, for example, all Linux or all z/VM. + * User action: + * Reconsider your network topology. Configure Bridge Ports only for ports + * on adapters where any other Bridge Ports are configured by other Linux + * instances. + */ + +/*? + * Text: "%s: Setting address notification failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the qeth device + * Description: + * Enabling or disabling the address notification feature of a + * HiperSockets device failed. The device might not be configured as a + * Bridge Port. + * User action: + * None, unless you need address notifications for this device. + * If you need notifications, confirm that your device is attached to a + * HiperSockets LAN that supports Bridge Capable Ports and that your + * device is configured as a Bridge Port. If the 'bridgeport_role' + * sysfs attribute of the device contains, one of the values 'primary' + * or 'secondary' and you cannot set the address notification, contact + * your support organization. + */ + +/*? + * Text: "%s: Address notification from the Bridge Port stopped %s (%s)\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the qeth device + * @2: network interface name + * @3: error reported by the hardware + * Description: + * A Bridge Port no longer provides address notifications. + * Possible reasons include traffic overflow and that the device is no + * longer configured as a Bridge Port. A udev event with + * BRIDGEDHOST=abort was emitted to alert applications that rely on the + * address notifications. + * User action: + * None. + */ + +/*? + * Text: "%s: The qeth driver ran out of channel command buffers\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the qeth device + * Description: + * Command buffers can temporarily run out during periods of + * intense network configuration activities. + * The device driver recovers from this condition as outstanding + * commands are completed. + * User action: + * Wait for a short time. If the problem persists, + * initiate a recovery process by writing '1' to the 'recover' + * sysfs attribute of the device. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/s390dbf +++ linux-aws-4.15.0/Documentation/kmsg/s390/s390dbf @@ -0,0 +1,83 @@ +/*? + * Text: "Root becomes the owner of all s390dbf files in sysfs\n" + * Severity: Warning + * Description: + * The S/390 debug feature you are using only supports uid/gid = 0. + * User action: + * None. + */ + +/*? + * Text: "Registering debug feature %s failed\n" + * Severity: Error + * Parameter: + * @1: feature name + * Description: + * The initialization of an S/390 debug feature failed. A likely cause of this + * problem is memory constraints. The system keeps running, but the debug + * data for this feature will not be available in sysfs. + * User action: + * Consider assigning more memory to your LPAR or z/VM guest virtual machine. + */ + +/*? + * Text: "Registering view %s/%s would exceed the maximum number of views %i\n" + * Severity: Error + * Parameter: + * @1: feature name + * @2: view name + * @3: maximum + * Description: + * The maximum number of allowed debug feature views has been reached. The + * view has not been registered. The system keeps running but the new view + * will not be available in sysfs. This is a program error. + * User action: + * Report this problem to your support partner. + */ + +/*? + * Text: "%s is not a valid level for a debug feature\n" + * Severity: Warning + * Parameter: + * @1: level + * Description: + * Setting a new level for a debug feature by using the 'level' sysfs attribute + * failed. Valid levels are the minus sign (-) and the integers in the + * range 0 to 6. The minus sign switches off the feature. The numbers switch + * the feature on, where higher numbers produce more debug output. + * User action: + * Write a valid value to the 'level' sysfs attribute. + */ + +/*? + * Text: "Flushing debug data failed because %c is not a valid area\n" + * Severity: Informational + * Parameter: + * @1: debug area number + * Description: + * Flushing a debug area by using the 'flush' sysfs attribute failed. Valid + * values are the minus sign (-) for flushing all areas, or the number of the + * respective area for flushing a single area. + * User action: + * Write a valid area number or the minus sign (-) to the 'flush' sysfs + * attribute. + */ + +/*? + * Text: "Allocating memory for %i pages failed\n" + * Severity: Informational + * Parameter: + * @1: number of pages + * Description: + * Setting the debug feature size by using the 'page' sysfs attribute failed. + * Linux did not have enough memory for expanding the debug feature to the + * requested size. + * User action: + * Use a smaller number of pages for the debug feature or allocate more + * memory to your LPAR or z/VM guest virtual machine. + */ + +/*? Text: "%s: set new size (%i pages)\n" */ +/*? Text: "%s: switched off\n" */ +/*? Text: "%s: level %i is out of range (%i - %i)\n" */ +/*? Text: "Registering view %s/%s failed due to out of memory\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/sclp_cmd +++ linux-aws-4.15.0/Documentation/kmsg/s390/sclp_cmd @@ -0,0 +1,44 @@ +/*? Text: "sync request failed (cmd=0x%08x, status=0x%02x)\n" */ +/*? Text: "readcpuinfo failed (response=0x%04x)\n" */ +/*? Text: "configure cpu failed (cmd=0x%08x, response=0x%04x)\n" */ +/*? Text: "configure channel-path failed (cmd=0x%08x, response=0x%04x)\n" */ +/*? Text: "read channel-path info failed (response=0x%04x)\n" */ +/*? Text: "assign storage failed (cmd=0x%08x, response=0x%04x, rn=0x%04x)\n" */ +/*? Text: "configure PCI I/O adapter failed: cmd=0x%08x response=0x%04x\n" */ +/*? Text: "request failed (status=0x%02x)\n" */ +/*? Text: "request failed with response code 0x%x\n" */ + +/*? + * Text: "Memory hotplug state changed, suspend refused.\n" + * Severity: Error + * Description: + * Suspend is refused after a memory hotplug operation was performed. + * User action: + * The system needs to be restarted and no memory hotplug operation must be + * performed in order to allow suspend. + */ + +/*? + * Text: "Standby memory at 0x%llx (%lluM of %lluM usable)\n" + * Severity: Informational + * Parameter: + * @1: start address of standby memory + * @2: usable memory in MB + * @3: total detected memory in MB + * Description: + * Standby memory was detected. It can be used for memory hotplug only + * if it is aligned to the Linux hotplug memory block size. + * If the aligned amount of memory matches the total amount, + * all detected standby memory can be used. Otherwise, some of the detected + * memory is unaligned and cannot be used. + * User action: + * None, if the usable and the total amount of detected standby memory match. + * If the amounts of memory do not match, + * check the memory setup of your guest virtual machine and ensure that + * the standby memory start and end + * address is aligned to the Linux hotplug memory block size. + * On Linux, issue "cat /sys/devices/system/memory/block_size_bytes" + * to find the hotplug memory block size value in hexadecimal notation. + * On z/VM, query your memory setup with "vmcp q v store". + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/sclp_config +++ linux-aws-4.15.0/Documentation/kmsg/s390/sclp_config @@ -0,0 +1,15 @@ +/*? + * Text: "CPU capability may have changed\n" + * Severity: Informational + * Description: + * The capability of the CPUs in the configuration may have been upgraded + * or downgraded. This message may also appear if the capability of the + * CPUs in the configuration did not change. + * For details see the STORE SYSTEM INFORMATION description in the + * "Principles of Operation." + * User action: + * The user can examine /proc/sysinfo for CPU capability values. + */ +/*? Text: "Open for Business request failed with response code 0x%04x\n" */ +/*? Text: "SCLP receiver did not register to receive Configuration Management Data Events.\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/sclp_cpi +++ linux-aws-4.15.0/Documentation/kmsg/s390/sclp_cpi @@ -0,0 +1,3 @@ +/*? Text: "request failed (status=0x%02x)\n" */ +/*? Text: "request failed with response code 0x%x\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/sclp_ocf +++ linux-aws-4.15.0/Documentation/kmsg/s390/sclp_ocf @@ -0,0 +1 @@ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/sclp_sdias +++ linux-aws-4.15.0/Documentation/kmsg/s390/sclp_sdias @@ -0,0 +1,4 @@ +/*? Text: "sclp_send failed for get_nr_blocks\n" */ +/*? Text: "SCLP error: %x\n" */ +/*? Text: "sclp_send failed: %x\n" */ +/*? Text: "Error from SCLP while copying hsa. Event status = %x\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/scm_block +++ linux-aws-4.15.0/Documentation/kmsg/s390/scm_block @@ -0,0 +1,51 @@ +/*? + * Text: "%lx: The capabilities of the SCM increment changed\n" + * Severity: Informational + * Parameter: + * @1: start address of the SCM increment + * Description: + * A configuration change is in progress for the storage class memory (SCM) + * increment. + * User action: + * Verify that the capability of the SCM increment is as intended; for + * example, with lsscm. + */ + +/*? + * Text: "An I/O operation to SCM failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * An error occurred during I/O to storage class memory (SCM). The operation + * was repeated, but the maximum number of retries was exceeded before the + * request could be fulfilled. + * User action: + * Contact your support organization. + */ + +/*? + * Text: "%lx: Write access to the SCM increment is suspended\n" + * Severity: Informational + * Parameter: + * @1: start address of the SCM increment + * Description: + * A concurrent firmware upgrade is in progress. For the duration of the + * upgrade, write access to the storage class memory (SCM) increment has been + * suspended. + * User action: + * None. + */ + +/*? + * Text: "%lx: Write access to the SCM increment is restored\n" + * Severity: Informational + * Parameter: + * @1: start address of the SCM increment + * Description: + * Write access to the storage class memory (SCM) increment was restored + * after a temporary suspension during a concurrent firmware upgrade. + * User action: + * None. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/setup +++ linux-aws-4.15.0/Documentation/kmsg/s390/setup @@ -0,0 +1,165 @@ +/*? + * Text: "The initial RAM disk does not fit into the memory\n" + * Severity: Error + * Description: + * The load address and the size of the initial RAM disk specify a memory + * area that is not available. + * User action: + * Lower the load address of the initial RAM disk, reduce the size of the + * initial RAM disk, or increase the size of the system memory to make the + * initial RAM disk fit into the memory. + */ + +/*? + * Text: "The maximum memory size is %luMB\n" + * Severity: Notice + * Parameter: + * @1: size in MB + * Description: + * The system memory size cannot exceed the amount of memory that is + * provided by the real or virtual hardware. It can be further reduced + * through an upper memory address limit that is specified with the + * mem= kernel parameter. + * User action: + * None. + */ + +/*? + * Text: "Linux is running as a z/VM guest operating system in 31-bit mode\n" + * Severity: Informational + * Description: + * The 31-bit Linux kernel detected that it is running as a guest operating + * system of the z/VM hypervisor. + * User action: + * None. + */ + +/*? + * Text: "Linux is running natively in 31-bit mode\n" + * Severity: Informational + * Description: + * The 31-bit Linux kernel detected that it is running on an IBM mainframe, + * either as the sole operating system in an LPAR or as the sole operating + * system on the entire mainframe. The Linux kernel is not running as a + * guest operating system of the z/VM hypervisor. + * User action: + * None. + */ + +/*? + * Text: "The hardware system has IEEE compatible floating point units\n" + * Severity: Informational + * Description: + * The Linux kernel detected that it is running on a hardware system with + * CPUs that have IEEE compatible floating point units. + * User action: + * None. + */ + +/*? + * Text: "The hardware system has no IEEE compatible floating point units\n" + * Severity: Informational + * Description: + * The Linux kernel detected that it is running on a hardware system with + * CPUs that do not have IEEE compatible floating point units. + * User action: + * None. + */ + +/*? + * Text: "Linux is running as a z/VM guest operating system in 64-bit mode\n" + * Severity: Informational + * Description: + * The 64-bit Linux kernel detected that it is running as a guest operating + * system of the z/VM hypervisor. + * User action: + * None. + */ + +/*? + * Text: "Linux is running under KVM in 64-bit mode\n" + * Severity: Informational + * Description: + * The 64-bit Linux kernel detected that it is running as a guest operating + * system of the KVM hypervisor. + * User action: + * None. + */ + +/*? + * Text: "Linux is running natively in 64-bit mode\n" + * Severity: Informational + * Description: + * The 64-bit Linux kernel detected that it is running on an IBM mainframe, + * either as the sole operating system in an LPAR or as the sole operating + * system on the entire mainframe. The Linux kernel is not running as a + * guest operating system of the z/VM hypervisor. + * User action: + * None. + */ + +/*? + * Text: "Defining the Linux kernel NSS failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * The Linux kernel could not define the named saved system (NSS) with + * the z/VM CP DEFSYS command. The return code represents the numeric + * portion of the CP DEFSYS error message. + * User action: + * For return code 1, the z/VM guest virtual machine is not authorized + * to define named saved systems. + * Ensure that the z/VM guest virtual machine is authorized to issue + * the CP DEFSYS command (typically privilege class E). + * For other return codes, see the help and message documentation for + * the CP DEFSYS command. + */ + +/*? + * Text: "Saving the Linux kernel NSS failed with rc=%d\n" + * Severity: Error + * Parameter: + * @1: return code + * Description: + * The Linux kernel could not save the named saved system (NSS) with + * the z/VM CP SAVESYS command. The return code represents the numeric + * portion of the CP SAVESYS error message. + * User action: + * For return code 1, the z/VM guest virtual machine is not authorized + * to save named saved systems. + * Ensure that the z/VM guest virtual machine is authorized to issue + * the CP SAVESYS command (typically privilege class E). + * For other return codes, see the help and message documentation for + * the CP SAVESYS command. + */ + +/*? + * Text: "crashkernel reservation failed: %s\n" + * Severity: Informational + * Parameter: + * @1: reason string + * Description: + * The memory reservation for the kdump "crashkernel" parameter was not + * successful. The Linux kernel was either not able to find a free memory + * area or an invalid area has been defined. The reason string describes the + * cause of the failure in more detail. + * User action: + * Increase the memory footprint of your virtual machine or adjust the values + * for the "crashkernel" kernel parameter. Then boot your Linux system again. + */ + +/*? + * Text: "Reserving %lluMB of memory at %lluMB for crashkernel (System RAM: %luMB)\n" + * Severity: Informational + * Parameter: + * @1: amount of reserved memory + * @2: storage location of reserved memory + * @3: amount of system RAM + * Description: + * The memory reservation for the kdump "crashkernel" parameter was successful + * and a kdump kernel can now be loaded with the kexec tool. + * User action: + * None. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/smsgiucv +++ linux-aws-4.15.0/Documentation/kmsg/s390/smsgiucv @@ -0,0 +1 @@ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/smsgiucv_app +++ linux-aws-4.15.0/Documentation/kmsg/s390/smsgiucv_app @@ -0,0 +1 @@ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/tape +++ linux-aws-4.15.0/Documentation/kmsg/s390/tape @@ -0,0 +1,63 @@ +/*? + * Text: "%s: A tape unit was detached while in use\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A tape unit has been detached from the I/O configuration while a tape + * was being accessed. This typically results in I/O error messages and + * potentially in damaged data on the tape. + * User action: + * Check the output of the application that accesses the tape device. + * If this problem occurred during a write-type operation, consider repeating + * the operation after bringing the tape device back online. + */ + +/*? + * Text: "%s: A tape cartridge has been mounted\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the tape device + * Description: + * A tape cartridge has been inserted into the tape unit. The tape in the + * tape unit is ready to be accessed. + * User action: + * None. + */ + +/*? + * Text: "%s: The tape cartridge has been successfully unloaded\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape cartridge has been unloaded from the tape unit. Insert a tape + * cartridge before accessing the tape device. + * User action: + * None. + */ + +/*? + * Text: "A cartridge is loaded in tape device %s, refusing to suspend\n" + * Severity: Error + * Parameter: + * @1: bus ID of the tape device + * Description: + * A request to suspend a tape device currently loaded with a cartridge is + * rejected. + * User action: + * Unload the tape device. Then try to suspend the system again. + */ + +/*? + * Text: "Tape device %s is busy, refusing to suspend\n" + * Severity: Error + * Parameter: + * @1: bus ID of the tape device + * Description: + * A request to suspend a tape device being currently in use is rejected. + * User action: + * Terminate applications performing tape operations + * and then try to suspend the system again. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/tape_34xx +++ linux-aws-4.15.0/Documentation/kmsg/s390/tape_34xx @@ -0,0 +1,418 @@ +/*? + * Text: "%s: An unexpected condition %d occurred in tape error recovery\n" + * Severity: Error + * Parameter: + * @1: bus ID of the tape device + * @2: number + * Description: + * The control unit has reported an error condition that is not recognized by + * the error recovery process of the tape device driver. + * User action: + * Report this problem and the condition number from the message to your + * support organization. + */ + +/*? + * Text: "%s: A data overrun occurred between the control unit and tape unit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A data overrun error has occurred on the connection between the control + * unit and the tape unit. If this problem occurred during a write-type + * operation, the integrity of the data on the tape might be compromised. + * User action: + * Use a faster connection. If this problem occurred during a write-type + * operation, consider repositioning the tape and repeating the operation. + */ + +/*? + * Text: "%s: The block ID sequence on the tape is incorrect\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The control unit has detected an incorrect block ID sequence on the tape. + * This problem typically indicates that the data on the tape is damaged. + * User action: + * If this problem occurred during a write-type operation reposition the tape + * and repeat the operation. + */ + +/*? + * Text: "%s: A read error occurred that cannot be recovered\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A read error has occurred that cannot be recovered. The current tape might + * be damaged. + * User action: + * None. + */ + +/*? + * Text: "%s: A write error on the tape cannot be recovered\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A write error has occurred that could not be recovered by the automatic + * error recovery process. + * User action: + * Use a different tape cartridge. + */ + +/*? + * Text: "%s: Writing the ID-mark failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The ID-mark at the beginning of tape could not be written. The tape medium + * might be write-protected. + * User action: + * Try a different tape cartridge. Ensure that the write-protection on the + * cartridge is switched off. + */ + +/*? + * Text: "%s: Reading the tape beyond the end of the recorded area failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A read-type operation failed because it extended beyond the end of the + * recorded area on the tape medium. + * User action: + * None. + */ + +/*? + * Text: "%s: The tape contains an incorrect block ID sequence\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The control unit has detected an incorrect block ID sequence on the tape. + * This problem typically indicates that the data on the tape is damaged. + * User action: + * If this problem occurred during a write-type operation reposition the tape + * and repeat the operation. + */ + +/*? + * Text: "%s: A path equipment check occurred for the tape device\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A path equipment check has occurred. This check indicates problems with the + * connection between the mainframe system and the tape control unit. + * User action: + * Ensure that the cable connections between the mainframe system and the + * control unit are securely in place and not damaged. + */ + +/*? + * Text: "%s: The tape unit cannot process the tape format\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * Either the tape unit is not able to read the format ID mark, or the + * specified format is not supported by the tape unit. + * User action: + * If you do not need the data recorded on the current tape, use a different + * tape or write a new format ID mark at the beginning of the tape. Be aware + * that writing a new ID mark leads to a loss of all data that has been + * recorded on the tape. If you need the data on the current tape, use a tape + * unit that supports the tape format. + */ + +/*? + * Text: "%s: The tape medium is write-protected\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A write-type operation failed because the tape medium is write-protected. + * User action: + * Eject the tape cartridge, switch off the write protection on the cartridge, + * insert the cartridge, and try the operation again. + */ + +/*? + * Text: "%s: The tape does not have the required tape tension\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape does not have the required tape tension. + * User action: + * Rewind and reposition the tape, then repeat the operation. + */ + +/*? + * Text: "%s: The tape unit failed to load the cartridge\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * An error has occurred while loading the tape cartridge. + * User action: + * Unload the cartridge and load it again. + */ + +/*? + * Text: "%s: Automatic unloading of the tape cartridge failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit failed to unload the cartridge. + * User action: + * Unload the cartridge manually by using the eject button on the tape unit. + */ + +/*? + * Text: "%s: An equipment check has occurred on the tape unit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * Possible reasons for the check condition are a unit adapter error, a buffer + * error on the lower interface, an unusable internal path, or an error that + * has occurred while loading the cartridge. + * User action: + * Examine the tape unit and the cartridge loader. Consult the tape unit + * documentation for details. + */ + +/*? + * Text: "%s: The tape information states an incorrect length\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape is shorter than stated at the beginning of the tape data. A + * possible reason for this problem is that the tape might have been physically + * truncated. Data written to the tape might be incomplete or damaged. + * User action: + * If this problem occurred during a write-type operation, consider repeating + * the operation with a different tape cartridge. + */ + +/*? + * Text: "%s: The tape unit is not ready\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit is online but not ready. + * User action: + * Turn the ready switch on the tape unit to the ready position and try the + * operation again. + */ + +/*? + * Text: "%s: The tape medium has been rewound or unloaded manually\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit rewind button, unload button, or both have been used to + * rewind or unload the tape cartridge. A tape cartridge other than the + * intended cartridge might have been inserted or the tape medium might not + * be at the expected position. + * User action: + * Verify that the correct tape cartridge has been inserted and that the tape + * medium is at the required position before continuing to work with the tape. + */ + +/*? + * Text: "%s: The tape subsystem is running in degraded mode\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape subsystem is not operating at its maximum performance. + * User action: + * Contact your service representative for the tape unit and report this + * problem. + */ + +/*? + * Text: "%s: The tape unit is already assigned\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit is already assigned to another channel path. + * User action: + * Free the tape unit from the operating system instance to which it is + * currently assigned then try again. + */ + +/*? + * Text: "%s: The tape unit is not online\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit is not online to the tape device driver. + * User action: + * Ensure that the tape unit is operational and that the cable connections + * between the control unit and the tape unit are securely in place and not + * damaged. + */ + +/*? + * Text: "%s: The control unit has fenced access to the tape volume\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The control unit fences further access to the current tape volume. The data + * integrity on the tape volume might have been compromised. + * User action: + * Rewind and unload the tape cartridge. + */ + +/*? + * Text: "%s: A parity error occurred on the tape bus\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * A data parity check error occurred on the bus. Data that was read or written + * while the error occurred is not valid. + * User action: + * Reposition the tape and repeat the read-type or write-type operation. + */ + +/*? + * Text: "%s: I/O error recovery failed on the tape control unit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * An I/O error occurred that cannot be recovered by the automatic error + * recovery process of the tape control unit. The application that operates + * the tape unit will receive a return value of -EIO which indicates an + * I/O error. The data on the tape might be damaged. + * User action: + * If this problem occurred during a write-type operation, consider + * repositioning the tape and repeating the operation. + */ + +/*? + * Text: "%s: The tape unit requires a firmware update\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit requires firmware patches from the tape control unit but the + * required patches are not available on the control unit. + * User action: + * Make the require patches available on the control unit then reposition the + * tape and retry the operation. For details about obtaining and installing + * firmware updates see the control unit documentation. + */ + +/*? + * Text: "%s: The maximum block size for buffered mode is exceeded\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The block to be written is larger than allowed for the buffered mode. + * User action: + * Use a smaller block size. + */ + +/*? + * Text: "%s: A channel interface error cannot be recovered\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * An error has occurred on the channel interface. This error cannot + * be recovered by the control unit error recovery process. + * User action: + * See the documentation of the control unit. + */ + +/*? + * Text: "%s: A channel protocol error occurred\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * An error was detected in the channel protocol. + * User action: + * Reposition the tape and try the operation again. + */ + +/*? + * Text: "%s: The tape unit does not support the compaction algorithm\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit cannot read the current tape. The data on the tape has been + * compressed with an algorithm that is not supported by the tape unit. + * User action: + * Use a tape unit that supports the compaction algorithm used for the + * current tape. + */ + +/*? + * Text: "%s: The tape unit does not support tape format 3480-2 XF\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit does not support tapes recorded in the 3480-2 XF format. + * User action: + * If you do not need the data recorded on the current tape, rewind the tape + * and overwrite it with a supported format. If you need the data on the + * current tape, use a tape unit that supports the tape format. + */ + +/*? + * Text: "%s: The tape unit does not support format 3480 XF\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit does not support tapes recorded in the 3480 XF format. + * User action: + * If you do not need the data recorded on the current tape, rewind the tape + * and overwrite it with a supported format. If you need the data on the + * current tape, use a tape unit that supports the tape format. + */ + +/*? + * Text: "%s: The tape unit does not support the current tape length\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The length of the tape in the cartridge is incompatible with the tape unit. + * User action: + * Either use a different tape unit or use a tape with a supported length. + */ + +/*? + * Text: "%s: The tape unit does not support the tape length\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The length of the tape in the cartridge is incompatible with the tape + * unit. + * User action: + * Either use a different tape unit or use a tape with a supported length. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/tape_3590 +++ linux-aws-4.15.0/Documentation/kmsg/s390/tape_3590 @@ -0,0 +1,183 @@ +/*? + * Text: "%s: The tape medium must be loaded into a different tape unit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape device has indicated an error condition that requires loading + * the tape cartridge into a different tape unit to recover. + * User action: + * Unload the cartridge and use a different tape unit to retry the operation. + */ + +/*? + * Text: "%s: Tape media information: exception %s, service %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: exception + * @3: service + * Description: + * This is an operating system independent tape medium information message + * that was issued by the tape unit. The information in the message is + * intended for the IBM customer engineer. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: Device subsystem information: exception %s, service %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: exception + * @3: required service action + * Description: + * This is an operating system independent device subsystem information message + * that was issued by the tape unit. The information in the message is + * intended for the IBM customer engineer. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: I/O subsystem information: exception %s, service %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: exception + * @3: required service action + * Description: + * This is an operating system independent I/O subsystem information message + * that was issued by the tape unit. The information in the message is + * intended for the IBM customer engineer. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: The tape unit has issued sense message %s\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: sense message code + * Description: + * The tape unit has issued an operating system independent sense message. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: The tape unit has issued an unknown sense message code 0x%x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: code + * Description: + * The tape device driver has received an unknown sense message from the + * tape unit. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: MIM SEV=%i, MC=%02x, ES=%x/%x, RC=%02x-%04x-%02x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: SEV + * @3: message code + * @4: exception + * @5: required service action + * @6: refcode + * @7: mid + * @8: fid + * Description: + * This is an operating system independent information message that was + * issued by the tape unit. The information in the message is intended for + * the IBM customer engineer. + * User action: + * See to the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: IOSIM SEV=%i, DEVTYPE=3590/%02x, MC=%02x, ES=%x/%x, REF=0x%04x-0x%04x-0x%04x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: SEV + * @3: model + * @4: message code + * @5: exception + * @6: required service action + * @7: refcode1 + * @8: refcode2 + * @9: refcode3 + * Description: + * This is an operating system independent I/O subsystem information message + * that was issued by the tape unit. The information in the message is + * intended for the IBM customer engineer. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: DEVSIM SEV=%i, DEVTYPE=3590/%02x, MC=%02x, ES=%x/%x, REF=0x%04x-0x%04x-0x%04x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: SEV + * @3: model + * @4: message code + * @5: exception + * @6: required service action + * @7: refcode1 + * @8: refcode2 + * @9: refcode3 + * Description: + * This is an operating system independent device subsystem information message + * issued by the tape unit. The information in the message is intended for + * the IBM customer engineer. + * User action: + * See the documentation for the tape unit for further information. + */ + +/*? + * Text: "%s: The tape unit has issued an unknown sense message code %x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * @2: code + * Description: + * The tape device has issued a sense message, that is unknown to the device + * driver. + * User action: + * Use the message code printed as hexadecimal value and see the documentation + * for the tape unit for further information. + */ + +/*? + * Text: "%s: The tape unit failed to obtain the encryption key from EKM\n" + * Severity: Error + * Parameter: + * @1: bus ID of the tape device + * Description: + * The tape unit was unable to retrieve the encryption key required to decode + * the data on the tape from the enterprise key manager (EKM). + * User action: + * See the EKM and tape unit documentation for information about how to enable + * the tape unit to retrieve the encryption key. + */ + +/*? + * Text: "%s: A different host has privileged access to the tape unit\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the tape device + * Description: + * You cannot access the tape unit because a different operating system + * instance has privileged access to the unit. + * User action: + * Unload the current cartridge to solve this problem. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/time +++ linux-aws-4.15.0/Documentation/kmsg/s390/time @@ -0,0 +1,36 @@ +/*? + * Text: "The ETR interface has adjusted the clock by %li microseconds\n" + * Severity: Notice + * Parameter: + * @1: number of microseconds + * Description: + * The external time reference (ETR) interface has synchronized the system + * clock with the external reference and set it to a new value. The time + * difference between the old and new clock value has been passed to the + * network time protocol (NTP) as a single shot adjustment. + * User action: + * None. + */ + +/*? + * Text: "The real or virtual hardware system does not provide an ETR interface\n" + * Severity: Warning + * Description: + * The 'etr=' parameter has been passed on the kernel parameter line for + * a Linux instance that does not have access to the external time reference + * (ETR) facility. + * User action: + * To avoid this warning remove the 'etr=' kernel parameter. + */ + +/*? + * Text: "The real or virtual hardware system does not provide an STP interface\n" + * Severity: Warning + * Description: + * The 'stp=' parameter has been passed on the kernel parameter line for + * a Linux instance that does not have access to the server time protocol + * (STP) facility. + * User action: + * To avoid this warning remove the 'stp=' kernel parameter. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/vmlogrdr +++ linux-aws-4.15.0/Documentation/kmsg/s390/vmlogrdr @@ -0,0 +1,19 @@ +/*? Text: "vmlogrdr: failed to start recording automatically\n" */ +/*? Text: "vmlogrdr: connection severed with reason %i\n" */ +/*? Text: "vmlogrdr: iucv connection to %s failed with rc %i \n" */ +/*? Text: "vmlogrdr: failed to stop recording automatically\n" */ +/*? Text: "not running under VM, driver not loaded.\n" */ + +/*? + * Text: "vmlogrdr: device %s is busy. Refuse to suspend.\n" + * Severity: Error + * Parameter: + * @1: device name + * Description: + * Suspending vmlogrdr devices that are in uses is not supported. + * A request to suspend such a device is refused. + * User action: + * Close all applications that use any of the vmlogrdr devices + * and then try to suspend the system again. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/vmur +++ linux-aws-4.15.0/Documentation/kmsg/s390/vmur @@ -0,0 +1,48 @@ +/*? + * Text: "The %s cannot be loaded without z/VM\n" + * Severity: Error + * Parameter: + * @1: z/VM virtual unit record device driver + * Description: + * The z/VM virtual unit record device driver provides Linux with access to + * z/VM virtual unit record devices like punch card readers, card punches, and + * line printers. On Linux instances that run in environments other than the + * z/VM hypervisor, the device driver does not provide any useful function and + * the corresponding vmur module cannot be loaded. + * User action: + * Load the vmur module only on Linux instances that run as guest operating + * systems of the z/VM hypervisor. If the z/VM virtual unit record device + * has been compiled into the kernel, ignore this message. + */ + +/*? + * Text: "Kernel function alloc_chrdev_region failed with error code %d\n" + * Severity: Error + * Parameter: + * @1: error code according to errno definitions + * Description: + * The z/VM virtual unit record device driver (vmur) needs to register a range + * of character device minor numbers from 0x0000 to 0xffff. + * This registration failed, probably because of memory constraints. + * User action: + * Free some memory and reload the vmur module. If the z/VM virtual unit + * record device driver has been compiled into the kernel reboot Linux. + * Consider assigning more memory to your LPAR or z/VM guest virtual machine. + */ + +/*? + * Text: "Unit record device %s is busy, %s refusing to suspend.\n" + * Severity: Error + * Parameter: + * @1: bus ID of the unit record device + * @1: z/VM virtual unit record device driver + * Description: + * Linux cannot be suspended while a unit record device is in use. + * User action: + * Stop all applications that work on z/VM spool file queues, for example, the + * vmur tool. Then try again to suspend Linux. + */ + +/*? Text: "%s loaded.\n" */ +/*? Text: "%s unloaded.\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/xpram +++ linux-aws-4.15.0/Documentation/kmsg/s390/xpram @@ -0,0 +1,74 @@ +/*? + * Text: "%d is not a valid number of XPRAM devices\n" + * Severity: Error + * Parameter: + * @1: number of partitions + * Description: + * The number of XPRAM partitions specified for the 'devs' module parameter + * or with the 'xpram.parts' kernel parameter must be an integer in the + * range 1 to 32. The XPRAM device driver created a maximum of 32 partitions + * that are probably not configured as intended. + * User action: + * If the XPRAM device driver has been compiled as a separate module, + * unload the module and load it again with a correct value for the 'devs' + * module parameter. If the XPRAM device driver has been compiled + * into the kernel, correct the 'xpram.parts' parameter in the kernel + * command line and restart Linux. + */ + +/*? + * Text: "Not enough expanded memory available\n" + * Severity: Error + * Description: + * The amount of expanded memory required to set up your XPRAM partitions + * depends on the 'sizes' parameter specified for the xpram module or on + * the specifications for the 'xpram.parts' parameter if the XPRAM device + * driver has been compiled into the kernel. Your + * current specification exceed the amount of available expanded memory. + * Your XPRAM partitions are probably not configured as intended. + * User action: + * If the XPRAM device driver has been compiled as a separate module, + * unload the xpram module and load it again with an appropriate value + * for the 'sizes' module parameter. If the XPRAM device driver has been + * compiled into the kernel, adjust the 'xpram.parts' parameter in the + * kernel command line and restart Linux. If you need more than the + * available expanded memory, increase the expanded memory allocation for + * your virtual hardware or LPAR. + */ + +/*? + * Text: "No expanded memory available\n" + * Severity: Error + * Description: + * The XPRAM device driver has been loaded in a Linux instance that runs + * in an LPAR or virtual hardware without expanded memory. + * No XPRAM partitions are created. + * User action: + * Allocate expanded memory for your LPAR or virtual hardware or do not + * load the xpram module. You can ignore this message, if you do not want + * to create XPRAM partitions. + */ + +/*? + * Text: "Resuming the system failed: %s\n" + * Severity: Error + * Parameter: + * @1: cause of the failure + * Description: + * A system cannot be resumed if the expanded memory setup changes + * after hibernation. Possible reasons for the failure are: + * - Expanded memory was removed after hibernation. + * - Size of the expanded memory changed after hibernation. + * The system is stopped with a kernel panic. + * User action: + * Reboot Linux. + */ + +/*? Text: " number of devices (partitions): %d \n" */ +/*? Text: " size of partition %d: %u kB\n" */ +/*? Text: " size of partition %d to be set automatically\n" */ +/*? Text: " memory needed (for sized partitions): %lu kB\n" */ +/*? Text: " partitions to be sized automatically: %d\n" */ +/*? Text: " automatically determined partition size: %lu kB\n" */ +/*? Text: " %u pages expanded memory found (%lu KB).\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/zcrypt +++ linux-aws-4.15.0/Documentation/kmsg/s390/zcrypt @@ -0,0 +1,22 @@ +/*? + * Text: "Cryptographic device %02x.%04x failed and was set offline\n" + * Severity: Error + * Parameter: + * @1: AP device ID + * @2: AP queue + * Description: + * A cryptographic device failed to process a cryptographic request. + * The cryptographic device driver could not correct the error and + * set the device offline. The application that issued the + * request received an indication that the request has failed. + * User action: + * Use the lszcrypt command to confirm that the cryptographic + * hardware is still configured to your LPAR or z/VM guest virtual + * machine. If the device is available to your Linux instance the + * command output contains a line that begins with 'card', + * where is the two-digit decimal number in the message text. + * After ensuring that the device is available, use the chzcrypt command to + * set it online again. + * If the error persists, contact your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/zdump +++ linux-aws-4.15.0/Documentation/kmsg/s390/zdump @@ -0,0 +1,27 @@ +/*? + * Text: "The 32-bit dump tool cannot be used for a 64-bit system\n" + * Severity: Alert + * Description: + * The dump process ends without creating a system dump. + * User action: + * Use a 64-bit dump tool to obtain a system dump for 64-bit Linux instance. + */ +/*? + * Text: "The 64-bit dump tool cannot be used for a 32-bit system\n" + * Severity: Alert + * Description: + * The dump process ends without creating a system dump. + * User action: + * Use a 32-bit dump tool to obtain a system dump for 32-bit Linux instance. + */ +/*? + * Text: "The dump process started for a 64-bit operating system\n" + * Severity: Alert + * Description: + * The SCSI dump process started to create a dump for a 64-bit operating + * system instance. + * User action: + * None. + */ +/*? Text: "0x%x is an unknown architecture.\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/zfcp +++ linux-aws-4.15.0/Documentation/kmsg/s390/zfcp @@ -0,0 +1,709 @@ +/*? + * Text: "%s is not a valid SCSI device\n" + * Severity: Error + * Parameter: + * @1: device specification + * Description: + * The specification for an initial SCSI device provided with the 'zfcp.device' + * kernel parameter or with the 'device' module parameter is syntactically + * incorrect. The specified SCSI device could not be attached to the Linux + * system. + * User action: + * Correct the value for the 'zfcp.device' or 'device' parameter and reboot + * Linux. See "Device Drivers, Features, and Commands" for information about + * the syntax. + */ + +/*? + * Text: "The zfcp device driver could not register with the common I/O layer\n" + * Severity: Error + * Description: + * The device driver initialization failed. A possible cause of this problem is + * memory constraints. + * User action: + * Free some memory and try again to load the zfcp device driver. If the zfcp + * device driver has been compiled into the kernel, reboot Linux. Consider + * assigning more memory to your LPAR or z/VM guest virtual machine. If the + * problem persists, contact your support organization. + */ + +/*? + * Text: "%s: Setting up data structures for the FCP adapter failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The zfcp device driver could not allocate data structures for an FCP adapter. + * A possible reason for this problem is memory constraints. + * User action: + * Set the FCP adapter offline or detach it from the Linux system, free some + * memory and set the FCP adapter online again or attach it again. If this + * problem persists, gather Linux debug data, collect the FCP adapter + * hardware logs, and report the problem to your support organization. + */ + +/*? + * Text: "%s: The FCP device is operational again\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * An FCP device has been unavailable because it had been detached from the + * Linux system or because the corresponding CHPID was offline. The FCP device + * is now available again and the zfcp device driver resumes all operations to + * the FCP device. + * User action: + * None. + */ + +/*? + * Text: "%s: The CHPID for the FCP device is offline\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The CHPID for an FCP device has been set offline, either logically in Linux + * or on the hardware. + * User action: + * Find out which CHPID corresponds to the FCP device, for example, with the + * lscss command. Check if the CHPID has been set logically offline in sysfs. + * Write 'on' to the CHPID's status attribute to set it online. If the CHPID is + * online in sysfs, find out if it has been varied offline through a hardware + * management interface, for example the service element (SE). + */ + +/*? + * Text: "%s: The FCP device has been detached\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * An FCP device is no longer available to Linux. + * User action: + * Ensure that the FCP adapter is operational and attached to the LPAR or z/VM + * virtual machine. + */ + +/*? + * Text: "%s: The FCP device did not respond within the specified time\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The common I/O layer waited for a response from the FCP adapter but + * no response was received within the specified time limit. This might + * indicate a hardware problem. + * User action: + * Consult your hardware administrator. If this problem persists, + * gather Linux debug data, collect the FCP adapter hardware logs, and + * report the problem to your support organization. + */ + +/*? + * Text: "%s: Registering the FCP device with the SCSI stack failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter could not be registered with the Linux SCSI + * stack. A possible reason for this problem is memory constraints. + * User action: + * Set the FCP adapter offline or detach it from the Linux system, free some + * memory and set the FCP adapter online again or attach it again. If this + * problem persists, gather Linux debug data, collect the FCP adapter + * hardware logs, and report the problem to your support organization. + */ + +/*? + * Text: "%s: ERP cannot recover an error on the FCP device\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * An error occurred on an FCP device. The error recovery procedure (ERP) + * could not resolve the error. The FCP device driver cannot use the FCP device. + * User action: + * Check for previous error messages for the same FCP device to find the + * cause of the problem. + */ + +/*? + * Text: "%s: Creating an ERP thread for the FCP device failed.\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The zfcp device driver could not set up error recovery procedure (ERP) + * processing for the FCP device. The FCP device is not available for use + * in Linux. + * User action: + * Free some memory and try again to load the zfcp device driver. If the zfcp + * device driver has been compiled into the kernel, reboot Linux. Consider + * assigning more memory to your LPAR or z/VM guest virtual machine. If the + * problem persists, contact your support organization. + */ + +/*? + * Text: "%s: ERP failed for LUN 0x%016Lx on port 0x%016Lx\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: LUN + * @3: WWPN + * Description: + * An error occurred on the SCSI device at the specified LUN. The error recovery + * procedure (ERP) could not resolve the error. The SCSI device is not + * available. + * User action: + * Verify that the LUN is correct. Check the fibre channel fabric for errors + * related to the specified WWPN and LUN, the storage server, and Linux. + */ + +/*? + * Text: "%s: ERP failed for remote port 0x%016Lx\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: WWPN + * Description: + * An error occurred on a remote port. The error recovery procedure (ERP) + * could not resolve the error. The port is not available. + * User action: + * Verify that the WWPN is correct and check the fibre channel fabric for + * errors related to the WWPN. + */ + +/*? + * Text: "%s: Registering port 0x%016Lx failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: WWPN + * Description: + * The Linux kernel could not allocate enough memory to register the + * remote port with the indicated WWPN with the SCSI stack. The remote + * port is not available. + * User action: + * Free some memory and trigger the rescan for ports. + */ + +/*? + * Text: "%s: A QDIO problem occurred\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * QDIO reported a problem to the zfcp device driver. The zfcp device driver + * tries to recover this problem. + * User action: + * Check for related error messages. If this problem occurs frequently, gather + * Linux debug data and contact your support organization. + */ + +/*? + * Text: "%s: Setting up the QDIO connection to the FCP adapter failed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The zfcp device driver failed to establish a QDIO connection with the FCP + * adapter. + * User action: + * Set the FCP adapter offline or detach it from the Linux system, free some + * memory and set the FCP adapter online again or attach it again. If this + * problem persists, gather Linux debug data, collect the FCP adapter + * hardware logs, and report the problem to your support organization. + */ + +/*? + * Text: "%s: The FCP adapter reported a problem that cannot be recovered\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter has a problem that cannot be recovered by the zfcp device + * driver. The zfcp device driver stopped using the FCP device. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to your support organization. + */ + +/*? + * Text: "%s: There is a wrap plug instead of a fibre channel cable\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter is not physically connected to the fibre channel fabric. + * User action: + * Remove the wrap plug from the FCP adapter and connect the adapter with the + * fibre channel fabric. + */ + +/*? + * Text: "%s: FCP device not operational because of an unsupported FC class\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter hardware does not support the fibre channel service class + * requested by the zfcp device driver. This problem indicates a program error + * in the zfcp device driver. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to your support organization. + */ + +/*? + * Text: "%s: 0x%Lx is an ambiguous request identifier\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: request ID + * Description: + * The FCP adapter reported that it received the same request ID twice. This is + * an error. The zfcp device driver stopped using the FCP device. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to your support organization. + */ + +/*? + * Text: "%s: QTCB version 0x%x not supported by FCP adapter (0x%x to 0x%x)\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: requested version + * @3: lowest supported version + * @4: highest supported version + * Description: + * See message text. + * The queue transfer control block (QTCB) version requested by the zfcp device + * driver is not supported by the FCP adapter hardware. + * User action: + * If the requested version is higher than the highest version supported by the + * hardware, install more recent firmware on the FCP adapter. If the requested + * version is lower then the lowest version supported by the hardware, upgrade + * to a Linux level with a more recent zfcp device driver. + */ + +/*? + * Text: "%s: The FCP adapter could not log in to the fibre channel fabric\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The fibre channel switch rejected the login request from the FCP adapter. + * User action: + * Check the fibre channel fabric or switch logs for possible errors. + */ + +/*? + * Text: "%s: The FCP device is suspended because of a firmware update\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP device is not available while a firmware update is in progress. This + * problem is temporary. The FCP device will resume operations when the + * firmware update is completed. + * User action: + * Wait 10 seconds and try the operation again. + */ + +/*? + * Text: "%s: All NPIV ports on the FCP adapter have been assigned\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The number of N_Port ID Virtualization (NPIV) ports that can be assigned + * on an FCP adapter is limited. Once assigned, NPIV ports are not released + * automatically but have to be released explicitly through the support + * element (SE). + * User action: + * Identify NPIV ports that have been assigned but are no longer in use and + * release them from the SE. + */ + +/*? + * Text: "%s: The link between the FCP adapter and the FC fabric is down\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter is not usable. Specific error information is not available. + * User action: + * Check the cabling and the fibre channel fabric configuration. If this + * problem persists, gather Linux debug data, collect the FCP adapter + * hardware logs, and report the problem to your support organization. + */ + +/*? + * Text: "%s: The QTCB type is not supported by the FCP adapter\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The queue transfer control block (QTCB) type requested by the zfcp device + * driver is not supported by the FCP adapter hardware. + * User action: + * Install the latest firmware on your FCP adapter hardware. If this does not + * resolve the problem, upgrade to a Linux level with a more recent zfcp device + * driver. If the problem persists, contact your support organization. + */ + +/*? + * Text: "%s: The error threshold for checksum statistics has been exceeded\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter has reported a large number of bit errors. This might + * indicate a problem with the physical components of the fibre channel fabric. + * Details about the errors have been written to the HBA trace for the FCP + * adapter. + * User action: + * Check for problems in the fibre channel fabric and ensure that all cables + * are properly plugged. + */ + +/*? + * Text: "%s: The local link has been restored\n" + * Severity: Informational + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * A problem with the connection between the FCP adapter and the adjacent node + * on the fibre channel fabric has been resolved. The FCP adapter is now + * available again. + * User action: + * None. + */ + +/*? + * Text: "%s: The mode table on the FCP adapter has been damaged\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * This is an FCP adapter hardware problem. + * User action: + * Report this problem with FCP hardware logs to IBM support. + */ + +/*? + * Text: "%s: The adjacent fibre channel node does not support FCP\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The fibre channel switch or storage system that is connected to the FCP + * channel does not support the fibre channel protocol (FCP). The zfcp + * device driver stopped using the FCP device. + * User action: + * Check the adjacent fibre channel node. + */ + +/*? + * Text: "%s: The FCP adapter does not recognize the command 0x%x\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: command + * Description: + * A command code that was sent from the zfcp device driver to the FCP adapter + * is not valid. The zfcp device driver stopped using the FCP device. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to your support organization. + */ + +/*? + * Text: "%s: There is no light signal from the local fibre channel cable\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * There is no signal on the fibre channel cable that connects the FCP adapter + * to the fibre channel fabric. + * User action: + * Ensure that the cable is in place and connected properly to the FCP adapter + * and to the adjacent fibre channel switch or storage system. + */ + +/*? + * Text: "%s: The WWPN assignment file on the FCP adapter has been damaged\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * This is an FCP adapter hardware problem. + * User action: + * Report this problem with FCP hardware logs to IBM support. + */ + +/*? + * Text: "%s: The FCP device detected a WWPN that is duplicate or not valid\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * This condition indicates an error in the FCP adapter hardware or in the z/VM + * hypervisor. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to IBM support. + */ + +/*? + * Text: "%s: The fibre channel fabric does not support NPIV\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP adapter requires N_Port ID Virtualization (NPIV) from the adjacent + * fibre channel node. Either the FCP adapter is connected to a fibre channel + * switch that does not support NPIV or the FCP adapter tries to use NPIV in a + * point-to-point setup. The connection is not operational. + * User action: + * Verify that NPIV is correctly used for this connection. Check the FCP adapter + * configuration and the fibre channel switch configuration. If necessary, + * update the fibre channel switch firmware. + */ + +/*? + * Text: "%s: The FCP adapter cannot support more NPIV ports\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * N_Port ID Virtualization (NPIV) ports consume physical resources on the FCP + * adapter. The FCP adapter resources are exhausted. The connection is not + * operational. + * User action: + * Analyze the number of available NPIV ports and which operating system + * instances use them. If necessary, reconfigure your setup to move some + * NPIV ports to an FCP adapter with free resources. + */ + +/*? + * Text: "%s: The adjacent switch cannot support more NPIV ports\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * N_Port ID Virtualization (NPIV) ports consume physical resources. The + * resources of the fibre channel switch that is connected to the FCP adapter + * are exhausted. The connection is not operational. + * User action: + * Analyze the number of available NPIV ports on the adjacent fibre channel + * switch and how they are used. If necessary, reconfigure your fibre channel + * fabric to accommodate the required NPIV ports. + */ + +/*? + * Text: "%s: 0x%x is not a valid transfer protocol status\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: status information + * Description: + * The transfer protocol status information reported by the FCP adapter is not + * a valid status for the zfcp device driver. The zfcp device driver stopped + * using the FCP device. + * User action: + * Gather Linux debug data, collect the FCP adapter hardware logs, and report + * this problem to your support organization. + */ + +/*? + * Text: "%s: Unknown or unsupported arbitrated loop fibre channel topology detected\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The FCP device is connected to a fibre channel arbitrated loop or the FCP adapter + * reported an unknown fibre channel topology. The zfcp device driver supports + * point-to-point connections and switched fibre channel fabrics but not arbitrated + * loop topologies. The FCP device cannot be used. + * User action: + * Check the fibre channel setup and ensure that only supported topologies are + * connected to the FCP adapter. + */ + +/*? + * Text: "%s: FCP adapter maximum QTCB size (%d bytes) is too small\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: maximum supported size + * @3: requested QTCB size + * Description: + * The queue transfer control block (QTCB) size requested by the zfcp + * device driver is not supported by the FCP adapter hardware. + * User action: + * Update the firmware on your FCP adapter hardware to the latest + * available level and update the Linux kernel to the latest supported + * level. If the problem persists, contact your support organization. + */ + +/*? + * Text: "%s: The FCP adapter only supports newer control block versions\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The protocol supported by the FCP adapter is not compatible with the zfcp + * device driver. + * User action: + * Upgrade your Linux kernel to a level that includes a zfcp device driver + * with support for the control block version required by your FCP adapter. + */ + +/*? + * Text: "%s: The FCP adapter only supports older control block versions\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * Description: + * The protocol supported by the FCP adapter is not compatible with the zfcp + * device driver. + * User action: + * Install the latest firmware on your FCP adapter. + */ + +/*? + * Text: "%s: Not enough FCP adapter resources to open remote port 0x%016Lx\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: WWPN + * Description: + * Each port that is opened consumes physical resources of the FCP adapter to + * which it is attached. These resources are exhausted and the specified port + * cannot be opened. + * User action: + * Reduce the total number of remote ports that are attached to the + * FCP adapter. + */ + +/*? + * Text: "%s: LUN 0x%Lx on port 0x%Lx is already in use by CSS%d, MIF Image ID %x\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: LUN + * @3: remote port WWPN + * @4: channel subsystem ID + * @5: MIF Image ID of the LPAR + * Description: + * The SCSI device at the indicated LUN is already in use by another system. + * Only one system at a time can use the SCSI device. + * User action: + * Ensure that the other system stops using the device before trying to use it. + */ + +/*? + * Text: "%s: No handle is available for LUN 0x%016Lx on port 0x%016Lx\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: LUN + * @3: WWPN + * Description: + * The FCP adapter can only open a limited number of SCSI devices. This limit + * has been reached and the SCSI device at the indicated LUN cannot be opened. + * User action: + * For FCP subchannels running in non-NPIV mode, check all SCSI + * devices opened through the FCP adapter and close some of them. For + * FCP subchannels running in NPIV mode, verify the SAN zoning and + * host connections on the storage systems. Ensure that the zoning and + * host connections only allow access to the required LUNs. As a + * workaround, disable the automatic LUN scanning by setting the + * zfcp.allow_lun_scan kernel parameter or the allow_lun_scan module + * parameter to 0. + */ + +/*? + * Text: "%s: Incorrect direction %d, LUN 0x%016Lx on port 0x%016Lx closed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: value in direction field + * @3: LUN + * @4: WWPN + * Description: + * The direction field in a SCSI request contains an incorrect value. The zfcp + * device driver closed down the SCSI device at the indicated LUN. + * User action: + * Gather Linux debug data and report this problem to your support organization. + */ + +/*? + * Text: "%s: Incorrect CDB length %d, LUN 0x%016Lx on port 0x%016Lx closed\n" + * Severity: Error + * Parameter: + * @1: bus ID of the zfcp device + * @2: value in length field + * @3: LUN + * @4: WWPN + * Description: + * The control-data-block (CDB) length field in a SCSI request is not valid or + * too large for the FCP adapter. The zfcp device driver closed down the SCSI + * device at the indicated LUN. + * User action: + * Gather Linux debug data and report this problem to your support organization. + */ + +/*? + * Text: "%s: Opening WKA port 0x%x failed\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: destination ID of the WKA port + * Description: + * The FCP adapter rejected a request to open the specified + * well-known address (WKA) port. No retry is possible. + * User action: + * Verify the setup and check if the maximum number of remote ports + * used through this adapter is below the maximum allowed. If the + * problem persists, gather Linux debug data, collect the FCP adapter + * hardware logs, and report the problem to your support organization. + */ + +/*? + * Text: "%s: The name server reported %d words residual data\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: number of words in residual data + * Description: + * The fibre channel name server sent too much information about remote ports. + * The zfcp device driver did not receive sufficient information to attach all + * available remote ports in the SAN. + * User action: + * Verify that you are running the latest firmware level on the FCP + * adapter. Check your SAN setup and consider reducing the number of ports + * visible to the FCP adapter by using more restrictive zoning in the SAN. + */ + +/*? + * Text: "%s: A port opened with WWPN 0x%016Lx returned data that identifies it as WWPN 0x%016Lx\n" + * Severity: Warning + * Parameter: + * @1: bus ID of the zfcp device + * @2: expected WWPN + * @3: reported WWPN + * Description: + * A remote port was opened successfully, but it reported an + * unexpected WWPN in the returned port login (PLOGI) data. This + * condition might have been caused by a change applied to the SAN + * configuration while the port was being opened. + * User action: + * If this condition is only temporary and access to the remote port + * is possible, no action is required. If the condition persists, + * identify the storage system with the specified WWPN and contact the + * support organization of the storage system. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/s390/zpci +++ linux-aws-4.15.0/Documentation/kmsg/s390/zpci @@ -0,0 +1,42 @@ +/*? + * Text: "%s: Event 0x%x reconfigured PCI function 0x%x\n" + * Severity: Informational + * Parameter: + * @1: device name of the function + * @2: PCI event code + * @3: function ID + * Description: + * The availability of a PCI function has changed. + * Possible reasons for the change include PCI configuration actions on the + * Hardware Management Console or hypervisor. + * For shared PCI functions, the function might also have been reserved or + * released by another system. + * If the device name of a function is shown as 'n/a', the device registration + * with the PCI device driver has not completed. + * The function ID identifies the function to the I/O configuration (IOCDS). + * The PCI event code can be useful diagnostic information for your support + * organization. + * User action: + * None. + */ + +/*? + * Text: "%s: Event 0x%x reports an error for PCI function 0x%x\n" + * Severity: Error + * Parameter: + * @1: device name of the function + * @2: PCI event code + * @3: function ID + * Description: + * A PCI function entered an error state from which it cannot recover + * automatically. + * User action: + * Trigger a recovery action by writing '1' to the 'recover' sysfs attribute + * of the PCI function. + * In sysfs, PCI functions are represented as /sys/bus/pci/devices/, + * where is the device name of the function. + * If the device name of a function is shown as 'n/a', the device + * registration with the PCI device driver has not completed. + * If the problem persists, contact your support organization. + */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ --- linux-aws-4.15.0.orig/Documentation/kmsg/sbp_target +++ linux-aws-4.15.0/Documentation/kmsg/sbp_target @@ -0,0 +1,49 @@ +/*? Text: "ABORT TASK SET not implemented\n" */ +/*? Text: "ABORT TASK not implemented\n" */ +/*? Text: "Cannot change the directory_id on an active target.\n" */ +/*? Text: "Cannot enable a target with no LUNs!\n" */ +/*? Text: "Could not update Config ROM\n" */ +/*? Text: "Ignoring ORB_POINTER write while active.\n" */ +/*? Text: "LOGICAL UNIT RESET not implemented\n" */ +/*? Text: "Node ACL not found for %s\n" */ +/*? Text: "Only one TPG per Unit is possible.\n" */ +/*? Text: "QUERY LOGINS not implemented\n" */ +/*? Text: "Reconnect timer expired for node: %016llx\n" */ +/*? Text: "SET PASSWORD not implemented\n" */ +/*? Text: "TARGET RESET not implemented\n" */ +/*? Text: "Unable to allocate struct sbp_nacl\n" */ +/*? Text: "Unable to allocate struct sbp_tpg\n" */ +/*? Text: "Unable to allocate struct sbp_tport\n" */ +/*? Text: "Waiting for reconnect from node: %016llx\n" */ +/*? Text: "cannot find login: %d\n" */ +/*? Text: "failed to allocate login descriptor\n" */ +/*? Text: "failed to allocate login response block\n" */ +/*? Text: "failed to allocate session descriptor\n" */ +/*? Text: "failed to init se_session\n" */ +/*? Text: "failed to map command block handler: %d\n" */ +/*? Text: "failed to read peer GUID: %d\n" */ +/*? Text: "ignoring management request while busy\n" */ +/*? Text: "ignoring request from foreign node (%x != %x)\n" */ +/*? Text: "ignoring request with wrong generation\n" */ +/*? Text: "initiator already logged-in\n" */ +/*? Text: "login to unknown LUN: %d\n" */ +/*? Text: "logout from different node ID\n" */ +/*? Text: "max number of logins reached\n" */ +/*? Text: "mgt_agent LOGIN to LUN %d from %016llx\n" */ +/*? Text: "mgt_agent LOGOUT from LUN %d session %d\n" */ +/*? Text: "mgt_agent RECONNECT from %016llx\n" */ +/*? Text: "mgt_agent RECONNECT login GUID doesn't match\n" */ +/*? Text: "mgt_agent RECONNECT unknown login ID\n" */ +/*? Text: "mgt_orb bad request\n" */ +/*? Text: "netif_stop_queue() cannot be called before register_netdev()\n" */ +/*? Text: "refusing exclusive login with other active logins\n" */ +/*? Text: "refusing login while another exclusive login present\n" */ +/*? Text: "sbp_run_transaction: page size ignored\n" */ +/*? Text: "sbp_send_sense: unknown sense format: 0x%x\n" */ +/*? Text: "target_fabric_configfs_init() failed\n" */ +/*? Text: "target_fabric_configfs_register() failed for SBP\n" */ +/*? Text: "unknown management function 0x%x\n" */ +/*? Text: "unlink LUN: failed to update unit directory\n" */ +/*? Text: "flen=%u proglen=%u pass=%u image=%pK from=%s pid=%d\n" */ +/*? Text: "%s selects TX queue %d, but real number of TX queues is %d\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ \ No newline at end of file --- linux-aws-4.15.0.orig/Documentation/kmsg/zram +++ linux-aws-4.15.0/Documentation/kmsg/zram @@ -0,0 +1,34 @@ +/*? Text: "Error allocating compressor buffer space\n" */ +/*? Text: "Error allocating memory for compressed page: %u, size=%zu\n" */ +/*? Text: "Error creating memory pool\n" */ +/*? Text: "num_devices not specified. Using default: 1\n" */ +/*? Text: "Error allocating compressor working memory!\n" */ +/*? Text: "Error allocating zram address table\n" */ +/*? Text: "Unable to get major number\n" */ +/*? Text: "Compression failed! err=%d\n" */ +/*? Text: "Decompression failed! err=%d, page=%u\n" */ +/*? Text: "There is little point creating a zram of greater than twice the size of memory since we expect a 2:1 compression ratio. Note that zram uses about 0.1%% of the size of the disk when not in use so a huge zram is wasteful.\n\tMemory Size: %zu kB\n\tSize you selected: %llu kB\nContinuing anyway ...\n" */ +/*? Text: "disk size not provided. You can use disksize_kb module param to specify size.\nUsing default: (%u%% of RAM).\n" */ +/*? Text: "Error creating sysfs group" */ +/*? Text: "Error allocating memory for incompressible page: %u\n" */ +/*? Text: "Creating %u devices ...\n" */ +/*? Text: "Initialization failed: err=%d\n" */ +/*? Text: "Error allocating disk queue for device %d\n" */ +/*? Text: "Error allocating disk structure for device %d\n" */ +/*? Text: "Invalid value for num_devices: %u\n" */ +/*? Text: "Error allocating temp memory!\n" */ +/*? Text: "Unable to allocate temp memory\n" */ +/*? Text: "Created %u device(s) ...\n" */ +/*? Text: "There is little point creating a zram of greater than twice the size of memory since we expect a 2:1 compression ratio. Note that zram uses about 0.1%% of the size of the disk when not in use so a huge zram is wasteful.\n\tMemory Size: %lu kB\n\tSize you selected: %llu kB\nContinuing anyway ...\n" */ +/*? Text: "Cannot change disksize for initialized device\n" */ +/*? Text: "Can't change algorithm for initialized device\n" */ +/*? Text: "Cannot initialise %s compressing backend\n" */ +/*? Text: "Cannot change max compression streams\n" */ +/*? Text: "Destroyed %u device(s)\n" */ +/*? Text: "Created %u device(s)\n" */ +/*? Text: "Unable to register zram-control class\n" */ +/*? Text: "Removed device: %s\n" */ +/*? Text: "Added device: %s\n" */ +/*? Text: "Error creating sysfs group for device %d\n" */ +/*? Text: "Error allocating memory for compressed page: %u, size=%u\n" */ +/*? Text: "%s: %d output lines suppressed due to ratelimiting\n" */ \ No newline at end of file --- linux-aws-4.15.0.orig/Documentation/printk-formats.txt +++ linux-aws-4.15.0/Documentation/printk-formats.txt @@ -476,6 +476,12 @@ Passed by reference. +Kernel messages: + + %pj 123456 + + For generating the jhash of a string truncated to six digits + If you add other ``%p`` extensions, please extend lib/test_printf.c with one or more test cases, if at all feasible. --- linux-aws-4.15.0.orig/Documentation/speculation.txt +++ linux-aws-4.15.0/Documentation/speculation.txt @@ -0,0 +1,90 @@ +This document explains potential effects of speculation, and how undesirable +effects can be mitigated portably using common APIs. + +=========== +Speculation +=========== + +To improve performance and minimize average latencies, many contemporary CPUs +employ speculative execution techniques such as branch prediction, performing +work which may be discarded at a later stage. + +Typically speculative execution cannot be observed from architectural state, +such as the contents of registers. However, in some cases it is possible to +observe its impact on microarchitectural state, such as the presence or +absence of data in caches. Such state may form side-channels which can be +observed to extract secret information. + +For example, in the presence of branch prediction, it is possible for bounds +checks to be ignored by code which is speculatively executed. Consider the +following code: + + int load_array(int *array, unsigned int index) + { + if (index >= MAX_ARRAY_ELEMS) + return 0; + else + return array[index]; + } + +Which, on arm64, may be compiled to an assembly sequence such as: + + CMP , #MAX_ARRAY_ELEMS + B.LT less + MOV , #0 + RET + less: + LDR , [, ] + RET + +It is possible that a CPU mis-predicts the conditional branch, and +speculatively loads array[index], even if index >= MAX_ARRAY_ELEMS. This +value will subsequently be discarded, but the speculated load may affect +microarchitectural state which can be subsequently measured. + +More complex sequences involving multiple dependent memory accesses may +result in sensitive information being leaked. Consider the following +code, building on the prior example: + + int load_dependent_arrays(int *arr1, int *arr2, int index) + { + int val1, val2, + + val1 = load_array(arr1, index); + val2 = load_array(arr2, val1); + + return val2; + } + +Under speculation, the first call to load_array() may return the value +of an out-of-bounds address, while the second call will influence +microarchitectural state dependent on this value. This may provide an +arbitrary read primitive. + +==================================== +Mitigating speculation side-channels +==================================== + +The kernel provides a generic API to ensure that bounds checks are +respected even under speculation. Architectures which are affected by +speculation-based side-channels are expected to implement these +primitives. + +The array_index_nospec() helper in can be used to +prevent information from being leaked via side-channels. + +A call to array_index_nospec(index, size) returns a sanitized index +value that is bounded to [0, size) even under cpu speculation +conditions. + +This can be used to protect the earlier load_array() example: + + int load_array(int *array, unsigned int index) + { + if (index >= MAX_ARRAY_ELEMS) + return 0; + else { + index = array_index_nospec(index, MAX_ARRAY_ELEMS); + return array[index]; + } + } --- linux-aws-4.15.0.orig/MAINTAINERS +++ linux-aws-4.15.0/MAINTAINERS @@ -2486,6 +2486,19 @@ F: include/uapi/linux/audit.h F: kernel/audit* +AUFS (advanced multi layered unification filesystem) FILESYSTEM +M: "J. R. Okajima" +L: linux-unionfs@vger.kernel.org +L: aufs-users@lists.sourceforge.net (members only) +W: http://aufs.sourceforge.net +T: git://github.com/sfjro/aufs4-linux.git +S: Supported +F: Documentation/filesystems/aufs/ +F: Documentation/ABI/testing/debugfs-aufs +F: Documentation/ABI/testing/sysfs-aufs +F: fs/aufs/ +F: include/uapi/linux/aufs_type.h + AUXILIARY DISPLAY DRIVERS M: Miguel Ojeda Sandonis W: http://miguelojeda.es/auxdisplay.htm --- linux-aws-4.15.0.orig/Makefile +++ linux-aws-4.15.0/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 15 -SUBLEVEL = 0 +SUBLEVEL = 3 EXTRAVERSION = NAME = Fearless Coyote @@ -176,6 +176,20 @@ KBUILD_CHECKSRC = 0 endif +# Call message checker as part of the C compilation +# +# Use 'make D=1' to enable checking +# Use 'make D=2' to create the message catalog + +ifdef D + ifeq ("$(origin D)", "command line") + KBUILD_KMSG_CHECK = $(D) + endif +endif +ifndef KBUILD_KMSG_CHECK + KBUILD_KMSG_CHECK = 0 +endif + # Use make M=dir to specify directory of external module to build # Old syntax make ... SUBDIRS=$PWD is still supported # Setting the environment variable KBUILD_EXTMOD take precedence @@ -387,6 +401,7 @@ CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ -Wbitwise -Wno-return-void $(CF) +KMSG_CHECK = $(srctree)/scripts/kmsg-doc NOSTDINC_FLAGS = CFLAGS_MODULE = AFLAGS_MODULE = @@ -395,6 +410,13 @@ AFLAGS_KERNEL = LDFLAGS_vmlinux = +# Prefer linux-backports-modules +ifneq ($(KBUILD_SRC),) +ifneq ($(shell if test -e $(KBUILD_OUTPUT)/ubuntu-build; then echo yes; fi),yes) +UBUNTUINCLUDE := -I/usr/src/linux-headers-lbm-$(KERNELRELEASE) +endif +endif + # Use USERINCLUDE when you must reference the UAPI directories only. USERINCLUDE := \ -I$(srctree)/arch/$(SRCARCH)/include/uapi \ @@ -406,12 +428,16 @@ # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option LINUXINCLUDE := \ + $(UBUNTUINCLUDE) \ -I$(srctree)/arch/$(SRCARCH)/include \ -I$(objtree)/arch/$(SRCARCH)/include/generated \ $(if $(KBUILD_SRC), -I$(srctree)/include) \ -I$(objtree)/include \ $(USERINCLUDE) +# UBUNTU: Include our third party driver stuff too +LINUXINCLUDE += -Iubuntu/include $(if $(KBUILD_SRC),-I$(srctree)/ubuntu/include) + KBUILD_AFLAGS := -D__ASSEMBLY__ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ -fno-strict-aliasing -fno-common -fshort-wchar \ @@ -434,6 +460,7 @@ export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_KASAN CFLAGS_UBSAN export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE +export KBUILD_KMSG_CHECK KMSG_CHECK export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL export KBUILD_ARFLAGS @@ -557,7 +584,7 @@ # Objects we will link into vmlinux / subdirs we need to visit init-y := init/ -drivers-y := drivers/ sound/ firmware/ +drivers-y := drivers/ sound/ firmware/ ubuntu/ net-y := net/ libs-y := lib/ core-y := usr/ @@ -1165,6 +1192,7 @@ $(error Headers not exportable for the $(SRCARCH) architecture)) $(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include $(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst) + $(Q)$(MAKE) $(hdr-inst)=ubuntu/include dst=include oldheaders= PHONY += headers_check_all headers_check_all: headers_install_all @@ -1174,6 +1202,7 @@ headers_check: headers_install $(Q)$(MAKE) $(hdr-inst)=include/uapi dst=include HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi $(hdr-dst) HDRCHECK=1 + $(Q)$(MAKE) $(hdr-inst)=ubuntu/include dst=include oldheaders= HDRCHECK=1 # --------------------------------------------------------------------------- # Kernel selftest --- linux-aws-4.15.0.orig/arch/arm/Kconfig +++ linux-aws-4.15.0/arch/arm/Kconfig @@ -2204,6 +2204,7 @@ source "drivers/Kconfig" source "drivers/firmware/Kconfig" +source "ubuntu/Kconfig" source "fs/Kconfig" --- linux-aws-4.15.0.orig/arch/arm/mach-highbank/Makefile +++ linux-aws-4.15.0/arch/arm/mach-highbank/Makefile @@ -1,3 +1,5 @@ +KBUILD_CFLAGS += -I$(srctree)/arch/arm/mach-highbank/include + obj-y := highbank.o system.o smc.o plus_sec := $(call as-instr,.arch_extension sec,+sec) --- linux-aws-4.15.0.orig/arch/arm64/Kconfig +++ linux-aws-4.15.0/arch/arm64/Kconfig @@ -830,6 +830,7 @@ config FORCE_MAX_ZONEORDER int default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) + default "13" if (ARCH_THUNDER && ARM64_4K_PAGES) default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) default "11" help @@ -1208,6 +1209,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "drivers/firmware/Kconfig" source "drivers/acpi/Kconfig" --- linux-aws-4.15.0.orig/arch/powerpc/Kconfig +++ linux-aws-4.15.0/arch/powerpc/Kconfig @@ -1215,6 +1215,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "fs/Kconfig" source "lib/Kconfig" --- linux-aws-4.15.0.orig/arch/powerpc/Makefile +++ linux-aws-4.15.0/arch/powerpc/Makefile @@ -279,7 +279,7 @@ all: zImage # With make 3.82 we cannot mix normal and wildcard targets -BOOT_TARGETS1 := zImage zImage.initrd uImage +BOOT_TARGETS1 := zImage zImage.initrd uImage vmlinux.strip BOOT_TARGETS2 := zImage% dtbImage% treeImage.% cuImage.% simpleImage.% uImage.% PHONY += $(BOOT_TARGETS1) $(BOOT_TARGETS2) --- linux-aws-4.15.0.orig/arch/powerpc/include/asm/cputhreads.h +++ linux-aws-4.15.0/arch/powerpc/include/asm/cputhreads.h @@ -3,6 +3,7 @@ #define _ASM_POWERPC_CPUTHREADS_H #ifndef __ASSEMBLY__ +#include #include #include --- linux-aws-4.15.0.orig/arch/powerpc/include/asm/paca.h +++ linux-aws-4.15.0/arch/powerpc/include/asm/paca.h @@ -49,6 +49,9 @@ #define get_lppaca() (get_paca()->lppaca_ptr) #define get_slb_shadow() (get_paca()->slb_shadow_ptr) +/* Maximum number of threads per core. */ +#define MAX_SMT 8 + struct task_struct; /* --- linux-aws-4.15.0.orig/arch/powerpc/include/asm/smp.h +++ linux-aws-4.15.0/arch/powerpc/include/asm/smp.h @@ -30,6 +30,7 @@ #include extern int boot_cpuid; +extern int boot_hw_cpuid; extern int spinning_secondaries; extern void cpu_die(void); --- linux-aws-4.15.0.orig/arch/powerpc/kernel/paca.c +++ linux-aws-4.15.0/arch/powerpc/kernel/paca.c @@ -207,6 +207,7 @@ { u64 limit; int cpu; + unsigned int nr_cpus; limit = ppc64_rma_size; @@ -219,20 +220,32 @@ limit = min(0x10000000ULL, limit); #endif - paca_size = PAGE_ALIGN(sizeof(struct paca_struct) * nr_cpu_ids); + /* + * Always align up the nr_cpu_ids to SMT threads and allocate + * the paca. This will help us to prepare for a situation where + * boot cpu id > nr_cpus_id. We will use the last nthreads + * slots (nthreads == threads per core) to accommodate a core + * that contains boot cpu thread. + * + * Do not change nr_cpu_ids value here. Let us do that in + * early_init_dt_scan_cpus() where we know exact value + * of threads per core. + */ + nr_cpus = _ALIGN_UP(nr_cpu_ids, MAX_SMT); + paca_size = PAGE_ALIGN(sizeof(struct paca_struct) * nr_cpus); paca = __va(memblock_alloc_base(paca_size, PAGE_SIZE, limit)); memset(paca, 0, paca_size); printk(KERN_DEBUG "Allocated %u bytes for %u pacas at %p\n", - paca_size, nr_cpu_ids, paca); + paca_size, nr_cpus, paca); - allocate_lppacas(nr_cpu_ids, limit); + allocate_lppacas(nr_cpus, limit); - allocate_slb_shadows(nr_cpu_ids, limit); + allocate_slb_shadows(nr_cpus, limit); /* Can't use for_each_*_cpu, as they aren't functional yet */ - for (cpu = 0; cpu < nr_cpu_ids; cpu++) + for (cpu = 0; cpu < nr_cpus; cpu++) initialise_paca(&paca[cpu], cpu); } --- linux-aws-4.15.0.orig/arch/powerpc/kernel/pci-common.c +++ linux-aws-4.15.0/arch/powerpc/kernel/pci-common.c @@ -331,6 +331,7 @@ } return NULL; } +EXPORT_SYMBOL(pci_find_hose_for_OF_device); /* * Reads the interrupt pin to determine if interrupt is use by card. @@ -1648,6 +1649,7 @@ { return pci_bus_find_capability(fake_pci_bus(hose, bus), devfn, cap); } +EXPORT_SYMBOL_GPL(early_find_capability); struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus) { --- linux-aws-4.15.0.orig/arch/powerpc/kernel/prom.c +++ linux-aws-4.15.0/arch/powerpc/kernel/prom.c @@ -303,6 +303,29 @@ } } +/* + * Adjust the logical id of a boot cpu to fall under nr_cpu_ids. Map it to + * last core slot in the allocated paca array. + * + * e.g. on SMT=8 system, kernel booted with nr_cpus=1 and boot cpu = 33, + * align nr_cpu_ids to MAX_SMT value 8. Allocate paca array to hold up-to + * MAX_SMT=8 cpus. Since boot cpu 33 is greater than nr_cpus (8), adjust + * its logical id so that new id becomes less than nr_cpu_ids. Make sure + * that boot cpu's new logical id is aligned to its thread id and falls + * under last nthreads slots available in paca array. In this case the + * boot cpu 33 is adjusted to new boot cpu id 1. + * + */ +static inline void adjust_boot_cpuid(int nthreads, int phys_id) +{ + boot_hw_cpuid = phys_id; + if (boot_cpuid >= nr_cpu_ids) { + boot_cpuid = (boot_cpuid % nthreads) + (nr_cpu_ids - nthreads); + pr_info("Adjusted logical boot cpu id: logical %d physical %d\n", + boot_cpuid, phys_id); + } +} + static int __init early_init_dt_scan_cpus(unsigned long node, const char *uname, int depth, void *data) @@ -326,6 +349,18 @@ nthreads = len / sizeof(int); +#ifdef CONFIG_SMP + /* + * Now that we know threads per core lets align nr_cpu_ids to + * correct SMT value. + */ + if (nr_cpu_ids % nthreads) { + nr_cpu_ids = _ALIGN_UP(nr_cpu_ids, nthreads); + pr_info("Aligned nr_cpus to SMT=%d, nr_cpu_ids = %d\n", + nthreads, nr_cpu_ids); + } +#endif + /* * Now see if any of these threads match our boot cpu. * NOTE: This must match the parsing done in smp_setup_cpu_maps. @@ -364,7 +399,9 @@ DBG("boot cpu: logical %d physical %d\n", found, be32_to_cpu(intserv[found_thread])); boot_cpuid = found; - set_hard_smp_processor_id(found, be32_to_cpu(intserv[found_thread])); + adjust_boot_cpuid(nthreads, be32_to_cpu(intserv[found_thread])); + set_hard_smp_processor_id(boot_cpuid, + be32_to_cpu(intserv[found_thread])); /* * PAPR defines "logical" PVR values for cpus that --- linux-aws-4.15.0.orig/arch/powerpc/kernel/setup-common.c +++ linux-aws-4.15.0/arch/powerpc/kernel/setup-common.c @@ -85,6 +85,7 @@ EXPORT_SYMBOL(machine_id); int boot_cpuid = -1; +int boot_hw_cpuid = -1; EXPORT_SYMBOL_GPL(boot_cpuid); /* @@ -462,6 +463,7 @@ struct device_node *dn = NULL; int cpu = 0; int nthreads = 1; + bool boot_cpu_added = false; DBG("smp_setup_cpu_maps()\n"); @@ -488,6 +490,24 @@ } nthreads = len / sizeof(int); + /* + * If boot cpu hasn't been added to paca and there are only + * last nthreads slots available in paca array then wait + * for boot cpu to show up. + */ + if (!boot_cpu_added && (cpu + nthreads) >= nr_cpu_ids) { + int found = 0; + + DBG("Holding last nthreads paca slots for boot cpu\n"); + for (j = 0; j < nthreads && cpu < nr_cpu_ids; j++) { + if (boot_hw_cpuid == be32_to_cpu(intserv[j])) { + found = 1; + break; + } + } + if (!found) + continue; + } for (j = 0; j < nthreads && cpu < nr_cpu_ids; j++) { bool avail; @@ -503,6 +523,11 @@ set_cpu_present(cpu, avail); set_hard_smp_processor_id(cpu, be32_to_cpu(intserv[j])); set_cpu_possible(cpu, true); + if (boot_hw_cpuid == be32_to_cpu(intserv[j])) { + DBG("Boot cpu %d (hard id %d) added to paca\n", + cpu, be32_to_cpu(intserv[j])); + boot_cpu_added = true; + } cpu++; } } --- linux-aws-4.15.0.orig/arch/powerpc/lib/sstep.c +++ linux-aws-4.15.0/arch/powerpc/lib/sstep.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include --- linux-aws-4.15.0.orig/arch/s390/Kconfig +++ linux-aws-4.15.0/arch/s390/Kconfig @@ -922,3 +922,11 @@ the KVM hypervisor. endmenu + +config KMSG_IDS + def_bool y + prompt "Kernel message numbers" + help + Select this option if you want to include a message number to the + prefix for kernel messages issued by the s390 architecture and + driver code. See "Documentation/s390/kmsg.txt" for more details. --- linux-aws-4.15.0.orig/arch/s390/include/asm/topology.h +++ linux-aws-4.15.0/arch/s390/include/asm/topology.h @@ -68,11 +68,8 @@ #ifdef CONFIG_NUMA -#define cpu_to_node cpu_to_node -static inline int cpu_to_node(int cpu) -{ - return cpu_topology[cpu].node_id; -} +extern int __cpu_to_node(int cpu); +#define cpu_to_node __cpu_to_node /* Returns a pointer to the cpumask of CPUs on node 'node'. */ #define cpumask_of_node cpumask_of_node --- linux-aws-4.15.0.orig/arch/s390/kernel/Makefile +++ linux-aws-4.15.0/arch/s390/kernel/Makefile @@ -86,3 +86,6 @@ # vdso obj-y += vdso64/ obj-$(CONFIG_COMPAT) += vdso32/ + +# kernel message catalog +obj-$(CONFIG_KMSG_IDS) += kmsg.o --- linux-aws-4.15.0.orig/arch/s390/kernel/kmsg.c +++ linux-aws-4.15.0/arch/s390/kernel/kmsg.c @@ -0,0 +1,114 @@ +/* + * Message printing with message catalog prefixes. + * + * Copyright IBM Corp. 2012 + */ + +#include +#include +#include +#include +#include + +static inline u32 __printk_jhash(const void *key, u32 length) +{ + u32 a, b, c, len; + const u8 *k; + u8 zk[12]; + + a = b = 0x9e3779b9; + c = 0; + for (len = length + 12, k = key; len >= 12; len -= 12, k += 12) { + if (len >= 24) { + a += k[0] | k[1] << 8 | k[2] << 16 | k[3] << 24; + b += k[4] | k[5] << 8 | k[6] << 16 | k[7] << 24; + c += k[8] | k[9] << 8 | k[10] << 16 | k[11] << 24; + } else { + memset(zk, 0, 12); + memcpy(zk, k, len - 12); + a += zk[0] | zk[1] << 8 | zk[2] << 16 | zk[3] << 24; + b += zk[4] | zk[5] << 8 | zk[6] << 16 | zk[7] << 24; + c += (u32) zk[8] << 8; + c += (u32) zk[9] << 16; + c += (u32) zk[10] << 24; + c += length; + } + a -= b + c; a ^= (c>>13); + b -= a + c; b ^= (a<<8); + c -= a + b; c ^= (b>>13); + a -= b + c; a ^= (c>>12); + b -= a + c; b ^= (a<<16); + c -= a + b; c ^= (b>>5); + a -= b + c; a ^= (c>>3); + b -= a + c; b ^= (a<<10); + c -= a + b; c ^= (b>>15); + } + return c; +} + +/** + * __jhash_string - calculate the six digit jhash of a string + * @str: string to calculate the jhash + */ +unsigned long long __jhash_string(const char *str) +{ + return __printk_jhash(str, strlen(str)) & 0xffffff; +} +EXPORT_SYMBOL(__jhash_string); + +static int __dev_printk_hash(const char *level, const struct device *dev, + struct va_format *vaf) +{ + if (!dev) + return printk("%s(NULL device *): %pV", level, vaf); + + return printk("%s%s.%06x: %pV", level, dev_driver_string(dev), + __printk_jhash(vaf->fmt, strlen(vaf->fmt)) & 0xffffff, + vaf); +} + +int dev_printk_hash(const char *level, const struct device *dev, + const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + int r; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + + r = __dev_printk_hash(level, dev, &vaf); + va_end(args); + + return r; +} +EXPORT_SYMBOL(dev_printk_hash); + +#define define_dev_printk_hash_level(func, kern_level) \ +int func(const struct device *dev, const char *fmt, ...) \ +{ \ + struct va_format vaf; \ + va_list args; \ + int r; \ + \ + va_start(args, fmt); \ + \ + vaf.fmt = fmt; \ + vaf.va = &args; \ + \ + r = __dev_printk_hash(kern_level, dev, &vaf); \ + va_end(args); \ + \ + return r; \ +} \ +EXPORT_SYMBOL(func); + +define_dev_printk_hash_level(dev_emerg_hash, KERN_EMERG); +define_dev_printk_hash_level(dev_alert_hash, KERN_ALERT); +define_dev_printk_hash_level(dev_crit_hash, KERN_CRIT); +define_dev_printk_hash_level(dev_err_hash, KERN_ERR); +define_dev_printk_hash_level(dev_warn_hash, KERN_WARNING); +define_dev_printk_hash_level(dev_notice_hash, KERN_NOTICE); +define_dev_printk_hash_level(_dev_info_hash, KERN_INFO); --- linux-aws-4.15.0.orig/arch/s390/kernel/topology.c +++ linux-aws-4.15.0/arch/s390/kernel/topology.c @@ -65,6 +65,13 @@ cpumask_t cpus_with_topology; +int __cpu_to_node(int cpu) +{ + return cpu_topology[cpu].node_id; +} + +EXPORT_SYMBOL(__cpu_to_node); + static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu) { cpumask_t mask; --- linux-aws-4.15.0.orig/arch/x86/Kconfig +++ linux-aws-4.15.0/arch/x86/Kconfig @@ -2898,6 +2898,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "drivers/firmware/Kconfig" source "fs/Kconfig" --- linux-aws-4.15.0.orig/arch/x86/boot/compressed/eboot.c +++ linux-aws-4.15.0/arch/x86/boot/compressed/eboot.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "../string.h" #include "eboot.h" @@ -990,6 +991,8 @@ else setup_boot_services32(efi_early); + sanitize_boot_params(boot_params); + /* * If the boot loader gave us a value for secure_boot then we use that, * otherwise we ask the BIOS. --- linux-aws-4.15.0.orig/arch/x86/crypto/aesni-intel_asm.S +++ linux-aws-4.15.0/arch/x86/crypto/aesni-intel_asm.S @@ -90,30 +90,6 @@ ALL_F: .octa 0xffffffffffffffffffffffffffffffff .octa 0x00000000000000000000000000000000 -.section .rodata -.align 16 -.type aad_shift_arr, @object -.size aad_shift_arr, 272 -aad_shift_arr: - .octa 0xffffffffffffffffffffffffffffffff - .octa 0xffffffffffffffffffffffffffffff0C - .octa 0xffffffffffffffffffffffffffff0D0C - .octa 0xffffffffffffffffffffffffff0E0D0C - .octa 0xffffffffffffffffffffffff0F0E0D0C - .octa 0xffffffffffffffffffffff0C0B0A0908 - .octa 0xffffffffffffffffffff0D0C0B0A0908 - .octa 0xffffffffffffffffff0E0D0C0B0A0908 - .octa 0xffffffffffffffff0F0E0D0C0B0A0908 - .octa 0xffffffffffffff0C0B0A090807060504 - .octa 0xffffffffffff0D0C0B0A090807060504 - .octa 0xffffffffff0E0D0C0B0A090807060504 - .octa 0xffffffff0F0E0D0C0B0A090807060504 - .octa 0xffffff0C0B0A09080706050403020100 - .octa 0xffff0D0C0B0A09080706050403020100 - .octa 0xff0E0D0C0B0A09080706050403020100 - .octa 0x0F0E0D0C0B0A09080706050403020100 - - .text @@ -257,6 +233,37 @@ pxor \TMP1, \GH # result is in TMP1 .endm +# Reads DLEN bytes starting at DPTR and stores in XMMDst +# where 0 < DLEN < 16 +# Clobbers %rax, DLEN and XMM1 +.macro READ_PARTIAL_BLOCK DPTR DLEN XMM1 XMMDst + cmp $8, \DLEN + jl _read_lt8_\@ + mov (\DPTR), %rax + MOVQ_R64_XMM %rax, \XMMDst + sub $8, \DLEN + jz _done_read_partial_block_\@ + xor %eax, %eax +_read_next_byte_\@: + shl $8, %rax + mov 7(\DPTR, \DLEN, 1), %al + dec \DLEN + jnz _read_next_byte_\@ + MOVQ_R64_XMM %rax, \XMM1 + pslldq $8, \XMM1 + por \XMM1, \XMMDst + jmp _done_read_partial_block_\@ +_read_lt8_\@: + xor %eax, %eax +_read_next_byte_lt8_\@: + shl $8, %rax + mov -1(\DPTR, \DLEN, 1), %al + dec \DLEN + jnz _read_next_byte_lt8_\@ + MOVQ_R64_XMM %rax, \XMMDst +_done_read_partial_block_\@: +.endm + /* * if a = number of total plaintext bytes * b = floor(a/16) @@ -273,62 +280,30 @@ XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation MOVADQ SHUF_MASK(%rip), %xmm14 mov arg7, %r10 # %r10 = AAD - mov arg8, %r12 # %r12 = aadLen - mov %r12, %r11 + mov arg8, %r11 # %r11 = aadLen pxor %xmm\i, %xmm\i pxor \XMM2, \XMM2 cmp $16, %r11 - jl _get_AAD_rest8\num_initial_blocks\operation + jl _get_AAD_rest\num_initial_blocks\operation _get_AAD_blocks\num_initial_blocks\operation: movdqu (%r10), %xmm\i PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data pxor %xmm\i, \XMM2 GHASH_MUL \XMM2, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1 add $16, %r10 - sub $16, %r12 sub $16, %r11 cmp $16, %r11 jge _get_AAD_blocks\num_initial_blocks\operation movdqu \XMM2, %xmm\i + + /* read the last <16B of AAD */ +_get_AAD_rest\num_initial_blocks\operation: cmp $0, %r11 je _get_AAD_done\num_initial_blocks\operation - pxor %xmm\i,%xmm\i - - /* read the last <16B of AAD. since we have at least 4B of - data right after the AAD (the ICV, and maybe some CT), we can - read 4B/8B blocks safely, and then get rid of the extra stuff */ -_get_AAD_rest8\num_initial_blocks\operation: - cmp $4, %r11 - jle _get_AAD_rest4\num_initial_blocks\operation - movq (%r10), \TMP1 - add $8, %r10 - sub $8, %r11 - pslldq $8, \TMP1 - psrldq $8, %xmm\i - pxor \TMP1, %xmm\i - jmp _get_AAD_rest8\num_initial_blocks\operation -_get_AAD_rest4\num_initial_blocks\operation: - cmp $0, %r11 - jle _get_AAD_rest0\num_initial_blocks\operation - mov (%r10), %eax - movq %rax, \TMP1 - add $4, %r10 - sub $4, %r10 - pslldq $12, \TMP1 - psrldq $4, %xmm\i - pxor \TMP1, %xmm\i -_get_AAD_rest0\num_initial_blocks\operation: - /* finalize: shift out the extra bytes we read, and align - left. since pslldq can only shift by an immediate, we use - vpshufb and an array of shuffle masks */ - movq %r12, %r11 - salq $4, %r11 - movdqu aad_shift_arr(%r11), \TMP1 - PSHUFB_XMM \TMP1, %xmm\i -_get_AAD_rest_final\num_initial_blocks\operation: + READ_PARTIAL_BLOCK %r10, %r11, \TMP1, %xmm\i PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data pxor \XMM2, %xmm\i GHASH_MUL %xmm\i, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1 @@ -532,62 +507,30 @@ XMM2 XMM3 XMM4 XMMDst TMP6 TMP7 i i_seq operation MOVADQ SHUF_MASK(%rip), %xmm14 mov arg7, %r10 # %r10 = AAD - mov arg8, %r12 # %r12 = aadLen - mov %r12, %r11 + mov arg8, %r11 # %r11 = aadLen pxor %xmm\i, %xmm\i pxor \XMM2, \XMM2 cmp $16, %r11 - jl _get_AAD_rest8\num_initial_blocks\operation + jl _get_AAD_rest\num_initial_blocks\operation _get_AAD_blocks\num_initial_blocks\operation: movdqu (%r10), %xmm\i PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data pxor %xmm\i, \XMM2 GHASH_MUL \XMM2, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1 add $16, %r10 - sub $16, %r12 sub $16, %r11 cmp $16, %r11 jge _get_AAD_blocks\num_initial_blocks\operation movdqu \XMM2, %xmm\i + + /* read the last <16B of AAD */ +_get_AAD_rest\num_initial_blocks\operation: cmp $0, %r11 je _get_AAD_done\num_initial_blocks\operation - pxor %xmm\i,%xmm\i - - /* read the last <16B of AAD. since we have at least 4B of - data right after the AAD (the ICV, and maybe some PT), we can - read 4B/8B blocks safely, and then get rid of the extra stuff */ -_get_AAD_rest8\num_initial_blocks\operation: - cmp $4, %r11 - jle _get_AAD_rest4\num_initial_blocks\operation - movq (%r10), \TMP1 - add $8, %r10 - sub $8, %r11 - pslldq $8, \TMP1 - psrldq $8, %xmm\i - pxor \TMP1, %xmm\i - jmp _get_AAD_rest8\num_initial_blocks\operation -_get_AAD_rest4\num_initial_blocks\operation: - cmp $0, %r11 - jle _get_AAD_rest0\num_initial_blocks\operation - mov (%r10), %eax - movq %rax, \TMP1 - add $4, %r10 - sub $4, %r10 - pslldq $12, \TMP1 - psrldq $4, %xmm\i - pxor \TMP1, %xmm\i -_get_AAD_rest0\num_initial_blocks\operation: - /* finalize: shift out the extra bytes we read, and align - left. since pslldq can only shift by an immediate, we use - vpshufb and an array of shuffle masks */ - movq %r12, %r11 - salq $4, %r11 - movdqu aad_shift_arr(%r11), \TMP1 - PSHUFB_XMM \TMP1, %xmm\i -_get_AAD_rest_final\num_initial_blocks\operation: + READ_PARTIAL_BLOCK %r10, %r11, \TMP1, %xmm\i PSHUFB_XMM %xmm14, %xmm\i # byte-reflect the AAD data pxor \XMM2, %xmm\i GHASH_MUL %xmm\i, \TMP3, \TMP1, \TMP2, \TMP4, \TMP5, \XMM1 @@ -1386,14 +1329,6 @@ * * AAD Format with 64-bit Extended Sequence Number * -* aadLen: -* from the definition of the spec, aadLen can only be 8 or 12 bytes. -* The code supports 16 too but for other sizes, the code will fail. -* -* TLen: -* from the definition of the spec, TLen can only be 8, 12 or 16 bytes. -* For other sizes, the code will fail. -* * poly = x^128 + x^127 + x^126 + x^121 + 1 * *****************************************************************************/ @@ -1487,19 +1422,16 @@ PSHUFB_XMM %xmm10, %xmm0 ENCRYPT_SINGLE_BLOCK %xmm0, %xmm1 # E(K, Yn) - sub $16, %r11 - add %r13, %r11 - movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte block - lea SHIFT_MASK+16(%rip), %r12 - sub %r13, %r12 -# adjust the shuffle mask pointer to be able to shift 16-%r13 bytes -# (%r13 is the number of bytes in plaintext mod 16) - movdqu (%r12), %xmm2 # get the appropriate shuffle mask - PSHUFB_XMM %xmm2, %xmm1 # right shift 16-%r13 butes + lea (%arg3,%r11,1), %r10 + mov %r13, %r12 + READ_PARTIAL_BLOCK %r10 %r12 %xmm2 %xmm1 + + lea ALL_F+16(%rip), %r12 + sub %r13, %r12 movdqa %xmm1, %xmm2 pxor %xmm1, %xmm0 # Ciphertext XOR E(K, Yn) - movdqu ALL_F-SHIFT_MASK(%r12), %xmm1 + movdqu (%r12), %xmm1 # get the appropriate mask to mask out top 16-%r13 bytes of %xmm0 pand %xmm1, %xmm0 # mask out top 16-%r13 bytes of %xmm0 pand %xmm1, %xmm2 @@ -1508,9 +1440,6 @@ pxor %xmm2, %xmm8 GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6 - # GHASH computation for the last <16 byte block - sub %r13, %r11 - add $16, %r11 # output %r13 bytes MOVQ_R64_XMM %xmm0, %rax @@ -1664,14 +1593,6 @@ * * AAD Format with 64-bit Extended Sequence Number * -* aadLen: -* from the definition of the spec, aadLen can only be 8 or 12 bytes. -* The code supports 16 too but for other sizes, the code will fail. -* -* TLen: -* from the definition of the spec, TLen can only be 8, 12 or 16 bytes. -* For other sizes, the code will fail. -* * poly = x^128 + x^127 + x^126 + x^121 + 1 ***************************************************************************/ ENTRY(aesni_gcm_enc) @@ -1764,19 +1685,16 @@ movdqa SHUF_MASK(%rip), %xmm10 PSHUFB_XMM %xmm10, %xmm0 - ENCRYPT_SINGLE_BLOCK %xmm0, %xmm1 # Encrypt(K, Yn) - sub $16, %r11 - add %r13, %r11 - movdqu (%arg3,%r11,1), %xmm1 # receive the last <16 byte blocks - lea SHIFT_MASK+16(%rip), %r12 + + lea (%arg3,%r11,1), %r10 + mov %r13, %r12 + READ_PARTIAL_BLOCK %r10 %r12 %xmm2 %xmm1 + + lea ALL_F+16(%rip), %r12 sub %r13, %r12 - # adjust the shuffle mask pointer to be able to shift 16-r13 bytes - # (%r13 is the number of bytes in plaintext mod 16) - movdqu (%r12), %xmm2 # get the appropriate shuffle mask - PSHUFB_XMM %xmm2, %xmm1 # shift right 16-r13 byte pxor %xmm1, %xmm0 # Plaintext XOR Encrypt(K, Yn) - movdqu ALL_F-SHIFT_MASK(%r12), %xmm1 + movdqu (%r12), %xmm1 # get the appropriate mask to mask out top 16-r13 bytes of xmm0 pand %xmm1, %xmm0 # mask out top 16-r13 bytes of xmm0 movdqa SHUF_MASK(%rip), %xmm10 @@ -1785,9 +1703,6 @@ pxor %xmm0, %xmm8 GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6 # GHASH computation for the last <16 byte block - sub %r13, %r11 - add $16, %r11 - movdqa SHUF_MASK(%rip), %xmm10 PSHUFB_XMM %xmm10, %xmm0 --- linux-aws-4.15.0.orig/arch/x86/crypto/aesni-intel_glue.c +++ linux-aws-4.15.0/arch/x86/crypto/aesni-intel_glue.c @@ -690,8 +690,8 @@ rfc4106_set_hash_subkey(ctx->hash_subkey, key, key_len); } -static int rfc4106_set_key(struct crypto_aead *parent, const u8 *key, - unsigned int key_len) +static int gcmaes_wrapper_set_key(struct crypto_aead *parent, const u8 *key, + unsigned int key_len) { struct cryptd_aead **ctx = crypto_aead_ctx(parent); struct cryptd_aead *cryptd_tfm = *ctx; @@ -716,8 +716,8 @@ /* This is the Integrity Check Value (aka the authentication tag length and can * be 8, 12 or 16 bytes long. */ -static int rfc4106_set_authsize(struct crypto_aead *parent, - unsigned int authsize) +static int gcmaes_wrapper_set_authsize(struct crypto_aead *parent, + unsigned int authsize) { struct cryptd_aead **ctx = crypto_aead_ctx(parent); struct cryptd_aead *cryptd_tfm = *ctx; @@ -824,7 +824,7 @@ if (sg_is_last(req->src) && (!PageHighMem(sg_page(req->src)) || req->src->offset + req->src->length <= PAGE_SIZE) && - sg_is_last(req->dst) && + sg_is_last(req->dst) && req->dst->length && (!PageHighMem(sg_page(req->dst)) || req->dst->offset + req->dst->length <= PAGE_SIZE)) { one_entry_in_sg = 1; @@ -929,7 +929,7 @@ aes_ctx); } -static int rfc4106_encrypt(struct aead_request *req) +static int gcmaes_wrapper_encrypt(struct aead_request *req) { struct crypto_aead *tfm = crypto_aead_reqtfm(req); struct cryptd_aead **ctx = crypto_aead_ctx(tfm); @@ -945,7 +945,7 @@ return crypto_aead_encrypt(req); } -static int rfc4106_decrypt(struct aead_request *req) +static int gcmaes_wrapper_decrypt(struct aead_request *req) { struct crypto_aead *tfm = crypto_aead_reqtfm(req); struct cryptd_aead **ctx = crypto_aead_ctx(tfm); @@ -1117,7 +1117,7 @@ { __be32 counter = cpu_to_be32(1); struct crypto_aead *tfm = crypto_aead_reqtfm(req); - struct aesni_rfc4106_gcm_ctx *ctx = aesni_rfc4106_gcm_ctx_get(tfm); + struct generic_gcmaes_ctx *ctx = generic_gcmaes_ctx_get(tfm); void *aes_ctx = &(ctx->aes_key_expanded); u8 iv[16] __attribute__ ((__aligned__(AESNI_ALIGN))); @@ -1128,6 +1128,30 @@ aes_ctx); } +static int generic_gcmaes_init(struct crypto_aead *aead) +{ + struct cryptd_aead *cryptd_tfm; + struct cryptd_aead **ctx = crypto_aead_ctx(aead); + + cryptd_tfm = cryptd_alloc_aead("__driver-generic-gcm-aes-aesni", + CRYPTO_ALG_INTERNAL, + CRYPTO_ALG_INTERNAL); + if (IS_ERR(cryptd_tfm)) + return PTR_ERR(cryptd_tfm); + + *ctx = cryptd_tfm; + crypto_aead_set_reqsize(aead, crypto_aead_reqsize(&cryptd_tfm->base)); + + return 0; +} + +static void generic_gcmaes_exit(struct crypto_aead *aead) +{ + struct cryptd_aead **ctx = crypto_aead_ctx(aead); + + cryptd_free_aead(*ctx); +} + static struct aead_alg aesni_aead_algs[] = { { .setkey = common_rfc4106_set_key, .setauthsize = common_rfc4106_set_authsize, @@ -1147,10 +1171,10 @@ }, { .init = rfc4106_init, .exit = rfc4106_exit, - .setkey = rfc4106_set_key, - .setauthsize = rfc4106_set_authsize, - .encrypt = rfc4106_encrypt, - .decrypt = rfc4106_decrypt, + .setkey = gcmaes_wrapper_set_key, + .setauthsize = gcmaes_wrapper_set_authsize, + .encrypt = gcmaes_wrapper_encrypt, + .decrypt = gcmaes_wrapper_decrypt, .ivsize = GCM_RFC4106_IV_SIZE, .maxauthsize = 16, .base = { @@ -1170,13 +1194,31 @@ .ivsize = GCM_AES_IV_SIZE, .maxauthsize = 16, .base = { + .cra_name = "__generic-gcm-aes-aesni", + .cra_driver_name = "__driver-generic-gcm-aes-aesni", + .cra_priority = 0, + .cra_flags = CRYPTO_ALG_INTERNAL, + .cra_blocksize = 1, + .cra_ctxsize = sizeof(struct generic_gcmaes_ctx), + .cra_alignmask = AESNI_ALIGN - 1, + .cra_module = THIS_MODULE, + }, +}, { + .init = generic_gcmaes_init, + .exit = generic_gcmaes_exit, + .setkey = gcmaes_wrapper_set_key, + .setauthsize = gcmaes_wrapper_set_authsize, + .encrypt = gcmaes_wrapper_encrypt, + .decrypt = gcmaes_wrapper_decrypt, + .ivsize = GCM_AES_IV_SIZE, + .maxauthsize = 16, + .base = { .cra_name = "gcm(aes)", .cra_driver_name = "generic-gcm-aesni", .cra_priority = 400, .cra_flags = CRYPTO_ALG_ASYNC, .cra_blocksize = 1, - .cra_ctxsize = sizeof(struct generic_gcmaes_ctx), - .cra_alignmask = AESNI_ALIGN - 1, + .cra_ctxsize = sizeof(struct cryptd_aead *), .cra_module = THIS_MODULE, }, } }; --- linux-aws-4.15.0.orig/arch/x86/entry/common.c +++ linux-aws-4.15.0/arch/x86/entry/common.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -206,7 +207,7 @@ * special case only applies after poking regs and before the * very next return to user mode. */ - current->thread.status &= ~(TS_COMPAT|TS_I386_REGS_POKED); + ti->status &= ~(TS_COMPAT|TS_I386_REGS_POKED); #endif user_enter_irqoff(); @@ -282,7 +283,8 @@ * regs->orig_ax, which changes the behavior of some syscalls. */ if (likely((nr & __SYSCALL_MASK) < NR_syscalls)) { - regs->ax = sys_call_table[nr & __SYSCALL_MASK]( + nr = array_index_nospec(nr & __SYSCALL_MASK, NR_syscalls); + regs->ax = sys_call_table[nr]( regs->di, regs->si, regs->dx, regs->r10, regs->r8, regs->r9); } @@ -304,7 +306,7 @@ unsigned int nr = (unsigned int)regs->orig_ax; #ifdef CONFIG_IA32_EMULATION - current->thread.status |= TS_COMPAT; + ti->status |= TS_COMPAT; #endif if (READ_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY) { @@ -318,6 +320,7 @@ } if (likely(nr < IA32_NR_syscalls)) { + nr = array_index_nospec(nr, IA32_NR_syscalls); /* * It's possible that a 32-bit syscall implementation * takes a 64-bit parameter but nonetheless assumes that --- linux-aws-4.15.0.orig/arch/x86/entry/entry_32.S +++ linux-aws-4.15.0/arch/x86/entry/entry_32.S @@ -252,7 +252,8 @@ * exist, overwrite the RSB with entries which capture * speculative execution to prevent attack. */ - FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW + /* Clobbers %ebx */ + FILL_RETURN_BUFFER RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW #endif /* restore callee-saved registers */ --- linux-aws-4.15.0.orig/arch/x86/entry/entry_64.S +++ linux-aws-4.15.0/arch/x86/entry/entry_64.S @@ -236,91 +236,20 @@ pushq %r9 /* pt_regs->r9 */ pushq %r10 /* pt_regs->r10 */ pushq %r11 /* pt_regs->r11 */ - sub $(6*8), %rsp /* pt_regs->bp, bx, r12-15 not saved */ - UNWIND_HINT_REGS extra=0 + pushq %rbx /* pt_regs->rbx */ + pushq %rbp /* pt_regs->rbp */ + pushq %r12 /* pt_regs->r12 */ + pushq %r13 /* pt_regs->r13 */ + pushq %r14 /* pt_regs->r14 */ + pushq %r15 /* pt_regs->r15 */ + UNWIND_HINT_REGS TRACE_IRQS_OFF - /* - * If we need to do entry work or if we guess we'll need to do - * exit work, go straight to the slow path. - */ - movq PER_CPU_VAR(current_task), %r11 - testl $_TIF_WORK_SYSCALL_ENTRY|_TIF_ALLWORK_MASK, TASK_TI_flags(%r11) - jnz entry_SYSCALL64_slow_path - -entry_SYSCALL_64_fastpath: - /* - * Easy case: enable interrupts and issue the syscall. If the syscall - * needs pt_regs, we'll call a stub that disables interrupts again - * and jumps to the slow path. - */ - TRACE_IRQS_ON - ENABLE_INTERRUPTS(CLBR_NONE) -#if __SYSCALL_MASK == ~0 - cmpq $__NR_syscall_max, %rax -#else - andl $__SYSCALL_MASK, %eax - cmpl $__NR_syscall_max, %eax -#endif - ja 1f /* return -ENOSYS (already in pt_regs->ax) */ - movq %r10, %rcx - - /* - * This call instruction is handled specially in stub_ptregs_64. - * It might end up jumping to the slow path. If it jumps, RAX - * and all argument registers are clobbered. - */ -#ifdef CONFIG_RETPOLINE - movq sys_call_table(, %rax, 8), %rax - call __x86_indirect_thunk_rax -#else - call *sys_call_table(, %rax, 8) -#endif -.Lentry_SYSCALL_64_after_fastpath_call: - - movq %rax, RAX(%rsp) -1: - - /* - * If we get here, then we know that pt_regs is clean for SYSRET64. - * If we see that no exit work is required (which we are required - * to check with IRQs off), then we can go straight to SYSRET64. - */ - DISABLE_INTERRUPTS(CLBR_ANY) - TRACE_IRQS_OFF - movq PER_CPU_VAR(current_task), %r11 - testl $_TIF_ALLWORK_MASK, TASK_TI_flags(%r11) - jnz 1f - - LOCKDEP_SYS_EXIT - TRACE_IRQS_ON /* user mode is traced as IRQs on */ - movq RIP(%rsp), %rcx - movq EFLAGS(%rsp), %r11 - addq $6*8, %rsp /* skip extra regs -- they were preserved */ - UNWIND_HINT_EMPTY - jmp .Lpop_c_regs_except_rcx_r11_and_sysret - -1: - /* - * The fast path looked good when we started, but something changed - * along the way and we need to switch to the slow path. Calling - * raise(3) will trigger this, for example. IRQs are off. - */ - TRACE_IRQS_ON - ENABLE_INTERRUPTS(CLBR_ANY) - SAVE_EXTRA_REGS - movq %rsp, %rdi - call syscall_return_slowpath /* returns with IRQs disabled */ - jmp return_from_SYSCALL_64 - -entry_SYSCALL64_slow_path: /* IRQs are off. */ - SAVE_EXTRA_REGS movq %rsp, %rdi call do_syscall_64 /* returns with IRQs disabled */ -return_from_SYSCALL_64: TRACE_IRQS_IRETQ /* we're about to change IF */ /* @@ -393,7 +322,6 @@ /* rcx and r11 are already restored (see code above) */ UNWIND_HINT_EMPTY POP_EXTRA_REGS -.Lpop_c_regs_except_rcx_r11_and_sysret: popq %rsi /* skip r11 */ popq %r10 popq %r9 @@ -424,47 +352,6 @@ USERGS_SYSRET64 END(entry_SYSCALL_64) -ENTRY(stub_ptregs_64) - /* - * Syscalls marked as needing ptregs land here. - * If we are on the fast path, we need to save the extra regs, - * which we achieve by trying again on the slow path. If we are on - * the slow path, the extra regs are already saved. - * - * RAX stores a pointer to the C function implementing the syscall. - * IRQs are on. - */ - cmpq $.Lentry_SYSCALL_64_after_fastpath_call, (%rsp) - jne 1f - - /* - * Called from fast path -- disable IRQs again, pop return address - * and jump to slow path - */ - DISABLE_INTERRUPTS(CLBR_ANY) - TRACE_IRQS_OFF - popq %rax - UNWIND_HINT_REGS extra=0 - jmp entry_SYSCALL64_slow_path - -1: - JMP_NOSPEC %rax /* Called from C */ -END(stub_ptregs_64) - -.macro ptregs_stub func -ENTRY(ptregs_\func) - UNWIND_HINT_FUNC - leaq \func(%rip), %rax - jmp stub_ptregs_64 -END(ptregs_\func) -.endm - -/* Instantiate ptregs_stub for each ptregs-using syscall */ -#define __SYSCALL_64_QUAL_(sym) -#define __SYSCALL_64_QUAL_ptregs(sym) ptregs_stub sym -#define __SYSCALL_64(nr, sym, qual) __SYSCALL_64_QUAL_##qual(sym) -#include - /* * %rdi: prev task * %rsi: next task @@ -499,7 +386,8 @@ * exist, overwrite the RSB with entries which capture * speculative execution to prevent attack. */ - FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW + /* Clobbers %rbx */ + FILL_RETURN_BUFFER RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW #endif /* restore callee-saved registers */ --- linux-aws-4.15.0.orig/arch/x86/entry/syscall_64.c +++ linux-aws-4.15.0/arch/x86/entry/syscall_64.c @@ -7,14 +7,11 @@ #include #include -#define __SYSCALL_64_QUAL_(sym) sym -#define __SYSCALL_64_QUAL_ptregs(sym) ptregs_##sym - -#define __SYSCALL_64(nr, sym, qual) extern asmlinkage long __SYSCALL_64_QUAL_##qual(sym)(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); +#define __SYSCALL_64(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); #include #undef __SYSCALL_64 -#define __SYSCALL_64(nr, sym, qual) [nr] = __SYSCALL_64_QUAL_##qual(sym), +#define __SYSCALL_64(nr, sym, qual) [nr] = sym, extern long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); --- linux-aws-4.15.0.orig/arch/x86/hyperv/hv_init.c +++ linux-aws-4.15.0/arch/x86/hyperv/hv_init.c @@ -29,6 +29,14 @@ #include #include +#ifndef PKG_ABI +/* + * Preserve the ability to 'make deb-pkg' since PKG_ABI is provided + * by the Ubuntu build rules. + */ +#define PKG_ABI 0 +#endif + #ifdef CONFIG_HYPERV_TSCPAGE static struct ms_hyperv_tsc_page *tsc_pg; @@ -131,7 +139,7 @@ * 1. Register the guest ID * 2. Enable the hypercall and register the hypercall page */ - guest_id = generate_guest_id(0, LINUX_VERSION_CODE, 0); + guest_id = generate_guest_id(0x80 /*Canonical*/, LINUX_VERSION_CODE, PKG_ABI); wrmsrl(HV_X64_MSR_GUEST_OS_ID, guest_id); hv_hypercall_pg = __vmalloc(PAGE_SIZE, GFP_KERNEL, PAGE_KERNEL_RX); --- linux-aws-4.15.0.orig/arch/x86/include/asm/asm-prototypes.h +++ linux-aws-4.15.0/arch/x86/include/asm/asm-prototypes.h @@ -38,4 +38,7 @@ INDIRECT_THUNK(si) INDIRECT_THUNK(di) INDIRECT_THUNK(bp) +asmlinkage void __fill_rsb(void); +asmlinkage void __clear_rsb(void); + #endif /* CONFIG_RETPOLINE */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/barrier.h +++ linux-aws-4.15.0/arch/x86/include/asm/barrier.h @@ -24,6 +24,34 @@ #define wmb() asm volatile("sfence" ::: "memory") #endif +/** + * array_index_mask_nospec() - generate a mask that is ~0UL when the + * bounds check succeeds and 0 otherwise + * @index: array element index + * @size: number of elements in array + * + * Returns: + * 0 - (index < size) + */ +static inline unsigned long array_index_mask_nospec(unsigned long index, + unsigned long size) +{ + unsigned long mask; + + asm ("cmp %1,%2; sbb %0,%0;" + :"=r" (mask) + :"r"(size),"r" (index) + :"cc"); + return mask; +} + +/* Override the default implementation from linux/nospec.h. */ +#define array_index_mask_nospec array_index_mask_nospec + +/* Prevent speculative execution past this barrier. */ +#define barrier_nospec() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \ + "lfence", X86_FEATURE_LFENCE_RDTSC) + #ifdef CONFIG_X86_PPRO_FENCE #define dma_rmb() rmb() #else --- linux-aws-4.15.0.orig/arch/x86/include/asm/cpufeature.h +++ linux-aws-4.15.0/arch/x86/include/asm/cpufeature.h @@ -29,6 +29,7 @@ CPUID_8000_000A_EDX, CPUID_7_ECX, CPUID_8000_0007_EBX, + CPUID_7_EDX, }; #ifdef CONFIG_X86_FEATURE_NAMES @@ -79,8 +80,9 @@ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 15, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 16, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 17, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 18, feature_bit) || \ REQUIRED_MASK_CHECK || \ - BUILD_BUG_ON_ZERO(NCAPINTS != 18)) + BUILD_BUG_ON_ZERO(NCAPINTS != 19)) #define DISABLED_MASK_BIT_SET(feature_bit) \ ( CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 0, feature_bit) || \ @@ -101,8 +103,9 @@ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 15, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 16, feature_bit) || \ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 17, feature_bit) || \ + CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 18, feature_bit) || \ DISABLED_MASK_CHECK || \ - BUILD_BUG_ON_ZERO(NCAPINTS != 18)) + BUILD_BUG_ON_ZERO(NCAPINTS != 19)) #define cpu_has(c, bit) \ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \ --- linux-aws-4.15.0.orig/arch/x86/include/asm/cpufeatures.h +++ linux-aws-4.15.0/arch/x86/include/asm/cpufeatures.h @@ -13,7 +13,7 @@ /* * Defines x86 CPU feature bits */ -#define NCAPINTS 18 /* N 32-bit words worth of info */ +#define NCAPINTS 19 /* N 32-bit words worth of info */ #define NBUGINTS 1 /* N 32-bit bug flags */ /* @@ -203,14 +203,14 @@ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */ #define X86_FEATURE_SME ( 7*32+10) /* AMD Secure Memory Encryption */ #define X86_FEATURE_PTI ( 7*32+11) /* Kernel Page Table Isolation enabled */ -#define X86_FEATURE_RETPOLINE ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */ -#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* AMD Retpoline mitigation for Spectre variant 2 */ +#define X86_FEATURE_RETPOLINE ( 7*32+12) /* "" Generic Retpoline mitigation for Spectre variant 2 */ +#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* "" AMD Retpoline mitigation for Spectre variant 2 */ #define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory Number */ -#define X86_FEATURE_AVX512_4VNNIW ( 7*32+16) /* AVX-512 Neural Network Instructions */ -#define X86_FEATURE_AVX512_4FMAPS ( 7*32+17) /* AVX-512 Multiply Accumulation Single precision */ #define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ -#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* Fill RSB on context switches */ +#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */ + +#define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */ /* Virtualization flags: Linux defined, word 8 */ #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */ @@ -271,6 +271,9 @@ #define X86_FEATURE_CLZERO (13*32+ 0) /* CLZERO instruction */ #define X86_FEATURE_IRPERF (13*32+ 1) /* Instructions Retired Count */ #define X86_FEATURE_XSAVEERPTR (13*32+ 2) /* Always save/restore FP error pointers */ +#define X86_FEATURE_IBPB (13*32+12) /* Indirect Branch Prediction Barrier */ +#define X86_FEATURE_IBRS (13*32+14) /* Indirect Branch Restricted Speculation */ +#define X86_FEATURE_STIBP (13*32+15) /* Single Thread Indirect Branch Predictors */ /* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */ #define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */ @@ -319,6 +322,13 @@ #define X86_FEATURE_SUCCOR (17*32+ 1) /* Uncorrectable error containment and recovery */ #define X86_FEATURE_SMCA (17*32+ 3) /* Scalable MCA */ +/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ +#define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */ +#define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */ +#define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */ +#define X86_FEATURE_INTEL_STIBP (18*32+27) /* "" Single Thread Indirect Branch Predictors */ +#define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */ + /* * BUG word(s) */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/disabled-features.h +++ linux-aws-4.15.0/arch/x86/include/asm/disabled-features.h @@ -77,6 +77,7 @@ #define DISABLED_MASK15 0 #define DISABLED_MASK16 (DISABLE_PKU|DISABLE_OSPKE|DISABLE_LA57|DISABLE_UMIP) #define DISABLED_MASK17 0 -#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) +#define DISABLED_MASK18 0 +#define DISABLED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) #endif /* _ASM_X86_DISABLED_FEATURES_H */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/fixmap.h +++ linux-aws-4.15.0/arch/x86/include/asm/fixmap.h @@ -137,8 +137,10 @@ extern void reserve_top_address(unsigned long reserve); -#define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) -#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) +#define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) +#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) +#define FIXADDR_TOT_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) +#define FIXADDR_TOT_START (FIXADDR_TOP - FIXADDR_TOT_SIZE) extern int fixmaps_set; --- linux-aws-4.15.0.orig/arch/x86/include/asm/msr-index.h +++ linux-aws-4.15.0/arch/x86/include/asm/msr-index.h @@ -39,6 +39,13 @@ /* Intel MSRs. Some also available on other CPUs */ +#define MSR_IA32_SPEC_CTRL 0x00000048 /* Speculation Control */ +#define SPEC_CTRL_IBRS (1 << 0) /* Indirect Branch Restricted Speculation */ +#define SPEC_CTRL_STIBP (1 << 1) /* Single Thread Indirect Branch Predictors */ + +#define MSR_IA32_PRED_CMD 0x00000049 /* Prediction Command */ +#define PRED_CMD_IBPB (1 << 0) /* Indirect Branch Prediction Barrier */ + #define MSR_PPIN_CTL 0x0000004e #define MSR_PPIN 0x0000004f @@ -57,6 +64,11 @@ #define SNB_C3_AUTO_UNDEMOTE (1UL << 28) #define MSR_MTRRcap 0x000000fe + +#define MSR_IA32_ARCH_CAPABILITIES 0x0000010a +#define ARCH_CAP_RDCL_NO (1 << 0) /* Not susceptible to Meltdown */ +#define ARCH_CAP_IBRS_ALL (1 << 1) /* Enhanced IBRS support */ + #define MSR_IA32_BBL_CR_CTL 0x00000119 #define MSR_IA32_BBL_CR_CTL3 0x0000011e --- linux-aws-4.15.0.orig/arch/x86/include/asm/msr.h +++ linux-aws-4.15.0/arch/x86/include/asm/msr.h @@ -214,8 +214,7 @@ * that some other imaginary CPU is updating continuously with a * time stamp. */ - alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, - "lfence", X86_FEATURE_LFENCE_RDTSC); + barrier_nospec(); return rdtsc(); } --- linux-aws-4.15.0.orig/arch/x86/include/asm/nospec-branch.h +++ linux-aws-4.15.0/arch/x86/include/asm/nospec-branch.h @@ -1,56 +1,12 @@ /* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __NOSPEC_BRANCH_H__ -#define __NOSPEC_BRANCH_H__ +#ifndef _ASM_X86_NOSPEC_BRANCH_H_ +#define _ASM_X86_NOSPEC_BRANCH_H_ #include #include #include -/* - * Fill the CPU return stack buffer. - * - * Each entry in the RSB, if used for a speculative 'ret', contains an - * infinite 'pause; lfence; jmp' loop to capture speculative execution. - * - * This is required in various cases for retpoline and IBRS-based - * mitigations for the Spectre variant 2 vulnerability. Sometimes to - * eliminate potentially bogus entries from the RSB, and sometimes - * purely to ensure that it doesn't get empty, which on some CPUs would - * allow predictions from other (unwanted!) sources to be used. - * - * We define a CPP macro such that it can be used from both .S files and - * inline assembly. It's possible to do a .macro and then include that - * from C via asm(".include ") but let's not go there. - */ - -#define RSB_CLEAR_LOOPS 32 /* To forcibly overwrite all entries */ -#define RSB_FILL_LOOPS 16 /* To avoid underflow */ - -/* - * Google experimented with loop-unrolling and this turned out to be - * the optimal version — two calls, each with their own speculation - * trap should their return address end up getting used, in a loop. - */ -#define __FILL_RETURN_BUFFER(reg, nr, sp) \ - mov $(nr/2), reg; \ -771: \ - call 772f; \ -773: /* speculation trap */ \ - pause; \ - lfence; \ - jmp 773b; \ -772: \ - call 774f; \ -775: /* speculation trap */ \ - pause; \ - lfence; \ - jmp 775b; \ -774: \ - dec reg; \ - jnz 771b; \ - add $(BITS_PER_LONG/8) * nr, sp; - #ifdef __ASSEMBLY__ /* @@ -121,17 +77,10 @@ #endif .endm - /* - * A simpler FILL_RETURN_BUFFER macro. Don't make people use the CPP - * monstrosity above, manually. - */ -.macro FILL_RETURN_BUFFER reg:req nr:req ftr:req +/* This clobbers the BX register */ +.macro FILL_RETURN_BUFFER nr:req ftr:req #ifdef CONFIG_RETPOLINE - ANNOTATE_NOSPEC_ALTERNATIVE - ALTERNATIVE "jmp .Lskip_rsb_\@", \ - __stringify(__FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP)) \ - \ftr -.Lskip_rsb_\@: + ALTERNATIVE "", "call __clear_rsb", \ftr #endif .endm @@ -201,22 +150,25 @@ * On VMEXIT we must ensure that no RSB predictions learned in the guest * can be followed in the host, by overwriting the RSB completely. Both * retpoline and IBRS mitigations for Spectre v2 need this; only on future - * CPUs with IBRS_ATT *might* it be avoided. + * CPUs with IBRS_ALL *might* it be avoided. */ static inline void vmexit_fill_RSB(void) { #ifdef CONFIG_RETPOLINE - unsigned long loops; - - asm volatile (ANNOTATE_NOSPEC_ALTERNATIVE - ALTERNATIVE("jmp 910f", - __stringify(__FILL_RETURN_BUFFER(%0, RSB_CLEAR_LOOPS, %1)), - X86_FEATURE_RETPOLINE) - "910:" - : "=r" (loops), ASM_CALL_CONSTRAINT - : : "memory" ); + alternative_input("", + "call __fill_rsb", + X86_FEATURE_RETPOLINE, + ASM_NO_INPUT_CLOBBER(_ASM_BX, "memory")); #endif } +static inline void indirect_branch_prediction_barrier(void) +{ + alternative_input("", + "call __ibp_barrier", + X86_FEATURE_USE_IBPB, + ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory")); +} + #endif /* __ASSEMBLY__ */ -#endif /* __NOSPEC_BRANCH_H__ */ +#endif /* _ASM_X86_NOSPEC_BRANCH_H_ */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/pgtable_32_types.h +++ linux-aws-4.15.0/arch/x86/include/asm/pgtable_32_types.h @@ -44,8 +44,9 @@ */ #define CPU_ENTRY_AREA_PAGES (NR_CPUS * 40) -#define CPU_ENTRY_AREA_BASE \ - ((FIXADDR_START - PAGE_SIZE * (CPU_ENTRY_AREA_PAGES + 1)) & PMD_MASK) +#define CPU_ENTRY_AREA_BASE \ + ((FIXADDR_TOT_START - PAGE_SIZE * (CPU_ENTRY_AREA_PAGES + 1)) \ + & PMD_MASK) #define PKMAP_BASE \ ((CPU_ENTRY_AREA_BASE - PAGE_SIZE) & PMD_MASK) --- linux-aws-4.15.0.orig/arch/x86/include/asm/processor.h +++ linux-aws-4.15.0/arch/x86/include/asm/processor.h @@ -460,8 +460,6 @@ unsigned short gsindex; #endif - u32 status; /* thread synchronous flags */ - #ifdef CONFIG_X86_64 unsigned long fsbase; unsigned long gsbase; @@ -971,4 +969,7 @@ void stop_this_cpu(void *dummy); void df_debug(struct pt_regs *regs, long error_code); + +void __ibp_barrier(void); + #endif /* _ASM_X86_PROCESSOR_H */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/required-features.h +++ linux-aws-4.15.0/arch/x86/include/asm/required-features.h @@ -106,6 +106,7 @@ #define REQUIRED_MASK15 0 #define REQUIRED_MASK16 (NEED_LA57) #define REQUIRED_MASK17 0 -#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 18) +#define REQUIRED_MASK18 0 +#define REQUIRED_MASK_CHECK BUILD_BUG_ON_ZERO(NCAPINTS != 19) #endif /* _ASM_X86_REQUIRED_FEATURES_H */ --- linux-aws-4.15.0.orig/arch/x86/include/asm/setup.h +++ linux-aws-4.15.0/arch/x86/include/asm/setup.h @@ -9,6 +9,8 @@ #include #include +#define LOCKDOWN_LIFT_KEY 'x' + #ifdef __i386__ #include --- linux-aws-4.15.0.orig/arch/x86/include/asm/syscall.h +++ linux-aws-4.15.0/arch/x86/include/asm/syscall.h @@ -60,7 +60,7 @@ * TS_COMPAT is set for 32-bit syscall entries and then * remains set until we return to user mode. */ - if (task->thread.status & (TS_COMPAT|TS_I386_REGS_POKED)) + if (task->thread_info.status & (TS_COMPAT|TS_I386_REGS_POKED)) /* * Sign-extend the value so (int)-EFOO becomes (long)-EFOO * and will match correctly in comparisons. @@ -116,7 +116,7 @@ unsigned long *args) { # ifdef CONFIG_IA32_EMULATION - if (task->thread.status & TS_COMPAT) + if (task->thread_info.status & TS_COMPAT) switch (i) { case 0: if (!n--) break; @@ -177,7 +177,7 @@ const unsigned long *args) { # ifdef CONFIG_IA32_EMULATION - if (task->thread.status & TS_COMPAT) + if (task->thread_info.status & TS_COMPAT) switch (i) { case 0: if (!n--) break; --- linux-aws-4.15.0.orig/arch/x86/include/asm/thread_info.h +++ linux-aws-4.15.0/arch/x86/include/asm/thread_info.h @@ -55,6 +55,7 @@ struct thread_info { unsigned long flags; /* low level flags */ + u32 status; /* thread synchronous flags */ }; #define INIT_THREAD_INFO(tsk) \ @@ -221,7 +222,7 @@ #define in_ia32_syscall() true #else #define in_ia32_syscall() (IS_ENABLED(CONFIG_IA32_EMULATION) && \ - current->thread.status & TS_COMPAT) + current_thread_info()->status & TS_COMPAT) #endif /* --- linux-aws-4.15.0.orig/arch/x86/include/asm/tlbflush.h +++ linux-aws-4.15.0/arch/x86/include/asm/tlbflush.h @@ -174,6 +174,8 @@ struct mm_struct *loaded_mm; u16 loaded_mm_asid; u16 next_asid; + /* last user mm's ctx id */ + u64 last_ctx_id; /* * We can be in one of several states: --- linux-aws-4.15.0.orig/arch/x86/include/asm/uaccess.h +++ linux-aws-4.15.0/arch/x86/include/asm/uaccess.h @@ -124,6 +124,11 @@ #define __uaccess_begin() stac() #define __uaccess_end() clac() +#define __uaccess_begin_nospec() \ +({ \ + stac(); \ + barrier_nospec(); \ +}) /* * This is a type: either unsigned long, if the argument fits into @@ -445,7 +450,7 @@ ({ \ int __gu_err; \ __inttype(*(ptr)) __gu_val; \ - __uaccess_begin(); \ + __uaccess_begin_nospec(); \ __get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT); \ __uaccess_end(); \ (x) = (__force __typeof__(*(ptr)))__gu_val; \ @@ -487,6 +492,10 @@ __uaccess_begin(); \ barrier(); +#define uaccess_try_nospec do { \ + current->thread.uaccess_err = 0; \ + __uaccess_begin_nospec(); \ + #define uaccess_catch(err) \ __uaccess_end(); \ (err) |= (current->thread.uaccess_err ? -EFAULT : 0); \ @@ -548,7 +557,7 @@ * get_user_ex(...); * } get_user_catch(err) */ -#define get_user_try uaccess_try +#define get_user_try uaccess_try_nospec #define get_user_catch(err) uaccess_catch(err) #define get_user_ex(x, ptr) do { \ @@ -582,7 +591,7 @@ __typeof__(ptr) __uval = (uval); \ __typeof__(*(ptr)) __old = (old); \ __typeof__(*(ptr)) __new = (new); \ - __uaccess_begin(); \ + __uaccess_begin_nospec(); \ switch (size) { \ case 1: \ { \ --- linux-aws-4.15.0.orig/arch/x86/include/asm/uaccess_32.h +++ linux-aws-4.15.0/arch/x86/include/asm/uaccess_32.h @@ -29,21 +29,21 @@ switch (n) { case 1: ret = 0; - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u8 *)to, from, ret, "b", "b", "=q", 1); __uaccess_end(); return ret; case 2: ret = 0; - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u16 *)to, from, ret, "w", "w", "=r", 2); __uaccess_end(); return ret; case 4: ret = 0; - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u32 *)to, from, ret, "l", "k", "=r", 4); __uaccess_end(); --- linux-aws-4.15.0.orig/arch/x86/include/asm/uaccess_64.h +++ linux-aws-4.15.0/arch/x86/include/asm/uaccess_64.h @@ -55,31 +55,31 @@ return copy_user_generic(dst, (__force void *)src, size); switch (size) { case 1: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u8 *)dst, (u8 __user *)src, ret, "b", "b", "=q", 1); __uaccess_end(); return ret; case 2: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u16 *)dst, (u16 __user *)src, ret, "w", "w", "=r", 2); __uaccess_end(); return ret; case 4: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u32 *)dst, (u32 __user *)src, ret, "l", "k", "=r", 4); __uaccess_end(); return ret; case 8: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u64 *)dst, (u64 __user *)src, ret, "q", "", "=r", 8); __uaccess_end(); return ret; case 10: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u64 *)dst, (u64 __user *)src, ret, "q", "", "=r", 10); if (likely(!ret)) @@ -89,7 +89,7 @@ __uaccess_end(); return ret; case 16: - __uaccess_begin(); + __uaccess_begin_nospec(); __get_user_asm_nozero(*(u64 *)dst, (u64 __user *)src, ret, "q", "", "=r", 16); if (likely(!ret)) --- linux-aws-4.15.0.orig/arch/x86/kernel/alternative.c +++ linux-aws-4.15.0/arch/x86/kernel/alternative.c @@ -46,17 +46,6 @@ } __setup("noreplace-smp", setup_noreplace_smp); -#ifdef CONFIG_PARAVIRT -static int __initdata_or_module noreplace_paravirt = 0; - -static int __init setup_noreplace_paravirt(char *str) -{ - noreplace_paravirt = 1; - return 1; -} -__setup("noreplace-paravirt", setup_noreplace_paravirt); -#endif - #define DPRINTK(fmt, args...) \ do { \ if (debug_alternative) \ @@ -298,7 +287,7 @@ tgt_rip = next_rip + o_dspl; n_dspl = tgt_rip - orig_insn; - DPRINTK("target RIP: %p, new_displ: 0x%x", tgt_rip, n_dspl); + DPRINTK("target RIP: %px, new_displ: 0x%x", tgt_rip, n_dspl); if (tgt_rip - orig_insn >= 0) { if (n_dspl - 2 <= 127) @@ -355,7 +344,7 @@ add_nops(instr + (a->instrlen - a->padlen), a->padlen); local_irq_restore(flags); - DUMP_BYTES(instr, a->instrlen, "%p: [%d:%d) optimized NOPs: ", + DUMP_BYTES(instr, a->instrlen, "%px: [%d:%d) optimized NOPs: ", instr, a->instrlen - a->padlen, a->padlen); } @@ -376,7 +365,7 @@ u8 *instr, *replacement; u8 insnbuf[MAX_PATCH_LEN]; - DPRINTK("alt table %p -> %p", start, end); + DPRINTK("alt table %px, -> %px", start, end); /* * The scan order should be from start to end. A later scanned * alternative code can overwrite previously scanned alternative code. @@ -400,14 +389,14 @@ continue; } - DPRINTK("feat: %d*32+%d, old: (%p, len: %d), repl: (%p, len: %d), pad: %d", + DPRINTK("feat: %d*32+%d, old: (%px len: %d), repl: (%px, len: %d), pad: %d", a->cpuid >> 5, a->cpuid & 0x1f, instr, a->instrlen, replacement, a->replacementlen, a->padlen); - DUMP_BYTES(instr, a->instrlen, "%p: old_insn: ", instr); - DUMP_BYTES(replacement, a->replacementlen, "%p: rpl_insn: ", replacement); + DUMP_BYTES(instr, a->instrlen, "%px: old_insn: ", instr); + DUMP_BYTES(replacement, a->replacementlen, "%px: rpl_insn: ", replacement); memcpy(insnbuf, replacement, a->replacementlen); insnbuf_sz = a->replacementlen; @@ -433,7 +422,7 @@ a->instrlen - a->replacementlen); insnbuf_sz += a->instrlen - a->replacementlen; } - DUMP_BYTES(insnbuf, insnbuf_sz, "%p: final_insn: ", instr); + DUMP_BYTES(insnbuf, insnbuf_sz, "%px: final_insn: ", instr); text_poke_early(instr, insnbuf, insnbuf_sz); } @@ -599,9 +588,6 @@ struct paravirt_patch_site *p; char insnbuf[MAX_PATCH_LEN]; - if (noreplace_paravirt) - return; - for (p = start; p < end; p++) { unsigned int used; --- linux-aws-4.15.0.orig/arch/x86/kernel/apic/io_apic.c +++ linux-aws-4.15.0/arch/x86/kernel/apic/io_apic.c @@ -1578,14 +1578,20 @@ } #endif -int no_timer_check __initdata; +int no_timer_check __initdata = 1; static int __init notimercheck(char *s) { - no_timer_check = 1; - return 1; + int ret = 0; + + if (s) + ret = kstrtoint(s, 0, &no_timer_check); + else + no_timer_check = 1; + + return ret; } -__setup("no_timer_check", notimercheck); +early_param("no_timer_check", notimercheck); static void __init delay_with_tsc(void) { --- linux-aws-4.15.0.orig/arch/x86/kernel/cpu/bugs.c +++ linux-aws-4.15.0/arch/x86/kernel/cpu/bugs.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -90,20 +91,41 @@ }; #undef pr_fmt -#define pr_fmt(fmt) "Spectre V2 mitigation: " fmt +#define pr_fmt(fmt) "Spectre V2 : " fmt static enum spectre_v2_mitigation spectre_v2_enabled = SPECTRE_V2_NONE; +#ifdef RETPOLINE +static bool spectre_v2_bad_module; + +bool retpoline_module_ok(bool has_retpoline) +{ + if (spectre_v2_enabled == SPECTRE_V2_NONE || has_retpoline) + return true; + + pr_err("System may be vulnerable to spectre v2\n"); + spectre_v2_bad_module = true; + return false; +} + +static inline const char *spectre_v2_module_string(void) +{ + return spectre_v2_bad_module ? " - vulnerable module loaded" : ""; +} +#else +static inline const char *spectre_v2_module_string(void) { return ""; } +#endif + static void __init spec2_print_if_insecure(const char *reason) { if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2)) - pr_info("%s\n", reason); + pr_info("%s selected on command line.\n", reason); } static void __init spec2_print_if_secure(const char *reason) { if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2)) - pr_info("%s\n", reason); + pr_info("%s selected on command line.\n", reason); } static inline bool retp_compiler(void) @@ -118,42 +140,68 @@ return len == arglen && !strncmp(arg, opt, len); } +static const struct { + const char *option; + enum spectre_v2_mitigation_cmd cmd; + bool secure; +} mitigation_options[] = { + { "off", SPECTRE_V2_CMD_NONE, false }, + { "on", SPECTRE_V2_CMD_FORCE, true }, + { "retpoline", SPECTRE_V2_CMD_RETPOLINE, false }, + { "retpoline,amd", SPECTRE_V2_CMD_RETPOLINE_AMD, false }, + { "retpoline,generic", SPECTRE_V2_CMD_RETPOLINE_GENERIC, false }, + { "auto", SPECTRE_V2_CMD_AUTO, false }, +}; + static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void) { char arg[20]; - int ret; + int ret, i; + enum spectre_v2_mitigation_cmd cmd = SPECTRE_V2_CMD_AUTO; + + if (cmdline_find_option_bool(boot_command_line, "nospectre_v2")) + return SPECTRE_V2_CMD_NONE; + else { + ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, + sizeof(arg)); + if (ret < 0) + return SPECTRE_V2_CMD_AUTO; + + for (i = 0; i < ARRAY_SIZE(mitigation_options); i++) { + if (!match_option(arg, ret, mitigation_options[i].option)) + continue; + cmd = mitigation_options[i].cmd; + break; + } - ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, - sizeof(arg)); - if (ret > 0) { - if (match_option(arg, ret, "off")) { - goto disable; - } else if (match_option(arg, ret, "on")) { - spec2_print_if_secure("force enabled on command line."); - return SPECTRE_V2_CMD_FORCE; - } else if (match_option(arg, ret, "retpoline")) { - spec2_print_if_insecure("retpoline selected on command line."); - return SPECTRE_V2_CMD_RETPOLINE; - } else if (match_option(arg, ret, "retpoline,amd")) { - if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) { - pr_err("retpoline,amd selected but CPU is not AMD. Switching to AUTO select\n"); - return SPECTRE_V2_CMD_AUTO; - } - spec2_print_if_insecure("AMD retpoline selected on command line."); - return SPECTRE_V2_CMD_RETPOLINE_AMD; - } else if (match_option(arg, ret, "retpoline,generic")) { - spec2_print_if_insecure("generic retpoline selected on command line."); - return SPECTRE_V2_CMD_RETPOLINE_GENERIC; - } else if (match_option(arg, ret, "auto")) { + if (i >= ARRAY_SIZE(mitigation_options)) { + pr_err("unknown option (%s). Switching to AUTO select\n", + mitigation_options[i].option); return SPECTRE_V2_CMD_AUTO; } } - if (!cmdline_find_option_bool(boot_command_line, "nospectre_v2")) + if ((cmd == SPECTRE_V2_CMD_RETPOLINE || + cmd == SPECTRE_V2_CMD_RETPOLINE_AMD || + cmd == SPECTRE_V2_CMD_RETPOLINE_GENERIC) && + !IS_ENABLED(CONFIG_RETPOLINE)) { + pr_err("%s selected but not compiled in. Switching to AUTO select\n", + mitigation_options[i].option); return SPECTRE_V2_CMD_AUTO; -disable: - spec2_print_if_insecure("disabled on command line."); - return SPECTRE_V2_CMD_NONE; + } + + if (cmd == SPECTRE_V2_CMD_RETPOLINE_AMD && + boot_cpu_data.x86_vendor != X86_VENDOR_AMD) { + pr_err("retpoline,amd selected but CPU is not AMD. Switching to AUTO select\n"); + return SPECTRE_V2_CMD_AUTO; + } + + if (mitigation_options[i].secure) + spec2_print_if_secure(mitigation_options[i].option); + else + spec2_print_if_insecure(mitigation_options[i].option); + + return cmd; } /* Check for Skylake-like CPUs (for RSB handling) */ @@ -191,10 +239,10 @@ return; case SPECTRE_V2_CMD_FORCE: - /* FALLTRHU */ case SPECTRE_V2_CMD_AUTO: - goto retpoline_auto; - + if (IS_ENABLED(CONFIG_RETPOLINE)) + goto retpoline_auto; + break; case SPECTRE_V2_CMD_RETPOLINE_AMD: if (IS_ENABLED(CONFIG_RETPOLINE)) goto retpoline_amd; @@ -249,6 +297,12 @@ setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW); pr_info("Filling RSB on context switch\n"); } + + /* Initialize Indirect Branch Prediction Barrier if supported */ + if (boot_cpu_has(X86_FEATURE_IBPB)) { + setup_force_cpu_cap(X86_FEATURE_USE_IBPB); + pr_info("Enabling Indirect Branch Prediction Barrier\n"); + } } #undef pr_fmt @@ -269,7 +323,7 @@ { if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V1)) return sprintf(buf, "Not affected\n"); - return sprintf(buf, "Vulnerable\n"); + return sprintf(buf, "Mitigation: __user pointer sanitization\n"); } ssize_t cpu_show_spectre_v2(struct device *dev, @@ -278,6 +332,14 @@ if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2)) return sprintf(buf, "Not affected\n"); - return sprintf(buf, "%s\n", spectre_v2_strings[spectre_v2_enabled]); + return sprintf(buf, "%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], + boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "", + spectre_v2_module_string()); } #endif + +void __ibp_barrier(void) +{ + __wrmsr(MSR_IA32_PRED_CMD, PRED_CMD_IBPB, 0); +} +EXPORT_SYMBOL_GPL(__ibp_barrier); --- linux-aws-4.15.0.orig/arch/x86/kernel/cpu/common.c +++ linux-aws-4.15.0/arch/x86/kernel/cpu/common.c @@ -47,6 +47,8 @@ #include #include #include +#include +#include #ifdef CONFIG_X86_LOCAL_APIC #include @@ -748,6 +750,26 @@ } } +static void init_speculation_control(struct cpuinfo_x86 *c) +{ + /* + * The Intel SPEC_CTRL CPUID bit implies IBRS and IBPB support, + * and they also have a different bit for STIBP support. Also, + * a hypervisor might have set the individual AMD bits even on + * Intel CPUs, for finer-grained selection of what's available. + * + * We use the AMD bits in 0x8000_0008 EBX as the generic hardware + * features, which are visible in /proc/cpuinfo and used by the + * kernel. So set those accordingly from the Intel bits. + */ + if (cpu_has(c, X86_FEATURE_SPEC_CTRL)) { + set_cpu_cap(c, X86_FEATURE_IBRS); + set_cpu_cap(c, X86_FEATURE_IBPB); + } + if (cpu_has(c, X86_FEATURE_INTEL_STIBP)) + set_cpu_cap(c, X86_FEATURE_STIBP); +} + void get_cpu_cap(struct cpuinfo_x86 *c) { u32 eax, ebx, ecx, edx; @@ -769,6 +791,7 @@ cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx); c->x86_capability[CPUID_7_0_EBX] = ebx; c->x86_capability[CPUID_7_ECX] = ecx; + c->x86_capability[CPUID_7_EDX] = edx; } /* Extended state features: level 0x0000000d */ @@ -841,6 +864,7 @@ c->x86_capability[CPUID_8000_000A_EDX] = cpuid_edx(0x8000000a); init_scattered_cpuid_features(c); + init_speculation_control(c); /* * Clear/Set all flags overridden by options, after probe. @@ -876,6 +900,41 @@ #endif } +static const __initconst struct x86_cpu_id cpu_no_speculation[] = { + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CEDARVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CLOVERVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_LINCROFT, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PENWELL, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PINEVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_CENTAUR, 5 }, + { X86_VENDOR_INTEL, 5 }, + { X86_VENDOR_NSC, 5 }, + { X86_VENDOR_ANY, 4 }, + {} +}; + +static const __initconst struct x86_cpu_id cpu_no_meltdown[] = { + { X86_VENDOR_AMD }, + {} +}; + +static bool __init cpu_vulnerable_to_meltdown(struct cpuinfo_x86 *c) +{ + u64 ia32_cap = 0; + + if (x86_match_cpu(cpu_no_meltdown)) + return false; + + if (cpu_has(c, X86_FEATURE_ARCH_CAPABILITIES)) + rdmsrl(MSR_IA32_ARCH_CAPABILITIES, ia32_cap); + + /* Rogue Data Cache Load? No! */ + if (ia32_cap & ARCH_CAP_RDCL_NO) + return false; + + return true; +} + /* * Do minimum CPU detection early. * Fields really needed: vendor, cpuid_level, family, model, mask, @@ -923,11 +982,12 @@ setup_force_cpu_cap(X86_FEATURE_ALWAYS); - if (c->x86_vendor != X86_VENDOR_AMD) - setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN); - - setup_force_cpu_bug(X86_BUG_SPECTRE_V1); - setup_force_cpu_bug(X86_BUG_SPECTRE_V2); + if (!x86_match_cpu(cpu_no_speculation)) { + if (cpu_vulnerable_to_meltdown(c)) + setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN); + setup_force_cpu_bug(X86_BUG_SPECTRE_V1); + setup_force_cpu_bug(X86_BUG_SPECTRE_V2); + } fpu__init_system(c); --- linux-aws-4.15.0.orig/arch/x86/kernel/cpu/intel.c +++ linux-aws-4.15.0/arch/x86/kernel/cpu/intel.c @@ -102,6 +102,59 @@ ELF_HWCAP2 |= HWCAP2_RING3MWAIT; } +/* + * Early microcode releases for the Spectre v2 mitigation were broken. + * Information taken from; + * - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/microcode-update-guidance.pdf + * - https://kb.vmware.com/s/article/52345 + * - Microcode revisions observed in the wild + * - Release note from 20180108 microcode release + */ +struct sku_microcode { + u8 model; + u8 stepping; + u32 microcode; +}; +static const struct sku_microcode spectre_bad_microcodes[] = { + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0B, 0x84 }, + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x0A, 0x84 }, + { INTEL_FAM6_KABYLAKE_DESKTOP, 0x09, 0x84 }, + { INTEL_FAM6_KABYLAKE_MOBILE, 0x0A, 0x84 }, + { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x84 }, + { INTEL_FAM6_SKYLAKE_X, 0x03, 0x0100013e }, + { INTEL_FAM6_SKYLAKE_X, 0x04, 0x0200003c }, + { INTEL_FAM6_SKYLAKE_MOBILE, 0x03, 0xc2 }, + { INTEL_FAM6_SKYLAKE_DESKTOP, 0x03, 0xc2 }, + { INTEL_FAM6_BROADWELL_CORE, 0x04, 0x28 }, + { INTEL_FAM6_BROADWELL_GT3E, 0x01, 0x1b }, + { INTEL_FAM6_BROADWELL_XEON_D, 0x02, 0x14 }, + { INTEL_FAM6_BROADWELL_XEON_D, 0x03, 0x07000011 }, + { INTEL_FAM6_BROADWELL_X, 0x01, 0x0b000025 }, + { INTEL_FAM6_HASWELL_ULT, 0x01, 0x21 }, + { INTEL_FAM6_HASWELL_GT3E, 0x01, 0x18 }, + { INTEL_FAM6_HASWELL_CORE, 0x03, 0x23 }, + { INTEL_FAM6_HASWELL_X, 0x02, 0x3b }, + { INTEL_FAM6_HASWELL_X, 0x04, 0x10 }, + { INTEL_FAM6_IVYBRIDGE_X, 0x04, 0x42a }, + /* Updated in the 20180108 release; blacklist until we know otherwise */ + { INTEL_FAM6_ATOM_GEMINI_LAKE, 0x01, 0x22 }, + /* Observed in the wild */ + { INTEL_FAM6_SANDYBRIDGE_X, 0x06, 0x61b }, + { INTEL_FAM6_SANDYBRIDGE_X, 0x07, 0x712 }, +}; + +static bool bad_spectre_microcode(struct cpuinfo_x86 *c) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) { + if (c->x86_model == spectre_bad_microcodes[i].model && + c->x86_mask == spectre_bad_microcodes[i].stepping) + return (c->microcode <= spectre_bad_microcodes[i].microcode); + } + return false; +} + static void early_init_intel(struct cpuinfo_x86 *c) { u64 misc_enable; @@ -122,6 +175,19 @@ if (c->x86 >= 6 && !cpu_has(c, X86_FEATURE_IA64)) c->microcode = intel_get_microcode_revision(); + /* Now if any of them are set, check the blacklist and clear the lot */ + if ((cpu_has(c, X86_FEATURE_SPEC_CTRL) || + cpu_has(c, X86_FEATURE_INTEL_STIBP) || + cpu_has(c, X86_FEATURE_IBRS) || cpu_has(c, X86_FEATURE_IBPB) || + cpu_has(c, X86_FEATURE_STIBP)) && bad_spectre_microcode(c)) { + pr_warn("Intel Spectre v2 broken microcode detected; disabling Speculation Control\n"); + setup_clear_cpu_cap(X86_FEATURE_IBRS); + setup_clear_cpu_cap(X86_FEATURE_IBPB); + setup_clear_cpu_cap(X86_FEATURE_STIBP); + setup_clear_cpu_cap(X86_FEATURE_SPEC_CTRL); + setup_clear_cpu_cap(X86_FEATURE_INTEL_STIBP); + } + /* * Atom erratum AAE44/AAF40/AAG38/AAH41: * --- linux-aws-4.15.0.orig/arch/x86/kernel/cpu/scattered.c +++ linux-aws-4.15.0/arch/x86/kernel/cpu/scattered.c @@ -21,8 +21,6 @@ static const struct cpuid_bit cpuid_bits[] = { { X86_FEATURE_APERFMPERF, CPUID_ECX, 0, 0x00000006, 0 }, { X86_FEATURE_EPB, CPUID_ECX, 3, 0x00000006, 0 }, - { X86_FEATURE_AVX512_4VNNIW, CPUID_EDX, 2, 0x00000007, 0 }, - { X86_FEATURE_AVX512_4FMAPS, CPUID_EDX, 3, 0x00000007, 0 }, { X86_FEATURE_CAT_L3, CPUID_EBX, 1, 0x00000010, 0 }, { X86_FEATURE_CAT_L2, CPUID_EBX, 2, 0x00000010, 0 }, { X86_FEATURE_CDP_L3, CPUID_ECX, 2, 0x00000010, 1 }, --- linux-aws-4.15.0.orig/arch/x86/kernel/ioport.c +++ linux-aws-4.15.0/arch/x86/kernel/ioport.c @@ -31,7 +31,8 @@ if ((from + num <= from) || (from + num > IO_BITMAP_BITS)) return -EINVAL; - if (turn_on && !capable(CAP_SYS_RAWIO)) + if (turn_on && (!capable(CAP_SYS_RAWIO) || + kernel_is_locked_down("ioperm"))) return -EPERM; /* @@ -121,7 +122,8 @@ return -EINVAL; /* Trying to gain more privileges? */ if (level > old) { - if (!capable(CAP_SYS_RAWIO)) + if (!capable(CAP_SYS_RAWIO) || + kernel_is_locked_down("iopl")) return -EPERM; } regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | --- linux-aws-4.15.0.orig/arch/x86/kernel/kexec-bzimage64.c +++ linux-aws-4.15.0/arch/x86/kernel/kexec-bzimage64.c @@ -179,6 +179,7 @@ if (efi_enabled(EFI_OLD_MEMMAP)) return 0; + params->secure_boot = boot_params.secure_boot; ei->efi_loader_signature = current_ei->efi_loader_signature; ei->efi_systab = current_ei->efi_systab; ei->efi_systab_hi = current_ei->efi_systab_hi; --- linux-aws-4.15.0.orig/arch/x86/kernel/msr.c +++ linux-aws-4.15.0/arch/x86/kernel/msr.c @@ -84,6 +84,11 @@ int err = 0; ssize_t bytes = 0; + if (kernel_is_locked_down("Direct MSR access")) { + pr_info("Direct access to MSR %x\n", reg); + return -EPERM; + } + if (count % 8) return -EINVAL; /* Invalid chunk size */ @@ -135,6 +140,11 @@ err = -EFAULT; break; } + if (kernel_is_locked_down("Direct MSR access")) { + pr_info("Direct access to MSR %x\n", regs[1]); /* Display %ecx */ + err = -EPERM; + break; + } err = wrmsr_safe_regs_on_cpu(cpu, regs); if (err) break; --- linux-aws-4.15.0.orig/arch/x86/kernel/process_64.c +++ linux-aws-4.15.0/arch/x86/kernel/process_64.c @@ -557,7 +557,7 @@ * Pretend to come from a x32 execve. */ task_pt_regs(current)->orig_ax = __NR_x32_execve | __X32_SYSCALL_BIT; - current->thread.status &= ~TS_COMPAT; + current_thread_info()->status &= ~TS_COMPAT; #endif } @@ -571,7 +571,7 @@ current->personality |= force_personality32; /* Prepare the first "return" to user space */ task_pt_regs(current)->orig_ax = __NR_ia32_execve; - current->thread.status |= TS_COMPAT; + current_thread_info()->status |= TS_COMPAT; #endif } --- linux-aws-4.15.0.orig/arch/x86/kernel/ptrace.c +++ linux-aws-4.15.0/arch/x86/kernel/ptrace.c @@ -935,7 +935,7 @@ */ regs->orig_ax = value; if (syscall_get_nr(child, regs) >= 0) - child->thread.status |= TS_I386_REGS_POKED; + child->thread_info.status |= TS_I386_REGS_POKED; break; case offsetof(struct user32, regs.eflags): --- linux-aws-4.15.0.orig/arch/x86/kernel/reboot.c +++ linux-aws-4.15.0/arch/x86/kernel/reboot.c @@ -457,7 +457,46 @@ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), }, }, - + { /* Handle problems with rebooting on the Latitude E6520. */ + .callback = set_pci_reboot, + .ident = "Dell Latitude E6520", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6520"), + }, + }, + { /* Handle problems with rebooting on the OptiPlex 790. */ + .callback = set_pci_reboot, + .ident = "Dell OptiPlex 790", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 790"), + }, + }, + { /* Handle problems with rebooting on the OptiPlex 990. */ + .callback = set_pci_reboot, + .ident = "Dell OptiPlex 990", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"), + }, + }, + { /* Handle problems with rebooting on the Latitude E6220. */ + .callback = set_pci_reboot, + .ident = "Dell Latitude E6220", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6220"), + }, + }, + { /* Handle problems with rebooting on the OptiPlex 390. */ + .callback = set_pci_reboot, + .ident = "Dell OptiPlex 390", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 390"), + }, + }, { } }; --- linux-aws-4.15.0.orig/arch/x86/kernel/setup.c +++ linux-aws-4.15.0/arch/x86/kernel/setup.c @@ -64,6 +64,7 @@ #include #include #include +#include #include #include @@ -998,6 +999,9 @@ if (efi_enabled(EFI_BOOT)) efi_init(); + efi_set_secure_boot(boot_params.secure_boot); + init_lockdown(); + dmi_scan_machine(); dmi_memdev_walk(); dmi_set_dump_stack_arch_desc(); @@ -1151,20 +1155,6 @@ /* Allocate bigger log buffer */ setup_log_buf(1); - if (efi_enabled(EFI_BOOT)) { - switch (boot_params.secure_boot) { - case efi_secureboot_mode_disabled: - pr_info("Secure boot disabled\n"); - break; - case efi_secureboot_mode_enabled: - pr_info("Secure boot enabled\n"); - break; - default: - pr_info("Secure boot could not be determined\n"); - break; - } - } - reserve_initrd(); acpi_table_upgrade(); --- linux-aws-4.15.0.orig/arch/x86/kernel/signal.c +++ linux-aws-4.15.0/arch/x86/kernel/signal.c @@ -787,7 +787,7 @@ * than the tracee. */ #ifdef CONFIG_IA32_EMULATION - if (current->thread.status & (TS_COMPAT|TS_I386_REGS_POKED)) + if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED)) return __NR_ia32_restart_syscall; #endif #ifdef CONFIG_X86_X32_ABI --- linux-aws-4.15.0.orig/arch/x86/kernel/tsc.c +++ linux-aws-4.15.0/arch/x86/kernel/tsc.c @@ -44,7 +44,7 @@ static DEFINE_STATIC_KEY_FALSE(__use_tsc); -int tsc_clocksource_reliable; +int tsc_clocksource_reliable = 1; static u32 art_to_tsc_numerator; static u32 art_to_tsc_denominator; @@ -271,6 +271,8 @@ { if (!strcmp(str, "reliable")) tsc_clocksource_reliable = 1; + if (!strcmp(str, "unreliable")) + tsc_clocksource_reliable = 0; if (!strncmp(str, "noirqtime", 9)) no_sched_irq_time = 1; if (!strcmp(str, "unstable")) @@ -1378,6 +1380,9 @@ if (tsc_disabled || !constant_tsc || !mask) return 0; + if (cpu != 0) + return cpu_data(0).loops_per_jiffy; + sibling = cpumask_any_but(mask, cpu); if (sibling < nr_cpu_ids) return cpu_data(sibling).loops_per_jiffy; --- linux-aws-4.15.0.orig/arch/x86/kvm/cpuid.c +++ linux-aws-4.15.0/arch/x86/kvm/cpuid.c @@ -67,9 +67,7 @@ #define F(x) bit(X86_FEATURE_##x) -/* These are scattered features in cpufeatures.h. */ -#define KVM_CPUID_BIT_AVX512_4VNNIW 2 -#define KVM_CPUID_BIT_AVX512_4FMAPS 3 +/* For scattered features from cpufeatures.h; we currently expose none */ #define KF(x) bit(KVM_CPUID_BIT_##x) int kvm_update_cpuid(struct kvm_vcpu *vcpu) @@ -367,6 +365,10 @@ F(3DNOWPREFETCH) | F(OSVW) | 0 /* IBS */ | F(XOP) | 0 /* SKINIT, WDT, LWP */ | F(FMA4) | F(TBM); + /* cpuid 0x80000008.ebx */ + const u32 kvm_cpuid_8000_0008_ebx_x86_features = + F(IBPB) | F(IBRS); + /* cpuid 0xC0000001.edx */ const u32 kvm_cpuid_C000_0001_edx_x86_features = F(XSTORE) | F(XSTORE_EN) | F(XCRYPT) | F(XCRYPT_EN) | @@ -392,7 +394,8 @@ /* cpuid 7.0.edx*/ const u32 kvm_cpuid_7_0_edx_x86_features = - KF(AVX512_4VNNIW) | KF(AVX512_4FMAPS); + F(AVX512_4VNNIW) | F(AVX512_4FMAPS) | F(SPEC_CTRL) | + F(ARCH_CAPABILITIES); /* all calls to cpuid_count() should be made on the same cpu */ get_cpu(); @@ -477,7 +480,7 @@ if (!tdp_enabled || !boot_cpu_has(X86_FEATURE_OSPKE)) entry->ecx &= ~F(PKU); entry->edx &= kvm_cpuid_7_0_edx_x86_features; - entry->edx &= get_scattered_cpuid_leaf(7, 0, CPUID_EDX); + cpuid_mask(&entry->edx, CPUID_7_EDX); } else { entry->ebx = 0; entry->ecx = 0; @@ -627,7 +630,14 @@ if (!g_phys_as) g_phys_as = phys_as; entry->eax = g_phys_as | (virt_as << 8); - entry->ebx = entry->edx = 0; + entry->edx = 0; + /* IBRS and IBPB aren't necessarily present in hardware cpuid */ + if (boot_cpu_has(X86_FEATURE_IBPB)) + entry->ebx |= F(IBPB); + if (boot_cpu_has(X86_FEATURE_IBRS)) + entry->ebx |= F(IBRS); + entry->ebx &= kvm_cpuid_8000_0008_ebx_x86_features; + cpuid_mask(&entry->ebx, CPUID_8000_0008_EBX); break; } case 0x80000019: --- linux-aws-4.15.0.orig/arch/x86/kvm/cpuid.h +++ linux-aws-4.15.0/arch/x86/kvm/cpuid.h @@ -54,6 +54,7 @@ [CPUID_8000_000A_EDX] = {0x8000000a, 0, CPUID_EDX}, [CPUID_7_ECX] = { 7, 0, CPUID_ECX}, [CPUID_8000_0007_EBX] = {0x80000007, 0, CPUID_EBX}, + [CPUID_7_EDX] = { 7, 0, CPUID_EDX}, }; static __always_inline struct cpuid_reg x86_feature_cpuid(unsigned x86_feature) --- linux-aws-4.15.0.orig/arch/x86/kvm/emulate.c +++ linux-aws-4.15.0/arch/x86/kvm/emulate.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "x86.h" #include "tss.h" @@ -1021,8 +1022,8 @@ void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf); flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF; - asm("push %[flags]; popf; call *%[fastop]" - : "=a"(rc) : [fastop]"r"(fop), [flags]"r"(flags)); + asm("push %[flags]; popf; " CALL_NOSPEC + : "=a"(rc) : [thunk_target]"r"(fop), [flags]"r"(flags)); return rc; } @@ -5335,9 +5336,9 @@ if (!(ctxt->d & ByteOp)) fop += __ffs(ctxt->dst.bytes) * FASTOP_SIZE; - asm("push %[flags]; popf; call *%[fastop]; pushf; pop %[flags]\n" + asm("push %[flags]; popf; " CALL_NOSPEC " ; pushf; pop %[flags]\n" : "+a"(ctxt->dst.val), "+d"(ctxt->src.val), [flags]"+D"(flags), - [fastop]"+S"(fop), ASM_CALL_CONSTRAINT + [thunk_target]"+S"(fop), ASM_CALL_CONSTRAINT : "c"(ctxt->src2.val)); ctxt->eflags = (ctxt->eflags & ~EFLAGS_MASK) | (flags & EFLAGS_MASK); --- linux-aws-4.15.0.orig/arch/x86/kvm/svm.c +++ linux-aws-4.15.0/arch/x86/kvm/svm.c @@ -184,6 +184,8 @@ u64 gs_base; } host; + u64 spec_ctrl; + u32 *msrpm; ulong nmi_iret_rip; @@ -249,6 +251,8 @@ { .index = MSR_CSTAR, .always = true }, { .index = MSR_SYSCALL_MASK, .always = true }, #endif + { .index = MSR_IA32_SPEC_CTRL, .always = false }, + { .index = MSR_IA32_PRED_CMD, .always = false }, { .index = MSR_IA32_LASTBRANCHFROMIP, .always = false }, { .index = MSR_IA32_LASTBRANCHTOIP, .always = false }, { .index = MSR_IA32_LASTINTFROMIP, .always = false }, @@ -529,6 +533,7 @@ struct kvm_ldttss_desc *tss_desc; struct page *save_area; + struct vmcb *current_vmcb; }; static DEFINE_PER_CPU(struct svm_cpu_data *, svm_data); @@ -880,6 +885,25 @@ return false; } +static bool msr_write_intercepted(struct kvm_vcpu *vcpu, unsigned msr) +{ + u8 bit_write; + unsigned long tmp; + u32 offset; + u32 *msrpm; + + msrpm = is_guest_mode(vcpu) ? to_svm(vcpu)->nested.msrpm: + to_svm(vcpu)->msrpm; + + offset = svm_msrpm_offset(msr); + bit_write = 2 * (msr & 0x0f) + 1; + tmp = msrpm[offset]; + + BUG_ON(offset == MSR_INVALID); + + return !!test_bit(bit_write, &tmp); +} + static void set_msr_interception(u32 *msrpm, unsigned msr, int read, int write) { @@ -1582,6 +1606,8 @@ u32 dummy; u32 eax = 1; + svm->spec_ctrl = 0; + if (!init_event) { svm->vcpu.arch.apic_base = APIC_DEFAULT_PHYS_BASE | MSR_IA32_APICBASE_ENABLE; @@ -1703,11 +1729,17 @@ __free_pages(virt_to_page(svm->nested.msrpm), MSRPM_ALLOC_ORDER); kvm_vcpu_uninit(vcpu); kmem_cache_free(kvm_vcpu_cache, svm); + /* + * The vmcb page can be recycled, causing a false negative in + * svm_vcpu_load(). So do a full IBPB now. + */ + indirect_branch_prediction_barrier(); } static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu) { struct vcpu_svm *svm = to_svm(vcpu); + struct svm_cpu_data *sd = per_cpu(svm_data, cpu); int i; if (unlikely(cpu != vcpu->cpu)) { @@ -1736,6 +1768,10 @@ if (static_cpu_has(X86_FEATURE_RDTSCP)) wrmsrl(MSR_TSC_AUX, svm->tsc_aux); + if (sd->current_vmcb != svm->vmcb) { + sd->current_vmcb = svm->vmcb; + indirect_branch_prediction_barrier(); + } avic_vcpu_load(vcpu, cpu); } @@ -3593,6 +3629,13 @@ case MSR_VM_CR: msr_info->data = svm->nested.vm_cr_msr; break; + case MSR_IA32_SPEC_CTRL: + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBRS)) + return 1; + + msr_info->data = svm->spec_ctrl; + break; case MSR_IA32_UCODE_REV: msr_info->data = 0x01000065; break; @@ -3684,6 +3727,49 @@ case MSR_IA32_TSC: kvm_write_tsc(vcpu, msr); break; + case MSR_IA32_SPEC_CTRL: + if (!msr->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBRS)) + return 1; + + /* The STIBP bit doesn't fault even if it's not advertised */ + if (data & ~(SPEC_CTRL_IBRS | SPEC_CTRL_STIBP)) + return 1; + + svm->spec_ctrl = data; + + if (!data) + break; + + /* + * For non-nested: + * When it's written (to non-zero) for the first time, pass + * it through. + * + * For nested: + * The handling of the MSR bitmap for L2 guests is done in + * nested_svm_vmrun_msrpm. + * We update the L1 MSR bit as well since it will end up + * touching the MSR anyway now. + */ + set_msr_interception(svm->msrpm, MSR_IA32_SPEC_CTRL, 1, 1); + break; + case MSR_IA32_PRED_CMD: + if (!msr->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBPB)) + return 1; + + if (data & ~PRED_CMD_IBPB) + return 1; + + if (!data) + break; + + wrmsrl(MSR_IA32_PRED_CMD, PRED_CMD_IBPB); + if (is_guest_mode(vcpu)) + break; + set_msr_interception(svm->msrpm, MSR_IA32_PRED_CMD, 0, 1); + break; case MSR_STAR: svm->vmcb->save.star = data; break; @@ -4936,6 +5022,15 @@ local_irq_enable(); + /* + * If this vCPU has touched SPEC_CTRL, restore the guest's value if + * it's non-zero. Since vmentry is serialising on affected CPUs, there + * is no need to worry about the conditional branch over the wrmsr + * being speculatively taken. + */ + if (svm->spec_ctrl) + wrmsrl(MSR_IA32_SPEC_CTRL, svm->spec_ctrl); + asm volatile ( "push %%" _ASM_BP "; \n\t" "mov %c[rbx](%[svm]), %%" _ASM_BX " \n\t" @@ -5028,6 +5123,27 @@ #endif ); + /* + * We do not use IBRS in the kernel. If this vCPU has used the + * SPEC_CTRL MSR it may have left it on; save the value and + * turn it off. This is much more efficient than blindly adding + * it to the atomic save/restore list. Especially as the former + * (Saving guest MSRs on vmexit) doesn't even exist in KVM. + * + * For non-nested case: + * If the L01 MSR bitmap does not intercept the MSR, then we need to + * save it. + * + * For nested case: + * If the L02 MSR bitmap does not intercept the MSR, then we need to + * save it. + */ + if (!msr_write_intercepted(vcpu, MSR_IA32_SPEC_CTRL)) + rdmsrl(MSR_IA32_SPEC_CTRL, svm->spec_ctrl); + + if (svm->spec_ctrl) + wrmsrl(MSR_IA32_SPEC_CTRL, 0); + /* Eliminate branch target predictions from guest mode */ vmexit_fill_RSB(); --- linux-aws-4.15.0.orig/arch/x86/kvm/vmx.c +++ linux-aws-4.15.0/arch/x86/kvm/vmx.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "kvm_cache_regs.h" #include "x86.h" @@ -111,6 +112,14 @@ static bool __read_mostly enable_pml = 1; module_param_named(pml, enable_pml, bool, S_IRUGO); +#define MSR_TYPE_R 1 +#define MSR_TYPE_W 2 +#define MSR_TYPE_RW 3 + +#define MSR_BITMAP_MODE_X2APIC 1 +#define MSR_BITMAP_MODE_X2APIC_APICV 2 +#define MSR_BITMAP_MODE_LM 4 + #define KVM_VMX_TSC_MULTIPLIER_MAX 0xffffffffffffffffULL /* Guest_tsc -> host_tsc conversion requires 64-bit division. */ @@ -185,7 +194,6 @@ extern const ulong vmx_return; #define NR_AUTOLOAD_MSRS 8 -#define VMCS02_POOL_SIZE 1 struct vmcs { u32 revision_id; @@ -210,6 +218,7 @@ int soft_vnmi_blocked; ktime_t entry_time; s64 vnmi_blocked_time; + unsigned long *msr_bitmap; struct list_head loaded_vmcss_on_cpu_link; }; @@ -226,7 +235,7 @@ * stored in guest memory specified by VMPTRLD, but is opaque to the guest, * which must access it using VMREAD/VMWRITE/VMCLEAR instructions. * More than one of these structures may exist, if L1 runs multiple L2 guests. - * nested_vmx_run() will use the data here to build a vmcs02: a VMCS for the + * nested_vmx_run() will use the data here to build the vmcs02: a VMCS for the * underlying hardware which will be used to run L2. * This structure is packed to ensure that its layout is identical across * machines (necessary for live migration). @@ -409,13 +418,6 @@ */ #define VMCS12_SIZE 0x1000 -/* Used to remember the last vmcs02 used for some recently used vmcs12s */ -struct vmcs02_list { - struct list_head list; - gpa_t vmptr; - struct loaded_vmcs vmcs02; -}; - /* * The nested_vmx structure is part of vcpu_vmx, and holds information we need * for correct emulation of VMX (i.e., nested VMX) on this vcpu. @@ -440,15 +442,15 @@ */ bool sync_shadow_vmcs; - /* vmcs02_list cache of VMCSs recently used to run L2 guests */ - struct list_head vmcs02_pool; - int vmcs02_num; bool change_vmcs01_virtual_x2apic_mode; /* L2 must run next, and mustn't decide to exit to L1. */ bool nested_run_pending; + + struct loaded_vmcs vmcs02; + /* - * Guest pages referred to in vmcs02 with host-physical pointers, so - * we must keep them pinned while L2 runs. + * Guest pages referred to in the vmcs02 with host-physical + * pointers, so we must keep them pinned while L2 runs. */ struct page *apic_access_page; struct page *virtual_apic_page; @@ -457,8 +459,6 @@ bool pi_pending; u16 posted_intr_nv; - unsigned long *msr_bitmap; - struct hrtimer preemption_timer; bool preemption_timer_expired; @@ -581,6 +581,7 @@ struct kvm_vcpu vcpu; unsigned long host_rsp; u8 fail; + u8 msr_bitmap_mode; u32 exit_intr_info; u32 idt_vectoring_info; ulong rflags; @@ -592,6 +593,10 @@ u64 msr_host_kernel_gs_base; u64 msr_guest_kernel_gs_base; #endif + + u64 arch_capabilities; + u64 spec_ctrl; + u32 vm_entry_controls_shadow; u32 vm_exit_controls_shadow; u32 secondary_exec_control; @@ -898,21 +903,18 @@ static inline short vmcs_field_to_offset(unsigned long field) { - BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX); + const size_t size = ARRAY_SIZE(vmcs_field_to_offset_table); + unsigned short offset; - if (field >= ARRAY_SIZE(vmcs_field_to_offset_table)) + BUILD_BUG_ON(size > SHRT_MAX); + if (field >= size) return -ENOENT; - /* - * FIXME: Mitigation for CVE-2017-5753. To be replaced with a - * generic mechanism. - */ - asm("lfence"); - - if (vmcs_field_to_offset_table[field] == 0) + field = array_index_nospec(field, size); + offset = vmcs_field_to_offset_table[field]; + if (offset == 0) return -ENOENT; - - return vmcs_field_to_offset_table[field]; + return offset; } static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu) @@ -935,6 +937,9 @@ static void vmx_set_nmi_mask(struct kvm_vcpu *vcpu, bool masked); static bool nested_vmx_is_page_fault_vmexit(struct vmcs12 *vmcs12, u16 error_code); +static void vmx_update_msr_bitmap(struct kvm_vcpu *vcpu); +static void __always_inline vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, + u32 msr, int type); static DEFINE_PER_CPU(struct vmcs *, vmxarea); static DEFINE_PER_CPU(struct vmcs *, current_vmcs); @@ -954,12 +959,6 @@ enum { VMX_IO_BITMAP_A, VMX_IO_BITMAP_B, - VMX_MSR_BITMAP_LEGACY, - VMX_MSR_BITMAP_LONGMODE, - VMX_MSR_BITMAP_LEGACY_X2APIC_APICV, - VMX_MSR_BITMAP_LONGMODE_X2APIC_APICV, - VMX_MSR_BITMAP_LEGACY_X2APIC, - VMX_MSR_BITMAP_LONGMODE_X2APIC, VMX_VMREAD_BITMAP, VMX_VMWRITE_BITMAP, VMX_BITMAP_NR @@ -969,12 +968,6 @@ #define vmx_io_bitmap_a (vmx_bitmap[VMX_IO_BITMAP_A]) #define vmx_io_bitmap_b (vmx_bitmap[VMX_IO_BITMAP_B]) -#define vmx_msr_bitmap_legacy (vmx_bitmap[VMX_MSR_BITMAP_LEGACY]) -#define vmx_msr_bitmap_longmode (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE]) -#define vmx_msr_bitmap_legacy_x2apic_apicv (vmx_bitmap[VMX_MSR_BITMAP_LEGACY_X2APIC_APICV]) -#define vmx_msr_bitmap_longmode_x2apic_apicv (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE_X2APIC_APICV]) -#define vmx_msr_bitmap_legacy_x2apic (vmx_bitmap[VMX_MSR_BITMAP_LEGACY_X2APIC]) -#define vmx_msr_bitmap_longmode_x2apic (vmx_bitmap[VMX_MSR_BITMAP_LONGMODE_X2APIC]) #define vmx_vmread_bitmap (vmx_bitmap[VMX_VMREAD_BITMAP]) #define vmx_vmwrite_bitmap (vmx_bitmap[VMX_VMWRITE_BITMAP]) @@ -1918,6 +1911,52 @@ vmcs_write32(EXCEPTION_BITMAP, eb); } +/* + * Check if MSR is intercepted for currently loaded MSR bitmap. + */ +static bool msr_write_intercepted(struct kvm_vcpu *vcpu, u32 msr) +{ + unsigned long *msr_bitmap; + int f = sizeof(unsigned long); + + if (!cpu_has_vmx_msr_bitmap()) + return true; + + msr_bitmap = to_vmx(vcpu)->loaded_vmcs->msr_bitmap; + + if (msr <= 0x1fff) { + return !!test_bit(msr, msr_bitmap + 0x800 / f); + } else if ((msr >= 0xc0000000) && (msr <= 0xc0001fff)) { + msr &= 0x1fff; + return !!test_bit(msr, msr_bitmap + 0xc00 / f); + } + + return true; +} + +/* + * Check if MSR is intercepted for L01 MSR bitmap. + */ +static bool msr_write_intercepted_l01(struct kvm_vcpu *vcpu, u32 msr) +{ + unsigned long *msr_bitmap; + int f = sizeof(unsigned long); + + if (!cpu_has_vmx_msr_bitmap()) + return true; + + msr_bitmap = to_vmx(vcpu)->vmcs01.msr_bitmap; + + if (msr <= 0x1fff) { + return !!test_bit(msr, msr_bitmap + 0x800 / f); + } else if ((msr >= 0xc0000000) && (msr <= 0xc0001fff)) { + msr &= 0x1fff; + return !!test_bit(msr, msr_bitmap + 0xc00 / f); + } + + return true; +} + static void clear_atomic_switch_msr_special(struct vcpu_vmx *vmx, unsigned long entry, unsigned long exit) { @@ -2296,6 +2335,7 @@ if (per_cpu(current_vmcs, cpu) != vmx->loaded_vmcs->vmcs) { per_cpu(current_vmcs, cpu) = vmx->loaded_vmcs->vmcs; vmcs_load(vmx->loaded_vmcs->vmcs); + indirect_branch_prediction_barrier(); } if (!already_loaded) { @@ -2572,36 +2612,6 @@ vmx->guest_msrs[from] = tmp; } -static void vmx_set_msr_bitmap(struct kvm_vcpu *vcpu) -{ - unsigned long *msr_bitmap; - - if (is_guest_mode(vcpu)) - msr_bitmap = to_vmx(vcpu)->nested.msr_bitmap; - else if (cpu_has_secondary_exec_ctrls() && - (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & - SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) { - if (enable_apicv && kvm_vcpu_apicv_active(vcpu)) { - if (is_long_mode(vcpu)) - msr_bitmap = vmx_msr_bitmap_longmode_x2apic_apicv; - else - msr_bitmap = vmx_msr_bitmap_legacy_x2apic_apicv; - } else { - if (is_long_mode(vcpu)) - msr_bitmap = vmx_msr_bitmap_longmode_x2apic; - else - msr_bitmap = vmx_msr_bitmap_legacy_x2apic; - } - } else { - if (is_long_mode(vcpu)) - msr_bitmap = vmx_msr_bitmap_longmode; - else - msr_bitmap = vmx_msr_bitmap_legacy; - } - - vmcs_write64(MSR_BITMAP, __pa(msr_bitmap)); -} - /* * Set up the vmcs to automatically save and restore system * msrs. Don't touch the 64-bit msrs if the guest is in legacy @@ -2642,7 +2652,7 @@ vmx->save_nmsrs = save_nmsrs; if (cpu_has_vmx_msr_bitmap()) - vmx_set_msr_bitmap(&vmx->vcpu); + vmx_update_msr_bitmap(&vmx->vcpu); } /* @@ -3276,6 +3286,20 @@ case MSR_IA32_TSC: msr_info->data = guest_read_tsc(vcpu); break; + case MSR_IA32_SPEC_CTRL: + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBRS) && + !guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) + return 1; + + msr_info->data = to_vmx(vcpu)->spec_ctrl; + break; + case MSR_IA32_ARCH_CAPABILITIES: + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_CAPABILITIES)) + return 1; + msr_info->data = to_vmx(vcpu)->arch_capabilities; + break; case MSR_IA32_SYSENTER_CS: msr_info->data = vmcs_read32(GUEST_SYSENTER_CS); break; @@ -3383,6 +3407,70 @@ case MSR_IA32_TSC: kvm_write_tsc(vcpu, msr_info); break; + case MSR_IA32_SPEC_CTRL: + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBRS) && + !guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) + return 1; + + /* The STIBP bit doesn't fault even if it's not advertised */ + if (data & ~(SPEC_CTRL_IBRS | SPEC_CTRL_STIBP)) + return 1; + + vmx->spec_ctrl = data; + + if (!data) + break; + + /* + * For non-nested: + * When it's written (to non-zero) for the first time, pass + * it through. + * + * For nested: + * The handling of the MSR bitmap for L2 guests is done in + * nested_vmx_merge_msr_bitmap. We should not touch the + * vmcs02.msr_bitmap here since it gets completely overwritten + * in the merging. We update the vmcs01 here for L1 as well + * since it will end up touching the MSR anyway now. + */ + vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, + MSR_IA32_SPEC_CTRL, + MSR_TYPE_RW); + break; + case MSR_IA32_PRED_CMD: + if (!msr_info->host_initiated && + !guest_cpuid_has(vcpu, X86_FEATURE_IBPB) && + !guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) + return 1; + + if (data & ~PRED_CMD_IBPB) + return 1; + + if (!data) + break; + + wrmsrl(MSR_IA32_PRED_CMD, PRED_CMD_IBPB); + + /* + * For non-nested: + * When it's written (to non-zero) for the first time, pass + * it through. + * + * For nested: + * The handling of the MSR bitmap for L2 guests is done in + * nested_vmx_merge_msr_bitmap. We should not touch the + * vmcs02.msr_bitmap here since it gets completely overwritten + * in the merging. + */ + vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, MSR_IA32_PRED_CMD, + MSR_TYPE_W); + break; + case MSR_IA32_ARCH_CAPABILITIES: + if (!msr_info->host_initiated) + return 1; + vmx->arch_capabilities = data; + break; case MSR_IA32_CR_PAT: if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data)) @@ -3837,11 +3925,6 @@ return vmcs; } -static struct vmcs *alloc_vmcs(void) -{ - return alloc_vmcs_cpu(raw_smp_processor_id()); -} - static void free_vmcs(struct vmcs *vmcs) { free_pages((unsigned long)vmcs, vmcs_config.order); @@ -3857,9 +3940,38 @@ loaded_vmcs_clear(loaded_vmcs); free_vmcs(loaded_vmcs->vmcs); loaded_vmcs->vmcs = NULL; + if (loaded_vmcs->msr_bitmap) + free_page((unsigned long)loaded_vmcs->msr_bitmap); WARN_ON(loaded_vmcs->shadow_vmcs != NULL); } +static struct vmcs *alloc_vmcs(void) +{ + return alloc_vmcs_cpu(raw_smp_processor_id()); +} + +static int alloc_loaded_vmcs(struct loaded_vmcs *loaded_vmcs) +{ + loaded_vmcs->vmcs = alloc_vmcs(); + if (!loaded_vmcs->vmcs) + return -ENOMEM; + + loaded_vmcs->shadow_vmcs = NULL; + loaded_vmcs_init(loaded_vmcs); + + if (cpu_has_vmx_msr_bitmap()) { + loaded_vmcs->msr_bitmap = (unsigned long *)__get_free_page(GFP_KERNEL); + if (!loaded_vmcs->msr_bitmap) + goto out_vmcs; + memset(loaded_vmcs->msr_bitmap, 0xff, PAGE_SIZE); + } + return 0; + +out_vmcs: + free_loaded_vmcs(loaded_vmcs); + return -ENOMEM; +} + static void free_kvm_area(void) { int cpu; @@ -4918,10 +5030,8 @@ spin_unlock(&vmx_vpid_lock); } -#define MSR_TYPE_R 1 -#define MSR_TYPE_W 2 -static void __vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, - u32 msr, int type) +static void __always_inline vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, + u32 msr, int type) { int f = sizeof(unsigned long); @@ -4955,6 +5065,50 @@ } } +static void __always_inline vmx_enable_intercept_for_msr(unsigned long *msr_bitmap, + u32 msr, int type) +{ + int f = sizeof(unsigned long); + + if (!cpu_has_vmx_msr_bitmap()) + return; + + /* + * See Intel PRM Vol. 3, 20.6.9 (MSR-Bitmap Address). Early manuals + * have the write-low and read-high bitmap offsets the wrong way round. + * We can control MSRs 0x00000000-0x00001fff and 0xc0000000-0xc0001fff. + */ + if (msr <= 0x1fff) { + if (type & MSR_TYPE_R) + /* read-low */ + __set_bit(msr, msr_bitmap + 0x000 / f); + + if (type & MSR_TYPE_W) + /* write-low */ + __set_bit(msr, msr_bitmap + 0x800 / f); + + } else if ((msr >= 0xc0000000) && (msr <= 0xc0001fff)) { + msr &= 0x1fff; + if (type & MSR_TYPE_R) + /* read-high */ + __set_bit(msr, msr_bitmap + 0x400 / f); + + if (type & MSR_TYPE_W) + /* write-high */ + __set_bit(msr, msr_bitmap + 0xc00 / f); + + } +} + +static void __always_inline vmx_set_intercept_for_msr(unsigned long *msr_bitmap, + u32 msr, int type, bool value) +{ + if (value) + vmx_enable_intercept_for_msr(msr_bitmap, msr, type); + else + vmx_disable_intercept_for_msr(msr_bitmap, msr, type); +} + /* * If a msr is allowed by L0, we should check whether it is allowed by L1. * The corresponding bit will be cleared unless both of L0 and L1 allow it. @@ -5001,30 +5155,70 @@ } } -static void vmx_disable_intercept_for_msr(u32 msr, bool longmode_only) +static u8 vmx_msr_bitmap_mode(struct kvm_vcpu *vcpu) { - if (!longmode_only) - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_legacy, - msr, MSR_TYPE_R | MSR_TYPE_W); - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_longmode, - msr, MSR_TYPE_R | MSR_TYPE_W); -} - -static void vmx_disable_intercept_msr_x2apic(u32 msr, int type, bool apicv_active) -{ - if (apicv_active) { - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_legacy_x2apic_apicv, - msr, type); - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_longmode_x2apic_apicv, - msr, type); - } else { - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_legacy_x2apic, - msr, type); - __vmx_disable_intercept_for_msr(vmx_msr_bitmap_longmode_x2apic, - msr, type); + u8 mode = 0; + + if (cpu_has_secondary_exec_ctrls() && + (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & + SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) { + mode |= MSR_BITMAP_MODE_X2APIC; + if (enable_apicv && kvm_vcpu_apicv_active(vcpu)) + mode |= MSR_BITMAP_MODE_X2APIC_APICV; + } + + if (is_long_mode(vcpu)) + mode |= MSR_BITMAP_MODE_LM; + + return mode; +} + +#define X2APIC_MSR(r) (APIC_BASE_MSR + ((r) >> 4)) + +static void vmx_update_msr_bitmap_x2apic(unsigned long *msr_bitmap, + u8 mode) +{ + int msr; + + for (msr = 0x800; msr <= 0x8ff; msr += BITS_PER_LONG) { + unsigned word = msr / BITS_PER_LONG; + msr_bitmap[word] = (mode & MSR_BITMAP_MODE_X2APIC_APICV) ? 0 : ~0; + msr_bitmap[word + (0x800 / sizeof(long))] = ~0; + } + + if (mode & MSR_BITMAP_MODE_X2APIC) { + /* + * TPR reads and writes can be virtualized even if virtual interrupt + * delivery is not in use. + */ + vmx_disable_intercept_for_msr(msr_bitmap, X2APIC_MSR(APIC_TASKPRI), MSR_TYPE_RW); + if (mode & MSR_BITMAP_MODE_X2APIC_APICV) { + vmx_enable_intercept_for_msr(msr_bitmap, X2APIC_MSR(APIC_TMCCT), MSR_TYPE_R); + vmx_disable_intercept_for_msr(msr_bitmap, X2APIC_MSR(APIC_EOI), MSR_TYPE_W); + vmx_disable_intercept_for_msr(msr_bitmap, X2APIC_MSR(APIC_SELF_IPI), MSR_TYPE_W); + } } } +static void vmx_update_msr_bitmap(struct kvm_vcpu *vcpu) +{ + struct vcpu_vmx *vmx = to_vmx(vcpu); + unsigned long *msr_bitmap = vmx->vmcs01.msr_bitmap; + u8 mode = vmx_msr_bitmap_mode(vcpu); + u8 changed = mode ^ vmx->msr_bitmap_mode; + + if (!changed) + return; + + vmx_set_intercept_for_msr(msr_bitmap, MSR_KERNEL_GS_BASE, MSR_TYPE_RW, + !(mode & MSR_BITMAP_MODE_LM)); + + if (changed & (MSR_BITMAP_MODE_X2APIC | MSR_BITMAP_MODE_X2APIC_APICV)) + vmx_update_msr_bitmap_x2apic(msr_bitmap, mode); + + vmx->msr_bitmap_mode = mode; +} + static bool vmx_get_enable_apicv(struct kvm_vcpu *vcpu) { return enable_apicv; @@ -5274,7 +5468,7 @@ } if (cpu_has_vmx_msr_bitmap()) - vmx_set_msr_bitmap(vcpu); + vmx_update_msr_bitmap(vcpu); } static u32 vmx_exec_control(struct vcpu_vmx *vmx) @@ -5461,7 +5655,7 @@ vmcs_write64(VMWRITE_BITMAP, __pa(vmx_vmwrite_bitmap)); } if (cpu_has_vmx_msr_bitmap()) - vmcs_write64(MSR_BITMAP, __pa(vmx_msr_bitmap_legacy)); + vmcs_write64(MSR_BITMAP, __pa(vmx->vmcs01.msr_bitmap)); vmcs_write64(VMCS_LINK_POINTER, -1ull); /* 22.3.1.5 */ @@ -5539,6 +5733,8 @@ ++vmx->nmsrs; } + if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES)) + rdmsrl(MSR_IA32_ARCH_CAPABILITIES, vmx->arch_capabilities); vm_exit_controls_init(vmx, vmcs_config.vmexit_ctrl); @@ -5567,6 +5763,7 @@ u64 cr0; vmx->rmode.vm86_active = 0; + vmx->spec_ctrl = 0; vmx->vcpu.arch.regs[VCPU_REGS_RDX] = get_rdx_init_val(); kvm_set_cr8(vcpu, 0); @@ -6744,7 +6941,7 @@ static __init int hardware_setup(void) { - int r = -ENOMEM, i, msr; + int r = -ENOMEM, i; rdmsrl_safe(MSR_EFER, &host_efer); @@ -6764,9 +6961,6 @@ memset(vmx_io_bitmap_b, 0xff, PAGE_SIZE); - memset(vmx_msr_bitmap_legacy, 0xff, PAGE_SIZE); - memset(vmx_msr_bitmap_longmode, 0xff, PAGE_SIZE); - if (setup_vmcs_config(&vmcs_config) < 0) { r = -EIO; goto out; @@ -6835,42 +7029,8 @@ kvm_tsc_scaling_ratio_frac_bits = 48; } - vmx_disable_intercept_for_msr(MSR_FS_BASE, false); - vmx_disable_intercept_for_msr(MSR_GS_BASE, false); - vmx_disable_intercept_for_msr(MSR_KERNEL_GS_BASE, true); - vmx_disable_intercept_for_msr(MSR_IA32_SYSENTER_CS, false); - vmx_disable_intercept_for_msr(MSR_IA32_SYSENTER_ESP, false); - vmx_disable_intercept_for_msr(MSR_IA32_SYSENTER_EIP, false); - - memcpy(vmx_msr_bitmap_legacy_x2apic_apicv, - vmx_msr_bitmap_legacy, PAGE_SIZE); - memcpy(vmx_msr_bitmap_longmode_x2apic_apicv, - vmx_msr_bitmap_longmode, PAGE_SIZE); - memcpy(vmx_msr_bitmap_legacy_x2apic, - vmx_msr_bitmap_legacy, PAGE_SIZE); - memcpy(vmx_msr_bitmap_longmode_x2apic, - vmx_msr_bitmap_longmode, PAGE_SIZE); - set_bit(0, vmx_vpid_bitmap); /* 0 is reserved for host */ - for (msr = 0x800; msr <= 0x8ff; msr++) { - if (msr == 0x839 /* TMCCT */) - continue; - vmx_disable_intercept_msr_x2apic(msr, MSR_TYPE_R, true); - } - - /* - * TPR reads and writes can be virtualized even if virtual interrupt - * delivery is not in use. - */ - vmx_disable_intercept_msr_x2apic(0x808, MSR_TYPE_W, true); - vmx_disable_intercept_msr_x2apic(0x808, MSR_TYPE_R | MSR_TYPE_W, false); - - /* EOI */ - vmx_disable_intercept_msr_x2apic(0x80b, MSR_TYPE_W, true); - /* SELF-IPI */ - vmx_disable_intercept_msr_x2apic(0x83f, MSR_TYPE_W, true); - if (enable_ept) vmx_enable_tdp(); else @@ -6974,94 +7134,6 @@ } /* - * To run an L2 guest, we need a vmcs02 based on the L1-specified vmcs12. - * We could reuse a single VMCS for all the L2 guests, but we also want the - * option to allocate a separate vmcs02 for each separate loaded vmcs12 - this - * allows keeping them loaded on the processor, and in the future will allow - * optimizations where prepare_vmcs02 doesn't need to set all the fields on - * every entry if they never change. - * So we keep, in vmx->nested.vmcs02_pool, a cache of size VMCS02_POOL_SIZE - * (>=0) with a vmcs02 for each recently loaded vmcs12s, most recent first. - * - * The following functions allocate and free a vmcs02 in this pool. - */ - -/* Get a VMCS from the pool to use as vmcs02 for the current vmcs12. */ -static struct loaded_vmcs *nested_get_current_vmcs02(struct vcpu_vmx *vmx) -{ - struct vmcs02_list *item; - list_for_each_entry(item, &vmx->nested.vmcs02_pool, list) - if (item->vmptr == vmx->nested.current_vmptr) { - list_move(&item->list, &vmx->nested.vmcs02_pool); - return &item->vmcs02; - } - - if (vmx->nested.vmcs02_num >= max(VMCS02_POOL_SIZE, 1)) { - /* Recycle the least recently used VMCS. */ - item = list_last_entry(&vmx->nested.vmcs02_pool, - struct vmcs02_list, list); - item->vmptr = vmx->nested.current_vmptr; - list_move(&item->list, &vmx->nested.vmcs02_pool); - return &item->vmcs02; - } - - /* Create a new VMCS */ - item = kzalloc(sizeof(struct vmcs02_list), GFP_KERNEL); - if (!item) - return NULL; - item->vmcs02.vmcs = alloc_vmcs(); - item->vmcs02.shadow_vmcs = NULL; - if (!item->vmcs02.vmcs) { - kfree(item); - return NULL; - } - loaded_vmcs_init(&item->vmcs02); - item->vmptr = vmx->nested.current_vmptr; - list_add(&(item->list), &(vmx->nested.vmcs02_pool)); - vmx->nested.vmcs02_num++; - return &item->vmcs02; -} - -/* Free and remove from pool a vmcs02 saved for a vmcs12 (if there is one) */ -static void nested_free_vmcs02(struct vcpu_vmx *vmx, gpa_t vmptr) -{ - struct vmcs02_list *item; - list_for_each_entry(item, &vmx->nested.vmcs02_pool, list) - if (item->vmptr == vmptr) { - free_loaded_vmcs(&item->vmcs02); - list_del(&item->list); - kfree(item); - vmx->nested.vmcs02_num--; - return; - } -} - -/* - * Free all VMCSs saved for this vcpu, except the one pointed by - * vmx->loaded_vmcs. We must be running L1, so vmx->loaded_vmcs - * must be &vmx->vmcs01. - */ -static void nested_free_all_saved_vmcss(struct vcpu_vmx *vmx) -{ - struct vmcs02_list *item, *n; - - WARN_ON(vmx->loaded_vmcs != &vmx->vmcs01); - list_for_each_entry_safe(item, n, &vmx->nested.vmcs02_pool, list) { - /* - * Something will leak if the above WARN triggers. Better than - * a use-after-free. - */ - if (vmx->loaded_vmcs == &item->vmcs02) - continue; - - free_loaded_vmcs(&item->vmcs02); - list_del(&item->list); - kfree(item); - vmx->nested.vmcs02_num--; - } -} - -/* * The following 3 functions, nested_vmx_succeed()/failValid()/failInvalid(), * set the success or error code of an emulated VMX instruction, as specified * by Vol 2B, VMX Instruction Reference, "Conventions". @@ -7241,13 +7313,11 @@ { struct vcpu_vmx *vmx = to_vmx(vcpu); struct vmcs *shadow_vmcs; + int r; - if (cpu_has_vmx_msr_bitmap()) { - vmx->nested.msr_bitmap = - (unsigned long *)__get_free_page(GFP_KERNEL); - if (!vmx->nested.msr_bitmap) - goto out_msr_bitmap; - } + r = alloc_loaded_vmcs(&vmx->nested.vmcs02); + if (r < 0) + goto out_vmcs02; vmx->nested.cached_vmcs12 = kmalloc(VMCS12_SIZE, GFP_KERNEL); if (!vmx->nested.cached_vmcs12) @@ -7264,9 +7334,6 @@ vmx->vmcs01.shadow_vmcs = shadow_vmcs; } - INIT_LIST_HEAD(&(vmx->nested.vmcs02_pool)); - vmx->nested.vmcs02_num = 0; - hrtimer_init(&vmx->nested.preemption_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED); vmx->nested.preemption_timer.function = vmx_preemption_timer_fn; @@ -7278,9 +7345,9 @@ kfree(vmx->nested.cached_vmcs12); out_cached_vmcs12: - free_page((unsigned long)vmx->nested.msr_bitmap); + free_loaded_vmcs(&vmx->nested.vmcs02); -out_msr_bitmap: +out_vmcs02: return -ENOMEM; } @@ -7423,10 +7490,6 @@ free_vpid(vmx->nested.vpid02); vmx->nested.posted_intr_nv = -1; vmx->nested.current_vmptr = -1ull; - if (vmx->nested.msr_bitmap) { - free_page((unsigned long)vmx->nested.msr_bitmap); - vmx->nested.msr_bitmap = NULL; - } if (enable_shadow_vmcs) { vmx_disable_shadow_vmcs(vmx); vmcs_clear(vmx->vmcs01.shadow_vmcs); @@ -7434,7 +7497,7 @@ vmx->vmcs01.shadow_vmcs = NULL; } kfree(vmx->nested.cached_vmcs12); - /* Unpin physical memory we referred to in current vmcs02 */ + /* Unpin physical memory we referred to in the vmcs02 */ if (vmx->nested.apic_access_page) { kvm_release_page_dirty(vmx->nested.apic_access_page); vmx->nested.apic_access_page = NULL; @@ -7450,7 +7513,7 @@ vmx->nested.pi_desc = NULL; } - nested_free_all_saved_vmcss(vmx); + free_loaded_vmcs(&vmx->nested.vmcs02); } /* Emulate the VMXOFF instruction */ @@ -7493,8 +7556,6 @@ vmptr + offsetof(struct vmcs12, launch_state), &zero, sizeof(zero)); - nested_free_vmcs02(vmx, vmptr); - nested_vmx_succeed(vcpu); return kvm_skip_emulated_instruction(vcpu); } @@ -8406,10 +8467,11 @@ /* * The host physical addresses of some pages of guest memory - * are loaded into VMCS02 (e.g. L1's Virtual APIC Page). The CPU - * may write to these pages via their host physical address while - * L2 is running, bypassing any address-translation-based dirty - * tracking (e.g. EPT write protection). + * are loaded into the vmcs02 (e.g. vmcs12's Virtual APIC + * Page). The CPU may write to these pages via their host + * physical address while L2 is running, bypassing any + * address-translation-based dirty tracking (e.g. EPT write + * protection). * * Mark them dirty on every exit from L2 to prevent them from * getting out of sync with dirty tracking. @@ -8943,7 +9005,7 @@ } vmcs_write32(SECONDARY_VM_EXEC_CONTROL, sec_exec_control); - vmx_set_msr_bitmap(vcpu); + vmx_update_msr_bitmap(vcpu); } static void vmx_set_apic_access_page_addr(struct kvm_vcpu *vcpu, hpa_t hpa) @@ -9129,14 +9191,14 @@ #endif "pushf\n\t" __ASM_SIZE(push) " $%c[cs]\n\t" - "call *%[entry]\n\t" + CALL_NOSPEC : #ifdef CONFIG_X86_64 [sp]"=&r"(tmp), #endif ASM_CALL_CONSTRAINT : - [entry]"r"(entry), + THUNK_TARGET(entry), [ss]"i"(__KERNEL_DS), [cs]"i"(__KERNEL_CS) ); @@ -9373,6 +9435,15 @@ vmx_arm_hv_timer(vcpu); + /* + * If this vCPU has touched SPEC_CTRL, restore the guest's value if + * it's non-zero. Since vmentry is serialising on affected CPUs, there + * is no need to worry about the conditional branch over the wrmsr + * being speculatively taken. + */ + if (vmx->spec_ctrl) + wrmsrl(MSR_IA32_SPEC_CTRL, vmx->spec_ctrl); + vmx->__launched = vmx->loaded_vmcs->launched; asm( /* Store host registers */ @@ -9491,6 +9562,27 @@ #endif ); + /* + * We do not use IBRS in the kernel. If this vCPU has used the + * SPEC_CTRL MSR it may have left it on; save the value and + * turn it off. This is much more efficient than blindly adding + * it to the atomic save/restore list. Especially as the former + * (Saving guest MSRs on vmexit) doesn't even exist in KVM. + * + * For non-nested case: + * If the L01 MSR bitmap does not intercept the MSR, then we need to + * save it. + * + * For nested case: + * If the L02 MSR bitmap does not intercept the MSR, then we need to + * save it. + */ + if (!msr_write_intercepted(vcpu, MSR_IA32_SPEC_CTRL)) + rdmsrl(MSR_IA32_SPEC_CTRL, vmx->spec_ctrl); + + if (vmx->spec_ctrl) + wrmsrl(MSR_IA32_SPEC_CTRL, 0); + /* Eliminate branch target predictions from guest mode */ vmexit_fill_RSB(); @@ -9604,6 +9696,7 @@ { int err; struct vcpu_vmx *vmx = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL); + unsigned long *msr_bitmap; int cpu; if (!vmx) @@ -9636,13 +9729,20 @@ if (!vmx->guest_msrs) goto free_pml; - vmx->loaded_vmcs = &vmx->vmcs01; - vmx->loaded_vmcs->vmcs = alloc_vmcs(); - vmx->loaded_vmcs->shadow_vmcs = NULL; - if (!vmx->loaded_vmcs->vmcs) + err = alloc_loaded_vmcs(&vmx->vmcs01); + if (err < 0) goto free_msrs; - loaded_vmcs_init(vmx->loaded_vmcs); + msr_bitmap = vmx->vmcs01.msr_bitmap; + vmx_disable_intercept_for_msr(msr_bitmap, MSR_FS_BASE, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_GS_BASE, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_KERNEL_GS_BASE, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_CS, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_ESP, MSR_TYPE_RW); + vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_EIP, MSR_TYPE_RW); + vmx->msr_bitmap_mode = 0; + + vmx->loaded_vmcs = &vmx->vmcs01; cpu = get_cpu(); vmx_vcpu_load(&vmx->vcpu, cpu); vmx->vcpu.cpu = cpu; @@ -10105,10 +10205,25 @@ int msr; struct page *page; unsigned long *msr_bitmap_l1; - unsigned long *msr_bitmap_l0 = to_vmx(vcpu)->nested.msr_bitmap; + unsigned long *msr_bitmap_l0 = to_vmx(vcpu)->nested.vmcs02.msr_bitmap; + /* + * pred_cmd & spec_ctrl are trying to verify two things: + * + * 1. L0 gave a permission to L1 to actually passthrough the MSR. This + * ensures that we do not accidentally generate an L02 MSR bitmap + * from the L12 MSR bitmap that is too permissive. + * 2. That L1 or L2s have actually used the MSR. This avoids + * unnecessarily merging of the bitmap if the MSR is unused. This + * works properly because we only update the L01 MSR bitmap lazily. + * So even if L0 should pass L1 these MSRs, the L01 bitmap is only + * updated to reflect this when L1 (or its L2s) actually write to + * the MSR. + */ + bool pred_cmd = msr_write_intercepted_l01(vcpu, MSR_IA32_PRED_CMD); + bool spec_ctrl = msr_write_intercepted_l01(vcpu, MSR_IA32_SPEC_CTRL); - /* This shortcut is ok because we support only x2APIC MSRs so far. */ - if (!nested_cpu_has_virt_x2apic_mode(vmcs12)) + if (!nested_cpu_has_virt_x2apic_mode(vmcs12) && + !pred_cmd && !spec_ctrl) return false; page = kvm_vcpu_gpa_to_page(vcpu, vmcs12->msr_bitmap); @@ -10141,6 +10256,19 @@ MSR_TYPE_W); } } + + if (spec_ctrl) + nested_vmx_disable_intercept_for_msr( + msr_bitmap_l1, msr_bitmap_l0, + MSR_IA32_SPEC_CTRL, + MSR_TYPE_R | MSR_TYPE_W); + + if (pred_cmd) + nested_vmx_disable_intercept_for_msr( + msr_bitmap_l1, msr_bitmap_l0, + MSR_IA32_PRED_CMD, + MSR_TYPE_W); + kunmap(page); kvm_release_page_clean(page); @@ -10682,6 +10810,9 @@ if (kvm_has_tsc_control) decache_tsc_multiplier(vmx); + if (cpu_has_vmx_msr_bitmap()) + vmcs_write64(MSR_BITMAP, __pa(vmx->nested.vmcs02.msr_bitmap)); + if (enable_vpid) { /* * There is no direct mapping between vpid02 and vpid12, the @@ -10903,20 +11034,15 @@ { struct vcpu_vmx *vmx = to_vmx(vcpu); struct vmcs12 *vmcs12 = get_vmcs12(vcpu); - struct loaded_vmcs *vmcs02; u32 msr_entry_idx; u32 exit_qual; - vmcs02 = nested_get_current_vmcs02(vmx); - if (!vmcs02) - return -ENOMEM; - enter_guest_mode(vcpu); if (!(vmcs12->vm_entry_controls & VM_ENTRY_LOAD_DEBUG_CONTROLS)) vmx->nested.vmcs01_debugctl = vmcs_read64(GUEST_IA32_DEBUGCTL); - vmx_switch_vmcs(vcpu, vmcs02); + vmx_switch_vmcs(vcpu, &vmx->nested.vmcs02); vmx_segment_cache_clear(vmx); if (prepare_vmcs02(vcpu, vmcs12, from_vmentry, &exit_qual)) { @@ -11485,7 +11611,7 @@ vmcs_write64(GUEST_IA32_DEBUGCTL, 0); if (cpu_has_vmx_msr_bitmap()) - vmx_set_msr_bitmap(vcpu); + vmx_update_msr_bitmap(vcpu); if (nested_vmx_load_msr(vcpu, vmcs12->vm_exit_msr_load_addr, vmcs12->vm_exit_msr_load_count)) @@ -11534,10 +11660,6 @@ vm_exit_controls_reset_shadow(vmx); vmx_segment_cache_clear(vmx); - /* if no vmcs02 cache requested, remove the one we used */ - if (VMCS02_POOL_SIZE == 0) - nested_free_vmcs02(vmx, vmx->nested.current_vmptr); - /* Update any VMCS fields that might have changed while L2 ran */ vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.nr); vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.nr); --- linux-aws-4.15.0.orig/arch/x86/kvm/x86.c +++ linux-aws-4.15.0/arch/x86/kvm/x86.c @@ -1009,6 +1009,7 @@ #endif MSR_IA32_TSC, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA, MSR_IA32_FEATURE_CONTROL, MSR_IA32_BNDCFGS, MSR_TSC_AUX, + MSR_IA32_SPEC_CTRL, MSR_IA32_ARCH_CAPABILITIES }; static unsigned num_msrs_to_save; @@ -6141,7 +6142,7 @@ goto out; } if (ops->disabled_by_bios()) { - printk(KERN_ERR "kvm: disabled by bios\n"); + printk(KERN_WARNING "kvm: disabled by bios\n"); r = -EOPNOTSUPP; goto out; } --- linux-aws-4.15.0.orig/arch/x86/lib/Makefile +++ linux-aws-4.15.0/arch/x86/lib/Makefile @@ -27,6 +27,7 @@ lib-$(CONFIG_INSTRUCTION_DECODER) += insn.o inat.o insn-eval.o lib-$(CONFIG_RANDOMIZE_BASE) += kaslr.o lib-$(CONFIG_RETPOLINE) += retpoline.o +OBJECT_FILES_NON_STANDARD_retpoline.o :=y obj-y += msr.o msr-reg.o msr-reg-export.o hweight.o --- linux-aws-4.15.0.orig/arch/x86/lib/getuser.S +++ linux-aws-4.15.0/arch/x86/lib/getuser.S @@ -40,6 +40,8 @@ mov PER_CPU_VAR(current_task), %_ASM_DX cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX jae bad_get_user + sbb %_ASM_DX, %_ASM_DX /* array_index_mask_nospec() */ + and %_ASM_DX, %_ASM_AX ASM_STAC 1: movzbl (%_ASM_AX),%edx xor %eax,%eax @@ -54,6 +56,8 @@ mov PER_CPU_VAR(current_task), %_ASM_DX cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX jae bad_get_user + sbb %_ASM_DX, %_ASM_DX /* array_index_mask_nospec() */ + and %_ASM_DX, %_ASM_AX ASM_STAC 2: movzwl -1(%_ASM_AX),%edx xor %eax,%eax @@ -68,6 +72,8 @@ mov PER_CPU_VAR(current_task), %_ASM_DX cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX jae bad_get_user + sbb %_ASM_DX, %_ASM_DX /* array_index_mask_nospec() */ + and %_ASM_DX, %_ASM_AX ASM_STAC 3: movl -3(%_ASM_AX),%edx xor %eax,%eax @@ -83,6 +89,8 @@ mov PER_CPU_VAR(current_task), %_ASM_DX cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX jae bad_get_user + sbb %_ASM_DX, %_ASM_DX /* array_index_mask_nospec() */ + and %_ASM_DX, %_ASM_AX ASM_STAC 4: movq -7(%_ASM_AX),%rdx xor %eax,%eax @@ -94,6 +102,8 @@ mov PER_CPU_VAR(current_task), %_ASM_DX cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX jae bad_get_user_8 + sbb %_ASM_DX, %_ASM_DX /* array_index_mask_nospec() */ + and %_ASM_DX, %_ASM_AX ASM_STAC 4: movl -7(%_ASM_AX),%edx 5: movl -3(%_ASM_AX),%ecx --- linux-aws-4.15.0.orig/arch/x86/lib/retpoline.S +++ linux-aws-4.15.0/arch/x86/lib/retpoline.S @@ -7,6 +7,7 @@ #include #include #include +#include .macro THUNK reg .section .text.__x86.indirect_thunk @@ -46,3 +47,58 @@ GENERATE_THUNK(r14) GENERATE_THUNK(r15) #endif + +/* + * Fill the CPU return stack buffer. + * + * Each entry in the RSB, if used for a speculative 'ret', contains an + * infinite 'pause; lfence; jmp' loop to capture speculative execution. + * + * This is required in various cases for retpoline and IBRS-based + * mitigations for the Spectre variant 2 vulnerability. Sometimes to + * eliminate potentially bogus entries from the RSB, and sometimes + * purely to ensure that it doesn't get empty, which on some CPUs would + * allow predictions from other (unwanted!) sources to be used. + * + * Google experimented with loop-unrolling and this turned out to be + * the optimal version - two calls, each with their own speculation + * trap should their return address end up getting used, in a loop. + */ +.macro STUFF_RSB nr:req sp:req + mov $(\nr / 2), %_ASM_BX + .align 16 +771: + call 772f +773: /* speculation trap */ + pause + lfence + jmp 773b + .align 16 +772: + call 774f +775: /* speculation trap */ + pause + lfence + jmp 775b + .align 16 +774: + dec %_ASM_BX + jnz 771b + add $((BITS_PER_LONG/8) * \nr), \sp +.endm + +#define RSB_FILL_LOOPS 16 /* To avoid underflow */ + +ENTRY(__fill_rsb) + STUFF_RSB RSB_FILL_LOOPS, %_ASM_SP + ret +END(__fill_rsb) +EXPORT_SYMBOL_GPL(__fill_rsb) + +#define RSB_CLEAR_LOOPS 32 /* To forcibly overwrite all entries */ + +ENTRY(__clear_rsb) + STUFF_RSB RSB_CLEAR_LOOPS, %_ASM_SP + ret +END(__clear_rsb) +EXPORT_SYMBOL_GPL(__clear_rsb) --- linux-aws-4.15.0.orig/arch/x86/lib/usercopy_32.c +++ linux-aws-4.15.0/arch/x86/lib/usercopy_32.c @@ -331,12 +331,12 @@ unsigned long __copy_user_ll(void *to, const void *from, unsigned long n) { - stac(); + __uaccess_begin_nospec(); if (movsl_is_ok(to, from, n)) __copy_user(to, from, n); else n = __copy_user_intel(to, from, n); - clac(); + __uaccess_end(); return n; } EXPORT_SYMBOL(__copy_user_ll); @@ -344,7 +344,7 @@ unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *from, unsigned long n) { - stac(); + __uaccess_begin_nospec(); #ifdef CONFIG_X86_INTEL_USERCOPY if (n > 64 && static_cpu_has(X86_FEATURE_XMM2)) n = __copy_user_intel_nocache(to, from, n); @@ -353,7 +353,7 @@ #else __copy_user(to, from, n); #endif - clac(); + __uaccess_end(); return n; } EXPORT_SYMBOL(__copy_from_user_ll_nocache_nozero); --- linux-aws-4.15.0.orig/arch/x86/mm/init_32.c +++ linux-aws-4.15.0/arch/x86/mm/init_32.c @@ -758,6 +758,9 @@ * important here. */ set_highmem_pages_init(); +#ifdef CONFIG_HIGHMEM + set_default_mem_hotplug_zone(ZONE_HIGHMEM); +#endif /* this will put all low memory onto the freelists */ free_all_bootmem(); --- linux-aws-4.15.0.orig/arch/x86/mm/testmmiotrace.c +++ linux-aws-4.15.0/arch/x86/mm/testmmiotrace.c @@ -115,6 +115,9 @@ { unsigned long size = (read_far) ? (8 << 20) : (16 << 10); + if (kernel_is_locked_down("MMIO trace testing")) + return -EPERM; + if (mmio_address == 0) { pr_err("you have to use the module argument mmio_address.\n"); pr_err("DO NOT LOAD THIS MODULE UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!\n"); --- linux-aws-4.15.0.orig/arch/x86/mm/tlb.c +++ linux-aws-4.15.0/arch/x86/mm/tlb.c @@ -6,13 +6,14 @@ #include #include #include +#include #include #include +#include #include #include #include -#include /* * TLB flushing, formerly SMP-only @@ -247,6 +248,27 @@ } else { u16 new_asid; bool need_flush; + u64 last_ctx_id = this_cpu_read(cpu_tlbstate.last_ctx_id); + + /* + * Avoid user/user BTB poisoning by flushing the branch + * predictor when switching between processes. This stops + * one process from doing Spectre-v2 attacks on another. + * + * As an optimization, flush indirect branches only when + * switching into processes that disable dumping. This + * protects high value processes like gpg, without having + * too high performance overhead. IBPB is *expensive*! + * + * This will not flush branches when switching into kernel + * threads. It will also not flush if we switch to idle + * thread and back to the same process. It will flush if we + * switch to a different non-dumpable process. + */ + if (tsk && tsk->mm && + tsk->mm->context.ctx_id != last_ctx_id && + get_dumpable(tsk->mm) != SUID_DUMP_USER) + indirect_branch_prediction_barrier(); if (IS_ENABLED(CONFIG_VMAP_STACK)) { /* @@ -292,6 +314,14 @@ trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, 0); } + /* + * Record last user mm's context id, so we can avoid + * flushing branch buffer with IBPB if we switch back + * to the same user. + */ + if (next != &init_mm) + this_cpu_write(cpu_tlbstate.last_ctx_id, next->context.ctx_id); + this_cpu_write(cpu_tlbstate.loaded_mm, next); this_cpu_write(cpu_tlbstate.loaded_mm_asid, new_asid); } @@ -369,6 +399,7 @@ write_cr3(build_cr3(mm->pgd, 0)); /* Reinitialize tlbstate. */ + this_cpu_write(cpu_tlbstate.last_ctx_id, mm->context.ctx_id); this_cpu_write(cpu_tlbstate.loaded_mm_asid, 0); this_cpu_write(cpu_tlbstate.next_asid, 1); this_cpu_write(cpu_tlbstate.ctxs[0].ctx_id, mm->context.ctx_id); --- linux-aws-4.15.0.orig/block/scsi_ioctl.c +++ linux-aws-4.15.0/block/scsi_ioctl.c @@ -29,6 +29,9 @@ #include #include #include +#include +#include +#include #include #include @@ -706,8 +709,17 @@ case SG_GET_RESERVED_SIZE: case SG_SET_RESERVED_SIZE: case SG_EMULATED_HOST: + case BLKFLSBUF: + case BLKROSET: return 0; case CDROM_GET_CAPABILITY: + case CDROM_DRIVE_STATUS: + case FDGETPRM: + case RAID_VERSION: + case MTIOCGET: +#ifdef CONFIG_COMPAT + case 0x801c6d02: /* MTIOCGET32 */ +#endif /* Keep this until we remove the printk below. udev sends it * and we do not want to spam dmesg about it. CD-ROMs do * not have partitions, so we get here only for disks. --- linux-aws-4.15.0.orig/certs/Kconfig +++ linux-aws-4.15.0/certs/Kconfig @@ -83,4 +83,28 @@ wrapper to incorporate the list into the kernel. Each should be a string of hex digits. +config EFI_SIGNATURE_LIST_PARSER + bool "EFI signature list parser" + depends on EFI + select X509_CERTIFICATE_PARSER + help + This option provides support for parsing EFI signature lists for + X.509 certificates and turning them into keys. + +config LOAD_UEFI_KEYS + bool "Load certs and blacklist from UEFI db for module checking" + depends on SYSTEM_BLACKLIST_KEYRING + depends on SECONDARY_TRUSTED_KEYRING + depends on EFI + depends on EFI_SIGNATURE_LIST_PARSER + help + If the kernel is booted in secure boot mode, this option will cause + the kernel to load the certificates from the UEFI db and MokListRT + into the secondary trusted keyring. It will also load any X.509 + SHA256 hashes in the dbx list into the blacklist. + + The effect of this is that, if the kernel is booted in secure boot + mode, modules signed with UEFI-stored keys will be permitted to be + loaded and keys that match the blacklist will be rejected. + endmenu --- linux-aws-4.15.0.orig/certs/Makefile +++ linux-aws-4.15.0/certs/Makefile @@ -10,6 +10,11 @@ else obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist_nohashes.o endif +obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o + +obj-$(CONFIG_LOAD_UEFI_KEYS) += load_uefi.o +$(obj)/load_uefi.o: KBUILD_CFLAGS += -fshort-wchar + ifeq ($(CONFIG_SYSTEM_TRUSTED_KEYRING),y) --- linux-aws-4.15.0.orig/certs/efi_parser.c +++ linux-aws-4.15.0/certs/efi_parser.c @@ -0,0 +1,112 @@ +/* EFI signature/key/certificate list parser + * + * Copyright (C) 2012, 2016 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +#define pr_fmt(fmt) "EFI: "fmt +#include +#include +#include +#include + +/** + * parse_efi_signature_list - Parse an EFI signature list for certificates + * @source: The source of the key + * @data: The data blob to parse + * @size: The size of the data blob + * @get_handler_for_guid: Get the handler func for the sig type (or NULL) + * + * Parse an EFI signature list looking for elements of interest. A list is + * made up of a series of sublists, where all the elements in a sublist are of + * the same type, but sublists can be of different types. + * + * For each sublist encountered, the @get_handler_for_guid function is called + * with the type specifier GUID and returns either a pointer to a function to + * handle elements of that type or NULL if the type is not of interest. + * + * If the sublist is of interest, each element is passed to the handler + * function in turn. + * + * Error EBADMSG is returned if the list doesn't parse correctly and 0 is + * returned if the list was parsed correctly. No error can be returned from + * the @get_handler_for_guid function or the element handler function it + * returns. + */ +int __init parse_efi_signature_list( + const char *source, + const void *data, size_t size, + efi_element_handler_t (*get_handler_for_guid)(const efi_guid_t *)) +{ + efi_element_handler_t handler; + unsigned offs = 0; + + pr_devel("-->%s(,%zu)\n", __func__, size); + + while (size > 0) { + const efi_signature_data_t *elem; + efi_signature_list_t list; + size_t lsize, esize, hsize, elsize; + + if (size < sizeof(list)) + return -EBADMSG; + + memcpy(&list, data, sizeof(list)); + pr_devel("LIST[%04x] guid=%pUl ls=%x hs=%x ss=%x\n", + offs, + list.signature_type.b, list.signature_list_size, + list.signature_header_size, list.signature_size); + + lsize = list.signature_list_size; + hsize = list.signature_header_size; + esize = list.signature_size; + elsize = lsize - sizeof(list) - hsize; + + if (lsize > size) { + pr_devel("<--%s() = -EBADMSG [overrun @%x]\n", + __func__, offs); + return -EBADMSG; + } + + if (lsize < sizeof(list) || + lsize - sizeof(list) < hsize || + esize < sizeof(*elem) || + elsize < esize || + elsize % esize != 0) { + pr_devel("- bad size combo @%x\n", offs); + return -EBADMSG; + } + + handler = get_handler_for_guid(&list.signature_type); + if (!handler) { + data += lsize; + size -= lsize; + offs += lsize; + continue; + } + + data += sizeof(list) + hsize; + size -= sizeof(list) + hsize; + offs += sizeof(list) + hsize; + + for (; elsize > 0; elsize -= esize) { + elem = data; + + pr_devel("ELEM[%04x]\n", offs); + handler(source, + &elem->signature_data, + esize - sizeof(*elem)); + + data += esize; + size -= esize; + offs += esize; + } + } + + return 0; +} --- linux-aws-4.15.0.orig/certs/internal.h +++ linux-aws-4.15.0/certs/internal.h @@ -0,0 +1,18 @@ +/* Internal definitions + * + * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +/* + * system_keyring.c + */ +#ifdef CONFIG_SECONDARY_TRUSTED_KEYRING +extern void __init add_trusted_secondary_key(const char *source, + const void *data, size_t len); +#endif --- linux-aws-4.15.0.orig/certs/load_uefi.c +++ linux-aws-4.15.0/certs/load_uefi.c @@ -0,0 +1,192 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "internal.h" + +static __initdata efi_guid_t efi_cert_x509_guid = EFI_CERT_X509_GUID; +static __initdata efi_guid_t efi_cert_x509_sha256_guid = EFI_CERT_X509_SHA256_GUID; +static __initdata efi_guid_t efi_cert_sha256_guid = EFI_CERT_SHA256_GUID; + +/* + * Look to see if a UEFI variable called MokIgnoreDB exists and return true if + * it does. + * + * This UEFI variable is set by the shim if a user tells the shim to not use + * the certs/hashes in the UEFI db variable for verification purposes. If it + * is set, we should ignore the db variable also and the true return indicates + * this. + */ +static __init bool uefi_check_ignore_db(void) +{ + efi_status_t status; + unsigned int db = 0; + unsigned long size = sizeof(db); + efi_guid_t guid = EFI_SHIM_LOCK_GUID; + + status = efi.get_variable(L"MokIgnoreDB", &guid, NULL, &size, &db); + return status == EFI_SUCCESS; +} + +/* + * Get a certificate list blob from the named EFI variable. + */ +static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, + unsigned long *size) +{ + efi_status_t status; + unsigned long lsize = 4; + unsigned long tmpdb[4]; + void *db; + + status = efi.get_variable(name, guid, NULL, &lsize, &tmpdb); + if (status != EFI_BUFFER_TOO_SMALL) { + pr_err("Couldn't get size: 0x%lx\n", status); + return NULL; + } + + db = kmalloc(lsize, GFP_KERNEL); + if (!db) { + pr_err("Couldn't allocate memory for uefi cert list\n"); + return NULL; + } + + status = efi.get_variable(name, guid, NULL, &lsize, db); + if (status != EFI_SUCCESS) { + kfree(db); + pr_err("Error reading db var: 0x%lx\n", status); + return NULL; + } + + *size = lsize; + return db; +} + +/* + * Blacklist an X509 TBS hash. + */ +static __init void uefi_blacklist_x509_tbs(const char *source, + const void *data, size_t len) +{ + char *hash, *p; + + hash = kmalloc(4 + len * 2 + 1, GFP_KERNEL); + if (!hash) + return; + p = memcpy(hash, "tbs:", 4); + p += 4; + bin2hex(p, data, len); + p += len * 2; + *p = 0; + + mark_hash_blacklisted(hash); + kfree(hash); +} + +/* + * Blacklist the hash of an executable. + */ +static __init void uefi_blacklist_binary(const char *source, + const void *data, size_t len) +{ + char *hash, *p; + + hash = kmalloc(4 + len * 2 + 1, GFP_KERNEL); + if (!hash) + return; + p = memcpy(hash, "bin:", 4); + p += 4; + bin2hex(p, data, len); + p += len * 2; + *p = 0; + + mark_hash_blacklisted(hash); + kfree(hash); +} + +/* + * Return the appropriate handler for particular signature list types found in + * the UEFI db and MokListRT tables. + */ +static __init efi_element_handler_t get_handler_for_db(const efi_guid_t *sig_type) +{ + if (efi_guidcmp(*sig_type, efi_cert_x509_guid) == 0) + return add_trusted_secondary_key; + return 0; +} + +/* + * Return the appropriate handler for particular signature list types found in + * the UEFI dbx and MokListXRT tables. + */ +static __init efi_element_handler_t get_handler_for_dbx(const efi_guid_t *sig_type) +{ + if (efi_guidcmp(*sig_type, efi_cert_x509_sha256_guid) == 0) + return uefi_blacklist_x509_tbs; + if (efi_guidcmp(*sig_type, efi_cert_sha256_guid) == 0) + return uefi_blacklist_binary; + return 0; +} + +/* + * Load the certs contained in the UEFI databases into the secondary trusted + * keyring and the UEFI blacklisted X.509 cert SHA256 hashes into the blacklist + * keyring. + */ +static int __init load_uefi_certs(void) +{ + efi_guid_t secure_var = EFI_IMAGE_SECURITY_DATABASE_GUID; + efi_guid_t mok_var = EFI_SHIM_LOCK_GUID; + void *db = NULL, *dbx = NULL, *mok = NULL; + unsigned long dbsize = 0, dbxsize = 0, moksize = 0; + int rc = 0; + + if (!efi.get_variable) + return false; + + /* Get db, MokListRT, and dbx. They might not exist, so it isn't + * an error if we can't get them. + */ + if (!uefi_check_ignore_db()) { + db = get_cert_list(L"db", &secure_var, &dbsize); + if (!db) { + pr_err("MODSIGN: Couldn't get UEFI db list\n"); + } else { + rc = parse_efi_signature_list("UEFI:db", + db, dbsize, get_handler_for_db); + if (rc) + pr_err("Couldn't parse db signatures: %d\n", rc); + kfree(db); + } + } + + mok = get_cert_list(L"MokListRT", &mok_var, &moksize); + if (!mok) { + pr_info("MODSIGN: Couldn't get UEFI MokListRT\n"); + } else { + rc = parse_efi_signature_list("UEFI:MokListRT", + mok, moksize, get_handler_for_db); + if (rc) + pr_err("Couldn't parse MokListRT signatures: %d\n", rc); + kfree(mok); + } + + dbx = get_cert_list(L"dbx", &secure_var, &dbxsize); + if (!dbx) { + pr_info("MODSIGN: Couldn't get UEFI dbx list\n"); + } else { + rc = parse_efi_signature_list("UEFI:dbx", + dbx, dbxsize, + get_handler_for_dbx); + if (rc) + pr_err("Couldn't parse dbx signatures: %d\n", rc); + kfree(dbx); + } + + return rc; +} +late_initcall(load_uefi_certs); --- linux-aws-4.15.0.orig/certs/system_keyring.c +++ linux-aws-4.15.0/certs/system_keyring.c @@ -18,6 +18,7 @@ #include #include #include +#include "internal.h" static struct key *builtin_trusted_keys; #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING @@ -171,6 +172,7 @@ if (IS_ERR(key)) { pr_err("Problem loading in-kernel X.509 certificate (%ld)\n", PTR_ERR(key)); + WARN_ON_ONCE(1); } else { pr_notice("Loaded X.509 cert '%s'\n", key_ref_to_ptr(key)->description); @@ -265,3 +267,35 @@ EXPORT_SYMBOL_GPL(verify_pkcs7_signature); #endif /* CONFIG_SYSTEM_DATA_VERIFICATION */ + +#ifdef CONFIG_SECONDARY_TRUSTED_KEYRING +/** + * add_trusted_secondary_key - Add to secondary keyring with no validation + * @source: Source of key + * @data: The blob holding the key + * @len: The length of the data blob + * + * Add a key to the secondary keyring without checking its trust chain. This + * is available only during kernel initialisation. + */ +void __init add_trusted_secondary_key(const char *source, + const void *data, size_t len) +{ + key_ref_t key; + + key = key_create_or_update(make_key_ref(secondary_trusted_keys, 1), + "asymmetric", + NULL, data, len, + (KEY_POS_ALL & ~KEY_POS_SETATTR) | + KEY_USR_VIEW, + KEY_ALLOC_NOT_IN_QUOTA | + KEY_ALLOC_BYPASS_RESTRICTION); + + if (IS_ERR(key)) + pr_err("Problem loading %s X.509 certificate (%ld)\n", + source, PTR_ERR(key)); + else + pr_notice("Loaded %s cert '%s' linked to secondary sys keyring\n", + source, key_ref_to_ptr(key)->description); +} +#endif /* CONFIG_SECONDARY_TRUSTED_KEYRING */ --- linux-aws-4.15.0.orig/crypto/Kconfig +++ linux-aws-4.15.0/crypto/Kconfig @@ -130,7 +130,7 @@ config CRYPTO_ECDH tristate "ECDH algorithm" - select CRYTPO_KPP + select CRYPTO_KPP select CRYPTO_RNG_DEFAULT help Generic implementation of the ECDH algorithm --- linux-aws-4.15.0.orig/crypto/af_alg.c +++ linux-aws-4.15.0/crypto/af_alg.c @@ -150,7 +150,7 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) { - const u32 forbidden = CRYPTO_ALG_INTERNAL; + const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY; struct sock *sk = sock->sk; struct alg_sock *ask = alg_sk(sk); struct sockaddr_alg *sa = (void *)uaddr; @@ -158,6 +158,10 @@ void *private; int err; + /* If caller uses non-allowed flag, return error. */ + if ((sa->salg_feat & ~allowed) || (sa->salg_mask & ~allowed)) + return -EINVAL; + if (sock->state == SS_CONNECTED) return -EINVAL; @@ -176,9 +180,7 @@ if (IS_ERR(type)) return PTR_ERR(type); - private = type->bind(sa->salg_name, - sa->salg_feat & ~forbidden, - sa->salg_mask & ~forbidden); + private = type->bind(sa->salg_name, sa->salg_feat, sa->salg_mask); if (IS_ERR(private)) { module_put(type->owner); return PTR_ERR(private); --- linux-aws-4.15.0.orig/crypto/sha3_generic.c +++ linux-aws-4.15.0/crypto/sha3_generic.c @@ -18,6 +18,7 @@ #include #include #include +#include #define KECCAK_ROUNDS 24 @@ -149,7 +150,7 @@ unsigned int i; for (i = 0; i < sctx->rsizw; i++) - sctx->st[i] ^= ((u64 *) src)[i]; + sctx->st[i] ^= get_unaligned_le64(src + 8 * i); keccakf(sctx->st); done += sctx->rsiz; @@ -174,7 +175,7 @@ sctx->buf[sctx->rsiz - 1] |= 0x80; for (i = 0; i < sctx->rsizw; i++) - sctx->st[i] ^= ((u64 *) sctx->buf)[i]; + sctx->st[i] ^= get_unaligned_le64(sctx->buf + 8 * i); keccakf(sctx->st); --- linux-aws-4.15.0.orig/crypto/tcrypt.c +++ linux-aws-4.15.0/crypto/tcrypt.c @@ -198,11 +198,13 @@ } sg_init_table(sg, np + 1); - np--; + if (rem) + np--; for (k = 0; k < np; k++) sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE); - sg_set_buf(&sg[k + 1], xbuf[k], rem); + if (rem) + sg_set_buf(&sg[k + 1], xbuf[k], rem); } static void test_aead_speed(const char *algo, int enc, unsigned int secs, --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/abiname +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/abiname @@ -0,0 +1 @@ +1000 --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/aws +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/aws @@ -0,0 +1,22708 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/nfit/nfit 0x00000000 to_nfit_uuid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_levels +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_handles_brightness_key_presses +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_register +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_set_dmi_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_unregister +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x00000000 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/firmware/dcdbas 0x00000000 dcdbas_smi_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/amdkfd/amdkfd 0x00000000 kgd2kfd_init +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 __ishtp_cl_driver_register +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_bus_remove_all_clients +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_allocate +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_connect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_disconnect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_driver_unregister +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_flush_queues +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_free +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_io_rb_recycle +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_link +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_send +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_unlink +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_device_init +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_fw_cl_by_uuid +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_get_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_put_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_recv +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_register_event_cb +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_compl_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_resume +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_suspend +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_start +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_bind_pasid +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_free_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_init_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalid_ppr_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalidate_ctx_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_unbind_pasid +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_pci_cfg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_write +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_count +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_link_state +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_map +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_rx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_tx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_get_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_internal_loopback +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_rx_tx_enable +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_set_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_set_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_init_hw +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_setup_link +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_rdma_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_register_driver +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_unregister_driver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_read +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_write +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_static_ops +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_io_bytes_mec +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_destroy +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_init +EXPORT_SYMBOL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_simple_command +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x00000000 sony_pic_camera_command +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 __wmi_driver_register +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 wmi_driver_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_host_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_art +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_trt +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_add +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_remove +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x00000000 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_free +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_new +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_bm_status +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_label +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_pciaddr +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_temperature +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_version +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_register_event_notifier +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_reset +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_otprotect +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_wmode +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_submit_pbio +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_unregister_event_notifier +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuestIDC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertAreQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Add +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2V +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2WeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertShouldPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertFromErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertToErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAllocZ +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleDump +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetFreeSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetHeapSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleInit +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleRelocate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogClearFileDelayFlag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCloneRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDumpPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlush +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushToLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetCustomPrefixCallback +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstanceThread +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteCom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteDebugger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdErr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdOut +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFreeEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemReallocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdFromSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdToSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndexAndId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetMaxCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuOnline +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPresent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuWorkPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAll +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAllIsConcurrentSafe +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnOthers +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPair +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPairIsConcurrentExecSupported +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnSpecific +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpPokeCpu +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerSignalEvent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTProcSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0AssertPanicSystem +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Init +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemAreKrnlAndUsrDifferent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemExecDonate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddress +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddressR3 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocContTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocLowTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPageTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysNCTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjEnterPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjGetPagePhysAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjIsMapping +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjProtect +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0ProcHandleSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Term +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexIsOwned +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResumeDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexTryRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockAcquire +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrConvertHexBytes +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyP +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatNumber +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeSetUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateF +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadFromNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInInterrupt +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInitialized +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsMain +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfAlive +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfKnown +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadNativeSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptDisable +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsEnabled +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPendingTrusty +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptRestore +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSelfName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleep +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleepNoLog +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadYield +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeExplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeImplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeIsLeapYear +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNormalize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNow +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCanDoHighResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerChangeInterval +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerGetSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerReleaseSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerRequestSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStart +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStop +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertExpr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFile +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFunction +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_u32RTAssertLine +EXPORT_SYMBOL vmlinux 0x00000000 IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cachemode2pte_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fentry__ +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_is_locked_down +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __max_logical_packages +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy +EXPORT_SYMBOL vmlinux 0x00000000 __memmove +EXPORT_SYMBOL vmlinux 0x00000000 __memset +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __node_distance +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __preempt_count +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte2cachemode_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r10 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r11 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r12 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r13 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r14 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r15 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r8 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r9 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rax +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbp +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rcx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdi +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rsi +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print_raw +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_wakeup_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_finish_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_initialize_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_raw_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_pxm_to_online_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mark_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mask_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_debugger_thread_id +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0x00000000 acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_terminate_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_trace_point +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unmap_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_status_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_trace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_value_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_complete_ppr +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_device_info +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_clear_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_direct_map +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_enable_v2 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_set_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_enable_device_erratum +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_page +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_tlb +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_get_v2_domain +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_banks +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_counters +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_set_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_supported +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ga_log_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_rlookup_table +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_unregister_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_update_ga +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_v2_supported +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_dma_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_free_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_reserve_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_add +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_del +EXPORT_SYMBOL vmlinux 0x00000000 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x00000000 boot_option_idle_override +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 convert_art_to_tsc +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_enhanced_fast_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_unrolled +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_dr7 +EXPORT_SYMBOL vmlinux 0x00000000 cpu_info +EXPORT_SYMBOL vmlinux 0x00000000 cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlbstate +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tss_rw +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_task +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 device_private_entry_fault +EXPORT_SYMBOL vmlinux 0x00000000 device_private_key +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap_pages +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_clear_fs +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_default +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_ext +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_rdmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_refcount +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_wrmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_pm_trace +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_amd_iommu +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_cpu_entry_area +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_dev_data +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_ibs_caps +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_new +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_put +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_remove +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_register +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_unregister +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_alloc_locked_page +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_fault +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_get_pfns +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_range_done +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_get +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wt +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_available +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_call_pmic_bus_access_notifier_chain +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_modify +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_acquire +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_release +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_read +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_register_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_unregister_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_write +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 legacy_pic +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 migrate_vma +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msrs_alloc +EXPORT_SYMBOL vmlinux 0x00000000 msrs_free +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 native_io_delay +EXPORT_SYMBOL vmlinux 0x00000000 native_load_gs_index +EXPORT_SYMBOL vmlinux 0x00000000 native_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dax_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 numa_node +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_offset_base +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_mem_start +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_base +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 put_zone_device_private_or_public_page +EXPORT_SYMBOL vmlinux 0x00000000 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_irq_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_x +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_trace_device +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sev_active +EXPORT_SYMBOL vmlinux 0x00000000 sfi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 sme_active +EXPORT_SYMBOL vmlinux 0x00000000 sme_me_mask +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_num_siblings +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tboot +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 this_cpu_off +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 topology_phys_to_logical_pkg +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 translation_pre_enabled +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsc_khz +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unpoison_memory +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_probe_defer +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_fini_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_handler_flags +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_optimus_hdmi_audio +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_lock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_set_dynamic_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unlock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_base +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vmemmap_base +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 x86_apple_machine +EXPORT_SYMBOL vmlinux 0x00000000 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_acpiid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0x00000000 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x00000000 x86_hyper_type +EXPORT_SYMBOL vmlinux 0x00000000 x86_match_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_alloc_p2m_entry +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_selfballoon_init +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_cbc_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ctr_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_decrypt_cbc_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 xts_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit_one +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_req_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 __serpent_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_cbc_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ctr_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 xts_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 __twofish_enc_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_cbc_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 xts_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_incomplete_ipi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_unaccelerated_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_fast_mmio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pi_irte_update +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_ple_window +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pml_full +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_write_tsc_offset +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __x86_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 cpuid_query_maxphyaddr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 handle_mmio_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_match_dest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_set_eoi_accelerated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_ppr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_write_nodecode +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_end_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_assigned_device +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_register_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_start_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_unregister_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_default_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_in +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_handle_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_ept_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_intr_is_single_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_expired_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_find_highest_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_hv_timer_in_use +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_read +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_sw_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mce_cap_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_clear_dirty_pt_masked +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_largepage_remove_write_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_leaf_clear_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_set_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_sync_roots +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mpx_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_valid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_no_apic_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_register_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_unregister_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_l1_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_scale_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msi_irq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_skip_emulated_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_add_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_remove_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_tsc_scaling_ratio_frac_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_valid_efer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_is_reset_bsp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_reload_apic_access_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vector_hashing_enabled +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 pdptrs_changed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_fixed_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_gp_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reset_shadow_zero_bits_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_set_memory_region +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 __ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_decrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_exit +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init_common +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_set_key +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nfit_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nvdimm_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_ctl +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_desc_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_shutdown +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_detect_processor +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_freqs +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_frequency +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_add_key_value_param +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_remove +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_section_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_clean_vf_map +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cleanup_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_get +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_in_use +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_put +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_start +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_started +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_stop +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_add_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_in_reset +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_pci_to_accel_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_rm_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_update_class_index +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_sriov +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_vf2pf_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_iov_putmsg +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_flr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_sbr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_send_admin_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_sriov_configure +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 qat_crypto_dev_config +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_do_irq +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_get_status +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x00000000 amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 pp_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/gvt/kvmgt 0x00000000 kvmgt_mpt +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __hv_pkt_iter_next +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_first +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_ringbuffer_get_debuginfo +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_allocate_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_are_subchannels_present +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_connection +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_free_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_get_outgoing_channel +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_hvsock_device_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_proto_version +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_send_tl_connect_request +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_mpb_desc +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_chn_rescind_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_sc_create_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_setevent +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x00000000 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_prepare +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_probe +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_remove +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_resume +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_suspend +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 __mei_cldev_driver_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cancel_work +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_disable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_driver_unregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enabled +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_get_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv_nonblock +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_notif_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_rx_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_send +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_set_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_uuid +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_ver +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_deregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_device_init +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_fw_status2str +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg_resume +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_compl_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_read_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_write_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_reset +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_restart +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_start +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_stop +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_write_is_idle +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_find_cdev_by_id +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_accept +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_bind +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_close +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_connect +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_mark +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_signal +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_wait +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_node_ids +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_listen +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_open +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_pin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_poll +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_put_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_readfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_recv +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register_pinned_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_send +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unpin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vreadfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vwriteto +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_writeto +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_context_get_priv_flags +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle_priv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_destroy_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_send +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_create +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_destroy +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_notify +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_subscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_get_context_id +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_is_context_owner +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_alloc +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequeue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_detach +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enqueue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enquev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_consume_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_produce_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peek +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peekv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_send_datagram +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 mei_phy_ops +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_alloc +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_free +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_probe +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_resume +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_suspend +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-laptop 0x00000000 dell_micmute_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_register +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_unregister +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_call_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_register_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_unregister_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call_filter +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_error +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_find_token +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_register_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_unregister_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_descriptor_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_hotfix +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_interface_version +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_size +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x00000000 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_update +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_write +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_raw_cmd +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_simple_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_s0ix_counter_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_add_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_clear_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_eventconfig +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_evtname +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_pltconfig_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_reset_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_update_events +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/thinkpad_acpi 0x00000000 tpacpi_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 set_required_buffer_size +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_block_query +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_probe +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_remove +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_to_pcmcia_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_disable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_enable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_read_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_register_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_unregister_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_write_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_get_guid +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalempty +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalinsert +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalremove +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_read_trips +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_add +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_remove +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_add_read_only_critical_trip +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_exit +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_init +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_interrupt_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 __tb_ring_enqueue +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_data +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_immediate +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_text +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_create_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_find +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_free_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_get_next +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_remove +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_rx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_tx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_free +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll_complete +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_start +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_stop +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_service_type +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_disable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_enable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_find_by_uuid +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_request +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_response +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_type +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_register +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_unregister +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_remove +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_link +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_ml_capabilities +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_get +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_put +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_int_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_clear_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_set_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_clear +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_reset +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_setup +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_start +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stop_streams +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_assign +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_decouple +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_drsm_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_get_spbmaxfifo +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_release +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_dpibr +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_lpib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_spib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_spbcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_link_free_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_stream_free_all +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_acomp_get_eld +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_display_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_register_notifier +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_set_bclk +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_set_codec_wakeup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_sync_audio_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_port_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8825 0x00000000 nau8825_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt286 0x00000000 rt286_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt298 0x00000000 rt298_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5651 0x00000000 rt5651_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_suspend +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 intel_sst_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 relocate_imr_addr_mrfld +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_alloc_drv_context +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_configure_runtime_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_suspend_late +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_wait_for_ready +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_legacy_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_broadwell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_cherrytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_haswell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_dump +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_rx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_tx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_mailbox_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_register_poll +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_reset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_stall +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_fromio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_toio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_alloc_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_free_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyfrom +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyto +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_get_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_put_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_get_offset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_reload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_unload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_register +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_unregister_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_restore +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_save +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_drop_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_fini +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_reply_find_msg +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nopm +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nowait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_wait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_msg_reply_complete +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_device_set_config +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 is_skl_dsp_running +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 kbl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_clear_module_cnt +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_get_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_put_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_instance_id_map +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_bind_unbind +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_create_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_delete_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_get_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_init_instance +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_load_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_restore_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_save_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_d0ix +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_dx +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_pipeline_state +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_unload_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_put_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_ipc_load_library +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_check_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_codec_list +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_machine +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_name_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_package_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_load +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_bind_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove_all +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clear_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fill_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ibp_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_extlog_mem_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tss_limit_invalid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __unwind_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _copy_from_iter_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_psd_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_target_system_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alternatives_patched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_df_indirect_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nodes_per_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_has_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_misc_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_phys_wc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_wb_cache_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpu_physical_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_erms +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_orig +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_rep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_ctrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_set_perf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_has_xfeatures +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_poll_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_cpu_present_to_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 del_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 e820__mapped_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edid_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 events_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fprestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpstate_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__save +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu_kernel_xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_hwpoison_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_scattered_cpuid_leaf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_xsave_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_hypercall_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_is_hypercall_page_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_vp_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_report_panic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 injectm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pmc_slp_s0_counter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pt_handle_vmx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_bind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_is_pasid_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_unbind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ioremap_uc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remapping_cap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqd_cfg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_disable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_enable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get_or_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_unregister_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_para_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_posted_intr_wakeup_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_direct_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_fixmap_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_touch_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_inject_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_is_memory_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mcsafe_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_mcsafe_unrolled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_add_physaddr_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mxcsr_feature_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 node_to_amd_nb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_setup_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pat_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_set_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_assign_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writethrough +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_rate_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_trace_rtc_abused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptdump_walk_pgd_level_debugfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_get_pvti_cpu0_va +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_decrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_pages_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_personality_ia32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sev_enable_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slow_virt_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_banks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_get_long_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 umc_normaddr_to_sysaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_get_return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_next_frame +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pud +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_family +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_model +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_stepping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_vector_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_high_mono_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_capsule_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_variable_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_reset_system +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_update_capsule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_and_legacy_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_nic_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_in_preemptible_hcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_max_p2m_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_hotplug_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/aws.compiler +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/aws.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/aws.modules +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/aws.modules @@ -0,0 +1,5159 @@ +104-quad-8 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_dw +8250_exar +8250_lpss +8250_men_mcb +8250_mid +8250_moxa +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +BusLogic +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acer-wmi +acerhdf +acp_audio_dma +acpi-als +acpi_configfs +acpi_extlog +acpi_ipmi +acpi_pad +acpi_power_meter +acpi_thermal_rel +acpiphp_ibm +acquirewdt +act200l-sir +act8865-regulator +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7170 +adv7175 +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +advantechwdt +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-x86_64 +aes_ti +aesni-intel +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +aha152x_cs +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +airspy +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-ircc +alienware-wmi +alim1535_wdt +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +ambassador +amc6821 +amd +amd-rng +amd-xgbe +amd5536udc_pci +amd64_edac_mod +amd76xrom +amd8111e +amd_freq_sensitivity +amd_iommu_v2 +amdgpu +amdkfd +amilo-rfkill +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apanel +apds9300 +apds9802als +apds990x +apds9960 +apple-gmux +apple_bl +appledisplay +applesmc +appletalk +appletouch +applicom +aquantia +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcfb +arcmsr +arcnet +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3935 +as5011 +asb100 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +asus-laptop +asus-nb-wmi +asus-wireless +asus-wmi +asus_atk0110 +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlantic +atlas-ph-sensor +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avm_cs +avma1_cs +avmfritz +ax25 +ax88179_178a +axnet_cs +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish-x86_64 +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c2port-duramar2150 +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia-aesni-avx-x86_64 +camellia-aesni-avx2 +camellia-x86_64 +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +capsule-loader +carl9170 +carminefb +cassini +cast5-avx-x86_64 +cast5_generic +cast6-avx-x86_64 +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-x86_64 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipreg +chnl_net +chromeos_laptop +chromeos_pstore +ci_hdrc +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cio-dac +cirrus +cirrusfb +ck804xrom +classmate-laptop +clip +clk-cdce706 +clk-cs2000-cp +clk-palmas +clk-pwm +clk-s2mps11 +clk-si5351 +clk-twl6040 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm36651 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +com20020 +com20020-pci +com20020_cs +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_pcmcia +comedi_test +comedi_usb +comm +compal-laptop +contec_pci_dio +cordic +core +coretemp +cortina +cosm_bus +cosm_client +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpsw_ale +cpu5wdt +cpuid +cr_bllcd +cramfs +crc-itu-t +crc32-pclmul +crc32_generic +crc4 +crc7 +crc8 +crct10dif-pclmul +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_lpcs +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +crvml +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +csiostor +ct82c710 +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_cs +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +dax_pmem +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +dell-laptop +dell-rbtn +dell-smbios +dell-smbios-smm +dell-smbios-wmi +dell-smm-hwmon +dell-smo8800 +dell-wmi +dell-wmi-aio +dell-wmi-descriptor +dell-wmi-led +dell_rbu +denali +denali_pci +des3_ede-x86_64 +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dp83822 +dp83848 +dp83867 +dpt_i2o +dptf_power +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dtl1_cs +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-pci +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +e752x_edac +earth-pt1 +earth-pt3 +eata +ebc-c384_wdt +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_bhf +ec_sys +ecdh_generic +echainiv +echo +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efi-pstore +efi_test +efibc +efs +egalax_ts_serial +ehset +einj +ektf2127 +elan_i2c +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_pcmcia +ems_usb +emu10k1-gp +ena +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +epat +epia +epic100 +eql +esas2r +esb2rom +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +eurotechwdt +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-intel-cht-wc +extcon-intel-int3496 +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +f81534 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fjes +fl512 +fld +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +fmvj18x_cs +fnic +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-mgr +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +geneve +genwqe_card +gf2k +gfs2 +ghash-clmulni-intel +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glue_helper +gluebi +gma500_gfx +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-104-dio-48e +gpio-104-idi-48 +gpio-104-idio-16 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-crystalcove +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-f7188x +gpio-generic +gpio-gpio-mm +gpio-ich +gpio-it87 +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-ml-ioh +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-sch +gpio-sch311x +gpio-tpic2810 +gpio-tps65086 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-vx855 +gpio-wcove +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-ws16c48 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gr_udc +grace +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdaps +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +hecubafb +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfi1 +hfs +hfsplus +hgafb +hi311x +hi6210-i2s +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-hyperv +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hinic +hio +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horizon +horus3a +hostap +hostap_cs +hostap_pci +hostap_plx +hp-wireless +hp-wmi +hp03 +hp100 +hp206c +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hsi +hsi_char +hso +hsr +hsu_dma +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hv_balloon +hv_netvsc +hv_sock +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +hx711 +hx8357 +hyperv-keyboard +hyperv_fb +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-cbus-gpio +i2c-cht-wc +i2c-cros-ec-tunnel +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-ismt +i2c-kempld +i2c-matroxfb +i2c-mlxcpld +i2c-mux +i2c-mux-gpio +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-reg +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i3000_edac +i3200_edac +i40e +i40evf +i40iw +i5000_edac +i5100_edac +i5400_edac +i5500_temp +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i82092 +i82975x_edac +i915 +iTCO_vendor_support +iTCO_wdt +ib700wdt +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_qib +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibm_rtl +ibmaem +ibmasm +ibmasr +ibmpex +ichxrom +icp +icp_multi +icplus +ics932s401 +ideapad-laptop +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ie31200_edac +ie6xx_wdt +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int3400_thermal +int3402_thermal +int3403_thermal +int3406_thermal +int340x_thermal_zone +int51x1 +intel-cstate +intel-hid +intel-ish-ipc +intel-ishtp +intel-ishtp-hid +intel-lpss +intel-lpss-acpi +intel-lpss-pci +intel-rapl-perf +intel-rng +intel-rst +intel-smartconnect +intel-vbtn +intel-wmi-thunderbolt +intel-xway +intel_bxt_pmic_thermal +intel_bxtwc_tmu +intel_cht_int33fe +intel_int0002_vgpio +intel_ips +intel_menlow +intel_oaktrail +intel_pch_thermal +intel_pmc_ipc +intel_powerclamp +intel_punit_ipc +intel_qat +intel_quark_i2c_gpio +intel_rapl +intel_soc_dts_iosf +intel_soc_dts_thermal +intel_soc_pmic_bxtwc +intel_soc_pmic_chtdc_ti +intel_telemetry_core +intel_telemetry_debugfs +intel_telemetry_pltdrv +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +intelfb +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioatdma +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irqbypass +irtty-sir +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks0127 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kvmgt +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-adp5520 +leds-apu +leds-as3645a +leds-bd2802 +leds-blinkm +leds-clevo-mail +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mlxcpld +leds-mt6323 +leds-nic78bx +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-ss4200 +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +liquidio +liquidio_vf +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmc +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp8755 +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macb_pci +machzwd +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77693-haptic +max77693-regulator +max77693_charger +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mce-inject +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bitbang +mdio-cavium +mdio-gpio +mdio-thunder +me4000 +me_daq +media +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mei-me +mei-txe +mei_phy +mei_wdt +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +meye +mf6x4 +mgag200 +mgc +mi0283qt +mic_bus +mic_card +mic_cosm +mic_host +mic_x100_dma +michael_mic +micrel +microchip +microread +microread_i2c +microread_mei +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx-platform +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxcpld-hotplug +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi-laptop +msi-wmi +msi001 +msi2500 +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxm-wmi +mxser +mxuport +myri10ge +n411 +n5pf +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +nettel +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfit +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni903x_wdt +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_common +ni_labpc_cs +ni_labpc_isadma +ni_labpc_pci +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nic7018_wdt +nicpf +nicstar +nicvf +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nosy +notifier-error-inject +nouveau +nozomi +ns558 +ns83820 +nsc-ircc +nsh +ntb +ntb_hw_idt +ntb_hw_intel +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nv_tco +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_xilinx_wdt +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opa_vnic +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +padlock-aes +padlock-sha +palmas-pwrbutton +palmas-regulator +palmas_gpadc +panasonic-laptop +pandora_bl +panel +panel-raspberrypi-touchscreen +paride +parkbd +parman +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pblk +pc300too +pc87360 +pc87413_wdt +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-hyperv +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmcia +pcmcia_core +pcmcia_rsrc +pcmciamtd +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_pcmcia +peak_usb +peaq-wmi +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +pi433 +pinctrl-broxton +pinctrl-cannonlake +pinctrl-cedarfork +pinctrl-denverton +pinctrl-geminilake +pinctrl-intel +pinctrl-lewisburg +pinctrl-mcp23s08 +pinctrl-sunrisepoint +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn544_mei +pn_pep +pnd2_edac +poly1305-x86_64 +poly1305_generic +port100 +powermate +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +processor_thermal_device +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +ptlrpc +ptp +ptp_kvm +pulse8-cec +pulsedlight-lidar-lite-v2 +punit_atom_debug +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvpanic +pvrusb2 +pwc +pwm-beeper +pwm-cros-ec +pwm-lp3943 +pwm-lpss +pwm-lpss-pci +pwm-lpss-platform +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pxa27x_udc +qat_dh895xcc +qat_dh895xccvf +qca8k +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qedr +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas408 +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quatech_daqp_cs +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +ray_cs +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20-x86_64 +salsa20_generic +samsung-keypad +samsung-laptop +samsung-q10 +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sb_edac +sbc60xxwdt +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbni +sbp_target +sbs +sbs-battery +sbs-charger +sbs-manager +sbshc +sc1200wdt +sc16is7xx +sc92031 +sca3000 +scb2_flash +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scif +scif_bus +scr24x_cs +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdio_uart +sdricoh_cs +sedlbauer_cs +seed +sensorhub +ser_gigaset +serial2002 +serial_cs +serial_ir +serio_raw +sermouse +serpent-avx-x86_64 +serpent-avx2 +serpent-sse2-x86_64 +serpent_generic +serport +ses +sfc +sfc-falcon +sh_veu +sha1-mb +sha1-ssse3 +sha256-mb +sha256-ssse3 +sha3_generic +sha512-mb +sha512-ssse3 +shark2 +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis-agp +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skd +skfp +skge +skx_edac +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +sl811_cs +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc91c92_cs +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-als4000 +snd-asihpi +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-compress +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-ext-core +snd-hda-intel +snd-hdmi-lpe-audio +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel-sst-acpi +snd-intel-sst-core +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-skl_nau88l25_max98357a +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-acpi +snd-soc-acpi-intel-match +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7213 +snd-soc-da7219 +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdac-hdmi +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kbl_rt5663_max98927 +snd-soc-kbl_rt5663_rt5514_max98927 +snd-soc-max98090 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-nau8825 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rl6347a +snd-soc-rt286 +snd-soc-rt298 +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5651 +snd-soc-rt5663 +snd-soc-rt5670 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-skl +snd-soc-skl-ipc +snd-soc-skl_nau88l25_ssm4567 +snd-soc-skl_rt286 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sst-acpi +snd-soc-sst-atom-hifi2-platform +snd-soc-sst-baytrail-pcm +snd-soc-sst-bdw-rt5677-mach +snd-soc-sst-broadwell +snd-soc-sst-bxt-da7219_max98357a +snd-soc-sst-bxt-rt298 +snd-soc-sst-byt-cht-da7213 +snd-soc-sst-byt-cht-es8316 +snd-soc-sst-bytcr-rt5640 +snd-soc-sst-bytcr-rt5651 +snd-soc-sst-cht-bsw-max98090_ti +snd-soc-sst-cht-bsw-rt5645 +snd-soc-sst-cht-bsw-rt5672 +snd-soc-sst-dsp +snd-soc-sst-firmware +snd-soc-sst-haswell +snd-soc-sst-haswell-pcm +snd-soc-sst-ipc +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-us122l +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-vxpocket +snd-ymfpci +snic +snps_udc_core +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-btf-mpx +sony-laptop +soundcore +sp2 +sp5100_tco +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +spectrum_cs +speedfax +speedstep-lib +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spl +splat +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +stx104 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3-wmi +surface3_button +surface3_spi +surfacepro3_button +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teles_cs +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thinkpad_acpi +thmc50 +thunder_bgx +thunder_xcv +thunderbolt +thunderbolt-net +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-dac082s085 +ti-lmu +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +tinydrm +tipc +tlan +tlclk +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmem +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +topstar-laptop +torture +toshiba_acpi +toshiba_bluetooth +toshiba_haps +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_nsc +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsi568 +tsi57x +tsi721_mport +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish-avx-x86_64 +twofish-x86_64 +twofish-x86_64-3way +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +uPD98402 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_hv_generic +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +usnic_verbs +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vboxguest +vboxsf +vboxvideo +vcan +vcnl4000 +veml6070 +ves1820 +ves1x93 +veth +vfio +vfio-pci +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-camera +via-cputemp +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via686a +via_wdt +viafb +video +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videocodec +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +visorbus +visorhba +visorinput +visornic +vitesse +vivid +vl6180 +vlsi_ir +vmac +vmd +vme_ca91cx42 +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmw_pvrdma +vmw_pvscsi +vmw_vmci +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmw_vsock_vmci_transport +vmwgfx +vmxnet3 +vop +vop_bus +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vpx3220 +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +wafer5823wdt +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd719x +wdat_wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +winbond-cir +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlcore +wlcore_sdio +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wmi +wmi-bmof +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x38_edac +x86_pkg_temp_thermal +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-hwmon +xgifb +xhci-plat-hcd +xilinx-spi +xilinx_gmii2rgmii +xillybus_core +xillybus_pcie +xirc2ps_cs +xircom_cb +xor +xpad +xr_usb_serial_common +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z3fold +zatm +zaurus +zavl +zcommon +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zfs +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +znvpair +zpa2326 +zpa2326_i2c +zpa2326_spi +zpios +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zstd_compress +zunicode +zx-tdm --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/aws.retpoline +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/aws.retpoline @@ -0,0 +1,378 @@ +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +amdgpu.ko core_link_enable_stream callq *%rax +camellia-aesni-avx-x86_64.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx-x86_64.ko camellia_xts_crypt_16way callq *%r9 +camellia-aesni-avx2.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx2.ko camellia_xts_crypt_32way callq *%r9 +hpwdt.ko asminline_call callq *%r12 +hv_vmbus.ko hv_post_message callq *%rsi +hv_vmbus.ko vmbus_set_event callq *%rax +kvm-intel.ko vmx_handle_external_intr callq *%rax +kvm.ko em_loop callq *%rdx +kvm.ko fastop callq *%rsi +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +mlx4_ib.ko set_guid_rec jmpq *%rdx +pci-hyperv.ko hv_irq_unmask callq *%r12 +vmlinux .altinstr_replacement callq *%rbx +vmlinux .altinstr_replacement jmpq *%r10 +vmlinux .altinstr_replacement jmpq *%r11 +vmlinux .altinstr_replacement jmpq *%r12 +vmlinux .altinstr_replacement jmpq *%r13 +vmlinux .altinstr_replacement jmpq *%r14 +vmlinux .altinstr_replacement jmpq *%r15 +vmlinux .altinstr_replacement jmpq *%r8 +vmlinux .altinstr_replacement jmpq *%r9 +vmlinux .altinstr_replacement jmpq *%rax +vmlinux .altinstr_replacement jmpq *%rbp +vmlinux .altinstr_replacement jmpq *%rbx +vmlinux .altinstr_replacement jmpq *%rcx +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdx +vmlinux .altinstr_replacement jmpq *%rsi +vmlinux MP_bus_info callq *%rax +vmlinux MP_bus_info callq *%rax +vmlinux MP_processor_info callq *%rax +vmlinux __early_ioremap callq *%r9 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __x86_indirect_thunk_r10 jmpq *%r10 +vmlinux __x86_indirect_thunk_r11 jmpq *%r11 +vmlinux __x86_indirect_thunk_r12 jmpq *%r12 +vmlinux __x86_indirect_thunk_r13 jmpq *%r13 +vmlinux __x86_indirect_thunk_r14 jmpq *%r14 +vmlinux __x86_indirect_thunk_r15 jmpq *%r15 +vmlinux __x86_indirect_thunk_r8 jmpq *%r8 +vmlinux __x86_indirect_thunk_r9 jmpq *%r9 +vmlinux __x86_indirect_thunk_rax jmpq *%rax +vmlinux __x86_indirect_thunk_rbp jmpq *%rbp +vmlinux __x86_indirect_thunk_rbx jmpq *%rbx +vmlinux __x86_indirect_thunk_rcx jmpq *%rcx +vmlinux __x86_indirect_thunk_rdi jmpq *%rdi +vmlinux __x86_indirect_thunk_rdx jmpq *%rdx +vmlinux __x86_indirect_thunk_rsi jmpq *%rsi +vmlinux acpi_init jmpq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_numa_x2apic_affinity_init callq *%rax +vmlinux acpi_parse_x2apic callq *%rax +vmlinux acpi_table_parse callq *%r13 +vmlinux acpi_table_parse_entries_array callq *%rax +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux amd_numa_init callq *%rax +vmlinux apic_bsp_setup callq *%rax +vmlinux apic_bsp_setup callq *%rdx +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux arch_probe_nr_irqs callq *%rax +vmlinux bpf_prog_load jmpq *%rsp +vmlinux bunzip2 callq *%r13 +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux calgary_iommu_init callq *%rax +vmlinux cgroup_init callq *%rax +vmlinux cgroup_init_subsys callq *%rdx +vmlinux check_bugs jmpq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux con_init callq *%rax +vmlinux console_init callq *%rax +vmlinux continue_block jmpq *%rdi +vmlinux core_restore_code jmpq *%r8 +vmlinux default_acpi_madt_oem_check callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config jmpq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux dm_init callq *%rax +vmlinux dm_init callq *%rax +vmlinux do_early_param callq *%rax +vmlinux e820__memory_setup callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_iounmap callq *%rax +vmlinux early_pci_scan_bus callq *%rax +vmlinux early_platform_driver_probe callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux edd_init callq *%rax +vmlinux efi64_thunk callq *%rbx +vmlinux efi_call callq *%rdi +vmlinux efi_enter32 callq *%rdi +vmlinux efi_memattr_apply_permissions callq *%r15 +vmlinux efi_memblock_x86_reserve_range jmpq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux entry_SYSCALL_64_trampoline jmpq *%rdi +vmlinux get_bits callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux hyperv_flush_tlb_others callq *%r14 +vmlinux hyperv_flush_tlb_others callq *%rax +vmlinux hyperv_flush_tlb_others_ex callq *%r15 +vmlinux hyperv_flush_tlb_others_ex callq *%rax +vmlinux i8042_probe callq *%rbx +vmlinux identify_boot_cpu callq *%rax +vmlinux identity_mapped callq *%rdx +vmlinux ima_calc_boot_aggregate callq *%rax +vmlinux init_IRQ callq *%rax +vmlinux init_ISA_irqs callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_mem_mapping callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux io_apic_init_mappings callq *%rax +vmlinux iommu_go_to_state jmpq *%rdi +vmlinux irq_remap_enable_fault_handling callq *%rdx +vmlinux irq_remapping_enable callq *%rdx +vmlinux irq_remapping_prepare callq *%rax +vmlinux irq_remapping_prepare callq *%rax +vmlinux kernel_init_freeable callq *%rax +vmlinux lapic_cal_handler callq *%rax +vmlinux load_uefi_certs callq *%rax +vmlinux map_vsyscall callq *%rax +vmlinux mcheck_intel_therm_init callq *%rax +vmlinux msr_init callq *%rax +vmlinux mtrr_bp_init callq *%rax +vmlinux mtrr_cleanup callq *%r8 +vmlinux mtrr_trim_uncached_memory callq *%r8 +vmlinux native_init_IRQ callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux numa_init callq *%rbx +vmlinux p4_pmu_init callq *%rdx +vmlinux parse_efi_signature_list callq *%rax +vmlinux parse_efi_signature_list callq *%rax +vmlinux pci_arch_init callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_mmcfg_e7520 callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_intel_945 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_embed_first_chunk callq *%r13 +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pnpacpi_option_resource jmpq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux print_APIC_field callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux probe_list2 callq *%rax +vmlinux pvh_start_xen jmpq *%rax +vmlinux rc_read callq *%rax +vmlinux rc_read callq *%rax +vmlinux reboot_setup jmpq *%rdx +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux regulator_late_cleanup callq *%rax +vmlinux restore_image jmpq *%rcx +vmlinux ret_from_fork callq *%rbx +vmlinux return_to_handler jmpq *%rdi +vmlinux secondary_startup_64 jmpq *%rax +vmlinux security_init callq *%rax +vmlinux serial8250_isa_init_ports callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon jmpq *%rax +vmlinux sfi_parse_cpus callq *%rax +vmlinux sme_encrypt_execute callq *%rax +vmlinux smp_init callq *%rax +vmlinux start_kernel callq *%rax +vmlinux start_kernel callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux tboot_probe callq *%rax +vmlinux timekeeping_init callq *%rax +vmlinux trap_init callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_init callq *%rax +vmlinux tsc_init callq *%rax +vmlinux unknown_bootoption callq *%rax +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%rax +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%rax +vmlinux unpack_to_rootfs callq *%r15 +vmlinux unxz callq *%r15 +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz jmpq *%rax +vmlinux update_mp_table jmpq *%rax +vmlinux wakeup_long64 jmpq *%rax +vmlinux write_buffer callq *%rax +vmlinux write_byte callq *%rcx +vmlinux x86_early_init_platform_quirks callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux xen_foreach_remap_area callq *%r12 +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_mc_flush callq *%rax +xen-privcmd.ko privcmd_ioctl callq *%rax --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/ignore.modules +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/ignore.modules @@ -0,0 +1 @@ +1 --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/amd64/ignore.retpoline +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/amd64/ignore.retpoline @@ -0,0 +1 @@ +1 --- linux-aws-4.15.0.orig/debian.aws/abi/4.15.0-1000.0/fwinfo +++ linux-aws-4.15.0/debian.aws/abi/4.15.0-1000.0/fwinfo @@ -0,0 +1,1324 @@ +firmware: 3826.arm +firmware: 3com/typhoon.bin +firmware: 6fire/dmx6fireap.ihx +firmware: 6fire/dmx6firecf.bin +firmware: 6fire/dmx6firel2.ihx +firmware: BCM2033-FW.bin +firmware: BCM2033-MD.hex +firmware: BT3CPCC.bin +firmware: RTL8192E/boot.img +firmware: RTL8192E/data.img +firmware: RTL8192E/main.img +firmware: RTL8192U/boot.img +firmware: RTL8192U/data.img +firmware: RTL8192U/main.img +firmware: a300_pfp.fw +firmware: a300_pm4.fw +firmware: a330_pfp.fw +firmware: a330_pm4.fw +firmware: a420_pfp.fw +firmware: a420_pm4.fw +firmware: a530_fm4.fw +firmware: a530_pfp.fw +firmware: acenic/tg1.bin +firmware: acenic/tg2.bin +firmware: adaptec/starfire_rx.bin +firmware: adaptec/starfire_tx.bin +firmware: advansys/3550.bin +firmware: advansys/38C0800.bin +firmware: advansys/38C1600.bin +firmware: advansys/mcode.bin +firmware: agere_ap_fw.bin +firmware: agere_sta_fw.bin +firmware: aic94xx-seq.fw +firmware: amdgpu/carrizo_ce.bin +firmware: amdgpu/carrizo_me.bin +firmware: amdgpu/carrizo_mec.bin +firmware: amdgpu/carrizo_mec2.bin +firmware: amdgpu/carrizo_pfp.bin +firmware: amdgpu/carrizo_rlc.bin +firmware: amdgpu/carrizo_sdma.bin +firmware: amdgpu/carrizo_sdma1.bin +firmware: amdgpu/carrizo_uvd.bin +firmware: amdgpu/carrizo_vce.bin +firmware: amdgpu/fiji_ce.bin +firmware: amdgpu/fiji_me.bin +firmware: amdgpu/fiji_mec.bin +firmware: amdgpu/fiji_mec2.bin +firmware: amdgpu/fiji_pfp.bin +firmware: amdgpu/fiji_rlc.bin +firmware: amdgpu/fiji_sdma.bin +firmware: amdgpu/fiji_sdma1.bin +firmware: amdgpu/fiji_smc.bin +firmware: amdgpu/fiji_uvd.bin +firmware: amdgpu/fiji_vce.bin +firmware: amdgpu/polaris10_ce.bin +firmware: amdgpu/polaris10_ce_2.bin +firmware: amdgpu/polaris10_k_smc.bin +firmware: amdgpu/polaris10_mc.bin +firmware: amdgpu/polaris10_me.bin +firmware: amdgpu/polaris10_me_2.bin +firmware: amdgpu/polaris10_mec.bin +firmware: amdgpu/polaris10_mec2.bin +firmware: amdgpu/polaris10_mec2_2.bin +firmware: amdgpu/polaris10_mec_2.bin +firmware: amdgpu/polaris10_pfp.bin +firmware: amdgpu/polaris10_pfp_2.bin +firmware: amdgpu/polaris10_rlc.bin +firmware: amdgpu/polaris10_sdma.bin +firmware: amdgpu/polaris10_sdma1.bin +firmware: amdgpu/polaris10_smc.bin +firmware: amdgpu/polaris10_smc_sk.bin +firmware: amdgpu/polaris10_uvd.bin +firmware: amdgpu/polaris10_vce.bin +firmware: amdgpu/polaris11_ce.bin +firmware: amdgpu/polaris11_ce_2.bin +firmware: amdgpu/polaris11_k_smc.bin +firmware: amdgpu/polaris11_mc.bin +firmware: amdgpu/polaris11_me.bin +firmware: amdgpu/polaris11_me_2.bin +firmware: amdgpu/polaris11_mec.bin +firmware: amdgpu/polaris11_mec2.bin +firmware: amdgpu/polaris11_mec2_2.bin +firmware: amdgpu/polaris11_mec_2.bin +firmware: amdgpu/polaris11_pfp.bin +firmware: amdgpu/polaris11_pfp_2.bin +firmware: amdgpu/polaris11_rlc.bin +firmware: amdgpu/polaris11_sdma.bin +firmware: amdgpu/polaris11_sdma1.bin +firmware: amdgpu/polaris11_smc.bin +firmware: amdgpu/polaris11_smc_sk.bin +firmware: amdgpu/polaris11_uvd.bin +firmware: amdgpu/polaris11_vce.bin +firmware: amdgpu/polaris12_ce.bin +firmware: amdgpu/polaris12_ce_2.bin +firmware: amdgpu/polaris12_mc.bin +firmware: amdgpu/polaris12_me.bin +firmware: amdgpu/polaris12_me_2.bin +firmware: amdgpu/polaris12_mec.bin +firmware: amdgpu/polaris12_mec2.bin +firmware: amdgpu/polaris12_mec2_2.bin +firmware: amdgpu/polaris12_mec_2.bin +firmware: amdgpu/polaris12_pfp.bin +firmware: amdgpu/polaris12_pfp_2.bin +firmware: amdgpu/polaris12_rlc.bin +firmware: amdgpu/polaris12_sdma.bin +firmware: amdgpu/polaris12_sdma1.bin +firmware: amdgpu/polaris12_smc.bin +firmware: amdgpu/polaris12_uvd.bin +firmware: amdgpu/polaris12_vce.bin +firmware: amdgpu/raven_asd.bin +firmware: amdgpu/raven_ce.bin +firmware: amdgpu/raven_gpu_info.bin +firmware: amdgpu/raven_me.bin +firmware: amdgpu/raven_mec.bin +firmware: amdgpu/raven_mec2.bin +firmware: amdgpu/raven_pfp.bin +firmware: amdgpu/raven_rlc.bin +firmware: amdgpu/raven_sdma.bin +firmware: amdgpu/raven_vcn.bin +firmware: amdgpu/stoney_ce.bin +firmware: amdgpu/stoney_me.bin +firmware: amdgpu/stoney_mec.bin +firmware: amdgpu/stoney_pfp.bin +firmware: amdgpu/stoney_rlc.bin +firmware: amdgpu/stoney_sdma.bin +firmware: amdgpu/stoney_uvd.bin +firmware: amdgpu/stoney_vce.bin +firmware: amdgpu/tonga_ce.bin +firmware: amdgpu/tonga_k_smc.bin +firmware: amdgpu/tonga_mc.bin +firmware: amdgpu/tonga_me.bin +firmware: amdgpu/tonga_mec.bin +firmware: amdgpu/tonga_mec2.bin +firmware: amdgpu/tonga_pfp.bin +firmware: amdgpu/tonga_rlc.bin +firmware: amdgpu/tonga_sdma.bin +firmware: amdgpu/tonga_sdma1.bin +firmware: amdgpu/tonga_smc.bin +firmware: amdgpu/tonga_uvd.bin +firmware: amdgpu/tonga_vce.bin +firmware: amdgpu/topaz_ce.bin +firmware: amdgpu/topaz_k_smc.bin +firmware: amdgpu/topaz_mc.bin +firmware: amdgpu/topaz_me.bin +firmware: amdgpu/topaz_mec.bin +firmware: amdgpu/topaz_pfp.bin +firmware: amdgpu/topaz_rlc.bin +firmware: amdgpu/topaz_sdma.bin +firmware: amdgpu/topaz_sdma1.bin +firmware: amdgpu/topaz_smc.bin +firmware: amdgpu/vega10_acg_smc.bin +firmware: amdgpu/vega10_asd.bin +firmware: amdgpu/vega10_ce.bin +firmware: amdgpu/vega10_gpu_info.bin +firmware: amdgpu/vega10_me.bin +firmware: amdgpu/vega10_mec.bin +firmware: amdgpu/vega10_mec2.bin +firmware: amdgpu/vega10_pfp.bin +firmware: amdgpu/vega10_rlc.bin +firmware: amdgpu/vega10_sdma.bin +firmware: amdgpu/vega10_sdma1.bin +firmware: amdgpu/vega10_smc.bin +firmware: amdgpu/vega10_sos.bin +firmware: amdgpu/vega10_uvd.bin +firmware: amdgpu/vega10_vce.bin +firmware: ar5523.bin +firmware: asihpi/dsp5000.bin +firmware: asihpi/dsp6200.bin +firmware: asihpi/dsp6205.bin +firmware: asihpi/dsp6400.bin +firmware: asihpi/dsp6600.bin +firmware: asihpi/dsp8700.bin +firmware: asihpi/dsp8900.bin +firmware: ast_dp501_fw.bin +firmware: ath10k/QCA6174/hw2.1/board-2.bin +firmware: ath10k/QCA6174/hw2.1/board.bin +firmware: ath10k/QCA6174/hw2.1/firmware-4.bin +firmware: ath10k/QCA6174/hw2.1/firmware-5.bin +firmware: ath10k/QCA6174/hw3.0/board-2.bin +firmware: ath10k/QCA6174/hw3.0/board.bin +firmware: ath10k/QCA6174/hw3.0/firmware-4.bin +firmware: ath10k/QCA6174/hw3.0/firmware-5.bin +firmware: ath10k/QCA6174/hw3.0/firmware-6.bin +firmware: ath10k/QCA9377/hw1.0/board.bin +firmware: ath10k/QCA9377/hw1.0/firmware-5.bin +firmware: ath10k/QCA9887/hw1.0/board-2.bin +firmware: ath10k/QCA9887/hw1.0/board.bin +firmware: ath10k/QCA9887/hw1.0/firmware-5.bin +firmware: ath10k/QCA988X/hw2.0/board-2.bin +firmware: ath10k/QCA988X/hw2.0/board.bin +firmware: ath10k/QCA988X/hw2.0/firmware-2.bin +firmware: ath10k/QCA988X/hw2.0/firmware-3.bin +firmware: ath10k/QCA988X/hw2.0/firmware-4.bin +firmware: ath10k/QCA988X/hw2.0/firmware-5.bin +firmware: ath3k-1.fw +firmware: ath6k/AR6003/hw2.0/athwlan.bin.z77 +firmware: ath6k/AR6003/hw2.0/bdata.SD31.bin +firmware: ath6k/AR6003/hw2.0/bdata.bin +firmware: ath6k/AR6003/hw2.0/data.patch.bin +firmware: ath6k/AR6003/hw2.0/otp.bin.z77 +firmware: ath6k/AR6003/hw2.1.1/athwlan.bin +firmware: ath6k/AR6003/hw2.1.1/bdata.SD31.bin +firmware: ath6k/AR6003/hw2.1.1/bdata.bin +firmware: ath6k/AR6003/hw2.1.1/data.patch.bin +firmware: ath6k/AR6003/hw2.1.1/otp.bin +firmware: ath6k/AR6004/hw1.0/bdata.DB132.bin +firmware: ath6k/AR6004/hw1.0/bdata.bin +firmware: ath6k/AR6004/hw1.0/fw.ram.bin +firmware: ath6k/AR6004/hw1.1/bdata.DB132.bin +firmware: ath6k/AR6004/hw1.1/bdata.bin +firmware: ath6k/AR6004/hw1.1/fw.ram.bin +firmware: ath6k/AR6004/hw1.2/bdata.bin +firmware: ath6k/AR6004/hw1.2/fw.ram.bin +firmware: ath6k/AR6004/hw1.3/bdata.bin +firmware: ath6k/AR6004/hw1.3/fw.ram.bin +firmware: ath9k_htc/htc_7010-1.4.0.fw +firmware: ath9k_htc/htc_9271-1.4.0.fw +firmware: atmel_at76c502-wpa.bin +firmware: atmel_at76c502.bin +firmware: atmel_at76c502_3com-wpa.bin +firmware: atmel_at76c502_3com.bin +firmware: atmel_at76c502d-wpa.bin +firmware: atmel_at76c502d.bin +firmware: atmel_at76c502e-wpa.bin +firmware: atmel_at76c502e.bin +firmware: atmel_at76c503-i3861.bin +firmware: atmel_at76c503-i3863.bin +firmware: atmel_at76c503-rfmd-acc.bin +firmware: atmel_at76c503-rfmd.bin +firmware: atmel_at76c504-wpa.bin +firmware: atmel_at76c504.bin +firmware: atmel_at76c504_2958-wpa.bin +firmware: atmel_at76c504_2958.bin +firmware: atmel_at76c504a_2958-wpa.bin +firmware: atmel_at76c504a_2958.bin +firmware: atmel_at76c505-rfmd.bin +firmware: atmel_at76c505-rfmd2958.bin +firmware: atmel_at76c505a-rfmd2958.bin +firmware: atmel_at76c505amx-rfmd.bin +firmware: atmel_at76c506-wpa.bin +firmware: atmel_at76c506.bin +firmware: atmsar11.fw +firmware: atsc_denver.inp +firmware: av7110/bootcode.bin +firmware: b43/ucode11.fw +firmware: b43/ucode13.fw +firmware: b43/ucode14.fw +firmware: b43/ucode15.fw +firmware: b43/ucode16_lp.fw +firmware: b43/ucode16_mimo.fw +firmware: b43/ucode24_lcn.fw +firmware: b43/ucode25_lcn.fw +firmware: b43/ucode25_mimo.fw +firmware: b43/ucode26_mimo.fw +firmware: b43/ucode29_mimo.fw +firmware: b43/ucode30_mimo.fw +firmware: b43/ucode33_lcn40.fw +firmware: b43/ucode40.fw +firmware: b43/ucode42.fw +firmware: b43/ucode5.fw +firmware: b43/ucode9.fw +firmware: b43legacy/ucode2.fw +firmware: b43legacy/ucode4.fw +firmware: bfubase.frm +firmware: bnx2/bnx2-mips-06-6.2.3.fw +firmware: bnx2/bnx2-mips-09-6.2.1b.fw +firmware: bnx2/bnx2-rv2p-06-6.0.15.fw +firmware: bnx2/bnx2-rv2p-09-6.0.17.fw +firmware: bnx2/bnx2-rv2p-09ax-6.0.17.fw +firmware: bnx2x/bnx2x-e1-7.13.1.0.fw +firmware: bnx2x/bnx2x-e1h-7.13.1.0.fw +firmware: bnx2x/bnx2x-e2-7.13.1.0.fw +firmware: brcm/bcm43xx-0.fw +firmware: brcm/bcm43xx_hdr-0.fw +firmware: brcm/brcmfmac43143-sdio.bin +firmware: brcm/brcmfmac43143.bin +firmware: brcm/brcmfmac43236b.bin +firmware: brcm/brcmfmac43241b0-sdio.bin +firmware: brcm/brcmfmac43241b4-sdio.bin +firmware: brcm/brcmfmac43241b5-sdio.bin +firmware: brcm/brcmfmac43242a.bin +firmware: brcm/brcmfmac4329-sdio.bin +firmware: brcm/brcmfmac4330-sdio.bin +firmware: brcm/brcmfmac4334-sdio.bin +firmware: brcm/brcmfmac43340-sdio.bin +firmware: brcm/brcmfmac4335-sdio.bin +firmware: brcm/brcmfmac43362-sdio.bin +firmware: brcm/brcmfmac4339-sdio.bin +firmware: brcm/brcmfmac43430-sdio.bin +firmware: brcm/brcmfmac43430a0-sdio.bin +firmware: brcm/brcmfmac43455-sdio.bin +firmware: brcm/brcmfmac4350-pcie.bin +firmware: brcm/brcmfmac4350c2-pcie.bin +firmware: brcm/brcmfmac4354-sdio.bin +firmware: brcm/brcmfmac4356-pcie.bin +firmware: brcm/brcmfmac4356-sdio.bin +firmware: brcm/brcmfmac43569.bin +firmware: brcm/brcmfmac43570-pcie.bin +firmware: brcm/brcmfmac4358-pcie.bin +firmware: brcm/brcmfmac4359-pcie.bin +firmware: brcm/brcmfmac43602-pcie.bin +firmware: brcm/brcmfmac4365b-pcie.bin +firmware: brcm/brcmfmac4365c-pcie.bin +firmware: brcm/brcmfmac4366b-pcie.bin +firmware: brcm/brcmfmac4366c-pcie.bin +firmware: brcm/brcmfmac4371-pcie.bin +firmware: brcm/brcmfmac4373-sdio.bin +firmware: brcm/brcmfmac4373.bin +firmware: c218tunx.cod +firmware: c320tunx.cod +firmware: carl9170-1.fw +firmware: cavium/cnn55xx_se.fw +firmware: cbfw-3.2.5.1.bin +firmware: cis/3CCFEM556.cis +firmware: cis/3CXEM556.cis +firmware: cis/COMpad2.cis +firmware: cis/COMpad4.cis +firmware: cis/DP83903.cis +firmware: cis/LA-PCM.cis +firmware: cis/MT5634ZLX.cis +firmware: cis/NE2K.cis +firmware: cis/PCMLM28.cis +firmware: cis/PE-200.cis +firmware: cis/PE520.cis +firmware: cis/RS-COM-2P.cis +firmware: cis/SW_555_SER.cis +firmware: cis/SW_7xx_SER.cis +firmware: cis/SW_8xx_SER.cis +firmware: cis/tamarack.cis +firmware: cmmb_ming_app.inp +firmware: cmmb_vega_12mhz.inp +firmware: cmmb_venice_12mhz.inp +firmware: comedi/jr3pci.idm +firmware: cp204unx.cod +firmware: cpia2/stv0672_vp4.bin +firmware: cs46xx/cwc4630 +firmware: cs46xx/cwcasync +firmware: cs46xx/cwcbinhack +firmware: cs46xx/cwcdma +firmware: cs46xx/cwcsnoop +firmware: ct2fw-3.2.5.1.bin +firmware: ctefx.bin +firmware: ctfw-3.2.5.1.bin +firmware: cxgb3/ael2005_opt_edc.bin +firmware: cxgb3/ael2005_twx_edc.bin +firmware: cxgb3/ael2020_twx_edc.bin +firmware: cxgb3/t3b_psram-1.1.0.bin +firmware: cxgb3/t3c_psram-1.1.0.bin +firmware: cxgb3/t3fw-7.12.0.bin +firmware: cxgb4/t4fw.bin +firmware: cxgb4/t5fw.bin +firmware: cxgb4/t6fw.bin +firmware: cyzfirm.bin +firmware: daqboard2000_firmware.bin +firmware: digiface_firmware.bin +firmware: digiface_firmware_rev11.bin +firmware: dvb-cx18-mpc718-mt352.fw +firmware: dvb-demod-m88ds3103.fw +firmware: dvb-demod-m88rs6000.fw +firmware: dvb-demod-mn88472-02.fw +firmware: dvb-demod-mn88473-01.fw +firmware: dvb-demod-si2165.fw +firmware: dvb-demod-si2168-a20-01.fw +firmware: dvb-demod-si2168-a30-01.fw +firmware: dvb-demod-si2168-b40-01.fw +firmware: dvb-demod-si2168-d60-01.fw +firmware: dvb-fe-af9013.fw +firmware: dvb-fe-cx24117.fw +firmware: dvb-fe-drxj-mc-1.0.8.fw +firmware: dvb-fe-ds3000.fw +firmware: dvb-fe-tda10071.fw +firmware: dvb-fe-xc4000-1.4.1.fw +firmware: dvb-fe-xc4000-1.4.fw +firmware: dvb-fe-xc5000-1.6.114.fw +firmware: dvb-fe-xc5000c-4.1.30.7.fw +firmware: dvb-tuner-si2141-a10-01.fw +firmware: dvb-tuner-si2158-a20-01.fw +firmware: dvb-usb-af9015.fw +firmware: dvb-usb-af9035-02.fw +firmware: dvb-usb-dib0700-1.20.fw +firmware: dvb-usb-dw2101.fw +firmware: dvb-usb-dw2102.fw +firmware: dvb-usb-dw2104.fw +firmware: dvb-usb-dw3101.fw +firmware: dvb-usb-ec168.fw +firmware: dvb-usb-it9135-01.fw +firmware: dvb-usb-it9135-02.fw +firmware: dvb-usb-it9303-01.fw +firmware: dvb-usb-lme2510-lg.fw +firmware: dvb-usb-lme2510-s0194.fw +firmware: dvb-usb-lme2510c-lg.fw +firmware: dvb-usb-lme2510c-rs2000.fw +firmware: dvb-usb-lme2510c-s0194.fw +firmware: dvb-usb-lme2510c-s7395.fw +firmware: dvb-usb-p1100.fw +firmware: dvb-usb-p7500.fw +firmware: dvb-usb-s630.fw +firmware: dvb-usb-s660.fw +firmware: dvb-usb-terratec-h7-az6007.fw +firmware: dvb_nova_12mhz.inp +firmware: dvb_nova_12mhz_b0.inp +firmware: dvb_rio.inp +firmware: dvbh_rio.inp +firmware: e100/d101m_ucode.bin +firmware: e100/d101s_ucode.bin +firmware: e100/d102e_ucode.bin +firmware: ea/3g_asic.fw +firmware: ea/darla20_dsp.fw +firmware: ea/darla24_dsp.fw +firmware: ea/echo3g_dsp.fw +firmware: ea/gina20_dsp.fw +firmware: ea/gina24_301_asic.fw +firmware: ea/gina24_301_dsp.fw +firmware: ea/gina24_361_asic.fw +firmware: ea/gina24_361_dsp.fw +firmware: ea/indigo_dj_dsp.fw +firmware: ea/indigo_djx_dsp.fw +firmware: ea/indigo_dsp.fw +firmware: ea/indigo_io_dsp.fw +firmware: ea/indigo_iox_dsp.fw +firmware: ea/layla20_asic.fw +firmware: ea/layla20_dsp.fw +firmware: ea/layla24_1_asic.fw +firmware: ea/layla24_2A_asic.fw +firmware: ea/layla24_2S_asic.fw +firmware: ea/layla24_dsp.fw +firmware: ea/loader_dsp.fw +firmware: ea/mia_dsp.fw +firmware: ea/mona_2_asic.fw +firmware: ea/mona_301_1_asic_48.fw +firmware: ea/mona_301_1_asic_96.fw +firmware: ea/mona_301_dsp.fw +firmware: ea/mona_361_1_asic_48.fw +firmware: ea/mona_361_1_asic_96.fw +firmware: ea/mona_361_dsp.fw +firmware: edgeport/boot.fw +firmware: edgeport/boot2.fw +firmware: edgeport/down.fw +firmware: edgeport/down2.fw +firmware: edgeport/down3.bin +firmware: emi26/bitstream.fw +firmware: emi26/firmware.fw +firmware: emi26/loader.fw +firmware: emi62/bitstream.fw +firmware: emi62/loader.fw +firmware: emi62/spdif.fw +firmware: emu/audio_dock.fw +firmware: emu/emu0404.fw +firmware: emu/emu1010_notebook.fw +firmware: emu/emu1010b.fw +firmware: emu/hana.fw +firmware: emu/micro_dock.fw +firmware: ene-ub6250/ms_init.bin +firmware: ene-ub6250/ms_rdwr.bin +firmware: ene-ub6250/msp_rdwr.bin +firmware: ene-ub6250/sd_init1.bin +firmware: ene-ub6250/sd_init2.bin +firmware: ene-ub6250/sd_rdwr.bin +firmware: ess/maestro3_assp_kernel.fw +firmware: ess/maestro3_assp_minisrc.fw +firmware: f2255usb.bin +firmware: fm_radio.inp +firmware: fm_radio_rio.inp +firmware: fw.ram.bin +firmware: go7007/go7007fw.bin +firmware: go7007/go7007tv.bin +firmware: go7007/lr192.fw +firmware: go7007/px-m402u.fw +firmware: go7007/px-tv402u.fw +firmware: go7007/s2250-1.fw +firmware: go7007/s2250-2.fw +firmware: go7007/wis-startrek.fw +firmware: hfi1_dc8051.fw +firmware: hfi1_fabric.fw +firmware: hfi1_pcie.fw +firmware: hfi1_sbus.fw +firmware: i1480-phy-0.0.bin +firmware: i1480-pre-phy-0.0.bin +firmware: i1480-usb-0.0.bin +firmware: i2400m-fw-usb-1.5.sbcf +firmware: i6050-fw-usb-1.5.sbcf +firmware: i915/bxt_dmc_ver1_07.bin +firmware: i915/bxt_huc_ver01_07_1398.bin +firmware: i915/kbl_dmc_ver1_01.bin +firmware: i915/kbl_huc_ver02_00_1810.bin +firmware: i915/skl_dmc_ver1_26.bin +firmware: i915/skl_guc_ver6_1.bin +firmware: i915/skl_huc_ver01_07_1398.bin +firmware: icom_asc.bin +firmware: icom_call_setup.bin +firmware: icom_res_dce.bin +firmware: intel/ibt-11-5.ddc +firmware: intel/ibt-11-5.sfi +firmware: intel/ibt-12-16.ddc +firmware: intel/ibt-12-16.sfi +firmware: ipw2100-1.3-i.fw +firmware: ipw2100-1.3-p.fw +firmware: ipw2100-1.3.fw +firmware: ipw2200-bss.fw +firmware: ipw2200-ibss.fw +firmware: ipw2200-sniffer.fw +firmware: isci/isci_firmware.bin +firmware: isdbt_nova_12mhz.inp +firmware: isdbt_nova_12mhz_b0.inp +firmware: isdbt_pele.inp +firmware: isdbt_rio.inp +firmware: isdn/ISAR.BIN +firmware: isi4608.bin +firmware: isi4616.bin +firmware: isi608.bin +firmware: isi608em.bin +firmware: isi616em.bin +firmware: isight.fw +firmware: isl3886pci +firmware: isl3886usb +firmware: isl3887usb +firmware: iwlwifi-100-5.ucode +firmware: iwlwifi-1000-5.ucode +firmware: iwlwifi-105-6.ucode +firmware: iwlwifi-135-6.ucode +firmware: iwlwifi-2000-6.ucode +firmware: iwlwifi-2030-6.ucode +firmware: iwlwifi-3160-17.ucode +firmware: iwlwifi-3168-29.ucode +firmware: iwlwifi-3945-2.ucode +firmware: iwlwifi-4965-2.ucode +firmware: iwlwifi-5000-5.ucode +firmware: iwlwifi-5150-2.ucode +firmware: iwlwifi-6000-6.ucode +firmware: iwlwifi-6000g2a-6.ucode +firmware: iwlwifi-6000g2b-6.ucode +firmware: iwlwifi-6050-5.ucode +firmware: iwlwifi-7260-17.ucode +firmware: iwlwifi-7265-17.ucode +firmware: iwlwifi-7265D-29.ucode +firmware: iwlwifi-8000C-34.ucode +firmware: iwlwifi-8265-34.ucode +firmware: iwlwifi-9000-pu-a0-jf-a0-34.ucode +firmware: iwlwifi-9000-pu-a0-jf-b0-34.ucode +firmware: iwlwifi-9000-pu-b0-jf-b0-34.ucode +firmware: iwlwifi-9260-th-a0-jf-a0-34.ucode +firmware: iwlwifi-9260-th-b0-jf-b0-34.ucode +firmware: iwlwifi-Qu-a0-hr-a0-34.ucode +firmware: iwlwifi-Qu-a0-jf-b0-34.ucode +firmware: iwlwifi-QuQnj-a0-hr-a0-34.ucode +firmware: iwlwifi-QuQnj-a0-jf-b0-34.ucode +firmware: iwlwifi-QuQnj-f0-hr-a0-34.ucode +firmware: kaweth/new_code.bin +firmware: kaweth/new_code_fix.bin +firmware: kaweth/trigger_code.bin +firmware: kaweth/trigger_code_fix.bin +firmware: keyspan/mpr.fw +firmware: keyspan/usa18x.fw +firmware: keyspan/usa19.fw +firmware: keyspan/usa19qi.fw +firmware: keyspan/usa19qw.fw +firmware: keyspan/usa19w.fw +firmware: keyspan/usa28.fw +firmware: keyspan/usa28x.fw +firmware: keyspan/usa28xa.fw +firmware: keyspan/usa28xb.fw +firmware: keyspan/usa49w.fw +firmware: keyspan/usa49wlc.fw +firmware: keyspan_pda/keyspan_pda.fw +firmware: keyspan_pda/xircom_pgs.fw +firmware: korg/k1212.dsp +firmware: ks7010sd.rom +firmware: lattice-ecp3.bit +firmware: lbtf_usb.bin +firmware: lgs8g75.fw +firmware: libertas/cf8305.bin +firmware: libertas/cf8381.bin +firmware: libertas/cf8381_helper.bin +firmware: libertas/cf8385.bin +firmware: libertas/cf8385_helper.bin +firmware: libertas/gspi8385.bin +firmware: libertas/gspi8385_helper.bin +firmware: libertas/gspi8385_hlp.bin +firmware: libertas/gspi8686.bin +firmware: libertas/gspi8686_hlp.bin +firmware: libertas/gspi8686_v9.bin +firmware: libertas/gspi8686_v9_helper.bin +firmware: libertas/gspi8688.bin +firmware: libertas/gspi8688_helper.bin +firmware: libertas/sd8385.bin +firmware: libertas/sd8385_helper.bin +firmware: libertas/sd8686_v8.bin +firmware: libertas/sd8686_v8_helper.bin +firmware: libertas/sd8686_v9.bin +firmware: libertas/sd8686_v9_helper.bin +firmware: libertas/sd8688.bin +firmware: libertas/sd8688_helper.bin +firmware: libertas/usb8388.bin +firmware: libertas/usb8388_v5.bin +firmware: libertas/usb8388_v9.bin +firmware: libertas/usb8682.bin +firmware: libertas_cs.fw +firmware: libertas_cs_helper.fw +firmware: liquidio/lio_210nv_nic.bin +firmware: liquidio/lio_210sv_nic.bin +firmware: liquidio/lio_23xx_nic.bin +firmware: liquidio/lio_410nv_nic.bin +firmware: me2600_firmware.bin +firmware: me4000_firmware.bin +firmware: mellanox/mlxsw_spectrum-13.1530.152.mfa2 +firmware: mixart/miXart8.elf +firmware: mixart/miXart8.xlx +firmware: mixart/miXart8AES.xlx +firmware: moxa/moxa-1110.fw +firmware: moxa/moxa-1130.fw +firmware: moxa/moxa-1131.fw +firmware: moxa/moxa-1150.fw +firmware: moxa/moxa-1151.fw +firmware: mrvl/sd8688.bin +firmware: mrvl/sd8688_helper.bin +firmware: mrvl/sd8786_uapsta.bin +firmware: mrvl/sd8787_uapsta.bin +firmware: mrvl/sd8797_uapsta.bin +firmware: mrvl/sd8887_uapsta.bin +firmware: mrvl/sd8897_uapsta.bin +firmware: mrvl/sd8997_uapsta.bin +firmware: mrvl/usb8766_uapsta.bin +firmware: mrvl/usb8797_uapsta.bin +firmware: mrvl/usb8801_uapsta.bin +firmware: mrvl/usbusb8997_combo_v4.bin +firmware: mt7601u.bin +firmware: mts_cdma.fw +firmware: mts_edge.fw +firmware: mts_gsm.fw +firmware: mts_mt9234mu.fw +firmware: mts_mt9234zba.fw +firmware: multiface_firmware.bin +firmware: multiface_firmware_rev11.bin +firmware: mwl8k/fmimage_8363.fw +firmware: mwl8k/fmimage_8366.fw +firmware: mwl8k/fmimage_8366_ap-3.fw +firmware: mwl8k/fmimage_8687.fw +firmware: mwl8k/helper_8363.fw +firmware: mwl8k/helper_8366.fw +firmware: mwl8k/helper_8687.fw +firmware: myri10ge_eth_z8e.dat +firmware: myri10ge_ethp_z8e.dat +firmware: myri10ge_rss_eth_z8e.dat +firmware: myri10ge_rss_ethp_z8e.dat +firmware: netronome/nic_AMDA0081-0001_1x40.nffw +firmware: netronome/nic_AMDA0081-0001_4x10.nffw +firmware: netronome/nic_AMDA0096-0001_2x10.nffw +firmware: netronome/nic_AMDA0097-0001_2x40.nffw +firmware: netronome/nic_AMDA0097-0001_4x10_1x40.nffw +firmware: netronome/nic_AMDA0097-0001_8x10.nffw +firmware: netronome/nic_AMDA0099-0001_2x10.nffw +firmware: netronome/nic_AMDA0099-0001_2x25.nffw +firmware: ni6534a.bin +firmware: niscrb01.bin +firmware: niscrb02.bin +firmware: nvidia/gk20a/fecs_data.bin +firmware: nvidia/gk20a/fecs_inst.bin +firmware: nvidia/gk20a/gpccs_data.bin +firmware: nvidia/gk20a/gpccs_inst.bin +firmware: nvidia/gk20a/sw_bundle_init.bin +firmware: nvidia/gk20a/sw_ctx.bin +firmware: nvidia/gk20a/sw_method_init.bin +firmware: nvidia/gk20a/sw_nonctx.bin +firmware: nvidia/gm200/acr/bl.bin +firmware: nvidia/gm200/acr/ucode_load.bin +firmware: nvidia/gm200/acr/ucode_unload.bin +firmware: nvidia/gm200/gr/fecs_bl.bin +firmware: nvidia/gm200/gr/fecs_data.bin +firmware: nvidia/gm200/gr/fecs_inst.bin +firmware: nvidia/gm200/gr/fecs_sig.bin +firmware: nvidia/gm200/gr/gpccs_bl.bin +firmware: nvidia/gm200/gr/gpccs_data.bin +firmware: nvidia/gm200/gr/gpccs_inst.bin +firmware: nvidia/gm200/gr/gpccs_sig.bin +firmware: nvidia/gm200/gr/sw_bundle_init.bin +firmware: nvidia/gm200/gr/sw_ctx.bin +firmware: nvidia/gm200/gr/sw_method_init.bin +firmware: nvidia/gm200/gr/sw_nonctx.bin +firmware: nvidia/gm204/acr/bl.bin +firmware: nvidia/gm204/acr/ucode_load.bin +firmware: nvidia/gm204/acr/ucode_unload.bin +firmware: nvidia/gm204/gr/fecs_bl.bin +firmware: nvidia/gm204/gr/fecs_data.bin +firmware: nvidia/gm204/gr/fecs_inst.bin +firmware: nvidia/gm204/gr/fecs_sig.bin +firmware: nvidia/gm204/gr/gpccs_bl.bin +firmware: nvidia/gm204/gr/gpccs_data.bin +firmware: nvidia/gm204/gr/gpccs_inst.bin +firmware: nvidia/gm204/gr/gpccs_sig.bin +firmware: nvidia/gm204/gr/sw_bundle_init.bin +firmware: nvidia/gm204/gr/sw_ctx.bin +firmware: nvidia/gm204/gr/sw_method_init.bin +firmware: nvidia/gm204/gr/sw_nonctx.bin +firmware: nvidia/gm206/acr/bl.bin +firmware: nvidia/gm206/acr/ucode_load.bin +firmware: nvidia/gm206/acr/ucode_unload.bin +firmware: nvidia/gm206/gr/fecs_bl.bin +firmware: nvidia/gm206/gr/fecs_data.bin +firmware: nvidia/gm206/gr/fecs_inst.bin +firmware: nvidia/gm206/gr/fecs_sig.bin +firmware: nvidia/gm206/gr/gpccs_bl.bin +firmware: nvidia/gm206/gr/gpccs_data.bin +firmware: nvidia/gm206/gr/gpccs_inst.bin +firmware: nvidia/gm206/gr/gpccs_sig.bin +firmware: nvidia/gm206/gr/sw_bundle_init.bin +firmware: nvidia/gm206/gr/sw_ctx.bin +firmware: nvidia/gm206/gr/sw_method_init.bin +firmware: nvidia/gm206/gr/sw_nonctx.bin +firmware: nvidia/gm20b/acr/bl.bin +firmware: nvidia/gm20b/acr/ucode_load.bin +firmware: nvidia/gm20b/gr/fecs_bl.bin +firmware: nvidia/gm20b/gr/fecs_data.bin +firmware: nvidia/gm20b/gr/fecs_inst.bin +firmware: nvidia/gm20b/gr/fecs_sig.bin +firmware: nvidia/gm20b/gr/gpccs_data.bin +firmware: nvidia/gm20b/gr/gpccs_inst.bin +firmware: nvidia/gm20b/gr/sw_bundle_init.bin +firmware: nvidia/gm20b/gr/sw_ctx.bin +firmware: nvidia/gm20b/gr/sw_method_init.bin +firmware: nvidia/gm20b/gr/sw_nonctx.bin +firmware: nvidia/gm20b/pmu/desc.bin +firmware: nvidia/gm20b/pmu/image.bin +firmware: nvidia/gm20b/pmu/sig.bin +firmware: nvidia/gp100/acr/bl.bin +firmware: nvidia/gp100/acr/ucode_load.bin +firmware: nvidia/gp100/acr/ucode_unload.bin +firmware: nvidia/gp100/gr/fecs_bl.bin +firmware: nvidia/gp100/gr/fecs_data.bin +firmware: nvidia/gp100/gr/fecs_inst.bin +firmware: nvidia/gp100/gr/fecs_sig.bin +firmware: nvidia/gp100/gr/gpccs_bl.bin +firmware: nvidia/gp100/gr/gpccs_data.bin +firmware: nvidia/gp100/gr/gpccs_inst.bin +firmware: nvidia/gp100/gr/gpccs_sig.bin +firmware: nvidia/gp100/gr/sw_bundle_init.bin +firmware: nvidia/gp100/gr/sw_ctx.bin +firmware: nvidia/gp100/gr/sw_method_init.bin +firmware: nvidia/gp100/gr/sw_nonctx.bin +firmware: nvidia/gp102/acr/bl.bin +firmware: nvidia/gp102/acr/ucode_load.bin +firmware: nvidia/gp102/acr/ucode_unload.bin +firmware: nvidia/gp102/acr/unload_bl.bin +firmware: nvidia/gp102/gr/fecs_bl.bin +firmware: nvidia/gp102/gr/fecs_data.bin +firmware: nvidia/gp102/gr/fecs_inst.bin +firmware: nvidia/gp102/gr/fecs_sig.bin +firmware: nvidia/gp102/gr/gpccs_bl.bin +firmware: nvidia/gp102/gr/gpccs_data.bin +firmware: nvidia/gp102/gr/gpccs_inst.bin +firmware: nvidia/gp102/gr/gpccs_sig.bin +firmware: nvidia/gp102/gr/sw_bundle_init.bin +firmware: nvidia/gp102/gr/sw_ctx.bin +firmware: nvidia/gp102/gr/sw_method_init.bin +firmware: nvidia/gp102/gr/sw_nonctx.bin +firmware: nvidia/gp102/nvdec/scrubber.bin +firmware: nvidia/gp102/sec2/desc.bin +firmware: nvidia/gp102/sec2/image.bin +firmware: nvidia/gp102/sec2/sig.bin +firmware: nvidia/gp104/acr/bl.bin +firmware: nvidia/gp104/acr/ucode_load.bin +firmware: nvidia/gp104/acr/ucode_unload.bin +firmware: nvidia/gp104/acr/unload_bl.bin +firmware: nvidia/gp104/gr/fecs_bl.bin +firmware: nvidia/gp104/gr/fecs_data.bin +firmware: nvidia/gp104/gr/fecs_inst.bin +firmware: nvidia/gp104/gr/fecs_sig.bin +firmware: nvidia/gp104/gr/gpccs_bl.bin +firmware: nvidia/gp104/gr/gpccs_data.bin +firmware: nvidia/gp104/gr/gpccs_inst.bin +firmware: nvidia/gp104/gr/gpccs_sig.bin +firmware: nvidia/gp104/gr/sw_bundle_init.bin +firmware: nvidia/gp104/gr/sw_ctx.bin +firmware: nvidia/gp104/gr/sw_method_init.bin +firmware: nvidia/gp104/gr/sw_nonctx.bin +firmware: nvidia/gp104/nvdec/scrubber.bin +firmware: nvidia/gp104/sec2/desc.bin +firmware: nvidia/gp104/sec2/image.bin +firmware: nvidia/gp104/sec2/sig.bin +firmware: nvidia/gp106/acr/bl.bin +firmware: nvidia/gp106/acr/ucode_load.bin +firmware: nvidia/gp106/acr/ucode_unload.bin +firmware: nvidia/gp106/acr/unload_bl.bin +firmware: nvidia/gp106/gr/fecs_bl.bin +firmware: nvidia/gp106/gr/fecs_data.bin +firmware: nvidia/gp106/gr/fecs_inst.bin +firmware: nvidia/gp106/gr/fecs_sig.bin +firmware: nvidia/gp106/gr/gpccs_bl.bin +firmware: nvidia/gp106/gr/gpccs_data.bin +firmware: nvidia/gp106/gr/gpccs_inst.bin +firmware: nvidia/gp106/gr/gpccs_sig.bin +firmware: nvidia/gp106/gr/sw_bundle_init.bin +firmware: nvidia/gp106/gr/sw_ctx.bin +firmware: nvidia/gp106/gr/sw_method_init.bin +firmware: nvidia/gp106/gr/sw_nonctx.bin +firmware: nvidia/gp106/nvdec/scrubber.bin +firmware: nvidia/gp106/sec2/desc.bin +firmware: nvidia/gp106/sec2/image.bin +firmware: nvidia/gp106/sec2/sig.bin +firmware: nvidia/gp107/acr/bl.bin +firmware: nvidia/gp107/acr/ucode_load.bin +firmware: nvidia/gp107/acr/ucode_unload.bin +firmware: nvidia/gp107/acr/unload_bl.bin +firmware: nvidia/gp107/gr/fecs_bl.bin +firmware: nvidia/gp107/gr/fecs_data.bin +firmware: nvidia/gp107/gr/fecs_inst.bin +firmware: nvidia/gp107/gr/fecs_sig.bin +firmware: nvidia/gp107/gr/gpccs_bl.bin +firmware: nvidia/gp107/gr/gpccs_data.bin +firmware: nvidia/gp107/gr/gpccs_inst.bin +firmware: nvidia/gp107/gr/gpccs_sig.bin +firmware: nvidia/gp107/gr/sw_bundle_init.bin +firmware: nvidia/gp107/gr/sw_ctx.bin +firmware: nvidia/gp107/gr/sw_method_init.bin +firmware: nvidia/gp107/gr/sw_nonctx.bin +firmware: nvidia/gp107/nvdec/scrubber.bin +firmware: nvidia/gp107/sec2/desc.bin +firmware: nvidia/gp107/sec2/image.bin +firmware: nvidia/gp107/sec2/sig.bin +firmware: nvidia/gp10b/acr/bl.bin +firmware: nvidia/gp10b/acr/ucode_load.bin +firmware: nvidia/gp10b/gr/fecs_bl.bin +firmware: nvidia/gp10b/gr/fecs_data.bin +firmware: nvidia/gp10b/gr/fecs_inst.bin +firmware: nvidia/gp10b/gr/fecs_sig.bin +firmware: nvidia/gp10b/gr/gpccs_bl.bin +firmware: nvidia/gp10b/gr/gpccs_data.bin +firmware: nvidia/gp10b/gr/gpccs_inst.bin +firmware: nvidia/gp10b/gr/gpccs_sig.bin +firmware: nvidia/gp10b/gr/sw_bundle_init.bin +firmware: nvidia/gp10b/gr/sw_ctx.bin +firmware: nvidia/gp10b/gr/sw_method_init.bin +firmware: nvidia/gp10b/gr/sw_nonctx.bin +firmware: nvidia/gp10b/pmu/desc.bin +firmware: nvidia/gp10b/pmu/image.bin +firmware: nvidia/gp10b/pmu/sig.bin +firmware: nvidia/tegra124/vic03_ucode.bin +firmware: nvidia/tegra124/xusb.bin +firmware: nvidia/tegra210/xusb.bin +firmware: orinoco_ezusb_fw +firmware: ositech/Xilinx7OD.bin +firmware: pca200e.bin +firmware: pca200e_ecd.bin2 +firmware: pcxhr/dspb1222e.b56 +firmware: pcxhr/dspb1222hr.b56 +firmware: pcxhr/dspb882e.b56 +firmware: pcxhr/dspb882hr.b56 +firmware: pcxhr/dspb924.b56 +firmware: pcxhr/dspd1222.d56 +firmware: pcxhr/dspd222.d56 +firmware: pcxhr/dspd882.d56 +firmware: pcxhr/dspe882.e56 +firmware: pcxhr/dspe924.e56 +firmware: pcxhr/xlxc1222e.dat +firmware: pcxhr/xlxc1222hr.dat +firmware: pcxhr/xlxc222.dat +firmware: pcxhr/xlxc882e.dat +firmware: pcxhr/xlxc882hr.dat +firmware: pcxhr/xlxc924.dat +firmware: pcxhr/xlxint.dat +firmware: phanfw.bin +firmware: prism2_ru.fw +firmware: prism_ap_fw.bin +firmware: prism_sta_fw.bin +firmware: qat_895xcc.bin +firmware: qed/qed_init_values_zipped-8.20.0.0.bin +firmware: ql2100_fw.bin +firmware: ql2200_fw.bin +firmware: ql2300_fw.bin +firmware: ql2322_fw.bin +firmware: ql2400_fw.bin +firmware: ql2500_fw.bin +firmware: qlogic/1040.bin +firmware: qlogic/12160.bin +firmware: qlogic/1280.bin +firmware: qlogic/sd7220.fw +firmware: r8a779x_usb3_v1.dlmem +firmware: r8a779x_usb3_v2.dlmem +firmware: r8a779x_usb3_v3.dlmem +firmware: radeon/ARUBA_me.bin +firmware: radeon/ARUBA_pfp.bin +firmware: radeon/ARUBA_rlc.bin +firmware: radeon/BARTS_mc.bin +firmware: radeon/BARTS_me.bin +firmware: radeon/BARTS_pfp.bin +firmware: radeon/BARTS_smc.bin +firmware: radeon/BONAIRE_ce.bin +firmware: radeon/BONAIRE_mc.bin +firmware: radeon/BONAIRE_mc2.bin +firmware: radeon/BONAIRE_me.bin +firmware: radeon/BONAIRE_mec.bin +firmware: radeon/BONAIRE_pfp.bin +firmware: radeon/BONAIRE_rlc.bin +firmware: radeon/BONAIRE_sdma.bin +firmware: radeon/BONAIRE_smc.bin +firmware: radeon/BONAIRE_uvd.bin +firmware: radeon/BONAIRE_vce.bin +firmware: radeon/BTC_rlc.bin +firmware: radeon/CAICOS_mc.bin +firmware: radeon/CAICOS_me.bin +firmware: radeon/CAICOS_pfp.bin +firmware: radeon/CAICOS_smc.bin +firmware: radeon/CAYMAN_mc.bin +firmware: radeon/CAYMAN_me.bin +firmware: radeon/CAYMAN_pfp.bin +firmware: radeon/CAYMAN_rlc.bin +firmware: radeon/CAYMAN_smc.bin +firmware: radeon/CEDAR_me.bin +firmware: radeon/CEDAR_pfp.bin +firmware: radeon/CEDAR_rlc.bin +firmware: radeon/CEDAR_smc.bin +firmware: radeon/CYPRESS_me.bin +firmware: radeon/CYPRESS_pfp.bin +firmware: radeon/CYPRESS_rlc.bin +firmware: radeon/CYPRESS_smc.bin +firmware: radeon/CYPRESS_uvd.bin +firmware: radeon/HAINAN_ce.bin +firmware: radeon/HAINAN_mc.bin +firmware: radeon/HAINAN_mc2.bin +firmware: radeon/HAINAN_me.bin +firmware: radeon/HAINAN_pfp.bin +firmware: radeon/HAINAN_rlc.bin +firmware: radeon/HAINAN_smc.bin +firmware: radeon/HAWAII_ce.bin +firmware: radeon/HAWAII_mc.bin +firmware: radeon/HAWAII_mc2.bin +firmware: radeon/HAWAII_me.bin +firmware: radeon/HAWAII_mec.bin +firmware: radeon/HAWAII_pfp.bin +firmware: radeon/HAWAII_rlc.bin +firmware: radeon/HAWAII_sdma.bin +firmware: radeon/HAWAII_smc.bin +firmware: radeon/JUNIPER_me.bin +firmware: radeon/JUNIPER_pfp.bin +firmware: radeon/JUNIPER_rlc.bin +firmware: radeon/JUNIPER_smc.bin +firmware: radeon/KABINI_ce.bin +firmware: radeon/KABINI_me.bin +firmware: radeon/KABINI_mec.bin +firmware: radeon/KABINI_pfp.bin +firmware: radeon/KABINI_rlc.bin +firmware: radeon/KABINI_sdma.bin +firmware: radeon/KAVERI_ce.bin +firmware: radeon/KAVERI_me.bin +firmware: radeon/KAVERI_mec.bin +firmware: radeon/KAVERI_pfp.bin +firmware: radeon/KAVERI_rlc.bin +firmware: radeon/KAVERI_sdma.bin +firmware: radeon/MULLINS_ce.bin +firmware: radeon/MULLINS_me.bin +firmware: radeon/MULLINS_mec.bin +firmware: radeon/MULLINS_pfp.bin +firmware: radeon/MULLINS_rlc.bin +firmware: radeon/MULLINS_sdma.bin +firmware: radeon/OLAND_ce.bin +firmware: radeon/OLAND_mc.bin +firmware: radeon/OLAND_mc2.bin +firmware: radeon/OLAND_me.bin +firmware: radeon/OLAND_pfp.bin +firmware: radeon/OLAND_rlc.bin +firmware: radeon/OLAND_smc.bin +firmware: radeon/PALM_me.bin +firmware: radeon/PALM_pfp.bin +firmware: radeon/PITCAIRN_ce.bin +firmware: radeon/PITCAIRN_mc.bin +firmware: radeon/PITCAIRN_mc2.bin +firmware: radeon/PITCAIRN_me.bin +firmware: radeon/PITCAIRN_pfp.bin +firmware: radeon/PITCAIRN_rlc.bin +firmware: radeon/PITCAIRN_smc.bin +firmware: radeon/R100_cp.bin +firmware: radeon/R200_cp.bin +firmware: radeon/R300_cp.bin +firmware: radeon/R420_cp.bin +firmware: radeon/R520_cp.bin +firmware: radeon/R600_me.bin +firmware: radeon/R600_pfp.bin +firmware: radeon/R600_rlc.bin +firmware: radeon/R600_uvd.bin +firmware: radeon/R700_rlc.bin +firmware: radeon/REDWOOD_me.bin +firmware: radeon/REDWOOD_pfp.bin +firmware: radeon/REDWOOD_rlc.bin +firmware: radeon/REDWOOD_smc.bin +firmware: radeon/RS600_cp.bin +firmware: radeon/RS690_cp.bin +firmware: radeon/RS780_me.bin +firmware: radeon/RS780_pfp.bin +firmware: radeon/RS780_uvd.bin +firmware: radeon/RV610_me.bin +firmware: radeon/RV610_pfp.bin +firmware: radeon/RV620_me.bin +firmware: radeon/RV620_pfp.bin +firmware: radeon/RV630_me.bin +firmware: radeon/RV630_pfp.bin +firmware: radeon/RV635_me.bin +firmware: radeon/RV635_pfp.bin +firmware: radeon/RV670_me.bin +firmware: radeon/RV670_pfp.bin +firmware: radeon/RV710_me.bin +firmware: radeon/RV710_pfp.bin +firmware: radeon/RV710_smc.bin +firmware: radeon/RV710_uvd.bin +firmware: radeon/RV730_me.bin +firmware: radeon/RV730_pfp.bin +firmware: radeon/RV730_smc.bin +firmware: radeon/RV740_smc.bin +firmware: radeon/RV770_me.bin +firmware: radeon/RV770_pfp.bin +firmware: radeon/RV770_smc.bin +firmware: radeon/RV770_uvd.bin +firmware: radeon/SUMO2_me.bin +firmware: radeon/SUMO2_pfp.bin +firmware: radeon/SUMO_me.bin +firmware: radeon/SUMO_pfp.bin +firmware: radeon/SUMO_rlc.bin +firmware: radeon/SUMO_uvd.bin +firmware: radeon/TAHITI_ce.bin +firmware: radeon/TAHITI_mc.bin +firmware: radeon/TAHITI_mc2.bin +firmware: radeon/TAHITI_me.bin +firmware: radeon/TAHITI_pfp.bin +firmware: radeon/TAHITI_rlc.bin +firmware: radeon/TAHITI_smc.bin +firmware: radeon/TAHITI_uvd.bin +firmware: radeon/TAHITI_vce.bin +firmware: radeon/TURKS_mc.bin +firmware: radeon/TURKS_me.bin +firmware: radeon/TURKS_pfp.bin +firmware: radeon/TURKS_smc.bin +firmware: radeon/VERDE_ce.bin +firmware: radeon/VERDE_mc.bin +firmware: radeon/VERDE_mc2.bin +firmware: radeon/VERDE_me.bin +firmware: radeon/VERDE_pfp.bin +firmware: radeon/VERDE_rlc.bin +firmware: radeon/VERDE_smc.bin +firmware: radeon/banks_k_2_smc.bin +firmware: radeon/bonaire_ce.bin +firmware: radeon/bonaire_k_smc.bin +firmware: radeon/bonaire_mc.bin +firmware: radeon/bonaire_me.bin +firmware: radeon/bonaire_mec.bin +firmware: radeon/bonaire_pfp.bin +firmware: radeon/bonaire_rlc.bin +firmware: radeon/bonaire_sdma.bin +firmware: radeon/bonaire_sdma1.bin +firmware: radeon/bonaire_smc.bin +firmware: radeon/bonaire_uvd.bin +firmware: radeon/bonaire_vce.bin +firmware: radeon/hainan_ce.bin +firmware: radeon/hainan_k_smc.bin +firmware: radeon/hainan_mc.bin +firmware: radeon/hainan_me.bin +firmware: radeon/hainan_pfp.bin +firmware: radeon/hainan_rlc.bin +firmware: radeon/hainan_smc.bin +firmware: radeon/hawaii_ce.bin +firmware: radeon/hawaii_k_smc.bin +firmware: radeon/hawaii_mc.bin +firmware: radeon/hawaii_me.bin +firmware: radeon/hawaii_mec.bin +firmware: radeon/hawaii_pfp.bin +firmware: radeon/hawaii_rlc.bin +firmware: radeon/hawaii_sdma.bin +firmware: radeon/hawaii_sdma1.bin +firmware: radeon/hawaii_smc.bin +firmware: radeon/hawaii_uvd.bin +firmware: radeon/hawaii_vce.bin +firmware: radeon/kabini_ce.bin +firmware: radeon/kabini_me.bin +firmware: radeon/kabini_mec.bin +firmware: radeon/kabini_pfp.bin +firmware: radeon/kabini_rlc.bin +firmware: radeon/kabini_sdma.bin +firmware: radeon/kabini_sdma1.bin +firmware: radeon/kabini_uvd.bin +firmware: radeon/kabini_vce.bin +firmware: radeon/kaveri_ce.bin +firmware: radeon/kaveri_me.bin +firmware: radeon/kaveri_mec.bin +firmware: radeon/kaveri_mec2.bin +firmware: radeon/kaveri_pfp.bin +firmware: radeon/kaveri_rlc.bin +firmware: radeon/kaveri_sdma.bin +firmware: radeon/kaveri_sdma1.bin +firmware: radeon/kaveri_uvd.bin +firmware: radeon/kaveri_vce.bin +firmware: radeon/mullins_ce.bin +firmware: radeon/mullins_me.bin +firmware: radeon/mullins_mec.bin +firmware: radeon/mullins_pfp.bin +firmware: radeon/mullins_rlc.bin +firmware: radeon/mullins_sdma.bin +firmware: radeon/mullins_sdma1.bin +firmware: radeon/mullins_uvd.bin +firmware: radeon/mullins_vce.bin +firmware: radeon/oland_ce.bin +firmware: radeon/oland_k_smc.bin +firmware: radeon/oland_mc.bin +firmware: radeon/oland_me.bin +firmware: radeon/oland_pfp.bin +firmware: radeon/oland_rlc.bin +firmware: radeon/oland_smc.bin +firmware: radeon/pitcairn_ce.bin +firmware: radeon/pitcairn_k_smc.bin +firmware: radeon/pitcairn_mc.bin +firmware: radeon/pitcairn_me.bin +firmware: radeon/pitcairn_pfp.bin +firmware: radeon/pitcairn_rlc.bin +firmware: radeon/pitcairn_smc.bin +firmware: radeon/si58_mc.bin +firmware: radeon/tahiti_ce.bin +firmware: radeon/tahiti_mc.bin +firmware: radeon/tahiti_me.bin +firmware: radeon/tahiti_pfp.bin +firmware: radeon/tahiti_rlc.bin +firmware: radeon/tahiti_smc.bin +firmware: radeon/verde_ce.bin +firmware: radeon/verde_k_smc.bin +firmware: radeon/verde_mc.bin +firmware: radeon/verde_me.bin +firmware: radeon/verde_pfp.bin +firmware: radeon/verde_rlc.bin +firmware: radeon/verde_smc.bin +firmware: riptide.hex +firmware: rp2.fw +firmware: rpm_firmware.bin +firmware: rs9113_wlan_qspi.rps +firmware: rt2561.bin +firmware: rt2561s.bin +firmware: rt2661.bin +firmware: rt2860.bin +firmware: rt2870.bin +firmware: rt73.bin +firmware: rtl_nic/rtl8105e-1.fw +firmware: rtl_nic/rtl8106e-1.fw +firmware: rtl_nic/rtl8106e-2.fw +firmware: rtl_nic/rtl8107e-1.fw +firmware: rtl_nic/rtl8107e-2.fw +firmware: rtl_nic/rtl8168d-1.fw +firmware: rtl_nic/rtl8168d-2.fw +firmware: rtl_nic/rtl8168e-1.fw +firmware: rtl_nic/rtl8168e-2.fw +firmware: rtl_nic/rtl8168e-3.fw +firmware: rtl_nic/rtl8168f-1.fw +firmware: rtl_nic/rtl8168f-2.fw +firmware: rtl_nic/rtl8168g-2.fw +firmware: rtl_nic/rtl8168g-3.fw +firmware: rtl_nic/rtl8168h-1.fw +firmware: rtl_nic/rtl8168h-2.fw +firmware: rtl_nic/rtl8402-1.fw +firmware: rtl_nic/rtl8411-1.fw +firmware: rtl_nic/rtl8411-2.fw +firmware: rtlwifi/rtl8188efw.bin +firmware: rtlwifi/rtl8192cfw.bin +firmware: rtlwifi/rtl8192cfwU.bin +firmware: rtlwifi/rtl8192cfwU_B.bin +firmware: rtlwifi/rtl8192cufw.bin +firmware: rtlwifi/rtl8192cufw_A.bin +firmware: rtlwifi/rtl8192cufw_B.bin +firmware: rtlwifi/rtl8192cufw_TMSC.bin +firmware: rtlwifi/rtl8192defw.bin +firmware: rtlwifi/rtl8192eefw.bin +firmware: rtlwifi/rtl8192eu_nic.bin +firmware: rtlwifi/rtl8192sefw.bin +firmware: rtlwifi/rtl8712u.bin +firmware: rtlwifi/rtl8723aufw_A.bin +firmware: rtlwifi/rtl8723aufw_B.bin +firmware: rtlwifi/rtl8723aufw_B_NoBT.bin +firmware: rtlwifi/rtl8723befw.bin +firmware: rtlwifi/rtl8723befw_36.bin +firmware: rtlwifi/rtl8723bu_bt.bin +firmware: rtlwifi/rtl8723bu_nic.bin +firmware: rtlwifi/rtl8723efw.bin +firmware: rtlwifi/rtl8821aefw.bin +firmware: rtlwifi/rtl8821aefw_29.bin +firmware: rtlwifi/rtl8822befw.bin +firmware: sb16/alaw_main.csp +firmware: sb16/ima_adpcm_capture.csp +firmware: sb16/ima_adpcm_init.csp +firmware: sb16/ima_adpcm_playback.csp +firmware: sb16/mulaw_main.csp +firmware: scope.cod +firmware: sd8385.bin +firmware: sd8385_helper.bin +firmware: sd8686.bin +firmware: sd8686_helper.bin +firmware: sd8688.bin +firmware: sd8688_helper.bin +firmware: slicoss/gbdownload.sys +firmware: slicoss/gbrcvucode.sys +firmware: slicoss/oasisdownload.sys +firmware: slicoss/oasisrcvucode.sys +firmware: sms1xxx-hcw-55xxx-dvbt-02.fw +firmware: sms1xxx-hcw-55xxx-isdbt-02.fw +firmware: sms1xxx-nova-a-dvbt-01.fw +firmware: sms1xxx-nova-b-dvbt-01.fw +firmware: sms1xxx-stellar-dvbt-01.fw +firmware: sndscape.co0 +firmware: sndscape.co1 +firmware: sndscape.co2 +firmware: sndscape.co3 +firmware: sndscape.co4 +firmware: softing-4.6/bcard.bin +firmware: softing-4.6/bcard2.bin +firmware: softing-4.6/cancard.bin +firmware: softing-4.6/cancrd2.bin +firmware: softing-4.6/cansja.bin +firmware: softing-4.6/ldcard.bin +firmware: softing-4.6/ldcard2.bin +firmware: solos-FPGA.bin +firmware: solos-Firmware.bin +firmware: solos-db-FPGA.bin +firmware: sun/cassini.bin +firmware: symbol_sp24t_prim_fw +firmware: symbol_sp24t_sec_fw +firmware: tdmb_denver.inp +firmware: tdmb_nova_12mhz.inp +firmware: tdmb_nova_12mhz_b0.inp +firmware: tehuti/bdx.bin +firmware: ti-connectivity/wl1251-fw.bin +firmware: ti-connectivity/wl1251-nvs.bin +firmware: ti-connectivity/wl127x-fw-5-mr.bin +firmware: ti-connectivity/wl127x-fw-5-plt.bin +firmware: ti-connectivity/wl127x-fw-5-sr.bin +firmware: ti-connectivity/wl128x-fw-5-mr.bin +firmware: ti-connectivity/wl128x-fw-5-plt.bin +firmware: ti-connectivity/wl128x-fw-5-sr.bin +firmware: ti-connectivity/wl18xx-fw-4.bin +firmware: ti_3410.fw +firmware: ti_5052.fw +firmware: tigon/tg3.bin +firmware: tigon/tg3_tso.bin +firmware: tigon/tg3_tso5.bin +firmware: ttusb-budget/dspbootcode.bin +firmware: turtlebeach/msndinit.bin +firmware: turtlebeach/msndperm.bin +firmware: turtlebeach/pndsperm.bin +firmware: turtlebeach/pndspini.bin +firmware: ueagle-atm/930-fpga.bin +firmware: ueagle-atm/CMV4i.bin +firmware: ueagle-atm/CMV4i.bin.v2 +firmware: ueagle-atm/CMV4p.bin +firmware: ueagle-atm/CMV4p.bin.v2 +firmware: ueagle-atm/CMV9i.bin +firmware: ueagle-atm/CMV9i.bin.v2 +firmware: ueagle-atm/CMV9p.bin +firmware: ueagle-atm/CMV9p.bin.v2 +firmware: ueagle-atm/CMVei.bin +firmware: ueagle-atm/CMVei.bin.v2 +firmware: ueagle-atm/CMVep.bin +firmware: ueagle-atm/CMVep.bin.v2 +firmware: ueagle-atm/DSP4i.bin +firmware: ueagle-atm/DSP4p.bin +firmware: ueagle-atm/DSP9i.bin +firmware: ueagle-atm/DSP9p.bin +firmware: ueagle-atm/DSPei.bin +firmware: ueagle-atm/DSPep.bin +firmware: ueagle-atm/adi930.fw +firmware: ueagle-atm/eagle.fw +firmware: ueagle-atm/eagleI.fw +firmware: ueagle-atm/eagleII.fw +firmware: ueagle-atm/eagleIII.fw +firmware: ueagle-atm/eagleIV.fw +firmware: usb8388.bin +firmware: usbdux_firmware.bin +firmware: usbduxfast_firmware.bin +firmware: usbduxsigma_firmware.bin +firmware: v4l-cx231xx-avcore-01.fw +firmware: v4l-cx23418-apu.fw +firmware: v4l-cx23418-cpu.fw +firmware: v4l-cx23418-dig.fw +firmware: v4l-cx2341x-dec.fw +firmware: v4l-cx2341x-enc.fw +firmware: v4l-cx2341x-init.mpg +firmware: v4l-cx23885-avcore-01.fw +firmware: v4l-cx23885-enc.fw +firmware: v4l-cx25840.fw +firmware: v4l-pvrusb2-24xxx-01.fw +firmware: v4l-pvrusb2-29xxx-01.fw +firmware: v4l-pvrusb2-73xxx-01.fw +firmware: vicam/firmware.fw +firmware: vntwusb.fw +firmware: vpdma-1b8.bin +firmware: vx/bd56002.boot +firmware: vx/bd563s3.boot +firmware: vx/bd563v2.boot +firmware: vx/bx_1_vp4.b56 +firmware: vx/bx_1_vxp.b56 +firmware: vx/l_1_v22.d56 +firmware: vx/l_1_vp4.d56 +firmware: vx/l_1_vx2.d56 +firmware: vx/l_1_vxp.d56 +firmware: vx/x1_1_vp4.xlx +firmware: vx/x1_1_vx2.xlx +firmware: vx/x1_1_vxp.xlx +firmware: vx/x1_2_v22.xlx +firmware: vxge/X3fw-pxe.ncf +firmware: vxge/X3fw.ncf +firmware: wavefront.os +firmware: wd719x-risc.bin +firmware: wd719x-wcs.bin +firmware: whiteheat.fw +firmware: whiteheat_loader.fw +firmware: wil6210.brd +firmware: wil6210.fw +firmware: wil6210_sparrow_plus.fw +firmware: wlan/prima/WCNSS_qcom_wlan_nv.bin +firmware: xc3028-v27.fw +firmware: xc3028L-v36.fw +firmware: yam/1200.bin +firmware: yam/9600.bin +firmware: yamaha/ds1_ctrl.fw +firmware: yamaha/ds1_dsp.fw +firmware: yamaha/ds1e_ctrl.fw +firmware: yamaha/yss225_registers.bin +firmware: zd1201-ap.fw +firmware: zd1201.fw +firmware: zd1211/zd1211_ub +firmware: zd1211/zd1211_uphr +firmware: zd1211/zd1211_ur +firmware: zd1211/zd1211b_ub +firmware: zd1211/zd1211b_uphr +firmware: zd1211/zd1211b_ur --- linux-aws-4.15.0.orig/debian.aws/changelog +++ linux-aws-4.15.0/debian.aws/changelog @@ -0,0 +1,13 @@ +linux-aws (4.15.0-1001.1) bionic; urgency=medium + + [ Kamal Mostafa ] + + * Initial linux-aws packaging based on linux (4.15.0-11.12) bionic + + -- Kamal Mostafa Fri, 23 Feb 2018 13:45:39 -0800 + +linux-aws (4.15.0-1000.0) bionic; urgency=medium + + * Empty entry + + -- Kamal Mostafa Wed, 21 Feb 2018 14:36:49 -0800 --- linux-aws-4.15.0.orig/debian.aws/config/amd64/config.common.amd64 +++ linux-aws-4.15.0/debian.aws/config/amd64/config.common.amd64 @@ -0,0 +1,3 @@ +# +# Config options for config.common.amd64 automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.aws/config/amd64/config.flavour.aws +++ linux-aws-4.15.0/debian.aws/config/amd64/config.flavour.aws @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.aws automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.aws/config/annotations +++ linux-aws-4.15.0/debian.aws/config/annotations @@ -0,0 +1,12072 @@ +# Menu: HEADER +# FORMAT: 2 +# ARCH: x86 arm arm64 s390 powerpc + +# Mark debugging symbols. +# exceptions +CONFIG_DEBUG_FS note +CONFIG_DEBUG_KERNEL note + +# Menu: ROOT +CONFIG_LIVEPATCH policy<{'amd64': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: ACPI (Advanced Configuration and Power Interface) Support +CONFIG_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DEBUGGER policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_DEBUGGER_USER policy<{'amd64': 'y'}> +CONFIG_ACPI_PROCFS_POWER policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_EC_DEBUGFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_AC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_BATTERY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_BUTTON policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_VIDEO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_FAN policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DOCK policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_PROCESSOR policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_IPMI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_PROCESSOR_AGGREGATOR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_NUMA policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_ACPI_CUSTOM_DSDT_FILE policy<{'amd64': '""', 'i386': '""'}> +CONFIG_ACPI_TABLE_UPGRADE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DEBUG policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_PCI_SLOT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_X86_PM_TIMER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_CONTAINER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_HOTPLUG_MEMORY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_SBS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_HED policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_CUSTOM_METHOD policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_BGRT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_REDUCED_HARDWARE_ONLY policy<{'amd64': 'n', 'arm64': 'y', 'i386': 'n'}> +CONFIG_ACPI_NFIT policy<{'amd64': 'm', 'arm64': 'm'}> +CONFIG_DPTF_POWER policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_EXTLOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TPS68470_PMIC_OPREGION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_ACPI_PROCFS_POWER mark +CONFIG_ACPI_CUSTOM_METHOD mark note +CONFIG_ACPI_CUSTOM_DSDT_FILE note + +# Menu: ACPI (Advanced Configuration and Power Interface) Support >> ACPI Platform Error Interface (APEI) +CONFIG_ACPI_APEI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_GHES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_PCIEAER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_SEA policy<{'arm64': 'y'}> +CONFIG_ACPI_APEI_MEMORY_FAILURE policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_ACPI_APEI_EINJ policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_APEI_ERST_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> + +# Menu: ACPI (Advanced Configuration and Power Interface) Support >> PMIC (Power Management Integrated Circuit) operation region support +CONFIG_PMIC_OPREGION policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> + +# Menu: ARM Accelerated Cryptographic Algorithms +CONFIG_CRYPTO_CHACHA20_NEON policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: ARM Accelerated Cryptographic Algorithms >> Architecture: arm +CONFIG_ARM_CRYPTO policy<{'armhf': 'y'}> +CONFIG_CRYPTO_SHA1_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA1_ARM_NEON policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA1_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA2_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA256_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA512_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM_BS policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_GHASH_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_CRC32_ARM_CE policy<{'armhf': 'm'}> + +# Menu: ARM64 Accelerated Cryptographic Algorithms + +# Menu: ARM64 Accelerated Cryptographic Algorithms >> Architecture: arm64 +CONFIG_ARM64_CRYPTO policy<{'arm64': 'y'}> +CONFIG_CRYPTO_SHA256_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA512_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA1_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA2_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_GHASH_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_CRC32_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE_CCM policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE_BLK policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_NEON_BLK policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_BS policy<{'arm64': 'm'}> + +# Menu: Advanced setup >> Architecture: powerpc + +# Menu: Advanced setup >> Prompt for advanced kernel configuration options >> Architecture: powerpc + +# Menu: Advanced setup >> Prompt for advanced kernel configuration options >> Pinned Kernel TLBs (860 ONLY) >> Architecture: powerpc + +# Menu: Architecture: arm +CONFIG_ARM_DMA_IOMMU_ALIGNMENT policy<{'armhf': '8'}> +CONFIG_ARM_PATCH_PHYS_VIRT policy<{'armhf': 'y'}> + +# Menu: Architecture: powerpc +CONFIG_PPC64 policy<{'ppc64el': 'y'}> +CONFIG_NR_IRQS policy<{'ppc64el': '512'}> +CONFIG_SCOM_DEBUGFS policy<{'ppc64el': 'y'}> + +# Menu: Architecture: s390 +CONFIG_KMSG_IDS policy<{'s390x': 'y'}> + +# Menu: Architecture: x86 +CONFIG_64BIT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Boot options +CONFIG_CMDLINE policy<{'arm64': '"console=ttyAMA0"', 'armhf': '""'}> +CONFIG_KEXEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRASH_DUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EFI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_DMI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CMDLINE_FORCE policy<{'arm64': 'n'}> +# +CONFIG_CRASH_DUMP mark note +CONFIG_EFI flag + +# Menu: Boot options >> Architecture: arm +CONFIG_USE_OF policy<{'armhf': 'y'}> +CONFIG_ATAGS policy<{'armhf': 'y'}> +CONFIG_DEPRECATED_PARAM_STRUCT policy<{'armhf': 'n'}> +CONFIG_ARM_APPENDED_DTB policy<{'armhf': 'y'}> +CONFIG_ARM_ATAG_DTB_COMPAT policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ATAGS_PROC policy<{'armhf': 'y'}> +CONFIG_AUTO_ZRELADDR policy<{'armhf': 'y'}> +# +CONFIG_ARM_ATAG_DTB_COMPAT flag + +# Menu: Boot options >> Architecture: arm64 +CONFIG_ARM64_ACPI_PARKING_PROTOCOL policy<{'arm64': 'y'}> + +# Menu: Boot options >> Kernel command line type + +# Menu: Boot options >> Kernel command line type >> Architecture: arm +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER policy<{'armhf-generic': 'n'}> +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND policy<{'armhf-generic': 'y'}> + +# Menu: Bus options (PCI etc.) +CONFIG_ISA policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> Architecture: arm + +# Menu: Bus options (PCI etc.) >> Architecture: arm64 + +# Menu: Bus options (PCI etc.) >> Architecture: powerpc +CONFIG_FSL_LBC policy<{'ppc64el': 'y'}> + +# Menu: Bus options (PCI etc.) >> Architecture: s390 +CONFIG_QDIO policy<{'s390x': 'm'}> +CONFIG_CHSC_SCH policy<{'s390x': 'm'}> +CONFIG_SCM_BUS policy<{'s390x': 'y'}> +CONFIG_EADM_SCH policy<{'s390x': 'm'}> +CONFIG_VFIO_CCW policy<{'s390x': 'm'}> + +# Menu: Bus options (PCI etc.) >> Architecture: x86 +CONFIG_ISA_BUS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ISA_DMA_API policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCx200 policy<{'i386': 'm'}> +CONFIG_SCx200HR_TIMER policy<{'i386': 'm'}> +CONFIG_ALIX policy<{'i386': 'y'}> +CONFIG_NET5501 policy<{'i386': 'y'}> +CONFIG_GEOS policy<{'i386': 'y'}> +CONFIG_X86_SYSFB policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_X86_SYSFB flag + +# Menu: Bus options (PCI etc.) >> DesignWare PCI Core Support +CONFIG_PCI_DRA7XX policy<{'armhf': 'y'}> +CONFIG_PCI_DRA7XX_HOST policy<{'armhf': 'y'}> +CONFIG_PCI_DRA7XX_EP policy<{'armhf': 'y'}> +CONFIG_PCIE_DW_PLAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_PCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_PCI_IMX6 policy<{'armhf-generic': 'y'}> +CONFIG_PCI_LAYERSCAPE policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_PCI_HISI policy<{'arm64': 'y'}> +CONFIG_PCIE_QCOM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCIE_ARMADA_8K policy<{'armhf': 'y'}> +CONFIG_PCIE_KIRIN policy<{'arm64': 'y'}> +CONFIG_PCIE_HISI_STB policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Bus options (PCI etc.) >> EISA support +CONFIG_EISA_VLB_PRIMING policy<{'i386': 'y'}> +CONFIG_EISA_PCI_EISA policy<{'i386': 'y'}> +CONFIG_EISA_VIRTUAL_ROOT policy<{'i386': 'y'}> +CONFIG_EISA_NAMES policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> EISA support >> Architecture: x86 +CONFIG_EISA policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support +CONFIG_PCCARD policy<{'amd64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'n'}> +CONFIG_CARDBUS policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support >> 16-bit PCMCIA support +CONFIG_PCMCIA policy<{'amd64': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_PCMCIA_LOAD_CIS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PD6729 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I82092 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I82365 policy<{'i386': 'm'}> +CONFIG_TCIC policy<{'i386': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support >> CardBus yenta-compatible bridge support +CONFIG_YENTA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_YENTA_O2 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_RICOH policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_TI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_ENE_TUNE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_TOSHIBA policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCI Endpoint +CONFIG_PCI_ENDPOINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_ENDPOINT_CONFIGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_EPF_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support +CONFIG_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_MSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PCI_REALLOC_ENABLE_AUTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_STUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XEN_PCIDEV_FRONTEND policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCI_IOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_PRI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCI_PASID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCI_HYPERV policy<{'amd64': 'm'}> +CONFIG_PCI_QUIRKS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Architecture: s390 +CONFIG_PCI_NR_FUNCTIONS policy<{'s390x': '64'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Architecture: x86 +CONFIG_PCI_MMCONFIG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCI_CNB20LE_QUIRK policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> DesignWare PCI Core Support + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Endpoint + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Express Port Bus support +CONFIG_PCIEPORTBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_PCIE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEAER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_ECRC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEAER_INJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEASPM_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_DPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_PTM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +# +CONFIG_PCIEPORTBUS mark note +CONFIG_HOTPLUG_PCI_PCIE mark note +CONFIG_PCIEAER_INJECT flag +CONFIG_PCIEASPM_DEBUG note + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Express Port Bus support >> Default ASPM policy +CONFIG_PCIEASPM_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEASPM_POWERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM_POWER_SUPERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM_PERFORMANCE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +# +CONFIG_PCIEASPM_DEFAULT note + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI access mode >> Architecture: x86 +CONFIG_PCI_GOBIOS policy<{'i386': 'n'}> +CONFIG_PCI_GOMMCONFIG policy<{'i386': 'n'}> +CONFIG_PCI_GODIRECT policy<{'i386': 'n'}> +CONFIG_PCI_GOANY policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI host controller drivers +CONFIG_PCI_MVEBU policy<{'armhf': 'y'}> +CONFIG_PCIE_XILINX_NWL policy<{'arm64': 'y'}> +CONFIG_PCI_FTPCI100 policy<{'armhf': 'y'}> +CONFIG_PCI_TEGRA policy<{'armhf-generic': 'y'}> +CONFIG_PCI_RCAR_GEN2 policy<{'armhf': 'y'}> +CONFIG_PCIE_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_HOST_GENERIC policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_XGENE policy<{'arm64': 'y'}> +CONFIG_PCI_XGENE_MSI policy<{'arm64': 'y'}> +CONFIG_PCI_V3_SEMI policy<{'armhf': 'y'}> +CONFIG_PCIE_IPROC_PLATFORM policy<{'arm64': 'm'}> +CONFIG_PCIE_IPROC_MSI policy<{'arm64': 'y'}> +CONFIG_PCIE_ALTERA policy<{'armhf': 'n'}> +CONFIG_PCI_HOST_THUNDER_PEM policy<{'arm64': 'y'}> +CONFIG_PCI_HOST_THUNDER_ECAM policy<{'arm64': 'y'}> +CONFIG_PCIE_ROCKCHIP policy<{'armhf': 'y'}> +CONFIG_PCIE_MEDIATEK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_VMD policy<{'amd64': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI switch controller drivers +CONFIG_PCI_SW_SWITCHTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support +CONFIG_RAPIDIO policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RAPIDIO_TSI721 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_RAPIDIO_DISC_TIMEOUT policy<{'amd64': '30', 'i386': '30', 'ppc64el': '30'}> +CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RAPIDIO_DMA_ENGINE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RAPIDIO_DEBUG policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RAPIDIO_CHMAN policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_MPORT_CDEV policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> Architecture: powerpc + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> Enumeration method +CONFIG_RAPIDIO_ENUM_BASIC policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> RapidIO Switch drivers +CONFIG_RAPIDIO_TSI57X policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_CPS_XX policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_TSI568 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_CPS_GEN2 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_RXS_GEN3 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Support for PCI Hotplug +CONFIG_HOTPLUG_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_COMPAQ policy<{'i386': 'm'}> +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM policy<{'i386': 'y'}> +CONFIG_HOTPLUG_PCI_IBM policy<{'i386': 'm'}> +CONFIG_HOTPLUG_PCI_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HOTPLUG_PCI_ACPI_IBM policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_CPCI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_CPCI_ZT5550 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_CPCI_GENERIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_SHPC policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_HOTPLUG_PCI_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_RPA policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_RPA_DLPAR policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_S390 policy<{'s390x': 'y'}> +# +CONFIG_HOTPLUG_PCI_SHPC note + +# Menu: Cryptographic API +CONFIG_CRYPTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_RSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECDH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MANAGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_GF128MUL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_NULL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_PCRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRYPTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MCRYPTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_AUTHENC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_GCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CHACHA20POLY1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SEQIV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECHAINIV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CBC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_LRW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_PCBC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_XTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_KEYWRAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_HMAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_XCBC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_VMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRC32C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CRC32C_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_CRC32C_VPMSUM policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_CRC32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRC32_PCLMUL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_CRCT10DIF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CRCT10DIF_PCLMUL policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_VPMSUM policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_VPMSUM_TESTER policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_GHASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_POLY1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_POLY1305_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_MD4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MD5 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_MD5_PPC policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_MICHAEL_MIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD128 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA1_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA512_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA1_PPC policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_SHA1_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA512_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA512 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SM3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TGR192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_WP512 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL policy<{'amd64': 'm'}> +CONFIG_CRYPTO_AES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_AES_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_AES_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_AES_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_AES_NI_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_ANUBIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_ARC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_BLOWFISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_BLOWFISH_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAMELLIA_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAST5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAST5_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAST6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAST6_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_DES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_DES3_EDE_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_FCRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_KHAZAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SALSA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SALSA20_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_SALSA20_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CHACHA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CHACHA20_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SERPENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SERPENT_SSE2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SERPENT_SSE2_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_SERPENT_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SERPENT_AVX2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TEA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TWOFISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TWOFISH_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_TWOFISH_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TWOFISH_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_DEFLATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZ4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZ4HC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_ANSI_CPRNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_JITTERENTROPY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_USER_API_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_SKCIPHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_RNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_AEAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS flag +CONFIG_CRYPTO_TEST flag +CONFIG_CRYPTO_SHA512 note + +# Menu: Cryptographic API >> Asymmetric (public-key cryptographic) key type +CONFIG_ASYMMETRIC_KEY_TYPE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X509_CERTIFICATE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PKCS7_MESSAGE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PKCS7_TEST_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SIGNED_PE_FILE_VERIFICATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_ASYMMETRIC_KEY_TYPE note +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE note +CONFIG_X509_CERTIFICATE_PARSER note + +# Menu: Cryptographic API >> Certificates for signature checking +CONFIG_MODULE_SIG_KEY policy<{'amd64': '"certs/signing_key.pem"', 'arm64': '"certs/signing_key.pem"', 'armhf': '"certs/signing_key.pem"', 'i386': '"certs/signing_key.pem"', 'ppc64el': '"certs/signing_key.pem"', 's390x': '"certs/signing_key.pem"'}> +CONFIG_SYSTEM_BLACKLIST_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_BLACKLIST_HASH_LIST policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_EFI_SIGNATURE_LIST_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_LOAD_UEFI_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_EFI_SIGNATURE_LIST_PARSER mark +CONFIG_LOAD_UEFI_KEYS mark +CONFIG_SYSTEM_BLACKLIST_KEYRING mark + +# Menu: Cryptographic API >> Certificates for signature checking >> Provide system-wide ring of trusted keys +CONFIG_SYSTEM_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_TRUSTED_KEYS policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_SYSTEM_EXTRA_CERTIFICATE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096', 's390x': '4096'}> +CONFIG_SECONDARY_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Cryptographic API >> Hardware crypto devices +CONFIG_CRYPTO_HW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DEV_PADLOCK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_PADLOCK_AES policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_PADLOCK_SHA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_GEODE policy<{'i386': 'm'}> +CONFIG_ZCRYPT policy<{'s390x': 'm'}> +CONFIG_PKEY policy<{'s390x': 'm'}> +CONFIG_CRYPTO_PAES_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA1_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA256_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA512_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_DES_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_AES_S390 policy<{'s390x': 'm'}> +CONFIG_S390_PRNG policy<{'s390x': 'm'}> +CONFIG_CRYPTO_GHASH_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_CRC32_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_DEV_MARVELL_CESA policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_HIFN_795X policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_HIFN_795X_RNG policy<{'armhf-generic': 'y'}> +CONFIG_CRYPTO_DEV_FSL_CAAM policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG policy<{'arm64': 'n', 'armhf-generic': 'n'}> +CONFIG_CRYPTO_DEV_SAHARA policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_MXC_SCC policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_EXYNOS_RNG policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_S5P policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_NX policy<{'ppc64el': 'y'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_CCP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_CCP_DD policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_SP_CCP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_CCP_CRYPTO policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_MXS_DCP policy<{'armhf-generic': 'n'}> +CONFIG_CRYPTO_DEV_QAT_DH895xCC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_QAT_C3XXX policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_C62X policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_QAT_C3XXXVF policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_C62XVF policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CAVIUM_CPT policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_NITROX_CNN55XX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRYPTO_DEV_CAVIUM_ZIP policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_QCE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CRYPTO_DEV_VMX policy<{'ppc64el': 'y'}> +CONFIG_CRYPTO_DEV_VMX_ENCRYPT policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_ROCKCHIP policy<{'armhf': 'n'}> +CONFIG_CRYPTO_DEV_MEDIATEK policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_CHELSIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_DEV_BCM_SPU policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_ARTPEC6 policy<{'armhf': 'm'}> + +# Menu: Cryptographic API >> Hardware crypto devices >> Freescale CAAM Job Ring driver backend +CONFIG_CRYPTO_DEV_FSL_CAAM_JR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE policy<{'arm64': '9', 'armhf-generic': '9'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD policy<{'arm64': '255', 'armhf-generic': '255'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD policy<{'arm64': '2048', 'armhf-generic': '2048'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> + +# Menu: Cryptographic API >> Hardware crypto devices >> Support for OMAP crypto HW accelerators +CONFIG_CRYPTO_DEV_OMAP policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_SHAM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_AES policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_DES policy<{'armhf': 'm'}> + +# Menu: Cryptographic API >> NIST SP800-90A DRBG +CONFIG_CRYPTO_DRBG_MENU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DRBG_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DRBG_CTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers +CONFIG_CHARLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARM_CHARLCD policy<{'armhf': 'y'}> +CONFIG_THUNDERBOLT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TEE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> ATA/ATAPI/MFM/RLL support (DEPRECATED) +CONFIG_IDE policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ATA/ATAPI/MFM/RLL support (DEPRECATED) >> IDE Mode for AMD Alchemy Au1200 + +# Menu: Device Drivers >> Accessibility support +CONFIG_ACCESSIBILITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_ACCESSIBILITY flag + +# Menu: Device Drivers >> Adaptive Voltage Scaling class support +CONFIG_POWER_AVS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKCHIP_IODOMAIN policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Android +CONFIG_ANDROID policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> Android >> Android Binder IPC Driver + +# Menu: Device Drivers >> Auxiliary Display support +CONFIG_AUXDISPLAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HD44780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS0108 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS0108_DELAY policy<{'amd64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_CFAG12864B policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CFAG12864B_RATE policy<{'amd64': '20', 'i386': '20'}> +CONFIG_IMG_ASCII_LCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HT16K33 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Block devices +CONFIG_BLK_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_NULL_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_FD policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BLK_DEV_PCIESSD_MTIP32XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ZRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZRAM_WRITEBACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_DAC960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_UMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_LOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_LOOP_MIN_COUNT policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8', 's390x': '8'}> +CONFIG_BLK_DEV_CRYPTOLOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_DRBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DRBD_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_DEV_NBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_SKD policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_SX8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CDROM_PKTCDVD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CDROM_PKTCDVD_BUFFERS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_CDROM_PKTCDVD_WCACHE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATA_OVER_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_XPRAM policy<{'s390x': 'n'}> +CONFIG_DCSSBLK policy<{'s390x': 'm'}> +CONFIG_SCM_BLOCK policy<{'s390x': 'm'}> +CONFIG_XEN_BLKDEV_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_BLKDEV_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_VIRTIO_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VIRTIO_BLK_SCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_RBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_RSXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_RAM_COUNT policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16', 's390x': '16'}> +CONFIG_BLK_DEV_RAM_SIZE policy<{'amd64': '65536', 'arm64': '65536', 'armhf': '65536', 'i386': '65536', 'ppc64el': '65536', 's390x': '65536'}> +# +CONFIG_BLK_DEV_UMEM note +CONFIG_CDROM_PKTCDVD_WCACHE mark +CONFIG_XEN_BLKDEV_FRONTEND note +CONFIG_VIRTIO_BLK note +CONFIG_BLK_DEV_RAM note +CONFIG_BLK_DEV_RAM_SIZE mark note flag + +# Menu: Device Drivers >> Block devices >> Parallel port IDE device support +CONFIG_PARIDE policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PD policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PCD policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PF policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PT policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PG policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ATEN policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_BPCK policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_BPCK6 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_PARIDE_COMM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_DSTR policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FIT2 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FIT3 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_EPAT policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_EPATC8 policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PARIDE_EPIA policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FRIQ policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FRPW policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_KBIC policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_KTTI policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ON20 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ON26 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Block devices >> Support for DASD devices +CONFIG_DASD policy<{'s390x': 'm'}> +CONFIG_DASD_PROFILE policy<{'s390x': 'y'}> +CONFIG_DASD_ECKD policy<{'s390x': 'm'}> +CONFIG_DASD_FBA policy<{'s390x': 'm'}> +CONFIG_DASD_DIAG policy<{'s390x': 'm'}> +CONFIG_DASD_EER policy<{'s390x': 'y'}> + +# Menu: Device Drivers >> Board level reset or power off +CONFIG_POWER_RESET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POWER_RESET_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_AXXIA policy<{'armhf-generic-lpae': 'y'}> +CONFIG_POWER_RESET_BRCMKONA policy<{'armhf': 'y'}> +CONFIG_POWER_RESET_BRCMSTB policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_POWER_RESET_GPIO policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_GPIO_RESTART policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_IMX policy<{'armhf-generic': 'n'}> +CONFIG_POWER_RESET_MSM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_LTC2952 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_QNAP policy<{'armhf': 'n'}> +CONFIG_POWER_RESET_RESTART policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POWER_RESET_VERSATILE policy<{'armhf': 'y'}> +CONFIG_POWER_RESET_VEXPRESS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_XGENE policy<{'arm64': 'n'}> +CONFIG_POWER_RESET_SYSCON policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_SYSCON_POWEROFF policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_RMOBILE policy<{'armhf': 'm'}> +CONFIG_SYSCON_REBOOT_MODE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Broadcom specific AMBA +CONFIG_BCMA_HOST_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BCMA_HOST_SOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_SFLASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_GMAC_CMN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Bus devices +CONFIG_ARM_CCI400_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_CCI5xx_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_CCN policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_BRCMSTB_GISB_ARB policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_IMX_WEIM policy<{'armhf-generic': 'y'}> +CONFIG_OMAP_INTERCONNECT policy<{'armhf': 'y'}> +CONFIG_OMAP_OCP2SCP policy<{'armhf': 'm'}> +CONFIG_QCOM_EBI2 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SIMPLE_PM_BUS policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_SUNXI_RSB policy<{'arm64': 'm'}> +CONFIG_TEGRA_GMI policy<{'armhf-generic': 'm'}> +CONFIG_TI_SYSC policy<{'armhf': 'y'}> +CONFIG_UNIPHIER_SYSTEM_BUS policy<{'armhf': 'y'}> +CONFIG_VEXPRESS_CONFIG policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices +CONFIG_DEVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEVKMEM policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TTY_PRINTK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LP_CONSOLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PPDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HVC_CONSOLE policy<{'ppc64el': 'y'}> +CONFIG_HVC_OLD_HVSI policy<{'ppc64el': 'y'}> +CONFIG_HVC_OPAL policy<{'ppc64el': 'y'}> +CONFIG_HVC_RTAS policy<{'ppc64el': 'y'}> +CONFIG_HVC_IUCV policy<{'s390x': 'y'}> +CONFIG_HVC_XEN policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HVC_XEN_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HVC_UDBG policy<{'ppc64el': 'n'}> +CONFIG_HVC_DCC policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_HVCS policy<{'ppc64el': 'm'}> +CONFIG_VIRTIO_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IBM_BSR policy<{'ppc64el': 'm'}> +CONFIG_POWERNV_OP_PANEL policy<{'ppc64el': 'm'}> +CONFIG_NVRAM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_DTLK policy<{'i386': 'm'}> +CONFIG_R3964 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_APPLICOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SONYPI policy<{'i386': 'm'}> +CONFIG_MWAVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCx200_GPIO policy<{'i386': 'm'}> +CONFIG_PC8736x_GPIO policy<{'i386': 'm'}> +CONFIG_NSC_GPIO policy<{'i386': 'm'}> +CONFIG_RAW_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAX_RAW_DEVS policy<{'amd64': '256', 'arm64': '256', 'armhf': '256', 'i386': '256', 'ppc64el': '256'}> +CONFIG_HPET policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'y'}> +CONFIG_HPET_MMAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HPET_MMAP_DEFAULT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HANGCHECK_TIMER policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TELCLOCK policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DEVPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TN3270 policy<{'s390x': 'y'}> +CONFIG_TN3270_TTY policy<{'s390x': 'y'}> +CONFIG_TN3270_FS policy<{'s390x': 'm'}> +CONFIG_TN3270_CONSOLE policy<{'s390x': 'y'}> +CONFIG_TN3215 policy<{'s390x': 'y'}> +CONFIG_TN3215_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_TTY policy<{'s390x': 'y'}> +CONFIG_SCLP_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_VT220_TTY policy<{'s390x': 'y'}> +CONFIG_SCLP_VT220_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_ASYNC policy<{'s390x': 'm'}> +CONFIG_SCLP_ASYNC_ID policy<{'s390x': '"000000000"'}> +CONFIG_HMC_DRV policy<{'s390x': 'm'}> +CONFIG_SCLP_OFB policy<{'s390x': 'n'}> +CONFIG_S390_TAPE policy<{'s390x': 'm'}> +CONFIG_S390_TAPE_34XX policy<{'s390x': 'm'}> +CONFIG_S390_TAPE_3590 policy<{'s390x': 'm'}> +CONFIG_VMLOGRDR policy<{'s390x': 'm'}> +CONFIG_VMCP policy<{'s390x': 'y'}> +CONFIG_VMCP_CMA_SIZE policy<{'s390x': '4'}> +CONFIG_MONREADER policy<{'s390x': 'm'}> +CONFIG_MONWRITER policy<{'s390x': 'm'}> +CONFIG_S390_VMUR policy<{'s390x': 'm'}> +CONFIG_XILLYBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_XILLYBUS_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XILLYBUS_OF policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_DEVKMEM mark note +CONFIG_HVC_UDBG mark note + +# Menu: Device Drivers >> Character devices >> Enable TTY +CONFIG_TTY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CONSOLE_TRANSLATIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VT_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VT_HW_CONSOLE_BINDING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UNIX98_PTYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LEGACY_PTYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LEGACY_PTY_COUNT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0', 's390x': '0'}> +CONFIG_NOZOMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_N_GSM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TRACE_ROUTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TRACE_SINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PPC_EPAPR_HV_BYTECHAN policy<{'ppc64el': 'n'}> +# +CONFIG_N_GSM note + +# Menu: Device Drivers >> Character devices >> Enable TTY >> Non-standard serial port support +CONFIG_SERIAL_NONSTANDARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKETPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYCLADES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYZ_INTR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MOXA_INTELLIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOXA_SMARTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINK policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINKMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINK_GT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_N_HDLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Character devices >> Hardware Random Number Generator Core support +CONFIG_HW_RANDOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HW_RANDOM_TIMERIOMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HW_RANDOM_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_AMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_BCM2835 policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_IPROC_RNG200 policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_GEODE policy<{'i386': 'm'}> +CONFIG_HW_RANDOM_VIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_OMAP policy<{'armhf': 'm'}> +CONFIG_HW_RANDOM_OMAP3_ROM policy<{'armhf-generic': 'm'}> +CONFIG_HW_RANDOM_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HW_RANDOM_IMX_RNGC policy<{'armhf-generic': 'm'}> +CONFIG_HW_RANDOM_PSERIES policy<{'ppc64el': 'm'}> +CONFIG_HW_RANDOM_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_HW_RANDOM_TPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HW_RANDOM_HISI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_XGENE policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_MESON policy<{'armhf': 'm'}> +CONFIG_HW_RANDOM_CAVIUM policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_S390 policy<{'s390x': 'm'}> + +# Menu: Device Drivers >> Character devices >> IPMI top-level message handler +CONFIG_IPMI_HANDLER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPMI_PROC_INTERFACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPMI_PANIC_EVENT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IPMI_DEVICE_INTERFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_SI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_SSIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_IPMI_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_POWEROFF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Character devices >> PCMCIA character devices +CONFIG_SYNCLINK_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CARDMAN_4000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CARDMAN_4040 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCR24X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IPWIRELESS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Character devices >> Serial device bus +CONFIG_SERIAL_DEV_BUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SERIAL_DEV_CTRL_TTYPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SERIAL_DEV_BUS note +CONFIG_SERIAL_DEV_CTRL_TTYPORT note + +# Menu: Device Drivers >> Character devices >> Serial drivers +CONFIG_SERIAL_AMBA_PL010 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIAL_AMBA_PL011 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_AMBA_PL011_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_KGDB_NMI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_MESON policy<{'armhf': 'm'}> +CONFIG_SERIAL_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_SERIAL_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SERIAL_MAX3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_MAX310X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_IMX policy<{'armhf-generic': 'y'}> +CONFIG_SERIAL_IMX_CONSOLE policy<{'armhf-generic': 'y'}> +CONFIG_SERIAL_UARTLITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SERIAL_UARTLITE_NR_UARTS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SERIAL_ICOM policy<{'ppc64el': 'm'}> +CONFIG_SERIAL_JSM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_MSM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_MSM_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_OMAP policy<{'armhf': 'y'}> +CONFIG_SERIAL_OMAP_CONSOLE policy<{'armhf': 'y'}> +CONFIG_SERIAL_SCCNXP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIAL_SCCNXP_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_SC16IS7XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_SC16IS7XX_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_SC16IS7XX_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_SERIAL_BCM63XX policy<{'armhf': 'm'}> +CONFIG_SERIAL_ALTERA_JTAGUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_IFX6X60 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_PCH_UART policy<{'i386': 'm'}> +CONFIG_SERIAL_XILINX_PS_UART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_ARC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_ARC_NR_PORTS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_SERIAL_RP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_RP2_NR_UARTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SERIAL_FSL_LPUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_CONEXANT_DIGICOLOR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_ST_ASC policy<{'armhf': 'm'}> +CONFIG_SERIAL_MEN_Z135 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_SPRD policy<{'arm64': 'm'}> +CONFIG_SERIAL_MVEBU_UART policy<{'armhf': 'y'}> +CONFIG_SERIAL_MVEBU_CONSOLE policy<{'armhf': 'y'}> +CONFIG_SERIAL_OWL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_OWL_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support +CONFIG_SERIAL_8250 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIAL_8250_DEPRECATED_OPTIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_PNP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SERIAL_8250_FINTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_EXAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MEN_MCB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_NR_UARTS policy<{'amd64': '48', 'arm64': '48', 'armhf': '48', 'i386': '48', 'ppc64el': '48'}> +CONFIG_SERIAL_8250_RUNTIME_UARTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SERIAL_8250_ASPEED_VUART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_DW policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_EM policy<{'armhf': 'n'}> +CONFIG_SERIAL_8250_RT288X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_OMAP policy<{'armhf': 'm'}> +CONFIG_SERIAL_8250_MT6577 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_8250_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_SERIAL_8250_LPSS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MID policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MOXA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_OF_PLATFORM policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support >> Extended 8250/16550 serial driver options +CONFIG_SERIAL_8250_EXTENDED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_SHARE_IRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_DETECT_IRQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_RSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_BCM2835AUX policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support >> Extended 8250/16550 serial driver options >> Support more than 4 legacy serial ports +CONFIG_SERIAL_8250_MANY_PORTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_FOURPORT policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_ACCENT policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_BOCA policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_EXAR_ST16C554 policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_HUB6 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> AT91 on-chip serial port support + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Altera UART support +CONFIG_SERIAL_ALTERA_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_ALTERA_UART_MAXPORTS policy<{'amd64': '4', 'arm64': '4', 'armhf': '4', 'i386': '4', 'ppc64el': '4'}> +CONFIG_SERIAL_ALTERA_UART_BAUDRATE policy<{'amd64': '115200', 'arm64': '115200', 'armhf': '115200', 'i386': '115200', 'ppc64el': '115200'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin SPORT emulate UART + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin serial port support + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin serial port support >> UART Mode + +# Menu: Device Drivers >> Character devices >> Serial drivers >> SuperH SCI(F) serial port support +CONFIG_SERIAL_SH_SCI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIAL_SH_SCI_NR_UARTS policy<{'arm64': '2', 'armhf': '2'}> +CONFIG_SERIAL_SH_SCI_DMA policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> TMPTX39XX/49XX SIO support + +# Menu: Device Drivers >> Character devices >> TPM Hardware Support +CONFIG_TCG_TPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCG_TIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_TIS_I2C_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_I2C_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_I2C_NUVOTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_NSC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TCG_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_IBMVTPM policy<{'ppc64el': 'y'}> +CONFIG_TCG_XEN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_CRB policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_VTPM_PROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCG_TIS_ST33ZP24_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_TIS_ST33ZP24_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_TCG_TPM note +CONFIG_TCG_TIS_I2C_ATMEL note +CONFIG_TCG_TIS_I2C_INFINEON note +CONFIG_TCG_TIS_I2C_NUVOTON note + +# Menu: Device Drivers >> Clock Source drivers +CONFIG_DW_APB_TIMER policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_ROCKCHIP_TIMER policy<{'armhf': 'y'}> +CONFIG_ARMADA_370_XP_TIMER policy<{'armhf': 'y'}> +CONFIG_MESON6_TIMER policy<{'armhf': 'y'}> +CONFIG_ORION_TIMER policy<{'armhf': 'y'}> +CONFIG_OWL_TIMER policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_TEGRA_TIMER policy<{'armhf-generic': 'y'}> +CONFIG_CLKSRC_TI_32K policy<{'armhf': 'y'}> +CONFIG_ARM_ARCH_TIMER_EVTSTREAM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_FSL_ERRATUM_A008585 policy<{'arm64': 'y'}> +CONFIG_HISILICON_ERRATUM_161010101 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_858921 policy<{'arm64': 'y'}> +CONFIG_ARM_GLOBAL_TIMER policy<{'armhf': 'y'}> +CONFIG_ARM_TIMER_SP804 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLKSRC_EXYNOS_MCT policy<{'armhf': 'y'}> +CONFIG_MTK_TIMER policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SH_TIMER_CMT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SH_TIMER_MTU2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RENESAS_OSTM policy<{'armhf': 'y'}> +CONFIG_SH_TIMER_TMU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_EM_TIMER_STI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CLKSRC_QCOM policy<{'armhf': 'y'}> +CONFIG_CLKSRC_VERSATILE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLKSRC_TANGO_XTAL policy<{'armhf': 'y'}> +CONFIG_CLKSRC_IMX_GPT policy<{'armhf-generic': 'y'}> +# +CONFIG_ARM64_ERRATUM_858921 mark note + +# Menu: Device Drivers >> Common Clock Framework +CONFIG_COMMON_CLK_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_VERSATILE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_SP810 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_VEXPRESS_OSC policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_HSDK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MAX77686 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_RK808 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI655X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SCPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SI5351 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_SI514 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SI570 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_CDCE706 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_CDCE925 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_CS2000_CP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_S2MPS11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CLK_TWL6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CLK_QORIQ policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_XGENE policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_VC5 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CLK_BCM_NS2 policy<{'arm64': 'y'}> +CONFIG_CLK_BCM_SR policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_HI3516CV300 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI3519 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI3660 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_HI3798CV200 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI6220 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_RESET_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_STUB_CLK_HI6220 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT8135 policy<{'armhf': 'y'}> +CONFIG_COMMON_CLK_MT8173 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_SAMSUNG policy<{'armhf': 'y'}> +CONFIG_EXYNOS_AUDSS_CLK_CON policy<{'armhf': 'm'}> +CONFIG_COMMON_CLK_TI_ADPLL policy<{'armhf': 'y'}> +CONFIG_CLK_UNIPHIER policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for MediaTek MT7622 +CONFIG_COMMON_CLK_MT7622 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_ETHSYS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_HIFSYS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_AUDSYS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT2701 +CONFIG_COMMON_CLK_MT2701 policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT2712 +CONFIG_COMMON_CLK_MT2712 policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_BDPSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_IMGSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_JPGDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_MFGCFG policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_MMSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_VDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_VENCSYS policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT6797 +CONFIG_COMMON_CLK_MT6797 policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_MMSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_IMGSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_VDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_VENCSYS policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock support for Allwinner SoCs +CONFIG_SUNXI_CCU policy<{'arm64': 'y'}> +CONFIG_SUN50I_A64_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_A83T_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_H3_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_DE2_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_R_CCU policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Renesas SoC clock support +CONFIG_CLK_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_LEGACY policy<{'armhf': 'y'}> +CONFIG_CLK_EMEV2 policy<{'armhf': 'y'}> +CONFIG_CLK_RZA1 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7740 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7743 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7745 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7778 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7779 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7790 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7791 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7792 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7794 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7795 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A7796 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A77970 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A77995 policy<{'arm64': 'y'}> +CONFIG_CLK_SH73A0 policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN2 policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN2_CPG policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN3_CPG policy<{'arm64': 'y'}> +CONFIG_CLK_RCAR_USB2_CLOCK_SEL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_CPG_MSSR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_CPG_MSTP policy<{'armhf': 'y'}> +CONFIG_CLK_RENESAS_DIV6 policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Support for Qualcomm's clock controllers +CONFIG_COMMON_CLK_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_CLK_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_CLK_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APQ_GCC_8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APQ_MMCC_8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_4019 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_LCC_806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_8074 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8916 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_LCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MDM_GCC_9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MDM_LCC_9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8974 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8974 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8994 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8996 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8996 policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Connector - unified userspace <-> kernelspace linker +CONFIG_CONNECTOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> DAX: direct access to differentiated memory +CONFIG_DAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEV_DAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DEV_DAX_PMEM policy<{'amd64': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> DMA Engine support +CONFIG_DMADEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DMADEVICES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ALTERA_MSGDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AMBA_PL08X policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_BCM_SBA_RAID policy<{'arm64': 'm'}> +CONFIG_DMA_BCM2835 policy<{'arm64': 'y'}> +CONFIG_DMA_OMAP policy<{'armhf': 'y'}> +CONFIG_DMA_SUN6I policy<{'arm64': 'm'}> +CONFIG_FSL_EDMA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IMX_DMA policy<{'armhf-generic': 'm'}> +CONFIG_IMX_SDMA policy<{'armhf-generic': 'm'}> +CONFIG_INTEL_IDMA64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_IOATDMA policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_X100_DMA policy<{'amd64': 'm'}> +CONFIG_K3_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MV_XOR policy<{'armhf': 'y'}> +CONFIG_MV_XOR_V2 policy<{'arm64': 'y'}> +CONFIG_MXS_DMA policy<{'armhf-generic': 'y'}> +CONFIG_MX3_IPU policy<{'armhf-generic': 'y'}> +CONFIG_MX3_IPU_IRQS policy<{'armhf-generic': '4'}> +CONFIG_NBPFAXI_DMA policy<{'armhf': 'm'}> +CONFIG_PCH_DMA policy<{'i386': 'm'}> +CONFIG_PL330_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPRD_DMA policy<{'arm64': 'm'}> +CONFIG_TEGRA20_APB_DMA policy<{'armhf-generic': 'y'}> +CONFIG_TIMB_DMA policy<{'i386': 'm'}> +CONFIG_TI_CPPI41 policy<{'armhf': 'm'}> +CONFIG_TI_EDMA policy<{'armhf': 'y'}> +CONFIG_XGENE_DMA policy<{'arm64': 'm'}> +CONFIG_XILINX_DMA policy<{'arm64': 'm'}> +CONFIG_XILINX_ZYNQMP_DMA policy<{'arm64': 'm'}> +CONFIG_QCOM_BAM_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_HIDMA_MGMT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_HIDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DW_DMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DW_DMAC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SH_DMAE_BASE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SH_DMAE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RCAR_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_USB_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SUDMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ASYNC_TX_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DMATEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DMATEST flag + +# Menu: Device Drivers >> DMABUF options +CONFIG_SYNC_FILE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SW_SYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Dallas's 1-wire support +CONFIG_W1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_W1_CON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Dallas's 1-wire support >> 1-wire Bus Masters +CONFIG_W1_MASTER_MATROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_DS2490 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_DS2482 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_MXC policy<{'armhf-generic': 'm'}> +CONFIG_W1_MASTER_DS1WM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDQ_MASTER_OMAP policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Dallas's 1-wire support >> 1-wire Slaves +CONFIG_W1_SLAVE_THERM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_SMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2405 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2408 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2408_READBACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_W1_SLAVE_DS2413 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2406 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2423 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2431 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2433 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2433_CRC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_W1_SLAVE_DS2438 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS28E04 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS28E17 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Device Tree and Open Firmware support +CONFIG_OF policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_OF_UNITTEST policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +CONFIG_OF_DYNAMIC policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_OF_OVERLAY policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +# +CONFIG_OF_UNITTEST flag + +# Menu: Device Drivers >> EDAC (Error Detection And Correction) reporting +CONFIG_EDAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_EDAC_LEGACY_SYSFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EDAC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EDAC_DECODE_MCE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_GHES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EDAC_AMD64 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_AMD64_ERROR_INJECTION policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EDAC_AMD76X policy<{'i386': 'm'}> +CONFIG_EDAC_E7XXX policy<{'i386': 'm'}> +CONFIG_EDAC_E752X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I82875P policy<{'i386': 'm'}> +CONFIG_EDAC_I82975X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I3000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I3200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_IE31200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_X38 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I5400 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I7CORE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I82860 policy<{'i386': 'm'}> +CONFIG_EDAC_R82600 policy<{'i386': 'm'}> +CONFIG_EDAC_I5000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I5100 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I7300 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_SBRIDGE policy<{'amd64': 'm'}> +CONFIG_EDAC_SKX policy<{'amd64': 'm'}> +CONFIG_EDAC_PND2 policy<{'amd64': 'm'}> +CONFIG_EDAC_LAYERSCAPE policy<{'arm64': 'm'}> +CONFIG_EDAC_CPC925 policy<{'ppc64el': 'm'}> +CONFIG_EDAC_HIGHBANK_MC policy<{'armhf': 'm'}> +CONFIG_EDAC_HIGHBANK_L2 policy<{'armhf': 'm'}> +CONFIG_EDAC_THUNDERX policy<{'arm64': 'm'}> +CONFIG_EDAC_XGENE policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> EDAC (Error Detection And Correction) reporting >> Altera SOCFPGA ECC + +# Menu: Device Drivers >> External Connector Class (extcon) support +CONFIG_EXTCON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EXTCON_ADC_JACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_ARIZONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_AXP288 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_INTEL_INT3496 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EXTCON_INTEL_CHT_WC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EXTCON_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX3355 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX77843 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_QCOM_SPMI_MISC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_EXTCON_RT8973A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_SM5502 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_USB_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_USBC_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> FMC support +CONFIG_FMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_FMC_FAKEDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_TRIVIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_WRITE_EEPROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_CHARDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FPGA Configuration Framework +CONFIG_FPGA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FPGA_REGION policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_ICE40_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_ALTERA_CVP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FPGA_MGR_ALTERA_PS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_XILINX_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALTERA_PR_IP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ALTERA_PR_IP_CORE_PLAT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FPGA Configuration Framework >> FPGA Bridge Framework +CONFIG_FPGA_BRIDGE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_XILINX_PR_DECOUPLER policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FSI support + +# Menu: Device Drivers >> FSI support >> FSI support +CONFIG_FSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_MASTER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_MASTER_HUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_SCOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Fusion MPT device support +CONFIG_FUSION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FUSION_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_FUSION_CTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_LAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> GPIO Support +CONFIG_GPIOLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_GPIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GPIO_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_GPIO_SYSFS note + +# Menu: Device Drivers >> GPIO Support >> I2C GPIO expanders +CONFIG_GPIO_ADP5588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ADNP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX7300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX732X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PCA953X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PCF857X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPIC2810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TS4900 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> MFD GPIO expanders +CONFIG_GPIO_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ARIZONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_CRYSTAL_COVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_CS5535 policy<{'i386': 'm'}> +CONFIG_GPIO_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTC_EGPIO policy<{'armhf': 'y'}> +CONFIG_GPIO_JANZ_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP873X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MSIC policy<{'i386': 'y'}> +CONFIG_GPIO_PALMAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_RC5T583 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TC3589X policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TIMBERDALE policy<{'i386': 'y'}> +CONFIG_GPIO_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS6586X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TPS65910 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TPS65912 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS68470 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_GPIO_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TWL6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_UCB1400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WHISKEY_COVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> Memory mapped GPIO drivers +CONFIG_GPIO_74XX_MMIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ALTERA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_AMDPT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_GPIO_AXP209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_GPIO_DWAPB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_EM policy<{'armhf': 'n'}> +CONFIG_GPIO_EXAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_FTGPIO010 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_GENERIC_PLATFORM policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_GRGPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ICH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_LYNXPOINT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_GPIO_MB86S7X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_GPIO_MENZ127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MOCKUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GPIO_MPC8XXX policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_GPIO_OMAP policy<{'armhf': 'y'}> +CONFIG_GPIO_PL061 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_GPIO_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_GPIO_SYSCON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TEGRA policy<{'armhf-generic': 'y'}> +CONFIG_GPIO_TS4800 policy<{'armhf-generic': 'm'}> +CONFIG_GPIO_THUNDERX policy<{'arm64': 'm'}> +CONFIG_GPIO_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_GPIO_VX855 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_XGENE policy<{'arm64': 'y'}> +CONFIG_GPIO_XGENE_SB policy<{'arm64': 'm'}> +CONFIG_GPIO_XILINX policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_XLP policy<{'arm64': 'm'}> +CONFIG_GPIO_ZEVIO policy<{'armhf': 'y'}> +CONFIG_GPIO_ZYNQ policy<{'arm64': 'm'}> +# +CONFIG_GPIO_EM note + +# Menu: Device Drivers >> GPIO Support >> PCI GPIO expanders +CONFIG_GPIO_AMD8111 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_BT8XX policy<{'s390x': 'm'}> +CONFIG_GPIO_INTEL_MID policy<{'i386': 'y'}> +CONFIG_GPIO_MERRIFIELD policy<{'i386': 'n'}> +CONFIG_GPIO_ML_IOH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_PCH policy<{'i386': 'm'}> +CONFIG_GPIO_PCI_IDIO_16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_RDC321X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> Port-mapped I/O GPIO drivers +CONFIG_GPIO_104_DIO_48E policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_104_IDIO_16 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_104_IDI_48 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_F7188X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_GPIO_MM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_IT87 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_SCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_SCH311X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_WS16C48 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> SPI GPIO expanders +CONFIG_GPIO_74X164 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX3191X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX7301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MC33880 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PISOSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_XRA1403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> USB GPIO expanders +CONFIG_GPIO_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Driver Options +CONFIG_UEVENT_HELPER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UEVENT_HELPER_PATH policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_DEVTMPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEVTMPFS_MOUNT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STANDALONE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PREVENT_FIRMWARE_BUILD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ALLOW_DEV_COREDUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_DRIVER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_DEVRES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_TEST_DRIVER_REMOVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_ASYNC_DRIVER_PROBE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DMA_FENCE_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEVTMPFS note note +CONFIG_DEVTMPFS_MOUNT note note + +# Menu: Device Drivers >> Generic Driver Options >> DMA Contiguous Memory Allocator +CONFIG_DMA_CMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_CMA_SIZE_MBYTES policy<{'armhf-generic': '16'}> +CONFIG_CMA_ALIGNMENT policy<{'armhf-generic': '8'}> +# +CONFIG_DMA_CMA note + +# Menu: Device Drivers >> Generic Driver Options >> DMA Contiguous Memory Allocator >> Selected region size +CONFIG_CMA_SIZE_SEL_MBYTES policy<{'armhf-generic': 'y'}> +CONFIG_CMA_SIZE_SEL_PERCENTAGE policy<{'armhf-generic': 'n'}> +CONFIG_CMA_SIZE_SEL_MIN policy<{'armhf-generic': 'n'}> +CONFIG_CMA_SIZE_SEL_MAX policy<{'armhf-generic': 'n'}> + +# Menu: Device Drivers >> Generic Driver Options >> Userspace firmware loading support +CONFIG_FW_LOADER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FIRMWARE_IN_KERNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EXTRA_FIRMWARE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_FW_LOADER_USER_HELPER_FALLBACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_FW_LOADER_USER_HELPER_FALLBACK mark note + +# Menu: Device Drivers >> Generic Dynamic Voltage and Frequency Scaling (DVFS) support +CONFIG_PM_DEVFREQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_POWERSAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_USERSPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_PASSIVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ARM_EXYNOS_BUS_DEVFREQ policy<{'armhf': 'y'}> +CONFIG_ARM_TEGRA_DEVFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_RK3399_DMC_DEVFREQ policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Dynamic Voltage and Frequency Scaling (DVFS) support >> DEVFREQ-Event device Support +CONFIG_PM_DEVFREQ_EVENT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP policy<{'armhf': 'y'}> +CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU policy<{'armhf': 'y'}> +CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Target Core Mod (TCM) and ConfigFS Infrastructure +CONFIG_TARGET_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_IBLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_FILEIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_PSCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_USER2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LOOPBACK_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_TARGET_CXGB4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SBP_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver +CONFIG_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_THERMAL_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_WRITABLE_TRIPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_FAIR_SHARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_STEP_WISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_BANG_BANG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_USER_SPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_POWER_ALLOCATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CLOCK_THERMAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_DEVFREQ_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_EMULATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISI_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MAX77620_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_ROCKCHIP_THERMAL policy<{'armhf': 'm'}> +CONFIG_RCAR_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RCAR_GEN3_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DOVE_THERMAL policy<{'armhf': 'm'}> +CONFIG_ARMADA_THERMAL policy<{'armhf': 'y'}> +CONFIG_DA9062_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_POWERCLAMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_PKG_TEMP_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SOC_DTS_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_BXT_PMIC_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PCH_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTK_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_TANGO_THERMAL policy<{'armhf': 'n'}> +CONFIG_QCOM_SPMI_TEMP_ALARM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GENERIC_ADC_THERMAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> ACPI INT340X thermal drivers +CONFIG_INT340X_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INT3406_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> APIs to parse thermal data out of device tree +CONFIG_THERMAL_OF policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_THERMAL policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_IMX_THERMAL policy<{'armhf-generic': 'm'}> +CONFIG_QORIQ_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_UNIPHIER_THERMAL policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Broadcom thermal drivers +CONFIG_BCM2835_THERMAL policy<{'arm64': 'm'}> +CONFIG_BRCMSTB_THERMAL policy<{'arm64': 'm'}> +CONFIG_BCM_NS_THERMAL policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Default Thermal governor +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> NVIDIA Tegra thermal drivers +CONFIG_TEGRA_SOCTHERM policy<{'armhf-generic': 'n'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Qualcomm thermal drivers +CONFIG_QCOM_TSENS policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> STMicroelectronics thermal drivers + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Samsung thermal drivers +CONFIG_EXYNOS_THERMAL policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Texas Instruments thermal drivers + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Texas Instruments thermal drivers >> Texas Instruments SoCs temperature sensor driver +CONFIG_TI_SOC_THERMAL policy<{'armhf': 'm'}> +CONFIG_TI_THERMAL policy<{'armhf': 'y'}> +CONFIG_OMAP3_THERMAL policy<{'armhf-generic': 'n'}> +CONFIG_OMAP4_THERMAL policy<{'armhf-generic': 'y'}> +CONFIG_DRA752_THERMAL policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Generic powercap sysfs driver +CONFIG_POWERCAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_INTEL_RAPL policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Graphics support +CONFIG_VGA_ARB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VGA_ARB_MAX_GPUS policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_VGA_SWITCHEROO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_TEGRA_HOST1X policy<{'armhf-generic': 'm'}> +CONFIG_TEGRA_HOST1X_FIREWALL policy<{'armhf-generic': 'y'}> +CONFIG_IMX_IPUV3_CORE policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> /dev/agpgart (AGP Support) +CONFIG_AGP policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AGP_ALI policy<{'i386': 'm'}> +CONFIG_AGP_ATI policy<{'i386': 'm'}> +CONFIG_AGP_AMD policy<{'i386': 'y'}> +CONFIG_AGP_AMD64 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_NVIDIA policy<{'i386': 'y'}> +CONFIG_AGP_SIS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AGP_SWORKS policy<{'i386': 'm'}> +CONFIG_AGP_VIA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_EFFICEON policy<{'i386': 'm'}> +# +CONFIG_AGP note flag + +# Menu: Device Drivers >> Graphics support >> ACP (Audio CoProcessor) Configuration +CONFIG_DRM_AMD_ACP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> AMD Library routines +CONFIG_CHASH_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CHASH_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support +CONFIG_BACKLIGHT_LCD_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support >> Lowlevel Backlight controls +CONFIG_BACKLIGHT_CLASS_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BACKLIGHT_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_CARILLO_RANCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_APPLE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_PM8941_WLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_SAHARA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP8860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP8870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_AAT2870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3630A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3639 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LP855X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_PANDORA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_TPS65217 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_BACKLIGHT_AS3711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LV5207LP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_BD6107 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ARCXCNN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support >> Lowlevel LCD controls +CONFIG_LCD_CLASS_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_L4F00242T03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LMS283GF05 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LTV350QV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_ILI922X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_ILI9320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_TDO24M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_VGG2432A4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_S6E63M0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LD9040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_AMS369FG06 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LMS501KF03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_HX8357 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Bootup logo +CONFIG_LOGO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Console display driver support +CONFIG_VGA_CONSOLE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VGACON_SOFT_SCROLLBACK policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MDA_CONSOLE policy<{'i386': 'm'}> +CONFIG_DUMMY_CONSOLE_COLUMNS policy<{'amd64': '80', 'arm64': '80', 'i386': '80', 'ppc64el': '80'}> +CONFIG_DUMMY_CONSOLE_ROWS policy<{'amd64': '25', 'arm64': '25', 'i386': '25', 'ppc64el': '25'}> +CONFIG_FRAMEBUFFER_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_FRAMEBUFFER_CONSOLE mark note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) +CONFIG_DRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_DRM_DP_AUX_CHARDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_DEBUG_MM_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_FBDEV_EMULATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_FBDEV_OVERALLOC policy<{'amd64': '100', 'arm64': '100', 'armhf': '100', 'i386': '100', 'ppc64el': '100'}> +CONFIG_DRM_LOAD_EDID_FIRMWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_HDLCD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_HDLCD_SHOW_UNDERRUN policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_DRM_MALI_DISPLAY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_RADEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_RADEON_USERPTR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_VGEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_VMWGFX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_VMWGFX_FBCON policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_UDL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_AST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_MGAG200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_CIRRUS_QEMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_ARMADA policy<{'armhf': 'm'}> +CONFIG_DRM_ATMEL_HLCDC policy<{'armhf': 'm'}> +CONFIG_DRM_RCAR_DU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_RCAR_DW_HDMI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_RCAR_LVDS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_RCAR_VSP policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_SHMOBILE policy<{'armhf': 'm'}> +CONFIG_DRM_OMAP policy<{'armhf': 'n'}> +CONFIG_DRM_TILCDC policy<{'armhf': 'm'}> +CONFIG_DRM_QXL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_BOCHS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_VIRTIO_GPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_FSL_DCU policy<{'armhf': 'm'}> +CONFIG_DRM_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_DRM_TEGRA_DEBUG policy<{'armhf-generic': 'n'}> +CONFIG_DRM_TEGRA_STAGING policy<{'armhf-generic': 'y'}> +CONFIG_DRM_STM policy<{'armhf': 'm'}> +CONFIG_DRM_STM_DSI policy<{'armhf': 'm'}> +CONFIG_DRM_STI policy<{'armhf': 'n'}> +CONFIG_DRM_VC4 policy<{'arm64': 'm'}> +CONFIG_DRM_VC4_HDMI_CEC policy<{'arm64': 'y'}> +CONFIG_DRM_ETNAVIV policy<{'armhf-generic': 'm'}> +CONFIG_DRM_ETNAVIV_REGISTER_LOGGING policy<{'armhf-generic': 'n'}> +CONFIG_DRM_ARCPGU policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_HISI_HIBMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_HISI_KIRIN policy<{'arm64': 'm'}> +CONFIG_HISI_KIRIN_DW_DSI policy<{'arm64': 'm'}> +CONFIG_DRM_MEDIATEK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MEDIATEK_HDMI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MXSFB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MESON policy<{'armhf': 'm'}> +CONFIG_DRM_MESON_DW_HDMI policy<{'armhf': 'm'}> +CONFIG_DRM_PL111 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_TVE200 policy<{'armhf': 'm'}> +# +CONFIG_DRM_MGAG200 note +CONFIG_DRM_BOCHS note +CONFIG_DRM_STI note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU +CONFIG_DRM_AMDGPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_AMDGPU_SI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_CIK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_USERPTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_GART_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HSA_AMD policy<{'amd64': 'm'}> +# +CONFIG_DRM_AMDGPU_CIK note +CONFIG_DRM_AMDGPU_CIK note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU >> Display Engine Configuration +CONFIG_DRM_AMD_DC_PRE_VEGA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU >> Display Engine Configuration >> AMD DC - Enable new display engine +CONFIG_DRM_AMD_DC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMD_DC_FBC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_AMD_DC_DCN1_0 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_KERNEL_DC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Allwinner A10 Display Engine + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Freescale i.MX +CONFIG_DRM_IMX policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_PARALLEL_DISPLAY policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_TVE policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_LDB policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_HDMI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Rockchip +CONFIG_DRM_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_ROCKCHIP_ANALOGIX_DP policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_CDN_DP policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_DW_HDMI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_DW_MIPI_DSI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_INNO_HDMI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_LVDS policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Samsung SoC EXYNOS Series +CONFIG_DRM_EXYNOS policy<{'armhf': 'm'}> +CONFIG_DRM_EXYNOS_FIMD policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS5433_DECON policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS7_DECON policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS_MIXER policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_VIDI policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS_DSI policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_HDMI policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_MIC policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Samsung SoC EXYNOS Series >> Image Post Processor +CONFIG_DRM_EXYNOS_IPP policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Interface Bridges +CONFIG_DRM_ANALOGIX_ANX78XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DUMB_VGA_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_LVDS_ENCODER policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_NXP_PTN3460 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PARADE_PS8622 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SIL_SII8620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SII902X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SII9234 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_TOSHIBA_TC358767 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_TI_TFP410 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_AHB_AUDIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_I2S_AUDIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_CEC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Interface Bridges >> AV7511 encoder +CONFIG_DRM_I2C_ADV7511 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_ADV7511_AUDIO policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_I2C_ADV7533 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_I2C_ADV7511_CEC policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Panels +CONFIG_DRM_PANEL_LVDS policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SIMPLE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_INNOLUX_P079ZCA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_JDI_LT070ME05000 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_LD9040 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_LG_LG4573 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_ORISETECH_OTM8009A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SEIKO_43WVF1G policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SHARP_LS043T1LE01 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SITRONIX_ST7789V policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Enable legacy drivers (DANGEROUS) +CONFIG_DRM_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DRM_LEGACY flag note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> I2C encoder or helper chips +CONFIG_DRM_I2C_CH7006 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_SIL164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_NXP_TDA998X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel 8xx/9xx/G3x/G4x/HD Graphics +CONFIG_DRM_I915 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_I915_ALPHA_SUPPORT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_CAPTURE_ERROR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_COMPRESS_ERROR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_USERPTR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_GVT policy<{'amd64': 'y'}> +CONFIG_DRM_I915_GVT_KVMGT policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel 8xx/9xx/G3x/G4x/HD Graphics >> drm/i915 Debugging +CONFIG_DRM_I915_WERROR policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SW_FENCE_CHECK_DAG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_DEBUG_VBLANK_EVADE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel GMA5/600 KMS Framebuffer +CONFIG_DRM_GMA500 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_GMA600 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_GMA3600 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_MEDFIELD policy<{'i386': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM +CONFIG_DRM_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MSM_REGISTER_LOGGING policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_HDMI_HDCP policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM >> Enable DSI support in MSM DRM driver +CONFIG_DRM_MSM_DSI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_PLL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_28NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_20NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_28NM_8960_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_14NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Nouveau (NVIDIA) cards +CONFIG_DRM_NOUVEAU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NOUVEAU_PLATFORM_DRIVER policy<{'armhf-generic': 'y'}> +CONFIG_NOUVEAU_DEBUG policy<{'amd64': '5', 'arm64': '5', 'armhf': '5', 'i386': '5', 'ppc64el': '5'}> +CONFIG_NOUVEAU_DEBUG_DEFAULT policy<{'amd64': '3', 'arm64': '3', 'armhf': '3', 'i386': '3', 'ppc64el': '3'}> +CONFIG_NOUVEAU_DEBUG_MMU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_NOUVEAU_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> OMAP2+ Display Subsystem support + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> OMAPDRM External Display Device Drivers + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Support for simple displays +CONFIG_DRM_TINYDRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_MI0283QT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_REPAPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_ST7586 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices +CONFIG_FB_SH_MOBILE_MERAM policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Marvell MMP Display Subsystem support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices +CONFIG_FB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FIRMWARE_EDID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MODE_HELPERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_TILEBLITTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_CIRRUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM2_FIFO_DISCONNECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ARMCLCD policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_FB_IMX policy<{'armhf-generic': 'm'}> +CONFIG_FB_CYBER2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_CYBER2000_DDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ARC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_OF policy<{'ppc64el': 'y'}> +CONFIG_FB_ASILIANT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_IMSTT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_VGA16 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_UVESA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_VESA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_EFI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_FB_N411 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_HGA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_OPENCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_S1D13XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_I740 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_I810 policy<{'i386': 'm'}> +CONFIG_FB_I810_GTF policy<{'i386': 'n'}> +CONFIG_FB_LE80578 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_CARILLO_RANCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_INTEL_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_FB_INTEL_I2C policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_ATY128 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ATY128_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_S3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_S3_DDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SAVAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SAVAGE_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SAVAGE_ACCEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_SIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SIS_300 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SIS_315 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_VIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_VIA_DIRECT_PROCFS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_FB_VIA_X_COMPATIBILITY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_NEOMAGIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_KYRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_3DFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_3DFX_ACCEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_3DFX_I2C policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_VOODOO1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_VT8623 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TRIDENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_CARMINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SH_MOBILE_LCDC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_FB_TMIO policy<{'armhf': 'm'}> +CONFIG_FB_TMIO_ACCELL policy<{'armhf': 'y'}> +CONFIG_FB_S3C policy<{'armhf': 'm'}> +CONFIG_FB_S3C_DEBUG_REGWRITE policy<{'armhf': 'n'}> +CONFIG_FB_SM501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SMSCUFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_UDL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_IBM_GXT4500 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y'}> +CONFIG_FB_XILINX policy<{'arm64': 'm'}> +CONFIG_FB_DA8XX policy<{'armhf-generic': 'm'}> +CONFIG_FB_VIRTUAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_XEN_FBDEV_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_FB_METRONOME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MB862XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MB862XX_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MX3 policy<{'armhf-generic': 'y'}> +CONFIG_FB_BROADSHEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K190X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K1900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K1901 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MXS policy<{'armhf-generic': 'm'}> +CONFIG_FB_HYPERV policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_SIMPLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SSD1307 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SM712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_FB_VIRTUAL flag + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> AMD Geode family framebuffer support +CONFIG_FB_GEODE policy<{'i386': 'y'}> +CONFIG_FB_GEODE_LX policy<{'i386': 'm'}> +CONFIG_FB_GEODE_GX policy<{'i386': 'm'}> +CONFIG_FB_GEODE_GX1 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> ATI Mach64 display support +CONFIG_FB_ATY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ATY_CT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ATY_GENERIC_LCD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_ATY_GX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ATY_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> ATI Radeon display support +CONFIG_FB_RADEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_RADEON_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RADEON_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RADEON_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Amiga native chipset support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> DRAM timing +CONFIG_FB_CARMINE_DRAM_EVAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CARMINE_DRAM_CUSTOM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Framebuffer foreign endianness support +CONFIG_FB_FOREIGN_ENDIAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Framebuffer foreign endianness support >> Choice endianness support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> GDC variant +CONFIG_FB_MB862XX_PCI_GDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MB862XX_LIME policy<{'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Matrox acceleration +CONFIG_FB_MATROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MATROX_MILLENIUM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_MYSTIQUE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MATROX_MAVEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP frame buffer support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP2+ frame buffer support +CONFIG_FB_OMAP2 policy<{'armhf': 'm'}> +CONFIG_FB_OMAP2_DEBUG_SUPPORT policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_NUM_FBS policy<{'armhf': '3'}> +CONFIG_FB_OMAP2_DSS_DEBUG policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DEBUGFS policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DPI policy<{'armhf': 'y'}> +CONFIG_FB_OMAP2_DSS_VENC policy<{'armhf': 'y'}> +CONFIG_FB_OMAP4_DSS_HDMI policy<{'armhf': 'y'}> +CONFIG_FB_OMAP5_DSS_HDMI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_SDI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DSI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK policy<{'armhf': '0'}> +CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP2+ frame buffer support >> OMAPFB Panel and Encoder Drivers +CONFIG_FB_OMAP2_ENCODER_OPA362 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_ENCODER_TFP410 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_ENCODER_TPD12S015 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_DVI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_HDMI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_DPI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_DSI_CM policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_SONY_ACX565AKM policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_SHARP_LS037V7DW01 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_TPO_TD028TTEC1 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_TPO_TD043MTEA1 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_NEC_NL8048HL11 policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> PXA LCD framebuffer support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> SBUS and UPA framebuffers + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Size of ADV7393 frame buffer memory Single/Double Size + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Video mode support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> nVidia Framebuffer Support +CONFIG_FB_NVIDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_NVIDIA_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_NVIDIA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_NVIDIA_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> nVidia Riva support +CONFIG_FB_RIVA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_RIVA_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RIVA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_RIVA_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support + +# Menu: Device Drivers >> HID support >> HID bus support +CONFIG_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BATTERY_STRENGTH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HIDRAW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UHID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers +CONFIG_HID_A4TECH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACCUTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACRUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACRUX_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_APPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_APPLEIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_AUREAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BELKIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BETOP_FF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CHERRY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CHICONY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CORSAIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PRODIKEYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CMEDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CP2112 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CYPRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_DRAGONRISE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRAGONRISE_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_EMS_FF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ELECOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ELO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_EZKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GEMBIRD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GFRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_HOLTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOLTEK_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_GT683R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KEYTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KYE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_UCLOGIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WALTOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GYRATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ICADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_TWINHAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KENSINGTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LCPOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LENOVO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MAGICMOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MAYFLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MICROSOFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MONTEREY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MULTITOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_NTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_NTRIG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ORTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PANTHERLORD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PANTHERLORD_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PENMOUNT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PETALYNX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PLANTRONICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PRIMAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_RETRODE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ROCCAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SAITEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SAMSUNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SONY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SONY_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_SPEEDLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_STEELSERIES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SUNPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_RMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GREENASIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREENASIA_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_HYPERV_MOUSE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HID_SMARTJOYPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMARTJOYPLUS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_TIVO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_TOPSEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_THINGM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_THRUSTMASTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_THRUSTMASTER_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_UDRAW_PS3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WACOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WIIMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_XINMO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ZEROPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZEROPLUS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_ZYDACRON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_HUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_CUSTOM_SENSOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ALPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers >> Logitech devices +CONFIG_HID_LOGITECH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LOGITECH_DJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LOGITECH_HIDPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LOGITECH_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIRUMBLEPAD2_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIG940_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIWHEELS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers >> PicoLCD (graphic version) +CONFIG_HID_PICOLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PICOLCD_FB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_LCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_CIR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> I2C HID support +CONFIG_I2C_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> Intel ISH HID support +CONFIG_INTEL_ISH_HID policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> HID support >> USB HID support +CONFIG_USB_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_HIDDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> USB HID support >> USB HID Boot Protocol drivers +CONFIG_USB_KBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HSI support +CONFIG_HSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMAP_SSI policy<{'armhf-generic': 'm'}> +CONFIG_NOKIA_MODEM policy<{'armhf-generic': 'm'}> +CONFIG_CMT_SPEECH policy<{'armhf-generic': 'm'}> +CONFIG_SSI_PROTOCOL policy<{'armhf-generic': 'm'}> +CONFIG_HSI_CHAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Hardware Monitoring support +CONFIG_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HWMON_DEBUG_CHIP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_ABITUGURU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ABITUGURU3 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_AD7314 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AD7414 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AD7418 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1025 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1026 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1029 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM9240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7310 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7410 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7411 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7462 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7470 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7475 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ASC7621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_K8TEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_K10TEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_FAM15H_POWER policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_APPLESMC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ARM_SCPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SENSORS_ASB100 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ASPEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ATXP1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DS620 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DS1621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DELL_SMM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_DA9052_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_I5K_AMB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_F71805F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_F71882FG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_F75375S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MC13783_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_FSCHMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_FTSTEUTATES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GL518SM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GL520SM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_G760A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_G762 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GPIO_FAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HIH6130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMAEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMPEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMPOWERNV policy<{'ppc64el': 'm'}> +CONFIG_SENSORS_IIO_HWMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_I5500 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_CORETEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_IT87 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_JC42 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_POWR1220 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LINEAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2945 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2990 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4151 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4215 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4222 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4245 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4260 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4261 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX16065 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1619 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1668 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX197 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31722 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6639 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6650 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6697 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31790 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MCP3021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TC654 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MENF21BMC_HWMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADCXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM63 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM70 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM73 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM75 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM77 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM78 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM83 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM85 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM87 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM90 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM92 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95234 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95241 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95245 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PC87360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_PC87427 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NTC_THERMISTOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_NCT6683 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NCT6775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NCT7802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_NCT7904 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PCF8591 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PWM_FAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT15 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT3x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHTC1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SIS5595 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DME1737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_EMC1403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_EMC2103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_EMC6W201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMSC47M1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SMSC47M192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMSC47B397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SCH5627 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SCH5636 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_STTS751 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMM665 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADC128D818 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS1015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS7828 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS7871 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AMC6821 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA2XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA3221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TC74 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_THMC50 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP108 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_VEXPRESS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SENSORS_VIA_CPUTEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_VIA686A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_VT1211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_VT8231 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83781D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83791D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83792D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83793 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83795 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83795_FANCTRL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_W83L785TS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83L786NG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83627HF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_W83627EHF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_XGENE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ACPI_POWER policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ATK0110 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Hardware Monitoring support >> PMBus support +CONFIG_PMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1275 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBM_CFFPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IR35221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM25066 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2978 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2978_REGULATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SENSORS_LTC3815 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX16064 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX20751 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31785 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX34440 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX8688 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TPS40422 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TPS53679 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_UCD9000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_UCD9200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ZL6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Hardware Spinlock drivers +CONFIG_HWSPINLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HWSPINLOCK_OMAP policy<{'armhf': 'm'}> +CONFIG_HWSPINLOCK_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HWSPINLOCK_SPRD policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> I2C support + +# Menu: Device Drivers >> I2C support >> I2C support +CONFIG_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ACPI_I2C_OPREGION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_I2C_COMPAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_CHARDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_MUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_HELPER_AUTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_SMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_STUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SLAVE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_SLAVE_EEPROM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_DEBUG_CORE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DEBUG_ALGO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DEBUG_BUS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_I2C mark note +CONFIG_I2C_CHARDEV note + +# Menu: Device Drivers >> I2C support >> I2C support >> I2C Algorithms +CONFIG_I2C_ALGOBIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALGOPCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> I2C support >> I2C support >> I2C Hardware Bus support +CONFIG_I2C_ALI1535 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALI1563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALI15X3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_AMD756 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_AMD756_S4882 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_AMD8111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_HIX5HD2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_I801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ISCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ISMT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_PIIX4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_CHT_WC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_NFORCE2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_NFORCE2_S4985 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_SIS5595 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SIS630 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SIS96X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIAPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SCMI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_I2C_AXXIA policy<{'armhf-generic-lpae': 'm'}> +CONFIG_I2C_BCM2835 policy<{'arm64': 'm'}> +CONFIG_I2C_BCM_IPROC policy<{'arm64': 'm'}> +CONFIG_I2C_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_I2C_CADENCE policy<{'arm64': 'n'}> +CONFIG_I2C_CBUS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DESIGNWARE_PLATFORM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_DESIGNWARE_SLAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DESIGNWARE_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DESIGNWARE_BAYTRAIL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_I2C_EG20T policy<{'i386': 'm'}> +CONFIG_I2C_EMEV2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'm', 'i386': 'n'}> +CONFIG_I2C_EXYNOS5 policy<{'armhf': 'm'}> +CONFIG_I2C_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_IMX policy<{'arm64': 'm', 'armhf-generic': 'y'}> +CONFIG_I2C_IMX_LPI2C policy<{'armhf-generic': 'm'}> +CONFIG_I2C_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MESON policy<{'armhf': 'm'}> +CONFIG_I2C_MPC policy<{'ppc64el': 'm'}> +CONFIG_I2C_MT65XX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_MV64XXX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_NOMADIK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_OCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_OMAP policy<{'armhf': 'y'}> +CONFIG_I2C_PCA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PXA policy<{'armhf': 'm'}> +CONFIG_I2C_PXA_SLAVE policy<{'armhf': 'y'}> +CONFIG_I2C_QUP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_RIIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_RK3X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_S3C2410 policy<{'armhf': 'y'}> +CONFIG_I2C_SH_MOBILE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_SIMTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SPRD policy<{'arm64': 'y'}> +CONFIG_I2C_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_I2C_UNIPHIER policy<{'armhf': 'n'}> +CONFIG_I2C_UNIPHIER_F policy<{'armhf': 'n'}> +CONFIG_I2C_VERSATILE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_THUNDERX policy<{'arm64': 'm'}> +CONFIG_I2C_XILINX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_XLR policy<{'armhf': 'n'}> +CONFIG_I2C_XLP9XX policy<{'arm64': 'm'}> +CONFIG_I2C_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_DIOLAN_U2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PARPORT_LIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ROBOTFUZZ_OSIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_TAOS_EVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_TINY_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MLXCPLD policy<{'amd64': 'm'}> +CONFIG_I2C_PCA_ISA policy<{'i386': 'm'}> +CONFIG_I2C_CROS_EC_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_I2C_XGENE_SLIMPRO policy<{'arm64': 'm'}> +CONFIG_SCx200_ACB policy<{'i386': 'm'}> +CONFIG_I2C_OPAL policy<{'ppc64el': 'y'}> + +# Menu: Device Drivers >> I2C support >> I2C support >> Multiplexer I2C Chip support +CONFIG_I2C_ARB_GPIO_CHALLENGE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_GPMUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_LTC4306 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PCA9541 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PCA954x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PINCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_REG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DEMUX_PINCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_MLXCPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IEEE 1394 (FireWire) support +CONFIG_FIREWIRE_NOSY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> IEEE 1394 (FireWire) support >> FireWire driver stack +CONFIG_FIREWIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_FIREWIRE_OHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_SBP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IOMMU Hardware Support +CONFIG_IOMMU_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MSM_IOMMU policy<{'armhf': 'n'}> +CONFIG_AMD_IOMMU policy<{'amd64': 'y'}> +CONFIG_AMD_IOMMU_V2 policy<{'amd64': 'm'}> +CONFIG_IRQ_REMAP policy<{'amd64': 'y'}> +CONFIG_OMAP_IOMMU policy<{'armhf': 'y'}> +CONFIG_OMAP_IOMMU_DEBUG policy<{'armhf': 'n'}> +CONFIG_ROCKCHIP_IOMMU policy<{'armhf': 'y'}> +CONFIG_TEGRA_IOMMU_GART policy<{'armhf-generic': 'y'}> +CONFIG_TEGRA_IOMMU_SMMU policy<{'armhf-generic': 'y'}> +CONFIG_EXYNOS_IOMMU policy<{'armhf': 'y'}> +CONFIG_EXYNOS_IOMMU_DEBUG policy<{'armhf': 'n'}> +CONFIG_IPMMU_VMSA policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_SPAPR_TCE_IOMMU policy<{'ppc64el': 'y'}> +CONFIG_ARM_SMMU policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_ARM_SMMU_V3 policy<{'arm64': 'y'}> +CONFIG_S390_CCW_IOMMU policy<{'s390x': 'y'}> +CONFIG_MTK_IOMMU policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_MTK_IOMMU_V1 policy<{'armhf': 'n'}> +CONFIG_QCOM_IOMMU policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_IPMMU_VMSA note + +# Menu: Device Drivers >> IOMMU Hardware Support >> Generic IOMMU Pagetable Support +CONFIG_IOMMU_IO_PGTABLE_LPAE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_IOMMU_IO_PGTABLE_ARMV7S policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> IOMMU Hardware Support >> Support for Intel IOMMU using DMA Remapping Devices +CONFIG_INTEL_IOMMU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IOMMU_SVM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IOMMU_DEFAULT_ON policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_INTEL_IOMMU_DEFAULT_ON note flag + +# Menu: Device Drivers >> IRQ chip support +CONFIG_TS4800_IRQ policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_IRQ_COMBINER policy<{'arm64': 'y'}> +CONFIG_IRQ_UNIPHIER_AIDET policy<{'armhf': 'y'}> +CONFIG_MESON_IRQ_GPIO policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> ISDN support +CONFIG_ISDN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HYSDN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HYSDN_CAPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem +CONFIG_ISDN_CAPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAPI_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_CAPI_CAPI20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_CAPI_MIDDLEWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_CAPI_CAPIDRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active AVM cards +CONFIG_CAPI_AVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DRV_AVMB1_B1ISA policy<{'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCIV4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DRV_AVMB1_T1ISA policy<{'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_AVM_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_T1PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DRV_AVMB1_C4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active Eicon DIVA Server cards +CONFIG_CAPI_EICON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active Eicon DIVA Server cards >> Support Eicon DIVA Server cards +CONFIG_ISDN_DIVAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_BRIPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DIVAS_PRIPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DIVAS_DIVACAPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_USERIDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_MAINT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Modular ISDN driver +CONFIG_MISDN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_DSP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_L1OIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCMULTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_AVMFRITZ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_SPEEDFAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_W6692 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_NETJET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) +CONFIG_ISDN_I4L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_AUDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_TTY_FAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_X25 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_ISDN_I4L flag + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> ISDN feature submodules +CONFIG_ISDN_DIVERSION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards >> HiSax SiemensChipSet driver support +CONFIG_ISDN_DRV_HISAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_1TR6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_NI1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_MAX_CARDS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_HISAX_16_0 policy<{'i386': 'y'}> +CONFIG_HISAX_16_3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_TELESPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_S0BOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_AVM_A1 policy<{'i386': 'y'}> +CONFIG_HISAX_FRITZPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_AVM_A1_PCMCIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ELSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_IX1MICROR2 policy<{'i386': 'y'}> +CONFIG_HISAX_DIEHLDIVA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ASUSCOM policy<{'i386': 'y'}> +CONFIG_HISAX_TELEINT policy<{'i386': 'y'}> +CONFIG_HISAX_HFCS policy<{'i386': 'y'}> +CONFIG_HISAX_SEDLBAUER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_SPORTSTER policy<{'i386': 'y'}> +CONFIG_HISAX_MIC policy<{'i386': 'y'}> +CONFIG_HISAX_NETJET policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_NETJET_U policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_NICCY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ISURF policy<{'i386': 'y'}> +CONFIG_HISAX_HSTSAPHIR policy<{'i386': 'y'}> +CONFIG_HISAX_BKM_A4T policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_SCT_QUADRO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_GAZEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_HFC_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_W6692 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_HFC_SX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ENTERNOW_PCI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_SEDLBAUER_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_ELSA_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_AVM_A1_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_TELES_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_ST5481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_HFCUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_HFC4S8S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_FRITZ_PCIPNP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards >> HiSax SiemensChipSet driver support >> HiSax Support for EURO/DSS1 +CONFIG_HISAX_EURO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DE_AOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_NO_SENDCOMPLETE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_NO_LLC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_NO_KEYPAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Support synchronous PPP +CONFIG_ISDN_PPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_PPP_VJ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_MPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPPP_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_PPP_BSDCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Siemens Gigaset support +CONFIG_ISDN_DRV_GIGASET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_CAPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_GIGASET_BASE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_M105 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_M101 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Industrial I/O support +CONFIG_IIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IIO_BUFFER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IIO_BUFFER_CB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_KFIFO_BUF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_TRIGGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IIO_CONSUMERS_PER_TRIGGER policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_IIO_SW_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SW_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_SENSORS_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_IIO_CROS_EC_SENSORS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Accelerometers +CONFIG_BMA180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMA220 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_ACCEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD06 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD09 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_ACCEL_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_ACCEL_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_ACCEL_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXCJK1013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MC3230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7455_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7455_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7660 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA8452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA9551 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA9553 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MXC4005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MXC6255 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCA3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK8312 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK8BA50 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Amplifiers +CONFIG_AD8366 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Analog to digital converters +CONFIG_AD7266 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7291 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7298 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7476 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7766 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7791 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7793 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7887 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7923 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD799X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP20X_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCM_IPROC_ADC policy<{'arm64': 'm'}> +CONFIG_BERLIN2_ADC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CC10001_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CPCAP_ADC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DA9150_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DLN2_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENVELOPE_DETECTOR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_EXYNOS_ADC policy<{'armhf': 'm'}> +CONFIG_HI8435 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HX711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INA2XX_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IMX7D_ADC policy<{'armhf-generic': 'm'}> +CONFIG_LP8788_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2471 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2485 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2497 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX11100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1118 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1363 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX9611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP320X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP3422 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIATEK_MT6577_AUXADC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MEN_Z188_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MESON_SARADC policy<{'armhf': 'm'}> +CONFIG_NAU7802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PALMAS_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_PM8XXX_XOADC policy<{'armhf': 'm'}> +CONFIG_QCOM_SPMI_IADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_SPMI_VADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RCAR_GYRO_ADC policy<{'armhf': 'm'}> +CONFIG_ROCKCHIP_SARADC policy<{'armhf': 'm'}> +CONFIG_STX104 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SUN4I_GPADC policy<{'arm64': 'n'}> +CONFIG_TI_ADC081C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC0832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC084S021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC12138 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC108S102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC128S052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC161S626 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS1015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS7950 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS8688 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TI_AM335X_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_TLC4541 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL4030_MADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL6030_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VF610_ADC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIPERBOARD_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Chemical Sensors +CONFIG_ATLAS_PH_SENSOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CCS811 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IAQCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VZ89X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Counters +CONFIG_104_QUAD_8 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital gyroscope sensors +CONFIG_ADIS16080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16136 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16260 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADXRS450 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMG160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_GYRO_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPU3050_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_GYRO_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ITG3200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital potentiometers +CONFIG_DS1803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5487 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4131 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4531 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPL0102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital potentiostats +CONFIG_LMP91000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital to analog converters +CONFIG_AD5064 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5380 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5446 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5449 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5592R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5593R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5504 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5624R_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2632 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5686 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5755 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5764 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5791 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CIO_DAC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AD8801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DPOT_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DS4424 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_M62332 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX517 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5821 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4725 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4922 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_DAC082S085 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VF610_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL >> Clock Generator/Distribution +CONFIG_AD9523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL >> Phase-Locked Loop (PLL) frequency synthesizers +CONFIG_ADF4350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Health Sensors + +# Menu: Device Drivers >> Industrial I/O support >> Health Sensors >> Heart Rate Monitors +CONFIG_AFE4403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AFE4404 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX30100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX30102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Hid Sensor IIO Common +CONFIG_HID_SENSOR_IIO_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_IIO_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Humidity sensors +CONFIG_AM2315 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DHT11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDC100X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_HUMIDITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTS221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTU21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI7005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI7020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> IIO dummy driver +CONFIG_IIO_SIMPLE_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SIMPLE_DUMMY_EVENTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IIO_SIMPLE_DUMMY_BUFFER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_IIO_SIMPLE_DUMMY_EVENTS note +CONFIG_IIO_SIMPLE_DUMMY_BUFFER note + +# Menu: Device Drivers >> Industrial I/O support >> Inclinometer sensors +CONFIG_HID_SENSOR_INCLINOMETER_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_DEVICE_ROTATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Inertial measurement units +CONFIG_ADIS16400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16480 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMI160_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMI160_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KMX61 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INV_MPU6050_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INV_MPU6050_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_LSM6DSX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Light sensors +CONFIG_ACPI_ALS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ADJD_S311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AL3320A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_APDS9300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_APDS9960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BH1750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BH1780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM32181 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3605 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CM36651 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_LIGHT_PROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_GP2AP020A00F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ISL29018 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ISL29028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29125 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_ALS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_PROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JSA1212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPR0521 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTR501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX44000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_OPT3001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PA12203001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI1145 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK3310 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCS3414 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCS3472 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TSL2563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSL2583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSL4531 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_US5182D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VCNL4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VEML6070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VL6180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Lightning sensors +CONFIG_AS3935 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Magnetometer sensors +CONFIG_AK8974 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_AK8975 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AK09911 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_MAGN_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_MAGN_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAG3110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_MAGNETOMETER_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC35240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_MAGN_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HMC5843_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HMC5843_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Multiplexers +CONFIG_IIO_MUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Pressure sensors +CONFIG_ABP060MG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMP280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_BARO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_HID_SENSOR_PRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HP03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL115_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL115_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL3115 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5637 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_PRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_T5403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HP206C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZPA2326 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Proximity and distance sensors +CONFIG_LIDAR_LITE_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RFD77402 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRF04 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SX9500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRF08 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> SSP Sensor Common +CONFIG_IIO_SSP_SENSORS_COMMONS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SSP_SENSORHUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Temperature sensors +CONFIG_MAXIM_THERMOCOUPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_TEMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLX90614 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMP006 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMP007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSYS01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSYS02D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Triggers - standalone +CONFIG_IIO_HRTIMER_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_INTERRUPT_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_TIGHTLOOP_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SYSFS_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IndustryPack bus support +CONFIG_IPACK_BUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BOARD_TPCI200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_IPOCTAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> InfiniBand support +CONFIG_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_USER_MAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_USER_ACCESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_EXP_USER_ACCESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_ON_DEMAND_PAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INFINIBAND_MTHCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_MTHCA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_QIB policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_QIB_DCA policy<{'amd64': 'y'}> +CONFIG_INFINIBAND_CXGB3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_CXGB3_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INFINIBAND_CXGB4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_I40IW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLX4_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX5_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_NES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_NES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INFINIBAND_OCRDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_VMWARE_PVRDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_INFINIBAND_USNIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INFINIBAND_HNS policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_HNS_HIP06 policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_HNS_HIP08 policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_IPOIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_IPOIB_CM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INFINIBAND_IPOIB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_SRP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_SRPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_ISER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_ISERT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_OPA_VNIC policy<{'amd64': 'm'}> +CONFIG_INFINIBAND_RDMAVT policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDMA_RXE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_HFI1 policy<{'amd64': 'm'}> +CONFIG_HFI1_DEBUG_SDMA_ORDER policy<{'amd64': 'n'}> +CONFIG_SDMA_VERBOSITY policy<{'amd64': 'n'}> +CONFIG_INFINIBAND_QEDR policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_BNXT_RE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> Input device support + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) +CONFIG_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_INPUT_LEDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_FF_MEMLESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_POLLDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_SPARSEKMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MATRIXKMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_JOYDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_EVBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Joysticks/Gamepads +CONFIG_INPUT_JOYSTICK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_A3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_ADI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_COBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GF2K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GRIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GRIP_MP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GUILLEMOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_INTERACT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SIDEWINDER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TMDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_IFORCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_IFORCE_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_IFORCE_232 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_WARRIOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_MAGELLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SPACEORB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SPACEBALL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_STINGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TWIDJOY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_ZHENHUA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_DB9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GAMECON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TURBOGRAFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_AS5011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_JOYDUMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_XPAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_XPAD_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_XPAD_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_WALKERA0701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_PSXPAD_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_PSXPAD_SPI_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Keyboards +CONFIG_INPUT_KEYBOARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KEYBOARD_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5589 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ATKBD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KEYBOARD_QT1070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_QT2160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_DLINK_DIR685 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LKKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_GPIO_POLLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TCA6416 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TCA8418 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MATRIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LM8323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LM8333 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MAX7359 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MCS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MPR121 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SNVS_PWRKEY policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_IMX policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_NEWTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_OPENCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_PMIC8XXX policy<{'armhf': 'm'}> +CONFIG_KEYBOARD_SAMSUNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_KEYBOARD_STOWAWAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SUNKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SH_KEYSC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_KEYBOARD_STMPE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SUN4I_LRADC policy<{'arm64': 'n'}> +CONFIG_KEYBOARD_OMAP4 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TC3589X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TM2_TOUCHKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_XTKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_KEYBOARD_CAP11XX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_BCM policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mice +CONFIG_INPUT_MOUSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_APPLETOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_BCM5974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_CYAPA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_ELAN_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_ELAN_I2C_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_ELAN_I2C_SMBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_INPORT policy<{'i386': 'n'}> +CONFIG_MOUSE_LOGIBM policy<{'i386': 'm'}> +CONFIG_MOUSE_PC110PAD policy<{'i386': 'm'}> +CONFIG_MOUSE_VSXXXAA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_SYNAPTICS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_SYNAPTICS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_MOUSE_INPORT note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mice >> PS/2 mouse +CONFIG_MOUSE_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_PS2_ALPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_BYD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_LOGIPS2PP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SYNAPTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_CYPRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_LIFEBOOK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MOUSE_PS2_TRACKPOINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_ELANTECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SENTELIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_TOUCHKIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_FOCALTECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_VMMOUSE policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Miscellaneous devices +CONFIG_INPUT_MISC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_88PM860X_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_88PM80X_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ARIZONA_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ATMEL_CAPTOUCH policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_BMA150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_E3X0_BUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCSPKR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PM8941_PWRKEY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_INPUT_PM8XXX_VIBRATOR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_INPUT_PMIC8XXX_PWRKEY policy<{'armhf': 'm'}> +CONFIG_INPUT_MAX77693_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MAX8925_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MAX8997_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MC13783_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MMA8450 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_APANEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INPUT_GP2A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_BEEPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_TILT_POLLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CPCAP_PWRBUTTON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_WISTRON_BTNS policy<{'i386': 'm'}> +CONFIG_INPUT_ATLAS_BTNS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INPUT_ATI_REMOTE2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KEYSPAN_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KXTJ9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KXTJ9_POLLED_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INPUT_POWERMATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_YEALINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CM109 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_REGULATOR_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_RETU_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TPS65218_PWRBUTTON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AXP20X_PEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL4030_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL4030_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL6040_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_UINPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_PALMAS_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCF50633_PMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCF8574 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PWM_BEEPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PWM_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_RK805_PWRKEY policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_ROTARY_ENCODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9052_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9055_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9063_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_WM831X_ON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_IMS_PCU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CMA3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CMA3000_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_XEN_KBDDEV_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_INPUT_IDEAPAD_SLIDEBAR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_SOC_BUTTON_ARRAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV260X_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV2665_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV2667_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_HISI_POWERKEY policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_INPUT_UINPUT mark note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mouse interface +CONFIG_INPUT_MOUSEDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_MOUSEDEV_PSAUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_MOUSEDEV_SCREEN_X policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '1024'}> +CONFIG_INPUT_MOUSEDEV_SCREEN_Y policy<{'amd64': '768', 'arm64': '768', 'armhf': '768', 'i386': '768', 'ppc64el': '768'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Synaptics RMI4 bus support +CONFIG_RMI4_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_SMB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_F03 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F11 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F12 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F30 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F34 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F54 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F55 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Tablets +CONFIG_INPUT_TABLET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TABLET_USB_ACECAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_AIPTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_GTCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_HANWANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_KBTAB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_PEGASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_SERIAL_WACOM4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens +CONFIG_INPUT_TOUCHSCREEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ADS7846 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7877 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AR1021_I2C policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ATMEL_MXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_AUO_PIXCIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_BU21013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CY8CTMG110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DA9034 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DYNAPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HAMPSHIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EETI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EGALAX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EGALAX_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EXC3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_FUJITSU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_GOODIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HIDEEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ILI210X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_IPROC policy<{'arm64': 'm'}> +CONFIG_TOUCHSCREEN_S6SY761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_GUNZE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EKTF2127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ELAN policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ELO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WACOM_W8001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WACOM_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MAX11801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MCS5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MMS114 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MELFAS_MIP4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_IMX6UL_TSC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_INEXIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MK712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HTCPEN policy<{'i386': 'm'}> +CONFIG_TOUCHSCREEN_PENMOUNT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EDT_FT5X06 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHRIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHWIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TI_AM335X_TSC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_UCB1400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_PIXCIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WDT87XX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHIT213 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TS4800 policy<{'armhf-generic': 'm'}> +CONFIG_TOUCHSCREEN_TSC_SERIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2004 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2007_IIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_RM_TS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SILEAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SIS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ST1232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_STMFTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_STMPE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SUN4I policy<{'arm64': 'n'}> +CONFIG_TOUCHSCREEN_SUR40 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SURFACE3_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SX8654 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ZET6223 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ZFORCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_COLIBRI_VF50 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ROHM_BU21023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +# CONFIG_TOUCHSCREEN_ELAN mark note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens >> Support for WM97xx AC97 touchscreen controllers +CONFIG_TOUCHSCREEN_WM97XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WM9705 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_WM9712 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_WM9713 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens >> USB Touchscreen Driver +CONFIG_TOUCHSCREEN_USB_COMPOSITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_USB_EGALAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_PANJIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_3M policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ITM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ETURBO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GUNZE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_DMC_TSC10 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_IRTOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_IDEALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GOTOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_JASTEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ELO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_E2I policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ZYTRONIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_NEXIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_EASYTOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports >> Gameport support +CONFIG_GAMEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_GAMEPORT_NS558 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_L4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_EMU10K1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_FM801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports >> Serial I/O support +CONFIG_SERIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIO_I8042 policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIO_SERPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_CT82C710 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIO_PARKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_AMBAKMI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIO_PCIPS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_LIBPS2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIO_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_XILINX_XPS_PS2 policy<{'ppc64el': 'm'}> +CONFIG_SERIO_ALTERA_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_PS2MULT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_ARC_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_APBPS2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_HYPERV_KEYBOARD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIO_SUN4I_PS2 policy<{'arm64': 'n'}> +CONFIG_SERIO_GPIO_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USERIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Intel(R) Trace Hub controller +CONFIG_INTEL_TH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_GTH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_STH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_MSU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_PTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> LED Support +CONFIG_NEW_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LEDS_LP55XX_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support +CONFIG_LEDS_CLASS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_APU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_BCM6328 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BCM6358 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3530 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MT6323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NET48XX policy<{'i386': 'm'}> +CONFIG_LEDS_WRAP policy<{'i386': 'm'}> +CONFIG_LEDS_PCA9532 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PCA9532_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP3944 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP3952 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5521 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5562 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_CLEVO_MAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_PCA955X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PCA955X_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_PCA963X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_WM831X_STATUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DAC124S085 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_REGULATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BD2802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_INTEL_SS4200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_LT3593 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NS2 policy<{'armhf': 'm'}> +CONFIG_LEDS_ASIC3 policy<{'armhf': 'y'}> +CONFIG_LEDS_TCA6507 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TLC591XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM355x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_OT200 policy<{'i386': 'm'}> +CONFIG_LEDS_MENF21BMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_IS31FL319X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_IS31FL32XX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BLINKM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_LEDS_SYSCON policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_PM8058 policy<{'armhf': 'm'}> +CONFIG_LEDS_MLXCPLD policy<{'amd64': 'm'}> +CONFIG_LEDS_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NIC78BX policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support >> LED Flash Class Support +CONFIG_LEDS_CLASS_FLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_AAT1290 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_AS3645A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MAX77693 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_KTD2692 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support >> LED Trigger support +CONFIG_LEDS_TRIGGERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_TIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_ONESHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_DISK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_HEARTBEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_BACKLIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_CPU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_ACTIVITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_DEFAULT_ON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_TRANSIENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_CAMERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_PANIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> MCB support +CONFIG_MCB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MCB_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCB_LPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> MIPS Platform Specific Device Drivers + +# Menu: Device Drivers >> MMC/SD/SDIO card support +CONFIG_MMC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PWRSEQ_EMMC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWRSEQ_SD8787 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWRSEQ_SIMPLE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BLOCK policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BLOCK_MINORS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_SDIO_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MMC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MMC_ARMMMCI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MMC_QCOM_DML policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MMC_MESON_GX policy<{'armhf': 'm'}> +CONFIG_MMC_MESON_MX_SDIO policy<{'armhf': 'm'}> +CONFIG_MMC_OMAP policy<{'armhf': 'm'}> +CONFIG_MMC_OMAP_HS policy<{'armhf': 'y'}> +CONFIG_MMC_WBSD policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_MXC policy<{'armhf-generic': 'm'}> +CONFIG_MMC_TIFM_SD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_MVSDIO policy<{'armhf': 'm'}> +CONFIG_MMC_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDRICOH_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MMC_TMIO policy<{'armhf': 'm'}> +CONFIG_MMC_SDHI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHI_SYS_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHI_INTERNAL_DMAC policy<{'arm64': 'm'}> +CONFIG_MMC_CB710 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_VIA_SDMMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_CAVIUM_THUNDERX policy<{'arm64': 'm'}> +CONFIG_MMC_SH_MMCIF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_VUB300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_USHC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_USDHI6ROL0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_REALTEK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_REALTEK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SUNXI policy<{'arm64': 'm'}> +CONFIG_MMC_TOSHIBA_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BCM2835 policy<{'arm64': 'm'}> +CONFIG_MMC_MTK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_MMC_BLOCK note +CONFIG_MMC_TEST flag +CONFIG_MMC_OMAP_HS note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Samsung S3C SD/MMC transfer code + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support +CONFIG_MMC_SDHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_RICOH_MMC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MMC_SDHCI_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_MMC_SDHCI_S3C policy<{'armhf': 'm'}> +CONFIG_MMC_SDHCI_S3C_DMA policy<{'armhf': 'y'}> +# +CONFIG_MMC_SDHCI note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support >> SDHCI platform and OF driver helper +CONFIG_MMC_SDHCI_PLTFM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_ARASAN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_OF_AT91 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_ESDHC policy<{'arm64': 'm', 'armhf-generic': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_HLWD policy<{'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_CADENCE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_ESDHC_IMX policy<{'armhf-generic': 'y'}> +CONFIG_MMC_SDHCI_DOVE policy<{'armhf': 'm'}> +CONFIG_MMC_SDHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_MMC_SDHCI_PXAV3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_F_SDH30 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_IPROC policy<{'arm64': 'm'}> +CONFIG_MMC_SDHCI_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_MMC_SDHCI_XENON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OMAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_MMC_SDHCI_PLTFM note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Synopsys DesignWare Memory Card Interface +CONFIG_MMC_DW policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_PLTFM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_EXYNOS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_K3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_PCI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_ROCKCHIP policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers +CONFIG_MACINTOSH_DRIVERS policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC_EMUMOUSEBTN policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers >> Apple Desktop Bus (ADB) support + +# Menu: Device Drivers >> Macintosh device drivers >> New PowerMac thermal control infrastructure +CONFIG_WINDFARM policy<{'ppc64el': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers >> Support for PMU based PowerMacs + +# Menu: Device Drivers >> Mailbox Hardware Support +CONFIG_MAILBOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ARM_MHU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PLATFORM_MHU policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PL320_MBOX policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_OMAP2PLUS_MBOX policy<{'armhf': 'm'}> +CONFIG_OMAP_MBOX_KFIFO_SIZE policy<{'armhf': '256'}> +CONFIG_ROCKCHIP_MBOX policy<{'armhf': 'y'}> +CONFIG_PCC policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ALTERA_MBOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCM2835_MBOX policy<{'arm64': 'y'}> +CONFIG_HI6220_MBOX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MAILBOX_TEST policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_APCS_IPC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_XGENE_SLIMPRO_MBOX policy<{'arm64': 'm'}> +CONFIG_BCM_PDC_MBOX policy<{'arm64': 'm'}> +CONFIG_BCM_FLEXRM_MBOX policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Memory Controller drivers +CONFIG_MEMORY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ARM_PL172_MPMC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_TI_EMIF policy<{'armhf': 'm'}> +CONFIG_OMAP_GPMC_DEBUG policy<{'armhf': 'n'}> +CONFIG_MVEBU_DEVBUS policy<{'armhf': 'y'}> +CONFIG_TEGRA20_MC policy<{'armhf-generic': 'y'}> +CONFIG_SAMSUNG_MC policy<{'armhf': 'y'}> +CONFIG_EXYNOS_SROM policy<{'armhf': 'y'}> +CONFIG_TEGRA_MC policy<{'armhf-generic': 'y'}> +CONFIG_TEGRA124_EMC policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support +CONFIG_MTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MTD_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CMDLINE_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_AFS_PARTS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_OF_PARTS policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'm'}> +CONFIG_MTD_AR7_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BLOCK_RO policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFTL_RW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INFTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RFD_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SSFDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SM_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_OOPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SWAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PARTITIONED_MASTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_ECC_SMC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_MTD note +CONFIG_MTD_CMDLINE_PARTS flag +CONFIG_MTD_BLOCK note +CONFIG_MTD_OF_PARTS note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Enable UBI - Unsorted block images +CONFIG_MTD_UBI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_UBI_WL_THRESHOLD policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096'}> +CONFIG_MTD_UBI_BEB_LIMIT policy<{'amd64': '20', 'arm64': '20', 'armhf': '20', 'i386': '20', 'ppc64el': '20'}> +CONFIG_MTD_UBI_FASTMAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_UBI_GLUEBI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_UBI_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> LPDDR & LPDDR2 PCM memory drivers +CONFIG_MTD_LPDDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_QINFO_PROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_LPDDR2_NVM policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access +CONFIG_MTD_PHYSMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHYSMAP_COMPAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_PHYSMAP_OF policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHYSMAP_OF_VERSATILE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_PHYSMAP_OF_GEMINI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_SCx200_DOCFLASH policy<{'i386': 'm'}> +CONFIG_MTD_AMD76XROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_ICHXROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_ESB2ROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_CK804XROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_SCB2_FLASH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_NETtel policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_L440GX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_IMPA7 policy<{'armhf': 'm'}> +CONFIG_MTD_INTEL_VR_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PLATRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access >> Maximum mappable memory available for flash IO + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access >> Support non-linear mappings of flash chips +CONFIG_MTD_COMPLEX_MAPPINGS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_SBC_GXX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_PCMCIA_ANONYMOUS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MTD_GPIO_ADDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_LATCH_ADDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> NAND Device Support +CONFIG_MTD_NAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_ECC_BCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_NAND_DENALI_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_DENALI_DT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_OMAP2 policy<{'armhf': 'y'}> +CONFIG_MTD_NAND_OMAP_BCH policy<{'armhf': 'y'}> +CONFIG_MTD_NAND_RICOH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_TANGO policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_DISKONCHIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_DOCG4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_CAFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_CS553X policy<{'i386': 'm'}> +CONFIG_MTD_NAND_PXA3xx policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_TMIO policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_NANDSIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_GPMI_NAND policy<{'armhf-generic': 'm'}> +CONFIG_MTD_NAND_BRCMNAND policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_ORION policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_FSL_IFC policy<{'arm64': 'm'}> +CONFIG_MTD_NAND_VF610_NFC policy<{'armhf-generic': 'n'}> +CONFIG_MTD_NAND_MXC policy<{'armhf-generic': 'm'}> +CONFIG_MTD_NAND_SUNXI policy<{'arm64': 'n'}> +CONFIG_MTD_NAND_HISI504 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_MTD_NAND note +CONFIG_MTD_NAND_OMAP2 note +CONFIG_MTD_NAND_OMAP_BCH note +CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> OneNAND Device Support +CONFIG_MTD_ONENAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ONENAND_VERIFY_WRITE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_ONENAND_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ONENAND_OMAP2 policy<{'armhf-generic': 'm'}> +CONFIG_MTD_ONENAND_OTP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_ONENAND_2X_PROGRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_MTD_ONENAND_VERIFY_WRITE note +CONFIG_MTD_ONENAND_OTP flag + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Partition parsers +CONFIG_MTD_SHARPSL_PARTS policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers +CONFIG_MTD_CFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_JEDECPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_INTELEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_AMDSTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_STAA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ABSENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options +CONFIG_MTD_CFI_ADV_OPTIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options >> Flash cmd/query data swapping + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options >> Specific CFI Flash geometry selection +CONFIG_MTD_MAP_BANK_WIDTH_1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_MAP_BANK_WIDTH_16 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_MAP_BANK_WIDTH_32 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CFI_I1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_CFI_I2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_CFI_I4 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CFI_I8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RedBoot partition table parsing +CONFIG_MTD_REDBOOT_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK policy<{'amd64': '-1', 'arm64': '-1', 'armhf': '-1', 'i386': '-1', 'ppc64el': '-1'}> +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_REDBOOT_PARTS_READONLY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> SPI-NOR device support +CONFIG_MTD_SPI_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MT81xx_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_CADENCE_QUADSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_FSL_QUADSPI policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_SPI_HISI_SFC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_INTEL_SPI_PCI policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SPI_INTEL_SPI_PLATFORM policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_SPI_INTEL_SPI_PCI mark note +CONFIG_SPI_INTEL_SPI_PLATFORM mark note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Self-contained MTD device drivers +CONFIG_MTD_PMC551 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PMC551_BUGFIX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_PMC551_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_DATAFLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_DATAFLASH_WRITE_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_DATAFLASH_OTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_M25P80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MCHP23K256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SST25L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BCM47XXSFLASH policy<{'armhf': 'm'}> +CONFIG_MTD_SLRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MTDRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTDRAM_TOTAL_SIZE policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096'}> +CONFIG_MTDRAM_ERASE_SIZE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_MTD_BLOCK2MTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_POWERNV_FLASH policy<{'ppc64el': 'm'}> +CONFIG_MTD_DOCG3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Microsoft Hyper-V guest support +CONFIG_HYPERV policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_UTILS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_BALLOON policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Misc devices +CONFIG_AD525X_DPOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD525X_DPOT_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD525X_DPOT_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DUMMY_IRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IBM_ASM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PHANTOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INTEL_MID_PTI policy<{'i386': 'm'}> +CONFIG_SGI_IOC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TIFM_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TIFM_7XX1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ICS932S401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENCLOSURE_SERVICES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CS5535_MFGPT policy<{'i386': 'n'}> +CONFIG_HP_ILO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QCOM_COINCELL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APDS9802ALS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29003 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TSL2550 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_BH1770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_APDS990X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HMC6352 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DS1682 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VMWARE_BALLOON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCH_PHUB policy<{'i386': 'm'}> +CONFIG_USB_SWITCH_FSA9480 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LATTICE_ECP3_CONFIG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VEXPRESS_SYSCFG policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_ENDPOINT_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CB710_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CB710_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_LIS3_SPI policy<{'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LIS3_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALTERA_STAPL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_ME policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_TXE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VMWARE_VMCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ECHO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CXL policy<{'ppc64el': 'm'}> +CONFIG_CXL_BIMODAL policy<{'ppc64el': 'y'}> +# +CONFIG_CS5535_MFGPT note + +# Menu: Device Drivers >> Misc devices >> EEPROM support +CONFIG_EEPROM_AT24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_AT25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_MAX6875 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_93CX6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EEPROM_93XX46 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_IDT_89HPESX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Misc devices >> GenWQE PCIe Accelerator +CONFIG_GENWQE policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY policy<{'amd64': '0', 'arm64': '0', 'ppc64el': '0', 's390x': '0'}> + +# Menu: Device Drivers >> Misc devices >> Intel MIC & related support +CONFIG_INTEL_MIC_BUS policy<{'amd64': 'm'}> +CONFIG_SCIF_BUS policy<{'amd64': 'm'}> +CONFIG_SCIF policy<{'amd64': 'm'}> +CONFIG_MIC_COSM policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Intel MIC & related support >> VOP Bus Driver +CONFIG_VOP_BUS policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_HOST policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_CARD policy<{'amd64': 'm'}> +CONFIG_VOP policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Silicon Labs C2 port support +CONFIG_C2PORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_C2PORT_DURAMAR_2150 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Texas Instruments shared transport line discipline +CONFIG_TI_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Multifunction device drivers +CONFIG_MFD_CS5535 policy<{'i386': 'm'}> +CONFIG_MFD_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SUN4I_GPADC policy<{'arm64': 'm'}> +CONFIG_MFD_AS3711 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PMIC_ADP5520 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_AAT2870_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_ATMEL_FLEXCOM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_ATMEL_HLCDC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_BCM590XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_AC100 policy<{'arm64': 'n'}> +CONFIG_MFD_AXP20X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_AXP20X_RSB policy<{'arm64': 'm'}> +CONFIG_MFD_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_CROS_EC_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_CROS_EC_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_ASIC3 policy<{'armhf': 'y'}> +CONFIG_PMIC_DA903X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9052_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9052_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9055 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9062 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_DA9063 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_EXYNOS_LPASS policy<{'armhf': 'm'}> +CONFIG_MFD_MC13XXX_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_MC13XXX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_HI6421_PMIC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_HI655X_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HTC_PASIC3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HTC_I2CPLD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_INTEL_QUARK_I2C_GPIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LPC_ICH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_LPC_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INTEL_SOC_PMIC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_SOC_PMIC_BXTWC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SOC_PMIC_CHTWC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_SOC_PMIC_CHTDC_TI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_LPSS_ACPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_LPSS_PCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_MSIC policy<{'i386': 'y'}> +CONFIG_MFD_JANZ_CMODIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_88PM800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_88PM805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_88PM860X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX14577 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77620 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77686 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77693 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77843 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_MAX8925 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8997 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8998 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_MENF21BMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EZX_PCAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RETU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCF50633_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCF50633_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UCB1400_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_PM8XXX policy<{'armhf': 'm'}> +CONFIG_MFD_QCOM_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MFD_SPMI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MFD_RDC321X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MFD_RTSX_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RTSX_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RC5T583 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RN5T618 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SEC_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SI476X_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SM501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_SM501_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SMSC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SC27XX_PMIC policy<{'arm64': 'm'}> +CONFIG_ABX500_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AB3100_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AB3100_OTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SUN6I_PRCM policy<{'arm64': 'y'}> +CONFIG_MFD_SYSCON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MFD_TI_AM335X_TSCADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_LP8788 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TI_LMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_OMAP_USB_HOST policy<{'armhf': 'y'}> +CONFIG_MFD_PALMAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TPS6105X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPS65010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65090 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65217 policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'n'}> +CONFIG_MFD_TPS68470 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_MFD_TI_LP873X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TI_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS6586X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65910 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65912_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65912_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS80031 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL4030_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL4030_POWER policy<{'armhf': 'y'}> +CONFIG_MFD_TWL4030_AUDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL6040_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WL1273_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_MFD_TC3589X policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_T7L66XB policy<{'armhf': 'y'}> +CONFIG_MFD_TC6387XB policy<{'armhf': 'y'}> +CONFIG_MFD_TC6393XB policy<{'armhf': 'y'}> +CONFIG_MFD_VX855 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MFD_ARIZONA_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_ARIZONA_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_CS47L24 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM5102 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM5110 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8997 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8998 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8400 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM831X_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM831X_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8350_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_VEXPRESS_SYSREG policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_MFD_SM501 note +CONFIG_MFD_TPS65217 mark note + +# Menu: Device Drivers >> Multifunction device drivers >> Multimedia Capabilities Port drivers + +# Menu: Device Drivers >> Multifunction device drivers >> STMicroelectronics STMPE Interface Drivers +CONFIG_STMPE_I2C policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_STMPE_SPI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support +CONFIG_MEDIA_SUPPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEDIA_ANALOG_TV_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_DIGITAL_TV_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_RADIO_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CEC_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CEC_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CONTROLLER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CONTROLLER_DVB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_V4L2_SUBDEV_API policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_ADV_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_FIXED_MINOR_RANGES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_PCI_SKELETON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_V4L2_FLASH_LED_CLASS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_MAX_ADAPTERS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_DVB_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_DEMUX_SECTION_LOSS_LOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SMS_SDIO_DRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_FIREDTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYPRESS_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMS_SIANO_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SMS_SIANO_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> CEC platform devices +CONFIG_CEC_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_MESON_AO_CEC policy<{'armhf': 'm'}> +CONFIG_CEC_GPIO policy<{'amd64-lowlatency': 'm', 'i386-lowlatency': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_CEC policy<{'armhf': 'm'}> +CONFIG_VIDEO_TEGRA_HDMI_CEC policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support +CONFIG_MEDIA_CAMERA_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> Media test drivers +CONFIG_V4L_TEST_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_VIMC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_VIVID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VIVID_CEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_VIVID_MAX_DEVS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_VIDEO_VIM2M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> Memory-to-memory multimedia devices +CONFIG_V4L_MEM2MEM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CODA policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_MEDIATEK_VPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_MEM2MEM_DEINTERLACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_G2D policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_JPEG policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_MFC policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC policy<{'armhf': 'm'}> +CONFIG_VIDEO_SH_VEU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_RENESAS_FDP1 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_JPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_FCP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_VSP1 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_ROCKCHIP_RGA policy<{'armhf': 'm'}> +CONFIG_VIDEO_TI_VPE policy<{'armhf': 'm'}> +CONFIG_VIDEO_TI_VPE_DEBUG policy<{'armhf': 'n'}> +CONFIG_VIDEO_QCOM_VENUS policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> V4L platform devices +CONFIG_V4L_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CAFE_CCIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VIA_CAMERA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_OMAP2_VOUT policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_SH_VOU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_MUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OMAP3 policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_OMAP3_DEBUG policy<{'armhf-generic': 'n'}> +CONFIG_VIDEO_QCOM_CAMSS policy<{'arm64': 'm'}> +CONFIG_SOC_CAMERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SH_MOBILE_CEU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_XILINX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_XILINX_TPG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_XILINX_VTC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_RCAR_VIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_TI_CAL policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> V4L platform devices >> Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver +CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Multimedia support >> Customise DVB Frontends +CONFIG_DVB_STB0899 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STB6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV090x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6110x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MXL5XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_M88DS3103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRXK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA18271C2DD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI2165 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MN88472 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MN88473 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24123 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MT312 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10036 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10039 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0288 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STB6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0299 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA8083 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA8261 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_VES1X93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_ITD1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_CX24113 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA826X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUA6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24116 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24117 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24120 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI21XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TS2020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DS3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MB86A16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10071 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP8870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP887X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX22700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX22702 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRXD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_L64781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA1004X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NXT6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MT352 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10353 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB3000MB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB3000MC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB7000M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB7000P policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10048 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AF9013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_EC100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0367 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2820R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2841ER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2832_SDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI2168 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZD1301_DEMOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_VES1820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0297 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NXT200X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_OR51211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_OR51132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BCM3510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT330X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT3305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT3306A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LG2160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1409 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AU8522_DTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AU8522_V4L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1411 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S921 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB8000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MB86A20S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TC90522 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PLL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_DIB0070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_DIB0090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRX39XYJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBH25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBP21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBP22 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6405 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6423 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_A8293 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGS8GXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ATBM8830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA665x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_IX2505V policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_M88RS2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AF9033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HORUS3A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ASCOT2E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HELENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DUMMY_FE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DVB_DUMMY_FE note + +# Menu: Device Drivers >> Multimedia support >> DVB platform devices +CONFIG_DVB_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_C8SECTPFE policy<{'armhf': 'n'}> +# +CONFIG_DVB_C8SECTPFE flag + +# Menu: Device Drivers >> Multimedia support >> I2C Encoders, decoders, sensors and other helper chips +CONFIG_VIDEO_TVAUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TDA7432 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TDA9840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TEA6415C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TEA6420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MSP3400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS3308 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS5345 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS53L32A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UDA1342 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_WM8775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_WM8739 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VP27SMPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SONY_BTF_MPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA6588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ADV7604 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ADV7842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_BT819 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_BT856 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_BT866 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_KS0127 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA7110 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA711X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TVP5150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW2804 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW9903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW9906 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VPX3220 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA717X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7185 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7170 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7175 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7511 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV2640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV7640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV7670 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MT9M111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MT9V011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UPD64031A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UPD64083 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA6752HS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_M52790 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters +CONFIG_MEDIA_PCI_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_MEYE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SOLO6X10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW5864 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW68 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW686X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ZORAN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_DC30 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_HEXIUM_GEMINI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_HEXIUM_ORION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MXB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_DT3155 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX18 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX18_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX23885 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_ALTERA_CI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25821 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25821_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_BT848 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BT8XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_COBALT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AV7110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AV7110_OSD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_B2C2_FLEXCOP_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_PLUTO2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DM1105 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PT1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PT3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MANTIS_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MANTIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HOPPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NGENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DDBRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DDBRIDGE_MSIENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_SMIPCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NETUP_UNIDVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Conexant 2388x (bt878 successor) support +CONFIG_VIDEO_CX88 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_BLACKBIRD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_ENABLE_VP3054 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Conexant cx23416/cx23415 MPEG encoder/decoder support +CONFIG_VIDEO_IVTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_IVTV_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_FB_IVTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Philips SAA7134 support +CONFIG_VIDEO_SAA7134 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_SAA7134_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_GO7007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> SAA7146 DVB cards (aka Budget, Nova-PCI) +CONFIG_DVB_BUDGET_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_CI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_AV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_PATCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Zoran ZR36060 +CONFIG_VIDEO_ZORAN_ZR36060 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_BUZ policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_DC10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_LML33 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_LML33R10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_AVS6EYES policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters +CONFIG_MEDIA_USB_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_VIDEO_CLASS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_PWC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PWC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_PWC_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CPIA2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ZR364XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STKWEBCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_S2255 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_USBTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_PVRUSB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_PVRUSB2_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_PVRUSB2_DVB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_PVRUSB2_DEBUGIFC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_HDPVR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_USBVISION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_STK1160_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_LOADER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_USB_S2250_BOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_AU0828 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_AU0828_V4L2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_AU0828_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_TM6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TM6000_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TM6000_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TTUSB_BUDGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TTUSB_DEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMS_USB_DRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_AS102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AIRSPY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HACKRF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MSI2500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PULSE8_CEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RAINSHADOW_CEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Conexant cx231xx USB video capture support +CONFIG_VIDEO_CX231XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX231XX_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CX231XX_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX231XX_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Empia EM28xx USB devices support +CONFIG_VIDEO_EM28XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_V4L2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_RC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> GSPCA based webcams +CONFIG_USB_GSPCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_M5602 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STV06XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GL860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_BENQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_CONEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_CPIA1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_DTCS033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_ETOMS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_FINEPIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_JEILINJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_JL2005BCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_KINECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_KONICA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_MARS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_MR97310A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_NW80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV519 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV534 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV534_9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC207 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC7302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC7311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SE401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SN9C2028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SN9C20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SONIXB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SONIXJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA505 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA506 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA508 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA561 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA1528 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ905 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ905C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ930X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STK014 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STK1135 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STV0680 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SUNPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_T613 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TOPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TOUPTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TV8532 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_VC032X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_VICAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_XIRLINK_CIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_ZC3XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Support for various USB DVB devices +CONFIG_DVB_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_USB_A800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIBUSB_MB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIBUSB_MB_FAULTY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_USB_DIBUSB_MC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIB0700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_UMT_010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CXUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_M920X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIGITV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_VP7045 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_VP702X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_GP8PSK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_NOVA_T_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_TTUSB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DTT200U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_OPERA1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9005_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_PCTV452E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DW2102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CINERGY_T2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DTV5100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_FRIIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AZ6027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_TECHNISAT_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Support for various USB DVB devices v2 +CONFIG_DVB_USB_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9035 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_ANYSEE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AU6610 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AZ6007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CE6230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_EC168 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_GL861 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_LME2510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_MXL111SF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_RTL28XXU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DVBSKY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_ZD1301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters +CONFIG_RADIO_ADAPTERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RADIO_SI470X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SI470X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SI470X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SI476X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MR800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DSBR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_MAXIRADIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SHARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SHARK2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_KEENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RAREMONO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MA901 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TEA5764 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SAA7706H policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TEF6862 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_RADIO_WL1273 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> ISA radio devices +CONFIG_V4L_RADIO_ISA_DRIVERS policy<{'i386': 'y'}> +CONFIG_RADIO_CADET policy<{'i386': 'm'}> +CONFIG_RADIO_RTRACK policy<{'i386': 'm'}> +CONFIG_RADIO_RTRACK2 policy<{'i386': 'm'}> +CONFIG_RADIO_AZTECH policy<{'i386': 'm'}> +CONFIG_RADIO_GEMTEK policy<{'i386': 'm'}> +CONFIG_RADIO_MIROPCM20 policy<{'i386': 'm'}> +CONFIG_RADIO_SF16FMI policy<{'i386': 'm'}> +CONFIG_RADIO_SF16FMR2 policy<{'i386': 'm'}> +CONFIG_RADIO_TERRATEC policy<{'i386': 'm'}> +CONFIG_RADIO_TRUST policy<{'i386': 'm'}> +CONFIG_RADIO_TYPHOON policy<{'i386': 'm'}> +CONFIG_RADIO_ZOLTRIX policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> Silicon Labs Si4713 FM Radio with RDS Transmitter support +CONFIG_RADIO_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PLATFORM_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> Texas Instruments WL128x FM driver (ST based) +CONFIG_RADIO_WL128X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> SPI helper chips + +# Menu: Device Drivers >> Multimedia support >> Sensors used on soc_camera driver +CONFIG_SOC_CAMERA_IMX074 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9M001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9M111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9T031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9T112 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9V022 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV5642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV772X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV9640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV9740 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_RJ54N1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_TW9910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support +CONFIG_MEDIA_SDR_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_SUBDRV_AUTOSELECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_IR_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support >> Customize TV tuners +CONFIG_MEDIA_TUNER_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA8290 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA827X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18271 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA9887 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TEA5761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TEA5767 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MSI001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT20XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2266 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2131 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_QT1010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC2028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL5005S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL5007T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MC44S803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MAX2165 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18218 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0012 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_E4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC2580 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_M88RS6000T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TUA9001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_SI2157 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_IT913X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_R820T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL301RF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_QM1D1C0042 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support >> SDR platform devices +CONFIG_SDR_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_RCAR_DRIF policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) +CONFIG_MD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BCACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCACHE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BCACHE_CLOSURES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) >> Device mapper support +CONFIG_BLK_DEV_DM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DM_MQ_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_DM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_DM_CRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_SNAPSHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_THIN_PROVISIONING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_CACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_CACHE_SMQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MIRROR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_LOG_USERSPACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_RAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ZERO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH_QL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_DELAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_UEVENT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DM_FLAKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_VERITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_VERITY_FEC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DM_SWITCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_LOG_WRITES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_INTEGRITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ZONED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_BLK_DEV_DM mark note + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) >> RAID support +CONFIG_BLK_DEV_MD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MD_AUTODETECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MD_LINEAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID456 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_MULTIPATH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'y'}> +CONFIG_MD_FAULTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Multiplexer drivers +CONFIG_MUX_ADG792A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MUX_GPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MUX_MMIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> NVDIMM (Non-Volatile Memory Device) Support +CONFIG_LIBNVDIMM policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BLK_DEV_PMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ND_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BTT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NVDIMM_PFN policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_NVDIMM_DAX policy<{'amd64': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> NVME Support +CONFIG_BLK_DEV_NVME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVME_MULTIPATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVME_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> NVME Support >> NVMe Target support +CONFIG_NVME_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_LOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_FCLOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> NVMEM Support +CONFIG_NVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NVMEM_IMX_IIM policy<{'armhf-generic': 'm'}> +CONFIG_NVMEM_IMX_OCOTP policy<{'armhf-generic': 'm'}> +CONFIG_MTK_EFUSE policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_QCOM_QFPROM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ROCKCHIP_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_BCM_OCOTP policy<{'arm64': 'm'}> +CONFIG_NVMEM_SUNXI_SID policy<{'arm64': 'm'}> +CONFIG_UNIPHIER_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_VF610_OCOTP policy<{'armhf-generic': 'n'}> +CONFIG_MESON_MX_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_SNVS_LPGPR policy<{'armhf-generic': 'm'}> +# +CONFIG_NVMEM flag note + +# Menu: Device Drivers >> Network device support +CONFIG_NETDEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CAIF_TTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_SPI_SLAVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_SPI_SYNC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CAIF_HSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FDDI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DEFXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DEFXX_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SKFP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HIPPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NET_SB1000 policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_MDIO_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MDIO_BCM_IPROC policy<{'arm64': 'n'}> +CONFIG_MDIO_BCM_UNIMAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_BITBANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MDIO_BUS_MUX_BCM_IPROC policy<{'arm64': 'y'}> +CONFIG_MDIO_BUS_MUX_GPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_BUS_MUX_MMIOREG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_HISI_FEMAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_OCTEON policy<{'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_SUN4I policy<{'arm64': 'n'}> +CONFIG_MDIO_THUNDER policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MDIO_XGENE policy<{'arm64': 'm'}> +CONFIG_MICREL_KS8995MA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XEN_NETDEV_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_NETDEV_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_VMXNET3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_FUJITSU_ES policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_THUNDERBOLT_NET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_NET policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_HIPPI note +CONFIG_XEN_NETDEV_FRONTEND note +CONFIG_DEFXX_MMIO flag + +# Menu: Device Drivers >> Network device support >> ARCnet support +CONFIG_ARCNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ARCNET_1201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_1051 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_CAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM90xx policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM90xxIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_RIM_I policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> ARCnet support >> ARCnet COM20020 chipset driver +CONFIG_ARCNET_COM20020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM20020_ISA policy<{'i386': 'm'}> +CONFIG_ARCNET_COM20020_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM20020_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> ATM drivers +CONFIG_ATM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATM_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_LANAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_ENI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_ENI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_FIRESTREAM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_ZATM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_ZATM_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_NICSTAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_NICSTAR_USE_SUNI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_NICSTAR_USE_IDT77105 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_IDT77252 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_IDT77252_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_IDT77252_RCV_ALL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_AMBASSADOR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_AMBASSADOR_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_HORIZON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_HORIZON_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_IA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_IA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_HE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_HE_USE_SUNI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATM_SOLOS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_ATM_NICSTAR_USE_IDT77105 flag + +# Menu: Device Drivers >> Network device support >> ATM drivers >> FORE Systems 200E-series +CONFIG_ATM_FORE200E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_FORE200E_USE_TASKLET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_FORE200E_TX_RETRY policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_ATM_FORE200E_DEBUG policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Device Drivers >> Network device support >> ATM drivers >> Fine-tune burst settings +CONFIG_ATM_ENI_TUNE_BURST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers +CONFIG_NET_DSA_BCM_SF2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_LOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_DSA_MT7530 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_DSA_QCA8K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_SMSC_LAN9303_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_SMSC_LAN9303_MDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_NET_DSA_LOOP flag + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers >> Broadcom BCM53xx managed switch support +CONFIG_B53 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_SPI_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_MDIO_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_MMAP_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_SRAB_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers >> Microchip KSZ series switch support +CONFIG_MICROCHIP_KSZ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MICROCHIP_KSZ_SPI_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support +CONFIG_ETHERNET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_VENDOR_ADAPTEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ADAPTEC_STARFIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_AGERE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ET131X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_ALACRITECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLICOSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_VENDOR_ALLWINNER policy<{'arm64': 'y'}> +CONFIG_SUN4I_EMAC policy<{'arm64': 'n'}> +CONFIG_NET_VENDOR_ALTEON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ACENIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACENIC_OMIT_TIGON_I policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ALTERA_TSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_AMAZON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ENA_ETHERNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_XGENE policy<{'arm64': 'm'}> +CONFIG_NET_XGENE_V2 policy<{'arm64': 'm'}> +CONFIG_NET_VENDOR_AQUANTIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AQTION policy<{'amd64': 'm'}> +CONFIG_NET_VENDOR_ARC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EMAC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_AURORA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AURORA_NB8800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CADENCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MACB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MACB_USE_HWSTAMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MACB_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_BROCADE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BNA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_CALXEDA_XGMAC policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_CISCO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ENIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CX_ECAT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DM9000 policy<{'armhf': 'm'}> +CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL policy<{'armhf': 'n'}> +CONFIG_DNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_DEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_VENDOR_DLINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DL2K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNDANCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNDANCE_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_EMULEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BE2NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BE2NET_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_VENDOR_EZCHIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EZCHIP_NPS_MANAGEMENT_ENET policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_EXAR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_S2IO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VXGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VXGE_DEBUG_TRACE_ALL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_FARADAY policy<{'armhf': 'y'}> +CONFIG_FTMAC100 policy<{'armhf': 'm'}> +CONFIG_FTGMAC100 policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_FUJITSU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_FMVJ18X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_HP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HP100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_HUAWEI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HINIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_JME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_MEDIATEK policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_NET_VENDOR_MICROCHIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ENC28J60 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENC28J60_WRITEVERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ENCX24J600 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_MYRI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MYRI10GE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MYRI10GE_DCA policy<{'amd64': 'y'}> +CONFIG_FEALNX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_NETRONOME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NFP_APP_FLOWER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NFP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_NVIDIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FORCEDETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_OKI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCH_GBE policy<{'i386': 'm'}> +CONFIG_ETHOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_PACKET_ENGINE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HAMACHI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_YELLOWFIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_RENESAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SH_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RAVB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_NET_VENDOR_RDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_R6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_ROCKER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SAMSUNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SXGBE_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SEEQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_VENDOR_SILAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SC92031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SIS900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SIS190 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SOLARFLARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SFC_FALCON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SFC_FALCON_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_VENDOR_SOCIONEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SNI_NETSEC policy<{'arm64': 'm'}> +CONFIG_NET_VENDOR_STMICRO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_STMMAC_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STMMAC_PCI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_TEHUTI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_TEHUTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_VIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VIA_RHINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIA_RHINE_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIA_VELOCITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_WIZNET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_WIZNET_W5100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIZNET_W5300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIZNET_W5100_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_XIRCOM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_XIRC2PS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_SYNOPSYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DWC_XLGMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DWC_XLGMAC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NET_VENDOR_EMULEX note + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> 3Com devices +CONFIG_NET_VENDOR_3COM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EL3 policy<{'i386': 'm'}> +CONFIG_3C515 policy<{'i386': 'm'}> +CONFIG_PCMCIA_3C574 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_3C589 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VORTEX policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPHOON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> AMD devices +CONFIG_NET_VENDOR_AMD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AMD8111_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LANCE policy<{'i386': 'm'}> +CONFIG_PCNET32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_NMCLAN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NI65 policy<{'i386': 'm'}> +CONFIG_AMD_XGBE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_AMD_XGBE_DCB policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Apple devices + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Atheros devices +CONFIG_NET_VENDOR_ATHEROS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATL2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Blackfin on-chip MAC support + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Broadcom devices +CONFIG_NET_VENDOR_BROADCOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_B44 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCMGENET policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BNX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TIGON3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TIGON3_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNX2X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BNX2X_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BGMAC_PLATFORM policy<{'arm64': 'y'}> +CONFIG_SYSTEMPORT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_TIGON3 flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Broadcom devices >> Broadcom NetXtreme-C/E support +CONFIG_BNXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BNXT_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNXT_FLOWER_OFFLOAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNXT_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Cavium ethernet drivers +CONFIG_NET_VENDOR_CAVIUM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_THUNDER_NIC_PF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_VF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_BGX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_RGX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_LIQUIDIO policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_LIQUIDIO_VF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Chelsio devices +CONFIG_NET_VENDOR_CHELSIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_CHELSIO_T1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T1_1G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T4_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T4_FCOE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T4VF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Cirrus devices +CONFIG_NET_VENDOR_CIRRUS policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_CS89x0 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_CS89x0_PLATFORM policy<{'armhf': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> DEC - Tulip devices +CONFIG_NET_TULIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DE2104X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DE2104X_DSL policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_DE4X5 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WINBOND_840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DM9102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ULI526X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_XIRCOM policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> DEC - Tulip devices >> DECchip Tulip (dc2114x) PCI support +CONFIG_TULIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TULIP_MWI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TULIP_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TULIP_NAPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_TULIP_NAPI flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Freescale devices +CONFIG_NET_VENDOR_FREESCALE policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_FEC policy<{'armhf-generic': 'y'}> +CONFIG_FSL_FMAN policy<{'arm64': 'y'}> +CONFIG_FSL_PQ_MDIO policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_FSL_XGMAC_MDIO policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_GIANFAR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_FSL_DPAA_ETH policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Freescale devices >> Freescale Ethernet Driver + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Hisilicon devices +CONFIG_NET_VENDOR_HISILICON policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_HIX5HD2_GMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HISI_FEMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HIP04_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS_DSAF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS_ENET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3_HCLGE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3_ENET policy<{'arm64': 'm'}> +CONFIG_HNS3_DCB policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> IBM devices +CONFIG_NET_VENDOR_IBM policy<{'ppc64el': 'y'}> +CONFIG_IBMVETH policy<{'ppc64el': 'm'}> +CONFIG_IBMVNIC policy<{'ppc64el': 'm'}> +# +CONFIG_IBMVNIC mark note + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> IBM devices >> IBM EMAC Ethernet support + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel (82586/82593/82596) devices +CONFIG_NET_VENDOR_I825XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel devices +CONFIG_NET_VENDOR_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_E100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000E_HWTS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IGB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IGB_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IGB_DCA policy<{'amd64': 'y'}> +CONFIG_IGBVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGBEVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I40E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I40E_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I40EVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FM10K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel devices >> Intel(R) 10GbE PCI Express adapters support +CONFIG_IXGBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGBE_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IXGBE_DCA policy<{'amd64': 'y'}> +CONFIG_IXGBE_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Marvell devices +CONFIG_NET_VENDOR_MARVELL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MV643XX_ETH policy<{'armhf': 'm'}> +CONFIG_MVMDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MVNETA_BM_ENABLE policy<{'armhf': 'n'}> +CONFIG_MVNETA policy<{'armhf': 'm'}> +CONFIG_MVPP2 policy<{'armhf': 'm'}> +CONFIG_PXA168_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SKGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SKGE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SKGE_GENESIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SKY2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SKY2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices +CONFIG_NET_VENDOR_MELLANOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_EN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX4_EN_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_CORE_GEN2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX5_FPGA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLXFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies ConnectX-4 Ethernet support +CONFIG_MLX5_CORE_EN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_MPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_ESWITCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE_EN_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE_IPOIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_EN_IPSEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies Switch ASICs support +CONFIG_MLXSW_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLXSW_CORE_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MLXSW_CORE_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MLXSW_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_MINIMAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies Switch ASICs support >> PCI bus implementation for Mellanox Technologies Switch ASICs +CONFIG_MLXSW_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLXSW_SWITCHIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SWITCHX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SPECTRUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SPECTRUM_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Micrel devices +CONFIG_NET_VENDOR_MICREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KS8842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS8851 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS8851_MLL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KSZ884X_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> National Semi-conductor 8390 devices +CONFIG_NET_VENDOR_8390 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PCMCIA_AXNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AX88796 policy<{'armhf': 'm'}> +CONFIG_AX88796_93CX6 policy<{'armhf': 'n'}> +CONFIG_NE2000 policy<{'i386': 'm'}> +CONFIG_NE2K_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_PCNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ULTRA policy<{'i386': 'm'}> +CONFIG_WD80x3 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> National Semi-conductor devices +CONFIG_NET_VENDOR_NATSEMI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NATSEMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NS83820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> QLogic devices +CONFIG_NET_VENDOR_QLOGIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_QLA3XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QLGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NETXEN_NIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QED_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QEDE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> QLogic devices >> QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support +CONFIG_QLCNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QLCNIC_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QLCNIC_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QLCNIC_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Qualcomm devices +CONFIG_NET_VENDOR_QUALCOMM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_QCA7000_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCA7000_UART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_EMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Realtek devices +CONFIG_NET_VENDOR_REALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_8139CP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8169 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Realtek devices >> RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support +CONFIG_8139TOO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_8139TOO_PIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_8139TOO_TUNE_TWISTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_8139TOO_8129 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_8139_OLD_RX_RESET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_8139TOO_TUNE_TWISTER flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> SMC (SMSC)/Western Digital devices +CONFIG_NET_VENDOR_SMSC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SMC9194 policy<{'i386': 'm'}> +CONFIG_SMC91X policy<{'arm64': 'y', 'armhf': 'm'}> +CONFIG_PCMCIA_SMC91C92 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EPIC100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMC911X policy<{'armhf': 'm'}> +CONFIG_SMSC911X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMSC9420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> STMMAC Platform bus support +CONFIG_STMMAC_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_DWC_QOS_ETH policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_IPQ806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DWMAC_MESON policy<{'armhf': 'm'}> +CONFIG_DWMAC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_DWMAC_SUNXI policy<{'arm64': 'n'}> +CONFIG_DWMAC_SUN8I policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Solarflare SFC9000/SFC9100-family support +CONFIG_SFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SFC_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_MCDI_MON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_MCDI_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Sun devices +CONFIG_NET_VENDOR_SUN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HAPPYMEAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNGEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CASSINI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NIU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Texas Instruments (TI) devices +CONFIG_NET_VENDOR_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_TI_DAVINCI_EMAC policy<{'armhf-generic': 'm'}> +CONFIG_TI_DAVINCI_MDIO policy<{'armhf': 'y'}> +CONFIG_TI_DAVINCI_CPDMA policy<{'armhf': 'y'}> +CONFIG_TI_CPSW_ALE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_CPSW policy<{'armhf': 'y'}> +CONFIG_TI_CPTS policy<{'armhf': 'y'}> +CONFIG_TLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Toshiba devices + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> WIZnet interface mode +CONFIG_WIZNET_BUS_DIRECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WIZNET_BUS_INDIRECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WIZNET_BUS_ANY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Xilinx devices +CONFIG_NET_VENDOR_XILINX policy<{'ppc64el': 'y'}> +CONFIG_XILINX_LL_TEMAC policy<{'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> IEEE 802.15.4 drivers +CONFIG_IEEE802154_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_FAKELB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_AT86RF230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_AT86RF230_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IEEE802154_MRF24J40 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_CC2520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_ATUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_ADF7242 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_CA8210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_IEEE802154_CA8210_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Network core driver support +CONFIG_NET_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BONDING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_EQUALIZER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IFB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACVLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACVTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPVLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPVTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VXLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GENEVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACSEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETCONSOLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETCONSOLE_DYNAMIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NTB_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RIONET policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RIONET_TX_SIZE policy<{'amd64': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_RIONET_RX_SIZE policy<{'amd64': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_TUN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TUN_VNET_CROSS_LE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_VETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VIRTIO_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_VRF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VSOCKMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_VIRTIO_NET note flag + +# Menu: Device Drivers >> Network device support >> Network core driver support >> Ethernet team driver support +CONFIG_NET_TEAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_BROADCAST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_ROUNDROBIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_RANDOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_LOADBALANCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> PHY Device support and infrastructure +CONFIG_PHYLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_LED_TRIGGER_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AMD_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AQUANTIA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AT803X_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCM7XXX_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCM87XX_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BROADCOM_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CICADA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CORTINA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DAVICOM_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83822_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83848_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83867_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FIXED_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_ICPLUS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_XWAY_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LSI_ET1011C_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LXT_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MARVELL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MARVELL_10G_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MESON_GXL_PHY policy<{'armhf': 'm'}> +CONFIG_MICREL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MICROCHIP_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MICROSEMI_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NATIONAL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_QSEMI_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_REALTEK_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RENESAS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ROCKCHIP_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SMSC_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STE10XP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TERANETICS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VITESSE_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XILINX_GMII2RGMII policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> PPP (point-to-point protocol) support +CONFIG_PPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PPP_BSDCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_DEFLATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPP_MPPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_MULTILINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPPOATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPPOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPPOL2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_ASYNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_SYNC_TTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> S/390 network device drivers +CONFIG_LCS policy<{'s390x': 'm'}> +CONFIG_CTCM policy<{'s390x': 'm'}> +CONFIG_NETIUCV policy<{'s390x': 'm'}> +CONFIG_SMSGIUCV policy<{'s390x': 'y'}> +CONFIG_SMSGIUCV_EVENT policy<{'s390x': 'm'}> +CONFIG_QETH policy<{'s390x': 'm'}> +CONFIG_QETH_L2 policy<{'s390x': 'm'}> +CONFIG_QETH_L3 policy<{'s390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> SLIP (serial line) support +CONFIG_SLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SLIP_COMPRESSED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SLIP_SMART policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SLIP_MODE_SLIP6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters +CONFIG_USB_NET_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CATC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_KAWETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PEGASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RTL8150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RTL8152 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LAN78XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IPHETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters >> Multi-purpose USB Networking Framework +CONFIG_USB_USBNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_AX8817X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_AX88179_178A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDCETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_EEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_HUAWEI_CDC_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_MBIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_DM9601 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SR9700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SR9800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SMSC75XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SMSC95XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_GL620A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_NET1080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_PLUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_MCS7830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_RNDIS_HOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_ZAURUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CX82310_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_KALMIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_QMI_WWAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_INT51X1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CDC_PHONET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SIERRA_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_VL600 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CH9200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters >> Multi-purpose USB Networking Framework >> Simple USB Network Links (CDC Ethernet subset) +CONFIG_USB_NET_CDC_SUBSET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ALI_M5632 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_AN2720 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_BELKIN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ARMLINUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EPSON2888 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_KC2190 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wan interfaces support +CONFIG_WAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HOSTESS_SV11 policy<{'i386': 'm'}> +CONFIG_COSA policy<{'i386': 'm'}> +CONFIG_LANMEDIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SEALEVEL_4021 policy<{'i386': 'm'}> +CONFIG_SLIC_DS26522 policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_DLCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DLCI_MAX policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_SDLA policy<{'i386': 'm'}> +CONFIG_LAPBETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_X25_ASY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SBNI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBNI_MULTILINE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wan interfaces support >> Generic HDLC layer +CONFIG_HDLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_RAW_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_CISCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_FR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_PPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_X25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCI200SYN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WANXL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PC300TOO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_N2 policy<{'i386': 'm'}> +CONFIG_C101 policy<{'i386': 'm'}> +CONFIG_FARSYNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DSCC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DSCC4_PCISYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DSCC4_PCI_RST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> WiMAX Wireless Broadband devices +CONFIG_WIMAX_I2400M_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIMAX_I2400M_DEBUG_LEVEL policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN +CONFIG_WLAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIRELESS_WDS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WLAN_VENDOR_ADMTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ADM8211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_ATMEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCI_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_ATMEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AT76C50X_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_CISCO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AIRO policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIRO_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WLAN_VENDOR_MEDIATEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MT7601U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_RALINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WLAN_VENDOR_RSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WLAN_VENDOR_ST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CW1200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CW1200_WLAN_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CW1200_WLAN_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_ZYDAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ZD1201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZD1211RW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZD1211RW_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WLAN_VENDOR_QUANTENNA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QTNFMAC_PEARL_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_RAYCS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_WL3501 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MAC80211_HWSIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_RNDIS_WLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices +CONFIG_WLAN_VENDOR_ATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH5K_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_BTCOEX_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_HTC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH9K_HTC_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AR5523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WCN36XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WCN36XX_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 5xxx wireless cards support +CONFIG_ATH5K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH5K_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH5K_TRACER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 802.11ac wireless cards support +CONFIG_ATH10K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_AHB policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_ATH10K_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH10K_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH10K_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 802.11n wireless cards support +CONFIG_ATH9K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH9K_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_AHB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_STATION_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_DYNACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH9K_WOW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_RFKILL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_CHANNEL_CONTEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_PCOEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_HWRNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros mobile chipsets support +CONFIG_ATH6KL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH6KL_TRACING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Linux Community AR9170 802.11n USB support +CONFIG_CARL9170 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CARL9170_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CARL9170_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CARL9170_HWRNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Wilocity 60g WiFi card wil6210 support +CONFIG_WIL6210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIL6210_ISR_COR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIL6210_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIL6210_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices +CONFIG_WLAN_VENDOR_BROADCOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B43LEGACY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BRCMSMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx wireless support (mac80211 stack) +CONFIG_B43 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B43_SDIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43_PHY_G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_N policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_LP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_HT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx wireless support (mac80211 stack) >> Supported bus types +CONFIG_B43_BUSES_BCMA_AND_SSB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_BUSES_BCMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43_BUSES_SSB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx-legacy data transfer mode +CONFIG_B43LEGACY_DMA_AND_PIO_MODE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43LEGACY_DMA_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43LEGACY_PIO_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom FullMAC WLAN driver +CONFIG_BRCMFMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BRCMFMAC_SDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMFMAC_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMFMAC_PCIE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCM_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMDBG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_BRCMDBG flag + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices +CONFIG_WLAN_VENDOR_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPW2100_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2100_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBIPW_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWL4965 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWL3945 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel PRO/Wireless 2200BG and 2915ABG Network Connection +CONFIG_IPW2200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPW2200_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_RADIOTAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_PROMISCUOUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_QOS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) +CONFIG_IWLWIFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLDVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLMVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLWIFI_BCAST_FILTERING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLWIFI_PCIE_RTPM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) >> Debugging Options +CONFIG_IWLWIFI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLWIFI_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IWLWIFI_DEVICE_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> iwl3945 / iwl4965 Debugging Options +CONFIG_IWLEGACY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLEGACY_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices +CONFIG_WLAN_VENDOR_INTERSIL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PRISM54 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> Hermes chipset 802.11b support (Orinoco/Prism2/Symbol) +CONFIG_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HERMES_PRISM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HERMES_CACHE_FW_ON_INIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PLX_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMD_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NORTEL_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_HERMES policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_SPECTRUM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ORINOCO_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) +CONFIG_HOSTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_FIRMWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HOSTAP_FIRMWARE_NVRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HOSTAP_PLX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> Softmac Prism54 support +CONFIG_P54_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_SPI_DEFAULT_EEPROM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices +CONFIG_WLAN_VENDOR_MARVELL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIBERTAS_THINFIRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_THINFIRM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBERTAS_THINFIRM_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWL8K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices >> Marvell 8xxx Libertas WLAN driver support +CONFIG_LIBERTAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LIBERTAS_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBERTAS_MESH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices >> Marvell WiFi-Ex Driver +CONFIG_MWIFIEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support +CONFIG_RT2X00 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2400PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2500PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT61PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2500USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT73USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2X00_LIB_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RT2X00_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support >> Ralink rt27xx/rt28xx/rt30xx (PCI/PCIe/PCMCIA) support +CONFIG_RT2800PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2800PCI_RT33XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT35XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT53XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT3290 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support >> Ralink rt27xx/rt28xx/rt30xx (USB) support +CONFIG_RT2800USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2800USB_RT33XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT35XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT3573 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT53XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT55XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_UNKNOWN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Realtek devices +CONFIG_WLAN_VENDOR_REALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTL8180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8187 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8XXXU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8XXXU_UNTESTED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Realtek devices >> Realtek rtlwifi family of devices +CONFIG_RTL_CARDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192CE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192SE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192DE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723AE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723BE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8188EE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192EE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8821AE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192CU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLWIFI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Redpine Signals Inc 91x WLAN driver support +CONFIG_RSI_91X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RSI_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RSI_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RSI_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Texas Instrument devices +CONFIG_WLAN_VENDOR_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WL1251 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL1251_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL1251_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL12XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL18XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILINK_PLATFORM_DATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Non-Transparent Bridge support +CONFIG_NTB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NTB_AMD policy<{'amd64': 'n'}> +CONFIG_NTB_IDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_INTEL policy<{'amd64': 'm'}> +CONFIG_NTB_SWITCHTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_PINGPONG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_TOOL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_PERF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Open-Channel SSD target support +CONFIG_NVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NVM_RRPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVM_PBLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> PHY Subsystem +CONFIG_GENERIC_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PHY_XGENE policy<{'arm64': 'y'}> +CONFIG_PHY_SUN4I_USB policy<{'arm64': 'm'}> +CONFIG_PHY_SUN9I_USB policy<{'arm64': 'n'}> +CONFIG_PHY_MESON8B_USB2 policy<{'armhf': 'm'}> +CONFIG_PHY_MESON_GXL_USB2 policy<{'armhf': 'm'}> +CONFIG_BCM_KONA_USB2_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_BCM_NS_USB2 policy<{'arm64': 'm'}> +CONFIG_PHY_BCM_NS_USB3 policy<{'arm64': 'm'}> +CONFIG_PHY_NS2_PCIE policy<{'arm64': 'y'}> +CONFIG_PHY_NS2_USB_DRD policy<{'arm64': 'm'}> +CONFIG_PHY_BRCM_SATA policy<{'arm64': 'y'}> +CONFIG_PHY_BRCM_USB policy<{'arm64': 'm'}> +CONFIG_PHY_HI6220_USB policy<{'arm64': 'm'}> +CONFIG_PHY_HIX5HD2_SATA policy<{'armhf': 'm'}> +CONFIG_PHY_BERLIN_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_BERLIN_USB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_MVEBU_CP110_COMPHY policy<{'armhf': 'm'}> +CONFIG_PHY_PXA_28NM_HSIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_PXA_28NM_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_MTK_TPHY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_CPCAP_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_QCOM_APQ8064_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_IPQ806X_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_QMP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_QUSB2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_UFS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_USB_HS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_QCOM_USB_HSIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_RCAR_GEN2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_RCAR_GEN3_USB2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_RCAR_GEN3_USB3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_DP policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_EMMC policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_INNO_USB2 policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_PCIE policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_TYPEC policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_USB policy<{'armhf': 'm'}> +CONFIG_PHY_EXYNOS_DP_VIDEO policy<{'armhf': 'y'}> +CONFIG_PHY_EXYNOS_MIPI_VIDEO policy<{'armhf': 'y'}> +CONFIG_PHY_EXYNOS_PCIE policy<{'armhf': 'y'}> +CONFIG_PHY_SAMSUNG_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_EXYNOS5_USBDRD policy<{'armhf': 'm'}> +CONFIG_PHY_EXYNOS5250_SATA policy<{'armhf': 'y'}> +CONFIG_PHY_TEGRA_XUSB policy<{'armhf-generic': 'm'}> +CONFIG_PHY_DM816X_USB policy<{'armhf': 'm'}> +CONFIG_OMAP_CONTROL_PHY policy<{'armhf': 'm'}> +CONFIG_OMAP_USB2 policy<{'armhf': 'm'}> +CONFIG_TI_PIPE3 policy<{'armhf': 'm'}> +CONFIG_PHY_TUSB1210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL4030_USB policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> PPS support +CONFIG_PPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_PPS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PPS_CLIENT_KTIMER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PPS_CLIENT_LDISC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PPS_CLIENT_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPS_CLIENT_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_PPS_CLIENT_KTIMER flag +CONFIG_PPS flag + +# Menu: Device Drivers >> PTP clock support +CONFIG_PTP_1588_CLOCK_PCH policy<{'i386': 'm'}> + +# Menu: Device Drivers >> PTP clock support >> PTP clock support +CONFIG_PTP_1588_CLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_PTP_1588_CLOCK_DTE policy<{'arm64': 'm'}> +CONFIG_PTP_1588_CLOCK_GIANFAR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_PTP_1588_CLOCK_KVM policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_PTP_1588_CLOCK flag + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support +CONFIG_PANEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PANEL_PARPORT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_PANEL_PROFILE policy<{'amd64': '5', 'arm64': '5', 'armhf': '5', 'i386': '5', 'ppc64el': '5'}> +CONFIG_PANEL_CHANGE_MESSAGE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support >> LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom) + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support >> LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom) >> LCD communication mode (0=parallel 8 bits, 1=serial) + +# Menu: Device Drivers >> Parallel port support +CONFIG_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PARPORT_AX88796 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_1284 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Parallel port support >> PC-style hardware +CONFIG_PARPORT_PC policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_SERIAL policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_PC_FIFO policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PARPORT_PC_SUPERIO policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PARPORT_PC_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Performance monitor support +CONFIG_ARM_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_HISI_PMU policy<{'arm64': 'y'}> +CONFIG_QCOM_L2_PMU policy<{'arm64': 'y'}> +CONFIG_QCOM_L3_PMU policy<{'arm64': 'y'}> +CONFIG_XGENE_PMU policy<{'arm64': 'y'}> +CONFIG_ARM_SPE_PMU policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Pin controllers +CONFIG_PINCTRL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PINMUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCONF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEBUG_PINCTRL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PINCTRL_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_AMD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_MCP23S08 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_RZA1 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_SINGLE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_SX150X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_PALMAS policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_RK805 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_IPROC_GPIO policy<{'arm64': 'y'}> +CONFIG_PINCTRL_NS2_MUX policy<{'arm64': 'y'}> +CONFIG_PINCTRL_BERLIN_BG4CT policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PINCTRL_IMX50 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX51 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6Q policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6SL policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6SX policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6UL policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX7D policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_VF610 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_BAYTRAIL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PINCTRL_CHERRYVIEW policy<{'amd64': 'y', 'i386': 'm'}> +CONFIG_PINCTRL_MERRIFIELD policy<{'i386': 'n'}> +CONFIG_PINCTRL_BROXTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_CANNONLAKE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_CEDARFORK policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_DENVERTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_GEMINILAKE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_LEWISBURG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_SUNRISEPOINT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_APQ8064 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_APQ8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ4019 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ8064 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ8074 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MDM9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8X74 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8916 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8994 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8996 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_QDF2XXX policy<{'arm64': 'm'}> +CONFIG_PINCTRL_QCOM_SPMI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_QCOM_SSBI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_EXYNOS policy<{'armhf': 'y'}> +CONFIG_PINCTRL_EXYNOS_ARM policy<{'armhf': 'y'}> +CONFIG_PINCTRL_EXYNOS5440 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_SPRD policy<{'arm64': 'y'}> +CONFIG_PINCTRL_SPRD_SC9860 policy<{'arm64': 'y'}> +CONFIG_PINCTRL_TI_IODELAY policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT2701 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8135 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8127 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8173 policy<{'arm64': 'y'}> +CONFIG_PINCTRL_MT6397 policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_PINCTRL_MT8135 flag +CONFIG_PINCTRL_MT8127 flag +# CONFIG_PINCTRL_CHERRYVIEW mark note + +# Menu: Device Drivers >> Pin controllers >> Amlogic SoC pinctrl drivers +CONFIG_PINCTRL_MESON policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MESON8 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MESON8B policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Pin controllers >> Nomadik pin controller driver + +# Menu: Device Drivers >> Pin controllers >> ST-Ericsson ABx500 family Mixed Signal Circuit gpio functions + +# Menu: Device Drivers >> Pin controllers >> UniPhier SoC pinctrl drivers +CONFIG_PINCTRL_UNIPHIER policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD4 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PRO4 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_SLD8 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PRO5 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PXS2 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD6B policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD11 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD20 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PXS3 policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Platform support for Chrome hardware +CONFIG_CHROME_PLATFORMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_CHROMEOS_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CHROMEOS_PSTORE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_CHARDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_LPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_LPC_MEC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CROS_KBD_LED_BACKLIGHT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Platform support for Goldfish virtual devices +CONFIG_GOLDFISH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Plug and Play support +CONFIG_PNP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_PNP_DEBUG_MESSAGES policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ISAPNP policy<{'i386': 'y'}> +CONFIG_PNPBIOS policy<{'i386': 'y'}> +CONFIG_PNPBIOS_PROC_FS policy<{'i386': 'y'}> + +# Menu: Device Drivers >> Power supply class support +CONFIG_POWER_SUPPLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_POWER_SUPPLY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PDA_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GENERIC_ADC_BATTERY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX8925_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM831X_BACKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM831X_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM8350_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEST_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2782 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_LEGO_EV3 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MANAGER_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_HDQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BATTERY_DA9030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP20X_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_CHARGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_FUEL_GAUGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX17040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX17042 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX1721X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_TWL4030_MADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_RX51 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_CPCAP policy<{'armhf': 'm'}> +CONFIG_CHARGER_ISP1704 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_LP8727 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MANAGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHARGER_LTC3651 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_DETECTOR_MAX14656 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_QCOM_SMBB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CHARGER_BQ2415X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24190 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24257 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24735 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ25890 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_SMB347 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TPS65090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TPS65217 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_BATTERY_GAUGE_LTC2941 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_RT9455 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Pulse-Width Modulation (PWM) Support +CONFIG_PWM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PWM_ATMEL_HLCDC_PWM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_BCM_IPROC policy<{'arm64': 'm'}> +CONFIG_PWM_BCM2835 policy<{'arm64': 'm'}> +CONFIG_PWM_BERLIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_PWM_CRC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PWM_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_PWM_FSL_FTM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_HIBVT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_IMX policy<{'armhf-generic': 'm'}> +CONFIG_PWM_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_LPSS_PCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PWM_LPSS_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PWM_MESON policy<{'armhf': 'm'}> +CONFIG_PWM_MTK_DISP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_MEDIATEK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_OMAP_DMTIMER policy<{'armhf': 'm'}> +CONFIG_PWM_PCA9685 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_RENESAS_TPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_PWM_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_PWM_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PWM_SUN4I policy<{'arm64': 'm'}> +CONFIG_PWM_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_PWM_TIECAP policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_PWM_TIEHRPWM policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_PWM_TWL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_TWL_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Real Time Clock +CONFIG_RTC_CLASS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_HCTOSYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_HCTOSYS_DEVICE policy<{'amd64': '"rtc0"', 'arm64': '"rtc0"', 'armhf': '"rtc0"', 'i386': '"rtc0"', 'ppc64el': '"rtc0"'}> +CONFIG_RTC_SYSTOHC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_SYSTOHC_DEVICE policy<{'amd64': '"rtc0"', 'arm64': '"rtc0"', 'armhf': '"rtc0"', 'i386': '"rtc0"', 'ppc64el': '"rtc0"'}> +CONFIG_RTC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_NVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_PROC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_DEV_UIE_EMUL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_88PM80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ABB5ZES3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ABX80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_RTC_DRV_AS3722 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1307 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1307_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1307_CENTURY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1374 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1374_WDT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1672 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_HYM8563 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX77686 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RS5C372 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ISL1208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ISL12022 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_X1205 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF85063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF85363 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T80_WDT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_BQ32K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TWL4030 policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS6586X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS65910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS80031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RC5T583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_S35390A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_FM3130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8581 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8025 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_EM3027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV8803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_S5M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T94 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1343 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1347 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1390 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6916 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_R9701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX4581 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX6110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RS5C348 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6902 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF2123 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MCP795 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS3232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS3232_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_PCF2127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV3029C2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV3029_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_CMOS policy<{'amd64': 'y', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_VRTC policy<{'i386': 'm'}> +CONFIG_RTC_DRV_DS1286 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1511 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1553 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1742 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS2404 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_EFI policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_STK17TA8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T86 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T35 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T59 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MSM6242 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_BQ4802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RP5C01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_V3020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_SC27XX policy<{'arm64': 'm'}> +CONFIG_RTC_DRV_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_AB3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_OPAL policy<{'ppc64el': 'y'}> +CONFIG_RTC_DRV_ZYNQMP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_IMXDI policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_OMAP policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_S3C policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_SH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_PL030 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_PL031 policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_RTC_DRV_GENERIC policy<{'ppc64el': 'y'}> +CONFIG_RTC_DRV_SUN6I policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_MV policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_ARMADA38X policy<{'armhf': 'm'}> +CONFIG_RTC_DRV_FTRTC010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MC13XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PM8XXX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_MXC policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_SNVS policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MT7622 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_XGENE policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_R7301 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RTD119X policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_HID_SENSOR_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_RTC_DRV_TEST flag +CONFIG_RTC_DRV_CMOS note +CONFIG_RTC_DRV_EFI note +CONFIG_RTC_DRV_TWL4030 note + +# Menu: Device Drivers >> Real Time Clock >> Dallas/Maxim DS1685 Family +CONFIG_RTC_DRV_DS1685_FAMILY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DS1685_PROC_REGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DS1685_SYSFS_REGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Real Time Clock >> Dallas/Maxim DS1685 Family >> Subtype +CONFIG_RTC_DRV_DS1685 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1689 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17285 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17485 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17885 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Reliability, Availability and Serviceability (RAS) features +CONFIG_RAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RAS_CEC policy<{'amd64': 'y'}> + +# Menu: Device Drivers >> Remote Controller support +CONFIG_RC_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RC_MAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Remote Controller support >> Remote Controller devices +CONFIG_RC_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RC_ATI_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_ENE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_HIX5HD2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_IMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_MCEUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_ITE_CIR policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_FINTEK policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_MESON policy<{'armhf': 'm'}> +CONFIG_IR_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IR_NUVOTON policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_REDRAT3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_STREAMZAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_WINBOND_CIR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IR_IGORPLUGUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_IGUANA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_TTUSBIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RX51 policy<{'armhf': 'm'}> +CONFIG_RC_LOOPBACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_GPIO_CIR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_GPIO_TX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_PWM_TX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SUNXI policy<{'arm64': 'm'}> +CONFIG_IR_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SERIAL_TRANSMITTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IR_SIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_TANGO policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Remote Controller support >> Remote Controller devices >> Hardware decoder + +# Menu: Device Drivers >> Remote Controller support >> Remote controller decoders +CONFIG_RC_DECODERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_LIRC_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_NEC_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RC5_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RC6_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_JVC_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SONY_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SANYO_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SHARP_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_MCE_KBD_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_XMP_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Remoteproc drivers + +# Menu: Device Drivers >> Remoteproc drivers >> Support for Remote Processor subsystem +CONFIG_REMOTEPROC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IMX_REMOTEPROC policy<{'armhf-generic': 'm'}> +CONFIG_OMAP_REMOTEPROC policy<{'armhf-generic': 'm'}> +CONFIG_WKUP_M3_RPROC policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_ADSP_PIL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_Q6V5_PIL policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_QCOM_WCNSS_PIL policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> Reset Controller Support +CONFIG_RESET_CONTROLLER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_RESET_ATH79 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_AXS10X policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_BERLIN policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_IMX7 policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_LANTIQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_LPC18XX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_MESON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_PISTACHIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_SIMPLE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_SUNXI policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_TI_SYSCON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RESET_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_RESET_ZYNQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_COMMON_RESET_HI3660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_RESET_HI6220 policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Rpmsg drivers +CONFIG_RPMSG_CHAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPMSG_QCOM_GLINK_RPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPMSG_QCOM_GLINK_SMEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RPMSG_QCOM_SMD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RPMSG_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> SCSI device support +CONFIG_RAID_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support +CONFIG_SCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_MQ_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_SCSI_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_SD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHR_DEV_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CHR_DEV_OSST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_SR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_SR_VENDOR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_CHR_DEV_SG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHR_DEV_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_ENCLOSURE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_CONSTANTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_SCAN_ASYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SCSI flag +CONFIG_CHR_DEV_SG note +CONFIG_BLK_DEV_SD mark note +CONFIG_BLK_DEV_SR mark note + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> OSD-Initiator library +CONFIG_SCSI_OSD_INITIATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_OSD_ULD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_OSD_DPRINT_SENSE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SCSI_OSD_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> PCMCIA SCSI adapter support +CONFIG_SCSI_LOWLEVEL_PCMCIA policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_AHA152X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_FDOMAIN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_NINJA_SCSI policy<{'i386': 'm'}> +CONFIG_PCMCIA_QLOGIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_SYM53C500 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI Device Handlers +CONFIG_SCSI_DH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_DH_RDAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_HP_SW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_EMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_ALUA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI Transports +CONFIG_SCSI_SPI_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_FC_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_ISCSI_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_LIBSAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_ATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_SAS_HOST_SMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_SRP_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers +CONFIG_SCSI_LOWLEVEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ISCSI_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_BOOT_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_CXGB3_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_CXGB4_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BNX2_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BNX2X_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BE2ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CXLFLASH policy<{'ppc64el': 'm'}> +CONFIG_BLK_DEV_3W_XXXX_RAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_HPSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_3W_9XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_3W_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ACARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AHA152X policy<{'i386': 'm'}> +CONFIG_SCSI_AHA1542 policy<{'i386': 'm'}> +CONFIG_SCSI_AHA1740 policy<{'i386': 'm'}> +CONFIG_SCSI_AACRAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AIC94XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC94XX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_HISI_SAS policy<{'arm64': 'm'}> +CONFIG_SCSI_HISI_SAS_PCI policy<{'arm64': 'm'}> +CONFIG_SCSI_MVSAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_MVSAS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_MVSAS_TASKLET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_MVUMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_DPT_I2O policy<{'amd64': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_SCSI_ADVANSYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ARCMSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ESAS2R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEGARAID_NEWGEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MEGARAID_MM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEGARAID_MAILBOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEGARAID_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEGARAID_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_MPT3SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_MPT2SAS_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128', 's390x': '128'}> +CONFIG_SCSI_MPT3SAS_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128', 's390x': '128'}> +CONFIG_SCSI_MPT2SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SMARTPQI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFSHCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_UFSHCD_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_DWC_TC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFSHCD_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_DWC_TC_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_QCOM policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_SCSI_HPTIOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BUSLOGIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCSI_FLASHPOINT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_VMWARE_PVSCSI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_XEN_SCSI_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_STORAGE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LIBFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_SNIC_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_DMX3191D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_FUTURE_DOMAIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_GDTH policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_ISCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCSI_GENERIC_NCR5380 policy<{'i386': 'm'}> +CONFIG_SCSI_IPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_IBMVSCSI policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVSCSIS policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVFC policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVFC_TRACE policy<{'ppc64el': 'y'}> +CONFIG_SCSI_INITIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_INIA100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_PPA policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IMM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IZIP_EPP16 policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_IZIP_SLOW_CTR policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_NCR53C406A policy<{'i386': 'm'}> +CONFIG_SCSI_STEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_IPR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IPR_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_IPR_DUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_QLOGIC_FAS policy<{'i386': 'm'}> +CONFIG_SCSI_QLOGIC_1280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_QLA_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TCM_QLA2XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCM_QLA2XXX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_QLA_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QEDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_LPFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_LPFC_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_SIM710 policy<{'i386': 'm'}> +CONFIG_SCSI_SYM53C416 policy<{'i386': 'm'}> +CONFIG_SCSI_DC395x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AM53C974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_NSP32 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_SCSI_WD719X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_DEBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZFCP policy<{'s390x': 'm'}> +CONFIG_SCSI_PMCRAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_PM8001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BFA_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_CHELSIO_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_SCSI_IPR_TRACE note +CONFIG_SCSI_IPR_DUMP note +CONFIG_SCSI_VIRTIO note + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> Adaptec AIC79xx U320 support +CONFIG_SCSI_AIC79XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC79XX_CMDS_PER_DEVICE policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_AIC79XX_RESET_DELAY_MS policy<{'amd64': '5000', 'arm64': '5000', 'armhf': '5000', 'i386': '5000', 'ppc64el': '5000'}> +CONFIG_AIC79XX_DEBUG_ENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AIC79XX_DEBUG_MASK policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_AIC79XX_REG_PRETTY_PRINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> Adaptec AIC7xxx Fast -> U160 support (New Driver) +CONFIG_SCSI_AIC7XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC7XXX_CMDS_PER_DEVICE policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_AIC7XXX_RESET_DELAY_MS policy<{'amd64': '5000', 'arm64': '5000', 'armhf': '5000', 'i386': '5000', 'ppc64el': '5000'}> +CONFIG_AIC7XXX_DEBUG_ENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AIC7XXX_DEBUG_MASK policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_AIC7XXX_REG_PRETTY_PRINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support +CONFIG_SCSI_EATA policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_EATA_TAGGED_QUEUE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_EATA_LINKED_COMMANDS policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_EATA_MAX_TAGS policy<{'amd64': '16', 'i386': '16', 'ppc64el': '16'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> LibFCoE module +CONFIG_LIBFCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FCOE_FNIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_QEDF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> NCR Quad 720 MCA SCSI support + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> SYM53C8XX Version 2 SCSI support +CONFIG_SCSI_SYM53C8XX_2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_SCSI_SYM53C8XX_MAX_TAGS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_SCSI_SYM53C8XX_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers +CONFIG_OWL_PM_DOMAINS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ROCKCHIP_PM_DOMAINS policy<{'armhf': 'y'}> +CONFIG_ARCH_TEGRA_2x_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_3x_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_114_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_124_SOC policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Amlogic SoC drivers +CONFIG_MESON_GX_SOCINFO policy<{'armhf': 'y'}> +CONFIG_MESON_GX_PM_DOMAINS policy<{'armhf': 'y'}> +CONFIG_MESON_MX_SOCINFO policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Broadcom SoC drivers +CONFIG_RASPBERRYPI_POWER policy<{'arm64': 'y'}> +CONFIG_SOC_BRCMSTB policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_BRCMSTB_PM policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Freescale DPAA 1.x support +CONFIG_FSL_DPAA policy<{'arm64': 'y'}> +CONFIG_FSL_DPAA_CHECKING policy<{'arm64': 'y'}> +CONFIG_FSL_BMAN_TEST policy<{'arm64': 'm'}> +CONFIG_FSL_BMAN_TEST_API policy<{'arm64': 'n'}> +CONFIG_FSL_QMAN_TEST policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> MediaTek SoC drivers +CONFIG_MTK_INFRACFG policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MTK_PMIC_WRAP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTK_SCPSYS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Qualcomm SoC drivers +CONFIG_QCOM_GLINK_SSR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_GSBI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_PM policy<{'armhf': 'y'}> +CONFIG_QCOM_RMTFS_MEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMP2P policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_WCNSS_CTRL policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Renesas SoC driver support +CONFIG_SOC_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SYSC_R8A7743 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7745 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7779 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7790 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7791 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7792 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7794 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7795 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A7796 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A77970 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A77995 policy<{'arm64': 'y'}> +CONFIG_RST_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SYSC_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Samsung SoC driver support +CONFIG_SOC_SAMSUNG policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PMU policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PMU_ARM_DRIVERS policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PM_DOMAINS policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> TI SOC drivers support +CONFIG_SOC_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_WKUP_M3_IPC policy<{'armhf-generic': 'n'}> +# +CONFIG_SOC_TI flag + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> ZTE SoC driver support + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> i.MX SoC drivers +CONFIG_IMX7_PM_DOMAINS policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> SPI support +CONFIG_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SPI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_ALTERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_ARMADA_3700 policy<{'armhf': 'm'}> +CONFIG_SPI_AXI_SPI_ENGINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_BCM2835 policy<{'arm64': 'm'}> +CONFIG_SPI_BCM2835AUX policy<{'arm64': 'm'}> +CONFIG_SPI_BCM_QSPI policy<{'arm64': 'm'}> +CONFIG_SPI_BITBANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_BUTTERFLY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_CADENCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DESIGNWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DW_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DW_MID_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_DW_MMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_FSL_LPSPI policy<{'armhf-generic': 'm'}> +CONFIG_SPI_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_IMX policy<{'armhf-generic': 'm'}> +CONFIG_SPI_LM70_LLP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_FSL_SPI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_FSL_DSPI policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_SPI_MESON_SPICC policy<{'armhf': 'm'}> +CONFIG_SPI_MESON_SPIFC policy<{'armhf': 'm'}> +CONFIG_SPI_MT65XX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_OC_TINY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_OMAP24XX policy<{'armhf': 'y'}> +CONFIG_SPI_TI_QSPI policy<{'armhf': 'm'}> +CONFIG_SPI_ORION policy<{'armhf': 'm'}> +CONFIG_SPI_PL022 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_PXA2XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_ROCKCHIP policy<{'amd64': 'n', 'arm64': 'm', 'armhf': 'm', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_RSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_QUP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_S3C64XX policy<{'armhf': 'm'}> +CONFIG_SPI_SC18IS602 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SH_MSIOF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_SH_HSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_SPRD_ADI policy<{'arm64': 'm'}> +CONFIG_SPI_SUN4I policy<{'arm64': 'n'}> +CONFIG_SPI_SUN6I policy<{'arm64': 'm'}> +CONFIG_SPI_TEGRA114 policy<{'armhf-generic': 'm'}> +CONFIG_SPI_TEGRA20_SFLASH policy<{'armhf-generic': 'm'}> +CONFIG_SPI_TEGRA20_SLINK policy<{'armhf-generic': 'm'}> +CONFIG_SPI_THUNDERX policy<{'arm64': 'm'}> +CONFIG_SPI_TOPCLIFF_PCH policy<{'i386': 'm'}> +CONFIG_SPI_XCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_XILINX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_XLP policy<{'arm64': 'm'}> +CONFIG_SPI_ZYNQMP_GQSPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SPIDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_LOOPBACK_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_TLE62X0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SLAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_SLAVE_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SLAVE_SYSTEM_CONTROL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> SPMI support +CONFIG_SPMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SPMI_MSM_PMIC_ARB policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) +CONFIG_ATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATA_VERBOSE_ERROR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATA_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SATA_ZPODD policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SATA_PMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SATA_AHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_AHCI_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AHCI_BRCM policy<{'arm64': 'm'}> +CONFIG_AHCI_DM816 policy<{'armhf': 'm'}> +CONFIG_AHCI_IMX policy<{'armhf-generic': 'y'}> +CONFIG_AHCI_CEVA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_AHCI_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_AHCI_MVEBU policy<{'armhf': 'm'}> +CONFIG_AHCI_SUNXI policy<{'arm64': 'n'}> +CONFIG_AHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_AHCI_XGENE policy<{'arm64': 'm'}> +CONFIG_AHCI_QORIQ policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_AHCI_SEATTLE policy<{'arm64': 'm'}> +CONFIG_SATA_INIC162X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_ACARD_AHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SIL24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SATA_AHCI_PLATFORM note + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) >> ATA SFF support (for legacy IDE and PATA) +CONFIG_ATA_SFF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PDC_ADMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_QSTOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SX4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CMD640_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ISAPNP policy<{'i386': 'm'}> +CONFIG_PATA_MPIIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NS87410 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OPTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PATA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OF_PLATFORM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_QDI policy<{'i386': 'm'}> +CONFIG_PATA_RZ1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_WINBOND_VLB policy<{'i386': 'm'}> +CONFIG_PATA_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) >> ATA SFF support (for legacy IDE and PATA) >> ATA BMDMA support +CONFIG_ATA_BMDMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATA_PIIX policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_SATA_DWC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_DWC_OLD_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SATA_DWC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SATA_HIGHBANK policy<{'armhf': 'y'}> +CONFIG_SATA_MV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_NV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_PROMISE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SATA_SIL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SVW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_ULI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_VITESSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ALI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_AMD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ARTOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ATIIXP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ATP867X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CMD64X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CS5520 policy<{'i386': 'm'}> +CONFIG_PATA_CS5530 policy<{'i386': 'm'}> +CONFIG_PATA_CS5535 policy<{'i386': 'm'}> +CONFIG_PATA_CS5536 policy<{'i386': 'm'}> +CONFIG_PATA_CYPRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_EFAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT366 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT37X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X2N policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X3_DMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PATA_IMX policy<{'armhf-generic': 'm'}> +CONFIG_PATA_IT8213 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_IT821X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_JMICRON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_MARVELL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NETCELL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NINJA32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NS87415 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OLDPIIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OPTIDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PDC2027X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PDC_OLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_RADISYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_RDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SC1200 policy<{'i386': 'm'}> +CONFIG_PATA_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SERVERWORKS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SIL680 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SIS policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_PATA_TOSHIBA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_TRIFLEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_WINBOND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ATA_GENERIC policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_SATA_HIGHBANK mark note +CONFIG_PATA_HPT3X3_DMA note +CONFIG_ATA_PIIX mark note + +# Menu: Device Drivers >> Sonics Silicon Backplane +CONFIG_SSB_PCIHOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SSB_PCMCIAHOST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SSB_SDIOHOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SSB_DRIVER_PCICORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sonics Silicon Backplane >> Sonics Silicon Backplane support +CONFIG_SSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SSB_SILENT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SSB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SSB_DRIVER_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sony MemoryStick card support +CONFIG_MEMSTICK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEMSTICK_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MEMSTICK_UNSAFE_RESUME policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MSPRO_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_TIFM_MS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_JMICRON_38X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_R592 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_REALTEK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_REALTEK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support +CONFIG_SOUND policy<{'amd64': 'n', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SOUND_OSS_CORE_PRECLAIM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_SOUND note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture +CONFIG_SND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OSSEMUL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MIXER_OSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PCM_OSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_PCM_TIMER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HRTIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MAX_CARDS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SND_SUPPORT_OLD_API policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_VERBOSE_PROCFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_VERBOSE_PRINTK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_HDA_PREALLOC_SIZE policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +# +CONFIG_SND note +CONFIG_SND_PCM_OSS note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support +CONFIG_SND_SOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AMD_ACP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AMD_CZ_RT5645_MACH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BCM2835_SOC_I2S policy<{'arm64': 'm'}> +CONFIG_SND_DESIGNWARE_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SND_DESIGNWARE_PCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_SND_I2S_HI6210_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_KIRKWOOD_SOC policy<{'armhf': 'm'}> +CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB policy<{'armhf': 'm'}> +CONFIG_SND_SOC_MT2701 policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_SND_SOC_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_STORM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_APQ8016_SBC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_XTFPGA_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZX_TDM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SND_SIMPLE_CARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SIMPLE_SCU_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AUDIO_GRAPH_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AUDIO_GRAPH_SCU_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Mediatek MT8173 chip +CONFIG_SND_SOC_MT8173 policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Rockchip +CONFIG_SND_SOC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_I2S policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_PDM policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_MAX98090 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_RT5645 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_RK3288_HDMI_ANALOG policy<{'armhf': 'm'}> +CONFIG_SND_SOC_RK3399_GRU_SOUND policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Samsung +CONFIG_SND_SOC_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_PCM policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_I2S policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SMDK_WM8994_PCM policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SNOW policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ODROID policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_TM2_WM5110 policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Allwinner SoC Audio support +CONFIG_SND_SUN4I_CODEC policy<{'arm64': 'n'}> +CONFIG_SND_SUN8I_CODEC_ANALOG policy<{'arm64': 'm'}> +CONFIG_SND_SUN4I_I2S policy<{'arm64': 'n'}> +CONFIG_SND_SUN4I_SPDIF policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Audio support for Imagination Technologies designs +CONFIG_SND_SOC_IMG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_SOC_IMG_I2S_IN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_I2S_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_PARALLEL_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_SPDIF_IN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_SPDIF_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> CODEC drivers +CONFIG_SND_SOC_AC97_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1761_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1761_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU7002 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4104 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4554 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4613 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK5386 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ALC5623 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_BT_SCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L33 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L34 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L35 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L42 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L51_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L52 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L56 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L73 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4265 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4270 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4271_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4271_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42XX8_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS43130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4349 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS53L30 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_DIO2125 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES7134 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8316 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8328_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8328_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_GTM601 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_INNO_RK3036 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX98504 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX98927 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX9860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MSM8916_WCD_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM1681 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM179X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM179X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM3168A_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM3168A_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM512x_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM512x_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_RT5616 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_RT5631 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SGTL5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SIRF_AUDIO_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SPDIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM2602_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM2602_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM4567 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STA32X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STA350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STI_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS2552 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS5086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS571X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS5720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TFA9879 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC23_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC23_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC31XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC3X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TS3A227E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8524 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8580 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8728 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8731 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8741 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8753 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8776 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8804_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8804_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8962 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8978 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8985 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ZX_AUD96P22 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8540 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8824 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TPA6130A2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC_SGTL5000 flag + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Intel ASoC SST drivers +CONFIG_SND_SOC_INTEL_SST_TOPLEVEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_HASWELL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BAYTRAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKYLAKE policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Intel ASoC SST drivers >> Intel Audio machine drivers +CONFIG_SND_SOC_INTEL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_MFLD_MACHINE policy<{'i386': 'm'}> +CONFIG_SND_SOC_INTEL_HASWELL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BROADWELL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SND_SOC_INTEL_SKL_RT286_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BXT_RT298_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> STMicroelectronics STM32 SOC audio support + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC AC97 Audio for the ADI BF5xx chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs +CONFIG_SND_SOC_FSL_ASRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SPDIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_ESAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMX_AUDMUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC_FSL_SSI flag +CONFIG_SND_SOC_IMX_AUDMUX flag + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs >> SoC Audio for Freescale PowerPC CPUs + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs >> SoC Audio for Freescale i.MX CPUs +CONFIG_SND_IMX_SOC policy<{'armhf-generic': 'y'}> +CONFIG_SND_SOC_EUKREA_TLV320 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_WM8962 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_ES8328 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_SGTL5000 policy<{'armhf-generic': 'y'}> +CONFIG_SND_SOC_IMX_SPDIF policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_MC13783 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_FSL_ASOC_CARD policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale MXS CPUs + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Texas Instruments chips using eDMA +CONFIG_SND_EDMA_SOC policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_SND_DAVINCI_SOC_I2S policy<{'armhf-generic': 'n'}> +CONFIG_SND_DAVINCI_SOC_MCASP policy<{'armhf': 'm'}> +CONFIG_SND_AM33XX_SOC_EVM policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Texas Instruments chips using eDMA >> DM365 codec select + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Atmel System-on-Chip +CONFIG_SND_ATMEL_SOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Intel PXA2xx chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Tegra System-on-Chip +CONFIG_SND_SOC_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_AC97 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_DAS policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_I2S policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_SPDIF policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA30_AHUB policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA30_I2S policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_RT5640 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM8753 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM8903 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM9712 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_TRIMSLICE policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_ALC5632 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_MAX98090 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_RT5677 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_SGTL5000 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Texas Instruments OMAP chips +CONFIG_SND_OMAP_SOC policy<{'armhf': 'y'}> +CONFIG_SND_OMAP_SOC_HDMI_AUDIO policy<{'armhf': 'm'}> +CONFIG_SND_OMAP_SOC_RX51 policy<{'armhf': 'm'}> +CONFIG_SND_OMAP_SOC_OMAP_TWL4030 policy<{'armhf': 'y'}> +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040 policy<{'armhf-generic': 'm'}> +CONFIG_SND_OMAP_SOC_OMAP3_PANDORA policy<{'armhf-generic': 'm'}> +# +CONFIG_SND_OMAP_SOC note +CONFIG_SND_OMAP_SOC_OMAP_TWL4030 note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for SuperH +CONFIG_SND_SOC_SH4_FSI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for Ux500 platform + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for the Cirrus Logic EP93xx series + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC I2S Audio for the ADI Blackfin chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ARM sound devices +CONFIG_SND_ARM policy<{'armhf': 'y'}> +CONFIG_SND_ARMAACI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Apple Onboard Audio driver + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Atmel devices (AT91) + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> FireWire sound devices +CONFIG_SND_FIREWIRE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_DICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OXFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ISIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWORKS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BEBOB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_DIGI00X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_TASCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_MOTU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> GSC sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Generic sound devices +CONFIG_SND_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_PCSP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIRMIDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MTPAV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MTS64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SERIAL_U16550 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MPU401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PORTMAN2X4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AC97_POWER_SAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_AC97_POWER_SAVE_DEFAULT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> HD-Audio +CONFIG_SND_HDA_INTEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SND_HDA_HWDEP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_RECONFIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_INPUT_BEEP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_INPUT_BEEP_MODE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_SND_HDA_PATCH_LOADER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_CODEC_REALTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_SIGMATEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_HDMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CIRRUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CONEXANT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0132_DSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_CODEC_CMEDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_SI3054 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_POWER_SAVE_DEFAULT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +# +CONFIG_SND_HDA_RECONFIG note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ISA sound devices +CONFIG_SND_ISA policy<{'i386': 'y'}> +CONFIG_SND_ADLIB policy<{'i386': 'm'}> +CONFIG_SND_AD1816A policy<{'i386': 'm'}> +CONFIG_SND_AD1848 policy<{'i386': 'm'}> +CONFIG_SND_ALS100 policy<{'i386': 'm'}> +CONFIG_SND_AZT1605 policy<{'i386': 'm'}> +CONFIG_SND_AZT2316 policy<{'i386': 'm'}> +CONFIG_SND_AZT2320 policy<{'i386': 'm'}> +CONFIG_SND_CMI8328 policy<{'i386': 'm'}> +CONFIG_SND_CMI8330 policy<{'i386': 'm'}> +CONFIG_SND_CS4231 policy<{'i386': 'm'}> +CONFIG_SND_CS4236 policy<{'i386': 'm'}> +CONFIG_SND_ES1688 policy<{'i386': 'm'}> +CONFIG_SND_ES18XX policy<{'i386': 'm'}> +CONFIG_SND_SC6000 policy<{'i386': 'm'}> +CONFIG_SND_GUSCLASSIC policy<{'i386': 'm'}> +CONFIG_SND_GUSEXTREME policy<{'i386': 'm'}> +CONFIG_SND_GUSMAX policy<{'i386': 'm'}> +CONFIG_SND_INTERWAVE policy<{'i386': 'm'}> +CONFIG_SND_INTERWAVE_STB policy<{'i386': 'm'}> +CONFIG_SND_JAZZ16 policy<{'i386': 'm'}> +CONFIG_SND_OPL3SA2 policy<{'i386': 'm'}> +CONFIG_SND_OPTI92X_AD1848 policy<{'i386': 'm'}> +CONFIG_SND_OPTI92X_CS4231 policy<{'i386': 'm'}> +CONFIG_SND_OPTI93X policy<{'i386': 'm'}> +CONFIG_SND_MIRO policy<{'i386': 'm'}> +CONFIG_SND_SB8 policy<{'i386': 'm'}> +CONFIG_SND_SB16 policy<{'i386': 'm'}> +CONFIG_SND_SBAWE policy<{'i386': 'm'}> +CONFIG_SND_SB16_CSP policy<{'i386': 'y'}> +CONFIG_SND_SSCAPE policy<{'i386': 'm'}> +CONFIG_SND_WAVEFRONT policy<{'i386': 'm'}> +CONFIG_SND_MSND_PINNACLE policy<{'i386': 'm'}> +CONFIG_SND_MSND_CLASSIC policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> MIPS sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PCI sound devices +CONFIG_SND_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_AD1889 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALS300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALS4000 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALI5451 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ASIHPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_ATIIXP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ATIIXP_MODEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AW2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AZT3328 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BT87X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BT87X_OVERCLOCK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_CA0106 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CMIPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OXYGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS4281 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS46XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS46XX_NEW_DSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_CS5530 policy<{'i386': 'm'}> +CONFIG_SND_CS5535AUDIO policy<{'i386': 'm'}> +CONFIG_SND_CTXFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DARLA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_GINA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LAYLA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DARLA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_GINA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LAYLA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ECHO3G policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGOIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGODJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGOIOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGODJX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_EMU10K1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_EMU10K1X policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ENS1370 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ENS1371 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1938 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1968 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1968_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_ES1968_RADIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_FM801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FM801_TEA575X_BOOL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDSP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDSPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ICE1712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ICE1724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INTEL8X0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INTEL8X0M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_KORG1212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LOLA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LX6464ES policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MAESTRO3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MAESTRO3_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MIXART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_NM256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PCXHR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RIPTIDE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME96 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME9652 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SIS7019 policy<{'i386': 'm'}> +CONFIG_SND_SONICVIBES policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_TRIDENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIA82XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIA82XX_MODEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIRTUOSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VX222 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_YMFPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PCMCIA sound devices +CONFIG_SND_PCMCIA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_SND_VXPOCKET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_PDAUDIOCF policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PowerPC sound devices +CONFIG_SND_PPC policy<{'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> SPI sound devices +CONFIG_SND_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> SUPERH sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Sequencer support +CONFIG_SND_SEQUENCER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SEQ_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SEQUENCER_OSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_SEQ_HRTIMER_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Sparc sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> USB sound devices +CONFIG_SND_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_USB_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_UA101 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_USX2Y policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_CAIAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_CAIAQ_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_USB_US122L policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_USB_6FIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_HIFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BCD2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_POD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_PODHD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_TONEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_VARIAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> X86 sound devices +CONFIG_SND_X86 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HDMI_LPE_AUDIO policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers +CONFIG_STAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PRISM2_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723BS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8712U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8188EU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_88EU_AP_MODE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_R8822BE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTS5208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VT6655 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VT6656 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SM750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_XGI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMXX policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_STAGING_BOARD policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_LTE_GDM724X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FWTTY_MAX_TOTAL_PORTS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_FWTTY_MAX_CARD_PORTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_MTD_SPINAND_MT29F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SPINAND_ONDIEECC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LUSTRE_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DGNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GS_FPGABOOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_SKEIN policy<{'amd64': 'y'}> +CONFIG_COMMON_CLK_XLNX_CLKWZRD policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_FSL_MC_BUS policy<{'arm64': 'y'}> +CONFIG_FSL_MC_DPIO policy<{'arm64': 'm'}> +CONFIG_FSL_DPAA2 policy<{'arm64': 'y'}> +CONFIG_FSL_DPAA2_ETH policy<{'arm64': 'm'}> +CONFIG_WILC1000_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILC1000_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILC1000_HW_OOB_INTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KS7010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_CCREE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_VBOXVIDEO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PI433 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_STAGING flag +CONFIG_LUSTRE_FS flag +CONFIG_DRM_VBOXVIDEO note flag + +# Menu: Device Drivers >> Staging drivers >> Android + +# Menu: Device Drivers >> Staging drivers >> Android >> Ion Memory Manager + +# Menu: Device Drivers >> Staging drivers >> Broadcom VideoCore support +CONFIG_BCM_VIDEOCORE policy<{'arm64': 'm'}> +CONFIG_BCM2835_VCHIQ policy<{'arm64': 'm'}> +CONFIG_SND_BCM2835 policy<{'arm64': 'm'}> +CONFIG_VIDEO_BCM2835 policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) +CONFIG_COMEDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB policy<{'amd64': '2048', 'arm64': '2048', 'armhf': '2048', 'i386': '2048', 'ppc64el': '2048'}> +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB policy<{'amd64': '20480', 'arm64': '20480', 'armhf': '20480', 'i386': '20480', 'ppc64el': '20480'}> +CONFIG_COMEDI_8255_SA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_KCOMEDILIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi ISA and PC/104 drivers +CONFIG_COMEDI_ISA_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_COMEDI_PCL711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL726 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL730 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL812 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL816 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL818 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCM3724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_DIO200_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC236_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC263_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTI800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTI802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAC02 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS16M1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS08_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS1800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS6402 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2811 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2814 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2815 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2817 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT282X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DMM32AT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_FL512 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AIO_AIO12_8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AIO_IIRO_16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_II_PCI20KC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_C6XDIGIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MPC624 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADQ12B policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_AT_A2150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_AT_AO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_ATMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_ATMIO16D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_LABPC_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMDA12 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMUIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MULTIQ3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_S526 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi PCI drivers +CONFIG_COMEDI_PCI_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_8255_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1032 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1516 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1564 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_16XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_2032 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_2200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3120 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI6208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI7X3X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI8164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI9111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI9118 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1710 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1723 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI_DIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_DIO200_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC236_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC263_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PCI224 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PCI230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CONTEC_PCI_DIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS08_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DYNA_PCI10XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_GSC_HPDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MF6X4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ICP_MULTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAQBOARD2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_JR3_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_KE_COUNTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDAS64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIMDAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIMDDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ME4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ME_DAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_6527 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_65XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_660X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_670X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_LABPC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_PCIDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_PCIMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTD520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_S626 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi PCMCIA drivers +CONFIG_COMEDI_PCMCIA_DRIVERS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_CB_DAS16_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_DAS08_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_DAQ_700_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_DAQ_DIO24_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_LABPC_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_MIO_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_QUATECH_DAQP_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi USB drivers +CONFIG_COMEDI_USB_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT9812 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_USB6501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUXFAST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUXSIGMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_VMK80XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi misc drivers +CONFIG_COMEDI_MISC_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_COMEDI_BOND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_SERIAL2002 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_SSV_DNP policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Greybus support +CONFIG_GREYBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_ES2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_BOOTROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LOOPBACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_VIBRATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Greybus support >> Greybus Bridged PHY Class drivers +CONFIG_GREYBUS_BRIDGED_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Accelerometers +CONFIG_ADIS16201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16203 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Active energy metering IC +CONFIG_ADE7753 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7754 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7758 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7759 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Analog digital bi-direction converters +CONFIG_ADT7316 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADT7316_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADT7316_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Analog to digital converters +CONFIG_AD7606 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7606_IFACE_PARALLEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7606_IFACE_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7816 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Capacitance to digital converters +CONFIG_AD7150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7152 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7746 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Digital gyroscope sensors +CONFIG_ADIS16060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Direct Digital Synthesis +CONFIG_AD9832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD9834 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Light sensors +CONFIG_TSL2x7x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Network Analyzer, Impedance Converters +CONFIG_AD5933 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Resolver to digital converters +CONFIG_AD2S90 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD2S1200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD2S1210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support +CONFIG_IRDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRDA_ULTRA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_CACHE_LAST_LSAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_FAST_RR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers +CONFIG_IRTTY_SIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KINGSUN_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KSDAZZLE_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS959_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IRDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SIGMATEL_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NSC_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WINBOND_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOSHIBA_FIR policy<{'i386': 'm'}> +CONFIG_SMC_IRCC_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALI_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VLSI_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIA_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCS_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Blackfin SIR on UART + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Blackfin SIR on UART >> SIR Mode + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Serial dongle support +CONFIG_DONGLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ESI_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACTISYS_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEKRAM_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOIM3232_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LITELINK_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MA600_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIRBIL_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP2120_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_OLD_BELKIN_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACT200L_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Lustre networking subsystem (LNet) +CONFIG_LNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LNET_MAX_PAYLOAD policy<{'amd64': '1048576', 'arm64': '1048576', 'armhf': '1048576', 'i386': '1048576', 'ppc64el': '1048576'}> +CONFIG_LNET_SELFTEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LNET_XPRT_IB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> MOST driver +CONFIG_MOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOSTCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_CDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_NETWORK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_SOUND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_V4L2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_DIM2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers +CONFIG_STAGING_MEDIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_BCM2048 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2099 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_IMX_MEDIA policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_OMAP4 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> Enable support to Intel MIPI camera drivers +CONFIG_INTEL_ATOMISP policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_INTEL_ATOMISP note + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> Linux Infrared Remote Control IR receiver/transmitter drivers +CONFIG_LIRC_STAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIRC_ZILOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> i.MX5/6 Media Sub devices +CONFIG_VIDEO_IMX_CSI policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> NV Tegra Embedded Controller SMBus Interface +CONFIG_MFD_NVEC policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_NVEC policy<{'armhf-generic': 'm'}> +CONFIG_SERIO_NVEC_PS2 policy<{'armhf-generic': 'm'}> +CONFIG_NVEC_POWER policy<{'armhf-generic': 'm'}> +CONFIG_NVEC_PAZ00 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Speakup console speech + +# Menu: Device Drivers >> Staging drivers >> Speakup console speech >> Speakup core +CONFIG_SPEAKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_ACNTSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_ACNTPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_APOLLO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_AUDPTR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_BNS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECTLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_DTLK policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_KEYPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_LTLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_SOFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_SPKOUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_TXPRT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Support for rtllib wireless devices +CONFIG_RTLLIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_CCMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_TKIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_WEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Support for small TFT LCD display modules +CONFIG_FB_TFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_AGM1264K_FL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_BD663474 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8340BN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8347D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8353D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8357D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9163 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9325 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9340 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9341 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9486 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_PCD8544 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_RA8875 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_S6D02A1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_S6D1121 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SH1106 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1289 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1306 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1325 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1331 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1351 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ST7735R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ST7789V policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_TINYLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_TLS8204 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UC1611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UC1701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UPD161704 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_WATTEROTT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_FLEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_FBTFT_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> USB Power Delivery and Type-C drivers +CONFIG_TYPEC_TCPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Unisys SPAR driver support +CONFIG_UNISYSSPAR policy<{'amd64': 'y'}> +CONFIG_UNISYS_VISORBUS policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORNIC policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORINPUT policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORHBA policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> System Trace Module devices +CONFIG_STM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_CONSOLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_HEARTBEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_FTRACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> TEE drivers +CONFIG_OPTEE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> TI VLYNQ + +# Menu: Device Drivers >> USB support +CONFIG_USB_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_USB_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_UHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_WHCI_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LED_TRIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ULPI_BUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_UHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> ChipIdea Highspeed Dual Role Controller +CONFIG_USB_CHIPIDEA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CHIPIDEA_UDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CHIPIDEA_HOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CHIPIDEA_ULPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB +CONFIG_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ANNOUNCE_NEW_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DEFAULT_PERSIST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OTG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_OTG_WHITELIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_OTG_BLACKLIST_HUB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_LEDS_TRIGGER_USBPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB_CBAF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB_CBAF_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_C67X00_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_OXU210HP_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISP116X_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISP1362_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FOTG210_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MAX3421_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_U132_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SL811_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SL811_HCD_ISO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SL811_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_USB_R8A66597_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RENESAS_USBHS_HCD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_HWA_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IMX21_HCD policy<{'armhf-generic': 'm'}> +CONFIG_USB_HCD_BCMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HCD_SSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HCD_TEST_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_RENESAS_USBHS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_ACM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WDM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MDC800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MICROTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MTU3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_MTU3_DEBUG policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_ISP1760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_USS720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMI62 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMI26 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ADUTUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SEVSEG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RIO500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LEGOTOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CYPRESS_CY7C63 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CYTHERM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IDMOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FTDI_ELAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_APPLEDISPLAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SISUSBVGA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SISUSBVGA_CON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_LD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TRANCEVIBRATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IOWARRIOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EHSET_TEST_FIXTURE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISIGHTFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_YUREX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EZUSB_FX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HUB_USB251XB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSIC_USB3503 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSIC_USB4604 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LINK_LAYER_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CHAOSKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_OTG note +CONFIG_USB_OTG_WHITELIST note +CONFIG_USB_OTG_BLACKLIST_HUB note +CONFIG_USB_OTG_FSM note> +CONFIG_USB_HCD_BCMA note +CONFIG_USB_HCD_SSB note + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB2 DRD Core Support +CONFIG_USB_DWC2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC2_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DWC2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC2_TRACK_MISSED_SOFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB2 DRD Core Support >> DWC2 Mode Selection +CONFIG_USB_DWC2_HOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC2_PERIPHERAL policy<{'armhf': 'n'}> +CONFIG_USB_DWC2_DUAL_ROLE policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB3 DRD Core Support +CONFIG_USB_DWC3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DWC3_ULPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC3_OMAP policy<{'armhf': 'm'}> +CONFIG_USB_DWC3_EXYNOS policy<{'armhf': 'm'}> +CONFIG_USB_DWC3_PCI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_USB_DWC3_OF_SIMPLE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB3 DRD Core Support >> DWC3 Mode Selection +CONFIG_USB_DWC3_HOST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC3_GADGET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC3_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> EHCI HCD (USB 2.0) support +CONFIG_USB_EHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_ROOT_HUB_TT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_TT_NEWSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_MXC policy<{'armhf-generic': 'm'}> +CONFIG_USB_EHCI_HCD_OMAP policy<{'armhf': 'm'}> +CONFIG_USB_EHCI_HCD_ORION policy<{'armhf': 'y'}> +CONFIG_USB_EHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_USB_EHCI_HCD_PPC_OF policy<{'ppc64el': 'y'}> +CONFIG_USB_EHCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_USB_EHCI_HCD_PLATFORM policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_USB_EHCI_HCD_PLATFORM mark note flag +CONFIG_USB_EHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> ISP1760 Mode Selection +CONFIG_USB_ISP1760_HOST_ROLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ISP1760_GADGET_ROLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ISP1760_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) +CONFIG_USB_MUSB_HDRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MUSB_SUNXI policy<{'arm64': 'm'}> +CONFIG_USB_MUSB_TUSB6010 policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_OMAP2PLUS policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_AM35X policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_DSPS policy<{'armhf': 'm'}> +# +CONFIG_USB_MUSB_HDRC note flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) >> Disable DMA (always use PIO) +CONFIG_MUSB_PIO_ONLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) >> MUSB Mode Selection +CONFIG_USB_MUSB_HOST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_MUSB_GADGET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_MUSB_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> MTU3 Mode Selection +CONFIG_USB_MTU3_HOST policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_MTU3_GADGET policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_MTU3_DUAL_ROLE policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> OHCI HCD (USB 1.1) support +CONFIG_USB_OHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OHCI_HCD_OMAP3 policy<{'armhf-generic': 'm'}> +CONFIG_USB_OHCI_HCD_PPC_OF_BE policy<{'ppc64el': 'n'}> +CONFIG_USB_OHCI_HCD_PPC_OF_LE policy<{'ppc64el': 'n'}> +CONFIG_USB_OHCI_HCD_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OHCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_USB_OHCI_HCD_PLATFORM policy<{'amd64': 'y', 'arm64': 'm', 'armhf-generic': 'm', 'armhf-generic-lpae': 'n', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_USB_OHCI_HCD marknote +CONFIG_USB_OHCI_HCD_PPC_OF_LE flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB DSL modem support +CONFIG_USB_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SPEEDTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CXACRU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_UEAGLEATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_XUSBATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Mass Storage support +CONFIG_USB_STORAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_STORAGE_REALTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REALTEK_AUTOPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_STORAGE_DATAFAB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_FREECOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ISD200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_USBAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_SDDR09 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_SDDR55 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_JUMPSHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ALAUDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ONETOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_KARMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_CYPRESS_ATACB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ENE_UB6250 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_UAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support +CONFIG_USB_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_AIRCABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_ARK3116 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_BELKIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CH341 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_WHITEHEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_DIGI_ACCELEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CP210X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CYPRESS_M8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EMPEG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_FTDI_SIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_VISOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IPAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EDGEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EDGEPORT_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_F81232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_F8153X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_GARMIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IPW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IUU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KEYSPAN_PDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KLSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KOBIL_SCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MCT_U232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_METRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MOS7720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MOS7715_PARPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_MOS7840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MXUPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_NAVMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OTI6858 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QCAUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QUALCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SPCP8X5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SAFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SAFE_PADDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_SERIAL_SIERRAWIRELESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SYMBOL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CYBERJACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_XIRCOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OPTION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OMNINET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OPTICON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_XSENS_MT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_WISHBONE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SSU100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QT2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_UPD78F0730 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_DEBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_SERIAL_DEBUG note + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support >> USB Keyspan USA-xxx Serial Driver +CONFIG_USB_SERIAL_KEYSPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KEYSPAN_MPR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28XA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28XB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA18X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19W policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19QW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19QI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA49W policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB/IP support +CONFIG_USBIP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VHCI_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VHCI_HC_PORTS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_USBIP_VHCI_NR_HCS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_USBIP_HOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VUDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> xHCI HCD (USB 3.0) support +CONFIG_USB_XHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_XHCI_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_XHCI_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_XHCI_MVEBU policy<{'armhf': 'm'}> +CONFIG_USB_XHCI_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_XHCI_TEGRA policy<{'armhf-generic': 'm'}> +# +CONFIG_USB_XHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> USB Gadget Support +CONFIG_USB_GADGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_DEBUG_FILES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_VBUS_DRAW policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_U_SERIAL_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget functions configurable through configfs +CONFIG_USB_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CONFIGFS_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ACM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_OBEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_NCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ECM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ECM_SUBSET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_EEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_PHONET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_MASS_STORAGE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_LB_SS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_MIDI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_HID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UVC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_PRINTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_TCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations +CONFIG_USB_ZERO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GADGET_UAC1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GADGET_UAC1_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ETH_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ETH_EEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_G_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGETFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MASS_STORAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MIDI_GADGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CDC_COMPOSITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_NOKIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_ACM_MS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_MULTI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'm', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_G_MULTI_RNDIS policy<{'armhf': 'y'}> +CONFIG_USB_G_MULTI_CDC policy<{'armhf': 'y'}> +CONFIG_USB_G_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_DBGP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_WEBCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations >> EHCI Debug Device mode +CONFIG_USB_G_DBGP_PRINTK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_G_DBGP_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations >> Function Filesystem +CONFIG_USB_FUNCTIONFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FUNCTIONFS_ETH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_FUNCTIONFS_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_FUNCTIONFS_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Peripheral Controller +CONFIG_USB_FSL_USB2 policy<{'armhf-generic': 'm'}> +CONFIG_USB_FUSB300 policy<{'armhf-generic': 'm'}> +CONFIG_USB_FOTG210_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GR_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_R8A66597 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RENESAS_USBHS_UDC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_RENESAS_USB3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_PXA27X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MV_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MV_U3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SNP_UDC_PLAT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_USB_M66592 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_BDC_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_BDC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AMD5536UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET2272 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET2272_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_NET2280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GOKU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EG20T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_XILINX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DUMMY_HCD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_USB_M66592 note +CONFIG_USB_DUMMY_HCD flag + +# Menu: Device Drivers >> USB support >> USB Physical Layer drivers +CONFIG_NOP_USB_XCEIV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AM335X_PHY_USB policy<{'armhf': 'm'}> +CONFIG_TWL6030_USB policy<{'armhf': 'm'}> +CONFIG_USB_GPIO_VBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TAHVO_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TAHVO_USB_HOST_BY_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ISP1301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MXS_PHY policy<{'armhf-generic': 'y'}> +CONFIG_USB_ULPI policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_NOP_USB_XCEIV note + +# Menu: Device Drivers >> USB support >> USB Type-C Support +CONFIG_TYPEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_TCPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_FUSB302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_UCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UCSI_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TYPEC_TPS6598X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Ultra Wideband devices +CONFIG_UWB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UWB_HWA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UWB_WHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UWB_I1480U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Userspace I/O drivers +CONFIG_UIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_UIO_CIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_PDRV_GENIRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_DMEM_GENIRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_AEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_SERCOS3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_PCI_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_NETX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_FSL_ELBC_GPCM policy<{'ppc64el': 'm'}> +CONFIG_UIO_FSL_ELBC_GPCM_NETX5152 policy<{'ppc64el': 'n'}> +CONFIG_UIO_PRUSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_MF624 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_HV_GENERIC policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> VFIO Non-Privileged userspace driver framework +CONFIG_VFIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_VFIO_NOIOMMU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VFIO_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_VFIO_PCI_VGA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_VFIO_MDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VFIO_MDEV_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_VFIO marknote +CONFIG_VFIO_PCI marknote + +# Menu: Device Drivers >> VFIO Non-Privileged userspace driver framework >> VFIO support for platform devices +CONFIG_VFIO_PLATFORM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_AMBA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_AMDXGBE_RESET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> VME bridge support +CONFIG_VME_BUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VME_CA91CX42 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VME_TSI148 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VME_FAKE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VMIVME_7805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VME_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Virtio drivers +CONFIG_VIRTIO_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_PCI_LEGACY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_BALLOON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_INPUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIRTIO_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_VIRTIO_PCI mark +CONFIG_VIRTIO_MMIO note + +# Menu: Device Drivers >> Virtualization drivers +CONFIG_VIRT_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Voltage and Current Regulator Support +CONFIG_REGULATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_REGULATOR_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REGULATOR_FIXED_VOLTAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VIRTUAL_CONSUMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_USERSPACE_CONSUMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_88PM800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_88PM8607 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ACT8865 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AD5398 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ANATOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AAT2870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AB3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ARIZONA_LDO1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ARIZONA_MICSUPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AS3711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AS3722 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_BCM590XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9062 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_FAN53555 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI6421 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI6421V530 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI655X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_ISL9305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ISL6271A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LM363X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP3971 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP3972 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP872X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP873X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP8755 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LTC3589 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LTC3676 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX1586 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8649 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8660 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8952 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8973 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77686 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77802 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MC13892 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6380 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PBIAS policy<{'armhf': 'm'}> +CONFIG_REGULATOR_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PFUZE100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_QCOM_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_QCOM_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_QCOM_SPMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RC5T583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RN5T618 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S2MPA01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S2MPS11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S5M8767 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TI_ABB policy<{'armhf': 'y'}> +CONFIG_REGULATOR_TPS51632 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6105X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS62360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65217 policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_REGULATOR_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6524X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6586X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65912 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS80031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VEXPRESS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_REGULATOR_FIXED_VOLTAGE note +# CONFIG_REGULATOR_TWL4030 mark note +CONFIG_REGULATOR_TPS65217 mark note + +# Menu: Device Drivers >> Watchdog Timer Support +CONFIG_WATCHDOG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_NOWAYOUT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SOFT_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SOFT_WATCHDOG_PRETIMEOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DA9052_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9055_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9063_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9062_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MENF21BMC_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TANGOX_WATCHDOG policy<{'armhf': 'n'}> +CONFIG_WDAT_WDT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_WM831X_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM8350_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XILINX_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ZIIRAVE_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARM_SP805_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_SBSA_WATCHDOG policy<{'arm64': 'm'}> +CONFIG_CADENCE_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_S3C2410_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_DW_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMAP_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_ORION_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_RN5T618_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SUNXI_WATCHDOG policy<{'arm64': 'm'}> +CONFIG_TWL4030_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TS4800_WATCHDOG policy<{'armhf-generic': 'm'}> +CONFIG_MAX63XX_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAX77620_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IMX2_WDT policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_RETU_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEGRA_WATCHDOG policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_WDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MESON_GXBB_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_MESON_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_MEDIATEK_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_WDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_RZAWDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_UNIPHIER_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_ACQUIRE_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ADVANTECH_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIM1535_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIM7101_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EBC_C384_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_F71808E_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SP5100_TCO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC_FITPC2_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EUROTECH_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IB700_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IBMASR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WAFER_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I6300ESB_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IE6XX_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SCU_WATCHDOG policy<{'i386': 'y'}> +CONFIG_INTEL_MID_WATCHDOG policy<{'i386': 'm'}> +CONFIG_ITCO_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ITCO_VENDOR_SUPPORT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IT8712F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IT87_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KEMPLD_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HPWDT_NMI_DECODING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_SC1200_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCx200_WDT policy<{'i386': 'm'}> +CONFIG_PC87413_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NV_TCO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_60XX_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC8360_WDT policy<{'i386': 'm'}> +CONFIG_SBC7240_WDT policy<{'i386': 'm'}> +CONFIG_CPU5_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SMSC_SCH311X_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SMSC37B787_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIA_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83627HF_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83877F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83977F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MACHZ_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC_EPX_C3_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NI903X_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NIC7018_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BCM2835_WDT policy<{'arm64': 'm'}> +CONFIG_BCM7038_WDT policy<{'arm64': 'm'}> +CONFIG_MEN_A21_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_WATCHDOG_RTAS policy<{'ppc64el': 'm'}> +CONFIG_DIAG288_WATCHDOG policy<{'s390x': 'm'}> +CONFIG_XEN_WDT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_PCWATCHDOG policy<{'i386': 'm'}> +CONFIG_MIXCOMWD policy<{'i386': 'm'}> +CONFIG_WDT policy<{'i386': 'm'}> +CONFIG_PCIPCWATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_WDTPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_USBPCWATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Watchdog Timer Support >> Enable watchdog pretimeout governors +CONFIG_WATCHDOG_PRETIMEOUT_GOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Watchdog Timer Support >> Enable watchdog pretimeout governors >> Default Watchdog Pretimeout Governor +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers +CONFIG_X86_PLATFORM_DEVICES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACER_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACERHDF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIENWARE_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMBIOS_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMBIOS_SMM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI_AIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI_LED policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMO8800 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_RBTN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FUJITSU_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FUJITSU_TABLET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AMILO_RFKILL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TC1100_WMI policy<{'i386': 'm'}> +CONFIG_HP_ACCEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WIRELESS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MSI_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PANASONIC_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMPAL_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SONY_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SONYPI_COMPAT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IDEAPAD_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE3_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_HDAPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MENLOW policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EEEPC_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_NB_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EEEPC_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_WIRELESS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOPSTAR_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_BT_RFKILL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_HAPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_CMPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_CHT_INT33FE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_INT0002_VGPIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_HID_EVENT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_VBTN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SCU_IPC policy<{'i386': 'y'}> +CONFIG_INTEL_SCU_IPC_UTIL policy<{'i386': 'm'}> +CONFIG_INTEL_MID_POWER_BUTTON policy<{'i386': 'm'}> +CONFIG_INTEL_MFLD_THERMAL policy<{'i386': 'm'}> +CONFIG_INTEL_IPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PMC_CORE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IBM_RTL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SAMSUNG_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_OAKTRAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SAMSUNG_Q10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_APPLE_GMUX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_RST policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SMARTCONNECT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PVPANIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PMC_IPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_BXTWC_PMIC_TMU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE_PRO3_BUTTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE_3_BUTTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PUNIT_IPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_TELEMETRY policy<{'amd64': 'm'}> +CONFIG_MLX_PLATFORM policy<{'amd64': 'm'}> +CONFIG_MLX_CPLD_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_TURBO_MAX_3 policy<{'amd64': 'y'}> +CONFIG_SILEAD_DMI policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers >> ThinkPad ACPI Laptop Extras +CONFIG_THINKPAD_ACPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_THINKPAD_ACPI_UNSAFE_LEDS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_THINKPAD_ACPI_VIDEO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_HOTKEY_POLL policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers >> WMI +CONFIG_ACPI_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WMI_BMOF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_WMI_THUNDERBOLT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MSI_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PEAQ_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_TOSHIBA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_WMI policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MXM_WMI policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Xen driver support +CONFIG_XEN_DEV_EVTCHN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XENFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_COMPAT_XENFS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_SYS_HYPERVISOR policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_GNTDEV policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_GRANT_DEV_ALLOC policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_PVCALLS_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_ACPI_PROCESSOR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_MCE_LOG policy<{'amd64': 'y'}> +CONFIG_XEN_SYMS policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_XEN_ACPI_PROCESSOR mark + +# Menu: Device Drivers >> Xen driver support >> Backend driver support +CONFIG_XEN_BACKEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_PCIDEV_BACKEND policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_XEN_PVCALLS_BACKEND policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_XEN_SCSI_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Xen driver support >> Xen memory balloon driver +CONFIG_XEN_BALLOON policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_SELFBALLOONING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT policy<{'amd64': '512', 'i386': '4'}> +CONFIG_XEN_SCRUB_PAGES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> + +# Menu: Dump support +# + +# Menu: Dump support >> Architecture: s390 + +# Menu: Enable loadable module support +CONFIG_MODULES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_FORCE_LOAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_UNLOAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_FORCE_UNLOAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODVERSIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SRCVERSION_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable loadable module support >> Compression algorithm + +# Menu: Enable loadable module support >> Module signature verification +CONFIG_MODULE_SIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_SIG_FORCE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Enable loadable module support >> Module signature verification >> Which hash algorithm should modules be signed with? +CONFIG_MODULE_SIG_SHA1 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA224 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA256 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA384 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA512 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Enable the block layer +CONFIG_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LBDAF policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_BLK_DEV_BSG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_BSGLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_INTEGRITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_ZONED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_THROTTLING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_THROTTLING_LOW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_CMDLINE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_WBT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_WBT_SQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_WBT_MQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEBUG_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_SED_OPAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_BLK_DEV_THROTTLING note + +# Menu: Enable the block layer >> IO Schedulers +CONFIG_IOSCHED_DEADLINE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IOSCHED_CFQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CFQ_GROUP_IOSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MQ_IOSCHED_DEADLINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MQ_IOSCHED_KYBER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IOSCHED_BFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BFQ_GROUP_IOSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_MQ_IOSCHED_DEADLINE flag + +# Menu: Enable the block layer >> IO Schedulers >> Default I/O scheduler +CONFIG_DEFAULT_DEADLINE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_CFQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_NOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable the block layer >> Partition Types + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection +CONFIG_PARTITION_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AIX_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_OSF_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AMIGA_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATARI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IBM_PARTITION policy<{'s390x': 'y'}> +CONFIG_MAC_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LDM_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LDM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SGI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ULTRIX_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SUN_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KARMA_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EFI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSV68_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_CMDLINE_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +# +CONFIG_PARTITION_ADVANCED flag + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection >> Acorn partition support +CONFIG_ACORN_PARTITION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection >> PC BIOS (MSDOS partition tables) support +CONFIG_MSDOS_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BSD_DISKLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MINIX_SUBPARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SOLARIS_X86_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_UNIXWARE_DISKLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Endianness selection +CONFIG_CPU_BIG_ENDIAN policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n', 's390x': 'y'}> + +# Menu: Endianness selection >> Architecture: powerpc +CONFIG_CPU_LITTLE_ENDIAN policy<{'ppc64el': 'y'}> + +# Menu: Executable file formats / Emulations +CONFIG_BINFMT_ELF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_ELF_FDPIC policy<{'armhf': 'y'}> +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_SCRIPT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_FLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_ZFLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_SHARED_FLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_AOUT policy<{'i386': 'm'}> +CONFIG_BINFMT_MISC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_COREDUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECCOMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_COMPAT policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_BINFMT_SCRIPT mark note +CONFIG_SECCOMP mark + +# Menu: Executable file formats / Emulations >> Architecture: arm + +# Menu: Executable file formats / Emulations >> Architecture: arm64 + +# Menu: Executable file formats / Emulations >> Architecture: s390 + +# Menu: Executable file formats / Emulations >> Architecture: x86 +CONFIG_IA32_EMULATION policy<{'amd64': 'y'}> +CONFIG_IA32_AOUT policy<{'amd64': 'n'}> +CONFIG_X86_X32 policy<{'amd64': 'y'}> +# +CONFIG_IA32_AOUT note mark + +# Menu: File systems +CONFIG_EXT2_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_EXT3_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_JBD2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GFS2_FS_LOCKING_DLM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NILFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FS_DAX policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXPORTFS_BLOCK_OPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FILE_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MANDATORY_FILE_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DNOTIFY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INOTIFY_USER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FANOTIFY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FANOTIFY_ACCESS_PERMISSIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_QUOTA_NETLINK_INTERFACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUTOFS4_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'y'}> +CONFIG_FUSE_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_EXT2_FS note +CONFIG_EXT3_FS note +CONFIG_FUSE_FS note flag + +# Menu: File systems >> Btrfs filesystem support +CONFIG_BTRFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BTRFS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BTRFS_FS_CHECK_INTEGRITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_FS_RUN_SANITY_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_ASSERT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_FS_REF_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> CD-ROM/DVD Filesystems +CONFIG_ISO9660_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_JOLIET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZISOFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UDF_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: File systems >> Caches +CONFIG_CACHEFILES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CACHEFILES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CACHEFILES_HISTOGRAM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Caches >> General filesystem local caching manager +CONFIG_FSCACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSCACHE_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FSCACHE_HISTOGRAM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FSCACHE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FSCACHE_OBJECT_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> DOS/FAT/NT Filesystems +CONFIG_MSDOS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NTFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NTFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NTFS_RW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> + +# Menu: File systems >> DOS/FAT/NT Filesystems >> VFAT (Windows-95) fs support +CONFIG_VFAT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FAT_DEFAULT_CODEPAGE policy<{'amd64': '437', 'arm64': '437', 'armhf': '437', 'i386': '437', 'ppc64el': '437', 's390x': '437'}> +CONFIG_FAT_DEFAULT_IOCHARSET policy<{'amd64': '"iso8859-1"', 'arm64': '"iso8859-1"', 'armhf': '"iso8859-1"', 'i386': '"iso8859-1"', 'ppc64el': '"iso8859-1"', 's390x': '"iso8859-1"'}> +CONFIG_FAT_DEFAULT_UTF8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_VFAT_FS mark note + +# Menu: File systems >> Distributed Lock Manager (DLM) +CONFIG_DLM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DLM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> F2FS filesystem support +CONFIG_F2FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_F2FS_STAT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_CHECK_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_F2FS_IO_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_F2FS_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> F2FS filesystem support >> F2FS extended attributes +CONFIG_F2FS_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> JFS filesystem support +CONFIG_JFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_JFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFS_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems +CONFIG_MISC_FILESYSTEMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ORANGEFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ADFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ADFS_FS_RW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AFFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ECRYPT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ECRYPT_FS_MESSAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HFSPLUS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HFSPLUS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BEFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BEFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRAMFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRAMFS_BLOCKDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CRAMFS_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VXFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MINIX_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HPFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX4FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX6FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX6FS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ROMFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SYSV_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UFS_FS_WRITE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EXOFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EXOFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_ECRYPT_FS mark note + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support +CONFIG_AUFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AUFS_HNOTIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_EXPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_FHSM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_RDU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_DIRREN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_SHWH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_RAMFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_FUSE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_HFSPLUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AUFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_AUFS_EXPORT note + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support >> Maximum number of branches +CONFIG_AUFS_BRANCH_MAX_1023 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BRANCH_MAX_127 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_BRANCH_MAX_32767 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BRANCH_MAX_511 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support >> method + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support +CONFIG_JFFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JFFS2_FS_DEBUG policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_JFFS2_FS_WRITEBUFFER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_WBUF_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_SUMMARY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support >> Advanced compression options for JFFS2 +CONFIG_JFFS2_COMPRESSION_OPTIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_RTIME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_RUBIN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support >> Advanced compression options for JFFS2 >> JFFS2 default compression mode +CONFIG_JFFS2_CMODE_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_PRIORITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_FAVOURLZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> Persistent store support +CONFIG_PSTORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PSTORE_CONSOLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_PMSG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_FTRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: File systems >> Miscellaneous filesystems >> Persistent store support >> Choose compression algorithm +CONFIG_PSTORE_ZLIB_COMPRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PSTORE_LZO_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_LZ4_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> RomFS backing stores +CONFIG_ROMFS_BACKED_BY_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ROMFS_BACKED_BY_MTD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ROMFS_BACKED_BY_BOTH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support +CONFIG_SQUASHFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_LZ4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_XZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_ZSTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_4K_DEVBLK_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_EMBEDDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE policy<{'amd64': '3', 'arm64': '3', 'armhf': '3', 'i386': '3', 'ppc64el': '3', 's390x': '3'}> +# +CONFIG_SQUASHFS_4K_DEVBLK_SIZE note +CONFIG_SQUASHFS mark note + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support >> Decompressor parallelisation options +CONFIG_SQUASHFS_DECOMP_SINGLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_DECOMP_MULTI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support >> File decompression options +CONFIG_SQUASHFS_FILE_CACHE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_FILE_DIRECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> UBIFS file system support +CONFIG_UBIFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UBIFS_FS_ADVANCED_COMPR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UBIFS_FS_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_FS_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_ATIME_SUPPORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UBIFS_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Native language support +CONFIG_NLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NLS_DEFAULT policy<{'amd64': '"utf8"', 'arm64': '"utf8"', 'armhf': '"utf8"', 'i386': '"utf8"', 'ppc64el': '"utf8"', 's390x': '"utf8"'}> +CONFIG_NLS_CODEPAGE_437 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NLS_CODEPAGE_737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_850 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_852 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_855 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_857 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_861 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_862 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_863 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_864 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_865 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_866 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_869 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_936 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_950 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_932 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_949 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_874 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_1250 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_1251 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ASCII policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_7 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_13 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_14 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_15 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_KOI8_R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_KOI8_U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ROMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CELTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CENTEURO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CROATIAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CYRILLIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_GAELIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_GREEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ICELAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_INUIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ROMANIAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_TURKISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_UTF8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NLS note + +# Menu: File systems >> Network File Systems +CONFIG_NETWORK_FILESYSTEMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFSD_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_V3_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RPCSEC_GSS_KRB5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SUNRPC_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SUNRPC_XPRT_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CEPH_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CODA_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> NCP file system support (to mount NetWare volumes) +CONFIG_NCP_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NCPFS_PACKET_SIGNING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_IOCTL_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_STRONG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_NFS_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_OS2_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_SMALLDOS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NCPFS_NLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_EXTRAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Network File Systems >> NFS client support +CONFIG_NFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V3_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_USE_LEGACY_DNS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Network File Systems >> NFS client support >> NFS client support for NFSv4.1 +CONFIG_NFS_V4_1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4_2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN policy<{'amd64': '"kernel.org"', 'arm64': '"kernel.org"', 'armhf': '"kernel.org"', 'i386': '"kernel.org"', 'ppc64el': '"kernel.org"', 's390x': '"kernel.org"'}> +CONFIG_NFS_V4_1_MIGRATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> NFS server support for NFS version 4 +CONFIG_NFSD_V4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_BLOCKLAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_SCSILAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_FLEXFILELAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_V4_SECURITY_LABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Network File Systems >> Plan 9 Resource Sharing Support (9P2000) +CONFIG_9P_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_9P_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_9P_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_9P_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> SMB3 and CIFS support (advanced network filesystem) +CONFIG_CIFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CIFS_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_STATS2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_WEAK_PW_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_UPCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_POSIX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_DEBUG2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_DEBUG_DUMP_KEYS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_DFS_UPCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_SMB311 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> OCFS2 file system support +CONFIG_OCFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_O2CB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_USERSPACE_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OCFS2_DEBUG_MASKLOG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OCFS2_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Overlay filesystem support +CONFIG_OVERLAY_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OVERLAY_FS_REDIRECT_DIR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OVERLAY_FS_INDEX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Pseudo filesystems +CONFIG_PROC_CHILDREN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HUGETLBFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CONFIGFS_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EFIVAR_FS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_CONFIGFS_FS flag +CONFIG_EFIVAR_FS note +CONFIG_TMPFS_POSIX_ACL mark note + +# Menu: File systems >> Pseudo filesystems >> /proc file system support +CONFIG_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_KCORE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_VMCORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_SYSCTL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_PAGE_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Quota support +CONFIG_QUOTA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PRINT_QUOTA_WARNING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_QUOTA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_QFMT_V1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_QFMT_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: File systems >> Reiserfs support +CONFIG_REISERFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_REISERFS_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REISERFS_PROC_INFO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REISERFS_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_REISERFS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_REISERFS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> The Extended 4 (ext4) filesystem +CONFIG_EXT4_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_USE_FOR_EXT2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> XFS filesystem support +CONFIG_XFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFS_QUOTA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_RT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_ONLINE_SCRUB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFS_WARN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Firmware Drivers +CONFIG_ARM_PSCI_CHECKER policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_ARM_SCPI_PROTOCOL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_SCPI_POWER_DOMAIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_EDD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EDD_OFF policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FIRMWARE_MEMMAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_DELL_RBU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DCDBAS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DMIID policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_DMI_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ISCSI_IBFT_FIND policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ISCSI_IBFT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_RASPBERRYPI_FIRMWARE policy<{'arm64': 'y'}> +CONFIG_FW_CFG_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_FW_CFG_SYSFS_CMDLINE policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Firmware Drivers >> EFI (Extensible Firmware Interface) Support +CONFIG_EFI_VARS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EFI_VARS_PSTORE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_EFI_RUNTIME_MAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EFI_FAKE_MEMMAP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EFI_BOOTLOADER_CONTROL policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_EFI_CAPSULE_LOADER policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'y'}> +CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH policy<{'i386': 'y'}> +CONFIG_EFI_TEST policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_APPLE_PROPERTIES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RESET_ATTACK_MITIGATION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_EFI_VARS mark note + +# Menu: Firmware Drivers >> Google Firmware Drivers +CONFIG_GOOGLE_FIRMWARE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> + +# Menu: Firmware Drivers >> Tegra firmware driver +CONFIG_TEGRA_IVC policy<{'armhf-generic': 'y'}> + +# Menu: Floating point emulation >> Architecture: arm +CONFIG_VFP policy<{'armhf': 'y'}> +CONFIG_NEON policy<{'armhf': 'y'}> +CONFIG_KERNEL_MODE_NEON policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: General setup +CONFIG_CROSS_COMPILE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_LOCALVERSION policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_DEFAULT_HOSTNAME policy<{'amd64': '"(none)"', 'arm64': '"(none)"', 'armhf': '"(none)"', 'i386': '"(none)"', 'ppc64el': '"(none)"', 's390x': '"(none)"'}> +CONFIG_VERSION_SIGNATURE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSVIPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POSIX_MQUEUE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CROSS_MEMORY_ATTACH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USELIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUDIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IKCONFIG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOG_BUF_SHIFT policy<{'amd64': '18', 'arm64': '14', 'armhf': '17', 'i386': '17', 'ppc64el': '17', 's390x': '17'}> +CONFIG_LOG_CPU_MAX_BUF_SHIFT policy<{'amd64': '12', 'arm64': '12', 'armhf': '12', 'i386': '12', 'ppc64el': '12', 's390x': '12'}> +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT policy<{'amd64': '13', 'arm64': '13', 'armhf': '13', 'i386': '13', 'ppc64el': '13', 's390x': '13'}> +CONFIG_NUMA_BALANCING policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SCHED_AUTOGROUP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS_DEPRECATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RELAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_JIT_ALWAYS_ON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USERFAULTFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EMBEDDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PC104 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_COMPAT_BRK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLAB_MERGE_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLAB_FREELIST_RANDOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLAB_FREELIST_HARDENED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_CPU_PARTIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROFILING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OPROFILE policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPROFILE_EVENT_MULTIPLEX policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_KPROBES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_JUMP_LABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STATIC_KEYS_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_VMAP_STACK policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_STRICT_KERNEL_RWX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_STRICT_MODULE_RWX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_REFCOUNT_FULL policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_SYSFS_DEPRECATED mark note +CONFIG_COMPAT_BRK mark note +CONFIG_JUMP_LABEL flag +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED note +CONFIG_BPF_JIT_ALWAYS_ON flag +CONFIG_STRICT_KERNEL_RWX mark +CONFIG_STRICT_MODULE_RWX mark + +# Menu: General setup >> CPU/Task time and stats accounting +CONFIG_IRQ_TIME_ACCOUNTING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BSD_PROCESS_ACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BSD_PROCESS_ACCT_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASKSTATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_DELAY_ACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_XACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_IO_ACCOUNTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> CPU/Task time and stats accounting >> Cputime accounting +CONFIG_TICK_CPU_ACCOUNTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIRT_CPU_ACCOUNTING_NATIVE policy<{'ppc64el': 'n', 's390x': 'y'}> +CONFIG_VIRT_CPU_ACCOUNTING_GEN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> + +# Menu: General setup >> Choose SLAB allocator +CONFIG_SLAB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLUB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLOB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Compile also drivers which will not load +CONFIG_COMPILE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCALVERSION_AUTO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPU_ISOLATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_LOCALVERSION_AUTO mark note + +# Menu: General setup >> Compile also drivers which will not load >> GCC plugins +CONFIG_GCC_PLUGINS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Compiler optimization level +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CC_OPTIMIZE_FOR_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Configure standard kernel features (expert users) +CONFIG_FHANDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHECKPOINT_RESTORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXPERT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UID16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_MULTIUSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SGETMASK_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSCTL_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POSIX_TIMERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KALLSYMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KALLSYMS_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PRINTK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ELF_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCSPKR_PLATFORM policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BASE_FULL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUTEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EPOLL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SIGNALFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TIMERFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVENTFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SHMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ADVISE_SYSCALLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMBARRIER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VM_EVENT_COUNTERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_MEMCG_SYSFS_ON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ARCH_MMAP_RND_BITS policy<{'amd64': '28', 'arm64': '18', 'armhf': '8', 'i386': '8', 'ppc64el': '28'}> +CONFIG_ARCH_MMAP_RND_COMPAT_BITS policy<{'amd64': '8', 'arm64': '11', 'ppc64el': '8'}> +# +CONFIG_FHANDLE mark note +CONFIG_SLUB_MEMCG_SYSFS_ON flag + +# Menu: General setup >> Control Group support +CONFIG_CGROUPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG_SWAP_ENABLED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_CGROUP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_BLK_CGROUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CGROUP_PIDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_RDMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_FREEZER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_HUGETLB policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CPUSETS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_PID_CPUSET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_CPUACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_PERF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_BPF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEBUG_BLK_CGROUP mark + +# Menu: General setup >> Control Group support >> CPU controller +CONFIG_CGROUP_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FAIR_GROUP_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CFS_BANDWIDTH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RT_GROUP_SCHED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RT_GROUP_SCHED note + +# Menu: General setup >> GCOV-based kernel profiling +CONFIG_GCOV_KERNEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> GCOV-based kernel profiling >> Specify GCOV format + +# Menu: General setup >> IRQ subsystem +CONFIG_IRQ_DOMAIN_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IRQ_FORCED_THREADING_DEFAULT policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n'}> +CONFIG_SPARSE_IRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_GENERIC_IRQ_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support +CONFIG_BLK_DEV_INITRD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_GZIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_BZIP2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_XZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZ4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support >> Initramfs source file(s) +CONFIG_INITRAMFS_SOURCE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support >> Initramfs source file(s) >> Built-in initramfs compression mode + +# Menu: General setup >> Kernel Performance Events And Counters +CONFIG_PERF_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_PERF_USE_VMALLOC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> + +# Menu: General setup >> Kernel compression mode +CONFIG_KERNEL_GZIP policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KERNEL_BZIP2 policy<{'amd64': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_LZMA policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_XZ policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_KERNEL_LZO policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_LZ4 policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +# +CONFIG_KERNEL_GZIP flag note + +# Menu: General setup >> Namespaces support +CONFIG_NAMESPACES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UTS_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPC_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USER_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PID_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> RCU Subsystem +# XXX +# +CONFIG_CONTEXT_TRACKING_FORCE note + +# Menu: General setup >> RCU Subsystem >> Make expert-level adjustments to RCU configuration +CONFIG_RCU_EXPERT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RCU_EXPERT flag + +# Menu: General setup >> Stack Protector buffer overflow detection +CONFIG_CC_STACKPROTECTOR_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_CC_STACKPROTECTOR_REGULAR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_CC_STACKPROTECTOR_STRONG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: arm + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: arm64 + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: powerpc + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: s390 + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: x86 + +# Menu: General setup >> Timers subsystem +CONFIG_NO_HZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HIGH_RES_TIMERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> Timers subsystem >> Timer tick handling +CONFIG_HZ_PERIODIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NO_HZ_IDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NO_HZ_FULL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +# +CONFIG_NO_HZ_IDLE note + +# Menu: Kernel hacking +CONFIG_MAGIC_SYSRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MAGIC_SYSRQ_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KCOV policy<{'amd64': 'n', 'arm64': 'n', 's390x': 'n'}> +CONFIG_PANIC_ON_OOPS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PANIC_TIMEOUT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '10', 's390x': '0'}> +CONFIG_DEBUG_TIMEKEEPING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STACKTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WARN_ALL_UNSEEDED_RANDOM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROVIDE_OHCI1394_DMA_INIT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DMA_API_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MEMTEST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BUG_ON_DATA_CORRUPTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STRICT_DEVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IO_STRICT_DEVMEM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PID_IN_CONTEXTIDR policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_DEBUG_WX policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_ALIGN_RODATA policy<{'arm64': 'n', 'armhf': 'y'}> +# +CONFIG_PANIC_ON_OOPS note +CONFIG_BUG_ON_DATA_CORRUPTION flag +CONFIG_STRICT_DEVMEM mark + +# Menu: Kernel hacking >> Architecture: arm +CONFIG_ARM_PTDUMP policy<{'armhf': 'n'}> +CONFIG_ARM_UNWIND policy<{'armhf': 'y'}> +CONFIG_DEBUG_USER policy<{'armhf': 'n'}> +CONFIG_DEBUG_IMX_UART_PORT policy<{'armhf-generic': '1'}> +CONFIG_DEBUG_VF_UART_PORT policy<{'armhf-generic': '1'}> +CONFIG_ARM_KPROBES_TEST policy<{'armhf': 'm'}> + +# Menu: Kernel hacking >> Architecture: arm64 +CONFIG_ARM64_PTDUMP_DEBUGFS policy<{'arm64': 'n'}> +CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET policy<{'arm64': 'n'}> +CONFIG_DEBUG_EFI policy<{'arm64': 'n'}> +CONFIG_ARM64_RELOC_TEST policy<{'arm64': 'n'}> + +# Menu: Kernel hacking >> Architecture: powerpc +CONFIG_PPC_DISABLE_WERROR policy<{'ppc64el': 'n'}> +CONFIG_PRINT_STACK_DEPTH policy<{'ppc64el': '64'}> +CONFIG_HCALL_STATS policy<{'ppc64el': 'n'}> +CONFIG_PPC_EMULATED_STATS policy<{'ppc64el': 'n'}> +CONFIG_CODE_PATCHING_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_JUMP_LABEL_FEATURE_CHECKS policy<{'ppc64el': 'y'}> +CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG policy<{'ppc64el': 'n'}> +CONFIG_FTR_FIXUP_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_MSI_BITMAP_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_XMON policy<{'ppc64el': 'y'}> +CONFIG_XMON_DEFAULT policy<{'ppc64el': 'n'}> +CONFIG_XMON_DISASSEMBLY policy<{'ppc64el': 'y'}> +CONFIG_BOOTX_TEXT policy<{'ppc64el': 'n'}> +CONFIG_PPC_EARLY_DEBUG policy<{'ppc64el': 'n'}> +CONFIG_PPC_PTDUMP policy<{'ppc64el': 'n'}> +CONFIG_PPC_FAST_ENDIAN_SWITCH policy<{'ppc64el': 'n'}> +# +CONFIG_PPC_DISABLE_WERROR flag + +# Menu: Kernel hacking >> Architecture: s390 +CONFIG_S390_PTDUMP policy<{'s390x': 'y'}> + +# Menu: Kernel hacking >> Architecture: x86 +CONFIG_X86_VERBOSE_BOOTUP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_PTDUMP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EFI_PGT_DUMP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DOUBLEFAULT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_TLBFLUSH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IOMMU_DEBUG policy<{'amd64': 'n'}> +CONFIG_IOMMU_STRESS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_DECODER_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_BOOT_PARAMS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CPA_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_OPTIMIZE_INLINING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_ENTRY policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_NMI_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_DEBUG_FPU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PUNIT_ATOM_DEBUG policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_X86_DECODER_SELFTEST flag +CONFIG_X86_DEBUG_FPU flag +CONFIG_PUNIT_ATOM_DEBUG flag + +# Menu: Kernel hacking >> Choose kernel unwinder >> Architecture: x86 +CONFIG_UNWINDER_ORC policy<{'amd64': 'n'}> +CONFIG_UNWINDER_FRAME_POINTER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_UNWINDER_GUESS policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_UNWINDER_FRAME_POINTER mark note + +# Menu: Kernel hacking >> Compile-time checks and compiler options +CONFIG_ENABLE_WARN_DEPRECATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ENABLE_MUST_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FRAME_WARN policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '2048', 's390x': '1024'}> +CONFIG_STRIP_ASM_SYMS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_READABLE_ASM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_UNUSED_SYMBOLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_OWNER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HEADERS_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SECTION_MISMATCH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECTION_MISMATCH_WARN_ONLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FRAME_POINTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_STACK_VALIDATION policy<{'amd64': 'y'}> +CONFIG_DEBUG_FORCE_WEAK_PER_CPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_STACK_VALIDATION mark note + +# Menu: Kernel hacking >> Compile-time checks and compiler options >> Compile the kernel with debug info +CONFIG_DEBUG_INFO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_INFO_REDUCED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_INFO_SPLIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_INFO_DWARF4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_GDB_SCRIPTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_DEBUG_INFO mark note +CONFIG_DEBUG_INFO_SPLIT note + +# Menu: Kernel hacking >> CoreSight Tracing Support +CONFIG_CORESIGHT policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Kernel hacking >> CoreSight Tracing Support >> CoreSight Link and Sink drivers + +# Menu: Kernel hacking >> Debug Lockups and Hangs +CONFIG_SOFTLOCKUP_DETECTOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HARDLOCKUP_DETECTOR policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DETECT_HUNG_TASK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT policy<{'amd64': '120', 'arm64': '120', 'armhf': '120', 'i386': '120', 'ppc64el': '120', 's390x': '120'}> +CONFIG_BOOTPARAM_HUNG_TASK_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WQ_WATCHDOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Early debugging console >> Architecture: powerpc + +# Menu: Kernel hacking >> Early printk +CONFIG_EARLY_PRINTK policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Kernel hacking >> Early printk >> Architecture: x86 +CONFIG_EARLY_PRINTK_DBGP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EARLY_PRINTK_EFI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EARLY_PRINTK_USB_XDBC policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Kernel hacking >> IO delay type >> Architecture: x86 +CONFIG_IO_DELAY_0X80 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IO_DELAY_0XED policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IO_DELAY_UDELAY policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IO_DELAY_NONE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Kernel hacking >> Kernel debugging +CONFIG_DEBUG_KERNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_SHIRQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCHED_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCHEDSTATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCHED_STACK_END_CHECK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_PREEMPT policy<{'amd64-lowlatency': 'n', 'i386-lowlatency': 'n'}> +CONFIG_DEBUG_KOBJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_BUGVERBOSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PI_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_NOTIFIERS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_CREDENTIALS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_WQ_FORCE_RR_CPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_BLOCK_EXT_DEVT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPU_HOTPLUG_STATE_CONTROL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LATENCYTOP policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_LATENCYTOP marl note + +# Menu: Kernel hacking >> Kernel debugging >> Fault-injection framework +CONFIG_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Kernel debugging >> KGDB: kernel debugger +CONFIG_KGDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KGDB_SERIAL_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KGDB_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_KGDB_LOW_LEVEL_TRAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_KGDB_KDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KDB_KEYBOARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KDB_CONTINUE_CATASTROPHIC policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +# +CONFIG_KGDB flag +CONFIG_KGDB_SERIAL_CONSOLE note + +# Menu: Kernel hacking >> Kernel debugging >> Notifier error injection +CONFIG_NOTIFIER_ERROR_INJECTION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_PM_NOTIFIER_ERROR_INJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +CONFIG_NETDEV_NOTIFIER_ERROR_INJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) >> Architecture: arm +CONFIG_DEBUG_LL policy<{'armhf': 'n'}> + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) >> Kernel low-level debugging port >> Architecture: arm + +# Menu: Kernel hacking >> Lock Debugging (spinlocks, mutexes, etc...) +CONFIG_DEBUG_RT_MUTEXES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SPINLOCK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_MUTEXES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_WW_MUTEX_SLOWPATH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_LOCK_ALLOC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROVE_LOCKING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_STAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_ATOMIC_SLEEP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_LOCKING_API_SELFTESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_TORTURE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WW_MUTEX_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging +CONFIG_PAGE_EXTENSION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PAGEALLOC policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PAGE_POISONING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PAGE_REF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_RODATA_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_SLUB_DEBUG_ON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLUB_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_STACK_USAGE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_VIRTUAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_DEBUG_MEMORY_INIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DEBUG_PER_CPU_MAPS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_HIGHMEM policy<{'armhf': 'n', 'i386': 'n'}> +CONFIG_DEBUG_STACKOVERFLOW policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_KASAN policy<{'amd64': 'n', 'arm64': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Debug VM +CONFIG_DEBUG_VM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Debug object operations +CONFIG_DEBUG_OBJECTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Instrumentation type + +# Menu: Kernel hacking >> Memory Debugging >> Kernel memory leak detector +CONFIG_DEBUG_KMEMLEAK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> RCU Debugging +CONFIG_RCU_PERF_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RCU_TORTURE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RCU_CPU_STALL_TIMEOUT policy<{'amd64': '60', 'arm64': '60', 'armhf': '60', 'i386': '60', 'ppc64el': '21', 's390x': '21'}> +CONFIG_RCU_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RCU_EQS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RCU_CPU_STALL_TIMEOUT flag + +# Menu: Kernel hacking >> Runtime Testing +CONFIG_LKDTM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_LIST_SORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_SORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_KPROBES_SANITY_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BACKTRACE_SELF_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RBTREE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INTERVAL_TREE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PERCPU_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ATOMIC64_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ASYNC_RAID6_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_HEXDUMP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_STRING_HELPERS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_KSTRTOX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_PRINTF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_BITMAP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_UUID policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_RHASHTABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_HASH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_PARMAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TEST_LKM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_USER_COPY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_FIND_BIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_SYSCTL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_UDELAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_STATIC_KEYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_KMOD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_LKDTM flag flag +CONFIG_TEST_LIST_SORT flag +CONFIG_TEST_SORT flag +CONFIG_KPROBES_SANITY_TEST flag +CONFIG_BACKTRACE_SELF_TEST flag +CONFIG_RBTREE_TEST flag +CONFIG_INTERVAL_TREE_TEST flag +CONFIG_PERCPU_TEST flag +CONFIG_ATOMIC64_SELFTEST flag +CONFIG_ASYNC_RAID6_TEST flag +CONFIG_TEST_HEXDUMP flag +CONFIG_TEST_STRING_HELPERS flag +CONFIG_TEST_KSTRTOX flag +CONFIG_TEST_PRINTF flag +CONFIG_TEST_BITMAP flag +CONFIG_TEST_UUID flag +CONFIG_TEST_RHASHTABLE flag +CONFIG_TEST_HASH flag +CONFIG_TEST_PARMAN flag + +# Menu: Kernel hacking >> Sample kernel code +CONFIG_SAMPLES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Tracers +CONFIG_FTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PREEMPTIRQ_EVENTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IRQSOFF_TRACER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PREEMPT_TRACER policy<{'amd64-lowlatency': 'n', 'i386-lowlatency': 'n'}> +CONFIG_SCHED_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HWLAT_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FTRACE_SYSCALLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRACER_SNAPSHOT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STACK_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_IO_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KPROBE_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UPROBE_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FTRACE_STARTUP_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MMIOTRACE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HIST_TRIGGERS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MMIOTRACE_TEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_TRACEPOINT_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RING_BUFFER_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RING_BUFFER_STARTUP_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRACE_EVAL_MAP_FILE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRACING_EVENTS_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_FTRACE_STARTUP_TEST flag +CONFIG_MMIOTRACE_TEST flag +CONFIG_RING_BUFFER_BENCHMARK flag +CONFIG_RING_BUFFER_STARTUP_TEST flag +CONFIG_TRACE_EVAL_MAP_FILE flag + +# Menu: Kernel hacking >> Tracers >> Branch Profiling +CONFIG_BRANCH_PROFILE_NONE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROFILE_ANNOTATED_BRANCHES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROFILE_ALL_BRANCHES policy<{'armhf': 'n'}> + +# Menu: Kernel hacking >> Tracers >> Kernel Function Tracer +CONFIG_FUNCTION_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUNCTION_GRAPH_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DYNAMIC_FTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUNCTION_PROFILER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Kernel hacking >> Undefined behaviour sanity checker +CONFIG_UBSAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> printk and dmesg options +CONFIG_PRINTK_TIME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CONSOLE_LOGLEVEL_DEFAULT policy<{'amd64': '7', 'arm64': '7', 'armhf': '7', 'i386': '7', 'ppc64el': '7', 's390x': '7'}> +CONFIG_MESSAGE_LOGLEVEL_DEFAULT policy<{'amd64': '4', 'arm64': '4', 'armhf': '4', 'i386': '4', 'ppc64el': '4', 's390x': '4'}> +CONFIG_BOOT_PRINTK_DELAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_DYNAMIC_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Library routines +CONFIG_CRC_CCITT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC_T10DIF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC_ITU_T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC32 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC32_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC7 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LIBCRC32C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RANDOM32_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPUMASK_OFFSTACK policy<{'amd64': 'y'}> +CONFIG_GLOB_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CORDIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DDR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IRQ_POLL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PARMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STRING_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Library routines >> CRC32 implementation +CONFIG_CRC32_SLICEBY8 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC32_SLICEBY4 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC32_SARWATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC32_BIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Library routines >> Select compiled-in fonts +CONFIG_FONTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FONT_8x8 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FONT_8x16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FONT_6x11 policy<{'armhf': 'n'}> +CONFIG_FONT_7x14 policy<{'armhf': 'n'}> +CONFIG_FONT_PEARL_8x8 policy<{'armhf': 'n'}> +CONFIG_FONT_ACORN_8x8 policy<{'armhf': 'y'}> +CONFIG_FONT_MINI_4x6 policy<{'armhf': 'n'}> +CONFIG_FONT_6x10 policy<{'armhf': 'y'}> +CONFIG_FONT_10x18 policy<{'armhf': 'n'}> +CONFIG_FONT_SUN8x16 policy<{'armhf': 'n'}> +CONFIG_FONT_SUN12x22 policy<{'armhf': 'n'}> + +# Menu: Library routines >> XZ decompression support +CONFIG_XZ_DEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XZ_DEC_X86 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_POWERPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_IA64 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_ARM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_ARMTHUMB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_SPARC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_XZ_DEC note flag + +# Menu: Networking support +CONFIG_NET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AF_KCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_LIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_LIB_PRETTYDEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CEPH_LIB_USE_DNS_RESOLVER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PSAMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LWTUNNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LWTUNNEL_BPF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_DEVLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Amateur Radio support +CONFIG_HAMRADIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Amateur Radio support >> Amateur Radio AX.25 Level 2 protocol +CONFIG_AX25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AX25_DAMA_SLAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NETROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ROSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Amateur Radio support >> Amateur Radio AX.25 Level 2 protocol >> AX.25 network device drivers +CONFIG_MKISS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6PACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BPQETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCC policy<{'i386': 'm'}> +CONFIG_SCC_DELAY policy<{'i386': 'n'}> +CONFIG_SCC_TRXECHO policy<{'i386': 'n'}> +CONFIG_BAYCOM_SER_FDX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_SER_HDX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_PAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_EPP policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_YAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support +CONFIG_BT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_LE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BT_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth Classic (BR/EDR) features +CONFIG_BT_BREDR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_RFCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_RFCOMM_TTY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_BNEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_BNEP_MC_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_BNEP_PROTO_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_CMTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HIDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers +CONFIG_BT_HCIBTSDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_LL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBCM203X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIBFUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIDTL1 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBT3C policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBLUECARD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBTUART policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIVHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_MRVL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_MRVL_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_WILINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_QCOMSMD policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers >> HCI UART driver +CONFIG_BT_HCIUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_H4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_NOKIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_BCSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_ATH3K policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_3WIRE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_BCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_QCA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_AG6XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_MRVL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBPA10X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers >> HCI USB driver +CONFIG_BT_HCIBTUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIBTUSB_BCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBTUSB_RTL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_ATH3K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAIF support +CONFIG_CAIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CAIF_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CAIF_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support +CONFIG_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CAN_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_BCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers +CONFIG_CAN_VCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_VXCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SLCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_DEBUG_DEVICES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support +CONFIG_CAN_DEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CALC_BITTIMING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_FLEXCAN policy<{'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GRCAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_JANZ_ICAN3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_TI_HECC policy<{'armhf': 'm'}> +CONFIG_CAN_XILINXCAN policy<{'arm64': 'm'}> +CONFIG_PCH_CAN policy<{'i386': 'm'}> +CONFIG_CAN_IFI_CANFD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_M_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MSCAN policy<{'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCIEFD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CAN_RCAR_CANFD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CAN_SOFTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SOFTING_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Bosch CC770 and Intel AN82527 devices +CONFIG_CAN_CC770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CC770_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CC770_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Bosch C_CAN/D_CAN devices +CONFIG_CAN_C_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_C_CAN_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_C_CAN_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> CAN SPI interfaces +CONFIG_CAN_HI311X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MCP251X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> CAN USB interfaces +CONFIG_CAN_EMS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_ESD_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_KVASER_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_8DEV_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MCBA_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Philips/NXP SJA1000 devices +CONFIG_CAN_SJA1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SJA1000_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SJA1000_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_EMS_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CAN_EMS_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CAN_PEAK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCIEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_KVASER_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PLX_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_TSCAN1 policy<{'i386': 'm'}> + +# Menu: Networking support >> NFC subsystem support +CONFIG_NFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NFC_DIGITAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_HCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_SHDLC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> NFC subsystem support >> Near Field Communication (NFC) devices +CONFIG_NFC_TRF7970A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MEI_PHY policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_SIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PORT100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_FDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_FDP_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN544_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN544_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_PN533_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN533_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MICROREAD_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MICROREAD_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_MRVL_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST21NFCA_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST_NCI_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST_NCI_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NXP_NCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NXP_NCI_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_S3FWRN5_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST95HF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options +CONFIG_PACKET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PACKET_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_UNIX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UNIX_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TLS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFRM_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFRM_SUB_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFRM_MIGRATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFRM_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_KEY_MIGRATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IUCV policy<{'s390x': 'y'}> +CONFIG_AFIUCV policy<{'s390x': 'm'}> +CONFIG_SMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SMC_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETWORK_SECMARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETWORK_PHY_TIMESTAMPING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_IGMP_SNOOPING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BRIDGE_VLAN_FILTERING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_DSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VLAN_8021Q policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VLAN_8021Q_GVRP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VLAN_8021Q_MVRP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DECNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_DECNET_ROUTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LLC2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPX_INTERN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATALK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_X25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_LAPB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHONET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAC802154 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DNS_RESOLVER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETLINK_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_NSH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QRTR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QRTR_SMD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CGROUP_NET_PRIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_NET_CLASSID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_JIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_STREAM_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> 6LoWPAN Support +CONFIG_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_6LOWPAN_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> 6LoWPAN Support >> Next Header and Generic Header Compression Support +CONFIG_6LOWPAN_NHC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_DEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_FRAGMENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_HOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_MOBILITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_ROUTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_UDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_HOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_UDP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_ICMPV6 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_DEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> Appletalk interfaces support +CONFIG_DEV_APPLETALK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTPC policy<{'i386': 'm'}> +CONFIG_COPS policy<{'i386': 'm'}> +CONFIG_COPS_DAYNA policy<{'i386': 'y'}> +CONFIG_COPS_TANGENT policy<{'i386': 'y'}> +CONFIG_IPDDP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_IPDDP mark note + +# Menu: Networking support >> Networking options >> Asynchronous Transfer Mode (ATM) +CONFIG_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ATM_CLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_CLIP_NO_ICMP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_LANE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_MPOA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_BR2684 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_BR2684_IPFILTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> B.A.T.M.A.N. Advanced Meshing Protocol +CONFIG_BATMAN_ADV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BATMAN_ADV_BATMAN_V policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BATMAN_ADV_BLA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_DAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_NC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_MCAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support +CONFIG_IEEE802154 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IEEE802154_NL802154_EXPERIMENTAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IEEE802154_SOCKET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options >> MultiProtocol Label Switching +CONFIG_MPLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_MPLS_GSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MPLS_ROUTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MPLS_IPTUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) +CONFIG_NETFILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETFILTER_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BRIDGE_NETFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration +CONFIG_NETFILTER_INGRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETFILTER_NETLINK_ACCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_QUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter Xtables support (required for ip_tables) +CONFIG_NETFILTER_XTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_AUDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CHECKSUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CLASSIFY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_DSCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_HMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_IDLETIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NETFILTER_XT_TARGET_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NETMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NFLOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NFQUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NOTRACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NETFILTER_XT_TARGET_RATEEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TEE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TRACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_SECMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TCPMSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_COMMENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNBYTES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNLABEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNTRACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DCCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DEVGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DSCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HELPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPRANGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPVS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_L2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_LENGTH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MULTIPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_NFACCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_OSF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_OWNER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_POLICY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_PHYSDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_PKTTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_QUOTA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_RATEEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_REALM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_RECENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_SCTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_SOCKET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STATISTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STRING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_TCPMSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter connection tracking support +CONFIG_NF_CONNTRACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_MARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_SECMARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_ZONES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_PROCFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NF_CONNTRACK_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_TIMEOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_TIMESTAMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_DCCP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_SCTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_UDPLITE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_AMANDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_FTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_H323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_IRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_NETBIOS_NS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SNMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_PPTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SANE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_TFTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK_TIMEOUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK_HELPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_GLUE_CT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_NAT_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NF_CONNTRACK_PROCFS flag + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter nf_tables support +CONFIG_NF_TABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_TABLES_INET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_EXTHDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_RT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_NUMGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_RBTREE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_BITMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_COUNTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_OBJREF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_QUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_QUOTA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_COMPAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_INET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter nf_tables support >> Netfilter nf_tables netdev tables support +CONFIG_NF_TABLES_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FWD_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> DECnet: Netfilter Configuration +CONFIG_DECNET_NF_GRABULATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Ethernet Bridge nf_tables support +CONFIG_NF_TABLES_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_BRIDGE_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_BRIDGE_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Ethernet Bridge tables (ebtables) support +CONFIG_BRIDGE_NF_EBTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_BROUTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_T_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_T_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_802_3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_AMONG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_IP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_PKTTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_STP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_VLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_ARPREPLY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_DNAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_MARK_T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_SNAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_NFLOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP set support +CONFIG_IP_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_MAX policy<{'amd64': '256', 'arm64': '256', 'armhf': '256', 'i386': '256', 'ppc64el': '256', 's390x': '256'}> +CONFIG_IP_SET_BITMAP_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_BITMAP_IPMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_BITMAP_PORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORTIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORTNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_MAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETPORTNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETIFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_LIST_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP virtual server support +CONFIG_IP_VS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_VS_TAB_BITS policy<{'amd64': '12', 'arm64': '12', 'armhf': '12', 'i386': '12', 'ppc64el': '12', 's390x': '12'}> +CONFIG_IP_VS_PROTO_TCP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_UDP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_ESP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_AH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_SCTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_RR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_WRR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_WLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_FO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_OVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LBLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LBLCR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_DH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_NQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SH_TAB_BITS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8', 's390x': '8'}> +CONFIG_IP_VS_FTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_NFCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PE_SIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration +CONFIG_NF_CONNTRACK_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_SOCKET_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_TABLES_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_REJECT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARP_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) +CONFIG_IP_NF_IPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_RPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_SYNPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_SECURITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) >> Packet mangling +CONFIG_IP_NF_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_CLUSTERIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) >> iptables NAT support +CONFIG_IP_NF_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_MASQUERADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_NETMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IPv4 NAT +CONFIG_NF_NAT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_NAT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_MASQUERADE_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_SNMP_BASIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IPv4 nf_tables support +CONFIG_NF_TABLES_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_ROUTE_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration +CONFIG_NF_CONNTRACK_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_SOCKET_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_REJECT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IP6 tables support (required for filtering) +CONFIG_IP6_NF_IPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_EUI64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_FRAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_OPTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_IPV6HEADER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_MH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_RPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_RT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_SYNPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_SECURITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_MASQUERADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_NPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IPv6 NAT +CONFIG_NF_NAT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_NAT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_MASQUERADE_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IPv6 nf_tables support +CONFIG_NF_TABLES_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_ROUTE_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network testing +CONFIG_NET_PKTGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TCPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_DROP_MONITOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NET_DROP_MONITOR note + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing +CONFIG_NET_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_SCH_CBQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HTB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HFSC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_SCH_PRIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_MULTIQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_RED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_SFB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_SFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_TEQL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_TBF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_GRED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_DSMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_NETEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_DRR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_MQPRIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CHOKE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_QFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CODEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_FQ_CODEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_FQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HHF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_PIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_INGRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_PLUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_BASIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_TCINDEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_ROUTE4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_RSVP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_RSVP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FLOW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_CGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FLOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_MATCHALL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Actions +CONFIG_NET_CLS_ACT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_ACT_POLICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_GACT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GACT_PROB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_ACT_MIRRED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SAMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_IPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_PEDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SIMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SKBEDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_CSUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_VLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SKBMOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_TUNNEL_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Actions >> Inter-FE action based on IETF ForCES InterFE LFB +CONFIG_NET_ACT_IFE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Allow override default queue discipline +CONFIG_NET_SCH_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Allow override default queue discipline >> Default queuing discipline + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Extended Matches +CONFIG_NET_EMATCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_EMATCH_STACK policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32', 's390x': '32'}> +CONFIG_NET_EMATCH_CMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_NBYTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_TEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_CANID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_EMATCH_IPSET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Universal 32bit comparisons w/ hashing (U32) +CONFIG_NET_CLS_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CLS_U32_PERF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CLS_U32_MARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_CLS_IND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_NET_CLS_IND flag + +# Menu: Networking support >> Networking options >> TCP/IP networking +CONFIG_INET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MULTICAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_IPIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE_DEMUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE_BROADCAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYN_COOKIES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_IPVTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FOU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FOU_IP_TUNNELS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INET_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_ESP_OFFLOAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_BEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_MD5SIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_SWITCHDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_L3_MASTER_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_NCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SYN_COOKIES mark +CONFIG_NET_SWITCHDEV mark note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> INET: socket monitoring interface +CONFIG_INET_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_UDP_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_RAW_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_DIAG_DESTROY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: advanced router +CONFIG_IP_ADVANCED_ROUTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_FIB_TRIE_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_ROUTE_MULTIPATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_ROUTE_VERBOSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: kernel level autoconfiguration +CONFIG_IP_PNP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IP_PNP note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: multicast routing +CONFIG_IP_MROUTE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MROUTE_MULTIPLE_TABLES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_PIMSM_V1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_PIMSM_V2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> Layer Two Tunneling Protocol (L2TP) +CONFIG_L2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_DEBUGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_L2TP_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> Open vSwitch +CONFIG_OPENVSWITCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_GRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_VXLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_GENEVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> TCP: advanced congestion control +CONFIG_TCP_CONG_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCP_CONG_BIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_CUBIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCP_CONG_WESTWOOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HSTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HYBLA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_VEGAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_NV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_SCALABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_LP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_VENO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_YEAH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_ILLINOIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_DCTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_CDG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_BBR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> TCP: advanced congestion control >> Default TCP congestion control +CONFIG_DEFAULT_CUBIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_RENO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol +CONFIG_IP_DCCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol >> DCCP CCIDs Configuration +CONFIG_IP_DCCP_CCID2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_DCCP_CCID3 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IP_DCCP_CCID3_DEBUG policy<{'s390x': 'n'}> +# +CONFIG_IP_DCCP_CCID3 flag + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol >> DCCP Kernel Hacking +CONFIG_IP_DCCP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NET_DCCPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The IPv6 protocol +CONFIG_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_ROUTER_PREF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_ROUTE_INFO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_OPTIMISTIC_DAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INET6_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_ESP_OFFLOAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_MIP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_ILA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_BEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_VTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_SIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_SIT_6RD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_GRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SUBTREES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_MROUTE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_PIMSM_V2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SEG6_LWTUNNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SEG6_HMAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_IPV6_OPTIMISTIC_DAD flag +CONFIG_IPV6 mark note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The RDS Protocol +CONFIG_RDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The SCTP Protocol +CONFIG_IP_SCTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCTPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCTP_DBG_OBJCNT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCTP_COOKIE_HMAC_MD5 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCTP_COOKIE_HMAC_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SCTP_DBG_OBJCNT flag + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The SCTP Protocol >> Default SCTP cookie HMAC encoding +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The TIPC Protocol +CONFIG_TIPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TIPC_MEDIA_IB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TIPC_MEDIA_UDP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> Virtual Socket protocol +CONFIG_VSOCKETS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VSOCKETS_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VMWARE_VMCI_VSOCKETS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIRTIO_VSOCKETS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HYPERV_VSOCKETS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Networking support >> Plan 9 Resource Sharing Support (9P2000) +CONFIG_NET_9P policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_XEN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_NET_9P_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_NET_9P note + +# Menu: Networking support >> RF switch subsystem support +CONFIG_RFKILL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_RFKILL_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RFKILL_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> RxRPC session sockets +CONFIG_AF_RXRPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AF_RXRPC_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AF_RXRPC_INJECT_LOSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AF_RXRPC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RXKAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> WiMAX Wireless Broadband support +CONFIG_WIMAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_WIMAX_DEBUG_LEVEL policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> + +# Menu: Networking support >> Wireless +CONFIG_WIRELESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIB80211_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) +CONFIG_MAC80211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAC80211_RC_MINSTREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_RC_MINSTREL_HT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_RC_MINSTREL_VHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_MESH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_MESSAGE_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) >> Default rate control algorithm +CONFIG_MAC80211_RC_DEFAULT_MINSTREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) >> Select mac80211 debugging features +CONFIG_MAC80211_DEBUG_MENU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MAC80211_STA_HASH_MAX_SIZE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Networking support >> Wireless >> cfg80211 - wireless configuration API +CONFIG_CFG80211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NL80211_TESTMODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_DEVELOPER_WARNINGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_DEFAULT_PS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_CRDA_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_WEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_CFG80211_WEXT flag + +# Menu: Networking support >> Wireless >> cfg80211 - wireless configuration API >> cfg80211 certification onus +CONFIG_CFG80211_CERTIFICATION_ONUS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Platform selection +CONFIG_ARCH_VEXPRESS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_SUNXI policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_ARCH_MESON policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_ACTIONS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_ALPINE policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_ROCKCHIP policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_TEGRA policy<{'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ARCH_UNIPHIER policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_ZX policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_ARCH_BCM2835 policy<{'arm64': 'y'}> +CONFIG_ARCH_BRCMSTB policy<{'arm64': 'y'}> +CONFIG_ARCH_BERLIN policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_MVEBU policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_MEDIATEK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_QCOM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_EXYNOS policy<{'arm64': 'n', 'armhf': 'y'}> +# +CONFIG_ARCH_ROCKCHIP note +CONFIG_ARCH_ZX note + +# Menu: Platform selection >> Architecture: arm64 +CONFIG_ARCH_BCM_IPROC policy<{'arm64': 'y'}> +CONFIG_ARCH_LAYERSCAPE policy<{'arm64': 'y'}> +CONFIG_ARCH_LG1K policy<{'arm64': 'y'}> +CONFIG_ARCH_REALTEK policy<{'arm64': 'y'}> +CONFIG_ARCH_SEATTLE policy<{'arm64': 'y'}> +CONFIG_ARCH_SYNQUACER policy<{'arm64': 'y'}> +CONFIG_ARCH_STRATIX10 policy<{'arm64': 'y'}> +CONFIG_ARCH_SPRD policy<{'arm64': 'y'}> +CONFIG_ARCH_THUNDER policy<{'arm64': 'y'}> +CONFIG_ARCH_THUNDER2 policy<{'arm64': 'y'}> +CONFIG_ARCH_XGENE policy<{'arm64': 'y'}> +CONFIG_ARCH_ZYNQMP policy<{'arm64': 'y'}> + +# Menu: Platform selection >> Renesas SoC Platforms +CONFIG_ARCH_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Platform selection >> Renesas SoC Platforms >> Architecture: arm64 +CONFIG_ARCH_R8A7795 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A7796 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A77970 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A77995 policy<{'arm64': 'y'}> + +# Menu: Power management and ACPI options +CONFIG_SUSPEND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SUSPEND_FREEZER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SUSPEND_SKIP_SYNC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HIBERNATION policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_PM_STD_PARTITION policy<{'amd64': '""', 'armhf': '""', 'i386': '""', 's390x': '""'}> +CONFIG_PM_AUTOSLEEP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PM_WAKELOCKS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM_WAKELOCKS_LIMIT policy<{'amd64': '100', 'arm64': '100', 'armhf': '100', 'i386': '100', 'ppc64el': '100', 's390x': '100'}> +CONFIG_PM_WAKELOCKS_GC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM_TRACE_RTC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_APM_EMULATION policy<{'armhf': 'n'}> +CONFIG_WQ_POWER_EFFICIENT_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KVM_GUEST policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IDLE policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_HIBERNATION flag + +# Menu: Power management and ACPI options >> 512x-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 52xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 82xx-based boards (PQ II) >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 83xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 86xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 8xx Machine Type >> Architecture: powerpc + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support +# + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support >> ACPI Platform Error Interface (APEI) + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support >> PMIC (Power Management Integrated Circuit) operation region support + +# Menu: Power management and ACPI options >> APM (Advanced Power Management) BIOS support >> Architecture: x86 +CONFIG_APM policy<{'i386': 'm'}> +CONFIG_APM_IGNORE_USER_SUSPEND policy<{'i386': 'n'}> +CONFIG_APM_DO_ENABLE policy<{'i386': 'n'}> +CONFIG_APM_CPU_IDLE policy<{'i386': 'n'}> +CONFIG_APM_DISPLAY_BLANK policy<{'i386': 'n'}> +CONFIG_APM_ALLOW_INTS policy<{'i386': 'n'}> +# +CONFIG_APM flag + +# Menu: Power management and ACPI options >> Architecture: arm + +# Menu: Power management and ACPI options >> Architecture: arm64 + +# Menu: Power management and ACPI options >> Architecture: powerpc +CONFIG_EPAPR_PARAVIRT policy<{'ppc64el': 'y'}> +CONFIG_PPC_OF_BOOT_TRAMPOLINE policy<{'ppc64el': 'y'}> +CONFIG_PPC_DT_CPU_FTRS policy<{'ppc64el': 'y'}> +CONFIG_UDBG_RTAS_CONSOLE policy<{'ppc64el': 'n'}> +CONFIG_MPIC_MSGR policy<{'ppc64el': 'n'}> +CONFIG_RTAS_PROC policy<{'ppc64el': 'y'}> +CONFIG_RTAS_FLASH policy<{'ppc64el': 'm'}> +CONFIG_GEN_RTC policy<{'ppc64el': 'y'}> +CONFIG_SIMPLE_GPIO policy<{'ppc64el': 'n'}> + +# Menu: Power management and ACPI options >> Architecture: s390 + +# Menu: Power management and ACPI options >> Architecture: x86 + +# Menu: Power management and ACPI options >> CPU Frequency scaling + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling +CONFIG_CPU_FREQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_STAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_POWERSAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_USERSPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_ONDEMAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_CONSERVATIVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_SCHEDUTIL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPUFREQ_DT policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_X86_INTEL_PSTATE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_PCC_CPUFREQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SFI_CPUFREQ policy<{'i386': 'm'}> +CONFIG_X86_POWERNOW_K6 policy<{'i386': 'm'}> +CONFIG_X86_POWERNOW_K7 policy<{'i386': 'm'}> +CONFIG_X86_GX_SUSPMOD policy<{'i386': 'm'}> +CONFIG_X86_SPEEDSTEP_CENTRINO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE policy<{'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_ICH policy<{'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_SMI policy<{'i386': 'y'}> +CONFIG_X86_P4_CLOCKMOD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_CPUFREQ_NFORCE2 policy<{'i386': 'y'}> +CONFIG_X86_LONGRUN policy<{'i386': 'm'}> +CONFIG_X86_LONGHAUL policy<{'i386': 'm'}> +CONFIG_X86_E_POWERSAVER policy<{'i386': 'n'}> +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK policy<{'i386': 'y'}> +CONFIG_ARM_BRCMSTB_AVS_CPUFREQ policy<{'arm64': 'm'}> +CONFIG_ARM_BRCMSTB_AVS_CPUFREQ_DEBUG policy<{'arm64': 'n'}> +CONFIG_ARM_EXYNOS5440_CPUFREQ policy<{'armhf': 'n'}> +CONFIG_ARM_HIGHBANK_CPUFREQ policy<{'armhf': 'm'}> +CONFIG_ARM_IMX6Q_CPUFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_MEDIATEK_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_OMAP2PLUS_CPUFREQ policy<{'armhf': 'y'}> +CONFIG_ARM_TEGRA20_CPUFREQ policy<{'armhf-generic': 'y'}> +CONFIG_ARM_TEGRA124_CPUFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_TI_CPUFREQ policy<{'armhf': 'y'}> +CONFIG_ACPI_CPPC_CPUFREQ policy<{'arm64': 'm'}> +CONFIG_POWERNV_CPUFREQ policy<{'ppc64el': 'y'}> +CONFIG_QORIQ_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_CPU_FREQ_STAT note +CONFIG_CPU_FREQ_GOV_PERFORMANCE note +CONFIG_CPU_FREQ_GOV_POWERSAVE note +CONFIG_CPU_FREQ_GOV_USERSPACE note +CONFIG_CPU_FREQ_GOV_ONDEMAND note +CONFIG_CPU_FREQ_GOV_CONSERVATIVE note +CONFIG_X86_PCC_CPUFREQ note +CONFIG_X86_SPEEDSTEP_CENTRINO note +CONFIG_X86_SPEEDSTEP_ICH note +CONFIG_X86_SPEEDSTEP_SMI note +CONFIG_X86_CPUFREQ_NFORCE2 note +CONFIG_CPUFREQ_DT note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> ACPI Processor P-States driver +CONFIG_X86_ACPI_CPUFREQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_ACPI_CPUFREQ_CPB policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_POWERNOW_K8 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_AMD_FREQ_SENSITIVITY policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_X86_ACPI_CPUFREQ note +CONFIG_X86_POWERNOW_K8 note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL) + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> Default CPUFreq governor +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> Generic ARM big LITTLE CPUfreq driver +CONFIG_ARM_BIG_LITTLE_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_DT_BL_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_VEXPRESS_SPC_CPUFREQ policy<{'armhf': 'm'}> +CONFIG_ARM_SCPI_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Power management and ACPI options >> CPU Idle + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support +CONFIG_CPU_IDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_IDLE_GOV_LADDER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_IDLE_GOV_MENU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> ARM CPU Idle Drivers +CONFIG_ARM_CPUIDLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_BIG_LITTLE_CPUIDLE policy<{'armhf': 'y'}> +CONFIG_ARM_HIGHBANK_CPUIDLE policy<{'armhf-generic': 'n', 'armhf-generic-lpae': 'y'}> +CONFIG_ARM_EXYNOS_CPUIDLE policy<{'armhf': 'y'}> +CONFIG_ARM_MVEBU_V7_CPUIDLE policy<{'armhf': 'y'}> +# +CONFIG_ARM_HIGHBANK_CPUIDLE note + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> MIPS CPU Idle Drivers + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> POWERPC CPU Idle Drivers +CONFIG_PSERIES_CPUIDLE policy<{'ppc64el': 'y'}> +CONFIG_POWERNV_CPUIDLE policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> CPUIdle driver >> Architecture: powerpc + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> ARM CPU Idle Drivers +# + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> MIPS CPU Idle Drivers + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> POWERPC CPU Idle Drivers + +# Menu: Power management and ACPI options >> Cell Broadband Engine options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Embedded 6xx/7xx/7xxx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Book-E Machine Type >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Ethernet driver platform-specific options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Ethernet driver platform-specific options >> Second Ethernet channel >> Architecture: powerpc + +# Menu: Power management and ACPI options >> IBM PowerNV (Non-Virtualized) platform support >> Architecture: powerpc +CONFIG_PPC_POWERNV policy<{'ppc64el': 'y'}> +CONFIG_OPAL_PRD policy<{'ppc64el': 'm'}> +CONFIG_PPC_MEMTRACE policy<{'ppc64el': 'y'}> +CONFIG_PPC_VAS policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> IBM pSeries & new (POWER5-based) iSeries +CONFIG_CMM policy<{'ppc64el': 'm', 's390x': 'y'}> +# +CONFIG_CMM flag + +# Menu: Power management and ACPI options >> IBM pSeries & new (POWER5-based) iSeries >> Architecture: powerpc +CONFIG_PPC_PSERIES policy<{'ppc64el': 'y'}> +CONFIG_PPC_SPLPAR policy<{'ppc64el': 'y'}> +CONFIG_DTL policy<{'ppc64el': 'y'}> +CONFIG_PSERIES_ENERGY policy<{'ppc64el': 'm'}> +CONFIG_SCANLOG policy<{'ppc64el': 'm'}> +CONFIG_IO_EVENT_IRQ policy<{'ppc64el': 'y'}> +CONFIG_LPARCFG policy<{'ppc64el': 'y'}> +CONFIG_PPC_SMLPAR policy<{'ppc64el': 'y'}> +CONFIG_HV_PERF_CTRS policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> MPC8xx CPM Options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> MPC8xx CPM Options >> Microcode patch selection >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PA Semi PWRficient options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PS3 Platform Options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PS3 Platform Options >> PS3 Advanced configuration options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Power Management Debug Support +CONFIG_PM_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PM_ADVANCED_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PM_TEST_SUSPEND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DPM_WATCHDOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_PM_DEBUG flag + +# Menu: Power management and ACPI options >> Support for 47x variant >> Architecture: powerpc + +# Menu: Processor support +CONFIG_SMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NR_CPUS policy<{'amd64': '8192', 'arm64': '256', 'armhf': '4', 'i386': '8', 'ppc64el': '2048', 's390x': '256'}> + +# Menu: Processor support >> Architecture: powerpc +CONFIG_ALTIVEC policy<{'ppc64el': 'y'}> +CONFIG_VSX policy<{'ppc64el': 'y'}> +CONFIG_PPC_RADIX_MMU policy<{'ppc64el': 'y'}> +CONFIG_PPC_RADIX_MMU_DEFAULT policy<{'ppc64el': 'y'}> + +# Menu: Processor support >> CPU selection +CONFIG_GENERIC_CPU policy<{'amd64': 'y'}> + +# Menu: Processor support >> CPU selection >> Architecture: powerpc +CONFIG_POWER7_CPU policy<{'ppc64el': 'n'}> +CONFIG_POWER8_CPU policy<{'ppc64el': 'y'}> + +# Menu: Processor support >> Processor Type >> Architecture: powerpc +CONFIG_PPC_BOOK3S_64 policy<{'ppc64el': 'y'}> +CONFIG_PPC_BOOK3E_64 policy<{'ppc64el': 'n'}> + +# Menu: Processor type and features +CONFIG_ARCH_RANDOM policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SPARSEMEM_VMEMMAP policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BALLOON_COMPACTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_COMPACTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MIGRATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BOUNCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KSM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_MMAP_MIN_ADDR policy<{'amd64': '65536', 'arm64': '32768', 'armhf': '32768', 'i386': '65536', 'ppc64el': '65536', 's390x': '65536'}> +CONFIG_MEMORY_FAILURE policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y'}> +CONFIG_HWPOISON_INJECT policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_TRANSPARENT_HUGEPAGE policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CLEANCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FRONTSWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEM_SOFT_DIRTY policy<{'amd64': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_ZSWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZPOOL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZBUD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_Z3FOLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZSMALLOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PGTABLE_MAPPING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ZSMALLOC_STAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IDLE_PAGE_TRACKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HMM_MIRROR policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_DEVICE_PRIVATE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_DEVICE_PUBLIC policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_PERCPU_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GUP_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCHED_MC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_SCHED_SMT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_CPU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NUMA policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NODES_SHIFT policy<{'amd64': '10', 'arm64': '6', 'ppc64el': '8', 's390x': '4'}> +CONFIG_HIGHPTE policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_MATH_EMULATION policy<{'i386': 'n'}> +CONFIG_PARAVIRT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_KEXEC_FILE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_PARAVIRT_TIME_ACCOUNTING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_XEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_RELOCATABLE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RANDOMIZE_BASE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CMDLINE_BOOL policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HIGHMEM policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_FORCE_MAX_ZONEORDER policy<{'arm64': '13', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}> +# +CONFIG_DEFAULT_MMAP_MIN_ADDR mark note +CONFIG_TRANSPARENT_HUGEPAGE flag +CONFIG_MEM_SOFT_DIRTY flag +CONFIG_IDLE_PAGE_TRACKING flag note +CONFIG_PERCPU_STATS flag +CONFIG_RELOCATABLE flag +CONFIG_HOTPLUG_CPU flag +CONFIG_NUMA note + +# Menu: Processor type and features >> ARM errata workarounds via the alternatives framework >> Architecture: arm64 +CONFIG_ARM64_ERRATUM_826319 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_827319 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_824069 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_819472 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_832075 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_834220 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_845719 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_843419 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_22375 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_23144 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_23154 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_27456 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_30115 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_1003 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_1009 policy<{'arm64': 'y'}> +CONFIG_QCOM_QDF2400_ERRATUM_0065 policy<{'arm64': 'y'}> +CONFIG_SOCIONEXT_SYNQUACER_PREITS policy<{'arm64': 'y'}> +CONFIG_HISILICON_ERRATUM_161600802 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_E1041 policy<{'arm64': 'y'}> +# +CONFIG_ARM64_ERRATUM_843419 mark note +CONFIG_QCOM_QDF2400_ERRATUM_0065 mark note + +# Menu: Processor type and features >> ARMv8.1 architectural features >> Architecture: arm64 +CONFIG_ARM64_HW_AFDBM policy<{'arm64': 'y'}> +CONFIG_ARM64_PAN policy<{'arm64': 'y'}> +CONFIG_ARM64_LSE_ATOMICS policy<{'arm64': 'y'}> +CONFIG_ARM64_VHE policy<{'arm64': 'y'}> +# +CONFIG_ARM64_LSE_ATOMICS mark note + +# Menu: Processor type and features >> ARMv8.2 architectural features >> Architecture: arm64 +CONFIG_ARM64_UAO policy<{'arm64': 'y'}> +CONFIG_ARM64_PMEM policy<{'arm64': 'y'}> + +# Menu: Processor type and features >> Allow for memory hot-add +CONFIG_MEMORY_HOTPLUG policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_MEMORY_HOTREMOVE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFERRED_STRUCT_PAGE_INIT policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ZONE_DEVICE policy<{'amd64': 'y', 'ppc64el': 'y'}> +# +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE mark note + +# Menu: Processor type and features >> Architecture: arm +CONFIG_HAVE_ARM_ARCH_TIMER policy<{'armhf': 'y'}> +CONFIG_ARM_PSCI policy<{'armhf': 'y'}> +CONFIG_THUMB2_KERNEL policy<{'armhf': 'n'}> +CONFIG_ARM_PATCH_IDIV policy<{'armhf': 'y'}> +CONFIG_AEABI policy<{'armhf': 'y'}> +CONFIG_OABI_COMPAT policy<{'armhf': 'n'}> +CONFIG_CPU_SW_DOMAIN_PAN policy<{'armhf-generic': 'y'}> +CONFIG_ARM_MODULE_PLTS policy<{'armhf': 'n'}> +CONFIG_UACCESS_WITH_MEMCPY policy<{'armhf': 'n'}> + +# Menu: Processor type and features >> Architecture: arm64 +CONFIG_ARM64_SW_TTBR0_PAN policy<{'arm64': 'y'}> +CONFIG_ARM64_SVE policy<{'arm64': 'y'}> +CONFIG_RANDOMIZE_MODULE_REGION_FULL policy<{'arm64': 'y'}> + +# Menu: Processor type and features >> Architecture: powerpc +CONFIG_PPC_TRANSACTIONAL_MEM policy<{'ppc64el': 'y'}> +CONFIG_LD_HEAD_STUB_CATCH policy<{'ppc64el': 'n'}> +CONFIG_DISABLE_MPROFILE_KERNEL policy<{'ppc64el': 'n'}> +CONFIG_SWIOTLB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE policy<{'ppc64el': 'y'}> +CONFIG_RELOCATABLE_TEST policy<{'ppc64el': 'n'}> +CONFIG_FA_DUMP policy<{'ppc64el': 'y'}> +CONFIG_IRQ_ALL_CPUS policy<{'ppc64el': 'y'}> +CONFIG_THREAD_SHIFT policy<{'ppc64el': '14'}> +CONFIG_PPC_SUBPAGE_PROT policy<{'ppc64el': 'y'}> +CONFIG_PPC_DENORMALISATION policy<{'ppc64el': 'y'}> +CONFIG_EXTRA_TARGETS policy<{'ppc64el': '""'}> +# +CONFIG_FA_DUMP note + +# Menu: Processor type and features >> Architecture: s390 +CONFIG_MAX_PHYSMEM_BITS policy<{'s390x': '46'}> +CONFIG_PACK_STACK policy<{'s390x': 'y'}> +CONFIG_CHECK_STACK policy<{'s390x': 'y'}> +CONFIG_STACK_GUARD policy<{'s390x': '256'}> +CONFIG_WARN_DYNAMIC_STACK policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Architecture: x86 +CONFIG_ZONE_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X86_FEATURE_NAMES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_FAST_FEATURE_TESTS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_X2APIC policy<{'amd64': 'y'}> +CONFIG_X86_MPPARSE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RETPOLINE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_RDT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_EXTENDED_PLATFORM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_LPSS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_AMD_PLATFORM_DEVICE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IOSF_MBI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IOSF_MBI_DEBUG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_32_IRIS policy<{'i386': 'm'}> +CONFIG_SCHED_OMIT_FRAME_POINTER policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X86_GENERIC policy<{'i386': 'y'}> +CONFIG_X86_PPRO_FENCE policy<{'i386': 'y'}> +CONFIG_HPET_TIMER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_GART_IOMMU policy<{'amd64': 'y'}> +CONFIG_CALGARY_IOMMU policy<{'amd64': 'y'}> +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT policy<{'amd64': 'y'}> +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_LEGACY_VM86 policy<{'i386': 'y'}> +CONFIG_X86_16BIT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_VSYSCALL_EMULATION policy<{'amd64': 'y'}> +CONFIG_TOSHIBA policy<{'i386': 'n'}> +CONFIG_I8K policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_REBOOTFIXUPS policy<{'i386': 'y'}> +CONFIG_MICROCODE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MICROCODE_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MICROCODE_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MSR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_CPUID policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_PAE policy<{'i386': 'y'}> +CONFIG_X86_5LEVEL policy<{'amd64': 'n'}> +CONFIG_AMD_MEM_ENCRYPT policy<{'amd64': 'y'}> +CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT policy<{'amd64': 'n'}> +CONFIG_ARCH_MEMORY_PROBE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_X86_PMEM_LEGACY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_CHECK_BIOS_CORRUPTION policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_RESERVE_LOW policy<{'amd64': '64', 'i386': '64'}> +CONFIG_MTRR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MTRR_SANITIZER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT policy<{'amd64': '1', 'i386': '1'}> +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT policy<{'amd64': '1', 'i386': '1'}> +CONFIG_X86_PAT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SMAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_UMIP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_MPX policy<{'amd64': 'y'}> +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS policy<{'amd64': 'y'}> +CONFIG_EFI_STUB policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EFI_MIXED policy<{'amd64': 'y'}> +CONFIG_KEXEC_VERIFY_SIG policy<{'amd64': 'y'}> +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG policy<{'amd64': 'y'}> +CONFIG_KEXEC_JUMP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RANDOMIZE_MEMORY policy<{'amd64': 'y'}> +CONFIG_COMPAT_VDSO policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MODIFY_LDT_SYSCALL policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_ZONE_DMA note +CONFIG_COMPAT_VDSO mark +CONFIG_X86_LEGACY_VM86 note +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG flag note +CONFIG_MODIFY_LDT_SYSCALL flag note + +# Menu: Processor type and features >> Contiguous Memory Allocator +CONFIG_CMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CMA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CMA_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CMA_AREAS policy<{'amd64': '7', 'arm64': '7', 'armhf': '7', 'i386': '7', 'ppc64el': '7', 's390x': '7'}> + +# Menu: Processor type and features >> Emulate deprecated/obsolete ARMv8 instructions >> Architecture: arm64 +CONFIG_ARMV8_DEPRECATED policy<{'arm64': 'y'}> +CONFIG_SWP_EMULATION policy<{'arm64': 'y'}> +CONFIG_CP15_BARRIER_EMULATION policy<{'arm64': 'y'}> +CONFIG_SETEND_EMULATION policy<{'arm64': 'y'}> +# +CONFIG_ARMV8_DEPRECATED mark note +CONFIG_SWP_EMULATION mark note +CONFIG_CP15_BARRIER_EMULATION mark note +CONFIG_SETEND_EMULATION mark note + +# Menu: Processor type and features >> High Memory Support >> Architecture: x86 +CONFIG_NOHIGHMEM policy<{'i386': 'n'}> +CONFIG_HIGHMEM4G policy<{'i386': 'n'}> +CONFIG_HIGHMEM64G policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Architecture: x86 +CONFIG_HYPERVISOR_GUEST policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Architecture: x86 +CONFIG_PARAVIRT_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_PARAVIRT_SPINLOCKS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_QUEUED_LOCK_STAT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_KVM_DEBUG_FS policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Xen guest support + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Xen guest support >> Architecture: x86 +CONFIG_XEN_PV policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_DOM0 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_PVHVM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_512GB policy<{'amd64': 'y'}> +CONFIG_XEN_DEBUG_FS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_XEN_PVH policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_XEN_512GB flag note + +# Menu: Processor type and features >> Machine Check / overheating reporting >> Architecture: x86 +CONFIG_X86_MCE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCELOG_LEGACY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCE_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCE_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_ANCIENT_MCE policy<{'i386': 'n'}> +CONFIG_X86_MCE_INJECT policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Processor type and features >> Math emulation options >> Architecture: powerpc + +# Menu: Processor type and features >> Memory model +CONFIG_FLATMEM_MANUAL policy<{'i386': 'n'}> +CONFIG_SPARSEMEM_MANUAL policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Processor type and features >> Memory split +CONFIG_VMSPLIT_3G policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_VMSPLIT_3G_OPT policy<{'armhf-generic': 'n'}> +CONFIG_VMSPLIT_2G policy<{'armhf': 'n', 'i386': 'n'}> +CONFIG_VMSPLIT_1G policy<{'armhf': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Memory split >> Architecture: arm + +# Menu: Processor type and features >> Memory split >> Architecture: x86 + +# Menu: Processor type and features >> Page size >> Architecture: arm64 +CONFIG_ARM64_4K_PAGES policy<{'arm64': 'y'}> +CONFIG_ARM64_16K_PAGES policy<{'arm64': 'n'}> +CONFIG_ARM64_64K_PAGES policy<{'arm64': 'n'}> + +# Menu: Processor type and features >> Page size >> Architecture: powerpc +CONFIG_PPC_4K_PAGES policy<{'ppc64el': 'n'}> +CONFIG_PPC_64K_PAGES policy<{'ppc64el': 'y'}> + +# Menu: Processor type and features >> Performance monitoring >> Architecture: x86 +CONFIG_PERF_EVENTS_INTEL_UNCORE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PERF_EVENTS_INTEL_RAPL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PERF_EVENTS_INTEL_CSTATE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PERF_EVENTS_AMD_POWER policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Power Management Debug Support +# + +# Menu: Processor type and features >> Preemption Model +CONFIG_PREEMPT_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_PREEMPT_VOLUNTARY policy<{'amd64-generic': 'y', 'amd64-lowlatency': 'n', 'arm64': 'y', 'armhf': 'y', 'i386-generic': 'y', 'i386-lowlatency': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PREEMPT policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_PREEMPT_NONE note + +# Menu: Processor type and features >> Processor family + +# Menu: Processor type and features >> Processor family >> Architecture: x86 +CONFIG_M486 policy<{'i386': 'n'}> +CONFIG_M586 policy<{'i386': 'n'}> +CONFIG_M586TSC policy<{'i386': 'n'}> +CONFIG_M586MMX policy<{'i386': 'n'}> +CONFIG_M686 policy<{'i386': 'y'}> +CONFIG_MPENTIUMII policy<{'i386': 'n'}> +CONFIG_MPENTIUMIII policy<{'i386': 'n'}> +CONFIG_MPENTIUMM policy<{'i386': 'n'}> +CONFIG_MPENTIUM4 policy<{'i386': 'n'}> +CONFIG_MK6 policy<{'i386': 'n'}> +CONFIG_MK7 policy<{'i386': 'n'}> +CONFIG_MK8 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MCRUSOE policy<{'i386': 'n'}> +CONFIG_MEFFICEON policy<{'i386': 'n'}> +CONFIG_MWINCHIPC6 policy<{'i386': 'n'}> +CONFIG_MWINCHIP3D policy<{'i386': 'n'}> +CONFIG_MELAN policy<{'i386': 'n'}> +CONFIG_MGEODEGX1 policy<{'i386': 'n'}> +CONFIG_MGEODE_LX policy<{'i386': 'n'}> +CONFIG_MCYRIXIII policy<{'i386': 'n'}> +CONFIG_MVIAC3_2 policy<{'i386': 'n'}> +CONFIG_MVIAC7 policy<{'i386': 'n'}> +CONFIG_MPSC policy<{'amd64': 'n'}> +CONFIG_MCORE2 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MATOM policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Processor type >> Architecture: s390 +CONFIG_MARCH_Z900 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z990 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z9_109 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z10 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z196 policy<{'s390x': 'n'}> +CONFIG_MARCH_ZEC12 policy<{'s390x': 'y'}> +CONFIG_MARCH_Z13 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z14 policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Support for extended (non-PC) x86 platforms >> Architecture: x86 +CONFIG_X86_NUMACHIP policy<{'amd64': 'y'}> +CONFIG_X86_VSMP policy<{'amd64': 'n'}> +CONFIG_X86_UV policy<{'amd64': 'n'}> +CONFIG_X86_GOLDFISH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_INTEL_MID policy<{'amd64': 'n', 'i386': 'y'}> +CONFIG_X86_INTEL_QUARK policy<{'i386': 'n'}> +CONFIG_X86_RDC321X policy<{'i386': 'n'}> +CONFIG_X86_32_NON_STANDARD policy<{'i386': 'n'}> +CONFIG_APB_TIMER policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Supported processor vendors >> Architecture: x86 +CONFIG_PROCESSOR_SELECT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_CYRIX_32 policy<{'i386': 'y'}> +CONFIG_CPU_SUP_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_CENTAUR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_TRANSMETA_32 policy<{'i386': 'y'}> +CONFIG_CPU_SUP_UMC_32 policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Symmetric Multi-Processing +# + +# Menu: Processor type and features >> Symmetric Multi-Processing >> Architecture: arm +CONFIG_SMP_ON_UP policy<{'armhf': 'y'}> +CONFIG_ARM_CPU_TOPOLOGY policy<{'armhf': 'y'}> +CONFIG_MCPM policy<{'armhf': 'y'}> +CONFIG_BIG_LITTLE policy<{'armhf': 'y'}> +CONFIG_BL_SWITCHER policy<{'armhf': 'y'}> +CONFIG_BL_SWITCHER_DUMMY_IF policy<{'armhf': 'm'}> + +# Menu: Processor type and features >> Symmetric multi-processing support +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Architecture: s390 +CONFIG_SCHED_TOPOLOGY policy<{'s390x': 'y'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Architecture: x86 +CONFIG_X86_BIGSMP policy<{'i386': 'n'}> +CONFIG_MAXSMP policy<{'amd64': 'y'}> +CONFIG_SCHED_MC_PRIO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_BOOTPARAM_HOTPLUG_CPU0 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_HOTPLUG_CPU0 policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support +CONFIG_NUMA_EMU policy<{'amd64': 'n', 's390x': 'y'}> +# +CONFIG_NUMA_EMU note mark + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support >> Allow for memory hot-add +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support >> Architecture: x86 +CONFIG_AMD_NUMA policy<{'amd64': 'y'}> +CONFIG_X86_64_ACPI_NUMA policy<{'amd64': 'y'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Select NUMA modes +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Select NUMA modes >> Architecture: s390 + +# Menu: Processor type and features >> Timer frequency +CONFIG_HZ_100 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_HZ_250 policy<{'amd64-generic': 'y', 'amd64-lowlatency': 'n', 'arm64': 'y', 'armhf': 'y', 'i386-generic': 'y', 'i386-lowlatency': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HZ_300 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_HZ_1000 policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Processor type and features >> Timer frequency >> Architecture: arm +CONFIG_HZ_200 policy<{'armhf': 'n'}> +CONFIG_HZ_500 policy<{'armhf': 'n'}> + +# Menu: Processor type and features >> Transparent Hugepage Support sysfs defaults +CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic-lpae': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Processor type and features >> Tune code generation >> Architecture: s390 +CONFIG_TUNE_DEFAULT policy<{'s390x': 'n'}> +CONFIG_TUNE_Z900 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z990 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z9_109 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z10 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z196 policy<{'s390x': 'n'}> +CONFIG_TUNE_ZEC12 policy<{'s390x': 'y'}> +CONFIG_TUNE_Z13 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z14 policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Virtual address space size >> Architecture: arm64 +CONFIG_ARM64_VA_BITS_39 policy<{'arm64': 'n'}> +CONFIG_ARM64_VA_BITS_48 policy<{'arm64': 'y'}> +# +CONFIG_ARM64_VA_BITS_48 mark note + +# Menu: Processor type and features >> vsyscall table for legacy applications >> Architecture: x86 +CONFIG_LEGACY_VSYSCALL_NATIVE policy<{'amd64': 'n'}> +CONFIG_LEGACY_VSYSCALL_EMULATE policy<{'amd64': 'y'}> +CONFIG_LEGACY_VSYSCALL_NONE policy<{'amd64': 'n'}> + +# Menu: Security options +CONFIG_SECURITY_DMESG_RESTRICT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_PERF_EVENTS_RESTRICT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITYFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_TABLE_ISOLATION policy<{'amd64': 'y'}> +CONFIG_INTEL_TXT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HARDENED_USERCOPY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HARDENED_USERCOPY_PAGESPAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FORTIFY_SOURCE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STATIC_USERMODEHELPER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_DOWN_KERNEL policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'y'}> +# +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT mark +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ mark +CONFIG_LOCK_DOWN_KERNEL mark flag + +# Menu: Security options >> Default security module +CONFIG_DEFAULT_SECURITY_SELINUX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_SMACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_TOMOYO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_APPARMOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_SECURITY_DAC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEFAULT_SECURITY_APPARMOR mark + +# Menu: Security options >> Enable access key retention support +CONFIG_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PERSISTENT_KEYRINGS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BIG_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRUSTED_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ENCRYPTED_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KEY_DH_OPERATIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Security options >> Enable different security models +CONFIG_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_NETWORK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_INFINIBAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_NETWORK_XFRM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_PATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LSM_MMAP_MIN_ADDR policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0', 's390x': '0'}> +CONFIG_SECURITY_LOADPIN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_YAMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SECURITY mark +CONFIG_LSM_MMAP_MIN_ADDR mark flag +CONFIG_SECURITY_YAMA mark + +# Menu: Security options >> Enable different security models >> AppArmor support +CONFIG_SECURITY_APPARMOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SECURITY_APPARMOR_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Security options >> Enable different security models >> Integrity subsystem +CONFIG_INTEGRITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_SIGNATURE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_ASYMMETRIC_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_AUDIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY mark note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> EVM support +CONFIG_EVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_ATTR_FSUUID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_EXTRA_SMACK_XATTRS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_LOAD_X509 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EVM_X509_PATH policy<{'ppc64el': '"/etc/keys/x509_evm.der"'}> +# +CONFIG_EVM note +CONFIG_EVM_ATTR_FSUUID note +CONFIG_EVM_LOAD_X509 note +CONFIG_EVM_X509_PATH note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) +CONFIG_IMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_KEXEC policy<{'ppc64el': 'y'}> +CONFIG_IMA_WRITE_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_READ_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_APPRAISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_APPRAISE_BOOTPARAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_BLACKLIST_KEYRING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_LOAD_X509 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IMA_X509_PATH policy<{'ppc64el': '"/etc/keys/x509_ima.der"'}> +CONFIG_IMA_APPRAISE_SIGNED_INIT policy<{'ppc64el': 'n'}> +# +CONFIG_IMA mark note +CONFIG_IMA_KEXEC mark note +CONFIG_IMA_WRITE_POLICY mark note +CONFIG_IMA_READ_POLICY mark note +CONFIG_IMA_APPRAISE mark note +CONFIG_IMA_TRUSTED_KEYRING mark note +CONFIG_IMA_BLACKLIST_KEYRING mark note +CONFIG_IMA_LOAD_X509 mark note +CONFIG_IMA_X509_PATH mark note +CONFIG_IMA_APPRAISE_SIGNED_INIT mark note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) >> Default integrity hash algorithm +CONFIG_IMA_DEFAULT_HASH_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IMA_DEFAULT_HASH_SHA256 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IMA_DEFAULT_HASH_SHA512 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IMA_DEFAULT_HASH_SHA256 note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) >> Default template +CONFIG_IMA_TEMPLATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_NG_TEMPLATE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IMA_SIG_TEMPLATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +# +CONFIG_IMA_SIG_TEMPLATE note + +# Menu: Security options >> Enable different security models >> NSA SELinux Support +CONFIG_SECURITY_SELINUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_BOOTPARAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_SECURITY_SELINUX_DISABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_SELINUX_DEVELOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_AVC_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +# +CONFIG_SECURITY_SELINUX mark +CONFIG_SECURITY_SELINUX_DISABLE marknote + +# Menu: Security options >> Enable different security models >> Simplified Mandatory Access Control Kernel Support +CONFIG_SECURITY_SMACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SMACK_BRINGUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_SMACK_NETFILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SMACK_APPEND_SIGNALS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SECURITY_SMACK mark + +# Menu: Security options >> Enable different security models >> TOMOYO Linux Support +CONFIG_SECURITY_TOMOYO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY policy<{'amd64': '2048', 'arm64': '2048', 'armhf': '2048', 'i386': '2048', 'ppc64el': '2048', 's390x': '2048'}> +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '1024', 's390x': '1024'}> +CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_TOMOYO_POLICY_LOADER policy<{'amd64': '"/sbin/tomoyo-init"', 'arm64': '"/sbin/tomoyo-init"', 'armhf': '"/sbin/tomoyo-init"', 'i386': '"/sbin/tomoyo-init"', 'ppc64el': '"/sbin/tomoyo-init"', 's390x': '"/sbin/tomoyo-init"'}> +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER policy<{'amd64': '"/sbin/init"', 'arm64': '"/sbin/init"', 'armhf': '"/sbin/init"', 'i386': '"/sbin/init"', 'ppc64el': '"/sbin/init"', 's390x': '"/sbin/init"'}> + +# Menu: System Type +# + +# Menu: System Type >> ARM Ltd. Integrator family >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Integrator family >> Support Integrator/AP and Integrator/PP2 platforms >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Integrator family >> Support Integrator/CP platform >> Architecture: arm + +# Menu: System Type >> ARM Ltd. RealView family >> Architecture: arm +CONFIG_ARCH_REALVIEW policy<{'armhf': 'n'}> + +# Menu: System Type >> ARM Ltd. RealView family >> Support RealView(R) Emulation Baseboard >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Versatile Express family + +# Menu: System Type >> ARM Ltd. Versatile Express family >> Architecture: arm +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_DCSCB policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_SPC policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_TC2_PM policy<{'armhf': 'y'}> + +# Menu: System Type >> ARM system type >> Architecture: arm +CONFIG_ARCH_MULTIPLATFORM policy<{'armhf': 'y'}> +CONFIG_ARCH_EBSA110 policy<{'armhf': 'n'}> +CONFIG_ARCH_EP93XX policy<{'armhf': 'n'}> +CONFIG_ARCH_FOOTBRIDGE policy<{'armhf': 'n'}> +CONFIG_ARCH_NETX policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP13XX policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP32X policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP33X policy<{'armhf': 'n'}> +CONFIG_ARCH_IXP4XX policy<{'armhf': 'n'}> +CONFIG_ARCH_DOVE policy<{'armhf': 'n'}> +CONFIG_ARCH_KS8695 policy<{'armhf': 'n'}> +CONFIG_ARCH_W90X900 policy<{'armhf': 'n'}> +CONFIG_ARCH_LPC32XX policy<{'armhf': 'n'}> +CONFIG_ARCH_PXA policy<{'armhf': 'n'}> +CONFIG_ARCH_RPC policy<{'armhf': 'n'}> +CONFIG_ARCH_SA1100 policy<{'armhf': 'n'}> +CONFIG_ARCH_S3C24XX policy<{'armhf': 'n'}> +CONFIG_ARCH_DAVINCI policy<{'armhf': 'n'}> +CONFIG_ARCH_OMAP1 policy<{'armhf': 'n'}> + +# Menu: System Type >> Allwinner SoCs + +# Menu: System Type >> Allwinner SoCs >> Architecture: arm + +# Menu: System Type >> Altera SOCFPGA family >> Architecture: arm +CONFIG_ARCH_SOCFPGA policy<{'armhf': 'n'}> + +# Menu: System Type >> Amlogic Meson SoCs + +# Menu: System Type >> Amlogic Meson SoCs >> Architecture: arm +CONFIG_MACH_MESON6 policy<{'armhf': 'y'}> +CONFIG_MACH_MESON8 policy<{'armhf': 'y'}> +CONFIG_MACH_MESON8B policy<{'armhf': 'y'}> + +# Menu: System Type >> Architecture: arm +CONFIG_ARCH_VIRT policy<{'armhf': 'y'}> +CONFIG_ARCH_AXXIA policy<{'armhf-generic-lpae': 'y'}> +CONFIG_ARCH_DIGICOLOR policy<{'armhf': 'n'}> +CONFIG_ARCH_HIGHBANK policy<{'armhf': 'y'}> +CONFIG_ARCH_KEYSTONE policy<{'armhf': 'n'}> +CONFIG_ARCH_S5PV210 policy<{'armhf': 'n'}> +CONFIG_ARCH_TANGO policy<{'armhf': 'y'}> +CONFIG_ARCH_WM8850 policy<{'armhf': 'n'}> +CONFIG_ARCH_ZYNQ policy<{'armhf': 'n'}> +CONFIG_ARM_THUMB policy<{'armhf': 'y'}> +CONFIG_ARM_THUMBEE policy<{'armhf': 'y'}> +CONFIG_SWP_EMULATE policy<{'armhf': 'y'}> +CONFIG_CPU_ICACHE_DISABLE policy<{'armhf': 'n'}> +CONFIG_CPU_BPREDICT_DISABLE policy<{'armhf': 'n'}> +CONFIG_CACHE_FEROCEON_L2 policy<{'armhf': 'y'}> +CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH policy<{'armhf': 'n'}> +CONFIG_CACHE_TAUROS2 policy<{'armhf': 'y'}> +CONFIG_CACHE_UNIPHIER policy<{'armhf': 'y'}> +CONFIG_ARM_DMA_MEM_BUFFERABLE policy<{'armhf': 'y'}> +CONFIG_IWMMXT policy<{'armhf': 'y'}> +CONFIG_PJ4B_ERRATA_4742 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_430973 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_643719 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_720789 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_754322 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_754327 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_764369 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_775420 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_798181 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_773022 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_818325_852422 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_821420 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_825619 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_852421 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_852423 policy<{'armhf': 'y'}> + +# Menu: System Type >> Aspeed BMC architectures >> Architecture: arm + +# Menu: System Type >> Atmel SoCs >> Architecture: arm +CONFIG_ARCH_AT91 policy<{'armhf': 'n'}> + +# Menu: System Type >> Axis Communications ARM based ARTPEC SoCs >> Architecture: arm +CONFIG_ARCH_ARTPEC policy<{'armhf': 'y'}> +CONFIG_MACH_ARTPEC6 policy<{'armhf': 'n'}> + +# Menu: System Type >> Broadcom SoC Support + +# Menu: System Type >> Broadcom SoC Support >> Architecture: arm +CONFIG_ARCH_BCM policy<{'armhf': 'n'}> + +# Menu: System Type >> CSR SiRF >> Architecture: arm +CONFIG_ARCH_SIRF policy<{'armhf': 'n'}> + +# Menu: System Type >> Cavium Networks CNS3XXX family >> Architecture: arm + +# Menu: System Type >> Cirrus EP93xx Implementation Options >> Architecture: arm + +# Menu: System Type >> Enable the L2x0 outer cache controller >> Architecture: arm +CONFIG_CACHE_L2X0 policy<{'armhf': 'y'}> +CONFIG_CACHE_L2X0_PMU policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_588369 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_727915 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_753970 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_769419 policy<{'armhf': 'y'}> + +# Menu: System Type >> Firmware options >> Architecture: arm +CONFIG_TRUSTED_FOUNDATIONS policy<{'armhf-generic': 'y'}> + +# Menu: System Type >> Footbridge Implementations >> Architecture: arm + +# Menu: System Type >> Freescale i.MX family >> Architecture: arm +CONFIG_ARCH_MXC policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_IMX50 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX51 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX53 policy<{'armhf-generic': 'n'}> +CONFIG_SOC_IMX6Q policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6SL policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6SX policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6UL policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX7D policy<{'armhf-generic': 'y'}> +CONFIG_SOC_LS1021A policy<{'armhf-generic': 'n'}> +CONFIG_SOC_VF610 policy<{'armhf-generic': 'y'}> + +# Menu: System Type >> Freescale i.MX family >> Clocksource for scheduler clock >> Architecture: arm +CONFIG_VF_USE_ARM_GLOBAL_TIMER policy<{'armhf-generic': 'y'}> +CONFIG_VF_USE_PIT_TIMER policy<{'armhf-generic': 'n'}> + +# Menu: System Type >> Hisilicon platform type >> Architecture: arm +CONFIG_ARCH_HI3xxx policy<{'armhf': 'y'}> +CONFIG_ARCH_HIP01 policy<{'armhf': 'n'}> +CONFIG_ARCH_HIP04 policy<{'armhf': 'y'}> +CONFIG_ARCH_HIX5HD2 policy<{'armhf': 'y'}> + +# Menu: System Type >> IOP13XX Implementation Options >> Architecture: arm + +# Menu: System Type >> IOP32x Implementation Options >> Architecture: arm + +# Menu: System Type >> IOP33x Implementation Options >> Architecture: arm + +# Menu: System Type >> Intel IXP4xx Implementation Options >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Gumstix Carrier/Expansion Board >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Motorola EZX Platform >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Keith und Koep Trizeps DIMM-Modules >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Keith und Koep Trizeps DIMM-Modules >> Select base board for Trizeps module >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Palm PDAs >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Toshiba e-series PDAs >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> SHARP Zaurus SL-5600, SL-C7xx and SL-Cxx00 Models >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> display on pcm990 >> Architecture: arm + +# Menu: System Type >> Kendin/Micrel KS8695 Implementations >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Architecture: arm +CONFIG_MMU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ARM_LPAE policy<{'armhf-generic': 'n', 'armhf-generic-lpae': 'y'}> +CONFIG_KUSER_HELPERS policy<{'armhf': 'y'}> +CONFIG_VDSO policy<{'armhf': 'y'}> + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Marvell Orion >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Renesas ARM SoCs + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Renesas ARM SoCs >> Architecture: arm +CONFIG_ARCH_EMEV2 policy<{'armhf': 'y'}> +CONFIG_ARCH_R7S72100 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A73A4 policy<{'armhf': 'n'}> +CONFIG_ARCH_R8A7740 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7743 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7745 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7778 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7779 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7790 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7791 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7792 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7793 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7794 policy<{'armhf': 'y'}> +CONFIG_ARCH_SH73A0 policy<{'armhf': 'y'}> +# +CONFIG_ARCH_R8A73A4 flag + +# Menu: System Type >> MMU-based Paged Memory Management Support >> ST-Ericsson U300 Series >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> ST-Ericsson U8500 Series >> Architecture: arm +CONFIG_ARCH_U8500 policy<{'armhf': 'n'}> + +# Menu: System Type >> MOXA ART SoC >> Architecture: arm + +# Menu: System Type >> Marvell Berlin SoCs + +# Menu: System Type >> Marvell Berlin SoCs >> Architecture: arm +CONFIG_MACH_BERLIN_BG2 policy<{'armhf': 'y'}> +CONFIG_MACH_BERLIN_BG2CD policy<{'armhf': 'y'}> +CONFIG_MACH_BERLIN_BG2Q policy<{'armhf': 'y'}> + +# Menu: System Type >> Marvell Dove Implementations >> Architecture: arm + +# Menu: System Type >> Marvell Engineering Business Unit (MVEBU) SoCs + +# Menu: System Type >> Marvell Engineering Business Unit (MVEBU) SoCs >> Architecture: arm +CONFIG_MACH_ARMADA_370 policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_375 policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_38X policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_39X policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_XP policy<{'armhf': 'y'}> +CONFIG_MACH_DOVE policy<{'armhf': 'y'}> + +# Menu: System Type >> Marvell MV78xx0 >> Architecture: arm + +# Menu: System Type >> Marvell PXA168/910/MMP2 >> Architecture: arm +CONFIG_ARCH_MMP policy<{'armhf': 'n'}> + +# Menu: System Type >> Marvell PXA168/910/MMP2 >> Marvell PXA168/910/MMP2 Implementations >> Architecture: arm + +# Menu: System Type >> Mediatek MT65xx & MT81xx SoC + +# Menu: System Type >> Mediatek MT65xx & MT81xx SoC >> Architecture: arm +CONFIG_MACH_MT2701 policy<{'armhf': 'y'}> +CONFIG_MACH_MT6589 policy<{'armhf': 'y'}> +CONFIG_MACH_MT6592 policy<{'armhf': 'y'}> +CONFIG_MACH_MT7623 policy<{'armhf': 'y'}> +CONFIG_MACH_MT8127 policy<{'armhf': 'y'}> +CONFIG_MACH_MT8135 policy<{'armhf': 'y'}> + +# Menu: System Type >> Multiple platform selection >> Architecture: arm +CONFIG_ARCH_MULTI_V6 policy<{'armhf': 'n'}> +CONFIG_ARCH_MULTI_V7 policy<{'armhf': 'y'}> + +# Menu: System Type >> NUC950 Machines >> Architecture: arm + +# Menu: System Type >> NUC960 Machines >> Architecture: arm + +# Menu: System Type >> NetX Implementations >> Architecture: arm + +# Menu: System Type >> Oxford Semiconductor OXNAS Family SoCs >> Architecture: arm + +# Menu: System Type >> Qualcomm Support + +# Menu: System Type >> Qualcomm Support >> Architecture: arm +CONFIG_ARCH_MSM8X60 policy<{'armhf': 'y'}> +CONFIG_ARCH_MSM8960 policy<{'armhf': 'y'}> +CONFIG_ARCH_MSM8974 policy<{'armhf': 'y'}> +CONFIG_ARCH_MDM9615 policy<{'armhf': 'y'}> + +# Menu: System Type >> SA11x0 Implementations >> Architecture: arm + +# Menu: System Type >> SA11x0 Implementations >> Cerf Flash available >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2410 >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2412 >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2440 >> Architecture: arm + +# Menu: System Type >> ST SPEAr Family >> Architecture: arm +CONFIG_PLAT_SPEAR policy<{'armhf': 'n'}> + +# Menu: System Type >> ST SPEAr Family >> ST SPEAr13xx >> Architecture: arm + +# Menu: System Type >> ST SPEAr Family >> ST SPEAr13xx >> ST SPEAr3xx >> Architecture: arm + +# Menu: System Type >> ST-Ericsson Nomadik >> Architecture: arm + +# Menu: System Type >> STMicroelectronics Consumer Electronics SOCs >> Architecture: arm +CONFIG_ARCH_STI policy<{'armhf': 'n'}> + +# Menu: System Type >> STMicrolectronics STM32 >> Architecture: arm + +# Menu: System Type >> Samsung Common options >> Architecture: arm +CONFIG_SAMSUNG_PM_CHECK policy<{'armhf': 'n'}> + +# Menu: System Type >> Samsung EXYNOS + +# Menu: System Type >> Samsung EXYNOS >> Architecture: arm +CONFIG_ARCH_EXYNOS3 policy<{'armhf': 'n'}> +CONFIG_ARCH_EXYNOS4 policy<{'armhf': 'n'}> + +# Menu: System Type >> Samsung EXYNOS >> SAMSUNG EXYNOS5 >> Architecture: arm +CONFIG_ARCH_EXYNOS5 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5250 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5260 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5410 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5420 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5440 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5800 policy<{'armhf': 'y'}> +CONFIG_EXYNOS5420_MCPM policy<{'armhf': 'y'}> + +# Menu: System Type >> Samsung S3C64XX >> Architecture: arm + +# Menu: System Type >> Samsung S3C64XX >> SMDK6410 >> Architecture: arm + +# Menu: System Type >> Samsung S3C64XX >> SMDK6410 >> SMDK6410 MMC/SD slot setup >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DA850/OMAP-L138/AM18x based system >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DA850/OMAP-L138/AM18x based system >> Select peripherals connected to expander on UI board >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DaVinci 644x based system >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> Select DA830/OMAP-L137/AM17x UI board peripheral >> Architecture: arm + +# Menu: System Type >> TI OMAP Common Features >> Architecture: arm +CONFIG_POWER_AVS_OMAP policy<{'armhf-generic': 'y'}> +CONFIG_POWER_AVS_OMAP_CLASS3 policy<{'armhf-generic': 'y'}> +CONFIG_OMAP_RESET_CLOCKS policy<{'armhf': 'y'}> +CONFIG_OMAP_32K_TIMER policy<{'armhf': 'y'}> +CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE policy<{'armhf-generic': 'n'}> +CONFIG_OMAP_DM_TIMER policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP Common Features >> OMAP PM layer selection >> Architecture: arm +CONFIG_OMAP_PM_NOOP policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP/AM/DM/DRA Family >> Architecture: arm +CONFIG_ARCH_OMAP3 policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ARCH_OMAP4 policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_OMAP5 policy<{'armhf': 'n'}> +CONFIG_SOC_AM33XX policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_AM43XX policy<{'armhf': 'n'}> +CONFIG_SOC_DRA7XX policy<{'armhf': 'y'}> +CONFIG_OMAP5_ERRATA_801819 policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP/AM/DM/DRA Family >> TI OMAP2/3/4 Specific Features >> Architecture: arm +CONFIG_ARCH_OMAP2PLUS_TYPICAL policy<{'armhf': 'y'}> +CONFIG_SOC_HAS_OMAP2_SDRC policy<{'armhf': 'y'}> +CONFIG_SOC_HAS_REALTIME_COUNTER policy<{'armhf': 'y'}> +CONFIG_SOC_OMAP3430 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_TI81XX policy<{'armhf-generic': 'y'}> +CONFIG_MACH_OMAP3517EVM policy<{'armhf-generic': 'n'}> +CONFIG_MACH_OMAP3_PANDORA policy<{'armhf-generic': 'y'}> +CONFIG_OMAP3_SDRC_AC_TIMING policy<{'armhf-generic': 'n'}> + +# Menu: System Type >> TI OMAP1 specific features >> Architecture: arm + +# Menu: System Type >> TI OMAP1 specific features >> OMAP15xx Based System >> Architecture: arm + +# Menu: System Type >> TI OMAP1 specific features >> OMAP16xx Based System >> Architecture: arm +CONFIG_MACH_OMAP_GENERIC policy<{'armhf': 'y'}> + +# Menu: System Type >> W90P910 Machines >> Architecture: arm + +# Menu: Ubuntu Supplied Third-Party Device Drivers +CONFIG_HIO policy<{'amd64': 'm', 'arm64': 'n', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'n'}> +# +CONFIG_HIO mark note + +# Menu: Virtualization +CONFIG_VIRTUALIZATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VHOST_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_SCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_VSOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_CROSS_ENDIAN_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_KVM policy<{'amd64': 'm', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_KVM note + +# Menu: Virtualization >> Architecture: powerpc +CONFIG_KVM_BOOK3S_64 policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_64_HV policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_64_PR policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_HV_EXIT_TIMING policy<{'ppc64el': 'n'}> +CONFIG_KVM_XICS policy<{'ppc64el': 'y'}> + +# Menu: Virtualization >> Architecture: s390 +CONFIG_PFAULT policy<{'s390x': 'y'}> +CONFIG_CMM_IUCV policy<{'s390x': 'y'}> +CONFIG_S390_HYPFS_FS policy<{'s390x': 'y'}> +CONFIG_S390_GUEST policy<{'s390x': 'y'}> + +# Menu: Virtualization >> KVM +# + +# Menu: Virtualization >> KVM >> Architecture: s390 +CONFIG_KVM_S390_UCONTROL policy<{'s390x': 'n'}> + +# Menu: Virtualization >> Kernel-based Virtual Machine (KVM) support +# + +# Menu: Virtualization >> Kernel-based Virtual Machine (KVM) support >> Architecture: x86 +CONFIG_KVM_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KVM_AMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KVM_MMU_AUDIT policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Virtualization >> Linux - VM Monitor Stream, base infrastructure >> Architecture: s390 +CONFIG_APPLDATA_BASE policy<{'s390x': 'y'}> +CONFIG_APPLDATA_MEM policy<{'s390x': 'm'}> +CONFIG_APPLDATA_OS policy<{'s390x': 'm'}> +CONFIG_APPLDATA_NET_SUM policy<{'s390x': 'm'}> + +# Menu: FOOTER + +# temporarily disabled options -- build failures. + +CONFIG_HISILICON_LPC policy<{'arm64': 'y'}> +CONFIG_LIBIO policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +#CONFIG_TI_CPSW p policy<(arch armel armhf &/ value n) | value m> flag +#CONFIG_USB_MUSB_DSPS p policy<(arch armel armhf &/ value n) | value m> flag +#CONFIG_LIS3L02DQ p policy<(arch armhf &/ value n) | value m> flag +#CONFIG_EZX_PCAP p policy<(arch armhf &/ value n) | value y> flag +#CONFIG_TOUCHSCREEN_EGALAX p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_TOUCHSCREEN_EETI p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_SENSORS_AK8975 p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_PPC_EPAPR_HV_BYTECHAN n flag note + +# +# --- linux-aws-4.15.0.orig/debian.aws/config/config.common.ports +++ linux-aws-4.15.0/debian.aws/config/config.common.ports @@ -0,0 +1,3 @@ +# +# Common config options automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.aws/config/config.common.ubuntu +++ linux-aws-4.15.0/debian.aws/config/config.common.ubuntu @@ -0,0 +1,5940 @@ +# +# Common config options automatically generated by splitconfig.pl +# +CONFIG_104_QUAD_8=m +CONFIG_60XX_WDT=m +CONFIG_64BIT=y +CONFIG_6LOWPAN=m +# CONFIG_6LOWPAN_DEBUGFS is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_DEST is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_HOP is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE is not set +# CONFIG_6LOWPAN_GHC_ICMPV6 is not set +# CONFIG_6LOWPAN_GHC_UDP is not set +CONFIG_6LOWPAN_NHC=m +CONFIG_6LOWPAN_NHC_DEST=m +CONFIG_6LOWPAN_NHC_FRAGMENT=m +CONFIG_6LOWPAN_NHC_HOP=m +CONFIG_6LOWPAN_NHC_IPV6=m +CONFIG_6LOWPAN_NHC_MOBILITY=m +CONFIG_6LOWPAN_NHC_ROUTING=m +CONFIG_6LOWPAN_NHC_UDP=m +CONFIG_6PACK=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_8129=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_842_COMPRESS=m +CONFIG_842_DECOMPRESS=m +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_9P_FS_SECURITY=y +CONFIG_ABP060MG=m +CONFIG_ABX500_CORE=y +# CONFIG_ACCESSIBILITY is not set +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_ACERHDF is not set +# CONFIG_ACORN_PARTITION is not set +CONFIG_ACPI=y +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_ALS is not set +# CONFIG_ACPI_APEI is not set +# CONFIG_ACPI_BATTERY is not set +# CONFIG_ACPI_BGRT is not set +CONFIG_ACPI_BUTTON=y +# CONFIG_ACPI_CMPC is not set +CONFIG_ACPI_CONFIGFS=m +CONFIG_ACPI_CONTAINER=y +CONFIG_ACPI_CPPC_LIB=y +CONFIG_ACPI_CPU_FREQ_PSS=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_CUSTOM_DSDT_FILE="" +# CONFIG_ACPI_CUSTOM_METHOD is not set +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_DEBUGGER is not set +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_EC_DEBUGFS=m +# CONFIG_ACPI_EXTLOG is not set +# CONFIG_ACPI_FAN is not set +# CONFIG_ACPI_HED is not set +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_HOTPLUG_IOAPIC=y +CONFIG_ACPI_HOTPLUG_MEMORY=y +# CONFIG_ACPI_IPMI is not set +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ACPI_LPIT=y +# CONFIG_ACPI_NFIT is not set +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_PCI_SLOT=y +CONFIG_ACPI_PROCESSOR=y +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set +CONFIG_ACPI_PROCESSOR_CSTATE=y +CONFIG_ACPI_PROCESSOR_IDLE=y +# CONFIG_ACPI_PROCFS_POWER is not set +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y +# CONFIG_ACPI_SBS is not set +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_TABLE_UPGRADE=y +# CONFIG_ACPI_THERMAL is not set +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_WATCHDOG=y +# CONFIG_ACPI_WMI is not set +CONFIG_ACQUIRE_WDT=m +CONFIG_ACT200L_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_AD2S90=m +CONFIG_AD5064=m +CONFIG_AD525X_DPOT=m +CONFIG_AD525X_DPOT_I2C=m +CONFIG_AD525X_DPOT_SPI=m +CONFIG_AD5360=m +CONFIG_AD5380=m +CONFIG_AD5421=m +CONFIG_AD5446=m +CONFIG_AD5449=m +CONFIG_AD5504=m +# CONFIG_AD5592R is not set +# CONFIG_AD5593R is not set +CONFIG_AD5624R_SPI=m +CONFIG_AD5686=m +CONFIG_AD5755=m +CONFIG_AD5761=m +CONFIG_AD5764=m +CONFIG_AD5791=m +CONFIG_AD5933=m +CONFIG_AD7150=m +CONFIG_AD7152=m +CONFIG_AD7192=m +CONFIG_AD7266=m +CONFIG_AD7280=m +CONFIG_AD7291=m +CONFIG_AD7298=m +CONFIG_AD7303=m +CONFIG_AD7476=m +CONFIG_AD7746=m +CONFIG_AD7766=m +CONFIG_AD7791=m +CONFIG_AD7793=m +CONFIG_AD7887=m +CONFIG_AD7923=m +CONFIG_AD799X=m +CONFIG_AD8366=m +CONFIG_AD8801=m +CONFIG_AD9523=m +CONFIG_AD9832=m +CONFIG_AD9834=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADE7753=m +CONFIG_ADE7754=m +CONFIG_ADE7758=m +CONFIG_ADE7759=m +CONFIG_ADE7854=m +CONFIG_ADE7854_I2C=m +CONFIG_ADE7854_SPI=m +CONFIG_ADF4350=m +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_ADIS16060=m +CONFIG_ADIS16080=m +CONFIG_ADIS16130=m +CONFIG_ADIS16136=m +CONFIG_ADIS16201=m +CONFIG_ADIS16203=m +CONFIG_ADIS16209=m +CONFIG_ADIS16240=m +CONFIG_ADIS16260=m +CONFIG_ADIS16400=m +CONFIG_ADIS16480=m +CONFIG_ADJD_S311=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ADVISE_SYSCALLS=y +CONFIG_ADXRS450=m +CONFIG_AD_SIGMA_DELTA=m +CONFIG_AFE4403=m +CONFIG_AFE4404=m +CONFIG_AFFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FS=m +CONFIG_AFS_FSCACHE=y +CONFIG_AF_KCM=m +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +# CONFIG_AF_RXRPC_INJECT_LOSS is not set +CONFIG_AF_RXRPC_IPV6=y +CONFIG_AGP=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_SIS=m +CONFIG_AGP_VIA=y +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_AIM_CDEV=m +CONFIG_AIM_NETWORK=m +CONFIG_AIO=y +CONFIG_AIX_PARTITION=y +CONFIG_AL3320A=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_ALI_FIR=m +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y +CONFIG_ALTERA_MBOX=m +CONFIG_ALTERA_MSGDMA=m +CONFIG_ALTERA_STAPL=m +CONFIG_ALTERA_TSE=m +CONFIG_ALX=m +CONFIG_AM2315=m +CONFIG_AMD8111_ETH=m +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_V2=m +CONFIG_AMD_MEM_ENCRYPT=y +# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set +CONFIG_AMD_NB=y +CONFIG_AMD_NUMA=y +CONFIG_AMD_PHY=m +CONFIG_AMD_XGBE=m +CONFIG_AMD_XGBE_DCB=y +CONFIG_AMD_XGBE_HAVE_ECC=y +CONFIG_AMIGA_PARTITION=y +# CONFIG_AMILO_RFKILL is not set +# CONFIG_ANDROID is not set +CONFIG_ANON_INODES=y +CONFIG_APDS9300=m +CONFIG_APDS9802ALS=m +CONFIG_APDS9960=m +# CONFIG_APPLE_GMUX is not set +CONFIG_APPLE_PROPERTIES=y +CONFIG_APPLICOM=m +CONFIG_AQTION=m +CONFIG_AQUANTIA_PHY=m +CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" +CONFIG_ARCH_DISCARD_MEMBLOCK=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ARCH_HAS_ADD_PAGES=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_ARCH_HAS_HMM=y +CONFIG_ARCH_HAS_KCOV=y +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_ARCH_HAS_PKEYS=y +CONFIG_ARCH_HAS_PMEM_API=y +CONFIG_ARCH_HAS_REFCOUNT=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SG_CHAIN=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y +CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_ZONE_DEVICE=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ARCH_RANDOM=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANTS_THP_SWAP=y +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_ARCNET=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARM_GIC_MAX_NR=1 +# CONFIG_ARM_GIC_V3_ITS is not set +CONFIG_AS3935=m +CONFIG_ASN1=y +CONFIG_ASSOCIATIVE_ARRAY=y +# CONFIG_ASUS_LAPTOP is not set +CONFIG_ASUS_WIRELESS=m +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +# CONFIG_ASYNC_RAID6_TEST is not set +CONFIG_ASYNC_TX_DMA=y +CONFIG_ASYNC_XOR=m +CONFIG_AT803X_PHY=m +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_ACPI=y +CONFIG_ATA_BMDMA=y +CONFIG_ATA_GENERIC=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=y +CONFIG_ATA_SFF=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATL1=m +CONFIG_ATL1C=m +CONFIG_ATL1E=m +CONFIG_ATL2=m +CONFIG_ATLAS_PH_SENSOR=m +CONFIG_ATM=m +# CONFIG_ATMEL_PIT is not set +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_DUMMY=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_FORE200E_TX_RETRY=16 +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_LANAI=m +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +CONFIG_ATM_SOLOS=m +CONFIG_ATM_TCP=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +CONFIG_ATP=m +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_ARCH=y +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUDIT_TREE=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUFS_BDEV_LOOP=y +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +# CONFIG_AUFS_BRANCH_MAX_511 is not set +# CONFIG_AUFS_BR_FUSE is not set +CONFIG_AUFS_BR_HFSPLUS=y +# CONFIG_AUFS_BR_RAMFS is not set +# CONFIG_AUFS_DEBUG is not set +CONFIG_AUFS_DIRREN=y +CONFIG_AUFS_EXPORT=y +# CONFIG_AUFS_FHSM is not set +CONFIG_AUFS_FS=m +# CONFIG_AUFS_HNOTIFY is not set +CONFIG_AUFS_INO_T_64=y +# CONFIG_AUFS_RDU is not set +CONFIG_AUFS_SBILIST=y +# CONFIG_AUFS_SHWH is not set +CONFIG_AUFS_XATTR=y +CONFIG_AURORA_NB8800=m +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_AXP20X_ADC=m +CONFIG_AXP20X_POWER=m +CONFIG_AXP288_ADC=m +CONFIG_AXP288_CHARGER=m +CONFIG_AXP288_FUEL_GAUGE=m +CONFIG_B44=m +CONFIG_B53=m +CONFIG_B53_MDIO_DRIVER=m +CONFIG_B53_MMAP_DRIVER=m +CONFIG_B53_SPI_DRIVER=m +CONFIG_B53_SRAB_DRIVER=m +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_APPLE is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +# CONFIG_BACKLIGHT_BD6107 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_DA9052 is not set +# CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_BACKLIGHT_LM3533 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_PCF50633 is not set +# CONFIG_BACKLIGHT_PM8941_WLED is not set +# CONFIG_BACKLIGHT_PWM is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_SKY81452 is not set +# CONFIG_BACKLIGHT_WM831X is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +CONFIG_BALLOON_COMPACTION=y +CONFIG_BASE_FULL=y +CONFIG_BASE_SMALL=0 +CONFIG_BATMAN_ADV=m +# CONFIG_BATMAN_ADV_BATMAN_V is not set +CONFIG_BATMAN_ADV_BLA=y +CONFIG_BATMAN_ADV_DAT=y +# CONFIG_BATMAN_ADV_DEBUGFS is not set +CONFIG_BATMAN_ADV_MCAST=y +CONFIG_BATMAN_ADV_NC=y +# CONFIG_BATTERY_AXP20X is not set +# CONFIG_BATTERY_BQ27XXX is not set +# CONFIG_BATTERY_DA9052 is not set +# CONFIG_BATTERY_DA9150 is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_BATTERY_SBS is not set +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BCACHE=m +# CONFIG_BCACHE_CLOSURES_DEBUG is not set +# CONFIG_BCACHE_DEBUG is not set +CONFIG_BCM7XXX_PHY=m +CONFIG_BCM87XX_PHY=m +CONFIG_BCMA=m +# CONFIG_BCMA_DEBUG is not set +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_PCI=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_SOC=y +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCMA_SFLASH=y +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BCM_NET_PHYLIB=m +CONFIG_BE2ISCSI=m +CONFIG_BE2NET=m +CONFIG_BE2NET_HWMON=y +# CONFIG_BEFS_DEBUG is not set +CONFIG_BEFS_FS=m +CONFIG_BFQ_GROUP_IOSCHED=y +CONFIG_BFS_FS=m +CONFIG_BH1750=m +CONFIG_BH1780=m +CONFIG_BIG_KEYS=y +CONFIG_BINARY_PRINTF=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_BINFMT_SCRIPT=y +CONFIG_BITREVERSE=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_CMDLINE_PARSER=y +CONFIG_BLK_DEBUG_FS=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_BSGLIB=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_DM=y +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DRBD=m +# CONFIG_BLK_DEV_FD is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +CONFIG_BLK_DEV_MD=y +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_NULL_BLK=m +CONFIG_BLK_DEV_NVME=y +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_PMEM=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_BLK_DEV_RBD=m +CONFIG_BLK_DEV_RSXX=m +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SKD=m +CONFIG_BLK_DEV_SR=y +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_DEV_THROTTLING_LOW is not set +CONFIG_BLK_DEV_UMEM=m +CONFIG_BLK_DEV_ZONED=y +CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_MQ_RDMA=y +CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_SCSI_REQUEST=y +CONFIG_BLK_SED_OPAL=y +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_WBT_SQ is not set +CONFIG_BLOCK=y +CONFIG_BLOCK_COMPAT=y +CONFIG_BMA180=m +CONFIG_BMA220=m +CONFIG_BMC150_ACCEL=m +CONFIG_BMC150_ACCEL_I2C=m +CONFIG_BMC150_ACCEL_SPI=m +CONFIG_BMC150_MAGN=m +CONFIG_BMC150_MAGN_I2C=m +CONFIG_BMC150_MAGN_SPI=m +CONFIG_BMG160=m +CONFIG_BMG160_I2C=m +CONFIG_BMG160_SPI=m +CONFIG_BMI160=m +CONFIG_BMI160_I2C=m +CONFIG_BMI160_SPI=m +CONFIG_BMP280=m +CONFIG_BMP280_I2C=m +CONFIG_BMP280_SPI=m +CONFIG_BNA=m +CONFIG_BNX2=m +CONFIG_BNX2X=m +CONFIG_BNX2X_SRIOV=y +CONFIG_BNXT=m +CONFIG_BNXT_DCB=y +CONFIG_BNXT_FLOWER_OFFLOAD=y +CONFIG_BNXT_SRIOV=y +CONFIG_BOARD_TPCI200=m +CONFIG_BONDING=m +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_BOUNCE=y +CONFIG_BPF=y +CONFIG_BPF_EVENTS=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_STREAM_PARSER=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPQETHER=m +CONFIG_BQL=y +CONFIG_BRANCH_PROFILE_NONE=y +CONFIG_BRIDGE=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_NETFILTER=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_BROADCOM_PHY=m +CONFIG_BSD_DISKLABEL=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_BT is not set +CONFIG_BTREE=y +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_FS=m +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_REF_VERIFY is not set +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +CONFIG_BTT=y +CONFIG_BUG=y +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +CONFIG_BUILDTIME_EXTABLE_SORT=y +CONFIG_BUILD_BIN2C=y +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +# CONFIG_CAIF_DEBUG is not set +CONFIG_CAIF_HSI=m +CONFIG_CAIF_NETDEV=m +CONFIG_CAIF_SPI_SLAVE=m +# CONFIG_CAIF_SPI_SYNC is not set +CONFIG_CAIF_TTY=m +CONFIG_CAIF_USB=m +CONFIG_CAIF_VIRTIO=m +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_CAN=m +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_BCM=m +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_C_CAN_PLATFORM=m +# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEV=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB2=m +CONFIG_CAN_GS_USB=m +CONFIG_CAN_GW=m +CONFIG_CAN_HI311X=m +CONFIG_CAN_IFI_CANFD=m +CONFIG_CAN_JANZ_ICAN3=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_LEDS=y +CONFIG_CAN_MCBA_USB=m +CONFIG_CAN_MCP251X=m +CONFIG_CAN_M_CAN=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PEAK_PCIEFD=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_RAW=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_SJA1000_ISA=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_SOFTING=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_VXCAN=m +CONFIG_CARDBUS=y +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_CASSINI=m +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +CONFIG_CC10001_ADC=m +CONFIG_CCS811=m +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +# CONFIG_CC_STACKPROTECTOR_REGULAR is not set +CONFIG_CC_STACKPROTECTOR_STRONG=y +CONFIG_CDROM=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_CEPH_FS=m +CONFIG_CEPH_FSCACHE=y +CONFIG_CEPH_FS_POSIX_ACL=y +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_CFG80211=m +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_WEXT=y +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_CGROUPS=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_CPUACCT=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_SCHED=y +CONFIG_CGROUP_WRITEBACK=y +# CONFIG_CHARGER_AXP20X is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_DA9150 is not set +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_MAX14577 is not set +# CONFIG_CHARGER_MAX77693 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_PCF50633 is not set +# CONFIG_CHARGER_SBS is not set +# CONFIG_CHARGER_SMB347 is not set +CONFIG_CHARLCD=m +CONFIG_CHASH=m +# CONFIG_CHASH_SELFTEST is not set +# CONFIG_CHASH_STATS is not set +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CHELSIO_LIB=m +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4VF=m +CONFIG_CHELSIO_T4_DCB=y +CONFIG_CHELSIO_T4_FCOE=y +# CONFIG_CHROMEOS_LAPTOP is not set +# CONFIG_CHROMEOS_PSTORE is not set +CONFIG_CHROME_PLATFORMS=y +CONFIG_CHR_DEV_OSST=m +CONFIG_CHR_DEV_SCH=m +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_ST=m +CONFIG_CICADA_PHY=m +CONFIG_CIFS=m +CONFIG_CIFS_ACL=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_FSCACHE=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_SMB311=y +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIO_DAC=m +CONFIG_CLEANCACHE=y +CONFIG_CLKBLD_I8253=y +CONFIG_CLKDEV_LOOKUP=y +CONFIG_CLKEVT_I8253=y +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +# CONFIG_CLOCK_THERMAL is not set +CONFIG_CLS_U32_MARK=y +# CONFIG_CLS_U32_PERF is not set +CONFIG_CLZ_TAB=y +CONFIG_CM32181=m +CONFIG_CM3232=m +CONFIG_CM3323=m +CONFIG_CM36651=m +CONFIG_CMA=y +CONFIG_CMA_AREAS=7 +# CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_CMDLINE_PARTITION=y +CONFIG_CNIC=m +CONFIG_CODA_FS=m +# CONFIG_COMEDI is not set +CONFIG_COMMON_CLK=y +CONFIG_COMMON_CLK_CDCE706=m +CONFIG_COMMON_CLK_CS2000_CP=m +# CONFIG_COMMON_CLK_NXP is not set +# CONFIG_COMMON_CLK_PIC32 is not set +CONFIG_COMMON_CLK_PWM=m +# CONFIG_COMMON_CLK_PXA is not set +CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_WM831X=m +CONFIG_COMPACTION=y +# CONFIG_COMPAL_LAPTOP is not set +CONFIG_COMPAT=y +CONFIG_COMPAT_32=y +CONFIG_COMPAT_BINFMT_ELF=y +# CONFIG_COMPAT_BRK is not set +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_COMPAT_OLD_SIGACTION=y +# CONFIG_COMPAT_VDSO is not set +# CONFIG_COMPILE_TEST is not set +CONFIG_CONFIGFS_FS=y +CONFIG_CONNECTOR=y +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_POLL=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_CORDIC=m +CONFIG_COREDUMP=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_CORTINA_PHY=m +# CONFIG_CPA_DEBUG is not set +CONFIG_CPU5_WDT=m +CONFIG_CPUMASK_OFFSTACK=y +CONFIG_CPUSETS=y +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_ISOLATION=y +# CONFIG_CPU_NO_EFFICIENT_FFS is not set +CONFIG_CPU_RMAP=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CRAMFS=m +CONFIG_CRAMFS_BLOCKDEV=y +CONFIG_CRASH_CORE=y +CONFIG_CRASH_DUMP=y +CONFIG_CRC16=y +CONFIG_CRC32=y +# CONFIG_CRC32_BIT is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_SELFTEST is not set +# CONFIG_CRC32_SLICEBY4 is not set +CONFIG_CRC32_SLICEBY8=y +CONFIG_CRC4=m +CONFIG_CRC7=m +CONFIG_CRC8=m +CONFIG_CRC_CCITT=y +CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=y +CONFIG_CROSS_COMPILE="" +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CROS_EC_LPC=m +CONFIG_CROS_EC_LPC_MEC=y +CONFIG_CROS_EC_PROTO=y +CONFIG_CROS_KBD_LED_BACKLIGHT=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_842=m +CONFIG_CRYPTO_ABLK_HELPER=m +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_AES_TI=m +CONFIG_CRYPTO_AES_X86_64=m +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_BLOWFISH_X86_64=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_CAMELLIA_X86_64=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST5_AVX_X86_64=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_CAST6_AVX_X86_64=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_CHACHA20=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_CHACHA20_X86_64=m +CONFIG_CRYPTO_CMAC=m +CONFIG_CRYPTO_CRC32=m +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=y +CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DES3_EDE_X86_64=m +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_CHELSIO=m +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +CONFIG_CRYPTO_DEV_NITROX=m +CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m +CONFIG_CRYPTO_DEV_PADLOCK=y +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_QAT=m +# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set +# CONFIG_CRYPTO_DEV_QAT_C62X is not set +# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set +CONFIG_CRYPTO_DEV_QAT_DH895xCC=m +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_VIRTIO=m +CONFIG_CRYPTO_DH=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_ECDH=m +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_ENGINE=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +CONFIG_CRYPTO_GLUE_HELPER_X86=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_KEYWRAP=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_MCRYPTD=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_NULL2=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_POLY1305=m +CONFIG_CRYPTO_POLY1305_X86_64=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SALSA20_X86_64=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX_X86_64=m +CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA1_MB=m +CONFIG_CRYPTO_SHA1_SSSE3=m +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA256_MB=m +CONFIG_CRYPTO_SHA256_SSSE3=m +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA512_MB=m +CONFIG_CRYPTO_SHA512_SSSE3=m +CONFIG_CRYPTO_SIMD=m +CONFIG_CRYPTO_SKEIN=y +CONFIG_CRYPTO_SM3=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_AEAD=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XTS=y +CONFIG_CUSE=m +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +CONFIG_CX_ECAT=m +CONFIG_CYCLADES=m +CONFIG_CYPRESS_FIRMWARE=m +# CONFIG_CYZ_INTR is not set +CONFIG_DA280=m +CONFIG_DA311=m +CONFIG_DA9052_WATCHDOG=m +CONFIG_DA9062_WATCHDOG=m +CONFIG_DA9063_WATCHDOG=m +CONFIG_DA9150_GPADC=m +CONFIG_DAVICOM_PHY=m +CONFIG_DAX=y +CONFIG_DCA=m +CONFIG_DCACHE_WORD_ACCESS=y +CONFIG_DCB=y +CONFIG_DCDBAS=m +CONFIG_DDR=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_DE4X5=m +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_BLK_CGROUP is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_CREDENTIALS is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_ENTRY is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FS=y +# CONFIG_DEBUG_HOTPLUG_CPU0 is not set +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KERNEL_DC is not set +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_NMI_SELFTEST is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_PI_LIST is not set +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_DEBUG_TIMEKEEPING is not set +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +CONFIG_DEBUG_WX=y +CONFIG_DECNET=m +CONFIG_DECNET_NF_GRABULATOR=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DEFAULT_CFQ=y +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_DEFAULT_IO_DELAY_TYPE=1 +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +# CONFIG_DEFAULT_NOOP is not set +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_SECURITY="apparmor" +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +# CONFIG_DELL_LAPTOP is not set +# CONFIG_DELL_RBTN is not set +# CONFIG_DELL_RBU is not set +# CONFIG_DELL_SMBIOS_SMM is not set +# CONFIG_DELL_SMO8800 is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEVFREQ_GOV_PASSIVE=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_DEVICE_PRIVATE=y +CONFIG_DEVICE_PUBLIC=y +# CONFIG_DEVKMEM is not set +CONFIG_DEVMEM=y +CONFIG_DEVPORT=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEV_APPLETALK=m +CONFIG_DEV_DAX=m +CONFIG_DEV_DAX_PMEM=m +CONFIG_DGNC=m +CONFIG_DL2K=m +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set +CONFIG_DLN2_ADC=m +CONFIG_DM9102=m +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_DMARD09=m +CONFIG_DMARD10=m +CONFIG_DMAR_TABLE=y +# CONFIG_DMATEST is not set +CONFIG_DMA_ACPI=y +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_CMA is not set +CONFIG_DMA_ENGINE=y +CONFIG_DMA_ENGINE_RAID=y +# CONFIG_DMA_FENCE_TRACE is not set +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DMA_VIRTUAL_CHANNELS=m +CONFIG_DMA_VIRT_OPS=y +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +CONFIG_DMI_SYSFS=m +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_BUFIO=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_SMQ=m +CONFIG_DM_CRYPT=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set +CONFIG_DM_DELAY=m +CONFIG_DM_ERA=m +CONFIG_DM_FLAKEY=m +CONFIG_DM_INTEGRITY=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_LOG_WRITES=m +CONFIG_DM_MIRROR=m +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_PERSISTENT_DATA=m +CONFIG_DM_RAID=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_SWITCH=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_UEVENT=y +CONFIG_DM_VERITY=m +# CONFIG_DM_VERITY_FEC is not set +CONFIG_DM_ZERO=m +CONFIG_DM_ZONED=m +CONFIG_DNET=m +CONFIG_DNOTIFY=y +CONFIG_DNS_RESOLVER=y +CONFIG_DONGLE=y +CONFIG_DOUBLEFAULT=y +CONFIG_DP83822_PHY=m +CONFIG_DP83848_PHY=m +CONFIG_DP83867_PHY=m +# CONFIG_DPM_WATCHDOG is not set +CONFIG_DPTF_POWER=m +CONFIG_DQL=y +CONFIG_DRAGONRISE_FF=y +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRM=m +CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMDGPU_CIK=y +# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set +CONFIG_DRM_AMDGPU_SI=y +CONFIG_DRM_AMDGPU_USERPTR=y +CONFIG_DRM_AMD_ACP=y +CONFIG_DRM_AMD_DC=y +CONFIG_DRM_AMD_DC_DCN1_0=y +# CONFIG_DRM_AMD_DC_FBC is not set +CONFIG_DRM_AMD_DC_PRE_VEGA=y +CONFIG_DRM_ANALOGIX_ANX78XX=m +CONFIG_DRM_AST=m +# CONFIG_DRM_BOCHS is not set +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_CIRRUS_QEMU=m +# CONFIG_DRM_DEBUG_MM_SELFTEST is not set +CONFIG_DRM_DP_AUX_CHARDEV=y +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +CONFIG_DRM_GEM_CMA_HELPER=y +CONFIG_DRM_GMA3600=y +CONFIG_DRM_GMA500=m +CONFIG_DRM_GMA600=y +CONFIG_DRM_HISI_HIBMC=m +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_DRM_I915=m +# CONFIG_DRM_I915_ALPHA_SUPPORT is not set +CONFIG_DRM_I915_CAPTURE_ERROR=y +CONFIG_DRM_I915_COMPRESS_ERROR=y +# CONFIG_DRM_I915_DEBUG is not set +# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set +CONFIG_DRM_I915_GVT=y +CONFIG_DRM_I915_GVT_KVMGT=m +# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set +# CONFIG_DRM_I915_SELFTEST is not set +# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set +# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set +CONFIG_DRM_I915_USERPTR=y +# CONFIG_DRM_I915_WERROR is not set +CONFIG_DRM_KMS_CMA_HELPER=y +CONFIG_DRM_KMS_FB_HELPER=y +CONFIG_DRM_KMS_HELPER=m +# CONFIG_DRM_LEGACY is not set +# CONFIG_DRM_LIB_RANDOM is not set +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_MGAG200=m +CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_NOUVEAU is not set +CONFIG_DRM_PANEL=y +CONFIG_DRM_PANEL_BRIDGE=y +CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m +CONFIG_DRM_QXL=m +CONFIG_DRM_RADEON=m +# CONFIG_DRM_RADEON_USERPTR is not set +CONFIG_DRM_TINYDRM=m +CONFIG_DRM_TTM=m +CONFIG_DRM_UDL=m +CONFIG_DRM_VBOXVIDEO=m +CONFIG_DRM_VGEM=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_VMWGFX_FBCON=y +CONFIG_DS1682=m +CONFIG_DS1803=m +CONFIG_DS4424=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DST_CACHE=y +CONFIG_DUMMY=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_DUMMY_IRQ=m +CONFIG_DWC_XLGMAC=m +CONFIG_DWC_XLGMAC_PCI=m +CONFIG_DWMAC_GENERIC=m +CONFIG_DW_DMAC=m +CONFIG_DW_DMAC_CORE=m +CONFIG_DW_DMAC_PCI=m +CONFIG_DW_WATCHDOG=m +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +CONFIG_EARLY_PRINTK_EFI=y +CONFIG_EARLY_PRINTK_USB=y +# CONFIG_EARLY_PRINTK_USB_XDBC is not set +CONFIG_EBC_C384_WDT=m +CONFIG_ECHO=m +CONFIG_ECRYPT_FS=y +CONFIG_ECRYPT_FS_MESSAGING=y +CONFIG_EDAC=y +CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7300=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_IE31200=m +# CONFIG_EDAC_LEGACY_SYSFS is not set +CONFIG_EDAC_PND2=m +CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_SKX=m +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC_X38=m +CONFIG_EDD=y +CONFIG_EDD_OFF=y +# CONFIG_EEEPC_LAPTOP is not set +CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_93XX46=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_IDT_89HPESX=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EFI=y +CONFIG_EFIVAR_FS=y +CONFIG_EFI_BOOTLOADER_CONTROL=m +CONFIG_EFI_CAPSULE_LOADER=m +CONFIG_EFI_DEV_PATH_PARSER=y +CONFIG_EFI_ESRT=y +# CONFIG_EFI_FAKE_MEMMAP is not set +CONFIG_EFI_MIXED=y +CONFIG_EFI_PARTITION=y +# CONFIG_EFI_PGT_DUMP is not set +CONFIG_EFI_RUNTIME_MAP=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_SIGNATURE_LIST_PARSER=y +CONFIG_EFI_STUB=y +CONFIG_EFI_TEST=m +CONFIG_EFI_VARS=y +CONFIG_EFI_VARS_PSTORE=m +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EFS_FS=m +CONFIG_ELFCORE=y +CONFIG_ELF_CORE=y +# CONFIG_EMBEDDED is not set +# CONFIG_EM_TIMER_STI is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_ENA_ETHERNET=m +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ENCRYPTED_KEYS=y +CONFIG_ENCX24J600=m +CONFIG_ENIC=m +CONFIG_EPIC100=m +CONFIG_EPOLL=y +CONFIG_EQUALIZER=m +CONFIG_ESI_DONGLE=m +CONFIG_ET131X=m +CONFIG_ETHERNET=y +CONFIG_ETHOC=m +CONFIG_EUROTECH_WDT=m +CONFIG_EVENTFD=y +CONFIG_EVENT_TRACING=y +CONFIG_EVM=y +CONFIG_EVM_ATTR_FSUUID=y +CONFIG_EVM_EXTRA_SMACK_XATTRS=y +# CONFIG_EVM_LOAD_X509 is not set +# CONFIG_EXOFS_DEBUG is not set +CONFIG_EXOFS_FS=m +CONFIG_EXPERT=y +CONFIG_EXPORTFS=y +CONFIG_EXPORTFS_BLOCK_OPS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_ENCRYPTION=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_ENCRYPTION=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_USE_FOR_EXT2=y +CONFIG_EXTCON=y +CONFIG_EXTCON_ADC_JACK=m +CONFIG_EXTCON_AXP288=m +CONFIG_EXTCON_MAX14577=m +CONFIG_EXTCON_MAX77693=m +CONFIG_EXTCON_RT8973A=m +CONFIG_EXTCON_SM5502=m +CONFIG_EXTCON_USBC_CROS_EC=m +CONFIG_EXTRA_FIRMWARE="" +CONFIG_EZX_PCAP=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +CONFIG_F2FS_FS=m +CONFIG_F2FS_FS_ENCRYPTION=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_F2FS_FS_XATTR=y +# CONFIG_F2FS_IO_TRACE is not set +CONFIG_F2FS_STAT_FS=y +CONFIG_F71808E_WDT=m +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_FARSYNC=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +CONFIG_FAT_FS=y +# CONFIG_FAULT_INJECTION is not set +CONFIG_FB=y +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +# CONFIG_FB_3DFX_I2C is not set +CONFIG_FB_ARC=m +CONFIG_FB_ARK=m +CONFIG_FB_ASILIANT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_AUO_K1900=m +CONFIG_FB_AUO_K1901=m +CONFIG_FB_AUO_K190X=m +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_BROADSHEET=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_CIRRUS=m +CONFIG_FB_CMDLINE=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_CYBER2000_DDC=y +CONFIG_FB_DDC=m +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_EFI=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_HECUBA=m +CONFIG_FB_HGA=m +CONFIG_FB_HYPERV=m +CONFIG_FB_I740=m +# CONFIG_FB_IBM_GXT4500 is not set +CONFIG_FB_IMSTT=y +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +CONFIG_FB_INTEL_I2C=y +CONFIG_FB_KYRO=m +CONFIG_FB_LE80578=m +# CONFIG_FB_MACMODES is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_I2C=y +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_METRONOME=m +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_N411=m +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_NOTIFY=y +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_OPENCORES=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_PM3=m +# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_BACKLIGHT=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_I2C=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_S3=m +CONFIG_FB_S3_DDC=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SIMPLE=y +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_SM501=m +CONFIG_FB_SM712=m +CONFIG_FB_SM750=m +CONFIG_FB_SMSCUFX=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_TRIDENT=m +CONFIG_FB_UDL=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +CONFIG_FB_VGA16=m +# CONFIG_FB_VIRTUAL is not set +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_XGI=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FHANDLE=y +CONFIG_FIB_RULES=y +CONFIG_FILE_LOCKING=y +# CONFIG_FIREWIRE is not set +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_EDID=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_FIXED_PHY=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FM10K=m +CONFIG_FMC=m +CONFIG_FMC_CHARDEV=m +CONFIG_FMC_FAKEDEV=m +CONFIG_FMC_TRIVIAL=m +CONFIG_FMC_WRITE_EEPROM=m +# CONFIG_FONTS is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +CONFIG_FONT_SUPPORT=y +CONFIG_FORCEDETH=m +CONFIG_FORTIFY_SOURCE=y +# CONFIG_FPGA is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FRAME_POINTER=y +CONFIG_FRAME_WARN=1024 +CONFIG_FREEZER=y +CONFIG_FRONTSWAP=y +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_FSCACHE_STATS=y +CONFIG_FSI=m +CONFIG_FSI_MASTER_HUB=m +CONFIG_FSI_SCOM=m +CONFIG_FSNOTIFY=y +CONFIG_FS_DAX=y +CONFIG_FS_DAX_PMD=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_IOMAP=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FTRACE=y +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +CONFIG_FTRACE_SYSCALLS=y +# CONFIG_FUJITSU_ES is not set +# CONFIG_FUJITSU_LAPTOP is not set +# CONFIG_FUJITSU_TABLET is not set +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FUNCTION_TRACER=y +CONFIG_FUSE_FS=y +CONFIG_FUSION=y +CONFIG_FUSION_CTL=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_SAS=m +CONFIG_FUSION_SPI=m +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set +CONFIG_FW_LOADER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_GACT_PROB=y +# CONFIG_GAMEPORT is not set +CONFIG_GARP=m +CONFIG_GART_IOMMU=y +# CONFIG_GCC_PLUGINS is not set +# CONFIG_GCOV_KERNEL is not set +CONFIG_GDB_SCRIPTS=y +CONFIG_GENERIC_ADC_BATTERY=m +CONFIG_GENERIC_ADC_THERMAL=m +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_CPU=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_GENERIC_EARLY_IOREMAP=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_IOMAP=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_MSI_IRQ_DOMAIN=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_PHY=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_TRACER=y +CONFIG_GENEVE=m +CONFIG_GENWQE=m +CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +CONFIG_GIRBIL_DONGLE=m +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +# CONFIG_GOLDFISH is not set +# CONFIG_GOOGLE_FIRMWARE is not set +CONFIG_GP2AP020A00F=m +# CONFIG_GPIOLIB is not set +CONFIG_GRACE_PERIOD=m +CONFIG_GREENASIA_FF=y +CONFIG_GREYBUS=m +CONFIG_GREYBUS_BOOTROM=m +CONFIG_GREYBUS_BRIDGED_PHY=m +CONFIG_GREYBUS_ES2=m +CONFIG_GREYBUS_FIRMWARE=m +CONFIG_GREYBUS_HID=m +CONFIG_GREYBUS_I2C=m +CONFIG_GREYBUS_LIGHT=m +CONFIG_GREYBUS_LOG=m +CONFIG_GREYBUS_LOOPBACK=m +CONFIG_GREYBUS_POWER=m +CONFIG_GREYBUS_PWM=m +CONFIG_GREYBUS_RAW=m +CONFIG_GREYBUS_SDIO=m +CONFIG_GREYBUS_SPI=m +CONFIG_GREYBUS_UART=m +CONFIG_GREYBUS_USB=m +CONFIG_GREYBUS_VIBRATOR=m +CONFIG_GRO_CELLS=y +CONFIG_GS_FPGABOOT=m +CONFIG_GTP=m +# CONFIG_GUP_BENCHMARK is not set +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_HAPPYMEAL=m +CONFIG_HARDENED_USERCOPY=y +# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set +CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y +CONFIG_HARDLOCKUP_DETECTOR=y +CONFIG_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT_MAP=y +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +# CONFIG_HAVE_AOUT is not set +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +# CONFIG_HAVE_ARCH_BITREVERSE is not set +CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y +# CONFIG_HAVE_ARCH_HASH is not set +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_COPY_THREAD_TLS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_HAVE_DEBUG_KMEMLEAK=y +CONFIG_HAVE_DEBUG_STACKOVERFLOW=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_GCC_PLUGINS=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HAVE_GENERIC_GUP=y +CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_IDE=y +CONFIG_HAVE_INTEL_TXT=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQFD=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_LIVEPATCH=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_HAVE_MEMBLOCK_NODE_MAP=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_HAVE_NET_DSA=y +CONFIG_HAVE_NMI=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_RCU_TABLE_FREE=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RELIABLE_STACKTRACE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_STACK_VALIDATION=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_UID16=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HDC100X=m +CONFIG_HDLC=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_X25=m +CONFIG_HDMI=y +CONFIG_HDM_DIM2=m +CONFIG_HDM_I2C=m +CONFIG_HDM_USB=m +# CONFIG_HEADERS_CHECK is not set +# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set +CONFIG_HFSPLUS_FS=m +CONFIG_HFSPLUS_FS_POSIX_ACL=y +CONFIG_HFS_FS=m +CONFIG_HI8435=m +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_A4TECH=m +CONFIG_HID_ACCUTOUCH=m +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_ALPS=m +CONFIG_HID_APPLE=m +CONFIG_HID_APPLEIR=m +CONFIG_HID_ASUS=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HID_BELKIN=m +CONFIG_HID_BETOP_FF=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CMEDIA=m +CONFIG_HID_CORSAIR=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_HID_ELECOM=m +CONFIG_HID_ELO=m +CONFIG_HID_EMS_FF=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GEMBIRD=m +CONFIG_HID_GENERIC=m +CONFIG_HID_GFRM=m +CONFIG_HID_GREENASIA=m +CONFIG_HID_GT683R=m +CONFIG_HID_GYRATION=m +CONFIG_HID_HOLTEK=m +CONFIG_HID_HYPERV_MOUSE=m +CONFIG_HID_ICADE=m +CONFIG_HID_ITE=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +CONFIG_HID_LCPOWER=m +CONFIG_HID_LED=m +CONFIG_HID_LENOVO=m +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_LOGITECH_HIDPP=m +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MAYFLASH=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTI=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_HID_PENMOUNT=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PID=y +CONFIG_HID_PLANTRONICS=m +CONFIG_HID_PRIMAX=m +CONFIG_HID_RETRODE=m +CONFIG_HID_RMI=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SENSOR_ACCEL_3D=m +CONFIG_HID_SENSOR_ALS=m +CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +CONFIG_HID_SENSOR_DEVICE_ROTATION=m +CONFIG_HID_SENSOR_GYRO_3D=m +CONFIG_HID_SENSOR_HUB=m +CONFIG_HID_SENSOR_HUMIDITY=m +CONFIG_HID_SENSOR_IIO_COMMON=m +CONFIG_HID_SENSOR_IIO_TRIGGER=m +CONFIG_HID_SENSOR_INCLINOMETER_3D=m +CONFIG_HID_SENSOR_MAGNETOMETER_3D=m +CONFIG_HID_SENSOR_PRESS=m +CONFIG_HID_SENSOR_PROX=m +CONFIG_HID_SENSOR_TEMP=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_HID_SONY=m +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_THINGM=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_UDRAW_PS3=m +CONFIG_HID_WACOM=m +CONFIG_HID_WALTOP=m +CONFIG_HID_WIIMOTE=m +CONFIG_HID_XINMO=m +CONFIG_HID_ZEROPLUS=m +CONFIG_HID_ZYDACRON=m +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HINIC=m +CONFIG_HIO=m +# CONFIG_HIPPI is not set +CONFIG_HIST_TRIGGERS=y +CONFIG_HMC6352=m +CONFIG_HMM=y +CONFIG_HMM_MIRROR=y +CONFIG_HOLTEK_FF=y +CONFIG_HOTPLUG_CPU=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_HOTPLUG_PCI_SHPC=m +CONFIG_HP03=m +CONFIG_HP100=m +CONFIG_HP206C=m +CONFIG_HPET=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_MMAP_DEFAULT=y +CONFIG_HPET_TIMER=y +CONFIG_HPFS_FS=m +# CONFIG_HP_ACCEL is not set +# CONFIG_HP_ILO is not set +# CONFIG_HP_WATCHDOG is not set +# CONFIG_HP_WIRELESS is not set +CONFIG_HSA_AMD=m +CONFIG_HSI=m +CONFIG_HSI_BOARDINFO=y +CONFIG_HSI_CHAR=m +CONFIG_HSR=m +CONFIG_HSU_DMA=m +CONFIG_HTC_PASIC3=m +CONFIG_HTS221=m +CONFIG_HTS221_I2C=m +CONFIG_HTS221_SPI=m +CONFIG_HTU21=m +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_HWLAT_TRACER=y +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_HWMON_VID=m +CONFIG_HWPOISON_INJECT=m +CONFIG_HWSPINLOCK=y +CONFIG_HW_CONSOLE=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_TPM=m +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_HYPERV=m +CONFIG_HYPERVISOR_GUEST=y +CONFIG_HYPERV_BALLOON=m +CONFIG_HYPERV_KEYBOARD=m +CONFIG_HYPERV_NET=m +CONFIG_HYPERV_STORAGE=m +CONFIG_HYPERV_TSCPAGE=y +CONFIG_HYPERV_UTILS=m +CONFIG_HYPERV_VSOCKETS=m +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_PERIODIC is not set +CONFIG_I2C=m +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CROS_EC_TUNNEL=m +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CORE is not set +CONFIG_I2C_DESIGNWARE_BAYTRAIL=y +CONFIG_I2C_DESIGNWARE_CORE=m +CONFIG_I2C_DESIGNWARE_PCI=m +CONFIG_I2C_DESIGNWARE_PLATFORM=m +# CONFIG_I2C_DESIGNWARE_SLAVE is not set +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_DLN2=m +# CONFIG_I2C_EMEV2 is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_HID=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_KEMPLD=m +CONFIG_I2C_MLXCPLD=m +CONFIG_I2C_MUX=m +# CONFIG_I2C_MUX_LTC4306 is not set +CONFIG_I2C_MUX_MLXCPLD=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_REG=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_PIIX4=m +# CONFIG_I2C_PXA_PCI is not set +CONFIG_I2C_ROBOTFUZZ_OSIF=m +CONFIG_I2C_SCMI=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +# CONFIG_I2C_SLAVE is not set +CONFIG_I2C_SMBUS=m +CONFIG_I2C_STUB=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VIPERBOARD=m +CONFIG_I2C_XILINX=m +CONFIG_I40E=m +CONFIG_I40EVF=m +CONFIG_I40E_DCB=y +CONFIG_I6300ESB_WDT=m +CONFIG_I8253_LOCK=y +CONFIG_I8K=m +# CONFIG_IA32_AOUT is not set +CONFIG_IA32_EMULATION=y +CONFIG_IAQCORE=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_IBM_ASM=m +# CONFIG_IBM_RTL is not set +CONFIG_ICPLUS_PHY=m +CONFIG_ICS932S401=m +# CONFIG_IDE is not set +# CONFIG_IDEAPAD_LAPTOP is not set +CONFIG_IDLE_PAGE_TRACKING=y +CONFIG_IE6XX_WDT=m +CONFIG_IEEE802154=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_IEEE802154_ADF7242=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_AT86RF230_DEBUGFS=y +CONFIG_IEEE802154_ATUSB=m +CONFIG_IEEE802154_CA8210=m +CONFIG_IEEE802154_CA8210_DEBUGFS=y +CONFIG_IEEE802154_CC2520=m +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKELB=m +CONFIG_IEEE802154_MRF24J40=m +# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set +CONFIG_IEEE802154_SOCKET=m +CONFIG_IFB=m +CONFIG_IGB=m +CONFIG_IGBVF=m +CONFIG_IGB_DCA=y +CONFIG_IGB_HWMON=y +CONFIG_IIO=m +CONFIG_IIO_ADIS_LIB=m +CONFIG_IIO_ADIS_LIB_BUFFER=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=m +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_HRTIMER_TRIGGER=m +CONFIG_IIO_INTERRUPT_TRIGGER=m +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_MS_SENSORS_I2C=m +CONFIG_IIO_SIMPLE_DUMMY=m +# CONFIG_IIO_SIMPLE_DUMMY_BUFFER is not set +# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set +CONFIG_IIO_SSP_SENSORHUB=m +CONFIG_IIO_SSP_SENSORS_COMMONS=m +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m +CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_IIO_ST_GYRO_I2C_3AXIS=m +CONFIG_IIO_ST_GYRO_SPI_3AXIS=m +CONFIG_IIO_ST_LSM6DSX=m +CONFIG_IIO_ST_LSM6DSX_I2C=m +CONFIG_IIO_ST_LSM6DSX_SPI=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_ST_MAGN_I2C_3AXIS=m +CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_IIO_ST_PRESS=m +CONFIG_IIO_ST_PRESS_I2C=m +CONFIG_IIO_ST_PRESS_SPI=m +CONFIG_IIO_ST_SENSORS_CORE=m +CONFIG_IIO_ST_SENSORS_I2C=m +CONFIG_IIO_ST_SENSORS_SPI=m +CONFIG_IIO_SW_DEVICE=m +CONFIG_IIO_SW_TRIGGER=m +CONFIG_IIO_SYSFS_TRIGGER=m +CONFIG_IIO_TIGHTLOOP_TRIGGER=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_TRIGGERED_BUFFER=m +CONFIG_IIO_TRIGGERED_EVENT=m +# CONFIG_IKCONFIG is not set +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_IMA=y +CONFIG_IMA_APPRAISE=y +CONFIG_IMA_APPRAISE_BOOTPARAM=y +# CONFIG_IMA_BLACKLIST_KEYRING is not set +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_LSM_RULES=y +CONFIG_IMA_MEASURE_PCR_IDX=10 +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_READ_POLICY is not set +# CONFIG_IMA_SIG_TEMPLATE is not set +# CONFIG_IMA_TEMPLATE is not set +CONFIG_IMA_TRUSTED_KEYRING=y +# CONFIG_IMA_WRITE_POLICY is not set +CONFIG_IMG_ASCII_LCD=m +CONFIG_INA2XX_ADC=m +CONFIG_INET=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_ESP_OFFLOAD=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET_AH=m +CONFIG_INET_DCCP_DIAG=m +CONFIG_INET_DIAG=m +CONFIG_INET_DIAG_DESTROY=y +CONFIG_INET_ESP=m +CONFIG_INET_ESP_OFFLOAD=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_RAW_DIAG=m +CONFIG_INET_SCTP_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_CXGB4=m +# CONFIG_INFINIBAND_EXP_USER_ACCESS is not set +CONFIG_INFINIBAND_HFI1=m +CONFIG_INFINIBAND_I40IW=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_ISERT=m +CONFIG_INFINIBAND_MTHCA=m +# CONFIG_INFINIBAND_MTHCA_DEBUG is not set +CONFIG_INFINIBAND_NES=m +# CONFIG_INFINIBAND_NES_DEBUG is not set +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_ON_DEMAND_PAGING=y +CONFIG_INFINIBAND_OPA_VNIC=m +CONFIG_INFINIBAND_QEDR=m +CONFIG_INFINIBAND_QIB=m +CONFIG_INFINIBAND_QIB_DCA=y +CONFIG_INFINIBAND_RDMAVT=m +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_SRPT=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_USNIC=m +CONFIG_INFINIBAND_VMWARE_PVRDMA=m +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_INOTIFY_USER=y +CONFIG_INPUT=y +CONFIG_INPUT_88PM80X_ONKEY=m +CONFIG_INPUT_AD714X=m +CONFIG_INPUT_AD714X_I2C=m +CONFIG_INPUT_AD714X_SPI=m +CONFIG_INPUT_ADXL34X=m +CONFIG_INPUT_ADXL34X_I2C=m +CONFIG_INPUT_ADXL34X_SPI=m +CONFIG_INPUT_APANEL=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_AXP20X_PEK=m +CONFIG_INPUT_BMA150=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_CMA3000=m +CONFIG_INPUT_CMA3000_I2C=m +CONFIG_INPUT_DA9052_ONKEY=m +CONFIG_INPUT_DA9063_ONKEY=m +CONFIG_INPUT_DRV2665_HAPTICS=m +CONFIG_INPUT_DRV2667_HAPTICS=m +CONFIG_INPUT_E3X0_BUTTON=m +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_IDEAPAD_SLIDEBAR=m +CONFIG_INPUT_IMS_PCU=m +CONFIG_INPUT_JOYDEV=m +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_KEYBOARD=y +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_KXTJ9=m +# CONFIG_INPUT_KXTJ9_POLLED_MODE is not set +# CONFIG_INPUT_LEDS is not set +CONFIG_INPUT_MATRIXKMAP=m +CONFIG_INPUT_MAX77693_HAPTIC=m +CONFIG_INPUT_MC13783_PWRBUTTON=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MMA8450=m +# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_PCAP=m +CONFIG_INPUT_PCF50633_PMU=m +CONFIG_INPUT_PCF8574=m +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_PWM_BEEPER=m +CONFIG_INPUT_PWM_VIBRA=m +CONFIG_INPUT_REGULATOR_HAPTIC=m +CONFIG_INPUT_RETU_PWRBUTTON=m +CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_TABLET=y +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_UINPUT=y +CONFIG_INPUT_WM831X_ON=m +# CONFIG_INPUT_XEN_KBDDEV_FRONTEND is not set +CONFIG_INPUT_YEALINK=m +CONFIG_INSTRUCTION_DECODER=y +# CONFIG_INT340X_THERMAL is not set +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +CONFIG_INTEGRITY_AUDIT=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_TRUSTED_KEYRING=y +CONFIG_INTEL_BXTWC_PMIC_TMU=m +CONFIG_INTEL_BXT_PMIC_THERMAL=m +CONFIG_INTEL_CHT_INT33FE=m +CONFIG_INTEL_GTT=y +CONFIG_INTEL_HID_EVENT=m +CONFIG_INTEL_IDLE=y +CONFIG_INTEL_IDMA64=m +CONFIG_INTEL_IOATDMA=m +CONFIG_INTEL_IOMMU=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y +CONFIG_INTEL_IOMMU_SVM=y +CONFIG_INTEL_IPS=m +CONFIG_INTEL_ISH_HID=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MEI_ME=m +CONFIG_INTEL_MEI_TXE=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_INTEL_MIC_BUS=m +CONFIG_INTEL_MIC_CARD=m +CONFIG_INTEL_MIC_HOST=m +CONFIG_INTEL_MIC_X100_DMA=m +# CONFIG_INTEL_OAKTRAIL is not set +CONFIG_INTEL_PCH_THERMAL=m +CONFIG_INTEL_PMC_CORE=y +CONFIG_INTEL_PMC_IPC=m +CONFIG_INTEL_POWERCLAMP=m +CONFIG_INTEL_PUNIT_IPC=m +CONFIG_INTEL_RDT=y +CONFIG_INTEL_RST=m +CONFIG_INTEL_SMARTCONNECT=m +CONFIG_INTEL_SOC_DTS_IOSF_CORE=m +CONFIG_INTEL_SOC_DTS_THERMAL=m +CONFIG_INTEL_SOC_PMIC_BXTWC=m +CONFIG_INTEL_TELEMETRY=m +CONFIG_INTEL_TH=m +# CONFIG_INTEL_TH_DEBUG is not set +CONFIG_INTEL_TH_GTH=m +CONFIG_INTEL_TH_MSU=m +CONFIG_INTEL_TH_PCI=m +CONFIG_INTEL_TH_PTI=m +CONFIG_INTEL_TH_STH=m +CONFIG_INTEL_TURBO_MAX_3=y +CONFIG_INTEL_TXT=y +# CONFIG_INTEL_VBTN is not set +CONFIG_INTEL_XWAY_PHY=m +CONFIG_INTERVAL_TREE=y +# CONFIG_INTERVAL_TREE_TEST is not set +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_SPI=m +CONFIG_IOMMU_API=y +# CONFIG_IOMMU_DEBUG is not set +CONFIG_IOMMU_HELPER=y +CONFIG_IOMMU_IOVA=y +# CONFIG_IOMMU_STRESS is not set +CONFIG_IOMMU_SUPPORT=y +CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_CFQ=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSF_MBI=y +CONFIG_IOSF_MBI_DEBUG=y +# CONFIG_IO_DELAY_0X80 is not set +CONFIG_IO_DELAY_0XED=y +# CONFIG_IO_DELAY_NONE is not set +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_STRICT_DEVMEM is not set +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m +CONFIG_IPACK_BUS=m +CONFIG_IPC_NS=y +# CONFIG_IPDDP is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_DMI_DECODE=y +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_POWEROFF=m +CONFIG_IPMI_PROC_INTERFACE=y +CONFIG_IPMI_SI=m +CONFIG_IPMI_SSIF=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPV6=y +CONFIG_IPV6_FOU=m +CONFIG_IPV6_FOU_TUNNEL=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_ILA=m +CONFIG_IPV6_MIP6=m +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_SEG6_HMAC=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_VTI=m +CONFIG_IPVLAN=m +CONFIG_IPVTAP=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_DCCP=m +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +# CONFIG_IP_DCCP_CCID3 is not set +# CONFIG_IP_DCCP_DEBUG is not set +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MROUTE=y +# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set +CONFIG_IP_MULTICAST=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_IP_PNP is not set +CONFIG_IP_ROUTE_CLASSID=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_SCTP=m +CONFIG_IP_SET=m +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMAC=m +CONFIG_IP_SET_HASH_IPMARK=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_MAC=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_FO=m +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_IPV6=y +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_OVF=m +CONFIG_IP_VS_PE_SIP=m +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_SCTP=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SH_TAB_BITS=8 +CONFIG_IP_VS_TAB_BITS=12 +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_WRR=m +CONFIG_IRCOMM=m +CONFIG_IRDA=m +CONFIG_IRDA_CACHE_LAST_LSAP=y +# CONFIG_IRDA_DEBUG is not set +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_ULTRA=y +CONFIG_IRLAN=m +CONFIG_IRNET=m +# CONFIG_IRQSOFF_TRACER is not set +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_IRQ_FORCED_THREADING=y +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +CONFIG_IRQ_POLL=y +CONFIG_IRQ_REMAP=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_IRQ_WORK=y +CONFIG_IRTTY_SIR=m +CONFIG_ISA_BUS=y +CONFIG_ISA_BUS_API=y +CONFIG_ISA_DMA_API=y +CONFIG_ISCSI_BOOT_SYSFS=m +CONFIG_ISCSI_IBFT=m +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m +CONFIG_ISCSI_TCP=m +# CONFIG_ISDN is not set +CONFIG_ISI=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_ISL29125=m +CONFIG_ISO9660_FS=m +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_ITCO_WDT=m +CONFIG_ITG3200=m +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBEVF=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_HWMON=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +CONFIG_JFS_STATISTICS=y +CONFIG_JME=m +CONFIG_JOLIET=y +CONFIG_JSA1212=m +CONFIG_JUMP_LABEL=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y +CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_BASE_RELATIVE=y +CONFIG_KARMA_PARTITION=y +# CONFIG_KASAN is not set +# CONFIG_KCOV is not set +CONFIG_KDB_CONTINUE_CATASTROPHIC=0 +CONFIG_KDB_DEFAULT_ENABLE=0x1 +CONFIG_KDB_KEYBOARD=y +CONFIG_KEMPLD_WDT=m +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZ4 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_XZ is not set +CONFIG_KERNFS=y +CONFIG_KEXEC=y +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y +CONFIG_KEXEC_CORE=y +CONFIG_KEXEC_FILE=y +CONFIG_KEXEC_JUMP=y +CONFIG_KEXEC_VERIFY_SIG=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ADP5589=m +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_CROS_EC=m +CONFIG_KEYBOARD_DLINK_DIR685=m +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_LM8333=m +CONFIG_KEYBOARD_MAX7359=m +CONFIG_KEYBOARD_MCS=m +CONFIG_KEYBOARD_MPR121=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_QT1070=m +CONFIG_KEYBOARD_QT2160=m +CONFIG_KEYBOARD_SAMSUNG=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_TCA6416=m +CONFIG_KEYBOARD_TCA8418=m +CONFIG_KEYBOARD_TM2_TOUCHKEY=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYS=y +CONFIG_KEYS_COMPAT=y +CONFIG_KEY_DH_OPERATIONS=y +CONFIG_KGDB=y +CONFIG_KGDB_KDB=y +CONFIG_KGDB_LOW_LEVEL_TRAP=y +CONFIG_KGDB_SERIAL_CONSOLE=y +# CONFIG_KGDB_TESTS is not set +CONFIG_KINGSUN_DONGLE=m +CONFIG_KMX61=m +CONFIG_KPROBES=y +CONFIG_KPROBES_ON_FTRACE=y +# CONFIG_KPROBES_SANITY_TEST is not set +CONFIG_KPROBE_EVENTS=y +CONFIG_KRETPROBES=y +CONFIG_KS0108=m +CONFIG_KS0108_DELAY=2 +CONFIG_KS0108_PORT=0x378 +CONFIG_KS7010=m +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KS959_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KSM=y +CONFIG_KSZ884X_PCI=m +CONFIG_KVM=m +CONFIG_KVM_AMD=m +CONFIG_KVM_ASYNC_PF=y +CONFIG_KVM_COMPAT=y +CONFIG_KVM_DEBUG_FS=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_GUEST=y +CONFIG_KVM_INTEL=m +CONFIG_KVM_MMIO=y +# CONFIG_KVM_MMU_AUDIT is not set +CONFIG_KVM_VFIO=y +CONFIG_KXCJK1013=m +CONFIG_KXSD9=m +CONFIG_KXSD9_I2C=m +CONFIG_KXSD9_SPI=m +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_ETH=m +CONFIG_L2TP_IP=m +CONFIG_L2TP_V3=y +CONFIG_LANMEDIA=m +CONFIG_LAPB=m +CONFIG_LAPBETHER=m +# CONFIG_LATENCYTOP is not set +CONFIG_LATTICE_ECP3_CONFIG=m +# CONFIG_LCD_CLASS_DEVICE is not set +# CONFIG_LDM_DEBUG is not set +CONFIG_LDM_PARTITION=y +# CONFIG_LEDS_APU is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_BLINKM is not set +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y +CONFIG_LEDS_CLASS=m +# CONFIG_LEDS_CLASS_FLASH is not set +# CONFIG_LEDS_CLEVO_MAIL is not set +# CONFIG_LEDS_DA9052 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3533 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_LP5562 is not set +# CONFIG_LEDS_LP8501 is not set +# CONFIG_LEDS_LP8860 is not set +# CONFIG_LEDS_MC13783 is not set +# CONFIG_LEDS_MENF21BMC is not set +# CONFIG_LEDS_MLXCPLD is not set +# CONFIG_LEDS_MT6323 is not set +# CONFIG_LEDS_NIC78BX is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PWM is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +CONFIG_LEDS_TRIGGERS=y +# CONFIG_LEDS_TRIGGER_ACTIVITY is not set +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set +# CONFIG_LEDS_TRIGGER_CAMERA is not set +# CONFIG_LEDS_TRIGGER_CPU is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set +# CONFIG_LEDS_TRIGGER_DISK is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_LEDS_TRIGGER_ONESHOT is not set +# CONFIG_LEDS_TRIGGER_PANIC is not set +# CONFIG_LEDS_TRIGGER_TIMER is not set +# CONFIG_LEDS_TRIGGER_TRANSIENT is not set +CONFIG_LEDS_USER=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LED_TRIGGER_PHY=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +CONFIG_LEGACY_VSYSCALL_EMULATE=y +# CONFIG_LEGACY_VSYSCALL_NATIVE is not set +# CONFIG_LEGACY_VSYSCALL_NONE is not set +# CONFIG_LIB80211 is not set +CONFIG_LIBCRC32C=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_LIBNVDIMM=y +CONFIG_LIDAR_LITE_V2=m +CONFIG_LIQUIDIO=m +CONFIG_LIQUIDIO_VF=m +CONFIG_LITELINK_DONGLE=m +CONFIG_LIVEPATCH=y +# CONFIG_LKDTM is not set +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_LMP91000=m +CONFIG_LNET=m +CONFIG_LNET_MAX_PAYLOAD=1048576 +CONFIG_LNET_SELFTEST=m +CONFIG_LNET_XPRT_IB=m +CONFIG_LOAD_UEFI_KEYS=y +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_LOCKD=m +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_LOCKD_V4=y +CONFIG_LOCKUP_DETECTOR=y +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y +CONFIG_LOCK_DOWN_KERNEL=y +CONFIG_LOCK_SPIN_ON_OWNER=y +# CONFIG_LOCK_STAT is not set +# CONFIG_LOCK_TORTURE_TEST is not set +CONFIG_LOGIG940_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIWHEELS_FF=y +# CONFIG_LOGO is not set +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_LOOPBACK_TARGET=m +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +# CONFIG_LP_CONSOLE is not set +CONFIG_LRU_CACHE=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_LTC2471=m +CONFIG_LTC2485=m +CONFIG_LTC2497=m +CONFIG_LTC2632=m +CONFIG_LTE_GDM724X=m +CONFIG_LTR501=m +# CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK is not set +CONFIG_LUSTRE_FS=m +CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y +CONFIG_LXT_PHY=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_M62332=m +CONFIG_MA600_DONGLE=m +CONFIG_MAC80211=m +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_MESSAGE_TRACING=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_MINSTREL_VHT=y +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_MAC802154=m +CONFIG_MACB=m +CONFIG_MACB_PCI=m +CONFIG_MACB_USE_HWSTAMP=y +CONFIG_MACHZ_WDT=m +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_MACSEC=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_MAC_PARTITION=y +CONFIG_MAG3110=m +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAILBOX=y +CONFIG_MANDATORY_FILE_LOCKING=y +CONFIG_MARVELL_10G_PHY=m +CONFIG_MARVELL_PHY=m +# CONFIG_MATOM is not set +CONFIG_MAX1027=m +CONFIG_MAX11100=m +CONFIG_MAX1118=m +CONFIG_MAX1363=m +CONFIG_MAX30100=m +CONFIG_MAX30102=m +CONFIG_MAX44000=m +CONFIG_MAX517=m +CONFIG_MAX5481=m +CONFIG_MAX5487=m +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MAX9611=m +CONFIG_MAXIM_THERMOCOUPLE=m +CONFIG_MAXSMP=y +CONFIG_MAX_RAW_DEVS=256 +CONFIG_MAY_USE_DEVLINK=m +CONFIG_MC3230=m +CONFIG_MCB=m +CONFIG_MCB_LPC=m +CONFIG_MCB_PCI=m +# CONFIG_MCORE2 is not set +CONFIG_MCP2120_DONGLE=m +CONFIG_MCP320X=m +CONFIG_MCP3422=m +CONFIG_MCP4131=m +CONFIG_MCP4531=m +CONFIG_MCP4725=m +CONFIG_MCP4922=m +CONFIG_MCS_FIR=m +CONFIG_MD=y +CONFIG_MDIO=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MDIO_CAVIUM=m +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_THUNDER=m +CONFIG_MD_AUTODETECT=y +CONFIG_MD_CLUSTER=m +CONFIG_MD_FAULTY=m +CONFIG_MD_LINEAR=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +# CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set +# CONFIG_MEDIA_CAMERA_SUPPORT is not set +# CONFIG_MEDIA_CEC_SUPPORT is not set +# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set +# CONFIG_MEDIA_PCI_SUPPORT is not set +# CONFIG_MEDIA_RADIO_SUPPORT is not set +# CONFIG_MEDIA_SDR_SUPPORT is not set +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMBARRIER=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +# CONFIG_MEMCG_SWAP_ENABLED is not set +CONFIG_MEMORY=y +CONFIG_MEMORY_BALLOON=y +CONFIG_MEMORY_FAILURE=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_PCI=m +CONFIG_MEMSTICK_REALTEK_USB=m +CONFIG_MEMSTICK_TIFM_MS=m +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MEMTEST=y +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_MENF21BMC_WATCHDOG=m +CONFIG_MEN_Z188_ADC=m +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_MFD_88PM800=m +CONFIG_MFD_88PM805=m +CONFIG_MFD_ARIZONA=y +CONFIG_MFD_ARIZONA_I2C=m +CONFIG_MFD_ARIZONA_SPI=m +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m +CONFIG_MFD_BCM590XX=m +CONFIG_MFD_BD9571MWV=m +CONFIG_MFD_CORE=y +CONFIG_MFD_CROS_EC=m +CONFIG_MFD_CROS_EC_I2C=m +CONFIG_MFD_CROS_EC_SPI=m +CONFIG_MFD_CS47L24=y +CONFIG_MFD_DA9052_SPI=y +CONFIG_MFD_DA9062=m +CONFIG_MFD_DA9063=m +CONFIG_MFD_DA9150=m +CONFIG_MFD_DLN2=m +CONFIG_MFD_INTEL_LPSS=m +# CONFIG_MFD_INTEL_LPSS_ACPI is not set +CONFIG_MFD_INTEL_LPSS_PCI=m +CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_LM3533=m +CONFIG_MFD_LP3943=m +CONFIG_MFD_MAX14577=m +CONFIG_MFD_MAX77693=m +CONFIG_MFD_MAX8907=m +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_I2C=m +CONFIG_MFD_MC13XXX_SPI=m +CONFIG_MFD_MENF21BMC=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_PCF50633=m +CONFIG_MFD_RDC321X=m +CONFIG_MFD_RETU=m +CONFIG_MFD_RT5033=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_RTSX_USB=m +CONFIG_MFD_SI476X_CORE=m +CONFIG_MFD_SKY81452=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +CONFIG_MFD_TI_LMU=m +CONFIG_MFD_TI_LP873X=m +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_TPS65086=m +CONFIG_MFD_TPS65912=y +CONFIG_MFD_TPS65912_I2C=m +CONFIG_MFD_TPS65912_SPI=y +CONFIG_MFD_VIPERBOARD=m +CONFIG_MFD_VX855=m +CONFIG_MFD_WL1273_CORE=m +CONFIG_MFD_WM5102=y +CONFIG_MFD_WM5110=y +CONFIG_MFD_WM831X=y +CONFIG_MFD_WM831X_SPI=y +CONFIG_MFD_WM8994=m +CONFIG_MFD_WM8997=y +CONFIG_MFD_WM8998=y +CONFIG_MICREL_KS8995MA=m +CONFIG_MICREL_PHY=m +CONFIG_MICROCHIP_KSZ=m +CONFIG_MICROCHIP_KSZ_SPI_DRIVER=m +CONFIG_MICROCHIP_PHY=m +CONFIG_MICROCODE=y +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_MICROSEMI_PHY=m +CONFIG_MIC_COSM=m +CONFIG_MIGRATE_VMA_HELPER=y +CONFIG_MIGRATION=y +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_MK8 is not set +CONFIG_MKISS=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_CORE_GEN2=y +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_EN_DCB=y +CONFIG_MLX4_INFINIBAND=m +CONFIG_MLX5_ACCEL=y +CONFIG_MLX5_CORE=m +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_IPOIB=y +CONFIG_MLX5_EN_IPSEC=y +CONFIG_MLX5_ESWITCH=y +CONFIG_MLX5_FPGA=y +CONFIG_MLX5_INFINIBAND=m +CONFIG_MLX5_MPFS=y +CONFIG_MLX90614=m +CONFIG_MLXFW=m +CONFIG_MLXSW_CORE=m +CONFIG_MLXSW_CORE_HWMON=y +CONFIG_MLXSW_CORE_THERMAL=y +CONFIG_MLXSW_I2C=m +CONFIG_MLXSW_MINIMAL=m +CONFIG_MLXSW_PCI=m +CONFIG_MLXSW_SPECTRUM=m +CONFIG_MLXSW_SPECTRUM_DCB=y +CONFIG_MLXSW_SWITCHIB=m +CONFIG_MLXSW_SWITCHX2=m +CONFIG_MLX_CPLD_PLATFORM=m +CONFIG_MLX_PLATFORM=m +CONFIG_MMA7455=m +CONFIG_MMA7455_I2C=m +CONFIG_MMA7455_SPI=m +CONFIG_MMA7660=m +CONFIG_MMA8452=m +CONFIG_MMA9551=m +CONFIG_MMA9551_CORE=m +CONFIG_MMA9553=m +CONFIG_MMC=y +CONFIG_MMC35240=m +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_CB710=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_MTK=m +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_REALTEK_USB=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_ACPI=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_SDHCI_XENON=m +CONFIG_MMC_SPI=m +# CONFIG_MMC_TEST is not set +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_TOSHIBA_PCI=m +CONFIG_MMC_USDHI6ROL0=m +CONFIG_MMC_USHC=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_WBSD=m +CONFIG_MMIOTRACE=y +# CONFIG_MMIOTRACE_TEST is not set +CONFIG_MMU=y +CONFIG_MMU_NOTIFIER=y +CONFIG_MODIFY_LDT_SYSCALL=y +CONFIG_MODULES=y +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_MODULES_USE_ELF_RELA=y +# CONFIG_MODULE_COMPRESS is not set +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_SIG=y +CONFIG_MODULE_SIG_ALL=y +# CONFIG_MODULE_SIG_FORCE is not set +CONFIG_MODULE_SIG_HASH="sha512" +CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" +# CONFIG_MODULE_SIG_SHA1 is not set +# CONFIG_MODULE_SIG_SHA224 is not set +# CONFIG_MODULE_SIG_SHA256 is not set +# CONFIG_MODULE_SIG_SHA384 is not set +CONFIG_MODULE_SIG_SHA512=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +CONFIG_MOST=m +CONFIG_MOSTCORE=m +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_MPILIB=y +CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m +CONFIG_MPL3115=m +CONFIG_MPLS=y +CONFIG_MPLS_IPTUNNEL=m +CONFIG_MPLS_ROUTING=m +# CONFIG_MPSC is not set +CONFIG_MPU3050=m +CONFIG_MPU3050_I2C=m +CONFIG_MQ_IOSCHED_DEADLINE=m +CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MRP=m +CONFIG_MS5611=m +CONFIG_MS5611_I2C=m +CONFIG_MS5611_SPI=m +CONFIG_MS5637=m +CONFIG_MSDOS_FS=m +CONFIG_MSDOS_PARTITION=y +# CONFIG_MSI_LAPTOP is not set +CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m +# CONFIG_MTD is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_MULTIUSER=y +CONFIG_MUSB_PIO_ONLY=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_MVMDIO=m +CONFIG_MWAVE=m +CONFIG_MXC4005=m +CONFIG_MXC6255=m +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_NAMESPACES=y +CONFIG_NATIONAL_PHY=m +CONFIG_NATSEMI=m +CONFIG_NAU7802=m +CONFIG_NCPFS_EXTRAS=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_PACKET_SIGNING=y +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NCPFS_STRONG=y +CONFIG_NCP_FS=m +CONFIG_ND_BLK=m +CONFIG_ND_BTT=m +CONFIG_ND_CLAIM=y +CONFIG_ND_PFN=m +CONFIG_NE2K_PCI=m +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NET=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETDEVICES=y +# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_NAT=m +CONFIG_NETFILTER_XT_SET=m +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NETMAP=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETLABEL=y +CONFIG_NETLINK_DIAG=m +CONFIG_NETPOLL=y +CONFIG_NETROM=m +CONFIG_NETWORK_FILESYSTEMS=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NETXEN_NIC=m +CONFIG_NET_9P=m +# CONFIG_NET_9P_DEBUG is not set +CONFIG_NET_9P_RDMA=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_9P_XEN=m +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_ACT_GACT=m +# CONFIG_NET_ACT_IFE is not set +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_SAMPLE=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_SKBMOD=m +CONFIG_NET_ACT_TUNNEL_KEY=m +CONFIG_NET_ACT_VLAN=m +CONFIG_NET_CADENCE=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_BPF=m +CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_FLOWER=m +CONFIG_NET_CLS_FW=m +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_CLS_MATCHALL=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_CORE=y +CONFIG_NET_DCCPPROBE=m +CONFIG_NET_DEVLINK=m +CONFIG_NET_DROP_MONITOR=m +CONFIG_NET_DSA=m +# CONFIG_NET_DSA_LOOP is not set +CONFIG_NET_DSA_MT7530=m +CONFIG_NET_DSA_MV88E6060=m +CONFIG_NET_DSA_MV88E6XXX=m +CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y +CONFIG_NET_DSA_QCA8K=m +CONFIG_NET_DSA_SMSC_LAN9303=m +CONFIG_NET_DSA_SMSC_LAN9303_I2C=m +CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m +CONFIG_NET_DSA_TAG_BRCM=y +CONFIG_NET_DSA_TAG_BRCM_PREPEND=y +CONFIG_NET_DSA_TAG_DSA=y +CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_KSZ=y +CONFIG_NET_DSA_TAG_LAN9303=y +CONFIG_NET_DSA_TAG_MTK=y +CONFIG_NET_DSA_TAG_QCA=y +CONFIG_NET_DSA_TAG_TRAILER=y +CONFIG_NET_EGRESS=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CANID=m +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_IPSET=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_FC=y +CONFIG_NET_FLOW_LIMIT=y +CONFIG_NET_FOU=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_NET_IFE=m +CONFIG_NET_INGRESS=y +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPIP=m +CONFIG_NET_IPVTI=m +CONFIG_NET_IP_TUNNEL=m +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_NET_L3_MASTER_DEV=y +CONFIG_NET_MPLS_GSO=m +CONFIG_NET_NCSI=y +CONFIG_NET_NS=y +CONFIG_NET_NSH=m +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_PKTGEN=m +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_NET_SB1000=m +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_CODEL=m +# CONFIG_NET_SCH_DEFAULT is not set +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_FIFO=y +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_PIE=m +CONFIG_NET_SCH_PLUG=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCTPPROBE=m +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_TCPPROBE=m +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TULIP=y +CONFIG_NET_UDP_TUNNEL=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_8390=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALACRITECH=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMAZON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_AQUANTIA=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_AURORA=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MELLANOX=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MICROCHIP=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NETRONOME=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_SOLARFLARE=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_SYNOPSYS=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NET_VRF=m +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFC_DIGITAL=m +CONFIG_NFC_FDP=m +CONFIG_NFC_FDP_I2C=m +CONFIG_NFC_HCI=m +CONFIG_NFC_MEI_PHY=m +CONFIG_NFC_MICROREAD=m +CONFIG_NFC_MICROREAD_I2C=m +CONFIG_NFC_MICROREAD_MEI=m +CONFIG_NFC_MRVL=m +CONFIG_NFC_MRVL_I2C=m +CONFIG_NFC_MRVL_SPI=m +CONFIG_NFC_MRVL_UART=m +CONFIG_NFC_MRVL_USB=m +CONFIG_NFC_NCI=m +CONFIG_NFC_NCI_SPI=m +CONFIG_NFC_NCI_UART=m +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m +CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_I2C=m +CONFIG_NFC_PN533_USB=m +CONFIG_NFC_PN544=m +CONFIG_NFC_PN544_I2C=m +CONFIG_NFC_PN544_MEI=m +CONFIG_NFC_PORT100=m +CONFIG_NFC_S3FWRN5=m +CONFIG_NFC_S3FWRN5_I2C=m +CONFIG_NFC_SHDLC=y +CONFIG_NFC_SIM=m +CONFIG_NFC_ST21NFCA=m +CONFIG_NFC_ST21NFCA_I2C=m +CONFIG_NFC_ST95HF=m +CONFIG_NFC_ST_NCI=m +CONFIG_NFC_ST_NCI_I2C=m +CONFIG_NFC_ST_NCI_SPI=m +CONFIG_NFP=m +CONFIG_NFP_APP_FLOWER=y +# CONFIG_NFP_DEBUG is not set +CONFIG_NFSD=m +CONFIG_NFSD_BLOCKLAYOUT=y +# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_FLEXFILELAYOUT=y +CONFIG_NFSD_PNFS=y +CONFIG_NFSD_SCSILAYOUT=y +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_DEBUG=y +CONFIG_NFS_FS=m +CONFIG_NFS_FSCACHE=y +CONFIG_NFS_SWAP=y +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_V2=m +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_2=y +CONFIG_NFS_V4_SECURITY_LABEL=y +CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_CT=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NFT_FIB_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_HASH=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_LOG=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_META=m +CONFIG_NFT_NAT=m +CONFIG_NFT_NUMGEN=m +CONFIG_NFT_OBJREF=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_REDIR_IPV4=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_RT=m +CONFIG_NFT_SET_BITMAP=m +CONFIG_NFT_SET_HASH=m +CONFIG_NFT_SET_RBTREE=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_BROADCAST=m +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_LABELS=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +# CONFIG_NF_CONNTRACK_PROCFS is not set +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NF_CT_NETLINK_TIMEOUT=m +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_DUP_IPV4=m +CONFIG_NF_DUP_IPV6=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NF_LOG_ARP=m +CONFIG_NF_LOG_BRIDGE=m +CONFIG_NF_LOG_COMMON=m +CONFIG_NF_LOG_IPV4=m +CONFIG_NF_LOG_IPV6=m +CONFIG_NF_LOG_NETDEV=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_IPV4=m +CONFIG_NF_NAT_IPV6=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_MASQUERADE_IPV4=m +CONFIG_NF_NAT_MASQUERADE_IPV6=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_REDIRECT=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_REJECT_IPV6=m +CONFIG_NF_SOCKET_IPV4=m +CONFIG_NF_SOCKET_IPV6=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_ARP=m +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NF_TABLES_INET=m +CONFIG_NF_TABLES_IPV4=m +CONFIG_NF_TABLES_IPV6=m +CONFIG_NF_TABLES_NETDEV=m +CONFIG_NI903X_WDT=m +CONFIG_NIC7018_WDT=m +CONFIG_NILFS2_FS=m +CONFIG_NIU=m +# CONFIG_NL80211_TESTMODE is not set +CONFIG_NLATTR=y +CONFIG_NLMON=m +CONFIG_NLS=y +CONFIG_NLS_ASCII=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m +CONFIG_NLS_UTF8=m +CONFIG_NODES_SHIFT=10 +CONFIG_NODES_SPAN_OTHER_NODES=y +CONFIG_NOP_TRACER=y +CONFIG_NOP_USB_XCEIV=m +CONFIG_NOTIFIER_ERROR_INJECTION=m +CONFIG_NOZOMI=m +CONFIG_NO_BOOTMEM=y +CONFIG_NO_HZ=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ_IDLE=y +CONFIG_NR_CPUS=8192 +CONFIG_NS83820=m +CONFIG_NSC_FIR=m +CONFIG_NTB=m +# CONFIG_NTB_AMD is not set +CONFIG_NTB_IDT=m +CONFIG_NTB_INTEL=m +CONFIG_NTB_NETDEV=m +CONFIG_NTB_PERF=m +CONFIG_NTB_PINGPONG=m +CONFIG_NTB_SWITCHTEC=m +CONFIG_NTB_TOOL=m +CONFIG_NTB_TRANSPORT=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_FS=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +# CONFIG_NUMA_EMU is not set +CONFIG_NVDIMM_DAX=y +CONFIG_NVDIMM_PFN=y +CONFIG_NVM=y +CONFIG_NVMEM=y +CONFIG_NVME_CORE=y +CONFIG_NVME_FABRICS=m +CONFIG_NVME_FC=m +CONFIG_NVME_MULTIPATH=y +CONFIG_NVME_RDMA=m +CONFIG_NVME_TARGET=m +CONFIG_NVME_TARGET_FC=m +# CONFIG_NVME_TARGET_FCLOOP is not set +CONFIG_NVME_TARGET_LOOP=m +CONFIG_NVME_TARGET_RDMA=m +# CONFIG_NVM_DEBUG is not set +CONFIG_NVM_PBLK=m +CONFIG_NVM_RRPC=m +CONFIG_NVRAM=m +CONFIG_NV_TCO=m +CONFIG_N_GSM=m +CONFIG_N_HDLC=m +# CONFIG_OCFS2_DEBUG_FS is not set +CONFIG_OCFS2_DEBUG_MASKLOG=y +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +# CONFIG_OF is not set +CONFIG_OID_REGISTRY=y +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OMFS_FS=m +CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GENEVE=m +CONFIG_OPENVSWITCH_GRE=m +CONFIG_OPENVSWITCH_VXLAN=m +CONFIG_OPROFILE=m +# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set +CONFIG_OPROFILE_NMI_TIMER=y +CONFIG_OPT3001=m +CONFIG_OPTIMIZE_INLINING=y +CONFIG_OPTPROBES=y +CONFIG_ORANGEFS_FS=m +CONFIG_ORE=m +CONFIG_OSF_PARTITION=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_INDEX is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_PA12203001=m +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=m +CONFIG_PADATA=y +CONFIG_PAGE_COUNTER=y +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_POISONING is not set +CONFIG_PAGE_TABLE_ISOLATION=y +# CONFIG_PANASONIC_LAPTOP is not set +CONFIG_PANEL=m +# CONFIG_PANEL_CHANGE_MESSAGE is not set +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_PANTHERLORD_FF=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_PARIDE=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_PT=m +CONFIG_PARMAN=m +CONFIG_PARPORT=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_AX88796=m +# CONFIG_PARPORT_GSC is not set +CONFIG_PARPORT_NOT_PC=y +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_SERIAL=m +CONFIG_PARTITION_ADVANCED=y +CONFIG_PATA_ACPI=m +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD640_PCI=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CYPRESS=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +# CONFIG_PATA_HPT3X3_DMA is not set +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_LEGACY=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +CONFIG_PATA_NS87410=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_OPTI=m +CONFIG_PATA_OPTIDMA=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_PLATFORM=m +CONFIG_PATA_RADISYS=m +CONFIG_PATA_RDC=m +CONFIG_PATA_RZ1000=m +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=y +CONFIG_PATA_TOSHIBA=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m +CONFIG_PC104=y +CONFIG_PC300TOO=m +CONFIG_PC87413_WDT=m +CONFIG_PCC=y +CONFIG_PCCARD=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_PCI=y +CONFIG_PCI200SYN=m +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEBUG=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_PERFORMANCE is not set +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +CONFIG_PCIEPORTBUS=y +CONFIG_PCIE_DPC=y +CONFIG_PCIE_DW=y +CONFIG_PCIE_DW_HOST=y +CONFIG_PCIE_DW_PLAT=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIE_PME=y +CONFIG_PCIE_PTM=y +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_ATS=y +CONFIG_PCI_BUS_ADDR_T_64BIT=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_PCI_EPF_TEST is not set +CONFIG_PCI_HYPERV=m +CONFIG_PCI_IOV=y +CONFIG_PCI_LABEL=y +CONFIG_PCI_LOCKLESS_CONFIG=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_MSI=y +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PCI_REALLOC_ENABLE_AUTO=y +CONFIG_PCI_STUB=m +CONFIG_PCI_SW_SWITCHTEC=m +CONFIG_PCI_XEN=y +# CONFIG_PCMCIA is not set +CONFIG_PCMCIA_XIRCOM=m +CONFIG_PCNET32=m +CONFIG_PCSPKR_PLATFORM=y +CONFIG_PDA_POWER=m +CONFIG_PDC_ADMA=m +# CONFIG_PERCPU_STATS is not set +# CONFIG_PERCPU_TEST is not set +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_EVENTS_AMD_POWER is not set +CONFIG_PERF_EVENTS_INTEL_CSTATE=m +CONFIG_PERF_EVENTS_INTEL_RAPL=m +CONFIG_PERF_EVENTS_INTEL_UNCORE=y +CONFIG_PERSISTENT_KEYRINGS=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_ALIGN=0x200000 +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_PHY_CPCAP_USB=m +# CONFIG_PHY_EXYNOS4210_USB2 is not set +# CONFIG_PHY_EXYNOS4X12_USB2 is not set +# CONFIG_PHY_EXYNOS5250_USB2 is not set +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PHY_QCOM_USB_HS=m +CONFIG_PHY_QCOM_USB_HSIC=m +CONFIG_PHY_SAMSUNG_USB2=m +CONFIG_PHY_TUSB1210=m +CONFIG_PI433=m +CONFIG_PID_NS=y +# CONFIG_PINCTRL is not set +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_PKCS7_TEST_KEY=m +CONFIG_PLIP=m +CONFIG_PM=y +CONFIG_PMBUS=m +CONFIG_PMC_ATOM=y +CONFIG_PMIC_DA9052=y +# CONFIG_PMIC_OPREGION is not set +CONFIG_PM_ADVANCED_DEBUG=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_CLK=y +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_NOTIFIER_ERROR_INJECT=m +CONFIG_PM_OPP=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_DEBUG=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_TRACE=y +CONFIG_PM_TRACE_RTC=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_PNP=y +CONFIG_PNPACPI=y +# CONFIG_PNP_DEBUG_MESSAGES is not set +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_POSIX_TIMERS=y +# CONFIG_POWERCAP is not set +CONFIG_POWER_AVS=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_RESTART=y +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PPDEV=m +CONFIG_PPP=y +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPS=m +CONFIG_PPS_CLIENT_GPIO=m +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_PPS_CLIENT_PARPORT=m +# CONFIG_PPS_DEBUG is not set +CONFIG_PPTP=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPTIRQ_EVENTS is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_PRINTER=m +CONFIG_PRINTK=y +CONFIG_PRINTK_NMI=y +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 +CONFIG_PRINTK_TIME=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_PROBE_EVENTS=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_PROC_CHILDREN=y +CONFIG_PROC_EVENTS=y +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_VMCORE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +CONFIG_PROFILING=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_PROVE_RCU is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +CONFIG_PSAMPLE=m +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_FTRACE is not set +# CONFIG_PSTORE_LZ4_COMPRESS is not set +# CONFIG_PSTORE_LZO_COMPRESS is not set +# CONFIG_PSTORE_PMSG is not set +CONFIG_PSTORE_RAM=m +CONFIG_PSTORE_ZLIB_COMPRESS=y +CONFIG_PTP_1588_CLOCK=m +CONFIG_PTP_1588_CLOCK_KVM=m +CONFIG_PUNIT_ATOM_DEBUG=m +CONFIG_PVPANIC=m +CONFIG_PWM=y +CONFIG_PWM_CROS_EC=m +CONFIG_PWM_LP3943=m +CONFIG_PWM_LPSS=m +CONFIG_PWM_LPSS_PCI=m +CONFIG_PWM_LPSS_PLATFORM=m +CONFIG_PWM_PCA9685=m +CONFIG_PWM_SYSFS=y +CONFIG_QCOM_EMAC=m +CONFIG_QCOM_HIDMA=m +CONFIG_QCOM_HIDMA_MGMT=m +CONFIG_QCOM_SPMI_IADC=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_VADC_COMMON=m +CONFIG_QED=m +CONFIG_QEDE=m +CONFIG_QEDF=m +CONFIG_QEDI=m +CONFIG_QED_FCOE=y +CONFIG_QED_ISCSI=y +CONFIG_QED_LL2=y +CONFIG_QED_OOO=y +CONFIG_QED_RDMA=y +CONFIG_QED_SRIOV=y +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLCNIC_DCB=y +CONFIG_QLCNIC_HWMON=y +CONFIG_QLCNIC_SRIOV=y +CONFIG_QLGE=m +CONFIG_QNX4FS_FS=m +# CONFIG_QNX6FS_DEBUG is not set +CONFIG_QNX6FS_FS=m +CONFIG_QSEMI_PHY=m +# CONFIG_QUEUED_LOCK_STAT is not set +CONFIG_QUEUED_RWLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_QUOTA=y +CONFIG_QUOTACTL=y +CONFIG_QUOTACTL_COMPAT=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QUOTA_TREE=m +CONFIG_R3964=m +CONFIG_R6040=m +CONFIG_R8169=m +CONFIG_R8822BE=m +CONFIG_RADIX_TREE_MULTIORDER=y +CONFIG_RAID6_PQ=m +CONFIG_RAID_ATTRS=m +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_RANDOMIZE_BASE=y +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_RAPIDIO=y +CONFIG_RAPIDIO_CHMAN=m +CONFIG_RAPIDIO_CPS_GEN2=m +CONFIG_RAPIDIO_CPS_XX=m +# CONFIG_RAPIDIO_DEBUG is not set +CONFIG_RAPIDIO_DISC_TIMEOUT=30 +CONFIG_RAPIDIO_DMA_ENGINE=y +# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set +CONFIG_RAPIDIO_ENUM_BASIC=m +CONFIG_RAPIDIO_MPORT_CDEV=m +CONFIG_RAPIDIO_RXS_GEN3=m +CONFIG_RAPIDIO_TSI568=m +CONFIG_RAPIDIO_TSI57X=m +CONFIG_RAPIDIO_TSI721=m +CONFIG_RAS=y +CONFIG_RAS_CEC=y +CONFIG_RATIONAL=y +CONFIG_RAW_DRIVER=m +# CONFIG_RBTREE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_RCU_EQS_DEBUG is not set +# CONFIG_RCU_EXPERT is not set +CONFIG_RCU_NEED_SEGCBLIST=y +CONFIG_RCU_PERF_TEST=m +CONFIG_RCU_STALL_COMMON=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_RC_CORE is not set +CONFIG_RDMA_RXE=m +CONFIG_RDS=m +# CONFIG_RDS_DEBUG is not set +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +CONFIG_RD_BZIP2=y +CONFIG_RD_GZIP=y +CONFIG_RD_LZ4=y +CONFIG_RD_LZMA=y +CONFIG_RD_LZO=y +CONFIG_RD_XZ=y +# CONFIG_READABLE_ASM is not set +CONFIG_REALTEK_AUTOPM=y +CONFIG_REALTEK_PHY=m +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_REED_SOLOMON_ENC8=y +# CONFIG_REFCOUNT_FULL is not set +CONFIG_REGMAP=y +CONFIG_REGMAP_HWSPINLOCK=y +CONFIG_REGMAP_I2C=m +CONFIG_REGMAP_IRQ=y +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_SPI=y +CONFIG_REGMAP_SPMI=m +CONFIG_REGULATOR=y +CONFIG_REGULATOR_88PM800=m +CONFIG_REGULATOR_ACT8865=m +CONFIG_REGULATOR_AD5398=m +CONFIG_REGULATOR_ANATOP=m +CONFIG_REGULATOR_AXP20X=m +CONFIG_REGULATOR_BCM590XX=m +CONFIG_REGULATOR_BD9571MWV=m +CONFIG_REGULATOR_DA9052=m +CONFIG_REGULATOR_DA9062=m +CONFIG_REGULATOR_DA9063=m +CONFIG_REGULATOR_DA9210=m +CONFIG_REGULATOR_DA9211=m +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FAN53555=m +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_ISL6271A=m +CONFIG_REGULATOR_ISL9305=m +CONFIG_REGULATOR_LM363X=m +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_LP3972=m +CONFIG_REGULATOR_LP872X=m +CONFIG_REGULATOR_LP8755=m +CONFIG_REGULATOR_LTC3589=m +CONFIG_REGULATOR_LTC3676=m +CONFIG_REGULATOR_MAX14577=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX77693=m +CONFIG_REGULATOR_MAX8649=m +CONFIG_REGULATOR_MAX8660=m +CONFIG_REGULATOR_MAX8907=m +CONFIG_REGULATOR_MAX8952=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_MC13892=m +CONFIG_REGULATOR_MC13XXX_CORE=m +CONFIG_REGULATOR_MT6311=m +CONFIG_REGULATOR_MT6323=m +CONFIG_REGULATOR_MT6397=m +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_PFUZE100=m +CONFIG_REGULATOR_PV88060=m +CONFIG_REGULATOR_PV88080=m +CONFIG_REGULATOR_PV88090=m +CONFIG_REGULATOR_PWM=m +CONFIG_REGULATOR_QCOM_SPMI=m +CONFIG_REGULATOR_RT5033=m +CONFIG_REGULATOR_SKY81452=m +CONFIG_REGULATOR_TPS51632=m +CONFIG_REGULATOR_TPS6105X=m +CONFIG_REGULATOR_TPS62360=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65086=m +CONFIG_REGULATOR_TPS6524X=m +CONFIG_REGULATOR_TPS65912=m +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8994=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_FS=m +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_REISERFS_FS_XATTR=y +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_RELAY=y +CONFIG_RELOCATABLE=y +CONFIG_REMOTEPROC=m +CONFIG_RENESAS_PHY=m +# CONFIG_RESET_ATH79 is not set +CONFIG_RESET_ATTACK_MITIGATION=y +# CONFIG_RESET_AXS10X is not set +# CONFIG_RESET_BERLIN is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_IMX7 is not set +# CONFIG_RESET_LANTIQ is not set +# CONFIG_RESET_LPC18XX is not set +# CONFIG_RESET_MESON is not set +# CONFIG_RESET_PISTACHIO is not set +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_SUNXI is not set +# CONFIG_RESET_TEGRA_BPMP is not set +CONFIG_RESET_TI_SYSCON=m +# CONFIG_RESET_ZYNQ is not set +CONFIG_RETPOLINE=y +CONFIG_RETU_WATCHDOG=m +CONFIG_RFD77402=m +CONFIG_RFKILL=y +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFS_ACCEL=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +CONFIG_RIONET=m +CONFIG_RIONET_RX_SIZE=128 +CONFIG_RIONET_TX_SIZE=128 +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_CORE=m +CONFIG_RMI4_F03=y +CONFIG_RMI4_F03_SERIO=m +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y +CONFIG_RMI4_F34=y +CONFIG_RMI4_F55=y +CONFIG_RMI4_I2C=m +CONFIG_RMI4_SMB=m +CONFIG_RMI4_SPI=m +CONFIG_RMNET=m +CONFIG_ROCKCHIP_PHY=m +CONFIG_ROCKER=m +CONFIG_ROCKETPORT=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROSE=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RPMSG=m +CONFIG_RPMSG_CHAR=m +CONFIG_RPMSG_QCOM_GLINK_NATIVE=m +CONFIG_RPMSG_QCOM_GLINK_RPM=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RPR0521=m +CONFIG_RPS=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_DRV_88PM80X=m +CONFIG_RTC_DRV_ABB5ZES3=m +CONFIG_RTC_DRV_ABX80X=m +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_DA9052=m +CONFIG_RTC_DRV_DA9063=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1302=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_CENTURY=y +CONFIG_RTC_DRV_DS1307_HWMON=y +CONFIG_RTC_DRV_DS1343=m +CONFIG_RTC_DRV_DS1347=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1374_WDT=y +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS1685=y +CONFIG_RTC_DRV_DS1685_FAMILY=m +# CONFIG_RTC_DRV_DS1689 is not set +# CONFIG_RTC_DRV_DS17285 is not set +CONFIG_RTC_DRV_DS1742=m +# CONFIG_RTC_DRV_DS17485 is not set +# CONFIG_RTC_DRV_DS17885 is not set +CONFIG_RTC_DRV_DS2404=m +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_DS3232_HWMON=y +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_FTRTC010=m +CONFIG_RTC_DRV_HID_SENSOR_TIME=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_M41T93=m +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_MAX6916=m +CONFIG_RTC_DRV_MAX8907=m +CONFIG_RTC_DRV_MC13XXX=m +CONFIG_RTC_DRV_MCP795=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_MT6397=m +CONFIG_RTC_DRV_PCAP=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y +CONFIG_RTC_DRV_RV8803=m +CONFIG_RTC_DRV_RX4581=m +CONFIG_RTC_DRV_RX6110=m +CONFIG_RTC_DRV_RX8010=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_STK17TA8=m +# CONFIG_RTC_DRV_TEST is not set +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_X1205=m +# CONFIG_RTC_DS1685_PROC_REGS is not set +# CONFIG_RTC_DS1685_SYSFS_REGS is not set +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_I2C_AND_SPI=m +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y +CONFIG_RTC_NVMEM=y +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +CONFIG_RTLHALMAC_ST=m +CONFIG_RTLPHYDM_ST=m +CONFIG_RTLWIFI_DEBUG_ST=y +CONFIG_RTS5208=m +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_RT_MUTEXES=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_RXKAD=y +CONFIG_S2IO=m +# CONFIG_SAMPLES is not set +# CONFIG_SAMSUNG_LAPTOP is not set +# CONFIG_SAMSUNG_Q10 is not set +# CONFIG_SATA_ACARD_AHCI is not set +CONFIG_SATA_AHCI=m +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_SATA_DWC=m +# CONFIG_SATA_DWC_DEBUG is not set +CONFIG_SATA_DWC_OLD_DMA=y +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +CONFIG_SATA_PMP=y +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_ZPODD is not set +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_SBITMAP=y +CONFIG_SBNI=m +# CONFIG_SBNI_MULTILINE is not set +CONFIG_SC1200_WDT=m +CONFIG_SC92031=m +CONFIG_SCA3000=m +CONFIG_SCHEDSTATS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCHED_INFO=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_MC_PRIO=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCHED_SMT=y +CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_SCHED_TRACER=y +CONFIG_SCIF=m +CONFIG_SCIF_BUS=m +CONFIG_SCSI=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FLASHPOINT=y +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_IMM=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPR=m +CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_IPR_TRACE=y +CONFIG_SCSI_IPS=m +CONFIG_SCSI_ISCI=m +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SCSI_MOD=y +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS=m +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_NETLINK=y +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_PROC_FS=y +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SMARTPQI=m +CONFIG_SCSI_SNIC=m +# CONFIG_SCSI_SNIC_DEBUG_FS is not set +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_UFSHCD_PCI=m +CONFIG_SCSI_UFSHCD_PLATFORM=m +CONFIG_SCSI_UFS_DWC_TC_PCI=m +CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m +CONFIG_SCSI_VIRTIO=m +CONFIG_SCSI_WD719X=m +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +CONFIG_SDIO_UART=m +# CONFIG_SDMA_VERBOSITY is not set +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +CONFIG_SECONDARY_TRUSTED_KEYRING=y +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +# CONFIG_SECURITY_APPARMOR_DEBUG is not set +CONFIG_SECURITY_APPARMOR_HASH=y +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY_INFINIBAND=y +# CONFIG_SECURITY_LOADPIN is not set +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_SECURITY_SELINUX_DEVELOP=y +# CONFIG_SECURITY_SELINUX_DISABLE is not set +CONFIG_SECURITY_SMACK=y +CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y +# CONFIG_SECURITY_SMACK_BRINGUP is not set +CONFIG_SECURITY_SMACK_NETFILTER=y +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init" +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +# CONFIG_SECURITY_WRITABLE_HOOKS is not set +CONFIG_SECURITY_YAMA=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_AD7314=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADC128D818=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM1275=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADS1015=m +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_ADT7310=m +CONFIG_SENSORS_ADT7410=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_ADT7X10=m +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_APDS990X=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_ASPEED=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_DA9052_ADC=m +CONFIG_SENSORS_DELL_SMM=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_EMC1403=m +CONFIG_SENSORS_EMC2103=m +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_FTSTEUTATES=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +# CONFIG_SENSORS_HDAPS is not set +CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m +CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IBM_CFFPS=m +CONFIG_SENSORS_IIO_HWMON=m +CONFIG_SENSORS_INA209=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_SENSORS_IR35221=m +CONFIG_SENSORS_ISL29018=m +CONFIG_SENSORS_ISL29028=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_JC42=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_LINEAGE=m +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_SENSORS_LIS3_I2C=m +CONFIG_SENSORS_LM25066=m +CONFIG_SENSORS_LM3533=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LM95234=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LM95245=m +CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC2978=m +CONFIG_SENSORS_LTC2978_REGULATOR=y +CONFIG_SENSORS_LTC2990=m +CONFIG_SENSORS_LTC3815=m +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4222=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC4260=m +CONFIG_SENSORS_LTC4261=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX16064=m +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX1668=m +CONFIG_SENSORS_MAX197=m +CONFIG_SENSORS_MAX20751=m +CONFIG_SENSORS_MAX31722=m +CONFIG_SENSORS_MAX31785=m +CONFIG_SENSORS_MAX31790=m +CONFIG_SENSORS_MAX34440=m +CONFIG_SENSORS_MAX6621=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX6697=m +CONFIG_SENSORS_MAX8688=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_MENF21BMC_HWMON=m +CONFIG_SENSORS_NCT6683=m +CONFIG_SENSORS_NCT6775=m +CONFIG_SENSORS_NCT7802=m +CONFIG_SENSORS_NCT7904=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_PMBUS=m +CONFIG_SENSORS_POWR1220=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SHT3x=m +CONFIG_SENSORS_SHTC1=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMM665=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_STTS751=m +CONFIG_SENSORS_TC654=m +CONFIG_SENSORS_TC74=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP103=m +CONFIG_SENSORS_TMP108=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_TPS40422=m +CONFIG_SENSORS_TPS53679=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_TSL2563=m +CONFIG_SENSORS_UCD9000=m +CONFIG_SENSORS_UCD9200=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_XGENE=m +CONFIG_SENSORS_ZL6100=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_DW=m +CONFIG_SERIAL_8250_EXAR=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_FINTEK=y +# CONFIG_SERIAL_8250_FSL is not set +CONFIG_SERIAL_8250_LPSS=m +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_MEN_MCB=m +CONFIG_SERIAL_8250_MID=m +CONFIG_SERIAL_8250_MOXA=m +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_RT288X=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 +CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_ARC_NR_PORTS=1 +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_IPOCTAL=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_KGDB_NMI=y +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_MAX310X=y +CONFIG_SERIAL_MEN_Z135=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_RP2_NR_UARTS=32 +CONFIG_SERIAL_SC16IS7XX=m +CONFIG_SERIAL_SC16IS7XX_CORE=m +CONFIG_SERIAL_SC16IS7XX_I2C=y +CONFIG_SERIAL_SC16IS7XX_SPI=y +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIAL_SCCNXP_CONSOLE=y +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_UARTLITE_NR_UARTS=1 +CONFIG_SERIO=y +CONFIG_SERIO_ALTERA_PS2=m +CONFIG_SERIO_ARC_PS2=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_PS2MULT=m +CONFIG_SERIO_RAW=m +CONFIG_SERIO_SERPORT=m +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SFC_MCDI_LOGGING=y +CONFIG_SFC_MCDI_MON=y +CONFIG_SFC_SRIOV=y +CONFIG_SFI=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +CONFIG_SG_POOL=y +# CONFIG_SG_SPLIT is not set +CONFIG_SHMEM=y +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +CONFIG_SI1145=m +CONFIG_SI7005=m +CONFIG_SI7020=m +CONFIG_SIGMATEL_FIR=m +CONFIG_SIGNALFD=y +CONFIG_SIGNATURE=y +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +CONFIG_SIS190=m +CONFIG_SIS900=m +CONFIG_SKFP=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKGE_GENESIS=y +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +# CONFIG_SLAB is not set +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_MERGE_DEFAULT=y +CONFIG_SLHC=y +CONFIG_SLICOSS=m +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_SLIP_SMART=y +# CONFIG_SLOB is not set +CONFIG_SLUB=y +CONFIG_SLUB_CPU_PARTIAL=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +CONFIG_SLUB_MEMCG_SYSFS_ON=y +# CONFIG_SLUB_STATS is not set +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_SMC=m +CONFIG_SMC_DIAG=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_SMP=y +CONFIG_SMSC37B787_WDT=m +CONFIG_SMSC911X=m +# CONFIG_SMSC911X_ARCH_HOOKS is not set +CONFIG_SMSC9420=m +CONFIG_SMSC_PHY=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_SOC_TI=y +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SONY_FF=y +# CONFIG_SONY_LAPTOP is not set +# CONFIG_SOUND is not set +CONFIG_SP5100_TCO=m +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSE_IRQ=y +# CONFIG_SPEAKUP is not set +CONFIG_SPI=y +CONFIG_SPI_ALTERA=m +CONFIG_SPI_AXI_SPI_ENGINE=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +CONFIG_SPI_CADENCE=m +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DLN2=m +CONFIG_SPI_DW_MID_DMA=y +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_LOOPBACK_TEST=m +CONFIG_SPI_MASTER=y +CONFIG_SPI_PXA2XX=m +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_SPI_ROCKCHIP is not set +CONFIG_SPI_SC18IS602=m +CONFIG_SPI_SLAVE=y +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m +CONFIG_SPI_SLAVE_TIME=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPI_XCOMM=m +# CONFIG_SPI_XILINX is not set +CONFIG_SPI_ZYNQMP_GQSPI=m +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SPMI=m +CONFIG_SQUASHFS=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_EMBEDDED is not set +# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_SRAM=y +CONFIG_SRCU=y +CONFIG_SRF08=m +CONFIG_SSB=m +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +# CONFIG_SSB_SILENT is not set +CONFIG_STACKTRACE=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_STACK_TRACER=y +CONFIG_STACK_VALIDATION=y +CONFIG_STAGING=y +CONFIG_STAGING_MEDIA=y +# CONFIG_STANDALONE is not set +# CONFIG_STATIC_KEYS_SELFTEST is not set +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_STE10XP=m +CONFIG_STK3310=m +CONFIG_STK8312=m +CONFIG_STK8BA50=m +CONFIG_STM=m +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_PCI is not set +CONFIG_STMMAC_PLATFORM=m +CONFIG_STM_DUMMY=m +CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_FTRACE=m +CONFIG_STM_SOURCE_HEARTBEAT=m +CONFIG_STP=m +CONFIG_STREAM_PARSER=y +CONFIG_STRICT_DEVMEM=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_STRICT_MODULE_RWX=y +# CONFIG_STRING_SELFTEST is not set +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_STX104 is not set +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_SUNGEM=m +CONFIG_SUNGEM_PHY=m +CONFIG_SUNRPC=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_SUNRPC_DEBUG=y +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_SWAP=y +CONFIG_SUNRPC_XPRT_RDMA=m +# CONFIG_SUNXI_SRAM is not set +CONFIG_SUN_PARTITION=y +# CONFIG_SURFACE_PRO3_BUTTON is not set +# CONFIG_SUSPEND is not set +CONFIG_SWAP=y +CONFIG_SWIOTLB=y +CONFIG_SWIOTLB_XEN=y +CONFIG_SWPHY=y +CONFIG_SW_SYNC=y +CONFIG_SX9500=m +CONFIG_SXGBE_ETH=m +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_GT=m +CONFIG_SYNC_FILE=y +CONFIG_SYN_COOKIES=y +CONFIG_SYSCTL=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSFS=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_SYSFS_SYSCALL=y +CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_SYSTEM_EXTRA_CERTIFICATE=y +CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSV_FS=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_T5403=m +CONFIG_TABLET_SERIAL_WACOM4=m +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_HANWANG=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_PEGASUS=m +CONFIG_TAHVO_USB=m +CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y +CONFIG_TAP=m +CONFIG_TARGET_CORE=m +CONFIG_TASKSTATS=y +CONFIG_TASKS_RCU=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_TASK_XACCT=y +CONFIG_TCG_ATMEL=m +CONFIG_TCG_CRB=m +CONFIG_TCG_INFINEON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_TIS=y +CONFIG_TCG_TIS_CORE=y +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_TCG_TIS_SPI=m +CONFIG_TCG_TIS_ST33ZP24=m +CONFIG_TCG_TIS_ST33ZP24_I2C=m +CONFIG_TCG_TIS_ST33ZP24_SPI=m +CONFIG_TCG_TPM=y +CONFIG_TCG_VTPM_PROXY=m +CONFIG_TCG_XEN=m +CONFIG_TCM_FC=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_PSCSI=m +CONFIG_TCM_QLA2XXX=m +# CONFIG_TCM_QLA2XXX_DEBUG is not set +CONFIG_TCM_USER2=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BBR=m +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_NV=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_MD5SIG=y +CONFIG_TCS3414=m +CONFIG_TCS3472=m +CONFIG_TEHUTI=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TELCLOCK=m +CONFIG_TERANETICS_PHY=m +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +# CONFIG_TEST_BITMAP is not set +CONFIG_TEST_BPF=m +# CONFIG_TEST_FIND_BIT is not set +CONFIG_TEST_FIRMWARE=m +# CONFIG_TEST_HASH is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_LIST_SORT is not set +CONFIG_TEST_LKM=m +# CONFIG_TEST_PARMAN is not set +CONFIG_TEST_POWER=m +# CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_SORT is not set +CONFIG_TEST_STATIC_KEYS=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_SYSCTL is not set +CONFIG_TEST_UDELAY=m +CONFIG_TEST_USER_COPY=m +# CONFIG_TEST_UUID is not set +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_TEXTSEARCH_KMP=m +CONFIG_THERMAL=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_EMULATION=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +# CONFIG_THINKPAD_ACPI is not set +CONFIG_THIN_ARCHIVES=y +CONFIG_THP_SWAP=y +CONFIG_THREAD_INFO_IN_TASK=y +CONFIG_THRUSTMASTER_FF=y +CONFIG_THUNDERBOLT=m +CONFIG_THUNDERBOLT_NET=m +CONFIG_THUNDER_NIC_BGX=m +CONFIG_THUNDER_NIC_PF=m +CONFIG_THUNDER_NIC_RGX=m +CONFIG_THUNDER_NIC_VF=m +CONFIG_TICK_CPU_ACCOUNTING=y +CONFIG_TICK_ONESHOT=y +CONFIG_TIFM_7XX1=m +CONFIG_TIFM_CORE=m +CONFIG_TIGON3=m +CONFIG_TIGON3_HWMON=y +CONFIG_TIMERFD=y +CONFIG_TINYDRM_MI0283QT=m +CONFIG_TINYDRM_MIPI_DBI=m +CONFIG_TINYDRM_REPAPER=m +CONFIG_TINYDRM_ST7586=m +CONFIG_TIPC=m +CONFIG_TIPC_MEDIA_IB=y +CONFIG_TIPC_MEDIA_UDP=y +CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m +CONFIG_TI_ADC084S021=m +CONFIG_TI_ADC108S102=m +CONFIG_TI_ADC12138=m +CONFIG_TI_ADC128S052=m +CONFIG_TI_ADC161S626=m +CONFIG_TI_ADS1015=m +CONFIG_TI_ADS7950=m +CONFIG_TI_AM335X_ADC=m +CONFIG_TI_CPSW_ALE=m +CONFIG_TI_DAC082S085=m +CONFIG_TI_TLC4541=m +CONFIG_TLAN=m +CONFIG_TLS=m +CONFIG_TMP006=m +CONFIG_TMP007=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TOIM3232_DONGLE=m +# CONFIG_TOPSTAR_LAPTOP is not set +CONFIG_TORTURE_TEST=m +# CONFIG_TOSHIBA_BT_RFKILL is not set +# CONFIG_TOSHIBA_HAPS is not set +CONFIG_TPL0102=m +CONFIG_TPS6105X=m +CONFIG_TPS6507X=m +CONFIG_TRACEPOINTS=y +# CONFIG_TRACEPOINT_BENCHMARK is not set +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACER_SNAPSHOT=y +# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set +CONFIG_TRACE_CLOCK=y +# CONFIG_TRACE_EVAL_MAP_FILE is not set +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_ROUTER=m +CONFIG_TRACE_SINK=m +CONFIG_TRACING=y +CONFIG_TRACING_MAP=y +CONFIG_TRACING_SUPPORT=y +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_TRANSPARENT_HUGE_PAGECACHE=y +CONFIG_TREE_RCU=y +CONFIG_TREE_SRCU=y +CONFIG_TRUSTED_KEYS=y +CONFIG_TSL2583=m +CONFIG_TSL2x7x=m +CONFIG_TSL4531=m +CONFIG_TSYS01=m +CONFIG_TSYS02D=m +# CONFIG_TTPCI_EEPROM is not set +CONFIG_TTY=y +CONFIG_TTY_PRINTK=y +CONFIG_TULIP=m +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_TUN=y +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_TYPEC=m +CONFIG_TYPEC_FUSB302=m +CONFIG_TYPEC_TCPCI=m +CONFIG_TYPEC_TCPM=m +CONFIG_TYPEC_TPS6598X=m +CONFIG_TYPEC_UCSI=m +CONFIG_TYPHOON=m +# CONFIG_UBSAN is not set +CONFIG_UCS2_STRING=y +CONFIG_UCSI_ACPI=m +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="" +# CONFIG_UFS_DEBUG is not set +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +CONFIG_UHID=m +CONFIG_UID16=y +CONFIG_UIO=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_HV_GENERIC=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULI526X=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNISYSSPAR=y +CONFIG_UNISYS_VISORBUS=m +CONFIG_UNISYS_VISORHBA=m +CONFIG_UNISYS_VISORINPUT=m +CONFIG_UNISYS_VISORNIC=m +CONFIG_UNIX=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_UNIX_DIAG=m +CONFIG_UNUSED_SYMBOLS=y +CONFIG_UNWINDER_FRAME_POINTER=y +# CONFIG_UNWINDER_GUESS is not set +# CONFIG_UNWINDER_ORC is not set +CONFIG_UPROBES=y +CONFIG_UPROBE_EVENTS=y +CONFIG_US5182D=m +CONFIG_USB=y +CONFIG_USBIP_CORE=m +# CONFIG_USBIP_DEBUG is not set +CONFIG_USBIP_HOST=m +CONFIG_USBIP_VHCI_HCD=m +CONFIG_USBIP_VHCI_HC_PORTS=8 +CONFIG_USBIP_VHCI_NR_HCS=1 +CONFIG_USBIP_VUDC=m +CONFIG_USBPCWATCHDOG=m +CONFIG_USB_ACM=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AMD5536UDC=m +CONFIG_USB_AN2720=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_ATM=m +CONFIG_USB_BDC_PCI=m +CONFIG_USB_BDC_UDC=m +CONFIG_USB_BELKIN=y +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CATC=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_CHAOSKEY=m +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_PCI=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_ULPI=y +CONFIG_USB_COMMON=y +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +CONFIG_USB_CONFIGFS_F_TCM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_PHONET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CXACRU=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_DUMMY_HCD is not set +CONFIG_USB_DWC2=y +# CONFIG_USB_DWC2_DEBUG is not set +CONFIG_USB_DWC2_HOST=y +CONFIG_USB_DWC2_PCI=m +# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set +CONFIG_USB_DWC3=m +CONFIG_USB_DWC3_DUAL_ROLE=y +# CONFIG_USB_DWC3_GADGET is not set +# CONFIG_USB_DWC3_HOST is not set +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_ULPI=y +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_EG20T=m +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_EHCI_PCI=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_USB_EMI26=m +CONFIG_USB_EMI62=m +CONFIG_USB_EPSON2888=y +CONFIG_USB_ETH=m +CONFIG_USB_ETH_EEM=y +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_EZUSB_FX2=m +CONFIG_USB_FOTG210_HCD=m +CONFIG_USB_FOTG210_UDC=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_FUNCTIONFS_ETH=y +CONFIG_USB_FUNCTIONFS_GENERIC=y +CONFIG_USB_FUNCTIONFS_RNDIS=y +CONFIG_USB_F_ACM=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_HID=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_NCM=m +CONFIG_USB_F_OBEX=m +CONFIG_USB_F_PHONET=m +CONFIG_USB_F_PRINTER=m +CONFIG_USB_F_RNDIS=m +CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_SS_LB=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_TCM=m +CONFIG_USB_GADGET=m +CONFIG_USB_GADGETFS=m +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GOKU=m +CONFIG_USB_GR_UDC=m +CONFIG_USB_G_ACM_MS=m +CONFIG_USB_G_DBGP=m +# CONFIG_USB_G_DBGP_PRINTK is not set +CONFIG_USB_G_DBGP_SERIAL=y +CONFIG_USB_G_HID=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_G_NCM=m +CONFIG_USB_G_NOKIA=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set +CONFIG_USB_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_HSIC_USB4604=m +CONFIG_USB_HSO=m +CONFIG_USB_HUB_USB251XB=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_IPHETH=m +CONFIG_USB_IRDA=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1301=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_ISP1760=m +CONFIG_USB_ISP1760_DUAL_ROLE=y +# CONFIG_USB_ISP1760_GADGET_ROLE is not set +CONFIG_USB_ISP1760_HCD=y +# CONFIG_USB_ISP1760_HOST_ROLE is not set +CONFIG_USB_ISP1761_UDC=y +CONFIG_USB_KAWETH=m +CONFIG_USB_KBD=m +CONFIG_USB_KC2190=y +CONFIG_USB_LAN78XX=m +CONFIG_USB_LCD=m +CONFIG_USB_LD=m +CONFIG_USB_LEDS_TRIGGER_USBPORT=m +CONFIG_USB_LED_TRIG=y +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_LINK_LAYER_TEST=m +# CONFIG_USB_M66592 is not set +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_MAX3421_HCD=m +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=m +CONFIG_USB_MOUSE=m +CONFIG_USB_MUSB_DUAL_ROLE=y +# CONFIG_USB_MUSB_GADGET is not set +CONFIG_USB_MUSB_HDRC=m +# CONFIG_USB_MUSB_HOST is not set +CONFIG_USB_MV_U3D=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_NET2272=m +CONFIG_USB_NET2272_DMA=y +CONFIG_USB_NET2280=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CH9200=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_DRIVERS=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_OTG_WHITELIST is not set +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PCI=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_PHY=y +CONFIG_USB_PRINTER=m +CONFIG_USB_PXA27X=m +CONFIG_USB_R8A66597=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_RIO500=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_DEBUG=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_UPD78F0730=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_SISUSBVGA_CON is not set +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_HCD_ISO=y +CONFIG_USB_SNP_CORE=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_DATAFAB=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_ENE_UB6250=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_REALTEK=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_SUPPORT=y +CONFIG_USB_SWITCH_FSA9480=m +CONFIG_USB_TEST=m +CONFIG_USB_TMC=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_U132_HCD=m +CONFIG_USB_UAS=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_ULPI_BUS=m +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_VL600=m +CONFIG_USB_WDM=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_USB_XHCI_PLATFORM=m +CONFIG_USB_XUSBATM=m +CONFIG_USB_YUREX=m +CONFIG_USB_ZERO=m +CONFIG_USELIB=y +CONFIG_USERFAULTFD=y +CONFIG_USERIO=m +CONFIG_USER_NS=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_UTS_NS=y +# CONFIG_UWB is not set +CONFIG_U_SERIAL_CONSOLE=y +CONFIG_VCNL4000=m +CONFIG_VEML6070=m +CONFIG_VERSION_SIGNATURE="" +CONFIG_VETH=m +CONFIG_VFAT_FS=y +CONFIG_VFIO=m +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO_MDEV=m +CONFIG_VFIO_MDEV_DEVICE=m +CONFIG_VFIO_NOIOMMU=y +CONFIG_VFIO_PCI=m +CONFIG_VFIO_PCI_IGD=y +CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI_MMAP=y +CONFIG_VFIO_PCI_VGA=y +CONFIG_VFIO_VIRQFD=m +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VGASTATE=m +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_VGA_CONSOLE=y +CONFIG_VGA_SWITCHEROO=y +CONFIG_VHOST=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set +CONFIG_VHOST_NET=m +CONFIG_VHOST_RING=m +CONFIG_VHOST_SCSI=m +CONFIG_VHOST_VSOCK=m +CONFIG_VIA_FIR=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_VELOCITY=m +CONFIG_VIA_WDT=m +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIPERBOARD_ADC=m +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_BLK_SCSI=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_VIRTIO_INPUT=m +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m +CONFIG_VIRTUALIZATION=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRT_TO_BUS=y +CONFIG_VITESSE_PHY=m +CONFIG_VL6180=m +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_VLSI_FIR=m +# CONFIG_VM86 is not set +CONFIG_VMAP_STACK=y +CONFIG_VMD=m +CONFIG_VME_BUS=y +CONFIG_VME_CA91CX42=m +CONFIG_VME_FAKE=m +CONFIG_VME_TSI148=m +CONFIG_VME_USER=m +CONFIG_VMIVME_7805=m +CONFIG_VMWARE_BALLOON=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_VMWARE_VMCI=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_VMXNET3=m +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VOP=m +CONFIG_VOP_BUS=m +CONFIG_VORTEX=m +CONFIG_VSOCKETS=m +CONFIG_VSOCKETS_DIAG=m +CONFIG_VSOCKMON=m +CONFIG_VT=y +CONFIG_VT6655=m +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_VXFS_FS=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_VXLAN=m +CONFIG_VZ89X=m +# CONFIG_W1 is not set +CONFIG_W83627HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_WAN=y +CONFIG_WANXL=m +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y +# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC is not set +CONFIG_WATCHDOG_PRETIMEOUT_GOV=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m +CONFIG_WATCHDOG_SYSFS=y +CONFIG_WDAT_WDT=m +CONFIG_WDTPCI=m +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PRIV=y +CONFIG_WEXT_PROC=y +CONFIG_WILC1000=m +CONFIG_WILC1000_HW_OOB_INTR=y +CONFIG_WILC1000_SDIO=m +CONFIG_WILC1000_SPI=m +# CONFIG_WIMAX is not set +CONFIG_WINBOND_840=m +CONFIG_WINBOND_FIR=m +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WIZNET_BUS_ANY=y +# CONFIG_WIZNET_BUS_DIRECT is not set +# CONFIG_WIZNET_BUS_INDIRECT is not set +CONFIG_WIZNET_W5100=m +CONFIG_WIZNET_W5100_SPI=m +CONFIG_WIZNET_W5300=m +# CONFIG_WLAN is not set +CONFIG_WM831X_BACKUP=m +CONFIG_WM831X_POWER=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +CONFIG_X25=m +CONFIG_X25_ASY=m +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_X86=y +CONFIG_X86_16BIT=y +# CONFIG_X86_5LEVEL is not set +CONFIG_X86_64=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_X86_64_SMP=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +# CONFIG_X86_AMD_PLATFORM_DEVICE is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +CONFIG_X86_CMOV=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CPUID=m +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_X86_DEBUG_FPU=y +# CONFIG_X86_DECODER_SELFTEST is not set +CONFIG_X86_DEV_DMA_OPS=y +CONFIG_X86_DIRECT_GBPAGES=y +CONFIG_X86_ESPFIX64=y +CONFIG_X86_EXTENDED_PLATFORM=y +CONFIG_X86_FAST_FEATURE_TESTS=y +CONFIG_X86_FEATURE_NAMES=y +# CONFIG_X86_GOLDFISH is not set +# CONFIG_X86_INTEL_LPSS is not set +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +# CONFIG_X86_INTEL_MID is not set +CONFIG_X86_INTEL_MPX=y +CONFIG_X86_INTEL_PSTATE=y +CONFIG_X86_INTEL_UMIP=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_IO_APIC=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_MCE=y +CONFIG_X86_MCELOG_LEGACY=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_INJECT=m +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_MPPARSE=y +CONFIG_X86_MSR=m +CONFIG_X86_NEED_RELOCS=y +CONFIG_X86_NUMACHIP=y +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_PAT=y +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_X86_PMEM_LEGACY=y +CONFIG_X86_PMEM_LEGACY_DEVICE=y +CONFIG_X86_PM_TIMER=y +CONFIG_X86_POWERNOW_K8=y +# CONFIG_X86_PTDUMP is not set +CONFIG_X86_PTDUMP_CORE=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_RESERVE_LOW=64 +CONFIG_X86_SMAP=y +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_X86_SYSFB is not set +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_X86_TSC=y +# CONFIG_X86_UV is not set +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_X86_VSMP is not set +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_X2APIC=y +CONFIG_X86_X32=y +CONFIG_XEN=y +CONFIG_XENFS=m +CONFIG_XEN_512GB=y +CONFIG_XEN_ACPI=y +CONFIG_XEN_ACPI_PROCESSOR=y +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_BACKEND=y +# CONFIG_XEN_BALLOON is not set +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_COMPAT_XENFS=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_DOM0=y +CONFIG_XEN_EFI=y +# CONFIG_XEN_FBDEV_FRONTEND is not set +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_HAVE_VPMU=y +CONFIG_XEN_MCE_LOG=y +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_XEN_PCIDEV_BACKEND=m +CONFIG_XEN_PCIDEV_FRONTEND=m +CONFIG_XEN_PRIVCMD=m +CONFIG_XEN_PV=y +# CONFIG_XEN_PVCALLS_BACKEND is not set +CONFIG_XEN_PVCALLS_FRONTEND=m +CONFIG_XEN_PVH=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_PVHVM_SMP=y +CONFIG_XEN_PV_SMP=y +CONFIG_XEN_SAVE_RESTORE=y +CONFIG_XEN_SCSI_BACKEND=m +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_XEN_SYMS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_TMEM=m +CONFIG_XEN_WDT=m +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=m +CONFIG_XFRM_IPCOMP=m +# CONFIG_XFRM_MIGRATE is not set +CONFIG_XFRM_OFFLOAD=y +CONFIG_XFRM_STATISTICS=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_USER=m +# CONFIG_XFS_DEBUG is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_ONLINE_SCRUB is not set +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_RT=y +# CONFIG_XFS_WARN is not set +CONFIG_XILINX_GMII2RGMII=m +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XILLYBUS_PCIE=m +CONFIG_XOR_BLOCKS=m +CONFIG_XPS=y +CONFIG_XXHASH=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_YAM=m +CONFIG_YELLOWFIN=m +CONFIG_YENTA=m +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_Z3FOLD=m +CONFIG_ZBUD=y +CONFIG_ZEROPLUS_FF=y +CONFIG_ZIIRAVE_WATCHDOG=m +CONFIG_ZISOFS=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZONE_DEVICE=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ZPA2326=m +CONFIG_ZPA2326_I2C=m +CONFIG_ZPA2326_SPI=m +CONFIG_ZPOOL=y +CONFIG_ZRAM=m +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZSMALLOC=y +# CONFIG_ZSMALLOC_STAT is not set +CONFIG_ZSTD_COMPRESS=m +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_ZSWAP=y --- linux-aws-4.15.0.orig/debian.aws/control.d/aws.inclusion-list +++ linux-aws-4.15.0/debian.aws/control.d/aws.inclusion-list @@ -0,0 +1,257 @@ +arch/*/{crypto,kernel,oprofile} +arch/*/kvm/kvm.ko +arch/powerpc/kvm/kvm-hv.ko +arch/powerpc/kvm/kvm-pr.ko +arch/powerpc/kvm/vfio.ko +arch/powerpc/platforms/powernv/opal-prd.ko +arch/s390/* +arch/x86/kvm/kvm-amd.ko +arch/x86/kvm/kvm-intel.ko +crypto/* +drivers/acpi/* +drivers/ata/acard-ahci.ko +drivers/ata/ahci.ko +drivers/ata/ahci_platform.ko +drivers/ata/ata_generic.ko +drivers/ata/libahci.ko +drivers/ata/libahci_platform.ko +drivers/block/brd.ko +drivers/block/cryptoloop.ko +drivers/block/floppy.ko +drivers/block/loop.ko +drivers/block/nbd.ko +drivers/block/rbd.ko +drivers/block/drbd/drbd.ko +drivers/block/virtio_blk.ko +drivers/block/xen-blkfront.ko +drivers/char/hangcheck-timer.ko +drivers/char/hw_random/powernv-rng.ko +drivers/char/hw_random/virtio-rng.ko +drivers/char/ipmi/* +drivers/char/ipmi/ipmi_msghandler.ko +drivers/char/lp.ko +drivers/char/nvram.ko +drivers/char/ppdev.ko +drivers/char/raw.ko +drivers/char/virtio_console.ko +drivers/crypto/nx/* +drivers/crypto/vmx/vmx-crypto.ko +drivers/firmware/efi/* +drivers/firmware/iscsi_ibft.ko +drivers/gpu/drm/ast/ast.ko +drivers/gpu/drm/drm_kms_helper.ko +drivers/gpu/drm/drm.ko +drivers/gpu/drm/ttm/ttm.ko +drivers/hid/hid-generic.ko +drivers/hid/hid-hyperv.ko +drivers/hid/hid.ko +drivers/hid/usbhid/usbhid.ko +drivers/hv/* +drivers/hwmon/ibmpowernv.ko +drivers/infiniband/core/ib_addr.ko +drivers/infiniband/core/ib_cm.ko +drivers/infiniband/core/ib_core.ko +drivers/infiniband/core/ib_mad.ko +drivers/infiniband/core/ib_sa.ko +drivers/infiniband/core/iw_cm.ko +drivers/infiniband/core/rdma_cm.ko +drivers/infiniband/ulp/iser/ib_iser.ko +drivers/infiniband/ulp/isert/ib_isert.ko +drivers/input/evbug.ko +drivers/input/gameport/gameport.ko +drivers/input/input-leds.ko +drivers/input/joydev.ko +drivers/input/misc/xen-kbdfront.ko +drivers/input/mouse/psmouse.ko +drivers/input/serio/hyperv-keyboard.ko +drivers/input/serio/serio_raw.ko +drivers/input/serio/serport.ko +drivers/input/touchscreen/usbtouchscreen.ko +drivers/leds/leds-powernv.ko +drivers/gpu/drm/drm.ko +drivers/gpu/drm/drm_kms_helper.ko +drivers/md/* +drivers/message/fusion* +drivers/misc/cxl/* +drivers/misc/eeprom/at24.ko +drivers/misc/vmw_balloon.ko +drivers/misc/vmw_vmci/vmw_vmci.ko +drivers/mtd/cmdlinepart.ko +drivers/mtd/devices/powernv_flash.ko +drivers/mtd/ofpart.ko +drivers/net/appletalk/ipddp.ko +drivers/net/bonding/bonding.ko +drivers/net/caif/caif_virtio.ko +drivers/net/dummy.ko +drivers/net/eql.ko +drivers/net/ethernet/8390/8390.ko +drivers/net/ethernet/8390/ne2k-pci.ko +drivers/net/ethernet/amazon/ena/ena.ko +drivers/net/ethernet/amd/pcnet32.ko +drivers/net/ethernet/broadcom/bnx2x/* +drivers/net/ethernet/broadcom/tg3.ko +drivers/net/ethernet/dec/tulip/* +drivers/net/ethernet/emulex/benet/* +drivers/net/ethernet/ibm/* +drivers/net/ethernet/intel/e1000/e1000.ko +drivers/net/ethernet/intel/e1000e/e1000e.ko +drivers/net/ethernet/intel/i40e/* +drivers/net/ethernet/intel/igb/* +drivers/net/ipvlan/ipvlan.ko +drivers/net/ethernet/intel/igbvf/igbvf.ko +drivers/net/ethernet/intel/ixgbe/* +drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko +drivers/net/ethernet/mellanox/* +drivers/net/ethernet/realtek/8139cp.ko +drivers/net/ethernet/realtek/8139too.ko +drivers/net/fddi/* +drivers/net/geneve.ko +drivers/net/hyperv/hv_netvsc.ko +drivers/net/ifb.ko +drivers/net/ipvlan/* +drivers/net/macvlan.ko +drivers/net/macvtap.ko +drivers/net/mii.ko +drivers/net/netconsole.ko +drivers/net/ppp/* +drivers/net/ppp/bsd_comp.ko +drivers/net/slip/* +drivers/net/veth.ko +drivers/net/virtio_net.ko +drivers/net/vmxnet3/vmxnet3.ko +drivers/net/vxlan.ko +drivers/net/xen-netback/* +drivers/net/xen-netfront.ko +drivers/nvme/host/nvme.ko +drivers/nvmem/nvmem_core.ko +drivers/parport/parport.ko +drivers/parport/parport_pc.ko +drivers/pci/host/vmd.ko +drivers/platform/x86/pvpanic.ko +drivers/pps/pps_core.ko +drivers/ptp/ptp.ko +drivers/s390/* +drivers/s390/block/xpram.ko +drivers/scsi/aacraid/* +drivers/scsi/BusLogic.ko +drivers/scsi/cxlflash/* +drivers/scsi/device_handler/scsi_dh_alua.ko +drivers/scsi/device_handler/scsi_dh_emc.ko +drivers/scsi/device_handler/scsi_dh_hp_sw.ko +drivers/scsi/device_handler/scsi_dh_rdac.ko +drivers/scsi/hv_storvsc.ko +drivers/scsi/ibmvscsi/* +drivers/scsi/ipr.ko +drivers/scsi/iscsi_boot_sysfs.ko +drivers/scsi/iscsi_tcp.ko +drivers/scsi/libiscsi.ko +drivers/scsi/libiscsi_tcp.ko +drivers/scsi/libsas/* +drivers/scsi/lpfc/* +drivers/scsi/megaraid/* +drivers/scsi/mpt3sas/* +drivers/scsi/osd/libosd.ko +drivers/scsi/osd/osd.ko +drivers/scsi/qla1280.ko +drivers/scsi/qla2xxx/* +drivers/scsi/raid_class.ko +drivers/scsi/scsi_debug.ko +drivers/scsi/scsi_transport_fc.ko +drivers/scsi/scsi_transport_iscsi.ko +drivers/scsi/scsi_transport_sas.ko +drivers/scsi/scsi_transport_spi.ko +drivers/scsi/sd_mod.ko +drivers/scsi/sr_mod.ko +drivers/scsi/virtio_scsi.ko +drivers/scsi/vmw_pvscsi.ko +drivers/target/target_core*.ko +drivers/tty/serial/jsm/* +drivers/uio/uio.ko +drivers/uio/uio_pdrv_genirq.ko +drivers/usb/host/* +drivers/usb/storage/uas.ko +drivers/usb/storage/usb-storage.ko +drivers/vfio/* +drivers/vhost/* +drivers/video/fbdev/* +drivers/video/vgastate.ko +drivers/virtio/* +drivers/watchdog/softdog.ko +drivers/xen/* +! find sound/core -name oss -prune -o -name *.ko -print +fs/9p/* +fs/aufs/aufs.ko +fs/autofs4/autofs4.ko +fs/binfmt_misc.ko +fs/btrfs/* +fs/cachefiles/cachefiles.ko +fs/ceph/* +fs/cifs/* +fs/configfs/* +fs/dlm/dlm.ko +fs/ecryptfs/* +fs/efivarfs/* +fs/exofs/libore.ko +fs/ext4/* +fs/fat/* +fs/fscache/* +fs/fuse/* +fs/isofs/* +fs/lockd/* +fs/nfs/* +fs/nfs_common/* +fs/nfsd/* +fs/nls/nls_cp437.ko +fs/nls/nls_iso8859-1.ko +fs/nls/nls_utf8.ko +fs/overlayfs/* +fs/squashfs/* +fs/udf/* +fs/ufs/* +fs/xfs/* +lib/* +net/6lowpan/* +net/802/* +net/8021q/* +net/9p/* +net/appletalk/* +net/atm/* +net/ax25/* +net/bridge/* +net/can/* +net/ceph/libceph.ko +net/core/* +net/dccp/* +net/decnet/* +net/ieee802154/* +net/ipv4/* +net/ipv6/* +net/ipx/* +net/irda/* +net/key/* +net/lapb/* +net/llc/* +net/netfilter/* +net/netlink/netlink_diag.ko +net/netrom/* +net/openvswitch/* +net/packet/af_packet_diag.ko +net/phonet/* +net/rose/* +net/rxrpc/* +net/sched/* +net/sctp/* +net/sunrpc/auth_gss/auth_rpcgss.ko +net/sunrpc/auth_gss/rpcsec_gss_krb5.ko +net/sunrpc/sunrpc.ko +net/tipc/* +net/unix/unix_diag.ko +net/vmw_vsock/* +net/x25/* +net/xfrm/* +sound/drivers/pcsp/snd-pcsp.ko +sound/pci/snd-ens1370.ko +sound/soundcore.ko +ubuntu/vbox/vboxguest/vboxguest.ko +ubuntu/vbox/vboxsf/vboxsf.ko +zfs/* --- linux-aws-4.15.0.orig/debian.aws/control.d/flavour-control.stub +++ linux-aws-4.15.0/debian.aws/control.d/flavour-control.stub @@ -0,0 +1,135 @@ +# Items that get replaced: +# FLAVOUR +# DESC +# ARCH +# SUPPORTED +# TARGET +# BOOTLOADER +# =PROVIDES= +# +# Items marked with =FOO= are optional +# +# This file describes the template for packages that are created for each flavour +# in debian/control.d/vars.* +# +# This file gets edited in a couple of places. See the debian/control.stub rule in +# debian/rules. PGGVER, ABINUM, and SRCPKGNAME are all converted in the +# process of creating debian/control. +# +# The flavour specific strings (ARCH, DESC, etc) are converted using values from the various +# flavour files in debian/control.d/vars.* +# +# XXX: Leave the blank line before the first package!! + +Package: linux-image-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: kernel +Priority: optional +Provides: linux-image, fuse-module, aufs-dkms, =PROVIDES=${linux:rprovides} +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod +Recommends: BOOTLOADER, initramfs-tools | linux-initramfs-tool +Breaks: flash-kernel (<< 3.0~rc.4ubuntu64) [arm64] +Suggests: fdutils, SRCPKGNAME-doc-PKGVER | SRCPKGNAME-source-PKGVER, SRCPKGNAME-tools, linux-headers-PKGVER-ABINUM-FLAVOUR +Description: Linux kernel image for version PKGVER on DESC + This package contains the Linux kernel image for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-image-extra-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-PKGVER-ABINUM-FLAVOUR, crda | wireless-crda +Description: Linux kernel extra modules for version PKGVER on DESC + This package contains the Linux kernel extra modules for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-headers-PKGVER-ABINUM, ${shlibs:Depends} +Provides: linux-headers, linux-headers-3.0 +Description: Linux kernel headers for version PKGVER on DESC + This package provides kernel header files for version PKGVER on + DESC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details. + +Package: linux-image-PKGVER-ABINUM-FLAVOUR-dbgsym +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version PKGVER on DESC + This package provides a kernel debug image for version PKGVER on + DESC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-tools-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-tools-PKGVER-ABINUM +Description: Linux kernel version specific tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version PKGVER-ABINUM on + =HUMAN=. + +Package: linux-cloud-tools-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-cloud-tools-PKGVER-ABINUM +Description: Linux kernel version specific cloud tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools for cloud for version PKGVER-ABINUM on + =HUMAN=. + +Package: linux-udebs-FLAVOUR +Build-Profiles: +XC-Package-Type: udeb +Section: debian-installer +Architecture: ARCH +Depends: ${udeb:Depends} +Description: Metapackage depending on kernel udebs + This package depends on the all udebs that the kernel build generated, + for easier version and migration tracking. + --- linux-aws-4.15.0.orig/debian.aws/control.d/vars.aws +++ linux-aws-4.15.0/debian.aws/control.d/vars.aws @@ -0,0 +1,6 @@ +arch="amd64" +supported="AWS" +target="Geared toward Amazon Web Services (AWS) systems." +desc="=HUMAN= SMP" +bootloader="grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo" +provides="" --- linux-aws-4.15.0.orig/debian.aws/control.stub.in +++ linux-aws-4.15.0/debian.aws/control.stub.in @@ -0,0 +1,88 @@ +Source: SRCPKGNAME +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.9.4.0 +Build-Depends: + debhelper (>= 9), + dh-systemd, + cpio, + kernel-wedge, + kmod , + makedumpfile [amd64 i386] , + libelf-dev , + libnewt-dev , + libiberty-dev , + rsync , + libdw-dev , + libpci-dev , + pkg-config , + flex , + bison , + libunwind8-dev [amd64 arm64 armhf i386 ppc64el] , + liblzma-dev , + openssl , + libssl-dev , + libaudit-dev , + bc , + python-dev , + gawk , + libudev-dev , + autoconf , + automake , + libtool , + uuid-dev , + binutils-dev , + libnuma-dev [amd64 arm64 i386 ppc64el s390x] , +Build-Depends-Indep: + xmlto , + docbook-utils , + ghostscript , + transfig , + bzip2 , + sharutils , + asciidoc , + python-sphinx , + python-sphinx-rtd-theme , +Vcs-Git: git://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-aws/+git/bionic master +XS-Testsuite: autopkgtest +#XS-Testsuite-Depends: gcc-4.7 binutils + +Package: SRCPKGNAME-headers-PKGVER-ABINUM +Build-Profiles: +Architecture: all +Multi-Arch: foreign +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils +Breaks: iscsitarget-dkms (<< 1.4.20.3+svn502-2ubuntu4.4) +Description: Header files related to Linux kernel version PKGVER + This package provides kernel header files for version PKGVER, for sites + that want the latest kernel headers. Please read + /usr/share/doc/SRCPKGNAME-headers-PKGVER-ABINUM/debian.README.gz for details + +Package: SRCPKGNAME-tools-PKGVER-ABINUM +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel version specific tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version PKGVER-ABINUM on + =HUMAN=. + You probably want to install linux-tools-PKGVER-ABINUM-. + +Package: SRCPKGNAME-cloud-tools-PKGVER-ABINUM +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-cloud-tools-common +Description: Linux kernel version specific cloud tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools for cloud tools for version PKGVER-ABINUM on + =HUMAN=. + You probably want to install linux-cloud-tools-PKGVER-ABINUM-. + --- linux-aws-4.15.0.orig/debian.aws/copyright +++ linux-aws-4.15.0/debian.aws/copyright @@ -0,0 +1,29 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + 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; version 2 dated June, 1991. + + 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-aws-4.15.0.orig/debian.aws/d-i/firmware/README.txt +++ linux-aws-4.15.0/debian.aws/d-i/firmware/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.aws/d-i/kernel-versions +++ linux-aws-4.15.0/debian.aws/d-i/kernel-versions @@ -0,0 +1,2 @@ +# arch version flavour installedname suffix bdep +amd64 PKGVER-ABINUM aws PKGVER-ABINUM-aws - - --- linux-aws-4.15.0.orig/debian.aws/d-i/modules/none +++ linux-aws-4.15.0/debian.aws/d-i/modules/none @@ -0,0 +1 @@ +# Empty placeholder --- linux-aws-4.15.0.orig/debian.aws/d-i/package-list +++ linux-aws-4.15.0/debian.aws/d-i/package-list @@ -0,0 +1,208 @@ +Package: kernel-image +Provides: ext3-modules, ext4-modules, squashfs-modules +Provides_amd64: efi-modules, ext3-modules, ext4-modules, squashfs-modules +Provides_i386: efi-modules, ext3-modules, ext4-modules, squashfs-modules +Provides_ppc64el: ext3-modules, ext4-modules, fat-modules, squashfs-modules +Provides_s390x: ext3-modules, ext4-modules, ppp-modules, squashfs-modules +Description: kernel image and system map + +Package: dasd-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: DASD storage support + +Package: dasd-extra-modules +Depends: dasd-modules +Priority: extra +Description: DASD storage support -- extras + +Package: fat-modules +Depends: kernel-image +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: fb-modules +Depends: kernel-image +Priority: standard +Description: Framebuffer modules + +Package: firewire-core-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: floppy-modules +Depends: kernel-image +Priority: standard +Description: Floppy driver support + +Package: fs-core-modules +Depends: kernel-image +Priority: standard +Provides: ext2-modules, jfs-modules, reiserfs-modules, xfs-modules +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules +Depends: kernel-image, fat-modules +Priority: standard +Provides: btrfs-modules, ntfs-modules, hfs-modules +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: input-modules +Depends: kernel-image, usb-modules +Priority: standard +Description: Support for various input methods + +Package: irda-modules +Depends: kernel-image, nic-shared-modules +Priority: standard +Description: Support for Infrared protocols + +Package: md-modules +Depends: kernel-image +Priority: standard +Provides: crypto-dm-modules +Description: Multi-device support (raid, device-mapper, lvm) + +Package: nic-modules +Depends: kernel-image, nic-shared-modules, virtio-modules +Priority: standard +Description: Network interface support + +Package: nic-pcmcia-modules +Depends: kernel-image, nic-shared-modules, nic-modules +Priority: standard +Description: PCMCIA network interface support + +Package: nic-usb-modules +Depends: kernel-image, nic-shared-modules, usb-modules +Priority: standard +Description: USB network interface support + +Package: nic-shared-modules +Depends: kernel-image, crypto-modules +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: parport-modules +Depends: kernel-image +Priority: standard +Description: Parallel port support + +Package: pata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: PATA support modules + +Package: pcmcia-modules +Depends: kernel-image +Priority: standard +Description: PCMCIA Modules + +Package: pcmcia-storage-modules +Depends: kernel-image, scsi-modules +Priority: standard +Description: PCMCIA storage support + +Package: plip-modules +Depends: kernel-image, nic-shared-modules, parport-modules +Priority: standard +Description: PLIP (parallel port) networking support + +Package: ppp-modules +Depends: kernel-image, nic-shared-modules, serial-modules +Priority: standard +Description: PPP (serial port) networking support + +Package: sata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SATA storage support + +Package: scsi-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SCSI storage support + +Package: serial-modules +Depends: kernel-image +Priority: standard +Description: Serial port support + +Package: storage-core-modules +Depends: kernel-image +Priority: standard +Provides: loop-modules +Description: Core storage support + Includes core SCSI, LibATA, USB-Storage. Also includes related block + devices for CD, Disk and Tape medium (and IDE Floppy). + +Package: usb-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Core USB support + +Package: nfs-modules +Priority: standard +Depends: kernel-image +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: block-modules +Priority: standard +Provides: nbd-modules +Depends: kernel-image, storage-core-modules, parport-modules, virtio-modules +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules +Priority: standard +Depends: kernel-image, storage-core-modules, scsi-modules +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: crypto-modules +Priority: extra +Depends: kernel-image +Description: crypto modules + This package contains crypto modules. + +Package: virtio-modules +Priority: standard +Depends: kernel-image +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: socket-modules +Depends: kernel-image +Priority: standard +Description: Unix socket support + +Package: mouse-modules +Depends: kernel-image, input-modules, usb-modules +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: vlan-modules +Depends: kernel-image +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. + +Package: ipmi-modules +Depends: kernel-image +Priority: standard +Description: ipmi modules + +Package: multipath-modules +Depends: kernel-image +Priority: extra +Description: DM-Multipath support + This package contains modules for device-mapper multipath support. + --- linux-aws-4.15.0.orig/debian.aws/etc/getabis +++ linux-aws-4.15.0/debian.aws/etc/getabis @@ -0,0 +1,11 @@ +repo_list=( + "http://archive.ubuntu.com/ubuntu/pool/main/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux" + "http://archive.ubuntu.com/ubuntu/pool/universe/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/universe/l/linux" + "http://ppa.launchpad.net/canonical-kernel-team/ppa/ubuntu/pool/main/l/linux" +) + +package_prefixes linux-image + +getall amd64 aws --- linux-aws-4.15.0.orig/debian.aws/etc/kernelconfig +++ linux-aws-4.15.0/debian.aws/etc/kernelconfig @@ -0,0 +1,7 @@ +if [ "$variant" = "ports" ]; then + archs="" + family='ports' +else + archs="amd64" + family='ubuntu' +fi --- linux-aws-4.15.0.orig/debian.aws/modprobe.d/common.conf +++ linux-aws-4.15.0/debian.aws/modprobe.d/common.conf @@ -0,0 +1,3 @@ +# LP:1434842 -- disable OSS drivers by default to allow pulseaudio to emulate +blacklist snd-mixer-oss +blacklist snd-pcm-oss --- linux-aws-4.15.0.orig/debian.aws/reconstruct +++ linux-aws-4.15.0/debian.aws/reconstruct @@ -0,0 +1,28 @@ +# Recreate any symlinks created since the orig. +# Remove any files deleted from the orig. +chmod +x 'scripts/kmsg-doc' +chmod +x 'spl/autogen.sh' +chmod +x 'spl/cmd/splslab/splslab.py' +chmod +x 'spl/config/compile' +chmod +x 'spl/config/config.guess' +chmod +x 'spl/config/config.sub' +chmod +x 'spl/config/depcomp' +chmod +x 'spl/config/install-sh' +chmod +x 'spl/config/missing' +chmod +x 'spl/configure' +chmod +x 'spl/copy-builtin' +chmod +x 'spl/cp' +chmod +x 'spl/module/spl/spl-kmem.c' +chmod +x 'spl/scripts/check.sh' +chmod +x 'spl/scripts/dkms.mkconf' +chmod +x 'spl/scripts/dkms.postbuild' +chmod +x 'ubuntu/vbox-update' +chmod +x 'zfs/autogen.sh' +chmod +x 'zfs/config/compile' +chmod +x 'zfs/config/config.guess' +chmod +x 'zfs/config/config.sub' +chmod +x 'zfs/config/install-sh' +chmod +x 'zfs/config/missing' +chmod +x 'zfs/configure' +chmod +x 'zfs/cp' +exit 0 --- linux-aws-4.15.0.orig/debian.aws/rules.d/amd64.mk +++ linux-aws-4.15.0/debian.aws/rules.d/amd64.mk @@ -0,0 +1,28 @@ +human_arch = 64 bit x86 +build_arch = x86_64 +header_arch = $(build_arch) +defconfig = defconfig +flavours = aws +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +vdso = vdso_install +no_dumpfile = true +uefi_signed = false +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true +do_tools_x86 = true +do_tools_hyperv = true +do_extras_package = true +ship_extras_package = false +do_tools_common = false +do_tools_acpidbg = false +do_zfs = true +do_libc_dev_package = false +disable_d_i = true +do_doc_package = false +do_source_package = false +do_dtbs = false +do_common_headers_indep = false --- linux-aws-4.15.0.orig/debian.aws/rules.d/hooks.mk +++ linux-aws-4.15.0/debian.aws/rules.d/hooks.mk @@ -0,0 +1 @@ +do_tools_common=false --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/abiname +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/abiname @@ -0,0 +1 @@ +10 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/generic @@ -0,0 +1,22708 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/nfit/nfit 0x00000000 to_nfit_uuid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_levels +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_handles_brightness_key_presses +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_register +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_set_dmi_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_unregister +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x00000000 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/firmware/dcdbas 0x00000000 dcdbas_smi_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/amdkfd/amdkfd 0x00000000 kgd2kfd_init +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 __ishtp_cl_driver_register +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_bus_remove_all_clients +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_allocate +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_connect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_disconnect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_driver_unregister +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_flush_queues +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_free +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_io_rb_recycle +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_link +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_send +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_unlink +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_device_init +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_fw_cl_by_uuid +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_get_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_put_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_recv +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_register_event_cb +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_compl_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_resume +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_suspend +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_start +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_bind_pasid +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_free_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_init_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalid_ppr_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalidate_ctx_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_unbind_pasid +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_pci_cfg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_write +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_count +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_link_state +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_map +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_rx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_tx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_get_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_internal_loopback +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_rx_tx_enable +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_set_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_set_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_init_hw +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_setup_link +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_rdma_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_register_driver +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_unregister_driver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_read +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_write +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_static_ops +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_io_bytes_mec +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_destroy +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_init +EXPORT_SYMBOL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_simple_command +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x00000000 sony_pic_camera_command +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 __wmi_driver_register +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 wmi_driver_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_host_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_art +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_trt +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_add +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_remove +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x00000000 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_free +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_new +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_bm_status +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_label +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_pciaddr +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_temperature +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_version +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_register_event_notifier +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_reset +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_otprotect +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_wmode +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_submit_pbio +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_unregister_event_notifier +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuestIDC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertAreQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Add +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2V +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2WeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertShouldPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertFromErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertToErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAllocZ +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleDump +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetFreeSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetHeapSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleInit +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleRelocate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogClearFileDelayFlag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCloneRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDumpPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlush +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushToLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetCustomPrefixCallback +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstanceThread +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteCom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteDebugger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdErr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdOut +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFreeEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemReallocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdFromSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdToSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndexAndId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetMaxCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuOnline +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPresent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuWorkPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAll +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAllIsConcurrentSafe +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnOthers +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPair +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPairIsConcurrentExecSupported +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnSpecific +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpPokeCpu +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerSignalEvent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTProcSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0AssertPanicSystem +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Init +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemAreKrnlAndUsrDifferent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemExecDonate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddress +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddressR3 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocContTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocLowTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPageTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysNCTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjEnterPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjGetPagePhysAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjIsMapping +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjProtect +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0ProcHandleSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Term +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexIsOwned +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResumeDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexTryRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockAcquire +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrConvertHexBytes +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyP +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatNumber +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeSetUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateF +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadFromNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInInterrupt +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInitialized +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsMain +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfAlive +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfKnown +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadNativeSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptDisable +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsEnabled +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPendingTrusty +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptRestore +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSelfName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleep +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleepNoLog +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadYield +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeExplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeImplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeIsLeapYear +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNormalize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNow +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCanDoHighResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerChangeInterval +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerGetSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerReleaseSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerRequestSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStart +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStop +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertExpr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFile +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFunction +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_u32RTAssertLine +EXPORT_SYMBOL vmlinux 0x00000000 IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cachemode2pte_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fentry__ +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_is_locked_down +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __max_logical_packages +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy +EXPORT_SYMBOL vmlinux 0x00000000 __memmove +EXPORT_SYMBOL vmlinux 0x00000000 __memset +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __node_distance +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __preempt_count +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte2cachemode_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r10 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r11 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r12 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r13 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r14 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r15 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r8 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r9 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rax +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbp +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rcx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdi +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rsi +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print_raw +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_wakeup_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_finish_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_initialize_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_raw_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_pxm_to_online_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mark_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mask_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_debugger_thread_id +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0x00000000 acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_terminate_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_trace_point +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unmap_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_status_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_trace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_value_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_complete_ppr +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_device_info +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_clear_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_direct_map +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_enable_v2 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_set_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_enable_device_erratum +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_page +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_tlb +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_get_v2_domain +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_banks +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_counters +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_set_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_supported +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ga_log_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_rlookup_table +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_unregister_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_update_ga +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_v2_supported +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_dma_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_free_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_reserve_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_add +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_del +EXPORT_SYMBOL vmlinux 0x00000000 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x00000000 boot_option_idle_override +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 convert_art_to_tsc +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_enhanced_fast_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_unrolled +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_dr7 +EXPORT_SYMBOL vmlinux 0x00000000 cpu_info +EXPORT_SYMBOL vmlinux 0x00000000 cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlbstate +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tss_rw +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_task +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 device_private_entry_fault +EXPORT_SYMBOL vmlinux 0x00000000 device_private_key +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap_pages +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_clear_fs +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_default +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_ext +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_rdmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_refcount +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_wrmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_pm_trace +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_amd_iommu +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_cpu_entry_area +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_dev_data +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_ibs_caps +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_new +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_put +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_remove +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_register +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_unregister +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_alloc_locked_page +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_fault +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_get_pfns +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_range_done +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_get +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wt +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_available +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_call_pmic_bus_access_notifier_chain +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_modify +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_acquire +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_release +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_read +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_register_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_unregister_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_write +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 legacy_pic +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 migrate_vma +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msrs_alloc +EXPORT_SYMBOL vmlinux 0x00000000 msrs_free +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 native_io_delay +EXPORT_SYMBOL vmlinux 0x00000000 native_load_gs_index +EXPORT_SYMBOL vmlinux 0x00000000 native_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dax_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 numa_node +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_offset_base +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_mem_start +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_base +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 put_zone_device_private_or_public_page +EXPORT_SYMBOL vmlinux 0x00000000 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_irq_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_x +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_trace_device +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sev_active +EXPORT_SYMBOL vmlinux 0x00000000 sfi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 sme_active +EXPORT_SYMBOL vmlinux 0x00000000 sme_me_mask +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_num_siblings +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tboot +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 this_cpu_off +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 topology_phys_to_logical_pkg +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 translation_pre_enabled +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsc_khz +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unpoison_memory +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_probe_defer +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_fini_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_handler_flags +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_optimus_hdmi_audio +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_lock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_set_dynamic_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unlock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_base +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vmemmap_base +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 x86_apple_machine +EXPORT_SYMBOL vmlinux 0x00000000 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_acpiid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0x00000000 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x00000000 x86_hyper_type +EXPORT_SYMBOL vmlinux 0x00000000 x86_match_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_alloc_p2m_entry +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_selfballoon_init +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_cbc_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ctr_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_decrypt_cbc_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 xts_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit_one +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_req_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 __serpent_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_cbc_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ctr_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 xts_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 __twofish_enc_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_cbc_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 xts_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_incomplete_ipi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_unaccelerated_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_fast_mmio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pi_irte_update +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_ple_window +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pml_full +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_write_tsc_offset +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __x86_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 cpuid_query_maxphyaddr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 handle_mmio_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_match_dest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_set_eoi_accelerated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_ppr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_write_nodecode +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_end_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_assigned_device +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_register_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_start_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_unregister_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_default_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_in +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_handle_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_ept_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_intr_is_single_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_expired_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_find_highest_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_hv_timer_in_use +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_read +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_sw_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mce_cap_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_clear_dirty_pt_masked +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_largepage_remove_write_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_leaf_clear_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_set_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_sync_roots +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mpx_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_valid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_no_apic_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_register_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_unregister_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_l1_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_scale_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msi_irq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_skip_emulated_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_add_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_remove_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_tsc_scaling_ratio_frac_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_valid_efer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_is_reset_bsp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_reload_apic_access_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vector_hashing_enabled +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 pdptrs_changed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_fixed_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_gp_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reset_shadow_zero_bits_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_set_memory_region +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 __ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_decrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_exit +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init_common +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_set_key +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nfit_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nvdimm_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_ctl +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_desc_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_shutdown +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_detect_processor +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_freqs +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_frequency +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_add_key_value_param +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_remove +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_section_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_clean_vf_map +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cleanup_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_get +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_in_use +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_put +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_start +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_started +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_stop +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_add_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_in_reset +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_pci_to_accel_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_rm_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_update_class_index +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_sriov +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_vf2pf_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_iov_putmsg +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_flr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_sbr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_send_admin_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_sriov_configure +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 qat_crypto_dev_config +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_do_irq +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_get_status +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x00000000 amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 pp_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/gvt/kvmgt 0x00000000 kvmgt_mpt +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __hv_pkt_iter_next +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_first +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_ringbuffer_get_debuginfo +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_allocate_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_are_subchannels_present +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_connection +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_free_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_get_outgoing_channel +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_hvsock_device_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_proto_version +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_send_tl_connect_request +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_mpb_desc +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_chn_rescind_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_sc_create_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_setevent +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x00000000 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_prepare +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_probe +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_remove +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_resume +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_suspend +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 __mei_cldev_driver_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cancel_work +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_disable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_driver_unregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enabled +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_get_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv_nonblock +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_notif_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_rx_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_send +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_set_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_uuid +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_ver +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_deregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_device_init +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_fw_status2str +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg_resume +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_compl_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_read_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_write_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_reset +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_restart +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_start +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_stop +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_write_is_idle +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_find_cdev_by_id +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_accept +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_bind +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_close +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_connect +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_mark +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_signal +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_wait +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_node_ids +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_listen +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_open +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_pin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_poll +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_put_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_readfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_recv +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register_pinned_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_send +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unpin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vreadfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vwriteto +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_writeto +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_context_get_priv_flags +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle_priv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_destroy_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_send +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_create +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_destroy +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_notify +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_subscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_get_context_id +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_is_context_owner +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_alloc +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequeue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_detach +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enqueue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enquev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_consume_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_produce_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peek +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peekv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_send_datagram +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 mei_phy_ops +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_alloc +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_free +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_probe +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_resume +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_suspend +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-laptop 0x00000000 dell_micmute_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_register +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_unregister +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_call_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_register_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_unregister_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call_filter +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_error +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_find_token +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_register_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_unregister_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_descriptor_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_hotfix +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_interface_version +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_size +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x00000000 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_update +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_write +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_raw_cmd +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_simple_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_s0ix_counter_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_add_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_clear_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_eventconfig +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_evtname +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_pltconfig_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_reset_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_update_events +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/thinkpad_acpi 0x00000000 tpacpi_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 set_required_buffer_size +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_block_query +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_probe +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_remove +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_to_pcmcia_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_disable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_enable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_read_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_register_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_unregister_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_write_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_get_guid +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalempty +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalinsert +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalremove +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_read_trips +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_add +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_remove +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_add_read_only_critical_trip +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_exit +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_init +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_interrupt_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 __tb_ring_enqueue +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_data +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_immediate +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_text +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_create_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_find +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_free_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_get_next +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_remove +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_rx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_tx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_free +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll_complete +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_start +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_stop +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_service_type +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_disable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_enable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_find_by_uuid +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_request +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_response +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_type +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_register +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_unregister +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_remove +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_link +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_ml_capabilities +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_get +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_put +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_int_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_clear_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_set_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_clear +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_reset +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_setup +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_start +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stop_streams +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_assign +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_decouple +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_drsm_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_get_spbmaxfifo +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_release +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_dpibr +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_lpib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_spib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_spbcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_link_free_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_stream_free_all +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_acomp_get_eld +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_display_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_register_notifier +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_set_bclk +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_set_codec_wakeup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_sync_audio_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_port_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8825 0x00000000 nau8825_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt286 0x00000000 rt286_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt298 0x00000000 rt298_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5651 0x00000000 rt5651_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_suspend +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 intel_sst_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 relocate_imr_addr_mrfld +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_alloc_drv_context +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_configure_runtime_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_suspend_late +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_wait_for_ready +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_legacy_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_broadwell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_cherrytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_haswell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_dump +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_rx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_tx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_mailbox_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_register_poll +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_reset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_stall +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_fromio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_toio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_alloc_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_free_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyfrom +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyto +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_get_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_put_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_get_offset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_reload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_unload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_register +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_unregister_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_restore +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_save +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_drop_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_fini +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_reply_find_msg +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nopm +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nowait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_wait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_msg_reply_complete +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_device_set_config +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 is_skl_dsp_running +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 kbl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_clear_module_cnt +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_get_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_put_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_instance_id_map +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_bind_unbind +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_create_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_delete_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_get_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_init_instance +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_load_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_restore_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_save_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_d0ix +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_dx +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_pipeline_state +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_unload_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_put_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_ipc_load_library +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_check_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_codec_list +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_machine +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_name_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_package_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_load +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_bind_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove_all +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clear_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fill_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ibp_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_extlog_mem_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tss_limit_invalid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __unwind_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _copy_from_iter_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_psd_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_target_system_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alternatives_patched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_df_indirect_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nodes_per_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_has_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_misc_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_phys_wc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_wb_cache_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpu_physical_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_erms +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_orig +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_rep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_ctrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_set_perf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_has_xfeatures +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_poll_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_cpu_present_to_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 del_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 e820__mapped_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edid_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 events_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fprestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpstate_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__save +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu_kernel_xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_hwpoison_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_scattered_cpuid_leaf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_xsave_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_hypercall_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_is_hypercall_page_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_vp_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_report_panic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 injectm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pmc_slp_s0_counter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pt_handle_vmx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_bind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_is_pasid_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_unbind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ioremap_uc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remapping_cap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqd_cfg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_disable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_enable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get_or_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_unregister_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_para_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_posted_intr_wakeup_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_direct_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_fixmap_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_touch_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_inject_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_is_memory_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mcsafe_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_mcsafe_unrolled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_add_physaddr_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mxcsr_feature_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 node_to_amd_nb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_setup_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pat_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_set_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_assign_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writethrough +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_rate_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_trace_rtc_abused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptdump_walk_pgd_level_debugfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_get_pvti_cpu0_va +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_decrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_pages_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_personality_ia32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sev_enable_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slow_virt_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_banks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_get_long_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 umc_normaddr_to_sysaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_get_return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_next_frame +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pud +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_family +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_model +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_stepping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_vector_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_high_mono_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_capsule_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_variable_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_reset_system +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_update_capsule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_and_legacy_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_nic_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_in_preemptible_hcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_max_p2m_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_hotplug_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/generic.modules @@ -0,0 +1,5159 @@ +104-quad-8 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_dw +8250_exar +8250_lpss +8250_men_mcb +8250_mid +8250_moxa +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +BusLogic +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acer-wmi +acerhdf +acp_audio_dma +acpi-als +acpi_configfs +acpi_extlog +acpi_ipmi +acpi_pad +acpi_power_meter +acpi_thermal_rel +acpiphp_ibm +acquirewdt +act200l-sir +act8865-regulator +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7170 +adv7175 +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +advantechwdt +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-x86_64 +aes_ti +aesni-intel +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +aha152x_cs +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +airspy +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-ircc +alienware-wmi +alim1535_wdt +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +ambassador +amc6821 +amd +amd-rng +amd-xgbe +amd5536udc_pci +amd64_edac_mod +amd76xrom +amd8111e +amd_freq_sensitivity +amd_iommu_v2 +amdgpu +amdkfd +amilo-rfkill +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apanel +apds9300 +apds9802als +apds990x +apds9960 +apple-gmux +apple_bl +appledisplay +applesmc +appletalk +appletouch +applicom +aquantia +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcfb +arcmsr +arcnet +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3935 +as5011 +asb100 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +asus-laptop +asus-nb-wmi +asus-wireless +asus-wmi +asus_atk0110 +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlantic +atlas-ph-sensor +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avm_cs +avma1_cs +avmfritz +ax25 +ax88179_178a +axnet_cs +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish-x86_64 +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c2port-duramar2150 +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia-aesni-avx-x86_64 +camellia-aesni-avx2 +camellia-x86_64 +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +capsule-loader +carl9170 +carminefb +cassini +cast5-avx-x86_64 +cast5_generic +cast6-avx-x86_64 +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-x86_64 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipreg +chnl_net +chromeos_laptop +chromeos_pstore +ci_hdrc +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cio-dac +cirrus +cirrusfb +ck804xrom +classmate-laptop +clip +clk-cdce706 +clk-cs2000-cp +clk-palmas +clk-pwm +clk-s2mps11 +clk-si5351 +clk-twl6040 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm36651 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +com20020 +com20020-pci +com20020_cs +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_pcmcia +comedi_test +comedi_usb +comm +compal-laptop +contec_pci_dio +cordic +core +coretemp +cortina +cosm_bus +cosm_client +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpsw_ale +cpu5wdt +cpuid +cr_bllcd +cramfs +crc-itu-t +crc32-pclmul +crc32_generic +crc4 +crc7 +crc8 +crct10dif-pclmul +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_lpcs +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +crvml +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +csiostor +ct82c710 +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_cs +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +dax_pmem +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +dell-laptop +dell-rbtn +dell-smbios +dell-smbios-smm +dell-smbios-wmi +dell-smm-hwmon +dell-smo8800 +dell-wmi +dell-wmi-aio +dell-wmi-descriptor +dell-wmi-led +dell_rbu +denali +denali_pci +des3_ede-x86_64 +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dp83822 +dp83848 +dp83867 +dpt_i2o +dptf_power +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dtl1_cs +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-pci +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +e752x_edac +earth-pt1 +earth-pt3 +eata +ebc-c384_wdt +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_bhf +ec_sys +ecdh_generic +echainiv +echo +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efi-pstore +efi_test +efibc +efs +egalax_ts_serial +ehset +einj +ektf2127 +elan_i2c +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_pcmcia +ems_usb +emu10k1-gp +ena +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +epat +epia +epic100 +eql +esas2r +esb2rom +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +eurotechwdt +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-intel-cht-wc +extcon-intel-int3496 +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +f81534 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fjes +fl512 +fld +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +fmvj18x_cs +fnic +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-mgr +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +geneve +genwqe_card +gf2k +gfs2 +ghash-clmulni-intel +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glue_helper +gluebi +gma500_gfx +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-104-dio-48e +gpio-104-idi-48 +gpio-104-idio-16 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-crystalcove +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-f7188x +gpio-generic +gpio-gpio-mm +gpio-ich +gpio-it87 +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-ml-ioh +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-sch +gpio-sch311x +gpio-tpic2810 +gpio-tps65086 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-vx855 +gpio-wcove +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-ws16c48 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gr_udc +grace +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdaps +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +hecubafb +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfi1 +hfs +hfsplus +hgafb +hi311x +hi6210-i2s +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-hyperv +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hinic +hio +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horizon +horus3a +hostap +hostap_cs +hostap_pci +hostap_plx +hp-wireless +hp-wmi +hp03 +hp100 +hp206c +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hsi +hsi_char +hso +hsr +hsu_dma +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hv_balloon +hv_netvsc +hv_sock +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +hx711 +hx8357 +hyperv-keyboard +hyperv_fb +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-cbus-gpio +i2c-cht-wc +i2c-cros-ec-tunnel +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-ismt +i2c-kempld +i2c-matroxfb +i2c-mlxcpld +i2c-mux +i2c-mux-gpio +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-reg +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i3000_edac +i3200_edac +i40e +i40evf +i40iw +i5000_edac +i5100_edac +i5400_edac +i5500_temp +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i82092 +i82975x_edac +i915 +iTCO_vendor_support +iTCO_wdt +ib700wdt +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_qib +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibm_rtl +ibmaem +ibmasm +ibmasr +ibmpex +ichxrom +icp +icp_multi +icplus +ics932s401 +ideapad-laptop +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ie31200_edac +ie6xx_wdt +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int3400_thermal +int3402_thermal +int3403_thermal +int3406_thermal +int340x_thermal_zone +int51x1 +intel-cstate +intel-hid +intel-ish-ipc +intel-ishtp +intel-ishtp-hid +intel-lpss +intel-lpss-acpi +intel-lpss-pci +intel-rapl-perf +intel-rng +intel-rst +intel-smartconnect +intel-vbtn +intel-wmi-thunderbolt +intel-xway +intel_bxt_pmic_thermal +intel_bxtwc_tmu +intel_cht_int33fe +intel_int0002_vgpio +intel_ips +intel_menlow +intel_oaktrail +intel_pch_thermal +intel_pmc_ipc +intel_powerclamp +intel_punit_ipc +intel_qat +intel_quark_i2c_gpio +intel_rapl +intel_soc_dts_iosf +intel_soc_dts_thermal +intel_soc_pmic_bxtwc +intel_soc_pmic_chtdc_ti +intel_telemetry_core +intel_telemetry_debugfs +intel_telemetry_pltdrv +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +intelfb +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioatdma +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irqbypass +irtty-sir +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks0127 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kvmgt +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-adp5520 +leds-apu +leds-as3645a +leds-bd2802 +leds-blinkm +leds-clevo-mail +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mlxcpld +leds-mt6323 +leds-nic78bx +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-ss4200 +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +liquidio +liquidio_vf +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmc +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp8755 +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macb_pci +machzwd +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77693-haptic +max77693-regulator +max77693_charger +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mce-inject +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bitbang +mdio-cavium +mdio-gpio +mdio-thunder +me4000 +me_daq +media +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mei-me +mei-txe +mei_phy +mei_wdt +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +meye +mf6x4 +mgag200 +mgc +mi0283qt +mic_bus +mic_card +mic_cosm +mic_host +mic_x100_dma +michael_mic +micrel +microchip +microread +microread_i2c +microread_mei +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx-platform +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxcpld-hotplug +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi-laptop +msi-wmi +msi001 +msi2500 +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxm-wmi +mxser +mxuport +myri10ge +n411 +n5pf +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +nettel +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfit +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni903x_wdt +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_common +ni_labpc_cs +ni_labpc_isadma +ni_labpc_pci +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nic7018_wdt +nicpf +nicstar +nicvf +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nosy +notifier-error-inject +nouveau +nozomi +ns558 +ns83820 +nsc-ircc +nsh +ntb +ntb_hw_idt +ntb_hw_intel +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nv_tco +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_xilinx_wdt +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opa_vnic +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +padlock-aes +padlock-sha +palmas-pwrbutton +palmas-regulator +palmas_gpadc +panasonic-laptop +pandora_bl +panel +panel-raspberrypi-touchscreen +paride +parkbd +parman +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pblk +pc300too +pc87360 +pc87413_wdt +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-hyperv +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmcia +pcmcia_core +pcmcia_rsrc +pcmciamtd +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_pcmcia +peak_usb +peaq-wmi +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +pi433 +pinctrl-broxton +pinctrl-cannonlake +pinctrl-cedarfork +pinctrl-denverton +pinctrl-geminilake +pinctrl-intel +pinctrl-lewisburg +pinctrl-mcp23s08 +pinctrl-sunrisepoint +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn544_mei +pn_pep +pnd2_edac +poly1305-x86_64 +poly1305_generic +port100 +powermate +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +processor_thermal_device +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +ptlrpc +ptp +ptp_kvm +pulse8-cec +pulsedlight-lidar-lite-v2 +punit_atom_debug +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvpanic +pvrusb2 +pwc +pwm-beeper +pwm-cros-ec +pwm-lp3943 +pwm-lpss +pwm-lpss-pci +pwm-lpss-platform +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pxa27x_udc +qat_dh895xcc +qat_dh895xccvf +qca8k +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qedr +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas408 +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quatech_daqp_cs +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +ray_cs +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20-x86_64 +salsa20_generic +samsung-keypad +samsung-laptop +samsung-q10 +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sb_edac +sbc60xxwdt +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbni +sbp_target +sbs +sbs-battery +sbs-charger +sbs-manager +sbshc +sc1200wdt +sc16is7xx +sc92031 +sca3000 +scb2_flash +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scif +scif_bus +scr24x_cs +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdio_uart +sdricoh_cs +sedlbauer_cs +seed +sensorhub +ser_gigaset +serial2002 +serial_cs +serial_ir +serio_raw +sermouse +serpent-avx-x86_64 +serpent-avx2 +serpent-sse2-x86_64 +serpent_generic +serport +ses +sfc +sfc-falcon +sh_veu +sha1-mb +sha1-ssse3 +sha256-mb +sha256-ssse3 +sha3_generic +sha512-mb +sha512-ssse3 +shark2 +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis-agp +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skd +skfp +skge +skx_edac +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +sl811_cs +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc91c92_cs +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-als4000 +snd-asihpi +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-compress +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-ext-core +snd-hda-intel +snd-hdmi-lpe-audio +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel-sst-acpi +snd-intel-sst-core +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-skl_nau88l25_max98357a +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-acpi +snd-soc-acpi-intel-match +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7213 +snd-soc-da7219 +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdac-hdmi +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kbl_rt5663_max98927 +snd-soc-kbl_rt5663_rt5514_max98927 +snd-soc-max98090 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-nau8825 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rl6347a +snd-soc-rt286 +snd-soc-rt298 +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5651 +snd-soc-rt5663 +snd-soc-rt5670 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-skl +snd-soc-skl-ipc +snd-soc-skl_nau88l25_ssm4567 +snd-soc-skl_rt286 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sst-acpi +snd-soc-sst-atom-hifi2-platform +snd-soc-sst-baytrail-pcm +snd-soc-sst-bdw-rt5677-mach +snd-soc-sst-broadwell +snd-soc-sst-bxt-da7219_max98357a +snd-soc-sst-bxt-rt298 +snd-soc-sst-byt-cht-da7213 +snd-soc-sst-byt-cht-es8316 +snd-soc-sst-bytcr-rt5640 +snd-soc-sst-bytcr-rt5651 +snd-soc-sst-cht-bsw-max98090_ti +snd-soc-sst-cht-bsw-rt5645 +snd-soc-sst-cht-bsw-rt5672 +snd-soc-sst-dsp +snd-soc-sst-firmware +snd-soc-sst-haswell +snd-soc-sst-haswell-pcm +snd-soc-sst-ipc +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-us122l +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-vxpocket +snd-ymfpci +snic +snps_udc_core +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-btf-mpx +sony-laptop +soundcore +sp2 +sp5100_tco +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +spectrum_cs +speedfax +speedstep-lib +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spl +splat +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +stx104 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3-wmi +surface3_button +surface3_spi +surfacepro3_button +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teles_cs +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thinkpad_acpi +thmc50 +thunder_bgx +thunder_xcv +thunderbolt +thunderbolt-net +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-dac082s085 +ti-lmu +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +tinydrm +tipc +tlan +tlclk +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmem +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +topstar-laptop +torture +toshiba_acpi +toshiba_bluetooth +toshiba_haps +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_nsc +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsi568 +tsi57x +tsi721_mport +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish-avx-x86_64 +twofish-x86_64 +twofish-x86_64-3way +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +uPD98402 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_hv_generic +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +usnic_verbs +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vboxguest +vboxsf +vboxvideo +vcan +vcnl4000 +veml6070 +ves1820 +ves1x93 +veth +vfio +vfio-pci +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-camera +via-cputemp +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via686a +via_wdt +viafb +video +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videocodec +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +visorbus +visorhba +visorinput +visornic +vitesse +vivid +vl6180 +vlsi_ir +vmac +vmd +vme_ca91cx42 +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmw_pvrdma +vmw_pvscsi +vmw_vmci +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmw_vsock_vmci_transport +vmwgfx +vmxnet3 +vop +vop_bus +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vpx3220 +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +wafer5823wdt +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd719x +wdat_wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +winbond-cir +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlcore +wlcore_sdio +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wmi +wmi-bmof +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x38_edac +x86_pkg_temp_thermal +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-hwmon +xgifb +xhci-plat-hcd +xilinx-spi +xilinx_gmii2rgmii +xillybus_core +xillybus_pcie +xirc2ps_cs +xircom_cb +xor +xpad +xr_usb_serial_common +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z3fold +zatm +zaurus +zavl +zcommon +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zfs +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +znvpair +zpa2326 +zpa2326_i2c +zpa2326_spi +zpios +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zstd_compress +zunicode +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/generic.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/generic.retpoline @@ -0,0 +1,378 @@ +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +amdgpu.ko core_link_enable_stream callq *%rax +camellia-aesni-avx-x86_64.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx-x86_64.ko camellia_xts_crypt_16way callq *%r9 +camellia-aesni-avx2.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx2.ko camellia_xts_crypt_32way callq *%r9 +hpwdt.ko asminline_call callq *%r12 +hv_vmbus.ko hv_post_message callq *%rsi +hv_vmbus.ko vmbus_set_event callq *%rax +kvm-intel.ko vmx_handle_external_intr callq *%rax +kvm.ko em_loop callq *%rdx +kvm.ko fastop callq *%rsi +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +mlx4_ib.ko set_guid_rec jmpq *%rdx +pci-hyperv.ko hv_irq_unmask callq *%r12 +vmlinux .altinstr_replacement callq *%rbx +vmlinux .altinstr_replacement jmpq *%r10 +vmlinux .altinstr_replacement jmpq *%r11 +vmlinux .altinstr_replacement jmpq *%r12 +vmlinux .altinstr_replacement jmpq *%r13 +vmlinux .altinstr_replacement jmpq *%r14 +vmlinux .altinstr_replacement jmpq *%r15 +vmlinux .altinstr_replacement jmpq *%r8 +vmlinux .altinstr_replacement jmpq *%r9 +vmlinux .altinstr_replacement jmpq *%rax +vmlinux .altinstr_replacement jmpq *%rbp +vmlinux .altinstr_replacement jmpq *%rbx +vmlinux .altinstr_replacement jmpq *%rcx +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdx +vmlinux .altinstr_replacement jmpq *%rsi +vmlinux MP_bus_info callq *%rax +vmlinux MP_bus_info callq *%rax +vmlinux MP_processor_info callq *%rax +vmlinux __early_ioremap callq *%r9 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __x86_indirect_thunk_r10 jmpq *%r10 +vmlinux __x86_indirect_thunk_r11 jmpq *%r11 +vmlinux __x86_indirect_thunk_r12 jmpq *%r12 +vmlinux __x86_indirect_thunk_r13 jmpq *%r13 +vmlinux __x86_indirect_thunk_r14 jmpq *%r14 +vmlinux __x86_indirect_thunk_r15 jmpq *%r15 +vmlinux __x86_indirect_thunk_r8 jmpq *%r8 +vmlinux __x86_indirect_thunk_r9 jmpq *%r9 +vmlinux __x86_indirect_thunk_rax jmpq *%rax +vmlinux __x86_indirect_thunk_rbp jmpq *%rbp +vmlinux __x86_indirect_thunk_rbx jmpq *%rbx +vmlinux __x86_indirect_thunk_rcx jmpq *%rcx +vmlinux __x86_indirect_thunk_rdi jmpq *%rdi +vmlinux __x86_indirect_thunk_rdx jmpq *%rdx +vmlinux __x86_indirect_thunk_rsi jmpq *%rsi +vmlinux acpi_init jmpq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_numa_x2apic_affinity_init callq *%rax +vmlinux acpi_parse_x2apic callq *%rax +vmlinux acpi_table_parse callq *%r13 +vmlinux acpi_table_parse_entries_array callq *%rax +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux amd_numa_init callq *%rax +vmlinux apic_bsp_setup callq *%rax +vmlinux apic_bsp_setup callq *%rdx +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux arch_probe_nr_irqs callq *%rax +vmlinux bpf_prog_load jmpq *%rsp +vmlinux bunzip2 callq *%r13 +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux calgary_iommu_init callq *%rax +vmlinux cgroup_init callq *%rax +vmlinux cgroup_init_subsys callq *%rdx +vmlinux check_bugs jmpq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux con_init callq *%rax +vmlinux console_init callq *%rax +vmlinux continue_block jmpq *%rdi +vmlinux core_restore_code jmpq *%r8 +vmlinux default_acpi_madt_oem_check callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config jmpq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux dm_init callq *%rax +vmlinux dm_init callq *%rax +vmlinux do_early_param callq *%rax +vmlinux e820__memory_setup callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_iounmap callq *%rax +vmlinux early_pci_scan_bus callq *%rax +vmlinux early_platform_driver_probe callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux edd_init callq *%rax +vmlinux efi64_thunk callq *%rbx +vmlinux efi_call callq *%rdi +vmlinux efi_enter32 callq *%rdi +vmlinux efi_memattr_apply_permissions callq *%r15 +vmlinux efi_memblock_x86_reserve_range jmpq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux entry_SYSCALL_64_trampoline jmpq *%rdi +vmlinux get_bits callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux hyperv_flush_tlb_others callq *%r14 +vmlinux hyperv_flush_tlb_others callq *%rax +vmlinux hyperv_flush_tlb_others_ex callq *%r15 +vmlinux hyperv_flush_tlb_others_ex callq *%rax +vmlinux i8042_probe callq *%rbx +vmlinux identify_boot_cpu callq *%rax +vmlinux identity_mapped callq *%rdx +vmlinux ima_calc_boot_aggregate callq *%rax +vmlinux init_IRQ callq *%rax +vmlinux init_ISA_irqs callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_mem_mapping callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux io_apic_init_mappings callq *%rax +vmlinux iommu_go_to_state jmpq *%rdi +vmlinux irq_remap_enable_fault_handling callq *%rdx +vmlinux irq_remapping_enable callq *%rdx +vmlinux irq_remapping_prepare callq *%rax +vmlinux irq_remapping_prepare callq *%rax +vmlinux kernel_init_freeable callq *%rax +vmlinux lapic_cal_handler callq *%rax +vmlinux load_uefi_certs callq *%rax +vmlinux map_vsyscall callq *%rax +vmlinux mcheck_intel_therm_init callq *%rax +vmlinux msr_init callq *%rax +vmlinux mtrr_bp_init callq *%rax +vmlinux mtrr_cleanup callq *%r8 +vmlinux mtrr_trim_uncached_memory callq *%r8 +vmlinux native_init_IRQ callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux numa_init callq *%rbx +vmlinux p4_pmu_init callq *%rdx +vmlinux parse_efi_signature_list callq *%rax +vmlinux parse_efi_signature_list callq *%rax +vmlinux pci_arch_init callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_mmcfg_e7520 callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_intel_945 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_embed_first_chunk callq *%r13 +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pnpacpi_option_resource jmpq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux print_APIC_field callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux probe_list2 callq *%rax +vmlinux pvh_start_xen jmpq *%rax +vmlinux rc_read callq *%rax +vmlinux rc_read callq *%rax +vmlinux reboot_setup jmpq *%rdx +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux regulator_late_cleanup callq *%rax +vmlinux restore_image jmpq *%rcx +vmlinux ret_from_fork callq *%rbx +vmlinux return_to_handler jmpq *%rdi +vmlinux secondary_startup_64 jmpq *%rax +vmlinux security_init callq *%rax +vmlinux serial8250_isa_init_ports callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon jmpq *%rax +vmlinux sfi_parse_cpus callq *%rax +vmlinux sme_encrypt_execute callq *%rax +vmlinux smp_init callq *%rax +vmlinux start_kernel callq *%rax +vmlinux start_kernel callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux tboot_probe callq *%rax +vmlinux timekeeping_init callq *%rax +vmlinux trap_init callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_init callq *%rax +vmlinux tsc_init callq *%rax +vmlinux unknown_bootoption callq *%rax +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%rax +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%rax +vmlinux unpack_to_rootfs callq *%r15 +vmlinux unxz callq *%r15 +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz jmpq *%rax +vmlinux update_mp_table jmpq *%rax +vmlinux wakeup_long64 jmpq *%rax +vmlinux write_buffer callq *%rax +vmlinux write_byte callq *%rcx +vmlinux x86_early_init_platform_quirks callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux xen_foreach_remap_area callq *%r12 +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_mc_flush callq *%rax +xen-privcmd.ko privcmd_ioctl callq *%rax --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/lowlatency +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/lowlatency @@ -0,0 +1,22722 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_pending_timer +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/nfit/nfit 0x00000000 to_nfit_uuid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_levels +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_handles_brightness_key_presses +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_register +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_set_dmi_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_unregister +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x00000000 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/firmware/dcdbas 0x00000000 dcdbas_smi_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/amdkfd/amdkfd 0x00000000 kgd2kfd_init +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 __ishtp_cl_driver_register +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_bus_remove_all_clients +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_allocate +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_connect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_disconnect +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_driver_unregister +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_flush_queues +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_free +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_io_rb_recycle +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_link +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_send +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_cl_unlink +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_device_init +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_fw_cl_by_uuid +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_get_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_put_device +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_recv +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_register_event_cb +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_compl_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_reset_handler +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_resume +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_send_suspend +EXPORT_SYMBOL drivers/hid/intel-ish-hid/intel-ishtp 0x00000000 ishtp_start +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_bind_pasid +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_free_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_init_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalid_ppr_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_set_invalidate_ctx_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x00000000 amd_iommu_unbind_pasid +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_pci_cfg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_write +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_count +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_link_state +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_map +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_rx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_tx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_get_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_internal_loopback +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_rx_tx_enable +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_set_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_set_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_init_hw +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_setup_link +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_rdma_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_register_driver +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_unregister_driver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_read +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_write +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_static_ops +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_io_bytes_mec +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_destroy +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_init +EXPORT_SYMBOL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_simple_command +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x00000000 sony_pic_camera_command +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 __wmi_driver_register +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 wmi_driver_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_host_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_art +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_trt +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_add +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_remove +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x00000000 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_free +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_new +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_bm_status +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_label +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_pciaddr +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_temperature +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_version +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_register_event_notifier +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_reset +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_otprotect +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_wmode +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_submit_pbio +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_unregister_event_notifier +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuestIDC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertAreQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Add +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2V +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2WeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertShouldPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertFromErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertToErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleAllocZ +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleDump +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetFreeSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleGetHeapSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleInit +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleRelocate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTHeapSimpleSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogClearFileDelayFlag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCloneRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDumpPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlush +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushToLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetCustomPrefixCallback +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstanceThread +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteCom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteDebugger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdErr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdOut +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFreeEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemReallocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdFromSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdToSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndexAndId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetMaxCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuOnline +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPresent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuWorkPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAll +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAllIsConcurrentSafe +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnOthers +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPair +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPairIsConcurrentExecSupported +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnSpecific +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpPokeCpu +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerSignalEvent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTProcSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0AssertPanicSystem +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Init +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemAreKrnlAndUsrDifferent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemExecDonate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddress +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddressR3 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocContTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocLowTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPageTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysNCTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjEnterPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjGetPagePhysAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjIsMapping +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjProtect +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0ProcHandleSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Term +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexIsOwned +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResumeDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexTryRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockAcquire +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrConvertHexBytes +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyP +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatNumber +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeSetUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateF +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadFromNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInInterrupt +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInitialized +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsMain +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfAlive +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfKnown +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadNativeSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptDisable +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsEnabled +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPendingTrusty +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptRestore +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSelfName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleep +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleepNoLog +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadYield +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeExplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeImplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeIsLeapYear +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNormalize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNow +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCanDoHighResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerChangeInterval +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerGetSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerReleaseSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerRequestSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStart +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStop +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertExpr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFile +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFunction +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_u32RTAssertLine +EXPORT_SYMBOL vmlinux 0x00000000 IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___preempt_schedule +EXPORT_SYMBOL vmlinux 0x00000000 ___preempt_schedule_notrace +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cachemode2pte_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fentry__ +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_is_locked_down +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __max_logical_packages +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy +EXPORT_SYMBOL vmlinux 0x00000000 __memmove +EXPORT_SYMBOL vmlinux 0x00000000 __memset +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __node_distance +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __preempt_count +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte2cachemode_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r10 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r11 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r12 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r13 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r14 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r15 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r8 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_r9 +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rax +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbp +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rbx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rcx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdi +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rdx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_rsi +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print +EXPORT_SYMBOL vmlinux 0x00000000 acpi_debug_print_raw +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_wakeup_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_finish_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_initialize_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_raw_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_pxm_to_online_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mark_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mask_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_debugger_thread_id +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0x00000000 acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_terminate_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_trace_point +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unmap_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_debugger +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_status_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_trace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_ut_value_exit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_complete_ppr +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_device_info +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_clear_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_direct_map +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_enable_v2 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_domain_set_gcr3 +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_enable_device_erratum +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_page +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_flush_tlb +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_get_v2_domain +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_banks +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_max_counters +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_get_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_set_reg +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_pc_supported +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ga_log_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_register_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_rlookup_table +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_unregister_ppr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_update_ga +EXPORT_SYMBOL vmlinux 0x00000000 amd_iommu_v2_supported +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_dma_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_free_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_reserve_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_add +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_del +EXPORT_SYMBOL vmlinux 0x00000000 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x00000000 boot_option_idle_override +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 convert_art_to_tsc +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_enhanced_fast_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_string +EXPORT_SYMBOL vmlinux 0x00000000 copy_user_generic_unrolled +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_dr7 +EXPORT_SYMBOL vmlinux 0x00000000 cpu_info +EXPORT_SYMBOL vmlinux 0x00000000 cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlbstate +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tss_rw +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_task +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 device_private_entry_fault +EXPORT_SYMBOL vmlinux 0x00000000 device_private_key +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap_pages +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_clear_fs +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_default +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_ext +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_rdmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_refcount +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_wrmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_pm_trace +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_amd_iommu +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_cpu_entry_area +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_dev_data +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_ibs_caps +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_new +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_put +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_remove +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_register +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_unregister +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_alloc_locked_page +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_fault +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_get_pfns +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_range_done +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_get +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wt +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_available +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_call_pmic_bus_access_notifier_chain +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_modify +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_acquire +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_release +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_read +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_register_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_unregister_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_write +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 legacy_pic +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 migrate_vma +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msrs_alloc +EXPORT_SYMBOL vmlinux 0x00000000 msrs_free +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 native_io_delay +EXPORT_SYMBOL vmlinux 0x00000000 native_load_gs_index +EXPORT_SYMBOL vmlinux 0x00000000 native_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dax_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 numa_node +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_offset_base +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_mem_start +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_base +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 preempt_schedule +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 put_zone_device_private_or_public_page +EXPORT_SYMBOL vmlinux 0x00000000 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_irq_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_x +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_trace_device +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sev_active +EXPORT_SYMBOL vmlinux 0x00000000 sfi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 sme_active +EXPORT_SYMBOL vmlinux 0x00000000 sme_me_mask +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_num_siblings +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tboot +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 this_cpu_off +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 topology_phys_to_logical_pkg +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 translation_pre_enabled +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsc_khz +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unpoison_memory +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_probe_defer +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_fini_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_handler_flags +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_optimus_hdmi_audio +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_lock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_set_dynamic_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unlock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_base +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vmemmap_base +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 x86_apple_machine +EXPORT_SYMBOL vmlinux 0x00000000 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_acpiid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0x00000000 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x00000000 x86_hyper_type +EXPORT_SYMBOL vmlinux 0x00000000 x86_match_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_alloc_p2m_entry +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_selfballoon_init +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var +EXPORT_SYMBOL vmlinux 0x00000000 zalloc_cpumask_var_node +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x00000000 crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_cbc_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ctr_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_ecb_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_dec_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-aesni-avx-x86_64 0x00000000 camellia_xts_enc_16way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_enc_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 __camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_crypt_ctr_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_dec_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 camellia_decrypt_cbc_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 lrw_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x00000000 xts_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit_one +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_req_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 __serpent_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 lrw_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_cbc_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ctr_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_ecb_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_dec_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 serpent_xts_enc_8way_avx +EXPORT_SYMBOL_GPL arch/x86/crypto/serpent-avx-x86_64 0x00000000 xts_serpent_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x00000000 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 __twofish_enc_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 lrw_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_dec_blk_cbc_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 twofish_enc_blk_ctr_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x00000000 xts_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_incomplete_ipi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_unaccelerated_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_fast_mmio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pi_irte_update +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_ple_window +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pml_full +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_write_tsc_offset +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __x86_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 cpuid_query_maxphyaddr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 handle_mmio_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_match_dest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_set_eoi_accelerated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_ppr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_write_nodecode +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_end_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_assigned_device +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_register_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_start_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_unregister_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_default_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_in +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_handle_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_ept_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_intr_is_single_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_expired_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_find_highest_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_hv_timer_in_use +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_read +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_sw_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mce_cap_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_clear_dirty_pt_masked +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_largepage_remove_write_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_leaf_clear_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_set_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_sync_roots +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mpx_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_valid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_no_apic_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_register_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_unregister_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_l1_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_scale_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msi_irq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_skip_emulated_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_add_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_remove_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_tsc_scaling_ratio_frac_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_valid_efer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_is_reset_bsp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_reload_apic_access_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vector_hashing_enabled +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 pdptrs_changed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_fixed_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_gp_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reset_shadow_zero_bits_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_set_memory_region +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 __ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_decrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_exit +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init_common +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_set_key +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nfit_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nvdimm_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_ctl +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_desc_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_shutdown +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_detect_processor +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_freqs +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x00000000 speedstep_get_frequency +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_add_key_value_param +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_remove +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_section_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_clean_vf_map +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cleanup_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_get +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_in_use +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_put +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_start +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_started +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_stop +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_add_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_in_reset +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_pci_to_accel_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_rm_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_update_class_index +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_sriov +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_vf2pf_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_iov_putmsg +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_flr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_sbr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_send_admin_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_sriov_configure +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 qat_crypto_dev_config +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_add_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x00000000 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_do_irq +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_get_status +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x00000000 amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 pp_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/gvt/kvmgt 0x00000000 kvmgt_mpt +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __hv_pkt_iter_next +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_first +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_ringbuffer_get_debuginfo +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_allocate_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_are_subchannels_present +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_connection +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_free_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_get_outgoing_channel +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_hvsock_device_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_proto_version +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_send_tl_connect_request +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_mpb_desc +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_chn_rescind_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_sc_create_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_setevent +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x00000000 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_pin_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_pin_changed +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_prepare +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_probe +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_remove +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_resume +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_suspend +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 __mei_cldev_driver_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cancel_work +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_disable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_driver_unregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enabled +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_get_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv_nonblock +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_notif_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_rx_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_send +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_set_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_uuid +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_ver +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_deregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_device_init +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_fw_status2str +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg_resume +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_compl_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_read_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_write_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_reset +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_restart +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_start +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_stop +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_write_is_idle +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_find_cdev_by_id +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/cosm_bus 0x00000000 cosm_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/mic_bus 0x00000000 mbus_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/scif_bus 0x00000000 scif_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_register_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_device +EXPORT_SYMBOL_GPL drivers/misc/mic/bus/vop_bus 0x00000000 vop_unregister_driver +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_accept +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_bind +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_client_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_close +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_connect +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_mark +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_signal +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_fence_wait +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_node_ids +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_get_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_listen +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_open +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_pin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_poll +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_put_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_readfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_recv +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_register_pinned_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_send +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unpin_pages +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_unregister +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vreadfrom +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_vwriteto +EXPORT_SYMBOL_GPL drivers/misc/mic/scif/scif 0x00000000 scif_writeto +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_context_get_priv_flags +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle_priv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_destroy_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_send +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_create +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_destroy +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_notify +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_subscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_get_context_id +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_is_context_owner +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_alloc +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequeue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_detach +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enqueue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enquev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_consume_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_produce_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peek +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peekv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_send_datagram +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 mei_phy_ops +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_alloc +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_free +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_probe +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_resume +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_suspend +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-laptop 0x00000000 dell_micmute_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_register +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_unregister +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_call_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_register_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_unregister_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call_filter +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_error +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_find_token +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_register_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_unregister_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_descriptor_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_hotfix +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_interface_version +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_size +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x00000000 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_update +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_write +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_raw_cmd +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_simple_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_s0ix_counter_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_add_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_clear_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_eventconfig +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_evtname +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_get_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_pltconfig_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_raw_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_eventlog +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_read_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_reset_events +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_pltdata +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_sampling_period +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_set_trace_verbosity +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_telemetry_core 0x00000000 telemetry_update_events +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/thinkpad_acpi 0x00000000 tpacpi_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 set_required_buffer_size +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_block_query +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_probe +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_remove +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_to_pcmcia_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_disable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_enable_channel_interrupts +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_read_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_register_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_unregister_visor_driver +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorbus_write_channel +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_get_guid +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalempty +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalinsert +EXPORT_SYMBOL_GPL drivers/staging/unisys/visorbus/visorbus 0x00000000 visorchannel_signalremove +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_read_trips +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_add +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_remove +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_add_read_only_critical_trip +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_exit +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_init +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_interrupt_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 __tb_ring_enqueue +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_data +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_immediate +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_text +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_create_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_find +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_free_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_get_next +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_remove +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_rx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_tx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_free +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll_complete +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_start +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_stop +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_service_type +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_disable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_enable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_find_by_uuid +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_request +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_response +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_type +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_register +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_unregister +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_remove +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_link +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_ml_capabilities +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_get +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_put +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_int_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_clear_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_set_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_clear +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_reset +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_setup +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_start +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stop_streams +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_assign +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_decouple +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_drsm_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_get_spbmaxfifo +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_release +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_dpibr +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_lpib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_spib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_spbcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_link_free_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_stream_free_all +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_acomp_get_eld +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_display_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_register_notifier +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_set_bclk +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_set_codec_wakeup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_sync_audio_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_port_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8825 0x00000000 nau8825_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt286 0x00000000 rt286_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt298 0x00000000 rt298_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5651 0x00000000 rt5651_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_suspend +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 intel_sst_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 relocate_imr_addr_mrfld +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_alloc_drv_context +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_configure_runtime_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_suspend_late +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_wait_for_ready +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_legacy_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_broadwell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_cherrytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_haswell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_dump +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_rx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_tx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_mailbox_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_register_poll +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_reset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_stall +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_fromio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_toio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_alloc_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_free_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyfrom +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyto +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_get_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_put_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_get_offset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_reload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_unload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_register +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_unregister_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_restore +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_save +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_drop_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_fini +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_reply_find_msg +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nopm +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nowait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_wait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_msg_reply_complete +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_device_set_config +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 is_skl_dsp_running +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 kbl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_clear_module_cnt +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_get_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_put_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_instance_id_map +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_bind_unbind +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_create_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_delete_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_get_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_init_instance +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_load_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_restore_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_save_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_d0ix +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_dx +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_pipeline_state +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_unload_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_put_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_ipc_load_library +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_check_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_codec_list +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_machine +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_name_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_package_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_load +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_bind_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove_all +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clear_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fill_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ibp_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_extlog_mem_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tss_limit_invalid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __unwind_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _copy_from_iter_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_psd_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_target_system_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alternatives_patched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_df_indirect_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nodes_per_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_has_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_misc_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_phys_wc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_wb_cache_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpu_physical_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_erms +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_orig +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_page_rep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_ctrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_set_perf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_has_xfeatures +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_poll_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_cpu_present_to_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 del_dma_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 e820__mapped_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edid_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 events_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fprestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpstate_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__save +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu_kernel_xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_hwpoison_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_scattered_cpuid_leaf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_xsave_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_hypercall_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_is_hypercall_page_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_vp_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_report_panic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 injectm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pmc_slp_s0_counter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pt_handle_vmx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_bind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_is_pasid_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_unbind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ioremap_uc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remapping_cap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqd_cfg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_disable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_enable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get_or_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_unregister_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_para_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_posted_intr_wakeup_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_direct_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_fixmap_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_touch_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_inject_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_is_memory_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mcsafe_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_mcsafe_unrolled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_add_physaddr_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mxcsr_feature_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 node_to_amd_nb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_setup_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pat_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_set_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_assign_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writethrough +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_rate_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_trace_rtc_abused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_schedule_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptdump_walk_pgd_level_debugfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_get_pvti_cpu0_va +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_decrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_pages_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_personality_ia32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sev_enable_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slow_virt_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_banks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_get_long_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 umc_normaddr_to_sysaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_get_return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_next_frame +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pud +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_family +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_model +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_stepping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_vector_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_high_mono_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_capsule_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_variable_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_reset_system +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_update_capsule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_and_legacy_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_nic_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_max_p2m_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_hotplug_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/lowlatency.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/lowlatency.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/lowlatency.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/lowlatency.modules @@ -0,0 +1,5160 @@ +104-quad-8 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_dw +8250_exar +8250_lpss +8250_men_mcb +8250_mid +8250_moxa +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +BusLogic +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acer-wmi +acerhdf +acp_audio_dma +acpi-als +acpi_configfs +acpi_extlog +acpi_ipmi +acpi_pad +acpi_power_meter +acpi_thermal_rel +acpiphp_ibm +acquirewdt +act200l-sir +act8865-regulator +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7170 +adv7175 +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +advantechwdt +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-x86_64 +aes_ti +aesni-intel +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +aha152x_cs +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +airspy +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-ircc +alienware-wmi +alim1535_wdt +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +ambassador +amc6821 +amd +amd-rng +amd-xgbe +amd5536udc_pci +amd64_edac_mod +amd76xrom +amd8111e +amd_freq_sensitivity +amd_iommu_v2 +amdgpu +amdkfd +amilo-rfkill +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apanel +apds9300 +apds9802als +apds990x +apds9960 +apple-gmux +apple_bl +appledisplay +applesmc +appletalk +appletouch +applicom +aquantia +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcfb +arcmsr +arcnet +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3935 +as5011 +asb100 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +asus-laptop +asus-nb-wmi +asus-wireless +asus-wmi +asus_atk0110 +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlantic +atlas-ph-sensor +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avm_cs +avma1_cs +avmfritz +ax25 +ax88179_178a +axnet_cs +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish-x86_64 +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c2port-duramar2150 +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia-aesni-avx-x86_64 +camellia-aesni-avx2 +camellia-x86_64 +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +capsule-loader +carl9170 +carminefb +cassini +cast5-avx-x86_64 +cast5_generic +cast6-avx-x86_64 +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +cec-gpio +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-x86_64 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipreg +chnl_net +chromeos_laptop +chromeos_pstore +ci_hdrc +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cio-dac +cirrus +cirrusfb +ck804xrom +classmate-laptop +clip +clk-cdce706 +clk-cs2000-cp +clk-palmas +clk-pwm +clk-s2mps11 +clk-si5351 +clk-twl6040 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm36651 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +com20020 +com20020-pci +com20020_cs +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_pcmcia +comedi_test +comedi_usb +comm +compal-laptop +contec_pci_dio +cordic +core +coretemp +cortina +cosm_bus +cosm_client +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpsw_ale +cpu5wdt +cpuid +cr_bllcd +cramfs +crc-itu-t +crc32-pclmul +crc32_generic +crc4 +crc7 +crc8 +crct10dif-pclmul +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_lpcs +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +crvml +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +csiostor +ct82c710 +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_cs +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +dax_pmem +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +dell-laptop +dell-rbtn +dell-smbios +dell-smbios-smm +dell-smbios-wmi +dell-smm-hwmon +dell-smo8800 +dell-wmi +dell-wmi-aio +dell-wmi-descriptor +dell-wmi-led +dell_rbu +denali +denali_pci +des3_ede-x86_64 +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dp83822 +dp83848 +dp83867 +dpt_i2o +dptf_power +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dtl1_cs +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-pci +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +e752x_edac +earth-pt1 +earth-pt3 +eata +ebc-c384_wdt +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_bhf +ec_sys +ecdh_generic +echainiv +echo +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efi-pstore +efi_test +efibc +efs +egalax_ts_serial +ehset +einj +ektf2127 +elan_i2c +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_pcmcia +ems_usb +emu10k1-gp +ena +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +epat +epia +epic100 +eql +esas2r +esb2rom +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +eurotechwdt +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-intel-cht-wc +extcon-intel-int3496 +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +f81534 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fjes +fl512 +fld +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +fmvj18x_cs +fnic +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-mgr +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +geneve +genwqe_card +gf2k +gfs2 +ghash-clmulni-intel +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glue_helper +gluebi +gma500_gfx +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-104-dio-48e +gpio-104-idi-48 +gpio-104-idio-16 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-crystalcove +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-f7188x +gpio-generic +gpio-gpio-mm +gpio-ich +gpio-it87 +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-ml-ioh +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-sch +gpio-sch311x +gpio-tpic2810 +gpio-tps65086 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-vx855 +gpio-wcove +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-ws16c48 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gr_udc +grace +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdaps +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +hecubafb +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfi1 +hfs +hfsplus +hgafb +hi311x +hi6210-i2s +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-hyperv +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hinic +hio +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horizon +horus3a +hostap +hostap_cs +hostap_pci +hostap_plx +hp-wireless +hp-wmi +hp03 +hp100 +hp206c +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hsi +hsi_char +hso +hsr +hsu_dma +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hv_balloon +hv_netvsc +hv_sock +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +hx711 +hx8357 +hyperv-keyboard +hyperv_fb +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-cbus-gpio +i2c-cht-wc +i2c-cros-ec-tunnel +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-ismt +i2c-kempld +i2c-matroxfb +i2c-mlxcpld +i2c-mux +i2c-mux-gpio +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-reg +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i3000_edac +i3200_edac +i40e +i40evf +i40iw +i5000_edac +i5100_edac +i5400_edac +i5500_temp +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i82092 +i82975x_edac +i915 +iTCO_vendor_support +iTCO_wdt +ib700wdt +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_qib +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibm_rtl +ibmaem +ibmasm +ibmasr +ibmpex +ichxrom +icp +icp_multi +icplus +ics932s401 +ideapad-laptop +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ie31200_edac +ie6xx_wdt +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int3400_thermal +int3402_thermal +int3403_thermal +int3406_thermal +int340x_thermal_zone +int51x1 +intel-cstate +intel-hid +intel-ish-ipc +intel-ishtp +intel-ishtp-hid +intel-lpss +intel-lpss-acpi +intel-lpss-pci +intel-rapl-perf +intel-rng +intel-rst +intel-smartconnect +intel-vbtn +intel-wmi-thunderbolt +intel-xway +intel_bxt_pmic_thermal +intel_bxtwc_tmu +intel_cht_int33fe +intel_int0002_vgpio +intel_ips +intel_menlow +intel_oaktrail +intel_pch_thermal +intel_pmc_ipc +intel_powerclamp +intel_punit_ipc +intel_qat +intel_quark_i2c_gpio +intel_rapl +intel_soc_dts_iosf +intel_soc_dts_thermal +intel_soc_pmic_bxtwc +intel_soc_pmic_chtdc_ti +intel_telemetry_core +intel_telemetry_debugfs +intel_telemetry_pltdrv +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +intelfb +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioatdma +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irqbypass +irtty-sir +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks0127 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kvmgt +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-adp5520 +leds-apu +leds-as3645a +leds-bd2802 +leds-blinkm +leds-clevo-mail +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mlxcpld +leds-mt6323 +leds-nic78bx +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-ss4200 +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +liquidio +liquidio_vf +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmc +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp8755 +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macb_pci +machzwd +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77693-haptic +max77693-regulator +max77693_charger +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mce-inject +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bitbang +mdio-cavium +mdio-gpio +mdio-thunder +me4000 +me_daq +media +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mei-me +mei-txe +mei_phy +mei_wdt +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +meye +mf6x4 +mgag200 +mgc +mi0283qt +mic_bus +mic_card +mic_cosm +mic_host +mic_x100_dma +michael_mic +micrel +microchip +microread +microread_i2c +microread_mei +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx-platform +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxcpld-hotplug +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi-laptop +msi-wmi +msi001 +msi2500 +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxm-wmi +mxser +mxuport +myri10ge +n411 +n5pf +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +nettel +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfit +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni903x_wdt +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_common +ni_labpc_cs +ni_labpc_isadma +ni_labpc_pci +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nic7018_wdt +nicpf +nicstar +nicvf +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nosy +notifier-error-inject +nouveau +nozomi +ns558 +ns83820 +nsc-ircc +nsh +ntb +ntb_hw_idt +ntb_hw_intel +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nv_tco +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_xilinx_wdt +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opa_vnic +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +padlock-aes +padlock-sha +palmas-pwrbutton +palmas-regulator +palmas_gpadc +panasonic-laptop +pandora_bl +panel +panel-raspberrypi-touchscreen +paride +parkbd +parman +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pblk +pc300too +pc87360 +pc87413_wdt +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-hyperv +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmcia +pcmcia_core +pcmcia_rsrc +pcmciamtd +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_pcmcia +peak_usb +peaq-wmi +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +pi433 +pinctrl-broxton +pinctrl-cannonlake +pinctrl-cedarfork +pinctrl-denverton +pinctrl-geminilake +pinctrl-intel +pinctrl-lewisburg +pinctrl-mcp23s08 +pinctrl-sunrisepoint +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn544_mei +pn_pep +pnd2_edac +poly1305-x86_64 +poly1305_generic +port100 +powermate +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +processor_thermal_device +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +ptlrpc +ptp +ptp_kvm +pulse8-cec +pulsedlight-lidar-lite-v2 +punit_atom_debug +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvpanic +pvrusb2 +pwc +pwm-beeper +pwm-cros-ec +pwm-lp3943 +pwm-lpss +pwm-lpss-pci +pwm-lpss-platform +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pxa27x_udc +qat_dh895xcc +qat_dh895xccvf +qca8k +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qedr +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas408 +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quatech_daqp_cs +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +ray_cs +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20-x86_64 +salsa20_generic +samsung-keypad +samsung-laptop +samsung-q10 +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sb_edac +sbc60xxwdt +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbni +sbp_target +sbs +sbs-battery +sbs-charger +sbs-manager +sbshc +sc1200wdt +sc16is7xx +sc92031 +sca3000 +scb2_flash +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scif +scif_bus +scr24x_cs +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdio_uart +sdricoh_cs +sedlbauer_cs +seed +sensorhub +ser_gigaset +serial2002 +serial_cs +serial_ir +serio_raw +sermouse +serpent-avx-x86_64 +serpent-avx2 +serpent-sse2-x86_64 +serpent_generic +serport +ses +sfc +sfc-falcon +sh_veu +sha1-mb +sha1-ssse3 +sha256-mb +sha256-ssse3 +sha3_generic +sha512-mb +sha512-ssse3 +shark2 +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis-agp +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skd +skfp +skge +skx_edac +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +sl811_cs +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc91c92_cs +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-als4000 +snd-asihpi +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-compress +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-ext-core +snd-hda-intel +snd-hdmi-lpe-audio +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel-sst-acpi +snd-intel-sst-core +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-skl_nau88l25_max98357a +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-acpi +snd-soc-acpi-intel-match +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7213 +snd-soc-da7219 +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdac-hdmi +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kbl_rt5663_max98927 +snd-soc-kbl_rt5663_rt5514_max98927 +snd-soc-max98090 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-nau8825 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rl6347a +snd-soc-rt286 +snd-soc-rt298 +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5651 +snd-soc-rt5663 +snd-soc-rt5670 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-skl +snd-soc-skl-ipc +snd-soc-skl_nau88l25_ssm4567 +snd-soc-skl_rt286 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sst-acpi +snd-soc-sst-atom-hifi2-platform +snd-soc-sst-baytrail-pcm +snd-soc-sst-bdw-rt5677-mach +snd-soc-sst-broadwell +snd-soc-sst-bxt-da7219_max98357a +snd-soc-sst-bxt-rt298 +snd-soc-sst-byt-cht-da7213 +snd-soc-sst-byt-cht-es8316 +snd-soc-sst-bytcr-rt5640 +snd-soc-sst-bytcr-rt5651 +snd-soc-sst-cht-bsw-max98090_ti +snd-soc-sst-cht-bsw-rt5645 +snd-soc-sst-cht-bsw-rt5672 +snd-soc-sst-dsp +snd-soc-sst-firmware +snd-soc-sst-haswell +snd-soc-sst-haswell-pcm +snd-soc-sst-ipc +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-us122l +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-vxpocket +snd-ymfpci +snic +snps_udc_core +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-btf-mpx +sony-laptop +soundcore +sp2 +sp5100_tco +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +spectrum_cs +speedfax +speedstep-lib +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spl +splat +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +stx104 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3-wmi +surface3_button +surface3_spi +surfacepro3_button +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teles_cs +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thinkpad_acpi +thmc50 +thunder_bgx +thunder_xcv +thunderbolt +thunderbolt-net +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-dac082s085 +ti-lmu +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +tinydrm +tipc +tlan +tlclk +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmem +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +topstar-laptop +torture +toshiba_acpi +toshiba_bluetooth +toshiba_haps +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_nsc +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsi568 +tsi57x +tsi721_mport +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish-avx-x86_64 +twofish-x86_64 +twofish-x86_64-3way +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +uPD98402 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_hv_generic +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +usnic_verbs +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vboxguest +vboxsf +vboxvideo +vcan +vcnl4000 +veml6070 +ves1820 +ves1x93 +veth +vfio +vfio-pci +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-camera +via-cputemp +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via686a +via_wdt +viafb +video +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videocodec +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +visorbus +visorhba +visorinput +visornic +vitesse +vivid +vl6180 +vlsi_ir +vmac +vmd +vme_ca91cx42 +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmw_pvrdma +vmw_pvscsi +vmw_vmci +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmw_vsock_vmci_transport +vmwgfx +vmxnet3 +vop +vop_bus +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vpx3220 +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +wafer5823wdt +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd719x +wdat_wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +winbond-cir +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlcore +wlcore_sdio +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wmi +wmi-bmof +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x38_edac +x86_pkg_temp_thermal +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-hwmon +xgifb +xhci-plat-hcd +xilinx-spi +xilinx_gmii2rgmii +xillybus_core +xillybus_pcie +xirc2ps_cs +xircom_cb +xor +xpad +xr_usb_serial_common +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z3fold +zatm +zaurus +zavl +zcommon +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zfs +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +znvpair +zpa2326 +zpa2326_i2c +zpa2326_spi +zpios +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zstd_compress +zunicode +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/amd64/lowlatency.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/amd64/lowlatency.retpoline @@ -0,0 +1,379 @@ +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko .altinstr_replacement callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +aesni-intel.ko aesni_xts_crypt8 callq *%r11 +amdgpu.ko core_link_enable_stream callq *%rax +camellia-aesni-avx-x86_64.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx-x86_64.ko camellia_xts_crypt_16way callq *%r9 +camellia-aesni-avx2.ko .altinstr_replacement callq *%r9 +camellia-aesni-avx2.ko camellia_xts_crypt_32way callq *%r9 +hpwdt.ko asminline_call callq *%r12 +hv_vmbus.ko hv_post_message callq *%rsi +hv_vmbus.ko vmbus_set_event callq *%rax +kvm-intel.ko vmx_handle_external_intr callq *%rax +kvm.ko em_loop callq *%rdx +kvm.ko fastop callq *%rsi +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +kvm.ko x86_emulate_insn callq *%rax +pci-hyperv.ko hv_irq_unmask callq *%r12 +vmlinux .altinstr_replacement callq *%rbx +vmlinux .altinstr_replacement jmpq *%r10 +vmlinux .altinstr_replacement jmpq *%r11 +vmlinux .altinstr_replacement jmpq *%r12 +vmlinux .altinstr_replacement jmpq *%r13 +vmlinux .altinstr_replacement jmpq *%r14 +vmlinux .altinstr_replacement jmpq *%r15 +vmlinux .altinstr_replacement jmpq *%r8 +vmlinux .altinstr_replacement jmpq *%r9 +vmlinux .altinstr_replacement jmpq *%rax +vmlinux .altinstr_replacement jmpq *%rbp +vmlinux .altinstr_replacement jmpq *%rbx +vmlinux .altinstr_replacement jmpq *%rcx +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdi +vmlinux .altinstr_replacement jmpq *%rdx +vmlinux .altinstr_replacement jmpq *%rsi +vmlinux MP_bus_info callq *%rax +vmlinux MP_bus_info callq *%rax +vmlinux MP_processor_info callq *%rax +vmlinux __early_ioremap callq *%r9 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%r15 +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __gunzip callq *%rax +vmlinux __x86_indirect_thunk_r10 jmpq *%r10 +vmlinux __x86_indirect_thunk_r11 jmpq *%r11 +vmlinux __x86_indirect_thunk_r12 jmpq *%r12 +vmlinux __x86_indirect_thunk_r13 jmpq *%r13 +vmlinux __x86_indirect_thunk_r14 jmpq *%r14 +vmlinux __x86_indirect_thunk_r15 jmpq *%r15 +vmlinux __x86_indirect_thunk_r8 jmpq *%r8 +vmlinux __x86_indirect_thunk_r9 jmpq *%r9 +vmlinux __x86_indirect_thunk_rax jmpq *%rax +vmlinux __x86_indirect_thunk_rbp jmpq *%rbp +vmlinux __x86_indirect_thunk_rbx jmpq *%rbx +vmlinux __x86_indirect_thunk_rcx jmpq *%rcx +vmlinux __x86_indirect_thunk_rdi jmpq *%rdi +vmlinux __x86_indirect_thunk_rdx jmpq *%rdx +vmlinux __x86_indirect_thunk_rsi jmpq *%rsi +vmlinux acpi_init jmpq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_match_madt callq *%rax +vmlinux acpi_numa_x2apic_affinity_init callq *%rax +vmlinux acpi_parse_x2apic callq *%rax +vmlinux acpi_table_parse callq *%r13 +vmlinux acpi_table_parse_entries_array callq *%rax +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux alloc_usemap_and_memmap callq *%r13 +vmlinux amd_numa_init callq *%rax +vmlinux apic_bsp_setup callq *%rax +vmlinux apic_bsp_setup callq *%rdx +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux apic_intr_mode_init callq *%rax +vmlinux arch_probe_nr_irqs callq *%rax +vmlinux bpf_prog_load jmpq *%rsp +vmlinux bunzip2 callq *%r13 +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux bunzip2 callq *%rax +vmlinux calgary_iommu_init callq *%rax +vmlinux cgroup_init callq *%rax +vmlinux cgroup_init_subsys callq *%rdx +vmlinux check_bugs jmpq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux check_timer callq *%rax +vmlinux con_init callq *%rax +vmlinux console_init callq *%rax +vmlinux continue_block jmpq *%rdi +vmlinux core_restore_code jmpq *%r8 +vmlinux default_acpi_madt_oem_check callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config callq *%rax +vmlinux default_get_smp_config jmpq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux default_setup_apic_routing callq *%rax +vmlinux dm_init callq *%rax +vmlinux dm_init callq *%rax +vmlinux do_early_param callq *%rax +vmlinux e820__memory_setup callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_cpu_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_dbgp_init callq *%rax +vmlinux early_iounmap callq *%rax +vmlinux early_pci_scan_bus callq *%rax +vmlinux early_platform_driver_probe callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux early_serial_hw_init callq *%rax +vmlinux edd_init callq *%rax +vmlinux efi64_thunk callq *%rbx +vmlinux efi_call callq *%rdi +vmlinux efi_enter32 callq *%rdi +vmlinux efi_memattr_apply_permissions callq *%r15 +vmlinux efi_memblock_x86_reserve_range jmpq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux enable_IR_x2apic callq *%rax +vmlinux entry_SYSCALL_64_trampoline jmpq *%rdi +vmlinux get_bits callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux get_cert_list callq *%rax +vmlinux hyperv_flush_tlb_others callq *%r14 +vmlinux hyperv_flush_tlb_others callq *%rax +vmlinux hyperv_flush_tlb_others_ex callq *%r15 +vmlinux hyperv_flush_tlb_others_ex callq *%rax +vmlinux i8042_probe callq *%rbx +vmlinux identify_boot_cpu callq *%rax +vmlinux identity_mapped callq *%rdx +vmlinux ima_calc_boot_aggregate callq *%rax +vmlinux init_IRQ callq *%rax +vmlinux init_ISA_irqs callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_acpi_pm_clocksource callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_apic_mappings callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_bsp_APIC callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_dmars callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rax +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hw_perf_events callq *%rdx +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_hypervisor_platform callq *%rax +vmlinux init_mem_mapping callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_graphics_quirks callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_pstate_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux intel_uncore_init callq *%rax +vmlinux io_apic_init_mappings callq *%rax +vmlinux iommu_go_to_state jmpq *%rdi +vmlinux irq_remap_enable_fault_handling callq *%rdx +vmlinux irq_remapping_enable callq *%rdx +vmlinux irq_remapping_prepare callq *%rax +vmlinux irq_remapping_prepare callq *%rax +vmlinux kernel_init_freeable callq *%rax +vmlinux lapic_cal_handler callq *%rax +vmlinux load_uefi_certs callq *%rax +vmlinux map_vsyscall callq *%rax +vmlinux mcheck_intel_therm_init callq *%rax +vmlinux msr_init callq *%rax +vmlinux mtrr_bp_init callq *%rax +vmlinux mtrr_cleanup callq *%r8 +vmlinux mtrr_trim_uncached_memory callq *%r8 +vmlinux native_init_IRQ callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux native_smp_prepare_cpus callq *%rax +vmlinux numa_init callq *%rbx +vmlinux p4_pmu_init callq *%rdx +vmlinux parse_efi_signature_list callq *%rax +vmlinux parse_efi_signature_list callq *%rax +vmlinux pci_arch_init callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_alloc callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_iommu_init callq *%rax +vmlinux pci_mmcfg_e7520 callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_early_init callq *%rax +vmlinux pci_mmcfg_intel_945 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_mmcfg_nvidia_mcp55 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_sanity_check.isra.0 callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pci_subsys_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcibios_irq_init callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_build_alloc_info callq *%rax +vmlinux pcpu_embed_first_chunk callq *%r13 +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_embed_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_page_first_chunk callq *%rax +vmlinux pcpu_setup_first_chunk callq *%rax +vmlinux pnpacpi_option_resource jmpq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux prefill_possible_map callq *%rax +vmlinux print_APIC_field callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_IO_APICs callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux print_local_APIC callq *%rax +vmlinux probe_list2 callq *%rax +vmlinux pvh_start_xen jmpq *%rax +vmlinux rc_read callq *%rax +vmlinux rc_read callq *%rax +vmlinux reboot_setup jmpq *%rdx +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux register_lapic_address callq *%rax +vmlinux regulator_late_cleanup callq *%rax +vmlinux restore_image jmpq *%rcx +vmlinux ret_from_fork callq *%rbx +vmlinux return_to_handler jmpq *%rdi +vmlinux secondary_startup_64 jmpq *%rax +vmlinux security_init callq *%rax +vmlinux serial8250_isa_init_ports callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_IO_APIC callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_arch callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon callq *%rax +vmlinux setup_earlycon jmpq *%rax +vmlinux sfi_parse_cpus callq *%rax +vmlinux sme_encrypt_execute callq *%rax +vmlinux smp_init callq *%rax +vmlinux start_kernel callq *%rax +vmlinux start_kernel callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux sync_Arb_IDs callq *%rax +vmlinux tboot_probe callq *%rax +vmlinux timekeeping_init callq *%rax +vmlinux trap_init callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_early_delay_calibrate callq *%rax +vmlinux tsc_init callq *%rax +vmlinux tsc_init callq *%rax +vmlinux unknown_bootoption callq *%rax +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%r12 +vmlinux unlz4 callq *%rax +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlz4 callq *%rbx +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzma callq *%rax +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r12 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%r14 +vmlinux unlzo callq *%rax +vmlinux unpack_to_rootfs callq *%r15 +vmlinux unxz callq *%r15 +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz callq *%rax +vmlinux unxz jmpq *%rax +vmlinux update_mp_table jmpq *%rax +vmlinux wakeup_long64 jmpq *%rax +vmlinux write_buffer callq *%rax +vmlinux write_byte callq *%rcx +vmlinux x86_early_init_platform_quirks callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux x86_late_time_init callq *%rax +vmlinux xen_foreach_remap_area callq *%r12 +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_init_IRQ callq *%rax +vmlinux xen_mc_flush callq *%rax +vmlinux xen_write_gdt_entry_boot callq *%rax +xen-privcmd.ko privcmd_ioctl callq *%rax --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/arm64/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/arm64/generic @@ -0,0 +1,21886 @@ +EXPORT_SYMBOL arch/arm64/crypto/aes-arm64 0x00000000 __aes_arm64_decrypt +EXPORT_SYMBOL arch/arm64/crypto/aes-arm64 0x00000000 __aes_arm64_encrypt +EXPORT_SYMBOL arch/arm64/crypto/aes-ce-cipher 0x00000000 ce_aes_expandkey +EXPORT_SYMBOL arch/arm64/crypto/aes-ce-cipher 0x00000000 ce_aes_setkey +EXPORT_SYMBOL arch/arm64/crypto/aes-neon-blk 0x00000000 neon_aes_cbc_encrypt +EXPORT_SYMBOL arch/arm64/crypto/aes-neon-blk 0x00000000 neon_aes_ecb_encrypt +EXPORT_SYMBOL arch/arm64/crypto/sha256-arm64 0x00000000 sha256_block_data_order +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/nfit/nfit 0x00000000 to_nfit_uuid +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_congested +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_dpaa2 +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_drv_ctx_init +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_drv_ctx_rel +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_drv_ctx_update +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_get_era +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_imx +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_little_end +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_qi_enqueue +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 qi_cache_alloc +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 qi_cache_free +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_dump_sg +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_alloc +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_enqueue +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_free +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_strstatus +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 gen_split_key +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 split_key_done +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_givencap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_givencap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_null_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_null_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_gcm_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_gcm_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4106_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4106_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4543_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4543_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_xts_ablkcipher_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_xts_ablkcipher_encap +EXPORT_SYMBOL drivers/dma/xilinx/xilinx_dma 0x00000000 xilinx_vdma_channel_set_config +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_component_probe +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_find_possible_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_panel +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_of_name_probe +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_calc_client_output +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_g_rect +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_s_selection +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_scale +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/qcom_rpm 0x00000000 qcom_rpm_write +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_probe +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_remove +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_resume +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_suspend +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_adjust_strength +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_disable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_enable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_encode +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_get_stats +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_release +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_wait_done +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 of_mtk_ecc_get +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_count +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_link_state +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_map +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_rx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_tx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_get_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_internal_loopback +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_rx_tx_enable +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_set_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_set_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_init_hw +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_setup_link +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/freescale/gianfar_driver 0x00000000 gfar_phc_index +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_register +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_unregister +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_get_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_put_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_register_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_reinit_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_unregister_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hns_dsaf 0x00000000 hns_dsaf_roce_reset +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_client +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_rdma_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_register_driver +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_unregister_driver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_read +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_write +EXPORT_SYMBOL drivers/net/phy/mdio-octeon 0x00000000 octeon_mdiobus_force_mod_depencency +EXPORT_SYMBOL drivers/net/phy/mdio-xgene 0x00000000 xgene_enet_phy_register +EXPORT_SYMBOL drivers/net/phy/mdio-xgene 0x00000000 xgene_mdio_rd_mac +EXPORT_SYMBOL drivers/net/phy/mdio-xgene 0x00000000 xgene_mdio_rgmii_read +EXPORT_SYMBOL drivers/net/phy/mdio-xgene 0x00000000 xgene_mdio_rgmii_write +EXPORT_SYMBOL drivers/net/phy/mdio-xgene 0x00000000 xgene_mdio_wr_mac +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/pci/host/pcie-iproc 0x00000000 iproc_pcie_remove +EXPORT_SYMBOL drivers/pci/host/pcie-iproc 0x00000000 iproc_pcie_setup +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_register_edge +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_unregister_edge +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/soc/qcom/smd-rpm 0x00000000 qcom_rpm_smd_write +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_alloc +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get_free_space +EXPORT_SYMBOL drivers/soc/qcom/wcnss_ctrl 0x00000000 qcom_wcnss_open_channel +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_create +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_down +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_irq +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_acquire +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_deregister +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_enqueue_fq +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_enqueue_qd +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_pull_channel +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_pull_fq +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_rearm +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_register +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_service_release +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_store_create +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_store_destroy +EXPORT_SYMBOL drivers/staging/fsl-mc/bus/dpio/fsl-mc-dpio 0x00000000 dpaa2_io_store_next +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_hton +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_ntoh +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_bulk_queue_receive +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_bulk_queue_transmit +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_connect +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_disconnect +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_get_peer_version +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_held_msg_release +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_initialise +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_msg_dequeue +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_msg_hold +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_msg_peek +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_msg_remove +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_queue_kernel_message +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_queue_user_message +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_close +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_create +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_destroy +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_open +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_release +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_set_option +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchi_service_use +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_add_connected_callback +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_add_service +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_bulk_receive +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_bulk_transmit +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_connect +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_initialise +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_open_service +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_queue_bulk_receive +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_queue_bulk_transmit +EXPORT_SYMBOL drivers/staging/vc04_services/vchiq 0x00000000 vchiq_shutdown +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_read_of_freq_limits +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __arch_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __arch_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_hvc +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_smc +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ioremap +EXPORT_SYMBOL vmlinux 0x00000000 __iounmap +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_1 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_2 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_4 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_8 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_acq_1 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_acq_2 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_acq_4 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_acq_8 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_mb_1 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_mb_2 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_mb_4 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_mb_8 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_rel_1 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_rel_2 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_rel_4 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_case_rel_8 +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_double +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc___cmpxchg_double_mb +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_add +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_add_return +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_add_return_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_add_return_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_add_return_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_and +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_dec_if_positive +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_add +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_add_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_add_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_add_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_and +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_and_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_and_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_and_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_andnot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_andnot_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_andnot_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_or +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_or_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_or_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_or_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_sub +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_sub_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_sub_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_sub_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_xor +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_xor_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_xor_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_fetch_xor_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_or +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_sub +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_sub_return +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_sub_return_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_sub_return_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_sub_return_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic64_xor +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_add +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_add_return +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_add_return_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_add_return_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_add_return_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_and +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_add +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_add_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_add_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_add_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_and +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_and_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_and_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_and_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_andnot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_andnot_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_andnot_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_or +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_or_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_or_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_or_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_sub +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_sub_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_sub_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_sub_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_xor +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_xor_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_xor_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_fetch_xor_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_or +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_sub +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_sub_return +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_sub_return_acquire +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_sub_return_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_sub_return_release +EXPORT_SYMBOL vmlinux 0x00000000 __ll_sc_atomic_xor +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy_fromio +EXPORT_SYMBOL vmlinux 0x00000000 __memcpy_toio +EXPORT_SYMBOL vmlinux 0x00000000 __memmove +EXPORT_SYMBOL vmlinux 0x00000000 __memset +EXPORT_SYMBOL vmlinux 0x00000000 __memset_io +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __node_distance +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_guard +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _mcount +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_pxm_to_online_node +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_find_device +EXPORT_SYMBOL vmlinux 0x00000000 amba_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 amba_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arm64_const_caps_ready +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_flush_dcache_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bman_acquire +EXPORT_SYMBOL vmlinux 0x00000000 bman_free_pool +EXPORT_SYMBOL vmlinux 0x00000000 bman_get_bpid +EXPORT_SYMBOL vmlinux 0x00000000 bman_ip_rev +EXPORT_SYMBOL vmlinux 0x00000000 bman_new_pool +EXPORT_SYMBOL vmlinux 0x00000000 bman_release +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brcmstb_get_family_id +EXPORT_SYMBOL vmlinux 0x00000000 brcmstb_get_product_id +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 change_bit +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 convert_ifc_address +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_hwcap_keys +EXPORT_SYMBOL vmlinux 0x00000000 cpu_hwcaps +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_tcpudp_nofold +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_of_clk_del_provider +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_alloc_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x00000000 dma_mmap_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_close +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_disable +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_enable +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_get_api_version +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_get_attributes +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_is_enabled +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_open +EXPORT_SYMBOL vmlinux 0x00000000 dpbp_reset +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_close +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_disable +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_enable +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_get_api_version +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_get_attributes +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_is_enabled +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_open +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_reset +EXPORT_SYMBOL vmlinux 0x00000000 dpcon_set_notification +EXPORT_SYMBOL vmlinux 0x00000000 dprc_close +EXPORT_SYMBOL vmlinux 0x00000000 dprc_get_obj +EXPORT_SYMBOL vmlinux 0x00000000 dprc_get_obj_count +EXPORT_SYMBOL vmlinux 0x00000000 dprc_get_obj_irq +EXPORT_SYMBOL vmlinux 0x00000000 dprc_get_obj_region +EXPORT_SYMBOL vmlinux 0x00000000 dprc_get_res_count +EXPORT_SYMBOL vmlinux 0x00000000 dprc_open +EXPORT_SYMBOL vmlinux 0x00000000 dprc_set_obj_irq +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dummy_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_icache_range +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 fman_bind +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_bmi_max_fifo_size +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_max_frm +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_mem_region +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_pause_cfg +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_qman_channel_id +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_revision +EXPORT_SYMBOL vmlinux 0x00000000 fman_get_rx_extra_headroom +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_bind +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_cfg_buf_prefix_content +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_config +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_disable +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_enable +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_get_hash_result_offset +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_get_qman_channel_id +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_init +EXPORT_SYMBOL vmlinux 0x00000000 fman_port_use_kg_hash +EXPORT_SYMBOL vmlinux 0x00000000 fman_register_intr +EXPORT_SYMBOL vmlinux 0x00000000 fman_reset_mac +EXPORT_SYMBOL vmlinux 0x00000000 fman_set_mac_active_pause +EXPORT_SYMBOL vmlinux 0x00000000 fman_set_mac_max_frame +EXPORT_SYMBOL vmlinux 0x00000000 fman_set_port_params +EXPORT_SYMBOL vmlinux 0x00000000 fman_sp_build_buffer_struct +EXPORT_SYMBOL vmlinux 0x00000000 fman_sp_set_buf_pools_in_asc_order_of_buf_sizes +EXPORT_SYMBOL vmlinux 0x00000000 fman_unregister_intr +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsl_guts_get_svr +EXPORT_SYMBOL vmlinux 0x00000000 fsl_ifc_ctrl_dev +EXPORT_SYMBOL vmlinux 0x00000000 fsl_ifc_find +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_dma_get_resv_regions +EXPORT_SYMBOL vmlinux 0x00000000 iommu_dma_init_domain +EXPORT_SYMBOL vmlinux 0x00000000 iommu_get_dma_cookie +EXPORT_SYMBOL vmlinux 0x00000000 iommu_get_msi_cookie +EXPORT_SYMBOL vmlinux 0x00000000 iommu_put_dma_cookie +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iproc_msi_exit +EXPORT_SYMBOL vmlinux 0x00000000 iproc_msi_init +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_begin +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_busy +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_end +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keygen_init +EXPORT_SYMBOL vmlinux 0x00000000 keygen_port_hashing_init +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kimage_voffset +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 mc_send_command +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memset16 +EXPORT_SYMBOL vmlinux 0x00000000 memset32 +EXPORT_SYMBOL vmlinux 0x00000000 memset64 +EXPORT_SYMBOL vmlinux 0x00000000 memstart_addr +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL vmlinux 0x00000000 mii_check_link +EXPORT_SYMBOL vmlinux 0x00000000 mii_check_media +EXPORT_SYMBOL vmlinux 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL vmlinux 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 mii_link_ok +EXPORT_SYMBOL vmlinux 0x00000000 mii_nway_restart +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse_voltage +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_probe +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_remove +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 numa_node +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_count_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 of_device_alloc +EXPORT_SYMBOL vmlinux 0x00000000 of_device_get_match_data +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_available +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_device_register +EXPORT_SYMBOL vmlinux 0x00000000 of_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x00000000 of_find_backlight_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_matching_node_and_match +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_net_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_opts_by_path +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x00000000 of_find_property +EXPORT_SYMBOL vmlinux 0x00000000 of_get_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_child_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_get_cpu_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_ddr_timings +EXPORT_SYMBOL vmlinux 0x00000000 of_get_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_min_tck +EXPORT_SYMBOL vmlinux 0x00000000 of_get_named_gpio_flags +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_available_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_pci_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_property +EXPORT_SYMBOL vmlinux 0x00000000 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_by_regs +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_count +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_next_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_by_id +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_node +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_io_request_and_map +EXPORT_SYMBOL vmlinux 0x00000000 of_iomap +EXPORT_SYMBOL vmlinux 0x00000000 of_machine_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_match_device +EXPORT_SYMBOL vmlinux 0x00000000 of_match_node +EXPORT_SYMBOL vmlinux 0x00000000 of_mdio_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_add_data +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_remove +EXPORT_SYMBOL vmlinux 0x00000000 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_node_get +EXPORT_SYMBOL vmlinux 0x00000000 of_node_put +EXPORT_SYMBOL vmlinux 0x00000000 of_node_to_nid +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_fixed_args +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_deregister_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_get_and_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_is_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_register_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x00000000 of_root +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_address +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibus_to_node +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfn_valid +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_assign_mem +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_cpu_power_down +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_req +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_readl +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_writel +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_init +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_size +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_is_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_auth_and_reset +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_init_image +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_mem_setup +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_supported +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_restore_sec_cfg +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_cold_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_remote_state +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_warm_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qdf2400_e44_present +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 qm_channel_caam +EXPORT_SYMBOL vmlinux 0x00000000 qm_channel_pool1 +EXPORT_SYMBOL vmlinux 0x00000000 qman_affine_channel +EXPORT_SYMBOL vmlinux 0x00000000 qman_affine_cpus +EXPORT_SYMBOL vmlinux 0x00000000 qman_alloc_cgrid_range +EXPORT_SYMBOL vmlinux 0x00000000 qman_alloc_fqid_range +EXPORT_SYMBOL vmlinux 0x00000000 qman_alloc_pool_range +EXPORT_SYMBOL vmlinux 0x00000000 qman_create_cgr +EXPORT_SYMBOL vmlinux 0x00000000 qman_create_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_delete_cgr +EXPORT_SYMBOL vmlinux 0x00000000 qman_delete_cgr_safe +EXPORT_SYMBOL vmlinux 0x00000000 qman_destroy_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_dma_portal +EXPORT_SYMBOL vmlinux 0x00000000 qman_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 qman_fq_fqid +EXPORT_SYMBOL vmlinux 0x00000000 qman_get_affine_portal +EXPORT_SYMBOL vmlinux 0x00000000 qman_get_qm_portal_config +EXPORT_SYMBOL vmlinux 0x00000000 qman_init_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_ip_rev +EXPORT_SYMBOL vmlinux 0x00000000 qman_oos_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_p_irqsource_add +EXPORT_SYMBOL vmlinux 0x00000000 qman_p_irqsource_remove +EXPORT_SYMBOL vmlinux 0x00000000 qman_p_poll_dqrr +EXPORT_SYMBOL vmlinux 0x00000000 qman_p_static_dequeue_add +EXPORT_SYMBOL vmlinux 0x00000000 qman_query_cgr_congested +EXPORT_SYMBOL vmlinux 0x00000000 qman_query_fq_np +EXPORT_SYMBOL vmlinux 0x00000000 qman_release_cgrid +EXPORT_SYMBOL vmlinux 0x00000000 qman_release_fqid +EXPORT_SYMBOL vmlinux 0x00000000 qman_release_pool +EXPORT_SYMBOL vmlinux 0x00000000 qman_retire_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_schedule_fq +EXPORT_SYMBOL vmlinux 0x00000000 qman_volatile_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 raw_copy_in_user +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_add +EXPORT_SYMBOL vmlinux 0x00000000 refcount_add_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_test +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 refcount_inc_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 refcount_sub_and_test +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_bit +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_filter +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_probe +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_remove +EXPORT_SYMBOL vmlinux 0x00000000 shdma_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 shdma_init +EXPORT_SYMBOL vmlinux 0x00000000 shdma_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 shdma_reset +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 sunxi_sram_claim +EXPORT_SYMBOL vmlinux 0x00000000 sunxi_sram_release +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_and_change_bit +EXPORT_SYMBOL vmlinux 0x00000000 test_and_clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 test_and_set_bit +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unpoison_memory +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nfit_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 __acpi_nvdimm_notify +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_ctl +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_desc_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_init +EXPORT_SYMBOL_GPL drivers/acpi/nfit/nfit 0x00000000 acpi_nfit_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/bus/sunxi-rsb 0x00000000 __devm_regmap_init_sunxi_rsb +EXPORT_SYMBOL_GPL drivers/bus/sunxi-rsb 0x00000000 sunxi_rsb_driver_register +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_hwfsm_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_postdiv_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_simple_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_disable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_dyn_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_edp_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_enable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_gfx3d_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_is_enabled_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr_hpm_lp +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_sr2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_vote_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_floor_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_esc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_lcc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_div_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_mux_closest_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 devm_clk_register_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_map +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_really_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_board_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_sleep_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq_floor +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_src_index +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_pll_set_fsm_mode +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_reset_ops +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_register +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_unregister +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/firmware/arm_scpi 0x00000000 get_scpi_ops +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_get_to_list +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 of_fpga_bridge_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_enable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_phy_i2c_write +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_set_sample_rate +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_setup_rx_sense +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_bus_flags_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_to_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_component_match_add +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_encoder_active_endpoint +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_find_panel_or_bridge +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 of_get_drm_display_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/pl111/pl111_drm 0x00000000 pl111_versatile_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_add_clients_from_dt +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 get_recv_wqe +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 get_send_extend_sge +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 get_send_wqe +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_get_gid_index +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_alloc_pd +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_bitmap_free +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_buf_free +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_calc_hem_mhop +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_check_whether_mhop +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_cmd_mbox +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_create_qp +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_dealloc_pd +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_exit +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_free_cq +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_hw2sw_mpt +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_ib_create_cq +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_ib_destroy_cq +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_init +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_lock_cqs +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_qp_free +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_qp_remove +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_release_range_qp +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_table_find +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_unlock_cqs +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 hns_roce_wq_overflow +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 key_to_hw_index +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 send_ieth +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 to_hns_roce_state +EXPORT_SYMBOL_GPL drivers/infiniband/hw/hns/hns-roce 0x00000000 to_hr_qp_type +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_get +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_put +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_register +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_unregister +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_cec_notifier +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_plat_device +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_vdec_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_venc_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_register +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_send +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_load_firmware +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_mapping_dm_addr +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_wdt_reg_handler +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_continue +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_create +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_deinit +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_destroy +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_flush +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_get_property +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_init +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_process_buf +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 hfi_session_set_property +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_acquire_buf_ref +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_buffers_done +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_check_codec +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_find_buf +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_get_bufreq +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_init_instance +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_m2m_device_run +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_m2m_job_abort +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_release_buf_ref +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_set_color_format +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_set_input_resolution +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_set_num_bufs +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_set_output_resolution +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_vb2_buf_init +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_vb2_buf_prepare +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_vb2_start_streaming +EXPORT_SYMBOL_GPL drivers/media/platform/qcom/venus/venus-core 0x00000000 venus_helper_vb2_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_disable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_enable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get_device +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_put +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_begin +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_flush +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_update +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_init +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_map_sg +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_setup_lif +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_unmap_sg +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_cleanup_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_and_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_or_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_frame_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_mbus_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_fourcc +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_init_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_of_get_format +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_set_format_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_start +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_stop +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_of_get +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_put +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/motorola-cpcap 0x00000000 cpcap_sense_virq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x00000000 tps65217_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x00000000 tps65217_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x00000000 tps65217_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x00000000 tps65217_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_disable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_do_data_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_enable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_alloc +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_free +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_irq +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_pm_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_probe +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_remove +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_free +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_unregister +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_deselect +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_put +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_select +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_states +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_try_select +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_footer +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_header +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_fsm_decode +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/host/pcie-iproc 0x00000000 iproc_pcie_shutdown +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/phy/allwinner/phy-sun4i-usb 0x00000000 sun4i_usb_phy_set_squelch_detect +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 get_ufs_qcom_phy +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_calibrate +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_disable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_enable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_generic_probe +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_clks +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_vregulators +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_off +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_on +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_save_controller_version +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_set_tx_lane_enable +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_get_num_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_parse_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_mdt_find_rsc_table +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_register_ssr_notifier +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_unregister_ssr_notifier +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_register +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_alloc +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_free +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_get_ata_protocol +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_get_fw_info +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_get_ncq_tag +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_init_add +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_init_mem +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_kill_tasklets +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_phy_down +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_probe +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_remove +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_rst_work_handler +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_sata_done +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_sht +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_slot_task_free +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_stop_phys +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 hisi_sas_stt +EXPORT_SYMBOL_GPL drivers/scsi/hisi_sas/hisi_sas_main 0x00000000 to_hisi_sas_port +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_get_size +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_load +EXPORT_SYMBOL_GPL drivers/spi/spi-bcm-qspi 0x00000000 bcm_qspi_pm_ops +EXPORT_SYMBOL_GPL drivers/spi/spi-bcm-qspi 0x00000000 bcm_qspi_probe +EXPORT_SYMBOL_GPL drivers/spi/spi-bcm-qspi 0x00000000 bcm_qspi_remove +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_register +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_unregister +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_get_drvdata +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_from_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_pa +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pa2va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_alloc_res_mem +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_put +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_va2pa +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_disable_ms +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_enable_ms +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_free +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_get +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_get_outputs +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_init +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_init_noauto +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_set +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_to_gpiod +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init_post +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_set_wakeup +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 __vfio_platform_register_reset +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_probe_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_remove_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_unregister_reset +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_update +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_post +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_register +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_dt_ids +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_ops +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_remove +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-platform 0x00000000 asoc_qcom_lpass_platform_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_console_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_dm_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_event_channel_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_grant_table_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_hvm_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_memory_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_multicall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_physdev_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_platform_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_sched_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_tmem_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_vcpu_op +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_vm_assist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 HYPERVISOR_xen_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpu_clear_user_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpu_copy_user_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsl_mc_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pfn_to_mfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __set_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __set_phys_to_machine_multi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _copy_from_iter_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_cppc_processor_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_psd_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_timer_read_ool_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_wb_cache_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_adjust_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_enet_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_enet_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_enet_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_enet_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgmac_phy_connect_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_probed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_perf_ctrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_get_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cppc_set_perf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_topology +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_opp_desc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_init_vexpress_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 display_timings_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dt_init_idle_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elf_hwcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_videomode_from_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_allocate_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_cleanup_irq_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_object_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_object_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_populate_irq_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_portal_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_portal_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_portal_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_resource_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl_mc_resource_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genpd_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_hwpoison_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_ack_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate_sep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_detect_slave_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_of_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_mux_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_mux_uninit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memcpy_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_strmode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_highest_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_revert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_from_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_parent_fill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_console_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_detach_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_display_timings_exist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_get_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_is_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_router_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_xlate_by_chan_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fdt_unflatten_tree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_parse_idle_states +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_remove_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_dma_window +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_fb_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_pci_domain_nr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_regulator_init_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_find_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_and_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_msi_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_check_probe_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_dma_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_devfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_host_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_max_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_parse_bus_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_default_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_count_elems_of_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u32_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_get_state_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_regulator_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_init_by_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_resolve_phandles +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_ntrips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_trip_points +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_is_trip_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_dr_mode_by_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_host_tpl_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_update_otg_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 otg_ulpi_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 owl_sps_set_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_num_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phys_to_mach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_node_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_subnode_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_count_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_parse_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_add_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_remove_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl08x_filter_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_transmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 privcmd_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rpi_firmware_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rpi_firmware_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rpi_firmware_property_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rq_flush_dcache_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_device_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sunxi_ccu_get_mmc_timing_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sunxi_ccu_set_mmc_timing_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timer_unstable_counter_workaround +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_of_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ulpi_viewport_access_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_companion_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_high_mono_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_next_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_get_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_capsule_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_query_variable_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_reset_system +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_runtime_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_variable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_set_wakeup_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_efi_update_capsule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_in_preemptible_hcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_add_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_drop_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/arm64/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/arm64/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/arm64/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/arm64/generic.modules @@ -0,0 +1,5200 @@ +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_aspeed_vuart +8250_exar +8250_men_mcb +8250_moxa +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acp_audio_dma +acpi-als +acpi_configfs +acpi_ipmi +acpi_power_meter +acpiphp_ibm +act200l-sir +act8865-regulator +act8945a +act8945a-regulator +act8945a_charger +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-arm64 +aes-ce-blk +aes-ce-ccm +aes-ce-cipher +aes-neon-blk +aes-neon-bs +aes_ti +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +afs +ah4 +ah6 +ahci +ahci_brcm +ahci_ceva +ahci_mtk +ahci_platform +ahci_qoriq +ahci_seattle +ahci_xgene +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airspy +ak8974 +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-pr-ip-core-plat +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +amba-pl010 +ambakmi +amc6821 +amd +amd-xgbe +amd5536udc_pci +amd8111e +amdgpu +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apbps2 +apds9300 +apds9802als +apds990x +apds9960 +appledisplay +appletalk +appletouch +applicom +aquantia +ar1021_i2c +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcmsr +arcnet +arcpgu +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arm_big_little +arm_big_little_dt +arm_mhu +arm_scpi +arm_spe_pmu +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3722-regulator +as3935 +as5011 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +ata_generic +ata_piix +atbm8830 +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atm +atmel +atmel-flexcom +atmel-hlcdc +atmel_captouch +atmel_mxt_ts +atmel_pci +atmtcp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avmfritz +ax25 +ax88179_178a +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x-rsb +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bam_dma +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-flexrm-mailbox +bcm-keypad +bcm-pdc-mailbox +bcm-phy-lib +bcm-sba-raid +bcm-sf2 +bcm203x +bcm2835 +bcm2835-rng +bcm2835-v4l2 +bcm2835_thermal +bcm2835_wdt +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm63138_nand +bcm6368_nand +bcm7038_wdt +bcm7xxx +bcm87xx +bcm_crypto_spu +bcm_iproc_adc +bcm_iproc_tsc +bcma +bcma-hcd +bcmsysport +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +berlin2-adc +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bman-test +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmnand +brcmsmac +brcmstb-avs-cpufreq +brcmstb_nand +brcmstb_thermal +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btqcomsmd +btrfs +btrtl +btsdio +bttv +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +caam +caam_jr +caam_pkc +caamalg +caamalg_desc +caamalg_qi +caamhash +caamrng +cachefiles +cadence-quadspi +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +cap11xx +capi +capidrv +capmode +capsule-loader +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cavium-rng +cavium-rng-vf +cb710 +cb710-mmc +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccree +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-neon +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipone_icn8318 +chipreg +chnl_net +ci_hdrc +ci_hdrc_imx +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_tegra +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cirrus +cirrusfb +clip +clk-cdce706 +clk-cdce925 +clk-cs2000-cp +clk-hi3519 +clk-hi655x +clk-max77686 +clk-palmas +clk-pwm +clk-qcom +clk-rk808 +clk-rpm +clk-s2mps11 +clk-scpi +clk-si514 +clk-si5351 +clk-si570 +clk-smd-rpm +clk-twl6040 +clk-versaclock5 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm3605 +cm36651 +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +colibri-vf50-ts +com20020 +com20020-pci +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_parport +comedi_pci +comedi_test +comedi_usb +contec_pci_dio +cordic +core +cortina +cp210x +cpcap-adc +cpcap-battery +cpcap-pwrbutton +cpcap-regulator +cpia2 +cppc_cpufreq +cpsw_ale +cptpf +cptvf +cramfs +crc-itu-t +crc32-ce +crc32_generic +crc4 +crc7 +crc8 +crct10dif-ce +crg-hi3516cv300 +crg-hi3798cv200 +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +csiostor +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062-thermal +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +ddbridge +de2104x +decnet +deflate +defxx +denali +denali_dt +denali_pci +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +digicolor-usart +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard06 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dp83822 +dp83848 +dp83867 +dpot-dac +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dumb-vga-dac +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw-hdmi +dw-hdmi-ahb-audio +dw-hdmi-cec +dw-hdmi-i2s-audio +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_drm_dsi +dw_mmc +dw_mmc-exynos +dw_mmc-k3 +dw_mmc-pci +dw_mmc-pltfm +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-of-simple +dwc3-pci +dwmac-dwc-qos-eth +dwmac-generic +dwmac-ipq806x +dwmac-sun8i +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +earth-pt1 +earth-pt3 +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_sys +ecdh_generic +echainiv +echo +edt-ft5x06 +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efi-pstore +efi_test +efibc +efs +egalax_ts +egalax_ts_serial +ehci-platform +ehset +einj +ektf2127 +elan_i2c +elants_i2c +elo +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_usb +emu10k1-gp +emxx_udc +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +envelope-detector +epic100 +eql +esas2r +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-qcom-spmi-misc +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71882fg +f75375s +f81232 +f81534 +fakelb +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fixed +fjes +fl512 +fld +flexfb +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-bridge +fpga-mgr +fpga-region +freevxfs +fsa9480 +fscache +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl-dpaa2-eth +fsl-edma +fsl-mc-dpio +fsl-quadspi +fsl_dpa +fsl_ifc_nand +fsl_lpuart +fsl_pq_mdio +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gcc-apq8084 +gcc-ipq4019 +gcc-ipq806x +gcc-ipq8074 +gcc-mdm9615 +gcc-msm8660 +gcc-msm8916 +gcc-msm8960 +gcc-msm8974 +gcc-msm8994 +gcc-msm8996 +gdmtty +gdmulte +gen_probe +generic +generic-adc-battery +generic_bl +genet +geneve +genwqe_card +gf2k +gfs2 +ghash-ce +gianfar_driver +gianfar_ptp +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glink_ssr +gluebi +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-74x164 +gpio-74xx-mmio +gpio-addr-flash +gpio-adnp +gpio-adp5520 +gpio-adp5588 +gpio-altera +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-brcmstb +gpio-charger +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-fan +gpio-grgpio +gpio-ir-recv +gpio-ir-tx +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-lp87565 +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-max77620 +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rcar +gpio-rdc321x +gpio-regulator +gpio-syscon +gpio-thunderx +gpio-tpic2810 +gpio-tps65086 +gpio-tps65218 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-xgene-sb +gpio-xlp +gpio-xra1403 +gpio-zynq +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gpio_wdt +gr_udc +grace +grcan +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hclge +hd44780 +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcd +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hi311x +hi6210-i2s +hi6220-mailbox +hi6220_reset +hi6421-pmic-core +hi6421-regulator +hi6421v530-regulator +hi655x-pmic +hi655x-regulator +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hip04_eth +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hisi-rng +hisi-sfc +hisi504_nand +hisi_femac +hisi_powerkey +hisi_sas_main +hisi_sas_v1_hw +hisi_sas_v2_hw +hisi_sas_v3_hw +hisi_thermal +hix5hd2_gmac +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hnae +hnae3 +hns-roce +hns-roce-hw-v1 +hns-roce-hw-v2 +hns3 +hns_dsaf +hns_enet_drv +hns_mdio +hopper +horus3a +hostap +hostap_pci +hostap_plx +hp03 +hp100 +hp206c +hpfs +hpilo +hpsa +hptiop +hsi +hsi_char +hso +hsr +ht16k33 +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +hx711 +hx8357 +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-arb-gpio-challenge +i2c-bcm-iproc +i2c-bcm2835 +i2c-brcmstb +i2c-cbus-gpio +i2c-cros-ec-tunnel +i2c-demux-pinctrl +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-gpio +i2c-hid +i2c-hix5hd2 +i2c-i801 +i2c-imx +i2c-isch +i2c-kempld +i2c-matroxfb +i2c-mt65xx +i2c-mux +i2c-mux-gpio +i2c-mux-gpmux +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-pinctrl +i2c-mux-reg +i2c-mv64xxx +i2c-nforce2 +i2c-nomadik +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-qup +i2c-rcar +i2c-riic +i2c-rk3x +i2c-robotfuzz-osif +i2c-scmi +i2c-sh_mobile +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-slave-eeprom +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-thunderx +i2c-tiny-usb +i2c-versatile +i2c-via +i2c-viapro +i2c-viperboard +i2c-xgene-slimpro +i2c-xiic +i2c-xlp9xx +i40e +i40evf +i40iw +i5k_amb +i6300esb +i740fb +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_qib +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibmaem +ibmpex +ice40-spi +icp +icp_multi +icplus +ics932s401 +idma64 +idmouse +idt77252 +idt_89hpesx +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-mux +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imon +ims-pcu +imx074 +imx2_wdt +imx6ul_tsc +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int51x1 +intel-xway +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +iproc-rng200 +iproc_nand +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipx +ir-hix5hd2 +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-spi +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irtty-sir +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k3dma +kafs +kalmia +kaweth +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kirin-drm +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +kvaser_pci +kvaser_usb +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +layerscape_edac_mod +lcc-ipq806x +lcc-mdm9615 +lcc-msm8960 +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-aat1290 +leds-adp5520 +leds-as3645a +leds-bcm6328 +leds-bcm6358 +leds-bd2802 +leds-blinkm +leds-cpcap +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-is31fl319x +leds-is31fl32xx +leds-ktd2692 +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max77693 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +lego_ev3_battery +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +liquidio +liquidio_vf +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp873x-regulator +lp8755 +lp87565 +lp87565-regulator +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvds-encoder +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +macb +macb_pci +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mailbox-test +mailbox-xgene-slimpro +mali-dp +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max14656_charger_detector +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max5821 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77620-regulator +max77620_thermal +max77620_wdt +max77686-regulator +max77693-haptic +max77693-regulator +max77693_charger +max77802-regulator +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8973-regulator +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bcm-unimac +mdio-bitbang +mdio-cavium +mdio-gpio +mdio-hisi-femac +mdio-mux-gpio +mdio-mux-mmioreg +mdio-octeon +mdio-thunder +mdio-xgene +mdt_loader +me4000 +me_daq +media +mediatek-cpufreq +mediatek-drm +mediatek-drm-hdmi +megachips-stdpxxxx-ge-b850v3-fw +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +melfas_mip4 +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microtek +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_spi +mmcc-apq8084 +mmcc-msm8960 +mmcc-msm8974 +mmcc-msm8996 +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +motorola-cpcap +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi001 +msi2500 +msm +msm-rng +msp3400 +mspro_block +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6380-regulator +mt6397-core +mt6397-regulator +mt6577_auxadc +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-cir +mtk-pmic-wrap +mtk-quadspi +mtk-rng +mtk-sd +mtk-vpu +mtk_ecc +mtk_nand +mtk_thermal +mtk_wdt +mtouch +mtu3 +multipath +multiq3 +musb_hdrc +mux-adg792a +mux-core +mux-gpio +mux-mmio +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxser +mxsfb +mxuport +myri10ge +n5pf +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +netsec +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfit +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_labpc +ni_labpc_common +ni_labpc_pci +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nicpf +nicstar +nicvf +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nosy +notifier-error-inject +nouveau +nozomi +nps_enet +ns-thermal +ns558 +ns83820 +nsh +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmem-bcm-ocotp +nvmem_qfprom +nvmem_sunxi_sid +nvmet +nvmet-fc +nvmet-rdma +nxp-nci +nxp-nci_i2c +nxp-ptn3460 +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_mmc_spi +of_xilinx_wdt +ofpart +ohci-platform +old_belkin-sir +omap4-keypad +omfs +omninet +onenand +opencores-kbd +openvswitch +opt3001 +optee +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +palmas-pwrbutton +palmas-regulator +palmas_gpadc +pandora_bl +panel +panel-innolux-p079zca +panel-jdi-lt070me05000 +panel-lg-lg4573 +panel-lvds +panel-orisetech-otm8009a +panel-panasonic-vvx10f034n00 +panel-raspberrypi-touchscreen +panel-samsung-ld9040 +panel-samsung-s6e3ha2 +panel-samsung-s6e63j0x03 +panel-samsung-s6e8aa0 +panel-seiko-43wvf1g +panel-sharp-lq101r1sx01 +panel-sharp-ls043t1le01 +panel-simple +panel-sitronix-st7789v +parade-ps8622 +parkbd +parman +parport +parport_ax88796 +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_of_platform +pata_oldpiix +pata_opti +pata_optidma +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pblk +pc300too +pc87360 +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-stub +pci200syn +pcie-iproc +pcie-iproc-platform +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmda12 +pcmmio +pcmuio +pcnet32 +pcrypt +pcwd_pci +pcwd_usb +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_usb +pegasus +pegasus_notetaker +penmount +pfuze100-regulator +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-bcm-ns-usb2 +phy-bcm-ns-usb3 +phy-bcm-ns2-usbdrd +phy-berlin-sata +phy-berlin-usb +phy-brcm-usb-dvr +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-hi6220-usb +phy-isp1301 +phy-mtk-tphy +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-apq8064-sata +phy-qcom-ipq806x-sata +phy-qcom-qmp +phy-qcom-qusb2 +phy-qcom-ufs +phy-qcom-ufs-qmp-14nm +phy-qcom-ufs-qmp-20nm +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-rcar-gen2 +phy-rcar-gen3-usb2 +phy-rcar-gen3-usb3 +phy-sun4i-usb +phy-tahvo +phy-tusb1210 +physmap +physmap_of +pi433 +pinctrl-apq8064 +pinctrl-apq8084 +pinctrl-ipq4019 +pinctrl-ipq8064 +pinctrl-ipq8074 +pinctrl-max77620 +pinctrl-mcp23s08 +pinctrl-mdm9615 +pinctrl-msm8660 +pinctrl-msm8916 +pinctrl-msm8960 +pinctrl-msm8994 +pinctrl-msm8996 +pinctrl-msm8x74 +pinctrl-qdf2xxx +pinctrl-rk805 +pinctrl-spmi-gpio +pinctrl-spmi-mpp +pinctrl-ssbi-gpio +pinctrl-ssbi-mpp +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl111_drm +pl172 +pl2303 +pl330 +plat-ram +plat_nand +platform_lcd +platform_mhu +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-pwrkey +pm8941-wled +pm8xxx-vibrator +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn_pep +poly1305_generic +port100 +powermate +powr1220 +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +ptlrpc +ptp +ptp_dte +pulse8-cec +pulsedlight-lidar-lite-v2 +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvrusb2 +pwc +pwm-atmel-hlcdc +pwm-bcm-iproc +pwm-bcm2835 +pwm-beeper +pwm-berlin +pwm-brcmstb +pwm-cros-ec +pwm-fan +pwm-fsl-ftm +pwm-hibvt +pwm-ir-tx +pwm-lp3943 +pwm-mediatek +pwm-mtk-disp +pwm-pca9685 +pwm-rcar +pwm-regulator +pwm-renesas-tpu +pwm-sun4i +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pwrseq_emmc +pwrseq_sd8787 +pwrseq_simple +pxa168_eth +pxa27x_udc +qca8k +qca_7k_common +qcaspi +qcauart +qcaux +qcom-apcs-ipc-mailbox +qcom-camss +qcom-coincell +qcom-emac +qcom-spmi-iadc +qcom-spmi-pmic +qcom-spmi-temp-alarm +qcom-spmi-vadc +qcom-vadc-common +qcom-wdt +qcom_adsp_pil +qcom_common +qcom_glink_native +qcom_glink_rpm +qcom_glink_smem +qcom_gsbi +qcom_hwspinlock +qcom_nandc +qcom_rpm +qcom_rpm-regulator +qcom_smbb +qcom_smd +qcom_smd-regulator +qcom_spmi-regulator +qcom_tsens +qcrypto +qcserial +qed +qede +qedf +qedi +qedr +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qoriq-cpufreq +qoriq_thermal +qrtr +qrtr-smd +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +ravb +raw +raw_diag +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcar-dmac +rcar-du-drm +rcar-fcp +rcar-vin +rcar_can +rcar_canfd +rcar_drif +rcar_dw_hdmi +rcar_fdp1 +rcar_gen3_thermal +rcar_jpu +rcar_thermal +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +reboot-mode +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +renesas_sdhi_core +renesas_sdhi_internal_dmac +renesas_sdhi_sys_dmac +renesas_usb3 +renesas_usbhs +renesas_wdt +repaper +reset-hi3660 +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio500 +rivafb +rj54n1cb0c +rk805-pwrkey +rk808 +rk808-regulator +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rmtfs_mem +rn5t618 +rn5t618-regulator +rn5t618_wdt +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-as3722 +rtc-bq32k +rtc-bq4802 +rtc-brcmstb-waketimer +rtc-cpcap +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-hym8563 +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max77686 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-mt7622 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-pl030 +rtc-pl031 +rtc-pm8xxx +rtc-r7301 +rtc-r9701 +rtc-rc5t583 +rtc-rk808 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-sc27xx +rtc-sh +rtc-snvs +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-twl +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtc-zynqmp +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +rza_wdt +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7706h +safe_serial +salsa20_generic +samsung-keypad +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_rcar +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sbp_target +sbs-battery +sbs-charger +sbs-manager +sbsa_gwdt +sc16is7xx +sc92031 +sca3000 +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scpi-cpufreq +scpi-hwmon +scpi_pm_domain +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci +sdhci-acpi +sdhci-brcmstb +sdhci-cadence +sdhci-iproc +sdhci-msm +sdhci-of-arasan +sdhci-of-at91 +sdhci-of-esdhc +sdhci-omap +sdhci-pci +sdhci-pltfm +sdhci-pxav3 +sdhci-xenon-driver +sdhci_f_sdh30 +sdio_uart +seed +sensorhub +ser_gigaset +serial2002 +serial_ir +serial_mctrl_gpio +serio_raw +sermouse +serpent_generic +serport +ses +sfc +sfc-falcon +sh-sci +sh_eth +sh_keysc +sh_mmcif +sh_mobile_ceu_camera +sh_mobile_lcdcfb +sh_mobile_meram +sh_veu +sh_vou +sha1-ce +sha2-ce +sha256-arm64 +sha3_generic +sha512-arm64 +shark2 +shdma +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sii902x +sii9234 +sil-sii8620 +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skd +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +slcan +slic_ds26522 +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc_diag +smd-rpm +smem +smipcie +smm665 +smp2p +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsm +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bcm2835 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcxhr +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-apq8016-sbc +snd-soc-audio-graph-card +snd-soc-audio-graph-scu-card +snd-soc-bcm2835-i2s +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-dio2125 +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-lpass-apq8016 +snd-soc-lpass-cpu +snd-soc-lpass-ipq806x +snd-soc-lpass-platform +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rcar +snd-soc-rl6231 +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5645 +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-simple-scu-card +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-storm +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-ymfpci +snic +snps_udc_core +snps_udc_plat +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +soc_scale_crop +softdog +softing +solo6x10 +solos-pci +sony-btf-mpx +soundcore +sp2 +sp805_wdt +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +speedfax +speedtch +spi-altera +spi-axi-spi-engine +spi-bcm-qspi +spi-bcm2835 +spi-bcm2835aux +spi-bitbang +spi-brcmstb-qspi +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-fsl-dspi +spi-gpio +spi-iproc-qspi +spi-lm70llp +spi-loopback-test +spi-mt65xx +spi-nor +spi-oc-tiny +spi-pl022 +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-qup +spi-rockchip +spi-rspi +spi-sc18is602 +spi-sh-hspi +spi-sh-msiof +spi-slave-system-control +spi-slave-time +spi-sprd-adi +spi-sun6i +spi-thunderx +spi-tle62x0 +spi-xcomm +spi-xlp +spi-zynqmp-gqspi +spi_ks8995 +spidev +spl +splat +spmi +spmi-pmic-arb +sprd-dma +sprd-sc27xx-spi +sprd_hwspinlock +sprd_serial +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssd1307fb +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +sudmac +sun4i-gpadc +sun6i-dma +sun8i-codec-analog +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sunxi +sunxi-cir +sunxi-mmc +sunxi-rsb +sunxi_wdt +sur40 +surface3_spi +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink_gt +synclinkmp +syscon-reboot-mode +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc358767 +tc3589x-keypad +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tee +tef6862 +tehuti +tekram-sir +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thmc50 +thunder_bgx +thunder_xcv +thunderx-mmc +thunderx_edac +thunderx_zip +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-ads8688 +ti-dac082s085 +ti-lmu +ti-tfp410 +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +tinydrm +tipc +tlan +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmio_mmc_core +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +torture +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps65217 +tps65217-regulator +tps65217_bl +tps65217_charger +tps65218 +tps65218-pwrbutton +tps65218-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udc-xilinx +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-dmac +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmisc_imx +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vc4 +vcan +vchiq +vcnl4000 +vctrl-regulator +veml6070 +venus-core +venus-dec +venus-enc +ves1820 +ves1x93 +veth +vexpress-hwmon +vexpress-regulator +vf610_adc +vf610_dac +vfio +vfio-amba +vfio-pci +vfio-platform +vfio-platform-amdxgbe +vfio-platform-base +vfio-platform-calxedaxgmac +vfio_iommu_type1 +vfio_mdev +vfio_platform_bcmflexrm +vfio_virqfd +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-rhine +via-sdmmc +via-velocity +via686a +video-mux +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videodev +vim2m +viperboard +viperboard_adc +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmw_pvrdma +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmxnet3 +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vrf +vringh +vsock +vsock_diag +vsockmon +vsp1 +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83795 +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +walkera0701 +wanxl +warrior +wcn36xx +wcnss_ctrl +wd719x +wdat_wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wlcore +wlcore_sdio +wlcore_spi +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-dma +xgene-enet +xgene-enet-v2 +xgene-hwmon +xgene-rng +xgene_edac +xgifb +xhci-mtk +xhci-plat-hcd +xilinx-pr-decoupler +xilinx-spi +xilinx-tpg +xilinx-video +xilinx-vtc +xilinx_can +xilinx_dma +xilinx_gmii2rgmii +xilinx_uartps +xilinxfb +xillybus_core +xillybus_of +xillybus_pcie +xor +xpad +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yurex +z3fold +zaurus +zavl +zcommon +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zfs +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +znvpair +zpa2326 +zpa2326_i2c +zpa2326_spi +zpios +zr364xx +zram +zstd_compress +zunicode +zx-tdm +zynqmp_dma --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/arm64/generic.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/arm64/generic.retpoline @@ -0,0 +1 @@ +# RETPOLINE NOT ENABLED --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic @@ -0,0 +1,21496 @@ +EXPORT_SYMBOL arch/arm/crypto/aes-arm 0x00000000 __aes_arm_decrypt +EXPORT_SYMBOL arch/arm/crypto/aes-arm 0x00000000 __aes_arm_encrypt +EXPORT_SYMBOL arch/arm/crypto/sha256-arm 0x00000000 crypto_sha256_arm_finup +EXPORT_SYMBOL arch/arm/crypto/sha256-arm 0x00000000 crypto_sha256_arm_update +EXPORT_SYMBOL arch/arm/lib/xor-neon 0x00000000 xor_block_neon_inner +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_dpaa2 +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_get_era +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_imx +EXPORT_SYMBOL drivers/crypto/caam/caam 0x00000000 caam_little_end +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_dump_sg +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_alloc +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_enqueue +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_free +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 caam_jr_strstatus +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 gen_split_key +EXPORT_SYMBOL drivers/crypto/caam/caam_jr 0x00000000 split_key_done +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_ablkcipher_givencap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_givencap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_null_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_aead_null_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_gcm_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_gcm_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4106_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4106_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4543_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_rfc4543_encap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_xts_ablkcipher_decap +EXPORT_SYMBOL drivers/crypto/caam/caamalg_desc 0x00000000 cnstr_shdsc_xts_ablkcipher_encap +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_component_probe +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_find_possible_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_panel +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_activate +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_deactivate +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_flush +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_flush_all +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_register +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_unregister +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_wait_vact_end +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_channel_get +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_channel_put +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_channel_request +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_client_register +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_client_unregister +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_device_exit +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_device_init +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_driver_register_full +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_driver_unregister +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_add_gather +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_alloc +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_get +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_pin +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_put +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_submit +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_job_unpin +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_base_id +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_free +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_get +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_get_base +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_id +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_incr +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_incr_max +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_read +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_read_max +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_read_min +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_request +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 host1x_syncpt_wait +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 tegra_mipi_calibrate +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 tegra_mipi_disable +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 tegra_mipi_enable +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 tegra_mipi_free +EXPORT_SYMBOL drivers/gpu/host1x/host1x 0x00000000 tegra_mipi_request +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_of_name_probe +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/iommu/iova 0x00000000 alloc_iova_mem +EXPORT_SYMBOL drivers/iommu/iova 0x00000000 free_iova_mem +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_disable_irq +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_enable_irq +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_request_channel +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/platform/coda/imx-vdoa 0x00000000 vdoa_context_configure +EXPORT_SYMBOL drivers/media/platform/coda/imx-vdoa 0x00000000 vdoa_context_create +EXPORT_SYMBOL drivers/media/platform/coda/imx-vdoa 0x00000000 vdoa_context_destroy +EXPORT_SYMBOL drivers/media/platform/coda/imx-vdoa 0x00000000 vdoa_device_run +EXPORT_SYMBOL drivers/media/platform/coda/imx-vdoa 0x00000000 vdoa_wait_for_completion +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_calc_client_output +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_g_rect +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_s_selection +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_scale +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_set_coeff +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_set_coeff_bypass +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_config_scaler +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_set_hs_coeffs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_set_vs_coeffs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_abort_channel_ctd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_cfd_adb +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_cfd_block +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_in_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_out_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_sync_on_channel_ctd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_alloc_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_clear_list_stat +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_create_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_enable_list_complete_irq +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_free_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_free_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_get_list_mask +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_get_list_stat +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_alloc +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_get_priv +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_release +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_list_busy +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_list_cleanup +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_map_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_misc_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_raw_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_rawchan_add_out_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_reset_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_rgb_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_bg_color +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_frame_start_event +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_line_mode +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_max_size +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_submit_descs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_unmap_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_update_dma_addr +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_yuv_fmts +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/qcom_rpm 0x00000000 qcom_rpm_write +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_probe +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_remove +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_resume +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_suspend +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_adjust_strength +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_disable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_enable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_encode +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_get_stats +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_release +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_wait_done +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 of_mtk_ecc_get +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/freescale/gianfar_driver 0x00000000 gfar_phc_index +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_register +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_unregister +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_get_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_put_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_register_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_reinit_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_unregister_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hns_dsaf 0x00000000 hns_dsaf_roce_reset +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_client +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_register_edge +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_unregister_edge +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/soc/qcom/smd-rpm 0x00000000 qcom_rpm_smd_write +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_alloc +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get_free_space +EXPORT_SYMBOL drivers/soc/qcom/wcnss_ctrl 0x00000000 qcom_wcnss_open_channel +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_hton +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_ntoh +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/nvec/nvec 0x00000000 nvec_write_async +EXPORT_SYMBOL drivers/staging/nvec/nvec 0x00000000 nvec_write_sync +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_clear_irqstatus +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_free_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_framedone_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_sync_lost_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_vsync_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_go +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_go_busy +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_is_enabled +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_set_lcd_config +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_set_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_setup +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_check +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_enabled +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_set_channel_out +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_setup +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_read_irqenable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_read_irqstatus +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_request_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_runtime_get +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_runtime_put +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_write_irqenable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_num_mgrs +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_num_ovls +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_supported_color_modes +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_install_mgr_ops +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_connect +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_disable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_disconnect +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_register_framedone_handler +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_set_lcd_config +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_set_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_start_update +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_unregister_framedone_handler +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_uninstall_mgr_ops +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dispc_register_isr +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dispc_unregister_isr +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_output_by_port_node +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_next_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_num_overlay_managers +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_num_overlays +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_overlay +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_overlay_manager +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_ntsc_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_pal_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_put_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_video_timings_to_videomode +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_compat_init +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_compat_uninit +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_recommended_bpp +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_resolution +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_find_mgr_from_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_find_output_from_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_get_default_display_name +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_get_version +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_is_initialized +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_output_set_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_output_unset_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_register_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_register_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_unregister_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_unregister_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 videomode_to_omap_video_timings +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_read_of_freq_limits +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/fsl/snd-soc-fsl-utils 0x00000000 fsl_asoc_get_dma_channel +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_idiv +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_idivmod +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_lasr +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_llsl +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_llsr +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_lmul +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_uidiv +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_uidivmod +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_ulcmp +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr0 +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr1 +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr2 +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __arm_ioremap_pfn +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_hvc +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_smc +EXPORT_SYMBOL vmlinux 0x00000000 __ashldi3 +EXPORT_SYMBOL vmlinux 0x00000000 __ashrdi3 +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __bswapdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __bswapsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __div0 +EXPORT_SYMBOL vmlinux 0x00000000 __divsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __do_div64 +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_fiq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __gnu_mcount_nc +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __kunmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __lshrdi3 +EXPORT_SYMBOL vmlinux 0x00000000 __machine_arch_type +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memset32 +EXPORT_SYMBOL vmlinux 0x00000000 __memset64 +EXPORT_SYMBOL vmlinux 0x00000000 __memzero +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __modsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __muldi3 +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 __nand_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_offset +EXPORT_SYMBOL vmlinux 0x00000000 __pv_phys_pfn_offset +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsb +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsl +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsw +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesb +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesl +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesw +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __readwrite_bug +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_fiq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_guard +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __udivsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __umodsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _change_bit +EXPORT_SYMBOL vmlinux 0x00000000 _clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _find_first_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_first_zero_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_next_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_next_zero_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_toio +EXPORT_SYMBOL vmlinux 0x00000000 _memset_io +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _set_bit +EXPORT_SYMBOL vmlinux 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_change_bit +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_set_bit +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 ac97_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_find_device +EXPORT_SYMBOL vmlinux 0x00000000 amba_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 amba_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arm_clear_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_coherent_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_delay_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_elf_read_implies_exec +EXPORT_SYMBOL vmlinux 0x00000000 arm_heavy_mb +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_io_modify +EXPORT_SYMBOL vmlinux 0x00000000 atomic_io_modify_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_flush_dcache_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cacheid +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 claim_fiq +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 contig_page_data +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_from_user_toio +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlb +EXPORT_SYMBOL vmlinux 0x00000000 cpu_user +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_of_clk_del_provider +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_fiq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 div64_s64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 div_s64_rem +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_alloc_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x00000000 dma_mmap_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_map_probe +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 edma_filter_fn +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elf_check_arch +EXPORT_SYMBOL vmlinux 0x00000000 elf_hwcap +EXPORT_SYMBOL vmlinux 0x00000000 elf_hwcap2 +EXPORT_SYMBOL vmlinux 0x00000000 elf_platform +EXPORT_SYMBOL vmlinux 0x00000000 elf_set_personality +EXPORT_SYMBOL vmlinux 0x00000000 elm_config +EXPORT_SYMBOL vmlinux 0x00000000 elm_decode_bch_error_page +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_fiq +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_kernel_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsl_guts_get_svr +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 get_mem_type +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_configure +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_cs_free +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_cs_request +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 htc_egpio_get_wakeup_irq +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 icst307_idx2s +EXPORT_SYMBOL vmlinux 0x00000000 icst307_s2div +EXPORT_SYMBOL vmlinux 0x00000000 icst525_idx2s +EXPORT_SYMBOL vmlinux 0x00000000 icst525_s2div +EXPORT_SYMBOL vmlinux 0x00000000 icst_hz +EXPORT_SYMBOL vmlinux 0x00000000 icst_hz_to_vco +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 imx_ssi_fiq_base +EXPORT_SYMBOL vmlinux 0x00000000 imx_ssi_fiq_end +EXPORT_SYMBOL vmlinux 0x00000000 imx_ssi_fiq_rx_buffer +EXPORT_SYMBOL vmlinux 0x00000000 imx_ssi_fiq_start +EXPORT_SYMBOL vmlinux 0x00000000 imx_ssi_fiq_tx_buffer +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioremap +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cached +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_page +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_begin +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_end +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmap +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 kmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kmap_to_page +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kunmap +EXPORT_SYMBOL vmlinux 0x00000000 kunmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 map_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 max_mapnr +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 mcount +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_map +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memset16 +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse_voltage +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiocpy +EXPORT_SYMBOL vmlinux 0x00000000 mmioset +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_probe +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_remove +EXPORT_SYMBOL vmlinux 0x00000000 mtd_concat_create +EXPORT_SYMBOL vmlinux 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 mx51_revision +EXPORT_SYMBOL vmlinux 0x00000000 mx53_revision +EXPORT_SYMBOL vmlinux 0x00000000 mxc_set_irq_fiq +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_free +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_init +EXPORT_SYMBOL vmlinux 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL vmlinux 0x00000000 nand_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL vmlinux 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_oob_std +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_page_raw +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan_ident +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan_tail +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_oob_std +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_page_raw +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_count_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 of_device_alloc +EXPORT_SYMBOL vmlinux 0x00000000 of_device_get_match_data +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_available +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_device_register +EXPORT_SYMBOL vmlinux 0x00000000 of_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x00000000 of_find_backlight_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_matching_node_and_match +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_net_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_opts_by_path +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x00000000 of_find_property +EXPORT_SYMBOL vmlinux 0x00000000 of_get_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_child_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_get_cpu_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_ddr_timings +EXPORT_SYMBOL vmlinux 0x00000000 of_get_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_min_tck +EXPORT_SYMBOL vmlinux 0x00000000 of_get_named_gpio_flags +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_available_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_pci_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_property +EXPORT_SYMBOL vmlinux 0x00000000 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_by_regs +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_count +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_next_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_by_id +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_node +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_io_request_and_map +EXPORT_SYMBOL vmlinux 0x00000000 of_iomap +EXPORT_SYMBOL vmlinux 0x00000000 of_machine_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_match_device +EXPORT_SYMBOL vmlinux 0x00000000 of_match_node +EXPORT_SYMBOL vmlinux 0x00000000 of_mdio_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_add_data +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_remove +EXPORT_SYMBOL vmlinux 0x00000000 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_node_get +EXPORT_SYMBOL vmlinux 0x00000000 of_node_put +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_fixed_args +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_deregister_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_get_and_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_is_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_register_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x00000000 of_root +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_address +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x00000000 omap_disable_dma_irq +EXPORT_SYMBOL vmlinux 0x00000000 omap_dma_link_lch +EXPORT_SYMBOL vmlinux 0x00000000 omap_dma_set_global_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_enable_dma_irq +EXPORT_SYMBOL vmlinux 0x00000000 omap_free_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_active_status +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_dst_pos +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_src_pos +EXPORT_SYMBOL vmlinux 0x00000000 omap_request_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_rev +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_callback +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_channel_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_burst_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_data_pack +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_priority +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_burst_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_data_pack +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_transfer_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_write_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_start_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_stop_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_type +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_adjust_size +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_map_angle +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_max_height +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_min_phys_size +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_request_ctx +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_setup +EXPORT_SYMBOL vmlinux 0x00000000 omap_vrfb_supported +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL vmlinux 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 outer_cache +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_address +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_min_io +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_min_mem +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfn_valid +EXPORT_SYMBOL vmlinux 0x00000000 pgprot_kernel +EXPORT_SYMBOL vmlinux 0x00000000 pgprot_user +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 pps_event +EXPORT_SYMBOL vmlinux 0x00000000 pps_lookup_dev +EXPORT_SYMBOL vmlinux 0x00000000 pps_register_source +EXPORT_SYMBOL vmlinux 0x00000000 pps_unregister_source +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processor +EXPORT_SYMBOL vmlinux 0x00000000 processor_id +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_event +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_index +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_register +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ptp_find_pin +EXPORT_SYMBOL vmlinux 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_assign_mem +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_cpu_power_down +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_get_version +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_req +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_readl +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_writel +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_init +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_size +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_is_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_auth_and_reset +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_init_image +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_mem_setup +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_supported +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_restore_sec_cfg +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_cold_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_remote_state +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_warm_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_dsp +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_midi +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_mixer +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_special +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_special_device +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_and_free_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_fiq +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 samsung_rev +EXPORT_SYMBOL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_fiq_handler +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_split +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_filter +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_probe +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_remove +EXPORT_SYMBOL vmlinux 0x00000000 shdma_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 shdma_init +EXPORT_SYMBOL vmlinux 0x00000000 shdma_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 shdma_reset +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_map_init +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_file_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_file_remove +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_set_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_cards +EXPORT_SYMBOL vmlinux 0x00000000 snd_component_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_notify +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_remove +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_replace +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_ecards_limit +EXPORT_SYMBOL vmlinux 0x00000000 snd_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_free_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_get_line +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_get_str +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_list +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_ranges +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_refine +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_report +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_set_key +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_major +EXPORT_SYMBOL vmlinux 0x00000000 snd_malloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL vmlinux 0x00000000 snd_oss_info_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL vmlinux 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_stop +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_power_wait +EXPORT_SYMBOL vmlinux 0x00000000 snd_register_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_register_oss_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_request_card +EXPORT_SYMBOL vmlinux 0x00000000 snd_seq_root +EXPORT_SYMBOL vmlinux 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_close +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_continue +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_notify +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_open +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_pause +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_resolution +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_start +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 snd_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 sound_class +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stmp_reset_block +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_rev +EXPORT_SYMBOL vmlinux 0x00000000 system_serial +EXPORT_SYMBOL vmlinux 0x00000000 system_serial_high +EXPORT_SYMBOL vmlinux 0x00000000 system_serial_low +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tc6393xb_lcd_mode +EXPORT_SYMBOL vmlinux 0x00000000 tc6393xb_lcd_set_power +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 tegra114_clock_assert_dfll_dvco_reset +EXPORT_SYMBOL vmlinux 0x00000000 tegra114_clock_deassert_dfll_dvco_reset +EXPORT_SYMBOL vmlinux 0x00000000 tegra114_clock_tune_cpu_trimmers_high +EXPORT_SYMBOL vmlinux 0x00000000 tegra114_clock_tune_cpu_trimmers_init +EXPORT_SYMBOL vmlinux 0x00000000 tegra114_clock_tune_cpu_trimmers_low +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ahb_enable_smmu +EXPORT_SYMBOL vmlinux 0x00000000 tegra_dfll_register +EXPORT_SYMBOL vmlinux 0x00000000 tegra_dfll_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 tegra_dfll_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 tegra_dfll_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tegra_fuse_readl +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_pad_get_voltage +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_pad_power_disable +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_pad_power_enable +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_pad_set_voltage +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_rail_power_off +EXPORT_SYMBOL vmlinux 0x00000000 tegra_io_rail_power_on +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_align +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_init +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_notified +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_read_advance +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_read_get_next_frame +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_reset +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_total_queue_size +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_write_advance +EXPORT_SYMBOL vmlinux 0x00000000 tegra_ivc_write_get_next_frame +EXPORT_SYMBOL vmlinux 0x00000000 tegra_powergate_power_off +EXPORT_SYMBOL vmlinux 0x00000000 tegra_powergate_remove_clamping +EXPORT_SYMBOL vmlinux 0x00000000 tegra_powergate_sequence_power_up +EXPORT_SYMBOL vmlinux 0x00000000 tegra_sku_info +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_clk_div +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_enable +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_pwr +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_resume +EXPORT_SYMBOL vmlinux 0x00000000 totalhigh_pages +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_midi +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_special +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 v7_coherent_kern_range +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_kern_cache_all +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_kern_dcache_area +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_user_cache_all +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_user_cache_range +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_base +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 walk_stackframe +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_fmt_taint +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/arm/crypto/sha1-arm 0x00000000 sha1_finup_arm +EXPORT_SYMBOL_GPL arch/arm/crypto/sha1-arm 0x00000000 sha1_update_arm +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-ac97 0x00000000 __devm_regmap_init_ac97 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-ac97 0x00000000 __regmap_init_ac97 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-ac97 0x00000000 regmap_ac97_default_volatile +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_hwfsm_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_postdiv_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_simple_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_disable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_dyn_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_edp_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_enable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_gfx3d_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_is_enabled_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr_hpm_lp +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_sr2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_vote_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_floor_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_esc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_lcc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_div_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_mux_closest_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 devm_clk_register_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_map +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_really_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_board_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_sleep_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq_floor +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_src_index +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_pll_set_fsm_mode +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_reset_ops +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_register +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_unregister +EXPORT_SYMBOL_GPL drivers/crypto/omap-crypto 0x00000000 omap_crypto_align_sg +EXPORT_SYMBOL_GPL drivers/crypto/omap-crypto 0x00000000 omap_crypto_cleanup +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/firmware/arm_scpi 0x00000000 get_scpi_ops +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_get_to_list +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 of_fpga_bridge_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_disable_psr +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_enable_psr +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_psr_supported +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_resume +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_start_crc +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_stop_crc +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_suspend +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_enable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_phy_i2c_write +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_set_sample_rate +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_setup_rx_sense +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_bus_flags_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_to_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_component_match_add +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_encoder_active_endpoint +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_find_panel_or_bridge +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 of_get_drm_display_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_connector_destroy +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_encoder_destroy +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_encoder_parse_of +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 ipu_plane_disable_deferred +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 ipu_planes_assign_pre +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_vclk_setup +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_mode_set +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_supported_vic +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_venc_repeat +EXPORT_SYMBOL_GPL drivers/gpu/drm/pl111/pl111_drm 0x00000000 pl111_versatile_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 vop_component_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_get_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_interlaced_scan +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_axi_id +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_block_mode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_fmt +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_format_passthrough +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_format_rgb +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_high_priority +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_image +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_resolution +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_rotation +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_stride +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_uv_offset +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_yuv_interleaved +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_yuv_planar_full +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_skip_odd_chroma_rows +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_zero +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_get_window +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_init_interface +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_is_interlaced +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_dest +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_downsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_mipi_datatype +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_skip_smfc +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_test_generator +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_window +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_init_sync +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_degrees_to_rot_mode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_adjust_videomode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_get_num +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_init_sync_panel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_config_wait4eot +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_set_global_alpha +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_set_window_pos +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_setup_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_drm_fourcc_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_fsu_link +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_fsu_unlink +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_get_num +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_graphics_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_idma_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_buffer_is_ready +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_channel_busy +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_channel_irq +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_clear_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_enable_watermark +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_get_current_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_link +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_lock_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_select_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_set_double_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_unlink +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_wait_busy +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_abort +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_adjust +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_enum_format +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_prepare +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_queue +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_sync +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_unprepare +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_verify +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_map_irq +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_mbus_code_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_module_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_module_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_pixelformat_is_planar +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_pixelformat_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_channel_configure +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_channel_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_format_supported +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_max_active_channels +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_present +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_rot_mode_to_degrees +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_set_csi_src_mux +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_set_ic_src_mux +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_map_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_set_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_set_watermark +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_srm_dp_update +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_stride_to_bytes +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_set_field_order +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_set_motion +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_setup +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_unsetup +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/clients/ssi_protocol 0x00000000 ssip_reset_event +EXPORT_SYMBOL_GPL drivers/hsi/clients/ssi_protocol 0x00000000 ssip_slave_get_master +EXPORT_SYMBOL_GPL drivers/hsi/clients/ssi_protocol 0x00000000 ssip_slave_running +EXPORT_SYMBOL_GPL drivers/hsi/clients/ssi_protocol 0x00000000 ssip_slave_start_tx +EXPORT_SYMBOL_GPL drivers/hsi/clients/ssi_protocol 0x00000000 ssip_slave_stop_tx +EXPORT_SYMBOL_GPL drivers/hsi/controllers/omap_ssi 0x00000000 ssi_waketest +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_add_clients_from_dt +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 __free_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 find_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 free_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 queue_iova +EXPORT_SYMBOL_GPL drivers/iommu/iova 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_get +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_put +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_register +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_unregister +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_cec_notifier +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_plat_device +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_vdec_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_venc_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_register +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_send +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_load_firmware +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_mapping_dm_addr +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_wdt_reg_handler +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x00000000 omap_vout_default_crop +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x00000000 omap_vout_new_crop +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x00000000 omap_vout_new_format +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x00000000 omap_vout_new_window +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x00000000 omap_vout_try_window +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_disable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_enable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get_device +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_put +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_begin +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_flush +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_update +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_init +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_map_sg +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_setup_lif +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_unmap_sg +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_cleanup_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_and_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_or_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_frame_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_mbus_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_fourcc +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_init_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_of_get_format +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_set_format_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_start +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_stop +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_of_get +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_put +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x00000000 videobuf_dma_contig_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x00000000 videobuf_queue_dma_contig_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x00000000 videobuf_to_dma_contig +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/motorola-cpcap 0x00000000 cpcap_sense_virq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/ssbi 0x00000000 ssbi_read +EXPORT_SYMBOL_GPL drivers/mfd/ssbi 0x00000000 ssbi_write +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_disable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_do_data_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_enable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_alloc +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_free +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_irq +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_pm_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_probe +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_remove +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_free +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_unregister +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_deselect +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_put +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_select +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_states +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_try_select +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/arc/arc_emac 0x00000000 arc_emac_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/arc/arc_emac 0x00000000 arc_emac_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/marvell/mvneta 0x00000000 mvneta_frag_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/marvell/mvneta 0x00000000 mvneta_frag_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_footer +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_header +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_fsm_decode +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_init +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_uninit +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 get_ufs_qcom_phy +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_calibrate +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_disable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_enable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_generic_probe +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_clks +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_vregulators +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_off +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_on +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_save_controller_version +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_set_tx_lane_enable +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra124_xusb_padctl_soc +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra_xusb_padctl_get +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra_xusb_padctl_hsic_set_idle +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra_xusb_padctl_put +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra_xusb_padctl_usb3_save_context +EXPORT_SYMBOL_GPL drivers/phy/tegra/phy-tegra-xusb 0x00000000 tegra_xusb_padctl_usb3_set_lfps_detect +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_pcie_pcs +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_phy_power +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_usb_set_mode +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-usb2 0x00000000 omap_usb2_set_comparator +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_get_num_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_parse_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_mdt_find_rsc_table +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_register_ssr_notifier +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_unregister_ssr_notifier +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_register +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_get_size +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_load +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_error +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_init +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_next_buf +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_register +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_remove +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_set_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-capture 0x00000000 imx_media_capture_device_unregister +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 __imx_media_find_sensor +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_add_video_device +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_alloc_dma_buf +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_enum_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_enum_ipu_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_enum_mbus_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fill_default_mbus_fields +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fim_add_controls +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fim_eof_monitor +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fim_free +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fim_init +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_fim_set_stream +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_ipu_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_mbus_format +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_mipi_csi2_channel +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_sensor +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_subdev_by_id +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_subdev_by_sd +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_find_upstream_subdev +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_free_dma_buf +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_grp_id_to_sd_name +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_init_mbus_fmt +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_ipu_image_to_mbus_fmt +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_mbus_fmt_to_ipu_image +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_mbus_fmt_to_pix_fmt +EXPORT_SYMBOL_GPL drivers/staging/media/imx/imx-media-common 0x00000000 imx_media_pipeline_set_stream +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/nvec/nvec 0x00000000 nvec_msg_free +EXPORT_SYMBOL_GPL drivers/staging/nvec/nvec 0x00000000 nvec_register_notifier +EXPORT_SYMBOL_GPL drivers/staging/nvec/nvec 0x00000000 nvec_unregister_notifier +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_register +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_unregister +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_get_drvdata +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_from_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_pa +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pa2va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_alloc_res_mem +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_put +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_va2pa +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init_post +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_set_wakeup +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-am335x-control 0x00000000 am335x_get_phy_control +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-tegra-usb 0x00000000 tegra_ehci_phy_restore_end +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-tegra-usb 0x00000000 tegra_ehci_phy_restore_start +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-tegra-usb 0x00000000 tegra_usb_phy_postresume +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-tegra-usb 0x00000000 tegra_usb_phy_preresume +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 __vfio_platform_register_reset +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_probe_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_remove_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_unregister_reset +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_find_source_for_first_ep +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_first_endpoint +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_next_endpoint +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_next_port +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_update +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_post +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_register +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_adsp2_rate_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_input_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_ng_enum +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_asrc_rate1 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_clk_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_down +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_sysclk_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_up +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_eq_coeff_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_free_spk_irqs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_hp_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_dmic_osr +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_hpf_cut_enum +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_common +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_dvfs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_mono +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_spk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_spk_irqs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_vol_limit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_input_analog +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_isrc_fsh +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_isrc_fsl +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf1_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf2_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf3_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf4_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf_coeff_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_texts +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_values +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_ng_hold +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_of_get_audio_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_output_anc_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_rate_text +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_rate_val +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_text +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_val +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_val_to_name +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_fll_refclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_output_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_simple_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_voice_trigger_switch +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_dt_ids +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98095 0x00000000 max98095_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x00000000 twl6040_get_clk_id +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x00000000 twl6040_get_dl1_gain +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x00000000 twl6040_get_hs_step_size +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x00000000 twl6040_get_trim_value +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x00000000 twl6040_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp1_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp1_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_bus_error +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_codec_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_codec_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_early_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_lock +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_preloader_get +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_preloader_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_copy +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_free +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_get_caps +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_handle_irq +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_open +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_pointer +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_set_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_trigger +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_fw_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_dcs_done +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_handle_analogue_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_hpl_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_hpr_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_set_bias_level +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_update_class_w +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_vmid_ena +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x00000000 wm8958_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x00000000 wm8994_mic_detect +EXPORT_SYMBOL_GPL sound/soc/davinci/snd-soc-edma 0x00000000 edma_pcm_platform_register +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/omap/snd-soc-omap-mcpdm 0x00000000 omap_mcpdm_configure_dn_offsets +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_ops +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_remove +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-platform 0x00000000 asoc_qcom_lpass_platform_register +EXPORT_SYMBOL_GPL sound/soc/samsung/snd-soc-idma 0x00000000 idma_reg_addr_init +EXPORT_SYMBOL_GPL sound/soc/samsung/snd-soc-s3c-dma 0x00000000 samsung_asoc_dma_platform_register +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-pcm 0x00000000 tegra_pcm_platform_register +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-pcm 0x00000000 tegra_pcm_platform_register_with_chan_names +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-pcm 0x00000000 tegra_pcm_platform_unregister +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-utils 0x00000000 tegra_asoc_utils_fini +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-utils 0x00000000 tegra_asoc_utils_init +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-utils 0x00000000 tegra_asoc_utils_set_ac97_rate +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra-utils 0x00000000 tegra_asoc_utils_set_rate +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra20-das 0x00000000 tegra20_das_connect_dac_to_dap +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra20-das 0x00000000 tegra20_das_connect_dap_to_dac +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra20-das 0x00000000 tegra20_das_connect_dap_to_dap +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra124_ahub_set_cif +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_allocate_rx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_allocate_tx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_disable_rx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_disable_tx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_enable_rx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_enable_tx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_free_rx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_free_tx_fifo +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_set_cif +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_set_rx_cif_source +EXPORT_SYMBOL_GPL sound/soc/tegra/snd-soc-tegra30-ahub 0x00000000 tegra30_ahub_unset_rx_cif_source +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cci_control_port_by_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cci_control_port_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ktime_divns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_check_condition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_release_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asic3_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asic3_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switch_request_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_get_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_put_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_trace_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_ace_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_disable_port_by_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_probed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_rx_buf_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_set_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_split_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_check_free_tx_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_control_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_eoi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_int_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctrl_rxchs_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctrl_txchs_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_get_num_rx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_get_num_tx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_set_num_rx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_phy_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_rx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_topology +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_opp_desc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_init_vexpress_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 display_timings_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dt_init_idle_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 encode_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exynos_get_pmu_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_videomode_from_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_rs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genpd_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpmc_omap_get_nand_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate_sep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_detect_slave_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_of_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 icst_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx6q_cpuidle_fec_irqs_unused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx6q_cpuidle_fec_irqs_used +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx_pcm_dma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx_pcm_fiq_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 imx_pcm_fiq_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_rs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_disable_ms +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_enable_ms +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_get_outputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_init_noauto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mctrl_gpio_to_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_strmode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mv_mbus_dram_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mv_mbus_dram_info_nooverlap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mvebu_mbus_get_dram_win_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mvebu_mbus_get_io_win_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_highest_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_revert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_from_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_parent_fill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_console_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_detach_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_display_timings_exist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_get_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_is_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_router_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_xlate_by_chan_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fdt_unflatten_tree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_parse_idle_states +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_remove_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_dma_window +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_fb_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_pci_domain_nr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_regulator_init_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_find_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_and_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_msi_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_check_probe_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_dma_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_devfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_host_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_max_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_parse_bus_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_default_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_count_elems_of_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u32_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_get_state_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_regulator_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_init_by_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_resolve_phandles +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_ntrips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_trip_points +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_is_trip_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_dr_mode_by_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_host_tpl_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_update_otg_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_get_fclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_modify_idlect_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_read_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_by_cap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_int_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_int_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_load_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_prescaler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_pwm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_write_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_write_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timers_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dma_filter_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_get_plat_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_iommu_restore_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_iommu_save_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_mcbsp_st_add_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_pcm_platform_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 otg_ulpi_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 owl_sps_set_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remap_cfgspace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_num_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_node_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_subnode_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_count_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_parse_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_add_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_remove_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl08x_filter_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_transmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probes_decode_arm_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 read_current_timer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rq_flush_dcache_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_device_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sram_exec_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tegra_pinctrl_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tegra_xusb_padctl_legacy_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tegra_xusb_padctl_legacy_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thread_notify_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ti_cm_get_macid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_of_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ulpi_viewport_access_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_companion_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 versatile_clcd_init_panel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_add_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_drop_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic-lpae +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic-lpae @@ -0,0 +1,21443 @@ +EXPORT_SYMBOL arch/arm/crypto/aes-arm 0x00000000 __aes_arm_decrypt +EXPORT_SYMBOL arch/arm/crypto/aes-arm 0x00000000 __aes_arm_encrypt +EXPORT_SYMBOL arch/arm/crypto/sha256-arm 0x00000000 crypto_sha256_arm_finup +EXPORT_SYMBOL arch/arm/crypto/sha256-arm 0x00000000 crypto_sha256_arm_update +EXPORT_SYMBOL arch/arm/lib/xor-neon 0x00000000 xor_block_neon_inner +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_component_probe +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_find_possible_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_panel +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_activate +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_deactivate +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_flush +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_flush_all +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_register +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_psr_unregister +EXPORT_SYMBOL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 rockchip_drm_wait_vact_end +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_of_name_probe +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_disable_irq +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_enable_irq +EXPORT_SYMBOL drivers/mailbox/omap-mailbox 0x00000000 omap_mbox_request_channel +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_calc_client_output +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_g_rect +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_s_selection +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_scale_crop 0x00000000 soc_camera_client_scale +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_set_coeff +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-csc 0x00000000 csc_set_coeff_bypass +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_config_scaler +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_set_hs_coeffs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-sc 0x00000000 sc_set_vs_coeffs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_abort_channel_ctd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_cfd_adb +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_cfd_block +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_in_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_out_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_add_sync_on_channel_ctd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_alloc_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_clear_list_stat +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_create +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_create_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_dump_regs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_enable_list_complete_irq +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_free_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_free_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_get_list_mask +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_get_list_stat +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_alloc +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_get_priv +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_hwlist_release +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_list_busy +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_list_cleanup +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_map_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_misc_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_raw_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_rawchan_add_out_dtd +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_reset_desc_list +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_rgb_fmts +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_bg_color +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_frame_start_event +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_line_mode +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_set_max_size +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_submit_descs +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_unmap_desc_buf +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_update_dma_addr +EXPORT_SYMBOL drivers/media/platform/ti-vpe/ti-vpdma 0x00000000 vpdma_yuv_fmts +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/qcom_rpm 0x00000000 qcom_rpm_write +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_probe +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_remove +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_resume +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x00000000 dw_mci_runtime_suspend +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_adjust_strength +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_disable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_enable +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_encode +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_get_stats +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_release +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 mtk_ecc_wait_done +EXPORT_SYMBOL drivers/mtd/nand/mtk_ecc 0x00000000 of_mtk_ecc_get +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_register +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_ae_unregister +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_get_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_put_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_register_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_reinit_handle +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hnae 0x00000000 hnae_unregister_notifier +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns/hns_dsaf 0x00000000 hns_dsaf_roce_reset +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_register_client +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_algo +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_ae_dev +EXPORT_SYMBOL drivers/net/ethernet/hisilicon/hns3/hnae3 0x00000000 hnae3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_register_edge +EXPORT_SYMBOL drivers/rpmsg/qcom_smd 0x00000000 qcom_smd_unregister_edge +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/soc/qcom/smd-rpm 0x00000000 qcom_rpm_smd_write +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_alloc +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get +EXPORT_SYMBOL drivers/soc/qcom/smem 0x00000000 qcom_smem_get_free_space +EXPORT_SYMBOL drivers/soc/qcom/wcnss_ctrl 0x00000000 qcom_wcnss_open_channel +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_hton +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_ntoh +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_clear_irqstatus +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_free_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_framedone_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_sync_lost_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_get_vsync_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_go +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_go_busy +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_is_enabled +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_set_lcd_config +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_set_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_mgr_setup +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_check +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_enabled +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_set_channel_out +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_ovl_setup +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_read_irqenable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_read_irqstatus +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_request_irq +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_runtime_get +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_runtime_put +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dispc_write_irqenable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_num_mgrs +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_num_ovls +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_feat_get_supported_color_modes +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_install_mgr_ops +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_connect +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_disable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_disconnect +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_enable +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_register_framedone_handler +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_set_lcd_config +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_set_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_start_update +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_mgr_unregister_framedone_handler +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 dss_uninstall_mgr_ops +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dispc_register_isr +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dispc_unregister_isr +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_find_output_by_port_node +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_next_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_num_overlay_managers +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_num_overlays +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_overlay +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_get_overlay_manager +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_ntsc_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_pal_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_dss_put_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omap_video_timings_to_videomode +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_compat_init +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_compat_uninit +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_recommended_bpp +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_resolution +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_default_get_timings +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_find_mgr_from_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_find_output_from_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_get_default_display_name +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_get_version +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_is_initialized +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_output_set_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_output_unset_device +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_register_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_register_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_unregister_display +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_unregister_output +EXPORT_SYMBOL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 videomode_to_omap_video_timings +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_read_of_freq_limits +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_idiv +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_idivmod +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_lasr +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_llsl +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_llsr +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_lmul +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_uidiv +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_uidivmod +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_ulcmp +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr0 +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr1 +EXPORT_SYMBOL vmlinux 0x00000000 __aeabi_unwind_cpp_pr2 +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __arm_ioremap_pfn +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_hvc +EXPORT_SYMBOL vmlinux 0x00000000 __arm_smccc_smc +EXPORT_SYMBOL vmlinux 0x00000000 __ashldi3 +EXPORT_SYMBOL vmlinux 0x00000000 __ashrdi3 +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __bswapdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __bswapsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __div0 +EXPORT_SYMBOL vmlinux 0x00000000 __divsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __do_div64 +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __gnu_mcount_nc +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __kunmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __lshrdi3 +EXPORT_SYMBOL vmlinux 0x00000000 __machine_arch_type +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memset32 +EXPORT_SYMBOL vmlinux 0x00000000 __memset64 +EXPORT_SYMBOL vmlinux 0x00000000 __memzero +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __modsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __muldi3 +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 __nand_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_offset +EXPORT_SYMBOL vmlinux 0x00000000 __pv_phys_pfn_offset +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsb +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsl +EXPORT_SYMBOL vmlinux 0x00000000 __raw_readsw +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesb +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesl +EXPORT_SYMBOL vmlinux 0x00000000 __raw_writesw +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __readwrite_bug +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_guard +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __udivsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __umodsi3 +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _change_bit +EXPORT_SYMBOL vmlinux 0x00000000 _clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _find_first_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_first_zero_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_next_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _find_next_zero_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_toio +EXPORT_SYMBOL vmlinux 0x00000000 _memset_io +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _set_bit +EXPORT_SYMBOL vmlinux 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL vmlinux 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_change_bit +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 _test_and_set_bit +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 ac97_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 amba_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 amba_find_device +EXPORT_SYMBOL vmlinux 0x00000000 amba_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 amba_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arm_clear_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_coherent_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 arm_delay_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 arm_dma_zone_size +EXPORT_SYMBOL vmlinux 0x00000000 arm_elf_read_implies_exec +EXPORT_SYMBOL vmlinux 0x00000000 arm_heavy_mb +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_io_modify +EXPORT_SYMBOL vmlinux 0x00000000 atomic_io_modify_relaxed +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_flush_dcache_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cacheid +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 contig_page_data +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_from_user_toio +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlb +EXPORT_SYMBOL vmlinux 0x00000000 cpu_user +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_of_clk_del_provider +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 div64_s64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 div_s64_rem +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_alloc_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x00000000 dma_mmap_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_map_probe +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 edma_filter_fn +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elf_check_arch +EXPORT_SYMBOL vmlinux 0x00000000 elf_hwcap +EXPORT_SYMBOL vmlinux 0x00000000 elf_hwcap2 +EXPORT_SYMBOL vmlinux 0x00000000 elf_platform +EXPORT_SYMBOL vmlinux 0x00000000 elf_set_personality +EXPORT_SYMBOL vmlinux 0x00000000 elm_config +EXPORT_SYMBOL vmlinux 0x00000000 elm_decode_bch_error_page +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_kernel_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 get_mem_type +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_configure +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_cs_free +EXPORT_SYMBOL vmlinux 0x00000000 gpmc_cs_request +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 htc_egpio_get_wakeup_irq +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 icst307_idx2s +EXPORT_SYMBOL vmlinux 0x00000000 icst307_s2div +EXPORT_SYMBOL vmlinux 0x00000000 icst525_idx2s +EXPORT_SYMBOL vmlinux 0x00000000 icst525_s2div +EXPORT_SYMBOL vmlinux 0x00000000 icst_hz +EXPORT_SYMBOL vmlinux 0x00000000 icst_hz_to_vco +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioremap +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cached +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_page +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_begin +EXPORT_SYMBOL vmlinux 0x00000000 kernel_neon_end +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmap +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 kmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kmap_to_page +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kunmap +EXPORT_SYMBOL vmlinux 0x00000000 kunmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 map_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 max_mapnr +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 mcount +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_map +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memset16 +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse_voltage +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiocpy +EXPORT_SYMBOL vmlinux 0x00000000 mmioset +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_probe +EXPORT_SYMBOL vmlinux 0x00000000 msm_pinctrl_remove +EXPORT_SYMBOL vmlinux 0x00000000 mtd_concat_create +EXPORT_SYMBOL vmlinux 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_free +EXPORT_SYMBOL vmlinux 0x00000000 nand_bch_init +EXPORT_SYMBOL vmlinux 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL vmlinux 0x00000000 nand_correct_data +EXPORT_SYMBOL vmlinux 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL vmlinux 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_oob_std +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL vmlinux 0x00000000 nand_read_page_raw +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan_ident +EXPORT_SYMBOL vmlinux 0x00000000 nand_scan_tail +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_oob_std +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL vmlinux 0x00000000 nand_write_page_raw +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 of_clk_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_count_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 of_device_alloc +EXPORT_SYMBOL vmlinux 0x00000000 of_device_get_match_data +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_available +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_device_register +EXPORT_SYMBOL vmlinux 0x00000000 of_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x00000000 of_find_backlight_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_matching_node_and_match +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_net_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_opts_by_path +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x00000000 of_find_property +EXPORT_SYMBOL vmlinux 0x00000000 of_get_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_child_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_get_cpu_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_ddr_timings +EXPORT_SYMBOL vmlinux 0x00000000 of_get_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_min_tck +EXPORT_SYMBOL vmlinux 0x00000000 of_get_named_gpio_flags +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_available_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_pci_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_property +EXPORT_SYMBOL vmlinux 0x00000000 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_by_regs +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_count +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_next_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_by_id +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_node +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_io_request_and_map +EXPORT_SYMBOL vmlinux 0x00000000 of_iomap +EXPORT_SYMBOL vmlinux 0x00000000 of_machine_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_match_device +EXPORT_SYMBOL vmlinux 0x00000000 of_match_node +EXPORT_SYMBOL vmlinux 0x00000000 of_mdio_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_add_data +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_remove +EXPORT_SYMBOL vmlinux 0x00000000 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_node_get +EXPORT_SYMBOL vmlinux 0x00000000 of_node_put +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_fixed_args +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_deregister_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_get_and_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_is_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_register_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x00000000 of_root +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_address +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x00000000 omap_disable_dma_irq +EXPORT_SYMBOL vmlinux 0x00000000 omap_dma_link_lch +EXPORT_SYMBOL vmlinux 0x00000000 omap_dma_set_global_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_enable_dma_irq +EXPORT_SYMBOL vmlinux 0x00000000 omap_free_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_active_status +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_dst_pos +EXPORT_SYMBOL vmlinux 0x00000000 omap_get_dma_src_pos +EXPORT_SYMBOL vmlinux 0x00000000 omap_request_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_rev +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_callback +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_channel_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_burst_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_data_pack +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_dest_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_priority +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_burst_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_data_pack +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_src_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_transfer_params +EXPORT_SYMBOL vmlinux 0x00000000 omap_set_dma_write_mode +EXPORT_SYMBOL vmlinux 0x00000000 omap_start_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_stop_dma +EXPORT_SYMBOL vmlinux 0x00000000 omap_type +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL vmlinux 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 outer_cache +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_address +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_min_io +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_min_mem +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfn_valid +EXPORT_SYMBOL vmlinux 0x00000000 pgprot_kernel +EXPORT_SYMBOL vmlinux 0x00000000 pgprot_user +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 pps_event +EXPORT_SYMBOL vmlinux 0x00000000 pps_lookup_dev +EXPORT_SYMBOL vmlinux 0x00000000 pps_register_source +EXPORT_SYMBOL vmlinux 0x00000000 pps_unregister_source +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processor +EXPORT_SYMBOL vmlinux 0x00000000 processor_id +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_event +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_index +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_register +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ptp_find_pin +EXPORT_SYMBOL vmlinux 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_assign_mem +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_cpu_power_down +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_get_version +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_hdcp_req +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_readl +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_io_writel +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_init +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_iommu_secure_ptbl_size +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_is_available +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_auth_and_reset +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_init_image +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_mem_setup +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_pas_supported +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_restore_sec_cfg +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_cold_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_remote_state +EXPORT_SYMBOL vmlinux 0x00000000 qcom_scm_set_warm_boot_addr +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_dsp +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_midi +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_mixer +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_special +EXPORT_SYMBOL vmlinux 0x00000000 register_sound_special_device +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_and_free_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 samsung_rev +EXPORT_SYMBOL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_split +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_filter +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_probe +EXPORT_SYMBOL vmlinux 0x00000000 shdma_chan_remove +EXPORT_SYMBOL vmlinux 0x00000000 shdma_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 shdma_init +EXPORT_SYMBOL vmlinux 0x00000000 shdma_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 shdma_reset +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_map_init +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_file_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_file_remove +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_card_set_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_cards +EXPORT_SYMBOL vmlinux 0x00000000 snd_component_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_notify +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_remove +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_replace +EXPORT_SYMBOL vmlinux 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL vmlinux 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_ecards_limit +EXPORT_SYMBOL vmlinux 0x00000000 snd_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_free_entry +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_get_line +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_get_str +EXPORT_SYMBOL vmlinux 0x00000000 snd_info_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_list +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_ranges +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL vmlinux 0x00000000 snd_interval_refine +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_report +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_set_key +EXPORT_SYMBOL vmlinux 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_major +EXPORT_SYMBOL vmlinux 0x00000000 snd_malloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL vmlinux 0x00000000 snd_oss_info_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL vmlinux 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_stop +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL vmlinux 0x00000000 snd_power_wait +EXPORT_SYMBOL vmlinux 0x00000000 snd_register_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_register_oss_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_request_card +EXPORT_SYMBOL vmlinux 0x00000000 snd_seq_root +EXPORT_SYMBOL vmlinux 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_close +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_continue +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_free +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_global_register +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_new +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_notify +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_open +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_pause +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_resolution +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_start +EXPORT_SYMBOL vmlinux 0x00000000 snd_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 snd_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 sound_class +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_rev +EXPORT_SYMBOL vmlinux 0x00000000 system_serial +EXPORT_SYMBOL vmlinux 0x00000000 system_serial_high +EXPORT_SYMBOL vmlinux 0x00000000 system_serial_low +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tc6393xb_lcd_mode +EXPORT_SYMBOL vmlinux 0x00000000 tc6393xb_lcd_set_power +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_clk_div +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_enable +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_pwr +EXPORT_SYMBOL vmlinux 0x00000000 tmio_core_mmc_resume +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 totalhigh_pages +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_midi +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sound_special +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 v7_coherent_kern_range +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_kern_cache_all +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_kern_dcache_area +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_user_cache_all +EXPORT_SYMBOL vmlinux 0x00000000 v7_flush_user_cache_range +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_base +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 walk_stackframe +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_fmt_taint +EXPORT_SYMBOL vmlinux 0x00000000 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/arm/crypto/sha1-arm 0x00000000 sha1_finup_arm +EXPORT_SYMBOL_GPL arch/arm/crypto/sha1-arm 0x00000000 sha1_update_arm +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_hwfsm_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_alpha_pll_postdiv_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_branch_simple_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_byte_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_disable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_dyn_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_edp_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_enable_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_gfx3d_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_is_enabled_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_configure_sr_hpm_lp +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_sr2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_pll_vote_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_floor_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass2_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_bypass_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_esc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_lcc_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_rcg_pixel_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_div_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 clk_regmap_mux_closest_ops +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 devm_clk_register_regmap +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_map +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_really_probe +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_board_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_cc_register_sleep_clk +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_freq_floor +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_find_src_index +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_pll_set_fsm_mode +EXPORT_SYMBOL_GPL drivers/clk/qcom/clk-qcom 0x00000000 qcom_reset_ops +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_register +EXPORT_SYMBOL_GPL drivers/cpufreq/arm_big_little 0x00000000 bL_cpufreq_unregister +EXPORT_SYMBOL_GPL drivers/crypto/omap-crypto 0x00000000 omap_crypto_align_sg +EXPORT_SYMBOL_GPL drivers/crypto/omap-crypto 0x00000000 omap_crypto_cleanup +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/firmware/arm_scpi 0x00000000 get_scpi_ops +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_get_to_list +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 of_fpga_bridge_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_disable_psr +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_enable_psr +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_psr_supported +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_resume +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_start_crc +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_stop_crc +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_suspend +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/analogix/analogix_dp 0x00000000 analogix_dp_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_enable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_phy_i2c_write +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_set_sample_rate +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_setup_rx_sense +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi 0x00000000 dw_mipi_dsi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_bus_flags_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_to_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_component_match_add +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_encoder_active_endpoint +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_find_panel_or_bridge +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 of_get_drm_display_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_connector_destroy +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_encoder_destroy +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 imx_drm_encoder_parse_of +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 ipu_plane_disable_deferred +EXPORT_SYMBOL_GPL drivers/gpu/drm/imx/imxdrm 0x00000000 ipu_planes_assign_pre +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_vclk_setup +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_mode_set +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_supported_vic +EXPORT_SYMBOL_GPL drivers/gpu/drm/meson/meson-drm 0x00000000 meson_venc_hdmi_venc_repeat +EXPORT_SYMBOL_GPL drivers/gpu/drm/pl111/pl111_drm 0x00000000 pl111_versatile_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/rockchip/rockchipdrm 0x00000000 vop_component_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_get_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_interlaced_scan +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_axi_id +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_block_mode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_fmt +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_format_passthrough +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_format_rgb +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_high_priority +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_image +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_resolution +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_rotation +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_stride +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_uv_offset +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_yuv_interleaved +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_set_yuv_planar_full +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_skip_odd_chroma_rows +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_cpmem_zero +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_get_window +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_init_interface +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_is_interlaced +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_dest +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_downsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_mipi_datatype +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_skip_smfc +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_test_generator +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_csi_set_window +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_init_sync +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_degrees_to_rot_mode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_adjust_videomode +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_get_num +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_init_sync_panel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_di_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_config_wait4eot +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dmfc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_set_global_alpha +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_set_window_pos +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dp_setup_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_drm_fourcc_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_fsu_link +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_fsu_unlink +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_get_num +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_dump +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_graphics_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_idma_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_ic_task_init +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_buffer_is_ready +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_channel_busy +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_channel_irq +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_clear_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_disable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_enable_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_enable_watermark +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_get_current_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_link +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_lock_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_select_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_set_double_buffer +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_unlink +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_idmac_wait_busy +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_abort +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_adjust +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_enum_format +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_prepare +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_queue +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_sync +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_unprepare +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_image_convert_verify +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_map_irq +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_mbus_code_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_module_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_module_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_pixelformat_is_planar +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_pixelformat_to_colorspace +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_channel_configure +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_channel_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_format_supported +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_max_active_channels +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_prg_present +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_rot_mode_to_degrees +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_set_csi_src_mux +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_set_ic_src_mux +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_map_channel +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_set_burstsize +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_smfc_set_watermark +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_srm_dp_update +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_stride_to_bytes +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_disable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_enable +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_get +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_put +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_set_field_order +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_set_motion +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_setup +EXPORT_SYMBOL_GPL drivers/gpu/ipu-v3/imx-ipu-v3 0x00000000 ipu_vdi_unsetup +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_add_clients_from_dt +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_get +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_put +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_register +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_unregister +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_cec_notifier +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_plat_device +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_vdec_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_get_venc_hw_capa +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_register +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_ipi_send +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_load_firmware +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_mapping_dm_addr +EXPORT_SYMBOL_GPL drivers/media/platform/mtk-vpu/mtk-vpu 0x00000000 vpu_wdt_reg_handler +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_disable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_enable +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_get_device +EXPORT_SYMBOL_GPL drivers/media/platform/rcar-fcp 0x00000000 rcar_fcp_put +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_begin +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_flush +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_atomic_update +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_init +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_map_sg +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_setup_lif +EXPORT_SYMBOL_GPL drivers/media/platform/vsp1/vsp1 0x00000000 vsp1_du_unmap_sg +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_cleanup_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_and_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_or_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_frame_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_mbus_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_fourcc +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_init_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_of_get_format +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_set_format_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_start +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_stop +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_of_get +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_put +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/motorola-cpcap 0x00000000 cpcap_sense_virq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/ssbi 0x00000000 ssbi_read +EXPORT_SYMBOL_GPL drivers/mfd/ssbi 0x00000000 ssbi_write +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x00000000 dw_mci_pltfm_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/renesas_sdhi_core 0x00000000 renesas_sdhi_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_disable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_do_data_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_enable_mmc_irqs +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_alloc +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_free +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_probe +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_remove +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_host_runtime_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/tmio_mmc_core 0x00000000 tmio_mmc_irq +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_pm_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_probe +EXPORT_SYMBOL_GPL drivers/mtd/nand/brcmnand/brcmnand 0x00000000 brcmnand_remove +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_free +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_unregister +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_deselect +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_put +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_select +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_states +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_try_select +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/arc/arc_emac 0x00000000 arc_emac_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/arc/arc_emac 0x00000000 arc_emac_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/marvell/mvneta 0x00000000 mvneta_frag_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/marvell/mvneta 0x00000000 mvneta_frag_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_footer +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_header +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_fsm_decode +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_init +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_uninit +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 get_ufs_qcom_phy +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_calibrate +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_disable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_enable_dev_ref_clk +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_generic_probe +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_clks +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_init_vregulators +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_off +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_power_on +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_save_controller_version +EXPORT_SYMBOL_GPL drivers/phy/qualcomm/phy-qcom-ufs 0x00000000 ufs_qcom_phy_set_tx_lane_enable +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_pcie_pcs +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_phy_power +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-control 0x00000000 omap_control_usb_set_mode +EXPORT_SYMBOL_GPL drivers/phy/ti/phy-omap-usb2 0x00000000 omap_usb2_set_comparator +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_get_num_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_parse_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_add_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_mdt_find_rsc_table +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_register_ssr_notifier +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_glink_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_smd_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_remove_ssr_subdev +EXPORT_SYMBOL_GPL drivers/remoteproc/qcom_common 0x00000000 qcom_unregister_ssr_notifier +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_register +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_smem 0x00000000 qcom_glink_smem_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_get_size +EXPORT_SYMBOL_GPL drivers/soc/qcom/mdt_loader 0x00000000 qcom_mdt_load +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_register +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_device_unregister +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_get_drvdata +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_alloc +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_from_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_id +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_pa +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_get_va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pa2va +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_alloc_res_mem +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_pool_free +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_put +EXPORT_SYMBOL_GPL drivers/tee/tee 0x00000000 tee_shm_va2pa +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_disable_ms +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_enable_ms +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_free +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_get +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_get_outputs +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_init +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_init_noauto +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_set +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_mctrl_gpio 0x00000000 mctrl_gpio_to_gpiod +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init_post +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_set_wakeup +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-am335x-control 0x00000000 am335x_get_phy_control +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 __vfio_platform_register_reset +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_probe_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_remove_common +EXPORT_SYMBOL_GPL drivers/vfio/platform/vfio-platform-base 0x00000000 vfio_platform_unregister_reset +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_find_source_for_first_ep +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_first_endpoint +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_next_endpoint +EXPORT_SYMBOL_GPL drivers/video/fbdev/omap2/omapfb/dss/omapdss 0x00000000 omapdss_of_get_next_port +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_alloc +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_cache_update +EXPORT_SYMBOL_GPL drivers/video/fbdev/sh_mobile_meram 0x00000000 sh_mobile_meram_free +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_post +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_register +EXPORT_SYMBOL_GPL net/qrtr/qrtr 0x00000000 qrtr_endpoint_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_adsp2_rate_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_input_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_anc_ng_enum +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_asrc_rate1 +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_clk_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_down +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_sysclk_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_dvfs_up +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_eq_coeff_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_free_spk_irqs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_hp_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_dmic_osr +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_hpf_cut_enum +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_in_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_common +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_dvfs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_gpio +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_mono +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_spk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_spk_irqs +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_init_vol_limit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_input_analog +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_isrc_fsh +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_isrc_fsl +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf1_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf2_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf3_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf4_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_lhpf_coeff_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_texts +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_mixer_values +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_ng_hold +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_of_get_audio_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_out_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_output_anc_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_rate_text +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_rate_val +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_text +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_val +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_sample_rate_val_to_name +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_fll_refclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_output_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_simple_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x00000000 arizona_voice_trigger_switch +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_dt_ids +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98095 0x00000000 max98095_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp1_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp1_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_bus_error +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_codec_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_codec_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_early_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_lock +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_preloader_get +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_preloader_put +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp2_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_copy +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_free +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_get_caps +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_handle_irq +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_open +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_pointer +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_set_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_compr_trigger +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x00000000 wm_adsp_fw_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_dcs_done +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_handle_analogue_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_hpl_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_hpr_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_set_bias_level +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_update_class_w +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x00000000 wm_hubs_vmid_ena +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x00000000 wm8958_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x00000000 wm8994_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_ops +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_dai_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_probe +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-cpu 0x00000000 asoc_qcom_lpass_cpu_platform_remove +EXPORT_SYMBOL_GPL sound/soc/qcom/snd-soc-lpass-platform 0x00000000 asoc_qcom_lpass_platform_register +EXPORT_SYMBOL_GPL sound/soc/samsung/snd-soc-idma 0x00000000 idma_reg_addr_init +EXPORT_SYMBOL_GPL sound/soc/samsung/snd-soc-s3c-dma 0x00000000 samsung_asoc_dma_platform_register +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cci_control_port_by_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cci_control_port_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ktime_divns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_ahb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_apb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amba_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_check_condition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arm_iommu_release_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asic3_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asic3_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switch_request_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_get_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_put_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_trace_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bL_switcher_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_ace_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_disable_port_by_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cci_probed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_rx_buf_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_get_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_set_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_split_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_chan_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_check_free_tx_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_control_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_eoi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_int_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctlr_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctrl_rxchs_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_ctrl_txchs_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_get_num_rx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_get_num_tx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpdma_set_num_rx_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpsw_phy_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_rx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpts_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cluster_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_pm_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_topology +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_opp_desc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_init_vexpress_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 display_timings_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dt_init_idle_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 encode_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exynos_get_pmu_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_videomode_from_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_rs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genpd_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpmc_omap_get_nand_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_gate_sep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hisi_reset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_detect_slave_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_of_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_slave_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 icst_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_bch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_rs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_strmode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtk_smi_larb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 musb_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mv_mbus_dram_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mv_mbus_dram_info_nooverlap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mvebu_mbus_get_dram_win_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mvebu_mbus_get_io_win_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_highest_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_revert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_hw_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_add_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_from_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_get_parent_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_hw_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_parent_fill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_clk_src_simple_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_console_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_detach_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_display_timings_exist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_get_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_is_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_router_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_xlate_by_chan_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fdt_unflatten_tree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_parse_idle_states +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_remove_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_dma_window +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_fb_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_pci_domain_nr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_regulator_init_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_find_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_and_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_msi_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_check_probe_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_dma_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_devfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_host_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_max_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_parse_bus_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_default_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_count_elems_of_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u32_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_get_state_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_regulator_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_init_by_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_resolve_phandles +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_ntrips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_trip_points +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_is_trip_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_dr_mode_by_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_host_tpl_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_update_otg_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_get_fclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_modify_idlect_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_read_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_by_cap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_int_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_int_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_load_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_prescaler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_pwm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_set_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_write_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timer_write_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dm_timers_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_dma_filter_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_get_plat_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_iommu_restore_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_iommu_save_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_mcbsp_st_add_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_pcm_platform_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 omap_tll_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 otg_ulpi_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 owl_sps_set_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remap_cfgspace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_num_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_node_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_subnode_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_count_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_parse_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_add_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_remove_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl08x_filter_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_transmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pl320_ipc_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probes_decode_arm_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 qcom_smem_state_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 read_current_timer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rq_flush_dcache_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_device_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sram_exec_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thread_notify_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ti_cm_get_macid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_of_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65217_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ulpi_viewport_access_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_companion_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 versatile_clcd_init_panel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_add_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_drop_ep_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_mtk_sch_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.modules @@ -0,0 +1,5192 @@ +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_aspeed_vuart +8250_dw +8250_exar +8250_men_mcb +8250_moxa +8250_omap +8250_uniphier +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abp060mg +acard-ahci +acecad +acenic +acp_audio_dma +act200l-sir +act8865-regulator +act8945a +act8945a-regulator +act8945a_charger +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-arm +aes-arm-bs +aes-arm-ce +aes_ti +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +afs +ah4 +ah6 +ahci +ahci_ceva +ahci_dm816 +ahci_mtk +ahci_mvebu +ahci_qoriq +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airspy +ak8974 +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-pr-ip-core-plat +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am35x +am53c974 +amba-pl010 +ambakmi +amc6821 +amd +amd5536udc_pci +amd8111e +amdgpu +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +analogix_dp +anatop-regulator +ansi_cprng +anubis +ao-cec +aoe +apbps2 +apds9300 +apds9802als +apds990x +apds9960 +appledisplay +appletalk +appletouch +applicom +aquantia +ar1021_i2c +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_emac +arc_ps2 +arc_uart +arcmsr +arcnet +arcpgu +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arm_big_little +arm_big_little_dt +arm_mhu +arm_scpi +armada +arp_tables +arpt_mangle +arptable_filter +artpec6_crypto +as102_fe +as3711-regulator +as3711_bl +as3722-regulator +as3935 +as5011 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +ata_generic +ata_piix +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atm +atmel +atmel-flexcom +atmel-hlcdc +atmel-hlcdc-dc +atmel_captouch +atmel_mxt_ts +atmel_pci +atmtcp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avmfritz +ax25 +ax88179_178a +ax88796 +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bL_switcher_dummy_if +bam_dma +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bcm-keypad +bcm-phy-lib +bcm-sf2 +bcm203x +bcm3510 +bcm47xxsflash +bcm590xx +bcm590xx-regulator +bcm5974 +bcm63138_nand +bcm6368_nand +bcm63xx_uart +bcm7xxx +bcm87xx +bcma +bcmsysport +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +berlin2-adc +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpck6 +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmnand +brcmsmac +brcmstb_nand +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btqcomsmd +btrfs +btrtl +btsdio +bttv +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence-quadspi +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +cap11xx +capi +capidrv +capmode +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccree +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-neon +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipone_icn8318 +chnl_net +ci_hdrc +ci_hdrc_imx +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_tegra +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cirrus +cirrusfb +clip +clk-cdce706 +clk-cdce925 +clk-cs2000-cp +clk-exynos-audss +clk-hi3519 +clk-hi655x +clk-max77686 +clk-palmas +clk-pwm +clk-qcom +clk-rk808 +clk-rpm +clk-s2mps11 +clk-scpi +clk-si514 +clk-si5351 +clk-si570 +clk-smd-rpm +clk-twl6040 +clk-versaclock5 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm3605 +cm36651 +cma3000_d0x +cma3000_d0x_i2c +cmac +cmtp +cnic +cobalt +cobra +coda +colibri-vf50-ts +com20020 +com20020-pci +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_parport +comedi_pci +comedi_test +comedi_usb +comm +contec_pci_dio +cordic +core +cortina +cp210x +cpcap-adc +cpcap-battery +cpcap-charger +cpcap-pwrbutton +cpcap-regulator +cpia2 +cppi41 +cramfs +crc-itu-t +crc32-arm-ce +crc32_generic +crc4 +crc7 +crc8 +crct10dif-arm-ce +crg-hi3516cv300 +crg-hi3798cv200 +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +cs89x0 +csiostor +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062-thermal +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +ddbridge +de2104x +decnet +deflate +defxx +denali +denali_dt +denali_pci +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +digicolor-usart +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9000 +dm9601 +dmard06 +dmard09 +dmard10 +dme1737 +dmfe +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dove_thermal +dp83822 +dp83848 +dp83867 +dpot-dac +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dumb-vga-dac +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw-hdmi +dw-hdmi-ahb-audio +dw-hdmi-cec +dw-hdmi-i2s-audio +dw-mipi-dsi +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_hdmi-imx +dw_mipi_dsi-stm +dw_mmc +dw_mmc-exynos +dw_mmc-k3 +dw_mmc-pci +dw_mmc-pltfm +dw_mmc-rockchip +dw_wdt +dwc-xlgmac +dwc3 +dwc3-exynos +dwc3-of-simple +dwc3-omap +dwmac-dwc-qos-eth +dwmac-generic +dwmac-ipq806x +dwmac-meson +dwmac-meson8b +dwmac-rk +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +earth-pt1 +earth-pt3 +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ecdh_generic +echainiv +echo +edt-ft5x06 +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efs +egalax_ts +egalax_ts_serial +ehci-omap +ehset +ektf2127 +elan_i2c +elants_i2c +elo +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emac_rockchip +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +emif +empeg +ems_pci +ems_usb +emu10k1-gp +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +eni +enic +envelope-detector +epat +epia +epic100 +eql +esas2r +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-qcom-spmi-misc +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +exynos-gsc +exynos-lpass +exynos-rng +exynos_adc +exynosdrm +ezusb +f2fs +f71805f +f71882fg +f75375s +f81232 +f81534 +fakelb +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdp +fdp_i2c +fealnx +ff-memless +fid +firedtv +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fl512 +fld +flexcan +flexfb +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-bridge +fpga-mgr +fpga-region +freevxfs +friq +frpw +fsa9480 +fscache +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl-dcu-drm +fsl-edma +fsl_lpuart +ftdi-elan +ftdi_sio +ftgmac100 +ftl +ftmac100 +ftsteutates +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_multi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gcc-apq8084 +gcc-ipq4019 +gcc-ipq806x +gcc-ipq8074 +gcc-mdm9615 +gcc-msm8660 +gcc-msm8916 +gcc-msm8960 +gcc-msm8974 +gcc-msm8994 +gcc-msm8996 +gdmtty +gdmulte +gen_probe +generic +generic-adc-battery +generic_bl +genet +geneve +gf2k +gfs2 +ghash-arm-ce +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glink_ssr +gluebi +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-74x164 +gpio-74xx-mmio +gpio-addr-flash +gpio-adnp +gpio-adp5520 +gpio-adp5588 +gpio-altera +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-fan +gpio-grgpio +gpio-ir-recv +gpio-ir-tx +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-lp87565 +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-max77620 +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rcar +gpio-rdc321x +gpio-regulator +gpio-syscon +gpio-tpic2810 +gpio-tps65086 +gpio-tps65218 +gpio-tps65912 +gpio-ucb1400 +gpio-uniphier +gpio-viperboard +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gpio_wdt +gr_udc +grace +grcan +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hclge +hd44780 +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcd +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hi311x +hi6210-i2s +hi6220-mailbox +hi6220_reset +hi6421-pmic-core +hi6421-regulator +hi6421v530-regulator +hi655x-pmic +hi655x-regulator +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +highbank-cpufreq +highbank_l2_edac +highbank_mc_edac +hih6130 +hip04_eth +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hisi-rng +hisi-sfc +hisi504_nand +hisi_femac +hisi_powerkey +hisi_thermal +hix5hd2_gmac +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hnae +hnae3 +hns_dsaf +hns_enet_drv +hns_mdio +hopper +horus3a +hostap +hostap_pci +hostap_plx +hp03 +hp100 +hp206c +hpfs +hpilo +hpsa +hptiop +hsi +hsi_char +hso +hsr +ht16k33 +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hwa-hc +hwa-rc +hwmon-vid +hx711 +hx8357 +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-arb-gpio-challenge +i2c-axxia +i2c-cbus-gpio +i2c-cros-ec-tunnel +i2c-demux-pinctrl +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-emev2 +i2c-exynos5 +i2c-gpio +i2c-hid +i2c-hix5hd2 +i2c-i801 +i2c-isch +i2c-kempld +i2c-matroxfb +i2c-meson +i2c-mt65xx +i2c-mux +i2c-mux-gpio +i2c-mux-gpmux +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-pinctrl +i2c-mux-reg +i2c-mv64xxx +i2c-nforce2 +i2c-nomadik +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-pxa +i2c-qup +i2c-rcar +i2c-riic +i2c-rk3x +i2c-robotfuzz-osif +i2c-sh_mobile +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-slave-eeprom +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-versatile +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i40e +i40evf +i40iw +i5k_amb +i6300esb +i740fb +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibmaem +ibmpex +ice40-spi +icp_multi +icplus +ics932s401 +idma64 +idmouse +idt77252 +idt_89hpesx +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-mux +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +impa7 +ims-pcu +imx-ipu-v3 +imx-ldb +imx-tve +imx074 +imx6ul_tsc +imxdrm +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int51x1 +intel-xway +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +iproc_nand +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipx +ir-hix5hd2 +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-rx51 +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-spi +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irtty-sir +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it913x +itd1000 +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k3dma +kafs +kalmia +kaweth +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcc-ipq806x +lcc-mdm9615 +lcc-msm8960 +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-aat1290 +leds-adp5520 +leds-as3645a +leds-bcm6328 +leds-bcm6358 +leds-bd2802 +leds-blinkm +leds-cpcap +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-is31fl319x +leds-is31fl32xx +leds-ktd2692 +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max77693 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-ns2 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pm8058 +leds-pwm +leds-regulator +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +lego_ev3_battery +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +lis3lv02d_spi +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp873x-regulator +lp8755 +lp87565 +lp87565-regulator +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr2_nvm +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvds-encoder +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +macb +macb_pci +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mailbox-test +mali-dp +mantis +mantis_core +map_absent +map_ram +map_rom +marvell +marvell-cesa +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max14656_charger_detector +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max5821 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77620-regulator +max77620_thermal +max77620_wdt +max77686-regulator +max77693-haptic +max77693-regulator +max77693_charger +max77802-regulator +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8973-regulator +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bcm-unimac +mdio-bitbang +mdio-gpio +mdio-hisi-femac +mdio-mux +mdio-mux-gpio +mdio-mux-mmioreg +mdt_loader +me4000 +me_daq +media +mediatek-cpufreq +mediatek-drm +mediatek-drm-hdmi +megachips-stdpxxxx-ge-b850v3-fw +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +melfas_mip4 +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +meson-drm +meson-gx-mmc +meson-gxl +meson-ir +meson-mx-sdio +meson-rng +meson_dw_hdmi +meson_gxbb_wdt +meson_saradc +meson_uart +meson_wdt +metro-usb +metronomefb +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_spi +mmcc-apq8084 +mmcc-msm8960 +mmcc-msm8974 +mmcc-msm8996 +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +motorola-cpcap +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi001 +msi2500 +msm +msm-rng +msp3400 +mspro_block +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6380-regulator +mt6397-core +mt6397-regulator +mt6577_auxadc +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd_dataflash +mtdoops +mtdram +mtdswap +mtip32xx +mtk-cir +mtk-crypto +mtk-pmic-wrap +mtk-quadspi +mtk-rng +mtk-sd +mtk-vpu +mtk_ecc +mtk_nand +mtk_thermal +mtk_wdt +mtouch +mtu3 +multipath +multiq3 +musb_am335x +musb_dsps +mux-adg792a +mux-core +mux-gpio +mux-mmio +mv643xx_eth +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvneta +mvpp2 +mvsas +mvsdio +mvumi +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxser +mxsfb +mxuport +myri10ge +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nbpfaxi +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_labpc +ni_labpc_common +ni_labpc_pci +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nicstar +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nosy +notifier-error-inject +nouveau +nozomi +nps_enet +ns558 +ns83820 +nsh +nsp32 +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmem-uniphier-efuse +nvmem_meson_mx_efuse +nvmem_qfprom +nvmem_rockchip_efuse +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxp-ptn3460 +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_mmc_spi +of_xilinx_wdt +old_belkin-sir +omap +omap-aes-driver +omap-crypto +omap-des +omap-mailbox +omap-ocp2scp +omap-rng +omap-sham +omap2430 +omap4-keypad +omap_hdq +omap_hwspinlock +omap_wdt +omapdss +omapfb +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opt3001 +optee +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +orion_nand +orion_wdt +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +palmas-pwrbutton +palmas-regulator +palmas_gpadc +pandora_bl +panel +panel-innolux-p079zca +panel-jdi-lt070me05000 +panel-lg-lg4573 +panel-lvds +panel-orisetech-otm8009a +panel-panasonic-vvx10f034n00 +panel-raspberrypi-touchscreen +panel-samsung-ld9040 +panel-samsung-s6e3ha2 +panel-samsung-s6e63j0x03 +panel-samsung-s6e8aa0 +panel-seiko-43wvf1g +panel-sharp-lq101r1sx01 +panel-sharp-ls043t1le01 +panel-simple +panel-sitronix-st7789v +parade-ps8622 +parallel-display +paride +parkbd +parman +parport +parport_ax88796 +parport_pc +parport_serial +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_of_platform +pata_oldpiix +pata_opti +pata_optidma +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pbias-regulator +pblk +pc300too +pc87360 +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmda12 +pcmmio +pcmuio +pcnet32 +pcrypt +pcwd_pci +pcwd_usb +pd +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_usb +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-am335x +phy-am335x-control +phy-bcm-kona-usb2 +phy-berlin-sata +phy-berlin-usb +phy-cpcap-usb +phy-dm816x-usb +phy-exynos-usb2 +phy-exynos5-usbdrd +phy-gpio-vbus-usb +phy-hix5hd2-sata +phy-isp1301 +phy-meson-gxl-usb2 +phy-meson8b-usb2 +phy-mtk-tphy +phy-mvebu-cp110-comphy +phy-omap-control +phy-omap-usb2 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-apq8064-sata +phy-qcom-ipq806x-sata +phy-qcom-qmp +phy-qcom-qusb2 +phy-qcom-ufs +phy-qcom-ufs-qmp-14nm +phy-qcom-ufs-qmp-20nm +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-rcar-gen2 +phy-rcar-gen3-usb2 +phy-rcar-gen3-usb3 +phy-rockchip-dp +phy-rockchip-emmc +phy-rockchip-inno-usb2 +phy-rockchip-pcie +phy-rockchip-typec +phy-rockchip-usb +phy-tahvo +phy-ti-pipe3 +phy-tusb1210 +phy-twl4030-usb +phy-twl6030-usb +physmap +physmap_of +pi433 +pinctrl-apq8064 +pinctrl-apq8084 +pinctrl-ipq4019 +pinctrl-ipq8064 +pinctrl-ipq8074 +pinctrl-max77620 +pinctrl-mcp23s08 +pinctrl-mdm9615 +pinctrl-msm8660 +pinctrl-msm8916 +pinctrl-msm8960 +pinctrl-msm8994 +pinctrl-msm8996 +pinctrl-msm8x74 +pinctrl-rk805 +pinctrl-spmi-gpio +pinctrl-spmi-mpp +pinctrl-ssbi-gpio +pinctrl-ssbi-mpp +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl111_drm +pl172 +pl2303 +pl330 +plat-ram +plat_nand +platform_lcd +platform_mhu +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-pwrkey +pm8941-wled +pm8xxx-vibrator +pmbus +pmbus_core +pmc551 +pmcraid +pmic8xxx-keypad +pmic8xxx-pwrkey +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn_pep +poly1305_generic +port100 +powermate +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_parport +pptp +pretimeout_panic +prism2_usb +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +ptlrpc +pulse8-cec +pulsedlight-lidar-lite-v2 +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvrusb2 +pwc +pwm-atmel-hlcdc +pwm-beeper +pwm-berlin +pwm-cros-ec +pwm-fan +pwm-fsl-ftm +pwm-hibvt +pwm-ir-tx +pwm-lp3943 +pwm-mediatek +pwm-meson +pwm-mtk-disp +pwm-omap-dmtimer +pwm-pca9685 +pwm-rcar +pwm-regulator +pwm-renesas-tpu +pwm-rockchip +pwm-samsung +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pwrseq_emmc +pwrseq_sd8787 +pwrseq_simple +pxa168_eth +pxa27x_udc +pxa3xx_nand +qca8k +qca_7k_common +qcaspi +qcauart +qcaux +qcom-apcs-ipc-mailbox +qcom-coincell +qcom-emac +qcom-pm8xxx +qcom-pm8xxx-xoadc +qcom-spmi-iadc +qcom-spmi-pmic +qcom-spmi-temp-alarm +qcom-spmi-vadc +qcom-vadc-common +qcom-wdt +qcom_adsp_pil +qcom_common +qcom_glink_native +qcom_glink_rpm +qcom_glink_smem +qcom_gsbi +qcom_hwspinlock +qcom_nandc +qcom_rpm +qcom_rpm-regulator +qcom_smbb +qcom_smd +qcom_smd-regulator +qcom_spmi-regulator +qcom_tsens +qcrypto +qcserial +qed +qede +qedf +qedi +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qoriq-cpufreq +qoriq_thermal +qrtr +qrtr-smd +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ravb +raw +raw_diag +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcar-dmac +rcar-du-drm +rcar-fcp +rcar-gyroadc +rcar-vin +rcar_can +rcar_canfd +rcar_drif +rcar_dw_hdmi +rcar_fdp1 +rcar_gen3_thermal +rcar_jpu +rcar_thermal +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rds +rds_rdma +rds_tcp +realtek +reboot-mode +redboot +redrat3 +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +renesas_sdhi_core +renesas_sdhi_sys_dmac +renesas_usb3 +renesas_usbhs +renesas_wdt +repaper +reset-hi3660 +reset-ti-syscon +reset-uniphier +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio500 +rivafb +rj54n1cb0c +rk3399_dmc +rk805-pwrkey +rk808 +rk808-regulator +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rmobile-reset +rmtfs_mem +rn5t618 +rn5t618-regulator +rn5t618_wdt +rndis_host +rndis_wlan +rockchip +rockchip-dfi +rockchip-io-domain +rockchip-rga +rockchip_saradc +rockchip_thermal +rockchipdrm +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-armada38x +rtc-as3722 +rtc-bq32k +rtc-bq4802 +rtc-cmos +rtc-cpcap +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-hym8563 +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max77686 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-mt7622 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-pl030 +rtc-pm8xxx +rtc-r7301 +rtc-r9701 +rtc-rc5t583 +rtc-rk808 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-sh +rtc-snvs +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtc-zynqmp +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +rza_wdt +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3c-fb +s3c2410_wdt +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s5p-cec +s5p-g2d +s5p-jpeg +s5p-mfc +s5p-sss +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7706h +safe_serial +salsa20_generic +samsung +samsung-keypad +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_rcar +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sbp_target +sbs-battery +sbs-charger +sbs-manager +sc16is7xx +sc92031 +sca3000 +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scpi-cpufreq +scpi-hwmon +scpi_pm_domain +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci-cadence +sdhci-dove +sdhci-msm +sdhci-of-arasan +sdhci-of-at91 +sdhci-omap +sdhci-pci +sdhci-pxav3 +sdhci-s3c +sdhci-xenon-driver +sdhci_f_sdh30 +sdio_uart +seed +sensorhub +ser_gigaset +serial2002 +serial_ir +serial_mctrl_gpio +serio_raw +sermouse +serpent_generic +serport +ses +sfc +sfc-falcon +sh-sci +sh_eth +sh_keysc +sh_mmcif +sh_mobile_ceu_camera +sh_mobile_lcdcfb +sh_mobile_meram +sh_veu +sh_vou +sha1-arm +sha1-arm-ce +sha1-arm-neon +sha2-arm-ce +sha256-arm +sha3_generic +sha512-arm +shark2 +sharpslpart +shdma +shmob-drm +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sii902x +sii9234 +sil-sii8620 +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +slcan +slicoss +slip +slram +sm3_generic +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc911x +smc91x +smc_diag +smd-rpm +smem +smipcie +smm665 +smp2p +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsm +smsmdtv +smssdio +smsusb +snd-aaci +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcxhr +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-apq8016-sbc +snd-soc-arizona +snd-soc-armada-370-db +snd-soc-arndale-rt5631 +snd-soc-audio-graph-card +snd-soc-audio-graph-scu-card +snd-soc-bt-sco +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7219 +snd-soc-davinci-mcasp +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdmi-codec +snd-soc-i2s +snd-soc-idma +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kirkwood +snd-soc-lpass-apq8016 +snd-soc-lpass-cpu +snd-soc-lpass-ipq806x +snd-soc-lpass-platform +snd-soc-max98090 +snd-soc-max98095 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-odroid +snd-soc-omap-hdmi-audio +snd-soc-pcm +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rcar +snd-soc-rk3288-hdmi-analog +snd-soc-rk3399-gru-sound +snd-soc-rl6231 +snd-soc-rockchip-i2s +snd-soc-rockchip-max98090 +snd-soc-rockchip-pdm +snd-soc-rockchip-rt5645 +snd-soc-rockchip-spdif +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5645 +snd-soc-rx51 +snd-soc-s3c-dma +snd-soc-samsung-spdif +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-simple-scu-card +snd-soc-smdk-spdif +snd-soc-smdk-wm8994 +snd-soc-smdk-wm8994pcm +snd-soc-snow +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-storm +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tm2-wm5110 +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm-adsp +snd-soc-wm-hubs +snd-soc-wm5110 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-wm8994 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-ymfpci +snic +snps_udc_core +snps_udc_plat +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +soc_scale_crop +softdog +softing +solo6x10 +solos-pci +sony-btf-mpx +sp2 +sp805_wdt +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +speedfax +speedtch +spi-altera +spi-armada-3700 +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-meson-spicc +spi-meson-spifc +spi-mt65xx +spi-nor +spi-oc-tiny +spi-orion +spi-pl022 +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-qup +spi-rockchip +spi-rspi +spi-s3c64xx +spi-sc18is602 +spi-sh-hspi +spi-sh-msiof +spi-slave-system-control +spi-slave-time +spi-ti-qspi +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spmi +spmi-pmic-arb +sr9700 +sr9800 +srf04 +srf08 +ssb +ssbi +ssd1307fb +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-asc +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm-drm +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +sudmac +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3_spi +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink_gt +synclinkmp +syscon-reboot-mode +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tango-ir +tango_nand +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc358767 +tc3589x-keypad +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tee +tef6862 +tehuti +tekram-sir +teranetics +test-kprobes +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thmc50 +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-ads8688 +ti-cal +ti-csc +ti-dac082s085 +ti-lmu +ti-sc +ti-soc-thermal +ti-tfp410 +ti-tlc4541 +ti-vpdma +ti-vpe +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_hecc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tilcdc +timeriomem-rng +tinydrm +tipc +tlan +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmio_mmc +tmio_mmc_core +tmio_nand +tmiofb +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +torture +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps65217_bl +tps65217_charger +tps65218 +tps65218-pwrbutton +tps65218-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tusb6010 +tvaudio +tve200_drm +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +uda1342 +udc-xilinx +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +uniphier_thermal +uniphier_wdt +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-dmac +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmisc_imx +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vcan +vcnl4000 +vctrl-regulator +veml6070 +ves1820 +ves1x93 +veth +vexpress-hwmon +vexpress-regulator +vexpress-spc-cpufreq +vf610_adc +vf610_dac +vfio +vfio-amba +vfio-pci +vfio-platform +vfio-platform-amdxgbe +vfio-platform-base +vfio-platform-calxedaxgmac +vfio_mdev +vfio_virqfd +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-rhine +via-sdmmc +via-velocity +via686a +video-mux +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videodev +vim2m +viperboard +viperboard_adc +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmw_pvrdma +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmxnet3 +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vrf +vringh +vsock +vsock_diag +vsockmon +vsp1 +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83795 +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +walkera0701 +wanxl +warrior +wcn36xx +wcnss_ctrl +wd719x +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wlcore +wlcore_sdio +wlcore_spi +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x_tables +xc4000 +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgifb +xgmac +xhci-mtk +xhci-plat-hcd +xilinx-pr-decoupler +xilinx-spi +xilinx-tpg +xilinx-video +xilinx-vtc +xilinx_gmii2rgmii +xilinx_uartps +xillybus_core +xillybus_of +xillybus_pcie +xor +xor-neon +xpad +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yurex +z3fold +zaurus +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +zpa2326 +zpa2326_i2c +zpa2326_spi +zr364xx +zram +zstd_compress +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic-lpae.retpoline @@ -0,0 +1 @@ +# RETPOLINE NOT ENABLED --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic.modules @@ -0,0 +1,5311 @@ +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_aspeed_vuart +8250_dw +8250_exar +8250_men_mcb +8250_moxa +8250_omap +8250_uniphier +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abp060mg +acard-ahci +acecad +acenic +acp_audio_dma +act200l-sir +act8865-regulator +act8945a +act8945a-regulator +act8945a_charger +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-arm +aes-arm-bs +aes-arm-ce +aes_ti +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +afs +ah4 +ah6 +ahci +ahci_ceva +ahci_dm816 +ahci_mtk +ahci_mvebu +ahci_qoriq +ahci_tegra +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airspy +ak8974 +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-pr-ip-core-plat +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am35x +am53c974 +amba-pl010 +ambakmi +amc6821 +amd +amd5536udc_pci +amd8111e +amdgpu +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +analogix_dp +anatop-regulator +ansi_cprng +anubis +ao-cec +aoe +apbps2 +apds9300 +apds9802als +apds990x +apds9960 +appledisplay +appletalk +appletouch +applicom +aquantia +ar1021_i2c +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_emac +arc_ps2 +arc_uart +arcmsr +arcnet +arcpgu +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arm_big_little +arm_big_little_dt +arm_mhu +arm_scpi +armada +arp_tables +arpt_mangle +arptable_filter +artpec6_crypto +as102_fe +as3711-regulator +as3711_bl +as3722-regulator +as3935 +as5011 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +ata_generic +ata_piix +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atm +atmel +atmel-flexcom +atmel-hlcdc +atmel-hlcdc-dc +atmel_captouch +atmel_mxt_ts +atmel_pci +atmtcp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avmfritz +ax25 +ax88179_178a +ax88796 +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bL_switcher_dummy_if +bam_dma +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bcm-keypad +bcm-phy-lib +bcm-sf2 +bcm203x +bcm3510 +bcm47xxsflash +bcm590xx +bcm590xx-regulator +bcm5974 +bcm63138_nand +bcm6368_nand +bcm63xx_uart +bcm7xxx +bcm87xx +bcma +bcmsysport +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +berlin2-adc +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpck6 +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmnand +brcmsmac +brcmstb_nand +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btqcomsmd +btrfs +btrtl +btsdio +bttv +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +caam +caam_jr +caam_pkc +caamalg +caamalg_desc +caamhash +caamrng +cachefiles +cadence-quadspi +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +cap11xx +capi +capidrv +capmode +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccree +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20-neon +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipone_icn8318 +chnl_net +ci_hdrc +ci_hdrc_imx +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_tegra +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cirrus +cirrusfb +clip +clk-cdce706 +clk-cdce925 +clk-cs2000-cp +clk-exynos-audss +clk-hi3519 +clk-hi655x +clk-max77686 +clk-palmas +clk-pwm +clk-qcom +clk-rk808 +clk-rpm +clk-s2mps11 +clk-scpi +clk-si514 +clk-si5351 +clk-si570 +clk-smd-rpm +clk-twl6040 +clk-versaclock5 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm3605 +cm36651 +cma3000_d0x +cma3000_d0x_i2c +cmac +cmt_speech +cmtp +cnic +cobalt +cobra +coda +colibri-vf50-ts +com20020 +com20020-pci +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_parport +comedi_pci +comedi_test +comedi_usb +comm +contec_pci_dio +cordic +core +cortina +cp210x +cpcap-adc +cpcap-battery +cpcap-charger +cpcap-pwrbutton +cpcap-regulator +cpia2 +cppi41 +cramfs +crc-itu-t +crc32-arm-ce +crc32_generic +crc4 +crc7 +crc8 +crct10dif-arm-ce +crg-hi3516cv300 +crg-hi3798cv200 +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +cs89x0 +csiostor +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da8xx-fb +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062-thermal +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +davinci_emac +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +ddbridge +de2104x +decnet +deflate +defxx +denali +denali_dt +denali_pci +des_generic +designware_i2s +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +digicolor-usart +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9000 +dm9601 +dmard06 +dmard09 +dmard10 +dme1737 +dmfe +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dove_thermal +dp83822 +dp83848 +dp83867 +dpot-dac +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dumb-vga-dac +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw-hdmi +dw-hdmi-ahb-audio +dw-hdmi-cec +dw-hdmi-i2s-audio +dw-mipi-dsi +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_hdmi-imx +dw_mipi_dsi-stm +dw_mmc +dw_mmc-exynos +dw_mmc-k3 +dw_mmc-pci +dw_mmc-pltfm +dw_mmc-rockchip +dw_wdt +dwc-xlgmac +dwc3 +dwc3-exynos +dwc3-of-simple +dwc3-omap +dwmac-dwc-qos-eth +dwmac-generic +dwmac-ipq806x +dwmac-meson +dwmac-meson8b +dwmac-rk +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +earth-pt1 +earth-pt3 +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ecdh_generic +echainiv +echo +edt-ft5x06 +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efs +egalax_ts +egalax_ts_serial +ehci-mxc +ehci-omap +ehci-tegra +ehset +ektf2127 +elan_i2c +elants_i2c +elo +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emac_rockchip +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +emif +empeg +ems_pci +ems_usb +emu10k1-gp +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +eni +enic +envelope-detector +epat +epia +epic100 +eql +esas2r +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +etnaviv +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-qcom-spmi-misc +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +exynos-gsc +exynos-lpass +exynos-rng +exynos_adc +exynosdrm +ezusb +f2fs +f71805f +f71882fg +f75375s +f81232 +f81534 +fakelb +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdp +fdp_i2c +fealnx +ff-memless +fid +firedtv +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fl512 +fld +flexcan +flexfb +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-bridge +fpga-mgr +fpga-region +freevxfs +friq +frpw +fsa9480 +fscache +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl-dcu-drm +fsl-edma +fsl-mph-dr-of +fsl-quadspi +fsl_lpuart +fsl_pq_mdio +fsl_usb2_udc +ftdi-elan +ftdi_sio +ftgmac100 +ftl +ftmac100 +ftsteutates +fujitsu_ts +fusb300_udc +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_multi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gcc-apq8084 +gcc-ipq4019 +gcc-ipq806x +gcc-ipq8074 +gcc-mdm9615 +gcc-msm8660 +gcc-msm8916 +gcc-msm8960 +gcc-msm8974 +gcc-msm8994 +gcc-msm8996 +gdmtty +gdmulte +gen_probe +generic +generic-adc-battery +generic_bl +genet +geneve +gf2k +gfs2 +ghash-arm-ce +gianfar_driver +gianfar_ptp +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glink_ssr +gluebi +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-74x164 +gpio-74xx-mmio +gpio-addr-flash +gpio-adnp +gpio-adp5520 +gpio-adp5588 +gpio-altera +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-fan +gpio-grgpio +gpio-ir-recv +gpio-ir-tx +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-lp87565 +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-max77620 +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rcar +gpio-rdc321x +gpio-regulator +gpio-syscon +gpio-tpic2810 +gpio-tps65086 +gpio-tps65218 +gpio-tps65912 +gpio-ts4800 +gpio-ts4900 +gpio-ucb1400 +gpio-uniphier +gpio-viperboard +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gpio_wdt +gpmi_nand +gr_udc +grace +grcan +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hclge +hd44780 +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcd +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hi311x +hi6210-i2s +hi6220-mailbox +hi6220_reset +hi6421-pmic-core +hi6421-regulator +hi6421v530-regulator +hi655x-pmic +hi655x-regulator +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hifn_795x +highbank-cpufreq +highbank_l2_edac +highbank_mc_edac +hih6130 +hip04_eth +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hisi-rng +hisi-sfc +hisi504_nand +hisi_femac +hisi_powerkey +hisi_thermal +hix5hd2_gmac +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hnae +hnae3 +hns_dsaf +hns_enet_drv +hns_mdio +hopper +horus3a +host1x +hostap +hostap_pci +hostap_plx +hp03 +hp100 +hp206c +hpfs +hpilo +hpsa +hptiop +hsi +hsi_char +hso +hsr +ht16k33 +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hwa-hc +hwa-rc +hwmon-vid +hx711 +hx8357 +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-arb-gpio-challenge +i2c-cbus-gpio +i2c-cros-ec-tunnel +i2c-demux-pinctrl +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-emev2 +i2c-exynos5 +i2c-gpio +i2c-hid +i2c-hix5hd2 +i2c-i801 +i2c-imx-lpi2c +i2c-isch +i2c-kempld +i2c-matroxfb +i2c-meson +i2c-mt65xx +i2c-mux +i2c-mux-gpio +i2c-mux-gpmux +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-pinctrl +i2c-mux-reg +i2c-mv64xxx +i2c-nforce2 +i2c-nomadik +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-pxa +i2c-qup +i2c-rcar +i2c-riic +i2c-rk3x +i2c-robotfuzz-osif +i2c-sh_mobile +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-slave-eeprom +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tegra +i2c-tiny-usb +i2c-versatile +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i40e +i40evf +i40iw +i5k_amb +i6300esb +i740fb +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibmaem +ibmpex +ice40-spi +icp_multi +icplus +ics932s401 +idma64 +idmouse +idt77252 +idt_89hpesx +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-mux +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +impa7 +ims-pcu +imx-dma +imx-ipu-v3 +imx-ldb +imx-media +imx-media-capture +imx-media-common +imx-media-csi +imx-media-ic +imx-media-vdic +imx-rngc +imx-sdma +imx-tve +imx-vdoa +imx074 +imx21-hcd +imx2_wdt +imx6-mipi-csi2 +imx6q-cpufreq +imx6ul_tsc +imx7d_adc +imx_keypad +imx_rproc +imx_thermal +imxdrm +imxfb +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int51x1 +intel-xway +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iova +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +iproc_nand +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipx +ir-hix5hd2 +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-rx51 +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-spi +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irq-ts4800 +irqbypass +irtty-sir +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it913x +itd1000 +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k3dma +kafs +kalmia +kaweth +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcc-ipq806x +lcc-mdm9615 +lcc-msm8960 +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-aat1290 +leds-adp5520 +leds-as3645a +leds-bcm6328 +leds-bcm6358 +leds-bd2802 +leds-blinkm +leds-cpcap +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-is31fl319x +leds-is31fl32xx +leds-ktd2692 +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max77693 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-ns2 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pm8058 +leds-pwm +leds-regulator +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +lego_ev3_battery +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +lis3lv02d_spi +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp873x-regulator +lp8755 +lp87565 +lp87565-regulator +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr2_nvm +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvds-encoder +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +macb +macb_pci +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mailbox-test +mali-dp +mantis +mantis_core +map_absent +map_ram +map_rom +marvell +marvell-cesa +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max14656_charger_detector +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max5821 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77620-regulator +max77620_thermal +max77620_wdt +max77686-regulator +max77693-haptic +max77693-regulator +max77693_charger +max77802-regulator +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8973-regulator +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdc +mdc800 +mdev +mdio +mdio-bcm-unimac +mdio-bitbang +mdio-gpio +mdio-hisi-femac +mdio-mux +mdio-mux-gpio +mdio-mux-mmioreg +mdt_loader +me4000 +me_daq +media +mediatek-cpufreq +mediatek-drm +mediatek-drm-hdmi +megachips-stdpxxxx-ge-b850v3-fw +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +melfas_mip4 +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +meson-drm +meson-gx-mmc +meson-gxl +meson-ir +meson-mx-sdio +meson-rng +meson_dw_hdmi +meson_gxbb_wdt +meson_saradc +meson_uart +meson_wdt +metro-usb +metronomefb +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_spi +mmcc-apq8084 +mmcc-msm8960 +mmcc-msm8974 +mmcc-msm8996 +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +motorola-cpcap +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi001 +msi2500 +msm +msm-rng +msp3400 +mspro_block +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6380-regulator +mt6397-core +mt6397-regulator +mt6577_auxadc +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd_dataflash +mtdoops +mtdram +mtdswap +mtip32xx +mtk-cir +mtk-crypto +mtk-pmic-wrap +mtk-quadspi +mtk-rng +mtk-sd +mtk-vpu +mtk_ecc +mtk_nand +mtk_thermal +mtk_wdt +mtouch +mtu3 +multipath +multiq3 +musb_am335x +musb_dsps +mux-adg792a +mux-core +mux-gpio +mux-mmio +mv643xx_eth +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvneta +mvpp2 +mvsas +mvsdio +mvumi +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc-scc +mxc4005 +mxc6255 +mxc_nand +mxc_w1 +mxcmmc +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxser +mxsfb +mxuport +myri10ge +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nbpfaxi +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_labpc +ni_labpc_common +ni_labpc_pci +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nicstar +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nokia-modem +nosy +notifier-error-inject +nouveau +nozomi +nps_enet +ns558 +ns83820 +nsh +nsp32 +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nvec +nvec_kbd +nvec_paz00 +nvec_power +nvec_ps2 +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmem-imx-iim +nvmem-imx-ocotp +nvmem-uniphier-efuse +nvmem_meson_mx_efuse +nvmem_qfprom +nvmem_rockchip_efuse +nvmem_snvs_lpgpr +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxp-ptn3460 +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_mmc_spi +of_xilinx_wdt +ohci-platform +old_belkin-sir +omap +omap-aes-driver +omap-crypto +omap-des +omap-mailbox +omap-ocp2scp +omap-rng +omap-sham +omap-vout +omap2 +omap2430 +omap3-isp +omap3-rom-rng +omap4-iss +omap4-keypad +omap_hdq +omap_hwspinlock +omap_remoteproc +omap_ssi +omap_wdt +omapdss +omapfb +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opt3001 +optee +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +orion_nand +orion_wdt +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +palmas-pwrbutton +palmas-regulator +palmas_gpadc +pandora_bl +panel +panel-innolux-p079zca +panel-jdi-lt070me05000 +panel-lg-lg4573 +panel-lvds +panel-orisetech-otm8009a +panel-panasonic-vvx10f034n00 +panel-raspberrypi-touchscreen +panel-samsung-ld9040 +panel-samsung-s6e3ha2 +panel-samsung-s6e63j0x03 +panel-samsung-s6e8aa0 +panel-seiko-43wvf1g +panel-sharp-lq101r1sx01 +panel-sharp-ls043t1le01 +panel-simple +panel-sitronix-st7789v +parade-ps8622 +parallel-display +paride +parkbd +parman +parport +parport_ax88796 +parport_pc +parport_serial +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_imx +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_of_platform +pata_oldpiix +pata_opti +pata_optidma +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pbias-regulator +pblk +pc300too +pc87360 +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmda12 +pcmmio +pcmuio +pcnet32 +pcrypt +pcwd_pci +pcwd_usb +pd +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_usb +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-am335x +phy-am335x-control +phy-bcm-kona-usb2 +phy-berlin-sata +phy-berlin-usb +phy-cpcap-usb +phy-dm816x-usb +phy-exynos-usb2 +phy-exynos5-usbdrd +phy-gpio-vbus-usb +phy-hix5hd2-sata +phy-isp1301 +phy-meson-gxl-usb2 +phy-meson8b-usb2 +phy-mtk-tphy +phy-mvebu-cp110-comphy +phy-omap-control +phy-omap-usb2 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-apq8064-sata +phy-qcom-ipq806x-sata +phy-qcom-qmp +phy-qcom-qusb2 +phy-qcom-ufs +phy-qcom-ufs-qmp-14nm +phy-qcom-ufs-qmp-20nm +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-rcar-gen2 +phy-rcar-gen3-usb2 +phy-rcar-gen3-usb3 +phy-rockchip-dp +phy-rockchip-emmc +phy-rockchip-inno-usb2 +phy-rockchip-pcie +phy-rockchip-typec +phy-rockchip-usb +phy-tahvo +phy-tegra-usb +phy-tegra-xusb +phy-ti-pipe3 +phy-tusb1210 +phy-twl4030-usb +phy-twl6030-usb +physmap +physmap_of +pi433 +pinctrl-apq8064 +pinctrl-apq8084 +pinctrl-ipq4019 +pinctrl-ipq8064 +pinctrl-ipq8074 +pinctrl-max77620 +pinctrl-mcp23s08 +pinctrl-mdm9615 +pinctrl-msm8660 +pinctrl-msm8916 +pinctrl-msm8960 +pinctrl-msm8994 +pinctrl-msm8996 +pinctrl-msm8x74 +pinctrl-rk805 +pinctrl-spmi-gpio +pinctrl-spmi-mpp +pinctrl-ssbi-gpio +pinctrl-ssbi-mpp +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl111_drm +pl172 +pl2303 +pl330 +plat-ram +plat_nand +platform_lcd +platform_mhu +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-pwrkey +pm8941-wled +pm8xxx-vibrator +pmbus +pmbus_core +pmc551 +pmcraid +pmic8xxx-keypad +pmic8xxx-pwrkey +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn_pep +poly1305_generic +port100 +powermate +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_parport +pptp +pretimeout_panic +prism2_usb +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +ptlrpc +pulse8-cec +pulsedlight-lidar-lite-v2 +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvrusb2 +pwc +pwm-atmel-hlcdc +pwm-beeper +pwm-berlin +pwm-cros-ec +pwm-fan +pwm-fsl-ftm +pwm-hibvt +pwm-imx +pwm-ir-tx +pwm-lp3943 +pwm-mediatek +pwm-meson +pwm-mtk-disp +pwm-omap-dmtimer +pwm-pca9685 +pwm-rcar +pwm-regulator +pwm-renesas-tpu +pwm-rockchip +pwm-samsung +pwm-tegra +pwm-tiecap +pwm-tiehrpwm +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pwrseq_emmc +pwrseq_sd8787 +pwrseq_simple +pxa168_eth +pxa27x_udc +pxa3xx_nand +qca8k +qca_7k_common +qcaspi +qcauart +qcaux +qcom-apcs-ipc-mailbox +qcom-coincell +qcom-emac +qcom-pm8xxx +qcom-pm8xxx-xoadc +qcom-spmi-iadc +qcom-spmi-pmic +qcom-spmi-temp-alarm +qcom-spmi-vadc +qcom-vadc-common +qcom-wdt +qcom_adsp_pil +qcom_common +qcom_glink_native +qcom_glink_rpm +qcom_glink_smem +qcom_gsbi +qcom_hwspinlock +qcom_nandc +qcom_rpm +qcom_rpm-regulator +qcom_smbb +qcom_smd +qcom_smd-regulator +qcom_spmi-regulator +qcom_tsens +qcrypto +qcserial +qed +qede +qedf +qedi +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qoriq-cpufreq +qoriq_thermal +qrtr +qrtr-smd +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ravb +raw +raw_diag +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcar-dmac +rcar-du-drm +rcar-fcp +rcar-gyroadc +rcar-vin +rcar_can +rcar_canfd +rcar_drif +rcar_dw_hdmi +rcar_fdp1 +rcar_gen3_thermal +rcar_jpu +rcar_thermal +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rds +rds_rdma +rds_tcp +realtek +reboot-mode +redboot +redrat3 +regmap-ac97 +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +renesas_sdhi_core +renesas_sdhi_sys_dmac +renesas_usb3 +renesas_usbhs +renesas_wdt +repaper +reset-hi3660 +reset-ti-syscon +reset-uniphier +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio500 +rivafb +rj54n1cb0c +rk3399_dmc +rk805-pwrkey +rk808 +rk808-regulator +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rmobile-reset +rmtfs_mem +rn5t618 +rn5t618-regulator +rn5t618_wdt +rndis_host +rndis_wlan +rockchip +rockchip-dfi +rockchip-io-domain +rockchip-rga +rockchip_saradc +rockchip_thermal +rockchipdrm +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-armada38x +rtc-as3722 +rtc-bq32k +rtc-bq4802 +rtc-cmos +rtc-cpcap +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-hym8563 +rtc-imxdi +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max77686 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-mt7622 +rtc-mxc +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-pl030 +rtc-pm8xxx +rtc-r7301 +rtc-r9701 +rtc-rc5t583 +rtc-rk808 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-sh +rtc-snvs +rtc-stk17ta8 +rtc-tegra +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtc-zynqmp +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +rza_wdt +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3c-fb +s3c2410_wdt +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s5p-cec +s5p-g2d +s5p-jpeg +s5p-mfc +s5p-sss +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7706h +safe_serial +sahara +salsa20_generic +samsung +samsung-keypad +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_rcar +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sbp_target +sbs-battery +sbs-charger +sbs-manager +sc16is7xx +sc92031 +sca3000 +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scpi-cpufreq +scpi-hwmon +scpi_pm_domain +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +sdhci-cadence +sdhci-dove +sdhci-msm +sdhci-of-arasan +sdhci-of-at91 +sdhci-of-esdhc +sdhci-omap +sdhci-pci +sdhci-pxav3 +sdhci-s3c +sdhci-tegra +sdhci-xenon-driver +sdhci_f_sdh30 +sdio_uart +seed +sensorhub +ser_gigaset +serial-tegra +serial2002 +serial_ir +serio_raw +sermouse +serpent_generic +serport +ses +sfc +sfc-falcon +sh-sci +sh_eth +sh_keysc +sh_mmcif +sh_mobile_ceu_camera +sh_mobile_lcdcfb +sh_mobile_meram +sh_veu +sh_vou +sha1-arm +sha1-arm-ce +sha1-arm-neon +sha2-arm-ce +sha256-arm +sha3_generic +sha512-arm +shark2 +sharpslpart +shdma +shmob-drm +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sii902x +sii9234 +sil-sii8620 +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +slcan +slic_ds26522 +slicoss +slip +slram +sm3_generic +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc911x +smc91x +smc_diag +smd-rpm +smem +smipcie +smm665 +smp2p +smsc +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsm +smsmdtv +smssdio +smsusb +snd-aaci +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4xxx-adda +snd-aloop +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-ens1370 +snd-ens1371 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-intel +snd-hda-tegra +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcxhr +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-alc5632 +snd-soc-apq8016-sbc +snd-soc-arizona +snd-soc-armada-370-db +snd-soc-arndale-rt5631 +snd-soc-audio-graph-card +snd-soc-audio-graph-scu-card +snd-soc-bt-sco +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7219 +snd-soc-davinci-mcasp +snd-soc-dio2125 +snd-soc-dmic +snd-soc-edma +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-eukrea-tlv320 +snd-soc-evm +snd-soc-fsi +snd-soc-fsl-asoc-card +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-utils +snd-soc-gtm601 +snd-soc-hdmi-codec +snd-soc-i2s +snd-soc-idma +snd-soc-imx-es8328 +snd-soc-imx-mc13783 +snd-soc-imx-spdif +snd-soc-imx-ssi +snd-soc-imx-wm8962 +snd-soc-inno-rk3036 +snd-soc-kirkwood +snd-soc-lpass-apq8016 +snd-soc-lpass-cpu +snd-soc-lpass-ipq806x +snd-soc-lpass-platform +snd-soc-max98090 +snd-soc-max98095 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-mc13783 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-odroid +snd-soc-omap-abe-twl6040 +snd-soc-omap-dmic +snd-soc-omap-hdmi-audio +snd-soc-omap-mcpdm +snd-soc-omap3pandora +snd-soc-pcm +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rcar +snd-soc-rk3288-hdmi-analog +snd-soc-rk3399-gru-sound +snd-soc-rl6231 +snd-soc-rockchip-i2s +snd-soc-rockchip-max98090 +snd-soc-rockchip-pdm +snd-soc-rockchip-rt5645 +snd-soc-rockchip-spdif +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-rx51 +snd-soc-s3c-dma +snd-soc-samsung-spdif +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-simple-scu-card +snd-soc-smdk-spdif +snd-soc-smdk-wm8994 +snd-soc-smdk-wm8994pcm +snd-soc-snow +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-storm +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tegra-alc5632 +snd-soc-tegra-max98090 +snd-soc-tegra-pcm +snd-soc-tegra-rt5640 +snd-soc-tegra-rt5677 +snd-soc-tegra-sgtl5000 +snd-soc-tegra-trimslice +snd-soc-tegra-utils +snd-soc-tegra-wm8753 +snd-soc-tegra-wm8903 +snd-soc-tegra-wm9712 +snd-soc-tegra20-ac97 +snd-soc-tegra20-das +snd-soc-tegra20-i2s +snd-soc-tegra20-spdif +snd-soc-tegra30-ahub +snd-soc-tegra30-i2s +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tm2-wm5110 +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-twl6040 +snd-soc-wm-adsp +snd-soc-wm-hubs +snd-soc-wm5110 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-wm8994 +snd-soc-wm9712 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-variax +snd-usbmidi-lib +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-ymfpci +snic +snps_udc_core +snps_udc_plat +snvs_pwrkey +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +soc_scale_crop +softdog +softing +solo6x10 +solos-pci +sony-btf-mpx +sp2 +sp805_wdt +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +speedfax +speedtch +spi-altera +spi-armada-3700 +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-fsl-dspi +spi-fsl-lpspi +spi-gpio +spi-imx +spi-lm70llp +spi-loopback-test +spi-meson-spicc +spi-meson-spifc +spi-mt65xx +spi-nor +spi-oc-tiny +spi-orion +spi-pl022 +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-qup +spi-rockchip +spi-rspi +spi-s3c64xx +spi-sc18is602 +spi-sh-hspi +spi-sh-msiof +spi-slave-system-control +spi-slave-time +spi-tegra114 +spi-tegra20-sflash +spi-tegra20-slink +spi-ti-qspi +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spmi +spmi-pmic-arb +sr9700 +sr9800 +srf04 +srf08 +ssb +ssbi +ssd1307fb +ssfdc +ssi_protocol +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-asc +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm-drm +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +sudmac +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3_spi +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink_gt +synclinkmp +syscon-reboot-mode +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tango-ir +tango_nand +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc358767 +tc3589x-keypad +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tee +tef6862 +tegra-devfreq +tegra-drm +tegra-gmi +tegra-kbc +tegra124-cpufreq +tegra_cec +tegra_wdt +tehuti +tekram-sir +teranetics +test-kprobes +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thmc50 +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-ads8688 +ti-cal +ti-csc +ti-dac082s085 +ti-lmu +ti-sc +ti-soc-thermal +ti-tfp410 +ti-tlc4541 +ti-vpdma +ti-vpe +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_hecc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +tilcdc +timeriomem-rng +tinydrm +tipc +tlan +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmio_mmc +tmio_mmc_core +tmio_nand +tmiofb +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +torture +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps65217_bl +tps65217_charger +tps65218 +tps65218-pwrbutton +tps65218-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts4800-ts +ts4800_wdt +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tusb6010 +tvaudio +tve200_drm +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6040-vibra +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +uda1342 +udc-xilinx +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +uniphier_thermal +uniphier_wdt +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-dmac +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmisc_imx +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vcan +vcnl4000 +vctrl-regulator +veml6070 +ves1820 +ves1x93 +veth +vexpress-hwmon +vexpress-regulator +vexpress-spc-cpufreq +vf610_adc +vf610_dac +vfio +vfio-amba +vfio-pci +vfio-platform +vfio-platform-amdxgbe +vfio-platform-base +vfio-platform-calxedaxgmac +vfio_mdev +vfio_virqfd +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-rhine +via-sdmmc +via-velocity +via686a +video-mux +videobuf-core +videobuf-dma-contig +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videodev +vim2m +viperboard +viperboard_adc +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmw_pvrdma +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmxnet3 +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vrf +vringh +vsock +vsock_diag +vsockmon +vsp1 +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83795 +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +walkera0701 +wanxl +warrior +wcn36xx +wcnss_ctrl +wd719x +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +wire +wishbone-serial +wkup_m3_rproc +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wlcore +wlcore_sdio +wlcore_spi +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x_tables +xc4000 +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgifb +xgmac +xhci-mtk +xhci-plat-hcd +xhci-tegra +xilinx-pr-decoupler +xilinx-spi +xilinx-tpg +xilinx-video +xilinx-vtc +xilinx_gmii2rgmii +xilinx_uartps +xillybus_core +xillybus_of +xillybus_pcie +xor +xor-neon +xpad +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yurex +z3fold +zaurus +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +zpa2326 +zpa2326_i2c +zpa2326_spi +zr364xx +zram +zstd_compress +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/armhf/generic.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/armhf/generic.retpoline @@ -0,0 +1 @@ +# RETPOLINE NOT ENABLED --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/fwinfo +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/fwinfo @@ -0,0 +1,1324 @@ +firmware: 3826.arm +firmware: 3com/typhoon.bin +firmware: 6fire/dmx6fireap.ihx +firmware: 6fire/dmx6firecf.bin +firmware: 6fire/dmx6firel2.ihx +firmware: BCM2033-FW.bin +firmware: BCM2033-MD.hex +firmware: BT3CPCC.bin +firmware: RTL8192E/boot.img +firmware: RTL8192E/data.img +firmware: RTL8192E/main.img +firmware: RTL8192U/boot.img +firmware: RTL8192U/data.img +firmware: RTL8192U/main.img +firmware: a300_pfp.fw +firmware: a300_pm4.fw +firmware: a330_pfp.fw +firmware: a330_pm4.fw +firmware: a420_pfp.fw +firmware: a420_pm4.fw +firmware: a530_fm4.fw +firmware: a530_pfp.fw +firmware: acenic/tg1.bin +firmware: acenic/tg2.bin +firmware: adaptec/starfire_rx.bin +firmware: adaptec/starfire_tx.bin +firmware: advansys/3550.bin +firmware: advansys/38C0800.bin +firmware: advansys/38C1600.bin +firmware: advansys/mcode.bin +firmware: agere_ap_fw.bin +firmware: agere_sta_fw.bin +firmware: aic94xx-seq.fw +firmware: amdgpu/carrizo_ce.bin +firmware: amdgpu/carrizo_me.bin +firmware: amdgpu/carrizo_mec.bin +firmware: amdgpu/carrizo_mec2.bin +firmware: amdgpu/carrizo_pfp.bin +firmware: amdgpu/carrizo_rlc.bin +firmware: amdgpu/carrizo_sdma.bin +firmware: amdgpu/carrizo_sdma1.bin +firmware: amdgpu/carrizo_uvd.bin +firmware: amdgpu/carrizo_vce.bin +firmware: amdgpu/fiji_ce.bin +firmware: amdgpu/fiji_me.bin +firmware: amdgpu/fiji_mec.bin +firmware: amdgpu/fiji_mec2.bin +firmware: amdgpu/fiji_pfp.bin +firmware: amdgpu/fiji_rlc.bin +firmware: amdgpu/fiji_sdma.bin +firmware: amdgpu/fiji_sdma1.bin +firmware: amdgpu/fiji_smc.bin +firmware: amdgpu/fiji_uvd.bin +firmware: amdgpu/fiji_vce.bin +firmware: amdgpu/polaris10_ce.bin +firmware: amdgpu/polaris10_ce_2.bin +firmware: amdgpu/polaris10_k_smc.bin +firmware: amdgpu/polaris10_mc.bin +firmware: amdgpu/polaris10_me.bin +firmware: amdgpu/polaris10_me_2.bin +firmware: amdgpu/polaris10_mec.bin +firmware: amdgpu/polaris10_mec2.bin +firmware: amdgpu/polaris10_mec2_2.bin +firmware: amdgpu/polaris10_mec_2.bin +firmware: amdgpu/polaris10_pfp.bin +firmware: amdgpu/polaris10_pfp_2.bin +firmware: amdgpu/polaris10_rlc.bin +firmware: amdgpu/polaris10_sdma.bin +firmware: amdgpu/polaris10_sdma1.bin +firmware: amdgpu/polaris10_smc.bin +firmware: amdgpu/polaris10_smc_sk.bin +firmware: amdgpu/polaris10_uvd.bin +firmware: amdgpu/polaris10_vce.bin +firmware: amdgpu/polaris11_ce.bin +firmware: amdgpu/polaris11_ce_2.bin +firmware: amdgpu/polaris11_k_smc.bin +firmware: amdgpu/polaris11_mc.bin +firmware: amdgpu/polaris11_me.bin +firmware: amdgpu/polaris11_me_2.bin +firmware: amdgpu/polaris11_mec.bin +firmware: amdgpu/polaris11_mec2.bin +firmware: amdgpu/polaris11_mec2_2.bin +firmware: amdgpu/polaris11_mec_2.bin +firmware: amdgpu/polaris11_pfp.bin +firmware: amdgpu/polaris11_pfp_2.bin +firmware: amdgpu/polaris11_rlc.bin +firmware: amdgpu/polaris11_sdma.bin +firmware: amdgpu/polaris11_sdma1.bin +firmware: amdgpu/polaris11_smc.bin +firmware: amdgpu/polaris11_smc_sk.bin +firmware: amdgpu/polaris11_uvd.bin +firmware: amdgpu/polaris11_vce.bin +firmware: amdgpu/polaris12_ce.bin +firmware: amdgpu/polaris12_ce_2.bin +firmware: amdgpu/polaris12_mc.bin +firmware: amdgpu/polaris12_me.bin +firmware: amdgpu/polaris12_me_2.bin +firmware: amdgpu/polaris12_mec.bin +firmware: amdgpu/polaris12_mec2.bin +firmware: amdgpu/polaris12_mec2_2.bin +firmware: amdgpu/polaris12_mec_2.bin +firmware: amdgpu/polaris12_pfp.bin +firmware: amdgpu/polaris12_pfp_2.bin +firmware: amdgpu/polaris12_rlc.bin +firmware: amdgpu/polaris12_sdma.bin +firmware: amdgpu/polaris12_sdma1.bin +firmware: amdgpu/polaris12_smc.bin +firmware: amdgpu/polaris12_uvd.bin +firmware: amdgpu/polaris12_vce.bin +firmware: amdgpu/raven_asd.bin +firmware: amdgpu/raven_ce.bin +firmware: amdgpu/raven_gpu_info.bin +firmware: amdgpu/raven_me.bin +firmware: amdgpu/raven_mec.bin +firmware: amdgpu/raven_mec2.bin +firmware: amdgpu/raven_pfp.bin +firmware: amdgpu/raven_rlc.bin +firmware: amdgpu/raven_sdma.bin +firmware: amdgpu/raven_vcn.bin +firmware: amdgpu/stoney_ce.bin +firmware: amdgpu/stoney_me.bin +firmware: amdgpu/stoney_mec.bin +firmware: amdgpu/stoney_pfp.bin +firmware: amdgpu/stoney_rlc.bin +firmware: amdgpu/stoney_sdma.bin +firmware: amdgpu/stoney_uvd.bin +firmware: amdgpu/stoney_vce.bin +firmware: amdgpu/tonga_ce.bin +firmware: amdgpu/tonga_k_smc.bin +firmware: amdgpu/tonga_mc.bin +firmware: amdgpu/tonga_me.bin +firmware: amdgpu/tonga_mec.bin +firmware: amdgpu/tonga_mec2.bin +firmware: amdgpu/tonga_pfp.bin +firmware: amdgpu/tonga_rlc.bin +firmware: amdgpu/tonga_sdma.bin +firmware: amdgpu/tonga_sdma1.bin +firmware: amdgpu/tonga_smc.bin +firmware: amdgpu/tonga_uvd.bin +firmware: amdgpu/tonga_vce.bin +firmware: amdgpu/topaz_ce.bin +firmware: amdgpu/topaz_k_smc.bin +firmware: amdgpu/topaz_mc.bin +firmware: amdgpu/topaz_me.bin +firmware: amdgpu/topaz_mec.bin +firmware: amdgpu/topaz_pfp.bin +firmware: amdgpu/topaz_rlc.bin +firmware: amdgpu/topaz_sdma.bin +firmware: amdgpu/topaz_sdma1.bin +firmware: amdgpu/topaz_smc.bin +firmware: amdgpu/vega10_acg_smc.bin +firmware: amdgpu/vega10_asd.bin +firmware: amdgpu/vega10_ce.bin +firmware: amdgpu/vega10_gpu_info.bin +firmware: amdgpu/vega10_me.bin +firmware: amdgpu/vega10_mec.bin +firmware: amdgpu/vega10_mec2.bin +firmware: amdgpu/vega10_pfp.bin +firmware: amdgpu/vega10_rlc.bin +firmware: amdgpu/vega10_sdma.bin +firmware: amdgpu/vega10_sdma1.bin +firmware: amdgpu/vega10_smc.bin +firmware: amdgpu/vega10_sos.bin +firmware: amdgpu/vega10_uvd.bin +firmware: amdgpu/vega10_vce.bin +firmware: ar5523.bin +firmware: asihpi/dsp5000.bin +firmware: asihpi/dsp6200.bin +firmware: asihpi/dsp6205.bin +firmware: asihpi/dsp6400.bin +firmware: asihpi/dsp6600.bin +firmware: asihpi/dsp8700.bin +firmware: asihpi/dsp8900.bin +firmware: ast_dp501_fw.bin +firmware: ath10k/QCA6174/hw2.1/board-2.bin +firmware: ath10k/QCA6174/hw2.1/board.bin +firmware: ath10k/QCA6174/hw2.1/firmware-4.bin +firmware: ath10k/QCA6174/hw2.1/firmware-5.bin +firmware: ath10k/QCA6174/hw3.0/board-2.bin +firmware: ath10k/QCA6174/hw3.0/board.bin +firmware: ath10k/QCA6174/hw3.0/firmware-4.bin +firmware: ath10k/QCA6174/hw3.0/firmware-5.bin +firmware: ath10k/QCA6174/hw3.0/firmware-6.bin +firmware: ath10k/QCA9377/hw1.0/board.bin +firmware: ath10k/QCA9377/hw1.0/firmware-5.bin +firmware: ath10k/QCA9887/hw1.0/board-2.bin +firmware: ath10k/QCA9887/hw1.0/board.bin +firmware: ath10k/QCA9887/hw1.0/firmware-5.bin +firmware: ath10k/QCA988X/hw2.0/board-2.bin +firmware: ath10k/QCA988X/hw2.0/board.bin +firmware: ath10k/QCA988X/hw2.0/firmware-2.bin +firmware: ath10k/QCA988X/hw2.0/firmware-3.bin +firmware: ath10k/QCA988X/hw2.0/firmware-4.bin +firmware: ath10k/QCA988X/hw2.0/firmware-5.bin +firmware: ath3k-1.fw +firmware: ath6k/AR6003/hw2.0/athwlan.bin.z77 +firmware: ath6k/AR6003/hw2.0/bdata.SD31.bin +firmware: ath6k/AR6003/hw2.0/bdata.bin +firmware: ath6k/AR6003/hw2.0/data.patch.bin +firmware: ath6k/AR6003/hw2.0/otp.bin.z77 +firmware: ath6k/AR6003/hw2.1.1/athwlan.bin +firmware: ath6k/AR6003/hw2.1.1/bdata.SD31.bin +firmware: ath6k/AR6003/hw2.1.1/bdata.bin +firmware: ath6k/AR6003/hw2.1.1/data.patch.bin +firmware: ath6k/AR6003/hw2.1.1/otp.bin +firmware: ath6k/AR6004/hw1.0/bdata.DB132.bin +firmware: ath6k/AR6004/hw1.0/bdata.bin +firmware: ath6k/AR6004/hw1.0/fw.ram.bin +firmware: ath6k/AR6004/hw1.1/bdata.DB132.bin +firmware: ath6k/AR6004/hw1.1/bdata.bin +firmware: ath6k/AR6004/hw1.1/fw.ram.bin +firmware: ath6k/AR6004/hw1.2/bdata.bin +firmware: ath6k/AR6004/hw1.2/fw.ram.bin +firmware: ath6k/AR6004/hw1.3/bdata.bin +firmware: ath6k/AR6004/hw1.3/fw.ram.bin +firmware: ath9k_htc/htc_7010-1.4.0.fw +firmware: ath9k_htc/htc_9271-1.4.0.fw +firmware: atmel_at76c502-wpa.bin +firmware: atmel_at76c502.bin +firmware: atmel_at76c502_3com-wpa.bin +firmware: atmel_at76c502_3com.bin +firmware: atmel_at76c502d-wpa.bin +firmware: atmel_at76c502d.bin +firmware: atmel_at76c502e-wpa.bin +firmware: atmel_at76c502e.bin +firmware: atmel_at76c503-i3861.bin +firmware: atmel_at76c503-i3863.bin +firmware: atmel_at76c503-rfmd-acc.bin +firmware: atmel_at76c503-rfmd.bin +firmware: atmel_at76c504-wpa.bin +firmware: atmel_at76c504.bin +firmware: atmel_at76c504_2958-wpa.bin +firmware: atmel_at76c504_2958.bin +firmware: atmel_at76c504a_2958-wpa.bin +firmware: atmel_at76c504a_2958.bin +firmware: atmel_at76c505-rfmd.bin +firmware: atmel_at76c505-rfmd2958.bin +firmware: atmel_at76c505a-rfmd2958.bin +firmware: atmel_at76c505amx-rfmd.bin +firmware: atmel_at76c506-wpa.bin +firmware: atmel_at76c506.bin +firmware: atmsar11.fw +firmware: atsc_denver.inp +firmware: av7110/bootcode.bin +firmware: b43/ucode11.fw +firmware: b43/ucode13.fw +firmware: b43/ucode14.fw +firmware: b43/ucode15.fw +firmware: b43/ucode16_lp.fw +firmware: b43/ucode16_mimo.fw +firmware: b43/ucode24_lcn.fw +firmware: b43/ucode25_lcn.fw +firmware: b43/ucode25_mimo.fw +firmware: b43/ucode26_mimo.fw +firmware: b43/ucode29_mimo.fw +firmware: b43/ucode30_mimo.fw +firmware: b43/ucode33_lcn40.fw +firmware: b43/ucode40.fw +firmware: b43/ucode42.fw +firmware: b43/ucode5.fw +firmware: b43/ucode9.fw +firmware: b43legacy/ucode2.fw +firmware: b43legacy/ucode4.fw +firmware: bfubase.frm +firmware: bnx2/bnx2-mips-06-6.2.3.fw +firmware: bnx2/bnx2-mips-09-6.2.1b.fw +firmware: bnx2/bnx2-rv2p-06-6.0.15.fw +firmware: bnx2/bnx2-rv2p-09-6.0.17.fw +firmware: bnx2/bnx2-rv2p-09ax-6.0.17.fw +firmware: bnx2x/bnx2x-e1-7.13.1.0.fw +firmware: bnx2x/bnx2x-e1h-7.13.1.0.fw +firmware: bnx2x/bnx2x-e2-7.13.1.0.fw +firmware: brcm/bcm43xx-0.fw +firmware: brcm/bcm43xx_hdr-0.fw +firmware: brcm/brcmfmac43143-sdio.bin +firmware: brcm/brcmfmac43143.bin +firmware: brcm/brcmfmac43236b.bin +firmware: brcm/brcmfmac43241b0-sdio.bin +firmware: brcm/brcmfmac43241b4-sdio.bin +firmware: brcm/brcmfmac43241b5-sdio.bin +firmware: brcm/brcmfmac43242a.bin +firmware: brcm/brcmfmac4329-sdio.bin +firmware: brcm/brcmfmac4330-sdio.bin +firmware: brcm/brcmfmac4334-sdio.bin +firmware: brcm/brcmfmac43340-sdio.bin +firmware: brcm/brcmfmac4335-sdio.bin +firmware: brcm/brcmfmac43362-sdio.bin +firmware: brcm/brcmfmac4339-sdio.bin +firmware: brcm/brcmfmac43430-sdio.bin +firmware: brcm/brcmfmac43430a0-sdio.bin +firmware: brcm/brcmfmac43455-sdio.bin +firmware: brcm/brcmfmac4350-pcie.bin +firmware: brcm/brcmfmac4350c2-pcie.bin +firmware: brcm/brcmfmac4354-sdio.bin +firmware: brcm/brcmfmac4356-pcie.bin +firmware: brcm/brcmfmac4356-sdio.bin +firmware: brcm/brcmfmac43569.bin +firmware: brcm/brcmfmac43570-pcie.bin +firmware: brcm/brcmfmac4358-pcie.bin +firmware: brcm/brcmfmac4359-pcie.bin +firmware: brcm/brcmfmac43602-pcie.bin +firmware: brcm/brcmfmac4365b-pcie.bin +firmware: brcm/brcmfmac4365c-pcie.bin +firmware: brcm/brcmfmac4366b-pcie.bin +firmware: brcm/brcmfmac4366c-pcie.bin +firmware: brcm/brcmfmac4371-pcie.bin +firmware: brcm/brcmfmac4373-sdio.bin +firmware: brcm/brcmfmac4373.bin +firmware: c218tunx.cod +firmware: c320tunx.cod +firmware: carl9170-1.fw +firmware: cavium/cnn55xx_se.fw +firmware: cbfw-3.2.5.1.bin +firmware: cis/3CCFEM556.cis +firmware: cis/3CXEM556.cis +firmware: cis/COMpad2.cis +firmware: cis/COMpad4.cis +firmware: cis/DP83903.cis +firmware: cis/LA-PCM.cis +firmware: cis/MT5634ZLX.cis +firmware: cis/NE2K.cis +firmware: cis/PCMLM28.cis +firmware: cis/PE-200.cis +firmware: cis/PE520.cis +firmware: cis/RS-COM-2P.cis +firmware: cis/SW_555_SER.cis +firmware: cis/SW_7xx_SER.cis +firmware: cis/SW_8xx_SER.cis +firmware: cis/tamarack.cis +firmware: cmmb_ming_app.inp +firmware: cmmb_vega_12mhz.inp +firmware: cmmb_venice_12mhz.inp +firmware: comedi/jr3pci.idm +firmware: cp204unx.cod +firmware: cpia2/stv0672_vp4.bin +firmware: cs46xx/cwc4630 +firmware: cs46xx/cwcasync +firmware: cs46xx/cwcbinhack +firmware: cs46xx/cwcdma +firmware: cs46xx/cwcsnoop +firmware: ct2fw-3.2.5.1.bin +firmware: ctefx.bin +firmware: ctfw-3.2.5.1.bin +firmware: cxgb3/ael2005_opt_edc.bin +firmware: cxgb3/ael2005_twx_edc.bin +firmware: cxgb3/ael2020_twx_edc.bin +firmware: cxgb3/t3b_psram-1.1.0.bin +firmware: cxgb3/t3c_psram-1.1.0.bin +firmware: cxgb3/t3fw-7.12.0.bin +firmware: cxgb4/t4fw.bin +firmware: cxgb4/t5fw.bin +firmware: cxgb4/t6fw.bin +firmware: cyzfirm.bin +firmware: daqboard2000_firmware.bin +firmware: digiface_firmware.bin +firmware: digiface_firmware_rev11.bin +firmware: dvb-cx18-mpc718-mt352.fw +firmware: dvb-demod-m88ds3103.fw +firmware: dvb-demod-m88rs6000.fw +firmware: dvb-demod-mn88472-02.fw +firmware: dvb-demod-mn88473-01.fw +firmware: dvb-demod-si2165.fw +firmware: dvb-demod-si2168-a20-01.fw +firmware: dvb-demod-si2168-a30-01.fw +firmware: dvb-demod-si2168-b40-01.fw +firmware: dvb-demod-si2168-d60-01.fw +firmware: dvb-fe-af9013.fw +firmware: dvb-fe-cx24117.fw +firmware: dvb-fe-drxj-mc-1.0.8.fw +firmware: dvb-fe-ds3000.fw +firmware: dvb-fe-tda10071.fw +firmware: dvb-fe-xc4000-1.4.1.fw +firmware: dvb-fe-xc4000-1.4.fw +firmware: dvb-fe-xc5000-1.6.114.fw +firmware: dvb-fe-xc5000c-4.1.30.7.fw +firmware: dvb-tuner-si2141-a10-01.fw +firmware: dvb-tuner-si2158-a20-01.fw +firmware: dvb-usb-af9015.fw +firmware: dvb-usb-af9035-02.fw +firmware: dvb-usb-dib0700-1.20.fw +firmware: dvb-usb-dw2101.fw +firmware: dvb-usb-dw2102.fw +firmware: dvb-usb-dw2104.fw +firmware: dvb-usb-dw3101.fw +firmware: dvb-usb-ec168.fw +firmware: dvb-usb-it9135-01.fw +firmware: dvb-usb-it9135-02.fw +firmware: dvb-usb-it9303-01.fw +firmware: dvb-usb-lme2510-lg.fw +firmware: dvb-usb-lme2510-s0194.fw +firmware: dvb-usb-lme2510c-lg.fw +firmware: dvb-usb-lme2510c-rs2000.fw +firmware: dvb-usb-lme2510c-s0194.fw +firmware: dvb-usb-lme2510c-s7395.fw +firmware: dvb-usb-p1100.fw +firmware: dvb-usb-p7500.fw +firmware: dvb-usb-s630.fw +firmware: dvb-usb-s660.fw +firmware: dvb-usb-terratec-h7-az6007.fw +firmware: dvb_nova_12mhz.inp +firmware: dvb_nova_12mhz_b0.inp +firmware: dvb_rio.inp +firmware: dvbh_rio.inp +firmware: e100/d101m_ucode.bin +firmware: e100/d101s_ucode.bin +firmware: e100/d102e_ucode.bin +firmware: ea/3g_asic.fw +firmware: ea/darla20_dsp.fw +firmware: ea/darla24_dsp.fw +firmware: ea/echo3g_dsp.fw +firmware: ea/gina20_dsp.fw +firmware: ea/gina24_301_asic.fw +firmware: ea/gina24_301_dsp.fw +firmware: ea/gina24_361_asic.fw +firmware: ea/gina24_361_dsp.fw +firmware: ea/indigo_dj_dsp.fw +firmware: ea/indigo_djx_dsp.fw +firmware: ea/indigo_dsp.fw +firmware: ea/indigo_io_dsp.fw +firmware: ea/indigo_iox_dsp.fw +firmware: ea/layla20_asic.fw +firmware: ea/layla20_dsp.fw +firmware: ea/layla24_1_asic.fw +firmware: ea/layla24_2A_asic.fw +firmware: ea/layla24_2S_asic.fw +firmware: ea/layla24_dsp.fw +firmware: ea/loader_dsp.fw +firmware: ea/mia_dsp.fw +firmware: ea/mona_2_asic.fw +firmware: ea/mona_301_1_asic_48.fw +firmware: ea/mona_301_1_asic_96.fw +firmware: ea/mona_301_dsp.fw +firmware: ea/mona_361_1_asic_48.fw +firmware: ea/mona_361_1_asic_96.fw +firmware: ea/mona_361_dsp.fw +firmware: edgeport/boot.fw +firmware: edgeport/boot2.fw +firmware: edgeport/down.fw +firmware: edgeport/down2.fw +firmware: edgeport/down3.bin +firmware: emi26/bitstream.fw +firmware: emi26/firmware.fw +firmware: emi26/loader.fw +firmware: emi62/bitstream.fw +firmware: emi62/loader.fw +firmware: emi62/spdif.fw +firmware: emu/audio_dock.fw +firmware: emu/emu0404.fw +firmware: emu/emu1010_notebook.fw +firmware: emu/emu1010b.fw +firmware: emu/hana.fw +firmware: emu/micro_dock.fw +firmware: ene-ub6250/ms_init.bin +firmware: ene-ub6250/ms_rdwr.bin +firmware: ene-ub6250/msp_rdwr.bin +firmware: ene-ub6250/sd_init1.bin +firmware: ene-ub6250/sd_init2.bin +firmware: ene-ub6250/sd_rdwr.bin +firmware: ess/maestro3_assp_kernel.fw +firmware: ess/maestro3_assp_minisrc.fw +firmware: f2255usb.bin +firmware: fm_radio.inp +firmware: fm_radio_rio.inp +firmware: fw.ram.bin +firmware: go7007/go7007fw.bin +firmware: go7007/go7007tv.bin +firmware: go7007/lr192.fw +firmware: go7007/px-m402u.fw +firmware: go7007/px-tv402u.fw +firmware: go7007/s2250-1.fw +firmware: go7007/s2250-2.fw +firmware: go7007/wis-startrek.fw +firmware: hfi1_dc8051.fw +firmware: hfi1_fabric.fw +firmware: hfi1_pcie.fw +firmware: hfi1_sbus.fw +firmware: i1480-phy-0.0.bin +firmware: i1480-pre-phy-0.0.bin +firmware: i1480-usb-0.0.bin +firmware: i2400m-fw-usb-1.5.sbcf +firmware: i6050-fw-usb-1.5.sbcf +firmware: i915/bxt_dmc_ver1_07.bin +firmware: i915/bxt_huc_ver01_07_1398.bin +firmware: i915/kbl_dmc_ver1_01.bin +firmware: i915/kbl_huc_ver02_00_1810.bin +firmware: i915/skl_dmc_ver1_26.bin +firmware: i915/skl_guc_ver6_1.bin +firmware: i915/skl_huc_ver01_07_1398.bin +firmware: icom_asc.bin +firmware: icom_call_setup.bin +firmware: icom_res_dce.bin +firmware: intel/ibt-11-5.ddc +firmware: intel/ibt-11-5.sfi +firmware: intel/ibt-12-16.ddc +firmware: intel/ibt-12-16.sfi +firmware: ipw2100-1.3-i.fw +firmware: ipw2100-1.3-p.fw +firmware: ipw2100-1.3.fw +firmware: ipw2200-bss.fw +firmware: ipw2200-ibss.fw +firmware: ipw2200-sniffer.fw +firmware: isci/isci_firmware.bin +firmware: isdbt_nova_12mhz.inp +firmware: isdbt_nova_12mhz_b0.inp +firmware: isdbt_pele.inp +firmware: isdbt_rio.inp +firmware: isdn/ISAR.BIN +firmware: isi4608.bin +firmware: isi4616.bin +firmware: isi608.bin +firmware: isi608em.bin +firmware: isi616em.bin +firmware: isight.fw +firmware: isl3886pci +firmware: isl3886usb +firmware: isl3887usb +firmware: iwlwifi-100-5.ucode +firmware: iwlwifi-1000-5.ucode +firmware: iwlwifi-105-6.ucode +firmware: iwlwifi-135-6.ucode +firmware: iwlwifi-2000-6.ucode +firmware: iwlwifi-2030-6.ucode +firmware: iwlwifi-3160-17.ucode +firmware: iwlwifi-3168-29.ucode +firmware: iwlwifi-3945-2.ucode +firmware: iwlwifi-4965-2.ucode +firmware: iwlwifi-5000-5.ucode +firmware: iwlwifi-5150-2.ucode +firmware: iwlwifi-6000-6.ucode +firmware: iwlwifi-6000g2a-6.ucode +firmware: iwlwifi-6000g2b-6.ucode +firmware: iwlwifi-6050-5.ucode +firmware: iwlwifi-7260-17.ucode +firmware: iwlwifi-7265-17.ucode +firmware: iwlwifi-7265D-29.ucode +firmware: iwlwifi-8000C-34.ucode +firmware: iwlwifi-8265-34.ucode +firmware: iwlwifi-9000-pu-a0-jf-a0-34.ucode +firmware: iwlwifi-9000-pu-a0-jf-b0-34.ucode +firmware: iwlwifi-9000-pu-b0-jf-b0-34.ucode +firmware: iwlwifi-9260-th-a0-jf-a0-34.ucode +firmware: iwlwifi-9260-th-b0-jf-b0-34.ucode +firmware: iwlwifi-Qu-a0-hr-a0-34.ucode +firmware: iwlwifi-Qu-a0-jf-b0-34.ucode +firmware: iwlwifi-QuQnj-a0-hr-a0-34.ucode +firmware: iwlwifi-QuQnj-a0-jf-b0-34.ucode +firmware: iwlwifi-QuQnj-f0-hr-a0-34.ucode +firmware: kaweth/new_code.bin +firmware: kaweth/new_code_fix.bin +firmware: kaweth/trigger_code.bin +firmware: kaweth/trigger_code_fix.bin +firmware: keyspan/mpr.fw +firmware: keyspan/usa18x.fw +firmware: keyspan/usa19.fw +firmware: keyspan/usa19qi.fw +firmware: keyspan/usa19qw.fw +firmware: keyspan/usa19w.fw +firmware: keyspan/usa28.fw +firmware: keyspan/usa28x.fw +firmware: keyspan/usa28xa.fw +firmware: keyspan/usa28xb.fw +firmware: keyspan/usa49w.fw +firmware: keyspan/usa49wlc.fw +firmware: keyspan_pda/keyspan_pda.fw +firmware: keyspan_pda/xircom_pgs.fw +firmware: korg/k1212.dsp +firmware: ks7010sd.rom +firmware: lattice-ecp3.bit +firmware: lbtf_usb.bin +firmware: lgs8g75.fw +firmware: libertas/cf8305.bin +firmware: libertas/cf8381.bin +firmware: libertas/cf8381_helper.bin +firmware: libertas/cf8385.bin +firmware: libertas/cf8385_helper.bin +firmware: libertas/gspi8385.bin +firmware: libertas/gspi8385_helper.bin +firmware: libertas/gspi8385_hlp.bin +firmware: libertas/gspi8686.bin +firmware: libertas/gspi8686_hlp.bin +firmware: libertas/gspi8686_v9.bin +firmware: libertas/gspi8686_v9_helper.bin +firmware: libertas/gspi8688.bin +firmware: libertas/gspi8688_helper.bin +firmware: libertas/sd8385.bin +firmware: libertas/sd8385_helper.bin +firmware: libertas/sd8686_v8.bin +firmware: libertas/sd8686_v8_helper.bin +firmware: libertas/sd8686_v9.bin +firmware: libertas/sd8686_v9_helper.bin +firmware: libertas/sd8688.bin +firmware: libertas/sd8688_helper.bin +firmware: libertas/usb8388.bin +firmware: libertas/usb8388_v5.bin +firmware: libertas/usb8388_v9.bin +firmware: libertas/usb8682.bin +firmware: libertas_cs.fw +firmware: libertas_cs_helper.fw +firmware: liquidio/lio_210nv_nic.bin +firmware: liquidio/lio_210sv_nic.bin +firmware: liquidio/lio_23xx_nic.bin +firmware: liquidio/lio_410nv_nic.bin +firmware: me2600_firmware.bin +firmware: me4000_firmware.bin +firmware: mellanox/mlxsw_spectrum-13.1530.152.mfa2 +firmware: mixart/miXart8.elf +firmware: mixart/miXart8.xlx +firmware: mixart/miXart8AES.xlx +firmware: moxa/moxa-1110.fw +firmware: moxa/moxa-1130.fw +firmware: moxa/moxa-1131.fw +firmware: moxa/moxa-1150.fw +firmware: moxa/moxa-1151.fw +firmware: mrvl/sd8688.bin +firmware: mrvl/sd8688_helper.bin +firmware: mrvl/sd8786_uapsta.bin +firmware: mrvl/sd8787_uapsta.bin +firmware: mrvl/sd8797_uapsta.bin +firmware: mrvl/sd8887_uapsta.bin +firmware: mrvl/sd8897_uapsta.bin +firmware: mrvl/sd8997_uapsta.bin +firmware: mrvl/usb8766_uapsta.bin +firmware: mrvl/usb8797_uapsta.bin +firmware: mrvl/usb8801_uapsta.bin +firmware: mrvl/usbusb8997_combo_v4.bin +firmware: mt7601u.bin +firmware: mts_cdma.fw +firmware: mts_edge.fw +firmware: mts_gsm.fw +firmware: mts_mt9234mu.fw +firmware: mts_mt9234zba.fw +firmware: multiface_firmware.bin +firmware: multiface_firmware_rev11.bin +firmware: mwl8k/fmimage_8363.fw +firmware: mwl8k/fmimage_8366.fw +firmware: mwl8k/fmimage_8366_ap-3.fw +firmware: mwl8k/fmimage_8687.fw +firmware: mwl8k/helper_8363.fw +firmware: mwl8k/helper_8366.fw +firmware: mwl8k/helper_8687.fw +firmware: myri10ge_eth_z8e.dat +firmware: myri10ge_ethp_z8e.dat +firmware: myri10ge_rss_eth_z8e.dat +firmware: myri10ge_rss_ethp_z8e.dat +firmware: netronome/nic_AMDA0081-0001_1x40.nffw +firmware: netronome/nic_AMDA0081-0001_4x10.nffw +firmware: netronome/nic_AMDA0096-0001_2x10.nffw +firmware: netronome/nic_AMDA0097-0001_2x40.nffw +firmware: netronome/nic_AMDA0097-0001_4x10_1x40.nffw +firmware: netronome/nic_AMDA0097-0001_8x10.nffw +firmware: netronome/nic_AMDA0099-0001_2x10.nffw +firmware: netronome/nic_AMDA0099-0001_2x25.nffw +firmware: ni6534a.bin +firmware: niscrb01.bin +firmware: niscrb02.bin +firmware: nvidia/gk20a/fecs_data.bin +firmware: nvidia/gk20a/fecs_inst.bin +firmware: nvidia/gk20a/gpccs_data.bin +firmware: nvidia/gk20a/gpccs_inst.bin +firmware: nvidia/gk20a/sw_bundle_init.bin +firmware: nvidia/gk20a/sw_ctx.bin +firmware: nvidia/gk20a/sw_method_init.bin +firmware: nvidia/gk20a/sw_nonctx.bin +firmware: nvidia/gm200/acr/bl.bin +firmware: nvidia/gm200/acr/ucode_load.bin +firmware: nvidia/gm200/acr/ucode_unload.bin +firmware: nvidia/gm200/gr/fecs_bl.bin +firmware: nvidia/gm200/gr/fecs_data.bin +firmware: nvidia/gm200/gr/fecs_inst.bin +firmware: nvidia/gm200/gr/fecs_sig.bin +firmware: nvidia/gm200/gr/gpccs_bl.bin +firmware: nvidia/gm200/gr/gpccs_data.bin +firmware: nvidia/gm200/gr/gpccs_inst.bin +firmware: nvidia/gm200/gr/gpccs_sig.bin +firmware: nvidia/gm200/gr/sw_bundle_init.bin +firmware: nvidia/gm200/gr/sw_ctx.bin +firmware: nvidia/gm200/gr/sw_method_init.bin +firmware: nvidia/gm200/gr/sw_nonctx.bin +firmware: nvidia/gm204/acr/bl.bin +firmware: nvidia/gm204/acr/ucode_load.bin +firmware: nvidia/gm204/acr/ucode_unload.bin +firmware: nvidia/gm204/gr/fecs_bl.bin +firmware: nvidia/gm204/gr/fecs_data.bin +firmware: nvidia/gm204/gr/fecs_inst.bin +firmware: nvidia/gm204/gr/fecs_sig.bin +firmware: nvidia/gm204/gr/gpccs_bl.bin +firmware: nvidia/gm204/gr/gpccs_data.bin +firmware: nvidia/gm204/gr/gpccs_inst.bin +firmware: nvidia/gm204/gr/gpccs_sig.bin +firmware: nvidia/gm204/gr/sw_bundle_init.bin +firmware: nvidia/gm204/gr/sw_ctx.bin +firmware: nvidia/gm204/gr/sw_method_init.bin +firmware: nvidia/gm204/gr/sw_nonctx.bin +firmware: nvidia/gm206/acr/bl.bin +firmware: nvidia/gm206/acr/ucode_load.bin +firmware: nvidia/gm206/acr/ucode_unload.bin +firmware: nvidia/gm206/gr/fecs_bl.bin +firmware: nvidia/gm206/gr/fecs_data.bin +firmware: nvidia/gm206/gr/fecs_inst.bin +firmware: nvidia/gm206/gr/fecs_sig.bin +firmware: nvidia/gm206/gr/gpccs_bl.bin +firmware: nvidia/gm206/gr/gpccs_data.bin +firmware: nvidia/gm206/gr/gpccs_inst.bin +firmware: nvidia/gm206/gr/gpccs_sig.bin +firmware: nvidia/gm206/gr/sw_bundle_init.bin +firmware: nvidia/gm206/gr/sw_ctx.bin +firmware: nvidia/gm206/gr/sw_method_init.bin +firmware: nvidia/gm206/gr/sw_nonctx.bin +firmware: nvidia/gm20b/acr/bl.bin +firmware: nvidia/gm20b/acr/ucode_load.bin +firmware: nvidia/gm20b/gr/fecs_bl.bin +firmware: nvidia/gm20b/gr/fecs_data.bin +firmware: nvidia/gm20b/gr/fecs_inst.bin +firmware: nvidia/gm20b/gr/fecs_sig.bin +firmware: nvidia/gm20b/gr/gpccs_data.bin +firmware: nvidia/gm20b/gr/gpccs_inst.bin +firmware: nvidia/gm20b/gr/sw_bundle_init.bin +firmware: nvidia/gm20b/gr/sw_ctx.bin +firmware: nvidia/gm20b/gr/sw_method_init.bin +firmware: nvidia/gm20b/gr/sw_nonctx.bin +firmware: nvidia/gm20b/pmu/desc.bin +firmware: nvidia/gm20b/pmu/image.bin +firmware: nvidia/gm20b/pmu/sig.bin +firmware: nvidia/gp100/acr/bl.bin +firmware: nvidia/gp100/acr/ucode_load.bin +firmware: nvidia/gp100/acr/ucode_unload.bin +firmware: nvidia/gp100/gr/fecs_bl.bin +firmware: nvidia/gp100/gr/fecs_data.bin +firmware: nvidia/gp100/gr/fecs_inst.bin +firmware: nvidia/gp100/gr/fecs_sig.bin +firmware: nvidia/gp100/gr/gpccs_bl.bin +firmware: nvidia/gp100/gr/gpccs_data.bin +firmware: nvidia/gp100/gr/gpccs_inst.bin +firmware: nvidia/gp100/gr/gpccs_sig.bin +firmware: nvidia/gp100/gr/sw_bundle_init.bin +firmware: nvidia/gp100/gr/sw_ctx.bin +firmware: nvidia/gp100/gr/sw_method_init.bin +firmware: nvidia/gp100/gr/sw_nonctx.bin +firmware: nvidia/gp102/acr/bl.bin +firmware: nvidia/gp102/acr/ucode_load.bin +firmware: nvidia/gp102/acr/ucode_unload.bin +firmware: nvidia/gp102/acr/unload_bl.bin +firmware: nvidia/gp102/gr/fecs_bl.bin +firmware: nvidia/gp102/gr/fecs_data.bin +firmware: nvidia/gp102/gr/fecs_inst.bin +firmware: nvidia/gp102/gr/fecs_sig.bin +firmware: nvidia/gp102/gr/gpccs_bl.bin +firmware: nvidia/gp102/gr/gpccs_data.bin +firmware: nvidia/gp102/gr/gpccs_inst.bin +firmware: nvidia/gp102/gr/gpccs_sig.bin +firmware: nvidia/gp102/gr/sw_bundle_init.bin +firmware: nvidia/gp102/gr/sw_ctx.bin +firmware: nvidia/gp102/gr/sw_method_init.bin +firmware: nvidia/gp102/gr/sw_nonctx.bin +firmware: nvidia/gp102/nvdec/scrubber.bin +firmware: nvidia/gp102/sec2/desc.bin +firmware: nvidia/gp102/sec2/image.bin +firmware: nvidia/gp102/sec2/sig.bin +firmware: nvidia/gp104/acr/bl.bin +firmware: nvidia/gp104/acr/ucode_load.bin +firmware: nvidia/gp104/acr/ucode_unload.bin +firmware: nvidia/gp104/acr/unload_bl.bin +firmware: nvidia/gp104/gr/fecs_bl.bin +firmware: nvidia/gp104/gr/fecs_data.bin +firmware: nvidia/gp104/gr/fecs_inst.bin +firmware: nvidia/gp104/gr/fecs_sig.bin +firmware: nvidia/gp104/gr/gpccs_bl.bin +firmware: nvidia/gp104/gr/gpccs_data.bin +firmware: nvidia/gp104/gr/gpccs_inst.bin +firmware: nvidia/gp104/gr/gpccs_sig.bin +firmware: nvidia/gp104/gr/sw_bundle_init.bin +firmware: nvidia/gp104/gr/sw_ctx.bin +firmware: nvidia/gp104/gr/sw_method_init.bin +firmware: nvidia/gp104/gr/sw_nonctx.bin +firmware: nvidia/gp104/nvdec/scrubber.bin +firmware: nvidia/gp104/sec2/desc.bin +firmware: nvidia/gp104/sec2/image.bin +firmware: nvidia/gp104/sec2/sig.bin +firmware: nvidia/gp106/acr/bl.bin +firmware: nvidia/gp106/acr/ucode_load.bin +firmware: nvidia/gp106/acr/ucode_unload.bin +firmware: nvidia/gp106/acr/unload_bl.bin +firmware: nvidia/gp106/gr/fecs_bl.bin +firmware: nvidia/gp106/gr/fecs_data.bin +firmware: nvidia/gp106/gr/fecs_inst.bin +firmware: nvidia/gp106/gr/fecs_sig.bin +firmware: nvidia/gp106/gr/gpccs_bl.bin +firmware: nvidia/gp106/gr/gpccs_data.bin +firmware: nvidia/gp106/gr/gpccs_inst.bin +firmware: nvidia/gp106/gr/gpccs_sig.bin +firmware: nvidia/gp106/gr/sw_bundle_init.bin +firmware: nvidia/gp106/gr/sw_ctx.bin +firmware: nvidia/gp106/gr/sw_method_init.bin +firmware: nvidia/gp106/gr/sw_nonctx.bin +firmware: nvidia/gp106/nvdec/scrubber.bin +firmware: nvidia/gp106/sec2/desc.bin +firmware: nvidia/gp106/sec2/image.bin +firmware: nvidia/gp106/sec2/sig.bin +firmware: nvidia/gp107/acr/bl.bin +firmware: nvidia/gp107/acr/ucode_load.bin +firmware: nvidia/gp107/acr/ucode_unload.bin +firmware: nvidia/gp107/acr/unload_bl.bin +firmware: nvidia/gp107/gr/fecs_bl.bin +firmware: nvidia/gp107/gr/fecs_data.bin +firmware: nvidia/gp107/gr/fecs_inst.bin +firmware: nvidia/gp107/gr/fecs_sig.bin +firmware: nvidia/gp107/gr/gpccs_bl.bin +firmware: nvidia/gp107/gr/gpccs_data.bin +firmware: nvidia/gp107/gr/gpccs_inst.bin +firmware: nvidia/gp107/gr/gpccs_sig.bin +firmware: nvidia/gp107/gr/sw_bundle_init.bin +firmware: nvidia/gp107/gr/sw_ctx.bin +firmware: nvidia/gp107/gr/sw_method_init.bin +firmware: nvidia/gp107/gr/sw_nonctx.bin +firmware: nvidia/gp107/nvdec/scrubber.bin +firmware: nvidia/gp107/sec2/desc.bin +firmware: nvidia/gp107/sec2/image.bin +firmware: nvidia/gp107/sec2/sig.bin +firmware: nvidia/gp10b/acr/bl.bin +firmware: nvidia/gp10b/acr/ucode_load.bin +firmware: nvidia/gp10b/gr/fecs_bl.bin +firmware: nvidia/gp10b/gr/fecs_data.bin +firmware: nvidia/gp10b/gr/fecs_inst.bin +firmware: nvidia/gp10b/gr/fecs_sig.bin +firmware: nvidia/gp10b/gr/gpccs_bl.bin +firmware: nvidia/gp10b/gr/gpccs_data.bin +firmware: nvidia/gp10b/gr/gpccs_inst.bin +firmware: nvidia/gp10b/gr/gpccs_sig.bin +firmware: nvidia/gp10b/gr/sw_bundle_init.bin +firmware: nvidia/gp10b/gr/sw_ctx.bin +firmware: nvidia/gp10b/gr/sw_method_init.bin +firmware: nvidia/gp10b/gr/sw_nonctx.bin +firmware: nvidia/gp10b/pmu/desc.bin +firmware: nvidia/gp10b/pmu/image.bin +firmware: nvidia/gp10b/pmu/sig.bin +firmware: nvidia/tegra124/vic03_ucode.bin +firmware: nvidia/tegra124/xusb.bin +firmware: nvidia/tegra210/xusb.bin +firmware: orinoco_ezusb_fw +firmware: ositech/Xilinx7OD.bin +firmware: pca200e.bin +firmware: pca200e_ecd.bin2 +firmware: pcxhr/dspb1222e.b56 +firmware: pcxhr/dspb1222hr.b56 +firmware: pcxhr/dspb882e.b56 +firmware: pcxhr/dspb882hr.b56 +firmware: pcxhr/dspb924.b56 +firmware: pcxhr/dspd1222.d56 +firmware: pcxhr/dspd222.d56 +firmware: pcxhr/dspd882.d56 +firmware: pcxhr/dspe882.e56 +firmware: pcxhr/dspe924.e56 +firmware: pcxhr/xlxc1222e.dat +firmware: pcxhr/xlxc1222hr.dat +firmware: pcxhr/xlxc222.dat +firmware: pcxhr/xlxc882e.dat +firmware: pcxhr/xlxc882hr.dat +firmware: pcxhr/xlxc924.dat +firmware: pcxhr/xlxint.dat +firmware: phanfw.bin +firmware: prism2_ru.fw +firmware: prism_ap_fw.bin +firmware: prism_sta_fw.bin +firmware: qat_895xcc.bin +firmware: qed/qed_init_values_zipped-8.20.0.0.bin +firmware: ql2100_fw.bin +firmware: ql2200_fw.bin +firmware: ql2300_fw.bin +firmware: ql2322_fw.bin +firmware: ql2400_fw.bin +firmware: ql2500_fw.bin +firmware: qlogic/1040.bin +firmware: qlogic/12160.bin +firmware: qlogic/1280.bin +firmware: qlogic/sd7220.fw +firmware: r8a779x_usb3_v1.dlmem +firmware: r8a779x_usb3_v2.dlmem +firmware: r8a779x_usb3_v3.dlmem +firmware: radeon/ARUBA_me.bin +firmware: radeon/ARUBA_pfp.bin +firmware: radeon/ARUBA_rlc.bin +firmware: radeon/BARTS_mc.bin +firmware: radeon/BARTS_me.bin +firmware: radeon/BARTS_pfp.bin +firmware: radeon/BARTS_smc.bin +firmware: radeon/BONAIRE_ce.bin +firmware: radeon/BONAIRE_mc.bin +firmware: radeon/BONAIRE_mc2.bin +firmware: radeon/BONAIRE_me.bin +firmware: radeon/BONAIRE_mec.bin +firmware: radeon/BONAIRE_pfp.bin +firmware: radeon/BONAIRE_rlc.bin +firmware: radeon/BONAIRE_sdma.bin +firmware: radeon/BONAIRE_smc.bin +firmware: radeon/BONAIRE_uvd.bin +firmware: radeon/BONAIRE_vce.bin +firmware: radeon/BTC_rlc.bin +firmware: radeon/CAICOS_mc.bin +firmware: radeon/CAICOS_me.bin +firmware: radeon/CAICOS_pfp.bin +firmware: radeon/CAICOS_smc.bin +firmware: radeon/CAYMAN_mc.bin +firmware: radeon/CAYMAN_me.bin +firmware: radeon/CAYMAN_pfp.bin +firmware: radeon/CAYMAN_rlc.bin +firmware: radeon/CAYMAN_smc.bin +firmware: radeon/CEDAR_me.bin +firmware: radeon/CEDAR_pfp.bin +firmware: radeon/CEDAR_rlc.bin +firmware: radeon/CEDAR_smc.bin +firmware: radeon/CYPRESS_me.bin +firmware: radeon/CYPRESS_pfp.bin +firmware: radeon/CYPRESS_rlc.bin +firmware: radeon/CYPRESS_smc.bin +firmware: radeon/CYPRESS_uvd.bin +firmware: radeon/HAINAN_ce.bin +firmware: radeon/HAINAN_mc.bin +firmware: radeon/HAINAN_mc2.bin +firmware: radeon/HAINAN_me.bin +firmware: radeon/HAINAN_pfp.bin +firmware: radeon/HAINAN_rlc.bin +firmware: radeon/HAINAN_smc.bin +firmware: radeon/HAWAII_ce.bin +firmware: radeon/HAWAII_mc.bin +firmware: radeon/HAWAII_mc2.bin +firmware: radeon/HAWAII_me.bin +firmware: radeon/HAWAII_mec.bin +firmware: radeon/HAWAII_pfp.bin +firmware: radeon/HAWAII_rlc.bin +firmware: radeon/HAWAII_sdma.bin +firmware: radeon/HAWAII_smc.bin +firmware: radeon/JUNIPER_me.bin +firmware: radeon/JUNIPER_pfp.bin +firmware: radeon/JUNIPER_rlc.bin +firmware: radeon/JUNIPER_smc.bin +firmware: radeon/KABINI_ce.bin +firmware: radeon/KABINI_me.bin +firmware: radeon/KABINI_mec.bin +firmware: radeon/KABINI_pfp.bin +firmware: radeon/KABINI_rlc.bin +firmware: radeon/KABINI_sdma.bin +firmware: radeon/KAVERI_ce.bin +firmware: radeon/KAVERI_me.bin +firmware: radeon/KAVERI_mec.bin +firmware: radeon/KAVERI_pfp.bin +firmware: radeon/KAVERI_rlc.bin +firmware: radeon/KAVERI_sdma.bin +firmware: radeon/MULLINS_ce.bin +firmware: radeon/MULLINS_me.bin +firmware: radeon/MULLINS_mec.bin +firmware: radeon/MULLINS_pfp.bin +firmware: radeon/MULLINS_rlc.bin +firmware: radeon/MULLINS_sdma.bin +firmware: radeon/OLAND_ce.bin +firmware: radeon/OLAND_mc.bin +firmware: radeon/OLAND_mc2.bin +firmware: radeon/OLAND_me.bin +firmware: radeon/OLAND_pfp.bin +firmware: radeon/OLAND_rlc.bin +firmware: radeon/OLAND_smc.bin +firmware: radeon/PALM_me.bin +firmware: radeon/PALM_pfp.bin +firmware: radeon/PITCAIRN_ce.bin +firmware: radeon/PITCAIRN_mc.bin +firmware: radeon/PITCAIRN_mc2.bin +firmware: radeon/PITCAIRN_me.bin +firmware: radeon/PITCAIRN_pfp.bin +firmware: radeon/PITCAIRN_rlc.bin +firmware: radeon/PITCAIRN_smc.bin +firmware: radeon/R100_cp.bin +firmware: radeon/R200_cp.bin +firmware: radeon/R300_cp.bin +firmware: radeon/R420_cp.bin +firmware: radeon/R520_cp.bin +firmware: radeon/R600_me.bin +firmware: radeon/R600_pfp.bin +firmware: radeon/R600_rlc.bin +firmware: radeon/R600_uvd.bin +firmware: radeon/R700_rlc.bin +firmware: radeon/REDWOOD_me.bin +firmware: radeon/REDWOOD_pfp.bin +firmware: radeon/REDWOOD_rlc.bin +firmware: radeon/REDWOOD_smc.bin +firmware: radeon/RS600_cp.bin +firmware: radeon/RS690_cp.bin +firmware: radeon/RS780_me.bin +firmware: radeon/RS780_pfp.bin +firmware: radeon/RS780_uvd.bin +firmware: radeon/RV610_me.bin +firmware: radeon/RV610_pfp.bin +firmware: radeon/RV620_me.bin +firmware: radeon/RV620_pfp.bin +firmware: radeon/RV630_me.bin +firmware: radeon/RV630_pfp.bin +firmware: radeon/RV635_me.bin +firmware: radeon/RV635_pfp.bin +firmware: radeon/RV670_me.bin +firmware: radeon/RV670_pfp.bin +firmware: radeon/RV710_me.bin +firmware: radeon/RV710_pfp.bin +firmware: radeon/RV710_smc.bin +firmware: radeon/RV710_uvd.bin +firmware: radeon/RV730_me.bin +firmware: radeon/RV730_pfp.bin +firmware: radeon/RV730_smc.bin +firmware: radeon/RV740_smc.bin +firmware: radeon/RV770_me.bin +firmware: radeon/RV770_pfp.bin +firmware: radeon/RV770_smc.bin +firmware: radeon/RV770_uvd.bin +firmware: radeon/SUMO2_me.bin +firmware: radeon/SUMO2_pfp.bin +firmware: radeon/SUMO_me.bin +firmware: radeon/SUMO_pfp.bin +firmware: radeon/SUMO_rlc.bin +firmware: radeon/SUMO_uvd.bin +firmware: radeon/TAHITI_ce.bin +firmware: radeon/TAHITI_mc.bin +firmware: radeon/TAHITI_mc2.bin +firmware: radeon/TAHITI_me.bin +firmware: radeon/TAHITI_pfp.bin +firmware: radeon/TAHITI_rlc.bin +firmware: radeon/TAHITI_smc.bin +firmware: radeon/TAHITI_uvd.bin +firmware: radeon/TAHITI_vce.bin +firmware: radeon/TURKS_mc.bin +firmware: radeon/TURKS_me.bin +firmware: radeon/TURKS_pfp.bin +firmware: radeon/TURKS_smc.bin +firmware: radeon/VERDE_ce.bin +firmware: radeon/VERDE_mc.bin +firmware: radeon/VERDE_mc2.bin +firmware: radeon/VERDE_me.bin +firmware: radeon/VERDE_pfp.bin +firmware: radeon/VERDE_rlc.bin +firmware: radeon/VERDE_smc.bin +firmware: radeon/banks_k_2_smc.bin +firmware: radeon/bonaire_ce.bin +firmware: radeon/bonaire_k_smc.bin +firmware: radeon/bonaire_mc.bin +firmware: radeon/bonaire_me.bin +firmware: radeon/bonaire_mec.bin +firmware: radeon/bonaire_pfp.bin +firmware: radeon/bonaire_rlc.bin +firmware: radeon/bonaire_sdma.bin +firmware: radeon/bonaire_sdma1.bin +firmware: radeon/bonaire_smc.bin +firmware: radeon/bonaire_uvd.bin +firmware: radeon/bonaire_vce.bin +firmware: radeon/hainan_ce.bin +firmware: radeon/hainan_k_smc.bin +firmware: radeon/hainan_mc.bin +firmware: radeon/hainan_me.bin +firmware: radeon/hainan_pfp.bin +firmware: radeon/hainan_rlc.bin +firmware: radeon/hainan_smc.bin +firmware: radeon/hawaii_ce.bin +firmware: radeon/hawaii_k_smc.bin +firmware: radeon/hawaii_mc.bin +firmware: radeon/hawaii_me.bin +firmware: radeon/hawaii_mec.bin +firmware: radeon/hawaii_pfp.bin +firmware: radeon/hawaii_rlc.bin +firmware: radeon/hawaii_sdma.bin +firmware: radeon/hawaii_sdma1.bin +firmware: radeon/hawaii_smc.bin +firmware: radeon/hawaii_uvd.bin +firmware: radeon/hawaii_vce.bin +firmware: radeon/kabini_ce.bin +firmware: radeon/kabini_me.bin +firmware: radeon/kabini_mec.bin +firmware: radeon/kabini_pfp.bin +firmware: radeon/kabini_rlc.bin +firmware: radeon/kabini_sdma.bin +firmware: radeon/kabini_sdma1.bin +firmware: radeon/kabini_uvd.bin +firmware: radeon/kabini_vce.bin +firmware: radeon/kaveri_ce.bin +firmware: radeon/kaveri_me.bin +firmware: radeon/kaveri_mec.bin +firmware: radeon/kaveri_mec2.bin +firmware: radeon/kaveri_pfp.bin +firmware: radeon/kaveri_rlc.bin +firmware: radeon/kaveri_sdma.bin +firmware: radeon/kaveri_sdma1.bin +firmware: radeon/kaveri_uvd.bin +firmware: radeon/kaveri_vce.bin +firmware: radeon/mullins_ce.bin +firmware: radeon/mullins_me.bin +firmware: radeon/mullins_mec.bin +firmware: radeon/mullins_pfp.bin +firmware: radeon/mullins_rlc.bin +firmware: radeon/mullins_sdma.bin +firmware: radeon/mullins_sdma1.bin +firmware: radeon/mullins_uvd.bin +firmware: radeon/mullins_vce.bin +firmware: radeon/oland_ce.bin +firmware: radeon/oland_k_smc.bin +firmware: radeon/oland_mc.bin +firmware: radeon/oland_me.bin +firmware: radeon/oland_pfp.bin +firmware: radeon/oland_rlc.bin +firmware: radeon/oland_smc.bin +firmware: radeon/pitcairn_ce.bin +firmware: radeon/pitcairn_k_smc.bin +firmware: radeon/pitcairn_mc.bin +firmware: radeon/pitcairn_me.bin +firmware: radeon/pitcairn_pfp.bin +firmware: radeon/pitcairn_rlc.bin +firmware: radeon/pitcairn_smc.bin +firmware: radeon/si58_mc.bin +firmware: radeon/tahiti_ce.bin +firmware: radeon/tahiti_mc.bin +firmware: radeon/tahiti_me.bin +firmware: radeon/tahiti_pfp.bin +firmware: radeon/tahiti_rlc.bin +firmware: radeon/tahiti_smc.bin +firmware: radeon/verde_ce.bin +firmware: radeon/verde_k_smc.bin +firmware: radeon/verde_mc.bin +firmware: radeon/verde_me.bin +firmware: radeon/verde_pfp.bin +firmware: radeon/verde_rlc.bin +firmware: radeon/verde_smc.bin +firmware: riptide.hex +firmware: rp2.fw +firmware: rpm_firmware.bin +firmware: rs9113_wlan_qspi.rps +firmware: rt2561.bin +firmware: rt2561s.bin +firmware: rt2661.bin +firmware: rt2860.bin +firmware: rt2870.bin +firmware: rt73.bin +firmware: rtl_nic/rtl8105e-1.fw +firmware: rtl_nic/rtl8106e-1.fw +firmware: rtl_nic/rtl8106e-2.fw +firmware: rtl_nic/rtl8107e-1.fw +firmware: rtl_nic/rtl8107e-2.fw +firmware: rtl_nic/rtl8168d-1.fw +firmware: rtl_nic/rtl8168d-2.fw +firmware: rtl_nic/rtl8168e-1.fw +firmware: rtl_nic/rtl8168e-2.fw +firmware: rtl_nic/rtl8168e-3.fw +firmware: rtl_nic/rtl8168f-1.fw +firmware: rtl_nic/rtl8168f-2.fw +firmware: rtl_nic/rtl8168g-2.fw +firmware: rtl_nic/rtl8168g-3.fw +firmware: rtl_nic/rtl8168h-1.fw +firmware: rtl_nic/rtl8168h-2.fw +firmware: rtl_nic/rtl8402-1.fw +firmware: rtl_nic/rtl8411-1.fw +firmware: rtl_nic/rtl8411-2.fw +firmware: rtlwifi/rtl8188efw.bin +firmware: rtlwifi/rtl8192cfw.bin +firmware: rtlwifi/rtl8192cfwU.bin +firmware: rtlwifi/rtl8192cfwU_B.bin +firmware: rtlwifi/rtl8192cufw.bin +firmware: rtlwifi/rtl8192cufw_A.bin +firmware: rtlwifi/rtl8192cufw_B.bin +firmware: rtlwifi/rtl8192cufw_TMSC.bin +firmware: rtlwifi/rtl8192defw.bin +firmware: rtlwifi/rtl8192eefw.bin +firmware: rtlwifi/rtl8192eu_nic.bin +firmware: rtlwifi/rtl8192sefw.bin +firmware: rtlwifi/rtl8712u.bin +firmware: rtlwifi/rtl8723aufw_A.bin +firmware: rtlwifi/rtl8723aufw_B.bin +firmware: rtlwifi/rtl8723aufw_B_NoBT.bin +firmware: rtlwifi/rtl8723befw.bin +firmware: rtlwifi/rtl8723befw_36.bin +firmware: rtlwifi/rtl8723bu_bt.bin +firmware: rtlwifi/rtl8723bu_nic.bin +firmware: rtlwifi/rtl8723efw.bin +firmware: rtlwifi/rtl8821aefw.bin +firmware: rtlwifi/rtl8821aefw_29.bin +firmware: rtlwifi/rtl8822befw.bin +firmware: sb16/alaw_main.csp +firmware: sb16/ima_adpcm_capture.csp +firmware: sb16/ima_adpcm_init.csp +firmware: sb16/ima_adpcm_playback.csp +firmware: sb16/mulaw_main.csp +firmware: scope.cod +firmware: sd8385.bin +firmware: sd8385_helper.bin +firmware: sd8686.bin +firmware: sd8686_helper.bin +firmware: sd8688.bin +firmware: sd8688_helper.bin +firmware: slicoss/gbdownload.sys +firmware: slicoss/gbrcvucode.sys +firmware: slicoss/oasisdownload.sys +firmware: slicoss/oasisrcvucode.sys +firmware: sms1xxx-hcw-55xxx-dvbt-02.fw +firmware: sms1xxx-hcw-55xxx-isdbt-02.fw +firmware: sms1xxx-nova-a-dvbt-01.fw +firmware: sms1xxx-nova-b-dvbt-01.fw +firmware: sms1xxx-stellar-dvbt-01.fw +firmware: sndscape.co0 +firmware: sndscape.co1 +firmware: sndscape.co2 +firmware: sndscape.co3 +firmware: sndscape.co4 +firmware: softing-4.6/bcard.bin +firmware: softing-4.6/bcard2.bin +firmware: softing-4.6/cancard.bin +firmware: softing-4.6/cancrd2.bin +firmware: softing-4.6/cansja.bin +firmware: softing-4.6/ldcard.bin +firmware: softing-4.6/ldcard2.bin +firmware: solos-FPGA.bin +firmware: solos-Firmware.bin +firmware: solos-db-FPGA.bin +firmware: sun/cassini.bin +firmware: symbol_sp24t_prim_fw +firmware: symbol_sp24t_sec_fw +firmware: tdmb_denver.inp +firmware: tdmb_nova_12mhz.inp +firmware: tdmb_nova_12mhz_b0.inp +firmware: tehuti/bdx.bin +firmware: ti-connectivity/wl1251-fw.bin +firmware: ti-connectivity/wl1251-nvs.bin +firmware: ti-connectivity/wl127x-fw-5-mr.bin +firmware: ti-connectivity/wl127x-fw-5-plt.bin +firmware: ti-connectivity/wl127x-fw-5-sr.bin +firmware: ti-connectivity/wl128x-fw-5-mr.bin +firmware: ti-connectivity/wl128x-fw-5-plt.bin +firmware: ti-connectivity/wl128x-fw-5-sr.bin +firmware: ti-connectivity/wl18xx-fw-4.bin +firmware: ti_3410.fw +firmware: ti_5052.fw +firmware: tigon/tg3.bin +firmware: tigon/tg3_tso.bin +firmware: tigon/tg3_tso5.bin +firmware: ttusb-budget/dspbootcode.bin +firmware: turtlebeach/msndinit.bin +firmware: turtlebeach/msndperm.bin +firmware: turtlebeach/pndsperm.bin +firmware: turtlebeach/pndspini.bin +firmware: ueagle-atm/930-fpga.bin +firmware: ueagle-atm/CMV4i.bin +firmware: ueagle-atm/CMV4i.bin.v2 +firmware: ueagle-atm/CMV4p.bin +firmware: ueagle-atm/CMV4p.bin.v2 +firmware: ueagle-atm/CMV9i.bin +firmware: ueagle-atm/CMV9i.bin.v2 +firmware: ueagle-atm/CMV9p.bin +firmware: ueagle-atm/CMV9p.bin.v2 +firmware: ueagle-atm/CMVei.bin +firmware: ueagle-atm/CMVei.bin.v2 +firmware: ueagle-atm/CMVep.bin +firmware: ueagle-atm/CMVep.bin.v2 +firmware: ueagle-atm/DSP4i.bin +firmware: ueagle-atm/DSP4p.bin +firmware: ueagle-atm/DSP9i.bin +firmware: ueagle-atm/DSP9p.bin +firmware: ueagle-atm/DSPei.bin +firmware: ueagle-atm/DSPep.bin +firmware: ueagle-atm/adi930.fw +firmware: ueagle-atm/eagle.fw +firmware: ueagle-atm/eagleI.fw +firmware: ueagle-atm/eagleII.fw +firmware: ueagle-atm/eagleIII.fw +firmware: ueagle-atm/eagleIV.fw +firmware: usb8388.bin +firmware: usbdux_firmware.bin +firmware: usbduxfast_firmware.bin +firmware: usbduxsigma_firmware.bin +firmware: v4l-cx231xx-avcore-01.fw +firmware: v4l-cx23418-apu.fw +firmware: v4l-cx23418-cpu.fw +firmware: v4l-cx23418-dig.fw +firmware: v4l-cx2341x-dec.fw +firmware: v4l-cx2341x-enc.fw +firmware: v4l-cx2341x-init.mpg +firmware: v4l-cx23885-avcore-01.fw +firmware: v4l-cx23885-enc.fw +firmware: v4l-cx25840.fw +firmware: v4l-pvrusb2-24xxx-01.fw +firmware: v4l-pvrusb2-29xxx-01.fw +firmware: v4l-pvrusb2-73xxx-01.fw +firmware: vicam/firmware.fw +firmware: vntwusb.fw +firmware: vpdma-1b8.bin +firmware: vx/bd56002.boot +firmware: vx/bd563s3.boot +firmware: vx/bd563v2.boot +firmware: vx/bx_1_vp4.b56 +firmware: vx/bx_1_vxp.b56 +firmware: vx/l_1_v22.d56 +firmware: vx/l_1_vp4.d56 +firmware: vx/l_1_vx2.d56 +firmware: vx/l_1_vxp.d56 +firmware: vx/x1_1_vp4.xlx +firmware: vx/x1_1_vx2.xlx +firmware: vx/x1_1_vxp.xlx +firmware: vx/x1_2_v22.xlx +firmware: vxge/X3fw-pxe.ncf +firmware: vxge/X3fw.ncf +firmware: wavefront.os +firmware: wd719x-risc.bin +firmware: wd719x-wcs.bin +firmware: whiteheat.fw +firmware: whiteheat_loader.fw +firmware: wil6210.brd +firmware: wil6210.fw +firmware: wil6210_sparrow_plus.fw +firmware: wlan/prima/WCNSS_qcom_wlan_nv.bin +firmware: xc3028-v27.fw +firmware: xc3028L-v36.fw +firmware: yam/1200.bin +firmware: yam/9600.bin +firmware: yamaha/ds1_ctrl.fw +firmware: yamaha/ds1_dsp.fw +firmware: yamaha/ds1e_ctrl.fw +firmware: yamaha/yss225_registers.bin +firmware: zd1201-ap.fw +firmware: zd1201.fw +firmware: zd1211/zd1211_ub +firmware: zd1211/zd1211_uphr +firmware: zd1211/zd1211_ur +firmware: zd1211/zd1211b_ub +firmware: zd1211/zd1211b_uphr +firmware: zd1211/zd1211b_ur --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/generic @@ -0,0 +1,22557 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_pending_timer +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_cb_base +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_base +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_shadow +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_levels +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_handles_brightness_key_presses +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_register +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_set_dmi_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_unregister +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x00000000 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_read +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/firmware/dcdbas 0x00000000 dcdbas_smi_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_pci_cfg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_write +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 NS8390p_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_init +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_static_ops +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_io_bytes_mec +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_destroy +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_init +EXPORT_SYMBOL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_simple_command +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x00000000 sony_pic_camera_command +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 __wmi_driver_register +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 wmi_driver_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_control_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_control_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_event_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_event_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_rx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_set_station_address +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_src_uuid_hi_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_src_uuid_lo_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_tx_snap_read +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_detect +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_intr +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_release +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_host_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_art +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_trt +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_add +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_remove +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_create +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_read +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x00000000 snd_tea6330t_detect +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x00000000 snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_create +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_pcm +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_reset +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_delay +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_use_inc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_setup +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0x00000000 snd_aci_cmd +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0x00000000 snd_aci_get_aci +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x00000000 snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_interrupt +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mce_down +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_overrange +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_timer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x00000000 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_free +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_new +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_bm_status +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_label +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_pciaddr +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_temperature +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_version +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_register_event_notifier +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_reset +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_otprotect +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_wmode +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_submit_pbio +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_unregister_event_notifier +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuestIDC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertAreQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Add +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2V +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2WeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertShouldPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertFromErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertToErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogClearFileDelayFlag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCloneRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDumpPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlush +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushToLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetCustomPrefixCallback +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstanceThread +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteCom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteDebugger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdErr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdOut +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFreeEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemReallocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdFromSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdToSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndexAndId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetMaxCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuOnline +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPresent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuWorkPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAll +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAllIsConcurrentSafe +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnOthers +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPair +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPairIsConcurrentExecSupported +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnSpecific +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpPokeCpu +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerSignalEvent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTProcSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0AssertPanicSystem +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Init +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemAreKrnlAndUsrDifferent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemExecDonate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddress +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddressR3 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocContTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocLowTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPageTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysNCTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjEnterPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjGetPagePhysAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjIsMapping +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjProtect +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0ProcHandleSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Term +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexIsOwned +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResumeDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexTryRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockAcquire +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrConvertHexBytes +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyP +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatNumber +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeSetUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateF +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadFromNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInInterrupt +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInitialized +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsMain +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfAlive +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfKnown +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadNativeSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptDisable +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsEnabled +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPendingTrusty +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptRestore +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSelfName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleep +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleepNoLog +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadYield +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeExplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeImplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeIsLeapYear +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNormalize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNow +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCanDoHighResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerChangeInterval +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerGetSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerReleaseSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerRequestSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStart +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStop +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertExpr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFile +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFunction +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_u32RTAssertLine +EXPORT_SYMBOL vmlinux 0x00000000 EISA_bus +EXPORT_SYMBOL vmlinux 0x00000000 IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cachemode2pte_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x00000000 __copy_user_ll +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __div64_32 +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fentry__ +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_is_locked_down +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __kunmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __max_logical_packages +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __preempt_count +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte2cachemode_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_eax +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ebp +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ebx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ecx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_edi +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_edx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_esi +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_wakeup_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_finish_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_raw_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mark_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mask_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0x00000000 acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unmap_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 apm_info +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_dma_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_free_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_reserve_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_add +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_del +EXPORT_SYMBOL vmlinux 0x00000000 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_add_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_add_unless_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_dec_if_positive_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_dec_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_inc_not_zero_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_inc_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_read_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_set_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_sub_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_xchg_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x00000000 boot_option_idle_override +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 cmos_lock +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 contig_page_data +EXPORT_SYMBOL vmlinux 0x00000000 convert_art_to_tsc +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_current_top_of_stack +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_dr7 +EXPORT_SYMBOL vmlinux 0x00000000 cpu_info +EXPORT_SYMBOL vmlinux 0x00000000 cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlbstate +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tss_rw +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_task +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_idle +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 div64_s64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 div_s64_rem +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_alloc_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x00000000 dma_mmap_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 eisa_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 eisa_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_clear_fs +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_default +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_ext +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_rdmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_refcount +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_wrmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_pm_trace +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_cpu_entry_area +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_ibs_caps +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_get +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_command +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_i2c_cntrl +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_readv +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_simple_command +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_update_register +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_writev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wt +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_available +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_call_pmic_bus_access_notifier_chain +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_modify +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_acquire +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_release +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_read +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_register_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_unregister_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_write +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_present +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 ist_info +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmap +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x00000000 kmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kmap_to_page +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kunmap +EXPORT_SYMBOL vmlinux 0x00000000 kunmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 legacy_pic +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 machine_real_restart +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 max_mapnr +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_map +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memset64 +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msrs_alloc +EXPORT_SYMBOL vmlinux 0x00000000 msrs_free +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 native_io_delay +EXPORT_SYMBOL vmlinux 0x00000000 native_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_address +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_mem_start +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_find_card +EXPORT_SYMBOL vmlinux 0x00000000 pnp_find_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 pnpbios_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_irq_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 restore_processor_state +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 save_processor_state +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_x +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_trace_device +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sfi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_num_siblings +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tboot +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 this_cpu_off +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 topology_phys_to_logical_pkg +EXPORT_SYMBOL vmlinux 0x00000000 totalhigh_pages +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsc_khz +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_probe_defer +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_fini_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_handler_flags +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_optimus_hdmi_audio +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_lock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_set_dynamic_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unlock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 x86_apple_machine +EXPORT_SYMBOL vmlinux 0x00000000 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_acpiid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x00000000 x86_hyper_type +EXPORT_SYMBOL vmlinux 0x00000000 x86_match_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_alloc_p2m_entry +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_selfballoon_init +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x00000000 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x00000000 crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit_one +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_req_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x00000000 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x00000000 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_incomplete_ipi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_unaccelerated_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_fast_mmio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pi_irte_update +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_ple_window +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pml_full +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_write_tsc_offset +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __x86_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 cpuid_query_maxphyaddr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 handle_mmio_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_match_dest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_set_eoi_accelerated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_ppr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_write_nodecode +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_end_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_assigned_device +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_register_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_start_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_unregister_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_default_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_in +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_handle_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_ept_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_intr_is_single_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_expired_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_find_highest_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_hv_timer_in_use +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_read +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_sw_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mce_cap_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_clear_dirty_pt_masked +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_largepage_remove_write_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_leaf_clear_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_set_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_sync_roots +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mpx_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_valid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_no_apic_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_register_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_unregister_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_l1_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_scale_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msi_irq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_skip_emulated_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_add_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_remove_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_tsc_scaling_ratio_frac_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_valid_efer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_is_reset_bsp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_reload_apic_access_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vector_hashing_enabled +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 pdptrs_changed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_fixed_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_gp_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reset_shadow_zero_bits_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_set_memory_region +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 __ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_decrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_exit +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init_common +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_set_key +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0x00000000 scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_add_key_value_param +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_remove +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_section_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_clean_vf_map +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cleanup_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_get +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_in_use +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_put +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_start +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_started +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_stop +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_add_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_in_reset +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_pci_to_accel_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_rm_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_update_class_index +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_sriov +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_vf2pf_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_iov_putmsg +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_flr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_sbr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_send_admin_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_sriov_configure +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 qat_crypto_dev_config +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_do_irq +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_get_status +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x00000000 amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 pp_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_clear +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_isset +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_set +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_set_irq +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_setup_event +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __hv_pkt_iter_next +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_first +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_ringbuffer_get_debuginfo +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_allocate_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_are_subchannels_present +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_connection +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_free_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_get_outgoing_channel +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_hvsock_device_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_proto_version +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_send_tl_connect_request +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_mpb_desc +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_chn_rescind_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_sc_create_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_setevent +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x00000000 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_match +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_pnp_probe +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_pnp_remove +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_probe +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_remove +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_prepare +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_probe +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_remove +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_resume +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_suspend +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 __mei_cldev_driver_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cancel_work +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_disable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_driver_unregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enabled +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_get_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv_nonblock +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_notif_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_rx_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_send +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_set_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_uuid +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_ver +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_deregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_device_init +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_fw_status2str +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg_resume +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_compl_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_read_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_write_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_reset +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_restart +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_start +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_stop +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_write_is_idle +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_release_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_request_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_writedata +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_context_get_priv_flags +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle_priv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_destroy_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_send +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_create +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_destroy +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_notify +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_subscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_get_context_id +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_is_context_owner +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_alloc +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequeue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_detach +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enqueue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enquev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_consume_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_produce_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peek +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peekv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_send_datagram +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 mei_phy_ops +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_alloc +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_free +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_probe +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_resume +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_suspend +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-laptop 0x00000000 dell_micmute_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_register +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_unregister +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_call_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_register_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_unregister_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call_filter +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_error +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_find_token +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_register_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_unregister_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_descriptor_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_hotfix +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_interface_version +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_size +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x00000000 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_update +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_write +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_raw_cmd +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_simple_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_s0ix_counter_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/thinkpad_acpi 0x00000000 tpacpi_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 set_required_buffer_size +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_block_query +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_probe +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_remove +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_to_pcmcia_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_read_trips +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_add +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_remove +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_add_read_only_critical_trip +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_exit +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_init +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_interrupt_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 __tb_ring_enqueue +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_data +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_immediate +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_text +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_create_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_find +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_free_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_get_next +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_remove +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_rx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_tx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_free +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll_complete +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_start +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_stop +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_service_type +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_disable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_enable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_find_by_uuid +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_request +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_response +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_type +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_register +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_unregister +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_remove +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_link +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_ml_capabilities +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_get +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_put +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_int_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_clear_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_set_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_clear +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_reset +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_setup +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_start +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stop_streams +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_assign +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_decouple +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_drsm_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_get_spbmaxfifo +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_release +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_dpibr +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_lpib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_spib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_spbcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_link_free_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_stream_free_all +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_acomp_get_eld +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_display_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_register_notifier +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_set_bclk +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_set_codec_wakeup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_sync_audio_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_port_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8825 0x00000000 nau8825_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt286 0x00000000 rt286_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt298 0x00000000 rt298_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5651 0x00000000 rt5651_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_suspend +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sn95031 0x00000000 sn95031_jack_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 intel_sst_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 relocate_imr_addr_mrfld +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_alloc_drv_context +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_configure_runtime_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_suspend_late +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_wait_for_ready +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_legacy_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_broadwell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_cherrytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_haswell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_dump +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_rx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_tx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_mailbox_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_register_poll +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_reset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_stall +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_fromio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_toio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_alloc_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_free_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyfrom +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyto +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_get_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_put_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_get_offset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_reload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_unload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_register +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_unregister_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_restore +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_save +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_drop_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_fini +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_reply_find_msg +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nopm +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nowait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_wait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_msg_reply_complete +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_device_set_config +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 is_skl_dsp_running +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 kbl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_clear_module_cnt +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_get_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_put_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_instance_id_map +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_bind_unbind +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_create_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_delete_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_get_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_init_instance +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_load_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_restore_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_save_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_d0ix +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_dx +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_pipeline_state +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_unload_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_put_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_ipc_load_library +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_check_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_codec_list +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_machine +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_name_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_package_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_load +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_bind_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove_all +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clear_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fill_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ibp_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __intel_mid_cpu_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ktime_divns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_extlog_mem_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tss_limit_invalid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __unwind_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_target_system_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alternatives_patched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_df_indirect_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nodes_per_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_has_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_misc_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_phys_wc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpu_physical_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_has_xfeatures +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_poll_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_cpu_present_to_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 e820__mapped_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edid_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 events_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fprestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpstate_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__save +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu_kernel_xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_scattered_cpuid_leaf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_xsave_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_hypercall_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_is_hypercall_page_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_vp_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_report_panic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 injectm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_irq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pmc_slp_s0_counter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pt_handle_vmx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_devices_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_devices_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_ipc_raw_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_bind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_is_pasid_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_unbind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ioremap_uc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqd_cfg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_stack_pointer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_para_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_posted_intr_wakeup_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_direct_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_fixmap_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_touch_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_inject_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_is_memory_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mcsafe_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mxcsr_feature_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 node_to_amd_nb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pat_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_set_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_assign_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writethrough +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_rate_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_trace_rtc_abused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptdump_walk_pgd_level_debugfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_get_pvti_cpu0_va +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_decrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_pages_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_mrtc_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slow_virt_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_banks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_get_long_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 umc_normaddr_to_sysaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_get_return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_next_frame +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vrtc_cmos_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vrtc_cmos_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_family +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_model +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_stepping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_vector_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_and_legacy_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_nic_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_in_preemptible_hcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_max_p2m_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_hotplug_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/generic.modules @@ -0,0 +1,5265 @@ +104-quad-8 +3c509 +3c515 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +53c700 +6lowpan +6pack +8021q +8139cp +8139too +8250_accent +8250_boca +8250_dw +8250_exar +8250_exar_st16c554 +8250_fourport +8250_hub6 +8250_lpss +8250_men_mcb +8250_mid +8250_moxa +8255 +8255_pci +8390 +8390p +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +BusLogic +DAC960 +NCR53c406a +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acer-wmi +acerhdf +acp_audio_dma +acpi-als +acpi_configfs +acpi_extlog +acpi_ipmi +acpi_pad +acpi_power_meter +acpi_thermal_rel +acpiphp_ibm +acquirewdt +act200l-sir +act8865-regulator +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7170 +adv7175 +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +advantechwdt +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-i586 +aes_ti +aesni-intel +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +airspy +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-agp +ali-ircc +alienware-wmi +alim1535_wdt +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +ambassador +amc6821 +amd +amd-rng +amd-xgbe +amd5536udc_pci +amd64_edac_mod +amd76x_edac +amd76xrom +amd8111e +amd_freq_sensitivity +amdgpu +amilo-rfkill +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apanel +apds9300 +apds9802als +apds990x +apds9960 +apm +apple-gmux +apple_bl +appledisplay +applesmc +appletalk +appletouch +applicom +aquantia +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcfb +arcmsr +arcnet +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3935 +as5011 +asb100 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +asus-laptop +asus-nb-wmi +asus-wireless +asus-wmi +asus_atk0110 +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati-agp +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avm_cs +avma1_cs +avmfritz +ax25 +ax88179_178a +axnet_cs +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_aout +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpck6 +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipreg +chnl_net +chromeos_laptop +chromeos_pstore +ci_hdrc +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cio-dac +cirrus +cirrusfb +ck804xrom +classmate-laptop +clip +clk-cdce706 +clk-cs2000-cp +clk-palmas +clk-pwm +clk-s2mps11 +clk-si5351 +clk-twl6040 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm36651 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +com20020 +com20020-isa +com20020-pci +com20020_cs +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_pcmcia +comedi_test +comedi_usb +comm +compal-laptop +contec_pci_dio +cops +cordic +core +coretemp +cortina +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpqphp +cpsw_ale +cpu5wdt +cpuid +cr_bllcd +cramfs +crc-itu-t +crc32-pclmul +crc32_generic +crc4 +crc7 +crc8 +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_lpcs +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +crvml +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +cs5535-mfd +cs553x_nand +cs89x0 +csiostor +ct82c710 +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_cs +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +dell-laptop +dell-rbtn +dell-smbios +dell-smbios-smm +dell-smbios-wmi +dell-smm-hwmon +dell-smo8800 +dell-wmi +dell-wmi-aio +dell-wmi-descriptor +dell-wmi-led +dell_rbu +denali +denali_pci +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +donauboe +dp83822 +dp83848 +dp83867 +dpt_i2o +dptf_power +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dtl1_cs +dtlk +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-pci +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +e752x_edac +e7xxx_edac +earth-pt1 +earth-pt3 +eata +ebc-c384_wdt +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_bhf +ec_sys +ecdh_generic +echainiv +echo +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efficeon-agp +efi-pstore +efi_test +efibc +efs +egalax_ts_serial +ehset +einj +ektf2127 +elan_i2c +elants_i2c +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_pcmcia +ems_usb +emu10k1-gp +ena +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +epat +epia +epic100 +eql +esas2r +esb2rom +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +eurotechwdt +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-intel-cht-wc +extcon-intel-int3496 +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +f81534 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fjes +fl512 +fld +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +fmvj18x_cs +fnic +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-mgr +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_NCR5380 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +geneve +geode-aes +geode-rng +gf2k +gfs2 +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glue_helper +gluebi +gma500_gfx +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-104-dio-48e +gpio-104-idi-48 +gpio-104-idio-16 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-crystalcove +gpio-cs5535 +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-f7188x +gpio-generic +gpio-gpio-mm +gpio-ich +gpio-it87 +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-ml-ioh +gpio-pca953x +gpio-pcf857x +gpio-pch +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-sch +gpio-sch311x +gpio-tpic2810 +gpio-tps65086 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-vx855 +gpio-wcove +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-ws16c48 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gr_udc +grace +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +gx-suspmod +gx1fb +gxfb +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdaps +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +hecubafb +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hgafb +hi311x +hi6210-i2s +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-hyperv +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hinic +hio +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horizon +horus3a +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp-wireless +hp-wmi +hp03 +hp100 +hp206c +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hsi +hsi_char +hso +hsr +hsu_dma +hsu_dma_pci +htc-pasic3 +htcpen +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hv_balloon +hv_netvsc +hv_sock +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hx711 +hx8357 +hyperv-keyboard +hyperv_fb +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-cbus-gpio +i2c-cht-wc +i2c-cros-ec-tunnel +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-eg20t +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-ismt +i2c-kempld +i2c-matroxfb +i2c-mux +i2c-mux-gpio +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-reg +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i3000_edac +i3200_edac +i40e +i40evf +i40iw +i5000_edac +i5100_edac +i5400_edac +i5500_temp +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i915 +iTCO_vendor_support +iTCO_wdt +ib700wdt +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibm_rtl +ibmaem +ibmasm +ibmasr +ibmpex +ibmphp +ichxrom +icp_multi +icplus +ics932s401 +ideapad-laptop +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ie31200_edac +ie6xx_wdt +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int3400_thermal +int3402_thermal +int3403_thermal +int3406_thermal +int340x_thermal_zone +int51x1 +intel-cstate +intel-hid +intel-lpss +intel-lpss-acpi +intel-lpss-pci +intel-mid_wdt +intel-rapl-perf +intel-rng +intel-rst +intel-smartconnect +intel-vbtn +intel-wmi-thunderbolt +intel-xway +intel_bxt_pmic_thermal +intel_bxtwc_tmu +intel_cht_int33fe +intel_int0002_vgpio +intel_ips +intel_menlow +intel_mid_powerbtn +intel_mid_thermal +intel_oaktrail +intel_pch_thermal +intel_pmc_ipc +intel_powerclamp +intel_punit_ipc +intel_qat +intel_quark_i2c_gpio +intel_rapl +intel_scu_ipcutil +intel_soc_dts_iosf +intel_soc_dts_thermal +intel_soc_pmic_bxtwc +intel_soc_pmic_chtdc_ti +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +intelfb +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +iris +irlan +irnet +irqbypass +irtty-sir +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks0127 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lance +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-adp5520 +leds-apu +leds-as3645a +leds-bd2802 +leds-blinkm +leds-clevo-mail +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-net48xx +leds-nic78bx +leds-ot200 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-ss4200 +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmc +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +logibm +longhaul +longrun +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp8755 +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltpc +ltr501 +ltv350qv +lustre +lv5207lp +lvstest +lxfb +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macb_pci +machzwd +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77693-haptic +max77693-regulator +max77693_charger +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mce-inject +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdacon +mdc +mdc800 +mdev +mdio +mdio-bitbang +mdio-gpio +me4000 +me_daq +media +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mei-me +mei-txe +mei_phy +mei_wdt +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +meye +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microread_mei +microtek +mii +minix +mip6 +mipi-dbi +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxcpld-hotplug +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi-laptop +msi-wmi +msi001 +msi2500 +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxm-wmi +mxser +mxuport +myri10ge +n2 +n411 +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +nettel +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni65 +ni903x_wdt +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_common +ni_labpc_cs +ni_labpc_isadma +ni_labpc_pci +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nic7018_wdt +nicstar +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nosy +notifier-error-inject +nouveau +nozomi +ns558 +ns83820 +nsc-ircc +nsc_gpio +nsh +nsp32 +nsp_cs +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nv_tco +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_xilinx_wdt +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +padlock-aes +padlock-sha +palmas-pwrbutton +palmas-regulator +palmas_gpadc +panasonic-laptop +pandora_bl +panel +panel-raspberrypi-touchscreen +paride +parkbd +parman +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5535 +pata_cs5536 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_isapnp +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pblk +pc110pad +pc300too +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_can +pch_dma +pch_gbe +pch_phub +pch_uart +pch_udc +pci +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmcia +pcmcia_core +pcmcia_rsrc +pcmciamtd +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_pcmcia +peak_usb +peaq-wmi +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +pi433 +pinctrl-broxton +pinctrl-cannonlake +pinctrl-cedarfork +pinctrl-cherryview +pinctrl-denverton +pinctrl-geminilake +pinctrl-intel +pinctrl-lewisburg +pinctrl-mcp23s08 +pinctrl-sunrisepoint +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn544_mei +pn_pep +poly1305_generic +port100 +powermate +powernow-k6 +powernow-k7 +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +processor_thermal_device +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +pti +ptlrpc +ptp +ptp_kvm +ptp_pch +pulse8-cec +pulsedlight-lidar-lite-v2 +punit_atom_debug +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvpanic +pvrusb2 +pwc +pwm-beeper +pwm-cros-ec +pwm-lp3943 +pwm-lpss +pwm-lpss-pci +pwm-lpss-platform +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pxa27x_udc +qat_dh895xcc +qat_dh895xccvf +qca8k +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quatech_daqp_cs +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r82600_edac +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-aimslab +radio-aztech +radio-bcm2048 +radio-cadet +radio-gemtek +radio-i2c-si470x +radio-isa +radio-keene +radio-ma901 +radio-maxiradio +radio-miropcm20 +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-shark +radio-si476x +radio-tea5764 +radio-terratec +radio-timb +radio-trust +radio-typhoon +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +ray_cs +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rds +rds_rdma +rds_tcp +realtek +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-mrst +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20-i586 +salsa20_generic +samsung-keypad +samsung-laptop +samsung-q10 +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbni +sbp_target +sbs +sbs-battery +sbs-charger +sbs-manager +sbshc +sc1200wdt +sc16is7xx +sc92031 +sca3000 +scb2_flash +scc +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scr24x_cs +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_wdt +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdio_uart +sdla +sdricoh_cs +sealevel +sedlbauer_cs +seed +sensorhub +ser_gigaset +serial2002 +serial_cs +serial_ir +serio_raw +sermouse +serpent-sse2-i586 +serpent_generic +serport +ses +sfc +sfc-falcon +sfi-cpufreq +sh_veu +sha3_generic +shark2 +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sil164 +silead +sim710 +sir-dev +sir_ir +sirf-audio-codec +sis-agp +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +sl811_cs +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc-ultra +smc9194 +smc91c92_cs +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1816a +snd-ad1848 +snd-ad1889 +snd-adlib +snd-ak4113 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als100 +snd-als300 +snd-als4000 +snd-asihpi +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt1605 +snd-azt2316 +snd-azt2320 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmi8328 +snd-cmi8330 +snd-cmipci +snd-compress +snd-cs4231 +snd-cs4236 +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emu8000-synth +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1688 +snd-es1688-lib +snd-es18xx +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-gus-lib +snd-gusclassic +snd-gusextreme +snd-gusmax +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-ext-core +snd-hda-intel +snd-hdmi-lpe-audio +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel-sst-acpi +snd-intel-sst-core +snd-intel-sst-pci +snd-intel8x0 +snd-intel8x0m +snd-interwave +snd-interwave-stb +snd-isight +snd-jazz16 +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-miro +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-msnd-classic +snd-msnd-lib +snd-msnd-pinnacle +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-opl3sa2 +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sc6000 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-sis7019 +snd-skl_nau88l25_max98357a +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-acpi +snd-soc-acpi-intel-match +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7213 +snd-soc-da7219 +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdac-hdmi +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kbl_rt5663_max98927 +snd-soc-kbl_rt5663_rt5514_max98927 +snd-soc-max98090 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-nau8825 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rl6347a +snd-soc-rt286 +snd-soc-rt298 +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5651 +snd-soc-rt5663 +snd-soc-rt5670 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-skl +snd-soc-skl-ipc +snd-soc-skl_nau88l25_ssm4567 +snd-soc-skl_rt286 +snd-soc-sn95031 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sst-acpi +snd-soc-sst-atom-hifi2-platform +snd-soc-sst-baytrail-pcm +snd-soc-sst-bdw-rt5677-mach +snd-soc-sst-broadwell +snd-soc-sst-bxt-da7219_max98357a +snd-soc-sst-bxt-rt298 +snd-soc-sst-byt-cht-da7213 +snd-soc-sst-byt-cht-es8316 +snd-soc-sst-bytcr-rt5640 +snd-soc-sst-bytcr-rt5651 +snd-soc-sst-cht-bsw-max98090_ti +snd-soc-sst-cht-bsw-rt5645 +snd-soc-sst-cht-bsw-rt5672 +snd-soc-sst-dsp +snd-soc-sst-firmware +snd-soc-sst-haswell +snd-soc-sst-haswell-pcm +snd-soc-sst-ipc +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-sscape +snd-tea6330t +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-us122l +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +snic +snps_udc_core +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-btf-mpx +sony-laptop +sonypi +soundcore +sp2 +sp5100_tco +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntpc +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_decpc +speakup_dectlk +speakup_dtlk +speakup_dummy +speakup_keypc +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +spectrum_cs +speedfax +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-topcliff-pch +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +ssv_dnp +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +stx104 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3-wmi +surface3_button +surface3_spi +surfacepro3_button +svgalib +switchtec +sworks-agp +sx8 +sx8654 +sx9500 +sym53c416 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1isa +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc1100-wmi +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcic +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teles_cs +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thinkpad_acpi +thmc50 +thunderbolt +thunderbolt-net +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-dac082s085 +ti-lmu +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timb_dma +timberdale +timbuart +timeriomem-rng +tinydrm +tipc +tlan +tlclk +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmem +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +topstar-laptop +torture +toshiba_acpi +toshiba_bluetooth +toshiba_haps +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_nsc +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tscan1 +tsi568 +tsi57x +tsi721_mport +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish-i586 +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +uPD98402 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_hv_generic +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +usnic_verbs +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vboxguest +vboxsf +vboxvideo +vcan +vcnl4000 +veml6070 +ves1820 +ves1x93 +veth +vfio +vfio-pci +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-camera +via-cputemp +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via686a +via_wdt +viafb +video +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videocodec +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_ca91cx42 +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmw_pvrdma +vmw_pvscsi +vmw_vmci +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmw_vsock_vmci_transport +vmwgfx +vmxnet3 +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vpx3220 +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +wafer5823wdt +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd +wd719x +wdat_wdt +wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +winbond-cir +wire +wishbone-serial +wistron_btns +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlcore +wlcore_sdio +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wmi +wmi-bmof +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x38_edac +x86_pkg_temp_thermal +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-hwmon +xgifb +xhci-plat-hcd +xilinx-spi +xilinx_gmii2rgmii +xillybus_core +xillybus_pcie +xirc2ps_cs +xircom_cb +xor +xpad +xr_usb_serial_common +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z3fold +z85230 +zatm +zaurus +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +zpa2326 +zpa2326_i2c +zpa2326_spi +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zstd_compress +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/lowlatency +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/lowlatency @@ -0,0 +1,22571 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_pending_timer +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_cb_base +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_base +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x00000000 scx200_gpio_shadow +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_get_levels +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_handles_brightness_key_presses +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_register +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_set_dmi_backlight_type +EXPORT_SYMBOL drivers/acpi/video 0x00000000 acpi_video_unregister +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x00000000 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_read +EXPORT_SYMBOL drivers/char/nsc_gpio 0x00000000 nsc_gpio_write +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 __nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x00000000 nvram_write_byte +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/firmware/dcdbas 0x00000000 dcdbas_smi_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x00000000 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_match_acpi_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x00000000 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x00000000 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_register +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_remove +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_resume +EXPORT_SYMBOL drivers/mfd/cros_ec_core 0x00000000 cros_ec_suspend +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_pci_cfg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_read +EXPORT_SYMBOL drivers/misc/mei/mei 0x00000000 __tracepoint_mei_reg_write +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 NS8390p_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x00000000 eip_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_init +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x00000000 z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x00000000 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x00000000 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x00000000 pccard_static_ops +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_io_bytes_mec +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_destroy +EXPORT_SYMBOL drivers/platform/chrome/cros_ec_lpcs 0x00000000 cros_ec_lpc_mec_init +EXPORT_SYMBOL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_simple_command +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x00000000 sony_pic_camera_command +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 __wmi_driver_register +EXPORT_SYMBOL drivers/platform/x86/wmi 0x00000000 wmi_driver_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_control_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_control_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_event_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_ch_event_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_rx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_set_station_address +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_src_uuid_hi_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_src_uuid_lo_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x00000000 pch_tx_snap_read +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_detect +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_intr +EXPORT_SYMBOL drivers/scsi/53c700 0x00000000 NCR_700_release +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_host_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x00000000 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_art +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_parse_trt +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_add +EXPORT_SYMBOL drivers/thermal/int340x_thermal/acpi_thermal_rel 0x00000000 acpi_thermal_rel_misc_device_remove +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_find_mode +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/fbdev/macmodes 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_start +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x00000000 iTCO_vendor_pre_stop +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_create +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_read +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x00000000 snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x00000000 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x00000000 snd_tea6330t_detect +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x00000000 snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_create +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_pcm +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x00000000 snd_es1688_reset +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_delay +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x00000000 snd_gus_use_inc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x00000000 snd_msndmix_setup +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0x00000000 snd_aci_cmd +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0x00000000 snd_aci_get_aci +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x00000000 snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x00000000 snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x00000000 snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x00000000 snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_interrupt +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mce_down +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_overrange +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x00000000 snd_wss_timer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x00000000 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_free +EXPORT_SYMBOL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dma_new +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_bm_status +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_label +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_pciaddr +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_temperature +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_get_version +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_register_event_notifier +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_reset +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_otprotect +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_set_wmode +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_submit_pbio +EXPORT_SYMBOL ubuntu/hio/hio 0x00000000 ssd_unregister_event_notifier +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuestIDC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertAreQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg1Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Add +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2AddWeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2V +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2Weak +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertMsg2WeakV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetMayPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertSetQuiet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTAssertShouldPanic +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertFromErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTErrConvertToErrno +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogBackdoorPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogClearFileDelayFlag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCloneRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogComPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogCreateExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogDumpPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlush +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushRC +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFlushToLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetDestinations +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetFlags +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGetGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogGroupSettings +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelGetDefaultInstanceEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLogger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelLoggerV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogRelSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetBuffering +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetCustomPrefixCallback +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstance +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogSetDefaultInstanceThread +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteCom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteDebugger +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdErr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteStdOut +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTLogWriteUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemAllocZVarTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContAlloc +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemContFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemDupTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemExecFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemFreeEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemReallocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpAllocZTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMemTmpFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdFromSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCpuIdToSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpCurSetIndexAndId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetMaxCpuId +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetOnlineSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCoreCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentCount +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetPresentSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpGetSet +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuOnline +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuPresent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpIsCpuWorkPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAll +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnAllIsConcurrentSafe +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnOthers +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPair +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnPairIsConcurrentExecSupported +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpOnSpecific +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTMpPokeCpu +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerNotificationRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTPowerSignalEvent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTProcSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0AssertPanicSystem +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Init +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemAreKrnlAndUsrDifferent +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemExecDonate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemKernelIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddress +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAddressR3 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocContTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocLowTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPageTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysNCTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjAllocPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjEnterPhysTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjFree +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjGetPagePhysAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjIsMapping +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjLockUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelExTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjMapUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjProtect +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveKernelTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjReserveUserTag +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemObjSize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyFrom +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserCopyTo +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0MemUserIsValidAddr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0ProcHandleSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTR0Term +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiGetResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventMultiWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitExDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemEventWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemFastMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexIsOwned +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemMutexRequestNoResumeDebug +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSemSpinMutexTryRequest +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockAcquire +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTSpinlockRelease +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrConvertHexBytes +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrCopyP +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormat +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatNumber +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeDeregister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeRegister +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatTypeSetUser +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrFormatV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfExV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrPrintfV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt16Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt32Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt64Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Ex +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTStrToUInt8Full +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreate +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateF +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadCreateV +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadFromNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetNative +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadGetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInInterrupt +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsInitialized +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsMain +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfAlive +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadIsSelfKnown +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadNativeSelf +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptDisable +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsEnabled +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPending +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPendingTrusty +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptIsPossible +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadPreemptRestore +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSelfName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetName +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSetType +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleep +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadSleepNoLog +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserReset +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserSignal +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadUserWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWait +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadWaitNoResume +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTThreadYield +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeExplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeImplode +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeIsLeapYear +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNormalize +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeNow +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecFromString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSpecToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemMilliTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeSystemNanoTS +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimeToString +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCanDoHighResolution +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerChangeInterval +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerCreateEx +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerDestroy +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerGetSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerReleaseSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerRequestSystemGranularity +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStart +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_RTTimerStop +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertExpr +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFile +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_pszRTAssertFunction +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg1 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_szRTAssertMsg2 +EXPORT_SYMBOL ubuntu/vbox/vboxguest/vboxguest 0x00000000 VBoxGuest_g_u32RTAssertLine +EXPORT_SYMBOL vmlinux 0x00000000 EISA_bus +EXPORT_SYMBOL vmlinux 0x00000000 IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___preempt_schedule +EXPORT_SYMBOL vmlinux 0x00000000 ___preempt_schedule_notrace +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __acpi_handle_debug +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cachemode2pte_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __const_udelay +EXPORT_SYMBOL vmlinux 0x00000000 __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x00000000 __copy_user_ll +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __div64_32 +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fentry__ +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_is_locked_down +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __kunmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __max_logical_packages +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __preempt_count +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte2cachemode_tbl +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_1 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_2 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_4 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_8 +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __pv_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __stack_chk_fail +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_eax +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ebp +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ebx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_ecx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_edi +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_edx +EXPORT_SYMBOL vmlinux 0x00000000 __x86_indirect_thunk_esi +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_acquire_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_attach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_buffer_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_scan +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_region +EXPORT_SYMBOL vmlinux 0x00000000 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0x00000000 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_detach_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_found +EXPORT_SYMBOL vmlinux 0x00000000 acpi_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_hid +EXPORT_SYMBOL vmlinux 0x00000000 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_all_wakeup_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x00000000 acpi_error +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_dsm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_ost +EXPORT_SYMBOL vmlinux 0x00000000 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x00000000 acpi_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_execute_simple_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_extract_package +EXPORT_SYMBOL vmlinux 0x00000000 acpi_finish_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_data_full +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_devices +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_name +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_possible_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_type +EXPORT_SYMBOL vmlinux 0x00000000 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x00000000 acpi_gpe_count +EXPORT_SYMBOL vmlinux 0x00000000 acpi_handle_printk +EXPORT_SYMBOL vmlinux 0x00000000 acpi_has_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_info +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_gpe_raw_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_method +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x00000000 acpi_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_map_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mark_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_mask_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x00000000 acpi_match_platform_list +EXPORT_SYMBOL vmlinux 0x00000000 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_execute +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_get_line +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_printf +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x00000000 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x00000000 acpi_osi_is_win8 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0x00000000 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x00000000 acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x00000000 acpi_put_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read +EXPORT_SYMBOL vmlinux 0x00000000 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_register +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reconfig_notifier_unregister +EXPORT_SYMBOL vmlinux 0x00000000 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x00000000 acpi_release_mutex +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_sci_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x00000000 acpi_reset +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0x00000000 acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0x00000000 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x00000000 acpi_run_osc +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe +EXPORT_SYMBOL vmlinux 0x00000000 acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0x00000000 acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_install_and_load_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_tb_unload_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unmap_cpu +EXPORT_SYMBOL vmlinux 0x00000000 acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0x00000000 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x00000000 acpi_video_backlight_string +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resource_buffer +EXPORT_SYMBOL vmlinux 0x00000000 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x00000000 acpi_warning +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write +EXPORT_SYMBOL vmlinux 0x00000000 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 apm_info +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_dma_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_free_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_io_reserve_memtype_wc +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_add +EXPORT_SYMBOL vmlinux 0x00000000 arch_phys_wc_del +EXPORT_SYMBOL vmlinux 0x00000000 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_add_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_add_unless_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_dec_if_positive_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_dec_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_inc_not_zero_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_inc_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_read_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_set_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_sub_return_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic64_xchg_cx8 +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x00000000 boot_option_idle_override +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clk_add_alias +EXPORT_SYMBOL vmlinux 0x00000000 clk_bulk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get +EXPORT_SYMBOL vmlinux 0x00000000 clk_get_sys +EXPORT_SYMBOL vmlinux 0x00000000 clk_hw_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clk_put +EXPORT_SYMBOL vmlinux 0x00000000 clk_register_clkdev +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_add +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_drop +EXPORT_SYMBOL vmlinux 0x00000000 clkdev_hw_alloc +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 cmos_lock +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 contig_page_data +EXPORT_SYMBOL vmlinux 0x00000000 convert_art_to_tsc +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_current_top_of_stack +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_dr7 +EXPORT_SYMBOL vmlinux 0x00000000 cpu_info +EXPORT_SYMBOL vmlinux 0x00000000 cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 cpu_number +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tlbstate +EXPORT_SYMBOL vmlinux 0x00000000 cpu_tss_rw +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_check_result +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_cmd_xfer_status +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_host_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_get_next_event +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_prepare_tx +EXPORT_SYMBOL vmlinux 0x00000000 cros_ec_query_all +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_task +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_idle +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_clk_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_get_clk_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 div64_s64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64 +EXPORT_SYMBOL vmlinux 0x00000000 div64_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 div_s64_rem +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_alloc_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x00000000 dma_mmap_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dma_release_from_dev_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x00000000 dmi_check_system +EXPORT_SYMBOL vmlinux 0x00000000 dmi_find_device +EXPORT_SYMBOL vmlinux 0x00000000 dmi_first_match +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_date +EXPORT_SYMBOL vmlinux 0x00000000 dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x00000000 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_rdpmc +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_read_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_trace_write_msr +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ec_get_handle +EXPORT_SYMBOL vmlinux 0x00000000 ec_read +EXPORT_SYMBOL vmlinux 0x00000000 ec_transaction +EXPORT_SYMBOL vmlinux 0x00000000 ec_write +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 efi +EXPORT_SYMBOL vmlinux 0x00000000 eisa_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 eisa_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_clear_fs +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_default +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_ext +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_rdmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_refcount +EXPORT_SYMBOL vmlinux 0x00000000 ex_handler_wrmsr_unsafe +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 first_ec +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_iova_mem +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_pm_trace +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_cpu_entry_area +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_ibs_caps +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 gnttab_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x00000000 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_get +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_command +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_i2c_cntrl +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_readv +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_simple_command +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_update_register +EXPORT_SYMBOL vmlinux 0x00000000 intel_scu_ipc_writev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_cache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wt +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_available +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_call_pmic_bus_access_notifier_chain +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_modify +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_acquire +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_punit_release +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_read +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_register_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_unregister_pmic_bus_access_notifier +EXPORT_SYMBOL vmlinux 0x00000000 iosf_mbi_write +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmi_dmi_get_slave_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_domain_set_info +EXPORT_SYMBOL vmlinux 0x00000000 irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_data_node +EXPORT_SYMBOL vmlinux 0x00000000 is_acpi_device_node +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_present +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x00000000 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 ist_info +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmap +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic +EXPORT_SYMBOL vmlinux 0x00000000 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x00000000 kmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kmap_to_page +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kunmap +EXPORT_SYMBOL vmlinux 0x00000000 kunmap_high +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 legacy_pic +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 machine_real_restart +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x00000000 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 max_mapnr +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_map +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memset64 +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 msrs_alloc +EXPORT_SYMBOL vmlinux 0x00000000 msrs_free +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 native_io_delay +EXPORT_SYMBOL vmlinux 0x00000000 native_queued_spin_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_address +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_mem_start +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_find_card +EXPORT_SYMBOL vmlinux 0x00000000 pnp_find_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x00000000 pnp_is_active +EXPORT_SYMBOL vmlinux 0x00000000 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0x00000000 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x00000000 pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0x00000000 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x00000000 pnpbios_protocol +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 preempt_schedule +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_mask +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_off +EXPORT_SYMBOL vmlinux 0x00000000 probe_irq_on +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 processors +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_irq_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x00000000 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queued_read_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 queued_write_lock_slowpath +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 rdmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 restore_processor_state +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x00000000 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 save_processor_state +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_memory_x +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_nx +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_uc +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_wb +EXPORT_SYMBOL vmlinux 0x00000000 set_pages_x +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_trace_device +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sfi_disabled +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_num_siblings +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tboot +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 this_cpu_off +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 topology_phys_to_logical_pkg +EXPORT_SYMBOL vmlinux 0x00000000 totalhigh_pages +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsc_khz +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_as_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strncmp +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strnlen +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_strsize +EXPORT_SYMBOL vmlinux 0x00000000 ucs2_utf8size +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_client_probe_defer +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_fini_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_handler_flags +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_ops +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_init_domain_pm_optimus_hdmi_audio +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_lock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_set_dynamic_switch +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unlock_ddc +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x00000000 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 wrmsrl_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 x86_apple_machine +EXPORT_SYMBOL vmlinux 0x00000000 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_acpiid +EXPORT_SYMBOL vmlinux 0x00000000 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x00000000 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0x00000000 x86_hyper_type +EXPORT_SYMBOL vmlinux 0x00000000 x86_match_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xen_alloc_p2m_entry +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_register_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x00000000 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x00000000 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x00000000 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x00000000 xen_selfballoon_init +EXPORT_SYMBOL vmlinux 0x00000000 xen_vcpu_id +EXPORT_SYMBOL vmlinux 0x00000000 xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x00000000 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x00000000 crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_crypt_128bit_one +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x00000000 glue_xts_req_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x00000000 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x00000000 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_incomplete_ipi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_avic_unaccelerated_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_fast_mmio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pi_irte_update +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_ple_window +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_pml_full +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __tracepoint_kvm_write_tsc_offset +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 __x86_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 cpuid_query_maxphyaddr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 handle_mmio_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_match_dest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_set_eoi_accelerated +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_update_ppr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_apic_write_nodecode +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_end_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_assigned_device +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_has_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_register_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_start_assignment +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_arch_unregister_noncoherent_dma +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_default_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_in +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dirty_log_protect +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_handle_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_ept_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_intr_is_single_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_expired_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_find_highest_irr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_hv_timer_in_use +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_read +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_reg_write +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_hv_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lapic_switch_to_sw_timer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_max_tsc_scaling_ratio +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mce_cap_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_clear_dirty_pt_masked +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_largepage_remove_write_access +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_leaf_clear_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_slot_set_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_sync_roots +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mpx_supported +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_mtrr_valid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_no_apic_vcpu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_register_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_page_track_unregister_notifier +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_read_l1_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_require_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_scale_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msi_irq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_skip_emulated_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_add_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_slot_page_track_remove_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_tsc_scaling_ratio_frac_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_valid_efer +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_is_reset_bsp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_reload_apic_access_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_vector_hashing_enabled +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 pdptrs_changed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_fixed_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reprogram_gp_counter +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 reset_shadow_zero_bits_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00000000 x86_set_memory_region +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 __ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_decrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_encrypt +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_exit +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_init_common +EXPORT_SYMBOL_GPL crypto/ablk_helper 0x00000000 ablk_set_key +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_create_compat +EXPORT_SYMBOL_GPL crypto/crypto_simd 0x00000000 simd_skcipher_free +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x00000000 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x00000000 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0x00000000 scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_enqueue_cmd +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_present +EXPORT_SYMBOL_GPL drivers/crypto/ccp/ccp 0x00000000 ccp_version +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_add_key_value_param +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_dev_remove +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cfg_section_add +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_clean_vf_map +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_cleanup_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_get +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_in_use +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_put +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_start +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_started +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_dev_stop +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_add_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_in_reset +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_pci_to_accel_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_rm_dev +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_devmgr_update_class_index +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_disable_sriov +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_aer +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_enable_vf2pf_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_exit_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_admin_comms +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_arb +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_init_etr_data +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_iov_putmsg +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_flr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_reset_sbr +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_send_admin_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_sriov_configure +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_init +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf2pf_shutdown +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_alloc +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 adf_vf_isr_resource_free +EXPORT_SYMBOL_GPL drivers/crypto/qat/qat_common/intel_qat 0x00000000 qat_crypto_dev_config +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_do_irq +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_get_status +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/hsu/hsu_dma 0x00000000 hsu_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0x00000000 amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x00000000 pp_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_clear +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_isset +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_set +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_set_irq +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x00000000 cs5535_gpio_setup_event +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x00000000 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __hv_pkt_iter_next +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_pkt_iter_first +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 hv_ringbuffer_get_debuginfo +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_allocate_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_are_subchannels_present +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_connection +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_free_mmio +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_get_outgoing_channel +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_hvsock_device_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_proto_version +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_send_tl_connect_request +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_mpb_desc +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_chn_rescind_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_set_sc_create_callback +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_setevent +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x00000000 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x00000000 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_motion_send_host_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_capture +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_init +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_read +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_core_write +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_ext_info +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_cmd +EXPORT_SYMBOL_GPL drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core 0x00000000 cros_ec_sensors_read_lpc +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_pin_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_pin_changed +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_match +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_pnp_probe +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_pnp_remove +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_probe +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x00000000 radio_isa_remove +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_prepare +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_probe +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_remove +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_resume +EXPORT_SYMBOL_GPL drivers/mfd/intel-lpss 0x00000000 intel_lpss_suspend +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 __mei_cldev_driver_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cancel_work +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_disable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_driver_unregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enable +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_enabled +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_get_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_recv_nonblock +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_notif_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_register_rx_cb +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_send +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_set_drvdata +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_uuid +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_cldev_ver +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_deregister +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_device_init +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_fw_status2str +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_hbm_pg_resume +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_compl_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_read_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_irq_write_handler +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_register +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_reset +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_restart +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_start +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_stop +EXPORT_SYMBOL_GPL drivers/misc/mei/mei 0x00000000 mei_write_is_idle +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_release_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_request_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x00000000 pti_writedata +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_context_get_priv_flags +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_create_handle_priv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_destroy_handle +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_datagram_send +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_create +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_destroy +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_doorbell_notify +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_subscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_get_context_id +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_is_context_owner +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_alloc +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_consume_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequeue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_dequev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_detach +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enqueue +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_enquev +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_consume_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_get_produce_indexes +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peek +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_peekv +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_buf_ready +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_qpair_produce_free_space +EXPORT_SYMBOL_GPL drivers/misc/vmw_vmci/vmw_vmci 0x00000000 vmci_send_datagram +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_mcc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_object +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_pwr_limit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_acpi_get_wifi_pkg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 mei_phy_ops +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_alloc +EXPORT_SYMBOL_GPL drivers/nfc/mei_phy 0x00000000 nfc_mei_phy_free +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_probe +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_resume +EXPORT_SYMBOL_GPL drivers/pinctrl/intel/pinctrl-intel 0x00000000 intel_pinctrl_suspend +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x00000000 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-laptop 0x00000000 dell_micmute_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_register +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-rbtn 0x00000000 dell_rbtn_notifier_unregister +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_call_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_register_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_laptop_unregister_notifier +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_call_filter +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_error +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_find_token +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_register_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-smbios 0x00000000 dell_smbios_unregister_device +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_descriptor_valid +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_hotfix +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_interface_version +EXPORT_SYMBOL_GPL drivers/platform/x86/dell-wmi-descriptor 0x00000000 dell_wmi_get_size +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x00000000 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_update +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_gcr_write +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_raw_cmd +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_ipc_simple_command +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_pmc_ipc 0x00000000 intel_pmc_s0ix_counter_read +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_punit_ipc 0x00000000 intel_punit_ipc_command +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x00000000 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/thinkpad_acpi 0x00000000 tpacpi_led_set +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 set_required_buffer_size +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_block_query +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x00000000 wmidev_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_probe +EXPORT_SYMBOL_GPL drivers/pwm/pwm-lpss 0x00000000 pwm_lpss_remove +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_pcmcia_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pcmcia 0x00000000 comedi_to_pcmcia_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_read_trips +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_add +EXPORT_SYMBOL_GPL drivers/thermal/int340x_thermal/int340x_thermal_zone 0x00000000 int340x_thermal_zone_remove +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_add_read_only_critical_trip +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_exit +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_init +EXPORT_SYMBOL_GPL drivers/thermal/intel_soc_dts_iosf 0x00000000 intel_soc_dts_iosf_interrupt_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 __tb_ring_enqueue +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_data +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_immediate +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_add_text +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_create_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_find +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_free_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_get_next +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_property_remove +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_register_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_rx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_alloc_tx +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_free +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_poll_complete +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_start +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_ring_stop +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_service_type +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_property_dir +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_protocol_handler +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_unregister_service_driver +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_disable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_enable_paths +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_find_by_uuid +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_request +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_response +EXPORT_SYMBOL_GPL drivers/thunderbolt/thunderbolt 0x00000000 tb_xdomain_type +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x00000000 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/vermilion/vmlfb 0x00000000 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/fbdev/via/viafb 0x00000000 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x00000000 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compr_stop_error +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x00000000 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_register +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hda_ext_driver_unregister +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_device_remove +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_exit +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_link +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_get_ml_capabilities +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_get +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_down_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_power_up_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_link_put +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_bus_ppcap_int_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_clear_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_set_stream_id +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_clear +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_reset +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_setup +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_link_stream_start +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stop_streams +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_assign +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_decouple +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_drsm_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_get_spbmaxfifo +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_init_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_release +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_dpibr +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_lpib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_set_spib +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_ext_stream_spbcap_enable +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_link_free_all +EXPORT_SYMBOL_GPL sound/hda/ext/snd-hda-ext-core 0x00000000 snd_hdac_stream_free_all +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_acomp_get_eld +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_display_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_register_notifier +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_i915_set_bclk +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_set_codec_wakeup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_sync_audio_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-da7219 0x00000000 da7219_aad_jack_det +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-hdac-hdmi 0x00000000 hdac_hdmi_jack_port_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98090 0x00000000 max98090_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8825 0x00000000 nau8825_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6347a 0x00000000 rl6347a_hw_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt286 0x00000000 rt286_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt298 0x00000000 rt298_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5514-spi 0x00000000 rt5514_spi_burst_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_dmic_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5640 0x00000000 rt5640_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5651 0x00000000 rt5651_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5663 0x00000000 rt5663_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_jack_suspend +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5670 0x00000000 rt5670_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677 0x00000000 rt5677_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_read +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5677-spi 0x00000000 rt5677_spi_write_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sn95031 0x00000000 sn95031_jack_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform 0x00000000 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 intel_sst_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 relocate_imr_addr_mrfld +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_alloc_drv_context +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_configure_runtime_pm +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/atom/sst/snd-intel-sst-core 0x00000000 sst_context_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_suspend_late +EXPORT_SYMBOL_GPL sound/soc/intel/baytrail/snd-soc-sst-baytrail-pcm 0x00000000 sst_byt_dsp_wait_for_ready +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_legacy_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_baytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_broadwell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_cherrytrail_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-acpi-intel-match 0x00000000 snd_soc_acpi_intel_haswell_machines +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_boot +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_dump +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_inbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_rx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_ipc_msg_tx +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_mailbox_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_outbox_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_register_poll +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_reset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_read_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_forced_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_update_bits_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write64_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_shim_write_unlocked +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_stall +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_fromio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_memcpy_toio_32 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_read64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-dsp 0x00000000 sst_shim32_write64 +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_alloc_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_block_free_scratch +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyfrom +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_copyto +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_get_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_dma_put_channel +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_get_offset +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_dsp_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_free_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_reload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_fw_unload +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_register +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_mem_block_unregister_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_alloc_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_free_blocks +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_get_from_id +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_new +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_restore +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-firmware 0x00000000 sst_module_runtime_save +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_drop_all +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_fini +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_init +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_reply_find_msg +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nopm +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_nowait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_message_wait +EXPORT_SYMBOL_GPL sound/soc/intel/common/snd-soc-sst-ipc 0x00000000 sst_ipc_tx_msg_reply_complete +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_device_set_config +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/haswell/snd-soc-sst-haswell-pcm 0x00000000 sst_hsw_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 bxt_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 cnl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 is_skl_dsp_running +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 kbl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_clear_module_cnt +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_free +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_get_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_put_core +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_sleep +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_dsp_wake +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_get_pvt_instance_id_map +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_bind_unbind +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_create_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_delete_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_get_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_init_instance +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_load_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_restore_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_save_pipeline +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_d0ix +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_dx +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_large_config +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_set_pipeline_state +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_ipc_unload_modules +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_put_pvt_id +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_cleanup +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_dsp_init +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_init_fw +EXPORT_SYMBOL_GPL sound/soc/intel/skylake/snd-soc-skl-ipc 0x00000000 skl_sst_ipc_load_library +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_check_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_codec_list +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_machine +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_name_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-acpi 0x00000000 snd_soc_acpi_find_package_from_hid +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_compress +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_dmi_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_load +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_component_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_bind_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_tplg_widget_remove_all +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __acpi_node_get_property_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clear_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clk_mux_determine_rate_closest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fill_rsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ibp_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __intel_mid_cpu_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ktime_divns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_extlog_mem_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tss_limit_invalid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __unwind_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_attach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_detach_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_get_private_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_register_early_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_create_platform_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_data_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_filter_resource_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_dma_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_irq_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_gpio_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fix_up_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_device_update_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_deconfigure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_request_slave_chan_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_driver_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpio_get_irq_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_free_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gpiochip_request_interrupts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_has_watchdog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_initialize_hp_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_pnp_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_free_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_get_conversion_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_raw_to_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_lpat_temp_to_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_iomem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_bridge_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_set_device_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_processor_get_performance_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_acquire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_scan_lock_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_set_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_subsys_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_target_system_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unbind_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpi_walk_dep_device_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_register_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acpiphp_unregister_attention +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alternatives_patched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_df_indirect_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_get_nodes_per_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_has_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_misc_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_nb_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 amd_smn_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_enable_cmcff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_apei_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_phys_wc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpu_physical_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clear_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_bulk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_debugfs_add_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_divider_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_fractional_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_gpio_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_has_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_num_parents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_parent_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_hw_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_is_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_multiplier_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_mux_ro_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_divider_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fixed_rate_with_accuracy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_fractional_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_gpio_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_register_mux_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_max_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_min_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_phase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_set_rate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_divider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_factor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_fixed_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_gate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clk_unregister_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clkdev_hw_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copy_reserved_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_mem_err_type_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_has_xfeatures +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_poll_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_cpu_present_to_apicid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_add_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dev_remove_driver_gpios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_acpi_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_hw_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_get_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_recalc_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 divider_round_rate_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_memdev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 e820__mapped_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edid_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_capsule_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_iter_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_get_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_set_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_entry_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_run_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_sysfs_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_variable_is_removable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivar_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_kobject +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_sysfs_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 efivars_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 events_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ex_handler_fprestore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpstate_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu__save +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fpu_kernel_xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_iova_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_scattered_cpuid_leaf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_xsave_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_foreach_grant_in_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_setup_auto_xlat_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gnttab_unmap_refs_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_hypercall_pg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_is_hypercall_page_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_remove_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_crash_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_kexec_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_setup_vmbus_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hv_vp_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_cs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hyperv_report_panic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_find_bus_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_acpi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_iova_flush_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 injectm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_irq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_msic_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pmc_slp_s0_counter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_pt_handle_vmx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_devices_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_devices_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_ipc_raw_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_scu_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_bind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_is_pasid_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 intel_svm_unbind_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ioremap_uc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iova_cache_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_ack_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_disable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_enable_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_eoi_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_mask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_affinity_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_set_type_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_chip_unmask_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_alloc_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_create_hierarchy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_irqs_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_pop_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_push_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_reset_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_set_hwirq_and_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqd_cfg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_fpu_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_stack_pointer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_para_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_posted_intr_wakeup_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_direct_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 load_fixmap_gdt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 local_touch_nmi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_inject_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_is_memory_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_register_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mce_unregister_injector_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mcsafe_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mxcsr_feature_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 node_to_amd_nb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pm_clk_add_clks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 osc_pc_lpi_support_confirmed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pat_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcc_mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_create_irq_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_set_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_assign_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgprot_writethrough +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_alloc_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_msi_domain_free_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_thermal_package_rate_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_remove_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_clk_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_trace_rtc_abused +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pmc_atom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_schedule_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptdump_walk_pgd_level_debugfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_iova_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_get_pvti_cpu0_va +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 queue_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_iova +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_foreign_p2m_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_decrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_memory_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_pages_array_wt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_mrtc_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slow_virt_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_banks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smca_get_long_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 umc_normaddr_to_sysaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_get_return_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unwind_next_frame +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vrtc_cmos_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vrtc_cmos_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_family +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_model +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_stepping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x86_vector_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_balloon_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_evtchn_nr_channels +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_and_legacy_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_disk_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_has_pv_nic_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_max_p2m_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_p2m_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_hotplug_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pcpu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_rebind_evtchn_to_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_remap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_resume_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_set_irq_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unmap_domain_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_map_ballooned_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_remap_gfn_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xen_xlate_unmap_gfn_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_read_unsigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/lowlatency.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/lowlatency.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/i386/lowlatency.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/i386/lowlatency.modules @@ -0,0 +1,5266 @@ +104-quad-8 +3c509 +3c515 +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +53c700 +6lowpan +6pack +8021q +8139cp +8139too +8250_accent +8250_boca +8250_dw +8250_exar +8250_exar_st16c554 +8250_fourport +8250_hub6 +8250_lpss +8250_men_mcb +8250_mid +8250_moxa +8255 +8255_pci +8390 +8390p +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +9pnet_xen +BusLogic +DAC960 +NCR53c406a +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acer-wmi +acerhdf +acp_audio_dma +acpi-als +acpi_configfs +acpi_extlog +acpi_ipmi +acpi_pad +acpi_power_meter +acpi_thermal_rel +acpiphp_ibm +acquirewdt +act200l-sir +act8865-regulator +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7170 +adv7175 +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +advantechwdt +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-i586 +aes_ti +aesni-intel +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +airspy +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-agp +ali-ircc +alienware-wmi +alim1535_wdt +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +ambassador +amc6821 +amd +amd-rng +amd-xgbe +amd5536udc_pci +amd64_edac_mod +amd76x_edac +amd76xrom +amd8111e +amd_freq_sensitivity +amdgpu +amilo-rfkill +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apanel +apds9300 +apds9802als +apds990x +apds9960 +apm +apple-gmux +apple_bl +appledisplay +applesmc +appletalk +appletouch +applicom +aquantia +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcfb +arcmsr +arcnet +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3935 +as5011 +asb100 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +asus-laptop +asus-nb-wmi +asus-wireless +asus-wmi +asus_atk0110 +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati-agp +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avm_cs +avma1_cs +avmfritz +ax25 +ax88179_178a +axnet_cs +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_aout +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpck6 +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +ca8210 +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_das16_cs +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc10001_adc +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccp +ccp-crypto +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +cec-gpio +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipreg +chnl_net +chromeos_laptop +chromeos_pstore +ci_hdrc +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cio-dac +cirrus +cirrusfb +ck804xrom +classmate-laptop +clip +clk-cdce706 +clk-cs2000-cp +clk-palmas +clk-pwm +clk-s2mps11 +clk-si5351 +clk-twl6040 +clk-wm831x +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm36651 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmtp +cnic +cobalt +cobra +coda +com20020 +com20020-isa +com20020-pci +com20020_cs +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_pcmcia +comedi_test +comedi_usb +comm +compal-laptop +contec_pci_dio +cops +cordic +core +coretemp +cortina +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpqphp +cpsw_ale +cpu5wdt +cpuid +cr_bllcd +cramfs +crc-itu-t +crc32-pclmul +crc32_generic +crc4 +crc7 +crc8 +cros_ec_accel_legacy +cros_ec_baro +cros_ec_core +cros_ec_devs +cros_ec_i2c +cros_ec_keyb +cros_ec_light_prox +cros_ec_lpcs +cros_ec_sensors +cros_ec_sensors_core +cros_ec_spi +cros_kbd_led_backlight +crvml +cryptd +crypto_engine +crypto_simd +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +cs5535-mfd +cs553x_nand +cs89x0 +csiostor +ct82c710 +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_cs +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +dell-laptop +dell-rbtn +dell-smbios +dell-smbios-smm +dell-smbios-wmi +dell-smm-hwmon +dell-smo8800 +dell-wmi +dell-wmi-aio +dell-wmi-descriptor +dell-wmi-led +dell_rbu +denali +denali_pci +des_generic +designware_i2s +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard09 +dmard10 +dme1737 +dmfe +dmi-sysfs +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +donauboe +dp83822 +dp83848 +dp83867 +dpt_i2o +dptf_power +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dtl1_cs +dtlk +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwc3-pci +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +e752x_edac +e7xxx_edac +earth-pt1 +earth-pt3 +eata +ebc-c384_wdt +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ec_bhf +ec_sys +ecdh_generic +echainiv +echo +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efficeon-agp +efi-pstore +efi_test +efibc +efs +egalax_ts_serial +ehset +einj +ektf2127 +elan_i2c +elants_i2c +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_pcmcia +ems_usb +emu10k1-gp +ena +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +ene_ir +eni +enic +epat +epia +epic100 +eql +esas2r +esb2rom +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +eurotechwdt +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-intel-cht-wc +extcon-intel-int3496 +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +extcon-usbc-cros-ec +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +f81534 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fdp +fdp_i2c +fealnx +ff-memless +fid +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fjes +fl512 +fld +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +fmvj18x_cs +fnic +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-mgr +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_NCR5380 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +geneve +geode-aes +geode-rng +gf2k +gfs2 +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +glue_helper +gluebi +gma500_gfx +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-104-dio-48e +gpio-104-idi-48 +gpio-104-idio-16 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-amdpt +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-crystalcove +gpio-cs5535 +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-f7188x +gpio-generic +gpio-gpio-mm +gpio-ich +gpio-it87 +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-ml-ioh +gpio-pca953x +gpio-pcf857x +gpio-pch +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-sch +gpio-sch311x +gpio-tpic2810 +gpio-tps65086 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-vx855 +gpio-wcove +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-ws16c48 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gr_udc +grace +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +gx-suspmod +gx1fb +gxfb +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdaps +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +hecubafb +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hgafb +hi311x +hi6210-i2s +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-hyperv +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hinic +hio +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horizon +horus3a +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp-wireless +hp-wmi +hp03 +hp100 +hp206c +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hsi +hsi_char +hso +hsr +hsu_dma +hsu_dma_pci +htc-pasic3 +htcpen +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hv_balloon +hv_netvsc +hv_sock +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hx711 +hx8357 +hyperv-keyboard +hyperv_fb +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd756-s4882 +i2c-amd8111 +i2c-cbus-gpio +i2c-cht-wc +i2c-cros-ec-tunnel +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-eg20t +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-ismt +i2c-kempld +i2c-matroxfb +i2c-mux +i2c-mux-gpio +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-reg +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-scmi +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i3000_edac +i3200_edac +i40e +i40evf +i40iw +i5000_edac +i5100_edac +i5400_edac +i5500_temp +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i915 +iTCO_vendor_support +iTCO_wdt +ib700wdt +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibm_rtl +ibmaem +ibmasm +ibmasr +ibmpex +ibmphp +ichxrom +icp_multi +icplus +ics932s401 +ideapad-laptop +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ie31200_edac +ie6xx_wdt +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int3400_thermal +int3402_thermal +int3403_thermal +int3406_thermal +int340x_thermal_zone +int51x1 +intel-cstate +intel-hid +intel-lpss +intel-lpss-acpi +intel-lpss-pci +intel-mid_wdt +intel-rapl-perf +intel-rng +intel-rst +intel-smartconnect +intel-vbtn +intel-wmi-thunderbolt +intel-xway +intel_bxt_pmic_thermal +intel_bxtwc_tmu +intel_cht_int33fe +intel_int0002_vgpio +intel_ips +intel_menlow +intel_mid_powerbtn +intel_mid_thermal +intel_oaktrail +intel_pch_thermal +intel_pmc_ipc +intel_powerclamp +intel_punit_ipc +intel_qat +intel_quark_i2c_gpio +intel_rapl +intel_scu_ipcutil +intel_soc_dts_iosf +intel_soc_dts_thermal +intel_soc_pmic_bxtwc +intel_soc_pmic_chtdc_ti +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +intelfb +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +iris +irlan +irnet +irqbypass +irtty-sir +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x +itd1000 +ite-cir +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks0127 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lance +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-adp5520 +leds-apu +leds-as3645a +leds-bd2802 +leds-blinkm +leds-clevo-mail +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-net48xx +leds-nic78bx +leds-ot200 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-pwm +leds-regulator +leds-ss4200 +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmc +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +logibm +longhaul +longrun +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp8755 +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltpc +ltr501 +ltv350qv +lustre +lv5207lp +lvstest +lxfb +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macb_pci +machzwd +macmodes +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77693-haptic +max77693-regulator +max77693_charger +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mce-inject +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +mdacon +mdc +mdc800 +mdev +mdio +mdio-bitbang +mdio-gpio +me4000 +me_daq +media +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mei-me +mei-txe +mei_phy +mei_wdt +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +meye +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microread_mei +microtek +mii +minix +mip6 +mipi-dbi +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxcpld-hotplug +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi-laptop +msi-wmi +msi001 +msi2500 +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxm-wmi +mxser +mxuport +myri10ge +n2 +n411 +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct6683 +nct6775 +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +nettel +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni65 +ni903x_wdt +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_common +ni_labpc_cs +ni_labpc_isadma +ni_labpc_pci +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nic7018_wdt +nicstar +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nmclan_cs +nosy +notifier-error-inject +nouveau +nozomi +ns558 +ns83820 +nsc-ircc +nsc_gpio +nsh +nsp32 +nsp_cs +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nuvoton-cir +nv_tco +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nvram +nxp-nci +nxp-nci_i2c +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_xilinx_wdt +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +padlock-aes +padlock-sha +palmas-pwrbutton +palmas-regulator +palmas_gpadc +panasonic-laptop +pandora_bl +panel +panel-raspberrypi-touchscreen +paride +parkbd +parman +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5535 +pata_cs5536 +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_isapnp +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_oldpiix +pata_opti +pata_optidma +pata_pcmcia +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pblk +pc110pad +pc300too +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_can +pch_dma +pch_gbe +pch_phub +pch_uart +pch_udc +pci +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmcia +pcmcia_core +pcmcia_rsrc +pcmciamtd +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_pcmcia +peak_usb +peaq-wmi +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +pi433 +pinctrl-broxton +pinctrl-cannonlake +pinctrl-cedarfork +pinctrl-cherryview +pinctrl-denverton +pinctrl-geminilake +pinctrl-intel +pinctrl-lewisburg +pinctrl-mcp23s08 +pinctrl-sunrisepoint +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn544_mei +pn_pep +poly1305_generic +port100 +powermate +powernow-k6 +powernow-k7 +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_core +pps_parport +pptp +pretimeout_panic +prism2_usb +processor_thermal_device +ps2-gpio +ps2mult +psample +psmouse +psnap +psxpad-spi +pt +pti +ptlrpc +ptp +ptp_kvm +ptp_pch +pulse8-cec +pulsedlight-lidar-lite-v2 +punit_atom_debug +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvcalls-front +pvpanic +pvrusb2 +pwc +pwm-beeper +pwm-cros-ec +pwm-lp3943 +pwm-lpss +pwm-lpss-pci +pwm-lpss-platform +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pxa27x_udc +qat_dh895xcc +qat_dh895xccvf +qca8k +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qemu_fw_cfg +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quatech_daqp_cs +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r82600_edac +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-aimslab +radio-aztech +radio-bcm2048 +radio-cadet +radio-gemtek +radio-i2c-si470x +radio-isa +radio-keene +radio-ma901 +radio-maxiradio +radio-miropcm20 +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-shark +radio-si476x +radio-tea5764 +radio-terratec +radio-timb +radio-trust +radio-typhoon +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +ray_cs +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rds +rds_rdma +rds_tcp +realtek +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-mrst +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20-i586 +salsa20_generic +samsung-keypad +samsung-laptop +samsung-q10 +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sb1000 +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbni +sbp_target +sbs +sbs-battery +sbs-charger +sbs-manager +sbshc +sc1200wdt +sc16is7xx +sc92031 +sca3000 +scb2_flash +scc +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scr24x_cs +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_wdt +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdio_uart +sdla +sdricoh_cs +sealevel +sedlbauer_cs +seed +sensorhub +ser_gigaset +serial2002 +serial_cs +serial_ir +serio_raw +sermouse +serpent-sse2-i586 +serpent_generic +serport +ses +sfc +sfc-falcon +sfi-cpufreq +sh_veu +sha3_generic +shark2 +shpchp +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sil164 +silead +sim710 +sir-dev +sir_ir +sirf-audio-codec +sis-agp +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +sl811_cs +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc-ultra +smc9194 +smc91c92_cs +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1816a +snd-ad1848 +snd-ad1889 +snd-adlib +snd-ak4113 +snd-ak4114 +snd-ak4117 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als100 +snd-als300 +snd-als4000 +snd-asihpi +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt1605 +snd-azt2316 +snd-azt2320 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmi8328 +snd-cmi8330 +snd-cmipci +snd-compress +snd-cs4231 +snd-cs4236 +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emu8000-synth +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1688 +snd-es1688-lib +snd-es18xx +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-gus-lib +snd-gusclassic +snd-gusextreme +snd-gusmax +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-ext-core +snd-hda-intel +snd-hdmi-lpe-audio +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel-sst-acpi +snd-intel-sst-core +snd-intel-sst-pci +snd-intel8x0 +snd-intel8x0m +snd-interwave +snd-interwave-stb +snd-isight +snd-jazz16 +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-miro +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-msnd-classic +snd-msnd-lib +snd-msnd-pinnacle +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-opl3sa2 +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sc6000 +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-sis7019 +snd-skl_nau88l25_max98357a +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-acpi +snd-soc-acpi-intel-match +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-da7213 +snd-soc-da7219 +snd-soc-dio2125 +snd-soc-dmic +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdac-hdmi +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-kbl_rt5663_max98927 +snd-soc-kbl_rt5663_rt5514_max98927 +snd-soc-max98090 +snd-soc-max98357a +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-nau8825 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rl6347a +snd-soc-rt286 +snd-soc-rt298 +snd-soc-rt5514 +snd-soc-rt5514-spi +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5640 +snd-soc-rt5645 +snd-soc-rt5651 +snd-soc-rt5663 +snd-soc-rt5670 +snd-soc-rt5677 +snd-soc-rt5677-spi +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-skl +snd-soc-skl-ipc +snd-soc-skl_nau88l25_ssm4567 +snd-soc-skl_rt286 +snd-soc-sn95031 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sst-acpi +snd-soc-sst-atom-hifi2-platform +snd-soc-sst-baytrail-pcm +snd-soc-sst-bdw-rt5677-mach +snd-soc-sst-broadwell +snd-soc-sst-bxt-da7219_max98357a +snd-soc-sst-bxt-rt298 +snd-soc-sst-byt-cht-da7213 +snd-soc-sst-byt-cht-es8316 +snd-soc-sst-bytcr-rt5640 +snd-soc-sst-bytcr-rt5651 +snd-soc-sst-cht-bsw-max98090_ti +snd-soc-sst-cht-bsw-rt5645 +snd-soc-sst-cht-bsw-rt5672 +snd-soc-sst-dsp +snd-soc-sst-firmware +snd-soc-sst-haswell +snd-soc-sst-haswell-pcm +snd-soc-sst-ipc +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-sscape +snd-tea6330t +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-us122l +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +snic +snps_udc_core +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-btf-mpx +sony-laptop +sonypi +soundcore +sp2 +sp5100_tco +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntpc +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_decpc +speakup_dectlk +speakup_dtlk +speakup_dummy +speakup_keypc +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +spectrum_cs +speedfax +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-topcliff-pch +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +ssv_dnp +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +stx104 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3-wmi +surface3_button +surface3_spi +surfacepro3_button +svgalib +switchtec +sworks-agp +sx8 +sx8654 +sx9500 +sym53c416 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1isa +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc1100-wmi +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcic +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teles_cs +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thinkpad_acpi +thmc50 +thunderbolt +thunderbolt-net +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-dac082s085 +ti-lmu +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timb_dma +timberdale +timbuart +timeriomem-rng +tinydrm +tipc +tlan +tlclk +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmem +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +topstar-laptop +torture +toshiba_acpi +toshiba_bluetooth +toshiba_haps +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_crb +tpm_i2c_atmel +tpm_i2c_infineon +tpm_i2c_nuvoton +tpm_infineon +tpm_nsc +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tscan1 +tsi568 +tsi57x +tsi721_mport +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish-i586 +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +uPD98402 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +ucsi_acpi +uda1342 +udc-core +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_hv_generic +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +usnic_verbs +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vboxguest +vboxsf +vboxvideo +vcan +vcnl4000 +veml6070 +ves1820 +ves1x93 +veth +vfio +vfio-pci +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-camera +via-cputemp +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via686a +via_wdt +viafb +video +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videocodec +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_ca91cx42 +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmw_pvrdma +vmw_pvscsi +vmw_vmci +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmw_vsock_vmci_transport +vmwgfx +vmxnet3 +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vpx3220 +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +wafer5823wdt +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd +wd719x +wdat_wdt +wdt +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +winbond-cir +wire +wishbone-serial +wistron_btns +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlcore +wlcore_sdio +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wmi +wmi-bmof +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x38_edac +x86_pkg_temp_thermal +x_tables +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen-scsiback +xen-scsifront +xen-tpmfront +xen_wdt +xenfs +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgene-hwmon +xgifb +xhci-plat-hcd +xilinx-spi +xilinx_gmii2rgmii +xillybus_core +xillybus_pcie +xirc2ps_cs +xircom_cb +xor +xpad +xr_usb_serial_common +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z3fold +z85230 +zatm +zaurus +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +zpa2326 +zpa2326_i2c +zpa2326_spi +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zstd_compress +zx-tdm --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/ppc64el/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/ppc64el/generic @@ -0,0 +1,21192 @@ +EXPORT_SYMBOL arch/powerpc/platforms/pseries/hvcserver 0x00000000 hvcs_free_connection +EXPORT_SYMBOL arch/powerpc/platforms/pseries/hvcserver 0x00000000 hvcs_free_partner_info +EXPORT_SYMBOL arch/powerpc/platforms/pseries/hvcserver 0x00000000 hvcs_get_partner_info +EXPORT_SYMBOL arch/powerpc/platforms/pseries/hvcserver 0x00000000 hvcs_register_connection +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/atm/suni 0x00000000 suni_init +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_dma_translation +EXPORT_SYMBOL drivers/bcma/bcma 0x00000000 bcma_core_irq +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_register_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_unregister_driver +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x00000000 pi_write_regr +EXPORT_SYMBOL drivers/bluetooth/btbcm 0x00000000 btbcm_patchram +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_addr_src_to_str +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x00000000 ipmi_validate_addr +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_resume +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_pm_suspend +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_probe +EXPORT_SYMBOL drivers/char/tpm/st33zp24/tpm_st33zp24 0x00000000 st33zp24_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_discovery +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_endpoint_remove +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_init_endpoint +EXPORT_SYMBOL drivers/char/xillybus/xillybus_core 0x00000000 xillybus_isr +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x00000000 fw_workqueue +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_register_n_gw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_device_unregister_n +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_register +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_driver_unregister +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_find_sdb_device +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_free_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_gpio_config +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_ack +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_free +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_irq_request +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_read_ee +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_reprogram_raw +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_scan_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_show_sdb_tree +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_validate +EXPORT_SYMBOL drivers/fmc/fmc 0x00000000 fmc_write_ee +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_in +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 __chash_table_copy_out +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_alloc +EXPORT_SYMBOL drivers/gpu/drm/amd/lib/chash 0x00000000 chash_table_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_atomic_state_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_crtc_commit_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_get_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_mm_interval_first +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_printfn_seq_file +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 __drm_set_edid_firmware_path +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 _drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_add_affected_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_check_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_clean_old_fb +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_crtc_set_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_connector_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_crtc_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_plane_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_get_private_obj_state +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_nonblocking_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_normalize_zpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_private_obj_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_crtc_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fb_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_fence_for_plane +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_set_mode_prop_for_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_clear +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_default_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_atomic_state_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_mode_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_post_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_pre_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_color_lut_extract +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_attach_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_begin +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_end +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_list_iter_next +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_connector_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_accurate_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_arm_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_check_viewport +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_enable_color_mgmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_force_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_init_with_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_on +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_vblank_waitqueue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_crtc_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_default_rgb_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_register +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_set_unique +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unplug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_dev_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_display_info_set_bus_formats +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_get_monitor_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_sad +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_edid_to_speaker_allocation +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_cancel_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_event_reserve_init_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_allocate_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_flip_work_queue_task +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_plane_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_framebuffer_unregister_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_create_mmap_offset_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dmabuf_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_get_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_mmap_obj +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_put_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_prime_import_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_put_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_cea_aspect_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_connector_status_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_edid_switcheroo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_format_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_get_subpixel_order_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_avi_infoframe_quant_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_hdmi_vendor_infoframe_from_display_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_commit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_detect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_fixup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_restore +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_i2c_encoder_save +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_invalid_op +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_flags +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_kernel +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_ioctl_permit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_is_current_master +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_filter_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_held +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_lease_owner +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_legacy_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_reserve_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_color_evict +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_init_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_link_status_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_path_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_set_tile_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_aspect_ratio_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_suggested_offset_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_equal_no_clocks_no_stereo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_hv_timing +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_get_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_also +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_is_420_only +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_object_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_plane_set_obj_prop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_put_tile_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_config_internal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_basic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_validate_ycbcr420 +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_fini +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_acquire_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_backoff +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_drop_locks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_all_ctx +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_lock_single_interruptible +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_modeset_unlock_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_component_probe +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_of_find_possible_crtcs +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_attach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_detach +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_panel_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_max_link_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_rotation_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_immutable_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_create_zpos_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_force_disable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_from_index +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printf +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_blob_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_bool +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_create_signed_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_lookup_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_property_replace_global_blob +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_hscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_calc_vscale_relaxed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_clip_scaled +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_debug_print +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_intersect +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rect_rotate_inv +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rgb_quant_range_selectable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_rotation_simplify +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_send_event_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_set_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_state_dump +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_add_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_find_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_get_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_remove_callback +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_syncobj_replace_fence +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_universal_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_allow +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_is_allowed +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_node_revoke +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_lookup_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_manager_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_vma_offset_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_wait_one_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 drm_warn_on_modeset_not_all_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00000000 of_drm_find_panel +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 __drm_atomic_helper_private_obj_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 devm_drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_get_mst_topology_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_async_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_best_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_check_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_cleanup_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_cleanup_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_duplicated_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_hw_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_disables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_modeset_enables +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_commit_tail_rpm +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_connector_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_crtc_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_all +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_disable_planes_on_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_legacy_gamma_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_page_flip_target +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_destroy_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_duplicate_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_plane_reset +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_prepare_planes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_setup_commit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_shutdown +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_swap_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_legacy_modeset_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_update_plane +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_dependencies +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_fences +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_flip_done +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_atomic_helper_wait_for_vblanks +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_atomic_release_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_register +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_aux_unregister +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_calc_pbn_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_check_act_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_debug +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_id +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_bpc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_downstream_max_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_read_link_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dpcd_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_get_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_max_tmds_clock +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_set_tmds_output +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_dual_mode_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_find_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_get_dual_mode_type_name +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_configure +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_down +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_power_up +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_allocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_deallocate_vcpi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_detect_port +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_dump_topology +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_get_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_hpd_irq +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_port_has_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_reset_vcpi_slots +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_resume +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_set_mst +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_mst_topology_mgr_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_psr_setup_time +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_read_desc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_send_power_updown_phy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_start_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_stop_crc +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part1 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_dp_update_payload_part2 +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_add_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_alloc_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_cfb_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_deferred_io +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_modinit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_prepare +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_remove_one_connector +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_restore_fbdev_mode_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_copyarea +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_fillrect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_imageblit +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_sys_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unlink_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_helper_unregister_fbi +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_set_suspend_unlocked +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_handle +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fbdev_fb_create +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_has_preferred_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_crtc_mode_set_base +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_detect +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_get_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_lspcon_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_add +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_panel_bridge_remove +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_pick_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_state +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_check_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_plane_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_funcs +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_primary_helper_update +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_get_scrambling_status +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_read +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_high_tmds_clock_ratio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_set_scrambling +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_scdc_write +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_attach_bridge +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_simple_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 _tinydrm_dbg_spi_message +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 devm_tinydrm_register +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_disable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_prepare_fb +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_display_pipe_update +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_enable_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_lastclose +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_memcpy +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_merge_clips +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_of_find_backlight +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_resume +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_shutdown +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_bpw_supported +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_max_transfer_size +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_spi_transfer +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_suspend +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_swab16 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_gray8 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_xrgb8888_to_rgb565 +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_buf +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_command_read +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_debugfs_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_display_is_on +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_hw_reset +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_init +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_disable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_pipe_enable +EXPORT_SYMBOL drivers/gpu/drm/tinydrm/mipi-dbi 0x00000000 mipi_dbi_spi_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_lookup_for_ref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_add_to_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_default_io_mem_pfn +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_del_sub_from_lru +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_eviction_valuable +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_init_reserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_compat +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_to_lru_tail +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_pipeline_move +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_get_kernel_zone_memory_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_mem_io_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_populate_and_map_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_ref_object_exists +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_unmap_and_unpopulate_pages +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_write_unlock +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x00000000 vid_which_vrm +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x00000000 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x00000000 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x00000000 amd756_smbus +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_probe +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_common_remove +EXPORT_SYMBOL drivers/iio/accel/kxsd9 0x00000000 kxsd9_dev_pm_ops +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_app_reset +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_gpio_config +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_chan +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_accel_scale +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_config_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_status_words +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_read_version +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_device_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_set_power_state +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_sleep +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_update_config_bits +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_byte +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_word +EXPORT_SYMBOL drivers/iio/accel/mma9551_core 0x00000000 mma9551_write_config_words +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_probe +EXPORT_SYMBOL drivers/iio/accel/st_accel 0x00000000 st_accel_common_remove +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_decimation_from_dt +EXPORT_SYMBOL drivers/iio/adc/qcom-vadc-common 0x00000000 qcom_vadc_scale +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 devm_iio_kfifo_free +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/buffer/kfifo_buf 0x00000000 iio_kfifo_free +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_batch_mode_supported +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_convert_timestamp +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_format_scale +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_get_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_poll_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_set_report_latency +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x00000000 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_pm_ops +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_power_state +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x00000000 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_convert_and_read +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_humidity +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_ht_read_temperature +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_prom_word +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_serial +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_read_temp_and_pressure +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_reset +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_battery_low +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_show_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_tp_read_prom +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_heater +EXPORT_SYMBOL drivers/iio/common/ms_sensors/ms_sensors_i2c 0x00000000 ms_sensors_write_resolution +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_change_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_disable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_enable_sensor +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_get_sensor_delay +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/sensorhub 0x00000000 ssp_register_consumer +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postdisable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_buffer_postenable +EXPORT_SYMBOL drivers/iio/common/ssp_sensors/ssp_iio 0x00000000 ssp_common_process_data +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_allocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_check_device_support +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_deallocate_trigger +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_init_sensor +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_of_name_probe +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_disable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_power_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_read_info_raw +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_axis_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_dataready_irq +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_enable +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_fullscale_by_gain +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_set_odr +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_sampling_frequency_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_sysfs_scale_avail +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_trigger_handler +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors 0x00000000 st_sensors_validate_device +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_i2c 0x00000000 st_sensors_i2c_configure +EXPORT_SYMBOL drivers/iio/common/st_sensors/st_sensors_spi 0x00000000 st_sensors_spi_configure +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_probe +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_common_remove +EXPORT_SYMBOL drivers/iio/gyro/mpu3050 0x00000000 mpu3050_dev_pm_ops +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_probe +EXPORT_SYMBOL drivers/iio/gyro/st_gyro 0x00000000 st_gyro_common_remove +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_pm_ops +EXPORT_SYMBOL drivers/iio/humidity/hts221 0x00000000 hts221_probe +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x00000000 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_regmap_config +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_pm_ops +EXPORT_SYMBOL drivers/iio/imu/st_lsm6dsx/st_lsm6dsx 0x00000000 st_lsm6dsx_probe +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 __iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_ns +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_get_time_res +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_set_immutable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_using_own +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_trigger_validate_own_device +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x00000000 of_iio_read_mount_matrix +EXPORT_SYMBOL drivers/iio/industrialio-configfs 0x00000000 iio_configfs_subsys +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_register_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_sw_device_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-device 0x00000000 iio_unregister_sw_device_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_register_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_create +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_sw_trigger_destroy +EXPORT_SYMBOL drivers/iio/industrialio-sw-trigger 0x00000000 iio_unregister_sw_trigger_type +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-event 0x00000000 iio_triggered_event_setup +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_pm_ops +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_probe +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_regmap_config +EXPORT_SYMBOL drivers/iio/magnetometer/bmc150_magn 0x00000000 bmc150_magn_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_remove +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_resume +EXPORT_SYMBOL drivers/iio/magnetometer/hmc5843_core 0x00000000 hmc5843_common_suspend +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_probe +EXPORT_SYMBOL drivers/iio/magnetometer/st_magn 0x00000000 st_magn_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp180_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_probe +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_common_remove +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_dev_pm_ops +EXPORT_SYMBOL drivers/iio/pressure/bmp280 0x00000000 bmp280_regmap_config +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_probe +EXPORT_SYMBOL drivers/iio/pressure/ms5611_core 0x00000000 ms5611_remove +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_probe +EXPORT_SYMBOL drivers/iio/pressure/st_pressure 0x00000000 st_press_common_remove +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x00000000 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 devm_input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x00000000 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x00000000 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x00000000 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x00000000 cma3000_suspend +EXPORT_SYMBOL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_transport_device +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x00000000 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x00000000 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x00000000 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x00000000 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x00000000 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x00000000 mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x00000000 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x00000000 hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x00000000 isacsx_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x00000000 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x00000000 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x00000000 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x00000000 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_log_status +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/common/cx2341x 0x00000000 cx2341x_update +EXPORT_SYMBOL drivers/media/common/cypress_firmware 0x00000000 cypress_load_firmware +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/common/tveeprom 0x00000000 tveeprom_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_free_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_remove_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_ringbuffer_write_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x00000000 intlog2 +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x00000000 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ascot2e 0x00000000 ascot2e_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x00000000 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x00000000 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x00000000 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x00000000 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x00000000 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x00000000 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x00000000 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x00000000 cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x00000000 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24120 0x00000000 cx24120_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x00000000 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x00000000 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2841er 0x00000000 cxd2841er_attach_t_c +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x00000000 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x00000000 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x00000000 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x00000000 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x00000000 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x00000000 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x00000000 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x00000000 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drx39xyj/drx39xyj 0x00000000 drx39xxj_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x00000000 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x00000000 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x00000000 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x00000000 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x00000000 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/helene 0x00000000 helene_attach_s +EXPORT_SYMBOL drivers/media/dvb-frontends/horus3a 0x00000000 horus3a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x00000000 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x00000000 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x00000000 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x00000000 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x00000000 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00000000 l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x00000000 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x00000000 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3306a 0x00000000 lgdt3306a_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x00000000 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x00000000 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbh25 0x00000000 lnbh25_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x00000000 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x00000000 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88ds3103 0x00000000 m88ds3103_get_agc_pwm +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x00000000 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x00000000 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x00000000 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x00000000 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x00000000 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x00000000 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x00000000 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x00000000 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x00000000 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x00000000 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x00000000 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x00000000 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x00000000 s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x00000000 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x00000000 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x00000000 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x00000000 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x00000000 stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x00000000 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x00000000 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x00000000 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x00000000 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ddb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x00000000 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x00000000 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x00000000 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x00000000 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x00000000 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x00000000 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x00000000 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x00000000 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x00000000 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x00000000 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x00000000 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x00000000 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x00000000 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x00000000 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ts2020 0x00000000 ts2020_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00000000 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x00000000 ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x00000000 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_dvb_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/zd1301_demod 0x00000000 zd1301_demod_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x00000000 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x00000000 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x00000000 zl10353_attach +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x00000000 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x00000000 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x00000000 bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x00000000 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x00000000 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x00000000 cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x00000000 altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_riscmem_alloc +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x00000000 cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x00000000 vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x00000000 cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_start_dma +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x00000000 cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x00000000 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x00000000 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x00000000 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_init +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x00000000 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x00000000 soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_enum_freq_bands +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_exit +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_g_tuner +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_hw_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_init +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_s_hw_freq_seek +EXPORT_SYMBOL drivers/media/radio/tea575x 0x00000000 snd_tea575x_set_freq +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_allocate_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_free_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_init_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_register_device +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x00000000 lirc_unregister_device +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_encode_scancode +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_manchester +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pd +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_gen_pl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0x00000000 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x00000000 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x00000000 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x00000000 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/max2165 0x00000000 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x00000000 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x00000000 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x00000000 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x00000000 mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x00000000 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x00000000 qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x00000000 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x00000000 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x00000000 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x00000000 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x00000000 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_rw_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_generic_write_locked +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x00000000 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x00000000 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x00000000 rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x00000000 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-mc-common 0x00000000 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_alloc +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_boot_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_parse_video_stream +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_addr +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_read_interrupt +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_register_encoder +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_init +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_snd_remove +EXPORT_SYMBOL drivers/media/usb/go7007/go7007 0x00000000 go7007_update_board +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_debug +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x00000000 gspca_suspend +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x00000000 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x00000000 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_in_use +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_verify_memory_type +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-dvb 0x00000000 vb2_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_create_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_destroy_framevec +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_clk_register_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_modify_range +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_s_ctrl_string +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_register_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_subdev_notifier_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_unregister_subdev +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_disable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_enable +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_get_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_put +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_register +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_set_rate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_clk_unregister_fixed +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_init_class +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_notify +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subdev_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_query_ext_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x00000000 video_usercopy +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x00000000 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/host/r592 0x00000000 memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x00000000 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_show_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x00000000 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_probe +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_device_remove +EXPORT_SYMBOL drivers/mfd/axp20x 0x00000000 axp20x_match_device +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_register_event_cb +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_transfer +EXPORT_SYMBOL drivers/mfd/dln2 0x00000000 dln2_unregister_event_cb +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x00000000 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x00000000 tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm1811_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8958_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_base_regmap_config +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_exit +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_irq_init +EXPORT_SYMBOL drivers/mfd/wm8994 0x00000000 wm8994_regmap_config +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x00000000 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x00000000 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x00000000 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0x00000000 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x00000000 tifm_unregister_driver +EXPORT_SYMBOL drivers/mmc/core/mmc_block 0x00000000 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_get_pdata +EXPORT_SYMBOL drivers/mmc/host/of_mmc_spi 0x00000000 mmc_spi_put_pdata +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_build_cmd_addr +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_merge_status +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_send_gen_cmd +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_udelay +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x00000000 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x00000000 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0x00000000 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x00000000 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x00000000 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x00000000 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_calc_ecc_bytes +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0x00000000 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_check_erased_ecc_chunk +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_get_default_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_onfi_get_set_features_notsupp +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_read_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_std +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_oob_syndrome +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 nand_write_page_raw +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_async_timing_mode_to_sdr_timings +EXPORT_SYMBOL drivers/mtd/nand/nand 0x00000000 onfi_init_data_interface +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x00000000 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x00000000 nand_correct_data +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x00000000 onenand_addr +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x00000000 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x00000000 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_fast_age +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_join +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_leave +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_br_set_stp_state +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_brcm_hdr_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_configure_vlan +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_disable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_enable_set +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_eee_init +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_enable_port +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_fdb_dump +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_ethtool_stats +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_sset_count +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_get_strings +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_imp_vlan_setup +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_mirror_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_set_mac_eee +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_detect +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_switch_register +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_add +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_del +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_filtering +EXPORT_SYMBOL drivers/net/dsa/b53/b53_common 0x00000000 b53_vlan_prepare +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_probe +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_register_set +EXPORT_SYMBOL drivers/net/dsa/lan9303-core 0x00000000 lan9303_remove +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_alloc +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_detect +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_register +EXPORT_SYMBOL drivers/net/dsa/microchip/ksz_common 0x00000000 ksz_switch_remove +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x00000000 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x00000000 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_count +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_link_state +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_map +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_rx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_get_tx_stats +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_get_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_internal_loopback +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_rx_tx_enable +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_lmac_set_pfc +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_bgx 0x00000000 bgx_set_lmac_mac +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_init_hw +EXPORT_SYMBOL drivers/net/ethernet/cavium/thunder/thunder_xcv 0x00000000 xcv_setup_link +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x00000000 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_bar2_sge_qregs +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_aligned_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_clip_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_crypto_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_sge_timestamp +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_read_tpte +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_select_ntuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_alloc_switching +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_smt_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_tp_smt_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 cxgb4_update_root_dev_clip +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x00000000 t4_cleanup_clip_tbl +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_find_route6 +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgb_get_4tuple +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_make_ppod_hdr +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppod_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_ppods_reserve +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_ppm_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/libcxgb/libcxgb 0x00000000 cxgbi_tagmask_set +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 enic_api_devcmd_proxy_by_index +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_pdev +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_get_res_count +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_register +EXPORT_SYMBOL drivers/net/ethernet/cisco/enic/enic 0x00000000 vnic_dev_unregister +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x00000000 be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40e/i40e 0x00000000 i40e_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_register_client +EXPORT_SYMBOL drivers/net/ethernet/intel/i40evf/i40evf 0x00000000 i40evf_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_i2c 0x00000000 mlxsw_i2c_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_get_rdma_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_eth_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_fcoe_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qed/qed 0x00000000 qed_put_iscsi_ops +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_register_driver +EXPORT_SYMBOL drivers/net/ethernet/qlogic/qede/qede 0x00000000 qede_rdma_unregister_driver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x00000000 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_ethtool_ksettings_get_npage +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x00000000 mdio_set_flag +EXPORT_SYMBOL drivers/net/mii 0x00000000 generic_mii_ioctl +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_gmii_support +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_link +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_check_media +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_gset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_ethtool_sset +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_link_ok +EXPORT_SYMBOL drivers/net/mii 0x00000000 mii_nway_restart +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 alloc_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-bitbang 0x00000000 free_mdio_bitbang +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_read +EXPORT_SYMBOL drivers/net/phy/mdio-cavium 0x00000000 cavium_mdiobus_write +EXPORT_SYMBOL drivers/net/phy/mdio-octeon 0x00000000 octeon_mdiobus_force_mod_depencency +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0x00000000 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x00000000 sungem_phy_probe +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_link_change +EXPORT_SYMBOL drivers/net/usb/usbnet 0x00000000 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x00000000 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_bus_type_strings +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_mybeacon +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_find_country_by_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x00000000 dfs_pattern_detector_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_register +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_core_unregister +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_debug_get_new_fw_crash_data +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_notify_tx_completion +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_process_trailer +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_rx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htc_tx_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_hif_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_rx_pktlog_completion_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_t2h_msg_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_htt_txrx_compl_task +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_print_driver_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath10k/ath10k_core 0x00000000 ath10k_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_read_tgt_stats +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x00000000 ath6kl_warn +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_adhoc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_ap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_beacon_config_sta +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_base_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_modal_eeprom +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_phy_err +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_recv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_debug_stat_rx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_channel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_channels_rates +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rate +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_process_rssi +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_reload_chainmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_accept +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_rx_skb_postprocess +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_setup_ht_cap +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_deinit_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_init_debug +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_spectral_scan_trigger +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x00000000 ath_cmn_process_fft +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_check +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_check_nav +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_tsf_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_in +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_gpio_request_out +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_loadnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_resume_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_tx_filter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00000000 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel/atmel 0x00000000 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_boardrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_d11_attach +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_dotrev_str +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_match +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil 0x00000000 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/cisco/airo 0x00000000 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 free_libipw +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_isr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_flush +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_bit +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/intersil/hostap/hostap 0x00000000 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/intersil/orinoco/orinoco 0x00000000 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/btcoexist/btcoexist 0x00000000 rtl_btc_get_ops_pointer +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_dbm_to_txpwr_idx +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_pci 0x00000000 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtl_usb 0x00000000 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 channel5g_80m +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_one_byte_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_power_switch +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 efuse_shadow_read +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_addr_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_bb_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_c2hcmd_enqueue +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_cmd_send_packet +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_collect_scan_list +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_dm_diginit +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_hal_pwrseqcmdparsing +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rfreg_delay +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_rx_ampdu_apply +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_send_smps_action +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_wowlan_fw_cb +EXPORT_SYMBOL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_config_wowlan +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_tx_complete +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_probe +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_recv_frame +EXPORT_SYMBOL drivers/nfc/fdp/fdp 0x00000000 fdp_nci_remove +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_probe +EXPORT_SYMBOL drivers/nfc/microread/microread 0x00000000 microread_remove +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_fw_recv_frame +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_probe +EXPORT_SYMBOL drivers/nfc/nxp-nci/nxp-nci 0x00000000 nxp_nci_remove +EXPORT_SYMBOL drivers/nfc/pn533/pn533 0x00000000 pn533_recv_frame +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_probe +EXPORT_SYMBOL drivers/nfc/pn544/pn544 0x00000000 pn544_hci_remove +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_probe +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_recv_frame +EXPORT_SYMBOL drivers/nfc/s3fwrn5/s3fwrn5 0x00000000 s3fwrn5_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_close +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_open +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_probe +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_recv +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_remove +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 ndlc_send +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_deinit +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_init +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_se_io +EXPORT_SYMBOL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_vendor_cmds_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_apdu_reader_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_connectivity_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_dep_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_disable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_discover_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_enable_se +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_loopback_event_received +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_probe +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_remove +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_hci_se_io +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_atr_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_im_send_dep_req +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_deinit +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_se_init +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_tm_send_dep_res +EXPORT_SYMBOL drivers/nfc/st21nfca/st21nfca_hci 0x00000000 st21nfca_vendor_cmds_init +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 __ntb_register_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_clear_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_db_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_count +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_idx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_peer_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_default_port_number +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_link_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_msg_event +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_register_device +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_set_ctx +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_client +EXPORT_SYMBOL drivers/ntb/ntb 0x00000000 ntb_unregister_device +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_attach_btt +EXPORT_SYMBOL drivers/nvdimm/nd_btt 0x00000000 nvdimm_namespace_detach_btt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 __parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_del_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_read +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_dev_model +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x00000000 parport_write +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0x00000000 parport_pc_unregister_port +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 __register_rpmsg_driver +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_create_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_destroy_ept +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_find_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_poll +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_register_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_send_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_sendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysend_offchannel +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_trysendto +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 rpmsg_unregister_device +EXPORT_SYMBOL drivers/rpmsg/rpmsg_core 0x00000000 unregister_rpmsg_driver +EXPORT_SYMBOL drivers/rtc/rtc-ds1685 0x00000000 ds1685_rtc_poweroff +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_cmd +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_intr +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_register +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_template +EXPORT_SYMBOL drivers/scsi/esp_scsi 0x00000000 scsi_esp_unregister +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x00000000 mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_abort_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x00000000 qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_20_bit +EXPORT_SYMBOL drivers/scsi/ufs/tc-dwc-g210 0x00000000 tc_dwc_g210_config_40_bit +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_alloc_host +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_get_local_unipro_ver +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_map_desc_id_to_length +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_idle +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_runtime_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_shutdown +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_resume +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_system_suspend +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_dme_set_attrs +EXPORT_SYMBOL drivers/scsi/ufs/ufshcd-dwc 0x00000000 ufshcd_dwc_link_startup_notify +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x00000000 ssb_set_devtypedata +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_dbg_hex +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_alloc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_framebuffer_release +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_init_display +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_probe_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_read_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_register_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_remove_common +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_backlight +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_unregister_framebuffer +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_buf_dc +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio16_wr_latched +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_gpio8_wr +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_reg8_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_spi_emulate_9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus16 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus8 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem16_bus9 +EXPORT_SYMBOL drivers/staging/fbtft/fbtft 0x00000000 fbtft_write_vmem8_bus8 +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x00000000 ade7854_probe +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_register_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 irda_unregister_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_get_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_put_instance +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_read +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_raw_write +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_receive +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dongle +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/staging/irda/drivers/sir-dev 0x00000000 sirdev_write_complete +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_close +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_control_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_data_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/ircomm/ircomm 0x00000000 ircomm_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 alloc_irdadev +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_unwrap_char +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 async_wrap_skb +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_delete +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_first +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_get_next +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_lock_find +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_new +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 hashbin_remove_this +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_device_set_media_busy +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_init_max_qos_capabilies +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_notify_init +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_extract_all +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_insert +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_param_pack +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_qos_bits_to_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irda_setup_dma +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_getvaluebyclass_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 iriap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_integer_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_octseq_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_add_string_attrib +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_delete_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_find_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_insert_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_integer_value +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_new_object +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irias_object_change_attribute +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_close +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlap_open +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_close_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_discovery_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_get_discoveries +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_open_lsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_register_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_service_to_hint +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_unregister_service +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irlmp_update_client +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_close_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_connect_response +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_data_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_disconnect_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_dup +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_flow_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_open_tsap +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 irttp_udata_request +EXPORT_SYMBOL drivers/staging/irda/net/irda 0x00000000 proc_irda +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_check_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 __cfs_fail_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_array_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_allsigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_block_sigsinv +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_lower +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raise +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cap_raised +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_clear_sigpending +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_bind +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_clear +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_current +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_of_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_online +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_set_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_spread_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_table_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpu +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_cpumask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_node +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_unset_nodemask +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_cpt_weight +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_digest +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_final +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_init +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_speed +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_crypto_hash_update_page +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_curproc_cap_pack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_free_list +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_match +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_print +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_expr_list_values +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_err +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_fail_val +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_firststr +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_get_random_bytes +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_gettok +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_add_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_add_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_del_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_lookup_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_bd_peek_locked +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_cond_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_header +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_debug_str +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_del_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_findadd_unique +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_nolock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_for_each_safe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_getref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_hlist_for_each +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_is_empty +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_lookup +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_putref +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_rehash_key +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_hash_size_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_alloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_lock_free +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_number +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_percpt_unlock +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_state +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_race_waitq +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_rand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_restore_sigs +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_srand +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_str2num_check +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyin_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trace_copyout_string +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_trimwhite +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_deschedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_exit +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_create +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_sched_destroy +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 cfs_wi_schedule +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lbug_with_loc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_catastrophe +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_dumplog +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_debug_vmsg2 +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_deregister_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_kvzalloc_cpt +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_register_ioctl +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_stack +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 libcfs_subsystem_debug +EXPORT_SYMBOL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lprocfs_call_handler +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetClearLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetCtl +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDebugPeer +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetDist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQAlloc +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetEQFree +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGet +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetGetId +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDBind +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMDUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEAttach +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEInsert +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetMEUnlink +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIFini +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetNIInit +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetPut +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 LNetSetLazyPortal +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_free_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_match_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_find_min_max +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_nidrange_is_contiguous +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_parse_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 cfs_print_nidlist +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_id2str +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_isknown_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2modname +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_lnd2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_net2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_next_nidstring +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_nid2str_r +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2anynid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2net +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 libcfs_str2nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_port +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_acceptor_timeout +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_connect_console_error +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_iov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_copy_kiov2iter +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_counters_get +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_cpt_of_nid +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_create_reply_msg +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_iov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_extract_kiov +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_finalize +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_iov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_enumerate +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_free_enumeration +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_ipif_query +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_kiov_nob +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_net2ni +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_notify +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_parse +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_register_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_set_reply_msg_len +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getaddr +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_getbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_read +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_setbuf +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_sock_write +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 lnet_unregister_lnd +EXPORT_SYMBOL drivers/staging/lustre/lnet/lnet/lnet 0x00000000 the_lnet +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LUSTRE_BFL_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_DOT_LUSTRE_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 LU_OBF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 client_fid_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_alloc_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/fid/fid 0x00000000 seq_client_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_add_target +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_debugfs_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/fld/fld 0x00000000 fld_client_lookup +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_direct_rw_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_iocontrol_unregister +EXPORT_SYMBOL drivers/staging/lustre/lustre/llite/lustre 0x00000000 ll_stats_ops_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/lmv/lmv 0x00000000 lmv_free_memmd +EXPORT_SYMBOL drivers/staging/lustre/lustre/lov/lov 0x00000000 lov_read_and_clear_async_rc +EXPORT_SYMBOL drivers/staging/lustre/lustre/mdc/mdc 0x00000000 it_open_error +EXPORT_SYMBOL drivers/staging/lustre/lustre/mgc/mgc 0x00000000 mgc_fsname2resid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 __llog_ctxt_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_early_margin +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_extra +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_history +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_max +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 at_min +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 block_debug_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_2queue_init_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_cache_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_conf_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_cache_purge +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_percpu_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_env_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_index +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_commit_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_iter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_lock_alloc_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_loop +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_read_ahead +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_rw_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_sub_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_rw +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_submit_sync +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_io_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_descr_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_mode_name +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_request +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lock_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_lvb2attr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_unlock +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_attr_update +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_fiemap +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_getstripe +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_glimpse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_kill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_layout_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_maxbytes +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_prune +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_object_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_offset +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_assume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_clip +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_completion +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_delete +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_discard +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_flush +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_owned +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_is_vmlocked +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_del +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_disown +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_move_head +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_list_splice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_make_ready +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_own_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_prep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_slice_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_page_unassume +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_req_attr_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_stack_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_note +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_sync_io_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_type_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 cl_vmpage_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_check_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_llog_handler +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_config_parse_llog +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_conn2export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_del_profiles +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_devices_in_group +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_disconnect +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2cliimp +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_exp2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_export_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_fail_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_client_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_find_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_get_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle2object +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_free_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_hash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_handle_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_import_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_incref +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_manual_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_name2obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_new_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_notify_sptlrpc_conf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_parse_nid_quiet +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_process_proc_param +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_put_profile +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_register_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_unregister_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 class_uuid_unparse +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_foreach +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_group_rem +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 libcfs_kkuc_msg_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_add_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_data_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_del_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_entry_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_init_with_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 linkea_links_find +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cat_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_close +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_init_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_open +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_process_or_fork +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 llog_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_alloc_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_at_hist_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_clear_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_counter_sub +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_exp_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_find_named_value +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_free_stats +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_clear +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_sum +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_oh_tally_log2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_conn_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_connect_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_server_uuid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_state +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_rd_timeouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_read_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_seq_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_single_release +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_stats_collector +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_nosquash_nids +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_wr_root_squash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_frac_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_write_u64_helper +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_check_and_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_buf_realloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_cdebug_printer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_enter +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_exit +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_degister_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_quiesce_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_register_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_context_key_revive_many +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_device_type_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_env_refill +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_kmem_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_add_top +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_at +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_find_slice +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_header_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_locate +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_object_unhash +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_init_finish +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_purge_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lu_site_stats_print +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_cfg_string +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_common_put_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_end_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_get_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_process_log +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_fill_super +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_client_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_register_kill_super_cb +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_set_wire_obdo +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_hdr +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llog_rec +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_llogd_conn_body +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_lu_seq_range +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_swab_ost_id +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_uuid_to_peer +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_connect_flags2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_debug_peer_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dirty_transit_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_eviction +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_dump_on_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_get_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_ioctl_getdata +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_max_dirty_pages +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_mod_rpc_stats_seq_show +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_mod_rpc_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_put_request_slot +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_mod_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_set_max_rpcs_in_flight +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_timeout_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obd_zombie_barrier +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_cachep +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_from_inode +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_set_parent_fid +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 obdo_to_ioobj +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ptlrpc_put_connection_superhack +EXPORT_SYMBOL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 statfs_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CAPA2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLOSE_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CLUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_CONNECT_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_GL_DESC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_DLM_REQ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EADATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_EAVALS_LENS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FIEMAP_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_MDFLD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_FLD_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GENERIC_DATA +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_GETINFO_VALLEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_HSM_USER_STATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LAYOUT_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOGD_CONN_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LLOG_LOG_HDR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_LOGCOOKIES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_ARCHIVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_CURRENT_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDS_HSM_USER_ITEM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_EPOCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MDT_MD +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_CONFIG_RES +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_SEND_PARAM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_MGS_TARGET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_NIOBUF_REMOTE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_IOOBJ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OBD_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_OST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_PTLRPC_BODY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_RCS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_REC_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_OPC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SEQ_RANGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_KEY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SETINFO_VAL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_STRING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_SYMTGT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_TGTUUID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RMF_U32 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_FLD_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_BL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CONVERT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_CP_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_ENQUEUE_LVB +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_GL_DESC_CALLBACK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_BASIC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_LAYOUT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LDLM_INTENT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LLOG_ORIGIN_HANDLE_READ_HEADER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_LOG_CANCEL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETATTR_NAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETSTATUS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_ACTION +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_REGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_CT_UNREGISTER +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_PROGRESS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_REQUEST +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_GET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_HSM_STATE_SET +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_INTENT_CLOSE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_READPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_ACL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SLAVE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_CREATE_SYM +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_LINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_MIGRATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_OPEN +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_RENAME +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_SETXATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_REINT_UNLINK +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SWAP_LAYOUTS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MDS_WRITEPAGE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_CONFIG_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_MGS_TARGET_REG +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_PING +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OBD_SET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_READ +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_BRW_WRITE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_CREATE +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DESTROY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_DISCONNECT +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_FIEMAP +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_GET_INFO_LAST_ID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_PUNCH +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_QUOTACTL +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SETATTR +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_GRANT_INFO +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SET_INFO_LAST_FID +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_STATFS +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_OST_SYNC +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEC_CTX +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 RQF_SEQ_QUERY +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ldlm_handle2lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __lustre_unpack_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 __ptlrpc_prep_bulk_page +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _debug_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _ldlm_lock_debug +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 _sptlrpc_enlarge_msg_inplace +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 bulk_sec_desc_unpack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_destroy_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_disconnect_export +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_add_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_del_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_import_find_conn +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 client_obd_setup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 do_set_info_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_erase +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_insert +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_iterate_reverse +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 interval_search +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cancel_resource_local +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_list +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_cancel_unused_resource +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_cli_enqueue_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_completion_ast_async +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_error2errno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_extent_shift_kms +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_flock_completion_ast +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_it2str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock2handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_addref_try +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_allow_match_locked +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_decref_and_cancel +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_dump_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_match +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lock_set_data +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_lockname +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_cleanup +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_namespace_new +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_elc_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_prep_enqueue_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_dump +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_iterate +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_putref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_resource_unlink_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ldlm_revalidate_lock_handle +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_client_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 llog_initiator_connect +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lock_res_and_lock +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_rd_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lprocfs_wr_pinger_recov +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_hton +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_errno_ntoh +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_init_msg_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_add_op_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_buflen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_clear_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_early_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_conn_cnt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_last_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_opc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_type +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_get_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_jobid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_status +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_tag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_transno +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_set_versions +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msg_size_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_msghdr_get_flags +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_pack_reply_v2 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_shrink_msg +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_fid2path +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_hsm_state_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lmv_user_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_mds_md +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_objects +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lov_user_md_v3 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_lquota_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_mgs_nidtbl_entry +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_ost_lvb_v1 +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 lustre_swab_swap_layouts +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptl_send_rpc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_activate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_rqs_to_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_add_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_at_set_req_timeout +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_nopin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_bulk_kiov_pin_ops +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_check_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_connect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_deactivate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_del_timeout_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_disconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_free_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_client +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_init_rq_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_invalidate_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_brw +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_register_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_lprocfs_unregister_obd +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_mark_interrupted +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_obd_ping +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_add_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_del_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_force +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_down +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_pinger_ir_up +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_frag +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_bulk_imp +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_prep_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_queue_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_reconnect_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_recover_import +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_register_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_finished +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_req_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_alloc_pool +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_bufs_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_committed +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_free +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_request_set_replen +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_sample_next_xid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_schedule_difficult_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_destroy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_import_active +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_set_wait +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpc_unregister_service +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_add_req +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_addref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_alloc_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_decref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_destroy_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_queue_work +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 ptlrpcd_wake +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_client_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_extend +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_filled_sizes +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_get_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_has_field +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_pack +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_sized_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_server_swab_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_set_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_capsule_shrink +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_fini +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 req_layout_init +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sec2target_str +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_get +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_ctx_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_enlarge_reqbuf +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_read +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_unwrap_bulk_write +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_cli_wrap_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_client_adapt +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_start +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_stop +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_begin +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_conf_log_update_end +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_current_user_desc_size +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor2name_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_flavor_has_bulk +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_get_next_secid +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_all_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_flush_my_ctx +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_import_sec_ref +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_lprocfs_cliobd_attach +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_name2flavor_base +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_pack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_parse_flavor +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_process_config +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_register_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_sec_put +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_target_export_check +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unpack_user_desc +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 sptlrpc_unregister_policy +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_pack_pool_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 target_send_reply +EXPORT_SYMBOL drivers/staging/lustre/lustre/ptlrpc/ptlrpc 0x00000000 unlock_res_and_lock +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x00000000 cxd2099_attach +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x00000000 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x00000000 notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_halmac_get_ops_pointer +EXPORT_SYMBOL drivers/staging/rtlwifi/r8822be 0x00000000 rtl_phydm_get_ops_pointer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x00000000 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/gadget/function/usb_f_uvc 0x00000000 uvc_set_trace_param +EXPORT_SYMBOL drivers/usb/gadget/libcomposite 0x00000000 usb_os_desc_prepare_interf_dir +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x00000000 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_resume +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x00000000 usb_serial_suspend +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_abandon_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_multi_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_complete_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_getdesc_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_init_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_pull_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_iov_push_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_need_notify_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_disable_user +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_kern +EXPORT_SYMBOL drivers/vhost/vringh 0x00000000 vringh_notify_enable_user +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 devm_lcd_device_unregister +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x00000000 lcd_device_unregister +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_check_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_compute_pll +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_caps +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_get_tilemax +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_match_format +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_set_timings +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_settile +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tileblit +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecopy +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilecursor +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_tilefill +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/fbdev/core/svgalib 0x00000000 svga_wseq_multi +EXPORT_SYMBOL drivers/video/fbdev/core/syscopyarea 0x00000000 sys_copyarea +EXPORT_SYMBOL drivers/video/fbdev/core/sysfillrect 0x00000000 sys_fillrect +EXPORT_SYMBOL drivers/video/fbdev/core/sysimgblt 0x00000000 sys_imageblit +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/fbdev/cyber2000fb 0x00000000 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 g450_mnp2f +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/fbdev/matrox/g450_pll 0x00000000 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 DAC1064_global_restore +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_G100 +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_DAC1064 0x00000000 matrox_mystique +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_Ti3026 0x00000000 matrox_millennium +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_accel 0x00000000 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_base 0x00000000 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_g450 0x00000000 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_read_pins +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_var2my +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/fbdev/matrox/matroxfb_misc 0x00000000 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/fbdev/mb862xx/mb862xxfb 0x00000000 mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free +EXPORT_SYMBOL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0x00000000 save_vga +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x00000000 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x00000000 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x00000000 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x00000000 w1_unregister_family +EXPORT_SYMBOL fs/exofs/libore 0x00000000 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x00000000 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_create +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x00000000 ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/parman 0x00000000 parman_create +EXPORT_SYMBOL lib/parman 0x00000000 parman_destroy +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_add +EXPORT_SYMBOL lib/parman 0x00000000 parman_item_remove +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_fini +EXPORT_SYMBOL lib/parman 0x00000000 parman_prio_init +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_add +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_nhc_del +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_register_netdevice +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdev +EXPORT_SYMBOL net/6lowpan/6lowpan 0x00000000 lowpan_unregister_netdevice +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x00000000 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0x00000000 make_8023_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x00000000 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_charge +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0x00000000 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x00000000 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_hash +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x00000000 vcc_sklist_lock +EXPORT_SYMBOL net/ax25/ax25 0x00000000 asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_ip_xmit +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0x00000000 ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x00000000 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 __hci_cmd_sync_ev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_err_ratelimited +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_ready +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 bt_warn +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_cmd_sync +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_mgmt_chan_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_diag +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_reset_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_fw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_set_hw_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_chan_close +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_get +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_conn_put +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_is_socket +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_register_user +EXPORT_SYMBOL net/bluetooth/bluetooth 0x00000000 l2cap_unregister_user +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x00000000 caif_free_client +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x00000000 cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0x00000000 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x00000000 get_cfcnfg +EXPORT_SYMBOL net/can/can 0x00000000 can_ioctl +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_register +EXPORT_SYMBOL net/can/can 0x00000000 can_proto_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_register +EXPORT_SYMBOL net/can/can 0x00000000 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x00000000 can_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_new +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0x00000000 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x00000000 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_alloc_hw_nm +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_template +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_finish +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_is_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_csa_update_counter +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_get_tx_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_iter_keys_rcu +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_manage_rx_ba_offl +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_mark_rx_ba_filtered_frames +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_match +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nan_func_terminated +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_parse_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_radar_detected +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_report_wowlan_wakeup +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_reserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_ba_timer_expired +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_rx_napi +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_send_eosp_nullfunc +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_eosp +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_pspoll +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_sta_uapsd_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tdls_oper_request +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_dequeue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_prepare_skb +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_ext +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_txq_get_depth +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_unreserve_tid +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_update_p2p_noa +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 rate_control_set_rates +EXPORT_SYMBOL net/mac80211/mac80211 0x00000000 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_alloc_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_free_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_register_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_stop_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_unregister_hw +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_wake_queue +EXPORT_SYMBOL net/mac802154/mac802154 0x00000000 ieee802154_xmit_complete +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_reset_pipes_per_host +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_start +EXPORT_SYMBOL net/nfc/hci/hci 0x00000000 nfc_llc_stop +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_conn_max_data_pkt_payload_size +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_close +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_conn_create +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_core_reset +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_get_conn_info_by_dest_type_params +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_clear_all_pipes +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_connect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_dev_session_init +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_get_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_open_pipe +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_hci_set_param +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcc_loopback +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_discover +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_nfcee_mode_set +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_prop_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_req_complete +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_cmd +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_data +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_send_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_set_config +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0x00000000 nci_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 __nfc_alloc_vendor_cmd_reply_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_add_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_find_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_fw_download_done +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_remove_se +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_connectivity +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_se_transaction +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_send_to_raw_sock +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x00000000 nfc_vendor_cmd_reply +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_allocate_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_free_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_register_device +EXPORT_SYMBOL net/nfc/nfc_digital 0x00000000 nfc_digital_unregister_device +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0x00000000 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0x00000000 pn_sock_unhash +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0x00000000 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 __cfg80211_send_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_abandon_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cac_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ch_switch_started_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_dfs_required +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_check_station_change +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_connect_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_beacon_loss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_crit_proto_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_del_sta_sinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_ie_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_free_nan_func +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ft_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_drvinfo +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_get_station +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_inform_bss_frame_data +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_iter_combinations +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_func_terminated +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_nan_match +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_port_authorized +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_radar_event +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_reg_can_beacon_relax +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_report_wowlan_wakeup +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_assoc_resp +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_rx_unprot_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_sched_scan_stopped_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_stop_iface +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_tx_mlme_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_chandef_to_operating_class +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_data_to_8023_exthdr +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_num_supported_channels +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_ie_split_ric +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_mandatory_rates +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_operating_class_to_band +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 reg_initiator_name +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 regulatory_set_wiphy_regd_sync_rtnl +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_new_nm +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_read_of_freq_limits +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x00000000 wiphy_unregister +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x00000000 lib80211_unregister_crypto_ops +EXPORT_SYMBOL sound/ac97_bus 0x00000000 ac97_bus_type +EXPORT_SYMBOL sound/core/oss/snd-mixer-oss 0x00000000 snd_mixer_oss_ioctl_card +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0x00000000 snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x00000000 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x00000000 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x00000000 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x00000000 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0x00000000 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x00000000 release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_cards +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_component_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_add_new_kctl +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_lookup_oss_minor_data +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_major +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_mixer_oss_notify_callback +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_oss_info_register +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_register_oss_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x00000000 snd_unregister_oss_device +EXPORT_SYMBOL sound/core/snd-hwdep 0x00000000 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 __snd_pcm_lib_xfer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_create_iec958_consumer_hw_params +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_mask64 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ranges +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x00000000 snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 __snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x00000000 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_exit +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_autoload_init +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/snd-seq-device 0x00000000 snd_seq_device_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x00000000 snd_timer_stop +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x00000000 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x00000000 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_irq_handler +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00000000 snd_vx_threaded_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_rate_table +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_add_pcm_hw_constraints +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_ack +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_set_parameters +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 amdtp_syt_intervals +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_plug_info +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_get_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 avc_general_set_sig_fmt +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_check_used +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_schedule_registration +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x00000000 snd_fw_transaction +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_resume +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x00000000 snd_ak4114_suspend +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x00000000 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x00000000 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_init +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x00000000 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x00000000 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x00000000 snd_sbmixer_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x00000000 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x00000000 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x00000000 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_update_dac_routing +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x00000000 oxygen_write_uart +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_alloc_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x00000000 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_probe +EXPORT_SYMBOL sound/soc/codecs/snd-soc-tlv320aic23 0x00000000 tlv320aic23_regmap +EXPORT_SYMBOL sound/soc/snd-soc-core 0x00000000 snd_soc_alloc_ac97_codec +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special +EXPORT_SYMBOL sound/soundcore 0x00000000 register_sound_special_device +EXPORT_SYMBOL sound/soundcore 0x00000000 sound_class +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_dsp +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_midi +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_mixer +EXPORT_SYMBOL sound/soundcore 0x00000000 unregister_sound_special +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x00000000 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 __snd_util_memblk_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x00000000 snd_util_memhdr_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 __snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_resume +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x00000000 snd_usbmidi_suspend +EXPORT_SYMBOL vmlinux 0x00000000 CMO_PageSize +EXPORT_SYMBOL vmlinux 0x00000000 HPAGE_SHIFT +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __arch_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __arch_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __arch_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __arch_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __bswapdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __copy_tofrom_user +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __csum_partial +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __debugger +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_bpt +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_break_match +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_fault_handler +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_iabr_match +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_ipi +EXPORT_SYMBOL vmlinux 0x00000000 __debugger_sstep +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ioremap +EXPORT_SYMBOL vmlinux 0x00000000 __ioremap_at +EXPORT_SYMBOL vmlinux 0x00000000 __iounmap +EXPORT_SYMBOL vmlinux 0x00000000 __iounmap_at +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_io_start +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_virt_size +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_virt_start +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 __memset16 +EXPORT_SYMBOL vmlinux 0x00000000 __memset32 +EXPORT_SYMBOL vmlinux 0x00000000 __memset64 +EXPORT_SYMBOL vmlinux 0x00000000 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __msr_check_and_clear +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __nd_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __node_distance +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __pgd_index_size +EXPORT_SYMBOL vmlinux 0x00000000 __pgd_table_size +EXPORT_SYMBOL vmlinux 0x00000000 __pgd_val_bits +EXPORT_SYMBOL vmlinux 0x00000000 __pmd_cache_index +EXPORT_SYMBOL vmlinux 0x00000000 __pmd_index_size +EXPORT_SYMBOL vmlinux 0x00000000 __pmd_table_size +EXPORT_SYMBOL vmlinux 0x00000000 __pmd_val_bits +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __pte_frag_nr +EXPORT_SYMBOL vmlinux 0x00000000 __pte_frag_size_shift +EXPORT_SYMBOL vmlinux 0x00000000 __pte_index_size +EXPORT_SYMBOL vmlinux 0x00000000 __pte_table_size +EXPORT_SYMBOL vmlinux 0x00000000 __pud_index_size +EXPORT_SYMBOL vmlinux 0x00000000 __pud_table_size +EXPORT_SYMBOL vmlinux 0x00000000 __pud_val_bits +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __serio_register_port +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vio_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc_end +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc_start +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _insb +EXPORT_SYMBOL vmlinux 0x00000000 _insl_ns +EXPORT_SYMBOL vmlinux 0x00000000 _insw_ns +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _mcount +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0x00000000 _memcpy_toio +EXPORT_SYMBOL vmlinux 0x00000000 _memset_io +EXPORT_SYMBOL vmlinux 0x00000000 _numa_mem_ +EXPORT_SYMBOL vmlinux 0x00000000 _outsb +EXPORT_SYMBOL vmlinux 0x00000000 _outsl_ns +EXPORT_SYMBOL vmlinux 0x00000000 _outsw_ns +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x00000000 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x00000000 ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x00000000 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0x00000000 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x00000000 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x00000000 agp_backend_release +EXPORT_SYMBOL vmlinux 0x00000000 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_bridges +EXPORT_SYMBOL vmlinux 0x00000000 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x00000000 agp_copy_info +EXPORT_SYMBOL vmlinux 0x00000000 agp_create_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_device_command +EXPORT_SYMBOL vmlinux 0x00000000 agp_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_key +EXPORT_SYMBOL vmlinux 0x00000000 agp_free_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_enable +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x00000000 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0x00000000 agp_off +EXPORT_SYMBOL vmlinux 0x00000000 agp_put_bridge +EXPORT_SYMBOL vmlinux 0x00000000 agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0x00000000 agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fddidev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 arch_free_page +EXPORT_SYMBOL vmlinux 0x00000000 arch_invalidate_pmem +EXPORT_SYMBOL vmlinux 0x00000000 arch_local_irq_restore +EXPORT_SYMBOL vmlinux 0x00000000 arch_touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 arch_wb_cache_pmem +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_link_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_port_printk +EXPORT_SYMBOL vmlinux 0x00000000 ata_print_version +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 ata_scsi_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_get_by_type +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_set_brightness +EXPORT_SYMBOL vmlinux 0x00000000 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 backlight_force_update +EXPORT_SYMBOL vmlinux 0x00000000 backlight_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 backlight_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_flush_dcache_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 cdc_parse_cdc_header +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cfb_copyarea +EXPORT_SYMBOL vmlinux 0x00000000 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x00000000 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 check_legacy_ioport +EXPORT_SYMBOL vmlinux 0x00000000 check_signature +EXPORT_SYMBOL vmlinux 0x00000000 chip_to_vas_id +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_user_page +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 color_table +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x00000000 con_is_bound +EXPORT_SYMBOL vmlinux 0x00000000 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_blank_hook +EXPORT_SYMBOL vmlinux 0x00000000 console_blanked +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_core_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_l2_cache_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x00000000 cpu_to_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_generic_suspend +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x00000000 cpuidle_disable +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crash_shutdown_register +EXPORT_SYMBOL vmlinux 0x00000000 crash_shutdown_unregister +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x00000000 cur_cpu_spec +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_stack_pointer +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 cxl_use_count +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 da903x_query_status +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 decrementer_clockevent +EXPORT_SYMBOL vmlinux 0x00000000 default_blu +EXPORT_SYMBOL vmlinux 0x00000000 default_grn +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_red +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_pm_opp_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_recommended_opp +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devfreq_update_status +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 device_private_entry_fault +EXPORT_SYMBOL vmlinux 0x00000000 device_private_key +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_register +EXPORT_SYMBOL vmlinux 0x00000000 devm_backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_add_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_register_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_devfreq_unregister_opp_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_register_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_extcon_unregister_notifier_all +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap_pages +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 devm_nvmem_cell_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_direct_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_find_channel +EXPORT_SYMBOL vmlinux 0x00000000 dma_iommu_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_set_coherent_mask +EXPORT_SYMBOL vmlinux 0x00000000 dma_set_mask +EXPORT_SYMBOL vmlinux 0x00000000 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x00000000 dma_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_get_unmap_data +EXPORT_SYMBOL vmlinux 0x00000000 dmaengine_put +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dmt_modes +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_blank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 edac_mc_find +EXPORT_SYMBOL vmlinux 0x00000000 eeh_check_failure +EXPORT_SYMBOL vmlinux 0x00000000 eeh_dev_release +EXPORT_SYMBOL vmlinux 0x00000000 eeh_subsystem_flags +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 enable_kernel_altivec +EXPORT_SYMBOL vmlinux 0x00000000 enable_kernel_fp +EXPORT_SYMBOL vmlinux 0x00000000 enable_kernel_vsx +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 epapr_hypercall_start +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fb_add_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_blank +EXPORT_SYMBOL vmlinux 0x00000000 fb_class +EXPORT_SYMBOL vmlinux 0x00000000 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_default_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_deferred_io_mmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_best_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0x00000000 fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_get_options +EXPORT_SYMBOL vmlinux 0x00000000 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0x00000000 fb_match_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fb_pan_display +EXPORT_SYMBOL vmlinux 0x00000000 fb_parse_edid +EXPORT_SYMBOL vmlinux 0x00000000 fb_prepare_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_register_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x00000000 fb_set_var +EXPORT_SYMBOL vmlinux 0x00000000 fb_show_logo +EXPORT_SYMBOL vmlinux 0x00000000 fb_unregister_client +EXPORT_SYMBOL vmlinux 0x00000000 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x00000000 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0x00000000 fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ccw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_cw +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_rotate_ud +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_rotate +EXPORT_SYMBOL vmlinux 0x00000000 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 fg_console +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_font +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_all_to_thread +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_icache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_page +EXPORT_SYMBOL vmlinux 0x00000000 flush_dcache_range +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_icache_range +EXPORT_SYMBOL vmlinux 0x00000000 flush_icache_user_range +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_create +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_destroy +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pages +EXPORT_SYMBOL vmlinux 0x00000000 frame_vector_to_pfns +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x00000000 framebuffer_release +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_dma +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsl_guts_get_svr +EXPORT_SYMBOL vmlinux 0x00000000 fsl_lbc_addr +EXPORT_SYMBOL vmlinux 0x00000000 fsl_lbc_ctrl_dev +EXPORT_SYMBOL vmlinux 0x00000000 fsl_lbc_find +EXPORT_SYMBOL vmlinux 0x00000000 fsl_upm_find +EXPORT_SYMBOL vmlinux 0x00000000 fsl_upm_run_pattern +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_alloc_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_first_fit_order_align +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_fixed_alloc +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x00000000 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 genphy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_config_init +EXPORT_SYMBOL vmlinux 0x00000000 genphy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 genphy_read_status +EXPORT_SYMBOL vmlinux 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x00000000 genphy_resume +EXPORT_SYMBOL vmlinux 0x00000000 genphy_setup_forced +EXPORT_SYMBOL vmlinux 0x00000000 genphy_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 genphy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 genphy_update_link +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_agp_version +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_default_font +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_pci_dma_ops +EXPORT_SYMBOL vmlinux 0x00000000 get_phy_device +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x00000000 get_tz_trend +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 give_up_console +EXPORT_SYMBOL vmlinux 0x00000000 giveup_all +EXPORT_SYMBOL vmlinux 0x00000000 giveup_altivec +EXPORT_SYMBOL vmlinux 0x00000000 giveup_fpu +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 global_cache_flush +EXPORT_SYMBOL vmlinux 0x00000000 global_cursor_default +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 h_get_mpp +EXPORT_SYMBOL vmlinux 0x00000000 h_ipi_redirect +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_audio_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_avi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_log +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_infoframe_unpack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_spd_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_init +EXPORT_SYMBOL vmlinux 0x00000000 hdmi_vendor_infoframe_pack +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_new +EXPORT_SYMBOL vmlinux 0x00000000 hmm_device_put +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 hmm_devmem_remove +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_register +EXPORT_SYMBOL vmlinux 0x00000000 hmm_mirror_unregister +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_alloc_locked_page +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_fault +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_get_pfns +EXPORT_SYMBOL vmlinux 0x00000000 hmm_vma_range_done +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 hvc_get_chars +EXPORT_SYMBOL vmlinux 0x00000000 hvc_put_chars +EXPORT_SYMBOL vmlinux 0x00000000 i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x00000000 i2c_master_send +EXPORT_SYMBOL vmlinux 0x00000000 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 i2c_release_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_i2c_block_data_or_emulated +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x00000000 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_transfer +EXPORT_SYMBOL vmlinux 0x00000000 i2c_use_client +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x00000000 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x00000000 i8042_command +EXPORT_SYMBOL vmlinux 0x00000000 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x00000000 i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x00000000 i8253_lock +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x00000000 input_allocate_device +EXPORT_SYMBOL vmlinux 0x00000000 input_close_device +EXPORT_SYMBOL vmlinux 0x00000000 input_enable_softrepeat +EXPORT_SYMBOL vmlinux 0x00000000 input_event +EXPORT_SYMBOL vmlinux 0x00000000 input_flush_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_device +EXPORT_SYMBOL vmlinux 0x00000000 input_free_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_get_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_get_new_minor +EXPORT_SYMBOL vmlinux 0x00000000 input_grab_device +EXPORT_SYMBOL vmlinux 0x00000000 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_inject_event +EXPORT_SYMBOL vmlinux 0x00000000 input_match_device_id +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_drop_unused +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x00000000 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0x00000000 input_open_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_device +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_register_handler +EXPORT_SYMBOL vmlinux 0x00000000 input_release_device +EXPORT_SYMBOL vmlinux 0x00000000 input_reset_device +EXPORT_SYMBOL vmlinux 0x00000000 input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x00000000 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x00000000 input_set_capability +EXPORT_SYMBOL vmlinux 0x00000000 input_set_keycode +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handle +EXPORT_SYMBOL vmlinux 0x00000000 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_map +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 ioport_unmap +EXPORT_SYMBOL vmlinux 0x00000000 ioread16 +EXPORT_SYMBOL vmlinux 0x00000000 ioread16_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread16be +EXPORT_SYMBOL vmlinux 0x00000000 ioread32 +EXPORT_SYMBOL vmlinux 0x00000000 ioread32_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioread32be +EXPORT_SYMBOL vmlinux 0x00000000 ioread8 +EXPORT_SYMBOL vmlinux 0x00000000 ioread8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ioremap +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_prot +EXPORT_SYMBOL vmlinux 0x00000000 ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 iounmap +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite16be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32_rep +EXPORT_SYMBOL vmlinux 0x00000000 iowrite32be +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8 +EXPORT_SYMBOL vmlinux 0x00000000 iowrite8_rep +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 is_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 is_nvdimm_bus_locked +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 isa_io_base +EXPORT_SYMBOL vmlinux 0x00000000 isa_mem_base +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x00000000 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_event +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_point +EXPORT_SYMBOL vmlinux 0x00000000 iwe_stream_add_value +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kd_mksound +EXPORT_SYMBOL vmlinux 0x00000000 kdb_current_task +EXPORT_SYMBOL vmlinux 0x00000000 kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x00000000 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvm_irq_bypass +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kvmppc_hv_find_lock_hpte +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_cpu +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x00000000 ledtrig_mtd_activity +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_fp_state +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 load_vr_state +EXPORT_SYMBOL vmlinux 0x00000000 lock_fb_info +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_find_mode +EXPORT_SYMBOL vmlinux 0x00000000 mac_map_monitor_sense +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 mac_vmode_to_var +EXPORT_SYMBOL vmlinux 0x00000000 mach_powernv +EXPORT_SYMBOL vmlinux 0x00000000 mach_pseries +EXPORT_SYMBOL vmlinux 0x00000000 machine_id +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 max8925_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x00000000 max8998_write_reg +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_create +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_free +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_free +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memcpy_flushcache +EXPORT_SYMBOL vmlinux 0x00000000 memcpy_page_flushcache +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x00000000 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x00000000 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 migrate_vma +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_attach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_create_packet +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_enter_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_exit_sleep_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_get_power_mode +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_nop +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_column_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_brightness +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_display_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_page_address +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_pixel_format +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_off +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_on +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_set_tear_scanline +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_soft_reset +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_dcs_write_buffer +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_detach +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_register_full +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_read +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_generic_write +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_register +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_host_unregister +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_long +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_packet_format_is_short +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_set_maximum_return_packet_size +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_shutdown_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 mipi_dsi_turn_on_peripheral +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mmc_add_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x00000000 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_gpio_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x00000000 mmc_card_is_blockaddr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_command_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_post_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_recovery +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_cqe_start_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x00000000 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase +EXPORT_SYMBOL vmlinux 0x00000000 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x00000000 mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x00000000 mmc_free_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_get_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpio_set_cd_isr +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_cd_irq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_gpiod_request_ro +EXPORT_SYMBOL vmlinux 0x00000000 mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x00000000 mmc_is_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse +EXPORT_SYMBOL vmlinux 0x00000000 mmc_of_parse_voltage +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_put_card +EXPORT_SYMBOL vmlinux 0x00000000 mmc_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_release_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 mmc_request_done +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_pause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_release +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_timer_stop +EXPORT_SYMBOL vmlinux 0x00000000 mmc_retune_unpause +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x00000000 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_areq +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x00000000 mmc_start_request +EXPORT_SYMBOL vmlinux 0x00000000 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x00000000 mmc_wait_for_req_done +EXPORT_SYMBOL vmlinux 0x00000000 mmu_hash_ops +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_bitmap_alloc_hwirqs +EXPORT_SYMBOL vmlinux 0x00000000 msi_bitmap_free_hwirqs +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_arena_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_btt_version +EXPORT_SYMBOL vmlinux 0x00000000 nd_dax_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_dev_to_uuid +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_notify +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_register +EXPORT_SYMBOL vmlinux 0x00000000 nd_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nd_integrity_init +EXPORT_SYMBOL vmlinux 0x00000000 nd_namespace_blk_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_probe +EXPORT_SYMBOL vmlinux 0x00000000 nd_pfn_validate +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_acquire_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_release_lane +EXPORT_SYMBOL vmlinux 0x00000000 nd_region_to_nstype +EXPORT_SYMBOL vmlinux 0x00000000 nd_sb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 num_registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 numa_cpu_lookup_table +EXPORT_SYMBOL vmlinux 0x00000000 numa_node +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_lock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_bus_unlock +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_capacity +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_common_probe +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_namespace_disk_name +EXPORT_SYMBOL vmlinux 0x00000000 nvdimm_revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 of_count_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_cpufreq_power_cooling_register +EXPORT_SYMBOL vmlinux 0x00000000 of_create_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 of_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 of_device_alloc +EXPORT_SYMBOL vmlinux 0x00000000 of_device_get_match_data +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_available +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_big_endian +EXPORT_SYMBOL vmlinux 0x00000000 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_device_register +EXPORT_SYMBOL vmlinux 0x00000000 of_device_unregister +EXPORT_SYMBOL vmlinux 0x00000000 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0x00000000 of_find_backlight_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_matching_node_and_match +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_mipi_dsi_host_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_net_device_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_opts_by_path +EXPORT_SYMBOL vmlinux 0x00000000 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x00000000 of_find_property +EXPORT_SYMBOL vmlinux 0x00000000 of_get_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_child_by_name +EXPORT_SYMBOL vmlinux 0x00000000 of_get_cpu_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_ddr_timings +EXPORT_SYMBOL vmlinux 0x00000000 of_get_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x00000000 of_get_ibm_chip_id +EXPORT_SYMBOL vmlinux 0x00000000 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_min_tck +EXPORT_SYMBOL vmlinux 0x00000000 of_get_named_gpio_flags +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_available_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_child +EXPORT_SYMBOL vmlinux 0x00000000 of_get_next_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_get_pci_address +EXPORT_SYMBOL vmlinux 0x00000000 of_get_property +EXPORT_SYMBOL vmlinux 0x00000000 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_by_regs +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_endpoint_count +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_next_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_by_id +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_node +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_get_remote_port_parent +EXPORT_SYMBOL vmlinux 0x00000000 of_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 of_io_request_and_map +EXPORT_SYMBOL vmlinux 0x00000000 of_iomap +EXPORT_SYMBOL vmlinux 0x00000000 of_machine_is_compatible +EXPORT_SYMBOL vmlinux 0x00000000 of_match_device +EXPORT_SYMBOL vmlinux 0x00000000 of_match_node +EXPORT_SYMBOL vmlinux 0x00000000 of_mdio_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 of_mdiobus_register +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_add_data +EXPORT_SYMBOL vmlinux 0x00000000 of_mm_gpiochip_remove +EXPORT_SYMBOL vmlinux 0x00000000 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_n_size_cells +EXPORT_SYMBOL vmlinux 0x00000000 of_node_get +EXPORT_SYMBOL vmlinux 0x00000000 of_node_put +EXPORT_SYMBOL vmlinux 0x00000000 of_node_to_nid +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_args +EXPORT_SYMBOL vmlinux 0x00000000 of_parse_phandle_with_fixed_args +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_deregister_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_find_device +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_get_and_connect +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_is_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_phy_register_fixed_link +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x00000000 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x00000000 of_root +EXPORT_SYMBOL vmlinux 0x00000000 of_scan_pci_bridge +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_address +EXPORT_SYMBOL vmlinux 0x00000000 of_translate_dma_address +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_event_request +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 paca +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_domain_nr +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_hose_for_OF_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_io_base +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_fixup_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcibus_to_node +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 phy_aneg_done +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach +EXPORT_SYMBOL vmlinux 0x00000000 phy_attach_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_info +EXPORT_SYMBOL vmlinux 0x00000000 phy_attached_print +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect +EXPORT_SYMBOL vmlinux 0x00000000 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x00000000 phy_detach +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_create +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_free +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_device_remove +EXPORT_SYMBOL vmlinux 0x00000000 phy_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL vmlinux 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x00000000 phy_find_first +EXPORT_SYMBOL vmlinux 0x00000000 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_eee +EXPORT_SYMBOL vmlinux 0x00000000 phy_init_hw +EXPORT_SYMBOL vmlinux 0x00000000 phy_loopback +EXPORT_SYMBOL vmlinux 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 phy_print_status +EXPORT_SYMBOL vmlinux 0x00000000 phy_read_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_resume +EXPORT_SYMBOL vmlinux 0x00000000 phy_set_max_speed +EXPORT_SYMBOL vmlinux 0x00000000 phy_start +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x00000000 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop +EXPORT_SYMBOL vmlinux 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 phy_suspend +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL vmlinux 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x00000000 phy_write_mmd +EXPORT_SYMBOL vmlinux 0x00000000 phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 plpar_hcall +EXPORT_SYMBOL vmlinux 0x00000000 plpar_hcall9 +EXPORT_SYMBOL vmlinux 0x00000000 plpar_hcall_norets +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x00000000 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x00000000 pm_suspend +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_required +EXPORT_SYMBOL vmlinux 0x00000000 pm_vt_switch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pmem_sector_size +EXPORT_SYMBOL vmlinux 0x00000000 pmem_should_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_alloc_hwirq_ranges +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_alloc_hwirqs +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_get_irq_count +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_ioda_msi_setup +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_release_hwirq_ranges +EXPORT_SYMBOL vmlinux 0x00000000 pnv_cxl_release_hwirqs +EXPORT_SYMBOL vmlinux 0x00000000 pnv_npu2_destroy_context +EXPORT_SYMBOL vmlinux 0x00000000 pnv_npu2_handle_fault +EXPORT_SYMBOL vmlinux 0x00000000 pnv_npu2_init_context +EXPORT_SYMBOL vmlinux 0x00000000 pnv_pci_get_gpu_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnv_pci_get_npu_dev +EXPORT_SYMBOL vmlinux 0x00000000 pnv_pci_get_phb_node +EXPORT_SYMBOL vmlinux 0x00000000 pnv_phb_to_cxl_mode +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 powerpc_debugfs_root +EXPORT_SYMBOL vmlinux 0x00000000 ppc_enable_pmcs +EXPORT_SYMBOL vmlinux 0x00000000 ppc_md +EXPORT_SYMBOL vmlinux 0x00000000 ppc_pci_io +EXPORT_SYMBOL vmlinux 0x00000000 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x00000000 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input +EXPORT_SYMBOL vmlinux 0x00000000 ppp_input_error +EXPORT_SYMBOL vmlinux 0x00000000 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_compressor +EXPORT_SYMBOL vmlinux 0x00000000 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x00000000 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0x00000000 pps_event +EXPORT_SYMBOL vmlinux 0x00000000 pps_lookup_dev +EXPORT_SYMBOL vmlinux 0x00000000 pps_register_source +EXPORT_SYMBOL vmlinux 0x00000000 pps_unregister_source +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 profile_pc +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ps2_begin_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x00000000 ps2_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_drain +EXPORT_SYMBOL vmlinux 0x00000000 ps2_end_command +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x00000000 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x00000000 ps2_init +EXPORT_SYMBOL vmlinux 0x00000000 ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x00000000 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pseries_disable_reloc_on_exc +EXPORT_SYMBOL vmlinux 0x00000000 pseries_enable_reloc_on_exc +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_event +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_index +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_register +EXPORT_SYMBOL vmlinux 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ptp_find_pin +EXPORT_SYMBOL vmlinux 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 put_vaddr_frames +EXPORT_SYMBOL vmlinux 0x00000000 put_zone_device_private_or_public_page +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_all_mm +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_pmd_tlb_range +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_kernel_range +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_lpid +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_lpid_va +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_mm +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_page +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_pwc +EXPORT_SYMBOL vmlinux 0x00000000 radix__flush_tlb_range +EXPORT_SYMBOL vmlinux 0x00000000 radix__local_flush_tlb_mm +EXPORT_SYMBOL vmlinux 0x00000000 radix__local_flush_tlb_page +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 rational_best_approximation +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 redraw_screen +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 registered_fb +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_dma +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_blocked +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_destroy +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_find_type +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_register +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x00000000 rfkill_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rio_query_mport +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtas +EXPORT_SYMBOL vmlinux 0x00000000 rtas_busy_delay +EXPORT_SYMBOL vmlinux 0x00000000 rtas_busy_delay_time +EXPORT_SYMBOL vmlinux 0x00000000 rtas_call +EXPORT_SYMBOL vmlinux 0x00000000 rtas_data_buf +EXPORT_SYMBOL vmlinux 0x00000000 rtas_data_buf_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtas_flash_term_hook +EXPORT_SYMBOL vmlinux 0x00000000 rtas_get_error_log_max +EXPORT_SYMBOL vmlinux 0x00000000 rtas_get_power_level +EXPORT_SYMBOL vmlinux 0x00000000 rtas_get_sensor +EXPORT_SYMBOL vmlinux 0x00000000 rtas_indicator_present +EXPORT_SYMBOL vmlinux 0x00000000 rtas_offline_cpus_mask +EXPORT_SYMBOL vmlinux 0x00000000 rtas_online_cpus_mask +EXPORT_SYMBOL vmlinux 0x00000000 rtas_progress +EXPORT_SYMBOL vmlinux 0x00000000 rtas_service_present +EXPORT_SYMBOL vmlinux 0x00000000 rtas_set_indicator +EXPORT_SYMBOL vmlinux 0x00000000 rtas_set_power_level +EXPORT_SYMBOL vmlinux 0x00000000 rtas_token +EXPORT_SYMBOL vmlinux 0x00000000 rtc_month_days +EXPORT_SYMBOL vmlinux 0x00000000 rtc_time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_tm_to_time64 +EXPORT_SYMBOL vmlinux 0x00000000 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x00000000 rtc_year_days +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 screen_info +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_bus +EXPORT_SYMBOL vmlinux 0x00000000 serio_close +EXPORT_SYMBOL vmlinux 0x00000000 serio_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 serio_open +EXPORT_SYMBOL vmlinux 0x00000000 serio_reconnect +EXPORT_SYMBOL vmlinux 0x00000000 serio_rescan +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 slhc_compress +EXPORT_SYMBOL vmlinux 0x00000000 slhc_free +EXPORT_SYMBOL vmlinux 0x00000000 slhc_init +EXPORT_SYMBOL vmlinux 0x00000000 slhc_remember +EXPORT_SYMBOL vmlinux 0x00000000 slhc_toss +EXPORT_SYMBOL vmlinux 0x00000000 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 soft_cursor +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 srp_parse_tmo +EXPORT_SYMBOL vmlinux 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL vmlinux 0x00000000 srp_rport_get +EXPORT_SYMBOL vmlinux 0x00000000 srp_rport_put +EXPORT_SYMBOL vmlinux 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL vmlinux 0x00000000 srp_timed_out +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_thread +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 store_fp_state +EXPORT_SYMBOL vmlinux 0x00000000 store_vr_state +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strict_msr_control +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x00000000 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tb_ticks_per_sec +EXPORT_SYMBOL vmlinux 0x00000000 tb_ticks_per_usec +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_btt +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_dax +EXPORT_SYMBOL vmlinux 0x00000000 to_nd_pfn +EXPORT_SYMBOL vmlinux 0x00000000 to_ndd +EXPORT_SYMBOL vmlinux 0x00000000 to_tm +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_parse_properties +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_report_pos +EXPORT_SYMBOL vmlinux 0x00000000 touchscreen_set_mt_pos +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x00000000 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_power +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x00000000 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_read +EXPORT_SYMBOL vmlinux 0x00000000 twl_i2c_write +EXPORT_SYMBOL vmlinux 0x00000000 twl_rev +EXPORT_SYMBOL vmlinux 0x00000000 twl_set_regcache_bypass +EXPORT_SYMBOL vmlinux 0x00000000 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x00000000 uart_match_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_resume_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x00000000 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x00000000 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x00000000 udelay +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unpoison_memory +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 update_devfreq +EXPORT_SYMBOL vmlinux 0x00000000 update_region +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 validate_sp +EXPORT_SYMBOL vmlinux 0x00000000 vas_win_paste_addr +EXPORT_SYMBOL vmlinux 0x00000000 vc_cons +EXPORT_SYMBOL vmlinux 0x00000000 vc_resize +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vesa_modes +EXPORT_SYMBOL vmlinux 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL vmlinux 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL vmlinux 0x00000000 vfio_pin_pages +EXPORT_SYMBOL vmlinux 0x00000000 vfio_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL vmlinux 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL vmlinux 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vga_client_register +EXPORT_SYMBOL vmlinux 0x00000000 vga_con +EXPORT_SYMBOL vmlinux 0x00000000 vga_get +EXPORT_SYMBOL vmlinux 0x00000000 vga_put +EXPORT_SYMBOL vmlinux 0x00000000 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x00000000 vga_tryget +EXPORT_SYMBOL vmlinux 0x00000000 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x00000000 vio_cmo_entitlement_update +EXPORT_SYMBOL vmlinux 0x00000000 vio_cmo_set_dev_desired +EXPORT_SYMBOL vmlinux 0x00000000 vio_disable_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 vio_enable_interrupts +EXPORT_SYMBOL vmlinux 0x00000000 vio_find_node +EXPORT_SYMBOL vmlinux 0x00000000 vio_get_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vio_h_cop_sync +EXPORT_SYMBOL vmlinux 0x00000000 vio_register_device_node +EXPORT_SYMBOL vmlinux 0x00000000 vio_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 vio_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_alloc_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 vme_check_window +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_free_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_add +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_exec +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_list_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pattern_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_pci_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_dma_vme_attribute +EXPORT_SYMBOL vmlinux 0x00000000 vme_free_consistent +EXPORT_SYMBOL vmlinux 0x00000000 vme_get_size +EXPORT_SYMBOL vmlinux 0x00000000 vme_init_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_generate +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_irq_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_attach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_count +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_detach +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_lm_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_read +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_rmw +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_master_write +EXPORT_SYMBOL vmlinux 0x00000000 vme_new_dma_list +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_register_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_free +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_get +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_request +EXPORT_SYMBOL vmlinux 0x00000000 vme_slave_set +EXPORT_SYMBOL vmlinux 0x00000000 vme_slot_num +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_bridge +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 vme_unregister_error_handler +EXPORT_SYMBOL vmlinux 0x00000000 vmemmap +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 wireless_send_event +EXPORT_SYMBOL vmlinux 0x00000000 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x00000000 wl1251_get_platform_data +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xmon +EXPORT_SYMBOL vmlinux 0x00000000 xor_altivec_2 +EXPORT_SYMBOL vmlinux 0x00000000 xor_altivec_3 +EXPORT_SYMBOL vmlinux 0x00000000 xor_altivec_4 +EXPORT_SYMBOL vmlinux 0x00000000 xor_altivec_5 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 __tracepoint_kvm_ppc_instr +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_init +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_unmap_hva +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_kick +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_alloc_lpid +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_book3s_queue_irqprio +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_claim_lpid +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_dequeue_dec +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_pending_dec +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_prepare_to_enter +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_queue_data_storage +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_queue_dec +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_core_queue_program +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_emulate_mmio +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_free_lpid +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_gpa_to_pfn +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_h_logical_ci_load +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_h_logical_ci_store +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_h_put_tce +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_h_put_tce_indirect +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_h_stuff_tce +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_handle_load +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_handle_store +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_hv_ops +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_init_lpid +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_kvm_pv +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_ld +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_load_last_inst +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_pr_ops +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_prepare_to_enter +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_rtas_hcall +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_sanity_check +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_set_msr +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_st +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_unfixup_split_real +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xics_clr_mapped +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xics_hcall +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xics_rm_complete +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xics_set_mapped +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xive_clr_mapped +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 kvmppc_xive_set_mapped +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL arch/powerpc/kvm/kvm-pr 0x00000000 kvmppc_emulate_instruction +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_hardreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_error_handler +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_handle_port_intr +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_host_activate +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_qc_issue +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_start_fis_rx +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x00000000 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_disable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_clks +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_regulators +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_enable_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_get_resources +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_init_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_resume_host +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_shutdown +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend +EXPORT_SYMBOL_GPL drivers/ata/libahci_platform 0x00000000 ahci_platform_suspend_host +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x00000000 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/ata/pata_sis 0x00000000 sis_info133_for_sata +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_alloc +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_poke +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_register +EXPORT_SYMBOL_GPL drivers/auxdisplay/charlcd 0x00000000 charlcd_unregister +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_address +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x00000000 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __devm_regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_base +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-spmi 0x00000000 __regmap_init_spmi_ext +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __devm_regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-w1 0x00000000 __regmap_init_w1 +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_b_mii_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_get_alp_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_out +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_gpio_outen +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pci_power_save +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_find_core_unit +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_down +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_host_pci_up +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_get_bus_clock +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x00000000 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_finalize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_initialize +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_apple +EXPORT_SYMBOL_GPL drivers/bluetooth/btbcm 0x00000000 btbcm_setup_patchram +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_check_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_enter_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_exit_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_hw_error +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_load_ddc_config +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_read_version +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_regmap_init +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_secure_send +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_bdaddr +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_diag_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_set_event_mask_mfg +EXPORT_SYMBOL_GPL drivers/bluetooth/btintel 0x00000000 btintel_version_info +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_pscan_window_reporting +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x00000000 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_set_bdaddr_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btqca 0x00000000 qca_uart_setup_rome +EXPORT_SYMBOL_GPL drivers/bluetooth/btrtl 0x00000000 btrtl_setup_realtek +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 h4_recv_buf +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_register_device +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_tx_wakeup +EXPORT_SYMBOL_GPL drivers/bluetooth/hci_uart 0x00000000 hci_uart_unregister_device +EXPORT_SYMBOL_GPL drivers/crypto/nx/nx-compress 0x00000000 nx842_crypto_compress +EXPORT_SYMBOL_GPL drivers/crypto/nx/nx-compress 0x00000000 nx842_crypto_decompress +EXPORT_SYMBOL_GPL drivers/crypto/nx/nx-compress 0x00000000 nx842_crypto_exit +EXPORT_SYMBOL_GPL drivers/crypto/nx/nx-compress 0x00000000 nx842_crypto_init +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_disable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_enable +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_filter +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_probe +EXPORT_SYMBOL_GPL drivers/dma/dw/dw_dmac_core 0x00000000 dw_dma_remove +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_init_sys +EXPORT_SYMBOL_GPL drivers/dma/qcom/hdma_mgmt 0x00000000 hidma_mgmt_setup +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_find_desc +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_init +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_desc_free +EXPORT_SYMBOL_GPL drivers/dma/virt-dma 0x00000000 vchan_tx_submit +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0x00000000 fw_card_release +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_get_to_list +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridge_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_disable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_enable +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 fpga_bridges_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-bridge 0x00000000 of_fpga_bridge_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x00000000 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_audio_enable +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_bind +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_phy_i2c_write +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_set_sample_rate +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_setup_rx_sense +EXPORT_SYMBOL_GPL drivers/gpu/drm/bridge/synopsys/dw-hdmi 0x00000000 dw_hdmi_unbind +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_add_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_bus_flags_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_crtc_add_crc_entry +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_from_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_display_mode_to_videomode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_do_get_edid +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_describe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_dumb_create_internal +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_get_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_import_sg_table +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_prime_vunmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_gem_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_component_match_add +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_encoder_active_endpoint +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_of_find_panel_or_bridge +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 drm_reset_display_info +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x00000000 of_get_drm_display_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_debugfs_show +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_addr +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_init_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_create_with_funcs +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_get_obj +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x00000000 drm_gem_fb_prepare_fb +EXPORT_SYMBOL_GPL drivers/gpu/drm/tinydrm/core/tinydrm 0x00000000 tinydrm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_fd_to_handle +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x00000000 ttm_prime_handle_to_fd +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 __hid_request +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_alloc_report_buf +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_dump_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_field_extract +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_close +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_open +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_start +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_hw_stop +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hid_validate_values +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x00000000 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x00000000 roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_device_init_struct +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_read +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x00000000 roccat_common2_sysfs_write +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 hid_sensor_get_usage_index +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_close +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_device_open +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x00000000 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/i2c-hid/i2c-hid 0x00000000 i2c_hid_ll_driver +EXPORT_SYMBOL_GPL drivers/hid/uhid 0x00000000 uhid_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usb_hid_driver +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x00000000 usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_add_clients_from_dt +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_board_list +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_get_channel_id_by_name +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_new_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_port_unregister_clients +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_remove_client +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x00000000 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_dev_pm_ops +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_probe +EXPORT_SYMBOL_GPL drivers/hwmon/adt7x10 0x00000000 adt7x10_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_cache +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_regulator_ops +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_update_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x00000000 pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_add_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_alloc +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_mux_del_adapters +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x00000000 i2c_root_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x00000000 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_core_remove +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_accel_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/accel/bmc150-accel-core 0x00000000 bmc150_regmap_conf +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_probe +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_regmap +EXPORT_SYMBOL_GPL drivers/iio/accel/mma7455_core 0x00000000 mma7455_core_remove +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_reset +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x00000000 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_cb_get_iio_dev +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-buffer-cb 0x00000000 iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_cleanup +EXPORT_SYMBOL_GPL drivers/iio/buffer/industrialio-triggered-buffer 0x00000000 devm_iio_triggered_buffer_setup +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_probe +EXPORT_SYMBOL_GPL drivers/iio/dac/ad5592r-base 0x00000000 ad5592r_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/gyro/bmg160_core 0x00000000 bmg160_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x00000000 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/bmi160/bmi160_core 0x00000000 bmi160_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu6050_set_power_itg +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_probe +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_core_remove +EXPORT_SYMBOL_GPL drivers/iio/imu/inv_mpu6050/inv-mpu6050 0x00000000 inv_mpu_pmops +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_device_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 __devm_iio_trigger_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_match +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_device_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_alloc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_free +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 devm_iio_trigger_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_put +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_buffer_set_attrs +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_attach_buffer +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_claim_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_device_release_direct_mode +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_format_value +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_ext_info_count +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_avail_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_average_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_offset +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_read_max_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_show_mount_matrix +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_ext_info +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x00000000 iio_write_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/pressure/mpl115 0x00000000 mpl115_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_precious +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_readable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_isreg_writeable +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_pm_ops +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_probe +EXPORT_SYMBOL_GPL drivers/iio/pressure/zpa2326 0x00000000 zpa2326_remove +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x00000000 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/matrix-keymap 0x00000000 matrix_keypad_parse_properties +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x00000000 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 __rmi_register_function_handler +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_process +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_abs_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_configure_input +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_of_probe +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_rel_report +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_2d_sensor_set_input_params +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_dbg +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_resume +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_driver_suspend +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_of_property_read_u32 +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_register_transport_device +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_set_attn_data +EXPORT_SYMBOL_GPL drivers/input/rmi4/rmi_core 0x00000000 rmi_unregister_function_handler +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp4_core 0x00000000 cyttsp4_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x00000000 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_read_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_i2c_common 0x00000000 cyttsp_i2c_write_block_data +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_regmap_config +EXPORT_SYMBOL_GPL drivers/input/touchscreen/tsc200x-core 0x00000000 tsc200x_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00000000 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_add +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_del +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_device_init +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_get_device +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x00000000 ipack_put_device +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x00000000 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x00000000 gigaset_stop +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_register +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_classdev_flash_unregister +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_get_flash_fault +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_set_flash_timeout +EXPORT_SYMBOL_GPL drivers/leds/led-class-flash 0x00000000 led_update_flash_brightness +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_deinit_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_init_device +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_is_extclk_used +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_of_populate_pdata +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_read +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_register_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_leds +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_unregister_sysfs +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_update_bits +EXPORT_SYMBOL_GPL drivers/leds/leds-lp55xx-common 0x00000000 lp55xx_write +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_flash_ctrl +EXPORT_SYMBOL_GPL drivers/leds/trigger/ledtrig-camera 0x00000000 ledtrig_torch_ctrl +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_clear_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_get_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_get_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_put_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_put_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_register_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_register_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_register_sensor +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_set_overtemp +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_unregister_client +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_unregister_control +EXPORT_SYMBOL_GPL drivers/macintosh/windfarm_core 0x00000000 wf_unregister_sensor +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 __mcb_register_driver +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 chameleon_parse_cells +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_alloc_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_add_devices +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_get +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_bus_put +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_device_register +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_free_dev +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_irq +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_get_resource +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_bus +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_release_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_request_mem +EXPORT_SYMBOL_GPL drivers/mcb/mcb 0x00000000 mcb_unregister_driver +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_allocate_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_delete_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_get_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_get +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_put +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_register +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_set_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_notifier_unregister +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_for_input +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_phys_addr_validate +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_cec_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_queue_pin_hpd_event +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_received_msg_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_adapter +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_register_cec_notifier +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_log_addrs +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_s_phys_addr_from_edid +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_set_edid_phys_addr +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_attempt_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_done_ts +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_transmit_msg +EXPORT_SYMBOL_GPL drivers/media/cec/cec 0x00000000 cec_unregister_adapter +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x00000000 b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x00000000 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x00000000 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_translate_msg +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x00000000 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_alloc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_aspect_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_calc_text_basep +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fill_plane_buffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_fillbuffer +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_free +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_g_interleaved_plane +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_gen_text +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_init +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_log_status +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_pattern_strings +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_reset_source +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_crop_compose +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_s_fourcc +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_set_font +EXPORT_SYMBOL_GPL drivers/media/common/v4l2-tpg/v4l2-tpg 0x00000000 tpg_update_mv_step +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/as102_fe 0x00000000 as102_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/cx24117 0x00000000 cx24117_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/gp8psk-fe 0x00000000 gp8psk_fe_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/mxl5xx 0x00000000 mxl5xx_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv0910 0x00000000 stv0910_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/stv6111 0x00000000 stv6111_attach +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x00000000 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_register +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_device_usb_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_enum_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 __media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_create_pad_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_pci_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_register_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_device_unregister_entity_notify +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_create +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_devnode_remove +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_enum_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_find_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_get_fwnode_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_pads_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_put +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remote_pad +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_remove_links +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_entity_setup_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_cleanup +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_init +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_next +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_graph_walk_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_start +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_pipeline_stop +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_link +EXPORT_SYMBOL_GPL drivers/media/media 0x00000000 media_remove_intf_links +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x00000000 cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_input_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x00000000 mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_enum_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_g_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querycap +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_querystd +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_frequency +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_input +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_std +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_s_tuner +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_init +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_buffer_prepare +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_queue_setup +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_start_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_ts_stop_streaming +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x00000000 saa7134_vb2_buffer_queue +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x00000000 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_cleanup_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_and_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_clr_or_set +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_frame_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_enum_mbus_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_code +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_get_format_by_fourcc +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_init_resources +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_of_get_format +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-video 0x00000000 xvip_set_format_size +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_start +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_generator_stop +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_of_get +EXPORT_SYMBOL_GPL drivers/media/platform/xilinx/xilinx-vtc 0x00000000 xvtc_put +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x00000000 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 devm_rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_close +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_open +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x00000000 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x00000000 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x00000000 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x00000000 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/r820t 0x00000000 r820t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x00000000 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x00000000 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x00000000 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x00000000 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x00000000 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x00000000 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x00000000 simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_get_i2c_adap +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x00000000 is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x00000000 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x00000000 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_alloc_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_boards +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_find_led +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_free_device +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_camera +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_init_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_toggle_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_uninit_usb_xfer +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x00000000 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x00000000 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_get_timestamp +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x00000000 v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_dv_timings_presets +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_enum_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_find_dv_timings_cea861_vic +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_print_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-dv-timings 0x00000000 v4l2_valid_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_indicator_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-flash-led-class 0x00000000 v4l2_flash_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_endpoints_by_port +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_notifier_parse_fwnode_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_async_register_subdev_sensor_common +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_alloc_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_endpoint_parse +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_parse_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-fwnode 0x00000000 v4l2_fwnode_put_link +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_buf_remove_by_idx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x00000000 v4l2_m2m_try_schedule +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x00000000 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x00000000 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x00000000 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_core_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_discard_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_queue_error +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_thread_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00000000 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_clear_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x00000000 vb2_dma_contig_set_max_seg_size +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-sg 0x00000000 vb2_dma_sg_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x00000000 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 _vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-v4l2 0x00000000 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0x00000000 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __tracepoint_vb2_v4l2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 __v4l2_ctrl_handler_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_async_notifier_cleanup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subdev_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_mc_create_media_graph +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_link_notify +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_pipeline_pm_use +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subdev_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_src_change_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_alloc_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_free_pad_config +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_link_validate_default +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l2_subdev_notify_event +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_disable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_enable_media_source +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x00000000 v4l_vb2q_enable_media_source +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x00000000 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_bulk_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_read_qif +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/da9150-core 0x00000000 da9150_write_qif +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_get_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_read8 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_release_mutex +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write16 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write32 +EXPORT_SYMBOL_GPL drivers/mfd/kempld-core 0x00000000 kempld_write8 +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x00000000 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x00000000 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_read_byte +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_update_bits +EXPORT_SYMBOL_GPL drivers/mfd/lp3943 0x00000000 lp3943_write_byte +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_exit +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x00000000 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/motorola-cpcap 0x00000000 cpcap_sense_virq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x00000000 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x00000000 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x00000000 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x00000000 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_dma_unmap_sg +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x00000000 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_ep0_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_card_status +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_get_rsp +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_usb 0x00000000 rtsx_usb_write_register +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 devm_regmap_init_si476x +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_agc_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_am_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ana_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_dig_audio_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_acf_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_div_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_phase_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_blockcount +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rds_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_rsq_status +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_seek_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_fm_tune_freq +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_func_info +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_get_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_ic_link_gpo_ctl_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_intb_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_down +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_power_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_set_property +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_cmd_zif_pin_cfg +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_am +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_has_diversity +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_i2c_xfer +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_primary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_a_secondary_tuner +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_in_am_receiver_mode +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_is_powered_up +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_set_power_state +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_start +EXPORT_SYMBOL_GPL drivers/mfd/si476x-core 0x00000000 si476x_core_stop +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x00000000 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_adc_done +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_clr +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_cache +EXPORT_SYMBOL_GPL drivers/mfd/ti_am335x_tscadc 0x00000000 am335x_tsc_se_set_once +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65218 0x00000000 tps65218_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x00000000 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x00000000 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_afu_reset +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_allocate_afu_irqs +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_check_and_switch_mode +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_context_events_pending +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_dev_context_init +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_ioctl +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_mmap +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_open +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_poll +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_read +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fd_release +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_fops_get_context +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_free_afu_irqs +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_get_context +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_get_fd +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_get_max_irqs_per_process +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_get_priv +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_map_afu_irq +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_pci_to_afu +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_pci_to_cfg_record +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_perst_reloads_same_image +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_process_element +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_psa_map +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_psa_unmap +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_read_adapter_vpd +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_release_context +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_set_driver_ops +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_set_master +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_set_max_irqs_per_process +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_set_priv +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_set_translation_mode +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_slot_is_supported +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_start_context +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_start_work +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_stop_context +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxl_unmap_afu_irq +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_get_PE_attributes +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_get_xsl_config +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_handle_fault +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_set_device_dma +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_slot_is_supported +EXPORT_SYMBOL_GPL drivers/misc/cxl/cxl 0x00000000 cxllib_switch_phb_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_create +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_flush +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_free +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/misc/echo/echo 0x00000000 oslec_update +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_multireadb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_readb +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x00000000 eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_alloc +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x00000000 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x00000000 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 __sdhci_read_caps +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_calc_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cleanup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_disable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_enable +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_cqe_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_dumpregs +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_clk +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_enable_sdio_irq +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_execute_tuning +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_reset +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_send_command +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_bus_width +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_ios +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_power_noreg +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_set_uhs_signaling +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_setup_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_start_signal_voltage_switch +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x00000000 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_clk_get_max_clock +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_resume +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_suspend +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x00000000 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x00000000 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x00000000 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x00000000 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x00000000 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 __register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_isreserved +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_count_freebytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_find_eccregion +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_free +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_get_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_databytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_ooblayout_set_eccbytes +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_groups +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_pairing_info_to_wunit +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 mtd_wunit_to_pairing_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x00000000 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x00000000 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_check_ecc_caps +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_cleanup +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_decode_ext_id +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_match_ecc_req +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_maximize_ecc +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_lp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_ooblayout_sp_ops +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_reset +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x00000000 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0x00000000 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x00000000 onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/spi-nor/spi-nor 0x00000000 spi_nor_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_read_sg +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x00000000 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 devm_mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_alloc +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_free +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_register +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_chip_unregister +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_deselect +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_get +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_put +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_select +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_states +EXPORT_SYMBOL_GPL drivers/mux/mux-core 0x00000000 mux_control_try_select +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 arcnet_led_event +EXPORT_SYMBOL_GPL drivers/net/arcnet/arcnet 0x00000000 devm_arcnet_led_init +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x00000000 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 alloc_canfd_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_mtu +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_change_state +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_led_event +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_add_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_del +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_enable +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_fifo +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_offload_timestamp +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_irq_queue_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 can_rx_offload_reset +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 devm_can_led_init +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 safe_candev_priv +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x00000000 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x00000000 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x00000000 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/dsa/lan9303-core 0x00000000 lan9303_indirect_phy_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 devm_regmap_init_encx24j600 +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/microchip/encx24j600-regmap 0x00000000 regmap_encx24j600_spi_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_footer +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_create_header +EXPORT_SYMBOL_GPL drivers/net/ethernet/qualcomm/qca_7k_common 0x00000000 qcafrm_fsm_decode +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_dvr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_get_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_set_mac_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac 0x00000000 stmmac_suspend +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_get_platform_resources +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_pltfr_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_probe_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/stmicro/stmmac/stmmac-platform 0x00000000 stmmac_remove_config_dt +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_add_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_get +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_control_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_mcast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_ucast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_del_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_flush_multicast +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_set_allmulti +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/cpsw_ale 0x00000000 cpsw_ale_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_ops_priv +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_pm_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_probe +EXPORT_SYMBOL_GPL drivers/net/ethernet/wiznet/w5100 0x00000000 w5100_remove +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_init +EXPORT_SYMBOL_GPL drivers/net/phy/mdio-mux 0x00000000 mdio_mux_uninit +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_ether_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x00000000 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x00000000 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x00000000 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_get_stats64 +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_link_ksettings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_start +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_status_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_update_max_qlen +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x00000000 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x00000000 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/ipw2x00/libipw 0x00000000 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlegacy/iwlegacy 0x00000000 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_cmd_groups_verify_sorted +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_dump_desc_assert +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_force_nmi +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_free_fw_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_dbg_collect_trig +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_error_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_get_nvm +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_runtime_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fw_start_dbg_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_fwrt_handle_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_cmd_string +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_get_shared_mem_conf +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_paging +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_init_sbands +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_parse_nvm_mcc_info +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_free +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_init +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_phy_db_set_section +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_read_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_send_phy_db_data +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_set_hw_address_from_csr +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_ref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_send_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_trans_unref +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write8 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_direct64 +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph64_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwl_write_prph_no_grab +EXPORT_SYMBOL_GPL drivers/net/wireless/intel/iwlwifi/iwlwifi 0x00000000 iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/intersil/p54/p54common 0x00000000 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas/libertas 0x00000000 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/libertas_tf/libertas_tf 0x00000000 lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 _mwifiex_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_alloc_dma_align_buf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_deauthenticate_all +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_dnld_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_drv_info_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_multi_chan_resync +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_queue_main_work +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_reinit_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_shutdown_sw +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_upload_device_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/marvell/mwifiex/mwifiex 0x00000000 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_classify_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_attach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_core_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_trans_handle_rx_ctl_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/quantenna/qtnfmac/qtnfmac 0x00000000 qtnf_wake_all_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_key_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_get_txwi_rxwi_size +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800lib 0x00000000 rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_autowake_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_fill_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_entry_state +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_get_txwi +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_init_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_interrupt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_pretbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_queue_init +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_rxdone_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_tbtt_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_toggle_irq +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_txstatus_tasklet +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2800mmio 0x00000000 rt2800mmio_write_tx_desc +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_set_mac_address +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00lib_txdone_nomatch +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00lib 0x00000000 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00mmio 0x00000000 rt2x00mmio_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00pci 0x00000000 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/ralink/rt2x00/rt2x00usb 0x00000000 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_restorepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_savepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 dm_writepowerindex +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8192c/rtl8192c-common 0x00000000 rtl92c_set_p2p_ps_offload_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_cmd_send_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_bb_powersaving +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_dynamic_txpower +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_dm_init_edca_turbo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_download_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_enable_fw_download +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_fw_free_to_go +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_calculate_bit_shift +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_init_bb_rf_reg_def +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_mac_setting_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_fill_iqk_matrix +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_a_standby +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_path_adda_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_pi_mode_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_query_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_reload_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_read +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_rf_serial_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_save_mac_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_bb_reg +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_set_sw_chnl_cmdarray +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_save_adda_registers +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723_write_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723ae_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtl8723com/rtl8723-common 0x00000000 rtl8723be_firmware_selfreset +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 read_efuse_byte +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_action_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_beacon_statistic +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_btc_status_false +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_deferred_work +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_deinit_rfkill +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fill_dummy +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_block_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_fw_page_write +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hal_edca_param +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_hwinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_get_tx_report +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_global_var +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_core +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_init_rx_config +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ips_nic_on +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_is_special_data +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_change_work_callback +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_enter +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_lps_leave +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_ops +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_p2p_info +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_recognize_peer +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_swlps_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tid_to_ac +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_mgmt_proc +EXPORT_SYMBOL_GPL drivers/net/wireless/realtek/rtlwifi/rtlwifi 0x00000000 rtl_tx_report_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_deinit +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_91x_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_hal_device_init +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_mac80211_detach +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_read_pkt +EXPORT_SYMBOL_GPL drivers/net/wireless/rsi/rsi_91x 0x00000000 rsi_zone_enabled +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_can_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_core_release +EXPORT_SYMBOL_GPL drivers/net/wireless/st/cw1200/cw1200_core 0x00000000 cw1200_irq_handler +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x00000000 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_set_ht_capabilities +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_send +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_sleep +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_ps_elp_wakeup +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl1271_tx_min_rate_get +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_cmd_build_probe_req +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_generic_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_cmd_wait_for_event_or_timeout +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_ba_rx_constraint +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_beacon_loss +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_channel_switch +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_dummy_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_fw_logger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_inactive_sta +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_max_tx_failure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_roc_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_rssi_trigger +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_sched_scan_completed +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_event_soft_gemini_sense +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_get_native_channel_type +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_results +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_scan_sched_scan_ssid_list +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_set_scan_chan_params +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x00000000 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_recv_frame +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_register_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_nci_unregister_dev +EXPORT_SYMBOL_GPL drivers/nfc/nfcmrvl/nfcmrvl 0x00000000 nfcmrvl_parse_dt +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_finalize_setup +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_register_device +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_ack +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_rx_frame_is_cmd_response +EXPORT_SYMBOL_GPL drivers/nfc/pn533/pn533 0x00000000 pn533_unregister_device +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_disable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_discover_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_enable_se +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_cmd_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_event_received +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_hci_load_session +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_probe +EXPORT_SYMBOL_GPL drivers/nfc/st-nci/st-nci 0x00000000 st_nci_remove +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_echo_res +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_recv_response +EXPORT_SYMBOL_GPL drivers/nfc/st95hf/st95hf 0x00000000 st95hf_spi_send +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_create_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_free_queue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_down +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_query +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_link_up +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_max_size +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_qp_num +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_register_client_dev +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_rx_remove +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_enqueue +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_tx_free_entry +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client +EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0x00000000 ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/hotplug/pnv-php 0x00000000 pnv_php_find_slot +EXPORT_SYMBOL_GPL drivers/pci/hotplug/pnv-php 0x00000000 pnv_php_set_slot_power_state +EXPORT_SYMBOL_GPL drivers/pci/hotplug/rpaphp 0x00000000 rpaphp_add_slot +EXPORT_SYMBOL_GPL drivers/pci/hotplug/rpaphp 0x00000000 rpaphp_deregister_slot +EXPORT_SYMBOL_GPL drivers/pci/hotplug/rpaphp 0x00000000 rpaphp_get_drc_props +EXPORT_SYMBOL_GPL drivers/pci/hotplug/rpaphp 0x00000000 rpaphp_slot_head +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 devm_reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_register +EXPORT_SYMBOL_GPL drivers/power/reset/reboot-mode 0x00000000 reboot_mode_unregister +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_setup +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_teardown +EXPORT_SYMBOL_GPL drivers/power/supply/bq27xxx_battery 0x00000000 bq27xxx_battery_update +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/power/supply/pcf50633-charger 0x00000000 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_get_num_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_parse_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x00000000 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x00000000 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x00000000 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_probe +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_remove +EXPORT_SYMBOL_GPL drivers/rpmsg/qcom_glink_native 0x00000000 qcom_glink_native_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_ppm_setup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ddp_set_one_ppod +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_find_by_netdev_rcu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x00000000 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dealloc_host +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_get_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_dme_set_attr +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_hold +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_release +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd 0x00000000 ufshcd_remove +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_init +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_idle +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_resume +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_runtime_suspend +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_shutdown +EXPORT_SYMBOL_GPL drivers/scsi/ufs/ufshcd-pltfrm 0x00000000 ufshcd_pltfrm_suspend +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x00000000 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x00000000 dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_execute_msg +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_test +EXPORT_SYMBOL_GPL drivers/spi/spi-loopback-test 0x00000000 spi_test_run_tests +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 __spmi_driver_register +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_reset +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_shutdown +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_sleep +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_command_wakeup +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_controller_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_add +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_alloc +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_device_remove +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_readl +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_ext_register_writel +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_read +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_write +EXPORT_SYMBOL_GPL drivers/spmi/spmi 0x00000000 spmi_register_zero_write +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x00000000 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 __comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_devpriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_spriv +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdev_readback +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_n_available +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_read_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_buf_write_samples +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_bytes_per_scan +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_check_chanlist +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_get_from_minor +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dev_put +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_dio_update_state +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_event +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_handle_events +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_inc_scan_progress +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_is_subdevice_running +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_legacy_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_load_firmware +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nsamples_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_nscans_left +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_readback_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_request_region +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_hw_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_set_spriv_auto_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 comedi_timeout +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_0_32mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_4_20mA +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_bipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar10 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar2_5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unipolar5 +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00000000 range_unknown +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_pci 0x00000000 comedi_to_pci_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_dev +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_to_usb_interface +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi_usb 0x00000000 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/addi_watchdog 0x00000000 addi_watchdog_reset +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_dio200_common 0x00000000 amplc_dio200_set_enhance +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/amplc_pc236_common 0x00000000 amplc_pc236_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_cascade_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_load +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_ns_to_timer +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_pacer_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_busy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_subdevice_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_update_divisors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8254 0x00000000 comedi_8254_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_mm_init +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_8255 0x00000000 subdev_8255_regbase +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_alloc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_disable_on_sample +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_free +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_poll +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_program +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/comedi_isadma 0x00000000 comedi_isadma_set_mode +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x00000000 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_ack_linkc +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_alloc_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_buf_change +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_bytes_in_transit +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_dma_disarm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_done +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_free_ring +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_init_ring_descriptors +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_prep_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_release_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_request_channel_in_range +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/mite 0x00000000 mite_sync_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_common 0x00000000 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_drain_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_free_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_handle_dma_status +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_init_dma_chan +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc_isadma 0x00000000 labpc_setup_dma +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_get_soft_copy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_insn_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_read +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x00000000 ni_tio_write +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_acknowledge +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x00000000 ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_close +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_bitfield2 +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_dio_get_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_find_subdevice_by_type +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_get_n_channels +EXPORT_SYMBOL_GPL drivers/staging/comedi/kcomedilib/kcomedilib 0x00000000 comedi_open +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_prepare_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_register_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_config +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_shutdown_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_start_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_stop_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-apbridgea 0x00000000 gb_audio_apbridgea_unregister_cport +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_activate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_deactivate_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_disable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_enable_widget +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_get_topology +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_control +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_pcm +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_rx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-gb 0x00000000 gb_audio_gb_set_tx_data_size +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_dump_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_get_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_put_module +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-audio-manager 0x00000000 gb_audio_manager_remove_all +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-gbphy 0x00000000 gb_gbphy_register_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_exit +EXPORT_SYMBOL_GPL drivers/staging/greybus/gb-spilib 0x00000000 gb_spilib_master_init +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_in +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_hd_release +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 __tracepoint_gb_message_submit +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_create_offloaded +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_destroy +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_forced +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_disable_rx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_enable_tx +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_disable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_connection_latency_tag_enable +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_debugfs_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_add +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_release_reserved +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_cport_reserve +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_create +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_del +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_output +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_hd_shutdown +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_interface_request_mode_switch +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_cancel +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_create_flags +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_get_payload_size_max +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_put +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_request_send_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_response_alloc +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_result +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_sync_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_operation_unidirectional_timeout +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 gb_svc_intf_set_power_mode +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_data_rcvd +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_deregister_driver +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_disabled +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_message_sent +EXPORT_SYMBOL_GPL drivers/staging/greybus/greybus 0x00000000 greybus_register_driver +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_probe +EXPORT_SYMBOL_GPL drivers/staging/iio/adc/ad7606 0x00000000 ad7606_remove +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x00000000 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/lustre/lnet/libcfs/libcfs 0x00000000 lustre_insert_debugfs +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 debugfs_lustre_root +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_simple +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_add_vars +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_obd_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_register_stats +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_remove +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 ldebugfs_seq_create +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_cleanup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lprocfs_obd_setup +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_kobj +EXPORT_SYMBOL_GPL drivers/staging/lustre/lustre/obdclass/obdclass 0x00000000 lustre_sysfs_ops +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 channel_has_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_deregister_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_get_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_put_mbo +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_aim +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_register_interface +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_resume_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_start_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_channel +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_stop_enqueue +EXPORT_SYMBOL_GPL drivers/staging/most/mostcore/mostcore 0x00000000 most_submit_mbo +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_io_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_stop_serial_interrupt +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_get_index +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_ops +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_ttyio_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_buffer_skip_nonlatin1 +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putwc_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_putws_s +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x00000000 synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 WILC_DEBUG_LEVEL +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_allow_sleep +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 chip_wakeup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_sleep_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 host_wakeup_notify +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_chip_sleep_manually +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_handle_isr +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_cleanup +EXPORT_SYMBOL_GPL drivers/staging/wilc1000/wilc1000 0x00000000 wilc_netdev_init +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x00000000 n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x00000000 usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 ci_hdrc_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x00000000 hw_phymode_configure +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_init_post +EXPORT_SYMBOL_GPL drivers/usb/chipidea/usbmisc_imx 0x00000000 imx_usbmisc_set_wakeup +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 __ulpi_register_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_read +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_register_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_unregister_interface +EXPORT_SYMBOL_GPL drivers/usb/common/ulpi 0x00000000 ulpi_write +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 g_audio_setup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_start_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_capture +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_audio 0x00000000 u_audio_stop_playback +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_cleanup +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_cdc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_host_addr_u8 +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_ifname +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_get_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_register_netdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_dev_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_gadget +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_host_addr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_set_qmult +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_ether 0x00000000 gether_setup_name_default +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_alloc_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gs_free_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_alloc_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/u_serial 0x00000000 gserial_free_line +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_lock +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_name_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_fs 0x00000000 ffs_single_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_create_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_free_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_get +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_put +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_lun +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_remove_luns +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_cdev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_num_buffers +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_common_set_sysfs +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_config_from_params +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_fs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_hs_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_intf_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_close +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_fsync_sub +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_lun_open +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_show_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_in_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_comp_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_bulk_out_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_ss_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_cdrom +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_file +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_inquiry_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_nofua +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_removable +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 fsg_store_ro +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_mass_storage 0x00000000 store_cdrom_address +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_add_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_borrow_net +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_deregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_free_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_get_next_response +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_msg_parser +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_rm_hdr +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_host_mac +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_medium +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_set_param_vendor +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_signal_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/function/usb_f_rndis 0x00000000 rndis_uninit +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 alloc_ep_req +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 unregister_gadget_item +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_config_only +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_register +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_function_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_get_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_gstrings_attach +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_alloc +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_otg_descriptor_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_put_function_instance +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_remove_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x00000000 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 empty_req_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 free_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 gadget_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 init_dma_pools +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_basic_init +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_enable_dev_setup_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_irq +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_mask_unused_interrupts +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/snps_udc_core 0x00000000 udc_remove +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 gadget_find_ep_by_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_add_gadget_udc_release +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_alloc_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_dequeue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_enable +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_flush +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_fifo_status +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_free_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_queue +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_halt +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_maxpacket_limit +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_ep_set_wedge +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_clear_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_ep_match_desc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_frame_number +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_giveback_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_map_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_selfpowered +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_set_state +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_udc_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unmap_request_by_dev +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_connect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_vbus_draw +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_gadget_wakeup +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_get_gadget_udc_name +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc/udc-core 0x00000000 usb_udc_vbus_handler +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x00000000 ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00000000 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_get_mode +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_queue_resume_work +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readl +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_readw +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_root_disconnect +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writeb +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writel +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x00000000 musb_writew +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_init +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_gen_phy_shutdown +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_gen_create_phy +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_register +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-generic 0x00000000 usb_phy_generic_unregister +EXPORT_SYMBOL_GPL drivers/usb/phy/phy-isp1301 0x00000000 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x00000000 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_get_icount +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_tiocmiwait +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_wait_until_sent +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_generic_write_start +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x00000000 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_adjust_quirks +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_host_template_init +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x00000000 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_cc_change +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_hard_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_receive +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_pd_transmit_complete +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_tcpc_reset +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_sink_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_update_source_capabilities +EXPORT_SYMBOL_GPL drivers/usb/typec/tcpm 0x00000000 tcpm_vbus_change +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode2port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_altmode_update_active +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_cable_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_partner_set_identity +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_plug_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_port_register_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_register_port +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_data_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_opmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_pwr_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_set_vconn_role +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_altmode +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_cable +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_partner +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_plug +EXPORT_SYMBOL_GPL drivers/usb/typec/typec 0x00000000 typec_unregister_port +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_notify +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_register_ppm +EXPORT_SYMBOL_GPL drivers/usb/typec/ucsi/typec_ucsi 0x00000000 ucsi_unregister_ppm +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_add +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_in_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/usb/usbip/usbip-core 0x00000000 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_clear_feature_stalled +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_dti_start +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_process_errored_transfers_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x00000000 wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusb_et_name +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x00000000 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x00000000 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x00000000 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x00000000 uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/whci 0x00000000 whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x00000000 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/fbdev/auo_k190x 0x00000000 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_ddc 0x00000000 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/fbdev/core/fb_sys_fops 0x00000000 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/fbdev/sis/sisfb 0x00000000 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_bit +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_triplet +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x00000000 w1_write_block +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/bch 0x00000000 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 free_bch +EXPORT_SYMBOL_GPL lib/bch 0x00000000 init_bch +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x00000000 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_compress +EXPORT_SYMBOL_GPL net/6lowpan/6lowpan 0x00000000 lowpan_header_decompress +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0x00000000 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0x00000000 ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 bt_debugfs +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_add_psm +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_connect +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_create +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_del +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_put +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_send +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x00000000 l2cap_chan_set_defaults +EXPORT_SYMBOL_GPL net/bluetooth/hidp/hidp 0x00000000 hidp_hid_driver +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 call_dsa_notifiers +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_dev_to_net_device +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_host_dev_to_mii_bus +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_register_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_alloc +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_resume +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_switch_suspend +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 dsa_unregister_switch +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 register_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_dsa_notifier +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x00000000 unregister_switch_driver +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_peek_addrs +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_pull +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_hdr_push +EXPORT_SYMBOL_GPL net/ieee802154/ieee802154 0x00000000 ieee802154_max_payload +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_add +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_active_interfaces_rtnl +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_iterate_stations_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_remove_key +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_set_key_rx_seq +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_tkip_add_iv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_update_mu_groups +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 ieee80211_vif_to_wdev +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x00000000 wdev_to_ieee80211_vif +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_allocate_spi +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_read +EXPORT_SYMBOL_GPL net/nfc/nci/nci_spi 0x00000000 nci_spi_send +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_register +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_set_config +EXPORT_SYMBOL_GPL net/nfc/nci/nci_uart 0x00000000 nci_uart_unregister +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x00000000 wimax_state_get +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_shutdown_all_interfaces +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_vendor_cmd_reply +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x00000000 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL sound/ac97_bus 0x00000000 snd_ac97_reset +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_add_dev_attr +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_card_disconnect_sync +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_apply_vmaster_slaves +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_get_preferred_subdevice +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_ctl_sync_vmaster +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_disconnect +EXPORT_SYMBOL_GPL sound/core/snd 0x00000000 snd_device_initialize +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 _snd_pcm_stream_lock_irqsave +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_hw_constraint_eld +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_mask_intersect +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_rate_range_to_bits +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stop_xrun +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_lock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irq +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x00000000 snd_pcm_stream_unlock_irqrestore +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_close_release_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_open_request_chan +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_request_channel +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_set_config_from_dai_data +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL sound/core/snd-pcm-dmaengine 0x00000000 snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 __snd_seq_driver_register +EXPORT_SYMBOL_GPL sound/core/snd-seq-device 0x00000000 snd_seq_driver_unregister +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_add_pcm_hw_constraints +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_init +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_midi_trigger +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_midi_position +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_parameters +EXPORT_SYMBOL_GPL sound/firewire/snd-firewire-lib 0x00000000 amdtp_am824_set_pcm_position +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 _snd_hdac_read_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 hdac_get_device_id +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_free +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_array_new +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hda_bus_type +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_add_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_alloc_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_enter_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exec_verb_unlocked +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_exit_link_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_free_stream_pages +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_get_response +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_handle_stream_irq +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_init_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_parse_capabilities +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_queue_event +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_remove_device +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_send_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_chip +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_stop_cmd_io +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_bus_update_rirb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_calc_stream_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_check_power_state +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_chmap_to_spk_mask +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_modalias +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_codec_write +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_register +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_set_chip_name +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_device_unregister +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_prepare +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_dsp_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_exec_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_active_channels +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_ch_alloc_from_ca +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_connections +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_stream +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_get_sub_nodes +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_is_supported_format +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_link_power +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_make_cmd +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_override_parm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_down_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_power_up_pm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_print_channel_allocation +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_query_supported_pcm +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_read_parm_uncached +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_refresh_widgets +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_register_chmap_ops +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_add_vendor_verb +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_exit +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_read_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_update_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_regmap_write_raw +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_setup_channel_mapping +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_spk_to_chmap +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_assign +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_cleanup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_clear +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_init +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_release +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_reset +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_set_params +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_setup_periods +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_start +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_stop +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_sync_trigger +EXPORT_SYMBOL_GPL sound/hda/snd-hda-core 0x00000000 snd_hdac_stream_timecounter_init +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x00000000 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __hda_codec_driver_register +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_bus_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_free_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_lpib +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_pos_posbuf +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_get_position +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_init_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_interrupt +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_probe_codecs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_all_streams +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 azx_stop_chip +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_codec_driver_unregister +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_init_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_eapd_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_load_dsp_trigger +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_pcm_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_name +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pin_target +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_correct_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_int_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_num_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_detect_state +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pick_pin_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_register_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_dev_select +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x00000000 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_extra_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 hda_main_out_badness +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_activate_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_add_new_path +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_check_power_status +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_fix_pin_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_hp_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_line_automute +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_mic_autoswitch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_parse_auto_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_path_power_filter +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_spec_init +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_stream_pm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_gen_update_outputs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_from_idx +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec-generic 0x00000000 snd_hda_get_path_idx +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau-utils 0x00000000 adau_calc_pll_cfg +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau1761 0x00000000 adau1761_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_add_widgets +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_has_dsp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_precious_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_readable_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_resume +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_set_micbias_voltage +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_setup_firmware +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-adau17x1 0x00000000 adau17x1_volatile_register +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_dt_ids +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs4271 0x00000000 cs4271_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42l51 0x00000000 cs42l51_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42448_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42888_data +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_of_match +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cs42xx8 0x00000000 cs42xx8_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-es8328 0x00000000 es8328_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-nau8824 0x00000000 nau8824_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_exit +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_common_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm179x-codec 0x00000000 pcm179x_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm3168a 0x00000000 pcm3168a_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_pm_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-pcm512x 0x00000000 pcm512x_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_calc_dmic_clk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_clk_info +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_get_pre_div +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rl6231 0x00000000 rl6231_pll_calc +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_sel_asrc_clk_src +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-rt5645 0x00000000 rt5645_set_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 devm_sigmadsp_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_attach +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_reset +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_restrict_params +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp 0x00000000 sigmadsp_setup +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-i2c 0x00000000 devm_sigmadsp_init_i2c +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sigmadsp-regmap 0x00000000 devm_sigmadsp_init_regmap +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ssm2602 0x00000000 ssm2602_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ts3a227e 0x00000000 ts3a227e_enable_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_pm +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_probe +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_regmap_config +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8804 0x00000000 wm8804_remove +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x00000000 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x00000000 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_get_dma_channel +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-fsl-asrc 0x00000000 fsl_asrc_platform +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-audmux 0x00000000 imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_cpu +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_canonicalize_dailink +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clean_reference +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_disable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_clk_enable +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_convert_fixup +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_init_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_routing +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_of_parse_widgets +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_clk +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_convert +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_parse_graph_dai +EXPORT_SYMBOL_GPL sound/soc/generic/snd-soc-simple-card-utils 0x00000000 asoc_simple_card_set_dailink_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_kcontrol_get_value +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_mark_endpoints_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 devm_snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_prepare_slave_config +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_dmaengine_pcm_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_component_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_info_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_bytes_tlv_callback +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_get_kcontrol +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_card_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_async_complete +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_exit_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_init_regmap +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_read32 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_jack +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_update_bits_async +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_component_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_bclk_ratio +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_disable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_bias_level +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_force_enable_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_dapm +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_kcontrol_widget +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_nc_pin_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_control +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_sync_unlocked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_find_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_id +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpiods +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_lookup_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_link_codecs +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_get_dai_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_prefix +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_audio_simple_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_daifmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_of_parse_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_dai_link +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_remove_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_runtime_set_dai_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_ac97_ops_of_reset +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_component +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x00000000 soc_ac97_ops +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_alloc_sysex_buffer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_disconnect +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_midi +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_init_pcm +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_midi_id +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_acquire +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_pcm_release +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_probe +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_data +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_read_serial_number +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_resume +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_raw_message_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_send_sysex_message +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_start_timer +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_suspend +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_version_request_async +EXPORT_SYMBOL_GPL sound/usb/line6/snd-usb-line6 0x00000000 line6_write_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __destroy_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __find_linux_pte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_phy_provider_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __of_reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_mmio_clk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __reset_control_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtc_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __spin_yield +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xhci_dbg_quirks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_vm_h_cppr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_vm_h_eoi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_vm_h_ipi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_vm_h_ipoll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __xive_vm_h_xirr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 _copy_from_iter_flushcache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarmtimer_get_rtcdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 analyse_instr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arch_set_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_get_cmd_descript +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_port_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_forget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badrange_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 boot_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_switchdev_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 confirm_error_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copro_calculate_slb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copro_flush_all_slbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 copro_handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_add_dev_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_add_dev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_core_index_of_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_feature_keys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_first_thread_of_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_remove_dev_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_remove_dev_attr_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_to_core_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_add_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_boost_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_dbs_governor_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_disable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_resolve_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_boost_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_enable_fast_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_attr_scaling_boost_freqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_freq_transition_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_generic_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_current_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_get_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_policy_transition_delay_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_remove_update_util_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_show_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_index_unsorted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_table_validate_and_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cs47l24_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_afu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_afu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_cx4_setup_msi_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_cx4_teardown_msi_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_next_msi_hwirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_pci_associate_default_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_pci_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cxl_update_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dbs_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_ncq_prio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_coredumpv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_genpd_set_performance_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_clock_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_transition_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_max_volt_latency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_suspend_opp_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_is_turbo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_add_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_cpumask_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_opp_desc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_get_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_of_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_put_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_register_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_remove_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_clkname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_prop_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_regulators +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_sharing_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_set_supported_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_get_pstate_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_opp_unregister_set_opp_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_cooling_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_disable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_enable_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_edev_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_get_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_reset_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_event_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devfreq_get_devfreq_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_add_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_devfreq_event_remove_edev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_allocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nsio_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvdimm_memremap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_get_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_allocate_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 display_timings_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_any_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_chan_by_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dmaengine_unmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_con +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 early_find_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_owner +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_has_mcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_add_mc_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_mod_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_npe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_handle_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_raw_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_set_report_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 edac_stop_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_add_device_tree_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_add_device_tree_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_add_sysfs_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_dev_check_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_dev_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_iommu_group_to_pe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_inject_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_set_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eeh_pe_state_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_adjust_port_wakeup_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_handshake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emulate_vsx_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emulate_vsx_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_edev_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_get_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_register_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_property_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_set_state_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 extcon_unregister_notifier_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fb_videomode_from_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_altivec_to_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_fp_to_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_vsx_to_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsl8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_access_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genpd_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_governor_parent_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_hwpoison_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_slice_psize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_attr_set_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gov_update_cpu_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 governor_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_pingroup_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash__alloc_context_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_page_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 have_governor_per_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hpte_page_sizes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 htab_hash_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_register_with_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_client_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_gpio_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_generic_scl_recovery +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_handle_smbus_host_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_new_secondary_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_of_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_parse_fw_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_recover_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_phb_dynamic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 interval_tree_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_direction_to_tce_perm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_flush_tce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_release_ownership +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_take_ownership +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_check_gpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_check_ioba +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_table_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_table_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_xchg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_tce_xchg_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_pnv_opal_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_xive_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isa_bridge_pcidev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_register_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernstart_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_disable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_enable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get_or_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_unregister_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_alloc_hpt_cma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_free_hpt_cma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_hv_vm_activated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_hv_vm_deactivated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_add_revmap_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_clear_ref_hpte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_do_h_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_do_h_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_entry_trampoline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_find_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_gpa_to_ua +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_h_get_tce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_hcall_impl_hv_realmode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_host_rm_ops_hv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_hv_entry_trampoline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_hwrng_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_invalidate_hpte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_tce_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_tce_validate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvmppc_update_dirty_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_blink_set_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_notify_brightness_hw_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_init_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nopm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_nosleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_set_brightness_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_sysfs_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 led_update_brightness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_check_print_event_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 machine_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_calc_reg_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 maxim_charger_currents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_received_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_chan_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_peek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_client_txdone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_free_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_request_channel_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mbox_send_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_get_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mc146818_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memstart_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_lookup_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_mapped_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_mapped_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_preregistered +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_ua_to_hpa +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_iommu_ua_to_hpa_rm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_abort_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_cmdq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_get_ext_csd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_pwrseq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_regulator_set_vqmmc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_send_tuning +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_feature_keys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_kernel_ssize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_linear_psize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_partition_table_set_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_psize_defs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_slb_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_rx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_strmode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpc8xxx_spi_tx_buf_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpic_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_memremap_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_set_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_blk_region_to_dimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_bus_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_dimm_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_in_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_cmd_out_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_device_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_fletcher64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_mapping_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_numa_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_region_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_badblocks_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_blk_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_add_badrange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_check_dimm_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_clear_poison +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_cmd_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_has_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_pmem_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_provider_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_region_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_setup_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvdimm_volatile_region_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_read_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_cell_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvmem_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_register_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 od_unregister_powersave_bias_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_highest_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_alias_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_changeset_revert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_console_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_cpufreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_detach_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_devfreq_cooling_register_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_device_uevent_modalias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_display_timings_exist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_get_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_is_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_request_slave_channel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_router_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_dma_xlate_by_chan_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fdt_unflatten_tree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_gen_pool_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_provider_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_parse_idle_states +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_genpd_remove_last +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_display_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_dma_window +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_fb_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_pci_domain_nr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_regulator_init_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_get_videomode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i8042_aux_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_i8042_kbd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_find_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_get_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_and_map_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_pci +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_parse_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_irq_to_resource_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_mpc8xxx_spi_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_msi_configure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_cell_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_nvmem_device_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_apply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_overlay_remove_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_check_probe_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_dma_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_find_child_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_devfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_host_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_get_max_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_parse_bus_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pci_range_parser_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phandle_iterator_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_provider_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_phy_simple_xlate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_default_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_depopulate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_prop_next_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_count_elems_of_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_string_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u32_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_u64_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_property_read_variable_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_get_state_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reconfig_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_regulator_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_init_by_idx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_device_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reserved_mem_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_reset_control_array_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_resolve_phandles +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_scan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_ntrips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_get_trip_points +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_thermal_is_trip_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_dr_mode_by_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_host_tpl_support +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_usb_update_otg_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_hub_status_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ohci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_async_get_token_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_async_release_token +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_async_wait_response +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_async_wait_response_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_error_code +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_flash_erase +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_flash_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_get_sensor_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_i2c_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_int_eoi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_int_set_mfrr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_invalid_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_ipmi_recv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_ipmi_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_leds_get_ind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_leds_set_ind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_message_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_message_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_poll_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_prd_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_rtc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_rtc_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_tpo_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_tpo_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_write_oppanel_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_xscom_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 opal_xscom_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 palmas_ext_control_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_device_node_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_address_to_pio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_bus_by_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_iomap_wc_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_device_node_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pasid_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_pri_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_traverse_device_nodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_alloc_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_claim_one_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_finish_adding_to_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_free_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_free_controller_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_map_io_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_scan_phb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcibios_unmap_io_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgtable_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pgtable_cache_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_calibrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_create_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_trigger_change_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_led_triggers_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_optional_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_get_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_pm_runtime_put_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_power_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_remove_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL vmlinux 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_node_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dt_subnode_to_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinconf_generic_dump_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_count_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_devname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_find_gpio_range_from_pin_nolock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_force_sleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_generic_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_get_group_pins +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_gpio_set_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_parse_index_with_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_default_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_idle_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_pm_select_sleep_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_register_and_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_configs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_add_map_mux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_free_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinctrl_utils_reserve_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_add_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_get_function_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pinmux_generic_remove_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_add_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_remove_subdomain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_genpd_syscore_poweron +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_global_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_suspend_target_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_cxl_enable_phb_kernel_api +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_cxl_phb_set_peer_afu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_cxl_phb_to_afu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_get_supported_cpuidle_states +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_get_device_tree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_get_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_get_presence_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_get_slot_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_on_cxl_phb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_set_p2p +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pnv_pci_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 policy_has_boost_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_external_power_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_battery_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_get_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_property_is_writeable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_reg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_register_no_ws +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_input_current_limit_from_supplier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_set_property +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unreg_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_register_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_control_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powercap_unregister_zone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powernv_get_random_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 powerpc_firmware_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ppc64_caches +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ppc_proc_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ppc_tb_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pseries_ioei_notifier_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pstore_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_adjust_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_apply_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_capture +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_get_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwm_set_chip_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_add_with_polarity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 radix_kvm_prefetch_workaround +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 realmode_pfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_drop_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_cxl_calls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_async_complete_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_attach_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_can_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_check_range_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_field_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_fields_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_max_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_read_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_raw_write_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_reg_stride +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_get_val_endian +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_multi_reg_write_bypassed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_parse_val +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_raw_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_update_bits_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regmap_write_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_bulk_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_error_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_hardware_vsel_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_linear_step +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_hardware_vsel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_ascend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_map_voltage_linear_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_register_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_active_discharge_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_pull_down_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_soft_start_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 regulator_unregister_supply_alias +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 release_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_phb_dynamic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replay_system_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reserve_pmc_hardware +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_assert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_deassert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_control_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_controller_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_add_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_alloc_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_del_mport_pw_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_dma_prep_xfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_enable_rx_tx_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_free_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_comptag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_init_mports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_local_set_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_lock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_map_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_chk_dev_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_class +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_efb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_get_physefb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_pw_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_register_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_mport_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_add_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_clr_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_route_get_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_set_port_lockout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unlock_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unmap_outb_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_mport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rio_unregister_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rq_flush_dcache_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtas_cancel_event_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s2idle_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_lpm_ignore_phy_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_regs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sb800_prefetch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scom_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scom_find_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scom_map_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 screen_pos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_run_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_signal_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_get_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_set_mctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_do_startup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_em485_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_init_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_get_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rpm_put_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_rx_dma_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_set_defaults +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 slice_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_send_reschedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 soc_device_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_controller_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_finalize_current_transfer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_flash_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_replace_transfers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_res_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_slave_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_split_transfers_maxsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_statistics_add_transfer_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 store_sampling_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_max_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_deferred_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_attr_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_obj_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_port_same_parent_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 switchdev_trans_item_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_pdevname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_device_to_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_device_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tb_to_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_add_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_cooling_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_generate_netlink_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_notify_framework +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_of_cooling_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_remove_hwmon_sysfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_bind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_device_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_slope +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_temp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_get_zone_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_of_sensor_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_set_trips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 threads_core_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 threads_per_core +EXPORT_SYMBOL_GPL vmlinux 0x00000000 threads_per_subcore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 threads_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_blk_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nd_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_nvdimm_bus_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 to_of_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_core_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_tis_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps65912_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_earlycon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_cxl_calls +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_switchdev_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_add_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_hang_symptom_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_prefetch_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_resume_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_suspend_wakeups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_asmedia_modifyflowcontrol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bind_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_bus_idr_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_choose_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_intel_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_common_endpoints_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_dr_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_maximum_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_phy_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_amd_remote_wakeup_quirk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_claim_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_hub_release_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_led_activity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_of_get_companion_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_otg_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_get_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_current +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_charger_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_phy_set_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_put_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_remove_phy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_state_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_urb_ep_type_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usb_xhci_needs_pci_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_copy_crb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_init_rx_win_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_init_tx_win_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_paste_crb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_rx_win_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_tx_win_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_win_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vas_win_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vc_scrolldelta_helper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_spapr_iommu_eeh_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_spapr_pci_eeh_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_spapr_pci_eeh_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 videomode_from_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virq_to_hw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmalloc_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 walk_system_ram_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wireless_nlevent_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_revd_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_of_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_aod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8997_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wm8998_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_dbg_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_gen_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xhci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xics_wake_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_cleanup_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_alloc_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_alloc_vp_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_configure_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_configure_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_default_eq_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_disable_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_disable_vp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_enable_vp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_free_vp_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_get_vp_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_populate_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_native_sync_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xive_tima +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/ppc64el/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/ppc64el/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/ppc64el/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/ppc64el/generic.modules @@ -0,0 +1,4795 @@ +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_aspeed_vuart +8250_dw +8250_exar +8250_men_mcb +8250_moxa +8255 +8255_pci +8390 +842 +842_compress +842_decompress +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm8607 +88pm860x-ts +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +9p +9pnet +9pnet_rdma +9pnet_virtio +DAC960 +a100u2w +a3d +a8293 +aacraid +aat2870-regulator +aat2870_bl +ab3100 +ab3100-otp +abp060mg +ac97_bus +acard-ahci +acecad +acenic +acp_audio_dma +act200l-sir +act8865-regulator +act8945a +act8945a-regulator +act8945a_charger +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +actisys-sir +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5592r +ad5592r-base +ad5593r +ad5624r_spi +ad5686 +ad5755 +ad5761 +ad5764 +ad5791 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7303 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7606_par +ad7606_spi +ad7746 +ad7766 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad7923 +ad799x +ad8366 +ad8801 +ad9523 +ad9832 +ad9834 +ad_sigma_delta +adc-keys +adc128d818 +adcxx +addi_apci_1032 +addi_apci_1500 +addi_apci_1516 +addi_apci_1564 +addi_apci_16xx +addi_apci_2032 +addi_apci_2200 +addi_apci_3120 +addi_apci_3501 +addi_apci_3xxx +addi_watchdog +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adf7242 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16209 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adl_pci6208 +adl_pci7x3x +adl_pci8164 +adl_pci9111 +adl_pci9118 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm8211 +adm9240 +adp5520-keys +adp5520_bl +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +adt7310 +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adt7x10 +adummy +adutux +adv7511 +adv7604 +adv7842 +adv_pci1710 +adv_pci1720 +adv_pci1723 +adv_pci1724 +adv_pci1760 +adv_pci_dio +advansys +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes_ti +af9013 +af9033 +af_alg +af_key +af_packet_diag +afe4403 +afe4404 +affs +ah4 +ah6 +ahci +ahci_ceva +ahci_platform +ahci_qoriq +aic79xx +aic7xxx +aic94xx +aim_cdev +aim_network +aim_sound +aim_v4l2 +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airspy +ak8974 +ak8975 +al3320a +algif_aead +algif_hash +algif_rng +algif_skcipher +ali-ircc +alim7101_wdt +altera-ci +altera-cvp +altera-msgdma +altera-pr-ip-core +altera-pr-ip-core-plat +altera-ps-spi +altera-stapl +altera_jtaguart +altera_ps2 +altera_tse +altera_uart +alx +am2315 +am53c974 +amc6821 +amd +amd5536udc_pci +amd8111e +amdgpu +amplc_dio200 +amplc_dio200_common +amplc_dio200_pci +amplc_pc236 +amplc_pc236_common +amplc_pc263 +amplc_pci224 +amplc_pci230 +amplc_pci236 +amplc_pci263 +ams-iaq-core +ams369fg06 +analog +analogix-anx78xx +anatop-regulator +ansi_cprng +anubis +aoe +apbps2 +apds9300 +apds9802als +apds990x +apds9960 +appledisplay +appletalk +appletouch +applicom +aquantia +ar1021_i2c +ar5523 +ar7part +arc-rawmode +arc-rimi +arc4 +arc_ps2 +arc_uart +arcmsr +arcnet +arcpgu +arcxcnn_bl +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arp_tables +arpt_mangle +arptable_filter +as102_fe +as3711-regulator +as3711_bl +as3722-regulator +as3935 +as5011 +asc7621 +ascot2e +asix +aspeed-pwm-tacho +ast +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at803x +at86rf230 +ata_generic +ata_piix +atbm8830 +aten +ath +ath10k_core +ath10k_pci +ath10k_sdio +ath10k_usb +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas-ph-sensor +atm +atmel +atmel-flexcom +atmel-hlcdc +atmel_captouch +atmel_mxt_ts +atmel_pci +atmtcp +atp870u +atusb +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo-pixcir-ts +auo_k1900fb +auo_k1901fb +auo_k190x +auth_rpcgss +authenc +authencesn +autofs4 +avmfritz +ax25 +ax88179_178a +axp20x +axp20x-i2c +axp20x-pek +axp20x-regulator +axp20x_ac_power +axp20x_adc +axp20x_battery +axp20x_usb_power +axp288_adc +axp288_charger +axp288_fuel_gauge +b1 +b1dma +b1pci +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +b53_common +b53_mdio +b53_mmap +b53_spi +b53_srab +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcache +bch +bcm-phy-lib +bcm-sf2 +bcm203x +bcm3510 +bcm590xx +bcm590xx-regulator +bcm5974 +bcm7xxx +bcm87xx +bcma +bcma-hcd +bcmsysport +bd6107 +bd9571mwv +bd9571mwv-regulator +bdc +bdc_pci +be2iscsi +be2net +befs +belkin_sa +bfa +bfq +bfs +bfusb +bh1750 +bh1770glc +bh1780 +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluetooth +bluetooth_6lowpan +bma150 +bma180 +bma220_spi +bmc150-accel-core +bmc150-accel-i2c +bmc150-accel-spi +bmc150_magn +bmc150_magn_i2c +bmc150_magn_spi +bmg160_core +bmg160_i2c +bmg160_spi +bmi160_core +bmi160_i2c +bmi160_spi +bmp280 +bmp280-i2c +bmp280-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bnxt_en +bnxt_re +bonding +bpa10x +bpck +bpqether +bq2415x_charger +bq24190_charger +bq24257_charger +bq24735-charger +bq25890_charger +bq27xxx_battery +bq27xxx_battery_hdq +bq27xxx_battery_i2c +br2684 +br_netfilter +brcmfmac +brcmsmac +brcmutil +brd +bridge +broadcom +broadsheetfb +bsd_comp +bsr +bt878 +btbcm +btcoexist +btintel +btmrvl +btmrvl_sdio +btqca +btrfs +btrtl +btsdio +bttv +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +c4 +c67x00 +c6xdigio +c_can +c_can_pci +c_can_platform +cachefiles +cadence_wdt +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +caif_virtio +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +cap11xx +capi +capidrv +capmode +carl9170 +carminefb +cassini +cast5_generic +cast6_generic +cast_common +catc +cb710 +cb710-mmc +cb_pcidas +cb_pcidas64 +cb_pcidda +cb_pcimdas +cb_pcimdda +cc2520 +cc770 +cc770_isa +cc770_platform +ccm +ccree +ccs811 +cdc-acm +cdc-phonet +cdc-wdm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc_subset +cec +ceph +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +ch9200 +chacha20_generic +chacha20poly1305 +chaoskey +charlcd +chash +chcr +chipone_icn8318 +chipreg +chnl_net +ci_hdrc +ci_hdrc_imx +ci_hdrc_msm +ci_hdrc_pci +ci_hdrc_tegra +ci_hdrc_usb2 +ci_hdrc_zevio +cicada +cifs +cirrus +cirrusfb +clip +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm32181 +cm3232 +cm3323 +cm3605 +cm36651 +cma3000_d0x +cma3000_d0x_i2c +cmac +cmdlinepart +cmm +cmtp +cnic +cobalt +cobra +coda +colibri-vf50-ts +com20020 +com20020-pci +com90io +com90xx +comedi +comedi_8254 +comedi_8255 +comedi_bond +comedi_isadma +comedi_parport +comedi_pci +comedi_test +comedi_usb +comm +contec_pci_dio +cordic +core +cortina +cp210x +cpc925_edac +cpcap-adc +cpcap-battery +cpcap-pwrbutton +cpcap-regulator +cpia2 +cpsw_ale +cramfs +crc-itu-t +crc-vpmsum_test +crc32_generic +crc32c-vpmsum +crc4 +crc7 +crc8 +crct10dif-vpmsum +cros_ec_accel_legacy +cryptd +crypto_engine +crypto_user +cryptoloop +cs3308 +cs5345 +cs53l32a +csiostor +cuse +cw1200_core +cw1200_wlan_sdio +cw1200_wlan_spi +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24117 +cx24120 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx8800 +cx8802 +cx88xx +cxacru +cxd2099 +cxd2820r +cxd2841er +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxgbit +cxl +cxlflash +cy8ctmg110_ts +cyapatp +cyber2000fb +cyberjack +cyclades +cypress_cy7c63 +cypress_firmware +cypress_m8 +cytherm +cyttsp4_core +cyttsp4_i2c +cyttsp4_spi +cyttsp_core +cyttsp_i2c +cyttsp_i2c_common +cyttsp_spi +da280 +da311 +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052-hwmon +da9052-regulator +da9052_bl +da9052_onkey +da9052_tsi +da9052_wdt +da9055-hwmon +da9055-regulator +da9055_onkey +da9055_wdt +da9062-core +da9062-regulator +da9062-thermal +da9062_wdt +da9063-regulator +da9063_onkey +da9063_wdt +da9150-charger +da9150-core +da9150-fg +da9150-gpadc +da9210-regulator +da9211-regulator +dac02 +daqboard2000 +das08 +das08_isa +das08_pci +das16 +das16m1 +das1800 +das6402 +das800 +davicom +dax_pmem +db9 +dc395x +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +ddbridge +de2104x +de4x5 +decnet +deflate +defxx +denali +denali_pci +des_generic +device_dax +devlink +dgnc +dht11 +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +digicolor-usart +diskonchip +diva_idi +diva_mnt +divacapi +divadidd +divas +dl2k +dlci +dlink-dir685-touchkeys +dlm +dln2 +dln2-adc +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dm1105 +dm9601 +dmard06 +dmard09 +dmard10 +dmfe +dmm32at +dmx3191d +dn_rtmsg +dnet +docg3 +docg4 +dp83822 +dp83848 +dp83867 +dpot-dac +drbd +drm +drm_kms_helper +drop_monitor +drv260x +drv2665 +drv2667 +drx39xyj +drxd +drxk +ds1621 +ds1682 +ds1803 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds4424 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155 +dt9812 +dumb-vga-dac +dummy +dummy-irq +dummy_stm +dvb-as102 +dvb-bt8xx +dvb-core +dvb-pll +dvb-ttpci +dvb-ttusb-budget +dvb-usb +dvb-usb-a800 +dvb-usb-af9005 +dvb-usb-af9005-remote +dvb-usb-af9015 +dvb-usb-af9035 +dvb-usb-anysee +dvb-usb-au6610 +dvb-usb-az6007 +dvb-usb-az6027 +dvb-usb-ce6230 +dvb-usb-cinergyT2 +dvb-usb-cxusb +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-dibusb-mc-common +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dvbsky +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-lmedm04 +dvb-usb-m920x +dvb-usb-mxl111sf +dvb-usb-nova-t-usb2 +dvb-usb-opera +dvb-usb-pctv452e +dvb-usb-rtl28xxu +dvb-usb-technisat-usb2 +dvb-usb-ttusb2 +dvb-usb-umt-010 +dvb-usb-vp702x +dvb-usb-vp7045 +dvb_usb_v2 +dw-hdmi +dw-hdmi-ahb-audio +dw-hdmi-cec +dw-hdmi-i2s-audio +dw_dmac +dw_dmac_core +dw_dmac_pci +dw_wdt +dwc-xlgmac +dwc2_pci +dwc3 +dwmac-dwc-qos-eth +dwmac-generic +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e3x0-button +e4000 +earth-pt1 +earth-pt3 +eata +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ec100 +ecdh_generic +echainiv +echo +edt-ft5x06 +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efs +egalax_ts +egalax_ts_serial +ehci-platform +ehset +ektf2127 +elan_i2c +elants_i2c +elo +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +em28xx-v4l +em_canid +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +emc1403 +emc2103 +emc6w201 +emi26 +emi62 +empeg +ems_pci +ems_usb +emu10k1-gp +enc28j60 +enclosure +encx24j600 +encx24j600-regmap +eni +enic +envelope-detector +epat +epia +epic100 +eql +esas2r +esd_usb2 +esi-sir +esp4 +esp4_offload +esp6 +esp6_offload +esp_scsi +et1011c +et131x +ethoc +evbug +exc3000 +exofs +extcon-adc-jack +extcon-arizona +extcon-axp288 +extcon-gpio +extcon-max14577 +extcon-max3355 +extcon-max77693 +extcon-max77843 +extcon-max8997 +extcon-palmas +extcon-rt8973a +extcon-sm5502 +extcon-usb-gpio +ezusb +f2fs +f75375s +f81232 +f81534 +fakelb +fan53555 +farsync +faulty +fb_agm1264k-fl +fb_bd663474 +fb_ddc +fb_hx8340bn +fb_hx8347d +fb_hx8353d +fb_hx8357d +fb_ili9163 +fb_ili9320 +fb_ili9325 +fb_ili9340 +fb_ili9341 +fb_ili9481 +fb_ili9486 +fb_pcd8544 +fb_ra8875 +fb_s6d02a1 +fb_s6d1121 +fb_sh1106 +fb_ssd1289 +fb_ssd1305 +fb_ssd1306 +fb_ssd1325 +fb_ssd1331 +fb_ssd1351 +fb_st7735r +fb_st7789v +fb_sys_fops +fb_tinylcd +fb_tls8204 +fb_uc1611 +fb_uc1701 +fb_upd161704 +fb_watterott +fbtft +fbtft_device +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdp +fdp_i2c +fealnx +ff-memless +fid +firedtv +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fl512 +fld +flexcan +flexfb +floppy +fm10k +fm801-gp +fm_drv +fmc +fmc-chardev +fmc-fakedev +fmc-trivial +fmc-write-eeprom +forcedeth +fore_200e +fotg210-hcd +fotg210-udc +fou +fou6 +fpga-bridge +fpga-mgr +fpga-region +freevxfs +friq +frpw +fsa9480 +fscache +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsl-edma +fsl_lpuart +ftdi-elan +ftdi_sio +ftl +ftsteutates +fujitsu_ts +fusb302 +g450_pll +g760a +g762 +g_acm_ms +g_audio +g_cdc +g_dbgp +g_ether +g_ffs +g_hid +g_mass_storage +g_midi +g_ncm +g_nokia +g_printer +g_serial +g_webcam +g_zero +gadgetfs +gamecon +gameport +garmin_gps +garp +gb-audio-apbridgea +gb-audio-gb +gb-audio-manager +gb-bootrom +gb-es2 +gb-firmware +gb-gbphy +gb-gpio +gb-hid +gb-i2c +gb-light +gb-log +gb-loopback +gb-power-supply +gb-pwm +gb-raw +gb-sdio +gb-spi +gb-spilib +gb-uart +gb-usb +gb-vibrator +gdmtty +gdmulte +gdth +gen_probe +generic +generic-adc-battery +generic_bl +genet +geneve +genwqe_card +gf2k +gfs2 +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +go7007 +go7007-loader +go7007-usb +goku_udc +goodix +gp2ap002a00f +gp2ap020a00f +gp8psk-fe +gpio +gpio-74x164 +gpio-74xx-mmio +gpio-addr-flash +gpio-adnp +gpio-adp5520 +gpio-adp5588 +gpio-altera +gpio-arizona +gpio-axp209 +gpio-bd9571mwv +gpio-beeper +gpio-charger +gpio-da9052 +gpio-da9055 +gpio-dln2 +gpio-dwapb +gpio-exar +gpio-fan +gpio-grgpio +gpio-ir-recv +gpio-ir-tx +gpio-janz-ttl +gpio-kempld +gpio-lp3943 +gpio-lp873x +gpio-lp87565 +gpio-max3191x +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-max77620 +gpio-mb86s7x +gpio-mc33880 +gpio-menz127 +gpio-pca953x +gpio-pcf857x +gpio-pci-idio-16 +gpio-pisosr +gpio-rdc321x +gpio-regulator +gpio-syscon +gpio-tpic2810 +gpio-tps65086 +gpio-tps65218 +gpio-tps65912 +gpio-twl4030 +gpio-twl6040 +gpio-ucb1400 +gpio-viperboard +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +gpio-xra1403 +gpio_backlight +gpio_decoder +gpio_keys +gpio_keys_polled +gpio_mouse +gpio_tilt_polled +gpio_wdt +gr_udc +grace +grcan +gre +greybus +grip +grip_mp +gs_fpga +gs_usb +gsc_hpdi +gspca_benq +gspca_conex +gspca_cpia1 +gspca_dtcs033 +gspca_etoms +gspca_finepix +gspca_gl860 +gspca_jeilinj +gspca_jl2005bcd +gspca_kinect +gspca_konica +gspca_m5602 +gspca_main +gspca_mars +gspca_mr97310a +gspca_nw80x +gspca_ov519 +gspca_ov534 +gspca_ov534_9 +gspca_pac207 +gspca_pac7302 +gspca_pac7311 +gspca_se401 +gspca_sn9c2028 +gspca_sn9c20x +gspca_sonixb +gspca_sonixj +gspca_spca1528 +gspca_spca500 +gspca_spca501 +gspca_spca505 +gspca_spca506 +gspca_spca508 +gspca_spca561 +gspca_sq905 +gspca_sq905c +gspca_sq930x +gspca_stk014 +gspca_stk1135 +gspca_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_touptek +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +gtp +guillemot +gunze +hackrf +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_nokia +hci_uart +hci_vhci +hd44780 +hdc100x +hdlc +hdlc_cisco +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdlcdrv +hdm_dim2 +hdm_i2c +hdm_usb +hdma +hdma_mgmt +hdpvr +he +helene +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfc_usb +hfcmulti +hfcpci +hfcsusb +hfs +hfsplus +hi311x +hi6210-i2s +hi6421-pmic-core +hi6421-regulator +hi6421v530-regulator +hi8435 +hibmc-drm +hid +hid-a4tech +hid-accutouch +hid-alps +hid-apple +hid-appleir +hid-asus +hid-aureal +hid-axff +hid-belkin +hid-betopff +hid-cherry +hid-chicony +hid-cmedia +hid-corsair +hid-cp2112 +hid-cypress +hid-dr +hid-elecom +hid-elo +hid-emsff +hid-ezkey +hid-gaff +hid-gembird +hid-generic +hid-gfrm +hid-gt683r +hid-gyration +hid-holtek-kbd +hid-holtek-mouse +hid-holtekff +hid-icade +hid-ite +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-led +hid-lenovo +hid-logitech +hid-logitech-dj +hid-logitech-hidpp +hid-magicmouse +hid-mf +hid-microsoft +hid-monterey +hid-multitouch +hid-nti +hid-ntrig +hid-ortek +hid-penmount +hid-petalynx +hid-picolcd +hid-pl +hid-plantronics +hid-primax +hid-prodikeys +hid-retrode +hid-rmi +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-konepure +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-ryos +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-custom +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-humidity +hid-sensor-iio-common +hid-sensor-incl-3d +hid-sensor-magn-3d +hid-sensor-press +hid-sensor-prox +hid-sensor-rotation +hid-sensor-temperature +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-steelseries +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-udraw-ps3 +hid-waltop +hid-wiimote +hid-xinmo +hid-zpff +hid-zydacron +hideep +hidp +hih6130 +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843_core +hmc5843_i2c +hmc5843_spi +hmc6352 +hopper +horus3a +hostap +hostap_pci +hostap_plx +hp03 +hp100 +hp206c +hpfs +hpilo +hpsa +hptiop +hsi +hsi_char +hso +hsr +ht16k33 +htc-pasic3 +hts221 +hts221_i2c +hts221_spi +htu21 +huawei_cdc_ncm +hvcs +hvcserver +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +hx711 +hx8357 +hysdn +i1480-dfu-usb +i1480-est +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-ali1535 +i2c-ali1563 +i2c-ali15x3 +i2c-amd756 +i2c-amd8111 +i2c-arb-gpio-challenge +i2c-cbus-gpio +i2c-demux-pinctrl +i2c-designware-pci +i2c-diolan-u2c +i2c-dln2 +i2c-gpio +i2c-hid +i2c-i801 +i2c-isch +i2c-kempld +i2c-matroxfb +i2c-mpc +i2c-mux +i2c-mux-gpio +i2c-mux-gpmux +i2c-mux-ltc4306 +i2c-mux-mlxcpld +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-pinctrl +i2c-mux-reg +i2c-nforce2 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +i2c-robotfuzz-osif +i2c-simtec +i2c-sis5595 +i2c-sis630 +i2c-sis96x +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-via +i2c-viapro +i2c-viperboard +i2c-xiic +i40e +i40evf +i40iw +i5k_amb +i6300esb +i740fb +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_qib +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ibm-cffps +ibmaem +ibmpex +ibmpowernv +ibmveth +ibmvfc +ibmvnic +ibmvscsi +ibmvscsis +ice40-spi +icom +icp +icp_multi +icplus +ics932s401 +ideapad_slidebar +idma64 +idmouse +idt77252 +idt_89hpesx +idt_gen2 +idt_gen3 +idtcps +ieee802154 +ieee802154_6lowpan +ieee802154_socket +ifb +ife +ifi_canfd +iforce +igb +igbvf +igorplugusb +iguanair +ii_pci20kc +iio-mux +iio-trig-hrtimer +iio-trig-interrupt +iio-trig-loop +iio-trig-sysfs +iio_dummy +iio_hwmon +ila +ili210x +ili922x +ili9320 +img-ascii-lcd +img-i2s-in +img-i2s-out +img-parallel-out +img-spdif-in +img-spdif-out +imm +imon +ims-pcu +imx074 +imx6ul_tsc +ina209 +ina2xx +ina2xx-adc +ina3221 +industrialio +industrialio-buffer-cb +industrialio-configfs +industrialio-sw-device +industrialio-sw-trigger +industrialio-triggered-buffer +industrialio-triggered-event +inet_diag +inexio +inftl +initio +input-leds +input-polldev +int51x1 +intel-xway +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +intel_vr_nor +interact +inv-mpu6050 +inv-mpu6050-i2c +inv-mpu6050-spi +io_edgeport +io_ti +ioc4 +iowarrior +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipack +ipaq +ipcomp +ipcomp6 +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_powernv +ipmi_poweroff +ipmi_si +ipmi_ssif +ipmi_watchdog +ipoctal +ipr +ips +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +ipw +ipw2100 +ipw2200 +ipx +ir-hix5hd2 +ir-jvc-decoder +ir-kbd-i2c +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +ir-rc5-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sharp-decoder +ir-sony-decoder +ir-spi +ir-usb +ir-xmp-decoder +ir35221 +ircomm +ircomm-tty +irda +irda-usb +irlan +irnet +irtty-sir +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl29125 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isl9305 +isofs +isp116x-hcd +isp1362-hcd +isp1704_charger +isp1760 +it913x +itd1000 +itg3200 +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_cm +iw_cxgb3 +iw_cxgb4 +iw_nes +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlmvm +iwlwifi +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsa1212 +jsm +kafs +kalmia +kaweth +kbic +kbtab +kcm +kcomedilib +ke_counter +kempld-core +kempld_wdt +kernelcapi +keyspan +keyspan_pda +keyspan_remote +keywrap +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kmx61 +ko2iblnd +kobil_sct +ks0108 +ks7010 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksocklnd +ksz884x +ksz_common +ksz_spi +ktti +kvaser_pci +kvaser_usb +kvm +kvm-hv +kvm-pr +kxcjk-1013 +kxsd9 +kxsd9-i2c +kxsd9-spi +kxtj9 +kyber-iosched +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +l2tp_ppp +l4f00242t03 +l64781 +lan78xx +lan9303-core +lan9303_i2c +lan9303_mdio +lanai +lapb +lapbether +latch-addr-flash +lattice-ecp3-config +lcd +ld9040 +ldusb +lec +led-class-flash +leds-88pm860x +leds-aat1290 +leds-adp5520 +leds-as3645a +leds-bcm6328 +leds-bcm6358 +leds-bd2802 +leds-blinkm +leds-cpcap +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-is31fl319x +leds-is31fl32xx +leds-ktd2692 +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp3952 +leds-lp5521 +leds-lp5523 +leds-lp5562 +leds-lp55xx-common +leds-lp8501 +leds-lp8788 +leds-lp8860 +leds-lt3593 +leds-max77693 +leds-max8997 +leds-mc13783 +leds-menf21bmc +leds-mt6323 +leds-pca9532 +leds-pca955x +leds-pca963x +leds-powernv +leds-pwm +leds-regulator +leds-tca6507 +leds-tlc591xx +leds-wm831x-status +leds-wm8350 +ledtrig-activity +ledtrig-backlight +ledtrig-camera +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +ledtrig-usbport +lego_ev3_battery +legousbtower +lg-vl600 +lg2160 +lgdt3305 +lgdt3306a +lgdt330x +lgs8gxx +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libahci_platform +libceph +libcfs +libcomposite +libcrc32c +libcxgb +libcxgbi +libertas +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +lineage-pem +linear +liquidio +liquidio_vf +lirc_dev +lirc_zilog +lis3lv02d +lis3lv02d_i2c +lis3lv02d_spi +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533-core +lm3533-ctrlbank +lm3533_bl +lm3630a_bl +lm3639_bl +lm363x-regulator +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95234 +lm95241 +lm95245 +lmp91000 +lms283gf05 +lms501kf03 +lmv +lnbh25 +lnbp21 +lnbp22 +lnet +lnet_selftest +lockd +lov +lp +lp3943 +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp872x +lp873x +lp873x-regulator +lp8755 +lp87565 +lp87565-regulator +lp8788-buck +lp8788-charger +lp8788-ldo +lp8788_adc +lp8788_bl +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2471 +ltc2485 +ltc2497 +ltc2632 +ltc2941-battery-gauge +ltc2945 +ltc2978 +ltc2990 +ltc3589 +ltc3651-charger +ltc3676 +ltc3815 +ltc4151 +ltc4215 +ltc4222 +ltc4245 +ltc4260 +ltc4261 +ltr501 +ltv350qv +lustre +lv5207lp +lvds-encoder +lvstest +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +m25p80 +m2m-deinterlace +m52790 +m62332 +m88ds3103 +m88rs2000 +m88rs6000t +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +m_can +ma600-sir +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +mac80211 +mac80211_hwsim +mac802154 +mac_hid +macb +macsec +macvlan +macvtap +mag3110 +magellan +mailbox-altera +mailbox-test +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +marvell +marvell10g +matrix-keymap +matrix_keypad +matrox_w1 +matroxfb_DAC1064 +matroxfb_Ti3026 +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +max1027 +max11100 +max1111 +max1118 +max11801_ts +max1363 +max14577-regulator +max14577_charger +max14656_charger_detector +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max1721x_battery +max197 +max20751 +max2165 +max30100 +max30102 +max3100 +max31722 +max31785 +max31790 +max3421-hcd +max34440 +max44000 +max517 +max5481 +max5487 +max5821 +max63xx_wdt +max6621 +max6639 +max6642 +max6650 +max6697 +max6875 +max7359_keypad +max77620-regulator +max77620_thermal +max77620_wdt +max77686-regulator +max77693-haptic +max77693-regulator +max77693_charger +max77802-regulator +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925-regulator +max8925_bl +max8925_onkey +max8925_power +max8952 +max8973-regulator +max8997-regulator +max8997_charger +max8997_haptic +max8998 +max8998_charger +max9611 +maxim_thermocouple +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc3230 +mc44s803 +mcb +mcb-lpc +mcb-pci +mcba_usb +mceusb +mchp23k256 +mcp2120-sir +mcp251x +mcp3021 +mcp320x +mcp3422 +mcp4131 +mcp4531 +mcp4725 +mcp4922 +mcryptd +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md-cluster +md4 +md5-ppc +mdc +mdc800 +mdev +mdio +mdio-bcm-unimac +mdio-bitbang +mdio-cavium +mdio-gpio +mdio-hisi-femac +mdio-mux +mdio-mux-gpio +mdio-mux-mmioreg +mdio-octeon +mdio-thunder +me4000 +me_daq +media +megachips-stdpxxxx-ge-b850v3-fw +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +melfas_mip4 +memory-notifier-error-inject +memstick +men_z135_uart +men_z188_adc +mena21_wdt +menf21bmc +menf21bmc_hwmon +menf21bmc_wdt +metro-usb +metronomefb +mf6x4 +mgag200 +mgc +mi0283qt +michael_mic +micrel +microchip +microread +microread_i2c +microtek +mii +minix +mip6 +mipi-dbi +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlx90614 +mlxfw +mlxsw_core +mlxsw_i2c +mlxsw_minimal +mlxsw_pci +mlxsw_spectrum +mlxsw_switchib +mlxsw_switchx2 +mma7455_core +mma7455_i2c +mma7455_spi +mma7660 +mma8450 +mma8452 +mma9551 +mma9551_core +mma9553 +mmc35240 +mmc_block +mmc_spi +mms114 +mn88472 +mn88473 +mos7720 +mos7840 +mostcore +motorola-cpcap +moxa +mpc624 +mpl115 +mpl115_i2c +mpl115_spi +mpl3115 +mpls_gso +mpls_iptunnel +mpls_router +mpoa +mpr121_touchkey +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mq-deadline +mrf24j40 +mrp +ms5611_core +ms5611_i2c +ms5611_spi +ms5637 +ms_block +ms_sensors_i2c +mscc +msdos +msi001 +msi2500 +msp3400 +mspro_block +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt29f_spinand +mt312 +mt352 +mt6311-regulator +mt6323-regulator +mt6397-core +mt6397-regulator +mt7530 +mt7601u +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtd_dataflash +mtdblock +mtdblock_ro +mtdoops +mtdram +mtdswap +mtip32xx +mtk-quadspi +mtk-sd +mtouch +multipath +multiq3 +musb_hdrc +mux-adg792a +mux-core +mux-gpio +mux-mmio +mv88e6060 +mv88e6xxx +mv_u3d_core +mv_udc +mvmdio +mvsas +mvumi +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxc4005 +mxc6255 +mxl111sf-demod +mxl111sf-tuner +mxl301rf +mxl5005s +mxl5007t +mxl5xx +mxser +mxuport +myri10ge +n5pf +n_gsm +n_hdlc +n_r3964 +n_tracerouter +n_tracesink +nand +nand_bch +nand_ecc +nandsim +national +natsemi +nau7802 +navman +nb8800 +nbd +nci +nci_spi +nci_uart +ncpfs +nct7802 +nct7904 +nd_blk +nd_btt +nd_pmem +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netlink_diag +netrom +netup-unidvb +netxen_nic +newtonkbd +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfc +nfc_digital +nfcmrvl +nfcmrvl_i2c +nfcmrvl_spi +nfcmrvl_uart +nfcmrvl_usb +nfcsim +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfp +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nftl +ngene +nhc_dest +nhc_fragment +nhc_hop +nhc_ipv6 +nhc_mobility +nhc_routing +nhc_udp +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +ni_labpc +ni_labpc_common +ni_labpc_isadma +ni_labpc_pci +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +ni_usb6501 +nicpf +nicstar +nicvf +nilfs2 +niu +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +nosy +notifier-error-inject +nouveau +nozomi +nps_enet +ns558 +ns83820 +nsc-ircc +nsh +ntb +ntb_hw_idt +ntb_hw_switchtec +ntb_netdev +ntb_perf +ntb_pingpong +ntb_tool +ntb_transport +ntc_thermistor +ntfs +null_blk +nvidiafb +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +nx-compress +nx-compress-powernv +nx-compress-pseries +nxp-nci +nxp-nci_i2c +nxp-ptn3460 +nxt200x +nxt6000 +obdclass +obdecho +ocfb +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +ocrdma +of_mmc_spi +of_xilinx_wdt +ofpart +ohci-platform +old_belkin-sir +omap4-keypad +omfs +omninet +on20 +on26 +onenand +opal-prd +opencores-kbd +openvswitch +oprofile +opt3001 +opticon +option +or51132 +or51211 +orangefs +orinoco +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osc +osd +osst +oti6858 +ov2640 +ov5642 +ov7640 +ov7670 +ov772x +ov9640 +ov9740 +overlay +oxu210hp-hcd +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +pa12203001 +palmas-pwrbutton +palmas-regulator +palmas_gpadc +pandora_bl +panel +panel-innolux-p079zca +panel-jdi-lt070me05000 +panel-lg-lg4573 +panel-lvds +panel-orisetech-otm8009a +panel-panasonic-vvx10f034n00 +panel-raspberrypi-touchscreen +panel-samsung-ld9040 +panel-samsung-s6e3ha2 +panel-samsung-s6e63j0x03 +panel-samsung-s6e8aa0 +panel-seiko-43wvf1g +panel-sharp-lq101r1sx01 +panel-sharp-ls043t1le01 +panel-simple +panel-sitronix-st7789v +parade-ps8622 +paride +parkbd +parman +parport +parport_ax88796 +parport_pc +parport_serial +pata_ali +pata_amd +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cypress +pata_efar +pata_hpt366 +pata_hpt37x +pata_hpt3x2n +pata_hpt3x3 +pata_it8213 +pata_it821x +pata_jmicron +pata_legacy +pata_marvell +pata_mpiix +pata_netcell +pata_ninja32 +pata_ns87410 +pata_ns87415 +pata_of_platform +pata_oldpiix +pata_opti +pata_optidma +pata_pdc2027x +pata_pdc202xx_old +pata_piccolo +pata_platform +pata_radisys +pata_rdc +pata_rz1000 +pata_sch +pata_serverworks +pata_sil680 +pata_sis +pata_sl82c105 +pata_triflex +pata_via +pblk +pc300too +pcap-regulator +pcap_keys +pcap_ts +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pch_udc +pci +pci-stub +pci200syn +pcips2 +pcl711 +pcl724 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcmad +pcmda12 +pcmmio +pcmuio +pcnet32 +pcrypt +pcspkr +pcwd_pci +pcwd_usb +pd +pda_power +pdc_adma +peak_pci +peak_pciefd +peak_usb +pegasus +pegasus_notetaker +penmount +pf +pfuze100-regulator +pg +phantom +phonet +phram +phy-bcm-kona-usb2 +phy-cpcap-usb +phy-exynos-usb2 +phy-generic +phy-gpio-vbus-usb +phy-isp1301 +phy-pxa-28nm-hsic +phy-pxa-28nm-usb2 +phy-qcom-usb-hs +phy-qcom-usb-hsic +phy-tahvo +phy-tusb1210 +physmap +physmap_of +pi433 +pinctrl-max77620 +pinctrl-mcp23s08 +pinctrl-rk805 +pistachio-internal-dac +pixcir_i2c_ts +pkcs7_test_key +pktcdvd +pktgen +pl2303 +plat-ram +plat_nand +platform_lcd +platform_mhu +plip +plusb +pluto2 +plx_pci +pm-notifier-error-inject +pm2fb +pm3fb +pm80xx +pm8941-wled +pmbus +pmbus_core +pmc551 +pmcraid +pn533 +pn533_i2c +pn533_usb +pn544 +pn544_i2c +pn_pep +pnv-php +poly1305_generic +port100 +powermate +powernv-op-panel +powernv-rng +powernv_flash +powr1220 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +ppp_synctty +pppoatm +pppoe +pppox +pps-gpio +pps-ldisc +pps_parport +pptp +pretimeout_panic +prism2_usb +ps2-gpio +ps2mult +psample +pseries-rng +pseries_energy +psmouse +psnap +psxpad-spi +pt +ptlrpc +pulse8-cec +pulsedlight-lidar-lite-v2 +pv88060-regulator +pv88080-regulator +pv88090-regulator +pvrusb2 +pwc +pwm-beeper +pwm-fan +pwm-fsl-ftm +pwm-ir-tx +pwm-lp3943 +pwm-pca9685 +pwm-regulator +pwm-twl +pwm-twl-led +pwm-vibra +pwm_bl +pwrseq_emmc +pwrseq_sd8787 +pwrseq_simple +pxa27x_udc +qca8k +qca_7k_common +qcaspi +qcauart +qcaux +qcom-emac +qcom-spmi-iadc +qcom-spmi-temp-alarm +qcom-spmi-vadc +qcom-vadc-common +qcom_glink_native +qcom_glink_rpm +qcom_spmi-regulator +qcserial +qed +qede +qedf +qedi +qedr +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qm1d1c0042 +qmi_wwan +qnx4 +qnx6 +qoriq_thermal +qsemi +qt1010 +qt1070 +qt2160 +qtnfmac +qtnfmac_pearl_pcie +quatech2 +quota_tree +quota_v1 +quota_v2 +qxl +r592 +r6040 +r8152 +r8169 +r8188eu +r8192e_pci +r8192u_usb +r820t +r852 +r8712u +r8723bs +r8822be +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-bcm2048 +radio-i2c-si470x +radio-keene +radio-ma901 +radio-maxiradio +radio-mr800 +radio-platform-si4713 +radio-raremono +radio-shark +radio-si476x +radio-tea5764 +radio-usb-si470x +radio-usb-si4713 +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +rainshadow-cec +ramoops +raw +raw_diag +raydium_i2c_ts +rbd +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rc-astrometa-t2hybrid +rc-asus-pc39 +rc-asus-ps3-100 +rc-ati-tv-wonder-hd-600 +rc-ati-x10 +rc-avermedia +rc-avermedia-a16d +rc-avermedia-cardbus +rc-avermedia-dvbt +rc-avermedia-m135a +rc-avermedia-m733a-rm-k6 +rc-avermedia-rm-ks +rc-avertv-303 +rc-azurewave-ad-tu700 +rc-behold +rc-behold-columbus +rc-budget-ci-old +rc-cec +rc-cinergy +rc-cinergy-1400 +rc-core +rc-d680-dmb +rc-delock-61959 +rc-dib0700-nec +rc-dib0700-rc5 +rc-digitalnow-tinytwin +rc-digittrade +rc-dm1105-nec +rc-dntv-live-dvb-t +rc-dntv-live-dvbt-pro +rc-dtt200u +rc-dvbsky +rc-dvico-mce +rc-dvico-portable +rc-em-terratec +rc-encore-enltv +rc-encore-enltv-fm53 +rc-encore-enltv2 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-geekbox +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +rc-hisi-poplar +rc-hisi-tv-demo +rc-imon-mce +rc-imon-pad +rc-iodata-bctv7e +rc-it913x-v1 +rc-it913x-v2 +rc-kaiomy +rc-kworld-315u +rc-kworld-pc150u +rc-kworld-plus-tv-analog +rc-leadtek-y04g0051 +rc-lme2510 +rc-loopback +rc-manli +rc-medion-x10 +rc-medion-x10-digitainer +rc-medion-x10-or2x +rc-msi-digivox-ii +rc-msi-digivox-iii +rc-msi-tvanywhere +rc-msi-tvanywhere-plus +rc-nebula +rc-nec-terratec-cinergy-xs +rc-norwood +rc-npgtech +rc-pctv-sedna +rc-pinnacle-color +rc-pinnacle-grey +rc-pinnacle-pctv-hd +rc-pixelview +rc-pixelview-002t +rc-pixelview-mk12 +rc-pixelview-new +rc-powercolor-real-angel +rc-proteus-2309 +rc-purpletv +rc-pv951 +rc-rc6-mce +rc-real-audio-220-32-keys +rc-reddo +rc-snapstream-firefly +rc-streamzap +rc-su3000 +rc-tango +rc-tbs-nec +rc-technisat-ts35 +rc-technisat-usb2 +rc-terratec-cinergy-c-pci +rc-terratec-cinergy-s2-hd +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-total-media-in-hand-02 +rc-trekstor +rc-tt-1500 +rc-twinhan-dtv-cab-ci +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rc-zx-irdec +rc5t583-regulator +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +reboot-mode +redboot +redrat3 +reed_solomon +regmap-spmi +regmap-w1 +regulator-haptic +reiserfs +remoteproc +repaper +reset-ti-syscon +retu-mfd +retu-pwrbutton +retu_wdt +rfc1051 +rfc1201 +rfcomm +rfd77402 +rfd_ftl +rfkill-gpio +rio-scan +rio500 +rio_cm +rio_mport_cdev +rionet +rivafb +rj54n1cb0c +rk805-pwrkey +rk808 +rk808-regulator +rmd128 +rmd160 +rmd256 +rmd320 +rmi_core +rmi_i2c +rmi_smbus +rmi_spi +rmnet +rn5t618 +rn5t618-regulator +rn5t618_wdt +rndis_host +rndis_wlan +rockchip +rocker +rocket +rohm_bu21023 +romfs +rose +rotary_encoder +rp2 +rpadlpar_io +rpaphp +rpcrdma +rpcsec_gss_krb5 +rpmsg_char +rpmsg_core +rpr0521 +rrpc +rsi_91x +rsi_sdio +rsi_usb +rsxx +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800mmio +rt2800pci +rt2800usb +rt2x00lib +rt2x00mmio +rt2x00pci +rt2x00usb +rt5033 +rt5033-regulator +rt5033_battery +rt61pci +rt73usb +rt9455_charger +rtas_flash +rtc-88pm80x +rtc-88pm860x +rtc-ab-b5ze-s3 +rtc-ab3100 +rtc-abx80x +rtc-as3722 +rtc-bq32k +rtc-bq4802 +rtc-cmos +rtc-cpcap +rtc-da9052 +rtc-da9055 +rtc-da9063 +rtc-ds1286 +rtc-ds1302 +rtc-ds1305 +rtc-ds1307 +rtc-ds1343 +rtc-ds1347 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1685 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-em3027 +rtc-fm3130 +rtc-ftrtc010 +rtc-hid-sensor-time +rtc-hym8563 +rtc-isl12022 +rtc-isl1208 +rtc-lp8788 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max6916 +rtc-max77686 +rtc-max8907 +rtc-max8925 +rtc-max8997 +rtc-max8998 +rtc-mc13xxx +rtc-mcp795 +rtc-msm6242 +rtc-mt6397 +rtc-palmas +rtc-pcap +rtc-pcf2123 +rtc-pcf2127 +rtc-pcf50633 +rtc-pcf85063 +rtc-pcf8523 +rtc-pcf85363 +rtc-pcf8563 +rtc-pcf8583 +rtc-r7301 +rtc-r9701 +rtc-rc5t583 +rtc-rk808 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rv8803 +rtc-rx4581 +rtc-rx6110 +rtc-rx8010 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-s5m +rtc-snvs +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-tps80031 +rtc-twl +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtc-zynqmp +rtc_cmos_setup +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl2832_sdr +rtl8150 +rtl8187 +rtl8188ee +rtl818x_pci +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192ee +rtl8192se +rtl8723-common +rtl8723ae +rtl8723be +rtl8821ae +rtl8xxxu +rtl_pci +rtl_usb +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5208 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rtsx_usb +rtsx_usb_ms +rtsx_usb_sdmmc +rx51_battery +rxrpc +s1d13xxxfb +s2250 +s2255drv +s2io +s2mpa01 +s2mps11 +s3fb +s3fwrn5 +s3fwrn5_i2c +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s6sy761 +s921 +saa6588 +saa6752hs +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7134-go7007 +saa7146 +saa7146_vv +saa7164 +saa717x +saa7706h +safe_serial +salsa20_generic +samsung-sxgbe +sata_dwc_460ex +sata_inic162x +sata_mv +sata_nv +sata_promise +sata_qstor +sata_sil +sata_sil24 +sata_sis +sata_svw +sata_sx4 +sata_uli +sata_via +sata_vsc +savagefb +sbp_target +sbs-battery +sbs-charger +sbs-manager +sc16is7xx +sc92031 +sca3000 +scanlog +sch_atm +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +sctp +sctp_diag +sctp_probe +sdhci +sdhci-cadence +sdhci-of-at91 +sdhci-of-esdhc +sdhci-of-hlwd +sdhci-omap +sdhci-pci +sdhci-pltfm +sdhci-xenon-driver +sdhci_f_sdh30 +sdio_uart +seed +sensorhub +ser_gigaset +serial2002 +serial_ir +serio_raw +sermouse +serpent_generic +serport +ses +sfc +sfc-falcon +sh_veu +sha1-powerpc +sha3_generic +shark2 +sht15 +sht21 +sht3x +shtc1 +si1145 +si2157 +si2165 +si2168 +si21xx +si4713 +si476x-core +si7005 +si7020 +sidewinder +sierra +sierra_net +sii902x +sii9234 +sil-sii8620 +sil164 +silead +sir-dev +sir_ir +sirf-audio-codec +sis190 +sis5595 +sis900 +sis_i2c +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skd +skfp +skge +sky2 +sky81452 +sky81452-backlight +sky81452-regulator +sl811-hcd +slcan +slicoss +slip +slram +sm3_generic +sm501 +sm501fb +sm712fb +sm750fb +sm_common +sm_ftl +smartpqi +smb347-charger +smc +smc_diag +smipcie +smm665 +smsc +smsc-ircc2 +smsc47m192 +smsc75xx +smsc911x +smsc9420 +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd +snd-ac97-codec +snd-ad1889 +snd-ak4113 +snd-ak4114 +snd-ak4xxx-adda +snd-ali5451 +snd-aloop +snd-als300 +snd-als4000 +snd-atiixp +snd-atiixp-modem +snd-au8810 +snd-au8820 +snd-au8830 +snd-aw2 +snd-azt3328 +snd-bcd2000 +snd-bebob +snd-bt87x +snd-ca0106 +snd-cmipci +snd-cs4281 +snd-cs46xx +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dice +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-fireface +snd-firewire-digi00x +snd-firewire-lib +snd-firewire-motu +snd-firewire-tascam +snd-fireworks +snd-fm801 +snd-gina20 +snd-gina24 +snd-hda-codec +snd-hda-codec-analog +snd-hda-codec-ca0110 +snd-hda-codec-ca0132 +snd-hda-codec-cirrus +snd-hda-codec-cmedia +snd-hda-codec-conexant +snd-hda-codec-generic +snd-hda-codec-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +snd-hda-core +snd-hda-intel +snd-hdsp +snd-hdspm +snd-hrtimer +snd-hwdep +snd-i2c +snd-ice1712 +snd-ice1724 +snd-ice17xx-ak4xxx +snd-indigo +snd-indigodj +snd-indigodjx +snd-indigoio +snd-indigoiox +snd-intel8x0 +snd-intel8x0m +snd-isight +snd-korg1212 +snd-layla20 +snd-layla24 +snd-lola +snd-lx6464es +snd-maestro3 +snd-mia +snd-mixart +snd-mixer-oss +snd-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxfw +snd-oxygen +snd-oxygen-lib +snd-pcm +snd-pcm-dmaengine +snd-pcxhr +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb-common +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-emul +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-soc-ac97 +snd-soc-acp-rt5645-mach +snd-soc-adau-utils +snd-soc-adau1701 +snd-soc-adau1761 +snd-soc-adau1761-i2c +snd-soc-adau1761-spi +snd-soc-adau17x1 +snd-soc-adau7002 +snd-soc-ak4104 +snd-soc-ak4554 +snd-soc-ak4613 +snd-soc-ak4642 +snd-soc-ak5386 +snd-soc-alc5623 +snd-soc-audio-graph-card +snd-soc-audio-graph-scu-card +snd-soc-bt-sco +snd-soc-core +snd-soc-cs35l32 +snd-soc-cs35l33 +snd-soc-cs35l34 +snd-soc-cs35l35 +snd-soc-cs4265 +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs4271-i2c +snd-soc-cs4271-spi +snd-soc-cs42l42 +snd-soc-cs42l51 +snd-soc-cs42l51-i2c +snd-soc-cs42l52 +snd-soc-cs42l56 +snd-soc-cs42l73 +snd-soc-cs42xx8 +snd-soc-cs42xx8-i2c +snd-soc-cs43130 +snd-soc-cs4349 +snd-soc-cs53l30 +snd-soc-dio2125 +snd-soc-es7134 +snd-soc-es8316 +snd-soc-es8328 +snd-soc-es8328-i2c +snd-soc-es8328-spi +snd-soc-fsl-asrc +snd-soc-fsl-esai +snd-soc-fsl-sai +snd-soc-fsl-spdif +snd-soc-fsl-ssi +snd-soc-gtm601 +snd-soc-hdmi-codec +snd-soc-imx-audmux +snd-soc-inno-rk3036 +snd-soc-max98504 +snd-soc-max9860 +snd-soc-max98927 +snd-soc-msm8916-analog +snd-soc-msm8916-digital +snd-soc-nau8540 +snd-soc-nau8810 +snd-soc-nau8824 +snd-soc-pcm1681 +snd-soc-pcm179x-codec +snd-soc-pcm179x-i2c +snd-soc-pcm179x-spi +snd-soc-pcm3168a +snd-soc-pcm3168a-i2c +snd-soc-pcm3168a-spi +snd-soc-pcm512x +snd-soc-pcm512x-i2c +snd-soc-pcm512x-spi +snd-soc-rl6231 +snd-soc-rt5616 +snd-soc-rt5631 +snd-soc-rt5645 +snd-soc-sgtl5000 +snd-soc-si476x +snd-soc-sigmadsp +snd-soc-sigmadsp-i2c +snd-soc-sigmadsp-regmap +snd-soc-simple-card +snd-soc-simple-card-utils +snd-soc-simple-scu-card +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-ssm2602-i2c +snd-soc-ssm2602-spi +snd-soc-ssm4567 +snd-soc-sta32x +snd-soc-sta350 +snd-soc-sti-sas +snd-soc-tas2552 +snd-soc-tas5086 +snd-soc-tas571x +snd-soc-tas5720 +snd-soc-tfa9879 +snd-soc-tlv320aic23 +snd-soc-tlv320aic23-i2c +snd-soc-tlv320aic23-spi +snd-soc-tlv320aic31xx +snd-soc-tlv320aic3x +snd-soc-tpa6130a2 +snd-soc-ts3a227e +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8524 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8728 +snd-soc-wm8731 +snd-soc-wm8737 +snd-soc-wm8741 +snd-soc-wm8750 +snd-soc-wm8753 +snd-soc-wm8770 +snd-soc-wm8776 +snd-soc-wm8804 +snd-soc-wm8804-i2c +snd-soc-wm8804-spi +snd-soc-wm8903 +snd-soc-wm8960 +snd-soc-wm8962 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8985 +snd-soc-xtfpga-i2s +snd-soc-zx-aud96p22 +snd-sonicvibes +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usb-hiface +snd-usb-line6 +snd-usb-pod +snd-usb-podhd +snd-usb-toneport +snd-usb-usx2y +snd-usb-variax +snd-usbmidi-lib +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx-lib +snd-vx222 +snd-ymfpci +snic +snps_udc_core +snps_udc_plat +soc_button_array +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +solo6x10 +solos-pci +sony-btf-mpx +soundcore +sp2 +sp8870 +sp887x +spaceball +spaceorb +sparse-keymap +spcp8x5 +speakup +speakup_acntsa +speakup_apollo +speakup_audptr +speakup_bns +speakup_decext +speakup_dectlk +speakup_dummy +speakup_ltlk +speakup_soft +speakup_spkout +speakup_txprt +speedfax +speedtch +spi-altera +spi-axi-spi-engine +spi-bitbang +spi-butterfly +spi-cadence +spi-dln2 +spi-dw +spi-dw-midpci +spi-dw-mmio +spi-gpio +spi-lm70llp +spi-loopback-test +spi-nor +spi-oc-tiny +spi-pxa2xx-platform +spi-sc18is602 +spi-slave-system-control +spi-slave-time +spi-tle62x0 +spi-xcomm +spi-zynqmp-gqspi +spi_ks8995 +spidev +spl +splat +spmi +sr9700 +sr9800 +srf04 +srf08 +ssb +ssb-hcd +ssd1307fb +ssfdc +ssp_accel_sensor +ssp_gyro_sensor +ssp_iio +sst25l +sstfb +ssu100 +st +st-nci +st-nci_i2c +st-nci_spi +st1232 +st21nfca_hci +st21nfca_i2c +st7586 +st95hf +st_accel +st_accel_i2c +st_accel_spi +st_drv +st_gyro +st_gyro_i2c +st_gyro_spi +st_lsm6dsx +st_lsm6dsx_i2c +st_lsm6dsx_spi +st_magn +st_magn_i2c +st_magn_spi +st_pressure +st_pressure_i2c +st_pressure_spi +st_sensors +st_sensors_i2c +st_sensors_spi +starfire +stb0899 +stb6000 +stb6100 +ste10Xp +stex +stinger +stir4200 +stk1160 +stk3310 +stk8312 +stk8ba50 +stkwebcam +stm_console +stm_core +stm_ftrace +stm_heartbeat +stmfts +stmmac +stmmac-platform +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stts751 +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv0910 +stv6110 +stv6110x +stv6111 +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +sur40 +surface3_spi +svgalib +switchtec +sx8 +sx8654 +sx9500 +sym53c8xx +symbolserial +synaptics_i2c +synaptics_usb +synclink +synclink_gt +synclinkmp +syscon-reboot-mode +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +t5403 +tap +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tc-dwc-g210 +tc-dwc-g210-pci +tc-dwc-g210-pltfrm +tc358767 +tc3589x-keypad +tc654 +tc74 +tc90522 +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcpci +tcpm +tcrypt +tcs3414 +tcs3472 +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tda998x +tdfxfb +tdo24m +tea +tea575x +tea5761 +tea5767 +tea6415c +tea6420 +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +tef6862 +tehuti +tekram-sir +teranetics +test_bpf +test_firmware +test_module +test_power +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tg3 +tgr192 +thermal-generic-adc +thmc50 +thunder_bgx +thunder_xcv +ti-adc081c +ti-adc0832 +ti-adc084s021 +ti-adc108s102 +ti-adc12138 +ti-adc128s052 +ti-adc161s626 +ti-ads1015 +ti-ads7950 +ti-ads8688 +ti-dac082s085 +ti-lmu +ti-tfp410 +ti-tlc4541 +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_usb_3410_5052 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timeriomem-rng +tinydrm +tipc +tlan +tls +tm2-touchkey +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmp006 +tmp007 +tmp102 +tmp103 +tmp108 +tmp401 +tmp421 +toim3232-sir +torture +toshsd +touchit213 +touchright +touchwin +tpci200 +tpl0102 +tpm-rng +tpm_atmel +tpm_st33zp24 +tpm_st33zp24_i2c +tpm_st33zp24_spi +tpm_tis_spi +tpm_vtpm_proxy +tps40422 +tps51632-regulator +tps53679 +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65086 +tps65086-regulator +tps65090-charger +tps65090-regulator +tps65132-regulator +tps65218 +tps65218-pwrbutton +tps65218-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps6598x +tps80031-regulator +trancevibrator +trf7970a +tridentfb +ts2020 +ts_bm +ts_fsm +ts_kmp +tsc2004 +tsc2005 +tsc2007 +tsc200x-core +tsc40 +tsi568 +tsi57x +tsl2550 +tsl2563 +tsl2583 +tsl2x7x +tsl4531 +tsys01 +tsys02d +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tvaudio +tveeprom +tvp5150 +tw2804 +tw5864 +tw68 +tw686x +tw9903 +tw9906 +tw9910 +twidjoy +twl-regulator +twl4030-madc +twl4030-pwrbutton +twl4030-vibra +twl4030_charger +twl4030_keypad +twl4030_madc_battery +twl4030_wdt +twl6030-gpadc +twl6030-regulator +twl6040-vibra +twofish_common +twofish_generic +typec +typec_ucsi +typhoon +u132-hcd +uPD60620 +u_audio +u_ether +u_serial +uartlite +uas +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +uda1342 +udc-core +udc-xilinx +udf +udl +udlfb +udp_diag +udp_tunnel +ueagle-atm +ufs +ufshcd +ufshcd-dwc +ufshcd-pci +ufshcd-pltfrm +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_fsl_elbc_gpcm +uio_mf624 +uio_netx +uio_pci_generic +uio_pdrv_genirq +uio_pruss +uio_sercos3 +uleds +uli526x +ulpi +umc +umem +ums-alauda +ums-cypress +ums-datafab +ums-eneub6250 +ums-freecom +ums-isd200 +ums-jumpshot +ums-karma +ums-onetouch +ums-realtek +ums-sddr09 +ums-sddr55 +ums-usbat +unix_diag +upd64031a +upd64083 +upd78f0730 +us5182d +usb-serial-simple +usb-storage +usb251xb +usb3503 +usb4604 +usb8xxx +usb_8dev +usb_debug +usb_f_acm +usb_f_ecm +usb_f_ecm_subset +usb_f_eem +usb_f_fs +usb_f_hid +usb_f_mass_storage +usb_f_midi +usb_f_ncm +usb_f_obex +usb_f_phonet +usb_f_printer +usb_f_rndis +usb_f_serial +usb_f_ss_lb +usb_f_tcm +usb_f_uac1 +usb_f_uac1_legacy +usb_f_uac2 +usb_f_uvc +usb_gigaset +usb_wwan +usbatm +usbdux +usbduxfast +usbduxsigma +usbhid +usbip-core +usbip-host +usbip-vudc +usbkbd +usblcd +usblp +usbmisc_imx +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usbtest +usbtmc +usbtouchscreen +usbtv +usbvision +usdhi6rol0 +userio +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-dv-timings +v4l2-flash-led-class +v4l2-fwnode +v4l2-mem2mem +v4l2-tpg +vcan +vcnl4000 +vctrl-regulator +veml6070 +ves1820 +ves1x93 +veth +vf610_adc +vf610_dac +vfio_mdev +vga16fb +vgastate +vgem +vgg2432a4 +vhci-hcd +vhost +vhost_net +vhost_scsi +vhost_vsock +via-ircc +via-rhine +via-sdmmc +via-velocity +via686a +video-mux +videobuf-core +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videobuf2-core +videobuf2-dma-contig +videobuf2-dma-sg +videobuf2-dvb +videobuf2-memops +videobuf2-v4l2 +videobuf2-vmalloc +videodev +vim2m +viperboard +viperboard_adc +virt-dma +virtio-gpu +virtio-rng +virtio_blk +virtio_crypto +virtio_input +virtio_net +virtio_rpmsg_bus +virtio_scsi +virtual +visor +vitesse +vivid +vl6180 +vlsi_ir +vmac +vme_fake +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vmx-crypto +vp27smpx +vport-geneve +vport-gre +vport-vxlan +vrf +vringh +vsock +vsock_diag +vsockmon +vsxxxaa +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxcan +vxge +vxlan +vz89x +w1-gpio +w1_ds2405 +w1_ds2406 +w1_ds2408 +w1_ds2413 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2438 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds2805 +w1_ds28e04 +w1_ds28e17 +w1_smem +w1_therm +w5100 +w5100-spi +w5300 +w6692 +w83781d +w83791d +w83792d +w83793 +w83795 +w83977af_ir +w83l785ts +w83l786ng +wacom +wacom_i2c +wacom_serial4 +wacom_w8001 +walkera0701 +wanxl +warrior +wbsd +wcn36xx +wd719x +wdrtas +wdt87xx_i2c +wdt_pci +whc-rc +whci +whci-hcd +whiteheat +wil6210 +wilc1000 +wilc1000-sdio +wilc1000-spi +wimax +winbond-840 +windfarm_core +wire +wishbone-serial +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wlcore +wlcore_sdio +wlcore_spi +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x-ts +wm831x_backup +wm831x_bl +wm831x_power +wm831x_wdt +wm8350-hwmon +wm8350-regulator +wm8350_power +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994 +wm8994-regulator +wm97xx-ts +wp512 +wusb-cbaf +wusb-wa +wusbcore +x25 +x25_asy +x_tables +xc4000 +xc5000 +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xgifb +xhci-plat-hcd +xilinx-pr-decoupler +xilinx-spi +xilinx-tpg +xilinx-video +xilinx-vtc +xilinx_gmii2rgmii +xilinx_ps2 +xilinx_uartps +xillybus_core +xillybus_of +xillybus_pcie +xor +xpad +xsens_mt +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LED +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +xtkbd +xusbatm +xz_dec_test +yam +yealink +yellowfin +yurex +z3fold +zaurus +zavl +zcommon +zd1201 +zd1211rw +zd1301 +zd1301_demod +zet6223 +zforce_ts +zfs +zhenhua +ziirave_wdt +zl10036 +zl10039 +zl10353 +zl6100 +znvpair +zpa2326 +zpa2326_i2c +zpa2326_spi +zpios +zr364xx +zram +zstd_compress +zunicode --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/ppc64el/generic.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/ppc64el/generic.retpoline @@ -0,0 +1 @@ +# RETPOLINE NOT ENABLED --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/s390x/generic +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/s390x/generic @@ -0,0 +1,10749 @@ +EXPORT_SYMBOL crypto/mcryptd 0x00000000 mcryptd_arm_flusher +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_finup +EXPORT_SYMBOL crypto/sm3_generic 0x00000000 crypto_sm3_update +EXPORT_SYMBOL crypto/xor 0x00000000 xor_blocks +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x00000000 drbd_set_st_err_str +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_insert_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x00000000 ibcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 __ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_odp_umem +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_parse_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cache_gid_type_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_check_mr_status +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_qp_security +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_create_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_flow +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_rwq_ind_table +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_destroy_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_rq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_drain_sq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_event_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_gid_by_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_gid_by_filter +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_port_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_cached_subnet_prefix +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_device_fw_str +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_eth_speed +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_gids_from_rdma_hdr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_net_dev_by_params +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rdma_header_version +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_config +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_get_vf_stats +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mad_kernel_rmpp_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_map_mr_sg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_qp_with_udata +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_modify_wq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_mr_pool_put +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_cq_direct +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_try_charge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_rdmacg_uncharge +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_pack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_sendonly_fullmem_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_security_pkey_access +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_guid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_set_vf_link_state +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_sg_to_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_ud_ip4_csum +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_copy_from +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_map_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_odp_unmap_dma_pages +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ib_wc_status_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_for_each_in_range +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rbt_ib_umem_lookup +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_l2_eth_by_grh +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_find_smac_by_sgid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_size +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_create_user_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_chk_listeners +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_register +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unicast_wait +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_nl_unregister +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_resolve_ip_route +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_destroy_signature +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_post +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_signature_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_ctx_wrs +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_rw_mr_factor +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_set_cq_moderation +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 roce_gid_type_mask_support +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00000000 zgid +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_alloc_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x00000000 uverbs_free_spec_tree +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x00000000 iwcm_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_consumer_reject_data +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_event_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_get_service_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_is_consumer_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_reject_msg +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x00000000 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 ib_rvt_state_ops +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_retry_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_add_rnr_timer +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_alloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_check_ah +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_comm_est +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_compute_aeth +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_cq_enter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_dealloc_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_del_timers_sync +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_error_qp +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_get_credit +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_init_port +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_invalidate_rkey +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_lkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_mcast_find +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_init +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_qp_iter_next +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_error +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rc_rnr_retry +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_register_device +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rkey_ok +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_rnr_tbl_to_usec +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_stop_rc_timers +EXPORT_SYMBOL drivers/infiniband/sw/rdmavt/rdmavt 0x00000000 rvt_unregister_device +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_add +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_remove_all +EXPORT_SYMBOL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_set_mtu +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __bch_bset_search +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 __closure_wake_up +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bkey_try_merge +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_build_written_tree +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_fix_invalidated_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_init_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_insert +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_bset_sort_state_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_insert_key +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_iter_next +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_alloc +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_free +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_keys_init +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_lazy +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 bch_btree_sort_partial +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_put +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sub +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_sync +EXPORT_SYMBOL drivers/md/bcache/bcache 0x00000000 closure_wait +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_forget +EXPORT_SYMBOL drivers/md/dm-bufio 0x00000000 dm_bufio_set_minimum_buffers +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x00000000 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x00000000 dm_snap_origin +EXPORT_SYMBOL drivers/md/raid456 0x00000000 r5c_journal_mode_set +EXPORT_SYMBOL drivers/md/raid456 0x00000000 raid5_set_cache_size +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 devm_mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 mfd_add_devices +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 mfd_cell_disable +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 mfd_cell_enable +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 mfd_clone_cell +EXPORT_SYMBOL drivers/mfd/mfd-core 0x00000000 mfd_remove_devices +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 get_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ALLOCATE_VPP_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_BEACON +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_VXLAN +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_fcs_check +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mac +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_PORT_user_mtu +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SET_VPORT_QOS_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_eq_get_irq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_cpu_rmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_eqs_per_port +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_is_vlan_offload_disabled +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_module_info +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_roce_gid_from_slave +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_from_roce_gid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_handle_eth_header_mcast_prio +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_shared +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_eq_vector_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_max_tc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_query_diag_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_async +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_test_interrupt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_tunnel_steer_add +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 set_phv_bit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_add_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_del_rule +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 __tracepoint_mlx5_fs_set_fte +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_add_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_alloc_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_alloc_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_cleanup +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_comp_handler +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_create_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_destroy_vport_lag +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_exec_polling +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_free_uar +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_cmd_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_arm_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_attach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_mkey_cb +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_pd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_transport_domain +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_psv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_rqt +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_sq_tracked +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tir +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_detach_mcg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dump_fill_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_get_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_cq_moderation +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_tis +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_cq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_mkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_rq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_sq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_srq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vendor_id +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_roce_gid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_auto_grouped_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_lag_demux_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_debugfs_root +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_del_flow_rules +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_flow_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_get_sbu_caps +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_read +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_mem_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fpga_sbu_conn_sendmsg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_free_bfreg +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_add_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fs_remove_rx_underlay_qpn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_flow_namespace +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_protocol_dev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_get_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_get_roce_netdev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_is_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_lag_query_cong_counters +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_put_uars_page +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_eth_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ib_proto_oper +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_alloc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rdma_netdev_free +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_register_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_add_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_is_in_range +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_rl_remove_rate +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_unregister_interface +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_vector2eqn +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxfw/mlxfw 0x00000000 mlxfw_firmware_flash +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_counter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_drop +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fid_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_fwd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_mcrouter +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_trap_and_forward +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_append_vlan_modify +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_commit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_continue +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_first_set_kvdl_index +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_block_jump +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afa_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_create +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_destroy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_encode +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_block_encoding_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_blocks_count_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_put +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_key_info_subset +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_buf +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_afk_values_add_u32 +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_cmd_exec +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_bus_device_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_driver_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_event_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_flush_owq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_lag_mapping_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_max_ports +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_clear +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_driver_priv +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_eth_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_fini +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_ib_set +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_init +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_port_type_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_get +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_res_valid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_rx_listener_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_dw +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_schedule_work +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_receive +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_skb_transmit_busy +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_core_trap_unregister +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_bulk_wait +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_query +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_trans_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_core 0x00000000 mlxsw_reg_write +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_register +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlxsw/mlxsw_pci 0x00000000 mlxsw_pci_driver_unregister +EXPORT_SYMBOL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_write +EXPORT_SYMBOL drivers/net/phy/fixed_phy 0x00000000 fixed_phy_update_state +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 __mdiobus_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_aneg_done +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_config_aneg +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_config_init +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_loopback +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_read_status +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_restart_aneg +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_resume +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_setup_forced +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_soft_reset +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_suspend +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 genphy_update_link +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 get_phy_device +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_bus_type +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_device_create +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_device_free +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_device_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_device_remove +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_driver_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdio_driver_unregister +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_alloc_size +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_free +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_get_phy +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_is_registered_device +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_read +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_read_nested +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_register_device +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_scan +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_unregister +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_unregister_device +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_write +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 mdiobus_write_nested +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_aneg_done +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_attach +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_attach_direct +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_attached_info +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_attached_print +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_connect +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_connect_direct +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_detach +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_device_create +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_device_free +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_device_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_device_remove +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_disconnect +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_driver_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_driver_unregister +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_drivers_register +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_drivers_unregister +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_get_eee +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_get_link_ksettings +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_get_wol +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_ksettings_get +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_ksettings_set +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_nway_reset +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_set_eee +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_set_link_ksettings +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_set_wol +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_ethtool_sset +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_find_first +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_get_eee_err +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_init_eee +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_init_hw +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_loopback +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_mac_interrupt +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_mii_ioctl +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_print_status +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_read_mmd +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_register_fixup +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_register_fixup_for_id +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_register_fixup_for_uid +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_resume +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_set_max_speed +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_start +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_start_aneg +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_start_interrupts +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_stop +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_stop_interrupts +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_suspend +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_unregister_fixup +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_unregister_fixup_for_id +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_unregister_fixup_for_uid +EXPORT_SYMBOL drivers/net/phy/libphy 0x00000000 phy_write_mmd +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_mode_unregister +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_change_dev_addr +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_modeop_port_enter +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_option_inst_set_change +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_change_check +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_register +EXPORT_SYMBOL drivers/net/team/team 0x00000000 team_options_unregister +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x00000000 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_find_pin +EXPORT_SYMBOL drivers/ptp/ptp 0x00000000 ptp_schedule_worker +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_add_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_free +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_child +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_get_by_phandle +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_remove_subdev +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x00000000 rproc_vq_interrupt +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_add_request_head +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_add_request_tail +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_alloc_erp_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_block_clear_timer +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_block_set_timer +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_cancel_req +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_debug_area +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_default_erp_action +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_default_erp_postaction +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_device_clear_timer +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_device_set_timer +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_diag_discipline_pointer +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_eer_write +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_enable_device +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_free_erp_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_int_handler +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_kfree_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_kick_device +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_kmalloc_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_log_sense +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_log_sense_dbf +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_reload_device +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_schedule_block_bh +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_schedule_device_bh +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_schedule_requeue +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_set_feature +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_set_target_state +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_sfree_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_sleep_on +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_sleep_on_immediatly +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_sleep_on_interruptible +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_sleep_on_queue +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_smalloc_request +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_start_IO +EXPORT_SYMBOL drivers/s390/block/dasd_mod 0x00000000 dasd_term_IO +EXPORT_SYMBOL drivers/s390/char/hmcdrv 0x00000000 hmcdrv_ftp_do +EXPORT_SYMBOL drivers/s390/char/hmcdrv 0x00000000 hmcdrv_ftp_probe +EXPORT_SYMBOL drivers/s390/char/hmcdrv 0x00000000 hmcdrv_ftp_shutdown +EXPORT_SYMBOL drivers/s390/char/hmcdrv 0x00000000 hmcdrv_ftp_startup +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_alloc_request +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_cancel_io +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_core_dbf +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_do_io +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_do_io_async +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_do_io_interruptible +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_dump_sense_dbf +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_free_request +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_generic_offline +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_generic_online +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_generic_pm_suspend +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_generic_probe +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_generic_remove +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_get_device +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_med_state_set +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_mtop +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_op_verbose +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_put_device +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_state_set +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_state_verbose +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_assign +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_display +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtbsf +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtbsfm +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtbsr +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtcompression +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mteom +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mterase +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtfsf +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtfsfm +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtfsr +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtload +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtnop +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtoffl +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtreset +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtreten +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtrew +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtsetblk +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtunload +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_mtweof +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_process_eov +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_read_backward +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_read_block +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_read_block_id +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_unassign +EXPORT_SYMBOL drivers/s390/char/tape 0x00000000 tape_std_write_block +EXPORT_SYMBOL drivers/s390/char/tape_34xx 0x00000000 tape_34xx_dbf +EXPORT_SYMBOL drivers/s390/char/tape_3590 0x00000000 tape_3590_dbf +EXPORT_SYMBOL drivers/s390/char/tape_class 0x00000000 register_tape_dev +EXPORT_SYMBOL drivers/s390/char/tape_class 0x00000000 unregister_tape_dev +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_create_dev +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_driver_register +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_driver_unregister +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_probe_ccwdev +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_remove_ccwdev +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_set_offline +EXPORT_SYMBOL drivers/s390/cio/ccwgroup 0x00000000 ccwgroup_set_online +EXPORT_SYMBOL drivers/s390/cio/qdio 0x00000000 qdio_get_next_buffers +EXPORT_SYMBOL drivers/s390/cio/qdio 0x00000000 qdio_start_irq +EXPORT_SYMBOL drivers/s390/cio/qdio 0x00000000 qdio_stop_irq +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_clr2protkey +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_clr2seckey +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_findcard +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_genseckey +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_sec2protkey +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_skey2pkey +EXPORT_SYMBOL drivers/s390/crypto/pkey 0x00000000 pkey_verifykey +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 __tracepoint_s390_zcrypt_rep +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 __tracepoint_s390_zcrypt_req +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_alloc +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_free +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_get +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_put +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_register +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_card_unregister +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_device_status_mask +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_msgtype +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_alloc +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_free +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_get +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_put +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_register +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_queue_unregister +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_rescan_req +EXPORT_SYMBOL drivers/s390/crypto/zcrypt 0x00000000 zcrypt_send_cprb +EXPORT_SYMBOL drivers/s390/net/ctcm 0x00000000 ctc_mpc_alloc_channel +EXPORT_SYMBOL drivers/s390/net/ctcm 0x00000000 ctc_mpc_dealloc_ch +EXPORT_SYMBOL drivers/s390/net/ctcm 0x00000000 ctc_mpc_establish_connectivity +EXPORT_SYMBOL drivers/s390/net/ctcm 0x00000000 ctc_mpc_flow_control +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 fsm_addtimer +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 fsm_deltimer +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 fsm_getstate_str +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 fsm_modtimer +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 fsm_settimer +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 init_fsm +EXPORT_SYMBOL drivers/s390/net/fsm 0x00000000 kfree_fsm +EXPORT_SYMBOL drivers/s390/net/qeth_l2 0x00000000 qeth_osn_assist +EXPORT_SYMBOL drivers/s390/net/qeth_l2 0x00000000 qeth_osn_deregister +EXPORT_SYMBOL drivers/s390/net/qeth_l2 0x00000000 qeth_osn_register +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_destroy_store +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_set_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_done +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_flush_queue +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_recv_req +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_assign +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_release +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_set_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_seq_start_next +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x00000000 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x00000000 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x00000000 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x00000000 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0x00000000 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_eh_timed_out +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x00000000 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_get_address +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x00000000 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x00000000 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_parse_tmo +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_reconnect_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_get +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_put +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_start_tl_fail_timers +EXPORT_SYMBOL drivers/scsi/scsi_transport_srp 0x00000000 srp_timed_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 __iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_change_param_sprintf +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_find_param_from_key +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsi_target_check_login_request +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_aborted_task +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_cmd_to_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_add_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_allocate_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_datain_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_logout_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_nopin_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_r2ts_for_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_reject +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_rsp_pdu +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_task_mgt_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_build_text_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_cause_connection_reinstatement +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_hdr +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_check_dataout_payload +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_find_cmd_from_itt_or_dump +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_free_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_get_datain_values +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_logout_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_snack +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_handle_task_mgt_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_immediate_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_increment_maxcmdsn +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_logout_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_process_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_queue_rsp +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_register_transport +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_reject_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_release_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_response_queue +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_sequence_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_set_unsoliticed_dataout +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_nop_out +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_scsi_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_setup_text_cmd +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_stop_dataout_timer +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_tmr_post_handler +EXPORT_SYMBOL drivers/target/iscsi/iscsi_target_mod 0x00000000 iscsit_unregister_transport +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_allocate_nexus_loss_ua +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_get_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 passthrough_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_attrib_attrs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_copy_prot +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_dif_verify +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_evpd_83 +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_inquiry_std +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_alloc_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_backend_unregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_complete_cmd_with_length +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_configure_unmap_from_queue +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_depend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_find_device +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_free_sgl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_get_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_lun_is_rdonly +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_nacl_find_deve +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_nacl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_register_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_show_dynamic_sessions +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_to_linux_sector +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_tpg_has_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_undepend_item +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_unregister_template +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_alloc_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_backend_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_copy_sense_to_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_init_session_tags +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x00000000 transport_wait_for_tasks +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_add_one_port +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_get_baud_rate +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_get_divisor +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_match_port +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_register_driver +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_remove_one_port +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_resume_port +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_suspend_port +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_unregister_driver +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_update_timeout +EXPORT_SYMBOL drivers/tty/serial/serial_core 0x00000000 uart_write_wakeup +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_from_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_get_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_parent_dev +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_register_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_set_drvdata +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_device +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_unregister_driver +EXPORT_SYMBOL drivers/vfio/mdev/mdev 0x00000000 mdev_uuid +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_add_capability +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_info_cap_shift +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_pin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_register_notifier +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_set_irqs_validate_and_prepare +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unpin_pages +EXPORT_SYMBOL drivers/vfio/vfio 0x00000000 vfio_unregister_notifier +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_poll +EXPORT_SYMBOL drivers/vhost/vhost 0x00000000 vhost_chr_write_iter +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_consistency +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_disable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_enable_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_readpages_cancel +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_destroy +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_mark_killed +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_object_retrying_stale +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_operation_init +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0x00000000 fscache_withdraw_cache +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_get_next_id +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x00000000 qtree_write_dquot +EXPORT_SYMBOL lib/cordic 0x00000000 cordic_calc_iq +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0x00000000 crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be +EXPORT_SYMBOL lib/crc7 0x00000000 crc7_be_syndrome_table +EXPORT_SYMBOL lib/crc8 0x00000000 crc8 +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0x00000000 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x00000000 crc32c +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_create +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_del +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_find +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_get_cumulative +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_put +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_set +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x00000000 lc_try_lock +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_default +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_destSize +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_compress_fast_continue +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_loadDict +EXPORT_SYMBOL lib/lz4/lz4_compress 0x00000000 LZ4_saveDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4HC_setExternalDict +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_compress_HC_continue +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_loadDictHC +EXPORT_SYMBOL lib/lz4/lz4hc_compress 0x00000000 LZ4_saveDictHC +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gflog +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x00000000 raid6_vgfmul +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x00000000 zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x00000000 zlib_deflateEnd +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x00000000 zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x00000000 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x00000000 zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CCtxWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CDictWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamInSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamOutSize +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_CStreamWorkspaceBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_adjustCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_checkCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_advanced +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBegin_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBlock +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressBound +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressContinue +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressEnd +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compressStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_compress_usingDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_copyCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_endStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_flushStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getBlockSizeMax +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getCParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_getParams +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCCtx +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_initCStream_usingCDict +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_maxCLevel +EXPORT_SYMBOL lib/zstd/zstd_compress 0x00000000 ZSTD_resetCStream +EXPORT_SYMBOL net/802/p8022 0x00000000 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x00000000 unregister_8022_client +EXPORT_SYMBOL net/802/psnap 0x00000000 register_snap_client +EXPORT_SYMBOL net/802/psnap 0x00000000 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_show_client_options +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x00000000 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x00000000 v9fs_unregister_trans +EXPORT_SYMBOL net/bridge/bridge 0x00000000 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x00000000 ebt_unregister_table +EXPORT_SYMBOL net/ceph/libceph 0x00000000 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_client_gid +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_break_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_lock_info +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_set_cookie +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_cls_unlock +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_create_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_entity_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_from_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_file_layout_to_legacy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_find_or_create_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_free_lockers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_get_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_fini +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_blacklist_add +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_get_version_async +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_got_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_renew_subs +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_wait_osdmap +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_monc_want_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_data_add_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_get +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_put +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_object_locator_to_pg +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_aprintf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oid_printf +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_copy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_oloc_destroy +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_messages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_call +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cancel_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_cleanup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_flush_notifies +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_get_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_list_watchers +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_maybe_request_map +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_notify_ack +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_put_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_setup +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_unwatch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_update_epoch_barrier +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_watch +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pg_to_acting_primary +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_print_client_options +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_put_snap_context +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_release_string +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x00000000 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x00000000 libceph_compatible +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_alloc_hint_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_request_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_cls_response_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_dup_last +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_bio +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pagelist +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_osd_data_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_extent_update +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_init +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_raw_data_in_pages +EXPORT_SYMBOL net/ceph/libceph 0x00000000 osd_req_op_xattr_init +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_entry_clear +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ethernet +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv4 +EXPORT_SYMBOL net/core/devlink 0x00000000 devlink_dpipe_header_ipv6 +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_req_err +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x00000000 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __fou_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 __gue_build_header +EXPORT_SYMBOL net/ipv4/fou 0x00000000 fou_encap_hlen +EXPORT_SYMBOL net/ipv4/fou 0x00000000 gue_encap_hlen +EXPORT_SYMBOL net/ipv4/gre 0x00000000 gre_parse_header +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_add_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_del_ops +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_iflink +EXPORT_SYMBOL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_get_link_net +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x00000000 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x00000000 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x00000000 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/udp_tunnel 0x00000000 udp_sock_create4 +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_change_mtu +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_add_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_del_ops +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_iflink +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_get_link_net +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_do_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x00000000 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x00000000 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_register +EXPORT_SYMBOL net/kcm/kcm 0x00000000 kcm_proc_unregister +EXPORT_SYMBOL net/l2tp/l2tp_core 0x00000000 l2tp_recv_common +EXPORT_SYMBOL net/l2tp/l2tp_ip 0x00000000 l2tp_ioctl +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0x00000000 llc_set_station_handler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_new_conn_out +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_add +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x00000000 nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_pptp 0x00000000 pptp_msg_name +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x00000000 nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nft_fib 0x00000000 nft_fib_policy +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_check_entry_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_jump_offset +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x00000000 xt_unregister_targets +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_charge_accept +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_check_life +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_peer +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_get_rtt +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_new_call_notification +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_recv_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_retry_call +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/rxrpc 0x00000000 rxrpc_kernel_set_tx_length +EXPORT_SYMBOL net/sctp/sctp 0x00000000 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_get +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_put +EXPORT_SYMBOL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_pseudoflavor_to_service +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 svc_pool_stats_open +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_restrict_buflen +EXPORT_SYMBOL net/sunrpc/sunrpc 0x00000000 xdr_truncate_encode +EXPORT_SYMBOL vmlinux 0x00000000 I_BDEV +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_fast_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_continue +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_partial +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_decompress_safe_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 LZ4_setStreamDecode +EXPORT_SYMBOL vmlinux 0x00000000 PDE_DATA +EXPORT_SYMBOL vmlinux 0x00000000 PageMovable +EXPORT_SYMBOL vmlinux 0x00000000 VMALLOC_END +EXPORT_SYMBOL vmlinux 0x00000000 VMALLOC_START +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DCtxWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DDictWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamInSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamOutSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_DStreamWorkspaceBound +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_copyDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBegin_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressContinue +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompressStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_decompress_usingDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findDecompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_findFrameCompressedSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getDictID_fromFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameContentSize +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_getFrameParams +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDCtx +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_initDStream_usingDDict +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_insertBlock +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_isFrame +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextInputType +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_nextSrcSizeToDecompress +EXPORT_SYMBOL vmlinux 0x00000000 ZSTD_resetDStream +EXPORT_SYMBOL vmlinux 0x00000000 __ClearPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 __SetPageMovable +EXPORT_SYMBOL vmlinux 0x00000000 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x00000000 ___ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_disk_node +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x00000000 __alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __bdevname +EXPORT_SYMBOL vmlinux 0x00000000 __bforget +EXPORT_SYMBOL vmlinux 0x00000000 __bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_and +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_clear +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_complement +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_equal +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_intersects +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_or +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_parse +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_set +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x00000000 __bitmap_xor +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x00000000 __blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 __blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 __block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x00000000 __bread_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __breadahead +EXPORT_SYMBOL vmlinux 0x00000000 __break_lease +EXPORT_SYMBOL vmlinux 0x00000000 __brelse +EXPORT_SYMBOL vmlinux 0x00000000 __cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x00000000 __cap_empty_set +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_check_dev_permission +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sk +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_skb +EXPORT_SYMBOL vmlinux 0x00000000 __cgroup_bpf_run_filter_sock_ops +EXPORT_SYMBOL vmlinux 0x00000000 __check_object_size +EXPORT_SYMBOL vmlinux 0x00000000 __check_sticky +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x00000000 __clear_user +EXPORT_SYMBOL vmlinux 0x00000000 __clzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __clzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x00000000 __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x00000000 __cpcmd +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_active_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_online_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_present_mask +EXPORT_SYMBOL vmlinux 0x00000000 __cpu_to_node +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_remove_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state +EXPORT_SYMBOL vmlinux 0x00000000 __cpuhp_setup_state_cpuslocked +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le +EXPORT_SYMBOL vmlinux 0x00000000 __crc32c_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 __crypto_memneq +EXPORT_SYMBOL vmlinux 0x00000000 __ctzdi2 +EXPORT_SYMBOL vmlinux 0x00000000 __ctzsi2 +EXPORT_SYMBOL vmlinux 0x00000000 __d_drop +EXPORT_SYMBOL vmlinux 0x00000000 __d_lookup_done +EXPORT_SYMBOL vmlinux 0x00000000 __debug_sprintf_event +EXPORT_SYMBOL vmlinux 0x00000000 __debug_sprintf_exception +EXPORT_SYMBOL vmlinux 0x00000000 __dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __delay +EXPORT_SYMBOL vmlinux 0x00000000 __destroy_inode +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_flags +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x00000000 __dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x00000000 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 __dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 __devm_release_region +EXPORT_SYMBOL vmlinux 0x00000000 __devm_request_region +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_done +EXPORT_SYMBOL vmlinux 0x00000000 __do_once_start +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_free_space +EXPORT_SYMBOL vmlinux 0x00000000 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_dev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_netdev_dbg +EXPORT_SYMBOL vmlinux 0x00000000 __dynamic_pr_debug +EXPORT_SYMBOL vmlinux 0x00000000 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 __ethtool_get_link_ksettings +EXPORT_SYMBOL vmlinux 0x00000000 __f_setown +EXPORT_SYMBOL vmlinux 0x00000000 __fdget +EXPORT_SYMBOL vmlinux 0x00000000 __fib6_flush_trees +EXPORT_SYMBOL vmlinux 0x00000000 __filemap_set_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 __find_get_block +EXPORT_SYMBOL vmlinux 0x00000000 __free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_init +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_load +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_store +EXPORT_SYMBOL vmlinux 0x00000000 __frontswap_test +EXPORT_SYMBOL vmlinux 0x00000000 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 __generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 __get_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi4 +EXPORT_SYMBOL vmlinux 0x00000000 __get_hash_from_flowi6 +EXPORT_SYMBOL vmlinux 0x00000000 __getblk_gfp +EXPORT_SYMBOL vmlinux 0x00000000 __getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 __gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 __hsiphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_sync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x00000000 __hw_addr_unsync_dev +EXPORT_SYMBOL vmlinux 0x00000000 __inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x00000000 __inet_hash +EXPORT_SYMBOL vmlinux 0x00000000 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 __init_rwsem +EXPORT_SYMBOL vmlinux 0x00000000 __init_swait_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x00000000 __inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 __inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __invalidate_device +EXPORT_SYMBOL vmlinux 0x00000000 __ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 __ip_dev_find +EXPORT_SYMBOL vmlinux 0x00000000 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 __irq_regs +EXPORT_SYMBOL vmlinux 0x00000000 __iucv_message_receive +EXPORT_SYMBOL vmlinux 0x00000000 __iucv_message_send +EXPORT_SYMBOL vmlinux 0x00000000 __jhash_string +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x00000000 __kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_free +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_init +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x00000000 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x00000000 __kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __krealloc +EXPORT_SYMBOL vmlinux 0x00000000 __local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0x00000000 __lock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __lock_page +EXPORT_SYMBOL vmlinux 0x00000000 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x00000000 __mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x00000000 __memset16 +EXPORT_SYMBOL vmlinux 0x00000000 __memset32 +EXPORT_SYMBOL vmlinux 0x00000000 __memset64 +EXPORT_SYMBOL vmlinux 0x00000000 __mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 __module_get +EXPORT_SYMBOL vmlinux 0x00000000 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 __msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __mutex_init +EXPORT_SYMBOL vmlinux 0x00000000 __napi_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __napi_schedule_irqoff +EXPORT_SYMBOL vmlinux 0x00000000 __ndelay +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_create +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x00000000 __neigh_set_probe_once +EXPORT_SYMBOL vmlinux 0x00000000 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x00000000 __netif_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x00000000 __netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 __next_node_in +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 __nlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __page_frag_cache_drain +EXPORT_SYMBOL vmlinux 0x00000000 __page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x00000000 __pagevec_release +EXPORT_SYMBOL vmlinux 0x00000000 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x00000000 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 __posix_acl_create +EXPORT_SYMBOL vmlinux 0x00000000 __print_symbol +EXPORT_SYMBOL vmlinux 0x00000000 __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_copy_fclone +EXPORT_SYMBOL vmlinux 0x00000000 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x00000000 __put_cred +EXPORT_SYMBOL vmlinux 0x00000000 __put_page +EXPORT_SYMBOL vmlinux 0x00000000 __put_user_ns +EXPORT_SYMBOL vmlinux 0x00000000 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x00000000 __quota_error +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_insert +EXPORT_SYMBOL vmlinux 0x00000000 __radix_tree_next_slot +EXPORT_SYMBOL vmlinux 0x00000000 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x00000000 __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x00000000 __refrigerator +EXPORT_SYMBOL vmlinux 0x00000000 __register_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 __register_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __register_nls +EXPORT_SYMBOL vmlinux 0x00000000 __release_region +EXPORT_SYMBOL vmlinux 0x00000000 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x00000000 __request_module +EXPORT_SYMBOL vmlinux 0x00000000 __request_region +EXPORT_SYMBOL vmlinux 0x00000000 __sb_end_write +EXPORT_SYMBOL vmlinux 0x00000000 __sb_start_write +EXPORT_SYMBOL vmlinux 0x00000000 __scm_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __scm_send +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_format_command +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x00000000 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 __sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_next +EXPORT_SYMBOL vmlinux 0x00000000 __sg_page_iter_start +EXPORT_SYMBOL vmlinux 0x00000000 __siphash_aligned +EXPORT_SYMBOL vmlinux 0x00000000 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x00000000 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_raise_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_reduce_allocated +EXPORT_SYMBOL vmlinux 0x00000000 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __sk_queue_drop_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sk_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x00000000 __skb_flow_get_ports +EXPORT_SYMBOL vmlinux 0x00000000 __skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x00000000 __skb_get_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gro_checksum_complete +EXPORT_SYMBOL vmlinux 0x00000000 __skb_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 __skb_pad +EXPORT_SYMBOL vmlinux 0x00000000 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_try_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x00000000 __skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 __skb_wait_for_more_packets +EXPORT_SYMBOL vmlinux 0x00000000 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x00000000 __sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 __sock_create +EXPORT_SYMBOL vmlinux 0x00000000 __sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 __sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x00000000 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 __strncpy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 __strnlen_user +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x00000000 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0x00000000 __symbol_put +EXPORT_SYMBOL vmlinux 0x00000000 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __sysfs_match_string +EXPORT_SYMBOL vmlinux 0x00000000 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0x00000000 __tcf_idr_release +EXPORT_SYMBOL vmlinux 0x00000000 __test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_emit +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_dma_fence_enable_signal +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_chsc +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_csch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_hsch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_msch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_rchp +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_rsch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_ssch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_stsch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_tpi +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_tsch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_cio_xsch +EXPORT_SYMBOL vmlinux 0x00000000 __tracepoint_s390_diagnose +EXPORT_SYMBOL vmlinux 0x00000000 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x00000000 __tty_insert_flip_char +EXPORT_SYMBOL vmlinux 0x00000000 __udelay +EXPORT_SYMBOL vmlinux 0x00000000 __udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x00000000 __usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_getxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_removexattr +EXPORT_SYMBOL vmlinux 0x00000000 __vfs_setxattr +EXPORT_SYMBOL vmlinux 0x00000000 __vlan_find_dev_deep_rcu +EXPORT_SYMBOL vmlinux 0x00000000 __vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up +EXPORT_SYMBOL vmlinux 0x00000000 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 __warn_printk +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_dst_lookup +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x00000000 __zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _ascebc +EXPORT_SYMBOL vmlinux 0x00000000 _ascebc_500 +EXPORT_SYMBOL vmlinux 0x00000000 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 _bcd2bin +EXPORT_SYMBOL vmlinux 0x00000000 _bin2bcd +EXPORT_SYMBOL vmlinux 0x00000000 _cond_resched +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_full_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_from_iter_nocache +EXPORT_SYMBOL vmlinux 0x00000000 _copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 _ctype +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info +EXPORT_SYMBOL vmlinux 0x00000000 _dev_info_hash +EXPORT_SYMBOL vmlinux 0x00000000 _ebc_tolower +EXPORT_SYMBOL vmlinux 0x00000000 _ebc_toupper +EXPORT_SYMBOL vmlinux 0x00000000 _ebcasc +EXPORT_SYMBOL vmlinux 0x00000000 _ebcasc_500 +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtol +EXPORT_SYMBOL vmlinux 0x00000000 _kstrtoul +EXPORT_SYMBOL vmlinux 0x00000000 _local_bh_enable +EXPORT_SYMBOL vmlinux 0x00000000 _mcount +EXPORT_SYMBOL vmlinux 0x00000000 abort +EXPORT_SYMBOL vmlinux 0x00000000 abort_creds +EXPORT_SYMBOL vmlinux 0x00000000 account_page_dirtied +EXPORT_SYMBOL vmlinux 0x00000000 account_page_redirty +EXPORT_SYMBOL vmlinux 0x00000000 add_device_randomness +EXPORT_SYMBOL vmlinux 0x00000000 add_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 add_taint +EXPORT_SYMBOL vmlinux 0x00000000 add_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0x00000000 add_to_pipe +EXPORT_SYMBOL vmlinux 0x00000000 add_virt_timer +EXPORT_SYMBOL vmlinux 0x00000000 add_virt_timer_periodic +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 address_space_init_once +EXPORT_SYMBOL vmlinux 0x00000000 adjust_managed_page_count +EXPORT_SYMBOL vmlinux 0x00000000 adjust_resource +EXPORT_SYMBOL vmlinux 0x00000000 airq_iv_alloc +EXPORT_SYMBOL vmlinux 0x00000000 airq_iv_create +EXPORT_SYMBOL vmlinux 0x00000000 airq_iv_free +EXPORT_SYMBOL vmlinux 0x00000000 airq_iv_release +EXPORT_SYMBOL vmlinux 0x00000000 airq_iv_scan +EXPORT_SYMBOL vmlinux 0x00000000 alloc_anon_inode +EXPORT_SYMBOL vmlinux 0x00000000 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_fcdev +EXPORT_SYMBOL vmlinux 0x00000000 alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x00000000 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 alloc_skb_with_frags +EXPORT_SYMBOL vmlinux 0x00000000 allocate_resource +EXPORT_SYMBOL vmlinux 0x00000000 always_delete_dentry +EXPORT_SYMBOL vmlinux 0x00000000 ap_bus_force_rescan +EXPORT_SYMBOL vmlinux 0x00000000 ap_cancel_message +EXPORT_SYMBOL vmlinux 0x00000000 ap_domain_index +EXPORT_SYMBOL vmlinux 0x00000000 ap_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 ap_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ap_flush_queue +EXPORT_SYMBOL vmlinux 0x00000000 ap_query_configuration +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_init_reply +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_irq_ctrl +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_message +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_remove +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_resume +EXPORT_SYMBOL vmlinux 0x00000000 ap_queue_suspend +EXPORT_SYMBOL vmlinux 0x00000000 ap_recv +EXPORT_SYMBOL vmlinux 0x00000000 ap_send +EXPORT_SYMBOL vmlinux 0x00000000 ap_test_queue +EXPORT_SYMBOL vmlinux 0x00000000 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x00000000 arch_read_lock_wait +EXPORT_SYMBOL vmlinux 0x00000000 arch_spin_lock_wait +EXPORT_SYMBOL vmlinux 0x00000000 arch_spin_relax +EXPORT_SYMBOL vmlinux 0x00000000 arch_spin_trylock_retry +EXPORT_SYMBOL vmlinux 0x00000000 arch_vcpu_is_preempted +EXPORT_SYMBOL vmlinux 0x00000000 arch_write_lock_wait +EXPORT_SYMBOL vmlinux 0x00000000 argv_free +EXPORT_SYMBOL vmlinux 0x00000000 argv_split +EXPORT_SYMBOL vmlinux 0x00000000 arp_create +EXPORT_SYMBOL vmlinux 0x00000000 arp_send +EXPORT_SYMBOL vmlinux 0x00000000 arp_tbl +EXPORT_SYMBOL vmlinux 0x00000000 arp_xmit +EXPORT_SYMBOL vmlinux 0x00000000 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 atomic_t_wait +EXPORT_SYMBOL vmlinux 0x00000000 audit_log +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_end +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_format +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_start +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x00000000 audit_log_task_info +EXPORT_SYMBOL vmlinux 0x00000000 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 avenrun +EXPORT_SYMBOL vmlinux 0x00000000 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x00000000 bd_set_size +EXPORT_SYMBOL vmlinux 0x00000000 bdev_dax_pgoff +EXPORT_SYMBOL vmlinux 0x00000000 bdev_read_only +EXPORT_SYMBOL vmlinux 0x00000000 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 bdevname +EXPORT_SYMBOL vmlinux 0x00000000 bdget +EXPORT_SYMBOL vmlinux 0x00000000 bdget_disk +EXPORT_SYMBOL vmlinux 0x00000000 bdgrab +EXPORT_SYMBOL vmlinux 0x00000000 bdi_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 bdi_put +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_owner +EXPORT_SYMBOL vmlinux 0x00000000 bdi_register_va +EXPORT_SYMBOL vmlinux 0x00000000 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x00000000 bdput +EXPORT_SYMBOL vmlinux 0x00000000 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 bh_submit_read +EXPORT_SYMBOL vmlinux 0x00000000 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 bin2hex +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_chain +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x00000000 bio_clone_fast +EXPORT_SYMBOL vmlinux 0x00000000 bio_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 bio_endio +EXPORT_SYMBOL vmlinux 0x00000000 bio_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 bio_init +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x00000000 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x00000000 bio_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x00000000 bio_put +EXPORT_SYMBOL vmlinux 0x00000000 bio_reset +EXPORT_SYMBOL vmlinux 0x00000000 bio_split +EXPORT_SYMBOL vmlinux 0x00000000 bio_uninit +EXPORT_SYMBOL vmlinux 0x00000000 bioset_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_free +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x00000000 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait +EXPORT_SYMBOL vmlinux 0x00000000 bit_wait_io +EXPORT_SYMBOL vmlinux 0x00000000 bit_waitqueue +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_bitremap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_find_next_zero_area_off +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_fold +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_free +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_from_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_onto +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_print_to_pagebuf +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_remap +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_sync_with_cluster +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_to_u32array +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x00000000 bitmap_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_check_plugged +EXPORT_SYMBOL vmlinux 0x00000000 blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x00000000 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_finish_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_get_request_flags +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x00000000 blk_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x00000000 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_add_to_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_alloc_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_can_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_complete_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_delay_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_end_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_free_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_init_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_queue_stopped +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_run_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_start_stopped_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_stop_hw_queues +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tag_to_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_tagset_busy_iter +EXPORT_SYMBOL vmlinux 0x00000000 blk_mq_unique_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_peek_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_pm_runtime_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_post_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_resume +EXPORT_SYMBOL vmlinux 0x00000000 blk_pre_runtime_suspend +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_put_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_chunk_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_max_write_zeroes_sectors +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_split +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x00000000 blk_queue_virt_boundary +EXPORT_SYMBOL vmlinux 0x00000000 blk_recount_segments +EXPORT_SYMBOL vmlinux 0x00000000 blk_register_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_append_bio +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_init +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x00000000 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_runtime_active +EXPORT_SYMBOL vmlinux 0x00000000 blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_plug +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 blk_start_request +EXPORT_SYMBOL vmlinux 0x00000000 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x00000000 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x00000000 blk_verify_command +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_put +EXPORT_SYMBOL vmlinux 0x00000000 blkdev_reread_part +EXPORT_SYMBOL vmlinux 0x00000000 block_commit_write +EXPORT_SYMBOL vmlinux 0x00000000 block_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x00000000 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 block_read_full_page +EXPORT_SYMBOL vmlinux 0x00000000 block_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 block_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 block_write_end +EXPORT_SYMBOL vmlinux 0x00000000 block_write_full_page +EXPORT_SYMBOL vmlinux 0x00000000 bmap +EXPORT_SYMBOL vmlinux 0x00000000 bpf_prog_get_type_path +EXPORT_SYMBOL vmlinux 0x00000000 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x00000000 brioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 bsearch +EXPORT_SYMBOL vmlinux 0x00000000 buffer_check_dirty_writeback +EXPORT_SYMBOL vmlinux 0x00000000 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 build_skb +EXPORT_SYMBOL vmlinux 0x00000000 cad_pid +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_fib_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_exec +EXPORT_SYMBOL vmlinux 0x00000000 call_usermodehelper_setup +EXPORT_SYMBOL vmlinux 0x00000000 can_do_mlock +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x00000000 capable +EXPORT_SYMBOL vmlinux 0x00000000 capable_wrt_inode_uidgid +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_clear +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_clear_options +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_get_ciw +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_get_id +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_get_mdc +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_get_path_mask +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_halt +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_is_multipath +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_is_pathgroup +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_set_offline +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_set_online +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_set_options +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_set_options_mask +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_start +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_start_key +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_start_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_start_timeout_key +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_tm_intrg +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_tm_start +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_tm_start_key +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_tm_start_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ccw_device_tm_start_timeout_key +EXPORT_SYMBOL vmlinux 0x00000000 ccw_driver_register +EXPORT_SYMBOL vmlinux 0x00000000 ccw_driver_unregister +EXPORT_SYMBOL vmlinux 0x00000000 cdev_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_alloc +EXPORT_SYMBOL vmlinux 0x00000000 cdev_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_add +EXPORT_SYMBOL vmlinux 0x00000000 cdev_device_del +EXPORT_SYMBOL vmlinux 0x00000000 cdev_init +EXPORT_SYMBOL vmlinux 0x00000000 cdev_set_parent +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_dummy_generic_packet +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_open +EXPORT_SYMBOL vmlinux 0x00000000 cdrom_release +EXPORT_SYMBOL vmlinux 0x00000000 cgroup_bpf_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 chacha20_block +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_change +EXPORT_SYMBOL vmlinux 0x00000000 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x00000000 chsc +EXPORT_SYMBOL vmlinux 0x00000000 cio_irb +EXPORT_SYMBOL vmlinux 0x00000000 class3270 +EXPORT_SYMBOL vmlinux 0x00000000 clean_bdev_aliases +EXPORT_SYMBOL vmlinux 0x00000000 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 clear_inode +EXPORT_SYMBOL vmlinux 0x00000000 clear_nlink +EXPORT_SYMBOL vmlinux 0x00000000 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x00000000 clear_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0x00000000 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x00000000 clone_cred +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_find +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_free +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_parse +EXPORT_SYMBOL vmlinux 0x00000000 cmdline_parts_set +EXPORT_SYMBOL vmlinux 0x00000000 commit_creds +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 complete +EXPORT_SYMBOL vmlinux 0x00000000 complete_all +EXPORT_SYMBOL vmlinux 0x00000000 complete_and_exit +EXPORT_SYMBOL vmlinux 0x00000000 complete_request_key +EXPORT_SYMBOL vmlinux 0x00000000 completion_done +EXPORT_SYMBOL vmlinux 0x00000000 component_match_add_release +EXPORT_SYMBOL vmlinux 0x00000000 cond_set_guest_storage_key +EXPORT_SYMBOL vmlinux 0x00000000 config_group_find_item +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init +EXPORT_SYMBOL vmlinux 0x00000000 config_group_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get +EXPORT_SYMBOL vmlinux 0x00000000 config_item_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 config_item_init_type_name +EXPORT_SYMBOL vmlinux 0x00000000 config_item_put +EXPORT_SYMBOL vmlinux 0x00000000 config_item_set_name +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_depend_item_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_register_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 configfs_remove_default_groups +EXPORT_SYMBOL vmlinux 0x00000000 configfs_undepend_item +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_default_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_group +EXPORT_SYMBOL vmlinux 0x00000000 configfs_unregister_subsystem +EXPORT_SYMBOL vmlinux 0x00000000 congestion_wait +EXPORT_SYMBOL vmlinux 0x00000000 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0x00000000 console_devno +EXPORT_SYMBOL vmlinux 0x00000000 console_irq +EXPORT_SYMBOL vmlinux 0x00000000 console_lock +EXPORT_SYMBOL vmlinux 0x00000000 console_mode +EXPORT_SYMBOL vmlinux 0x00000000 console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x00000000 console_start +EXPORT_SYMBOL vmlinux 0x00000000 console_stop +EXPORT_SYMBOL vmlinux 0x00000000 console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x00000000 console_trylock +EXPORT_SYMBOL vmlinux 0x00000000 console_unlock +EXPORT_SYMBOL vmlinux 0x00000000 consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 cont_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 cookie_ecn_ok +EXPORT_SYMBOL vmlinux 0x00000000 cookie_timestamp_decode +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_page_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x00000000 cpcmd +EXPORT_SYMBOL vmlinux 0x00000000 cpu_all_bits +EXPORT_SYMBOL vmlinux 0x00000000 cpu_down +EXPORT_SYMBOL vmlinux 0x00000000 cpu_have_feature +EXPORT_SYMBOL vmlinux 0x00000000 cpu_relax_yield +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x00000000 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_any_but +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_local_spread +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x00000000 cpumask_next_wrap +EXPORT_SYMBOL vmlinux 0x00000000 crc16 +EXPORT_SYMBOL vmlinux 0x00000000 crc16_table +EXPORT_SYMBOL vmlinux 0x00000000 crc32_be +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le +EXPORT_SYMBOL vmlinux 0x00000000 crc32_le_shift +EXPORT_SYMBOL vmlinux 0x00000000 crc32c_csum_stub +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt +EXPORT_SYMBOL vmlinux 0x00000000 crc_ccitt_table +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_generic +EXPORT_SYMBOL vmlinux 0x00000000 crc_t10dif_update +EXPORT_SYMBOL vmlinux 0x00000000 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha256_update +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_finup +EXPORT_SYMBOL vmlinux 0x00000000 crypto_sha512_update +EXPORT_SYMBOL vmlinux 0x00000000 csch +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_from_iter_full +EXPORT_SYMBOL vmlinux 0x00000000 csum_and_copy_to_iter +EXPORT_SYMBOL vmlinux 0x00000000 csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x00000000 current_in_userns +EXPORT_SYMBOL vmlinux 0x00000000 current_kernel_time64 +EXPORT_SYMBOL vmlinux 0x00000000 current_time +EXPORT_SYMBOL vmlinux 0x00000000 current_umask +EXPORT_SYMBOL vmlinux 0x00000000 d_add +EXPORT_SYMBOL vmlinux 0x00000000 d_add_ci +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_parallel +EXPORT_SYMBOL vmlinux 0x00000000 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x00000000 d_delete +EXPORT_SYMBOL vmlinux 0x00000000 d_drop +EXPORT_SYMBOL vmlinux 0x00000000 d_exact_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_find_any_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_genocide +EXPORT_SYMBOL vmlinux 0x00000000 d_hash_and_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 d_instantiate_no_diralias +EXPORT_SYMBOL vmlinux 0x00000000 d_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 d_lookup +EXPORT_SYMBOL vmlinux 0x00000000 d_make_root +EXPORT_SYMBOL vmlinux 0x00000000 d_move +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_obtain_root +EXPORT_SYMBOL vmlinux 0x00000000 d_path +EXPORT_SYMBOL vmlinux 0x00000000 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x00000000 d_rehash +EXPORT_SYMBOL vmlinux 0x00000000 d_set_d_op +EXPORT_SYMBOL vmlinux 0x00000000 d_set_fallthru +EXPORT_SYMBOL vmlinux 0x00000000 d_splice_alias +EXPORT_SYMBOL vmlinux 0x00000000 d_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 datagram_poll +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x00000000 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x00000000 dcache_readdir +EXPORT_SYMBOL vmlinux 0x00000000 dcb_getapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x00000000 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcb_setapp +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x00000000 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x00000000 deactivate_super +EXPORT_SYMBOL vmlinux 0x00000000 debug_dflt_header_fn +EXPORT_SYMBOL vmlinux 0x00000000 debug_event_common +EXPORT_SYMBOL vmlinux 0x00000000 debug_exception_common +EXPORT_SYMBOL vmlinux 0x00000000 debug_hex_ascii_view +EXPORT_SYMBOL vmlinux 0x00000000 debug_raw_view +EXPORT_SYMBOL vmlinux 0x00000000 debug_register +EXPORT_SYMBOL vmlinux 0x00000000 debug_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 debug_register_view +EXPORT_SYMBOL vmlinux 0x00000000 debug_set_level +EXPORT_SYMBOL vmlinux 0x00000000 debug_sprintf_view +EXPORT_SYMBOL vmlinux 0x00000000 debug_stop_all +EXPORT_SYMBOL vmlinux 0x00000000 debug_unregister +EXPORT_SYMBOL vmlinux 0x00000000 debug_unregister_view +EXPORT_SYMBOL vmlinux 0x00000000 debugfs_create_automount +EXPORT_SYMBOL vmlinux 0x00000000 dec_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 default_llseek +EXPORT_SYMBOL vmlinux 0x00000000 default_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 default_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 del_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 del_random_ready_callback +EXPORT_SYMBOL vmlinux 0x00000000 del_timer +EXPORT_SYMBOL vmlinux 0x00000000 del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 del_virt_timer +EXPORT_SYMBOL vmlinux 0x00000000 delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x00000000 dentry_open +EXPORT_SYMBOL vmlinux 0x00000000 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x00000000 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x00000000 dev_activate +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_add_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_addr_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert +EXPORT_SYMBOL vmlinux 0x00000000 dev_alert_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_alloc_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_base_lock +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_carrier +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_change_proto_down +EXPORT_SYMBOL vmlinux 0x00000000 dev_close +EXPORT_SYMBOL vmlinux 0x00000000 dev_close_many +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit +EXPORT_SYMBOL vmlinux 0x00000000 dev_crit_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x00000000 dev_driver_string +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 dev_emerg_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_err +EXPORT_SYMBOL vmlinux 0x00000000 dev_err_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_by_napi_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_flags +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_iflink +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_nest_level +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_id +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_phys_port_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_stats +EXPORT_SYMBOL vmlinux 0x00000000 dev_get_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x00000000 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x00000000 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 dev_load +EXPORT_SYMBOL vmlinux 0x00000000 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice +EXPORT_SYMBOL vmlinux 0x00000000 dev_notice_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_open +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_printk_hash +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 dev_queue_xmit_accel +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x00000000 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_group +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x00000000 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x00000000 dev_trans_start +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_del +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_init +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_sync_multiple +EXPORT_SYMBOL vmlinux 0x00000000 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x00000000 dev_valid_name +EXPORT_SYMBOL vmlinux 0x00000000 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn +EXPORT_SYMBOL vmlinux 0x00000000 dev_warn_hash +EXPORT_SYMBOL vmlinux 0x00000000 device_add_disk +EXPORT_SYMBOL vmlinux 0x00000000 device_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 devm_alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0x00000000 devm_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_fwnode_get_index_gpiod_from_child +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_free +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_array_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_index_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_get_optional +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put +EXPORT_SYMBOL vmlinux 0x00000000 devm_gpiod_put_array +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_ioremap_wc +EXPORT_SYMBOL vmlinux 0x00000000 devm_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 devm_memremap +EXPORT_SYMBOL vmlinux 0x00000000 devm_memunmap +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfg_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_pci_remap_cfgspace +EXPORT_SYMBOL vmlinux 0x00000000 devm_register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 devm_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_any_context_irq +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_resource +EXPORT_SYMBOL vmlinux 0x00000000 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 dget_parent +EXPORT_SYMBOL vmlinux 0x00000000 diag14 +EXPORT_SYMBOL vmlinux 0x00000000 diag204 +EXPORT_SYMBOL vmlinux 0x00000000 diag210 +EXPORT_SYMBOL vmlinux 0x00000000 diag224 +EXPORT_SYMBOL vmlinux 0x00000000 diag26c +EXPORT_SYMBOL vmlinux 0x00000000 diag_stat_inc +EXPORT_SYMBOL vmlinux 0x00000000 diag_stat_inc_norecursion +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq +EXPORT_SYMBOL vmlinux 0x00000000 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x00000000 disable_sacf_uaccess +EXPORT_SYMBOL vmlinux 0x00000000 disk_stack_limits +EXPORT_SYMBOL vmlinux 0x00000000 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 dm_consume_args +EXPORT_SYMBOL vmlinux 0x00000000 dm_get_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_io +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x00000000 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x00000000 dm_kobject_release +EXPORT_SYMBOL vmlinux 0x00000000 dm_mq_kick_requeue_list +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_put_table_device +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_read_arg_group +EXPORT_SYMBOL vmlinux 0x00000000 dm_register_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_event +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_get_size +EXPORT_SYMBOL vmlinux 0x00000000 dm_table_run_md_queue_async +EXPORT_SYMBOL vmlinux 0x00000000 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x00000000 dm_vcalloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x00000000 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_add_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_context_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_default_wait +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_enable_sw_signaling +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_get_status +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_init +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_match_context +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_release +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_remove_callback +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_signal_locked +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_any_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_fence_wait_timeout +EXPORT_SYMBOL vmlinux 0x00000000 dma_noop_ops +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dma_pool_free +EXPORT_SYMBOL vmlinux 0x00000000 dma_virt_ops +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_attrs +EXPORT_SYMBOL vmlinux 0x00000000 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x00000000 dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dns_query +EXPORT_SYMBOL vmlinux 0x00000000 do_SAK +EXPORT_SYMBOL vmlinux 0x00000000 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x00000000 do_settimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 do_splice_direct +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr +EXPORT_SYMBOL vmlinux 0x00000000 do_wait_intr_irq +EXPORT_SYMBOL vmlinux 0x00000000 done_path_create +EXPORT_SYMBOL vmlinux 0x00000000 down +EXPORT_SYMBOL vmlinux 0x00000000 down_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 down_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read +EXPORT_SYMBOL vmlinux 0x00000000 down_read_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_read_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_timeout +EXPORT_SYMBOL vmlinux 0x00000000 down_trylock +EXPORT_SYMBOL vmlinux 0x00000000 down_write +EXPORT_SYMBOL vmlinux 0x00000000 down_write_killable +EXPORT_SYMBOL vmlinux 0x00000000 down_write_trylock +EXPORT_SYMBOL vmlinux 0x00000000 downgrade_write +EXPORT_SYMBOL vmlinux 0x00000000 dput +EXPORT_SYMBOL vmlinux 0x00000000 dq_data_lock +EXPORT_SYMBOL vmlinux 0x00000000 dqget +EXPORT_SYMBOL vmlinux 0x00000000 dql_completed +EXPORT_SYMBOL vmlinux 0x00000000 dql_init +EXPORT_SYMBOL vmlinux 0x00000000 dql_reset +EXPORT_SYMBOL vmlinux 0x00000000 dqput +EXPORT_SYMBOL vmlinux 0x00000000 dqstats +EXPORT_SYMBOL vmlinux 0x00000000 dquot_acquire +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit +EXPORT_SYMBOL vmlinux 0x00000000 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x00000000 dquot_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dquot_disable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_drop +EXPORT_SYMBOL vmlinux 0x00000000 dquot_enable +EXPORT_SYMBOL vmlinux 0x00000000 dquot_file_open +EXPORT_SYMBOL vmlinux 0x00000000 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_next_id +EXPORT_SYMBOL vmlinux 0x00000000 dquot_get_state +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize +EXPORT_SYMBOL vmlinux 0x00000000 dquot_initialize_needed +EXPORT_SYMBOL vmlinux 0x00000000 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_operations +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x00000000 dquot_quotactl_sysfile_ops +EXPORT_SYMBOL vmlinux 0x00000000 dquot_reclaim_space_nodirty +EXPORT_SYMBOL vmlinux 0x00000000 dquot_release +EXPORT_SYMBOL vmlinux 0x00000000 dquot_resume +EXPORT_SYMBOL vmlinux 0x00000000 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x00000000 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x00000000 dquot_transfer +EXPORT_SYMBOL vmlinux 0x00000000 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0x00000000 drop_nlink +EXPORT_SYMBOL vmlinux 0x00000000 drop_super +EXPORT_SYMBOL vmlinux 0x00000000 drop_super_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x00000000 dst_destroy +EXPORT_SYMBOL vmlinux 0x00000000 dst_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 dst_discard_out +EXPORT_SYMBOL vmlinux 0x00000000 dst_init +EXPORT_SYMBOL vmlinux 0x00000000 dst_release +EXPORT_SYMBOL vmlinux 0x00000000 dst_release_immediate +EXPORT_SYMBOL vmlinux 0x00000000 dump_align +EXPORT_SYMBOL vmlinux 0x00000000 dump_emit +EXPORT_SYMBOL vmlinux 0x00000000 dump_fpu +EXPORT_SYMBOL vmlinux 0x00000000 dump_page +EXPORT_SYMBOL vmlinux 0x00000000 dump_skip +EXPORT_SYMBOL vmlinux 0x00000000 dump_stack +EXPORT_SYMBOL vmlinux 0x00000000 dump_truncate +EXPORT_SYMBOL vmlinux 0x00000000 dup_iter +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0x00000000 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x00000000 elevator_alloc +EXPORT_SYMBOL vmlinux 0x00000000 elevator_exit +EXPORT_SYMBOL vmlinux 0x00000000 elevator_init +EXPORT_SYMBOL vmlinux 0x00000000 elv_add_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_bio_merge_ok +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x00000000 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_add +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_del +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_find +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x00000000 elv_register_queue +EXPORT_SYMBOL vmlinux 0x00000000 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x00000000 empty_aops +EXPORT_SYMBOL vmlinux 0x00000000 empty_name +EXPORT_SYMBOL vmlinux 0x00000000 empty_zero_page +EXPORT_SYMBOL vmlinux 0x00000000 enable_irq +EXPORT_SYMBOL vmlinux 0x00000000 enable_sacf_uaccess +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x00000000 end_page_writeback +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check +EXPORT_SYMBOL vmlinux 0x00000000 errseq_check_and_advance +EXPORT_SYMBOL vmlinux 0x00000000 errseq_sample +EXPORT_SYMBOL vmlinux 0x00000000 errseq_set +EXPORT_SYMBOL vmlinux 0x00000000 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x00000000 eth_commit_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_get_headlen +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 eth_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 eth_header +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x00000000 eth_header_parse +EXPORT_SYMBOL vmlinux 0x00000000 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x00000000 eth_platform_get_mac_address +EXPORT_SYMBOL vmlinux 0x00000000 eth_prepare_mac_addr_change +EXPORT_SYMBOL vmlinux 0x00000000 eth_type_trans +EXPORT_SYMBOL vmlinux 0x00000000 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x00000000 ether_setup +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_legacy_u32_to_link_mode +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_convert_link_mode_to_legacy_u32 +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_intersect_link_masks +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x00000000 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x00000000 f_setown +EXPORT_SYMBOL vmlinux 0x00000000 fasync_helper +EXPORT_SYMBOL vmlinux 0x00000000 fd_install +EXPORT_SYMBOL vmlinux 0x00000000 fget +EXPORT_SYMBOL vmlinux 0x00000000 fget_raw +EXPORT_SYMBOL vmlinux 0x00000000 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 fib_notifier_ops_unregister +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x00000000 fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0x00000000 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x00000000 file_check_and_advance_wb_err +EXPORT_SYMBOL vmlinux 0x00000000 file_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 file_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 file_open_root +EXPORT_SYMBOL vmlinux 0x00000000 file_path +EXPORT_SYMBOL vmlinux 0x00000000 file_remove_privs +EXPORT_SYMBOL vmlinux 0x00000000 file_update_time +EXPORT_SYMBOL vmlinux 0x00000000 file_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_check_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fault +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_keep_errors +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x00000000 filemap_flush +EXPORT_SYMBOL vmlinux 0x00000000 filemap_map_pages +EXPORT_SYMBOL vmlinux 0x00000000 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 filemap_range_has_page +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x00000000 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x00000000 filp_clone_open +EXPORT_SYMBOL vmlinux 0x00000000 filp_close +EXPORT_SYMBOL vmlinux 0x00000000 filp_open +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_first_bit_inv +EXPORT_SYMBOL vmlinux 0x00000000 find_first_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entries_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_get_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x00000000 find_get_pages_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 find_inode_nowait +EXPORT_SYMBOL vmlinux 0x00000000 find_last_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_lock_entry +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit_inv +EXPORT_SYMBOL vmlinux 0x00000000 find_next_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x00000000 find_next_zero_bit_le +EXPORT_SYMBOL vmlinux 0x00000000 find_vma +EXPORT_SYMBOL vmlinux 0x00000000 finish_no_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_open +EXPORT_SYMBOL vmlinux 0x00000000 finish_swait +EXPORT_SYMBOL vmlinux 0x00000000 finish_wait +EXPORT_SYMBOL vmlinux 0x00000000 fixed_size_llseek +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_alloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_clear +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_put +EXPORT_SYMBOL vmlinux 0x00000000 flex_array_shrink +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_dst +EXPORT_SYMBOL vmlinux 0x00000000 flow_get_u32_src +EXPORT_SYMBOL vmlinux 0x00000000 flow_hash_from_keys +EXPORT_SYMBOL vmlinux 0x00000000 flow_keys_dissector +EXPORT_SYMBOL vmlinux 0x00000000 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 flush_old_exec +EXPORT_SYMBOL vmlinux 0x00000000 flush_signals +EXPORT_SYMBOL vmlinux 0x00000000 flush_workqueue +EXPORT_SYMBOL vmlinux 0x00000000 follow_down +EXPORT_SYMBOL vmlinux 0x00000000 follow_down_one +EXPORT_SYMBOL vmlinux 0x00000000 follow_pfn +EXPORT_SYMBOL vmlinux 0x00000000 follow_pte_pmd +EXPORT_SYMBOL vmlinux 0x00000000 follow_up +EXPORT_SYMBOL vmlinux 0x00000000 force_sig +EXPORT_SYMBOL vmlinux 0x00000000 forget_all_cached_acls +EXPORT_SYMBOL vmlinux 0x00000000 forget_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 fortify_panic +EXPORT_SYMBOL vmlinux 0x00000000 fput +EXPORT_SYMBOL vmlinux 0x00000000 free_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 free_buffer_head +EXPORT_SYMBOL vmlinux 0x00000000 free_cgroup_ns +EXPORT_SYMBOL vmlinux 0x00000000 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x00000000 free_irq +EXPORT_SYMBOL vmlinux 0x00000000 free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x00000000 free_netdev +EXPORT_SYMBOL vmlinux 0x00000000 free_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 free_pages +EXPORT_SYMBOL vmlinux 0x00000000 free_pages_exact +EXPORT_SYMBOL vmlinux 0x00000000 free_reserved_area +EXPORT_SYMBOL vmlinux 0x00000000 free_task +EXPORT_SYMBOL vmlinux 0x00000000 freeze_bdev +EXPORT_SYMBOL vmlinux 0x00000000 freeze_super +EXPORT_SYMBOL vmlinux 0x00000000 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid +EXPORT_SYMBOL vmlinux 0x00000000 from_kgid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 from_kprojid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid +EXPORT_SYMBOL vmlinux 0x00000000 from_kqid_munged +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid +EXPORT_SYMBOL vmlinux 0x00000000 from_kuid_munged +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_shrink +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x00000000 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0x00000000 fs_bio_set +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_d_ops +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_bio_pages +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_decrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_encrypt_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_alloc_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_disk_to_usr +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_encrypted_size +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_free_buffer +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_fname_usr_to_disk +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_get_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_has_permitted_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_inherit_context +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_get_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_ioctl_set_policy +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_pullback_bio_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_put_encryption_info +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_release_ctx +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_restore_control_page +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_setup_filename +EXPORT_SYMBOL vmlinux 0x00000000 fscrypt_zeroout_range +EXPORT_SYMBOL vmlinux 0x00000000 fsync_bdev +EXPORT_SYMBOL vmlinux 0x00000000 full_name_hash +EXPORT_SYMBOL vmlinux 0x00000000 fwnode_graph_parse_endpoint +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_active +EXPORT_SYMBOL vmlinux 0x00000000 gen_estimator_read +EXPORT_SYMBOL vmlinux 0x00000000 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x00000000 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x00000000 generate_random_uuid +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x00000000 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x00000000 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x00000000 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x00000000 generic_end_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_open +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_read_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 generic_file_write_iter +EXPORT_SYMBOL vmlinux 0x00000000 generic_fillattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_key_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 generic_listxattr +EXPORT_SYMBOL vmlinux 0x00000000 generic_make_request +EXPORT_SYMBOL vmlinux 0x00000000 generic_perform_write +EXPORT_SYMBOL vmlinux 0x00000000 generic_permission +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x00000000 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x00000000 generic_read_dir +EXPORT_SYMBOL vmlinux 0x00000000 generic_ro_fops +EXPORT_SYMBOL vmlinux 0x00000000 generic_setlease +EXPORT_SYMBOL vmlinux 0x00000000 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x00000000 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 generic_start_io_acct +EXPORT_SYMBOL vmlinux 0x00000000 generic_update_time +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_checks +EXPORT_SYMBOL vmlinux 0x00000000 generic_write_end +EXPORT_SYMBOL vmlinux 0x00000000 generic_writepages +EXPORT_SYMBOL vmlinux 0x00000000 genl_family_attrbuf +EXPORT_SYMBOL vmlinux 0x00000000 genl_lock +EXPORT_SYMBOL vmlinux 0x00000000 genl_notify +EXPORT_SYMBOL vmlinux 0x00000000 genl_register_family +EXPORT_SYMBOL vmlinux 0x00000000 genl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00000000 genlmsg_put +EXPORT_SYMBOL vmlinux 0x00000000 get_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_anon_bdev +EXPORT_SYMBOL vmlinux 0x00000000 get_bitmap_from_slot +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 get_cached_acl_rcu +EXPORT_SYMBOL vmlinux 0x00000000 get_ccwdev_by_busid +EXPORT_SYMBOL vmlinux 0x00000000 get_disk +EXPORT_SYMBOL vmlinux 0x00000000 get_fs_type +EXPORT_SYMBOL vmlinux 0x00000000 get_gendisk +EXPORT_SYMBOL vmlinux 0x00000000 get_guest_storage_key +EXPORT_SYMBOL vmlinux 0x00000000 get_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_mm_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_monotonic_coarse64 +EXPORT_SYMBOL vmlinux 0x00000000 get_next_ino +EXPORT_SYMBOL vmlinux 0x00000000 get_option +EXPORT_SYMBOL vmlinux 0x00000000 get_options +EXPORT_SYMBOL vmlinux 0x00000000 get_pgste +EXPORT_SYMBOL vmlinux 0x00000000 get_phys_clock +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u32 +EXPORT_SYMBOL vmlinux 0x00000000 get_random_u64 +EXPORT_SYMBOL vmlinux 0x00000000 get_seconds +EXPORT_SYMBOL vmlinux 0x00000000 get_super +EXPORT_SYMBOL vmlinux 0x00000000 get_super_exclusive_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_super_thawed +EXPORT_SYMBOL vmlinux 0x00000000 get_task_exe_file +EXPORT_SYMBOL vmlinux 0x00000000 get_task_io_context +EXPORT_SYMBOL vmlinux 0x00000000 get_unmapped_area +EXPORT_SYMBOL vmlinux 0x00000000 get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_locked +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_longterm +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_remote +EXPORT_SYMBOL vmlinux 0x00000000 get_user_pages_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x00000000 getnstimeofday64 +EXPORT_SYMBOL vmlinux 0x00000000 getrawmonotonic64 +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_free_64k +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_4k_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_init_64k_bbe +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_lle +EXPORT_SYMBOL vmlinux 0x00000000 gf128mul_x8_ble +EXPORT_SYMBOL vmlinux 0x00000000 glob_match +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x00000000 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x00000000 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_destroy +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_init +EXPORT_SYMBOL vmlinux 0x00000000 gro_cells_receive +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_complete_by_type +EXPORT_SYMBOL vmlinux 0x00000000 gro_find_receive_by_type +EXPORT_SYMBOL vmlinux 0x00000000 groups_alloc +EXPORT_SYMBOL vmlinux 0x00000000 groups_free +EXPORT_SYMBOL vmlinux 0x00000000 groups_sort +EXPORT_SYMBOL vmlinux 0x00000000 guid_null +EXPORT_SYMBOL vmlinux 0x00000000 guid_parse +EXPORT_SYMBOL vmlinux 0x00000000 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x00000000 handle_sysrq +EXPORT_SYMBOL vmlinux 0x00000000 has_capability +EXPORT_SYMBOL vmlinux 0x00000000 hashlen_string +EXPORT_SYMBOL vmlinux 0x00000000 hex2bin +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc +EXPORT_SYMBOL vmlinux 0x00000000 hex_asc_upper +EXPORT_SYMBOL vmlinux 0x00000000 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 hex_to_bin +EXPORT_SYMBOL vmlinux 0x00000000 high_memory +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_2u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 hsiphash_4u32 +EXPORT_SYMBOL vmlinux 0x00000000 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmp_global_allow +EXPORT_SYMBOL vmlinux 0x00000000 icmp_send +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x00000000 icmpv6_send +EXPORT_SYMBOL vmlinux 0x00000000 ida_destroy +EXPORT_SYMBOL vmlinux 0x00000000 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x00000000 ida_pre_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_remove +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_get +EXPORT_SYMBOL vmlinux 0x00000000 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x00000000 idr_alloc_cyclic +EXPORT_SYMBOL vmlinux 0x00000000 idr_destroy +EXPORT_SYMBOL vmlinux 0x00000000 idr_for_each +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next +EXPORT_SYMBOL vmlinux 0x00000000 idr_get_next_ext +EXPORT_SYMBOL vmlinux 0x00000000 idr_preload +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace +EXPORT_SYMBOL vmlinux 0x00000000 idr_replace_ext +EXPORT_SYMBOL vmlinux 0x00000000 iget5_locked +EXPORT_SYMBOL vmlinux 0x00000000 iget_failed +EXPORT_SYMBOL vmlinux 0x00000000 iget_locked +EXPORT_SYMBOL vmlinux 0x00000000 igrab +EXPORT_SYMBOL vmlinux 0x00000000 ihold +EXPORT_SYMBOL vmlinux 0x00000000 ilookup +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5 +EXPORT_SYMBOL vmlinux 0x00000000 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x00000000 import_iovec +EXPORT_SYMBOL vmlinux 0x00000000 import_single_range +EXPORT_SYMBOL vmlinux 0x00000000 in4_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in6_pton +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_any +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_interfacelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allnodes +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_linklocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_loopback +EXPORT_SYMBOL vmlinux 0x00000000 in6addr_sitelocal_allrouters +EXPORT_SYMBOL vmlinux 0x00000000 in_aton +EXPORT_SYMBOL vmlinux 0x00000000 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x00000000 in_egroup_p +EXPORT_SYMBOL vmlinux 0x00000000 in_group_p +EXPORT_SYMBOL vmlinux 0x00000000 in_lock_functions +EXPORT_SYMBOL vmlinux 0x00000000 inc_nlink +EXPORT_SYMBOL vmlinux 0x00000000 inc_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet6_csk_route_req +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet6_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet6_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet6_protos +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6_release +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_icmp_sender +EXPORT_SYMBOL vmlinux 0x00000000 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet6addr_validator_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x00000000 inet_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_dev_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_addr_type_table +EXPORT_SYMBOL vmlinux 0x00000000 inet_bind +EXPORT_SYMBOL vmlinux 0x00000000 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_complete_hashdance +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_add +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reqsk_queue_drop_and_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x00000000 inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x00000000 inet_current_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_offload +EXPORT_SYMBOL vmlinux 0x00000000 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x00000000 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_find +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x00000000 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x00000000 inet_frags_init +EXPORT_SYMBOL vmlinux 0x00000000 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x00000000 inet_getname +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 inet_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 inet_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 inet_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 inet_listen +EXPORT_SYMBOL vmlinux 0x00000000 inet_offloads +EXPORT_SYMBOL vmlinux 0x00000000 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x00000000 inet_proto_csum_replace_by_diff +EXPORT_SYMBOL vmlinux 0x00000000 inet_pton_with_scope +EXPORT_SYMBOL vmlinux 0x00000000 inet_put_port +EXPORT_SYMBOL vmlinux 0x00000000 inet_rcv_saddr_equal +EXPORT_SYMBOL vmlinux 0x00000000 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inet_release +EXPORT_SYMBOL vmlinux 0x00000000 inet_reqsk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x00000000 inet_select_addr +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 inet_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 inet_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x00000000 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 inet_stream_ops +EXPORT_SYMBOL vmlinux 0x00000000 inet_twsk_deschedule_put +EXPORT_SYMBOL vmlinux 0x00000000 inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x00000000 inetdev_by_index +EXPORT_SYMBOL vmlinux 0x00000000 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x00000000 init_buffer +EXPORT_SYMBOL vmlinux 0x00000000 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x00000000 init_net +EXPORT_SYMBOL vmlinux 0x00000000 init_opal_dev +EXPORT_SYMBOL vmlinux 0x00000000 init_special_inode +EXPORT_SYMBOL vmlinux 0x00000000 init_task +EXPORT_SYMBOL vmlinux 0x00000000 init_timer_key +EXPORT_SYMBOL vmlinux 0x00000000 init_virt_timer +EXPORT_SYMBOL vmlinux 0x00000000 init_wait_entry +EXPORT_SYMBOL vmlinux 0x00000000 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x00000000 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_always +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_once +EXPORT_SYMBOL vmlinux 0x00000000 inode_init_owner +EXPORT_SYMBOL vmlinux 0x00000000 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x00000000 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x00000000 inode_nohighmem +EXPORT_SYMBOL vmlinux 0x00000000 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x00000000 inode_permission +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x00000000 inode_set_flags +EXPORT_SYMBOL vmlinux 0x00000000 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x00000000 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x00000000 install_exec_creds +EXPORT_SYMBOL vmlinux 0x00000000 int_sqrt +EXPORT_SYMBOL vmlinux 0x00000000 int_to_scsilun +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x00000000 invalidate_partition +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule +EXPORT_SYMBOL vmlinux 0x00000000 io_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x00000000 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x00000000 iomem_resource +EXPORT_SYMBOL vmlinux 0x00000000 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_pool_init +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iommu_tbl_range_free +EXPORT_SYMBOL vmlinux 0x00000000 ioport_resource +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_bvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_for_each_range +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_gap_alignment +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_get_pages_alloc +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_init +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_kvec +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_npages +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_pipe +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_revert +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x00000000 iov_iter_zero +EXPORT_SYMBOL vmlinux 0x00000000 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x00000000 ip6_err_gen_icmpv6_unreach +EXPORT_SYMBOL vmlinux 0x00000000 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x00000000 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x00000000 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x00000000 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip6_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip6tun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_cmsg_recv_offset +EXPORT_SYMBOL vmlinux 0x00000000 ip_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 ip_defrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_do_fragment +EXPORT_SYMBOL vmlinux 0x00000000 ip_frag_ecn_table +EXPORT_SYMBOL vmlinux 0x00000000 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0x00000000 ip_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_idents_reserve +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_check_igmp +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_compile +EXPORT_SYMBOL vmlinux 0x00000000 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0x00000000 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x00000000 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x00000000 ip_send_check +EXPORT_SYMBOL vmlinux 0x00000000 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ip_tos2prio +EXPORT_SYMBOL vmlinux 0x00000000 ip_tunnel_metadata_cnt +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 ipmr_rule_default +EXPORT_SYMBOL vmlinux 0x00000000 iptun_encaps +EXPORT_SYMBOL vmlinux 0x00000000 iput +EXPORT_SYMBOL vmlinux 0x00000000 ipv4_specific +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_addr_and_flags +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_custom_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_mc_check_mld +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_push_frag_opts +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_drop +EXPORT_SYMBOL vmlinux 0x00000000 ipv6_sock_mc_join +EXPORT_SYMBOL vmlinux 0x00000000 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_complete +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_init +EXPORT_SYMBOL vmlinux 0x00000000 irq_poll_sched +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x00000000 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0x00000000 irq_subclass_register +EXPORT_SYMBOL vmlinux 0x00000000 irq_subclass_unregister +EXPORT_SYMBOL vmlinux 0x00000000 irq_to_desc +EXPORT_SYMBOL vmlinux 0x00000000 is_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 is_module_sig_enforced +EXPORT_SYMBOL vmlinux 0x00000000 isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0x00000000 itcw_add_dcw +EXPORT_SYMBOL vmlinux 0x00000000 itcw_add_tidaw +EXPORT_SYMBOL vmlinux 0x00000000 itcw_calc_size +EXPORT_SYMBOL vmlinux 0x00000000 itcw_finalize +EXPORT_SYMBOL vmlinux 0x00000000 itcw_get_tcw +EXPORT_SYMBOL vmlinux 0x00000000 itcw_init +EXPORT_SYMBOL vmlinux 0x00000000 itcw_set_data +EXPORT_SYMBOL vmlinux 0x00000000 iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0x00000000 iter_file_splice_write +EXPORT_SYMBOL vmlinux 0x00000000 iterate_dir +EXPORT_SYMBOL vmlinux 0x00000000 iterate_fd +EXPORT_SYMBOL vmlinux 0x00000000 iterate_supers_type +EXPORT_SYMBOL vmlinux 0x00000000 iucv_bus +EXPORT_SYMBOL vmlinux 0x00000000 iucv_if +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_purge +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_receive +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_reject +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_reply +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_send +EXPORT_SYMBOL vmlinux 0x00000000 iucv_message_send2way +EXPORT_SYMBOL vmlinux 0x00000000 iucv_path_accept +EXPORT_SYMBOL vmlinux 0x00000000 iucv_path_connect +EXPORT_SYMBOL vmlinux 0x00000000 iucv_path_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 iucv_path_sever +EXPORT_SYMBOL vmlinux 0x00000000 iucv_register +EXPORT_SYMBOL vmlinux 0x00000000 iucv_root +EXPORT_SYMBOL vmlinux 0x00000000 iucv_unregister +EXPORT_SYMBOL vmlinux 0x00000000 iunique +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_free_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_wait +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_inode_add_write +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_start_reserved +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x00000000 jbd2_transaction_committed +EXPORT_SYMBOL vmlinux 0x00000000 jiffies +EXPORT_SYMBOL vmlinux 0x00000000 jiffies64_to_nsecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x00000000 kasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kbd_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kbd_ascebc +EXPORT_SYMBOL vmlinux 0x00000000 kbd_free +EXPORT_SYMBOL vmlinux 0x00000000 kbd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kbd_keycode +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_mod_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x00000000 kblockd_schedule_work_on +EXPORT_SYMBOL vmlinux 0x00000000 kern_path +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_create +EXPORT_SYMBOL vmlinux 0x00000000 kern_path_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 kern_unmount +EXPORT_SYMBOL vmlinux 0x00000000 kernel_accept +EXPORT_SYMBOL vmlinux 0x00000000 kernel_bind +EXPORT_SYMBOL vmlinux 0x00000000 kernel_connect +EXPORT_SYMBOL vmlinux 0x00000000 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getpeername +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x00000000 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_listen +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_lock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_param_unlock +EXPORT_SYMBOL vmlinux 0x00000000 kernel_read +EXPORT_SYMBOL vmlinux 0x00000000 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sigaction +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_ip_overhead +EXPORT_SYMBOL vmlinux 0x00000000 kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 kernel_write +EXPORT_SYMBOL vmlinux 0x00000000 key_alloc +EXPORT_SYMBOL vmlinux 0x00000000 key_create_or_update +EXPORT_SYMBOL vmlinux 0x00000000 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_invalidate +EXPORT_SYMBOL vmlinux 0x00000000 key_link +EXPORT_SYMBOL vmlinux 0x00000000 key_payload_reserve +EXPORT_SYMBOL vmlinux 0x00000000 key_put +EXPORT_SYMBOL vmlinux 0x00000000 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x00000000 key_revoke +EXPORT_SYMBOL vmlinux 0x00000000 key_task_permission +EXPORT_SYMBOL vmlinux 0x00000000 key_type_keyring +EXPORT_SYMBOL vmlinux 0x00000000 key_unlink +EXPORT_SYMBOL vmlinux 0x00000000 key_update +EXPORT_SYMBOL vmlinux 0x00000000 key_validate +EXPORT_SYMBOL vmlinux 0x00000000 keyring_alloc +EXPORT_SYMBOL vmlinux 0x00000000 keyring_clear +EXPORT_SYMBOL vmlinux 0x00000000 keyring_restrict +EXPORT_SYMBOL vmlinux 0x00000000 keyring_search +EXPORT_SYMBOL vmlinux 0x00000000 kfree +EXPORT_SYMBOL vmlinux 0x00000000 kfree_const +EXPORT_SYMBOL vmlinux 0x00000000 kfree_link +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_list +EXPORT_SYMBOL vmlinux 0x00000000 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x00000000 kill_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_bdev +EXPORT_SYMBOL vmlinux 0x00000000 kill_block_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_fasync +EXPORT_SYMBOL vmlinux 0x00000000 kill_litter_super +EXPORT_SYMBOL vmlinux 0x00000000 kill_pgrp +EXPORT_SYMBOL vmlinux 0x00000000 kill_pid +EXPORT_SYMBOL vmlinux 0x00000000 kiocb_set_cancel_fn +EXPORT_SYMBOL vmlinux 0x00000000 km_is_alive +EXPORT_SYMBOL vmlinux 0x00000000 km_new_mapping +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_policy_notify +EXPORT_SYMBOL vmlinux 0x00000000 km_query +EXPORT_SYMBOL vmlinux 0x00000000 km_report +EXPORT_SYMBOL vmlinux 0x00000000 km_state_expired +EXPORT_SYMBOL vmlinux 0x00000000 km_state_notify +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_dma_caches +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order +EXPORT_SYMBOL vmlinux 0x00000000 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_free_bulk +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x00000000 kmem_cache_size +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup +EXPORT_SYMBOL vmlinux 0x00000000 kmemdup_nul +EXPORT_SYMBOL vmlinux 0x00000000 kobject_add +EXPORT_SYMBOL vmlinux 0x00000000 kobject_del +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get +EXPORT_SYMBOL vmlinux 0x00000000 kobject_get_unless_zero +EXPORT_SYMBOL vmlinux 0x00000000 kobject_init +EXPORT_SYMBOL vmlinux 0x00000000 kobject_put +EXPORT_SYMBOL vmlinux 0x00000000 kobject_set_name +EXPORT_SYMBOL vmlinux 0x00000000 krealloc +EXPORT_SYMBOL vmlinux 0x00000000 kset_register +EXPORT_SYMBOL vmlinux 0x00000000 kset_unregister +EXPORT_SYMBOL vmlinux 0x00000000 ksize +EXPORT_SYMBOL vmlinux 0x00000000 kstat +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup +EXPORT_SYMBOL vmlinux 0x00000000 kstrdup_const +EXPORT_SYMBOL vmlinux 0x00000000 kstrndup +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool +EXPORT_SYMBOL vmlinux 0x00000000 kstrtobool_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8 +EXPORT_SYMBOL vmlinux 0x00000000 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint +EXPORT_SYMBOL vmlinux 0x00000000 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull +EXPORT_SYMBOL vmlinux 0x00000000 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x00000000 kthread_associate_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_bind +EXPORT_SYMBOL vmlinux 0x00000000 kthread_blkcg +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_create_worker_on_cpu +EXPORT_SYMBOL vmlinux 0x00000000 kthread_delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x00000000 kthread_destroy_worker +EXPORT_SYMBOL vmlinux 0x00000000 kthread_should_stop +EXPORT_SYMBOL vmlinux 0x00000000 kthread_stop +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf +EXPORT_SYMBOL vmlinux 0x00000000 kvasprintf_const +EXPORT_SYMBOL vmlinux 0x00000000 kvfree +EXPORT_SYMBOL vmlinux 0x00000000 kvmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 kzfree +EXPORT_SYMBOL vmlinux 0x00000000 laptop_mode +EXPORT_SYMBOL vmlinux 0x00000000 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x00000000 lease_modify +EXPORT_SYMBOL vmlinux 0x00000000 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x00000000 list_sort +EXPORT_SYMBOL vmlinux 0x00000000 ll_rw_block +EXPORT_SYMBOL vmlinux 0x00000000 load_nls +EXPORT_SYMBOL vmlinux 0x00000000 load_nls_default +EXPORT_SYMBOL vmlinux 0x00000000 lock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 lock_rename +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x00000000 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x00000000 lock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_not_zero +EXPORT_SYMBOL vmlinux 0x00000000 lockref_get_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_mark_dead +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_or_lock +EXPORT_SYMBOL vmlinux 0x00000000 lockref_put_return +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_conflock +EXPORT_SYMBOL vmlinux 0x00000000 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_free_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_init_lock +EXPORT_SYMBOL vmlinux 0x00000000 locks_lock_inode_wait +EXPORT_SYMBOL vmlinux 0x00000000 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x00000000 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x00000000 lookup_bdev +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len +EXPORT_SYMBOL vmlinux 0x00000000 lookup_one_len_unlocked +EXPORT_SYMBOL vmlinux 0x00000000 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0x00000000 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0x00000000 lowcore_ptr +EXPORT_SYMBOL vmlinux 0x00000000 lru_cache_add_file +EXPORT_SYMBOL vmlinux 0x00000000 mac_pton +EXPORT_SYMBOL vmlinux 0x00000000 make_bad_inode +EXPORT_SYMBOL vmlinux 0x00000000 make_flow_keys_digest +EXPORT_SYMBOL vmlinux 0x00000000 make_kgid +EXPORT_SYMBOL vmlinux 0x00000000 make_kprojid +EXPORT_SYMBOL vmlinux 0x00000000 make_kuid +EXPORT_SYMBOL vmlinux 0x00000000 mangle_path +EXPORT_SYMBOL vmlinux 0x00000000 mapping_tagged +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x00000000 mark_buffer_write_io_error +EXPORT_SYMBOL vmlinux 0x00000000 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x00000000 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x00000000 match_hex +EXPORT_SYMBOL vmlinux 0x00000000 match_int +EXPORT_SYMBOL vmlinux 0x00000000 match_octal +EXPORT_SYMBOL vmlinux 0x00000000 match_strdup +EXPORT_SYMBOL vmlinux 0x00000000 match_string +EXPORT_SYMBOL vmlinux 0x00000000 match_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 match_token +EXPORT_SYMBOL vmlinux 0x00000000 match_u64 +EXPORT_SYMBOL vmlinux 0x00000000 match_wildcard +EXPORT_SYMBOL vmlinux 0x00000000 may_umount +EXPORT_SYMBOL vmlinux 0x00000000 may_umount_tree +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_create +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_delete +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x00000000 mb_cache_entry_touch +EXPORT_SYMBOL vmlinux 0x00000000 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x00000000 md_check_recovery +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_mod +EXPORT_SYMBOL vmlinux 0x00000000 md_cluster_ops +EXPORT_SYMBOL vmlinux 0x00000000 md_done_sync +EXPORT_SYMBOL vmlinux 0x00000000 md_error +EXPORT_SYMBOL vmlinux 0x00000000 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x00000000 md_flush_request +EXPORT_SYMBOL vmlinux 0x00000000 md_handle_request +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_integrity_register +EXPORT_SYMBOL vmlinux 0x00000000 md_reap_sync_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_register_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_reload_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x00000000 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_update_sb +EXPORT_SYMBOL vmlinux 0x00000000 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x00000000 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x00000000 md_write_end +EXPORT_SYMBOL vmlinux 0x00000000 md_write_inc +EXPORT_SYMBOL vmlinux 0x00000000 md_write_start +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_register_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mdiobus_setup_mdiodev_from_board_info +EXPORT_SYMBOL vmlinux 0x00000000 mem_cgroup_from_task +EXPORT_SYMBOL vmlinux 0x00000000 mem_section +EXPORT_SYMBOL vmlinux 0x00000000 memcg_kmem_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memcg_sockets_enabled_key +EXPORT_SYMBOL vmlinux 0x00000000 memchr +EXPORT_SYMBOL vmlinux 0x00000000 memchr_inv +EXPORT_SYMBOL vmlinux 0x00000000 memcmp +EXPORT_SYMBOL vmlinux 0x00000000 memcpy +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user +EXPORT_SYMBOL vmlinux 0x00000000 memdup_user_nul +EXPORT_SYMBOL vmlinux 0x00000000 memmove +EXPORT_SYMBOL vmlinux 0x00000000 memory_cgrp_subsys +EXPORT_SYMBOL vmlinux 0x00000000 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 memparse +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create +EXPORT_SYMBOL vmlinux 0x00000000 mempool_create_node +EXPORT_SYMBOL vmlinux 0x00000000 mempool_destroy +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_pages +EXPORT_SYMBOL vmlinux 0x00000000 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kfree +EXPORT_SYMBOL vmlinux 0x00000000 mempool_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 mempool_resize +EXPORT_SYMBOL vmlinux 0x00000000 memremap +EXPORT_SYMBOL vmlinux 0x00000000 memscan +EXPORT_SYMBOL vmlinux 0x00000000 memset +EXPORT_SYMBOL vmlinux 0x00000000 memunmap +EXPORT_SYMBOL vmlinux 0x00000000 memweight +EXPORT_SYMBOL vmlinux 0x00000000 memzero_explicit +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_copy +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_move_mapping +EXPORT_SYMBOL vmlinux 0x00000000 migrate_page_states +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_init +EXPORT_SYMBOL vmlinux 0x00000000 mini_qdisc_pair_swap +EXPORT_SYMBOL vmlinux 0x00000000 minmax_running_max +EXPORT_SYMBOL vmlinux 0x00000000 misc_deregister +EXPORT_SYMBOL vmlinux 0x00000000 misc_register +EXPORT_SYMBOL vmlinux 0x00000000 mktime64 +EXPORT_SYMBOL vmlinux 0x00000000 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x00000000 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x00000000 mntget +EXPORT_SYMBOL vmlinux 0x00000000 mntput +EXPORT_SYMBOL vmlinux 0x00000000 mod_node_page_state +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_timer_pending +EXPORT_SYMBOL vmlinux 0x00000000 mod_virt_timer +EXPORT_SYMBOL vmlinux 0x00000000 mod_virt_timer_periodic +EXPORT_SYMBOL vmlinux 0x00000000 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x00000000 module_put +EXPORT_SYMBOL vmlinux 0x00000000 module_refcount +EXPORT_SYMBOL vmlinux 0x00000000 monotonic_clock +EXPORT_SYMBOL vmlinux 0x00000000 mount_bdev +EXPORT_SYMBOL vmlinux 0x00000000 mount_nodev +EXPORT_SYMBOL vmlinux 0x00000000 mount_ns +EXPORT_SYMBOL vmlinux 0x00000000 mount_pseudo_xattr +EXPORT_SYMBOL vmlinux 0x00000000 mount_single +EXPORT_SYMBOL vmlinux 0x00000000 mount_subtree +EXPORT_SYMBOL vmlinux 0x00000000 movable_zone +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_readpages +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepage +EXPORT_SYMBOL vmlinux 0x00000000 mpage_writepages +EXPORT_SYMBOL vmlinux 0x00000000 msi_desc_to_pci_dev +EXPORT_SYMBOL vmlinux 0x00000000 msleep +EXPORT_SYMBOL vmlinux 0x00000000 msleep_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x00000000 mutex_trylock +EXPORT_SYMBOL vmlinux 0x00000000 mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x00000000 names_cachep +EXPORT_SYMBOL vmlinux 0x00000000 napi_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 napi_busy_loop +EXPORT_SYMBOL vmlinux 0x00000000 napi_complete_done +EXPORT_SYMBOL vmlinux 0x00000000 napi_consume_skb +EXPORT_SYMBOL vmlinux 0x00000000 napi_disable +EXPORT_SYMBOL vmlinux 0x00000000 napi_get_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_flush +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x00000000 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 napi_schedule_prep +EXPORT_SYMBOL vmlinux 0x00000000 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_add +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_del +EXPORT_SYMBOL vmlinux 0x00000000 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x00000000 neigh_app_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x00000000 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_destroy +EXPORT_SYMBOL vmlinux 0x00000000 neigh_direct_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x00000000 neigh_for_each +EXPORT_SYMBOL vmlinux 0x00000000 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x00000000 neigh_parms_release +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x00000000 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x00000000 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x00000000 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x00000000 neigh_table_init +EXPORT_SYMBOL vmlinux 0x00000000 neigh_update +EXPORT_SYMBOL vmlinux 0x00000000 neigh_xmit +EXPORT_SYMBOL vmlinux 0x00000000 net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 net_ns_barrier +EXPORT_SYMBOL vmlinux 0x00000000 net_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_adjacent_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alert +EXPORT_SYMBOL vmlinux 0x00000000 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x00000000 netdev_bonding_info_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x00000000 netdev_change_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_create_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_class_remove_file_ns +EXPORT_SYMBOL vmlinux 0x00000000 netdev_crit +EXPORT_SYMBOL vmlinux 0x00000000 netdev_emerg +EXPORT_SYMBOL vmlinux 0x00000000 netdev_err +EXPORT_SYMBOL vmlinux 0x00000000 netdev_features_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_any_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev +EXPORT_SYMBOL vmlinux 0x00000000 netdev_has_upper_dev_all_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_increment_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_info +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_dev_get_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_first_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_get_next_private_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_lower_state_changed +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_get_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_master_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notice +EXPORT_SYMBOL vmlinux 0x00000000 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0x00000000 netdev_printk +EXPORT_SYMBOL vmlinux 0x00000000 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x00000000 netdev_reset_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rss_key_fill +EXPORT_SYMBOL vmlinux 0x00000000 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_num_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_set_tc_queue +EXPORT_SYMBOL vmlinux 0x00000000 netdev_state_change +EXPORT_SYMBOL vmlinux 0x00000000 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0x00000000 netdev_txq_to_tc +EXPORT_SYMBOL vmlinux 0x00000000 netdev_update_features +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_link +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_dev_unlink +EXPORT_SYMBOL vmlinux 0x00000000 netdev_upper_get_next_dev_rcu +EXPORT_SYMBOL vmlinux 0x00000000 netdev_warn +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x00000000 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_attach +EXPORT_SYMBOL vmlinux 0x00000000 netif_device_detach +EXPORT_SYMBOL vmlinux 0x00000000 netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_add +EXPORT_SYMBOL vmlinux 0x00000000 netif_napi_del +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x00000000 netif_receive_skb_core +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx +EXPORT_SYMBOL vmlinux 0x00000000 netif_rx_ni +EXPORT_SYMBOL vmlinux 0x00000000 netif_schedule_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_set_xps_queue +EXPORT_SYMBOL vmlinux 0x00000000 netif_skb_features +EXPORT_SYMBOL vmlinux 0x00000000 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_stop_all_queues +EXPORT_SYMBOL vmlinux 0x00000000 netif_tx_wake_queue +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_audit_start +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_bitmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_calipso_ops_register +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_setbit +EXPORT_SYMBOL vmlinux 0x00000000 netlbl_catmap_walk +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ack +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x00000000 netlink_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0x00000000 netlink_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 netlink_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netlink_set_err +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unicast +EXPORT_SYMBOL vmlinux 0x00000000 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_disable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_poll_enable +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x00000000 netpoll_setup +EXPORT_SYMBOL vmlinux 0x00000000 new_inode +EXPORT_SYMBOL vmlinux 0x00000000 nf_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x00000000 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x00000000 nf_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x00000000 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_packet +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_register +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_set +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_trace +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nf_log_unset +EXPORT_SYMBOL vmlinux 0x00000000 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_reinject +EXPORT_SYMBOL vmlinux 0x00000000 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hook +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_net_hooks +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0x00000000 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x00000000 nla_append +EXPORT_SYMBOL vmlinux 0x00000000 nla_find +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_memcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_parse +EXPORT_SYMBOL vmlinux 0x00000000 nla_policy_len +EXPORT_SYMBOL vmlinux 0x00000000 nla_put +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_64bit +EXPORT_SYMBOL vmlinux 0x00000000 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x00000000 nla_strcmp +EXPORT_SYMBOL vmlinux 0x00000000 nla_strdup +EXPORT_SYMBOL vmlinux 0x00000000 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 nla_validate +EXPORT_SYMBOL vmlinux 0x00000000 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x00000000 nmi_panic +EXPORT_SYMBOL vmlinux 0x00000000 no_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_pci_devices +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek +EXPORT_SYMBOL vmlinux 0x00000000 no_seek_end_llseek_size +EXPORT_SYMBOL vmlinux 0x00000000 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 nobh_write_end +EXPORT_SYMBOL vmlinux 0x00000000 nobh_writepage +EXPORT_SYMBOL vmlinux 0x00000000 node_data +EXPORT_SYMBOL vmlinux 0x00000000 node_states +EXPORT_SYMBOL vmlinux 0x00000000 node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0x00000000 nonseekable_open +EXPORT_SYMBOL vmlinux 0x00000000 noop_fsync +EXPORT_SYMBOL vmlinux 0x00000000 noop_llseek +EXPORT_SYMBOL vmlinux 0x00000000 noop_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 nosteal_pipe_buf_ops +EXPORT_SYMBOL vmlinux 0x00000000 notify_change +EXPORT_SYMBOL vmlinux 0x00000000 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_node_ids +EXPORT_SYMBOL vmlinux 0x00000000 nr_online_nodes +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 ns_capable_noaudit +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x00000000 nsecs_to_jiffies64 +EXPORT_SYMBOL vmlinux 0x00000000 nvm_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 nvm_bb_tbl_fold +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_alloc +EXPORT_SYMBOL vmlinux 0x00000000 nvm_dev_dma_free +EXPORT_SYMBOL vmlinux 0x00000000 nvm_end_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_erase_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_l2p_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_get_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_max_phys_sects +EXPORT_SYMBOL vmlinux 0x00000000 nvm_part_to_tgt +EXPORT_SYMBOL vmlinux 0x00000000 nvm_put_area +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register +EXPORT_SYMBOL vmlinux 0x00000000 nvm_register_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 nvm_set_tgt_bb_tbl +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io +EXPORT_SYMBOL vmlinux 0x00000000 nvm_submit_io_sync +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister +EXPORT_SYMBOL vmlinux 0x00000000 nvm_unregister_tgt_type +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0x00000000 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 oops_in_progress +EXPORT_SYMBOL vmlinux 0x00000000 opal_unlock_from_suspend +EXPORT_SYMBOL vmlinux 0x00000000 open_exec +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0x00000000 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x00000000 overflowgid +EXPORT_SYMBOL vmlinux 0x00000000 overflowuid +EXPORT_SYMBOL vmlinux 0x00000000 override_creds +EXPORT_SYMBOL vmlinux 0x00000000 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_parallel +EXPORT_SYMBOL vmlinux 0x00000000 padata_do_serial +EXPORT_SYMBOL vmlinux 0x00000000 padata_free +EXPORT_SYMBOL vmlinux 0x00000000 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x00000000 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x00000000 padata_start +EXPORT_SYMBOL vmlinux 0x00000000 padata_stop +EXPORT_SYMBOL vmlinux 0x00000000 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_next_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_cache_prev_hole +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_alloc +EXPORT_SYMBOL vmlinux 0x00000000 page_frag_free +EXPORT_SYMBOL vmlinux 0x00000000 page_get_link +EXPORT_SYMBOL vmlinux 0x00000000 page_mapped +EXPORT_SYMBOL vmlinux 0x00000000 page_mapping +EXPORT_SYMBOL vmlinux 0x00000000 page_put_link +EXPORT_SYMBOL vmlinux 0x00000000 page_readlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink +EXPORT_SYMBOL vmlinux 0x00000000 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 page_table_allocate_pgste +EXPORT_SYMBOL vmlinux 0x00000000 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_get_page +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_isize_extended +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 pagecache_write_end +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_nr_tag +EXPORT_SYMBOL vmlinux 0x00000000 pagevec_lookup_range_tag +EXPORT_SYMBOL vmlinux 0x00000000 panic +EXPORT_SYMBOL vmlinux 0x00000000 panic_blink +EXPORT_SYMBOL vmlinux 0x00000000 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x00000000 param_array_ops +EXPORT_SYMBOL vmlinux 0x00000000 param_free_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_get_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_get_int +EXPORT_SYMBOL vmlinux 0x00000000 param_get_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_get_long +EXPORT_SYMBOL vmlinux 0x00000000 param_get_short +EXPORT_SYMBOL vmlinux 0x00000000 param_get_string +EXPORT_SYMBOL vmlinux 0x00000000 param_get_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_get_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_int +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_long +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_short +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_string +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_bool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_byte +EXPORT_SYMBOL vmlinux 0x00000000 param_set_charp +EXPORT_SYMBOL vmlinux 0x00000000 param_set_copystring +EXPORT_SYMBOL vmlinux 0x00000000 param_set_int +EXPORT_SYMBOL vmlinux 0x00000000 param_set_invbool +EXPORT_SYMBOL vmlinux 0x00000000 param_set_long +EXPORT_SYMBOL vmlinux 0x00000000 param_set_short +EXPORT_SYMBOL vmlinux 0x00000000 param_set_uint +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ullong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ulong +EXPORT_SYMBOL vmlinux 0x00000000 param_set_ushort +EXPORT_SYMBOL vmlinux 0x00000000 passthru_features_check +EXPORT_SYMBOL vmlinux 0x00000000 path_get +EXPORT_SYMBOL vmlinux 0x00000000 path_has_submounts +EXPORT_SYMBOL vmlinux 0x00000000 path_is_mountpoint +EXPORT_SYMBOL vmlinux 0x00000000 path_is_under +EXPORT_SYMBOL vmlinux 0x00000000 path_nosuid +EXPORT_SYMBOL vmlinux 0x00000000 path_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_dev +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_alloc_irq_vectors_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_claim_resources +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_type +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_choose_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_get +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_present +EXPORT_SYMBOL vmlinux 0x00000000 pci_dev_put +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msi +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_msix_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_ptm +EXPORT_SYMBOL vmlinux 0x00000000 pci_enable_wake +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_add_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epc_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_ep_cfs_remove_epf_group +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_capability +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_pcie_root_port +EXPORT_SYMBOL vmlinux 0x00000000 pci_find_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_host_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_irq_vectors +EXPORT_SYMBOL vmlinux 0x00000000 pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_class +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pci_iomap_range +EXPORT_SYMBOL vmlinux 0x00000000 pci_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_affinity +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_get_node +EXPORT_SYMBOL vmlinux 0x00000000 pci_irq_vector +EXPORT_SYMBOL vmlinux 0x00000000 pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 pci_map_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_match_id +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pci_msi_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_msix_vec_count +EXPORT_SYMBOL vmlinux 0x00000000 pci_pci_problems +EXPORT_SYMBOL vmlinux 0x00000000 pci_platform_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_active +EXPORT_SYMBOL vmlinux 0x00000000 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x00000000 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_read_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_remap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_irq +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x00000000 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 pci_resize_resource +EXPORT_SYMBOL vmlinux 0x00000000 pci_restore_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_root_buses +EXPORT_SYMBOL vmlinux 0x00000000 pci_save_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_root_bus_bridge +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_scan_slot +EXPORT_SYMBOL vmlinux 0x00000000 pci_select_bars +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_master +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x00000000 pci_set_vpd_size +EXPORT_SYMBOL vmlinux 0x00000000 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x00000000 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x00000000 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_iospace +EXPORT_SYMBOL vmlinux 0x00000000 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x00000000 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 pci_wait_for_pending_transaction +EXPORT_SYMBOL vmlinux 0x00000000 pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_byte +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_dword +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_config_word +EXPORT_SYMBOL vmlinux 0x00000000 pci_write_vpd +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x00000000 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x00000000 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x00000000 pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_minimum_link +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0x00000000 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x00000000 pcie_relaxed_ordering_enabled +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_mps +EXPORT_SYMBOL vmlinux 0x00000000 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x00000000 pcim_enable_device +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap +EXPORT_SYMBOL vmlinux 0x00000000 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x00000000 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x00000000 peernet2id +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_add_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x00000000 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x00000000 perf_num_counters +EXPORT_SYMBOL vmlinux 0x00000000 perf_pmu_name +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x00000000 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x00000000 pgste_perform_essa +EXPORT_SYMBOL vmlinux 0x00000000 pid_task +EXPORT_SYMBOL vmlinux 0x00000000 ping_prot +EXPORT_SYMBOL vmlinux 0x00000000 pipe_lock +EXPORT_SYMBOL vmlinux 0x00000000 pipe_unlock +EXPORT_SYMBOL vmlinux 0x00000000 pmdp_xchg_direct +EXPORT_SYMBOL vmlinux 0x00000000 pmdp_xchg_lazy +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x00000000 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x00000000 poll_freewait +EXPORT_SYMBOL vmlinux 0x00000000 poll_initwait +EXPORT_SYMBOL vmlinux 0x00000000 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_init +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_update_mode +EXPORT_SYMBOL vmlinux 0x00000000 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x00000000 posix_lock_file +EXPORT_SYMBOL vmlinux 0x00000000 posix_test_lock +EXPORT_SYMBOL vmlinux 0x00000000 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes +EXPORT_SYMBOL vmlinux 0x00000000 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed +EXPORT_SYMBOL vmlinux 0x00000000 prandom_seed_full_state +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32 +EXPORT_SYMBOL vmlinux 0x00000000 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x00000000 prepare_binprm +EXPORT_SYMBOL vmlinux 0x00000000 prepare_creds +EXPORT_SYMBOL vmlinux 0x00000000 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_swait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_event +EXPORT_SYMBOL vmlinux 0x00000000 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x00000000 print_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 printk +EXPORT_SYMBOL vmlinux 0x00000000 printk_emit +EXPORT_SYMBOL vmlinux 0x00000000 printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x00000000 proc_create +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_data +EXPORT_SYMBOL vmlinux 0x00000000 proc_create_mount_point +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 proc_dostring +EXPORT_SYMBOL vmlinux 0x00000000 proc_douintvec +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x00000000 proc_remove +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_size +EXPORT_SYMBOL vmlinux 0x00000000 proc_set_user +EXPORT_SYMBOL vmlinux 0x00000000 proc_symlink +EXPORT_SYMBOL vmlinux 0x00000000 proto_register +EXPORT_SYMBOL vmlinux 0x00000000 proto_unregister +EXPORT_SYMBOL vmlinux 0x00000000 psched_ratecfg_precompute +EXPORT_SYMBOL vmlinux 0x00000000 pskb_expand_head +EXPORT_SYMBOL vmlinux 0x00000000 pskb_extract +EXPORT_SYMBOL vmlinux 0x00000000 ptep_modify_prot_commit +EXPORT_SYMBOL vmlinux 0x00000000 ptep_modify_prot_start +EXPORT_SYMBOL vmlinux 0x00000000 ptep_xchg_direct +EXPORT_SYMBOL vmlinux 0x00000000 ptep_xchg_lazy +EXPORT_SYMBOL vmlinux 0x00000000 pudp_xchg_direct +EXPORT_SYMBOL vmlinux 0x00000000 put_cmsg +EXPORT_SYMBOL vmlinux 0x00000000 put_disk +EXPORT_SYMBOL vmlinux 0x00000000 put_io_context +EXPORT_SYMBOL vmlinux 0x00000000 put_pages_list +EXPORT_SYMBOL vmlinux 0x00000000 put_tty_driver +EXPORT_SYMBOL vmlinux 0x00000000 put_unused_fd +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_add +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_hash_del +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_put_stab +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_reset +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_tree_reduce_backlog +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x00000000 qdisc_watchdog_schedule_ns +EXPORT_SYMBOL vmlinux 0x00000000 qid_eq +EXPORT_SYMBOL vmlinux 0x00000000 qid_lt +EXPORT_SYMBOL vmlinux 0x00000000 qid_valid +EXPORT_SYMBOL vmlinux 0x00000000 queue_delayed_work_on +EXPORT_SYMBOL vmlinux 0x00000000 queue_work_on +EXPORT_SYMBOL vmlinux 0x00000000 quota_send_warning +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_delete_item +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_delete +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_iter_resume +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_maybe_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_replace_slot +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x00000000 radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_activate_view +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_add_view +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_buffer_address +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_deactivate_view +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_del_view +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_find_view +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_register_notifier +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_add_data +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_alloc +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_free +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_reset +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_set_cmd +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_set_data +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_request_set_idal +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_reset +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_start +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_start_irq +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_start_locked +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_unregister_notifier +EXPORT_SYMBOL vmlinux 0x00000000 raw3270_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 raw_copy_from_user +EXPORT_SYMBOL vmlinux 0x00000000 raw_copy_in_user +EXPORT_SYMBOL vmlinux 0x00000000 raw_copy_to_user +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x00000000 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase +EXPORT_SYMBOL vmlinux 0x00000000 rb_erase_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_first +EXPORT_SYMBOL vmlinux 0x00000000 rb_first_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color +EXPORT_SYMBOL vmlinux 0x00000000 rb_insert_color_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_last +EXPORT_SYMBOL vmlinux 0x00000000 rb_next +EXPORT_SYMBOL vmlinux 0x00000000 rb_next_postorder +EXPORT_SYMBOL vmlinux 0x00000000 rb_prev +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_cached +EXPORT_SYMBOL vmlinux 0x00000000 rb_replace_node_rcu +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_register_device +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_try_charge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_uncharge +EXPORT_SYMBOL vmlinux 0x00000000 rdmacg_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x00000000 read_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 read_code +EXPORT_SYMBOL vmlinux 0x00000000 read_dev_sector +EXPORT_SYMBOL vmlinux 0x00000000 recalc_sigpending +EXPORT_SYMBOL vmlinux 0x00000000 reciprocal_value +EXPORT_SYMBOL vmlinux 0x00000000 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_if_one +EXPORT_SYMBOL vmlinux 0x00000000 refcount_dec_not_one +EXPORT_SYMBOL vmlinux 0x00000000 register_adapter_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 register_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 register_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 register_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 register_console +EXPORT_SYMBOL vmlinux 0x00000000 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_external_irq +EXPORT_SYMBOL vmlinux 0x00000000 register_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 register_gifconf +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_key_type +EXPORT_SYMBOL vmlinux 0x00000000 register_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 register_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_netdev +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice +EXPORT_SYMBOL vmlinux 0x00000000 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 register_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 register_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 register_service_level +EXPORT_SYMBOL vmlinux 0x00000000 register_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x00000000 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 register_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 release_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 release_firmware +EXPORT_SYMBOL vmlinux 0x00000000 release_pages +EXPORT_SYMBOL vmlinux 0x00000000 release_resource +EXPORT_SYMBOL vmlinux 0x00000000 release_sock +EXPORT_SYMBOL vmlinux 0x00000000 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x00000000 remap_vmalloc_range_partial +EXPORT_SYMBOL vmlinux 0x00000000 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x00000000 remove_proc_subtree +EXPORT_SYMBOL vmlinux 0x00000000 remove_wait_queue +EXPORT_SYMBOL vmlinux 0x00000000 rename_lock +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_into_buf +EXPORT_SYMBOL vmlinux 0x00000000 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0x00000000 request_key +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async +EXPORT_SYMBOL vmlinux 0x00000000 request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x00000000 request_resource +EXPORT_SYMBOL vmlinux 0x00000000 request_threaded_irq +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_excl_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_add_shared_fence +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_copy_fences +EXPORT_SYMBOL vmlinux 0x00000000 reservation_object_reserve_shared +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_class +EXPORT_SYMBOL vmlinux 0x00000000 reservation_seqcount_string +EXPORT_SYMBOL vmlinux 0x00000000 reservation_ww_class +EXPORT_SYMBOL vmlinux 0x00000000 reset_devices +EXPORT_SYMBOL vmlinux 0x00000000 reset_guest_reference_bit +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_create_entry +EXPORT_SYMBOL vmlinux 0x00000000 resource_list_free +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_alloc +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_attach_prog +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_detach_sock +EXPORT_SYMBOL vmlinux 0x00000000 reuseport_select_sock +EXPORT_SYMBOL vmlinux 0x00000000 revalidate_disk +EXPORT_SYMBOL vmlinux 0x00000000 revert_creds +EXPORT_SYMBOL vmlinux 0x00000000 rfs_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_cpu_mask +EXPORT_SYMBOL vmlinux 0x00000000 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x00000000 rps_needed +EXPORT_SYMBOL vmlinux 0x00000000 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0x00000000 rt6_lookup +EXPORT_SYMBOL vmlinux 0x00000000 rt_dst_alloc +EXPORT_SYMBOL vmlinux 0x00000000 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_create_link +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_kfree_skbs +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_lock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_nla_parse_ifla +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_notify +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_trylock +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x00000000 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_read_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_down_write_failed_killable +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0x00000000 rwsem_wake +EXPORT_SYMBOL vmlinux 0x00000000 s390_arch_random_counter +EXPORT_SYMBOL vmlinux 0x00000000 s390_epoch_delta_notifier +EXPORT_SYMBOL vmlinux 0x00000000 save_fpu_regs +EXPORT_SYMBOL vmlinux 0x00000000 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x00000000 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x00000000 schedule +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_idle +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0x00000000 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0x00000000 sclp +EXPORT_SYMBOL vmlinux 0x00000000 sclp_add_request +EXPORT_SYMBOL vmlinux 0x00000000 sclp_cpi_set_data +EXPORT_SYMBOL vmlinux 0x00000000 sclp_deactivate +EXPORT_SYMBOL vmlinux 0x00000000 sclp_ocf_cpc_name_copy +EXPORT_SYMBOL vmlinux 0x00000000 sclp_pci_configure +EXPORT_SYMBOL vmlinux 0x00000000 sclp_pci_deconfigure +EXPORT_SYMBOL vmlinux 0x00000000 sclp_reactivate +EXPORT_SYMBOL vmlinux 0x00000000 sclp_register +EXPORT_SYMBOL vmlinux 0x00000000 sclp_remove_processed +EXPORT_SYMBOL vmlinux 0x00000000 sclp_sync_wait +EXPORT_SYMBOL vmlinux 0x00000000 sclp_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scm_detach_fds +EXPORT_SYMBOL vmlinux 0x00000000 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x00000000 scmd_printk +EXPORT_SYMBOL vmlinux 0x00000000 scnprintf +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x00000000 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x00000000 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_change_queue_depth +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x00000000 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_device_type +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x00000000 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x00000000 scsi_driverbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x00000000 scsi_execute +EXPORT_SYMBOL vmlinux 0x00000000 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x00000000 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x00000000 scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_get +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_put +EXPORT_SYMBOL vmlinux 0x00000000 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x00000000 scsi_hostbyte_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_init_io +EXPORT_SYMBOL vmlinux 0x00000000 scsi_initialize_rq +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_ioctl_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x00000000 scsi_logging_level +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mlreturn_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_partsize +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_command +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_result +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x00000000 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x00000000 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x00000000 scsi_req_init +EXPORT_SYMBOL vmlinux 0x00000000 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sanitize_inquiry_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x00000000 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_pm_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x00000000 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_field_pointer +EXPORT_SYMBOL vmlinux 0x00000000 scsi_set_sense_information +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x00000000 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x00000000 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0x00000000 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x00000000 scsi_unregister +EXPORT_SYMBOL vmlinux 0x00000000 scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_lun_id +EXPORT_SYMBOL vmlinux 0x00000000 scsi_vpd_tpg_id +EXPORT_SYMBOL vmlinux 0x00000000 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x00000000 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x00000000 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x00000000 sdev_prefix_printk +EXPORT_SYMBOL vmlinux 0x00000000 search_binary_handler +EXPORT_SYMBOL vmlinux 0x00000000 secpath_dup +EXPORT_SYMBOL vmlinux 0x00000000 secpath_set +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x00000000 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_seq +EXPORT_SYMBOL vmlinux 0x00000000 secure_tcpv6_ts_off +EXPORT_SYMBOL vmlinux 0x00000000 security_d_instantiate +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 security_dentry_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_endport_manage_subnet +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_ib_pkey_access +EXPORT_SYMBOL vmlinux 0x00000000 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_copy_up_xattr +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_invalidate_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_listsecurity +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x00000000 security_ismaclabel +EXPORT_SYMBOL vmlinux 0x00000000 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 security_path_mknod +EXPORT_SYMBOL vmlinux 0x00000000 security_path_rename +EXPORT_SYMBOL vmlinux 0x00000000 security_path_unlink +EXPORT_SYMBOL vmlinux 0x00000000 security_release_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x00000000 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x00000000 security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x00000000 security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x00000000 security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sk_clone +EXPORT_SYMBOL vmlinux 0x00000000 security_skb_classify_flow +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_graft +EXPORT_SYMBOL vmlinux 0x00000000 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0x00000000 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x00000000 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_may_send +EXPORT_SYMBOL vmlinux 0x00000000 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_policy_free +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 security_xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_compute +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_add +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_del +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_info_lookup +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_exit +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_net_init +EXPORT_SYMBOL vmlinux 0x00000000 seg6_hmac_validate_skb +EXPORT_SYMBOL vmlinux 0x00000000 seg6_push_hmac +EXPORT_SYMBOL vmlinux 0x00000000 segment_load +EXPORT_SYMBOL vmlinux 0x00000000 segment_modify_shared +EXPORT_SYMBOL vmlinux 0x00000000 segment_save +EXPORT_SYMBOL vmlinux 0x00000000 segment_type +EXPORT_SYMBOL vmlinux 0x00000000 segment_unload +EXPORT_SYMBOL vmlinux 0x00000000 segment_warning +EXPORT_SYMBOL vmlinux 0x00000000 send_sig +EXPORT_SYMBOL vmlinux 0x00000000 send_sig_info +EXPORT_SYMBOL vmlinux 0x00000000 seq_dentry +EXPORT_SYMBOL vmlinux 0x00000000 seq_escape +EXPORT_SYMBOL vmlinux 0x00000000 seq_file_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_hex_dump +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_percpu +EXPORT_SYMBOL vmlinux 0x00000000 seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_next +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start +EXPORT_SYMBOL vmlinux 0x00000000 seq_list_start_head +EXPORT_SYMBOL vmlinux 0x00000000 seq_lseek +EXPORT_SYMBOL vmlinux 0x00000000 seq_open +EXPORT_SYMBOL vmlinux 0x00000000 seq_open_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_pad +EXPORT_SYMBOL vmlinux 0x00000000 seq_path +EXPORT_SYMBOL vmlinux 0x00000000 seq_printf +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x00000000 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x00000000 seq_putc +EXPORT_SYMBOL vmlinux 0x00000000 seq_puts +EXPORT_SYMBOL vmlinux 0x00000000 seq_read +EXPORT_SYMBOL vmlinux 0x00000000 seq_release +EXPORT_SYMBOL vmlinux 0x00000000 seq_release_private +EXPORT_SYMBOL vmlinux 0x00000000 seq_vprintf +EXPORT_SYMBOL vmlinux 0x00000000 seq_write +EXPORT_SYMBOL vmlinux 0x00000000 seqno_fence_ops +EXPORT_SYMBOL vmlinux 0x00000000 set_anon_super +EXPORT_SYMBOL vmlinux 0x00000000 set_bh_page +EXPORT_SYMBOL vmlinux 0x00000000 set_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 set_blocksize +EXPORT_SYMBOL vmlinux 0x00000000 set_cached_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_create_files_as +EXPORT_SYMBOL vmlinux 0x00000000 set_current_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_device_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_disk_ro +EXPORT_SYMBOL vmlinux 0x00000000 set_freezable +EXPORT_SYMBOL vmlinux 0x00000000 set_fs +EXPORT_SYMBOL vmlinux 0x00000000 set_groups +EXPORT_SYMBOL vmlinux 0x00000000 set_guest_storage_key +EXPORT_SYMBOL vmlinux 0x00000000 set_nlink +EXPORT_SYMBOL vmlinux 0x00000000 set_normalized_timespec64 +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty +EXPORT_SYMBOL vmlinux 0x00000000 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x00000000 set_pgste_bits +EXPORT_SYMBOL vmlinux 0x00000000 set_posix_acl +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override +EXPORT_SYMBOL vmlinux 0x00000000 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x00000000 set_user_nice +EXPORT_SYMBOL vmlinux 0x00000000 set_wb_congested +EXPORT_SYMBOL vmlinux 0x00000000 setattr_copy +EXPORT_SYMBOL vmlinux 0x00000000 setattr_prepare +EXPORT_SYMBOL vmlinux 0x00000000 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x00000000 setup_max_cpus +EXPORT_SYMBOL vmlinux 0x00000000 setup_new_exec +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_free_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_one +EXPORT_SYMBOL vmlinux 0x00000000 sg_init_table +EXPORT_SYMBOL vmlinux 0x00000000 sg_last +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_skip +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_start +EXPORT_SYMBOL vmlinux 0x00000000 sg_miter_stop +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents +EXPORT_SYMBOL vmlinux 0x00000000 sg_nents_for_len +EXPORT_SYMBOL vmlinux 0x00000000 sg_next +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_pcopy_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sg_zero_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sget +EXPORT_SYMBOL vmlinux 0x00000000 sget_userns +EXPORT_SYMBOL vmlinux 0x00000000 sha_init +EXPORT_SYMBOL vmlinux 0x00000000 sha_transform +EXPORT_SYMBOL vmlinux 0x00000000 should_remove_suid +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x00000000 shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x00000000 si_meminfo +EXPORT_SYMBOL vmlinux 0x00000000 sie64a +EXPORT_SYMBOL vmlinux 0x00000000 sie_exit +EXPORT_SYMBOL vmlinux 0x00000000 sigprocmask +EXPORT_SYMBOL vmlinux 0x00000000 simple_dentry_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_dname +EXPORT_SYMBOL vmlinux 0x00000000 simple_empty +EXPORT_SYMBOL vmlinux 0x00000000 simple_fill_super +EXPORT_SYMBOL vmlinux 0x00000000 simple_get_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_getattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_link +EXPORT_SYMBOL vmlinux 0x00000000 simple_lookup +EXPORT_SYMBOL vmlinux 0x00000000 simple_nosetlease +EXPORT_SYMBOL vmlinux 0x00000000 simple_open +EXPORT_SYMBOL vmlinux 0x00000000 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x00000000 simple_readpage +EXPORT_SYMBOL vmlinux 0x00000000 simple_release_fs +EXPORT_SYMBOL vmlinux 0x00000000 simple_rename +EXPORT_SYMBOL vmlinux 0x00000000 simple_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 simple_setattr +EXPORT_SYMBOL vmlinux 0x00000000 simple_statfs +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtol +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoll +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoul +EXPORT_SYMBOL vmlinux 0x00000000 simple_strtoull +EXPORT_SYMBOL vmlinux 0x00000000 simple_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_get +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x00000000 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x00000000 simple_unlink +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_begin +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_end +EXPORT_SYMBOL vmlinux 0x00000000 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x00000000 single_open +EXPORT_SYMBOL vmlinux 0x00000000 single_open_size +EXPORT_SYMBOL vmlinux 0x00000000 single_release +EXPORT_SYMBOL vmlinux 0x00000000 single_task_running +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_1u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_2u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u32 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_3u64 +EXPORT_SYMBOL vmlinux 0x00000000 siphash_4u64 +EXPORT_SYMBOL vmlinux 0x00000000 sk_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sk_busy_loop_end +EXPORT_SYMBOL vmlinux 0x00000000 sk_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_common_release +EXPORT_SYMBOL vmlinux 0x00000000 sk_dst_check +EXPORT_SYMBOL vmlinux 0x00000000 sk_filter_trim_cap +EXPORT_SYMBOL vmlinux 0x00000000 sk_free +EXPORT_SYMBOL vmlinux 0x00000000 sk_mc_loop +EXPORT_SYMBOL vmlinux 0x00000000 sk_net_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_ns_capable +EXPORT_SYMBOL vmlinux 0x00000000 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 sk_reset_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x00000000 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_error +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x00000000 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00000000 sk_wait_data +EXPORT_SYMBOL vmlinux 0x00000000 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_append +EXPORT_SYMBOL vmlinux 0x00000000 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_setup +EXPORT_SYMBOL vmlinux 0x00000000 skb_checksum_trimmed +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone +EXPORT_SYMBOL vmlinux 0x00000000 skb_clone_sk +EXPORT_SYMBOL vmlinux 0x00000000 skb_coalesce_rx_frag +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_datagram_msg +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_datagram_iter +EXPORT_SYMBOL vmlinux 0x00000000 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x00000000 skb_csum_hwoffload_help +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue +EXPORT_SYMBOL vmlinux 0x00000000 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_ensure_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_find_text +EXPORT_SYMBOL vmlinux 0x00000000 skb_flow_dissector_init +EXPORT_SYMBOL vmlinux 0x00000000 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_get_hash_perturb +EXPORT_SYMBOL vmlinux 0x00000000 skb_insert +EXPORT_SYMBOL vmlinux 0x00000000 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_mac_gso_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_make_writable +EXPORT_SYMBOL vmlinux 0x00000000 skb_orphan_partial +EXPORT_SYMBOL vmlinux 0x00000000 skb_page_frag_refill +EXPORT_SYMBOL vmlinux 0x00000000 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_pull +EXPORT_SYMBOL vmlinux 0x00000000 skb_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_put +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_head +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x00000000 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x00000000 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x00000000 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00000000 skb_seq_read +EXPORT_SYMBOL vmlinux 0x00000000 skb_set_owner_w +EXPORT_SYMBOL vmlinux 0x00000000 skb_split +EXPORT_SYMBOL vmlinux 0x00000000 skb_store_bits +EXPORT_SYMBOL vmlinux 0x00000000 skb_trim +EXPORT_SYMBOL vmlinux 0x00000000 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x00000000 skb_tx_error +EXPORT_SYMBOL vmlinux 0x00000000 skb_udp_tunnel_segment +EXPORT_SYMBOL vmlinux 0x00000000 skb_unlink +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_pop +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_push +EXPORT_SYMBOL vmlinux 0x00000000 skb_vlan_untag +EXPORT_SYMBOL vmlinux 0x00000000 skip_spaces +EXPORT_SYMBOL vmlinux 0x00000000 slash_name +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x00000000 smp_call_function_single +EXPORT_SYMBOL vmlinux 0x00000000 smp_cpu_mt_shift +EXPORT_SYMBOL vmlinux 0x00000000 smp_cpu_mtid +EXPORT_SYMBOL vmlinux 0x00000000 smp_ctl_clear_bit +EXPORT_SYMBOL vmlinux 0x00000000 smp_ctl_set_bit +EXPORT_SYMBOL vmlinux 0x00000000 smsg_register_callback +EXPORT_SYMBOL vmlinux 0x00000000 smsg_unregister_callback +EXPORT_SYMBOL vmlinux 0x00000000 snprintf +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x00000000 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_cmsg_send +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_create +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_kern +EXPORT_SYMBOL vmlinux 0x00000000 sock_create_lite +EXPORT_SYMBOL vmlinux 0x00000000 sock_dequeue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_diag_put_filterinfo +EXPORT_SYMBOL vmlinux 0x00000000 sock_edemux +EXPORT_SYMBOL vmlinux 0x00000000 sock_efree +EXPORT_SYMBOL vmlinux 0x00000000 sock_from_file +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x00000000 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_ino +EXPORT_SYMBOL vmlinux 0x00000000 sock_i_uid +EXPORT_SYMBOL vmlinux 0x00000000 sock_init_data +EXPORT_SYMBOL vmlinux 0x00000000 sock_kfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sock_kzfree_s +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_accept +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_bind +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_connect +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getname +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_listen +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_poll +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendmsg_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_sendpage_locked +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x00000000 sock_recv_errqueue +EXPORT_SYMBOL vmlinux 0x00000000 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_register +EXPORT_SYMBOL vmlinux 0x00000000 sock_release +EXPORT_SYMBOL vmlinux 0x00000000 sock_rfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 sock_unregister +EXPORT_SYMBOL vmlinux 0x00000000 sock_wake_async +EXPORT_SYMBOL vmlinux 0x00000000 sock_wfree +EXPORT_SYMBOL vmlinux 0x00000000 sock_wmalloc +EXPORT_SYMBOL vmlinux 0x00000000 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x00000000 softnet_data +EXPORT_SYMBOL vmlinux 0x00000000 sort +EXPORT_SYMBOL vmlinux 0x00000000 splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x00000000 sprintf +EXPORT_SYMBOL vmlinux 0x00000000 sscanf +EXPORT_SYMBOL vmlinux 0x00000000 ssch +EXPORT_SYMBOL vmlinux 0x00000000 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x00000000 start_tty +EXPORT_SYMBOL vmlinux 0x00000000 stop_tty +EXPORT_SYMBOL vmlinux 0x00000000 strcasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strcat +EXPORT_SYMBOL vmlinux 0x00000000 strchr +EXPORT_SYMBOL vmlinux 0x00000000 strchrnul +EXPORT_SYMBOL vmlinux 0x00000000 strcmp +EXPORT_SYMBOL vmlinux 0x00000000 strcpy +EXPORT_SYMBOL vmlinux 0x00000000 strcspn +EXPORT_SYMBOL vmlinux 0x00000000 strim +EXPORT_SYMBOL vmlinux 0x00000000 string_escape_mem +EXPORT_SYMBOL vmlinux 0x00000000 string_get_size +EXPORT_SYMBOL vmlinux 0x00000000 string_unescape +EXPORT_SYMBOL vmlinux 0x00000000 strlcat +EXPORT_SYMBOL vmlinux 0x00000000 strlcpy +EXPORT_SYMBOL vmlinux 0x00000000 strlen +EXPORT_SYMBOL vmlinux 0x00000000 strncasecmp +EXPORT_SYMBOL vmlinux 0x00000000 strncat +EXPORT_SYMBOL vmlinux 0x00000000 strnchr +EXPORT_SYMBOL vmlinux 0x00000000 strncmp +EXPORT_SYMBOL vmlinux 0x00000000 strncpy +EXPORT_SYMBOL vmlinux 0x00000000 strndup_user +EXPORT_SYMBOL vmlinux 0x00000000 strnlen +EXPORT_SYMBOL vmlinux 0x00000000 strnstr +EXPORT_SYMBOL vmlinux 0x00000000 strpbrk +EXPORT_SYMBOL vmlinux 0x00000000 strrchr +EXPORT_SYMBOL vmlinux 0x00000000 strreplace +EXPORT_SYMBOL vmlinux 0x00000000 strscpy +EXPORT_SYMBOL vmlinux 0x00000000 strsep +EXPORT_SYMBOL vmlinux 0x00000000 strspn +EXPORT_SYMBOL vmlinux 0x00000000 strstr +EXPORT_SYMBOL vmlinux 0x00000000 stsch +EXPORT_SYMBOL vmlinux 0x00000000 stsi +EXPORT_SYMBOL vmlinux 0x00000000 submit_bh +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio +EXPORT_SYMBOL vmlinux 0x00000000 submit_bio_wait +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi +EXPORT_SYMBOL vmlinux 0x00000000 super_setup_bdi_name +EXPORT_SYMBOL vmlinux 0x00000000 swake_up +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_all +EXPORT_SYMBOL vmlinux 0x00000000 swake_up_locked +EXPORT_SYMBOL vmlinux 0x00000000 sync_blockdev +EXPORT_SYMBOL vmlinux 0x00000000 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_create +EXPORT_SYMBOL vmlinux 0x00000000 sync_file_get_fence +EXPORT_SYMBOL vmlinux 0x00000000 sync_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode +EXPORT_SYMBOL vmlinux 0x00000000 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x00000000 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_hardirq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_irq +EXPORT_SYMBOL vmlinux 0x00000000 synchronize_net +EXPORT_SYMBOL vmlinux 0x00000000 sys_close +EXPORT_SYMBOL vmlinux 0x00000000 sys_tz +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_max_skb_frags +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_nf_log_all_netns +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_tcp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x00000000 sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x00000000 sysfs_streq +EXPORT_SYMBOL vmlinux 0x00000000 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x00000000 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x00000000 system_state +EXPORT_SYMBOL vmlinux 0x00000000 system_wq +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type1_ip +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_crc +EXPORT_SYMBOL vmlinux 0x00000000 t10_pi_type3_ip +EXPORT_SYMBOL vmlinux 0x00000000 tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x00000000 take_dentry_name_snapshot +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_init +EXPORT_SYMBOL vmlinux 0x00000000 tasklet_kill +EXPORT_SYMBOL vmlinux 0x00000000 tc_setup_cb_call +EXPORT_SYMBOL vmlinux 0x00000000 tccb_add_dcw +EXPORT_SYMBOL vmlinux 0x00000000 tccb_init +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x00000000 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_decref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_incref +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_priv +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_cb_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_get_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_block_put_ext +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_get +EXPORT_SYMBOL vmlinux 0x00000000 tcf_chain_put +EXPORT_SYMBOL vmlinux 0x00000000 tcf_classify +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_register +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x00000000 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x00000000 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_check +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_cleanup +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_create +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_insert +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idr_search +EXPORT_SYMBOL vmlinux 0x00000000 tcf_idrinfo_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tcf_queue_work +EXPORT_SYMBOL vmlinux 0x00000000 tcf_register_action +EXPORT_SYMBOL vmlinux 0x00000000 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x00000000 tcp_add_backlog +EXPORT_SYMBOL vmlinux 0x00000000 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_check_req +EXPORT_SYMBOL vmlinux 0x00000000 tcp_child_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_close +EXPORT_SYMBOL vmlinux 0x00000000 tcp_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x00000000 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_enter_cwr +EXPORT_SYMBOL vmlinux 0x00000000 tcp_fastopen_defer_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_filter +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_cookie_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x00000000 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x00000000 tcp_have_smc +EXPORT_SYMBOL vmlinux 0x00000000 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x00000000 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x00000000 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mss_to_mtu +EXPORT_SYMBOL vmlinux 0x00000000 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x00000000 tcp_openreq_init_rwin +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0x00000000 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x00000000 tcp_peek_len +EXPORT_SYMBOL vmlinux 0x00000000 tcp_poll +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 tcp_prot +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_req_err +EXPORT_SYMBOL vmlinux 0x00000000 tcp_rtx_synack +EXPORT_SYMBOL vmlinux 0x00000000 tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sendpage +EXPORT_SYMBOL vmlinux 0x00000000 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x00000000 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x00000000 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x00000000 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x00000000 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x00000000 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x00000000 tcp_tso_autosize +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_mtu_reduced +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x00000000 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x00000000 tcw_add_tidaw +EXPORT_SYMBOL vmlinux 0x00000000 tcw_finalize +EXPORT_SYMBOL vmlinux 0x00000000 tcw_get_data +EXPORT_SYMBOL vmlinux 0x00000000 tcw_get_intrg +EXPORT_SYMBOL vmlinux 0x00000000 tcw_get_tccb +EXPORT_SYMBOL vmlinux 0x00000000 tcw_get_tsb +EXPORT_SYMBOL vmlinux 0x00000000 tcw_init +EXPORT_SYMBOL vmlinux 0x00000000 tcw_set_data +EXPORT_SYMBOL vmlinux 0x00000000 tcw_set_intrg +EXPORT_SYMBOL vmlinux 0x00000000 tcw_set_tccb +EXPORT_SYMBOL vmlinux 0x00000000 tcw_set_tsb +EXPORT_SYMBOL vmlinux 0x00000000 test_taint +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_register +EXPORT_SYMBOL vmlinux 0x00000000 textsearch_unregister +EXPORT_SYMBOL vmlinux 0x00000000 thaw_bdev +EXPORT_SYMBOL vmlinux 0x00000000 thaw_super +EXPORT_SYMBOL vmlinux 0x00000000 time64_to_tm +EXPORT_SYMBOL vmlinux 0x00000000 timer_reduce +EXPORT_SYMBOL vmlinux 0x00000000 timespec64_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 timespec_trunc +EXPORT_SYMBOL vmlinux 0x00000000 timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x00000000 totalram_pages +EXPORT_SYMBOL vmlinux 0x00000000 touch_atime +EXPORT_SYMBOL vmlinux 0x00000000 touch_buffer +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_array_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_hex_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x00000000 trace_raw_output_prep +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_final +EXPORT_SYMBOL vmlinux 0x00000000 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x00000000 truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x00000000 truncate_setsize +EXPORT_SYMBOL vmlinux 0x00000000 try_module_get +EXPORT_SYMBOL vmlinux 0x00000000 try_offline_node +EXPORT_SYMBOL vmlinux 0x00000000 try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x00000000 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x00000000 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00000000 try_to_writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 tsb_init +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_data +EXPORT_SYMBOL vmlinux 0x00000000 tso_build_hdr +EXPORT_SYMBOL vmlinux 0x00000000 tso_count_descs +EXPORT_SYMBOL vmlinux 0x00000000 tso_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_check_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_devnum +EXPORT_SYMBOL vmlinux 0x00000000 tty_do_resize +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x00000000 tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x00000000 tty_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x00000000 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x00000000 tty_kref_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_lock +EXPORT_SYMBOL vmlinux 0x00000000 tty_name +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_init +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_open +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_put +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x00000000 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x00000000 tty_set_operations +EXPORT_SYMBOL vmlinux 0x00000000 tty_std_termios +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0x00000000 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x00000000 tty_throttle +EXPORT_SYMBOL vmlinux 0x00000000 tty_unlock +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x00000000 tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0x00000000 tty_unthrottle +EXPORT_SYMBOL vmlinux 0x00000000 tty_vhangup +EXPORT_SYMBOL vmlinux 0x00000000 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x00000000 tty_write_room +EXPORT_SYMBOL vmlinux 0x00000000 udp6_csum_init +EXPORT_SYMBOL vmlinux 0x00000000 udp6_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 udp_flow_hashrnd +EXPORT_SYMBOL vmlinux 0x00000000 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_complete +EXPORT_SYMBOL vmlinux 0x00000000 udp_gro_receive +EXPORT_SYMBOL vmlinux 0x00000000 udp_ioctl +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x00000000 udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x00000000 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x00000000 udp_poll +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_register +EXPORT_SYMBOL vmlinux 0x00000000 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x00000000 udp_prot +EXPORT_SYMBOL vmlinux 0x00000000 udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x00000000 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x00000000 udp_seq_open +EXPORT_SYMBOL vmlinux 0x00000000 udp_set_csum +EXPORT_SYMBOL vmlinux 0x00000000 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x00000000 udp_skb_destructor +EXPORT_SYMBOL vmlinux 0x00000000 udp_table +EXPORT_SYMBOL vmlinux 0x00000000 udplite_prot +EXPORT_SYMBOL vmlinux 0x00000000 udplite_table +EXPORT_SYMBOL vmlinux 0x00000000 udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x00000000 unload_nls +EXPORT_SYMBOL vmlinux 0x00000000 unlock_buffer +EXPORT_SYMBOL vmlinux 0x00000000 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page +EXPORT_SYMBOL vmlinux 0x00000000 unlock_page_memcg +EXPORT_SYMBOL vmlinux 0x00000000 unlock_rename +EXPORT_SYMBOL vmlinux 0x00000000 unlock_two_nondirectories +EXPORT_SYMBOL vmlinux 0x00000000 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x00000000 unregister_adapter_interrupt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x00000000 unregister_blkdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x00000000 unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x00000000 unregister_console +EXPORT_SYMBOL vmlinux 0x00000000 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_external_irq +EXPORT_SYMBOL vmlinux 0x00000000 unregister_fib_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inet6addr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_inetaddr_validator_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_key_type +EXPORT_SYMBOL vmlinux 0x00000000 unregister_lsm_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_cluster_operations +EXPORT_SYMBOL vmlinux 0x00000000 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdev +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x00000000 unregister_nls +EXPORT_SYMBOL vmlinux 0x00000000 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x00000000 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x00000000 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x00000000 unregister_restart_handler +EXPORT_SYMBOL vmlinux 0x00000000 unregister_service_level +EXPORT_SYMBOL vmlinux 0x00000000 unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0x00000000 unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0x00000000 unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x00000000 up +EXPORT_SYMBOL vmlinux 0x00000000 up_read +EXPORT_SYMBOL vmlinux 0x00000000 up_write +EXPORT_SYMBOL vmlinux 0x00000000 user_path_at_empty +EXPORT_SYMBOL vmlinux 0x00000000 user_path_create +EXPORT_SYMBOL vmlinux 0x00000000 user_revoke +EXPORT_SYMBOL vmlinux 0x00000000 usleep_range +EXPORT_SYMBOL vmlinux 0x00000000 utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x00000000 utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0x00000000 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0x00000000 utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0x00000000 uuid_is_valid +EXPORT_SYMBOL vmlinux 0x00000000 uuid_null +EXPORT_SYMBOL vmlinux 0x00000000 uuid_parse +EXPORT_SYMBOL vmlinux 0x00000000 verify_spi_info +EXPORT_SYMBOL vmlinux 0x00000000 vfree +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_prep_inodes +EXPORT_SYMBOL vmlinux 0x00000000 vfs_clone_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_copy_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_create +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_dedupe_file_range_compare +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync +EXPORT_SYMBOL vmlinux 0x00000000 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x00000000 vfs_get_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr +EXPORT_SYMBOL vmlinux 0x00000000 vfs_getattr_nosec +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_read +EXPORT_SYMBOL vmlinux 0x00000000 vfs_iter_write +EXPORT_SYMBOL vmlinux 0x00000000 vfs_link +EXPORT_SYMBOL vmlinux 0x00000000 vfs_llseek +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mkdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_mknod +EXPORT_SYMBOL vmlinux 0x00000000 vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x00000000 vfs_readlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rename +EXPORT_SYMBOL vmlinux 0x00000000 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x00000000 vfs_setpos +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statfs +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx +EXPORT_SYMBOL vmlinux 0x00000000 vfs_statx_fd +EXPORT_SYMBOL vmlinux 0x00000000 vfs_symlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_tmpfile +EXPORT_SYMBOL vmlinux 0x00000000 vfs_unlink +EXPORT_SYMBOL vmlinux 0x00000000 vfs_whiteout +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x00000000 vlan_dev_vlan_proto +EXPORT_SYMBOL vmlinux 0x00000000 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x00000000 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_add +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk +EXPORT_SYMBOL vmlinux 0x00000000 vm_brk_flags +EXPORT_SYMBOL vmlinux 0x00000000 vm_event_states +EXPORT_SYMBOL vmlinux 0x00000000 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_mixed_mkwrite +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_page +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vm_insert_pfn_prot +EXPORT_SYMBOL vmlinux 0x00000000 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x00000000 vm_map_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_mmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_munmap +EXPORT_SYMBOL vmlinux 0x00000000 vm_node_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_numa_stat +EXPORT_SYMBOL vmlinux 0x00000000 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x00000000 vm_zone_stat +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32 +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x00000000 vmalloc_user +EXPORT_SYMBOL vmlinux 0x00000000 vmap +EXPORT_SYMBOL vmlinux 0x00000000 vmemmap +EXPORT_SYMBOL vmlinux 0x00000000 vprintk +EXPORT_SYMBOL vmlinux 0x00000000 vprintk_emit +EXPORT_SYMBOL vmlinux 0x00000000 vscnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsnprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsprintf +EXPORT_SYMBOL vmlinux 0x00000000 vsscanf +EXPORT_SYMBOL vmlinux 0x00000000 vunmap +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc +EXPORT_SYMBOL vmlinux 0x00000000 vzalloc_node +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_io_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x00000000 wait_for_random_bytes +EXPORT_SYMBOL vmlinux 0x00000000 wait_iff_congested +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x00000000 wait_on_page_bit_killable +EXPORT_SYMBOL vmlinux 0x00000000 wait_woken +EXPORT_SYMBOL vmlinux 0x00000000 wake_bit_function +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_atomic_t +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_bit +EXPORT_SYMBOL vmlinux 0x00000000 wake_up_process +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_register_governor +EXPORT_SYMBOL vmlinux 0x00000000 watchdog_unregister_governor +EXPORT_SYMBOL vmlinux 0x00000000 woken_wake_function +EXPORT_SYMBOL vmlinux 0x00000000 would_dump +EXPORT_SYMBOL vmlinux 0x00000000 write_cache_pages +EXPORT_SYMBOL vmlinux 0x00000000 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x00000000 write_inode_now +EXPORT_SYMBOL vmlinux 0x00000000 write_one_page +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x00000000 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x00000000 ww_mutex_unlock +EXPORT_SYMBOL vmlinux 0x00000000 xattr_full_name +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_deregister +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_protocol_register +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_cb +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm6_rcv_tnl +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dev_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_input_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_lookup_route +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_parse_spi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_hash_rebuild +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_register_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_replay_seqhi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_lookup_byspi +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_trans_queue +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_unregister_type_offload +EXPORT_SYMBOL vmlinux 0x00000000 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x00000000 xmit_recursion +EXPORT_SYMBOL vmlinux 0x00000000 xor_block_xc +EXPORT_SYMBOL vmlinux 0x00000000 xxh32 +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh32_update +EXPORT_SYMBOL vmlinux 0x00000000 xxh64 +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_copy_state +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_digest +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_reset +EXPORT_SYMBOL vmlinux 0x00000000 xxh64_update +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_end +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_init +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_reset +EXPORT_SYMBOL vmlinux 0x00000000 xz_dec_run +EXPORT_SYMBOL vmlinux 0x00000000 yield +EXPORT_SYMBOL vmlinux 0x00000000 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x00000000 zero_page_mask +EXPORT_SYMBOL vmlinux 0x00000000 zero_pfn +EXPORT_SYMBOL vmlinux 0x00000000 zerocopy_sg_from_iter +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x00000000 zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0x00000000 zpci_report_error +EXPORT_SYMBOL vmlinux 0x00000000 zpool_has_pool +EXPORT_SYMBOL vmlinux 0x00000000 zpool_register_driver +EXPORT_SYMBOL vmlinux 0x00000000 zpool_unregister_driver +EXPORT_SYMBOL_GPL arch/s390/crypto/sha_common 0x00000000 s390_sha_final +EXPORT_SYMBOL_GPL arch/s390/crypto/sha_common 0x00000000 s390_sha_update +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_areq +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_alloc_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_async_cb +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_count_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_data_wakeup +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_areq_sgls +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_resources +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_get_rsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_link_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_poll +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_pull_tsgl +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_release_parent +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendmsg +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_sendpage +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_data +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wait_for_wmem +EXPORT_SYMBOL_GPL crypto/af_alg 0x00000000 af_alg_wmem_wakeup +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x00000000 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x00000000 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x00000000 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x00000000 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00000000 async_xor_val +EXPORT_SYMBOL_GPL crypto/authenc 0x00000000 crypto_authenc_extractkeys +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x00000000 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x00000000 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x00000000 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0x00000000 cast_s4 +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_crypt +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_init +EXPORT_SYMBOL_GPL crypto/chacha20_generic 0x00000000 crypto_chacha20_setkey +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ablkcipher_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_aead_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_ahash_queued +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_alloc_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_free_skcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x00000000 cryptd_skcipher_queued +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_alloc_init +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_exit +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_start +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_engine_stop +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_finalize_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_cipher_request_to_engine +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request +EXPORT_SYMBOL_GPL crypto/crypto_engine 0x00000000 crypto_transfer_hash_request_to_engine +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 __des3_ede_setkey +EXPORT_SYMBOL_GPL crypto/des_generic 0x00000000 des_ekey +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_decode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_encode_key +EXPORT_SYMBOL_GPL crypto/ecdh_generic 0x00000000 crypto_ecdh_key_len +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x00000000 lrw_init_table +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_ahash_desc +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_flusher +EXPORT_SYMBOL_GPL crypto/mcryptd 0x00000000 mcryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_final +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_init +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setdesckey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_setkey +EXPORT_SYMBOL_GPL crypto/poly1305_generic 0x00000000 crypto_poly1305_update +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x00000000 serpent_setkey +EXPORT_SYMBOL_GPL crypto/sm3_generic 0x00000000 sm3_zero_message_hash +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x00000000 twofish_setkey +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 alloc_dax_region +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 dax_region_put +EXPORT_SYMBOL_GPL drivers/dax/device_dax 0x00000000 devm_create_dev_dax +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_register +EXPORT_SYMBOL_GPL drivers/fpga/altera-pr-ip-core 0x00000000 alt_pr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_buf_load_sg +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_firmware_load +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_put +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_register +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 fpga_mgr_unregister +EXPORT_SYMBOL_GPL drivers/fpga/fpga-mgr 0x00000000 of_fpga_mgr_get +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_bus_type +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_device_write +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_driver_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_register +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_master_unregister +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_claim_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_read +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_release_range +EXPORT_SYMBOL_GPL drivers/fsi/fsi-core 0x00000000 fsi_slave_write +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x00000000 bgpio_init +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_alloc +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_register +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_driver_unregister +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_free +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_output_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_set_output +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_disable +EXPORT_SYMBOL_GPL drivers/hwtracing/intel_th/intel_th 0x00000000 intel_th_trace_enable +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_register_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_unregister_device +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_source_write +EXPORT_SYMBOL_GPL drivers/hwtracing/stm/stm_core 0x00000000 stm_unregister_device +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0x00000000 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/sw/rxe/rdma_rxe 0x00000000 rxe_dev_put +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_cache_cannibalize +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_gc_coalesce +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_insert_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_alloc_fail +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_compact +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_free +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_node_split +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_set_root +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_btree_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_congested +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_bypass_sequential +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_cache_insert +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_copy_collision +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_gc_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_invalidate +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_entry_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_full +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_replay_key +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_journal_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_read_retry +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_end +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_request_start +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_write +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback +EXPORT_SYMBOL_GPL drivers/md/bcache/bcache 0x00000000 __tracepoint_bcache_writeback_collision +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_alloc_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_create_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_destroy_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_bio_prison_free_cell_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_get_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_promote_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_lock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_promote_or_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_put_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_quiesce_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_unlock_v2 +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_cell_visit_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x00000000 dm_get_cell +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_mark_partial_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_set_sector_offset +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x00000000 dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_complete +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_issue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_demotions_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_nr_writebacks_queued +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_promotion_already_present +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 btracker_queue +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_create +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_hint_size +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_name +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_get_version +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_register +EXPORT_SYMBOL_GPL drivers/md/dm-cache 0x00000000 dm_cache_policy_unregister +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x00000000 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x00000000 dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_info_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_set_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_array_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_clear_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_new +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_resize +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_set_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bitset_test_bit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_flush +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_is_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_set_read_write +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_begin +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_end +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_get_value +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_cursor_skip +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_find_lowest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_lookup_next +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_remove_leaves +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_btree_walk +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_disk_bitset_init +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_issue_prefetches +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x00000000 dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x00000000 st_unregister +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_ACCESS_PTYS_REG +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_FLOW_STEERING_IB_UC_QP_RANGE +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_bond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_dev_retrieval +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_roce_v2_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_config_vxlan_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_active_ports +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_gid_ix +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_base_qpn +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_counter_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_default_counter_index +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_devlink_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_internal_clock_params +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_slave_default_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_config +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_get_vf_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_hw_rule_sz +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_id +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_map_sw_to_hw_steering_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_access +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_change_pd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_get_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_put_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_hw_write_mpt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mr_rereg_mem_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_mw_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slave_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_phys_to_slaves_pport_actv +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_port_map_set +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_read_clock +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_replace_zero_macs +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_admin_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_link_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_rate +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_spoofchk +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_set_vf_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_slave_convert_port +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_lookup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unbond +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_update_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_get_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_set_enable_smi_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_vf_smi_enabled +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00000000 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_access_reg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_alloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_create_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_dealloc_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_destroy_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_eq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_mad_ifc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_modify_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_page_fault_resume +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_ib_ppcnt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_q_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_query_vport_counter +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_reserved_gids_count +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_set_delay_drop +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_core_xrcd_dealloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_create_map_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_alloc_node +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_destroy_unmap_eq +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_fill_page_frag_array +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_modify_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_disable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_enable_roce +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_query_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_nic_vport_update_local_lb +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_context +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_gid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_pkey +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_hca_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_module_eeprom +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_address +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mac_list +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_min_inline +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_node_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_promisc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_qkey_viol_cntr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_system_image_guid +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_nic_vport_vlans +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_autoneg +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ets_rate_limit +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_link_width_oper +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_max_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_oper_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_admin +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_proto_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_vl_hw_cap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_admin_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_query_vport_state +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_admin_status +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_caps +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_mtu +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pause +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_pfc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_prio_tc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_ptys +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_bw_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_tc_group +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_set_port_wol +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx5/core/mlx5_core 0x00000000 mlx5_toggle_port_link +EXPORT_SYMBOL_GPL drivers/net/geneve 0x00000000 geneve_dev_create_fb +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_count_rx +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_delete +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_new +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/ipvlan/ipvlan 0x00000000 ipvlan_link_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x00000000 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm54xx_auxctl_read +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_ack_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_config_intr +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_get +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_downshift_set +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_enable_apd +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_sset_count +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_stats +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_get_strings +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_read_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_set_eee +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_exp +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_misc +EXPORT_SYMBOL_GPL drivers/net/phy/bcm-phy-lib 0x00000000 bcm_phy_write_shadow +EXPORT_SYMBOL_GPL drivers/net/phy/fixed_phy 0x00000000 fixed_phy_add +EXPORT_SYMBOL_GPL drivers/net/phy/fixed_phy 0x00000000 fixed_phy_register +EXPORT_SYMBOL_GPL drivers/net/phy/fixed_phy 0x00000000 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL drivers/net/phy/fixed_phy 0x00000000 fixed_phy_unregister +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 devm_mdiobus_alloc_size +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 devm_mdiobus_free +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_an_disable_aneg +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_aneg_done +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_pma_setup_forced +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_read_link +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_read_lpa +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_read_pma +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 genphy_c45_restart_aneg +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 mdio_bus_exit +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 mdio_bus_init +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 phy_duplex_to_str +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 phy_lookup_setting +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 phy_restart_aneg +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 phy_speed_to_str +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 phy_start_machine +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 swphy_read_reg +EXPORT_SYMBOL_GPL drivers/net/phy/libphy 0x00000000 swphy_validate_state +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_create_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_del_queues +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_destroy_cdev +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_free_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_minor +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_skb_array +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_get_socket +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_handle_frame +EXPORT_SYMBOL_GPL drivers/net/tap 0x00000000 tap_queue_resize +EXPORT_SYMBOL_GPL drivers/net/vxlan 0x00000000 vxlan_dev_create +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_free_options +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x00000000 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_register_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_rescan_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_set_remoteport_devloss +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_localport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x00000000 nvme_fc_unregister_remoteport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_ctrl_fatal_error +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_complete +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_execute +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_req_uninit +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_destroy +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_sq_init +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet 0x00000000 nvmet_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_abort +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_fcp_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_rcv_ls_req +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_register_targetport +EXPORT_SYMBOL_GPL drivers/nvme/target/nvmet-fc 0x00000000 nvmet_fc_unregister_targetport +EXPORT_SYMBOL_GPL drivers/pci/switch/switchtec 0x00000000 switchtec_class +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_alloc_block +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_device_is_ro +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_device_remove_stop_bits +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_device_set_stop_bits +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_flush_device_queue +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_free_block +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_free_discipline +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_handle_state_change +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_last_path_gone +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_notify +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_path_event +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_path_operational +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_pm_freeze +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_probe +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_read_dev_chars +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_remove +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_restore_device +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_set_offline +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_set_online +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_shutdown +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_uc_handler +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_generic_verify_path +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_get_sense +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_nofcx +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_nopav +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_page_cache +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_put_device_wake +EXPORT_SYMBOL_GPL drivers/s390/block/dasd_mod 0x00000000 dasd_wakeup_cb +EXPORT_SYMBOL_GPL drivers/s390/cio/eadm_sch 0x00000000 eadm_start_aob +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 do_QDIO +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_activate +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_alloc_buffers +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_allocate +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_allocate_aob +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_establish +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_free +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_free_buffers +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_get_ssqd_desc +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_pnso_brinfo +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_release_aob +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_reset_buffers +EXPORT_SYMBOL_GPL drivers/s390/cio/qdio 0x00000000 qdio_shutdown +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 IPA_PDU_HEADER +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_card_hw_is_reachable +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_change_mtu +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_cmd_buffers +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_ipacmd_list +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_qdio_buffers +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_recovery_task +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_thread_running_bit +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_thread_start_bit +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_clear_working_pool_list +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_close_dev +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_configure_cq +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_card_list +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_ethtool_get_link_ksettings +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_get_drvinfo +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_get_ethtool_stats +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_get_next_skb +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_get_sset_count +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_get_strings +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_hardsetup_card +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_core_header_cache +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_dbf +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_dbf_longtext +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_device_attr_group +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_device_blkt_group +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_do_ioctl +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_do_run_thread +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_do_send_packet +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_do_send_packet_fast +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_features_check +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_fix_features +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_generic_devtype +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_elements_for_frags +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_elements_no +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_ipacmd_buffer +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_priority_queue +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_setassparms_cmd +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_get_stats +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_hdr_chk_and_bounce +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_hw_trap +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_init_qdio_queues +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_poll +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_prepare_control_data +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_prepare_ipa_cmd +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_print_status_message +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_push_hdr +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_qdio_clear_card +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_qdio_input_handler +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_qdio_output_handler +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_qdio_start_poll +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_query_ipassists +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_query_setadapterparms +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_query_switch_attributes +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_realloc_buffer_pool +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_recover_features +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_release_buffer +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_schedule_recovery +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_send_control_data +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_send_ipa_cmd +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_send_setassparms +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_send_simple_setassparms +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_set_access_ctrl_online +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_set_allowed_threads +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_set_features +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_set_recovery_task +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_setadp_promisc_mode +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_setadpparms_change_macaddr +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_setassparms_cb +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_threads_running +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_trace_features +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_tx_timeout +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_vm_request_mac +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_wait_for_buffer +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_wait_for_threads +EXPORT_SYMBOL_GPL drivers/s390/net/qeth 0x00000000 qeth_wq +EXPORT_SYMBOL_GPL drivers/s390/net/qeth_l2 0x00000000 qeth_bridgeport_an_set +EXPORT_SYMBOL_GPL drivers/s390/net/qeth_l2 0x00000000 qeth_bridgeport_query_ports +EXPORT_SYMBOL_GPL drivers/s390/net/qeth_l2 0x00000000 qeth_l2_discipline +EXPORT_SYMBOL_GPL drivers/s390/net/qeth_l3 0x00000000 qeth_l3_discipline +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_ctlr_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_link_speed_update +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00000000 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_acpitbl +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x00000000 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/libfc/libfc 0x00000000 fc_seq_els_rsp_send +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_cmd_timed_out +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_switch_str_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00000000 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x00000000 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_eh_target_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00000000 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_all_flashnode +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_find_flashnode_sess +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_flashnode_bus_match +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_discovery_parent_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_ipaddress_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_get_router_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x00000000 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x00000000 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_tag_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x00000000 spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_stop_rport_timers +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x00000000 srp_tmo_valid +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_core 0x00000000 of_get_rs485_mode +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_core 0x00000000 uart_handle_cts_change +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_core 0x00000000 uart_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/tty/serial/serial_core 0x00000000 uart_insert_char +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x00000000 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/vfio/mdev/mdev 0x00000000 mdev_bus_type +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_data +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_get_from_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_device_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_check_extension +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_group_match_file +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_external_user_iommu_id +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_get_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_put_external_user +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_group_set_kvm +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_info_cap_add +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_get +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_iommu_group_put +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x00000000 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_disable +EXPORT_SYMBOL_GPL drivers/vfio/vfio_virqfd 0x00000000 vfio_virqfd_enable +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_and_signal_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_add_used_n +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_chr_read_iter +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dequeue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_check_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_cleanup +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_has_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_reset_owner_prepare +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_set_owner +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_dev_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_disable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_discard_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enable_notify +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_enqueue_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_get_vq_desc +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_has_work +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_init_device_iotlb +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_log_write +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_new_msg +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_start +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_poll_stop +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_signal +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_access_ok +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_avail_empty +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vq_init_access +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_vring_ioctl +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_flush +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_init +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vhost_work_queue +EXPORT_SYMBOL_GPL drivers/vhost/vhost 0x00000000 vq_iotlb_prefetch +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x00000000 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x00000000 fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x00000000 nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_enter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 __tracepoint_nfs_fsync_exit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 _nfs_display_fhandle_hash +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_cb_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs4_label_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_async_iocounter_wait +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_auth_info_match +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_nr_threads +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_is_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_client_init_status +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_fsync +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_filemap_write_and_wait_range +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_fscache_open_file +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_generic_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_get_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inc_attr_generation_counter +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_initiate_pgio +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_inode_attach_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_resend +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_current_mirror +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_pgio_header_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_put_lock_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_release_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_add_commit_list_locked +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_scan_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_server_remove_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_setsecurity +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_sync_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wait_on_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_writeback_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 recover_lost_locks +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x00000000 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfsv3 0x00000000 nfs3_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_commit_ds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 __tracepoint_nfs4_pnfs_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 layoutstats_timer +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_maxgetdevinfo_overhead +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs41_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_decode_mp_ds_addr +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_find_or_create_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_add +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_connect +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_pnfs_ds_put +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_moved_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_migration_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_sequence_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_set_rw_stateid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs4_test_session_trunk +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_map_string_to_numeric +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_error_mark_layout_for_return +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_clear_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_pagelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_commit_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_layout_insert_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_check_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_cleanup +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_prepare_to_resend_writes +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_recover_commit_reqs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_rw_release +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_scan_commit_lists +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_generic_write_commit_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layout_mark_request_commit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_layoutcommit_inode +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_nfs_generic_sync +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_read_resend_pnfs +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_report_layoutstat +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00000000 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_end_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 locks_start_grace +EXPORT_SYMBOL_GPL fs/nfs_common/grace 0x00000000 opens_in_grace +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x00000000 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 __mlog_printk +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_check_node_heartbeating_no_sem +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x00000000 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x00000000 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_is_o2cb_active +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_kset +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x00000000 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_create_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 _torture_stop_kthread +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 stutter_wait +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_cleanup_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_begin +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_init_end +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_kthread_stopping +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_must_stop_irq +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_offline +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_online +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_failures +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_onoff_stats +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_random +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_cleanup +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shuffle_task_register +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_absorb +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_shutdown_init +EXPORT_SYMBOL_GPL kernel/torture 0x00000000 torture_stutter_init +EXPORT_SYMBOL_GPL lib/842/842_compress 0x00000000 sw842_compress +EXPORT_SYMBOL_GPL lib/842/842_decompress 0x00000000 sw842_decompress +EXPORT_SYMBOL_GPL lib/crc4 0x00000000 crc4 +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x00000000 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x00000000 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_inv_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_false_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_old_true_key +EXPORT_SYMBOL_GPL lib/test_static_key_base 0x00000000 base_true_key +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x00000000 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_init_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_register_application +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_join +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_request_leave +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/mrp 0x00000000 mrp_unregister_application +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x00000000 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0x00000000 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/bridge/br_netfilter 0x00000000 br_netfilter_enable +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_dev_queue_push_xmit +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_forward_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_handle_frame_finish +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_has_querier_anywhere +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_list_adjacent +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_multicast_router +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 br_vlan_enabled +EXPORT_SYMBOL_GPL net/bridge/bridge 0x00000000 nf_br_ops +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 __tracepoint_devlink_hwmsg +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_alloc +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_action_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_append +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_close +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_entry_ctx_prepare +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_headers_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_match_put +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_counter_enabled +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_dpipe_table_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_free +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_split_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_clear +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_eth_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_type_ib_set +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_port_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_register +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_sb_unregister +EXPORT_SYMBOL_GPL net/core/devlink 0x00000000 devlink_unregister +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x00000000 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x00000000 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_decode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_encode +EXPORT_SYMBOL_GPL net/ife/ife 0x00000000 ife_tlv_meta_next +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_input_done2 +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_head +EXPORT_SYMBOL_GPL net/ipv4/esp4 0x00000000 esp_output_tail +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0x00000000 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_find_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_attrs_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_msg_common_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x00000000 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/ip_gre 0x00000000 gretap_fb_dev_create +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 __ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_md_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_change_mtu +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_changelink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_delete_nets +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_dellink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_encap_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_init_net +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_ioctl +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_lookup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_newlink +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_rcv +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_setup +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_uninit +EXPORT_SYMBOL_GPL net/ipv4/ip_tunnel 0x00000000 ip_tunnel_xmit +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0x00000000 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x00000000 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x00000000 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_dup_ipv4 0x00000000 nf_dup_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_in +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_local_fn +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x00000000 nf_nat_ipv4_out +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_register_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_masquerade_ipv4 0x00000000 nf_nat_masquerade_ipv4_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x00000000 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_ip_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_reject_iphdr_put +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_reset +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_reject_ipv4 0x00000000 nf_send_unreach +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_socket_ipv4 0x00000000 nf_sk_lookup_slow_v4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_tables_ipv4 0x00000000 nft_af_ipv4 +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nft_fib_ipv4 0x00000000 nft_fib4_eval_type +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x00000000 tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 setup_udp_tunnel_sock +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tun_rx_dst +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_drop_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_add_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_notify_del_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_push_rx_port +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_sock_release +EXPORT_SYMBOL_GPL net/ipv4/udp_tunnel 0x00000000 udp_tunnel_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_input_done2 +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_head +EXPORT_SYMBOL_GPL net/ipv6/esp6 0x00000000 esp6_output_tail +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_encap_setup +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x00000000 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_sock_create6 +EXPORT_SYMBOL_GPL net/ipv6/ip6_udp_tunnel 0x00000000 udp_tunnel6_xmit_skb +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x00000000 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_ct_frag6_gather +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x00000000 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_dup_ipv6 0x00000000 nf_dup_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_in +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_local_fn +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x00000000 nf_nat_ipv6_out +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_register_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_masquerade_ipv6 0x00000000 nf_nat_masquerade_ipv6_unregister_notifier +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_get +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6_tcphdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_reject_ip6hdr_put +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_reset6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_reject_ipv6 0x00000000 nf_send_unreach6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_socket_ipv6 0x00000000 nf_sk_lookup_slow_v6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_tables_ipv6 0x00000000 nft_af_ipv6 +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nft_fib_ipv6 0x00000000 nft_fib6_eval_type +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 __l2tp_session_unhash +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_get_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_queue_purge +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_register +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_session_set_header_len +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_closeall +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_tunnel_get +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x00000000 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_register_ops +EXPORT_SYMBOL_GPL net/l2tp/l2tp_netlink 0x00000000 l2tp_nl_unregister_ops +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_dev_mtu +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_output_possible +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_pkt_too_big +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 mpls_stats_inc_outucastpkts +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_get_labels +EXPORT_SYMBOL_GPL net/mpls/mpls_router 0x00000000 nla_put_labels +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_elem_len +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_put_extensions +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x00000000 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x00000000 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_connlabels_replace +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_eventmask_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_expect_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_helpers_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_dccp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_sctp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_l4proto_udplite6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_locks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_delete +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_iterate_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_helper_log +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_cleanup_net +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_iterate_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_pernet_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_register_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_l4proto_unregister_one +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_netns_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expect +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seq_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tcp_seqadj_set +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_tmpl_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unconfirmed_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nf_l4proto_log_invalid +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x00000000 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x00000000 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x00000000 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x00000000 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x00000000 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x00000000 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x00000000 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x00000000 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x00000000 nf_nat_sip_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x00000000 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x00000000 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_dup_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_dup_netdev 0x00000000 nf_fwd_netdev_egress +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_packet_common +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_sk_uid_gid +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_tcp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_dump_udp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_log_common 0x00000000 nf_log_l2packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_ct_nat_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_alloc_null_binding +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x00000000 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv4 +EXPORT_SYMBOL_GPL net/netfilter/nf_nat_redirect 0x00000000 nf_nat_redirect_ipv6 +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_build_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_check_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_init_timestamp_cookie +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_net_id +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_options_size +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_parse_options +EXPORT_SYMBOL_GPL net/netfilter/nf_synproxy_core 0x00000000 synproxy_tstamp_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 __nft_release_basechain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_bind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_obj_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nf_tables_unbind_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_dependency +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_chain_validate_hooks +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_dump +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_init +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_data_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_do_chain +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_dump_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_obj_notify +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_parse_u32_check +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_register_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_elem_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_ext_types +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_gc_batch_release +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_set_lookup +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_trace_enabled +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_afinfo +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_chain_type +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_expr +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_obj +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_unregister_set +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_load +EXPORT_SYMBOL_GPL net/netfilter/nf_tables 0x00000000 nft_validate_register_store +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x00000000 nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_overquota +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x00000000 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x00000000 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_init +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_store_result +EXPORT_SYMBOL_GPL net/netfilter/nft_fib 0x00000000 nft_fib_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_init +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_masq 0x00000000 nft_masq_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_get_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_destroy +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_eval +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_init +EXPORT_SYMBOL_GPL net/netfilter/nft_meta 0x00000000 nft_meta_set_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_init +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_redir 0x00000000 nft_redir_validate +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_dump +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmp_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_icmpv6_code +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_init +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_policy +EXPORT_SYMBOL_GPL net/netfilter/nft_reject 0x00000000 nft_reject_validate +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_copy_counters_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_data_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_hook_ops_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_alloc +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_percpu_counter_free +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_tee_enabled +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x00000000 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x00000000 xt_rateest_put +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_pop +EXPORT_SYMBOL_GPL net/nsh/nsh 0x00000000 nsh_push +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 __ovs_vport_ops_register +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_link +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_netdev_tunnel_destroy +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_alloc +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_free +EXPORT_SYMBOL_GPL net/openvswitch/openvswitch 0x00000000 ovs_vport_ops_unregister +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_get +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_group_put +EXPORT_SYMBOL_GPL net/psample/psample 0x00000000 psample_sample_packet +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_conn_path_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_connect_path_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_path_init +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_path_reset +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_ping +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_send_xmit +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x00000000 rds_wq +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_endpoint +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_for_each_transport +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_get_sctp_info +EXPORT_SYMBOL_GPL net/sctp/sctp 0x00000000 sctp_transport_lookup_process +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_hash_sk +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_proto +EXPORT_SYMBOL_GPL net/smc/smc 0x00000000 smc_unhash_sk +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00000000 svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_seq_stop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 gssd_running +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_add_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_iterate_for_each_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_setup_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_activate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_swap_deactivate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_test_and_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_add_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_has_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clnt_xprt_switch_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_count_iostats_metrics +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_find_or_alloc_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_head +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_cred_nonblock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_generic_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_bc_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_release_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_remove_pipe_dir_object +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_set_connect_timeout +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_switch_client_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_cred_key_to_expire +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_gssinfo +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_get_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_key_timeout_notify +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_lookupcred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_stringify_acceptor +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unhash +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_age_temp_xprts_now +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_alien_sock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_pool_map_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_rqst_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_set_num_threads_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_do_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_buf_trim +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_commit_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_decode_string_dup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_force_disconnect +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_pin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unpin_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00000000 xprt_write_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_connect +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_deliver_tap_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_destruct +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_bind +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_dgram_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_do_socket_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_free_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_get_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_inc_tx_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_in +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_poll_out +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_post_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_recv_pre_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_post_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_block +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_notify_send_pre_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_put_credit +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_recv_pkt +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_release +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_max_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_set_min_buffer_size +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_shutdown +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_allow +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_dequeue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_enqueue +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_is_active +EXPORT_SYMBOL_GPL net/vmw_vsock/vmw_vsock_virtio_transport_common 0x00000000 virtio_transport_stream_rcvhiwat +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_core_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 __vsock_create +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vm_sockets_get_local_cid +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_add_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_cast +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_equals_addr +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_init +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_unbind +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_addr_validate +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_bind_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_connected_table +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_exit +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_core_get_transport +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_deliver_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_enqueue_accept +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_bound_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_find_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_for_each_connected_socket +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_insert_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_pending_work +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_bound +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_connected +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_pending +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_sock +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_remove_tap +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_data +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_stream_has_space +EXPORT_SYMBOL_GPL net/vmw_vsock/vsock 0x00000000 vsock_table_lock +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_count_pfkey_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x00000000 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x00000000 ipcomp_output +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_register_producer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_consumer +EXPORT_SYMBOL_GPL virt/lib/irqbypass 0x00000000 irq_bypass_unregister_producer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_percpu_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bdev_dax_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blk_run_queue_uncond +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blkg_release_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __bpf_call_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __clocksource_update_freq_scale +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __compat_only_sysfs_link_entry_to_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v4_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cookie_v6_init_sequence +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_add_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __cpuhp_state_remove_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dax_zero_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devcgroup_check_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __devm_pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fput_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fscrypt_prepare_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __gmap_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __gmap_zap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ioread32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __iptunnel_pull_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_alloc_domain_generic_chips +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_domain_alloc_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kthread_init_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __list_lru_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_invalidate_range_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ndisc_fill_addr_option +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_free_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __page_mapcount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epc_mem_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_epf_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_down_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_ida_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_init_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __percpu_up_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __platform_register_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v4_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __raw_v6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __request_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sbitmap_queue_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __scsi_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __serdev_device_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_get_hash_symmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_recv_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_bputs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __trace_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_add_device_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_arm_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_attach_device_to_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_split +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_get_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_bpf_prog_put_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_external_learn_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_br_fdb_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_frequency +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_detach_device_from_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fdb_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_fib6_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_io_page_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_mc_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_non_standard_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_powernv_throttle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_remove_device_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_suspend_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_tcp_send_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_wbc_writepage +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __tracepoint_xdp_exception +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __udp_enqueue_schedule_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_removexattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vfs_setxattr_noperm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_locked_key_bookmark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 access_process_vm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 acomp_request_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_disk_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_hwgenerator_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_interrupt_randomness +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_memory_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x00000000 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_add_linklocal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 addrconf_prefix_rcv_add_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 admin_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_exit_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_init_geniv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aead_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 akcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_expires_remaining +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_forward_now +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_start_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alarm_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alg_test +EXPORT_SYMBOL_GPL vmlinux 0x00000000 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 appldata_diag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 appldata_register_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 appldata_unregister_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_generate_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_partial +EXPORT_SYMBOL_GPL vmlinux 0x00000000 asymmetric_key_id_same +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 badblocks_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_aops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bdev_write_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_associate_blkcg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_clone_blkcg_association +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_iov_iter_get_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bio_trim +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bit_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_copy_from_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_clear_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_fill_rwbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_freeze_queue_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_init_request_from_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_alloc_request_hctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_debugfs_rq_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_flush_busy_ctxs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_free_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_freeze_queue_wait_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_pci_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_quiesce_queue_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_rdma_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_request_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_free_hctx_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_request_inserted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_insert_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_sched_try_merge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_start_stopped_hw_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_tagset_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unfreeze_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_unquiesce_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_update_nr_hw_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_mq_virtio_map_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_max_discard_segments +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_queue_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_preempt_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_set_queue_dying +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_alloc_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_stat_remove_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_status_to_errno +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_steal_bios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_aead_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_read_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_report_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_reset_zones +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkdev_write_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_dev_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_lookup_slowpath +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_bytes_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_print_stat_ios_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_rwstat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blkg_stat_recursive_sum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blockdev_superblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_create_from_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_get_type_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_inc_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_select_runtime +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_prog_sub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_pop_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_skb_vlan_push_proto +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bpf_warn_invalid_xdp_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_job_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cap_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ccw_device_force_console +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ccw_device_get_chp_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ccw_device_get_schid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ccw_device_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ccw_device_siosl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_get_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgroup_path_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cgrp_dfl_root +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chp_get_sch_opm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chp_ssd_get_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_determine_channel_path_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_error_from_response +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_pnso_brinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_sadc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_scm_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_siosl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 chsc_ssqd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_cancel_halt_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_commit_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_disable_subchannel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_enable_subchannel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_start_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_tm_intrg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_tm_start_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cio_update_schib +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clock_comparator_max +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_config_and_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clockevents_unbind_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clocks_calc_mult_shift +EXPORT_SYMBOL_GPL vmlinux 0x00000000 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cmf_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cmf_readall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cn_netlink_send_mult +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_bind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_add_with_match +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_master_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 component_unbind_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cond_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_hotplug_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_topology +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuacct_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuhp_tasks_frozen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpus_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aead_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ahash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_extsize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_del_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_decode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_encode_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_dh_key_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_grab_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_has_skcipher2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_inst_setname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_null_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_req_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_rng_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_type_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_acomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_aeads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_ahashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_akcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_kpp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rng +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_rngs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_scomps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_skciphers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_chsc_characteristics +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_general_characteristics +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_sch_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_sch_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_sched_sch_todo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 css_schedule_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 current_is_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_exchange +EXPORT_SYMBOL_GPL vmlinux 0x00000000 d_walk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_attribute_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_copy_from_iter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_direct_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_finish_sync_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_by_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_get_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_iomap_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_write_cache_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dax_writeback_mapping_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_add_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ddebug_remove_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debug_locks_silent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_atomic_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_devm_seqfile +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_file_unsafe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_file_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_read_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_real_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 debugfs_write_file_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 default_iommu_map_sg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 desc_to_gpio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fill_metadata_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_clear_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_disable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_domain_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_enable_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_expose_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_hide_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_qos_update_user_latency_tolerance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_dedicated_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_pm_set_wake_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_queue_xmit_nit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_create_with_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_for_each_child_reverse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_child_node_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_dma_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_link_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_file_self +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_remove_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_of_node_from_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devices_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_add_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_add_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_device_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_get_free_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_init_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kasprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kmemdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_kstrdup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_remove_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_request_pci_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devm_watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_alloc_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 diag308 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 direct_make_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_cmf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_hardirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_accept_partial_bio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_queue_limits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_bio_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_reserved_rq_based_ios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_get_table_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_hold +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_resume_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_internal_suspend_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_remap_zone_report +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_table_set_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dm_use_blk_mq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_from +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_splice_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_tcp_sendpages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 do_xdp_generic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_get_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip4 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dst_cache_set_ip6 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 dump_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elfcorehdr_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_rqhash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_cmf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 enable_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 errno_to_blk_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 event_triggers_post_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x00000000 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evict_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_set_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib4_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_get_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib6_rule_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_multipath_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_new_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_delrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_nl_newrule +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rule_matchall +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_seq_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_select_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_asymmetric_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_extend_vma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fixup_user_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_delayed_fput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 for_each_kernel_tracepoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_fib_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 freezer_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_dax_get_by_bdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fscrypt_file_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_add_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_alloc_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_destroy_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_get_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_init_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsnotify_put_mark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_ops_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_get_req_for_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_device_is_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_named_gpiod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_child_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_next_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_next_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_graph_get_remote_port_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_handle_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_get_reference_args +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_string_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u64_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 fwnode_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gcd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 generic_xdp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cached_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_ccwdev_by_dev_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_bpf_fprog +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_compat_sigset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_device_system_crosststamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_empty_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_state_synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 getboottime64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_hva_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_discard +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_get_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_map_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_mprotect_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_read_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_register_pte_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_pgt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_pgt_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_r2t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_r3t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_sgt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_shadow_valid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_translate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_unmap_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gmap_unregister_pte_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpio_to_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_add_data_with_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_free_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_config +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_generic_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_get_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irq_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_irqchip_add_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_drain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_open_source +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_line_is_persistent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_lock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_request_own_desc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_chained_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_set_nested_irqchip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiochip_unlock_as_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_add_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_direction_output_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_export_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_direction +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_index_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_optional +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_is_active_low +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_put_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_remove_lookup_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_array_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_raw_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 gpiod_unexport +EXPORT_SYMBOL_GPL vmlinux 0x00000000 guid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_grow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 halt_poll_ns_shrink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_bad_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_fasteoi_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_mm_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 handle_untracked_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_algo_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hash_digest_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hibernation_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_affine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_any_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_overriden +EXPORT_SYMBOL_GPL vmlinux 0x00000000 housekeeping_test_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_resolution +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hugetlb_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 idr_alloc_cmn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ima_file_check +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_locks_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_ehash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 insert_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 io_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_dio_rw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_fiemap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_buffered_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_file_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_page_mkwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_seek_hole +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_truncate_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iomap_zero_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_capable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_domain_window_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_add_ids +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_fwspec_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_domain_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_get_group_resv_regions +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iommu_unmap_fast +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_connect_v6_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_pol_route +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_input_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_route_output_flags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_route_output_key_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_get_stats64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_need_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ip_tunnel_unneed_metadata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipl_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_handle_offloads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_metadata_reply +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iptunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_mod_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_proxy_select_ident +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ipv6_stub +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_fwspec_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_add_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_check_msi_remap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_free_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_find_matching_fwspec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_ack_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_clr_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_gc_mask_set_bit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_generic_chip_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_domain_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_get_percpu_devid_partition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_percpu_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chained_handler_and_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_irqchip_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_set_vcpu_affinity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_wake_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 irqchip_fwnode_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_current_mnt_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_hash_blacklisted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 is_skb_forwardable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 isc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 iterate_mounts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_fd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_read_file_from_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_find_and_get_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_path_from_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kernfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kexec_crash_loaded +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_being_used_for +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kick_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_behind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_prev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_disable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_enable_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_free_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_shadow_get_or_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 klp_unregister_patch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobj_sysfs_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kset_find_obj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_cmdline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kstrdup_quotable_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_delayed_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_flush_worker +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_parkme +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_should_park +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_unpark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_boot_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_mono_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_raw_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_fast_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_real_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_resolution_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_seconds +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_ts64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_get_with_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ktime_mono_to_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_clear_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_disable_largepages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_flush_remote_tlbs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_dirty_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_get_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_io_bus_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_irq_has_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_put_kvm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_rebooting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_memory_region +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_cache +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_hva +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_read_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_wake_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_offset_cached +EXPORT_SYMBOL_GPL vmlinux 0x00000000 kvm_write_guest_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_by_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_fib_table_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_link_scope_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_master_ifindex_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 l3mdev_update_flow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lcm_not_zero +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lgr_info_log +EXPORT_SYMBOL_GPL vmlinux 0x00000000 linear_hugepage_index +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_count_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_isolate_move +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 list_lru_walk_one +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0x00000000 llist_reverse_order +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x00000000 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 loop_backing_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtstate_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_build_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_cmp_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_add_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_encap_del_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_fill_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_get_encap_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_input +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_state_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_valid_encap_type_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lwtunnel_xmit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mark_page_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md5_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_find_rdev_nr_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_kick_rdev_from_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_init_writes_pending +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mddev_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memhp_auto_online +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 memory_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 metadata_dst_free_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmput +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_call_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_synchronize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mmu_notifier_unregister_no_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_read_raw_from_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mpi_write_to_sgl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 msi_desc_to_pci_sysdata +EXPORT_SYMBOL_GPL vmlinux 0x00000000 mutex_lock_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 name_to_dev_t +EXPORT_SYMBOL_GPL vmlinux 0x00000000 napi_hash_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_start_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_stop_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_unregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_add_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ncsi_vlan_rx_kill_vid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nd_tbl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ndo_dflt_bridge_getlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_cls_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_dec_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_egress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_inc_ingress_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 net_prio_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_is_rx_handler_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_lower_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netdev_walk_all_upper_dev_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_add_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x00000000 netlink_remove_tap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ct_zone_dflt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_log_buf_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_find_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_logger_request_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_get_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_entry_release_refs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_queue_nf_hook_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_skb_duplicated +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nfnl_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nl_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 no_action +EXPORT_SYMBOL_GPL vmlinux 0x00000000 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_iowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_running +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_swap_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nr_threads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nsecs_to_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_alloc_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_cancel_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_async_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_complete_rq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_delete_ctrl_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_disable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_enable_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_init_identify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_io_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_kill_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_queue_scan +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reinit_tagset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_remove_namespaces +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_reset_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_sec_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_set_queue_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_setup_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_start_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_stop_queues +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_unfreeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 nvme_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 of_css +EXPORT_SYMBOL_GPL vmlinux 0x00000000 open_check_o_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 orderly_reboot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 out_of_line_wait_on_bit_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_endio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x00000000 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_ops_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 param_set_bool_enable_only +EXPORT_SYMBOL_GPL vmlinux 0x00000000 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 path_noexec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_assign_unassigned_bus_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_common_swizzle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_d3cold_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_debug_err_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_debug_msg_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_device_is_present +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_domain_nr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_add_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_clear_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_get_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_map_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_alloc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_mem_free_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_raise_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_remove_epf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_set_msi +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_unmap_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epc_write_header +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_alloc_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_free_space +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_linkup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_match_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unbind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_epf_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_read32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_generic_config_write32 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ignore_hotplug +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_ioremap_wc_bar +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_lock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_mask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_msi_unmask_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_probe_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_proc_domain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_remove_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bridge_secondary_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_host_bridge_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_and_remove_bus_device_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_stop_root_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_try_reset_slot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_unlock_rescan_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vfs_assigned +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pci_write_msi_msg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_flr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 peernet2id_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_down_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_free_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_for_each_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ida_free_tags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_kill_and_confirm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_reinit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_atomic_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_ref_switch_to_percpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 percpu_up_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_begin +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_end +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_flag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_aux_output_skip +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_addr_filters_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_event_sysfs_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_get_aux +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_pmu_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_buf_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_trace_run_bpf_submit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pids_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_bind +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_common_sendmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_err +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_get_port +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_getfrag +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_proc_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_queue_rcv_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_recvmsg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_fops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ping_unhash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pingv6_prot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_free_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_get_content_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_parse_message +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_validate_trust +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pkcs7_verify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_properties +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_irq_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 platform_unregister_drivers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 play_idle +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_freezing +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_power_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_print_active_wakeup_sources +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_force_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_get_if_in_use +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_runtime_set_memalloc_noio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_system_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_dev_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wakeup_ws_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_access_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_acl_default_xattr_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_dopipe_max_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_douintvec_minmax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_get_parent_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 proc_mkdir_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_dup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 property_entries_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pskb_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptep_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ptp_classify_raw +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_signature_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x00000000 public_key_verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_compat_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_dax +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_filp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_itimerspec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 put_timespec64 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ras_userspace_consumers +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v4_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 raw_v6_hashinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_all_qs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_barrier_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_batches_started_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_cpu_stall_suppress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_exp_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_expedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_gp_is_normal +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_is_watching +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcu_unexpedite_gp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_enabled_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rdma_cgrp_subsys_on_dfl_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x00000000 region_intersects +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_reset_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 register_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_late_setup_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x00000000 remove_resource +EXPORT_SYMBOL_GPL vmlinux 0x00000000 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 report_iommu_fault +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 request_firmware_direct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_get_fences_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_test_signaled_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reservation_object_wait_timeout_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 reset_hung_task_detector +EXPORT_SYMBOL_GPL vmlinux 0x00000000 restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_free_and_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_insert_slow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhashtable_walk_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rhltable_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rht_bucket_nested_insert +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x00000000 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_priv_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rsa_parse_pub_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt6_free_pcpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_delete_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s390_enable_sie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s390_enable_skey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s390_handle_mcck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s390_pci_dma_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 s390_reset_cmma +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_regs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_any_bit_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_bitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_get_shallow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_clear +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_init_node +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_queue_wake_all +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_show +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sbitmap_weight +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_ffwd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_setscheduler_nocheck +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sched_show_task +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scm_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scm_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scm_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_check_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_device_from_queue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_activate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attach +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_dh_set_params +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_block_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_internal_device_unblock_nowait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_ioctl_block_when_processing_errors +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_register_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_file_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_permission +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_readlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_post_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_kernel_read_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_mmap_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chmod +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_chown +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_rmdir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 security_path_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x00000000 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sed_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_encap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seg6_do_srh_inline +EXPORT_SYMBOL_GPL vmlinux 0x00000000 selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_controller_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_close +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_get_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_baudrate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_flow_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_set_tiocm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_wait_until_sent +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 serdev_device_write_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_primary_fwnode +EXPORT_SYMBOL_GPL vmlinux 0x00000000 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setfl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_alloc_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_free_table_chained +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha1_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha224_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sha256_zero_message_hash +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_no_setkey +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_add_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_file_setup_with_mnt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_get_seals +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 show_rcu_gp_kthreads +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_mem_available +EXPORT_SYMBOL_GPL vmlinux 0x00000000 si_swapinfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_free_unlock_clone +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_set_peek_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_append_pagefrags +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_tx_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_consume_udp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_transport_seglen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mac_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_gso_validate_mtu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_scrub_packet +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_send_sock_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_splice_bits +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_to_sgvec_nomark +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_headlen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skb_zerocopy_iter_stream +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_decrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_aead_encrypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_atomise +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 skcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_function_single_async +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smp_call_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_register_percpu_thread_cpumask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snmp_get_cpu_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 snprint_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_gen_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_callback +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_put_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sock_zerocopy_realloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 splice_to_pipe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 split_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcu_torture_stats_print +EXPORT_SYMBOL_GPL vmlinux 0x00000000 srcutorture_get_gp_data +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_deferred_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_disable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_enable_cpuslocked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_initialized +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x00000000 static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sthyi_fill +EXPORT_SYMBOL_GPL vmlinux 0x00000000 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_check_rcv +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_data_ready +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_process +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_stop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 strp_unpause +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 subsys_virtual_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_rcu_tasks +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_add_link_to_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_create_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_file_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_groups +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_link_from_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_remove_mount_point +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_rename_link_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_power_efficient_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cls_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_cputime_adjusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_user_regset_view +EXPORT_SYMBOL_GPL vmlinux 0x00000000 task_work_run +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tc_setup_cb_egdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_key_by_name +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_get_name_by_key +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_ca_openreq_child +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_enter_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_leave_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_memory_pressure +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_rate_check_app_limited +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_register_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_reno_undo_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_send_ack +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendmsg_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_sendpage_locked +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_keepalive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tcp_unregister_ulp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 test_and_clear_guest_dirty +EXPORT_SYMBOL_GPL vmlinux 0x00000000 thp_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tick_broadcast_oneshot_control +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x00000000 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tnum_strn +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tod_clock_base +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_get_tpm_pt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm2_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_chip_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_getcap +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_is_tpm2 +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_put_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_seal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_transmit_cmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_try_get_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpm_unseal_trusted +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tpmm_chip_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_call_bpf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_global +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_clock_local +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_commit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_buffer_reserve +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_ignore_this_pid +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_handle_return +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_output_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_print_bitmask_seq +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bitmask +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_bprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_path +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_putmem_hex +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_puts +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_to_user +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_register_prio +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_alloc_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tracing_snapshot_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_lock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_set_limit +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_space_avail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_buffer_unlock_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_dev_name_to_number +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kclose +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_kopen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_receive_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_ldisc_release +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_attr_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_register_device_serdev +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_hangup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_port_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_release_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_ldisc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_skb_array +EXPORT_SYMBOL_GPL vmlinux 0x00000000 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_hwcsum +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp4_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp6_lib_lookup_skb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_abort +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_destruct_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 udp_init_sock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_export +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_reset_call +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_trace_event +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_tracepoint_module_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unregister_vmap_purge_notifier +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x00000000 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 update_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uprobe_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_free_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_preparse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 user_update +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 uuid_gen +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_skb_list +EXPORT_SYMBOL_GPL vmlinux 0x00000000 validate_xmit_xfrm +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vcpu_put +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_pkcs7_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_fallocate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_getxattr_alloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_read +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_readf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_submount +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_write +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vfs_writef +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_add_status +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_break_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_changed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_disable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_config_enable +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_freeze +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_device_restore +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtio_finalize_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_inbuf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_outbuf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_add_sgs +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_enable_cb_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_avail_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_buf_ctx +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_desc_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_used_addr +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_is_broken +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x00000000 virtqueue_poll +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vmf_insert_pfn_pmd +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vprintk_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_create_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vtime_account_irq_enter +EXPORT_SYMBOL_GPL vmlinux 0x00000000 vtime_account_system +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_stable_page +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wake_up_all_idle_cpus +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeme_after_rcu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_init_timeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_notify_pretimeout +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_set_restart_priority +EXPORT_SYMBOL_GPL vmlinux 0x00000000 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wb_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbc_account_io +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_disable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 wbt_enable_default +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0x00000000 work_on_cpu_safe +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0x00000000 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_cert_parse +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_decode_time +EXPORT_SYMBOL_GPL vmlinux 0x00000000 x509_free_certificate +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_flush_map +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_generic_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xdp_do_redirect +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_offload_ok +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_dev_state_add +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_local_error +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x00000000 xts_crypt +EXPORT_SYMBOL_GPL vmlinux 0x00000000 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_iomap_start +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_load +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_store +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zpci_store_block +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_compact +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_free +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_get_total_pages +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_pool_stats +EXPORT_SYMBOL_GPL vmlinux 0x00000000 zs_unmap_object --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/s390x/generic.compiler +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/s390x/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu 7.3.0-3ubuntu1) 7.3.0 --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/s390x/generic.modules +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/s390x/generic.modules @@ -0,0 +1,915 @@ +8021q +842 +842_compress +842_decompress +9p +9pnet +9pnet_rdma +9pnet_virtio +act_bpf +act_connmark +act_csum +act_gact +act_ipt +act_mirred +act_nat +act_pedit +act_police +act_sample +act_simple +act_skbedit +act_skbmod +act_tunnel_key +act_vlan +aes_s390 +aes_ti +af_alg +af_iucv +af_key +af_packet_diag +ah4 +ah6 +algif_aead +algif_hash +algif_rng +algif_skcipher +altera-cvp +altera-pr-ip-core +amd +ansi_cprng +anubis +appldata_mem +appldata_net_sum +appldata_os +aquantia +arc4 +arp_tables +arpt_mangle +arptable_filter +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at803x +aufs +auth_rpcgss +authenc +authencesn +bcache +bcm-phy-lib +bcm7xxx +bcm87xx +bfq +binfmt_misc +blocklayoutdriver +blowfish_common +blowfish_generic +bonding +br_netfilter +brd +bridge +broadcom +btrfs +cachefiles +camellia_generic +cast5_generic +cast6_generic +cast_common +ccm +ccwgroup +ceph +ch +chacha20_generic +chacha20poly1305 +chsc_sch +cicada +cifs +cls_basic +cls_bpf +cls_cgroup +cls_flow +cls_flower +cls_fw +cls_matchall +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cmac +coda +cordic +cortina +crc-itu-t +crc32-vx_s390 +crc32_generic +crc4 +crc7 +crc8 +cryptd +crypto_engine +crypto_user +ctcm +cuse +dasd_diag_mod +dasd_eckd_mod +dasd_fba_mod +dasd_mod +davicom +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcssblk +deflate +des_generic +des_s390 +device_dax +devlink +diag288_wdt +dlm +dm-bio-prison +dm-bufio +dm-cache +dm-cache-smq +dm-crypt +dm-delay +dm-era +dm-flakey +dm-integrity +dm-log +dm-log-userspace +dm-log-writes +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-switch +dm-thin-pool +dm-verity +dm-zero +dm-zoned +dp83822 +dp83848 +dp83867 +drbd +drop_monitor +dummy +dummy_stm +dwc-xlgmac +eadm_sch +ebt_802_3 +ebt_among +ebt_arp +ebt_arpreply +ebt_dnat +ebt_ip +ebt_ip6 +ebt_limit +ebt_log +ebt_mark +ebt_mark_m +ebt_nflog +ebt_pkttype +ebt_redirect +ebt_snat +ebt_stp +ebt_vlan +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +ecdh_generic +echainiv +em_cmp +em_ipset +em_meta +em_nbyte +em_text +em_u32 +eql +esp4 +esp4_offload +esp6 +esp6_offload +et1011c +faulty +fcoe +fcrypt +fixed_phy +fou +fou6 +fpga-mgr +fs3270 +fscache +fsi-core +fsi-master-gpio +fsi-master-hub +fsi-scom +fsm +garp +geneve +genwqe_card +gfs2 +ghash_s390 +gpio-bt8xx +gpio-dwapb +gpio-generic +gpio-pci-idio-16 +gpio-rdc321x +grace +gre +gtp +hangcheck-timer +hmcdrv +ib_cm +ib_core +ib_ipoib +ib_iser +ib_isert +ib_mthca +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +icp +icplus +ifb +ife +ila +inet_diag +intel-xway +intel_th +intel_th_gth +intel_th_msu +intel_th_pci +intel_th_pti +intel_th_sth +ip6_gre +ip6_tables +ip6_tunnel +ip6_udp_tunnel +ip6_vti +ip6t_MASQUERADE +ip6t_NPT +ip6t_REJECT +ip6t_SYNPROXY +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_mh +ip6t_rpfilter +ip6t_rt +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6table_security +ip_gre +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipmac +ip_set_hash_ipmark +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_mac +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netnet +ip_set_hash_netport +ip_set_hash_netportnet +ip_set_list_set +ip_tables +ip_tunnel +ip_vs +ip_vs_dh +ip_vs_fo +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_ovf +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipcomp +ipcomp6 +ipip +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_SYNPROXY +ipt_ah +ipt_rpfilter +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +iptable_security +ipvlan +ipvtap +irqbypass +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isofs +iw_cm +kafs +kcm +keywrap +khazad +kyber-iosched +l2tp_core +l2tp_debugfs +l2tp_eth +l2tp_ip +l2tp_ip6 +l2tp_netlink +lcs +libceph +libcrc32c +libfc +libfcoe +libiscsi +libiscsi_tcp +libosd +libphy +libsas +linear +llc +lockd +lru_cache +lrw +lxt +lz4 +lz4_compress +lz4hc +lz4hc_compress +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +macsec +macvlan +macvtap +marvell +marvell10g +mcryptd +md-cluster +md4 +mdev +memory-notifier-error-inject +mena21_wdt +mfd-core +michael_mic +micrel +microchip +mip6 +mlx4_core +mlx4_en +mlx4_ib +mlx5_core +mlx5_ib +mlxfw +mlxsw_core +mlxsw_pci +monreader +monwriter +mpls_gso +mpls_iptunnel +mpls_router +mpt3sas +mq-deadline +mrp +mscc +msdos +national +nb8800 +nbd +netconsole +netiucv +netlink_diag +nf_conntrack +nf_conntrack_amanda +nf_conntrack_broadcast +nf_conntrack_ftp +nf_conntrack_h323 +nf_conntrack_ipv4 +nf_conntrack_ipv6 +nf_conntrack_irc +nf_conntrack_netbios_ns +nf_conntrack_netlink +nf_conntrack_pptp +nf_conntrack_proto_gre +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_dup_ipv4 +nf_dup_ipv6 +nf_dup_netdev +nf_log_arp +nf_log_bridge +nf_log_common +nf_log_ipv4 +nf_log_ipv6 +nf_log_netdev +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_masquerade_ipv4 +nf_nat_masquerade_ipv6 +nf_nat_pptp +nf_nat_proto_gre +nf_nat_redirect +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nf_reject_ipv4 +nf_reject_ipv6 +nf_socket_ipv4 +nf_socket_ipv6 +nf_synproxy_core +nf_tables +nf_tables_arp +nf_tables_bridge +nf_tables_inet +nf_tables_ipv4 +nf_tables_ipv6 +nf_tables_netdev +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfs_layout_flexfiles +nfs_layout_nfsv41_files +nfsd +nfsv2 +nfsv3 +nfsv4 +nft_chain_nat_ipv4 +nft_chain_nat_ipv6 +nft_chain_route_ipv4 +nft_chain_route_ipv6 +nft_compat +nft_counter +nft_ct +nft_dup_ipv4 +nft_dup_ipv6 +nft_dup_netdev +nft_exthdr +nft_fib +nft_fib_inet +nft_fib_ipv4 +nft_fib_ipv6 +nft_fib_netdev +nft_fwd_netdev +nft_hash +nft_limit +nft_log +nft_masq +nft_masq_ipv4 +nft_masq_ipv6 +nft_meta +nft_meta_bridge +nft_nat +nft_numgen +nft_objref +nft_queue +nft_quota +nft_redir +nft_redir_ipv4 +nft_redir_ipv6 +nft_reject +nft_reject_bridge +nft_reject_inet +nft_reject_ipv4 +nft_reject_ipv6 +nft_rt +nft_set_bitmap +nft_set_hash +nft_set_rbtree +nilfs2 +nlmon +nls_ascii +nls_cp1250 +nls_cp1251 +nls_cp1255 +nls_cp737 +nls_cp775 +nls_cp850 +nls_cp852 +nls_cp855 +nls_cp857 +nls_cp860 +nls_cp861 +nls_cp862 +nls_cp863 +nls_cp864 +nls_cp865 +nls_cp866 +nls_cp869 +nls_cp874 +nls_cp932 +nls_cp936 +nls_cp949 +nls_cp950 +nls_euc-jp +nls_iso8859-1 +nls_iso8859-13 +nls_iso8859-14 +nls_iso8859-15 +nls_iso8859-2 +nls_iso8859-3 +nls_iso8859-4 +nls_iso8859-5 +nls_iso8859-6 +nls_iso8859-7 +nls_iso8859-9 +nls_koi8-r +nls_koi8-ru +nls_koi8-u +nls_utf8 +notifier-error-inject +nsh +ntfs +null_blk +nvme-fabrics +nvme-fc +nvme-loop +nvme-rdma +nvmet +nvmet-fc +nvmet-rdma +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stack_o2cb +ocfs2_stack_user +ocfs2_stackglue +openvswitch +oprofile +orangefs +osd +osst +overlay +p8022 +paes_s390 +pblk +pcbc +pci-stub +pcrypt +pkcs7_test_key +pkey +pktgen +pm-notifier-error-inject +poly1305_generic +pps_core +pretimeout_panic +prng +psample +psnap +ptp +qdio +qeth +qeth_l2 +qeth_l3 +qsemi +quota_tree +quota_v1 +quota_v2 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid_class +raw_diag +rbd +rcuperf +rdc321x-southbridge +rdma_cm +rdma_rxe +rdma_ucm +rdmavt +rds +rds_rdma +rds_tcp +realtek +remoteproc +rmd128 +rmd160 +rmd256 +rmd320 +rockchip +rpcrdma +rpcsec_gss_krb5 +rrpc +rxrpc +s390-trng +salsa20_generic +sch_cbq +sch_cbs +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq +sch_fq_codel +sch_gred +sch_hfsc +sch_hhf +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_pie +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +sclp_async +scm_block +scsi_debug +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_diag +sctp_probe +seed +serial_core +serpent_generic +sha1_s390 +sha256_s390 +sha3_generic +sha512_s390 +sha_common +sit +slicoss +sm3_generic +smc +smc_diag +smsc +smsgiucv_app +softdog +spl +splat +st +st_drv +ste10Xp +stm_console +stm_core +stm_ftrace +stm_heartbeat +stp +sunrpc +switchtec +tap +tape +tape_34xx +tape_3590 +tape_class +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +target_core_user +tcm_fc +tcm_loop +tcp_bbr +tcp_bic +tcp_cdg +tcp_dctcp +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_nv +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tea +team +team_mode_activebackup +team_mode_broadcast +team_mode_loadbalance +team_mode_random +team_mode_roundrobin +teranetics +test_bpf +test_firmware +test_module +test_static_key_base +test_static_keys +test_udelay +test_user_copy +tgr192 +tipc +tls +torture +tpm-rng +tpm_vtpm_proxy +ts_bm +ts_fsm +ts_kmp +tunnel4 +tunnel6 +twofish_common +twofish_generic +uPD60620 +uartlite +udf +udp_diag +udp_tunnel +uio +unix_diag +veth +vfio +vfio-pci +vfio_ccw +vfio_iommu_type1 +vfio_mdev +vfio_virqfd +vhost +vhost_net +vhost_scsi +vhost_vsock +virtio-rng +virtio_blk +virtio_crypto +virtio_net +virtio_scsi +vitesse +vmac +vmlogrdr +vmur +vmw_vsock_virtio_transport +vmw_vsock_virtio_transport_common +vport-geneve +vport-gre +vport-vxlan +vrf +vsock +vsock_diag +vsockmon +vx855 +vxlan +wp512 +x_tables +xcbc +xfrm4_mode_beet +xfrm4_mode_transport +xfrm4_mode_tunnel +xfrm4_tunnel +xfrm6_mode_beet +xfrm6_mode_ro +xfrm6_mode_transport +xfrm6_mode_tunnel +xfrm6_tunnel +xfrm_algo +xfrm_ipcomp +xfrm_user +xfs +xilinx_gmii2rgmii +xor +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_CONNSECMARK +xt_CT +xt_DSCP +xt_HL +xt_HMARK +xt_IDLETIMER +xt_LOG +xt_NETMAP +xt_NFLOG +xt_NFQUEUE +xt_RATEEST +xt_REDIRECT +xt_SECMARK +xt_TCPMSS +xt_TCPOPTSTRIP +xt_TEE +xt_TPROXY +xt_TRACE +xt_addrtype +xt_bpf +xt_cgroup +xt_cluster +xt_comment +xt_connbytes +xt_connlabel +xt_connlimit +xt_connmark +xt_conntrack +xt_cpu +xt_dccp +xt_devgroup +xt_dscp +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_ipcomp +xt_iprange +xt_ipvs +xt_l2tp +xt_length +xt_limit +xt_mac +xt_mark +xt_multiport +xt_nat +xt_nfacct +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_realm +xt_recent +xt_sctp +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_tcpudp +xt_time +xt_u32 +z3fold +zavl +zcommon +zcrypt +zcrypt_cex2a +zcrypt_cex4 +zcrypt_pcixcc +zfcp +zfs +zlib_deflate +znvpair +zpios +zram +zstd_compress +zunicode --- linux-aws-4.15.0.orig/debian.master/abi/4.15.0-10.11/s390x/generic.retpoline +++ linux-aws-4.15.0/debian.master/abi/4.15.0-10.11/s390x/generic.retpoline @@ -0,0 +1 @@ +# RETPOLINE NOT ENABLED --- linux-aws-4.15.0.orig/debian.master/changelog +++ linux-aws-4.15.0/debian.master/changelog @@ -0,0 +1,1906 @@ +linux (4.15.0-11.12) UNRELEASED; urgency=medium + + CHANGELOG: Do not edit directly. Autogenerated at release. + CHANGELOG: Use the printchanges target to see the curent changes. + CHANGELOG: Use the insertchanges target to create the final log. + + -- Seth Forshee Wed, 21 Feb 2018 14:02:33 -0600 + +linux (4.15.0-10.11) bionic; urgency=medium + + * linux: 4.15.0-10.11 -proposed tracker (LP: #1749250) + + * "swiotlb: coherent allocation failed" dmesg spam with linux 4.15.0-9.10 + (LP: #1749202) + - swiotlb: suppress warning when __GFP_NOWARN is set + - drm/ttm: specify DMA_ATTR_NO_WARN for huge page pools + + * linux-tools: perf incorrectly linking libbfd (LP: #1748922) + - SAUCE: tools -- add ability to disable libbfd + - [Packaging] correct disablement of libbfd + + * [Artful] Realtek ALC225: 2 secs noise when a headset plugged in + (LP: #1744058) + - ALSA: hda/realtek - update ALC225 depop optimize + + * [Artful] Support headset mode for DELL WYSE (LP: #1723913) + - SAUCE: ALSA: hda/realtek - Add support headset mode for DELL WYSE + + * headset mic can't be detected on two Dell machines (LP: #1748807) + - ALSA: hda/realtek - Support headset mode for ALC215/ALC285/ALC289 + - ALSA: hda - Fix headset mic detection problem for two Dell machines + + * Bionic update to v4.15.3 stable release (LP: #1749191) + - ip6mr: fix stale iterator + - net: igmp: add a missing rcu locking section + - qlcnic: fix deadlock bug + - qmi_wwan: Add support for Quectel EP06 + - r8169: fix RTL8168EP take too long to complete driver initialization. + - tcp: release sk_frag.page in tcp_disconnect + - vhost_net: stop device during reset owner + - ipv6: addrconf: break critical section in addrconf_verify_rtnl() + - ipv6: change route cache aging logic + - Revert "defer call to mem_cgroup_sk_alloc()" + - net: ipv6: send unsolicited NA after DAD + - rocker: fix possible null pointer dereference in + rocker_router_fib_event_work + - tcp_bbr: fix pacing_gain to always be unity when using lt_bw + - cls_u32: add missing RCU annotation. + - ipv6: Fix SO_REUSEPORT UDP socket with implicit sk_ipv6only + - soreuseport: fix mem leak in reuseport_add_sock() + - net_sched: get rid of rcu_barrier() in tcf_block_put_ext() + - net: sched: fix use-after-free in tcf_block_put_ext + - media: mtk-vcodec: add missing MODULE_LICENSE/DESCRIPTION + - media: soc_camera: soc_scale_crop: add missing + MODULE_DESCRIPTION/AUTHOR/LICENSE + - media: tegra-cec: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - gpio: uniphier: fix mismatch between license text and MODULE_LICENSE + - crypto: tcrypt - fix S/G table for test_aead_speed() + - Linux 4.15.3 + + * bnx2x_attn_int_deasserted3:4323 MC assert! (LP: #1715519) // + CVE-2018-1000026 + - net: create skb_gso_validate_mac_len() + - bnx2x: disable GSO where gso_size is too big for hardware + + * ethtool -p fails to light NIC LED on HiSilicon D05 systems (LP: #1748567) + - net: hns: add ACPI mode support for ethtool -p + + * CVE-2017-5715 (Spectre v2 Intel) + - [Packaging] retpoline files must be sorted + - [Packaging] pull in retpoline files + + * [Feature] PXE boot with Intel Omni-Path (LP: #1712031) + - d-i: Add hfi1 to nic-modules + + * CVE-2017-5715 (Spectre v2 retpoline) + - [Packaging] retpoline -- add call site validation + - [Config] disable retpoline checks for first upload + + * Do not duplicate changelog entries assigned to more than one bug or CVE + (LP: #1743383) + - [Packaging] git-ubuntu-log -- handle multiple bugs/cves better + + -- Seth Forshee Tue, 13 Feb 2018 11:33:58 -0600 + +linux (4.15.0-9.10) bionic; urgency=medium + + * linux: 4.15.0-9.10 -proposed tracker (LP: #1748244) + + * Miscellaneous Ubuntu changes + - [Debian] tests -- remove gcc-multilib dependency for arm64 + + -- Seth Forshee Thu, 08 Feb 2018 11:25:04 -0600 + +linux (4.15.0-8.9) bionic; urgency=medium + + * linux: 4.15.0-8.9 -proposed tracker (LP: #1748075) + + * Bionic update to v4.15.2 stable release (LP: #1748072) + - KVM: x86: Make indirect calls in emulator speculation safe + - KVM: VMX: Make indirect call speculation safe + - module/retpoline: Warn about missing retpoline in module + - x86/cpufeatures: Add CPUID_7_EDX CPUID leaf + - x86/cpufeatures: Add Intel feature bits for Speculation Control + - x86/cpufeatures: Add AMD feature bits for Speculation Control + - x86/msr: Add definitions for new speculation control MSRs + - x86/pti: Do not enable PTI on CPUs which are not vulnerable to Meltdown + - x86/cpufeature: Blacklist SPEC_CTRL/PRED_CMD on early Spectre v2 microcodes + - x86/speculation: Add basic IBPB (Indirect Branch Prediction Barrier) support + - x86/alternative: Print unadorned pointers + - x86/nospec: Fix header guards names + - x86/bugs: Drop one "mitigation" from dmesg + - x86/cpu/bugs: Make retpoline module warning conditional + - x86/cpufeatures: Clean up Spectre v2 related CPUID flags + - x86/retpoline: Simplify vmexit_fill_RSB() + - x86/speculation: Simplify indirect_branch_prediction_barrier() + - auxdisplay: img-ascii-lcd: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - iio: adc/accel: Fix up module licenses + - pinctrl: pxa: pxa2xx: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - ASoC: pcm512x: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - KVM: nVMX: Eliminate vmcs02 pool + - KVM: VMX: introduce alloc_loaded_vmcs + - objtool: Improve retpoline alternative handling + - objtool: Add support for alternatives at the end of a section + - objtool: Warn on stripped section symbol + - x86/mm: Fix overlap of i386 CPU_ENTRY_AREA with FIX_BTMAP + - x86/spectre: Check CONFIG_RETPOLINE in command line parser + - x86/entry/64: Remove the SYSCALL64 fast path + - x86/entry/64: Push extra regs right away + - x86/asm: Move 'status' from thread_struct to thread_info + - Documentation: Document array_index_nospec + - array_index_nospec: Sanitize speculative array de-references + - x86: Implement array_index_mask_nospec + - x86: Introduce barrier_nospec + - x86: Introduce __uaccess_begin_nospec() and uaccess_try_nospec + - x86/usercopy: Replace open coded stac/clac with __uaccess_{begin, end} + - x86/uaccess: Use __uaccess_begin_nospec() and uaccess_try_nospec + - x86/get_user: Use pointer masking to limit speculation + - x86/syscall: Sanitize syscall table de-references under speculation + - vfs, fdtable: Prevent bounds-check bypass via speculative execution + - nl80211: Sanitize array index in parse_txq_params + - x86/spectre: Report get_user mitigation for spectre_v1 + - x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable" + - x86/cpuid: Fix up "virtual" IBRS/IBPB/STIBP feature bits on Intel + - x86/speculation: Use Indirect Branch Prediction Barrier in context switch + - x86/paravirt: Remove 'noreplace-paravirt' cmdline option + - KVM: VMX: make MSR bitmaps per-VCPU + - x86/kvm: Update spectre-v1 mitigation + - x86/retpoline: Avoid retpolines for built-in __init functions + - x86/spectre: Simplify spectre_v2 command line parsing + - x86/pti: Mark constant arrays as __initconst + - x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL + - KVM/x86: Update the reverse_cpuid list to include CPUID_7_EDX + - KVM/x86: Add IBPB support + - KVM/VMX: Emulate MSR_IA32_ARCH_CAPABILITIES + - KVM/VMX: Allow direct access to MSR_IA32_SPEC_CTRL + - KVM/SVM: Allow direct access to MSR_IA32_SPEC_CTRL + - serial: core: mark port as initialized after successful IRQ change + - fpga: region: release of_parse_phandle nodes after use + - Linux 4.15.2 + + * Add support for the NIC on SynQuacer E-Series boards (LP: #1747792) + - net: phy: core: remove now uneeded disabling of interrupts + - [Config] CONFIG_NET_VENDOR_SOCIONEXT=y & CONFIG_SNI_NETSEC=m + - net: socionext: Add Synquacer NetSec driver + - net: socionext: include linux/io.h to fix build + - net: socionext: Fix error return code in netsec_netdev_open() + + * [Artful/Bionic] [Config] enable EDAC_GHES for ARM64 (LP: #1747746) + - [Config] CONFIG_EDAC_GHES=y + + * support thunderx2 vendor pmu events (LP: #1747523) + - perf pmu: Pass pmu as a parameter to get_cpuid_str() + - perf tools arm64: Add support for get_cpuid_str function. + - perf pmu: Add helper function is_pmu_core to detect PMU CORE devices + - perf vendor events arm64: Add ThunderX2 implementation defined pmu core + events + - perf pmu: Add check for valid cpuid in perf_pmu__find_map() + + * linux 4.14.0-7.9 ADT test failure with linux 4.14.0-7.9 (LP: #1732463) + - SAUCE: mm: disable vma based swap readahead by default + - SAUCE: mm: fix memory hotplug in ZONE_HIGHMEM + + * Miscellaneous Ubuntu changes + - [Config] Fix CONFIG_PROFILE_ALL_BRANCHES annotations + + -- Seth Forshee Wed, 07 Feb 2018 21:13:27 -0600 + +linux (4.15.0-7.8) bionic; urgency=medium + + * Bionic update to v4.15.1 stable release (LP: #1747169) + - Bluetooth: hci_serdev: Init hci_uart proto_lock to avoid oops + - tools/gpio: Fix build error with musl libc + - gpio: stmpe: i2c transfer are forbiden in atomic context + - gpio: Fix kernel stack leak to userspace + - ALSA: hda - Reduce the suspend time consumption for ALC256 + - crypto: ecdh - fix typo in KPP dependency of CRYPTO_ECDH + - crypto: aesni - handle zero length dst buffer + - crypto: aesni - fix typo in generic_gcmaes_decrypt + - crypto: aesni - add wrapper for generic gcm(aes) + - crypto: aesni - Fix out-of-bounds access of the data buffer in generic-gcm- + aesni + - crypto: aesni - Fix out-of-bounds access of the AAD buffer in generic-gcm- + aesni + - crypto: inside-secure - fix hash when length is a multiple of a block + - crypto: inside-secure - avoid unmapping DMA memory that was not mapped + - crypto: sha3-generic - fixes for alignment and big endian operation + - crypto: af_alg - whitelist mask and type + - HID: wacom: EKR: ensure devres groups at higher indexes are released + - HID: wacom: Fix reporting of touch toggle (WACOM_HID_WD_MUTE_DEVICE) events + - power: reset: zx-reboot: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - gpio: ath79: add missing MODULE_DESCRIPTION/LICENSE + - mtd: nand: denali_pci: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE + - igb: Free IRQs when device is hotplugged + - ima/policy: fix parsing of fsuuid + - scsi: aacraid: Fix udev inquiry race condition + - scsi: aacraid: Fix hang in kdump + - scsi: storvsc: missing error code in storvsc_probe() + - staging: lustre: separate a connection destroy from free struct kib_conn + - staging: ccree: NULLify backup_info when unused + - staging: ccree: fix fips event irq handling build + - tty: fix data race between tty_init_dev and flush of buf + - usb: option: Add support for FS040U modem + - USB: serial: pl2303: new device id for Chilitag + - USB: cdc-acm: Do not log urb submission errors on disconnect + - CDC-ACM: apply quirk for card reader + - USB: serial: io_edgeport: fix possible sleep-in-atomic + - usbip: prevent bind loops on devices attached to vhci_hcd + - usbip: list: don't list devices attached to vhci_hcd + - USB: serial: simple: add Motorola Tetra driver + - usb: f_fs: Prevent gadget unbind if it is already unbound + - usb: uas: unconditionally bring back host after reset + - usb/gadget: Fix "high bandwidth" check in usb_gadget_ep_match_desc() + - ANDROID: binder: remove waitqueue when thread exits. + - android: binder: use VM_ALLOC to get vm area + - mei: me: allow runtime pm for platform with D0i3 + - serial: 8250_of: fix return code when probe function fails to get reset + - serial: 8250_uniphier: fix error return code in uniphier_uart_probe() + - serial: 8250_dw: Revert "Improve clock rate setting" + - serial: imx: Only wakeup via RTSDEN bit if the system has RTS/CTS + - spi: imx: do not access registers while clocks disabled + - iio: adc: stm32: fix scan of multiple channels with DMA + - iio: chemical: ccs811: Fix output of IIO_CONCENTRATION channels + - test_firmware: fix missing unlock on error in config_num_requests_store() + - Input: synaptics-rmi4 - unmask F03 interrupts when port is opened + - Input: synaptics-rmi4 - do not delete interrupt memory too early + - x86/efi: Clarify that reset attack mitigation needs appropriate userspace + - Linux 4.15.1 + + * Dell XPS 13 9360 bluetooth (Atheros) won't connect after resume + (LP: #1744712) + - Revert "Bluetooth: btusb: fix QCA Rome suspend/resume" + - Bluetooth: btusb: Restore QCA Rome suspend/resume fix with a "rewritten" + version + + * apparmor profile load in stacked policy container fails (LP: #1746463) + - SAUCE: apparmor: fix display of .ns_name for containers + + -- Seth Forshee Sun, 04 Feb 2018 11:56:32 +0100 + +linux (4.15.0-6.7) bionic; urgency=low + + * upload urgency should be medium by default (LP: #1745338) + - [Packaging] update urgency to medium by default + + * Shutdown hang on 16.04 with iscsi targets (LP: #1569925) + - scsi: libiscsi: Allow sd_shutdown on bad transport + + * Miscellaneous Ubuntu changes + - SAUCE: (noup) Update spl to 0.7.5-1ubuntu1, zfs to 0.7.5-1ubuntu1 + - Revert "UBUNTU: SAUCE: mm: fix memory hotplug in ZONE_HIGHMEM" + - Revert "UBUNTU: SAUCE: mm: disable vma based swap readahead by default" + + [ Upstream Kernel Changes ] + + * Rebase to v4.15 + + -- Seth Forshee Mon, 29 Jan 2018 08:47:07 -0600 + +linux (4.15.0-5.6) bionic; urgency=low + + * $(LOCAL_ENV_CC) and $(LOCAL_ENV_DISTCC_HOSTS) should be properly quoted + (LP: #1744077) + - [Debian] pass LOCAL_ENV_CC and LOCAL_ENV_DISTCC_HOSTS properly + + * Missing install-time driver for QLogic QED 25/40/100Gb Ethernet NIC + (LP: #1743638) + - [d-i] Add qede to nic-modules udeb + + * boot failure on AMD Raven + WesternXT (LP: #1742759) + - SAUCE: drm/amdgpu: add atpx quirk handling (v2) + + * Unable to handle kernel NULL pointer dereference at isci_task_abort_task + (LP: #1726519) + - SAUCE: Revert "scsi: libsas: allow async aborts" + + * Update Ubuntu-4.15.0 config to support Intel Atom devices (LP: #1739939) + - [Config] CONFIG_SERIAL_DEV_BUS=y, CONFIG_SERIAL_DEV_CTRL_TTYPORT=y + + * Miscellaneous Ubuntu changes + - Rebase to v4.15-rc7 + - [Config] CONFIG_CPU_ISOLATION=y + - [Config] Update annotations following config review + - Revert "UBUNTU: SAUCE: Import aufs driver" + - SAUCE: Import aufs driver + - ubuntu: vbox -- update to 5.2.6-dfsg-1 + - ubuntu: vbox: build fixes for 4.15 + - ubuntu: vbox -- update to 5.2.6-dfsg-2 + - hio: updates for timer api changes in 4.15 + - enable hio build + - Rebase to v4.15-rc9 + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc9 + + -- Seth Forshee Mon, 22 Jan 2018 10:16:05 -0600 + +linux (4.15.0-4.5) bionic; urgency=low + + * [0cf3:e010] QCA6174A XR failed to pair with bt 4.0 device (LP: #1741166) + - SAUCE: Bluetooth: btusb: Add support for 0cf3:e010 + + * External HDMI monitor failed to show screen on Lenovo X1 series + (LP: #1738523) + - SAUCE: drm/i915: Disable writing of TMDS_OE on Lenovo ThinkPad X1 series + + * Miscellaneous Ubuntu changes + - [Debian] autoreconstruct - add resoration of execute permissions + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc4 + + -- Seth Forshee Wed, 10 Jan 2018 10:24:22 -0600 + +linux (4.15.0-3.4) bionic; urgency=low + + * ubuntu/xr-usb-serial didn't get built in zesty and artful (LP: #1733281) + - SAUCE: make sure ubuntu/xr-usb-serial builds for x86 + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc6 + + -- Seth Forshee Wed, 03 Jan 2018 20:20:43 -0600 + +linux (4.15.0-2.3) bionic; urgency=low + + * nvidia-graphics-drivers-384 384.90-0ubuntu6 ADT test failure with linux + 4.15.0-1.2 (LP: #1737752) + - x86/mm: Unbreak modules that use the DMA API + + * Ubuntu 17.10 corrupting BIOS - many LENOVO laptops models (LP: #1734147) + - [Config] CONFIG_SPI_INTEL_SPI_*=n + + * power: commonise configs IBMVETH/IBMVSCSI and ensure both are in linux-image + and udebs (LP: #1521712) + - [Config] Include ibmvnic in nic-modules + + * Enable arm64 emulation of removed ARMv7 instructions (LP: #1545542) + - [Config] Enable support for emulation of deprecated ARMv8 instructions + + * Miscellaneous Ubuntu changes + - SAUCE: (noup) Update spl with 4.15 compat fix (LP:#1737761) + - Enable zfs build + - [Debian] add icp to zfs-modules.ignore + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc4 + + -- Seth Forshee Mon, 18 Dec 2017 09:27:13 -0600 + +linux (4.15.0-1.2) bionic; urgency=low + + * Disabling zfs does not always disable module checks for the zfs modules + (LP: #1737176) + - [Packaging] disable zfs module checks when zfs is disabled + + * Miscellaneous Ubuntu changes + - [Config] CONFIG_UNWINDER_FRAME_POINTER=y for amd64 + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc3 + + -- Seth Forshee Sun, 10 Dec 2017 22:07:19 -0600 + +linux (4.15.0-0.1) bionic; urgency=low + + * Miscellaneous Ubuntu changes + - ubuntu: vbox -- update to 5.2.2-dfsg-2 + - ubuntu: vbox: build fixes for 4.15 + - disable hio build + - [Config] Update kernel lockdown options to fix build errors + - Disable zfs build + - SAUCE: Import aufs driver + - [Config] Enable AUFS config options + + [ Upstream Kernel Changes ] + + * Rebase to v4.15-rc2 + + -- Seth Forshee Fri, 08 Dec 2017 13:55:42 -0600 + +linux (4.14.0-11.13) bionic; urgency=low + + * linux: 4.14.0-11.13 -proposed tracker (LP: #1736168) + + * CVE-2017-1000405 + - mm, thp: Do not make page table dirty unconditionally in touch_p[mu]d() + + * linux 4.14.0-7.9 ADT test failure with linux 4.14.0-7.9 (LP: #1732463) + - SAUCE: mm: disable vma based swap readahead by default + - SAUCE: mm: fix memory hotplug in ZONE_HIGHMEM + + * Bionic update to v4.14.3 stable release (LP: #1735843) + - s390: fix transactional execution control register handling + - s390/noexec: execute kexec datamover without DAT + - s390/runtime instrumention: fix possible memory corruption + - s390/guarded storage: fix possible memory corruption + - s390/disassembler: add missing end marker for e7 table + - s390/disassembler: increase show_code buffer size + - ACPI / PM: Fix acpi_pm_notifier_lock vs flush_workqueue() deadlock + - ACPI / EC: Fix regression related to triggering source of EC event handling + - cpufreq: schedutil: Reset cached_raw_freq when not in sync with next_freq + - serdev: fix registration of second slave + - sched: Make resched_cpu() unconditional + - lib/mpi: call cond_resched() from mpi_powm() loop + - x86/boot: Fix boot failure when SMP MP-table is based at 0 + - x86/decoder: Add new TEST instruction pattern + - x86/entry/64: Fix entry_SYSCALL_64_after_hwframe() IRQ tracing + - x86/entry/64: Add missing irqflags tracing to native_load_gs_index() + - perf/x86/intel: Hide TSX events when RTM is not supported + - arm64: Implement arch-specific pte_access_permitted() + - ARM: 8722/1: mm: make STRICT_KERNEL_RWX effective for LPAE + - ARM: 8721/1: mm: dump: check hardware RO bit for LPAE + - uapi: fix linux/tls.h userspace compilation error + - uapi: fix linux/rxrpc.h userspace compilation errors + - MIPS: cmpxchg64() and HAVE_VIRT_CPU_ACCOUNTING_GEN don't work for 32-bit SMP + - MIPS: ralink: Fix MT7628 pinmux + - MIPS: ralink: Fix typo in mt7628 pinmux function + - net: mvneta: fix handling of the Tx descriptor counter + - nbd: wait uninterruptible for the dead timeout + - nbd: don't start req until after the dead connection logic + - PM / OPP: Add missing of_node_put(np) + - PCI/ASPM: Account for downstream device's Port Common_Mode_Restore_Time + - PCI/ASPM: Use correct capability pointer to program LTR_L1.2_THRESHOLD + - PCI: hv: Use effective affinity mask + - PCI: Set Cavium ACS capability quirk flags to assert RR/CR/SV/UF + - PCI: Apply Cavium ThunderX ACS quirk to more Root Ports + - ALSA: hda: Add Raven PCI ID + - dm integrity: allow unaligned bv_offset + - dm cache: fix race condition in the writeback mode overwrite_bio + optimisation + - dm crypt: allow unaligned bv_offset + - dm zoned: ignore last smaller runt zone + - dm mpath: remove annoying message of 'blk_get_request() returned -11' + - dm bufio: fix integer overflow when limiting maximum cache size + - ovl: Put upperdentry if ovl_check_origin() fails + - dm: allocate struct mapped_device with kvzalloc + - sched/rt: Simplify the IPI based RT balancing logic + - MIPS: pci: Remove KERN_WARN instance inside the mt7620 driver + - dm: fix race between dm_get_from_kobject() and __dm_destroy() + - dm: discard support requires all targets in a table support discards + - MIPS: Fix odd fp register warnings with MIPS64r2 + - MIPS: Fix MIPS64 FP save/restore on 32-bit kernels + - MIPS: dts: remove bogus bcm96358nb4ser.dtb from dtb-y entry + - MIPS: Fix an n32 core file generation regset support regression + - MIPS: BCM47XX: Fix LED inversion for WRT54GSv1 + - MIPS: math-emu: Fix final emulation phase for certain instructions + - rt2x00usb: mark device removed when get ENOENT usb error + - mm/z3fold.c: use kref to prevent page free/compact race + - autofs: don't fail mount for transient error + - nilfs2: fix race condition that causes file system corruption + - fscrypt: lock mutex before checking for bounce page pool + - eCryptfs: use after free in ecryptfs_release_messaging() + - libceph: don't WARN() if user tries to add invalid key + - bcache: check ca->alloc_thread initialized before wake up it + - fs: guard_bio_eod() needs to consider partitions + - fanotify: fix fsnotify_prepare_user_wait() failure + - isofs: fix timestamps beyond 2027 + - btrfs: change how we decide to commit transactions during flushing + - f2fs: expose some sectors to user in inline data or dentry case + - NFS: Fix typo in nomigration mount option + - NFS: Revert "NFS: Move the flock open mode check into nfs_flock()" + - nfs: Fix ugly referral attributes + - NFS: Avoid RCU usage in tracepoints + - NFS: revalidate "." etc correctly on "open". + - nfsd: deal with revoked delegations appropriately + - rtlwifi: rtl8192ee: Fix memory leak when loading firmware + - rtlwifi: fix uninitialized rtlhal->last_suspend_sec time + - iwlwifi: fix firmware names for 9000 and A000 series hw + - md: fix deadlock error in recent patch. + - md: don't check MD_SB_CHANGE_CLEAN in md_allow_write + - Bluetooth: btqcomsmd: Add support for BD address setup + - md/bitmap: revert a patch + - fsnotify: clean up fsnotify_prepare/finish_user_wait() + - fsnotify: pin both inode and vfsmount mark + - fsnotify: fix pinning group in fsnotify_prepare_user_wait() + - ata: fixes kernel crash while tracing ata_eh_link_autopsy event + - ext4: fix interaction between i_size, fallocate, and delalloc after a crash + - ext4: prevent data corruption with inline data + DAX + - ext4: prevent data corruption with journaling + DAX + - ALSA: pcm: update tstamp only if audio_tstamp changed + - ALSA: usb-audio: Add sanity checks to FE parser + - ALSA: usb-audio: Fix potential out-of-bound access at parsing SU + - ALSA: usb-audio: Add sanity checks in v2 clock parsers + - ALSA: timer: Remove kernel warning at compat ioctl error paths + - ALSA: hda/realtek - Fix ALC275 no sound issue + - ALSA: hda: Fix too short HDMI/DP chmap reporting + - ALSA: hda - Fix yet remaining issue with vmaster 0dB initialization + - ALSA: hda/realtek - Fix ALC700 family no sound issue + - ASoC: sun8i-codec: Invert Master / Slave condition + - ASoC: sun8i-codec: Fix left and right channels inversion + - ASoC: sun8i-codec: Set the BCLK divider + - mfd: lpc_ich: Avoton/Rangeley uses SPI_BYT method + - fix a page leak in vhost_scsi_iov_to_sgl() error recovery + - 9p: Fix missing commas in mount options + - fs/9p: Compare qid.path in v9fs_test_inode + - net/9p: Switch to wait_event_killable() + - scsi: qla2xxx: Suppress a kernel complaint in qla_init_base_qpair() + - scsi: sd_zbc: Fix sd_zbc_read_zoned_characteristics() + - scsi: lpfc: fix pci hot plug crash in timer management routines + - scsi: lpfc: fix pci hot plug crash in list_add call + - scsi: lpfc: Fix crash receiving ELS while detaching driver + - scsi: lpfc: Fix FCP hba_wqidx assignment + - scsi: lpfc: Fix oops if nvmet_fc_register_targetport fails + - iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref + - iscsi-target: Fix non-immediate TMR reference leak + - target: fix null pointer regression in core_tmr_drain_tmr_list + - target: fix buffer offset in core_scsi3_pri_read_full_status + - target: Fix QUEUE_FULL + SCSI task attribute handling + - target: Fix caw_sem leak in transport_generic_request_failure + - target: Fix quiese during transport_write_pending_qf endless loop + - target: Avoid early CMD_T_PRE_EXECUTE failures during ABORT_TASK + - mtd: Avoid probe failures when mtd->dbg.dfs_dir is invalid + - mtd: nand: Export nand_reset() symbol + - mtd: nand: atmel: Actually use the PM ops + - mtd: nand: omap2: Fix subpage write + - mtd: nand: Fix writing mtdoops to nand flash. + - mtd: nand: mtk: fix infinite ECC decode IRQ issue + - mailbox: bcm-flexrm-mailbox: Fix FlexRM ring flush sequence + - p54: don't unregister leds when they are not initialized + - block: Fix a race between blk_cleanup_queue() and timeout handling + - raid1: prevent freeze_array/wait_all_barriers deadlock + - genirq: Track whether the trigger type has been set + - irqchip/gic-v3: Fix ppi-partitions lookup + - lockd: double unregister of inetaddr notifiers + - KVM: PPC: Book3S HV: Don't call real-mode XICS hypercall handlers if not + enabled + - KVM: nVMX: set IDTR and GDTR limits when loading L1 host state + - KVM: SVM: obey guest PAT + - kvm: vmx: Reinstate support for CPUs without virtual NMI + - dax: fix PMD faults on zero-length files + - dax: fix general protection fault in dax_alloc_inode + - SUNRPC: Fix tracepoint storage issues with svc_recv and svc_rqst_status + - clk: ti: dra7-atl-clock: fix child-node lookups + - libnvdimm, dimm: clear 'locked' status on successful DIMM enable + - libnvdimm, pfn: make 'resource' attribute only readable by root + - libnvdimm, namespace: fix label initialization to use valid seq numbers + - libnvdimm, region : make 'resource' attribute only readable by root + - libnvdimm, namespace: make 'resource' attribute only readable by root + - svcrdma: Preserve CB send buffer across retransmits + - IB/srpt: Do not accept invalid initiator port names + - IB/cm: Fix memory corruption in handling CM request + - IB/hfi1: Fix incorrect available receive user context count + - IB/srp: Avoid that a cable pull can trigger a kernel crash + - IB/core: Avoid crash on pkey enforcement failed in received MADs + - IB/core: Only maintain real QPs in the security lists + - NFC: fix device-allocation error return + - spi-nor: intel-spi: Fix broken software sequencing codes + - i40e: Use smp_rmb rather than read_barrier_depends + - igb: Use smp_rmb rather than read_barrier_depends + - igbvf: Use smp_rmb rather than read_barrier_depends + - ixgbevf: Use smp_rmb rather than read_barrier_depends + - i40evf: Use smp_rmb rather than read_barrier_depends + - fm10k: Use smp_rmb rather than read_barrier_depends + - ixgbe: Fix skb list corruption on Power systems + - parisc: Fix validity check of pointer size argument in new CAS + implementation + - powerpc: Fix boot on BOOK3S_32 with CONFIG_STRICT_KERNEL_RWX + - powerpc/mm/radix: Fix crashes on Power9 DD1 with radix MMU and STRICT_RWX + - powerpc/perf/imc: Use cpu_to_node() not topology_physical_package_id() + - powerpc/signal: Properly handle return value from uprobe_deny_signal() + - powerpc/64s: Fix masking of SRR1 bits on instruction fault + - powerpc/64s/radix: Fix 128TB-512TB virtual address boundary case allocation + - powerpc/64s/hash: Fix 512T hint detection to use >= 128T + - powerpc/64s/hash: Fix 128TB-512TB virtual address boundary case allocation + - powerpc/64s/hash: Fix fork() with 512TB process address space + - powerpc/64s/hash: Allow MAP_FIXED allocations to cross 128TB boundary + - media: Don't do DMA on stack for firmware upload in the AS102 driver + - media: rc: check for integer overflow + - media: rc: nec decoder should not send both repeat and keycode + - cx231xx-cards: fix NULL-deref on missing association descriptor + - media: v4l2-ctrl: Fix flags field on Control events + - media: venus: fix wrong size on dma_free + - media: venus: venc: fix bytesused v4l2_plane field + - media: venus: reimplement decoder stop command + - ARM64: dts: meson-gxl: Add alternate ARM Trusted Firmware reserved memory + zone + - iwlwifi: fix wrong struct for a000 device + - iwlwifi: add a new a000 device + - iwlwifi: pcie: sort IDs for the 9000 series for easier comparisons + - iwlwifi: add new cards for a000 series + - iwlwifi: add new cards for 8265 series + - iwlwifi: add new cards for 8260 series + - iwlwifi: fix PCI IDs and configuration mapping for 9000 series + - iwlwifi: mvm: support version 7 of the SCAN_REQ_UMAC FW command + - e1000e: Fix error path in link detection + - e1000e: Fix return value test + - e1000e: Separate signaling for link check/link up + - e1000e: Avoid receiver overrun interrupt bursts + - e1000e: fix buffer overrun while the I219 is processing DMA transactions + - Linux 4.14.3 + + * Miscellaneous Ubuntu changes + - SAUCE: s390/topology: don't inline cpu_to_node + - SAUCE: (noup) Update spl to 0.7.3-1ubuntu1, zfs to 0.7.3-1ubuntu1 + + -- Seth Forshee Mon, 04 Dec 2017 09:08:07 -0600 + +linux (4.14.0-10.12) bionic; urgency=low + + * linux: 4.14.0-10.12 -proposed tracker (LP: #1734901) + + * Miscellaneous Ubuntu changes + - SAUCE: Enable the ACPI kernel debugger and acpidbg tool + - [Packaging] Include arch/arm64/kernel/ftrace-mod.o in headers package + + -- Seth Forshee Tue, 28 Nov 2017 08:46:49 -0600 + +linux (4.14.0-9.11) bionic; urgency=low + + * linux: 4.14.0-9.11 -proposed tracker (LP: #1734728) + + * Miscellaneous Ubuntu changes + - Revert "UBUNTU: SAUCE: (noup) Update spl to 0.7.3-1ubuntu1, zfs to + 0.7.3-1ubuntu1" + + -- Seth Forshee Mon, 27 Nov 2017 12:44:48 -0600 + +linux (4.14.0-8.10) bionic; urgency=low + + * linux: 4.14.0-8.10 -proposed tracker (LP: #1734695) + + * Bionic update to v4.14.2 stable release (LP: #1734694) + - bio: ensure __bio_clone_fast copies bi_partno + - af_netlink: ensure that NLMSG_DONE never fails in dumps + - vxlan: fix the issue that neigh proxy blocks all icmpv6 packets + - net: cdc_ncm: GetNtbFormat endian fix + - fealnx: Fix building error on MIPS + - net/sctp: Always set scope_id in sctp_inet6_skb_msgname + - ima: do not update security.ima if appraisal status is not INTEGRITY_PASS + - serial: omap: Fix EFR write on RTS deassertion + - serial: 8250_fintek: Fix finding base_port with activated SuperIO + - tpm-dev-common: Reject too short writes + - rcu: Fix up pending cbs check in rcu_prepare_for_idle + - mm/pagewalk.c: report holes in hugetlb ranges + - ocfs2: fix cluster hang after a node dies + - ocfs2: should wait dio before inode lock in ocfs2_setattr() + - ipmi: fix unsigned long underflow + - mm/page_alloc.c: broken deferred calculation + - mm/page_ext.c: check if page_ext is not prepared + - coda: fix 'kernel memory exposure attempt' in fsync + - ipmi: Prefer ACPI system interfaces over SMBIOS ones + - Linux 4.14.2 + + * Bionic update to v4.14.1 stable release (LP: #1734693) + - EDAC, sb_edac: Don't create a second memory controller if HA1 is not present + - dmaengine: dmatest: warn user when dma test times out + - media: imon: Fix null-ptr-deref in imon_probe + - media: dib0700: fix invalid dvb_detach argument + - crypto: dh - Fix double free of ctx->p + - crypto: dh - Don't permit 'p' to be 0 + - crypto: dh - Don't permit 'key' or 'g' size longer than 'p' + - crypto: brcm - Explicity ACK mailbox message + - USB: early: Use new USB product ID and strings for DbC device + - USB: usbfs: compute urb->actual_length for isochronous + - USB: Add delay-init quirk for Corsair K70 LUX keyboards + - usb: gadget: f_fs: Fix use-after-free in ffs_free_inst + - USB: serial: metro-usb: stop I/O after failed open + - USB: serial: Change DbC debug device binding ID + - USB: serial: qcserial: add pid/vid for Sierra Wireless EM7355 fw update + - USB: serial: garmin_gps: fix I/O after failed probe and remove + - USB: serial: garmin_gps: fix memory leak on probe errors + - selftests/x86/protection_keys: Fix syscall NR redefinition warnings + - x86/MCE/AMD: Always give panic severity for UC errors in kernel context + - platform/x86: peaq-wmi: Add DMI check before binding to the WMI interface + - platform/x86: peaq_wmi: Fix missing terminating entry for peaq_dmi_table + - HID: cp2112: add HIDRAW dependency + - HID: wacom: generic: Recognize WACOM_HID_WD_PEN as a type of pen collection + - rpmsg: glink: Add missing MODULE_LICENSE + - staging: wilc1000: Fix bssid buffer offset in Txq + - staging: sm750fb: Fix parameter mistake in poke32 + - staging: ccree: fix 64 bit scatter/gather DMA ops + - staging: greybus: spilib: fix use-after-free after deregistration + - staging: rtl8188eu: Revert 4 commits breaking ARP + - spi: fix use-after-free at controller deregistration + - sparc32: Add cmpxchg64(). + - sparc64: mmu_context: Add missing include files + - sparc64: Fix page table walk for PUD hugepages + - Linux 4.14.1 + + * Set PANIC_TIMEOUT=10 on Power Systems (LP: #1730660) + - [Config]: Set PANIC_TIMEOUT=10 on ppc64el + + * enable CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH easily confuse users + (LP: #1732627) + - [Config] CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=n + + * Miscellaneous Ubuntu changes + - SAUCE: (noup) Update spl to 0.7.3-1ubuntu1, zfs to 0.7.3-1ubuntu1 + + -- Seth Forshee Mon, 27 Nov 2017 07:43:44 -0600 + +linux (4.14.0-7.9) bionic; urgency=low + + * Miscellaneous Ubuntu changes + - SAUCE: apparmor: add base infastructure for socket mediation + - SAUCE: apparmor: af_unix mediation + - SAUCE: LSM stacking: procfs: add smack subdir to attrs + - SAUCE: LSM stacking: LSM: manage credential security blobs + - SAUCE: LSM stacking: LSM: Manage file security blobs + - SAUCE: LSM stacking: LSM: manage task security blobs + - SAUCE: LSM stacking: LSM: Infrastructure management of the remaining blobs + - SAUCE: LSM stacking: LSM: general but not extreme module stacking + - SAUCE: LSM stacking: LSM: Complete task_alloc hook + - SAUCE: LSM stacking: fixup procsfs: add smack subdir to attrs + - SAUCE: LSM stacking: fixup initialize task->security + - SAUCE: LSM stacking: fixup: alloc_task_ctx is dead code + - SAUCE: LSM stacking: add support for stacking getpeersec_stream + - SAUCE: LSM stacking: add stacking support to apparmor network hooks + - SAUCE: LSM stacking: fixup apparmor stacking enablement + - SAUCE: LSM stacking: fixup stacking kconfig + - SAUCE: LSM stacking: allow selecting multiple LSMs using kernel boot params + - SAUCE: LSM stacking: provide prctl interface for setting context + - SAUCE: LSM stacking: inherit current display LSM + - SAUCE: LSM stacking: keep an index for each registered LSM + - SAUCE: LSM stacking: verify display LSM + - SAUCE: LSM stacking: provide a way to specify the default display lsm + - SAUCE: LSM stacking: make sure LSM blob align on 64 bit boundaries + - SAUCE: LSM stacking: add /proc//attr/display_lsm + - SAUCE: LSM stacking: add Kconfig to set default display LSM + - SAUCE: LSM stacking: add configs for LSM stacking + - SAUCE: LSM stacking: check for invalid zero sized writes + - [Config] Run updateconfigs after merging LSM stacking + - [Config] CONFIG_AMD_MEM_ENCRYPT=y + + [ Upstream Kernel Changes ] + + * Rebase to v4.14 + + -- Seth Forshee Mon, 13 Nov 2017 08:12:08 -0600 + +linux (4.14.0-6.8) bionic; urgency=low + + * Miscellaneous Ubuntu changes + - SAUCE: add workarounds to enable ZFS for 4.14 + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc8 + + -- Seth Forshee Mon, 06 Nov 2017 11:39:00 -0600 + +linux (4.14.0-5.7) bionic; urgency=low + + * Miscellaneous Ubuntu changes + - [Debian] Fix invocation of dh_prep for dbgsym packages + + -- Seth Forshee Tue, 31 Oct 2017 07:07:23 -0500 + +linux (4.14.0-4.5) bionic; urgency=low + + * Miscellaneous Ubuntu changes + - [Packaging] virtualbox -- reduce in kernel module versions + - vbox-update: Fix up KERN_DIR definitions + - ubuntu: vbox -- update to 5.2.0-dfsg-2 + - [Config] CONFIG_AMD_MEM_ENCRYPT=n + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc7 + + -- Seth Forshee Mon, 30 Oct 2017 13:29:20 -0500 + +linux (4.14.0-3.4) artful; urgency=low + + * Touchpad and TrackPoint Dose Not Work on Lenovo X1C6 and X280 (LP: #1723986) + - SAUCE: Input: synaptics-rmi4 - RMI4 can also use SMBUS version 3 + - SAUCE: Input: synaptics - Lenovo X1 Carbon 5 should use SMBUS/RMI + - SAUCE: Input: synaptics - add Intertouch support on X1 Carbon 6th and X280 + + * powerpc/64s: Add workaround for P9 vector CI load issuenext (LP: #1721070) + - powerpc/64s: Add workaround for P9 vector CI load issue + + * Miscellaneous Ubuntu changes + - SAUCE: staging: vboxvideo: Fix reporting invalid suggested-offset-properties + - [Config] CONFIG_DRM_VBOXVIDEO=m + - SAUCE: Import aufs driver + - [Config] Enable aufs + - [Config] Reorder annotations file after enabling aufs + - vbox-update: Disable imported vboxvideo module + - ubuntu: vbox -- update to 5.1.30-dfsg-1 + - Enable vbox + - hio: Use correct sizes when initializing ssd_index_bits* arrays + - hio: Update io stat accounting for 4.14 + - Enable hio + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc5 + * Rebase to v4.14-rc6 + + -- Seth Forshee Mon, 23 Oct 2017 13:53:52 -0500 + +linux (4.14.0-2.3) artful; urgency=low + + * [Bug] USB controller failed to respond on Denverton after loading + intel_th_pci module (LP: #1715833) + - SAUCE: PCI: Disable broken RTIT_BAR of Intel TH + + * CONFIG_DEBUG_FS is not enabled by "make zfcpdump_defconfig" with Ubuntu + 17.10 (kernel 4.13) (LP: #1719290) + - SAUCE: s390: update zfcpdump_defconfig + + * Add installer support for Broadcom BCM573xx network drivers. (LP: #1720466) + - d-i: Add bnxt_en to nic-modules. + + * Miscellaneous Ubuntu changes + - [Config] Update annotations for 4.14-rc2 + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc3 + * Rebase to v4.14-rc4 + + -- Seth Forshee Wed, 11 Oct 2017 16:04:27 -0500 + +linux (4.14.0-1.2) artful; urgency=low + + * [Bug] USB 3.1 Gen2 works as 5Gbps (LP: #1720045) + - xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor + + * Please make linux-libc-dev Provide: aufs-dev (LP: #1716091) + - [Packaging] Add aufs-dev to the Provides: for linux-libc-dev + + * Upgrade to 4.13.0-11.12 in artful amd64 VM breaks display on wayland + (LP: #1718679) + - [Config] CONFIG_DRM_VBOXVIDEO=n + + * ipmmu-vmsa driver breaks arm64 boots (LP: #1718734) + - [Config] Disable CONFIG_IPMMU_VMSA on arm64 + + * autopkgtest profile fails to build on armhf (LP: #1717920) + - [Packaging] autopkgtest -- disable d-i when dropping flavours + + * Miscellaneous Ubuntu changes + - [Config] CONFIG_I2C_XLP9XX=m + - [Packaging] Use SRCPKGNAME rather than hard-coding the source package name + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc2 + + -- Seth Forshee Fri, 29 Sep 2017 09:09:11 -0400 + +linux (4.14.0-0.1) artful; urgency=low + + * Miscellaneous Ubuntu changes + - Disable vbox build + - Disable hio build + - Disable zfs build + + [ Upstream Kernel Changes ] + + * Rebase to v4.14-rc1 + + -- Seth Forshee Tue, 19 Sep 2017 20:22:29 -0500 + +linux (4.13.0-11.12) artful; urgency=low + + * linux: 4.13.0-11.12 -proposed tracker (LP: #1716699) + + * kernel panic -not syncing: Fatal exception: panic_on_oops (LP: #1708399) + - s390/mm: fix local TLB flushing vs. detach of an mm address space + - s390/mm: fix race on mm->context.flush_mm + + * CVE-2017-1000251 + - Bluetooth: Properly check L2CAP config option output buffer length + + -- Seth Forshee Tue, 12 Sep 2017 10:18:38 -0500 + +linux (4.13.0-10.11) artful; urgency=low + + * linux: 4.13.0-10.11 -proposed tracker (LP: #1716287) + + * please add aufs-dkms to the Provides: for the kernel packages (LP: #1716093) + - [Packaging] Add aufs-dkms to the Provides: for kernel packages + + * Artful update to v4.13.1 stable release (LP: #1716284) + - usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard + - USB: serial: option: add support for D-Link DWM-157 C1 + - usb: Add device quirk for Logitech HD Pro Webcam C920-C + - usb:xhci:Fix regression when ATI chipsets detected + - USB: musb: fix external abort on suspend + - ANDROID: binder: add padding to binder_fd_array_object. + - ANDROID: binder: add hwbinder,vndbinder to BINDER_DEVICES. + - USB: core: Avoid race of async_completed() w/ usbdev_release() + - staging/rts5208: fix incorrect shift to extract upper nybble + - staging: ccree: save ciphertext for CTS IV + - staging: fsl-dpaa2/eth: fix off-by-one FD ctrl bitmaks + - iio: adc: ti-ads1015: fix incorrect data rate setting update + - iio: adc: ti-ads1015: fix scale information for ADS1115 + - iio: adc: ti-ads1015: enable conversion when CONFIG_PM is not set + - iio: adc: ti-ads1015: avoid getting stale result after runtime resume + - iio: adc: ti-ads1015: don't return invalid value from buffer setup callbacks + - iio: adc: ti-ads1015: add adequate wait time to get correct conversion + - driver core: bus: Fix a potential double free + - HID: wacom: Do not completely map WACOM_HID_WD_TOUCHRINGSTATUS usage + - binder: free memory on error + - crypto: caam/qi - fix compilation with CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y + - crypto: caam/qi - fix compilation with DEBUG enabled + - thunderbolt: Fix reset response_type + - fpga: altera-hps2fpga: fix multiple init of l3_remap_lock + - intel_th: pci: Add Cannon Lake PCH-H support + - intel_th: pci: Add Cannon Lake PCH-LP support + - ath10k: fix memory leak in rx ring buffer allocation + - drm/vgem: Pin our pages for dmabuf exports + - drm/ttm: Fix accounting error when fail to get pages for pool + - drm/dp/mst: Handle errors from drm_atomic_get_private_obj_state() correctly + - rtlwifi: rtl_pci_probe: Fix fail path of _rtl_pci_find_adapter + - Bluetooth: Add support of 13d3:3494 RTL8723BE device + - iwlwifi: pci: add new PCI ID for 7265D + - dlm: avoid double-free on error path in dlm_device_{register,unregister} + - mwifiex: correct channel stat buffer overflows + - MCB: add support for SC31 to mcb-lpc + - s390/mm: avoid empty zero pages for KVM guests to avoid postcopy hangs + - drm/nouveau/pci/msi: disable MSI on big-endian platforms by default + - drm/nouveau: Fix error handling in nv50_disp_atomic_commit + - workqueue: Fix flag collision + - ahci: don't use MSI for devices with the silly Intel NVMe remapping scheme + - cs5536: add support for IDE controller variant + - scsi: sg: protect against races between mmap() and SG_SET_RESERVED_SIZE + - scsi: sg: recheck MMAP_IO request length with lock held + - of/device: Prevent buffer overflow in of_device_modalias() + - rtlwifi: Fix memory leak when firmware request fails + - rtlwifi: Fix fallback firmware loading + - Linux 4.13.1 + + * Kernel has trouble recognizing Corsair Strafe RGB keyboard (LP: #1678477) + - usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard + + * SRIOV: warning if unload VFs (LP: #1715073) + - PCI: Disable VF decoding before pcibios_sriov_disable() updates resources + + * [Patch] network-i40e:NVM bug fixes (cherrypick from 4.14) (LP: #1715578) + - i40e: avoid NVM acquire deadlock during NVM update + - i40e: point wb_desc at the nvm_wb_desc during i40e_read_nvm_aq + + * [P9,POwer NV] Perf PMU event : pm_br_2path and pm_ld_miss_l1 is counted + twice when perf stat is done (perf:) (LP: #1714571) + - perf vendor events powerpc: Remove duplicate events + + * Unable to install Ubuntu on the NVMe disk under VMD PCI domain + (LP: #1703339) + - [Config] Include vmd in storage-core-modules udeb + + * 17.10 fails to boot on POWER9 DD2.0 with Deep stop states (LP: #1715064) + - powerpc/powernv: Save/Restore additional SPRs for stop4 cpuidle + - powerpc/powernv: Clear PECE1 in LPCR via stop-api only on Hotplug + - SAUCE: powerpc/powernv: Clear LPCR[PECE1] via stop-api only for deep state + offline + + * Miscellaneous Ubuntu changes + - SAUCE: selftests/seccomp: Support glibc 2.26 siginfo_t.h + - Revert "UBUNTU: SAUCE: Import aufs driver" + - SAUCE: Import aufs driver + + -- Seth Forshee Sun, 10 Sep 2017 17:48:59 -0500 + +linux (4.13.0-9.10) artful; urgency=low + + * linux: 4.13.0-9.10 -proposed tracker (LP: #1715145) + + * EDAC sbridge: Failed to register device with error -22. (LP: #1714112) + - [Config] CONFIG_EDAC_GHES=n + + * Miscellaneous Ubuntu changes + - ubuntu: vbox -- update to 5.1.26-dfsg-2 + + [ Upstream Kernel Changes ] + + * Rebase to v4.13 + + -- Seth Forshee Tue, 05 Sep 2017 07:51:19 -0500 + +linux (4.13.0-8.9) artful; urgency=low + + * snapd 2.27.3+17.10 ADT test failure with linux 4.13.0-6.7 (LP: #1713103) + - SAUCE: apparmor: fix apparmorfs DAC access, permissions + + * enable ARCH_SUNXI (and friends) in arm64 kernel .config (LP: #1701137) + - [Config] Enable CONFIG_ARCH_SUNXI and related options for arm64 + + * [Bug] Harrisonville: pnd2_edac always fail to load on B1 stepping + Harrisonville SDP (LP: #1709257) + - EDAC, pnd2: Build in a minimal sideband driver for Apollo Lake + - EDAC, pnd2: Mask off the lower four bits of a BAR + - EDAC, pnd2: Conditionally unhide/hide the P2SB PCI device to read BAR + - EDAC, pnd2: Properly toggle hidden state for P2SB PCI device + - SAUCE: i2c: i801: Restore the presence state of P2SB PCI device after + reading BAR + + * Miscellaneous Ubuntu changes + - Revert "UBUNTU: SAUCE: Import aufs driver" + - SAUCE: Import aufs driver + - SAUCE: selftests/powerpc: Disable some ptrace selftests + - [Config] CONFIG_CRYPTO_DEV_NITROX_CNN55XX=n for s390x + - [Config] CONFIG_I2C_SLAVE=n for amd64, i386, ppc64el + - [Config] Disable CONFIG_MDIO_* options for s390x + - [Config] CONFIG_SCSI_MQ_DEFAULT=n for s390x + - [Config] Update annotations for 4.13 + + -- Seth Forshee Thu, 31 Aug 2017 14:27:09 -0500 + +linux (4.13.0-7.8) artful; urgency=low + + * linux 4.12.0-11.12 ADT test failure with linux 4.12.0-11.12 (LP: #1710904) + - SAUCE: selftests/powerpc: Use snprintf to construct DSCR sysfs interface + paths + + * Miscellaneous Ubuntu changes + - Revert "UBUNTU: SAUCE: seccomp: log actions even when audit is disabled" + + * Miscellaneous upstream changes + - seccomp: Provide matching filter for introspection + - seccomp: Sysctl to display available actions + - seccomp: Operation for checking if an action is available + - seccomp: Sysctl to configure actions that are allowed to be logged + - seccomp: Selftest for detection of filter flag support + - seccomp: Filter flag to log all actions except SECCOMP_RET_ALLOW + - seccomp: Action to log before allowing + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc7 + + -- Seth Forshee Mon, 28 Aug 2017 08:12:24 -0500 + +linux (4.13.0-6.7) artful; urgency=low + + * HID: multitouch: Support ALPS PTP Stick and Touchpad devices (LP: #1712481) + - SAUCE: HID: multitouch: Support ALPS PTP stick with pid 0x120A + + * sort ABI files with C.UTF-8 locale (LP: #1712345) + - [Packaging] sort ABI files with C.UTF-8 locale + + * igb: Support using Broadcom 54616 as PHY (LP: #1712024) + - SAUCE: igb: add support for using Broadcom 54616 as PHY + + * RPT related fixes missing in Ubuntu 16.04.3 (LP: #1709220) + - powerpc/mm/radix: Improve _tlbiel_pid to be usable for PWC flushes + - powerpc/mm/radix: Improve TLB/PWC flushes + - powerpc/mm/radix: Avoid flushing the PWC on every flush_tlb_range + + * Linux 4.12 refuses to load self-signed modules under Secure Boot with + properly enrolled keys (LP: #1712168) + - SAUCE: (efi-lockdown) MODSIGN: Fix module signature verification + + * [17.10 FEAT] Enable NVMe driver - kernel (LP: #1708432) + - [Config] CONFIG_BLK_DEV_NVME=m for s390 + + * Artful: 4.12.0-11.12: Boot panic in vlv2_plat_configure_clock+0x3b/0xa0 + (LP: #1711298) + - [Config] CONFIG_INTEL_ATOMISP=n + + * Miscellaneous Ubuntu changes + - SAUCE: apparmor: af_unix mediation + + * Miscellaneous upstream changes + - apparmor: Fix shadowed local variable in unpack_trans_table() + - apparmor: Fix logical error in verify_header() + - apparmor: Fix an error code in aafs_create() + - apparmor: Redundant condition: prev_ns. in [label.c:1498] + - apparmor: add the ability to mediate signals + - apparmor: add mount mediation + - apparmor: cleanup conditional check for label in label_print + - apparmor: add support for absolute root view based labels + - apparmor: make policy_unpack able to audit different info messages + - apparmor: add more debug asserts to apparmorfs + - apparmor: add base infastructure for socket mediation + - apparmor: move new_null_profile to after profile lookup fns() + - apparmor: fix race condition in null profile creation + - apparmor: ensure unconfined profiles have dfas initialized + - apparmor: fix incorrect type assignment when freeing proxies + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc6 + + -- Seth Forshee Wed, 23 Aug 2017 08:10:38 -0500 + +linux (4.13.0-5.6) artful; urgency=low + + * Ubuntu17.10 - perf: Update Power9 PMU event JSON files (LP: #1708630) + - perf pmu-events: Support additional POWER8+ PVR in mapfile + - perf vendor events: Add POWER9 PMU events + - perf vendor events: Add POWER9 PVRs to mapfile + - SAUCE: perf vendor events powerpc: remove suffix in mapfile + - SAUCE: perf vendor events powerpc: Update POWER9 events + + * Disable CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE (LP: #1709171) + - [Config] CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=n for ppc64el + + * Please only recommend or suggest initramfs-tools | linux-initramfs-tool for + kernels able to boot without initramfs (LP: #1700972) + - [Debian] Don't depend on initramfs-tools + + * Miscellaneous Ubuntu changes + - SAUCE: Import aufs driver + - SAUCE: aufs -- Add missing argument to loop_switch() call + - [Config] Enable aufs + - SAUCE: (noup) Update spl to 0.6.5.11-ubuntu1, zfs to 0.6.5.11-1ubuntu3 + - Enable zfs build + - SAUCE: powerpc: Always initialize input array when calling epapr_hypercall() + - [Packaging] switch up to debhelper 9 + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc5 + + -- Seth Forshee Tue, 15 Aug 2017 09:24:16 -0500 + +linux (4.13.0-4.5) artful; urgency=low + + * Lenovo Yoga 910 Sensors (LP: #1708120) + - SAUCE: (no-up) HID: Add quirk for Lenovo Yoga 910 with ITE Chips + + * Unable to install Ubuntu on the NVMe disk under VMD PCI domain + (LP: #1703339) + - [Config] Add vmd driver to generic inclusion list + + * Set CONFIG_SATA_HIGHBANK=y on armhf (LP: #1703430) + - [Config] CONFIG_SATA_HIGHBANK=y + + * Miscellaneous Ubuntu changes + - ubuntu: vbox -- update to 5.1.26-dfsg-1 + - SAUCE: hio: Build fixes for 4.13 + - Enable hio build + - SAUCE: (noup) Update spl to 0.6.5.11-1, zfs to 0.6.5.11-1ubuntu1 + - [debian] use all rather than amd64 dkms debs for sync + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc4 + + -- Seth Forshee Tue, 08 Aug 2017 11:31:48 -0500 + +linux (4.13.0-3.4) artful; urgency=low + + * Adt tests of src:linux time out often on armhf lxc containers (LP: #1705495) + - [Packaging] tests -- reduce rebuild test to one flavour + - [Packaging] tests -- reduce rebuild test to one flavour -- use filter + + * snapd 2.26.8+17.10 ADT test failure with linux 4.12.0-6.7 (LP: #1704158) + - SAUCE: virtio_net: Revert mergeable buffer handling rework + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc3 + + -- Seth Forshee Mon, 31 Jul 2017 10:08:16 -0500 + +linux (4.13.0-2.3) artful; urgency=low + + * Change CONFIG_IBMVETH to module (LP: #1704479) + - [Config] CONFIG_IBMVETH=m + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc2 + + -- Seth Forshee Mon, 24 Jul 2017 13:58:08 -0500 + +linux (4.13.0-1.2) artful; urgency=low + + * Miscellaneous Ubuntu changes + - [Debian] Support sphinx-based kernel documentation + + -- Seth Forshee Thu, 20 Jul 2017 09:18:33 -0500 + +linux (4.13.0-0.1) artful; urgency=low + + * Miscellaneous Ubuntu changes + - Disable hio + - Disable zfs build + - ubuntu: vbox -- update to 5.1.24-dfsg-1 + + [ Upstream Kernel Changes ] + + * Rebase to v4.13-rc1 + + -- Seth Forshee Wed, 19 Jul 2017 15:09:31 -0500 + +linux (4.12.0-7.8) artful; urgency=low + + * ThunderX: soft lockup on 4.8+ kernels when running qemu-efi with vhost=on + (LP: #1673564) + - arm64: Add a facility to turn an ESR syndrome into a sysreg encoding + - KVM: arm/arm64: vgic-v3: Add accessors for the ICH_APxRn_EL2 registers + - KVM: arm64: Make kvm_condition_valid32() accessible from EL2 + - KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at EL2 + - KVM: arm64: vgic-v3: Add ICV_BPR1_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_IGRPEN1_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_IAR1_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_EOIR1_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_AP1Rn_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_HPPIR1_EL1 handler + - KVM: arm64: vgic-v3: Enable trapping of Group-1 system registers + - KVM: arm64: Enable GICv3 Group-1 sysreg trapping via command-line + - KVM: arm64: vgic-v3: Add ICV_BPR0_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_IGNREN0_EL1 handler + - KVM: arm64: vgic-v3: Add misc Group-0 handlers + - KVM: arm64: vgic-v3: Enable trapping of Group-0 system registers + - KVM: arm64: Enable GICv3 Group-0 sysreg trapping via command-line + - arm64: Add MIDR values for Cavium cn83XX SoCs + - arm64: Add workaround for Cavium Thunder erratum 30115 + - KVM: arm64: vgic-v3: Add ICV_DIR_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_CTLR_EL1 handler + - KVM: arm64: vgic-v3: Add ICV_PMR_EL1 handler + - KVM: arm64: Enable GICv3 common sysreg trapping via command-line + - KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped + - KVM: arm64: Log an error if trapping a read-from-write-only GICv3 access + - KVM: arm64: Log an error if trapping a write-to-read-only GICv3 access + + * hns: under heavy load, NIC may fail and require reboot (LP: #1704146) + - net: hns: Bugfix for Tx timeout handling in hns driver + + * New ACPI identifiers for ThunderX SMMU (LP: #1703437) + - iommu/arm-smmu: Plumb in new ACPI identifiers + + * Transparent hugepages should default to enabled=madvise (LP: #1703742) + - SAUCE: use CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y as default + + * Artful update to v4.12.1 stable release (LP: #1703858) + - driver core: platform: fix race condition with driver_override + - RDMA/uverbs: Check port number supplied by user verbs cmds + - usb: dwc3: replace %p with %pK + - USB: serial: cp210x: add ID for CEL EM3588 USB ZigBee stick + - usb: usbip: set buffer pointers to NULL after free + - Add USB quirk for HVR-950q to avoid intermittent device resets + - usb: Fix typo in the definition of Endpoint[out]Request + - USB: core: fix device node leak + - USB: serial: option: add two Longcheer device ids + - USB: serial: qcserial: new Sierra Wireless EM7305 device ID + - xhci: Limit USB2 port wake support for AMD Promontory hosts + - gfs2: Fix glock rhashtable rcu bug + - Add "shutdown" to "struct class". + - tpm: Issue a TPM2_Shutdown for TPM2 devices. + - tpm: fix a kernel memory leak in tpm-sysfs.c + - powerpc/powernv: Fix CPU_HOTPLUG=n idle.c compile error + - x86/uaccess: Optimize copy_user_enhanced_fast_string() for short strings + - sched/fair, cpumask: Export for_each_cpu_wrap() + - sched/core: Implement new approach to scale select_idle_cpu() + - sched/numa: Use down_read_trylock() for the mmap_sem + - sched/numa: Override part of migrate_degrades_locality() when idle balancing + - sched/fair: Simplify wake_affine() for the single socket case + - sched/numa: Implement NUMA node level wake_affine() + - sched/fair: Remove effective_load() + - sched/numa: Hide numa_wake_affine() from UP build + - xen: avoid deadlock in xenbus driver + - crypto: drbg - Fixes panic in wait_for_completion call + - Linux 4.12.1 + + * cxlflash update request in the Xenial SRU stream (LP: #1702521) + - scsi: cxlflash: Combine the send queue locks + - scsi: cxlflash: Update cxlflash_afu_sync() to return errno + - scsi: cxlflash: Reset hardware queue context via specified register + - scsi: cxlflash: Schedule asynchronous reset of the host + - scsi: cxlflash: Handle AFU sync failures + - scsi: cxlflash: Track pending scsi commands in each hardware queue + - scsi: cxlflash: Flush pending commands in cleanup path + - scsi: cxlflash: Add scsi command abort handler + - scsi: cxlflash: Create character device to provide host management interface + - scsi: cxlflash: Separate AFU internal command handling from AFU sync + specifics + - scsi: cxlflash: Introduce host ioctl support + - scsi: cxlflash: Refactor AFU capability checking + - scsi: cxlflash: Support LUN provisioning + - scsi: cxlflash: Support AFU debug + - scsi: cxlflash: Support WS16 unmap + - scsi: cxlflash: Remove zeroing of private command data + - scsi: cxlflash: Update TMF command processing + - scsi: cxlflash: Avoid double free of character device + - scsi: cxlflash: Update send_tmf() parameters + - scsi: cxlflash: Update debug prints in reset handlers + + * make snap-pkg support (LP: #1700747) + - make snap-pkg support + + * Quirk for non-compliant PCI bridge on HiSilicon D05 board (LP: #1698706) + - SAUCE: PCI: Support hibmc VGA cards behind a misbehaving HiSilicon bridge + + * arm64: fix crash reading /proc/kcore (LP: #1702749) + - fs/proc: kcore: use kcore_list type to check for vmalloc/module address + - arm64: mm: select CONFIG_ARCH_PROC_KCORE_TEXT + + * Opal and POWER9 DD2 (LP: #1702159) + - SAUCE: powerpc/powernv: Tell OPAL about our MMU mode on POWER9 + + * Data corruption with hio driver (LP: #1701316) + - SAUCE: hio: Fix incorrect use of enum req_opf values + + * Miscellaneous Ubuntu changes + - SAUCE: (noup) Update spl to 0.6.5.10-1, zfs to 0.6.5.10-1ubuntu2 + - snapcraft.yaml: Sync with xenial + - [Config] CONFIG_CAVIUM_ERRATUM_30115=y + + * Miscellaneous upstream changes + - Revert "UBUNTU: SAUCE: (efi-lockdown) efi: Add sysctls for secureboot and + MokSBState" + + -- Seth Forshee Fri, 14 Jul 2017 15:25:41 -0500 + +linux (4.12.0-6.7) artful; urgency=low + + * update ENA driver to 1.2.0k from net-next (LP: #1701575) + - net: ena: change return value for unsupported features unsupported return + value + - net: ena: add hardware hints capability to the driver + - net: ena: change sizeof() argument to be the type pointer + - net: ena: add reset reason for each device FLR + - net: ena: add support for out of order rx buffers refill + - net: ena: allow the driver to work with small number of msix vectors + - net: ena: use napi_schedule_irqoff when possible + - net: ena: separate skb allocation to dedicated function + - net: ena: use lower_32_bits()/upper_32_bits() to split dma address + - net: ena: update driver's rx drop statistics + - net: ena: update ena driver to version 1.2.0 + + * APST gets enabled against explicit kernel option (LP: #1699004) + - nvme: explicitly disable APST on quirked devices + + * Miscellaneous Ubuntu changes + - SAUCE: hio: Update to Huawei ES3000_V2 (2.1.0.40) + - SAUCE: hio updates for 4.12 + - SAUCE: Enable hio build + + -- Seth Forshee Wed, 05 Jul 2017 14:23:20 -0500 + +linux (4.12.0-5.6) artful; urgency=low + + * ERAT invalidate on context switch removal (LP: #1700819) + - powerpc: Only do ERAT invalidate on radix context switch on P9 DD1 + + * powerpc: Invalidate ERAT on powersave wakeup for POWER9 (LP: #1700521) + - SAUCE: powerpc: Invalidate ERAT on powersave wakeup for POWER9 + + * Miscellaneous Ubuntu changes + - d-i: Move qcom-emac from arm64 to shared nic-modules + + [ Upstream Kernel Changes ] + + * Rebase to v4.12 + + -- Seth Forshee Mon, 03 Jul 2017 07:52:02 -0500 + +linux (4.12.0-4.5) artful; urgency=low + + * aacraid driver may return uninitialized stack data to userspace + (LP: #1700077) + - SAUCE: scsi: aacraid: Don't copy uninitialized stack memory to userspace + + * KILLER1435-S[0489:e0a2] BT cannot search BT 4.0 device (LP: #1699651) + - Bluetooth: btusb: Add support for 0489:e0a2 QCA_ROME device + + * AACRAID for power9 platform (LP: #1689980) + - scsi: aacraid: Remove __GFP_DMA for raw srb memory + - scsi: aacraid: Fix DMAR issues with iommu=pt + - scsi: aacraid: Added 32 and 64 queue depth for arc natives + - scsi: aacraid: Set correct Queue Depth for HBA1000 RAW disks + - scsi: aacraid: Remove reset support from check_health + - scsi: aacraid: Change wait time for fib completion + - scsi: aacraid: Log count info of scsi cmds before reset + - scsi: aacraid: Print ctrl status before eh reset + - scsi: aacraid: Using single reset mask for IOP reset + - scsi: aacraid: Rework IOP reset + - scsi: aacraid: Add periodic checks to see IOP reset status + - scsi: aacraid: Rework SOFT reset code + - scsi: aacraid: Rework aac_src_restart + - scsi: aacraid: Use correct function to get ctrl health + - scsi: aacraid: Make sure ioctl returns on controller reset + - scsi: aacraid: Enable ctrl reset for both hba and arc + - scsi: aacraid: Add reset debugging statements + - scsi: aacraid: Remove reference to Series-9 + - scsi: aacraid: Update driver version to 50834 + + * hibmc driver does not include "pci:" prefix in bus ID (LP: #1698700) + - SAUCE: drm: hibmc: Use set_busid function from drm core + + * HiSilicon D05: installer doesn't appear on VGA (LP: #1698954) + - d-i: Add hibmc-drm to kernel-image udeb + + * Fix /proc/cpuinfo revision for POWER9 DD2 (LP: #1698844) + - SAUCE: powerpc: Fix /proc/cpuinfo revision for POWER9 DD2 + + * Miscellaneous Ubuntu changes + - [Config] CONFIG_SATA_MV=n and CONFIG_GENERIC_PHY=n for s390x + - [Config] CONFIG_ATA=n for s390x + - [Config] Update annotations for 4.12 + + [ Upstream Kernel Changes ] + + * Rebase to v4.12-rc7 + + -- Seth Forshee Mon, 26 Jun 2017 11:27:29 -0500 + +linux (4.12.0-3.4) artful; urgency=low + + * Miscellaneous upstream changes + - ufs: fix the logics for tail relocation + + [ Upstream Kernel Changes ] + + * Rebase to v4.12-rc6 + + -- Seth Forshee Mon, 19 Jun 2017 14:50:39 -0500 + +linux (4.12.0-2.3) artful; urgency=low + + * CVE-2014-9900 + - SAUCE: (no-up) net: Zeroing the structure ethtool_wolinfo in + ethtool_get_wol() + + * System doesn't boot properly on Gigabyte AM4 motherboards (AMD Ryzen) + (LP: #1671360) + - pinctrl/amd: Use regular interrupt instead of chained + + * extend-diff-ignore should use exact matches (LP: #1693504) + - [Packaging] exact extend-diff-ignore matches + + * Miscellaneous Ubuntu changes + - SAUCE: efi: Don't print secure boot state from the efi stub + - ubuntu: vbox -- Update to 5.1.22-dfsg-1 + - SAUCE: vbox fixes for 4.12 + - Re-enable virtualbox build + - [Config] CONFIG_ORANGEFS_FS=m + - SAUCE: (noup) Update spl to 0.6.5.9-1ubuntu2, zfs to 0.6.5.9-5ubuntu7 + - Enable zfs build + + [ Upstream Kernel Changes ] + + * Rebase to v4.12-rc4 + * Rebase to v4.12-rc5 + + -- Seth Forshee Sun, 11 Jun 2017 22:25:13 -0500 + +linux (4.12.0-1.2) artful; urgency=low + + * Enable Matrox driver for Ubuntu 16.04.3 (LP: #1693337) + - [Config] Enable CONFIG_DRM_MGAG200 as module + + * Support low-pin-count devices on Hisilicon SoCs (LP: #1677319) + - [Config] CONFIG_LIBIO=y on arm64 only + - SAUCE: LIBIO: Introduce a generic PIO mapping method + - SAUCE: OF: Add missing I/O range exception for indirect-IO devices + - [Config] CONFIG_HISILICON_LPC=y + - SAUCE: LPC: Support the device-tree LPC host on Hip06/Hip07 + - SAUCE: LIBIO: Support the dynamically logical PIO registration of ACPI host + I/O + - SAUCE: LPC: Add the ACPI LPC support + - SAUCE: PCI: Apply the new generic I/O management on PCI IO hosts + - SAUCE: PCI: Restore codepath for !CONFIG_LIBIO + + * POWER9: Additional patches for TTY and CPU_IDLE (LP: #1674325) + - SAUCE: tty: Fix ldisc crash on reopened tty + + * Miscellaneous Ubuntu changes + - [Debian] Add build-dep on libnuma-dev to enable 'perf bench numa' + - Rebase to v4.12-rc3 + + [ Upstream Kernel Changes ] + + * Rebase to v4.12-rc3 + + -- Seth Forshee Mon, 29 May 2017 20:56:29 -0500 + +linux (4.12.0-0.1) artful; urgency=low + + * please enable CONFIG_ARM64_LSE_ATOMICS (LP: #1691614) + - [Config] CONFIG_ARM64_LSE_ATOMICS=y + + * [Regression] NUMA_BALANCING disabled on arm64 (LP: #1690914) + - [Config] CONFIG_NUMA_BALANCING{,_DEFAULT_ENABLED}=y on arm64 + + * exec'ing a setuid binary from a threaded program sometimes fails to setuid + (LP: #1672819) + - SAUCE: exec: ensure file system accounting in check_unsafe_exec is correct + + * Miscellaneous Ubuntu changes + - Update find-missing-sauce.sh to compare to artful + - Update dropped.txt + - SAUCE: (efi-lockdown) efi: Add EFI_SECURE_BOOT bit + - SAUCE: (efi-lockdown) Add the ability to lock down access to the running + kernel image + - SAUCE: (efi-lockdown) efi: Lock down the kernel if booted in secure boot + mode + - SAUCE: (efi-lockdown) Enforce module signatures if the kernel is locked down + - SAUCE: (efi-lockdown) Restrict /dev/mem and /dev/kmem when the kernel is + locked down + - SAUCE: (efi-lockdown) Add a sysrq option to exit secure boot mode + - SAUCE: (efi-lockdown) kexec: Disable at runtime if the kernel is locked down + - SAUCE: (efi-lockdown) Copy secure_boot flag in boot params across kexec + reboot + - SAUCE: (efi-lockdown) kexec_file: Disable at runtime if securelevel has been + set + - SAUCE: (efi-lockdown) hibernate: Disable when the kernel is locked down + - SAUCE: (efi-lockdown) uswsusp: Disable when the kernel is locked down + - SAUCE: (efi-lockdown) PCI: Lock down BAR access when the kernel is locked + down + - SAUCE: (efi-lockdown) x86: Lock down IO port access when the kernel is + locked down + - SAUCE: (efi-lockdown) x86: Restrict MSR access when the kernel is locked + down + - SAUCE: (efi-lockdown) asus-wmi: Restrict debugfs interface when the kernel + is locked down + - SAUCE: (efi-lockdown) ACPI: Limit access to custom_method when the kernel is + locked down + - SAUCE: (efi-lockdown) acpi: Ignore acpi_rsdp kernel param when the kernel + has been locked down + - SAUCE: (efi-lockdown) acpi: Disable ACPI table override if the kernel is + locked down + - SAUCE: (efi-lockdown) acpi: Disable APEI error injection if the kernel is + locked down + - SAUCE: (efi-lockdown) Enable cold boot attack mitigation + - SAUCE: (efi-lockdown) bpf: Restrict kernel image access functions when the + kernel is locked down + - SAUCE: (efi-lockdown) scsi: Lock down the eata driver + - SAUCE: (efi-lockdown) Prohibit PCMCIA CIS storage when the kernel is locked + down + - SAUCE: (efi-lockdown) Lock down TIOCSSERIAL + - SAUCE: (efi-lockdown) KEYS: Allow unrestricted boot-time addition of keys to + secondary keyring + - SAUCE: (efi-lockdown) efi: Add EFI signature data types + - SAUCE: (efi-lockdown) efi: Add an EFI signature blob parser + - SAUCE: (efi-lockdown) MODSIGN: Import certificates from UEFI Secure Boot + - SAUCE: (efi-lockdown) MODSIGN: Allow the "db" UEFI variable to be suppressed + - SAUCE: (efi-lockdown) efi: Sanitize boot_params in efi stub + - SAUCE: (efi-lockdown) efi: Add secure_boot state and status bit for + MokSBState + - SAUCE: (efi-lockdown) efi: Add sysctls for secureboot and MokSBState + - [Config] Set values for UEFI secure boot lockdown options + - Disable virtualbox build + - Disable hio build + - SAUCE: securityfs: Replace CURRENT_TIME with current_time() + - Disable zfs build + - [Debian] Work out upstream tag for use with gen-auto-reconstruct + - SAUCE: Import aufs driver + - SAUCE: aufs -- Include linux/mm.h in fs/aufs/file.h + - [Config] Enable aufs + - SAUCE: perf callchain: Include errno.h on x86 unconditinally + + [ Upstream Kernel Changes ] + + * Rebase to v4.12-rc2 + + -- Seth Forshee Sun, 21 May 2017 23:44:44 -0500 + +linux (4.11.0-3.8) artful; urgency=low + + [ Seth Forshee ] + + * Release Tracking Bug + - LP: #1690999 + + * apparmor_parser hangs indefinitely when called by multiple threads + (LP: #1645037) + - SAUCE: apparmor: fix lock ordering for mkdir + + * apparmor leaking securityfs pin count (LP: #1660846) + - SAUCE: apparmor: fix leak on securityfs pin count + + * apparmor reference count leak when securityfs_setup_d_inode\ () fails + (LP: #1660845) + - SAUCE: apparmor: fix reference count leak when securityfs_setup_d_inode() + fails + + * apparmor not checking error if security_pin_fs() fails (LP: #1660842) + - SAUCE: apparmor: fix not handling error case when securityfs_pin_fs() fails + + * libvirt profile is blocking global setrlimit despite having no rlimit rule + (LP: #1679704) + - SAUCE: apparmor: fix complain mode failure for rlimit mediation + - apparmor: update auditing of rlimit check to provide capability information + + * apparmor: does not provide a way to detect policy updataes (LP: #1678032) + - SAUCE: apparmor: add policy revision file interface + + * apparmor does not make support of query data visible (LP: #1678023) + - SAUCE: apparmor: add label data availability to the feature set + + * apparmor query interface does not make supported query info available + (LP: #1678030) + - SAUCE: apparmor: add information about the query inteface to the feature set + + * change_profile incorrect when using namespaces with a compound stack + (LP: #1677959) + - SAUCE: apparmor: fix label parse for stacked labels + + * Regression in 4.4.0-65-generic causes very frequent system crashes + (LP: #1669611) + - apparmor: sync of apparmor 3.6+ (17.04) + + * Artful update to 4.11.1 stable release (LP: #1690814) + - dm ioctl: prevent stack leak in dm ioctl call + - drm/sti: fix GDP size to support up to UHD resolution + - power: supply: lp8788: prevent out of bounds array access + - brcmfmac: Ensure pointer correctly set if skb data location changes + - brcmfmac: Make skb header writable before use + - sparc64: fix fault handling in NGbzero.S and GENbzero.S + - refcount: change EXPORT_SYMBOL markings + - net: macb: fix phy interrupt parsing + - tcp: fix access to sk->sk_state in tcp_poll() + - geneve: fix incorrect setting of UDP checksum flag + - bpf: enhance verifier to understand stack pointer arithmetic + - bpf, arm64: fix jit branch offset related to ldimm64 + - tcp: fix wraparound issue in tcp_lp + - net: ipv6: Do not duplicate DAD on link up + - net: usb: qmi_wwan: add Telit ME910 support + - tcp: do not inherit fastopen_req from parent + - ipv4, ipv6: ensure raw socket message is big enough to hold an IP header + - rtnetlink: NUL-terminate IFLA_PHYS_PORT_NAME string + - ipv6: initialize route null entry in addrconf_init() + - ipv6: reorder ip6_route_dev_notifier after ipv6_dev_notf + - tcp: randomize timestamps on syncookies + - bnxt_en: allocate enough space for ->ntp_fltr_bmap + - bpf: don't let ldimm64 leak map addresses on unprivileged + - net: mdio-mux: bcm-iproc: call mdiobus_free() in error path + - f2fs: sanity check segment count + - xen/arm,arm64: fix xen_dma_ops after 815dd18 "Consolidate get_dma_ops..." + - xen: Revert commits da72ff5bfcb0 and 72a9b186292d + - block: get rid of blk_integrity_revalidate() + - Linux 4.11.1 + + * Module signing exclusion for staging drivers does not work properly + (LP: #1690908) + - SAUCE: Fix module signing exclusion in package builds + + * perf: qcom: Add L3 cache PMU driver (LP: #1689856) + - [Config] CONFIG_QCOM_L3_PMU=y + - perf: qcom: Add L3 cache PMU driver + + * No PMU support for ACPI-based arm64 systems (LP: #1689661) + - drivers/perf: arm_pmu: rework per-cpu allocation + - drivers/perf: arm_pmu: manage interrupts per-cpu + - drivers/perf: arm_pmu: split irq request from enable + - drivers/perf: arm_pmu: remove pointless PMU disabling + - drivers/perf: arm_pmu: define armpmu_init_fn + - drivers/perf: arm_pmu: fold init into alloc + - drivers/perf: arm_pmu: factor out pmu registration + - drivers/perf: arm_pmu: simplify cpu_pmu_request_irqs() + - drivers/perf: arm_pmu: handle no platform_device + - drivers/perf: arm_pmu: rename irq request/free functions + - drivers/perf: arm_pmu: split cpu-local irq request/free + - drivers/perf: arm_pmu: move irq request/free into probe + - drivers/perf: arm_pmu: split out platform device probe logic + - arm64: add function to get a cpu's MADT GICC table + - [Config] CONFIG_ARM_PMU_ACPI=y + - drivers/perf: arm_pmu: add ACPI framework + - arm64: pmuv3: handle !PMUv3 when probing + - arm64: pmuv3: use arm_pmu ACPI framework + + * Fix NVLINK2 TCE route (LP: #1690155) + - powerpc/powernv: Fix TCE kill on NVLink2 + + * CVE-2017-0605 + - tracing: Use strlcpy() instead of strcpy() in __trace_find_cmdline() + + * Miscellaneous Ubuntu changes + - [Config] Restore powerpc arch to annotations file + - [Config] Disable runtime testing modules + - [Config] Disable drivers not needed on s390x + - [Config] Update annotations for 4.11 + - [Config] updateconfigs after apparmor updates + + * Miscellaneous upstream changes + - apparmor: use SHASH_DESC_ON_STACK + - apparmor: fix invalid reference to index variable of iterator line 836 + - apparmor: fix parameters so that the permission test is bypassed at boot + - apparmor: Make path_max parameter readonly + - apparmorfs: Combine two function calls into one in aa_fs_seq_raw_abi_show() + - apparmorfs: Use seq_putc() in two functions + - apparmor: provide information about path buffer size at boot + - apparmor: add/use fns to print hash string hex value + + -- Seth Forshee Tue, 16 May 2017 00:39:13 -0500 + +linux (4.11.0-2.7) artful; urgency=low + + * kernel-wedge fails in artful due to leftover squashfs-modules d-i files + (LP: #1688259) + - Remove squashfs-modules files from d-i + - [Config] as squashfs-modules is builtin kernel-image must Provides: it + + * [Zesty] d-i: replace msm_emac with qcom_emac (LP: #1677297) + - Revert "UBUNTU: d-i: initrd needs msm_emac on amberwing platform." + - d-i: initrd needs qcom_emac on amberwing platform. + + * update for V3 kernel bits and improved multiple fan slice support + (LP: #1470091) + - SAUCE: fan: tunnel multiple mapping mode (v3) + + * Miscellaneous Ubuntu changes + - SAUCE: (noup) Update spl to 0.6.5.9-1ubuntu1, zfs to 0.6.5.9-5ubuntu5 + - Enable zfs + - SAUCE: fan: add VXLAN implementation + - SAUCE: (efi-lockdown) efi: Add EFI_SECURE_BOOT bit + - SAUCE: (efi-lockdown) Add the ability to lock down access to the running + kernel image + - SAUCE: (efi-lockdown) efi: Lock down the kernel if booted in secure boot + mode + - SAUCE: (efi-lockdown) Enforce module signatures if the kernel is locked down + - SAUCE: (efi-lockdown) Restrict /dev/mem and /dev/kmem when the kernel is + locked down + - SAUCE: (efi-lockdown) Add a sysrq option to exit secure boot mode + - SAUCE: (efi-lockdown) kexec: Disable at runtime if the kernel is locked down + - SAUCE: (efi-lockdown) Copy secure_boot flag in boot params across kexec + reboot + - SAUCE: (efi-lockdown) kexec_file: Disable at runtime if securelevel has been + set + - SAUCE: (efi-lockdown) hibernate: Disable when the kernel is locked down + - SAUCE: (efi-lockdown) uswsusp: Disable when the kernel is locked down + - SAUCE: (efi-lockdown) PCI: Lock down BAR access when the kernel is locked + down + - SAUCE: (efi-lockdown) x86: Lock down IO port access when the kernel is + locked down + - SAUCE: (efi-lockdown) x86: Restrict MSR access when the kernel is locked + down + - SAUCE: (efi-lockdown) asus-wmi: Restrict debugfs interface when the kernel + is locked down + - SAUCE: (efi-lockdown) ACPI: Limit access to custom_method when the kernel is + locked down + - SAUCE: (efi-lockdown) acpi: Ignore acpi_rsdp kernel param when the kernel + has been locked down + - SAUCE: (efi-lockdown) acpi: Disable ACPI table override if the kernel is + locked down + - SAUCE: (efi-lockdown) acpi: Disable APEI error injection if the kernel is + locked down + - SAUCE: (efi-lockdown) Enable cold boot attack mitigation + - SAUCE: (efi-lockdown) bpf: Restrict kernel image access functions when the + kernel is locked down + - SAUCE: (efi-lockdown) scsi: Lock down the eata driver + - SAUCE: (efi-lockdown) Prohibit PCMCIA CIS storage when the kernel is locked + down + - SAUCE: (efi-lockdown) Lock down TIOCSSERIAL + - SAUCE: (efi-lockdown) Add EFI signature data types + - SAUCE: (efi-lockdown) Add an EFI signature blob parser and key loader. + - SAUCE: (efi-lockdown) KEYS: Add a system blacklist keyring + - SAUCE: (efi-lockdown) MODSIGN: Import certificates from UEFI Secure Boot + - SAUCE: (efi-lockdown) MODSIGN: Support not importing certs from db + - SAUCE: (efi-lockdown) MODSIGN: Don't try secure boot if EFI runtime is + disabled + - SAUCE: (efi-lockdown) efi: Sanitize boot_params in efi stub + - SAUCE: (efi-lockdown) efi: Add secure_boot state and status bit for + MokSBState + - SAUCE: (efi-lockdown) efi: Add sysctls for secureboot and MokSBState + - [Config] Set values for UEFI secure boot lockdown options + - Update dropped.txt + + [ Upstream Kernel Changes ] + + * rebase to v4.11 + + -- Seth Forshee Fri, 05 May 2017 07:43:14 -0500 + +linux (4.11.0-1.6) artful; urgency=low + + * Miscellaneous Ubuntu changes + - [Debian] Use default compression for all packages + - SAUCE: (namespace) block_dev: Support checking inode permissions in + lookup_bdev() + - SAUCE: (namespace) block_dev: Check permissions towards block device inode + when mounting + - SAUCE: (namespace) mtd: Check permissions towards mtd block device inode + when mounting + - SAUCE: (namespace) fs: Allow superblock owner to change ownership of inodes + - SAUCE: (namespace) fs: Don't remove suid for CAP_FSETID for userns root + - SAUCE: (namespace) fs: Allow superblock owner to access do_remount_sb() + - SAUCE: (namespace) capabilities: Allow privileged user in s_user_ns to set + security.* xattrs + - SAUCE: (namespace) fs: Allow CAP_SYS_ADMIN in s_user_ns to freeze and thaw + filesystems + - SAUCE: (namespace) fuse: Add support for pid namespaces + - SAUCE: (namespace) fuse: Support fuse filesystems outside of init_user_ns + - SAUCE: (namespace) fuse: Restrict allow_other to the superblock's namespace + or a descendant + - SAUCE: (namespace) fuse: Allow user namespace mounts + - SAUCE: (namespace) ext4: Add support for unprivileged mounts from user + namespaces + - SAUCE: (namespace) evm: Don't update hmacs in user ns mounts + - SAUCE: (namespace) ext4: Add module parameter to enable user namespace + mounts + - SAUCE: (namespace) block_dev: Forbid unprivileged mounting when device is + opened for writing + + -- Seth Forshee Wed, 26 Apr 2017 10:08:29 -0500 + +linux (4.11.0-0.5) artful; urgency=low + + * [Hyper-V][SAUCE] pci-hyperv: Use only 16 bit integer for PCI domain + (LP: #1684971) + - SAUCE: pci-hyperv: Use only 16 bit integer for PCI domain + + * [Hyper-V] Ubuntu 14.04.2 LTS Generation 2 SCSI Errors on VSS Based Backups + (LP: #1470250) + - SAUCE: Tools: hv: vss: Thaw the filesystem and continue after freeze fails + + * Enable virtual scsi server driver for Power (LP: #1615665) + - SAUCE: Return TCMU-generated sense data to fabric module + + * include/linux/security.h header syntax error with !CONFIG_SECURITYFS + (LP: #1630990) + - SAUCE: (no-up) include/linux/security.h -- fix syntax error with + CONFIG_SECURITYFS=n + + * Miscellaneous Ubuntu changes + - SAUCE: Import aufs driver + - [Config] Enable aufs + - [Debian] Add script to update virtualbox + - ubuntu: vbox -- Update to 5.1.20-dfsg-2 + - Enable vbox + - SAUCE: aufs -- Include linux/mm.h in fs/aufs/file.h + + [ Upstream Kernel Changes ] + + * rebase to v4.11-rc8 + + -- Seth Forshee Tue, 25 Apr 2017 13:42:54 -0500 + +linux (4.11.0-0.4) zesty; urgency=low + + * POWER9: Improve performance on memory management (LP: #1681429) + - SAUCE: powerpc/mm/radix: Don't do page walk cache flush when doing full mm + flush + - SAUCE: powerpc/mm/radix: Remove unnecessary ptesync + + * Miscellaneous Ubuntu changes + - find-missing-sauce.sh + + [ Upstream Kernel Changes ] + + * rebase to v4.11-rc7 + + -- Seth Forshee Tue, 18 Apr 2017 08:19:43 -0500 + +linux (4.11.0-0.3) zesty; urgency=low + + * Disable CONFIG_HVC_UDBG on ppc64el (LP: #1680888) + - [Config] Disable CONFIG_HVC_UDBG on ppc64el + + * smartpqi driver needed in initram disk and installer (LP: #1680156) + - [Config] Add smartpqi to d-i + + * Disable CONFIG_SECURITY_SELINUX_DISABLE (LP: #1680315) + - [Config] CONFIG_SECURITY_SELINUX_DISABLE=n + + * Miscellaneous Ubuntu changes + - [Config] flash-kernel should be a Breaks + - [Config] drop the info directory + - [Config] drop NOTES as obsolete + - [Config] drop changelog.historical as obsolete + - rebase to v4.11-rc6 + + [ Upstream Kernel Changes ] + + * rebase to v4.11-rc6 + + -- Tim Gardner Tue, 11 Apr 2017 07:16:52 -0600 + +linux (4.11.0-0.2) zesty; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to v4.11-rc5 + + -- Tim Gardner Mon, 03 Apr 2017 08:26:07 +0100 + +linux (4.11.0-0.1) zesty; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to v4.11-rc4 + - LP: #1591053 + + -- Tim Gardner Mon, 20 Mar 2017 05:15:32 -0600 + +linux (4.11.0-0.0) zesty; urgency=low + + * dummy entry + + -- Tim Gardner Mon, 20 Mar 2017 05:15:32 -0600 --- linux-aws-4.15.0.orig/debian.master/config/amd64/config.common.amd64 +++ linux-aws-4.15.0/debian.master/config/amd64/config.common.amd64 @@ -0,0 +1,522 @@ +# +# Config options for config.common.amd64 automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +CONFIG_6LOWPAN=m +CONFIG_ABX500_CORE=y +CONFIG_AC97_BUS=m +CONFIG_ACPI_DEBUG=y +CONFIG_ACPI_DEBUGGER=y +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ADFS_FS=m +CONFIG_AFFS_FS=m +CONFIG_AIX_PARTITION=y +CONFIG_ALIM7101_WDT=m +CONFIG_ALTERA_TSE=m +CONFIG_AMD_XGBE_HAVE_ECC=y +CONFIG_AMIGA_PARTITION=y +CONFIG_APPLICOM=m +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_WANTS_THP_SWAP=y +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCNET=m +# CONFIG_ARM_GIC_V3_ITS is not set +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_GENERIC=y +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=y +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BATMAN_ADV=m +CONFIG_BCH=m +CONFIG_BCMA=m +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BE2ISCSI=m +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RSXX=m +CONFIG_BLK_DEV_SKD=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BOUNCE=y +CONFIG_BSD_DISKLABEL=y +CONFIG_C2PORT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +CONFIG_CAN=m +CONFIG_CB710_CORE=m +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CHASH=m +CONFIG_CMDLINE_PARTITION=y +CONFIG_CRAMFS=m +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +CONFIG_DECNET=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DMADEVICES=y +# CONFIG_DMA_CMA is not set +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_VIRTUAL_CHANNELS=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DNET=m +CONFIG_DRM=m +CONFIG_DUMMY_IRQ=m +CONFIG_DW_WATCHDOG=m +CONFIG_ECHO=m +CONFIG_EEPROM_93CX6=m +CONFIG_EFI=y +CONFIG_EFI_CAPSULE_LOADER=m +CONFIG_EFI_DEV_PATH_PARSER=y +CONFIG_EFS_FS=m +# CONFIG_EM_TIMER_STI is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ETHOC=m +# CONFIG_EVM_LOAD_X509 is not set +CONFIG_EXOFS_FS=m +CONFIG_EXTCON=y +CONFIG_F2FS_FS=m +CONFIG_FB=y +CONFIG_FB_BOOT_VESA_SUPPORT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIXED_PHY=y +CONFIG_FMC=m +# CONFIG_FONTS is not set +CONFIG_FRAME_WARN=1024 +CONFIG_FUSION=y +CONFIG_GAMEPORT=m +CONFIG_GENERIC_PHY=y +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_TWL6040=m +# CONFIG_HAVE_AOUT is not set +# CONFIG_HAVE_ARCH_BITREVERSE is not set +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATION=y +CONFIG_HIO=m +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_SHPC=m +CONFIG_HPET=y +CONFIG_HPFS_FS=m +CONFIG_HP_ILO=m +CONFIG_HSI=m +CONFIG_HSR=m +CONFIG_HTC_PASIC3=m +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HWSPINLOCK=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HYPERV_TSCPAGE=y +# CONFIG_HZ_100 is not set +CONFIG_I2C=y +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_SLAVE is not set +CONFIG_I6300ESB_WDT=m +CONFIG_IEEE802154=m +CONFIG_IIO=m +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_NES=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_QIB=m +CONFIG_INPUT=y +CONFIG_IOMMU_IOVA=y +CONFIG_IPACK_BUS=m +CONFIG_IPMI_HANDLER=m +CONFIG_IPX=m +# CONFIG_IP_DCCP_CCID3 is not set +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_ISA_BUS_API=y +CONFIG_JFS_FS=m +CONFIG_JME=m +CONFIG_JUMP_LABEL=y +CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y +CONFIG_KARMA_PARTITION=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_XZ is not set +CONFIG_KVM=m +CONFIG_LAPB=m +CONFIG_LDM_PARTITION=y +CONFIG_LIBNVDIMM=y +CONFIG_LLC2=m +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y +CONFIG_LOCK_DOWN_KERNEL=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MAC_PARTITION=y +CONFIG_MAILBOX=y +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MCB=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MDIO_THUNDER=m +CONFIG_MD_MULTIPATH=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_MEMSTICK=m +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_MFD_CORE=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +# CONFIG_MFD_TMIO is not set +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=m +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MTD=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CMDLINE_PARTS=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set +CONFIG_NCP_FS=m +CONFIG_NET_CADENCE=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFP=m +CONFIG_NODES_SHIFT=10 +CONFIG_NOP_USB_XCEIV=m +CONFIG_NOZOMI=m +CONFIG_NR_CPUS=8192 +CONFIG_NTB=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +# CONFIG_NUMA_EMU is not set +CONFIG_NVMEM=y +CONFIG_N_GSM=m +# CONFIG_OF is not set +CONFIG_OMFS_FS=m +CONFIG_OSF_PARTITION=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +# CONFIG_PAGE_EXTENSION is not set +CONFIG_PANIC_TIMEOUT=0 +CONFIG_PARAVIRT=y +CONFIG_PARPORT=m +CONFIG_PATA_SIS=y +CONFIG_PC104=y +CONFIG_PCCARD=m +CONFIG_PCIEPORTBUS=y +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PCMCIA=m +CONFIG_PGTABLE_LEVELS=4 +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_ALIGN=0x200000 +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PHY_EXYNOS5250_USB2 is not set +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PINCTRL=y +CONFIG_PINCTRL_CHERRYVIEW=y +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_POWERCAP=y +CONFIG_POWER_AVS=y +CONFIG_POWER_SUPPLY=y +CONFIG_PPP=y +CONFIG_PPS=m +CONFIG_PPS_CLIENT_GPIO=m +CONFIG_PPS_CLIENT_LDISC=m +# CONFIG_PREEMPT_NONE is not set +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PTP_1588_CLOCK=m +CONFIG_PWM=y +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +CONFIG_R3964=m +CONFIG_RAW_DRIVER=m +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_REED_SOLOMON=m +# CONFIG_REFCOUNT_FULL is not set +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_TWL4030=m +CONFIG_REISERFS_FS=m +# CONFIG_RESET_BERLIN is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_IMX7 is not set +# CONFIG_RESET_MESON is not set +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_SUNXI is not set +CONFIG_RFKILL=y +CONFIG_ROMFS_FS=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_PCF8523=m +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_SCHED_SMT=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SNIC=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_WD719X=m +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DW=m +CONFIG_SERIAL_8250_FINTEK=y +# CONFIG_SERIAL_8250_FSL is not set +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIO=y +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +# CONFIG_SG_SPLIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +CONFIG_SLIP=m +CONFIG_SND=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_EMU10K1_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_IMX_AUDMUX=m +CONFIG_SND_SOC_RT5677_SPI=m +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_TIMER=m +CONFIG_SOC_TI=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOUND=m +CONFIG_SPI=y +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_SPI_ROCKCHIP is not set +CONFIG_SPMI=m +CONFIG_SRAM=y +CONFIG_SSB=m +CONFIG_STAGING=y +# CONFIG_STANDALONE is not set +# CONFIG_SUNXI_SRAM is not set +CONFIG_SUN_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSV_FS=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_THERMAL=y +CONFIG_TIFM_CORE=m +CONFIG_TI_CPSW_ALE=m +CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_TRACE_SINK=m +CONFIG_TTY_PRINTK=y +CONFIG_UFS_FS=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_GADGET=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_SUPPORT=y +CONFIG_UWB=m +CONFIG_VFIO=m +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO_PCI=m +CONFIG_VFIO_VIRQFD=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO_MMIO=y +# CONFIG_VM86 is not set +CONFIG_VME_BUS=y +CONFIG_VMXNET3=m +CONFIG_VXFS_FS=m +CONFIG_W1=m +CONFIG_WAN=y +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_X25=m +# CONFIG_X86_INTEL_MID is not set +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_XEN=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT=512 +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_ZLIB_DEFLATE=y --- linux-aws-4.15.0.orig/debian.master/config/amd64/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/amd64/config.flavour.generic @@ -0,0 +1,10 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# +CONFIG_HZ=250 +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_VOLUNTARY=y --- linux-aws-4.15.0.orig/debian.master/config/amd64/config.flavour.lowlatency +++ linux-aws-4.15.0/debian.master/config/amd64/config.flavour.lowlatency @@ -0,0 +1,10 @@ +# +# Config options for config.flavour.lowlatency automatically generated by splitconfig.pl +# +CONFIG_HZ=1000 +CONFIG_HZ_1000=y +# CONFIG_HZ_250 is not set +CONFIG_IRQ_FORCED_THREADING_DEFAULT=y +CONFIG_LATENCYTOP=y +CONFIG_PREEMPT=y +# CONFIG_PREEMPT_VOLUNTARY is not set --- linux-aws-4.15.0.orig/debian.master/config/annotations +++ linux-aws-4.15.0/debian.master/config/annotations @@ -0,0 +1,12075 @@ +# Menu: HEADER +# FORMAT: 2 +# ARCH: x86 arm arm64 s390 powerpc + +# Mark debugging symbols. +# exceptions +CONFIG_DEBUG_FS note +CONFIG_DEBUG_KERNEL note + +# Menu: ROOT +CONFIG_LIVEPATCH policy<{'amd64': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: ACPI (Advanced Configuration and Power Interface) Support +CONFIG_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DEBUGGER policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_DEBUGGER_USER policy<{'amd64': 'y'}> +CONFIG_ACPI_PROCFS_POWER policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_EC_DEBUGFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_AC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_BATTERY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_BUTTON policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_VIDEO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_FAN policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DOCK policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_PROCESSOR policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_IPMI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_PROCESSOR_AGGREGATOR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_NUMA policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_ACPI_CUSTOM_DSDT_FILE policy<{'amd64': '""', 'i386': '""'}> +CONFIG_ACPI_TABLE_UPGRADE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_DEBUG policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_PCI_SLOT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_X86_PM_TIMER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_CONTAINER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_HOTPLUG_MEMORY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACPI_SBS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_HED policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_CUSTOM_METHOD policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ACPI_BGRT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_REDUCED_HARDWARE_ONLY policy<{'amd64': 'n', 'arm64': 'y', 'i386': 'n'}> +CONFIG_ACPI_NFIT policy<{'amd64': 'm', 'arm64': 'm'}> +CONFIG_DPTF_POWER policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_EXTLOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TPS68470_PMIC_OPREGION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_ACPI_PROCFS_POWER mark +CONFIG_ACPI_CUSTOM_METHOD mark note +CONFIG_ACPI_CUSTOM_DSDT_FILE note + +# Menu: ACPI (Advanced Configuration and Power Interface) Support >> ACPI Platform Error Interface (APEI) +CONFIG_ACPI_APEI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_GHES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_PCIEAER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ACPI_APEI_SEA policy<{'arm64': 'y'}> +CONFIG_ACPI_APEI_MEMORY_FAILURE policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_ACPI_APEI_EINJ policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ACPI_APEI_ERST_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> + +# Menu: ACPI (Advanced Configuration and Power Interface) Support >> PMIC (Power Management Integrated Circuit) operation region support +CONFIG_PMIC_OPREGION policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> + +# Menu: ARM Accelerated Cryptographic Algorithms +CONFIG_CRYPTO_CHACHA20_NEON policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: ARM Accelerated Cryptographic Algorithms >> Architecture: arm +CONFIG_ARM_CRYPTO policy<{'armhf': 'y'}> +CONFIG_CRYPTO_SHA1_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA1_ARM_NEON policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA1_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA2_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA256_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_SHA512_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM_BS policy<{'armhf': 'm'}> +CONFIG_CRYPTO_AES_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_GHASH_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_ARM_CE policy<{'armhf': 'm'}> +CONFIG_CRYPTO_CRC32_ARM_CE policy<{'armhf': 'm'}> + +# Menu: ARM64 Accelerated Cryptographic Algorithms + +# Menu: ARM64 Accelerated Cryptographic Algorithms >> Architecture: arm64 +CONFIG_ARM64_CRYPTO policy<{'arm64': 'y'}> +CONFIG_CRYPTO_SHA256_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA512_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA1_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_SHA2_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_GHASH_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_CRC32_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64 policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE_CCM policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_CE_BLK policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_NEON_BLK policy<{'arm64': 'm'}> +CONFIG_CRYPTO_AES_ARM64_BS policy<{'arm64': 'm'}> + +# Menu: Advanced setup >> Architecture: powerpc + +# Menu: Advanced setup >> Prompt for advanced kernel configuration options >> Architecture: powerpc + +# Menu: Advanced setup >> Prompt for advanced kernel configuration options >> Pinned Kernel TLBs (860 ONLY) >> Architecture: powerpc + +# Menu: Architecture: arm +CONFIG_ARM_DMA_IOMMU_ALIGNMENT policy<{'armhf': '8'}> +CONFIG_ARM_PATCH_PHYS_VIRT policy<{'armhf': 'y'}> + +# Menu: Architecture: powerpc +CONFIG_PPC64 policy<{'ppc64el': 'y'}> +CONFIG_NR_IRQS policy<{'ppc64el': '512'}> +CONFIG_SCOM_DEBUGFS policy<{'ppc64el': 'y'}> + +# Menu: Architecture: s390 +CONFIG_KMSG_IDS policy<{'s390x': 'y'}> + +# Menu: Architecture: x86 +CONFIG_64BIT policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Boot options +CONFIG_CMDLINE policy<{'arm64': '"console=ttyAMA0"', 'armhf': '""'}> +CONFIG_KEXEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRASH_DUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EFI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_DMI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CMDLINE_FORCE policy<{'arm64': 'n'}> +# +CONFIG_CRASH_DUMP mark note +CONFIG_EFI flag + +# Menu: Boot options >> Architecture: arm +CONFIG_USE_OF policy<{'armhf': 'y'}> +CONFIG_ATAGS policy<{'armhf': 'y'}> +CONFIG_DEPRECATED_PARAM_STRUCT policy<{'armhf': 'n'}> +CONFIG_ARM_APPENDED_DTB policy<{'armhf': 'y'}> +CONFIG_ARM_ATAG_DTB_COMPAT policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ATAGS_PROC policy<{'armhf': 'y'}> +CONFIG_AUTO_ZRELADDR policy<{'armhf': 'y'}> +# +CONFIG_ARM_ATAG_DTB_COMPAT flag + +# Menu: Boot options >> Architecture: arm64 +CONFIG_ARM64_ACPI_PARKING_PROTOCOL policy<{'arm64': 'y'}> + +# Menu: Boot options >> Kernel command line type + +# Menu: Boot options >> Kernel command line type >> Architecture: arm +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER policy<{'armhf-generic': 'n'}> +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND policy<{'armhf-generic': 'y'}> + +# Menu: Bus options (PCI etc.) +CONFIG_ISA policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> Architecture: arm + +# Menu: Bus options (PCI etc.) >> Architecture: arm64 + +# Menu: Bus options (PCI etc.) >> Architecture: powerpc +CONFIG_FSL_LBC policy<{'ppc64el': 'y'}> + +# Menu: Bus options (PCI etc.) >> Architecture: s390 +CONFIG_QDIO policy<{'s390x': 'm'}> +CONFIG_CHSC_SCH policy<{'s390x': 'm'}> +CONFIG_SCM_BUS policy<{'s390x': 'y'}> +CONFIG_EADM_SCH policy<{'s390x': 'm'}> +CONFIG_VFIO_CCW policy<{'s390x': 'm'}> + +# Menu: Bus options (PCI etc.) >> Architecture: x86 +CONFIG_ISA_BUS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ISA_DMA_API policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCx200 policy<{'i386': 'm'}> +CONFIG_SCx200HR_TIMER policy<{'i386': 'm'}> +CONFIG_ALIX policy<{'i386': 'y'}> +CONFIG_NET5501 policy<{'i386': 'y'}> +CONFIG_GEOS policy<{'i386': 'y'}> +CONFIG_X86_SYSFB policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_X86_SYSFB flag + +# Menu: Bus options (PCI etc.) >> DesignWare PCI Core Support +CONFIG_PCI_DRA7XX policy<{'armhf': 'y'}> +CONFIG_PCI_DRA7XX_HOST policy<{'armhf': 'y'}> +CONFIG_PCI_DRA7XX_EP policy<{'armhf': 'y'}> +CONFIG_PCIE_DW_PLAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_PCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_PCI_IMX6 policy<{'armhf-generic': 'y'}> +CONFIG_PCI_LAYERSCAPE policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_PCI_HISI policy<{'arm64': 'y'}> +CONFIG_PCIE_QCOM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCIE_ARMADA_8K policy<{'armhf': 'y'}> +CONFIG_PCIE_KIRIN policy<{'arm64': 'y'}> +CONFIG_PCIE_HISI_STB policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Bus options (PCI etc.) >> EISA support +CONFIG_EISA_VLB_PRIMING policy<{'i386': 'y'}> +CONFIG_EISA_PCI_EISA policy<{'i386': 'y'}> +CONFIG_EISA_VIRTUAL_ROOT policy<{'i386': 'y'}> +CONFIG_EISA_NAMES policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> EISA support >> Architecture: x86 +CONFIG_EISA policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support +CONFIG_PCCARD policy<{'amd64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'n'}> +CONFIG_CARDBUS policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support >> 16-bit PCMCIA support +CONFIG_PCMCIA policy<{'amd64': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_PCMCIA_LOAD_CIS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PD6729 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I82092 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I82365 policy<{'i386': 'm'}> +CONFIG_TCIC policy<{'i386': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCCard (PCMCIA/CardBus) support >> CardBus yenta-compatible bridge support +CONFIG_YENTA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_YENTA_O2 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_RICOH policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_TI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_ENE_TUNE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_YENTA_TOSHIBA policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCI Endpoint +CONFIG_PCI_ENDPOINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_ENDPOINT_CONFIGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_EPF_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support +CONFIG_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_MSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PCI_REALLOC_ENABLE_AUTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_STUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XEN_PCIDEV_FRONTEND policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCI_IOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCI_PRI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCI_PASID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCI_HYPERV policy<{'amd64': 'm'}> +CONFIG_PCI_QUIRKS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Architecture: s390 +CONFIG_PCI_NR_FUNCTIONS policy<{'s390x': '64'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Architecture: x86 +CONFIG_PCI_MMCONFIG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCI_CNB20LE_QUIRK policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> DesignWare PCI Core Support + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Endpoint + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Express Port Bus support +CONFIG_PCIEPORTBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_PCIE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEAER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_ECRC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEAER_INJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEASPM_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_DPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIE_PTM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +# +CONFIG_PCIEPORTBUS mark note +CONFIG_HOTPLUG_PCI_PCIE mark note +CONFIG_PCIEAER_INJECT flag +CONFIG_PCIEASPM_DEBUG note + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI Express Port Bus support >> Default ASPM policy +CONFIG_PCIEASPM_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_PCIEASPM_POWERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM_POWER_SUPERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_PCIEASPM_PERFORMANCE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +# +CONFIG_PCIEASPM_DEFAULT note + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI access mode >> Architecture: x86 +CONFIG_PCI_GOBIOS policy<{'i386': 'n'}> +CONFIG_PCI_GOMMCONFIG policy<{'i386': 'n'}> +CONFIG_PCI_GODIRECT policy<{'i386': 'n'}> +CONFIG_PCI_GOANY policy<{'i386': 'y'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI host controller drivers +CONFIG_PCI_MVEBU policy<{'armhf': 'y'}> +CONFIG_PCIE_XILINX_NWL policy<{'arm64': 'y'}> +CONFIG_PCI_FTPCI100 policy<{'armhf': 'y'}> +CONFIG_PCI_TEGRA policy<{'armhf-generic': 'y'}> +CONFIG_PCI_RCAR_GEN2 policy<{'armhf': 'y'}> +CONFIG_PCIE_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_HOST_GENERIC policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_XGENE policy<{'arm64': 'y'}> +CONFIG_PCI_XGENE_MSI policy<{'arm64': 'y'}> +CONFIG_PCI_V3_SEMI policy<{'armhf': 'y'}> +CONFIG_PCIE_IPROC_PLATFORM policy<{'arm64': 'm'}> +CONFIG_PCIE_IPROC_MSI policy<{'arm64': 'y'}> +CONFIG_PCIE_ALTERA policy<{'armhf': 'n'}> +CONFIG_PCI_HOST_THUNDER_PEM policy<{'arm64': 'y'}> +CONFIG_PCI_HOST_THUNDER_ECAM policy<{'arm64': 'y'}> +CONFIG_PCIE_ROCKCHIP policy<{'armhf': 'y'}> +CONFIG_PCIE_MEDIATEK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_VMD policy<{'amd64': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> PCI switch controller drivers +CONFIG_PCI_SW_SWITCHTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support +CONFIG_RAPIDIO policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RAPIDIO_TSI721 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_RAPIDIO_DISC_TIMEOUT policy<{'amd64': '30', 'i386': '30', 'ppc64el': '30'}> +CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RAPIDIO_DMA_ENGINE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RAPIDIO_DEBUG policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RAPIDIO_CHMAN policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_MPORT_CDEV policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> Architecture: powerpc + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> Enumeration method +CONFIG_RAPIDIO_ENUM_BASIC policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> RapidIO support >> RapidIO Switch drivers +CONFIG_RAPIDIO_TSI57X policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_CPS_XX policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_TSI568 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_CPS_GEN2 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RAPIDIO_RXS_GEN3 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Bus options (PCI etc.) >> PCI support >> Support for PCI Hotplug +CONFIG_HOTPLUG_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_COMPAQ policy<{'i386': 'm'}> +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM policy<{'i386': 'y'}> +CONFIG_HOTPLUG_PCI_IBM policy<{'i386': 'm'}> +CONFIG_HOTPLUG_PCI_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HOTPLUG_PCI_ACPI_IBM policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_CPCI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_PCI_CPCI_ZT5550 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_CPCI_GENERIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HOTPLUG_PCI_SHPC policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_HOTPLUG_PCI_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_RPA policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_RPA_DLPAR policy<{'ppc64el': 'm'}> +CONFIG_HOTPLUG_PCI_S390 policy<{'s390x': 'y'}> +# +CONFIG_HOTPLUG_PCI_SHPC note + +# Menu: Cryptographic API +CONFIG_CRYPTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_RSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECDH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MANAGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_GF128MUL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_NULL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_PCRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRYPTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MCRYPTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_AUTHENC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_GCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CHACHA20POLY1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SEQIV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECHAINIV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CBC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_ECB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_LRW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_PCBC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_XTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_KEYWRAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_HMAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_XCBC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_VMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRC32C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CRC32C_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_CRC32C_VPMSUM policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_CRC32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CRC32_PCLMUL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_CRCT10DIF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_CRCT10DIF_PCLMUL policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CRCT10DIF_VPMSUM policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_VPMSUM_TESTER policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_GHASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_POLY1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_POLY1305_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_MD4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_MD5 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_MD5_PPC policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_MICHAEL_MIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD128 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_RMD320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA1_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA512_SSSE3 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA1_PPC policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_SHA1_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA512_MB policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SHA256 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA512 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_SHA3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SM3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TGR192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_WP512 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL policy<{'amd64': 'm'}> +CONFIG_CRYPTO_AES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_AES_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_AES_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_AES_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_AES_NI_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_ANUBIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_ARC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_BLOWFISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_BLOWFISH_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAMELLIA_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAST5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAST5_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CAST6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CAST6_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_DES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_DES3_EDE_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_FCRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_KHAZAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SALSA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SALSA20_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_SALSA20_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_CHACHA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_CHACHA20_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SERPENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_SERPENT_SSE2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SERPENT_SSE2_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_SERPENT_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_SERPENT_AVX2_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TEA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TWOFISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_TWOFISH_586 policy<{'i386': 'm'}> +CONFIG_CRYPTO_TWOFISH_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY policy<{'amd64': 'm'}> +CONFIG_CRYPTO_TWOFISH_AVX_X86_64 policy<{'amd64': 'm'}> +CONFIG_CRYPTO_DEFLATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZ4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_LZ4HC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_ANSI_CPRNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_JITTERENTROPY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_USER_API_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_SKCIPHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_RNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_USER_API_AEAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS flag +CONFIG_CRYPTO_TEST flag +CONFIG_CRYPTO_SHA512 note + +# Menu: Cryptographic API >> Asymmetric (public-key cryptographic) key type +CONFIG_ASYMMETRIC_KEY_TYPE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X509_CERTIFICATE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PKCS7_MESSAGE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PKCS7_TEST_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SIGNED_PE_FILE_VERIFICATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_ASYMMETRIC_KEY_TYPE note +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE note +CONFIG_X509_CERTIFICATE_PARSER note + +# Menu: Cryptographic API >> Certificates for signature checking +CONFIG_MODULE_SIG_KEY policy<{'amd64': '"certs/signing_key.pem"', 'arm64': '"certs/signing_key.pem"', 'armhf': '"certs/signing_key.pem"', 'i386': '"certs/signing_key.pem"', 'ppc64el': '"certs/signing_key.pem"', 's390x': '"certs/signing_key.pem"'}> +CONFIG_SYSTEM_BLACKLIST_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_BLACKLIST_HASH_LIST policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_EFI_SIGNATURE_LIST_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_LOAD_UEFI_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_EFI_SIGNATURE_LIST_PARSER mark +CONFIG_LOAD_UEFI_KEYS mark +CONFIG_SYSTEM_BLACKLIST_KEYRING mark + +# Menu: Cryptographic API >> Certificates for signature checking >> Provide system-wide ring of trusted keys +CONFIG_SYSTEM_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_TRUSTED_KEYS policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_SYSTEM_EXTRA_CERTIFICATE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096', 's390x': '4096'}> +CONFIG_SECONDARY_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Cryptographic API >> Hardware crypto devices +CONFIG_CRYPTO_HW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DEV_PADLOCK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_PADLOCK_AES policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_PADLOCK_SHA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_GEODE policy<{'i386': 'm'}> +CONFIG_ZCRYPT policy<{'s390x': 'm'}> +CONFIG_PKEY policy<{'s390x': 'm'}> +CONFIG_CRYPTO_PAES_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA1_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA256_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_SHA512_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_DES_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_AES_S390 policy<{'s390x': 'm'}> +CONFIG_S390_PRNG policy<{'s390x': 'm'}> +CONFIG_CRYPTO_GHASH_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_CRC32_S390 policy<{'s390x': 'm'}> +CONFIG_CRYPTO_DEV_MARVELL_CESA policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_HIFN_795X policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_HIFN_795X_RNG policy<{'armhf-generic': 'y'}> +CONFIG_CRYPTO_DEV_FSL_CAAM policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG policy<{'arm64': 'n', 'armhf-generic': 'n'}> +CONFIG_CRYPTO_DEV_SAHARA policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_MXC_SCC policy<{'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_EXYNOS_RNG policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_S5P policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_NX policy<{'ppc64el': 'y'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_CCP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_CCP_DD policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_SP_CCP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CRYPTO_DEV_CCP_CRYPTO policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_MXS_DCP policy<{'armhf-generic': 'n'}> +CONFIG_CRYPTO_DEV_QAT_DH895xCC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_QAT_C3XXX policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_C62X policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CRYPTO_DEV_QAT_C3XXXVF policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CRYPTO_DEV_QAT_C62XVF policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CAVIUM_CPT policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_NITROX_CNN55XX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRYPTO_DEV_CAVIUM_ZIP policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_QCE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CRYPTO_DEV_VMX policy<{'ppc64el': 'y'}> +CONFIG_CRYPTO_DEV_VMX_ENCRYPT policy<{'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_ROCKCHIP policy<{'armhf': 'n'}> +CONFIG_CRYPTO_DEV_MEDIATEK policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_CHELSIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRYPTO_DEV_BCM_SPU policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_ARTPEC6 policy<{'armhf': 'm'}> + +# Menu: Cryptographic API >> Hardware crypto devices >> Freescale CAAM Job Ring driver backend +CONFIG_CRYPTO_DEV_FSL_CAAM_JR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE policy<{'arm64': '9', 'armhf-generic': '9'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD policy<{'arm64': '255', 'armhf-generic': '255'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD policy<{'arm64': '2048', 'armhf-generic': '2048'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI policy<{'arm64': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API policy<{'arm64': 'm', 'armhf-generic': 'm'}> + +# Menu: Cryptographic API >> Hardware crypto devices >> Support for OMAP crypto HW accelerators +CONFIG_CRYPTO_DEV_OMAP policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_SHAM policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_AES policy<{'armhf': 'm'}> +CONFIG_CRYPTO_DEV_OMAP_DES policy<{'armhf': 'm'}> + +# Menu: Cryptographic API >> NIST SP800-90A DRBG +CONFIG_CRYPTO_DRBG_MENU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DRBG_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRYPTO_DRBG_CTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers +CONFIG_CHARLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARM_CHARLCD policy<{'armhf': 'y'}> +CONFIG_THUNDERBOLT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TEE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> ATA/ATAPI/MFM/RLL support (DEPRECATED) +CONFIG_IDE policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ATA/ATAPI/MFM/RLL support (DEPRECATED) >> IDE Mode for AMD Alchemy Au1200 + +# Menu: Device Drivers >> Accessibility support +CONFIG_ACCESSIBILITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_ACCESSIBILITY flag + +# Menu: Device Drivers >> Adaptive Voltage Scaling class support +CONFIG_POWER_AVS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKCHIP_IODOMAIN policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Android +CONFIG_ANDROID policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> Android >> Android Binder IPC Driver + +# Menu: Device Drivers >> Auxiliary Display support +CONFIG_AUXDISPLAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HD44780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS0108 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS0108_DELAY policy<{'amd64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_CFAG12864B policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CFAG12864B_RATE policy<{'amd64': '20', 'i386': '20'}> +CONFIG_IMG_ASCII_LCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HT16K33 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Block devices +CONFIG_BLK_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_NULL_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_FD policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BLK_DEV_PCIESSD_MTIP32XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ZRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZRAM_WRITEBACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_DAC960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_UMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_LOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_LOOP_MIN_COUNT policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8', 's390x': '8'}> +CONFIG_BLK_DEV_CRYPTOLOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_DRBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DRBD_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_DEV_NBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_SKD policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_SX8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CDROM_PKTCDVD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CDROM_PKTCDVD_BUFFERS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_CDROM_PKTCDVD_WCACHE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATA_OVER_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_XPRAM policy<{'s390x': 'n'}> +CONFIG_DCSSBLK policy<{'s390x': 'm'}> +CONFIG_SCM_BLOCK policy<{'s390x': 'm'}> +CONFIG_XEN_BLKDEV_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_BLKDEV_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_VIRTIO_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VIRTIO_BLK_SCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_RBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_RSXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BLK_DEV_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_RAM_COUNT policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16', 's390x': '16'}> +CONFIG_BLK_DEV_RAM_SIZE policy<{'amd64': '65536', 'arm64': '65536', 'armhf': '65536', 'i386': '65536', 'ppc64el': '65536', 's390x': '65536'}> +# +CONFIG_BLK_DEV_UMEM note +CONFIG_CDROM_PKTCDVD_WCACHE mark +CONFIG_XEN_BLKDEV_FRONTEND note +CONFIG_VIRTIO_BLK note +CONFIG_BLK_DEV_RAM note +CONFIG_BLK_DEV_RAM_SIZE mark note flag + +# Menu: Device Drivers >> Block devices >> Parallel port IDE device support +CONFIG_PARIDE policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PD policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PCD policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PF policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PT policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_PG policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ATEN policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_BPCK policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_BPCK6 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_PARIDE_COMM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_DSTR policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FIT2 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FIT3 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_EPAT policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_EPATC8 policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PARIDE_EPIA policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FRIQ policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_FRPW policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_KBIC policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_KTTI policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ON20 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARIDE_ON26 policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Block devices >> Support for DASD devices +CONFIG_DASD policy<{'s390x': 'm'}> +CONFIG_DASD_PROFILE policy<{'s390x': 'y'}> +CONFIG_DASD_ECKD policy<{'s390x': 'm'}> +CONFIG_DASD_FBA policy<{'s390x': 'm'}> +CONFIG_DASD_DIAG policy<{'s390x': 'm'}> +CONFIG_DASD_EER policy<{'s390x': 'y'}> + +# Menu: Device Drivers >> Board level reset or power off +CONFIG_POWER_RESET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POWER_RESET_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_AXXIA policy<{'armhf-generic-lpae': 'y'}> +CONFIG_POWER_RESET_BRCMKONA policy<{'armhf': 'y'}> +CONFIG_POWER_RESET_BRCMSTB policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_POWER_RESET_GPIO policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_GPIO_RESTART policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_IMX policy<{'armhf-generic': 'n'}> +CONFIG_POWER_RESET_MSM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_LTC2952 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_QNAP policy<{'armhf': 'n'}> +CONFIG_POWER_RESET_RESTART policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POWER_RESET_VERSATILE policy<{'armhf': 'y'}> +CONFIG_POWER_RESET_VEXPRESS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_POWER_RESET_XGENE policy<{'arm64': 'n'}> +CONFIG_POWER_RESET_SYSCON policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_SYSCON_POWEROFF policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_POWER_RESET_RMOBILE policy<{'armhf': 'm'}> +CONFIG_SYSCON_REBOOT_MODE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Broadcom specific AMBA +CONFIG_BCMA_HOST_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BCMA_HOST_SOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_SFLASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_GMAC_CMN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DRIVER_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BCMA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Bus devices +CONFIG_ARM_CCI400_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_CCI5xx_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_CCN policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_BRCMSTB_GISB_ARB policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_IMX_WEIM policy<{'armhf-generic': 'y'}> +CONFIG_OMAP_INTERCONNECT policy<{'armhf': 'y'}> +CONFIG_OMAP_OCP2SCP policy<{'armhf': 'm'}> +CONFIG_QCOM_EBI2 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SIMPLE_PM_BUS policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_SUNXI_RSB policy<{'arm64': 'm'}> +CONFIG_TEGRA_GMI policy<{'armhf-generic': 'm'}> +CONFIG_TI_SYSC policy<{'armhf': 'y'}> +CONFIG_UNIPHIER_SYSTEM_BUS policy<{'armhf': 'y'}> +CONFIG_VEXPRESS_CONFIG policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices +CONFIG_DEVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEVKMEM policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TTY_PRINTK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LP_CONSOLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PPDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HVC_CONSOLE policy<{'ppc64el': 'y'}> +CONFIG_HVC_OLD_HVSI policy<{'ppc64el': 'y'}> +CONFIG_HVC_OPAL policy<{'ppc64el': 'y'}> +CONFIG_HVC_RTAS policy<{'ppc64el': 'y'}> +CONFIG_HVC_IUCV policy<{'s390x': 'y'}> +CONFIG_HVC_XEN policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HVC_XEN_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_HVC_UDBG policy<{'ppc64el': 'n'}> +CONFIG_HVC_DCC policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_HVCS policy<{'ppc64el': 'm'}> +CONFIG_VIRTIO_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IBM_BSR policy<{'ppc64el': 'm'}> +CONFIG_POWERNV_OP_PANEL policy<{'ppc64el': 'm'}> +CONFIG_NVRAM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_DTLK policy<{'i386': 'm'}> +CONFIG_R3964 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_APPLICOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SONYPI policy<{'i386': 'm'}> +CONFIG_MWAVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCx200_GPIO policy<{'i386': 'm'}> +CONFIG_PC8736x_GPIO policy<{'i386': 'm'}> +CONFIG_NSC_GPIO policy<{'i386': 'm'}> +CONFIG_RAW_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAX_RAW_DEVS policy<{'amd64': '256', 'arm64': '256', 'armhf': '256', 'i386': '256', 'ppc64el': '256'}> +CONFIG_HPET policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'y'}> +CONFIG_HPET_MMAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HPET_MMAP_DEFAULT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HANGCHECK_TIMER policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TELCLOCK policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DEVPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TN3270 policy<{'s390x': 'y'}> +CONFIG_TN3270_TTY policy<{'s390x': 'y'}> +CONFIG_TN3270_FS policy<{'s390x': 'm'}> +CONFIG_TN3270_CONSOLE policy<{'s390x': 'y'}> +CONFIG_TN3215 policy<{'s390x': 'y'}> +CONFIG_TN3215_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_TTY policy<{'s390x': 'y'}> +CONFIG_SCLP_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_VT220_TTY policy<{'s390x': 'y'}> +CONFIG_SCLP_VT220_CONSOLE policy<{'s390x': 'y'}> +CONFIG_SCLP_ASYNC policy<{'s390x': 'm'}> +CONFIG_SCLP_ASYNC_ID policy<{'s390x': '"000000000"'}> +CONFIG_HMC_DRV policy<{'s390x': 'm'}> +CONFIG_SCLP_OFB policy<{'s390x': 'n'}> +CONFIG_S390_TAPE policy<{'s390x': 'm'}> +CONFIG_S390_TAPE_34XX policy<{'s390x': 'm'}> +CONFIG_S390_TAPE_3590 policy<{'s390x': 'm'}> +CONFIG_VMLOGRDR policy<{'s390x': 'm'}> +CONFIG_VMCP policy<{'s390x': 'y'}> +CONFIG_VMCP_CMA_SIZE policy<{'s390x': '4'}> +CONFIG_MONREADER policy<{'s390x': 'm'}> +CONFIG_MONWRITER policy<{'s390x': 'm'}> +CONFIG_S390_VMUR policy<{'s390x': 'm'}> +CONFIG_XILLYBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_XILLYBUS_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XILLYBUS_OF policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_DEVKMEM mark note +CONFIG_HVC_UDBG mark note + +# Menu: Device Drivers >> Character devices >> Enable TTY +CONFIG_TTY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CONSOLE_TRANSLATIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VT_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VT_HW_CONSOLE_BINDING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UNIX98_PTYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LEGACY_PTYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LEGACY_PTY_COUNT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0', 's390x': '0'}> +CONFIG_NOZOMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_N_GSM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TRACE_ROUTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TRACE_SINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PPC_EPAPR_HV_BYTECHAN policy<{'ppc64el': 'n'}> +# +CONFIG_N_GSM note + +# Menu: Device Drivers >> Character devices >> Enable TTY >> Non-standard serial port support +CONFIG_SERIAL_NONSTANDARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKETPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYCLADES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYZ_INTR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MOXA_INTELLIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOXA_SMARTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINK policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINKMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SYNCLINK_GT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_N_HDLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Character devices >> Hardware Random Number Generator Core support +CONFIG_HW_RANDOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HW_RANDOM_TIMERIOMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HW_RANDOM_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_AMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_BCM2835 policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_IPROC_RNG200 policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_GEODE policy<{'i386': 'm'}> +CONFIG_HW_RANDOM_VIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HW_RANDOM_OMAP policy<{'armhf': 'm'}> +CONFIG_HW_RANDOM_OMAP3_ROM policy<{'armhf-generic': 'm'}> +CONFIG_HW_RANDOM_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HW_RANDOM_IMX_RNGC policy<{'armhf-generic': 'm'}> +CONFIG_HW_RANDOM_PSERIES policy<{'ppc64el': 'm'}> +CONFIG_HW_RANDOM_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_HW_RANDOM_TPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HW_RANDOM_HISI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_XGENE policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_MESON policy<{'armhf': 'm'}> +CONFIG_HW_RANDOM_CAVIUM policy<{'arm64': 'm'}> +CONFIG_HW_RANDOM_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HW_RANDOM_S390 policy<{'s390x': 'm'}> + +# Menu: Device Drivers >> Character devices >> IPMI top-level message handler +CONFIG_IPMI_HANDLER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPMI_PROC_INTERFACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPMI_PANIC_EVENT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IPMI_DEVICE_INTERFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_SI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_SSIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_IPMI_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPMI_POWEROFF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Character devices >> PCMCIA character devices +CONFIG_SYNCLINK_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CARDMAN_4000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CARDMAN_4040 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCR24X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IPWIRELESS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Character devices >> Serial device bus +CONFIG_SERIAL_DEV_BUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SERIAL_DEV_CTRL_TTYPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SERIAL_DEV_BUS note +CONFIG_SERIAL_DEV_CTRL_TTYPORT note + +# Menu: Device Drivers >> Character devices >> Serial drivers +CONFIG_SERIAL_AMBA_PL010 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIAL_AMBA_PL011 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_AMBA_PL011_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_KGDB_NMI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_MESON policy<{'armhf': 'm'}> +CONFIG_SERIAL_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_SERIAL_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SERIAL_MAX3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_MAX310X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_IMX policy<{'armhf-generic': 'y'}> +CONFIG_SERIAL_IMX_CONSOLE policy<{'armhf-generic': 'y'}> +CONFIG_SERIAL_UARTLITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SERIAL_UARTLITE_NR_UARTS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SERIAL_ICOM policy<{'ppc64el': 'm'}> +CONFIG_SERIAL_JSM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_MSM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_MSM_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_OMAP policy<{'armhf': 'y'}> +CONFIG_SERIAL_OMAP_CONSOLE policy<{'armhf': 'y'}> +CONFIG_SERIAL_SCCNXP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIAL_SCCNXP_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_SC16IS7XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_SC16IS7XX_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_SC16IS7XX_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_SERIAL_BCM63XX policy<{'armhf': 'm'}> +CONFIG_SERIAL_ALTERA_JTAGUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_IFX6X60 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_PCH_UART policy<{'i386': 'm'}> +CONFIG_SERIAL_XILINX_PS_UART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_ARC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_ARC_NR_PORTS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_SERIAL_RP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_RP2_NR_UARTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SERIAL_FSL_LPUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_CONEXANT_DIGICOLOR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_ST_ASC policy<{'armhf': 'm'}> +CONFIG_SERIAL_MEN_Z135 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_SPRD policy<{'arm64': 'm'}> +CONFIG_SERIAL_MVEBU_UART policy<{'armhf': 'y'}> +CONFIG_SERIAL_MVEBU_CONSOLE policy<{'armhf': 'y'}> +CONFIG_SERIAL_OWL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_OWL_CONSOLE policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support +CONFIG_SERIAL_8250 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIAL_8250_DEPRECATED_OPTIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_PNP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SERIAL_8250_FINTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_EXAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MEN_MCB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_NR_UARTS policy<{'amd64': '48', 'arm64': '48', 'armhf': '48', 'i386': '48', 'ppc64el': '48'}> +CONFIG_SERIAL_8250_RUNTIME_UARTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SERIAL_8250_ASPEED_VUART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_DW policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_8250_EM policy<{'armhf': 'n'}> +CONFIG_SERIAL_8250_RT288X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_OMAP policy<{'armhf': 'm'}> +CONFIG_SERIAL_8250_MT6577 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SERIAL_8250_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_SERIAL_8250_LPSS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MID policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIAL_8250_MOXA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_OF_PLATFORM policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support >> Extended 8250/16550 serial driver options +CONFIG_SERIAL_8250_EXTENDED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_SHARE_IRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_DETECT_IRQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SERIAL_8250_RSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_BCM2835AUX policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> 8250/16550 and compatible serial support >> Extended 8250/16550 serial driver options >> Support more than 4 legacy serial ports +CONFIG_SERIAL_8250_MANY_PORTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIAL_8250_FOURPORT policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_ACCENT policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_BOCA policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_EXAR_ST16C554 policy<{'i386': 'm'}> +CONFIG_SERIAL_8250_HUB6 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> AT91 on-chip serial port support + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Altera UART support +CONFIG_SERIAL_ALTERA_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SERIAL_ALTERA_UART_MAXPORTS policy<{'amd64': '4', 'arm64': '4', 'armhf': '4', 'i386': '4', 'ppc64el': '4'}> +CONFIG_SERIAL_ALTERA_UART_BAUDRATE policy<{'amd64': '115200', 'arm64': '115200', 'armhf': '115200', 'i386': '115200', 'ppc64el': '115200'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin SPORT emulate UART + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin serial port support + +# Menu: Device Drivers >> Character devices >> Serial drivers >> Blackfin serial port support >> UART Mode + +# Menu: Device Drivers >> Character devices >> Serial drivers >> SuperH SCI(F) serial port support +CONFIG_SERIAL_SH_SCI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIAL_SH_SCI_NR_UARTS policy<{'arm64': '2', 'armhf': '2'}> +CONFIG_SERIAL_SH_SCI_DMA policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Character devices >> Serial drivers >> TMPTX39XX/49XX SIO support + +# Menu: Device Drivers >> Character devices >> TPM Hardware Support +CONFIG_TCG_TPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCG_TIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_TIS_I2C_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_I2C_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_TIS_I2C_NUVOTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y'}> +CONFIG_TCG_NSC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TCG_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_IBMVTPM policy<{'ppc64el': 'y'}> +CONFIG_TCG_XEN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_CRB policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TCG_VTPM_PROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCG_TIS_ST33ZP24_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCG_TIS_ST33ZP24_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_TCG_TPM note +CONFIG_TCG_TIS_I2C_ATMEL note +CONFIG_TCG_TIS_I2C_INFINEON note +CONFIG_TCG_TIS_I2C_NUVOTON note + +# Menu: Device Drivers >> Clock Source drivers +CONFIG_DW_APB_TIMER policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_ROCKCHIP_TIMER policy<{'armhf': 'y'}> +CONFIG_ARMADA_370_XP_TIMER policy<{'armhf': 'y'}> +CONFIG_MESON6_TIMER policy<{'armhf': 'y'}> +CONFIG_ORION_TIMER policy<{'armhf': 'y'}> +CONFIG_OWL_TIMER policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_TEGRA_TIMER policy<{'armhf-generic': 'y'}> +CONFIG_CLKSRC_TI_32K policy<{'armhf': 'y'}> +CONFIG_ARM_ARCH_TIMER_EVTSTREAM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_FSL_ERRATUM_A008585 policy<{'arm64': 'y'}> +CONFIG_HISILICON_ERRATUM_161010101 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_858921 policy<{'arm64': 'y'}> +CONFIG_ARM_GLOBAL_TIMER policy<{'armhf': 'y'}> +CONFIG_ARM_TIMER_SP804 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLKSRC_EXYNOS_MCT policy<{'armhf': 'y'}> +CONFIG_MTK_TIMER policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SH_TIMER_CMT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SH_TIMER_MTU2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RENESAS_OSTM policy<{'armhf': 'y'}> +CONFIG_SH_TIMER_TMU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_EM_TIMER_STI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CLKSRC_QCOM policy<{'armhf': 'y'}> +CONFIG_CLKSRC_VERSATILE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLKSRC_TANGO_XTAL policy<{'armhf': 'y'}> +CONFIG_CLKSRC_IMX_GPT policy<{'armhf-generic': 'y'}> +# +CONFIG_ARM64_ERRATUM_858921 mark note + +# Menu: Device Drivers >> Common Clock Framework +CONFIG_COMMON_CLK_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_VERSATILE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_SP810 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_VEXPRESS_OSC policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_HSDK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MAX77686 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_RK808 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI655X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SCPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SI5351 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_SI514 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_SI570 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_CDCE706 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_CDCE925 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_CS2000_CP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_S2MPS11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CLK_TWL6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CLK_QORIQ policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_XGENE policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_COMMON_CLK_VC5 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CLK_BCM_NS2 policy<{'arm64': 'y'}> +CONFIG_CLK_BCM_SR policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_HI3516CV300 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI3519 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI3660 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_HI3798CV200 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_CLK_HI6220 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_RESET_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_STUB_CLK_HI6220 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT8135 policy<{'armhf': 'y'}> +CONFIG_COMMON_CLK_MT8173 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_SAMSUNG policy<{'armhf': 'y'}> +CONFIG_EXYNOS_AUDSS_CLK_CON policy<{'armhf': 'm'}> +CONFIG_COMMON_CLK_TI_ADPLL policy<{'armhf': 'y'}> +CONFIG_CLK_UNIPHIER policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for MediaTek MT7622 +CONFIG_COMMON_CLK_MT7622 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_ETHSYS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_HIFSYS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_COMMON_CLK_MT7622_AUDSYS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT2701 +CONFIG_COMMON_CLK_MT2701 policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT2712 +CONFIG_COMMON_CLK_MT2712 policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_BDPSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_IMGSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_JPGDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_MFGCFG policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_MMSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_VDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT2712_VENCSYS policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock driver for Mediatek MT6797 +CONFIG_COMMON_CLK_MT6797 policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_MMSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_IMGSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_VDECSYS policy<{'arm64': 'y'}> +CONFIG_COMMON_CLK_MT6797_VENCSYS policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Clock support for Allwinner SoCs +CONFIG_SUNXI_CCU policy<{'arm64': 'y'}> +CONFIG_SUN50I_A64_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_A83T_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_H3_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_DE2_CCU policy<{'arm64': 'y'}> +CONFIG_SUN8I_R_CCU policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Renesas SoC clock support +CONFIG_CLK_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_LEGACY policy<{'armhf': 'y'}> +CONFIG_CLK_EMEV2 policy<{'armhf': 'y'}> +CONFIG_CLK_RZA1 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7740 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7743 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7745 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7778 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7779 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7790 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7791 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7792 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7794 policy<{'armhf': 'y'}> +CONFIG_CLK_R8A7795 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A7796 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A77970 policy<{'arm64': 'y'}> +CONFIG_CLK_R8A77995 policy<{'arm64': 'y'}> +CONFIG_CLK_SH73A0 policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN2 policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN2_CPG policy<{'armhf': 'y'}> +CONFIG_CLK_RCAR_GEN3_CPG policy<{'arm64': 'y'}> +CONFIG_CLK_RCAR_USB2_CLOCK_SEL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_CPG_MSSR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_CLK_RENESAS_CPG_MSTP policy<{'armhf': 'y'}> +CONFIG_CLK_RENESAS_DIV6 policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Common Clock Framework >> Support for Qualcomm's clock controllers +CONFIG_COMMON_CLK_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_CLK_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_CLK_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APQ_GCC_8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APQ_MMCC_8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_4019 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_LCC_806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IPQ_GCC_8074 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8916 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_LCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MDM_GCC_9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MDM_LCC_9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8974 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8974 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8994 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_GCC_8996 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MSM_MMCC_8996 policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Connector - unified userspace <-> kernelspace linker +CONFIG_CONNECTOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> DAX: direct access to differentiated memory +CONFIG_DAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEV_DAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DEV_DAX_PMEM policy<{'amd64': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> DMA Engine support +CONFIG_DMADEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DMADEVICES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ALTERA_MSGDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AMBA_PL08X policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_BCM_SBA_RAID policy<{'arm64': 'm'}> +CONFIG_DMA_BCM2835 policy<{'arm64': 'y'}> +CONFIG_DMA_OMAP policy<{'armhf': 'y'}> +CONFIG_DMA_SUN6I policy<{'arm64': 'm'}> +CONFIG_FSL_EDMA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IMX_DMA policy<{'armhf-generic': 'm'}> +CONFIG_IMX_SDMA policy<{'armhf-generic': 'm'}> +CONFIG_INTEL_IDMA64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_IOATDMA policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_X100_DMA policy<{'amd64': 'm'}> +CONFIG_K3_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MV_XOR policy<{'armhf': 'y'}> +CONFIG_MV_XOR_V2 policy<{'arm64': 'y'}> +CONFIG_MXS_DMA policy<{'armhf-generic': 'y'}> +CONFIG_MX3_IPU policy<{'armhf-generic': 'y'}> +CONFIG_MX3_IPU_IRQS policy<{'armhf-generic': '4'}> +CONFIG_NBPFAXI_DMA policy<{'armhf': 'm'}> +CONFIG_PCH_DMA policy<{'i386': 'm'}> +CONFIG_PL330_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPRD_DMA policy<{'arm64': 'm'}> +CONFIG_TEGRA20_APB_DMA policy<{'armhf-generic': 'y'}> +CONFIG_TIMB_DMA policy<{'i386': 'm'}> +CONFIG_TI_CPPI41 policy<{'armhf': 'm'}> +CONFIG_TI_EDMA policy<{'armhf': 'y'}> +CONFIG_XGENE_DMA policy<{'arm64': 'm'}> +CONFIG_XILINX_DMA policy<{'arm64': 'm'}> +CONFIG_XILINX_ZYNQMP_DMA policy<{'arm64': 'm'}> +CONFIG_QCOM_BAM_DMA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_HIDMA_MGMT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_HIDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DW_DMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DW_DMAC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SH_DMAE_BASE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SH_DMAE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RCAR_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_USB_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SUDMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ASYNC_TX_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DMATEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DMATEST flag + +# Menu: Device Drivers >> DMABUF options +CONFIG_SYNC_FILE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SW_SYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Dallas's 1-wire support +CONFIG_W1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_W1_CON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Dallas's 1-wire support >> 1-wire Bus Masters +CONFIG_W1_MASTER_MATROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_DS2490 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_DS2482 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_MXC policy<{'armhf-generic': 'm'}> +CONFIG_W1_MASTER_DS1WM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_MASTER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDQ_MASTER_OMAP policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Dallas's 1-wire support >> 1-wire Slaves +CONFIG_W1_SLAVE_THERM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_SMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2405 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2408 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2408_READBACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_W1_SLAVE_DS2413 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2406 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2423 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2431 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2433 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2433_CRC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_W1_SLAVE_DS2438 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS2781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS28E04 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_W1_SLAVE_DS28E17 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Device Tree and Open Firmware support +CONFIG_OF policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_OF_UNITTEST policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +CONFIG_OF_DYNAMIC policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_OF_OVERLAY policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +# +CONFIG_OF_UNITTEST flag + +# Menu: Device Drivers >> EDAC (Error Detection And Correction) reporting +CONFIG_EDAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_EDAC_LEGACY_SYSFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EDAC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EDAC_DECODE_MCE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_GHES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EDAC_AMD64 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_AMD64_ERROR_INJECTION policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EDAC_AMD76X policy<{'i386': 'm'}> +CONFIG_EDAC_E7XXX policy<{'i386': 'm'}> +CONFIG_EDAC_E752X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I82875P policy<{'i386': 'm'}> +CONFIG_EDAC_I82975X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I3000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I3200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_IE31200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_X38 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I5400 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I7CORE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I82860 policy<{'i386': 'm'}> +CONFIG_EDAC_R82600 policy<{'i386': 'm'}> +CONFIG_EDAC_I5000 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I5100 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_I7300 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EDAC_SBRIDGE policy<{'amd64': 'm'}> +CONFIG_EDAC_SKX policy<{'amd64': 'm'}> +CONFIG_EDAC_PND2 policy<{'amd64': 'm'}> +CONFIG_EDAC_LAYERSCAPE policy<{'arm64': 'm'}> +CONFIG_EDAC_CPC925 policy<{'ppc64el': 'm'}> +CONFIG_EDAC_HIGHBANK_MC policy<{'armhf': 'm'}> +CONFIG_EDAC_HIGHBANK_L2 policy<{'armhf': 'm'}> +CONFIG_EDAC_THUNDERX policy<{'arm64': 'm'}> +CONFIG_EDAC_XGENE policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> EDAC (Error Detection And Correction) reporting >> Altera SOCFPGA ECC + +# Menu: Device Drivers >> External Connector Class (extcon) support +CONFIG_EXTCON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EXTCON_ADC_JACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_ARIZONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_AXP288 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_INTEL_INT3496 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EXTCON_INTEL_CHT_WC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EXTCON_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX3355 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX77843 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_QCOM_SPMI_MISC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_EXTCON_RT8973A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_SM5502 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_USB_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EXTCON_USBC_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> FMC support +CONFIG_FMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_FMC_FAKEDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_TRIVIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_WRITE_EEPROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FMC_CHARDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FPGA Configuration Framework +CONFIG_FPGA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FPGA_REGION policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_ICE40_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_ALTERA_CVP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FPGA_MGR_ALTERA_PS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FPGA_MGR_XILINX_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALTERA_PR_IP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ALTERA_PR_IP_CORE_PLAT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FPGA Configuration Framework >> FPGA Bridge Framework +CONFIG_FPGA_BRIDGE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_XILINX_PR_DECOUPLER policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> FSI support + +# Menu: Device Drivers >> FSI support >> FSI support +CONFIG_FSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_MASTER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_MASTER_HUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSI_SCOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Fusion MPT device support +CONFIG_FUSION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FUSION_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_FUSION_CTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_LAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FUSION_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> GPIO Support +CONFIG_GPIOLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_GPIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GPIO_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_GPIO_SYSFS note + +# Menu: Device Drivers >> GPIO Support >> I2C GPIO expanders +CONFIG_GPIO_ADP5588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ADNP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX7300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX732X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PCA953X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PCF857X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPIC2810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TS4900 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> MFD GPIO expanders +CONFIG_GPIO_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ARIZONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_CRYSTAL_COVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_CS5535 policy<{'i386': 'm'}> +CONFIG_GPIO_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTC_EGPIO policy<{'armhf': 'y'}> +CONFIG_GPIO_JANZ_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP873X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MSIC policy<{'i386': 'y'}> +CONFIG_GPIO_PALMAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_RC5T583 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TC3589X policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TIMBERDALE policy<{'i386': 'y'}> +CONFIG_GPIO_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS6586X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TPS65910 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_TPS65912 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TPS68470 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_GPIO_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TWL6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_UCB1400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WHISKEY_COVE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_GPIO_TWL4030 mark note + +# Menu: Device Drivers >> GPIO Support >> Memory mapped GPIO drivers +CONFIG_GPIO_74XX_MMIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ALTERA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_AMDPT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_GPIO_AXP209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_GPIO_DWAPB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_EM policy<{'armhf': 'n'}> +CONFIG_GPIO_EXAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_FTGPIO010 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_GENERIC_PLATFORM policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_GRGPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_ICH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_LYNXPOINT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_GPIO_MB86S7X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_GPIO_MENZ127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MOCKUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GPIO_MPC8XXX policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_GPIO_OMAP policy<{'armhf': 'y'}> +CONFIG_GPIO_PL061 policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_GPIO_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_GPIO_SYSCON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_TEGRA policy<{'armhf-generic': 'y'}> +CONFIG_GPIO_TS4800 policy<{'armhf-generic': 'm'}> +CONFIG_GPIO_THUNDERX policy<{'arm64': 'm'}> +CONFIG_GPIO_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_GPIO_VX855 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_XGENE policy<{'arm64': 'y'}> +CONFIG_GPIO_XGENE_SB policy<{'arm64': 'm'}> +CONFIG_GPIO_XILINX policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_GPIO_XLP policy<{'arm64': 'm'}> +CONFIG_GPIO_ZEVIO policy<{'armhf': 'y'}> +CONFIG_GPIO_ZYNQ policy<{'arm64': 'm'}> +# +CONFIG_GPIO_EM note + +# Menu: Device Drivers >> GPIO Support >> PCI GPIO expanders +CONFIG_GPIO_AMD8111 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_BT8XX policy<{'s390x': 'm'}> +CONFIG_GPIO_INTEL_MID policy<{'i386': 'y'}> +CONFIG_GPIO_MERRIFIELD policy<{'i386': 'n'}> +CONFIG_GPIO_ML_IOH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_PCH policy<{'i386': 'm'}> +CONFIG_GPIO_PCI_IDIO_16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GPIO_RDC321X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> Port-mapped I/O GPIO drivers +CONFIG_GPIO_104_DIO_48E policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_104_IDIO_16 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_104_IDI_48 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_F7188X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_GPIO_MM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_IT87 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_SCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_SCH311X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_GPIO_WS16C48 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> SPI GPIO expanders +CONFIG_GPIO_74X164 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX3191X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MAX7301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_MC33880 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_PISOSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_XRA1403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> GPIO Support >> USB GPIO expanders +CONFIG_GPIO_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Driver Options +CONFIG_UEVENT_HELPER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UEVENT_HELPER_PATH policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_DEVTMPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEVTMPFS_MOUNT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STANDALONE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PREVENT_FIRMWARE_BUILD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ALLOW_DEV_COREDUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_DRIVER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_DEVRES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_TEST_DRIVER_REMOVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_ASYNC_DRIVER_PROBE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DMA_FENCE_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEVTMPFS note note +CONFIG_DEVTMPFS_MOUNT note note + +# Menu: Device Drivers >> Generic Driver Options >> DMA Contiguous Memory Allocator +CONFIG_DMA_CMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_CMA_SIZE_MBYTES policy<{'armhf-generic': '16'}> +CONFIG_CMA_ALIGNMENT policy<{'armhf-generic': '8'}> +# +CONFIG_DMA_CMA note + +# Menu: Device Drivers >> Generic Driver Options >> DMA Contiguous Memory Allocator >> Selected region size +CONFIG_CMA_SIZE_SEL_MBYTES policy<{'armhf-generic': 'y'}> +CONFIG_CMA_SIZE_SEL_PERCENTAGE policy<{'armhf-generic': 'n'}> +CONFIG_CMA_SIZE_SEL_MIN policy<{'armhf-generic': 'n'}> +CONFIG_CMA_SIZE_SEL_MAX policy<{'armhf-generic': 'n'}> + +# Menu: Device Drivers >> Generic Driver Options >> Userspace firmware loading support +CONFIG_FW_LOADER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FIRMWARE_IN_KERNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EXTRA_FIRMWARE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_FW_LOADER_USER_HELPER_FALLBACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_FW_LOADER_USER_HELPER_FALLBACK mark note + +# Menu: Device Drivers >> Generic Dynamic Voltage and Frequency Scaling (DVFS) support +CONFIG_PM_DEVFREQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_POWERSAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_USERSPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_GOV_PASSIVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ARM_EXYNOS_BUS_DEVFREQ policy<{'armhf': 'y'}> +CONFIG_ARM_TEGRA_DEVFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_RK3399_DMC_DEVFREQ policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Dynamic Voltage and Frequency Scaling (DVFS) support >> DEVFREQ-Event device Support +CONFIG_PM_DEVFREQ_EVENT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP policy<{'armhf': 'y'}> +CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU policy<{'armhf': 'y'}> +CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Target Core Mod (TCM) and ConfigFS Infrastructure +CONFIG_TARGET_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_IBLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_FILEIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_PSCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_USER2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LOOPBACK_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCM_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_TARGET_CXGB4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SBP_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver +CONFIG_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_THERMAL_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_WRITABLE_TRIPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_FAIR_SHARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_STEP_WISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_BANG_BANG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_USER_SPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_GOV_POWER_ALLOCATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CLOCK_THERMAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_DEVFREQ_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_EMULATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISI_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MAX77620_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_ROCKCHIP_THERMAL policy<{'armhf': 'm'}> +CONFIG_RCAR_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RCAR_GEN3_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DOVE_THERMAL policy<{'armhf': 'm'}> +CONFIG_ARMADA_THERMAL policy<{'armhf': 'y'}> +CONFIG_DA9062_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_POWERCLAMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_PKG_TEMP_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SOC_DTS_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_BXT_PMIC_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PCH_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTK_THERMAL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_TANGO_THERMAL policy<{'armhf': 'n'}> +CONFIG_QCOM_SPMI_TEMP_ALARM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_GENERIC_ADC_THERMAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> ACPI INT340X thermal drivers +CONFIG_INT340X_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INT3406_THERMAL policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> APIs to parse thermal data out of device tree +CONFIG_THERMAL_OF policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_THERMAL policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_IMX_THERMAL policy<{'armhf-generic': 'm'}> +CONFIG_QORIQ_THERMAL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_UNIPHIER_THERMAL policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Broadcom thermal drivers +CONFIG_BCM2835_THERMAL policy<{'arm64': 'm'}> +CONFIG_BRCMSTB_THERMAL policy<{'arm64': 'm'}> +CONFIG_BCM_NS_THERMAL policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Default Thermal governor +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> NVIDIA Tegra thermal drivers +CONFIG_TEGRA_SOCTHERM policy<{'armhf-generic': 'n'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Qualcomm thermal drivers +CONFIG_QCOM_TSENS policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> STMicroelectronics thermal drivers + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Samsung thermal drivers +CONFIG_EXYNOS_THERMAL policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Texas Instruments thermal drivers + +# Menu: Device Drivers >> Generic Thermal sysfs driver >> Texas Instruments thermal drivers >> Texas Instruments SoCs temperature sensor driver +CONFIG_TI_SOC_THERMAL policy<{'armhf': 'm'}> +CONFIG_TI_THERMAL policy<{'armhf': 'y'}> +CONFIG_OMAP3_THERMAL policy<{'armhf-generic': 'n'}> +CONFIG_OMAP4_THERMAL policy<{'armhf-generic': 'y'}> +CONFIG_DRA752_THERMAL policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Generic powercap sysfs driver +CONFIG_POWERCAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_INTEL_RAPL policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Graphics support +CONFIG_VGA_ARB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VGA_ARB_MAX_GPUS policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_VGA_SWITCHEROO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_TEGRA_HOST1X policy<{'armhf-generic': 'm'}> +CONFIG_TEGRA_HOST1X_FIREWALL policy<{'armhf-generic': 'y'}> +CONFIG_IMX_IPUV3_CORE policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> /dev/agpgart (AGP Support) +CONFIG_AGP policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AGP_ALI policy<{'i386': 'm'}> +CONFIG_AGP_ATI policy<{'i386': 'm'}> +CONFIG_AGP_AMD policy<{'i386': 'y'}> +CONFIG_AGP_AMD64 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_NVIDIA policy<{'i386': 'y'}> +CONFIG_AGP_SIS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AGP_SWORKS policy<{'i386': 'm'}> +CONFIG_AGP_VIA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_AGP_EFFICEON policy<{'i386': 'm'}> +# +CONFIG_AGP note flag + +# Menu: Device Drivers >> Graphics support >> ACP (Audio CoProcessor) Configuration +CONFIG_DRM_AMD_ACP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> AMD Library routines +CONFIG_CHASH_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CHASH_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support +CONFIG_BACKLIGHT_LCD_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support >> Lowlevel Backlight controls +CONFIG_BACKLIGHT_CLASS_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BACKLIGHT_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_CARILLO_RANCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_APPLE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_PM8941_WLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_SAHARA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BACKLIGHT_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP8860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ADP8870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_AAT2870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3630A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LM3639 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LP855X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_PANDORA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_TPS65217 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_BACKLIGHT_AS3711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_LV5207LP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_BD6107 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BACKLIGHT_ARCXCNN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Backlight & LCD device support >> Lowlevel LCD controls +CONFIG_LCD_CLASS_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_L4F00242T03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LMS283GF05 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LTV350QV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_ILI922X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_ILI9320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_TDO24M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_VGG2432A4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_S6E63M0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LD9040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_AMS369FG06 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_LMS501KF03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LCD_HX8357 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Bootup logo +CONFIG_LOGO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Console display driver support +CONFIG_VGA_CONSOLE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VGACON_SOFT_SCROLLBACK policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MDA_CONSOLE policy<{'i386': 'm'}> +CONFIG_DUMMY_CONSOLE_COLUMNS policy<{'amd64': '80', 'arm64': '80', 'i386': '80', 'ppc64el': '80'}> +CONFIG_DUMMY_CONSOLE_ROWS policy<{'amd64': '25', 'arm64': '25', 'i386': '25', 'ppc64el': '25'}> +CONFIG_FRAMEBUFFER_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_FRAMEBUFFER_CONSOLE mark note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) +CONFIG_DRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_DRM_DP_AUX_CHARDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_DEBUG_MM_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_FBDEV_EMULATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_FBDEV_OVERALLOC policy<{'amd64': '100', 'arm64': '100', 'armhf': '100', 'i386': '100', 'ppc64el': '100'}> +CONFIG_DRM_LOAD_EDID_FIRMWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_HDLCD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_HDLCD_SHOW_UNDERRUN policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_DRM_MALI_DISPLAY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_RADEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_RADEON_USERPTR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_VGEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_VMWGFX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_VMWGFX_FBCON policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_UDL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_AST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_MGAG200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_CIRRUS_QEMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_ARMADA policy<{'armhf': 'm'}> +CONFIG_DRM_ATMEL_HLCDC policy<{'armhf': 'm'}> +CONFIG_DRM_RCAR_DU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_RCAR_DW_HDMI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_RCAR_LVDS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_RCAR_VSP policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_SHMOBILE policy<{'armhf': 'm'}> +CONFIG_DRM_OMAP policy<{'armhf': 'n'}> +CONFIG_DRM_TILCDC policy<{'armhf': 'm'}> +CONFIG_DRM_QXL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_BOCHS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_VIRTIO_GPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_FSL_DCU policy<{'armhf': 'm'}> +CONFIG_DRM_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_DRM_TEGRA_DEBUG policy<{'armhf-generic': 'n'}> +CONFIG_DRM_TEGRA_STAGING policy<{'armhf-generic': 'y'}> +CONFIG_DRM_STM policy<{'armhf': 'm'}> +CONFIG_DRM_STM_DSI policy<{'armhf': 'm'}> +CONFIG_DRM_STI policy<{'armhf': 'n'}> +CONFIG_DRM_VC4 policy<{'arm64': 'm'}> +CONFIG_DRM_VC4_HDMI_CEC policy<{'arm64': 'y'}> +CONFIG_DRM_ETNAVIV policy<{'armhf-generic': 'm'}> +CONFIG_DRM_ETNAVIV_REGISTER_LOGGING policy<{'armhf-generic': 'n'}> +CONFIG_DRM_ARCPGU policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_HISI_HIBMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_HISI_KIRIN policy<{'arm64': 'm'}> +CONFIG_HISI_KIRIN_DW_DSI policy<{'arm64': 'm'}> +CONFIG_DRM_MEDIATEK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MEDIATEK_HDMI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MXSFB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MESON policy<{'armhf': 'm'}> +CONFIG_DRM_MESON_DW_HDMI policy<{'armhf': 'm'}> +CONFIG_DRM_PL111 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_TVE200 policy<{'armhf': 'm'}> +# +CONFIG_DRM_MGAG200 note +CONFIG_DRM_BOCHS note +CONFIG_DRM_STI note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU +CONFIG_DRM_AMDGPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_AMDGPU_SI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_CIK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_USERPTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMDGPU_GART_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HSA_AMD policy<{'amd64': 'm'}> +# +CONFIG_DRM_AMDGPU_CIK note +CONFIG_DRM_AMDGPU_CIK note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU >> Display Engine Configuration +CONFIG_DRM_AMD_DC_PRE_VEGA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> AMD GPU >> Display Engine Configuration >> AMD DC - Enable new display engine +CONFIG_DRM_AMD_DC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_AMD_DC_FBC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_AMD_DC_DCN1_0 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_KERNEL_DC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Allwinner A10 Display Engine + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Freescale i.MX +CONFIG_DRM_IMX policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_PARALLEL_DISPLAY policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_TVE policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_LDB policy<{'armhf': 'm'}> +CONFIG_DRM_IMX_HDMI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Rockchip +CONFIG_DRM_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_ROCKCHIP_ANALOGIX_DP policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_CDN_DP policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_DW_HDMI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_DW_MIPI_DSI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_INNO_HDMI policy<{'armhf': 'y'}> +CONFIG_ROCKCHIP_LVDS policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Samsung SoC EXYNOS Series +CONFIG_DRM_EXYNOS policy<{'armhf': 'm'}> +CONFIG_DRM_EXYNOS_FIMD policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS5433_DECON policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS7_DECON policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS_MIXER policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_VIDI policy<{'armhf': 'n'}> +CONFIG_DRM_EXYNOS_DSI policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_HDMI policy<{'armhf': 'y'}> +CONFIG_DRM_EXYNOS_MIC policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> DRM Support for Samsung SoC EXYNOS Series >> Image Post Processor +CONFIG_DRM_EXYNOS_IPP policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Interface Bridges +CONFIG_DRM_ANALOGIX_ANX78XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DUMB_VGA_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_LVDS_ENCODER policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_NXP_PTN3460 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PARADE_PS8622 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SIL_SII8620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SII902X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_SII9234 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_TOSHIBA_TC358767 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_TI_TFP410 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_AHB_AUDIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_I2S_AUDIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_DW_HDMI_CEC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Interface Bridges >> AV7511 encoder +CONFIG_DRM_I2C_ADV7511 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_ADV7511_AUDIO policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_I2C_ADV7533 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_DRM_I2C_ADV7511_CEC policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Display Panels +CONFIG_DRM_PANEL_LVDS policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SIMPLE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_INNOLUX_P079ZCA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_JDI_LT070ME05000 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_LD9040 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_LG_LG4573 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_ORISETECH_OTM8009A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SEIKO_43WVF1G policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SHARP_LS043T1LE01 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_PANEL_SITRONIX_ST7789V policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Enable legacy drivers (DANGEROUS) +CONFIG_DRM_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DRM_LEGACY flag note + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> I2C encoder or helper chips +CONFIG_DRM_I2C_CH7006 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_SIL164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_I2C_NXP_TDA998X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel 8xx/9xx/G3x/G4x/HD Graphics +CONFIG_DRM_I915 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_I915_ALPHA_SUPPORT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_CAPTURE_ERROR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_COMPRESS_ERROR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_USERPTR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_I915_GVT policy<{'amd64': 'y'}> +CONFIG_DRM_I915_GVT_KVMGT policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel 8xx/9xx/G3x/G4x/HD Graphics >> drm/i915 Debugging +CONFIG_DRM_I915_WERROR policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SW_FENCE_CHECK_DAG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DRM_I915_DEBUG_VBLANK_EVADE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Intel GMA5/600 KMS Framebuffer +CONFIG_DRM_GMA500 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DRM_GMA600 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_GMA3600 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DRM_MEDFIELD policy<{'i386': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM +CONFIG_DRM_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DRM_MSM_REGISTER_LOGGING policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_HDMI_HDCP policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> MSM DRM >> Enable DSI support in MSM DRM driver +CONFIG_DRM_MSM_DSI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_PLL policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_28NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_20NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_28NM_8960_PHY policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_DRM_MSM_DSI_14NM_PHY policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Nouveau (NVIDIA) cards +CONFIG_DRM_NOUVEAU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NOUVEAU_PLATFORM_DRIVER policy<{'armhf-generic': 'y'}> +CONFIG_NOUVEAU_DEBUG policy<{'amd64': '5', 'arm64': '5', 'armhf': '5', 'i386': '5', 'ppc64el': '5'}> +CONFIG_NOUVEAU_DEBUG_DEFAULT policy<{'amd64': '3', 'arm64': '3', 'armhf': '3', 'i386': '3', 'ppc64el': '3'}> +CONFIG_NOUVEAU_DEBUG_MMU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DRM_NOUVEAU_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> OMAP2+ Display Subsystem support + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> OMAPDRM External Display Device Drivers + +# Menu: Device Drivers >> Graphics support >> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) >> Support for simple displays +CONFIG_DRM_TINYDRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_MI0283QT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_REPAPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TINYDRM_ST7586 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices +CONFIG_FB_SH_MOBILE_MERAM policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Marvell MMP Display Subsystem support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices +CONFIG_FB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FIRMWARE_EDID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MODE_HELPERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_TILEBLITTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_CIRRUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM2_FIFO_DISCONNECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ARMCLCD policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_FB_IMX policy<{'armhf-generic': 'm'}> +CONFIG_FB_CYBER2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_CYBER2000_DDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ARC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_OF policy<{'ppc64el': 'y'}> +CONFIG_FB_ASILIANT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_IMSTT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_VGA16 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_UVESA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_VESA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_EFI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_FB_N411 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_HGA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_OPENCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_S1D13XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_I740 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_I810 policy<{'i386': 'm'}> +CONFIG_FB_I810_GTF policy<{'i386': 'n'}> +CONFIG_FB_LE80578 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_CARILLO_RANCH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_INTEL_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_FB_INTEL_I2C policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_ATY128 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ATY128_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_S3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_S3_DDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SAVAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SAVAGE_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SAVAGE_ACCEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_SIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SIS_300 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SIS_315 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_VIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_VIA_DIRECT_PROCFS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_FB_VIA_X_COMPATIBILITY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FB_NEOMAGIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_KYRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_3DFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_3DFX_ACCEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_3DFX_I2C policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_VOODOO1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_VT8623 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TRIDENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_PM3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_CARMINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SH_MOBILE_LCDC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_FB_TMIO policy<{'armhf': 'm'}> +CONFIG_FB_TMIO_ACCELL policy<{'armhf': 'y'}> +CONFIG_FB_S3C policy<{'armhf': 'm'}> +CONFIG_FB_S3C_DEBUG_REGWRITE policy<{'armhf': 'n'}> +CONFIG_FB_SM501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SMSCUFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_UDL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_IBM_GXT4500 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y'}> +CONFIG_FB_XILINX policy<{'arm64': 'm'}> +CONFIG_FB_DA8XX policy<{'armhf-generic': 'm'}> +CONFIG_FB_VIRTUAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_XEN_FBDEV_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_FB_METRONOME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MB862XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MB862XX_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MX3 policy<{'armhf-generic': 'y'}> +CONFIG_FB_BROADSHEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K190X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K1900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_AUO_K1901 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MXS policy<{'armhf-generic': 'm'}> +CONFIG_FB_HYPERV policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FB_SIMPLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_SSD1307 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SM712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_FB_VIRTUAL flag + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> AMD Geode family framebuffer support +CONFIG_FB_GEODE policy<{'i386': 'y'}> +CONFIG_FB_GEODE_LX policy<{'i386': 'm'}> +CONFIG_FB_GEODE_GX policy<{'i386': 'm'}> +CONFIG_FB_GEODE_GX1 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> ATI Mach64 display support +CONFIG_FB_ATY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_ATY_CT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ATY_GENERIC_LCD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_ATY_GX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_ATY_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> ATI Radeon display support +CONFIG_FB_RADEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_RADEON_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RADEON_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RADEON_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Amiga native chipset support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> DRAM timing +CONFIG_FB_CARMINE_DRAM_EVAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CARMINE_DRAM_CUSTOM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Framebuffer foreign endianness support +CONFIG_FB_FOREIGN_ENDIAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Framebuffer foreign endianness support >> Choice endianness support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> GDC variant +CONFIG_FB_MB862XX_PCI_GDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MB862XX_LIME policy<{'ppc64el': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Matrox acceleration +CONFIG_FB_MATROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MATROX_MILLENIUM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_MYSTIQUE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_MATROX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_MATROX_MAVEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP frame buffer support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP2+ frame buffer support +CONFIG_FB_OMAP2 policy<{'armhf': 'm'}> +CONFIG_FB_OMAP2_DEBUG_SUPPORT policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_NUM_FBS policy<{'armhf': '3'}> +CONFIG_FB_OMAP2_DSS_DEBUG policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DEBUGFS policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DPI policy<{'armhf': 'y'}> +CONFIG_FB_OMAP2_DSS_VENC policy<{'armhf': 'y'}> +CONFIG_FB_OMAP4_DSS_HDMI policy<{'armhf': 'y'}> +CONFIG_FB_OMAP5_DSS_HDMI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_SDI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_DSI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK policy<{'armhf': '0'}> +CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> OMAP2+ frame buffer support >> OMAPFB Panel and Encoder Drivers +CONFIG_FB_OMAP2_ENCODER_OPA362 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_ENCODER_TFP410 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_ENCODER_TPD12S015 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_DVI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_HDMI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_DPI policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_DSI_CM policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_SONY_ACX565AKM policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_SHARP_LS037V7DW01 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_TPO_TD028TTEC1 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_TPO_TD043MTEA1 policy<{'armhf': 'n'}> +CONFIG_FB_OMAP2_PANEL_NEC_NL8048HL11 policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> PXA LCD framebuffer support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> SBUS and UPA framebuffers + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Size of ADV7393 frame buffer memory Single/Double Size + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> Video mode support + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> nVidia Framebuffer Support +CONFIG_FB_NVIDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_NVIDIA_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_NVIDIA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_NVIDIA_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Graphics support >> Frame buffer Devices >> Support for frame buffer devices >> nVidia Riva support +CONFIG_FB_RIVA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_RIVA_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FB_RIVA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FB_RIVA_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support + +# Menu: Device Drivers >> HID support >> HID bus support +CONFIG_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BATTERY_STRENGTH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HIDRAW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UHID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers +CONFIG_HID_A4TECH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACCUTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACRUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ACRUX_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_APPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_APPLEIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_AUREAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BELKIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_BETOP_FF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CHERRY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CHICONY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CORSAIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PRODIKEYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CMEDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CP2112 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_CYPRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_DRAGONRISE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DRAGONRISE_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_EMS_FF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ELECOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ELO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_EZKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GEMBIRD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GFRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_HOLTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOLTEK_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_GT683R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KEYTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KYE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_UCLOGIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WALTOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GYRATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ICADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_TWINHAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_KENSINGTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LCPOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LENOVO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MAGICMOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MAYFLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MICROSOFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MONTEREY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_MULTITOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_NTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_NTRIG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ORTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PANTHERLORD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PANTHERLORD_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PENMOUNT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PETALYNX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PLANTRONICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PRIMAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_RETRODE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ROCCAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SAITEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SAMSUNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SONY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SONY_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_SPEEDLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_STEELSERIES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SUNPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_RMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_GREENASIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREENASIA_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_HYPERV_MOUSE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HID_SMARTJOYPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMARTJOYPLUS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_TIVO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_TOPSEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_THINGM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_THRUSTMASTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_THRUSTMASTER_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_UDRAW_PS3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WACOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_WIIMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_XINMO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ZEROPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZEROPLUS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_ZYDACRON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_HUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_CUSTOM_SENSOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_ALPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers >> Logitech devices +CONFIG_HID_LOGITECH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LOGITECH_DJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_LOGITECH_HIDPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LOGITECH_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIRUMBLEPAD2_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIG940_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LOGIWHEELS_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> HID bus support >> Special HID drivers >> PicoLCD (graphic version) +CONFIG_HID_PICOLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PICOLCD_FB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_BACKLIGHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_LCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HID_PICOLCD_CIR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> I2C HID support +CONFIG_I2C_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HID support >> Intel ISH HID support +CONFIG_INTEL_ISH_HID policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> HID support >> USB HID support +CONFIG_USB_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_PID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_HIDDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> HID support >> USB HID support >> USB HID Boot Protocol drivers +CONFIG_USB_KBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> HSI support +CONFIG_HSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMAP_SSI policy<{'armhf-generic': 'm'}> +CONFIG_NOKIA_MODEM policy<{'armhf-generic': 'm'}> +CONFIG_CMT_SPEECH policy<{'armhf-generic': 'm'}> +CONFIG_SSI_PROTOCOL policy<{'armhf-generic': 'm'}> +CONFIG_HSI_CHAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Hardware Monitoring support +CONFIG_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HWMON_DEBUG_CHIP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_ABITUGURU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ABITUGURU3 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_AD7314 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AD7414 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AD7418 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1025 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1026 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1029 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM9240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7310 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7410 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7411 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7462 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7470 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADT7475 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ASC7621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_K8TEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_K10TEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_FAM15H_POWER policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_APPLESMC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ARM_SCPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SENSORS_ASB100 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ASPEED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ATXP1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DS620 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DS1621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DELL_SMM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_DA9052_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_I5K_AMB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_F71805F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_F71882FG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_F75375S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MC13783_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_FSCHMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_FTSTEUTATES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GL518SM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GL520SM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_G760A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_G762 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_GPIO_FAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HIH6130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMAEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMPEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBMPOWERNV policy<{'ppc64el': 'm'}> +CONFIG_SENSORS_IIO_HWMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_I5500 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_CORETEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_IT87 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_JC42 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_POWR1220 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LINEAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2945 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2990 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4151 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4215 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4222 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4245 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4260 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC4261 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX16065 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1619 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX1668 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX197 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31722 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6621 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6639 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6650 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX6697 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31790 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MCP3021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TC654 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MENF21BMC_HWMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADCXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM63 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM70 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM73 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM75 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM77 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM78 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM83 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM85 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM87 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM90 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM92 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95234 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95241 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM95245 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PC87360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_PC87427 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NTC_THERMISTOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_NCT6683 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NCT6775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_NCT7802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_NCT7904 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PCF8591 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PWM_FAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT15 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHT3x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SHTC1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SIS5595 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_DME1737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_EMC1403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_EMC2103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_EMC6W201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMSC47M1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SMSC47M192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMSC47B397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SCH5627 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_SCH5636 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_STTS751 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_SMM665 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADC128D818 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS1015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS7828 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADS7871 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_AMC6821 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA2XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_INA3221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TC74 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_THMC50 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP108 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TMP421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_VEXPRESS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SENSORS_VIA_CPUTEMP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_VIA686A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_VT1211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_VT8231 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83781D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83791D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83792D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83793 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83795 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83795_FANCTRL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_W83L785TS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83L786NG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_W83627HF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_W83627EHF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SENSORS_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_XGENE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ACPI_POWER policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_ATK0110 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Hardware Monitoring support >> PMBus support +CONFIG_PMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_PMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ADM1275 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IBM_CFFPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_IR35221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM25066 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2978 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LTC2978_REGULATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SENSORS_LTC3815 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX16064 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX20751 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX31785 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX34440 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_MAX8688 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TPS40422 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TPS53679 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_UCD9000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_UCD9200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ZL6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Hardware Spinlock drivers +CONFIG_HWSPINLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HWSPINLOCK_OMAP policy<{'armhf': 'm'}> +CONFIG_HWSPINLOCK_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HWSPINLOCK_SPRD policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> I2C support + +# Menu: Device Drivers >> I2C support >> I2C support +CONFIG_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ACPI_I2C_OPREGION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_I2C_COMPAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_CHARDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_MUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_HELPER_AUTO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_SMBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_STUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SLAVE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_SLAVE_EEPROM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_DEBUG_CORE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DEBUG_ALGO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DEBUG_BUS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_I2C mark note +CONFIG_I2C_CHARDEV note + +# Menu: Device Drivers >> I2C support >> I2C support >> I2C Algorithms +CONFIG_I2C_ALGOBIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALGOPCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> I2C support >> I2C support >> I2C Hardware Bus support +CONFIG_I2C_ALI1535 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALI1563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ALI15X3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_AMD756 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_AMD756_S4882 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_AMD8111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_HIX5HD2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_I801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ISCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ISMT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_PIIX4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_CHT_WC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_NFORCE2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_NFORCE2_S4985 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I2C_SIS5595 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SIS630 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SIS96X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIAPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SCMI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_I2C_AXXIA policy<{'armhf-generic-lpae': 'm'}> +CONFIG_I2C_BCM2835 policy<{'arm64': 'm'}> +CONFIG_I2C_BCM_IPROC policy<{'arm64': 'm'}> +CONFIG_I2C_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_I2C_CADENCE policy<{'arm64': 'n'}> +CONFIG_I2C_CBUS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DESIGNWARE_PLATFORM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_DESIGNWARE_SLAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_I2C_DESIGNWARE_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DESIGNWARE_BAYTRAIL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_I2C_EG20T policy<{'i386': 'm'}> +CONFIG_I2C_EMEV2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'm', 'i386': 'n'}> +CONFIG_I2C_EXYNOS5 policy<{'armhf': 'm'}> +CONFIG_I2C_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_IMX policy<{'arm64': 'm', 'armhf-generic': 'y'}> +CONFIG_I2C_IMX_LPI2C policy<{'armhf-generic': 'm'}> +CONFIG_I2C_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MESON policy<{'armhf': 'm'}> +CONFIG_I2C_MPC policy<{'ppc64el': 'm'}> +CONFIG_I2C_MT65XX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_MV64XXX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_NOMADIK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_OCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_OMAP policy<{'armhf': 'y'}> +CONFIG_I2C_PCA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PXA policy<{'armhf': 'm'}> +CONFIG_I2C_PXA_SLAVE policy<{'armhf': 'y'}> +CONFIG_I2C_QUP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_RIIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_RK3X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_S3C2410 policy<{'armhf': 'y'}> +CONFIG_I2C_SH_MOBILE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_SIMTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SPRD policy<{'arm64': 'y'}> +CONFIG_I2C_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_I2C_UNIPHIER policy<{'armhf': 'n'}> +CONFIG_I2C_UNIPHIER_F policy<{'armhf': 'n'}> +CONFIG_I2C_VERSATILE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_THUNDERX policy<{'arm64': 'm'}> +CONFIG_I2C_XILINX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_XLR policy<{'armhf': 'n'}> +CONFIG_I2C_XLP9XX policy<{'arm64': 'm'}> +CONFIG_I2C_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_I2C_DIOLAN_U2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_PARPORT_LIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_ROBOTFUZZ_OSIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_TAOS_EVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_TINY_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MLXCPLD policy<{'amd64': 'm'}> +CONFIG_I2C_PCA_ISA policy<{'i386': 'm'}> +CONFIG_I2C_CROS_EC_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_I2C_XGENE_SLIMPRO policy<{'arm64': 'm'}> +CONFIG_SCx200_ACB policy<{'i386': 'm'}> +CONFIG_I2C_OPAL policy<{'ppc64el': 'y'}> + +# Menu: Device Drivers >> I2C support >> I2C support >> Multiplexer I2C Chip support +CONFIG_I2C_ARB_GPIO_CHALLENGE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_GPMUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_LTC4306 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PCA9541 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PCA954x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_PINCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_REG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_DEMUX_PINCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_MUX_MLXCPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IEEE 1394 (FireWire) support +CONFIG_FIREWIRE_NOSY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> IEEE 1394 (FireWire) support >> FireWire driver stack +CONFIG_FIREWIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_FIREWIRE_OHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_SBP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IOMMU Hardware Support +CONFIG_IOMMU_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MSM_IOMMU policy<{'armhf': 'n'}> +CONFIG_AMD_IOMMU policy<{'amd64': 'y'}> +CONFIG_AMD_IOMMU_V2 policy<{'amd64': 'm'}> +CONFIG_IRQ_REMAP policy<{'amd64': 'y'}> +CONFIG_OMAP_IOMMU policy<{'armhf': 'y'}> +CONFIG_OMAP_IOMMU_DEBUG policy<{'armhf': 'n'}> +CONFIG_ROCKCHIP_IOMMU policy<{'armhf': 'y'}> +CONFIG_TEGRA_IOMMU_GART policy<{'armhf-generic': 'y'}> +CONFIG_TEGRA_IOMMU_SMMU policy<{'armhf-generic': 'y'}> +CONFIG_EXYNOS_IOMMU policy<{'armhf': 'y'}> +CONFIG_EXYNOS_IOMMU_DEBUG policy<{'armhf': 'n'}> +CONFIG_IPMMU_VMSA policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_SPAPR_TCE_IOMMU policy<{'ppc64el': 'y'}> +CONFIG_ARM_SMMU policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_ARM_SMMU_V3 policy<{'arm64': 'y'}> +CONFIG_S390_CCW_IOMMU policy<{'s390x': 'y'}> +CONFIG_MTK_IOMMU policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_MTK_IOMMU_V1 policy<{'armhf': 'n'}> +CONFIG_QCOM_IOMMU policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_IPMMU_VMSA note + +# Menu: Device Drivers >> IOMMU Hardware Support >> Generic IOMMU Pagetable Support +CONFIG_IOMMU_IO_PGTABLE_LPAE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_IOMMU_IO_PGTABLE_ARMV7S policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> IOMMU Hardware Support >> Support for Intel IOMMU using DMA Remapping Devices +CONFIG_INTEL_IOMMU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IOMMU_SVM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IOMMU_DEFAULT_ON policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_INTEL_IOMMU_DEFAULT_ON note flag + +# Menu: Device Drivers >> IRQ chip support +CONFIG_TS4800_IRQ policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_IRQ_COMBINER policy<{'arm64': 'y'}> +CONFIG_IRQ_UNIPHIER_AIDET policy<{'armhf': 'y'}> +CONFIG_MESON_IRQ_GPIO policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> ISDN support +CONFIG_ISDN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HYSDN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HYSDN_CAPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem +CONFIG_ISDN_CAPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAPI_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_CAPI_CAPI20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_CAPI_MIDDLEWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_CAPI_CAPIDRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active AVM cards +CONFIG_CAPI_AVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DRV_AVMB1_B1ISA policy<{'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCIV4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DRV_AVMB1_T1ISA policy<{'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_AVM_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ISDN_DRV_AVMB1_T1PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DRV_AVMB1_C4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active Eicon DIVA Server cards +CONFIG_CAPI_EICON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> ISDN support >> CAPI 2.0 subsystem >> Active Eicon DIVA Server cards >> Support Eicon DIVA Server cards +CONFIG_ISDN_DIVAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_BRIPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DIVAS_PRIPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_DIVAS_DIVACAPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_USERIDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_DIVAS_MAINT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Modular ISDN driver +CONFIG_MISDN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_DSP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_L1OIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCMULTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_HFCUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_AVMFRITZ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_SPEEDFAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_INFINEON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_W6692 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MISDN_NETJET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) +CONFIG_ISDN_I4L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISDN_AUDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_TTY_FAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_X25 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_ISDN_I4L flag + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> ISDN feature submodules +CONFIG_ISDN_DIVERSION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards >> HiSax SiemensChipSet driver support +CONFIG_ISDN_DRV_HISAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_1TR6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_NI1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_MAX_CARDS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_HISAX_16_0 policy<{'i386': 'y'}> +CONFIG_HISAX_16_3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_TELESPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_S0BOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_AVM_A1 policy<{'i386': 'y'}> +CONFIG_HISAX_FRITZPCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_AVM_A1_PCMCIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ELSA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_IX1MICROR2 policy<{'i386': 'y'}> +CONFIG_HISAX_DIEHLDIVA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ASUSCOM policy<{'i386': 'y'}> +CONFIG_HISAX_TELEINT policy<{'i386': 'y'}> +CONFIG_HISAX_HFCS policy<{'i386': 'y'}> +CONFIG_HISAX_SEDLBAUER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_SPORTSTER policy<{'i386': 'y'}> +CONFIG_HISAX_MIC policy<{'i386': 'y'}> +CONFIG_HISAX_NETJET policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_NETJET_U policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_NICCY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ISURF policy<{'i386': 'y'}> +CONFIG_HISAX_HSTSAPHIR policy<{'i386': 'y'}> +CONFIG_HISAX_BKM_A4T policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_SCT_QUADRO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_GAZEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_HFC_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_HISAX_W6692 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_HFC_SX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_ENTERNOW_PCI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HISAX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_SEDLBAUER_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_ELSA_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_AVM_A1_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_TELES_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HISAX_ST5481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_HFCUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_HFC4S8S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HISAX_FRITZ_PCIPNP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Passive cards >> HiSax SiemensChipSet driver support >> HiSax Support for EURO/DSS1 +CONFIG_HISAX_EURO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DE_AOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HISAX_NO_SENDCOMPLETE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_NO_LLC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HISAX_NO_KEYPAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> ISDN support >> Old ISDN4Linux (deprecated) >> Support synchronous PPP +CONFIG_ISDN_PPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_PPP_VJ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_MPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPPP_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ISDN_PPP_BSDCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> ISDN support >> Siemens Gigaset support +CONFIG_ISDN_DRV_GIGASET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_CAPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_GIGASET_BASE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_M105 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_M101 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIGASET_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Industrial I/O support +CONFIG_IIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IIO_BUFFER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IIO_BUFFER_CB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_KFIFO_BUF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_TRIGGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IIO_CONSUMERS_PER_TRIGGER policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_IIO_SW_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SW_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_SENSORS_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_IIO_CROS_EC_SENSORS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Accelerometers +CONFIG_BMA180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMA220 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_ACCEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD06 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD09 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DMARD10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_ACCEL_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_ACCEL_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_ACCEL_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXSD9_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KXCJK1013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MC3230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7455_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7455_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA7660 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA8452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA9551 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMA9553 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MXC4005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MXC6255 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCA3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK8312 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK8BA50 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Amplifiers +CONFIG_AD8366 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Analog to digital converters +CONFIG_AD7266 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7291 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7298 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7476 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7766 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7791 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7793 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7887 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7923 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD799X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP20X_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCM_IPROC_ADC policy<{'arm64': 'm'}> +CONFIG_BERLIN2_ADC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CC10001_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CPCAP_ADC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DA9150_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DLN2_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENVELOPE_DETECTOR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_EXYNOS_ADC policy<{'armhf': 'm'}> +CONFIG_HI8435 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HX711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INA2XX_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IMX7D_ADC policy<{'armhf-generic': 'm'}> +CONFIG_LP8788_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2471 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2485 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2497 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX11100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1118 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX1363 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX9611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP320X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP3422 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIATEK_MT6577_AUXADC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MEN_Z188_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MESON_SARADC policy<{'armhf': 'm'}> +CONFIG_NAU7802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PALMAS_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_PM8XXX_XOADC policy<{'armhf': 'm'}> +CONFIG_QCOM_SPMI_IADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_SPMI_VADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RCAR_GYRO_ADC policy<{'armhf': 'm'}> +CONFIG_ROCKCHIP_SARADC policy<{'armhf': 'm'}> +CONFIG_STX104 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SUN4I_GPADC policy<{'arm64': 'n'}> +CONFIG_TI_ADC081C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC0832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC084S021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC12138 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC108S102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC128S052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADC161S626 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS1015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS7950 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_ADS8688 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TI_AM335X_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_TLC4541 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL4030_MADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL6030_GPADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VF610_ADC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIPERBOARD_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Chemical Sensors +CONFIG_ATLAS_PH_SENSOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CCS811 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IAQCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VZ89X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Counters +CONFIG_104_QUAD_8 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital gyroscope sensors +CONFIG_ADIS16080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16136 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16260 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADXRS450 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMG160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_GYRO_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPU3050_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_GYRO_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ITG3200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital potentiometers +CONFIG_DS1803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5487 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4131 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4531 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPL0102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital potentiostats +CONFIG_LMP91000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Digital to analog converters +CONFIG_AD5064 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5380 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5446 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5449 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5592R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5593R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5504 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5624R_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTC2632 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5686 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5755 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5764 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD5791 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CIO_DAC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AD8801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DPOT_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DS4424 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_M62332 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX517 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX5821 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4725 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP4922 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_DAC082S085 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VF610_DAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL >> Clock Generator/Distribution +CONFIG_AD9523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Frequency Synthesizers DDS/PLL >> Phase-Locked Loop (PLL) frequency synthesizers +CONFIG_ADF4350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Health Sensors + +# Menu: Device Drivers >> Industrial I/O support >> Health Sensors >> Heart Rate Monitors +CONFIG_AFE4403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AFE4404 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX30100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX30102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Hid Sensor IIO Common +CONFIG_HID_SENSOR_IIO_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_IIO_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Humidity sensors +CONFIG_AM2315 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DHT11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDC100X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_HUMIDITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTS221 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HTU21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI7005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI7020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> IIO dummy driver +CONFIG_IIO_SIMPLE_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SIMPLE_DUMMY_EVENTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IIO_SIMPLE_DUMMY_BUFFER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_IIO_SIMPLE_DUMMY_EVENTS note +CONFIG_IIO_SIMPLE_DUMMY_BUFFER note + +# Menu: Device Drivers >> Industrial I/O support >> Inclinometer sensors +CONFIG_HID_SENSOR_INCLINOMETER_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_DEVICE_ROTATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Inertial measurement units +CONFIG_ADIS16400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16480 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMI160_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMI160_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KMX61 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INV_MPU6050_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INV_MPU6050_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_LSM6DSX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Light sensors +CONFIG_ACPI_ALS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ADJD_S311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AL3320A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_APDS9300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_APDS9960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BH1750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BH1780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM32181 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CM3605 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CM36651 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_LIGHT_PROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_GP2AP020A00F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ISL29018 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_ISL29028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29125 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_ALS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_PROX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JSA1212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPR0521 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTR501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX44000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_OPT3001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PA12203001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SI1145 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STK3310 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCS3414 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCS3472 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TSL2563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSL2583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSL4531 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_US5182D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VCNL4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VEML6070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VL6180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Lightning sensors +CONFIG_AS3935 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Magnetometer sensors +CONFIG_AK8974 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_AK8975 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AK09911 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_MAGN_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMC150_MAGN_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAG3110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_MAGNETOMETER_3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC35240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_MAGN_3AXIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HMC5843_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_HMC5843_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Multiplexers +CONFIG_IIO_MUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Pressure sensors +CONFIG_ABP060MG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BMP280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_CROS_EC_BARO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_HID_SENSOR_PRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HP03 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL115_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL115_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MPL3115 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5611_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS5637 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_ST_PRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_T5403 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HP206C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZPA2326 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Proximity and distance sensors +CONFIG_LIDAR_LITE_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RFD77402 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRF04 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SX9500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRF08 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> SSP Sensor Common +CONFIG_IIO_SSP_SENSORS_COMMONS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SSP_SENSORHUB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Temperature sensors +CONFIG_MAXIM_THERMOCOUPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HID_SENSOR_TEMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLX90614 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMP006 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMP007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSYS01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TSYS02D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Industrial I/O support >> Triggers - standalone +CONFIG_IIO_HRTIMER_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_INTERRUPT_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_TIGHTLOOP_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IIO_SYSFS_TRIGGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> IndustryPack bus support +CONFIG_IPACK_BUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BOARD_TPCI200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIAL_IPOCTAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> InfiniBand support +CONFIG_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_USER_MAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_USER_ACCESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_EXP_USER_ACCESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_ON_DEMAND_PAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INFINIBAND_MTHCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_MTHCA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_QIB policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_QIB_DCA policy<{'amd64': 'y'}> +CONFIG_INFINIBAND_CXGB3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_CXGB3_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INFINIBAND_CXGB4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_I40IW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLX4_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX5_INFINIBAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_NES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_NES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INFINIBAND_OCRDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INFINIBAND_VMWARE_PVRDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_INFINIBAND_USNIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INFINIBAND_HNS policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_HNS_HIP06 policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_HNS_HIP08 policy<{'arm64': 'm'}> +CONFIG_INFINIBAND_IPOIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_IPOIB_CM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INFINIBAND_IPOIB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INFINIBAND_SRP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_SRPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_ISER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_ISERT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_OPA_VNIC policy<{'amd64': 'm'}> +CONFIG_INFINIBAND_RDMAVT policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDMA_RXE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INFINIBAND_HFI1 policy<{'amd64': 'm'}> +CONFIG_HFI1_DEBUG_SDMA_ORDER policy<{'amd64': 'n'}> +CONFIG_SDMA_VERBOSITY policy<{'amd64': 'n'}> +CONFIG_INFINIBAND_QEDR policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_INFINIBAND_BNXT_RE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> Input device support + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) +CONFIG_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_INPUT_LEDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_FF_MEMLESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_POLLDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_SPARSEKMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MATRIXKMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_JOYDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_EVBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Joysticks/Gamepads +CONFIG_INPUT_JOYSTICK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_A3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_ADI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_COBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GF2K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GRIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GRIP_MP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GUILLEMOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_INTERACT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SIDEWINDER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TMDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_IFORCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_IFORCE_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_IFORCE_232 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_WARRIOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_MAGELLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SPACEORB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_SPACEBALL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_STINGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TWIDJOY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_ZHENHUA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_DB9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_GAMECON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_TURBOGRAFX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_AS5011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_JOYDUMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_XPAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_XPAD_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_XPAD_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JOYSTICK_WALKERA0701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_PSXPAD_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JOYSTICK_PSXPAD_SPI_FF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Keyboards +CONFIG_INPUT_KEYBOARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KEYBOARD_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ADP5589 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_ATKBD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KEYBOARD_QT1070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_QT2160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_DLINK_DIR685 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LKKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_GPIO_POLLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TCA6416 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TCA8418 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MATRIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LM8323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_LM8333 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MAX7359 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MCS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_MPR121 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SNVS_PWRKEY policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_IMX policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_NEWTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_OPENCORES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_PMIC8XXX policy<{'armhf': 'm'}> +CONFIG_KEYBOARD_SAMSUNG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_KEYBOARD_STOWAWAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SUNKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SH_KEYSC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_KEYBOARD_STMPE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_SUN4I_LRADC policy<{'arm64': 'n'}> +CONFIG_KEYBOARD_OMAP4 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TC3589X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TM2_TOUCHKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_XTKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_KEYBOARD_CAP11XX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_KEYBOARD_BCM policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mice +CONFIG_INPUT_MOUSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_APPLETOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_BCM5974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_CYAPA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_ELAN_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_ELAN_I2C_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_ELAN_I2C_SMBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_INPORT policy<{'i386': 'n'}> +CONFIG_MOUSE_LOGIBM policy<{'i386': 'm'}> +CONFIG_MOUSE_PC110PAD policy<{'i386': 'm'}> +CONFIG_MOUSE_VSXXXAA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_SYNAPTICS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_SYNAPTICS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_MOUSE_INPORT note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mice >> PS/2 mouse +CONFIG_MOUSE_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOUSE_PS2_ALPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_BYD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_LOGIPS2PP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SYNAPTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_CYPRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_LIFEBOOK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MOUSE_PS2_TRACKPOINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_ELANTECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_SENTELIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_TOUCHKIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_FOCALTECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MOUSE_PS2_VMMOUSE policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Miscellaneous devices +CONFIG_INPUT_MISC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_88PM860X_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_88PM80X_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AD714X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ARIZONA_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ATMEL_CAPTOUCH policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_BMA150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_E3X0_BUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCSPKR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PM8941_PWRKEY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_INPUT_PM8XXX_VIBRATOR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_INPUT_PMIC8XXX_PWRKEY policy<{'armhf': 'm'}> +CONFIG_INPUT_MAX77693_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MAX8925_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MAX8997_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MC13783_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_MMA8450 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_APANEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INPUT_GP2A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_BEEPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_TILT_POLLED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CPCAP_PWRBUTTON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_WISTRON_BTNS policy<{'i386': 'm'}> +CONFIG_INPUT_ATLAS_BTNS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INPUT_ATI_REMOTE2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KEYSPAN_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KXTJ9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_KXTJ9_POLLED_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_INPUT_POWERMATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_YEALINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CM109 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_REGULATOR_HAPTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_RETU_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TPS65218_PWRBUTTON policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_AXP20X_PEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL4030_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL4030_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_TWL6040_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_UINPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_PALMAS_PWRBUTTON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCF50633_PMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCF8574 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PWM_BEEPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PWM_VIBRA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_RK805_PWRKEY policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_GPIO_ROTARY_ENCODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9052_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9055_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DA9063_ONKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_WM831X_ON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_ADXL34X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_IMS_PCU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CMA3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_CMA3000_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_XEN_KBDDEV_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_INPUT_IDEAPAD_SLIDEBAR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_SOC_BUTTON_ARRAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV260X_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV2665_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_DRV2667_HAPTICS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INPUT_HISI_POWERKEY policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_INPUT_UINPUT mark note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Mouse interface +CONFIG_INPUT_MOUSEDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_MOUSEDEV_PSAUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INPUT_MOUSEDEV_SCREEN_X policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '1024'}> +CONFIG_INPUT_MOUSEDEV_SCREEN_Y policy<{'amd64': '768', 'arm64': '768', 'armhf': '768', 'i386': '768', 'ppc64el': '768'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Synaptics RMI4 bus support +CONFIG_RMI4_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_SMB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMI4_F03 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F11 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F12 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F30 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F34 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F54 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RMI4_F55 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Tablets +CONFIG_INPUT_TABLET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TABLET_USB_ACECAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_AIPTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_GTCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_HANWANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_KBTAB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_USB_PEGASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TABLET_SERIAL_WACOM4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens +CONFIG_INPUT_TOUCHSCREEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ADS7846 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7877 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AD7879_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_AR1021_I2C policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ATMEL_MXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_AUO_PIXCIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_BU21013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CY8CTMG110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_CYTTSP4_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DA9034 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_DYNAPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HAMPSHIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EETI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EGALAX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EGALAX_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EXC3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_FUJITSU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_GOODIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HIDEEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ILI210X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_IPROC policy<{'arm64': 'm'}> +CONFIG_TOUCHSCREEN_S6SY761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_GUNZE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EKTF2127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ELAN policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ELO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WACOM_W8001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WACOM_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MAX11801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MCS5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MMS114 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MELFAS_MIP4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_IMX6UL_TSC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_INEXIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MK712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_HTCPEN policy<{'i386': 'm'}> +CONFIG_TOUCHSCREEN_PENMOUNT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_EDT_FT5X06 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHRIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHWIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TI_AM335X_TSC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_UCB1400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_PIXCIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WDT87XX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TOUCHIT213 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TS4800 policy<{'armhf-generic': 'm'}> +CONFIG_TOUCHSCREEN_TSC_SERIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2004 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TSC2007_IIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_RM_TS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SILEAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SIS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ST1232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_STMFTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_STMPE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SUN4I policy<{'arm64': 'n'}> +CONFIG_TOUCHSCREEN_SUR40 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SURFACE3_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_SX8654 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ZET6223 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ZFORCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_COLIBRI_VF50 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_ROHM_BU21023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_TOUCHSCREEN_ELAN mark note + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens >> Support for WM97xx AC97 touchscreen controllers +CONFIG_TOUCHSCREEN_WM97XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_WM9705 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_WM9712 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_WM9713 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Generic input layer (needed for keyboard, mouse, ...) >> Touchscreens >> USB Touchscreen Driver +CONFIG_TOUCHSCREEN_USB_COMPOSITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOUCHSCREEN_USB_EGALAX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_PANJIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_3M policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ITM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ETURBO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GUNZE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_DMC_TSC10 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_IRTOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_IDEALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_GOTOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_JASTEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ELO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_E2I policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ZYTRONIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_NEXIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TOUCHSCREEN_USB_EASYTOUCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports >> Gameport support +CONFIG_GAMEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_GAMEPORT_NS558 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_L4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_EMU10K1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GAMEPORT_FM801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Input device support >> Hardware I/O ports >> Serial I/O support +CONFIG_SERIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SERIO_I8042 policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIO_SERPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_CT82C710 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIO_PARKBD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_AMBAKMI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SERIO_PCIPS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_LIBPS2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SERIO_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_XILINX_XPS_PS2 policy<{'ppc64el': 'm'}> +CONFIG_SERIO_ALTERA_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_PS2MULT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_ARC_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SERIO_APBPS2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_HYPERV_KEYBOARD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SERIO_SUN4I_PS2 policy<{'arm64': 'n'}> +CONFIG_SERIO_GPIO_PS2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USERIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Intel(R) Trace Hub controller +CONFIG_INTEL_TH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_GTH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_STH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_MSU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_PTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_TH_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> LED Support +CONFIG_NEW_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LEDS_LP55XX_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support +CONFIG_LEDS_CLASS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_APU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_BCM6328 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BCM6358 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3530 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM3642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MT6323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NET48XX policy<{'i386': 'm'}> +CONFIG_LEDS_WRAP policy<{'i386': 'm'}> +CONFIG_LEDS_PCA9532 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PCA9532_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP3944 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP3952 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5521 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP5562 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LP8860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_CLEVO_MAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_PCA955X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PCA955X_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_PCA963X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_WM831X_STATUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_DAC124S085 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_REGULATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BD2802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_INTEL_SS4200 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LEDS_LT3593 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_ADP5520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NS2 policy<{'armhf': 'm'}> +CONFIG_LEDS_ASIC3 policy<{'armhf': 'y'}> +CONFIG_LEDS_TCA6507 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TLC591XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_LM355x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_OT200 policy<{'i386': 'm'}> +CONFIG_LEDS_MENF21BMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_IS31FL319X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_IS31FL32XX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_BLINKM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_POWERNV policy<{'ppc64el': 'm'}> +CONFIG_LEDS_SYSCON policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_PM8058 policy<{'armhf': 'm'}> +CONFIG_LEDS_MLXCPLD policy<{'amd64': 'm'}> +CONFIG_LEDS_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_NIC78BX policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support >> LED Flash Class Support +CONFIG_LEDS_CLASS_FLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_AAT1290 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_AS3645A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_MAX77693 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_KTD2692 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> LED Support >> LED Class Support >> LED Trigger support +CONFIG_LEDS_TRIGGERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_TIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_ONESHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_DISK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_HEARTBEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_BACKLIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_CPU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LEDS_TRIGGER_ACTIVITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_DEFAULT_ON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_TRANSIENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_CAMERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LEDS_TRIGGER_PANIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> MCB support +CONFIG_MCB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MCB_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCB_LPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> MIPS Platform Specific Device Drivers + +# Menu: Device Drivers >> MMC/SD/SDIO card support +CONFIG_MMC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PWRSEQ_EMMC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWRSEQ_SD8787 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWRSEQ_SIMPLE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BLOCK policy<{'amd64': 'm', 'arm64': 'y', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BLOCK_MINORS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_SDIO_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MMC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MMC_ARMMMCI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MMC_QCOM_DML policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MMC_MESON_GX policy<{'armhf': 'm'}> +CONFIG_MMC_MESON_MX_SDIO policy<{'armhf': 'm'}> +CONFIG_MMC_OMAP policy<{'armhf': 'm'}> +CONFIG_MMC_OMAP_HS policy<{'armhf': 'y'}> +CONFIG_MMC_WBSD policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_MXC policy<{'armhf-generic': 'm'}> +CONFIG_MMC_TIFM_SD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_MVSDIO policy<{'armhf': 'm'}> +CONFIG_MMC_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDRICOH_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MMC_TMIO policy<{'armhf': 'm'}> +CONFIG_MMC_SDHI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHI_SYS_DMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHI_INTERNAL_DMAC policy<{'arm64': 'm'}> +CONFIG_MMC_CB710 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_VIA_SDMMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_CAVIUM_THUNDERX policy<{'arm64': 'm'}> +CONFIG_MMC_SH_MMCIF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_VUB300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_USHC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_USDHI6ROL0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_REALTEK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_REALTEK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SUNXI policy<{'arm64': 'm'}> +CONFIG_MMC_TOSHIBA_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_BCM2835 policy<{'arm64': 'm'}> +CONFIG_MMC_MTK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_MMC_BLOCK note +CONFIG_MMC_TEST flag +CONFIG_MMC_OMAP_HS note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Samsung S3C SD/MMC transfer code + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support +CONFIG_MMC_SDHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_RICOH_MMC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MMC_SDHCI_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_MMC_SDHCI_S3C policy<{'armhf': 'm'}> +CONFIG_MMC_SDHCI_S3C_DMA policy<{'armhf': 'y'}> +# +CONFIG_MMC_SDHCI note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Secure Digital Host Controller Interface support >> SDHCI platform and OF driver helper +CONFIG_MMC_SDHCI_PLTFM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_ARASAN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_OF_AT91 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_ESDHC policy<{'arm64': 'm', 'armhf-generic': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OF_HLWD policy<{'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_CADENCE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_ESDHC_IMX policy<{'armhf-generic': 'y'}> +CONFIG_MMC_SDHCI_DOVE policy<{'armhf': 'm'}> +CONFIG_MMC_SDHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_MMC_SDHCI_PXAV3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_F_SDH30 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_IPROC policy<{'arm64': 'm'}> +CONFIG_MMC_SDHCI_MSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_SDHCI_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_MMC_SDHCI_XENON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MMC_SDHCI_OMAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_MMC_SDHCI_PLTFM note + +# Menu: Device Drivers >> MMC/SD/SDIO card support >> Synopsys DesignWare Memory Card Interface +CONFIG_MMC_DW policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_PLTFM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_EXYNOS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_K3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_PCI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MMC_DW_ROCKCHIP policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers +CONFIG_MACINTOSH_DRIVERS policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC_EMUMOUSEBTN policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers >> Apple Desktop Bus (ADB) support + +# Menu: Device Drivers >> Macintosh device drivers >> New PowerMac thermal control infrastructure +CONFIG_WINDFARM policy<{'ppc64el': 'm'}> + +# Menu: Device Drivers >> Macintosh device drivers >> Support for PMU based PowerMacs + +# Menu: Device Drivers >> Mailbox Hardware Support +CONFIG_MAILBOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ARM_MHU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PLATFORM_MHU policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PL320_MBOX policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_OMAP2PLUS_MBOX policy<{'armhf': 'm'}> +CONFIG_OMAP_MBOX_KFIFO_SIZE policy<{'armhf': '256'}> +CONFIG_ROCKCHIP_MBOX policy<{'armhf': 'y'}> +CONFIG_PCC policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_ALTERA_MBOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCM2835_MBOX policy<{'arm64': 'y'}> +CONFIG_HI6220_MBOX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MAILBOX_TEST policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_APCS_IPC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_XGENE_SLIMPRO_MBOX policy<{'arm64': 'm'}> +CONFIG_BCM_PDC_MBOX policy<{'arm64': 'm'}> +CONFIG_BCM_FLEXRM_MBOX policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Memory Controller drivers +CONFIG_MEMORY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ARM_PL172_MPMC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_TI_EMIF policy<{'armhf': 'm'}> +CONFIG_OMAP_GPMC_DEBUG policy<{'armhf': 'n'}> +CONFIG_MVEBU_DEVBUS policy<{'armhf': 'y'}> +CONFIG_TEGRA20_MC policy<{'armhf-generic': 'y'}> +CONFIG_SAMSUNG_MC policy<{'armhf': 'y'}> +CONFIG_EXYNOS_SROM policy<{'armhf': 'y'}> +CONFIG_TEGRA_MC policy<{'armhf-generic': 'y'}> +CONFIG_TEGRA124_EMC policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support +CONFIG_MTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MTD_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CMDLINE_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_AFS_PARTS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_OF_PARTS policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'm'}> +CONFIG_MTD_AR7_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BLOCK_RO policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFTL_RW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_INFTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RFD_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SSFDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SM_FTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_OOPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SWAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PARTITIONED_MASTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_ECC_SMC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_MTD note +CONFIG_MTD_CMDLINE_PARTS flag +CONFIG_MTD_BLOCK note +CONFIG_MTD_OF_PARTS note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Enable UBI - Unsorted block images +CONFIG_MTD_UBI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_UBI_WL_THRESHOLD policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096'}> +CONFIG_MTD_UBI_BEB_LIMIT policy<{'amd64': '20', 'arm64': '20', 'armhf': '20', 'i386': '20', 'ppc64el': '20'}> +CONFIG_MTD_UBI_FASTMAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_UBI_GLUEBI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_UBI_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> LPDDR & LPDDR2 PCM memory drivers +CONFIG_MTD_LPDDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_QINFO_PROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_LPDDR2_NVM policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access +CONFIG_MTD_PHYSMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHYSMAP_COMPAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_PHYSMAP_OF policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHYSMAP_OF_VERSATILE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_PHYSMAP_OF_GEMINI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_SCx200_DOCFLASH policy<{'i386': 'm'}> +CONFIG_MTD_AMD76XROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_ICHXROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_ESB2ROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_CK804XROM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_SCB2_FLASH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_NETtel policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_L440GX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_IMPA7 policy<{'armhf': 'm'}> +CONFIG_MTD_INTEL_VR_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PLATRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access >> Maximum mappable memory available for flash IO + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Mapping drivers for chip access >> Support non-linear mappings of flash chips +CONFIG_MTD_COMPLEX_MAPPINGS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_SBC_GXX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MTD_PCMCIA_ANONYMOUS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MTD_GPIO_ADDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_LATCH_ADDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> NAND Device Support +CONFIG_MTD_NAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_ECC_BCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_NAND_DENALI_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_DENALI_DT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_OMAP2 policy<{'armhf': 'y'}> +CONFIG_MTD_NAND_OMAP_BCH policy<{'armhf': 'y'}> +CONFIG_MTD_NAND_RICOH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_TANGO policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_DISKONCHIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_NAND_DOCG4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_CAFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_CS553X policy<{'i386': 'm'}> +CONFIG_MTD_NAND_PXA3xx policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_TMIO policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_NANDSIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_GPMI_NAND policy<{'armhf-generic': 'm'}> +CONFIG_MTD_NAND_BRCMNAND policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_NAND_ORION policy<{'armhf': 'm'}> +CONFIG_MTD_NAND_FSL_IFC policy<{'arm64': 'm'}> +CONFIG_MTD_NAND_VF610_NFC policy<{'armhf-generic': 'n'}> +CONFIG_MTD_NAND_MXC policy<{'armhf-generic': 'm'}> +CONFIG_MTD_NAND_SUNXI policy<{'arm64': 'n'}> +CONFIG_MTD_NAND_HISI504 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTD_NAND_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_MTD_NAND note +CONFIG_MTD_NAND_OMAP2 note +CONFIG_MTD_NAND_OMAP_BCH note +CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> OneNAND Device Support +CONFIG_MTD_ONENAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ONENAND_VERIFY_WRITE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_ONENAND_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ONENAND_OMAP2 policy<{'armhf-generic': 'm'}> +CONFIG_MTD_ONENAND_OTP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_ONENAND_2X_PROGRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_MTD_ONENAND_VERIFY_WRITE note +CONFIG_MTD_ONENAND_OTP flag + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Partition parsers +CONFIG_MTD_SHARPSL_PARTS policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers +CONFIG_MTD_CFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_JEDECPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_INTELEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_AMDSTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_CFI_STAA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_ABSENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options +CONFIG_MTD_CFI_ADV_OPTIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options >> Flash cmd/query data swapping + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RAM/ROM/Flash chip drivers >> Flash chip driver advanced configuration options >> Specific CFI Flash geometry selection +CONFIG_MTD_MAP_BANK_WIDTH_1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_MAP_BANK_WIDTH_8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_MAP_BANK_WIDTH_16 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_MAP_BANK_WIDTH_32 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CFI_I1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_CFI_I2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_CFI_I4 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_CFI_I8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> RedBoot partition table parsing +CONFIG_MTD_REDBOOT_PARTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK policy<{'amd64': '-1', 'arm64': '-1', 'armhf': '-1', 'i386': '-1', 'ppc64el': '-1'}> +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_REDBOOT_PARTS_READONLY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> SPI-NOR device support +CONFIG_MTD_SPI_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MT81xx_NOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_CADENCE_QUADSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_FSL_QUADSPI policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_SPI_HISI_SFC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_INTEL_SPI_PCI policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SPI_INTEL_SPI_PLATFORM policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_SPI_INTEL_SPI_PCI mark note +CONFIG_SPI_INTEL_SPI_PLATFORM mark note + +# Menu: Device Drivers >> Memory Technology Device (MTD) support >> Self-contained MTD device drivers +CONFIG_MTD_PMC551 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PMC551_BUGFIX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_PMC551_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_DATAFLASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_DATAFLASH_WRITE_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MTD_DATAFLASH_OTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MTD_M25P80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MCHP23K256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SST25L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_BCM47XXSFLASH policy<{'armhf': 'm'}> +CONFIG_MTD_SLRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_PHRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_MTDRAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTDRAM_TOTAL_SIZE policy<{'amd64': '4096', 'arm64': '4096', 'armhf': '4096', 'i386': '4096', 'ppc64el': '4096'}> +CONFIG_MTDRAM_ERASE_SIZE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_MTD_BLOCK2MTD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_POWERNV_FLASH policy<{'ppc64el': 'm'}> +CONFIG_MTD_DOCG3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Microsoft Hyper-V guest support +CONFIG_HYPERV policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_UTILS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_BALLOON policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Misc devices +CONFIG_AD525X_DPOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD525X_DPOT_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD525X_DPOT_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DUMMY_IRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IBM_ASM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PHANTOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INTEL_MID_PTI policy<{'i386': 'm'}> +CONFIG_SGI_IOC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TIFM_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TIFM_7XX1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ICS932S401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENCLOSURE_SERVICES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CS5535_MFGPT policy<{'i386': 'n'}> +CONFIG_HP_ILO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QCOM_COINCELL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_APDS9802ALS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29003 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ISL29020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_TSL2550 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_BH1770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_APDS990X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HMC6352 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DS1682 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VMWARE_BALLOON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCH_PHUB policy<{'i386': 'm'}> +CONFIG_USB_SWITCH_FSA9480 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LATTICE_ECP3_CONFIG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VEXPRESS_SYSCFG policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PCI_ENDPOINT_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CB710_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CB710_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SENSORS_LIS3_SPI policy<{'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SENSORS_LIS3_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALTERA_STAPL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_INTEL_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_ME policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_TXE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VMWARE_VMCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ECHO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CXL policy<{'ppc64el': 'm'}> +CONFIG_CXL_BIMODAL policy<{'ppc64el': 'y'}> +# +CONFIG_CS5535_MFGPT note + +# Menu: Device Drivers >> Misc devices >> EEPROM support +CONFIG_EEPROM_AT24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_AT25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_MAX6875 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_93CX6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EEPROM_93XX46 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EEPROM_IDT_89HPESX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Misc devices >> GenWQE PCIe Accelerator +CONFIG_GENWQE policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY policy<{'amd64': '0', 'arm64': '0', 'ppc64el': '0', 's390x': '0'}> + +# Menu: Device Drivers >> Misc devices >> Intel MIC & related support +CONFIG_INTEL_MIC_BUS policy<{'amd64': 'm'}> +CONFIG_SCIF_BUS policy<{'amd64': 'm'}> +CONFIG_SCIF policy<{'amd64': 'm'}> +CONFIG_MIC_COSM policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Intel MIC & related support >> VOP Bus Driver +CONFIG_VOP_BUS policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_HOST policy<{'amd64': 'm'}> +CONFIG_INTEL_MIC_CARD policy<{'amd64': 'm'}> +CONFIG_VOP policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Silicon Labs C2 port support +CONFIG_C2PORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_C2PORT_DURAMAR_2150 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Misc devices >> Texas Instruments shared transport line discipline +CONFIG_TI_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Multifunction device drivers +CONFIG_MFD_CS5535 policy<{'i386': 'm'}> +CONFIG_MFD_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SUN4I_GPADC policy<{'arm64': 'm'}> +CONFIG_MFD_AS3711 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PMIC_ADP5520 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_AAT2870_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_ATMEL_FLEXCOM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_ATMEL_HLCDC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_BCM590XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_AC100 policy<{'arm64': 'n'}> +CONFIG_MFD_AXP20X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_AXP20X_RSB policy<{'arm64': 'm'}> +CONFIG_MFD_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_CROS_EC_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_CROS_EC_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_MFD_ASIC3 policy<{'armhf': 'y'}> +CONFIG_PMIC_DA903X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9052_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9052_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9055 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9062 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_DA9063 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_EXYNOS_LPASS policy<{'armhf': 'm'}> +CONFIG_MFD_MC13XXX_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_MC13XXX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_HI6421_PMIC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_HI655X_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HTC_PASIC3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HTC_I2CPLD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_INTEL_QUARK_I2C_GPIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LPC_ICH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_LPC_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_INTEL_SOC_PMIC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_SOC_PMIC_BXTWC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SOC_PMIC_CHTWC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_SOC_PMIC_CHTDC_TI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_LPSS_ACPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_LPSS_PCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MFD_INTEL_MSIC policy<{'i386': 'y'}> +CONFIG_MFD_JANZ_CMODIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_KEMPLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_88PM800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_88PM805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_88PM860X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX14577 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77620 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77686 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77693 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX77843 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_MAX8925 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8997 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MAX8998 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_MENF21BMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_EZX_PCAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_VIPERBOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RETU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCF50633_ADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCF50633_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UCB1400_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_PM8XXX policy<{'armhf': 'm'}> +CONFIG_MFD_QCOM_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MFD_SPMI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MFD_RDC321X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MFD_RTSX_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RTSX_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RC5T583 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_RN5T618 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SEC_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SI476X_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SM501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_SM501_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_SMSC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SC27XX_PMIC policy<{'arm64': 'm'}> +CONFIG_ABX500_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AB3100_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AB3100_OTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_SUN6I_PRCM policy<{'arm64': 'y'}> +CONFIG_MFD_SYSCON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MFD_TI_AM335X_TSCADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MFD_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_LP8788 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TI_LMU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_OMAP_USB_HOST policy<{'armhf': 'y'}> +CONFIG_MFD_PALMAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TPS6105X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPS65010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65090 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65217 policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'n'}> +CONFIG_MFD_TPS68470 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_MFD_TI_LP873X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TI_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TPS6586X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65910 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65912_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS65912_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_TPS80031 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL4030_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL4030_POWER policy<{'armhf': 'y'}> +CONFIG_MFD_TWL4030_AUDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_TWL6040_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WL1273_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_LM3533 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_MFD_TC3589X policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_T7L66XB policy<{'armhf': 'y'}> +CONFIG_MFD_TC6387XB policy<{'armhf': 'y'}> +CONFIG_MFD_TC6393XB policy<{'armhf': 'y'}> +CONFIG_MFD_VX855 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MFD_ARIZONA_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_ARIZONA_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_CS47L24 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM5102 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM5110 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8997 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8998 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8400 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM831X_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM831X_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8350_I2C policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MFD_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MFD_VEXPRESS_SYSREG policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_MFD_SM501 note +CONFIG_MFD_TPS65217 mark note + +# Menu: Device Drivers >> Multifunction device drivers >> Multimedia Capabilities Port drivers + +# Menu: Device Drivers >> Multifunction device drivers >> STMicroelectronics STMPE Interface Drivers +CONFIG_STMPE_I2C policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_STMPE_SPI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support +CONFIG_MEDIA_SUPPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEDIA_ANALOG_TV_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_DIGITAL_TV_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_RADIO_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CEC_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CEC_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CONTROLLER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_CONTROLLER_DVB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_V4L2_SUBDEV_API policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_ADV_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_FIXED_MINOR_RANGES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_PCI_SKELETON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_V4L2_FLASH_LED_CLASS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_MAX_ADAPTERS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_DVB_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_DEMUX_SECTION_LOSS_LOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SMS_SDIO_DRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_FIREDTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CYPRESS_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMS_SIANO_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SMS_SIANO_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> CEC platform devices +CONFIG_CEC_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_MESON_AO_CEC policy<{'armhf': 'm'}> +CONFIG_CEC_GPIO policy<{'amd64-lowlatency': 'm', 'i386-lowlatency': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_CEC policy<{'armhf': 'm'}> +CONFIG_VIDEO_TEGRA_HDMI_CEC policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support +CONFIG_MEDIA_CAMERA_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> Media test drivers +CONFIG_V4L_TEST_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_VIMC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_VIVID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VIVID_CEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_VIVID_MAX_DEVS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_VIDEO_VIM2M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> Memory-to-memory multimedia devices +CONFIG_V4L_MEM2MEM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CODA policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_MEDIATEK_VPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_MEM2MEM_DEINTERLACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_G2D policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_JPEG policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_S5P_MFC policy<{'armhf': 'm'}> +CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC policy<{'armhf': 'm'}> +CONFIG_VIDEO_SH_VEU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_RENESAS_FDP1 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_JPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_FCP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_RENESAS_VSP1 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_ROCKCHIP_RGA policy<{'armhf': 'm'}> +CONFIG_VIDEO_TI_VPE policy<{'armhf': 'm'}> +CONFIG_VIDEO_TI_VPE_DEBUG policy<{'armhf': 'n'}> +CONFIG_VIDEO_QCOM_VENUS policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> V4L platform devices +CONFIG_V4L_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CAFE_CCIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VIA_CAMERA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_OMAP2_VOUT policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_SH_VOU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_MUX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OMAP3 policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_OMAP3_DEBUG policy<{'armhf-generic': 'n'}> +CONFIG_VIDEO_QCOM_CAMSS policy<{'arm64': 'm'}> +CONFIG_SOC_CAMERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SH_MOBILE_CEU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_XILINX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_XILINX_TPG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_XILINX_VTC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_RCAR_VIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VIDEO_TI_CAL policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Cameras/video grabbers support >> V4L platform devices >> Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver +CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> Multimedia support >> Customise DVB Frontends +CONFIG_DVB_STB0899 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STB6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV090x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6110x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MXL5XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_M88DS3103 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRXK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA18271C2DD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI2165 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MN88472 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MN88473 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24123 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MT312 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10036 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10039 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0288 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STB6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0299 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV6110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA8083 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA8261 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_VES1X93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_ITD1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_CX24113 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA826X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUA6100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24116 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24117 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX24120 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI21XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TS2020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DS3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MB86A16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10071 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP8870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP887X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX22700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CX22702 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRXD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_L64781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA1004X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NXT6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MT352 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZL10353 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB3000MB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB3000MC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB7000M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB7000P policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10048 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AF9013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_EC100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0367 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2820R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2841ER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_RTL2832_SDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SI2168 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ZD1301_DEMOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_VES1820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10021 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA10023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_STV0297 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NXT200X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_OR51211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_OR51132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BCM3510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT330X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT3305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGDT3306A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LG2160 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1409 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AU8522_DTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AU8522_V4L policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S5H1411 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_S921 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DIB8000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MB86A20S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TC90522 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PLL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_DIB0070 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TUNER_DIB0090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DRX39XYJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBH25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBP21 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LNBP22 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6405 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6421 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ISL6423 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_A8293 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_SP2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_LGS8GXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ATBM8830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TDA665x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_IX2505V policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_M88RS2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AF9033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HORUS3A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_ASCOT2E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HELENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DUMMY_FE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_DVB_DUMMY_FE note + +# Menu: Device Drivers >> Multimedia support >> DVB platform devices +CONFIG_DVB_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_C8SECTPFE policy<{'armhf': 'n'}> +# +CONFIG_DVB_C8SECTPFE flag + +# Menu: Device Drivers >> Multimedia support >> I2C Encoders, decoders, sensors and other helper chips +CONFIG_VIDEO_TVAUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TDA7432 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TDA9840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TEA6415C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TEA6420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MSP3400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS3308 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS5345 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CS53L32A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UDA1342 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_WM8775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_WM8739 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VP27SMPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SONY_BTF_MPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA6588 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ADV7604 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ADV7842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_BT819 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_BT856 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_BT866 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_KS0127 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA7110 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA711X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TVP5150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW2804 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW9903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW9906 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_VPX3220 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SAA717X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7185 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7170 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7175 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ADV7511 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV2640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV7640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_OV7670 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MT9M111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MT9V011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UPD64031A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_UPD64083 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA6752HS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_M52790 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters +CONFIG_MEDIA_PCI_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_MEYE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_SOLO6X10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW5864 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW68 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TW686X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_ZORAN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_DC30 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_HEXIUM_GEMINI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_HEXIUM_ORION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_MXB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_DT3155 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX18 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX18_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX23885 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_ALTERA_CI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25821 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX25821_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_BT848 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BT8XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_COBALT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AV7110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_AV7110_OSD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DVB_B2C2_FLEXCOP_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_PLUTO2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DM1105 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PT1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_PT3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MANTIS_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_MANTIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_HOPPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NGENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DDBRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_DDBRIDGE_MSIENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_SMIPCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_NETUP_UNIDVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Conexant 2388x (bt878 successor) support +CONFIG_VIDEO_CX88 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_BLACKBIRD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX88_ENABLE_VP3054 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Conexant cx23416/cx23415 MPEG encoder/decoder support +CONFIG_VIDEO_IVTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_IVTV_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_FB_IVTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Philips SAA7134 support +CONFIG_VIDEO_SAA7134 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_SAA7134_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_SAA7134_GO7007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> SAA7146 DVB cards (aka Budget, Nova-PCI) +CONFIG_DVB_BUDGET_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_CI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_AV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_BUDGET_PATCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media PCI Adapters >> Zoran ZR36060 +CONFIG_VIDEO_ZORAN_ZR36060 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_BUZ policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_DC10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_LML33 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_LML33R10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIDEO_ZORAN_AVS6EYES policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters +CONFIG_MEDIA_USB_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_VIDEO_CLASS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_PWC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PWC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_PWC_INPUT_EVDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CPIA2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ZR364XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STKWEBCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_S2255 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_USBTV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_PVRUSB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_PVRUSB2_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_PVRUSB2_DVB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_PVRUSB2_DEBUGIFC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_VIDEO_HDPVR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_USBVISION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_STK1160_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_LOADER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_GO7007_USB_S2250_BOARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_AU0828 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_AU0828_V4L2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_AU0828_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_TM6000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TM6000_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_TM6000_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TTUSB_BUDGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_TTUSB_DEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMS_USB_DRV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_AS102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AIRSPY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HACKRF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MSI2500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PULSE8_CEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RAINSHADOW_CEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Conexant cx231xx USB video capture support +CONFIG_VIDEO_CX231XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX231XX_RC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_CX231XX_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_CX231XX_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Empia EM28xx USB devices support +CONFIG_VIDEO_EM28XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_V4L2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_ALSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_DVB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_EM28XX_RC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> GSPCA based webcams +CONFIG_USB_GSPCA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_M5602 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STV06XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GL860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_BENQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_CONEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_CPIA1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_DTCS033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_ETOMS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_FINEPIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_JEILINJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_JL2005BCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_KINECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_KONICA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_MARS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_MR97310A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_NW80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV519 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV534 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_OV534_9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC207 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC7302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_PAC7311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SE401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SN9C2028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SN9C20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SONIXB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SONIXJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA505 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA506 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA508 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA561 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SPCA1528 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ905 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ905C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SQ930X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STK014 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STK1135 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_STV0680 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_SUNPLUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_T613 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TOPRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TOUPTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_TV8532 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_VC032X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_VICAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_XIRLINK_CIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GSPCA_ZC3XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Support for various USB DVB devices +CONFIG_DVB_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_USB_A800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIBUSB_MB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIBUSB_MB_FAULTY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DVB_USB_DIBUSB_MC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIB0700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_UMT_010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CXUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_M920X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DIGITV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_VP7045 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_VP702X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_GP8PSK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_NOVA_T_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_TTUSB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DTT200U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_OPERA1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9005 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9005_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_PCTV452E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DW2102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CINERGY_T2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DTV5100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_FRIIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AZ6027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_TECHNISAT_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Media USB Adapters >> Support for various USB DVB devices v2 +CONFIG_DVB_USB_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9015 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AF9035 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_ANYSEE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AU6610 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_AZ6007 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_CE6230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_EC168 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_GL861 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_LME2510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_MXL111SF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_RTL28XXU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_DVBSKY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_USB_ZD1301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters +CONFIG_RADIO_ADAPTERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RADIO_SI470X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SI470X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SI470X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SI476X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MR800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DSBR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_MAXIRADIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SHARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SHARK2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_KEENE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RAREMONO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MA901 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TEA5764 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_SAA7706H policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TEF6862 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RADIO_TIMBERDALE policy<{'i386': 'm'}> +CONFIG_RADIO_WL1273 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> ISA radio devices +CONFIG_V4L_RADIO_ISA_DRIVERS policy<{'i386': 'y'}> +CONFIG_RADIO_CADET policy<{'i386': 'm'}> +CONFIG_RADIO_RTRACK policy<{'i386': 'm'}> +CONFIG_RADIO_RTRACK2 policy<{'i386': 'm'}> +CONFIG_RADIO_AZTECH policy<{'i386': 'm'}> +CONFIG_RADIO_GEMTEK policy<{'i386': 'm'}> +CONFIG_RADIO_MIROPCM20 policy<{'i386': 'm'}> +CONFIG_RADIO_SF16FMI policy<{'i386': 'm'}> +CONFIG_RADIO_SF16FMR2 policy<{'i386': 'm'}> +CONFIG_RADIO_TERRATEC policy<{'i386': 'm'}> +CONFIG_RADIO_TRUST policy<{'i386': 'm'}> +CONFIG_RADIO_TYPHOON policy<{'i386': 'm'}> +CONFIG_RADIO_ZOLTRIX policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> Silicon Labs Si4713 FM Radio with RDS Transmitter support +CONFIG_RADIO_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PLATFORM_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I2C_SI4713 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Radio Adapters >> Texas Instruments WL128x FM driver (ST based) +CONFIG_RADIO_WL128X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> SPI helper chips + +# Menu: Device Drivers >> Multimedia support >> Sensors used on soc_camera driver +CONFIG_SOC_CAMERA_IMX074 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9M001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9M111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9T031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9T112 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_MT9V022 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV5642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV772X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV9640 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_OV9740 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_RJ54N1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SOC_CAMERA_TW9910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support +CONFIG_MEDIA_SDR_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MEDIA_SUBDRV_AUTOSELECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_IR_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support >> Customize TV tuners +CONFIG_MEDIA_TUNER_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA8290 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA827X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18271 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA9887 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TEA5761 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TEA5767 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MSI001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT20XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2266 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MT2131 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_QT1010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC2028 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_XC4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL5005S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL5007T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MC44S803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MAX2165 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18218 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0011 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0012 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC0013 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TDA18212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_E4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_FC2580 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_M88RS6000T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_TUA9001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_SI2157 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_IT913X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_R820T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_MXL301RF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEDIA_TUNER_QM1D1C0042 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Multimedia support >> Software defined radio support >> SDR platform devices +CONFIG_SDR_PLATFORM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIDEO_RCAR_DRIF policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) +CONFIG_MD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BCACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCACHE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BCACHE_CLOSURES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) >> Device mapper support +CONFIG_BLK_DEV_DM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DM_MQ_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_DM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_DM_CRYPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_SNAPSHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_THIN_PROVISIONING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_CACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_CACHE_SMQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MIRROR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_LOG_USERSPACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_RAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ZERO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH_QL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_MULTIPATH_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_DELAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_UEVENT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DM_FLAKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_VERITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_VERITY_FEC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DM_SWITCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_LOG_WRITES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_INTEGRITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DM_ZONED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_BLK_DEV_DM mark note + +# Menu: Device Drivers >> Multiple devices driver support (RAID and LVM) >> RAID support +CONFIG_BLK_DEV_MD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MD_AUTODETECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MD_LINEAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID10 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_RAID456 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_MULTIPATH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'y'}> +CONFIG_MD_FAULTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MD_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Multiplexer drivers +CONFIG_MUX_ADG792A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MUX_GPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MUX_MMIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> NVDIMM (Non-Volatile Memory Device) Support +CONFIG_LIBNVDIMM policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BLK_DEV_PMEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ND_BLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BTT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NVDIMM_PFN policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_NVDIMM_DAX policy<{'amd64': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> NVME Support +CONFIG_BLK_DEV_NVME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVME_MULTIPATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVME_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> NVME Support >> NVMe Target support +CONFIG_NVME_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_LOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVME_TARGET_FCLOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> NVMEM Support +CONFIG_NVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NVMEM_IMX_IIM policy<{'armhf-generic': 'm'}> +CONFIG_NVMEM_IMX_OCOTP policy<{'armhf-generic': 'm'}> +CONFIG_MTK_EFUSE policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_QCOM_QFPROM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ROCKCHIP_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_BCM_OCOTP policy<{'arm64': 'm'}> +CONFIG_NVMEM_SUNXI_SID policy<{'arm64': 'm'}> +CONFIG_UNIPHIER_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_VF610_OCOTP policy<{'armhf-generic': 'n'}> +CONFIG_MESON_MX_EFUSE policy<{'armhf': 'm'}> +CONFIG_NVMEM_SNVS_LPGPR policy<{'armhf-generic': 'm'}> +# +CONFIG_NVMEM flag note + +# Menu: Device Drivers >> Network device support +CONFIG_NETDEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CAIF_TTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_SPI_SLAVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_SPI_SYNC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CAIF_HSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FDDI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DEFXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DEFXX_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SKFP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HIPPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NET_SB1000 policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_MDIO_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MDIO_BCM_IPROC policy<{'arm64': 'n'}> +CONFIG_MDIO_BCM_UNIMAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_BITBANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MDIO_BUS_MUX_BCM_IPROC policy<{'arm64': 'y'}> +CONFIG_MDIO_BUS_MUX_GPIO policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_BUS_MUX_MMIOREG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_HISI_FEMAC policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_OCTEON policy<{'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_MDIO_SUN4I policy<{'arm64': 'n'}> +CONFIG_MDIO_THUNDER policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MDIO_XGENE policy<{'arm64': 'm'}> +CONFIG_MICREL_KS8995MA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XEN_NETDEV_FRONTEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_NETDEV_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_VMXNET3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_FUJITSU_ES policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_THUNDERBOLT_NET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_NET policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_HIPPI note +CONFIG_XEN_NETDEV_FRONTEND note +CONFIG_DEFXX_MMIO flag + +# Menu: Device Drivers >> Network device support >> ARCnet support +CONFIG_ARCNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ARCNET_1201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_1051 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_CAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM90xx policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM90xxIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_RIM_I policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> ARCnet support >> ARCnet COM20020 chipset driver +CONFIG_ARCNET_COM20020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM20020_ISA policy<{'i386': 'm'}> +CONFIG_ARCNET_COM20020_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARCNET_COM20020_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> ATM drivers +CONFIG_ATM_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATM_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_LANAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_ENI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_ENI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_FIRESTREAM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_ZATM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_ZATM_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_NICSTAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_NICSTAR_USE_SUNI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_NICSTAR_USE_IDT77105 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_IDT77252 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_IDT77252_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_IDT77252_RCV_ALL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_AMBASSADOR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_AMBASSADOR_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_HORIZON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ATM_HORIZON_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_ATM_IA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_IA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_HE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_HE_USE_SUNI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATM_SOLOS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_ATM_NICSTAR_USE_IDT77105 flag + +# Menu: Device Drivers >> Network device support >> ATM drivers >> FORE Systems 200E-series +CONFIG_ATM_FORE200E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_FORE200E_USE_TASKLET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_FORE200E_TX_RETRY policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_ATM_FORE200E_DEBUG policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Device Drivers >> Network device support >> ATM drivers >> Fine-tune burst settings +CONFIG_ATM_ENI_TUNE_BURST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers +CONFIG_NET_DSA_BCM_SF2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_LOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_DSA_MT7530 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_DSA_QCA8K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_SMSC_LAN9303_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_DSA_SMSC_LAN9303_MDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_NET_DSA_LOOP flag + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers >> Broadcom BCM53xx managed switch support +CONFIG_B53 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_SPI_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_MDIO_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_MMAP_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B53_SRAB_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Distributed Switch Architecture drivers >> Microchip KSZ series switch support +CONFIG_MICROCHIP_KSZ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MICROCHIP_KSZ_SPI_DRIVER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support +CONFIG_ETHERNET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_VENDOR_ADAPTEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ADAPTEC_STARFIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_AGERE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ET131X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_ALACRITECH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLICOSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_VENDOR_ALLWINNER policy<{'arm64': 'y'}> +CONFIG_SUN4I_EMAC policy<{'arm64': 'n'}> +CONFIG_NET_VENDOR_ALTEON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ACENIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACENIC_OMIT_TIGON_I policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ALTERA_TSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_AMAZON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ENA_ETHERNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_XGENE policy<{'arm64': 'm'}> +CONFIG_NET_XGENE_V2 policy<{'arm64': 'm'}> +CONFIG_NET_VENDOR_AQUANTIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AQTION policy<{'amd64': 'm'}> +CONFIG_NET_VENDOR_ARC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EMAC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_AURORA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AURORA_NB8800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CADENCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MACB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MACB_USE_HWSTAMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MACB_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_BROCADE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BNA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_CALXEDA_XGMAC policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_CISCO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ENIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CX_ECAT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DM9000 policy<{'armhf': 'm'}> +CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL policy<{'armhf': 'n'}> +CONFIG_DNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_DEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_VENDOR_DLINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_DL2K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNDANCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNDANCE_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_EMULEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_BE2NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BE2NET_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_VENDOR_EZCHIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EZCHIP_NPS_MANAGEMENT_ENET policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_EXAR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_S2IO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VXGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VXGE_DEBUG_TRACE_ALL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_FARADAY policy<{'armhf': 'y'}> +CONFIG_FTMAC100 policy<{'armhf': 'm'}> +CONFIG_FTGMAC100 policy<{'armhf': 'm'}> +CONFIG_NET_VENDOR_FUJITSU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_FMVJ18X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_HP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HP100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_HUAWEI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HINIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_JME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_MEDIATEK policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_NET_VENDOR_MICROCHIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ENC28J60 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ENC28J60_WRITEVERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ENCX24J600 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_MYRI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MYRI10GE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MYRI10GE_DCA policy<{'amd64': 'y'}> +CONFIG_FEALNX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_VENDOR_NETRONOME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NFP_APP_FLOWER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NFP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_NVIDIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_FORCEDETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_OKI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PCH_GBE policy<{'i386': 'm'}> +CONFIG_ETHOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NET_PACKET_ENGINE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HAMACHI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_YELLOWFIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_RENESAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SH_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RAVB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_NET_VENDOR_RDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_R6040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_ROCKER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ROCKER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SAMSUNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SXGBE_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SEEQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_VENDOR_SILAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SC92031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SIS900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SIS190 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_SOLARFLARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SFC_FALCON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SFC_FALCON_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NET_VENDOR_SOCIONEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SNI_NETSEC policy<{'arm64': 'm'}> +CONFIG_NET_VENDOR_STMICRO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_STMMAC_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STMMAC_PCI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NET_VENDOR_TEHUTI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_TEHUTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_VIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VIA_RHINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIA_RHINE_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIA_VELOCITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_WIZNET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_WIZNET_W5100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIZNET_W5300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIZNET_W5100_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_VENDOR_XIRCOM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_XIRC2PS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NET_VENDOR_SYNOPSYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DWC_XLGMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DWC_XLGMAC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NET_VENDOR_EMULEX note + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> 3Com devices +CONFIG_NET_VENDOR_3COM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EL3 policy<{'i386': 'm'}> +CONFIG_3C515 policy<{'i386': 'm'}> +CONFIG_PCMCIA_3C574 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_3C589 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VORTEX policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPHOON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> AMD devices +CONFIG_NET_VENDOR_AMD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AMD8111_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LANCE policy<{'i386': 'm'}> +CONFIG_PCNET32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_NMCLAN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NI65 policy<{'i386': 'm'}> +CONFIG_AMD_XGBE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_AMD_XGBE_DCB policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Apple devices + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Atheros devices +CONFIG_NET_VENDOR_ATHEROS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATL2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATL1C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Blackfin on-chip MAC support + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Broadcom devices +CONFIG_NET_VENDOR_BROADCOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_B44 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BCMGENET policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BNX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TIGON3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TIGON3_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNX2X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BNX2X_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BGMAC_PLATFORM policy<{'arm64': 'y'}> +CONFIG_SYSTEMPORT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_TIGON3 flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Broadcom devices >> Broadcom NetXtreme-C/E support +CONFIG_BNXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BNXT_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNXT_FLOWER_OFFLOAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BNXT_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Cavium ethernet drivers +CONFIG_NET_VENDOR_CAVIUM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_THUNDER_NIC_PF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_VF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_BGX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_THUNDER_NIC_RGX policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_LIQUIDIO policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_LIQUIDIO_VF policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Chelsio devices +CONFIG_NET_VENDOR_CHELSIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_CHELSIO_T1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T1_1G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHELSIO_T4_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T4_FCOE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHELSIO_T4VF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Cirrus devices +CONFIG_NET_VENDOR_CIRRUS policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_CS89x0 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_CS89x0_PLATFORM policy<{'armhf': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> DEC - Tulip devices +CONFIG_NET_TULIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DE2104X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DE2104X_DSL policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_DE4X5 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WINBOND_840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DM9102 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ULI526X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_XIRCOM policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> DEC - Tulip devices >> DECchip Tulip (dc2114x) PCI support +CONFIG_TULIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TULIP_MWI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TULIP_MMIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TULIP_NAPI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_TULIP_NAPI flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Freescale devices +CONFIG_NET_VENDOR_FREESCALE policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_FEC policy<{'armhf-generic': 'y'}> +CONFIG_FSL_FMAN policy<{'arm64': 'y'}> +CONFIG_FSL_PQ_MDIO policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_FSL_XGMAC_MDIO policy<{'arm64': 'y', 'armhf-generic': 'y'}> +CONFIG_GIANFAR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_FSL_DPAA_ETH policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Freescale devices >> Freescale Ethernet Driver + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Hisilicon devices +CONFIG_NET_VENDOR_HISILICON policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_HIX5HD2_GMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HISI_FEMAC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HIP04_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS_DSAF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS_ENET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3_HCLGE policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_HNS3_ENET policy<{'arm64': 'm'}> +CONFIG_HNS3_DCB policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> IBM devices +CONFIG_NET_VENDOR_IBM policy<{'ppc64el': 'y'}> +CONFIG_IBMVETH policy<{'ppc64el': 'm'}> +CONFIG_IBMVNIC policy<{'ppc64el': 'm'}> +# +CONFIG_IBMVNIC mark note + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> IBM devices >> IBM EMAC Ethernet support + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel (82586/82593/82596) devices +CONFIG_NET_VENDOR_I825XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel devices +CONFIG_NET_VENDOR_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_E100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_E1000E_HWTS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IGB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IGB_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IGB_DCA policy<{'amd64': 'y'}> +CONFIG_IGBVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGBEVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I40E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_I40E_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I40EVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FM10K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Intel devices >> Intel(R) 10GbE PCI Express adapters support +CONFIG_IXGBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IXGBE_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IXGBE_DCA policy<{'amd64': 'y'}> +CONFIG_IXGBE_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Marvell devices +CONFIG_NET_VENDOR_MARVELL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MV643XX_ETH policy<{'armhf': 'm'}> +CONFIG_MVMDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MVNETA_BM_ENABLE policy<{'armhf': 'n'}> +CONFIG_MVNETA policy<{'armhf': 'm'}> +CONFIG_MVPP2 policy<{'armhf': 'm'}> +CONFIG_PXA168_ETH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SKGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SKGE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SKGE_GENESIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SKY2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SKY2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices +CONFIG_NET_VENDOR_MELLANOX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_EN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX4_EN_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX4_CORE_GEN2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLX5_FPGA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLXFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies ConnectX-4 Ethernet support +CONFIG_MLX5_CORE_EN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_MPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_ESWITCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE_EN_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_CORE_IPOIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MLX5_EN_IPSEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies Switch ASICs support +CONFIG_MLXSW_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLXSW_CORE_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MLXSW_CORE_THERMAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MLXSW_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_MINIMAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Mellanox devices >> Mellanox Technologies Switch ASICs support >> PCI bus implementation for Mellanox Technologies Switch ASICs +CONFIG_MLXSW_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MLXSW_SWITCHIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SWITCHX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SPECTRUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MLXSW_SPECTRUM_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Micrel devices +CONFIG_NET_VENDOR_MICREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KS8842 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS8851 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS8851_MLL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KSZ884X_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> National Semi-conductor 8390 devices +CONFIG_NET_VENDOR_8390 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PCMCIA_AXNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AX88796 policy<{'armhf': 'm'}> +CONFIG_AX88796_93CX6 policy<{'armhf': 'n'}> +CONFIG_NE2000 policy<{'i386': 'm'}> +CONFIG_NE2K_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_PCNET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ULTRA policy<{'i386': 'm'}> +CONFIG_WD80x3 policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> National Semi-conductor devices +CONFIG_NET_VENDOR_NATSEMI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NATSEMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NS83820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> QLogic devices +CONFIG_NET_VENDOR_QLOGIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_QLA3XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QLGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NETXEN_NIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QED_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QEDE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> QLogic devices >> QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support +CONFIG_QLCNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_QLCNIC_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QLCNIC_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QLCNIC_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Qualcomm devices +CONFIG_NET_VENDOR_QUALCOMM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_QCA7000_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCA7000_UART policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_QCOM_EMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RMNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Realtek devices +CONFIG_NET_VENDOR_REALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_8139CP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8169 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Realtek devices >> RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support +CONFIG_8139TOO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_8139TOO_PIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_8139TOO_TUNE_TWISTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_8139TOO_8129 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_8139_OLD_RX_RESET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_8139TOO_TUNE_TWISTER flag + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> SMC (SMSC)/Western Digital devices +CONFIG_NET_VENDOR_SMSC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SMC9194 policy<{'i386': 'm'}> +CONFIG_SMC91X policy<{'arm64': 'y', 'armhf': 'm'}> +CONFIG_PCMCIA_SMC91C92 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EPIC100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMC911X policy<{'armhf': 'm'}> +CONFIG_SMSC911X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SMSC9420 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> STMMAC Platform bus support +CONFIG_STMMAC_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_DWC_QOS_ETH policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DWMAC_IPQ806X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_DWMAC_MESON policy<{'armhf': 'm'}> +CONFIG_DWMAC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_DWMAC_SUNXI policy<{'arm64': 'n'}> +CONFIG_DWMAC_SUN8I policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Solarflare SFC9000/SFC9100-family support +CONFIG_SFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SFC_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_MCDI_MON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_SRIOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFC_MCDI_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Sun devices +CONFIG_NET_VENDOR_SUN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HAPPYMEAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SUNGEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CASSINI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NIU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Texas Instruments (TI) devices +CONFIG_NET_VENDOR_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_TI_DAVINCI_EMAC policy<{'armhf-generic': 'm'}> +CONFIG_TI_DAVINCI_MDIO policy<{'armhf': 'y'}> +CONFIG_TI_DAVINCI_CPDMA policy<{'armhf': 'y'}> +CONFIG_TI_CPSW_ALE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TI_CPSW policy<{'armhf': 'y'}> +CONFIG_TI_CPTS policy<{'armhf': 'y'}> +CONFIG_TLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Toshiba devices + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> WIZnet interface mode +CONFIG_WIZNET_BUS_DIRECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WIZNET_BUS_INDIRECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WIZNET_BUS_ANY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Ethernet driver support >> Xilinx devices +CONFIG_NET_VENDOR_XILINX policy<{'ppc64el': 'y'}> +CONFIG_XILINX_LL_TEMAC policy<{'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> IEEE 802.15.4 drivers +CONFIG_IEEE802154_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_FAKELB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_AT86RF230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_AT86RF230_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IEEE802154_MRF24J40 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_CC2520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_ATUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_ADF7242 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_CA8210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_IEEE802154_CA8210_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> Network device support >> Network core driver support +CONFIG_NET_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BONDING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_EQUALIZER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IFB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACVLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACVTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPVLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPVTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VXLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GENEVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MACSEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETCONSOLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETCONSOLE_DYNAMIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NTB_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RIONET policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RIONET_TX_SIZE policy<{'amd64': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_RIONET_RX_SIZE policy<{'amd64': '128', 'i386': '128', 'ppc64el': '128'}> +CONFIG_TUN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TUN_VNET_CROSS_LE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_VETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VIRTIO_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_VRF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VSOCKMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_VIRTIO_NET note flag + +# Menu: Device Drivers >> Network device support >> Network core driver support >> Ethernet team driver support +CONFIG_NET_TEAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_BROADCAST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_ROUNDROBIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_RANDOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TEAM_MODE_LOADBALANCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> PHY Device support and infrastructure +CONFIG_PHYLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_LED_TRIGGER_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AMD_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AQUANTIA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AT803X_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCM7XXX_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BCM87XX_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BROADCOM_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CICADA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CORTINA_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DAVICOM_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83822_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83848_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DP83867_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FIXED_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_ICPLUS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INTEL_XWAY_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LSI_ET1011C_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LXT_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MARVELL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MARVELL_10G_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MESON_GXL_PHY policy<{'armhf': 'm'}> +CONFIG_MICREL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MICROCHIP_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MICROSEMI_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NATIONAL_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_QSEMI_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_REALTEK_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RENESAS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ROCKCHIP_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SMSC_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STE10XP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TERANETICS_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VITESSE_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XILINX_GMII2RGMII policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> PPP (point-to-point protocol) support +CONFIG_PPP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PPP_BSDCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_DEFLATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPP_MPPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_MULTILINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPPOATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPPOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPPOL2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_ASYNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPP_SYNC_TTY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> S/390 network device drivers +CONFIG_LCS policy<{'s390x': 'm'}> +CONFIG_CTCM policy<{'s390x': 'm'}> +CONFIG_NETIUCV policy<{'s390x': 'm'}> +CONFIG_SMSGIUCV policy<{'s390x': 'y'}> +CONFIG_SMSGIUCV_EVENT policy<{'s390x': 'm'}> +CONFIG_QETH policy<{'s390x': 'm'}> +CONFIG_QETH_L2 policy<{'s390x': 'm'}> +CONFIG_QETH_L3 policy<{'s390x': 'm'}> + +# Menu: Device Drivers >> Network device support >> SLIP (serial line) support +CONFIG_SLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SLIP_COMPRESSED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SLIP_SMART policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SLIP_MODE_SLIP6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters +CONFIG_USB_NET_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CATC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_KAWETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PEGASUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RTL8150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RTL8152 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LAN78XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IPHETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters >> Multi-purpose USB Networking Framework +CONFIG_USB_USBNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_AX8817X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_AX88179_178A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDCETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_EEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_HUAWEI_CDC_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CDC_MBIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_DM9601 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SR9700 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SR9800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SMSC75XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_SMSC95XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_GL620A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_NET1080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_PLUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_MCS7830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_RNDIS_HOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_ZAURUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CX82310_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_KALMIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_QMI_WWAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_INT51X1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CDC_PHONET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SIERRA_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_VL600 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_CH9200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> USB Network Adapters >> Multi-purpose USB Networking Framework >> Simple USB Network Links (CDC Ethernet subset) +CONFIG_USB_NET_CDC_SUBSET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ALI_M5632 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_AN2720 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_BELKIN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ARMLINUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EPSON2888 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_KC2190 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wan interfaces support +CONFIG_WAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HOSTESS_SV11 policy<{'i386': 'm'}> +CONFIG_COSA policy<{'i386': 'm'}> +CONFIG_LANMEDIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SEALEVEL_4021 policy<{'i386': 'm'}> +CONFIG_SLIC_DS26522 policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_DLCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DLCI_MAX policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_SDLA policy<{'i386': 'm'}> +CONFIG_LAPBETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_X25_ASY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SBNI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBNI_MULTILINE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wan interfaces support >> Generic HDLC layer +CONFIG_HDLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_RAW_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_CISCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_FR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_PPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDLC_X25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCI200SYN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WANXL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PC300TOO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_N2 policy<{'i386': 'm'}> +CONFIG_C101 policy<{'i386': 'm'}> +CONFIG_FARSYNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DSCC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DSCC4_PCISYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DSCC4_PCI_RST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> WiMAX Wireless Broadband devices +CONFIG_WIMAX_I2400M_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIMAX_I2400M_DEBUG_LEVEL policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN +CONFIG_WLAN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIRELESS_WDS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WLAN_VENDOR_ADMTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ADM8211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_ATMEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCI_ATMEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_ATMEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AT76C50X_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_CISCO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AIRO policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIRO_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WLAN_VENDOR_MEDIATEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MT7601U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_RALINK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WLAN_VENDOR_RSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WLAN_VENDOR_ST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CW1200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CW1200_WLAN_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CW1200_WLAN_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLAN_VENDOR_ZYDAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ZD1201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZD1211RW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZD1211RW_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_WLAN_VENDOR_QUANTENNA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_QTNFMAC_PEARL_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_RAYCS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_WL3501 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MAC80211_HWSIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET_RNDIS_WLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices +CONFIG_WLAN_VENDOR_ATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH5K_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_BTCOEX_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_HTC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH9K_HTC_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AR5523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WCN36XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WCN36XX_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 5xxx wireless cards support +CONFIG_ATH5K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH5K_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH5K_TRACER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 802.11ac wireless cards support +CONFIG_ATH10K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_AHB policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_ATH10K_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH10K_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH10K_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH10K_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros 802.11n wireless cards support +CONFIG_ATH9K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH9K_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_AHB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_STATION_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_DYNACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH9K_WOW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_RFKILL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_CHANNEL_CONTEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_PCOEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATH9K_HWRNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Atheros mobile chipsets support +CONFIG_ATH6KL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATH6KL_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATH6KL_TRACING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Linux Community AR9170 802.11n USB support +CONFIG_CARL9170 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CARL9170_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CARL9170_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CARL9170_HWRNG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Atheros/Qualcomm devices >> Wilocity 60g WiFi card wil6210 support +CONFIG_WIL6210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WIL6210_ISR_COR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIL6210_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WIL6210_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices +CONFIG_WLAN_VENDOR_BROADCOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B43LEGACY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BRCMSMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx wireless support (mac80211 stack) +CONFIG_B43 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_B43_SDIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43_PHY_G policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_N policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_LP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_PHY_HT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx wireless support (mac80211 stack) >> Supported bus types +CONFIG_B43_BUSES_BCMA_AND_SSB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43_BUSES_BCMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43_BUSES_SSB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom 43xx-legacy data transfer mode +CONFIG_B43LEGACY_DMA_AND_PIO_MODE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_B43LEGACY_DMA_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_B43LEGACY_PIO_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Broadcom devices >> Broadcom FullMAC WLAN driver +CONFIG_BRCMFMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BRCMFMAC_SDIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMFMAC_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMFMAC_PCIE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCM_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BRCMDBG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_BRCMDBG flag + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices +CONFIG_WLAN_VENDOR_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPW2100_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2100_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBIPW_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWL4965 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWL3945 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel PRO/Wireless 2200BG and 2915ABG Network Connection +CONFIG_IPW2200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IPW2200_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_RADIOTAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_PROMISCUOUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_QOS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IPW2200_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) +CONFIG_IWLWIFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLDVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLMVM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IWLWIFI_BCAST_FILTERING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLWIFI_PCIE_RTPM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) >> Debugging Options +CONFIG_IWLWIFI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLWIFI_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IWLWIFI_DEVICE_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intel devices >> iwl3945 / iwl4965 Debugging Options +CONFIG_IWLEGACY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IWLEGACY_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices +CONFIG_WLAN_VENDOR_INTERSIL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PRISM54 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> Hermes chipset 802.11b support (Orinoco/Prism2/Symbol) +CONFIG_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HERMES_PRISM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HERMES_CACHE_FW_ON_INIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PLX_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TMD_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NORTEL_HERMES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PCMCIA_HERMES policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_SPECTRUM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ORINOCO_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) +CONFIG_HOSTAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_FIRMWARE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HOSTAP_FIRMWARE_NVRAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HOSTAP_PLX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HOSTAP_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Intersil devices >> Softmac Prism54 support +CONFIG_P54_COMMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_P54_SPI_DEFAULT_EEPROM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices +CONFIG_WLAN_VENDOR_MARVELL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIBERTAS_THINFIRM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_THINFIRM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBERTAS_THINFIRM_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWL8K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices >> Marvell 8xxx Libertas WLAN driver support +CONFIG_LIBERTAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LIBERTAS_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LIBERTAS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LIBERTAS_MESH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Marvell devices >> Marvell WiFi-Ex Driver +CONFIG_MWIFIEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_PCIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MWIFIEX_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support +CONFIG_RT2X00 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2400PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2500PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT61PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2500USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT73USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2X00_LIB_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RT2X00_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support >> Ralink rt27xx/rt28xx/rt30xx (PCI/PCIe/PCMCIA) support +CONFIG_RT2800PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2800PCI_RT33XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT35XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT53XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800PCI_RT3290 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Ralink driver support >> Ralink rt27xx/rt28xx/rt30xx (USB) support +CONFIG_RT2800USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RT2800USB_RT33XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT35XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT3573 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT53XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_RT55XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RT2800USB_UNKNOWN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Realtek devices +CONFIG_WLAN_VENDOR_REALTEK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTL8180 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8187 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8XXXU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8XXXU_UNTESTED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Realtek devices >> Realtek rtlwifi family of devices +CONFIG_RTL_CARDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192CE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192SE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192DE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723AE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723BE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8188EE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192EE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8821AE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192CU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLWIFI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Redpine Signals Inc 91x WLAN driver support +CONFIG_RSI_91X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RSI_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RSI_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RSI_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Network device support >> Wireless LAN >> Texas Instrument devices +CONFIG_WLAN_VENDOR_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_WL1251 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL1251_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL1251_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL12XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WL18XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_WLCORE_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILINK_PLATFORM_DATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Non-Transparent Bridge support +CONFIG_NTB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NTB_AMD policy<{'amd64': 'n'}> +CONFIG_NTB_IDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_INTEL policy<{'amd64': 'm'}> +CONFIG_NTB_SWITCHTEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_PINGPONG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_TOOL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_PERF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NTB_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Open-Channel SSD target support +CONFIG_NVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NVM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NVM_RRPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NVM_PBLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> PHY Subsystem +CONFIG_GENERIC_PHY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PHY_XGENE policy<{'arm64': 'y'}> +CONFIG_PHY_SUN4I_USB policy<{'arm64': 'm'}> +CONFIG_PHY_SUN9I_USB policy<{'arm64': 'n'}> +CONFIG_PHY_MESON8B_USB2 policy<{'armhf': 'm'}> +CONFIG_PHY_MESON_GXL_USB2 policy<{'armhf': 'm'}> +CONFIG_BCM_KONA_USB2_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_BCM_NS_USB2 policy<{'arm64': 'm'}> +CONFIG_PHY_BCM_NS_USB3 policy<{'arm64': 'm'}> +CONFIG_PHY_NS2_PCIE policy<{'arm64': 'y'}> +CONFIG_PHY_NS2_USB_DRD policy<{'arm64': 'm'}> +CONFIG_PHY_BRCM_SATA policy<{'arm64': 'y'}> +CONFIG_PHY_BRCM_USB policy<{'arm64': 'm'}> +CONFIG_PHY_HI6220_USB policy<{'arm64': 'm'}> +CONFIG_PHY_HIX5HD2_SATA policy<{'armhf': 'm'}> +CONFIG_PHY_BERLIN_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_BERLIN_USB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_MVEBU_CP110_COMPHY policy<{'armhf': 'm'}> +CONFIG_PHY_PXA_28NM_HSIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_PXA_28NM_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHY_MTK_TPHY policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_CPCAP_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_QCOM_APQ8064_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_IPQ806X_SATA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_QMP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_QUSB2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_UFS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_QCOM_USB_HS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_QCOM_USB_HSIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_RCAR_GEN2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_RCAR_GEN3_USB2 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_RCAR_GEN3_USB3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_DP policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_EMMC policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_INNO_USB2 policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_PCIE policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_TYPEC policy<{'armhf': 'm'}> +CONFIG_PHY_ROCKCHIP_USB policy<{'armhf': 'm'}> +CONFIG_PHY_EXYNOS_DP_VIDEO policy<{'armhf': 'y'}> +CONFIG_PHY_EXYNOS_MIPI_VIDEO policy<{'armhf': 'y'}> +CONFIG_PHY_EXYNOS_PCIE policy<{'armhf': 'y'}> +CONFIG_PHY_SAMSUNG_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PHY_EXYNOS5_USBDRD policy<{'armhf': 'm'}> +CONFIG_PHY_EXYNOS5250_SATA policy<{'armhf': 'y'}> +CONFIG_PHY_TEGRA_XUSB policy<{'armhf-generic': 'm'}> +CONFIG_PHY_DM816X_USB policy<{'armhf': 'm'}> +CONFIG_OMAP_CONTROL_PHY policy<{'armhf': 'm'}> +CONFIG_OMAP_USB2 policy<{'armhf': 'm'}> +CONFIG_TI_PIPE3 policy<{'armhf': 'm'}> +CONFIG_PHY_TUSB1210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TWL4030_USB policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> PPS support +CONFIG_PPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_PPS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PPS_CLIENT_KTIMER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PPS_CLIENT_LDISC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PPS_CLIENT_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PPS_CLIENT_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_PPS_CLIENT_KTIMER flag +CONFIG_PPS flag + +# Menu: Device Drivers >> PTP clock support +CONFIG_PTP_1588_CLOCK_PCH policy<{'i386': 'm'}> + +# Menu: Device Drivers >> PTP clock support >> PTP clock support +CONFIG_PTP_1588_CLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_PTP_1588_CLOCK_DTE policy<{'arm64': 'm'}> +CONFIG_PTP_1588_CLOCK_GIANFAR policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_PTP_1588_CLOCK_KVM policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_PTP_1588_CLOCK flag + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support +CONFIG_PANEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PANEL_PARPORT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_PANEL_PROFILE policy<{'amd64': '5', 'arm64': '5', 'armhf': '5', 'i386': '5', 'ppc64el': '5'}> +CONFIG_PANEL_CHANGE_MESSAGE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support >> LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom) + +# Menu: Device Drivers >> Parallel port LCD/Keypad Panel support >> LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom) >> LCD communication mode (0=parallel 8 bits, 1=serial) + +# Menu: Device Drivers >> Parallel port support +CONFIG_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PARPORT_AX88796 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_1284 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Parallel port support >> PC-style hardware +CONFIG_PARPORT_PC policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_SERIAL policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PARPORT_PC_FIFO policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PARPORT_PC_SUPERIO policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PARPORT_PC_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Performance monitor support +CONFIG_ARM_PMU policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_HISI_PMU policy<{'arm64': 'y'}> +CONFIG_QCOM_L2_PMU policy<{'arm64': 'y'}> +CONFIG_QCOM_L3_PMU policy<{'arm64': 'y'}> +CONFIG_XGENE_PMU policy<{'arm64': 'y'}> +CONFIG_ARM_SPE_PMU policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Pin controllers +CONFIG_PINCTRL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PINMUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCONF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_DEBUG_PINCTRL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PINCTRL_AS3722 policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_AMD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_MCP23S08 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_RZA1 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_SINGLE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_SX150X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_PALMAS policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PINCTRL_RK805 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PINCTRL_IPROC_GPIO policy<{'arm64': 'y'}> +CONFIG_PINCTRL_NS2_MUX policy<{'arm64': 'y'}> +CONFIG_PINCTRL_BERLIN_BG4CT policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_PINCTRL_IMX50 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX51 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6Q policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6SL policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6SX policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX6UL policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_IMX7D policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_VF610 policy<{'armhf-generic': 'y'}> +CONFIG_PINCTRL_BAYTRAIL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PINCTRL_CHERRYVIEW policy<{'amd64': 'y', 'i386': 'm'}> +CONFIG_PINCTRL_MERRIFIELD policy<{'i386': 'n'}> +CONFIG_PINCTRL_BROXTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_CANNONLAKE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_CEDARFORK policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_DENVERTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_GEMINILAKE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_LEWISBURG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_SUNRISEPOINT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PINCTRL_APQ8064 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_APQ8084 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ4019 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ8064 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_IPQ8074 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8960 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MDM9615 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8X74 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8916 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8994 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_MSM8996 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_QDF2XXX policy<{'arm64': 'm'}> +CONFIG_PINCTRL_QCOM_SPMI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_QCOM_SSBI_PMIC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PINCTRL_EXYNOS policy<{'armhf': 'y'}> +CONFIG_PINCTRL_EXYNOS_ARM policy<{'armhf': 'y'}> +CONFIG_PINCTRL_EXYNOS5440 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_SPRD policy<{'arm64': 'y'}> +CONFIG_PINCTRL_SPRD_SC9860 policy<{'arm64': 'y'}> +CONFIG_PINCTRL_TI_IODELAY policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT2701 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8135 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8127 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MT8173 policy<{'arm64': 'y'}> +CONFIG_PINCTRL_MT6397 policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_PINCTRL_MT8135 flag +CONFIG_PINCTRL_MT8127 flag +CONFIG_PINCTRL_CHERRYVIEW mark note + +# Menu: Device Drivers >> Pin controllers >> Amlogic SoC pinctrl drivers +CONFIG_PINCTRL_MESON policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MESON8 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_MESON8B policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Pin controllers >> Nomadik pin controller driver + +# Menu: Device Drivers >> Pin controllers >> ST-Ericsson ABx500 family Mixed Signal Circuit gpio functions + +# Menu: Device Drivers >> Pin controllers >> UniPhier SoC pinctrl drivers +CONFIG_PINCTRL_UNIPHIER policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD4 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PRO4 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_SLD8 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PRO5 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PXS2 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD6B policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD11 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_LD20 policy<{'armhf': 'y'}> +CONFIG_PINCTRL_UNIPHIER_PXS3 policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> Platform support for Chrome hardware +CONFIG_CHROME_PLATFORMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_CHROMEOS_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CHROMEOS_PSTORE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_CHARDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_LPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CROS_EC_LPC_MEC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CROS_KBD_LED_BACKLIGHT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Platform support for Goldfish virtual devices +CONFIG_GOLDFISH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> + +# Menu: Device Drivers >> Plug and Play support +CONFIG_PNP policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_PNP_DEBUG_MESSAGES policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_ISAPNP policy<{'i386': 'y'}> +CONFIG_PNPBIOS policy<{'i386': 'y'}> +CONFIG_PNPBIOS_PROC_FS policy<{'i386': 'y'}> + +# Menu: Device Drivers >> Power supply class support +CONFIG_POWER_SUPPLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_POWER_SUPPLY_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PDA_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GENERIC_ADC_BATTERY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAX8925_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM831X_BACKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM831X_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM8350_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEST_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2781 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DS2782 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_LEGO_EV3 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MANAGER_SBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_HDQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BATTERY_DA9030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_DA9150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP20X_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_CHARGER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AXP288_FUEL_GAUGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX17040 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX17042 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_MAX1721X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_TWL4030_MADC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_RX51 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_CPCAP policy<{'armhf': 'm'}> +CONFIG_CHARGER_ISP1704 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_LP8727 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MANAGER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CHARGER_LTC3651 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_DETECTOR_MAX14656 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_QCOM_SMBB policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CHARGER_BQ2415X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24190 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24257 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ24735 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_BQ25890 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_SMB347 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TPS65090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_TPS65217 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_BATTERY_GAUGE_LTC2941 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BATTERY_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CHARGER_RT9455 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Pulse-Width Modulation (PWM) Support +CONFIG_PWM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PWM_ATMEL_HLCDC_PWM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_BCM_IPROC policy<{'arm64': 'm'}> +CONFIG_PWM_BCM2835 policy<{'arm64': 'm'}> +CONFIG_PWM_BERLIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_PWM_CRC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PWM_CROS_EC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_PWM_FSL_FTM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_HIBVT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_IMX policy<{'armhf-generic': 'm'}> +CONFIG_PWM_LP3943 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_LPSS_PCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PWM_LPSS_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PWM_MESON policy<{'armhf': 'm'}> +CONFIG_PWM_MTK_DISP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_MEDIATEK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_OMAP_DMTIMER policy<{'armhf': 'm'}> +CONFIG_PWM_PCA9685 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_RENESAS_TPU policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_PWM_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_PWM_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_PWM_STMPE policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_PWM_SUN4I policy<{'arm64': 'm'}> +CONFIG_PWM_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_PWM_TIECAP policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_PWM_TIEHRPWM policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_PWM_TWL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PWM_TWL_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Real Time Clock +CONFIG_RTC_CLASS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_HCTOSYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_HCTOSYS_DEVICE policy<{'amd64': '"rtc0"', 'arm64': '"rtc0"', 'armhf': '"rtc0"', 'i386': '"rtc0"', 'ppc64el': '"rtc0"'}> +CONFIG_RTC_SYSTOHC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_SYSTOHC_DEVICE policy<{'amd64': '"rtc0"', 'arm64': '"rtc0"', 'armhf': '"rtc0"', 'i386': '"rtc0"', 'ppc64el': '"rtc0"'}> +CONFIG_RTC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_NVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_PROC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_INTF_DEV_UIE_EMUL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_88PM860X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_88PM80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ABB5ZES3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ABX80X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_BRCMSTB policy<{'arm64': 'm'}> +CONFIG_RTC_DRV_AS3722 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1307 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1307_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1307_CENTURY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1374 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1374_WDT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1672 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_HYM8563 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6900 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX77686 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RS5C372 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ISL1208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_ISL12022 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_X1205 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF85063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF85363 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8563 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF8583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T80 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T80_WDT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_BQ32K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TWL4030 policy<{'arm64': 'm', 'armhf': 'y', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS6586X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS65910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_TPS80031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RC5T583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_S35390A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_FM3130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8581 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX8025 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_EM3027 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV8803 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_S5M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T93 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M41T94 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1343 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1347 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1390 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6916 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_R9701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX4581 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RX6110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RS5C348 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MAX6902 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCF2123 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MCP795 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS3232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS3232_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_PCF2127 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV3029C2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RV3029_HWMON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_CMOS policy<{'amd64': 'y', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_VRTC policy<{'i386': 'm'}> +CONFIG_RTC_DRV_DS1286 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1511 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1553 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS1742 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DS2404 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_DA9063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_EFI policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_STK17TA8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T86 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T35 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_M48T59 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MSM6242 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_BQ4802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RP5C01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_V3020 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_SC27XX policy<{'arm64': 'm'}> +CONFIG_RTC_DRV_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_AB3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_OPAL policy<{'ppc64el': 'y'}> +CONFIG_RTC_DRV_ZYNQMP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_IMXDI policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_OMAP policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_S3C policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_SH policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_PL030 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_PL031 policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_RTC_DRV_GENERIC policy<{'ppc64el': 'y'}> +CONFIG_RTC_DRV_SUN6I policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_MV policy<{'armhf': 'y'}> +CONFIG_RTC_DRV_ARMADA38X policy<{'armhf': 'm'}> +CONFIG_RTC_DRV_FTRTC010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MC13XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_PM8XXX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_MXC policy<{'armhf-generic': 'm'}> +CONFIG_RTC_DRV_SNVS policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_MT7622 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RTC_DRV_XGENE policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_R7301 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DRV_RTD119X policy<{'arm64': 'y'}> +CONFIG_RTC_DRV_HID_SENSOR_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_RTC_DRV_TEST flag +CONFIG_RTC_DRV_CMOS note +CONFIG_RTC_DRV_EFI note +CONFIG_RTC_DRV_TWL4030 note + +# Menu: Device Drivers >> Real Time Clock >> Dallas/Maxim DS1685 Family +CONFIG_RTC_DRV_DS1685_FAMILY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTC_DS1685_PROC_REGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DS1685_SYSFS_REGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Real Time Clock >> Dallas/Maxim DS1685 Family >> Subtype +CONFIG_RTC_DRV_DS1685 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RTC_DRV_DS1689 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17285 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17485 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RTC_DRV_DS17885 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Reliability, Availability and Serviceability (RAS) features +CONFIG_RAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RAS_CEC policy<{'amd64': 'y'}> + +# Menu: Device Drivers >> Remote Controller support +CONFIG_RC_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RC_MAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Remote Controller support >> Remote Controller devices +CONFIG_RC_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RC_ATI_REMOTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_ENE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_HIX5HD2 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_IMON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_MCEUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_ITE_CIR policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_FINTEK policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_MESON policy<{'armhf': 'm'}> +CONFIG_IR_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_IR_NUVOTON policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_IR_REDRAT3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SPI policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_STREAMZAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_WINBOND_CIR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IR_IGORPLUGUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_IGUANA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_TTUSBIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RX51 policy<{'armhf': 'm'}> +CONFIG_RC_LOOPBACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_GPIO_CIR policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_GPIO_TX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_PWM_TX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SUNXI policy<{'arm64': 'm'}> +CONFIG_IR_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SERIAL_TRANSMITTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IR_SIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_TANGO policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Remote Controller support >> Remote Controller devices >> Hardware decoder + +# Menu: Device Drivers >> Remote Controller support >> Remote controller decoders +CONFIG_RC_DECODERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_LIRC_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_NEC_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RC5_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_RC6_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_JVC_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SONY_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SANYO_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_SHARP_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_MCE_KBD_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IR_XMP_DECODER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Remoteproc drivers + +# Menu: Device Drivers >> Remoteproc drivers >> Support for Remote Processor subsystem +CONFIG_REMOTEPROC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IMX_REMOTEPROC policy<{'armhf-generic': 'm'}> +CONFIG_OMAP_REMOTEPROC policy<{'armhf-generic': 'm'}> +CONFIG_WKUP_M3_RPROC policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_ADSP_PIL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_Q6V5_PIL policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_QCOM_WCNSS_PIL policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> Reset Controller Support +CONFIG_RESET_CONTROLLER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_RESET_ATH79 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_AXS10X policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_BERLIN policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_IMX7 policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_LANTIQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_LPC18XX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_MESON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_PISTACHIO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_SIMPLE policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_SUNXI policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_RESET_TI_SYSCON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RESET_UNIPHIER policy<{'armhf': 'm'}> +CONFIG_RESET_ZYNQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_COMMON_RESET_HI3660 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_COMMON_RESET_HI6220 policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Rpmsg drivers +CONFIG_RPMSG_CHAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPMSG_QCOM_GLINK_RPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RPMSG_QCOM_GLINK_SMEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RPMSG_QCOM_SMD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RPMSG_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> + +# Menu: Device Drivers >> SCSI device support +CONFIG_RAID_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support +CONFIG_SCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_MQ_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_SCSI_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_SD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHR_DEV_ST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CHR_DEV_OSST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BLK_DEV_SR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_SR_VENDOR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_CHR_DEV_SG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHR_DEV_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_ENCLOSURE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_CONSTANTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_LOGGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_SCAN_ASYNC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SCSI flag +CONFIG_CHR_DEV_SG note +CONFIG_BLK_DEV_SD mark note +CONFIG_BLK_DEV_SR mark note + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> OSD-Initiator library +CONFIG_SCSI_OSD_INITIATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_OSD_ULD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_OSD_DPRINT_SENSE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SCSI_OSD_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> PCMCIA SCSI adapter support +CONFIG_SCSI_LOWLEVEL_PCMCIA policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_PCMCIA_AHA152X policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_FDOMAIN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_NINJA_SCSI policy<{'i386': 'm'}> +CONFIG_PCMCIA_QLOGIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PCMCIA_SYM53C500 policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI Device Handlers +CONFIG_SCSI_DH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_DH_RDAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_HP_SW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_EMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_DH_ALUA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI Transports +CONFIG_SCSI_SPI_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_FC_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_ISCSI_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_LIBSAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SAS_ATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_SAS_HOST_SMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCSI_SRP_ATTRS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers +CONFIG_SCSI_LOWLEVEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ISCSI_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ISCSI_BOOT_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_CXGB3_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_CXGB4_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BNX2_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BNX2X_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BE2ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CXLFLASH policy<{'ppc64el': 'm'}> +CONFIG_BLK_DEV_3W_XXXX_RAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_HPSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_3W_9XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_3W_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ACARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AHA152X policy<{'i386': 'm'}> +CONFIG_SCSI_AHA1542 policy<{'i386': 'm'}> +CONFIG_SCSI_AHA1740 policy<{'i386': 'm'}> +CONFIG_SCSI_AACRAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AIC94XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC94XX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_HISI_SAS policy<{'arm64': 'm'}> +CONFIG_SCSI_HISI_SAS_PCI policy<{'arm64': 'm'}> +CONFIG_SCSI_MVSAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_MVSAS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_MVSAS_TASKLET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_MVUMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_DPT_I2O policy<{'amd64': 'm', 'i386': 'm', 's390x': 'n'}> +CONFIG_SCSI_ADVANSYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ARCMSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_ESAS2R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEGARAID_NEWGEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MEGARAID_MM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEGARAID_MAILBOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEGARAID_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEGARAID_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_MPT3SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_MPT2SAS_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128', 's390x': '128'}> +CONFIG_SCSI_MPT3SAS_MAX_SGE policy<{'amd64': '128', 'arm64': '128', 'armhf': '128', 'i386': '128', 'ppc64el': '128', 's390x': '128'}> +CONFIG_SCSI_MPT2SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SMARTPQI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFSHCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_UFSHCD_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_DWC_TC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFSHCD_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_DWC_TC_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_UFS_QCOM policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_SCSI_HPTIOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BUSLOGIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCSI_FLASHPOINT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_VMWARE_PVSCSI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_XEN_SCSI_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_HYPERV_STORAGE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_LIBFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_SNIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_SNIC_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_DMX3191D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_FUTURE_DOMAIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_GDTH policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_ISCI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCSI_GENERIC_NCR5380 policy<{'i386': 'm'}> +CONFIG_SCSI_IPS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_IBMVSCSI policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVSCSIS policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVFC policy<{'ppc64el': 'm'}> +CONFIG_SCSI_IBMVFC_TRACE policy<{'ppc64el': 'y'}> +CONFIG_SCSI_INITIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_INIA100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_PPA policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IMM policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IZIP_EPP16 policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_IZIP_SLOW_CTR policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_NCR53C406A policy<{'i386': 'm'}> +CONFIG_SCSI_STEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_IPR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_IPR_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_IPR_DUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_QLOGIC_FAS policy<{'i386': 'm'}> +CONFIG_SCSI_QLOGIC_1280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_QLA_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_TCM_QLA2XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TCM_QLA2XXX_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_QLA_ISCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QEDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_LPFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_LPFC_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SCSI_SIM710 policy<{'i386': 'm'}> +CONFIG_SCSI_SYM53C416 policy<{'i386': 'm'}> +CONFIG_SCSI_DC395x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_AM53C974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_NSP32 policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_SCSI_WD719X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_DEBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZFCP policy<{'s390x': 'm'}> +CONFIG_SCSI_PMCRAID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_PM8001 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_BFA_FC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCSI_CHELSIO_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_SCSI_IPR_TRACE note +CONFIG_SCSI_IPR_DUMP note +CONFIG_SCSI_VIRTIO note + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> Adaptec AIC79xx U320 support +CONFIG_SCSI_AIC79XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC79XX_CMDS_PER_DEVICE policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_AIC79XX_RESET_DELAY_MS policy<{'amd64': '5000', 'arm64': '5000', 'armhf': '5000', 'i386': '5000', 'ppc64el': '5000'}> +CONFIG_AIC79XX_DEBUG_ENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AIC79XX_DEBUG_MASK policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_AIC79XX_REG_PRETTY_PRINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> Adaptec AIC7xxx Fast -> U160 support (New Driver) +CONFIG_SCSI_AIC7XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_AIC7XXX_CMDS_PER_DEVICE policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_AIC7XXX_RESET_DELAY_MS policy<{'amd64': '5000', 'arm64': '5000', 'armhf': '5000', 'i386': '5000', 'ppc64el': '5000'}> +CONFIG_AIC7XXX_DEBUG_ENABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AIC7XXX_DEBUG_MASK policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_AIC7XXX_REG_PRETTY_PRINT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support +CONFIG_SCSI_EATA policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCSI_EATA_TAGGED_QUEUE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_EATA_LINKED_COMMANDS policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SCSI_EATA_MAX_TAGS policy<{'amd64': '16', 'i386': '16', 'ppc64el': '16'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> LibFCoE module +CONFIG_LIBFCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FCOE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FCOE_FNIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_QEDF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> NCR Quad 720 MCA SCSI support + +# Menu: Device Drivers >> SCSI device support >> SCSI device support >> SCSI low-level drivers >> SYM53C8XX Version 2 SCSI support +CONFIG_SCSI_SYM53C8XX_2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS policy<{'amd64': '16', 'arm64': '16', 'armhf': '16', 'i386': '16', 'ppc64el': '16'}> +CONFIG_SCSI_SYM53C8XX_MAX_TAGS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_SCSI_SYM53C8XX_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers +CONFIG_OWL_PM_DOMAINS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ROCKCHIP_PM_DOMAINS policy<{'armhf': 'y'}> +CONFIG_ARCH_TEGRA_2x_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_3x_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_114_SOC policy<{'armhf-generic': 'y'}> +CONFIG_ARCH_TEGRA_124_SOC policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Amlogic SoC drivers +CONFIG_MESON_GX_SOCINFO policy<{'armhf': 'y'}> +CONFIG_MESON_GX_PM_DOMAINS policy<{'armhf': 'y'}> +CONFIG_MESON_MX_SOCINFO policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Broadcom SoC drivers +CONFIG_RASPBERRYPI_POWER policy<{'arm64': 'y'}> +CONFIG_SOC_BRCMSTB policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_BRCMSTB_PM policy<{'arm64': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Freescale DPAA 1.x support +CONFIG_FSL_DPAA policy<{'arm64': 'y'}> +CONFIG_FSL_DPAA_CHECKING policy<{'arm64': 'y'}> +CONFIG_FSL_BMAN_TEST policy<{'arm64': 'm'}> +CONFIG_FSL_BMAN_TEST_API policy<{'arm64': 'n'}> +CONFIG_FSL_QMAN_TEST policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> MediaTek SoC drivers +CONFIG_MTK_INFRACFG policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_MTK_PMIC_WRAP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MTK_SCPSYS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Qualcomm SoC drivers +CONFIG_QCOM_GLINK_SSR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_GSBI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_PM policy<{'armhf': 'y'}> +CONFIG_QCOM_RMTFS_MEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMEM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMP2P policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_SMSM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QCOM_WCNSS_CTRL policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Renesas SoC driver support +CONFIG_SOC_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SYSC_R8A7743 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7745 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7779 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7790 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7791 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7792 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7794 policy<{'armhf': 'y'}> +CONFIG_SYSC_R8A7795 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A7796 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A77970 policy<{'arm64': 'y'}> +CONFIG_SYSC_R8A77995 policy<{'arm64': 'y'}> +CONFIG_RST_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_SYSC_RCAR policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> Samsung SoC driver support +CONFIG_SOC_SAMSUNG policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PMU policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PMU_ARM_DRIVERS policy<{'armhf': 'y'}> +CONFIG_EXYNOS_PM_DOMAINS policy<{'armhf': 'y'}> + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> TI SOC drivers support +CONFIG_SOC_TI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_WKUP_M3_IPC policy<{'armhf-generic': 'n'}> +# +CONFIG_SOC_TI flag + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> ZTE SoC driver support + +# Menu: Device Drivers >> SOC (System On Chip) specific Drivers >> i.MX SoC drivers +CONFIG_IMX7_PM_DOMAINS policy<{'armhf-generic': 'y'}> + +# Menu: Device Drivers >> SPI support +CONFIG_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SPI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_ALTERA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_ARMADA_3700 policy<{'armhf': 'm'}> +CONFIG_SPI_AXI_SPI_ENGINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_BCM2835 policy<{'arm64': 'm'}> +CONFIG_SPI_BCM2835AUX policy<{'arm64': 'm'}> +CONFIG_SPI_BCM_QSPI policy<{'arm64': 'm'}> +CONFIG_SPI_BITBANG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_BUTTERFLY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_CADENCE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DESIGNWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DW_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DW_MID_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_DW_MMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_DLN2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_FSL_LPSPI policy<{'armhf-generic': 'm'}> +CONFIG_SPI_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_IMX policy<{'armhf-generic': 'm'}> +CONFIG_SPI_LM70_LLP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_FSL_SPI policy<{'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_FSL_DSPI policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_SPI_MESON_SPICC policy<{'armhf': 'm'}> +CONFIG_SPI_MESON_SPIFC policy<{'armhf': 'm'}> +CONFIG_SPI_MT65XX policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_OC_TINY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_OMAP24XX policy<{'armhf': 'y'}> +CONFIG_SPI_TI_QSPI policy<{'armhf': 'm'}> +CONFIG_SPI_ORION policy<{'armhf': 'm'}> +CONFIG_SPI_PL022 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_PXA2XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_ROCKCHIP policy<{'amd64': 'n', 'arm64': 'm', 'armhf': 'm', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_RSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_QUP policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_S3C64XX policy<{'armhf': 'm'}> +CONFIG_SPI_SC18IS602 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SH_MSIOF policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_SH_HSPI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SPI_SPRD_ADI policy<{'arm64': 'm'}> +CONFIG_SPI_SUN4I policy<{'arm64': 'n'}> +CONFIG_SPI_SUN6I policy<{'arm64': 'm'}> +CONFIG_SPI_TEGRA114 policy<{'armhf-generic': 'm'}> +CONFIG_SPI_TEGRA20_SFLASH policy<{'armhf-generic': 'm'}> +CONFIG_SPI_TEGRA20_SLINK policy<{'armhf-generic': 'm'}> +CONFIG_SPI_THUNDERX policy<{'arm64': 'm'}> +CONFIG_SPI_TOPCLIFF_PCH policy<{'i386': 'm'}> +CONFIG_SPI_XCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_XILINX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SPI_XLP policy<{'arm64': 'm'}> +CONFIG_SPI_ZYNQMP_GQSPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SPIDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_LOOPBACK_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_TLE62X0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SLAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SPI_SLAVE_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPI_SLAVE_SYSTEM_CONTROL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> SPMI support +CONFIG_SPMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SPMI_MSM_PMIC_ARB policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) +CONFIG_ATA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATA_VERBOSE_ERROR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATA_ACPI policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SATA_ZPODD policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_SATA_PMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SATA_AHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_AHCI_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AHCI_BRCM policy<{'arm64': 'm'}> +CONFIG_AHCI_DM816 policy<{'armhf': 'm'}> +CONFIG_AHCI_IMX policy<{'armhf-generic': 'y'}> +CONFIG_AHCI_CEVA policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_AHCI_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_AHCI_MVEBU policy<{'armhf': 'm'}> +CONFIG_AHCI_SUNXI policy<{'arm64': 'n'}> +CONFIG_AHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_AHCI_XGENE policy<{'arm64': 'm'}> +CONFIG_AHCI_QORIQ policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_AHCI_SEATTLE policy<{'arm64': 'm'}> +CONFIG_SATA_INIC162X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_ACARD_AHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SIL24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SATA_AHCI_PLATFORM note + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) >> ATA SFF support (for legacy IDE and PATA) +CONFIG_ATA_SFF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PDC_ADMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_QSTOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SX4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CMD640_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ISAPNP policy<{'i386': 'm'}> +CONFIG_PATA_MPIIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NS87410 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OPTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PATA_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OF_PLATFORM policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_QDI policy<{'i386': 'm'}> +CONFIG_PATA_RZ1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_WINBOND_VLB policy<{'i386': 'm'}> +CONFIG_PATA_LEGACY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Serial ATA and Parallel ATA drivers (libata) >> ATA SFF support (for legacy IDE and PATA) >> ATA BMDMA support +CONFIG_ATA_BMDMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ATA_PIIX policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_SATA_DWC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_DWC_OLD_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SATA_DWC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SATA_HIGHBANK policy<{'armhf': 'y'}> +CONFIG_SATA_MV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_NV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_PROMISE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SATA_SIL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_SVW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_ULI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SATA_VITESSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ALI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_AMD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ARTOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ATIIXP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ATP867X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CMD64X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_CS5520 policy<{'i386': 'm'}> +CONFIG_PATA_CS5530 policy<{'i386': 'm'}> +CONFIG_PATA_CS5535 policy<{'i386': 'm'}> +CONFIG_PATA_CS5536 policy<{'i386': 'm'}> +CONFIG_PATA_CYPRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_EFAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT366 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT37X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X2N policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_HPT3X3_DMA policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PATA_IMX policy<{'armhf-generic': 'm'}> +CONFIG_PATA_IT8213 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_IT821X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_JMICRON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_MARVELL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NETCELL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NINJA32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_NS87415 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OLDPIIX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_OPTIDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PDC2027X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_PDC_OLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_RADISYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_RDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SC1200 policy<{'i386': 'm'}> +CONFIG_PATA_SCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SERVERWORKS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SIL680 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_SIS policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +CONFIG_PATA_TOSHIBA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_TRIFLEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_WINBOND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_PATA_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ATA_GENERIC policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_SATA_HIGHBANK mark note +CONFIG_PATA_HPT3X3_DMA note +CONFIG_ATA_PIIX mark note + +# Menu: Device Drivers >> Sonics Silicon Backplane +CONFIG_SSB_PCIHOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SSB_PCMCIAHOST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SSB_SDIOHOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SSB_DRIVER_PCICORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sonics Silicon Backplane >> Sonics Silicon Backplane support +CONFIG_SSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SSB_SILENT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SSB_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SSB_DRIVER_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sony MemoryStick card support +CONFIG_MEMSTICK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MEMSTICK_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MEMSTICK_UNSAFE_RESUME policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MSPRO_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MS_BLOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_TIFM_MS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_JMICRON_38X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_R592 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_REALTEK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MEMSTICK_REALTEK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support +CONFIG_SOUND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SOUND_OSS_CORE_PRECLAIM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_SOUND note +CONFIG_SOUND_OSS_CORE_PRECLAIM mark note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture +CONFIG_SND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OSSEMUL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MIXER_OSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PCM_OSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_PCM_TIMER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HRTIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MAX_CARDS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_SND_SUPPORT_OLD_API policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_VERBOSE_PROCFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_VERBOSE_PRINTK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_HDA_PREALLOC_SIZE policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +# +CONFIG_SND note +CONFIG_SND_PCM_OSS note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support +CONFIG_SND_SOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AMD_ACP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AMD_CZ_RT5645_MACH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BCM2835_SOC_I2S policy<{'arm64': 'm'}> +CONFIG_SND_DESIGNWARE_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SND_DESIGNWARE_PCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_SND_I2S_HI6210_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_KIRKWOOD_SOC policy<{'armhf': 'm'}> +CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB policy<{'armhf': 'm'}> +CONFIG_SND_SOC_MT2701 policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_SND_SOC_QCOM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_STORM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_APQ8016_SBC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_XTFPGA_I2S policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ZX_TDM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm'}> +CONFIG_SND_SIMPLE_CARD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SIMPLE_SCU_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AUDIO_GRAPH_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AUDIO_GRAPH_SCU_CARD policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Mediatek MT8173 chip +CONFIG_SND_SOC_MT8173 policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Rockchip +CONFIG_SND_SOC_ROCKCHIP policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_I2S policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_PDM policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_MAX98090 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ROCKCHIP_RT5645 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_RK3288_HDMI_ANALOG policy<{'armhf': 'm'}> +CONFIG_SND_SOC_RK3399_GRU_SOUND policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> ASoC support for Samsung +CONFIG_SND_SOC_SAMSUNG policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_PCM policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SAMSUNG_I2S policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SMDK_WM8994_PCM policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SNOW policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ODROID policy<{'armhf': 'm'}> +CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 policy<{'armhf': 'm'}> +CONFIG_SND_SOC_SAMSUNG_TM2_WM5110 policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Allwinner SoC Audio support +CONFIG_SND_SUN4I_CODEC policy<{'arm64': 'n'}> +CONFIG_SND_SUN8I_CODEC_ANALOG policy<{'arm64': 'm'}> +CONFIG_SND_SUN4I_I2S policy<{'arm64': 'n'}> +CONFIG_SND_SUN4I_SPDIF policy<{'arm64': 'n'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Audio support for Imagination Technologies designs +CONFIG_SND_SOC_IMG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_SOC_IMG_I2S_IN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_I2S_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_PARALLEL_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_SPDIF_IN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_SPDIF_OUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> CODEC drivers +CONFIG_SND_SOC_AC97_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1761_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU1761_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ADAU7002 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4104 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4554 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4613 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK4642 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_AK5386 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ALC5623 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_BT_SCO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L33 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L34 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS35L35 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L42 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L51_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L52 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L56 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42L73 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4265 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4270 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4271_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4271_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS42XX8_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS43130 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS4349 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_CS53L30 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_DIO2125 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES7134 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8316 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8328_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ES8328_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_GTM601 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_INNO_RK3036 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX98504 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX98927 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MAX9860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MSM8916_WCD_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM1681 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM179X_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM179X_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM3168A_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM3168A_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM512x_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_PCM512x_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_RT5616 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_RT5631 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SGTL5000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SIRF_AUDIO_CODEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SPDIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM2602_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM2602_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_SSM4567 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STA32X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STA350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_STI_SAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS2552 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS5086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS571X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TAS5720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TFA9879 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC23_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC23_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC31XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TLV320AIC3X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TS3A227E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8510 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8523 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8524 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8580 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8728 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8731 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8741 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8753 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8776 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8804_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8804_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8903 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8960 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8962 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8974 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8978 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_WM8985 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_ZX_AUD96P22 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8540 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_NAU8824 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_TPA6130A2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC_SGTL5000 flag + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Intel ASoC SST drivers +CONFIG_SND_SOC_INTEL_SST_TOPLEVEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_HASWELL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BAYTRAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKYLAKE policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> Intel ASoC SST drivers >> Intel Audio machine drivers +CONFIG_SND_SOC_INTEL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_MFLD_MACHINE policy<{'i386': 'm'}> +CONFIG_SND_SOC_INTEL_HASWELL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BROADWELL_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_SND_SOC_INTEL_SKL_RT286_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_BXT_RT298_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> STMicroelectronics STM32 SOC audio support + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC AC97 Audio for the ADI BF5xx chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs +CONFIG_SND_SOC_FSL_ASRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_SPDIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_FSL_ESAI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SOC_IMX_AUDMUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_SND_SOC_FSL_SSI flag +CONFIG_SND_SOC_IMX_AUDMUX flag + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs >> SoC Audio for Freescale PowerPC CPUs + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale CPUs >> SoC Audio for Freescale i.MX CPUs +CONFIG_SND_IMX_SOC policy<{'armhf-generic': 'y'}> +CONFIG_SND_SOC_EUKREA_TLV320 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_WM8962 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_ES8328 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_SGTL5000 policy<{'armhf-generic': 'y'}> +CONFIG_SND_SOC_IMX_SPDIF policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_IMX_MC13783 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_FSL_ASOC_CARD policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Freescale MXS CPUs + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Texas Instruments chips using eDMA +CONFIG_SND_EDMA_SOC policy<{'armhf-generic': 'm', 'armhf-generic-lpae': 'n'}> +CONFIG_SND_DAVINCI_SOC_I2S policy<{'armhf-generic': 'n'}> +CONFIG_SND_DAVINCI_SOC_MCASP policy<{'armhf': 'm'}> +CONFIG_SND_AM33XX_SOC_EVM policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for Texas Instruments chips using eDMA >> DM365 codec select + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Atmel System-on-Chip +CONFIG_SND_ATMEL_SOC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Intel PXA2xx chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Tegra System-on-Chip +CONFIG_SND_SOC_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_AC97 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_DAS policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_I2S policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA20_SPDIF policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA30_AHUB policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA30_I2S policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_RT5640 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM8753 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM8903 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_WM9712 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_TRIMSLICE policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_ALC5632 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_MAX98090 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_RT5677 policy<{'armhf-generic': 'm'}> +CONFIG_SND_SOC_TEGRA_SGTL5000 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio for the Texas Instruments OMAP chips +CONFIG_SND_OMAP_SOC policy<{'armhf': 'y'}> +CONFIG_SND_OMAP_SOC_HDMI_AUDIO policy<{'armhf': 'm'}> +CONFIG_SND_OMAP_SOC_RX51 policy<{'armhf': 'm'}> +CONFIG_SND_OMAP_SOC_OMAP_TWL4030 policy<{'armhf': 'y'}> +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040 policy<{'armhf-generic': 'm'}> +CONFIG_SND_OMAP_SOC_OMAP3_PANDORA policy<{'armhf-generic': 'm'}> +# +CONFIG_SND_OMAP_SOC note +CONFIG_SND_OMAP_SOC_OMAP_TWL4030 note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for SuperH +CONFIG_SND_SOC_SH4_FSI policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_SND_SOC_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for Ux500 platform + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC Audio support for the Cirrus Logic EP93xx series + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ALSA for SoC audio support >> SoC I2S Audio for the ADI Blackfin chip + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ARM sound devices +CONFIG_SND_ARM policy<{'armhf': 'y'}> +CONFIG_SND_ARMAACI policy<{'armhf': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Apple Onboard Audio driver + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Atmel devices (AT91) + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> FireWire sound devices +CONFIG_SND_FIREWIRE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_DICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OXFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ISIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWORKS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BEBOB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_DIGI00X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_TASCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREWIRE_MOTU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FIREFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> GSC sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Generic sound devices +CONFIG_SND_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_PCSP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALOOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIRMIDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MTPAV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MTS64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SERIAL_U16550 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MPU401 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PORTMAN2X4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AC97_POWER_SAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_AC97_POWER_SAVE_DEFAULT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> HD-Audio +CONFIG_SND_HDA_INTEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_SND_HDA_HWDEP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_RECONFIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_INPUT_BEEP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_INPUT_BEEP_MODE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_SND_HDA_PATCH_LOADER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_CODEC_REALTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_ANALOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_SIGMATEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_VIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_HDMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CIRRUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CONEXANT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0110 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_CA0132_DSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDA_CODEC_CMEDIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_CODEC_SI3054 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDA_POWER_SAVE_DEFAULT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +# +CONFIG_SND_HDA_RECONFIG note + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> ISA sound devices +CONFIG_SND_ISA policy<{'i386': 'y'}> +CONFIG_SND_ADLIB policy<{'i386': 'm'}> +CONFIG_SND_AD1816A policy<{'i386': 'm'}> +CONFIG_SND_AD1848 policy<{'i386': 'm'}> +CONFIG_SND_ALS100 policy<{'i386': 'm'}> +CONFIG_SND_AZT1605 policy<{'i386': 'm'}> +CONFIG_SND_AZT2316 policy<{'i386': 'm'}> +CONFIG_SND_AZT2320 policy<{'i386': 'm'}> +CONFIG_SND_CMI8328 policy<{'i386': 'm'}> +CONFIG_SND_CMI8330 policy<{'i386': 'm'}> +CONFIG_SND_CS4231 policy<{'i386': 'm'}> +CONFIG_SND_CS4236 policy<{'i386': 'm'}> +CONFIG_SND_ES1688 policy<{'i386': 'm'}> +CONFIG_SND_ES18XX policy<{'i386': 'm'}> +CONFIG_SND_SC6000 policy<{'i386': 'm'}> +CONFIG_SND_GUSCLASSIC policy<{'i386': 'm'}> +CONFIG_SND_GUSEXTREME policy<{'i386': 'm'}> +CONFIG_SND_GUSMAX policy<{'i386': 'm'}> +CONFIG_SND_INTERWAVE policy<{'i386': 'm'}> +CONFIG_SND_INTERWAVE_STB policy<{'i386': 'm'}> +CONFIG_SND_JAZZ16 policy<{'i386': 'm'}> +CONFIG_SND_OPL3SA2 policy<{'i386': 'm'}> +CONFIG_SND_OPTI92X_AD1848 policy<{'i386': 'm'}> +CONFIG_SND_OPTI92X_CS4231 policy<{'i386': 'm'}> +CONFIG_SND_OPTI93X policy<{'i386': 'm'}> +CONFIG_SND_MIRO policy<{'i386': 'm'}> +CONFIG_SND_SB8 policy<{'i386': 'm'}> +CONFIG_SND_SB16 policy<{'i386': 'm'}> +CONFIG_SND_SBAWE policy<{'i386': 'm'}> +CONFIG_SND_SB16_CSP policy<{'i386': 'y'}> +CONFIG_SND_SSCAPE policy<{'i386': 'm'}> +CONFIG_SND_WAVEFRONT policy<{'i386': 'm'}> +CONFIG_SND_MSND_PINNACLE policy<{'i386': 'm'}> +CONFIG_SND_MSND_CLASSIC policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> MIPS sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PCI sound devices +CONFIG_SND_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_AD1889 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALS300 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALS4000 policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ALI5451 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ASIHPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_ATIIXP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ATIIXP_MODEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8810 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8820 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AU8830 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AW2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_AZT3328 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BT87X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BT87X_OVERCLOCK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_CA0106 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CMIPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_OXYGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS4281 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS46XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_CS46XX_NEW_DSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_CS5530 policy<{'i386': 'm'}> +CONFIG_SND_CS5535AUDIO policy<{'i386': 'm'}> +CONFIG_SND_CTXFI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DARLA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_GINA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LAYLA20 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_DARLA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_GINA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LAYLA24 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MONA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ECHO3G policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGOIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGODJ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGOIOX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INDIGODJX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_EMU10K1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_EMU10K1X policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ENS1370 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ENS1371 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1938 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1968 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ES1968_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_ES1968_RADIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_FM801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_FM801_TEA575X_BOOL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_HDSP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_HDSPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ICE1712 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_ICE1724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INTEL8X0 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_INTEL8X0M policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_KORG1212 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LOLA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_LX6464ES policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MAESTRO3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_MAESTRO3_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_MIXART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_NM256 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_PCXHR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RIPTIDE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME96 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_RME9652 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SIS7019 policy<{'i386': 'm'}> +CONFIG_SND_SONICVIBES policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_TRIDENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIA82XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIA82XX_MODEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VIRTUOSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_VX222 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_YMFPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PCMCIA sound devices +CONFIG_SND_PCMCIA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_SND_VXPOCKET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_PDAUDIOCF policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> PowerPC sound devices +CONFIG_SND_PPC policy<{'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> SPI sound devices +CONFIG_SND_SPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> SUPERH sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Sequencer support +CONFIG_SND_SEQUENCER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SEQ_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_SEQUENCER_OSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SND_SEQ_HRTIMER_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> Sparc sound devices + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> USB sound devices +CONFIG_SND_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_USB_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_UA101 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_USX2Y policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_CAIAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_CAIAQ_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SND_USB_US122L policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SND_USB_6FIRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_HIFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_BCD2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_POD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_PODHD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_TONEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SND_USB_VARIAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Sound card support >> Advanced Linux Sound Architecture >> X86 sound devices +CONFIG_SND_X86 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HDMI_LPE_AUDIO policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers +CONFIG_STAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PRISM2_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8723BS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8712U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_R8188EU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_88EU_AP_MODE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_R8822BE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTS5208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VT6655 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VT6656 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_SM750 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_XGI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMXX policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_STAGING_BOARD policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_LTE_GDM724X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FIREWIRE_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FWTTY_MAX_TOTAL_PORTS policy<{'amd64': '64', 'arm64': '64', 'armhf': '64', 'i386': '64', 'ppc64el': '64'}> +CONFIG_FWTTY_MAX_CARD_PORTS policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32'}> +CONFIG_MTD_SPINAND_MT29F policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MTD_SPINAND_ONDIEECC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LUSTRE_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DGNC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GS_FPGABOOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_SKEIN policy<{'amd64': 'y'}> +CONFIG_COMMON_CLK_XLNX_CLKWZRD policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_FSL_MC_BUS policy<{'arm64': 'y'}> +CONFIG_FSL_MC_DPIO policy<{'arm64': 'm'}> +CONFIG_FSL_DPAA2 policy<{'arm64': 'y'}> +CONFIG_FSL_DPAA2_ETH policy<{'arm64': 'm'}> +CONFIG_WILC1000_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILC1000_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WILC1000_HW_OOB_INTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KS7010 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CRYPTO_DEV_CCREE policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_DRM_VBOXVIDEO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PI433 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_STAGING flag +CONFIG_LUSTRE_FS flag +CONFIG_DRM_VBOXVIDEO note flag + +# Menu: Device Drivers >> Staging drivers >> Android + +# Menu: Device Drivers >> Staging drivers >> Android >> Ion Memory Manager + +# Menu: Device Drivers >> Staging drivers >> Broadcom VideoCore support +CONFIG_BCM_VIDEOCORE policy<{'arm64': 'm'}> +CONFIG_BCM2835_VCHIQ policy<{'arm64': 'm'}> +CONFIG_SND_BCM2835 policy<{'arm64': 'm'}> +CONFIG_VIDEO_BCM2835 policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) +CONFIG_COMEDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB policy<{'amd64': '2048', 'arm64': '2048', 'armhf': '2048', 'i386': '2048', 'ppc64el': '2048'}> +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB policy<{'amd64': '20480', 'arm64': '20480', 'armhf': '20480', 'i386': '20480', 'ppc64el': '20480'}> +CONFIG_COMEDI_8255_SA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_KCOMEDILIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi ISA and PC/104 drivers +CONFIG_COMEDI_ISA_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_COMEDI_PCL711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL726 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL730 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL812 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL816 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCL818 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCM3724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_DIO200_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC236_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC263_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTI800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTI802 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAC02 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS16M1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS08_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS1800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS6402 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2801 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2811 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2814 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2815 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT2817 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT282X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DMM32AT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_FL512 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AIO_AIO12_8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AIO_IIRO_16 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_II_PCI20KC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_C6XDIGIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MPC624 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADQ12B policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_AT_A2150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_AT_AO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_ATMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_ATMIO16D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_LABPC_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMDA12 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PCMUIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MULTIQ3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_S526 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi PCI drivers +CONFIG_COMEDI_PCI_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_8255_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1032 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1516 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_1564 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_16XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_2032 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_2200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3120 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADDI_APCI_3XXX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI6208 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI7X3X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI8164 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI9111 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADL_PCI9118 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1710 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1723 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1724 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI1760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ADV_PCI_DIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_DIO200_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC236_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PC263_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PCI224 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_AMPLC_PCI230 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CONTEC_PCI_DIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAS08_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT3000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DYNA_PCI10XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_GSC_HPDI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_MF6X4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ICP_MULTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DAQBOARD2000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_JR3_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_KE_COUNTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDAS64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIDDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIMDAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_CB_PCIMDDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ME4000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_ME_DAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_6527 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_65XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_660X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_670X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_LABPC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_PCIDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_PCIMIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_RTD520 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_S626 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi PCMCIA drivers +CONFIG_COMEDI_PCMCIA_DRIVERS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_CB_DAS16_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_DAS08_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_DAQ_700_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_DAQ_DIO24_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_LABPC_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_NI_MIO_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMEDI_QUATECH_DAQP_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi USB drivers +CONFIG_COMEDI_USB_DRIVERS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_DT9812 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_NI_USB6501 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUXFAST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_USBDUXSIGMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_VMK80XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Data acquisition support (comedi) >> Comedi misc drivers +CONFIG_COMEDI_MISC_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_COMEDI_BOND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_PARPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_SERIAL2002 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_COMEDI_SSV_DNP policy<{'i386': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Greybus support +CONFIG_GREYBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_ES2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_BOOTROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LIGHT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_LOOPBACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_POWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_VIBRATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Greybus support >> Greybus Bridged PHY Class drivers +CONFIG_GREYBUS_BRIDGED_PHY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GREYBUS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Accelerometers +CONFIG_ADIS16201 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16203 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16209 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADIS16240 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Active energy metering IC +CONFIG_ADE7753 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7754 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7758 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7759 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADE7854_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Analog digital bi-direction converters +CONFIG_ADT7316 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADT7316_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ADT7316_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Analog to digital converters +CONFIG_AD7606 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7606_IFACE_PARALLEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7606_IFACE_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7780 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7816 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7192 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Capacitance to digital converters +CONFIG_AD7150 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7152 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD7746 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Digital gyroscope sensors +CONFIG_ADIS16060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Direct Digital Synthesis +CONFIG_AD9832 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD9834 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Light sensors +CONFIG_TSL2x7x policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Network Analyzer, Impedance Converters +CONFIG_AD5933 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IIO staging drivers >> Resolver to digital converters +CONFIG_AD2S90 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD2S1200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AD2S1210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support +CONFIG_IRDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IRDA_ULTRA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_CACHE_LAST_LSAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_FAST_RR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_IRDA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers +CONFIG_IRTTY_SIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KINGSUN_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KSDAZZLE_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_KS959_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IRDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SIGMATEL_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NSC_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WINBOND_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOSHIBA_FIR policy<{'i386': 'm'}> +CONFIG_SMC_IRCC_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ALI_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VLSI_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIA_FIR policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCS_FIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Blackfin SIR on UART + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Blackfin SIR on UART >> SIR Mode + +# Menu: Device Drivers >> Staging drivers >> IrDA (infrared) subsystem support >> Infrared-port device drivers >> Serial dongle support +CONFIG_DONGLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ESI_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACTISYS_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEKRAM_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TOIM3232_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LITELINK_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MA600_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GIRBIL_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MCP2120_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_OLD_BELKIN_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ACT200L_DONGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Lustre networking subsystem (LNet) +CONFIG_LNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LNET_MAX_PAYLOAD policy<{'amd64': '1048576', 'arm64': '1048576', 'armhf': '1048576', 'i386': '1048576', 'ppc64el': '1048576'}> +CONFIG_LNET_SELFTEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LNET_XPRT_IB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> MOST driver +CONFIG_MOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MOSTCORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_CDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_NETWORK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_SOUND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AIM_V4L2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_DIM2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HDM_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers +CONFIG_STAGING_MEDIA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_I2C_BCM2048 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DVB_CXD2099 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIDEO_IMX_MEDIA policy<{'armhf-generic': 'm'}> +CONFIG_VIDEO_OMAP4 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> Enable support to Intel MIPI camera drivers +CONFIG_INTEL_ATOMISP policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_INTEL_ATOMISP note + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> Linux Infrared Remote Control IR receiver/transmitter drivers +CONFIG_LIRC_STAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIRC_ZILOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Media staging drivers >> i.MX5/6 Media Sub devices +CONFIG_VIDEO_IMX_CSI policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> NV Tegra Embedded Controller SMBus Interface +CONFIG_MFD_NVEC policy<{'armhf-generic': 'm'}> +CONFIG_KEYBOARD_NVEC policy<{'armhf-generic': 'm'}> +CONFIG_SERIO_NVEC_PS2 policy<{'armhf-generic': 'm'}> +CONFIG_NVEC_POWER policy<{'armhf-generic': 'm'}> +CONFIG_NVEC_PAZ00 policy<{'armhf-generic': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Speakup console speech + +# Menu: Device Drivers >> Staging drivers >> Speakup console speech >> Speakup core +CONFIG_SPEAKUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_ACNTSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_ACNTPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_APOLLO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_AUDPTR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_BNS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECTLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DECPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_DTLK policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_KEYPC policy<{'i386': 'm'}> +CONFIG_SPEAKUP_SYNTH_LTLK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_SOFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_SPKOUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_TXPRT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SPEAKUP_SYNTH_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Support for rtllib wireless devices +CONFIG_RTLLIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_CCMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_TKIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTLLIB_CRYPTO_WEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_RTL8192E policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Support for small TFT LCD display modules +CONFIG_FB_TFT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_AGM1264K_FL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_BD663474 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8340BN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8347D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8353D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_HX8357D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9163 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9320 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9325 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9340 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9341 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9481 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ILI9486 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_PCD8544 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_RA8875 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_S6D02A1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_S6D1121 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SH1106 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1289 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1306 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1325 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1331 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_SSD1351 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ST7735R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_ST7789V policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_TINYLCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_TLS8204 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UC1611 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UC1701 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_UPD161704 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_WATTEROTT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_FLEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_FB_TFT_FBTFT_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> USB Power Delivery and Type-C drivers +CONFIG_TYPEC_TCPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Staging drivers >> Unisys SPAR driver support +CONFIG_UNISYSSPAR policy<{'amd64': 'y'}> +CONFIG_UNISYS_VISORBUS policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORNIC policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORINPUT policy<{'amd64': 'm'}> +CONFIG_UNISYS_VISORHBA policy<{'amd64': 'm'}> + +# Menu: Device Drivers >> System Trace Module devices +CONFIG_STM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_DUMMY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_CONSOLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_HEARTBEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_STM_SOURCE_FTRACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> TEE drivers +CONFIG_OPTEE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> TI VLYNQ + +# Menu: Device Drivers >> USB support +CONFIG_USB_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_USB_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_UHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_WHCI_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LED_TRIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ULPI_BUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_UHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> ChipIdea Highspeed Dual Role Controller +CONFIG_USB_CHIPIDEA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CHIPIDEA_UDC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CHIPIDEA_HOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CHIPIDEA_ULPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB +CONFIG_USB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ANNOUNCE_NEW_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DEFAULT_PERSIST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DYNAMIC_MINORS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OTG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_OTG_WHITELIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_OTG_BLACKLIST_HUB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_LEDS_TRIGGER_USBPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB_CBAF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WUSB_CBAF_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_C67X00_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_OXU210HP_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISP116X_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISP1362_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FOTG210_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MAX3421_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_U132_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SL811_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SL811_HCD_ISO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SL811_CS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_USB_R8A66597_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RENESAS_USBHS_HCD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_HWA_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IMX21_HCD policy<{'armhf-generic': 'm'}> +CONFIG_USB_HCD_BCMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HCD_SSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HCD_TEST_MODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_RENESAS_USBHS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_ACM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_WDM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MDC800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MICROTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MTU3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_MTU3_DEBUG policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_ISP1760 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_USS720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMI62 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EMI26 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ADUTUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SEVSEG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RIO500 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LEGOTOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CYPRESS_CY7C63 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CYTHERM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IDMOUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FTDI_ELAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_APPLEDISPLAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SISUSBVGA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SISUSBVGA_CON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_LD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TRANCEVIBRATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_IOWARRIOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EHSET_TEST_FIXTURE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ISIGHTFW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_YUREX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EZUSB_FX2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HUB_USB251XB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSIC_USB3503 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_HSIC_USB4604 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_LINK_LAYER_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CHAOSKEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_OTG note +CONFIG_USB_OTG_WHITELIST note +CONFIG_USB_OTG_BLACKLIST_HUB note +CONFIG_USB_OTG_FSM note> +CONFIG_USB_HCD_BCMA note +CONFIG_USB_HCD_SSB note + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB2 DRD Core Support +CONFIG_USB_DWC2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC2_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DWC2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC2_TRACK_MISSED_SOFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB2 DRD Core Support >> DWC2 Mode Selection +CONFIG_USB_DWC2_HOST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC2_PERIPHERAL policy<{'armhf': 'n'}> +CONFIG_USB_DWC2_DUAL_ROLE policy<{'armhf': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB3 DRD Core Support +CONFIG_USB_DWC3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DWC3_ULPI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_DWC3_OMAP policy<{'armhf': 'm'}> +CONFIG_USB_DWC3_EXYNOS policy<{'armhf': 'm'}> +CONFIG_USB_DWC3_PCI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_USB_DWC3_OF_SIMPLE policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> DesignWare USB3 DRD Core Support >> DWC3 Mode Selection +CONFIG_USB_DWC3_HOST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC3_GADGET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_DWC3_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> EHCI HCD (USB 2.0) support +CONFIG_USB_EHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_ROOT_HUB_TT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_TT_NEWSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_EHCI_MXC policy<{'armhf-generic': 'm'}> +CONFIG_USB_EHCI_HCD_OMAP policy<{'armhf': 'm'}> +CONFIG_USB_EHCI_HCD_ORION policy<{'armhf': 'y'}> +CONFIG_USB_EHCI_TEGRA policy<{'armhf-generic': 'm'}> +CONFIG_USB_EHCI_HCD_PPC_OF policy<{'ppc64el': 'y'}> +CONFIG_USB_EHCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_USB_EHCI_HCD_PLATFORM policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_USB_EHCI_HCD_PLATFORM mark note flag +CONFIG_USB_EHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> ISP1760 Mode Selection +CONFIG_USB_ISP1760_HOST_ROLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ISP1760_GADGET_ROLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ISP1760_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) +CONFIG_USB_MUSB_HDRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MUSB_SUNXI policy<{'arm64': 'm'}> +CONFIG_USB_MUSB_TUSB6010 policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_OMAP2PLUS policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_AM35X policy<{'armhf': 'm'}> +CONFIG_USB_MUSB_DSPS policy<{'armhf': 'm'}> +# +CONFIG_USB_MUSB_HDRC note flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) >> Disable DMA (always use PIO) +CONFIG_MUSB_PIO_ONLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> Inventra Highspeed Dual Role Controller (TI, ADI, AW, ...) >> MUSB Mode Selection +CONFIG_USB_MUSB_HOST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_MUSB_GADGET policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_MUSB_DUAL_ROLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> MTU3 Mode Selection +CONFIG_USB_MTU3_HOST policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_MTU3_GADGET policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_USB_MTU3_DUAL_ROLE policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> OHCI HCD (USB 1.1) support +CONFIG_USB_OHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OHCI_HCD_OMAP3 policy<{'armhf-generic': 'm'}> +CONFIG_USB_OHCI_HCD_PPC_OF_BE policy<{'ppc64el': 'n'}> +CONFIG_USB_OHCI_HCD_PPC_OF_LE policy<{'ppc64el': 'n'}> +CONFIG_USB_OHCI_HCD_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_OHCI_EXYNOS policy<{'armhf': 'y'}> +CONFIG_USB_OHCI_HCD_PLATFORM policy<{'amd64': 'y', 'arm64': 'm', 'armhf-generic': 'm', 'armhf-generic-lpae': 'n', 'i386': 'y', 'ppc64el': 'm'}> +# +CONFIG_USB_OHCI_HCD marknote +CONFIG_USB_OHCI_HCD_PPC_OF_LE flag + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB DSL modem support +CONFIG_USB_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SPEEDTOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CXACRU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_UEAGLEATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_XUSBATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Mass Storage support +CONFIG_USB_STORAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_STORAGE_REALTEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REALTEK_AUTOPM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_STORAGE_DATAFAB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_FREECOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ISD200 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_USBAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_SDDR09 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_SDDR55 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_JUMPSHOT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ALAUDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ONETOUCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_KARMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_CYPRESS_ATACB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_STORAGE_ENE_UB6250 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_UAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support +CONFIG_USB_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_AIRCABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_ARK3116 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_BELKIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CH341 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_WHITEHEAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_DIGI_ACCELEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CP210X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CYPRESS_M8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EMPEG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_FTDI_SIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_VISOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IPAQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EDGEPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_EDGEPORT_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_F81232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_F8153X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_GARMIN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IPW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_IUU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KEYSPAN_PDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KLSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KOBIL_SCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MCT_U232 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_METRO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MOS7720 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MOS7715_PARPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_MOS7840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_MXUPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_NAVMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OTI6858 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QCAUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QUALCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SPCP8X5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SAFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SAFE_PADDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_SERIAL_SIERRAWIRELESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SYMBOL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_TI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_CYBERJACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_XIRCOM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OPTION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OMNINET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_OPTICON policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_XSENS_MT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_WISHBONE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_SSU100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_QT2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_UPD78F0730 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_DEBUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_USB_SERIAL_DEBUG note + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support >> USB Keyspan USA-xxx Serial Driver +CONFIG_USB_SERIAL_KEYSPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SERIAL_KEYSPAN_MPR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28XA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA28XB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA18X policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19W policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19QW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA19QI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA49W policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB/IP support +CONFIG_USBIP_CORE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VHCI_HCD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VHCI_HC_PORTS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> +CONFIG_USBIP_VHCI_NR_HCS policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1'}> +CONFIG_USBIP_HOST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_VUDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USBIP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Device Drivers >> USB support >> Support for Host-side USB >> xHCI HCD (USB 3.0) support +CONFIG_USB_XHCI_HCD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_XHCI_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_XHCI_MTK policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_XHCI_MVEBU policy<{'armhf': 'm'}> +CONFIG_USB_XHCI_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_XHCI_TEGRA policy<{'armhf-generic': 'm'}> +# +CONFIG_USB_XHCI_HCD mark note flag + +# Menu: Device Drivers >> USB support >> USB Gadget Support +CONFIG_USB_GADGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_DEBUG_FILES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_GADGET_VBUS_DRAW policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS policy<{'amd64': '2', 'arm64': '2', 'armhf': '2', 'i386': '2', 'ppc64el': '2'}> +CONFIG_U_SERIAL_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget functions configurable through configfs +CONFIG_USB_CONFIGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CONFIGFS_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ACM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_OBEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_NCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ECM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_ECM_SUBSET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_EEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_PHONET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_MASS_STORAGE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_LB_SS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UAC2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_MIDI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_HID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_UVC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_PRINTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_CONFIGFS_F_TCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations +CONFIG_USB_ZERO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AUDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GADGET_UAC1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_GADGET_UAC1_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_ETH_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ETH_EEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_G_NCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGETFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MASS_STORAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_TARGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MIDI_GADGET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_PRINTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_CDC_COMPOSITE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_NOKIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_ACM_MS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_MULTI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'm', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_G_MULTI_RNDIS policy<{'armhf': 'y'}> +CONFIG_USB_G_MULTI_CDC policy<{'armhf': 'y'}> +CONFIG_USB_G_HID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_DBGP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_G_WEBCAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations >> EHCI Debug Device mode +CONFIG_USB_G_DBGP_PRINTK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_G_DBGP_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Gadget precomposed configurations >> Function Filesystem +CONFIG_USB_FUNCTIONFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_FUNCTIONFS_ETH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_FUNCTIONFS_RNDIS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_FUNCTIONFS_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Device Drivers >> USB support >> USB Gadget Support >> USB Peripheral Controller +CONFIG_USB_FSL_USB2 policy<{'armhf-generic': 'm'}> +CONFIG_USB_FUSB300 policy<{'armhf-generic': 'm'}> +CONFIG_USB_FOTG210_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GR_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_R8A66597 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_RENESAS_USBHS_UDC policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_RENESAS_USB3 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_USB_PXA27X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MV_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MV_U3D policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_SNP_UDC_PLAT policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_USB_M66592 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_USB_BDC_UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_BDC_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_AMD5536UDC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET2272 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_NET2272_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_NET2280 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GOKU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_EG20T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_GADGET_XILINX policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_USB_DUMMY_HCD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_USB_M66592 note +CONFIG_USB_DUMMY_HCD flag + +# Menu: Device Drivers >> USB support >> USB Physical Layer drivers +CONFIG_NOP_USB_XCEIV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AM335X_PHY_USB policy<{'armhf': 'm'}> +CONFIG_TWL6030_USB policy<{'armhf': 'm'}> +CONFIG_USB_GPIO_VBUS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TAHVO_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TAHVO_USB_HOST_BY_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_USB_ISP1301 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_USB_MXS_PHY policy<{'armhf-generic': 'y'}> +CONFIG_USB_ULPI policy<{'arm64': 'y', 'armhf': 'y'}> +# +CONFIG_NOP_USB_XCEIV note + +# Menu: Device Drivers >> USB support >> USB Type-C Support +CONFIG_TYPEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_TCPM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_FUSB302 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TYPEC_UCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UCSI_ACPI policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_TYPEC_TPS6598X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Ultra Wideband devices +CONFIG_UWB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UWB_HWA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UWB_WHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UWB_I1480U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Userspace I/O drivers +CONFIG_UIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_UIO_CIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_PDRV_GENIRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_DMEM_GENIRQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_AEC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_SERCOS3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_PCI_GENERIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_NETX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_FSL_ELBC_GPCM policy<{'ppc64el': 'm'}> +CONFIG_UIO_FSL_ELBC_GPCM_NETX5152 policy<{'ppc64el': 'n'}> +CONFIG_UIO_PRUSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_MF624 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UIO_HV_GENERIC policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> VFIO Non-Privileged userspace driver framework +CONFIG_VFIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_VFIO_NOIOMMU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VFIO_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'y', 's390x': 'm'}> +CONFIG_VFIO_PCI_VGA policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_VFIO_MDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VFIO_MDEV_DEVICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_VFIO marknote +CONFIG_VFIO_PCI marknote + +# Menu: Device Drivers >> VFIO Non-Privileged userspace driver framework >> VFIO support for platform devices +CONFIG_VFIO_PLATFORM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_AMBA policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_AMDXGBE_RESET policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET policy<{'arm64': 'm'}> + +# Menu: Device Drivers >> VME bridge support +CONFIG_VME_BUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VME_CA91CX42 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VME_TSI148 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VME_FAKE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VMIVME_7805 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VME_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Virtio drivers +CONFIG_VIRTIO_PCI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_PCI_LEGACY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_BALLOON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VIRTIO_INPUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VIRTIO_MMIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_VIRTIO_PCI mark +CONFIG_VIRTIO_MMIO note + +# Menu: Device Drivers >> Virtualization drivers +CONFIG_VIRT_DRIVERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Device Drivers >> Voltage and Current Regulator Support +CONFIG_REGULATOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_REGULATOR_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REGULATOR_FIXED_VOLTAGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VIRTUAL_CONSUMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_USERSPACE_CONSUMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_88PM800 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_88PM8607 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ACT8865 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ACT8945A policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AD5398 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ANATOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AAT2870 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AB3100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ARIZONA_LDO1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ARIZONA_MICSUPP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AS3711 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AS3722 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_AXP20X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_BCM590XX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_BD9571MWV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_CPCAP policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA903X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9052 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9055 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9062 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9063 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9210 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_DA9211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_FAN53555 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI6421 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI6421V530 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_HI655X policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_ISL9305 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_ISL6271A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LM363X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP3971 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP3972 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP872X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP873X policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP8755 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP87565 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LP8788 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LTC3589 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_LTC3676 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX14577 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX1586 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77620 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8649 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8660 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8907 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8925 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8952 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8973 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8997 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX8998 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77686 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77693 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MAX77802 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MC13783 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MC13892 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6311 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_MT6380 policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_MT6397 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PALMAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PBIAS policy<{'armhf': 'm'}> +CONFIG_REGULATOR_PCAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PCF50633 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PFUZE100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88060 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88080 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PV88090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_PWM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_QCOM_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_QCOM_SMD_RPM policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_QCOM_SPMI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RC5T583 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RK808 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RN5T618 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_RT5033 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S2MPA01 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S2MPS11 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_S5M8767 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_SKY81452 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TI_ABB policy<{'armhf': 'y'}> +CONFIG_REGULATOR_TPS51632 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6105X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS62360 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65023 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6507X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65086 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65090 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65132 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65217 policy<{'arm64': 'm', 'armhf': 'y'}> +CONFIG_REGULATOR_TPS65218 policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6524X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS6586X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65910 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS65912 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TPS80031 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_TWL4030 policy<{'amd64': 'm', 'arm64': 'm', 'armhf-generic': 'y', 'armhf-generic-lpae': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VCTRL policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_VEXPRESS policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_REGULATOR_WM831X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8350 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8400 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_REGULATOR_WM8994 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +# +CONFIG_REGULATOR_FIXED_VOLTAGE note +CONFIG_REGULATOR_TWL4030 mark note +CONFIG_REGULATOR_TPS65217 mark note + +# Menu: Device Drivers >> Watchdog Timer Support +CONFIG_WATCHDOG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_NOWAYOUT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SOFT_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SOFT_WATCHDOG_PRETIMEOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DA9052_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9055_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9063_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DA9062_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_GPIO_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_MENF21BMC_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TANGOX_WATCHDOG policy<{'armhf': 'n'}> +CONFIG_WDAT_WDT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_WM831X_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_WM8350_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_XILINX_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ZIIRAVE_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ARM_SP805_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_SBSA_WATCHDOG policy<{'arm64': 'm'}> +CONFIG_CADENCE_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_S3C2410_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_DW_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMAP_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_ORION_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_RN5T618_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_SUNXI_WATCHDOG policy<{'arm64': 'm'}> +CONFIG_TWL4030_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TS4800_WATCHDOG policy<{'armhf-generic': 'm'}> +CONFIG_MAX63XX_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAX77620_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_IMX2_WDT policy<{'arm64': 'm', 'armhf-generic': 'm'}> +CONFIG_RETU_WATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_TEGRA_WATCHDOG policy<{'armhf-generic': 'm'}> +CONFIG_QCOM_WDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_MESON_GXBB_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_MESON_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_MEDIATEK_WATCHDOG policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_WDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_RENESAS_RZAWDT policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_UNIPHIER_WATCHDOG policy<{'armhf': 'm'}> +CONFIG_ACQUIRE_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ADVANTECH_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIM1535_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIM7101_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EBC_C384_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_F71808E_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SP5100_TCO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC_FITPC2_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EUROTECH_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IB700_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IBMASR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WAFER_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_I6300ESB_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IE6XX_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SCU_WATCHDOG policy<{'i386': 'y'}> +CONFIG_INTEL_MID_WATCHDOG policy<{'i386': 'm'}> +CONFIG_ITCO_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ITCO_VENDOR_SUPPORT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IT8712F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_IT87_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KEMPLD_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_HPWDT_NMI_DECODING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_SC1200_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SCx200_WDT policy<{'i386': 'm'}> +CONFIG_PC87413_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NV_TCO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_60XX_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC8360_WDT policy<{'i386': 'm'}> +CONFIG_SBC7240_WDT policy<{'i386': 'm'}> +CONFIG_CPU5_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SMSC_SCH311X_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SMSC37B787_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIA_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83627HF_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83877F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_W83977F_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MACHZ_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SBC_EPX_C3_WATCHDOG policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MEI_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NI903X_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NIC7018_WDT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BCM2835_WDT policy<{'arm64': 'm'}> +CONFIG_BCM7038_WDT policy<{'arm64': 'm'}> +CONFIG_MEN_A21_WDT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_WATCHDOG_RTAS policy<{'ppc64el': 'm'}> +CONFIG_DIAG288_WATCHDOG policy<{'s390x': 'm'}> +CONFIG_XEN_WDT policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_PCWATCHDOG policy<{'i386': 'm'}> +CONFIG_MIXCOMWD policy<{'i386': 'm'}> +CONFIG_WDT policy<{'i386': 'm'}> +CONFIG_PCIPCWATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_WDTPCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_USBPCWATCHDOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Device Drivers >> Watchdog Timer Support >> Enable watchdog pretimeout governors +CONFIG_WATCHDOG_PRETIMEOUT_GOV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Device Drivers >> Watchdog Timer Support >> Enable watchdog pretimeout governors >> Default Watchdog Pretimeout Governor +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers +CONFIG_X86_PLATFORM_DEVICES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ACER_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACERHDF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ALIENWARE_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMBIOS_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMBIOS_SMM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI_AIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_WMI_LED policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_SMO8800 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DELL_RBTN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FUJITSU_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_FUJITSU_TABLET policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_AMILO_RFKILL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TC1100_WMI policy<{'i386': 'm'}> +CONFIG_HP_ACCEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WIRELESS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_HP_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MSI_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PANASONIC_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_COMPAL_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SONY_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SONYPI_COMPAT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IDEAPAD_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE3_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SENSORS_HDAPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_MENLOW policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EEEPC_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_NB_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_EEEPC_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ASUS_WIRELESS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOPSTAR_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_BT_RFKILL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_HAPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_CMPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_CHT_INT33FE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_INT0002_VGPIO policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_HID_EVENT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_VBTN policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SCU_IPC policy<{'i386': 'y'}> +CONFIG_INTEL_SCU_IPC_UTIL policy<{'i386': 'm'}> +CONFIG_INTEL_MID_POWER_BUTTON policy<{'i386': 'm'}> +CONFIG_INTEL_MFLD_THERMAL policy<{'i386': 'm'}> +CONFIG_INTEL_IPS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PMC_CORE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IBM_RTL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SAMSUNG_LAPTOP policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_OAKTRAIL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SAMSUNG_Q10 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_APPLE_GMUX policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_RST policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_SMARTCONNECT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PVPANIC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PMC_IPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_BXTWC_PMIC_TMU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE_PRO3_BUTTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_SURFACE_3_BUTTON policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_PUNIT_IPC policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_TELEMETRY policy<{'amd64': 'm'}> +CONFIG_MLX_PLATFORM policy<{'amd64': 'm'}> +CONFIG_MLX_CPLD_PLATFORM policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_TURBO_MAX_3 policy<{'amd64': 'y'}> +CONFIG_SILEAD_DMI policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers >> ThinkPad ACPI Laptop Extras +CONFIG_THINKPAD_ACPI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_THINKPAD_ACPI_UNSAFE_LEDS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_THINKPAD_ACPI_VIDEO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_THINKPAD_ACPI_HOTKEY_POLL policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Device Drivers >> X86 Platform Specific Device Drivers >> WMI +CONFIG_ACPI_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_WMI_BMOF policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_INTEL_WMI_THUNDERBOLT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_MSI_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PEAQ_WMI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_ACPI_TOSHIBA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_TOSHIBA_WMI policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MXM_WMI policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Xen driver support +CONFIG_XEN_DEV_EVTCHN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XENFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_COMPAT_XENFS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_SYS_HYPERVISOR policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_GNTDEV policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_GRANT_DEV_ALLOC policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_PVCALLS_FRONTEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_XEN_ACPI_PROCESSOR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_MCE_LOG policy<{'amd64': 'y'}> +CONFIG_XEN_SYMS policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_XEN_ACPI_PROCESSOR mark + +# Menu: Device Drivers >> Xen driver support >> Backend driver support +CONFIG_XEN_BACKEND policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_PCIDEV_BACKEND policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_XEN_PVCALLS_BACKEND policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_XEN_SCSI_BACKEND policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> + +# Menu: Device Drivers >> Xen driver support >> Xen memory balloon driver +CONFIG_XEN_BALLOON policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_SELFBALLOONING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT policy<{'amd64': '512', 'i386': '4'}> +CONFIG_XEN_SCRUB_PAGES policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> + +# Menu: Dump support +# + +# Menu: Dump support >> Architecture: s390 + +# Menu: Enable loadable module support +CONFIG_MODULES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_FORCE_LOAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_UNLOAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_FORCE_UNLOAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODVERSIONS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SRCVERSION_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable loadable module support >> Compression algorithm + +# Menu: Enable loadable module support >> Module signature verification +CONFIG_MODULE_SIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MODULE_SIG_FORCE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Enable loadable module support >> Module signature verification >> Which hash algorithm should modules be signed with? +CONFIG_MODULE_SIG_SHA1 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA224 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA256 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA384 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MODULE_SIG_SHA512 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Enable the block layer +CONFIG_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LBDAF policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_BLK_DEV_BSG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_BSGLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_INTEGRITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_ZONED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_THROTTLING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_THROTTLING_LOW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_CMDLINE_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_WBT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_WBT_SQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_WBT_MQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEBUG_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_SED_OPAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_BLK_DEV_THROTTLING note + +# Menu: Enable the block layer >> IO Schedulers +CONFIG_IOSCHED_DEADLINE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IOSCHED_CFQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CFQ_GROUP_IOSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MQ_IOSCHED_DEADLINE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MQ_IOSCHED_KYBER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IOSCHED_BFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BFQ_GROUP_IOSCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_MQ_IOSCHED_DEADLINE flag + +# Menu: Enable the block layer >> IO Schedulers >> Default I/O scheduler +CONFIG_DEFAULT_DEADLINE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_CFQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_NOOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable the block layer >> Partition Types + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection +CONFIG_PARTITION_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AIX_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_OSF_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_AMIGA_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ATARI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IBM_PARTITION policy<{'s390x': 'y'}> +CONFIG_MAC_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LDM_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_LDM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_SGI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ULTRIX_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SUN_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KARMA_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EFI_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSV68_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_CMDLINE_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +# +CONFIG_PARTITION_ADVANCED flag + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection >> Acorn partition support +CONFIG_ACORN_PARTITION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Enable the block layer >> Partition Types >> Advanced partition selection >> PC BIOS (MSDOS partition tables) support +CONFIG_MSDOS_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BSD_DISKLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_MINIX_SUBPARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SOLARIS_X86_PARTITION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_UNIXWARE_DISKLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> + +# Menu: Endianness selection +CONFIG_CPU_BIG_ENDIAN policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n', 's390x': 'y'}> + +# Menu: Endianness selection >> Architecture: powerpc +CONFIG_CPU_LITTLE_ENDIAN policy<{'ppc64el': 'y'}> + +# Menu: Executable file formats / Emulations +CONFIG_BINFMT_ELF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_ELF_FDPIC policy<{'armhf': 'y'}> +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_SCRIPT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BINFMT_FLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_ZFLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_SHARED_FLAT policy<{'armhf': 'y'}> +CONFIG_BINFMT_AOUT policy<{'i386': 'm'}> +CONFIG_BINFMT_MISC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_COREDUMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECCOMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_COMPAT policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_BINFMT_SCRIPT mark note +CONFIG_SECCOMP mark + +# Menu: Executable file formats / Emulations >> Architecture: arm + +# Menu: Executable file formats / Emulations >> Architecture: arm64 + +# Menu: Executable file formats / Emulations >> Architecture: s390 + +# Menu: Executable file formats / Emulations >> Architecture: x86 +CONFIG_IA32_EMULATION policy<{'amd64': 'y'}> +CONFIG_IA32_AOUT policy<{'amd64': 'n'}> +CONFIG_X86_X32 policy<{'amd64': 'y'}> +# +CONFIG_IA32_AOUT note mark + +# Menu: File systems +CONFIG_EXT2_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_EXT3_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_JBD2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GFS2_FS_LOCKING_DLM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NILFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FS_DAX policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXPORTFS_BLOCK_OPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FILE_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MANDATORY_FILE_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DNOTIFY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INOTIFY_USER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FANOTIFY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FANOTIFY_ACCESS_PERMISSIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_QUOTA_NETLINK_INTERFACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUTOFS4_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'y'}> +CONFIG_FUSE_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CUSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_EXT2_FS note +CONFIG_EXT3_FS note +CONFIG_FUSE_FS note flag + +# Menu: File systems >> Btrfs filesystem support +CONFIG_BTRFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BTRFS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BTRFS_FS_CHECK_INTEGRITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_FS_RUN_SANITY_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_ASSERT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BTRFS_FS_REF_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> CD-ROM/DVD Filesystems +CONFIG_ISO9660_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_JOLIET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZISOFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UDF_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: File systems >> Caches +CONFIG_CACHEFILES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CACHEFILES_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CACHEFILES_HISTOGRAM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Caches >> General filesystem local caching manager +CONFIG_FSCACHE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_FSCACHE_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FSCACHE_HISTOGRAM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FSCACHE_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FSCACHE_OBJECT_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> DOS/FAT/NT Filesystems +CONFIG_MSDOS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NTFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NTFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NTFS_RW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> + +# Menu: File systems >> DOS/FAT/NT Filesystems >> VFAT (Windows-95) fs support +CONFIG_VFAT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FAT_DEFAULT_CODEPAGE policy<{'amd64': '437', 'arm64': '437', 'armhf': '437', 'i386': '437', 'ppc64el': '437', 's390x': '437'}> +CONFIG_FAT_DEFAULT_IOCHARSET policy<{'amd64': '"iso8859-1"', 'arm64': '"iso8859-1"', 'armhf': '"iso8859-1"', 'i386': '"iso8859-1"', 'ppc64el': '"iso8859-1"', 's390x': '"iso8859-1"'}> +CONFIG_FAT_DEFAULT_UTF8 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_VFAT_FS mark note + +# Menu: File systems >> Distributed Lock Manager (DLM) +CONFIG_DLM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DLM_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> F2FS filesystem support +CONFIG_F2FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_F2FS_STAT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_CHECK_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_F2FS_IO_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_F2FS_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> F2FS filesystem support >> F2FS extended attributes +CONFIG_F2FS_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_F2FS_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> JFS filesystem support +CONFIG_JFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_JFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFS_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems +CONFIG_MISC_FILESYSTEMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ORANGEFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ADFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ADFS_FS_RW policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_AFFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ECRYPT_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ECRYPT_FS_MESSAGING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HFSPLUS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HFSPLUS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BEFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BEFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRAMFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CRAMFS_BLOCKDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CRAMFS_MTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VXFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MINIX_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_OMFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_HPFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX4FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX6FS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QNX6FS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ROMFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_SYSV_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_UFS_FS_WRITE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_EXOFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_EXOFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_ECRYPT_FS mark note + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support +CONFIG_AUFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AUFS_HNOTIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_EXPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_FHSM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_RDU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_DIRREN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_SHWH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_RAMFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_FUSE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BR_HFSPLUS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_AUFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_AUFS_EXPORT note + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support >> Maximum number of branches +CONFIG_AUFS_BRANCH_MAX_1023 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BRANCH_MAX_127 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUFS_BRANCH_MAX_32767 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AUFS_BRANCH_MAX_511 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> Aufs (Advanced multi layered unification filesystem) support >> method + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support +CONFIG_JFFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_JFFS2_FS_DEBUG policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_JFFS2_FS_WRITEBUFFER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_WBUF_VERIFY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_SUMMARY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support >> Advanced compression options for JFFS2 +CONFIG_JFFS2_COMPRESSION_OPTIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_RTIME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_JFFS2_RUBIN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> Journalling Flash File System v2 (JFFS2) support >> Advanced compression options for JFFS2 >> JFFS2 default compression mode +CONFIG_JFFS2_CMODE_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_PRIORITY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_JFFS2_CMODE_FAVOURLZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> Persistent store support +CONFIG_PSTORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PSTORE_CONSOLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_PMSG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_FTRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_RAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'y', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: File systems >> Miscellaneous filesystems >> Persistent store support >> Choose compression algorithm +CONFIG_PSTORE_ZLIB_COMPRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PSTORE_LZO_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_PSTORE_LZ4_COMPRESS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> RomFS backing stores +CONFIG_ROMFS_BACKED_BY_BLOCK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_ROMFS_BACKED_BY_MTD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ROMFS_BACKED_BY_BOTH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support +CONFIG_SQUASHFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_LZ4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_XZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_ZSTD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_4K_DEVBLK_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_EMBEDDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE policy<{'amd64': '3', 'arm64': '3', 'armhf': '3', 'i386': '3', 'ppc64el': '3', 's390x': '3'}> +# +CONFIG_SQUASHFS_4K_DEVBLK_SIZE note +CONFIG_SQUASHFS mark note + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support >> Decompressor parallelisation options +CONFIG_SQUASHFS_DECOMP_SINGLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SQUASHFS_DECOMP_MULTI policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Miscellaneous filesystems >> SquashFS 4.0 - Squashed file system support >> File decompression options +CONFIG_SQUASHFS_FILE_CACHE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SQUASHFS_FILE_DIRECT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Miscellaneous filesystems >> UBIFS file system support +CONFIG_UBIFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_UBIFS_FS_ADVANCED_COMPR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UBIFS_FS_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_FS_ZLIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_ATIME_SUPPORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_UBIFS_FS_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_UBIFS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Native language support +CONFIG_NLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NLS_DEFAULT policy<{'amd64': '"utf8"', 'arm64': '"utf8"', 'armhf': '"utf8"', 'i386': '"utf8"', 'ppc64el': '"utf8"', 's390x': '"utf8"'}> +CONFIG_NLS_CODEPAGE_437 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NLS_CODEPAGE_737 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_775 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_850 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_852 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_855 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_857 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_860 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_861 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_862 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_863 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_864 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_865 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_866 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_869 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_936 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_950 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_932 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_949 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_874 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_1250 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_CODEPAGE_1251 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ASCII policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_7 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_9 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_13 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_14 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_ISO8859_15 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_KOI8_R policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_KOI8_U policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ROMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CELTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CENTEURO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CROATIAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_CYRILLIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_GAELIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_GREEK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ICELAND policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_INUIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_ROMANIAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_MAC_TURKISH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NLS_UTF8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NLS note + +# Menu: File systems >> Network File Systems +CONFIG_NETWORK_FILESYSTEMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFSD_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_V3_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RPCSEC_GSS_KRB5 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SUNRPC_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SUNRPC_XPRT_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CEPH_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CODA_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> NCP file system support (to mount NetWare volumes) +CONFIG_NCP_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NCPFS_PACKET_SIGNING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_IOCTL_LOCKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_STRONG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_NFS_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_OS2_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_SMALLDOS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_NCPFS_NLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NCPFS_EXTRAS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> Network File Systems >> NFS client support +CONFIG_NFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_V3_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFS_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_USE_LEGACY_DNS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Network File Systems >> NFS client support >> NFS client support for NFSv4.1 +CONFIG_NFS_V4_1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4_2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN policy<{'amd64': '"kernel.org"', 'arm64': '"kernel.org"', 'armhf': '"kernel.org"', 'i386': '"kernel.org"', 'ppc64el': '"kernel.org"', 's390x': '"kernel.org"'}> +CONFIG_NFS_V4_1_MIGRATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> NFS server support for NFS version 4 +CONFIG_NFSD_V4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_BLOCKLAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_SCSILAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_FLEXFILELAYOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_V4_SECURITY_LABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NFSD_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Network File Systems >> Plan 9 Resource Sharing Support (9P2000) +CONFIG_9P_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_9P_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_9P_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_9P_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Network File Systems >> SMB3 and CIFS support (advanced network filesystem) +CONFIG_CIFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CIFS_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_STATS2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_WEAK_PW_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_UPCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_POSIX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_DEBUG2 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_DEBUG_DUMP_KEYS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CIFS_DFS_UPCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_SMB311 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CIFS_FSCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> OCFS2 file system support +CONFIG_OCFS2_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_O2CB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_USERSPACE_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OCFS2_FS_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OCFS2_DEBUG_MASKLOG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OCFS2_DEBUG_FS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Overlay filesystem support +CONFIG_OVERLAY_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OVERLAY_FS_REDIRECT_DIR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OVERLAY_FS_INDEX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> Pseudo filesystems +CONFIG_PROC_CHILDREN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TMPFS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HUGETLBFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CONFIGFS_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EFIVAR_FS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_CONFIGFS_FS flag +CONFIG_EFIVAR_FS note +CONFIG_TMPFS_POSIX_ACL mark note + +# Menu: File systems >> Pseudo filesystems >> /proc file system support +CONFIG_PROC_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_KCORE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_VMCORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_SYSCTL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_PAGE_MONITOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: File systems >> Quota support +CONFIG_QUOTA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PRINT_QUOTA_WARNING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_QUOTA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_QFMT_V1 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_QFMT_V2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: File systems >> Reiserfs support +CONFIG_REISERFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_REISERFS_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REISERFS_PROC_INFO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_REISERFS_FS_XATTR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_REISERFS_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_REISERFS_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: File systems >> The Extended 4 (ext4) filesystem +CONFIG_EXT4_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_USE_FOR_EXT2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_FS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_FS_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_ENCRYPTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXT4_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: File systems >> XFS filesystem support +CONFIG_XFS_FS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFS_QUOTA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_POSIX_ACL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_RT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XFS_ONLINE_SCRUB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFS_WARN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Firmware Drivers +CONFIG_ARM_PSCI_CHECKER policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_ARM_SCPI_PROTOCOL policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_SCPI_POWER_DOMAIN policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_EDD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EDD_OFF policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_FIRMWARE_MEMMAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_DELL_RBU policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DCDBAS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_DMIID policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_DMI_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_ISCSI_IBFT_FIND policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_ISCSI_IBFT policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_RASPBERRYPI_FIRMWARE policy<{'arm64': 'y'}> +CONFIG_FW_CFG_SYSFS policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_FW_CFG_SYSFS_CMDLINE policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Firmware Drivers >> EFI (Extensible Firmware Interface) Support +CONFIG_EFI_VARS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EFI_VARS_PSTORE policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n'}> +CONFIG_EFI_RUNTIME_MAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EFI_FAKE_MEMMAP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EFI_BOOTLOADER_CONTROL policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_EFI_CAPSULE_LOADER policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'y'}> +CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH policy<{'i386': 'y'}> +CONFIG_EFI_TEST policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_APPLE_PROPERTIES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RESET_ATTACK_MITIGATION policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +# +CONFIG_EFI_VARS mark note + +# Menu: Firmware Drivers >> Google Firmware Drivers +CONFIG_GOOGLE_FIRMWARE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> + +# Menu: Firmware Drivers >> Tegra firmware driver +CONFIG_TEGRA_IVC policy<{'armhf-generic': 'y'}> + +# Menu: Floating point emulation >> Architecture: arm +CONFIG_VFP policy<{'armhf': 'y'}> +CONFIG_NEON policy<{'armhf': 'y'}> +CONFIG_KERNEL_MODE_NEON policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: General setup +CONFIG_CROSS_COMPILE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_LOCALVERSION policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_DEFAULT_HOSTNAME policy<{'amd64': '"(none)"', 'arm64': '"(none)"', 'armhf': '"(none)"', 'i386': '"(none)"', 'ppc64el': '"(none)"', 's390x': '"(none)"'}> +CONFIG_VERSION_SIGNATURE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> +CONFIG_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSVIPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POSIX_MQUEUE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CROSS_MEMORY_ATTACH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USELIB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AUDIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IKCONFIG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOG_BUF_SHIFT policy<{'amd64': '18', 'arm64': '14', 'armhf': '17', 'i386': '17', 'ppc64el': '17', 's390x': '17'}> +CONFIG_LOG_CPU_MAX_BUF_SHIFT policy<{'amd64': '12', 'arm64': '12', 'armhf': '12', 'i386': '12', 'ppc64el': '12', 's390x': '12'}> +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT policy<{'amd64': '13', 'arm64': '13', 'armhf': '13', 'i386': '13', 'ppc64el': '13', 's390x': '13'}> +CONFIG_NUMA_BALANCING policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SCHED_AUTOGROUP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS_DEPRECATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RELAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_JIT_ALWAYS_ON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USERFAULTFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EMBEDDED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PC104 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_COMPAT_BRK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLAB_MERGE_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLAB_FREELIST_RANDOM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLAB_FREELIST_HARDENED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_CPU_PARTIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROFILING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_OPROFILE policy<{'amd64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPROFILE_EVENT_MULTIPLEX policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_KPROBES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_JUMP_LABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STATIC_KEYS_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_VMAP_STACK policy<{'amd64': 'y', 'arm64': 'y'}> +CONFIG_STRICT_KERNEL_RWX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_STRICT_MODULE_RWX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_REFCOUNT_FULL policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_SYSFS_DEPRECATED mark note +CONFIG_COMPAT_BRK mark note +CONFIG_JUMP_LABEL flag +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED note +CONFIG_BPF_JIT_ALWAYS_ON flag +CONFIG_STRICT_KERNEL_RWX mark +CONFIG_STRICT_MODULE_RWX mark + +# Menu: General setup >> CPU/Task time and stats accounting +CONFIG_IRQ_TIME_ACCOUNTING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BSD_PROCESS_ACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BSD_PROCESS_ACCT_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASKSTATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_DELAY_ACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_XACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TASK_IO_ACCOUNTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> CPU/Task time and stats accounting >> Cputime accounting +CONFIG_TICK_CPU_ACCOUNTING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_VIRT_CPU_ACCOUNTING_NATIVE policy<{'ppc64el': 'n', 's390x': 'y'}> +CONFIG_VIRT_CPU_ACCOUNTING_GEN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> + +# Menu: General setup >> Choose SLAB allocator +CONFIG_SLAB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLUB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLOB policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Compile also drivers which will not load +CONFIG_COMPILE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCALVERSION_AUTO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPU_ISOLATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_LOCALVERSION_AUTO mark note + +# Menu: General setup >> Compile also drivers which will not load >> GCC plugins +CONFIG_GCC_PLUGINS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Compiler optimization level +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CC_OPTIMIZE_FOR_SIZE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Configure standard kernel features (expert users) +CONFIG_FHANDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CHECKPOINT_RESTORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EXPERT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UID16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_MULTIUSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SGETMASK_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSFS_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYSCTL_SYSCALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_POSIX_TIMERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KALLSYMS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KALLSYMS_ALL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PRINTK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ELF_CORE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PCSPKR_PLATFORM policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BASE_FULL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUTEX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EPOLL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SIGNALFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TIMERFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVENTFD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SHMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ADVISE_SYSCALLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMBARRIER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VM_EVENT_COUNTERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SLUB_MEMCG_SYSFS_ON policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ARCH_MMAP_RND_BITS policy<{'amd64': '28', 'arm64': '18', 'armhf': '8', 'i386': '8', 'ppc64el': '28'}> +CONFIG_ARCH_MMAP_RND_COMPAT_BITS policy<{'amd64': '8', 'arm64': '11', 'ppc64el': '8'}> +# +CONFIG_FHANDLE mark note +CONFIG_SLUB_MEMCG_SYSFS_ON flag + +# Menu: General setup >> Control Group support +CONFIG_CGROUPS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG_SWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMCG_SWAP_ENABLED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BLK_CGROUP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_BLK_CGROUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CGROUP_PIDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_RDMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_FREEZER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_HUGETLB policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CPUSETS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROC_PID_CPUSET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_DEVICE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_CPUACCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_PERF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_BPF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEBUG_BLK_CGROUP mark + +# Menu: General setup >> Control Group support >> CPU controller +CONFIG_CGROUP_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FAIR_GROUP_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CFS_BANDWIDTH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RT_GROUP_SCHED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RT_GROUP_SCHED note + +# Menu: General setup >> GCOV-based kernel profiling +CONFIG_GCOV_KERNEL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> GCOV-based kernel profiling >> Specify GCOV format + +# Menu: General setup >> IRQ subsystem +CONFIG_IRQ_DOMAIN_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IRQ_FORCED_THREADING_DEFAULT policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n'}> +CONFIG_SPARSE_IRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_GENERIC_IRQ_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support +CONFIG_BLK_DEV_INITRD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_GZIP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_BZIP2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_XZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_RD_LZ4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support >> Initramfs source file(s) +CONFIG_INITRAMFS_SOURCE policy<{'amd64': '""', 'arm64': '""', 'armhf': '""', 'i386': '""', 'ppc64el': '""', 's390x': '""'}> + +# Menu: General setup >> Initial RAM filesystem and RAM disk (initramfs/initrd) support >> Initramfs source file(s) >> Built-in initramfs compression mode + +# Menu: General setup >> Kernel Performance Events And Counters +CONFIG_PERF_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_PERF_USE_VMALLOC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> + +# Menu: General setup >> Kernel compression mode +CONFIG_KERNEL_GZIP policy<{'amd64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KERNEL_BZIP2 policy<{'amd64': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_LZMA policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_XZ policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_KERNEL_LZO policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_KERNEL_LZ4 policy<{'amd64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +# +CONFIG_KERNEL_GZIP flag note + +# Menu: General setup >> Namespaces support +CONFIG_NAMESPACES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UTS_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPC_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_USER_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PID_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_NS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> RCU Subsystem +# XXX +# +CONFIG_CONTEXT_TRACKING_FORCE note + +# Menu: General setup >> RCU Subsystem >> Make expert-level adjustments to RCU configuration +CONFIG_RCU_EXPERT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RCU_EXPERT flag + +# Menu: General setup >> Stack Protector buffer overflow detection +CONFIG_CC_STACKPROTECTOR_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_CC_STACKPROTECTOR_REGULAR policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_CC_STACKPROTECTOR_STRONG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: arm + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: arm64 + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: powerpc + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: s390 + +# Menu: General setup >> Stack Protector buffer overflow detection >> Architecture: x86 + +# Menu: General setup >> Timers subsystem +CONFIG_NO_HZ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HIGH_RES_TIMERS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: General setup >> Timers subsystem >> Timer tick handling +CONFIG_HZ_PERIODIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NO_HZ_IDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NO_HZ_FULL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +# +CONFIG_NO_HZ_IDLE note + +# Menu: Kernel hacking +CONFIG_MAGIC_SYSRQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MAGIC_SYSRQ_SERIAL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KCOV policy<{'amd64': 'n', 'arm64': 'n', 's390x': 'n'}> +CONFIG_PANIC_ON_OOPS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PANIC_TIMEOUT policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '10', 's390x': '0'}> +CONFIG_DEBUG_TIMEKEEPING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STACKTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_WARN_ALL_UNSEEDED_RANDOM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROVIDE_OHCI1394_DMA_INIT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DMA_API_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MEMTEST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BUG_ON_DATA_CORRUPTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STRICT_DEVMEM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IO_STRICT_DEVMEM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PID_IN_CONTEXTIDR policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_DEBUG_WX policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_ALIGN_RODATA policy<{'arm64': 'n', 'armhf': 'y'}> +# +CONFIG_PANIC_ON_OOPS note +CONFIG_BUG_ON_DATA_CORRUPTION flag +CONFIG_STRICT_DEVMEM mark + +# Menu: Kernel hacking >> Architecture: arm +CONFIG_ARM_PTDUMP policy<{'armhf': 'n'}> +CONFIG_ARM_UNWIND policy<{'armhf': 'y'}> +CONFIG_DEBUG_USER policy<{'armhf': 'n'}> +CONFIG_DEBUG_IMX_UART_PORT policy<{'armhf-generic': '1'}> +CONFIG_DEBUG_VF_UART_PORT policy<{'armhf-generic': '1'}> +CONFIG_ARM_KPROBES_TEST policy<{'armhf': 'm'}> + +# Menu: Kernel hacking >> Architecture: arm64 +CONFIG_ARM64_PTDUMP_DEBUGFS policy<{'arm64': 'n'}> +CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET policy<{'arm64': 'n'}> +CONFIG_DEBUG_EFI policy<{'arm64': 'n'}> +CONFIG_ARM64_RELOC_TEST policy<{'arm64': 'n'}> + +# Menu: Kernel hacking >> Architecture: powerpc +CONFIG_PPC_DISABLE_WERROR policy<{'ppc64el': 'n'}> +CONFIG_PRINT_STACK_DEPTH policy<{'ppc64el': '64'}> +CONFIG_HCALL_STATS policy<{'ppc64el': 'n'}> +CONFIG_PPC_EMULATED_STATS policy<{'ppc64el': 'n'}> +CONFIG_CODE_PATCHING_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_JUMP_LABEL_FEATURE_CHECKS policy<{'ppc64el': 'y'}> +CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG policy<{'ppc64el': 'n'}> +CONFIG_FTR_FIXUP_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_MSI_BITMAP_SELFTEST policy<{'ppc64el': 'n'}> +CONFIG_XMON policy<{'ppc64el': 'y'}> +CONFIG_XMON_DEFAULT policy<{'ppc64el': 'n'}> +CONFIG_XMON_DISASSEMBLY policy<{'ppc64el': 'y'}> +CONFIG_BOOTX_TEXT policy<{'ppc64el': 'n'}> +CONFIG_PPC_EARLY_DEBUG policy<{'ppc64el': 'n'}> +CONFIG_PPC_PTDUMP policy<{'ppc64el': 'n'}> +CONFIG_PPC_FAST_ENDIAN_SWITCH policy<{'ppc64el': 'n'}> +# +CONFIG_PPC_DISABLE_WERROR flag + +# Menu: Kernel hacking >> Architecture: s390 +CONFIG_S390_PTDUMP policy<{'s390x': 'y'}> + +# Menu: Kernel hacking >> Architecture: x86 +CONFIG_X86_VERBOSE_BOOTUP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_PTDUMP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_EFI_PGT_DUMP policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DOUBLEFAULT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_TLBFLUSH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IOMMU_DEBUG policy<{'amd64': 'n'}> +CONFIG_IOMMU_STRESS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_DECODER_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_BOOT_PARAMS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_CPA_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_OPTIMIZE_INLINING policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_DEBUG_ENTRY policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_NMI_SELFTEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_DEBUG_FPU policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PUNIT_ATOM_DEBUG policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_X86_DECODER_SELFTEST flag +CONFIG_X86_DEBUG_FPU flag +CONFIG_PUNIT_ATOM_DEBUG flag + +# Menu: Kernel hacking >> Choose kernel unwinder >> Architecture: x86 +CONFIG_UNWINDER_ORC policy<{'amd64': 'n'}> +CONFIG_UNWINDER_FRAME_POINTER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_UNWINDER_GUESS policy<{'amd64': 'n', 'i386': 'n'}> +# +CONFIG_UNWINDER_FRAME_POINTER mark note + +# Menu: Kernel hacking >> Compile-time checks and compiler options +CONFIG_ENABLE_WARN_DEPRECATED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ENABLE_MUST_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FRAME_WARN policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '2048', 's390x': '1024'}> +CONFIG_STRIP_ASM_SYMS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_READABLE_ASM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_UNUSED_SYMBOLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_OWNER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_FS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HEADERS_CHECK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SECTION_MISMATCH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECTION_MISMATCH_WARN_ONLY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FRAME_POINTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_STACK_VALIDATION policy<{'amd64': 'y'}> +CONFIG_DEBUG_FORCE_WEAK_PER_CPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_STACK_VALIDATION mark note + +# Menu: Kernel hacking >> Compile-time checks and compiler options >> Compile the kernel with debug info +CONFIG_DEBUG_INFO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_INFO_REDUCED policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_INFO_SPLIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_INFO_DWARF4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_GDB_SCRIPTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_DEBUG_INFO mark note +CONFIG_DEBUG_INFO_SPLIT note + +# Menu: Kernel hacking >> CoreSight Tracing Support +CONFIG_CORESIGHT policy<{'arm64': 'n', 'armhf': 'n'}> + +# Menu: Kernel hacking >> CoreSight Tracing Support >> CoreSight Link and Sink drivers + +# Menu: Kernel hacking >> Debug Lockups and Hangs +CONFIG_SOFTLOCKUP_DETECTOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_HARDLOCKUP_DETECTOR policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DETECT_HUNG_TASK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT policy<{'amd64': '120', 'arm64': '120', 'armhf': '120', 'i386': '120', 'ppc64el': '120', 's390x': '120'}> +CONFIG_BOOTPARAM_HUNG_TASK_PANIC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WQ_WATCHDOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Early debugging console >> Architecture: powerpc + +# Menu: Kernel hacking >> Early printk +CONFIG_EARLY_PRINTK policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Kernel hacking >> Early printk >> Architecture: x86 +CONFIG_EARLY_PRINTK_DBGP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EARLY_PRINTK_EFI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_EARLY_PRINTK_USB_XDBC policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Kernel hacking >> IO delay type >> Architecture: x86 +CONFIG_IO_DELAY_0X80 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IO_DELAY_0XED policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IO_DELAY_UDELAY policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_IO_DELAY_NONE policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Kernel hacking >> Kernel debugging +CONFIG_DEBUG_KERNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_SHIRQ policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCHED_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCHEDSTATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCHED_STACK_END_CHECK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_PREEMPT policy<{'amd64-lowlatency': 'n', 'i386-lowlatency': 'n'}> +CONFIG_DEBUG_KOBJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_BUGVERBOSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEBUG_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PI_LIST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_NOTIFIERS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_CREDENTIALS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_WQ_FORCE_RR_CPU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_BLOCK_EXT_DEVT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPU_HOTPLUG_STATE_CONTROL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LATENCYTOP policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_LATENCYTOP marl note + +# Menu: Kernel hacking >> Kernel debugging >> Fault-injection framework +CONFIG_FAULT_INJECTION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Kernel debugging >> KGDB: kernel debugger +CONFIG_KGDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KGDB_SERIAL_CONSOLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KGDB_TESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_KGDB_LOW_LEVEL_TRAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_KGDB_KDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KDB_KEYBOARD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_KDB_CONTINUE_CATASTROPHIC policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +# +CONFIG_KGDB flag +CONFIG_KGDB_SERIAL_CONSOLE note + +# Menu: Kernel hacking >> Kernel debugging >> Notifier error injection +CONFIG_NOTIFIER_ERROR_INJECTION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_PM_NOTIFIER_ERROR_INJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT policy<{'arm64': 'n', 'armhf': 'n', 'ppc64el': 'n'}> +CONFIG_NETDEV_NOTIFIER_ERROR_INJECT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) >> Architecture: arm +CONFIG_DEBUG_LL policy<{'armhf': 'n'}> + +# Menu: Kernel hacking >> Kernel low-level debugging functions (read help!) >> Kernel low-level debugging port >> Architecture: arm + +# Menu: Kernel hacking >> Lock Debugging (spinlocks, mutexes, etc...) +CONFIG_DEBUG_RT_MUTEXES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_SPINLOCK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_MUTEXES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_WW_MUTEX_SLOWPATH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_LOCK_ALLOC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROVE_LOCKING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_STAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_ATOMIC_SLEEP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_LOCKING_API_SELFTESTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_TORTURE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_WW_MUTEX_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging +CONFIG_PAGE_EXTENSION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PAGEALLOC policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PAGE_POISONING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_PAGE_REF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_RODATA_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> +CONFIG_SLUB_DEBUG_ON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SLUB_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_STACK_USAGE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_VIRTUAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_DEBUG_MEMORY_INIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT policy<{'amd64': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DEBUG_PER_CPU_MAPS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEBUG_HIGHMEM policy<{'armhf': 'n', 'i386': 'n'}> +CONFIG_DEBUG_STACKOVERFLOW policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_KASAN policy<{'amd64': 'n', 'arm64': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Debug VM +CONFIG_DEBUG_VM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Debug object operations +CONFIG_DEBUG_OBJECTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Memory Debugging >> Instrumentation type + +# Menu: Kernel hacking >> Memory Debugging >> Kernel memory leak detector +CONFIG_DEBUG_KMEMLEAK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> RCU Debugging +CONFIG_RCU_PERF_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RCU_TORTURE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RCU_CPU_STALL_TIMEOUT policy<{'amd64': '60', 'arm64': '60', 'armhf': '60', 'i386': '60', 'ppc64el': '21', 's390x': '21'}> +CONFIG_RCU_TRACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RCU_EQS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_RCU_CPU_STALL_TIMEOUT flag + +# Menu: Kernel hacking >> Runtime Testing +CONFIG_LKDTM policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_LIST_SORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_SORT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_KPROBES_SANITY_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BACKTRACE_SELF_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RBTREE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INTERVAL_TREE_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PERCPU_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ATOMIC64_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ASYNC_RAID6_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_HEXDUMP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_STRING_HELPERS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_KSTRTOX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_PRINTF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_BITMAP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_UUID policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_RHASHTABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_HASH policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_PARMAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_TEST_LKM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_USER_COPY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_FIND_BIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_FIRMWARE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_SYSCTL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TEST_UDELAY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_STATIC_KEYS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TEST_KMOD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_LKDTM flag flag +CONFIG_TEST_LIST_SORT flag +CONFIG_TEST_SORT flag +CONFIG_KPROBES_SANITY_TEST flag +CONFIG_BACKTRACE_SELF_TEST flag +CONFIG_RBTREE_TEST flag +CONFIG_INTERVAL_TREE_TEST flag +CONFIG_PERCPU_TEST flag +CONFIG_ATOMIC64_SELFTEST flag +CONFIG_ASYNC_RAID6_TEST flag +CONFIG_TEST_HEXDUMP flag +CONFIG_TEST_STRING_HELPERS flag +CONFIG_TEST_KSTRTOX flag +CONFIG_TEST_PRINTF flag +CONFIG_TEST_BITMAP flag +CONFIG_TEST_UUID flag +CONFIG_TEST_RHASHTABLE flag +CONFIG_TEST_HASH flag +CONFIG_TEST_PARMAN flag + +# Menu: Kernel hacking >> Sample kernel code +CONFIG_SAMPLES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> Tracers +CONFIG_FTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PREEMPTIRQ_EVENTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IRQSOFF_TRACER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PREEMPT_TRACER policy<{'amd64-lowlatency': 'n', 'i386-lowlatency': 'n'}> +CONFIG_SCHED_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HWLAT_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FTRACE_SYSCALLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRACER_SNAPSHOT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_STACK_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BLK_DEV_IO_TRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KPROBE_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UPROBE_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FTRACE_STARTUP_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_MMIOTRACE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HIST_TRIGGERS policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MMIOTRACE_TEST policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_TRACEPOINT_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RING_BUFFER_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RING_BUFFER_STARTUP_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRACE_EVAL_MAP_FILE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRACING_EVENTS_GPIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_FTRACE_STARTUP_TEST flag +CONFIG_MMIOTRACE_TEST flag +CONFIG_RING_BUFFER_BENCHMARK flag +CONFIG_RING_BUFFER_STARTUP_TEST flag +CONFIG_TRACE_EVAL_MAP_FILE flag + +# Menu: Kernel hacking >> Tracers >> Branch Profiling +CONFIG_BRANCH_PROFILE_NONE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PROFILE_ANNOTATED_BRANCHES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PROFILE_ALL_BRANCHES policy<{'armhf': 'n'}> + +# Menu: Kernel hacking >> Tracers >> Kernel Function Tracer +CONFIG_FUNCTION_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUNCTION_GRAPH_TRACER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DYNAMIC_FTRACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FUNCTION_PROFILER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Kernel hacking >> Undefined behaviour sanity checker +CONFIG_UBSAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Kernel hacking >> printk and dmesg options +CONFIG_PRINTK_TIME policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CONSOLE_LOGLEVEL_DEFAULT policy<{'amd64': '7', 'arm64': '7', 'armhf': '7', 'i386': '7', 'ppc64el': '7', 's390x': '7'}> +CONFIG_MESSAGE_LOGLEVEL_DEFAULT policy<{'amd64': '4', 'arm64': '4', 'armhf': '4', 'i386': '4', 'ppc64el': '4', 's390x': '4'}> +CONFIG_BOOT_PRINTK_DELAY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y'}> +CONFIG_DYNAMIC_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Library routines +CONFIG_CRC_CCITT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC_T10DIF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC_ITU_T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC32 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC32_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC7 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LIBCRC32C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CRC8 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RANDOM32_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CPUMASK_OFFSTACK policy<{'amd64': 'y'}> +CONFIG_GLOB_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CORDIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_DDR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IRQ_POLL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PARMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_STRING_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Library routines >> CRC32 implementation +CONFIG_CRC32_SLICEBY8 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CRC32_SLICEBY4 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC32_SARWATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CRC32_BIT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Library routines >> Select compiled-in fonts +CONFIG_FONTS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_FONT_8x8 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FONT_8x16 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_FONT_6x11 policy<{'armhf': 'n'}> +CONFIG_FONT_7x14 policy<{'armhf': 'n'}> +CONFIG_FONT_PEARL_8x8 policy<{'armhf': 'n'}> +CONFIG_FONT_ACORN_8x8 policy<{'armhf': 'y'}> +CONFIG_FONT_MINI_4x6 policy<{'armhf': 'n'}> +CONFIG_FONT_6x10 policy<{'armhf': 'y'}> +CONFIG_FONT_10x18 policy<{'armhf': 'n'}> +CONFIG_FONT_SUN8x16 policy<{'armhf': 'n'}> +CONFIG_FONT_SUN12x22 policy<{'armhf': 'n'}> + +# Menu: Library routines >> XZ decompression support +CONFIG_XZ_DEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_XZ_DEC_X86 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_POWERPC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_IA64 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_ARM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_ARMTHUMB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_SPARC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_XZ_DEC_TEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +# +CONFIG_XZ_DEC note flag + +# Menu: Networking support +CONFIG_NET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AF_KCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_LIB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CEPH_LIB_PRETTYDEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CEPH_LIB_USE_DNS_RESOLVER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PSAMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IFE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_LWTUNNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LWTUNNEL_BPF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_DEVLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Amateur Radio support +CONFIG_HAMRADIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Amateur Radio support >> Amateur Radio AX.25 Level 2 protocol +CONFIG_AX25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_AX25_DAMA_SLAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_NETROM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ROSE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Amateur Radio support >> Amateur Radio AX.25 Level 2 protocol >> AX.25 network device drivers +CONFIG_MKISS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6PACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BPQETHER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_SCC policy<{'i386': 'm'}> +CONFIG_SCC_DELAY policy<{'i386': 'n'}> +CONFIG_SCC_TRXECHO policy<{'i386': 'n'}> +CONFIG_BAYCOM_SER_FDX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_SER_HDX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_PAR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BAYCOM_EPP policy<{'armhf': 'm', 'i386': 'm'}> +CONFIG_YAM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support +CONFIG_BT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_LE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_SELFTEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BT_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth Classic (BR/EDR) features +CONFIG_BT_BREDR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_RFCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_RFCOMM_TTY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_BNEP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_BNEP_MC_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_BNEP_PROTO_FILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_CMTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HIDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers +CONFIG_BT_HCIBTSDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_LL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBCM203X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIBFUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIDTL1 policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBT3C policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBLUECARD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIBTUART policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_BT_HCIVHCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_MRVL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_MRVL_SDIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_WILINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_QCOMSMD policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers >> HCI UART driver +CONFIG_BT_HCIUART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_H4 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_NOKIA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIUART_BCSP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_ATH3K policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_3WIRE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_INTEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_BCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_QCA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_AG6XX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIUART_MRVL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBPA10X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Bluetooth subsystem support >> Bluetooth device drivers >> HCI USB driver +CONFIG_BT_HCIBTUSB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_BT_HCIBTUSB_BCM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_HCIBTUSB_RTL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BT_ATH3K policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAIF support +CONFIG_CAIF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CAIF_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CAIF_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAIF_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support +CONFIG_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_CAN_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_BCM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers +CONFIG_CAN_VCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_VXCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SLCAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_DEBUG_DEVICES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support +CONFIG_CAN_DEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CALC_BITTIMING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_FLEXCAN policy<{'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GRCAN policy<{'arm64': 'm', 'armhf': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_JANZ_ICAN3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_TI_HECC policy<{'armhf': 'm'}> +CONFIG_CAN_XILINXCAN policy<{'arm64': 'm'}> +CONFIG_PCH_CAN policy<{'i386': 'm'}> +CONFIG_CAN_IFI_CANFD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_M_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MSCAN policy<{'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCIEFD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_RCAR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CAN_RCAR_CANFD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CAN_SOFTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SOFTING_CS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Bosch CC770 and Intel AN82527 devices +CONFIG_CAN_CC770 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CC770_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_CC770_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Bosch C_CAN/D_CAN devices +CONFIG_CAN_C_CAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_C_CAN_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_C_CAN_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> CAN SPI interfaces +CONFIG_CAN_HI311X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MCP251X policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> CAN USB interfaces +CONFIG_CAN_EMS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_ESD_USB2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_GS_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_KVASER_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_8DEV_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_MCBA_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> CAN bus subsystem support >> CAN Device Drivers >> Platform CAN drivers with Netlink support >> Philips/NXP SJA1000 devices +CONFIG_CAN_SJA1000 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SJA1000_ISA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_SJA1000_PLATFORM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_EMS_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CAN_EMS_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCMCIA policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_CAN_PEAK_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PEAK_PCIEC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CAN_KVASER_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_PLX_PCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_CAN_TSCAN1 policy<{'i386': 'm'}> + +# Menu: Networking support >> NFC subsystem support +CONFIG_NFC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_NFC_DIGITAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NCI_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_HCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_SHDLC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> NFC subsystem support >> Near Field Communication (NFC) devices +CONFIG_NFC_TRF7970A policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MEI_PHY policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_SIM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PORT100 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_FDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_FDP_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN544_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN544_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_PN533_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_PN533_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MICROREAD_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MICROREAD_MEI policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_NFC_MRVL_USB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_UART policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_MRVL_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST21NFCA_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST_NCI_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST_NCI_SPI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NXP_NCI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_NXP_NCI_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_S3FWRN5_I2C policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NFC_ST95HF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options +CONFIG_PACKET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PACKET_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_UNIX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_UNIX_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TLS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFRM_USER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_XFRM_SUB_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFRM_MIGRATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_XFRM_STATISTICS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_KEY_MIGRATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IUCV policy<{'s390x': 'y'}> +CONFIG_AFIUCV policy<{'s390x': 'm'}> +CONFIG_SMC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SMC_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETWORK_SECMARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETWORK_PHY_TIMESTAMPING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_IGMP_SNOOPING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BRIDGE_VLAN_FILTERING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_DSA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_VLAN_8021Q policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VLAN_8021Q_GVRP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VLAN_8021Q_MVRP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DECNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_DECNET_ROUTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_LLC2 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IPX_INTERN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATALK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_X25 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_LAPB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_PHONET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_MAC802154 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_DCB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DNS_RESOLVER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETLINK_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_NSH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HSR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_QRTR policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_QRTR_SMD policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_CGROUP_NET_PRIO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CGROUP_NET_CLASSID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_JIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BPF_STREAM_PARSER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> 6LoWPAN Support +CONFIG_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_6LOWPAN_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> 6LoWPAN Support >> Next Header and Generic Header Compression Support +CONFIG_6LOWPAN_NHC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_DEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_FRAGMENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_HOP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_MOBILITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_ROUTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_NHC_UDP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_HOP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_UDP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_ICMPV6 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_DEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> Appletalk interfaces support +CONFIG_DEV_APPLETALK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_LTPC policy<{'i386': 'm'}> +CONFIG_COPS policy<{'i386': 'm'}> +CONFIG_COPS_DAYNA policy<{'i386': 'y'}> +CONFIG_COPS_TANGENT policy<{'i386': 'y'}> +CONFIG_IPDDP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_IPDDP mark note + +# Menu: Networking support >> Networking options >> Asynchronous Transfer Mode (ATM) +CONFIG_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_ATM_CLIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_CLIP_NO_ICMP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_ATM_LANE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_MPOA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_BR2684 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_ATM_BR2684_IPFILTER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> B.A.T.M.A.N. Advanced Meshing Protocol +CONFIG_BATMAN_ADV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_BATMAN_ADV_BATMAN_V policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_BATMAN_ADV_BLA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_DAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_NC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_MCAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_BATMAN_ADV_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Networking options >> IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support +CONFIG_IEEE802154 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_IEEE802154_NL802154_EXPERIMENTAL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_IEEE802154_SOCKET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_IEEE802154_6LOWPAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options >> MultiProtocol Label Switching +CONFIG_MPLS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_MPLS_GSO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MPLS_ROUTING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_MPLS_IPTUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) +CONFIG_NETFILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETFILTER_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BRIDGE_NETFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration +CONFIG_NETFILTER_INGRESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETFILTER_NETLINK_ACCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_QUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter Xtables support (required for ip_tables) +CONFIG_NETFILTER_XTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_AUDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CHECKSUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CLASSIFY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_CT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_DSCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_HMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_IDLETIMER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_LED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NETFILTER_XT_TARGET_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NETMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NFLOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NFQUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_NOTRACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NETFILTER_XT_TARGET_RATEEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TEE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TRACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_SECMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TCPMSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CLUSTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_COMMENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNBYTES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNLABEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CONNTRACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_CPU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DCCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DEVGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_DSCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HELPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPRANGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_IPVS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_L2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_LENGTH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_MULTIPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_NFACCT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_OSF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_OWNER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_POLICY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_PHYSDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_PKTTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_QUOTA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_RATEEST policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_REALM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_RECENT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_SCTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_SOCKET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STATE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STATISTIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_STRING policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_TCPMSS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_TIME policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_XT_MATCH_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter connection tracking support +CONFIG_NF_CONNTRACK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_MARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_SECMARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_ZONES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_PROCFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NF_CONNTRACK_EVENTS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_TIMEOUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_TIMESTAMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_DCCP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_SCTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CT_PROTO_UDPLITE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_CONNTRACK_AMANDA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_FTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_H323 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_IRC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_NETBIOS_NS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SNMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_PPTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SANE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_SIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CONNTRACK_TFTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK_TIMEOUT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_CT_NETLINK_HELPER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NETFILTER_NETLINK_GLUE_CT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NF_NAT_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NF_CONNTRACK_PROCFS flag + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter nf_tables support +CONFIG_NF_TABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_TABLES_INET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_EXTHDR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_RT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_NUMGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_RBTREE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_SET_BITMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_COUNTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_OBJREF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_QUEUE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_QUOTA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_COMPAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_HASH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_INET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Core Netfilter Configuration >> Netfilter nf_tables support >> Netfilter nf_tables netdev tables support +CONFIG_NF_TABLES_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FWD_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_NETDEV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> DECnet: Netfilter Configuration +CONFIG_DECNET_NF_GRABULATOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Ethernet Bridge nf_tables support +CONFIG_NF_TABLES_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_BRIDGE_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_BRIDGE_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_BRIDGE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> Ethernet Bridge tables (ebtables) support +CONFIG_BRIDGE_NF_EBTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_BROUTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_T_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_T_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_802_3 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_AMONG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_IP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_LIMIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_MARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_PKTTYPE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_STP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_VLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_ARPREPLY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_DNAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_MARK_T policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_SNAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_LOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_BRIDGE_EBT_NFLOG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP set support +CONFIG_IP_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_MAX policy<{'amd64': '256', 'arm64': '256', 'armhf': '256', 'i386': '256', 'ppc64el': '256', 's390x': '256'}> +CONFIG_IP_SET_BITMAP_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_BITMAP_IPMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_BITMAP_PORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORTIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPPORTNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_IPMAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_MAC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETPORTNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETNET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_HASH_NETIFACE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_SET_LIST_SET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP virtual server support +CONFIG_IP_VS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_VS_TAB_BITS policy<{'amd64': '12', 'arm64': '12', 'armhf': '12', 'i386': '12', 'ppc64el': '12', 's390x': '12'}> +CONFIG_IP_VS_PROTO_TCP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_UDP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_ESP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_AH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PROTO_SCTP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_RR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_WRR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_WLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_FO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_OVF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LBLC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_LBLCR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_DH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_NQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_SH_TAB_BITS policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8', 's390x': '8'}> +CONFIG_IP_VS_FTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_VS_NFCT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_VS_PE_SIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration +CONFIG_NF_CONNTRACK_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_SOCKET_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_TABLES_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_ARP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_REJECT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_ARP_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) +CONFIG_IP_NF_IPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_RPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_MATCH_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_SYNPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_SECURITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) >> Packet mangling +CONFIG_IP_NF_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_CLUSTERIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_ECN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_TTL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IP tables support (required for filtering/masq/NAT) >> iptables NAT support +CONFIG_IP_NF_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_MASQUERADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_NETMAP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP_NF_TARGET_REDIRECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IPv4 NAT +CONFIG_NF_NAT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_NAT_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_MASQUERADE_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_SNMP_BASIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IP: Netfilter Configuration >> IPv4 nf_tables support +CONFIG_NF_TABLES_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_ROUTE_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_IPV4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration +CONFIG_NF_CONNTRACK_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_SOCKET_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_DUP_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_REJECT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_LOG_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IP6 tables support (required for filtering) +CONFIG_IP6_NF_IPTABLES policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_EUI64 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_FRAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_OPTS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_IPV6HEADER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_MH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_RPFILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MATCH_RT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_HL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_FILTER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_REJECT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_SYNPROXY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_MANGLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_RAW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_SECURITY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_MASQUERADE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IP6_NF_TARGET_NPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IPv6 NAT +CONFIG_NF_NAT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_NAT_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NF_NAT_MASQUERADE_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_MASQ_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_REDIR_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network packet filtering framework (Netfilter) >> IPv6: Netfilter Configuration >> IPv6 nf_tables support +CONFIG_NF_TABLES_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_CHAIN_ROUTE_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_DUP_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NFT_FIB_IPV6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> Network testing +CONFIG_NET_PKTGEN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_TCPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_DROP_MONITOR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +# +CONFIG_NET_DROP_MONITOR note + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing +CONFIG_NET_SCHED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_SCH_CBQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HTB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HFSC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_ATM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_SCH_PRIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_MULTIQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_RED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_SFB policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_SFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_TEQL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_TBF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CBS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_GRED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_DSMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_NETEM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_DRR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_MQPRIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CHOKE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_QFQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_CODEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_FQ_CODEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_FQ policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_HHF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_PIE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_INGRESS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCH_PLUG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_BASIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_TCINDEX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_ROUTE4 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_RSVP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_RSVP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FLOW policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_CGROUP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_FLOWER policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_CLS_MATCHALL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Actions +CONFIG_NET_CLS_ACT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_ACT_POLICE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_GACT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_GACT_PROB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_ACT_MIRRED policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SAMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_IPT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_NAT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_PEDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SIMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SKBEDIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_CSUM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_VLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_BPF policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_CONNMARK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_SKBMOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_ACT_TUNNEL_KEY policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Actions >> Inter-FE action based on IETF ForCES InterFE LFB +CONFIG_NET_ACT_IFE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Allow override default queue discipline +CONFIG_NET_SCH_DEFAULT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Allow override default queue discipline >> Default queuing discipline + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Extended Matches +CONFIG_NET_EMATCH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_EMATCH_STACK policy<{'amd64': '32', 'arm64': '32', 'armhf': '32', 'i386': '32', 'ppc64el': '32', 's390x': '32'}> +CONFIG_NET_EMATCH_CMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_NBYTE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_META policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_TEXT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_EMATCH_CANID policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NET_EMATCH_IPSET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> QoS and/or fair queueing >> Universal 32bit comparisons w/ hashing (U32) +CONFIG_NET_CLS_U32 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_CLS_U32_PERF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CLS_U32_MARK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_CLS_IND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_NET_CLS_IND flag + +# Menu: Networking support >> Networking options >> TCP/IP networking +CONFIG_INET policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MULTICAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_IPIP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE_DEMUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_IPGRE_BROADCAST policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SYN_COOKIES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_IPVTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FOU policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_FOU_IP_TUNNELS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INET_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_ESP_OFFLOAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_XFRM_MODE_BEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_MD5SIG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NETLABEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_SWITCHDEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_NET_L3_MASTER_DEV policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NET_NCSI policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SYN_COOKIES mark +CONFIG_NET_SWITCHDEV mark note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> INET: socket monitoring interface +CONFIG_INET_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_UDP_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_RAW_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET_DIAG_DESTROY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: advanced router +CONFIG_IP_ADVANCED_ROUTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_FIB_TRIE_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_ROUTE_MULTIPATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_ROUTE_VERBOSE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: kernel level autoconfiguration +CONFIG_IP_PNP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IP_PNP note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> IP: multicast routing +CONFIG_IP_MROUTE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_MROUTE_MULTIPLE_TABLES policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_PIMSM_V1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IP_PIMSM_V2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> Layer Two Tunneling Protocol (L2TP) +CONFIG_L2TP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_DEBUGFS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_V3 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_L2TP_IP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_L2TP_ETH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> Open vSwitch +CONFIG_OPENVSWITCH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_GRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_VXLAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_OPENVSWITCH_GENEVE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> TCP: advanced congestion control +CONFIG_TCP_CONG_ADVANCED policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCP_CONG_BIC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_CUBIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TCP_CONG_WESTWOOD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HSTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_HYBLA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_VEGAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_NV policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_SCALABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_LP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_VENO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_YEAH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_ILLINOIS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_DCTCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_CDG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TCP_CONG_BBR policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> TCP: advanced congestion control >> Default TCP congestion control +CONFIG_DEFAULT_CUBIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_RENO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol +CONFIG_IP_DCCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol >> DCCP CCIDs Configuration +CONFIG_IP_DCCP_CCID2_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IP_DCCP_CCID3 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IP_DCCP_CCID3_DEBUG policy<{'s390x': 'n'}> +# +CONFIG_IP_DCCP_CCID3 flag + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The DCCP Protocol >> DCCP Kernel Hacking +CONFIG_IP_DCCP_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_NET_DCCPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The IPv6 protocol +CONFIG_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_ROUTER_PREF policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_ROUTE_INFO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_OPTIMISTIC_DAD policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_INET6_AH policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_ESP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_ESP_OFFLOAD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_IPCOMP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_MIP6 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_ILA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_TRANSPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_BEET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_VTI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_SIT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_SIT_6RD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_TUNNEL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_GRE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_IPV6_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SUBTREES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_MROUTE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_PIMSM_V2 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SEG6_LWTUNNEL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IPV6_SEG6_HMAC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_IPV6_OPTIMISTIC_DAD flag +CONFIG_IPV6 mark note + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The RDS Protocol +CONFIG_RDS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_TCP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_RDS_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The SCTP Protocol +CONFIG_IP_SCTP policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_SCTPPROBE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_SCTP_DBG_OBJCNT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCTP_COOKIE_HMAC_MD5 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCTP_COOKIE_HMAC_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SCTP_DBG_OBJCNT flag + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The SCTP Protocol >> Default SCTP cookie HMAC encoding +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Networking support >> Networking options >> TCP/IP networking >> The TIPC Protocol +CONFIG_TIPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_TIPC_MEDIA_IB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TIPC_MEDIA_UDP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> Networking options >> Virtual Socket protocol +CONFIG_VSOCKETS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VSOCKETS_DIAG policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VMWARE_VMCI_VSOCKETS policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_VIRTIO_VSOCKETS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_HYPERV_VSOCKETS policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Networking support >> Plan 9 Resource Sharing Support (9P2000) +CONFIG_NET_9P policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_VIRTIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_XEN policy<{'amd64': 'm', 'arm64': 'm', 'i386': 'm'}> +CONFIG_NET_9P_RDMA policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_NET_9P_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_NET_9P note + +# Menu: Networking support >> RF switch subsystem support +CONFIG_RFKILL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_RFKILL_INPUT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RFKILL_GPIO policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> + +# Menu: Networking support >> RxRPC session sockets +CONFIG_AF_RXRPC policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_AF_RXRPC_IPV6 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_AF_RXRPC_INJECT_LOSS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_AF_RXRPC_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_RXKAD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Networking support >> WiMAX Wireless Broadband support +CONFIG_WIMAX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'n'}> +CONFIG_WIMAX_DEBUG_LEVEL policy<{'amd64': '8', 'arm64': '8', 'armhf': '8', 'i386': '8', 'ppc64el': '8'}> + +# Menu: Networking support >> Wireless +CONFIG_WIRELESS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_LIB80211_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) +CONFIG_MAC80211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_MAC80211_RC_MINSTREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_RC_MINSTREL_HT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_RC_MINSTREL_VHT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_MESH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_LEDS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_MAC80211_MESSAGE_TRACING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) >> Default rate control algorithm +CONFIG_MAC80211_RC_DEFAULT_MINSTREL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Networking support >> Wireless >> Generic IEEE 802.11 Networking Stack (mac80211) >> Select mac80211 debugging features +CONFIG_MAC80211_DEBUG_MENU policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_MAC80211_STA_HASH_MAX_SIZE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> + +# Menu: Networking support >> Wireless >> cfg80211 - wireless configuration API +CONFIG_CFG80211 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm'}> +CONFIG_NL80211_TESTMODE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_DEVELOPER_WARNINGS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_DEFAULT_PS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_DEBUGFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_CRDA_SUPPORT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_WEXT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +# +CONFIG_CFG80211_WEXT flag + +# Menu: Networking support >> Wireless >> cfg80211 - wireless configuration API >> cfg80211 certification onus +CONFIG_CFG80211_CERTIFICATION_ONUS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Platform selection +CONFIG_ARCH_VEXPRESS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_SUNXI policy<{'arm64': 'y', 'armhf': 'n'}> +CONFIG_ARCH_MESON policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_ACTIONS policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_ALPINE policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_HISI policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_ROCKCHIP policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_TEGRA policy<{'arm64': 'n', 'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ARCH_UNIPHIER policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_ZX policy<{'arm64': 'n', 'armhf': 'n'}> +CONFIG_ARCH_BCM2835 policy<{'arm64': 'y'}> +CONFIG_ARCH_BRCMSTB policy<{'arm64': 'y'}> +CONFIG_ARCH_BERLIN policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_MVEBU policy<{'arm64': 'n', 'armhf': 'y'}> +CONFIG_ARCH_MEDIATEK policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_QCOM policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARCH_EXYNOS policy<{'arm64': 'n', 'armhf': 'y'}> +# +CONFIG_ARCH_ROCKCHIP note +CONFIG_ARCH_ZX note + +# Menu: Platform selection >> Architecture: arm64 +CONFIG_ARCH_BCM_IPROC policy<{'arm64': 'y'}> +CONFIG_ARCH_LAYERSCAPE policy<{'arm64': 'y'}> +CONFIG_ARCH_LG1K policy<{'arm64': 'y'}> +CONFIG_ARCH_REALTEK policy<{'arm64': 'y'}> +CONFIG_ARCH_SEATTLE policy<{'arm64': 'y'}> +CONFIG_ARCH_SYNQUACER policy<{'arm64': 'y'}> +CONFIG_ARCH_STRATIX10 policy<{'arm64': 'y'}> +CONFIG_ARCH_SPRD policy<{'arm64': 'y'}> +CONFIG_ARCH_THUNDER policy<{'arm64': 'y'}> +CONFIG_ARCH_THUNDER2 policy<{'arm64': 'y'}> +CONFIG_ARCH_XGENE policy<{'arm64': 'y'}> +CONFIG_ARCH_ZYNQMP policy<{'arm64': 'y'}> + +# Menu: Platform selection >> Renesas SoC Platforms +CONFIG_ARCH_RENESAS policy<{'arm64': 'y', 'armhf': 'y'}> + +# Menu: Platform selection >> Renesas SoC Platforms >> Architecture: arm64 +CONFIG_ARCH_R8A7795 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A7796 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A77970 policy<{'arm64': 'y'}> +CONFIG_ARCH_R8A77995 policy<{'arm64': 'y'}> + +# Menu: Power management and ACPI options +CONFIG_SUSPEND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SUSPEND_FREEZER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SUSPEND_SKIP_SYNC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HIBERNATION policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_PM_STD_PARTITION policy<{'amd64': '""', 'armhf': '""', 'i386': '""', 's390x': '""'}> +CONFIG_PM_AUTOSLEEP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PM_WAKELOCKS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM_WAKELOCKS_LIMIT policy<{'amd64': '100', 'arm64': '100', 'armhf': '100', 'i386': '100', 'ppc64el': '100', 's390x': '100'}> +CONFIG_PM_WAKELOCKS_GC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PM_TRACE_RTC policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_APM_EMULATION policy<{'armhf': 'n'}> +CONFIG_WQ_POWER_EFFICIENT_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KVM_GUEST policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_SFI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_IDLE policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_HIBERNATION flag + +# Menu: Power management and ACPI options >> 512x-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 52xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 82xx-based boards (PQ II) >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 83xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 86xx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> 8xx Machine Type >> Architecture: powerpc + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support +# + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support >> ACPI Platform Error Interface (APEI) + +# Menu: Power management and ACPI options >> ACPI (Advanced Configuration and Power Interface) Support >> PMIC (Power Management Integrated Circuit) operation region support + +# Menu: Power management and ACPI options >> APM (Advanced Power Management) BIOS support >> Architecture: x86 +CONFIG_APM policy<{'i386': 'm'}> +CONFIG_APM_IGNORE_USER_SUSPEND policy<{'i386': 'n'}> +CONFIG_APM_DO_ENABLE policy<{'i386': 'n'}> +CONFIG_APM_CPU_IDLE policy<{'i386': 'n'}> +CONFIG_APM_DISPLAY_BLANK policy<{'i386': 'n'}> +CONFIG_APM_ALLOW_INTS policy<{'i386': 'n'}> +# +CONFIG_APM flag + +# Menu: Power management and ACPI options >> Architecture: arm + +# Menu: Power management and ACPI options >> Architecture: arm64 + +# Menu: Power management and ACPI options >> Architecture: powerpc +CONFIG_EPAPR_PARAVIRT policy<{'ppc64el': 'y'}> +CONFIG_PPC_OF_BOOT_TRAMPOLINE policy<{'ppc64el': 'y'}> +CONFIG_PPC_DT_CPU_FTRS policy<{'ppc64el': 'y'}> +CONFIG_UDBG_RTAS_CONSOLE policy<{'ppc64el': 'n'}> +CONFIG_MPIC_MSGR policy<{'ppc64el': 'n'}> +CONFIG_RTAS_PROC policy<{'ppc64el': 'y'}> +CONFIG_RTAS_FLASH policy<{'ppc64el': 'm'}> +CONFIG_GEN_RTC policy<{'ppc64el': 'y'}> +CONFIG_SIMPLE_GPIO policy<{'ppc64el': 'n'}> + +# Menu: Power management and ACPI options >> Architecture: s390 + +# Menu: Power management and ACPI options >> Architecture: x86 + +# Menu: Power management and ACPI options >> CPU Frequency scaling + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling +CONFIG_CPU_FREQ policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_STAT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_POWERSAVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_USERSPACE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_ONDEMAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_CONSERVATIVE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_GOV_SCHEDUTIL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPUFREQ_DT policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_X86_INTEL_PSTATE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_PCC_CPUFREQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SFI_CPUFREQ policy<{'i386': 'm'}> +CONFIG_X86_POWERNOW_K6 policy<{'i386': 'm'}> +CONFIG_X86_POWERNOW_K7 policy<{'i386': 'm'}> +CONFIG_X86_GX_SUSPMOD policy<{'i386': 'm'}> +CONFIG_X86_SPEEDSTEP_CENTRINO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE policy<{'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_ICH policy<{'i386': 'y'}> +CONFIG_X86_SPEEDSTEP_SMI policy<{'i386': 'y'}> +CONFIG_X86_P4_CLOCKMOD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_CPUFREQ_NFORCE2 policy<{'i386': 'y'}> +CONFIG_X86_LONGRUN policy<{'i386': 'm'}> +CONFIG_X86_LONGHAUL policy<{'i386': 'm'}> +CONFIG_X86_E_POWERSAVER policy<{'i386': 'n'}> +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK policy<{'i386': 'y'}> +CONFIG_ARM_BRCMSTB_AVS_CPUFREQ policy<{'arm64': 'm'}> +CONFIG_ARM_BRCMSTB_AVS_CPUFREQ_DEBUG policy<{'arm64': 'n'}> +CONFIG_ARM_EXYNOS5440_CPUFREQ policy<{'armhf': 'n'}> +CONFIG_ARM_HIGHBANK_CPUFREQ policy<{'armhf': 'm'}> +CONFIG_ARM_IMX6Q_CPUFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_MEDIATEK_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_OMAP2PLUS_CPUFREQ policy<{'armhf': 'y'}> +CONFIG_ARM_TEGRA20_CPUFREQ policy<{'armhf-generic': 'y'}> +CONFIG_ARM_TEGRA124_CPUFREQ policy<{'armhf-generic': 'm'}> +CONFIG_ARM_TI_CPUFREQ policy<{'armhf': 'y'}> +CONFIG_ACPI_CPPC_CPUFREQ policy<{'arm64': 'm'}> +CONFIG_POWERNV_CPUFREQ policy<{'ppc64el': 'y'}> +CONFIG_QORIQ_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +# +CONFIG_CPU_FREQ_STAT note +CONFIG_CPU_FREQ_GOV_PERFORMANCE note +CONFIG_CPU_FREQ_GOV_POWERSAVE note +CONFIG_CPU_FREQ_GOV_USERSPACE note +CONFIG_CPU_FREQ_GOV_ONDEMAND note +CONFIG_CPU_FREQ_GOV_CONSERVATIVE note +CONFIG_X86_PCC_CPUFREQ note +CONFIG_X86_SPEEDSTEP_CENTRINO note +CONFIG_X86_SPEEDSTEP_ICH note +CONFIG_X86_SPEEDSTEP_SMI note +CONFIG_X86_CPUFREQ_NFORCE2 note +CONFIG_CPUFREQ_DT note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> ACPI Processor P-States driver +CONFIG_X86_ACPI_CPUFREQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_ACPI_CPUFREQ_CPB policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_POWERNOW_K8 policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_AMD_FREQ_SENSITIVITY policy<{'amd64': 'm', 'i386': 'm'}> +# +CONFIG_X86_ACPI_CPUFREQ note +CONFIG_X86_POWERNOW_K8 note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL) + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> Default CPUFreq governor +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE note + +# Menu: Power management and ACPI options >> CPU Frequency scaling >> CPU Frequency scaling >> Generic ARM big LITTLE CPUfreq driver +CONFIG_ARM_BIG_LITTLE_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_DT_BL_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> +CONFIG_ARM_VEXPRESS_SPC_CPUFREQ policy<{'armhf': 'm'}> +CONFIG_ARM_SCPI_CPUFREQ policy<{'arm64': 'm', 'armhf': 'm'}> + +# Menu: Power management and ACPI options >> CPU Idle + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support +CONFIG_CPU_IDLE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_IDLE_GOV_LADDER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_CPU_IDLE_GOV_MENU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> ARM CPU Idle Drivers +CONFIG_ARM_CPUIDLE policy<{'arm64': 'y', 'armhf': 'y'}> +CONFIG_ARM_BIG_LITTLE_CPUIDLE policy<{'armhf': 'y'}> +CONFIG_ARM_HIGHBANK_CPUIDLE policy<{'armhf-generic': 'n', 'armhf-generic-lpae': 'y'}> +CONFIG_ARM_EXYNOS_CPUIDLE policy<{'armhf': 'y'}> +CONFIG_ARM_MVEBU_V7_CPUIDLE policy<{'armhf': 'y'}> +# +CONFIG_ARM_HIGHBANK_CPUIDLE note + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> MIPS CPU Idle Drivers + +# Menu: Power management and ACPI options >> CPU Idle >> CPU idle PM support >> POWERPC CPU Idle Drivers +CONFIG_PSERIES_CPUIDLE policy<{'ppc64el': 'y'}> +CONFIG_POWERNV_CPUIDLE policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> CPUIdle driver >> Architecture: powerpc + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> ARM CPU Idle Drivers +# + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> MIPS CPU Idle Drivers + +# Menu: Power management and ACPI options >> CPUIdle driver >> CPU Idle >> CPU idle PM support >> POWERPC CPU Idle Drivers + +# Menu: Power management and ACPI options >> Cell Broadband Engine options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Embedded 6xx/7xx/7xxx-based boards >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Book-E Machine Type >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Ethernet driver platform-specific options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Freescale Ethernet driver platform-specific options >> Second Ethernet channel >> Architecture: powerpc + +# Menu: Power management and ACPI options >> IBM PowerNV (Non-Virtualized) platform support >> Architecture: powerpc +CONFIG_PPC_POWERNV policy<{'ppc64el': 'y'}> +CONFIG_OPAL_PRD policy<{'ppc64el': 'm'}> +CONFIG_PPC_MEMTRACE policy<{'ppc64el': 'y'}> +CONFIG_PPC_VAS policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> IBM pSeries & new (POWER5-based) iSeries +CONFIG_CMM policy<{'ppc64el': 'm', 's390x': 'y'}> +# +CONFIG_CMM flag + +# Menu: Power management and ACPI options >> IBM pSeries & new (POWER5-based) iSeries >> Architecture: powerpc +CONFIG_PPC_PSERIES policy<{'ppc64el': 'y'}> +CONFIG_PPC_SPLPAR policy<{'ppc64el': 'y'}> +CONFIG_DTL policy<{'ppc64el': 'y'}> +CONFIG_PSERIES_ENERGY policy<{'ppc64el': 'm'}> +CONFIG_SCANLOG policy<{'ppc64el': 'm'}> +CONFIG_IO_EVENT_IRQ policy<{'ppc64el': 'y'}> +CONFIG_LPARCFG policy<{'ppc64el': 'y'}> +CONFIG_PPC_SMLPAR policy<{'ppc64el': 'y'}> +CONFIG_HV_PERF_CTRS policy<{'ppc64el': 'y'}> + +# Menu: Power management and ACPI options >> MPC8xx CPM Options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> MPC8xx CPM Options >> Microcode patch selection >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PA Semi PWRficient options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PS3 Platform Options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> PS3 Platform Options >> PS3 Advanced configuration options >> Architecture: powerpc + +# Menu: Power management and ACPI options >> Power Management Debug Support +CONFIG_PM_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PM_ADVANCED_DEBUG policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PM_TEST_SUSPEND policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_DPM_WATCHDOG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n'}> +# +CONFIG_PM_DEBUG flag + +# Menu: Power management and ACPI options >> Support for 47x variant >> Architecture: powerpc + +# Menu: Processor support +CONFIG_SMP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NR_CPUS policy<{'amd64': '8192', 'arm64': '256', 'armhf': '4', 'i386': '8', 'ppc64el': '2048', 's390x': '256'}> + +# Menu: Processor support >> Architecture: powerpc +CONFIG_ALTIVEC policy<{'ppc64el': 'y'}> +CONFIG_VSX policy<{'ppc64el': 'y'}> +CONFIG_PPC_RADIX_MMU policy<{'ppc64el': 'y'}> +CONFIG_PPC_RADIX_MMU_DEFAULT policy<{'ppc64el': 'y'}> + +# Menu: Processor support >> CPU selection +CONFIG_GENERIC_CPU policy<{'amd64': 'y'}> + +# Menu: Processor support >> CPU selection >> Architecture: powerpc +CONFIG_POWER7_CPU policy<{'ppc64el': 'n'}> +CONFIG_POWER8_CPU policy<{'ppc64el': 'y'}> + +# Menu: Processor support >> Processor Type >> Architecture: powerpc +CONFIG_PPC_BOOK3S_64 policy<{'ppc64el': 'y'}> +CONFIG_PPC_BOOK3E_64 policy<{'ppc64el': 'n'}> + +# Menu: Processor type and features +CONFIG_ARCH_RANDOM policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SPARSEMEM_VMEMMAP policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BALLOON_COMPACTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_COMPACTION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MIGRATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BOUNCE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_KSM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_MMAP_MIN_ADDR policy<{'amd64': '65536', 'arm64': '32768', 'armhf': '32768', 'i386': '65536', 'ppc64el': '65536', 's390x': '65536'}> +CONFIG_MEMORY_FAILURE policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y'}> +CONFIG_HWPOISON_INJECT policy<{'amd64': 'm', 'arm64': 'm', 'ppc64el': 'm'}> +CONFIG_TRANSPARENT_HUGEPAGE policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CLEANCACHE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_FRONTSWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEM_SOFT_DIRTY policy<{'amd64': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_ZSWAP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZPOOL policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ZBUD policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_Z3FOLD policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_ZSMALLOC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PGTABLE_MAPPING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_ZSMALLOC_STAT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IDLE_PAGE_TRACKING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HMM_MIRROR policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_DEVICE_PRIVATE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_DEVICE_PUBLIC policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_PERCPU_STATS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_GUP_BENCHMARK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SCHED_MC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 's390x': 'y'}> +CONFIG_SCHED_SMT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HOTPLUG_CPU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NUMA policy<{'amd64': 'y', 'arm64': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_NODES_SHIFT policy<{'amd64': '10', 'arm64': '6', 'ppc64el': '8', 's390x': '4'}> +CONFIG_HIGHPTE policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_MATH_EMULATION policy<{'i386': 'n'}> +CONFIG_PARAVIRT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_KEXEC_FILE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_PARAVIRT_TIME_ACCOUNTING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n'}> +CONFIG_XEN policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'n', 'i386': 'y'}> +CONFIG_RELOCATABLE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_RANDOMIZE_BASE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_CMDLINE_BOOL policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n'}> +CONFIG_HIGHMEM policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_FORCE_MAX_ZONEORDER policy<{'arm64': '13', 'armhf-generic': '12', 'armhf-generic-lpae': '11', 'ppc64el': '9', 's390x': '9'}> +# +CONFIG_DEFAULT_MMAP_MIN_ADDR mark note +CONFIG_TRANSPARENT_HUGEPAGE flag +CONFIG_MEM_SOFT_DIRTY flag +CONFIG_IDLE_PAGE_TRACKING flag note +CONFIG_PERCPU_STATS flag +CONFIG_RELOCATABLE flag +CONFIG_HOTPLUG_CPU flag +CONFIG_NUMA note + +# Menu: Processor type and features >> ARM errata workarounds via the alternatives framework >> Architecture: arm64 +CONFIG_ARM64_ERRATUM_826319 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_827319 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_824069 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_819472 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_832075 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_834220 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_845719 policy<{'arm64': 'y'}> +CONFIG_ARM64_ERRATUM_843419 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_22375 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_23144 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_23154 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_27456 policy<{'arm64': 'y'}> +CONFIG_CAVIUM_ERRATUM_30115 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_1003 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_1009 policy<{'arm64': 'y'}> +CONFIG_QCOM_QDF2400_ERRATUM_0065 policy<{'arm64': 'y'}> +CONFIG_SOCIONEXT_SYNQUACER_PREITS policy<{'arm64': 'y'}> +CONFIG_HISILICON_ERRATUM_161600802 policy<{'arm64': 'y'}> +CONFIG_QCOM_FALKOR_ERRATUM_E1041 policy<{'arm64': 'y'}> +# +CONFIG_ARM64_ERRATUM_843419 mark note +CONFIG_QCOM_QDF2400_ERRATUM_0065 mark note + +# Menu: Processor type and features >> ARMv8.1 architectural features >> Architecture: arm64 +CONFIG_ARM64_HW_AFDBM policy<{'arm64': 'y'}> +CONFIG_ARM64_PAN policy<{'arm64': 'y'}> +CONFIG_ARM64_LSE_ATOMICS policy<{'arm64': 'y'}> +CONFIG_ARM64_VHE policy<{'arm64': 'y'}> +# +CONFIG_ARM64_LSE_ATOMICS mark note + +# Menu: Processor type and features >> ARMv8.2 architectural features >> Architecture: arm64 +CONFIG_ARM64_UAO policy<{'arm64': 'y'}> +CONFIG_ARM64_PMEM policy<{'arm64': 'y'}> + +# Menu: Processor type and features >> Allow for memory hot-add +CONFIG_MEMORY_HOTPLUG policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_MEMORY_HOTREMOVE policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFERRED_STRUCT_PAGE_INIT policy<{'amd64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ZONE_DEVICE policy<{'amd64': 'y', 'ppc64el': 'y'}> +# +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE mark note + +# Menu: Processor type and features >> Architecture: arm +CONFIG_HAVE_ARM_ARCH_TIMER policy<{'armhf': 'y'}> +CONFIG_ARM_PSCI policy<{'armhf': 'y'}> +CONFIG_THUMB2_KERNEL policy<{'armhf': 'n'}> +CONFIG_ARM_PATCH_IDIV policy<{'armhf': 'y'}> +CONFIG_AEABI policy<{'armhf': 'y'}> +CONFIG_OABI_COMPAT policy<{'armhf': 'n'}> +CONFIG_CPU_SW_DOMAIN_PAN policy<{'armhf-generic': 'y'}> +CONFIG_ARM_MODULE_PLTS policy<{'armhf': 'n'}> +CONFIG_UACCESS_WITH_MEMCPY policy<{'armhf': 'n'}> + +# Menu: Processor type and features >> Architecture: arm64 +CONFIG_ARM64_SW_TTBR0_PAN policy<{'arm64': 'y'}> +CONFIG_ARM64_SVE policy<{'arm64': 'y'}> +CONFIG_RANDOMIZE_MODULE_REGION_FULL policy<{'arm64': 'y'}> + +# Menu: Processor type and features >> Architecture: powerpc +CONFIG_PPC_TRANSACTIONAL_MEM policy<{'ppc64el': 'y'}> +CONFIG_LD_HEAD_STUB_CATCH policy<{'ppc64el': 'n'}> +CONFIG_DISABLE_MPROFILE_KERNEL policy<{'ppc64el': 'n'}> +CONFIG_SWIOTLB policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y'}> +CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE policy<{'ppc64el': 'y'}> +CONFIG_RELOCATABLE_TEST policy<{'ppc64el': 'n'}> +CONFIG_FA_DUMP policy<{'ppc64el': 'y'}> +CONFIG_IRQ_ALL_CPUS policy<{'ppc64el': 'y'}> +CONFIG_THREAD_SHIFT policy<{'ppc64el': '14'}> +CONFIG_PPC_SUBPAGE_PROT policy<{'ppc64el': 'y'}> +CONFIG_PPC_DENORMALISATION policy<{'ppc64el': 'y'}> +CONFIG_EXTRA_TARGETS policy<{'ppc64el': '""'}> +# +CONFIG_FA_DUMP note + +# Menu: Processor type and features >> Architecture: s390 +CONFIG_MAX_PHYSMEM_BITS policy<{'s390x': '46'}> +CONFIG_PACK_STACK policy<{'s390x': 'y'}> +CONFIG_CHECK_STACK policy<{'s390x': 'y'}> +CONFIG_STACK_GUARD policy<{'s390x': '256'}> +CONFIG_WARN_DYNAMIC_STACK policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Architecture: x86 +CONFIG_ZONE_DMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X86_FEATURE_NAMES policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_FAST_FEATURE_TESTS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_X2APIC policy<{'amd64': 'y'}> +CONFIG_X86_MPPARSE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RETPOLINE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_INTEL_RDT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_EXTENDED_PLATFORM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_LPSS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_AMD_PLATFORM_DEVICE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IOSF_MBI policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_IOSF_MBI_DEBUG policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_32_IRIS policy<{'i386': 'm'}> +CONFIG_SCHED_OMIT_FRAME_POINTER policy<{'amd64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_X86_GENERIC policy<{'i386': 'y'}> +CONFIG_X86_PPRO_FENCE policy<{'i386': 'y'}> +CONFIG_HPET_TIMER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_GART_IOMMU policy<{'amd64': 'y'}> +CONFIG_CALGARY_IOMMU policy<{'amd64': 'y'}> +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT policy<{'amd64': 'y'}> +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_LEGACY_VM86 policy<{'i386': 'y'}> +CONFIG_X86_16BIT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_VSYSCALL_EMULATION policy<{'amd64': 'y'}> +CONFIG_TOSHIBA policy<{'i386': 'n'}> +CONFIG_I8K policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_REBOOTFIXUPS policy<{'i386': 'y'}> +CONFIG_MICROCODE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MICROCODE_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MICROCODE_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MSR policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_CPUID policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_X86_PAE policy<{'i386': 'y'}> +CONFIG_X86_5LEVEL policy<{'amd64': 'n'}> +CONFIG_AMD_MEM_ENCRYPT policy<{'amd64': 'y'}> +CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT policy<{'amd64': 'n'}> +CONFIG_ARCH_MEMORY_PROBE policy<{'amd64': 'y', 'ppc64el': 'y'}> +CONFIG_X86_PMEM_LEGACY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_CHECK_BIOS_CORRUPTION policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_RESERVE_LOW policy<{'amd64': '64', 'i386': '64'}> +CONFIG_MTRR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MTRR_SANITIZER policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT policy<{'amd64': '1', 'i386': '1'}> +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT policy<{'amd64': '1', 'i386': '1'}> +CONFIG_X86_PAT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_SMAP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_UMIP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_INTEL_MPX policy<{'amd64': 'y'}> +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS policy<{'amd64': 'y'}> +CONFIG_EFI_STUB policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_EFI_MIXED policy<{'amd64': 'y'}> +CONFIG_KEXEC_VERIFY_SIG policy<{'amd64': 'y'}> +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG policy<{'amd64': 'y'}> +CONFIG_KEXEC_JUMP policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_RANDOMIZE_MEMORY policy<{'amd64': 'y'}> +CONFIG_COMPAT_VDSO policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MODIFY_LDT_SYSCALL policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_ZONE_DMA note +CONFIG_COMPAT_VDSO mark +CONFIG_X86_LEGACY_VM86 note +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG flag note +CONFIG_MODIFY_LDT_SYSCALL flag note + +# Menu: Processor type and features >> Contiguous Memory Allocator +CONFIG_CMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_CMA_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CMA_DEBUGFS policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_CMA_AREAS policy<{'amd64': '7', 'arm64': '7', 'armhf': '7', 'i386': '7', 'ppc64el': '7', 's390x': '7'}> + +# Menu: Processor type and features >> Emulate deprecated/obsolete ARMv8 instructions >> Architecture: arm64 +CONFIG_ARMV8_DEPRECATED policy<{'arm64': 'y'}> +CONFIG_SWP_EMULATION policy<{'arm64': 'y'}> +CONFIG_CP15_BARRIER_EMULATION policy<{'arm64': 'y'}> +CONFIG_SETEND_EMULATION policy<{'arm64': 'y'}> +# +CONFIG_ARMV8_DEPRECATED mark note +CONFIG_SWP_EMULATION mark note +CONFIG_CP15_BARRIER_EMULATION mark note +CONFIG_SETEND_EMULATION mark note + +# Menu: Processor type and features >> High Memory Support >> Architecture: x86 +CONFIG_NOHIGHMEM policy<{'i386': 'n'}> +CONFIG_HIGHMEM4G policy<{'i386': 'n'}> +CONFIG_HIGHMEM64G policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Architecture: x86 +CONFIG_HYPERVISOR_GUEST policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Architecture: x86 +CONFIG_PARAVIRT_DEBUG policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_PARAVIRT_SPINLOCKS policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_QUEUED_LOCK_STAT policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_KVM_DEBUG_FS policy<{'amd64': 'y', 'i386': 'y'}> + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Xen guest support + +# Menu: Processor type and features >> Linux guest support >> Enable paravirtualization code >> Xen guest support >> Architecture: x86 +CONFIG_XEN_PV policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_DOM0 policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y'}> +CONFIG_XEN_PVHVM policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_XEN_512GB policy<{'amd64': 'y'}> +CONFIG_XEN_DEBUG_FS policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_XEN_PVH policy<{'amd64': 'y', 'i386': 'y'}> +# +CONFIG_XEN_512GB flag note + +# Menu: Processor type and features >> Machine Check / overheating reporting >> Architecture: x86 +CONFIG_X86_MCE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCELOG_LEGACY policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCE_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_MCE_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_X86_ANCIENT_MCE policy<{'i386': 'n'}> +CONFIG_X86_MCE_INJECT policy<{'amd64': 'm', 'i386': 'm'}> + +# Menu: Processor type and features >> Math emulation options >> Architecture: powerpc + +# Menu: Processor type and features >> Memory model +CONFIG_FLATMEM_MANUAL policy<{'i386': 'n'}> +CONFIG_SPARSEMEM_MANUAL policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Processor type and features >> Memory split +CONFIG_VMSPLIT_3G policy<{'armhf': 'y', 'i386': 'y'}> +CONFIG_VMSPLIT_3G_OPT policy<{'armhf-generic': 'n'}> +CONFIG_VMSPLIT_2G policy<{'armhf': 'n', 'i386': 'n'}> +CONFIG_VMSPLIT_1G policy<{'armhf': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Memory split >> Architecture: arm + +# Menu: Processor type and features >> Memory split >> Architecture: x86 + +# Menu: Processor type and features >> Page size >> Architecture: arm64 +CONFIG_ARM64_4K_PAGES policy<{'arm64': 'y'}> +CONFIG_ARM64_16K_PAGES policy<{'arm64': 'n'}> +CONFIG_ARM64_64K_PAGES policy<{'arm64': 'n'}> + +# Menu: Processor type and features >> Page size >> Architecture: powerpc +CONFIG_PPC_4K_PAGES policy<{'ppc64el': 'n'}> +CONFIG_PPC_64K_PAGES policy<{'ppc64el': 'y'}> + +# Menu: Processor type and features >> Performance monitoring >> Architecture: x86 +CONFIG_PERF_EVENTS_INTEL_UNCORE policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_PERF_EVENTS_INTEL_RAPL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PERF_EVENTS_INTEL_CSTATE policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_PERF_EVENTS_AMD_POWER policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Power Management Debug Support +# + +# Menu: Processor type and features >> Preemption Model +CONFIG_PREEMPT_NONE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_PREEMPT_VOLUNTARY policy<{'amd64-generic': 'y', 'amd64-lowlatency': 'n', 'arm64': 'y', 'armhf': 'y', 'i386-generic': 'y', 'i386-lowlatency': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_PREEMPT policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_PREEMPT_NONE note + +# Menu: Processor type and features >> Processor family + +# Menu: Processor type and features >> Processor family >> Architecture: x86 +CONFIG_M486 policy<{'i386': 'n'}> +CONFIG_M586 policy<{'i386': 'n'}> +CONFIG_M586TSC policy<{'i386': 'n'}> +CONFIG_M586MMX policy<{'i386': 'n'}> +CONFIG_M686 policy<{'i386': 'y'}> +CONFIG_MPENTIUMII policy<{'i386': 'n'}> +CONFIG_MPENTIUMIII policy<{'i386': 'n'}> +CONFIG_MPENTIUMM policy<{'i386': 'n'}> +CONFIG_MPENTIUM4 policy<{'i386': 'n'}> +CONFIG_MK6 policy<{'i386': 'n'}> +CONFIG_MK7 policy<{'i386': 'n'}> +CONFIG_MK8 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MCRUSOE policy<{'i386': 'n'}> +CONFIG_MEFFICEON policy<{'i386': 'n'}> +CONFIG_MWINCHIPC6 policy<{'i386': 'n'}> +CONFIG_MWINCHIP3D policy<{'i386': 'n'}> +CONFIG_MELAN policy<{'i386': 'n'}> +CONFIG_MGEODEGX1 policy<{'i386': 'n'}> +CONFIG_MGEODE_LX policy<{'i386': 'n'}> +CONFIG_MCYRIXIII policy<{'i386': 'n'}> +CONFIG_MVIAC3_2 policy<{'i386': 'n'}> +CONFIG_MVIAC7 policy<{'i386': 'n'}> +CONFIG_MPSC policy<{'amd64': 'n'}> +CONFIG_MCORE2 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_MATOM policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Processor type >> Architecture: s390 +CONFIG_MARCH_Z900 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z990 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z9_109 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z10 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z196 policy<{'s390x': 'n'}> +CONFIG_MARCH_ZEC12 policy<{'s390x': 'y'}> +CONFIG_MARCH_Z13 policy<{'s390x': 'n'}> +CONFIG_MARCH_Z14 policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Support for extended (non-PC) x86 platforms >> Architecture: x86 +CONFIG_X86_NUMACHIP policy<{'amd64': 'y'}> +CONFIG_X86_VSMP policy<{'amd64': 'n'}> +CONFIG_X86_UV policy<{'amd64': 'n'}> +CONFIG_X86_GOLDFISH policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_X86_INTEL_MID policy<{'amd64': 'n', 'i386': 'y'}> +CONFIG_X86_INTEL_QUARK policy<{'i386': 'n'}> +CONFIG_X86_RDC321X policy<{'i386': 'n'}> +CONFIG_X86_32_NON_STANDARD policy<{'i386': 'n'}> +CONFIG_APB_TIMER policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Supported processor vendors >> Architecture: x86 +CONFIG_PROCESSOR_SELECT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_INTEL policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_CYRIX_32 policy<{'i386': 'y'}> +CONFIG_CPU_SUP_AMD policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_CENTAUR policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_CPU_SUP_TRANSMETA_32 policy<{'i386': 'y'}> +CONFIG_CPU_SUP_UMC_32 policy<{'i386': 'y'}> + +# Menu: Processor type and features >> Symmetric Multi-Processing +# + +# Menu: Processor type and features >> Symmetric Multi-Processing >> Architecture: arm +CONFIG_SMP_ON_UP policy<{'armhf': 'y'}> +CONFIG_ARM_CPU_TOPOLOGY policy<{'armhf': 'y'}> +CONFIG_MCPM policy<{'armhf': 'y'}> +CONFIG_BIG_LITTLE policy<{'armhf': 'y'}> +CONFIG_BL_SWITCHER policy<{'armhf': 'y'}> +CONFIG_BL_SWITCHER_DUMMY_IF policy<{'armhf': 'm'}> + +# Menu: Processor type and features >> Symmetric multi-processing support +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Architecture: s390 +CONFIG_SCHED_TOPOLOGY policy<{'s390x': 'y'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Architecture: x86 +CONFIG_X86_BIGSMP policy<{'i386': 'n'}> +CONFIG_MAXSMP policy<{'amd64': 'y'}> +CONFIG_SCHED_MC_PRIO policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_BOOTPARAM_HOTPLUG_CPU0 policy<{'amd64': 'n', 'i386': 'n'}> +CONFIG_DEBUG_HOTPLUG_CPU0 policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support +CONFIG_NUMA_EMU policy<{'amd64': 'n', 's390x': 'y'}> +# +CONFIG_NUMA_EMU note mark + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support >> Allow for memory hot-add +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Numa Memory Allocation and Scheduler Support >> Architecture: x86 +CONFIG_AMD_NUMA policy<{'amd64': 'y'}> +CONFIG_X86_64_ACPI_NUMA policy<{'amd64': 'y'}> + +# Menu: Processor type and features >> Symmetric multi-processing support >> Select NUMA modes +# + +# Menu: Processor type and features >> Symmetric multi-processing support >> Select NUMA modes >> Architecture: s390 + +# Menu: Processor type and features >> Timer frequency +CONFIG_HZ_100 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_HZ_250 policy<{'amd64-generic': 'y', 'amd64-lowlatency': 'n', 'arm64': 'y', 'armhf': 'y', 'i386-generic': 'y', 'i386-lowlatency': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_HZ_300 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_HZ_1000 policy<{'amd64-generic': 'n', 'amd64-lowlatency': 'y', 'arm64': 'n', 'armhf': 'n', 'i386-generic': 'n', 'i386-lowlatency': 'y', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Processor type and features >> Timer frequency >> Architecture: arm +CONFIG_HZ_200 policy<{'armhf': 'n'}> +CONFIG_HZ_500 policy<{'armhf': 'n'}> + +# Menu: Processor type and features >> Transparent Hugepage Support sysfs defaults +CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS policy<{'amd64': 'n', 'arm64': 'n', 'armhf-generic-lpae': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Processor type and features >> Tune code generation >> Architecture: s390 +CONFIG_TUNE_DEFAULT policy<{'s390x': 'n'}> +CONFIG_TUNE_Z900 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z990 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z9_109 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z10 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z196 policy<{'s390x': 'n'}> +CONFIG_TUNE_ZEC12 policy<{'s390x': 'y'}> +CONFIG_TUNE_Z13 policy<{'s390x': 'n'}> +CONFIG_TUNE_Z14 policy<{'s390x': 'n'}> + +# Menu: Processor type and features >> Virtual address space size >> Architecture: arm64 +CONFIG_ARM64_VA_BITS_39 policy<{'arm64': 'n'}> +CONFIG_ARM64_VA_BITS_48 policy<{'arm64': 'y'}> +# +CONFIG_ARM64_VA_BITS_48 mark note + +# Menu: Processor type and features >> vsyscall table for legacy applications >> Architecture: x86 +CONFIG_LEGACY_VSYSCALL_NATIVE policy<{'amd64': 'n'}> +CONFIG_LEGACY_VSYSCALL_EMULATE policy<{'amd64': 'y'}> +CONFIG_LEGACY_VSYSCALL_NONE policy<{'amd64': 'n'}> + +# Menu: Security options +CONFIG_SECURITY_DMESG_RESTRICT policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_PERF_EVENTS_RESTRICT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITYFS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_TABLE_ISOLATION policy<{'amd64': 'y'}> +CONFIG_INTEL_TXT policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_HARDENED_USERCOPY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_HARDENED_USERCOPY_PAGESPAN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_FORTIFY_SOURCE policy<{'amd64': 'y', 'arm64': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_STATIC_USERMODEHELPER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_LOCK_DOWN_KERNEL policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'y', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ policy<{'amd64': 'y', 'i386': 'y'}> +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT policy<{'amd64': 'y', 'arm64': 'n', 'i386': 'y'}> +# +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT mark +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ mark +CONFIG_LOCK_DOWN_KERNEL mark flag + +# Menu: Security options >> Default security module +CONFIG_DEFAULT_SECURITY_SELINUX policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_SMACK policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_TOMOYO policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_DEFAULT_SECURITY_APPARMOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_DEFAULT_SECURITY_DAC policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_DEFAULT_SECURITY_APPARMOR mark + +# Menu: Security options >> Enable access key retention support +CONFIG_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PERSISTENT_KEYRINGS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_BIG_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_TRUSTED_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ENCRYPTED_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_KEY_DH_OPERATIONS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> + +# Menu: Security options >> Enable different security models +CONFIG_SECURITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_NETWORK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_INFINIBAND policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_NETWORK_XFRM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_PATH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_LSM_MMAP_MIN_ADDR policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0', 's390x': '0'}> +CONFIG_SECURITY_LOADPIN policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_YAMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SECURITY mark +CONFIG_LSM_MMAP_MIN_ADDR mark flag +CONFIG_SECURITY_YAMA mark + +# Menu: Security options >> Enable different security models >> AppArmor support +CONFIG_SECURITY_APPARMOR policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +CONFIG_SECURITY_APPARMOR_HASH policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_APPARMOR_DEBUG policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +# Menu: Security options >> Enable different security models >> Integrity subsystem +CONFIG_INTEGRITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_SIGNATURE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_ASYMMETRIC_KEYS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_INTEGRITY_AUDIT policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY mark note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> EVM support +CONFIG_EVM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_ATTR_FSUUID policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_EXTRA_SMACK_XATTRS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_EVM_LOAD_X509 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_EVM_X509_PATH policy<{'ppc64el': '"/etc/keys/x509_evm.der"'}> +# +CONFIG_EVM note +CONFIG_EVM_ATTR_FSUUID note +CONFIG_EVM_LOAD_X509 note +CONFIG_EVM_X509_PATH note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) +CONFIG_IMA policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_KEXEC policy<{'ppc64el': 'y'}> +CONFIG_IMA_WRITE_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_READ_POLICY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_APPRAISE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_APPRAISE_BOOTPARAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_TRUSTED_KEYRING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_IMA_BLACKLIST_KEYRING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_LOAD_X509 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IMA_X509_PATH policy<{'ppc64el': '"/etc/keys/x509_ima.der"'}> +CONFIG_IMA_APPRAISE_SIGNED_INIT policy<{'ppc64el': 'n'}> +# +CONFIG_IMA mark note +CONFIG_IMA_KEXEC mark note +CONFIG_IMA_WRITE_POLICY mark note +CONFIG_IMA_READ_POLICY mark note +CONFIG_IMA_APPRAISE mark note +CONFIG_IMA_TRUSTED_KEYRING mark note +CONFIG_IMA_BLACKLIST_KEYRING mark note +CONFIG_IMA_LOAD_X509 mark note +CONFIG_IMA_X509_PATH mark note +CONFIG_IMA_APPRAISE_SIGNED_INIT mark note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) >> Default integrity hash algorithm +CONFIG_IMA_DEFAULT_HASH_SHA1 policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IMA_DEFAULT_HASH_SHA256 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_IMA_DEFAULT_HASH_SHA512 policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +# +CONFIG_IMA_DEFAULT_HASH_SHA256 note + +# Menu: Security options >> Enable different security models >> Integrity subsystem >> Integrity Measurement Architecture(IMA) >> Default template +CONFIG_IMA_TEMPLATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_IMA_NG_TEMPLATE policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'y'}> +CONFIG_IMA_SIG_TEMPLATE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'y', 's390x': 'n'}> +# +CONFIG_IMA_SIG_TEMPLATE note + +# Menu: Security options >> Enable different security models >> NSA SELinux Support +CONFIG_SECURITY_SELINUX policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_BOOTPARAM policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'n'}> +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE policy<{'amd64': '0', 'arm64': '0', 'armhf': '0', 'i386': '0', 'ppc64el': '0'}> +CONFIG_SECURITY_SELINUX_DISABLE policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_SELINUX_DEVELOP policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_AVC_STATS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE policy<{'amd64': '1', 'arm64': '1', 'armhf': '1', 'i386': '1', 'ppc64el': '1', 's390x': '1'}> +# +CONFIG_SECURITY_SELINUX mark +CONFIG_SECURITY_SELINUX_DISABLE marknote + +# Menu: Security options >> Enable different security models >> Simplified Mandatory Access Control Kernel Support +CONFIG_SECURITY_SMACK policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SMACK_BRINGUP policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_SMACK_NETFILTER policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_SMACK_APPEND_SIGNALS policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_SECURITY_SMACK mark + +# Menu: Security options >> Enable different security models >> TOMOYO Linux Support +CONFIG_SECURITY_TOMOYO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY policy<{'amd64': '2048', 'arm64': '2048', 'armhf': '2048', 'i386': '2048', 'ppc64el': '2048', 's390x': '2048'}> +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG policy<{'amd64': '1024', 'arm64': '1024', 'armhf': '1024', 'i386': '1024', 'ppc64el': '1024', 's390x': '1024'}> +CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_SECURITY_TOMOYO_POLICY_LOADER policy<{'amd64': '"/sbin/tomoyo-init"', 'arm64': '"/sbin/tomoyo-init"', 'armhf': '"/sbin/tomoyo-init"', 'i386': '"/sbin/tomoyo-init"', 'ppc64el': '"/sbin/tomoyo-init"', 's390x': '"/sbin/tomoyo-init"'}> +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER policy<{'amd64': '"/sbin/init"', 'arm64': '"/sbin/init"', 'armhf': '"/sbin/init"', 'i386': '"/sbin/init"', 'ppc64el': '"/sbin/init"', 's390x': '"/sbin/init"'}> + +# Menu: System Type +# + +# Menu: System Type >> ARM Ltd. Integrator family >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Integrator family >> Support Integrator/AP and Integrator/PP2 platforms >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Integrator family >> Support Integrator/CP platform >> Architecture: arm + +# Menu: System Type >> ARM Ltd. RealView family >> Architecture: arm +CONFIG_ARCH_REALVIEW policy<{'armhf': 'n'}> + +# Menu: System Type >> ARM Ltd. RealView family >> Support RealView(R) Emulation Baseboard >> Architecture: arm + +# Menu: System Type >> ARM Ltd. Versatile Express family + +# Menu: System Type >> ARM Ltd. Versatile Express family >> Architecture: arm +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_DCSCB policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_SPC policy<{'armhf': 'y'}> +CONFIG_ARCH_VEXPRESS_TC2_PM policy<{'armhf': 'y'}> + +# Menu: System Type >> ARM system type >> Architecture: arm +CONFIG_ARCH_MULTIPLATFORM policy<{'armhf': 'y'}> +CONFIG_ARCH_EBSA110 policy<{'armhf': 'n'}> +CONFIG_ARCH_EP93XX policy<{'armhf': 'n'}> +CONFIG_ARCH_FOOTBRIDGE policy<{'armhf': 'n'}> +CONFIG_ARCH_NETX policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP13XX policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP32X policy<{'armhf': 'n'}> +CONFIG_ARCH_IOP33X policy<{'armhf': 'n'}> +CONFIG_ARCH_IXP4XX policy<{'armhf': 'n'}> +CONFIG_ARCH_DOVE policy<{'armhf': 'n'}> +CONFIG_ARCH_KS8695 policy<{'armhf': 'n'}> +CONFIG_ARCH_W90X900 policy<{'armhf': 'n'}> +CONFIG_ARCH_LPC32XX policy<{'armhf': 'n'}> +CONFIG_ARCH_PXA policy<{'armhf': 'n'}> +CONFIG_ARCH_RPC policy<{'armhf': 'n'}> +CONFIG_ARCH_SA1100 policy<{'armhf': 'n'}> +CONFIG_ARCH_S3C24XX policy<{'armhf': 'n'}> +CONFIG_ARCH_DAVINCI policy<{'armhf': 'n'}> +CONFIG_ARCH_OMAP1 policy<{'armhf': 'n'}> + +# Menu: System Type >> Allwinner SoCs + +# Menu: System Type >> Allwinner SoCs >> Architecture: arm + +# Menu: System Type >> Altera SOCFPGA family >> Architecture: arm +CONFIG_ARCH_SOCFPGA policy<{'armhf': 'n'}> + +# Menu: System Type >> Amlogic Meson SoCs + +# Menu: System Type >> Amlogic Meson SoCs >> Architecture: arm +CONFIG_MACH_MESON6 policy<{'armhf': 'y'}> +CONFIG_MACH_MESON8 policy<{'armhf': 'y'}> +CONFIG_MACH_MESON8B policy<{'armhf': 'y'}> + +# Menu: System Type >> Architecture: arm +CONFIG_ARCH_VIRT policy<{'armhf': 'y'}> +CONFIG_ARCH_AXXIA policy<{'armhf-generic-lpae': 'y'}> +CONFIG_ARCH_DIGICOLOR policy<{'armhf': 'n'}> +CONFIG_ARCH_HIGHBANK policy<{'armhf': 'y'}> +CONFIG_ARCH_KEYSTONE policy<{'armhf': 'n'}> +CONFIG_ARCH_S5PV210 policy<{'armhf': 'n'}> +CONFIG_ARCH_TANGO policy<{'armhf': 'y'}> +CONFIG_ARCH_WM8850 policy<{'armhf': 'n'}> +CONFIG_ARCH_ZYNQ policy<{'armhf': 'n'}> +CONFIG_ARM_THUMB policy<{'armhf': 'y'}> +CONFIG_ARM_THUMBEE policy<{'armhf': 'y'}> +CONFIG_SWP_EMULATE policy<{'armhf': 'y'}> +CONFIG_CPU_ICACHE_DISABLE policy<{'armhf': 'n'}> +CONFIG_CPU_BPREDICT_DISABLE policy<{'armhf': 'n'}> +CONFIG_CACHE_FEROCEON_L2 policy<{'armhf': 'y'}> +CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH policy<{'armhf': 'n'}> +CONFIG_CACHE_TAUROS2 policy<{'armhf': 'y'}> +CONFIG_CACHE_UNIPHIER policy<{'armhf': 'y'}> +CONFIG_ARM_DMA_MEM_BUFFERABLE policy<{'armhf': 'y'}> +CONFIG_IWMMXT policy<{'armhf': 'y'}> +CONFIG_PJ4B_ERRATA_4742 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_430973 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_643719 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_720789 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_754322 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_754327 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_764369 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_775420 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_798181 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_773022 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_818325_852422 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_821420 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_825619 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_852421 policy<{'armhf': 'y'}> +CONFIG_ARM_ERRATA_852423 policy<{'armhf': 'y'}> + +# Menu: System Type >> Aspeed BMC architectures >> Architecture: arm + +# Menu: System Type >> Atmel SoCs >> Architecture: arm +CONFIG_ARCH_AT91 policy<{'armhf': 'n'}> + +# Menu: System Type >> Axis Communications ARM based ARTPEC SoCs >> Architecture: arm +CONFIG_ARCH_ARTPEC policy<{'armhf': 'y'}> +CONFIG_MACH_ARTPEC6 policy<{'armhf': 'n'}> + +# Menu: System Type >> Broadcom SoC Support + +# Menu: System Type >> Broadcom SoC Support >> Architecture: arm +CONFIG_ARCH_BCM policy<{'armhf': 'n'}> + +# Menu: System Type >> CSR SiRF >> Architecture: arm +CONFIG_ARCH_SIRF policy<{'armhf': 'n'}> + +# Menu: System Type >> Cavium Networks CNS3XXX family >> Architecture: arm + +# Menu: System Type >> Cirrus EP93xx Implementation Options >> Architecture: arm + +# Menu: System Type >> Enable the L2x0 outer cache controller >> Architecture: arm +CONFIG_CACHE_L2X0 policy<{'armhf': 'y'}> +CONFIG_CACHE_L2X0_PMU policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_588369 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_727915 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_753970 policy<{'armhf': 'y'}> +CONFIG_PL310_ERRATA_769419 policy<{'armhf': 'y'}> + +# Menu: System Type >> Firmware options >> Architecture: arm +CONFIG_TRUSTED_FOUNDATIONS policy<{'armhf-generic': 'y'}> + +# Menu: System Type >> Footbridge Implementations >> Architecture: arm + +# Menu: System Type >> Freescale i.MX family >> Architecture: arm +CONFIG_ARCH_MXC policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_IMX50 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX51 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX53 policy<{'armhf-generic': 'n'}> +CONFIG_SOC_IMX6Q policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6SL policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6SX policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX6UL policy<{'armhf-generic': 'y'}> +CONFIG_SOC_IMX7D policy<{'armhf-generic': 'y'}> +CONFIG_SOC_LS1021A policy<{'armhf-generic': 'n'}> +CONFIG_SOC_VF610 policy<{'armhf-generic': 'y'}> + +# Menu: System Type >> Freescale i.MX family >> Clocksource for scheduler clock >> Architecture: arm +CONFIG_VF_USE_ARM_GLOBAL_TIMER policy<{'armhf-generic': 'y'}> +CONFIG_VF_USE_PIT_TIMER policy<{'armhf-generic': 'n'}> + +# Menu: System Type >> Hisilicon platform type >> Architecture: arm +CONFIG_ARCH_HI3xxx policy<{'armhf': 'y'}> +CONFIG_ARCH_HIP01 policy<{'armhf': 'n'}> +CONFIG_ARCH_HIP04 policy<{'armhf': 'y'}> +CONFIG_ARCH_HIX5HD2 policy<{'armhf': 'y'}> + +# Menu: System Type >> IOP13XX Implementation Options >> Architecture: arm + +# Menu: System Type >> IOP32x Implementation Options >> Architecture: arm + +# Menu: System Type >> IOP33x Implementation Options >> Architecture: arm + +# Menu: System Type >> Intel IXP4xx Implementation Options >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Gumstix Carrier/Expansion Board >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> Motorola EZX Platform >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Keith und Koep Trizeps DIMM-Modules >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Keith und Koep Trizeps DIMM-Modules >> Select base board for Trizeps module >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Palm PDAs >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> PXA based Toshiba e-series PDAs >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> SHARP Zaurus SL-5600, SL-C7xx and SL-Cxx00 Models >> Architecture: arm + +# Menu: System Type >> Intel PXA2xx/PXA3xx Implementations >> display on pcm990 >> Architecture: arm + +# Menu: System Type >> Kendin/Micrel KS8695 Implementations >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Architecture: arm +CONFIG_MMU policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_ARM_LPAE policy<{'armhf-generic': 'n', 'armhf-generic-lpae': 'y'}> +CONFIG_KUSER_HELPERS policy<{'armhf': 'y'}> +CONFIG_VDSO policy<{'armhf': 'y'}> + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Marvell Orion >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Renesas ARM SoCs + +# Menu: System Type >> MMU-based Paged Memory Management Support >> Renesas ARM SoCs >> Architecture: arm +CONFIG_ARCH_EMEV2 policy<{'armhf': 'y'}> +CONFIG_ARCH_R7S72100 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A73A4 policy<{'armhf': 'n'}> +CONFIG_ARCH_R8A7740 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7743 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7745 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7778 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7779 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7790 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7791 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7792 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7793 policy<{'armhf': 'y'}> +CONFIG_ARCH_R8A7794 policy<{'armhf': 'y'}> +CONFIG_ARCH_SH73A0 policy<{'armhf': 'y'}> +# +CONFIG_ARCH_R8A73A4 flag + +# Menu: System Type >> MMU-based Paged Memory Management Support >> ST-Ericsson U300 Series >> Architecture: arm + +# Menu: System Type >> MMU-based Paged Memory Management Support >> ST-Ericsson U8500 Series >> Architecture: arm +CONFIG_ARCH_U8500 policy<{'armhf': 'n'}> + +# Menu: System Type >> MOXA ART SoC >> Architecture: arm + +# Menu: System Type >> Marvell Berlin SoCs + +# Menu: System Type >> Marvell Berlin SoCs >> Architecture: arm +CONFIG_MACH_BERLIN_BG2 policy<{'armhf': 'y'}> +CONFIG_MACH_BERLIN_BG2CD policy<{'armhf': 'y'}> +CONFIG_MACH_BERLIN_BG2Q policy<{'armhf': 'y'}> + +# Menu: System Type >> Marvell Dove Implementations >> Architecture: arm + +# Menu: System Type >> Marvell Engineering Business Unit (MVEBU) SoCs + +# Menu: System Type >> Marvell Engineering Business Unit (MVEBU) SoCs >> Architecture: arm +CONFIG_MACH_ARMADA_370 policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_375 policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_38X policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_39X policy<{'armhf': 'y'}> +CONFIG_MACH_ARMADA_XP policy<{'armhf': 'y'}> +CONFIG_MACH_DOVE policy<{'armhf': 'y'}> + +# Menu: System Type >> Marvell MV78xx0 >> Architecture: arm + +# Menu: System Type >> Marvell PXA168/910/MMP2 >> Architecture: arm +CONFIG_ARCH_MMP policy<{'armhf': 'n'}> + +# Menu: System Type >> Marvell PXA168/910/MMP2 >> Marvell PXA168/910/MMP2 Implementations >> Architecture: arm + +# Menu: System Type >> Mediatek MT65xx & MT81xx SoC + +# Menu: System Type >> Mediatek MT65xx & MT81xx SoC >> Architecture: arm +CONFIG_MACH_MT2701 policy<{'armhf': 'y'}> +CONFIG_MACH_MT6589 policy<{'armhf': 'y'}> +CONFIG_MACH_MT6592 policy<{'armhf': 'y'}> +CONFIG_MACH_MT7623 policy<{'armhf': 'y'}> +CONFIG_MACH_MT8127 policy<{'armhf': 'y'}> +CONFIG_MACH_MT8135 policy<{'armhf': 'y'}> + +# Menu: System Type >> Multiple platform selection >> Architecture: arm +CONFIG_ARCH_MULTI_V6 policy<{'armhf': 'n'}> +CONFIG_ARCH_MULTI_V7 policy<{'armhf': 'y'}> + +# Menu: System Type >> NUC950 Machines >> Architecture: arm + +# Menu: System Type >> NUC960 Machines >> Architecture: arm + +# Menu: System Type >> NetX Implementations >> Architecture: arm + +# Menu: System Type >> Oxford Semiconductor OXNAS Family SoCs >> Architecture: arm + +# Menu: System Type >> Qualcomm Support + +# Menu: System Type >> Qualcomm Support >> Architecture: arm +CONFIG_ARCH_MSM8X60 policy<{'armhf': 'y'}> +CONFIG_ARCH_MSM8960 policy<{'armhf': 'y'}> +CONFIG_ARCH_MSM8974 policy<{'armhf': 'y'}> +CONFIG_ARCH_MDM9615 policy<{'armhf': 'y'}> + +# Menu: System Type >> SA11x0 Implementations >> Architecture: arm + +# Menu: System Type >> SA11x0 Implementations >> Cerf Flash available >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2410 >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2412 >> Architecture: arm + +# Menu: System Type >> SAMSUNG S3C24XX SoCs Support >> SAMSUNG S3C2440 >> Architecture: arm + +# Menu: System Type >> ST SPEAr Family >> Architecture: arm +CONFIG_PLAT_SPEAR policy<{'armhf': 'n'}> + +# Menu: System Type >> ST SPEAr Family >> ST SPEAr13xx >> Architecture: arm + +# Menu: System Type >> ST SPEAr Family >> ST SPEAr13xx >> ST SPEAr3xx >> Architecture: arm + +# Menu: System Type >> ST-Ericsson Nomadik >> Architecture: arm + +# Menu: System Type >> STMicroelectronics Consumer Electronics SOCs >> Architecture: arm +CONFIG_ARCH_STI policy<{'armhf': 'n'}> + +# Menu: System Type >> STMicrolectronics STM32 >> Architecture: arm + +# Menu: System Type >> Samsung Common options >> Architecture: arm +CONFIG_SAMSUNG_PM_CHECK policy<{'armhf': 'n'}> + +# Menu: System Type >> Samsung EXYNOS + +# Menu: System Type >> Samsung EXYNOS >> Architecture: arm +CONFIG_ARCH_EXYNOS3 policy<{'armhf': 'n'}> +CONFIG_ARCH_EXYNOS4 policy<{'armhf': 'n'}> + +# Menu: System Type >> Samsung EXYNOS >> SAMSUNG EXYNOS5 >> Architecture: arm +CONFIG_ARCH_EXYNOS5 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5250 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5260 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5410 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5420 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5440 policy<{'armhf': 'y'}> +CONFIG_SOC_EXYNOS5800 policy<{'armhf': 'y'}> +CONFIG_EXYNOS5420_MCPM policy<{'armhf': 'y'}> + +# Menu: System Type >> Samsung S3C64XX >> Architecture: arm + +# Menu: System Type >> Samsung S3C64XX >> SMDK6410 >> Architecture: arm + +# Menu: System Type >> Samsung S3C64XX >> SMDK6410 >> SMDK6410 MMC/SD slot setup >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DA850/OMAP-L138/AM18x based system >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DA850/OMAP-L138/AM18x based system >> Select peripherals connected to expander on UI board >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> DaVinci 644x based system >> Architecture: arm + +# Menu: System Type >> TI DaVinci Implementations >> Select DA830/OMAP-L137/AM17x UI board peripheral >> Architecture: arm + +# Menu: System Type >> TI OMAP Common Features >> Architecture: arm +CONFIG_POWER_AVS_OMAP policy<{'armhf-generic': 'y'}> +CONFIG_POWER_AVS_OMAP_CLASS3 policy<{'armhf-generic': 'y'}> +CONFIG_OMAP_RESET_CLOCKS policy<{'armhf': 'y'}> +CONFIG_OMAP_32K_TIMER policy<{'armhf': 'y'}> +CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE policy<{'armhf-generic': 'n'}> +CONFIG_OMAP_DM_TIMER policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP Common Features >> OMAP PM layer selection >> Architecture: arm +CONFIG_OMAP_PM_NOOP policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP/AM/DM/DRA Family >> Architecture: arm +CONFIG_ARCH_OMAP3 policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_ARCH_OMAP4 policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_OMAP5 policy<{'armhf': 'n'}> +CONFIG_SOC_AM33XX policy<{'armhf-generic': 'y', 'armhf-generic-lpae': 'n'}> +CONFIG_SOC_AM43XX policy<{'armhf': 'n'}> +CONFIG_SOC_DRA7XX policy<{'armhf': 'y'}> +CONFIG_OMAP5_ERRATA_801819 policy<{'armhf': 'y'}> + +# Menu: System Type >> TI OMAP/AM/DM/DRA Family >> TI OMAP2/3/4 Specific Features >> Architecture: arm +CONFIG_ARCH_OMAP2PLUS_TYPICAL policy<{'armhf': 'y'}> +CONFIG_SOC_HAS_OMAP2_SDRC policy<{'armhf': 'y'}> +CONFIG_SOC_HAS_REALTIME_COUNTER policy<{'armhf': 'y'}> +CONFIG_SOC_OMAP3430 policy<{'armhf-generic': 'y'}> +CONFIG_SOC_TI81XX policy<{'armhf-generic': 'y'}> +CONFIG_MACH_OMAP3517EVM policy<{'armhf-generic': 'n'}> +CONFIG_MACH_OMAP3_PANDORA policy<{'armhf-generic': 'y'}> +CONFIG_OMAP3_SDRC_AC_TIMING policy<{'armhf-generic': 'n'}> + +# Menu: System Type >> TI OMAP1 specific features >> Architecture: arm + +# Menu: System Type >> TI OMAP1 specific features >> OMAP15xx Based System >> Architecture: arm + +# Menu: System Type >> TI OMAP1 specific features >> OMAP16xx Based System >> Architecture: arm +CONFIG_MACH_OMAP_GENERIC policy<{'armhf': 'y'}> + +# Menu: System Type >> W90P910 Machines >> Architecture: arm + +# Menu: Ubuntu Supplied Third-Party Device Drivers +CONFIG_HIO policy<{'amd64': 'm', 'arm64': 'n', 'armhf': 'n', 'i386': 'm', 'ppc64el': 'n'}> +# +CONFIG_HIO mark note + +# Menu: Virtualization +CONFIG_VIRTUALIZATION policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_VHOST_NET policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_SCSI policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_VSOCK policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'ppc64el': 'm', 's390x': 'm'}> +CONFIG_VHOST_CROSS_ENDIAN_LEGACY policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_KVM policy<{'amd64': 'm', 'arm64': 'y', 'armhf-generic-lpae': 'y', 'i386': 'm', 'ppc64el': 'y', 's390x': 'y'}> +# +CONFIG_KVM note + +# Menu: Virtualization >> Architecture: powerpc +CONFIG_KVM_BOOK3S_64 policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_64_HV policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_64_PR policy<{'ppc64el': 'm'}> +CONFIG_KVM_BOOK3S_HV_EXIT_TIMING policy<{'ppc64el': 'n'}> +CONFIG_KVM_XICS policy<{'ppc64el': 'y'}> + +# Menu: Virtualization >> Architecture: s390 +CONFIG_PFAULT policy<{'s390x': 'y'}> +CONFIG_CMM_IUCV policy<{'s390x': 'y'}> +CONFIG_S390_HYPFS_FS policy<{'s390x': 'y'}> +CONFIG_S390_GUEST policy<{'s390x': 'y'}> + +# Menu: Virtualization >> KVM +# + +# Menu: Virtualization >> KVM >> Architecture: s390 +CONFIG_KVM_S390_UCONTROL policy<{'s390x': 'n'}> + +# Menu: Virtualization >> Kernel-based Virtual Machine (KVM) support +# + +# Menu: Virtualization >> Kernel-based Virtual Machine (KVM) support >> Architecture: x86 +CONFIG_KVM_INTEL policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KVM_AMD policy<{'amd64': 'm', 'i386': 'm'}> +CONFIG_KVM_MMU_AUDIT policy<{'amd64': 'n', 'i386': 'n'}> + +# Menu: Virtualization >> Linux - VM Monitor Stream, base infrastructure >> Architecture: s390 +CONFIG_APPLDATA_BASE policy<{'s390x': 'y'}> +CONFIG_APPLDATA_MEM policy<{'s390x': 'm'}> +CONFIG_APPLDATA_OS policy<{'s390x': 'm'}> +CONFIG_APPLDATA_NET_SUM policy<{'s390x': 'm'}> + +# Menu: FOOTER + +# temporarily disabled options -- build failures. + +CONFIG_HISILICON_LPC policy<{'arm64': 'y'}> +CONFIG_LIBIO policy<{'amd64': 'n', 'arm64': 'y', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> + +#CONFIG_TI_CPSW p policy<(arch armel armhf &/ value n) | value m> flag +#CONFIG_USB_MUSB_DSPS p policy<(arch armel armhf &/ value n) | value m> flag +#CONFIG_LIS3L02DQ p policy<(arch armhf &/ value n) | value m> flag +#CONFIG_EZX_PCAP p policy<(arch armhf &/ value n) | value y> flag +#CONFIG_TOUCHSCREEN_EGALAX p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_TOUCHSCREEN_EETI p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_SENSORS_AK8975 p policy<(arch armel armhf &/ value n) | value m> flag note +#CONFIG_PPC_EPAPR_HV_BYTECHAN n flag note + +# +# --- linux-aws-4.15.0.orig/debian.master/config/arm64/config.common.arm64 +++ linux-aws-4.15.0/debian.master/config/arm64/config.common.arm64 @@ -0,0 +1,539 @@ +# +# Config options for config.common.arm64 automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +CONFIG_6LOWPAN=m +CONFIG_ABX500_CORE=y +CONFIG_AC97_BUS=m +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_DEBUGGER is not set +CONFIG_ACPI_REDUCED_HARDWARE_ONLY=y +CONFIG_ADFS_FS=m +CONFIG_AFFS_FS=m +CONFIG_AIX_PARTITION=y +CONFIG_ALIM7101_WDT=m +CONFIG_ALTERA_TSE=m +# CONFIG_AMD_XGBE_HAVE_ECC is not set +CONFIG_AMIGA_PARTITION=y +CONFIG_APPLICOM=m +# CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_EXYNOS is not set +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +# CONFIG_ARCH_MESON is not set +CONFIG_ARCH_MMAP_RND_BITS=18 +CONFIG_ARCH_MMAP_RND_BITS_MAX=33 +CONFIG_ARCH_MMAP_RND_BITS_MIN=18 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +# CONFIG_ARCH_MVEBU is not set +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +# CONFIG_ARCH_ROCKCHIP is not set +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SUNXI=y +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_UNIPHIER is not set +# CONFIG_ARCH_WANTS_THP_SWAP is not set +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCNET=m +CONFIG_ARM_GIC_V3_ITS=y +CONFIG_ARM_SMMU=y +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_GENERIC=m +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=m +CONFIG_ATM=m +CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BATMAN_ADV=m +CONFIG_BCH=m +CONFIG_BCMA=m +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BE2ISCSI=m +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RSXX=m +CONFIG_BLK_DEV_SKD=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BOUNCE=y +CONFIG_BSD_DISKLABEL=y +CONFIG_C2PORT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +CONFIG_CAN=m +CONFIG_CB710_CORE=m +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CHASH=m +CONFIG_CMDLINE="console=ttyAMA0" +CONFIG_CMDLINE_PARTITION=y +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CRAMFS=m +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC=m +CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +# CONFIG_DEBUG_ALIGN_RODATA is not set +CONFIG_DECNET=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_DMADEVICES=y +# CONFIG_DMA_CMA is not set +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_VIRTUAL_CHANNELS=y +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DNET=m +CONFIG_DRM=m +CONFIG_DUMMY_IRQ=m +CONFIG_DW_WATCHDOG=m +CONFIG_ECHO=m +CONFIG_EEPROM_93CX6=m +CONFIG_EFI=y +CONFIG_EFI_CAPSULE_LOADER=m +# CONFIG_EFI_DEV_PATH_PARSER is not set +CONFIG_EFS_FS=m +# CONFIG_EM_TIMER_STI is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ETHOC=m +# CONFIG_EVM_LOAD_X509 is not set +CONFIG_EXOFS_FS=m +CONFIG_EXTCON=y +CONFIG_F2FS_FS=m +CONFIG_FB=y +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIXED_PHY=y +CONFIG_FMC=m +# CONFIG_FONTS is not set +CONFIG_FORCE_MAX_ZONEORDER=13 +CONFIG_FRAME_WARN=1024 +CONFIG_FUSION=y +CONFIG_GAMEPORT=m +CONFIG_GENERIC_CSUM=y +CONFIG_GENERIC_PHY=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_TWL6040=m +# CONFIG_HAVE_AOUT is not set +CONFIG_HAVE_ARCH_BITREVERSE=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +# CONFIG_HIBERNATION is not set +# CONFIG_HIO is not set +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_SHPC=m +# CONFIG_HPET is not set +CONFIG_HPFS_FS=m +CONFIG_HP_ILO=m +CONFIG_HSI=m +CONFIG_HSR=m +CONFIG_HTC_PASIC3=m +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HWSPINLOCK=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +# CONFIG_HYPERV_TSCPAGE is not set +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +CONFIG_I2C=y +# CONFIG_I2C_EMEV2 is not set +CONFIG_I2C_IMX=m +CONFIG_I2C_SLAVE=y +CONFIG_I6300ESB_WDT=m +CONFIG_IEEE802154=m +CONFIG_IIO=m +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_NES=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_QIB=m +CONFIG_INPUT=y +CONFIG_IOMMU_IOVA=y +CONFIG_IPACK_BUS=m +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMMU_VMSA is not set +CONFIG_IPX=m +# CONFIG_IP_DCCP_CCID3 is not set +CONFIG_IRQ_BYPASS_MANAGER=y +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +# CONFIG_ISA_BUS_API is not set +CONFIG_JFS_FS=m +CONFIG_JME=m +CONFIG_JUMP_LABEL=y +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +CONFIG_KARMA_PARTITION=y +CONFIG_KVM=y +CONFIG_LAPB=m +# CONFIG_LATENCYTOP is not set +CONFIG_LDM_PARTITION=y +CONFIG_LIBNVDIMM=y +CONFIG_LLC2=m +# CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT is not set +# CONFIG_LOCK_DOWN_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MAC_PARTITION=y +CONFIG_MAILBOX=y +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MCB=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MDIO_BUS_MUX=y +CONFIG_MDIO_THUNDER=m +CONFIG_MD_MULTIPATH=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY=y +CONFIG_MEMSTICK=m +CONFIG_MFD_CORE=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_TPS65217=m +CONFIG_MII=y +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MTD=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CMDLINE_PARTS=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set +CONFIG_MTD_OF_PARTS=m +CONFIG_NCP_FS=m +CONFIG_NET_CADENCE=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFP=m +CONFIG_NODES_SHIFT=6 +CONFIG_NOP_USB_XCEIV=m +CONFIG_NOZOMI=m +CONFIG_NR_CPUS=256 +CONFIG_NTB=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_NVMEM=y +CONFIG_N_GSM=m +CONFIG_OF=y +CONFIG_OMFS_FS=m +CONFIG_OSF_PARTITION=y +# CONFIG_PAGE_EXTENSION is not set +CONFIG_PANIC_TIMEOUT=0 +CONFIG_PARAVIRT=y +CONFIG_PARPORT=m +CONFIG_PATA_SIS=m +CONFIG_PC104=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_LAYERSCAPE=y +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PHY_EXYNOS5250_USB2 is not set +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PINCTRL=y +# CONFIG_PINCTRL_BERLIN_BG2 is not set +# CONFIG_PINCTRL_BERLIN_BG2CD is not set +# CONFIG_PINCTRL_BERLIN_BG2Q is not set +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_POWERCAP=y +CONFIG_POWER_AVS=y +CONFIG_POWER_SUPPLY=y +CONFIG_PPP=y +CONFIG_PPS=m +CONFIG_PPS_CLIENT_GPIO=m +CONFIG_PPS_CLIENT_LDISC=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PTP_1588_CLOCK=m +CONFIG_PWM=y +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +CONFIG_R3964=m +CONFIG_RAW_DRIVER=m +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_REED_SOLOMON=m +CONFIG_REFCOUNT_FULL=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_TPS65217=m +CONFIG_REGULATOR_TWL4030=m +CONFIG_REISERFS_FS=m +CONFIG_RESET_BERLIN=y +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_IMX7 is not set +# CONFIG_RESET_MESON is not set +CONFIG_RESET_SIMPLE=y +CONFIG_RESET_SUNXI=y +CONFIG_RFKILL=y +CONFIG_ROMFS_FS=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PL031=m +CONFIG_RTC_DRV_TWL4030=m +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_SCHED_SMT=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SNIC=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_WD719X=m +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_8250_FINTEK=y +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_MCTRL_GPIO=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIO=y +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +# CONFIG_SG_SPLIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +CONFIG_SLIP=m +CONFIG_SMC91X=y +CONFIG_SND=m +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_EMU10K1_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_IMX_AUDMUX=m +# CONFIG_SND_SOC_RT5677_SPI is not set +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_TIMER=m +CONFIG_SOC_BRCMSTB=y +CONFIG_SOC_TI=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOUND=m +CONFIG_SPI=y +CONFIG_SPI_PXA2XX_PCI=m +CONFIG_SPI_ROCKCHIP=m +CONFIG_SPMI=m +CONFIG_SRAM=y +CONFIG_SSB=m +CONFIG_STAGING=y +CONFIG_STANDALONE=y +CONFIG_SUNXI_SRAM=y +CONFIG_SUN_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSV_FS=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_THERMAL=y +CONFIG_TIFM_CORE=m +CONFIG_TI_CPSW_ALE=m +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TRACE_SINK=m +CONFIG_TTY_PRINTK=y +CONFIG_UFS_FS=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_EHCI_HCD_PLATFORM=m +CONFIG_USB_EMXX=m +CONFIG_USB_GADGET=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_OHCI_HCD_PLATFORM=m +CONFIG_USB_SUPPORT=y +CONFIG_UWB=m +CONFIG_VFIO=m +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO_PCI=m +CONFIG_VFIO_VIRQFD=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO_MMIO=y +CONFIG_VME_BUS=y +CONFIG_VMXNET3=m +CONFIG_VXFS_FS=m +CONFIG_W1=m +CONFIG_WAN=y +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_X25=m +CONFIG_XEN=y +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_ZLIB_DEFLATE=y --- linux-aws-4.15.0.orig/debian.master/config/arm64/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/arm64/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.master/config/armhf/config.common.armhf +++ linux-aws-4.15.0/debian.master/config/armhf/config.common.armhf @@ -0,0 +1,505 @@ +# +# Config options for config.common.armhf automatically generated by splitconfig.pl +# +CONFIG_6LOWPAN=m +CONFIG_ABX500_CORE=y +CONFIG_AC97_BUS=y +CONFIG_ADFS_FS=m +CONFIG_AFFS_FS=m +CONFIG_AIX_PARTITION=y +CONFIG_ALIM7101_WDT=m +CONFIG_ALTERA_TSE=m +# CONFIG_AMD_XGBE_HAVE_ECC is not set +CONFIG_AMIGA_PARTITION=y +CONFIG_APPLICOM=m +CONFIG_ARCH_ALPINE=y +CONFIG_ARCH_EXYNOS=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_ARCH_MESON=y +CONFIG_ARCH_MMAP_RND_BITS=8 +CONFIG_ARCH_MMAP_RND_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_BITS_MIN=8 +CONFIG_ARCH_MVEBU=y +CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y +CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y +CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y +CONFIG_ARCH_ROCKCHIP=y +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SUNXI is not set +CONFIG_ARCH_UNIPHIER=y +# CONFIG_ARCH_WANTS_THP_SWAP is not set +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCNET=m +CONFIG_ARM_GIC_V3_ITS=y +# CONFIG_ARM_SMMU is not set +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_GENERIC=m +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=m +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BATMAN_ADV=m +CONFIG_BCH=y +CONFIG_BCMA=m +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BE2ISCSI=m +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RSXX=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BOUNCE=y +CONFIG_BSD_DISKLABEL=y +CONFIG_C2PORT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +CONFIG_CAN=m +CONFIG_CB710_CORE=m +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CHASH=m +CONFIG_CMDLINE="" +CONFIG_CMDLINE_PARTITION=y +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CRAMFS=m +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +CONFIG_DEBUG_ALIGN_RODATA=y +CONFIG_DECNET=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +CONFIG_DMADEVICES=y +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_VIRTUAL_CHANNELS=y +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DNET=m +CONFIG_DRM=m +CONFIG_DUMMY_IRQ=m +CONFIG_DW_WATCHDOG=m +CONFIG_ECHO=m +CONFIG_EEPROM_93CX6=m +# CONFIG_EFI is not set +CONFIG_EFS_FS=m +CONFIG_EM_TIMER_STI=y +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ETHOC=m +# CONFIG_EVM_LOAD_X509 is not set +CONFIG_EXOFS_FS=m +CONFIG_EXTCON=y +CONFIG_F2FS_FS=m +CONFIG_FB=y +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA=y +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIXED_PHY=y +CONFIG_FMC=m +CONFIG_FONTS=y +CONFIG_FRAME_WARN=1024 +CONFIG_FUSION=y +CONFIG_GAMEPORT=m +CONFIG_GENERIC_PHY=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_TWL4030=y +CONFIG_GPIO_TWL6040=y +# CONFIG_HAVE_AOUT is not set +CONFIG_HAVE_ARCH_BITREVERSE=y +# CONFIG_HAVE_ARCH_VMAP_STACK is not set +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATION=y +# CONFIG_HIO is not set +# CONFIG_HOTPLUG_PCI is not set +CONFIG_HPFS_FS=m +CONFIG_HP_ILO=m +CONFIG_HSI=m +CONFIG_HSR=m +CONFIG_HTC_PASIC3=m +CONFIG_HWMON=y +CONFIG_HWSPINLOCK=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +# CONFIG_HYPERV_TSCPAGE is not set +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +CONFIG_I2C=y +CONFIG_I2C_EMEV2=m +CONFIG_I2C_IMX=y +CONFIG_I2C_SLAVE=y +CONFIG_I6300ESB_WDT=m +CONFIG_IEEE802154=m +CONFIG_IIO=m +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_NES=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INPUT=y +CONFIG_IOMMU_IOVA=m +CONFIG_IPACK_BUS=m +CONFIG_IPMI_HANDLER=m +CONFIG_IPMMU_VMSA=y +CONFIG_IPX=m +# CONFIG_IP_DCCP_CCID3 is not set +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +# CONFIG_ISA_BUS_API is not set +CONFIG_JFS_FS=m +CONFIG_JME=m +# CONFIG_JUMP_LABEL is not set +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +CONFIG_KARMA_PARTITION=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_XZ is not set +CONFIG_KVM=y +CONFIG_LAPB=m +# CONFIG_LATENCYTOP is not set +CONFIG_LDM_PARTITION=y +CONFIG_LIBNVDIMM=y +CONFIG_LLC2=m +# CONFIG_LOCK_DOWN_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MAC_PARTITION=y +CONFIG_MAILBOX=y +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MCB=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MDIO_BUS_MUX=m +CONFIG_MD_MULTIPATH=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY=y +CONFIG_MEMSTICK=m +CONFIG_MFD_CORE=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SM501=y +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +CONFIG_MFD_TMIO=y +CONFIG_MFD_TPS65217=y +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MTD=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_BCH=y +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_OMAP_BCH_BUILD=y +CONFIG_MTD_OF_PARTS=y +CONFIG_NCP_FS=m +CONFIG_NET_CADENCE=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFP=m +CONFIG_NOP_USB_XCEIV=y +CONFIG_NOZOMI=m +CONFIG_NR_CPUS=4 +CONFIG_NTB=m +# CONFIG_NTFS_RW is not set +CONFIG_NVMEM=y +CONFIG_N_GSM=m +CONFIG_OF=y +CONFIG_OMFS_FS=m +CONFIG_OSF_PARTITION=y +CONFIG_PAGE_EXTENSION=y +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PANIC_TIMEOUT=0 +# CONFIG_PARAVIRT is not set +CONFIG_PARPORT=m +CONFIG_PATA_SIS=m +CONFIG_PC104=y +# CONFIG_PCCARD is not set +CONFIG_PCIEPORTBUS=y +CONFIG_PCIPCWATCHDOG=m +# CONFIG_PCI_LAYERSCAPE is not set +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHY_EXYNOS5250_USB2=y +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PINCTRL=y +CONFIG_PINCTRL_BERLIN_BG2=y +CONFIG_PINCTRL_BERLIN_BG2CD=y +CONFIG_PINCTRL_BERLIN_BG2Q=y +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_POWERCAP=y +CONFIG_POWER_AVS=y +CONFIG_POWER_SUPPLY=y +CONFIG_PPP=y +CONFIG_PPS=y +CONFIG_PPS_CLIENT_GPIO=m +CONFIG_PPS_CLIENT_LDISC=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PSTORE=y +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_RAM=y +CONFIG_PTP_1588_CLOCK=y +CONFIG_PWM=y +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +CONFIG_R3964=m +CONFIG_RAW_DRIVER=m +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_REED_SOLOMON=y +# CONFIG_REFCOUNT_FULL is not set +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_TPS65217=y +CONFIG_REISERFS_FS=m +CONFIG_RESET_BERLIN=y +CONFIG_RESET_CONTROLLER=y +CONFIG_RESET_MESON=y +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_SUNXI is not set +CONFIG_RFKILL=y +CONFIG_ROMFS_FS=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_TWL4030=y +CONFIG_SATA_AHCI_PLATFORM=y +# CONFIG_SCHED_SMT is not set +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SNIC=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_WD719X=m +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DW=m +# CONFIG_SERIAL_8250_FINTEK is not set +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIO=y +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +CONFIG_SG_SPLIT=y +CONFIG_SH_TIMER_CMT=y +CONFIG_SH_TIMER_MTU2=y +CONFIG_SH_TIMER_TMU=y +CONFIG_SLIP=m +CONFIG_SMC91X=m +CONFIG_SND=y +CONFIG_SND_COMPRESS_OFFLOAD=y +CONFIG_SND_DMAENGINE_PCM=y +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=y +CONFIG_SND_SOC=y +CONFIG_SND_SOC_I2C_AND_SPI=y +CONFIG_SND_TIMER=y +# CONFIG_SOC_BRCMSTB is not set +CONFIG_SOC_TI=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOUND=y +CONFIG_SPI=y +CONFIG_SPI_PXA2XX_PCI=m +CONFIG_SPI_ROCKCHIP=m +CONFIG_SPMI=m +CONFIG_SRAM=y +CONFIG_SSB=m +CONFIG_STAGING=y +CONFIG_STANDALONE=y +# CONFIG_SUNXI_SRAM is not set +CONFIG_SUN_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSV_FS=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_THERMAL=y +CONFIG_TIFM_CORE=m +CONFIG_TI_CPSW_ALE=y +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TRACE_SINK=m +CONFIG_TTY_PRINTK=y +CONFIG_UFS_FS=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB_DWC2_PCI=y +# CONFIG_USB_EHCI_HCD_PLATFORM is not set +CONFIG_USB_EMXX=y +CONFIG_USB_GADGET=y +CONFIG_USB_G_MULTI=m +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_SUPPORT=y +CONFIG_UWB=m +CONFIG_VFIO=m +# CONFIG_VFIO_IOMMU_TYPE1 is not set +CONFIG_VFIO_PCI=m +CONFIG_VFIO_VIRQFD=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO_MMIO=y +CONFIG_VME_BUS=y +CONFIG_VMXNET3=m +CONFIG_VXFS_FS=m +CONFIG_W1=m +CONFIG_WAN=y +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_X25=m +# CONFIG_XEN is not set +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_ZLIB_DEFLATE=y --- linux-aws-4.15.0.orig/debian.master/config/armhf/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/armhf/config.flavour.generic @@ -0,0 +1,33 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# +CONFIG_ARCH_MXC=y +CONFIG_ARCH_OMAP3=y +CONFIG_ARCH_OMAP4=y +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_ARCH_TEGRA=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +# CONFIG_ARM_HIGHBANK_CPUIDLE is not set +# CONFIG_ARM_LPAE is not set +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC=m +CONFIG_DMA_CMA=y +CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y +CONFIG_FORCE_MAX_ZONEORDER=12 +# CONFIG_HUGETLB_PAGE is not set +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_PGTABLE_LEVELS=2 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_PWM_TIECAP=m +CONFIG_PWM_TIEHRPWM=m +CONFIG_REGULATOR_TWL4030=y +CONFIG_RESET_IMX7=y +CONFIG_RTC_DRV_PCF8523=y +CONFIG_SERIAL_MCTRL_GPIO=y +CONFIG_SND_EDMA_SOC=m +# CONFIG_SND_EMU10K1_SEQ is not set +CONFIG_SND_SOC_FSL_SSI=y +CONFIG_SND_SOC_IMX_AUDMUX=y +CONFIG_SND_SOC_RT5677_SPI=m +CONFIG_SND_SOC_SGTL5000=y +CONFIG_SOC_AM33XX=y +CONFIG_USB_OHCI_HCD_PLATFORM=m --- linux-aws-4.15.0.orig/debian.master/config/armhf/config.flavour.generic-lpae +++ linux-aws-4.15.0/debian.master/config/armhf/config.flavour.generic-lpae @@ -0,0 +1,33 @@ +# +# Config options for config.flavour.generic-lpae automatically generated by splitconfig.pl +# +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_OMAP3 is not set +# CONFIG_ARCH_OMAP4 is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARM_ATAG_DTB_COMPAT is not set +CONFIG_ARM_HIGHBANK_CPUIDLE=y +CONFIG_ARM_LPAE=y +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +# CONFIG_DMA_CMA is not set +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FORCE_MAX_ZONEORDER=11 +CONFIG_HUGETLB_PAGE=y +CONFIG_IRQ_BYPASS_MANAGER=y +CONFIG_PGTABLE_LEVELS=3 +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PWM_TIECAP is not set +# CONFIG_PWM_TIEHRPWM is not set +CONFIG_REGULATOR_TWL4030=m +# CONFIG_RESET_IMX7 is not set +CONFIG_RTC_DRV_PCF8523=m +CONFIG_SERIAL_MCTRL_GPIO=m +# CONFIG_SND_EDMA_SOC is not set +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_IMX_AUDMUX=m +# CONFIG_SND_SOC_RT5677_SPI is not set +CONFIG_SND_SOC_SGTL5000=m +# CONFIG_SOC_AM33XX is not set +# CONFIG_USB_OHCI_HCD_PLATFORM is not set --- linux-aws-4.15.0.orig/debian.master/config/config.common.ports +++ linux-aws-4.15.0/debian.master/config/config.common.ports @@ -0,0 +1,3 @@ +# +# Common config options automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.master/config/config.common.ubuntu +++ linux-aws-4.15.0/debian.master/config/config.common.ubuntu @@ -0,0 +1,10495 @@ +# +# Common config options automatically generated by splitconfig.pl +# +CONFIG_104_QUAD_8=m +CONFIG_3C515=m +CONFIG_60XX_WDT=m +# CONFIG_6LOWPAN_DEBUGFS is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_DEST is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_HOP is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE is not set +# CONFIG_6LOWPAN_GHC_ICMPV6 is not set +# CONFIG_6LOWPAN_GHC_UDP is not set +CONFIG_6LOWPAN_NHC=m +CONFIG_6LOWPAN_NHC_DEST=m +CONFIG_6LOWPAN_NHC_FRAGMENT=m +CONFIG_6LOWPAN_NHC_HOP=m +CONFIG_6LOWPAN_NHC_IPV6=m +CONFIG_6LOWPAN_NHC_MOBILITY=m +CONFIG_6LOWPAN_NHC_ROUTING=m +CONFIG_6LOWPAN_NHC_UDP=m +CONFIG_6PACK=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_8129=y +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_842_COMPRESS=m +CONFIG_842_DECOMPRESS=m +CONFIG_88EU_AP_MODE=y +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_9P_FS_SECURITY=y +CONFIG_AB3100_CORE=y +CONFIG_AB3100_OTP=m +CONFIG_ABP060MG=m +# CONFIG_ACCESSIBILITY is not set +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_ACERHDF=m +CONFIG_ACER_WMI=m +# CONFIG_ACORN_PARTITION is not set +CONFIG_ACPI=y +CONFIG_ACPI_AC=y +CONFIG_ACPI_ALS=m +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_EINJ=m +# CONFIG_ACPI_APEI_ERST_DEBUG is not set +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_SEA=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BGRT=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_CCA_REQUIRED=y +CONFIG_ACPI_CMPC=m +CONFIG_ACPI_CONFIGFS=m +CONFIG_ACPI_CONTAINER=y +CONFIG_ACPI_CPPC_CPUFREQ=m +CONFIG_ACPI_CPPC_LIB=y +CONFIG_ACPI_CPU_FREQ_PSS=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_CUSTOM_DSDT_FILE="" +# CONFIG_ACPI_CUSTOM_METHOD is not set +CONFIG_ACPI_DEBUGGER_USER=y +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_EC_DEBUGFS=m +CONFIG_ACPI_EXTLOG=m +CONFIG_ACPI_FAN=y +CONFIG_ACPI_GENERIC_GSI=y +CONFIG_ACPI_GTDT=y +CONFIG_ACPI_HED=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_HOTPLUG_IOAPIC=y +CONFIG_ACPI_HOTPLUG_MEMORY=y +CONFIG_ACPI_I2C_OPREGION=y +CONFIG_ACPI_IORT=y +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ACPI_LPIT=y +CONFIG_ACPI_MCFG=y +CONFIG_ACPI_NFIT=m +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_PCI_SLOT=y +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_PROCESSOR_CSTATE=y +CONFIG_ACPI_PROCESSOR_IDLE=y +# CONFIG_ACPI_PROCFS_POWER is not set +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y +CONFIG_ACPI_SBS=m +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_SPCR_TABLE=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_THERMAL_REL=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_WATCHDOG=y +CONFIG_ACPI_WMI=m +CONFIG_ACQUIRE_WDT=m +CONFIG_ACT200L_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_AD2S1200=m +CONFIG_AD2S1210=m +CONFIG_AD2S90=m +CONFIG_AD5064=m +CONFIG_AD525X_DPOT=m +CONFIG_AD525X_DPOT_I2C=m +CONFIG_AD525X_DPOT_SPI=m +CONFIG_AD5360=m +CONFIG_AD5380=m +CONFIG_AD5421=m +CONFIG_AD5446=m +CONFIG_AD5449=m +CONFIG_AD5504=m +CONFIG_AD5592R=m +CONFIG_AD5592R_BASE=m +CONFIG_AD5593R=m +CONFIG_AD5624R_SPI=m +CONFIG_AD5686=m +CONFIG_AD5755=m +CONFIG_AD5761=m +CONFIG_AD5764=m +CONFIG_AD5791=m +CONFIG_AD5933=m +CONFIG_AD7150=m +CONFIG_AD7152=m +CONFIG_AD7192=m +CONFIG_AD7266=m +CONFIG_AD7280=m +CONFIG_AD7291=m +CONFIG_AD7298=m +CONFIG_AD7303=m +CONFIG_AD7476=m +CONFIG_AD7606=m +CONFIG_AD7606_IFACE_PARALLEL=m +CONFIG_AD7606_IFACE_SPI=m +CONFIG_AD7746=m +CONFIG_AD7766=m +CONFIG_AD7780=m +CONFIG_AD7791=m +CONFIG_AD7793=m +CONFIG_AD7816=m +CONFIG_AD7887=m +CONFIG_AD7923=m +CONFIG_AD799X=m +CONFIG_AD8366=m +CONFIG_AD8801=m +CONFIG_AD9523=m +CONFIG_AD9832=m +CONFIG_AD9834=m +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADE7753=m +CONFIG_ADE7754=m +CONFIG_ADE7758=m +CONFIG_ADE7759=m +CONFIG_ADE7854=m +CONFIG_ADE7854_I2C=m +CONFIG_ADE7854_SPI=m +CONFIG_ADF4350=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_ADIS16060=m +CONFIG_ADIS16080=m +CONFIG_ADIS16130=m +CONFIG_ADIS16136=m +CONFIG_ADIS16201=m +CONFIG_ADIS16203=m +CONFIG_ADIS16209=m +CONFIG_ADIS16240=m +CONFIG_ADIS16260=m +CONFIG_ADIS16400=m +CONFIG_ADIS16480=m +CONFIG_ADJD_S311=m +CONFIG_ADM8211=m +CONFIG_ADT7316=m +CONFIG_ADT7316_I2C=m +CONFIG_ADT7316_SPI=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ADVISE_SYSCALLS=y +CONFIG_ADXRS450=m +CONFIG_AD_SIGMA_DELTA=m +CONFIG_AEABI=y +CONFIG_AFE4403=m +CONFIG_AFE4404=m +CONFIG_AFIUCV=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FS=m +CONFIG_AFS_FSCACHE=y +CONFIG_AF_KCM=m +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +# CONFIG_AF_RXRPC_INJECT_LOSS is not set +CONFIG_AF_RXRPC_IPV6=y +CONFIG_AGP=y +CONFIG_AGP_ALI=m +CONFIG_AGP_AMD=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_ATI=m +CONFIG_AGP_EFFICEON=m +CONFIG_AGP_INTEL=y +CONFIG_AGP_NVIDIA=y +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=y +CONFIG_AHCI_BRCM=m +CONFIG_AHCI_CEVA=m +CONFIG_AHCI_DM816=m +CONFIG_AHCI_IMX=y +CONFIG_AHCI_MTK=m +CONFIG_AHCI_MVEBU=m +CONFIG_AHCI_QORIQ=m +# CONFIG_AHCI_SUNXI is not set +CONFIG_AHCI_TEGRA=m +CONFIG_AHCI_XGENE=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_AIM_CDEV=m +CONFIG_AIM_NETWORK=m +CONFIG_AIM_SOUND=m +CONFIG_AIM_V4L2=m +CONFIG_AIO=y +CONFIG_AIRO=m +CONFIG_AIRO_CS=m +CONFIG_AK09911=m +CONFIG_AK8974=m +CONFIG_AK8975=m +CONFIG_AL3320A=m +CONFIG_ALIENWARE_WMI=m +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIM1535_WDT=m +CONFIG_ALIX=y +CONFIG_ALI_FIR=m +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y +CONFIG_ALPINE_MSI=y +CONFIG_ALTERA_MBOX=m +CONFIG_ALTERA_MSGDMA=m +CONFIG_ALTERA_PR_IP_CORE=m +CONFIG_ALTERA_PR_IP_CORE_PLAT=m +CONFIG_ALTERA_STAPL=m +CONFIG_ALTIVEC=y +CONFIG_ALX=m +CONFIG_AM2315=m +CONFIG_AM335X_CONTROL_USB=m +CONFIG_AM335X_PHY_USB=m +CONFIG_AMBA_PL08X=y +CONFIG_AMD8111_ETH=m +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_V2=m +CONFIG_AMD_MEM_ENCRYPT=y +# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set +CONFIG_AMD_NB=y +CONFIG_AMD_NUMA=y +CONFIG_AMD_PHY=m +CONFIG_AMD_XGBE=m +CONFIG_AMD_XGBE_DCB=y +CONFIG_AMILO_RFKILL=m +# CONFIG_ANDROID is not set +CONFIG_ANON_INODES=y +CONFIG_APB_TIMER=y +CONFIG_APDS9300=m +CONFIG_APDS9802ALS=m +CONFIG_APDS9960=m +CONFIG_APM=m +# CONFIG_APM_ALLOW_INTS is not set +# CONFIG_APM_CPU_IDLE is not set +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_DO_ENABLE is not set +# CONFIG_APM_EMULATION is not set +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +CONFIG_APPLDATA_BASE=y +CONFIG_APPLDATA_MEM=m +CONFIG_APPLDATA_NET_SUM=m +CONFIG_APPLDATA_OS=m +CONFIG_APPLE_GMUX=m +CONFIG_APPLE_PROPERTIES=y +CONFIG_APQ_GCC_8084=m +CONFIG_APQ_MMCC_8084=m +CONFIG_AQTION=m +CONFIG_AQUANTIA_PHY=m +CONFIG_AR5523=m +CONFIG_ARCH_ACTIONS=y +CONFIG_ARCH_ARTPEC=y +# CONFIG_ARCH_AT91 is not set +CONFIG_ARCH_AXXIA=y +# CONFIG_ARCH_BCM is not set +CONFIG_ARCH_BCM2835=y +CONFIG_ARCH_BCM_IPROC=y +CONFIG_ARCH_BERLIN=y +CONFIG_ARCH_BINFMT_ELF_STATE=y +CONFIG_ARCH_BRCMSTB=y +CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_ARCH_CPU_PROBE_RELEASE=y +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_DIGICOLOR is not set +CONFIG_ARCH_DISCARD_MEMBLOCK=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +# CONFIG_ARCH_DOVE is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_EMEV2=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_EXYNOS3 is not set +# CONFIG_ARCH_EXYNOS4 is not set +CONFIG_ARCH_EXYNOS5=y +CONFIG_ARCH_FLATMEM_ENABLE=y +# CONFIG_ARCH_FOOTBRIDGE is not set +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ARCH_HAS_ADD_PAGES=y +CONFIG_ARCH_HAS_BANDGAP=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y +CONFIG_ARCH_HAS_DMA_SET_COHERENT_MASK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_ARCH_HAS_HMM=y +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_HAS_KCOV=y +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_ARCH_HAS_PKEYS=y +CONFIG_ARCH_HAS_PMEM_API=y +CONFIG_ARCH_HAS_REFCOUNT=y +CONFIG_ARCH_HAS_RESET_CONTROLLER=y +CONFIG_ARCH_HAS_SCALED_CPUTIME=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SG_CHAIN=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y +CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_WALK_MEMORY=y +CONFIG_ARCH_HAS_ZONE_DEVICE=y +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HI3xxx=y +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_HIGHBANK=y +# CONFIG_ARCH_HIP01 is not set +CONFIG_ARCH_HIP04=y +CONFIG_ARCH_HISI=y +CONFIG_ARCH_HIX5HD2=y +CONFIG_ARCH_INLINE_READ_LOCK=y +CONFIG_ARCH_INLINE_READ_LOCK_BH=y +CONFIG_ARCH_INLINE_READ_LOCK_IRQ=y +CONFIG_ARCH_INLINE_READ_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_READ_TRYLOCK=y +CONFIG_ARCH_INLINE_READ_UNLOCK=y +CONFIG_ARCH_INLINE_READ_UNLOCK_BH=y +CONFIG_ARCH_INLINE_READ_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_READ_UNLOCK_IRQRESTORE=y +CONFIG_ARCH_INLINE_SPIN_LOCK=y +CONFIG_ARCH_INLINE_SPIN_LOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_LOCK_IRQ=y +CONFIG_ARCH_INLINE_SPIN_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_SPIN_TRYLOCK=y +CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE=y +CONFIG_ARCH_INLINE_WRITE_LOCK=y +CONFIG_ARCH_INLINE_WRITE_LOCK_BH=y +CONFIG_ARCH_INLINE_WRITE_LOCK_IRQ=y +CONFIG_ARCH_INLINE_WRITE_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_WRITE_TRYLOCK=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_BH=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE=y +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_KEYSTONE is not set +# CONFIG_ARCH_KS8695 is not set +CONFIG_ARCH_LAYERSCAPE=y +CONFIG_ARCH_LG1K=y +# CONFIG_ARCH_LPC32XX is not set +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MDM9615=y +CONFIG_ARCH_MEDIATEK=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +# CONFIG_ARCH_MMP is not set +CONFIG_ARCH_MSM8960=y +CONFIG_ARCH_MSM8974=y +CONFIG_ARCH_MSM8X60=y +CONFIG_ARCH_MULTIPLATFORM=y +# CONFIG_ARCH_MULTI_CPU_AUTO is not set +# CONFIG_ARCH_MULTI_V6 is not set +CONFIG_ARCH_MULTI_V6_V7=y +CONFIG_ARCH_MULTI_V7=y +# CONFIG_ARCH_NETX is not set +CONFIG_ARCH_NR_GPIO=1024 +CONFIG_ARCH_OMAP=y +# CONFIG_ARCH_OMAP1 is not set +CONFIG_ARCH_OMAP2PLUS=y +CONFIG_ARCH_OMAP2PLUS_TYPICAL=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +# CONFIG_ARCH_PXA is not set +CONFIG_ARCH_QCOM=y +CONFIG_ARCH_R7S72100=y +# CONFIG_ARCH_R8A73A4 is not set +CONFIG_ARCH_R8A7740=y +CONFIG_ARCH_R8A7743=y +CONFIG_ARCH_R8A7745=y +CONFIG_ARCH_R8A7778=y +CONFIG_ARCH_R8A7779=y +CONFIG_ARCH_R8A7790=y +CONFIG_ARCH_R8A7791=y +CONFIG_ARCH_R8A7792=y +CONFIG_ARCH_R8A7793=y +CONFIG_ARCH_R8A7794=y +CONFIG_ARCH_R8A7795=y +CONFIG_ARCH_R8A7796=y +CONFIG_ARCH_R8A77970=y +CONFIG_ARCH_R8A77995=y +CONFIG_ARCH_RANDOM=y +CONFIG_ARCH_RCAR_GEN1=y +CONFIG_ARCH_RCAR_GEN2=y +CONFIG_ARCH_REALTEK=y +# CONFIG_ARCH_REALVIEW is not set +CONFIG_ARCH_RENESAS=y +CONFIG_ARCH_RMOBILE=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_S3C24XX is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_SAVE_PAGE_KEYS=y +CONFIG_ARCH_SEATTLE=y +CONFIG_ARCH_SH73A0=y +CONFIG_ARCH_SHMOBILE=y +# CONFIG_ARCH_SIRF is not set +# CONFIG_ARCH_SOCFPGA is not set +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPRD=y +# CONFIG_ARCH_STI is not set +CONFIG_ARCH_STRATIX10=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y +CONFIG_ARCH_SUPPORTS_FIRMWARE=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_TRUSTED_FOUNDATIONS=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_SYNQUACER=y +CONFIG_ARCH_TANGO=y +CONFIG_ARCH_TEGRA_114_SOC=y +CONFIG_ARCH_TEGRA_124_SOC=y +CONFIG_ARCH_TEGRA_2x_SOC=y +CONFIG_ARCH_TEGRA_3x_SOC=y +CONFIG_ARCH_THUNDER=y +CONFIG_ARCH_THUNDER2=y +# CONFIG_ARCH_U8500 is not set +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_ARCH_VEXPRESS=y +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y +CONFIG_ARCH_VEXPRESS_DCSCB=y +CONFIG_ARCH_VEXPRESS_SPC=y +CONFIG_ARCH_VEXPRESS_TC2_PM=y +CONFIG_ARCH_VIRT=y +# CONFIG_ARCH_VULCAN is not set +# CONFIG_ARCH_W90X900 is not set +CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y +# CONFIG_ARCH_WM8850 is not set +CONFIG_ARCH_XGENE=y +# CONFIG_ARCH_ZX is not set +# CONFIG_ARCH_ZYNQ is not set +CONFIG_ARCH_ZYNQMP=y +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_CS=m +CONFIG_ARCNET_COM20020_ISA=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARC_EMAC_CORE=m +CONFIG_ARM=y +CONFIG_ARM64=y +# CONFIG_ARM64_16K_PAGES is not set +CONFIG_ARM64_4K_PAGES=y +# CONFIG_ARM64_64K_PAGES is not set +CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y +CONFIG_ARM64_CONT_SHIFT=4 +CONFIG_ARM64_CRYPTO=y +CONFIG_ARM64_ERRATUM_819472=y +CONFIG_ARM64_ERRATUM_824069=y +CONFIG_ARM64_ERRATUM_826319=y +CONFIG_ARM64_ERRATUM_827319=y +CONFIG_ARM64_ERRATUM_832075=y +CONFIG_ARM64_ERRATUM_834220=y +CONFIG_ARM64_ERRATUM_843419=y +CONFIG_ARM64_ERRATUM_845719=y +CONFIG_ARM64_ERRATUM_858921=y +CONFIG_ARM64_HW_AFDBM=y +CONFIG_ARM64_LSE_ATOMICS=y +CONFIG_ARM64_MODULE_CMODEL_LARGE=y +CONFIG_ARM64_MODULE_PLTS=y +CONFIG_ARM64_PAGE_SHIFT=12 +CONFIG_ARM64_PAN=y +CONFIG_ARM64_PMEM=y +CONFIG_ARM64_PTDUMP_CORE=y +# CONFIG_ARM64_PTDUMP_DEBUGFS is not set +# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set +# CONFIG_ARM64_RELOC_TEST is not set +CONFIG_ARM64_SVE=y +CONFIG_ARM64_SW_TTBR0_PAN=y +CONFIG_ARM64_UAO=y +CONFIG_ARM64_VA_BITS=48 +# CONFIG_ARM64_VA_BITS_39 is not set +CONFIG_ARM64_VA_BITS_48=y +CONFIG_ARM64_VHE=y +CONFIG_ARMADA375_USBCLUSTER_PHY=y +CONFIG_ARMADA_370_CLK=y +CONFIG_ARMADA_370_XP_IRQ=y +CONFIG_ARMADA_370_XP_TIMER=y +CONFIG_ARMADA_375_CLK=y +CONFIG_ARMADA_38X_CLK=y +CONFIG_ARMADA_39X_CLK=y +CONFIG_ARMADA_THERMAL=y +CONFIG_ARMADA_XP_CLK=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_ARM_AMBA=y +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +CONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=y +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=y +# CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER is not set +CONFIG_ARM_BIG_LITTLE_CPUFREQ=m +CONFIG_ARM_BIG_LITTLE_CPUIDLE=y +CONFIG_ARM_BRCMSTB_AVS_CPUFREQ=m +# CONFIG_ARM_BRCMSTB_AVS_CPUFREQ_DEBUG is not set +CONFIG_ARM_CCI=y +CONFIG_ARM_CCI400_COMMON=y +CONFIG_ARM_CCI400_PMU=y +CONFIG_ARM_CCI400_PORT_CTRL=y +CONFIG_ARM_CCI5xx_PMU=y +CONFIG_ARM_CCI_PMU=y +CONFIG_ARM_CCN=y +CONFIG_ARM_CHARLCD=y +CONFIG_ARM_CPUIDLE=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_ARM_CPU_TOPOLOGY=y +CONFIG_ARM_CRYPTO=y +CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_DMA_USE_IOMMU=y +CONFIG_ARM_DT_BL_CPUFREQ=m +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_643719=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_ARM_ERRATA_754327=y +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_773022=y +CONFIG_ARM_ERRATA_775420=y +CONFIG_ARM_ERRATA_798181=y +CONFIG_ARM_ERRATA_818325_852422=y +CONFIG_ARM_ERRATA_821420=y +CONFIG_ARM_ERRATA_825619=y +CONFIG_ARM_ERRATA_852421=y +CONFIG_ARM_ERRATA_852423=y +# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set +CONFIG_ARM_EXYNOS_BUS_DEVFREQ=y +CONFIG_ARM_EXYNOS_CPUIDLE=y +CONFIG_ARM_GIC=y +CONFIG_ARM_GIC_MAX_NR=1 +CONFIG_ARM_GIC_V2M=y +CONFIG_ARM_GIC_V3=y +CONFIG_ARM_GIC_V3_ITS_PCI=y +CONFIG_ARM_GLOBAL_TIMER=y +CONFIG_ARM_HAS_SG_CHAIN=y +CONFIG_ARM_HEAVY_MB=y +CONFIG_ARM_HIGHBANK_CPUFREQ=m +CONFIG_ARM_IMX6Q_CPUFREQ=m +# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set +CONFIG_ARM_KPROBES_TEST=m +CONFIG_ARM_L1_CACHE_SHIFT=7 +CONFIG_ARM_L1_CACHE_SHIFT_6=y +CONFIG_ARM_L1_CACHE_SHIFT_7=y +CONFIG_ARM_MEDIATEK_CPUFREQ=m +CONFIG_ARM_MHU=m +# CONFIG_ARM_MODULE_PLTS is not set +CONFIG_ARM_MVEBU_V7_CPUIDLE=y +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +CONFIG_ARM_PATCH_IDIV=y +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_ARM_PL172_MPMC=m +CONFIG_ARM_PMU=y +CONFIG_ARM_PMU_ACPI=y +CONFIG_ARM_PSCI=y +# CONFIG_ARM_PSCI_CHECKER is not set +CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PTDUMP is not set +CONFIG_ARM_RK3399_DMC_DEVFREQ=m +CONFIG_ARM_SBSA_WATCHDOG=m +CONFIG_ARM_SCPI_CPUFREQ=m +CONFIG_ARM_SCPI_POWER_DOMAIN=m +CONFIG_ARM_SCPI_PROTOCOL=m +CONFIG_ARM_SMMU_V3=y +CONFIG_ARM_SP805_WATCHDOG=m +CONFIG_ARM_SPE_PMU=m +CONFIG_ARM_TANGO_CPUFREQ=y +CONFIG_ARM_TEGRA124_CPUFREQ=m +CONFIG_ARM_TEGRA20_CPUFREQ=y +CONFIG_ARM_TEGRA_DEVFREQ=m +CONFIG_ARM_THUMB=y +CONFIG_ARM_THUMBEE=y +CONFIG_ARM_TIMER_SP804=y +CONFIG_ARM_TI_CPUFREQ=y +CONFIG_ARM_UNWIND=y +CONFIG_ARM_VEXPRESS_SPC_CPUFREQ=m +CONFIG_ARM_VIRT_EXT=y +CONFIG_AS3935=m +CONFIG_ASN1=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_ASUS_LAPTOP=m +CONFIG_ASUS_NB_WMI=m +CONFIG_ASUS_WIRELESS=m +CONFIG_ASUS_WMI=m +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +# CONFIG_ASYNC_RAID6_TEST is not set +CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y +CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y +CONFIG_ASYNC_TX_DMA=y +CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y +CONFIG_ASYNC_XOR=m +CONFIG_AT76C50X_USB=m +CONFIG_AT803X_PHY=m +CONFIG_ATAGS=y +CONFIG_ATAGS_PROC=y +CONFIG_ATA_ACPI=y +CONFIG_ATA_BMDMA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_SFF=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATH10K=m +CONFIG_ATH10K_AHB=y +# CONFIG_ATH10K_DEBUG is not set +CONFIG_ATH10K_DEBUGFS=y +CONFIG_ATH10K_PCI=m +CONFIG_ATH10K_SDIO=m +CONFIG_ATH10K_TRACING=y +CONFIG_ATH10K_USB=m +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +CONFIG_ATH5K_PCI=y +# CONFIG_ATH5K_TRACER is not set +CONFIG_ATH6KL=m +# CONFIG_ATH6KL_DEBUG is not set +CONFIG_ATH6KL_SDIO=m +# CONFIG_ATH6KL_TRACING is not set +CONFIG_ATH6KL_USB=m +CONFIG_ATH9K=m +CONFIG_ATH9K_AHB=y +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K_CHANNEL_CONTEXT=y +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_COMMON_DEBUG=y +CONFIG_ATH9K_DEBUGFS=y +# CONFIG_ATH9K_DYNACK is not set +CONFIG_ATH9K_HTC=m +CONFIG_ATH9K_HTC_DEBUGFS=y +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_HWRNG=y +CONFIG_ATH9K_PCI=y +CONFIG_ATH9K_PCOEM=y +CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_STATION_STATISTICS=y +CONFIG_ATH9K_WOW=y +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set +CONFIG_ATL1=m +CONFIG_ATL1C=m +CONFIG_ATL1E=m +CONFIG_ATL2=m +CONFIG_ATLAS_PH_SENSOR=m +CONFIG_ATMEL=m +# CONFIG_ATMEL_PIT is not set +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_DUMMY=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_FORE200E_TX_RETRY=16 +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_LANAI=m +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +CONFIG_ATM_SOLOS=m +CONFIG_ATM_TCP=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +CONFIG_ATP=m +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_ARCH=y +CONFIG_AUDIT_COMPAT_GENERIC=y +CONFIG_AUDIT_GENERIC=y +CONFIG_AUDIT_TREE=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUFS_BDEV_LOOP=y +# CONFIG_AUFS_BRANCH_MAX_1023 is not set +CONFIG_AUFS_BRANCH_MAX_127=y +# CONFIG_AUFS_BRANCH_MAX_32767 is not set +# CONFIG_AUFS_BRANCH_MAX_511 is not set +# CONFIG_AUFS_BR_FUSE is not set +CONFIG_AUFS_BR_HFSPLUS=y +# CONFIG_AUFS_BR_RAMFS is not set +# CONFIG_AUFS_DEBUG is not set +CONFIG_AUFS_DIRREN=y +CONFIG_AUFS_EXPORT=y +# CONFIG_AUFS_FHSM is not set +CONFIG_AUFS_FS=m +# CONFIG_AUFS_HNOTIFY is not set +CONFIG_AUFS_INO_T_64=y +# CONFIG_AUFS_RDU is not set +CONFIG_AUFS_SBILIST=y +# CONFIG_AUFS_SHWH is not set +CONFIG_AUFS_XATTR=y +CONFIG_AURORA_NB8800=m +CONFIG_AUTO_ZRELADDR=y +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_AX88796=m +# CONFIG_AX88796_93CX6 is not set +CONFIG_AXP20X_ADC=m +CONFIG_AXP20X_POWER=m +CONFIG_AXP288_ADC=m +CONFIG_AXP288_CHARGER=m +CONFIG_AXP288_FUEL_GAUGE=m +CONFIG_B43=m +CONFIG_B43LEGACY=m +# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_PIO=y +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_B43_BCMA=y +CONFIG_B43_BCMA_PIO=y +# CONFIG_B43_BUSES_BCMA is not set +CONFIG_B43_BUSES_BCMA_AND_SSB=y +# CONFIG_B43_BUSES_SSB is not set +# CONFIG_B43_DEBUG is not set +CONFIG_B43_HWRNG=y +CONFIG_B43_LEDS=y +CONFIG_B43_PHY_G=y +CONFIG_B43_PHY_HT=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PIO=y +# CONFIG_B43_SDIO is not set +CONFIG_B43_SSB=y +CONFIG_B44=m +CONFIG_B53=m +CONFIG_B53_MDIO_DRIVER=m +CONFIG_B53_MMAP_DRIVER=m +CONFIG_B53_SPI_DRIVER=m +CONFIG_B53_SRAB_DRIVER=m +CONFIG_BACKLIGHT_88PM860X=m +CONFIG_BACKLIGHT_AAT2870=m +CONFIG_BACKLIGHT_ADP5520=m +CONFIG_BACKLIGHT_ADP8860=m +CONFIG_BACKLIGHT_ADP8870=m +CONFIG_BACKLIGHT_APPLE=m +CONFIG_BACKLIGHT_ARCXCNN=m +CONFIG_BACKLIGHT_AS3711=m +CONFIG_BACKLIGHT_BD6107=m +CONFIG_BACKLIGHT_CARILLO_RANCH=m +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DA903X=m +CONFIG_BACKLIGHT_DA9052=m +CONFIG_BACKLIGHT_GENERIC=m +CONFIG_BACKLIGHT_GPIO=m +CONFIG_BACKLIGHT_LM3533=m +CONFIG_BACKLIGHT_LM3630A=m +CONFIG_BACKLIGHT_LM3639=m +CONFIG_BACKLIGHT_LP855X=m +CONFIG_BACKLIGHT_LP8788=m +CONFIG_BACKLIGHT_LV5207LP=m +CONFIG_BACKLIGHT_MAX8925=m +CONFIG_BACKLIGHT_PANDORA=m +CONFIG_BACKLIGHT_PCF50633=m +CONFIG_BACKLIGHT_PM8941_WLED=m +CONFIG_BACKLIGHT_PWM=m +CONFIG_BACKLIGHT_SAHARA=m +CONFIG_BACKLIGHT_SKY81452=m +CONFIG_BACKLIGHT_TPS65217=m +CONFIG_BACKLIGHT_WM831X=m +# CONFIG_BACKTRACE_SELF_TEST is not set +CONFIG_BALLOON_COMPACTION=y +CONFIG_BASE_FULL=y +CONFIG_BASE_SMALL=0 +# CONFIG_BATMAN_ADV_BATMAN_V is not set +CONFIG_BATMAN_ADV_BLA=y +CONFIG_BATMAN_ADV_DAT=y +# CONFIG_BATMAN_ADV_DEBUGFS is not set +CONFIG_BATMAN_ADV_MCAST=y +CONFIG_BATMAN_ADV_NC=y +CONFIG_BATTERY_88PM860X=m +CONFIG_BATTERY_ACT8945A=m +CONFIG_BATTERY_AXP20X=m +CONFIG_BATTERY_BQ27XXX=m +# CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set +CONFIG_BATTERY_BQ27XXX_HDQ=m +CONFIG_BATTERY_BQ27XXX_I2C=m +CONFIG_BATTERY_CPCAP=m +CONFIG_BATTERY_DA9030=m +CONFIG_BATTERY_DA9052=m +CONFIG_BATTERY_DA9150=m +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2780=m +CONFIG_BATTERY_DS2781=m +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_GAUGE_LTC2941=m +CONFIG_BATTERY_LEGO_EV3=m +CONFIG_BATTERY_MAX17040=m +CONFIG_BATTERY_MAX17042=m +CONFIG_BATTERY_MAX1721X=m +CONFIG_BATTERY_RT5033=m +CONFIG_BATTERY_RX51=m +CONFIG_BATTERY_SBS=m +CONFIG_BATTERY_TWL4030_MADC=m +CONFIG_BAYCOM_EPP=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BCACHE=m +# CONFIG_BCACHE_CLOSURES_DEBUG is not set +# CONFIG_BCACHE_DEBUG is not set +CONFIG_BCH_CONST_M=14 +CONFIG_BCH_CONST_PARAMS=y +CONFIG_BCH_CONST_T=4 +CONFIG_BCM2835_MBOX=y +CONFIG_BCM2835_THERMAL=m +CONFIG_BCM2835_VCHIQ=m +CONFIG_BCM2835_WDT=m +CONFIG_BCM7038_WDT=m +CONFIG_BCM7XXX_PHY=m +CONFIG_BCM87XX_PHY=m +CONFIG_BCMA_BLOCKIO=y +# CONFIG_BCMA_DEBUG is not set +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +CONFIG_BCMA_DRIVER_PCI=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_SOC=y +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCMA_SFLASH=y +CONFIG_BCMGENET=m +CONFIG_BCM_FLEXRM_MBOX=m +CONFIG_BCM_IPROC_ADC=m +CONFIG_BCM_NET_PHYLIB=m +CONFIG_BCM_NS_THERMAL=m +CONFIG_BCM_PDC_MBOX=m +CONFIG_BCM_SBA_RAID=m +CONFIG_BCM_VIDEOCORE=m +CONFIG_BE2NET=m +CONFIG_BE2NET_HWMON=y +# CONFIG_BEFS_DEBUG is not set +CONFIG_BERLIN2_ADC=m +CONFIG_BFQ_GROUP_IOSCHED=y +CONFIG_BGMAC=y +CONFIG_BGMAC_PLATFORM=y +CONFIG_BH1750=m +CONFIG_BH1780=m +CONFIG_BIG_KEYS=y +CONFIG_BIG_LITTLE=y +CONFIG_BINARY_PRINTF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_ELF_FDPIC=y +CONFIG_BINFMT_FLAT=y +CONFIG_BINFMT_MISC=m +CONFIG_BINFMT_SCRIPT=y +CONFIG_BINFMT_SHARED_FLAT=y +CONFIG_BINFMT_ZFLAT=y +CONFIG_BITREVERSE=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_CMDLINE_PARSER=y +CONFIG_BLK_DEBUG_FS=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_BSGLIB=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_DM=y +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DRBD=m +CONFIG_BLK_DEV_FD=m +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +CONFIG_BLK_DEV_MD=y +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_NULL_BLK=m +CONFIG_BLK_DEV_NVME=y +CONFIG_BLK_DEV_PMEM=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_BLK_DEV_RBD=m +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_DEV_THROTTLING_LOW is not set +# CONFIG_BLK_DEV_XPRAM is not set +CONFIG_BLK_DEV_ZONED=y +CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_MQ_RDMA=y +CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_SCSI_REQUEST=y +CONFIG_BLK_SED_OPAL=y +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_WBT_SQ is not set +CONFIG_BLOCK=y +CONFIG_BLOCK_COMPAT=y +CONFIG_BL_SWITCHER=y +CONFIG_BL_SWITCHER_DUMMY_IF=m +CONFIG_BMA180=m +CONFIG_BMA220=m +CONFIG_BMC150_ACCEL=m +CONFIG_BMC150_ACCEL_I2C=m +CONFIG_BMC150_ACCEL_SPI=m +CONFIG_BMC150_MAGN=m +CONFIG_BMC150_MAGN_I2C=m +CONFIG_BMC150_MAGN_SPI=m +CONFIG_BMG160=m +CONFIG_BMG160_I2C=m +CONFIG_BMG160_SPI=m +CONFIG_BMI160=m +CONFIG_BMI160_I2C=m +CONFIG_BMI160_SPI=m +CONFIG_BMP280=m +CONFIG_BMP280_I2C=m +CONFIG_BMP280_SPI=m +CONFIG_BNA=m +CONFIG_BNX2=m +CONFIG_BNX2X=m +CONFIG_BNX2X_SRIOV=y +CONFIG_BNXT=m +CONFIG_BNXT_DCB=y +CONFIG_BNXT_FLOWER_OFFLOAD=y +CONFIG_BNXT_SRIOV=y +CONFIG_BOARD_TPCI200=m +CONFIG_BONDING=m +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOTX_TEXT is not set +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_BPF=y +CONFIG_BPF_EVENTS=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_STREAM_PARSER=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPQETHER=m +CONFIG_BQL=y +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_BRCMDBG is not set +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PCIE=y +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_PROTO_MSGBUF=y +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +CONFIG_BRCMSMAC=m +CONFIG_BRCMSTB_GISB_ARB=y +CONFIG_BRCMSTB_L2_IRQ=y +CONFIG_BRCMSTB_PM=y +CONFIG_BRCMSTB_THERMAL=m +CONFIG_BRCMUTIL=m +CONFIG_BRCM_TRACING=y +CONFIG_BRIDGE=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_NETFILTER=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_BROADCOM_PHY=m +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_BT=m +CONFIG_BTREE=y +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_DEBUG is not set +CONFIG_BTRFS_FS=m +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_REF_VERIFY is not set +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +CONFIG_BTT=y +CONFIG_BT_6LOWPAN=m +CONFIG_BT_ATH3K=m +CONFIG_BT_BCM=m +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_BREDR=y +CONFIG_BT_CMTP=m +CONFIG_BT_DEBUGFS=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_AG6XX=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_INTEL=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_MRVL=y +CONFIG_BT_HCIUART_NOKIA=m +CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_SERDEV=y +CONFIG_BT_HCIVHCI=m +CONFIG_BT_HIDP=m +CONFIG_BT_HS=y +CONFIG_BT_INTEL=m +CONFIG_BT_LE=y +CONFIG_BT_LEDS=y +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_QCA=m +CONFIG_BT_QCOMSMD=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_RTL=m +# CONFIG_BT_SELFTEST is not set +CONFIG_BT_WILINK=m +CONFIG_BUG=y +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +CONFIG_BUILDTIME_EXTABLE_SORT=y +CONFIG_BUILD_BIN2C=y +CONFIG_C101=m +CONFIG_C2PORT_DURAMAR_2150=m +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set +CONFIG_CACHE_FEROCEON_L2=y +# CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH is not set +CONFIG_CACHE_L2X0=y +CONFIG_CACHE_L2X0_PMU=y +CONFIG_CACHE_TAUROS2=y +CONFIG_CACHE_UNIPHIER=y +# CONFIG_CAIF_DEBUG is not set +CONFIG_CAIF_HSI=m +CONFIG_CAIF_NETDEV=m +CONFIG_CAIF_SPI_SLAVE=m +# CONFIG_CAIF_SPI_SYNC is not set +CONFIG_CAIF_TTY=m +CONFIG_CAIF_USB=m +CONFIG_CAIF_VIRTIO=m +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_BCM=m +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_C_CAN_PLATFORM=m +# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEV=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_PCMCIA=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB2=m +CONFIG_CAN_FLEXCAN=m +CONFIG_CAN_GRCAN=m +CONFIG_CAN_GS_USB=m +CONFIG_CAN_GW=m +CONFIG_CAN_HI311X=m +CONFIG_CAN_IFI_CANFD=m +CONFIG_CAN_JANZ_ICAN3=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_LEDS=y +CONFIG_CAN_MCBA_USB=m +CONFIG_CAN_MCP251X=m +CONFIG_CAN_MSCAN=m +CONFIG_CAN_M_CAN=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PEAK_PCIEFD=m +CONFIG_CAN_PEAK_PCMCIA=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_RAW=m +CONFIG_CAN_RCAR=m +CONFIG_CAN_RCAR_CANFD=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_SJA1000_ISA=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m +CONFIG_CAN_TI_HECC=m +CONFIG_CAN_TSCAN1=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_VXCAN=m +CONFIG_CAN_XILINXCAN=m +CONFIG_CAPI_AVM=y +CONFIG_CAPI_EICON=y +CONFIG_CAPI_TRACE=y +CONFIG_CARDBUS=y +CONFIG_CARDMAN_4000=m +CONFIG_CARDMAN_4040=m +CONFIG_CARL9170=m +# CONFIG_CARL9170_DEBUGFS is not set +CONFIG_CARL9170_HWRNG=y +CONFIG_CARL9170_LEDS=y +CONFIG_CARL9170_WPC=y +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_CASSINI=m +CONFIG_CAVIUM_CPT=m +CONFIG_CAVIUM_ERRATUM_22375=y +CONFIG_CAVIUM_ERRATUM_23144=y +CONFIG_CAVIUM_ERRATUM_23154=y +CONFIG_CAVIUM_ERRATUM_27456=y +CONFIG_CAVIUM_ERRATUM_30115=y +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +CONFIG_CC10001_ADC=m +CONFIG_CCS811=m +CONFIG_CCW=y +CONFIG_CCWGROUP=m +CONFIG_CCW_CONSOLE=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +# CONFIG_CC_STACKPROTECTOR_NONE is not set +# CONFIG_CC_STACKPROTECTOR_REGULAR is not set +CONFIG_CC_STACKPROTECTOR_STRONG=y +CONFIG_CDROM=y +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_CEC_CORE=m +CONFIG_CEC_GPIO=m +CONFIG_CEC_NOTIFIER=y +CONFIG_CEC_PIN=y +CONFIG_CEC_PLATFORM_DRIVERS=y +CONFIG_CEPH_FS=m +CONFIG_CEPH_FSCACHE=y +CONFIG_CEPH_FS_POSIX_ACL=y +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_CFG80211=m +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_WEXT=y +CONFIG_CFG80211_WEXT_EXPORT=y +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_CGROUPS=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_CPUACCT=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_SCHED=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CHARGER_88PM860X=m +CONFIG_CHARGER_AXP20X=m +CONFIG_CHARGER_BQ2415X=m +CONFIG_CHARGER_BQ24190=m +CONFIG_CHARGER_BQ24257=m +CONFIG_CHARGER_BQ24735=m +CONFIG_CHARGER_BQ25890=m +CONFIG_CHARGER_CPCAP=m +CONFIG_CHARGER_DA9150=m +CONFIG_CHARGER_DETECTOR_MAX14656=m +CONFIG_CHARGER_GPIO=m +CONFIG_CHARGER_ISP1704=m +CONFIG_CHARGER_LP8727=m +CONFIG_CHARGER_LP8788=m +CONFIG_CHARGER_LTC3651=m +CONFIG_CHARGER_MANAGER=y +CONFIG_CHARGER_MAX14577=m +CONFIG_CHARGER_MAX77693=m +CONFIG_CHARGER_MAX8903=m +CONFIG_CHARGER_MAX8997=m +CONFIG_CHARGER_MAX8998=m +CONFIG_CHARGER_PCF50633=m +CONFIG_CHARGER_QCOM_SMBB=m +CONFIG_CHARGER_RT9455=m +CONFIG_CHARGER_SBS=m +CONFIG_CHARGER_SMB347=m +CONFIG_CHARGER_TPS65090=m +CONFIG_CHARGER_TPS65217=m +CONFIG_CHARGER_TWL4030=m +CONFIG_CHARLCD=m +# CONFIG_CHASH_SELFTEST is not set +# CONFIG_CHASH_STATS is not set +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CHECK_STACK=y +CONFIG_CHELSIO_LIB=m +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4VF=m +CONFIG_CHELSIO_T4_DCB=y +CONFIG_CHELSIO_T4_FCOE=y +CONFIG_CHROMEOS_LAPTOP=m +CONFIG_CHROMEOS_PSTORE=m +CONFIG_CHROME_PLATFORMS=y +CONFIG_CHR_DEV_OSST=m +CONFIG_CHR_DEV_SCH=m +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_ST=m +CONFIG_CHSC_SCH=m +CONFIG_CICADA_PHY=m +CONFIG_CIFS=m +CONFIG_CIFS_ACL=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_FSCACHE=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_SMB311=y +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIO_DAC=m +CONFIG_CLEANCACHE=y +CONFIG_CLKBLD_I8253=y +CONFIG_CLKDEV_LOOKUP=y +CONFIG_CLKEVT_I8253=y +CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y +CONFIG_CLKSRC_EXYNOS_MCT=y +CONFIG_CLKSRC_I8253=y +CONFIG_CLKSRC_IMX_GPT=y +CONFIG_CLKSRC_MMIO=y +CONFIG_CLKSRC_QCOM=y +CONFIG_CLKSRC_TANGO_XTAL=y +CONFIG_CLKSRC_TI_32K=y +CONFIG_CLKSRC_VERSATILE=y +CONFIG_CLK_BCM_NS2=y +CONFIG_CLK_BCM_SR=y +CONFIG_CLK_EMEV2=y +CONFIG_CLK_HSDK=y +CONFIG_CLK_QORIQ=y +CONFIG_CLK_R8A7740=y +CONFIG_CLK_R8A7743=y +CONFIG_CLK_R8A7745=y +CONFIG_CLK_R8A7778=y +CONFIG_CLK_R8A7779=y +CONFIG_CLK_R8A7790=y +CONFIG_CLK_R8A7791=y +CONFIG_CLK_R8A7792=y +CONFIG_CLK_R8A7794=y +CONFIG_CLK_R8A7795=y +CONFIG_CLK_R8A7796=y +CONFIG_CLK_R8A77970=y +CONFIG_CLK_R8A77995=y +CONFIG_CLK_RCAR_GEN2=y +CONFIG_CLK_RCAR_GEN2_CPG=y +CONFIG_CLK_RCAR_GEN3_CPG=y +CONFIG_CLK_RCAR_USB2_CLOCK_SEL=y +CONFIG_CLK_RENESAS=y +CONFIG_CLK_RENESAS_CPG_MSSR=y +CONFIG_CLK_RENESAS_CPG_MSTP=y +CONFIG_CLK_RENESAS_DIV6=y +CONFIG_CLK_RENESAS_LEGACY=y +CONFIG_CLK_RZA1=y +CONFIG_CLK_SH73A0=y +CONFIG_CLK_SP810=y +CONFIG_CLK_TWL6040=m +CONFIG_CLK_UNIPHIER=y +CONFIG_CLK_VEXPRESS_OSC=y +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +# CONFIG_CLOCK_THERMAL is not set +CONFIG_CLONE_BACKWARDS=y +CONFIG_CLONE_BACKWARDS2=y +CONFIG_CLS_U32_MARK=y +# CONFIG_CLS_U32_PERF is not set +CONFIG_CLZ_TAB=y +CONFIG_CM32181=m +CONFIG_CM3232=m +CONFIG_CM3323=m +CONFIG_CM3605=m +CONFIG_CM36651=m +CONFIG_CMA=y +CONFIG_CMA_ALIGNMENT=8 +CONFIG_CMA_AREAS=7 +# CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set +CONFIG_CMA_SIZE_MBYTES=16 +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMDLINE_BOOL is not set +# CONFIG_CMDLINE_FORCE is not set +CONFIG_CMM_IUCV=y +CONFIG_CMT_SPEECH=m +CONFIG_CNIC=m +CONFIG_CODA_FS=m +# CONFIG_CODE_PATCHING_SELFTEST is not set +CONFIG_COMEDI=m +CONFIG_COMEDI_8254=m +CONFIG_COMEDI_8255=m +CONFIG_COMEDI_8255_PCI=m +CONFIG_COMEDI_8255_SA=m +CONFIG_COMEDI_ADDI_APCI_1032=m +CONFIG_COMEDI_ADDI_APCI_1500=m +CONFIG_COMEDI_ADDI_APCI_1516=m +CONFIG_COMEDI_ADDI_APCI_1564=m +CONFIG_COMEDI_ADDI_APCI_16XX=m +CONFIG_COMEDI_ADDI_APCI_2032=m +CONFIG_COMEDI_ADDI_APCI_2200=m +CONFIG_COMEDI_ADDI_APCI_3120=m +CONFIG_COMEDI_ADDI_APCI_3501=m +CONFIG_COMEDI_ADDI_APCI_3XXX=m +CONFIG_COMEDI_ADDI_WATCHDOG=m +CONFIG_COMEDI_ADL_PCI6208=m +CONFIG_COMEDI_ADL_PCI7X3X=m +CONFIG_COMEDI_ADL_PCI8164=m +CONFIG_COMEDI_ADL_PCI9111=m +CONFIG_COMEDI_ADL_PCI9118=m +CONFIG_COMEDI_ADQ12B=m +CONFIG_COMEDI_ADV_PCI1710=m +CONFIG_COMEDI_ADV_PCI1720=m +CONFIG_COMEDI_ADV_PCI1723=m +CONFIG_COMEDI_ADV_PCI1724=m +CONFIG_COMEDI_ADV_PCI1760=m +CONFIG_COMEDI_ADV_PCI_DIO=m +CONFIG_COMEDI_AIO_AIO12_8=m +CONFIG_COMEDI_AIO_IIRO_16=m +CONFIG_COMEDI_AMPLC_DIO200=m +CONFIG_COMEDI_AMPLC_DIO200_ISA=m +CONFIG_COMEDI_AMPLC_DIO200_PCI=m +CONFIG_COMEDI_AMPLC_PC236=m +CONFIG_COMEDI_AMPLC_PC236_ISA=m +CONFIG_COMEDI_AMPLC_PC236_PCI=m +CONFIG_COMEDI_AMPLC_PC263_ISA=m +CONFIG_COMEDI_AMPLC_PC263_PCI=m +CONFIG_COMEDI_AMPLC_PCI224=m +CONFIG_COMEDI_AMPLC_PCI230=m +CONFIG_COMEDI_BOND=m +CONFIG_COMEDI_C6XDIGIO=m +CONFIG_COMEDI_CB_DAS16_CS=m +CONFIG_COMEDI_CB_PCIDAS=m +CONFIG_COMEDI_CB_PCIDAS64=m +CONFIG_COMEDI_CB_PCIDDA=m +CONFIG_COMEDI_CB_PCIMDAS=m +CONFIG_COMEDI_CB_PCIMDDA=m +CONFIG_COMEDI_CONTEC_PCI_DIO=m +CONFIG_COMEDI_DAC02=m +CONFIG_COMEDI_DAQBOARD2000=m +CONFIG_COMEDI_DAS08=m +CONFIG_COMEDI_DAS08_CS=m +CONFIG_COMEDI_DAS08_ISA=m +CONFIG_COMEDI_DAS08_PCI=m +CONFIG_COMEDI_DAS16=m +CONFIG_COMEDI_DAS16M1=m +CONFIG_COMEDI_DAS1800=m +CONFIG_COMEDI_DAS6402=m +CONFIG_COMEDI_DAS800=m +# CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +CONFIG_COMEDI_DMM32AT=m +CONFIG_COMEDI_DT2801=m +CONFIG_COMEDI_DT2811=m +CONFIG_COMEDI_DT2814=m +CONFIG_COMEDI_DT2815=m +CONFIG_COMEDI_DT2817=m +CONFIG_COMEDI_DT282X=m +CONFIG_COMEDI_DT3000=m +CONFIG_COMEDI_DT9812=m +CONFIG_COMEDI_DYNA_PCI10XX=m +CONFIG_COMEDI_FL512=m +CONFIG_COMEDI_GSC_HPDI=m +CONFIG_COMEDI_ICP_MULTI=m +CONFIG_COMEDI_II_PCI20KC=m +CONFIG_COMEDI_ISADMA=m +CONFIG_COMEDI_ISA_DRIVERS=y +CONFIG_COMEDI_JR3_PCI=m +CONFIG_COMEDI_KCOMEDILIB=m +CONFIG_COMEDI_KE_COUNTER=m +CONFIG_COMEDI_ME4000=m +CONFIG_COMEDI_ME_DAQ=m +CONFIG_COMEDI_MF6X4=m +CONFIG_COMEDI_MISC_DRIVERS=y +CONFIG_COMEDI_MITE=m +CONFIG_COMEDI_MPC624=m +CONFIG_COMEDI_MULTIQ3=m +CONFIG_COMEDI_NI_6527=m +CONFIG_COMEDI_NI_65XX=m +CONFIG_COMEDI_NI_660X=m +CONFIG_COMEDI_NI_670X=m +CONFIG_COMEDI_NI_ATMIO=m +CONFIG_COMEDI_NI_ATMIO16D=m +CONFIG_COMEDI_NI_AT_A2150=m +CONFIG_COMEDI_NI_AT_AO=m +CONFIG_COMEDI_NI_DAQ_700_CS=m +CONFIG_COMEDI_NI_DAQ_DIO24_CS=m +CONFIG_COMEDI_NI_LABPC=m +CONFIG_COMEDI_NI_LABPC_CS=m +CONFIG_COMEDI_NI_LABPC_ISA=m +CONFIG_COMEDI_NI_LABPC_ISADMA=m +CONFIG_COMEDI_NI_LABPC_PCI=m +CONFIG_COMEDI_NI_MIO_CS=m +CONFIG_COMEDI_NI_PCIDIO=m +CONFIG_COMEDI_NI_PCIMIO=m +CONFIG_COMEDI_NI_TIO=m +CONFIG_COMEDI_NI_TIOCMD=m +CONFIG_COMEDI_NI_USB6501=m +CONFIG_COMEDI_PARPORT=m +CONFIG_COMEDI_PCI_DRIVERS=m +CONFIG_COMEDI_PCL711=m +CONFIG_COMEDI_PCL724=m +CONFIG_COMEDI_PCL726=m +CONFIG_COMEDI_PCL730=m +CONFIG_COMEDI_PCL812=m +CONFIG_COMEDI_PCL816=m +CONFIG_COMEDI_PCL818=m +CONFIG_COMEDI_PCM3724=m +CONFIG_COMEDI_PCMAD=m +CONFIG_COMEDI_PCMCIA_DRIVERS=m +CONFIG_COMEDI_PCMDA12=m +CONFIG_COMEDI_PCMMIO=m +CONFIG_COMEDI_PCMUIO=m +CONFIG_COMEDI_QUATECH_DAQP_CS=m +CONFIG_COMEDI_RTD520=m +CONFIG_COMEDI_RTI800=m +CONFIG_COMEDI_RTI802=m +CONFIG_COMEDI_S526=m +CONFIG_COMEDI_S626=m +CONFIG_COMEDI_SERIAL2002=m +CONFIG_COMEDI_SSV_DNP=m +CONFIG_COMEDI_TEST=m +CONFIG_COMEDI_USBDUX=m +CONFIG_COMEDI_USBDUXFAST=m +CONFIG_COMEDI_USBDUXSIGMA=m +CONFIG_COMEDI_USB_DRIVERS=m +CONFIG_COMEDI_VMK80XX=m +CONFIG_COMMON_CLK=y +CONFIG_COMMON_CLK_AMLOGIC=y +CONFIG_COMMON_CLK_CDCE706=m +CONFIG_COMMON_CLK_CDCE925=m +CONFIG_COMMON_CLK_CS2000_CP=m +CONFIG_COMMON_CLK_HI3516CV300=m +CONFIG_COMMON_CLK_HI3519=m +CONFIG_COMMON_CLK_HI3660=y +CONFIG_COMMON_CLK_HI3798CV200=m +CONFIG_COMMON_CLK_HI6220=y +CONFIG_COMMON_CLK_HI655X=m +CONFIG_COMMON_CLK_IPROC=y +CONFIG_COMMON_CLK_MAX77686=m +CONFIG_COMMON_CLK_MEDIATEK=y +CONFIG_COMMON_CLK_MESON8B=y +# CONFIG_COMMON_CLK_MT2701 is not set +CONFIG_COMMON_CLK_MT2712=y +CONFIG_COMMON_CLK_MT2712_BDPSYS=y +CONFIG_COMMON_CLK_MT2712_IMGSYS=y +CONFIG_COMMON_CLK_MT2712_JPGDECSYS=y +CONFIG_COMMON_CLK_MT2712_MFGCFG=y +CONFIG_COMMON_CLK_MT2712_MMSYS=y +CONFIG_COMMON_CLK_MT2712_VDECSYS=y +CONFIG_COMMON_CLK_MT2712_VENCSYS=y +CONFIG_COMMON_CLK_MT6797=y +CONFIG_COMMON_CLK_MT6797_IMGSYS=y +CONFIG_COMMON_CLK_MT6797_MMSYS=y +CONFIG_COMMON_CLK_MT6797_VDECSYS=y +CONFIG_COMMON_CLK_MT6797_VENCSYS=y +CONFIG_COMMON_CLK_MT7622=y +CONFIG_COMMON_CLK_MT7622_AUDSYS=y +CONFIG_COMMON_CLK_MT7622_ETHSYS=y +CONFIG_COMMON_CLK_MT7622_HIFSYS=y +CONFIG_COMMON_CLK_MT8135=y +CONFIG_COMMON_CLK_MT8173=y +# CONFIG_COMMON_CLK_NXP is not set +CONFIG_COMMON_CLK_PALMAS=m +# CONFIG_COMMON_CLK_PIC32 is not set +CONFIG_COMMON_CLK_PWM=m +# CONFIG_COMMON_CLK_PXA is not set +CONFIG_COMMON_CLK_QCOM=m +CONFIG_COMMON_CLK_RK808=m +CONFIG_COMMON_CLK_S2MPS11=m +CONFIG_COMMON_CLK_SAMSUNG=y +CONFIG_COMMON_CLK_SCPI=m +CONFIG_COMMON_CLK_SI514=m +CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_SI570=m +CONFIG_COMMON_CLK_TI_ADPLL=y +CONFIG_COMMON_CLK_VC5=m +CONFIG_COMMON_CLK_VERSATILE=y +CONFIG_COMMON_CLK_WM831X=m +CONFIG_COMMON_CLK_XGENE=y +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +CONFIG_COMMON_RESET_HI3660=m +CONFIG_COMMON_RESET_HI6220=m +CONFIG_COMPACTION=y +CONFIG_COMPAL_LAPTOP=m +CONFIG_COMPAT=y +CONFIG_COMPAT_32=y +CONFIG_COMPAT_BINFMT_ELF=y +# CONFIG_COMPAT_BRK is not set +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_COMPAT_OLD_SIGACTION=y +# CONFIG_COMPAT_VDSO is not set +# CONFIG_COMPILE_TEST is not set +CONFIG_CONFIGFS_FS=y +CONFIG_CONNECTOR=y +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_POLL=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_COPS=m +CONFIG_COPS_DAYNA=y +CONFIG_COPS_TANGENT=y +CONFIG_CORDIC=m +CONFIG_COREDUMP=y +# CONFIG_CORESIGHT is not set +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_CORTINA_PHY=m +CONFIG_COSA=m +CONFIG_CP15_BARRIER_EMULATION=y +# CONFIG_CPA_DEBUG is not set +CONFIG_CPCAP_ADC=m +CONFIG_CPU5_WDT=m +CONFIG_CPUFREQ_DT=y +CONFIG_CPUFREQ_DT_PLATDEV=y +CONFIG_CPUMASK_OFFSTACK=y +CONFIG_CPUSETS=y +CONFIG_CPU_32v6K=y +CONFIG_CPU_32v7=y +CONFIG_CPU_ABRT_EV7=y +# CONFIG_CPU_BPREDICT_DISABLE is not set +CONFIG_CPU_CACHE_V7=y +CONFIG_CPU_CACHE_VIPT=y +CONFIG_CPU_COPY_V6=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_HAS_ASID=y +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +CONFIG_CPU_ISOLATION=y +CONFIG_CPU_LITTLE_ENDIAN=y +# CONFIG_CPU_NO_EFFICIENT_FFS is not set +CONFIG_CPU_PABRT_V7=y +CONFIG_CPU_PJ4=y +CONFIG_CPU_PJ4B=y +CONFIG_CPU_PM=y +CONFIG_CPU_RMAP=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_CYRIX_32=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_CPU_SUP_UMC_32=y +CONFIG_CPU_SW_DOMAIN_PAN=y +CONFIG_CPU_THERMAL=y +CONFIG_CPU_THUMB_CAPABLE=y +CONFIG_CPU_TLB_V7=y +CONFIG_CPU_V7=y +CONFIG_CRAMFS_BLOCKDEV=y +CONFIG_CRAMFS_MTD=y +CONFIG_CRASH_CORE=y +CONFIG_CRASH_DUMP=y +CONFIG_CRC16=y +CONFIG_CRC32=y +# CONFIG_CRC32_BIT is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_SELFTEST is not set +# CONFIG_CRC32_SLICEBY4 is not set +CONFIG_CRC32_SLICEBY8=y +CONFIG_CRC4=m +CONFIG_CRC7=m +CONFIG_CRC8=m +CONFIG_CRC_CCITT=y +CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=y +CONFIG_CROSS_COMPILE="" +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CROS_EC_LPC=m +CONFIG_CROS_EC_LPC_MEC=y +CONFIG_CROS_EC_PROTO=y +CONFIG_CROS_KBD_LED_BACKLIGHT=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_842=m +CONFIG_CRYPTO_ABLK_HELPER=m +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_ARM64=m +CONFIG_CRYPTO_AES_ARM64_BS=m +CONFIG_CRYPTO_AES_ARM64_CE=m +CONFIG_CRYPTO_AES_ARM64_CE_BLK=m +CONFIG_CRYPTO_AES_ARM64_CE_CCM=m +CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m +CONFIG_CRYPTO_AES_ARM_BS=m +CONFIG_CRYPTO_AES_ARM_CE=m +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_AES_S390=m +CONFIG_CRYPTO_AES_TI=m +CONFIG_CRYPTO_AES_X86_64=m +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_BLOWFISH_X86_64=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_CAMELLIA_X86_64=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST5_AVX_X86_64=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_CAST6_AVX_X86_64=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_CHACHA20=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_CHACHA20_NEON=m +CONFIG_CRYPTO_CHACHA20_X86_64=m +CONFIG_CRYPTO_CMAC=m +CONFIG_CRYPTO_CRC32=m +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=y +CONFIG_CRYPTO_CRC32C_VPMSUM=m +CONFIG_CRYPTO_CRC32_ARM64_CE=m +CONFIG_CRYPTO_CRC32_ARM_CE=m +CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_CRC32_S390=m +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m +CONFIG_CRYPTO_CRCT10DIF_ARM_CE=m +CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m +CONFIG_CRYPTO_CRCT10DIF_VPMSUM=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DES3_EDE_X86_64=m +CONFIG_CRYPTO_DES_S390=m +CONFIG_CRYPTO_DEV_ARTPEC6=m +CONFIG_CRYPTO_DEV_BCM_SPU=m +CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_CCREE=m +CONFIG_CRYPTO_DEV_CHELSIO=m +CONFIG_CRYPTO_DEV_CPT=m +CONFIG_CRYPTO_DEV_EXYNOS_RNG=m +CONFIG_CRYPTO_DEV_FSL_CAAM=m +CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=m +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=m +CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI=m +# CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255 +CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048 +CONFIG_CRYPTO_DEV_FSL_CAAM_JR=m +CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API=m +CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9 +CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=m +CONFIG_CRYPTO_DEV_GEODE=m +CONFIG_CRYPTO_DEV_HIFN_795X=m +CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y +CONFIG_CRYPTO_DEV_MARVELL_CESA=m +CONFIG_CRYPTO_DEV_MEDIATEK=m +CONFIG_CRYPTO_DEV_MXC_SCC=m +# CONFIG_CRYPTO_DEV_MXS_DCP is not set +CONFIG_CRYPTO_DEV_NITROX=m +CONFIG_CRYPTO_DEV_NX=y +CONFIG_CRYPTO_DEV_NX_COMPRESS=m +CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m +CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m +CONFIG_CRYPTO_DEV_OMAP=m +CONFIG_CRYPTO_DEV_OMAP_AES=m +CONFIG_CRYPTO_DEV_OMAP_DES=m +CONFIG_CRYPTO_DEV_OMAP_SHAM=m +CONFIG_CRYPTO_DEV_PADLOCK=y +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_QAT=m +# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set +# CONFIG_CRYPTO_DEV_QAT_C62X is not set +# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set +CONFIG_CRYPTO_DEV_QAT_DH895xCC=m +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m +CONFIG_CRYPTO_DEV_QCE=m +# CONFIG_CRYPTO_DEV_ROCKCHIP is not set +CONFIG_CRYPTO_DEV_S5P=m +CONFIG_CRYPTO_DEV_SAHARA=m +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_VIRTIO=m +CONFIG_CRYPTO_DEV_VMX=y +CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m +CONFIG_CRYPTO_DH=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_ECDH=m +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_ENGINE=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_GHASH_ARM64_CE=m +CONFIG_CRYPTO_GHASH_ARM_CE=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +CONFIG_CRYPTO_GHASH_S390=m +CONFIG_CRYPTO_GLUE_HELPER_X86=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_KEYWRAP=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_MCRYPTD=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MD5_PPC=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_NULL2=y +CONFIG_CRYPTO_PAES_S390=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_POLY1305=m +CONFIG_CRYPTO_POLY1305_X86_64=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_SALSA20_X86_64=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX_X86_64=m +CONFIG_CRYPTO_SERPENT_SSE2_586=m +CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA1_ARM=m +CONFIG_CRYPTO_SHA1_ARM64_CE=m +CONFIG_CRYPTO_SHA1_ARM_CE=m +CONFIG_CRYPTO_SHA1_ARM_NEON=m +CONFIG_CRYPTO_SHA1_MB=m +CONFIG_CRYPTO_SHA1_PPC=m +CONFIG_CRYPTO_SHA1_S390=m +CONFIG_CRYPTO_SHA1_SSSE3=m +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_SHA256_ARM64=m +CONFIG_CRYPTO_SHA256_MB=m +CONFIG_CRYPTO_SHA256_S390=m +CONFIG_CRYPTO_SHA256_SSSE3=m +CONFIG_CRYPTO_SHA2_ARM64_CE=m +CONFIG_CRYPTO_SHA2_ARM_CE=m +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA512_ARM=m +CONFIG_CRYPTO_SHA512_ARM64=m +CONFIG_CRYPTO_SHA512_MB=m +CONFIG_CRYPTO_SHA512_S390=m +CONFIG_CRYPTO_SHA512_SSSE3=m +CONFIG_CRYPTO_SIMD=m +CONFIG_CRYPTO_SKEIN=y +CONFIG_CRYPTO_SM3=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_586=m +CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_AEAD=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_VPMSUM_TESTER=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XTS=y +# CONFIG_CS5535_MFGPT is not set +CONFIG_CS89x0=m +CONFIG_CS89x0_PLATFORM=y +CONFIG_CTCM=m +CONFIG_CUSE=m +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m +CONFIG_CW1200_WLAN_SPI=m +CONFIG_CXL=m +CONFIG_CXLFLASH=m +CONFIG_CXL_BIMODAL=y +CONFIG_CX_ECAT=m +CONFIG_CYCLADES=m +CONFIG_CYPRESS_FIRMWARE=m +# CONFIG_CYZ_INTR is not set +CONFIG_DA280=m +CONFIG_DA311=m +CONFIG_DA9052_WATCHDOG=m +CONFIG_DA9055_WATCHDOG=m +CONFIG_DA9062_THERMAL=m +CONFIG_DA9062_WATCHDOG=m +CONFIG_DA9063_WATCHDOG=m +CONFIG_DA9150_GPADC=m +CONFIG_DASD=m +CONFIG_DASD_DIAG=m +CONFIG_DASD_ECKD=m +CONFIG_DASD_EER=y +CONFIG_DASD_FBA=m +CONFIG_DASD_PROFILE=y +CONFIG_DAVICOM_PHY=m +CONFIG_DAX=y +CONFIG_DCA=m +CONFIG_DCACHE_WORD_ACCESS=y +CONFIG_DCB=y +CONFIG_DCDBAS=m +CONFIG_DCSSBLK=m +CONFIG_DDR=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_DE4X5=m +CONFIG_DEBUGGER=y +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_BLK_CGROUP is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_CREDENTIALS is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_EFI is not set +# CONFIG_DEBUG_ENTRY is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FS=y +# CONFIG_DEBUG_GPIO is not set +# CONFIG_DEBUG_HIGHMEM is not set +# CONFIG_DEBUG_HOTPLUG_CPU0 is not set +CONFIG_DEBUG_IMX_UART_PORT=1 +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KERNEL_DC is not set +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_LL is not set +CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_NMI_SELFTEST is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_PINCTRL is not set +# CONFIG_DEBUG_PI_LIST is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_DEBUG_TIMEKEEPING is not set +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_DEBUG_UART_8250 is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_VF_UART_PORT=1 +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +CONFIG_DEBUG_WX=y +CONFIG_DECNET_NF_GRABULATOR=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DEFAULT_CFQ=y +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_DEFAULT_IOSCHED="cfq" +CONFIG_DEFAULT_IO_DELAY_TYPE=1 +# CONFIG_DEFAULT_NOOP is not set +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_SECURITY="apparmor" +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_DEFAULT_UIMAGE is not set +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_RBTN=m +CONFIG_DELL_RBU=m +CONFIG_DELL_SMBIOS=m +CONFIG_DELL_SMBIOS_SMM=m +CONFIG_DELL_SMBIOS_WMI=m +CONFIG_DELL_SMO8800=m +CONFIG_DELL_WMI=m +CONFIG_DELL_WMI_AIO=m +CONFIG_DELL_WMI_DESCRIPTOR=m +CONFIG_DELL_WMI_LED=m +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP=y +CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y +CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=m +CONFIG_DEVFREQ_GOV_PASSIVE=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_DEVICE_PRIVATE=y +CONFIG_DEVICE_PUBLIC=y +# CONFIG_DEVKMEM is not set +CONFIG_DEVMEM=y +CONFIG_DEVPORT=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEV_APPLETALK=m +CONFIG_DEV_COREDUMP=y +CONFIG_DEV_DAX=m +CONFIG_DEV_DAX_PMEM=m +CONFIG_DE_AOC=y +CONFIG_DGNC=m +CONFIG_DHT11=m +CONFIG_DIAG288_WATCHDOG=m +# CONFIG_DISABLE_MPROFILE_KERNEL is not set +CONFIG_DL2K=m +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set +CONFIG_DLN2_ADC=m +CONFIG_DM9000=m +# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set +CONFIG_DM9102=m +# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_DMARD06=m +CONFIG_DMARD09=m +CONFIG_DMARD10=m +CONFIG_DMAR_TABLE=y +# CONFIG_DMATEST is not set +CONFIG_DMA_ACPI=y +# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_BCM2835=y +CONFIG_DMA_ENGINE=y +CONFIG_DMA_ENGINE_RAID=y +# CONFIG_DMA_FENCE_TRACE is not set +CONFIG_DMA_OF=y +CONFIG_DMA_OMAP=y +CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DMA_SUN6I=m +CONFIG_DMA_VIRT_OPS=y +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +CONFIG_DMI_SYSFS=m +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_BUFIO=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_SMQ=m +CONFIG_DM_CRYPT=m +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set +CONFIG_DM_DELAY=m +CONFIG_DM_ERA=m +CONFIG_DM_FLAKEY=m +CONFIG_DM_INTEGRITY=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_LOG_WRITES=m +CONFIG_DM_MIRROR=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_PERSISTENT_DATA=m +CONFIG_DM_RAID=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_SWITCH=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_UEVENT=y +CONFIG_DM_VERITY=m +# CONFIG_DM_VERITY_FEC is not set +CONFIG_DM_ZERO=m +CONFIG_DM_ZONED=m +CONFIG_DNOTIFY=y +CONFIG_DNS_RESOLVER=y +CONFIG_DONGLE=y +CONFIG_DOUBLEFAULT=y +CONFIG_DOVE_CLK=y +CONFIG_DOVE_THERMAL=m +CONFIG_DP83822_PHY=m +CONFIG_DP83848_PHY=m +CONFIG_DP83867_PHY=m +# CONFIG_DPM_WATCHDOG is not set +CONFIG_DPOT_DAC=m +CONFIG_DPTF_POWER=m +CONFIG_DQL=y +CONFIG_DRA752_THERMAL=y +CONFIG_DRAGONRISE_FF=y +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMDGPU_CIK=y +# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set +CONFIG_DRM_AMDGPU_SI=y +CONFIG_DRM_AMDGPU_USERPTR=y +CONFIG_DRM_AMD_ACP=y +CONFIG_DRM_AMD_DC=y +CONFIG_DRM_AMD_DC_DCN1_0=y +# CONFIG_DRM_AMD_DC_FBC is not set +CONFIG_DRM_AMD_DC_PRE_VEGA=y +CONFIG_DRM_ANALOGIX_ANX78XX=m +CONFIG_DRM_ANALOGIX_DP=m +CONFIG_DRM_ARCPGU=m +CONFIG_DRM_ARM=y +CONFIG_DRM_ARMADA=m +CONFIG_DRM_AST=m +CONFIG_DRM_ATMEL_HLCDC=m +# CONFIG_DRM_BOCHS is not set +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_CIRRUS_QEMU=m +# CONFIG_DRM_DEBUG_MM_SELFTEST is not set +CONFIG_DRM_DP_AUX_CHARDEV=y +CONFIG_DRM_DUMB_VGA_DAC=m +CONFIG_DRM_DW_HDMI=m +CONFIG_DRM_DW_HDMI_AHB_AUDIO=m +CONFIG_DRM_DW_HDMI_CEC=m +CONFIG_DRM_DW_HDMI_I2S_AUDIO=m +CONFIG_DRM_DW_MIPI_DSI=m +CONFIG_DRM_ETNAVIV=m +# CONFIG_DRM_ETNAVIV_REGISTER_LOGGING is not set +CONFIG_DRM_EXYNOS=m +CONFIG_DRM_EXYNOS5433_DECON=y +# CONFIG_DRM_EXYNOS7_DECON is not set +CONFIG_DRM_EXYNOS_DSI=y +# CONFIG_DRM_EXYNOS_FIMD is not set +CONFIG_DRM_EXYNOS_HDMI=y +CONFIG_DRM_EXYNOS_IOMMU=y +# CONFIG_DRM_EXYNOS_IPP is not set +CONFIG_DRM_EXYNOS_MIC=y +CONFIG_DRM_EXYNOS_MIXER=y +# CONFIG_DRM_EXYNOS_VIDI is not set +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +CONFIG_DRM_FSL_DCU=m +CONFIG_DRM_GEM_CMA_HELPER=y +CONFIG_DRM_GMA3600=y +CONFIG_DRM_GMA500=m +CONFIG_DRM_GMA600=y +CONFIG_DRM_HDLCD=m +# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set +CONFIG_DRM_HISI_HIBMC=m +CONFIG_DRM_HISI_KIRIN=m +CONFIG_DRM_I2C_ADV7511=m +CONFIG_DRM_I2C_ADV7511_AUDIO=y +CONFIG_DRM_I2C_ADV7511_CEC=y +CONFIG_DRM_I2C_ADV7533=y +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_DRM_I915=m +# CONFIG_DRM_I915_ALPHA_SUPPORT is not set +CONFIG_DRM_I915_CAPTURE_ERROR=y +CONFIG_DRM_I915_COMPRESS_ERROR=y +# CONFIG_DRM_I915_DEBUG is not set +# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set +CONFIG_DRM_I915_GVT=y +CONFIG_DRM_I915_GVT_KVMGT=m +# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set +# CONFIG_DRM_I915_SELFTEST is not set +# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set +# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set +CONFIG_DRM_I915_USERPTR=y +# CONFIG_DRM_I915_WERROR is not set +CONFIG_DRM_IMX=m +CONFIG_DRM_IMX_HDMI=m +CONFIG_DRM_IMX_LDB=m +CONFIG_DRM_IMX_PARALLEL_DISPLAY=m +CONFIG_DRM_IMX_TVE=m +CONFIG_DRM_KMS_CMA_HELPER=y +CONFIG_DRM_KMS_FB_HELPER=y +CONFIG_DRM_KMS_HELPER=m +# CONFIG_DRM_LEGACY is not set +# CONFIG_DRM_LIB_RANDOM is not set +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_LVDS_ENCODER=m +CONFIG_DRM_MALI_DISPLAY=m +CONFIG_DRM_MEDFIELD=y +CONFIG_DRM_MEDIATEK=m +CONFIG_DRM_MEDIATEK_HDMI=m +CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m +CONFIG_DRM_MESON=m +CONFIG_DRM_MESON_DW_HDMI=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_MIPI_DSI=y +CONFIG_DRM_MSM=m +CONFIG_DRM_MSM_DSI=y +CONFIG_DRM_MSM_DSI_14NM_PHY=y +CONFIG_DRM_MSM_DSI_20NM_PHY=y +CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y +CONFIG_DRM_MSM_DSI_28NM_PHY=y +CONFIG_DRM_MSM_DSI_PLL=y +CONFIG_DRM_MSM_HDMI_HDCP=y +CONFIG_DRM_MSM_REGISTER_LOGGING=y +CONFIG_DRM_MXS=y +CONFIG_DRM_MXSFB=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +CONFIG_DRM_NXP_PTN3460=m +# CONFIG_DRM_OMAP is not set +CONFIG_DRM_PANEL=y +CONFIG_DRM_PANEL_BRIDGE=y +CONFIG_DRM_PANEL_INNOLUX_P079ZCA=m +CONFIG_DRM_PANEL_JDI_LT070ME05000=m +CONFIG_DRM_PANEL_LG_LG4573=m +CONFIG_DRM_PANEL_LVDS=m +CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m +CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m +CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m +CONFIG_DRM_PANEL_SAMSUNG_LD9040=m +CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m +CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m +CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m +CONFIG_DRM_PANEL_SEIKO_43WVF1G=m +CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m +CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m +CONFIG_DRM_PANEL_SIMPLE=m +CONFIG_DRM_PANEL_SITRONIX_ST7789V=m +CONFIG_DRM_PARADE_PS8622=m +CONFIG_DRM_PL111=m +CONFIG_DRM_QXL=m +CONFIG_DRM_RADEON=m +# CONFIG_DRM_RADEON_USERPTR is not set +CONFIG_DRM_RCAR_DU=m +CONFIG_DRM_RCAR_DW_HDMI=m +CONFIG_DRM_RCAR_LVDS=y +CONFIG_DRM_RCAR_VSP=y +CONFIG_DRM_ROCKCHIP=m +CONFIG_DRM_SHMOBILE=m +CONFIG_DRM_SII902X=m +CONFIG_DRM_SII9234=m +CONFIG_DRM_SIL_SII8620=m +# CONFIG_DRM_STI is not set +CONFIG_DRM_STM=m +CONFIG_DRM_STM_DSI=m +CONFIG_DRM_TEGRA=m +# CONFIG_DRM_TEGRA_DEBUG is not set +CONFIG_DRM_TEGRA_STAGING=y +CONFIG_DRM_TILCDC=m +CONFIG_DRM_TINYDRM=m +CONFIG_DRM_TI_TFP410=m +CONFIG_DRM_TOSHIBA_TC358767=m +CONFIG_DRM_TTM=m +CONFIG_DRM_TVE200=m +CONFIG_DRM_UDL=m +CONFIG_DRM_VBOXVIDEO=m +CONFIG_DRM_VC4=m +CONFIG_DRM_VC4_HDMI_CEC=y +CONFIG_DRM_VGEM=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_VM=y +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_VMWGFX_FBCON=y +CONFIG_DS1682=m +CONFIG_DS1803=m +CONFIG_DS4424=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +CONFIG_DST_CACHE=y +CONFIG_DTC=y +CONFIG_DTL=y +CONFIG_DTLK=m +CONFIG_DT_IDLE_STATES=y +CONFIG_DUMMY=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_DVB_A8293=m +CONFIG_DVB_AF9013=m +CONFIG_DVB_AF9033=m +CONFIG_DVB_AS102=m +CONFIG_DVB_AS102_FE=m +CONFIG_DVB_ASCOT2E=m +CONFIG_DVB_ATBM8830=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_IR=y +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set +CONFIG_DVB_BCM3510=m +CONFIG_DVB_BT8XX=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET_PATCH=m +# CONFIG_DVB_C8SECTPFE is not set +CONFIG_DVB_CORE=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24117=m +CONFIG_DVB_CX24120=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_CXD2099=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_CXD2841ER=m +CONFIG_DVB_DDBRIDGE=m +# CONFIG_DVB_DDBRIDGE_MSIENABLE is not set +# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_DM1105=m +CONFIG_DVB_DRX39XYJ=m +CONFIG_DVB_DRXD=m +CONFIG_DVB_DRXK=m +CONFIG_DVB_DS3000=m +# CONFIG_DVB_DUMMY_FE is not set +CONFIG_DVB_DYNAMIC_MINORS=y +CONFIG_DVB_EC100=m +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_INPUT=y +CONFIG_DVB_GP8PSK_FE=m +CONFIG_DVB_HELENE=m +CONFIG_DVB_HOPPER=m +CONFIG_DVB_HORUS3A=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_L64781=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT3306A=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_LNBH25=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_M88DS3103=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_MB86A16=m +CONFIG_DVB_MB86A20S=m +CONFIG_DVB_MN88472=m +CONFIG_DVB_MN88473=m +CONFIG_DVB_MT312=m +CONFIG_DVB_MT352=m +CONFIG_DVB_MXL5XX=m +CONFIG_DVB_NET=y +CONFIG_DVB_NETUP_UNIDVB=m +CONFIG_DVB_NGENE=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_PLATFORM_DRIVERS=y +CONFIG_DVB_PLL=m +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_PT1=m +CONFIG_DVB_PT3=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m +CONFIG_DVB_RTL2832_SDR=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_S921=m +CONFIG_DVB_SI2165=m +CONFIG_DVB_SI2168=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_SMIPCIE=m +CONFIG_DVB_SP2=m +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STV0297=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV0367=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV0910=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_STV6110x=m +CONFIG_DVB_STV6111=m +CONFIG_DVB_TC90522=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_TDA10071=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA18271C2DD=m +CONFIG_DVB_TDA665x=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_DIB0090=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_USB=m +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_AF9035=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_AZ6007=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_CXUSB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_DIB3000MC=m +CONFIG_DVB_USB_DIBUSB_MB=m +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_DVBSKY=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_MXL111SF=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_PCTV452E=m +CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_TECHNISAT_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_ZD1301=m +CONFIG_DVB_VES1820=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_ZD1301_DEMOD=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_ZL10353=m +CONFIG_DWC_XLGMAC=m +CONFIG_DWC_XLGMAC_PCI=m +CONFIG_DWMAC_DWC_QOS_ETH=m +CONFIG_DWMAC_GENERIC=m +CONFIG_DWMAC_IPQ806X=m +CONFIG_DWMAC_MESON=m +CONFIG_DWMAC_ROCKCHIP=m +CONFIG_DWMAC_SUN8I=m +# CONFIG_DWMAC_SUNXI is not set +CONFIG_DW_APB_ICTL=y +CONFIG_DW_APB_TIMER=y +CONFIG_DW_APB_TIMER_OF=y +CONFIG_DW_DMAC=m +CONFIG_DW_DMAC_CORE=m +CONFIG_DW_DMAC_PCI=m +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y +CONFIG_EADM_SCH=m +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +CONFIG_EARLY_PRINTK_EFI=y +CONFIG_EARLY_PRINTK_USB=y +# CONFIG_EARLY_PRINTK_USB_XDBC is not set +CONFIG_EBC_C384_WDT=m +CONFIG_ECRYPT_FS=y +CONFIG_ECRYPT_FS_MESSAGING=y +CONFIG_EDAC=y +CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set +CONFIG_EDAC_AMD76X=m +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_CPC925=m +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_GHES=y +CONFIG_EDAC_HIGHBANK_L2=m +CONFIG_EDAC_HIGHBANK_MC=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7300=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I82860=m +CONFIG_EDAC_I82875P=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_IE31200=m +CONFIG_EDAC_LAYERSCAPE=m +# CONFIG_EDAC_LEGACY_SYSFS is not set +CONFIG_EDAC_PND2=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_SKX=m +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC_THUNDERX=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_XGENE=m +CONFIG_EDD=y +CONFIG_EDD_OFF=y +CONFIG_EEEPC_LAPTOP=m +CONFIG_EEEPC_WMI=m +CONFIG_EEH=y +CONFIG_EEPROM_93XX46=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_IDT_89HPESX=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EFIVAR_FS=y +CONFIG_EFI_ARMSTUB=y +CONFIG_EFI_BOOTLOADER_CONTROL=m +CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y +CONFIG_EFI_ESRT=y +# CONFIG_EFI_FAKE_MEMMAP is not set +CONFIG_EFI_MIXED=y +CONFIG_EFI_PARAMS_FROM_FDT=y +CONFIG_EFI_PARTITION=y +# CONFIG_EFI_PGT_DUMP is not set +CONFIG_EFI_RUNTIME_MAP=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_SIGNATURE_LIST_PARSER=y +CONFIG_EFI_STUB=y +CONFIG_EFI_TEST=m +CONFIG_EFI_VARS=y +CONFIG_EFI_VARS_PSTORE=m +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EISA=y +CONFIG_EISA_NAMES=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EL3=m +CONFIG_ELFCORE=y +CONFIG_ELF_CORE=y +CONFIG_EMAC_ROCKCHIP=m +# CONFIG_EMBEDDED is not set +CONFIG_EMU_SIZE=0x10000000 +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_ENA_ETHERNET=m +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +CONFIG_ENCRYPTED_KEYS=y +CONFIG_ENCX24J600=m +CONFIG_ENIC=m +CONFIG_ENVELOPE_DETECTOR=m +CONFIG_EPAPR_BOOT=y +CONFIG_EPAPR_PARAVIRT=y +CONFIG_EPIC100=m +CONFIG_EPOLL=y +CONFIG_EQUALIZER=m +CONFIG_ESI_DONGLE=m +CONFIG_ET131X=m +CONFIG_ETHERNET=y +CONFIG_EUROTECH_WDT=m +CONFIG_EVENTFD=y +CONFIG_EVENT_TRACING=y +CONFIG_EVM=y +CONFIG_EVM_ATTR_FSUUID=y +CONFIG_EVM_EXTRA_SMACK_XATTRS=y +CONFIG_EVM_X509_PATH="/etc/keys/x509_evm.der" +# CONFIG_EXOFS_DEBUG is not set +CONFIG_EXPERT=y +CONFIG_EXPORTFS=y +CONFIG_EXPORTFS_BLOCK_OPS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_ENCRYPTION=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_ENCRYPTION=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXT4_USE_FOR_EXT2=y +CONFIG_EXTCON_ADC_JACK=m +CONFIG_EXTCON_ARIZONA=m +CONFIG_EXTCON_AXP288=m +CONFIG_EXTCON_GPIO=m +CONFIG_EXTCON_INTEL_CHT_WC=m +CONFIG_EXTCON_INTEL_INT3496=m +CONFIG_EXTCON_MAX14577=m +CONFIG_EXTCON_MAX3355=m +CONFIG_EXTCON_MAX77693=m +CONFIG_EXTCON_MAX77843=m +CONFIG_EXTCON_MAX8997=m +CONFIG_EXTCON_PALMAS=m +CONFIG_EXTCON_QCOM_SPMI_MISC=m +CONFIG_EXTCON_RT8973A=m +CONFIG_EXTCON_SM5502=m +CONFIG_EXTCON_USBC_CROS_EC=m +CONFIG_EXTCON_USB_GPIO=m +CONFIG_EXTRA_FIRMWARE="" +CONFIG_EXTRA_TARGETS="" +CONFIG_EXYNOS5420_MCPM=y +CONFIG_EXYNOS_ADC=m +CONFIG_EXYNOS_AUDSS_CLK_CON=m +CONFIG_EXYNOS_CPU_SUSPEND=y +CONFIG_EXYNOS_IOMMU=y +# CONFIG_EXYNOS_IOMMU_DEBUG is not set +CONFIG_EXYNOS_PMU=y +CONFIG_EXYNOS_PMU_ARM_DRIVERS=y +CONFIG_EXYNOS_PM_DOMAINS=y +CONFIG_EXYNOS_SROM=y +CONFIG_EXYNOS_THERMAL=y +CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m +CONFIG_EZX_PCAP=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +CONFIG_F2FS_FS_ENCRYPTION=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_F2FS_FS_XATTR=y +# CONFIG_F2FS_IO_TRACE is not set +CONFIG_F2FS_STAT_FS=y +CONFIG_F71808E_WDT=m +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_FARSYNC=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +CONFIG_FAT_FS=y +# CONFIG_FAULT_INJECTION is not set +CONFIG_FA_DUMP=y +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +# CONFIG_FB_3DFX_I2C is not set +CONFIG_FB_ARC=m +CONFIG_FB_ARK=m +CONFIG_FB_ARMCLCD=y +CONFIG_FB_ASILIANT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_AUO_K1900=m +CONFIG_FB_AUO_K1901=m +CONFIG_FB_AUO_K190X=m +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_BROADSHEET=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_CIRRUS=m +CONFIG_FB_CMDLINE=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_CYBER2000_DDC=y +CONFIG_FB_DA8XX=m +CONFIG_FB_DDC=m +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_EFI=y +CONFIG_FB_FLEX=m +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_GX=m +CONFIG_FB_GEODE_GX1=m +CONFIG_FB_GEODE_LX=m +CONFIG_FB_HECUBA=m +CONFIG_FB_HGA=m +CONFIG_FB_HYPERV=m +CONFIG_FB_I740=m +CONFIG_FB_I810=m +# CONFIG_FB_I810_GTF is not set +CONFIG_FB_IMSTT=y +CONFIG_FB_IMX=m +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +CONFIG_FB_INTEL_I2C=y +CONFIG_FB_KYRO=m +CONFIG_FB_LE80578=m +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_I2C=y +# CONFIG_FB_MB862XX_LIME is not set +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_METRONOME=m +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_MX3=y +CONFIG_FB_MXS=m +CONFIG_FB_N411=m +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_NOTIFY=y +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_OF=y +CONFIG_FB_OMAP2=m +# CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV is not set +# CONFIG_FB_OMAP2_CONNECTOR_DVI is not set +# CONFIG_FB_OMAP2_CONNECTOR_HDMI is not set +# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set +CONFIG_FB_OMAP2_DSS=m +# CONFIG_FB_OMAP2_DSS_DEBUG is not set +# CONFIG_FB_OMAP2_DSS_DEBUGFS is not set +CONFIG_FB_OMAP2_DSS_DPI=y +# CONFIG_FB_OMAP2_DSS_DSI is not set +CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y +CONFIG_FB_OMAP2_DSS_INIT=y +CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0 +# CONFIG_FB_OMAP2_DSS_SDI is not set +CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y +CONFIG_FB_OMAP2_DSS_VENC=y +# CONFIG_FB_OMAP2_ENCODER_OPA362 is not set +# CONFIG_FB_OMAP2_ENCODER_TFP410 is not set +# CONFIG_FB_OMAP2_ENCODER_TPD12S015 is not set +CONFIG_FB_OMAP2_NUM_FBS=3 +# CONFIG_FB_OMAP2_PANEL_DPI is not set +# CONFIG_FB_OMAP2_PANEL_DSI_CM is not set +# CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02 is not set +# CONFIG_FB_OMAP2_PANEL_NEC_NL8048HL11 is not set +# CONFIG_FB_OMAP2_PANEL_SHARP_LS037V7DW01 is not set +# CONFIG_FB_OMAP2_PANEL_SONY_ACX565AKM is not set +# CONFIG_FB_OMAP2_PANEL_TPO_TD028TTEC1 is not set +# CONFIG_FB_OMAP2_PANEL_TPO_TD043MTEA1 is not set +CONFIG_FB_OMAP4_DSS_HDMI=y +# CONFIG_FB_OMAP5_DSS_HDMI is not set +CONFIG_FB_OPENCORES=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_PM3=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_BACKLIGHT=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_I2C=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_S3=m +CONFIG_FB_S3C=m +# CONFIG_FB_S3C_DEBUG_REGWRITE is not set +CONFIG_FB_S3_DDC=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SH_MOBILE_LCDC=m +CONFIG_FB_SH_MOBILE_MERAM=m +CONFIG_FB_SIMPLE=y +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_SM501=m +CONFIG_FB_SM712=m +CONFIG_FB_SM750=m +CONFIG_FB_SMSCUFX=m +CONFIG_FB_SSD1307=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_TFT=m +CONFIG_FB_TFT_AGM1264K_FL=m +CONFIG_FB_TFT_BD663474=m +CONFIG_FB_TFT_FBTFT_DEVICE=m +CONFIG_FB_TFT_HX8340BN=m +CONFIG_FB_TFT_HX8347D=m +CONFIG_FB_TFT_HX8353D=m +CONFIG_FB_TFT_HX8357D=m +CONFIG_FB_TFT_ILI9163=m +CONFIG_FB_TFT_ILI9320=m +CONFIG_FB_TFT_ILI9325=m +CONFIG_FB_TFT_ILI9340=m +CONFIG_FB_TFT_ILI9341=m +CONFIG_FB_TFT_ILI9481=m +CONFIG_FB_TFT_ILI9486=m +CONFIG_FB_TFT_PCD8544=m +CONFIG_FB_TFT_RA8875=m +CONFIG_FB_TFT_S6D02A1=m +CONFIG_FB_TFT_S6D1121=m +CONFIG_FB_TFT_SH1106=m +CONFIG_FB_TFT_SSD1289=m +CONFIG_FB_TFT_SSD1305=m +CONFIG_FB_TFT_SSD1306=m +CONFIG_FB_TFT_SSD1325=m +CONFIG_FB_TFT_SSD1331=m +CONFIG_FB_TFT_SSD1351=m +CONFIG_FB_TFT_ST7735R=m +CONFIG_FB_TFT_ST7789V=m +CONFIG_FB_TFT_TINYLCD=m +CONFIG_FB_TFT_TLS8204=m +CONFIG_FB_TFT_UC1611=m +CONFIG_FB_TFT_UC1701=m +CONFIG_FB_TFT_UPD161704=m +CONFIG_FB_TFT_WATTEROTT=m +CONFIG_FB_TILEBLITTING=y +CONFIG_FB_TMIO=m +CONFIG_FB_TMIO_ACCELL=y +CONFIG_FB_TRIDENT=m +CONFIG_FB_UDL=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +CONFIG_FB_VGA16=m +CONFIG_FB_VIA=m +# CONFIG_FB_VIA_DIRECT_PROCFS is not set +CONFIG_FB_VIA_X_COMPATIBILITY=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_XGI=m +CONFIG_FB_XILINX=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_FEC=y +CONFIG_FHANDLE=y +CONFIG_FIB_RULES=y +CONFIG_FILE_LOCKING=y +CONFIG_FIQ=y +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_SERIAL=m +CONFIG_FIRMWARE_EDID=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FLATMEM=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_FM10K=m +CONFIG_FMC_CHARDEV=m +CONFIG_FMC_FAKEDEV=m +CONFIG_FMC_TRIVIAL=m +CONFIG_FMC_WRITE_EEPROM=m +# CONFIG_FONT_10x18 is not set +CONFIG_FONT_6x10=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +CONFIG_FONT_ACORN_8x8=y +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_SUN8x16 is not set +CONFIG_FONT_SUPPORT=y +CONFIG_FORCEDETH=m +CONFIG_FORCE_SMP=y +CONFIG_FORTIFY_SOURCE=y +CONFIG_FPGA=m +CONFIG_FPGA_BRIDGE=m +CONFIG_FPGA_MGR_ALTERA_CVP=m +CONFIG_FPGA_MGR_ALTERA_PS_SPI=m +CONFIG_FPGA_MGR_ICE40_SPI=m +CONFIG_FPGA_MGR_XILINX_SPI=m +CONFIG_FPGA_REGION=m +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FRAME_POINTER=y +CONFIG_FRAME_VECTOR=y +CONFIG_FREEZER=y +CONFIG_FRONTSWAP=y +CONFIG_FSCACHE=m +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_FSCACHE_STATS=y +CONFIG_FSI=m +CONFIG_FSI_MASTER_GPIO=m +CONFIG_FSI_MASTER_HUB=m +CONFIG_FSI_SCOM=m +CONFIG_FSL_BMAN_TEST=m +# CONFIG_FSL_BMAN_TEST_API is not set +CONFIG_FSL_DPAA=y +CONFIG_FSL_DPAA2=y +CONFIG_FSL_DPAA2_ETH=m +CONFIG_FSL_DPAA_CHECKING=y +CONFIG_FSL_DPAA_ETH=m +CONFIG_FSL_EDMA=m +CONFIG_FSL_ERRATUM_A008585=y +CONFIG_FSL_FMAN=y +CONFIG_FSL_GUTS=y +CONFIG_FSL_IFC=y +CONFIG_FSL_LBC=y +CONFIG_FSL_MC_BUS=y +CONFIG_FSL_MC_DPIO=m +CONFIG_FSL_PQ_MDIO=m +# CONFIG_FSL_QMAN_TEST is not set +# CONFIG_FSL_ULI1575 is not set +CONFIG_FSL_XGMAC_MDIO=y +CONFIG_FSNOTIFY=y +CONFIG_FS_DAX=y +CONFIG_FS_DAX_PMD=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_IOMAP=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FTGMAC100=m +CONFIG_FTL=m +CONFIG_FTMAC100=m +CONFIG_FTRACE=y +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +CONFIG_FTRACE_SYSCALLS=y +# CONFIG_FTR_FIXUP_SELFTEST is not set +CONFIG_FUJITSU_ES=m +CONFIG_FUJITSU_LAPTOP=m +CONFIG_FUJITSU_TABLET=m +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FUNCTION_TRACER=y +CONFIG_FUSE_FS=y +CONFIG_FUSION_CTL=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_SAS=m +CONFIG_FUSION_SPI=m +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_FWTTY_MAX_CARD_PORTS=32 +CONFIG_FWTTY_MAX_TOTAL_PORTS=64 +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_GACT_PROB=y +CONFIG_GADGET_UAC1=y +# CONFIG_GADGET_UAC1_LEGACY is not set +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GARP=m +CONFIG_GART_IOMMU=y +# CONFIG_GCC_PLUGINS is not set +# CONFIG_GCOV_KERNEL is not set +CONFIG_GDB_SCRIPTS=y +CONFIG_GENERIC_ADC_BATTERY=m +CONFIG_GENERIC_ADC_THERMAL=m +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_GENERIC_ARCH_TOPOLOGY=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_CPU=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_GENERIC_EARLY_IOREMAP=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_IDLE_POLL_SETUP=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IRQ_CHIP=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_MSI_IRQ_DOMAIN=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_PINCONF=y +CONFIG_GENERIC_PINCTRL_GROUPS=y +CONFIG_GENERIC_PINMUX_FUNCTIONS=y +CONFIG_GENERIC_SCHED_CLOCK=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_TRACER=y +CONFIG_GENEVE=m +CONFIG_GENWQE=m +CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 +CONFIG_GEN_RTC=y +CONFIG_GEOS=y +# CONFIG_GE_FPGA is not set +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +CONFIG_GIANFAR=m +CONFIG_GIGASET_BASE=m +# CONFIG_GIGASET_CAPI is not set +# CONFIG_GIGASET_DEBUG is not set +# CONFIG_GIGASET_DUMMYLL is not set +CONFIG_GIGASET_I4L=y +CONFIG_GIGASET_M101=m +CONFIG_GIGASET_M105=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +# CONFIG_GOLDFISH is not set +# CONFIG_GOOGLE_FIRMWARE is not set +CONFIG_GP2AP020A00F=m +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_IRQCHIP=y +CONFIG_GPIO_104_DIO_48E=m +CONFIG_GPIO_104_IDIO_16=m +CONFIG_GPIO_104_IDI_48=m +CONFIG_GPIO_74X164=m +CONFIG_GPIO_74XX_MMIO=m +CONFIG_GPIO_ACPI=y +CONFIG_GPIO_ADNP=m +CONFIG_GPIO_ADP5520=m +CONFIG_GPIO_ADP5588=m +CONFIG_GPIO_ALTERA=m +CONFIG_GPIO_AMD8111=m +CONFIG_GPIO_AMDPT=m +CONFIG_GPIO_ARIZONA=m +CONFIG_GPIO_AXP209=m +CONFIG_GPIO_BD9571MWV=m +CONFIG_GPIO_BRCMSTB=m +CONFIG_GPIO_BT8XX=m +CONFIG_GPIO_CRYSTAL_COVE=m +CONFIG_GPIO_CS5535=m +CONFIG_GPIO_DA9052=m +CONFIG_GPIO_DA9055=m +CONFIG_GPIO_DLN2=m +CONFIG_GPIO_DWAPB=m +# CONFIG_GPIO_EM is not set +CONFIG_GPIO_EXAR=m +CONFIG_GPIO_F7188X=m +CONFIG_GPIO_FTGPIO010=y +CONFIG_GPIO_GPIO_MM=m +CONFIG_GPIO_GRGPIO=m +CONFIG_GPIO_ICH=m +CONFIG_GPIO_INTEL_MID=y +CONFIG_GPIO_IT87=m +CONFIG_GPIO_JANZ_TTL=m +CONFIG_GPIO_KEMPLD=m +CONFIG_GPIO_LP3943=m +CONFIG_GPIO_LP873X=m +CONFIG_GPIO_LP87565=m +CONFIG_GPIO_LYNXPOINT=y +CONFIG_GPIO_MAX3191X=m +CONFIG_GPIO_MAX7300=m +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MAX730X=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_MAX77620=m +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_MENZ127=m +# CONFIG_GPIO_MERRIFIELD is not set +CONFIG_GPIO_ML_IOH=m +# CONFIG_GPIO_MOCKUP is not set +CONFIG_GPIO_MPC8XXX=y +CONFIG_GPIO_MSIC=y +CONFIG_GPIO_MVEBU=y +CONFIG_GPIO_MXC=y +CONFIG_GPIO_OMAP=y +CONFIG_GPIO_PALMAS=y +CONFIG_GPIO_PCA953X=m +CONFIG_GPIO_PCF857X=m +CONFIG_GPIO_PCH=m +CONFIG_GPIO_PCI_IDIO_16=m +CONFIG_GPIO_PISOSR=m +CONFIG_GPIO_PL061=y +CONFIG_GPIO_RC5T583=y +CONFIG_GPIO_RCAR=m +CONFIG_GPIO_RDC321X=m +CONFIG_GPIO_SCH=m +CONFIG_GPIO_SCH311X=m +CONFIG_GPIO_STMPE=y +CONFIG_GPIO_SYSCON=m +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_TC3589X=y +CONFIG_GPIO_TEGRA=y +CONFIG_GPIO_THUNDERX=m +CONFIG_GPIO_TIMBERDALE=y +CONFIG_GPIO_TPIC2810=m +CONFIG_GPIO_TPS65086=m +CONFIG_GPIO_TPS65218=m +CONFIG_GPIO_TPS6586X=y +CONFIG_GPIO_TPS65910=y +CONFIG_GPIO_TPS65912=m +CONFIG_GPIO_TPS68470=y +CONFIG_GPIO_TS4800=m +CONFIG_GPIO_TS4900=m +CONFIG_GPIO_UCB1400=m +CONFIG_GPIO_UNIPHIER=m +CONFIG_GPIO_VF610=y +CONFIG_GPIO_VIPERBOARD=m +CONFIG_GPIO_VX855=m +CONFIG_GPIO_WATCHDOG=m +CONFIG_GPIO_WHISKEY_COVE=m +CONFIG_GPIO_WM831X=m +CONFIG_GPIO_WM8350=m +CONFIG_GPIO_WM8994=m +CONFIG_GPIO_WS16C48=m +CONFIG_GPIO_XGENE=y +CONFIG_GPIO_XGENE_SB=m +CONFIG_GPIO_XILINX=y +CONFIG_GPIO_XLP=m +CONFIG_GPIO_XRA1403=m +CONFIG_GPIO_ZEVIO=y +CONFIG_GPIO_ZYNQ=m +CONFIG_GRACE_PERIOD=m +CONFIG_GREENASIA_FF=y +CONFIG_GREYBUS=m +CONFIG_GREYBUS_AUDIO=m +CONFIG_GREYBUS_BOOTROM=m +CONFIG_GREYBUS_BRIDGED_PHY=m +CONFIG_GREYBUS_ES2=m +CONFIG_GREYBUS_FIRMWARE=m +CONFIG_GREYBUS_GPIO=m +CONFIG_GREYBUS_HID=m +CONFIG_GREYBUS_I2C=m +CONFIG_GREYBUS_LIGHT=m +CONFIG_GREYBUS_LOG=m +CONFIG_GREYBUS_LOOPBACK=m +CONFIG_GREYBUS_POWER=m +CONFIG_GREYBUS_PWM=m +CONFIG_GREYBUS_RAW=m +CONFIG_GREYBUS_SDIO=m +CONFIG_GREYBUS_SPI=m +CONFIG_GREYBUS_UART=m +CONFIG_GREYBUS_USB=m +CONFIG_GREYBUS_VIBRATOR=m +CONFIG_GRO_CELLS=y +CONFIG_GS_FPGABOOT=m +CONFIG_GTP=m +# CONFIG_GUP_BENCHMARK is not set +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HANDLE_DOMAIN_IRQ=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_HAPPYMEAL=m +CONFIG_HARDENED_USERCOPY=y +# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y +CONFIG_HARDLOCKUP_DETECTOR=y +CONFIG_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT_MAP=y +# CONFIG_HAS_RAPIDIO is not set +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y +# CONFIG_HAVE_ARCH_HASH is not set +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_HAVE_ARCH_PFN_VALID=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y +CONFIG_HAVE_ARM_ARCH_TIMER=y +CONFIG_HAVE_ARM_SCU=y +CONFIG_HAVE_ARM_SMCCC=y +CONFIG_HAVE_ARM_TWD=y +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_COPY_THREAD_TLS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_HAVE_DEBUG_BUGVERBOSE=y +CONFIG_HAVE_DEBUG_KMEMLEAK=y +CONFIG_HAVE_DEBUG_STACKOVERFLOW=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUTEX_CMPXCHG=y +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_HAVE_GENERIC_GUP=y +CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_ARCH=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_IDE=y +CONFIG_HAVE_IMA_KEXEC=y +CONFIG_HAVE_IMX_ANATOP=y +CONFIG_HAVE_IMX_GPC=y +CONFIG_HAVE_IMX_MMDC=y +CONFIG_HAVE_IMX_SRC=y +CONFIG_HAVE_INTEL_TXT=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_HAVE_KVM_INVALID_WAKEUPS=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQFD=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_LIVEPATCH=y +CONFIG_HAVE_MARCH_Z10_FEATURES=y +# CONFIG_HAVE_MARCH_Z13_FEATURES is not set +# CONFIG_HAVE_MARCH_Z14_FEATURES is not set +CONFIG_HAVE_MARCH_Z196_FEATURES=y +CONFIG_HAVE_MARCH_Z900_FEATURES=y +CONFIG_HAVE_MARCH_Z990_FEATURES=y +CONFIG_HAVE_MARCH_Z9_109_FEATURES=y +CONFIG_HAVE_MARCH_ZEC12_FEATURES=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_HAVE_MEMBLOCK_NODE_MAP=y +CONFIG_HAVE_MEMBLOCK_PHYS_MAP=y +CONFIG_HAVE_MEMORYLESS_NODES=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_HAVE_NET_DSA=y +CONFIG_HAVE_NMI=y +CONFIG_HAVE_NMI_WATCHDOG=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_PATA_PLATFORM=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_HAVE_RCU_TABLE_FREE=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RELIABLE_STACKTRACE=y +CONFIG_HAVE_S3C2410_I2C=y +CONFIG_HAVE_S3C2410_WATCHDOG=y +CONFIG_HAVE_S3C_RTC=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_SMP=y +CONFIG_HAVE_STACK_VALIDATION=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_UID16=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +# CONFIG_HCALL_STATS is not set +CONFIG_HD44780=m +CONFIG_HDC100X=m +CONFIG_HDLC=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_X25=m +CONFIG_HDMI=y +CONFIG_HDMI_LPE_AUDIO=m +CONFIG_HDM_DIM2=m +CONFIG_HDM_I2C=m +CONFIG_HDM_USB=m +CONFIG_HDQ_MASTER_OMAP=m +# CONFIG_HEADERS_CHECK is not set +CONFIG_HERMES=m +CONFIG_HERMES_CACHE_FW_ON_INIT=y +# CONFIG_HERMES_PRISM is not set +# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set +CONFIG_HFSPLUS_FS_POSIX_ACL=y +CONFIG_HI6220_MBOX=m +CONFIG_HI8435=m +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_A4TECH=m +CONFIG_HID_ACCUTOUCH=m +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_ALPS=m +CONFIG_HID_APPLE=m +CONFIG_HID_APPLEIR=m +CONFIG_HID_ASUS=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HID_BELKIN=m +CONFIG_HID_BETOP_FF=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CMEDIA=m +CONFIG_HID_CORSAIR=m +CONFIG_HID_CP2112=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_HID_ELECOM=m +CONFIG_HID_ELO=m +CONFIG_HID_EMS_FF=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GEMBIRD=m +CONFIG_HID_GENERIC=m +CONFIG_HID_GFRM=m +CONFIG_HID_GREENASIA=m +CONFIG_HID_GT683R=m +CONFIG_HID_GYRATION=m +CONFIG_HID_HOLTEK=m +CONFIG_HID_HYPERV_MOUSE=m +CONFIG_HID_ICADE=m +CONFIG_HID_ITE=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +CONFIG_HID_LCPOWER=m +CONFIG_HID_LED=m +CONFIG_HID_LENOVO=m +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_LOGITECH_HIDPP=m +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MAYFLASH=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTI=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_HID_PENMOUNT=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_CIR=y +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_LCD=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PID=y +CONFIG_HID_PLANTRONICS=m +CONFIG_HID_PRIMAX=m +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_RETRODE=m +CONFIG_HID_RMI=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SENSOR_ACCEL_3D=m +CONFIG_HID_SENSOR_ALS=m +CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +CONFIG_HID_SENSOR_DEVICE_ROTATION=m +CONFIG_HID_SENSOR_GYRO_3D=m +CONFIG_HID_SENSOR_HUB=m +CONFIG_HID_SENSOR_HUMIDITY=m +CONFIG_HID_SENSOR_IIO_COMMON=m +CONFIG_HID_SENSOR_IIO_TRIGGER=m +CONFIG_HID_SENSOR_INCLINOMETER_3D=m +CONFIG_HID_SENSOR_MAGNETOMETER_3D=m +CONFIG_HID_SENSOR_PRESS=m +CONFIG_HID_SENSOR_PROX=m +CONFIG_HID_SENSOR_TEMP=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_HID_SONY=m +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_THINGM=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_UDRAW_PS3=m +CONFIG_HID_WACOM=m +CONFIG_HID_WALTOP=m +CONFIG_HID_WIIMOTE=m +CONFIG_HID_XINMO=m +CONFIG_HID_ZEROPLUS=m +CONFIG_HID_ZYDACRON=m +CONFIG_HIGHMEM=y +# CONFIG_HIGHMEM4G is not set +CONFIG_HIGHMEM64G=y +CONFIG_HIGHPTE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_HINIC=m +CONFIG_HIP04_ETH=m +# CONFIG_HIPPI is not set +CONFIG_HISAX_16_0=y +CONFIG_HISAX_16_3=y +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_ASUSCOM=y +CONFIG_HISAX_AVM_A1=y +CONFIG_HISAX_AVM_A1_CS=m +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_BKM_A4T=y +# CONFIG_HISAX_DEBUG is not set +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_ELSA_CS=m +CONFIG_HISAX_ENTERNOW_PCI=y +CONFIG_HISAX_EURO=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_HFCS=y +CONFIG_HISAX_HFCUSB=m +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_HSTSAPHIR=y +CONFIG_HISAX_ISURF=y +CONFIG_HISAX_IX1MICROR2=y +CONFIG_HISAX_MAX_CARDS=8 +CONFIG_HISAX_MIC=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_NICCY=y +# CONFIG_HISAX_NO_KEYPAD is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_SEDLBAUER_CS=m +CONFIG_HISAX_SPORTSTER=y +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_TELEINT=y +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_TELES_CS=m +CONFIG_HISAX_W6692=y +CONFIG_HISILICON_ERRATUM_161010101=y +CONFIG_HISILICON_ERRATUM_161600802=y +CONFIG_HISILICON_IRQ_MBIGEN=y +CONFIG_HISI_FEMAC=m +CONFIG_HISI_KIRIN_DW_DSI=m +CONFIG_HISI_PMU=y +CONFIG_HISI_THERMAL=m +CONFIG_HIST_TRIGGERS=y +CONFIG_HIX5HD2_GMAC=m +CONFIG_HMC6352=m +CONFIG_HMC_DRV=m +CONFIG_HMM=y +CONFIG_HMM_MIRROR=y +CONFIG_HNS=m +CONFIG_HNS3=m +CONFIG_HNS3_DCB=y +CONFIG_HNS3_ENET=m +CONFIG_HNS3_HCLGE=m +CONFIG_HNS_DSAF=m +CONFIG_HNS_ENET=m +CONFIG_HNS_MDIO=m +CONFIG_HOLES_IN_ZONE=y +CONFIG_HOLTEK_FF=y +CONFIG_HOSTAP=m +CONFIG_HOSTAP_CS=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTESS_SV11=m +CONFIG_HOTPLUG_CPU=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_COMPAQ=m +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_HOTPLUG_PCI_POWERNV=m +CONFIG_HOTPLUG_PCI_RPA=m +CONFIG_HOTPLUG_PCI_RPA_DLPAR=m +CONFIG_HOTPLUG_PCI_S390=y +CONFIG_HP03=m +CONFIG_HP100=m +CONFIG_HP206C=m +CONFIG_HPET_EMULATE_RTC=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_MMAP_DEFAULT=y +CONFIG_HPET_TIMER=y +CONFIG_HPWDT_NMI_DECODING=y +CONFIG_HP_ACCEL=m +CONFIG_HP_WATCHDOG=m +CONFIG_HP_WIRELESS=m +CONFIG_HP_WMI=m +CONFIG_HSA_AMD=m +CONFIG_HSI_BOARDINFO=y +CONFIG_HSI_CHAR=m +CONFIG_HSU_DMA=m +CONFIG_HSU_DMA_PCI=m +CONFIG_HT16K33=m +CONFIG_HTC_EGPIO=y +CONFIG_HTC_I2CPLD=y +CONFIG_HTS221=m +CONFIG_HTS221_I2C=m +CONFIG_HTS221_SPI=m +CONFIG_HTU21=m +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y +CONFIG_HVCS=m +CONFIG_HVC_CONSOLE=y +# CONFIG_HVC_DCC is not set +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_IUCV=y +CONFIG_HVC_OLD_HVSI=y +CONFIG_HVC_OPAL=y +CONFIG_HVC_RTAS=y +# CONFIG_HVC_UDBG is not set +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_HV_PERF_CTRS=y +CONFIG_HWLAT_TRACER=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_HWMON_VID=m +CONFIG_HWPOISON_INJECT=m +CONFIG_HWSPINLOCK_OMAP=m +CONFIG_HWSPINLOCK_QCOM=m +CONFIG_HWSPINLOCK_SPRD=m +CONFIG_HW_CONSOLE=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_BCM2835=m +CONFIG_HW_RANDOM_CAVIUM=m +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_HISI=m +CONFIG_HW_RANDOM_IMX_RNGC=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_IPROC_RNG200=m +CONFIG_HW_RANDOM_MESON=m +CONFIG_HW_RANDOM_MSM=m +CONFIG_HW_RANDOM_MTK=m +CONFIG_HW_RANDOM_OMAP=m +CONFIG_HW_RANDOM_OMAP3_ROM=m +CONFIG_HW_RANDOM_POWERNV=m +CONFIG_HW_RANDOM_PSERIES=m +CONFIG_HW_RANDOM_S390=m +CONFIG_HW_RANDOM_TPM=m +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_HW_RANDOM_XGENE=m +CONFIG_HX711=m +CONFIG_HYPERV=m +CONFIG_HYPERVISOR_GUEST=y +CONFIG_HYPERV_BALLOON=m +CONFIG_HYPERV_KEYBOARD=m +CONFIG_HYPERV_NET=m +CONFIG_HYPERV_STORAGE=m +CONFIG_HYPERV_UTILS=m +CONFIG_HYPERV_VSOCKETS=m +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +# CONFIG_HZ_200 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_500 is not set +CONFIG_HZ_FIXED=0 +# CONFIG_HZ_PERIODIC is not set +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_ARB_GPIO_CHALLENGE=m +CONFIG_I2C_AXXIA=m +CONFIG_I2C_BCM2048=m +CONFIG_I2C_BCM2835=m +CONFIG_I2C_BCM_IPROC=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_BRCMSTB=m +# CONFIG_I2C_CADENCE is not set +CONFIG_I2C_CBUS_GPIO=m +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_CHT_WC=m +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CROS_EC_TUNNEL=m +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CORE is not set +CONFIG_I2C_DEMUX_PINCTRL=m +CONFIG_I2C_DESIGNWARE_BAYTRAIL=y +CONFIG_I2C_DESIGNWARE_CORE=y +CONFIG_I2C_DESIGNWARE_PCI=m +CONFIG_I2C_DESIGNWARE_PLATFORM=y +# CONFIG_I2C_DESIGNWARE_SLAVE is not set +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_DLN2=m +CONFIG_I2C_EG20T=m +CONFIG_I2C_EXYNOS5=m +CONFIG_I2C_GPIO=m +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_HID=m +CONFIG_I2C_HIX5HD2=m +CONFIG_I2C_I801=m +CONFIG_I2C_IMX_LPI2C=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_KEMPLD=m +CONFIG_I2C_MESON=m +CONFIG_I2C_MLXCPLD=m +CONFIG_I2C_MPC=m +CONFIG_I2C_MT65XX=m +CONFIG_I2C_MUX=m +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_GPMUX=m +CONFIG_I2C_MUX_LTC4306=m +CONFIG_I2C_MUX_MLXCPLD=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m +CONFIG_I2C_MUX_REG=m +CONFIG_I2C_MV64XXX=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_NOMADIK=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_OMAP=y +CONFIG_I2C_OPAL=y +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PCA_ISA=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_PXA=m +# CONFIG_I2C_PXA_PCI is not set +CONFIG_I2C_PXA_SLAVE=y +CONFIG_I2C_QUP=m +CONFIG_I2C_RCAR=m +CONFIG_I2C_RIIC=m +CONFIG_I2C_RK3X=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m +CONFIG_I2C_S3C2410=y +CONFIG_I2C_SCMI=m +CONFIG_I2C_SH_MOBILE=m +CONFIG_I2C_SI470X=m +CONFIG_I2C_SI4713=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_SLAVE_EEPROM=m +CONFIG_I2C_SMBUS=m +CONFIG_I2C_SPRD=y +CONFIG_I2C_STUB=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TEGRA=m +CONFIG_I2C_THUNDERX=m +CONFIG_I2C_TINY_USB=m +# CONFIG_I2C_UNIPHIER is not set +# CONFIG_I2C_UNIPHIER_F is not set +CONFIG_I2C_VERSATILE=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VIPERBOARD=m +CONFIG_I2C_XGENE_SLIMPRO=m +CONFIG_I2C_XILINX=m +CONFIG_I2C_XLP9XX=m +# CONFIG_I2C_XLR is not set +CONFIG_I40E=m +CONFIG_I40EVF=m +CONFIG_I40E_DCB=y +CONFIG_I82092=m +CONFIG_I82365=m +CONFIG_I8253_LOCK=y +CONFIG_I8K=m +# CONFIG_IA32_AOUT is not set +CONFIG_IA32_EMULATION=y +CONFIG_IAQCORE=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_IBMVETH=m +CONFIG_IBMVIO=y +CONFIG_IBMVNIC=m +CONFIG_IBM_ASM=m +CONFIG_IBM_BSR=m +# CONFIG_IBM_EMAC_EMAC4 is not set +# CONFIG_IBM_EMAC_MAL_CLR_ICINTSTAT is not set +# CONFIG_IBM_EMAC_MAL_COMMON_ERR is not set +# CONFIG_IBM_EMAC_NO_FLOW_CTRL is not set +# CONFIG_IBM_EMAC_RGMII is not set +# CONFIG_IBM_EMAC_TAH is not set +# CONFIG_IBM_EMAC_ZMII is not set +CONFIG_IBM_PARTITION=y +CONFIG_IBM_RTL=m +CONFIG_ICPLUS_PHY=m +CONFIG_ICS932S401=m +CONFIG_ICST=y +# CONFIG_IDE is not set +CONFIG_IDEAPAD_LAPTOP=m +CONFIG_IDLE_PAGE_TRACKING=y +CONFIG_IE6XX_WDT=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_IEEE802154_ADF7242=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_AT86RF230_DEBUGFS=y +CONFIG_IEEE802154_ATUSB=m +CONFIG_IEEE802154_CA8210=m +CONFIG_IEEE802154_CA8210_DEBUGFS=y +CONFIG_IEEE802154_CC2520=m +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKELB=m +CONFIG_IEEE802154_MRF24J40=m +# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set +CONFIG_IEEE802154_SOCKET=m +CONFIG_IFB=m +CONFIG_IGB=m +CONFIG_IGBVF=m +CONFIG_IGB_DCA=y +CONFIG_IGB_HWMON=y +CONFIG_IIO_ADIS_LIB=m +CONFIG_IIO_ADIS_LIB_BUFFER=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=m +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_HRTIMER_TRIGGER=m +CONFIG_IIO_INTERRUPT_TRIGGER=m +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_MS_SENSORS_I2C=m +CONFIG_IIO_MUX=m +CONFIG_IIO_SIMPLE_DUMMY=m +# CONFIG_IIO_SIMPLE_DUMMY_BUFFER is not set +# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set +CONFIG_IIO_SSP_SENSORHUB=m +CONFIG_IIO_SSP_SENSORS_COMMONS=m +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m +CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_IIO_ST_GYRO_I2C_3AXIS=m +CONFIG_IIO_ST_GYRO_SPI_3AXIS=m +CONFIG_IIO_ST_LSM6DSX=m +CONFIG_IIO_ST_LSM6DSX_I2C=m +CONFIG_IIO_ST_LSM6DSX_SPI=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_ST_MAGN_I2C_3AXIS=m +CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_IIO_ST_PRESS=m +CONFIG_IIO_ST_PRESS_I2C=m +CONFIG_IIO_ST_PRESS_SPI=m +CONFIG_IIO_ST_SENSORS_CORE=m +CONFIG_IIO_ST_SENSORS_I2C=m +CONFIG_IIO_ST_SENSORS_SPI=m +CONFIG_IIO_SW_DEVICE=m +CONFIG_IIO_SW_TRIGGER=m +CONFIG_IIO_SYSFS_TRIGGER=m +CONFIG_IIO_TIGHTLOOP_TRIGGER=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_TRIGGERED_BUFFER=m +CONFIG_IIO_TRIGGERED_EVENT=m +# CONFIG_IKCONFIG is not set +CONFIG_IMA=y +CONFIG_IMA_APPRAISE=y +CONFIG_IMA_APPRAISE_BOOTPARAM=y +# CONFIG_IMA_APPRAISE_SIGNED_INIT is not set +# CONFIG_IMA_BLACKLIST_KEYRING is not set +# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set +CONFIG_IMA_KEXEC=y +# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set +CONFIG_IMA_LSM_RULES=y +CONFIG_IMA_MEASURE_PCR_IDX=10 +# CONFIG_IMA_READ_POLICY is not set +# CONFIG_IMA_TEMPLATE is not set +CONFIG_IMA_TRUSTED_KEYRING=y +# CONFIG_IMA_WRITE_POLICY is not set +CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der" +CONFIG_IMG_ASCII_LCD=m +CONFIG_IMX2_WDT=m +CONFIG_IMX7D_ADC=m +CONFIG_IMX7_PM_DOMAINS=y +CONFIG_IMX_DMA=m +CONFIG_IMX_GPCV2=y +CONFIG_IMX_IPUV3_CORE=m +CONFIG_IMX_REMOTEPROC=m +CONFIG_IMX_SDMA=m +CONFIG_IMX_THERMAL=m +CONFIG_IMX_WEIM=y +CONFIG_INA2XX_ADC=m +CONFIG_INET=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_ESP_OFFLOAD=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET_AH=m +CONFIG_INET_DCCP_DIAG=m +CONFIG_INET_DIAG=m +CONFIG_INET_DIAG_DESTROY=y +CONFIG_INET_ESP=m +CONFIG_INET_ESP_OFFLOAD=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_RAW_DIAG=m +CONFIG_INET_SCTP_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_CXGB4=m +# CONFIG_INFINIBAND_EXP_USER_ACCESS is not set +CONFIG_INFINIBAND_HFI1=m +CONFIG_INFINIBAND_HNS=m +CONFIG_INFINIBAND_HNS_HIP06=m +CONFIG_INFINIBAND_HNS_HIP08=m +CONFIG_INFINIBAND_I40IW=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_ISERT=m +CONFIG_INFINIBAND_MTHCA=m +# CONFIG_INFINIBAND_MTHCA_DEBUG is not set +# CONFIG_INFINIBAND_NES_DEBUG is not set +CONFIG_INFINIBAND_ON_DEMAND_PAGING=y +CONFIG_INFINIBAND_OPA_VNIC=m +CONFIG_INFINIBAND_QEDR=m +CONFIG_INFINIBAND_QIB_DCA=y +CONFIG_INFINIBAND_RDMAVT=m +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_SRPT=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_USNIC=m +CONFIG_INFINIBAND_VMWARE_PVRDMA=m +CONFIG_INFTL=m +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_INLINE_READ_LOCK=y +CONFIG_INLINE_READ_LOCK_BH=y +CONFIG_INLINE_READ_LOCK_IRQ=y +CONFIG_INLINE_READ_LOCK_IRQSAVE=y +CONFIG_INLINE_READ_TRYLOCK=y +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_BH=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y +CONFIG_INLINE_SPIN_LOCK=y +CONFIG_INLINE_SPIN_LOCK_BH=y +CONFIG_INLINE_SPIN_LOCK_IRQ=y +CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y +CONFIG_INLINE_SPIN_TRYLOCK=y +CONFIG_INLINE_SPIN_TRYLOCK_BH=y +CONFIG_INLINE_SPIN_UNLOCK_BH=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y +CONFIG_INLINE_WRITE_LOCK=y +CONFIG_INLINE_WRITE_LOCK_BH=y +CONFIG_INLINE_WRITE_LOCK_IRQ=y +CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y +CONFIG_INLINE_WRITE_TRYLOCK=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_BH=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y +CONFIG_INOTIFY_USER=y +CONFIG_INPUT_88PM80X_ONKEY=m +CONFIG_INPUT_88PM860X_ONKEY=m +CONFIG_INPUT_AD714X=m +CONFIG_INPUT_AD714X_I2C=m +CONFIG_INPUT_AD714X_SPI=m +CONFIG_INPUT_ADXL34X=m +CONFIG_INPUT_ADXL34X_I2C=m +CONFIG_INPUT_ADXL34X_SPI=m +CONFIG_INPUT_APANEL=m +CONFIG_INPUT_ARIZONA_HAPTICS=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_ATMEL_CAPTOUCH=m +CONFIG_INPUT_AXP20X_PEK=m +CONFIG_INPUT_BMA150=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_CMA3000=m +CONFIG_INPUT_CMA3000_I2C=m +CONFIG_INPUT_CPCAP_PWRBUTTON=m +CONFIG_INPUT_DA9052_ONKEY=m +CONFIG_INPUT_DA9055_ONKEY=m +CONFIG_INPUT_DA9063_ONKEY=m +CONFIG_INPUT_DRV260X_HAPTICS=m +CONFIG_INPUT_DRV2665_HAPTICS=m +CONFIG_INPUT_DRV2667_HAPTICS=m +CONFIG_INPUT_E3X0_BUTTON=m +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_GP2A=m +CONFIG_INPUT_GPIO_BEEPER=m +CONFIG_INPUT_GPIO_DECODER=m +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_GPIO_TILT_POLLED=m +CONFIG_INPUT_HISI_POWERKEY=m +CONFIG_INPUT_IDEAPAD_SLIDEBAR=m +CONFIG_INPUT_IMS_PCU=m +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_INPUT_KEYBOARD=y +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_KXTJ9=m +# CONFIG_INPUT_KXTJ9_POLLED_MODE is not set +CONFIG_INPUT_LEDS=m +CONFIG_INPUT_MATRIXKMAP=m +CONFIG_INPUT_MAX77693_HAPTIC=m +CONFIG_INPUT_MAX8925_ONKEY=m +CONFIG_INPUT_MAX8997_HAPTIC=m +CONFIG_INPUT_MC13783_PWRBUTTON=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_MMA8450=m +CONFIG_INPUT_MOUSE=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_PALMAS_PWRBUTTON=m +CONFIG_INPUT_PCAP=m +CONFIG_INPUT_PCF50633_PMU=m +CONFIG_INPUT_PCF8574=m +CONFIG_INPUT_PCSPKR=m +CONFIG_INPUT_PM8941_PWRKEY=m +CONFIG_INPUT_PM8XXX_VIBRATOR=m +CONFIG_INPUT_PMIC8XXX_PWRKEY=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_PWM_BEEPER=m +CONFIG_INPUT_PWM_VIBRA=m +CONFIG_INPUT_REGULATOR_HAPTIC=m +CONFIG_INPUT_RETU_PWRBUTTON=m +CONFIG_INPUT_RK805_PWRKEY=m +CONFIG_INPUT_SOC_BUTTON_ARRAY=m +CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_INPUT_TPS65218_PWRBUTTON=m +CONFIG_INPUT_TWL4030_PWRBUTTON=m +CONFIG_INPUT_TWL4030_VIBRA=m +CONFIG_INPUT_TWL6040_VIBRA=m +CONFIG_INPUT_UINPUT=y +CONFIG_INPUT_WISTRON_BTNS=m +CONFIG_INPUT_WM831X_ON=m +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m +CONFIG_INPUT_YEALINK=m +CONFIG_INSTRUCTION_DECODER=y +CONFIG_INT3406_THERMAL=m +CONFIG_INT340X_THERMAL=m +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +CONFIG_INTEGRITY_AUDIT=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_TRUSTED_KEYRING=y +# CONFIG_INTEL_ATOMISP is not set +CONFIG_INTEL_BXTWC_PMIC_TMU=m +CONFIG_INTEL_BXT_PMIC_THERMAL=m +CONFIG_INTEL_CHT_INT33FE=m +CONFIG_INTEL_GTT=y +CONFIG_INTEL_HID_EVENT=m +CONFIG_INTEL_IDLE=y +CONFIG_INTEL_IDMA64=m +CONFIG_INTEL_INT0002_VGPIO=m +CONFIG_INTEL_IOATDMA=m +CONFIG_INTEL_IOMMU=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y +CONFIG_INTEL_IOMMU_SVM=y +CONFIG_INTEL_IPS=m +CONFIG_INTEL_ISH_HID=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MEI_ME=m +CONFIG_INTEL_MEI_TXE=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_INTEL_MENLOW=m +CONFIG_INTEL_MFLD_THERMAL=m +CONFIG_INTEL_MIC_BUS=m +CONFIG_INTEL_MIC_CARD=m +CONFIG_INTEL_MIC_HOST=m +CONFIG_INTEL_MIC_X100_DMA=m +CONFIG_INTEL_MID_POWER_BUTTON=m +CONFIG_INTEL_MID_PTI=m +CONFIG_INTEL_MID_WATCHDOG=m +CONFIG_INTEL_OAKTRAIL=m +CONFIG_INTEL_PCH_THERMAL=m +CONFIG_INTEL_PMC_CORE=y +CONFIG_INTEL_PMC_IPC=m +CONFIG_INTEL_POWERCLAMP=m +CONFIG_INTEL_PUNIT_IPC=m +CONFIG_INTEL_RAPL=m +CONFIG_INTEL_RDT=y +CONFIG_INTEL_RST=m +CONFIG_INTEL_SCU_IPC=y +CONFIG_INTEL_SCU_IPC_UTIL=m +CONFIG_INTEL_SCU_WATCHDOG=y +CONFIG_INTEL_SMARTCONNECT=m +CONFIG_INTEL_SOC_DTS_IOSF_CORE=m +CONFIG_INTEL_SOC_DTS_THERMAL=m +CONFIG_INTEL_SOC_PMIC=y +CONFIG_INTEL_SOC_PMIC_BXTWC=m +CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m +CONFIG_INTEL_SOC_PMIC_CHTWC=y +CONFIG_INTEL_TELEMETRY=m +CONFIG_INTEL_TH=m +# CONFIG_INTEL_TH_DEBUG is not set +CONFIG_INTEL_TH_GTH=m +CONFIG_INTEL_TH_MSU=m +CONFIG_INTEL_TH_PCI=m +CONFIG_INTEL_TH_PTI=m +CONFIG_INTEL_TH_STH=m +CONFIG_INTEL_TURBO_MAX_3=y +CONFIG_INTEL_TXT=y +CONFIG_INTEL_VBTN=m +CONFIG_INTEL_WMI_THUNDERBOLT=m +CONFIG_INTEL_XWAY_PHY=m +CONFIG_INTERVAL_TREE=y +# CONFIG_INTERVAL_TREE_TEST is not set +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_SPI=m +CONFIG_IOMMU_API=y +# CONFIG_IOMMU_DEBUG is not set +CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_HELPER=y +CONFIG_IOMMU_IO_PGTABLE=y +# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set +CONFIG_IOMMU_IO_PGTABLE_LPAE=y +# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_IOMMU_SUPPORT=y +CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_CFQ=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSF_MBI=y +CONFIG_IOSF_MBI_DEBUG=y +# CONFIG_IO_DELAY_0X80 is not set +CONFIG_IO_DELAY_0XED=y +# CONFIG_IO_DELAY_NONE is not set +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +# CONFIG_IO_DELAY_UDELAY is not set +CONFIG_IO_EVENT_IRQ=y +# CONFIG_IO_STRICT_DEVMEM is not set +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m +CONFIG_IPC_NS=y +# CONFIG_IPDDP is not set +# CONFIG_IPIC is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_DMI_DECODE=y +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_POWERNV=m +CONFIG_IPMI_POWEROFF=m +CONFIG_IPMI_PROC_INTERFACE=y +CONFIG_IPMI_SI=m +CONFIG_IPMI_SSIF=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPPP_FILTER=y +CONFIG_IPQ_GCC_4019=m +CONFIG_IPQ_GCC_806X=m +CONFIG_IPQ_GCC_8074=m +CONFIG_IPQ_LCC_806X=m +CONFIG_IPV6=y +CONFIG_IPV6_FOU=m +CONFIG_IPV6_FOU_TUNNEL=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_ILA=m +CONFIG_IPV6_MIP6=m +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_SEG6_HMAC=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_VTI=m +CONFIG_IPVLAN=m +CONFIG_IPVTAP=m +CONFIG_IPW2100=m +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2100_MONITOR=y +CONFIG_IPW2200=m +# CONFIG_IPW2200_DEBUG is not set +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPWIRELESS=m +# CONFIG_IPX_INTERN is not set +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_DCCP=m +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +# CONFIG_IP_DCCP_CCID3_DEBUG is not set +# CONFIG_IP_DCCP_DEBUG is not set +CONFIG_IP_DCCP_TFRC_LIB=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MROUTE=y +# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set +CONFIG_IP_MULTICAST=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARP_MANGLE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_IP_PNP is not set +CONFIG_IP_ROUTE_CLASSID=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_SCTP=m +CONFIG_IP_SET=m +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMAC=m +CONFIG_IP_SET_HASH_IPMARK=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_MAC=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_FO=m +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_IPV6=y +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_OVF=m +CONFIG_IP_VS_PE_SIP=m +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_SCTP=y +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SH_TAB_BITS=8 +CONFIG_IP_VS_TAB_BITS=12 +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_WRR=m +CONFIG_IRCOMM=m +CONFIG_IRDA=m +CONFIG_IRDA_CACHE_LAST_LSAP=y +# CONFIG_IRDA_DEBUG is not set +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_ULTRA=y +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRQCHIP=y +# CONFIG_IRQSOFF_TRACER is not set +CONFIG_IRQ_ALL_CPUS=y +CONFIG_IRQ_CROSSBAR=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_IRQ_POLL=y +CONFIG_IRQ_REMAP=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_IRQ_UNIPHIER_AIDET=y +CONFIG_IRQ_WORK=y +CONFIG_IRTTY_SIR=m +CONFIG_IR_ENE=m +CONFIG_IR_FINTEK=m +CONFIG_IR_GPIO_CIR=m +CONFIG_IR_GPIO_TX=m +CONFIG_IR_HIX5HD2=m +CONFIG_IR_IGORPLUGUSB=m +CONFIG_IR_IGUANA=m +CONFIG_IR_IMON=m +CONFIG_IR_ITE_CIR=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_LIRC_CODEC=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_IR_MESON=m +CONFIG_IR_MTK=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_PWM_TX=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_RX51=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_SERIAL=m +CONFIG_IR_SERIAL_TRANSMITTER=y +CONFIG_IR_SHARP_DECODER=m +CONFIG_IR_SIR=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_SPI=m +CONFIG_IR_STREAMZAP=m +CONFIG_IR_SUNXI=m +CONFIG_IR_TANGO=m +CONFIG_IR_TTUSBIR=m +CONFIG_IR_WINBOND_CIR=m +CONFIG_IR_XMP_DECODER=m +CONFIG_ISA=y +CONFIG_ISAPNP=y +CONFIG_ISA_BUS=y +CONFIG_ISA_DMA_API=y +CONFIG_ISCSI_BOOT_SYSFS=m +CONFIG_ISCSI_IBFT=m +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m +CONFIG_ISCSI_TCP=m +CONFIG_ISDN=y +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m +# CONFIG_ISDN_CAPI_CAPIDRV_VERBOSE is not set +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_MAINT=m +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVERSION=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_ISDN_DRV_HISAX=m +CONFIG_ISDN_HDLC=m +CONFIG_ISDN_I4L=m +CONFIG_ISDN_MPP=y +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_TTY_FAX=y +CONFIG_ISDN_X25=y +CONFIG_ISI=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_ISL29125=m +CONFIG_ISO9660_FS=m +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_ITCO_WDT=m +CONFIG_ITG3200=m +CONFIG_IUCV=y +CONFIG_IWL3945=m +CONFIG_IWL4965=m +CONFIG_IWLDVM=m +CONFIG_IWLEGACY=m +# CONFIG_IWLEGACY_DEBUG is not set +CONFIG_IWLEGACY_DEBUGFS=y +CONFIG_IWLMVM=m +CONFIG_IWLWIFI=m +# CONFIG_IWLWIFI_BCAST_FILTERING is not set +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TRACING=y +CONFIG_IWLWIFI_LEDS=y +CONFIG_IWLWIFI_OPMODE_MODULAR=y +# CONFIG_IWLWIFI_PCIE_RTPM is not set +CONFIG_IWMMXT=y +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBEVF=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_HWMON=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_JFFS2_CMODE_FAVOURLZO=y +# CONFIG_JFFS2_CMODE_NONE is not set +# CONFIG_JFFS2_CMODE_PRIORITY is not set +# CONFIG_JFFS2_CMODE_SIZE is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +CONFIG_JFS_STATISTICS=y +CONFIG_JOLIET=y +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_AS5011=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_PSXPAD_SPI=m +CONFIG_JOYSTICK_PSXPAD_SPI_FF=y +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_WALKERA0701=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JSA1212=m +CONFIG_JUMP_LABEL_FEATURE_CHECKS=y +# CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG is not set +CONFIG_K3_DMA=m +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_BASE_RELATIVE=y +# CONFIG_KASAN is not set +# CONFIG_KCOV is not set +CONFIG_KDB_CONTINUE_CATASTROPHIC=0 +CONFIG_KDB_DEFAULT_ENABLE=0x1 +CONFIG_KDB_KEYBOARD=y +CONFIG_KEMPLD_WDT=m +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZ4 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_KERNEL_MODE_NEON=y +CONFIG_KERNEL_START=0xc000000000000000 +CONFIG_KERNFS=y +CONFIG_KEXEC=y +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y +CONFIG_KEXEC_CORE=y +CONFIG_KEXEC_FILE=y +CONFIG_KEXEC_JUMP=y +CONFIG_KEXEC_VERIFY_SIG=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_ADP5520=m +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ADP5589=m +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_BCM=m +CONFIG_KEYBOARD_CAP11XX=m +CONFIG_KEYBOARD_CROS_EC=m +CONFIG_KEYBOARD_DLINK_DIR685=m +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_GPIO_POLLED=m +CONFIG_KEYBOARD_IMX=m +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_LM8323=m +CONFIG_KEYBOARD_LM8333=m +CONFIG_KEYBOARD_MATRIX=m +CONFIG_KEYBOARD_MAX7359=m +CONFIG_KEYBOARD_MCS=m +CONFIG_KEYBOARD_MPR121=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_NVEC=m +CONFIG_KEYBOARD_OMAP4=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_PMIC8XXX=m +CONFIG_KEYBOARD_QT1070=m +CONFIG_KEYBOARD_QT2160=m +CONFIG_KEYBOARD_SAMSUNG=m +CONFIG_KEYBOARD_SH_KEYSC=m +CONFIG_KEYBOARD_SNVS_PWRKEY=m +CONFIG_KEYBOARD_STMPE=m +CONFIG_KEYBOARD_STOWAWAY=m +# CONFIG_KEYBOARD_SUN4I_LRADC is not set +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_TC3589X=m +CONFIG_KEYBOARD_TCA6416=m +CONFIG_KEYBOARD_TCA8418=m +CONFIG_KEYBOARD_TEGRA=m +CONFIG_KEYBOARD_TM2_TOUCHKEY=m +CONFIG_KEYBOARD_TWL4030=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYS=y +CONFIG_KEYS_COMPAT=y +CONFIG_KEY_DH_OPERATIONS=y +CONFIG_KGDB=y +CONFIG_KGDB_KDB=y +CONFIG_KGDB_LOW_LEVEL_TRAP=y +CONFIG_KGDB_SERIAL_CONSOLE=y +# CONFIG_KGDB_TESTS is not set +CONFIG_KINGSUN_DONGLE=m +CONFIG_KMSG_IDS=y +CONFIG_KMX61=m +CONFIG_KPROBES=y +CONFIG_KPROBES_ON_FTRACE=y +# CONFIG_KPROBES_SANITY_TEST is not set +CONFIG_KPROBE_EVENTS=y +CONFIG_KRETPROBES=y +CONFIG_KS0108=m +CONFIG_KS0108_DELAY=2 +CONFIG_KS0108_PORT=0x378 +CONFIG_KS7010=m +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KS959_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KSM=y +CONFIG_KSZ884X_PCI=m +CONFIG_KUSER_HELPERS=y +CONFIG_KVM_AMD=m +CONFIG_KVM_ARM_HOST=y +CONFIG_KVM_ARM_PMU=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_KVM_ASYNC_PF_SYNC=y +CONFIG_KVM_BOOK3S_64=m +CONFIG_KVM_BOOK3S_64_HANDLER=y +CONFIG_KVM_BOOK3S_64_HV=m +CONFIG_KVM_BOOK3S_64_PR=m +CONFIG_KVM_BOOK3S_HANDLER=y +# CONFIG_KVM_BOOK3S_HV_EXIT_TIMING is not set +CONFIG_KVM_BOOK3S_HV_POSSIBLE=y +CONFIG_KVM_BOOK3S_PR_POSSIBLE=y +CONFIG_KVM_COMPAT=y +CONFIG_KVM_DEBUG_FS=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_GUEST=y +CONFIG_KVM_INTEL=m +CONFIG_KVM_MMIO=y +# CONFIG_KVM_MMU_AUDIT is not set +# CONFIG_KVM_S390_UCONTROL is not set +CONFIG_KVM_VFIO=y +CONFIG_KVM_XICS=y +CONFIG_KVM_XIVE=y +CONFIG_KXCJK1013=m +CONFIG_KXSD9=m +CONFIG_KXSD9_I2C=m +CONFIG_KXSD9_SPI=m +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_ETH=m +CONFIG_L2TP_IP=m +CONFIG_L2TP_V3=y +CONFIG_LANCE=m +CONFIG_LANMEDIA=m +CONFIG_LAPBETHER=m +CONFIG_LATTICE_ECP3_CONFIG=m +CONFIG_LBDAF=y +CONFIG_LCD_AMS369FG06=m +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_HX8357=m +CONFIG_LCD_ILI922X=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_L4F00242T03=m +CONFIG_LCD_LD9040=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LMS501KF03=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_PLATFORM=m +CONFIG_LCD_S6E63M0=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +CONFIG_LCS=m +# CONFIG_LDM_DEBUG is not set +# CONFIG_LD_HEAD_STUB_CATCH is not set +CONFIG_LEDS_88PM860X=m +CONFIG_LEDS_AAT1290=m +CONFIG_LEDS_ADP5520=m +CONFIG_LEDS_APU=m +CONFIG_LEDS_AS3645A=m +CONFIG_LEDS_ASIC3=y +CONFIG_LEDS_BCM6328=m +CONFIG_LEDS_BCM6358=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_BLINKM=m +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=m +CONFIG_LEDS_CLEVO_MAIL=m +CONFIG_LEDS_CPCAP=m +CONFIG_LEDS_DA903X=m +CONFIG_LEDS_DA9052=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_IS31FL319X=m +CONFIG_LEDS_IS31FL32XX=m +CONFIG_LEDS_KTD2692=m +CONFIG_LEDS_LM3530=m +CONFIG_LEDS_LM3533=m +CONFIG_LEDS_LM355x=m +CONFIG_LEDS_LM3642=m +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_LP3952=m +CONFIG_LEDS_LP5521=m +CONFIG_LEDS_LP5523=m +CONFIG_LEDS_LP5562=m +CONFIG_LEDS_LP55XX_COMMON=m +CONFIG_LEDS_LP8501=m +CONFIG_LEDS_LP8788=m +CONFIG_LEDS_LP8860=m +CONFIG_LEDS_LT3593=m +CONFIG_LEDS_MAX77693=m +CONFIG_LEDS_MAX8997=m +CONFIG_LEDS_MC13783=m +CONFIG_LEDS_MENF21BMC=m +CONFIG_LEDS_MLXCPLD=m +CONFIG_LEDS_MT6323=m +CONFIG_LEDS_NET48XX=m +CONFIG_LEDS_NIC78BX=m +CONFIG_LEDS_NS2=m +CONFIG_LEDS_OT200=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA9532_GPIO=y +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_PCA955X_GPIO=y +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_PM8058=m +CONFIG_LEDS_POWERNV=m +CONFIG_LEDS_PWM=m +CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_TCA6507=m +CONFIG_LEDS_TLC591XX=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_ACTIVITY=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LEDS_TRIGGER_DISK=y +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_ONESHOT=m +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_USER=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_WRAP=m +CONFIG_LED_TRIGGER_PHY=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +CONFIG_LEGACY_VSYSCALL_EMULATE=y +# CONFIG_LEGACY_VSYSCALL_NATIVE is not set +# CONFIG_LEGACY_VSYSCALL_NONE is not set +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +CONFIG_LIB80211_CRYPT_WEP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_LIBCRC32C=m +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_CS=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_MESH=y +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_LIBFDT=y +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_LIDAR_LITE_V2=m +CONFIG_LIQUIDIO=m +CONFIG_LIQUIDIO_VF=m +CONFIG_LIRC=m +CONFIG_LIRC_STAGING=y +CONFIG_LIRC_ZILOG=m +CONFIG_LITELINK_DONGLE=m +CONFIG_LIVEPATCH=y +# CONFIG_LKDTM is not set +CONFIG_LLC=m +CONFIG_LMP91000=m +CONFIG_LNET=m +CONFIG_LNET_MAX_PAYLOAD=1048576 +CONFIG_LNET_SELFTEST=m +CONFIG_LNET_XPRT_IB=m +CONFIG_LOAD_UEFI_KEYS=y +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_LOCKD=m +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_LOCKD_V4=y +CONFIG_LOCKUP_DETECTOR=y +CONFIG_LOCK_SPIN_ON_OWNER=y +# CONFIG_LOCK_STAT is not set +# CONFIG_LOCK_TORTURE_TEST is not set +CONFIG_LOGIG940_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIWHEELS_FF=y +# CONFIG_LOGO is not set +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_LOOPBACK_TARGET=m +CONFIG_LP8788_ADC=m +CONFIG_LPARCFG=y +# CONFIG_LP_CONSOLE is not set +CONFIG_LRU_CACHE=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_LS_SCFG_MSI=y +CONFIG_LTC2471=m +CONFIG_LTC2485=m +CONFIG_LTC2497=m +CONFIG_LTC2632=m +CONFIG_LTE_GDM724X=m +CONFIG_LTPC=m +CONFIG_LTR501=m +# CONFIG_LUSTRE_DEBUG_EXPENSIVE_CHECK is not set +CONFIG_LUSTRE_FS=m +CONFIG_LUSTRE_TRANSLATE_ERRNOS=y +CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y +CONFIG_LXT_PHY=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586MMX is not set +# CONFIG_M586TSC is not set +CONFIG_M62332=m +CONFIG_M686=y +CONFIG_MA600_DONGLE=m +CONFIG_MAC80211=m +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_HWSIM=m +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_MESSAGE_TRACING=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_MINSTREL_VHT=y +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_MAC802154=m +CONFIG_MACB=m +CONFIG_MACB_PCI=m +CONFIG_MACB_USE_HWSTAMP=y +CONFIG_MACHZ_WDT=m +CONFIG_MACH_ARMADA_370=y +CONFIG_MACH_ARMADA_375=y +CONFIG_MACH_ARMADA_38X=y +CONFIG_MACH_ARMADA_39X=y +CONFIG_MACH_ARMADA_XP=y +# CONFIG_MACH_ARTPEC6 is not set +CONFIG_MACH_BERLIN_BG2=y +CONFIG_MACH_BERLIN_BG2CD=y +CONFIG_MACH_BERLIN_BG2Q=y +CONFIG_MACH_DOVE=y +CONFIG_MACH_MESON6=y +CONFIG_MACH_MESON8=y +CONFIG_MACH_MESON8B=y +CONFIG_MACH_MT2701=y +CONFIG_MACH_MT6589=y +CONFIG_MACH_MT6592=y +CONFIG_MACH_MT7623=y +CONFIG_MACH_MT8127=y +CONFIG_MACH_MT8135=y +CONFIG_MACH_MVEBU_ANY=y +CONFIG_MACH_MVEBU_V7=y +# CONFIG_MACH_OMAP3517EVM is not set +CONFIG_MACH_OMAP3_PANDORA=y +CONFIG_MACH_OMAP_GENERIC=y +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MACSEC=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_MAC_EMUMOUSEBTN=m +CONFIG_MAG3110=m +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAILBOX_TEST=m +CONFIG_MANAGER_SBS=m +CONFIG_MANDATORY_FILE_LOCKING=y +CONFIG_MANTIS_CORE=m +# CONFIG_MARCH_Z10 is not set +# CONFIG_MARCH_Z10_TUNE is not set +# CONFIG_MARCH_Z13 is not set +# CONFIG_MARCH_Z13_TUNE is not set +# CONFIG_MARCH_Z14 is not set +# CONFIG_MARCH_Z14_TUNE is not set +# CONFIG_MARCH_Z196 is not set +# CONFIG_MARCH_Z196_TUNE is not set +# CONFIG_MARCH_Z900 is not set +# CONFIG_MARCH_Z900_TUNE is not set +# CONFIG_MARCH_Z990 is not set +# CONFIG_MARCH_Z990_TUNE is not set +# CONFIG_MARCH_Z9_109 is not set +# CONFIG_MARCH_Z9_109_TUNE is not set +CONFIG_MARCH_ZEC12=y +CONFIG_MARCH_ZEC12_TUNE=y +CONFIG_MARVELL_10G_PHY=m +CONFIG_MARVELL_PHY=m +# CONFIG_MATH_EMULATION is not set +# CONFIG_MATOM is not set +CONFIG_MAX1027=m +CONFIG_MAX11100=m +CONFIG_MAX1118=m +CONFIG_MAX1363=m +CONFIG_MAX30100=m +CONFIG_MAX30102=m +CONFIG_MAX44000=m +CONFIG_MAX517=m +CONFIG_MAX5481=m +CONFIG_MAX5487=m +CONFIG_MAX5821=m +CONFIG_MAX77620_THERMAL=m +CONFIG_MAX77620_WATCHDOG=m +CONFIG_MAX8925_POWER=m +CONFIG_MAX9611=m +CONFIG_MAXIM_THERMOCOUPLE=m +CONFIG_MAXSMP=y +CONFIG_MAX_PHYSMEM_BITS=46 +CONFIG_MAX_RAW_DEVS=256 +CONFIG_MAY_USE_DEVLINK=m +CONFIG_MC3230=m +CONFIG_MCB_LPC=m +CONFIG_MCB_PCI=m +# CONFIG_MCORE2 is not set +CONFIG_MCP2120_DONGLE=m +CONFIG_MCP320X=m +CONFIG_MCP3422=m +CONFIG_MCP4131=m +CONFIG_MCP4531=m +CONFIG_MCP4725=m +CONFIG_MCP4922=m +CONFIG_MCPM=y +CONFIG_MCPM_QUAD_CLUSTER=y +# CONFIG_MCRUSOE is not set +CONFIG_MCS_FIR=m +# CONFIG_MCYRIXIII is not set +CONFIG_MD=y +CONFIG_MDA_CONSOLE=m +CONFIG_MDIO=m +# CONFIG_MDIO_BCM_IPROC is not set +CONFIG_MDIO_BCM_UNIMAC=m +CONFIG_MDIO_BUS_MUX_BCM_IPROC=y +CONFIG_MDIO_BUS_MUX_GPIO=m +CONFIG_MDIO_BUS_MUX_MMIOREG=m +CONFIG_MDIO_CAVIUM=m +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_GPIO=m +CONFIG_MDIO_HISI_FEMAC=m +CONFIG_MDIO_OCTEON=m +# CONFIG_MDIO_SUN4I is not set +CONFIG_MDIO_XGENE=m +CONFIG_MDM_GCC_9615=m +CONFIG_MDM_LCC_9615=m +CONFIG_MD_AUTODETECT=y +CONFIG_MD_CLUSTER=m +CONFIG_MD_FAULTY=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MEDIATEK_MT6577_AUXADC=m +CONFIG_MEDIATEK_WATCHDOG=m +CONFIG_MEDIA_ALTERA_CI=m +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_CEC_RC=y +CONFIG_MEDIA_CEC_SUPPORT=y +CONFIG_MEDIA_COMMON_OPTIONS=y +CONFIG_MEDIA_CONTROLLER=y +# CONFIG_MEDIA_CONTROLLER_DVB is not set +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_PCI_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_M88RS6000T=m +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MSI001=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MXL301RF=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_QM1D1C0042=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_R820T=m +CONFIG_MEDIA_TUNER_SI2157=m +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC4000=m +CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_MEDIA_USB_SUPPORT=y +# CONFIG_MEFFICEON is not set +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_MM=m +# CONFIG_MELAN is not set +CONFIG_MEMBARRIER=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +# CONFIG_MEMCG_SWAP_ENABLED is not set +CONFIG_MEMORY_BALLOON=y +CONFIG_MEMORY_FAILURE=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m +# CONFIG_MEMSTICK_DEBUG is not set +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_PCI=m +CONFIG_MEMSTICK_REALTEK_USB=m +CONFIG_MEMSTICK_TIFM_MS=m +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MEMTEST=y +CONFIG_MENF21BMC_WATCHDOG=m +CONFIG_MEN_A21_WDT=m +CONFIG_MEN_Z188_ADC=m +CONFIG_MESON6_TIMER=y +CONFIG_MESON_GXBB_WATCHDOG=m +CONFIG_MESON_GXL_PHY=m +CONFIG_MESON_GX_PM_DOMAINS=y +CONFIG_MESON_GX_SOCINFO=y +CONFIG_MESON_IRQ_GPIO=y +CONFIG_MESON_MX_EFUSE=m +CONFIG_MESON_MX_SOCINFO=y +CONFIG_MESON_SARADC=m +# CONFIG_MESON_SM is not set +CONFIG_MESON_WATCHDOG=m +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_MFD_88PM800=m +CONFIG_MFD_88PM805=m +CONFIG_MFD_88PM860X=y +CONFIG_MFD_AAT2870_CORE=y +# CONFIG_MFD_AC100 is not set +CONFIG_MFD_ACT8945A=m +CONFIG_MFD_ARIZONA=y +CONFIG_MFD_ARIZONA_I2C=m +CONFIG_MFD_ARIZONA_SPI=m +CONFIG_MFD_AS3711=y +CONFIG_MFD_AS3722=y +CONFIG_MFD_ASIC3=y +CONFIG_MFD_ATMEL_FLEXCOM=m +CONFIG_MFD_ATMEL_HLCDC=m +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m +CONFIG_MFD_AXP20X_RSB=m +CONFIG_MFD_BCM590XX=m +CONFIG_MFD_BD9571MWV=m +CONFIG_MFD_CPCAP=m +CONFIG_MFD_CROS_EC=m +CONFIG_MFD_CROS_EC_I2C=m +CONFIG_MFD_CROS_EC_SPI=m +CONFIG_MFD_CS47L24=y +CONFIG_MFD_CS5535=m +CONFIG_MFD_DA9052_I2C=y +CONFIG_MFD_DA9052_SPI=y +CONFIG_MFD_DA9055=y +CONFIG_MFD_DA9062=m +CONFIG_MFD_DA9063=y +CONFIG_MFD_DA9150=m +CONFIG_MFD_DLN2=m +CONFIG_MFD_EXYNOS_LPASS=m +CONFIG_MFD_HI6421_PMIC=m +CONFIG_MFD_HI655X_PMIC=m +CONFIG_MFD_INTEL_LPSS=m +CONFIG_MFD_INTEL_LPSS_ACPI=m +CONFIG_MFD_INTEL_LPSS_PCI=m +CONFIG_MFD_INTEL_MSIC=y +CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m +CONFIG_MFD_LM3533=m +CONFIG_MFD_LP3943=m +CONFIG_MFD_LP8788=y +CONFIG_MFD_MAX14577=y +CONFIG_MFD_MAX77620=y +CONFIG_MFD_MAX77686=y +CONFIG_MFD_MAX77693=y +CONFIG_MFD_MAX77843=y +CONFIG_MFD_MAX8907=m +CONFIG_MFD_MAX8925=y +CONFIG_MFD_MAX8997=y +CONFIG_MFD_MAX8998=y +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_I2C=m +CONFIG_MFD_MC13XXX_SPI=m +CONFIG_MFD_MENF21BMC=m +CONFIG_MFD_NVEC=m +CONFIG_MFD_OMAP_USB_HOST=y +CONFIG_MFD_PALMAS=y +CONFIG_MFD_PCF50633=m +CONFIG_MFD_PM8XXX=m +CONFIG_MFD_QCOM_RPM=m +CONFIG_MFD_RC5T583=y +CONFIG_MFD_RDC321X=m +CONFIG_MFD_RETU=m +CONFIG_MFD_RK808=m +CONFIG_MFD_RN5T618=m +CONFIG_MFD_RT5033=m +CONFIG_MFD_RTSX_USB=m +CONFIG_MFD_SC27XX_PMIC=m +CONFIG_MFD_SEC_CORE=y +CONFIG_MFD_SI476X_CORE=m +CONFIG_MFD_SKY81452=m +CONFIG_MFD_SM501_GPIO=y +CONFIG_MFD_SMSC=y +CONFIG_MFD_SPMI_PMIC=m +CONFIG_MFD_STMPE=y +CONFIG_MFD_SUN4I_GPADC=m +CONFIG_MFD_SUN6I_PRCM=y +CONFIG_MFD_T7L66XB=y +CONFIG_MFD_TC3589X=y +CONFIG_MFD_TC6387XB=y +CONFIG_MFD_TC6393XB=y +CONFIG_MFD_TIMBERDALE=m +CONFIG_MFD_TI_LMU=m +CONFIG_MFD_TI_LP873X=m +CONFIG_MFD_TI_LP87565=m +CONFIG_MFD_TPS65086=m +CONFIG_MFD_TPS65090=y +CONFIG_MFD_TPS65218=m +CONFIG_MFD_TPS6586X=y +CONFIG_MFD_TPS65910=y +CONFIG_MFD_TPS65912=y +CONFIG_MFD_TPS65912_I2C=y +CONFIG_MFD_TPS65912_SPI=y +CONFIG_MFD_TPS68470=y +CONFIG_MFD_TPS80031=y +CONFIG_MFD_TWL4030_AUDIO=y +CONFIG_MFD_VEXPRESS_SYSREG=y +CONFIG_MFD_VIPERBOARD=m +CONFIG_MFD_VX855=m +CONFIG_MFD_WL1273_CORE=m +CONFIG_MFD_WM5102=y +CONFIG_MFD_WM5110=y +CONFIG_MFD_WM831X=y +CONFIG_MFD_WM831X_I2C=y +CONFIG_MFD_WM831X_SPI=y +CONFIG_MFD_WM8350=y +CONFIG_MFD_WM8350_I2C=y +CONFIG_MFD_WM8400=y +CONFIG_MFD_WM8994=m +CONFIG_MFD_WM8997=y +CONFIG_MFD_WM8998=y +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +CONFIG_MICREL_KS8995MA=m +CONFIG_MICREL_PHY=m +CONFIG_MICROCHIP_KSZ=m +CONFIG_MICROCHIP_KSZ_SPI_DRIVER=m +CONFIG_MICROCHIP_PHY=m +CONFIG_MICROCODE=y +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_MICROSEMI_PHY=m +CONFIG_MIC_COSM=m +CONFIG_MIGHT_HAVE_CACHE_L2X0=y +CONFIG_MIGHT_HAVE_PCI=y +CONFIG_MIGRATE_VMA_HELPER=y +CONFIG_MIGRATION=y +# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set +CONFIG_MISC_FILESYSTEMS=y +CONFIG_MISDN=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m +CONFIG_MISDN_L1OIP=m +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_W6692=m +CONFIG_MIXCOMWD=m +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +CONFIG_MKISS=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_CORE_GEN2=y +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_EN_DCB=y +CONFIG_MLX4_INFINIBAND=m +CONFIG_MLX5_ACCEL=y +CONFIG_MLX5_CORE=m +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_IPOIB=y +CONFIG_MLX5_EN_IPSEC=y +CONFIG_MLX5_ESWITCH=y +CONFIG_MLX5_FPGA=y +CONFIG_MLX5_INFINIBAND=m +CONFIG_MLX5_MPFS=y +CONFIG_MLX90614=m +CONFIG_MLXFW=m +CONFIG_MLXSW_CORE=m +CONFIG_MLXSW_CORE_HWMON=y +CONFIG_MLXSW_CORE_THERMAL=y +CONFIG_MLXSW_I2C=m +CONFIG_MLXSW_MINIMAL=m +CONFIG_MLXSW_PCI=m +CONFIG_MLXSW_SPECTRUM=m +CONFIG_MLXSW_SPECTRUM_DCB=y +CONFIG_MLXSW_SWITCHIB=m +CONFIG_MLXSW_SWITCHX2=m +CONFIG_MLX_CPLD_PLATFORM=m +CONFIG_MLX_PLATFORM=m +CONFIG_MMA7455=m +CONFIG_MMA7455_I2C=m +CONFIG_MMA7455_SPI=m +CONFIG_MMA7660=m +CONFIG_MMA8452=m +CONFIG_MMA9551=m +CONFIG_MMA9551_CORE=m +CONFIG_MMA9553=m +CONFIG_MMC35240=m +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_BCM2835=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_CAVIUM_THUNDERX=m +CONFIG_MMC_CB710=m +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_DW=m +CONFIG_MMC_DW_EXYNOS=m +CONFIG_MMC_DW_K3=m +CONFIG_MMC_DW_PCI=m +CONFIG_MMC_DW_PLTFM=m +CONFIG_MMC_DW_ROCKCHIP=m +CONFIG_MMC_MESON_GX=m +CONFIG_MMC_MESON_MX_SDIO=m +CONFIG_MMC_MTK=m +CONFIG_MMC_MVSDIO=m +CONFIG_MMC_MXC=m +CONFIG_MMC_OMAP=m +CONFIG_MMC_OMAP_HS=y +CONFIG_MMC_QCOM_DML=y +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_REALTEK_USB=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_ACPI=m +CONFIG_MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER=y +CONFIG_MMC_SDHCI_BRCMSTB=m +CONFIG_MMC_SDHCI_CADENCE=m +CONFIG_MMC_SDHCI_DOVE=m +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_MMC_SDHCI_F_SDH30=m +CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_IPROC=m +CONFIG_MMC_SDHCI_MSM=m +CONFIG_MMC_SDHCI_OF_ARASAN=m +CONFIG_MMC_SDHCI_OF_AT91=m +CONFIG_MMC_SDHCI_OF_ESDHC=m +CONFIG_MMC_SDHCI_OF_HLWD=m +CONFIG_MMC_SDHCI_OMAP=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_SDHCI_PXAV3=m +CONFIG_MMC_SDHCI_S3C=m +CONFIG_MMC_SDHCI_S3C_DMA=y +CONFIG_MMC_SDHCI_TEGRA=m +CONFIG_MMC_SDHCI_XENON=m +CONFIG_MMC_SDHI=m +CONFIG_MMC_SDHI_INTERNAL_DMAC=m +CONFIG_MMC_SDHI_SYS_DMAC=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_SH_MMCIF=m +CONFIG_MMC_SPI=m +CONFIG_MMC_SUNXI=m +# CONFIG_MMC_TEST is not set +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_TMIO=m +CONFIG_MMC_TMIO_CORE=m +CONFIG_MMC_TOSHIBA_PCI=m +CONFIG_MMC_USDHI6ROL0=m +CONFIG_MMC_USHC=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_WBSD=m +CONFIG_MMIOTRACE=y +# CONFIG_MMIOTRACE_TEST is not set +# CONFIG_MMIO_NVRAM is not set +CONFIG_MMU=y +CONFIG_MMU_NOTIFIER=y +CONFIG_MODIFY_LDT_SYSCALL=y +CONFIG_MODULES=y +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_MODULES_USE_ELF_RELA=y +# CONFIG_MODULE_COMPRESS is not set +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_SIG=y +CONFIG_MODULE_SIG_ALL=y +# CONFIG_MODULE_SIG_FORCE is not set +CONFIG_MODULE_SIG_HASH="sha512" +CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" +# CONFIG_MODULE_SIG_SHA1 is not set +# CONFIG_MODULE_SIG_SHA224 is not set +# CONFIG_MODULE_SIG_SHA256 is not set +# CONFIG_MODULE_SIG_SHA384 is not set +CONFIG_MODULE_SIG_SHA512=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +CONFIG_MONREADER=m +CONFIG_MONWRITER=m +CONFIG_MOST=m +CONFIG_MOSTCORE=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_CYAPA=m +CONFIG_MOUSE_ELAN_I2C=m +CONFIG_MOUSE_ELAN_I2C_I2C=y +CONFIG_MOUSE_ELAN_I2C_SMBUS=y +CONFIG_MOUSE_GPIO=m +# CONFIG_MOUSE_INPORT is not set +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_FOCALTECH=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_SMBUS=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y +CONFIG_MOUSE_PS2_TOUCHKIT=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_PS2_VMMOUSE=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOUSE_SYNAPTICS_USB=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +# CONFIG_MPENTIUM4 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +CONFIG_MPIC=y +# CONFIG_MPIC_MSGR is not set +# CONFIG_MPIC_U3_HT_IRQS is not set +# CONFIG_MPIC_WEIRD is not set +CONFIG_MPILIB=y +CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m +CONFIG_MPL3115=m +CONFIG_MPLS=y +CONFIG_MPLS_IPTUNNEL=m +CONFIG_MPLS_ROUTING=m +CONFIG_MPROFILE_KERNEL=y +# CONFIG_MPSC is not set +CONFIG_MPU3050=m +CONFIG_MPU3050_I2C=m +CONFIG_MQ_IOSCHED_DEADLINE=m +CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MRP=m +CONFIG_MS5611=m +CONFIG_MS5611_I2C=m +CONFIG_MS5611_SPI=m +CONFIG_MS5637=m +CONFIG_MSDOS_FS=m +CONFIG_MSDOS_PARTITION=y +# CONFIG_MSI_BITMAP_SELFTEST is not set +CONFIG_MSI_LAPTOP=m +CONFIG_MSI_WMI=m +CONFIG_MSM_GCC_8660=m +CONFIG_MSM_GCC_8916=m +CONFIG_MSM_GCC_8960=m +CONFIG_MSM_GCC_8974=m +CONFIG_MSM_GCC_8994=m +CONFIG_MSM_GCC_8996=m +# CONFIG_MSM_IOMMU is not set +CONFIG_MSM_LCC_8960=m +CONFIG_MSM_MMCC_8960=m +CONFIG_MSM_MMCC_8974=m +CONFIG_MSM_MMCC_8996=m +CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m +CONFIG_MT7601U=m +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTD_ABSENT=m +CONFIG_MTD_AFS_PARTS=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_AR7_PARTS=m +CONFIG_MTD_BCM47XXSFLASH=m +CONFIG_MTD_BLOCK2MTD=m +CONFIG_MTD_BLOCK_RO=m +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_CK804XROM=m +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_DATAFLASH_OTP=y +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +CONFIG_MTD_DOCG3=m +CONFIG_MTD_ESB2ROM=m +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_GPIO_ADDR=m +CONFIG_MTD_ICHXROM=m +CONFIG_MTD_IMPA7=m +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_L440GX=m +CONFIG_MTD_LATCH_ADDR=m +CONFIG_MTD_LPDDR=m +CONFIG_MTD_LPDDR2_NVM=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_MAP_BANK_WIDTH_1=y +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +CONFIG_MTD_MAP_BANK_WIDTH_2=y +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +CONFIG_MTD_MCHP23K256=m +CONFIG_MTD_MT81xx_NOR=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTD_NAND_BRCMNAND=m +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_CS553X=m +CONFIG_MTD_NAND_DENALI=m +CONFIG_MTD_NAND_DENALI_DT=m +CONFIG_MTD_NAND_DENALI_PCI=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DOCG4=m +CONFIG_MTD_NAND_ECC_BCH=y +# CONFIG_MTD_NAND_ECC_SMC is not set +CONFIG_MTD_NAND_FSL_IFC=m +CONFIG_MTD_NAND_GPIO=m +CONFIG_MTD_NAND_GPMI_NAND=m +CONFIG_MTD_NAND_HISI504=m +CONFIG_MTD_NAND_MTK=m +CONFIG_MTD_NAND_MXC=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_OMAP2=y +CONFIG_MTD_NAND_OMAP_BCH=y +CONFIG_MTD_NAND_ORION=m +CONFIG_MTD_NAND_PLATFORM=m +CONFIG_MTD_NAND_PXA3xx=m +CONFIG_MTD_NAND_QCOM=m +CONFIG_MTD_NAND_RICOH=m +# CONFIG_MTD_NAND_SUNXI is not set +CONFIG_MTD_NAND_TANGO=m +CONFIG_MTD_NAND_TMIO=m +# CONFIG_MTD_NAND_VF610_NFC is not set +CONFIG_MTD_NETtel=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_ONENAND_GENERIC=m +CONFIG_MTD_ONENAND_OMAP2=m +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_OOPS=m +# CONFIG_MTD_PARTITIONED_MASTER is not set +CONFIG_MTD_PCI=m +CONFIG_MTD_PCMCIA=m +# CONFIG_MTD_PCMCIA_ANONYMOUS is not set +CONFIG_MTD_PHRAM=m +CONFIG_MTD_PHYSMAP=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_OF=m +CONFIG_MTD_PHYSMAP_OF_GEMINI=y +CONFIG_MTD_PHYSMAP_OF_VERSATILE=y +CONFIG_MTD_PLATRAM=m +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_POWERNV_FLASH=m +CONFIG_MTD_QINFO_PROBE=m +CONFIG_MTD_RAM=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +CONFIG_MTD_REDBOOT_PARTS=m +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +CONFIG_MTD_ROM=m +CONFIG_MTD_SBC_GXX=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_SCx200_DOCFLASH=m +CONFIG_MTD_SHARPSL_PARTS=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_SM_COMMON=m +CONFIG_MTD_SPINAND_MT29F=m +CONFIG_MTD_SPINAND_ONDIEECC=y +CONFIG_MTD_SPI_NOR=m +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +CONFIG_MTD_SST25L=m +CONFIG_MTD_SWAP=m +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_BEB_LIMIT=20 +CONFIG_MTD_UBI_BLOCK=y +CONFIG_MTD_UBI_FASTMAP=y +CONFIG_MTD_UBI_GLUEBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +# CONFIG_MTK_EFUSE is not set +CONFIG_MTK_INFRACFG=y +# CONFIG_MTK_IOMMU is not set +# CONFIG_MTK_IOMMU_V1 is not set +CONFIG_MTK_PMIC_WRAP=m +CONFIG_MTK_SCPSYS=y +CONFIG_MTK_SMI=y +CONFIG_MTK_THERMAL=m +CONFIG_MTK_TIMER=y +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_MULTIPLEXER=m +CONFIG_MULTIUSER=y +CONFIG_MULTI_IRQ_HANDLER=y +CONFIG_MUSB_PIO_ONLY=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_MUX_ADG792A=m +CONFIG_MUX_GPIO=m +CONFIG_MUX_MMIO=m +CONFIG_MV643XX_ETH=m +CONFIG_MVEBU_CLK_COMMON=y +CONFIG_MVEBU_CLK_COREDIV=y +CONFIG_MVEBU_CLK_CPU=y +CONFIG_MVEBU_DEVBUS=y +CONFIG_MVEBU_MBUS=y +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +CONFIG_MVMDIO=m +CONFIG_MVNETA=m +# CONFIG_MVNETA_BM is not set +# CONFIG_MVNETA_BM_ENABLE is not set +CONFIG_MVPP2=m +CONFIG_MV_XOR=y +CONFIG_MV_XOR_V2=y +CONFIG_MWAVE=m +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MWIFIEX_USB=m +# CONFIG_MWINCHIP3D is not set +# CONFIG_MWINCHIPC6 is not set +CONFIG_MWL8K=m +CONFIG_MX3_IPU=y +CONFIG_MX3_IPU_IRQS=4 +CONFIG_MXC4005=m +CONFIG_MXC6255=m +CONFIG_MXC_TZIC=y +CONFIG_MXM_WMI=m +CONFIG_MXS_DMA=y +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_N2=m +CONFIG_NAMESPACES=y +CONFIG_NATIONAL_PHY=m +CONFIG_NATSEMI=m +CONFIG_NAU7802=m +CONFIG_NBPFAXI_DMA=m +CONFIG_NCPFS_EXTRAS=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_PACKET_SIGNING=y +# CONFIG_NCPFS_SMALLDOS is not set +CONFIG_NCPFS_STRONG=y +CONFIG_ND_BLK=m +CONFIG_ND_BTT=m +CONFIG_ND_CLAIM=y +CONFIG_ND_PFN=m +CONFIG_NE2000=m +CONFIG_NE2K_PCI=m +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_MULTIPLE_NODES=y +CONFIG_NEED_NODE_MEMMAP_SIZE=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEON=y +CONFIG_NET=y +CONFIG_NET5501=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETDEVICES=y +# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_NAT=m +CONFIG_NETFILTER_XT_SET=m +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NETMAP=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETIUCV=m +CONFIG_NETLABEL=y +CONFIG_NETLINK_DIAG=m +CONFIG_NETPOLL=y +CONFIG_NETROM=m +CONFIG_NETWORK_FILESYSTEMS=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NETXEN_NIC=m +CONFIG_NET_9P=m +# CONFIG_NET_9P_DEBUG is not set +CONFIG_NET_9P_RDMA=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_9P_XEN=m +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_ACT_GACT=m +# CONFIG_NET_ACT_IFE is not set +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_SAMPLE=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_SKBMOD=m +CONFIG_NET_ACT_TUNNEL_KEY=m +CONFIG_NET_ACT_VLAN=m +CONFIG_NET_CALXEDA_XGMAC=m +CONFIG_NET_CLS=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_BPF=m +CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_FLOWER=m +CONFIG_NET_CLS_FW=m +# CONFIG_NET_CLS_IND is not set +CONFIG_NET_CLS_MATCHALL=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_U32=m +CONFIG_NET_CORE=y +CONFIG_NET_DCCPPROBE=m +CONFIG_NET_DEVLINK=m +CONFIG_NET_DROP_MONITOR=m +CONFIG_NET_DSA=m +CONFIG_NET_DSA_BCM_SF2=m +# CONFIG_NET_DSA_LOOP is not set +CONFIG_NET_DSA_MT7530=m +CONFIG_NET_DSA_MV88E6060=m +CONFIG_NET_DSA_MV88E6XXX=m +CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y +CONFIG_NET_DSA_QCA8K=m +CONFIG_NET_DSA_SMSC_LAN9303=m +CONFIG_NET_DSA_SMSC_LAN9303_I2C=m +CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m +CONFIG_NET_DSA_TAG_BRCM=y +CONFIG_NET_DSA_TAG_BRCM_PREPEND=y +CONFIG_NET_DSA_TAG_DSA=y +CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_KSZ=y +CONFIG_NET_DSA_TAG_LAN9303=y +CONFIG_NET_DSA_TAG_MTK=y +CONFIG_NET_DSA_TAG_QCA=y +CONFIG_NET_DSA_TAG_TRAILER=y +CONFIG_NET_EGRESS=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CANID=m +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_IPSET=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_FC=y +CONFIG_NET_FLOW_LIMIT=y +CONFIG_NET_FOU=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_NET_IFE=m +CONFIG_NET_INGRESS=y +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPIP=m +CONFIG_NET_IPVTI=m +CONFIG_NET_IP_TUNNEL=m +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_NET_L3_MASTER_DEV=y +CONFIG_NET_MPLS_GSO=m +CONFIG_NET_NCSI=y +CONFIG_NET_NS=y +CONFIG_NET_NSH=m +CONFIG_NET_PKTGEN=m +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_NET_SB1000=m +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_CODEL=m +# CONFIG_NET_SCH_DEFAULT is not set +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_FIFO=y +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_PIE=m +CONFIG_NET_SCH_PLUG=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCTPPROBE=m +CONFIG_NET_TCPPROBE=m +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TULIP=y +CONFIG_NET_UDP_TUNNEL=m +CONFIG_NET_VENDOR_8390=y +CONFIG_NET_VENDOR_ALACRITECH=y +CONFIG_NET_VENDOR_ALLWINNER=y +CONFIG_NET_VENDOR_AMAZON=y +CONFIG_NET_VENDOR_AQUANTIA=y +CONFIG_NET_VENDOR_AURORA=y +CONFIG_NET_VENDOR_CIRRUS=y +CONFIG_NET_VENDOR_FARADAY=y +CONFIG_NET_VENDOR_FREESCALE=y +CONFIG_NET_VENDOR_FUJITSU=y +CONFIG_NET_VENDOR_HISILICON=y +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_IBM=y +# CONFIG_NET_VENDOR_MEDIATEK is not set +CONFIG_NET_VENDOR_MELLANOX=y +CONFIG_NET_VENDOR_MICROCHIP=y +CONFIG_NET_VENDOR_NETRONOME=y +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_SOLARFLARE=y +CONFIG_NET_VENDOR_SYNOPSYS=y +CONFIG_NET_VENDOR_XILINX=y +CONFIG_NET_VENDOR_XIRCOM=y +CONFIG_NET_VRF=m +CONFIG_NET_XGENE=m +CONFIG_NET_XGENE_V2=m +CONFIG_NFC_DIGITAL=m +CONFIG_NFC_FDP=m +CONFIG_NFC_FDP_I2C=m +CONFIG_NFC_HCI=m +CONFIG_NFC_MEI_PHY=m +CONFIG_NFC_MICROREAD=m +CONFIG_NFC_MICROREAD_I2C=m +CONFIG_NFC_MICROREAD_MEI=m +CONFIG_NFC_MRVL=m +CONFIG_NFC_MRVL_I2C=m +CONFIG_NFC_MRVL_SPI=m +CONFIG_NFC_MRVL_UART=m +CONFIG_NFC_MRVL_USB=m +CONFIG_NFC_NCI=m +CONFIG_NFC_NCI_SPI=m +CONFIG_NFC_NCI_UART=m +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m +CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_I2C=m +CONFIG_NFC_PN533_USB=m +CONFIG_NFC_PN544=m +CONFIG_NFC_PN544_I2C=m +CONFIG_NFC_PN544_MEI=m +CONFIG_NFC_PORT100=m +CONFIG_NFC_S3FWRN5=m +CONFIG_NFC_S3FWRN5_I2C=m +CONFIG_NFC_SHDLC=y +CONFIG_NFC_SIM=m +CONFIG_NFC_ST21NFCA=m +CONFIG_NFC_ST21NFCA_I2C=m +CONFIG_NFC_ST95HF=m +CONFIG_NFC_ST_NCI=m +CONFIG_NFC_ST_NCI_I2C=m +CONFIG_NFC_ST_NCI_SPI=m +CONFIG_NFC_TRF7970A=m +CONFIG_NFP_APP_FLOWER=y +# CONFIG_NFP_DEBUG is not set +CONFIG_NFSD=m +CONFIG_NFSD_BLOCKLAYOUT=y +# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_FLEXFILELAYOUT=y +CONFIG_NFSD_PNFS=y +CONFIG_NFSD_SCSILAYOUT=y +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_V4_SECURITY_LABEL=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_DEBUG=y +CONFIG_NFS_FS=m +CONFIG_NFS_FSCACHE=y +CONFIG_NFS_SWAP=y +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_V2=m +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_2=y +CONFIG_NFS_V4_SECURITY_LABEL=y +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_CT=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NFT_FIB_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_HASH=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_LOG=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_META=m +CONFIG_NFT_NAT=m +CONFIG_NFT_NUMGEN=m +CONFIG_NFT_OBJREF=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_REDIR_IPV4=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_RT=m +CONFIG_NFT_SET_BITMAP=m +CONFIG_NFT_SET_HASH=m +CONFIG_NFT_SET_RBTREE=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_BROADCAST=m +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_LABELS=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +# CONFIG_NF_CONNTRACK_PROCFS is not set +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NF_CT_NETLINK_TIMEOUT=m +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_DUP_IPV4=m +CONFIG_NF_DUP_IPV6=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NF_LOG_ARP=m +CONFIG_NF_LOG_BRIDGE=m +CONFIG_NF_LOG_COMMON=m +CONFIG_NF_LOG_IPV4=m +CONFIG_NF_LOG_IPV6=m +CONFIG_NF_LOG_NETDEV=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_IPV4=m +CONFIG_NF_NAT_IPV6=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_MASQUERADE_IPV4=m +CONFIG_NF_NAT_MASQUERADE_IPV6=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_REDIRECT=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_REJECT_IPV6=m +CONFIG_NF_SOCKET_IPV4=m +CONFIG_NF_SOCKET_IPV6=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_ARP=m +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NF_TABLES_INET=m +CONFIG_NF_TABLES_IPV4=m +CONFIG_NF_TABLES_IPV6=m +CONFIG_NF_TABLES_NETDEV=m +CONFIG_NI65=m +CONFIG_NI903X_WDT=m +CONFIG_NIC7018_WDT=m +CONFIG_NILFS2_FS=m +CONFIG_NIU=m +# CONFIG_NL80211_TESTMODE is not set +CONFIG_NLATTR=y +CONFIG_NLMON=m +CONFIG_NLS=y +CONFIG_NLS_ASCII=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m +CONFIG_NLS_UTF8=m +CONFIG_NMI_IPI=y +CONFIG_NODES_SPAN_OTHER_NODES=y +# CONFIG_NOHIGHMEM is not set +CONFIG_NOKIA_MODEM=m +CONFIG_NONSTATIC_KERNEL=y +CONFIG_NOP_TRACER=y +CONFIG_NORTEL_HERMES=m +CONFIG_NOTIFIER_ERROR_INJECTION=m +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +# CONFIG_NOUVEAU_DEBUG_MMU is not set +CONFIG_NOUVEAU_PLATFORM_DRIVER=y +CONFIG_NO_BOOTMEM=y +CONFIG_NO_HZ=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ_IDLE=y +CONFIG_NO_IOPORT_MAP=y +CONFIG_NR_IRQS=512 +CONFIG_NS83820=m +CONFIG_NSC_FIR=m +CONFIG_NSC_GPIO=m +# CONFIG_NTB_AMD is not set +CONFIG_NTB_IDT=m +CONFIG_NTB_INTEL=m +CONFIG_NTB_NETDEV=m +CONFIG_NTB_PERF=m +CONFIG_NTB_PINGPONG=m +CONFIG_NTB_SWITCHTEC=m +CONFIG_NTB_TOOL=m +CONFIG_NTB_TRANSPORT=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_FS=m +CONFIG_NUMA=y +CONFIG_NUMA_BALANCING=y +CONFIG_NVDIMM_DAX=y +CONFIG_NVDIMM_PFN=y +CONFIG_NVEC_PAZ00=m +CONFIG_NVEC_POWER=m +CONFIG_NVM=y +CONFIG_NVMEM_BCM_OCOTP=m +CONFIG_NVMEM_IMX_IIM=m +CONFIG_NVMEM_IMX_OCOTP=m +CONFIG_NVMEM_SNVS_LPGPR=m +CONFIG_NVMEM_SUNXI_SID=m +# CONFIG_NVMEM_VF610_OCOTP is not set +CONFIG_NVME_CORE=y +CONFIG_NVME_FABRICS=m +CONFIG_NVME_FC=m +CONFIG_NVME_MULTIPATH=y +CONFIG_NVME_RDMA=m +CONFIG_NVME_TARGET=m +CONFIG_NVME_TARGET_FC=m +# CONFIG_NVME_TARGET_FCLOOP is not set +CONFIG_NVME_TARGET_LOOP=m +CONFIG_NVME_TARGET_RDMA=m +# CONFIG_NVM_DEBUG is not set +CONFIG_NVM_PBLK=m +CONFIG_NVM_RRPC=m +CONFIG_NVRAM=m +CONFIG_NV_TCO=m +CONFIG_N_HDLC=m +# CONFIG_OABI_COMPAT is not set +# CONFIG_OCFS2_DEBUG_FS is not set +CONFIG_OCFS2_DEBUG_MASKLOG=y +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +CONFIG_OF_ADDRESS=y +CONFIG_OF_ADDRESS_PCI=y +CONFIG_OF_DYNAMIC=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_FLATTREE=y +CONFIG_OF_GPIO=y +CONFIG_OF_IOMMU=y +CONFIG_OF_IRQ=y +CONFIG_OF_KOBJ=y +CONFIG_OF_MDIO=y +CONFIG_OF_NET=y +CONFIG_OF_NUMA=y +CONFIG_OF_OVERLAY=y +CONFIG_OF_PCI=y +CONFIG_OF_PCI_IRQ=y +# CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT is not set +CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +# CONFIG_OF_UNITTEST is not set +CONFIG_OID_REGISTRY=y +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_OLD_MCOUNT=y +CONFIG_OLD_SIGACTION=y +CONFIG_OLD_SIGSUSPEND=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OMAP2PLUS_MBOX=m +CONFIG_OMAP2_VRFB=y +# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +# CONFIG_OMAP3_THERMAL is not set +CONFIG_OMAP4_THERMAL=y +CONFIG_OMAP5_ERRATA_801819=y +CONFIG_OMAP_32K_TIMER=y +CONFIG_OMAP_CONTROL_PHY=m +CONFIG_OMAP_DM_TIMER=y +CONFIG_OMAP_GPMC=y +# CONFIG_OMAP_GPMC_DEBUG is not set +CONFIG_OMAP_INTERCONNECT=y +CONFIG_OMAP_INTERCONNECT_BARRIER=y +CONFIG_OMAP_IOMMU=y +# CONFIG_OMAP_IOMMU_DEBUG is not set +CONFIG_OMAP_IRQCHIP=y +CONFIG_OMAP_MBOX_KFIFO_SIZE=256 +CONFIG_OMAP_OCP2SCP=m +CONFIG_OMAP_PACKAGE_CBB=y +CONFIG_OMAP_PM_NOOP=y +CONFIG_OMAP_REMOTEPROC=m +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_SSI=m +CONFIG_OMAP_USB2=m +CONFIG_OMAP_WATCHDOG=m +CONFIG_OPAL_PRD=m +CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GENEVE=m +CONFIG_OPENVSWITCH_GRE=m +CONFIG_OPENVSWITCH_VXLAN=m +CONFIG_OPROFILE=m +# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set +CONFIG_OPROFILE_NMI_TIMER=y +CONFIG_OPT3001=m +CONFIG_OPTEE=m +CONFIG_OPTIMIZE_INLINING=y +CONFIG_OPTPROBES=y +CONFIG_ORANGEFS_FS=m +CONFIG_ORE=m +CONFIG_ORINOCO_USB=m +CONFIG_ORION_IRQCHIP=y +CONFIG_ORION_TIMER=y +CONFIG_ORION_WATCHDOG=m +CONFIG_OUTER_CACHE=y +CONFIG_OUTER_CACHE_SYNC=y +CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_INDEX is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OWL_PM_DOMAINS=y +CONFIG_OWL_PM_DOMAINS_HELPER=y +CONFIG_OWL_TIMER=y +CONFIG_P54_COMMON=m +CONFIG_P54_LEDS=y +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set +CONFIG_P54_USB=m +CONFIG_PA12203001=m +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=m +CONFIG_PACK_STACK=y +CONFIG_PADATA=y +CONFIG_PAGE_COUNTER=y +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_POISONING is not set +CONFIG_PAGE_TABLE_ISOLATION=y +CONFIG_PALMAS_GPADC=m +CONFIG_PANASONIC_LAPTOP=m +CONFIG_PANEL=m +# CONFIG_PANEL_CHANGE_MESSAGE is not set +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANTHERLORD_FF=y +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_PARIDE=m +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PG=m +CONFIG_PARIDE_PT=m +CONFIG_PARMAN=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_AX88796=m +# CONFIG_PARPORT_GSC is not set +CONFIG_PARPORT_NOT_PC=y +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_PCMCIA=m +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_SERIAL=m +CONFIG_PARTITION_ADVANCED=y +CONFIG_PARTITION_PERCPU=y +CONFIG_PATA_ACPI=m +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD640_PCI=m +CONFIG_PATA_CMD64X=m +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CS5535=m +CONFIG_PATA_CS5536=m +CONFIG_PATA_CYPRESS=m +CONFIG_PATA_EFAR=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +# CONFIG_PATA_HPT3X3_DMA is not set +CONFIG_PATA_IMX=m +CONFIG_PATA_ISAPNP=m +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_LEGACY=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +CONFIG_PATA_NS87410=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OF_PLATFORM=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_OPTI=m +CONFIG_PATA_OPTIDMA=m +CONFIG_PATA_PCMCIA=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +CONFIG_PATA_PLATFORM=m +CONFIG_PATA_QDI=m +CONFIG_PATA_RADISYS=m +CONFIG_PATA_RDC=m +CONFIG_PATA_RZ1000=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_TOSHIBA=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m +CONFIG_PATA_WINBOND_VLB=m +CONFIG_PC300TOO=m +CONFIG_PC8736x_GPIO=m +CONFIG_PC87413_WDT=m +CONFIG_PCC=y +CONFIG_PCCARD_NONSTATIC=y +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_PCH_CAN=m +CONFIG_PCH_DMA=m +CONFIG_PCH_GBE=m +CONFIG_PCH_PHUB=m +CONFIG_PCI=y +CONFIG_PCI200SYN=m +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEBUG=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_PERFORMANCE is not set +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIE_ALTERA is not set +CONFIG_PCIE_ARMADA_8K=y +CONFIG_PCIE_DPC=y +CONFIG_PCIE_DW=y +CONFIG_PCIE_DW_EP=y +CONFIG_PCIE_DW_HOST=y +CONFIG_PCIE_DW_PLAT=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIE_HISI_STB=y +CONFIG_PCIE_IPROC=m +CONFIG_PCIE_IPROC_MSI=y +CONFIG_PCIE_IPROC_PLATFORM=m +CONFIG_PCIE_KIRIN=y +CONFIG_PCIE_MEDIATEK=y +CONFIG_PCIE_PME=y +CONFIG_PCIE_PTM=y +CONFIG_PCIE_QCOM=y +CONFIG_PCIE_RCAR=y +CONFIG_PCIE_ROCKCHIP=y +CONFIG_PCIE_XILINX_NWL=y +CONFIG_PCI_ATMEL=m +CONFIG_PCI_ATS=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_BUS_ADDR_T_64BIT=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_DOMAINS_GENERIC=y +CONFIG_PCI_DRA7XX=y +CONFIG_PCI_DRA7XX_EP=y +CONFIG_PCI_DRA7XX_HOST=y +CONFIG_PCI_ECAM=y +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_PCI_EPF_TEST is not set +CONFIG_PCI_EXYNOS=y +CONFIG_PCI_FTPCI100=y +CONFIG_PCI_GOANY=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GODIRECT is not set +# CONFIG_PCI_GOMMCONFIG is not set +CONFIG_PCI_HISI=y +CONFIG_PCI_HOST_COMMON=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_PCI_HOST_THUNDER_ECAM=y +CONFIG_PCI_HOST_THUNDER_PEM=y +CONFIG_PCI_HYPERV=m +CONFIG_PCI_IMX6=y +CONFIG_PCI_IOV=y +CONFIG_PCI_LABEL=y +CONFIG_PCI_LOCKLESS_CONFIG=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_MSI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_NR_FUNCTIONS=64 +CONFIG_PCI_RCAR_GEN2=y +CONFIG_PCI_REALLOC_ENABLE_AUTO=y +CONFIG_PCI_STUB=m +CONFIG_PCI_SW_SWITCHTEC=m +CONFIG_PCI_SYSCALL=y +CONFIG_PCI_TEGRA=y +CONFIG_PCI_V3_SEMI=y +CONFIG_PCI_XEN=y +CONFIG_PCI_XGENE=y +CONFIG_PCI_XGENE_MSI=y +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_PCMCIA_AXNET=m +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_PROBE=y +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_PCMCIA_WL3501=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_PCNET32=m +CONFIG_PCSPKR_PLATFORM=y +CONFIG_PCWATCHDOG=m +CONFIG_PD6729=m +CONFIG_PDA_POWER=m +CONFIG_PDC_ADMA=m +CONFIG_PEAQ_WMI=m +# CONFIG_PERCPU_STATS is not set +# CONFIG_PERCPU_TEST is not set +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_EVENTS_AMD_POWER is not set +CONFIG_PERF_EVENTS_INTEL_CSTATE=m +CONFIG_PERF_EVENTS_INTEL_RAPL=m +CONFIG_PERF_EVENTS_INTEL_UNCORE=y +CONFIG_PERF_USE_VMALLOC=y +CONFIG_PERSISTENT_KEYRINGS=y +CONFIG_PFAULT=y +CONFIG_PGSTE=y +CONFIG_PHY_BCM_NS_USB2=m +CONFIG_PHY_BCM_NS_USB3=m +CONFIG_PHY_BERLIN_SATA=m +CONFIG_PHY_BERLIN_USB=m +CONFIG_PHY_BRCM_SATA=y +CONFIG_PHY_BRCM_USB=m +CONFIG_PHY_CPCAP_USB=m +CONFIG_PHY_DM816X_USB=m +# CONFIG_PHY_EXYNOS4210_USB2 is not set +# CONFIG_PHY_EXYNOS4X12_USB2 is not set +CONFIG_PHY_EXYNOS5250_SATA=y +CONFIG_PHY_EXYNOS5_USBDRD=m +CONFIG_PHY_EXYNOS_DP_VIDEO=y +CONFIG_PHY_EXYNOS_MIPI_VIDEO=y +CONFIG_PHY_EXYNOS_PCIE=y +CONFIG_PHY_HI6220_USB=m +CONFIG_PHY_HIX5HD2_SATA=m +CONFIG_PHY_MESON8B_USB2=m +CONFIG_PHY_MESON_GXL_USB2=m +CONFIG_PHY_MTK_TPHY=m +CONFIG_PHY_MVEBU_CP110_COMPHY=m +CONFIG_PHY_MVEBU_SATA=y +CONFIG_PHY_NS2_PCIE=y +CONFIG_PHY_NS2_USB_DRD=m +CONFIG_PHY_QCOM_APQ8064_SATA=m +CONFIG_PHY_QCOM_IPQ806X_SATA=m +CONFIG_PHY_QCOM_QMP=m +CONFIG_PHY_QCOM_QUSB2=m +CONFIG_PHY_QCOM_UFS=m +CONFIG_PHY_QCOM_USB_HS=m +CONFIG_PHY_QCOM_USB_HSIC=m +CONFIG_PHY_RCAR_GEN2=m +CONFIG_PHY_RCAR_GEN3_USB2=m +CONFIG_PHY_RCAR_GEN3_USB3=m +CONFIG_PHY_ROCKCHIP_DP=m +CONFIG_PHY_ROCKCHIP_EMMC=m +CONFIG_PHY_ROCKCHIP_INNO_USB2=m +CONFIG_PHY_ROCKCHIP_PCIE=m +CONFIG_PHY_ROCKCHIP_TYPEC=m +CONFIG_PHY_ROCKCHIP_USB=m +CONFIG_PHY_SAMSUNG_USB2=m +CONFIG_PHY_SUN4I_USB=m +# CONFIG_PHY_SUN9I_USB is not set +CONFIG_PHY_TEGRA_XUSB=m +CONFIG_PHY_TUSB1210=m +CONFIG_PHY_XGENE=y +CONFIG_PI433=m +# CONFIG_PID_IN_CONTEXTIDR is not set +CONFIG_PID_NS=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_AMD=y +CONFIG_PINCTRL_APQ8064=m +CONFIG_PINCTRL_APQ8084=m +CONFIG_PINCTRL_ARMADA_370=y +CONFIG_PINCTRL_ARMADA_375=y +CONFIG_PINCTRL_ARMADA_38X=y +CONFIG_PINCTRL_ARMADA_39X=y +CONFIG_PINCTRL_ARMADA_XP=y +CONFIG_PINCTRL_AS3722=y +CONFIG_PINCTRL_BAYTRAIL=y +CONFIG_PINCTRL_BCM2835=y +CONFIG_PINCTRL_BERLIN=y +CONFIG_PINCTRL_BERLIN_BG4CT=y +CONFIG_PINCTRL_BROXTON=m +CONFIG_PINCTRL_CANNONLAKE=m +CONFIG_PINCTRL_CEDARFORK=m +CONFIG_PINCTRL_DENVERTON=m +CONFIG_PINCTRL_DOVE=y +CONFIG_PINCTRL_EXYNOS=y +CONFIG_PINCTRL_EXYNOS5440=y +CONFIG_PINCTRL_EXYNOS_ARM=y +CONFIG_PINCTRL_GEMINILAKE=m +CONFIG_PINCTRL_IMX=y +CONFIG_PINCTRL_IMX50=y +CONFIG_PINCTRL_IMX51=y +CONFIG_PINCTRL_IMX6Q=y +CONFIG_PINCTRL_IMX6SL=y +CONFIG_PINCTRL_IMX6SX=y +CONFIG_PINCTRL_IMX6UL=y +CONFIG_PINCTRL_IMX7D=y +CONFIG_PINCTRL_INTEL=m +CONFIG_PINCTRL_IPQ4019=m +CONFIG_PINCTRL_IPQ8064=m +CONFIG_PINCTRL_IPQ8074=m +CONFIG_PINCTRL_IPROC_GPIO=y +CONFIG_PINCTRL_LEWISBURG=m +CONFIG_PINCTRL_MAX77620=m +CONFIG_PINCTRL_MCP23S08=m +CONFIG_PINCTRL_MDM9615=m +# CONFIG_PINCTRL_MERRIFIELD is not set +CONFIG_PINCTRL_MESON=y +CONFIG_PINCTRL_MESON8=y +CONFIG_PINCTRL_MESON8B=y +CONFIG_PINCTRL_MESON8_PMX=y +CONFIG_PINCTRL_MSM=y +CONFIG_PINCTRL_MSM8660=m +CONFIG_PINCTRL_MSM8916=m +CONFIG_PINCTRL_MSM8960=m +CONFIG_PINCTRL_MSM8994=m +CONFIG_PINCTRL_MSM8996=m +CONFIG_PINCTRL_MSM8X74=m +CONFIG_PINCTRL_MT2701=y +CONFIG_PINCTRL_MT6397=y +CONFIG_PINCTRL_MT8127=y +CONFIG_PINCTRL_MT8135=y +CONFIG_PINCTRL_MT8173=y +CONFIG_PINCTRL_MTK=y +CONFIG_PINCTRL_MVEBU=y +CONFIG_PINCTRL_NS2_MUX=y +CONFIG_PINCTRL_PALMAS=y +CONFIG_PINCTRL_PFC_EMEV2=y +CONFIG_PINCTRL_PFC_R8A7740=y +CONFIG_PINCTRL_PFC_R8A7743=y +CONFIG_PINCTRL_PFC_R8A7745=y +CONFIG_PINCTRL_PFC_R8A7778=y +CONFIG_PINCTRL_PFC_R8A7779=y +CONFIG_PINCTRL_PFC_R8A7790=y +CONFIG_PINCTRL_PFC_R8A7791=y +CONFIG_PINCTRL_PFC_R8A7792=y +CONFIG_PINCTRL_PFC_R8A7793=y +CONFIG_PINCTRL_PFC_R8A7794=y +CONFIG_PINCTRL_PFC_R8A7795=y +CONFIG_PINCTRL_PFC_R8A7796=y +CONFIG_PINCTRL_PFC_R8A77995=y +CONFIG_PINCTRL_PFC_SH73A0=y +CONFIG_PINCTRL_QCOM_SPMI_PMIC=m +CONFIG_PINCTRL_QCOM_SSBI_PMIC=m +CONFIG_PINCTRL_QDF2XXX=m +CONFIG_PINCTRL_RK805=m +CONFIG_PINCTRL_ROCKCHIP=y +CONFIG_PINCTRL_RZA1=y +CONFIG_PINCTRL_SAMSUNG=y +CONFIG_PINCTRL_SH_PFC=y +CONFIG_PINCTRL_SH_PFC_GPIO=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_SPRD=y +CONFIG_PINCTRL_SPRD_SC9860=y +# CONFIG_PINCTRL_SUN4I_A10 is not set +CONFIG_PINCTRL_SUN50I_A64=y +CONFIG_PINCTRL_SUN50I_A64_R=y +CONFIG_PINCTRL_SUN50I_H5=y +# CONFIG_PINCTRL_SUN5I is not set +# CONFIG_PINCTRL_SUN6I_A31 is not set +# CONFIG_PINCTRL_SUN6I_A31_R is not set +# CONFIG_PINCTRL_SUN8I_A23 is not set +# CONFIG_PINCTRL_SUN8I_A23_R is not set +# CONFIG_PINCTRL_SUN8I_A33 is not set +# CONFIG_PINCTRL_SUN8I_A83T is not set +# CONFIG_PINCTRL_SUN8I_A83T_R is not set +# CONFIG_PINCTRL_SUN8I_H3 is not set +CONFIG_PINCTRL_SUN8I_H3_R=y +# CONFIG_PINCTRL_SUN8I_V3S is not set +# CONFIG_PINCTRL_SUN9I_A80 is not set +# CONFIG_PINCTRL_SUN9I_A80_R is not set +CONFIG_PINCTRL_SUNRISEPOINT=m +CONFIG_PINCTRL_SUNXI=y +CONFIG_PINCTRL_SX150X=y +CONFIG_PINCTRL_TEGRA=y +CONFIG_PINCTRL_TEGRA114=y +CONFIG_PINCTRL_TEGRA124=y +CONFIG_PINCTRL_TEGRA20=y +CONFIG_PINCTRL_TEGRA30=y +CONFIG_PINCTRL_TEGRA_XUSB=y +CONFIG_PINCTRL_TI_IODELAY=y +CONFIG_PINCTRL_UNIPHIER=y +CONFIG_PINCTRL_UNIPHIER_LD11=y +CONFIG_PINCTRL_UNIPHIER_LD20=y +CONFIG_PINCTRL_UNIPHIER_LD4=y +CONFIG_PINCTRL_UNIPHIER_LD6B=y +CONFIG_PINCTRL_UNIPHIER_PRO4=y +CONFIG_PINCTRL_UNIPHIER_PRO5=y +CONFIG_PINCTRL_UNIPHIER_PXS2=y +CONFIG_PINCTRL_UNIPHIER_PXS3=y +CONFIG_PINCTRL_UNIPHIER_SLD8=y +CONFIG_PINCTRL_VF610=y +CONFIG_PINMUX=y +CONFIG_PJ4B_ERRATA_4742=y +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_PKCS7_TEST_KEY=m +CONFIG_PKEY=m +CONFIG_PL310_ERRATA_588369=y +CONFIG_PL310_ERRATA_727915=y +CONFIG_PL310_ERRATA_753970=y +CONFIG_PL310_ERRATA_769419=y +CONFIG_PL320_MBOX=y +CONFIG_PL330_DMA=m +CONFIG_PLATFORM_MHU=m +CONFIG_PLATFORM_SI4713=m +CONFIG_PLAT_ORION=y +CONFIG_PLAT_SAMSUNG=y +# CONFIG_PLAT_SPEAR is not set +CONFIG_PLAT_VERSATILE=y +CONFIG_PLAT_VERSATILE_CLCD=y +CONFIG_PLIP=m +CONFIG_PLX_HERMES=m +CONFIG_PM=y +CONFIG_PMBUS=m +CONFIG_PMC_ATOM=y +CONFIG_PMIC_ADP5520=y +CONFIG_PMIC_DA903X=y +CONFIG_PMIC_DA9052=y +# CONFIG_PMIC_OPREGION is not set +CONFIG_PM_ADVANCED_DEBUG=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_CLK=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_PM_GENERIC_DOMAINS_OF=y +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_NOTIFIER_ERROR_INJECT=m +CONFIG_PM_OPP=y +CONFIG_PM_RMOBILE=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_DEBUG=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_STD_PARTITION="" +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_TRACE=y +CONFIG_PM_TRACE_RTC=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_PNP=y +CONFIG_PNPACPI=y +CONFIG_PNPBIOS=y +CONFIG_PNPBIOS_PROC_FS=y +# CONFIG_PNP_DEBUG_MESSAGES is not set +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_POSIX_TIMERS=y +# CONFIG_POWER7_CPU is not set +CONFIG_POWER8_CPU=y +CONFIG_POWERNV_CPUFREQ=y +CONFIG_POWERNV_CPUIDLE=y +CONFIG_POWERNV_OP_PANEL=m +CONFIG_POWER_AVS_OMAP=y +CONFIG_POWER_AVS_OMAP_CLASS3=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_AS3722=y +CONFIG_POWER_RESET_AXXIA=y +CONFIG_POWER_RESET_BRCMKONA=y +# CONFIG_POWER_RESET_BRCMSTB is not set +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_HISI=y +# CONFIG_POWER_RESET_IMX is not set +CONFIG_POWER_RESET_LTC2952=y +CONFIG_POWER_RESET_MSM=y +# CONFIG_POWER_RESET_QNAP is not set +CONFIG_POWER_RESET_RESTART=y +CONFIG_POWER_RESET_RMOBILE=m +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_POWER_RESET_VERSATILE=y +CONFIG_POWER_RESET_VEXPRESS=y +# CONFIG_POWER_RESET_XGENE is not set +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PPC=y +CONFIG_PPC64=y +CONFIG_PPC64_BOOT_WRAPPER=y +CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_PPC_4K_PAGES is not set +CONFIG_PPC_64K_PAGES=y +# CONFIG_PPC_970_NAP is not set +# CONFIG_PPC_BOOK3E_64 is not set +CONFIG_PPC_BOOK3S=y +CONFIG_PPC_BOOK3S_64=y +# CONFIG_PPC_CELL is not set +# CONFIG_PPC_CELL_NATIVE is not set +CONFIG_PPC_COPRO_BASE=y +# CONFIG_PPC_DCR_MMIO is not set +# CONFIG_PPC_DCR_NATIVE is not set +CONFIG_PPC_DENORMALISATION=y +# CONFIG_PPC_DISABLE_WERROR is not set +CONFIG_PPC_DOORBELL=y +CONFIG_PPC_DT_CPU_FTRS=y +# CONFIG_PPC_EARLY_DEBUG is not set +# CONFIG_PPC_EMULATED_STATS is not set +# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set +# CONFIG_PPC_EPAPR_HV_PIC is not set +# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set +CONFIG_PPC_FPU=y +CONFIG_PPC_HAVE_PMU_SUPPORT=y +CONFIG_PPC_I8259=y +CONFIG_PPC_ICP_HV=y +CONFIG_PPC_ICP_NATIVE=y +CONFIG_PPC_ICS_RTAS=y +# CONFIG_PPC_INDIRECT_PCI is not set +CONFIG_PPC_INDIRECT_PIO=y +CONFIG_PPC_MEMTRACE=y +CONFIG_PPC_MM_SLICES=y +# CONFIG_PPC_MPC106 is not set +CONFIG_PPC_MSI_BITMAP=y +CONFIG_PPC_NATIVE=y +CONFIG_PPC_OF_BOOT_TRAMPOLINE=y +# CONFIG_PPC_OF_PLATFORM_PCI is not set +CONFIG_PPC_P7_NAP=y +CONFIG_PPC_PERF_CTRS=y +CONFIG_PPC_POWERNV=y +CONFIG_PPC_PSERIES=y +# CONFIG_PPC_PTDUMP is not set +CONFIG_PPC_RADIX_MMU=y +CONFIG_PPC_RADIX_MMU_DEFAULT=y +CONFIG_PPC_RTAS=y +CONFIG_PPC_RTAS_DAEMON=y +CONFIG_PPC_SCOM=y +CONFIG_PPC_SMLPAR=y +CONFIG_PPC_SMP_MUXED_IPI=y +CONFIG_PPC_SPLPAR=y +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_SUBPAGE_PROT=y +CONFIG_PPC_TRANSACTIONAL_MEM=y +CONFIG_PPC_UDBG_16550=y +CONFIG_PPC_VAS=y +CONFIG_PPC_WATCHDOG=y +CONFIG_PPC_WERROR=y +CONFIG_PPC_XICS=y +CONFIG_PPC_XIVE=y +CONFIG_PPC_XIVE_NATIVE=y +CONFIG_PPC_XIVE_SPAPR=y +CONFIG_PPDEV=m +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_SYNC_TTY=m +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_PARPORT=m +# CONFIG_PPS_DEBUG is not set +CONFIG_PPTP=m +# CONFIG_PQ2ADS is not set +# CONFIG_PREEMPTIRQ_EVENTS is not set +CONFIG_PREEMPT_COUNT=y +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PREEMPT_RCU=y +# CONFIG_PREEMPT_TRACER is not set +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_PRINTER=m +CONFIG_PRINTK=y +CONFIG_PRINTK_NMI=y +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 +CONFIG_PRINTK_TIME=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_PRINT_STACK_DEPTH=64 +CONFIG_PRISM2_USB=m +# CONFIG_PRISM54 is not set +CONFIG_PROBE_EVENTS=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_PROC_CHILDREN=y +CONFIG_PROC_EVENTS=y +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_VMCORE=y +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +CONFIG_PROFILING=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_PROVE_RCU is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +CONFIG_PSAMPLE=m +CONFIG_PSERIES_CPUIDLE=y +CONFIG_PSERIES_ENERGY=m +# CONFIG_PSTORE_FTRACE is not set +# CONFIG_PSTORE_LZ4_COMPRESS is not set +# CONFIG_PSTORE_LZO_COMPRESS is not set +# CONFIG_PSTORE_PMSG is not set +CONFIG_PSTORE_ZLIB_COMPRESS=y +CONFIG_PTP_1588_CLOCK_DTE=m +CONFIG_PTP_1588_CLOCK_GIANFAR=m +CONFIG_PTP_1588_CLOCK_KVM=m +CONFIG_PTP_1588_CLOCK_PCH=m +CONFIG_PUNIT_ATOM_DEBUG=m +CONFIG_PVPANIC=m +CONFIG_PWM_ATMEL_HLCDC_PWM=m +CONFIG_PWM_BCM2835=m +CONFIG_PWM_BCM_IPROC=m +CONFIG_PWM_BERLIN=m +CONFIG_PWM_BRCMSTB=m +CONFIG_PWM_CRC=y +CONFIG_PWM_CROS_EC=m +CONFIG_PWM_FSL_FTM=m +CONFIG_PWM_HIBVT=m +CONFIG_PWM_IMX=m +CONFIG_PWM_LP3943=m +CONFIG_PWM_LPSS=m +CONFIG_PWM_LPSS_PCI=m +CONFIG_PWM_LPSS_PLATFORM=m +CONFIG_PWM_MEDIATEK=m +CONFIG_PWM_MESON=m +CONFIG_PWM_MTK_DISP=m +CONFIG_PWM_OMAP_DMTIMER=m +CONFIG_PWM_PCA9685=m +CONFIG_PWM_RCAR=m +CONFIG_PWM_RENESAS_TPU=m +CONFIG_PWM_ROCKCHIP=m +CONFIG_PWM_SAMSUNG=m +CONFIG_PWM_STMPE=y +CONFIG_PWM_SUN4I=m +CONFIG_PWM_SYSFS=y +CONFIG_PWM_TEGRA=m +CONFIG_PWM_TIPWMSS=y +CONFIG_PWM_TWL=m +CONFIG_PWM_TWL_LED=m +CONFIG_PWRSEQ_EMMC=m +CONFIG_PWRSEQ_SD8787=m +CONFIG_PWRSEQ_SIMPLE=m +CONFIG_PXA168_ETH=m +CONFIG_QCA7000=m +CONFIG_QCA7000_SPI=m +CONFIG_QCA7000_UART=m +CONFIG_QCOM_ADSP_PIL=m +CONFIG_QCOM_APCS_IPC=m +CONFIG_QCOM_BAM_DMA=m +CONFIG_QCOM_CLK_RPM=m +CONFIG_QCOM_CLK_SMD_RPM=m +CONFIG_QCOM_COINCELL=m +CONFIG_QCOM_EBI2=y +CONFIG_QCOM_EMAC=m +CONFIG_QCOM_FALKOR_ERRATUM_1003=y +CONFIG_QCOM_FALKOR_ERRATUM_1009=y +CONFIG_QCOM_FALKOR_ERRATUM_E1041=y +CONFIG_QCOM_GDSC=y +CONFIG_QCOM_GLINK_SSR=m +CONFIG_QCOM_GSBI=m +CONFIG_QCOM_HIDMA=m +CONFIG_QCOM_HIDMA_MGMT=m +CONFIG_QCOM_IOMMU=y +CONFIG_QCOM_IRQ_COMBINER=y +CONFIG_QCOM_L2_PMU=y +CONFIG_QCOM_L3_PMU=y +CONFIG_QCOM_MDT_LOADER=m +CONFIG_QCOM_PM=y +CONFIG_QCOM_PM8XXX_XOADC=m +# CONFIG_QCOM_Q6V5_PIL is not set +CONFIG_QCOM_QDF2400_ERRATUM_0065=y +CONFIG_QCOM_QFPROM=m +CONFIG_QCOM_RMTFS_MEM=m +CONFIG_QCOM_RPMCC=y +CONFIG_QCOM_RPROC_COMMON=m +CONFIG_QCOM_SCM=y +CONFIG_QCOM_SCM_32=y +CONFIG_QCOM_SCM_64=y +# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set +CONFIG_QCOM_SMD_RPM=m +CONFIG_QCOM_SMEM=m +CONFIG_QCOM_SMEM_STATE=y +CONFIG_QCOM_SMP2P=m +CONFIG_QCOM_SMSM=m +CONFIG_QCOM_SPMI_IADC=m +CONFIG_QCOM_SPMI_TEMP_ALARM=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_TSENS=m +CONFIG_QCOM_VADC_COMMON=m +CONFIG_QCOM_WCNSS_CTRL=m +# CONFIG_QCOM_WCNSS_PIL is not set +CONFIG_QCOM_WDT=m +CONFIG_QDIO=m +CONFIG_QED=m +CONFIG_QEDE=m +CONFIG_QEDF=m +CONFIG_QEDI=m +CONFIG_QED_FCOE=y +CONFIG_QED_ISCSI=y +CONFIG_QED_LL2=y +CONFIG_QED_OOO=y +CONFIG_QED_RDMA=y +CONFIG_QED_SRIOV=y +CONFIG_QETH=m +CONFIG_QETH_IPV6=y +CONFIG_QETH_L2=m +CONFIG_QETH_L3=m +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLCNIC_DCB=y +CONFIG_QLCNIC_HWMON=y +CONFIG_QLCNIC_SRIOV=y +CONFIG_QLGE=m +# CONFIG_QNX6FS_DEBUG is not set +CONFIG_QORIQ_CPUFREQ=m +CONFIG_QORIQ_THERMAL=m +CONFIG_QRTR=m +CONFIG_QRTR_SMD=m +CONFIG_QSEMI_PHY=m +CONFIG_QTNFMAC=m +CONFIG_QTNFMAC_PEARL_PCIE=m +# CONFIG_QUEUED_LOCK_STAT is not set +CONFIG_QUEUED_RWLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_QUOTA=y +CONFIG_QUOTACTL=y +CONFIG_QUOTACTL_COMPAT=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QUOTA_TREE=m +CONFIG_R6040=m +CONFIG_R8169=m +CONFIG_R8188EU=m +CONFIG_R8712U=m +CONFIG_R8822BE=m +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_CADET=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_ISA=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_MIROPCM20=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_SAA7706H=m +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_SHARK=m +CONFIG_RADIO_SHARK2=m +CONFIG_RADIO_SI470X=y +CONFIG_RADIO_SI4713=m +CONFIG_RADIO_SI476X=m +CONFIG_RADIO_TEA575X=m +CONFIG_RADIO_TEA5764=m +CONFIG_RADIO_TEF6862=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TIMBERDALE=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_WL1273=m +CONFIG_RADIO_WL128X=m +CONFIG_RADIO_ZOLTRIX=m +CONFIG_RADIX_TREE_MULTIORDER=y +CONFIG_RAID6_PQ=m +CONFIG_RAID_ATTRS=m +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_RANDOMIZE_BASE=y +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_RANDOMIZE_MODULE_REGION_FULL=y +CONFIG_RAPIDIO=y +CONFIG_RAPIDIO_CHMAN=m +CONFIG_RAPIDIO_CPS_GEN2=m +CONFIG_RAPIDIO_CPS_XX=m +# CONFIG_RAPIDIO_DEBUG is not set +CONFIG_RAPIDIO_DISC_TIMEOUT=30 +CONFIG_RAPIDIO_DMA_ENGINE=y +# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set +CONFIG_RAPIDIO_ENUM_BASIC=m +CONFIG_RAPIDIO_MPORT_CDEV=m +CONFIG_RAPIDIO_RXS_GEN3=m +CONFIG_RAPIDIO_TSI568=m +CONFIG_RAPIDIO_TSI57X=m +CONFIG_RAPIDIO_TSI721=m +CONFIG_RAS=y +CONFIG_RASPBERRYPI_FIRMWARE=y +CONFIG_RASPBERRYPI_POWER=y +CONFIG_RAS_CEC=y +CONFIG_RATIONAL=y +CONFIG_RAVB=m +# CONFIG_RBTREE_TEST is not set +CONFIG_RCAR_DMAC=m +CONFIG_RCAR_GEN3_THERMAL=m +CONFIG_RCAR_GYRO_ADC=m +CONFIG_RCAR_THERMAL=m +# CONFIG_RCU_EQS_DEBUG is not set +# CONFIG_RCU_EXPERT is not set +CONFIG_RCU_NEED_SEGCBLIST=y +CONFIG_RCU_PERF_TEST=m +CONFIG_RCU_STALL_COMMON=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RC_ATI_REMOTE=m +CONFIG_RC_CORE=m +CONFIG_RC_DECODERS=y +CONFIG_RC_DEVICES=y +CONFIG_RC_LOOPBACK=m +CONFIG_RC_MAP=m +CONFIG_RDMA_RXE=m +CONFIG_RDS=m +# CONFIG_RDS_DEBUG is not set +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +CONFIG_RD_BZIP2=y +CONFIG_RD_GZIP=y +CONFIG_RD_LZ4=y +CONFIG_RD_LZMA=y +CONFIG_RD_LZO=y +CONFIG_RD_XZ=y +# CONFIG_READABLE_ASM is not set +CONFIG_REALTEK_AUTOPM=y +CONFIG_REALTEK_PHY=m +CONFIG_REBOOT_MODE=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REGMAP=y +CONFIG_REGMAP_AC97=m +CONFIG_REGMAP_HWSPINLOCK=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_IRQ=y +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_SPI=y +CONFIG_REGMAP_SPMI=m +CONFIG_REGMAP_W1=m +CONFIG_REGULATOR_88PM800=m +CONFIG_REGULATOR_88PM8607=m +CONFIG_REGULATOR_AAT2870=m +CONFIG_REGULATOR_AB3100=m +CONFIG_REGULATOR_ACT8865=m +CONFIG_REGULATOR_ACT8945A=m +CONFIG_REGULATOR_AD5398=m +CONFIG_REGULATOR_ANATOP=m +CONFIG_REGULATOR_ARIZONA_LDO1=m +CONFIG_REGULATOR_ARIZONA_MICSUPP=m +CONFIG_REGULATOR_AS3711=m +CONFIG_REGULATOR_AS3722=m +CONFIG_REGULATOR_AXP20X=m +CONFIG_REGULATOR_BCM590XX=m +CONFIG_REGULATOR_BD9571MWV=m +CONFIG_REGULATOR_CPCAP=m +CONFIG_REGULATOR_DA903X=m +CONFIG_REGULATOR_DA9052=m +CONFIG_REGULATOR_DA9055=m +CONFIG_REGULATOR_DA9062=m +CONFIG_REGULATOR_DA9063=m +CONFIG_REGULATOR_DA9210=m +CONFIG_REGULATOR_DA9211=m +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FAN53555=m +CONFIG_REGULATOR_GPIO=m +CONFIG_REGULATOR_HI6421=m +CONFIG_REGULATOR_HI6421V530=m +CONFIG_REGULATOR_HI655X=m +CONFIG_REGULATOR_ISL6271A=m +CONFIG_REGULATOR_ISL9305=m +CONFIG_REGULATOR_LM363X=m +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_LP3972=m +CONFIG_REGULATOR_LP872X=m +CONFIG_REGULATOR_LP873X=m +CONFIG_REGULATOR_LP8755=m +CONFIG_REGULATOR_LP87565=m +CONFIG_REGULATOR_LP8788=m +CONFIG_REGULATOR_LTC3589=m +CONFIG_REGULATOR_LTC3676=m +CONFIG_REGULATOR_MAX14577=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX77620=m +CONFIG_REGULATOR_MAX77686=m +CONFIG_REGULATOR_MAX77693=m +CONFIG_REGULATOR_MAX77802=m +CONFIG_REGULATOR_MAX8649=m +CONFIG_REGULATOR_MAX8660=m +CONFIG_REGULATOR_MAX8907=m +CONFIG_REGULATOR_MAX8925=m +CONFIG_REGULATOR_MAX8952=m +CONFIG_REGULATOR_MAX8973=m +CONFIG_REGULATOR_MAX8997=m +CONFIG_REGULATOR_MAX8998=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_MC13892=m +CONFIG_REGULATOR_MC13XXX_CORE=m +CONFIG_REGULATOR_MT6311=m +CONFIG_REGULATOR_MT6323=m +CONFIG_REGULATOR_MT6380=m +CONFIG_REGULATOR_MT6397=m +CONFIG_REGULATOR_PALMAS=m +CONFIG_REGULATOR_PBIAS=m +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_PFUZE100=m +CONFIG_REGULATOR_PV88060=m +CONFIG_REGULATOR_PV88080=m +CONFIG_REGULATOR_PV88090=m +CONFIG_REGULATOR_PWM=m +CONFIG_REGULATOR_QCOM_RPM=m +CONFIG_REGULATOR_QCOM_SMD_RPM=m +CONFIG_REGULATOR_QCOM_SPMI=m +CONFIG_REGULATOR_RC5T583=m +CONFIG_REGULATOR_RK808=m +CONFIG_REGULATOR_RN5T618=m +CONFIG_REGULATOR_RT5033=m +CONFIG_REGULATOR_S2MPA01=m +CONFIG_REGULATOR_S2MPS11=m +CONFIG_REGULATOR_S5M8767=m +CONFIG_REGULATOR_SKY81452=m +CONFIG_REGULATOR_TI_ABB=y +CONFIG_REGULATOR_TPS51632=m +CONFIG_REGULATOR_TPS6105X=m +CONFIG_REGULATOR_TPS62360=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65086=m +CONFIG_REGULATOR_TPS65090=m +CONFIG_REGULATOR_TPS65132=m +CONFIG_REGULATOR_TPS65218=m +CONFIG_REGULATOR_TPS6524X=m +CONFIG_REGULATOR_TPS6586X=m +CONFIG_REGULATOR_TPS65910=m +CONFIG_REGULATOR_TPS65912=m +CONFIG_REGULATOR_TPS80031=m +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_VCTRL=m +CONFIG_REGULATOR_VEXPRESS=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8350=m +CONFIG_REGULATOR_WM8400=m +CONFIG_REGULATOR_WM8994=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_REISERFS_FS_XATTR=y +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_RELAY=y +CONFIG_RELOCATABLE=y +# CONFIG_RELOCATABLE_TEST is not set +CONFIG_REMOTEPROC=m +CONFIG_RENESAS_DMA=y +CONFIG_RENESAS_INTC_IRQPIN=y +CONFIG_RENESAS_IRQC=y +CONFIG_RENESAS_OSTM=y +CONFIG_RENESAS_PHY=m +CONFIG_RENESAS_RZAWDT=m +CONFIG_RENESAS_USB_DMAC=m +CONFIG_RENESAS_WDT=m +# CONFIG_RESET_ATH79 is not set +CONFIG_RESET_ATTACK_MITIGATION=y +# CONFIG_RESET_AXS10X is not set +CONFIG_RESET_HISI=y +# CONFIG_RESET_LANTIQ is not set +# CONFIG_RESET_LPC18XX is not set +# CONFIG_RESET_PISTACHIO is not set +# CONFIG_RESET_TEGRA_BPMP is not set +CONFIG_RESET_TI_SYSCON=m +CONFIG_RESET_UNIPHIER=m +# CONFIG_RESET_ZYNQ is not set +CONFIG_RETPOLINE=y +CONFIG_RETU_WATCHDOG=m +CONFIG_RFD77402=m +CONFIG_RFD_FTL=m +CONFIG_RFKILL_GPIO=m +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFS_ACCEL=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +CONFIG_RIONET=m +CONFIG_RIONET_RX_SIZE=128 +CONFIG_RIONET_TX_SIZE=128 +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_CORE=m +CONFIG_RMI4_F03=y +CONFIG_RMI4_F03_SERIO=m +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y +CONFIG_RMI4_F34=y +CONFIG_RMI4_F54=y +CONFIG_RMI4_F55=y +CONFIG_RMI4_I2C=m +CONFIG_RMI4_SMB=m +CONFIG_RMI4_SPI=m +CONFIG_RMNET=m +CONFIG_RN5T618_WATCHDOG=m +CONFIG_ROCKCHIP_ANALOGIX_DP=y +CONFIG_ROCKCHIP_CDN_DP=y +CONFIG_ROCKCHIP_DW_HDMI=y +CONFIG_ROCKCHIP_DW_MIPI_DSI=y +CONFIG_ROCKCHIP_EFUSE=m +CONFIG_ROCKCHIP_GRF=y +CONFIG_ROCKCHIP_INNO_HDMI=y +CONFIG_ROCKCHIP_IODOMAIN=m +CONFIG_ROCKCHIP_IOMMU=y +CONFIG_ROCKCHIP_LVDS=y +CONFIG_ROCKCHIP_MBOX=y +CONFIG_ROCKCHIP_PHY=m +CONFIG_ROCKCHIP_PM_DOMAINS=y +CONFIG_ROCKCHIP_SARADC=m +CONFIG_ROCKCHIP_THERMAL=m +CONFIG_ROCKCHIP_TIMER=y +CONFIG_ROCKER=m +CONFIG_ROCKETPORT=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +# CONFIG_ROMFS_BACKED_BY_MTD is not set +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROSE=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RPMSG=m +CONFIG_RPMSG_CHAR=m +CONFIG_RPMSG_QCOM_GLINK_NATIVE=m +CONFIG_RPMSG_QCOM_GLINK_RPM=m +CONFIG_RPMSG_QCOM_GLINK_SMEM=m +CONFIG_RPMSG_QCOM_SMD=m +CONFIG_RPR0521=m +CONFIG_RPS=y +CONFIG_RSI_91X=m +# CONFIG_RSI_DEBUGFS is not set +CONFIG_RSI_SDIO=m +CONFIG_RSI_USB=m +CONFIG_RST_RCAR=y +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT2500USB=m +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT3290=y +CONFIG_RT2800PCI_RT33XX=y +CONFIG_RT2800PCI_RT35XX=y +CONFIG_RT2800PCI_RT53XX=y +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m +CONFIG_RT2X00=m +# CONFIG_RT2X00_DEBUG is not set +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_CRYPTO=y +# CONFIG_RT2X00_LIB_DEBUGFS is not set +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_LEDS=y +CONFIG_RT2X00_LIB_MMIO=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT61PCI=m +CONFIG_RT73USB=m +CONFIG_RTAS_ERROR_LOGGING=y +CONFIG_RTAS_FLASH=m +CONFIG_RTAS_PROC=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_DRV_88PM80X=m +CONFIG_RTC_DRV_88PM860X=m +CONFIG_RTC_DRV_AB3100=m +CONFIG_RTC_DRV_ABB5ZES3=m +CONFIG_RTC_DRV_ABX80X=m +CONFIG_RTC_DRV_ARMADA38X=m +CONFIG_RTC_DRV_AS3722=m +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_BRCMSTB=m +CONFIG_RTC_DRV_CPCAP=m +CONFIG_RTC_DRV_DA9052=m +CONFIG_RTC_DRV_DA9055=m +CONFIG_RTC_DRV_DA9063=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1302=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_CENTURY=y +CONFIG_RTC_DRV_DS1307_HWMON=y +CONFIG_RTC_DRV_DS1343=m +CONFIG_RTC_DRV_DS1347=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1374_WDT=y +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS1685=y +CONFIG_RTC_DRV_DS1685_FAMILY=m +# CONFIG_RTC_DRV_DS1689 is not set +# CONFIG_RTC_DRV_DS17285 is not set +CONFIG_RTC_DRV_DS1742=m +# CONFIG_RTC_DRV_DS17485 is not set +# CONFIG_RTC_DRV_DS17885 is not set +CONFIG_RTC_DRV_DS2404=m +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_DS3232_HWMON=y +CONFIG_RTC_DRV_EFI=y +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_FTRTC010=m +CONFIG_RTC_DRV_GENERIC=y +CONFIG_RTC_DRV_HID_SENSOR_TIME=m +CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_IMXDI=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_LP8788=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_M41T93=m +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_MAX6916=m +CONFIG_RTC_DRV_MAX77686=m +CONFIG_RTC_DRV_MAX8907=m +CONFIG_RTC_DRV_MAX8925=m +CONFIG_RTC_DRV_MAX8997=m +CONFIG_RTC_DRV_MAX8998=m +CONFIG_RTC_DRV_MC13XXX=m +CONFIG_RTC_DRV_MCP795=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_MT6397=m +CONFIG_RTC_DRV_MT7622=m +CONFIG_RTC_DRV_MV=y +CONFIG_RTC_DRV_MXC=m +CONFIG_RTC_DRV_OMAP=y +CONFIG_RTC_DRV_OPAL=y +CONFIG_RTC_DRV_PALMAS=m +CONFIG_RTC_DRV_PCAP=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_PL030=m +CONFIG_RTC_DRV_PM8XXX=m +CONFIG_RTC_DRV_R7301=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RC5T583=m +CONFIG_RTC_DRV_RK808=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_RTD119X=y +CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y +CONFIG_RTC_DRV_RV8803=m +CONFIG_RTC_DRV_RX4581=m +CONFIG_RTC_DRV_RX6110=m +CONFIG_RTC_DRV_RX8010=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_S3C=y +CONFIG_RTC_DRV_S5M=m +CONFIG_RTC_DRV_SC27XX=m +CONFIG_RTC_DRV_SH=m +CONFIG_RTC_DRV_SNVS=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_SUN6I=y +CONFIG_RTC_DRV_TEGRA=m +# CONFIG_RTC_DRV_TEST is not set +CONFIG_RTC_DRV_TPS6586X=m +CONFIG_RTC_DRV_TPS65910=m +CONFIG_RTC_DRV_TPS80031=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_VRTC=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_WM8350=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_XGENE=y +CONFIG_RTC_DRV_ZYNQMP=m +# CONFIG_RTC_DS1685_PROC_REGS is not set +# CONFIG_RTC_DS1685_SYSFS_REGS is not set +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_I2C_AND_SPI=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y +CONFIG_RTC_NVMEM=y +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL8188EE=m +CONFIG_RTL8192CE=m +CONFIG_RTL8192CU=m +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8192DE=m +CONFIG_RTL8192E=m +CONFIG_RTL8192EE=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192U=m +CONFIG_RTL8723AE=m +CONFIG_RTL8723BE=m +CONFIG_RTL8723BS=m +CONFIG_RTL8723_COMMON=m +CONFIG_RTL8821AE=m +CONFIG_RTL8XXXU=m +CONFIG_RTL8XXXU_UNTESTED=y +CONFIG_RTLBTCOEXIST=m +CONFIG_RTLHALMAC_ST=m +CONFIG_RTLLIB=m +CONFIG_RTLLIB_CRYPTO_CCMP=m +CONFIG_RTLLIB_CRYPTO_TKIP=m +CONFIG_RTLLIB_CRYPTO_WEP=m +CONFIG_RTLPHYDM_ST=m +CONFIG_RTLWIFI=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTLWIFI_DEBUG_ST=y +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +CONFIG_RTL_CARDS=m +CONFIG_RTS5208=m +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_RT_MUTEXES=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_RXKAD=y +CONFIG_S2IO=m +CONFIG_S390=y +CONFIG_S390_CCW_IOMMU=y +CONFIG_S390_GUEST=y +CONFIG_S390_HYPFS_FS=y +CONFIG_S390_IOMMU=y +CONFIG_S390_PRNG=m +CONFIG_S390_PTDUMP=y +CONFIG_S390_TAPE=m +CONFIG_S390_TAPE_34XX=m +CONFIG_S390_TAPE_3590=m +CONFIG_S390_VMUR=m +CONFIG_S3C2410_WATCHDOG=m +CONFIG_S5P_DEV_MFC=y +# CONFIG_SAMPLES is not set +# CONFIG_SAMSUNG_ATAGS is not set +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_SAMSUNG_MC=y +# CONFIG_SAMSUNG_PM_CHECK is not set +CONFIG_SAMSUNG_Q10=m +CONFIG_SATA_ACARD_AHCI=m +CONFIG_SATA_AHCI=m +CONFIG_SATA_AHCI_SEATTLE=m +CONFIG_SATA_DWC=m +# CONFIG_SATA_DWC_DEBUG is not set +CONFIG_SATA_DWC_OLD_DMA=y +CONFIG_SATA_HIGHBANK=y +CONFIG_SATA_INIC162X=m +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PMP=y +CONFIG_SATA_PROMISE=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_RCAR=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIL24=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_SX4=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_SATA_ZPODD=y +CONFIG_SBC7240_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_SBITMAP=y +CONFIG_SBNI=m +# CONFIG_SBNI_MULTILINE is not set +CONFIG_SBP_TARGET=m +CONFIG_SC1200_WDT=m +CONFIG_SC92031=m +CONFIG_SCA3000=m +CONFIG_SCANLOG=m +CONFIG_SCC=m +# CONFIG_SCC_DELAY is not set +# CONFIG_SCC_TRXECHO is not set +CONFIG_SCHEDSTATS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_SCHED_BOOK=y +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_DRAWER=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCHED_INFO=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_MC_PRIO=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_SCHED_TOPOLOGY=y +CONFIG_SCHED_TRACER=y +CONFIG_SCIF=m +CONFIG_SCIF_BUS=m +CONFIG_SCLP_ASYNC=m +CONFIG_SCLP_ASYNC_ID="000000000" +CONFIG_SCLP_CONSOLE=y +# CONFIG_SCLP_OFB is not set +CONFIG_SCLP_TTY=y +CONFIG_SCLP_VT220_CONSOLE=y +CONFIG_SCLP_VT220_TTY=y +CONFIG_SCM_BLOCK=m +CONFIG_SCM_BUS=y +CONFIG_SCOM_DEBUGFS=y +CONFIG_SCR24X=m +CONFIG_SCSI=y +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_ALUA=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FLASHPOINT=y +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_HISI_SAS=m +CONFIG_SCSI_HISI_SAS_PCI=m +CONFIG_SCSI_IBMVFC=m +CONFIG_SCSI_IBMVFC_TRACE=y +CONFIG_SCSI_IBMVSCSI=m +CONFIG_SCSI_IBMVSCSIS=m +CONFIG_SCSI_IMM=m +CONFIG_SCSI_IPR=m +CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_IPR_TRACE=y +CONFIG_SCSI_ISCI=m +CONFIG_SCSI_ISCSI_ATTRS=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SCSI_MOD=y +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS=m +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_NSP32=m +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_PROC_FS=y +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SIM710=m +CONFIG_SCSI_SMARTPQI=m +# CONFIG_SCSI_SNIC_DEBUG_FS is not set +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_UFSHCD_PCI=m +CONFIG_SCSI_UFSHCD_PLATFORM=m +CONFIG_SCSI_UFS_DWC_TC_PCI=m +CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m +# CONFIG_SCSI_UFS_QCOM is not set +CONFIG_SCSI_VIRTIO=m +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +CONFIG_SCx200=m +CONFIG_SCx200HR_TIMER=m +CONFIG_SCx200_ACB=m +CONFIG_SCx200_GPIO=m +CONFIG_SCx200_WDT=m +CONFIG_SDIO_UART=m +CONFIG_SDLA=m +# CONFIG_SDMA_VERBOSITY is not set +CONFIG_SDR_PLATFORM_DRIVERS=y +CONFIG_SEALEVEL_4021=m +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +CONFIG_SECONDARY_TRUSTED_KEYRING=y +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +# CONFIG_SECURITY_APPARMOR_DEBUG is not set +CONFIG_SECURITY_APPARMOR_HASH=y +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY_INFINIBAND=y +# CONFIG_SECURITY_LOADPIN is not set +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_SECURITY_SELINUX_DEVELOP=y +# CONFIG_SECURITY_SELINUX_DISABLE is not set +CONFIG_SECURITY_SMACK=y +CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y +# CONFIG_SECURITY_SMACK_BRINGUP is not set +CONFIG_SECURITY_SMACK_NETFILTER=y +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init" +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +# CONFIG_SECURITY_WRITABLE_HOOKS is not set +CONFIG_SECURITY_YAMA=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_AD7314=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADC128D818=m +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM1275=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADS1015=m +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_ADT7310=m +CONFIG_SENSORS_ADT7410=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_ADT7X10=m +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_APDS990X=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ARM_SCPI=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_ASPEED=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_DA9052_ADC=m +CONFIG_SENSORS_DA9055=m +CONFIG_SENSORS_DELL_SMM=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_EMC1403=m +CONFIG_SENSORS_EMC2103=m +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_FTSTEUTATES=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_GPIO_FAN=m +CONFIG_SENSORS_HDAPS=m +CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m +CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IBMPOWERNV=m +CONFIG_SENSORS_IBM_CFFPS=m +CONFIG_SENSORS_IIO_HWMON=m +CONFIG_SENSORS_INA209=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_SENSORS_IR35221=m +CONFIG_SENSORS_ISL29018=m +CONFIG_SENSORS_ISL29028=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_JC42=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_LINEAGE=m +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_SENSORS_LIS3_I2C=m +CONFIG_SENSORS_LIS3_SPI=m +CONFIG_SENSORS_LM25066=m +CONFIG_SENSORS_LM3533=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LM95234=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LM95245=m +CONFIG_SENSORS_LTC2945=m +CONFIG_SENSORS_LTC2978=m +CONFIG_SENSORS_LTC2978_REGULATOR=y +CONFIG_SENSORS_LTC2990=m +CONFIG_SENSORS_LTC3815=m +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4222=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC4260=m +CONFIG_SENSORS_LTC4261=m +CONFIG_SENSORS_MAX1111=m +CONFIG_SENSORS_MAX16064=m +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX1668=m +CONFIG_SENSORS_MAX197=m +CONFIG_SENSORS_MAX20751=m +CONFIG_SENSORS_MAX31722=m +CONFIG_SENSORS_MAX31785=m +CONFIG_SENSORS_MAX31790=m +CONFIG_SENSORS_MAX34440=m +CONFIG_SENSORS_MAX6621=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX6697=m +CONFIG_SENSORS_MAX8688=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_MENF21BMC_HWMON=m +CONFIG_SENSORS_NCT6683=m +CONFIG_SENSORS_NCT6775=m +CONFIG_SENSORS_NCT7802=m +CONFIG_SENSORS_NCT7904=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_PMBUS=m +CONFIG_SENSORS_POWR1220=m +CONFIG_SENSORS_PWM_FAN=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SHT3x=m +CONFIG_SENSORS_SHTC1=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMM665=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_STTS751=m +CONFIG_SENSORS_TC654=m +CONFIG_SENSORS_TC74=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP103=m +CONFIG_SENSORS_TMP108=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_TPS40422=m +CONFIG_SENSORS_TPS53679=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_TSL2563=m +CONFIG_SENSORS_UCD9000=m +CONFIG_SENSORS_UCD9200=m +CONFIG_SENSORS_VEXPRESS=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_WM8350=m +CONFIG_SENSORS_XGENE=m +CONFIG_SENSORS_ZL6100=m +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_ASPEED_VUART=m +# CONFIG_SERIAL_8250_BCM2835AUX is not set +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_DMA=y +# CONFIG_SERIAL_8250_EM is not set +CONFIG_SERIAL_8250_EXAR=m +CONFIG_SERIAL_8250_EXAR_ST16C554=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_LPSS=m +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_MEN_MCB=m +CONFIG_SERIAL_8250_MID=m +CONFIG_SERIAL_8250_MOXA=m +CONFIG_SERIAL_8250_MT6577=y +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_OMAP=m +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_RT288X=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=32 +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_UNIPHIER=m +CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 +CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 +CONFIG_SERIAL_AMBA_PL010=m +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_ARC_NR_PORTS=1 +CONFIG_SERIAL_BCM63XX=m +CONFIG_SERIAL_CONEXANT_DIGICOLOR=m +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y +CONFIG_SERIAL_ICOM=m +# CONFIG_SERIAL_IFX6X60 is not set +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +CONFIG_SERIAL_IPOCTAL=m +CONFIG_SERIAL_KGDB_NMI=y +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_MAX310X=y +CONFIG_SERIAL_MEN_Z135=m +CONFIG_SERIAL_MESON=m +CONFIG_SERIAL_MSM=y +CONFIG_SERIAL_MSM_CONSOLE=y +CONFIG_SERIAL_MVEBU_CONSOLE=y +CONFIG_SERIAL_MVEBU_UART=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +CONFIG_SERIAL_OWL=y +CONFIG_SERIAL_OWL_CONSOLE=y +CONFIG_SERIAL_PCH_UART=m +CONFIG_SERIAL_RP2_NR_UARTS=32 +CONFIG_SERIAL_SAMSUNG=m +CONFIG_SERIAL_SAMSUNG_UARTS=4 +CONFIG_SERIAL_SAMSUNG_UARTS_4=y +CONFIG_SERIAL_SC16IS7XX=m +CONFIG_SERIAL_SC16IS7XX_CORE=m +CONFIG_SERIAL_SC16IS7XX_I2C=y +CONFIG_SERIAL_SC16IS7XX_SPI=y +CONFIG_SERIAL_SCCNXP_CONSOLE=y +CONFIG_SERIAL_SH_SCI=m +CONFIG_SERIAL_SH_SCI_DMA=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=2 +CONFIG_SERIAL_SPRD=m +CONFIG_SERIAL_ST_ASC=m +CONFIG_SERIAL_TEGRA=m +CONFIG_SERIAL_TIMBERDALE=m +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_UARTLITE_NR_UARTS=1 +CONFIG_SERIAL_XILINX_PS_UART=m +CONFIG_SERIO_ALTERA_PS2=m +CONFIG_SERIO_AMBAKMI=m +CONFIG_SERIO_APBPS2=m +CONFIG_SERIO_ARC_PS2=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_GPIO_PS2=m +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_NVEC_PS2=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_PS2MULT=m +CONFIG_SERIO_RAW=m +CONFIG_SERIO_SERPORT=m +# CONFIG_SERIO_SUN4I_PS2 is not set +CONFIG_SERIO_XILINX_XPS_PS2=m +CONFIG_SETEND_EMULATION=y +CONFIG_SFC_FALCON_MTD=y +CONFIG_SFC_MCDI_LOGGING=y +CONFIG_SFC_MCDI_MON=y +CONFIG_SFC_MTD=y +CONFIG_SFC_SRIOV=y +CONFIG_SFI=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_SG_POOL=y +CONFIG_SHMEM=y +CONFIG_SH_DMAE=m +CONFIG_SH_DMAE_BASE=y +CONFIG_SH_ETH=m +CONFIG_SI1145=m +CONFIG_SI7005=m +CONFIG_SI7020=m +CONFIG_SIGMATEL_FIR=m +CONFIG_SIGNALFD=y +CONFIG_SIGNATURE=y +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +CONFIG_SILEAD_DMI=y +# CONFIG_SIMPLE_GPIO is not set +CONFIG_SIMPLE_PM_BUS=y +CONFIG_SIS190=m +CONFIG_SIS900=m +CONFIG_SKFP=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKGE_GENESIS=y +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +# CONFIG_SLAB is not set +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_MERGE_DEFAULT=y +CONFIG_SLHC=y +CONFIG_SLICOSS=m +CONFIG_SLIC_DS26522=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_SLIP_SMART=y +# CONFIG_SLOB is not set +CONFIG_SLUB=y +CONFIG_SLUB_CPU_PARTIAL=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +CONFIG_SLUB_MEMCG_SYSFS_ON=y +# CONFIG_SLUB_STATS is not set +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_SMC=m +CONFIG_SMC911X=m +CONFIG_SMC9194=m +CONFIG_SMC_DIAG=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_SMP=y +CONFIG_SMP_ON_UP=y +CONFIG_SMSC37B787_WDT=m +CONFIG_SMSC911X=m +# CONFIG_SMSC911X_ARCH_HOOKS is not set +CONFIG_SMSC9420=m +CONFIG_SMSC_PHY=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMSGIUCV=y +CONFIG_SMSGIUCV_EVENT=m +CONFIG_SMS_SDIO_DRV=m +CONFIG_SMS_SIANO_DEBUGFS=y +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_SIANO_RC=y +CONFIG_SMS_USB_DRV=m +CONFIG_SM_FTL=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_AD1889=m +CONFIG_SND_ADLIB=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ALOOP=m +CONFIG_SND_ALS100=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_AM33XX_SOC_EVM=m +CONFIG_SND_ARM=y +CONFIG_SND_ARMAACI=m +CONFIG_SND_ASIHPI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_ATMEL_SOC=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AUDIO_GRAPH_CARD=m +CONFIG_SND_AUDIO_GRAPH_SCU_CARD=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT1605=m +CONFIG_SND_AZT2316=m +CONFIG_SND_AZT2320=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BCD2000=m +CONFIG_SND_BCM2835=m +CONFIG_SND_BCM2835_SOC_I2S=m +CONFIG_SND_BEBOB=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMI8328=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4236=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m +# CONFIG_SND_DAVINCI_SOC_I2S is not set +CONFIG_SND_DAVINCI_SOC_MCASP=m +# CONFIG_SND_DEBUG is not set +CONFIG_SND_DESIGNWARE_I2S=m +CONFIG_SND_DESIGNWARE_PCM=y +CONFIG_SND_DICE=m +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_DRIVERS=y +CONFIG_SND_DUMMY=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_ECHO3G=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_ES1968_INPUT=y +CONFIG_SND_ES1968_RADIO=y +CONFIG_SND_FIREFACE=m +CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_DIGI00X=m +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_FIREWIRE_MOTU=m +CONFIG_SND_FIREWIRE_TASCAM=m +CONFIG_SND_FIREWORKS=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_GINA20=m +CONFIG_SND_GINA24=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_HDA=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m +CONFIG_SND_HDA_CODEC_CA0132_DSP=y +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CORE=m +CONFIG_SND_HDA_DSP_LOADER=y +CONFIG_SND_HDA_EXT_CORE=m +CONFIG_SND_HDA_GENERIC=m +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=0 +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 +CONFIG_SND_HDA_PREALLOC_SIZE=64 +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_TEGRA=m +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_HRTIMER=m +CONFIG_SND_HWDEP=m +CONFIG_SND_I2S_HI6210_I2S=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_IMX_SOC=y +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_ISA=y +CONFIG_SND_ISIGHT=m +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +CONFIG_SND_JAZZ16=m +CONFIG_SND_KIRKWOOD_SOC=m +CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB=m +CONFIG_SND_KORG1212=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_LOLA=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MAESTRO3_INPUT=y +CONFIG_SND_MAX_CARDS=32 +CONFIG_SND_MFLD_MACHINE=m +CONFIG_SND_MIA=m +CONFIG_SND_MIRO=m +CONFIG_SND_MIXART=m +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_MONA=m +CONFIG_SND_MPU401=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_MSND_CLASSIC=m +CONFIG_SND_MSND_PINNACLE=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_NM256=m +CONFIG_SND_OMAP_SOC=y +CONFIG_SND_OMAP_SOC_DMIC=m +CONFIG_SND_OMAP_SOC_HDMI_AUDIO=m +CONFIG_SND_OMAP_SOC_MCBSP=y +CONFIG_SND_OMAP_SOC_MCPDM=m +CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m +CONFIG_SND_OMAP_SOC_OMAP_TWL4030=y +CONFIG_SND_OMAP_SOC_RX51=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_OPL4_LIB=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_OXFW=m +CONFIG_SND_OXYGEN=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_PCI=y +CONFIG_SND_PCMCIA=y +CONFIG_SND_PCM_ELD=y +CONFIG_SND_PCM_IEC958=y +# CONFIG_SND_PCM_OSS is not set +CONFIG_SND_PCM_TIMER=y +CONFIG_SND_PCSP=m +CONFIG_SND_PCXHR=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_PPC=y +CONFIG_SND_PROC_FS=y +CONFIG_SND_RAWMIDI=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SAMSUNG_I2S=m +CONFIG_SND_SAMSUNG_PCM=m +CONFIG_SND_SAMSUNG_SPDIF=m +CONFIG_SND_SB16=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SB16_DSP=m +CONFIG_SND_SB8=m +CONFIG_SND_SB8_DSP=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SBAWE_SEQ=m +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SC6000=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQUENCER_OSS is not set +CONFIG_SND_SEQ_DEVICE=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SEQ_MIDI=m +CONFIG_SND_SEQ_MIDI_EMUL=m +CONFIG_SND_SEQ_MIDI_EVENT=m +CONFIG_SND_SEQ_VIRMIDI=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_SIMPLE_CARD=m +CONFIG_SND_SIMPLE_CARD_UTILS=m +CONFIG_SND_SIMPLE_SCU_CARD=m +CONFIG_SND_SIS7019=m +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC_AC97_CODEC=m +CONFIG_SND_SOC_ACPI=m +CONFIG_SND_SOC_ACPI_INTEL_MATCH=m +CONFIG_SND_SOC_ADAU1701=m +CONFIG_SND_SOC_ADAU1761=m +CONFIG_SND_SOC_ADAU1761_I2C=m +CONFIG_SND_SOC_ADAU1761_SPI=m +CONFIG_SND_SOC_ADAU17X1=m +CONFIG_SND_SOC_ADAU7002=m +CONFIG_SND_SOC_ADAU_UTILS=m +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4554=m +CONFIG_SND_SOC_AK4613=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_AK5386=m +CONFIG_SND_SOC_ALC5623=m +CONFIG_SND_SOC_ALC5632=m +CONFIG_SND_SOC_AMD_ACP=m +CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m +CONFIG_SND_SOC_APQ8016_SBC=m +CONFIG_SND_SOC_ARIZONA=m +CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631=m +CONFIG_SND_SOC_BT_SCO=m +CONFIG_SND_SOC_COMPRESS=y +CONFIG_SND_SOC_CS35L32=m +CONFIG_SND_SOC_CS35L33=m +CONFIG_SND_SOC_CS35L34=m +CONFIG_SND_SOC_CS35L35=m +CONFIG_SND_SOC_CS4265=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_CS4271=m +CONFIG_SND_SOC_CS4271_I2C=m +CONFIG_SND_SOC_CS4271_SPI=m +CONFIG_SND_SOC_CS42L42=m +CONFIG_SND_SOC_CS42L51=m +CONFIG_SND_SOC_CS42L51_I2C=m +CONFIG_SND_SOC_CS42L52=m +CONFIG_SND_SOC_CS42L56=m +CONFIG_SND_SOC_CS42L73=m +CONFIG_SND_SOC_CS42XX8=m +CONFIG_SND_SOC_CS42XX8_I2C=m +CONFIG_SND_SOC_CS43130=m +CONFIG_SND_SOC_CS4349=m +CONFIG_SND_SOC_CS53L30=m +CONFIG_SND_SOC_DA7213=m +CONFIG_SND_SOC_DA7219=m +CONFIG_SND_SOC_DIO2125=m +CONFIG_SND_SOC_DMIC=m +CONFIG_SND_SOC_ES7134=m +CONFIG_SND_SOC_ES8316=m +CONFIG_SND_SOC_ES8328=m +CONFIG_SND_SOC_ES8328_I2C=m +CONFIG_SND_SOC_ES8328_SPI=m +CONFIG_SND_SOC_EUKREA_TLV320=m +CONFIG_SND_SOC_FSL_ASOC_CARD=m +CONFIG_SND_SOC_FSL_ASRC=m +CONFIG_SND_SOC_FSL_ESAI=m +CONFIG_SND_SOC_FSL_SAI=m +CONFIG_SND_SOC_FSL_SPDIF=m +CONFIG_SND_SOC_FSL_UTILS=m +CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +CONFIG_SND_SOC_GTM601=m +CONFIG_SND_SOC_HDAC_HDMI=m +CONFIG_SND_SOC_HDMI_CODEC=m +CONFIG_SND_SOC_IMG=y +CONFIG_SND_SOC_IMG_I2S_IN=m +CONFIG_SND_SOC_IMG_I2S_OUT=m +CONFIG_SND_SOC_IMG_PARALLEL_OUT=m +CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m +CONFIG_SND_SOC_IMG_SPDIF_IN=m +CONFIG_SND_SOC_IMG_SPDIF_OUT=m +CONFIG_SND_SOC_IMX_ES8328=m +CONFIG_SND_SOC_IMX_MC13783=m +CONFIG_SND_SOC_IMX_PCM_DMA=y +CONFIG_SND_SOC_IMX_PCM_FIQ=y +CONFIG_SND_SOC_IMX_SGTL5000=y +CONFIG_SND_SOC_IMX_SPDIF=m +CONFIG_SND_SOC_IMX_SSI=m +CONFIG_SND_SOC_IMX_WM8962=m +CONFIG_SND_SOC_INNO_RK3036=m +CONFIG_SND_SOC_INTEL_BAYTRAIL=m +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m +CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m +# CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set +CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m +CONFIG_SND_SOC_INTEL_COMMON=m +CONFIG_SND_SOC_INTEL_HASWELL=m +CONFIG_SND_SOC_INTEL_HASWELL_MACH=m +CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m +CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m +CONFIG_SND_SOC_INTEL_MACH=m +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m +CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m +CONFIG_SND_SOC_INTEL_SKYLAKE=m +CONFIG_SND_SOC_INTEL_SST=m +CONFIG_SND_SOC_INTEL_SST_ACPI=m +CONFIG_SND_SOC_INTEL_SST_FIRMWARE=m +CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m +CONFIG_SND_SOC_LPASS_APQ8016=m +CONFIG_SND_SOC_LPASS_CPU=m +CONFIG_SND_SOC_LPASS_IPQ806X=m +CONFIG_SND_SOC_LPASS_PLATFORM=m +CONFIG_SND_SOC_MAX98090=m +CONFIG_SND_SOC_MAX98095=m +CONFIG_SND_SOC_MAX98357A=m +CONFIG_SND_SOC_MAX98504=m +CONFIG_SND_SOC_MAX9860=m +CONFIG_SND_SOC_MAX98927=m +CONFIG_SND_SOC_MC13783=m +CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m +# CONFIG_SND_SOC_MT2701 is not set +# CONFIG_SND_SOC_MT8173 is not set +CONFIG_SND_SOC_NAU8540=m +CONFIG_SND_SOC_NAU8810=m +CONFIG_SND_SOC_NAU8824=m +CONFIG_SND_SOC_NAU8825=m +CONFIG_SND_SOC_ODROID=m +CONFIG_SND_SOC_PCM1681=m +CONFIG_SND_SOC_PCM179X=m +CONFIG_SND_SOC_PCM179X_I2C=m +CONFIG_SND_SOC_PCM179X_SPI=m +CONFIG_SND_SOC_PCM3168A=m +CONFIG_SND_SOC_PCM3168A_I2C=m +CONFIG_SND_SOC_PCM3168A_SPI=m +CONFIG_SND_SOC_PCM512x=m +CONFIG_SND_SOC_PCM512x_I2C=m +CONFIG_SND_SOC_PCM512x_SPI=m +CONFIG_SND_SOC_QCOM=m +CONFIG_SND_SOC_RCAR=m +CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m +CONFIG_SND_SOC_RK3399_GRU_SOUND=m +CONFIG_SND_SOC_RL6231=m +CONFIG_SND_SOC_RL6347A=m +CONFIG_SND_SOC_ROCKCHIP=m +CONFIG_SND_SOC_ROCKCHIP_I2S=m +CONFIG_SND_SOC_ROCKCHIP_MAX98090=m +CONFIG_SND_SOC_ROCKCHIP_PDM=m +CONFIG_SND_SOC_ROCKCHIP_RT5645=m +CONFIG_SND_SOC_ROCKCHIP_SPDIF=m +CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT298=m +CONFIG_SND_SOC_RT5514=m +CONFIG_SND_SOC_RT5514_SPI=m +# CONFIG_SND_SOC_RT5514_SPI_BUILTIN is not set +CONFIG_SND_SOC_RT5616=m +CONFIG_SND_SOC_RT5631=m +CONFIG_SND_SOC_RT5640=m +CONFIG_SND_SOC_RT5645=m +CONFIG_SND_SOC_RT5651=m +CONFIG_SND_SOC_RT5663=m +CONFIG_SND_SOC_RT5670=m +CONFIG_SND_SOC_RT5677=m +CONFIG_SND_SOC_SAMSUNG=m +CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF=m +CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=m +CONFIG_SND_SOC_SAMSUNG_TM2_WM5110=m +CONFIG_SND_SOC_SH4_FSI=m +CONFIG_SND_SOC_SI476X=m +CONFIG_SND_SOC_SIGMADSP=m +CONFIG_SND_SOC_SIGMADSP_I2C=m +CONFIG_SND_SOC_SIGMADSP_REGMAP=m +CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m +CONFIG_SND_SOC_SMDK_WM8994_PCM=m +CONFIG_SND_SOC_SN95031=m +CONFIG_SND_SOC_SNOW=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_SSM2602_I2C=m +CONFIG_SND_SOC_SSM2602_SPI=m +CONFIG_SND_SOC_SSM4567=m +CONFIG_SND_SOC_STA32X=m +CONFIG_SND_SOC_STA350=m +CONFIG_SND_SOC_STI_SAS=m +CONFIG_SND_SOC_STORM=m +CONFIG_SND_SOC_TAS2552=m +CONFIG_SND_SOC_TAS5086=m +CONFIG_SND_SOC_TAS571X=m +CONFIG_SND_SOC_TAS5720=m +CONFIG_SND_SOC_TEGRA=m +CONFIG_SND_SOC_TEGRA20_AC97=m +CONFIG_SND_SOC_TEGRA20_DAS=m +CONFIG_SND_SOC_TEGRA20_I2S=m +CONFIG_SND_SOC_TEGRA20_SPDIF=m +CONFIG_SND_SOC_TEGRA30_AHUB=m +CONFIG_SND_SOC_TEGRA30_I2S=m +CONFIG_SND_SOC_TEGRA_ALC5632=m +CONFIG_SND_SOC_TEGRA_MAX98090=m +CONFIG_SND_SOC_TEGRA_RT5640=m +CONFIG_SND_SOC_TEGRA_RT5677=m +CONFIG_SND_SOC_TEGRA_SGTL5000=m +CONFIG_SND_SOC_TEGRA_TRIMSLICE=m +CONFIG_SND_SOC_TEGRA_WM8753=m +CONFIG_SND_SOC_TEGRA_WM8903=m +CONFIG_SND_SOC_TEGRA_WM9712=m +CONFIG_SND_SOC_TFA9879=m +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC23_I2C=m +CONFIG_SND_SOC_TLV320AIC23_SPI=m +CONFIG_SND_SOC_TLV320AIC31XX=m +CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TOPOLOGY=y +CONFIG_SND_SOC_TPA6130A2=m +CONFIG_SND_SOC_TS3A227E=m +CONFIG_SND_SOC_TWL4030=y +CONFIG_SND_SOC_TWL6040=m +CONFIG_SND_SOC_WM5110=m +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8524=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8711=m +CONFIG_SND_SOC_WM8728=m +CONFIG_SND_SOC_WM8731=m +CONFIG_SND_SOC_WM8737=m +CONFIG_SND_SOC_WM8741=m +CONFIG_SND_SOC_WM8750=m +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_WM8770=m +CONFIG_SND_SOC_WM8776=m +CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8804_I2C=m +CONFIG_SND_SOC_WM8804_SPI=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8978=m +CONFIG_SND_SOC_WM8985=m +CONFIG_SND_SOC_WM8994=m +CONFIG_SND_SOC_WM9712=m +CONFIG_SND_SOC_WM_ADSP=m +CONFIG_SND_SOC_WM_HUBS=m +CONFIG_SND_SOC_XTFPGA_I2S=m +CONFIG_SND_SOC_ZX_AUD96P22=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_SPI=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m +CONFIG_SND_SST_IPC=m +CONFIG_SND_SST_IPC_ACPI=m +CONFIG_SND_SST_IPC_PCI=m +# CONFIG_SND_SUN4I_CODEC is not set +# CONFIG_SND_SUN4I_I2S is not set +# CONFIG_SND_SUN4I_SPDIF is not set +CONFIG_SND_SUN8I_CODEC_ANALOG=m +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_SYNTH_EMUX=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_USB=y +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_HIFACE=m +CONFIG_SND_USB_LINE6=m +CONFIG_SND_USB_POD=m +CONFIG_SND_USB_PODHD=m +CONFIG_SND_USB_TONEPORT=m +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_VARIAX=m +# CONFIG_SND_VERBOSE_PRINTK is not set +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VMASTER=y +CONFIG_SND_VX222=m +CONFIG_SND_VXPOCKET=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_WAVEFRONT=m +CONFIG_SND_WSS_LIB=m +CONFIG_SND_X86=y +CONFIG_SND_YMFPCI=m +CONFIG_SNI_NETSEC=m +CONFIG_SOCIONEXT_SYNQUACER_PREITS=y +CONFIG_SOCK_CGROUP_DATA=y +# CONFIG_SOC_AM43XX is not set +CONFIG_SOC_BUS=y +CONFIG_SOC_CAMERA=m +CONFIG_SOC_CAMERA_IMX074=m +CONFIG_SOC_CAMERA_MT9M001=m +CONFIG_SOC_CAMERA_MT9M111=m +CONFIG_SOC_CAMERA_MT9T031=m +CONFIG_SOC_CAMERA_MT9T112=m +CONFIG_SOC_CAMERA_MT9V022=m +CONFIG_SOC_CAMERA_OV5642=m +CONFIG_SOC_CAMERA_OV772X=m +CONFIG_SOC_CAMERA_OV9640=m +CONFIG_SOC_CAMERA_OV9740=m +CONFIG_SOC_CAMERA_PLATFORM=m +CONFIG_SOC_CAMERA_RJ54N1=m +CONFIG_SOC_CAMERA_SCALE_CROP=m +CONFIG_SOC_CAMERA_TW9910=m +CONFIG_SOC_DRA7XX=y +CONFIG_SOC_EXYNOS5250=y +CONFIG_SOC_EXYNOS5260=y +CONFIG_SOC_EXYNOS5410=y +CONFIG_SOC_EXYNOS5420=y +CONFIG_SOC_EXYNOS5440=y +CONFIG_SOC_EXYNOS5800=y +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_SOC_HAS_REALTIME_COUNTER=y +CONFIG_SOC_IMX5=y +CONFIG_SOC_IMX50=y +CONFIG_SOC_IMX51=y +# CONFIG_SOC_IMX53 is not set +CONFIG_SOC_IMX6=y +CONFIG_SOC_IMX6Q=y +CONFIG_SOC_IMX6SL=y +CONFIG_SOC_IMX6SX=y +CONFIG_SOC_IMX6UL=y +CONFIG_SOC_IMX7D=y +# CONFIG_SOC_LS1021A is not set +CONFIG_SOC_OMAP3430=y +# CONFIG_SOC_OMAP5 is not set +CONFIG_SOC_RENESAS=y +CONFIG_SOC_SAMSUNG=y +CONFIG_SOC_TEGRA_FLOWCTRL=y +CONFIG_SOC_TEGRA_FUSE=y +CONFIG_SOC_TEGRA_PMC=y +CONFIG_SOC_TI81XX=y +CONFIG_SOC_VF610=y +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y +CONFIG_SONYPI=m +CONFIG_SONYPI_COMPAT=y +CONFIG_SONY_FF=y +CONFIG_SONY_LAPTOP=m +CONFIG_SOUND_OSS_CORE=y +# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set +CONFIG_SP5100_TCO=m +CONFIG_SPAPR_TCE_IOMMU=y +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSE_IRQ=y +CONFIG_SPEAKUP=m +CONFIG_SPEAKUP_SYNTH_ACNTPC=m +CONFIG_SPEAKUP_SYNTH_ACNTSA=m +CONFIG_SPEAKUP_SYNTH_APOLLO=m +CONFIG_SPEAKUP_SYNTH_AUDPTR=m +CONFIG_SPEAKUP_SYNTH_BNS=m +CONFIG_SPEAKUP_SYNTH_DECEXT=m +CONFIG_SPEAKUP_SYNTH_DECPC=m +CONFIG_SPEAKUP_SYNTH_DECTLK=m +CONFIG_SPEAKUP_SYNTH_DTLK=m +CONFIG_SPEAKUP_SYNTH_DUMMY=m +CONFIG_SPEAKUP_SYNTH_KEYPC=m +CONFIG_SPEAKUP_SYNTH_LTLK=m +CONFIG_SPEAKUP_SYNTH_SOFT=m +CONFIG_SPEAKUP_SYNTH_SPKOUT=m +CONFIG_SPEAKUP_SYNTH_TXPRT=m +CONFIG_SPI_ALTERA=m +CONFIG_SPI_ARMADA_3700=m +CONFIG_SPI_AXI_SPI_ENGINE=m +CONFIG_SPI_BCM2835=m +CONFIG_SPI_BCM2835AUX=m +CONFIG_SPI_BCM_QSPI=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +CONFIG_SPI_CADENCE=m +CONFIG_SPI_CADENCE_QUADSPI=m +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DLN2=m +CONFIG_SPI_DW_MID_DMA=y +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_FSL_DSPI=m +CONFIG_SPI_FSL_LIB=y +CONFIG_SPI_FSL_LPSPI=m +CONFIG_SPI_FSL_QUADSPI=m +CONFIG_SPI_FSL_SPI=y +CONFIG_SPI_GPIO=m +CONFIG_SPI_HISI_SFC=m +CONFIG_SPI_IMX=m +# CONFIG_SPI_INTEL_SPI_PCI is not set +# CONFIG_SPI_INTEL_SPI_PLATFORM is not set +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_LOOPBACK_TEST=m +CONFIG_SPI_MASTER=y +CONFIG_SPI_MESON_SPICC=m +CONFIG_SPI_MESON_SPIFC=m +CONFIG_SPI_MT65XX=m +CONFIG_SPI_OC_TINY=m +CONFIG_SPI_OMAP24XX=y +CONFIG_SPI_ORION=m +CONFIG_SPI_PL022=m +CONFIG_SPI_PXA2XX=m +CONFIG_SPI_QUP=m +CONFIG_SPI_RSPI=m +CONFIG_SPI_S3C64XX=m +CONFIG_SPI_SC18IS602=m +CONFIG_SPI_SH_HSPI=m +CONFIG_SPI_SH_MSIOF=m +CONFIG_SPI_SLAVE=y +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m +CONFIG_SPI_SLAVE_TIME=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_SPRD_ADI=m +# CONFIG_SPI_SUN4I is not set +CONFIG_SPI_SUN6I=m +CONFIG_SPI_TEGRA114=m +CONFIG_SPI_TEGRA20_SFLASH=m +CONFIG_SPI_TEGRA20_SLINK=m +CONFIG_SPI_THUNDERX=m +CONFIG_SPI_TI_QSPI=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPI_TOPCLIFF_PCH=m +CONFIG_SPI_XCOMM=m +# CONFIG_SPI_XILINX is not set +CONFIG_SPI_XLP=m +CONFIG_SPI_ZYNQMP_GQSPI=m +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SPMI_MSM_PMIC_ARB=m +CONFIG_SPRD_DMA=m +CONFIG_SQUASHFS=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_EMBEDDED is not set +# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_SRAM_EXEC=y +CONFIG_SRCU=y +CONFIG_SRF04=m +CONFIG_SRF08=m +CONFIG_SSB_BLOCKIO=y +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_GPIO=y +# CONFIG_SSB_PCMCIAHOST is not set +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +# CONFIG_SSB_SILENT is not set +CONFIG_SSFDC=m +CONFIG_SSI_PROTOCOL=m +CONFIG_STACKTRACE=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_STACK_GUARD=256 +CONFIG_STACK_TRACER=y +CONFIG_STACK_VALIDATION=y +# CONFIG_STAGING_BOARD is not set +CONFIG_STAGING_MEDIA=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_STE10XP=m +CONFIG_STK3310=m +CONFIG_STK8312=m +CONFIG_STK8BA50=m +CONFIG_STM=m +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_PCI is not set +CONFIG_STMMAC_PLATFORM=m +CONFIG_STMPE_I2C=y +CONFIG_STMPE_SPI=y +CONFIG_STMP_DEVICE=y +CONFIG_STM_DUMMY=m +CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_FTRACE=m +CONFIG_STM_SOURCE_HEARTBEAT=m +CONFIG_STP=m +CONFIG_STREAM_PARSER=y +CONFIG_STRICT_DEVMEM=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_STRICT_MODULE_RWX=y +# CONFIG_STRING_SELFTEST is not set +# CONFIG_STRIP_ASM_SYMS is not set +CONFIG_STUB_CLK_HI6220=y +CONFIG_STX104=m +CONFIG_SUDMAC=m +# CONFIG_SUN4I_EMAC is not set +# CONFIG_SUN4I_GPADC is not set +CONFIG_SUN50I_A64_CCU=y +CONFIG_SUN8I_A83T_CCU=y +CONFIG_SUN8I_DE2_CCU=y +CONFIG_SUN8I_H3_CCU=y +CONFIG_SUN8I_R_CCU=y +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_SUNGEM=m +CONFIG_SUNGEM_PHY=m +CONFIG_SUNRPC=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_SUNRPC_DEBUG=y +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_SWAP=y +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_SUNXI_CCU=y +CONFIG_SUNXI_RSB=m +CONFIG_SUNXI_WATCHDOG=m +CONFIG_SURFACE3_WMI=m +CONFIG_SURFACE_3_BUTTON=m +CONFIG_SURFACE_PRO3_BUTTON=m +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_SWAP=y +CONFIG_SWIOTLB=y +CONFIG_SWIOTLB_XEN=y +CONFIG_SWPHY=y +CONFIG_SWP_EMULATE=y +CONFIG_SWP_EMULATION=y +CONFIG_SW_SYNC=y +CONFIG_SX9500=m +CONFIG_SXGBE_ETH=m +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_CS=m +CONFIG_SYNCLINK_GT=m +CONFIG_SYNC_FILE=y +CONFIG_SYN_COOKIES=y +CONFIG_SYSCON_REBOOT_MODE=m +CONFIG_SYSCTL=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_SYSC_R8A7743=y +CONFIG_SYSC_R8A7745=y +CONFIG_SYSC_R8A7779=y +CONFIG_SYSC_R8A7790=y +CONFIG_SYSC_R8A7791=y +CONFIG_SYSC_R8A7792=y +CONFIG_SYSC_R8A7794=y +CONFIG_SYSC_R8A7795=y +CONFIG_SYSC_R8A7796=y +CONFIG_SYSC_R8A77970=y +CONFIG_SYSC_R8A77995=y +CONFIG_SYSC_RCAR=y +CONFIG_SYSFS=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_SYSFS_SYSCALL=y +CONFIG_SYSTEMPORT=m +CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_SYSTEM_EXTRA_CERTIFICATE=y +CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_SYS_SUPPORTS_EM_STI=y +CONFIG_SYS_SUPPORTS_HUGETLBFS=y +CONFIG_SYS_SUPPORTS_SH_CMT=y +CONFIG_SYS_SUPPORTS_SH_MTU2=y +CONFIG_SYS_SUPPORTS_SH_TMU=y +CONFIG_T5403=m +CONFIG_TABLET_SERIAL_WACOM4=m +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_HANWANG=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_PEGASUS=m +CONFIG_TAHVO_USB=m +CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y +# CONFIG_TANGOX_WATCHDOG is not set +CONFIG_TANGO_IRQ=y +# CONFIG_TANGO_THERMAL is not set +CONFIG_TAP=m +CONFIG_TARGET_CORE=m +CONFIG_TASKSTATS=y +CONFIG_TASKS_RCU=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_TASK_XACCT=y +CONFIG_TC1100_WMI=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_CRB=m +CONFIG_TCG_IBMVTPM=y +CONFIG_TCG_INFINEON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_TIS=y +CONFIG_TCG_TIS_CORE=y +CONFIG_TCG_TIS_SPI=m +CONFIG_TCG_TIS_ST33ZP24=m +CONFIG_TCG_TIS_ST33ZP24_I2C=m +CONFIG_TCG_TIS_ST33ZP24_SPI=m +CONFIG_TCG_TPM=y +CONFIG_TCG_VTPM_PROXY=m +CONFIG_TCG_XEN=m +CONFIG_TCIC=m +CONFIG_TCM_FC=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_PSCSI=m +CONFIG_TCM_QLA2XXX=m +# CONFIG_TCM_QLA2XXX_DEBUG is not set +CONFIG_TCM_USER2=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BBR=m +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_NV=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_MD5SIG=y +CONFIG_TCS3414=m +CONFIG_TCS3472=m +CONFIG_TEE=m +CONFIG_TEGRA124_EMC=y +CONFIG_TEGRA20_APB_DMA=y +CONFIG_TEGRA20_MC=y +CONFIG_TEGRA_AHB=y +CONFIG_TEGRA_CLK_EMC=y +CONFIG_TEGRA_GMI=m +CONFIG_TEGRA_HOST1X=m +CONFIG_TEGRA_HOST1X_FIREWALL=y +CONFIG_TEGRA_IOMMU_GART=y +CONFIG_TEGRA_IOMMU_SMMU=y +CONFIG_TEGRA_IVC=y +CONFIG_TEGRA_MC=y +# CONFIG_TEGRA_SOCTHERM is not set +CONFIG_TEGRA_TIMER=y +CONFIG_TEGRA_WATCHDOG=m +CONFIG_TEHUTI=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TELCLOCK=m +CONFIG_TERANETICS_PHY=m +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +# CONFIG_TEST_BITMAP is not set +CONFIG_TEST_BPF=m +# CONFIG_TEST_FIND_BIT is not set +CONFIG_TEST_FIRMWARE=m +# CONFIG_TEST_HASH is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_LIST_SORT is not set +CONFIG_TEST_LKM=m +# CONFIG_TEST_PARMAN is not set +CONFIG_TEST_POWER=m +# CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_SORT is not set +CONFIG_TEST_STATIC_KEYS=m +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_SYSCTL is not set +CONFIG_TEST_UDELAY=m +CONFIG_TEST_USER_COPY=m +# CONFIG_TEST_UUID is not set +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_TEXTSEARCH_KMP=m +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_EMULATION=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +# CONFIG_THINKPAD_ACPI_DEBUG is not set +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THIN_ARCHIVES=y +CONFIG_THP_SWAP=y +CONFIG_THREAD_INFO_IN_TASK=y +CONFIG_THREAD_SHIFT=14 +CONFIG_THRUSTMASTER_FF=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_THUNDERBOLT=m +CONFIG_THUNDERBOLT_NET=m +CONFIG_THUNDER_NIC_BGX=m +CONFIG_THUNDER_NIC_PF=m +CONFIG_THUNDER_NIC_RGX=m +CONFIG_THUNDER_NIC_VF=m +CONFIG_TICK_CPU_ACCOUNTING=y +CONFIG_TICK_ONESHOT=y +CONFIG_TIFM_7XX1=m +CONFIG_TIGON3=m +CONFIG_TIGON3_HWMON=y +CONFIG_TIMB_DMA=m +CONFIG_TIMERFD=y +CONFIG_TIMER_ACPI=y +CONFIG_TIMER_OF=y +CONFIG_TIMER_PROBE=y +CONFIG_TINYDRM_MI0283QT=m +CONFIG_TINYDRM_MIPI_DBI=m +CONFIG_TINYDRM_REPAPER=m +CONFIG_TINYDRM_ST7586=m +CONFIG_TIPC=m +CONFIG_TIPC_MEDIA_IB=y +CONFIG_TIPC_MEDIA_UDP=y +CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m +CONFIG_TI_ADC084S021=m +CONFIG_TI_ADC108S102=m +CONFIG_TI_ADC12138=m +CONFIG_TI_ADC128S052=m +CONFIG_TI_ADC161S626=m +CONFIG_TI_ADS1015=m +CONFIG_TI_ADS7950=m +CONFIG_TI_ADS8688=m +CONFIG_TI_AM335X_ADC=m +CONFIG_TI_CPPI41=m +CONFIG_TI_CPSW=y +CONFIG_TI_CPSW_PHY_SEL=y +CONFIG_TI_CPTS=y +CONFIG_TI_CPTS_MOD=y +CONFIG_TI_DAC082S085=m +CONFIG_TI_DAVINCI_CPDMA=y +CONFIG_TI_DAVINCI_EMAC=m +CONFIG_TI_DAVINCI_MDIO=y +CONFIG_TI_DMA_CROSSBAR=y +CONFIG_TI_EDMA=y +CONFIG_TI_EMIF=m +CONFIG_TI_PIPE3=m +CONFIG_TI_SOC_THERMAL=m +CONFIG_TI_ST=m +CONFIG_TI_SYSC=y +CONFIG_TI_THERMAL=y +CONFIG_TI_TLC4541=m +CONFIG_TLAN=m +CONFIG_TLS=m +CONFIG_TMD_HERMES=m +CONFIG_TMP006=m +CONFIG_TMP007=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TN3215=y +CONFIG_TN3215_CONSOLE=y +CONFIG_TN3270=y +CONFIG_TN3270_CONSOLE=y +CONFIG_TN3270_FS=m +CONFIG_TN3270_TTY=y +CONFIG_TOIM3232_DONGLE=m +CONFIG_TOPSTAR_LAPTOP=m +CONFIG_TORTURE_TEST=m +# CONFIG_TOSHIBA is not set +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_TOSHIBA_FIR=m +CONFIG_TOSHIBA_HAPS=m +# CONFIG_TOSHIBA_WMI is not set +CONFIG_TOUCHSCREEN_88PM860X=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +CONFIG_TOUCHSCREEN_AD7879_SPI=m +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AR1021_I2C=m +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y +CONFIG_TOUCHSCREEN_AUO_PIXCIR=m +CONFIG_TOUCHSCREEN_BU21013=m +CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=m +CONFIG_TOUCHSCREEN_COLIBRI_VF50=m +CONFIG_TOUCHSCREEN_CY8CTMG110=m +CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m +CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m +CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m +CONFIG_TOUCHSCREEN_CYTTSP_CORE=m +CONFIG_TOUCHSCREEN_CYTTSP_I2C=m +CONFIG_TOUCHSCREEN_CYTTSP_SPI=m +CONFIG_TOUCHSCREEN_DA9034=m +CONFIG_TOUCHSCREEN_DA9052=m +CONFIG_TOUCHSCREEN_DYNAPRO=m +CONFIG_TOUCHSCREEN_EDT_FT5X06=m +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_EGALAX=m +CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m +CONFIG_TOUCHSCREEN_EKTF2127=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_EXC3000=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GOODIX=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_HAMPSHIRE=m +CONFIG_TOUCHSCREEN_HIDEEP=m +CONFIG_TOUCHSCREEN_HTCPEN=m +CONFIG_TOUCHSCREEN_ILI210X=m +CONFIG_TOUCHSCREEN_IMX6UL_TSC=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_IPROC=m +CONFIG_TOUCHSCREEN_MAX11801=m +CONFIG_TOUCHSCREEN_MC13783=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MELFAS_MIP4=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_MMS114=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_PCAP=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_PIXCIR=m +CONFIG_TOUCHSCREEN_PROPERTIES=y +CONFIG_TOUCHSCREEN_RM_TS=m +CONFIG_TOUCHSCREEN_ROHM_BU21023=m +CONFIG_TOUCHSCREEN_S6SY761=m +CONFIG_TOUCHSCREEN_SILEAD=m +CONFIG_TOUCHSCREEN_SIS_I2C=m +CONFIG_TOUCHSCREEN_ST1232=m +CONFIG_TOUCHSCREEN_STMFTS=m +CONFIG_TOUCHSCREEN_STMPE=m +# CONFIG_TOUCHSCREEN_SUN4I is not set +CONFIG_TOUCHSCREEN_SUR40=m +CONFIG_TOUCHSCREEN_SURFACE3_SPI=m +CONFIG_TOUCHSCREEN_SX8654=m +CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_TPS6507X=m +CONFIG_TOUCHSCREEN_TS4800=m +CONFIG_TOUCHSCREEN_TSC2004=m +CONFIG_TOUCHSCREEN_TSC2005=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_TSC2007_IIO=y +CONFIG_TOUCHSCREEN_TSC200X_CORE=m +CONFIG_TOUCHSCREEN_TSC_SERIO=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_ELO=y +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_NEXIO=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +CONFIG_TOUCHSCREEN_WACOM_I2C=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WDT87XX_I2C=m +CONFIG_TOUCHSCREEN_WM831X=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TOUCHSCREEN_ZET6223=m +CONFIG_TOUCHSCREEN_ZFORCE=m +CONFIG_TPL0102=m +CONFIG_TPS6105X=m +CONFIG_TPS65010=m +CONFIG_TPS6507X=m +CONFIG_TPS68470_PMIC_OPREGION=y +CONFIG_TRACEPOINTS=y +# CONFIG_TRACEPOINT_BENCHMARK is not set +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACER_SNAPSHOT=y +# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set +CONFIG_TRACE_CLOCK=y +# CONFIG_TRACE_EVAL_MAP_FILE is not set +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_ROUTER=m +CONFIG_TRACING=y +CONFIG_TRACING_EVENTS_GPIO=y +CONFIG_TRACING_MAP=y +CONFIG_TRACING_SUPPORT=y +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_TRANSPARENT_HUGE_PAGECACHE=y +CONFIG_TREE_RCU=y +CONFIG_TREE_SRCU=y +CONFIG_TRUSTED_FOUNDATIONS=y +CONFIG_TRUSTED_KEYS=y +CONFIG_TS4800_IRQ=m +CONFIG_TS4800_WATCHDOG=m +CONFIG_TSL2583=m +CONFIG_TSL2x7x=m +CONFIG_TSL4531=m +CONFIG_TSYS01=m +CONFIG_TSYS02D=m +CONFIG_TTPCI_EEPROM=m +CONFIG_TTY=y +CONFIG_TULIP=m +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_TUN=y +# CONFIG_TUNE_DEFAULT is not set +# CONFIG_TUNE_Z10 is not set +# CONFIG_TUNE_Z13 is not set +# CONFIG_TUNE_Z14 is not set +# CONFIG_TUNE_Z196 is not set +# CONFIG_TUNE_Z900 is not set +# CONFIG_TUNE_Z990 is not set +# CONFIG_TUNE_Z9_109 is not set +CONFIG_TUNE_ZEC12=y +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_TWL4030_CORE=y +CONFIG_TWL4030_MADC=m +CONFIG_TWL4030_POWER=y +CONFIG_TWL4030_USB=m +CONFIG_TWL4030_WATCHDOG=m +CONFIG_TWL6030_GPADC=m +CONFIG_TWL6030_USB=m +CONFIG_TWL6040_CORE=y +CONFIG_TYPEC=m +CONFIG_TYPEC_FUSB302=m +CONFIG_TYPEC_TCPCI=m +CONFIG_TYPEC_TCPM=m +CONFIG_TYPEC_TPS6598X=m +CONFIG_TYPEC_UCSI=m +CONFIG_TYPHOON=m +# CONFIG_U3_DART is not set +# CONFIG_UACCESS_WITH_MEMCPY is not set +# CONFIG_UBIFS_ATIME_SUPPORT is not set +CONFIG_UBIFS_FS=m +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_ENCRYPTION=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_SECURITY=y +CONFIG_UBIFS_FS_ZLIB=y +# CONFIG_UBSAN is not set +CONFIG_UCB1400_CORE=m +CONFIG_UCS2_STRING=y +CONFIG_UCSI_ACPI=m +# CONFIG_UDBG_RTAS_CONSOLE is not set +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y +CONFIG_UEFI_CPER=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="" +# CONFIG_UFS_DEBUG is not set +# CONFIG_UFS_FS_WRITE is not set +CONFIG_UHID=m +CONFIG_UID16=y +CONFIG_UIO=m +CONFIG_UIO_FSL_ELBC_GPCM=m +# CONFIG_UIO_FSL_ELBC_GPCM_NETX5152 is not set +CONFIG_UIO_HV_GENERIC=m +CONFIG_ULI526X=m +CONFIG_ULTRA=m +CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_UNIPHIER_EFUSE=m +CONFIG_UNIPHIER_SYSTEM_BUS=y +CONFIG_UNIPHIER_THERMAL=m +CONFIG_UNIPHIER_WATCHDOG=m +CONFIG_UNISYSSPAR=y +CONFIG_UNISYS_VISORBUS=m +CONFIG_UNISYS_VISORHBA=m +CONFIG_UNISYS_VISORINPUT=m +CONFIG_UNISYS_VISORNIC=m +CONFIG_UNIX=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX_DIAG=m +CONFIG_UNUSED_SYMBOLS=y +CONFIG_UNWINDER_FRAME_POINTER=y +# CONFIG_UNWINDER_GUESS is not set +# CONFIG_UNWINDER_ORC is not set +CONFIG_UPROBES=y +CONFIG_UPROBE_EVENTS=y +CONFIG_US5182D=m +CONFIG_USB=y +CONFIG_USBIP_CORE=m +# CONFIG_USBIP_DEBUG is not set +CONFIG_USBIP_HOST=m +CONFIG_USBIP_VHCI_HCD=m +CONFIG_USBIP_VHCI_HC_PORTS=8 +CONFIG_USBIP_VHCI_NR_HCS=1 +CONFIG_USBIP_VUDC=m +CONFIG_USBPCWATCHDOG=m +CONFIG_USB_ACM=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_AIRSPY=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AMD5536UDC=m +CONFIG_USB_AN2720=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_ATM=m +CONFIG_USB_AUDIO=m +CONFIG_USB_BDC_PCI=m +CONFIG_USB_BDC_UDC=m +CONFIG_USB_BELKIN=y +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CATC=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_CHAOSKEY=m +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_OF=m +CONFIG_USB_CHIPIDEA_PCI=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_ULPI=y +CONFIG_USB_COMMON=y +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +CONFIG_USB_CONFIGFS_F_TCM=y +CONFIG_USB_CONFIGFS_F_UAC1=y +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y +CONFIG_USB_CONFIGFS_F_UAC2=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_PHONET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CXACRU=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_DEFAULT_PERSIST=y +CONFIG_USB_DSBR=m +# CONFIG_USB_DUMMY_HCD is not set +CONFIG_USB_DWC2=y +# CONFIG_USB_DWC2_DEBUG is not set +# CONFIG_USB_DWC2_DUAL_ROLE is not set +CONFIG_USB_DWC2_HOST=y +# CONFIG_USB_DWC2_PERIPHERAL is not set +# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set +CONFIG_USB_DWC3=m +CONFIG_USB_DWC3_DUAL_ROLE=y +CONFIG_USB_DWC3_EXYNOS=m +# CONFIG_USB_DWC3_GADGET is not set +# CONFIG_USB_DWC3_HOST is not set +CONFIG_USB_DWC3_OF_SIMPLE=m +CONFIG_USB_DWC3_OMAP=m +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_ULPI=y +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_EG20T=m +CONFIG_USB_EHCI_EXYNOS=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_OMAP=m +CONFIG_USB_EHCI_HCD_ORION=y +CONFIG_USB_EHCI_HCD_PPC_OF=y +CONFIG_USB_EHCI_MXC=m +CONFIG_USB_EHCI_PCI=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TEGRA=m +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_USB_EMI26=m +CONFIG_USB_EMI62=m +CONFIG_USB_EPSON2888=y +CONFIG_USB_ETH=m +CONFIG_USB_ETH_EEM=y +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_EZUSB_FX2=m +CONFIG_USB_FOTG210_HCD=m +CONFIG_USB_FOTG210_UDC=m +CONFIG_USB_FSL_USB2=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_FUNCTIONFS_ETH=y +CONFIG_USB_FUNCTIONFS_GENERIC=y +CONFIG_USB_FUNCTIONFS_RNDIS=y +CONFIG_USB_FUSB300=m +CONFIG_USB_F_ACM=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_HID=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_MIDI=m +CONFIG_USB_F_NCM=m +CONFIG_USB_F_OBEX=m +CONFIG_USB_F_PHONET=m +CONFIG_USB_F_PRINTER=m +CONFIG_USB_F_RNDIS=m +CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_SS_LB=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_TCM=m +CONFIG_USB_F_UAC1=m +CONFIG_USB_F_UAC1_LEGACY=m +CONFIG_USB_F_UAC2=m +CONFIG_USB_F_UVC=m +CONFIG_USB_GADGETFS=m +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_XILINX=m +CONFIG_USB_GL860=m +CONFIG_USB_GOKU=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GR_UDC=m +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_DTCS033=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_JL2005BCD=m +CONFIG_USB_GSPCA_KINECT=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SE401=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=m +CONFIG_USB_GSPCA_TOUPTEK=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_G_ACM_MS=m +CONFIG_USB_G_DBGP=m +# CONFIG_USB_G_DBGP_PRINTK is not set +CONFIG_USB_G_DBGP_SERIAL=y +CONFIG_USB_G_HID=m +CONFIG_USB_G_MULTI_CDC=y +CONFIG_USB_G_MULTI_RNDIS=y +CONFIG_USB_G_NCM=m +CONFIG_USB_G_NOKIA=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_G_WEBCAM=m +CONFIG_USB_HACKRF=m +# CONFIG_USB_HCD_TEST_MODE is not set +CONFIG_USB_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_HSIC_USB4604=m +CONFIG_USB_HSO=m +CONFIG_USB_HUB_USB251XB=m +CONFIG_USB_HWA_HCD=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_IMX21_HCD=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_IPHETH=m +CONFIG_USB_IRDA=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1301=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_ISP1760=m +CONFIG_USB_ISP1760_DUAL_ROLE=y +# CONFIG_USB_ISP1760_GADGET_ROLE is not set +CONFIG_USB_ISP1760_HCD=y +# CONFIG_USB_ISP1760_HOST_ROLE is not set +CONFIG_USB_ISP1761_UDC=y +CONFIG_USB_KAWETH=m +CONFIG_USB_KBD=m +CONFIG_USB_KC2190=y +CONFIG_USB_KEENE=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_LCD=m +CONFIG_USB_LD=m +CONFIG_USB_LEDS_TRIGGER_USBPORT=m +CONFIG_USB_LED_TRIG=y +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_LINK_LAYER_TEST=m +CONFIG_USB_M5602=m +# CONFIG_USB_M66592 is not set +CONFIG_USB_MA901=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_MAX3421_HCD=m +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_MON=m +CONFIG_USB_MOUSE=m +CONFIG_USB_MR800=m +CONFIG_USB_MSI2500=m +CONFIG_USB_MTU3=m +# CONFIG_USB_MTU3_DEBUG is not set +CONFIG_USB_MTU3_DUAL_ROLE=y +# CONFIG_USB_MTU3_GADGET is not set +# CONFIG_USB_MTU3_HOST is not set +CONFIG_USB_MUSB_AM335X_CHILD=m +CONFIG_USB_MUSB_AM35X=m +CONFIG_USB_MUSB_DSPS=m +CONFIG_USB_MUSB_DUAL_ROLE=y +# CONFIG_USB_MUSB_GADGET is not set +# CONFIG_USB_MUSB_HOST is not set +CONFIG_USB_MUSB_OMAP2PLUS=m +CONFIG_USB_MUSB_SUNXI=m +CONFIG_USB_MUSB_TUSB6010=m +CONFIG_USB_MV_U3D=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_MXS_PHY=y +CONFIG_USB_NET2272=m +CONFIG_USB_NET2272_DMA=y +CONFIG_USB_NET2280=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CH9200=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_DRIVERS=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_OHCI_EXYNOS=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_OMAP3=m +CONFIG_USB_OHCI_HCD_PCI=y +# CONFIG_USB_OHCI_HCD_PPC_OF is not set +# CONFIG_USB_OHCI_HCD_PPC_OF_BE is not set +# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_OTG_WHITELIST is not set +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PCI=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_PHY=y +CONFIG_USB_PRINTER=m +CONFIG_USB_PULSE8_CEC=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_USB_PXA27X=m +CONFIG_USB_R8A66597=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_RAINSHADOW_CEC=m +CONFIG_USB_RAREMONO=m +CONFIG_USB_RENESAS_USB3=m +CONFIG_USB_RENESAS_USBHS=m +CONFIG_USB_RENESAS_USBHS_HCD=m +CONFIG_USB_RENESAS_USBHS_UDC=m +CONFIG_USB_RIO500=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_S2255=m +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_DEBUG=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_UPD78F0730=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_SI470X=m +CONFIG_USB_SI4713=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_SISUSBVGA_CON is not set +CONFIG_USB_SL811_CS=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_HCD_ISO=y +CONFIG_USB_SNP_CORE=m +CONFIG_USB_SNP_UDC_PLAT=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_STORAGE=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_DATAFAB=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_ENE_UB6250=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_REALTEK=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STV06XX=m +CONFIG_USB_SWITCH_FSA9480=m +CONFIG_USB_TEST=m +CONFIG_USB_TMC=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_U132_HCD=m +CONFIG_USB_UAS=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_ULPI=y +CONFIG_USB_ULPI_BUS=m +CONFIG_USB_ULPI_VIEWPORT=y +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=m +CONFIG_USB_U_AUDIO=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_VL600=m +CONFIG_USB_WDM=m +CONFIG_USB_WHCI_HCD=m +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MTK=m +CONFIG_USB_XHCI_MVEBU=m +CONFIG_USB_XHCI_PCI=y +CONFIG_USB_XHCI_PLATFORM=m +CONFIG_USB_XHCI_RCAR=m +CONFIG_USB_XHCI_TEGRA=m +CONFIG_USB_XUSBATM=m +CONFIG_USB_YUREX=m +CONFIG_USB_ZD1201=m +CONFIG_USB_ZERO=m +CONFIG_USB_ZR364XX=m +CONFIG_USELIB=y +CONFIG_USERFAULTFD=y +CONFIG_USERIO=m +CONFIG_USER_NS=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_USE_OF=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_UTS_NS=y +CONFIG_UWB_HWA=m +CONFIG_UWB_I1480U=m +CONFIG_UWB_WHCI=m +CONFIG_U_SERIAL_CONSOLE=y +CONFIG_V4L2_FLASH_LED_CLASS=m +CONFIG_V4L2_FWNODE=m +CONFIG_V4L2_MEM2MEM_DEV=m +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_V4L_RADIO_ISA_DRIVERS=y +CONFIG_V4L_TEST_DRIVERS=y +CONFIG_VCNL4000=m +CONFIG_VDSO=y +CONFIG_VEML6070=m +CONFIG_VERSION_SIGNATURE="" +CONFIG_VETH=m +CONFIG_VEXPRESS_CONFIG=y +CONFIG_VEXPRESS_SYSCFG=y +CONFIG_VF610_ADC=m +CONFIG_VF610_DAC=m +CONFIG_VFAT_FS=y +CONFIG_VFIO_AMBA=m +CONFIG_VFIO_CCW=m +CONFIG_VFIO_IOMMU_SPAPR_TCE=y +CONFIG_VFIO_MDEV=m +CONFIG_VFIO_MDEV_DEVICE=m +CONFIG_VFIO_NOIOMMU=y +CONFIG_VFIO_PCI_IGD=y +CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI_MMAP=y +CONFIG_VFIO_PCI_VGA=y +CONFIG_VFIO_PLATFORM=m +CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m +CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET=m +CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=m +CONFIG_VFIO_SPAPR_EEH=y +CONFIG_VFP=y +CONFIG_VFPv3=y +CONFIG_VF_USE_ARM_GLOBAL_TIMER=y +# CONFIG_VF_USE_PIT_TIMER is not set +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_VGA_CONSOLE=y +CONFIG_VGA_SWITCHEROO=y +CONFIG_VHOST=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set +CONFIG_VHOST_NET=m +CONFIG_VHOST_RING=m +CONFIG_VHOST_SCSI=m +CONFIG_VHOST_VSOCK=m +CONFIG_VIA_FIR=m +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_VELOCITY=m +CONFIG_VIA_WDT=m +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_DMA_CONTIG=m +CONFIG_VIDEOBUF2_DMA_SG=m +CONFIG_VIDEOBUF2_DVB=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_VIDEOBUF_DMA_CONTIG=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_ADV7511=m +CONFIG_VIDEO_ADV7604=m +CONFIG_VIDEO_ADV7842=m +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_RC=y +CONFIG_VIDEO_AU0828_V4L2=y +CONFIG_VIDEO_BCM2835=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_VIDEO_COBALT=m +CONFIG_VIDEO_CODA=m +CONFIG_VIDEO_CPIA2=m +CONFIG_VIDEO_CS3308=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX18_ALSA=m +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_CX23885=m +CONFIG_VIDEO_CX25821=m +CONFIG_VIDEO_CX25821_ALSA=m +CONFIG_VIDEO_CX25840=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_DT3155=m +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_EM28XX_RC=m +CONFIG_VIDEO_EM28XX_V4L2=m +CONFIG_VIDEO_FB_IVTV=m +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_LOADER=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m +CONFIG_VIDEO_HDPVR=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_IMX_CSI=m +CONFIG_VIDEO_IMX_MEDIA=m +CONFIG_VIDEO_IMX_VDOA=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_IVTV_ALSA=m +# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_MEDIATEK_VPU=m +CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m +CONFIG_VIDEO_MESON_AO_CEC=m +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_MT9M111=m +CONFIG_VIDEO_MT9V011=m +CONFIG_VIDEO_MUX=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_OMAP2_VOUT=m +CONFIG_VIDEO_OMAP2_VOUT_VRFB=y +CONFIG_VIDEO_OMAP3=m +# CONFIG_VIDEO_OMAP3_DEBUG is not set +CONFIG_VIDEO_OMAP4=m +CONFIG_VIDEO_OV2640=m +CONFIG_VIDEO_OV7640=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_PCI_SKELETON=m +CONFIG_VIDEO_PVRUSB2=m +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_PVRUSB2_DVB=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_QCOM_CAMSS=m +CONFIG_VIDEO_QCOM_VENUS=m +CONFIG_VIDEO_RCAR_DRIF=m +CONFIG_VIDEO_RCAR_VIN=m +CONFIG_VIDEO_RENESAS_FCP=m +CONFIG_VIDEO_RENESAS_FDP1=m +CONFIG_VIDEO_RENESAS_JPU=m +CONFIG_VIDEO_RENESAS_VSP1=m +CONFIG_VIDEO_ROCKCHIP_RGA=m +CONFIG_VIDEO_SAA6588=m +CONFIG_VIDEO_SAA6752HS=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7134_GO7007=m +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_SAA7164=m +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_SAA7185=m +# CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS is not set +CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m +CONFIG_VIDEO_SAMSUNG_S5P_CEC=m +CONFIG_VIDEO_SAMSUNG_S5P_G2D=m +CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m +CONFIG_VIDEO_SAMSUNG_S5P_MFC=m +CONFIG_VIDEO_SH_MOBILE_CEU=m +CONFIG_VIDEO_SH_VEU=m +CONFIG_VIDEO_SH_VOU=m +CONFIG_VIDEO_SOLO6X10=m +CONFIG_VIDEO_SONY_BTF_MPX=m +CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_COMMON=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_TEGRA_HDMI_CEC=m +CONFIG_VIDEO_TI_CAL=m +CONFIG_VIDEO_TI_CSC=m +CONFIG_VIDEO_TI_SC=m +CONFIG_VIDEO_TI_VPDMA=m +CONFIG_VIDEO_TI_VPE=m +# CONFIG_VIDEO_TI_VPE_DEBUG is not set +CONFIG_VIDEO_TM6000=m +CONFIG_VIDEO_TM6000_ALSA=m +CONFIG_VIDEO_TM6000_DVB=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_TW2804=m +CONFIG_VIDEO_TW5864=m +CONFIG_VIDEO_TW68=m +CONFIG_VIDEO_TW686X=m +CONFIG_VIDEO_TW9903=m +CONFIG_VIDEO_TW9906=m +CONFIG_VIDEO_UDA1342=m +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_USBTV=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_VIDEO_V4L2_TPG=m +CONFIG_VIDEO_VIA_CAMERA=m +CONFIG_VIDEO_VIM2M=m +# CONFIG_VIDEO_VIMC is not set +CONFIG_VIDEO_VIVID=m +CONFIG_VIDEO_VIVID_CEC=y +CONFIG_VIDEO_VIVID_MAX_DEVS=64 +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_XILINX=m +CONFIG_VIDEO_XILINX_TPG=m +CONFIG_VIDEO_XILINX_VTC=m +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_AVS6EYES=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +CONFIG_VIDEO_ZORAN_ZR36060=m +CONFIG_VIPERBOARD_ADC=m +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_BLK=m +CONFIG_VIRTIO_BLK_SCSI=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_VIRTIO_INPUT=m +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_VIRTIO_NET=m +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m +CONFIG_VIRTUALIZATION=y +CONFIG_VIRT_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRT_TO_BUS=y +CONFIG_VITESSE_PHY=m +CONFIG_VL6180=m +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_VLSI_FIR=m +CONFIG_VMAP_STACK=y +CONFIG_VMCP=y +CONFIG_VMCP_CMA_SIZE=4 +CONFIG_VMD=m +CONFIG_VME_CA91CX42=m +CONFIG_VME_FAKE=m +CONFIG_VME_TSI148=m +CONFIG_VME_USER=m +CONFIG_VMIVME_7805=m +CONFIG_VMLOGRDR=m +# CONFIG_VMSPLIT_1G is not set +# CONFIG_VMSPLIT_2G is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +CONFIG_VMWARE_BALLOON=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_VMWARE_VMCI=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VOP=m +CONFIG_VOP_BUS=m +CONFIG_VORTEX=m +CONFIG_VSOCKETS=m +CONFIG_VSOCKETS_DIAG=m +CONFIG_VSOCKMON=m +CONFIG_VSX=y +CONFIG_VT=y +CONFIG_VT6655=m +CONFIG_VT6656=m +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_VXLAN=m +CONFIG_VZ89X=m +CONFIG_W1_CON=y +CONFIG_W1_MASTER_DS1WM=m +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_GPIO=m +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_MASTER_MXC=m +CONFIG_W1_SLAVE_DS2405=m +CONFIG_W1_SLAVE_DS2406=m +CONFIG_W1_SLAVE_DS2408=m +CONFIG_W1_SLAVE_DS2408_READBACK=y +CONFIG_W1_SLAVE_DS2413=m +CONFIG_W1_SLAVE_DS2423=m +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2438=m +CONFIG_W1_SLAVE_DS2760=m +CONFIG_W1_SLAVE_DS2780=m +CONFIG_W1_SLAVE_DS2781=m +CONFIG_W1_SLAVE_DS2805=m +CONFIG_W1_SLAVE_DS28E04=m +CONFIG_W1_SLAVE_DS28E17=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_THERM=m +CONFIG_W83627HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_WANXL=m +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_WARN_DYNAMIC_STACK is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y +# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC is not set +CONFIG_WATCHDOG_PRETIMEOUT_GOV=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m +CONFIG_WATCHDOG_RTAS=m +CONFIG_WATCHDOG_SYSFS=y +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set +CONFIG_WD80x3=m +CONFIG_WDAT_WDT=m +CONFIG_WDT=m +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PRIV=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WIL6210=m +CONFIG_WIL6210_DEBUGFS=y +CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_WILC1000=m +CONFIG_WILC1000_HW_OOB_INTR=y +CONFIG_WILC1000_SDIO=m +CONFIG_WILC1000_SPI=m +CONFIG_WILINK_PLATFORM_DATA=y +CONFIG_WIMAX_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M=m +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M_USB=m +CONFIG_WINBOND_840=m +CONFIG_WINBOND_FIR=m +CONFIG_WINDFARM=m +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +# CONFIG_WIRELESS_WDS is not set +CONFIG_WIZNET_BUS_ANY=y +# CONFIG_WIZNET_BUS_DIRECT is not set +# CONFIG_WIZNET_BUS_INDIRECT is not set +CONFIG_WIZNET_W5100=m +CONFIG_WIZNET_W5100_SPI=m +CONFIG_WIZNET_W5300=m +# CONFIG_WKUP_M3_IPC is not set +CONFIG_WKUP_M3_RPROC=m +CONFIG_WL1251=m +CONFIG_WL1251_SDIO=m +CONFIG_WL1251_SPI=m +CONFIG_WL12XX=m +CONFIG_WL18XX=m +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_ADMTEK=y +CONFIG_WLAN_VENDOR_ATH=y +CONFIG_WLAN_VENDOR_ATMEL=y +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_WLAN_VENDOR_CISCO=y +CONFIG_WLAN_VENDOR_INTEL=y +CONFIG_WLAN_VENDOR_INTERSIL=y +CONFIG_WLAN_VENDOR_MARVELL=y +CONFIG_WLAN_VENDOR_MEDIATEK=y +CONFIG_WLAN_VENDOR_QUANTENNA=y +CONFIG_WLAN_VENDOR_RALINK=y +CONFIG_WLAN_VENDOR_REALTEK=y +CONFIG_WLAN_VENDOR_RSI=y +CONFIG_WLAN_VENDOR_ST=y +CONFIG_WLAN_VENDOR_TI=y +CONFIG_WLAN_VENDOR_ZYDAS=y +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m +CONFIG_WLCORE_SPI=m +CONFIG_WM831X_BACKUP=m +CONFIG_WM831X_POWER=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_POWER=m +CONFIG_WM8350_WATCHDOG=m +CONFIG_WMI_BMOF=m +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +CONFIG_X25_ASY=m +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_X86=y +CONFIG_X86_16BIT=y +CONFIG_X86_32=y +CONFIG_X86_32_IRIS=m +# CONFIG_X86_32_NON_STANDARD is not set +CONFIG_X86_32_SMP=y +# CONFIG_X86_5LEVEL is not set +CONFIG_X86_64=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_X86_64_SMP=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +CONFIG_X86_AMD_PLATFORM_DEVICE=y +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_APM_BOOT=y +# CONFIG_X86_BIGSMP is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +CONFIG_X86_CMOV=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CPUFREQ_NFORCE2=y +CONFIG_X86_CPUID=m +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_X86_DEBUG_FPU=y +# CONFIG_X86_DECODER_SELFTEST is not set +CONFIG_X86_DEV_DMA_OPS=y +CONFIG_X86_DIRECT_GBPAGES=y +CONFIG_X86_ESPFIX32=y +CONFIG_X86_ESPFIX64=y +CONFIG_X86_EXTENDED_PLATFORM=y +# CONFIG_X86_E_POWERSAVER is not set +CONFIG_X86_FAST_FEATURE_TESTS=y +CONFIG_X86_FEATURE_NAMES=y +CONFIG_X86_GENERIC=y +# CONFIG_X86_GOLDFISH is not set +CONFIG_X86_GX_SUSPMOD=m +CONFIG_X86_INTEL_LPSS=y +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +CONFIG_X86_INTEL_MPX=y +CONFIG_X86_INTEL_PSTATE=y +# CONFIG_X86_INTEL_QUARK is not set +CONFIG_X86_INTEL_UMIP=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_IO_APIC=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_LEGACY_VM86=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_LONGHAUL=m +CONFIG_X86_LONGRUN=m +CONFIG_X86_MCE=y +CONFIG_X86_MCELOG_LEGACY=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_INJECT=m +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MPPARSE=y +CONFIG_X86_MSR=m +CONFIG_X86_NEED_RELOCS=y +CONFIG_X86_NUMACHIP=y +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_PAE=y +CONFIG_X86_PAT=y +CONFIG_X86_PCC_CPUFREQ=y +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_X86_PMEM_LEGACY=y +CONFIG_X86_PMEM_LEGACY_DEVICE=y +CONFIG_X86_PM_TIMER=y +CONFIG_X86_POWERNOW_K6=m +CONFIG_X86_POWERNOW_K7=m +CONFIG_X86_POWERNOW_K7_ACPI=y +CONFIG_X86_POWERNOW_K8=y +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_PTDUMP is not set +CONFIG_X86_PTDUMP_CORE=y +# CONFIG_X86_RDC321X is not set +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_RESERVE_LOW=64 +CONFIG_X86_SFI_CPUFREQ=m +CONFIG_X86_SMAP=y +CONFIG_X86_SPEEDSTEP_CENTRINO=y +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=y +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y +CONFIG_X86_SPEEDSTEP_SMI=y +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_X86_SYSFB is not set +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_X86_TSC=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +# CONFIG_X86_UV is not set +# CONFIG_X86_VERBOSE_BOOTUP is not set +# CONFIG_X86_VSMP is not set +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_X2APIC=y +CONFIG_X86_X32=y +CONFIG_XENFS=m +CONFIG_XEN_512GB=y +CONFIG_XEN_ACPI=y +CONFIG_XEN_ACPI_PROCESSOR=y +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_BACKEND=y +CONFIG_XEN_BALLOON=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_COMPAT_XENFS=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_DOM0=y +CONFIG_XEN_EFI=y +CONFIG_XEN_FBDEV_FRONTEND=m +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_HAVE_VPMU=y +CONFIG_XEN_MCE_LOG=y +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_XEN_PCIDEV_BACKEND=m +CONFIG_XEN_PCIDEV_FRONTEND=m +CONFIG_XEN_PRIVCMD=m +CONFIG_XEN_PV=y +# CONFIG_XEN_PVCALLS_BACKEND is not set +CONFIG_XEN_PVCALLS_FRONTEND=m +CONFIG_XEN_PVH=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_PVHVM_SMP=y +CONFIG_XEN_PV_SMP=y +CONFIG_XEN_SAVE_RESTORE=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_SCSI_BACKEND=m +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_XEN_SELFBALLOONING=y +CONFIG_XEN_SYMS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_TMEM=m +CONFIG_XEN_WDT=m +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=m +CONFIG_XFRM_IPCOMP=m +# CONFIG_XFRM_MIGRATE is not set +CONFIG_XFRM_OFFLOAD=y +CONFIG_XFRM_STATISTICS=y +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_USER=m +# CONFIG_XFS_DEBUG is not set +CONFIG_XFS_FS=m +# CONFIG_XFS_ONLINE_SCRUB is not set +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_RT=y +# CONFIG_XFS_WARN is not set +CONFIG_XGENE_DMA=m +CONFIG_XGENE_PMU=y +CONFIG_XGENE_SLIMPRO_MBOX=m +CONFIG_XILINX_DMA=m +CONFIG_XILINX_GMII2RGMII=m +CONFIG_XILINX_PR_DECOUPLER=m +CONFIG_XILINX_ZYNQMP_DMA=m +CONFIG_XILLYBUS_OF=m +CONFIG_XILLYBUS_PCIE=m +CONFIG_XMON=y +# CONFIG_XMON_DEFAULT is not set +CONFIG_XMON_DISASSEMBLY=y +CONFIG_XOR_BLOCKS=m +CONFIG_XPS=y +CONFIG_XXHASH=y +CONFIG_XZ_DEC=y +CONFIG_YAM=m +CONFIG_YELLOWFIN=m +CONFIG_YENTA=m +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_Z3FOLD=m +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBUD=y +CONFIG_ZCRYPT=m +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_ZEROPLUS_FF=y +CONFIG_ZFCP=m +CONFIG_ZIIRAVE_WATCHDOG=m +CONFIG_ZISOFS=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZONE_DEVICE=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ZPA2326=m +CONFIG_ZPA2326_I2C=m +CONFIG_ZPA2326_SPI=m +CONFIG_ZPOOL=y +CONFIG_ZRAM=m +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZSMALLOC=y +# CONFIG_ZSMALLOC_STAT is not set +CONFIG_ZSTD_COMPRESS=m +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_ZSWAP=y +CONFIG_ZX_TDM=m --- linux-aws-4.15.0.orig/debian.master/config/i386/config.common.i386 +++ linux-aws-4.15.0/debian.master/config/i386/config.common.i386 @@ -0,0 +1,514 @@ +# +# Config options for config.common.i386 automatically generated by splitconfig.pl +# +# CONFIG_64BIT is not set +CONFIG_6LOWPAN=m +CONFIG_ABX500_CORE=y +CONFIG_AC97_BUS=m +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_DEBUGGER is not set +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ADFS_FS=m +CONFIG_AFFS_FS=m +CONFIG_AIX_PARTITION=y +CONFIG_ALIM7101_WDT=m +CONFIG_ALTERA_TSE=m +CONFIG_AMD_XGBE_HAVE_ECC=y +CONFIG_AMIGA_PARTITION=y +CONFIG_APPLICOM=m +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_ARCH_MMAP_RND_BITS=8 +CONFIG_ARCH_MMAP_RND_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +# CONFIG_ARCH_WANTS_THP_SWAP is not set +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCNET=m +# CONFIG_ARM_GIC_V3_ITS is not set +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_GENERIC=y +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=y +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BATMAN_ADV=m +CONFIG_BCH=m +CONFIG_BCMA=m +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BE2ISCSI=m +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RSXX=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BOUNCE=y +CONFIG_BSD_DISKLABEL=y +CONFIG_C2PORT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +CONFIG_CAN=m +CONFIG_CB710_CORE=m +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CHASH=m +CONFIG_CMDLINE_PARTITION=y +CONFIG_CRAMFS=m +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +CONFIG_DECNET=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DMADEVICES=y +# CONFIG_DMA_CMA is not set +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_VIRTUAL_CHANNELS=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DNET=m +CONFIG_DRM=m +CONFIG_DUMMY_IRQ=m +CONFIG_DW_WATCHDOG=m +CONFIG_ECHO=m +CONFIG_EEPROM_93CX6=m +CONFIG_EFI=y +CONFIG_EFI_CAPSULE_LOADER=y +CONFIG_EFI_DEV_PATH_PARSER=y +CONFIG_EFS_FS=m +# CONFIG_EM_TIMER_STI is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ETHOC=m +# CONFIG_EVM_LOAD_X509 is not set +CONFIG_EXOFS_FS=m +CONFIG_EXTCON=y +CONFIG_F2FS_FS=m +CONFIG_FB=y +CONFIG_FB_BOOT_VESA_SUPPORT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIXED_PHY=y +CONFIG_FMC=m +# CONFIG_FONTS is not set +CONFIG_FRAME_WARN=1024 +CONFIG_FUSION=y +CONFIG_GAMEPORT=m +CONFIG_GENERIC_PHY=y +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_TWL6040=m +CONFIG_HAVE_AOUT=y +# CONFIG_HAVE_ARCH_BITREVERSE is not set +# CONFIG_HAVE_ARCH_VMAP_STACK is not set +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATION=y +CONFIG_HIO=m +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_SHPC=m +CONFIG_HPET=y +CONFIG_HPFS_FS=m +CONFIG_HP_ILO=m +CONFIG_HSI=m +CONFIG_HSR=m +CONFIG_HTC_PASIC3=m +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HWSPINLOCK=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +# CONFIG_HYPERV_TSCPAGE is not set +# CONFIG_HZ_100 is not set +CONFIG_I2C=y +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_SLAVE is not set +CONFIG_I6300ESB_WDT=m +CONFIG_IEEE802154=m +CONFIG_IIO=m +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_NES=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INPUT=y +CONFIG_IOMMU_IOVA=y +CONFIG_IPACK_BUS=m +CONFIG_IPMI_HANDLER=m +CONFIG_IPX=m +# CONFIG_IP_DCCP_CCID3 is not set +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_ISA_BUS_API=y +CONFIG_JFS_FS=m +CONFIG_JME=m +CONFIG_JUMP_LABEL=y +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +CONFIG_KARMA_PARTITION=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_XZ is not set +CONFIG_KVM=m +CONFIG_LAPB=m +# CONFIG_LATENCYTOP is not set +CONFIG_LDM_PARTITION=y +CONFIG_LIBNVDIMM=y +CONFIG_LLC2=m +CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y +CONFIG_LOCK_DOWN_KERNEL=y +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MAC_PARTITION=y +CONFIG_MAILBOX=y +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MCB=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MD_MULTIPATH=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_MEMSTICK=m +CONFIG_MFD_CORE=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +# CONFIG_MFD_TMIO is not set +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=m +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MTD=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CMDLINE_PARTS=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set +CONFIG_NCP_FS=m +CONFIG_NET_CADENCE=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFP=m +CONFIG_NOP_USB_XCEIV=m +CONFIG_NOZOMI=m +CONFIG_NR_CPUS=8 +CONFIG_NTB=m +# CONFIG_NTFS_RW is not set +CONFIG_NVMEM=y +CONFIG_N_GSM=m +# CONFIG_OF is not set +CONFIG_OMFS_FS=m +CONFIG_OSF_PARTITION=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_PAGE_EXTENSION=y +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_PARAVIRT=y +CONFIG_PARPORT=m +CONFIG_PATA_SIS=y +CONFIG_PC104=y +CONFIG_PCCARD=m +CONFIG_PCIEPORTBUS=y +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PCMCIA=m +CONFIG_PGTABLE_LEVELS=3 +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PHY_EXYNOS5250_USB2 is not set +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PINCTRL=y +CONFIG_PINCTRL_CHERRYVIEW=m +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_POWERCAP=y +CONFIG_POWER_AVS=y +CONFIG_POWER_SUPPLY=y +CONFIG_PPP=y +CONFIG_PPS=m +CONFIG_PPS_CLIENT_GPIO=m +CONFIG_PPS_CLIENT_LDISC=m +# CONFIG_PREEMPT_NONE is not set +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PTP_1588_CLOCK=m +CONFIG_PWM=y +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +CONFIG_R3964=m +CONFIG_RAW_DRIVER=m +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_REED_SOLOMON=m +# CONFIG_REFCOUNT_FULL is not set +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_TWL4030=m +CONFIG_REISERFS_FS=m +# CONFIG_RESET_BERLIN is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_IMX7 is not set +# CONFIG_RESET_MESON is not set +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_SUNXI is not set +CONFIG_RFKILL=y +CONFIG_ROMFS_FS=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_PCF8523=m +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_SCHED_SMT=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SNIC=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_WD719X=m +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DW=m +CONFIG_SERIAL_8250_FINTEK=y +# CONFIG_SERIAL_8250_FSL is not set +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIO=y +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +# CONFIG_SG_SPLIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +CONFIG_SLIP=m +CONFIG_SND=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_OPL4_LIB_SEQ=m +CONFIG_SND_PCM=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_IMX_AUDMUX=m +CONFIG_SND_SOC_RT5677_SPI=m +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_TIMER=m +CONFIG_SOC_TI=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOUND=m +CONFIG_SPI=y +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_SPI_ROCKCHIP is not set +CONFIG_SPMI=m +CONFIG_SRAM=y +CONFIG_SSB=m +CONFIG_STAGING=y +# CONFIG_STANDALONE is not set +# CONFIG_SUNXI_SRAM is not set +CONFIG_SUN_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSV_FS=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_THERMAL=y +CONFIG_TIFM_CORE=m +CONFIG_TI_CPSW_ALE=m +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TRACE_SINK=m +CONFIG_TTY_PRINTK=y +CONFIG_UFS_FS=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_GADGET=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_SUPPORT=y +CONFIG_UWB=m +CONFIG_VFIO=m +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO_PCI=m +CONFIG_VFIO_VIRQFD=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO_MMIO=y +CONFIG_VM86=y +CONFIG_VME_BUS=y +CONFIG_VMXNET3=m +CONFIG_VXFS_FS=m +CONFIG_W1=m +CONFIG_WAN=y +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_X25=m +CONFIG_X86_INTEL_MID=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_SPEEDSTEP_LIB=y +CONFIG_XEN=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT=4 +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_ZLIB_DEFLATE=y --- linux-aws-4.15.0.orig/debian.master/config/i386/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/i386/config.flavour.generic @@ -0,0 +1,9 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# +CONFIG_HZ=250 +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_VOLUNTARY=y --- linux-aws-4.15.0.orig/debian.master/config/i386/config.flavour.lowlatency +++ linux-aws-4.15.0/debian.master/config/i386/config.flavour.lowlatency @@ -0,0 +1,9 @@ +# +# Config options for config.flavour.lowlatency automatically generated by splitconfig.pl +# +CONFIG_HZ=1000 +CONFIG_HZ_1000=y +# CONFIG_HZ_250 is not set +CONFIG_IRQ_FORCED_THREADING_DEFAULT=y +CONFIG_PREEMPT=y +# CONFIG_PREEMPT_VOLUNTARY is not set --- linux-aws-4.15.0.orig/debian.master/config/ppc64el/config.common.ppc64el +++ linux-aws-4.15.0/debian.master/config/ppc64el/config.common.ppc64el @@ -0,0 +1,512 @@ +# +# Config options for config.common.ppc64el automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +CONFIG_6LOWPAN=m +CONFIG_ABX500_CORE=y +CONFIG_AC97_BUS=m +CONFIG_ADFS_FS=m +CONFIG_AFFS_FS=m +CONFIG_AIX_PARTITION=y +CONFIG_ALIM7101_WDT=m +CONFIG_ALTERA_TSE=m +# CONFIG_AMD_XGBE_HAVE_ECC is not set +CONFIG_AMIGA_PARTITION=y +CONFIG_APPLICOM=m +# CONFIG_ARCH_HAS_STRICT_KERNEL_RWX is not set +# CONFIG_ARCH_HAS_STRICT_MODULE_RWX is not set +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=29 +CONFIG_ARCH_MMAP_RND_BITS_MIN=14 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=13 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=7 +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +# CONFIG_ARCH_WANTS_THP_SWAP is not set +# CONFIG_ARCH_WANTS_UBSAN_NO_NULL is not set +CONFIG_ARCNET=m +# CONFIG_ARM_GIC_V3_ITS is not set +CONFIG_ATA=y +CONFIG_ATALK=m +CONFIG_ATARI_PARTITION=y +CONFIG_ATA_GENERIC=m +CONFIG_ATA_OVER_ETH=m +CONFIG_ATA_PIIX=m +CONFIG_ATM=m +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUXDISPLAY=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BATMAN_ADV=m +CONFIG_BCH=m +CONFIG_BCMA=m +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_BE2ISCSI=m +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RSXX=m +CONFIG_BLK_DEV_SKD=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_UMEM=m +CONFIG_BOUNCE=y +CONFIG_BSD_DISKLABEL=y +CONFIG_C2PORT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_CAIF=m +CONFIG_CAN=m +CONFIG_CB710_CORE=m +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_CDROM_PKTCDVD=m +CONFIG_CHASH=m +CONFIG_CMDLINE_PARTITION=y +CONFIG_CMM=m +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CRAMFS=m +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m +CONFIG_CXL_AFU_DRIVER_OPS=y +CONFIG_CXL_BASE=y +CONFIG_CXL_LIB=y +CONFIG_DECNET=m +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DMADEVICES=y +# CONFIG_DMA_NOOP_OPS is not set +CONFIG_DMA_VIRTUAL_CHANNELS=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DNET=m +CONFIG_DRM=m +CONFIG_DUMMY_IRQ=m +CONFIG_DW_WATCHDOG=m +CONFIG_ECHO=m +CONFIG_EEPROM_93CX6=m +CONFIG_EFS_FS=m +# CONFIG_EM_TIMER_STI is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ETHOC=m +CONFIG_EVM_LOAD_X509=y +CONFIG_EXOFS_FS=m +CONFIG_EXTCON=y +CONFIG_F2FS_FS=m +CONFIG_FB=y +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_IBM_GXT4500=y +CONFIG_FB_MACMODES=y +# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIXED_PHY=y +CONFIG_FMC=m +# CONFIG_FONTS is not set +CONFIG_FORCE_MAX_ZONEORDER=9 +CONFIG_FRAME_WARN=2048 +CONFIG_FUSION=y +CONFIG_GAMEPORT=m +# CONFIG_GENERIC_CSUM is not set +CONFIG_GENERIC_PHY=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_TWL6040=m +# CONFIG_HAVE_AOUT is not set +# CONFIG_HAVE_ARCH_BITREVERSE is not set +# CONFIG_HAVE_ARCH_VMAP_STACK is not set +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HFSPLUS_FS=m +CONFIG_HFS_FS=m +# CONFIG_HIBERNATION is not set +# CONFIG_HIO is not set +CONFIG_HOTPLUG_PCI=y +# CONFIG_HOTPLUG_PCI_SHPC is not set +CONFIG_HPFS_FS=m +CONFIG_HP_ILO=m +CONFIG_HSI=m +CONFIG_HSR=m +CONFIG_HTC_PASIC3=m +CONFIG_HUGETLB_PAGE=y +CONFIG_HWMON=y +CONFIG_HWSPINLOCK=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +# CONFIG_HYPERV_TSCPAGE is not set +CONFIG_HZ=250 +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +CONFIG_I2C=y +# CONFIG_I2C_SLAVE is not set +CONFIG_I6300ESB_WDT=m +CONFIG_IEEE802154=m +CONFIG_IIO=m +CONFIG_ILLEGAL_POINTER_VALUE=0x5deadbeef0000000 +CONFIG_IMA_DEFAULT_HASH="sha256" +# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set +CONFIG_IMA_DEFAULT_HASH_SHA256=y +CONFIG_IMA_DEFAULT_TEMPLATE="ima-sig" +CONFIG_IMA_LOAD_X509=y +# CONFIG_IMA_NG_TEMPLATE is not set +CONFIG_IMA_SIG_TEMPLATE=y +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_NES=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_QIB=m +CONFIG_INPUT=y +CONFIG_IPACK_BUS=m +CONFIG_IPMI_HANDLER=m +CONFIG_IPX=m +# CONFIG_IP_DCCP_CCID3 is not set +CONFIG_IRQ_BYPASS_MANAGER=y +# CONFIG_IRQ_FORCED_THREADING_DEFAULT is not set +# CONFIG_ISA_BUS_API is not set +CONFIG_JFS_FS=m +CONFIG_JME=m +CONFIG_JUMP_LABEL=y +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +CONFIG_KARMA_PARTITION=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_XZ is not set +CONFIG_KVM=y +CONFIG_LAPB=m +# CONFIG_LATENCYTOP is not set +CONFIG_LDM_PARTITION=y +CONFIG_LIBNVDIMM=y +CONFIG_LLC2=m +# CONFIG_LOCK_DOWN_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MAC_PARTITION=y +CONFIG_MAILBOX=y +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MCB=m +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BUS=y +CONFIG_MDIO_BUS_MUX=m +CONFIG_MDIO_THUNDER=m +CONFIG_MD_MULTIPATH=m +CONFIG_MEDIA_SUPPORT=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +CONFIG_MEMORY=y +# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set +CONFIG_MEMSTICK=m +# CONFIG_MEM_SOFT_DIRTY is not set +CONFIG_MFD_CORE=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_MT6397=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +# CONFIG_MFD_TMIO is not set +# CONFIG_MFD_TPS65217 is not set +CONFIG_MII=m +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=m +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MTD=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_CMDLINE_PARTS=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set +CONFIG_MTD_OF_PARTS=m +CONFIG_NCP_FS=m +CONFIG_NET_CADENCE=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_AGERE=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_VENDOR_DLINK=y +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_NET_VENDOR_EXAR=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_HP=y +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_NET_VENDOR_MICREL=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SIS=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_NET_VENDOR_SUN=y +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_NET_VENDOR_TI=y +CONFIG_NET_VENDOR_VIA=y +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFP=m +CONFIG_NODES_SHIFT=8 +CONFIG_NOP_USB_XCEIV=m +CONFIG_NOZOMI=m +CONFIG_NR_CPUS=2048 +CONFIG_NTB=m +# CONFIG_NTFS_RW is not set +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_NVMEM=y +CONFIG_N_GSM=m +CONFIG_OF=y +CONFIG_OMFS_FS=m +CONFIG_OSF_PARTITION=y +# CONFIG_PAGE_EXTENSION is not set +CONFIG_PAGE_OFFSET=0xc000000000000000 +CONFIG_PANIC_TIMEOUT=10 +CONFIG_PARPORT=m +CONFIG_PATA_SIS=m +CONFIG_PC104=y +# CONFIG_PCCARD is not set +# CONFIG_PCIEPORTBUS is not set +CONFIG_PCIPCWATCHDOG=m +# CONFIG_PCI_MSI_IRQ_DOMAIN is not set +CONFIG_PCI_PASID=y +CONFIG_PCI_PRI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_PGTABLE_MAPPING=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_START=0x00000000 +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PHY_EXYNOS5250_USB2 is not set +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PINCTRL=y +CONFIG_PM_DEBUG=y +CONFIG_PM_DEVFREQ=y +CONFIG_POWERCAP=y +CONFIG_POWER_AVS=y +CONFIG_POWER_SUPPLY=y +CONFIG_PPP=y +CONFIG_PPS=y +CONFIG_PPS_CLIENT_GPIO=m +CONFIG_PPS_CLIENT_LDISC=m +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PTP_1588_CLOCK=y +CONFIG_PWM=y +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +CONFIG_R3964=m +CONFIG_RAW_DRIVER=m +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_REED_SOLOMON=m +# CONFIG_REFCOUNT_FULL is not set +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_TWL4030=m +CONFIG_REISERFS_FS=m +# CONFIG_RESET_BERLIN is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_IMX7 is not set +# CONFIG_RESET_MESON is not set +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_SUNXI is not set +CONFIG_RFKILL=y +CONFIG_ROMFS_FS=m +CONFIG_RPMSG_VIRTIO=m +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_TWL4030=m +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_SCHED_SMT=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_SCSI_AIC94XX=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_ESAS2R=m +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_MQ_DEFAULT is not set +CONFIG_SCSI_MVSAS=m +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_SNIC=m +CONFIG_SCSI_SRP_ATTRS=y +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_WD719X=m +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +# CONFIG_SENSORS_SCH56XX_COMMON is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DW=m +# CONFIG_SERIAL_8250_FINTEK is not set +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIO=y +CONFIG_SFC=m +CONFIG_SFC_FALCON=m +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +# CONFIG_SG_SPLIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +CONFIG_SLIP=m +CONFIG_SND=m +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_EMU10K1_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_IMX_AUDMUX=m +# CONFIG_SND_SOC_RT5677_SPI is not set +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_TIMER=m +CONFIG_SOC_TI=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOUND=m +CONFIG_SPI=y +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_ROCKCHIP is not set +CONFIG_SPMI=m +CONFIG_SRAM=y +CONFIG_SSB=m +CONFIG_STAGING=y +CONFIG_STANDALONE=y +# CONFIG_SUNXI_SRAM is not set +CONFIG_SUN_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_SYSV_FS=m +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_TCG_TIS_I2C_ATMEL=y +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_TCG_TIS_I2C_NUVOTON=y +CONFIG_THERMAL=y +CONFIG_TIFM_CORE=m +CONFIG_TI_CPSW_ALE=m +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TRACE_SINK=m +CONFIG_TTY_PRINTK=y +CONFIG_UFS_FS=m +CONFIG_UIO_AEC=m +CONFIG_UIO_CIF=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_MF624=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_EHCI_HCD_PLATFORM=m +CONFIG_USB_GADGET=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_OHCI_HCD_PLATFORM=m +CONFIG_USB_SUPPORT=y +CONFIG_UWB=m +CONFIG_VFIO=y +# CONFIG_VFIO_IOMMU_TYPE1 is not set +CONFIG_VFIO_PCI=y +CONFIG_VFIO_VIRQFD=y +CONFIG_VGASTATE=m +CONFIG_VIRTIO_MMIO=y +# CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set +CONFIG_VME_BUS=y +CONFIG_VXFS_FS=m +CONFIG_W1=m +CONFIG_WAN=y +CONFIG_WDTPCI=m +CONFIG_WIMAX=m +CONFIG_X25=m +CONFIG_XILINX_WATCHDOG=m +CONFIG_XILLYBUS=m +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_TEST=m +CONFIG_XZ_DEC_X86=y +CONFIG_ZLIB_DEFLATE=y --- linux-aws-4.15.0.orig/debian.master/config/ppc64el/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/ppc64el/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.master/config/s390x/config.common.s390x +++ linux-aws-4.15.0/debian.master/config/s390x/config.common.s390x @@ -0,0 +1,425 @@ +# +# Config options for config.common.s390x automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +# CONFIG_6LOWPAN is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_AIX_PARTITION is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_ALTERA_TSE is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_APPLICOM is not set +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set +# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +# CONFIG_ARCH_WANTS_THP_SWAP is not set +CONFIG_ARCH_WANTS_UBSAN_NO_NULL=y +# CONFIG_ARCNET is not set +# CONFIG_ARM_GIC_V3_ITS is not set +# CONFIG_ATA is not set +# CONFIG_ATALK is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_ATM is not set +# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set +CONFIG_AUTOFS4_FS=y +# CONFIG_AUXDISPLAY is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_BCMA is not set +# CONFIG_BCM_KONA_USB2_PHY is not set +# CONFIG_BE2ISCSI is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +# CONFIG_BLK_DEV_RSXX is not set +# CONFIG_BLK_DEV_SKD is not set +CONFIG_BLK_DEV_SR_VENDOR=y +# CONFIG_BLK_DEV_SX8 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BOUNCE is not set +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_C2PORT is not set +# CONFIG_CADENCE_WATCHDOG is not set +# CONFIG_CAIF is not set +# CONFIG_CAN is not set +# CONFIG_CB710_CORE is not set +# CONFIG_CC_STACKPROTECTOR is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_CHASH is not set +# CONFIG_CMDLINE_PARTITION is not set +CONFIG_CMM=y +CONFIG_CPU_BIG_ENDIAN=y +# CONFIG_CRAMFS is not set +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set +# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set +# CONFIG_CXL_AFU_DRIVER_OPS is not set +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_LIB is not set +# CONFIG_DECNET is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +# CONFIG_DMADEVICES is not set +# CONFIG_DMA_CMA is not set +CONFIG_DMA_NOOP_OPS=y +CONFIG_DM_DEBUG=y +CONFIG_DM_MQ_DEFAULT=y +# CONFIG_DNET is not set +# CONFIG_DRM is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_DW_WATCHDOG is not set +# CONFIG_ECHO is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EFS_FS is not set +# CONFIG_EM_TIMER_STI is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_ETHOC is not set +# CONFIG_EVM_LOAD_X509 is not set +# CONFIG_EXOFS_FS is not set +# CONFIG_EXTCON is not set +# CONFIG_F2FS_FS is not set +# CONFIG_FB is not set +# CONFIG_FDDI is not set +# CONFIG_FEALNX is not set +# CONFIG_FIREWIRE is not set +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_FIXED_PHY=m +# CONFIG_FMC is not set +CONFIG_FORCE_MAX_ZONEORDER=9 +CONFIG_FRAME_WARN=1024 +# CONFIG_FUSION is not set +# CONFIG_GAMEPORT is not set +# CONFIG_GENERIC_PHY is not set +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_GENERIC_PLATFORM=m +# CONFIG_GPIO_MB86S7X is not set +# CONFIG_HAVE_AOUT is not set +# CONFIG_HAVE_ARCH_BITREVERSE is not set +# CONFIG_HAVE_ARCH_VMAP_STACK is not set +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_HFS_FS is not set +CONFIG_HIBERNATION=y +CONFIG_HOTPLUG_PCI=y +# CONFIG_HOTPLUG_PCI_SHPC is not set +# CONFIG_HPFS_FS is not set +# CONFIG_HP_ILO is not set +# CONFIG_HSI is not set +# CONFIG_HSR is not set +# CONFIG_HTC_PASIC3 is not set +CONFIG_HUGETLB_PAGE=y +# CONFIG_HWMON is not set +# CONFIG_HWSPINLOCK is not set +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HYPERV_TSCPAGE is not set +CONFIG_HZ=100 +CONFIG_HZ_100=y +# CONFIG_HZ_1000 is not set +# CONFIG_HZ_250 is not set +# CONFIG_I2C is not set +# CONFIG_I6300ESB_WDT is not set +# CONFIG_IEEE802154 is not set +# CONFIG_IIO is not set +CONFIG_IMA_DEFAULT_HASH="sha1" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +# CONFIG_INFINIBAND_BNXT_RE is not set +# CONFIG_INFINIBAND_NES is not set +# CONFIG_INFINIBAND_OCRDMA is not set +# CONFIG_INFINIBAND_QIB is not set +# CONFIG_INPUT is not set +# CONFIG_IPACK_BUS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPX is not set +CONFIG_IP_DCCP_CCID3=y +CONFIG_IRQ_BYPASS_MANAGER=m +# CONFIG_ISA_BUS_API is not set +# CONFIG_JFS_FS is not set +# CONFIG_JME is not set +CONFIG_JUMP_LABEL=y +# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_KERNEL_GZIP is not set +CONFIG_KERNEL_XZ=y +CONFIG_KVM=y +# CONFIG_LAPB is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_LIBNVDIMM is not set +# CONFIG_LLC2 is not set +# CONFIG_LOCK_DOWN_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=17 +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MAILBOX is not set +# CONFIG_MAX63XX_WATCHDOG is not set +# CONFIG_MCB is not set +# CONFIG_MDIO_BITBANG is not set +CONFIG_MDIO_BUS=m +# CONFIG_MDIO_THUNDER is not set +CONFIG_MD_MULTIPATH=y +# CONFIG_MEDIA_SUPPORT is not set +# CONFIG_MEGARAID_LEGACY is not set +# CONFIG_MEGARAID_NEWGEN is not set +# CONFIG_MEGARAID_SAS is not set +# CONFIG_MEMORY is not set +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +# CONFIG_MEMSTICK is not set +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_MFD_CORE=m +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_RTSX_PCI is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_MINIX_FS is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_MMC is not set +# CONFIG_MTD is not set +# CONFIG_NCP_FS is not set +# CONFIG_NET_CADENCE is not set +# CONFIG_NET_PACKET_ENGINE is not set +# CONFIG_NET_SWITCHDEV is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_AGERE is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE 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_DEC is not set +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_EXAR is not set +# CONFIG_NET_VENDOR_EZCHIP 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_MICREL is not set +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI 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_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN 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_NEW_LEDS is not set +# CONFIG_NFC is not set +# CONFIG_NFP is not set +CONFIG_NODES_SHIFT=4 +# CONFIG_NOZOMI is not set +CONFIG_NR_CPUS=256 +# CONFIG_NTB is not set +CONFIG_NTFS_RW=y +# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set +CONFIG_NUMA_EMU=y +# CONFIG_NVMEM is not set +# CONFIG_N_GSM is not set +# CONFIG_OF is not set +# CONFIG_OMFS_FS is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_PAGE_EXTENSION is not set +CONFIG_PANIC_TIMEOUT=0 +# CONFIG_PARPORT is not set +# CONFIG_PC104 is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_PCI_MSI_IRQ_DOMAIN is not set +# CONFIG_PCI_PASID is not set +# CONFIG_PCI_PRI is not set +# CONFIG_PCI_QUIRKS is not set +# CONFIG_PCMCIA is not set +CONFIG_PGTABLE_LEVELS=5 +# CONFIG_PGTABLE_MAPPING is not set +# CONFIG_PHANTOM is not set +# CONFIG_PHONET is not set +CONFIG_PHYLIB=m +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PINCTRL is not set +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_DEVFREQ is not set +# CONFIG_POWERCAP is not set +# CONFIG_POWER_AVS is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_PPP is not set +CONFIG_PPS=m +# CONFIG_PPS_CLIENT_GPIO is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PSTORE is not set +CONFIG_PTP_1588_CLOCK=m +# CONFIG_PWM is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +# CONFIG_REFCOUNT_FULL is not set +# CONFIG_REGULATOR is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_RESET_CONTROLLER is not set +# CONFIG_RFKILL is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_RPMSG_VIRTIO is not set +CONFIG_SCHED_SMT=y +# CONFIG_SCSI_3W_9XXX is not set +# CONFIG_SCSI_3W_SAS is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC94XX is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_ARCMSR is not set +# CONFIG_SCSI_BFA_FC is not set +# CONFIG_SCSI_BNX2X_FCOE is not set +# CONFIG_SCSI_BNX2_ISCSI is not set +# CONFIG_SCSI_CHELSIO_FCOE is not set +# CONFIG_SCSI_CXGB3_ISCSI is not set +# CONFIG_SCSI_CXGB4_ISCSI is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ESAS2R is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_HPSA is not set +# CONFIG_SCSI_HPTIOP is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_LPFC is not set +CONFIG_SCSI_MQ_DEFAULT=y +# CONFIG_SCSI_MVSAS is not set +# CONFIG_SCSI_MVUMI is not set +# CONFIG_SCSI_PM8001 is not set +# CONFIG_SCSI_PMCRAID is not set +# CONFIG_SCSI_QLA_FC is not set +# CONFIG_SCSI_QLA_ISCSI is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SNIC is not set +CONFIG_SCSI_SRP_ATTRS=m +# CONFIG_SCSI_STEX is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_SCSI_WD719X is not set +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_ARC is not set +CONFIG_SERIAL_CORE=m +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_RP2 is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIO is not set +# CONFIG_SFC is not set +# CONFIG_SFC_FALCON is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_SG_SPLIT is not set +# CONFIG_SH_TIMER_CMT is not set +# CONFIG_SH_TIMER_MTU2 is not set +# CONFIG_SH_TIMER_TMU is not set +# CONFIG_SLIP is not set +# CONFIG_SOC_TI is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_SOUND is not set +# CONFIG_SPI is not set +# CONFIG_SPMI is not set +# CONFIG_SRAM is not set +# CONFIG_SSB is not set +# CONFIG_STAGING is not set +CONFIG_STANDALONE=y +# CONFIG_SUNXI_SRAM is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +# CONFIG_SYSV_FS is not set +CONFIG_SYS_HYPERVISOR=y +# CONFIG_THERMAL is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_TRACE_SINK is not set +# CONFIG_TTY_PRINTK is not set +# CONFIG_UFS_FS is not set +# CONFIG_UIO_AEC is not set +# CONFIG_UIO_CIF is not set +# CONFIG_UIO_DMEM_GENIRQ is not set +# CONFIG_UIO_MF624 is not set +# CONFIG_UIO_NETX is not set +# CONFIG_UIO_PCI_GENERIC is not set +# CONFIG_UIO_PDRV_GENIRQ is not set +# CONFIG_UIO_PRUSS is not set +# CONFIG_UIO_SERCOS3 is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_UWB is not set +CONFIG_VFIO=m +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO_PCI=m +CONFIG_VFIO_VIRQFD=m +# CONFIG_VGASTATE is not set +# CONFIG_VIRTIO_MMIO is not set +CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y +# CONFIG_VME_BUS is not set +# CONFIG_VMXNET3 is not set +# CONFIG_VXFS_FS is not set +# CONFIG_W1 is not set +# CONFIG_WAN is not set +# CONFIG_WDTPCI is not set +# CONFIG_WIMAX is not set +# CONFIG_X25 is not set +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_XILLYBUS is not set +# CONFIG_XZ_DEC_ARM is not set +# CONFIG_XZ_DEC_ARMTHUMB is not set +# CONFIG_XZ_DEC_BCJ is not set +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_SPARC is not set +# CONFIG_XZ_DEC_TEST is not set +# CONFIG_XZ_DEC_X86 is not set +CONFIG_ZLIB_DEFLATE=m --- linux-aws-4.15.0.orig/debian.master/config/s390x/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/s390x/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-aws-4.15.0.orig/debian.master/config/x32/config.common.x32 +++ linux-aws-4.15.0/debian.master/config/x32/config.common.x32 @@ -0,0 +1,74 @@ +# nothing here yet +CONFIG_USB_DWC2_DUAL_ROLE=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_ETH_EEM=y +CONFIG_NOP_USB_XCEIV=m +CONFIG_USB_AMD5536UDC=m +CONFIG_USB_AUDIO=m +CONFIG_USB_BDC_UDC=m +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CONFIGFS=m +CONFIG_USB_DWC2=m +CONFIG_USB_DWC3=m +CONFIG_USB_EHCI_HCD_PLATFORM=m +CONFIG_USB_ETH=m +CONFIG_USB_FOTG210_HCD=m +CONFIG_USB_FOTG210_UDC=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_GADGET_XILINX=m +CONFIG_USB_GOKU=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GR_UDC=m +CONFIG_USB_G_ACM_MS=m +CONFIG_USB_G_DBGP=m +CONFIG_USB_G_HID=m +CONFIG_USB_G_MULTI=m +CONFIG_USB_G_NCM=m +CONFIG_USB_G_NOKIA=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_G_WEBCAM=m +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1301=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_ISP1760=m +CONFIG_USB_LINK_LAYER_TEST=m +CONFIG_USB_M66592=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_MAX3421_HCD=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_MV_U3D=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_NET2272=m +CONFIG_USB_OHCI_HCD_PLATFORM=m +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PXA27X=m +CONFIG_USB_R8A66597=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SL811_HCD_ISO=y +CONFIG_USB_ULPI_BUS=m +CONFIG_USB_XHCI_PLATFORM=m +CONFIG_USB_G_MULTI_CDC=y +CONFIG_USB_G_MULTI_RNDIS=y --- linux-aws-4.15.0.orig/debian.master/config/x32/config.flavour.generic +++ linux-aws-4.15.0/debian.master/config/x32/config.flavour.generic @@ -0,0 +1,74 @@ +# nothing here yet +CONFIG_USB_DWC2_DUAL_ROLE=y +CONFIG_USB_DWC2_PCI=m +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_ETH_EEM=y +CONFIG_NOP_USB_XCEIV=m +CONFIG_USB_AMD5536UDC=m +CONFIG_USB_AUDIO=m +CONFIG_USB_BDC_UDC=m +CONFIG_USB_C67X00_HCD=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CONFIGFS=m +CONFIG_USB_DWC2=m +CONFIG_USB_DWC3=m +CONFIG_USB_EHCI_HCD_PLATFORM=m +CONFIG_USB_ETH=m +CONFIG_USB_FOTG210_HCD=m +CONFIG_USB_FOTG210_UDC=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_GADGET_XILINX=m +CONFIG_USB_GOKU=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GR_UDC=m +CONFIG_USB_G_ACM_MS=m +CONFIG_USB_G_DBGP=m +CONFIG_USB_G_HID=m +CONFIG_USB_G_MULTI=m +CONFIG_USB_G_NCM=m +CONFIG_USB_G_NOKIA=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_G_WEBCAM=m +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_ISP1301=m +CONFIG_USB_ISP1362_HCD=m +CONFIG_USB_ISP1760=m +CONFIG_USB_LINK_LAYER_TEST=m +CONFIG_USB_M66592=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_MAX3421_HCD=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_MV_U3D=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_NET2272=m +CONFIG_USB_OHCI_HCD_PLATFORM=m +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PXA27X=m +CONFIG_USB_R8A66597=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SL811_HCD_ISO=y +CONFIG_USB_ULPI_BUS=m +CONFIG_USB_XHCI_PLATFORM=m +CONFIG_USB_G_MULTI_CDC=y +CONFIG_USB_G_MULTI_RNDIS=y --- linux-aws-4.15.0.orig/debian.master/control.d/flavour-control.stub +++ linux-aws-4.15.0/debian.master/control.d/flavour-control.stub @@ -0,0 +1,135 @@ +# Items that get replaced: +# FLAVOUR +# DESC +# ARCH +# SUPPORTED +# TARGET +# BOOTLOADER +# =PROVIDES= +# +# Items marked with =FOO= are optional +# +# This file describes the template for packages that are created for each flavour +# in debian/control.d/vars.* +# +# This file gets edited in a couple of places. See the debian/control.stub rule in +# debian/rules. PGGVER, ABINUM, and SRCPKGNAME are all converted in the +# process of creating debian/control. +# +# The flavour specific strings (ARCH, DESC, etc) are converted using values from the various +# flavour files in debian/control.d/vars.* +# +# XXX: Leave the blank line before the first package!! + +Package: linux-image-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: kernel +Priority: optional +Provides: linux-image, fuse-module, aufs-dkms, =PROVIDES=${linux:rprovides} +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod +Recommends: BOOTLOADER, initramfs-tools | linux-initramfs-tool +Breaks: flash-kernel (<< 3.0~rc.4ubuntu64) [arm64] +Suggests: fdutils, SRCPKGNAME-doc-PKGVER | SRCPKGNAME-source-PKGVER, SRCPKGNAME-tools, linux-headers-PKGVER-ABINUM-FLAVOUR +Description: Linux kernel image for version PKGVER on DESC + This package contains the Linux kernel image for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-image-extra-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-PKGVER-ABINUM-FLAVOUR, crda | wireless-crda +Description: Linux kernel extra modules for version PKGVER on DESC + This package contains the Linux kernel extra modules for version PKGVER on + DESC. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports SUPPORTED processors. + . + TARGET + . + You likely do not want to install this package directly. Instead, install + the linux-FLAVOUR meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-headers-PKGVER-ABINUM, ${shlibs:Depends} +Provides: linux-headers, linux-headers-3.0 +Description: Linux kernel headers for version PKGVER on DESC + This package provides kernel header files for version PKGVER on + DESC. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details. + +Package: linux-image-PKGVER-ABINUM-FLAVOUR-dbgsym +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version PKGVER on DESC + This package provides a kernel debug image for version PKGVER on + DESC. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-tools-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-tools-PKGVER-ABINUM +Description: Linux kernel version specific tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version PKGVER-ABINUM on + =HUMAN=. + +Package: linux-cloud-tools-PKGVER-ABINUM-FLAVOUR +Build-Profiles: +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, SRCPKGNAME-cloud-tools-PKGVER-ABINUM +Description: Linux kernel version specific cloud tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools for cloud for version PKGVER-ABINUM on + =HUMAN=. + +Package: linux-udebs-FLAVOUR +Build-Profiles: +XC-Package-Type: udeb +Section: debian-installer +Architecture: ARCH +Depends: ${udeb:Depends} +Description: Metapackage depending on kernel udebs + This package depends on the all udebs that the kernel build generated, + for easier version and migration tracking. + --- linux-aws-4.15.0.orig/debian.master/control.d/generic.inclusion-list +++ linux-aws-4.15.0/debian.master/control.d/generic.inclusion-list @@ -0,0 +1,251 @@ +arch/*/{crypto,kernel,oprofile} +arch/*/kvm/kvm.ko +arch/powerpc/kvm/kvm-hv.ko +arch/powerpc/kvm/kvm-pr.ko +arch/powerpc/kvm/vfio.ko +arch/powerpc/platforms/powernv/opal-prd.ko +arch/s390/* +arch/x86/kvm/kvm-amd.ko +arch/x86/kvm/kvm-intel.ko +crypto/* +drivers/acpi/* +drivers/ata/acard-ahci.ko +drivers/ata/ahci.ko +drivers/ata/ahci_platform.ko +drivers/ata/ata_generic.ko +drivers/ata/libahci.ko +drivers/ata/libahci_platform.ko +drivers/block/brd.ko +drivers/block/cryptoloop.ko +drivers/block/floppy.ko +drivers/block/loop.ko +drivers/block/nbd.ko +drivers/block/rbd.ko +drivers/block/virtio_blk.ko +drivers/block/xen-blkfront.ko +drivers/char/hangcheck-timer.ko +drivers/char/hw_random/powernv-rng.ko +drivers/char/hw_random/virtio-rng.ko +drivers/char/ipmi/* +drivers/char/ipmi/ipmi_msghandler.ko +drivers/char/lp.ko +drivers/char/nvram.ko +drivers/char/ppdev.ko +drivers/char/raw.ko +drivers/char/virtio_console.ko +drivers/crypto/nx/* +drivers/crypto/vmx/vmx-crypto.ko +drivers/firmware/efi/* +drivers/firmware/iscsi_ibft.ko +drivers/gpu/drm/ast/ast.ko +drivers/gpu/drm/drm_kms_helper.ko +drivers/gpu/drm/drm.ko +drivers/gpu/drm/ttm/ttm.ko +drivers/hid/hid-generic.ko +drivers/hid/hid-hyperv.ko +drivers/hid/hid.ko +drivers/hid/usbhid/usbhid.ko +drivers/hv/* +drivers/hwmon/ibmpowernv.ko +drivers/infiniband/core/ib_addr.ko +drivers/infiniband/core/ib_cm.ko +drivers/infiniband/core/ib_core.ko +drivers/infiniband/core/ib_mad.ko +drivers/infiniband/core/ib_sa.ko +drivers/infiniband/core/iw_cm.ko +drivers/infiniband/core/rdma_cm.ko +drivers/infiniband/ulp/iser/ib_iser.ko +drivers/infiniband/ulp/isert/ib_isert.ko +drivers/input/evbug.ko +drivers/input/gameport/gameport.ko +drivers/input/input-leds.ko +drivers/input/joydev.ko +drivers/input/misc/xen-kbdfront.ko +drivers/input/mouse/psmouse.ko +drivers/input/serio/hyperv-keyboard.ko +drivers/input/serio/serio_raw.ko +drivers/input/serio/serport.ko +drivers/input/touchscreen/usbtouchscreen.ko +drivers/leds/leds-powernv.ko +drivers/md/* +drivers/message/fusion* +drivers/misc/cxl/* +drivers/misc/eeprom/at24.ko +drivers/misc/vmw_balloon.ko +drivers/misc/vmw_vmci/vmw_vmci.ko +drivers/mtd/cmdlinepart.ko +drivers/mtd/devices/powernv_flash.ko +drivers/mtd/ofpart.ko +drivers/net/appletalk/ipddp.ko +drivers/net/bonding/bonding.ko +drivers/net/caif/caif_virtio.ko +drivers/net/dummy.ko +drivers/net/eql.ko +drivers/net/ethernet/8390/8390.ko +drivers/net/ethernet/8390/ne2k-pci.ko +drivers/net/ethernet/amazon/ena/ena.ko +drivers/net/ethernet/amd/pcnet32.ko +drivers/net/ethernet/broadcom/bnx2x/* +drivers/net/ethernet/broadcom/tg3.ko +drivers/net/ethernet/dec/tulip/* +drivers/net/ethernet/emulex/benet/* +drivers/net/ethernet/ibm/* +drivers/net/ethernet/intel/e1000/e1000.ko +drivers/net/ethernet/intel/e1000e/e1000e.ko +drivers/net/ethernet/intel/i40e/* +drivers/net/ethernet/intel/igb/* +drivers/net/ethernet/intel/igbvf/igbvf.ko +drivers/net/ethernet/intel/ixgbe/* +drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko +drivers/net/ethernet/mellanox/* +drivers/net/ethernet/realtek/8139cp.ko +drivers/net/ethernet/realtek/8139too.ko +drivers/net/fddi/* +drivers/net/geneve.ko +drivers/net/hyperv/hv_netvsc.ko +drivers/net/ifb.ko +drivers/net/ipvlan/* +drivers/net/macvlan.ko +drivers/net/macvtap.ko +drivers/net/mii.ko +drivers/net/netconsole.ko +drivers/net/ppp/* +drivers/net/ppp/bsd_comp.ko +drivers/net/slip/* +drivers/net/veth.ko +drivers/net/virtio_net.ko +drivers/net/vmxnet3/vmxnet3.ko +drivers/net/vxlan.ko +drivers/net/xen-netback/* +drivers/net/xen-netfront.ko +drivers/nvme/host/nvme.ko +drivers/nvmem/nvmem_core.ko +drivers/parport/parport.ko +drivers/parport/parport_pc.ko +drivers/pci/host/vmd.ko +drivers/platform/x86/pvpanic.ko +drivers/pps/pps_core.ko +drivers/ptp/ptp.ko +drivers/s390/* +drivers/s390/block/xpram.ko +drivers/scsi/aacraid/* +drivers/scsi/BusLogic.ko +drivers/scsi/cxlflash/* +drivers/scsi/device_handler/scsi_dh_alua.ko +drivers/scsi/device_handler/scsi_dh_emc.ko +drivers/scsi/device_handler/scsi_dh_hp_sw.ko +drivers/scsi/device_handler/scsi_dh_rdac.ko +drivers/scsi/hv_storvsc.ko +drivers/scsi/ibmvscsi/* +drivers/scsi/ipr.ko +drivers/scsi/iscsi_boot_sysfs.ko +drivers/scsi/iscsi_tcp.ko +drivers/scsi/libiscsi.ko +drivers/scsi/libiscsi_tcp.ko +drivers/scsi/libsas/* +drivers/scsi/lpfc/* +drivers/scsi/megaraid/* +drivers/scsi/mpt3sas/* +drivers/scsi/osd/libosd.ko +drivers/scsi/osd/osd.ko +drivers/scsi/qla1280.ko +drivers/scsi/qla2xxx/* +drivers/scsi/raid_class.ko +drivers/scsi/scsi_transport_fc.ko +drivers/scsi/scsi_transport_iscsi.ko +drivers/scsi/scsi_transport_sas.ko +drivers/scsi/scsi_transport_spi.ko +drivers/scsi/sd_mod.ko +drivers/scsi/sr_mod.ko +drivers/scsi/virtio_scsi.ko +drivers/scsi/vmw_pvscsi.ko +drivers/target/target_core*.ko +drivers/tty/serial/jsm/* +drivers/uio/uio.ko +drivers/uio/uio_pdrv_genirq.ko +drivers/usb/host/* +drivers/usb/storage/uas.ko +drivers/usb/storage/usb-storage.ko +drivers/vfio/* +drivers/vhost/* +drivers/video/fbdev/* +drivers/video/vgastate.ko +drivers/virtio/* +drivers/watchdog/softdog.ko +drivers/xen/* +! find sound/core -name oss -prune -o -name *.ko -print +fs/9p/* +fs/aufs/aufs.ko +fs/autofs4/autofs4.ko +fs/binfmt_misc.ko +fs/btrfs/* +fs/cachefiles/cachefiles.ko +fs/ceph/* +fs/cifs/* +fs/configfs/* +fs/dlm/dlm.ko +fs/ecryptfs/* +fs/efivarfs/* +fs/exofs/libore.ko +fs/ext4/* +fs/fat/* +fs/fscache/* +fs/fuse/* +fs/isofs/* +fs/lockd/* +fs/nfs/* +fs/nfs_common/* +fs/nfsd/* +fs/nls/nls_cp437.ko +fs/nls/nls_iso8859-1.ko +fs/overlayfs/* +fs/squashfs/* +fs/udf/* +fs/ufs/* +fs/xfs/* +lib/* +net/6lowpan/* +net/802/* +net/8021q/* +net/9p/* +net/appletalk/* +net/atm/* +net/ax25/* +net/bridge/* +net/can/* +net/ceph/libceph.ko +net/core/* +net/dccp/* +net/decnet/* +net/ieee802154/* +net/ipv4/* +net/ipv6/* +net/ipx/* +net/irda/* +net/key/* +net/lapb/* +net/llc/* +net/netfilter/* +net/netlink/netlink_diag.ko +net/netrom/* +net/openvswitch/* +net/packet/af_packet_diag.ko +net/phonet/* +net/rose/* +net/rxrpc/* +net/sched/* +net/sctp/* +net/sunrpc/auth_gss/auth_rpcgss.ko +net/sunrpc/auth_gss/rpcsec_gss_krb5.ko +net/sunrpc/sunrpc.ko +net/tipc/* +net/unix/unix_diag.ko +net/vmw_vsock/* +net/x25/* +net/xfrm/* +sound/drivers/pcsp/snd-pcsp.ko +sound/pci/snd-ens1370.ko +sound/soundcore.ko +ubuntu/vbox/vboxguest/vboxguest.ko +ubuntu/vbox/vboxsf/vboxsf.ko +zfs/* --- linux-aws-4.15.0.orig/debian.master/control.d/vars.generic +++ linux-aws-4.15.0/debian.master/control.d/vars.generic @@ -0,0 +1,6 @@ +arch="i386 amd64 armhf arm64 ppc64el s390x" +supported="Generic" +target="Geared toward desktop and server systems." +desc="=HUMAN= SMP" +bootloader="grub-pc [i386 amd64 x32] | grub-efi-amd64 [amd64 x32] | grub-efi-ia32 [i386 amd64 x32] | grub [i386 amd64 x32] | lilo [i386 amd64 x32] | flash-kernel [armhf arm64] | grub-ieee1275 [ppc64el]" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, virtualbox-guest-modules [i386 amd64 x32]" --- linux-aws-4.15.0.orig/debian.master/control.d/vars.generic-lpae +++ linux-aws-4.15.0/debian.master/control.d/vars.generic-lpae @@ -0,0 +1,6 @@ +arch="armhf" +supported="Generic LPAE" +target="Geared toward desktop and server systems." +desc="=HUMAN= SMP" +bootloader="flash-kernel [armhf]" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules" --- linux-aws-4.15.0.orig/debian.master/control.d/vars.lowlatency +++ linux-aws-4.15.0/debian.master/control.d/vars.lowlatency @@ -0,0 +1,6 @@ +arch="i386 amd64" +supported="Lowlatency" +target="Geared toward desktop and server systems." +desc="=HUMAN= SMP" +bootloader="grub-pc [i386 amd64 x32] | grub-efi-amd64 [amd64 x32] | grub-efi-ia32 [i386 amd64 x32] | grub [i386 amd64 x32] | lilo [i386 amd64 x32] | flash-kernel [armhf arm64]" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, virtualbox-guest-modules [i386 amd64 x32]" --- linux-aws-4.15.0.orig/debian.master/control.stub.in +++ linux-aws-4.15.0/debian.master/control.stub.in @@ -0,0 +1,160 @@ +Source: SRCPKGNAME +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.9.4.0 +Build-Depends: + debhelper (>= 9), + dh-systemd, + cpio, + kernel-wedge, + kmod , + makedumpfile [amd64 i386] , + libelf-dev , + libnewt-dev , + libiberty-dev , + rsync , + libdw-dev , + libpci-dev , + pkg-config , + flex , + bison , + libunwind8-dev [amd64 arm64 armhf i386 ppc64el] , + liblzma-dev , + openssl , + libssl-dev , + libaudit-dev , + bc , + python-dev , + gawk , + libudev-dev , + autoconf , + automake , + libtool , + uuid-dev , + binutils-dev , + libnuma-dev [amd64 arm64 i386 ppc64el s390x] , +Build-Depends-Indep: + xmlto , + docbook-utils , + ghostscript , + transfig , + bzip2 , + sharutils , + asciidoc , + python-sphinx , + python-sphinx-rtd-theme , +Vcs-Git: git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/zesty +XS-Testsuite: autopkgtest +#XS-Testsuite-Depends: gcc-4.7 binutils + +Package: linux-source-PKGVER +Build-Profiles: +Architecture: all +Section: devel +Priority: optional +Provides: linux-source, linux-source-3 +Depends: ${misc:Depends}, binutils, bzip2, coreutils +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version PKGVER with Ubuntu patches + This package provides the source code for the Linux kernel version + PKGVER. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: SRCPKGNAME-doc +Build-Profiles: +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Description: Linux kernel specific documentation for version PKGVER + This package provides the various documents in the PKGVER kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/SRCPKGNAME-doc/00-INDEX for a list of what is + contained in each file. + +Package: SRCPKGNAME-headers-PKGVER-ABINUM +Build-Profiles: +Architecture: all +Multi-Arch: foreign +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils +Description: Header files related to Linux kernel version PKGVER + This package provides kernel header files for version PKGVER, for sites + that want the latest kernel headers. Please read + /usr/share/doc/SRCPKGNAME-headers-PKGVER-ABINUM/debian.README.gz for details + +Package: SRCPKGNAME-libc-dev +Architecture: i386 amd64 armhf arm64 x32 ppc64el s390x +Depends: ${misc:Depends} +Conflicts: SRCPKGNAME-kernel-headers +Replaces: SRCPKGNAME-kernel-headers +Provides: SRCPKGNAME-kernel-headers, aufs-dev +Multi-Arch: same +Description: Linux Kernel Headers for development + This package provides headers from the Linux kernel. These headers + are used by the installed headers for GNU glibc and other system + libraries. They are NOT meant to be used to build third-party modules for + your kernel. Use SRCPKGNAME-headers-* packages for that. + +Package: SRCPKGNAME-tools-common +Build-Profiles: +Architecture: all +Multi-Arch: foreign +Section: kernel +Priority: optional +Depends: ${misc:Depends}, lsb-release +Description: Linux kernel version specific tools for version PKGVER + This package provides the architecture independent parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version PGKVER. + +Package: SRCPKGNAME-tools-PKGVER-ABINUM +Build-Profiles: +Architecture: i386 amd64 armhf arm64 ppc64el s390x +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel version specific tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version PKGVER-ABINUM on + =HUMAN=. + You probably want to install linux-tools-PKGVER-ABINUM-. + +Package: SRCPKGNAME-cloud-tools-common +Build-Profiles: +Architecture: all +Multi-Arch: foreign +Section: kernel +Priority: optional +Depends: ${misc:Depends} +Description: Linux kernel version specific cloud tools for version PKGVER + This package provides the architecture independent parts for kernel + version locked tools for cloud tools for version PGKVER. + +Package: SRCPKGNAME-cloud-tools-PKGVER-ABINUM +Build-Profiles: +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-cloud-tools-common +Description: Linux kernel version specific cloud tools for version PKGVER-ABINUM + This package provides the architecture dependant parts for kernel + version locked tools for cloud tools for version PKGVER-ABINUM on + =HUMAN=. + You probably want to install linux-cloud-tools-PKGVER-ABINUM-. + --- linux-aws-4.15.0.orig/debian.master/copyright +++ linux-aws-4.15.0/debian.master/copyright @@ -0,0 +1,29 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + 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; version 2 dated June, 1991. + + 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/amd64/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/amd64/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/amd64/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/amd64/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/amd64/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/amd64/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/arm64/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/arm64/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/arm64/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/arm64/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/arm64/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/arm64/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/armhf/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/armhf/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/i386/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/i386/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/i386/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/i386/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/i386/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/i386/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/nic-modules @@ -0,0 +1,14 @@ +e100/d101m_ucode.bin ? +e100/d101s_ucode.bin ? +e100/d102e_ucode.bin ? +bnx2/bnx2-mips-09-6.2.1b.fw ? +bnx2/bnx2-rv2p-06-6.0.15.fw ? +bnx2/bnx2-mips-06-6.2.3.fw ? +bnx2/bnx2-rv2p-09-6.0.17.fw ? +bnx2/bnx2-rv2p-09ax-6.0.17.fw ? +bnx2x/bnx2x-e1h-7.12.30.0.fw ? +bnx2x/bnx2x-e1-7.12.30.0.fw ? +bnx2x/bnx2x-e2-7.12.30.0.fw ? +tigon/tg3_tso5.bin ? +tigon/tg3_tso.bin ? +tigon/tg3.bin ? --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/powerpc/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/powerpc/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/powerpc/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/powerpc/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/powerpc/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/powerpc/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/ppc64el/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/ppc64el/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/ppc64el/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/ppc64el/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/ppc64el/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/ppc64el/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/s390x/README.txt +++ linux-aws-4.15.0/debian.master/d-i/firmware/s390x/README.txt @@ -0,0 +1,4 @@ +# +# Place the names of udeb modules into this directory that require +# runtime firmware. +# --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/s390x/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/s390x/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/s390x/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/s390x/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/firmware/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/firmware/scsi-modules @@ -0,0 +1,3 @@ +qlogic/1040.bin ? +qlogic/12160.bin ? +qlogic/1280.bin ? --- linux-aws-4.15.0.orig/debian.master/d-i/kernel-versions +++ linux-aws-4.15.0/debian.master/d-i/kernel-versions @@ -0,0 +1,16 @@ +# arch version flavour installedname suffix bdep +amd64 - generic - - - + +i386 - generic - - - + +armhf - generic - - - +armhf - generic-lpae - - - + +arm64 - generic - - - + +ppc64el - generic - - - + +s390x - generic - - - + +# Ports +# arch version flavour installedname suffix bdep --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/fb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/fb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/floppy-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/serial-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/serial-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64-virtual/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64-virtual/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/fb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/fb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/firewire-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/firewire-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/floppy-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/input-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/ipmi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/nic-pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/nic-pcmcia-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/nic-usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/pata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/pata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/pcmcia-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/pcmcia-storage-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/pcmcia-storage-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/plip-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/ppp-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/sata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/serial-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/serial-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/speakup-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/speakup-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/amd64/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/amd64/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/input-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/ipmi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/nic-usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/plip-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/ppp-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/sata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/speakup-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/speakup-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/arm64/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/arm64/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/input-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/ipmi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/nic-usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/plip-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/ppp-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/sata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/speakup-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/speakup-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/armhf/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/armhf/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/block-modules @@ -0,0 +1,42 @@ +aoe ? +aten ? +bpck ? +bpck6 ? +cciss ? +comm ? +cpqarray ? +DAC960 ? +dstr ? +epat ? +epia ? +fit2 ? +fit3 ? +friq ? +frpw ? +hpsa ? +hio ? +kbic ? +ktti ? +nbd ? +nvme ? +on20 ? +on26 ? +paride ? +pcd ? +pd ? +pf ? +pg ? +pt ? +sdhci-tegra ? +sx8 ? +umem ? +virtio_blk ? +xen-blkfront ? +mtip32xx ? +mmc_block ? +sdhci ? +sdhci-pci ? +sdhci-acpi ? +tifm_sd ? +dw_mmc ? +dw_mmc_pltfm ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/block-modules.powerpc +++ linux-aws-4.15.0/debian.master/d-i/modules/block-modules.powerpc @@ -0,0 +1,31 @@ +aoe ? +aten ? +bpck ? +bpck6 ? +cciss ? +comm ? +cpqarray ? +DAC960 ? +dstr ? +epat ? +epia ? +fit2 ? +fit3 ? +friq ? +frpw ? +kbic ? +ktti ? +nbd ? +on20 ? +on26 ? +paride ? +pcd ? +pd ? +pf ? +pg ? +ps3disk ? +ps3vram ? +pt ? +sx8 ? +umem ? +virtio_blk ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/crypto-modules @@ -0,0 +1,73 @@ +aesni-intel ? +aes-x86_64 ? +af_alg ? +algif_hash ? +algif_skcipher ? +ansi_cprng ? +anubis ? +arc4 ? +async_memcpy ? +async_pq ? +async_raid6_recov ? +async_tx ? +async_xor ? +authenc ? +authencesn ? +blowfish_common ? +blowfish_generic ? +blowfish-x86_64 ? +camellia ? +cast5 ? +cast6 ? +ccm ? +crc32_generic ? +crc32c_generic ? +crc32-vx_s390 ? +cryptd ? +cryptoloop ? +crypto_null ? +crypto_user ? +ctr ? +cts ? +deflate ? +des_generic ? +fcrypt ? +gcm ? +gf128mul ? +ghash-clmulni-intel ? +ghash-generic ? +khazad ? +lrw ? +lzo ? +md4 ? +michael_mic ? +padlock-aes ? +padlock-sha ? +pcbc ? +pcrypt ? +raid6test ? +rmd128 ? +rmd160 ? +rmd256 ? +rmd320 ? +salsa20_generic ? +salsa20-x86_64 ? +seed ? +seqiv ? +serpent_generic ? +serpent-sse2-x86_64 ? +sha1-ssse3 ? +sha512_generic ? +tcrypt ? +tea ? +tgr192 ? +twofish_common ? +twofish_generic ? +twofish-x86_64 ? +twofish-x86_64-3way ? +vmac ? +wp512 ? +xcbc ? +xor ? +xts ? +zlib ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/dasd-extra-modules.s390x +++ linux-aws-4.15.0/debian.master/d-i/modules/dasd-extra-modules.s390x @@ -0,0 +1 @@ +dasd_diag_mod ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/dasd-modules.s390x +++ linux-aws-4.15.0/debian.master/d-i/modules/dasd-modules.s390x @@ -0,0 +1,3 @@ +dasd_mod ? +dasd_fba_mod ? +dasd_eckd_mod ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/fat-modules @@ -0,0 +1,7 @@ +fat ? +vfat ? + +# Supporting modules ? +nls_cp437 ? +nls_iso8859-1 ? +nls_utf8 ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/fb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/fb-modules @@ -0,0 +1,3 @@ +fbcon ? +vesafb ? +vga16fb ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/firewire-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/firewire-core-modules @@ -0,0 +1,4 @@ +firewire-core ? +firewire-ohci ? +firewire-sbp2 ? +firewire-net ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/floppy-modules @@ -0,0 +1 @@ +floppy ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/fs-core-modules @@ -0,0 +1,6 @@ +ext2 ? +ext4 ? +jfs ? +reiserfs ? +xfs ? +zfs ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/fs-secondary-modules @@ -0,0 +1,5 @@ +btrfs ? +fuse ? +ntfs ? +hfs ? +hfsplus ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/fb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/fb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/floppy-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/serial-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/serial-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386-virtual/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386-virtual/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/fb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/fb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/firewire-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/firewire-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/floppy-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/input-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/ipmi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/irda-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/mouse-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/nic-pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/nic-pcmcia-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/nic-usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/pata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/pata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/pcmcia-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/pcmcia-storage-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/pcmcia-storage-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/plip-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/ppp-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/sata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/serial-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/serial-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/speakup-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/speakup-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/i386/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/i386/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/input-modules @@ -0,0 +1,71 @@ +hid ? +hid-a4tech ? +hid-apple ? +hid-appleir ? +hid-aureal ? +hid-belkin ? +hid-bright ? +hid-cherry ? +hid-chicony ? +hid-corsair ? +hid-cp2112 ? +hid-cypress ? +hid-dell ? +hid-elecom ? +hid-elo ? +hid-ezkey ? +hid-generic ? +hid-gfrm ? +hid-gt683r ? +hid-gyration ? +hid-holtek-kbd ? +hid-holtek-mouse ? +hid-hyperv ? +hid-kensington ? +hid-keytouch ? +hid-kye ? +hid-lcpower ? +hid-lenovo ? +hid-logitech ? +hid-logitech-dj ? +hid-logitech-hidpp ? +hid-magicmouse ? +hid-microsoft ? +hid-monterey ? +hid-multitouch ? +hid-ntrig ? +hid-ortek ? +hid-penmount ? +hid-petalynx ? +hid-picolcd ? +hid-pl ? +hid-plantronics ? +hid-primax ? +hid-rmi ? +hid-roccat ? +hid-roccat-arvo ? +hid-roccat-common ? +hid-roccat-isku ? +hid-roccat-kone ? +hid-roccat-koneplus ? +hid-roccat-konepure ? +hid-roccat-kovaplus ? +hid-roccat-lua ? +hid-roccat-pyra ? +hid-roccat-ryos ? +hid-roccat-savu ? +hid-samsung ? +hid-sony ? +hid-speedlink ? +hid-sunplus ? +hid-thingm ? +hid-tivo ? +hid-topseed ? +hid-twinhan ? +hid-uclogic ? +hid-waltop ? +hid-wiimote ? +hid-xinmo ? +hid-zydacron ? +uhid ? +usbhid ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ipmi-modules @@ -0,0 +1,5 @@ +ipmi_devintf ? +ipmi_msghandler ? +ipmi_poweroff ? +ipmi_si ? +ipmi_watchdog ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/irda-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/irda-modules @@ -0,0 +1,30 @@ +act200l-sir ? +actisys-sir ? +ali-ircc ? +donauboe ? +esi-sir ? +girbil-sir ? +ircomm ? +ircomm-tty ? +irda ? +irda-usb ? +irlan ? +irnet ? +irport ? +irtty-sir ? +kingsun-sir ? +ks959-sir ? +ksdazzle-sir ? +litelink-sir ? +ma600-sir ? +mcp2120-sir ? +mcs7780 ? +nsc-ircc ? +old_belkin-sir ? +sir-dev ? +smsc-ircc2 ? +stir4200 ? +tekram-sir ? +via-ircc ? +vlsi_ir ? +w83977af_ir ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/kernel-image @@ -0,0 +1,31 @@ +ast ? +gpio-pca953x ? +gpio-regulator ? +hibmc-drm ? +i2c-mux ? +i2c-mux-pinctrl ? +i2c-tegra ? +max8907 ? +max8907-regulator ? +nvec ? +nvec_kbd ? +nvec_paz00 ? +nvec_power ? +nvec_ps2 ? +palmas-regulator ? +rtc-em3027 ? +rtc-max8907 ? +rtc-palmas ? +rtc-tps6586x ? +rtc-tps65910 ? +tps51632-regulator ? +tps62360-regulator ? +tps65090-charger ? +tps65090-regulator ? +tps6586x-regulator ? +tps65910-regulator ? +host1x ? +tegra-drm ? +pwm_bl ? +pwm-tegra ? +panel-simple ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/md-modules @@ -0,0 +1,16 @@ +dm-crypt ? +dm-mirror ? +dm-raid ? +dm-snapshot ? +dm-zero ? +faulty ? +linear ? +multipath ? +raid0 ? +raid1 ? +raid10 ? +raid456 ? + +# Extras +dm-raid45 ? +dm-loop ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/message-modules @@ -0,0 +1,9 @@ +mptbase ? +mptctl ? +mptfc ? +mptlan ? +mptsas ? +mpt2sas ? +mpt3sas ? +mptscsih ? +mptspi ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/message-modules.powerpc +++ linux-aws-4.15.0/debian.master/d-i/modules/message-modules.powerpc @@ -0,0 +1,7 @@ +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi --- linux-aws-4.15.0.orig/debian.master/d-i/modules/mouse-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/mouse-modules @@ -0,0 +1,2 @@ +psmouse ? +usbmouse ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/multipath-modules @@ -0,0 +1,4 @@ +dm-multipath ? +dm-round-robin ? +dm-service-time ? +dm-queue-length ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/nfs-modules @@ -0,0 +1,6 @@ +nfs ? +nfs_acl ? +nfsv3 ? +lockd ? +sunrpc ? +cifs ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/nic-modules @@ -0,0 +1,203 @@ +3c359 ? +3c501 ? +3c503 ? +3c505 ? +3c507 ? +3c509 ? +3c515 ? +3c523 ? +3c527 ? +3c59x ? +8139cp ? +8139too ? +82596 ? +abyss ? +ac3200 ? +adm8211 ? +airo ? +airport ? +alx ? +amd8111e ? +amd-xgbe ? +aquantia ? +arcnet ? +arc-rawmode ? +arc-rimi ? +arlan ? +at1700 ? +ath5k ? +ath9k ? +ath9k_htc ? +atl1 ? +atl1c ? +atl1e ? +atl2 ? +atmel ? +atmel_pci ? +b44 ? +bcm87xx ? +be2net ? +bmac ? +bnx2 ? +bnx2x ? +bnxt_en ? +bonding ? +brcmfmac ? +brcmsmac ? +broadcom ? +xgmac ? +cassini ? +ccwgroup ? +com20020 ? +com20020-pci ? +com90io ? +com90xx ? +cs89x0 ? +ctcm ? +de2104x ? +de4x5 ? +de600 ? +de620 ? +defxx ? +depca ? +dl2k ? +dmfe ? +dummy ? +e100 ? +e1000 ? +e1000e ? +e2100 ? +eepro ? +eepro100 ? +eexpress ? +enic ? +epic100 ? +eql ? +es3210 ? +eth16i ? +ewrk3 ? +fealnx ? +forcedeth ? +fsm ? +ibmveth ? +ibmvnic ? +igb ? +ps3_gelic ? +hamachi ? +hermes ? +hfi1 ? +hns_dsaf ? +hns_enet_drv ? +hns_mdio ? +hp ? +hp100 ? +hp-plus ? +i40e ? +i40evf ? +ibmtr ? +ipddp ? +ipw2100 ? +ipw2200 ? +iwl3945 ? +iwl4965 ? +iwl-legacy ? +iwldvm ? +iwlwifi ? +ixgb ? +ixgbe ? +lance ? +lanstreamer ? +lcs ? +lasi_82596 ? +lne390 ? +lp486e ? +mace ? +marvell ? +mdio-thunder ? +mlx4_core ? +mlx4_en ? +mlx5_core ? +mv643xx_eth ? +myri_sbus ? +natsemi ? +ne ? +ne2 ? +ne2k-pci ? +ne3210 ? +netconsole ? +netiucv ? +netxen_nic ? +ni5010 ? +ni52 ? +ni65 ? +nicpf ? +nicvf ? +niu ? +ns83820 ? +olympic ? +orinoco ? +orinoco_pci ? +orinoco_plx ? +orinoco_tmd ? +pcnet32 ? +qcom-emac ? +qede ? +qeth ? +qeth_l2 ? +qeth_l3 ? +qlcnic ? +r815x ? +r8169 ? +rate_control ? +realtek ? +rfc1051 ? +rfc1201 ? +rrunner ? +rt2400 ? +rt2400pci ? +rt2500 ? +rt2500pci ? +rt2800pci ? +rt61pci ? +s2io ? +sfc ? +shaper ? +sis190 ? +sis900 ? +spidernet ? +skfp ? +skge ? +sk98lin ? +sky2 ? +smc9194 ? +smc-ultra ? +smc-ultra32 ? +starfire ? +strip ? +sunbmac ? +sundance ? +sungem ? +sungem_phy ? +sunhme ? +sunlance ? +sunqe ? +sunvnet ? +tg3 ? +tlan ? +tms380tr ? +tmspci ? +tulip ? +tun ? +typhoon ? +uli526x ? +via-rhine ? +via-velocity ? +virtio_net ? +wavelan ? +wd ? +winbond-840 ? +yellowfin ? +znet ? +vmxnet3 ? +xen-netfront ? +xgene-enet ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nic-modules.powerpc +++ linux-aws-4.15.0/debian.master/d-i/modules/nic-modules.powerpc @@ -0,0 +1,152 @@ +3c359 ? +3c501 ? +3c503 ? +3c505 ? +3c507 ? +3c509 ? +3c515 ? +3c523 ? +3c527 ? +3c59x ? +8139cp ? +8139too ? +82596 ? +abyss ? +ac3200 ? +adm8211 ? +airo ? +airport ? +amd8111e ? +arc4 ? +arcnet ? +arc-rawmode ? +arc-rimi ? +arlan ? +at1700 ? +atl1 ? +atl1e ? +atl2 ? +atmel ? +atmel_pci ? +b44 ? +bcm43xx ? +bcm43xx-mac80211 ? +bmac ? +bnx2 ? +bnx2x ? +bonding ? +cassini ? +com20020 ? +com20020-pci ? +com90io ? +com90xx ? +cs89x0 ? +de2104x ? +de4x5 ? +de600 ? +de620 ? +defxx ? +depca ? +dl2k ? +dmfe ? +dummy ? +e100 ? +e1000 ? +e1000e ? +e2100 ? +eepro ? +eepro100 ? +eexpress ? +epic100 ? +eql ? +es3210 ? +eth16i ? +ewrk3 ? +fealnx ? +forcedeth ? +igb ? +hamachi ? +hermes ? +hp ? +hp100 ? +hp-plus ? +ibmtr ? +ibmveth ? +ipddp ? +ipw2100 ? +ipw2200 ? +ipw3945 ? +ixgb ? +lance ? +lanstreamer ? +lasi_82596 ? +lne390 ? +lp486e ? +mace ? +mv643xx_eth ? +myri_sbus ? +natsemi ? +ne ? +ne2 ? +ne2k-pci ? +ne3210 ? +netconsole ? +netxen_nic ? +ni5010 ? +ni52 ? +ni65 ? +niu ? +ns83820 ? +olympic ? +orinoco ? +orinoco_pci ? +orinoco_plx ? +orinoco_tmd ? +pcnet32 ? +ps3_gelic ? +r8169 ? +rate_control ? +rfc1051 ? +rfc1201 ? +rrunner ? +rt2400 ? +rt2500 ? +rt61pci ? +s2io ? +shaper ? +sis190 ? +sis900 ? +spidernet ? +skfp ? +skge ? +sk98lin ? +sky2 ? +smc9194 ? +smc-ultra ? +smc-ultra32 ? +starfire ? +strip ? +sunbmac ? +sundance ? +sungem ? +sungem_phy ? +sunhme ? +sunlance ? +sunqe ? +sunvnet ? +tg3 ? +tlan ? +tms380tr ? +tmspci ? +tulip ? +tun ? +typhoon ? +uli526x ? +via-rhine ? +via-velocity ? +virtio_net ? +wavelan ? +wd ? +winbond-840 ? +yellowfin ? +znet ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nic-pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/nic-pcmcia-modules @@ -0,0 +1,19 @@ +3c574_cs ? +3c589_cs ? +airo_cs ? +atmel_cs ? +axnet_cs ? +com20020_cs ? +fmvj18x_cs ? +ibmtr_cs ? +netwave_cs ? +nmclan_cs ? +orinoco_cs ? +pcnet_cs ? +ray_cs ? +smc91c92_cs ? +wavelan_cs ? +wl3501_cs ? +xirc2ps_cs ? +xircom_cb ? +xircom_tulip_cb ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/nic-shared-modules @@ -0,0 +1,26 @@ +# PHY +8390 ? +mii ? + +# CRC modules +crc-ccitt ? +crc-itu-t ? +libcrc32c ? + +# mac80211 stuff +mac80211 ? +cfg80211 ? + +# rt2x00 lib (since rt2x00 is split across usb/pci/cb +rt2x00lib ? +rt2800lib ? + +# Atheros library (since drivers are split across nic-modules/nic-usb-modules) +ath ? + +# Wireless 802.11 modules +lib80211 ? +cfg80211 ? +lib80211_crypt_ccmp ? +lib80211_crypt_tkip ? +lib80211_crypt_wep ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/nic-usb-modules @@ -0,0 +1,32 @@ +catc ? +kaweth ? +pegasus ? +prism2_usb ? +rtl8150 ? +usbnet ? +zd1211rw ? +zd1201 ? +rt2500usb ? +rt73usb ? +rt2570 ? +rt2800usb ? +rt2x00usb ? +cdc_ether ? +asix ? +cdc_eem ? +cdc_ether ? +cdc-phonet ? +cdc_subset ? +dm9601 ? +gl620a ? +hso ? +int51x1 ? +mcs7830 ? +net1080 ? +plusb ? +rndis_host ? +smsc95xx ? +zaurus ? +carl9170 ? +smsc75xx ? +smsc95xx ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/parport-modules @@ -0,0 +1,2 @@ +parport ? +parport_pc ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/pata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/pata-modules @@ -0,0 +1,47 @@ +pata_ali.ko ? +pata_amd.ko ? +pata_artop.ko ? +pata_atiixp.ko ? +pata_atp867x.ko ? +pata_cmd640.ko ? +pata_cmd64x.ko ? +pata_cs5520.ko ? +pata_cs5530.ko ? +pata_cs5535.ko ? +pata_cs5536.ko ? +pata_cypress.ko ? +pata_efar.ko ? +pata_hpt366.ko ? +pata_hpt37x.ko ? +pata_hpt3x2n.ko ? +pata_hpt3x3.ko ? +pata_isapnp.ko ? +pata_it8213.ko ? +pata_it821x.ko ? +pata_jmicron.ko ? +pata_legacy.ko ? +pata_macio.ko ? +pata_marvell.ko ? +pata_mpiix.ko ? +pata_netcell.ko ? +pata_ninja32.ko ? +pata_ns87410.ko ? +pata_ns87415.ko ? +pata_oldpiix.ko ? +pata_optidma.ko ? +pata_opti.ko ? +pata_pcmcia.ko ? +pata_pdc2027x.ko ? +pata_pdc202xx_old.ko ? +pata_qdi.ko ? +pata_radisys.ko ? +pata_rdc.ko ? +pata_rz1000.ko ? +pata_sc1200.ko ? +pata_sch.ko ? +pata_serverworks.ko ? +pata_sil680.ko ? +pata_sl82c105.ko ? +pata_triflex.ko ? +pata_via.ko ? +pata_winbond.ko ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/pcmcia-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/pcmcia-modules @@ -0,0 +1,8 @@ +i82092 ? +i82365 ? +pcmcia ? +pcmcia_core ? +pd6729 ? +rsrc_nonstatic ? +tcic ? +yenta_socket ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/pcmcia-storage-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/pcmcia-storage-modules @@ -0,0 +1,6 @@ +pata_pcmcia ? +qlogic_cs ? +fdomain_cs ? +aha152x_cs ? +nsp_cs ? +sym53c500_cs ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/plip-modules @@ -0,0 +1 @@ +plip ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/floppy-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/floppy-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/input-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/input-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/ipmi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/ipmi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/message-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/message-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/nic-usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/nic-usb-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/parport-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/parport-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/plip-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/plip-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/ppp-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/sata-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppc64el/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppc64el/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/ppp-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/ppp-modules @@ -0,0 +1,6 @@ +ppp_async ? +ppp_deflate ? +ppp_mppe ? +pppoe ? +pppox ? +ppp_synctty ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/block-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/block-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/crypto-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/crypto-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/dasd-extra-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/dasd-extra-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/dasd-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/dasd-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/fat-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/fat-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/fs-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/fs-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/fs-secondary-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/fs-secondary-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/kernel-image +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/kernel-image @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/md-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/md-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/multipath-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/multipath-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/nfs-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/nfs-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/nic-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/nic-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/nic-shared-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/nic-shared-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/scsi-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/storage-core-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/virtio-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/s390x/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/s390x/vlan-modules @@ -0,0 +1 @@ +#include --- linux-aws-4.15.0.orig/debian.master/d-i/modules/sata-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/sata-modules @@ -0,0 +1,18 @@ +sata_inic162x.ko ? +sata_mv.ko ? +sata_nv.ko ? +sata_promise.ko ? +sata_qstor.ko ? +sata_sil24.ko ? +sata_sil.ko ? +sata_sis.ko ? +sata_svw.ko ? +sata_sx4.ko ? +sata_uli.ko ? +sata_via.ko ? +sata_vsc.ko ? +ahci_platform ? +ahci ? +acard-ahci ? +libahci ? +ahci_xgene ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/scsi-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/scsi-modules @@ -0,0 +1,136 @@ +# SCSI +raid_class ? +scsi_transport_spi ? +scsi_transport_fc ? +scsi_transport_iscsi ? +scsi_transport_sas ? +sr_mod ? +iscsi_tcp ? +libiscsi ? +amiga7xx ? +a3000 ? +a2091 ? +gvp11 ? +mvme147 ? +sgiwd93 ? +cyberstorm ? +cyberstormII ? +blz2060 ? +blz1230 ? +fastlane ? +oktagon_esp_mod ? +atari_scsi ? +mac_scsi ? +mac_esp ? +sun3_scsi ? +mvme16x ? +bvme6000 ? +sim710 ? +advansys ? +pm80xx ? +psi240i ? +BusLogic ? +dpt_i2o ? +u14-34f ? +ultrastor ? +aha152x ? +aha1542 ? +aha1740 ? +aic7xxx_old ? +ips ? +fd_mcs ? +fdomain ? +fnic ? +in2000 ? +g_NCR5380 ? +g_NCR5380_mmio ? +NCR53c406a ? +NCR_D700 ? +NCR_Q720_mod ? +sym53c416 ? +qlogicfas408 ? +qla1280 ? +pas16 ? +seagate ? +seagate ? +t128 ? +dmx3191d ? +dtc ? +zalon7xx ? +eata_pio ? +wd7000 ? +mca_53c9x ? +ibmmca ? +eata ? +dc395x ? +tmscsim ? +megaraid ? +atp870u ? +esp ? +gdth ? +initio ? +a100u2w ? +qlogicpti ? +ide-scsi ? +mesh ? +mac53c94 ? +pluto ? +dec_esp ? +3w-xxxx ? +3w-9xxx ? +ppa ? +imm ? +jazz_esp ? +sun3x_esp ? +fcal ? +lasi700 ? +nsp32 ? +ipr ? +hptiop ? +stex ? +osst ? +sg ? +ch ? +scsi_debug ? +aacraid ? +aic7xxx ? +aic79xx ? +aic94xx ? +arcmsr ? +acornscsi_mod ? +arxescsi ? +cumana_1 ? +cumana_2 ? +ecoscsi ? +oak ? +powertec ? +eesox ? +ibmvscsi ? +ibmvfc ? +libsas ? +lpfc ? +megaraid_mm ? +megaraid_mbox ? +megaraid_sas ? +qla2xxx ? +sym53c8xx ? +qla4xxx ? +mvsas ? +vmw_pvscsi ? +ums-cypress ? +be2iscsi ? +3w-sas ? +isci ? +mlx4_ib ? +mlx5_ib ? +zfcp ? +sd_mod ? +hisi_sas_v2_hw ? + +# device handlers +scsi_dh_alua ? +scsi_dh_emc ? +scsi_dh_rdac ? +scsi_dh_hp_sw ? + +smartpqi ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/scsi-modules.powerpc +++ linux-aws-4.15.0/debian.master/d-i/modules/scsi-modules.powerpc @@ -0,0 +1,118 @@ +# SCSI +raid_class ? +scsi_transport_spi ? +scsi_transport_fc ? +scsi_transport_iscsi ? +scsi_transport_sas ? +iscsi_tcp ? +libiscsi ? +amiga7xx ? +a3000 ? +a2091 ? +gvp11 ? +mvme147 ? +sgiwd93 ? +cyberstorm ? +cyberstormII ? +blz2060 ? +blz1230 ? +fastlane ? +oktagon_esp_mod ? +atari_scsi ? +mac_scsi ? +mac_esp ? +sun3_scsi ? +mvme16x ? +bvme6000 ? +sim710 ? +advansys ? +psi240i ? +BusLogic ? +dpt_i2o ? +u14-34f ? +ultrastor ? +aha152x ? +aha1542 ? +aha1740 ? +aic7xxx_old ? +ips ? +fd_mcs ? +fdomain ? +in2000 ? +g_NCR5380 ? +g_NCR5380_mmio ? +NCR53c406a ? +NCR_D700 ? +NCR_Q720_mod ? +sym53c416 ? +qlogicfas408 ? +qla1280 ? +pas16 ? +seagate ? +seagate ? +t128 ? +dmx3191d ? +dtc ? +zalon7xx ? +eata_pio ? +wd7000 ? +mca_53c9x ? +ibmmca ? +ibmvfc ? +ibmvscsi ? +eata ? +dc395x ? +tmscsim ? +megaraid ? +atp870u ? +esp ? +gdth ? +initio ? +a100u2w ? +qlogicpti ? +ide-scsi ? +mesh ? +mac53c94 ? +pluto ? +dec_esp ? +3w-xxxx ? +3w-9xxx ? +ppa ? +imm ? +jazz_esp ? +sun3x_esp ? +fcal ? +lasi700 ? +nsp32 ? +ipr ? +hptiop ? +stex ? +osst ? +sg ? +ch ? +scsi_debug ? +aacraid ? +aic7xxx ? +aic79xx ? +aic94xx ? +arcmsr ? +acornscsi_mod ? +arxescsi ? +cumana_1 ? +cumana_2 ? +ecoscsi ? +oak ? +powertec ? +eesox ? +ibmvscsic ? +libsas ? +lpfc ? +megaraid_mm ? +megaraid_mbox ? +megaraid_sas ? +qla2xxx ? +sym53c8xx ? +qla4xxx ? +mvsas ? +sr_mod ? +sd_mod ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/serial-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/serial-modules @@ -0,0 +1,4 @@ +generic_serial ? +serial_cs ? +synclink_cs ? +hyperv-keyboard ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/speakup-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/speakup-modules @@ -0,0 +1,16 @@ +speakup ? +speakup_acntpc ? +speakup_acntsa ? +speakup_apollo ? +speakup_audptr ? +speakup_bns ? +speakup_decext ? +speakup_dectlk ? +speakup_dtlk ? +speakup_dummy ? +speakup_keypc ? +speakup_ltlk ? +speakup_soft ? +speakup_spkout ? +speakup_txprt ? +speakup_decpc ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/storage-core-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/storage-core-modules @@ -0,0 +1,15 @@ +# Core stacks +usb-storage ? + +# Block level +ata_piix ? +ata_generic ? + +# Loop modules +cryptoloop ? + +# Needs to be here for better cdrom initrd layout +isofs ? + +# Needed for NVMe disks under VMD PCIe domains +vmd ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/storage-core-modules.powerpc +++ linux-aws-4.15.0/debian.master/d-i/modules/storage-core-modules.powerpc @@ -0,0 +1,13 @@ +# Core stacks +usb-storage ? + +# Block level + +# Loop modules +cryptoloop + +# Needs to be here for better cdrom initrd layout +isofs + +ps3stor_lib ? +ps3rom ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/usb-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/usb-modules @@ -0,0 +1,15 @@ +ehci-hcd ? +isp116x-hcd ? +isp1760 ? +ohci-hcd ? +r8a66597-hcd ? +sl811_cs ? +sl811-hcd ? +u132-hcd ? +uhci-hcd ? +xhci-hcd ? +xhci-plat-hcd ? +ehci-tegra ? +ehci-msm ? +ehci-platform ? +uas ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/virtio-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/virtio-modules @@ -0,0 +1,11 @@ +virtio_balloon ? +virtio_pci ? +virtio_ring ? +virtio-rng ? +virtio_scsi ? +hv_vmbus ? +hv_utils ? +hv_netvsc ? +hv_mouse ? +hv_storvsc ? +hv_balloon ? --- linux-aws-4.15.0.orig/debian.master/d-i/modules/vlan-modules +++ linux-aws-4.15.0/debian.master/d-i/modules/vlan-modules @@ -0,0 +1,3 @@ +slp ? +garp ? +8021q ? --- linux-aws-4.15.0.orig/debian.master/d-i/package-list +++ linux-aws-4.15.0/debian.master/d-i/package-list @@ -0,0 +1,208 @@ +Package: kernel-image +Provides: ext3-modules, ext4-modules, squashfs-modules +Provides_amd64: efi-modules, ext3-modules, ext4-modules, squashfs-modules +Provides_i386: efi-modules, ext3-modules, ext4-modules, squashfs-modules +Provides_ppc64el: ext3-modules, ext4-modules, fat-modules, squashfs-modules +Provides_s390x: ext3-modules, ext4-modules, ppp-modules, squashfs-modules +Description: kernel image and system map + +Package: dasd-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: DASD storage support + +Package: dasd-extra-modules +Depends: dasd-modules +Priority: extra +Description: DASD storage support -- extras + +Package: fat-modules +Depends: kernel-image +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: fb-modules +Depends: kernel-image +Priority: standard +Description: Framebuffer modules + +Package: firewire-core-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: floppy-modules +Depends: kernel-image +Priority: standard +Description: Floppy driver support + +Package: fs-core-modules +Depends: kernel-image +Priority: standard +Provides: ext2-modules, jfs-modules, reiserfs-modules, xfs-modules +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules +Depends: kernel-image, fat-modules +Priority: standard +Provides: btrfs-modules, ntfs-modules, hfs-modules +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: input-modules +Depends: kernel-image, usb-modules +Priority: standard +Description: Support for various input methods + +Package: irda-modules +Depends: kernel-image, nic-shared-modules +Priority: standard +Description: Support for Infrared protocols + +Package: md-modules +Depends: kernel-image +Priority: standard +Provides: crypto-dm-modules +Description: Multi-device support (raid, device-mapper, lvm) + +Package: nic-modules +Depends: kernel-image, nic-shared-modules, virtio-modules +Priority: standard +Description: Network interface support + +Package: nic-pcmcia-modules +Depends: kernel-image, nic-shared-modules, nic-modules +Priority: standard +Description: PCMCIA network interface support + +Package: nic-usb-modules +Depends: kernel-image, nic-shared-modules, usb-modules +Priority: standard +Description: USB network interface support + +Package: nic-shared-modules +Depends: kernel-image, crypto-modules +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: parport-modules +Depends: kernel-image +Priority: standard +Description: Parallel port support + +Package: pata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: PATA support modules + +Package: pcmcia-modules +Depends: kernel-image +Priority: standard +Description: PCMCIA Modules + +Package: pcmcia-storage-modules +Depends: kernel-image, scsi-modules +Priority: standard +Description: PCMCIA storage support + +Package: plip-modules +Depends: kernel-image, nic-shared-modules, parport-modules +Priority: standard +Description: PLIP (parallel port) networking support + +Package: ppp-modules +Depends: kernel-image, nic-shared-modules, serial-modules +Priority: standard +Description: PPP (serial port) networking support + +Package: sata-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SATA storage support + +Package: scsi-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: SCSI storage support + +Package: serial-modules +Depends: kernel-image +Priority: standard +Description: Serial port support + +Package: storage-core-modules +Depends: kernel-image +Priority: standard +Provides: loop-modules +Description: Core storage support + Includes core SCSI, LibATA, USB-Storage. Also includes related block + devices for CD, Disk and Tape medium (and IDE Floppy). + +Package: usb-modules +Depends: kernel-image, storage-core-modules +Priority: standard +Description: Core USB support + +Package: nfs-modules +Priority: standard +Depends: kernel-image +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: block-modules +Priority: standard +Provides: nbd-modules +Depends: kernel-image, storage-core-modules, parport-modules, virtio-modules +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules +Priority: standard +Depends: kernel-image, storage-core-modules, scsi-modules +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: crypto-modules +Priority: extra +Depends: kernel-image +Description: crypto modules + This package contains crypto modules. + +Package: virtio-modules +Priority: standard +Depends: kernel-image +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: socket-modules +Depends: kernel-image +Priority: standard +Description: Unix socket support + +Package: mouse-modules +Depends: kernel-image, input-modules, usb-modules +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: vlan-modules +Depends: kernel-image +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. + +Package: ipmi-modules +Depends: kernel-image +Priority: standard +Description: ipmi modules + +Package: multipath-modules +Depends: kernel-image +Priority: extra +Description: DM-Multipath support + This package contains modules for device-mapper multipath support. + --- linux-aws-4.15.0.orig/debian.master/etc/getabis +++ linux-aws-4.15.0/debian.master/etc/getabis @@ -0,0 +1,17 @@ +repo_list=( + "http://archive.ubuntu.com/ubuntu/pool/main/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/main/l/linux" + "http://archive.ubuntu.com/ubuntu/pool/universe/l/linux" + "http://ports.ubuntu.com/ubuntu-ports/pool/universe/l/linux" + "http://ppa.launchpad.net/canonical-kernel-team/ppa/ubuntu/pool/main/l/linux" +) + +package_prefixes linux-image linux-image-extra + +getall armhf generic +getall armhf generic-lpae +getall amd64 generic lowlatency +getall i386 generic lowlatency +getall arm64 generic +getall ppc64el generic +getall s390x generic --- linux-aws-4.15.0.orig/debian.master/etc/kernelconfig +++ linux-aws-4.15.0/debian.master/etc/kernelconfig @@ -0,0 +1,7 @@ +if [ "$variant" = "ports" ]; then + archs="" + family='ports' +else + archs="amd64 i386 armhf arm64 ppc64el s390x" + family='ubuntu' +fi --- linux-aws-4.15.0.orig/debian.master/modprobe.d/common.conf +++ linux-aws-4.15.0/debian.master/modprobe.d/common.conf @@ -0,0 +1,3 @@ +# LP:1434842 -- disable OSS drivers by default to allow pulseaudio to emulate +blacklist snd-mixer-oss +blacklist snd-pcm-oss --- linux-aws-4.15.0.orig/debian.master/reconstruct +++ linux-aws-4.15.0/debian.master/reconstruct @@ -0,0 +1,28 @@ +# Recreate any symlinks created since the orig. +# Remove any files deleted from the orig. +chmod +x 'scripts/kmsg-doc' +chmod +x 'spl/autogen.sh' +chmod +x 'spl/cmd/splslab/splslab.py' +chmod +x 'spl/config/compile' +chmod +x 'spl/config/config.guess' +chmod +x 'spl/config/config.sub' +chmod +x 'spl/config/depcomp' +chmod +x 'spl/config/install-sh' +chmod +x 'spl/config/missing' +chmod +x 'spl/configure' +chmod +x 'spl/copy-builtin' +chmod +x 'spl/cp' +chmod +x 'spl/module/spl/spl-kmem.c' +chmod +x 'spl/scripts/check.sh' +chmod +x 'spl/scripts/dkms.mkconf' +chmod +x 'spl/scripts/dkms.postbuild' +chmod +x 'ubuntu/vbox-update' +chmod +x 'zfs/autogen.sh' +chmod +x 'zfs/config/compile' +chmod +x 'zfs/config/config.guess' +chmod +x 'zfs/config/config.sub' +chmod +x 'zfs/config/install-sh' +chmod +x 'zfs/config/missing' +chmod +x 'zfs/configure' +chmod +x 'zfs/cp' +exit 0 --- linux-aws-4.15.0.orig/debian.master/rules.d/amd64.mk +++ linux-aws-4.15.0/debian.master/rules.d/amd64.mk @@ -0,0 +1,21 @@ +human_arch = 64 bit x86 +build_arch = x86 +header_arch = $(build_arch) +defconfig = defconfig +flavours = generic lowlatency +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +vdso = vdso_install +no_dumpfile = true +uefi_signed = true +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true +do_tools_x86 = true +do_tools_hyperv = true +do_extras_package = true +do_tools_common = true +do_tools_acpidbg = true +do_zfs = true --- linux-aws-4.15.0.orig/debian.master/rules.d/arm64.mk +++ linux-aws-4.15.0/debian.master/rules.d/arm64.mk @@ -0,0 +1,20 @@ +human_arch = ARMv8 +build_arch = arm64 +header_arch = arm64 +defconfig = defconfig +flavours = generic +build_image = Image.gz +kernel_file = arch/$(build_arch)/boot/Image.gz +install_file = vmlinuz +no_dumpfile = true + +loader = grub +vdso = vdso_install + +do_extras_package = true +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true + +do_dtbs = true +do_zfs = true --- linux-aws-4.15.0.orig/debian.master/rules.d/armhf.mk +++ linux-aws-4.15.0/debian.master/rules.d/armhf.mk @@ -0,0 +1,17 @@ +human_arch = ARM (hard float) +build_arch = arm +header_arch = arm +defconfig = defconfig +flavours = generic generic-lpae +build_image = zImage +kernel_file = arch/$(build_arch)/boot/zImage +install_file = vmlinuz +no_dumpfile = true + +loader = grub + +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true + +do_dtbs = true --- linux-aws-4.15.0.orig/debian.master/rules.d/i386.mk +++ linux-aws-4.15.0/debian.master/rules.d/i386.mk @@ -0,0 +1,17 @@ +human_arch = 32 bit x86 +build_arch = x86 +header_arch = $(build_arch) +defconfig = defconfig +flavours = generic lowlatency +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +vdso = vdso_install +no_dumpfile = true +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true +do_tools_x86 = true +do_tools_hyperv = true +do_extras_package = true --- linux-aws-4.15.0.orig/debian.master/rules.d/ppc64el.mk +++ linux-aws-4.15.0/debian.master/rules.d/ppc64el.mk @@ -0,0 +1,19 @@ +human_arch = PowerPC 64el +build_arch = powerpc +header_arch = $(build_arch) +defconfig = pseries_le_defconfig +flavours = generic +build_image = vmlinux.strip +kernel_file = arch/powerpc/boot/vmlinux.strip +install_file = vmlinux +no_dumpfile = true +vdso = vdso_install +loader = grub +do_extras_package = true + +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true + +#do_flavour_image_package = false +do_zfs = true --- linux-aws-4.15.0.orig/debian.master/rules.d/s390x.mk +++ linux-aws-4.15.0/debian.master/rules.d/s390x.mk @@ -0,0 +1,19 @@ +human_arch = System 390x +build_arch = s390 +header_arch = $(build_arch) +defconfig = defconfig +flavours = generic +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz + +vdso = vdso_install +no_dumpfile = true + +do_extras_package = true + +do_tools_usbip = true +do_tools_cpupower = true +do_tools_perf = true + +do_zfs = true --- linux-aws-4.15.0.orig/debian.master/rules.d/x32.mk +++ linux-aws-4.15.0/debian.master/rules.d/x32.mk @@ -0,0 +1,14 @@ +human_arch = 64 bit x86 (32 bit userspace) +build_arch = x86 +header_arch = $(build_arch) +defconfig = defconfig +flavours = +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +vdso = vdso_install +no_dumpfile = true +uefi_signed = true + +do_flavour_image_package = false --- linux-aws-4.15.0.orig/debian/changelog +++ linux-aws-4.15.0/debian/changelog @@ -0,0 +1,13 @@ +linux-aws (4.15.0-1001.1) bionic; urgency=medium + + [ Kamal Mostafa ] + + * Initial linux-aws packaging based on linux (4.15.0-11.12) bionic + + -- Kamal Mostafa Fri, 23 Feb 2018 13:45:39 -0800 + +linux-aws (4.15.0-1000.0) bionic; urgency=medium + + * Empty entry + + -- Kamal Mostafa Wed, 21 Feb 2018 14:36:49 -0800 --- linux-aws-4.15.0.orig/debian/cloud-tools/hv_get_dhcp_info +++ linux-aws-4.15.0/debian/cloud-tools/hv_get_dhcp_info @@ -0,0 +1,55 @@ +#!/bin/bash + +# This example script retrieves the DHCP state of a given interface. +# In the interest of keeping the KVP daemon code free of distro specific +# information; the kvp daemon code invokes this external script to gather +# DHCP setting for the specific interface. +# +# Input: Name of the interface +# +# Output: The script prints the string "Enabled" to stdout to indicate +# that DHCP is enabled on the interface. If DHCP is not enabled, +# the script prints the string "Disabled" to stdout. +# +# Each Distro is expected to implement this script in a distro specific +# fashion. + +#set -x + +IF_FILE="/etc/network/interfaces" +NMCMD="nmcli" + +function checknetworkmanager { + #Assumes if $NMCMD exists, inteface exists and interface is not + # in $IF_FILE then dhcp is being used by NM + if hash $NMCMD >/dev/null 2>&1 ; then + if $NMCMD dev status |grep -q $1 ; then + echo "Enabled" + else + echo "Disabled" + fi + else + #Give up + echo "Disabled" + fi +} + +if [ -z $1 ] ; then echo "Disabled"; exit; fi + +if [ -e $IF_FILE ]; then + if grep -v -e "^#" $IF_FILE|grep -q $1 ; then + #interface exists so + if grep -q -e $1\.\*dhcp $IF_FILE; then + echo "Enabled"; exit; + else + echo "Disabled"; exit; + fi + else + checknetworkmanager $1 + exit + fi +else + checknetworkmanager $1 + exit +fi + --- linux-aws-4.15.0.orig/debian/cloud-tools/hv_get_dns_info +++ linux-aws-4.15.0/debian/cloud-tools/hv_get_dns_info @@ -0,0 +1,13 @@ +#!/bin/bash + +# This example script parses /etc/resolv.conf to retrive DNS information. +# In the interest of keeping the KVP daemon code free of distro specific +# information; the kvp daemon code invokes this external script to gather +# DNS information. +# This script is expected to print the nameserver values to stdout. +# Each Distro is expected to implement this script in a distro specific +# fashion. For instance on Distros that ship with Network Manager enabled, +# this script can be based on the Network Manager APIs for retrieving DNS +# entries. + +cat /etc/resolv.conf 2>/dev/null | awk '/^nameserver/ { print $2 }' --- linux-aws-4.15.0.orig/debian/cloud-tools/hv_set_ifconfig +++ linux-aws-4.15.0/debian/cloud-tools/hv_set_ifconfig @@ -0,0 +1,288 @@ +#!/usr/bin/python3 +# +# hv_set_ifconfig -- take the hv_kvp_daemon generated configuration +# file and apply it to the Ubuntu configuration. +# + +# CONFIG example: +# HWADDR=11:22:33:44:55:66 +# DEVICE=foo1 +# DHCP=yes + +# CONFIG example: +# HWADDR=11:22:33:44:55:66 +# DEVICE=foo1 +# IPADDR=192.168.99.10 +# GATEWAY=192.168.99.1 +# DNS1=192.168.88.250 +# IPADDR2=192.168.99.11 +# IPV6ADDR=2001:DB8:99::10 +# IPV6NETMASK=64 +# IPV6_DEFAULTGW=2001:DB8:99::10 + +# set interfaces in hv_kvp_daemon style +import fileinput +import sys +import errno +import os +import shutil +import tempfile +import subprocess + +if_filename="/etc/network/interfaces" + +# Drop our output (XXX?) +sys.stdout = open(os.devnull, 'w') +sys.stderr = open(os.devnull, 'w') + +# Confirm we can open the network configuration. +try: + if_file=open(if_filename,"r+") +except IOError as e: + exit(e.errno) +else: + if_file.close() + +# Usage: hv_set_ifconfig +if len(sys.argv) != 2 : + exit(errno.EINVAL) + +# +# Here is the format of the ip configuration file: +# +# HWADDR=macaddr +# DEVICE=interface name +# BOOTPROTO= (where is "dhcp" if DHCP is configured +# or "none" if no boot-time protocol should be used) +# +# IPADDR0=ipaddr1 +# IPADDR1=ipaddr2 +# IPADDRx=ipaddry (where y = x + 1) +# +# NETMASK0=netmask1 +# NETMASKx=netmasky (where y = x + 1) +# +# GATEWAY=ipaddr1 +# GATEWAYx=ipaddry (where y = x + 1) +# +# DNSx=ipaddrx (where first DNS address is tagged as DNS1 etc) +# +# IPV6 addresses will be tagged as IPV6ADDR, IPV6 gateway will be +# tagged as IPV6_DEFAULTGW and IPV6 NETMASK will be tagged as +# IPV6NETMASK. +# + +kvp=dict(line.strip().split("=") for line in fileinput.input()) + +# Setting the hwaddress to something azure is not expecting is fatal +# to networking. +if not "HWADDR" in kvp : + exit(errno.EPROTO) + +# Confirm we have a device specified. +if not "DEVICE" in kvp : + exit(1) + +autolist = [] +output=[] +basename=kvp["DEVICE"] + +# DNS entries will go with the first interface and there can be a max +# of three. These will be emitted with the first interface. +dns = [] +for count in (1, 2, 3): + key = "DNS" + str(count) + if key in kvp: + dns += [kvp[key]] +dns_emitted = False + +# IPV4 may either be dhcp or static. +if ("DHCP" in kvp and kvp["DHCP"] == "yes") or \ + ("BOOTPROTO" in kvp and kvp["BOOTPROTO"] == "dhcp"): + autolist.append(basename) + output += ["iface " + basename + " inet dhcp"] + output += [""] +else: + # Matchup the interface specific lines + + # No real max for the number of interface + aliases ... + # only required is the address (but mate everything up that comes in. + + # IPv4 -- ensure we sort by numeric suffixes. + v4names = [ int(name[6:]) for name in kvp.keys() if name.startswith("IPADDR") ] + v4names.sort() + + for if_count in v4names: + ifname = basename + which = str(if_count) + + if if_count: + ifname += ":" + str(if_count) + which_gw = which + else: + which_gw = "" + + if not ifname in autolist: + autolist += [ifname] + + output += [ "iface " + ifname + " inet static" ] + output += [ "\t" + "address " + kvp["IPADDR" + which] ] + if "NETMASK" + which in kvp: + output += [ "\tnetmask " + kvp["NETMASK" + which] ] + if "GATEWAY" + which_gw in kvp: + output += ["\tgateway " + kvp["GATEWAY" + which_gw]] + + if not dns_emitted: + dns_emitted = True + output += ["\tdns-nameservers " + ' '.join(dns)] + output += [""] + +# IPv6 requires a netmask +# If an ipv6 exists, you'll want to turn off /proc/sys/net/ipv6/conf/all/autoconf with +# echo 0 > /proc/sys/net/ipv6/conf/all/autoconf +v6names = [ int(name[8:]) for name in kvp.keys() if name.startswith("IPV6ADDR") ] +v6names.sort() + +for if6_count in v6names: + ifname = basename + which = str(if6_count) + + if if6_count: + ifname += ":" + str(if6_count) + which_gw = which + else: + which_gw = "" + + if not ifname in autolist: + autolist += [ifname] + + if "IPV6NETMASK" + which in kvp: + output += [ "iface " + ifname + " inet6 static"] + output += [ "\taddress " + kvp["IPV6ADDR" + which]] + output += [ "\tnetmask " + kvp["IPV6NETMASK" + which]] + if "IPV6_DEFAULTGW" + which_gw in kvp: + output += [ "\tgateway " + kvp["IPV6_DEFAULTGW" + which_gw] ] + if not dns_emitted: + dns_emitted = True + output += ["\tdns-nameservers " + ' '.join(dns)] + output += [""] + +# Mark this new interface for automatic up. +if len(autolist): + output = ["auto "+" ".join(autolist)] + output + +print("===================================") +print(output) +print("===================================") + + +# Time to clean out the existing interface file + +# Markers. +start_mark = "# The following stanza(s) added by hv_set_ifconfig" +end_mark = "#End of hv_set_ifconfig stanzas" + +f=open(if_filename,"r") +flines=f.readlines() +f.close() +newfile=[] +pitchstanza=0 +inastanza=0 +stanza=[] +prev_line=None +for line in flines: + if line.startswith("auto"): + if inastanza: + if not pitchstanza: + newfile.extend(stanza) + stanza=[] + inastanza=0 + newline="" + autoline=line.strip().split(" ") + for word in autoline: + if (not word == basename) and (not word.startswith(basename+":")): + newline+=word + " " + newline = newline.strip() + if not newline == "auto": + newfile += [newline.strip()] + elif line.startswith(("iface","mapping","source")): + '''Read a stanza''' + '''A Stanza can also start with allow- ie allow-hotplug''' + if inastanza: + if not pitchstanza: + newfile.extend(stanza) + stanza=[] + inastanza=1 + pitchstanza=0 + autoline=line.strip().split(" ") + for word in autoline: + if (word == basename) or (word.startswith(basename+":")): + pitchstanza=1 + if not pitchstanza: + stanza+=[line.strip()] + elif line.strip() in (start_mark, end_mark): + if inastanza: + if not pitchstanza: + newfile.extend(stanza) + stanza=[] + inastanza = 0 + pitchstanza = 0 + # Deduplicate markers. + if line != prev_line: + newfile += [line.strip()] + else: + if inastanza: + if not pitchstanza: + stanza+=[line.strip()] + else: + if not pitchstanza: + newfile += [line.strip()] + prev_line=line + +# Include pending stanza if any. +if inastanza and not pitchstanza: + newfile.extend(stanza) + + +def emit(line): + print(line) + output = line + "\n" + os.write(fd, output.encode('utf-8')) + +# Insert the new output at the end and inside the existing markers if found. +emitted = False +fd, path = tempfile.mkstemp() +for line in newfile: + if line == end_mark: + emit("\n".join(output)) + emitted = True + emit(line) +if not emitted: + emit(start_mark) + emit("\n".join(output)) + emit(end_mark) +os.close(fd) + +shutil.copy(path,if_filename) +os.chmod(if_filename,0o644) + +#print("TMPFILE is at: " + path) +#print("Copied file is at: " + if_filename) + +try: + retcode = subprocess.call("ifdown "+basename , shell=True) + if retcode < 0: + print("Child was terminated by signal", -retcode, file=sys.stderr) + else: + print("Child returned", retcode, file=sys.stderr) +except OSError as e: + print("Execution failed:", e, file=sys.stderr) + +try: + retcode = subprocess.call("ifup "+basename , shell=True) + if retcode < 0: + print("Child was terminated by signal", -retcode, file=sys.stderr) + else: + print("Child returned", retcode, file=sys.stderr) +except OSError as e: + print("Execution failed:", e, file=sys.stderr) --- linux-aws-4.15.0.orig/debian/commit-templates/bumpabi +++ linux-aws-4.15.0/debian/commit-templates/bumpabi @@ -0,0 +1,3 @@ +UBUNTU: Bump ABI + +Ignore: yes --- linux-aws-4.15.0.orig/debian/commit-templates/config-updates +++ linux-aws-4.15.0/debian/commit-templates/config-updates @@ -0,0 +1,15 @@ +# +# This template is used for commit messages that don't need to +# show up in debian/changelog. Administrative stuff like config +# updates, ABI bumps, etc. Setting 'Ignore: yes' prevents +# 'debian/rules insertchanges' from inserting this commit meesage +# as a changelog entry. +# +# Please give a one-line description of the config change followed +# by a detailed explanation if necessary + +UBUNTU: [Config] XXXX + +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-aws-4.15.0.orig/debian/commit-templates/external-driver +++ linux-aws-4.15.0/debian/commit-templates/external-driver @@ -0,0 +1,20 @@ +# Ubuntu external driver commit. +# +# NOTE: This gets reformatted for README.Ubuntu-External-Drivers and +# debian/changelog. +# +# This is only needed when a driver is added, updated or removed. It is +# not needed when patches or fixes are applied to the driver. If the +# driver is being removed, add the line: +# +# Removing: yes +# +# to the commit, and you can remove all other tags (except UBUNTU:). +# +UBUNTU: + +ExternalDriver: +Description: +Url: +Mask: +Version: --- linux-aws-4.15.0.orig/debian/commit-templates/missing-modules +++ linux-aws-4.15.0/debian/commit-templates/missing-modules @@ -0,0 +1,3 @@ +UBUNTU: build/modules: Add modules that have intentionally gone missing + +Ignore: yes --- linux-aws-4.15.0.orig/debian/commit-templates/newrelease +++ linux-aws-4.15.0/debian/commit-templates/newrelease @@ -0,0 +1,3 @@ +UBUNTU: Start new release + +Ignore: yes --- linux-aws-4.15.0.orig/debian/commit-templates/sauce-patch +++ linux-aws-4.15.0/debian/commit-templates/sauce-patch @@ -0,0 +1,40 @@ +# Ubuntu commit template. +# +# NOTE: This gets reformatted for debian/changelog +# +# +# SAUCE refers to the fact that this patch might not go upstream, but we need to +# carry it to successive releases. In most cases you DONOT want to use this +# template. +# +# An example of a SAUCE patch is the ACPI DSDT-in-initramfs patch which has been +# refused upstream, but still provides useful functionality to users with broken +# BIOSes. +# +#------------------------------------------------------------------------- +# +# The initial UBUNTU is a flag that this is an Ubuntu commit. It will be +# referenced to the Author in the debian/changelog entry. +# +# The text following is the short message that will be placed in the +# changelog. Extra text on the following lines will be ignored, but left +# in the git commit. Lines with # will be ignored in the commit. +# +# OriginalAuthor allows for alternate attribution. +# +# OriginalLocation allows for a URL or description of where the patch came +# from. +# +# BugLink is a URL to a Malone bug. +# +# Ignore: yes will keep this commit from showing up in the changelog. +# +UBUNTU: SAUCE: + + + +# OriginalAuthor: +# OriginalLocation: +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-aws-4.15.0.orig/debian/commit-templates/upstream-patch +++ linux-aws-4.15.0/debian/commit-templates/upstream-patch @@ -0,0 +1,27 @@ +# Ubuntu commit template. +# +# NOTE: This gets reformatted for debian/changelog +# +# The initial UBUNTU is a flag that this is an Ubuntu commit. It will be +# referenced to the Author in the debian/changelog entry. +# +# The text following is the short message that will be placed in the +# changelog. Extra text on the following lines will be ignored, but left +# in the git commit. Lines with # will be ignored in the commit. +# +# OriginalAuthor allows for alternate attribution. +# +# OriginalLocation allows for a URL or description of where the patch came +# from. +# +# BugLink is a URL to a Malone bug. +# +# Ignore: yes will keep this commit from showing up in the changelog. +# +UBUNTU: [Upstream] + +# OriginalAuthor: +# OriginalLocation: +# BugLink: http://bugs.launchpad.net/bugs/ +# Ignore: yes +# Other text below here. --- linux-aws-4.15.0.orig/debian/compat +++ linux-aws-4.15.0/debian/compat @@ -0,0 +1 @@ +9 --- linux-aws-4.15.0.orig/debian/control +++ linux-aws-4.15.0/debian/control @@ -0,0 +1,201 @@ +Source: linux-aws +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.9.4.0 +Build-Depends: + debhelper (>= 9), + dh-systemd, + cpio, + kernel-wedge, + kmod , + makedumpfile [amd64 i386] , + libelf-dev , + libnewt-dev , + libiberty-dev , + rsync , + libdw-dev , + libpci-dev , + pkg-config , + flex , + bison , + libunwind8-dev [amd64 arm64 armhf i386 ppc64el] , + liblzma-dev , + openssl , + libssl-dev , + libaudit-dev , + bc , + python-dev , + gawk , + libudev-dev , + autoconf , + automake , + libtool , + uuid-dev , + binutils-dev , + libnuma-dev [amd64 arm64 i386 ppc64el s390x] , +Build-Depends-Indep: + xmlto , + docbook-utils , + ghostscript , + transfig , + bzip2 , + sharutils , + asciidoc , + python-sphinx , + python-sphinx-rtd-theme , +Vcs-Git: git://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-aws/+git/bionic master +XS-Testsuite: autopkgtest +#XS-Testsuite-Depends: gcc-4.7 binutils + +Package: linux-aws-headers-4.15.0-1001 +Build-Profiles: +Architecture: all +Multi-Arch: foreign +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils +Breaks: iscsitarget-dkms (<< 1.4.20.3+svn502-2ubuntu4.4) +Description: Header files related to Linux kernel version 4.15.0 + This package provides kernel header files for version 4.15.0, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-aws-headers-4.15.0-1001/debian.README.gz for details + +Package: linux-aws-tools-4.15.0-1001 +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel version specific tools for version 4.15.0-1001 + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version 4.15.0-1001 on + 64 bit x86. + You probably want to install linux-tools-4.15.0-1001-. + +Package: linux-aws-cloud-tools-4.15.0-1001 +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-cloud-tools-common +Description: Linux kernel version specific cloud tools for version 4.15.0-1001 + This package provides the architecture dependant parts for kernel + version locked tools for cloud tools for version 4.15.0-1001 on + 64 bit x86. + You probably want to install linux-cloud-tools-4.15.0-1001-. + + +Package: linux-image-4.15.0-1001-aws +Build-Profiles: +Architecture: amd64 +Section: kernel +Priority: optional +Provides: linux-image, fuse-module, aufs-dkms, ${linux:rprovides} +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod +Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub | lilo, initramfs-tools | linux-initramfs-tool +Breaks: flash-kernel (<< 3.0~rc.4ubuntu64) [arm64] +Suggests: fdutils, linux-aws-doc-4.15.0 | linux-aws-source-4.15.0, linux-aws-tools, linux-headers-4.15.0-1001-aws +Description: Linux kernel image for version 4.15.0 on 64 bit x86 SMP + This package contains the Linux kernel image for version 4.15.0 on + 64 bit x86 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports AWS processors. + . + Geared toward Amazon Web Services (AWS) systems. + . + You likely do not want to install this package directly. Instead, install + the linux-aws meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-image-extra-4.15.0-1001-aws +Build-Profiles: +Architecture: amd64 +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-4.15.0-1001-aws, crda | wireless-crda +Description: Linux kernel extra modules for version 4.15.0 on 64 bit x86 SMP + This package contains the Linux kernel extra modules for version 4.15.0 on + 64 bit x86 SMP. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports AWS processors. + . + Geared toward Amazon Web Services (AWS) systems. + . + You likely do not want to install this package directly. Instead, install + the linux-aws meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-4.15.0-1001-aws +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-aws-headers-4.15.0-1001, ${shlibs:Depends} +Provides: linux-headers, linux-headers-3.0 +Description: Linux kernel headers for version 4.15.0 on 64 bit x86 SMP + This package provides kernel header files for version 4.15.0 on + 64 bit x86 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-4.15.0-1001/debian.README.gz for details. + +Package: linux-image-4.15.0-1001-aws-dbgsym +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 4.15.0 on 64 bit x86 SMP + This package provides a kernel debug image for version 4.15.0 on + 64 bit x86 SMP. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. + +Package: linux-tools-4.15.0-1001-aws +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-aws-tools-4.15.0-1001 +Description: Linux kernel version specific tools for version 4.15.0-1001 + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version 4.15.0-1001 on + 64 bit x86. + +Package: linux-cloud-tools-4.15.0-1001-aws +Build-Profiles: +Architecture: amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-aws-cloud-tools-4.15.0-1001 +Description: Linux kernel version specific cloud tools for version 4.15.0-1001 + This package provides the architecture dependant parts for kernel + version locked tools for cloud for version 4.15.0-1001 on + 64 bit x86. + +Package: linux-udebs-aws +Build-Profiles: +XC-Package-Type: udeb +Section: debian-installer +Architecture: amd64 +Depends: ${udeb:Depends} +Description: Metapackage depending on kernel udebs + This package depends on the all udebs that the kernel build generated, + for easier version and migration tracking. + --- linux-aws-4.15.0.orig/debian/control-scripts/extra-post +++ linux-aws-4.15.0/debian/control-scripts/extra-post @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +case "$0::$1" in +*.postinst::configure|*.postrm::remove) + depmod -a -F /boot/System.map-=V =V || true + for dir in "/etc/kernel/postinst.d" "/etc/kernel/postinst.d/=V" + do + if [ -d "$dir" ]; then + run-parts --verbose --exit-on-error --arg="=V" --arg="/boot/=K-=V" "$dir" + fi + done + ;; +esac --- linux-aws-4.15.0.orig/debian/control-scripts/headers-postinst +++ linux-aws-4.15.0/debian/control-scripts/headers-postinst @@ -0,0 +1,126 @@ +#!/usr/bin/perl +# -*- Mode: Cperl -*- +# debian.postinst --- +# Author : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) +# Created On : Sat Apr 27 05:42:43 1996 +# Created On Node : melkor.pilgrim.umass.edu +# Last Modified By : Manoj Srivastava +# Last Modified On : Sat Aug 5 13:20:22 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 45 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# +# +# arch-tag: 1c716174-2f0a-476d-a626-a1322e62503a +# + + +$|=1; + +# Predefined values: +my $version = "=V"; +my $kimage = "=K"; +my $package_name = "linux-image-$version"; + + +# Ignore all invocations uxcept when called on to configure. +exit 0 unless ($ARGV[0] && $ARGV[0] =~ /configure/); + +#known variables +my $image_dest = "/"; +my $realimageloc = "/boot/"; +my $silent_modules = ''; +my $modules_base = '/lib/modules'; +my $CONF_LOC = '/etc/kernel-img.conf'; +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +chdir '/usr/src' or die "Could not chdir to /usr/src:$!"; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $header_postinst_hook = "$1" if /^\s*header_postinst_hook\s*=\s*(\S+)/ig; + } + close CONF; + } +} + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +## Run user hook script here, if any +if (-x "$header_postinst_hook") { + &run_hook("postinst", $header_postinst_hook); +} + +if (-d "/etc/kernel/header_postinst.d") { + print STDERR "Examining /etc/kernel/header_postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/header_postinst.d") && + die "Failed to process /etc/kernel/header_postinst.d"; +} + +if (-d "/etc/kernel/header_postinst.d/$version") { + print STDERR "Examining /etc/kernel/header_postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/header_postinst.d/$version") && + die "Failed to process /etc/kernel/header_postinst.d/$version"; +} + +exit 0; + +__END__ --- linux-aws-4.15.0.orig/debian/control-scripts/postinst +++ linux-aws-4.15.0/debian/control-scripts/postinst @@ -0,0 +1,1137 @@ +#! /usr/bin/perl +# OriginalAuthor : Manoj Srivastava ( srivasta@pilgrim.umass.edu ) +# +# Customized for Ubuntu by: Ben Collins + +#use strict; #for debugging +use Cwd 'abs_path'; + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, nettrom, arcboot or delo +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $relative_links = ""; # target machine defined +my $initrd = "YES"; # initrd kernel +my $do_initrd = ''; # Normally we do not +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; # List of tools to create initial ram fs. +my $notifier = "/usr/share/update-notifier/notify-reboot-required"; +my $package_name = "linux-image-$version"; +my $explicit_do_loader = 'Yes'; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; +$Loader = "ARCBOOT" if $loader =~ /^arcboot/io; +$Loader = "DELO" if $loader =~ /^delo/io; + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $silent_modules = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +my $modules_base = '/lib/modules'; +my $CONF_LOC = '/etc/kernel-img.conf'; + +# Ignore all invocations except when called on to configure. +exit 0 unless $ARGV[0] =~ /configure/; + +my $DEBUG = 0; + +# Do some preliminary sanity checks here to ensure we actually have an +# valid image dir +chdir('/') or die "could not chdir to /:$!\n"; +die "Internal Error: ($image_dir) is not a directory!\n" + unless -d $image_dir; + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; +die "Internal Error: ($realimageloc) is not a directory!\n" + unless -d $realimageloc; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlink\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $explicit_do_loader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_modules = '' if /^\s*silent_modules\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $explicit_do_loader = "YES" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_modules = 'Yes' if /^\s*silent_modules\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + +$initrd = '' if (! -x "$ramdisk"); + +# For some versions of kernel-package, we had this warning in the +# postinst, but the rules did not really interpolate the value in. +# Here is a sanity check. +my $pattern = "=" . "I"; +$initrd=~ s/^$pattern$//; + +if ($link_in_boot) { + $image_dest = "/$image_dir/"; # same as realimageloc +} + +# Tack on at least one trainling / +$image_dest = "$image_dest/"; +$image_dest =~ s|^/*|/|o; +$image_dest =~ s|/+$|/|o; + +if (! -d "$image_dest") { + die "Expected Image Destination dir ($image_dest) to be a valid directory!\n"; +} + +# sanity +if (!($do_bootfloppy || $do_bootloader)) { + $do_boot_enable = ''; +} +if ($do_symlink && $no_symlink) { + warn "Both do_symlinks and no_symlinks options enabled; disabling no_symlinks\n"; + $no_symlink = 0; +} + +# most of our work is done in $image_dest (nominally /) +chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) { $kimage = "vmlinuz"; } # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) { $kimage = "vmlinuz"; } # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) { $kimage = "vmlinuz"; } # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage; } +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage; } +else { $kimage = "vmlinuz"; } # Default + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +die "Internal Error: Could not find image (" . $realimageloc + . "$kimage-$version)\n" unless -e $realimageloc + . "$kimage-$version"; + +# search for the boot loader in the path +my $loader_exec; +($loader_exec = $loader) =~ s|.*/||; +my ($loaderloc) = grep -x, map "$_/$loader_exec", + map { length($_) ? $_ : "." } split /:/, $ENV{PATH}; + + +###################################################################### +###################################################################### +########### Test whether a relative symlinkwould be OK ####### +###################################################################### +###################################################################### +sub test_relative { + my %params = @_; + my $cwd; + + die "Internal Error: Missing Required paramater 'Old Dir' " + unless $params{'Old Dir'}; + die "Internal Error: Missing Required paramater New Dir' " + unless $params{'New Dir'}; + + + die "Internal Error: No such dir $params{'Old Dir'} " + unless -d $params{'Old Dir'}; + die "Internal Error: No such dir $params{'New Dir'} " + unless -d $params{'New Dir'}; + + # If the caller specified a test file, and it does not exist try and find + # another file to use in its stead. As we are installing kernels we can + # use any versioned file from this kernel which should be in the same place. + if (defined $params{'Test File'} and + ! -f $params{'Old Dir'} . '/' . $params{'Test File'}) { + + my @possible = glob($params{'Old Dir'} . "/*$version*"); + if ($#possible >= 0) { + $params{'Test File'} = `basename "$possible[0]"`; + chomp($params{'Test File'}); + warn "Test relative: selected $params{'Test File'}" + if $DEBUG; + } + } + + warn "Test relative: testing $params{'Old Dir'} -> $params{'New Dir'}" + if $DEBUG; + chomp($cwd = `pwd`); + chdir ($params{'New Dir'}) or die "Could not chdir to $params{'New Dir'}:$!"; + my $ok = 0; + $params{'Old Dir'} =~ s|^/*||o; + if (-d $params{'Old Dir'} ) { + if (defined $params{'Test File'}) { + if (-e $params{'Old Dir'} . $params{'Test File'}) { + $ok = 1; + } + } else { + $ok = 1; # well, backward compatibility + } + } + chdir ($cwd) or die "Could not chdir to $params{'New Dir'}:$!"; + return $ok; +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +# sub CanonicalizePath { +# my $path = join '/', @_; +# my @work = split '/', $path; +# my @out; +# my $is_absolute; + +# if (@work && $work[0] eq "") { +# $is_absolute = 1; shift @work; +# } + +# while (@work) { +# my $seg = shift @work; +# if ($seg eq "." || $seg eq "") { +# } +# elsif ($seg eq "..") { +# if (@out && $out[-1] ne "..") { +# pop @out; +# } +# else { +# # Leading "..", or "../..", etc. +# push @out, $seg; +# } +# } +# else { +# push @out, $seg; +# } +# } + +# unshift @out, "" if $is_absolute; +# return join('/', @out); +# } +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### + +sub spath { + my %params = @_; + + die "Missing Required paramater 'Old'" unless $params{'Old'}; + die "Missing Required paramater 'New'" unless $params{'New'}; + + my @olddir = split '/', `readlink -q -m $params{'Old'}`; + my @newdir = split '/', `readlink -q -m $params{'New'}`; + my @outdir = @olddir; + + my $out = ''; + my $i; + for ($i = 0; $i <= $#olddir && $i <= $#newdir; $i++) { + $out++ if ($olddir[$i] ne $newdir[$i]); + shift @outdir unless $out; + unshift @outdir, ".." if $out; + } + if ($#newdir > $#olddir) { + for ($i=0; $i < $#newdir; $i++) { + unshift @outdir, ".."; + } + } + return join ('/', @outdir); +} +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### + + +# This routine actually moves the kernel image +# From: $realimageloc/$kimage-$version (/boot/vmlinuz-2.6.12) +# To: $image_dest/$kimage-$version (/vmlinuz-2.6.12) +# Note that the image is moved to a versioned destination, but ordinary +# symlinks we create otherwise are not normally versioned +sub really_move_image { + my $src_dir = $_[0]; + my $target = $_[1]; + my $dest_dir = $_[2]; + + warn "Really move image: src_dir=$src_dir, target=$target,\n destdir=$dest_dir" + if $DEBUG; + if (-e "$target") { + # we should be in dir $dest_dir == $image_dest /, normally + rename("$target", "$target.$$") || + die "failed to move " . $dest_dir . "$target:$!"; + warn "mv $target $target.$$" if $DEBUG; + } + warn "mv -f $src_dir$target $target" if $DEBUG; + my $ret = system("mv -f " . $src_dir . "$target " . + " $target"); + if ($ret) { + die("Failed to move " . $src_dir . "$target to " + . $dest_dir . "$target"); + } + # Ok, now we may clobber the previous .old files + if (-e "$target.$$") { + rename("$target.$$", "$target.old") || + die "failed to move " . $dest_dir . "$target:$!"; + warn "mv $target.$$ $target " if $DEBUG; + } +} + +# Normally called after really_move_image; and only called if we asked for +# reversed link this routine reverses the symbolic link that is notmally +# created. Since the real kernel image has been moved over to +# $image_dest/$kimage-$version. So, this routine links +# From: $image_dest/$kimage-$version (/vmlinuz-2.6.12) +# To: $realimageloc/$kimage-$version (/boot/vmlinuz-2.6.12) +sub really_reverse_link { + my $src_dir = $_[0]; + my $link_name = $_[1]; + my $dest_dir = $_[2]; + warn "Really reverse link: src_dir=$src_dir, link name=$link_name\n" . + "\tdestdir=$dest_dir" if $DEBUG; + + my $Old = $dest_dir; + if (test_relative ('Old Dir' => $Old, 'New Dir' => $src_dir, + 'Test File' => "$link_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$src_dir" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + link($Old . "$link_name", $src_dir . "$link_name") || + die("Failed to link " . $dest_dir . "$link_name to " . $src_dir . + "$link_name:$!"); + warn "ln " . $Old . "$link_name " . $src_dir . "$link_name" if $DEBUG; + } + else { + symlink($Old . "$link_name", $src_dir . "$link_name") || + die("Failed to symbolic-link " . $dest_dir . "$link_name to " . $src_dir + . "$link_name:$!"); + warn "ln -s " . $Old . "$link_name " . $src_dir . "$link_name" if $DEBUG; + } +} + +# This routine is invoked if there is a symbolic link in place +# in $image_dest/$kimage -- so a symlink exists in the destination. +# What we are trying to determine is if we need to move the symbolic link over +# to the the .old location +sub move_p { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + my $force_move = 0; + warn "Move?: kimage=$kimage, image_dest=$image_dest, \n" . + "\timage_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink || $reverse_symlink) { + # we do not want links, yet we have a symbolic link here! + warn "found a symbolic link in " . $image_dest . "$kimage \n" . + "even though no_symlink is defined\n" if $no_symlink; + warn "found a symbolic link in " . $image_dest . "$kimage \n" . + "even though reverse_symlink is defined\n" if $reverse_symlink; + # make sure we change this state of affairs + $force_move = 1; + return $force_move; + } + + warn "DEBUG: OK. We found symlink, and we should have a symlink here.\n" + if $DEBUG; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + my $target = `readlink -q -m "${realimageloc}${kimage}-${version}"`; + $real_target = abs_path($vmlinuz_target) if defined($vmlinuz_target); + + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a dangling link" . + "to $real_target\n"; + $force_move = 1; + return $force_move; + } + + + warn "DEBUG: The link $kimage points to ($vmlinuz_target)\n" if $DEBUG; + warn "DEBUG: ($vmlinuz_target) is really ($real_target)\n" if $DEBUG; + my $cwd; + chomp ($cwd=`pwd`); + if ($vmlinuz_target !~ m|^/|o) { + $vmlinuz_target = $cwd . "/" . $vmlinuz_target; + $vmlinuz_target =~ s|/+|/|o; + } + $vmlinuz_target = `readlink -q -m $vmlinuz_target`; + + if ("$vmlinuz_target" ne "$target") { + warn "DEBUG: We need to handle this.\n" if $DEBUG; + if ($minimal_swap) { + warn "DEBUG: Minimal swap.\n" if $DEBUG; + if (-l "$kimage.old") { + warn "DEBUG: There is an old link at $kimage.old\n" if $DEBUG; + my $old_target = readlink "$kimage.old"; + my $real_old_target = ''; + $real_old_target=abs_path($old_target) if defined ($old_target); + + if ($real_old_target && -f "$real_old_target") { + if ($old_target !~ m|^/|o) { + $old_target = $cwd . "/" . $old_target; + $old_target =~ s|/+|/|o; + } + $old_target = `readlink -q -m $old_target`; + if ("$old_target" ne "$target") { + $force_move = 1; + warn "DEBUG: Old link ($old_target) does not point to us ($target)\n" + if $DEBUG; + } + else { # The .old points to the current + warn "$kimage.old --> $target -- doing nothing"; + $force_move = 0; + } + } + else { + warn "DEBUG: Well, the old link does not exist -- so we move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: No .old link -- OK to move\n" + if $DEBUG; + $force_move = 1; + } + } + else { + warn "DEBUG: ok, minimal swap is no-- so we move.\n" + if $DEBUG; + $force_move = 1; + } + } + else { # already have proper link + warn "$kimage($vmlinuz_target) points to $target ($real_target) -- doing nothing"; + $force_move = 0; + } + return $force_move; +} + + +# This routine moves the symbolic link around (/vmlinuz -> /vmlinuz.old) +# It pays attention to whether we should the fact whether we should be using +# hard links or not. +sub really_move_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "really_move_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # don't clobber $kimage.old quite yet + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + warn "mv $kimage $kimage.$$" if $DEBUG; + my $Old = $src_dir; + my $cwd; + + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + warn "ln ${Old}${image_name} $kimage" if $DEBUG; + if (! link("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to link ${Old}${image_name} to " . + "${image_dest}${kimage}:$!"); + } + } + else { + warn "ln -s ${Old}${image_name} $kimage" if $DEBUG; + if (! symlink("${Old}${image_name}", "$kimage")) { + rename("$kimage.$$", "$kimage"); + die("Failed to symbolic-link ${Old}${image_name} to " . + "${image_dest}${kimage}:$!"); + } + } + + # Ok, now we may clobber the previous .old file + if (-l "$kimage.old" || ! -e "$kimage.old" ) { + rename("$kimage.$$", "$kimage.old"); + warn "mv $kimage.$$ $kimage.old" if $DEBUG; + } + else { + warn "$kimage.old is not a symlink, not clobbering\n"; + warn "rm $kimage.$$"; + unlink "$kimage.$$" if $DEBUG; + } +} + +# This routine handles a request to do symlinks, but there is no +# symlink file already there. Either we are supposed to use copy, or we are +# installing on a pristine system, or the user does not want symbolic links at +# all. We use a configuration file to tell the last two cases apart, creating +# a config file if needed. +sub handle_missing_link { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_missing_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + if ($no_symlink) { + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc . + "$image_name " . " $kimage"); + if ($ret) { + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + elsif ($reverse_symlink) { + warn "mv -f $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("mv -f " . $realimageloc . "$image_name " + . "$kimage"); + if ($ret) { + die("Failed to move " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + else { + if (! $have_conffile) { + my $ret; + my $answer=''; + $do_symlink = "Yes"; + + if (open(CONF, ">$CONF_LOC")) { + print CONF "# Kernel Image management overrides\n"; + print CONF "# See kernel-img.conf(5) for details\n"; + if ($loader =~ /palo/i) { + print CONF "link_in_boot = Yes\n"; + print CONF "do_symlinks = Yes\n"; + print CONF "relative_links = Yes\n"; + print CONF "do_bootloader = No\n"; + } else { + print CONF "do_symlinks = $do_symlink\n"; + } + close CONF; + } + $have_conffile = "Yes"; + } + } + + if (! $no_symlink && $do_symlink =~ /Yes/i) { + my $Old = $realimageloc; + my $New = $image_dest; + my $Name = "$image_name"; + my $Link_Dest = "$kimage"; + + if ($reverse_symlink) { + $Old = $image_dest; + $New = $realimageloc; + $Name = "$kimage"; + $Link_Dest = $realimageloc . "$image_name"; + } + if (test_relative ('Old Dir' => $Old, + 'New Dir' => $New, + 'Test File' => $Name)) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$New" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + symlink($Old . "$Name", "$Link_Dest") || + die("Failed to symbolic-link ${Old}$Name to $Link_Dest:$!"); + warn "ln -s ${Old}$Name $Link_Dest" if $DEBUG; + + } +} + +# This routine handles the rest of the cases, where the user has requested +# non-traditional handling, like using cp, or reverse symlinks, or hard links. +sub handle_non_symlinks { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = $_[2]; + my $src_dir = $_[3]; + warn "handle_non_link: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # Save the current image. We do this in all four cases + rename("$kimage", "$kimage.$$") || + die "failed to move " . $image_dest . "$kimage:$!"; + warn "mv $kimage $kimage.$$" if $DEBUG; + + ##,#### + # case One + #`#### + if ($no_symlink) { + # Maybe /$image_dest is on a dos system? + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + warn "mv $kimage.$$ $kimage" if $DEBUG; + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + ##,#### + # case Two + #`#### + elsif ($reverse_symlink) { # Maybe /$image_dest is on a dos system? + warn "mv -f $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("mv -f " . $realimageloc . "$image_name " + . $image_dest . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + rename("$kimage.$$", "$kimage"); + warn "mv $kimage.$$ $kimage" if $DEBUG; + } + die("Failed to move " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + my $Old = $image_dest; + if (test_relative ('Old Dir' => $Old, 'New Dir' => $realimageloc, + 'Test File' => "$kimage")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$realimageloc" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + if ($use_hard_links =~ m/YES/i) { + warn "ln " . $Old . "$kimage " . $realimageloc . "$image_name" if $DEBUG; + if (! link($Old . "$kimage", $realimageloc . "$image_name")) { + warn "Could not link " . $image_dest . + "$kimage to $image_name :$!"; + } + } + else { + warn "ln -s " . $Old . "$kimage " . $realimageloc . "$image_name" if $DEBUG; + if (! symlink($Old . "$kimage", $realimageloc . "$image_name")) { + warn "Could not symlink " . $image_dest . + "$kimage to $image_name :$!"; + } + } + } + ##,#### + # case Three + #`#### + elsif ($use_hard_links =~ m/YES/i ) { + # Ok then. this ought to be a hard link, and hence fair game + # don't clobber $kimage.old quite yet + my $Old = $realimageloc; + my $cwd; + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + warn "ln " . $Old . "$image_name " . "$kimage" if $DEBUG; + if (! link($Old . "$image_name", "$kimage")) { + warn "mv $kimage.$$ $kimage" if $DEBUG; + rename("$kimage.$$", "$kimage"); + die("Failed to link " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + ##,#### + # case Five!?! + #`#### + elsif ($do_symlink) { + # Ok then. this ought to be a symlink, and hence fair game + # don't clobber $kimage.old quite yet + my $Old = $realimageloc; + my $cwd; + chomp($cwd=`pwd`); + if (test_relative ('Old Dir' => $Old, 'New Dir' => $cwd, + 'Test File' => "$image_name")) { + $Old =~ s|^/*||o; + } + # Special case is they are in the same dir + my $rel_path = spath('Old' => "$Old", 'New' => "$cwd" ); + $Old ="" if $rel_path =~ m/^\s*$/o; + + warn "symlink " . $Old . "$image_name " . "$kimage" if $DEBUG; + if (! symlink($Old . "$image_name", "$kimage")) { + warn "mv $kimage.$$ $kimage" if $DEBUG; + rename("$kimage.$$", "$kimage"); + die("Failed to link " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + ##,#### + # case Four + #`#### + else { + # We just use cp + warn "cp -a --backup=t $realimageloc$image_name $kimage" if $DEBUG; + my $ret = system("cp -a --backup=t " . $realimageloc + . "$image_name " . "$kimage"); + if ($ret) { + if (-e "$kimage.$$") { + warn "mv $kimage.$$ $kimage" if $DEBUG; + rename("$kimage.$$", "$kimage"); + } + die("Failed to copy " . $realimageloc . "$image_name to " + . $image_dest . "$kimage"); + } + } + # Ok, now we may clobber the previous .old file + warn "mv $kimage.$$ $kimage.old if -e $kimage.$$" if $DEBUG; + rename("$kimage.$$", "$kimage.old") if -e "$kimage.$$"; +} + +# This routine is responsible for setting up the symbolic links +# So, the actual kernel image lives in +# $realimageloc/$image_name (/boot/vmlinuz-2.6.12). +# This routine creates symbolic links in $image_dest/$kimage (/vmlinuz) +sub image_magic { + my $kimage = $_[0]; # Name of the symbolic link + my $image_dest = $_[1]; # The directory the links goes into + my $image_name = "$kimage-$version"; + my $src_dir = $realimageloc; + warn "image_magic: kimage=$kimage, image_dest=$image_dest\n" . + "\t image_name=$image_name, src_dir=$src_dir" if $DEBUG; + + # Well, in any case, if the destination (the symlink we are trying + # to create) is a directory, we should do nothing, except throw a + # diagnostic. + if (-d "$kimage" ) { + die ("Hmm. $kimage is a directory, which I did not expect. I am\n" . + "trying to create a symbolic link with that name linked to \n" . + "$image_dest . Since a directory exists here, my assumptions \n" . + "are way off, and I am aborting.\n" ); + exit (3); + } + + if ($move_image) { # Maybe $image_dest is in on dos, or something? + # source dir, link name, dest dir + really_move_image( $realimageloc, $image_name, $image_dest); + really_reverse_link($realimageloc, $image_name, $image_dest) + if $reverse_symlink; + return; + } + + if (-l "$kimage") { # There is a symbolic link + warn "DEBUG: There is a symlink for $kimage\n" if $DEBUG; + my $force_move = move_p($kimage, $image_dest, $image_name, $src_dir); + + if ($force_move) { + really_move_link($kimage, $image_dest, $image_name, $src_dir); + } + } + elsif (! -e "$kimage") { + # Hmm. Pristine system? How can that be? Installing from scratch? + # Or maybe the user does not want a symbolic link here. + # Possibly they do not want a link here. (we should be in / + # here[$image_dest, really] + handle_missing_link($kimage, $image_dest, $image_name, $src_dir); + } + elsif (-e "$kimage" ) { + # OK, $kimage exists -- but is not a link + handle_non_symlinks($kimage, $image_dest, $image_name, $src_dir); + } +} + +###################################################################### +###################################################################### +###################################################################### +###################################################################### + +# We may not have any modules installed +if ( -d "$modules_base/$version" ) { + print STDERR "Running depmod.\n"; + my $ret = system("depmod -a $version"); + if ($ret) { + print STDERR "Failed to run depmod\n"; + exit(1); + } +} + + + +sub find_initrd_tool { + my $hostversion = shift; + my $version = shift; + print STDERR "Finding valid ramdisk creators.\n"; + my @ramdisks = + grep { + my $args = + "$_ " . + "--supported-host-version=$hostversion " . + "--supported-target-version=$version " . + "1>/dev/null 2>&1" + ; + system($args) == 0; + } + split (/[:,\s]+/, $ramdisk); +} + +# The initrd symlink should probably be in the same dir that the +# symlinks are in +if ($initrd) { + my $success = 0; + + # Update-initramfs is called slightly different than mkinitrd and + # mkinitramfs. XXX It should really be made compatible with this stuff + # some how. + my $upgrading = 1; + if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + $upgrading = 0; + } + my $ret = system("$ramdisk " . ($upgrading ? "-u" : "-c") . " -k " . $version . " >&2"); + $success = 1 unless $ret; + die "Failed to create initrd image.\n" unless $success; + if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + image_magic("initrd.img", $image_dest); + } + else { + lstat("initrd.img"); + if (! -e _) { + handle_missing_link("initrd.img", $image_dest, "initrd.img-$version", + $realimageloc); + } + else { + print STDERR + "Not updating initrd symbolic links since we are being updated/reinstalled \n"; + print STDERR + "($ARGV[1] was configured last, according to dpkg)\n"; + } + } + + if ($initrd && -l "initrd" ) { + unlink "initrd"; + } + + if ($initrd && -l "$image_dir/initrd" && ! $link_in_boot) { + unlink "$image_dir/initrd"; + } +} +else { # Not making an initrd emage + if (-l "initrd.img") { + # Ooh, last image was an initrd image? in any case, we should move it. + my $target = readlink "initrd.img"; + my $real_target = ''; + $real_target = abs_path($target) if defined ($target); + + if (!defined($target) || ! -f "$real_target") { + # Eh. dangling link. can safely be removed. + unlink("initrd.img"); + } else { + if (-l "initrd.img.old" || ! -e "initrd.img.old" ) { + rename("initrd.img", "initrd.img.old"); + } else { + warn "initrd.img.old is not a symlink, not clobbering\n"; + unlink("initrd.img"); + } + } + } +} + +# Warn of a reboot +if (-x $notifier) { + system($notifier); +} + +# Let programs know not to hibernate if the kernel that would be used for +# resume-from-hibernate is likely to differ from the currently running kernel. +system("mountpoint -q /var/run"); +if ($? eq 0) { + system("touch /var/run/do-not-hibernate"); +} + +# Only change the symlinks if we are not being upgraded +if (! defined $ARGV[1] || ! $ARGV[1] || $ARGV[1] =~ m//og) { + image_magic($kimage, $image_dest); +} +else { + lstat("$kimage"); + if (! -e _) { + handle_missing_link($kimage, $image_dest, "$kimage-$version", + $realimageloc); + } + else { + print STDERR + "Not updating image symbolic links since we are being updated/reinstalled \n"; + print STDERR + "($ARGV[1] was configured last, according to dpkg)\n"; + } +} + +# We used to have System.* files in / +if (-e "/System.map" || -e "/System.old") { + unlink '/System.map' if -e '/System.map'; + unlink '/System.old' if -e '/System.old'; +} + +# creating some info about kernel and initrd +if ($DEBUG) { + my $ksize=sprintf("%.0f",(stat($realimageloc . + "$kimage-$version"))[7]/1024)."kB"; + my $initrdsize=''; + if ($initrd) { + $initrdsize=sprintf("%.0f",(stat($realimageloc . + "initrd.img-$version"))[7]/1024)."kB"; + } + + print STDERR <<"EOMSG"; +A new kernel image has been installed at $realimageloc$kimage-$version + (Size: $ksize) + +Symbolic links, unless otherwise specified, can be found in $image_dest + +EOMSG + ; + + if ($initrd) { + print STDERR <<"EOMSGA"; + + Initial rootdisk image: ${realimageloc}initrd.img-$version (Size: $initrdsize) +EOMSGA + ; + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if ($postinst_hook) { + &run_hook("postinst", $postinst_hook); +} + +if (-d "/etc/kernel/postinst.d") { + print STDERR "Examining /etc/kernel/postinst.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d") && + die "Failed to process /etc/kernel/postinst.d"; +} + +if (-d "/etc/kernel/postinst.d/$version") { + print STDERR "Examining /etc/kernel/postinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postinst.d/$version") && + die "Failed to process /etc/kernel/postinst.d/$version"; +} + +LOADER: { + last unless $do_boot_enable; # Exit if explicitly asked to + + last if $loader =~ /silo/i; # SILO does not have to be executed. + last if $loader =~ /yaboot/i; # yaboot does not have to be executed. + last if $loader =~ /milo/i; # MILO does not have to be executed. + last if $loader =~ /nettrom/i; # NETTROM does not have to be executed. + last if $loader =~ /arcboot/i; # ARCBOOT does not have to be executed. + last if $loader =~ /delo/i; # DELO does not have to be executed. + last if $loader =~ /quik/i; # maintainer asked quik invocation to be ignored + + last unless $loaderloc; + last unless -x $loaderloc; + last unless $do_bootloader; + + if (-T "/etc/$loader.conf") { + # Trust and use the existing lilo.conf. + print STDERR "You already have a $Loader configuration in /etc/$loader.conf\n"; + my $ret = &run_lilo(); + exit $ret if $ret; + } +} + + +sub run_lilo (){ + my $ret; + # Try and figure out if the user really wants lilo to be run -- + # since the default is to run the boot laoder, which is ! grub -- but + # the user may be using grub now, and not changed the default. + + # So, if the user has explicitly asked for the loader to be run, or + # if there is no postinst hook, or if there is no grub installed -- + # we are OK. Or else, we ask. + if ($explicit_do_loader || (! ($postinst_hook && -x '/usr/sbin/grub'))) { + print STDERR "Running boot loader as requested\n"; + } else { + print STDERR "Ok, not running $loader\n"; + } + if ($loader =~ /^lilo/io or $loader =~ /vmelilo/io) { + print STDERR "Testing $loader.conf ... \n"; + unlink $temp_file_name; # security + $ret = system("$loaderloc -t >$temp_file_name 2>&1"); + if ($ret) { + print STDERR "Boot loader test failed\n"; + return $ret; + } + unlink "$temp_file_name"; + print STDERR "Testing successful.\n"; + print STDERR "Installing the "; + print STDERR "partition " if $loader =~ /^lilo/io; + print STDERR "boot sector... \n"; + } + + print STDERR "Running $loaderloc ... \n"; + if ($loader =~ /^elilo/io) { + $ret = system("$loaderloc 2>&1 | tee $temp_file_name"); + } else { + $ret = system("$loaderloc >$temp_file_name 2>&1"); + } + if ($ret) { + print STDERR "Boot loader failed to run\n"; + return $ret; + } + unlink $temp_file_name; + print STDERR "Installation successful.\n"; + return 0; +} + +exit 0; + +__END__ + --- linux-aws-4.15.0.orig/debian/control-scripts/postrm +++ linux-aws-4.15.0/debian/control-scripts/postrm @@ -0,0 +1,363 @@ +#! /usr/bin/perl +# -*- Mode: Cperl -*- +# image.postrm --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Sat May 15 11:05:13 1999 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Wed Sep 13 11:26:19 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 57 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# $Id: image.postrm,v 1.31 2003/10/07 16:24:20 srivasta Exp $ +# + + +# +#use strict; #for debugging +use Cwd 'abs_path'; + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, or nettrom +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $initrd = "YES"; # initrd kernel +my $do_initrd = ''; # Normally, we don't +my $warn_initrd = 'YES'; # Normally we do +my $use_hard_links = ''; # hardlinks do not work across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # we shall not create a dangling link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my @boilerplate = (); +my @silotemplate = (); +my @quiktemplate = (); +my @palotemplate = (); +my @vmelilotemplate = (); +my $bootdevice = ''; +my $rootdevice = ''; +my $rootdisk = ''; +my $rootpartition = ''; +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_modules = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +chdir('/') or die "could not chdir to /:$!\n"; +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $warn_initrd = '' if /^\s*warn_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_modules = '' if /^\s*silent_modules\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $warn_initrd = "Yes" if /^\s*warn_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_modules = 'Yes' if /^\s*silent_modules\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + +$initrd = '' if (! -x "$ramdisk"); + +if ($link_in_boot) { + $image_dest = "/$image_dir/"; + $image_dest =~ s|^/*|/|o; +} + +$image_dest = "$image_dest/"; +$image_dest =~ s|/+$|/|o; + +# The destdir may be gone by now. +if (-d "$image_dest") { + chdir("$image_dest") or die "could not chdir to $image_dest:$!\n"; +} + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) {$kimage = "vmlinuz"} # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) {$kimage = "vmlinuz"} # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) {$kimage = "vmlinuz"} # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage;} +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage;} +else {$kimage = "vmlinuz"} # default + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub remove_sym_link { + my $bad_image = $_[0]; + + warn "Removing symbolic link $bad_image \n"; + if ($loader =~ /lilo/i) + { + warn "Unless you used the optional flag in lilo, \n"; + } + warn " you may need to re-run your boot loader" . ($loader ? "[$loader]":"") + . "\n"; + # Remove the dangling link + unlink "$bad_image"; +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +sub CanonicalizePath { + my $path = join '/', @_; + my @work = split '/', $path; + my @out; + my $is_absolute; + + if (@work && $work[0] eq "") { $is_absolute = 1; shift @work; } + + while (@work) { + my $seg = shift @work; + if ($seg eq "." || $seg eq "") { + } elsif ($seg eq "..") { + if (@out && $out[-1] ne "..") { + pop @out; + } else { + # Leading "..", or "../..", etc. + push @out, $seg; + } + } else { + push @out, $seg; + } + } + + unshift @out, "" if $is_absolute; + return join('/', @out); +} + +###################################################################### +###################################################################### +############ +###################################################################### +###################################################################### +# This removes dangling symlinks. What do we do about hard links? Surely a +# something with the nane $image_dest . "$kimage" ought not to be left behind? +sub image_magic { + my $kimage = $_[0]; + my $image_dest = $_[1]; + + if (-l "$kimage") { + # There is a symbolic link + my $force_move = 0; + my $vmlinuz_target = readlink "$kimage"; + my $real_target = ''; + $real_target = abs_path($vmlinuz_target) if defined ($vmlinuz_target); + if (!defined($vmlinuz_target) || ! -f "$real_target") { + # what, a dangling symlink? + warn "The link " . $image_dest . "$kimage is a damaged link\n"; + # Remove the dangling link + &remove_sym_link("$kimage"); + } + else { + my $canonical_target = CanonicalizePath("$vmlinuz_target"); + if (! -e $canonical_target) { + warn "The link " . $image_dest . "$kimage is a dangling link\n"; + &remove_sym_link("$kimage"); + } + } + } +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + warn "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + warn "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if ($postrm_hook) { + &run_hook("postrm", $postrm_hook); +} +if (-d "/etc/kernel/postrm.d") { + warn "Examining /etc/kernel/postrm.d .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d") && + die "Failed to process /etc/kernel/postrm.d"; +} +if (-d "/etc/kernel/postrm.d/$version") { + warn "Examining /etc/kernel/postrm.d/$version .\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version " . + "/etc/kernel/postrm.d/$version") && + die "Failed to process /etc/kernel/postrm.d/$version"; +} + +# check and remove damaged and dangling symlinks +if ($ARGV[0] !~ /upgrade/) { + system("$ramdisk -d -k " . $version . " > /dev/null 2>&1"); + if (-f $realimageloc . "initrd.img-$version.bak") { + unlink $realimageloc . "initrd.img-$version.bak"; + } + image_magic($kimage, $image_dest); + image_magic($kimage . ".old", $image_dest); + image_magic("initrd.img", $image_dest) if $initrd; + image_magic("initrd.img.old", $image_dest) if $initrd; +} + +exit 0; + +__END__ + + + + + + --- linux-aws-4.15.0.orig/debian/control-scripts/preinst +++ linux-aws-4.15.0/debian/control-scripts/preinst @@ -0,0 +1,317 @@ +#! /usr/bin/perl +# -*- Mode: Cperl -*- +# image.preinst --- +# Author : Manoj Srivastava ( srivasta@tiamat.datasync.com ) +# Created On : Sun Jun 14 03:38:02 1998 +# Created On Node : tiamat.datasync.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Sun Sep 24 14:04:42 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 99 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# + +# +#use strict; #for debugging + +use Debconf::Client::ConfModule qw(:all); +version('2.0'); +my $capb=capb("backup"); + +$|=1; + +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlink = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, nettrom + # or elilo +my $image_dir = "/boot"; # where the image is located +my $initrd = "YES"; # initrd kernel +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_src_link = 'YES'; # There is no harm in checking the link +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; # List of tools to create initial ram fs. +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +#known variables +my @boilerplate = (); +my @silotemplate = (); +my @quiktemplate = (); +my @palotemplate = (); +my @vmelilotemplate = (); +my $bootdevice = ''; +my $rootdevice = ''; +my $rootdisk = ''; +my $rootpartition = ''; +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_loader = ''; +my $warn_reboot = ''; # Warn that we are installing a version of + # the kernel we are running + +my $modules_base = '/lib/modules'; + +die "Pre inst Internal error. Aborting." unless $version; + +exit 0 if $ARGV[0] =~ /abort-upgrade/; +exit 1 unless $ARGV[0] =~ /(install|upgrade)/; + +$arch = `uname -i`; +if ($arch =~ m/86/) { + system ("grep -q ' pae ' /proc/cpuinfo"); + if ($?) { + print STDERR "This kernel does not support a non-PAE CPU.\n"; + exit 1; + } +} + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_src_link = '' if /^\s*relink_src_link\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_src_link = 'Yes' if /^\s*relink_src_link\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + $have_conffile = "Yes"; # stop perl complaining + } +} + +$initrd = '' if (! -x "$ramdisk"); + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + +# About to upgrade this package from version $2 TO THIS VERSION. +# "prerm upgrade" has already been called for the old version of +# this package. + +sub find_initrd_tool { + my $hostversion = shift; + my $version = shift; + my @ramdisks = + grep { + my $args = + "$_ " . + "--supported-host-version=$hostversion " . + "--supported-target-version=$version " . + "1>/dev/null 2>&1" + ; + system($args) == 0; + } + split (/[:,\s]+/, $ramdisk); +} + +sub check { + my $version = shift; + my $lib_modules="$modules_base/$version"; + my $message = ''; + + if (-d "$lib_modules") { + opendir(DIR, $lib_modules) || die "can’t opendir $lib_modules: $!"; + my @children = readdir(DIR); + if ($#children > 1) { + my @dirs = grep { -d "$lib_modules/$_" } @children; + if ($#dirs > 1) { # we have subdirs + my $dir_message=''; + for my $dir (@dirs) { + if ($dir =~/kernel$/) { + $dir_message="An older install was detected.\n"; + } + else { + $dir_message="Module sub-directories were detected.\n" + unless $dir_message; + } + } + $message += $dir_message if $dir_message; + } + + my @links = grep { -l "$lib_modules/$_" } @children; + if ($#links > -1) { + my $links_message = ''; + for my $link (@links) { + next if ($link =~ /^build$/); + next if ($link =~ /^source$/); + $links_message = "Symbolic links were detected in $modules_base/$version.\n"; + } + $message += $links_message if $links_message; + } + my @files = grep { -f "$lib_modules/$_" } @children; + $message += "Additional files also exist in $modules_base/$version.\n" + if ($#files > -1); + } + } + else { $message .= "$lib_modules does not exist. ";} + return $message; +} + +if (-d "$modules_base/$version") { + my $errors=check($version); + warn "Info:\n$errors\n" if $errors; +} + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if (-x "$preinst_hook") { + &run_hook("preinst", $preinst_hook); +} +if (-d "/etc/kernel/preinst.d") { + print STDERR "Examining /etc/kernel/preinst.d/\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d") && + die "Failed to process /etc/kernel/preinst.d"; +} +if (-d "/etc/kernel/preinst.d/$version") { + print STDERR "Examining /etc/kernel/preinst.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version" . + " /etc/kernel/preinst.d/$version") && + die "Failed to process /etc/kernel/preinst.d/$version"; +} +print STDERR "Done.\n"; + +exit 0; + +__END__ + + --- linux-aws-4.15.0.orig/debian/control-scripts/prerm +++ linux-aws-4.15.0/debian/control-scripts/prerm @@ -0,0 +1,313 @@ +#! /usr/bin/perl +# -*- Mode: Perl -*- +# image.prerm --- +# Author : root ( root@melkor.pilgrim.umass.edu ) +# Created On : Fri May 17 03:28:59 1996 +# Created On Node : melkor.pilgrim.umass.edu +# Last Modified By : Manoj Srivastava +# Last Modified On : Sat Aug 5 13:14:17 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 85 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# +# $Id: image.prerm,v 1.22 2003/10/07 16:24:20 srivasta Exp $ +# +# +#use strict; + +$|=1; +# Predefined values: +my $version = "=V"; +my $link_in_boot = ""; # Should be empty, mostly +my $no_symlink = ""; # Should be empty, mostly +my $reverse_symlink = ""; # Should be empty, mostly +my $do_symlinks = "Yes"; # target machine defined +my $do_boot_enable = "Yes"; # target machine defined +my $do_bootfloppy = "Yes"; # target machine defined +my $do_bootloader = "Yes"; # target machine defined +my $move_image = ''; # target machine defined +my $kimage = "=K"; # Should be empty, mostly +my $loader = "=L"; # lilo, silo, quik, palo, vmelilo, or nettrom +my $image_dir = "/boot"; # where the image is located +my $clobber_modules = ''; # target machine defined +my $initrd = "YES"; # initrd kernel +my $use_hard_links = ''; # hardlinks do not wirk across fs boundaries +my $postinst_hook = ''; #Normally we do not +my $postrm_hook = ''; #Normally we do not +my $preinst_hook = ''; #Normally we do not +my $prerm_hook = ''; #Normally we do not +my $minimal_swap = ''; # Do not swap symlinks +my $ignore_depmod_err = ''; # normally we do not +my $relink_build_link = 'YES'; # There is no harm in checking the link +my $force_build_link = ''; # There is no harm in checking the link +my $kernel_arch = "=B"; +my $ramdisk = "/usr/sbin/update-initramfs"; +my $package_name = "linux-image-$version"; + +my $Loader = "NoLOADER"; # +$Loader = "LILO" if $loader =~ /^lilo/io; +$Loader = "SILO" if $loader =~ /^silo/io; +$Loader = "QUIK" if $loader =~ /^quik/io; +$Loader = "yaboot" if $loader =~ /^yaboot/io; +$Loader = "PALO" if $loader =~ /^palo/io; +$Loader = "NETTROM" if $loader =~ /^nettrom/io; +$Loader = "VMELILO" if $loader =~ /^vmelilo/io; +$Loader = "ZIPL" if $loader =~ /^zipl/io; +$Loader = "ELILO" if $loader =~ /^elilo/io; + + +# This should not point to /tmp, because of security risks. +my $temp_file_name = "/var/log/$loader" . "_log.$$"; + +#known variables +my $image_dest = "/"; +my $realimageloc = "/$image_dir/"; +my $have_conffile = ""; +my $CONF_LOC = '/etc/kernel-img.conf'; +my $relative_links = ''; +my $silent_loader = ''; +my $warn_reboot = 'Yes'; # Warn that we are installing a version of + # the kernel we are running + +# remove multiple leading slashes; make sure there is at least one. +$realimageloc =~ s|^/*|/|o; +$realimageloc =~ s|/+|/|o; + +my $DEBUG = 0; + +# Variables used +my $image=''; +my $ret=0; +my $seen=''; +my $answer=''; +my $running = ''; +my $WouldInvalidate = 0; + +if ($ARGV[0] && ($ARGV[0] =~ /remove/ || $ARGV[0] =~ /upgrade/)) { + if (-l "/usr/doc/linux-image-$version") { + unlink "/usr/doc/linux-image-$version"; + } +} + +# Ignore all invocations uxcept when called on to remove +exit 0 unless ($ARGV[0] && $ARGV[0] =~ /remove/) ; + +# Paranoid check to make sure that the correct value is put in there +if (! $kimage) { $kimage = "vmlinuz";} # Hmm. empty +elsif ($kimage =~ m/^b?uImage$/o) { $kimage = "vmlinuz";} # these produce vmlinuz +elsif ($kimage =~ m/^b?zImage$/o) { $kimage = "vmlinuz";} # these produce vmlinuz +elsif ($kimage =~ m/^[iI]mage$/o) { my $nop = $kimage; } +elsif ($kimage =~ m/^vmlinux$/o) { my $nop = $kimage; } +else { $kimage = "vmlinuz";} # Default + +if (-r "$CONF_LOC" && -f "$CONF_LOC" ) { + if (open(CONF, "$CONF_LOC")) { + while () { + chomp; + s/\#.*$//g; + next if /^\s*$/; + + $do_symlink = "" if /^\s*do_symlinks\s*=\s*(no|false|0)\s*$/ig; + $no_symlink = "" if /^\s*no_symlinks\s*=\s*(no|false|0)\s*$/ig; + $reverse_symlink = "" if /^\s*reverse_symlinks\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*image_in_boot\s*=\s*(no|false|0)\s*$/ig; + $link_in_boot = "" if /^\s*link_in_boot\s*=\s*(no|false|0)\s*$/ig; + $move_image = "" if /^\s*move_image\s*=\s*(no|false|0)\s*$/ig; + $clobber_modules = '' if /^\s*clobber_modules\s*=\s*(no|false|0)\s*$/ig; + $do_boot_enable = '' if /^\s*do_boot_enable\s*=\s*(no|false|0)\s*$/ig; + $do_bootfloppy = '' if /^\s*do_bootfloppy\s*=\s*(no|false|0)\s*$/ig; + $relative_links = '' if /^\s*relative_links \s*=\s*(no|false|0)\s*$/ig; + $do_bootloader = '' if /^\s*do_bootloader\s*=\s*(no|false|0)\s*$/ig; + $do_initrd = '' if /^\s*do_initrd\s*=\s*(no|false|0)\s*$/ig; + $use_hard_links = '' if /^\s*use_hard_links\s*=\s*(no|false|0)\s*$/ig; + $silent_loader = '' if /^\s*silent_loader\s*=\s*(no|false|0)\s*$/ig; + $warn_reboot = '' if /^\s*warn_reboot\s*=\s*(no|false|0)\s*$/ig; + $minimal_swap = '' if /^\s*minimal_swap\s*=\s*(no|false|0)\s*$/ig; + $ignore_depmod_err = '' if /^\s*ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig; + $relink_build_link = '' if /^\s*relink_build_link\s*=\s*(no|false|0)\s*$/ig; + $force_build_link = '' if /^\s*force_build_link\s*=\s*(no|false|0)\s*$/ig; + + + $do_symlink = "Yes" if /^\s*do_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $no_symlink = "Yes" if /^\s*no_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $reverse_symlink = "Yes" if /^\s*reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*image_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $link_in_boot = "Yes" if /^\s*link_in_boot\s*=\s*(yes|true|1)\s*$/ig; + $move_image = "Yes" if /^\s*move_image\s*=\s*(yes|true|1)\s*$/ig; + $clobber_modules = "Yes" if /^\s*clobber_modules\s*=\s*(yes|true|1)\s*$/ig; + $do_boot_enable = "Yes" if /^\s*do_boot_enable\s*=\s*(yes|true|1)\s*$/ig; + $do_bootfloppy = "Yes" if /^\s*do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig; + $do_bootloader = "Yes" if /^\s*do_bootloader\s*=\s*(yes|true|1)\s*$/ig; + $relative_links = "Yes" if /^\s*relative_links\s*=\s*(yes|true|1)\s*$/ig; + $do_initrd = "Yes" if /^\s*do_initrd\s*=\s*(yes|true|1)\s*$/ig; + $use_hard_links = "Yes" if /^\s*use_hard_links\s*=\s*(yes|true|1)\s*$/ig; + $silent_loader = 'Yes' if /^\s*silent_loader\s*=\s*(yes|true|1)\s*$/ig; + $warn_reboot = 'Yes' if /^\s*warn_reboot\s*=\s*(yes|true|1)\s*$/ig; + $minimal_swap = 'Yes' if /^\s*minimal_swap\s*=\s*(yes|true|1)\s*$/ig; + $ignore_depmod_err = 'Yes' if /^\s*ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig; + $relink_build_link = 'Yes' if /^\s*relink_build_link\s*=\s*(yes|true|1)\s*$/ig; + $force_build_link = 'Yes' if /^\s*force_build_link\s*=\s*(yes|true|1)\s*$/ig; + + $image_dest = "$1" if /^\s*image_dest\s*=\s*(\S+)/ig; + $postinst_hook = "$1" if /^\s*postinst_hook\s*=\s*(\S+)/ig; + $postrm_hook = "$1" if /^\s*postrm_hook\s*=\s*(\S+)/ig; + $preinst_hook = "$1" if /^\s*preinst_hook\s*=\s*(\S+)/ig; + $prerm_hook = "$1" if /^\s*prerm_hook\s*=\s*(\S+)/ig; + $ramdisk = "$1" if /^\s*ramdisk\s*=\s*(.+)$/ig; + } + close CONF; + $have_conffile = "Yes"; + } +} + +$initrd = '' if (! -x "$ramdisk"); + +$ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch; + +#check to see if we are trying to remove a running kernel +# if so we abort right now. +chop($running=`uname -r`); +if ($running eq $version) { + print STDERR "WARN: Proceeding with removing running kernel image.\n"; +} + +#Now, they have an alternate kernel which they are currently running + +# This is just us being nice to lilo users. + +chdir("/") or die "could not chdir to /:$!\n"; + +if (-f "/etc/$loader.conf") { #I know, could be a link, but .. + open (LILO, "/etc/$loader.conf") || &success(); # this is not critical + while () { + chop; + s/\#.*//; # nix the comments + next unless /^\s*image\s*=\s(\S+)/o; + $image = $1; + if ($image && -e $image) { + while (defined($image) && -l $image) { + $image = readlink ($image); + } + if (defined($image) && -e $image) { + $WouldInvalidate |= $image =~ /$kimage-$version/; + } + else { + &success(); # invalid $loader.conf file + } + } + else { + &success(); # invalid $loader.conf file + } + } + close (LILO); + if ($WouldInvalidate) { + print STFERR "WARN: Proceeding with removing running kernel image.\n"; + &success(); + } +} + + +# set the env var stem +$ENV{'STEM'} = "linux"; + +sub exec_script { + my $type = shift; + my $script = shift; + print STDERR "Running $type hook script $script.\n"; + system ("$script $version $realimageloc$kimage-$version") && + print STDERR "User $type hook script [$script] "; + if ($?) { + if ($? == -1) { + print STDERR "failed to execute: $!\n"; + } + elsif ($? & 127) { + printf STDERR "died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + } + else { + printf STDERR "exited with value %d\n", $? >> 8; + } + exit $? >> 8; + } +} +sub run_hook { + my $type = shift; + my $script = shift; + if ($script =~ m,^/,) { + # Full path provided for the hook script + if (-x "$script") { + &exec_script($type,$script); + } + else { + die "The provided $type hook script [$script] could not be run.\n"; + } + } + else { + # Look for it in a safe path + for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') { + if (-x "$path/$script") { + &exec_script($type, "$path/$script"); + return 0; + } + } + # No luck + print STDERR "Could not find $type hook script [$script].\n"; + die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n"; + } +} + + +my $options; +for (@ARGV) { + s,','\\'',g; + $options .= " '$_'"; +} +$ENV{'DEB_MAINT_PARAMS'}="$options"; + +## Run user hook script here, if any +if (-x "$prerm_hook") { + &run_hook("prerm", $prerm_hook); +} +if (-d "/etc/kernel/prerm.d") { + print STDERR "Examining /etc/kernel/prerm.d.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version " . + "--arg=$realimageloc$kimage-$version /etc/kernel/prerm.d") && + die "Failed to process /etc/kernel/prerm.d"; +} +if (-d "/etc/kernel/prerm.d/$version") { + print STDERR "Examining /etc/kernel/prerm.d/$version.\n"; + system ("run-parts --verbose --exit-on-error --arg=$version" . + " --arg=$realimageloc$kimage-$version " . + "/etc/kernel/prerm.d/$version") && + die "Failed to process /etc/kernel/prerm.d/$version"; +} + +sub success () { + # NOTE: need to keep this list in sync with rules.d/2-binary-arch.mk + my %files_to_keep = ( + 'modules.builtin' => 1, + 'modules.order' => 1, + ); + my $short; + for my $file () { + $short = $file; $short =~ s,.*/,,; + if (!defined $files_to_keep{$short}) { + unlink "$file"; + } + } + exit 0; +} + + + +&success(); +exit 0; +__END__ + + + + + --- linux-aws-4.15.0.orig/debian/copyright +++ linux-aws-4.15.0/debian/copyright @@ -0,0 +1,29 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + 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; version 2 dated June, 1991. + + 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-aws-4.15.0.orig/debian/debian.env +++ linux-aws-4.15.0/debian/debian.env @@ -0,0 +1 @@ +DEBIAN=debian.aws --- linux-aws-4.15.0.orig/debian/docs/README.inclusion-list +++ linux-aws-4.15.0/debian/docs/README.inclusion-list @@ -0,0 +1,51 @@ +This README describes the reason for, and the use of, module +inclusion lists. + +The original Hardy release had the notion of sub-flavours, +e.g., a flavour that was constructed as a subset of an existing flavour. +For example, the virtual flavour was extracted from the server flavour using +a subset of the server flavour modules. However, there were some difficult +mainteneance issues with regard to packaging, make rules, and scripts. This +re-implementation of the sub-flavours philosophy is hopefully simpler, +and retrofitable to all releases. + +A module inclusion list looks at the problem of of constructing a package +from the perspective of what modules do we _want_ in the package, as opposed +to what modules we _don't_ want. As the kernel matures, more and more devices are added +which makes the problem of configuration maintenance a real pain in the ass. +If we took the approach of disabling all of the config options that we don't want, +then the differences between flavours will quickly become quite large, making +it difficult to quickly compare the individual flavour configs. Each time a +new config option is added then we also have to make a decision about disabling in +order to continue to keep the minimal number of modules. + +A module inclusion list is applied on a per-flavour basis. For example, +debian./control.d/${flavour}.inclusion-list. For example, the +config for virtual is very close to server and generic, but the inclusion list +causes the virtual package to be constructed with _only_ the modules described +in the inclusion list. + +The inclusion list format is a simple bash regular expression list of files. For example, + +arch/*/{crypto,kernel,oprofile} +drivers/acpi/* +drivers/ata/ahci.ko + +These 3 regular expression forms are suitable for expansion by bash and as inputs to 'find'. +See debian/scripts/module-inclusion for details. + +There are 2 log files created as a side effect of the application of the module +inclusion list; $(flavour).inclusion-list.log and $(flavour).depmod.log. + +$(flavour).inclusion-list.log : This log is created while the inclusion list +modules are being copied. If any are missing, then those warnings go in this log. +While its not considered a fatal error, you should endevour to correct your inclusion +list such that there are no missing modules. + +$(flavour).depmod.log : The log is created as a result of running depmod on the +resulting set of modules. If there are missing symbols then you'll find that information +here. Again, you should modify your inclusion list such that there are no missing +symbols. + +Tim Gardner +June 2, 2010 --- linux-aws-4.15.0.orig/debian/gbp.conf +++ linux-aws-4.15.0/debian/gbp.conf @@ -0,0 +1,2 @@ +[buildpackage] +debian-tag = Ubuntu-%(version)s --- linux-aws-4.15.0.orig/debian/linux-cloud-tools-common.hv-fcopy-daemon.service +++ linux-aws-4.15.0/debian/linux-cloud-tools-common.hv-fcopy-daemon.service @@ -0,0 +1,12 @@ +# On Azure/Hyper-V systems start the hv_fcopy_daemon +# +# author "Andy Whitcroft " +[Unit] +Description=Hyper-V File Copy Protocol Daemon +ConditionVirtualization=microsoft + +[Service] +ExecStart=/usr/sbin/hv_fcopy_daemon -n + +[Install] +WantedBy=multi-user.target --- linux-aws-4.15.0.orig/debian/linux-cloud-tools-common.hv-fcopy-daemon.upstart +++ linux-aws-4.15.0/debian/linux-cloud-tools-common.hv-fcopy-daemon.upstart @@ -0,0 +1,22 @@ +# On Azure/Hyper-V systems start the hv_fcopy_daemon +# +description "Hyper-V File Copy Protocol Daemon" +author "Andy Whitcroft " + +start on runlevel [2345] +stop on runlevel [!2345] +console log + +pre-start script + if [ -e "/etc/default/hv-kvp-daemon-init" ]; then + . /etc/default/hv-kvp-daemon-init + fi + [ "$RUN_FCOPY_DAEMON" -eq 0 ] && { stop; exit 0; } + if [ -d /sys/class/dmi/id/. ]; then + read company " +[Unit] +Description=Hyper-V KVP Protocol Daemon +ConditionVirtualization=microsoft + +[Service] +ExecStart=/usr/sbin/hv_kvp_daemon -n + +[Install] +WantedBy=multi-user.target --- linux-aws-4.15.0.orig/debian/linux-cloud-tools-common.hv-kvp-daemon.upstart +++ linux-aws-4.15.0/debian/linux-cloud-tools-common.hv-kvp-daemon.upstart @@ -0,0 +1,22 @@ +# On Azure/Hyper-V systems start the hv_kvp_daemon +# +description "Hyper-V KVP Protocol Daemon" +author "Adam Conrad " + +start on runlevel [2345] +stop on runlevel [!2345] +console log + +pre-start script + if [ -e "/etc/default/hv-kvp-daemon-init" ]; then + . /etc/default/hv-kvp-daemon-init + fi + [ "$RUN_KVP_DAEMON" = 0 ] && { stop; exit 0; } + if [ -d /sys/class/dmi/id/. ]; then + read company " +[Unit] +Description=Hyper-V VSS Protocol Daemon +ConditionVirtualization=microsoft + +[Service] +ExecStart=/usr/sbin/hv_vss_daemon -n + +[Install] +WantedBy=multi-user.target --- linux-aws-4.15.0.orig/debian/linux-cloud-tools-common.hv-vss-daemon.upstart +++ linux-aws-4.15.0/debian/linux-cloud-tools-common.hv-vss-daemon.upstart @@ -0,0 +1,22 @@ +# On Azure/Hyper-V systems start the hv_vss_daemon +# +description "Hyper-V VSS Protocol Daemon" +author "Ben Howard " + +start on runlevel [2345] +stop on runlevel [!2345] +console log + +pre-start script + if [ -e "/etc/default/hv-kvp-daemon-init" ]; then + . /etc/default/hv-kvp-daemon-init + fi + [ "$RUN_VSS_DAEMON" -eq 0 ] && { stop; exit 0; } + if [ -d /sys/class/dmi/id/. ]; then + read company +# + +DEBIAN=$(shell awk -F= '($$1 == "DEBIAN") { print $$2 }' >$(prev_abidir)/../modules.ignore) +endif + +# Either tools package needs the common source preparation +do_any_tools=$(sort $(filter-out false,$(do_linux_tools) $(do_cloud_tools))) + +# autopkgtest -- rebuild support +# only build the first flavour on the assumption it is representative +ifneq ($(filter autopkgtest,$(DEB_BUILD_PROFILES)),) +flavours := $(firstword $(flavours)) +disable_d_i=true +endif + +# Debian Build System targets +binary: binary-indep binary-arch + +build: build-arch build-indep + +clean: debian/control + dh_testdir + dh_testroot + dh_clean + + # d-i stuff + rm -rf $(DEBIAN)/d-i-$(arch) + # Generated on the fly. + rm -f $(DEBIAN)/d-i/firmware/$(arch)/kernel-image + + # normal build junk + rm -rf $(DEBIAN)/abi/$(release)-$(revision) + rm -rf $(builddir) + rm -f $(stampdir)/stamp-* + rm -rf $(DEBIAN)/linux-* + + # This gets rid of the d-i packages in control + cp -f $(DEBIAN)/control.stub $(DROOT)/control + cp $(DEBIAN)/changelog debian/changelog + + # Install the copyright information. + cp $(DEBIAN)/copyright debian/copyright + + # If we have a reconstruct script use it. + [ -f $(DEBIAN)/reconstruct ] && bash $(DEBIAN)/reconstruct + + # Remove generated intermediate files + rm -f $(DROOT)/control.stub $(DEBIAN)/control.stub + +distclean: clean + rm -rf $(DROOT)/control debian/changelog \ + debian/control debian/control.stub debian/copyright + +# Builds the image, arch headers and debug packages +include $(DROOT)/rules.d/2-binary-arch.mk + +# Rules for building the udebs ($(DEBIAN)-installer) +include $(DROOT)/rules.d/5-udebs.mk + +# Builds the source, doc and linux-headers indep packages +include $(DROOT)/rules.d/3-binary-indep.mk + +# Various checks to be performed on builds +include $(DROOT)/rules.d/4-checks.mk + +# Misc stuff +.PHONY: $(DEBIAN)/control.stub +$(DEBIAN)/control.stub: \ + $(DROOT)/scripts/control-create \ + $(DEBIAN)/control.stub.in \ + $(DEBIAN)/changelog \ + $(wildcard $(DEBIAN)/control.d/* $(DEBIAN)/sub-flavours/*.vars) + for i in $(DEBIAN)/control.stub.in; do \ + new=`echo $$i | sed 's/\.in$$//'`; \ + cat $$i | sed -e 's/PKGVER/$(release)/g' \ + -e 's/ABINUM/$(abinum)/g' \ + -e 's/SRCPKGNAME/$(src_pkg_name)/g' \ + -e 's/=HUMAN=/$(human_arch)/g' \ + > $$new; \ + done + flavours="$(sort $(wildcard $(DEBIAN)/control.d/vars.* $(DEBIAN)/sub-flavours/*.vars))";\ + for i in $$flavours; do \ + $(SHELL) $(DROOT)/scripts/control-create $$i | \ + sed -e 's/PKGVER/$(release)/g' \ + -e 's/ABINUM/$(abinum)/g' \ + -e 's/SRCPKGNAME/$(src_pkg_name)/g' \ + -e 's/=HUMAN=/$(human_arch)/g' \ + >> $(DEBIAN)/control.stub; \ + done + +.PHONY: debian/control +debian/control: $(DEBIAN)/control.stub + echo "# placebo control.stub for kernel-wedge flow change" >debian/control.stub + cp $(DEBIAN)/control.stub debian/control + export KW_DEFCONFIG_DIR=$(DEBIAN)/d-i && \ + export KW_CONFIG_DIR=$(DEBIAN)/d-i && \ + LANG=C kernel-wedge gen-control $(release)-$(abinum) | \ + perl -f $(DROOT)/scripts/misc/kernel-wedge-arch.pl $(arch) \ + >>$(CURDIR)/debian/control --- linux-aws-4.15.0.orig/debian/rules.d/0-common-vars.mk +++ linux-aws-4.15.0/debian/rules.d/0-common-vars.mk @@ -0,0 +1,251 @@ +# Used when you need to 'escape' a comma. +comma = , + +# +# The source package name will be the first token from $(DEBIAN)/changelog +# +src_pkg_name=$(shell sed -n '1s/^\(.*\) (.*).*$$/\1/p' $(DEBIAN)/changelog) + +# Get some version info +release := $(shell sed -n '1s/^$(src_pkg_name).*(\(.*\)-.*).*$$/\1/p' $(DEBIAN)/changelog) +revisions := $(shell sed -n 's/^$(src_pkg_name)\ .*($(release)-\(.*\)).*$$/\1/p' $(DEBIAN)/changelog | tac) +revision ?= $(word $(words $(revisions)),$(revisions)) +prev_revisions := $(filter-out $(revision),0.0 $(revisions)) +prev_revision := $(word $(words $(prev_revisions)),$(prev_revisions)) + +prev_fullver ?= $(shell dpkg-parsechangelog -l$(DEBIAN)/changelog -o1 -c1 | sed -ne 's/^Version: *//p') + +# Get upstream version info +upstream_version := $(shell sed -n 's/^VERSION = \(.*\)$$/\1/p' Makefile) +upstream_patchlevel := $(shell sed -n 's/^PATCHLEVEL = \(.*\)$$/\1/p' Makefile) +upstream_extraversion := $(shell sed -n 's/^EXTRAVERSION = \(.*\)$$/\1/p' Makefile) +upstream_tag := "v$(upstream_version).$(upstream_patchlevel)$(upstream_extraversion)" + +family=ubuntu + +# This is an internally used mechanism for the daily kernel builds. It +# creates packages whose ABI is suffixed with a minimal representation of +# the current git HEAD sha. If .git/HEAD is not present, then it uses the +# uuidgen program, +# +# AUTOBUILD can also be used by anyone wanting to build a custom kernel +# image, or rebuild the entire set of Ubuntu packages using custom patches +# or configs. +AUTOBUILD= + +ifneq ($(AUTOBUILD),) +skipabi = true +skipmodule = true +skipretpoline = true +skipdbg = true +gitver=$(shell if test -f .git/HEAD; then cat .git/HEAD; else uuidgen; fi) +gitverpre=$(shell echo $(gitver) | cut -b -3) +gitverpost=$(shell echo $(gitver) | cut -b 38-40) +abi_suffix = -$(gitverpre)$(gitverpost) +endif + +ifneq ($(NOKERNLOG),) +ubuntu_log_opts += --no-kern-log +endif +ifneq ($(PRINTSHAS),) +ubuntu_log_opts += --print-shas +endif + +# Get the kernels own extra version to be added to the release signature. +raw_kernelversion=$(shell make kernelversion) + +# +# full_build -- are we doing a full buildd style build +# +ifeq ($(wildcard /CurrentlyBuilding),) +full_build?=false +else +full_build?=true +endif + +# +# The debug packages are ginormous, so you probably want to skip +# building them (as a developer). +# +ifeq ($(full_build),false) +skipdbg=true +endif + +abinum := $(shell echo $(revision) | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$$/\1/')$(abi_suffix) +prev_abinum := $(shell echo $(prev_revision) | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$$/\1/')$(abi_suffix) +abi_release := $(release)-$(abinum) + +uploadnum := $(shell echo $(revision) | sed -r -e 's/[^\+~]*\.([^\.~]+(~.*)?(\+.*)?$$)/\1/') +ifneq ($(full_build),false) + uploadnum := $(uploadnum)-Ubuntu +endif + +# XXX: linux-libc-dev got bumped to -803.N inadvertantly by a ti-omap4 upload +# shift our version higher for this package only. Ensure this only +# occurs for the v2.6.35 kernel so that we do not propogate this into +# any other series. +raw_uploadnum := $(shell echo $(revision) | sed -e 's/.*\.//') +libc_dev_version := +ifeq ($(DEBIAN),debian.master) +ifeq ($(release),2.6.35) +libc_dev_version := -v$(release)-$(shell expr "$(abinum)" + 1000).$(raw_uploadnum) +endif +endif + +DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_BUILD_ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH) + +# +# Detect invocations of the form 'fakeroot debian/rules binary arch=armhf' +# within an x86'en schroot. This only gets you part of the way since the +# packaging phase fails, but you can at least compile the kernel quickly. +# +arch := $(DEB_HOST_ARCH) +ifneq ($(arch),$(DEB_HOST_ARCH)) + CROSS_COMPILE ?= $(shell dpkg-architecture -a$(arch) -qDEB_HOST_GNU_TYPE -f 2>/dev/null)- +endif + +# +# Detect invocations of the form 'dpkg-buildpackage -B -aarmhf' within +# an x86'en schroot. This is the only way to build all of the packages +# (except for tools). +# +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + CROSS_COMPILE ?= $(DEB_HOST_GNU_TYPE)- +endif + +abidir := $(CURDIR)/$(DEBIAN)/abi/$(release)-$(revision)/$(arch) +prev_abidir := $(CURDIR)/$(DEBIAN)/abi/$(release)-$(prev_revision)/$(arch) +commonconfdir := $(CURDIR)/$(DEBIAN)/config +archconfdir := $(CURDIR)/$(DEBIAN)/config/$(arch) +sharedconfdir := $(CURDIR)/debian.master/config +builddir := $(CURDIR)/debian/build +stampdir := $(CURDIR)/debian/stamps + +# +# The binary package name always starts with linux-image-$KVER-$ABI.$UPLOAD_NUM. There +# are places that you'll find linux-image hard coded, but I guess thats OK since the +# assumption that the binary package always starts with linux-image will never change. +# +bin_pkg_name=linux-image-$(abi_release) +extra_pkg_name=linux-image-extra-$(abi_release) +hdrs_pkg_name=linux-headers-$(abi_release) +indep_hdrs_pkg_name=$(src_pkg_name)-headers-$(abi_release) + +# +# The generation of content in the doc package depends on both 'AUTOBUILD=' and +# 'do_doc_package_content=true'. There are usually build errors during the development +# cycle, so its OK to leave 'do_doc_package_content=false' until those build +# failures get sorted out. Finally, the doc package doesn't really need to be built +# for developer testing (its kind of slow), so only do it if on a buildd. +do_doc_package=true +do_doc_package_content=true +ifeq ($(full_build),false) +do_doc_package_content=false +endif +doc_pkg_name=$(src_pkg_name)-doc + +# +# Similarly with the linux-source package, you need not build it as a developer. Its +# somewhat I/O intensive and utterly useless. +# +do_source_package=true +do_source_package_content=true +ifeq ($(full_build),false) +do_source_package_content=false +endif + +# linux-libc-dev may not be needed, default to building it. +do_libc_dev_package=true + +# common headers normally is built as an indep package, but may be arch +do_common_headers_indep=true + +# add a 'full source' mode +do_full_source=false + +# build tools +ifneq ($(wildcard $(CURDIR)/tools),) + ifeq ($(do_tools),) + ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + do_tools=false + endif + endif + do_tools?=true +else + do_tools?=false +endif +tools_pkg_name=$(src_pkg_name)-tools-$(abi_release) +tools_common_pkg_name=$(src_pkg_name)-tools-common +tools_flavour_pkg_name=linux-tools-$(abi_release) +cloud_pkg_name=$(src_pkg_name)-cloud-tools-$(abi_release) +cloud_common_pkg_name=$(src_pkg_name)-cloud-tools-common +cloud_flavour_pkg_name=linux-cloud-tools-$(abi_release) + +# The general flavour specific image package. +do_flavour_image_package=true + +# The general flavour specific header package. +do_flavour_header_package=true + +# DTBs +do_dtbs=false + +# Support parallel= in DEB_BUILD_OPTIONS (see #209008) +# +# These 2 environment variables set the -j value of the kernel build. For example, +# CONCURRENCY_LEVEL=16 fakeroot $(DEBIAN)/rules binary-debs +# or +# DEB_BUILD_OPTIONS=parallel=16 fakeroot $(DEBIAN)/rules binary-debs +# +# The default is to use the number of CPUs. +# +COMMA=, +DEB_BUILD_OPTIONS_PARA = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) +ifneq (,$(DEB_BUILD_OPTIONS_PARA)) + CONCURRENCY_LEVEL := $(DEB_BUILD_OPTIONS_PARA) +endif + +ifeq ($(CONCURRENCY_LEVEL),) + # Check the environment + CONCURRENCY_LEVEL := $(shell echo $$CONCURRENCY_LEVEL) + # No? Then build with the number of CPUs on the host. + ifeq ($(CONCURRENCY_LEVEL),) + CONCURRENCY_LEVEL := $(shell expr `getconf _NPROCESSORS_ONLN` \* 1) + endif + # Oh hell, give 'em one + ifeq ($(CONCURRENCY_LEVEL),) + CONCURRENCY_LEVEL := 1 + endif +endif + +conc_level = -j$(CONCURRENCY_LEVEL) + +# target_flavour is filled in for each step +kmake = make ARCH=$(build_arch) \ + CROSS_COMPILE=$(CROSS_COMPILE) \ + KERNELVERSION=$(abi_release)-$(target_flavour) \ + CONFIG_DEBUG_SECTION_MISMATCH=y \ + KBUILD_BUILD_VERSION="$(uploadnum)" \ + LOCALVERSION= localver-extra= \ + CFLAGS_MODULE="-DPKG_ABI=$(abinum)" +ifneq ($(LOCAL_ENV_CC),) +kmake += CC="$(LOCAL_ENV_CC)" DISTCC_HOSTS="$(LOCAL_ENV_DISTCC_HOSTS)" +endif + +# Locking is required in parallel builds to prevent loss of contents +# of the debian/files. +lockme_file = $(CURDIR)/debian/.LOCK +lockme_cmd = flock -w 60 +lockme = $(lockme_cmd) $(lockme_file) + +# Don't fail if a link already exists. +LN = ln -sf + +# Checks if a var is overriden by the custom rules. Called with var and +# flavour as arguments. +custom_override = \ + $(shell if [ -n "$($(1)_$(2))" ]; then echo "$($(1)_$(2))"; else echo "$($(1))"; fi) --- linux-aws-4.15.0.orig/debian/rules.d/1-maintainer.mk +++ linux-aws-4.15.0/debian/rules.d/1-maintainer.mk @@ -0,0 +1,136 @@ +# The following targets are for the maintainer only! do not run if you don't +# know what they do. + +.PHONY: printenv updateconfigs printchanges insertchanges startnewrelease diffupstream help updateportsconfigs editportsconfigs autoreconstruct + +help: + @echo "These are the targets in addition to the normal $(DEBIAN) ones:" + @echo + @echo " printenv : Print some variables used in the build" + @echo + @echo " updateconfigs : Update core arch configs" + @echo + @echo " editconfigs : Update core arch configs interractively" + @echo " genconfigs : Generate core arch configs in CONFIGS/*" + @echo + @echo " updateportsconfigs : Update ports arch configs" + @echo + @echo " editportsconfigs : Update ports arch configs interactivly" + @echo " genportconfigs : Generate ports arch configs in CONFIGS/*" + @echo + @echo " printchanges : Print the current changelog entries (from git)" + @echo + @echo " insertchanges : Insert current changelog entries (from git)" + @echo + @echo " startnewrelease : Start a new changelog set" + @echo + @echo " diffupstream : Diff stock kernel code against upstream (git)" + @echo + @echo " help : If you are kernel hacking, you need the professional" + @echo " version of this" + @echo + @echo "Environment variables:" + @echo + @echo " NOKERNLOG : Do not add upstream kernel commits to changelog" + @echo " CONCURRENCY_LEVEL=X" + @echo " : Use -jX for kernel compile" + @echo " PRINTSHAS : Include SHAs for commits in changelog" + +printdebian: + @echo "$(DEBIAN)" + +updateconfigs defaultconfigs editconfigs genconfigs dumpconfigs: + dh_testdir; + $(SHELL) $(DROOT)/scripts/misc/kernelconfig $@ + rm -rf build + +updateportsconfigs defaultportsconfigs editportsconfigs genportsconfigs askconfigs: + dh_testdir; + $(SHELL) $(DROOT)/scripts/misc/kernelconfig $@ ports + rm -rf build + +printenv: + dh_testdir + @echo "src package name = $(src_pkg_name)" + @echo "release = $(release)" + @echo "revisions = $(revisions)" + @echo "revision = $(revision)" + @echo "uploadnum = $(uploadnum)" + @echo "prev_revisions = $(prev_revisions)" + @echo "prev_revision = $(prev_revision)" + @echo "abinum = $(abinum)" + @echo "upstream_tag = $(upstream_tag)" + @echo "gitver = $(gitver)" + @echo "flavours = $(flavours)" + @echo "skipabi = $(skipabi)" + @echo "skipmodule = $(skipmodule)" + @echo "skipdbg = $(skipdbg)" + @echo "ubuntu_log_opts = $(ubuntu_log_opts)" + @echo "CONCURRENCY_LEVEL = $(CONCURRENCY_LEVEL)" + @echo "bin package name = $(bin_pkg_name)" + @echo "hdr package name = $(hdrs_pkg_name)" + @echo "doc package name = $(doc_pkg_name)" + @echo "do_doc_package = $(do_doc_package)" + @echo "do_doc_package_content = $(do_doc_package_content)" + @echo "do_source_package = $(do_source_package)" + @echo "do_source_package_content = $(do_source_package_content)" + @echo "do_libc_dev_package = $(do_libc_dev_package)" + @echo "do_flavour_image_package = $(do_flavour_image_package)" + @echo "do_flavour_header_package = $(do_flavour_header_package)" + @echo "do_common_headers_indep = $(do_common_headers_indep)" + @echo "do_full_source = $(do_full_source)" + @echo "do_tools = $(do_tools)" + @echo "do_any_tools = $(do_any_tools)" + @echo "do_linux_tools = $(do_linux_tools)" + @echo " do_tools_cpupower = $(do_tools_cpupower)" + @echo " do_tools_perf = $(do_tools_perf)" + @echo " do_tools_x86 = $(do_tools_x86)" + @echo "do_cloud_tools = $(do_cloud_tools)" + @echo " do_tools_hyperv = $(do_tools_hyperv)" + @echo "full_build = $(full_build)" + @echo "libc_dev_version = $(libc_dev_version)" + @echo "DEB_HOST_GNU_TYPE = $(DEB_HOST_GNU_TYPE)" + @echo "DEB_BUILD_GNU_TYPE = $(DEB_BUILD_GNU_TYPE)" + @echo "DEB_HOST_ARCH = $(DEB_HOST_ARCH)" + @echo "DEB_BUILD_ARCH = $(DEB_BUILD_ARCH)" + @echo "arch = $(arch)" + @echo "kmake = $(kmake)" + +printchanges: + @baseCommit=$$(git log --pretty=format:'%H %s' | \ + gawk '/UBUNTU: '".*Ubuntu-.*`echo $(prev_fullver) | sed 's/+/\\\\+/'`"'(~.*)?$$/ { print $$1; exit }'); \ + if [ -z "$$baseCommit" ]; then \ + echo "WARNING: couldn't find a commit for the previous version. Using the lastest one." >&2; \ + baseCommit=$$(git log --pretty=format:'%H %s' | \ + gawk '/UBUNTU:\s*Ubuntu-.*$$/ { print $$1; exit }'); \ + fi; \ + git log "$$baseCommit"..HEAD | \ + $(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts) + +insertchanges: autoreconstruct + @perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) + +autoreconstruct: + $(DROOT)/scripts/misc/gen-auto-reconstruct $(upstream_tag) $(DEBIAN)/reconstruct $(DROOT)/source/options + +diffupstream: + @git diff-tree -p refs/remotes/linux-2.6/master..HEAD $(shell ls | grep -vE '^(ubuntu|$(DEBIAN)|\.git.*)') + +startnewrelease: + dh_testdir + @nextminor=$(shell expr `echo $(revision) | gawk -F. '{print $$2}'` + 1); \ + nextmajor=$(shell expr `echo $(revision) | awk -F. '{print $$1}'` + 1); \ + now="$(shell date -R)"; \ + echo "Creating new changelog set for $(release)-$$nextmajor.$$nextminor..."; \ + echo -e "$(src_pkg_name) ($(release)-$$nextmajor.$$nextminor) UNRELEASED; urgency=medium\n" > $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Do not edit directly. Autogenerated at release." >> \ + $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Use the printchanges target to see the curent changes." \ + >> $(DEBIAN)/changelog.new; \ + echo " CHANGELOG: Use the insertchanges target to create the final log." \ + >> $(DEBIAN)/changelog.new; \ + echo -e "\n -- $$DEBFULLNAME <$$DEBEMAIL> $$now\n" >> \ + $(DEBIAN)/changelog.new ; \ + cat $(DEBIAN)/changelog >> $(DEBIAN)/changelog.new; \ + mv $(DEBIAN)/changelog.new $(DEBIAN)/changelog + --- linux-aws-4.15.0.orig/debian/rules.d/2-binary-arch.mk +++ linux-aws-4.15.0/debian/rules.d/2-binary-arch.mk @@ -0,0 +1,760 @@ +# We don't want make removing intermediary stamps +.SECONDARY : + +# Prepare the out-of-tree build directory +ifeq ($(do_full_source),true) +build_cd = cd $(builddir)/build-$*; # +build_O = +else +build_cd = +build_O = O=$(builddir)/build-$* +endif + +# Typically supplied from the arch makefile, e.g., debian.master/control.d/armhf.mk +ifneq ($(gcc),) +kmake += CC=$(CROSS_COMPILE)$(gcc) +endif + +shlibdeps_opts = $(if $(CROSS_COMPILE),-- -l$(CROSS_COMPILE:%-=/usr/%)/lib) + +$(stampdir)/stamp-prepare-%: config-prepare-check-% + @echo Debug: $@ + @touch $@ +$(stampdir)/stamp-prepare-tree-%: target_flavour = $* +$(stampdir)/stamp-prepare-tree-%: $(commonconfdir)/config.common.$(family) $(archconfdir)/config.common.$(arch) $(archconfdir)/config.flavour.% + @echo Debug: $@ + install -d $(builddir)/build-$* + touch $(builddir)/build-$*/ubuntu-build + [ "$(do_full_source)" != 'true' ] && true || \ + rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) * $(builddir)/build-$* + cat $^ | sed -e 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu $(release)-$(revision)-$* $(raw_kernelversion)"/' > $(builddir)/build-$*/.config + find $(builddir)/build-$* -name "*.ko" | xargs rm -f + $(build_cd) $(kmake) $(build_O) -j1 silentoldconfig prepare scripts + touch $@ + +# Used by developers as a shortcut to prepare a tree for compilation. +prepare-%: $(stampdir)/stamp-prepare-% + @echo Debug: $@ +# Used by developers to allow efficient pre-building without fakeroot. +build-%: $(stampdir)/stamp-build-% + @echo Debug: $@ + +define build_zfs = + # + # SPL/ZFS wants a fully built kernel before you can configure and build. + # It seems to be impossible to tease out the application configuration + # from the modules, but at least one can build just the modules. + # + install -d $(builddir)/build-$*/spl + rsync -a --exclude=dkms.conf --delete spl/ $(builddir)/build-$*/spl/ + cd $(builddir)/build-$*/spl; sh autogen.sh; sh configure $(splopts) + $(kmake) -C $(builddir)/build-$*/spl/module $(conc_level) + + install -d $(builddir)/build-$*/zfs + rsync -a --exclude=dkms.conf --delete zfs/ $(builddir)/build-$*/zfs/ + cd $(builddir)/build-$*/zfs; sh autogen.sh; sh configure $(zfsopts) + $(kmake) -C $(builddir)/build-$*/zfs/module $(conc_level) +endef + +# Do the actual build, including image and modules +$(stampdir)/stamp-build-%: target_flavour = $* +$(stampdir)/stamp-build-%: splopts = --with-linux=$(CURDIR) +$(stampdir)/stamp-build-%: splopts += --with-linux-obj=$(builddir)/build-$* +$(stampdir)/stamp-build-%: zfsopts = $(splopts) +$(stampdir)/stamp-build-%: zfsopts += --with-spl=$(builddir)/build-$*/spl +$(stampdir)/stamp-build-%: zfsopts += --with-spl-obj=$(builddir)/build-$*/spl +$(stampdir)/stamp-build-%: zfsopts += --prefix=/usr --with-config=kernel +$(stampdir)/stamp-build-%: bldimg = $(call custom_override,build_image,$*) +$(stampdir)/stamp-build-%: enable_zfs = $(call custom_override,do_zfs,$*) +$(stampdir)/stamp-build-%: $(stampdir)/stamp-prepare-% + @echo Debug: $@ build_image $(build_image) bldimg $(bldimg) + $(build_cd) $(kmake) $(build_O) $(conc_level) $(bldimg) modules $(if $(filter true,$(do_dtbs)),dtbs) + + $(if $(filter true,$(enable_zfs)),$(call build_zfs)) + + @touch $@ + +define install_zfs = + cd $(builddir)/build-$*/spl/module; \ + $(kmake) -C $(builddir)/build-$* SUBDIRS=`pwd` modules_install $(splopts) + cd $(builddir)/build-$*/zfs/module; \ + $(kmake) -C $(builddir)/build-$* SUBDIRS=`pwd` modules_install $(zfsopts) +endef + +# Install the finished build +install-%: pkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$* +install-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$* +install-%: bindoc = $(pkgdir)/usr/share/doc/$(bin_pkg_name)-$* +install-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym +install-%: signed = $(CURDIR)/debian/$(bin_pkg_name)-signed +install-%: toolspkgdir = $(CURDIR)/debian/$(tools_flavour_pkg_name)-$* +install-%: cloudpkgdir = $(CURDIR)/debian/$(cloud_flavour_pkg_name)-$* +install-%: basepkg = $(hdrs_pkg_name) +install-%: indeppkg = $(indep_hdrs_pkg_name) +install-%: kernfile = $(call custom_override,kernel_file,$*) +install-%: instfile = $(call custom_override,install_file,$*) +install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$* +install-%: target_flavour = $* +install-%: MODHASHALGO=sha512 +install-%: MODSECKEY=$(builddir)/build-$*/certs/signing_key.pem +install-%: MODPUBKEY=$(builddir)/build-$*/certs/signing_key.x509 +install-%: build_dir=$(builddir)/build-$* +install-%: enable_zfs = $(call custom_override,do_zfs,$*) +install-%: splopts = INSTALL_MOD_STRIP=1 +install-%: splopts += INSTALL_MOD_PATH=$(pkgdir)/ +install-%: splopts += INSTALL_MOD_DIR=kernel/zfs +install-%: splopts += $(conc_level) +install-%: zfsopts = $(splopts) +install-%: checks-% + @echo Debug: $@ kernel_file $(kernel_file) kernfile $(kernfile) install_file $(install_file) instfile $(instfile) + dh_testdir + dh_testroot + dh_prep -p$(bin_pkg_name)-$* + dh_prep -p$(hdrs_pkg_name)-$* +ifneq ($(skipdbg),true) + dh_prep -p$(bin_pkg_name)-$*-dbgsym +endif + + # The main image + # compress_file logic required because not all architectures + # generate a zImage automatically out of the box +ifeq ($(compress_file),) + install -m600 -D $(builddir)/build-$*/$(kernfile) \ + $(pkgdir)/boot/$(instfile)-$(abi_release)-$* +else + install -d $(pkgdir)/boot + gzip -c9v $(builddir)/build-$*/$(kernfile) > \ + $(pkgdir)/boot/$(instfile)-$(abi_release)-$* + chmod 600 $(pkgdir)/boot/$(instfile)-$(abi_release)-$* +endif + +ifeq ($(uefi_signed),true) + install -d $(signed)/$(release)-$(revision) + # Check to see if this supports handoff, if not do not sign it. + # Check the identification area magic and version >= 0x020b + handoff=`dd if="$(pkgdir)/boot/$(instfile)-$(abi_release)-$*" bs=1 skip=514 count=6 2>/dev/null | od -s | gawk '($$1 == 0 && $$2 == 25672 && $$3 == 21362 && $$4 >= 523) { print "GOOD" }'`; \ + if [ "$$handoff" = "GOOD" ]; then \ + cp -p $(pkgdir)/boot/$(instfile)-$(abi_release)-$* \ + $(signed)/$(release)-$(revision)/$(instfile)-$(abi_release)-$*.efi; \ + fi +endif + + install -m644 $(builddir)/build-$*/.config \ + $(pkgdir)/boot/config-$(abi_release)-$* + install -m644 $(abidir)/$* \ + $(pkgdir)/boot/abi-$(abi_release)-$* + install -m644 $(abidir)/$*.retpoline \ + $(pkgdir)/boot/retpoline-$(abi_release)-$* + install -m600 $(builddir)/build-$*/System.map \ + $(pkgdir)/boot/System.map-$(abi_release)-$* + if [ "$(filter true,$(do_dtbs))" ]; then \ + $(build_cd) $(kmake) $(build_O) $(conc_level) dtbs_install \ + INSTALL_DTBS_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$*/device-tree; \ + ( cd $(pkgdir)/lib/firmware/$(abi_release)-$*/ && find device-tree -print ) | \ + while read dtb_file; do \ + echo "$$dtb_file ?" >> $(DEBIAN)/d-i/firmware/$(arch)/kernel-image; \ + done; \ + fi +ifeq ($(no_dumpfile),) + makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \ + -x $(builddir)/build-$*/vmlinux + chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* +endif + + $(build_cd) $(kmake) $(build_O) $(conc_level) modules_install $(vdso) \ + INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \ + INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$* + + $(if $(filter true,$(enable_zfs)),$(call install_zfs)) + + # + # Build module blacklists: + # - blacklist all watchdog drivers (LP:1432837) + # + install -d $(pkgdir)/lib/modprobe.d + echo "# Kernel supplied blacklist for $(src_pkg_name) $(abi_release)-$* $(arch)" \ + >$(pkgdir)/lib/modprobe.d/blacklist_$(src_pkg_name)_$(abi_release)-$*.conf + for conf in $(arch)-$* $(arch) common.conf; do \ + if [ -f $(DEBIAN)/modprobe.d/$$conf ]; then \ + echo "# modprobe.d/$$conf"; \ + cat $(DEBIAN)/modprobe.d/$$conf; \ + fi; \ + done >>$(pkgdir)/lib/modprobe.d/blacklist_$(src_pkg_name)_$(abi_release)-$*.conf + echo "# Autogenerated watchdog blacklist" \ + >>$(pkgdir)/lib/modprobe.d/blacklist_$(src_pkg_name)_$(abi_release)-$*.conf + ls -1 $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/watchdog/ | \ + sed -e 's/^/blacklist /' -e 's/.ko$$//' | \ + sort -u \ + >>$(pkgdir)/lib/modprobe.d/blacklist_$(src_pkg_name)_$(abi_release)-$*.conf + +ifeq ($(do_extras_package),true) + # + # Remove all modules not in the inclusion list. + # + if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \ + /sbin/depmod -v -b $(pkgdir) $(abi_release)-$* | \ + sed -e "s@$(pkgdir)/lib/modules/$(abi_release)-$*/kernel/@@g" | \ + awk '{ print $$1 " " $$NF}' >$(build_dir)/module-inclusion.depmap; \ + mkdir -p $(pkgdir_ex)/lib/modules/$(abi_release)-$*; \ + mv $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \ + $(pkgdir_ex)/lib/modules/$(abi_release)-$*/kernel; \ + $(SHELL) $(DROOT)/scripts/module-inclusion --master \ + $(pkgdir_ex)/lib/modules/$(abi_release)-$*/kernel \ + $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \ + $(DEBIAN)/control.d/$(target_flavour).inclusion-list \ + $(build_dir)/module-inclusion.depmap 2>&1 | \ + tee $(target_flavour).inclusion-list.log; \ + /sbin/depmod -b $(pkgdir) -ea -F $(pkgdir)/boot/System.map-$(abi_release)-$* \ + $(abi_release)-$* 2>&1 |tee $(target_flavour).depmod.log; \ + if [ `grep -c 'unknown symbol' $(target_flavour).depmod.log` -gt 0 ]; then \ + echo "EE: Unresolved module dependencies in base package!"; \ + exit 1; \ + fi \ + fi +endif + +ifeq ($(no_dumpfile),) + makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \ + -x $(builddir)/build-$*/vmlinux + chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* +endif + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/build + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/source + + # Some initramfs-tools specific modules + install -d $(pkgdir)/lib/modules/$(abi_release)-$*/initrd + if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko ]; then\ + $(LN) $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko \ + $(pkgdir)/lib/modules/$(abi_release)-$*/initrd/; \ + fi + + # Now the image scripts + install -d $(pkgdir)/DEBIAN + for script in postinst postrm preinst prerm; do \ + sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(instfile)/g' \ + -e 's/=L/$(loader)/g' -e 's@=B@$(build_arch)@g' \ + $(DROOT)/control-scripts/$$script > $(pkgdir)/DEBIAN/$$script; \ + chmod 755 $(pkgdir)/DEBIAN/$$script; \ + done +ifeq ($(do_extras_package),true) + # Install the postinit/postrm scripts in the extras package. + if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \ + install -d $(pkgdir_ex)/DEBIAN; \ + for script in postinst postrm ; do \ + sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(instfile)/g' \ + -e 's/=L/$(loader)/g' -e 's@=B@$(build_arch)@g' \ + debian/control-scripts/extra-post > $(pkgdir_ex)/DEBIAN/$$script; \ + chmod 755 $(pkgdir_ex)/DEBIAN/$$script; \ + done; \ + fi +endif + + # Install the full changelog. +ifeq ($(do_doc_package),true) + install -d $(bindoc) + cat $(DEBIAN)/changelog $(DEBIAN)/changelog.historical | \ + gzip -9 >$(bindoc)/changelog.Debian.old.gz + chmod 644 $(bindoc)/changelog.Debian.old.gz +endif + +ifneq ($(skipsub),true) + for sub in $($(*)_sub); do \ + if ! (TO=$$sub FROM=$* ABI_RELEASE=$(abi_release) $(SHELL) \ + $(DROOT)/scripts/sub-flavour); then exit 1; fi; \ + /sbin/depmod -b debian/$(bin_pkg_name)-$$sub \ + -ea -F debian/$(bin_pkg_name)-$$sub/boot/System.map-$(abi_release)-$* \ + $(abi_release)-$*; \ + install -d debian/$(bin_pkg_name)-$$sub/DEBIAN; \ + for script in postinst postrm preinst prerm; do \ + sed -e 's/=V/$(abi_release)-$*/g' \ + -e 's/=K/$(instfile)/g' \ + -e 's/=L/$(loader)/g' \ + -e 's@=B@$(build_arch)@g' \ + $(DROOT)/control-scripts/$$script > \ + debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\ + chmod 755 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\ + done; \ + done +endif + +ifneq ($(skipdbg),true) + # Debug image is simple + install -m644 -D $(builddir)/build-$*/vmlinux \ + $(dbgpkgdir)/usr/lib/debug/boot/vmlinux-$(abi_release)-$* + $(build_cd) $(kmake) $(build_O) modules_install $(vdso) \ + INSTALL_MOD_PATH=$(dbgpkgdir)/usr/lib/debug + # Add .gnu_debuglink sections to each stripped .ko + # pointing to unstripped verson + find $(pkgdir) -name '*.ko' | sed 's|$(pkgdir)||'| while read module ; do \ + if [[ -f "$(dbgpkgdir)/usr/lib/debug/$$module" ]] ; then \ + $(CROSS_COMPILE)objcopy \ + --add-gnu-debuglink=$(dbgpkgdir)/usr/lib/debug/$$module \ + $(pkgdir)/$$module; \ + if grep -q CONFIG_MODULE_SIG=y $(builddir)/build-$*/.config; then \ + $(builddir)/build-$*/scripts/sign-file $(MODHASHALGO) \ + $(MODSECKEY) \ + $(MODPUBKEY) \ + $(pkgdir)/$$module; \ + fi; \ + fi; \ + done + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/build + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/source + rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/modules.* + rm -fr $(dbgpkgdir)/usr/lib/debug/lib/firmware +endif + + # The flavour specific headers image + # TODO: Would be nice if we didn't have to dupe the original builddir + install -d -m755 $(hdrdir) + cat $(builddir)/build-$*/.config | \ + sed -e 's/.*CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/g' > \ + $(hdrdir)/.config + chmod 644 $(hdrdir)/.config + $(kmake) O=$(hdrdir) -j1 silentoldconfig prepare scripts + # We'll symlink this stuff + rm -f $(hdrdir)/Makefile + rm -rf $(hdrdir)/include2 $(hdrdir)/source + # Copy over the compilation version. + cp "$(builddir)/build-$*/include/generated/compile.h" \ + "$(hdrdir)/include/generated/compile.h" + # Add UTS_UBUNTU_RELEASE_ABI since UTS_RELEASE is difficult to parse. + echo "#define UTS_UBUNTU_RELEASE_ABI $(abinum)" >> $(hdrdir)/include/generated/utsrelease.h + # powerpc kernel arch seems to need some .o files for external module linking. Add them in. +ifeq ($(build_arch),powerpc) + mkdir -p $(hdrdir)/arch/powerpc/lib + cp $(builddir)/build-$*/arch/powerpc/lib/*.o $(hdrdir)/arch/powerpc/lib +endif + # Script to symlink everything up + $(SHELL) $(DROOT)/scripts/link-headers "$(hdrdir)" "$(indeppkg)" "$*" + # The build symlink + install -d debian/$(basepkg)-$*/lib/modules/$(abi_release)-$* + $(LN) /usr/src/$(basepkg)-$* \ + debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*/build + # And finally the symvers + install -m644 $(builddir)/build-$*/Module.symvers \ + $(hdrdir)/Module.symvers + + # Now the header scripts + install -d $(CURDIR)/debian/$(basepkg)-$*/DEBIAN + for script in postinst; do \ + sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(instfile)/g' \ + $(DROOT)/control-scripts/headers-$$script > \ + $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \ + chmod 755 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \ + done + + # At the end of the package prep, call the tests + DPKG_ARCH="$(arch)" KERN_ARCH="$(build_arch)" FLAVOUR="$*" \ + VERSION="$(abi_release)" REVISION="$(revision)" \ + PREV_REVISION="$(prev_revision)" ABI_NUM="$(abinum)" \ + PREV_ABI_NUM="$(prev_abinum)" BUILD_DIR="$(builddir)/build-$*" \ + INSTALL_DIR="$(pkgdir)" SOURCE_DIR="$(CURDIR)" \ + run-parts -v $(DROOT)/tests-build + + # + # Remove files which are generated at installation by postinst, + # except for modules.order and modules.builtin + # + # NOTE: need to keep this list in sync with postrm + # + mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_ + mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.order \ + $(pkgdir)/lib/modules/$(abi_release)-$*/_ + if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin ] ; then \ + mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin \ + $(pkgdir)/lib/modules/$(abi_release)-$*/_; \ + fi + rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.* + mv $(pkgdir)/lib/modules/$(abi_release)-$*/_/* \ + $(pkgdir)/lib/modules/$(abi_release)-$* + rmdir $(pkgdir)/lib/modules/$(abi_release)-$*/_ + +ifeq ($(do_linux_tools),true) + # Create the linux-tools tool links + install -d $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +ifeq ($(do_tools_usbip),true) + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/usbip $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/usbipd $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +ifeq ($(do_tools_acpidbg),true) + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/acpidbg $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +ifeq ($(do_tools_cpupower),true) + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/cpupower $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +ifeq ($(do_tools_perf),true) + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/perf $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +ifeq ($(do_tools_x86),true) + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/x86_energy_perf_policy $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/turbostat $(toolspkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +endif +ifeq ($(do_cloud_tools),true) +ifeq ($(do_tools_hyperv),true) + # Create the linux-hyperv tool links + install -d $(cloudpkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/hv_kvp_daemon $(cloudpkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/hv_vss_daemon $(cloudpkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/hv_fcopy_daemon $(cloudpkgdir)/usr/lib/linux-tools/$(abi_release)-$* + $(LN) ../../$(src_pkg_name)-tools-$(abi_release)/lsvmbus $(cloudpkgdir)/usr/lib/linux-tools/$(abi_release)-$* +endif +endif + +headers_tmp := $(CURDIR)/debian/tmp-headers +headers_dir := $(CURDIR)/debian/linux-libc-dev + +hmake := $(MAKE) -C $(CURDIR) O=$(headers_tmp) \ + KERNELVERSION=$(abi_release) INSTALL_HDR_PATH=$(headers_tmp)/install \ + SHELL="$(SHELL)" ARCH=$(header_arch) + +install-arch-headers: + @echo Debug: $@ + dh_testdir + dh_testroot +ifeq ($(do_libc_dev_package),true) + dh_prep -plinux-libc-dev +endif + + rm -rf $(headers_tmp) + install -d $(headers_tmp) $(headers_dir)/usr/include/ + + $(hmake) $(defconfig) + mv $(headers_tmp)/.config $(headers_tmp)/.config.old + sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \ + -e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \ + $(headers_tmp)/.config.old > $(headers_tmp)/.config + $(hmake) silentoldconfig + $(hmake) headers_install + + ( cd $(headers_tmp)/install/include/ && \ + find . -name '.' -o -name '.*' -prune -o -print | \ + cpio -pvd --preserve-modification-time \ + $(headers_dir)/usr/include/ ) + mkdir $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH) + mv $(headers_dir)/usr/include/asm $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)/ + + rm -rf $(headers_tmp) + +binary-arch-headers: install-arch-headers + @echo Debug: $@ + dh_testdir + dh_testroot +ifeq ($(do_libc_dev_package),true) +ifneq ($(DEBIAN),debian.master) + echo "non-master branch building linux-libc-dev, aborting" + exit 1 +endif + dh_installchangelogs -plinux-libc-dev + dh_installdocs -plinux-libc-dev + dh_compress -plinux-libc-dev + dh_fixperms -plinux-libc-dev + dh_installdeb -plinux-libc-dev + $(lockme) dh_gencontrol -plinux-libc-dev -- $(libc_dev_version) + dh_md5sums -plinux-libc-dev + dh_builddeb -plinux-libc-dev +endif + +binary-%: pkgimg = $(bin_pkg_name)-$* +binary-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$* +binary-%: pkgimg_ex = $(extra_pkg_name)-$* +binary-%: pkghdr = $(hdrs_pkg_name)-$* +binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym +binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym +binary-%: pkgtools = $(tools_flavour_pkg_name)-$* +binary-%: pkgcloud = $(cloud_flavour_pkg_name)-$* +binary-%: rprovides = $(if $(filter true,$(call custom_override,do_zfs,$*)),$(comma) spl-modules$(comma) spl-dkms$(comma) zfs-modules$(comma) zfs-dkms) +binary-%: target_flavour = $* +binary-%: install-% + @echo Debug: $@ + dh_testdir + dh_testroot + + dh_installchangelogs -p$(pkgimg) + dh_installdocs -p$(pkgimg) + dh_compress -p$(pkgimg) + dh_fixperms -p$(pkgimg) -X/boot/ + dh_installdeb -p$(pkgimg) + dh_shlibdeps -p$(pkgimg) $(shlibdeps_opts) + $(lockme) dh_gencontrol -p$(pkgimg) -- -Vlinux:rprovides='$(rprovides)' + dh_md5sums -p$(pkgimg) + dh_builddeb -p$(pkgimg) + +ifeq ($(do_extras_package),true) + ifeq ($(ship_extras_package),false) + # If $(ship_extras_package) is explicitly set to false, then do not + # construct the linux-image-extra package; instead just log all of the + # "extra" modules which were pointlessly built yet won't be shipped. + find $(pkgdir_ex) -name '*.ko' | sort \ + | sed 's|^$(pkgdir_ex)/|NOT-SHIPPED |' \ + | tee -a $(target_flavour).not-shipped.log; + else + if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \ + dh_installchangelogs -p$(pkgimg_ex); \ + dh_installdocs -p$(pkgimg_ex); \ + dh_compress -p$(pkgimg_ex); \ + dh_fixperms -p$(pkgimg_ex) -X/boot/; \ + dh_installdeb -p$(pkgimg_ex); \ + dh_shlibdeps -p$(pkgimg_ex) $(shlibdeps_opts); \ + $(lockme) dh_gencontrol -p$(pkgimg_ex); \ + dh_md5sums -p$(pkgimg_ex); \ + dh_builddeb -p$(pkgimg_ex); \ + fi + endif +endif + + dh_installchangelogs -p$(pkghdr) + dh_installdocs -p$(pkghdr) + dh_compress -p$(pkghdr) + dh_fixperms -p$(pkghdr) + dh_shlibdeps -p$(pkghdr) $(shlibdeps_opts) + dh_installdeb -p$(pkghdr) + $(lockme) dh_gencontrol -p$(pkghdr) + dh_md5sums -p$(pkghdr) + dh_builddeb -p$(pkghdr) + +ifneq ($(skipsub),true) + @set -e; for sub in $($(*)_sub); do \ + pkg=$(bin_pkg_name)-$$sub; \ + dh_installchangelogs -p$$pkg; \ + dh_installdocs -p$$pkg; \ + dh_compress -p$$pkg; \ + dh_fixperms -p$$pkg -X/boot/; \ + dh_shlibdeps -p$$pkg $(shlibdeps_opts); \ + dh_installdeb -p$$pkg; \ + $(lockme) dh_gencontrol -p$$pkg; \ + dh_md5sums -p$$pkg; \ + dh_builddeb -p$$pkg; \ + done +endif + +ifneq ($(skipdbg),true) + dh_installchangelogs -p$(dbgpkg) + dh_installdocs -p$(dbgpkg) + dh_compress -p$(dbgpkg) + dh_fixperms -p$(dbgpkg) + dh_installdeb -p$(dbgpkg) + $(lockme) dh_gencontrol -p$(dbgpkg) + dh_md5sums -p$(dbgpkg) + dh_builddeb -p$(dbgpkg) + + # Hokay...here's where we do a little twiddling... + # Renaming the debug package prevents it from getting into + # the primary archive, and therefore prevents this very large + # package from being mirrored. It is instead, through some + # archive admin hackery, copied to http://ddebs.ubuntu.com. + # + mv ../$(dbgpkg)_$(release)-$(revision)_$(arch).deb \ + ../$(dbgpkg)_$(release)-$(revision)_$(arch).ddeb + set -e; \ + ( \ + $(lockme_cmd) 9 || exit 1; \ + if grep -qs '^Build-Debug-Symbols: yes$$' /CurrentlyBuilding; then \ + sed -i '/^$(dbgpkg)_/s/\.deb /.ddeb /' debian/files; \ + else \ + grep -v '^$(dbgpkg)_.*$$' debian/files > debian/files.new; \ + mv debian/files.new debian/files; \ + fi; \ + ) 9>$(lockme_file) + # Now, the package wont get into the archive, but it will get put + # into the debug system. +endif + +ifeq ($(do_linux_tools),true) + dh_installchangelogs -p$(pkgtools) + dh_installdocs -p$(pkgtools) + dh_compress -p$(pkgtools) + dh_fixperms -p$(pkgtools) + dh_shlibdeps -p$(pkgtools) $(shlibdeps_opts) + dh_installdeb -p$(pkgtools) + $(lockme) dh_gencontrol -p$(pkgtools) + dh_md5sums -p$(pkgtools) + dh_builddeb -p$(pkgtools) +endif +ifeq ($(do_cloud_tools),true) + dh_installchangelogs -p$(pkgcloud) + dh_installdocs -p$(pkgcloud) + dh_compress -p$(pkgcloud) + dh_fixperms -p$(pkgcloud) + dh_shlibdeps -p$(pkgcloud) $(shlibdeps_opts) + dh_installdeb -p$(pkgcloud) + $(lockme) dh_gencontrol -p$(pkgcloud) + dh_md5sums -p$(pkgcloud) + dh_builddeb -p$(pkgcloud) +endif + +ifneq ($(full_build),false) + # Clean out this flavours build directory. + rm -rf $(builddir)/build-$* + # Clean out the debugging package source directory. + rm -rf $(dbgpkgdir) +endif + +# +# per-architecture packages +# +builddirpa = $(builddir)/tools-perarch + +$(stampdir)/stamp-prepare-perarch: + @echo Debug: $@ +ifeq ($(do_any_tools),true) + rm -rf $(builddirpa) + install -d $(builddirpa) + rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) --exclude .git -a ./ $(builddirpa)/ +endif + touch $@ + +$(stampdir)/stamp-build-perarch: $(stampdir)/stamp-prepare-perarch install-arch-headers + @echo Debug: $@ +ifeq ($(do_linux_tools),true) +ifeq ($(do_tools_usbip),true) + chmod 755 $(builddirpa)/tools/usb/usbip/autogen.sh + cd $(builddirpa)/tools/usb/usbip && ./autogen.sh + chmod 755 $(builddirpa)/tools/usb/usbip/configure + cd $(builddirpa)/tools/usb/usbip && ./configure --prefix=$(builddirpa)/tools/usb/usbip/bin + cd $(builddirpa)/tools/usb/usbip && make install CFLAGS="-g -O2 -static" CROSS_COMPILE=$(CROSS_COMPILE) +endif +ifeq ($(do_tools_acpidbg),true) + cd $(builddirpa)/tools/power/acpi && make clean && make CFLAGS="-g -O2 -static -I$(builddirpa)/include" CROSS_COMPILE=$(CROSS_COMPILE) acpidbg +endif +ifeq ($(do_tools_cpupower),true) + # Allow for multiple installed versions of cpupower and libcpupower.so: + # Override LIB_MIN in order to to generate a versioned .so named + # libcpupower.so.$(abi_release) and link cpupower with that. + make -C $(builddirpa)/tools/power/cpupower \ + CROSS_COMPILE=$(CROSS_COMPILE) \ + CROSS=$(CROSS_COMPILE) \ + LIB_MIN=$(abi_release) CPUFREQ_BENCH=false +endif +ifeq ($(do_tools_perf),true) + cd $(builddirpa) && $(kmake) $(defconfig) + mv $(builddirpa)/.config $(builddirpa)/.config.old + sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \ + -e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \ + $(builddirpa)/.config.old > $(builddirpa)/.config + cd $(builddirpa) && $(kmake) silentoldconfig + cd $(builddirpa) && $(kmake) prepare + cd $(builddirpa)/tools/perf && \ + $(kmake) prefix=/usr HAVE_NO_LIBBFD=1 HAVE_CPUS_DEMANGLE_SUPPORT=1 CROSS_COMPILE=$(CROSS_COMPILE) NO_LIBPYTHON=1 NO_LIBPERL=1 PYTHON=python2.7 +endif +ifeq ($(do_tools_x86),true) + cd $(builddirpa)/tools/power/x86/x86_energy_perf_policy && make CROSS_COMPILE=$(CROSS_COMPILE) + cd $(builddirpa)/tools/power/x86/turbostat && make CROSS_COMPILE=$(CROSS_COMPILE) +endif +endif +ifeq ($(do_cloud_tools),true) +ifeq ($(do_tools_hyperv),true) + cd $(builddirpa)/tools/hv && make CFLAGS="-I$(headers_dir)/usr/include -I$(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)" CROSS_COMPILE=$(CROSS_COMPILE) hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon +endif +endif + @touch $@ + +install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name) +install-perarch: cloudpkgdir = $(CURDIR)/debian/$(cloud_pkg_name) +install-perarch: $(stampdir)/stamp-build-perarch + @echo Debug: $@ + # Add the tools. +ifeq ($(do_linux_tools),true) + install -d $(toolspkgdir)/usr/lib + install -d $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +ifeq ($(do_tools_usbip),true) + install -m755 $(builddirpa)/tools/usb/usbip/bin/sbin/usbip \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/usb/usbip/bin/sbin/usbipd \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +endif +ifeq ($(do_tools_acpidbg),true) + install -m755 $(builddirpa)/tools/power/acpi/acpidbg \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +endif +ifeq ($(do_tools_cpupower),true) + install -m755 $(builddirpa)/tools/power/cpupower/cpupower \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + # Install only the full versioned libcpupower.so.$(abi_release), not + # the usual symlinks to it. + install -m644 $(builddirpa)/tools/power/cpupower/libcpupower.so.$(abi_release) \ + $(toolspkgdir)/usr/lib/ +endif +ifeq ($(do_tools_perf),true) + install -m755 $(builddirpa)/tools/perf/perf $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +endif +ifeq ($(do_tools_x86),true) + install -m755 $(builddirpa)/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/power/x86/turbostat/turbostat \ + $(toolspkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +endif +endif +ifeq ($(do_cloud_tools),true) +ifeq ($(do_tools_hyperv),true) + install -d $(cloudpkgdir)/usr/lib + install -d $(cloudpkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/hv/hv_kvp_daemon \ + $(cloudpkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/hv/hv_vss_daemon \ + $(cloudpkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/hv/hv_fcopy_daemon \ + $(cloudpkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) + install -m755 $(builddirpa)/tools/hv/lsvmbus \ + $(cloudpkgdir)/usr/lib/$(src_pkg_name)-tools-$(abi_release) +endif +endif + +binary-perarch: toolspkg = $(tools_pkg_name) +binary-perarch: cloudpkg = $(cloud_pkg_name) +binary-perarch: install-perarch + @echo Debug: $@ +ifeq ($(do_linux_tools),true) + dh_strip -p$(toolspkg) + dh_installchangelogs -p$(toolspkg) + dh_installdocs -p$(toolspkg) + dh_compress -p$(toolspkg) + dh_fixperms -p$(toolspkg) + dh_shlibdeps -p$(toolspkg) $(shlibdeps_opts) + dh_installdeb -p$(toolspkg) + $(lockme) dh_gencontrol -p$(toolspkg) + dh_md5sums -p$(toolspkg) + dh_builddeb -p$(toolspkg) +endif +ifeq ($(do_cloud_tools),true) + dh_strip -p$(cloudpkg) + dh_installchangelogs -p$(cloudpkg) + dh_installdocs -p$(cloudpkg) + dh_compress -p$(cloudpkg) + dh_fixperms -p$(cloudpkg) + dh_shlibdeps -p$(cloudpkg) $(shlibdeps_opts) + dh_installdeb -p$(cloudpkg) + $(lockme) dh_gencontrol -p$(cloudpkg) + dh_md5sums -p$(cloudpkg) + dh_builddeb -p$(cloudpkg) +endif + +binary-debs: signed = $(CURDIR)/debian/$(bin_pkg_name)-signed +binary-debs: signedv = $(CURDIR)/debian/$(bin_pkg_name)-signed/$(release)-$(revision) +binary-debs: signed_tar = $(src_pkg_name)_$(release)-$(revision)_$(arch).tar.gz +binary-debs: binary-perarch $(addprefix binary-,$(flavours)) + @echo Debug: $@ +ifeq ($(uefi_signed),true) + echo $(release)-$(revision) > $(signedv)/version + cd $(signedv) && ls *.efi >flavours + cd $(signed) && tar czvf ../../../$(signed_tar) . + dpkg-distaddfile $(signed_tar) raw-uefi - +endif + +build-arch-deps-$(do_flavour_image_package) += $(addprefix $(stampdir)/stamp-build-,$(flavours)) +build-arch: $(build-arch-deps-true) + @echo Debug: $@ + +ifeq ($(AUTOBUILD),) +binary-arch-deps-$(do_flavour_image_package) += binary-udebs +else +binary-arch-deps-$(do_flavour_image_package) = binary-debs +endif +binary-arch-deps-$(do_libc_dev_package) += binary-arch-headers +ifneq ($(do_common_headers_indep),true) +binary-arch-deps-$(do_flavour_header_package) += binary-headers +endif +binary-arch: $(binary-arch-deps-true) + @echo Debug: $@ + --- linux-aws-4.15.0.orig/debian/rules.d/3-binary-indep.mk +++ linux-aws-4.15.0/debian/rules.d/3-binary-indep.mk @@ -0,0 +1,180 @@ +build-indep: + @echo Debug: $@ + +# The binary-indep dependency chain is: +# +# install-headers <- install-doc <- install-source <- install-tools <- install-indep <- binary-indep +# install-headers <- binary-headers +# +indep_hdrpkg = $(indep_hdrs_pkg_name) +indep_hdrdir = $(CURDIR)/debian/$(indep_hdrpkg)/usr/src/$(indep_hdrpkg) +install-headers: + @echo Debug: $@ + dh_testdir + dh_testroot + dh_prep + +ifeq ($(do_flavour_header_package),true) + install -d $(indep_hdrdir) + find . -path './debian' -prune -o -path './$(DEBIAN)' -prune \ + -o -path './include/*' -prune \ + -o -path './scripts/*' -prune -o -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ + -print | cpio -pd --preserve-modification-time $(indep_hdrdir) + cp -a scripts include $(indep_hdrdir) + (find arch -name include -type d -print | \ + xargs -n1 -i: find : -type f) | \ + cpio -pd --preserve-modification-time $(indep_hdrdir) +endif + +docpkg = $(doc_pkg_name) +docdir = $(CURDIR)/debian/$(docpkg)/usr/share/doc/$(docpkg) +install-doc: install-headers + @echo Debug: $@ +ifeq ($(do_doc_package),true) + dh_testdir + dh_testroot + + install -d $(docdir) +ifeq ($(do_doc_package_content),true) + # First the html docs. We skip these for autobuilds + if [ -z "$(AUTOBUILD)" ]; then \ + install -d $(docdir)/$(doc_pkg_name)-tmp; \ + $(kmake) O=$(docdir)/$(doc_pkg_name)-tmp htmldocs; \ + install -d $(docdir)/html; \ + rsync -aL $(docdir)/$(doc_pkg_name)-tmp/Documentation/output/ \ + $(docdir)/html/; \ + rm -rf $(docdir)/$(doc_pkg_name)-tmp; \ + fi +endif + # Copy the rest + cp -a Documentation/* $(docdir) + find $(docdir) -name .gitignore | xargs rm -f +endif + +srcpkg = linux-source-$(release) +srcdir = $(CURDIR)/debian/$(srcpkg)/usr/src/$(srcpkg) +balldir = $(CURDIR)/debian/$(srcpkg)/usr/src/$(srcpkg)/$(srcpkg) +install-source: install-doc + @echo Debug: $@ +ifeq ($(do_source_package),true) + + install -d $(srcdir) +ifeq ($(do_source_package_content),true) + find . -path './debian' -prune -o -path './$(DEBIAN)' -prune -o \ + -path './.*' -prune -o -print | \ + cpio -pd --preserve-modification-time $(balldir) + (cd $(srcdir); tar cf - $(srcpkg)) | bzip2 -9c > \ + $(srcdir)/$(srcpkg).tar.bz2 + rm -rf $(balldir) + find './debian' './$(DEBIAN)' \ + -path './debian/linux-*' -prune -o \ + -path './debian/$(src_pkg_name)-*' -prune -o \ + -path './debian/build' -prune -o \ + -path './debian/files' -prune -o \ + -path './debian/stamps' -prune -o \ + -path './debian/tmp' -prune -o \ + -print | \ + cpio -pd --preserve-modification-time $(srcdir) + $(LN) $(srcpkg)/$(srcpkg).tar.bz2 $(srcdir)/.. +endif +endif + +install-tools: toolspkg = $(tools_common_pkg_name) +install-tools: toolsbin = $(CURDIR)/debian/$(toolspkg)/usr/bin +install-tools: toolssbin = $(CURDIR)/debian/$(toolspkg)/usr/sbin +install-tools: toolsman = $(CURDIR)/debian/$(toolspkg)/usr/share/man +install-tools: cloudpkg = $(cloud_common_pkg_name) +install-tools: cloudbin = $(CURDIR)/debian/$(cloudpkg)/usr/bin +install-tools: cloudsbin = $(CURDIR)/debian/$(cloudpkg)/usr/sbin +install-tools: cloudman = $(CURDIR)/debian/$(cloudpkg)/usr/share/man +install-tools: install-source $(stampdir)/stamp-build-perarch + @echo Debug: $@ + +ifeq ($(do_tools_common),true) + rm -rf $(builddir)/tools + install -d $(builddir)/tools + for i in *; do $(LN) $(CURDIR)/$$i $(builddir)/tools/; done + rm $(builddir)/tools/tools + rsync -a tools/ $(builddir)/tools/tools/ + + install -d $(toolsbin) + install -d $(toolsman)/man1 + + install -m755 debian/tools/generic $(toolsbin)/usbip + install -m755 debian/tools/generic $(toolsbin)/usbipd + install -m644 $(CURDIR)/tools/usb/usbip/doc/*.8 $(toolsman)/man1/ + + install -m755 debian/tools/generic $(toolsbin)/cpupower + install -m644 $(CURDIR)/tools/power/cpupower/man/*.1 $(toolsman)/man1/ + + install -m755 debian/tools/generic $(toolsbin)/perf + + install -m755 debian/tools/generic $(toolsbin)/x86_energy_perf_policy + install -m755 debian/tools/generic $(toolsbin)/turbostat + + cd $(builddir)/tools/tools/perf && make man + install -m644 $(builddir)/tools/tools/perf/Documentation/*.1 \ + $(toolsman)/man1 + + install -d $(toolsman)/man8 + install -m644 $(CURDIR)/tools/power/x86/x86_energy_perf_policy/*.8 $(toolsman)/man8 + install -m644 $(CURDIR)/tools/power/x86/turbostat/*.8 $(toolsman)/man8 + + install -d $(cloudsbin) + install -m755 debian/tools/generic $(cloudsbin)/hv_kvp_daemon + install -m755 debian/tools/generic $(cloudsbin)/hv_vss_daemon + install -m755 debian/tools/generic $(cloudsbin)/hv_fcopy_daemon + install -m755 debian/tools/generic $(cloudsbin)/lsvmbus + install -m755 debian/cloud-tools/hv_get_dhcp_info $(cloudsbin) + install -m755 debian/cloud-tools/hv_get_dns_info $(cloudsbin) + install -m755 debian/cloud-tools/hv_set_ifconfig $(cloudsbin) + + install -d $(cloudman)/man8 + install -m644 $(CURDIR)/tools/hv/*.8 $(cloudman)/man8 + +ifeq ($(do_tools_acpidbg),true) + install -m755 debian/tools/generic $(toolsbin)/acpidbg +endif + +endif + +install-indep: install-tools + @echo Debug: $@ + +# This is just to make it easy to call manually. Normally done in +# binary-indep target during builds. +binary-headers: install-headers + @echo Debug: $@ + dh_installchangelogs -p$(indep_hdrpkg) + dh_installdocs -p$(indep_hdrpkg) + dh_compress -p$(indep_hdrpkg) + dh_fixperms -p$(indep_hdrpkg) + dh_installdeb -p$(indep_hdrpkg) + $(lockme) dh_gencontrol -p$(indep_hdrpkg) + dh_md5sums -p$(indep_hdrpkg) + dh_builddeb -p$(indep_hdrpkg) + +binary-indep: cloudpkg = $(cloud_common_pkg_name) +binary-indep: install-indep + @echo Debug: $@ + + dh_installchangelogs -i + dh_installdocs -i + dh_compress -i + dh_fixperms -i +ifeq ($(do_tools_common),true) + dh_installinit -p$(cloudpkg) -n --name hv-kvp-daemon + dh_installinit -p$(cloudpkg) -n --name hv-vss-daemon + dh_installinit -p$(cloudpkg) -n --name hv-fcopy-daemon + dh_systemd_enable -p$(cloudpkg) + dh_installinit -p$(cloudpkg) -o --name hv-kvp-daemon + dh_installinit -p$(cloudpkg) -o --name hv-vss-daemon + dh_installinit -p$(cloudpkg) -o --name hv-fcopy-daemon + dh_systemd_start -p$(cloudpkg) +endif + dh_installdeb -i + $(lockme) dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i --- linux-aws-4.15.0.orig/debian/rules.d/4-checks.mk +++ linux-aws-4.15.0/debian/rules.d/4-checks.mk @@ -0,0 +1,40 @@ +# Check ABI for package against last release (if not same abinum) +abi-check-%: $(stampdir)/stamp-build-% + @echo Debug: $@ + install -d $(abidir) + sed -e 's/^\(.\+\)[[:space:]]\+\(.\+\)[[:space:]]\(.\+\)$$/\3 \2 \1/' \ + $(builddir)/build-$*/Module.symvers | sort > $(abidir)/$* + @perl -f $(DROOT)/scripts/abi-check "$*" "$(prev_abinum)" "$(abinum)" \ + "$(prev_abidir)" "$(abidir)" "$(skipabi)" + +# Check the module list against the last release (always) +module-check-%: $(stampdir)/stamp-build-% + @echo Debug: $@ + install -d $(abidir) + find $(builddir)/build-$*/ -name \*.ko | \ + sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > $(abidir)/$*.modules + @perl -f $(DROOT)/scripts/module-check "$*" \ + "$(prev_abidir)" "$(abidir)" $(skipmodule) + +# Check the reptoline jmp/call functions against the last release. +retpoline-check-%: $(stampdir)/stamp-build-% + @echo Debug: $@ + install -d $(abidir) + if grep -q CONFIG_RETPOLINE=y $(builddir)/build-$*/.config; then \ + $(SHELL) $(DROOT)/scripts/retpoline-extract $(builddir)/build-$* | \ + sort >$(abidir)/$*.retpoline; \ + else \ + echo "# RETPOLINE NOT ENABLED" >$(abidir)/$*.retpoline; \ + fi + $(SHELL) $(DROOT)/scripts/retpoline-check "$*" \ + "$(prev_abidir)" "$(abidir)" "$(skipretpoline)" + +checks-%: module-check-% abi-check-% retpoline-check-% + @echo Debug: $@ + +# Check the config against the known options list. +config-prepare-check-%: $(stampdir)/stamp-prepare-tree-% + @echo Debug: $@ + @perl -f $(DROOT)/scripts/config-check \ + $(builddir)/build-$*/.config "$(arch)" "$*" "$(commonconfdir)" "$(skipconfig)" + --- linux-aws-4.15.0.orig/debian/rules.d/5-udebs.mk +++ linux-aws-4.15.0/debian/rules.d/5-udebs.mk @@ -0,0 +1,77 @@ +# Do udebs if not disabled in the arch-specific makefile +binary-udebs: binary-debs + @echo Debug: $@ +ifeq ($(disable_d_i),) + @$(MAKE) --no-print-directory -f $(DROOT)/rules DEBIAN=$(DEBIAN) \ + do-binary-udebs +endif + +do-binary-udebs: linux_udeb_name=$(shell if echo $(src_pkg_name)|egrep -q '(linux-lts|linux-hwe)'; then echo $(src_pkg_name); else echo linux; fi) +do-binary-udebs: debian/control + @echo Debug: $@ + dh_testdir + dh_testroot + + # unpack the kernels into a temporary directory + mkdir -p debian/d-i-${arch} + + imagelist=$$(cat $(CURDIR)/$(DEBIAN)/d-i/kernel-versions | grep ^${arch} | gawk '{print $$3}') && \ + for f in $$imagelist; do \ + i=$(release)-$(abinum)-$$f; \ + dpkg -x $$(ls ../linux-image-$$i\_$(release)-$(revision)_${arch}.deb) \ + debian/d-i-${arch}; \ + if [ -f ../linux-image-extra-$$i\_$(release)-$(revision)_${arch}.deb ] ; then \ + dpkg -x ../linux-image-extra-$$i\_$(release)-$(revision)_${arch}.deb \ + debian/d-i-${arch}; \ + fi; \ + /sbin/depmod -b debian/d-i-${arch} $$i; \ + done + + # kernel-wedge will error if no modules unless this is touched + touch $(DEBIAN)/d-i/no-modules + + touch $(CURDIR)/$(DEBIAN)/d-i/ignore-dups + export KW_DEFCONFIG_DIR=$(CURDIR)/$(DEBIAN)/d-i && \ + export KW_CONFIG_DIR=$(CURDIR)/$(DEBIAN)/d-i && \ + export SOURCEDIR=$(CURDIR)/debian/d-i-${arch} && \ + kernel-wedge install-files $(release)-$(abinum) && \ + kernel-wedge check + + # Build just the udebs + dilist=$$(dh_listpackages -s | grep "\-di$$") && \ + [ -z "$dilist" ] || \ + for i in $$dilist; do \ + dh_fixperms -p$$i; \ + $(lockme) dh_gencontrol -p$$i; \ + dh_builddeb -p$$i; \ + done + + # Generate the meta-udeb dependancy lists. + @gawk ' \ + /^Package:/ { \ + package=$$2; flavour=""; parch="" } \ + (/Package-Type: udeb/ && package !~ /^$(linux_udeb_name)-udebs-/) { \ + match(package, "'$(release)'-'$(abinum)'-(.*)-di", bits); \ + flavour = bits[1]; \ + } \ + (/^Architecture:/ && $$0 " " ~ / '$(arch)'/) { \ + parch=$$0; \ + } \ + (flavour != "" && parch != "") { \ + udebs[flavour] = udebs[flavour] package ", "; \ + flavour=""; parch=""; \ + } \ + END { \ + for (flavour in udebs) { \ + package="$(linux_udeb_name)-udebs-" flavour; \ + file="debian/" package ".substvars"; \ + print("udeb:Depends=" udebs[flavour]) > file; \ + metas="'$(builddir)'/udeb-meta-packages"; \ + print(package) >metas \ + } \ + } \ + ' <$(CURDIR)/debian/control + @while read i; do \ + $(lockme) dh_gencontrol -p$$i; \ + dh_builddeb -p$$i; \ + done <$(builddir)/udeb-meta-packages --- linux-aws-4.15.0.orig/debian/scripts/abi-check +++ linux-aws-4.15.0/debian/scripts/abi-check @@ -0,0 +1,210 @@ +#!/usr/bin/perl -w + +my $flavour = shift; +my $prev_abinum = shift; +my $abinum = shift; +my $prev_abidir = shift; +my $abidir = shift; +my $skipabi = shift; + +my $fail_exit = 1; +my $EE = "EE:"; +my $errors = 0; +my $abiskip = 0; + +my $count; + +print "II: Checking ABI for $flavour...\n"; + +if (-f "$prev_abidir/ignore" + or -f "$prev_abidir/$flavour.ignore" or "$skipabi" eq "true") { + print "WW: Explicitly asked to ignore ABI, running in no-fail mode\n"; + $fail_exit = 0; + $abiskip = 1; + $EE = "WW:"; +} + +if ($prev_abinum != $abinum) { + print "II: Different ABI's, running in no-fail mode\n"; + $fail_exit = 0; + $EE = "WW:"; +} + +if (not -f "$abidir/$flavour" or not -f "$prev_abidir/$flavour") { + print "EE: Previous or current ABI file missing!\n"; + print " $abidir/$flavour\n" if not -f "$abidir/$flavour"; + print " $prev_abidir/$flavour\n" if not -f "$prev_abidir/$flavour"; + + # Exit if the ABI files are missing, but return status based on whether + # skip ABI was indicated. + if ("$abiskip" eq "1") { + exit(0); + } else { + exit(1); + } +} + +my %symbols; +my %symbols_ignore; +my %modules_ignore; +my %module_syms; + +# See if we have any ignores +my $ignore = 0; +print " Reading symbols/modules to ignore..."; + +for $file ("$prev_abidir/../blacklist", "$prev_abidir/../../perm-blacklist") { + if (-f $file) { + open(IGNORE, "< $file") or + die "Could not open $file"; + while () { + chomp; + if ($_ =~ m/M: (.*)/) { + $modules_ignore{$1} = 1; + } else { + $symbols_ignore{$_} = 1; + } + $ignore++; + } + close(IGNORE); + } +} +print "read $ignore symbols/modules.\n"; + +sub is_ignored($$) { + my ($mod, $sym) = @_; + + die "Missing module name in is_ignored()" if not defined($mod); + die "Missing symbol name in is_ignored()" if not defined($sym); + + if (defined($symbols_ignore{$sym}) or defined($modules_ignore{$mod})) { + return 1; + } + return 0; +} + +# Read new syms first +print " Reading new symbols ($abinum)..."; +$count = 0; +open(NEW, "< $abidir/$flavour") or + die "Could not open $abidir/$flavour"; +while () { + chomp; + m/^(\S+)\s(.+)\s(0x[0-9a-f]+)\s(.+)$/; + $symbols{$4}{'type'} = $1; + $symbols{$4}{'loc'} = $2; + $symbols{$4}{'hash'} = $3; + $module_syms{$2} = 0; + $count++; +} +close(NEW); +print "read $count symbols.\n"; + +# Now the old symbols, checking for missing ones +print " Reading old symbols ($prev_abinum)..."; +$count = 0; +open(OLD, "< $prev_abidir/$flavour") or + die "Could not open $prev_abidir/$flavour"; +while () { + chomp; + m/^(\S+)\s(.+)\s(0x[0-9a-f]+)\s(.+)$/; + $symbols{$4}{'old_type'} = $1; + $symbols{$4}{'old_loc'} = $2; + $symbols{$4}{'old_hash'} = $3; + $count++; +} +close(OLD); + +print "read $count symbols.\n"; + +print "II: Checking for missing symbols in new ABI..."; +$count = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'type'})) { + print "\n" if not $count; + printf(" MISS : %s%s\n", $sym, + is_ignored($symbols{$sym}{'old_loc'}, $sym) ? " (ignored)" : ""); + $count++ if !is_ignored($symbols{$sym}{'old_loc'}, $sym); + } +} +print " " if $count; +print "found $count missing symbols\n"; +if ($count) { + print "$EE Symbols gone missing (what did you do!?!)\n"; + $errors++; +} + + +print "II: Checking for new symbols in new ABI..."; +$count = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'old_type'})) { + print "\n" if not $count; + print " NEW : $sym\n"; + $count++; + } +} +print " " if $count; +print "found $count new symbols\n"; +if ($count and $prev_abinum == $abinum) { + print "WW: Found new symbols within same ABI. Not recommended\n"; +} + +print "II: Checking for changes to ABI...\n"; +$count = 0; +my $moved = 0; +my $changed_type = 0; +my $changed_hash = 0; +foreach $sym (keys(%symbols)) { + if (!defined($symbols{$sym}{'old_type'}) or + !defined($symbols{$sym}{'type'})) { + next; + } + + # Changes in location don't hurt us, but log it anyway + if ($symbols{$sym}{'loc'} ne $symbols{$sym}{'old_loc'}) { + printf(" MOVE : %-40s : %s => %s\n", $sym, $symbols{$sym}{'old_loc'}, + $symbols{$sym}{'loc'}); + $moved++; + } + + # Changes to export type are only bad if new type isn't + # EXPORT_SYMBOL. Changing things to GPL are bad. + if ($symbols{$sym}{'type'} ne $symbols{$sym}{'old_type'}) { + printf(" TYPE : %-40s : %s => %s%s\n", $sym, $symbols{$sym}{'old_type'}. + $symbols{$sym}{'type'}, is_ignored($symbols{$sym}{'loc'}, $sym) + ? " (ignored)" : ""); + $changed_type++ if $symbols{$sym}{'type'} ne "EXPORT_SYMBOL" + and !is_ignored($symbols{$sym}{'loc'}, $sym); + } + + # Changes to the hash are always bad + if ($symbols{$sym}{'hash'} ne $symbols{$sym}{'old_hash'}) { + printf(" HASH : %-40s : %s => %s%s\n", $sym, $symbols{$sym}{'old_hash'}, + $symbols{$sym}{'hash'}, is_ignored($symbols{$sym}{'loc'}, $sym) + ? " (ignored)" : ""); + $changed_hash++ if !is_ignored($symbols{$sym}{'loc'}, $sym); + $module_syms{$symbols{$sym}{'loc'}}++; + } +} + +print "WW: $moved symbols changed location\n" if $moved; +print "$EE $changed_type symbols changed export type and weren't ignored\n" if $changed_type; +print "$EE $changed_hash symbols changed hash and weren't ignored\n" if $changed_hash; + +$errors++ if $changed_hash or $changed_type; +if ($changed_hash) { + print "II: Module hash change summary...\n"; + foreach $mod (sort { $module_syms{$b} <=> $module_syms{$a} } keys %module_syms) { + next if ! $module_syms{$mod}; + printf(" %-40s: %d\n", $mod, $module_syms{$mod}); + } +} + +print "II: Done\n"; + +if ($errors) { + exit($fail_exit); +} else { + exit(0); +} --- linux-aws-4.15.0.orig/debian/scripts/config-check +++ linux-aws-4.15.0/debian/scripts/config-check @@ -0,0 +1,121 @@ +#!/usr/bin/perl +# +# check-config -- check the current config for issues +# +use strict; + +my $P = 'check-config'; + +my $test = -1; +if ($ARGV[0] eq '--test') { + $test = $ARGV[1] + 0; +} elsif ($#ARGV != 4) { + die "Usage: $P \n"; +} + +my ($config, $arch, $flavour, $commonconfig, $warn_only) = @ARGV; + +my %values = (); + +# If we are in overridden then still perform the checks and emit the messages +# but do not return failure. Those items marked FATAL will alway trigger +# failure. +my $fail_exit = 1; +$fail_exit = 0 if ($warn_only eq 'true' || $warn_only eq '1'); +my $exit_val = 0; + +# Load up the current configuration values -- FATAL if this fails +print "$P: $config: loading config\n"; +open(CONFIG, "<$config") || die "$P: $config: open failed -- $! -- aborting\n"; +while () { + # Pull out values. + /^#*\s*(CONFIG_\w+)[\s=](.*)$/ or next; + if ($2 eq 'is not set') { + $values{$1} = 'n'; + } else { + $values{$1} = $2; + } +} +close(CONFIG); + +# ANNOTATIONS: check any annotations marked for enforcement +my $pass = 0; +my $total = 0; +my $annotations = "$commonconfig/annotations"; +my ($config, $value, $options, $option, $value, $check, $policy); +print "$P: $annotations loading annotations\n"; +my %annot; +my $form = 1; +open(ANNOTATIONS, "<$annotations") || die "$P: $annotations: open failed -- $! -- aborting\n"; +while () { + if (/^# FORMAT: (\S+)/) { + die "$P: $1: unknown annotations format\n" if ($1 != 2); + $form = $1; + } + + /^#/ && next; + chomp; + /^$/ && next; + + /^CONFIG_/ || next; + + if ($form == 1) { + ($config, $value, $options) = split(' ', $_, 3); + } elsif ($form == 2) { + ($config, $options) = split(' ', $_, 2); + } + + $annot{$config} = $annot{$config} . ' ' . $options; +} +close(ANNOTATIONS); + +my $config; +for $config (keys %annot) { + $check = 0; + $options = $annot{$config}; + + $policy = undef; + while ($options =~ /\s*(\S+)<(.*?)?>/g) { + ($option, $value) = ($1, $2); + + if ($option eq 'mark' && $value eq 'ENFORCED') { + $check = 1; + + } elsif ($option eq 'policy') { + if ($value =~ /^{/) { + $value =~ s/:/=>/g; + $policy = eval($value); + warn "$config: $@" if ($@); + } else { + $policy = undef; + } + } + } + if ($check == 1 && !defined($policy)) { + print "$P: INVALID POLICY (use policy<{...}>) $config$options\n"; + $total++; + $check = 0; + } + if ($check) { + my $is = '-'; + $is = $values{$config} if (defined $values{$config}); + + my $value = '-'; + for my $which ("$arch-$flavour", "$arch-*", "*-$flavour", "$arch", "*") { + if (defined $policy->{$which}) { + $value = $policy->{$which}; + last; + } + } + if ($is eq $value) { + $pass++; + } else { + print "$P: FAIL ($is != $value): $config$options\n"; + $exit_val = $fail_exit; + } + $total++; + } +} + +print "$P: $pass/$total checks passed -- exit $exit_val\n"; +exit $exit_val; --- linux-aws-4.15.0.orig/debian/scripts/control-create +++ linux-aws-4.15.0/debian/scripts/control-create @@ -0,0 +1,25 @@ +#!/bin/bash + +. debian/debian.env + +vars=$1 + +. $vars + +if [ "$is_sub" = "" ]; then + flavour=$(basename $vars | sed 's/.*\.//') + stub=${DEBIAN}/control.d/flavour-control.stub +else + flavour=$(basename $vars .vars) + stub=${DEBIAN}/sub-flavours/control.stub +fi + +cat $stub | grep -v '^#' | sed \ + -e "s#FLAVOUR#$flavour#g" \ + -e "s#DESC#$desc#g" \ + -e "s#ARCH#$arch#g" \ + -e "s#SUPPORTED#$supported#g" \ + -e "s#TARGET#$target#g" \ + -e "s#BOOTLOADER#$bootloader#g" \ + -e "s#=PROVIDES=#$provides#g" \ + -e "s#=CONFLICTS=#$conflicts#g" --- linux-aws-4.15.0.orig/debian/scripts/link-headers +++ linux-aws-4.15.0/debian/scripts/link-headers @@ -0,0 +1,42 @@ +#!/bin/bash -e + +. debian/debian.env + +hdrdir="$1" +symdir="$2" +flavour="$3" + +echo "Symlinking and copying headers for $flavour..." + +excludes="( -path ./debian -prune -o -path ./${DEBIAN} -prune -o -path ./.git ) -prune -o" + +( +find . $excludes -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) -print +find ./include ./scripts -name .gitignore -prune -o -type f -print +find ./include -mindepth 1 -maxdepth 1 $excludes -type d -print +) | ( +while read file; do + dir=$file + lastdir=$file + + if [ -e "$hdrdir/$file" -o -L "$hdrdir/$file" ]; then + continue + fi + + while [ ! -e "$hdrdir/$dir" -a ! -L "$hdrdir/$dir" ]; do + lastdir=$dir + dir=`dirname $dir` + done + # If the last item to exist is a symlink we assume all is good + if [ ! -L "$hdrdir/$dir" ]; then + # Turns things like "./foo" into "../" + deref="`echo -n $lastdir | sed -e 's/^\.//' -e's,/[^/]*,../,g'`" + item="`echo -n $lastdir | sed -e 's/^\.\///'`" + ln -s $deref$symdir/$item $hdrdir/$item + fi +done +) + +exit --- linux-aws-4.15.0.orig/debian/scripts/misc/find-missing-sauce.sh +++ linux-aws-4.15.0/debian/scripts/misc/find-missing-sauce.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# +# Find the 'UBUNTU: SAUCE:' patches that have been dropped from +# the previous release. +# +PREV_REL=artful +PREV_REPO=git://kernel.ubuntu.com/ubuntu/ubuntu-${PREV_REL}.git + +git fetch ${PREV_REPO} master-next +git log --pretty=oneline FETCH_HEAD|grep SAUCE|while read c m;do echo $m;done |sort > $$.prev-rel +git log --pretty=oneline |grep SAUCE|while read c m;do echo $m;done |sort > $$.curr-rel + +diff -u $$.prev-rel $$.curr-rel |grep "^-" +rm -f $$.prev-rel $$.curr-rel + --- linux-aws-4.15.0.orig/debian/scripts/misc/find-obsolete-firmware +++ linux-aws-4.15.0/debian/scripts/misc/find-obsolete-firmware @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Find all duplicate or obsolete firmware that is being carried +# in the kernel firmware directory. Compare these files against +# the linux-firmware package for the approriate release. For example, +# assuming this is raring, then compare the kernel firmware files +# against the raring branch of linux-firmware. +# +# Example: $0 ~/ubuntu/linux-firmware-raring + +USEAGE="$0 LINUX-FIRMWARE" + +. debian/debian.env + +NFWINFO="`find $DEBIAN -name fwinfo|wc -l`" +if [ ! "$NFWINFO" = "1" ] +then + echo Your repo is hosed. There can only be one fwinfo file. + find $DEBIAN -name fwinfo + exit 1 +fi + +FWINFO="`pwd`/`find $DEBIAN -name fwinfo`" + +if [ "$1" = "" ] +then + echo $USEAGE + exit 1 +fi +FW="$1" + +if [ ! -f $FW/WHENCE ] +then + echo Bogus linux-firmware directory + exit 1 +fi +if ! egrep -q "^firmware:" $FWINFO +then + echo Bogus firmware info file + exit 1 +fi + +# +# Prepare the tree and make firmware. +# +TEE="tee -a" +LO=`pwd`/firmware.txt +LF=`pwd`/lib/firmware +rm -rf debian/build $LF $LO +fakeroot debian/rules clean prepare-generic +cp debian/build/build-generic/.config . +mkdir -p $LF +make firmware_install INSTALL_MOD_PATH=`pwd` + +(cd $LF +find . -type f | while read f +do + BN="`basename $f`" + + if ! grep -q $BN $FWINFO + then + echo "Unused firmware: $f" | $TEE $LO + else + if [ -f $FW/$f ] + then + if ! cmp $FW/$f $f + then + echo "$f differs" | $TEE $LO + else + echo "$f is duplicated" | $TEE $LO + fi + else + echo "$f does not exist in $FW" | $TEE $LO + fi + fi +done) + +# +# Check for firmware files referenced by the kernel +# that do not exist in either location. +# +cat $FWINFO | while read fwi f +do + if [ -s lib/firmware/$f ] || [ -s $FW/$f ] + then + continue + else + echo "Missing firmware $f" | $TEE $LO + fi +done + --- linux-aws-4.15.0.orig/debian/scripts/misc/fw-to-ihex.sh +++ linux-aws-4.15.0/debian/scripts/misc/fw-to-ihex.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +F=$1 +if [ "$F" = "" ] +then + echo You must supply a firmware file. + exit 1 +fi + +echo "unsigned char d[] = {" > $F.c +hexdump -v -e '"\t" 8/1 "0x%02x, " "\n"' $F >> $F.c +echo "};" >> $F.c +sed -i 's/0x .*$//' $F.c + +O="`dirname $F`/`basename $F`.o" +gcc -o $O -c $F.c +objcopy -Oihex $F.o $F.ihex + --- linux-aws-4.15.0.orig/debian/scripts/misc/gen-auto-reconstruct +++ linux-aws-4.15.0/debian/scripts/misc/gen-auto-reconstruct @@ -0,0 +1,89 @@ +#!/bin/bash + +if [ "$#" -ne 3 ]; then + echo "Usage: $0 | " 1>&2 + exit 1 +fi +tag="$1" +reconstruct="$2" +options="$3" + +case "$tag" in +v*) ;; +*) tag="v${tag%.*}" ;; +esac + +# Validate the tag. +count=$( git tag -l "$tag" | wc -l ) +if [ "$count" != 1 ]; then + echo "$0: $tag: tag invalid" 1>&2 + exit 1 +fi + +#git ls-tree -r --full-tree HEAD | grep ^120 | \ +#while read mode type blobid name + +( + # Identify all new symlinks since the proffered tag. + echo "# Recreate any symlinks created since the orig." + git diff "$tag.." --raw --no-renames | awk '(/^:000000 120000/ && $5 == "A") { print $NF }' | \ + while read name + do + link=$( readlink "$name" ) + + echo "[ ! -L '$name' ] && ln -sf '$link' '$name'" + done + + # Identify all removed files since the proffered tag. + echo "# Remove any files deleted from the orig." + git diff "$tag.." --raw --no-renames | awk '(/^:/ && $5 == "D") { print $NF }' | \ + while read name + do + echo "rm -f '$name'" + done + + # Identify files with execute permissions added since the proffered tag. + git diff "$tag.." --raw --no-renames | awk -F '[: \t]' '{print $2, $3, $NF }' | \ + while IFS=" " read old new name + do + # Exclude files in debian* directories + if [[ "$name" =~ ^debian ]]; then + continue + fi + + old=$( printf "0%s" $old ) + new=$( printf "0%s" $new ) + changed=$(( (old ^ new) & 0111 )) + if [ "$changed" -ne 0 ]; then + echo "chmod +x '$name'" + fi + done + + # All done, make sure this does not complete in error. + echo "exit 0" +) >"$reconstruct" + +( + # Identify all new symlinks since the proffered tag. + echo "# Ignore any symlinks created since the orig which are rebuilt by reconstruct." + git diff "$tag.." --raw --no-renames | awk '(/^:000000 120000/ && $5 == "A") { print $NF }' | \ + while read name + do + echo "extend-diff-ignore=^$name\$" + done +) >"$options.update" + + +head='^## autoreconstruct -- begin$' +foot='^## autoreconstruct -- end$' +sed -i -e " + /$head/,/$foot/{ + /$head/{ + p; + r $options.update + }; + /$foot/p; + d + } +" "$options" +rm -f "$options.update" --- linux-aws-4.15.0.orig/debian/scripts/misc/get-firmware +++ linux-aws-4.15.0/debian/scripts/misc/get-firmware @@ -0,0 +1,62 @@ +#!/bin/bash +# +# Find all files in linux-firmware that are new or different since the previous release +# and copy them into the kernel firmware directory. You should only do this on the +# backport branch since it would be redundant on the released kernel. It assumed you've +# unpacked linux-firmware from each release into separate directories. +# +# Example: $0 ~/ubuntu/linux-firmware-precise ~/ubuntu/linux-firmware-quantal + +if [ "$1" = "" ] || [ "$2" = "" ] || [ ! -f $1/WHENCE ] || [ ! -f $2/WHENCE ] +then + echo You must supply 2 firmware directories. + exit 1 +fi + +if [ ! -f debian/debian.env ] +then + echo You must run this script from the root of the repo + exit 1 +fi +. debian/debian.env + +NFWINFO="`find $DEBIAN -name fwinfo|wc -l`" +if [ ! "$NFWINFO" = "1" ] +then + echo Your repo is hosed. There can only be one fwinfo file. + find $DEBIAN -name fwinfo + exit 1 +fi + +FWINFO="`pwd`/`find $DEBIAN -name fwinfo`" + +CDIR=`pwd` +OFW=$1 +NFW=$2 + +cd $NFW +# +# Find all files in $NFW that are new or different from $1 +# +(find . -type f | egrep -v "debian|git|LICEN|WHEN|READ|Make|configure" | sed 's;\./;;' | \ +while read f +do + if grep -q $f $FWINFO + then + if [ ! -f $OFW/$f ] + then + echo $f + elif ! cmp $f $OFW/$f > /dev/null + then + echo $f + fi + fi +done) |\ +while read f +do + mkdir -p $CDIR/firmware/`dirname $f` + if [ ! -f $CDIR/firmware/`dirname $f`/`basename $f`.ihex ] + then + cp -v $f $CDIR/firmware/`dirname $f` + fi +done --- linux-aws-4.15.0.orig/debian/scripts/misc/getabis +++ linux-aws-4.15.0/debian/scripts/misc/getabis @@ -0,0 +1,142 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 + +if [ "$#" != "2" ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi + +if [ "$DEBIAN" = "" ]; then + . debian/debian.env +fi + +ver=$1 +revision=$2 +abi=$(echo $revision | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$/\1/') + +verabi=$ver-$abi +verfull=$ver-$revision + +WGET="wget --tries=1 --timeout=10 --quiet -c" + +abidir="`pwd`/$DEBIAN/abi/$verfull" +tmpdir="`pwd`/abi-tmp-$verfull" +origdir="`pwd`" +fwinfo=$abidir/fwinfo + +test -d $tmpdir || mkdir $tmpdir + +package_prefixes() { + __package_prefixes="$@" +} + +getall() { + arch=$1 + shift + + mkdir -p $abidir/$arch + + for sub in $@; do + if [ -f $abidir/$arch/$sub ]; then + echo "Exists: $sub" + continue + fi + echo -n "Fetching $sub($arch)..." + prefixes="" + filenames="" + cd $tmpdir + for prefix in $__package_prefixes + do + filename=${prefix}-${verabi}-${sub}_${verfull}_${arch}.deb + for r in "${repo_list[@]}" + do + if ! [ -f $filename ]; then + $WGET $r/$filename + fi + if [ -f $filename ]; then + prefixes="$prefixes $prefix" + filenames="$filenames $filename" + break + fi + done + done + if [ "$filenames" != "" ]; then + echo -n "extracting$prefixes..." + for filename in $filenames + do + dpkg-deb --extract $filename tmp + done + find tmp -name "*.ko" | while read f; do + modinfo $f | grep ^firmware >> $fwinfo + done + if [ -f tmp/boot/abi-* ]; then + mv tmp/boot/abi-* $abidir/$arch/$sub + else + echo -n "NO ABI FILE..." + fi + if [ -f tmp/boot/retpoline-* ]; then + mv tmp/boot/retpoline-* $abidir/$arch/$sub.retpoline + else + echo -n "NO RETPOLINE FILE..." + fi + (cd tmp; find lib/modules/$verabi-$sub/kernel -name '*.ko') | \ + sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > \ + $abidir/$arch/$sub.modules + ( + cd tmp; + # Prevent exposing some errors when called by python scripts. SIGPIPE seems to get + # exposed when using the `find ...` form of the command. + ko=$(find lib/modules/$verabi-$sub/kernel \ + -name '*.ko' | head -1) + readelf -p .comment "$ko" | gawk ' + ($1 == "[") { + printf("%s", $3); + for (n=4; n<=NF; n++) { + printf(" %s", $n); + } + print "" + }' | sort -u >$abidir/$arch/$sub.compiler + version=`cat $abidir/$arch/$sub.compiler` + echo -n "$version..." + ) + rm -rf tmp $filenames + echo "done." + else + echo "FAILED." + fi + cd $origdir + done +} + +# MAIN + +# Setup abi directory +mkdir -p $abidir +echo $abi > $abidir/abiname + +# NOTE: The flavours are hardcoded, because they may have changed from the +# current build. + +__package_prefixes="linux-image" + +. $DEBIAN/etc/getabis + +# Extract compiler source package version from e.g.: +# GCC: (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2 +compilers=`sed 's/^.*(.* \(.*\)).*$/\1/' $abidir/*/*.compiler | sort -u | wc -l` +if [ "$compilers" != 1 ]; then + echo "WARNING: inconsistent compiler versions detected:" 1>&2 + sort -u $abidir/*/*.compiler | sed 's/^/WARNING: /' 1>&2 +fi + +sort < $fwinfo | uniq > fwinfo.tmp +mv fwinfo.tmp $fwinfo + +rmdir $tmpdir + +# If this is running in a git repo, add the new ABI directory, remove the old +if [ -d ".git" ]; then + git add $abidir + find $DEBIAN/abi/* -maxdepth 0 -type d | grep -v $verfull | while read f; do git rm -r $f;done +fi --- linux-aws-4.15.0.orig/debian/scripts/misc/git-ubuntu-log +++ linux-aws-4.15.0/debian/scripts/misc/git-ubuntu-log @@ -0,0 +1,139 @@ +#!/usr/bin/python3 + +import os +import sys + +import codecs +import urllib.request +import json + +import textwrap + +sys.stdin = codecs.getreader("utf-8")(sys.stdin.detach()) +sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) + +entries = [] +def add_entry(entry): + if entry and 'ignore' not in entry: + combo = [] + for bug in entry.get('bugs', []): + combo.append(bug) + for cve in entry.get('cves', []): + combo.append(cve) + combo = sorted(combo) + + if len(combo) == 0: + if entry.get('title', "").startswith('UBUNTU'): + combo = '__packaging__' + else: + combo = '__mainline__' + else: + if combo not in keys: + keys.append(combo) + + entry['key'] = combo + entries.append(entry) + + +# Suck up the git log output and extract the information we need. +keys = [] +entry = None +subject_wait = False +for line in sys.stdin: + if line.startswith('commit '): + add_entry(entry) + entry = {} + subject_wait = True + + elif line.startswith('Author: '): + bits = line.strip().split(maxsplit=1) + entry['author'] = bits[1] + + elif subject_wait and line.startswith(' '): + subject_wait = False + entry['subject'] = line.strip() + + elif line.startswith(' BugLink: ') and 'launchpad.net' in line: + bits = line.strip().split(maxsplit=1) + bits = bits[1].split('/') + entry.setdefault('bugs', []).append(bits[-1]) + + elif line.startswith(' CVE-'): + entry.setdefault('cves', []).append(line.strip()) + + elif line.startswith(' Ignore:'): + entry['ignore'] = True + +add_entry(entry) + +entries.reverse() + +# Go through the entries and clear out authors for upstream commits. +for entry in entries: + if entry['subject'].startswith('UBUNTU:'): + entry['subject'] = entry['subject'][7:].strip() + else: + del entry['author'] + +# Lump everything without a bug at the bottom. +keys.append('__packaging__') +keys.append('__mainline__') + +emit_nl = False +for key in keys: + if key == '__packaging__': + title_set = [ 'Miscellaneous Ubuntu changes' ] + elif key == '__mainline__': + title_set = [ 'Miscellaneous upstream changes' ] + else: + title_set = [] + for bug in key: + if bug.startswith('CVE-'): + title_set.append(bug) + else: + bug_info = None + + try: + #urllib.request.urlcleanup() + request = urllib.request.Request('https://api.launchpad.net/devel/bugs/' + bug) + request.add_header('Cache-Control', 'max-age=0') + with urllib.request.urlopen(request) as response: + data = response.read() + bug_info = json.loads(data.decode('utf-8')) + + title = bug_info['title'] + if 'description' in bug_info: + for line in bug_info['description'].split('\n'): + if line.startswith('Kernel-Description:'): + title = line.split(' ', 1)[1] + + except urllib.error.HTTPError: + title = 'INVALID or PRIVATE BUG' + + title += ' (LP###' + bug + ')' + title_set.append(title) + + + emit_title = True + for entry in entries: + if entry['key'] != key: + continue + + if emit_title: + if emit_nl: + print('') + emit_nl = True + + title_lines = textwrap.wrap('#// '.join(title_set), 76) + print(' * ' + title_lines[0].replace('LP###', 'LP: #').replace('#//', ' //')) + for line in title_lines[1:]: + line = line.replace('LP###', 'LP: #').replace('#//', ' //') + print(' ' + line) + + emit_title = False + + title_lines = textwrap.wrap(entry['subject'], 76) + print(' - ' + title_lines[0]) + for line in title_lines[1:]: + line = line.replace('LP###', 'LP: #') + print(' ' + line) --- linux-aws-4.15.0.orig/debian/scripts/misc/insert-changes.pl +++ linux-aws-4.15.0/debian/scripts/misc/insert-changes.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl -w + +my $debian; +$droot = $ARGV[0] if (defined $ARGV[0]); +$droot = 'debian' if (!defined $droot); +$debian = $ARGV[1] if (defined $ARGV[1]); +$debian = 'debian.master' if (!defined $debian); + +system("make -s -f $droot/rules printchanges > $debian/changes"); + +open(CHANGELOG, "< $debian/changelog") or die "Cannot open changelog"; +open(CHANGES, "< $debian/changes") or die "Cannot open new changes"; +open(NEW, "> $debian/changelog.new") or die "Cannot open new changelog"; + +$printed = 0; + +while () { + if (/^ CHANGELOG: /) { + next if $printed; + + while () { + print NEW; + } + + $printed = 1; + } else { + print NEW; + } +} + +close(NEW); +close(CHANGES); +close(CHANGELOG); + +rename("$debian/changelog.new", "$debian/changelog"); +unlink("$debian/changes"); --- linux-aws-4.15.0.orig/debian/scripts/misc/insert-mainline-changes +++ linux-aws-4.15.0/debian/scripts/misc/insert-mainline-changes @@ -0,0 +1,42 @@ +#!/usr/bin/perl + +if ($#ARGV != 2) { + warn "Usage: $0 \n"; + die " $0 debian.master/changelog v3.2.3 v3.2.2..v3.2.3\n"; +} +my ($changelog, $to, $range) = @ARGV; + +my @changes = (); + +push(@changes, "\n"); +push(@changes, " [ Upstream Kernel Changes ]\n\n"); +push(@changes, " * rebase to $to\n"); + +open(LOG, "git log '$range'|") || die "$0: git log failed: - $!\n"; +while () { + if (m@BugLink: .*launchpad.net/.*/([0-9]+)\s$@) { + push(@changes, " - LP: #$1\n"); + } +} +close(LOG); + +open(CHANGELOG, "< $changelog") or die "Cannot open changelog"; +open(NEW, "> $changelog.new") or die "Cannot open new changelog"; + +$printed = 3; +while () { + if (/^ CHANGELOG: /) { + $printed--; + print NEW; + if ($printed == 0) { + print NEW @changes; + } + next; + } + print NEW; +} + +close(NEW); +close(CHANGELOG); + +rename("$changelog.new", "$changelog"); --- linux-aws-4.15.0.orig/debian/scripts/misc/insert-ubuntu-changes +++ linux-aws-4.15.0/debian/scripts/misc/insert-ubuntu-changes @@ -0,0 +1,80 @@ +#!/usr/bin/perl + +if ($#ARGV != 2) { + die "Usage: $0 \n"; +} +my ($changelog, $end, $start) = @ARGV; + +$end =~ s/^\D+//; +$start =~ s/^\D+//; + +sub version_cmp($$) { + my @a = split(/[\.-]+/, $_[0]); + my @b = split(/[\.-]+/, $_[1]); + for (my $i = 1;; $i++) { + if (!defined $a[$i]) { + if (!defined $b[$i]) { + return 0; + } + return -1; + } + if (!defined $b[$i]) { + return 1; + } + if ($a[$i] < $b[$i]) { + return -1; + } + if ($a[$i] > $b[$i]) { + return 1; + } + } +} + +my @changes = (); +my $output = 0; +open(CHG, ") { + if (/^\S+\s+\((.*)\)/) { + if (version_cmp($1, $end) <= 0) { + last; + } + if ($1 eq $start) { + $output = 1; + } + if ($output) { + push(@changes, "\n [ Ubuntu: $1 ]\n\n"); + next; + } + } + next if ($output == 0); + + next if (/^\s*$/); + next if (/^\s--/); + next if (/^\s\s[^\*\s]/); + + push(@changes, $_); +} +close(CHG); + +open(CHANGELOG, "< $changelog") or die "Cannot open changelog"; +open(NEW, "> $changelog.new") or die "Cannot open new changelog"; + +$printed = 3; +while () { + if (/^ CHANGELOG: /) { + $printed--; + print NEW; + if ($printed == 0) { + print NEW @changes; + } + next; + } + print NEW; +} + +close(NEW); +close(CHANGELOG); + +rename("$changelog.new", "$changelog"); --- linux-aws-4.15.0.orig/debian/scripts/misc/kernel-wedge-arch.pl +++ linux-aws-4.15.0/debian/scripts/misc/kernel-wedge-arch.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl +# +# kernel-wedge-arch.pl -- select only specifiers for the supplied arch. +# +use strict; + +require Dpkg::Control; +require Dpkg::Deps; + +my $fh = \*STDIN; + +my @entries; + +my $wanted = $ARGV[0]; + +my $entry; +while (!eof($fh)) { + $entry = Dpkg::Control->new(); + $entry->parse($fh, '???'); + + if ($entry->{'Architecture'} eq $wanted) { + print("\n" . $entry); + } +} + +close($fh); --- linux-aws-4.15.0.orig/debian/scripts/misc/kernelconfig +++ linux-aws-4.15.0/debian/scripts/misc/kernelconfig @@ -0,0 +1,176 @@ +#!/bin/bash + +. debian/debian.env + +# Script to merge all configs and run 'make silentoldconfig' on it to wade out bad juju. +# Then split the configs into distro-commmon and flavour-specific parts + +# We have to be in the top level kernel source directory +if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then + echo "This does not appear to be the kernel source directory." 1>&2 + exit 1 +fi + +mode=${1:?"Usage: $0 [oldconfig|editconfig]"} +yes=0 +case "$mode" in + update*configs) mode='silentoldconfig' ;; + default*configs) mode='oldconfig'; yes=1 ;; + edit*configs) ;; # All is good + gen*configs) mode='genconfigs' ;; # All is good + dump*configs) mode='config'; yes=1 ;; + *) echo "$0 called with invalid mode" 1>&2 + exit 1 ;; +esac +kerneldir="`pwd`" +confdir="$kerneldir/${DEBIAN}/config" +variant="$2" + +. $DEBIAN/etc/kernelconfig + +bindir="`pwd`/${DROOT}/scripts/misc" +common_conf="$confdir/config.common.$family" +tmpdir=`mktemp -d` +mkdir "$tmpdir/CONFIGS" + +if [ "$mode" = "genconfigs" ]; then + keep=1 + mode="oldconfig" + test -d CONFIGS || mkdir CONFIGS +fi + +for arch in $archs; do + rm -rf build + mkdir build + + # Map debian archs to kernel archs + case "$arch" in + ppc64|ppc64el) kernarch="powerpc" ;; + amd64) kernarch="x86_64" ;; + lpia) kernarch="x86" ;; + sparc) kernarch="sparc64" ;; + armel|armhf) kernarch="arm" ;; + s390x) kernarch="s390" ;; + *) kernarch="$arch" ;; + esac + + archconfdir=$confdir/$arch + flavourconfigs=$(cd $archconfdir && ls config.flavour.*) + + # Merge configs + # We merge config.common.ubuntu + config.common. + + # config.flavour. + + for config in $flavourconfigs; do + fullconf="$tmpdir/$arch-$config-full" + case $config in + *) + : >"$fullconf" + if [ -f $common_conf ]; then + cat $common_conf >> "$fullconf" + fi + if [ -f $archconfdir/config.common.$arch ]; then + cat $archconfdir/config.common.$arch >> "$fullconf" + fi + cat "$archconfdir/$config" >>"$fullconf" + if [ -f $confdir/OVERRIDES ]; then + cat $confdir/OVERRIDES >> "$fullconf" + fi + ;; + esac + done + + for config in $flavourconfigs; do + if [ -f $archconfdir/$config ]; then + fullconf="$tmpdir/$arch-$config-full" + cat "$fullconf" > build/.config + # Call oldconfig or menuconfig + case "$mode" in + editconfigs) + # Interactively edit config parameters + while : ; do + echo -n "Do you want to edit config: $arch/$config? [Y/n] " + read choice + + case "$choice" in + y* | Y* | "" ) + make O=`pwd`/build ARCH=$kernarch menuconfig + break ;; + n* | N* ) + # 'silentoldconfig' prevents + # errors for '-' options set + # in common config fragments + make O=`pwd`/build ARCH=$kernarch silentoldconfig + break ;; + *) + echo "Entry not valid" + esac + done + ;; + *) + echo "* Run $mode (yes=$yes) on $arch/$config ..." + if [ "$yes" -eq 1 ]; then + yes "" | make O=`pwd`/build ARCH=$kernarch "$mode" + else + make O=`pwd`/build ARCH=$kernarch "$mode" + fi ;; + esac + cat build/.config > $archconfdir/$config + cat build/.config > "$tmpdir/CONFIGS/$arch-$config" + if [ "$keep" = "1" ]; then + cat build/.config > CONFIGS/$arch-$config + fi + else + echo "!! Config not found $archconfdir/$config..." + fi + done + + echo "Running splitconfig.pl for $arch" + echo + + # Can we make this more robust by avoiding $tmpdir completely? + # This approach was used for now because I didn't want to change + # splitconfig.pl + (cd $archconfdir; $bindir/splitconfig.pl config.flavour.*; mv config.common \ + config.common.$arch; cp config.common.$arch $tmpdir) +done + +rm -f $common_conf + +# Now run splitconfig.pl on all the config.common. copied to +# $tmpdir +(cd $tmpdir; $bindir/splitconfig.pl *) +( + cd $confdir; + rm -f *-full + grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf + for arch in $archs; do + grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \ + >$arch/config.common.$arch + done +) + +echo "" +echo "Running config-check for all configurations ..." +echo "" +fail=0 +for arch in $archs; do + archconfdir=$confdir/$arch + flavourconfigs=$(cd $archconfdir && ls config.flavour.*) + for config in $flavourconfigs; do + flavour="${config##*.}" + if [ -f $archconfdir/$config ]; then + fullconf="$tmpdir/CONFIGS/$arch-$config" + "$bindir/../config-check" "$fullconf" "$arch" "$flavour" "$confdir" "0" || let "fail=$fail+1" + fi + done +done + +if [ "$fail" != 0 ]; then + echo "" + echo "*** ERROR: $fail config-check failures detected" + echo "" +fi + +rm -rf build + --- linux-aws-4.15.0.orig/debian/scripts/misc/retag +++ linux-aws-4.15.0/debian/scripts/misc/retag @@ -0,0 +1,34 @@ +#!/usr/bin/perl -w + +open(TAGS, "git tag -l |") or die "Could not get list of tags"; +@tags = ; +close(TAGS); + +open(LOGS, "git log --pretty=short |") or die "ERROR: Calling git log"; +my $commit = ""; + +while () { + my $origtag; + + if (m|^commit (.*)$|) { + $commit = $1; + next; + } + + m|\s*UBUNTU: (Ubuntu-2\.6\..*)| or next; + + $tag = $1; + + ($origtag) = grep(/^$tag.orig$/, @tags); + + if (!defined($origtag)) { + print "I: Adding original tag for $tag\n"; + system("git tag -m $tag $tag.orig $tag"); + } + + print "I: Tagging $tag => $commit\n"; + + system("git tag -f -m $tag $tag $commit"); +} + +close(LOGS); --- linux-aws-4.15.0.orig/debian/scripts/misc/splitconfig.pl +++ linux-aws-4.15.0/debian/scripts/misc/splitconfig.pl @@ -0,0 +1,107 @@ +#!/usr/bin/perl -w + +%allconfigs = (); +%common = (); + +print "Reading config's ...\n"; + +for $config (@ARGV) { + # Only config.* + next if $config !~ /^config\..*/; + # Nothing that is disabled, or remnant + next if $config =~ /.*\.(default|disabled|stub)$/; + + %{$allconfigs{$config}} = (); + + print " processing $config ... "; + + open(CONFIG, "< $config"); + + while () { + # Skip comments + /^#*\s*CONFIG_(\w+)[\s=](.*)$/ or next; + + ${$allconfigs{$config}}{$1} = $2; + + $common{$1} = $2; + } + + close(CONFIG); + + print "done.\n"; +} + +print "\n"; + +print "Merging lists ... \n"; + +# %options - pointer to flavour config inside the allconfigs array +for $config (keys(%allconfigs)) { + my %options = %{$allconfigs{$config}}; + + print " processing $config ... "; + + for $key (keys(%common)) { + next if not defined $common{$key}; + + # If we don't have the common option, then it isn't + # common. If we do have that option, it must have the same + # value. EXCEPT where this file does not have a value at all + # which may safely be merged with any other value; the value + # will be elided during recombination of the parts. + if (!defined($options{$key})) { + # Its ok really ... let it merge + } elsif (not defined($options{$key})) { + undef $common{$key}; + } elsif ($common{$key} ne $options{$key}) { + undef $common{$key}; + } + } + + print "done.\n"; +} + +print "\n"; + +print "Creating common config ... "; + +open(COMMON, "> config.common"); +print COMMON "#\n# Common config options automatically generated by splitconfig.pl\n#\n"; + +for $key (sort(keys(%common))) { + if (not defined $common{$key}) { + print COMMON "# CONFIG_$key is UNMERGABLE\n"; + } elsif ($common{$key} eq "is not set") { + print COMMON "# CONFIG_$key is not set\n"; + } else { + print COMMON "CONFIG_$key=$common{$key}\n"; + } +} +close(COMMON); + +print "done.\n\n"; + +print "Creating stub configs ...\n"; + +for $config (keys(%allconfigs)) { + my %options = %{$allconfigs{$config}}; + + print " processing $config ... "; + + open(STUB, "> $config"); + print STUB "#\n# Config options for $config automatically generated by splitconfig.pl\n#\n"; + + for $key (sort(keys(%options))) { + next if defined $common{$key}; + + if ($options{$key} =~ /^is /) { + print STUB "# CONFIG_$key $options{$key}\n"; + } else { + print STUB "CONFIG_$key=$options{$key}\n"; + } + } + + close(STUB); + + print "done.\n"; +} --- linux-aws-4.15.0.orig/debian/scripts/misc/tristate.sh +++ linux-aws-4.15.0/debian/scripts/misc/tristate.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# +# Find config variables that might be able to transition from =y to =m +# +# Example: debian/scripts/misc/tristate.sh debian.master/config/config.common.ubuntu +# + +KC=Kconfig.tmp +rm -f ${KC} +find .|grep Kconfig | while read f +do + cat $f >> ${KC} +done + +grep =y $1 | sed -e 's/CONFIG_//' -e 's/=y//' | while read c +do + cat < tristate.awk +BEGIN { tristate=0; } +/^config ${c}\$/ { tristate=1; next; } +/tristate/ { if (tristate == 1) printf("CONFIG_%s=m\n","${c}"); next; } +{ if (tristate == 1) exit; } +EOF + + gawk -f tristate.awk ${KC} +done --- linux-aws-4.15.0.orig/debian/scripts/misc/update-aufs.sh +++ linux-aws-4.15.0/debian/scripts/misc/update-aufs.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +AUFS=aufs4-standalone + +# +# Before you run this be sure you've removed or reverted the 'UBUNTU: SAUCE: AUFS" patch. +# +# +# Make sure the current working directory is at the top of the +# linux tree. +# +if ! grep PATCHLEVEL Makefile +then + echo "You must run this script from the top of the linux tree" + exit 1 +fi + +clean=0 +if [ "$#" = 1 ]; then + AUFS="$1" +else + clean=1 + rm -rf ${AUFS} + git clone https://github.com/sfjro/aufs4-standalone.git ${AUFS} + (cd ${AUFS}; git checkout -b aufs4.x-rcN remotes/origin/aufs4.x-rcN) +fi + +cp ${AUFS}/include/uapi/linux/aufs_type.h include/uapi/linux +rsync -av ${AUFS}/fs/ fs/ +rsync -av ${AUFS}/Documentation/ Documentation/ + +PATCHES="${PATCHES} aufs4-kbuild.patch" +PATCHES="${PATCHES} aufs4-base.patch" +PATCHES="${PATCHES} aufs4-mmap.patch" +PATCHES="${PATCHES} aufs4-standalone.patch" +PATCHES="${PATCHES} aufs4-loopback.patch" +#PATCHES="${PATCHES} vfs-ino.patch" +PATCHES="${PATCHES} tmpfs-idr.patch" + +for i in ${PATCHES} +do + patch -p1 < ${AUFS}/$i +done + +[ "$clean" = 1 ] && rm -rf ${AUFS} +git add mm/prfile.c +git add -u +find . -name "*.orig" | xargs rm +find . |grep aufs | xargs git add +git commit -s -m"UBUNTU: SAUCE: AUFS" --- linux-aws-4.15.0.orig/debian/scripts/misc/update-zfs.sh +++ linux-aws-4.15.0/debian/scripts/misc/update-zfs.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# +# Update spl/zfs from the Ubuntu archive. You will have to manually check +# to see if the version has been updated. +# +SPL_MAJOR_VER=${_SPL_MAJOR_VER:-0.6.5.11} +SPL_MINOR_VER=${_SPL_MINOR_VER:-0ubuntu1} +SPL_DKMS=${_SPL_DKMS:-http://archive.ubuntu.com/ubuntu/pool/universe/s/spl-linux/spl-dkms_${SPL_MAJOR_VER}-${SPL_MINOR_VER}_all.deb} + +ZFS_MAJOR_VER=${_ZFS_MAJOR_VER:-0.6.5.11} +ZFS_MINOR_VER=${_ZFS_MINOR_VER:-0ubuntu1} +ZFS_DKMS=${_ZFS_DKMS:-http://archive.ubuntu.com/ubuntu/pool/universe/z/zfs-linux/zfs-dkms_${ZFS_MAJOR_VER}-${ZFS_MINOR_VER}_all.deb} + +function update_from_archive { + + URL=$1 + DEST_DIR=$2 + VER=$3 + + rm -rf ${DEST_DIR}.tmp + wget -O ${DEST_DIR}.deb ${URL} + dpkg -x ${DEST_DIR}.deb ${DEST_DIR}.tmp + mkdir -p ${DEST_DIR} + rsync -aL --delete ${DEST_DIR}.tmp/usr/src/${DEST_DIR}-${VER}*/ ${DEST_DIR}/ + rm -rf ${DEST_DIR}.deb ${DEST_DIR}.tmp + find ${DEST_DIR} -type f | while read f;do git add -f $f;done +} + +update_from_archive ${SPL_DKMS} spl ${SPL_MAJOR_VER} +update_from_archive ${ZFS_DKMS} zfs ${ZFS_MAJOR_VER} + +git add -u +git commit -s -m"UBUNTU: SAUCE: (noup) Update spl to ${SPL_MAJOR_VER}-${SPL_MINOR_VER}, zfs to ${ZFS_MAJOR_VER}-${ZFS_MINOR_VER}" --- linux-aws-4.15.0.orig/debian/scripts/module-check +++ linux-aws-4.15.0/debian/scripts/module-check @@ -0,0 +1,120 @@ +#!/usr/bin/perl -w + +$flavour = shift; +$prev_abidir = shift; +$abidir = shift; +$skipmodule = shift; + +print "II: Checking modules for $flavour..."; + +if (-f "$prev_abidir/ignore.modules" + or -f "$prev_abidir/$flavour.ignore.modules") { + print "explicitly ignoring modules\n"; + exit(0); +} + +if (not -f "$abidir/$flavour.modules" or not -f + "$prev_abidir/$flavour.modules") { + print "previous or current modules file missing!\n"; + print " $abidir/$flavour.modules\n"; + print " $prev_abidir/$flavour.modules\n"; + if (defined($skipmodule)) { + exit(0); + } else { + exit(1); + } +} + +print "\n"; + +my %modules; +my %modules_ignore; +my $missing = 0; +my $new = 0; +my $errors = 0; + +# See if we have any ignores +if (-f "$prev_abidir/../modules.ignore") { + my $ignore = 0; + open(IGNORE, "< $prev_abidir/../modules.ignore") or + die "Could not open $prev_abidir/../modules.ignore"; + print " reading modules to ignore..."; + while () { + chomp; + next if /\s*#/; + $modules_ignore{$_} = 1; + $ignore++; + } + close(IGNORE); + print "read $ignore modules.\n"; +} + +# Read new modules first +print " reading new modules..."; +$new_count = 0; +open(NEW, "< $abidir/$flavour.modules") or + die "Could not open $abidir/$flavour.modules"; +while () { + chomp; + $modules{$_} = 1; + $new_count++; +} +close(NEW); +print "read $new_count modules.\n"; + +# Now the old modules, checking for missing ones +print " reading old modules..."; +$old_count = 0; +open(OLD, "< $prev_abidir/$flavour.modules") or + die "Could not open $prev_abidir/$flavour.modules"; +while () { + chomp; + if (not defined($modules{$_})) { + print "\n" if not $missing; + $missing++; + if (not defined($modules_ignore{$_})) { + print " MISS: $_\n"; + $errors++; + } else { + print " MISS: $_ (ignored)\n"; + } + } else { + $modules{$_}++; + } + $old_count++; +} +close(OLD); +# Check for new modules +foreach $mod (keys(%modules)) { + if ($modules{$mod} < 2) { + print "\n" if not $missing and not $new; + print " NEW : $mod\n"; + $new++; + } +} +if ($new or $missing) { + print " read $old_count modules : new($new) missing($missing)\n"; +} else { + print "read $old_count modules.\n"; +} + + +# Let's see where we stand... +if ($errors) { + if (defined($skipmodule)) { + print "WW: Explicitly asked to ignore failures (probably not good)\n"; + } else { + print "EE: Missing modules (start begging for mercy)\n"; + exit 1 + } +} + +if ($new) { + print "II: New modules (you've been busy, wipe the poop off your nose)\n"; +} else { + print "II: No new modules (hope you're happy, slacker)\n"; +} + +print "II: Done\n"; + +exit(0); --- linux-aws-4.15.0.orig/debian/scripts/module-inclusion +++ linux-aws-4.15.0/debian/scripts/module-inclusion @@ -0,0 +1,104 @@ +#!/bin/bash + +# +# Build a new directory of modules based on an inclusion list. +# The includsion list format must be a bash regular expression. +# +# usage: $0 ROOT INCLUSION_LIST +# example: $0 \ +# debian/build/build-virtual-ALL debian/build/build-virtual \ +# debian.master/control.d/virtual.inclusion-list \ +# virtual.depmap +master=0 +if [ "$1" = "--master" ]; then + master=1 + shift +fi + +ROOT=$1 +NROOT=$2 +ILIST=$3 +DEPMAP=$4 + +tmp="/tmp/module-inclusion.$$" + +# +# Prep a destination directory. +# +mkdir -p ${NROOT} + +{ + # Copy over the framework into the master package. + if [ "$master" -eq 1 ]; then + (cd ${ROOT}; find . ! -name "*.ko" -type f) + fi + + # Copy over modules by name or pattern. + while read -r i + do + # + # 'find' blurts a warning if it cannot find any ko files. + # + case "$i" in + \!*) + (cd ${ROOT}; ${i#!} || true) + ;; + *\**) + (cd ${ROOT}; eval find "${i}" -name "*.ko" || true) + ;; + *) + echo "$i" + ;; + esac + done <"${ILIST}" +} >"$tmp" + +# Copy over the listed modules. +while read i +do + # If this is already moved over, all is good. + if [ -f "${NROOT}/$i" ]; then + : + + # If present in the source, moved it over. + elif [ -f "${ROOT}/$i" ]; then + mkdir -p "${NROOT}/`dirname $i`" + mv "${ROOT}/$i" "${NROOT}/$i" + + # Otherwise, it is missing. + else + echo "Warning: Could not find ${ROOT}/$i" 1>&2 + fi +done <"$tmp" + +# Copy over any dependancies, note if those are missing +# we know they are in a pre-requisite package as they must +# have existed at depmap generation time, and can only have +# moved into a package. +let n=0 || true +while [ -s "$tmp" ] +do + let n="$n+1" || true + [ "$n" = "20" ] && break || true + + echo "NOTE: pass $n: dependency scan" 1>&2 + + while read i + do + grep "^$i " "$DEPMAP" | \ + while read m d + do + if [ -f "${ROOT}/$d" ]; then + echo "NOTE: pass $n: ${i} pulls in ${d}" 1>&2 + echo "$d" + mkdir -p "${NROOT}/`dirname $d`" + mv "${ROOT}/$d" "${NROOT}/$d" + fi + done + done <"$tmp" >"$tmp.new" + mv -f "$tmp.new" "$tmp" +done + +rm -f "$tmp" + +exit 0 --- linux-aws-4.15.0.orig/debian/scripts/retpoline-check +++ linux-aws-4.15.0/debian/scripts/retpoline-check @@ -0,0 +1,42 @@ +#!/bin/bash + +flavour="$1" +prev_abidir="$2" +curr_abidir="$3" +skipretpoline="$4" + +echo "II: Checking retpoline indirections for $flavour..."; + +if [ "$skipretpoline" = 'true' ]; then + echo "manual request ignoring retpoline delta" +fi + +if [ -f "$prev_abidir/ignore.retpoline" -o \ + -f "$prev_abidir/$flavour.ignore.retpoline" ]; then + echo "explicitly ignoring retpoline delta" + skipretpoline='true' +fi + +prev="$prev_abidir/$flavour.retpoline" +curr="$curr_abidir/$flavour.retpoline" +if [ ! -f "$prev" ]; then + echo "previous retpoline file missing!" + echo " $prev" + prev="/dev/null" +fi +if [ ! -f "$curr" ]; then + echo "current retpoline file missing!" + echo " $curr" + curr="/dev/null" +fi + +echo "II: retpoline delta in this package..." +rc=0 +diff -u "$prev" "$curr" || rc=1 + +echo "II: Done"; +if [ "$skipretpoline" = 'true' -a "$rc" -ne 0 ]; then + echo "II: ignoring errors" + exit 0 +fi +exit "$rc" --- linux-aws-4.15.0.orig/debian/scripts/retpoline-extract +++ linux-aws-4.15.0/debian/scripts/retpoline-extract @@ -0,0 +1,13 @@ +#!/bin/bash + +cd "$1" || exit 1 + +{ + echo "./vmlinux" + find . -name \*.ko +} | xargs objdump --disassemble | \ +awk -F' ' ' + /^.\// { file=$1; sub(":.*", "", file); sub("^.*/", "", file); } + /^[0-9a-f][0-9a-f]* <.*>:/ { tag=$1; sub(".*<", "", tag); sub(">.*", "", tag); tag=file " " tag; } + $3 ~ /(callq|jmpq) *\*%/ { print(tag " " $3); } +' --- linux-aws-4.15.0.orig/debian/scripts/sub-flavour +++ linux-aws-4.15.0/debian/scripts/sub-flavour @@ -0,0 +1,69 @@ +#!/bin/bash + +. debian/debian.env + +echo "SUB_PROCESS $FROM => $TO" + +export from_pkg="linux-image-$ABI_RELEASE-$FROM" +export to_pkg="linux-image-$ABI_RELEASE-$TO" + +from_moddir="debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM" +to_moddir="debian/$to_pkg/lib/modules/$ABI_RELEASE-$FROM" + +install -d "debian/$to_pkg/boot" +install -m644 debian/$from_pkg/boot/config-$ABI_RELEASE-$FROM \ + debian/$to_pkg/boot/ +install -m600 debian/$from_pkg/boot/{vmlinuz,System.map}-$ABI_RELEASE-$FROM \ + debian/$to_pkg/boot/ + +# +# Print some warnings if there are files in the sub-flavours list +# that do not actually exist. +# +cat ${DEBIAN}/sub-flavours/$TO.list | while read line +do +( + cd debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM/kernel; + # + # If its a wildcard, then check that there are files that match. + # + if echo "$line" | grep '\*' > /dev/null + then + if [ `eval find "$line" -name '*.ko' 2>/dev/null|wc -l` -lt 1 ] + then + echo SUB_INST Warning - No files in $line + fi + # + # Else it should be a single file reference. + # + elif [ ! -f "$line" ] + then + echo SUB_INST Warning - could not find "$line" + fi +) +done + +cat ${DEBIAN}/sub-flavours/$TO.list | while read line; do + ( + cd debian/$from_pkg/lib/modules/$ABI_RELEASE-$FROM/kernel; + if echo "$line" | grep '\*' > /dev/null + then + eval find "$line" -name '*.ko' 2>/dev/null || true + elif [ -f "$line" ] + then + echo "$line" + fi + ); +done | while read mod; do + echo "SUB_INST checking: $mod" + fromdir="/lib/modules/$ABI_RELEASE-$FROM/" + egrep "^($fromdir)?kernel/$mod:" \ + $from_moddir/modules.dep | sed -e "s|^$fromdir||" -e 's/://' -e 's/ /\n/g' | \ + while read m; do + m="${fromdir}$m" + test -f debian/$to_pkg/$m && continue + echo "SUB_INST installing: $m" + install -D -m644 debian/$from_pkg/$m \ + debian/$to_pkg/$m + done +done --- linux-aws-4.15.0.orig/debian/snapcraft.mk +++ linux-aws-4.15.0/debian/snapcraft.mk @@ -0,0 +1,11 @@ +ifeq ($(ARCH),) + arch := $(shell uname -m | sed -e s/i.86/i386/ -e s/x86_64/amd64/ \ + -e s/arm.*/armhf/ -e s/s390/s390x/ -e s/ppc.*/powerpc/ \ + -e s/aarch64.*/arm64/ ) +else ifeq ($(ARCH),arm) + arch := armhf +else + arch := $(ARCH) +endif +config: + cat debian.$(branch)/config/config.common.ubuntu debian.$(branch)/config/$(arch)/config.common.$(arch) debian.$(branch)/config/$(arch)/config.flavour.$(flavour) >.config --- linux-aws-4.15.0.orig/debian/source/format +++ linux-aws-4.15.0/debian/source/format @@ -0,0 +1 @@ +1.0 --- linux-aws-4.15.0.orig/debian/source/options +++ linux-aws-4.15.0/debian/source/options @@ -0,0 +1,8 @@ +# Ignore vbox symlinks, we will regenerate these at clean (LP:1426113) +## autoreconstruct -- begin +# Ignore any symlinks created since the orig which are rebuilt by reconstruct. +## autoreconstruct -- end + +# force "dpkg-source -I -i" behavior +diff-ignore +tar-ignore --- linux-aws-4.15.0.orig/debian/stamps/keep-dir +++ linux-aws-4.15.0/debian/stamps/keep-dir @@ -0,0 +1 @@ +Place holder --- linux-aws-4.15.0.orig/debian/tests-build/README +++ linux-aws-4.15.0/debian/tests-build/README @@ -0,0 +1,21 @@ +Scripts placed in this directory get called one at a time by run-parts(8). +The scripts are expected to perform some sort of sanity checks on the +finished build. Scripts will be called once for each flavour. + +Some environment variables are exported to make life a little easier: + +DPKG_ARCH : The dpkg architecture (e.g. "amd64") +KERN_ARCH : The kernel architecture (e.g. "x86_64") +FLAVOUR : The specific flavour for this run (e.g. "generic") +VERSION : The full version of this build (e.g. 2.6.22-1) +REVISION : The exact revision of this build (e.g. 1.3) +PREV_REVISION : The revision prior to this one +ABI_NUM : The specific ABI number for this build (e.g. 2) +PREV_ABI_NUM : The previous ABI number. Can be the same as ABI_NUM. +BUILD_DIR : The directory where this build took place +INSTALL_DIR : The directory where the package is prepared +SOURCE_DIR : Where the main kernel source is + +Scripts are expected to have a zero exit status when no problems occur, +and non-zero when an error occurs that should stop the build. Scripts +should print whatever info they deem needed to deduce the problem. --- linux-aws-4.15.0.orig/debian/tests-build/check-aliases +++ linux-aws-4.15.0/debian/tests-build/check-aliases @@ -0,0 +1,24 @@ +#!/usr/bin/perl -w + +my %map; + +print "Checking for dupe aliases in $ENV{'FLAVOUR'}...\n"; + +$aliases = + "$ENV{'INSTALL_DIR'}/lib/modules/$ENV{'VERSION'}-$ENV{'FLAVOUR'}/modules.alias"; + +open(ALIASES, "< $aliases") or die "Could not open $aliases"; + +while () { + chomp; + my ($junk, $alias, $module) = split; + + if (defined($map{$alias})) { + printf("%s %20s / %-20s : %s \n", ("$map{$alias}" eq "$module") + ? "INT" : " ", $map{$alias}, $module, $alias); + } else { + $map{$alias} = $module; + } +} + +exit(0); --- linux-aws-4.15.0.orig/debian/tests/control +++ linux-aws-4.15.0/debian/tests/control @@ -0,0 +1,7 @@ +Tests: rebuild +Depends: @builddeps@, fakeroot +Restrictions: allow-stderr + +Tests: ubuntu-regression-suite +Depends: build-essential, gcc-multilib [amd64 armhf i386], gdb, git, bzr +Restrictions: allow-stderr, isolation-machine, breaks-testbed --- linux-aws-4.15.0.orig/debian/tests/rebuild +++ linux-aws-4.15.0/debian/tests/rebuild @@ -0,0 +1,20 @@ +#!/bin/sh + +# If we are triggering for just linux or linux-meta we know we have +# just built the kernel and there is no point in repeating that +# build, it just wastes time. (LP: #1498862) +build_needed=0 +for trigger in ${ADT_TEST_TRIGGERS:-force} +do + case "$trigger" in + linux/*|linux-lts-*/*|linux-meta*/*) ;; + *) build_needed=1 ;; + esac +done +if [ "$build_needed" -eq 0 ]; then + echo "rebuild: short circuiting build for '${ADT_TEST_TRIGGERS}'" + exit 0 +fi + +set -e +dpkg-buildpackage -rfakeroot -us -uc -b -Pautopkgtest --- linux-aws-4.15.0.orig/debian/tests/ubuntu-regression-suite +++ linux-aws-4.15.0/debian/tests/ubuntu-regression-suite @@ -0,0 +1,19 @@ +#!/bin/sh +set -e + +sver=`dpkg-parsechangelog -SVersion` +read x rver x &2 + exit 1 +fi + +git clone git://kernel.ubuntu.com/ubuntu/kernel-testing +kernel-testing/run-dep8-tests --- linux-aws-4.15.0.orig/debian/tools/generic +++ linux-aws-4.15.0/debian/tools/generic @@ -0,0 +1,60 @@ +#!/bin/bash +full_version=`uname -r` + +# First check for a fully qualified version. +this="/usr/lib/linux-tools/$full_version/`basename $0`" +if [ -f "$this" ]; then + exec "$this" "$@" +fi + +# Removing flavour from version i.e. generic or server. +flavour_abi=${full_version#*-} +flavour=${flavour_abi#*-} +version=${full_version%-$flavour} +this="$0_$version" +if [ -f "$this" ]; then + exec "$this" "$@" +fi + +# Before saucy kernels we had no flavour linkage. +if dpkg --compare-versions "$version" lt "3.11.0"; then + flavour='' +else + flavour="-$flavour" +fi +# Hint at the cloud tools if they exist (trusty and later) +if dpkg --compare-versions "$version" ge "3.13.0"; then + cld="" +else + cld=":" +fi +# Work out if this is an LTS backport or not. +codename=`lsb_release -cs` +case "$codename" in +precise) base='3.2.0-9999' ;; +trusty) base='3.13.0-9999' ;; +*) base='' ;; +esac +std="" +lts=":" +if [ "$base" != "" ]; then + if dpkg --compare-versions "$version" gt "$base"; then + std=":" + lts="" + fi +fi + +# Give them a hint as to what to install. + echo "WARNING: `basename $0` not found for kernel $version" >&2 + echo "" >&2 + echo " You may need to install the following packages for this specific kernel:" >&2 + echo " linux-tools-$version$flavour" >&2 +$cld echo " linux-cloud-tools-$version$flavour" >&2 + echo "" >&2 + echo " You may also want to install one of the following packages to keep up to date:" >&2 +$std echo " linux-tools$flavour" >&2 +$std $cld echo " linux-cloud-tools$flavour" >&2 +$lts echo " linux-tools$flavour-lts-" >&2 +$lts $cld echo " linux-cloud-tools$flavour-lts-" >&2 + +exit 2 --- linux-aws-4.15.0.orig/debian/zfs-modules.ignore +++ linux-aws-4.15.0/debian/zfs-modules.ignore @@ -0,0 +1,9 @@ +icp +spl +splat +zavl +zcommon +zfs +znvpair +zpios +zunicode --- linux-aws-4.15.0.orig/drivers/Makefile +++ linux-aws-4.15.0/drivers/Makefile @@ -61,14 +61,9 @@ # iommu/ comes before gpu as gpu are using iommu controllers obj-$(CONFIG_IOMMU_SUPPORT) += iommu/ -# gpu/ comes after char for AGP vs DRM startup and after iommu -obj-y += gpu/ obj-$(CONFIG_CONNECTOR) += connector/ -# i810fb and intelfb depend on char/agp/ -obj-$(CONFIG_FB_I810) += video/fbdev/i810/ -obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/ obj-$(CONFIG_PARPORT) += parport/ obj-$(CONFIG_NVM) += lightnvm/ @@ -82,6 +77,12 @@ obj-$(CONFIG_SCSI) += scsi/ obj-y += nvme/ obj-$(CONFIG_ATA) += ata/ + +# gpu/ comes after char for AGP vs DRM startup and after iommu +obj-y += gpu/ +# i810fb and intelfb depend on char/agp/ +obj-$(CONFIG_FB_I810) += video/fbdev/i810/ +obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/ obj-$(CONFIG_TARGET_CORE) += target/ obj-$(CONFIG_MTD) += mtd/ obj-$(CONFIG_SPI) += spi/ --- linux-aws-4.15.0.orig/drivers/acpi/apei/einj.c +++ linux-aws-4.15.0/drivers/acpi/apei/einj.c @@ -518,6 +518,9 @@ int rc; u64 base_addr, size; + if (kernel_is_locked_down("ACPI error injection")) + return -EPERM; + /* If user manually set "flags", make sure it is legal */ if (flags && (flags & ~(SETWA_FLAGS_APICID|SETWA_FLAGS_MEM|SETWA_FLAGS_PCIE_SBDF))) --- linux-aws-4.15.0.orig/drivers/acpi/custom_method.c +++ linux-aws-4.15.0/drivers/acpi/custom_method.c @@ -29,6 +29,9 @@ struct acpi_table_header table; acpi_status status; + if (kernel_is_locked_down("ACPI custom methods")) + return -EPERM; + if (!(*ppos)) { /* parse the table header to get the table length */ if (count <= sizeof(struct acpi_table_header)) --- linux-aws-4.15.0.orig/drivers/acpi/osi.c +++ linux-aws-4.15.0/drivers/acpi/osi.c @@ -457,6 +457,77 @@ }, /* + * The following Lenovo models have a broken workaround in the + * acpi_video backlight implementation to meet the Windows 8 + * requirement of 101 backlight levels. Reverting to pre-Win8 + * behavior fixes the problem. + */ + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad L430", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L430"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad T430", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T430"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad T430s", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T430s"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad T530", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T530"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad W530", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W530"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad X1 Carbon", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X1 Carbon"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad X230", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X230"), + }, + }, + { + .callback = dmi_disable_osi_win8, + .ident = "Lenovo ThinkPad Edge E330", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Edge E330"), + }, + }, + + /* * BIOS invocation of _OSI(Linux) is almost always a BIOS bug. * Linux ignores it, except for the machines enumerated below. */ --- linux-aws-4.15.0.orig/drivers/acpi/osl.c +++ linux-aws-4.15.0/drivers/acpi/osl.c @@ -192,7 +192,7 @@ acpi_physical_address pa = 0; #ifdef CONFIG_KEXEC - if (acpi_rsdp) + if (acpi_rsdp && !kernel_is_locked_down("ACPI RSDP specification")) return acpi_rsdp; #endif --- linux-aws-4.15.0.orig/drivers/acpi/tables.c +++ linux-aws-4.15.0/drivers/acpi/tables.c @@ -526,6 +526,11 @@ if (table_nr == 0) return; + if (kernel_is_locked_down("ACPI table override")) { + pr_notice("kernel is locked down, ignoring table override\n"); + return; + } + acpi_tables_addr = memblock_find_in_range(0, ACPI_TABLE_UPGRADE_MAX_PHYS, all_tables_size, PAGE_SIZE); --- linux-aws-4.15.0.orig/drivers/android/binder.c +++ linux-aws-4.15.0/drivers/android/binder.c @@ -4302,6 +4302,18 @@ if (t) spin_lock(&t->lock); } + + /* + * If this thread used poll, make sure we remove the waitqueue + * from any epoll data structures holding it with POLLFREE. + * waitqueue_active() is safe to use here because we're holding + * the inner lock. + */ + if ((thread->looper & BINDER_LOOPER_STATE_POLL) && + waitqueue_active(&thread->wait)) { + wake_up_poll(&thread->wait, POLLHUP | POLLFREE); + } + binder_inner_proc_unlock(thread->proc); if (send_reply) --- linux-aws-4.15.0.orig/drivers/android/binder_alloc.c +++ linux-aws-4.15.0/drivers/android/binder_alloc.c @@ -666,7 +666,7 @@ goto err_already_mapped; } - area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); + area = get_vm_area(vma->vm_end - vma->vm_start, VM_ALLOC); if (area == NULL) { ret = -ENOMEM; failure_string = "get_vm_area"; --- linux-aws-4.15.0.orig/drivers/auxdisplay/img-ascii-lcd.c +++ linux-aws-4.15.0/drivers/auxdisplay/img-ascii-lcd.c @@ -441,3 +441,7 @@ .remove = img_ascii_lcd_remove, }; module_platform_driver(img_ascii_lcd_driver); + +MODULE_DESCRIPTION("Imagination Technologies ASCII LCD Display"); +MODULE_AUTHOR("Paul Burton "); +MODULE_LICENSE("GPL"); --- linux-aws-4.15.0.orig/drivers/block/loop.c +++ linux-aws-4.15.0/drivers/block/loop.c @@ -600,6 +600,15 @@ lo->use_dio); } +static struct file *loop_real_file(struct file *file) +{ + struct file *f = NULL; + + if (file->f_path.dentry->d_sb->s_op->real_loop) + f = file->f_path.dentry->d_sb->s_op->real_loop(file); + return f; +} + static void loop_reread_partitions(struct loop_device *lo, struct block_device *bdev) { @@ -634,6 +643,7 @@ unsigned int arg) { struct file *file, *old_file; + struct file *f, *virt_file = NULL, *old_virt_file; struct inode *inode; int error; @@ -650,9 +660,16 @@ file = fget(arg); if (!file) goto out; + f = loop_real_file(file); + if (f) { + virt_file = file; + file = f; + get_file(file); + } inode = file->f_mapping->host; old_file = lo->lo_backing_file; + old_virt_file = lo->lo_backing_virt_file; error = -EINVAL; @@ -667,6 +684,7 @@ blk_mq_freeze_queue(lo->lo_queue); mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask); lo->lo_backing_file = file; + lo->lo_backing_virt_file = virt_file; lo->old_gfp_mask = mapping_gfp_mask(file->f_mapping); mapping_set_gfp_mask(file->f_mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS)); @@ -674,12 +692,16 @@ blk_mq_unfreeze_queue(lo->lo_queue); fput(old_file); + if (old_virt_file) + fput(old_virt_file); if (lo->lo_flags & LO_FLAGS_PARTSCAN) loop_reread_partitions(lo, bdev); return 0; out_putf: fput(file); + if (virt_file) + fput(virt_file); out: return error; } @@ -691,6 +713,24 @@ return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR; } +/* + * for AUFS + * no get/put for file. + */ +struct file *loop_backing_file(struct super_block *sb) +{ + struct file *ret; + struct loop_device *l; + + ret = NULL; + if (MAJOR(sb->s_dev) == LOOP_MAJOR) { + l = sb->s_bdev->bd_disk->private_data; + ret = l->lo_backing_file; + } + return ret; +} +EXPORT_SYMBOL_GPL(loop_backing_file); + /* loop sysfs attributes */ static ssize_t loop_attr_show(struct device *dev, char *page, @@ -855,7 +895,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, struct block_device *bdev, unsigned int arg) { - struct file *file, *f; + struct file *file, *f, *virt_file = NULL; struct inode *inode; struct address_space *mapping; int lo_flags = 0; @@ -869,6 +909,12 @@ file = fget(arg); if (!file) goto out; + f = loop_real_file(file); + if (f) { + virt_file = file; + file = f; + get_file(file); + } error = -EBUSY; if (lo->lo_state != Lo_unbound) @@ -917,6 +963,7 @@ lo->lo_device = bdev; lo->lo_flags = lo_flags; lo->lo_backing_file = file; + lo->lo_backing_virt_file = virt_file; lo->transfer = NULL; lo->ioctl = NULL; lo->lo_sizelimit = 0; @@ -950,6 +997,8 @@ out_putf: fput(file); + if (virt_file) + fput(virt_file); out: /* This is safe: open() is still holding a reference. */ module_put(THIS_MODULE); @@ -996,6 +1045,7 @@ static int loop_clr_fd(struct loop_device *lo) { struct file *filp = lo->lo_backing_file; + struct file *virt_filp = lo->lo_backing_virt_file; gfp_t gfp = lo->old_gfp_mask; struct block_device *bdev = lo->lo_device; @@ -1027,6 +1077,7 @@ spin_lock_irq(&lo->lo_lock); lo->lo_state = Lo_rundown; lo->lo_backing_file = NULL; + lo->lo_backing_virt_file = NULL; spin_unlock_irq(&lo->lo_lock); loop_release_xfer(lo); @@ -1074,6 +1125,8 @@ * bd_mutex which is usually taken before lo_ctl_mutex. */ fput(filp); + if (virt_filp) + fput(virt_filp); return 0; } --- linux-aws-4.15.0.orig/drivers/block/loop.h +++ linux-aws-4.15.0/drivers/block/loop.h @@ -46,7 +46,7 @@ int (*ioctl)(struct loop_device *, int cmd, unsigned long arg); - struct file * lo_backing_file; + struct file * lo_backing_file, *lo_backing_virt_file; struct block_device *lo_device; void *key_data; --- linux-aws-4.15.0.orig/drivers/bluetooth/btusb.c +++ linux-aws-4.15.0/drivers/bluetooth/btusb.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -263,6 +264,7 @@ /* QCA ROME chipset */ { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME }, + { USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME }, { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME }, @@ -387,9 +389,8 @@ #define BTUSB_FIRMWARE_LOADED 7 #define BTUSB_FIRMWARE_FAILED 8 #define BTUSB_BOOTING 9 -#define BTUSB_RESET_RESUME 10 -#define BTUSB_DIAG_RUNNING 11 -#define BTUSB_OOB_WAKE_ENABLED 12 +#define BTUSB_DIAG_RUNNING 10 +#define BTUSB_OOB_WAKE_ENABLED 11 struct btusb_data { struct hci_dev *hdev; @@ -3120,9 +3121,9 @@ /* QCA Rome devices lose their updated firmware over suspend, * but the USB hub doesn't notice any status change. - * Explicitly request a device reset on resume. + * explicitly request a device reset on resume. */ - set_bit(BTUSB_RESET_RESUME, &data->flags); + interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME; } #ifdef CONFIG_BT_HCIBTUSB_RTL @@ -3133,7 +3134,7 @@ * but the USB hub doesn't notice any status change. * Explicitly request a device reset on resume. */ - set_bit(BTUSB_RESET_RESUME, &data->flags); + interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME; } #endif @@ -3299,14 +3300,6 @@ enable_irq(data->oob_wake_irq); } - /* Optionally request a device reset on resume, but only when - * wakeups are disabled. If wakeups are enabled we assume the - * device will stay powered up throughout suspend. - */ - if (test_bit(BTUSB_RESET_RESUME, &data->flags) && - !device_may_wakeup(&data->udev->dev)) - data->udev->reset_resume = 1; - return 0; } --- linux-aws-4.15.0.orig/drivers/bluetooth/hci_serdev.c +++ linux-aws-4.15.0/drivers/bluetooth/hci_serdev.c @@ -303,6 +303,7 @@ hci_set_drvdata(hdev, hu); INIT_WORK(&hu->write_work, hci_uart_write_work); + percpu_init_rwsem(&hu->proto_lock); /* Only when vendor specific setup callback is provided, consider * the manufacturer information valid. This avoids filling in the --- linux-aws-4.15.0.orig/drivers/cdrom/cdrom.c +++ linux-aws-4.15.0/drivers/cdrom/cdrom.c @@ -289,7 +289,7 @@ /* default compatibility mode */ static bool autoclose=1; static bool autoeject; -static bool lockdoor = 1; +static bool lockdoor = 0; /* will we ever get to use this... sigh. */ static bool check_media_type; /* automatically restart mrw format */ --- linux-aws-4.15.0.orig/drivers/char/mem.c +++ linux-aws-4.15.0/drivers/char/mem.c @@ -767,6 +767,8 @@ static int open_port(struct inode *inode, struct file *filp) { + if (kernel_is_locked_down("/dev/mem,kmem,port")) + return -EPERM; return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; } --- linux-aws-4.15.0.orig/drivers/cpufreq/cpufreq.c +++ linux-aws-4.15.0/drivers/cpufreq/cpufreq.c @@ -2455,6 +2455,20 @@ return 0; } +static char cpufreq_driver_name[CPUFREQ_NAME_LEN]; + +static int __init cpufreq_driver_setup(char *str) +{ + strlcpy(cpufreq_driver_name, str, CPUFREQ_NAME_LEN); + return 1; +} + +/* + * Set this name to only allow one specific cpu freq driver, e.g., + * cpufreq_driver=powernow-k8 + */ +__setup("cpufreq_driver=", cpufreq_driver_setup); + /** * cpufreq_register_driver - register a CPU Frequency driver * @driver_data: A struct cpufreq_driver containing the values# @@ -2481,7 +2495,13 @@ (!!driver_data->get_intermediate != !!driver_data->target_intermediate)) return -EINVAL; - pr_debug("trying to register driver %s\n", driver_data->name); + pr_debug("trying to register driver %s, cpufreq_driver=%s\n", + driver_data->name, cpufreq_driver_name); + + if (cpufreq_driver_name[0]) + if (!driver_data->name || + strcmp(cpufreq_driver_name, driver_data->name)) + return -EINVAL; /* Protect against concurrent CPU online/offline. */ cpus_read_lock(); --- linux-aws-4.15.0.orig/drivers/crypto/inside-secure/safexcel_hash.c +++ linux-aws-4.15.0/drivers/crypto/inside-secure/safexcel_hash.c @@ -34,6 +34,8 @@ bool hmac; bool needs_inv; + int nents; + u8 state_sz; /* expected sate size, only set once */ u32 state[SHA256_DIGEST_SIZE / sizeof(u32)] __aligned(sizeof(u32)); @@ -152,8 +154,10 @@ memcpy(areq->result, sreq->state, crypto_ahash_digestsize(ahash)); - dma_unmap_sg(priv->dev, areq->src, - sg_nents_for_len(areq->src, areq->nbytes), DMA_TO_DEVICE); + if (sreq->nents) { + dma_unmap_sg(priv->dev, areq->src, sreq->nents, DMA_TO_DEVICE); + sreq->nents = 0; + } safexcel_free_context(priv, async, sreq->state_sz); @@ -178,7 +182,7 @@ struct safexcel_command_desc *cdesc, *first_cdesc = NULL; struct safexcel_result_desc *rdesc; struct scatterlist *sg; - int i, nents, queued, len, cache_len, extra, n_cdesc = 0, ret = 0; + int i, queued, len, cache_len, extra, n_cdesc = 0, ret = 0; queued = len = req->len - req->processed; if (queued < crypto_ahash_blocksize(ahash)) @@ -186,17 +190,31 @@ else cache_len = queued - areq->nbytes; - /* - * If this is not the last request and the queued data does not fit - * into full blocks, cache it for the next send() call. - */ - extra = queued & (crypto_ahash_blocksize(ahash) - 1); - if (!req->last_req && extra) { - sg_pcopy_to_buffer(areq->src, sg_nents(areq->src), - req->cache_next, extra, areq->nbytes - extra); - - queued -= extra; - len -= extra; + if (!req->last_req) { + /* If this is not the last request and the queued data does not + * fit into full blocks, cache it for the next send() call. + */ + extra = queued & (crypto_ahash_blocksize(ahash) - 1); + if (!extra) + /* If this is not the last request and the queued data + * is a multiple of a block, cache the last one for now. + */ + extra = queued - crypto_ahash_blocksize(ahash); + + if (extra) { + sg_pcopy_to_buffer(areq->src, sg_nents(areq->src), + req->cache_next, extra, + areq->nbytes - extra); + + queued -= extra; + len -= extra; + + if (!queued) { + *commands = 0; + *results = 0; + return 0; + } + } } spin_lock_bh(&priv->ring[ring].egress_lock); @@ -234,15 +252,15 @@ } /* Now handle the current ahash request buffer(s) */ - nents = dma_map_sg(priv->dev, areq->src, - sg_nents_for_len(areq->src, areq->nbytes), - DMA_TO_DEVICE); - if (!nents) { + req->nents = dma_map_sg(priv->dev, areq->src, + sg_nents_for_len(areq->src, areq->nbytes), + DMA_TO_DEVICE); + if (!req->nents) { ret = -ENOMEM; goto cdesc_rollback; } - for_each_sg(areq->src, sg, nents, i) { + for_each_sg(areq->src, sg, req->nents, i) { int sglen = sg_dma_len(sg); /* Do not overflow the request */ --- linux-aws-4.15.0.orig/drivers/firmware/efi/Kconfig +++ linux-aws-4.15.0/drivers/firmware/efi/Kconfig @@ -159,7 +159,10 @@ using the TCG Platform Reset Attack Mitigation specification. This protects against an attacker forcibly rebooting the system while it still contains secrets in RAM, booting another OS and extracting the - secrets. + secrets. This should only be enabled when userland is configured to + clear the MemoryOverwriteRequest flag on clean shutdown after secrets + have been evicted, since otherwise it will trigger even on clean + reboots. endmenu --- linux-aws-4.15.0.orig/drivers/firmware/efi/Makefile +++ linux-aws-4.15.0/drivers/firmware/efi/Makefile @@ -24,6 +24,7 @@ obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o obj-$(CONFIG_EFI_TEST) += test/ obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o +obj-$(CONFIG_EFI) += secureboot.o obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o arm-obj-$(CONFIG_EFI) := arm-init.o arm-runtime.o --- linux-aws-4.15.0.orig/drivers/firmware/efi/libstub/secureboot.c +++ linux-aws-4.15.0/drivers/firmware/efi/libstub/secureboot.c @@ -77,10 +77,8 @@ return efi_secureboot_mode_disabled; secure_boot_enabled: - pr_efi(sys_table_arg, "UEFI Secure Boot is enabled.\n"); return efi_secureboot_mode_enabled; out_efi_err: - pr_efi_err(sys_table_arg, "Could not determine UEFI Secure Boot status.\n"); return efi_secureboot_mode_unknown; } --- linux-aws-4.15.0.orig/drivers/firmware/efi/secureboot.c +++ linux-aws-4.15.0/drivers/firmware/efi/secureboot.c @@ -0,0 +1,38 @@ +/* Core kernel secure boot support. + * + * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include + +/* + * Decide what to do when UEFI secure boot mode is enabled. + */ +void __init efi_set_secure_boot(enum efi_secureboot_mode mode) +{ + if (efi_enabled(EFI_BOOT)) { + switch (mode) { + case efi_secureboot_mode_disabled: + pr_info("Secure boot disabled\n"); + break; + case efi_secureboot_mode_enabled: + set_bit(EFI_SECURE_BOOT, &efi.flags); + pr_info("Secure boot enabled\n"); + break; + default: + pr_warning("Secure boot could not be determined (mode %u)\n", + mode); + break; + } + } +} --- linux-aws-4.15.0.orig/drivers/fpga/fpga-region.c +++ linux-aws-4.15.0/drivers/fpga/fpga-region.c @@ -147,6 +147,7 @@ mgr_node = of_parse_phandle(np, "fpga-mgr", 0); if (mgr_node) { mgr = of_fpga_mgr_get(mgr_node); + of_node_put(mgr_node); of_node_put(np); return mgr; } @@ -192,10 +193,13 @@ parent_br = region_np->parent; /* If overlay has a list of bridges, use it. */ - if (of_parse_phandle(overlay, "fpga-bridges", 0)) + br = of_parse_phandle(overlay, "fpga-bridges", 0); + if (br) { + of_node_put(br); np = overlay; - else + } else { np = region_np; + } for (i = 0; ; i++) { br = of_parse_phandle(np, "fpga-bridges", i); @@ -203,12 +207,15 @@ break; /* If parent bridge is in list, skip it. */ - if (br == parent_br) + if (br == parent_br) { + of_node_put(br); continue; + } /* If node is a bridge, get it and add to list */ ret = fpga_bridge_get_to_list(br, region->info, ®ion->bridge_list); + of_node_put(br); /* If any of the bridges are in use, give up */ if (ret == -EBUSY) { --- linux-aws-4.15.0.orig/drivers/gpio/gpio-ath79.c +++ linux-aws-4.15.0/drivers/gpio/gpio-ath79.c @@ -324,3 +324,6 @@ }; module_platform_driver(ath79_gpio_driver); + +MODULE_DESCRIPTION("Atheros AR71XX/AR724X/AR913X GPIO API support"); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/gpio/gpio-iop.c +++ linux-aws-4.15.0/drivers/gpio/gpio-iop.c @@ -58,3 +58,7 @@ return platform_driver_register(&iop3xx_gpio_driver); } arch_initcall(iop3xx_gpio_init); + +MODULE_DESCRIPTION("GPIO handling for Intel IOP3xx processors"); +MODULE_AUTHOR("Lennert Buytenhek "); +MODULE_LICENSE("GPL"); --- linux-aws-4.15.0.orig/drivers/gpio/gpio-stmpe.c +++ linux-aws-4.15.0/drivers/gpio/gpio-stmpe.c @@ -190,6 +190,16 @@ }; int i, j; + /* + * STMPE1600: to be able to get IRQ from pins, + * a read must be done on GPMR register, or a write in + * GPSR or GPCR registers + */ + if (stmpe->partnum == STMPE1600) { + stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_LSB]); + stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_CSB]); + } + for (i = 0; i < CACHE_NR_REGS; i++) { /* STMPE801 and STMPE1600 don't have RE and FE registers */ if ((stmpe->partnum == STMPE801 || @@ -227,21 +237,11 @@ { struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct stmpe_gpio *stmpe_gpio = gpiochip_get_data(gc); - struct stmpe *stmpe = stmpe_gpio->stmpe; int offset = d->hwirq; int regoffset = offset / 8; int mask = BIT(offset % 8); stmpe_gpio->regs[REG_IE][regoffset] |= mask; - - /* - * STMPE1600 workaround: to be able to get IRQ from pins, - * a read must be done on GPMR register, or a write in - * GPSR or GPCR registers - */ - if (stmpe->partnum == STMPE1600) - stmpe_reg_read(stmpe, - stmpe->regs[STMPE_IDX_GPMR_LSB + regoffset]); } static void stmpe_dbg_show_one(struct seq_file *s, --- linux-aws-4.15.0.orig/drivers/gpio/gpio-uniphier.c +++ linux-aws-4.15.0/drivers/gpio/gpio-uniphier.c @@ -505,4 +505,4 @@ MODULE_AUTHOR("Masahiro Yamada "); MODULE_DESCRIPTION("UniPhier GPIO driver"); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/gpio/gpiolib.c +++ linux-aws-4.15.0/drivers/gpio/gpiolib.c @@ -732,6 +732,9 @@ struct gpioevent_data ge; int ret, level; + /* Do not leak kernel stack to userspace */ + memset(&ge, 0, sizeof(ge)); + ge.timestamp = ktime_get_real_ns(); level = gpiod_get_value_cansleep(le->desc); --- linux-aws-4.15.0.orig/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c +++ linux-aws-4.15.0/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c @@ -14,6 +14,16 @@ #include "amd_acpi.h" +#define AMDGPU_PX_QUIRK_FORCE_ATPX (1 << 0) + +struct amdgpu_px_quirk { + u32 chip_vendor; + u32 chip_device; + u32 subsys_vendor; + u32 subsys_device; + u32 px_quirk_flags; +}; + struct amdgpu_atpx_functions { bool px_params; bool power_cntl; @@ -35,6 +45,7 @@ static struct amdgpu_atpx_priv { bool atpx_detected; bool bridge_pm_usable; + unsigned int quirks; /* handle for device - and atpx */ acpi_handle dhandle; acpi_handle other_handle; @@ -205,13 +216,19 @@ atpx->is_hybrid = false; if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) { - printk("ATPX Hybrid Graphics\n"); - /* - * Disable legacy PM methods only when pcie port PM is usable, - * otherwise the device might fail to power off or power on. - */ - atpx->functions.power_cntl = !amdgpu_atpx_priv.bridge_pm_usable; - atpx->is_hybrid = true; + if (amdgpu_atpx_priv.quirks & AMDGPU_PX_QUIRK_FORCE_ATPX) { + printk("ATPX Hybrid Graphics, forcing to ATPX\n"); + atpx->functions.power_cntl = true; + atpx->is_hybrid = false; + } else { + printk("ATPX Hybrid Graphics\n"); + /* + * Disable legacy PM methods only when pcie port PM is usable, + * otherwise the device might fail to power off or power on. + */ + atpx->functions.power_cntl = !amdgpu_atpx_priv.bridge_pm_usable; + atpx->is_hybrid = true; + } } atpx->dgpu_req_power_for_displays = false; @@ -547,6 +564,30 @@ .get_client_id = amdgpu_atpx_get_client_id, }; +static const struct amdgpu_px_quirk amdgpu_px_quirk_list[] = { + /* HG _PR3 doesn't seem to work on this A+A weston board */ + { 0x1002, 0x6900, 0x1002, 0x0124, AMDGPU_PX_QUIRK_FORCE_ATPX }, + { 0x1002, 0x6900, 0x1028, 0x0812, AMDGPU_PX_QUIRK_FORCE_ATPX }, + { 0, 0, 0, 0, 0 }, +}; + +static void amdgpu_atpx_get_quirks(struct pci_dev *pdev) +{ + const struct amdgpu_px_quirk *p = amdgpu_px_quirk_list; + + /* Apply PX quirks */ + while (p && p->chip_device != 0) { + if (pdev->vendor == p->chip_vendor && + pdev->device == p->chip_device && + pdev->subsystem_vendor == p->subsys_vendor && + pdev->subsystem_device == p->subsys_device) { + amdgpu_atpx_priv.quirks |= p->px_quirk_flags; + break; + } + ++p; + } +} + /** * amdgpu_atpx_detect - detect whether we have PX * @@ -570,6 +611,7 @@ parent_pdev = pci_upstream_bridge(pdev); d3_supported |= parent_pdev && parent_pdev->bridge_d3; + amdgpu_atpx_get_quirks(pdev); } while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) { @@ -579,6 +621,7 @@ parent_pdev = pci_upstream_bridge(pdev); d3_supported |= parent_pdev && parent_pdev->bridge_d3; + amdgpu_atpx_get_quirks(pdev); } if (has_atpx && vga_count == 2) { --- linux-aws-4.15.0.orig/drivers/gpu/drm/i915/i915_drv.h +++ linux-aws-4.15.0/drivers/gpu/drm/i915/i915_drv.h @@ -2745,6 +2745,9 @@ bool ipc_enabled; + /* Hack to bypass TMDS_OE write on DP->HDMI dongle */ + bool bypass_tmds_oe; + /* Used to save the pipe-to-encoder mapping for audio */ struct intel_encoder *av_enc_map[I915_MAX_PIPES]; --- linux-aws-4.15.0.orig/drivers/gpu/drm/i915/intel_bios.c +++ linux-aws-4.15.0/drivers/gpu/drm/i915/intel_bios.c @@ -29,6 +29,7 @@ #include #include #include "i915_drv.h" +#include #define _INTEL_BIOS_PRIVATE #include "intel_vbt_defs.h" @@ -1488,6 +1489,22 @@ return NULL; } +#define DRM_DMI_PRODUCT_VERSION 0x6 + +static void parse_product_info(struct drm_i915_private *dev_priv) +{ + const char *product_ver = dmi_get_system_info(DRM_DMI_PRODUCT_VERSION); + if (!product_ver) + return; + + if (!strncmp(product_ver, "ThinkPad X1", 11)) { + DRM_DEBUG_KMS("dmi: %s, Bypassing TMDS_OE write\n", product_ver); + dev_priv->bypass_tmds_oe = true; + } + + return; +} + /** * intel_bios_init - find VBT and initialize settings from the BIOS * @dev_priv: i915 device instance @@ -1546,6 +1563,8 @@ parse_sdvo_device_mapping(dev_priv, bdb->version); parse_ddi_ports(dev_priv, bdb->version); + parse_product_info(dev_priv); + out: if (!vbt) { DRM_INFO("Failed to find VBIOS tables (VBT)\n"); --- linux-aws-4.15.0.orig/drivers/gpu/drm/i915/intel_guc_fw.c +++ linux-aws-4.15.0/drivers/gpu/drm/i915/intel_guc_fw.c @@ -49,10 +49,8 @@ MODULE_FIRMWARE(I915_SKL_GUC_UCODE); #define I915_BXT_GUC_UCODE GUC_FW_PATH(bxt, BXT_FW_MAJOR, BXT_FW_MINOR) -MODULE_FIRMWARE(I915_BXT_GUC_UCODE); #define I915_KBL_GUC_UCODE GUC_FW_PATH(kbl, KBL_FW_MAJOR, KBL_FW_MINOR) -MODULE_FIRMWARE(I915_KBL_GUC_UCODE); #define I915_GLK_GUC_UCODE GUC_FW_PATH(glk, GLK_FW_MAJOR, GLK_FW_MINOR) --- linux-aws-4.15.0.orig/drivers/gpu/drm/i915/intel_hdmi.c +++ linux-aws-4.15.0/drivers/gpu/drm/i915/intel_hdmi.c @@ -867,6 +867,11 @@ if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI) return; + if (dev_priv->bypass_tmds_oe) { + DRM_DEBUG_KMS("Bypassing TMDS_OE setting\n"); + return; + } + DRM_DEBUG_KMS("%s DP dual mode adaptor TMDS output\n", enable ? "Enabling" : "Disabling"); --- linux-aws-4.15.0.orig/drivers/gpu/drm/nouveau/nouveau_bios.c +++ linux-aws-4.15.0/drivers/gpu/drm/nouveau/nouveau_bios.c @@ -935,7 +935,7 @@ tmdstableptr = ROM16(bios->data[bitentry->offset]); if (!tmdstableptr) { - NV_ERROR(drm, "Pointer to TMDS table invalid\n"); + NV_WARN(drm, "Pointer to TMDS table invalid\n"); return -EINVAL; } --- linux-aws-4.15.0.orig/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +++ linux-aws-4.15.0/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c @@ -333,14 +333,18 @@ static struct dma_page *__ttm_dma_alloc_page(struct dma_pool *pool) { struct dma_page *d_page; + unsigned long attrs = 0; void *vaddr; d_page = kmalloc(sizeof(struct dma_page), GFP_KERNEL); if (!d_page) return NULL; - vaddr = dma_alloc_coherent(pool->dev, pool->size, &d_page->dma, - pool->gfp_flags); + if (pool->type & IS_HUGE) + attrs = DMA_ATTR_NO_WARN; + + vaddr = dma_alloc_attrs(pool->dev, pool->size, &d_page->dma, + pool->gfp_flags, attrs); if (vaddr) { if (is_vmalloc_addr(vaddr)) d_page->p = vmalloc_to_page(vaddr); --- linux-aws-4.15.0.orig/drivers/hid/hid-ids.h +++ linux-aws-4.15.0/drivers/hid/hid-ids.h @@ -75,6 +75,7 @@ #define USB_VENDOR_ID_ALPS_JP 0x044E #define HID_DEVICE_ID_ALPS_U1_DUAL 0x120B +#define HID_DEVICE_ID_ALPS_U1_PTP_2 0x120A #define HID_DEVICE_ID_ALPS_U1_DUAL_PTP 0x121F #define HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP 0x1220 #define HID_DEVICE_ID_ALPS_U1 0x1215 --- linux-aws-4.15.0.orig/drivers/hid/hid-multitouch.c +++ linux-aws-4.15.0/drivers/hid/hid-multitouch.c @@ -1463,6 +1463,10 @@ HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) }, + { .driver_data = MT_CLS_WIN_8_DUAL, + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, + USB_VENDOR_ID_ALPS_JP, + HID_DEVICE_ID_ALPS_U1_PTP_2) }, /* Lenovo X1 TAB Gen 2 */ { .driver_data = MT_CLS_WIN_8_DUAL, --- linux-aws-4.15.0.orig/drivers/hid/wacom_sys.c +++ linux-aws-4.15.0/drivers/hid/wacom_sys.c @@ -2347,23 +2347,23 @@ int i; unsigned long flags; - spin_lock_irqsave(&remote->remote_lock, flags); - remote->remotes[index].registered = false; - spin_unlock_irqrestore(&remote->remote_lock, flags); + for (i = 0; i < WACOM_MAX_REMOTES; i++) { + if (remote->remotes[i].serial == serial) { - if (remote->remotes[index].battery.battery) - devres_release_group(&wacom->hdev->dev, - &remote->remotes[index].battery.bat_desc); + spin_lock_irqsave(&remote->remote_lock, flags); + remote->remotes[i].registered = false; + spin_unlock_irqrestore(&remote->remote_lock, flags); - if (remote->remotes[index].group.name) - devres_release_group(&wacom->hdev->dev, - &remote->remotes[index]); + if (remote->remotes[i].battery.battery) + devres_release_group(&wacom->hdev->dev, + &remote->remotes[i].battery.bat_desc); + + if (remote->remotes[i].group.name) + devres_release_group(&wacom->hdev->dev, + &remote->remotes[i]); - for (i = 0; i < WACOM_MAX_REMOTES; i++) { - if (remote->remotes[i].serial == serial) { remote->remotes[i].serial = 0; remote->remotes[i].group.name = NULL; - remote->remotes[i].registered = false; remote->remotes[i].battery.battery = NULL; wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; } --- linux-aws-4.15.0.orig/drivers/hid/wacom_wac.c +++ linux-aws-4.15.0/drivers/hid/wacom_wac.c @@ -1924,7 +1924,6 @@ struct wacom_features *features = &wacom_wac->features; unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); int i; - bool is_touch_on = value; bool do_report = false; /* @@ -1969,16 +1968,17 @@ break; case WACOM_HID_WD_MUTE_DEVICE: - if (wacom_wac->shared->touch_input && value) { - wacom_wac->shared->is_touch_on = !wacom_wac->shared->is_touch_on; - is_touch_on = wacom_wac->shared->is_touch_on; - } - - /* fall through*/ case WACOM_HID_WD_TOUCHONOFF: if (wacom_wac->shared->touch_input) { + bool *is_touch_on = &wacom_wac->shared->is_touch_on; + + if (equivalent_usage == WACOM_HID_WD_MUTE_DEVICE && value) + *is_touch_on = !(*is_touch_on); + else if (equivalent_usage == WACOM_HID_WD_TOUCHONOFF) + *is_touch_on = value; + input_report_switch(wacom_wac->shared->touch_input, - SW_MUTE_DEVICE, !is_touch_on); + SW_MUTE_DEVICE, !(*is_touch_on)); input_sync(wacom_wac->shared->touch_input); } break; --- linux-aws-4.15.0.orig/drivers/iio/accel/kxsd9-i2c.c +++ linux-aws-4.15.0/drivers/iio/accel/kxsd9-i2c.c @@ -63,3 +63,6 @@ .id_table = kxsd9_i2c_id, }; module_i2c_driver(kxsd9_i2c_driver); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("KXSD9 accelerometer I2C interface"); --- linux-aws-4.15.0.orig/drivers/iio/adc/qcom-vadc-common.c +++ linux-aws-4.15.0/drivers/iio/adc/qcom-vadc-common.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "qcom-vadc-common.h" @@ -229,3 +230,6 @@ return __ffs64(value / VADC_DECIMATION_MIN); } EXPORT_SYMBOL(qcom_vadc_decimation_from_dt); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Qualcomm ADC common functionality"); --- linux-aws-4.15.0.orig/drivers/iio/adc/stm32-adc.c +++ linux-aws-4.15.0/drivers/iio/adc/stm32-adc.c @@ -1315,6 +1315,7 @@ { struct stm32_adc *adc = iio_priv(indio_dev); unsigned int watermark = STM32_DMA_BUFFER_SIZE / 2; + unsigned int rx_buf_sz = STM32_DMA_BUFFER_SIZE; /* * dma cyclic transfers are used, buffer is split into two periods. @@ -1323,7 +1324,7 @@ * - one buffer (period) driver can push with iio_trigger_poll(). */ watermark = min(watermark, val * (unsigned)(sizeof(u16))); - adc->rx_buf_sz = watermark * 2; + adc->rx_buf_sz = min(rx_buf_sz, watermark * 2 * adc->num_conv); return 0; } --- linux-aws-4.15.0.orig/drivers/iio/chemical/ccs811.c +++ linux-aws-4.15.0/drivers/iio/chemical/ccs811.c @@ -96,7 +96,6 @@ .channel2 = IIO_MOD_CO2, .modified = 1, .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | - BIT(IIO_CHAN_INFO_OFFSET) | BIT(IIO_CHAN_INFO_SCALE), .scan_index = 0, .scan_type = { @@ -255,24 +254,18 @@ switch (chan->channel2) { case IIO_MOD_CO2: *val = 0; - *val2 = 12834; + *val2 = 100; return IIO_VAL_INT_PLUS_MICRO; case IIO_MOD_VOC: *val = 0; - *val2 = 84246; - return IIO_VAL_INT_PLUS_MICRO; + *val2 = 100; + return IIO_VAL_INT_PLUS_NANO; default: return -EINVAL; } default: return -EINVAL; } - case IIO_CHAN_INFO_OFFSET: - if (!(chan->type == IIO_CONCENTRATION && - chan->channel2 == IIO_MOD_CO2)) - return -EINVAL; - *val = -400; - return IIO_VAL_INT; default: return -EINVAL; } --- linux-aws-4.15.0.orig/drivers/input/misc/uinput.c +++ linux-aws-4.15.0/drivers/input/misc/uinput.c @@ -362,6 +362,7 @@ dev->flush = uinput_dev_flush; } + dev->flags |= INPUTDEV_FLAGS_SYNTHETIC; dev->event = uinput_dev_event; input_set_drvdata(udev->dev, udev); --- linux-aws-4.15.0.orig/drivers/input/mouse/cypress_ps2.c +++ linux-aws-4.15.0/drivers/input/mouse/cypress_ps2.c @@ -390,7 +390,9 @@ if (ret < 0) return ret; +#if ( CYPRESS_SIMULATED_MT != 1 ) __set_bit(INPUT_PROP_SEMI_MT, input->propbit); +#endif input_abs_set_res(input, ABS_X, cytp->tp_res_x); input_abs_set_res(input, ABS_Y, cytp->tp_res_y); @@ -476,6 +478,22 @@ ((packet[5] & 0x0f) << 8) | packet[7]; if (cytp->mode & CYTP_BIT_ABS_PRESSURE) report_data->contacts[1].z = report_data->contacts[0].z; +#if ( CYPRESS_SIMULATED_MT == 1 ) + /* simulate contact positions for >2 fingers */ + if ( report_data->contact_cnt >= 3 ) { + int i; + for ( i=1; icontact_cnt; i++ ) { + report_data->contacts[i].x = + report_data->contacts[0].x + + 100*(i)*((i%2)?-1:1); + report_data->contacts[i].y = + report_data->contacts[0].y; + if (cytp->mode & CYTP_BIT_ABS_PRESSURE) + report_data->contacts[i].z = + report_data->contacts[0].z; + } + } +#endif } report_data->left = (header_byte & BTN_LEFT_BIT) ? 1 : 0; --- linux-aws-4.15.0.orig/drivers/input/mouse/cypress_ps2.h +++ linux-aws-4.15.0/drivers/input/mouse/cypress_ps2.h @@ -131,7 +131,18 @@ #define RESP_REMOTE_BIT 0x40 #define RESP_SMBUS_BIT 0x80 -#define CYTP_MAX_MT_SLOTS 2 +/* + * CYPRESS_SIMULATED_MT + * set to 1 for simulated multitouch (up to 5 contact points) + * set to 0 for SEMI_MT (only 2 corner points, and count of fingers) + */ +#define CYPRESS_SIMULATED_MT 1 + +#if ( CYPRESS_SIMULATED_MT == 1 ) +# define CYTP_MAX_MT_SLOTS 5 +#else +# define CYTP_MAX_MT_SLOTS 2 +#endif struct cytp_contact { int x; --- linux-aws-4.15.0.orig/drivers/input/mouse/synaptics.c +++ linux-aws-4.15.0/drivers/input/mouse/synaptics.c @@ -172,8 +172,11 @@ "LEN0048", /* X1 Carbon 3 */ "LEN0046", /* X250 */ "LEN004a", /* W541 */ + "LEN0073", /* X1 Carbon 5 */ "LEN200f", /* T450s */ "LEN2018", /* T460p */ + "LEN0092", /* X1 Carbon 6 */ + "LEN0096", /* X280 */ NULL }; --- linux-aws-4.15.0.orig/drivers/input/rmi4/rmi_driver.c +++ linux-aws-4.15.0/drivers/input/rmi4/rmi_driver.c @@ -41,6 +41,13 @@ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, "Freeing function list\n"); + /* Doing it in the reverse order so F01 will be removed last */ + list_for_each_entry_safe_reverse(fn, tmp, + &data->function_list, node) { + list_del(&fn->node); + rmi_unregister_function(fn); + } + devm_kfree(&rmi_dev->dev, data->irq_memory); data->irq_memory = NULL; data->irq_status = NULL; @@ -50,13 +57,6 @@ data->f01_container = NULL; data->f34_container = NULL; - - /* Doing it in the reverse order so F01 will be removed last */ - list_for_each_entry_safe_reverse(fn, tmp, - &data->function_list, node) { - list_del(&fn->node); - rmi_unregister_function(fn); - } } static int reset_one_function(struct rmi_function *fn) --- linux-aws-4.15.0.orig/drivers/input/rmi4/rmi_f03.c +++ linux-aws-4.15.0/drivers/input/rmi4/rmi_f03.c @@ -32,6 +32,7 @@ struct rmi_function *fn; struct serio *serio; + bool serio_registered; unsigned int overwrite_buttons; @@ -138,6 +139,37 @@ return 0; } +static int rmi_f03_pt_open(struct serio *serio) +{ + struct f03_data *f03 = serio->port_data; + struct rmi_function *fn = f03->fn; + const u8 ob_len = f03->rx_queue_length * RMI_F03_OB_SIZE; + const u16 data_addr = fn->fd.data_base_addr + RMI_F03_OB_OFFSET; + u8 obs[RMI_F03_QUEUE_LENGTH * RMI_F03_OB_SIZE]; + int error; + + /* + * Consume any pending data. Some devices like to spam with + * 0xaa 0x00 announcements which may confuse us as we try to + * probe the device. + */ + error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len); + if (!error) + rmi_dbg(RMI_DEBUG_FN, &fn->dev, + "%s: Consumed %*ph (%d) from PS2 guest\n", + __func__, ob_len, obs, ob_len); + + return fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask); +} + +static void rmi_f03_pt_close(struct serio *serio) +{ + struct f03_data *f03 = serio->port_data; + struct rmi_function *fn = f03->fn; + + fn->rmi_dev->driver->clear_irq_bits(fn->rmi_dev, fn->irq_mask); +} + static int rmi_f03_register_pt(struct f03_data *f03) { struct serio *serio; @@ -148,6 +180,8 @@ serio->id.type = SERIO_PS_PSTHRU; serio->write = rmi_f03_pt_write; + serio->open = rmi_f03_pt_open; + serio->close = rmi_f03_pt_close; serio->port_data = f03; strlcpy(serio->name, "Synaptics RMI4 PS/2 pass-through", @@ -184,17 +218,27 @@ f03->device_count); dev_set_drvdata(dev, f03); - - error = rmi_f03_register_pt(f03); - if (error) - return error; - return 0; } static int rmi_f03_config(struct rmi_function *fn) { - fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask); + struct f03_data *f03 = dev_get_drvdata(&fn->dev); + int error; + + if (!f03->serio_registered) { + error = rmi_f03_register_pt(f03); + if (error) + return error; + + f03->serio_registered = true; + } else { + /* + * We must be re-configuring the sensor, just enable + * interrupts for this function. + */ + fn->rmi_dev->driver->set_irq_bits(fn->rmi_dev, fn->irq_mask); + } return 0; } @@ -204,7 +248,7 @@ struct rmi_device *rmi_dev = fn->rmi_dev; struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); struct f03_data *f03 = dev_get_drvdata(&fn->dev); - u16 data_addr = fn->fd.data_base_addr; + const u16 data_addr = fn->fd.data_base_addr + RMI_F03_OB_OFFSET; const u8 ob_len = f03->rx_queue_length * RMI_F03_OB_SIZE; u8 obs[RMI_F03_QUEUE_LENGTH * RMI_F03_OB_SIZE]; u8 ob_status; @@ -226,8 +270,7 @@ drvdata->attn_data.size -= ob_len; } else { /* Grab all of the data registers, and check them for data */ - error = rmi_read_block(fn->rmi_dev, data_addr + RMI_F03_OB_OFFSET, - &obs, ob_len); + error = rmi_read_block(fn->rmi_dev, data_addr, &obs, ob_len); if (error) { dev_err(&fn->dev, "%s: Failed to read F03 output buffers: %d\n", @@ -266,7 +309,8 @@ { struct f03_data *f03 = dev_get_drvdata(&fn->dev); - serio_unregister_port(f03->serio); + if (f03->serio_registered) + serio_unregister_port(f03->serio); } struct rmi_function_handler rmi_f03_handler = { --- linux-aws-4.15.0.orig/drivers/input/serio/i8042.c +++ linux-aws-4.15.0/drivers/input/serio/i8042.c @@ -601,7 +601,7 @@ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { i8042_ctr &= ~I8042_CTR_KBDINT; i8042_ctr |= I8042_CTR_KBDDIS; - pr_err("Failed to enable KBD port\n"); + pr_info("Failed to enable KBD port\n"); return -EIO; } @@ -620,7 +620,7 @@ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { i8042_ctr &= ~I8042_CTR_AUXINT; i8042_ctr |= I8042_CTR_AUXDIS; - pr_err("Failed to enable AUX port\n"); + pr_info("Failed to enable AUX port\n"); return -EIO; } @@ -712,7 +712,7 @@ i8042_ctr &= ~I8042_CTR_AUXINT; if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) { - pr_err("Failed to disable AUX port, can't use MUX\n"); + pr_info("Failed to disable AUX port, can't use MUX\n"); return -EIO; } @@ -935,7 +935,7 @@ do { if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { - pr_err("i8042 controller selftest timeout\n"); + pr_info("i8042 controller selftest timeout\n"); return -ENODEV; } @@ -957,7 +957,7 @@ pr_info("giving up on controller selftest, continuing anyway...\n"); return 0; #else - pr_err("i8042 controller selftest failed\n"); + pr_info("i8042 controller selftest failed\n"); return -EIO; #endif } --- linux-aws-4.15.0.orig/drivers/leds/Kconfig +++ linux-aws-4.15.0/drivers/leds/Kconfig @@ -290,7 +290,6 @@ tristate "Common Driver for TI/National LP5521/5523/55231/5562/8501" depends on LEDS_LP5521 || LEDS_LP5523 || LEDS_LP5562 || LEDS_LP8501 select FW_LOADER - select FW_LOADER_USER_HELPER help This option supports common operations for LP5521/5523/55231/5562/8501 devices. --- linux-aws-4.15.0.orig/drivers/md/bcache/super.c +++ linux-aws-4.15.0/drivers/md/bcache/super.c @@ -1967,7 +1967,7 @@ sb); if (IS_ERR(bdev)) { if (bdev == ERR_PTR(-EBUSY)) { - bdev = lookup_bdev(strim(path)); + bdev = lookup_bdev(strim(path), 0); mutex_lock(&bch_register_lock); if (!IS_ERR(bdev) && bch_is_open(bdev)) err = "device already registered"; --- linux-aws-4.15.0.orig/drivers/md/dm-table.c +++ linux-aws-4.15.0/drivers/md/dm-table.c @@ -410,7 +410,7 @@ dev_t dev; struct block_device *bdev; - bdev = lookup_bdev(path); + bdev = lookup_bdev(path, 0); if (IS_ERR(bdev)) dev = name_to_dev_t(path); else { --- linux-aws-4.15.0.orig/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c +++ linux-aws-4.15.0/drivers/media/platform/mtk-vcodec/mtk_vcodec_util.c @@ -115,3 +115,6 @@ return ctx; } EXPORT_SYMBOL(mtk_vcodec_get_curr_ctx); + +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("Mediatek video codec driver"); --- linux-aws-4.15.0.orig/drivers/media/platform/soc_camera/soc_scale_crop.c +++ linux-aws-4.15.0/drivers/media/platform/soc_camera/soc_scale_crop.c @@ -420,3 +420,7 @@ mf->height = soc_camera_shift_scale(rect->height, shift, scale_v); } EXPORT_SYMBOL(soc_camera_calc_client_output); + +MODULE_DESCRIPTION("soc-camera scaling-cropping functions"); +MODULE_AUTHOR("Guennadi Liakhovetski "); +MODULE_LICENSE("GPL"); --- linux-aws-4.15.0.orig/drivers/media/platform/tegra-cec/tegra_cec.c +++ linux-aws-4.15.0/drivers/media/platform/tegra-cec/tegra_cec.c @@ -493,3 +493,8 @@ }; module_platform_driver(tegra_cec_driver); + +MODULE_DESCRIPTION("Tegra HDMI CEC driver"); +MODULE_AUTHOR("NVIDIA CORPORATION"); +MODULE_AUTHOR("Cisco Systems, Inc. and/or its affiliates"); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/misc/mei/pci-me.c +++ linux-aws-4.15.0/drivers/misc/mei/pci-me.c @@ -41,6 +41,9 @@ #include "hw-me-regs.h" #include "hw-me.h" +static bool disable_msi; +module_param(disable_msi, bool, 0); + /* mei_pci_tbl - PCI Device ID Table */ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_82946GZ, MEI_ME_ICH_CFG)}, @@ -191,7 +194,8 @@ hw = to_me_hw(dev); hw->mem_addr = pcim_iomap_table(pdev)[0]; - pci_enable_msi(pdev); + if (!disable_msi) + pci_enable_msi(pdev); /* request and enable interrupt */ irqflags = pci_dev_msi_enabled(pdev) ? IRQF_ONESHOT : IRQF_SHARED; @@ -238,8 +242,11 @@ */ mei_me_set_pm_domain(dev); - if (mei_pg_is_enabled(dev)) + if (mei_pg_is_enabled(dev)) { pm_runtime_put_noidle(&pdev->dev); + if (hw->d0i3_supported) + pm_runtime_allow(&pdev->dev); + } dev_dbg(&pdev->dev, "initialization successful.\n"); --- linux-aws-4.15.0.orig/drivers/mtd/mtdsuper.c +++ linux-aws-4.15.0/drivers/mtd/mtdsuper.c @@ -129,6 +129,7 @@ #ifdef CONFIG_BLOCK struct block_device *bdev; int ret, major; + int perm; #endif int mtdnr; @@ -180,7 +181,10 @@ /* try the old way - the hack where we allowed users to mount * /dev/mtdblock$(n) but didn't actually _use_ the blockdev */ - bdev = lookup_bdev(dev_name); + perm = MAY_READ; + if (!(flags & MS_RDONLY)) + perm |= MAY_WRITE; + bdev = lookup_bdev(dev_name, perm); if (IS_ERR(bdev)) { ret = PTR_ERR(bdev); pr_debug("MTDSB: lookup_bdev() returned %d\n", ret); --- linux-aws-4.15.0.orig/drivers/mtd/nand/denali_pci.c +++ linux-aws-4.15.0/drivers/mtd/nand/denali_pci.c @@ -125,3 +125,7 @@ .remove = denali_pci_remove, }; module_pci_driver(denali_pci_driver); + +MODULE_DESCRIPTION("PCI driver for Denali NAND controller"); +MODULE_AUTHOR("Intel Corporation and its suppliers"); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/net/ethernet/Kconfig +++ linux-aws-4.15.0/drivers/net/ethernet/Kconfig @@ -170,6 +170,7 @@ source "drivers/net/ethernet/sfc/Kconfig" source "drivers/net/ethernet/sgi/Kconfig" source "drivers/net/ethernet/smsc/Kconfig" +source "drivers/net/ethernet/socionext/Kconfig" source "drivers/net/ethernet/stmicro/Kconfig" source "drivers/net/ethernet/sun/Kconfig" source "drivers/net/ethernet/tehuti/Kconfig" --- linux-aws-4.15.0.orig/drivers/net/ethernet/Makefile +++ linux-aws-4.15.0/drivers/net/ethernet/Makefile @@ -82,6 +82,7 @@ obj-$(CONFIG_SFC_FALCON) += sfc/falcon/ obj-$(CONFIG_NET_VENDOR_SGI) += sgi/ obj-$(CONFIG_NET_VENDOR_SMSC) += smsc/ +obj-$(CONFIG_NET_VENDOR_SOCIONEXT) += socionext/ obj-$(CONFIG_NET_VENDOR_STMICRO) += stmicro/ obj-$(CONFIG_NET_VENDOR_SUN) += sun/ obj-$(CONFIG_NET_VENDOR_TEHUTI) += tehuti/ --- linux-aws-4.15.0.orig/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ linux-aws-4.15.0/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -12934,6 +12934,24 @@ struct net_device *dev, netdev_features_t features) { + /* + * A skb with gso_size + header length > 9700 will cause a + * firmware panic. Drop GSO support. + * + * Eventually the upper layer should not pass these packets down. + * + * For speed, if the gso_size is <= 9000, assume there will + * not be 700 bytes of headers and pass it through. Only do a + * full (slow) validation if the gso_size is > 9000. + * + * (Due to the way SKB_BY_FRAGS works this will also do a full + * validation in that case.) + */ + if (unlikely(skb_is_gso(skb) && + (skb_shinfo(skb)->gso_size > 9000) && + !skb_gso_validate_mac_len(skb, 9700))) + features &= ~NETIF_F_GSO_MASK; + features = vlan_features_check(skb, features); return vxlan_features_check(skb, features); } --- linux-aws-4.15.0.orig/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +++ linux-aws-4.15.0/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c @@ -1168,7 +1168,7 @@ int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb, enum hnae_led_state status) { - if (!mac_cb || !mac_cb->cpld_ctrl) + if (!mac_cb) return 0; return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status); --- linux-aws-4.15.0.orig/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +++ linux-aws-4.15.0/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c @@ -18,6 +18,7 @@ HNS_OP_LED_SET_FUNC = 0x3, HNS_OP_GET_PORT_TYPE_FUNC = 0x4, HNS_OP_GET_SFP_STAT_FUNC = 0x5, + HNS_OP_LOCATE_LED_SET_FUNC = 0x6, }; enum _dsm_rst_type { @@ -81,6 +82,33 @@ ACPI_FREE(obj); } +static void hns_dsaf_acpi_locate_ledctrl_by_port(struct hns_mac_cb *mac_cb, + u8 op_type, u32 locate, + u32 port) +{ + union acpi_object obj_args[2], argv4; + union acpi_object *obj; + + obj_args[0].integer.type = ACPI_TYPE_INTEGER; + obj_args[0].integer.value = locate; + obj_args[1].integer.type = ACPI_TYPE_INTEGER; + obj_args[1].integer.value = port; + + argv4.type = ACPI_TYPE_PACKAGE; + argv4.package.count = 2; + argv4.package.elements = obj_args; + + obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev), + &hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4); + if (!obj) { + dev_err(mac_cb->dev, "ledctrl fail, locate:%d port:%d!\n", + locate, port); + return; + } + + ACPI_FREE(obj); +} + static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, u16 speed, int data) { @@ -160,6 +188,9 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb, enum hnae_led_state status) { + if (!mac_cb->cpld_ctrl) + return 0; + switch (status) { case HNAE_LED_ACTIVE: mac_cb->cpld_led_value = @@ -184,6 +215,30 @@ return 0; } +static int cpld_set_led_id_acpi(struct hns_mac_cb *mac_cb, + enum hnae_led_state status) +{ + switch (status) { + case HNAE_LED_ACTIVE: + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, + HNS_OP_LOCATE_LED_SET_FUNC, + CPLD_LED_ON_VALUE, + mac_cb->mac_id); + break; + case HNAE_LED_INACTIVE: + hns_dsaf_acpi_locate_ledctrl_by_port(mac_cb, + HNS_OP_LOCATE_LED_SET_FUNC, + CPLD_LED_DEFAULT_VALUE, + mac_cb->mac_id); + break; + default: + dev_err(mac_cb->dev, "invalid led state: %d!", status); + return -EINVAL; + } + + return 0; +} + #define RESET_REQ_OR_DREQ 1 static void hns_dsaf_acpi_srst_by_port(struct dsaf_device *dsaf_dev, u8 op_type, @@ -660,7 +715,7 @@ } else if (is_acpi_node(dsaf_dev->dev->fwnode)) { misc_op->cpld_set_led = hns_cpld_set_led_acpi; misc_op->cpld_reset_led = cpld_led_reset_acpi; - misc_op->cpld_set_led_id = cpld_set_led_id; + misc_op->cpld_set_led_id = cpld_set_led_id_acpi; misc_op->dsaf_reset = hns_dsaf_rst_acpi; misc_op->xge_srst = hns_dsaf_xge_srst_by_port_acpi; --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/80003es2lan.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/80003es2lan.c @@ -698,7 +698,7 @@ ew32(TCTL, E1000_TCTL_PSP); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); ctrl = er32(CTRL); --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/82571.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/82571.c @@ -977,7 +977,7 @@ ew32(TCTL, tctl); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); /* Must acquire the MDIO ownership before MAC reset. * Ownership defaults to firmware after a reset. --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/ethtool.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/ethtool.c @@ -1032,7 +1032,7 @@ /* Disable all the interrupts */ ew32(IMC, 0xFFFFFFFF); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); /* Test each interrupt */ for (i = 0; i < 10; i++) { @@ -1064,7 +1064,7 @@ ew32(IMC, mask); ew32(ICS, mask); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); if (adapter->test_icr & mask) { *data = 3; @@ -1082,7 +1082,7 @@ ew32(IMS, mask); ew32(ICS, mask); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); if (!(adapter->test_icr & mask)) { *data = 4; @@ -1100,7 +1100,7 @@ ew32(IMC, ~mask & 0x00007FFF); ew32(ICS, ~mask & 0x00007FFF); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); if (adapter->test_icr) { *data = 5; @@ -1112,7 +1112,7 @@ /* Disable all the interrupts */ ew32(IMC, 0xFFFFFFFF); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); /* Unhook test interrupt handler */ free_irq(irq, netdev); @@ -1488,7 +1488,7 @@ */ ew32(SCTL, E1000_SCTL_ENABLE_SERDES_LOOPBACK); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); return 0; } @@ -1602,7 +1602,7 @@ hw->phy.media_type == e1000_media_type_internal_serdes) { ew32(SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); break; } /* Fall Through */ --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -289,7 +289,7 @@ u16 count = 20; do { - usleep_range(5000, 10000); + usleep_range(5000, 6000); } while (!(er32(CTRL_EXT) & E1000_CTRL_EXT_LPCD) && count--); msleep(30); @@ -423,7 +423,7 @@ /* Ungate automatic PHY configuration on non-managed 82579 */ if ((hw->mac.type == e1000_pch2lan) && !(fwsm & E1000_ICH_FWSM_FW_VALID)) { - usleep_range(10000, 20000); + usleep_range(10000, 11000); e1000_gate_hw_phy_config_ich8lan(hw, false); } @@ -549,7 +549,7 @@ phy->id = 0; while ((e1000_phy_unknown == e1000e_get_phy_type_from_id(phy->id)) && (i++ < 100)) { - usleep_range(1000, 2000); + usleep_range(1000, 1100); ret_val = e1000e_get_phy_id(hw); if (ret_val) return ret_val; @@ -1262,7 +1262,7 @@ goto out; } - usleep_range(10000, 20000); + usleep_range(10000, 11000); } e_dbg("ULP_CONFIG_DONE cleared after %dmsec\n", i * 10); @@ -2019,7 +2019,7 @@ while ((blocked = !(er32(FWSM) & E1000_ICH_FWSM_RSPCIPHY)) && (i++ < 30)) - usleep_range(10000, 20000); + usleep_range(10000, 11000); return blocked ? E1000_BLK_PHY_RESET : 0; } @@ -2838,7 +2838,7 @@ return 0; /* Allow time for h/w to get to quiescent state after reset */ - usleep_range(10000, 20000); + usleep_range(10000, 11000); /* Perform any necessary post-reset workarounds */ switch (hw->mac.type) { @@ -2874,7 +2874,7 @@ if (hw->mac.type == e1000_pch2lan) { /* Ungate automatic PHY configuration on non-managed 82579 */ if (!(er32(FWSM) & E1000_ICH_FWSM_FW_VALID)) { - usleep_range(10000, 20000); + usleep_range(10000, 11000); e1000_gate_hw_phy_config_ich8lan(hw, false); } @@ -3895,7 +3895,7 @@ */ if (!ret_val) { nvm->ops.reload(hw); - usleep_range(10000, 20000); + usleep_range(10000, 11000); } out: @@ -4046,7 +4046,7 @@ */ if (!ret_val) { nvm->ops.reload(hw); - usleep_range(10000, 20000); + usleep_range(10000, 11000); } out: @@ -4670,7 +4670,7 @@ ew32(TCTL, E1000_TCTL_PSP); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); /* Workaround for ICH8 bit corruption issue in FIFO memory */ if (hw->mac.type == e1000_ich8lan) { --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/mac.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/mac.c @@ -820,7 +820,7 @@ * milliseconds even if the other end is doing it in SW). */ for (i = 0; i < FIBER_LINK_UP_LIMIT; i++) { - usleep_range(10000, 20000); + usleep_range(10000, 11000); status = er32(STATUS); if (status & E1000_STATUS_LU) break; --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/netdev.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/netdev.c @@ -3236,7 +3236,7 @@ if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) ew32(RCTL, rctl & ~E1000_RCTL_EN); e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); if (adapter->flags2 & FLAG2_DMA_BURST) { /* set the writeback threshold (only takes effect if the RDTR @@ -4302,7 +4302,7 @@ /* flush both disables and wait for them to finish */ e1e_flush(); - usleep_range(10000, 20000); + usleep_range(10000, 11000); e1000_irq_disable(adapter); @@ -4340,7 +4340,7 @@ { might_sleep(); while (test_and_set_bit(__E1000_RESETTING, &adapter->state)) - usleep_range(1000, 2000); + usleep_range(1000, 1100); e1000e_down(adapter, true); e1000e_up(adapter); clear_bit(__E1000_RESETTING, &adapter->state); @@ -4715,7 +4715,7 @@ int count = E1000_CHECK_RESET_COUNT; while (test_bit(__E1000_RESETTING, &adapter->state) && count--) - usleep_range(10000, 20000); + usleep_range(10000, 11000); WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); @@ -6033,7 +6033,7 @@ } while (test_and_set_bit(__E1000_RESETTING, &adapter->state)) - usleep_range(1000, 2000); + usleep_range(1000, 1100); /* e1000e_down -> e1000e_reset dependent on max_frame_size & mtu */ adapter->max_frame_size = max_frame; e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu); @@ -6313,7 +6313,7 @@ int count = E1000_CHECK_RESET_COUNT; while (test_bit(__E1000_RESETTING, &adapter->state) && count--) - usleep_range(10000, 20000); + usleep_range(10000, 11000); WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); @@ -6728,7 +6728,7 @@ int count = E1000_CHECK_RESET_COUNT; while (test_bit(__E1000_RESETTING, &adapter->state) && count--) - usleep_range(10000, 20000); + usleep_range(10000, 11000); WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/e1000e/nvm.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/e1000e/nvm.c @@ -410,7 +410,7 @@ break; } } - usleep_range(10000, 20000); + usleep_range(10000, 11000); nvm->ops.release(hw); } --- linux-aws-4.15.0.orig/drivers/net/ethernet/intel/igb/igb_main.c +++ linux-aws-4.15.0/drivers/net/ethernet/intel/igb/igb_main.c @@ -3676,7 +3676,7 @@ int igb_close(struct net_device *netdev) { - if (netif_device_present(netdev)) + if (netif_device_present(netdev) || netdev->dismantle) return __igb_close(netdev, false); return 0; } --- linux-aws-4.15.0.orig/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ linux-aws-4.15.0/drivers/net/ethernet/neterion/vxge/vxge-main.c @@ -4202,6 +4202,9 @@ return ret; } +#define VXGE_PXE_FIRMWARE "vxge/X3fw-pxe.ncf" +#define VXGE_FIRMWARE "vxge/X3fw.ncf" + static int vxge_probe_fw_update(struct vxgedev *vdev) { u32 maj, min, bld; @@ -4244,9 +4247,9 @@ } } if (gpxe) - fw_name = "vxge/X3fw-pxe.ncf"; + fw_name = VXGE_PXE_FIRMWARE; else - fw_name = "vxge/X3fw.ncf"; + fw_name = VXGE_FIRMWARE; ret = vxge_fw_upgrade(vdev, fw_name, 0); /* -EINVAL and -ENOENT are not fatal errors for flashing firmware on @@ -4851,3 +4854,5 @@ } module_init(vxge_starter); module_exit(vxge_closer); +MODULE_FIRMWARE(VXGE_PXE_FIRMWARE); +MODULE_FIRMWARE(VXGE_FIRMWARE); --- linux-aws-4.15.0.orig/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ linux-aws-4.15.0/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c @@ -3891,7 +3891,7 @@ struct list_head *head = &mbx->cmd_q; struct qlcnic_cmd_args *cmd = NULL; - spin_lock(&mbx->queue_lock); + spin_lock_bh(&mbx->queue_lock); while (!list_empty(head)) { cmd = list_entry(head->next, struct qlcnic_cmd_args, list); @@ -3902,7 +3902,7 @@ qlcnic_83xx_notify_cmd_completion(adapter, cmd); } - spin_unlock(&mbx->queue_lock); + spin_unlock_bh(&mbx->queue_lock); } static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter) @@ -3938,12 +3938,12 @@ { struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; - spin_lock(&mbx->queue_lock); + spin_lock_bh(&mbx->queue_lock); list_del(&cmd->list); mbx->num_cmds--; - spin_unlock(&mbx->queue_lock); + spin_unlock_bh(&mbx->queue_lock); qlcnic_83xx_notify_cmd_completion(adapter, cmd); } @@ -4008,7 +4008,7 @@ init_completion(&cmd->completion); cmd->rsp_opcode = QLC_83XX_MBX_RESPONSE_UNKNOWN; - spin_lock(&mbx->queue_lock); + spin_lock_bh(&mbx->queue_lock); list_add_tail(&cmd->list, &mbx->cmd_q); mbx->num_cmds++; @@ -4016,7 +4016,7 @@ *timeout = cmd->total_cmds * QLC_83XX_MBX_TIMEOUT; queue_work(mbx->work_q, &mbx->work); - spin_unlock(&mbx->queue_lock); + spin_unlock_bh(&mbx->queue_lock); return 0; } @@ -4112,15 +4112,15 @@ mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT; spin_unlock_irqrestore(&mbx->aen_lock, flags); - spin_lock(&mbx->queue_lock); + spin_lock_bh(&mbx->queue_lock); if (list_empty(head)) { - spin_unlock(&mbx->queue_lock); + spin_unlock_bh(&mbx->queue_lock); return; } cmd = list_entry(head->next, struct qlcnic_cmd_args, list); - spin_unlock(&mbx->queue_lock); + spin_unlock_bh(&mbx->queue_lock); mbx_ops->encode_cmd(adapter, cmd); mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST); --- linux-aws-4.15.0.orig/drivers/net/ethernet/realtek/r8169.c +++ linux-aws-4.15.0/drivers/net/ethernet/realtek/r8169.c @@ -1395,7 +1395,7 @@ { void __iomem *ioaddr = tp->mmio_addr; - return RTL_R8(IBISR0) & 0x02; + return RTL_R8(IBISR0) & 0x20; } static void rtl8168ep_stop_cmac(struct rtl8169_private *tp) @@ -1403,7 +1403,7 @@ void __iomem *ioaddr = tp->mmio_addr; RTL_W8(IBCR2, RTL_R8(IBCR2) & ~0x01); - rtl_msleep_loop_wait_low(tp, &rtl_ocp_tx_cond, 50, 2000); + rtl_msleep_loop_wait_high(tp, &rtl_ocp_tx_cond, 50, 2000); RTL_W8(IBISR0, RTL_R8(IBISR0) | 0x20); RTL_W8(IBCR0, RTL_R8(IBCR0) & ~0x01); } --- linux-aws-4.15.0.orig/drivers/net/ethernet/rocker/rocker_main.c +++ linux-aws-4.15.0/drivers/net/ethernet/rocker/rocker_main.c @@ -2902,6 +2902,12 @@ goto err_alloc_ordered_workqueue; } + err = rocker_probe_ports(rocker); + if (err) { + dev_err(&pdev->dev, "failed to probe ports\n"); + goto err_probe_ports; + } + /* Only FIBs pointing to our own netdevs are programmed into * the device, so no need to pass a callback. */ @@ -2918,22 +2924,16 @@ rocker->hw.id = rocker_read64(rocker, SWITCH_ID); - err = rocker_probe_ports(rocker); - if (err) { - dev_err(&pdev->dev, "failed to probe ports\n"); - goto err_probe_ports; - } - dev_info(&pdev->dev, "Rocker switch with id %*phN\n", (int)sizeof(rocker->hw.id), &rocker->hw.id); return 0; -err_probe_ports: - unregister_switchdev_notifier(&rocker_switchdev_notifier); err_register_switchdev_notifier: unregister_fib_notifier(&rocker->fib_nb); err_register_fib_notifier: + rocker_remove_ports(rocker); +err_probe_ports: destroy_workqueue(rocker->rocker_owq); err_alloc_ordered_workqueue: free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker); @@ -2961,9 +2961,9 @@ { struct rocker *rocker = pci_get_drvdata(pdev); - rocker_remove_ports(rocker); unregister_switchdev_notifier(&rocker_switchdev_notifier); unregister_fib_notifier(&rocker->fib_nb); + rocker_remove_ports(rocker); rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET); destroy_workqueue(rocker->rocker_owq); free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker); --- linux-aws-4.15.0.orig/drivers/net/ethernet/socionext/Kconfig +++ linux-aws-4.15.0/drivers/net/ethernet/socionext/Kconfig @@ -0,0 +1,26 @@ +config NET_VENDOR_SOCIONEXT + bool "Socionext ethernet drivers" + default y + ---help--- + Option to select ethernet drivers for Socionext platforms. + + Note that the answer to this question doesn't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about Socionext devices. If you say Y, you will be asked + for your specific card in the following questions. + +if NET_VENDOR_SOCIONEXT + +config SNI_NETSEC + tristate "Socionext NETSEC ethernet support" + depends on (ARCH_SYNQUACER || COMPILE_TEST) && OF + select PHYLIB + select MII + ---help--- + Enable to add support for the SocioNext NetSec Gigabit Ethernet + controller + PHY, as found on the Synquacer SC2A11 SoC + + To compile this driver as a module, choose M here: the module will be + called netsec. If unsure, say N. + +endif #NET_VENDOR_SOCIONEXT --- linux-aws-4.15.0.orig/drivers/net/ethernet/socionext/Makefile +++ linux-aws-4.15.0/drivers/net/ethernet/socionext/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Makefile for all ethernet ip drivers on Socionext platforms +# +obj-$(CONFIG_SNI_NETSEC) += netsec.o --- linux-aws-4.15.0.orig/drivers/net/ethernet/socionext/netsec.c +++ linux-aws-4.15.0/drivers/net/ethernet/socionext/netsec.c @@ -0,0 +1,1777 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define NETSEC_REG_SOFT_RST 0x104 +#define NETSEC_REG_COM_INIT 0x120 + +#define NETSEC_REG_TOP_STATUS 0x200 +#define NETSEC_IRQ_RX BIT(1) +#define NETSEC_IRQ_TX BIT(0) + +#define NETSEC_REG_TOP_INTEN 0x204 +#define NETSEC_REG_INTEN_SET 0x234 +#define NETSEC_REG_INTEN_CLR 0x238 + +#define NETSEC_REG_NRM_TX_STATUS 0x400 +#define NETSEC_REG_NRM_TX_INTEN 0x404 +#define NETSEC_REG_NRM_TX_INTEN_SET 0x428 +#define NETSEC_REG_NRM_TX_INTEN_CLR 0x42c +#define NRM_TX_ST_NTOWNR BIT(17) +#define NRM_TX_ST_TR_ERR BIT(16) +#define NRM_TX_ST_TXDONE BIT(15) +#define NRM_TX_ST_TMREXP BIT(14) + +#define NETSEC_REG_NRM_RX_STATUS 0x440 +#define NETSEC_REG_NRM_RX_INTEN 0x444 +#define NETSEC_REG_NRM_RX_INTEN_SET 0x468 +#define NETSEC_REG_NRM_RX_INTEN_CLR 0x46c +#define NRM_RX_ST_RC_ERR BIT(16) +#define NRM_RX_ST_PKTCNT BIT(15) +#define NRM_RX_ST_TMREXP BIT(14) + +#define NETSEC_REG_PKT_CMD_BUF 0xd0 + +#define NETSEC_REG_CLK_EN 0x100 + +#define NETSEC_REG_PKT_CTRL 0x140 + +#define NETSEC_REG_DMA_TMR_CTRL 0x20c +#define NETSEC_REG_F_TAIKI_MC_VER 0x22c +#define NETSEC_REG_F_TAIKI_VER 0x230 +#define NETSEC_REG_DMA_HM_CTRL 0x214 +#define NETSEC_REG_DMA_MH_CTRL 0x220 +#define NETSEC_REG_ADDR_DIS_CORE 0x218 +#define NETSEC_REG_DMAC_HM_CMD_BUF 0x210 +#define NETSEC_REG_DMAC_MH_CMD_BUF 0x21c + +#define NETSEC_REG_NRM_TX_PKTCNT 0x410 + +#define NETSEC_REG_NRM_TX_DONE_PKTCNT 0x414 +#define NETSEC_REG_NRM_TX_DONE_TXINT_PKTCNT 0x418 + +#define NETSEC_REG_NRM_TX_TMR 0x41c + +#define NETSEC_REG_NRM_RX_PKTCNT 0x454 +#define NETSEC_REG_NRM_RX_RXINT_PKTCNT 0x458 +#define NETSEC_REG_NRM_TX_TXINT_TMR 0x420 +#define NETSEC_REG_NRM_RX_RXINT_TMR 0x460 + +#define NETSEC_REG_NRM_RX_TMR 0x45c + +#define NETSEC_REG_NRM_TX_DESC_START_UP 0x434 +#define NETSEC_REG_NRM_TX_DESC_START_LW 0x408 +#define NETSEC_REG_NRM_RX_DESC_START_UP 0x474 +#define NETSEC_REG_NRM_RX_DESC_START_LW 0x448 + +#define NETSEC_REG_NRM_TX_CONFIG 0x430 +#define NETSEC_REG_NRM_RX_CONFIG 0x470 + +#define MAC_REG_STATUS 0x1024 +#define MAC_REG_DATA 0x11c0 +#define MAC_REG_CMD 0x11c4 +#define MAC_REG_FLOW_TH 0x11cc +#define MAC_REG_INTF_SEL 0x11d4 +#define MAC_REG_DESC_INIT 0x11fc +#define MAC_REG_DESC_SOFT_RST 0x1204 +#define NETSEC_REG_MODE_TRANS_COMP_STATUS 0x500 + +#define GMAC_REG_MCR 0x0000 +#define GMAC_REG_MFFR 0x0004 +#define GMAC_REG_GAR 0x0010 +#define GMAC_REG_GDR 0x0014 +#define GMAC_REG_FCR 0x0018 +#define GMAC_REG_BMR 0x1000 +#define GMAC_REG_RDLAR 0x100c +#define GMAC_REG_TDLAR 0x1010 +#define GMAC_REG_OMR 0x1018 + +#define MHZ(n) ((n) * 1000 * 1000) + +#define NETSEC_TX_SHIFT_OWN_FIELD 31 +#define NETSEC_TX_SHIFT_LD_FIELD 30 +#define NETSEC_TX_SHIFT_DRID_FIELD 24 +#define NETSEC_TX_SHIFT_PT_FIELD 21 +#define NETSEC_TX_SHIFT_TDRID_FIELD 16 +#define NETSEC_TX_SHIFT_CC_FIELD 15 +#define NETSEC_TX_SHIFT_FS_FIELD 9 +#define NETSEC_TX_LAST 8 +#define NETSEC_TX_SHIFT_CO 7 +#define NETSEC_TX_SHIFT_SO 6 +#define NETSEC_TX_SHIFT_TRS_FIELD 4 + +#define NETSEC_RX_PKT_OWN_FIELD 31 +#define NETSEC_RX_PKT_LD_FIELD 30 +#define NETSEC_RX_PKT_SDRID_FIELD 24 +#define NETSEC_RX_PKT_FR_FIELD 23 +#define NETSEC_RX_PKT_ER_FIELD 21 +#define NETSEC_RX_PKT_ERR_FIELD 16 +#define NETSEC_RX_PKT_TDRID_FIELD 12 +#define NETSEC_RX_PKT_FS_FIELD 9 +#define NETSEC_RX_PKT_LS_FIELD 8 +#define NETSEC_RX_PKT_CO_FIELD 6 + +#define NETSEC_RX_PKT_ERR_MASK 3 + +#define NETSEC_MAX_TX_PKT_LEN 1518 +#define NETSEC_MAX_TX_JUMBO_PKT_LEN 9018 + +#define NETSEC_RING_GMAC 15 +#define NETSEC_RING_MAX 2 + +#define NETSEC_TCP_SEG_LEN_MAX 1460 +#define NETSEC_TCP_JUMBO_SEG_LEN_MAX 8960 + +#define NETSEC_RX_CKSUM_NOTAVAIL 0 +#define NETSEC_RX_CKSUM_OK 1 +#define NETSEC_RX_CKSUM_NG 2 + +#define NETSEC_TOP_IRQ_REG_CODE_LOAD_END BIT(20) +#define NETSEC_IRQ_TRANSITION_COMPLETE BIT(4) + +#define NETSEC_MODE_TRANS_COMP_IRQ_N2T BIT(20) +#define NETSEC_MODE_TRANS_COMP_IRQ_T2N BIT(19) + +#define NETSEC_INT_PKTCNT_MAX 2047 + +#define NETSEC_FLOW_START_TH_MAX 95 +#define NETSEC_FLOW_STOP_TH_MAX 95 +#define NETSEC_FLOW_PAUSE_TIME_MIN 5 + +#define NETSEC_CLK_EN_REG_DOM_ALL 0x3f + +#define NETSEC_PKT_CTRL_REG_MODE_NRM BIT(28) +#define NETSEC_PKT_CTRL_REG_EN_JUMBO BIT(27) +#define NETSEC_PKT_CTRL_REG_LOG_CHKSUM_ER BIT(3) +#define NETSEC_PKT_CTRL_REG_LOG_HD_INCOMPLETE BIT(2) +#define NETSEC_PKT_CTRL_REG_LOG_HD_ER BIT(1) +#define NETSEC_PKT_CTRL_REG_DRP_NO_MATCH BIT(0) + +#define NETSEC_CLK_EN_REG_DOM_G BIT(5) +#define NETSEC_CLK_EN_REG_DOM_C BIT(1) +#define NETSEC_CLK_EN_REG_DOM_D BIT(0) + +#define NETSEC_COM_INIT_REG_DB BIT(2) +#define NETSEC_COM_INIT_REG_CLS BIT(1) +#define NETSEC_COM_INIT_REG_ALL (NETSEC_COM_INIT_REG_CLS | \ + NETSEC_COM_INIT_REG_DB) + +#define NETSEC_SOFT_RST_REG_RESET 0 +#define NETSEC_SOFT_RST_REG_RUN BIT(31) + +#define NETSEC_DMA_CTRL_REG_STOP 1 +#define MH_CTRL__MODE_TRANS BIT(20) + +#define NETSEC_GMAC_CMD_ST_READ 0 +#define NETSEC_GMAC_CMD_ST_WRITE BIT(28) +#define NETSEC_GMAC_CMD_ST_BUSY BIT(31) + +#define NETSEC_GMAC_BMR_REG_COMMON 0x00412080 +#define NETSEC_GMAC_BMR_REG_RESET 0x00020181 +#define NETSEC_GMAC_BMR_REG_SWR 0x00000001 + +#define NETSEC_GMAC_OMR_REG_ST BIT(13) +#define NETSEC_GMAC_OMR_REG_SR BIT(1) + +#define NETSEC_GMAC_MCR_REG_IBN BIT(30) +#define NETSEC_GMAC_MCR_REG_CST BIT(25) +#define NETSEC_GMAC_MCR_REG_JE BIT(20) +#define NETSEC_MCR_PS BIT(15) +#define NETSEC_GMAC_MCR_REG_FES BIT(14) +#define NETSEC_GMAC_MCR_REG_FULL_DUPLEX_COMMON 0x0000280c +#define NETSEC_GMAC_MCR_REG_HALF_DUPLEX_COMMON 0x0001a00c + +#define NETSEC_FCR_RFE BIT(2) +#define NETSEC_FCR_TFE BIT(1) + +#define NETSEC_GMAC_GAR_REG_GW BIT(1) +#define NETSEC_GMAC_GAR_REG_GB BIT(0) + +#define NETSEC_GMAC_GAR_REG_SHIFT_PA 11 +#define NETSEC_GMAC_GAR_REG_SHIFT_GR 6 +#define GMAC_REG_SHIFT_CR_GAR 2 + +#define NETSEC_GMAC_GAR_REG_CR_25_35_MHZ 2 +#define NETSEC_GMAC_GAR_REG_CR_35_60_MHZ 3 +#define NETSEC_GMAC_GAR_REG_CR_60_100_MHZ 0 +#define NETSEC_GMAC_GAR_REG_CR_100_150_MHZ 1 +#define NETSEC_GMAC_GAR_REG_CR_150_250_MHZ 4 +#define NETSEC_GMAC_GAR_REG_CR_250_300_MHZ 5 + +#define NETSEC_GMAC_RDLAR_REG_COMMON 0x18000 +#define NETSEC_GMAC_TDLAR_REG_COMMON 0x1c000 + +#define NETSEC_REG_NETSEC_VER_F_TAIKI 0x50000 + +#define NETSEC_REG_DESC_RING_CONFIG_CFG_UP BIT(31) +#define NETSEC_REG_DESC_RING_CONFIG_CH_RST BIT(30) +#define NETSEC_REG_DESC_TMR_MODE 4 +#define NETSEC_REG_DESC_ENDIAN 0 + +#define NETSEC_MAC_DESC_SOFT_RST_SOFT_RST 1 +#define NETSEC_MAC_DESC_INIT_REG_INIT 1 + +#define NETSEC_EEPROM_MAC_ADDRESS 0x00 +#define NETSEC_EEPROM_HM_ME_ADDRESS_H 0x08 +#define NETSEC_EEPROM_HM_ME_ADDRESS_L 0x0C +#define NETSEC_EEPROM_HM_ME_SIZE 0x10 +#define NETSEC_EEPROM_MH_ME_ADDRESS_H 0x14 +#define NETSEC_EEPROM_MH_ME_ADDRESS_L 0x18 +#define NETSEC_EEPROM_MH_ME_SIZE 0x1C +#define NETSEC_EEPROM_PKT_ME_ADDRESS 0x20 +#define NETSEC_EEPROM_PKT_ME_SIZE 0x24 + +#define DESC_NUM 128 +#define NAPI_BUDGET (DESC_NUM / 2) + +#define DESC_SZ sizeof(struct netsec_de) + +#define NETSEC_F_NETSEC_VER_MAJOR_NUM(x) ((x) & 0xffff0000) + +enum ring_id { + NETSEC_RING_TX = 0, + NETSEC_RING_RX +}; + +struct netsec_desc { + struct sk_buff *skb; + dma_addr_t dma_addr; + void *addr; + u16 len; +}; + +struct netsec_desc_ring { + phys_addr_t desc_phys; + struct netsec_desc *desc; + void *vaddr; + u16 pkt_cnt; + u16 head, tail; +}; + +struct netsec_priv { + struct netsec_desc_ring desc_ring[NETSEC_RING_MAX]; + struct ethtool_coalesce et_coalesce; + spinlock_t reglock; /* protect reg access */ + struct napi_struct napi; + phy_interface_t phy_interface; + struct net_device *ndev; + struct device_node *phy_np; + struct phy_device *phydev; + struct mii_bus *mii_bus; + void __iomem *ioaddr; + void __iomem *eeprom_base; + struct device *dev; + struct clk *clk; + u32 msg_enable; + u32 freq; + bool rx_cksum_offload_flag; +}; + +struct netsec_de { /* Netsec Descriptor layout */ + u32 attr; + u32 data_buf_addr_up; + u32 data_buf_addr_lw; + u32 buf_len_info; +}; + +struct netsec_tx_pkt_ctrl { + u16 tcp_seg_len; + bool tcp_seg_offload_flag; + bool cksum_offload_flag; +}; + +struct netsec_rx_pkt_info { + int rx_cksum_result; + int err_code; + bool err_flag; +}; + +static void netsec_write(struct netsec_priv *priv, u32 reg_addr, u32 val) +{ + writel(val, priv->ioaddr + reg_addr); +} + +static u32 netsec_read(struct netsec_priv *priv, u32 reg_addr) +{ + return readl(priv->ioaddr + reg_addr); +} + +/************* MDIO BUS OPS FOLLOW *************/ + +#define TIMEOUT_SPINS_MAC 1000 +#define TIMEOUT_SECONDARY_MS_MAC 100 + +static u32 netsec_clk_type(u32 freq) +{ + if (freq < MHZ(35)) + return NETSEC_GMAC_GAR_REG_CR_25_35_MHZ; + if (freq < MHZ(60)) + return NETSEC_GMAC_GAR_REG_CR_35_60_MHZ; + if (freq < MHZ(100)) + return NETSEC_GMAC_GAR_REG_CR_60_100_MHZ; + if (freq < MHZ(150)) + return NETSEC_GMAC_GAR_REG_CR_100_150_MHZ; + if (freq < MHZ(250)) + return NETSEC_GMAC_GAR_REG_CR_150_250_MHZ; + + return NETSEC_GMAC_GAR_REG_CR_250_300_MHZ; +} + +static int netsec_wait_while_busy(struct netsec_priv *priv, u32 addr, u32 mask) +{ + u32 timeout = TIMEOUT_SPINS_MAC; + + while (--timeout && netsec_read(priv, addr) & mask) + cpu_relax(); + if (timeout) + return 0; + + timeout = TIMEOUT_SECONDARY_MS_MAC; + while (--timeout && netsec_read(priv, addr) & mask) + usleep_range(1000, 2000); + + if (timeout) + return 0; + + netdev_WARN(priv->ndev, "%s: timeout\n", __func__); + + return -ETIMEDOUT; +} + +static int netsec_mac_write(struct netsec_priv *priv, u32 addr, u32 value) +{ + netsec_write(priv, MAC_REG_DATA, value); + netsec_write(priv, MAC_REG_CMD, addr | NETSEC_GMAC_CMD_ST_WRITE); + return netsec_wait_while_busy(priv, + MAC_REG_CMD, NETSEC_GMAC_CMD_ST_BUSY); +} + +static int netsec_mac_read(struct netsec_priv *priv, u32 addr, u32 *read) +{ + int ret; + + netsec_write(priv, MAC_REG_CMD, addr | NETSEC_GMAC_CMD_ST_READ); + ret = netsec_wait_while_busy(priv, + MAC_REG_CMD, NETSEC_GMAC_CMD_ST_BUSY); + if (ret) + return ret; + + *read = netsec_read(priv, MAC_REG_DATA); + + return 0; +} + +static int netsec_mac_wait_while_busy(struct netsec_priv *priv, + u32 addr, u32 mask) +{ + u32 timeout = TIMEOUT_SPINS_MAC; + int ret, data; + + do { + ret = netsec_mac_read(priv, addr, &data); + if (ret) + break; + cpu_relax(); + } while (--timeout && (data & mask)); + + if (timeout) + return 0; + + timeout = TIMEOUT_SECONDARY_MS_MAC; + do { + usleep_range(1000, 2000); + + ret = netsec_mac_read(priv, addr, &data); + if (ret) + break; + cpu_relax(); + } while (--timeout && (data & mask)); + + if (timeout && !ret) + return 0; + + netdev_WARN(priv->ndev, "%s: timeout\n", __func__); + + return -ETIMEDOUT; +} + +static int netsec_mac_update_to_phy_state(struct netsec_priv *priv) +{ + struct phy_device *phydev = priv->ndev->phydev; + u32 value = 0; + + value = phydev->duplex ? NETSEC_GMAC_MCR_REG_FULL_DUPLEX_COMMON : + NETSEC_GMAC_MCR_REG_HALF_DUPLEX_COMMON; + + if (phydev->speed != SPEED_1000) + value |= NETSEC_MCR_PS; + + if (priv->phy_interface != PHY_INTERFACE_MODE_GMII && + phydev->speed == SPEED_100) + value |= NETSEC_GMAC_MCR_REG_FES; + + value |= NETSEC_GMAC_MCR_REG_CST | NETSEC_GMAC_MCR_REG_JE; + + if (phy_interface_mode_is_rgmii(priv->phy_interface)) + value |= NETSEC_GMAC_MCR_REG_IBN; + + if (netsec_mac_write(priv, GMAC_REG_MCR, value)) + return -ETIMEDOUT; + + return 0; +} + +static int netsec_phy_write(struct mii_bus *bus, + int phy_addr, int reg, u16 val) +{ + struct netsec_priv *priv = bus->priv; + + if (netsec_mac_write(priv, GMAC_REG_GDR, val)) + return -ETIMEDOUT; + if (netsec_mac_write(priv, GMAC_REG_GAR, + phy_addr << NETSEC_GMAC_GAR_REG_SHIFT_PA | + reg << NETSEC_GMAC_GAR_REG_SHIFT_GR | + NETSEC_GMAC_GAR_REG_GW | NETSEC_GMAC_GAR_REG_GB | + (netsec_clk_type(priv->freq) << + GMAC_REG_SHIFT_CR_GAR))) + return -ETIMEDOUT; + + return netsec_mac_wait_while_busy(priv, GMAC_REG_GAR, + NETSEC_GMAC_GAR_REG_GB); +} + +static int netsec_phy_read(struct mii_bus *bus, int phy_addr, int reg_addr) +{ + struct netsec_priv *priv = bus->priv; + u32 data; + int ret; + + if (netsec_mac_write(priv, GMAC_REG_GAR, NETSEC_GMAC_GAR_REG_GB | + phy_addr << NETSEC_GMAC_GAR_REG_SHIFT_PA | + reg_addr << NETSEC_GMAC_GAR_REG_SHIFT_GR | + (netsec_clk_type(priv->freq) << + GMAC_REG_SHIFT_CR_GAR))) + return -ETIMEDOUT; + + ret = netsec_mac_wait_while_busy(priv, GMAC_REG_GAR, + NETSEC_GMAC_GAR_REG_GB); + if (ret) + return ret; + + ret = netsec_mac_read(priv, GMAC_REG_GDR, &data); + if (ret) + return ret; + + return data; +} + +/************* ETHTOOL_OPS FOLLOW *************/ + +static void netsec_et_get_drvinfo(struct net_device *net_device, + struct ethtool_drvinfo *info) +{ + strlcpy(info->driver, "netsec", sizeof(info->driver)); + strlcpy(info->bus_info, dev_name(net_device->dev.parent), + sizeof(info->bus_info)); +} + +static int netsec_et_get_coalesce(struct net_device *net_device, + struct ethtool_coalesce *et_coalesce) +{ + struct netsec_priv *priv = netdev_priv(net_device); + + *et_coalesce = priv->et_coalesce; + + return 0; +} + +static int netsec_et_set_coalesce(struct net_device *net_device, + struct ethtool_coalesce *et_coalesce) +{ + struct netsec_priv *priv = netdev_priv(net_device); + + priv->et_coalesce = *et_coalesce; + + if (priv->et_coalesce.tx_coalesce_usecs < 50) + priv->et_coalesce.tx_coalesce_usecs = 50; + if (priv->et_coalesce.tx_max_coalesced_frames < 1) + priv->et_coalesce.tx_max_coalesced_frames = 1; + + netsec_write(priv, NETSEC_REG_NRM_TX_DONE_TXINT_PKTCNT, + priv->et_coalesce.tx_max_coalesced_frames); + netsec_write(priv, NETSEC_REG_NRM_TX_TXINT_TMR, + priv->et_coalesce.tx_coalesce_usecs); + netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_SET, NRM_TX_ST_TXDONE); + netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_SET, NRM_TX_ST_TMREXP); + + if (priv->et_coalesce.rx_coalesce_usecs < 50) + priv->et_coalesce.rx_coalesce_usecs = 50; + if (priv->et_coalesce.rx_max_coalesced_frames < 1) + priv->et_coalesce.rx_max_coalesced_frames = 1; + + netsec_write(priv, NETSEC_REG_NRM_RX_RXINT_PKTCNT, + priv->et_coalesce.rx_max_coalesced_frames); + netsec_write(priv, NETSEC_REG_NRM_RX_RXINT_TMR, + priv->et_coalesce.rx_coalesce_usecs); + netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_SET, NRM_RX_ST_PKTCNT); + netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_SET, NRM_RX_ST_TMREXP); + + return 0; +} + +static u32 netsec_et_get_msglevel(struct net_device *dev) +{ + struct netsec_priv *priv = netdev_priv(dev); + + return priv->msg_enable; +} + +static void netsec_et_set_msglevel(struct net_device *dev, u32 datum) +{ + struct netsec_priv *priv = netdev_priv(dev); + + priv->msg_enable = datum; +} + +static const struct ethtool_ops netsec_ethtool_ops = { + .get_drvinfo = netsec_et_get_drvinfo, + .get_link_ksettings = phy_ethtool_get_link_ksettings, + .set_link_ksettings = phy_ethtool_set_link_ksettings, + .get_link = ethtool_op_get_link, + .get_coalesce = netsec_et_get_coalesce, + .set_coalesce = netsec_et_set_coalesce, + .get_msglevel = netsec_et_get_msglevel, + .set_msglevel = netsec_et_set_msglevel, +}; + +/************* NETDEV_OPS FOLLOW *************/ + +static struct sk_buff *netsec_alloc_skb(struct netsec_priv *priv, + struct netsec_desc *desc) +{ + struct sk_buff *skb; + + if (device_get_dma_attr(priv->dev) == DEV_DMA_COHERENT) { + skb = netdev_alloc_skb_ip_align(priv->ndev, desc->len); + } else { + desc->len = L1_CACHE_ALIGN(desc->len); + skb = netdev_alloc_skb(priv->ndev, desc->len); + } + if (!skb) + return NULL; + + desc->addr = skb->data; + desc->dma_addr = dma_map_single(priv->dev, desc->addr, desc->len, + DMA_FROM_DEVICE); + if (dma_mapping_error(priv->dev, desc->dma_addr)) { + dev_kfree_skb_any(skb); + return NULL; + } + return skb; +} + +static void netsec_set_rx_de(struct netsec_priv *priv, + struct netsec_desc_ring *dring, u16 idx, + const struct netsec_desc *desc, + struct sk_buff *skb) +{ + struct netsec_de *de = dring->vaddr + DESC_SZ * idx; + u32 attr = (1 << NETSEC_RX_PKT_OWN_FIELD) | + (1 << NETSEC_RX_PKT_FS_FIELD) | + (1 << NETSEC_RX_PKT_LS_FIELD); + + if (idx == DESC_NUM - 1) + attr |= (1 << NETSEC_RX_PKT_LD_FIELD); + + de->data_buf_addr_up = upper_32_bits(desc->dma_addr); + de->data_buf_addr_lw = lower_32_bits(desc->dma_addr); + de->buf_len_info = desc->len; + de->attr = attr; + dma_wmb(); + + dring->desc[idx].dma_addr = desc->dma_addr; + dring->desc[idx].addr = desc->addr; + dring->desc[idx].len = desc->len; + dring->desc[idx].skb = skb; +} + +static struct sk_buff *netsec_get_rx_de(struct netsec_priv *priv, + struct netsec_desc_ring *dring, + u16 idx, + struct netsec_rx_pkt_info *rxpi, + struct netsec_desc *desc, u16 *len) +{ + struct netsec_de de = {}; + + memcpy(&de, dring->vaddr + DESC_SZ * idx, DESC_SZ); + + *len = de.buf_len_info >> 16; + + rxpi->err_flag = (de.attr >> NETSEC_RX_PKT_ER_FIELD) & 1; + rxpi->rx_cksum_result = (de.attr >> NETSEC_RX_PKT_CO_FIELD) & 3; + rxpi->err_code = (de.attr >> NETSEC_RX_PKT_ERR_FIELD) & + NETSEC_RX_PKT_ERR_MASK; + *desc = dring->desc[idx]; + return desc->skb; +} + +static struct sk_buff *netsec_get_rx_pkt_data(struct netsec_priv *priv, + struct netsec_rx_pkt_info *rxpi, + struct netsec_desc *desc, + u16 *len) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_RX]; + struct sk_buff *tmp_skb, *skb = NULL; + struct netsec_desc td; + int tail; + + *rxpi = (struct netsec_rx_pkt_info){}; + + td.len = priv->ndev->mtu + 22; + + tmp_skb = netsec_alloc_skb(priv, &td); + + dma_rmb(); + + tail = dring->tail; + + if (!tmp_skb) { + netsec_set_rx_de(priv, dring, tail, &dring->desc[tail], + dring->desc[tail].skb); + } else { + skb = netsec_get_rx_de(priv, dring, tail, rxpi, desc, len); + netsec_set_rx_de(priv, dring, tail, &td, tmp_skb); + } + + /* move tail ahead */ + dring->tail = (dring->tail + 1) % DESC_NUM; + + dring->pkt_cnt--; + + return skb; +} + +static int netsec_clean_tx_dring(struct netsec_priv *priv, int budget) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_TX]; + unsigned int pkts, bytes; + + dring->pkt_cnt += netsec_read(priv, NETSEC_REG_NRM_TX_DONE_PKTCNT); + + if (dring->pkt_cnt < budget) + budget = dring->pkt_cnt; + + pkts = 0; + bytes = 0; + + while (pkts < budget) { + struct netsec_desc *desc; + struct netsec_de *entry; + int tail, eop; + + tail = dring->tail; + + /* move tail ahead */ + dring->tail = (tail + 1) % DESC_NUM; + + desc = &dring->desc[tail]; + entry = dring->vaddr + DESC_SZ * tail; + + eop = (entry->attr >> NETSEC_TX_LAST) & 1; + + dma_unmap_single(priv->dev, desc->dma_addr, desc->len, + DMA_TO_DEVICE); + if (eop) { + pkts++; + bytes += desc->skb->len; + dev_kfree_skb(desc->skb); + } + *desc = (struct netsec_desc){}; + } + dring->pkt_cnt -= budget; + + priv->ndev->stats.tx_packets += budget; + priv->ndev->stats.tx_bytes += bytes; + + netdev_completed_queue(priv->ndev, budget, bytes); + + return budget; +} + +static int netsec_process_tx(struct netsec_priv *priv, int budget) +{ + struct net_device *ndev = priv->ndev; + int new, done = 0; + + do { + new = netsec_clean_tx_dring(priv, budget); + done += new; + budget -= new; + } while (new); + + if (done && netif_queue_stopped(ndev)) + netif_wake_queue(ndev); + + return done; +} + +static int netsec_process_rx(struct netsec_priv *priv, int budget) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_RX]; + struct net_device *ndev = priv->ndev; + struct netsec_rx_pkt_info rx_info; + int done = 0, rx_num = 0; + struct netsec_desc desc; + struct sk_buff *skb; + u16 len; + + while (done < budget) { + if (!rx_num) { + rx_num = netsec_read(priv, NETSEC_REG_NRM_RX_PKTCNT); + dring->pkt_cnt += rx_num; + + /* move head 'rx_num' */ + dring->head = (dring->head + rx_num) % DESC_NUM; + + rx_num = dring->pkt_cnt; + if (!rx_num) + break; + } + done++; + rx_num--; + skb = netsec_get_rx_pkt_data(priv, &rx_info, &desc, &len); + if (unlikely(!skb) || rx_info.err_flag) { + netif_err(priv, drv, priv->ndev, + "%s: rx fail err(%d)\n", + __func__, rx_info.err_code); + ndev->stats.rx_dropped++; + continue; + } + + dma_unmap_single(priv->dev, desc.dma_addr, desc.len, + DMA_FROM_DEVICE); + skb_put(skb, len); + skb->protocol = eth_type_trans(skb, priv->ndev); + + if (priv->rx_cksum_offload_flag && + rx_info.rx_cksum_result == NETSEC_RX_CKSUM_OK) + skb->ip_summed = CHECKSUM_UNNECESSARY; + + if (napi_gro_receive(&priv->napi, skb) != GRO_DROP) { + ndev->stats.rx_packets++; + ndev->stats.rx_bytes += len; + } + } + + return done; +} + +static int netsec_napi_poll(struct napi_struct *napi, int budget) +{ + struct netsec_priv *priv; + struct net_device *ndev; + int tx, rx, done, todo; + + priv = container_of(napi, struct netsec_priv, napi); + ndev = priv->ndev; + + todo = budget; + do { + if (!todo) + break; + + tx = netsec_process_tx(priv, todo); + todo -= tx; + + if (!todo) + break; + + rx = netsec_process_rx(priv, todo); + todo -= rx; + } while (rx || tx); + + done = budget - todo; + + if (done < budget && napi_complete_done(napi, done)) { + unsigned long flags; + + spin_lock_irqsave(&priv->reglock, flags); + netsec_write(priv, NETSEC_REG_INTEN_SET, + NETSEC_IRQ_RX | NETSEC_IRQ_TX); + spin_unlock_irqrestore(&priv->reglock, flags); + } + + return done; +} + +static void netsec_set_tx_de(struct netsec_priv *priv, + struct netsec_desc_ring *dring, + const struct netsec_tx_pkt_ctrl *tx_ctrl, + const struct netsec_desc *desc, + struct sk_buff *skb) +{ + int idx = dring->head; + struct netsec_de *de; + u32 attr; + + de = dring->vaddr + (DESC_SZ * idx); + + attr = (1 << NETSEC_TX_SHIFT_OWN_FIELD) | + (1 << NETSEC_TX_SHIFT_PT_FIELD) | + (NETSEC_RING_GMAC << NETSEC_TX_SHIFT_TDRID_FIELD) | + (1 << NETSEC_TX_SHIFT_FS_FIELD) | + (1 << NETSEC_TX_LAST) | + (tx_ctrl->cksum_offload_flag << NETSEC_TX_SHIFT_CO) | + (tx_ctrl->tcp_seg_offload_flag << NETSEC_TX_SHIFT_SO) | + (1 << NETSEC_TX_SHIFT_TRS_FIELD); + if (idx == DESC_NUM - 1) + attr |= (1 << NETSEC_TX_SHIFT_LD_FIELD); + + de->data_buf_addr_up = upper_32_bits(desc->dma_addr); + de->data_buf_addr_lw = lower_32_bits(desc->dma_addr); + de->buf_len_info = (tx_ctrl->tcp_seg_len << 16) | desc->len; + de->attr = attr; + dma_wmb(); + + dring->desc[idx] = *desc; + dring->desc[idx].skb = skb; + + /* move head ahead */ + dring->head = (dring->head + 1) % DESC_NUM; +} + +static netdev_tx_t netsec_netdev_start_xmit(struct sk_buff *skb, + struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_TX]; + struct netsec_tx_pkt_ctrl tx_ctrl = {}; + struct netsec_desc tx_desc; + u16 tso_seg_len = 0; + int filled; + + /* differentiate between full/emtpy ring */ + if (dring->head >= dring->tail) + filled = dring->head - dring->tail; + else + filled = dring->head + DESC_NUM - dring->tail; + + if (DESC_NUM - filled < 2) { /* if less than 2 available */ + netif_err(priv, drv, priv->ndev, "%s: TxQFull!\n", __func__); + netif_stop_queue(priv->ndev); + dma_wmb(); + return NETDEV_TX_BUSY; + } + + if (skb->ip_summed == CHECKSUM_PARTIAL) + tx_ctrl.cksum_offload_flag = true; + + if (skb_is_gso(skb)) + tso_seg_len = skb_shinfo(skb)->gso_size; + + if (tso_seg_len > 0) { + if (skb->protocol == htons(ETH_P_IP)) { + ip_hdr(skb)->tot_len = 0; + tcp_hdr(skb)->check = + ~tcp_v4_check(0, ip_hdr(skb)->saddr, + ip_hdr(skb)->daddr, 0); + } else { + ipv6_hdr(skb)->payload_len = 0; + tcp_hdr(skb)->check = + ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, + &ipv6_hdr(skb)->daddr, + 0, IPPROTO_TCP, 0); + } + + tx_ctrl.tcp_seg_offload_flag = true; + tx_ctrl.tcp_seg_len = tso_seg_len; + } + + tx_desc.dma_addr = dma_map_single(priv->dev, skb->data, + skb_headlen(skb), DMA_TO_DEVICE); + if (dma_mapping_error(priv->dev, tx_desc.dma_addr)) { + netif_err(priv, drv, priv->ndev, + "%s: DMA mapping failed\n", __func__); + ndev->stats.tx_dropped++; + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + tx_desc.addr = skb->data; + tx_desc.len = skb_headlen(skb); + + skb_tx_timestamp(skb); + netdev_sent_queue(priv->ndev, skb->len); + + netsec_set_tx_de(priv, dring, &tx_ctrl, &tx_desc, skb); + netsec_write(priv, NETSEC_REG_NRM_TX_PKTCNT, 1); /* submit another tx */ + + return NETDEV_TX_OK; +} + +static void netsec_uninit_pkt_dring(struct netsec_priv *priv, int id) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[id]; + struct netsec_desc *desc; + u16 idx; + + if (!dring->vaddr || !dring->desc) + return; + + for (idx = 0; idx < DESC_NUM; idx++) { + desc = &dring->desc[idx]; + if (!desc->addr) + continue; + + dma_unmap_single(priv->dev, desc->dma_addr, desc->len, + id == NETSEC_RING_RX ? DMA_FROM_DEVICE : + DMA_TO_DEVICE); + dev_kfree_skb(desc->skb); + } + + memset(dring->desc, 0, sizeof(struct netsec_desc) * DESC_NUM); + memset(dring->vaddr, 0, DESC_SZ * DESC_NUM); + + dring->head = 0; + dring->tail = 0; + dring->pkt_cnt = 0; +} + +static void netsec_free_dring(struct netsec_priv *priv, int id) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[id]; + + if (dring->vaddr) { + dma_free_coherent(priv->dev, DESC_SZ * DESC_NUM, + dring->vaddr, dring->desc_phys); + dring->vaddr = NULL; + } + + kfree(dring->desc); + dring->desc = NULL; +} + +static int netsec_alloc_dring(struct netsec_priv *priv, enum ring_id id) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[id]; + int ret = 0; + + dring->vaddr = dma_zalloc_coherent(priv->dev, DESC_SZ * DESC_NUM, + &dring->desc_phys, GFP_KERNEL); + if (!dring->vaddr) { + ret = -ENOMEM; + goto err; + } + + dring->desc = kzalloc(DESC_NUM * sizeof(*dring->desc), GFP_KERNEL); + if (!dring->desc) { + ret = -ENOMEM; + goto err; + } + + return 0; +err: + netsec_free_dring(priv, id); + + return ret; +} + +static int netsec_setup_rx_dring(struct netsec_priv *priv) +{ + struct netsec_desc_ring *dring = &priv->desc_ring[NETSEC_RING_RX]; + struct netsec_desc desc; + struct sk_buff *skb; + int n; + + desc.len = priv->ndev->mtu + 22; + + for (n = 0; n < DESC_NUM; n++) { + skb = netsec_alloc_skb(priv, &desc); + if (!skb) { + netsec_uninit_pkt_dring(priv, NETSEC_RING_RX); + return -ENOMEM; + } + netsec_set_rx_de(priv, dring, n, &desc, skb); + } + + return 0; +} + +static int netsec_netdev_load_ucode_region(struct netsec_priv *priv, u32 reg, + u32 addr_h, u32 addr_l, u32 size) +{ + u64 base = (u64)addr_h << 32 | addr_l; + void __iomem *ucode; + u32 i; + + ucode = ioremap(base, size * sizeof(u32)); + if (!ucode) + return -ENOMEM; + + for (i = 0; i < size; i++) + netsec_write(priv, reg, readl(ucode + i * 4)); + + iounmap(ucode); + return 0; +} + +static int netsec_netdev_load_microcode(struct netsec_priv *priv) +{ + u32 addr_h, addr_l, size; + int err; + + addr_h = readl(priv->eeprom_base + NETSEC_EEPROM_HM_ME_ADDRESS_H); + addr_l = readl(priv->eeprom_base + NETSEC_EEPROM_HM_ME_ADDRESS_L); + size = readl(priv->eeprom_base + NETSEC_EEPROM_HM_ME_SIZE); + err = netsec_netdev_load_ucode_region(priv, NETSEC_REG_DMAC_HM_CMD_BUF, + addr_h, addr_l, size); + if (err) + return err; + + addr_h = readl(priv->eeprom_base + NETSEC_EEPROM_MH_ME_ADDRESS_H); + addr_l = readl(priv->eeprom_base + NETSEC_EEPROM_MH_ME_ADDRESS_L); + size = readl(priv->eeprom_base + NETSEC_EEPROM_MH_ME_SIZE); + err = netsec_netdev_load_ucode_region(priv, NETSEC_REG_DMAC_MH_CMD_BUF, + addr_h, addr_l, size); + if (err) + return err; + + addr_h = 0; + addr_l = readl(priv->eeprom_base + NETSEC_EEPROM_PKT_ME_ADDRESS); + size = readl(priv->eeprom_base + NETSEC_EEPROM_PKT_ME_SIZE); + err = netsec_netdev_load_ucode_region(priv, NETSEC_REG_PKT_CMD_BUF, + addr_h, addr_l, size); + if (err) + return err; + + return 0; +} + +static int netsec_reset_hardware(struct netsec_priv *priv) +{ + u32 value; + int err; + + /* stop DMA engines */ + if (!netsec_read(priv, NETSEC_REG_ADDR_DIS_CORE)) { + netsec_write(priv, NETSEC_REG_DMA_HM_CTRL, + NETSEC_DMA_CTRL_REG_STOP); + netsec_write(priv, NETSEC_REG_DMA_MH_CTRL, + NETSEC_DMA_CTRL_REG_STOP); + + while (netsec_read(priv, NETSEC_REG_DMA_HM_CTRL) & + NETSEC_DMA_CTRL_REG_STOP) + cpu_relax(); + + while (netsec_read(priv, NETSEC_REG_DMA_MH_CTRL) & + NETSEC_DMA_CTRL_REG_STOP) + cpu_relax(); + } + + netsec_write(priv, NETSEC_REG_SOFT_RST, NETSEC_SOFT_RST_REG_RESET); + netsec_write(priv, NETSEC_REG_SOFT_RST, NETSEC_SOFT_RST_REG_RUN); + netsec_write(priv, NETSEC_REG_COM_INIT, NETSEC_COM_INIT_REG_ALL); + + while (netsec_read(priv, NETSEC_REG_COM_INIT) != 0) + cpu_relax(); + + /* set desc_start addr */ + netsec_write(priv, NETSEC_REG_NRM_RX_DESC_START_UP, + upper_32_bits(priv->desc_ring[NETSEC_RING_RX].desc_phys)); + netsec_write(priv, NETSEC_REG_NRM_RX_DESC_START_LW, + lower_32_bits(priv->desc_ring[NETSEC_RING_RX].desc_phys)); + + netsec_write(priv, NETSEC_REG_NRM_TX_DESC_START_UP, + upper_32_bits(priv->desc_ring[NETSEC_RING_TX].desc_phys)); + netsec_write(priv, NETSEC_REG_NRM_TX_DESC_START_LW, + lower_32_bits(priv->desc_ring[NETSEC_RING_TX].desc_phys)); + + /* set normal tx dring ring config */ + netsec_write(priv, NETSEC_REG_NRM_TX_CONFIG, + 1 << NETSEC_REG_DESC_ENDIAN); + netsec_write(priv, NETSEC_REG_NRM_RX_CONFIG, + 1 << NETSEC_REG_DESC_ENDIAN); + + err = netsec_netdev_load_microcode(priv); + if (err) { + netif_err(priv, probe, priv->ndev, + "%s: failed to load microcode (%d)\n", __func__, err); + return err; + } + + /* start DMA engines */ + netsec_write(priv, NETSEC_REG_DMA_TMR_CTRL, priv->freq / 1000000 - 1); + netsec_write(priv, NETSEC_REG_ADDR_DIS_CORE, 0); + + usleep_range(1000, 2000); + + if (!(netsec_read(priv, NETSEC_REG_TOP_STATUS) & + NETSEC_TOP_IRQ_REG_CODE_LOAD_END)) { + netif_err(priv, probe, priv->ndev, + "microengine start failed\n"); + return -ENXIO; + } + netsec_write(priv, NETSEC_REG_TOP_STATUS, + NETSEC_TOP_IRQ_REG_CODE_LOAD_END); + + value = NETSEC_PKT_CTRL_REG_MODE_NRM; + if (priv->ndev->mtu > ETH_DATA_LEN) + value |= NETSEC_PKT_CTRL_REG_EN_JUMBO; + + /* change to normal mode */ + netsec_write(priv, NETSEC_REG_DMA_MH_CTRL, MH_CTRL__MODE_TRANS); + netsec_write(priv, NETSEC_REG_PKT_CTRL, value); + + while ((netsec_read(priv, NETSEC_REG_MODE_TRANS_COMP_STATUS) & + NETSEC_MODE_TRANS_COMP_IRQ_T2N) == 0) + cpu_relax(); + + /* clear any pending EMPTY/ERR irq status */ + netsec_write(priv, NETSEC_REG_NRM_TX_STATUS, ~0); + + /* Disable TX & RX intr */ + netsec_write(priv, NETSEC_REG_INTEN_CLR, ~0); + + return 0; +} + +static int netsec_start_gmac(struct netsec_priv *priv) +{ + struct phy_device *phydev = priv->ndev->phydev; + u32 value = 0; + int ret; + + if (phydev->speed != SPEED_1000) + value = (NETSEC_GMAC_MCR_REG_CST | + NETSEC_GMAC_MCR_REG_HALF_DUPLEX_COMMON); + + if (netsec_mac_write(priv, GMAC_REG_MCR, value)) + return -ETIMEDOUT; + if (netsec_mac_write(priv, GMAC_REG_BMR, + NETSEC_GMAC_BMR_REG_RESET)) + return -ETIMEDOUT; + + /* Wait soft reset */ + usleep_range(1000, 5000); + + ret = netsec_mac_read(priv, GMAC_REG_BMR, &value); + if (ret) + return ret; + if (value & NETSEC_GMAC_BMR_REG_SWR) + return -EAGAIN; + + netsec_write(priv, MAC_REG_DESC_SOFT_RST, 1); + if (netsec_wait_while_busy(priv, MAC_REG_DESC_SOFT_RST, 1)) + return -ETIMEDOUT; + + netsec_write(priv, MAC_REG_DESC_INIT, 1); + if (netsec_wait_while_busy(priv, MAC_REG_DESC_INIT, 1)) + return -ETIMEDOUT; + + if (netsec_mac_write(priv, GMAC_REG_BMR, + NETSEC_GMAC_BMR_REG_COMMON)) + return -ETIMEDOUT; + if (netsec_mac_write(priv, GMAC_REG_RDLAR, + NETSEC_GMAC_RDLAR_REG_COMMON)) + return -ETIMEDOUT; + if (netsec_mac_write(priv, GMAC_REG_TDLAR, + NETSEC_GMAC_TDLAR_REG_COMMON)) + return -ETIMEDOUT; + if (netsec_mac_write(priv, GMAC_REG_MFFR, 0x80000001)) + return -ETIMEDOUT; + + ret = netsec_mac_update_to_phy_state(priv); + if (ret) + return ret; + + ret = netsec_mac_read(priv, GMAC_REG_OMR, &value); + if (ret) + return ret; + + value |= NETSEC_GMAC_OMR_REG_SR; + value |= NETSEC_GMAC_OMR_REG_ST; + + netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_CLR, ~0); + netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_CLR, ~0); + + netsec_et_set_coalesce(priv->ndev, &priv->et_coalesce); + + if (netsec_mac_write(priv, GMAC_REG_OMR, value)) + return -ETIMEDOUT; + + return 0; +} + +static int netsec_stop_gmac(struct netsec_priv *priv) +{ + u32 value; + int ret; + + ret = netsec_mac_read(priv, GMAC_REG_OMR, &value); + if (ret) + return ret; + value &= ~NETSEC_GMAC_OMR_REG_SR; + value &= ~NETSEC_GMAC_OMR_REG_ST; + + /* disable all interrupts */ + netsec_write(priv, NETSEC_REG_NRM_RX_INTEN_CLR, ~0); + netsec_write(priv, NETSEC_REG_NRM_TX_INTEN_CLR, ~0); + + return netsec_mac_write(priv, GMAC_REG_OMR, value); +} + +static void netsec_phy_adjust_link(struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + + if (ndev->phydev->link) + netsec_start_gmac(priv); + else + netsec_stop_gmac(priv); + + phy_print_status(ndev->phydev); +} + +static irqreturn_t netsec_irq_handler(int irq, void *dev_id) +{ + struct netsec_priv *priv = dev_id; + u32 val, status = netsec_read(priv, NETSEC_REG_TOP_STATUS); + unsigned long flags; + + /* Disable interrupts */ + if (status & NETSEC_IRQ_TX) { + val = netsec_read(priv, NETSEC_REG_NRM_TX_STATUS); + netsec_write(priv, NETSEC_REG_NRM_TX_STATUS, val); + } + if (status & NETSEC_IRQ_RX) { + val = netsec_read(priv, NETSEC_REG_NRM_RX_STATUS); + netsec_write(priv, NETSEC_REG_NRM_RX_STATUS, val); + } + + spin_lock_irqsave(&priv->reglock, flags); + netsec_write(priv, NETSEC_REG_INTEN_CLR, NETSEC_IRQ_RX | NETSEC_IRQ_TX); + spin_unlock_irqrestore(&priv->reglock, flags); + + napi_schedule(&priv->napi); + + return IRQ_HANDLED; +} + +static int netsec_netdev_open(struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + int ret; + + pm_runtime_get_sync(priv->dev); + + ret = netsec_setup_rx_dring(priv); + if (ret) { + netif_err(priv, probe, priv->ndev, + "%s: fail setup ring\n", __func__); + goto err1; + } + + ret = request_irq(priv->ndev->irq, netsec_irq_handler, + IRQF_SHARED, "netsec", priv); + if (ret) { + netif_err(priv, drv, priv->ndev, "request_irq failed\n"); + goto err2; + } + + if (dev_of_node(priv->dev)) { + if (!of_phy_connect(priv->ndev, priv->phy_np, + netsec_phy_adjust_link, 0, + priv->phy_interface)) { + netif_err(priv, link, priv->ndev, "missing PHY\n"); + ret = -ENODEV; + goto err3; + } + } else { + ret = phy_connect_direct(priv->ndev, priv->phydev, + netsec_phy_adjust_link, + priv->phy_interface); + if (ret) { + netif_err(priv, link, priv->ndev, + "phy_connect_direct() failed (%d)\n", ret); + goto err3; + } + } + + phy_start(ndev->phydev); + + netsec_start_gmac(priv); + napi_enable(&priv->napi); + netif_start_queue(ndev); + + /* Enable RX intr. */ + netsec_write(priv, NETSEC_REG_INTEN_SET, NETSEC_IRQ_RX); + + return 0; +err3: + free_irq(priv->ndev->irq, priv); +err2: + netsec_uninit_pkt_dring(priv, NETSEC_RING_RX); +err1: + pm_runtime_put_sync(priv->dev); + return ret; +} + +static int netsec_netdev_stop(struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + + netif_stop_queue(priv->ndev); + dma_wmb(); + + napi_disable(&priv->napi); + + netsec_write(priv, NETSEC_REG_INTEN_CLR, ~0); + netsec_stop_gmac(priv); + + free_irq(priv->ndev->irq, priv); + + netsec_uninit_pkt_dring(priv, NETSEC_RING_TX); + netsec_uninit_pkt_dring(priv, NETSEC_RING_RX); + + phy_stop(ndev->phydev); + phy_disconnect(ndev->phydev); + + pm_runtime_put_sync(priv->dev); + + return 0; +} + +static int netsec_netdev_init(struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + int ret; + + ret = netsec_alloc_dring(priv, NETSEC_RING_TX); + if (ret) + return ret; + + ret = netsec_alloc_dring(priv, NETSEC_RING_RX); + if (ret) + goto err1; + + ret = netsec_reset_hardware(priv); + if (ret) + goto err2; + + return 0; +err2: + netsec_free_dring(priv, NETSEC_RING_RX); +err1: + netsec_free_dring(priv, NETSEC_RING_TX); + return ret; +} + +static void netsec_netdev_uninit(struct net_device *ndev) +{ + struct netsec_priv *priv = netdev_priv(ndev); + + netsec_free_dring(priv, NETSEC_RING_RX); + netsec_free_dring(priv, NETSEC_RING_TX); +} + +static int netsec_netdev_set_features(struct net_device *ndev, + netdev_features_t features) +{ + struct netsec_priv *priv = netdev_priv(ndev); + + priv->rx_cksum_offload_flag = !!(features & NETIF_F_RXCSUM); + + return 0; +} + +static int netsec_netdev_ioctl(struct net_device *ndev, struct ifreq *ifr, + int cmd) +{ + return phy_mii_ioctl(ndev->phydev, ifr, cmd); +} + +static const struct net_device_ops netsec_netdev_ops = { + .ndo_init = netsec_netdev_init, + .ndo_uninit = netsec_netdev_uninit, + .ndo_open = netsec_netdev_open, + .ndo_stop = netsec_netdev_stop, + .ndo_start_xmit = netsec_netdev_start_xmit, + .ndo_set_features = netsec_netdev_set_features, + .ndo_set_mac_address = eth_mac_addr, + .ndo_validate_addr = eth_validate_addr, + .ndo_do_ioctl = netsec_netdev_ioctl, +}; + +static int netsec_of_probe(struct platform_device *pdev, + struct netsec_priv *priv) +{ + priv->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); + if (!priv->phy_np) { + dev_err(&pdev->dev, "missing required property 'phy-handle'\n"); + return -EINVAL; + } + + priv->clk = devm_clk_get(&pdev->dev, NULL); /* get by 'phy_ref_clk' */ + if (IS_ERR(priv->clk)) { + dev_err(&pdev->dev, "phy_ref_clk not found\n"); + return PTR_ERR(priv->clk); + } + priv->freq = clk_get_rate(priv->clk); + + return 0; +} + +static int netsec_acpi_probe(struct platform_device *pdev, + struct netsec_priv *priv, u32 *phy_addr) +{ + int ret; + + if (!IS_ENABLED(CONFIG_ACPI)) + return -ENODEV; + + ret = device_property_read_u32(&pdev->dev, "phy-channel", phy_addr); + if (ret) { + dev_err(&pdev->dev, + "missing required property 'phy-channel'\n"); + return ret; + } + + ret = device_property_read_u32(&pdev->dev, + "socionext,phy-clock-frequency", + &priv->freq); + if (ret) + dev_err(&pdev->dev, + "missing required property 'socionext,phy-clock-frequency'\n"); + return ret; +} + +static void netsec_unregister_mdio(struct netsec_priv *priv) +{ + struct phy_device *phydev = priv->phydev; + + if (!dev_of_node(priv->dev) && phydev) { + phy_device_remove(phydev); + phy_device_free(phydev); + } + + mdiobus_unregister(priv->mii_bus); +} + +static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr) +{ + struct mii_bus *bus; + int ret; + + bus = devm_mdiobus_alloc(priv->dev); + if (!bus) + return -ENOMEM; + + snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(priv->dev)); + bus->priv = priv; + bus->name = "SNI NETSEC MDIO"; + bus->read = netsec_phy_read; + bus->write = netsec_phy_write; + bus->parent = priv->dev; + priv->mii_bus = bus; + + if (dev_of_node(priv->dev)) { + struct device_node *mdio_node, *parent = dev_of_node(priv->dev); + + mdio_node = of_get_child_by_name(parent, "mdio"); + if (mdio_node) { + parent = mdio_node; + } else { + /* older f/w doesn't populate the mdio subnode, + * allow relaxed upgrade of f/w in due time. + */ + dev_info(priv->dev, "Upgrade f/w for mdio subnode!\n"); + } + + ret = of_mdiobus_register(bus, parent); + of_node_put(mdio_node); + + if (ret) { + dev_err(priv->dev, "mdiobus register err(%d)\n", ret); + return ret; + } + } else { + /* Mask out all PHYs from auto probing. */ + bus->phy_mask = ~0; + ret = mdiobus_register(bus); + if (ret) { + dev_err(priv->dev, "mdiobus register err(%d)\n", ret); + return ret; + } + + priv->phydev = get_phy_device(bus, phy_addr, false); + if (IS_ERR(priv->phydev)) { + ret = PTR_ERR(priv->phydev); + dev_err(priv->dev, "get_phy_device err(%d)\n", ret); + priv->phydev = NULL; + return -ENODEV; + } + + ret = phy_device_register(priv->phydev); + if (ret) { + mdiobus_unregister(bus); + dev_err(priv->dev, + "phy_device_register err(%d)\n", ret); + } + } + + return ret; +} + +static int netsec_probe(struct platform_device *pdev) +{ + struct resource *mmio_res, *eeprom_res, *irq_res; + u8 *mac, macbuf[ETH_ALEN]; + struct netsec_priv *priv; + u32 hw_ver, phy_addr = 0; + struct net_device *ndev; + int ret; + + mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!mmio_res) { + dev_err(&pdev->dev, "No MMIO resource found.\n"); + return -ENODEV; + } + + eeprom_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (!eeprom_res) { + dev_info(&pdev->dev, "No EEPROM resource found.\n"); + return -ENODEV; + } + + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (!irq_res) { + dev_err(&pdev->dev, "No IRQ resource found.\n"); + return -ENODEV; + } + + ndev = alloc_etherdev(sizeof(*priv)); + if (!ndev) + return -ENOMEM; + + priv = netdev_priv(ndev); + + spin_lock_init(&priv->reglock); + SET_NETDEV_DEV(ndev, &pdev->dev); + platform_set_drvdata(pdev, priv); + ndev->irq = irq_res->start; + priv->dev = &pdev->dev; + priv->ndev = ndev; + + priv->msg_enable = NETIF_MSG_TX_ERR | NETIF_MSG_HW | NETIF_MSG_DRV | + NETIF_MSG_LINK | NETIF_MSG_PROBE; + + priv->phy_interface = device_get_phy_mode(&pdev->dev); + if (priv->phy_interface < 0) { + dev_err(&pdev->dev, "missing required property 'phy-mode'\n"); + ret = -ENODEV; + goto free_ndev; + } + + priv->ioaddr = devm_ioremap(&pdev->dev, mmio_res->start, + resource_size(mmio_res)); + if (!priv->ioaddr) { + dev_err(&pdev->dev, "devm_ioremap() failed\n"); + ret = -ENXIO; + goto free_ndev; + } + + priv->eeprom_base = devm_ioremap(&pdev->dev, eeprom_res->start, + resource_size(eeprom_res)); + if (!priv->eeprom_base) { + dev_err(&pdev->dev, "devm_ioremap() failed for EEPROM\n"); + ret = -ENXIO; + goto free_ndev; + } + + mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf)); + if (mac) + ether_addr_copy(ndev->dev_addr, mac); + + if (priv->eeprom_base && + (!mac || !is_valid_ether_addr(ndev->dev_addr))) { + void __iomem *macp = priv->eeprom_base + + NETSEC_EEPROM_MAC_ADDRESS; + + ndev->dev_addr[0] = readb(macp + 3); + ndev->dev_addr[1] = readb(macp + 2); + ndev->dev_addr[2] = readb(macp + 1); + ndev->dev_addr[3] = readb(macp + 0); + ndev->dev_addr[4] = readb(macp + 7); + ndev->dev_addr[5] = readb(macp + 6); + } + + if (!is_valid_ether_addr(ndev->dev_addr)) { + dev_warn(&pdev->dev, "No MAC address found, using random\n"); + eth_hw_addr_random(ndev); + } + + if (dev_of_node(&pdev->dev)) + ret = netsec_of_probe(pdev, priv); + else + ret = netsec_acpi_probe(pdev, priv, &phy_addr); + if (ret) + goto free_ndev; + + if (!priv->freq) { + dev_err(&pdev->dev, "missing PHY reference clock frequency\n"); + ret = -ENODEV; + goto free_ndev; + } + + /* default for throughput */ + priv->et_coalesce.rx_coalesce_usecs = 500; + priv->et_coalesce.rx_max_coalesced_frames = 8; + priv->et_coalesce.tx_coalesce_usecs = 500; + priv->et_coalesce.tx_max_coalesced_frames = 8; + + ret = device_property_read_u32(&pdev->dev, "max-frame-size", + &ndev->max_mtu); + if (ret < 0) + ndev->max_mtu = ETH_DATA_LEN; + + /* runtime_pm coverage just for probe, open/close also cover it */ + pm_runtime_enable(&pdev->dev); + pm_runtime_get_sync(&pdev->dev); + + hw_ver = netsec_read(priv, NETSEC_REG_F_TAIKI_VER); + /* this driver only supports F_TAIKI style NETSEC */ + if (NETSEC_F_NETSEC_VER_MAJOR_NUM(hw_ver) != + NETSEC_F_NETSEC_VER_MAJOR_NUM(NETSEC_REG_NETSEC_VER_F_TAIKI)) { + ret = -ENODEV; + goto pm_disable; + } + + dev_info(&pdev->dev, "hardware revision %d.%d\n", + hw_ver >> 16, hw_ver & 0xffff); + + netif_napi_add(ndev, &priv->napi, netsec_napi_poll, NAPI_BUDGET); + + ndev->netdev_ops = &netsec_netdev_ops; + ndev->ethtool_ops = &netsec_ethtool_ops; + + ndev->features |= NETIF_F_HIGHDMA | NETIF_F_RXCSUM | NETIF_F_GSO | + NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + ndev->hw_features = ndev->features; + + priv->rx_cksum_offload_flag = true; + + ret = netsec_register_mdio(priv, phy_addr); + if (ret) + goto unreg_napi; + + if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) + dev_warn(&pdev->dev, "Failed to enable 64-bit DMA\n"); + + ret = register_netdev(ndev); + if (ret) { + netif_err(priv, probe, ndev, "register_netdev() failed\n"); + goto unreg_mii; + } + + pm_runtime_put_sync(&pdev->dev); + return 0; + +unreg_mii: + netsec_unregister_mdio(priv); +unreg_napi: + netif_napi_del(&priv->napi); +pm_disable: + pm_runtime_put_sync(&pdev->dev); + pm_runtime_disable(&pdev->dev); +free_ndev: + free_netdev(ndev); + dev_err(&pdev->dev, "init failed\n"); + + return ret; +} + +static int netsec_remove(struct platform_device *pdev) +{ + struct netsec_priv *priv = platform_get_drvdata(pdev); + + unregister_netdev(priv->ndev); + + netsec_unregister_mdio(priv); + + netif_napi_del(&priv->napi); + + pm_runtime_disable(&pdev->dev); + free_netdev(priv->ndev); + + return 0; +} + +#ifdef CONFIG_PM +static int netsec_runtime_suspend(struct device *dev) +{ + struct netsec_priv *priv = dev_get_drvdata(dev); + + netsec_write(priv, NETSEC_REG_CLK_EN, 0); + + clk_disable_unprepare(priv->clk); + + return 0; +} + +static int netsec_runtime_resume(struct device *dev) +{ + struct netsec_priv *priv = dev_get_drvdata(dev); + + clk_prepare_enable(priv->clk); + + netsec_write(priv, NETSEC_REG_CLK_EN, NETSEC_CLK_EN_REG_DOM_D | + NETSEC_CLK_EN_REG_DOM_C | + NETSEC_CLK_EN_REG_DOM_G); + return 0; +} +#endif + +static const struct dev_pm_ops netsec_pm_ops = { + SET_RUNTIME_PM_OPS(netsec_runtime_suspend, netsec_runtime_resume, NULL) +}; + +static const struct of_device_id netsec_dt_ids[] = { + { .compatible = "socionext,synquacer-netsec" }, + { } +}; +MODULE_DEVICE_TABLE(of, netsec_dt_ids); + +#ifdef CONFIG_ACPI +static const struct acpi_device_id netsec_acpi_ids[] = { + { "SCX0001" }, + { } +}; +MODULE_DEVICE_TABLE(acpi, netsec_acpi_ids); +#endif + +static struct platform_driver netsec_driver = { + .probe = netsec_probe, + .remove = netsec_remove, + .driver = { + .name = "netsec", + .pm = &netsec_pm_ops, + .of_match_table = netsec_dt_ids, + .acpi_match_table = ACPI_PTR(netsec_acpi_ids), + }, +}; +module_platform_driver(netsec_driver); + +MODULE_AUTHOR("Jassi Brar "); +MODULE_AUTHOR("Ard Biesheuvel "); +MODULE_DESCRIPTION("NETSEC Ethernet driver"); +MODULE_LICENSE("GPL"); --- linux-aws-4.15.0.orig/drivers/net/phy/phy.c +++ linux-aws-4.15.0/drivers/net/phy/phy.c @@ -629,9 +629,6 @@ if (PHY_HALTED == phydev->state) return IRQ_NONE; /* It can't be ours. */ - disable_irq_nosync(irq); - atomic_inc(&phydev->irq_disable); - phy_change(phydev); return IRQ_HANDLED; @@ -689,7 +686,6 @@ */ int phy_start_interrupts(struct phy_device *phydev) { - atomic_set(&phydev->irq_disable, 0); if (request_threaded_irq(phydev->irq, NULL, phy_interrupt, IRQF_ONESHOT | IRQF_SHARED, phydev_name(phydev), phydev) < 0) { @@ -716,13 +712,6 @@ free_irq(phydev->irq, phydev); - /* If work indeed has been cancelled, disable_irq() will have - * been left unbalanced from phy_interrupt() and enable_irq() - * has to be called so that other devices on the line work. - */ - while (atomic_dec_return(&phydev->irq_disable) >= 0) - enable_irq(phydev->irq); - return err; } EXPORT_SYMBOL(phy_stop_interrupts); @@ -736,7 +725,7 @@ if (phy_interrupt_is_valid(phydev)) { if (phydev->drv->did_interrupt && !phydev->drv->did_interrupt(phydev)) - goto ignore; + return; if (phy_disable_interrupts(phydev)) goto phy_err; @@ -748,27 +737,16 @@ mutex_unlock(&phydev->lock); if (phy_interrupt_is_valid(phydev)) { - atomic_dec(&phydev->irq_disable); - enable_irq(phydev->irq); - /* Reenable interrupts */ if (PHY_HALTED != phydev->state && phy_config_interrupt(phydev, PHY_INTERRUPT_ENABLED)) - goto irq_enable_err; + goto phy_err; } /* reschedule state queue work to run as soon as possible */ phy_trigger_machine(phydev, true); return; -ignore: - atomic_dec(&phydev->irq_disable); - enable_irq(phydev->irq); - return; - -irq_enable_err: - disable_irq(phydev->irq); - atomic_inc(&phydev->irq_disable); phy_err: phy_error(phydev); } --- linux-aws-4.15.0.orig/drivers/net/usb/qmi_wwan.c +++ linux-aws-4.15.0/drivers/net/usb/qmi_wwan.c @@ -1245,6 +1245,7 @@ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */ {QMI_FIXED_INTF(0x2c7c, 0x0296, 4)}, /* Quectel BG96 */ + {QMI_QUIRK_SET_DTR(0x2c7c, 0x0306, 4)}, /* Quectel EP06 Mini PCIe */ /* 4. Gobi 1000 devices */ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ --- linux-aws-4.15.0.orig/drivers/net/vxlan.c +++ linux-aws-4.15.0/drivers/net/vxlan.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -91,6 +92,167 @@ ip_tunnel_collect_metadata(); } +static struct ip_fan_map *vxlan_fan_find_map(struct vxlan_dev *vxlan, __be32 daddr) +{ + struct ip_fan_map *fan_map; + + rcu_read_lock(); + list_for_each_entry_rcu(fan_map, &vxlan->fan.fan_maps, list) { + if (fan_map->overlay == + (daddr & inet_make_mask(fan_map->overlay_prefix))) { + rcu_read_unlock(); + return fan_map; + } + } + rcu_read_unlock(); + + return NULL; +} + +static void vxlan_fan_flush_map(struct vxlan_dev *vxlan) +{ + struct ip_fan_map *fan_map; + + list_for_each_entry_rcu(fan_map, &vxlan->fan.fan_maps, list) { + list_del_rcu(&fan_map->list); + kfree_rcu(fan_map, rcu); + } +} + +static int vxlan_fan_del_map(struct vxlan_dev *vxlan, __be32 overlay) +{ + struct ip_fan_map *fan_map; + + fan_map = vxlan_fan_find_map(vxlan, overlay); + if (!fan_map) + return -ENOENT; + + list_del_rcu(&fan_map->list); + kfree_rcu(fan_map, rcu); + + return 0; +} + +static int vxlan_fan_add_map(struct vxlan_dev *vxlan, struct ifla_fan_map *map) +{ + __be32 overlay_mask, underlay_mask; + struct ip_fan_map *fan_map; + + overlay_mask = inet_make_mask(map->overlay_prefix); + underlay_mask = inet_make_mask(map->underlay_prefix); + + netdev_dbg(vxlan->dev, "vfam: map: o %x/%d u %x/%d om %x um %x\n", + map->overlay, map->overlay_prefix, + map->underlay, map->underlay_prefix, + overlay_mask, underlay_mask); + + if ((map->overlay & ~overlay_mask) || (map->underlay & ~underlay_mask)) + return -EINVAL; + + if (!(map->overlay & overlay_mask) && (map->underlay & underlay_mask)) + return -EINVAL; + + /* Special case: overlay 0 and underlay 0: flush all mappings */ + if (!map->overlay && !map->underlay) { + vxlan_fan_flush_map(vxlan); + return 0; + } + + /* Special case: overlay set and underlay 0: clear map for overlay */ + if (!map->underlay) + return vxlan_fan_del_map(vxlan, map->overlay); + + if (vxlan_fan_find_map(vxlan, map->overlay)) + return -EEXIST; + + fan_map = kmalloc(sizeof(*fan_map), GFP_KERNEL); + fan_map->underlay = map->underlay; + fan_map->overlay = map->overlay; + fan_map->underlay_prefix = map->underlay_prefix; + fan_map->overlay_mask = ntohl(overlay_mask); + fan_map->overlay_prefix = map->overlay_prefix; + + list_add_tail_rcu(&fan_map->list, &vxlan->fan.fan_maps); + + return 0; +} + +static int vxlan_parse_fan_map(struct nlattr *data[], struct vxlan_dev *vxlan) +{ + struct ifla_fan_map *map; + struct nlattr *attr; + int rem, rv; + + nla_for_each_nested(attr, data[IFLA_IPTUN_FAN_MAP], rem) { + map = nla_data(attr); + rv = vxlan_fan_add_map(vxlan, map); + if (rv) + return rv; + } + + return 0; +} + +static int vxlan_fan_build_rdst(struct vxlan_dev *vxlan, struct sk_buff *skb, + struct vxlan_rdst *fan_rdst) +{ + struct ip_fan_map *f_map; + union vxlan_addr *va; + u32 daddr, underlay; + struct arphdr *arp; + void *arp_ptr; + struct ethhdr *eth; + struct iphdr *iph; + + eth = eth_hdr(skb); + switch (eth->h_proto) { + case htons(ETH_P_IP): + iph = ip_hdr(skb); + if (!iph) + return -EINVAL; + daddr = iph->daddr; + break; + case htons(ETH_P_ARP): + arp = arp_hdr(skb); + if (!arp) + return -EINVAL; + arp_ptr = arp + 1; + netdev_dbg(vxlan->dev, + "vfbr: arp sha %pM sip %pI4 tha %pM tip %pI4\n", + arp_ptr, arp_ptr + skb->dev->addr_len, + arp_ptr + skb->dev->addr_len + 4, + arp_ptr + (skb->dev->addr_len * 2) + 4); + arp_ptr += (skb->dev->addr_len * 2) + 4; + memcpy(&daddr, arp_ptr, 4); + break; + default: + netdev_dbg(vxlan->dev, "vfbr: unknown eth p %x\n", eth->h_proto); + return -EINVAL; + } + + f_map = vxlan_fan_find_map(vxlan, daddr); + if (!f_map) + return -EINVAL; + + daddr = ntohl(daddr); + underlay = ntohl(f_map->underlay); + if (!underlay) + return -EINVAL; + + memset(fan_rdst, 0, sizeof(*fan_rdst)); + va = &fan_rdst->remote_ip; + va->sa.sa_family = AF_INET; + fan_rdst->remote_vni = vxlan->default_dst.remote_vni; + va->sin.sin_addr.s_addr = htonl(underlay | + ((daddr & ~f_map->overlay_mask) >> + (32 - f_map->overlay_prefix - + (32 - f_map->underlay_prefix)))); + netdev_dbg(vxlan->dev, "vfbr: daddr %x ul %x dst %x\n", + daddr, underlay, va->sin.sin_addr.s_addr); + + return 0; +} + #if IS_ENABLED(CONFIG_IPV6) static inline bool vxlan_addr_equal(const union vxlan_addr *a, const union vxlan_addr *b) @@ -2143,6 +2305,13 @@ goto tx_error; } + if (fan_has_map(&vxlan->fan) && rt->rt_flags & RTCF_LOCAL) { + netdev_dbg(dev, "discard fan to localhost %pI4\n", + &dst->sin.sin_addr.s_addr); + ip_rt_put(rt); + goto tx_free; + } + /* Bypass encapsulation if the destination is local */ if (!info) { err = encap_bypass_if_local(skb, dev, vxlan, dst, @@ -2233,6 +2402,7 @@ dev->stats.tx_carrier_errors++; dst_release(ndst); dev->stats.tx_errors++; +tx_free: kfree_skb(skb); } @@ -2287,6 +2457,20 @@ #endif } + if (fan_has_map(&vxlan->fan)) { + struct vxlan_rdst fan_rdst; + + netdev_dbg(vxlan->dev, "vxlan_xmit p %x d %pM\n", + eth->h_proto, eth->h_dest); + if (vxlan_fan_build_rdst(vxlan, skb, &fan_rdst)) { + dev->stats.tx_dropped++; + kfree_skb(skb); + return NETDEV_TX_OK; + } + vxlan_xmit_one(skb, dev, vni, &fan_rdst, 0); + return NETDEV_TX_OK; + } + eth = eth_hdr(skb); f = vxlan_find_mac(vxlan, eth->h_dest, vni); did_rsc = false; @@ -2662,6 +2846,8 @@ for (h = 0; h < FDB_HASH_SIZE; ++h) INIT_HLIST_HEAD(&vxlan->fdb_head[h]); + + INIT_LIST_HEAD(&vxlan->fan.fan_maps); } static void vxlan_ether_setup(struct net_device *dev) @@ -3195,6 +3381,7 @@ bool changelink) { struct vxlan_dev *vxlan = netdev_priv(dev); + int err; memset(conf, 0, sizeof(*conf)); @@ -3227,6 +3414,12 @@ conf->remote_ip.sa.sa_family = AF_INET6; } + if (data[IFLA_VXLAN_FAN_MAP]) { + err = vxlan_parse_fan_map(data, vxlan); + if (err) + return err; + } + if (data[IFLA_VXLAN_LOCAL]) { if (changelink && (conf->saddr.sa.sa_family != AF_INET)) return -EOPNOTSUPP; @@ -3497,6 +3690,7 @@ nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_UDP_ZERO_CSUM6_RX */ nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_REMCSUM_TX */ nla_total_size(sizeof(__u8)) + /* IFLA_VXLAN_REMCSUM_RX */ + nla_total_size(sizeof(struct ip_fan_map) * 256) + 0; } @@ -3543,6 +3737,26 @@ } } + if (fan_has_map(&vxlan->fan)) { + struct nlattr *fan_nest; + struct ip_fan_map *fan_map; + + fan_nest = nla_nest_start(skb, IFLA_VXLAN_FAN_MAP); + if (!fan_nest) + goto nla_put_failure; + list_for_each_entry_rcu(fan_map, &vxlan->fan.fan_maps, list) { + struct ifla_fan_map map; + + map.underlay = fan_map->underlay; + map.underlay_prefix = fan_map->underlay_prefix; + map.overlay = fan_map->overlay; + map.overlay_prefix = fan_map->overlay_prefix; + if (nla_put(skb, IFLA_FAN_MAPPING, sizeof(map), &map)) + goto nla_put_failure; + } + nla_nest_end(skb, fan_nest); + } + if (nla_put_u8(skb, IFLA_VXLAN_TTL, vxlan->cfg.ttl) || nla_put_u8(skb, IFLA_VXLAN_TOS, vxlan->cfg.tos) || nla_put_be32(skb, IFLA_VXLAN_LABEL, vxlan->cfg.label) || @@ -3709,6 +3923,22 @@ return 0; } +#ifdef CONFIG_SYSCTL +static struct ctl_table_header *vxlan_fan_header; +static unsigned int vxlan_fan_version = 4; + +static struct ctl_table vxlan_fan_sysctls[] = { + { + .procname = "vxlan", + .data = &vxlan_fan_version, + .maxlen = sizeof(vxlan_fan_version), + .mode = 0444, + .proc_handler = proc_dointvec, + }, + {}, +}; +#endif /* CONFIG_SYSCTL */ + static void __net_exit vxlan_exit_net(struct net *net) { struct vxlan_net *vn = net_generic(net, vxlan_net_id); @@ -3764,7 +3994,20 @@ if (rc) goto out3; +#ifdef CONFIG_SYSCTL + vxlan_fan_header = register_net_sysctl(&init_net, "net/fan", + vxlan_fan_sysctls); + if (!vxlan_fan_header) { + rc = -ENOMEM; + goto sysctl_failed; + } +#endif /* CONFIG_SYSCTL */ + return 0; +#ifdef CONFIG_SYSCTL +sysctl_failed: + rtnl_link_unregister(&vxlan_link_ops); +#endif /* CONFIG_SYSCTL */ out3: unregister_netdevice_notifier(&vxlan_notifier_block); out2: @@ -3776,6 +4019,9 @@ static void __exit vxlan_cleanup_module(void) { +#ifdef CONFIG_SYSCTL + unregister_net_sysctl_table(vxlan_fan_header); +#endif /* CONFIG_SYSCTL */ rtnl_link_unregister(&vxlan_link_ops); unregister_netdevice_notifier(&vxlan_notifier_block); unregister_pernet_subsys(&vxlan_net_ops); --- linux-aws-4.15.0.orig/drivers/pci/host/pci-hyperv.c +++ linux-aws-4.15.0/drivers/pci/host/pci-hyperv.c @@ -1536,9 +1536,11 @@ * can have shorter names than based on the bus instance UUID. * Only the first device serial number is used for domain, so the * domain number will not change after the first device is added. + * The lower 16 bits of the serial number is used, otherwise some + * drivers may not be able to handle it. */ if (list_empty(&hbus->children)) - hbus->sysdata.domain = desc->ser; + hbus->sysdata.domain = desc->ser & 0xFFFF; list_add_tail(&hpdev->list_entry, &hbus->children); spin_unlock_irqrestore(&hbus->device_list_lock, flags); return hpdev; --- linux-aws-4.15.0.orig/drivers/pci/pci-sysfs.c +++ linux-aws-4.15.0/drivers/pci/pci-sysfs.c @@ -919,6 +919,9 @@ loff_t init_off = off; u8 *data = (u8 *) buf; + if (kernel_is_locked_down("Direct PCI access")) + return -EPERM; + if (off > dev->cfg_size) return 0; if (off + count > dev->cfg_size) { @@ -1213,6 +1216,9 @@ enum pci_mmap_state mmap_type; struct resource *res = &pdev->resource[bar]; + if (kernel_is_locked_down("Direct PCI access")) + return -EPERM; + if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start)) return -EINVAL; @@ -1293,6 +1299,9 @@ struct bin_attribute *attr, char *buf, loff_t off, size_t count) { + if (kernel_is_locked_down("Direct PCI access")) + return -EPERM; + return pci_resource_io(filp, kobj, attr, buf, off, count, true); } --- linux-aws-4.15.0.orig/drivers/pci/proc.c +++ linux-aws-4.15.0/drivers/pci/proc.c @@ -117,6 +117,9 @@ int size = dev->cfg_size; int cnt; + if (kernel_is_locked_down("Direct PCI access")) + return -EPERM; + if (pos >= size) return 0; if (nbytes >= size) @@ -196,6 +199,9 @@ #endif /* HAVE_PCI_MMAP */ int ret = 0; + if (kernel_is_locked_down("Direct PCI access")) + return -EPERM; + switch (cmd) { case PCIIOC_CONTROLLER: ret = pci_domain_nr(dev->bus); @@ -237,7 +243,8 @@ struct pci_filp_private *fpriv = file->private_data; int i, ret, write_combine = 0, res_bit = IORESOURCE_MEM; - if (!capable(CAP_SYS_RAWIO)) + if (!capable(CAP_SYS_RAWIO) || + kernel_is_locked_down("Direct PCI access")) return -EPERM; if (fpriv->mmap_state == pci_mmap_io) { --- linux-aws-4.15.0.orig/drivers/pci/quirks.c +++ linux-aws-4.15.0/drivers/pci/quirks.c @@ -43,6 +43,21 @@ DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_BRIDGE_HOST, 8, quirk_mmio_always_on); +/* The BAR0 ~ BAR4 of Marvell 9125 device can't be accessed +* by IO resource file, and need to skip the files +*/ +static void quirk_marvell_mask_bar(struct pci_dev *dev) +{ + int i; + + for (i = 0; i < 5; i++) + if (dev->resource[i].start) + dev->resource[i].start = + dev->resource[i].end = 0; +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9125, + quirk_marvell_mask_bar); + /* The Mellanox Tavor device gives false positive parity errors * Mark this device with a broken_parity_status, to allow * PCI scanning code to "skip" this now blacklisted device. @@ -4792,6 +4807,27 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1502, quirk_intel_no_flr); DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1503, quirk_intel_no_flr); +static void quirk_intel_th_rtit_bar(struct pci_dev *dev) +{ + struct resource *r = &dev->resource[4]; + + /* + * Hello, Denverton! + * Denverton reports 2k of RTIT_BAR (resource 4), which can't be + * right given the 16 threads. When Intel TH gets enabled, the + * actual resource overlaps the XHCI MMIO space and causes it + * to die. + * We're not really using RTIT_BAR at all at the moment, so it's + * a safe choice to disable this resource. + */ + if (r->end == r->start + 0x7ff) { + r->flags = 0; + r->start = 0; + r->end = 0; + } +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x19e1, quirk_intel_th_rtit_bar); + static void quirk_no_ext_tags(struct pci_dev *pdev) { struct pci_host_bridge *bridge = pci_find_host_bridge(pdev->bus); --- linux-aws-4.15.0.orig/drivers/pci/syscall.c +++ linux-aws-4.15.0/drivers/pci/syscall.c @@ -93,7 +93,8 @@ u32 dword; int err = 0; - if (!capable(CAP_SYS_ADMIN)) + if (!capable(CAP_SYS_ADMIN) || + kernel_is_locked_down("Direct PCI access")) return -EPERM; dev = pci_get_bus_and_slot(bus, dfn); --- linux-aws-4.15.0.orig/drivers/pcmcia/cistpl.c +++ linux-aws-4.15.0/drivers/pcmcia/cistpl.c @@ -1578,6 +1578,9 @@ struct pcmcia_socket *s; int error; + if (kernel_is_locked_down("Direct PCMCIA CIS storage")) + return -EPERM; + s = to_socket(container_of(kobj, struct device, kobj)); if (off) --- linux-aws-4.15.0.orig/drivers/pinctrl/pxa/pinctrl-pxa2xx.c +++ linux-aws-4.15.0/drivers/pinctrl/pxa/pinctrl-pxa2xx.c @@ -436,3 +436,7 @@ return 0; } EXPORT_SYMBOL_GPL(pxa2xx_pinctrl_exit); + +MODULE_AUTHOR("Robert Jarzmik "); +MODULE_DESCRIPTION("Marvell PXA2xx pinctrl driver"); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/platform/x86/asus-wmi.c +++ linux-aws-4.15.0/drivers/platform/x86/asus-wmi.c @@ -1968,6 +1968,9 @@ int err; u32 retval = -1; + if (kernel_is_locked_down("Asus WMI")) + return -EPERM; + err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval); if (err < 0) @@ -1984,6 +1987,9 @@ int err; u32 retval = -1; + if (kernel_is_locked_down("Asus WMI")) + return -EPERM; + err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param, &retval); @@ -2008,6 +2014,9 @@ union acpi_object *obj; acpi_status status; + if (kernel_is_locked_down("Asus WMI")) + return -EPERM; + status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID, 0, asus->debug.method_id, &input, &output); --- linux-aws-4.15.0.orig/drivers/platform/x86/intel_ips.c +++ linux-aws-4.15.0/drivers/platform/x86/intel_ips.c @@ -1494,6 +1494,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP ProBook"), }, }, + { + .callback = ips_blacklist_callback, + .ident = "G60JX", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G60JX"), + }, + }, { } /* terminating entry */ }; --- linux-aws-4.15.0.orig/drivers/pnp/isapnp/core.c +++ linux-aws-4.15.0/drivers/pnp/isapnp/core.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include "../base.h" @@ -987,7 +988,7 @@ .disable = isapnp_disable_resources, }; -static int __init isapnp_init(void) +static int __init real_isapnp_init(void) { int cards; struct pnp_card *card; @@ -1081,6 +1082,16 @@ return 0; } +static void __init async_isapnp_init(void *unused, async_cookie_t cookie) +{ + (void)real_isapnp_init(); +} + +static int __init isapnp_init(void) +{ + async_schedule(async_isapnp_init, NULL); + return 0; +} device_initcall(isapnp_init); /* format is: noisapnp */ --- linux-aws-4.15.0.orig/drivers/power/reset/zx-reboot.c +++ linux-aws-4.15.0/drivers/power/reset/zx-reboot.c @@ -82,3 +82,7 @@ }, }; module_platform_driver(zx_reboot_driver); + +MODULE_DESCRIPTION("ZTE SoCs reset driver"); +MODULE_AUTHOR("Jun Nie "); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/drivers/powercap/intel_rapl.c +++ linux-aws-4.15.0/drivers/powercap/intel_rapl.c @@ -1540,7 +1540,7 @@ id = x86_match_cpu(rapl_ids); if (!id) { - pr_err("driver does not support CPU family %d model %d\n", + pr_info("driver does not support CPU family %d model %d\n", boot_cpu_data.x86, boot_cpu_data.x86_model); return -ENODEV; --- linux-aws-4.15.0.orig/drivers/scsi/aacraid/aachba.c +++ linux-aws-4.15.0/drivers/scsi/aacraid/aachba.c @@ -913,8 +913,15 @@ memset(str, ' ', sizeof(*str)); if (sup_adap_info->adapter_type_text[0]) { - char *cp = sup_adap_info->adapter_type_text; int c; + char *cp; + char *cname = kmemdup(sup_adap_info->adapter_type_text, + sizeof(sup_adap_info->adapter_type_text), + GFP_ATOMIC); + if (!cname) + return; + + cp = cname; if ((cp[0] == 'A') && (cp[1] == 'O') && (cp[2] == 'C')) inqstrcpy("SMC", str->vid); else { @@ -923,7 +930,7 @@ ++cp; c = *cp; *cp = '\0'; - inqstrcpy(sup_adap_info->adapter_type_text, str->vid); + inqstrcpy(cname, str->vid); *cp = c; while (*cp && *cp != ' ') ++cp; @@ -937,8 +944,8 @@ cp[sizeof(str->pid)] = '\0'; } inqstrcpy (cp, str->pid); - if (c) - cp[sizeof(str->pid)] = c; + + kfree(cname); } else { struct aac_driver_ident *mp = aac_get_driver_ident(dev->cardtype); --- linux-aws-4.15.0.orig/drivers/scsi/aacraid/commsup.c +++ linux-aws-4.15.0/drivers/scsi/aacraid/commsup.c @@ -1643,14 +1643,7 @@ out: aac->in_reset = 0; scsi_unblock_requests(host); - /* - * Issue bus rescan to catch any configuration that might have - * occurred - */ - if (!retval) { - dev_info(&aac->pdev->dev, "Issuing bus rescan\n"); - scsi_scan_host(host); - } + if (jafo) { spin_lock_irq(host->host_lock); } --- linux-aws-4.15.0.orig/drivers/scsi/eata.c +++ linux-aws-4.15.0/drivers/scsi/eata.c @@ -1552,8 +1552,11 @@ tpnt->proc_name = "eata2x"; - if (strlen(boot_options)) + if (strlen(boot_options)) { + if (kernel_is_locked_down("Command line-specified device addresses, irqs and dma channels")) + return -EPERM; option_setup(boot_options); + } #if defined(MODULE) /* io_port could have been modified when loading as a module */ --- linux-aws-4.15.0.orig/drivers/scsi/libiscsi.c +++ linux-aws-4.15.0/drivers/scsi/libiscsi.c @@ -1696,6 +1696,15 @@ */ switch (session->state) { case ISCSI_STATE_FAILED: + /* + * cmds should fail during shutdown, if the session + * state is bad, allowing completion to happen + */ + if (unlikely(system_state != SYSTEM_RUNNING)) { + reason = FAILURE_SESSION_FAILED; + sc->result = DID_NO_CONNECT << 16; + break; + } case ISCSI_STATE_IN_RECOVERY: reason = FAILURE_SESSION_IN_RECOVERY; sc->result = DID_IMM_RETRY << 16; @@ -1979,6 +1988,19 @@ if (session->state != ISCSI_STATE_LOGGED_IN) { /* + * During shutdown, if session is prematurely disconnected, + * recovery won't happen and there will be hung cmds. Not + * handling cmds would trigger EH, also bad in this case. + * Instead, handle cmd, allow completion to happen and let + * upper layer to deal with the result. + */ + if (unlikely(system_state != SYSTEM_RUNNING)) { + sc->result = DID_NO_CONNECT << 16; + ISCSI_DBG_EH(session, "sc on shutdown, handled\n"); + rc = BLK_EH_HANDLED; + goto done; + } + /* * We are probably in the middle of iscsi recovery so let * that complete and handle the error. */ @@ -2082,7 +2104,7 @@ task->last_timeout = jiffies; spin_unlock(&session->frwd_lock); ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? - "timer reset" : "nh"); + "timer reset" : "shutdown or nh"); return rc; } EXPORT_SYMBOL_GPL(iscsi_eh_cmd_timed_out); --- linux-aws-4.15.0.orig/drivers/scsi/libsas/sas_scsi_host.c +++ linux-aws-4.15.0/drivers/scsi/libsas/sas_scsi_host.c @@ -493,6 +493,9 @@ struct sas_internal *i = to_sas_internal(host->transportt); unsigned long flags; + if (current != host->ehandler) + return FAILED; + if (!i->dft->lldd_abort_task) return FAILED; --- linux-aws-4.15.0.orig/drivers/scsi/storvsc_drv.c +++ linux-aws-4.15.0/drivers/scsi/storvsc_drv.c @@ -1795,6 +1795,12 @@ * from the host. */ host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT); +#if defined(CONFIG_X86_32) + dev_warn(&device->device, "adjusting sg_tablesize 0x%x -> 0x%x", + host->sg_tablesize, MAX_MULTIPAGE_BUFFER_COUNT); + host->sg_tablesize = MAX_MULTIPAGE_BUFFER_COUNT; +#endif + /* * Set the number of HW queues we are supporting. */ @@ -1834,8 +1840,10 @@ fc_host_node_name(host) = stor_device->node_name; fc_host_port_name(host) = stor_device->port_name; stor_device->rport = fc_remote_port_add(host, 0, &ids); - if (!stor_device->rport) + if (!stor_device->rport) { + ret = -ENOMEM; goto err_out4; + } } #endif return 0; --- linux-aws-4.15.0.orig/drivers/spi/spi-imx.c +++ linux-aws-4.15.0/drivers/spi/spi-imx.c @@ -1668,12 +1668,23 @@ { struct spi_master *master = platform_get_drvdata(pdev); struct spi_imx_data *spi_imx = spi_master_get_devdata(master); + int ret; spi_bitbang_stop(&spi_imx->bitbang); + ret = clk_enable(spi_imx->clk_per); + if (ret) + return ret; + + ret = clk_enable(spi_imx->clk_ipg); + if (ret) { + clk_disable(spi_imx->clk_per); + return ret; + } + writel(0, spi_imx->base + MXC_CSPICTRL); - clk_unprepare(spi_imx->clk_ipg); - clk_unprepare(spi_imx->clk_per); + clk_disable_unprepare(spi_imx->clk_ipg); + clk_disable_unprepare(spi_imx->clk_per); spi_imx_sdma_exit(spi_imx); spi_master_put(master); --- linux-aws-4.15.0.orig/drivers/staging/ccree/ssi_cipher.c +++ linux-aws-4.15.0/drivers/staging/ccree/ssi_cipher.c @@ -908,6 +908,7 @@ scatterwalk_map_and_copy(req_ctx->backup_info, req->src, (req->nbytes - ivsize), ivsize, 0); req_ctx->is_giv = false; + req_ctx->backup_info = NULL; return ssi_blkcipher_process(tfm, req_ctx, req->dst, req->src, req->nbytes, req->info, ivsize, (void *)req, DRV_CRYPTO_DIRECTION_DECRYPT); } --- linux-aws-4.15.0.orig/drivers/staging/ccree/ssi_driver.c +++ linux-aws-4.15.0/drivers/staging/ccree/ssi_driver.c @@ -117,7 +117,7 @@ irr &= ~SSI_COMP_IRQ_MASK; complete_request(drvdata); } -#ifdef CC_SUPPORT_FIPS +#ifdef CONFIG_CRYPTO_FIPS /* TEE FIPS interrupt */ if (likely((irr & SSI_GPR0_IRQ_MASK) != 0)) { /* Mask interrupt - will be unmasked in Deferred service handler */ --- linux-aws-4.15.0.orig/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ linux-aws-4.15.0/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -826,14 +826,15 @@ return conn; failed_2: - kiblnd_destroy_conn(conn, true); + kiblnd_destroy_conn(conn); + LIBCFS_FREE(conn, sizeof(*conn)); failed_1: LIBCFS_FREE(init_qp_attr, sizeof(*init_qp_attr)); failed_0: return NULL; } -void kiblnd_destroy_conn(struct kib_conn *conn, bool free_conn) +void kiblnd_destroy_conn(struct kib_conn *conn) { struct rdma_cm_id *cmid = conn->ibc_cmid; struct kib_peer *peer = conn->ibc_peer; @@ -896,8 +897,6 @@ rdma_destroy_id(cmid); atomic_dec(&net->ibn_nconns); } - - LIBCFS_FREE(conn, sizeof(*conn)); } int kiblnd_close_peer_conns_locked(struct kib_peer *peer, int why) --- linux-aws-4.15.0.orig/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h +++ linux-aws-4.15.0/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h @@ -1016,7 +1016,7 @@ struct kib_conn *kiblnd_create_conn(struct kib_peer *peer, struct rdma_cm_id *cmid, int state, int version); -void kiblnd_destroy_conn(struct kib_conn *conn, bool free_conn); +void kiblnd_destroy_conn(struct kib_conn *conn); void kiblnd_close_conn(struct kib_conn *conn, int error); void kiblnd_close_conn_locked(struct kib_conn *conn, int error); --- linux-aws-4.15.0.orig/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ linux-aws-4.15.0/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -3314,11 +3314,13 @@ spin_unlock_irqrestore(lock, flags); dropped_lock = 1; - kiblnd_destroy_conn(conn, !peer); + kiblnd_destroy_conn(conn); spin_lock_irqsave(lock, flags); - if (!peer) + if (!peer) { + kfree(conn); continue; + } conn->ibc_peer = peer; if (peer->ibp_reconnected < KIB_RECONN_HIGH_RACE) --- linux-aws-4.15.0.orig/drivers/staging/signature-inclusion +++ linux-aws-4.15.0/drivers/staging/signature-inclusion @@ -0,0 +1,18 @@ +# +# This file lists the staging drivers that are safe for signing +# and loading in a secure boot environment with signed module enforcement. +# +rtl8192c-common.ko +rtl8192ce.ko +rtl8192cu.ko +rtl8192de.ko +rtl8192ee.ko +rtl8192se.ko +r8188eu.ko +r8192e_pci.ko +r8192u_usb.ko +r8712u.ko +rtllib_crypt_ccmp.ko +rtllib_crypt_tkip.ko +rtllib_crypt_wep.ko +rtllib.ko --- linux-aws-4.15.0.orig/drivers/tty/serial/8250/8250_dw.c +++ linux-aws-4.15.0/drivers/tty/serial/8250/8250_dw.c @@ -252,31 +252,25 @@ struct ktermios *old) { unsigned int baud = tty_termios_baud_rate(termios); - unsigned int target_rate, min_rate, max_rate; struct dw8250_data *d = p->private_data; long rate; - int i, ret; + int ret; if (IS_ERR(d->clk) || !old) goto out; - /* Find a clk rate within +/-1.6% of an integer multiple of baudx16 */ - target_rate = baud * 16; - min_rate = target_rate - (target_rate >> 6); - max_rate = target_rate + (target_rate >> 6); - - for (i = 1; i <= UART_DIV_MAX; i++) { - rate = clk_round_rate(d->clk, i * target_rate); - if (rate >= i * min_rate && rate <= i * max_rate) - break; - } - if (i <= UART_DIV_MAX) { - clk_disable_unprepare(d->clk); + clk_disable_unprepare(d->clk); + rate = clk_round_rate(d->clk, baud * 16); + if (rate < 0) + ret = rate; + else if (rate == 0) + ret = -ENOENT; + else ret = clk_set_rate(d->clk, rate); - clk_prepare_enable(d->clk); - if (!ret) - p->uartclk = rate; - } + clk_prepare_enable(d->clk); + + if (!ret) + p->uartclk = rate; out: p->status &= ~UPSTAT_AUTOCTS; --- linux-aws-4.15.0.orig/drivers/tty/serial/8250/8250_of.c +++ linux-aws-4.15.0/drivers/tty/serial/8250/8250_of.c @@ -136,8 +136,11 @@ } info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL); - if (IS_ERR(info->rst)) + if (IS_ERR(info->rst)) { + ret = PTR_ERR(info->rst); goto err_dispose; + } + ret = reset_control_deassert(info->rst); if (ret) goto err_dispose; --- linux-aws-4.15.0.orig/drivers/tty/serial/8250/8250_uniphier.c +++ linux-aws-4.15.0/drivers/tty/serial/8250/8250_uniphier.c @@ -250,12 +250,13 @@ up.dl_read = uniphier_serial_dl_read; up.dl_write = uniphier_serial_dl_write; - priv->line = serial8250_register_8250_port(&up); - if (priv->line < 0) { + ret = serial8250_register_8250_port(&up); + if (ret < 0) { dev_err(dev, "failed to register 8250 port\n"); clk_disable_unprepare(priv->clk); return ret; } + priv->line = ret; platform_set_drvdata(pdev, priv); --- linux-aws-4.15.0.orig/drivers/tty/serial/imx.c +++ linux-aws-4.15.0/drivers/tty/serial/imx.c @@ -2238,12 +2238,14 @@ val &= ~UCR3_AWAKEN; writel(val, sport->port.membase + UCR3); - val = readl(sport->port.membase + UCR1); - if (on) - val |= UCR1_RTSDEN; - else - val &= ~UCR1_RTSDEN; - writel(val, sport->port.membase + UCR1); + if (sport->have_rtscts) { + val = readl(sport->port.membase + UCR1); + if (on) + val |= UCR1_RTSDEN; + else + val &= ~UCR1_RTSDEN; + writel(val, sport->port.membase + UCR1); + } } static int imx_serial_port_suspend_noirq(struct device *dev) --- linux-aws-4.15.0.orig/drivers/tty/serial/serial_core.c +++ linux-aws-4.15.0/drivers/tty/serial/serial_core.c @@ -829,6 +829,12 @@ new_flags = (__force upf_t)new_info->flags; old_custom_divisor = uport->custom_divisor; + if ((change_port || change_irq) && + kernel_is_locked_down("Using TIOCSSERIAL to change device addresses, irqs and dma channels")) { + retval = -EPERM; + goto exit; + } + if (!capable(CAP_SYS_ADMIN)) { retval = -EPERM; if (change_irq || change_port || @@ -974,6 +980,8 @@ } } else { retval = uart_startup(tty, state, 1); + if (retval == 0) + tty_port_set_initialized(port, true); if (retval > 0) retval = 0; } --- linux-aws-4.15.0.orig/drivers/tty/sysrq.c +++ linux-aws-4.15.0/drivers/tty/sysrq.c @@ -487,6 +487,7 @@ /* x: May be registered on mips for TLB dump */ /* x: May be registered on ppc/powerpc for xmon */ /* x: May be registered on sparc64 for global PMU dump */ + /* x: May be registered on x86_64 for disabling secure boot */ NULL, /* x */ /* y: May be registered on sparc64 for global register dump */ NULL, /* y */ @@ -530,7 +531,7 @@ sysrq_key_table[i] = op_p; } -void __handle_sysrq(int key, bool check_mask) +void __handle_sysrq(int key, unsigned int from) { struct sysrq_key_op *op_p; int orig_log_level; @@ -550,11 +551,15 @@ op_p = __sysrq_get_key_op(key); if (op_p) { + /* Ban synthetic events from some sysrq functionality */ + if ((from == SYSRQ_FROM_PROC || from == SYSRQ_FROM_SYNTHETIC) && + op_p->enable_mask & SYSRQ_DISABLE_USERSPACE) + printk("This sysrq operation is disabled from userspace.\n"); /* * Should we check for enabled operations (/proc/sysrq-trigger * should not) and is the invoked operation enabled? */ - if (!check_mask || sysrq_on_mask(op_p->enable_mask)) { + if (from == SYSRQ_FROM_KERNEL || sysrq_on_mask(op_p->enable_mask)) { pr_cont("%s\n", op_p->action_msg); console_loglevel = orig_log_level; op_p->handler(key); @@ -586,7 +591,7 @@ void handle_sysrq(int key) { if (sysrq_on()) - __handle_sysrq(key, true); + __handle_sysrq(key, SYSRQ_FROM_KERNEL); } EXPORT_SYMBOL(handle_sysrq); @@ -667,7 +672,7 @@ static void sysrq_handle_reset_request(struct sysrq_state *state) { if (state->reset_requested) - __handle_sysrq(sysrq_xlate[KEY_B], false); + __handle_sysrq(sysrq_xlate[KEY_B], SYSRQ_FROM_KERNEL); if (sysrq_reset_downtime_ms) mod_timer(&state->keyreset_timer, @@ -818,8 +823,10 @@ default: if (sysrq->active && value && value != 2) { + int from = sysrq->handle.dev->flags & INPUTDEV_FLAGS_SYNTHETIC ? + SYSRQ_FROM_SYNTHETIC : 0; sysrq->need_reinject = false; - __handle_sysrq(sysrq_xlate[code], true); + __handle_sysrq(sysrq_xlate[code], from); } break; } @@ -1102,7 +1109,7 @@ if (get_user(c, buf)) return -EFAULT; - __handle_sysrq(c, false); + __handle_sysrq(c, SYSRQ_FROM_PROC); } return count; --- linux-aws-4.15.0.orig/drivers/tty/tty_io.c +++ linux-aws-4.15.0/drivers/tty/tty_io.c @@ -1323,6 +1323,9 @@ "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n", __func__, tty->driver->name); + retval = tty_ldisc_lock(tty, 5 * HZ); + if (retval) + goto err_release_lock; tty->port->itty = tty; /* @@ -1333,6 +1336,7 @@ retval = tty_ldisc_setup(tty, tty->link); if (retval) goto err_release_tty; + tty_ldisc_unlock(tty); /* Return the tty locked so that it cannot vanish under the caller */ return tty; @@ -1345,9 +1349,11 @@ /* call the tty release_tty routine to clean out this slot */ err_release_tty: - tty_unlock(tty); + tty_ldisc_unlock(tty); tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n", retval, idx); +err_release_lock: + tty_unlock(tty); release_tty(tty, idx); return ERR_PTR(retval); } --- linux-aws-4.15.0.orig/drivers/tty/tty_ldisc.c +++ linux-aws-4.15.0/drivers/tty/tty_ldisc.c @@ -337,7 +337,7 @@ ldsem_up_write(&tty->ldisc_sem); } -static int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout) +int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout) { int ret; @@ -348,7 +348,7 @@ return 0; } -static void tty_ldisc_unlock(struct tty_struct *tty) +void tty_ldisc_unlock(struct tty_struct *tty) { clear_bit(TTY_LDISC_HALTED, &tty->flags); __tty_ldisc_unlock(tty); --- linux-aws-4.15.0.orig/drivers/tty/vt/vt.c +++ linux-aws-4.15.0/drivers/tty/vt/vt.c @@ -104,6 +104,7 @@ #include #include #include +#include #define MAX_NR_CON_DRIVER 16 @@ -148,7 +149,7 @@ static int con_open(struct tty_struct *, struct file *); static void vc_init(struct vc_data *vc, unsigned int rows, - unsigned int cols, int do_clear); + unsigned int cols, int do_clear, int mode); static void gotoxy(struct vc_data *vc, int new_x, int new_y); static void save_cur(struct vc_data *vc); static void reset_terminal(struct vc_data *vc, int do_clear); @@ -172,6 +173,9 @@ static int cur_default = CUR_DEFAULT; module_param(cur_default, int, S_IRUGO | S_IWUSR); +int vt_handoff = 0; +module_param_named(handoff, vt_handoff, int, S_IRUGO | S_IWUSR); + /* * ignore_poke: don't unblank the screen when things are typed. This is * mainly for the privacy of braille terminal users. @@ -677,6 +681,13 @@ } if (tty0dev) sysfs_notify(&tty0dev->kobj, NULL, "active"); + /* + * If we are switching away from a transparent VT the contents + * will be lost, convert it into a blank text console then + * it will be repainted blank if we ever switch back. + */ + if (old_vc->vc_mode == KD_TRANSPARENT) + old_vc->vc_mode = KD_TEXT; } else { hide_cursor(vc); redraw = 1; @@ -793,7 +804,7 @@ if (global_cursor_default == -1) global_cursor_default = 1; - vc_init(vc, vc->vc_rows, vc->vc_cols, 1); + vc_init(vc, vc->vc_rows, vc->vc_cols, 1, KD_TEXT); vcs_make_sysfs(currcons); atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); @@ -2934,7 +2945,7 @@ module_param_named(underline, default_underline_color, int, S_IRUGO | S_IWUSR); static void vc_init(struct vc_data *vc, unsigned int rows, - unsigned int cols, int do_clear) + unsigned int cols, int do_clear, int mode) { int j, k ; @@ -2945,7 +2956,7 @@ set_origin(vc); vc->vc_pos = vc->vc_origin; - reset_vc(vc); + reset_vc(vc, mode); for (j=k=0; j<16; j++) { vc->vc_palette[k++] = default_red[j] ; vc->vc_palette[k++] = default_grn[j] ; @@ -3002,16 +3013,32 @@ mod_timer(&console_timer, jiffies + (blankinterval * HZ)); } + if (vt_handoff > 0 && vt_handoff <= MAX_NR_CONSOLES) { + currcons = vt_handoff - 1; + vc_cons[currcons].d = vc = kzalloc(sizeof(struct vc_data), GFP_NOWAIT); + INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK); + tty_port_init(&vc->port); + visual_init(vc, currcons, 1); + vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_NOWAIT); + vc_init(vc, vc->vc_rows, vc->vc_cols, 0, KD_TRANSPARENT); + } for (currcons = 0; currcons < MIN_NR_CONSOLES; currcons++) { + if (currcons == vt_handoff - 1) + continue; vc_cons[currcons].d = vc = kzalloc(sizeof(struct vc_data), GFP_NOWAIT); INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK); tty_port_init(&vc->port); visual_init(vc, currcons, 1); vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_NOWAIT); vc_init(vc, vc->vc_rows, vc->vc_cols, - currcons || !vc->vc_sw->con_save_screen); + currcons || !vc->vc_sw->con_save_screen, KD_TEXT); } currcons = fg_console = 0; + if (vt_handoff > 0) { + printk(KERN_INFO "vt handoff: transparent VT on vt#%d\n", + vt_handoff); + currcons = fg_console = vt_handoff - 1; + } master_display_fg = vc = vc_cons[currcons].d; set_origin(vc); save_screen(vc); --- linux-aws-4.15.0.orig/drivers/tty/vt/vt_ioctl.c +++ linux-aws-4.15.0/drivers/tty/vt/vt_ioctl.c @@ -1023,9 +1023,9 @@ return ret; } -void reset_vc(struct vc_data *vc) +void reset_vc(struct vc_data *vc, int mode) { - vc->vc_mode = KD_TEXT; + vc->vc_mode = mode; vt_reset_unicode(vc->vc_num); vc->vt_mode.mode = VT_AUTO; vc->vt_mode.waitv = 0; @@ -1057,7 +1057,7 @@ */ if (tty) __do_SAK(tty); - reset_vc(vc); + reset_vc(vc, KD_TEXT); } console_unlock(); } @@ -1310,7 +1310,7 @@ * this outside of VT_PROCESS but there is no single process * to account for and tracking tty count may be undesirable. */ - reset_vc(vc); + reset_vc(vc, KD_TEXT); if (old_vc_mode != vc->vc_mode) { if (vc->vc_mode == KD_TEXT) @@ -1382,7 +1382,7 @@ * this outside of VT_PROCESS but there is no single process * to account for and tracking tty count may be undesirable. */ - reset_vc(vc); + reset_vc(vc, KD_TEXT); /* * Fall through to normal (VT_AUTO) handling of the switch... --- linux-aws-4.15.0.orig/drivers/usb/class/cdc-acm.c +++ linux-aws-4.15.0/drivers/usb/class/cdc-acm.c @@ -425,7 +425,7 @@ res = usb_submit_urb(acm->read_urbs[index], mem_flags); if (res) { - if (res != -EPERM) { + if (res != -EPERM && res != -ENODEV) { dev_err(&acm->data->dev, "urb %d failed submission with %d\n", index, res); @@ -1752,6 +1752,9 @@ { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */ .driver_info = SINGLE_RX_URB, /* firmware bug */ }, + { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */ + .driver_info = SINGLE_RX_URB, + }, { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ }, @@ -1920,6 +1923,20 @@ .driver_info = IGNORE_DEVICE, }, + /* Exclude Exar USB serial ports */ + { USB_DEVICE(0x04e2, 0x1400), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1401), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1402), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1403), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1410), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1411), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1412), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1414), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1420), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1421), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1422), .driver_info = IGNORE_DEVICE, }, + { USB_DEVICE(0x04e2, 0x1424), .driver_info = IGNORE_DEVICE, }, + /* control interfaces without any protocol set */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, USB_CDC_PROTO_NONE) }, --- linux-aws-4.15.0.orig/drivers/usb/gadget/function/f_fs.c +++ linux-aws-4.15.0/drivers/usb/gadget/function/f_fs.c @@ -3700,7 +3700,8 @@ ci = opts->func_inst.group.cg_item.ci_parent->ci_parent; ffs_dev_unlock(); - unregister_gadget_item(ci); + if (test_bit(FFS_FL_BOUND, &ffs->flags)) + unregister_gadget_item(ci); return; done: ffs_dev_unlock(); --- linux-aws-4.15.0.orig/drivers/usb/gadget/udc/core.c +++ linux-aws-4.15.0/drivers/usb/gadget/udc/core.c @@ -912,7 +912,7 @@ return 0; /* "high bandwidth" works only at high speed */ - if (!gadget_is_dualspeed(gadget) && usb_endpoint_maxp(desc) & (3<<11)) + if (!gadget_is_dualspeed(gadget) && usb_endpoint_maxp_mult(desc) > 1) return 0; switch (type) { --- linux-aws-4.15.0.orig/drivers/usb/serial/Kconfig +++ linux-aws-4.15.0/drivers/usb/serial/Kconfig @@ -63,6 +63,7 @@ - Google USB serial devices - HP4x calculators - a number of Motorola phones + - Motorola Tetra devices - Novatel Wireless GPS receivers - Siemens USB/MPI adapter. - ViVOtech ViVOpay USB device. --- linux-aws-4.15.0.orig/drivers/usb/serial/io_edgeport.c +++ linux-aws-4.15.0/drivers/usb/serial/io_edgeport.c @@ -2282,7 +2282,6 @@ /* something went wrong */ dev_err(dev, "%s - usb_submit_urb(write command) failed, status = %d\n", __func__, status); - usb_kill_urb(urb); usb_free_urb(urb); atomic_dec(&CmdUrbs); return status; --- linux-aws-4.15.0.orig/drivers/usb/serial/option.c +++ linux-aws-4.15.0/drivers/usb/serial/option.c @@ -380,6 +380,9 @@ #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603 #define FOUR_G_SYSTEMS_PRODUCT_W100 0x9b01 +/* Fujisoft products */ +#define FUJISOFT_PRODUCT_FS040U 0x9b02 + /* iBall 3.5G connect wireless modem */ #define IBALL_3_5G_CONNECT 0x9605 @@ -1894,6 +1897,8 @@ { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W100), .driver_info = (kernel_ulong_t)&four_g_w100_blacklist }, + {USB_DEVICE(LONGCHEER_VENDOR_ID, FUJISOFT_PRODUCT_FS040U), + .driver_info = (kernel_ulong_t)&net_intf3_blacklist}, { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, SPEEDUP_PRODUCT_SU9800, 0xff) }, { USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, 0x9801, 0xff), .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, --- linux-aws-4.15.0.orig/drivers/usb/serial/pl2303.c +++ linux-aws-4.15.0/drivers/usb/serial/pl2303.c @@ -38,6 +38,7 @@ { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_CHILITAG) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, --- linux-aws-4.15.0.orig/drivers/usb/serial/pl2303.h +++ linux-aws-4.15.0/drivers/usb/serial/pl2303.h @@ -12,6 +12,7 @@ #define PL2303_PRODUCT_ID_DCU11 0x1234 #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 +#define PL2303_PRODUCT_ID_CHILITAG 0xaaa8 #define PL2303_PRODUCT_ID_ALDIGA 0x0611 #define PL2303_PRODUCT_ID_MMX 0x0612 #define PL2303_PRODUCT_ID_GPRS 0x0609 --- linux-aws-4.15.0.orig/drivers/usb/serial/usb-serial-simple.c +++ linux-aws-4.15.0/drivers/usb/serial/usb-serial-simple.c @@ -77,6 +77,11 @@ { USB_DEVICE(0x22b8, 0x2c64) } /* Motorola V950 phone */ DEVICE(moto_modem, MOTO_IDS); +/* Motorola Tetra driver */ +#define MOTOROLA_TETRA_IDS() \ + { USB_DEVICE(0x0cad, 0x9011) } /* Motorola Solutions TETRA PEI */ +DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS); + /* Novatel Wireless GPS driver */ #define NOVATEL_IDS() \ { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */ @@ -107,6 +112,7 @@ &google_device, &vivopay_device, &moto_modem_device, + &motorola_tetra_device, &novatel_gps_device, &hp4x_device, &suunto_device, @@ -122,6 +128,7 @@ GOOGLE_IDS(), VIVOPAY_IDS(), MOTO_IDS(), + MOTOROLA_TETRA_IDS(), NOVATEL_IDS(), HP4X_IDS(), SUUNTO_IDS(), --- linux-aws-4.15.0.orig/drivers/usb/storage/uas.c +++ linux-aws-4.15.0/drivers/usb/storage/uas.c @@ -1076,20 +1076,19 @@ return 0; err = uas_configure_endpoints(devinfo); - if (err) { + if (err && err != ENODEV) shost_printk(KERN_ERR, shost, "%s: alloc streams error %d after reset", __func__, err); - return 1; - } + /* we must unblock the host in every case lest we deadlock */ spin_lock_irqsave(shost->host_lock, flags); scsi_report_bus_reset(shost, 0); spin_unlock_irqrestore(shost->host_lock, flags); scsi_unblock_requests(shost); - return 0; + return err ? 1 : 0; } static int uas_suspend(struct usb_interface *intf, pm_message_t message) --- linux-aws-4.15.0.orig/drivers/usb/storage/unusual_devs.h +++ linux-aws-4.15.0/drivers/usb/storage/unusual_devs.h @@ -1325,6 +1325,13 @@ USB_SC_DEVICE, USB_PR_DEVICE, option_ms_init, 0), +/* Reported by Timo Aaltonen */ +UNUSUAL_DEV( 0x0af0, 0x7011, 0x0000, 0x9999, + "Option", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, option_ms_init, + 0 ), + /* * Reported by F. Aben * This device (wrongly) has a vendor-specific device descriptor. --- linux-aws-4.15.0.orig/drivers/vhost/net.c +++ linux-aws-4.15.0/drivers/vhost/net.c @@ -1208,6 +1208,7 @@ } vhost_net_stop(n, &tx_sock, &rx_sock); vhost_net_flush(n); + vhost_dev_stop(&n->dev); vhost_dev_reset_owner(&n->dev, umem); vhost_net_vq_reset(n); done: --- linux-aws-4.15.0.orig/dropped.txt +++ linux-aws-4.15.0/dropped.txt @@ -0,0 +1,54 @@ +This is the list of patches/features which have been temporarily +reverted or disabled for BB: + +AUFS +LSM stacking patches + +UBUNTU: SAUCE: (no-up) nbd: Change default partitions per device to 15 +UBUNTU: SAUCE: (no-up) firmware: Update bnx2x to current firmware version 7.2.51 +UBUNTU: SAUCE: (no-up) Remove redundant cis firmware +UBUNTU: SAUCE: (no-up) Remove redundant ttusb-budget firmware +UBUNTU: SAUCE: (no-up) Remove redundant ositech/Xilinx7OD firmware +UBUNTU: SAUCE: (no-up) Remove redundant yamaha/ds1 firmware +UBUNTU: SAUCE: (no-up) Remove redundant keyspan_pda firmware +UBUNTU: SAUCE: (no-up) firmware: Remove ess files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove kaweth files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove edgeport files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove ti_usb_3410_5052 duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove adaptec files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove advansys files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove ambassador files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove av7110 files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove cpia2 files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) firmware: Remove obsolete Myricom firmware +UBUNTU: SAUCE: (no-up) firmware: Upgrade bnx2 to current versions +UBUNTU: SAUCE: (no-up) Remove yam files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove tehuti files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove matrox files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove cxgb3 files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove r128 files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove acenic files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove keyspan files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove sun files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Remove radeon files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Update bnx2x firmware to 7.8.2.0 +UBUNTU: SAUCE: (no-up) Remove dsp56k files used only by m68k +UBUNTU: SAUCE: (no-up) Remove vicam files duplicated in linux-firmware +UBUNTU: SAUCE: (no-up) Update bnx2x firmware to 7.8.17.0 +UBUNTU: SAUCE: (no-up) Update bnx2x firmware to 7.10.51.0 +UBUNTU: SAUCE: (no-up) Update bnx2x firmware to 7.12.30.0 +UBUNTU: SAUCE: drop obsolete bnx2x firmware +UBUNTU: firmware: Update bnx2x to 7.13.1.0 +UBUNTU: SAUCE: (no-up) HID: Add quirk for Lenovo Yoga 910 with ITE Chips +UBUNTU: SAUCE: igb: add support for using Broadcom 54616 as PHY +UBUNTU: SAUCE: LIBIO: Introduce a generic PIO mapping method +UBUNTU: SAUCE: OF: Add missing I/O range exception for indirect-IO devices +UBUNTU: SAUCE: LPC: Support the device-tree LPC host on Hip06/Hip07 +UBUNTU: SAUCE: LPC: Add the ACPI LPC support +UBUNTU: SAUCE: PCI: Apply the new generic I/O management on PCI IO hosts +UBUNTU: SAUCE: PCI: Restore codepath for !CONFIG_LIBIO +UBUNTU: SAUCE: PCI: Support hibmc VGA cards behind a misbehaving HiSilicon bridge +UBUNTU: SAUCE: Clear Linux: smpboot: reuse timer calibration +UBUNTU: SAUCE: (no-up) disable -pie when gcc has it enabled by default +UBUNTU: SAUCE: bcache: Fix bcache device names +UBUNTU: [Packaging] Include arch/arm64/kernel/ftrace-mod.o in headers package --- linux-aws-4.15.0.orig/firmware/bnx2x/bnx2x-e1-7.8.2.0.fw.ihex +++ linux-aws-4.15.0/firmware/bnx2x/bnx2x-e1-7.8.2.0.fw.ihex @@ -0,0 +1,10213 @@ +:100000000000175800000068000005D8000017C85D +:10001000000031CC00001DA80000006C00004F78EB +:100020000000821C00004FE80000009C0000D20885 +:10003000000094480000D2A800000084000166F887 +:1000400000004274000167800000008C0001A9F8E4 +:100050000000C1C40001AA88000011B800026C5061 +:100060000000000400027E10020600DC0000000117 +:100070000306100002000000010600D80000000086 +:100080000306020000030200020600DC000000007C +:1000900002060068000000B80206007800000114A3 +:1000A000010600B800000000010600C800000000C2 +:1000B0000206006C000000B80206007C000001147B +:1000C000010600BC00000000010600CC000000009A +:1000D000020D004400000032030D004C0004020336 +:1000E000040D005C00000004030D008C00110207E9 +:1000F000020D015C00000001030D01640002021802 +:10010000020D020400000001030D020C0003021A9C +:10011000030D02200002021D040D028000000012E7 +:10012000030D03000018021F040D03600000000C03 +:10013000040D400000000A00030D0004000F023708 +:10014000020D01140000000D020D01180000002D29 +:100150000310100000030246021010100000026499 +:10016000071011000010024908101140000000089B +:100170000710116000100259081011A000000018AB +:1001800007101800020002690210101000000000A1 +:1001900004104C0000000100021040280000001074 +:1001A0000210404400003FFF0210405800280000A9 +:1001B000021040840084924A02104058000000005F +:1001C000030C200800030469030C201C0004046CC9 +:1001D000030C203800110470040C207C0000004F38 +:1001E000030C21B800110481040C21FC0000000F55 +:1001F000030C223800040492010C22480000000085 +:10020000010C224C00000000010C225000000000F4 +:10021000010C225400000000010C225800000000D4 +:10022000010C225C00000000010C226000000000B4 +:10023000010C226400000000010C22680000000094 +:10024000010C226C00000000010C22700000000074 +:10025000010C227400000000010C22780000000054 +:10026000010C227C00000000020C24BC00000001F4 +:100270000A00000100000001020C2000000003E859 +:100280000A00000100000002020C20000000000A29 +:100290000A00000100000004020C20000000000120 +:1002A000052004000084000006200780001004964A +:1002B000042200000000160004228000000000401C +:1002C00004223BD000000008042248000000000681 +:1002D0000322481800040498042248280000000C57 +:1002E000032248580004049C042248680000000CC3 +:1002F00003224898000404A0042248A80000000C2F +:10030000032248D8000404A4042248E80000000C9A +:1003100003224918000404A8042249280000000C04 +:1003200003224958000404AC042249680000000C70 +:1003300003224998000404B0042249A80000000CDC +:10034000032249D8000404B4042249E80000000C48 +:1003500003224A18000404B804224A280000000CB2 +:1003600003224A58000404BC04224A680000000C1E +:1003700003224A98000404C004224AA80000000C8A +:1003800003224AD8000404C404224AE80000000CF6 +:1003900003224B18000404C804224B280000000C60 +:1003A00003224B58000404CC04224B680000000CCC +:1003B00003224B98000404D004224BA80000000C38 +:1003C00003224BD8000404D404224BE80000000CA4 +:1003D00003224C18000404D804224C280000000C0E +:1003E00003224C58000404DC04224C680000000C7A +:1003F00003224C98000404E004224CA80000000CE6 +:1004000003224CD8000404E404224CE80000000C51 +:1004100003224D18000404E804224D280000000CBB +:1004200003224D58000404EC04224D680000000C27 +:1004300003224D98000404F004224DA80000000C93 +:1004400003224DD8000404F404224DE80000000CFF +:1004500003224E18000404F804224E280000000C69 +:1004600003224E58000404FC04224E680000000CD5 +:1004700003224E980004050004224EA80000000C40 +:1004800003224ED80004050404224EE80000000CAC +:1004900003224F180004050804224F280000000C16 +:1004A00003224F580004050C04224F680000000C82 +:1004B00003224F980004051004224FA80000000CEE +:1004C00003224FD80004051404224FE80000000660 +:1004D0000322519800040518022380000000001038 +:1004E00002238040000000120223808000000030C0 +:1004F000022380C00000000E022383800007A12099 +:10050000022383C0000001F402238BC0000000011D +:100510000A00000200000001022383000007A1205E +:1005200002238340000001F40A00000200000002E0 +:10053000022383000000138802238340000000058B +:100540000A000002000000040223830000000138BA +:10055000022383400000000005240000330E000049 +:10056000052480000F630CC406249CE06ACA051CA5 +:100570000120000000000000012000040000000035 +:1005800001200008000000000120000C0000000015 +:1005900001200010000000000120001400000000F5 +:1005A00003200020001A051E032000A400020538C5 +:1005B000022002240000000002200234000000009B +:1005C0000220024C00000000022002E40000FFFFB5 +:1005D000082020000000080004221400000000028F +:1005E00004221490000000300422390000000010A2 +:1005F0000422510800000002042251A80000000655 +:1006000004221408000000020422155000000030EB +:1006100004223940000000100422511000000002A2 +:10062000042251C00000000604102400000000E075 +:100630000310201C0002053A021020C00000000137 +:10064000031020040002053C02170008000000020D +:100650000217002C00000003031700380002053EBB +:100660000317004400060540031700600005054617 +:10067000031700780002054B021700040000000F6A +:100680000410806800000004021080000000108048 +:1006900004108040000000020410802800000002C6 +:1006A0000210803800000010031080400002054D49 +:1006B00002108050000000000210810000000000C5 +:1006C000041081200000000202108008000002B522 +:1006D0000210801000000000021081080001FFFFDE +:1006E000041082000000004A041081400000000253 +:1006F0000210800000001A80041090000000002406 +:10070000041091200000004A041093700000004A79 +:10071000041095C00000004A021080040000108000 +:100720000410804800000002041080300000000225 +:100730000210803C00000010031080480002054FAA +:10074000021080540000000002108104000000002C +:1007500004108128000000020210800C000002B585 +:1007600002108014000000000210810C0001FFFF45 +:10077000041084000000004A0410814800000002B8 +:100780000210800400001A800410909000000024E1 +:10079000041092480000004A041094980000004A97 +:1007A000041096E80000004A0200A468000AFFDC7A +:1007B0000200A280000000010300A2940004055181 +:1007C0000200A4FCFF000000030100B40002055574 +:1007D000020100DC000000010301010000020557D6 +:1007E0000201007C003000000201008400000028AB +:1007F0000201008C00000000020101300000000432 +:10080000040101380000001102010328000000006B +:100810000201055400000030020100C40000000184 +:10082000020100CC00000001020100F800000001FC +:10083000020100F000000001020100800030000011 +:100840000201008800000028020100900000000062 +:1008500002010134000000040401017C00000011C9 +:100860000201032C000000000201056400000030BA +:10087000020100C800000001020100D000000001D8 +:10088000020100FC00000001020100F40000000170 +:1008900002140000000000010214000C000000011E +:1008A00003140040000205590214000C000000006F +:1008B00002140000000000000214006C00000000A0 +:1008C00002140004000000010214003000000001C6 +:1008D00002140004000000000214005C000000008C +:1008E000021400080000000102140034000000019E +:1008F0000214000800000000021400600000000064 +:10090000030400040012055B030400540003056D9A +:100910000204007000000004030400780004057065 +:1009200004040088000000050304009C0003057413 +:10093000040400A800000004030400B800050577C3 +:10094000040400CC00000004030400DC0004057C67 +:10095000040400EC00000004010401240000000075 +:1009600001040128000000000104012C0000000027 +:100970000104013000000000020401340000000FF7 +:1009800003120490002205800212052000000002DC +:1009900002120388000000640212039000000008A5 +:1009A0000312039C000305A2021203BC0000000412 +:1009B000021203C400000004021203D00000000071 +:1009C000021203DC000000000212036C00000001B0 +:1009D000021203680000003F031201BC003C05A5A1 +:1009E000031202B0000205E103120324000205E332 +:1009F000021201B00000000107103800000505E5F3 +:100A000007103C00000505EA07103C20000505EF33 +:100A100003168030000805F402168054000000021E +:100A200003168060000505FC0416807400000007B2 +:100A300003168090000206010316809C0005060341 +:100A4000041680B000000007031680CC00080608DA +:100A5000021680F000000007041680F40000000C6D +:100A60000316812400040610041681340000000CD3 +:100A700003168164003B0614041682500000000433 +:100A8000031682600002064F041682680000000808 +:100A90000316828800080651041682A80000000A86 +:100AA00002168804000000040316880C0010065982 +:100AB000021680EC000000FF03040408001406691D +:100AC000030500440002067D030500500004067F74 +:100AD0000405006000000004030500900013068375 +:100AE00002050114000000010305011C0002069626 +:100AF00002050204000000010305020C0002069832 +:100B00000305021C0003069A040502400000000AC7 +:100B1000030502800020069D0405400000000D0032 +:100B200003050004001006BD020500E00000000EF1 +:100B3000020500E40000002E04164024000000021C +:100B400003164030000306CD02164044000000208A +:100B5000021640700000001C02164208000000014E +:100B6000021642100000000102164220000000019F +:100B70000216422800000001021642300000000167 +:100B80000216423800000001021642600000000117 +:100B90000A000001000000010216401C0003D09072 +:100BA0000A000001000000020216401C000009C4F7 +:100BB0000A000001000000040216401C0000009C16 +:100BC0000216400000000001021640D8000000019B +:100BD00003164008000306D0021642400000000041 +:100BE0000216424800000000081642700000000291 +:100BF0000216425000000000021642580000000099 +:100C0000081642800000000203042008000406D3F6 +:100C10000304201C000406D70404203800000080D0 +:100C200003042238000406DB01042248000000000F +:100C30000104224C000000000104225000000000CA +:100C400001042254000000000104225800000000AA +:100C50000104225C0000000001042260000000008A +:100C6000010422640000000001042268000000006A +:100C70000104226C0000000001042270000000004A +:100C8000010422740000000001042278000000002A +:100C90000104227C00000000020424BC00000001CA +:100CA0000A0000010000000102042000000003E827 +:100CB0000A00000100000002020420000000000AF7 +:100CC0000A000001000000040204200000000001EE +:100CD000051804000069000006180760001406DF0C +:100CE000041A000000001600041A800000000040F2 +:100CF000031A08B0000206E1031A19C8000206E34D +:100D0000031A2FC0000406E5041A2FD000000006C5 +:100D1000031A2FE8000206E9031A300003F906EB74 +:100D2000041A3FE400000007031A487000040AE4B4 +:100D3000021B800000000034021B804000000018ED +:100D4000021B80800000000C021B80C000000020FD +:100D5000021B83800007A120021B83C0000001F456 +:100D6000021B8BC0000000010A000002000000010D +:100D7000021B83000007A120021B8340000001F436 +:100D80000A00000200000002021B8300000013881A +:100D9000021B8340000000050A000002000000045E +:100DA000021B830000000138021B8340000000008A +:100DB000051C00002CFD0000051C800034200B40A9 +:100DC000051D000020FC1848061D4D10565E0AE85F +:100DD00001180000000000000118000400000000DD +:100DE00001180008000000000118000C00000000BD +:100DF000011800100000000001180014000000009D +:100E000003180020001A0AEA031800A400020B04C9 +:100E10000218022400000000021802340000000042 +:100E20000218024C00000000021802E4000000FF5B +:100E30000818100000000400041A08000000000256 +:100E4000041A082000000012041A09C0000000481B +:100E5000041A250000000010041A2580000000126A +:100E6000041A261000000012031A2FB000020B060D +:100E7000041A400000000006041A4030000000027E +:100E8000041A482000000002031A4C5000020B080C +:100E9000041A081000000002041A0868000000127A +:100EA000041A0AE000000048041A2540000000105F +:100EB000041A25C800000012041A26580000001267 +:100EC000031A2FB800020B0A041A4018000000068B +:100ED000041A403800000002041A482800000002EA +:100EE000031A4C5800020B0C020E004C000000329A +:100EF000030E005400040B0E040E006400000004F6 +:100F0000030E009400130B12020E014400000001B6 +:100F1000030E014C00020B25020E0204000000012A +:100F2000030E020C00020B27030E021C00040B2907 +:100F3000030E0280001B0B2D040E02EC00000017B4 +:100F4000040E200000000800030E000400110B48EE +:100F5000020E01100000000F020E01140000002F0D +:100F6000020C100000000028030C400800040B597C +:100F7000030C401C00040B5D030C403800020B61A5 +:100F8000040C40400000005E020C41B8000000016B +:100F9000040C41BC0000001F030C423800040B632A +:100FA000010C424800000000010C424C000000000F +:100FB000010C425000000000010C425400000000EF +:100FC000010C425800000000010C425C00000000CF +:100FD000010C426000000000010C426400000000AF +:100FE000010C426800000000010C426C000000008F +:100FF000010C427000000000010C4274000000006F +:10100000010C427800000000010C427C000000004E +:10101000010C428000000000020C44C000000001EE +:101020000A00000100000001020C4000000003E87B +:101030000A00000100000002020C40000000000A4B +:101040000A00000100000004020C40000000000142 +:1010500005300400009B00000630076800130B6792 +:10106000043200000000160004328000000000403E +:101070000332183000020B6903322E7000040B6B30 +:101080000432508000000008033250A000020B6FB1 +:10109000023380000000001A023380400000004E3E +:1010A0000233808000000010023380C00000002066 +:1010B000023383800007A120023383C0000001F4C3 +:1010C00002338BC0000000010A0000020000000192 +:1010D000023383000007A12002338340000001F4A3 +:1010E0000A0000020000000202338300000013889F +:1010F00002338340000000050A00000200000004E3 +:1011000002338300000001380233834000000000F6 +:101110000534000036F800000534800031A90DBE0A +:10112000053500002BA31A290635620053C00B7148 +:101130000130000000000000013000040000000049 +:1011400001300008000000000130000C0000000029 +:101150000130001000000000013000140000000009 +:1011600003300020001A0B73033000A400020B8D23 +:1011700002300224000000000230023400000000AF +:101180000230024C00000000023002E40000FFFFC9 +:10119000083020000000080004321C10000000028B +:1011A00004322DE000000002043230000000002074 +:1011B0000432310000000020043232000000002020 +:1011C000043233000000002004323400000000200C +:1011D00004323500000000200432360000000020F8 +:1011E00004323700000000200432380000000020E4 +:1011F000043239000000002004323A0000000020D0 +:1012000004323B000000002004323C0000000020BB +:1012100004323D000000002004323E0000000020A7 +:1012200004323F000000002004324000000000D8DB +:10123000043246C000000120043250C800000024DF +:1012400004321C200000000204322DE800000002DD +:101250000432308000000020043231800000002081 +:10126000043232800000002004323380000000206D +:101270000432348000000020043235800000002059 +:101280000432368000000020043237800000002045 +:101290000432388000000020043239800000002031 +:1012A00004323A800000002004323B80000000201D +:1012B00004323C800000002004323D800000002009 +:1012C00004323E800000002004323F8000000020F5 +:1012D00004324360000000D804324B40000001207B +:1012E000043251580000002402020058000000326D +:1012F0000302006000040B8F040200700000000471 +:10130000030200A0000E0B93030200DC00070BA1F8 +:10131000020200FC000000060202012000000000A2 +:101320000202013400000002020201B000000001CC +:101330000202020C000000010302021400020BA8CA +:1013400002020404000000010302040C00020BAAC4 +:101350000302041C00040BAC03020480001F0BB04A +:10136000040204FC000000130402800000002000BE +:101370000302000400140BCF02020108000000C8A1 +:101380000202011800000002020201C40000000075 +:10139000020201CC00000000020201D400000002A1 +:1013A000020201DC00000002020201E4000000FF72 +:1013B000020201EC000000FF0202010C000000C864 +:1013C0000202011C00000002020201C8000000002D +:1013D000020201D000000000020201D80000000259 +:1013E000020201E000000002020201E8000000FF2A +:1013F000020201F0000000FF0216100000000028A9 +:101400000316600800030BE30316601C00040BE6E0 +:1014100003166038000D0BEA0416606C0000001320 +:10142000031660B800020BF7041660C00000003E0F +:10143000021661B800000001041661BC0000001F24 +:101440000316623800040BF9011662480000000020 +:101450000116624C000000000116625000000000FE +:1014600001166254000000000116625800000000DE +:101470000116625C000000000116626000000000BE +:10148000011662640000000001166268000000009E +:101490000116626C0000000001166270000000007E +:1014A000011662740000000001166278000000005E +:1014B0000116627C00000000021664BC00000001FE +:1014C0000A0000010000000102166000000003E8AD +:1014D0000A00000100000002021660000000000A7D +:1014E0000A00000100000004021660000000000174 +:1014F00005280400008900000628076800130BFD7A +:10150000042A000000001600042A800000000040A9 +:10151000032A250000020BFF032A296000040C01A6 +:10152000032A2F4800020C05032A336800020C0727 +:10153000032A392000020C09032A393000020C0B5F +:10154000032A3AC800020C0D042A3AD00000000613 +:10155000032A3B9800020C0F032A3C2000040C11C4 +:10156000022A3CD000000000022B80000000000096 +:10157000022B804000000018022B80800000000C2D +:10158000022B80C000000066022B83800007A12090 +:10159000022B83C0000001F4022B8BC0000000016D +:1015A0000A00000200000001022B83000007A120B6 +:1015B000022B8340000001F40A0000020000000238 +:1015C000022B830000001388022B834000000005DB +:1015D0000A00000200000004022B83000000013812 +:1015E000022B8340000000000A00000100000020E0 +:1015F000022A3CD400000000052C00003618000030 +:10160000052C800039B70D86052D00003AF41BF437 +:10161000052D800017002AB1062DAED04A260C15E4 +:101620000128000000000000012800040000000064 +:1016300001280008000000000128000C0000000044 +:101640000128001000000000012800140000000024 +:1016500003280020001A0C17032800A400020C31F4 +:1016600002280224000000000228023400000000CA +:101670000228024C00000000022802E40000FFFFE4 +:101680000828200000000800042A39100000000289 +:10169000042A393800000020042A3A3800000010DB +:1016A000032A3AE800020C33032A3AF800100C35FA +:1016B000042A3C3000000002042A5000000000020E +:1016C000042A501000000002042A502000000002EA +:1016D000042A503000000002022A5040000000009E +:1016E000042A50480000000E042A391800000002A5 +:1016F000042A39B800000020042A3A7800000010BB +:10170000032A3AF000020C45032A3B3800100C472C +:10171000042A3C3800000002042A5008000000029D +:10172000042A501800000002042A50280000000279 +:10173000042A503800000002022A50440000000031 +:10174000042A50800000000E0400A00000000016D3 +:101750000300A06C00060C570400A08400000005E4 +:101760000200A0980FE000000400A09C00000014FC +:101770000300A0EC00080C5D0400A22C0000000493 +:101780000200A060000003070300A10C00060C6526 +:101790000400A124000000050200A1380FE00000B1 +:1017A0000400A13C000000140300A18C00080C6B95 +:1017B0000400A23C000000040200A0640000030733 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F0000000000000000005000500090009000DC0 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:10182000000D001B001B001C001C001D0000000020 +:1018300000000000000000000000000000000000A8 +:10184000000000000000000000000000001D002556 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:1018700000000000000000000025002B0000000018 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A00000000000002B00470000000000000000C6 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D000004700AE00AE00B300B300B80000000047 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:10192000000000000000000000B800BC0000000043 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000BC00C3000000000000000008 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:1019800000C300C400C400D600D600E80000000078 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D000000000000000000000E800EC0000000033 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A00000000000000EC00EF00EF00FA00FA010512 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A30000105010B010B010F010F01130000000054 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A8000000000000000000001130123000000001E +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB00000000000012301320000000000000000CF +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE000013201350000000000000000000000008D +:101AF00000000000000000000000000000000000E6 +:101B00000000000000000000000000000135014A54 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B30000000000000000000014A014B000000000E +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B600000000000014B0158015801590159015A68 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B9000015A016E016E01710171017400000000B3 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000174018D22 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE0000000000000000000018D01BA01BA01C52B +:101BF00001C501D00000000000000000000000004E +:101C000000000000000000000000000000000000D4 +:101C10000000000001D001DD01DD01DE01DE01DF99 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C400001DF01E0000000000000000000000000D3 +:101C50000000000000000000000000000000000084 +:101C600000000000000000000000000001E001FD95 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C9000000000000000000001FD02260226023BB9 +:101CA000023B0250000000000000000000000000A5 +:101CB0000000000000000000000000000000000024 +:101CC00000000000025002620262026A026A0272AE +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00002720273000000000000000000000000FB +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000002730291BB +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000029102C402C402D0A2 +:101D500002D002DC000000000000000000000000D3 +:101D60000000000000000000000000000000000073 +:101D70000000000002DC02DD02DD02E402E402EB0E +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA00000000000000000000000200000004000D3 +:101DB00000006000000080000000A0000000C000E3 +:101DC0000000E000000100000001200000014000D0 +:101DD00000016000000180000001A0000001C000BF +:101DE0000001E000000200000002200000024000AC +:101DF00000026000000280000002A0000002C0009B +:101E00000002E00000030000000320000003400087 +:101E100000036000000380000003A0000003C00076 +:101E20000003E00000040000000420000004400063 +:101E300000046000000480000004A0000004C00052 +:101E40000004E0000005000000052000000540003F +:101E500000056000000580000005A0000005C0002E +:101E60000005E0000006000000062000000640001B +:101E700000066000000680000006A0000006C0000A +:101E80000006E000000700000007200000074000F7 +:101E900000076000000780000007A0000007C000E6 +:101EA0000007E000000800000008200000084000D3 +:101EB00000086000000880000008A0000008C000C2 +:101EC0000008E000000900000009200000094000AF +:101ED00000096000000980000009A0000009C0009E +:101EE0000009E000000A0000000A2000000A40008B +:101EF000000A6000000A8000000AA000000AC0007A +:101F0000000AE000000B0000000B2000000B400066 +:101F1000000B6000000B8000000BA000000BC00055 +:101F2000000BE000000C0000000C2000000C400042 +:101F3000000C6000000C8000000CA000000CC00031 +:101F4000000CE000000D0000000D2000000D40001E +:101F5000000D6000000D8000000DA000000DC0000D +:101F6000000DE000000E0000000E2000000E4000FA +:101F7000000E6000000E8000000EA000000EC000E9 +:101F8000000EE000000F0000000F2000000F4000D6 +:101F9000000F6000000F8000000FA000000FC000C5 +:101FA000000FE000001000000010200000104000B2 +:101FB00000106000001080000010A0000010C000A1 +:101FC0000010E0000011000000112000001140008E +:101FD00000116000001180000011A0000011C0007D +:101FE0000011E0000012000000122000001240006A +:101FF00000126000001280000012A0000012C00059 +:102000000012E00000130000001320000013400045 +:1020100000136000001380000013A0000013C00034 +:102020000013E00000140000001420000014400021 +:1020300000146000001480000014A0000014C00010 +:102040000014E000001500000015200000154000FD +:1020500000156000001580000015A0000015C000EC +:102060000015E000001600000016200000164000D9 +:1020700000166000001680000016A0000016C000C8 +:102080000016E000001700000017200000174000B5 +:1020900000176000001780000017A0000017C000A4 +:1020A0000017E00000180000001820000018400091 +:1020B00000186000001880000018A0000018C00080 +:1020C0000018E0000019000000192000001940006D +:1020D00000196000001980000019A0000019C0005C +:1020E0000019E000001A0000001A2000001A400049 +:1020F000001A6000001A8000001AA000001AC00038 +:10210000001AE000001B0000001B2000001B400024 +:10211000001B6000001B8000001BA000001BC00013 +:10212000001BE000001C0000001C2000001C400000 +:10213000001C6000001C8000001CA000001CC000EF +:10214000001CE000001D0000001D2000001D4000DC +:10215000001D6000001D8000001DA000001DC000CB +:10216000001DE000001E0000001E2000001E4000B8 +:10217000001E6000001E8000001EA000001EC000A7 +:10218000001EE000001F0000001F2000001F400094 +:10219000001F6000001F8000001FA000001FC00083 +:1021A000001FE00000200000002020000020400070 +:1021B00000206000002080000020A0000020C0005F +:1021C0000020E0000021000000212000002140004C +:1021D00000216000002180000021A0000021C0003B +:1021E0000021E00000220000002220000022400028 +:1021F00000226000002280000022A0000022C00017 +:102200000022E00000230000002320000023400003 +:1022100000236000002380000023A0000023C000F2 +:102220000023E000002400000024200000244000DF +:1022300000246000002480000024A0000024C000CE +:102240000024E000002500000025200000254000BB +:1022500000256000002580000025A0000025C000AA +:102260000025E00000260000002620000026400097 +:1022700000266000002680000026A0000026C00086 +:102280000026E00000270000002720000027400073 +:1022900000276000002780000027A0000027C00062 +:1022A0000027E0000028000000282000002840004F +:1022B00000286000002880000028A0000028C0003E +:1022C0000028E0000029000000292000002940002B +:1022D00000296000002980000029A0000029C0001A +:1022E0000029E000002A0000002A2000002A400007 +:1022F000002A6000002A8000002AA000002AC000F6 +:10230000002AE000002B0000002B2000002B4000E2 +:10231000002B6000002B8000002BA000002BC000D1 +:10232000002BE000002C0000002C2000002C4000BE +:10233000002C6000002C8000002CA000002CC000AD +:10234000002CE000002D0000002D2000002D40009A +:10235000002D6000002D8000002DA000002DC00089 +:10236000002DE000002E0000002E2000002E400076 +:10237000002E6000002E8000002EA000002EC00065 +:10238000002EE000002F0000002F2000002F400052 +:10239000002F6000002F8000002FA000002FC00041 +:1023A000002FE0000030000000302000003040002E +:1023B00000306000003080000030A0000030C0001D +:1023C0000030E0000031000000312000003140000A +:1023D00000316000003180000031A0000031C000F9 +:1023E0000031E000003200000032200000324000E6 +:1023F00000326000003280000032A0000032C000D5 +:102400000032E000003300000033200000334000C1 +:1024100000336000003380000033A0000033C000B0 +:102420000033E0000034000000342000003440009D +:1024300000346000003480000034A0000034C0008C +:102440000034E00000350000003520000035400079 +:1024500000356000003580000035A0000035C00068 +:102460000035E00000360000003620000036400055 +:1024700000366000003680000036A0000036C00044 +:102480000036E00000370000003720000037400031 +:1024900000376000003780000037A0000037C00020 +:1024A0000037E0000038000000382000003840000D +:1024B00000386000003880000038A0000038C000FC +:1024C0000038E000003900000039200000394000E9 +:1024D00000396000003980000039A0000039C000D8 +:1024E0000039E000003A0000003A2000003A4000C5 +:1024F000003A6000003A8000003AA000003AC000B4 +:10250000003AE000003B0000003B2000003B4000A0 +:10251000003B6000003B8000003BA000003BC0008F +:10252000003BE000003C0000003C2000003C40007C +:10253000003C6000003C8000003CA000003CC0006B +:10254000003CE000003D0000003D2000003D400058 +:10255000003D6000003D8000003DA000003DC00047 +:10256000003DE000003E0000003E2000003E400034 +:10257000003E6000003E8000003EA000003EC00023 +:10258000003EE000003F0000003F2000003F400010 +:10259000003F6000003F8000003FA000003FC000FF +:1025A000003FE000003FE00100000000000001FFEC +:1025B0000000020000000001000000020000000016 +:1025C000000000080215002002150020081000007D +:1025D00000000033000000020000000000000005C1 +:1025E00000000005000000000000000000000002E4 +:1025F00000000003000000020000000100000004D1 +:1026000000000002000000020000000100000002C3 +:102610000000002000000040000000400000000317 +:102620000000001800002000000040C00000618091 +:10263000000082400000A3000000C3C00000E4804E +:102640000001054000012600000146C0000167802E +:10265000000188400001A9000001C9C00001EA8012 +:1026600000020B4000022C0000024CC000026D80F2 +:1026700000028E400002AF000002CFC00002F080D6 +:1026800000001140000000010000000100000001F6 +:102690000000000100000001000000010000000136 +:1026A0000000000100000001000000010000000126 +:1026B0000000000100000001000000010000000116 +:1026C0000003D0000000003D00000001000D0000EC +:1026D000000700D000028140000B81680002022048 +:1026E00000010240000F025000010340000C0000F6 +:1026F000000800C000028140000B81680002022037 +:102700000001024000070250000202C00010000059 +:102710000008010000028180000B81A80002026015 +:1027200000018280000E82980008038000000000F3 +:102730000000000000028000000B8028000200E082 +:10274000000101000000811000000118FFFFFFF3ED +:1027500001AFFFFF000000000000000000000000CB +:10276000000000000000000000000000FFFFFFF17B +:1027700000EFFFFF0000000000000000000000006C +:10278000000000000001000000000000FFFFFFF655 +:10279000005FFFFF000000000000000000000000DC +:1027A000000000000002000000000000FFFFF4062F +:1027B0001CBFFFFF00000005000000000000001427 +:1027C000000000000004000000000000FFFFFFF216 +:1027D000004FFFFF000000000000000000000000AC +:1027E000000000000008000000000000FFFFFFFAEA +:1027F000002FFFFF000000000000000000000000AC +:10280000000000000010000000000000FFFFFFF7C4 +:1028100001EFFFFF000000000000000000000000CA +:10282000000000000020000000000000FFFFFFF596 +:10283000002FFFFF0000000000000000000000006B +:10284000000000000040000000000000FFFFFFF358 +:10285000018FFFFF000000000000000000000000EA +:10286000000000000000000000000000FFFFFFF17A +:10287000010FFFFF0000000000000000000000004A +:10288000000000000001000000000000FFFFFFF654 +:10289000005FFFFF000000000000000000000000DB +:1028A000000000000002000000000000FFFFF4062E +:1028B0001CBFFFFF00000005000000000000001426 +:1028C000000000000004000000000000FFFFFFF215 +:1028D000004FFFFF000000000000000000000000AB +:1028E000000000000008000000000000FFFFFFFAE9 +:1028F000002FFFFF000000000000000000000000AB +:10290000000000000010000000000000FFFFFFF7C3 +:1029100000EFFFFF000000000000000000000000CA +:10292000000000000020000000000000FFFFFFF595 +:10293000004FFFFF0000000000000000000000004A +:10294000000000000040000000000000FFFFFFFF4B +:1029500000CFFFFF0000000000000000000000CCDE +:10296000000000000000000000000000FFFFFFFF6B +:1029700000CFFFFF0000000000000000000000CCBE +:10298000000000000001000000000000FFFFFFFF4A +:1029900000CFFFFF0000000000000000000000CC9E +:1029A000000000000002000000000000FFFFFFFF29 +:1029B00000CFFFFF0000000000000000000000CC7E +:1029C000000000000004000000000000FFFFFFFF07 +:1029D00000CFFFFF0000000000000000000000CC5E +:1029E000000000000008000000000000FFFFFFFFE3 +:1029F00000CFFFFF0000000000000000000000CC3E +:102A0000000000000010000000000000FFFFFFFFBA +:102A100000CFFFFF0000000000000000000000CC1D +:102A2000000000000020000000000000FFFFFFFF8A +:102A300000CFFFFF0000000000000000000000CCFD +:102A4000000000000040000000000000FFFFFFF356 +:102A5000020FFFFF00000000000000000000000067 +:102A6000000000000000000000000000FFFFFFF178 +:102A7000010FFFFF00000000000000000000000048 +:102A8000000000000001000000000000FFFFFFF652 +:102A9000005FFFFF000000000000000000000000D9 +:102AA000000000000002000000000000FFFFF4062C +:102AB0001CBFFFFF00000005000000000000001424 +:102AC000000000000004000000000000FFFFFFF213 +:102AD000004FFFFF000000000000000000000000A9 +:102AE000000000000008000000000000FFFFFF8A57 +:102AF000042FFFFF000000000000000000000000A5 +:102B0000000000000010000000000000FFFFFF9721 +:102B100005CFFFFF000000000000000000000000E3 +:102B2000000000000020000000000000FFFFFFF593 +:102B3000010FFFFF00000000000000000000000087 +:102B4000000000000040000000000000FFFFFFF355 +:102B5000000FFFFF00000000000000000000000068 +:102B6000000000000000000000000000FFFFFFF177 +:102B7000000FFFFF00000000000000000000000048 +:102B8000000000000001000000000000FFFFFFF651 +:102B9000005FFFFF000000000000000000000000D8 +:102BA000000000000002000000000000FFFFF4062B +:102BB0001CBFFFFF00000005000000000000001423 +:102BC000000000000004000000000000FFFFFFF212 +:102BD000004FFFFF000000000000000000000000A8 +:102BE000000000000008000000000000FFFFFFFAE6 +:102BF000002FFFFF000000000000000000000000A8 +:102C0000000000000010000000000000FFFFFF9720 +:102C1000040FFFFF000000000000000000000000A3 +:102C2000000000000020000000000000FFFFFFF592 +:102C3000000FFFFF00000000000000000000000087 +:102C4000000000000040000000000000FFFFFFFF48 +:102C500000CFFFFF0000000000000000000000CCDB +:102C6000000000000000000000000000FFFFFFFF68 +:102C700000CFFFFF0000000000000000000000CCBB +:102C8000000000000001000000000000FFFFFFFF47 +:102C900000CFFFFF0000000000000000000000CC9B +:102CA000000000000002000000000000FFFFFFFF26 +:102CB00000CFFFFF0000000000000000000000CC7B +:102CC000000000000004000000000000FFFFFFFF04 +:102CD00000CFFFFF0000000000000000000000CC5B +:102CE000000000000008000000000000FFFFFFFFE0 +:102CF00000CFFFFF0000000000000000000000CC3B +:102D0000000000000010000000000000FFFFFFFFB7 +:102D100000CFFFFF0000000000000000000000CC1A +:102D2000000000000020000000000000FFFFFFFF87 +:102D300000CFFFFF0000000000000000000000CCFA +:102D4000000000000040000000000000FFFFFFFF47 +:102D500000CFFFFF0000000000000000000000CCDA +:102D6000000000000000000000000000FFFFFFFF67 +:102D700000CFFFFF0000000000000000000000CCBA +:102D8000000000000001000000000000FFFFFFFF46 +:102D900000CFFFFF0000000000000000000000CC9A +:102DA000000000000002000000000000FFFFFFFF25 +:102DB00000CFFFFF0000000000000000000000CC7A +:102DC000000000000004000000000000FFFFFFFF03 +:102DD00000CFFFFF0000000000000000000000CC5A +:102DE000000000000008000000000000FFFFFFFFDF +:102DF00000CFFFFF0000000000000000000000CC3A +:102E0000000000000010000000000000FFFFFFFFB6 +:102E100000CFFFFF0000000000000000000000CC19 +:102E2000000000000020000000000000FFFFFFFF86 +:102E300000CFFFFF0000000000000000000000CCF9 +:102E4000000000000040000000000000FFFFFFFF46 +:102E500000CFFFFF0000000000000000000000CCD9 +:102E6000000000000000000000000000FFFFFFFF66 +:102E700000CFFFFF0000000000000000000000CCB9 +:102E8000000000000001000000000000FFFFFFFF45 +:102E900000CFFFFF0000000000000000000000CC99 +:102EA000000000000002000000000000FFFFFFFF24 +:102EB00000CFFFFF0000000000000000000000CC79 +:102EC000000000000004000000000000FFFFFFFF02 +:102ED00000CFFFFF0000000000000000000000CC59 +:102EE000000000000008000000000000FFFFFFFFDE +:102EF00000CFFFFF0000000000000000000000CC39 +:102F0000000000000010000000000000FFFFFFFFB5 +:102F100000CFFFFF0000000000000000000000CC18 +:102F2000000000000020000000000000FFFFFFFF85 +:102F300000CFFFFF0000000000000000000000CCF8 +:102F400000000000004000000000000000000A1126 +:102F500000000A0000000A040000FFFF0000FFFF5D +:102F60000000FFFF0000FFFF000000200000002124 +:102F700000000022000000230000002400000025C3 +:102F800000000026000000270000002800000029A3 +:102F90000000002A0000002B0000002C0000002D83 +:102FA0000000002E0000002F0000001000000001B3 +:102FB000000000010000000100000001000000010D +:102FC00000000001000000010000000100000001FD +:102FD00000000001000000010000000100000001ED +:102FE00000000001000000010000000100000001DD +:102FF00007FFFFFF0000003F07FFFFFF0000000F7B +:1030000000007FF800007FF80000FF1C0FFFFFFFAB +:103010000000FF1C0FFFFFFF0000FF1C0FFFFFFF62 +:103020000000FF1C0FFFFFFF0000FF1C0FFFFFFF52 +:103030000000FF1C0FFFFFFF0000FF1C0FFFFFFF42 +:103040000000FF1C0FFFFFFF0000FF1C0FFFFFFF32 +:103050000000FF1C0FFFFFFF0000FF1C0FFFFFFF22 +:103060000000FF1C0FFFFFFF0000FF1C0FFFFFFF12 +:103070000000FF1C0FFFFFFF0000FF1C0FFFFFFF02 +:103080000000FF1C0FFFFFFF0000FF1C0FFFFFFFF2 +:103090000000FF1C0FFFFFFF0000FF1C0FFFFFFFE2 +:1030A0000000FF1C0FFFFFFF0000FF1C0FFFFFFFD2 +:1030B0000000FF1C0FFFFFFF0000FF1C0FFFFFFFC2 +:1030C0000000FF1C0FFFFFFF0000FF1C0FFFFFFFB2 +:1030D0000000FF1C0FFFFFFF0000FF1C0FFFFFFFA2 +:1030E0000000FF1C0FFFFFFF0000FF1C0FFFFFFF92 +:1030F0000000FF1C0FFFFFFF0000FF1C0FFFFFFF82 +:103100000000FF1C0FFFFFFF0000FF1C0FFFFFFF71 +:103110000000FF1C0FFFFFFF0000FF1C0FFFFFFF61 +:103120000000FF1C0FFFFFFF0000FF1C0FFFFFFF51 +:103130000000FF1C0FFFFFFF0000FF1C0FFFFFFF41 +:103140000000FF1C0FFFFFFF0000FF1C0FFFFFFF31 +:103150000000FF1C0FFFFFFF0000FF1C0FFFFFFF21 +:103160000000FF1C0FFFFFFF0000FF1C0FFFFFFF11 +:103170000000FF1C0FFFFFFF0000FF1C0FFFFFFF01 +:103180000000FF1C0FFFFFFF0000FF1C0FFFFFFFF1 +:103190000000FF1C0FFFFFFF0000FF1C0FFFFFFFE1 +:1031A0000000FF1C0FFFFFFF0000FF1C0FFFFFFFD1 +:1031B0000000FF1C0FFFFFFF0000FF1C0FFFFFFFC1 +:1031C0000000FF1C0FFFFFFF0000FF1C0FFFFFFFB1 +:1031D0000000FF1C0FFFFFFF0000FF1C0FFFFFFFA1 +:1031E0000000FF1C0FFFFFFF0000FF1C0FFFFFFF91 +:1031F0000000FF1C0FFFFFFF0000FF1C0FFFFFFF81 +:103200000000FF1C0FFFFFFF0000FF000000000098 +:103210000000FF0000000000000003130000150084 +:103220000000000100000002000000030000000098 +:103230000000000400000001000000000000000188 +:103240000000000400000000000000010000000376 +:103250000000000000000001000000040000000069 +:103260000000000100000003000000000000000159 +:103270000000000400000000000000040000000343 +:10328000000000000000000000003FFF000003FFFE +:10329000000000000000000100000001000000012B +:1032A000007C100400000004000000000000000288 +:1032B00000000090000000900080009008100000C6 +:1032C0000000008A000000800000008100000080F3 +:1032D00000000006000007D00000076C0000FFFFA0 +:1032E0000000FFFF0000FFFF0000FFFF071D291186 +:1032F00000000000009C0424000000000000000109 +:1033000000000001000000010000000100000001B9 +:1033100000007FFF000000FF000000FF000000FF32 +:10332000000000FF000000FF000000FF000000FFA1 +:10333000000000FF0000003E000000000000003F11 +:103340000000003F0000003F000000000000003FC0 +:103350000000003F0000003F0000000F000000439D +:10336000000000000000000600000000121700002E +:10337000221700003217000012150000221500006D +:1033800032150000021000000010000010100000B4 +:103390002010000030100000001000001214000087 +:1033A000221400003214000000E38340FFFFFFFFFF +:1033B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1033C000FFFFFFFFFFFFFFFFFFFFFFFFF0003000E9 +:1033D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:1033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFF332890 +:1033F000FFFF3338FFFFFFFFFFFFFFFFFFFFFFFF70 +:10340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC +:10341000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10342000FFFFFFFFFFFFFFFFFFFFFFFF00003C105C +:103430000000000800000000000000000000004044 +:103440000000180800000803000008030000004006 +:103450000000000300000803000008030000080348 +:10346000000100030000080300000803000000033F +:103470000000000300000003000000030000000340 +:103480000000000300000003000000030000000330 +:103490000000000300000003000000030000000320 +:1034A0000000000300000003000024030000002FC0 +:1034B00000000009000000190000018400000183E1 +:1034C00000000306000000190000000600000306CB +:1034D000000003060000030600000C86000003063F +:1034E00000000306000000060000000600000006C1 +:1034F00000000006000000060000000600000006B4 +:1035000000000006000000060000000600000006A3 +:103510000000000600000006000000060000000693 +:103520000000030600000013000000060000100465 +:10353000000010040010644000106440000000000F +:10354000000000000000000000000000000020005B +:10355000000000000000000000000000000000006B +:10356000000020000000000000000000000000003B +:1035700000000000000020000000007C0000003D72 +:103580000000003F0000009C000000060000000555 +:103590000000000A0000000500000140000001409A +:1035A0000000000000000000000000C00000013F1B +:1035B00000007FFF000000480000004800000000FD +:1035C00000000000000000480000000400000004AB +:1035D00000000004000000040000000400000004DB +:1035E00000000004000000040000000400000009C6 +:1035F0000000000B0000000A0000000400000009A9 +:103600000000000B0000000A0000000100000001A3 +:1036100000000001000000010000000100000001A6 +:103620000000000100000001000000010000000196 +:10363000000000010000000100000004000000097B +:103640000000000B0000000A000000010000000163 +:103650000000000100000001000000010000000166 +:103660000000000100000001000000010000000156 +:10367000000000010000000100000004000000093B +:103680000000000B0000000A000000000000000025 +:103690000000080000000200000001FF000004001C +:1036A00000000000000000001E491E491E491E497E +:1036B0000E490E490E490E49FFFFFFFF00000000B2 +:1036C000FFFFFFFF00000000000025E40000800075 +:1036D000000000130FFF0FFF0000000000000000BB +:1036E0000FFF0FFF1000100010001000200020003E +:1036F000200020008000800080008000400040000A +:103700004000400000000000000000010101010134 +:10371000012001012001010101011001010101014C +:10372000012001012001010101011001200101011D +:10373000010110010101010101200101200101012C +:10374000010110010101010101200101000001231B +:1037500000000123000001230000012300000123D9 +:1037600000000123000001230000012300000123C9 +:1037700000000123000001230000012300000123B9 +:1037800000000123000001230000012300000123A9 +:10379000000001230000012300000123000000209D +:1037A00000000032000000070000000700000000D9 +:1037B0000000000802150020021500200000003063 +:1037C000081000000000003300000030000000314D +:1037D00000000002000000050000000600000002DA +:1037E00000000002000000000000000500000002D0 +:1037F00000000002000000020000000100000006BE +:103800000000000100000002000000400000004035 +:103810000000002000000013000000200001000054 +:10382000000204C00003098000040E4000051300DC +:10383000000617C000071C80000821400009260070 +:10384000000A2AC0000B2F80000C3440000D390004 +:10385000000E3DC0000F42800010474000114C0098 +:10386000001250C00013558000145A4000155F002C +:10387000001663C00017688000186D4000197200C0 +:10388000001A76C0001B7B80001C8040001D850054 +:10389000001E89C0001F8E800000934000000001C0 +:1038A0000000000100000001000000010000000114 +:1038B0000000000100000001000000010000000104 +:1038C00000000001000000010000000100000001F4 +:1038D00000000001000000010000000100000008DD +:1038E0000000000C000000100000000100000001BA +:1038F00000000001000002110000020000000204AC +:10390000000002190000FFFF0000FFFF0000FFFFA2 +:103910000000FFFF07FFFFFF0000003F07FFFFFF62 +:103920000000000F00007FF800007FF8000000009A +:10393000140AFF0000000000000000010020100138 +:1039400000000000010086000000010000000001EE +:1039500000000000000086020000000000000000DF +:1039600000000000000086040000000000000000CD +:1039700000000000000086060000000000000000BB +:1039800000000000000086080000000000000000A9 +:10399000000000000000860A000000000000000097 +:1039A000000000000000860C000000000000000085 +:1039B000000000000000860E000000000000000073 +:1039C0000000000000008610000000000000000061 +:1039D000000000000000861200000000000000004F +:1039E000000000000000861400000000000000003D +:1039F000000000000000861600000000000000002B +:103A00000000000000008618000000000000000018 +:103A1000000000000000861A000000000000000006 +:103A2000000000000000861C0000000000000000F4 +:103A3000000000000000861E0000000000000000E2 +:103A400000000000000086200000000000000000D0 +:103A500000000000000086220000000000000000BE +:103A600000000000000086240000000000000000AC +:103A7000000000000000862600000000000000009A +:103A80000000000000008628000000000000000088 +:103A9000000000000000862A000000000000000076 +:103AA000000000000000862C000000000000000064 +:103AB000000000000000862E000000000000000052 +:103AC0000000000000008630000000000000000040 +:103AD000000000000000863200000000000000002E +:103AE000000000000000863400000000000000001C +:103AF000000000000000863600000000000000000A +:103B000000000000000086380000000000000000F7 +:103B1000000000000000863A0000000000000000E5 +:103B2000000000000000863C0000000000000000D3 +:103B3000000000000000863E0000000000000000C1 +:103B400000000000000086400000000000000000AF +:103B5000000000000000864200000000000000009D +:103B6000000000000000864400000000000000008B +:103B70000000000000008646000000000000000079 +:103B80000000000000008648000000000000000067 +:103B9000000000000000864A000000000000000055 +:103BA000000000000000864C000000000000000043 +:103BB000000000000000864E000000000000000031 +:103BC000000000000000865000000000000000001F +:103BD000000000000000865200000000000000000D +:103BE00000000000000086540000000000000000FB +:103BF00000000000000086560000000000000000E9 +:103C000000000000000086580000000000000000D6 +:103C1000000000000000865A0000000000000000C4 +:103C2000000000000000865C0000000000000000B2 +:103C3000000000000000865E0000000000000000A0 +:103C4000000000000000866000000000000000008E +:103C5000000000000000866200000000000000007C +:103C6000000000000000866400000000000000006A +:103C70000000000000008666000000000000000058 +:103C80000000000000008668000000000000000046 +:103C9000000000000000866A000000000000000034 +:103CA000000000000000866C000000000000000022 +:103CB000000000000000866E000000000000000010 +:103CC00000000000000086700000000000000000FE +:103CD00000000000000086720000000000000000EC +:103CE00000000000000086740000000000000000DA +:103CF00000000000000086760000000000000000C8 +:103D000000000000000086780000000000000000B5 +:103D1000000000000000867A0000000000000000A3 +:103D2000000000000000867C000000000000000091 +:103D3000000000000000867E00000000000000007F +:103D4000000000000000868000000000000000006D +:103D5000000000000000868200000000000000005B +:103D60000000000000008684000000000000000049 +:103D70000000000000008686000000000000000037 +:103D80000000000000008688000000000000000025 +:103D9000000000000000868A000000000000000013 +:103DA000000000000000868C000000000000000001 +:103DB000000000000000868E0000000000000000EF +:103DC00000000000000086900000000000000000DD +:103DD00000000000000086920000000000000000CB +:103DE00000000000000086940000000000000000B9 +:103DF00000000000000086960000000000000000A7 +:103E00000000000000008698000000000000000094 +:103E1000000000000000869A000000000000000082 +:103E2000000000000000869C000000000000000070 +:103E3000000000000000869E00000000000000005E +:103E400000000000000086A000000000000000004C +:103E500000000000000086A200000000000000003A +:103E600000000000000086A4000000000000000028 +:103E700000000000000086A6000000000000000016 +:103E800000000000000086A8000000000000000004 +:103E900000000000000086AA0000000000000000F2 +:103EA00000000000000086AC0000000000000000E0 +:103EB00000000000000086AE0000000000000000CE +:103EC00000000000000086B00000000000000000BC +:103ED00000000000000086B20000000000000000AA +:103EE00000000000000086B4000000000000000098 +:103EF00000000000000086B6000000000000000086 +:103F000000000000000086B8000000000000000073 +:103F100000000000000086BA000000000000000061 +:103F200000000000000086BC00000000000000004F +:103F300000000000000086BE00000000000000003D +:103F400000000000000086C000000000000000002B +:103F500000000000000086C2000000000000000019 +:103F600000000000000086C4000000000000000007 +:103F700000000000000086C60000000000000000F5 +:103F800000000000000086C80000000000000000E3 +:103F900000000000000086CA0000000000000000D1 +:103FA00000000000000086CC0000000000000000BF +:103FB00000000000000086CE0000000000000000AD +:103FC00000000000000086D000000000000000009B +:103FD00000000000000086D2000000000000000089 +:103FE00000000000000086D4000000000000000077 +:103FF00000000000000086D6000000000000000065 +:1040000000000000000086D8000000000000000052 +:1040100000000000000086DA000000000000000040 +:1040200000000000000086DC00000000000000002E +:1040300000000000000086DE00000000000000001C +:1040400000000000000086E000000000000000000A +:1040500000000000000086E20000000000000000F8 +:1040600000000000000086E40000000000000000E6 +:1040700000000000000086E60000000000000000D4 +:1040800000000000000086E80000000000000000C2 +:1040900000000000000086EA0000000000000000B0 +:1040A00000000000000086EC00000000000000009E +:1040B00000000000000086EE00000000000000008C +:1040C00000000000000086F000000000000000007A +:1040D00000000000000086F2000000000000000068 +:1040E00000000000000086F4000000000000000056 +:1040F00000000000000086F6000000000000000044 +:1041000000000000000086F8000000000000000031 +:1041100000000000000086FA00000000000000001F +:1041200000000000000086FC00000000000000000D +:1041300000000000000086FE0000000000000000FB +:1041400000000000000087000000000000000000E8 +:1041500000000000000087020000000000000000D6 +:1041600000000000000087040000000000000000C4 +:1041700000000000000087060000000000000000B2 +:1041800000000000000087080000000000000000A0 +:10419000000000000000870A00000000000000008E +:1041A000000000000000870C00000000000000007C +:1041B000000000000000870E00000000000000006A +:1041C0000000000000008710000000000000000058 +:1041D0000000000000008712000000000000000046 +:1041E0000000000000008714000000000000000034 +:1041F0000000000000008716000000000000000022 +:10420000000000000000871800000000000000000F +:10421000000000000000871A0000000000000000FD +:10422000000000000000871C0000000000000000EB +:10423000000000000000871E0000000000000000D9 +:1042400000000000000087200000000000000000C7 +:1042500000000000000087220000000000000000B5 +:1042600000000000000087240000000000000000A3 +:104270000000000000008726000000000000000091 +:10428000000000000000872800000000000000007F +:10429000000000000000872A00000000000000006D +:1042A000000000000000872C00000000000000005B +:1042B000000000000000872E000000000000000049 +:1042C0000000000000008730000000000000000037 +:1042D0000000000000008732000000000000000025 +:1042E0000000000000008734000000000000000013 +:1042F0000000000000008736000000000000000001 +:1043000000000000000087380000000000000000EE +:10431000000000000000873A0000000000000000DC +:10432000000000000000873C0000000000000000CA +:10433000000000000000873E0000000000000000B8 +:1043400000000000000087400000000000000000A6 +:104350000000000000008742000000000000000094 +:104360000000000000008744000000000000000082 +:104370000000000000008746000000000000000070 +:10438000000000000000874800000000000000005E +:10439000000000000000874A00000000000000004C +:1043A000000000000000874C00000000000000003A +:1043B000000000000000874E000000000000000028 +:1043C0000000000000008750000000000000000016 +:1043D0000000000000008752000000000000000004 +:1043E00000000000000087540000000000000000F2 +:1043F00000000000000087560000000000000000E0 +:1044000000000000000087580000000000000000CD +:10441000000000000000875A0000000000000000BB +:10442000000000000000875C0000000000000000A9 +:10443000000000000000875E000000000000000097 +:104440000000000000008760000000000000000085 +:104450000000000000008762000000000000000073 +:104460000000000000008764000000000000000061 +:10447000000000000000876600000000000000004F +:10448000000000000000876800000000000000003D +:10449000000000000000876A00000000000000002B +:1044A000000000000000876C000000000000000019 +:1044B000000000000000876E000000000000000007 +:1044C00000000000000087700000000000000000F5 +:1044D00000000000000087720000000000000000E3 +:1044E00000000000000087740000000000000000D1 +:1044F00000000000000087760000000000000000BF +:1045000000000000000087780000000000000000AC +:10451000000000000000877A00000000000000009A +:10452000000000000000877C000000000000000088 +:10453000000000000000877E000000000000000076 +:104540000000000000008780000000000000000064 +:104550000000000000008782000000000000000052 +:104560000000000000008784000000000000000040 +:10457000000000000000878600000000000000002E +:10458000000000000000878800000000000000001C +:10459000000000000000878A00000000000000000A +:1045A000000000000000878C0000000000000000F8 +:1045B000000000000000878E0000000000000000E6 +:1045C00000000000000087900000000000000000D4 +:1045D00000000000000087920000000000000000C2 +:1045E00000000000000087940000000000000000B0 +:1045F000000000000000879600000000000000009E +:10460000000000000000879800000000000000008B +:10461000000000000000879A000000000000000079 +:10462000000000000000879C000000000000000067 +:10463000000000000000879E000000000000000055 +:1046400000000000000087A0000000000000000043 +:1046500000000000000087A2000000000000000031 +:1046600000000000000087A400000000000000001F +:1046700000000000000087A600000000000000000D +:1046800000000000000087A80000000000000000FB +:1046900000000000000087AA0000000000000000E9 +:1046A00000000000000087AC0000000000000000D7 +:1046B00000000000000087AE0000000000000000C5 +:1046C00000000000000087B00000000000000000B3 +:1046D00000000000000087B20000000000000000A1 +:1046E00000000000000087B400000000000000008F +:1046F00000000000000087B600000000000000007D +:1047000000000000000087B800000000000000006A +:1047100000000000000087BA000000000000000058 +:1047200000000000000087BC000000000000000046 +:1047300000000000000087BE000000000000000034 +:1047400000000000000087C0000000000000000022 +:1047500000000000000087C2000000000000000010 +:1047600000000000000087C40000000000000000FE +:1047700000000000000087C60000000000000000EC +:1047800000000000000087C80000000000000000DA +:1047900000000000000087CA0000000000000000C8 +:1047A00000000000000087CC0000000000000000B6 +:1047B00000000000000087CE0000000000000000A4 +:1047C00000000000000087D0000000000000000092 +:1047D00000000000000087D2000000000000000080 +:1047E00000000000000087D400000000000000006E +:1047F00000000000000087D600000000000000005C +:1048000000000000000087D8000000000000000049 +:1048100000000000000087DA000000000000000037 +:1048200000000000000087DC000000000000000025 +:1048300000000000000087DE000000000000000013 +:1048400000000000000087E0000000000000000001 +:1048500000000000000087E20000000000000000EF +:1048600000000000000087E40000000000000000DD +:1048700000000000000087E60000000000000000CB +:1048800000000000000087E80000000000000000B9 +:1048900000000000000087EA0000000000000000A7 +:1048A00000000000000087EC000000000000000095 +:1048B00000000000000087EE000000000000000083 +:1048C00000000000000087F0000000000000000071 +:1048D00000000000000087F200000000000000005F +:1048E00000000000000087F400000000000000004D +:1048F00000000000000087F600000000000000003B +:1049000000000000000087F8000000000000000028 +:1049100000000000000087FA000000000000000016 +:1049200000000000000087FC000000000000000004 +:1049300000000000000087FE0000FF0000000000F3 +:104940000000FF0000000000000001D20000150080 +:104950000000000100000002000000030000000051 +:104960000000000400000001000000000000000141 +:10497000000000040000000000000001000000032F +:104980000000000000000001000000040000000022 +:104990000000000100000003000000000000000112 +:1049A00000000004000000000000000400000003FC +:1049B000000000000000000000003FFF000003FFB7 +:1049C0000000000300BEBC20000000000000000545 +:1049D0000000000300BEBC20000000000000000535 +:1049E0000000000D0000000C00000000000000109E +:1049F0000215002002150020000000300810000001 +:104A00000000003300000030000000310000000210 +:104A1000000000040000000000000002000000028E +:104A2000000000000000000200000007000000027B +:104A3000000000020000000100000003000000016F +:104A400000000002000000400000004000000004E0 +:104A5000000000200000000F0000001B000080008C +:104A6000000103C00001878000020B4000028F009C +:104A7000000312C00003968000041A4000049E0048 +:104A8000000521C00005A580000629400006AD00F4 +:104A9000000730C00007B480000838400008BC00A0 +:104AA00000093FC00009C380000A4740000ACB004C +:104AB000000B4EC0000BD280000C5640000CDA00F8 +:104AC000000D5DC0000061800000000100000001D9 +:104AD00000000001000000010000000100000001D2 +:104AE00000000001000000010000000100000001C2 +:104AF00000000001000000010000000100000001B2 +:104B0000000000010000000100000001000005AAF3 +:104B1000000005990000059D000003C00000FFFF94 +:104B20000000FFFF0000FFFF0000FFFF0000004645 +:104B30000000000C07FFFFFF0000003F07FFFFFF22 +:104B40000000000F00007FF800007FF8FFFFFFFF6C +:104B5000FFFFFFFF0000FF00000000000000FF005B +:104B6000000000000000190000000000000001D457 +:104B7000000015000000000100000002000000031A +:104B80000000000000000004000000010000000020 +:104B9000000000010000000400000000000000010F +:104BA00000000003000000000000000100000004FD +:104BB00000000000000000010000000300000000F1 +:104BC00000000001000000040000000000000004DC +:104BD00000000003000000000000000000003FFF94 +:104BE000000003FF0000000F0000000700000000AD +:104BF0000000000E03150020031500200100003006 +:104C000008100000000000330000003000000031F8 +:104C10000000000300000006000000030000000385 +:104C20000000000200000000000000020000000080 +:104C30000000000600000004000000020000000266 +:104C4000000000010000000400000001000000025C +:104C500000000040000000400000000400000020B0 +:104C6000000000020000001F000010000000208073 +:104C7000000031000000418000005200000062800E +:104C80000000730000008380000094000000A480F6 +:104C90000000B5000000C5800000D6000000E680DE +:104CA0000000F700000107800001180000012880C3 +:104CB000000139000001498000015A0000016A80AA +:104CC00000017B0000018B8000019C000001AC8092 +:104CD0000001BD000001CD800001DE000001EE807A +:104CE00000000F00000000010000000100000001B2 +:104CF00000000001000000010000000100000001B0 +:104D0000000000010000000100000001000000019F +:104D1000000000010000000100000001000000018F +:104D2000000000010000000100000001000000017F +:104D30000000000100000614000006000000060448 +:104D40000000FFFF0000FFFF0000FFFF0000FFFF6B +:104D50000000002000000020000000000000000013 +:104D600000000023000000240000002500000026B1 +:104D700000000027000000290000002A0000002B8E +:104D80000000002C000000010000000107FFFFFFF1 +:104D90000000003F07FFFFFF0000000F00007FF84A +:104DA00000007FF80000000000000001CCCC0201F0 +:104DB000CCCCCCCCCCCC0201CCCCCCCCFFFFFFFFFC +:104DC000FFFFFFFF000000000001000100020807D4 +:104DD000CCCCCCC1FFFFFFFFFFFFFFFF10000000A6 +:104DE000000028AD7058103C000000000000FF00DB +:104DF000000000000000FF0000000000000002862C +:104E00000000350000000001000000020000000367 +:104E1000000000000000000400000001000000008D +:104E2000000000010000000400000000000000017C +:104E3000000000030000000000000001000000046A +:104E4000000000000000000100000003000000005E +:104E50000000000100000004000000000000000449 +:104E600000000003000000000000000000003FFF01 +:104E7000000003FF000E0000011600D60000FFFF37 +:104E8000000000000000FFFF000000000000FFFF26 +:104E9000000000000000FFFF000000000000FFFF16 +:104EA000000000000000FFFF000000000000000004 +:104EB000000000000000FFFF000000000072000082 +:104EC000012300F30000FFFF000000000000FFFFCF +:104ED000000000000000FFFF000000000000FFFFD6 +:104EE000000000000000FFFF000000000000FFFFC6 +:104EF0000000000000000000000000000000FFFFB4 +:104F000000000000BF5C0000FFF51FEF0000FFFF86 +:104F1000F00003E0000000000000A0005554000075 +:104F20005555555500005555F000000055540000EA +:104F30005555555500005555F0000000BF5C000068 +:104F4000FFF51FEF0000FFFFF00003E0000000008E +:104F50000000A0005554000055555555000055550A +:104F6000F0000000555400005555555500005555AA +:104F7000F0000000000000001F8B0800000000008F +:104F8000000BFB51CFC0F003097773A2F215595102 +:104F9000F9AD6CA8FC81C659CC0C0C8540DC0DC465 +:104FA00015CCF8D58632618AFD9541B0374931304C +:104FB000084940D8AE1203EFB7514C07AC81CAFF85 +:104FC000A306A1CBA0E23FD1E4FF42E5D72843E806 +:104FD0005F1AD8CD5D0B950700849298A7600300F7 +:104FE00000000000000000001F8B0800000000000F +:104FF000000BED7D0D7814D5B9F099D9D9D9D9DF49 +:105000004CC2127643829310206AC025040C8AEDAC +:105010000041639BB64B408D16ED82542318889453 +:10502000D6D8F67307F2430CE00DC8A7D40FBD0B1A +:10503000F5077BB58D362ADE87F626427BF17EEDBD +:105040007353C0AA2D5E835A6BAD7853AB9FF4A9FE +:105050002DDF79DF73667766B29B04AF7AFB3CB7CE +:10506000F8B42767CE9973DEF3FE9DF7BCEF7B663D +:105070003D8A48E473083903FF3E4BC85181103222 +:1050800031539ACF89A25F4BAA09698AC85A376DF2 +:105090005BEB222DBD95509F5E4B6611E286FE5163 +:1050A00042FF8CE27B528112EB0FD3F6E75D352E87 +:1050B0002D338EB36C920851AB6849B60DBA427469 +:1050C0008C947B784821F8EF4C1921AD2766D71DC9 +:1050D00036EBF47F11120CBF713EFDE34272E11911 +:1050E0001721EFAA8D79FDA38CFF56F2882A4D2354 +:1050F000E48364ACEEF0B491EDE63AD612F2BAA7CE +:1051000000D669C857CF24641E51701DE6FAA482E8 +:10511000AEC24480F6DBFF9C2A5564E02161BAC828 +:10512000F9F4B944FA3D5523E14FE38F18381E9D39 +:10513000A71FE731DF1BA2F059D6E77C3F3D2E7F4A +:105140009F48F4BF7984F8581772BF90B8189E7BB7 +:105150006BBF6E14513CAC7D74290138611DF1990F +:1051600019F8CD79CD75A4E777AC27D73AD2F3F308 +:10517000F772E1DBECF76E6D4727110939EED64A7D +:10518000E2C02775336A09A56F03F0C9FC0C5D9670 +:105190002EE9407872D185F287A602BE5C01C64F27 +:1051A000BF6CABA164271B899790B959E61F837F19 +:1051B000124EFEA9BDE213E19F6F71FE21751351DE +:1051C0002ECCF53BF1DD54EB3EE999350ABEF9FBF7 +:1051D00026FD46F05FAEF746F28991954FF8F82626 +:1051E000BF98F3FC57E11D8B3F08E941FA11127794 +:1051F000C1BC99BA41E2416B3F4B5948D980AFC716 +:1052000015EEFC836B16943E03F4862B2CBD3164A3 +:105210009523FE9E5B2609A04F1B3C8AF297291F0F +:1052200049C5B1EF821E7B88C838AF1456701C8AFE +:10523000A787108E7A3BFEBC6A9C003FBB0B2BF20B +:1052400012743C1228C82A075B922D7592854FB6BE +:10525000B849636F0009C5E699425213007F1F2EBB +:10526000D61A82B9C771E2ABCD1D7B3141F5AF31A2 +:10527000518E3D08EB17B2AFA73FBD1ED900FCD041 +:10528000F5F48FB69EB6E074BE9EEC72DDCED763A9 +:10529000C29F7E6EAE2BC77B4EF873B5B7BBF5C809 +:1052A0004A3A8411CCBE2E37ACAB949013B02EA0EA +:1052B0006740463AB9C33DC8BF747D27903F1CEB99 +:1052C000A37C4580AF9CEB935405F162CE2F29DF80 +:1052D000A893E664E0FC1D51719DEE341C311CC79F +:1052E000A5127CEFE724F13B68A7FC3788FC17D0B8 +:1052F000098C2F47E8001740A9371A94AEED03F345 +:1053000049E54C545BE4665ACA8104A9A7FDDAFF5B +:10531000E26A047E24E16A9B9CBC0EC498981B6FD1 +:10532000A6DE34EBC700FF9523E97FEC0B1EACB77C +:105330004F8C7D1770290A8C1F9CF8A17813050BE0 +:105340003D2595E1F3D81766307CE590E306E56BE3 +:10535000367CD17F3AC865091F776A652C46CA3208 +:10536000F8BBAF3C72F52AFAE7CEF2DD036E8DB6DC +:105370006F4B0930FE094FA240B0ACAF64632FE21F +:10538000B18BF3D512D702EFABB47E577D59DE2A2D +:105390005AAF1184AC7CB42749617713F20F4905E9 +:1053A000CB0F5E66F0E7E2B7ED49CD269FDB5BA44D +:1053B000BA141D7F7BF5B3F99751BC7584CBAB5004 +:1053C000C7D40812ACCB07EBA0709FC7E7DF73CB45 +:1053D00037104E8ABFF3007F261F9AFC365537746C +:1053E000B512F06C10918E17D94662B0BFC03FC99C +:1053F00082A7923AD1F084100F73000F459A26CA03 +:1054000080B244AF4E2998C6C35DF522D273C3CA99 +:10541000E9FB809E26DC1B0591D195EFC7448A5598 +:1054200080DECC257FDFA178AA7443BD57003827E2 +:10543000AF262990A33BE039C5C77B24BE18E0986E +:105440007C73CC0DEBA1F61FE7AF081843A49DC3F6 +:10545000FD9D1B7C8CBF4AD4BD2E2A975F34E1484A +:10546000084EFEFAA23031831793BF4AC4C4527863 +:105470002E55F42E84F52AE5A97E99E2A74D244DF8 +:10548000A84F0C3208E3140924F38FCE1728D7F65F +:10549000017FAFE27428AAEDBC45A4F0170DADACB6 +:1054A00007FBC67BE2F2DFC17E35B9A9978874BCE1 +:1054B000684432609F2A2AEF8FD7B2FA49C0B7D228 +:1054C000942202AD87C5C42A8023BA9AF123DD7FD6 +:1054D00004C0DF6EB741807ECA825E1DEC963DB788 +:1054E0005C4A565AEC93AF094C4E258DE8A9CA0C7C +:1054F0005DEF73313ED95977D47B6300FAF9102FF1 +:1055000053492DF24319151381AE43017E2048F70C +:105510000D30BF7F634A0078CAB41E01E0A6FC3E8E +:1055200009E0A17044553ACEEE5BE4C614C3CB71DA +:10553000E0C780C8E6A1FFD310DFBC7E89E0C6F9D2 +:105540005C9F65F89AA09294465125E9AC1EA92467 +:10555000299DD2CB0F78A2788956E8FD305F00F004 +:1055600048EB01C023C54F49F53EA4CBE4586FBFBB +:1055700044104F5B80CF7DD47C4091DED88FFBC63A +:1055800076A9E595FF4555D8F623AE98412C7C4881 +:10559000281FCECCE02B544DE5CD6AAF9CA51D094C +:1055A000EA05E82205D87E66EE0F945FBF037049D6 +:1055B0002AE3D7F1EE434AAB4B7B1DF497A48A80D4 +:1055C0004FD3F6EE52371B80A7F7612C8A2757CFAF +:1055D000EC7E38EF50DCC61E64F2DB2FD0BAA2EAB4 +:1055E00029D88F703F9C97B147BC1522E9B7D81FC7 +:1055F000EE629FAD4E1A0D01E6FB3A7FA6B4CA08D3 +:105600008744F70752995927DD29483FC5172CF3DE +:10561000CC54A87F0BE731DF9302A4DF4BE9D45DC4 +:105620005145AC76B304EFD13E201E674A47BE9782 +:105630001B2F8EF996DBE11CF77B01497B23CBB94D +:1056400067E47B1279C3E4078ABC4118606E863E2A +:10565000D45E3A20D07DB4ADF86E03F87A0B3451A5 +:10566000BA76124677522BDAF48CAB5844B9BE5F47 +:10567000D018BF44983DE52157F6A39C44C6675F08 +:10568000F9385FED2189DF005F798A1388DFAD1378 +:10569000490FE8C9349EC19E041EA9588EFDB7CE9D +:1056A000BCC100B9764F5167232F70BEDAAA20EF34 +:1056B00058E6D98CEBEC4AA6C86B6ED837D8F88A76 +:1056C0001667A5C997158C8FBB2A1BF2083C577A21 +:1056D00009E8017FCFE3FDB09F64F8D120CB67C21A +:1056E0003A45A4C32E5A9E31F912F6A5880F9F9B06 +:1056F000FC67F29B39FED87217C6FDAF88B075946F +:1057000050F627C88F6CBF9FCCF13FA5785880FD1D +:105710005E8BAB8B607B296B8C3D0BE5BDF9BF8A43 +:10572000AE44386B55A0B7A04F10CE9C3F7EBE3024 +:10573000E128BA597AD56AD70756DBEBBE4A7B9D7A +:105740005A01997A69661C739E02D3AED362319076 +:10575000B76E77AA919A78A47CF3C48561FABCDB12 +:105760009B7A114CC00E25BAB08ED67D53288F82FD +:105770007C4ABD0AC8E96744CE679A86F215E07490 +:105780002643BDCA548A5A798944BA697D60C8459E +:10579000645ADF1691521E812391E2CDCF6133C747 +:1057A000D93674178E7B4765413ED03B3D7E84F5EC +:1057B000F79AE36B2D5F29B38CFFC13413AE1E053E +:1057C000F96488AE8DB6FBE97CA952C0668FB21031 +:1057D000F6CD5A092847944A9D801F86D48DCF5E06 +:1057E000902A98BE952ABA0659C9F64FB29CDB4555 +:1057F0009CFE749FFFBC3811F8300E9B5D7A9F377A +:10580000E71993CFC6DB8F72AE44F5EFADC4170333 +:105810003BE0A490B846A47CDEBABC95805DE95E0E +:10582000DEF2950E5AB652FE4439A911530F967204 +:105830007EA5EFDD199F9482F7A409C51301BE3B35 +:105840006BD83E9B6BDEAD49635AB9C54EDC4AE965 +:105850000F72B8B5B24AC9F69E3FD239AD7C021D6F +:10586000B74E9BA466F1678C3D6E836DDCCF93C40D +:1058700037C4B923C727C0DF15B0050B2827BEC022 +:1058800046302E283DD8F30CDF5BEAAE91F5DD2BD8 +:105890006F88001EC293F4D902E5F727A91A89532D +:1058A000532FECD71F0779F89E185F18A0FC1FF63E +:1058B000E8B788B4FD3971C9C26D503F87A052382E +:1058C00028DE246CA2F086C1977211218736AFDEE4 +:1058D000640418FE413F762507A3AFD37576275F92 +:1058E000C472A7C8ECA6FF0DFC4DD7A54806EA3543 +:1058F000AF46FB59E5594A317D5741DFB3DA0D1107 +:10590000A677242E4AD47EBA17F8AEA8B107CF15D1 +:10591000926A3F3F38F17EBFC8ECC6A3223BDFED61 +:105920000EAEC1F59F1E9A3AEA7901D601E70AB395 +:105930007ED4027FAC92C16FB56FDC144C9083F0C3 +:10594000B215484F69393B6F9215C4263792DA6217 +:105950009E237E28663947A4E17427222D703EC914 +:10596000A73A94EE8BDBDD46631CFB0D451A2C76C3 +:105970005689CBB1BEF994BEA01F2A23012BDE1499 +:10598000213100F3F91B53FD6E929157F3BD4E8EFA +:1059900017AA3F0C716A06FE41532FE55847CE7592 +:1059A00037DACF9DE9FEE9F37BFCA8683927A4E547 +:1059B000B7DA94DF4165A9454F6DAF3E3BB9DD26AF +:1059C0000D29607FDF1978B56B2AF84F62626C9AF7 +:1059D00006F25F7544037D190C5759FDD3B77B164A +:1059E000BD265AF68B40251DCFC29FDBCF52BED3BA +:1059F000F3879DF337D495669FFF8F22DA43E46DDA +:105A0000D4FF1C6F9DD1BB11AF4E78CCF75C62E226 +:105A100043ABBEF09633BFC4487D3864C3E7D9EAD0 +:105A200041671910481CE4AD2D50A5AEB2E0250821 +:105A3000FC48E199EFD183AE8923E13E5B3D996B50 +:105A4000DE8EB07DDE0B32F316C3BC1780EE83FD15 +:105A50002C1E32FCB08FC5B7FD01EC399FDA5377AD +:105A60003DE80DC77920C4616CAF69B8FAAB701E10 +:105A70002897622037F49C80FB885423A70CD847D2 +:105A80007A049DF9F574B4C37C84D9FF13B91DF66B +:105A9000CFA6BC945BECB032988FD9614E7C10528B +:105AA000ACBEE1B7EA6B83BDCFCFC3AB6A3823107E +:105AB000EDAA5F53B86E3AE226DD50FD90F6B69C33 +:105AC000435E7D8D9DE36EE2E7E1D5241E82C653E1 +:105AD00044AC03784F91A3A139167A7FC1C5FD4329 +:105AE0005D6EB49B0CFA1FC0F9D51EB7CDAEBA716E +:105AF000B7BD7E03692884FDF8865D6E92A2F8B872 +:105B0000C9B1FF5CE262FAE446D2D20974EEE0FE6B +:105B1000AA552ADD82A949DEFCF47DF356D2FA7239 +:105B200017F31FBC95A42BF364E05A1348C93A6DD0 +:105B30007FAD6FCE951713783FD55904F293CFEC14 +:105B40005F273F5CDF65876F2CF89DF09AF6792E12 +:105B500038A4FD829ECAC2AFAB38BF99F46A5542E1 +:105B6000B3481EB5CFBCAC3416812EA3E57F785365 +:105B70006D749E24083BF66FB990F9BD5B2E40BD55 +:105B800037C67B6D1FF1BD2D2ECE878EF7BAC3A908 +:105B900038E86BF3DCE4555A101782C4CE23DD914C +:105BA00031DACB476F77C2B5349FEE07178C848FFD +:105BB000DA3977B9E8BA6E75E9D7322666F0790036 +:105BC0009F2E28993D8FF60EEDBF5E0A7409743C36 +:105BD0006FA00FED1EAF66B7FFD7C31FA0EF2A0857 +:105BE000EA3B7F85BDDD69073DC4F74D7ABC473987 +:105BF0000AA188811E08F4E3FE5523BD3D64915F30 +:105C000093EE1B22546F4CC8AD9F447AB283B3818C +:105C1000C2F581C0EB261CEFF60875200F1B08515A +:105C20005BABACE3CA38EE087DF0216D9F07F8202E +:105C3000849DC36211C05357120236101F887F091A +:105C4000D6DDF6BC8B807E6A73B71011F05C4234EF +:105C5000F0AB7BCA59BBE7B82B2C32BB18F1D41977 +:105C6000AD7B00FC19075CCC7F44CF05E887F004CE +:105C70000C5DA774ECA4F6473EF8B76F6771948586 +:105C8000814402DE73451ADD1EFADEBF3E7A7D23B3 +:105C9000D4D7442E95E09C73888F73EA7B8FCF23F3 +:105CA00014BECEC782A41FCF292919CE396BFA5C46 +:105CB000E8375BFB8320CEBFE6891B1FAA07FC3CAD +:105CC0007D89F606EAD336A4C79AA796FDBBC1D74D +:105CD000A3507AB46DE2FE48231659465F6DF690E4 +:105CE000AFC40399F59BF853B41EDCEFD6ECCF4755 +:105CF0003F6E5A8E25DA9FBEEFA1654396FDEEB743 +:105D00002E669FBE1D941B013E61FFC075085FEFAC +:105D1000556E589750DC427E43E73B01EB63FD70C4 +:105D20003F301E1152D368FBDB8FEC95CB66C2BCB3 +:105D30007BE555E8C7D9847830E154F6EF30407FF1 +:105D400029E56A196C0D8B7FF05868883E5FBFDFCC +:105D5000D50F7E4A5A625CCDAB89B6733BDD5F02DC +:105D600002A5FB3ACE97EBFA9A51BFAFEBDD8AFB67 +:105D7000D8FA0376BD46F18A71D2B52FB862F550D4 +:105D8000FFE1C3218DC2F3D6E08321C03F9D67A50B +:105D90004CE5C7ADDAE502C63F5D30723C42863164 +:105DA0002EB8BEF70E369F436FBE057F4447C659D7 +:105DB00083923DCE4AF64F18D7396FED63EFDF6F10 +:105DC000D0F9DE7EE2F7F7431CE5E6BFFEF1FE6F99 +:105DD000813CFFD8AB82DE5FFFBDDFDCFF4D8AC7B1 +:105DE00053073C22F0C53B3F7AF8A17B69FD9D97A4 +:105DF0006654812A9A2E31797EE7F13F156A749CA8 +:105E00008D3F5A3209D6BDF1C9C593C828F6C63BA5 +:105E1000948F521E2B3C29A49F76808E3789560F73 +:105E2000F2D2418F437D87A6007CA75EF4C4403642 +:105E3000D7D36720CFEB7A9BD12F0DF56F53BCAE34 +:105E40007B740BC62B47E2D7982C4650FF4C065765 +:105E5000FBBABE655FBAA41A4A774C83F1C830EE2C +:105E60009FCEF7D61FA774BC2037DDDE271FCAA040 +:105E70001FD73F7A079BD741B753F0C7FC9174AB4C +:105E800005BAF933747B9FDCFC8FF74263DF84AC87 +:105E9000F120332EDEFCE41579D9E2F856FCF68FBA +:105EA00003BF4D3CCE5520E9CBA5B9C007FFF4D0C8 +:105EB000BD61A0AF27560FF47EECFD2984F2C59B8F +:105EC000EEE1EB40FE867FE451F7D177D6FCE805A2 +:105ED000DCA7DF79F217B286FB1C3511A93DF70E5E +:105EE00049FF1B04FB6E1D8F2BAC7F20D8EF09658B +:105EF000E8B42EB5B44E0BE173F473AC4B317E5F56 +:105F0000971A582E64A1DB56A98CED1B2916276B16 +:105F10007EE0D73209D8E929D4001D4F5E0ACF733D +:105F2000D1D15CBF0AEBBFD042CF07989CE692C7A5 +:105F300077F67A24D8074DFABEC3CFBDEB53C20B18 +:105F4000248B9C9AF60D71AD18954E4E7EE874CA5E +:105F5000716A7CF1FDB1D7717678FA86A4E1B84E0A +:105F60007C6D8A523D0CFB51484EC17ED4E9D65E11 +:105F700030802F9E73937DF495B6D03CA265F1736B +:105F8000B5839D372353970271F4F74B6115CF63A7 +:105F9000CE78B79B1E0F340B3C875E9E316908CECE +:105FA000B122F307770CCC27A0FFA12C85786FEBEB +:105FB0001CF4D798EFBB2231F413CB116D61B6F10D +:105FC000E5D679D87FE479ADE5CDBDB47E67A43060 +:105FD00006F67E50FD7E64809CFDB96D9B64E039C1 +:105FE000B42BB05929B39C43BBB49CE7E0C3D2287F +:105FF000E7E0B33DBFA5E70F3BE7CF790E3E0EF2DA +:10600000BF85C721479C97D480648D13BEC1F57EA0 +:1060100009E9DF44987D1357AC7EEAC6E101F077C9 +:10602000DCB7F4C4DE95749E3CD28E7E69BAEB5721 +:106030009F99331A3FDBFDD21E91D94124CEFDE357 +:106040009938259B8FC78B4F67E0797C15FD73CFFF +:106050008543024C760E9DD24DE12B5DAE6D0678E8 +:10606000A6AE187C6425F2C347F393A7F94533F92C +:10607000C5B09DEFBBB44FE67CEF75B3F5D173B6F9 +:10608000D73D77247DBA3EA1F37D24336F24DBBC5A +:1060900023ECE671C605EF59166271E61302FAEBBE +:1060A0008D45BAE0063E9D4262903B74524854B81A +:1060B00021FF64B9E1013E0D482DE7803D1918E14B +:1060C000AF627E82ED0E7FF3D9FAADC6EB6F3E5B19 +:1060D0007FD428FEE65AF738FCCDAEE02E3CDF79BF +:1060E000CFD2DF1C9EA0CF166250BB78F1CF2C7EA2 +:1060F000E6AB3A828B03F3C1CF4CD0AF7C4DC725C2 +:106100006DE0470E4FD61F87FEAFB8172C0E43FB2E +:1061100054D63EB793B5DF06490310A7937403E442 +:106120007DF7CA6F54A0BF334286C03E33FD9D9EAB +:10613000C604FA394F781209589F5F4D0D8088CAFE +:10614000911E8CFB2F7155E60D8D42973B785E4971 +:106150006752C792EA63763E2A6771C19D741F81B8 +:106160007C929E6404DBBB932A96EF9178B31BE389 +:10617000882C3EBD9BFB3FDA64D204E551BE5FFF35 +:106180009AF373A664E710BABF7C6735E5A377037B +:106190003EB42B73C1B72559310DE6DF9E8C61B932 +:1061A0003B598365A790D0208ED5D6F12F9B15B093 +:1061B000A75CB128D43BDB0F6FAEA57599EF5B2EC2 +:1061C0006DD634C9B24F75B8993FC353D789F68F8E +:1061D00047A7ED73E07DD292CDAFBE95C34DFB6373 +:1061E000FEAE4765FDEFE27ADBD97F271F7FE7C070 +:1061F000E504EC34A97A10FD9441BAFF011C3B0779 +:106200005EC2E7DDEE413CBFFE432989ED2310BFAE +:10621000ACC471770E3C87FBECBD7CDE40CD10F248 +:1062200063A8B51ADBBBBDC3DC3F4E785E14CB1B45 +:10623000E906DA55435E94B66F33AD3FCCE1F055D5 +:1062400050D6A67674A4F53338BF54610CF23CC026 +:106250008741DEC941A7FF9AF9AD8B4802CFE145DE +:106260007A40077BABA8B67011D8914575E761BE3F +:106270006D516560253ED70BAF87F20E21F68B5A24 +:10628000C8738B8AE8BF2AD22BBE8AFDF48B6E843A +:10629000F6E7DCF9084FC1E79A2A60FC8274DC71EA +:1062A00010E38344D3D03F69C61BB7C7CAF2463B4D +:1062B000CFE0CE66EA4594471FF8442CF50247BD6F +:1062C000C8D1BFCCD17E9EA3BDCA566FE5F826D5F6 +:1062D00072EA4110B02109E1DDC6FB9016CAD81060 +:1062E0002FE50EED81D0F7949395AC7CD5C227DDD8 +:1062F000B0AE51E4F1849BC97D5144CCC007FFA7E7 +:10630000F832F09421DED03F92D113B598C0B27D1F +:106310006E5A4F18D6B888454FFC06E83E524F04D7 +:10632000907FDE2D26B83FE4820FFC114C0F285CD5 +:106330000F24FE13F58046F5C52CAB3E883581FE53 +:106340009BD4E95F2CCD477D80713462F8DBC0EFD0 +:1063500082793D9424EF779C5904FACEB437BB057B +:10636000A637BA400E82AC2C0D8EB43703917E9BBB +:10637000BD693EB7DA99E8BF1E8B4EA50F292703EA +:10638000AC7C15FC183CDF792C3A6DA7780067557A +:1063900027C5039421CDA76BE0DFE07A27545EB8D0 +:1063A00048B3E45584AA2DFC0AE401BA815E89F859 +:1063B0006CCFA95444304FC6495F528BFB80495F74 +:1063C0008A2FD4EB85FDCFA13E71C2E7693D17F559 +:1063D00005E00DCA40F1B00EE747536FB855752F71 +:1063E000F8C5762D5BB7C90D7981130A66031E6760 +:1063F000CA4C3F935EBB5E30C7A57A63A64CE1F101 +:10640000865B08330D595CABB0FF253C8704AB7548 +:1064100092807CA6888EF9447231B5DC34461780B0 +:1064200023BD1EAEEF24A585E865C8AF09927D5F48 +:10643000BB58CEC2AFCEFDC6846F83CCF4A6598EB6 +:10644000B5FF75F3FDCDC4A7AF222664B3473A610B +:10645000FFA100DDC5F7B52ED887A0FEEC23C89FAD +:106460004B65E6E7F715A708F2B7142B85FDC8685A +:106470009FB518F6A3BBBC3CDF91F737C7BD9AE3C5 +:10648000DBC7E9E39CF75A99E9F109DC2E77B6DF1F +:10649000C0D729D7B37C06B99EE533C8C5F249D029 +:1064A000F3B2C6F639D24F9C790D37001DDDA4A595 +:1064B000FF8152C42BEA7D737D773DFB129EF382F0 +:1064C000C52D981FB88EC39159076FA7FBDB4ADE15 +:1064D0006F6165867FBF96A633DBB714D87FE68CE5 +:1064E000CDD7B7C9AA4D9F99ED4F48FA3765F463E8 +:1064F0001BB8DECEF8CDF1AF6AC03FDBD03F20291C +:1065000021C30FEB7C60441E701BBCE7263D865008 +:106510009A89CF8ECCBF1F917FD12D63FE45A30EEC +:106520002AD91377E45F68767BB8CB610F9FEDB90A +:1065300064BCF6F0D99E3B46B1871F92C7610F7BC2 +:1065400003B5911BC847B0872FD0FF20823D6CDC7C +:10655000C4ECE119FAE3500FEC5AB1B80EECDD3996 +:10656000E67EB07E31F07DF842B61F3CDDD982F682 +:10657000EFA58A7E00E8F616246B02FDE2BA8EE6ED +:10658000E903D9F59259BA27B1F87C7BFE952AC662 +:10659000E91DFC31C8F9CE19A7FFB8C6CF16FF9781 +:1065A000E766F4E4A7B59E9F2BFA10CC9B9EEF2CD8 +:1065B000F317A8DCBC8572E3C8DB48F37F85C8EC21 +:1065C000209252965AF69FEE8A4FDC6FF3672BDFCC +:1065D0003ACFC7DD201F1F65FEF1FB6DFC1EA62F05 +:1065E00070BF9239DEDAF36F182B7F21ECB1FAC35A +:1065F000228EFC854FD9BF31CD93F6334CF37C8A84 +:10660000FE8DEACCBCD5D9E6CD952710288DC5D115 +:10661000FE8E8A04F0D4B920D6037AB7B3449437F7 +:106620009766EE6398F3347BA6E27BED1159043F45 +:1066300072FB9125181FE974B7D4611C315F54F7C0 +:10664000958E84FBCB1EB61FBB5AB74E7B6014BF22 +:10665000998BDFBB6A579F45B8FCB3C3F9705FA045 +:106660006DE0B6232E3897450A4BBDB47E1B1F0F35 +:1066700092BE5EB3C459A9215A07F0BB8A45B079CE +:10668000E97C77E27C63C1779987EDC3AED63BA600 +:106690003D304A7CF6E386CFC4E3951E8DCFBF0D17 +:1066A000E737F1EA06639FD2ABBD52C2B8837BC81D +:1066B000C3EEADC5D83D10538F489522C601A97EC3 +:1066C000B915E5A8CF6E97B803CCAE5CE4617680CF +:1066D000CBDB82F269E6D30712EDB84FF9139DB612 +:1066E000F380C9277E37BFDF1090300E2B73BE704A +:1066F0005DD21F87F5F4CC2E17815FFE85F361977D +:106700004ED745CFC75D7C1D3D3CFFCC9C8790F2AA +:106710007B56405C532FAB02FFF4F738FE15124056 +:10672000FDA9001EE6C0FD8C4D640A454D8F87C74C +:1067300097CA4819F0EF86851B2E03FB57D10C4FE3 +:10674000B6B8C4487D44BC00BF6BA1E82D87FCFCF3 +:10675000D94C1F9148F5187109168F35E960E25F31 +:10676000AA9418FEE1FE31DC2FD045BC3762D2215D +:106770006DC73FEAB40F359EA7CBF0EE0AF03C6E32 +:1067800022DDB142B0AEFF4EE40373FDBD1E1E4FCD +:10679000F96F5AFFFDE04C82FDF6D0B9F7ACA0A02E +:1067A0007B75318647BD72CADF96F3B33FC0F27D79 +:1067B0004D3E528676F497D0798EFCADC01F19F706 +:1067C000FD118CD79A290F84DC62BB1751CAEFBD2B +:1067D00098E77B6F2B3BDF6B9C2F4A2B37E3FD1831 +:1067E000C4119D724A334919A5D88EFC61BEAFB55C +:1067F000CBB6FB1ED126D916C79F4C985D32855863 +:106800009ED371269BF7961CCFCD389DECD0DB66CE +:10681000E98CD3FDD9E388D38D11E733E3B63B8808 +:106820002E28167CB69511DBFD48273E0B3576BF2A +:106830006D12BFDF262F60F7990A4802FD0DA4866E +:10684000E567493C8E6BBEAF2A4C9F28E43D1DF6A0 +:106850004D990C19A8B71CF430E9D0554E78DEBC20 +:106860001E88D2F67C4EBD2E4E076F94D1219FE339 +:106870009FD472FC094400FE0D2DB0D343E6F82FDF +:10688000E07E0FAF03DF32A783EC783E47113E5224 +:10689000DC74A6C2F55C9004ADF4206A78D4387A32 +:1068A0009A6FCF72BE8B154EFF009D6FEA47982FEF +:1068B000473F27FD2FE5F4E9D44CFAD8E9D7596DC5 +:1068C000A88CAEA41EE856C0E95660D2A98EE15746 +:1068D000A1FF019D26353AE9A409A09F1562793EE2 +:1068E0000A7DCCFB60B2A25FA3C03A5EF7A23F4B29 +:1068F00049F3D3C10199C2BBB598A01FFD5F2169BF +:1069000084F62BFA6B1EF2D1B66A9282FDAEA86CA9 +:106910001FF3B3C2D1CEF2FE56AD61543FEB9D4999 +:1069200096D7D0955448FF8CDCFD1439918078516E +:10693000A866B81FEC8B825A0DF393001C80438D20 +:106940006878BF73379713E464CB3D2CB996D909A7 +:10695000A13AB63FC9BABC12FCC7A13AA6A7E5D86E +:10696000A2DF49F0BCC68E4FE738B9E96BC1AB2B4B +:1069700077BFF1963D142FAF4EB38E9FAA837587D4 +:106980008EBB306F35A4D1D32CAC47530B711D5A3D +:106990002C80E5D0C23A568F7743FBD380A0B92034 +:1069A000CF6C9DDE1A677E947D7DF8CF3C77946531 +:1069B000F062C2E1E49FFF2EFC7439F0D35DCDF8A4 +:1069C000E0FD5A922259EC5AB3CC3F2D917E6A4F8A +:1069D0000517F476417FA5522410CF501650BD46BE +:1069E000F9EBDE9B7E89F910B2A60AD6FBC28715A9 +:1069F00066C7CA706F15F482A409CB82D676960753 +:106A00004CE5E890827EC1830AE4A76D9306752E5B +:106A1000279857B8EDC37F57C0FE0B36C9ECFE6B05 +:106A200060974D6FAC52DCB6BC86B47E899021D1A4 +:106A3000721E34F787139EC431D87FCC7B1C7284BE +:106A4000DDE330FD92A6DFDB8987FD49E6977C28F0 +:106A500049A695BBE11EB882F5E929A202FF4C4F79 +:106A6000A92AF0CFF49456C0EAB102A8DF09F1B91F +:106A70006980FF088FEB6958EE4E56E0F39DC91808 +:106A80008FE7D560B98DC7FDBA9375587F2019C7B8 +:106A9000725FB2119FA792092CEF4F3661796FB2E6 +:106AA00005DB1F4FB662FD074903EB8F25BBB0FC2A +:106AB000A7640F964F2753D8FE64723F963F4CF65B +:106AC00062F94872375F477D9D80F0FBD04F396394 +:106AD000375DA795EF577BD14F3F9DF3EDE1976F62 +:106AE000F501BD1EDEDD30AA5FBEA4C52E3F79359F +:106AF000F67BAA5E8A2E6BDD1329B2F58F26CA6C4F +:106B0000ED13EACEB3B5E7EB55B67A307691ADBF6B +:106B1000BF6291AD3EADE773B6FE53BB1A6CF55242 +:106B2000E31A5BFF735A57D9EDAAA635B6F68A9DCC +:106B3000B14301F0AB4F2131C8FFA93ABCC1D63FE8 +:106B400076F09BB6FA6C2FDBDF29DF14401CD0BD3A +:106B50009BD93F335294EB214F728F81E702DA1EAB +:106B60008176FABC88F743BA98F776693FE6774AA8 +:106B7000F17B7327B6601CD13C3FD0F3DC6C2FC88F +:106B8000C1CFECE708D36F54C1E322E03681EFC7F1 +:106B90001045C27E0F4BACD7655E85E5979B719B18 +:106BA00098847EA9193CDF24ADDFF6907E2FEC039C +:106BB00044FA7FE06F846BE867689F597DAC6EAEE6 +:106BC000BBF2515AB7E0EDBC07ECED3527ECF57997 +:106BD000C7EDF50A1E0F269284F9A6BEE353ABE07B +:106BE0005E22E1F743650E5713C76F57B277D6EBB6 +:106BF000EE0CFC0AC5B70AE7A3941656018FD5EC34 +:106C00005EE174C2DE53A8FC6AD81E2B8052DECD32 +:106C1000EE3DFB4E5C76440865EC39AF46C7B5C027 +:106C20002557D8E15434A64FBC95F6F53AEDA7EBBD +:106C3000BD1FCD7E1EAFDD74B7F9BD147E5FC3BC32 +:106C4000071ADDD833007EF5E86A15ED01F74C31FF +:106C50000E7AB5B352ACDB0B7632AD4319BD39B504 +:106C600009EC98E881D227C0DFF699D3FD0B412FBC +:106C7000475BD4D9E0B738E9D5F8777F1251F08F68 +:106C8000450FEC1016D171FEC3ABE2F3683D8B0BE0 +:106C9000B53DC9E238875FBE4A057DF16EB81CF587 +:106CA000C5A9A73C3AF82F4E15B0EF309C7AEAC23E +:106CB0009F02FFFF3E79A4C0FABD8C53DFFFC53CA5 +:106CC000371DFFD413BF9827619E73CAA6EF9BCFD1 +:106CD0001C9B07FB83B18854C0BDB5F5AA4C304F4F +:106CE00011D60B7BDC6A827ED1BB0BE54E18BF70E0 +:106CF00092782794217F298E63DE1BA072508AFE32 +:106D00005489BF77C48DEFB53DE7C3F1364C63CFEF +:106D100037E417E239A02D5F6B03B9A77FE3F9636E +:106D2000C3E586670AB4BF3C2966D07A3BB52AB171 +:106D30003D4AF03B331F94928A522AC7D262753182 +:106D4000A4080D97307D619E57BD3F4B9120D425FF +:106D5000C315A2EFB5D1738D81F59EC550DFBA8002 +:106D6000D5D537D50160DF5BC5961D2BD01E4EF4FF +:106D7000C0BDDB0FE689B3C1CED1FC65B82E337E32 +:106D800070E8650F83FBE512B49F834302FB9ED23C +:106D900087147BC0179CFF831231F2AA08D995ACE7 +:106DA0004078E8733D4C8DE98961F65D8B891176F9 +:106DB000EF3DB89CDA11167E87F75F55383DD0BE9F +:106DC00089E5E17D8A52D170D3F51EE0FB657F52E3 +:106DD000C171EF4DAA58FE3819C1E73B931A9607C7 +:106DE00093B151FD97CE72ABC39EB97B265D059DD5 +:106DF000EF6E9E07F2C74AD128BF20F7FB7B924770 +:106E000026D44EE32A91E2AF78238BBFE6ECBF494C +:106E1000F84A03E52FCF2D527C1FDAED89A8F53E05 +:106E200064873B118543E3F096A76A6BA32867024A +:106E3000C87354122415E428427A41DEA2911E013F +:106E4000E3BEFC7E05DA27B4E199E2F70EE501BF67 +:106E500054925E004BAE4C1090A7F925E59B405E26 +:106E6000C94CFBF303828879FE30DE225ADEEE8DB8 +:106E7000BFE385B843418DEBFBB4FF7B7D1E0DE482 +:106E800076D7B37F92210EDCF1AAAC805F2D7AF029 +:106E900024E62D77884332C443559FB204F2013A69 +:106EA000E4C4B9E0AA527D3B3BA07E7728F108B448 +:106EB000538DB6E4700D951B8FF17FA0DDE723465F +:106EC0005D319DDF6D7C19D65B4BA40EE533D83E5A +:106ED00019F2A7043A5E17B4032F603C49E8D017B3 +:106EE000D07A3EABABDDA4C3A075BF8FF913498048 +:106EF000C95DBAAED27A96FC59B34CF793583FA20B +:106F0000B0D25C67F3A13FFD7432E4B31F147AC1C1 +:106F100087123DB803F10DFA09F4D181E411B5DD12 +:106F2000A4BBC56E9F0FF919B08FA784549980A692 +:106F3000227E972E3AAC6B9B807E29770C522436AA +:106F4000FAD9FE327F888E63D1E7F325FE9D3DC7D7 +:106F500077CAF0934E40BF6D2C9E105D3D2483FF99 +:106F6000FD408DE19F459FAF5D595EB589D2E93502 +:106F70001F1BB795187EC8DB21611FDE3F30F3254C +:106F8000DE76E44BDCCCF325DC9BD97D8FB5A5BD4B +:106F90008555E0DFF7B27B276BF3793DDF5E37BFC6 +:106FA000A3754035F20B208E7C60C714B8F7B08E05 +:106FB000F45C07F71CC8CF5C04F4D5EF06E6E75D88 +:106FC0004CEBCDB40EAABEB96FF6E7601DCDDB4425 +:106FD0001150702987775D1FE5A700CB4B830F0900 +:106FE0001DD07BCE97281FB46FFDF112EF2594AF13 +:106FF000CB7455A4B44FF99FEB50A02EABE792D9B8 +:10700000501F443E5B7BB9C83FFA30F813BD9CDF8C +:10701000732882F1A31D1077AC6E54D0EE2914E3CF +:1070200018FF2147593E13B0C0028A6F577E3BC6F6 +:1070300089FEB343C4F336842DE1FE43B5448E4844 +:10704000B4BC5BA6F4833CA84E09DFA3CFBBDC0530 +:1070500040971E1DF2BD4817D3CF730F7A307FAA19 +:10706000BA45BF09FD06EA02B477A690F43FCCB753 +:107070003D87EBCB0B55B250A2FDDEF395E27E5778 +:10708000DD78E55A786FEACAE5FF57D7E0734E29F5 +:1070900003E3482FB1FDC1B735DE0479D5AE5F04F7 +:1070A000629BE8E33E71D1F9B750BAF47919FD5CFF +:1070B000F989AD3F07FF7E7E39C1F6FCC4EFE15E82 +:1070C000C6F0444583B843FB103D87E7417B4C0540 +:1070D0003A5E02FA03F0662C5DA283FE9313B7803A +:1070E0007C7EB77B6907E4DF51BC4F5528DEF7F99A +:1070F00068BD848EB7499FAC5AEA17FE85DA052031 +:107100009F6469874EE555CADFB916E49DB6FF0452 +:10711000CE63CF14104E17D65E5D66D6A9BD45F579 +:10712000816B13976F0890D1FDA0DAD2BF96CAB7D2 +:107130007B116B4FD2F9808E607FB616C0BAA8BDA6 +:107140000BEB3A574AED13D8FD32B8BF72A96BC5A5 +:10715000E767D2E79E692406210D5F3ED3CBBE7C54 +:107160000DF75B8A278CEB0F3F1F48013E7CF92D02 +:107170003D1E682F29C773A23FC5C68112E8EFE7FD +:10718000F7F8047529DAA3DE0A4B3C9C64EEF9613A +:107190001DF21008BBA72B399EDF5FAA0F94D0F712 +:1071A0005B8796A2FEB8D7C7EDB612E68FBE356EE6 +:1071B0005C06E7C8F3867B17811951797AF0592864 +:1071C00067913F2C02F51953F20F41F9A04F433E4E +:1071D000A952672F465558D37B08C369DA5014F477 +:1071E000D75C57AA0DCECF790B7A5D30CFA46BCB8D +:1071F000CF326EDB8F7905DB02227E5FAC2DF0840F +:10720000BAD2F2FE6D7E1E57E2FAC4AD323E6E2552 +:107210003D0BE1BB2194F6EC3B2F5CBFB8B90354A6 +:1072200022EC9C2FA93115EE492D0C56A33D7782F7 +:10723000CBBF6B60FE97C0FE90414FD0FE7BBCCCB5 +:107240002F3B1C25BD60DF48119DE07EC7F3093749 +:10725000F2794D7D01F95AFA0C7A2EFDE274CC6771 +:107260007CF28B858BC03EDF09F98868EF0FCBE697 +:10727000F78A305FBDFF9870861A1D4FD789E08668 +:1072800020DF95F41726837C0FBA516FDD95CFE48C +:10729000C95C77135FF7531CDE0E37D3875B92EC24 +:1072A000FE957CDA4F527308F99C9FF9C13C89D551 +:1072B000C8679E0805B314FC8286017835F1A014D6 +:1072C0008B2465F51F9E0EE1FB4FF958BE9119679F +:1072D000CD1577FE969F7FBF6C445C5543BC6F4CC9 +:1072E000D3859D5B3606F549A0A79F59C4E076F289 +:1072F000C1B08FFB594E0B0887F9FC3D1F5392B26A +:1073000094C0EF5BC8A7256C37D79B3EBFA5DBD9E0 +:107310003ADE51D9BD5939C2E4553EE062DF618998 +:1073200048C3D67BA97EB0C3A766E4CCBC2F3B7212 +:107330001DB1411DF8AB9CE9D9917268A0FD63AE07 +:10734000D3A3D9DB9D792C69B84F4FB0ADC394AFAF +:10735000CC7A0AB11DF613BC0F2791EFC039AE9954 +:10736000E76934BB285F51F8BB0FA7E230FF3BE66B +:10737000B9E120FB4E6973DF0E9E2FA2D9BEE7B3A1 +:10738000EEC02D78BE5BFF7AC01069FF75A097290B +:10739000BEBA0F38EF27C7FB276B99FE274001D2F3 +:1073A000E7EFA94D51B037544E9F42B1DFC5EE21F2 +:1073B0000FBA400F74F8E26F32BB8BE812A5414759 +:1073C0005AAF2A1D204777CB19BD0B798A77FB5816 +:1073D000BDD6AF74B457E27E8FFD55DF7D6867750B +:1073E00078CDFA6EACDF2DC70E815FD478CAA38149 +:1073F0003D42DFD7415E8D6B2AF0BCD351468AC037 +:107400004E3C5CC8BEBBD7F194671F9C1B6EF72631 +:10741000FC3E0B1E4E4DFCD514F0536719CFB08DBA +:1074200037E5ECC6A3F3F7015ECDF6C38517E1F8A7 +:10743000F43D0DFDFFC583D7C13E5AF89407FDBA50 +:107440007BDC767937CB2F7379EE4CAAB67B9632FC +:10745000C837F0196941B9F6440A6CF26CCAB97CB4 +:107460007A324959E2D927F83E9FE1AF29D8FE1474 +:10747000A72BF8F5469FA72CC73CE78F31CF2CDB15 +:107480003CA089D3DF3D1BC52FECBCB7E3D48B6692 +:1074900069EAC5413EBE4412B7FA697DCD50EFA5F9 +:1074A00020F64BF3EB4A20B57B8A8F9DEB6BF6EF12 +:1074B0003804EC78BB27DEEB9BCBF25880BFE77B30 +:1074C000E227815E66FD6CE523E537D737420FB2D0 +:1074D0003C6F7E8EDF188C7D0EEA1BB797A9C628FD +:1074E000E735A79EBB74843E64FAEEE39BCF65A3A9 +:1074F000E3C8F9646CCFEC6B0962CDB337E7DF18F2 +:10750000D52731B94ACBB90E722E959A7A8018A038 +:1075100017EE32DB8D93686F3D2367DA099ED73211 +:10752000EFC3F782EEF299FDDFEEA82DCED2DFEFAA +:10753000E85F66F6FF00FB3BE131F50ED4C1FE9338 +:10754000FEE249DB8700DF0ED1315E81399ED8092A +:10755000E399767F5577F0A74639F067CF42D8C7D1 +:1075600087BF4A34B87FF15D29E68B59F6BB2ACE36 +:10757000A7F269AF0DCF19FC06F03989D8E9B9F146 +:10758000E5CB46BD87FDDBA4FD1EF68D898D782FEA +:10759000B48AD3AF899E1C60FCA63D2E9BFCFE1DC9 +:1075A000DEBF1578CFCD61CF5432F9FE9B83379A79 +:1075B00003DEE24F15DE6D5EA66F77F17289DA3277 +:1075C00000F70E966802DE3F5C42FB7AA9CC5E466D +:1075D0004B85964B246204F0770152382ED4C1DFDC +:1075E000F1A5BF7CEDF5CFE2F74122A235AEE90A65 +:1075F000B0BC5527BCF0FD5F885BB741FCDA33B205 +:10760000DDC7FDFCF79C7F27B1DED3A90FF03CAFAF +:1076100062F61D5CE77B24C4F326948868CD0F30A6 +:10762000EB667CFDA3C3B38EBC6AA1C3751C1EB9F7 +:107630009864FD4ECF79219ECFA624305FAE33D221 +:1076400030AA7F7FFC705C6783637D80CDE3CE01D1 +:10765000C72F831C0ED5C0F36197F671C161C78730 +:1076600031063E5EE67092D3E7B0F3A7C2F8BB2BBB +:107670004CCFABD9E8C9F3AFBA944F16EE7BC680B6 +:107680005B097E3A74DCCFE1C845C7F6208F6BA951 +:107690009F2C1CCF8C01C763263E2209A4CB270553 +:1076A000C7BF8DC1D7B34D38B44F161FBF1E038E51 +:1076B0006B385D5A02CC2FDD55C1F3D739BF8299A3 +:1076C000F499AADC7CEF2BB77FC7590A38BEE3FCDC +:1076D000FA24713CF9226FF1F58D25276F2659FEAA +:1076E000D0DB1C0F4DFB5D18DF59A3B13C9FB1E609 +:1076F0005BE34E158E9687BE76BFCB16EF1E0B9EB4 +:10770000CE00FBAEC94D29FB7BCDBD7E475E91C14E +:10771000E96DC7EB083AFE0FC7E73D01B6EF8F856D +:107720004F535E3E2D3C8E259F39F1186179681FBD +:10773000371EC782E7DF008FE3E0CBCEC8E62EF02E +:10774000F3BF4FCD36888BFF1D9FD9FBB7FC9D2F14 +:107750003F163CEEFF3B1E3F163C3E336E3C6E56E2 +:10776000E0DEF4DFE5FBE3916FE739F1D3C2A77305 +:10777000DE5CF8C88557E77CE6786BB83D375E3C41 +:107780008E058759D68F179F8EF3EEA7864FC7BCFD +:10779000FF657CF2F1CE1A9F63C06196D78D9B3F47 +:1077A0000DDCF7F7F3EF18CCB86FE3D1CBE9FE7E31 +:1077B000AC6ECE1CFC8E9AA4CF5C3693901D2196A5 +:1077C000BF3C83C7FB9CF3EDE0E7FFA3758B9B31C8 +:1077D000CF3AEEC7BB03C7C5D8CFAB21CFA7C18572 +:1077E000F130E77B4739BED687F2CDFB44C1B9F40F +:1077F000FD86E75D78DF2DD7FA489D655D658C13C2 +:10780000ACF9E34E7C1F25DAF66A88D3D46787C3C8 +:10781000A4F3F1F8B28FA687E2D9E99C8B4FC64B4F +:10782000EFB1E0B92E54364E3AA7B05F98A47FEF7F +:10783000F23CF6BD62CD0D71B886131ECCAB7D1E39 +:107840001EF1DFFF09D1FE0D75B3D9EF5599F995FA +:1078500012C17CF5EB779EBB0F7FA767F932ECBFB7 +:1078600097D37F049D4CFEE2BF3F356985E1B6FEAC +:10787000DED39B21333EDC520270F4C9FAF98FD17A +:10788000F18F7ED183DF25F22CABDF1AA4FC73FCD1 +:10789000EA7CC1FA9DA6837CBE792B987FACEFC5AC +:1078A000845BB4F8555EE2EDF4FD6B87B2E0EF0067 +:1078B000F79F5D991078BEBE5ED260C9C37AD5D1FC +:1078C000EE7CFFB95008DB8FE7F80ED3613E7F6393 +:1078D000E3E8EF93E513F8EF3AE9D3ADBFEBE4C487 +:1078E000DF15A1C4CF43B47C416879F9EB204F0B7D +:1078F00015E4632269B3006E130F4B14D2053F7970 +:1079000068D2E94B932B914E263CE67C900A04F911 +:1079100023D53ACB2B2AE079A0176EF3A636615C0B +:107920009BFF5EA444E10AE2FC2F033FE49ADF1CC4 +:10793000372C917E998EEBF3E8D321FEE55C87D955 +:10794000EFD89F167F1EE0EB3B2AAA9B4B47AEDF8A +:10795000A997A6EFB6F3CD5F422C0F209CCE936E75 +:107960002969B4D0EF8310FBFDD2B3E5A747C196D8 +:10797000A0E5F45D2D6E8D8E7B95C4F3C1E9F856BC +:10798000FE7890F3C730EF1F7619BEF3208EF60213 +:10799000D32FFBF77DB3249B3FF828BFC7F450A833 +:1079A000C2262FCBEA6777C04F16527E8982FAEA49 +:1079B0003B7A5109C8DD95128B9BEE975B4A6603B3 +:1079C0009FCB5A33C435C7BB0E13DF39F528C773B5 +:1079D000DF8B7137F8D12B97337EBD62F980D84C9D +:1079E000CBBD5C6E4F4257CB38CBF2044E9F449BCD +:1079F000374648455ECF96AE0A94738C7BD5E5ED4D +:107A0000DA027950A49D7DD776FAF23F6C84B86A89 +:107A10009FCCF20E9FBF2398828416CAAF363F7B5D +:107A200078F90749C82B5B25C7A6B33C01A69FDEA2 +:107A30002389CABCB9193D35422FB52F337F7767EB +:107A40007A43967C4AF3FBAC263FED4F35E45D6FFD +:107A5000E1A7D579B28D1EBFE4FBC13187FF6CF978 +:107A60008BCC2F46D7817933BFBAA4642FAC23DCEB +:107A7000F44112F2ED57E7317DF67EAAEC2958AFBA +:107A8000B97E739DABF65D341D9E5FD5E8B49398C7 +:107A9000BC5D51EFB73FE7EF57B8F4B518A7FD3C11 +:107AA000CB3B30C70BD7517CCD8275C537074B33E5 +:107AB0007836F1B9CAA3DD90FE5D290AEFF5FB0225 +:107AC0007BE13EFDC4B6A1AF031FBD1788E7155883 +:107AD000F8F42B79763D6EEECFD00FF6AD064973F4 +:107AE00067DBBF96D5B9B2C22D7B626F902C71FB5C +:107AF000B43E70EC97AAD8E386FE8DA405CBE3AE26 +:107B0000612C4F707A98EF9F20FDC10B410FD5B9C2 +:107B1000308FEB44CBB2BC55741D2BDCBDC12A5A4F +:107B2000DE96C7E4F3D71B5D981F66EEDBCEF9AE99 +:107B3000BDD9655C45F96D458AEDDF2B6E66F93F71 +:107B4000D7B6D8D743E5EFE8E530DFED6CBE6394F8 +:107B50005D6AF0F225B32B5E4915CC86FB19C70090 +:107B6000F7606734F8F9F74908FE7E6182FD495EE7 +:107B7000AABBFE27903F77671ECBC73F5677FDA570 +:107B80001092BA7137F9F19006F6D3E8FB7DE2DB8B +:107B90002EDBBE3E7D97FD77C8E6C17E530993F686 +:107BA000975C67D1A7BFCFF723BEAF5C2E648D274C +:107BB000BD951FC0F6637F753565B3EFF087BD6077 +:107BC0001FDA9DFD7D521064ED7BB2EF7797C3FC09 +:107BD000B89FF496809EBFA231FB386B21198E8E20 +:107BE00073A2F9B7D7429EED71D1FE7DADEB54067D +:107BF00087AE32FD7F6CDF373BA3409775820AF773 +:107C0000DC574DD0506F7CF9E6D998BF385F657C62 +:107C1000302710EF03FD71C38B1B7E0AFDFB5690CE +:107C200098A065F481138E835C8ECDFD85EE6BAFDD +:107C3000C3BE1686DFA1067D25A56257B3251B7935 +:107C4000054077630D7EAF7E9F4F6574A7762FED5D +:107C50009C78C16EC71EE17C998B9E37EEF68F7AB9 +:107C60004E7985C4D0BE36EAFD2AE88157BEEDEADA +:107C7000FF2CADBF54EFC7DF0B4DD3D3D45FF573EB +:107C80009A01AEF7EBFDA2F5BEA2B3CC69D7D6BB85 +:107C90003E91F3F5B17AC6E7AF7C7B4E705596F70F +:107CA000DECD2B1D973FF2956F8F2E2FAF703CBC12 +:107CB000C1D765F213D8D5AB2C74FFB3832E8DAB2F +:107CC000EDF35EB9C23EAF2927C7E36D3EB04B2846 +:107CD000BDD14E32ED5CD23E07F7A3FF0FE59234E3 +:107CE000D3008000000000001F8B0800000000008F +:107CF000000BDD7D097854D5D9F0B973EF6CC92438 +:107D0000994966267B9C212C01024C028450112645 +:107D100081489054872510361D16438410A2A2A5D1 +:107D2000FDF9CB400043B41AAD229FA24E225A5C0B +:107D30005A034D5B504A0704A5768B2C4A956A6816 +:107D4000914D94D46ACBF7FD54FEF3BEE79CCCBDB5 +:107D5000370909AD7DFEE7F9EDD3E770E69EE53D15 +:107D6000EFFEBE67C9D5ABF4BF09845CD59584AC82 +:107D700023643421C70CA4AA25979023A533121697 +:107D8000E5C2EF44216E426648F45F1E426C7609FC +:107D9000DB1D291D1917A4DF3F5E4B4864102167C6 +:107DA000D65A48C44CC85143C7EFC63809093DAB41 +:107DB000F85EA0ED076C5D7820D503C3F87E378AA6 +:107DC000FE1E7C5FCE6FA0B5143E8E1E8EE01A990B +:107DD000442C382FB94AFFBF746BACA64E4E271BFC +:107DE000009EFBF86F64431221A95DC7B9C0E13A58 +:107DF0005A36232168EBFA5D94E7A01D85FB2287A4 +:107E0000BF6A871C320F276459192DE3BBCEA7EF39 +:107E1000BFCC1876DBAF31FEF21D743D3951F87BD3 +:107E200083879030E2E5AEB0B6DF8A162D1E9C3215 +:107E3000A96DA1E3CC535A8C63291DE655E7497718 +:107E4000D17267026DE482D283E53C42FC2D484743 +:107E50004FC1B46174FEE618228DA2F469880B0F3D +:107E6000F0527A4F1F3A500DCF2C4E97F26D3B37A0 +:107E700052B4527E083CEC027ADE2F931768FD4F15 +:107E800027766D84FA276D06BB44A79855511437A1 +:107E90009AD60B8EC9F932ADCFB03B70DEF2990B9A +:107EA0008DEA712B9668D7533E5FBB9E5F72784B0D +:107EB0002C2464CB07AEEB181518165DE7D26D0BBA +:107EC00037A5D279CAAB1F1D0BF32CDDBADF38986A +:107ED000FE5E6267EBBDD9CEFACF57F87A2D74BD3E +:107EE00071847C087C0BEBFDAE147E01FEADB41BEF +:107EF000E17701D7EDB5674BFCB628DF8BDF377034 +:107F00003CACB41BB01C690B2EB3BB708A50422230 +:107F1000218BE4DA22176DF2CF04A281FB6B5807A4 +:107F20006D6F32FB5E24D9D17574E2B186E1F1C385 +:107F300013D337BA46F58CC73530BFAB2B7FF486E9 +:107F4000C763CD317E02F38C67F46D359110ACFFC1 +:107F5000F8E6CCF07A6F14CE7F72389D33FFB1D63D +:107F60003E3CCA071FDE7D7601C8356DB7C196C895 +:107F7000E0077C3DE9607820ED541E0AA2F2F097FC +:107F80003852D1D20D3F7FC0E54F2F3F27EF921AD5 +:107F9000E5E1588693E2BBB6EF492EE64A2400F3AA +:107FA000ECB8C75CD5DCCD7CEF737A75D10FB0042B +:107FB0005A0FF27F2F9DB970531C5DFAFAD8F8F171 +:107FC000B0CE93BA794F9248DC18E09799B20FE897 +:107FD00074B296E9C1F9C6705C3E9D77179FE7833E +:107FE0005572693837AA3FF4F32EA89243B3E93AA1 +:107FF000E787993E995F259F827241AD967EC7497A +:10800000E0DBA361BE3236DF3153E3B70B28FD8ED0 +:108010007E3F3B3F04DF67FE306E119DF71D3EEF54 +:1080200051E0531BFCCEE01270EFD7F14B173D7AB5 +:108030002246CB279CDF8F05B4E3BCA3D3CB7A7E4B +:108040009BA5E3B71DA64026E8BFE34DF317DC0769 +:108050007CD714E31BE0E94A9F971C32831FF85337 +:10806000A57F5A4DBECF5A9DC09FA9BEF59EAE7C3E +:1080700079B4AC2E6621D07D7A6C55184ADEFFCFDC +:10808000C539CD32057547783AC21F71B0F50B7D01 +:1080900041B8DD9A87AA2F4A2761A7CE70BDB17477 +:1080A000EB29A387F6BF1DF4868D338913C64F696C +:1080B0006AA0F07D68E0FAE3C5B8F00BDEE87C6208 +:1080C0005D1D3A7CE9F5766FF6EB8F6143695835B3 +:1080D0006FE5366F33CC2BEAF357B1BAB0673BC2CA +:1080E00006FCFDABD509B8FE63D39F467EF9E8A92F +:1080F000EC7C995C877D0B1BFE23F60DF0732DFB4A +:1081000036CCE1ED937D3B434829D2E3CAE287C7F1 +:10811000C2FABE97847EC399AD8C5FB338BD3F323F +:10812000B50F53C37786E3E9A4A073277E83F1607C +:10813000FF443B17D7671F7139F868B5560E863A6A +:10814000B4F2B474AB16DE05B55A780B1D7636DE84 +:10815000EABA18D02BC704DF54CA68778E0526A266 +:108160007EDF01FA5D85E742C7F5C9DB5C29B40C07 +:10817000E84F9A62ECC08F4E202FD8CB738C8E5F65 +:108180005918BF1B120DDDFA579D7AF99C96EEE047 +:1081900047A8F1B8CDEED1F49F57A5858B7468FB45 +:1081A0001F3530390E35C4A2DF67373138EDCD3198 +:1081B000F610E3E702B0839DF3EBFACF55C29AF9CC +:1081C00017029FB87A9EBF373FEA7AFDC88F896F42 +:1081D00005DACDB258C4EBC76BE4C8045AFF635943 +:1081E0006C93ECEDCEAF1CB902E8FB5559AC01E441 +:1081F000B02738FE5FF9971FAF19897643DFFEC1BC +:108200003ECADFC76BAE8D5FBDDFDF933D79FC3AC1 +:10821000F97B0BF7038F7E2DA39D3B1660FABFD32E +:108220006E70BF46F8318B6E1DFA7742597D3797D5 +:10823000D7CAADD3D0EF3C6A086C8C037A1E31D814 +:10824000811F0B4EB0F8A392FB57029E7F2668E178 +:1082500013F6A737FBA9979FE3E50FE4C3BCC7CB91 +:10826000676BFCDE5997D34924295A2FAF90FCE065 +:108270003774CAAB554BF736BB09E76FE3FE6C6743 +:10828000BFCB59388EB06F955BEFDE944AF1515EEB +:10829000FB68AA7A3DDB1CCCAE3DE360EBE8F487DB +:1082A00015E60FBBEADAEF0BD0FE5FDA0209892A86 +:1082B0003AFD56A7EF8E73FA423BE0BF722560ECA1 +:1082C0008E0F67CD9475FA89F9697A7D24DA9F74E7 +:1082D00068F59298478FCFBECEF775825DF8DB6761 +:1082E0000828D68B5AFFB427FEED9C57D75E3FEF88 +:1082F000070EAD1ED4CFDFCCFD7FC1AFFA791213CC +:10830000195E0BB632BA1FBDF546E4C363D3DF1C5A +:108310000774FB78CDDF8ECF063DB3E4D038003F45 +:1083200031310EDB7F4C979402FC1E94D02F9CBD04 +:1083300075E1A15494CBBF617C7DF45836F2B13D18 +:1083400091FB85269FC60EEAE5F3618093B67B1EFE +:10835000F0E502E85B3203717DC7D7073DE0EB7AB9 +:10836000EDC6C362FE2B2387813D788CD38F8E9E12 +:1083700009F59EE27951528CB0F872A2AD5E4A00C6 +:10838000FF31701FE8858EF2387B334545B9D93F00 +:1083900015F4F8F12306C33A09A7453F703A617C0A +:1083A000E8BDC5FBE010FA7D7A40F683E84D8336E0 +:1083B00063295D8B6D21186FD4D1B257E2202EABAB +:1083C000307B40EF974F087C2643DC393BD6B39E89 +:1083D000B62D68EBB7CE49BFCF2895EC30E4416AA3 +:1083E000D7DBE9FA5F86CAB7080390E2E698A88768 +:1083F0006EDD3C897E1FE26A35D8688F671EBB75CB +:10840000B3858EBB715D200542E5398F0DDD6CB9FA +:108410008910B7DBDF36C147C8E6C7864DB164D2E5 +:10842000753D25FA0FDFECCF20E40D43D02BD1EFC3 +:10843000BB1E2B99A250781569529E81F66F4D7C18 +:108440001CFBCF9AB5E2CE9FD1EFC71F5B3645A18B +:10845000E317CC17FD574E99A85078C789FABD5637 +:10846000A83B63031E431E21531F1B304581F91295 +:10847000FD77135ABFF4D8001CAF3048DBA6C122E9 +:10848000BE87FDC57853E8F710ADA7AE9E48FE4203 +:108490004955D81E9240DFBD57543B51A1F3672781 +:1084A000ADD99C3B989031A545B184D68724FD7009 +:1084B0008A19E034F9F33C74FCDCA42D9B617D0542 +:1084C000F34343E0BB29F45F9B4BE9F7862B4D0157 +:1084D00090DF6725A6F7AC96DA8881FE336B75804E +:1084E00004D17F6B647C92E11B887C22EA39B41E44 +:1084F000A7AAA7B07AEB7A7247A01B79FC2889E972 +:108500009FD698EEBFD77179A2EB45794D3841FCE3 +:10851000AFD2F2500C69B5507B739B998C2AA47131 +:108520007175A28DF32D9FD7C2E012FD48E8B644C5 +:10853000909332C683F87D3A856B1DD707D93E6E7E +:108540000748449901222F1B101E972CDD318DFE08 +:10855000EE8E21C19DB4742511AC9711E2DF698BB9 +:108560008EFB5B3E6C4976603BF07F49726A5E9D94 +:10857000373A0E857703C02BF249146E05E076C9B1 +:10858000D3F3EECE55C19DCBE06E4D64F8A0D3BCC5 +:10859000027E4F6BDB907E0D14D431895A792E68A0 +:1085A000CB3712DAEEB7495C6E3DACBF6B2241FBB4 +:1085B000DCF1036B18E4905882BE802ACFF238C7F2 +:1085C0006BF5E5C1243C32FA7BB5123181FEA8BEC1 +:1085D0009C8BBFBBEABAA78BC84F565F7690D0483A +:1085E000F5EF6C7DD1719CF8BD277828C0A8BF56E7 +:1085F000393802F9B8AB098BFF56C5F99313AFE1CF +:10860000F7545F967A805FC1DFBD3750DB0D78A4E9 +:10861000BF93DC287CC4E341FBB6CACEF4D0AA9D4C +:1086200045C944CDD70AA78389AD1FF06C50D9E75F +:108630003739DFCC10FC45ED3AE8B9C569B9181FE8 +:10864000B6FECFC4A1D370BCF58CBF15163F15285C +:108650004C1F16B425DA4352942F043F087AB626ED +:10866000D61621BEA649F6666FD775BF23EC588093 +:10867000F22D6D9F3C3F282F54C127F85E2F2754C1 +:10868000E3317D4FF97F01C825C47500BF8FCAC390 +:1086900030351D19DC37421F17F201A35FAA2D0CDC +:1086A000F008FC74E587F45EF8210BBF17B41D30A9 +:1086B000C13AAB399CC92722F14373D93A96D3F218 +:1086C0000024A3E8BC1312997D6A6D9938F2463AEA +:1086D0007FEBE33201F62910FA939CFA75717FDA89 +:1086E000AFB34EF5BD07F1CDF525750F2CD1F63F93 +:1086F0004B3A35658312C58F138D7C14DE295C2EB1 +:10870000A6C2BA4723FE4296448DDC92C2FCA87EE4 +:1087100011722AC613E3242531FAD879D9A97FB872 +:10872000DDA3FA06F380E4212BFACFDFBCDE917AD9 +:10873000D13BD3B8DE61BF1FA26E2EB473BB7D03E5 +:10874000258A932387270E003FFE9E14D9739ADA59 +:108750009599527023207EC6095F25E9A7F2BF884C +:10876000C563A3FEC4EDB4F1553AEFCCB698904C76 +:1087700049372360F5D8547ED9178D12F2D93D14AC +:1087800025ABF3BBF2C73D29269CE74869764250EA +:108790000D17C7FF6D90BF95BBCAA7A853B82B0D87 +:1087A000D9AAEF3666771E8FF70F4BA2F525061272 +:1087B000443E9FE4D2F833D312B5F186F0675C09EA +:1087C000FE51D04FDFBE27FFC7056125CA2FCB075B +:1087D00025D7C785015FC92D84CB67C4500D74941C +:1087E0004948A2EB7F3B2993F989E5F4E388E878CF +:1087F00047A54086047192CBEC833C05A50BAEBF28 +:1088000044BE7BBFD10974967C7574D699490E6EAF +:10881000EF3A46C13A5DB18C0F0F5989C50AE3D3CF +:1088200012E9CEF5D21FB2063783FD10FAAC530F12 +:108830005E6171B5F87E489A9661A7F543AE4179BD +:1088400075128E47AC2AFEA7E31280E70F5FDF7B2D +:108850007A02A587B11F1BCF49E79FAE928331A54E +:108860006CDD8B38FF2F4A8A6579F95836DE212F67 +:1088700065139867005D0F9587B76282B9B508D711 +:108880000F183D29DF83BE7473BAB94DACBECFC992 +:10889000C6BBC4C75DC5EBEE78D64E4F9FDF3BF934 +:1088A000FE98C4F4580369D6FB3504F8999000018A +:1088B0007E6A28A2EBE9669C1AF0535C68C770BD1B +:1088C0005DED0AD37F1BA470633695830D469687B2 +:1088D0007FD81EB62776D3DE144BE3C6DCA81D1264 +:1088E000FEFB572DD312402F3E91C4E036F1F852D3 +:1088F000C0B181E72FE22FC762FCD9C8FD2725E769 +:1089000034D25929A443D2AE461208D9557436DA66 +:108910000D1ABF3FFE723CF6AFBE3C928493AEA5EB +:10892000AF0BF03B49F168E28CAF4ECE4638F5EB29 +:10893000D2E32DC2E115757F8E3289A8E02A22F696 +:108940000D304F11D1C6253DF91DBB9284DF226B3E +:10895000EC4C145E93E6F7088DB742EAF9CFB1F913 +:10896000A3F3C692906ADEFB93FC3F4DC2786C9CE9 +:10897000FDCC505A507EBF2AA3FD60768A964D36B4 +:1089800066CF412F8B7805E4D84EE395A2A4A23799 +:10899000406F74DA37DE4FE8918413517F4EA27D29 +:1089A0008BB81D2FE2F6A6D3EF53987F2AE0FE92F4 +:1089B000EB29A16F4A2D6F8E38AD5A67519207BFD0 +:1089C0001F9618DF51839E09FD29BF86D4765B8FE1 +:1089D000CFE35C8EAA2F5B357C10C5A70D7FFFA669 +:1089E000FCC08271417918E44B4B25328016632616 +:1089F000313D21FA9D4F627EFC79AE2F843E993E37 +:108A00005FDBEE3368E78232B64F765A6D27A4EC0F +:108A1000A87EAAE1F4F35E3862F2D076839CCCEFB4 +:108A200030BAFC5F021D9598F8E184D2B5E99F1336 +:108A30003DEB28DC1DBF33FA9A61B8DD8C9E45738F +:108A400056D529F477638B64876D27019F6DF5CE2A +:108A5000114B001F825F9D6C1DD5CE88A93F9D37AD +:108A6000AD9ACD9FD1B25F5254729351C5DA599CE1 +:108A7000469E1708AF2B1905BFFB95064A621BFCE3 +:108A80004EC78B71327E496B9130AF9D564B174E5E +:108A9000E99BE663E3DA7C6169716E747DF5866952 +:108AA000B9A0D7EBDDB13ED0EBB7B882894E80EBF1 +:108AB0006424026EF898936D0AC475CB5CFE24A7FB +:108AC0002BBA3E8F6C4F837DD3D8930CAEC6442D0A +:108AD0001F10F220E7CB66A61F657218FC2994715F +:108AE0003A9F7B7D0EDA15D1DE9DC8F5BA9B0477DF +:108AF000A19F43EA09D289E03ADCEB07F2FD164672 +:108B0000C7A85F33381FFC9AEC87220AE4515FDF65 +:108B1000C6F611F4FC98C7F53D5D47AE7A1DBDD988 +:108B20006FD1CED8431C2AF83C96F34DD11CE75C9C +:108B3000585FF5869FC79A25A04393148B76E06112 +:108B40006C27F04EE1B809E0107CA424EE90D2E945 +:108B50007AEEBD8BD865D2337CD5AB7F3A62895A29 +:108B60001E379810FF4D26EDBEB8F0D3CB9DCC3EFE +:108B70003DE30A94C17C35BB1F35013DEFDA7ECA67 +:108B800014EC462F77F6EF237EA42AE6FF575758BA +:108B9000C2B0DEA2390AD26BF90653D84CE952FDB5 +:108BA000EACE8801FCD935C407725DDDB2F3AD347D +:108BB0008A9FF46AFF68C88BB92993B5E546ED44EE +:108BC0005A754402BB9BD6B2B01AF93725D607FCBA +:108BD0000B7E28F807178B6C2189FA45178DA11C8D +:108BE0000FFD7ED11BE3837D8BB7AC4CCE057EDFC2 +:108BF000DE39F9B04445366E973902E532577025B3 +:108C0000ACBF619DA708E8D35042ECC037D4EFB8A1 +:108C100007EA25753602FCDFD7750B3D217E1FB3B1 +:108C200086C94113E809E47B920FFED766671CD31F +:108C30002F06A677DE323238150EE7A524FFF7910E +:108C40001F410853A3EBD7CFABE29B0D209F7D873D +:108C5000B3C504FBA6CBB9FE289AB35DFA8B8AEEA6 +:108C60003F74B2FDDEB4579B240FF2EFF675254E2C +:108C70006C4FCC1EF89DE53F96D3EF77AAF486584B +:108C80004737FAE32980CF76B2ED20D31F11E437BE +:108C900001AFA0A3A0D78B4E0F3B1742CD33FE6E82 +:108CA000A274A5E3BDD52F06C713F2AC97BF173941 +:108CB0005FA7556C9720FE063F33A0824FB433BAAE +:108CC0008A5F76221EDA100F2B2A14A49B80E7C03D +:108CD000ECDB9700FD573853F3805F77F3711FFF8C +:108CE000C5BBC88F2B1A25B6DFDCF8AEA91CEC4536 +:108CF000E82519FCB2A9CC35205B7EF62EDA87A9CF +:108D0000AD2CDE5ED1BA53596C8BF2A9F7C281DB70 +:108D1000818F57B498895502FA317BACE74FAA3F4F +:108D2000506E48C884711FC403A82F49D00BF65A4F +:108D3000E8D74BDCDF24B6C02803E851F7B03CD0BD +:108D40008BBF711AB87E63E397C4F80E58403FE6B4 +:108D5000B3B840D8B1DF3BD9773A7E04F52BF57232 +:108D6000C10E8AF1BBDA85A1F94087BF737F9AD221 +:108D7000F73DC0A7DE3E88F1BDCF4E279E3815DDFA +:108D800000DF2A7EFBC469C2713E712ACC3F2D668A +:108D900078524C6CFDCA7A4B18F21F6F3B4A197E11 +:108DA000122D889F438645D540A743698CCFEA0D95 +:108DB000EB736A995D3A03F01C981D4F981E627A16 +:108DC000E7F19F32FB571DB261BC551D9C8974268B +:108DD0004EAB0FF60D49F0A0A93C2ECA077ABA7A1D +:108DE00076ED37C13AA6B630FE8FE28BD91FC1AF00 +:108DF000549F21BD2F25897C7DD00BF814F17192F1 +:108E0000A52362245DE53309E2636ADB16F0F8B856 +:108E1000601C8B97E1BFEEE26231AFE82FE2E2E542 +:108E2000AB7F930AE5B2945F6329E440C45FA27DFF +:108E3000828BD9BFCBDC0EBA5D4CEE968F6A413E79 +:108E40005F7EBA16E5C356CAF484EDA456BF89F80E +:108E50008B908778BCD67233E4DB4B9E93EC75DD48 +:108E6000AC4F944B619F09F4FB15EA2DD338A15AFE +:108E7000B78F36D0C5F8F92CEC8FA21DA845FFF8A6 +:108E8000E23609F75FFB3A1E891C93807ECB791C82 +:108E900072F1D589633F817D991D0978CEE5D3575D +:108EA000677CF7130AEFC5ED137C605F9D7501E4E5 +:108EB000870E97D507FE2F5583A5107FAF6B7933AB +:108EC0001EF249E75F19910FFAEF260EDF859FCA60 +:108ED000AB011FEB7FF4DA78F8BE3C2C25815F777D +:108EE00071C7735F833DABDABE124E9890BA577E5E +:108EF00065827D0643B889FDBE2301FDBFF3CF3FE8 +:108F00003A1EF05CD75287DF2F3CDF84F5033F7AAF +:108F10006DDFFF80BF1088F741BB0B3F7DF4FBFF87 +:108F2000037C3B33DE07EBA80E2A6C5F50F0AB5E90 +:108F3000FFECDC8F7227F8632AF87DC0E7154C8FB1 +:108F400008FE3C52C4F64DA617B3FD982353AC154A +:108F5000E8E772B9AB99EB6802B93350FCA5D0FED3 +:108F600033CB1C4DB05FBE94AFBF3A97F1433DE5A4 +:108F700016C823C4E6464CE9B4DDECF93BC7033E12 +:108F8000EB6348A115F9149298D17D9C198D6FFF60 +:108F9000B744E9388CAAB33394BFE968DBAF52FF1A +:108FA000F73D23CB17D473FF7CF6FC5312DB3F5005 +:108FB000EC67447E48BE967D53703CD1AED35FE3F0 +:108FC00078A8E7F9113A3EDA9B82553CEF292DAAA1 +:108FD00083FDE643F745C601DFBE7EEE9E98EA5C60 +:108FE000357FB3FE69AD4CEED3AADA6E8675DE929C +:108FF000B370244CB382EFA738218F06F62664D3D2 +:10900000E8B7B52E9E77B013E7B7203FA310279C93 +:10901000CF2B21E49811F1F3028EEF3133BFC9F366 +:10902000ABD92FC0FED71663307534D89B7A6EA7A4 +:10903000B63378697F3BEC9FD3F1ECDFCAC771DAB6 +:109040008C89D83FC4FA4FDECEF6CFC222EF93050B +:10905000760AC61B6503BB12AA40BBE231F9801F2A +:109060002E409354C4D7F005C3A2EBD6E753408FEC +:10907000C13EF433AEA2ADAED1D152E45FF4F4F808 +:1090800010BED375A7B8FDD88EEC48D2D8E19EFCAF +:109090009303B33F37B5D3791F7FE314EAA11AE0F6 +:1090A00077983F785A636F053F6DD9730AF97DFA57 +:1090B0006E469F9ADD5E23C4339FAEF593BF500783 +:1090C000B386F3F716A9BD12CF89ECB1DA215FF6AA +:1090D00039E7FFE5A5A7CE80DEEAB73BD50371F6F9 +:1090E000E77B981C1C3218109F879A8736817DA1D8 +:1090F0007E2DB2724DADA7D98CF8657E7ED19C25B0 +:109100008F42DCB5A28AF8403FD4B44ECBF0A05DCC +:1091100031237E6B76BF8BFC22FC5B6A0F97C0B855 +:109120000E6A77AC10874D0AB4223D9C71D8DE31AF +:1091300029F86809F2575E01F0D781D9FB365960EA +:10914000DE49C40EE36FC9F4EF49C7754804CE4742 +:109150006C3136162BB4FF96128F9D6290E26B7BBA +:109160000AD8799263E2766D09FACD3529F37C103D +:109170005F75D1177BD6A17F55E3894178A6EE961E +:10918000EE617E878D30F825E4CBA9E11BC320FF7B +:109190009F71BC09FC7D6E6CBB1DF0F2F9CF2803FA +:1091A000D2EF5327313E754C6A413DF3F61EEAD7A4 +:1091B0000C8FF263DCCFA97F43EB898A5DF2A19C1F +:1091C000CD30ABE9D9686476CAC1ED4E7629A3EB00 +:1091D000275C8E3EE1FAE7139749BB8F670F0D07B7 +:1091E0003BFB19A73B0E07FA9F8FBB624904E5A81A +:1091F000FA55E69739CDFEBC7B557CEB9CC8ECA4B8 +:10920000C8A7437E1DF3EA10BF38216EF634C3BEF3 +:1092100032A51FD2F716E7A07CC097C5CDE04ACB98 +:109220009130CEA3FE1AE2CD3D67BB5299CBF2F14D +:10923000DDC5893637F3CF5C49815190C77525C7A5 +:10924000A11FE3928B0C56B0437992AFD983FB7E7A +:1092500018D776B8527DCD1AB966FEDE39771CA3D1 +:109260006BF80F0AECCBA4B83DDDFA735DE364AB99 +:109270000FE29DB2C6D070882FC43E805877785DCB +:109280004C855A8F25BA999F101E4C2A402F50BFEB +:10929000DD8679633B9D07E2F1E61B9F67F1781D50 +:1092A000E2E3FFB898FF5342D7077E992B3BB08A81 +:1092B000D9D7385C872B9B2C827EAEBA14A9CEAB53 +:1092C000C6B31DCF6D3DC3E92CFCF11A2A2FE8C7A8 +:1092D000BDC1F8B106FC386FCFFA21CADF4C3F4C54 +:1092E000DDCDE85EB39BD93F119F83DE83F385A07C +:1092F00027BC23A2725D636A1F08FC29F8BC667C48 +:10930000FB40C04F4FFAA124368C7257327420E6CE +:109310001FC4389F1B3DB83FF7398D2FD18FE5F221 +:1093200010F73A930341177D9C037041BC28F4F376 +:109330002DAE40B11BE2754364139C1310FAB4E6E2 +:10934000F5CD9A7B007A7D6A5198DEB28463C3754D +:109350002AFE81BDAEB87C2CF13C56EC6A8E8F2B78 +:1093600012E6871B728EFDB801ED7F4B04F8CC9A94 +:10937000D17613E8AF996E96777B5662F415FBFCB5 +:109380006E884D406F34C7E2795B91B7D1C3359990 +:10939000F391C0BF8833202F0FED6BDD8CEE8B79FE +:1093A000BBEF72F912700BBEF61882A7203FDF9355 +:1093B000FD11FDBEA93C929847D8C1289E199DC5B4 +:1093C000BE02AC675A6ECFED1AF7333D23F84E7CE0 +:1093D000DFCCF97D02E55D287F22F2B3150ACBFBD5 +:1093E0005B89E63C96184FD41F597BED73F8F6AFB6 +:1093F00065B6AF45DD0C180FF30D20BEC5A53E5870 +:10940000DFA31C5FFA7E0A51BE6C177E9557050FCD +:10941000F7C9E078D2F86EF6E93AE71DA7DD4FE824 +:10942000F4CB74E3F40477BD6E5FA03E7B1F813CF8 +:1094300055AC259ECBEF15F4FB3777DE1B08F9A65C +:10944000A1BE63F9AEDEE6D1C36BF5740F6F5FE9C1 +:10945000516FD85905FCBC8FC34D1EEFDB3A7FC25C +:10946000E9F7309CFB82F35AF315CD3E8ACDE759DC +:1094700007F9E3117B3D79E85FF3739B71E3C95F03 +:1094800065CAAFF1858D39704FC415D0C29F5CA1FC +:109490003DFF981A4CD4D4D3ABD234ED336BFB6977 +:1094A000BEDFB07A88E6BB3794AFA967D77F4BD3CE +:1094B0007E4063B1A63E68EB2D9AF683C3D335F5A3 +:1094C00086752D15200F4377CCD5F41BA1B41BF264 +:1094D000E8EFC35A1669E9A1C3E704E06BA08BA5C6 +:1094E0007DA45ADEFEE6EE87741BB15B8B8F84424F +:1094F000DD79D0EBE48F099775FCA1EB2FE42B9677 +:1095000030FE88BD52FF57B83713AB97233EEE7835 +:109510000B939F2EE3F62027EB636F5780FFF741F5 +:1095200045E54FBFA793FF928A04B69F74797A2FBF +:109530007E3793935966B6CF388BEF378AEF2393F4 +:10954000995E189ACCF34C7DE4E7139CFF8FF4C42A +:10955000CFD4CD7583BD2825188FDB4BD7FD15F2F1 +:109560003A739408C9A3F47C9CAF670BEFBF75AD49 +:109570001DC77B6A6D0A96DBD67AF0F767D7E6607F +:10958000195EEBC3DF9BD71662B99DFA8150BEB856 +:10959000B614CB1D6B03D8EEE5B51558BEBA36C868 +:1095A000E4534FBFCB89686F6711AD5E9B5D21F7B8 +:1095B000893EB3C9436D727C577C74E92FCFBFE6F7 +:1095C00039EDD527F34A0FAAF8B43839CE89FB8C88 +:1095D00063C8188C6F7BE9FF8FB5BED283037AE72F +:1095E0006F3DFF902BF70E509FD711E52C60E834AC +:1095F000EA973FF9C483215B144F3DF355F7F8F127 +:109600005B3E4F83A07F38D81F55FFFD3AFEF52BF8 +:10961000099A385A9411CE87459C5F8B74FCDA9472 +:10962000CCFC8675FF9FF2EB016B1CFAE5078C9E64 +:109630000C978AFE07ACB1F83BC9219E99947ED461 +:109640008BB37B29FFFE2199ED034A109960FEB888 +:10965000BF1DF324D6EBCCA7E8F02851BFD24BC7EF +:109660002BA2E5F8441C3FA2C0F83E4354BFE27968 +:10967000899828DFCB5DF9818E1332813FB6A87DB2 +:109680002EF87367923D1A7D5BACC8D7D4D7C5203E +:109690006FDDE405BBF4BB4E796B01798BFDCFC95F +:1096A0009BE0777225BBBFFABCA5288BB8BC2D7D8B +:1096B00032F2602837CAEFC5DCDE89761F737EFF81 +:1096C0003899C59307B89F02FC91DF8DBFF27EB237 +:1096D000D6CFBB5E7C1711A61709694F033D71BD3C +:1096E000FDA9E428D0AFC8121F8A1D7EFDFD7BC2F4 +:1096F00067977EBB9D7DCA37514D23819C5772E889 +:109700002A2DB610F013D96ABCD8AEE2E3F2F8C045 +:1097100017C914CEDD46B21BF627A899F7D8DDC8C5 +:10972000F78857FA5FC042EB79BC3E2624794C9407 +:109730006FCCB4B21AE4A3FDADFF067D91C7CB3167 +:10974000BC84746B0AC84D6E1C9E77F70934F1BC5B +:109750006981A84E825C8338BA08E3126955228475 +:10976000318D04F6DD1B245FBD4CE79393BD75007E +:10977000D4C8D22299E0565E2396E3485B1D6CED77 +:109780008D271D32B4BFB134540770DE40AED8917E +:10979000CF935F5C7115CEEF4072B20F785B6D6155 +:1097A000FBD4FFB0B232544CD8BDB98FAC61889BAA +:1097B000A692606A0A6DF71DD9BF00E6FF87C1EE69 +:1097C000DA8FC852FEDC8E795F09F541B16D54C560 +:1097D0009D28C7EC77C4B737DA0EEB72D7FA131BA4 +:1097E000591EA26E33E3F7BA75AC3E3285F1770E9F +:1097F0002F6F4A61726125A110C17129E5DC883F94 +:1098000046B71C8AF7024607C4ABED30D22586B4B2 +:10981000205E37976F096EC42FF3F19C8F14099067 +:10982000ABB16AFEE9DB78164BA3DF42F928A6A2AA +:1098300005F77F7A1A4FE1F454669AF07CE4B3524C +:109840007022E091B449C81F317C5C23A92592574E +:109850000D479FE952D617BA188B7D6D7ECA82E5F7 +:1098600031129E63B95EFADC094C3D3ACACAFB521A +:109870004913E413AA9C2405CE319A6C1694B30DB7 +:10988000999E107C370D24788F982806CD3AC5799B +:109890003BC17F141F4B007E53583A05F831A5D4C5 +:1098A000623C4894F67468B74F627CA0E7DB9A1478 +:1098B00089C393C1F89D5CDBFEEDFCB6E34327084A +:1098C00063E82765BF2DA4F522C73CA79DCA6DEAB2 +:1098D000B832B8C7B1F35D82C2E8489DF903D0CF72 +:1098E0003BCB1D4FBB68FB07D23E7BC808DF174848 +:1098F000F8DD9246BF53FEFCB088B4401EE92977DC +:10990000704D0A8563EE6F3D87E0AAE9CEB7966594 +:10991000815D714EF4B5E37D9579660FEC3FB540FE +:109920001E1318E50A8587F2D3F300B0CCEA13685A +:109930007D8E400FFFBE1DFE4DF9267B89779D135E +:10994000F290DB243BF829376CA37E0BAD9FFD0121 +:109950001909F9E39EF4D618510F4978EFFE26DD78 +:1099600077A1D7FA2FB9FBE3FF0DE3B7C9787E43A0 +:10997000AA60FB39637879132FF378396709DB7FA5 +:10998000EA5F31260C79BD33464F9D0DF87118C141 +:10999000FBA64461FCF95EA6230C7998B312A98357 +:1099A0003C5A6833C1FB7F2057B0DFE95B42693D19 +:1099B0000A5C464B18F2F447D7B68CD86054E94F8E +:1099C0004A1B7F014BEB30B873310E1B47A2FFC11E +:1099D0003A4AA2EB423EBB99D72757B3BC9CD94F1A +:1099E000F52AD8379D3EB692708A05CF0D7BF1BC23 +:1099F000883C99D801DEACD20835B554EFF88B50CD +:109A0000AF8E26C137DB6839D6BF13EB8596701D44 +:109A10002C7102CC970DF6D3A3001D27520F17EA25 +:109A2000A5A411CB5B480B9665A40DCB5B490796AB +:109A300001623742F94E8A97C78B54CFF7C37D39FD +:109A4000CC83E66F3563BE747A69D0E4E9C63FA97A +:109A500014F70849300BF3C04A306B96CADF38332D +:109A600067F6027847C363D09E8B6DE37AF3032ECB +:109A7000375B24AE475688F73882FF7527ADCF2B6A +:109A80001DE483FBDDF43BE68143732C98FFDB622E +:109A9000F46482FF61854764206F57BDF33B241E49 +:109AA000F61997A682BC566ED8940971406519BF05 +:109AB0004FA38432CB55727E7621834B9C7710BFA7 +:109AC000FF85C363853D2BD827A6F0E33EA1C8E7F9 +:109AD000CD75A09E29A18E039C5BFF82AF23CCF5A0 +:109AE00082909F2AC1074AC89446FBCDF2797D70C7 +:109AF0006E6E6E98E5894B1412017FB913FE8AA62B +:109B0000FB08E58FB955FB31AF1F3DA7C4F6A78B06 +:109B1000E6B42E80F92B97988919F78B1AFF04F277 +:109B20003CBBCAEC817AE57C9657251596F000A8D7 +:109B30006FF56E04399DBDC6EF83BC2A9D0FF3B14E +:109B4000375BD83EA585CE0FFB7A93ABF8B990AAC8 +:109B500007DA803F693B3FF8CB37D3F60A2D33084D +:109B60003B77171362E7986226B1734C1E73ED21A1 +:109B700078B7C4B392F84274DAD9DB9A2476FE98A7 +:109B8000A03FD59BBFF3CC03571C186F825F7003B7 +:109B9000FC1A62F9E4D5B207CE9312C58EE3CCE588 +:109BA000F744EBABEA301FFE55055D1C9D7F56A3C5 +:109BB00097DD5B38C8E47C56455E3BE4A92CA5667E +:109BC0008FCC728F21C82B5B4829CA7D1E61F98F0B +:109BD0003BE0FC037ED7C60D96D526362F8968E07C +:109BE000077D06F6B6273FACA7F509BD01FAA5A388 +:109BF0001B79974ADF66FE1A2F41FE416EF32D3E18 +:109C000039CE00AC1640F906BCB0FB496B985DB18B +:109C1000BE28A9EDB9C519BA1D8EE29C3DD87FA317 +:109C20000DD1D648D47184A53870A7FA1CF9E6A2E4 +:109C3000C002F57E51512AE3F7625E92DF86B26080 +:109C40003E793CE3F73FFE8EE0FB30E77E47F109CB +:109C5000F22759987CF682975ED7BF84EB715E46F7 +:109C6000FD4C4F1DD0B73C95E5D746954E9361FF0F +:109C700068E43323D3BF47BAD2A727FCF784AFAB3E +:109C80006EFFEDA968A7FD86BEF8E52572C6BC6A21 +:109C9000BAEE2FE69B71FF55D8CD7C2016C8751BF8 +:109CA0000953D907FB817625B59EE0BB3DAE009CEC +:109CB00085E7E3009B575888A2C993DA35F5F4AAE3 +:109CC000144DFBCC5A8FE6FB0DAB7334DFBD219FE7 +:109CD000A69E5D5FA8693FA0D1AFA90FDA5AAA6915 +:109CE0003F381CD0D487EEA8D0B4FF822E2942D7AB +:109CF00033EAB8EC0B017D43FEB6DC82A81D1FD60B +:109D000012D4F41FD3BEB00CF4D788DD559A71C8B5 +:109D100049EAB7D17A2DFD1FA38B4F063DE2AB92E6 +:109D2000C8535E4021FB8EED69DD7772CA79D0E3BE +:109D3000732B8C517F0F7A918730CFE9D3F989FA51 +:109D4000B87AE9E1D0211B85AFEA70E321908767FB +:109D500052B579AD12D986EBFAE2988CE75FAA800A +:109D6000439D513A7E0103C1BAF7133C17A65F77B2 +:109D7000671C2E6F33E27B2B741D70B4DA9CA2A596 +:109D8000B7D5A3A5776C8E96DE713E2DBD130AB5AF +:109D9000F476F873BAC56F52A996EE02BF85F47FC8 +:109DA00080DF6F1A9F8752F5798A71A867BFDACA78 +:109DB000F56C573D30D35210D50354A586E13E943F +:109DC000C05B17BD6063F14CA75ED8CAF5C256BD33 +:109DD0005EF0BF990A2E4AD08B71E5FB0BC6A483B7 +:109DE0009E4B237BC5FD88E055D4DF2121E71FA6CC +:109DF000BA60DFD1D71E023BB1CD8CFEE4CE430367 +:109E0000311E383280DC8461C51509E76F30317846 +:109E10004FA7DAB0FFB352E034F437E706E0DA06D2 +:109E2000397B13E38BF7411FD2C5FE11E274D89C36 +:109E3000D2E911A2D3837A7F58E89931A177316EA4 +:109E4000BE5EBBD15BDC9E379FD913A15FC7F03AE2 +:109E5000591442FF5ED899BAC2A017EE1FE45BFC0A +:109E60003231A8E3F876B43B134808F5F08DA5BE6F +:109E7000A75711F0ABDE4F07BFAA4B3C1FC5B73544 +:109E8000CDA5D9E7D5E055BFCFEB48EBC4B3234D03 +:109E9000B5CFBBCBEA43FE3A3E87C529A3DEED5FD3 +:109EA00067A3FDDC7779D18FD9E5F0BD09F5E32B08 +:109EB00058DC38FA985F86F355D9B55E3C67B7CB66 +:109EC0001B9808F5E3F7B1EF05278278FEAAFF6A31 +:109ED000F63D7F7DED9B708FBFFCFBECFB1B9F6D08 +:109EE000C2FB5FD4C8B1FE458D13A17E7C23FB3E2F +:109EF000E664B80EEA83EBF9FC52CB9BF160077F76 +:109F0000C0DE5FE812EFF0F86602A747177AF2B8F2 +:109F1000613C6F2FE29B09158C4E4B3A0237235B55 +:109F2000E9E8A5F7EB4B4810EB934908CB29248CC3 +:109F3000E55412C1EFDF26ED58BF0D42795A9F4616 +:109F40003C46A82F48CB413B3F8386C698AF28F4B8 +:109F500059F03DBDD3EF7C97C447F7CD857FD098AE +:109F6000185801FE83736200DF075990C6F2DED1F4 +:109F700052EC8387B27CF4FB397EDF2CBAFF5D8024 +:109F8000E736689387C0DF9D96C6CED54C26857888 +:109F90005E787221BB773719FC618A9FC8938A0368 +:109FA000CEE3E15B48DDC4CDD13C912E7FAC843063 +:109FB000FEC8973D434158EE4FCBFB01C4D1BB4097 +:109FC00010D308B92BEDC66F8732905FD1BFE9ADD2 +:109FD000DD317ECE6717DF079D19F01A903FF3B48D +:109FE000FED3FD7CFDA29C4C2A26C67D83EBCA5F76 +:109FF0001FC2F3DCE5CD66C2CEE790343887534903 +:10A000006A91AE6786858CEC3E2AD33BE59CEFCA0D +:10A01000393F9D6932231DCEDE2985219F53B9ED3D +:10A02000ED13C06F3DFA4DB90350DFCCE4FCF9FEEF +:10A03000A1CA8D4CAF737FEAC921F2D5A151B9A74E +:10A040007E6208DE2BFC7001D38BE0766BF4610F2F +:10A050007EA28BD7051CE92109ED445FF5A1538C45 +:10A06000CFF5619A18DF4F598FD6B3F857A99AE107 +:10A07000C1C5CBF46ABD5D09AE033948218D12D448 +:10A08000334907961E625FEFCA862B993E03D4338D +:10A090002CB5D3CA406F81FE83F56F3E304AADFFC9 +:10A0A0008C3CDF6CB450BB1A8F79363FE41194833B +:10A0B0009D79B69634F03BBFA13CDB9E340F6F5FB9 +:10A0C0003B869DBFAA1D01E569A3AD1EF3C7FA3CFF +:10A0D0004B97BC8C367F715323B71B8DC25E0453E4 +:10A0E00060DD70EC536337C6FA3C504E9002A85FB7 +:10A0F000662707DF8175DD4C6A33A0BDC1D22E8390 +:10A100009D68E0F78C1A068A389652154A3BCBB701 +:10A110008FE0347EAD90DD537E2DC782E7E637B900 +:10A120004D9B207F17BDCFC9FBF1FBA9C3F93B09AC +:10A130009B62383E1AE2301E7918E6A3FD6264CFB6 +:10A140004080EBCF064AD56C38F7EEC3BA49B6BBB0 +:10A15000D6B1FCE4A934C45BFB63D9B4FFB13D0ABA +:10A1600081B8FC357B478C83CEF3DADEE61DCD1457 +:10A170009E2F0F33F3FC30BCCB3502EE495E7C6C76 +:10A180002A6D3FA2CD88A67844A101F5E4A726F266 +:10A19000109CF7996E912D0AF53F3EBD9F9FBF51D0 +:10A1A0007C59EAF3378B3298BE3CD243FE3035B14E +:10A1B000C89D4EF17824B5FB7BBF24DDA0B987286C +:10A1C000DE45FA9B8B68CE89A426DE8AE388BAF145 +:10A1D000B28304D5F76AD319DF18950081FB90C6C6 +:10A1E000CB4EFC9E40FD57D8474870142A106F157F +:10A1F00013FB41BF8457C291CE5DDE5D18A7747416 +:10A20000FA8DFDC02E31BF13F3BB5ED87FD1FA9B10 +:10A210002388B6AECFE7CEC960F1A751F76EC39CD5 +:10A220000C0FFBBD135EF66E83B83FDEAAF8632108 +:10A230000FB4D8C0CF4FA5F8F17EE423E39C790D8D +:10A240002ABCCCE0F86BE5EF4CD8697B7CBF40B70B +:10A250008E0D547EBC946F27A74B9AF6426F2D103B +:10A26000F21372A07F339FCBCF2B19EC1EFC023B65 +:10A27000DB77F9F3E6CF30ADBFF0DD181320F18EB8 +:10A28000F9247E18ED177C22E9F77E0FF0A96F3FC5 +:10A290009CB7218F303FC25E9C53C0DE1B9884FB6D +:10A2A000A752281DF56C5FED4445D2422983C21B9D +:10A2B000131FF6D8E9383143CEE1B93D7F3AC17575 +:10A2C000C474BE7FD93E507D8EA522A948CA188D80 +:10A2D000E7622389707EF2976646DFC3C40F7ED69D +:10A2E000CA7D8331DFF58B8CE0D57457F49E2C3911 +:10A2F000D881F78227825F92DD0DFD6D5F1A808F16 +:10A30000F47C008083FDED8D1FC601DC14AEC5F129 +:10A31000DDD315FFA3F5891607BEC77937A7AF9818 +:10A32000F77AF9D399CDF4498724E1BB30BDC12731 +:10A33000CE1177D285F38B28059EF4F7F6AE7238EE +:10A34000AFA6B3FBBDBFC808205E2F65FE75A09108 +:10A35000C2B0D8C4DF87E865BD1BFECDF5F6950E0B +:10A36000733218FF2C8EE91B5C4FA6B37CE87F1A72 +:10A370002E4306E78FE17D83EB957F132E3FE9F8AF +:10A38000C891DD3B5C949E06904332A903DFFD58E3 +:10A390009CD837F8DABE01F812FB06DFAFC03E905A +:10A3A00008836F16F11953640E8CEA1E8DFEFE8C25 +:10A3B000B857334BA1B694DABB1813DB578B992EE1 +:10A3C000B1FCD0BF788FA6938E6E1271409CBECF29 +:10A3D000CCF28BBE8E816AFBF91EC7CF2F32FC1FD9 +:10A3E00002FC8B0772BD50AA6DF721970BD14EBCB2 +:10A3F000A34167E2E78EFB37B373C76CC9D60C0F76 +:10A40000BE97FB97744973EE58EC0B6E2AF02483C9 +:10A41000DFE0B7D82232B50B9B8654E5C03E883FBB +:10A42000E59D13EC7C35F557557412705C587BD85C +:10A43000DEDFD8331E96CBBB0A6ABBD94F697107E2 +:10A44000BF52DBEFE53B7E6DEFAFCAC70C23ED06D5 +:10A45000E6EF7718585E989FB749BE3EBC3F04E7C9 +:10A46000355CA0FF03A8FF85BDA879FD250FD82185 +:10A470006AEF09EC2F74C4C5A03DA81B5298A3DE57 +:10A48000FF49EEB4D7DAF72FA276FADF7BFF22EA94 +:10A49000BF482494D4DDF80AFE2EE8E2B7754F0FCA +:10A4A00071AE36B2B6C5727A00BC5B926385F2C0FB +:10A4B0005A9FF534A5CF3D4945E51978AE96DF4F53 +:10A4C00008ECB69CD6E46D239A7A6AF0B0E5B4261F +:10A4D0006FDBA6A98B73B446273B475B3CCA82E778 +:10A4E000FB336B4F68C6A937B0F7956E58DDAEE900 +:10A4F0005FECB7851C0990DF3DA769DFB08EF17175 +:10A50000767D87E677A3E227708E7540E365CD38C8 +:10A5100083B612ABBA3E386CB1AAFB0DDD61D7D45D +:10A5200087B5A468DA1BED399A7A113F17E4B7B002 +:10A53000F339132D799AEFF7244D2B07BD57447645 +:10A540006AE0E83C0FDECBF91A45D98CF948D8CB44 +:10A550001C97DFF55CF83D497E1C5FCFFFA107C665 +:10A56000F17D2416570B7E20A37C39F0BD27BEF861 +:10A57000BEDB7F078CF73C7FAF4412F79F738827C1 +:10A58000C0DE2BE9F65E4D4306B3EF9F9ABAFF5E3D +:10A59000C3BF1B75EF9844F996BD63F269B178FFAC +:10A5A00048FBEE9C68BF868FF330CF3FF4F6FE9CED +:10A5B000F172ACE6FDB9E87CF1F8FBA7FDAE3D5FBA +:10A5C000C375CF27F7B03ED335DF69795AE02FB195 +:10A5D000FBEF4F76E22F5523F74F431CA0895B32E8 +:10A5E000F0BB51F7DE8B3AAE81DF7B8B6B3ADFFF3E +:10A5F000FBC6E31982F05EAF7F4CC3F4FBE1DDB331 +:10A60000DEC63F96E11F928E76EA5FB3BB31606390 +:10A6100053719C08C8C12613BBC7483518E62744A8 +:10A620005C43F4714F0E3BF7B620E51DF407622042 +:10A630005740ED76CCF7ADB85F72876437015E6F37 +:10A64000B774FCE9690FFC7D85C89FFE17E63744A7 +:10A650005C132BC37E5C5FE1ECCCAFF0F71820DF1E +:10A660000D767BC4842178AFE61188D700067E3F43 +:10A67000E2110A432AD51F09061BDE7F4A30B1FAD0 +:10A6800008C8CFD0765F918B89B0967858FF58B8BC +:10A690005FC2F64112F62A17D4F8D6EF837CD9F6BA +:10A6A000B718B08F6733B4FB215F91B23F0C05BC84 +:10A6B000143A119FC3F74C4A56BF73D2B95F24F2C4 +:10A6C0003B3DE48BA3E761B47919918FB9E93AF383 +:10A6D000329DEF06E8F232BDE595AEBA834A26EE2A +:10A6E0008F6AF34AA603AC5D479315FD019167128B +:10A6F000EB8CC9E4729DEC8FC9A4E56719FE58285C +:10A700008F58595EE6C894C909B0B42F893F01E259 +:10A710005338DF9B9ED895FE9047D9A092FB238E9D +:10A72000EEF5440A9F6F762693B332B73F15E03EAD +:10A7300067627F07E35C0C2FE3993EEBDFD99EF95C +:10A740002D6379FD1CD777E71289E69D66D1EE4629 +:10A750005E9E5E6BB16C1810FDEE79D25C0B719D44 +:10A760002B9BDFC7F233FC5CDAC3FCF9258DA74CC9 +:10A7700070EFE9E6CCA2D90017B483752C51DA4DFD +:10A78000F0BEF6BDAE601EE0A7C643FCBB30BFD531 +:10A790006E9A41F17C89FB2B978C2C4F74C9CA4A65 +:10A7A00001CFCD99D36643BF4B37B59B80AE9DF5A6 +:10A7B000D1ED287737670670BE4B6375F56FB33AF6 +:10A7C000E1E733FC9CDFD05E76631FF5F650FF0EA9 +:10A7D000D94A13CF33EAF543469C467F2CD8FB6B0E +:10A7E000E4DBDB2D6413A49EEED89B6C82A0A22A2E +:10A7F0003E34D0AEC977FC6B7AE152661BAEABA19A +:10A80000A823EBA95198BFB037D37956EC6579EE00 +:10A8100015627DADDAF52DE6F4EFED1D3EBD7FD17D +:10A820009BFC4A7BF939355E927DBF4E87F1C6EDC0 +:10A83000FB5D12949BA45ACC3BABCED59E7883F2A1 +:10A840008B6CE84852CBADD8DF795B6AC77DB81A0C +:10A85000D288F4AE69A5EB8A87D21A81BC32D9AD11 +:10A860005DD75DEA7396B4DF32D262F24A104718C0 +:10A87000A3FBC2F4FFD5A40DC75BD1A2FD5D6F673A +:10A880007AE383F7B8FC09BEAAE278A812780F6BC6 +:10A89000E113EF1089773EA792E063C0BFD31C9607 +:10A8A000903C02F691FC0B00AE85C483745DA8B3A6 +:10A8B0009BE2DDA2C5B699C8478BEBF5F0FB4D00D6 +:10A8C000E79D8DD75E97E09F9F73F8576532FAAF8B +:10A8D00088293B8CB231AA0DF793287C2F82FC0883 +:10A8E000F888E2C7F7C845FBCF46B7BD18A16B9201 +:10A8F000E32659C03E5424055F85F69927DACF48F0 +:10A900007000D3E6C7FDA6CF779F7F0FCED5E1635A +:10A9100017636182F62D37D27F56ED96ED900FA822 +:10A92000DAFD26F26B4F78EBBC874E3A045C7BD4A1 +:10A9300078137089FCB35E7EC2992C2E9EE2F1EFF3 +:10A94000837EC67E2DF82E56C77DEC1EB853A69684 +:10A95000351136054312D846F1AE0BF1F92D90E7CB +:10A960009B6066EFCFFCC95E6C817BEE6E87210039 +:10A97000FA6F837D9103EE3B8B77BFDD9281BDF350 +:10A980004F1639E0FD900566FE4EE5FDB1916CCAAB +:10A99000AFBF32B1F7409DB1417CD7A0C321E3FCEA +:10A9A0004573BE1C09EF10A45DB1E5C379B69738B5 +:10A9B0007E05FC1326768C64EF7232BA39B3F9FB4C +:10A9C0004B2ED32678EF7003B533503ECFD709BA5C +:10A9D0009AED1F84EDF8061CDF77586561FC59631A +:10A9E000F53F520CF98677D9DFDDFAD2EE4F80FCC5 +:10A9F000BFFE1D49E1C7F6F44EF3DFB81EF94FBDA7 +:10AA00000329F2CF350E853813A2FDC43A6BF8FB4B +:10AA1000347A7A8BEF6F7C2D77CB0FF62C964FE93B +:10AA200029CE3167317B5303EF72ABEC710DB55F0B +:10AA300000670DBCCB7D0D3FFF798E971AF0CF9349 +:10AA4000D4BF33BA46C771E2F797F93A5F3E6C2834 +:10AA50006DEE065E5F165BCF10971280FD8FA11121 +:10AA6000F6FE654FEDC4BDEC9EE06A2D6EBF1DE0A5 +:10AA7000863C6D77F3F5CF62ED9E07FD301ADEC39D +:10AA80006CAF4479B0FB5F81F8FED29E415EF57BEE +:10AA900082F51CDF9F4F61F65ABCC359A0D44AC04F +:10AAA00057821E454981E740FEE01D5E96EF67FC38 +:10AAB0002CE8007CEC413F5C1BA709B837F0FD2374 +:10AAC000119FF5F6EE690DBC4B7E4DFC2BEC5D55F0 +:10AAD0000E4789BC06CF479C6F94F0BCDB7912AC63 +:10AAE000C3FA43129EF33C7F84F98D10594B05A0A5 +:10AAF0009F993C54BE30232102521F64E7A9176E70 +:10AB00005F8EE795A0BE86EA8D8529EC1ED7A20D43 +:10AB1000DAB866C9435A3D0DFBC610AF559100DA4D +:10AB2000A7CAC7B5EDAB08DB5FADD29D737273BB2F +:10AB3000A2F7DB1764717FBD80145CCF3DAB478803 +:10AB40007F4916CB03CAA05747F373CEE7B76727F1 +:10AB5000ABFF7ECEEB5E4973BFE80295EFFE03E0EC +:10AB6000EFFAD8B1FC4E96BF1AC679202BB8320B3B +:10AB7000FCB07739FE940EF61E6805B3676648424E +:10AB8000D27F9AE759D00F7F00DEFBA278349B99E1 +:10AB90009D147E812CDF2BC7D3EF633F59E2C07336 +:10ABA000FDAF4C2E85731BAE5762FD80EF86227F72 +:10ABB0001EE8D18669367CE7A1C9C0DE01B498D908 +:10ABC000BB44E197C71E80BDF2FE2D8F16C3168BC6 +:10ABD000BD3D42E23D908F5A87E760EAC7137CBFD4 +:10ABE0004DCC57D81ED8097065CDB4F900C406AF56 +:10ABF0003FCFAE1A9F70BB5FC371FEF4EE6C7C8FCB +:10AC0000F78BBD83B01C42183F887B043027F83394 +:10AC1000025F17D7D2BAEA5EE6901629628CC77730 +:10AC2000EDF0BC45F5FA887B1ED8A997143C8FE35C +:10AC3000FC556AB1273E0A9FE827ECD73C883F6164 +:10AC40002F87FB65E21EC33C2B09C5AACEDF5470DB +:10AC5000BE9DB397C5558BA8E6807E732D24DE403C +:10AC600071366F62CB68B437CB8D0EF03BAFFB3CD7 +:10AC70008A3817A56B7701EE5C80DDDB63C67DA6A5 +:10AC80009A17E3303FB8D2D081F3FF92EB9D9A81BF +:10AC90007CDFA03FF1C3F9A59A7D83701FCE0CEF36 +:10ACA0004BE5A37EB3005D0F813DA5EBBEEB0D2B05 +:10ACB000BE5BD7F97E8B9D84406E57EE4BC638D96C +:10ACC00099EDCFBB2717DE0B69CF42B9A7FA0C521B +:10ACD000DDEF65DD799B42F9AF268DFA2BB42E3D71 +:10ACE000770FABF76BAF34D0FAE0E71A6E83F3312E +:10ACF0003543DACF407DE4734FB07A7E7BA54CEBD1 +:10AD0000B73EF73CABC30134CA58F39E7BF936B863 +:10AD1000AF72C121FC87767CBFA7E6F54186061598 +:10AD2000DD27DFC0ECCF052B6B77C1CBDEED2639FD +:10AD3000ED9AF78687F276C2FF11EB14FD484AF7C9 +:10AD4000E37FC2EDDB5DFCDD9D09B1A4DECADE213F +:10AD50000FC1F9AD837B07215EDEC9E2F788ECED18 +:10AD600078CE468CA3E72F31EF32FE778C3E376AE0 +:10AD7000FFBEE517DC5ED27936E03CB9FE3C38EF29 +:10AD800056333D230FE846E9A5707A29EC7DE0268D +:10AD9000A4338CEB007FCFDE3112ECCAC12B19F843 +:10ADA000BEA2809BFA7536F4BF38FC57387FDC555D +:10ADB000C7F1456196116EB64F0BF4057B732BC737 +:10ADC000DBE41B185CD01EC7CB68C7BFAF70BDEB00 +:10ADD0008BBF81CDFB4DAF4F45173FEC371CDC3DA2 +:10ADE00018E9726B27DD1FD58C73619DAE5F21C1A1 +:10ADF0007DA89AC46CECF7007F775EBC030CFDBCA9 +:10AE0000C399FF08FC2FDE5323A1F1B8DF55CDF520 +:10AE100043E73B682DEC7E06E94FD707789D5E3609 +:10AE20008AAFCFCED76757BFEFDC2977C73AB26674 +:10AE3000AAFEDE8CF8BD13EF9DE3E5E6F3F134F2F4 +:10AE4000DBDD7840F79EE8E1FFA6E921E0D4E1B33D +:10AE500013CF3AF8043E416EB15FAE567E049C2398 +:10AE60007B925FEFBF381FDFCF5BF15D4A4738EF62 +:10AE7000EBD1F2F38A56AF01FECE9CE8D75046E301 +:10AE8000FB6C557CDF7A7708F2102BF74EC3F3A6E4 +:10AE90002B7EF1E39F8768FF65AF3D114F28BECF42 +:10AEA0002B8D6E7897A9FA858DF17EC80B29A17834 +:10AEB000D097E7C3ECEFBAEAF5F9135CBE843F54D0 +:10AEC000C3EDCA85971FBC15F0F1F7178C76B09BC0 +:10AED0002B779823668CDBEF42BF88D64FB1FA03FD +:10AEE000987F5CB95BEB072DFBD1136E0FF25328F3 +:10AEF000DD900265249DD0B266BBD117017C1D9305 +:10AF00007D741AB292746C02F8F4FD010E784261FD +:10AF1000658BBCD094D0F53BB54026F03F56B63E8D +:10AF200088FED44ADD39F0AA1EFCA9076ED0E63FA0 +:10AF3000055E48D8857E4CDD4B3FFAC9EB14BEF365 +:10AF40001F24E7E17B95DB7F132FD1EF175BB21353 +:10AF50001662FCB65EA37744F939F80166B53D6523 +:10AF6000F4F4EC9630F742F6B2B2DA188987B8B941 +:10AF7000BAC988FE68F58F9F7F11F23EE48F667C28 +:10AF80003761F98F0FBDF72D5A5FBED3E82C636090 +:10AF9000DB2477942E2B3DCC1F117458F6D343F845 +:10AFA0007E17FC0E7EAAA0C7F29DFB4D645857BCCD +:10AFB0004D6CD98FEF6976A14BCBA99BF1BDCD9795 +:10AFC000FE61027E3EBF4F22C9DEAEFDAB5EF84D94 +:10AFD0003CB41374E9A45317FA446E7D7D14B6C3D0 +:10AFE000FC408F74A2FE3FF2FD2F7E8C78AFFAC03A +:10AFF000EC837557FDE4DE7880FFAC52CBF8F9990D +:10B000008D6EB8EF56650CE1DF8DAC32B2DFAB9ED2 +:10B01000BD0FF96CE9BBF7B9D9FD2D7FAAA110D7F7 +:10B02000970AEBBA735B39AEAB920491CFAA9E91AB +:10B0300031EEFF8AFFDD013D1D633C4C1ECE369B89 +:10B04000F1F1A6B3708093C2153AC2FEDE292177D2 +:10B0500013F5BB17F8E26C41F4EF019EEAD417C474 +:10B06000027EDA4ADE6AE5F607F01D860B99FE6479 +:10B07000C81B523C8438BE24B8CF25BF5B92CCE8B5 +:10B08000423C4A01EF07FB38F03BB46F33FAADC3E3 +:10B0900035FDF83D6336BFC80B50B86320AF79D695 +:10B0A000CDF2C2F4BF36F46F99AF8B7C03FE67A17B +:10B0B00087E9DF4EB9DECEF62F855C7F798CC945F6 +:10B0C0004D785A29CA7B9B31920CEDC2FB674A2806 +:10B0D000EF66CD7B029D7CB0DDC8E555FB9DC2A52A +:10B0E000486A7CEE93F01E64E5E366CDBB2F513ECB +:10B0F00031457FF746E54EC43F4BB97C0BBAFD5F47 +:10B100004D62323F008000001F8B080000000000ED +:10B11000000BDD5C0B7854D5B55E67CEBC1226C93A +:10B12000E405411E9EC93B3524931704083249406B +:10B13000434D60F28006451D1E1A044222584D6B95 +:10B140007B331840A4D81B8BBD17BDD86F40E5D208 +:10B150005BDBA61A69AA810ED5ABD8229D02CA4331 +:10B16000E48ED8A2D660027A8B7EA597BBD6DAE7AA +:10B1700064E64C0841EF77BFAFF7862FDFCE3E7B0A +:10B180009FBDD7FEF7DAEBB5D7E1F265FC9909D0A0 +:10B1900076AAA0EA552BF0CF65FC352931496747DF +:10B1A000E11F5360CA6519CBEDC90063B14DED1FB6 +:10B1B00059027801B0CB2A936FD79349589EB03883 +:10B1C000BD0A963F35B97DB9001F3FF7CADBB716F8 +:10B1D00063D9654AAAE6595C366932C06AFA13FB3C +:10B1E000B5E06F5B21D6BBEFA9863C80E5CF9780A9 +:10B1F00032493CFF4E023D7FF8BC8CCF3FB639014F +:10B20000E8798FE94C308CDE4A7C1EB4311DE30CAA +:10B210002954FAC70196AB6DE0F4E3BCAB8FCA4E7C +:10B220001C0A5A6060A3DD36F47DA2E3739CA7A5D7 +:10B230004B5E6C8E1BDA0E306076D3BCDDDF3B2FAD +:10B24000C7D238C633C16CB5DD01D024E11F5387A6 +:10B25000E2981781E37F426EDC74ACFEF9DF565E44 +:10B26000EFC91D8AEBC57667D5AB19009FB4639B08 +:10B2700025F4FCB7D723F52508550F4E3406DB7AA5 +:10B28000D512E02884E1A8E1B7FA994718AF153F35 +:10B2900069E6795A765BFC16A47BB5AFB68ADAB15B +:10B2A000FE9EA8EF6F90F2AEB45E3D8E91ED9F5D75 +:10B2B0000F4C8FB6EFA687C01B83FB3EB057F6ED51 +:10B2C00044D2FA91968D887BFF730E9F17F1D910A7 +:10B2D0000577BA918E7EFB406C02961BE2457D207D +:10B2E000D9BC11E242CF07A2A0B10BF7A7DF3D10F6 +:10B2F0001B6F0BADBFF8D772AC82F5A00FAABA6C6A +:10B3000057E2BF0EA62308A27DB66C9BD886F35FDA +:10B31000E84C2B4418E1821526B625513DA3D0CB2D +:10B32000AB58C7F4FF09DC6F4F277AA363F3880E8D +:10B33000F0BA8C6311CFA562A9B0FC8D8E58306035 +:10B34000BD776535205ECBB6E871B8DBD610E7C7B0 +:10B35000B5DEFDB829C40FF8DB043E33A4E1FBDB06 +:10B36000F5CF57C016B12F11FCE321FE193B947F96 +:10B37000EE27FEB901FF2880023E8780D48C065854 +:10B380006315FB3D5BCEFD47209C0FC860A131E4F7 +:10B39000DCDF4FC775FE27D66562786F32F3E54A6A +:10B3A000CF874C8FC6C71A9FF5119F650D7FAEFBE7 +:10B3B0005E7C77F283D865D59E77F2FE05CBBE3DE5 +:10B3C00027325FA6FA2F8F4D7C0786F6AFDCF7C5D4 +:10B3D0001D80F3F7EFB3303DFDFB5E9FF820D55F96 +:10B3E000B23889DEFE872C2EA2D7BB2FC69741ED3F +:10B3F0001370BF71DF3BF65ECC0BD27980F5BC2FAA +:10B400003B153397177AFF7A5AA27DEBB52880381F +:10B41000B5ECC3C384EFB7BC14E5037A7FEFC5C9AD +:10B420009E307EF89FAE67B5193CCC7F31D0F83C9A +:10B43000F16B3CB8683D2D2F4F7D7A1DCEDFDCBD12 +:10B44000DFBC14DB2B7FFDB73C9237FDCFEF37938A +:10B450003CFAC414FC11A068FAA932ABD384787FFB +:10B460001283835D0730C7B1C1EDCDBD122E0287B7 +:10B470007EC481D685B82C2739391C1EAFFEDDE28B +:10B4800071FE0E9A7F55EF14901DE1B8482EF13CE5 +:10B49000C6679578FDE2F9BE8B7960233DB02E40FA +:10B4A000E760A475BFFFFF6EDD92FF5AD66D7098FE +:10B4B000599EFDFDAD5BF0FF2645E8A3C8733094AF +:10B4C000CF7F793FD77F16E3647AAFF1FCA73AFECE +:10B4D0009FEDFBF3B8EFB123EF7BF9DFEDBA47DA6D +:10B4E000F737D47D8FB15B489EEDFDDB44085BFFF1 +:10B4F00048EBF6FC1F5DF7A0FD23BBADA948DF16A6 +:10B50000F007142C37A876C88624341E70BC4DE38F +:10B51000959DB2C4FA3B40FA9BFFC621BFE790F865 +:10B52000FD0D60A8225CE4A4156C67C8499BD94E48 +:10B530004049C0F46C4A2ADBB599DFBF17C8DEFB6F +:10B54000A66A23181583DF82FD3AD6E1FCD8AF2323 +:10B55000D960EF50F8F97BF4DC42E3C452F9F58F7F +:10B56000C4B8071BC9DE33DACCE00FB3336C80F507 +:10B57000307B243A3DAC8EBF51F01BBB11F721CA82 +:10B5800069049F44A669D8FBD87FA5C3CEF844833D +:10B59000CF6BB77D255CAC848B51FC0D3D11B80C95 +:10B5A000E2269A47C4C998B43940EB3682D1ABDA67 +:10B5B00059D26531B6629C4CCFE995A1B8A1651509 +:10B5C00089AF2B2A4F370EAF57C37D104F15EF2F82 +:10B5D0008B6BE4FE8C84F3F709E7E4A13887CA3269 +:10B5E0003BDB8B51D81FC1DABA179E24BBD65463FC +:10B5F0003625E13A17B82527C1B0000215A3B00ED1 +:10B600008B24E7B3BC6E776019D6DF6EDC9AB21973 +:10B61000EBF3D14183422EFD0A95F6940AA2CF2482 +:10B62000791E2D41FA60BEC9F92C1689BDF0A4928D +:10B630004FEF3BF71BF1FDF90BC616D2FB87E81164 +:10B64000C9798FE47B16E986946C23ED5F1D08BEF3 +:10B65000C79F86038873BDBA9FC71D09CC3F0B6285 +:10B6600096BD598FED733BDCAD6E5CDF7CE3C01F94 +:10B67000491ECC2F1B2B75484CCF7AC0AE27893F73 +:10B680004AB80E549F6F779B5A198F59F6B388AFFB +:10B69000E4FA9A7C79D4D5FC55239CD5F6410EE189 +:10B6A000976F1E38B516E9B61F929D3B155A2FB0FD +:10B6B0005D0E97F03DA4B78E6DECD038356D45D555 +:10B6C000B312B15FAAE05758B663435231AFD31BF0 +:10B6D00043EB5CB57F03E13E58BFEF3D7DFB77A4B4 +:10B6E0008DBAFA7A87BEBEA57C63F8FBC3ADA7AE60 +:10B6F000AA40F2A0CD99F8B8E4F25DC13FD2E87B50 +:10B70000731D2C24BF0B925C4A2DD9A834D9586ADA +:10B710003770FB509C042E0B6568A5735B53018B3F +:10B72000E97DAD3D4E1D374E7D1F88D8A9C40E2E34 +:10B7300085FC8CE1C63BD1345322BF14A17375E55F +:10B740000EED777DAAD8DF1371CA6CA6D72EF8E963 +:10B75000ED39593B363B86C7E1ED398E09A948E7FB +:10B76000825EE40AE4CB8AC6C526D2330B96CD941A +:10B77000480F1DAE091AA8CC4FC5756079EB65E777 +:10B78000D8DA30BC4AD4756C7D54F8A191E3E7A9AE +:10B79000ED270DB09CDA4FC62A1316E686BF6FE57B +:10B7A000F6925485CBC33142DFE5A30091F11CD55D +:10B7B000A40AFC2017F19F14C2BF6404FC35FE5B91 +:10B7C0000082FFEE6814FB4CF4D785D159A9E2B68C +:10B7D000758398F74453BE6971587B33CD53C2FCCF +:10B7E0007445DC9BD5F7D17F66BCB7564B3EF62B34 +:10B7F000C16523BFB8493DBF5B7187FDB8D5F56F03 +:10B80000C94EA4109ACA9A581EC376E11F5BF1DF95 +:10B81000E554745BFDC688B842C0487C511FE1FF07 +:10B82000D6A87E714DC4F3487FB831D526FC618A15 +:10B83000A764319D1CDFB9705476929F3F1C5FD87E +:10B840005364301685FCDEFC72839BF0FBFD8C8B11 +:10B8500075B4CE3535A906D2435BAB2F242CC90D68 +:10B86000E1183AE769D5E945A1FA9B35E6461FCBD1 +:10B870001BE18F1F56FDF1AD554551E5B610CE5B6E +:10B88000AB3E4D207E1B3C1770F573A1F51B5E6E21 +:10B8900069720A651CE15F65F13D84A4D63B95772A +:10B8A000578ABA9DE26E15D53B2612DFCF96739F5D +:10B8B000FA363E7FB3DA42E1A4417976E489A727DC +:10B8C000523CC5B9BB6936E45278C1B32199E44E04 +:10B8D000B5E4E47886046EE2EFB3E381F574A22F59 +:10B8E0007E8717DF95ABC5394CDC1EBFE366DC9F56 +:10B8F0001FA8EBACAC16FDB636EAF9E51E55BE370F +:10B90000953C7D281DCB15354B4A68FC27D5F37136 +:10B910000FF10DED7B75C13A5247CB1B0B2448A5A7 +:10B9200065BA02B961EF2F00676D9114EAFFE76D08 +:10B930004FFF13C1D954B5B8C41FC657202F8A234F +:10B94000FB70C533FAB84B62B13E6ED3E4D3B72F68 +:10B95000C0776C0934CFD5F96F7704FF69F30DB761 +:10B960006F1ABF0DDA432AFE3DA57215D9C3F90936 +:10B970002E8F3BEC7C1E53E58056F6F4FEE5E44A40 +:10B98000D2A3DB2DCE0C859472FC2C3B4EB5707986 +:10B990007931A9AD0A6BC1AB54BFAD15EBD8BE3F31 +:10B9A000D5C4EFDD6E7F6F763CD6EF4C915EA3720F +:10B9B000B1E2B82901CBA32AEE4BB3CB5FC3E5427A +:10B9C000B5B3D6ECE178D9965179748E701EB4BCBB +:10B9D000495E790D0943D7538E46B8310CB74A6B8F +:10B9E0001418C3F0996D8FD7D56F4E19ABEB3F4745 +:10B9F00071E8DA6FC9CED1B5573B0B74ED7169C2EE +:10BA0000AE3CB4FDE2C96FE13A0FF59AED04E121D5 +:10BA1000C22529840BD2FB38D17B68EA0313EF429D +:10BA20005CDF4D35F23ADF255E0A93676F5703F30B +:10BA3000E7DBD07AFA5BC4C735427ED53F956522F5 +:10BA40007B108C22FED700E23C37A872ADAECCC48E +:10BA5000F65DBD5BCF47356AFCAFA62A327E1A3C45 +:10BA600048F42E2895ED640F2542981C74109F0908 +:10BA7000793712BFFDFCA98BD7D139BD98AA8F2386 +:10BA8000FF5C12716D2FCA5FB2C386931783F22ECB +:10BA900082CFE2D2C4B9D54A941371242FF2CDFAE1 +:10BAA0007E5A7902FD2C238EF34EBB95CB77DBEDCE +:10BAB0005CFE477B0A97EFB52B5CBEDF9ECD655CD5 +:10BAC0009A909F896DB89F89A17112ABDDE6AB9DFD +:10BAD000974839772868E07372E8C66FC63A6CAA4F +:10BAE0007F80EF8D4B8BE7F60F4ADFB749B9217E98 +:10BAF000ED099EB1915DB1107C26D293B781DF44F0 +:10BB000071CFDB21C8F53B010D6A2C1783C2E552CA +:10BB100070715CF42E1800294DB55BAF03D899F60F +:10BB200083C7286E97477A92EC05742DC2CFC36DF8 +:10BB300069E27CFE2CD595935642F8B69EAE273925 +:10BB400079A309C86E244E22BD90A8FA331F3C3554 +:10BB5000256AC915F4ED03A94B8AD24AC2F1F198BE +:10BB6000A91FEE6FA3EAF7705CC1149FBD33DCEE32 +:10BB700099A6E2DBEB704D4D4B267A059FE72738FF +:10BB8000D9AED1E845092FD591BE4DD3EBB37C3367 +:10BB9000CA4B1CBFC6E931DBB1ACD8561015BC226C +:10BBA0007D9E9BD392F5F4097921F865B8FDD3F613 +:10BBB000FDCBF28DC61F671CAE069AD76840FF1CEE +:10BBC000E7312634A62C613BB081F7FFB634E9AAF1 +:10BBD000F6525EE9FB5B8AC84F29969D247EF37A74 +:10BBE0000236920B47C81FCA277DF8414511EED790 +:10BBF000E11EB42C71BF0EDB82D554FF60AA6C7FAE +:10BC000008EB1F48CA9B747EBD3B64BBF08F9C0150 +:10BC100017D6EFAE8A2FDC8CB579334CACEFCE7AE9 +:10BC20001C3B290EF44315DF0F55BBC88BF608BD2E +:10BC3000F741CDC5A3F7911DF5446282C47CD014B1 +:10BC40003B8DEB6906E1CB3A4D6C0F6D9359BE1CF1 +:10BC5000ADBEE9AD65109257675579A5C9A50582B6 +:10BC60009DE02C7893C9FF5BA0EAC38646BDFCA982 +:10BC7000ABD6D71B23E44F22C99FD8A1722952FE0D +:10BC80006C4C8B09E93B79A8BDF5A16DC04F72D40E +:10BC90005B25314EF5E80F7AF2C91E28309DB511AB +:10BCA0001F48CC079A1CAAAF463FB198CAC5455653 +:10BCB000EC5F897E0BC553EABB9DA6BB6DE17CB6EC +:10BCC000D80CE4CF6C5B6CA67BC05E87FB9F891FA2 +:10BCD0004C3B2A1592D35B7BC53EE66F3F7692D6EE +:10BCE0003FAF66C9C6B1B49FDDC8F0B49FDBA7C43F +:10BCF00090DD75C4F76912E486F37BAB9970ABD81D +:10BD00007EFE3AE2DFC8F30EA44CC9DF0377CA55C2 +:10BD1000ED34B5DF48F2CB5B01D9E497F649E09703 +:10BD2000D0FEEF2B1F5D41F4F64D301B4599C9F550 +:10BD3000D972D92B36C2B51A58FFF68D2DB58AF6B1 +:10BD40009BF8BEEEF751B179B4DE1903A0D3973357 +:10BD50003FB7EAF4E5AAA081EFF5CA41AF872BAD62 +:10BD60007A3D3CDBEE88D0D37A3D3C37687B8FF858 +:10BD7000A3EF8D45ECF7CF510A22DA0D5EE2D75BD7 +:10BD8000B2A7EAC6A905718F3B0FCB6958CEC5F2A1 +:10BD900046F27B9CE543FAD1BDEEBCD239BA717B49 +:10BDA000CC904DFC3120453B77223FD65ADDFAF549 +:10BDB000A1834F38AE8FB77AE538AEC3341C6755D0 +:10BDC000DB5F98CFA6B75D623BBFC0DFA57BAFE866 +:10BDD000408F6E1E67C05E49EE6FE171E72B54160F +:10BDE00007DD95E4BE4CFEB0F5152ADBACE23EF073 +:10BDF0006294281F30C0068A473E207B9693BEB8C7 +:10BE000068F06593FE881E77D304E2C7DAF88D44A4 +:10BE10000EDC029E73C4A7533FF375507DE6A52E3A +:10BE200099F451C76ED96B89A37DAE1EF526C5372F +:10BE3000BB24B6C757D90CECC77D9CD095B7368CC0 +:10BE4000FF3FBE5FDC8F428A2B657112C5CBD239B2 +:10BE5000AEE2AE8C71C9884FF39E2C8E9BFD2EB343 +:10BE6000FC6FA43FE4985956A1578D0383F6442AEA +:10BE7000B5BBEE9B40F1A24A99E509DC6CE2784C37 +:10BE8000B4C11DAB06D358BF986F36B15FFDDD74EA +:10BE90002157A37F078A84FC169DE89127D17BB7A1 +:10BEA0004840E75BA3AFAE1A5CA49793D385FDC06F +:10BEB0000135EC579B7CF4398ABF7D373D86C799A5 +:10BEC0005CADFCBB890C7BBBD14E7238F1B8DB3E5C +:10BED00009E9EC4E2A6639D07D3C3083CEEB77D32E +:10BEE00015EE3FA6AA7C6D39CDF7B80CD4BFDB3E6A +:10BEF0006B14F587EC4C03C5E5D6501C00BB262E11 +:10BF0000528E519C060E98B89F36FFE68AE33E5A41 +:10BF100047E271D74A5E6FB64DC97070BBE3F64910 +:10BF2000A467F075CBF0E7F6FD2DC9C90AAEABB634 +:10BF3000DC9EECA4F23104691AE344EE0FD8C94642 +:10BF4000E4FAB8C3B390AEDD8375F003E2BE19FD29 +:10BF5000329227F41385F55A69B07FDDAC5C8E3BD5 +:10BF600068ED5E28457C65AD7D7C1D8D678F184F23 +:10BF70001BBF347DDCE14DB9849388FF81D19EECF9 +:10BF800026C6BD7459223BE33ED5FF8C9695C9C4A5 +:10BF90009F4B0C4A1E9563133C33D393695C672611 +:10BFA000D5DF8F718D99E1607973761BC99B592616 +:10BFB00096E32DD95BF83EAEDBACEC399E44F7F24C +:10BFC00078FEF0B9E97BF774F5E0B82DF6BFF0B96B +:10BFD00042FEBD85F4DE85802181E2FC4BE4C1F5A3 +:10BFE000B8D0E5873386509DCEDB92D07A5CE9D815 +:10BFF000BE396C7D56AC2F55FBAF4DCFA95B4FFCC6 +:10C00000BECCCAFEF45AF5EC6E4E804E19F9F0D350 +:10C01000EC690B68DE4FB7A0DE454CBBA991F46C10 +:10C020004AB4EF59C238C99D4DF1AC4301612F7636 +:10C03000E13EBB68614AA66EBC4FCB3EB04DA271DB +:10C04000CAD03AC2752D0D9A4121796104BF05E528 +:10C050004A77D99257D292882F156E3F4EE3A09F10 +:10C06000F74EA6EBEE74CE77D0E28BDFFE52F1C531 +:10C0700016554EB594AECBE5FC8B5912EBFB63E441 +:10C08000BCE0B82D6D9F31BE60F438695F57B57D57 +:10C09000CAF24CABF7AD13F2A0D30477D662B9EA7B +:10C0A000BFE43B296E85F26F13C9C355F01BF39AA9 +:10C0B000307B0CBACE0FCABF7C43C85E333E2EB372 +:10C0C0007E88A4D7E8A9E6F96A25FB7C8AB5F99FA2 +:10C0D000FD873A23DA59B551F6F912D61FCD5851DA +:10C0E00067447D573BC13EDF80F5DDCFBC2EEA6360 +:10C0F000ED3F3438F118660445DD617F8BEAFBD3F0 +:10C1000083E2FD18B1DFDF4F3F59E7E578848DE327 +:10C11000F417AAA27C96ABC4F1EADB5ED6F90D4314 +:10C12000DA6549C8C74671EECFCD19CBF20BD25DA7 +:10C130000506928F75E30B490EF95479361AB12F23 +:10C14000C5DF7FC7F36945BC9A330377C4A691DD89 +:10C15000F1C8792996E6DBC7F3ADA2AC237C7E2A31 +:10C16000DBB38BCECD6129789AE46473CD914C9288 +:10C17000F37599EAF9B30FA4D3BE2C040FFB150B8A +:10C18000553FCE80CC497654832D9DFDC948BBAC2C +:10C190001EFCEC7744DA6710EE07CA943F10B8C370 +:10C1A0008C7498541C9A131C19F41ED2F52BE2C3FC +:10C1B000C312D28975535260B4B0C79F53243ACF8B +:10C1C000D956BE778DFEDAF13CCF15ECF3AE76D4BE +:10C1D0008B78849E6FEFE132371398FFC618836621 +:10C1E000278EB3FA38B03E9A2DAF62B97FA1C7014E +:10C1F000E171B523E9C2CE8DEB11F147C4D549B841 +:10C2000026A581DF80FB9AF4CB379EA338FD1192DF +:10C21000FF25A17D9C390ABAA2124278E33E386913 +:10C220001F34DC11CF22BA3F78F5D2C132DAC73AD7 +:10C2300095AEEE6871CE075E8CF2913D1049E747EE +:10C24000E95ABC524FEF2575DF47A2F392AAA746E1 +:10C25000A2F392AA9F86A3573BAF1A4EDA790555EF +:10C260004E2D6C74ECDC2C85EA75D50EF6E7343A6D +:10C2700087F2CF33CA95F86724BE39966157F5B176 +:10C28000901B1A8E1A7D9A1CE8A67B381D7DF13B07 +:10C29000F4F4C5F3798A6BFB15CB2539C6C8CF1BDF +:10C2A000B2537690BF1317B840975B9092912A7063 +:10C2B000EEFA02C8CE8E6BEBE5FE43D613B10E4DFF +:10C2C0001E46AE47938F43D7A5CA49556E6AF27290 +:10C2D000067936F43EC96289EC618FCECE2B877B1E +:10C2E00022ECE07B23E255DFD2F5BF39659DAE7DC0 +:10C2F0008EF288AEFD96ECC774F51AE713BAFEF31A +:10C300004A77E8DA6BADBB75F5B26080EDCC43EDF2 +:10C3100055ECEFDEF8E100DB9B7ED52FFE8DEA17B2 +:10C32000BF4A7E319ECFD7C82FC6F240BB939FFF36 +:10C33000B6BD94CB83ED2E2E03ED6E2E23CFF5DC10 +:10C3400017BE6124BBBD34D0C9766E529AE7AE0CDD +:10C35000C46F9EC1D71183FB31E594B04B2145D802 +:10C36000559A7EDCB07FEAEFC9AE4A3C284394324E +:10C37000BCFC8DFB5C0657583C3CAE7A005CC80F99 +:10C38000716ABC64AE11D65B707F6B6D46FF18CAD4 +:10C3900077CB107622896BBA576CB402DF473636FA +:10C3A0004ACE0EE0E75EBAC7C3D2EF296452DCD6AC +:10C3B000D1EAFD1EFE588CE0A5F164970C37525C63 +:10C3C0002329D1086171BAF938E7F5F8DEADB62E48 +:10C3D0008EF72C3CF050F3627C0EEBBD256C276988 +:10C3E0007ADB7BD270F9866BD7DB2BC8B8A47B686D +:10C3F00049F8FFDE7823C7DB22E31FAE0C110F9A4A +:10C40000DBE19563C97FF903F0FDE13C55AF221EE6 +:10C410009B2C09A173A8F17FADDDE8CF8A25BDF380 +:10C420005825BDB7EAA8C27844DA099A7FA3F13D3E +:10C43000CAFB0EEA7FE138B0FD36A5CF17DC8AF3E0 +:10C44000950E745692DF31EDF3AE57A81CC90FD28A +:10C45000E8EF6D6F64BED9D7EEE1D2DFBE5CE5C711 +:10C4600056AEBFDADEC6F5D7DABD5C1E68DFA4F2D1 +:10C470006327B71F6CDFC6F543ED3E952F77F3F3C7 +:10C48000632A7E9D9A5CB296F3FD07184519E20770 +:10C49000C50B57E1875529423E47F2C5707C809A0B +:10C4A0005FA1FB915B511F921CBB0DBC93289FA306 +:10C4B000B1A9D3345DFAEAFCD0607BDC44F7139178 +:10C4C000F26D0128CC7743F5BDC7792DFA5E936FE5 +:10C4D00032FA69A4A72CF2BD4E8A1B7C79FBC2D329 +:10C4E0004A748C3C9FD817530AFABA09145F7C7BB4 +:10C4F00017C5B1CF95B80EB8A42BE010E157DE37C1 +:10C500000198DE2F4B9F16EF1A89BE17335D4749FE +:10C510005E69FA2C9ACF3C96D7D9389FD86CF1F93E +:10C520001E22FFEEE5283E8F60734DAC0D8BD7BC0D +:10C53000ABC99B44D7BB196C1FF4EDFA173A2FDD3A +:10C54000A338BE12E9377D16A81C136E2F45CAD337 +:10C5500016FBA77CEE86E879C9C07ABEC5001ECA64 +:10C560001F2AB48055425AEFCFACE813F396055C0E +:10C5700034AFDD78D5FBC996B6F33CFEB0ED06913D +:10C58000A7D4B2B7C4BE242C4E909BA9E61DA043ED +:10C5900078D61AC2EF5AF979C640A34E3EFCDDE9BF +:10C5A0004FD78F75ED7351ED10BEF33C73781F6E4E +:10C5B000258FE84BC5F95D1E2A7B1D9ED4CC12BA8F +:10C5C0008F0BDAA8FDDC9EBFA6931D7DEEC6A9F6F3 +:10C5D00072182A0FAF55FE69724F93831BCDB0BC02 +:10C5E0004B17C7492AA0388EB61FC599FA7BFFC8DA +:10C5F00073D65F801B86F4F6BF28F2E0FA63A27D53 +:10C60000126EB9ABF7F5E39477044EBDFE76596D23 +:10C610009C5F5AB4C8C97A1C508F9368C195F6853F +:10C620008F3BDB28FC20303AB36F0F3B371D6A5E2F +:10C63000C36E2C7F8174C72E0A1A95307E9BA7D2B9 +:10C640005BBE7016B03FB9C8C57660AC5DC483668A +:10C650005BA1388AC6BDF4692E8D3B57B513369B56 +:10C66000C04FFB36A6B440223B714DA2CB9D49F191 +:10C67000D187CBE239BE4CB1D4EB43F268B65C9DB6 +:10C68000B298CE4D9291CFAB26671A6C7F34CBE433 +:10C6900087A11CE17CF608BC0082AF6DC5F75C3D4C +:10C6A000929DE2F491E7D8D5B3FF38D9F523D9A705 +:10C6B00023C9A748F9A1E11E89F39A44F76A5AA74A +:10C6C000265F22D7ABC5899B21C87CBAD9B5D34D8B +:10C6D000EBFA91A408F90C9DAE71B8DFAB7BEE05C7 +:10C6E0007ABF501679A60373843F1479BE1FCA140B +:10C6F000726F952A2F0A13C19A42FBE101969FFDA2 +:10C700007372D80F79223341951B03997561798C27 +:10C710009A5DD3A77EAF51DF13E595C3E2058F661F +:10C720008A7BB77AEB673A39B8BAED0B9DFC5A9D14 +:10C730002BF8A1B04329BA17CBB5EABDDD4F26BA15 +:10C740003BE9DCADE87A6CCF4185E6DB7EFF49DA78 +:10C75000E7033621970F263336FD923EFFA6DE7A99 +:10C760005ED5FF3B74E7E548CD31F673EBBB477907 +:10C77000097F8D2ECD3FD6E475F3BE8F4E93DEEE4E +:10C7800093CE9F7E90F07BD1C2F6D92AA23B91FD39 +:10C79000EA6789AEE70F1818DFE63916BED701A39E +:10C7A00032A92E26844BFF4757CE0BD2E8D3E6D3CF +:10C7B000E8EA93449C42EBF7BCBA3F7D19228E70A5 +:10C7C000C414F884F6E5DC9E1B240A300E3E8F0F5D +:10C7D000E4C5DB42FBF2BF6527DD0AC25E3E6E5850 +:10C7E000F74D33E2D5D7B5D5C471E4AF681F69F40E +:10C7F00076C4808FC6031728F6D11CB213797FB890 +:10C8000048E368F2DB445DB2BDF605C9B1196AC9F7 +:10C810004E24B697A9646F945A81E8B34227979B38 +:10C8200025A742E54CC96D14F16B1FE37913B48E53 +:10C83000A7E7375A9D294603DD178AB8E1FCF84D72 +:10C8400073791B47C346BA3F319ABDA6D12417EB73 +:10C85000E2D4BC4781939687B81C7FCB1017633C0A +:10C860002846ECBF1CED7613E2DBD0B4F0D15CEAD5 +:10C870006F2F631CB53C467A8F705C70B0B586EC48 +:10C880009D6FECFFC121173EFF28A193E3B07F0EFF +:10C89000ECCCFB29F65971A497BF235AE50FDC4471 +:10C8A000F0AE8601D6471AFE8B20C0E51D30C0A52C +:10C8B00007ECDCBE049C5C2E03379777432B97274D +:10C8C000C66E6FC693000BC76C317D06211C56C621 +:10C8D000AF9F4CF3D82BB665B0BC51EF9F22EF331E +:10C8E0006AE36D7C7F82ED224FF37494AFC3C1F78E +:10C8F00017A6AC12BAE770DD2EF06DCD277BAD3FE9 +:10C90000DE0C127DA7952CE488F71C70DCB5DFA443 +:10C91000BE7F5EE17A716521DB3B705161BB6CBA11 +:10C920007ABFA8C9D9E21B44DE2F5C16FD670CE86C +:10C93000F3C38A295849EFFF55E17B8A999F47E65F +:10C940008FE9E5F00FB3843E2A4E34B486C7333AFC +:10C9500052468B78A05AB728768E6F94A9FDFB6358 +:10C960000DCC1FF8D3609D4C748AFD9CDEFB3B957B +:10C970000FD1D11C1DFAAE6EBAD1BF9F9EAF56E546 +:10C980003C4A61D65365C49784538F5EEE43CA0D0B +:10C990007CFF3F4D2541F35F251C6B5102F1714037 +:10C9A000667E85012E5D60673D5F014E2E67819B2F +:10C9B0004BE46B2EABA093CBAF431797D510E0128F +:10C9C000BEE67416E2FC06AB5F16E7F63B76CE13C6 +:10C9D00099D364A0F874F13744DEE648B8DC9125B9 +:10C9E000E4D2C8B8E0019E7C2DB878047D91B88C63 +:10C9F000CFE6F3A3E1A2E11105BE14C271060465FE +:10CA00002A29244DEF97E331A47A25B8B83E7B4418 +:10CA10003CFC1D744F571AF41839BE118947A5E024 +:10CA2000934839D6A4AE5F225A934372674B96C29D +:10CA3000CF35F983E78CEF8523E592F6BC7854C5B2 +:10CA4000A70A8AF007B37E554FF1EFE2A28AB594A8 +:10CA5000C2B4E15FFDF5141F2F9E5EF1422AD61F7E +:10CA6000CE7A45D4F32B8A4C4E8075D2ABF5B3B059 +:10CA7000FFC366C482FD3FC73A8A2F5A1E0496F34D +:10CA8000568B782EA709FF10FB79C9CED2E8B35890 +:10CA9000843D97BB48592B21CEE5133DED59C9A1E3 +:10CAA000F1C09AC979EDE3547B654B96EA8F27393B +:10CAB0008A88EE2726BA3BA87F7F8CB857D5DA77CD +:10CAC000ABF6E0962C81CB70E50B59AECD5957787B +:10CAD000DEFF27330785B667793A49AEB48CBA943E +:10CAE000497AF89382231B838E10BF4808DA22A468 +:10CAF000BFC3A5EA0D2D8F9DEC24C4B7D8EDE92066 +:10CB0000513365D1C0C43685C77B92C79307EE26E3 +:10CB1000FEF824FE88F94FCCD7E3C57EABF261EF77 +:10CB2000BE371E1C27AA6E08E3E7967D5FFCE51D55 +:10CB3000C4B7E582CD49DDFB63C5BAA7F73EB19620 +:10CB4000F358C1A63BBF1AFF4FEBB1F0773CD37B44 +:10CB500073EEA27E338E9C4AA3F5CC3C15ECA0303C +:10CB600053FFDE63E304DF69F74417A5AFA23FB5C7 +:10CB70003C8B356F893C8B35A440A9FE0B89FDDFCA +:10CB8000E60326BEC7F94095EB5ABEE572757DE710 +:10CB900048BFC8F4FDE952CE0F019FB06715FC47AE +:10CBA000E770CA71BD5C6DEE8A8CCF8AFCB4C8EFA9 +:10CBB0009C23F3437E9BA5E6874C80094CBF9A0FCC +:10CBC00039DC7AB53C907F04D71FB2F83ECD2D13E7 +:10CBD000FF9518453EF26CF93B4E3BAD73426EA19A +:10CBE000C82315F9B54D51625D2FA979FF6B9E924F +:10CBF00081F225D6EC35F3F7933BF0F896929D9BA6 +:10CC0000FD23B61F9A541AB5F372CF2689EFF96047 +:10CC10007B22F354FE2E8B8BF62F7FD71817E193D0 +:10CC20006F16F6EE8E5D964D54EFD810ED2539F85F +:10CC3000F3F881EBE8BBE48E28358F1BE7A1FBB648 +:10CC4000FCD48154FEDE205BE8930E55AF6AF78D6D +:10CC5000DA3DF59A98CC31E41F0DB6078DBAEF771F +:10CC60003B543BB798E823BBADD524EEB9A304FDF4 +:10CC7000FBFFB06014D99D2F1ADDA3286FE5C2D148 +:10CC8000D438B84ADE55891F37E12A7184E2A35BA4 +:10CC9000F8BB98E26D468187CA6F2FB5BBE07D5324 +:10CCA000086F8DFED9F2739566BAAF5B0676E6C360 +:10CCB000379EEEB0627DCD239C918FA466C7911EF6 +:10CCC000293920F3F72AD30E883CA697C01DE7C761 +:10CCD000BA25C5004A18BF4429D1A084F9F7A3B2E8 +:10CCE0001374F518E775BAFE71A5A9BAF66E350F7B +:10CCF00046CB0FD6ECC878D7D774EFCD08DCCD790A +:10CD00009B895585BAE7F099E0FB52FC27FCC55694 +:10CD100099CED5F420C0930EFADEC69942F27C5A21 +:10CD20009FFE7C58D47CA9D26027107F471D35EA2E +:10CD3000F2872DB69BF8FB1DCB08F954CE6CF5BCE1 +:10CD40008C87F1BAEFB907F1D6E7574D86F47F2EFD +:10CD50002B267C4DE0C3F60BF406B58F079F370CEE +:10CD60006FED5CBD045DAC3F93DD7ADCC734EA71E6 +:10CD70001FEBD1E33E6EB91EF709AD7ADCAF6FD37E +:10CD8000E3EBF0EA714DDB344DD73FA3B34257CF0D +:10CD9000DAF6755DFF1C5F9DAE7EC3EE5B75FD2709 +:10CDA000752DD1B5E7F7ACB8263E28F0AFD1F5D355 +:10CDB000F8A0E8C0B7AFC8075EFCC7F210443E6DEC +:10CDC00029E24E71D0E1F6BF43EA8458E9ABEF7F28 +:10CDD0006BB69AC7ABEDFF35CACBA5A44F51EECDCC +:10CDE0003D20F2AEE6DAAC9C9F85FC924D76C20502 +:10CDF0008876D27DBAA6E7DDAA7C996733B29E9881 +:10CE00003B4AC81F2D2F2BD22F936C07BEA0B8C84A +:10CE1000BC522922FEA6CFEF1EE93EA124E0D7D5C1 +:10CE20000B8E824C7AB1E48F4A470CCE53744ADCA5 +:10CE30004F44FA81C5414F07A9DD297DA88615F227 +:10CE400007053DDA3D46A4FF029D3B59CE9BD573B5 +:10CE500013E9373E60403B228DF3B5D8AEBC68186D +:10CE6000E247A618D99EF4B07DF9F004CF33D92853 +:10CE7000075F1FF42F831D029C2EA0FBA37E2D8F26 +:10CE8000C7FB8D06BAE7EA8F07CE5B39BCAEA1813E +:10CE9000F30693C01E9C2CC22CF4F372B6E76734E1 +:10CEA000DE1949F8738B4BDFFFD10B4867976A5F38 +:10CEB0008E59D4C5F19C3589AE5F64970CBD4F8AFD +:10CEC0002CB5F89516CFEA6EF773392AD7C9767F55 +:10CED000645C2968107102EFB7C5F77D1F135153C9 +:10CEE0004379A517369938FF0254FFF776751FB4BA +:10CEF00038C122751D677088E5A83F6FEF799DF7EF +:10CF000063654A9F1A5F6875520AE4D2F136CEB360 +:10CF100000579153C491B4B8C138F9CBD83D23AD73 +:10CF20007F65CA47BA78133C97784DF997A1758BFE +:10CF3000F1CFCC117AFFCC9C719CD7181AFF138EBD +:10CF40005FDDDEFA071D7FDFD97642C7CF8BBDEFED +:10CF5000E9DA834903268ACF05AB726691DD80FB4F +:10CF60007E8EF633B867EC4DB7219EE75EB44CBEBB +:10CF7000967CE995291FF3FCA7DA03BCAFDAFA4ED9 +:10CF8000B71FE77AB03DC865E4FA34FF5E2BCDBF2A +:10CF90000196075AFEE4D03C4617E7B33C9C93AA9F +:10CFA000C6FF9877E181B526F5FEDFB38DE2D41791 +:10CFB000178C2AA0F8E929355FF5949AAF7A4ACD03 +:10CFC000573DA5E6A79E52F353FB4DB64D141F38AF +:10CFD0002589F8FC5D133CB139649FAF18C8A37371 +:10CFE000D6921FBC43C279AB477BE273705EC94CDB +:10CFF000B969BC8E4CB2FF3E3478F328CFA83A67AB +:10D000005703F94D1F467B3F210B63D68F77349032 +:10D010009FF4A1599CBF861F7F8FCFDB5B06192829 +:10D020007FD0FB9224F2BF6C4133DDFFAC4DF64C58 +:10D03000A0F1294F8AF2E0E939F1A5164FEC370942 +:10D040003BAE5FB5E7D273843D999123EE51B4F2C4 +:10D05000C61CE0E70D6A395BDE92C9DFA5D37754C1 +:10D060000E9EDF457924DE7D168E5344E61715FEAD +:10D07000DAE297C2E29153721C3C4E529AF8BE3CDF +:10D08000E996281FE59F4030309172A406E93D2AB9 +:10D09000F231CF519C96CE27258387E5374DC911B4 +:10D0A000F666F31B674E539CE754B6677A4E7228B8 +:10D0B000DED91CBB9FE34335390ACF8774B2FF66C4 +:10D0C00091613DED4BB33568A6F7468A330FB7EE55 +:10D0D000737705FE29D741F9494A06BDAFCD8B7458 +:10D0E000D4D07E6BEBD5E8088D7375FED7E2A75AD6 +:10D0F000FD48CDC399746E0A29CFEB0AFA71698E87 +:10D10000F0D74F9920220F4CC50DB43CB05C964F20 +:10D11000FFA0EE73E43EB5E688F517A27EA538B908 +:10D12000251A757B61685CECEFA17B9045AD8E178D +:10D130000E26D177659328DC32488736EE4F26BA23 +:10D1400056E484C5A591DFC4FF7331278AF9A3791A +:10D15000DF89D3F4FF10DCF3AF938A085FEDBD489D +:10D160007C11D70984E76183DFACE6A13D90C371F0 +:10D17000E9C39CE7A5E1FB55F1EC9F1060BFB07FD0 +:10D18000C7171329CFB559BD476AD6EE2FBAF5F1A7 +:10D190001AC4C34BF183A1F716C0F71F16556F5879 +:10D1A000B4F7C71B75EFCF8F757F9FE8DFA3CA0762 +:10D1B000ECEF33A87161D233837161550F95A822CA +:10D1C000493A2EE2C125549261901BC77AA9589B17 +:10D1D0000FE9A2FDDB2879599F6BF1A30E557FCB98 +:10D1E0004BD7725CAD143AB9B4C80ED68796774463 +:10D1F0003C65302EF4C86B3AFFFCBF01732CFF89ED +:10D20000104D0000000000001F8B0800000000000F +:10D21000000BFB51CFC0F00309E772A2F22FA1F17E +:10D22000F9D1F89B3950F94CECA8FCA968F2E878E0 +:10D230001D137E7942D89A9981C109883D81388031 +:10D2400019BFDA7222EC7A2C09A13B80F41E207EF1 +:10D2500002C46D820C0CADC20C0C3780F43441CA90 +:10D26000DC8B8EEBF8A96BDE28260DB7CAA1F25B2A +:10D27000341918D66B31307CD386F06B91E4B975D4 +:10D2800080EA3521ECC3CA0C0C7D4035A572D8CD9F +:10D290003D0294EF07CA4BEB40F800A619B67C6834 +:10D2A00003000000000000001F8B080000000000C9 +:10D2B000000BCD7D0D7854D5B5E83E67CE99BF4CB7 +:10D2C0002627C9244C2084931020408243482040C4 +:10D2D000B493106CC458871F151174426945048DAE +:10D2E000143556DA0CE487014183AD15517108A954 +:10D2F000455BDB48B1A5BDB677105AD1726BB468F7 +:10D30000EDADB601ADAD7DEA8BB456FB3D2D6FADF5 +:10D31000B5F7C99C73F287EDBDEFDDF8B59B7DCE07 +:10D32000D97BAFBDF6FADF6BEF71B965C6263076F3 +:10D330000EFF3EC3D829893196932A993BB49C05A8 +:10D34000185BAB39F51D858CDDE8089DD02BE0F925 +:10D350001839F44D1D9F4FAE637EC61CF87D1E63C9 +:10D36000A5F87F958CB5FAE45012DBBDECA872E805 +:10D37000A9FEEDE55A8531AD1C4AB6B3D701FDB023 +:10D3800084DADFE766F477AE88B1E6D7DE2F3B6E4E +:10D39000D4E17F41961E786B3AFC630E9B73CEC13D +:10D3A000D859DF928C241BBEFF3FB7B002651263D1 +:10D3B0001FB6F4971D9F34F8FD8D0ED6D4530A2561 +:10D3C000636FBAB270BE31E7D5658CCD626E3E7FB9 +:10D3D0001F4C626E6A9E371E940A9492143C6B7DB9 +:10D3E000F269D710703316B3B487FE93D8BFBDFD72 +:10D3F000B0ED14F86F3663F40AF0F78814AD42BC50 +:10D40000BA02AB6363E1D18DDFA961D1D254FF08C9 +:10D4100077A42C35CEB0F006CE0FDEE1F0697C7734 +:10D42000D6B7B58341BB5695D3435B8E1CDACA068B +:10D43000D38381FF56DFD6DCA86F78FC031DE81A82 +:10D44000E2DFE1E374F34A6B152C2FBB8579889EEC +:10D4500006C1310A9DAC423A49FBEFA793E6FF793A +:10D4600074F2157CFE3F854E18EBA4F503E09C9109 +:10D4700074733DC2108ED477A63217C8800FC91CB2 +:10D48000818EF71D33B0F4C6503E3802CA5B7DA6CC +:10D490007536DAA94E16C5F569659CEEE80F40545D +:10D4A00082A10328B7BA9993BE53026EEA47D19A74 +:10D4B000082F80AF6E82A7C18A47C6C20CE15573A0 +:10D4C0004B3238FEB2869CEFBE96A6198A6AAAAB8A +:10D4D0006C39C20188A379AA5F66896C809F7DBC84 +:10D4E000545F52367C3F76BC015FBD1A05BE8AE5AB +:10D4F0003843DF64297EB2CFEBDF07E6E58C219E5F +:10D500004CF3FAF791E6D59A3E39C34C177638DAE0 +:10D51000705E9352F318788EF3F39DFFFA0FF7BE07 +:10D520004D0D071BA18B58FAD0F353717EF0EC3FE1 +:10D53000C5FC549F93D60DE6F59F43CD4B614D61DD +:10D54000A970F0BC14CD4D7831C655DCB7CD50660E +:10D55000A5E0FB23D378FF03E387882E1D1AA3766B +:10D560002759F48F381ED0612FD1A12F4CF87506A2 +:10D57000A1830BB00C2F8F013EDB8ECE65A56524F9 +:10D58000BED87A289DBE286B80EFDA3E71707A088B +:10D590005450FF061C67986CC1CF001D0B38ECF887 +:10D5A000EA1AA02BEBFA776DBF38F8797C2E713C24 +:10D5B000D9F162B407BC31A932451F061D746D173D +:10D5C000F80A0CBD9EAAFB4B3394ECC174D09E3379 +:10D5D0005BE7FD4047B9A897F9DFD4E258AD02E315 +:10D5E000BA711ED0DF9EFCFADF34C23F9D72E4B9EF +:10D5F0002DF0ACB09BC95EA8BFE98E6649A6FE823D +:10D60000D17E09FB6B17F35CE858EF3903E53796D9 +:10D610001765AC067AAB92A421E9696F0BCC09F8C7 +:10D62000EFDE1637951FBE3E85E6331CDDED6CE957 +:10D630002B33F3EBCEB5C7DD1391CF02726812C066 +:10D640003DF686EE07BE88F497A797A3DD02032B6D +:10D65000383F9A0FFC4D1370003EA7493926391107 +:10D66000E0789D1A8E843580B78445C212F433A6C3 +:10D670009B85923A6FAB98F0145C26C75C33080F19 +:10D68000B3100F8581D8332A2ED9CA7E5CC9013CDC +:10D690007C63B94CEBBD71D5E42EE41103EEDB24C1 +:10D6A0004E3F4C0F70BA5542418463383EDC0178DE +:10D6B0002A257EEE9190BEC795B004D27387787EFE +:10D6C000964516E07CC6ADD765D4D3ED92E0738461 +:10D6D00018E8A94DC0BD639A97E069CBD3F6233C07 +:10D6E000971B7044A5E1E8EE72ECD74E777925A13F +:10D6F00024A274DC9A484C82EF2F97A3CB100F0121 +:10D700002992C926221CFCFB0E038E18EBC5FEF3E2 +:10D71000C43A187C9096AF77A19C5823D6252FD277 +:10D72000718B0C7222185162A8BFF2FA1A1B18CC26 +:10D73000D3F5DA256F6309CF4F23DE3DBE9E1A274E +:10D740008C9B17E5707C468EAE4138D3AEE80E4B0D +:10D7500034EB26B610F8EB7E35C2703DD5EACE70BC +:10D7600004E0D97BC36CD668A2AF5BC5FC1D011673 +:10D770004E94A6D6798F83E3E1BE655B3DD7FBF07F +:10D780003B2FF1CF545621E82394243927E803E8AE +:10D790006013CE7F42547B06DB9504582DE205E8EA +:10D7A0007F0CE2E17EB5290FDBDD7F83737982E3B5 +:10D7B000E314D2A557E6E3C0FF74C48F4BE6305C98 +:10D7C00028A9349E73115480BE738B594287F9780F +:10D7D000113F28C758E75194971EC40BE0C98B78B6 +:10D7E00042FDDA9088C9F0FD98F52C14867E1DC59F +:10D7F0003169A24EF889237C69801719D6C7BBBC52 +:10D8000033A9C2F39D4AD3EFBF02F3D879C2118A7C +:10D81000E9267A64408F65293CA58780EF86D0DBB6 +:10D82000C6F7A3DB119C6E141FD77386BE00BADD4A +:10D83000CBE51AA7DBF3D54B6AB3437F13E59AA276 +:10D84000C988478F9BE3B1BD78490CF1F501F60516 +:10D85000F87174CE4C621DD68AF414FE217ED4E297 +:10D860007002E52FC9C5D9297BC5A5CB2C699AA71C +:10D8700012F45AEA6C794CC2F16E15CFD46627C106 +:10D88000E1F1717A06BD936012CE93253D687F81E8 +:10D89000FE4B825D86D33D3711EB77D27846FBB8DD +:10D8A0005ECE86B2AB156C07DF205B9C2B1CDC6E5A +:10D8B00078FCD8C65B6685F7BCDBF914FD2D93DDDB +:10D8C000387C3B85BD65D89D80C4970CBF53AC5355 +:10D8D00087CA8E4819A0D783B7C5707D3A185FF7FD +:10D8E000EDA26475B245EE388232F1F723C83C6888 +:10D8F0002714737BCBC92E4E129F149F9FFD552872 +:10D90000E8EB0116790BE9AB2B87759AED08C3DEBE +:10D91000646DCBE8BBAEEDB72551DEAB5FD666924A +:10D92000DE1074D565C31B635B09AE475A12EC0D5C +:10D9300035A537266C8ED03A1634733DE8CAEF937E +:10D94000B06EBC1FA0D7364EDFEDF125190CDFBB42 +:10D950007519E5425167E156B7854E236C593ABABD +:10D96000F632ADCBD7A13C67D02BFA91CD56BA3465 +:10D97000E8D0E87F547E8C858F16C3FC2E13747F0D +:10D9800099901FAC427DB3CF584FF21794541DD6D7 +:10D99000F7DD3B1C248F6233A5C437A5C1EF1B8480 +:10D9A0009C6EC0E7067C0077892C09BF81EBA3063B +:10D9B000F1EED853BF9E3C0B40FE65C8C15C88DDCC +:10D9C000A79EDD390BFA7F612ED475016F2EF6C745 +:10D9D000E9E3854216AEC3F795522206FD36546F31 +:10D9E00023FFE2B22A07D14D03C26FC2CB7B47FEB1 +:10D9F000A220FE6FAEB63EAF40394BF0E4F3FEC559 +:10DA0000BB0DE50EEAFF971512F1F1F1D7FF78F79C +:10DA10007C80EF64B51442F87E197AC387EB668C7C +:10DA200037802F9D69882FFB3829F917203B244B1D +:10DA3000E03B87819A2279C0EDAF6C31BF5CAD4984 +:10DA400042BF3C58D57994CB24BEDE63C33D350A32 +:10DA5000D4EE4D5FF19B28E185E9CA6C829E31D2FC +:10DA6000194A4C8C2B9D0340F3F35918E54F3E3E69 +:10DA700037D607F095B75EB1C09716B5D63D25A647 +:10DA8000F56428174DF5C2D47C0C7AF218767738F5 +:10DA9000AAA3BED82635BD0A2638DBE99E56D30098 +:10DAA00074A8F631E60FA0DE521209FCB698D3A78F +:10DAB00003E70D784E0B3A13A8C05D058CF5A20C58 +:10DAC000553ADD885F47692426EBA9F9B34D5944DF +:10DAD000376902D6EDA54B325969AA3F30602CFA5E +:10DAE000CA4EEF4A3EE37E637E8CFB59F96C0BDA3B +:10DAF000172E2DCA10DF60E76C90719D96097B513F +:10DB0000AC87A1B78C7146E5ABF3FD0E584281F9A5 +:10DB1000DFCEBC21B47F9AABE3AF0224EC0DF0FF63 +:10DB2000110EB5BA2986EB9F7151F3049423FEE9D7 +:10DB30003C7EB17CFE4AF61694C14024F6163C7F2A +:10DB4000507670FCF41758F4989ABC9AE968D7FAA2 +:10DB500042E130CA1936331C217913A2F2802C53CA +:10DB6000BBFB44F9A0CCED2F986ED8DC0FD835F76D +:10DB7000203C8561568BF4E7F059ED7CFBFCBE261A +:10DB8000F8FC80AC51194FEF0822FC6E29FA00E135 +:10DB9000B7386C890F78C24D492CEDDFAB0006F227 +:10DBA000877FFE4A378EA7541B7E7F94E42CACD728 +:10DBB0000119E7BDDCEA2FB902615A4FF87B07C7AC +:10DBC000718A71E2855F740FE55754CAD16FCB2615 +:10DBD0007A760643D47F3A7B48C3F81360A7F85C93 +:10DBE000766ADD109748B7672BDC0917F043BA0750 +:10DBF000A4304CC627BD49F0A21D87F6630636291E +:10DC000042BBBD97FC1524A1AA2CB4A34CFC88EB05 +:10DC10009BE25BC15FEC5431CCC727E0F6F9A25C14 +:10DC20002E87381FBAE13F9433194C3B8AA8CEA8FF +:10DC3000B2F2AF561222F99119B63EC729A4676114 +:10DC40006995CBB743390F9E5FECF0D1BC3217CA50 +:10DC50000917C9F570C3A4DC141C993960E7E2FB0D +:10DC600097C14E84FA871EFF0C9CA409BE33081F7F +:10DC70009AB1045F695F4CE6E34A881F80F38C1514 +:10DC80009E9DEFE37A029C96E708CF45E51678CF94 +:10DC900098E16D76F371F1BBEAACC171C3582D2BDD +:10DCA0006902A0FF208B38B3C214D44B1FB077C2D7 +:10DCB000F548177BF2894FFC9AC0AFBB9788516338 +:10DCC0001AC9637BFC10D6EBAC79BD5895A8EB2044 +:10DCD00067399EADEF593ED10DD51D6CC0EF595D32 +:10DCE0002510C9F4AB7E0B22E286132ADB81D58F87 +:10DCF000E1ABD948EFFCEFCC1B5C0FDF20ECFA3531 +:10DD00002CE247F8DE65723DFA51EF2245C23ABC7B +:10DD1000EB9B7D600BA71737D2799BC4E93FC721E6 +:10DD2000E249BE0E8AC72B6C80DEA473B4AE3C3EC3 +:10DD300002F61DD15D8CB9B7909E8F73BD1583FF20 +:10DD4000B0FE854EAB1EBB7E8FB5FE45B62417E5F3 +:10DD5000D717BFAE3294EB37D8F4C427328FCB5CE1 +:10DD6000CF9A3AD0BED926E24EAB35A664C3BA6D7F +:10DD7000F8E1C3B3D10FCB7770F9F367F063755750 +:10DD80000AEFEB020967B834353F85F1F9B54AA1CE +:10DD9000CFCD97869FDF36B5F773A8AF63BB54DA54 +:10DDA000DF60424F527B184A39EC087B6658DA1123 +:10DDB000BC9F8F5BE737DAFCEDF305CD4CF35D7765 +:10DDC000B091E4C770F3711E94C8CFB4CBA1590EC3 +:10DDD000C962371B746EF019D035B7BB7EE749B402 +:10DDE000C27857A1914AF64BD31C1E876DBA00CB5F +:10DDF000D1DA5DF34FB6BB0EDBE57CFA769F1FA64A +:10DE00005D3C108B20BF1976BECB1DE58BA8F0F8CA +:10DE10005C3C38CAFB7C78EF18E17DF1C8ED81EFFE +:10DE2000CE9D03BAC0D816B7C362F908D799160CAD +:10DE3000AC3376428D5C8EFEDC89971D0C3C28A8A5 +:10DE40006B1D419C57BBA4A37DDEB87331BD6F3CF5 +:10DE5000E508C89C0FC9FF3B51784937FA95EB1C80 +:10DE6000DC7F674A9F82F6436355E1C5A83B4EA815 +:10DE7000B1FC4C18BFFEABDCFFA8A9DAB206DB7D13 +:10DE80004EBF5A457DF2EC775A57627D9DFE59058B +:10DE9000E5F0ADD80FE0EFDDC79F9CCD00BE134F7E +:10DEA000A4B324C2AF249C68FFAC037A467ABAF1CB +:10DEB0007BE9644FAD3BB4E14003F423FD309DE0CA +:10DEC000A93F74FDA32E82AF95D3E70F9666DC2B96 +:10DED000E6E506D49CD822E292B158FE5268B2C15F +:10DEE000C5AE43FBC0C083419FABE3337F1E44B844 +:10DEF0000E6696A3581BA06B05BE87F68D502E1993 +:10DF000082AEF73A787CE59D42D77284533A78F432 +:10DF10005A9A5FCF552ACE4F6ACB74FE01C6BB47D3 +:10DF2000CC13BEA379C41E931293E0FD3B8F497CB2 +:10DF30005E3D65FB3D88D783FB9DAB691F620BE1AE +:10DF4000D78077F5C1991D63E1BBD53B338BD06E8C +:10DF50005CF0BD27FC7DF0FCE6838E24DAE950926C +:10DF6000BDFEF9B883FC29838F51A34B40073709C5 +:10DF7000F972D3E10D247F6FEAB98BF4D3CD475406 +:10DF80008B7E023CD3FED68DBF7684D027B9F1FBC1 +:10DF9000DFF2A39DF5E7E0E37EAD94C66974021F4E +:10DFA000549CB4EA35ECFFA3ACC1FD81E146FB39DA +:10DFB00037F76CE7E331AE470DB9F267FC47DE6037 +:10DFC0003D77D461DD1FFB809D9C4D76CFC1EC2158 +:10DFD000ED4F43AF19F205FCA27D3118F79D43FFC9 +:10DFE0006B1FC6BF4F7CF2977D7722DE7FE2D19018 +:10DFF000BE6F7EFC0FFBBE8C7AE6884B463A79EF0B +:10E0000027DF7A742FD4DFFBCD947264A9DF0A79FD +:10E01000F55EE187B938FF4D3F593806E971D353B2 +:10E020000BC6B021E21946F91ED055C24457867D71 +:10E03000AF1F81FEC640F56951DAD6E5D8614712B7 +:10E040004343EFBEEA22BBEB6678D60C76C24D4D59 +:10E05000D7537C10EB9B01BF377D87FB8383F11C7B +:10E060001B2753F036390E5DD09B0E2FBDFCC20A24 +:10E070002CD5908EF365FDA4A7ECED6E3E05EB79F3 +:10E08000C1F0EBF701FBD88978BF19ED991983D757 +:10E09000EF5DFCC7DCC1EBF77787751FFC03B6FEAD +:10E0A00091BDF8F270F690F13463FD363C7545C6CB +:10E0B00050F122337E93E781DFB522BEFF2CA843C7 +:10E0C00005F9EED0B71FDD1BC0F575851A70BD9F31 +:10E0D000F8A0008DD63FA9FDD722FFF5FFC4A57596 +:10E0E000419B753FF935E9B1F79E7AD1A9933C0779 +:10E0F000D317F4F37B6CE0AF17F5F54D22CE7B73AD +:10E10000777A12FD2C639D6E4A2CAED7FDF49CF6F7 +:10E11000276F4A70BABF2971749934C4BAD528459B +:10E120005C7F2472082F1BF45EA7E6B3AEA754856C +:10E13000EB78FA62A4BBE1D6D198BF86F39F635A0D +:10E14000CF6ECEAFC3F1E57BFB5D0AC6AF8CF57D2C +:10E150004FD8313727A45FB321F8D5880F31C7CA0C +:10E1600011D7C94E0FF3152B3D18ED8D798FC6CF02 +:10E17000A3CFE7D3E16B3A6E02550EC6DB96855C02 +:10E180003EFFB2D0457EC28BAA7EFF97903E9E5343 +:10E19000591734F95CD11F157D083FFC05B487A6DB +:10E1A000A4EA975749EDD9D0EEF27026DFA7B1ED7A +:10E1B0004F45AA1D4C37C173B67E533EF2D9B120EC +:10E1C000A37D97E3797CFFE36779EB8FE3F39DD041 +:10E1D0003F9B82FB21607702FDC75B82540EEC0BF4 +:10E1E000864B64B4B337A2DD8FE31D7CFCF1C7819D +:10E1F0004E31BC8E76E1315095667FF65501EF4B7E +:10E200002D6EB2E3AE2E795241FD2D953EA9A05E52 +:10E21000B934FAA482FB5AC707F659F476DC825B5C +:10E22000549259BE03FAFF99C4F5EAA286FDCA6A60 +:10E2300053BF978A7E2E2DDD9F8FF2F779B1BF688D +:10E24000C7D7530A97AF5BA67E2B1FC77B7EFCFD0B +:10E25000F9DC190B525CB240C4BB8F4FFAD6431B9A +:10E26000018F274AA410C6CB4E346FF5A11C3EA1E6 +:10E270002FB5D0DFD1A97F94B09F82E07E05E575F0 +:10E2800017CA09985F37CC0FE5C5A38037AC1F04C8 +:10E29000BC61F9788B4EE5775A4AE8FD775B4254CA +:10E2A000EF69A9A2FAA19630D50FB7D453FD072D77 +:10E2B00011AA1F69594EE5D32D6BE9B97FC7C1B6C5 +:10E2C0002C8C6B4E937A905C7FDAD244EF932DCDF9 +:10E2D000F4FE5685DB070571169740CE3637F37D81 +:10E2E000982E35B23C6282DFF8EE3185C717FAD33B +:10E2F000A25D28B7CED62FABC4F56F9F745519AE6B +:10E30000E309FD6B51B42F3E2876D31E03850280AE +:10E310002F9E9B3487F63BD767441F534CFE7E519C +:10E32000DCC992B3701D1375B9A8FFBE00F61DE0DD +:10E330007151FD7E2517FA59122DD4655ACF9EB61C +:10E340002CF42BCAC4FB86996A6DE9E8EBB859C076 +:10E35000FD6C4D533EF2D9B3C2DEBA3AEA602526CF +:10E360003B6469BDB57EBD68977549F188FBBBE923 +:10E37000211937A34C7CCEF9C815CC12411111D705 +:10E38000D3C75ABE73680722182F1E4E3E39FCF5BC +:10E39000DC4ED694B750BEC9E8EFCA297963C44DA4 +:10E3A0005730E32F4CF5EB06EAE06119F635E0EB68 +:10E3B0009AF02915EDF56BC10552A05CCD424EB423 +:10E3C000BBC1BFA5F28BAC894A577E5225B9C7EABB +:10E3D00034DC5790C2F31DE7D2468AA759F71FECE9 +:10E3E000FBF0130030C477709E3B6AF6BBDE16F874 +:10E3F000FD509440471B907E861BC7902F865CF98A +:10E40000BB2FF2BE52995A1FA31CAEBD7D9D0C7846 +:10E410008CBC82AC4B363D3B1E96B8AB93EF5B3762 +:10E42000F74964BF4F7CAD90F68D018924BF5C1E17 +:10E4300021BF84FDDB8CFF84EFD8B2B4C43751FF19 +:10E44000F4145ABE0B8E35E2AA7D1E941FDB9ACFC0 +:10E450005079B6B968F71436FA7CEDF2F4EFBE687D +:10E46000B60AF8BA7FC28CDD1827DFF79C83E2E298 +:10E47000FBD4BEAB118EE6D75CFA5680F705251C9F +:10E48000502B496E132806FD36EFD47797E8C3E387 +:10E49000A52B5E34CAFEBF15AE017A1C863F5274AE +:10E4A000C2BF033F85B9CB892E933AB0485F5AC6A5 +:10E4B0000F7AE1EDAAE6A48AEBFF86122D43B8AFEE +:10E4C000610915E97142BE968B42A4C6AF13BEF72F +:10E4D000E5BE95474245E92B8C7C9A7C20C686D4C4 +:10E4E000E3DB84DE0170280E5420E23872DA3B79D7 +:10E4F000A8376A5469C8BC09D6ACBC63CEEB025DD0 +:10E500004C7A19BEA57D99461C18406B94FB28FED9 +:10E5100056A72DAECB04145DBBB950E85B4E37D780 +:10E520006ECEDC8FFEEA6435DAA0F2B800C5BB1B04 +:10E530007DD3EAD05E3BDFF9C1E87D6807BA04BF4E +:10E540001BF37DD31DBD0AFB2DD4A4DA4C86FCCD74 +:10E55000E3C70B45BCF16C80913D3F5CFFC7302F9A +:10E560000414C78F60DDB1547D5227DA8BDDB0FE15 +:10E570001857FD3ED0253EFF77D05758DF07FA0ADF +:10E58000EB3F037D85F57F037D85F5A7405F61FD4A +:10E5900020E82985E74BDC8074AC06F8BE73AB93AA +:10E5A000ADA5FC335B5C7BA3C0BF517E49E574D055 +:10E5B0008E013BD4173F73F27D30451BB7249D97E6 +:10E5C000481765BD7DB548F7FEC32C8176EDA237AF +:10E5D0003B15AC4FFB5853D004B9FB0727B6224973 +:10E5E000F9A749B41FB1E747CD612FD4A7C9A1E36B +:10E5F0001AF2F37719C5AFBE374952304FC97FA41D +:10E60000E3165C8F192CBC85FC79A5FFA80BC69F6F +:10E61000B14C0BA1BDB1F7A7CE30DAA37B9D115A47 +:10E62000E72756B05017F2133AD1D0FEC02449A6BE +:10E630007EE2AFDC89FDF877BEF515FCDE5FF2E027 +:10E6400097A82C7EEC567A5EFC6FB753FD48F20E0D +:10E65000AC8F09BEBFFC25E82763DAD44B43583E94 +:10E66000A65C8265F0DBCEB44BB13CB4C773298C99 +:10E670009F37BEEBB91AA83FAB16129EBEFD446E83 +:10E680004308E068BF45A6FDD4A34A36D51F6C0AEF +:10E6900050BD54754450FEF5542BF509939E7F48A8 +:10E6A000E5FB198FAA4E2A15C541F69E916FA81C4D +:10E6B000E4F91FEAD33C8F40ED51C88F706A4D9446 +:10E6C000F7F188147D14D7151C9C21F7711E57791A +:10E6D0005CB2743FA7FFEF9E901398D774E848513F +:10E6E0001ADA4D878E3C23A37C2C55785CE5D089C3 +:10E6F0007B3DE980E7878E6C1CE320FB5E4FBB0A05 +:10E70000FA794CE5F92087900E2ACDED0FC9584EC5 +:10E71000C7F63EDE3E03E78DEDA554FB2745FB1F04 +:10E72000ABC4B3A6F65D34FE34D3F86877E4FFC813 +:10E730003AFE8FB03DB47B6650FB726A3F51B4B76E +:10E74000F3D351D1AE5DD2EF2A457B6683C2E3A4F9 +:10E750009BB2C8AEBC40E80DE3FBD382EE170DECD4 +:10E76000CFB134ECBFE7E9A28C91FC7C32AA0DF961 +:10E77000447AD99B92F354CFB2D5C7DABE2FB2BD3B +:10E780009F667B5F6EADAFE1F6FD34F1AC99251E5F +:10E79000DA887C942FF3FDF4EF94D0FCA60DE84FBB +:10E7A000AE4FA70B3B1ABEDF8176346B50187D2F1E +:10E7B000F4E8740FEFEFF93C63FE492FE2B999F5E5 +:10E7C00078A7E3F7876546F88B4EA4EF8B447F2C40 +:10E7D0003189D745FB63F92F2D9A4EF4E6203B3D56 +:10E7E00085CF08ED773E29F52EC2FE629758D7A354 +:10E7F0005CCCC7AEF7DA9C59443F5D4796C44BA149 +:10E80000DDD7EA141AF7924EBD365D47F993DC8ADC +:10E81000DB32B84FF2634055310379044BD9F5141C +:10E82000DF077D2E3D74CC07ED9ED8C5E58421978A +:10E83000B6F5B43DFB1528C73B33A9FFA2ED755EC5 +:10E8400094D7C794A50CFD0735BE2C2CD1BC19E577 +:10E85000DB156D3F255F6FA2B3B27C99E8AE687B94 +:10E8600080F37FA07B1EDFEB0BB315E9D8AF4BEC39 +:10E87000C7CA311BDF8E7722DF46A421F35D273A1A +:10E88000006E5CCF5FC8DCCEA9D7D3169BF2E50E35 +:10E890001DE47264DA6315674F607E9B366F16CA9B +:10E8A00099AEED4E9E6F392E7400F9AFCCC9E50AD2 +:10E8B000EB1B36CFB2CC3944BEDB04A6DF5307EDE9 +:10E8C000271CF192DC997090E7931EFA3821F3F837 +:10E8D000B195DEABDFF15AEC6FB9D36A8F4F60268A +:10E8E0007BBC70087A7F6D7AEAFB22B24F29FF9DCC +:10E8F0007D7C8EF6AF66B8AD701BE57E412709D0F2 +:10E900009B581E8A2F71EB308F9F078A76237DA933 +:10E910007159A7BC8A58D857339BB888FA291779F8 +:10E92000766A2C598BF43DAD2D29A7C1F7AEA77996 +:10E930001E19F42853BEA996C8C238273BC1E39BD1 +:10E94000C67E24F213CA67D7D3A67808CE4AEC63F2 +:10E950004DB3EDE31589784A912D7E628F8B5CEB88 +:10E96000B4C639EFFEB283F62163AF3888AF0FCC5F +:10E97000653129837F8FFB517B2E76EFDF417296C5 +:10E98000FB27DF137832E225373AF97ED3F1D7A798 +:10E9900078919E37621221AC77D7CED95EE4C3035B +:10E9A0004F03C722BDCF7BDEDB47EBCFF3555C02C5 +:10E9B000A6ADF39E7F7E2D8CD3F323996C9DEFE65D +:10E9C000CBE364A0AF7BEBDC946FE63FD03316E380 +:10E9D000E1DFDE2FE202A718E9A138137FF82C80CF +:10E9E000FE994676D79D4E59E4A346EE44BA93DD90 +:10E9F0007C7FC23F71FF58F47F1F2F94787C7E94F8 +:10EA00007EDA52FDB499FB31D9812AA7D3248F1F16 +:10EA1000886E0ADC3EA267BB3DD9789C9F2B00BB69 +:10EA2000F01E6725FA759130F96760E6513FE76F90 +:10EA300017C6087F82CE0A029972A66EB60F237B94 +:10EA400011DE09F96C2BD2E5F9DA855DC21EDC27EF +:10EA5000F286D538CFEF4AA05D08CF7F21EC42B0D7 +:10EA6000F31E755AECBCD072CC4F39DA115DA0CCD4 +:10EA7000253BAE1CEBDFED88B6BAA15E20F7E56161 +:10EA80004AF9B18EC60558F7B74AA49A9E867A2CE1 +:10EA90001FB98071BBAF8B7139A4F4BFF859A89727 +:10EAA000AC0984703FB74066DE12948FEBF8F92A08 +:10EAB0007F82DB5176F8F789B891BF357323AEF3C7 +:10EAC0003127D7B3C7C43A1AF5554A34E9A47D248F +:10EAD00030857253FBC46A80E7411CC30407A467F6 +:10EAE000A726F69B6263F9390D28CB865C7FEE671B +:10EAF0008CB6FE89C964FFC3FABF80F833AF7F7656 +:10EB0000E1F9AF3FC82D126DC3F93FAE8FA6E361A7 +:10EB1000AD81FA59167D9DD62B5FD877C6BAC960EC +:10EB20009F43E910797B7EC7E226E4B3F7053F1BDC +:10EB3000E59F04DED86B83CED5FC09FB7529519186 +:10EB40007CC2E5BABF15FAF199F02BFC2F039E5554 +:10EB5000CAEAFFED34C52511EFE8979D35F0CD9A4F +:10EB6000286F9B294DC17F09DFF903FCF689E03747 +:10EB700082B300FCB14FC36FA97D58BD4D433A2D00 +:10EB80006021C4FD02DF624B9EE91B52D4EBCA49EF +:10EB9000D907CDAF811F7201C2DFA772FCF4AB3879 +:10EBA0009FDA6CBD4242839FED5C701244612D324E +:10EBB000321E4C62772DC038666D1AAF376CFB6C15 +:10EBC0005B0CEBB8C7300FDF7F6B01EE13D44EE464 +:10EBD000EF23F81EEA8BD5F01897699F1B9621C189 +:10EBE0004C7EA3AA9DAE41F9007E6381AB92FCEFFF +:10EBF0005A5C928266267F1ABF3121FCC66E21279D +:10EC000080AE4AB03F35C6C87F1CCDEF9BE9E274A9 +:10EC10006494E5289C724C7EDF370DBFAF732CF7F0 +:10EC2000FB3A2DFCD68DF622CA6D4527BD3210A7C2 +:10EC300069F370B921ECCF42C35EB4C965C3FE2C41 +:10EC4000F458E926A3C0E8374CFDDAE9C8B01B2721 +:10EC50008A678DDD9CAEFCFF686DDC2E61FCAD9F8C +:10EC6000E8521574B50B37F7002FFBE3FC9C42D636 +:10EC70001D3C7FB97B675626F67FCA19BECC5599D5 +:10EC80005AAFAF3BC3979BEBB07ED161D6EFCAF3CF +:10EC9000593FD5E78999D7C3C0FFC9167E2EE4979F +:10ECA00042BEF70A7FFF2C0B5F87F4D3EAD429FE1C +:10ECB000147BDE417276383A182E8E65ACB7214F40 +:10ECC0005ADC7C9D532597C327C57E4F61159BA7B2 +:10ECD00065A4FAFDB2A08B931EFEDE3EEE1D2EDE75 +:10ECE000DEDF1A2139C544BE63614223FBC4F8EE5E +:10ECF0004E9724E488268BF3745436205CD06F51F1 +:10ED000015AB368FBB5D8CDBE0E5EFEDE3C65D5CFC +:10ED10000E1AF2D118B76827B7138CEF76887E0CDD +:10ED2000BB8DB110D977256D3C3E53B499D17AE8AB +:10ED30003B2361AC9F9CF96CF1D7D09ECF2911F198 +:10ED4000A330C3F3700F8A7EF63AC3411CCF01781B +:10ED5000C2384301C08DA5EA63A7498E37C7C8DE14 +:10ED600033D9FB0F921C7867E8F36D06DEFD0AAB22 +:10ED70007395A7E0FE87C0AB5137E6D9107AB12E64 +:10ED80001BE09BFC756D268AAFCF55F1F8695138B1 +:10ED90009FCEB9A48BF57C2CCEF78F26B9A2879E87 +:10EDA00083F78FEC7786B6C2B87BBF6AC44FF41D79 +:10EDB0002538CF5A3984FB59B9D5B7605A38DB7337 +:10EDC0005FC793CF313C3CCAE31B5DF122FAEEA151 +:10EDD000F55914CF30EAF91B787CE381EE7B2F994B +:10EDE0008CFE759C9F4BEAB2C5397EE4E2718E635E +:10EDF0002E91AFD5CDFDA1813847358F6BA89B856E +:10EE00001E5C23DBE31CC7880F8789733CEBE27130 +:10EE10008E07125CEEB4C6E504E68B75F98AC87FEE +:10EE2000EDF22D211B520D737FAD2B2EE21CBE8106 +:10EE30003883F72A80E3E72E1E2F7801193C67E418 +:10EE4000F614E7F00DC439A8FD2F5D3CCEF1EBF3CD +:10EE5000684F718E74EBF8AF88F6BFC7F69523B58F +:10EE60003F9479BD09BFBF13703B99BE681AC07348 +:10EE7000E0815743B44FC83AF575D0FFA3927E6F37 +:10EE80003DCA8F3C6EA71D90ACF2FF5DC147E942C1 +:10EE90001E1C8B6F95D15F2889B7C95EB4EF76824F +:10EEA000FFCBD0CFAD90CDE34E5C2353DCA7687B86 +:10EEB00031A7239BFF9BEE16FEEF9A41FEEF27AE94 +:10EEC00011FCDF74379FBF216FA0691D9EFF35C6FF +:10EED00035E8DBCE17C6F962C36E64420F752EE7C4 +:10EEE000F200ECCB747765EAF99868AEF09FF8F918 +:10EEF000B7E0388DEC5A431E013FB699F9B1C93ECF +:10EF0000AE9077A3F163CB7F113F5EE9FEAFE1C71F +:10EF1000E96E07F553E9FEA7F9B1D23D023FCE7580 +:10EF2000737BF15FE5C72A37E7871AF73FC78F6121 +:10EF3000D1FE12F768FC34343FD6BB395F2D1EB5C5 +:10EF4000BD951F23EE7F8D1FAF73737E6C19E0C7D5 +:10EF5000337C3F3BFEE6168C83833922F851B1F0B7 +:10EF6000A33E0A3FB60CCF8F37D37A0EC38F2D62E4 +:10EF7000FE861E86A66D667E6C19862F3011551989 +:10EF8000991F5BCE871FED7E05F859610C410DE797 +:10EF90005F30F0DB908EEDFB6DA3ED135F36FB0E63 +:10EFA0008A234C56C377BB4D767BA51AFD1AD56DC7 +:10EFB000F2C538EF34F85E00FB7987B5AF4675F2DD +:10EFC000431EC4F9BAAA2249CB798729A16008ED6A +:10EFD000F24CEBB96955E3E7A6FDF33FEE6BC5F5DF +:10EFE000D466CFC27607DD22AE673B0F60E01FD646 +:10EFF000F320C26BACEFC0B90E4C8836C1DF9177FD +:10F00000E570E7047ADCA6F55403239F13C8BA44DD +:10F01000A1F96E94BC21E4BFD63C7618FDB256C966 +:10F020006A2FAAE0FFEAE0FFF6BA8B2CF92FB707A8 +:10F03000629F055F82FC7F8E77F04F2D78E6FEBFE2 +:10F040004B8E1E47FCDD3DEFCFAF3A305FEF298F8F +:10F050008EFCFA5EC55927E62D60F802F116BBC397 +:10F060004B7E47ABD4D7C8FDBB2433C765F0FCF15A +:10F07000628CDF21FDA0DCCB07FA31E880F63FB9D6 +:10F08000FC6A4D7F2B0FC77D43D03FFEE583BC8BD1 +:10F090000AB81A15EEF75EC77AA95CC97AA87C434C +:10F0A00089BE8AF358C1FA297EB435CD7F11E2F9C1 +:10F0B000BF0B3ED3B953CA239CC28CBF5B2CE7283D +:10F0C000A788736F865F52D0C928AF69F2667EFE4B +:10F0D00078CAE6AD74DEB640D05FF17646E7CEE0A2 +:10F0E0003DED4319ED273FE4B49CC7D3DBAC75235A +:10F0F000DE592CCE59D2F3C2547CB4C8F6DCC8FF1A +:10F10000DA860F86F0FBED71528767E8FCB1E1FC0F +:10F1100022231E7A370B7B3C26BA66F95914A7695D +:10F12000CF991D1CAABD8157879BE78F18E72D0C2F +:10F130007F8AFD55F09FC4527F14A7D4BB906FF314 +:10F140003CDCDF79448AE4792A4D7C68CBCFDA2E27 +:10F1500045799CC617E3EF45BE161DAD90B95F8794 +:10F1600079596D223FCB57D144FAC755DA44E73875 +:10F17000C1464349C7A49204ED5B784B7A8298A7B5 +:10F1800073D730793A577BB85ED952C6F70BEE7A0F +:10F190005D22FFF4AE49B705CD79570E23EF6AFC27 +:10F1A0006DEE3E137EB6F936BA510F6ECB5F32224A +:10F1B000DE1D9D0ECA371AF5BB38FF6EB8F72E1F3D +:10F1C0008B63DCFBC3F1B16711D52E91E732902739 +:10F1D0002268C33190FF11A27D267B7E48AB3BE4C1 +:10F1E000C6BCA45680870D819781F13E9258329B10 +:10F1F000F23A2E477A395A369BF0EAD07BE89C598E +:10F200005A29C87D28BDF94D78961EA43C02323A91 +:10F21000DEA779849D0DAB65CE7FDA5E136528CFBE +:10F22000B6E7313A97AE6AB6F7228FCA89F336E16C +:10F2300071BC87EBDD1B44892454558EEBF628D135 +:10F240002B1089467CC2F83ECB7AC4038CFFAC12EB +:10F250005EE7C919FCDEA0F7586D2ADE80F1B44DD7 +:10F2600097ADA9443A7C45D891FE6C9E876EC0F15B +:10F270008A87DB93AF88F9E1FD0D8929A97884BFDE +:10F28000554AE2BE41FF7839D15588FC5842CFB784 +:10F2900045BF538FF7596C5B3649A37D0B35E6426A +:10F2A000BBE18AF132ED97EFAAF5AE35EFEB5EEEFA +:10F2B000E7E70CDEF5D71C477E0AF9FA28DEC2C262 +:10F2C0008A8EF4CA4D3FC62ED0C000C03C118C2B94 +:10F2D000525C32E4E6FA4FE4598104FF347956DF98 +:10F2E000559803F3B1633E9EA790BE47A2435B4689 +:10F2F0007CE501FF92FB101EF54894F2AA8ECEF633 +:10F30000927CFD5B3BCF1B3DBD6A3ED9F72FC9AB5D +:10F310001F41FBADFF372E86F9C5A72FBBB41EE3F7 +:10F32000CEA7575DB308DF9F9658BDC40FCDFA3105 +:10F330007FD53F517FE230E2ADDD43FB966AF0DFDF +:10F34000226FD27D3061BF5C05DFFFC3F1F334C0B3 +:10F35000E7EF7C67EF43B370154B92FE31F2796EA5 +:10F36000488F3E8EEBAC5C736909DA9FBB9C5A01F7 +:10F37000CA8B5D1DAE7294EB99EF83404207E38A1E +:10F38000341EDFEB079B04F364BEB2F49BE6F8C9BE +:10F39000B5397C3DDCCDEDE14218C8AD87E8A8A1C8 +:10F3A0007F22A783BFFBA24770FEB5EE9994CFB131 +:10F3B000AA89E7DD187938D7ACE5F55744FCD16E5A +:10F3C00097D9EDB067041D29419EF7AEF8B83FC24A +:10F3D00034C576BF93F5FC99991EB4D9567A506519 +:10F3E000133D84811ECA2CF4209D9B7EFEF4700F79 +:10F3F000F211E0F5CAF93CFE13AB050710F9E5255B +:10F4000095F8C5C88FB3D3FDB6E866B75C3A983FA8 +:10F410000C7ED851B1244727FADF781DADCB69495E +:10F42000C794166DCE660D9FBB1A9D11E43F832FC6 +:10F430000C7E08FBC4B9197FCD2E1F94515FDF42AB +:10F44000491FCC17A87FCCF47F1DF2893C984F56FA +:10F45000B0D055B8FFBB4261B18CAC14BDAFA8E2CF +:10F46000E75257F46DA1FDE0159B2576C6B46EE713 +:10F47000CE41DD6DC19B3670AF82E3FCF1BBE31280 +:10F48000A903EDC71D6AFFCFC6205E3339DFB57A09 +:10F49000A48318B7EF487FAB7D0CE06747AE4EF909 +:10F4A00078F67867C7E434A2EB1D578E23BD765FEC +:10F4B0008BCEA280DFDFE1C138EC6F593AD1FBD7A8 +:10F4C00000EF51F8FEFE9610BD073EF67B518E39D7 +:10F4D000432C08EFAF74F4361DC375F86D1AE53D83 +:10F4E000FCEDC7D10B703F78D7EC7513507FFCED66 +:10F4F0008EE804ADD43C8FC4589E77DE3756A633D1 +:10F5000090BAC84367E279741C7F9EA0F26158FFED +:10F5100033B074EFA5151AF69B68D747ED76F87BE4 +:10F520003D046FAE53E3F70F842B2BA1BE747A809A +:10F53000611ED4C34E7E1EC98ECFCF78B93E58EA25 +:10F54000E8D4717F6F9A376721EEFF790BF7775612 +:10F550006A6852E42CBCC483DFF1B859FB27B32A94 +:10F56000E97C59CBC1C89BA6FB86266CEE213D9752 +:10F57000561A09E2B99976A187DA8F7AF87D360DA5 +:10F58000ABBAF19CD284D27EE90BA5D89F42FDE9AB +:10F590009BA11F93BDB602A690518E79389D94AF62 +:10F5A000EC9DE4D650FEAC28A97B5B19828EF0EF6F +:10F5B0008C891EDA519F9AEC924D865D92D35183CD +:10F5C000F8F1363209E5EC0A6F21CFE3408282F18F +:10F5D000FE5A5237A29EC77DD5988BE785C7A6F005 +:10F5E000BC70AC635E389698178E25E685E37BCCBD +:10F5F0000BC73AE685631DF3C2B18E79E158C7BCEB +:10F6000070AC635E38963F6E895289F9E1F81EF35B +:10F61000C1B18EF9E0585FEAE2E7DC5949D45B8971 +:10F620007899562CE1BA7A7738C3786EE4B058C727 +:10F6300005DB97ED3A05F34C0B2BE423A43DA464C2 +:10F64000BECCEB74B2372DC8E3101DC1430CEFD70D +:10F65000522F4EA7FCF2BB5FF75199B6ECFB4CF76B +:10F66000619EB9EEC89E09D4B763D142B707F98B42 +:10F67000B56685B07E65877B2A63B32ADE5F77082F +:10F68000EA0F7A23ED68D3DE9D53FF920EF547BD56 +:10F690004BDB31F434B1BA269DD1FED8D2F6E3501B +:10F6A0007E0E9349697F8CD17D27E1A824F6C3584B +:10F6B000CC5DCCD8A9F061108D8C7DDBBBBCFDEBA3 +:10F6C0000CE35B3D314C8C546357B42F9B4AED9552 +:10F6D0005C8DFA5F5826A5DEE7C42F33DE8BFE97DC +:10F6E000B687A1BF175F93A9FFADF07D0CFB2FD2AA +:10F6F0002EAB40F9FABA4CFAF115A7BE95FCAB1D3A +:10F70000202F00DECB23FCFE8E89756C3F2B1484EA +:10F7100015C073E33CFE5099C6F54CA638DF2A832A +:10F7200064447F24A3E1FB444419B673E5DE52C56B +:10F7300076DF85F53E90CA34AE174E1531BA97A7DD +:10F740007FAA3B817A7E0DD2F3245C4FCE6F974720 +:10F750000EE8782FCFC41277390AE7C3980CC9DBBB +:10F76000D13D4B463BFB77D8AF6C7A6FB4631FFF3C +:10F770004541B9D0BE8BD1396B6F5142DF586AED2C +:10F7800057AE18BE5FD37764CF8E303E9346E8C73E +:10F79000E02BAF339C8EF4DC5FC6D765D9D25D0613 +:10F7A0009FCAE8AF7BBD56FBB13FADB6230DC6EF98 +:10F7B00048E3F4EEF5F69C28C2F6172A140765070D +:10F7C0001B9FC7FA6D7B65927BB90AAC33F4971B1C +:10F7D000D766A21C3925F8243BB066093ECFDEA3CC +:10F7E00030BC3F2AC0622A9E6B083089EEADDAA198 +:10F7F000762EA4730FAA44F9341555B75C5A01CF7D +:10F80000E72CFC80F86FCE4F6409ED945FF8385D0B +:10F81000CCBC20BD09F5EDA5178C9F857C7597EDB7 +:10F82000DC8C5186D2B89FD78DEFE17B69DFAB4D81 +:10F8300064FF55FA24D43F7F7B9FEB8937BCBCDF44 +:10F84000294E3E7FC63AC9CEDB1254E8BC919CC714 +:10F850004BA7DAB41AE9C0F9B09BCEE33A3F99E37B +:10F860004639DFFA91AB9ECBC15EB2FF9C9EA88663 +:10F87000E76B8B76CBB4EFD5AA7913788752467AAB +:10F88000F909BCAA8A2D5428FE9B71A142749F9944 +:10F890007E6502E333F71CF5D0F76ABA3B81F2BB11 +:10F8A000BBEEAF913A78DF5DAD901DDE1D5F162196 +:10F8B0003ED2646D12E99DD07F209F756FE6F1B84E +:10F8C0000C8945108E5756CC0F36F278159D3BA704 +:10F8D000ABB464937F0C8E2EC631E669B5F5742FF8 +:10F8E0004766AD1BE550E6C23A376F67BDC7A5ADA9 +:10F8F0000EFC8B52FEFEF338CF36761CEFED3158FE +:10F900003733F35EA910E3625FE0CFDAB2E6E98D48 +:10F910003E1CD77ABEBDD0E74EA23D9DA7F138A7C9 +:10F920005EC2EDC74211BF80E714CFC86BB3F2339C +:10F93000921ADA9B1362D67B61187ADB30BF7102B0 +:10F940000E55CC7FFE9FACEDC789F8C638DB79F940 +:10F9500032411F763CD9E79F17E8D6D0BECE8BF157 +:10F96000FC46FBBCF2020AED1F146A5E3EBF009F1C +:10F97000977D1EF3B43335A8F7ECF398CF7AB72010 +:10F980001D8E6FB63EB7C33BAFAE3B82F6ECBC12EA +:10F990008570329FF5B4A2DF6CACBBB7C8CABFA7F5 +:10F9A000BC0E714EA97603F2F1C4B80C0A20D5FF43 +:10F9B000A44E2F8B99C69BB227CB529F9A186BF9F6 +:10F9C0007EFAC122CBFBB29E6996F7171C29B7D4E9 +:10F9D0006726E759BE9F75A2D652AFEC5D64F97EEB +:10F9E000CEAB4B2CF5B97D2B2CDFCFFFD36ACBFBF5 +:10F9F0000BFBD759DE7FE6A38D967A0DBBD3F2BD04 +:10FA0000E1E7B060A8371CC0FCCCC04C945B06BEDC +:10FA100056A559E3E576BFC61EA7F6A7717C8FE60B +:10FA200037DD98C6E33AB9CB8A58D4F43CD030CD10 +:10FA3000520FAE2C67518B1EB3FA51ED9F2C5DCE49 +:10FA4000EF3B7593DDDD967325C55B374E75EA6830 +:10FA50006791EB95856E63263F2FF0DC243A0FBD4E +:10FA60003E237C2BAE3F9E338B65E3393C27E93345 +:10FA7000AFCF497EB0D7F70D6EFF15BBE92E256FCE +:10FA8000498245CB30AE158F14837EBCA72546A591 +:10FA90005212A17BFD9400A3F3685A493FD5B56A81 +:10FAA0005EBF224D277AD3AAE17BD3BC540DFA3135 +:10FAB000CDEB2599E779F4831FDE65F2C3ED7E7700 +:10FAC00054D31E3DCC52FE37F8B5C9CF50BB346A73 +:10FAD00057848E53F9F07E7635EB75607911EBA77C +:10FAE000B29B3515A13DFDB233E6180BED6FE87EF4 +:10FAF000712DC231B7C24BE7F4C02F7F28AD32E57C +:10FB0000979FCED40A505FEF7546769DC271EF5035 +:10FB100019EACD6B175FE6467970ED5425C4438C26 +:10FB2000E050A37FFE405688EB79A14714E6298672 +:10FB3000EFAEB8ABB81C9FE72A4DA46F73576A129B +:10FB4000EAC73FA419FAB182F44276A712D27544EB +:10FB50008D5E8BDF05E22C9484EF961481BE44FD0C +:10FB60007E1F23BD5B5432F938E269DCFAA4E4421B +:10FB7000BB29ACD3FE66D16B9F3D21F9519F023C5E +:10FB8000A84F1F56049D38C9EFDAF880427ED7C6C9 +:10FB9000E7540F5E11B571BB321305891FE3A8B39B +:10FBA000A09F1AAE8F8A1E9E9C407BE06E49DB4769 +:10FBB0007E4EBB2B847ECE83820E1E46BA007FE42F +:10FBC000746EC7560DDA4FF5EDA77CCAE981A35BC9 +:10FBD000B12CCB3F2D63B8E48262A9350BEA334BDD +:10FBE0000B1DD93ADAB135AD585656373A0250CED8 +:10FBF000A99330DD8DFD2A8DEF3B5CBD66F1AB68CE +:10FC0000E7D4F8DCB47F5034EF4FCB511EABA39C4C +:10FC1000135473F750BE085B633D2758E377139D79 +:10FC20006B48E7855492DDA92D4B4B209D839D2D7C +:10FC3000E1FE48AC86F5A0DD911F4E4AA80FA11D3C +:10FC4000EDEB69498F8471C571E15E09689E8DDBBA +:10FC5000C4681FB720DC27E1B9DBFCF5563AFFBBCF +:10FC60002FFA07A49F824D71CB733FC6FD00BF6D75 +:10FC700032973FDEAC683AD28F77465156ABCEE32F +:10FC8000768B4B5374F31361373D2CEC1D437E1B75 +:10FC900076ECE101FFF04002EFD17CB43FBA632A79 +:10FCA000CA856671DF4C7FD241F1A25B17F37C50AD +:10FCB000119F5AF9D79EF60CE45357FFB10C649884 +:10FCC0001BB9BDD5E5B1FAABD53E2EAFE6F8B87E8F +:10FCD000547780C6BFC0745F21FE41FF4F6EE6F6C9 +:10FCE000BAFA3B5F3C3383B1177C1CEE194F6BB5FE +:10FCF00018E72D4C6ACF50795294C7A114ED71E1E9 +:10FD00001154E44BFB7AEE6F0B3C8FDFED67DAF3B7 +:10FD10009AA9548BB445B87FCA7E2ED37AB17C465B +:10FD2000E700F6B765D1FDADAC9762EEACE08E00B2 +:10FD3000D5E1FB1D14AFF9AA97A1DFA1372B741FE2 +:10FD40009D7DBC096C409FCB743F518CD7DD2CBE90 +:10FD500005E9E88223D6FBB26626ADF55927ACF556 +:10FD6000CA5E6B7DCEABD6FA418157BC7FB5D8C099 +:10FD700003FCDF04F85F33308E2EF2E02734733B50 +:10FD800062B0DD63F56F98B083AE134B33B7CF6AC3 +:10FD9000775C27EC9FEB6CF6C4699F76652394E152 +:10FDA000AF47EFBD04F0146D76842480E1F70FFFB8 +:10FDB0006D12B783FA7330EEF4779F4EEB7AED1D38 +:10FDC00003F1C6D81453BCF1AED04B4DC750CEFD95 +:10FDD000C6C5B0FD42C7C9132DA897C62BA497B4BA +:10FDE00039EB1FC13CFE6DF81EEA5714EA63E89C2C +:10FDF000E0732AADCB36B1CF6EDCCF64C4CFAE108A +:10FE000074B8D8C0178BA5F1384C320DEDF30B8EBA +:10FE100030566AB307F9FBB00FDFCF4CDADF877DCE +:10FE200035B9035B86008244F8AE14F627D63783D3 +:10FE30003EA93865BD3765CC726B3D7442253B7574 +:10FE4000068B64A07C46D71BFB9921F01CB29D2732 +:10FE50009821F6DD66D89EE7A2730678CFADF0252F +:10FE6000128583F7D376EA4D12BEDFB9123C12F841 +:10FE7000F4669FD85F2B65A5B8EE0BF1770E10CF17 +:10FE80002FF3F3AFAED3537E8DF6017BD141E787DD +:10FE9000B615EABB512F69BFE0F7EA6A696CE64C18 +:10FEA0005F6ADFED1BE7427817FB40DCF2BB2D8C6D +:10FEB000A15CEF69713394F3875A34AA1F6E09521B +:10FEC000FD072D3A95475A4AA8FC714B88DE3FDD65 +:10FED0005245F59FB684A99E6CA9A7FABBFE9A3637 +:10FEE0007BDCD31CFF4DC53D81EFA653DC338A5B21 +:10FEF000D0EF7A38BD0DC43FD7F2B8F0E8FDF07806 +:10FF000031C64FD5A1FA11F1E50D711E2FDD501547 +:10FF1000A7FBBB365470BF23FE91F53E2727F48B19 +:10FF2000ED361CBE85DFD7AEF63691FF57E913FEDE +:10FF3000DFEDE40FB63EE4665B0B537EA0E1FFD934 +:10FF4000ED71935F6D91E7187941BAF0BA25AEB7BC +:10FF500098F53EBE29684B003CD3B4179FC904D125 +:10FF60009FC038103C2F0DBE5F4B7122519FA1677F +:10FF70001ECB32BD0F95CC5C906DAA97B84F2FDF8A +:10FF80008271A31D97511CA938BDFC996C531CE9C3 +:10FF9000140EC8E3446194BFFFBFE348BD5EBE0ECC +:10FFA000DFCEF96116C601624F280CF36B7E96F323 +:10FFB000C3B1E887A2DEC1381AAE3597F3E23C44FC +:10FFC00009BF5F79402FE812ED9F98F4C2F3247FB8 +:10FFD000845E28C88CC95E789FE866A12DFA88FAED +:10FFE000C141FBE23AD39DB3E95C3FF98BC67BB0DC +:10FFF0009E92FC7E3BAEDFE83D9EDF8EC974DF9BA8 +:020000021000EC +:10000000A91F7E1F6DC2B4CE0CFD2BAB9E28EBB199 +:10001000D6FFBBF490415FBB945EDA87DDF5F1D08B +:10002000747B61BA24E875006EF9DC9C143E283FAD +:10003000A1084BFE1EB8E728CE33DAA65AC6BDAEDD +:10004000D95A5FB9C95A5FB1DE5A378D27F4DDA797 +:10005000ACC7C22F9BF5EC9BE25C9AA167D7B0C2FC +:100060008BD1BEF8020BD13D349F8FA759FCBC97B2 +:10007000511752FC92DF37BC5ADC2FCCEA4ED13EEE +:1000800069E1669DECFB59E9865EE7FAD70D181821 +:10009000F8BD13D3F88597C81BF95DF8563D6EBFC0 +:1000A000EF6FB5ED9E4CDD164F70EBFC7EE782CD19 +:1000B000F6F8678CC7FBE15F78CFE160783EDDB88A +:1000C000467F6740FE53128BB8B76E80BE953E29BF +:1000D0000470ACC67B53107F9B59783FD9799FA1A0 +:1000E0003C97AB8CF3AE3146FA57173CB25AD093DB +:1000F0001DDFAB57FEAA1EF1BDBA42A678216B2EBA +:10010000229E263A2CA27BE09CF8BE60A7C4B225B2 +:1001100036701EF12AD147566688EE893BD3C6F762 +:10012000EDCFAC5C9A8B76BDB1DE800FCBB9C1C28E +:1001300066EB79C12F30AECF99F8BD992FD8F4B6C0 +:10014000B1FEAB6DE709FF817C94837A85FF5EC8C1 +:1001500006DC8F43FDC2F8BD6071658BE53E40BB98 +:100160007EF12F08C527A39F9729EBE8E7B5AD518E +:10017000EAF75BE371CE7318ECC27FE7A6F8EDF700 +:1001800032AB43BFFF57F8A318D0FE575FCEDE8FC8 +:10019000394DAF2C5FE046FA7829335426CFE484FA +:1001A000E1AE86BA27F40483BACB95BCB8FEC2543C +:1001B000DDEBFD23D57F95A53F8CF53DE92C5697CA +:1001C0008FFDF2FAB6F80B171F1F2FC601B9FDE31A +:1001D000F4331DB1EA14BFC354639C5EACFCF76EEC +:1001E0003A9F6F5A0DDBED70905FB9BB524AB5CBA9 +:1001F000C276D208ED16B3DDCA10ED7C463BD03195 +:100200001DA6F89D119F93053CE6F115B403B46853 +:100210003AFA0D772F5434F45FFE553872479B77C6 +:1002200023DBAD4E1CDC0EC0DE62C02F0F0D7F0243 +:10023000DF9BC7574780FFBF1A1FA3F5E714EF3FA7 +:10024000357CF0F9D6DCF3982FC0875731303D9AD2 +:100250002E8FD41FD8FA5B879E6FA7ADBF4C822F1D +:1002600018DD35227CC3F407F3DD6D9B6FA6D33117 +:10027000B83FE4CF24CC6FBCE0CF8CB9FC5C302B12 +:1002800053487F8C5798CF593EC4B89B78DDCB62DA +:1002900009B403B5C6BE3DE8DFBF52A265A27CBD6E +:1002A000E7E85C8AF77BB74B2114A95EB553C2FC23 +:1002B000D4AA359D354E78BE7713EB41DCEEDD9444 +:1002C000F0E0B9B7BD7D090FC6F5ABD6766D4779BD +:1002D00059D5964EB2772EEBA4B871E6850AE52D76 +:1002E000645CA8D0BE4366E6BC031877C998CBF31C +:1002F000CFDAB4EA036864B739B5C5A4FF6E6364A6 +:100300002F8D5FC3E34BE39BD510C6FDC62BA2BE6A +:1003100099DFCBECBDB55FD2496EF54BB8CFE09518 +:10032000A408FA776D611E5FF27E857549C42FD6E9 +:10033000B8BB57EADC528B7802018CFE4B5EF8F0BA +:10034000ED929FF313CA77C227E25BE1F6C6030280 +:10035000BF1358EF518C83B14DBC1D588E129ECBEC +:1003600037F6298CFCE4BC4D56FB67BCC67F3F4783 +:100370007169BBC97EBC5D61DF1C82FFEDF5F15F79 +:10038000E9E5F7BE8FF2DD68F502FC29A9ACF3F8C8 +:100390004EF8A7F6FD01BB9EB6FBFD4CC405484FC9 +:1003A000C33A4D107AABAAB46D01ED430CD2F3FC05 +:1003B00077D50CFA18E46775703FCAC5427127E516 +:1003C000A5ACA43C35C37FDB871F229D8CE7F7FFDC +:1003D000D8DB4BCD3B22A47F2F12FD78991BEF4138 +:1003E00072B9A0CCA29F9F72E795D3F96586FBA94D +:1003F000CCCFEF59D8223125AFDC3C5E1F3B47F90B +:10040000712067E0BB6DE93243BBDE881FA4CE27B5 +:10041000463464AE562DE446BFD73897F82571EFC1 +:10042000F6B6F4D0553508EF7FA84437AD41F80E45 +:10043000F5709ABE8A819F72EDDDE1CFBA513FD649 +:1004400032F24BD6F9E76FC3F3D7AE8FC6B1A82906 +:100450002FD2A534D1EFFBB83E2AB03C7F06FCE991 +:10046000A8E9BEC15A5F511DC2B345DCE3B4808523 +:10047000DAB0DD02B7C3B20FE0FA288F45B387EADE +:100480003FDFF2FC19B063A3AEF3E93FCDB2AFE0BA +:10049000FA68E230FD4FB6F5AF0DD97FAADF6C4B9D +:1004A000BFED0AE3F7E62EE7796B76FFE1017F6D9A +:1004B000873F67F03ECCB67CBE0F437F50BF38907D +:1004C00049E70DF6F8793CB1AE61A242F1A87CEBA8 +:1004D0007ECCC5827E8DFC80BA80FD772F4274EF82 +:1004E00071ADCFFEDC6AFFCE47195339185E39BDB6 +:1004F000A297FF6E964B1FE99CEF6B2D8CE2E1BF3C +:10050000F634ADC260D00FEF5EE26AAF823ACA2025 +:10051000B0939EBB7BC367F15CF26B22EFBE3DF0F4 +:10052000CCA4C621FC2BA35CA930A5AA7C84F7CE61 +:10053000E42494FB2B657EEE03A8AC6C89E91E9243 +:100540009530C12A922B09CBBC563549967D98D758 +:10055000C4797680A7B27188FD73333CD55923BC2A +:1005600077252B091EFC7DCB61E0A92E1F1D9ED790 +:10057000451CB03DF0D2A491E059A5F0F90DFBDE89 +:10058000D94BF859251BF16A2B3CAB18C7EFA8F0E3 +:1005900088783DC05339D27A213CD523ACD72A572D +:1005A0002FE16795F8FDCFA1E0A93E8FF5DAA636D9 +:1005B00045516EEE96B83CF265346FC3F3EC7F693B +:1005C000D81824FE107ED935D800F7C114CE4F2B91 +:1005D000F2DD74CECBE8771FC8A5B08B9F4FC7B2B2 +:1005E0000BF83C4CF77006A9FE28F87961CAB72AC7 +:1005F000A1F2F19610BDFF4E4B15D58D7E4AD74A1C +:10060000E4EF95AD97C8DFB3CFBB2683FB77BBF391 +:10061000B4ABD7A09CADF1F2FD89B5F359D89DF2EA +:10062000E718EB7906E32FBBAE6433D18F9E76904B +:10063000C31DA8CBA5BC08EFCCE3BD2D50775DA1B1 +:10064000EA183F065E8C703A63747F4CA32C6407F3 +:10065000C801CC73ED8B2DEC46F9519DC1E3C88DDB +:10066000F92796A31DD168FC8E1B46ADD1CE58C785 +:10067000FDF9689BF5DED915228E9B13B1C67D5717 +:10068000B09DEF67FBD9207F33C0663E87793E81FE +:1006900026558715A41009EAAF9C3AFEBB32579C39 +:1006A0007E5643FB95CD54C87EDAEDD1F2501F0142 +:1006B0005F909FE912E71A57DAFCCC15A3DCEB4BED +:1006C000BF91711EE732666758E3C61FB0D27BEA5E +:1006D000F0657E60C47B7DFBFD7C32865EB57F6706 +:1006E000C073B9909FFB5A9294A768C057A0F44971 +:1006F000A8272634272D79870C7F1FC564970D37CF +:100700008F7DD23B7923DDEF5520E2EA6047D3EFBE +:10071000B962376847DBE77FE5A0F957BF50CC8661 +:10072000E2171E2F5F71C2417140033F063EFE5F1C +:10073000F38D92C18C736B8C99E26B0E39E2C678A3 +:100740005541A096F234F1F9190B9D58F3341DCFA1 +:10075000BC2DE17DC883F2489BFB25941FF6BC505D +:100760003B3C469EDCC0B91B1F3F471764DE10FAB6 +:100770000BF6DF5FB85D8E929CBADDD1E32EC4F834 +:100780007530BA2D03E8E343B947AB81BA2FA77C94 +:10079000ED7EE86D65F39DA13ADC77CE1E3ADE680A +:1007A000E8B77B33785CED3535391EE3EAD7046B67 +:1007B000EFCD18425FAF6CFE2AF5779190B3F6F754 +:1007C0008F09BC3E28F4DE551B0EBDFD28EEC3EAA2 +:1007D000A5E5483BDE92DE06FC1DB0F80B13E9F7F9 +:1007E00005F68B7161A2156847BC1D8826324CF94D +:1007F000216E5D53F839AF9EB9F8FEA2FF53FAE4BB +:100800000BD05FFC529F86FBC47FA9705460AA8303 +:100810001D0EE8E731ECC7FDD10EA25FA39F9F7AC2 +:10082000FA1EE4799CD5F5AF820FFAD3CCBE71786D +:10083000EFC99319E3EA03C01F3FCDE91B87EFEB34 +:10084000A5B7B71D07BAFC29F21AE881BF67BCBD7E +:100850000DED8B8B16BD73E01EB49B273BE91CEAA4 +:1008600076DB39BF7C8DE703E56B563C9C5C3F3201 +:100870001E8E0EC6C35133FE0DF85F08869FC1E77A +:1008800000E4E5B324CCFB66A1350063784C8F67A8 +:1008900016AC7B9EDEF3D83D0CDDE3440DFE5E0519 +:1008A000F4F33CC7439CEE5F37FAA90B867F81FDCA +:1008B0009C5CFF5203FE0E9BE724DF977417B3582E +:1008C0009A9FDABD686E171EA329FCF72FF83AFC31 +:1008D000470E974755999C7FB2845DD2EAEC0C2E67 +:1008E00086522BFEC6973468D751D8B97C28BA7B7C +:1008F0004933F24FF9B99E36ADCBBDDAF4DDFB02D8 +:100900001FBFCD0DF7211C4E917FB5A38AE3CD7F8C +:1009100032BB9CFCA5625681F753F83239BE01EE1A +:100920003FD1F7733BC9E9F714F3F9EE28BD97F20D +:10093000803DC1AFF3B2B88FE2811ED6E3C6F5FEAB +:10094000F09E8FB6B555E13C4225580F66EE8C639C +:10095000DEF87EB419C662BC73671CE370FB40AF5F +:10096000E13DD7B1B14EF29BECF3FA48ACFB0F037B +:10097000E10F11BF83F0E4EA3B700FB4DF3ED549CD +:1009800071D38BE4CEE5AB919E16F9486FC3F3E5C6 +:10099000E6733F53457FFF1794B4EAAB0080000035 +:1009A0001F8B080000000000000BE57D0B7854C58C +:1009B000D9F09C3D7B4BB29B9C24BBC9E6CAC905C0 +:1009C0000912707335688A27043068804540628355 +:1009D000B209A0511182B76E95AF2CE642C05023E8 +:1009E0004AB5A5A51BAA967EAD6D54FECAAF488335 +:1009F0008045458D97225A2F416D2BAD95146C592A +:100A00002D7EFCF3BE3367F79C932C046DFFA7FF8C +:100A1000F3C7A71DE6CC9C9979DF79EFF3CED9F126 +:100A20009285900A42D67F6E6F081513D266EDF15B +:100A3000CC751022157EEF162991902D26D2D24723 +:100A4000EB07973F7EF4917242E2E5E25281D0B229 +:100A500068A0BECC4548D72B05A522AD274AF4A9EE +:100A60009BFEC343CA7D4E428EBAFC8912AD9F865F +:100A7000BF4B08B1CB92D94FC779C5A3244974BEE7 +:100A80002CE29D53465FE95A43BC4BE91294A4BE45 +:100A9000B8B23C4232E4BE9FDD4387B193508D290A +:100AA0000FC74987FEF670D7DFC4C4E838D33C8A45 +:100AB000079EBF0473D2B22A99E0FCC6BAD943821A +:100AC000E2245A863B0758693F02E388A43548E888 +:100AD000F8E6BA6E1C570CC7633F31DC3D0075B3B6 +:100AE000E42730CF8F057F11CC430E0A665209EB05 +:100AF000A27F32EDE750889FE2EBC92436DF59E749 +:100B000029EC3CDB3C15679A4790D83C532E73F890 +:100B100043B4FF1413F1F71547F1FB3BC98CF03ECA +:100B20002299B05F675E4F83CF116D57CBB86413C6 +:100B3000F6A3E851605FDBA56DF6664DBF21D8478F +:100B4000FAFEEFD39469B07F5681F8A0DF862AB60B +:100B5000DF8907534B615DA490945F319190BC6431 +:100B6000B6EF749FEAB1FFE41E4268FFB842B64F89 +:100B70001B8A371119EA9E87B08C2F1A4478E249F4 +:100B80009F9D78613E12ACF3C07AE9989984344A0B +:100B90001D5DC16A4252446F11B44F4A7EA0CB3CE6 +:100BA0009990DE14D63E8ED6A13D167CF11CBE4433 +:100BB000808FCEF352B91834D1759F2013B7897442 +:100BC000A9895592B9993E6F96D4752B4D88773285 +:100BD00048806E7BC9D01E1BA5F36095E07D98C24E +:100BE000E90CF629768097F490B9B4FD068E9FAD96 +:100BF000741A42C70D9E47420FC3DACD3D04F0B1CF +:100C0000D54AD70EEF675AF1795C617F915FB3CE19 +:100C1000FFE1F34E4EF6AD027CF592C1F1A420BA8D +:100C20001F46786EE7FDEF4B576E9746A0EF29976A +:100C30007DF2937BE83AC87956EF585AAC1748834F +:100C4000769CEF4B22F6FB3E5F77CA3FEDAD23F17A +:100C5000F994154F1D7DE40CE37C8FBFBF9197077E +:100C600097BF565F06F2E0A0E815287EEC45249871 +:100C7000908874B011F975F906A477254B32031FDB +:100C800053BEFFEE887C9F4AF95E1891EFBF178331 +:100C9000EF1F18090FFF023E7FF84CFCF71D697427 +:100CA000F8FE10F05D0125DBB7AF8AEF7DFCFDA7F4 +:100CB000CF8EEFA763E07B17E0E91CF0BD0FFA8F42 +:100CC00080EFFD9266FE3875FEC2C8FC2FE27B867F +:100CD000F9ED302F1BF715ED3E2A6368BB00742D2C +:100CE000317D41E455848EBBE57287B4813E7FD26D +:100CF000A5BCFE6FDADF2367DADF29C0CF171172D8 +:100D0000B134AF2B58FC2F99EF18C0116BBE5F7038 +:100D10007A32CA0B23FF9B92D9FE53BCFC43AA181C +:100D20002E277B09A903BA79D2E5FF92CBB199208E +:100D300097B6DE91226CA07DB3957E2199CE773255 +:100D400089CDB75292713CF5BDADE67EC10CFD5B1D +:100D5000252128E8C6B325BB638F675C075D5F7CF0 +:100D600032CA352521B902F697ED5F0A45188CD7AE +:100D7000C6ED88DE949E1690DB1E2EA73D5C7FA8F4 +:100D8000F505E94A2ABC4FE9260DCA13E5E2ADA6EE +:100D90007C26B701AFAA9C56E131F9426410F44AAF +:100DA0001551402F46E5FDD50FABF27E9903FA9B16 +:100DB000713D54DE8F8175A627ABF4C7C68BB5CEC7 +:100DC000497C5D93F83A2745D75994CCF4DE042842 +:100DD00063ADD388A7D1AE7721D7E774BD15C91508 +:100DE000B1C7A39483FDD47D8331480625BB76C665 +:100DF000AF730E16A0BD5613D1D33E05C65312A431 +:100E00007DA9D040A47818778B95C24DF775CBF2A9 +:100E10004D3556BA9EDED55209D875992D4CCFC99D +:100E2000CB737B453AF7E57C1C239D46DEB7F68DF8 +:100E30002F2B46BCCC81792EA966764312951B30A8 +:100E40001BF03F652292620B7ABC74BD5D42D0D329 +:100E50000CF43FD3E17D183A38E6E3FA8DE3AB2595 +:100E60002177E9E89738CACFD27F2DF6971282AD65 +:100E7000BE73E96F0BA27D11C5636A09A2CB3EB4B4 +:100E80002F95D6155B72C9065A5DC9E981EED30D5F +:100E9000B84F0E0AECE4285E878FCFF6ABC6D72A90 +:100EA000009EE38AE854F4699C8F3EA77833C93DDD +:100EB0006410ECA3424A1FC530DE1B385E741D650A +:100EC00065FA759494C13AA2E377AAEB598DFC3B7D +:100ED000CAF5A8FD62E385F50BD8132711CA7B2755 +:100EE000E358199C4A9B60FFDE8B0BB551FA18E75B +:100EF000F16F64F4DA7AA16F229617B0B29F801C6A +:100F0000C4A1E8DF257607CA4D72CAFCC9A09D3D81 +:100F10003B4DF9874A4B9205B61E5924FD7102AD2F +:100F20009341E174C239CDFF2326B7F4F32F0ADCD5 +:100F3000E99D5646B1904A168F64372E027B9A3E41 +:100F4000DFCEE5ED3B96FE1C90738D9EA9DB019EE6 +:100F500061FD03DFC1F112C960502C07F412B41710 +:100F6000616FB24A19BF823DF84432B3C79362D869 +:100F7000774FF0F9547A5ED83195E4D3D2662741A1 +:100F8000670A2B934A919F7626239F33BDAA5C9EC6 +:100F90006C1684283C2A7CEAB8FB0D7CBAC8CAFCD3 +:100FA00085772CA4E1310783AF54B39E9B3D35FB7D +:100FB000B570AAF019D77B604DC03B8DDA11CFAE6A +:100FC000F163991AA8251FA6B275C695E2FE052DF4 +:100FD000B43493816B6EA64BB099FC03B0EE9BCEFC +:100FE0003BFA5D2FC5CF80BD6CAD89E26B653D6D71 +:100FF000CB1B3D5D7C557AF89628BDE3CF8BD24163 +:10100000DBF49206174AA2AC9907AB68FD25EF61A5 +:1010100007ADFF39396BA687D27FDBABDE063755CC +:101020000D399B4E76755339D1365740794B255B38 +:101030005C0DD8713359FDB37BCB6606415F5C25EF +:10104000A0DDF0397D1FEB7BF4765C947F3A70BDB8 +:1010500095A94C6FB5D50831FA31F9F63FDCEE6948 +:101060009B75E67EB7A4F07E57D37EC5B1FB5DC904 +:10107000E70D804B027667D884F2B64DF9E04581E2 +:10108000D6F754DB64DC8F723A601ADD8738BE21F4 +:101090009F2563FD65BE1794BF1252E8387BBF6180 +:1010A00043BDD073597C08DEDB732AA51BE47C8F1B +:1010B000928FE2C946E9C051CA4AA0630BE56B9121 +:1010C000D7393DA7C0389D7942B9AB00E59319F6F1 +:1010D00027169D3D3FF6CD5CB09B283D65A6203D83 +:1010E000093D606F0DD80BBABD74DE953B45AF4D21 +:1010F0003E039D0C83FBB803F4B011BE57AAC4385D +:10110000C1311C0F14EEF130EFEEECA18317D0715A +:101110005EAE3199EEA2F3ED9D6C1B3F88FACE379F +:1011200001DAA9F58AFA6D147094A5547C1538BCBF +:1011300087FD00C7292BD3977C9DB363EC97E8FC10 +:10114000CC01EB03B840BF50386A605E3167301B9A +:10115000E486BAFED1CAC7FA9461F2B13EE50CF258 +:1011600011EC801466C77DB692807DCCECA35872DA +:101170006B51CA39CBAD45295F416E69F661E957BC +:10118000A127BAD388670B473BADCA12AD4F817F09 +:10119000D3F728770CDA0AA2742F8449BF3391D190 +:1011A000BF9D6E599BDFEF4915638F3FCEE3BB0DAB +:1011B000D665710D8AFE73D89FE0F0FD099E697FA8 +:1011C000A68B9FB425517979BC5A40789530050992 +:1011D000E52D755934F04CB177A31F944465A6B939 +:1011E00088CB65FABF64C54ECCF6683DB54ED2D506 +:1011F000DD3E8FAE7F7A83AC6BCFF017E9DAB35A5E +:10120000BCBA7A4E6B95AEFF9880A2ABE705EB7443 +:10121000FD0BBA7CBAFAD89E065DFF710FFA75ED28 +:10122000E3432DBAF609DB5B75F5897D015DFF0BA4 +:10123000760675ED25FD5DBAF6B2033DBA7AC5C0F6 +:1012400083BAFE171E0EE9DA270F6ED7B55FFC7161 +:101250009FAEFE8DA19DBAFE53883938C8EAC26997 +:1012600094B426D9ACEE9349D74E4E53B97C9C1218 +:10127000A640F7D7572278833201F21A28A4FA76CB +:101280001EEB42E60D36D543B08CD45B3E82F7822E +:10129000F43FD0B7148B1F69C79942E5B300768736 +:1012A000D7127D0EEB7967E6513209E7FD28A2AF30 +:1012B00069BF1A929F24D379A71C104988D6EBCF17 +:1012C0004257C3E112CE0217F1F6035CBF13BD41D2 +:1012D000781854060AD362C3A5D0FF00AE39D048AF +:1012E000DF9B1D26A17E610438393CB3AB0433F08B +:1012F000DD307809F3FB8DF006DEF9DBC47D9A7DE5 +:10130000FB6B8AD3057C4DBCC47B5A043E73E07AE8 +:101310008FBF41E50A898D879AA01DF56A8D2284C9 +:10132000006F27D70C4DDC377604783D244A27140C +:10133000AE3859CF8709457A3E747A3D67A6A32017 +:101340003923BECF865F99FEC7ECB42133E0774ADC +:10135000B5407E90171BBF73CC9628FECE01AF9E82 +:10136000548AD784285EFF4EAAE79451FC297392D1 +:10137000CD104735CA39157FD41FCA4D75C7D63B26 +:10138000135299DC3C07BD332155ABA7CE5DEF94DA +:10139000A57E05BD43F542552AF85766BF7C2E7ED3 +:1013A0004D6D2AD3AB1ABD50AB5DBF118E885F5314 +:1013B000CDE2E0AA1E238502F24FE764B20DE2758A +:1013C000735299FF1BCBBF99C3E78DFA37C7CD5A2C +:1013D000FF46B1A5C7835CA076C27C588FEAEF9C1C +:1013E000284FDD0726EBA7A06BDD5AF89585D06F57 +:1013F000B470370F87BBF94C70EF5ECBE215BB5F63 +:1014000012BDDBE8ACFB5D62BF9BC2BB894C0C41EB +:101410006C453D77A9F313C6A7E67BB783D347D7BF +:10142000BF1CF6A54EAE11AE77C0F35558C6A2B795 +:101430006FA79EB39DF3EDD4AF67E7ACFD2AF436FA +:101440007A3FABF5B09F82D4D6C1F0127C3701E36E +:1014500099EBD613F44BD6AD657ED14F389FDDCBDB +:10146000E15FEC62F453935885766D87E044F9D8D8 +:101470007184F9179D162144581CF94158FFBE8C00 +:10148000CA24B0574F1C7CDDE1D7F83BEF70B80F92 +:1014900071B8DFBD2D027708E1BE9DC3DDB0646386 +:1014A000850EEE6C09E509C817310AAF55EA2340ED +:1014B00097334407C2D95E484236D44B4AFDF4B450 +:1014C000683CB73D9BC9E50490CBB46E07B908FEF4 +:1014D000AB6CFE00E45817FD0FE533C83D3ABFC5BD +:1014E000439F6BE4701CC83DDA3F81B0FEAADC5319 +:1014F000FBC7114DFF11E4E153A95CCF58493A9362 +:1015000087ABBB26205C7E8FD69F32CA43B5BE6FA9 +:10151000B0207D7004FE51CBA4AA8F0B0A75F6DEB5 +:1015200090AE9E5A172E28D4D97BA4505B4F6FB033 +:10153000176AFB67F8255D3DABC5A3EB9FD32AEB8C +:10154000DAC7048A74ED7941AFAE5ED055A5EB3FA2 +:10155000B647D1D5C73D58A7EB3F3EE4D3D5276C5E +:101560006FD0F59FD8E7D7B5FF12FE01FE7F30EEB2 +:101570003285D2D32FA91C047FFFE3FBAC97E1395E +:10158000E491851E38EFEC705F69D7D2A3B1DCE738 +:1015900066741BAB5DE5DBDD6B7CDE69747FFAD7BF +:1015A00034E8F8B88ECBB37D6B5AB0FDB935ADF8E1 +:1015B0009CB8181F995DA6A00DCE29769A8ED812D8 +:1015C000817E5B83409F3F16FCC4057C7C403013CA +:1015D0000DDD824504F1C04BC2743E0DBC35E42ADA +:1015E000EF340D3E6AED4DBAF6E9D2F5BAF63A8A15 +:1015F0008F8BA8BCBED4B34AF77CA6FC6DDD7B6B99 +:10160000B39B1F043E5AE7B112E0A37584E151C5B4 +:10161000EB3A33C3B38AD7753B9B3D608744F04FA9 +:10162000265DA638A2F8F7B82670FC5FEA01BF76FF +:101630005F32C5EF19E8F86CF835E2F5003F8FAB83 +:10164000B3EACFD92F73B1789E5A42FC1FF0FBD278 +:1016500041F1333F427BE63886717EE3BC545E55F0 +:10166000BAE8B87F1DFBE6B59BC870393DC325E1DC +:10167000BC7526EA58517BA7CED25387716DEE8F89 +:101680009A0586F30EF70C2F9CEB4FE3F441C81D2F +:10169000D87E9BBA2731F064A682A45F238784BCDE +:1016A000050D2087EBDC568CD7D5F17C00E37B550C +:1016B0001C1F5F979EBE321D71FA50E948A58F58D6 +:1016C000F2DD4C5AE1308F981D5676CE173DB7BBF0 +:1016D00016F96560647E31EA45E3F801E80876931F +:1016E000839DE76147B0FB0FA4A2BD140BEFEBD6BF +:1016F00048D9664BB44E4808F1B94E60FA931ABC0B +:101700009E2B9C383EEA45E271E0F8002E9C675023 +:10171000795F04F9096BB93E7DC4ADAC4638E09CF5 +:10172000751471FD47DCBE3617B32B8B10CE51BE3E +:1017300017BBECC1F5D375CB5ABCB9E8BF07805EC7 +:10174000CD3D78DE71BF43AD07316FC457C8CE3F82 +:10175000E264D6AE9E67A5FB4304CE4B12CA099C39 +:10176000881313F403FB2A6140319510F2B8EBAAF9 +:10177000CB3CE3697BA1DF63F262FD05B31BCEF5D1 +:10178000681DCE22C9552FECCB063B543A5FA0ED25 +:1017900076F382170E7C03F344B87C59F002C8A19B +:1017A000DE489DF4134A87BDF191BA62A73E576F98 +:1017B0007EA41E84FA567E6EFCB86BC10BED0E8CB7 +:1017C000033E0A783CD86E0AA27D489C21F09BFF1C +:1017D000D5E730BDC58F1FC807FBCB63F68E95C11B +:1017E000CE20BAF7DE7259599E499AFF37B01EE7EC +:1017F000EA217407EF2E4E71029D47F72164D80746 +:1018000086775F51889F4385705FC6783E0BD6D040 +:10181000F9C65433769089B401EA72BB49EAC70726 +:1018200029B84FA6A256C10A790AC5440279D5C67D +:10183000CF05138AD879A76463F6F06B9C4E8FB8F6 +:1018400058BEC4112EA7923CF7B37CA13A13F64FB1 +:10185000E26514FE76DEDFACA3B7573CFE775DDAB7 +:101860007341D25F5F44D7D1DB9E9202E76335EDCF +:10187000A65B419FFC98E741D07DDA85FBE44D8D66 +:10188000F7B3F8ED47C02FC3F68DC375B67D8BB5A2 +:101890005FAA3D1AABFDCAAB441FC067B2FB372F2E +:1018A000A0F3DEB433B544A4783BD420960FD0FA2D +:1018B0008A67D2F11CF614C7D74AD3501AC8ADAE06 +:1018C000FEB53E286D3B9A825932C82D59E7BFAE0E +:1018D000DC5583790677252456C37E1BD771E8D45F +:1018E0006F5DB00FF59FDB7C285F64E6FF2F46E657 +:1018F00042B0DE007FFF1AAE4F6437DB9F37B8DEA1 +:10190000BA46B57329E372BB55384D4DF6F9BEA6FC +:101910005980BFE60691C079F1E2683B8B230498B9 +:10192000DF6FA7FF815DEC27C933803D9B82FA788A +:10193000C032E29DE1A6FD9774199E73BB78992190 +:10194000AEB0B021AA574EE0FF87101FF365268F77 +:10195000E77B134290DFB0C0A7D7476F7E292EF6F2 +:1019600051F80FC1BB74DD87168DDB06FD8CF8B80E +:1019700031023FD3DF11FC207228BC3EC10AA915F9 +:10198000467C18E18FE0CD80872673C90CB73C1CDC +:101990000F46F829C610BFCB287E211F23163E66AE +:1019A00088F51638675B3257403D69C48F110FAA1E +:1019B0005FA3C2F39A0A27F11E4AA0F37DD86D21D6 +:1019C000A0BF48FF25785E3787F7D3C083FE8B44DE +:1019D000FF637120797F2AAC93227303ED372F6860 +:1019E000D1F93DCBB8DFD34C7C491087A3707E1072 +:1019F000639F75FE8F71DD46B866717D61F49388D3 +:101A0000B9BF18EC32BF9BC78F26E9E347A4DC3D82 +:101A1000A2DC35FA4B2A5D2D0ECCD5D92502F14733 +:101A2000EA5201F8EBA2FC512AF89B96CDA006E7FA +:101A3000DA87CCC857E2A224E0C7B9C42E3B68FFBE +:101A400016FA10E09AA3C4615D1DEF788F50077CF1 +:101A500079331D2E80E7C90ADA6F8B59175A06F7BA +:101A600000FE6EF658711E4A679F69E92C161E82A9 +:101A70006EEE2F4E2293CE05FE2FC1E660F1B37EAF +:101A800088270F09F6D036211AD7A0FF0C5AA9A82B +:101A9000DC0C4C3BD2F908B5B7407E8E22CEB1D9D2 +:101AA0003D425C4D3D2756E9F31ABBA35F6474F7D2 +:101AB00049843E74E7C47E02718CCECC1BBC806F1F +:101AC000553F523B27E4A61BD219CFE218AA7C8FC0 +:101AD000077B45847C0CF3175A3A1DA69FF72DDD32 +:101AE000DE4B71E1779809E815BFF0510741BB72F1 +:101AF000C802F4B5386039AE7DDFEFA452A418D621 +:101B000071910465B3879D6F3713E6379120EDAF70 +:101B100089E3FA61DBE8737FDC8AEDA602D66F35D4 +:101B20009CF17669C6CD8F8E6B9C6F987E328C6FE0 +:101B30001CA793E73B755ABD030AC4F55E104BD64C +:101B4000426311B327FBDD269D5E69B6A7669B53F2 +:101B5000A3F50F321C0D5AFDAC96EA7B2ADEA27665 +:101B6000D8099D1D7677C75F5F3890A3B1C3827F88 +:101B70007D01ECF8AF6A87FD71F35F5F68A7783984 +:101B8000F9AE0DE5FEF1BAF81010A79AA760A666A7 +:101B900043520ADACD4128ED812C8447CD5B48952C +:101BA000BD02E0F55310C674FD66999DDBA59ABD94 +:101BB00082973EDFC4ED19FCA374B02945EA0539CC +:101BC0006CB393F6B814788FC1ADCE1719B7C82B84 +:101BD00048C5B1E3815FB8CF39FEFCC5487C72D0FF +:101BE000D4FAFE7F815DF88248206E7BB5E7DBF892 +:101BF000FCCAC0122CAF0A5C8FA5398DE933EA6F9D +:101C00009AD32A404EBD7EF5B7C0CFDC61C3F8DB66 +:101C10004DB71FFD6E850CF8A1FB0DEF2D5BB219C2 +:101C2000E266E25813DADF5D39CC3F16D70AE80FD7 +:101C3000AE97AD753BA074D594A6019F78124DC0A8 +:101C4000AFC7E319BFAE774DC3E727DF5DE769A6EE +:101C5000E3C47BE2310B435C9B770FE4BF91E7E980 +:101C60007A09F025417DDC696565611ACBDB2B4C77 +:101C70006378CD4E63765097C55FD45A0C79A5B082 +:101C8000B9513CD8CD412239E0B9199F8B8280F6F9 +:101C90004D67BCBFE8360DFED471ED61CABC65234B +:101CA000BD6FC5E70017BE9FC2D6A3F69BC8DF9FD6 +:101CB000C8D7650F27E07C9D29745D0EED3889EC4F +:101CC00039E733239FFCD05D5B02F85FEF524AD3C4 +:101CD000905F062D2027AFF11C382C248E46CEB104 +:101CE00078ADF394D03F06ECEE1A317417A5C7789F +:101CF000419A550E7E688D05F304068A5C4E88BBBA +:101D0000BF6A969C29148E5ABEFFBEE9D4FE64F4C5 +:101D1000EC9E0FFB327D49E506368D5DAB6F5E2D87 +:101D20007E7C602AC4758316F43716DB83215897AE +:101D3000C6BEE1E776D46EAAE4EFD1752E9E262AC0 +:101D4000718923D881ED649FD6BEA462621F9C4B2B +:101D5000BEC7ABEF4F3BB100963F48246BADA0B57B +:101D600037A93752097601FB5B1CD0DB4746FBA93C +:101D7000B9DCFB5CAA0CF8E8F3213E269A912F46C9 +:101D80006B5712722FE2E9EE694FD8E562F0A7981F +:101D90005C704E7B5D013941EDA005E5142F73A603 +:101DA00089523FEDDD1D301190A31BCB2DE83F6C18 +:101DB0002C1A7CFE12E0C772B38CF180A281F9B5B7 +:101DC000D85E21815D34005364607F164F773842BE +:101DD00063417F57FCCEBE44432F1BCB3F180F7A85 +:101DE0006C2BA7232A061DD32BA3F803FCC8284479 +:101DF000D7E2FAF6DD118FF2E9FD6E91C7ADA9A128 +:101E000041F1EDF4307E9CCEE3DA4B360B98BFB354 +:101E1000A4E2508D8DF65FD221205F2E5E2D1E81B3 +:101E200078E2E280DE2EF3B7527B4D463CEBED3597 +:101E30006ECFD1C1AD40BFA3B5E78CF6C9FD69DC5B +:101E40003E2925A55AFB2496FFA4DA27DD44D9C2F2 +:101E5000F887CDDF6C66E751449987F89D2E7EF2B6 +:101E6000FC2514BEE3E5F9F9808F161793B71B0321 +:101E70006FDBC1BFDD784A443EDF6AA5860BE43BD9 +:101E80002756FF642D5DDF9E3BCE4FFF10E28E692B +:101E9000567EEF437EA01AF8E0050BD251AC75D9FF +:101EA000032229A47C1F1710B054F7C51988236694 +:101EB0008DBC71F27B2AEEF221215F235F7671FEE9 +:101EC0004C5ECDFC6677390966D1FD5A21E76F4338 +:101ED000BFD42C635CC99E239702BFAAFD7F2CB0A0 +:101EE000F8A075678D02B1A131741D309F4CD701E8 +:101EF0007A2E2F9080F5FC402A960581642C0B03E6 +:101F000059D83E365080E579813C7C3E2E3001EB3D +:101F10004581322CC7074AB03C3F70319613A89ECA +:101F2000837EC5811A2C27062EC7E79302F3B0BC27 +:101F30002030174B6FA011DB4B024BB02C0D34E15E +:101F4000F3B2C08D582F0FDC82F58AC02A2C2B03E8 +:101F500077627961A00DCBAAC05AEC37397037D6B9 +:101F60002F0ADC87E5C5817BB1AC0E6CC176D5DE6E +:101F70007899F3D5ECE46689E51D78BD609F6D8D99 +:101F80002187FFC9F5CA0D69CA876915D17E22CF9D +:101F90000B37F63B99A6BF4765B2F7DB0BD07F2F17 +:101FA0002805FF7D6BC0A4E07EE5E56F033FF838B0 +:101FB000DF1FBBA555C912A2FE7AF234761F60C599 +:101FC000CE268C3F92AAD451C57F3EE07268AB39D1 +:101FD000484C98BF4FF0FC29AE704080717A8B4D11 +:101FE0007520D7EF2E3EBE07F87A5685520E66AAA8 +:101FF0001CEC3B908FF2AAB61CD639219DDDFF9BCD +:102000009CA698D2E9B863CADD97CDA3ED63DA4DFB +:10201000E8CECA44AA81BA3C8DA07C53E32BBDF123 +:102020007A7D5890AEDA7B83F743FFAD9985A54C56 +:102030008FB0FB03E29DF9E83F6EB5F60B66907337 +:10204000D4B1795895FDD0BFB3F911B0A3F2BBBCA0 +:10205000CFDA61FEA0B70CD65B90CEE258793DF2A4 +:10206000D438BAA08207956721D56D6CC83F359EDC +:10207000D6C76D0F3E0BE5F8BED0D404806767FF6E +:10208000B3E0DE4DEC1F9CEAA0F50B0E90BD80D6B0 +:102090009201B9D649EB658795BD108EAC18F4D77F +:1020A00026C23E59436D89743D5BDF23DEB5B45EC5 +:1020B000F5498F086E4164FF6DA4F531CDBED8E5BA +:1020C0001E05F09D7DAB84719AADE6C1B8E4E2E1F6 +:1020D000FBD30B70039C541F80DCCF5686701FB25D +:1020E000CB496910F741BAAC08F781D1CB9C744158 +:1020F000DD87B2748863C54B35D03E349D48DB68BC +:10210000FBEC892694D7D68E7CD42B2ADD51FC8E0D +:102110009FEBD4EE031B67ABC14E8D85DF39FF21EA +:10212000F87D8FD3732CFC02EDB1F8E999F9D89FB3 +:102130001EE1E345E915B1FB75703C19F1DC6B223A +:1021400007A8EED1DC8BA17B08CE2DA7EFD1E2F55D +:102150008EFF10BC2E4C3F335ED138CD88DE438CD1 +:10216000256F603C807B0439877858F14C1ECAB9D2 +:102170007B385EBB7EC1E293AA9CB3EDA8E98738A9 +:10218000A52AE71AD3CF22BFB89CB1F23846342E25 +:102190003B11F5DF163ECF5197F27DD867E2D1C7EC +:1021A000D7BB4D520DEC5F700ACB5F995DF5AA224B +:1021B000E2FEC8785F190F4E007F89C521D8BF3C69 +:1021C0006A2F98E9BED37FF64399502C99E09EA8D8 +:1021D0009AD742A4268F96CF547D1EE543951E5272 +:1021E000D01F043A85FE6FF17546C711585EC3B71C +:1021F000337B3768E45FAF231BDF53FBC7A2DB935E +:102200002ADDB63F8E7A23A19AD90749ED2948C71E +:1022100049D3FCA06934F4EBB702FDBE9E2EAAF7A9 +:10222000CD4645BFAFA5337BE7FF36FD6E4F27B8E0 +:10223000CE31D5D21EC83F1A43F58E0C7C594D7154 +:102240000DF17C8F15E59F4CD8FEC9D52C8F8FE200 +:10225000AB1FE29D419333047A45B40D4D03F889D9 +:102260002D5902FFE7A8CB7F04F45B2C3E9012E4CB +:1022700012D8CCE3E99F5FEEC880BC74291EEAC780 +:1022800068BD1BE20D298384D7EF76647CF5F8C422 +:10229000F1074EBE08E7440BD2952158CF5197EF76 +:1022A00038D0AF324EC2FC35958ECFA6FF557E8C0E +:1022B000F28F54A2F24F5331CABF535ABE8865CF32 +:1022C0003CC9E5A5D363D2D1F3703E4F417EA27CD9 +:1022D000CEF887D37FD78E33F3B9BADE7F9E85DF02 +:1022E000D7CF7C3B08BDD5B8A99DC74FD475C6795B +:1022F000D83DCCB87A827E8993C74FAF87F8A900C2 +:10230000F751ED67899F8674F115356EAADE133794 +:10231000E2F93C8FFEDE0EC8A3C78BA3F010EE4F90 +:10232000DDC2E7ECB9CB9B04F70B822FB338869A5A +:102330000F5E0FFFA6700A5E01E3483DDF617C3748 +:102340002B9B84EEA2EBAEFF42200A5DC7C12F4457 +:102350002C8D71D359F43DB01B0E0AF6909DF6DF1B +:1023600053622370BE76D06942BFEEE01101F9E0FE +:10237000604902E649ED2BB910F3208CF9516AB996 +:10238000D0DF3462DE98113F0BAFDEEF807DD922C3 +:102390004DB5E7A15FCACE195579ACF6BBC213396A +:1023A00067ACF7807FB374A89D3E21ED123B675464 +:1023B000E92FC3B1E37985FE336339B32B33496821 +:1023C000ADE4184ED7AF78FC57C2385BA2E7780768 +:1023D000CFA3F377C9FC1C6F6566753E1DE0FB91CA +:1023E000733CFF4CE8AFA4F695001D6EF13EF1B3CF +:1023F0007B687BBD8DFAA92087CBDE75C91077AECF +:10240000D8EF067CCC32AC5F2DD5F899D11FBDD664 +:10241000A38F979F289F87FE6FAC78B91AD753FD7B +:102420005288DB4923C87123BED5F91709CCFF2494 +:102430001601E5D841E83A19E544C00374D7CEF255 +:1024400009149B80F9042F9597E17902F1A6F273A4 +:10245000CAFE6CED39A5BA1EFA7CEC48E7978B6290 +:10246000E473DCE3617A669185C52B8555FB17C162 +:10247000BC8B4A6C02BBB7C5E874313B2B23DFF140 +:1024800030FF66B1771DE6F11ACF23BEE361F76D29 +:102490000F5AFAB3251ECFF48E409FB1F072D8D2F6 +:1024A00083E75E87978904FCF297FC17A69311D601 +:1024B000AD966F037D50FC5F0D38A9D0EC9BEC1AF4 +:1024C00071FF0F431E8E65F8794FA4BD290EE3DC22 +:1024D0000D802FCDBA7772B8DFE425B1058B20CE01 +:1024E000DBD5BCD94EA89DBABEF0784590E27D3DC3 +:1024F00019AAD806F261B513E3060D4D7FAF583B1C +:102500005183C72A86C7C57BD74B40AF0D79EDEE07 +:10251000A0661E233EDFF430B8E2383D7713E5694C +:10252000CF48F18FC2F98C2EF6C679FBE9FCF6DFB5 +:102530001594821E57E31F300F93D32C5E7BABC4E0 +:10254000D601B2464BDF0D81153AB911171648482E +:102550005B37F760BC332E6CC6E7463EFA912772B4 +:10256000EE867CA4E23BD6FEA9F8363E57F17DB854 +:10257000697D11C4E3BAE247B693E233F4F174E340 +:10258000F9B77AEE6B7CEFCF9CEE4FF827237D35C1 +:1025900058836347C3BF2A7E0E9D5A2701BFD8F9CF +:1025A000B9BA7AAEEF2C4AC173FC430D229E4BC4DC +:1025B0008F957A21B7E543AE6754BDA79E0FC63A03 +:1025C000EF731ACE0DE38A685D73FE63D47BEA3E37 +:1025D000C63A2734EE933923C6F9600CBE51F9E5AB +:1025E000154E8F67CB77586865798CC6E7EF44F056 +:1025F000FEFD059574AA5B2A4C12D0E146FABF2075 +:10260000F04DB905F39DDE3A652360E7392B4C3F69 +:102610008138F7E1A6B7E6D7825CA8B0E0B9443FBD +:10262000E5FBE5743DEB39FF47E2AADD6268AC00EB +:10263000FE83A03BB78D2FB4EBEAB32A2CA89F37BB +:10264000DE5F12027FA681B073BAF5155724F5D369 +:102650007FBF5568C5F1ECEB053C57B27FB9CE079B +:10266000FBDDDFF44003C653C75A93413EAAF48012 +:102670001735E0FB0F129B63EFD8CA2BE11EF7FB67 +:10268000DD1682F9C742F4DC58A6F6DF92BCF234BC +:10269000A0BB41C807C4F3771EE7255C3EF0B8AC89 +:1026A0001A0F37C66763C565471B8F55E9C54817BD +:1026B0009766E8F9F71CE2B2B333DC23C82579BE8C +:1026C0004EBEA8F248950B6F73F8DF2AECBC1ACE09 +:1026D0008BDEF2DB38FEBEF7D29A72C80F33E37D91 +:1026E00055FB973F9D0EF440AE17468CC76E56E5DE +:1026F000329CCF1745F17C953F9A7708ECDCD8A245 +:10270000CF3B34EA85D872EACC72282583D947AA10 +:10271000DE00FD90E260FAC1E48CD2FDD7D5130D46 +:102720004D1DDEE0442CB7C338F68278FCEE8C9168 +:10273000DF8D725E9DDFB8EEB8B04842A95AFE94B4 +:1027400099BE89C8792BB647EE017C2084DAE8501F +:102750001B5CCADDB0DF77BB946E286F70291B331A +:1027600034E3B759583EA36822FEC7D09EF6615E97 +:10277000A3DABE83CBED8E1AD66F8FBBD2F3075A86 +:10278000B61D29F158200E9FC1F2BEF639CF9C4FDD +:102790007D0FA79FBB411E8D8DDAF11BF97E52F094 +:1027A00015888F74587C1E6DFCEEBE8C64F6FDA8F7 +:1027B000C98F0F409CB44D32490205BD8D9850AE73 +:1027C000B62B8EBA1DC5F01E83BBC3A93C1CE4F614 +:1027D000D00227BCCFCE05CD0EF3175A7EDB013ACF +:1027E000D81D85CBB8DE1D194C0F6C74294F00DE47 +:1027F0006E77293BA00C988336C077C03EB29FF21B +:102800005406A3EF0DDCCE21C481E78238AF38AA8D +:10281000EF25EC8579BE250609F8D5274DDE8FE139 +:10282000BEFC68EFD7BCCCE7D7DCAF7939C33D42FB +:10283000FFE87DE04F21FFA246269F856091FC1EA8 +:10284000939AE749EDDCDFC1FB0B3B46CE9FEC25BD +:10285000F219E3540E3E0EF5AFDFC960FEF57B19A9 +:10286000CCBF6E07794EBC6C9CC4B38C43F184E73B +:10287000B8A3C0DF5F18FEFC83E8BF9FE3F726FE26 +:10288000C1E95D83BF7F648CC08F2AFE4EBE3B2EA4 +:1028900009CE1DD5EF6418FBA9E7F56ABD2B593F9A +:1028A0007F6729B7E733D9BE75BA99FFEFE675BBE5 +:1028B000E17B0EF67AF61D1235EF411DC79DE964E6 +:1028C000E71F9EA9EECC0ABCC78FF9009DC9FAEF9D +:1028D00015BC9A51E3CEA4FD9232199CEE4C46A74A +:1028E000BDF9ECFCC0F8DDB3B7A17F05946C5C2AA0 +:1028F000A4C6033EADA238221E3333D9FAD57B627B +:10290000EA7D9D251B45DD7D1D557F2E7986A07EA8 +:1029100087734FE0DB58F96BFE22E93908D9FC9D3B +:10292000145B216FEBEBEA55C06742CA70BD5A9A3F +:1029300019B1B7BCE7A85727678EA45789B7482BAA +:102940004F55BD3A6838AF514B1FDF976EEE6F831E +:102950009C04B90CDF4342F96C66FEE8A64416AF4E +:1029600004FA83EF23F832F5792E6A5E8D9A4FA32D +:10297000E6D7A8F93491EF8218F26906AD831DE914 +:1029800074BF86C613BC6F97BE48DA930E7908D31E +:10299000640271A7CE3C925805ED25262FC4E7931B +:1029A000E74B9D165A4F9609DC74877B8941271D9A +:1029B000F7F6CC3C064770DE1E083525C9D20C0F51 +:1029C000ED97D420E3F78FD478F2C1F6BBF0FB2A61 +:1029D00011FC70BA4F92591CD52E33FFBA86E4A071 +:1029E0007D1EED17F9CECF758C2E599C193ED381E3 +:1029F000FEBA371EEDD3D970A28F72A00FF3DDEEB1 +:102A00004BAFBD09F649E51FF8BED4639AF8AB3168 +:102A10007FE8763E4FACFCA1F8458C1F8DFBD8C3F8 +:102A2000F7F1BB2EE54E5CDFA9D3A745CD77C7E80C +:102A30007B04CEDDE25C4C9EC6C9ECFC984802C625 +:102A400075ECB2DF0FEB89F354492027DBAC8E2EF7 +:102A50000102B24B4D04F2606BF9384A0311FE5883 +:102A600084A97284C94B33F9A34AE722078ACE3B73 +:102A7000958348ADB6EE04BAFE5AC70B9F0B10BF44 +:102A80002B6CAD81F8DFFEC56C8C4D31E2DC6A1E2B +:102A900055246F2C78E54BBABC31CBDC97F4F9FBAD +:102AA000735FFA3AF9FB8F66CE7D09E2B2FFAEBCE6 +:102AB00031553E1D16FD87EFA4F85D40850AF86785 +:102AC0000BE8888B303EC9FC84F91CCFC12F289EAF +:102AD000ED513C1FB6B0EF462CD8F53CE2D1329513 +:102AE000A1DA724712EA21D51FBDD2DE331DCEBB5B +:102AF0008F598726C1BCC79E793307ECC277FFEB9D +:102B00008413920DDE370F39E1F9C7AB5F77429E30 +:102B1000DDBBAB453C27BE86DBFD8BD77C5909E787 +:102B20001E2F73BE28CA52F6676AF41109B851BF46 +:102B30005E1FA22BD3D8CB376E4FE0C4C6EA37F561 +:102B4000A5EAEAAA5EBDC9C6E2CF37FE628F358B21 +:102B5000AEFFFAEDC9E8177FCCCF633EDE91D30B11 +:102B60007259CC32F1F97D87607E5817F8C5EFEFC6 +:102B7000B2917E944B0316C2FCE47A218DE54DC2DE +:102B80009F715DCFED4EC071976D66FAA089E236F8 +:102B900040F1E8DF753DCA7DE3BA97BDDBF75C26FF +:102BA0005DD7B2F5EC7B09D07F35E46306585CCB8A +:102BB0000897512F2CE99B8B7E62F3ADEC9CA7F913 +:102BC00087ECFEAA514F2C25DEAE6ADA65598FFEDE +:102BD000F975BBEEC679AE33DC0735EA8DCF33B974 +:102BE0003F56492E3C4DE54D9B233FE94CF70F3FA7 +:102BF0005EC398F1CF6BEC587EB246C2727F26A3BB +:102C0000D71B77EE792E0BD979A012F4EDACE76BD8 +:102C1000EDDF24D1B884B9775EFF1619E891C75566 +:102C2000B93FB288E3DD42581CE2BB3C1E2F4AC6C6 +:102C300078FCABF3212F20E860DFDF51E3138B003A +:102C40005E4D1EF3A2B3C4273C595C5F5E48E1466B +:102C50007D59FC8A4CCEAE2F63C11FEBBD9B4476E1 +:102C6000BE627CAEF2C57EAEFF963E34B71350D83E +:102C7000F6CC9F72F17B423C6F4EE47811F9B98536 +:102C8000480C797241F206D1D0AD912EAF838FDF1F +:102C9000821E71B0F7ECC4BE16EF09A8F4B86B231E +:102CA000E24DA517B8096482180CE9F798AACE7E00 +:102CB0008F80D29DAEFEA9653017E4C27586EF2FD6 +:102CC0007C2A8CECAF9C9F958F78582A2B33402F11 +:102CD0002D23BE4E09E167F7BE3E36F73C7727F05D +:102CE000F34302013EBAE9C9477F0D72E8865F6D82 +:102CF0004E043974D4DC9306F32D7FB82311E4F627 +:102D0000C7E66022BC7F34C4E49171BECE2C81FB47 +:102D1000378A43A0727205FC13367E697036F0D98B +:102D20003F1EB648A047576EB7F5C3FDD7153B18F1 +:102D30001E69FD08ABAF437CADDCA9E7B71B7EBACB +:102D4000394D66F7D3B238FEB24014AF78C882F17D +:102D5000D2156F88F0D932B2920C217CC6F7611D72 +:102D600061BA6F2BFBC4266BD2F0766AB958819F8B +:102D700056727B71A5C12E6C89116FB92D8BF337FB +:102D8000A7738A17BC671EA4EBC1B05088C9E1B60F +:102D90009FD914380F3AFA767A2FC4433E79E8C5A2 +:102DA00044A1384AF7EAF7BF3EE92B38A37CF894F0 +:102DB000F34744CE737D22EFA40B8433D95DAC5C22 +:102DC0006EE94FBC98E26579AFC51BA48F973F2A87 +:102DD0002AE09A91B76C185FBBF1D1FD872EA2EB68 +:102DE000B9F1318BAB9E81E300F9ACEED74AA0F389 +:102DF000D2E8FEDCF0C47EAB3C913D873C77759F0A +:102E00006E7C6C8F15E2E7467CD6F6EDB1323E3330 +:102E1000EC57DF9119A07FDB7E76D20AF47074B78D +:102E200040D2F386BFDFF2F08B89D04FDDAFC8FE12 +:102E30000DDBB7FED94F95633FCCD38CB57F57825E +:102E4000D0AC40FAFEE55374DE96B76D5E80BBE50C +:102E500097B724C2FAFF646E6574FEA38E34D0B7B0 +:102E60002D96609A84257BDEB2F536A4BFEB5EBD5D +:102E70000DF3F9297D6700FF52F83200AE653F5C23 +:102E800080705D4BFC487F2D3F62F7C5FE6E267556 +:102E90008F8DB09FA7B2987CFAD3361B1AF37F822E +:102EA000C33890BBAF8921966FB50AED0CF51E3083 +:102EB0004A625AFFBB9DEDCF6B5CEF122EC756F2F4 +:102EC0005E2B1F5A8772ECCF394A3AF03BC5834ECE +:102ED0009E89AF4E4FE7F20FF37FF13D2A226AE160 +:102EE00039F41FB028719374EFF178149BFF563EAC +:102EF0003F5D77BC70012DD322790A03B08E150295 +:102F00007B07E806F25CCFCF667046F8FDA1F56C52 +:102F10007F38BF7FF60693232B4273EB500E0C587D +:102F2000FAD3A15F68CF7C01E5802D7ACF59CBC75A +:102F30000F59381FEBDBE9BACC82169FBB05B4F7FB +:102F4000AFBD9FF6D3D81B2B773079BC12EE51EB77 +:102F5000F288191FAAF1FDEB0CE72B6A699403FFB5 +:102F600030E8BBC8F9C00FDD678CC7ABF6D6724B33 +:102F7000E8911F00BFBE65437B66F9A316CCF7FE40 +:102F8000CB2FF61EFA26A5EFBFF4A97CAA97AB4675 +:102F90003E6D797C0119894FFFE2F29111F9943E5F +:102FA0001F914F5DEC7B19FF32B91AC1B79E2FAF4D +:102FB0008B2157E5EC61F643D2C5B4FAE7FFBE7149 +:102FC0000CC847235E557C1AE5E3D390E4E01E2E3F +:102FD0001FE9DF1B448347157F2A7DDEF0F39B70DA +:102FE0009E08DDAAF4A9EAA9087D1AE1D5E3D1D8A3 +:102FF000FE079043EEE8BE5BEEA27E31E4B53D23D2 +:10300000E23DAD63F25022E4FD77C4B138C03189AE +:10301000D793597DC86DED0479A13E1F8A63F73BB4 +:103020008EF986129335FED9915D6222C4BB0743A7 +:10303000CC9F36D21F444A61FE41EE6F4F171DB937 +:1030400001F0A77A0A4A21827FBCDDC2EB63D9EF87 +:1030500008F03C923F10DFA18B619DEABDACA062FD +:10306000CEA0785CC240242DCFB725421C66C9AEE5 +:103070001BF1BB534BBBF5F05FEB988FE7BBD7DE83 +:10308000AFBF67781D0959C18E6AF9A1FEF90D5CC1 +:103090009EDF60A01B3F8F1F1AE9E63A956E4A48F3 +:1030A00009F37359FEC7CD5C6E4D178BE734507C26 +:1030B0001F3B20E2B9CEF15D22E904387FC1EC7FED +:1030C0001264F9022B28DD6AE38E9F005D8D8BADC3 +:1030D000973FF95FEF56DE49BB2CFFF5EF276DA157 +:1030E000E527BF7EEBBCA7A1FEE49BB9BF27C3FBCE +:1030F000D7EEFEFC1A904FC776DBF0DEE7B1DDBFFE +:10310000CDBD13EA4FD9BCB0CE637731FF36B8DB03 +:1031100089FAFA580EB3EFDA9E39396910E52DBBFA +:103120005FBD299BE57F1DDFF5CFF7E0FBA0C777EB +:1031300051A8409F727F6AE55371E81F1F7BE664C8 +:10314000A5F6F70DBE2E3C2BF8F9E0312769807CFF +:103150009B63C92CFEB4F2E9C9988F7FD38E3D568C +:10316000B81751FB9B2F27817C39F638B313A8FD84 +:10317000BA154CE61F65577FD742F1FC29D874D4A5 +:10318000CFAFCC593D1BBECB3A1C2F0C0FC7281E0E +:10319000002E8A9716908BB1F0B1239B9DE3FCE73C +:1031A000E1E36FD7C0FCCB775D88F7ADA37811144E +:1031B000F6DC897943147EF67CF7C949E0379F0D28 +:1031C000DED7FE3F8377E83F165E46EF816C19D766 +:1031D00069A4FBE174FDE4ED58FFA5D38BEB1D253D +:1031E000BF4B39FFA9F0FF7BF67B52CE7FB67C8BBD +:1031F000BDDFCFF3FD764AE0EF1D7BE6CB5C720EC0 +:1032000070CFFA7F14EE885D63F2DACBE9FADE263E +:10321000A10535025A1B6867B439581EFAC0FC3C38 +:10322000FC9D1FC2FD86D902D3CF811CE62FA8E7E3 +:10323000B8B35DD7A21D315BD9C8EFAD99703D031E +:10324000AEAA47368CE027CD5144B4D75E5E4BE73B +:10325000A7787AD96992DA647C8E76DB023FB3EF85 +:10326000162897B3EF87BA0E34C0FDCD39557A3F93 +:10327000E29B06BF606183BEFD4AB2CD0D71FA2BA1 +:103280005B2C2424407C58DFBF2187DDEF5A485A4D +:103290003B58BCE59CF1827E1DBF13481E36E0659D +:1032A000381E381E59F76178B3F9995F6823C6EF65 +:1032B000B7DEACC39F116F84FB8998D5618AE2D7D2 +:1032C000A6B0FBA29AF110EE083E39BECF15AFC6EC +:1032D000FD391B9EEFCC61F98A463C474BFD7706D2 +:1032E00008B7076747EC4107F2D32B0F0918777E21 +:1032F000A56A497709D47F21A01DF6F7EA3262A7B3 +:1033000070BF6C213BF19C455164A992FD7E00B4D5 +:103310000B55BFC5387F529549E75F262BF13AB868 +:1033200052EB527475B72F53D73FBD215FD79EE143 +:103330003F5FD79ED552AAABE7B45EA4EB3F2630E1 +:103340005557CF0B5EA6EB5FD07585AE3EB6E79BBB +:10335000BAFEE31E6CD6B58F0FDDA06B9FB0FD6685 +:103360005D7D62DF1DBAFE17ECBC4BD75ED2BF415C +:10337000D75E766093AE5E31F0035DFF0B0F6FD3C7 +:10338000B54F1EFC6F5DFBC51F3FAEAB7F63E829E9 +:103390005DFF4BC2CFEAEA35E4455DFF5AFBEBBA6D +:1033A000FA74E9F7BAFE977A3ED4B5CF94FFA26BD0 +:1033B00057F7FFF2A213BAE770C610AC04FF84FD02 +:1033C000CDF2FE53378E99F8303E6C85EF9815405C +:1033D000F71E2CE3491F960E7E0E593FC17F3A0718 +:1033E000E8756BB01388EBE5C92773F177F8AAE7A6 +:1033F000E9F20CD5EFB9CC81DF5F488C9EFF2786C0 +:1034000045D25F46E9302C60298513487F2AA5C341 +:10341000701C9629E1547C9E1A4EC6D215CEC2E786 +:10342000EE70069669E1022CD3C379587AC213B0C4 +:10343000CC088FC732335C86EF65854BB0CC0E5F0E +:103440008CCF73C293B1CC0DD7E2F331E11A2CE5E6 +:10345000F0E558E6856762991F9E87FD0AC273B141 +:103460002C0C37E2F3B1E1ABB03C2FBC04CB71E1E3 +:10347000262C8BC23762393E7C3D96E7876FC1F7B9 +:1034800026845761591CBE139F4F0C7F1BCB49E10B +:10349000362C2F08AFC5D21BBE1BFB9584D76359B2 +:1034A0001ABE0F9F9785EFC5B23CBC059F5784BFDE +:1034B0008F6565F827585E18EEC5B22AFC732C2775 +:1034C000877F86E545E127F0BD8BC38F61591D7E5F +:1034D0001A9F7F23FCBFB19C12DE8BCF2F09EFC157 +:1034E0005209BF88CF6BC2CF633935FC3A3EAF0D6E +:1034F000BF8AE5B4F0EFF1F9F4F05B58CE087F88AD +:10350000E5A5E12358D685FF82E5CCF0512C2F0BA1 +:103510009FC0F72E0FFF0DCBFAF03FF1F9ACF0E7AB +:103520005846FCFAEA98DF59319D06BFD89132CA55 +:10353000EFC53DA83B377A007E448CCAC539ABD96C +:103540003DF4CE9A13D3D05E5D6593F9FD50835C54 +:103550003D85BFDB009F9965F9EE942669FBD59CFC +:103560007E5FA9DAEB063BA8B3747039C43536E642 +:103570000D2E82F2FA5CA6E7FCBCBC2E979DDF34D0 +:103580004F60FA74D1AAB1181F27AED1C1F133AE82 +:103590001FD4FE1FE4F3BA6328177F776694E38C89 +:1035A000B6DFD9F29066E7FA57E7227E8DBFBB33CC +:1035B000EAF7DB732BBED6FBDD679A7F9DEB765F68 +:1035C0001354CD8A7916DDAF46BE5F8DADD7617CD1 +:1035D0004CFD3EFA20FF3EBA6DB93E5ED348E55C35 +:1035E0000D9DA7F15696FF6A6C1F5408DA39EB96C9 +:1035F000B3BC9EC66C13F66B349CA312D287DFD784 +:1036000068E4DF1B37B637C7881BFE34577F1EA31D +:10361000D26523EFB36EB988E74527DE60BF73B587 +:10362000D76D25605F0FDE6443BA265D2CAEF87B54 +:10363000F7AF7364CDF94C1395AB0AE5BBBD377D8D +:10364000CB0374BDAEE3310B9C8F0DE6ACC28F0390 +:1036500044E920C4F27872089E97340657E1F7E9EE +:103660004911C9467B8EE3D36292FB008F24D78E2B +:10367000F71E45933EDF7AFC1816DF57CBF74D0C4B +:103680006FC1BB583C7B9DB5B508E27F90E860AA4E +:10369000E4FB648271D93807AC6CDF3FBC376F1B29 +:1036A000DC5FD2D869F180BF46A2B7DB7E979BCCA6 +:1036B000F99EE1FD43FE5D55F813543A2840BAB037 +:1036C000C27DC946971DED3FF8AEAC99B24663CFB7 +:1036D000DC1BC1DE7C3FF2DD0B0A53258FD3D1F713 +:1036E000FCAB1394F1749FDFCE65E7838D414B50A3 +:1036F0004B171681AD97AC15F8F9477039D41BBB41 +:103700006DF9EC9E265F07B451B976D11836CE8795 +:1037100002C74B0E61EFF1FC045B777208ECE246E6 +:103720009719D769C951AE81BCB4C66C1FAE9398C6 +:10373000876E6B82FCB36C09BF7B666B5FA5803CB8 +:103740006AEC5EBB0AE83C02979998AD54BF36110B +:1037500096A744BA05F67B2E5AF828DEFDDD02C294 +:1037600047F8BA3EEA10189D6F64F9E7EB725AF118 +:1037700077CA88D977F84DCDBCEA7EFB615EBA2E58 +:103780007FCF93DF12D0AE6679A47E989FAE63316F +:10379000BF0F68C49B9FEE17E077823AEF7F391125 +:1037A000FEE1F37AAD732746D7ADD24BE36A279E8D +:1037B000F7A8707708BE8626C0E7461BC2D908EB7B +:1037C0009914C543C5981426277266E4368FB01E37 +:1037D0008C156BE8C548671613DFE75CF67BAC2AEF +:1037E000DDAB74533886C97BB5AC1D2370BAD49C4D +:1037F0004789F05CFD5D40F6BDB24B89FEBCEAD264 +:10380000EC5578EFF67D9E3724FFB8770EC417FB92 +:1038100073F97B726B11E6B3F2F9E99F827C04FBCA +:1038200049C76F74D8713FBD1CAF46BC18E57F6AAD +:10383000649DC46FADE4F902F9F05C66FAACDB8616 +:1038400074A8EEEF0791EFC52AB9B82F12C71BA7CE +:10385000EF21AEFF8672D9FB404EF03DB7E0BD369A +:10386000A473753F8CFE972AC7DF03BFB218A30964 +:103870002827F7262D1660BFAEE0EB7473FADA63E3 +:103880009B83F75055385AB8BC71C5F89D8016FE19 +:10389000BEC2DF87FCB5D395E8C7126DBC7CC918E2 +:1038A000FDF7C866384D789E75F90323E76BF4CAB7 +:1038B0006CDCCBEFE9FBEC35A08F8556948B9BD766 +:1038C000EA7FA76B09DF8F47797F22A59CE5770206 +:1038D000393E02621CD8D13DE13FFFFC57905FE7C3 +:1038E000B3A2FC8F23833FFF159C8BCF67BF0BB721 +:1038F00037E918D613EBF3F13E2DFC4E16E459CD03 +:10390000E0F3A9E3DE5765AA83F3DDBD4973329680 +:10391000D2F6FBE75E292CD5ACD36D4EC2FC3F8AB4 +:10392000DF8C16DEDE42DB775FF1C709A057F62E8B +:103930009456437EA4BD9E7D2737259AD71807FD50 +:1039400061DE160D9E52EA59FB9E79333296D1F70D +:103950007AEAEF9A0CEFDD3FD78ABF97755F5DB0CB +:103960004AD4D0256D0F82DFBC6E1AC1FB3971D9E4 +:10397000A5AB4134C699D71C807BA2A49A603EE1D6 +:103980001EDB18411B3FBA9DC3A914B2F9D6C9FA70 +:10399000F3A3E765FEFD903C169F7A3661CCA94201 +:1039A00090B7F526F8455DA6DF60FC42F65DE54D73 +:1039B000C26019D045AD2855035FCDCAE3E7D65C98 +:1039C0001FAAF7672D76F6BBAC96281FDB4F7379DD +:1039D0000E7C69E1FC74BF2AEF3398FCD0F457E900 +:1039E0001FF586659A351FE47F5F942F517FE0387D +:1039F000741D96F904E5DEBDEA780B54FDE1134031 +:103A0000BFA9F2DF329FEA0BDAEF3ECE4F84F832E5 +:103A1000E66ABE1BBE8F8F7F5FB6EF2A1FEA63493F +:103A200080F64D8224C0FD91A739BD46BF3F2009D5 +:103A3000686FF17EAA9EEEFA06BB67DC15910B6CEF +:103A4000BD560E37D55704FA5BEB4D2847ACD54C25 +:103A50008F59A705516FA8BF4B6CF168F041A27058 +:103A60001C1E9387EBDCBCC08AF0DE9B2185589C32 +:103A7000C997C1F165C2FC567015287EEECD91AE96 +:103A8000627AA3157F4F7B936A0F9809E207D1A84A +:103A9000D9174BA195C58314F6BBE196AA20EA136A +:103AA000CBFC5FA3BCDB14B527146B1ABF9F4C493A +:103AB000C15A674539FB1EC79375DAAF51DF18E16C +:103AC00050F54A64FF0CFB3E4CFE1BEAF7CCB56692 +:103AD000C07C9BE9BE003D6E167A1E5C0AF294D251 +:103AE00023C8F3AE7A167F5B5F6C42BD49DA3DF8BE +:103AF000DD33279FDBC9EDDFF70AA74AF03DE5FB81 +:103B00008B889787E6F03B67D1EF6792EE48BC0C55 +:103B1000DE2B5F751EECCF06391FE1BB67D6A63AD8 +:103B2000B8AFE22831A1FCB9DFF701DEBFFE0DD747 +:103B30007F177D3C509B44DB53EB25BCBFAF3EFF62 +:103B40003FFCA8754E008000000000001F8B08009D +:103B500000000000000BB53C0B7854C5D573F7EEA0 +:103B6000DDDD249BECE6054102D9CD73531E2E8189 +:103B70004080281B5E0D427013A2A009B8BC428091 +:103B80004022BED0DA66213CA2C51A25565AF9FD5C +:103B900057A44AAB6D83524B2BE246AC8D8F6AAC77 +:103BA000D862554C15111124E20B2B95FF9C333331 +:103BB000D97B3701A4F65F3F99CC9DB93367CE7BA3 +:103BC000CECCB9630F8555470A6349A5CE0295311E +:103BD00036BEAC85B1A1580FB200947796FCAD6C9F +:103BE000CC28C612869ABDCCC5D83D4AB859857A2C +:103BF000F012C67E01FD1D93C3CE49F07E62BAC9A4 +:103C00000B55E69B1C2E1D83F5EB55A6407FFBF163 +:103C1000941233F41FAF24527B2BFE7311FEC38228 +:103C2000CCC6589326EBB1FEDA74780FFF1CC75848 +:103C30007AC8D9121C8AF5966A06E3B16CABF31701 +:103C40006EC6E2E14F5B12631A33B33950CE35339F +:103C50006681D2EDCA642C15DACD2C6C2A60CC14A6 +:103C6000579D16B03356961C68F043590AEF990BCE +:103C7000A8DD964CFD15C60AE1A15AEDC57E8CADB6 +:103C8000626C346337D8083676067F13A0FF33257D +:103C900003FC00476B099BD306A57D948585651FB2 +:103CA000847AA8B16ECB36D6B57463FD569C17E006 +:103CB000DCE77028885F27A00CC7BD47E1E3CB791C +:103CC0008B5D26824F964F5B5CD7231E9E8E8D6741 +:103CD0004105EB3018D2E1637308F1C298B778D68A +:103CE000B0C8FB0FBB2CF4DE3EC735344FAA98E7B3 +:103CF000E0EAF7EEF82DBCD792EE32A9AE48FFA964 +:103D0000022EABE8279FCB7269068743E233BABD28 +:103D10005AE07343E36AF65E4EE4B905C783FE8555 +:103D2000FB034DF129880F57817EDE0A31EF1D59C3 +:103D3000BE0A5721D19FFAB37DF98A7B987E7C3EDB +:103D40007F525AC0E7C376670563637BC3214BC6C6 +:103D5000D652FF8340FABED6732F8E874811EB658B +:103D6000A7E139D0BF095FCD8AF4BB56CCDB83A76E +:103D700078933F04FDA7DFCB1AFA1A7797C0C3F4F4 +:103D80003BDB3EFB2BE099CDB6787F8172B306E832 +:103D90006BD78FCBFBFD41AC9F398129079C6B3DD5 +:103DA00041EA3749EDFAD48DF200F440F9DB987E10 +:103DB000379BAF83232CE0FD4906E3E3AAD58E4071 +:103DC0001FF492E5EAB73E19F6AC8E3FD7B9EC295D +:103DD0008787C01F63D89833EAF9DFFFB2B17BD879 +:103DE000B340EF8B618D244F6FD94D28474938265A +:103DF0003C7B6BDADD3605F0F0A917E082A5DA51DD +:103E0000C0017EFBCD6A28487CEB8BF1C747C6B367 +:103E10009D52992F19F8E69442A5D9E5A275D85C70 +:103E20002D0CE1B0A471BDB4CF3181F83A59D0AFB7 +:103E3000DD9AA1E8F120E926F9291AEE8068BFD6BB +:103E4000C5F1546A0DCCF1135F1518F86A6E06E7D8 +:103E500093683A3C6D62B538EE93C7DEFDF1C5B0AC +:103E60009ED44AAE3F8B115E1DBFA4567A8B49BFCC +:103E70009C066CEAF032751AE7A368B8166670BE45 +:103E8000589861842BBADF72C1BF127E397E82A03E +:103E9000E5D4B1307E1FEF49BE93EF1D3C35EE33C4 +:103EA000E4A784140E5742654307D5B319E97BADE7 +:103EB00088F9709C4919AB6CB14339BF2DB3237F8E +:103EC000590D7C76A9DAB73CCC73733C3F139771DC +:103ED0001AED86750673A2FC5B99B71DED02333BA4 +:103EE000483E9887A521FCEB198703F4B76B3ECCBD +:103EF00073959BAFB355E1F2D321F45EF325AE6D1C +:103F00006B15B203C12EBE66CB19E427B007A6D14C +:103F1000F81C7E99867686ED1FB81239BE989FF9F7 +:103F200041BF340BBD8B3FA59F780F0969EE66E555 +:103F3000D0AE5502830E073AC0B866B43BC5FEE565 +:103F40002C81F7D746937EA3792CA5D02F2102DFB1 +:103F5000C6B12CB416E6DBA8B0986CD4D365262F76 +:103F6000CA2B33FB062C467B5ADCCF7BBB2B32AEF5 +:103F7000A508C68579B4341DBC02174C0757F47ADE +:103F8000BE7F9EFA6D8A7F00EAB3A3195C8E1299F8 +:103F90006B00AD0FB40DCA5DAAD9E10B91FC5C3E7C +:103FA0006011DAB9F22B95459C5FCFA8A349BE08F2 +:103FB00086F6D90DCC6547FAB5301FFA07D98CDEE5 +:103FC0006B39BD393C01F865F38C8A6C5CEF5E940B +:103FD0000B781E33C3A4607FA7CF591C181A996FA2 +:103FE000EFBF6207D4E8F864EFC4C32317C1FBCD69 +:103FF0003916A7E2227A70BBF6556CE817F0F7A4E1 +:10400000ACDC012E5DFFC9821F3657067C0CC66FE3 +:1040100076F75316E8DACBDD9CBFEF2CBF72003386 +:1040200021DF3592BEB0323E2E5BA7D0B8D17C5A8C +:1040300020DEB30A7CB49699626CB83EDF44A57664 +:1040400028B6C7D0BC2D668782F35A7D7CFDEDB3C0 +:104050005C57211FCF2F0A591174D0439625D03EAB +:10406000C21D4BFD139CC29E31AEF7EE2CE9F7C08A +:10407000ED6E9D9D7773FDDFA274A7219DEED13873 +:104080009F833D7F3E1BFADF939A5D807C72E7251C +:104090003F9DB300EDE78F8691FD94EFED1E1C1858 +:1040A000EF86F29D89576E5904CFD5CCDCC1B8EEAE +:1040B000A3195C1FBFED6466D4BF6F83F25DA3E0FC +:1040C000F8FECE6C949B4BBFB861818BDE9F14F5DC +:1040D000FE3CE467F9FE1D83FD53B1FDEE69579286 +:1040E0003FB5B9D23500E1B0807FE1A24505D3B03C +:1040F0007EF71456703B8BAC6BA0A053B99BEB873B +:104100003BCB37A4215C83DC2EB15EBFE043A782AA +:104110007278B77B43DA0280337532D73BD25F695E +:104120002DB7F8906E775E91BB4D55383D17D8711D +:104130007CBEFE416E0EE766DFC9B4C50CF9C7450B +:10414000FC2EE791FC9F88D6154A07D257C7DF9B04 +:1041500099FCB9F674231F0E728E407CFF45E8D798 +:10416000C44AAEFFDAAD0EA25FEB147F4875733917 +:10417000594CF07D4178699FED277E4F15F2115320 +:10418000CAE9CD2A2DA11CB75E4E26E6909C801C64 +:1041900004484E3215E46F096F5269D7E3BF857E3C +:1041A000ED791627A2E75295AFE7DBFA07EF90A467 +:1041B00081F7E3F6FFD05D48FA6638E297DD9A4C66 +:1041C00076ADDAD49ED3007056AF0D5319FD7E291B +:1041D000F8E29D881FB3B71FF2394BE7F6FC3AA10E +:1041E000533EDD54E8C0FD412081F753CC81315866 +:1041F0002FFD66E1180BAEF71FF10CFDD1B959EC9C +:104200009A0A787E8DC2E199DB34AD5401FD768F38 +:10421000A0DB2B8D40E03CC65E6DB4311F08E76B20 +:104220008D4EAABFDE9846F5BF37BAA87CA3D1430E +:10423000E5210BB7B77393D93564A799D382FAE414 +:104240003E615FEE13F2CBD8F5696049009ED70A54 +:104250004DE05CA7045FF64F81BD4A97C6F5FCE5CB +:104260003E156D4D8F7E9D5319C7984EDFCEF78F4B +:1042700037B433CFC8483D93917D417E5CD09CB824 +:10428000ED7698F2AA19C986FE57360F34D41F135B +:10429000742D2FCD323CBFBA7A88A13EFF14180E80 +:1042A000988AD96209DFD70B3F01761826D4FFD749 +:1042B0003979DFCF1AC6F4BF09E6FFEC258DDAA302 +:1042C000E970C8C2F92EF83795EF0BE039D2E5F363 +:1042D000038318C25BFA0DECCB904EBFB2921E5C0A +:1042E000B845614154F2DDC179F8DEF50F58BDD80B +:1042F0006FD1169505101E74DA60BEA3AFE66CBBD5 +:104300009DE81ABC1FFB7543BF6DD07444634164C4 +:10431000CD855D621CA56020E2FF4822F325822B3B +:10432000F561CC5BB937019CC7CB5A6A4CC8C7EA68 +:104330004BA92678FFF8632A43395A7AEDEBA39DFF +:1043400080D765CFB5FDAD08C63BD4A23227CCF7E8 +:10435000D10EEB0328EFC025FDD10E47D6191A8EDA +:104360007CF9CB81FE37502F1DAD090D77223FDC44 +:104370009A4AFCDD1B1FB07EB427C897305EE0C6AA +:10438000789B02A2BC50F3F61B417CC4F70941366E +:104390006A002B82FE9BB452D4EB203733719D8789 +:1043A0005A924DB7131C8F115F2D30BB2CFAF916A2 +:1043B0006C52C90E00312C0827BB4B0D80EF0CBF8F +:1043C000163E6EB31260FD7BD3F1BA6BAD44A7EB22 +:1043D00006C58610C5F3708E3EF6331F83EC04AC21 +:1043E00091FAB2A754F2EBD828D79DC5B0AE99DBAD +:1043F0002715A2BE62697CFCCF9224DFACA3F94FE3 +:10440000FAA009E9BF3D3E84FBC663A6C70E9AB376 +:10441000D0CE05D44C68AF9D19BC5F019138B1E78F +:10442000BD9F8C877E477FAD7971F84DCCA765160F +:10443000F275A19C2D300B3BB63A95E49999430F48 +:10444000FD1CFD9C7FF427FBD45B1FADE1F228FB34 +:104450000318A6222CC2FD9434F4BFD95427E0AD32 +:104460008AB5AD277CB210F5772190803F671D9407 +:1044700080B7F70AE36F671703BD4C2CA0F7E3DFA3 +:1044800013F23C305331E8BDAA4CE13F9BB89CB2DB +:10449000BDDCDE0381F767037E6A19C74F3DDBF49D +:1044A000890AFA68486626F5AF6D583203FD2FFA7F +:1044B000011E9603FF21DD6B9C89D77742BD6E47B5 +:1044C0008C3704EFD566BAF8BA5CB07507395D2A47 +:1044D0005E79C1739D05E75BF63B8525E37C21EDA5 +:1044E00010FA61365018A8378E82B81625E1780A7E +:1044F0008D5FD7A28442F0E712D61D46BF78C5A3D0 +:104500008A37CC87B2211D178B719799EFE8443811 +:104510009779947F5A11BE1D30AE4E1FAD68E3F3FC +:10452000483D52CFCC917690AFC5B64D9D6A028E74 +:10453000D7E3172A6710BE162D88FD6CCCB606C7C8 +:10454000F1C7C5135CCB002EAB5B0FBFCACE002EEC +:104550006B02A1E766121E146F88F5866309F34F9C +:104560004EC475407BD8D51BAEE8757D5B386BBCFF +:10457000EDC427D1F0EAE8E0D2D36109EBDC80FC9E +:104580005413E4F4AFD9037886F1DF6FD098C541B6 +:104590007CD0993D3AC20700F74CD4874B5A551648 +:1045A0007647F842F2C3D29D210BFA291FB1960437 +:1045B0003BC84DDD969D578EC5F7B6BE6A41FB5D83 +:1045C0009D14CE312522EA0AEF2ABD44172F09197E +:1045D000D7BF7C87B1FEDFC20FAEC23C5ABC0778A2 +:1045E00059BC5DA5FD8AAE1FBD2FED7B6D9079C3D3 +:1045F000B0DEDAFDAA17631DB560CF920B2E1C5EEC +:1046000089A7FF6FB8A3E3135B32E3530E83C90698 +:104610002FD18BF189CFD950C76C6C14FECDD9E264 +:104620001372FDD1F6F52D0DFC09A0E367669F23FB +:1046300089F478B49E1ED31FED8DD4CF35C25ECAE7 +:10464000F117A39D84FAE12D8F27A01FF87EEBE3DD +:10465000FDB05C82766868C40EDDB8303C08EDF6CB +:104660008DBF8FF1226BB219E1D76F86FAF19D2AC7 +:10467000EB4B7F960D0C3C9189F00A7BBA427D6032 +:10468000B013EDA7D0A7E7F303BFEB3A17E03A4723 +:10469000EAE212629DEF36F3F5BDB789AF7751AF0D +:1046A00075821F81EB7CD0EA45557E24264CF6FEB0 +:1046B00008ACB349E72F48FF40AEEF73D6727F18BE +:1046C000DA57ACFAFB4133F0C3D2DCCEE1288FD508 +:1046D0007759C91F58FABBF81083FA51A5A43FEDCA +:1046E0001B9E0D2720FE963DC6F11781A3C73F787C +:1046F0001BED578F7FF02DF1B692F929FEB772CFDF +:104700009F0FA0BFAAF8E0558077A5CD1E267EDFBB +:10471000AD1DD3EB3DC5853A80E219361BD2279DEE +:10472000B9C8DF66D54E8CA3292CC0CE20BF8243EA +:104730007118685183EF01FC5FE47C326F15C94149 +:10474000772EDAD7FAD8B0D61FFDAA9D8A771BCA72 +:10475000DBF52509250CF7FB0D04CFD7C2AE293EAA +:104760001F5B0D78B3C258B130EF37420F2A2E27A6 +:10477000AB467C6E85F9E32370473F9F89AC817619 +:10478000D16EEA731F3C2C8BCFB34235919F5D678E +:10479000E1FEF609117F89CBE2F6362E4BEC8FB2A3 +:1047A0009CD4FF046C8F91EE27A65843B8CFECB48D +:1047B000B0DDE867BDAAF9B6FC10E8F66856C09906 +:1047C00005FDFD26FB5C94F7B571C335D49FEB1254 +:1047D0006B32B09CC73A35A4EBCCA2729719F0703B +:1047E000B09FCDAB92DE02828C463F81F3F1CB9A33 +:1047F000BD19C73D88B883755515FDF92BA4D34164 +:10480000987F14CC7F708025D404EF059FB292FF6F +:10481000B03196056370FD290E33F2FBD5424FCDC2 +:104820009D0C3B78E099AAC91BFD58C2784106F857 +:10483000AAB675AF1F01F3AC31713BBD26898590D7 +:104840006FD9BAAE42C4DFC56C9D13E908ABDF7502 +:1048500026F95CFC646687259FC0BAEA26323AD7FF +:1048600020462B22FC1AEA7516DE3EE9C19F95B759 +:10487000A6431DF71AC80FD3D4D03658CFE530233E +:10488000D2F3721817F98DA1D08CE6F4C45F05FC41 +:104890005F0CEBAC30B3A02989CA663B945714B1C6 +:1048A000B003D6177E9E29080F8A0EC2373B6C0ACA +:1048B000E701DE2E3787DB117F0754B61EFDD00AD5 +:1048C000E6D656013DEAD67E3B78E73EB8BDBCB59C +:1048D00018EA261387F7662584FB827966F6AC0A08 +:1048E000F0D427B982F4FC5ACED7F0BC39A100FB32 +:1048F0002BC45755A024909F91BEC4A7D879748427 +:104900004ED0DF168BED596EE2B32A01EF9680A9E7 +:104910001FC6015688FDE03C1B5B178FEF9BBD094E +:10492000E540A71100A69E4EF516B96F6CB35480F2 +:104930007C2E07F976035E96087E5E2EE5FB51A37A +:104940007CDF96E5A27605FD49C0679528CF261F36 +:104950001BC4781B847CACCA92FBD236F2A3970BA3 +:10496000BD72B6F956585998F0F59495E82EE7BD02 +:104970005C94EBB2F839978443F2790D6BB0A09E4A +:10498000A861E677713C131013ED676DCB83164475 +:1049900042ED56EDDD9E79E8DF160BEAA965DBA353 +:1049A0009F9B2375D5A0C74C67B0B4742F42F89471 +:1049B0004B63BC28175596368A2328A8DF3C11FD87 +:1049C00016FD9ED6C2F791DA26EE8FC9789C15FCAB +:1049D0004DD4F3F3D3BD69A817A49F5E23E86F6598 +:1049E000AEA90AB4D7A03F968075F03B30FEBA85D9 +:1049F000FB9F66E15F2F6C31FA27F39B75FE292F31 +:104A00006C3D71541AD77C48EF6768C24F69D2BCBD +:104A100069682F747156F2579A140E7F3095F17DA4 +:104A2000750A6F370B7F54CAFDBD599AA07790E87D +:104A30007439F33BC23A3DEB9FCCD8A5051887509B +:104A400042C80797FB4A3A78B926AC24A03CC29EDC +:104A500086E49CCBF3E5BEDBC8CFF2972AC1386C65 +:104A6000F76947F5EB7A05FF18DBDB4F7A2A4BF83D +:104A70004951E738AC38B94F3B18ED270527320FBD +:104A8000C589502F67D1B0E42FAC12FEC414D5EE07 +:104A9000413D5DADC47A71BFB0DA96309C815E3E17 +:104AA000097E36F247F5DB3164AFBF8CE1CF4F941E +:104AB000C4074D50BE25EA731D37CE44FFBA3AC134 +:104AC00062C6F226B58BE6F9D2D44D76606FC2EAA3 +:104AD000C9A876DF7666927FB7A164E416F0F9D8AC +:104AE000FB0F9E2CB70DA2733B7E6E1CFCF2558C07 +:104AF000B755E2F91DD54F95FB70BE3F75CFB38119 +:104B0000693A9DF555B919D67BE29EEEFBB19E92AE +:104B1000AD5698015F27EEE81E1C43F5585E5FC353 +:104B2000E43974059E2F9EF819AF1FCD8AAD082277 +:104B30001E2672D5543D4E21FB723C93EB0519475E +:104B4000AB363DC3CB892C6C1A75FE7E83B3FDC793 +:104B5000D13F51E30FC5235D72737DC7D1DF3BEEBB +:104B60000E7C8E767259B912B4C0BE97ED0FE50A6D +:104B7000BB4DFBEF8D22BE2EE9763C93EB19595AC3 +:104B800072FC344EF5B5390EB4AB30DE99EF325EBF +:104B90006BB6713CE9C72C16720EE3C7657F87F1CF +:104BA000A5DE90E3CDCFE178D1C1DF3FBBF03F1F61 +:104BB000FF8DA8F1A47F2BD7310C6513F86E792EE9 +:104BC000E37E9480473E5FAF845367633CED799505 +:104BD000CEA9D6A71E36E339233B64E7FE730C97B4 +:104BE0008771D95CEFAFFFA1D7817E7EF02F2A9D20 +:104BF000CFAE5FE39F331FE359BF1E331A594CFA00 +:104C0000A11FB5BF6171C13A568AF3CE7A71DEB980 +:104C10007257BB652A8C5F0FE5245DBCA34E9E8B4B +:104C2000B32E73457C048E71D926719EB5E69CE740 +:104C3000DDA5023EB9EEE1627D2CDF5792AD5BB798 +:104C40007CDEA419EF23C8F20E314E4636338C7742 +:104C5000B1C2E9571DCBEDE1C2D1F136D7C5917391 +:104C6000FF9AAD6E3AB748C99C7879B68EEEF2BD20 +:104C700048DCB9BBEFB8F31E1E7796F379059CD5D7 +:104C8000499DD783B107B8BC77A35E987EAF946384 +:104C90005011363C3F957A626AC5E4741EFFC47AAF +:104CA00043B6EF6E94EB8E58BE2F9A3B66582CEAB3 +:104CB000A12E779CC909FAE316F7FC3B102F73C7A6 +:104CC0005C32159F9758E373E7F3731CE2BF5BDC1C +:104CD000FEA5B80EEC8FF1A98085F349E005D51B40 +:104CE00084750686C705302ED8616293D14E4BFC81 +:104CF0002DC9E6F1EA3BB239BFC9F9E5BC8C3929C7 +:104D0000DE7468ED003A8758EB2ED9949D1A997796 +:104D1000AD3B70B37E5E58E6707C7EB6F9A3E97752 +:104D2000A3987F93A09FBF18F84F67372A26C7190B +:104D3000EA953392994F1FDFAE1C68A8CFA9CE32F7 +:104D4000F4BF7AD110437B99B57394DE3F9074FB26 +:104D5000B6FBB1A920F70EC04B673B1BB60BE5D0E5 +:104D60001D4FE7A8CB9BA751BCDC71AA8ACABA9693 +:104D7000697458B9E2D42CAAAF3C1547F58ED8CE49 +:104D8000A968B73B9E48A4FDE72B6A38F73E1CC7CD +:104D90001A4FF25C3670EE5AF42B3A628343AF033B +:104DA00038CB7EFBFD52A4F7CA5D0AC575CB54D63D +:104DB000A124A17CC6D07865EA5F475D0BCFA74FE1 +:104DC000E2F6AC0C6D2BB4378938E5D9E4669790E0 +:104DD0001BAD8BC33DE554398D27DBFF989D69B82A +:104DE00067A0A56E37937F2BD6A37529545E766A8C +:104DF0000895F5BBCACD786EF482E7C114B41FD014 +:104E0000DF4EF65DEA2529370D631CCC7E763C5BD0 +:104E100085FEA942FD03E3AEF0F83A91BF66DEDA03 +:104E200065B6E13981DDE2C47DE2CCA2116935BA13 +:104E3000719ADAAF62A8BFAC29CC82F6B20A4ABD39 +:104E4000BE0A9CE5DEC5DF04FF497D25F538DBF5AC +:104E500063F2FBE7897884E48F7DD9C6FB179D0A4E +:104E6000B7C3C1DFF1F38B0D9EC08728A79D256CCA +:104E7000CE63A43F3A07A3FFFFDF821FE86B5368AE +:104E8000BFD5E5C3796716B94C780EF2718FDEE5B0 +:104E90007C7ABE75BC29FABFA2B2D5C81FAF4C98A8 +:104EA000D0E9C373BE1F8C1C897A9139BB4F239FF5 +:104EB000D6EF1D9F8571E76FB22DD4BF0CCF54463E +:104EC00045F603F57BE3E8FCA67EAF751BBAA4F5B7 +:104ED00009DDB9A86F2FC90F7C83747BE5E9AF0E9C +:104EE000FE00FAFBECF174DFAE7E6FCCB358BF541A +:104EF0005568EF3738DB7786F4C959E0FCB6F2180D +:104F0000CD6781662E7F012187F305DF2E10723871 +:104F1000DF0C7611E0BEE62595A17E5A70AB326CAF +:104F200017C6215CF1DE1C9D1C4A79D3902F4722C5 +:104F30007F72BEAC3B9528E4DB2DC6E5725086FB44 +:104F40005218A76C4822EDD3579E4AA67E525EA502 +:104F50009C3EE3090CCF013E296B02F98679026B76 +:104F6000078C4279393F9F7C6576E13D90624543ED +:104F70003EB142394927DFFE1EBBEC9CDA0FCF63FE +:104F8000D6B94DFA73F0913917C6EFAE1CCE270B88 +:104F9000ECE11CF423B586182FDE73A94E75911E23 +:104FA0005B751B540005AB34FF24B4ABAB7EA6503D +:104FB0003C11ED2DFAD5A30F34505C5ACE7FD5A904 +:104FC000E1CC05789A752A9BCA94CC40494E2AD2E6 +:104FD000E74A81C7E17D9E3B7ED6B091E2789F850E +:104FE000AC5E46711863BCB0D0E7A57348ED258D63 +:104FF0003DE0C2385F4045F938328839372B3C5E96 +:1050000088F14319EF93E78932EE674D3119CE3FAE +:105010003F37B70C46FFBF57FCAF84DBB563DB35CA +:10502000B26B75ED7F1D6DC2F314B78FE280BF1CAC +:1050300018A842BA2EAB08FD4683FAF23B1E4FC0B9 +:10504000F8BCC4679B399C83FB9436C023C623DB22 +:1050500036A9A5216EC7E3E8BC4EC64B855FF13C7F +:10506000E3FE88E4F365A7B2083FD2DE48FDFDFB0E +:10507000C634DAC44A3D7E3E3B24F97B8599DBB1D8 +:1050800015C0F748B768398AD89F11242F0CE4055A +:10509000E523627FB87C44EC8FE07F4706ED37A2C2 +:1050A000F5B9B44FE37F99B5EB8F30CEB247E6FA4E +:1050B000914E1386803E007CD43DC6E5205ADEA585 +:1050C000BD96F890F87941D487787CF720DECF2F11 +:1050D0003F31E4E75A83E58CF42C947A3DAB45F9F3 +:1050E000B5F2F9CF2F506E9A457F09B784B3D3C27A +:1050F000FD2B09FF8B8CFB1F729E0D9E8A9D280F36 +:10510000683770FE2772B89DFE6FADEB6CF6E389D1 +:105110009C0BB31F0F46AD4FAE43AEEB25B1DE6F18 +:105120006B5F5ECCB188FBBC46FB02FD0E3F09EF16 +:105130009D782ADF897A4C55BA0FD33D96A7625CD9 +:105140008887579E8EA1FE3E9B83F6F7939EFEE0D6 +:10515000D3FB70FCFC592F221E7D7BAC66A6F3F7B7 +:10516000245C12CEBF08B8C10E75E6E8F601F2F96C +:1051700077B54B522EA2E5365A5EA3E573FA8FC17E +:105180004FC475FE5EA17B0211BF90919DEAC81CC1 +:1051900044E76552BE757E22BFE7E351E89E4F6F3C +:1051A000FFEBEFA35CF0FEA7A3E247607C759FDAFC +:1051B000B6799C1291E3898F7CFDF83F586F7BE7AD +:1051C000F404D4DCC288FC4A393D3F5FFE41237BB6 +:1051D00055A7905F6385526FAF026791375BAE71E1 +:1051E0001F793E7EFC42F0E32B081FFA630E0BF999 +:1051F00063E7E3BB8B72FFEB7C7751AE8EEFCEE6BD +:105200007F67E472B906BECBC8FD0EFECF39E84B0E +:105210007652F2DFF41739DFB02CBE5F013E22F880 +:105220003B2C83484F57093D3DFD0C6B403C07C468 +:10523000FE5FF2F1479EC0243DFD717F82FB8E6FC1 +:10524000EBD756A534D03DB400947ABD24EFF74790 +:10525000D3BF34F7C2F4EDE8DC1EFA7F2B7D33E7D1 +:105260002C743F873FBB30F75BF8B3CC196B8C13C2 +:1052700034586721DF7C1A36D3D5A5B3D153DDC2AC +:10528000F1DD83B7B059FA05C9E817009F2CFA4E33 +:105290007CC2FC69185F3F887FD2B9C9D7B3501E62 +:1052A000F7A9B2CEE313ED58BF08FCB8DCAF5F5BE3 +:1052B000A7B353778BB888BC4F8B719D9D7DEDA7AD +:1052C000F2F8F9C2BEAF8F3E82791DC10C0BF9D343 +:1052D000FB1CFCBEE2C6DB66D37D45D9BF3DC3B235 +:1052E0009ADF676C4C5BAC93937D19FD4E639C6AAF +:1052F0005F7F863754D8BE1F8C3C8DF72183F5AA7B +:1053000017C3C20757BFF7D17CA8BF796A1CDD4B12 +:10531000ECB17375FCFE9396D216BF5807DFBEFA48 +:1053200091C52EDD7A3E17FBFE37D36F74621CA742 +:105330003DE3FACE1284B7BF99E0B57E55ED5486B1 +:10534000627E03BF477E9FD0475AFC71CA57694AA5 +:10535000C1801E3E1771B6F42B6D384E538A89E812 +:10536000A6C5CF755A74EBF1A598395C6EE6D7EBFC +:1053700003471E1FF7E35CBEBF7A4675D2BA010E23 +:1053800027C603AEF9BAFA4027EAE3C1A35D786EF7 +:10539000322B2F8BDF2F32398BD13FBD54F58E62EC +:1053A0003A7B769549D82D0F4B47BD40E71AB81E7A +:1053B0003C4F184EE70C4111AFB7E1398226EF257B +:1053C00025707D29EFABD37B26437F3A97782AD788 +:1053D0002DF372868B383CDD53A7CBC62ADD3727E9 +:1053E000FF06E55AC373E8141BDD4397F7CA412B48 +:1053F0004EC6E79A0278403C0D622B2B88CFDB34F7 +:105400008C1BBD902BCFA7F8B855028E2AC01F8EDB +:10541000536566660BF8EBD7F4B70CDF0DF4EFB20B +:105420005BBC28DEF2B99CBF4ACC738DCAF599B536 +:105430004E33DC6397F0FC233751CCE73DF0F71493 +:10544000F49FE24C747F0D97A3C7C3ADF1741FA402 +:105450006B305B89FAC02AE65B2FCED9ACF6276E9B +:10546000C2F312F9BC6BED78BA87BB5EC6075688EB +:105470007B5F80170BAE0BFFCEC475597CF9B82E3D +:1054800078DF3D5CA717A3E0451AF6D033AB375D54 +:10549000CE77EF5EFA35923FEAF218ADBB3DA3DF5F +:1054A000AD2457FD6DC4F71B071D7E04EFFB6A3F5B +:1054B0001AEFD5E745B5F74F2BC6FBC4EDF5C9B7D5 +:1054C00076EBE4E4CDBA59CE8543F1FEB0BD16F9D2 +:1054D000FBD2AFD36F2D81F7DFB14C30C8E5DE1FB3 +:1054E0007DF4E9EF53B08CA77BF57BFF35CE85FBD0 +:1054F00042D5D4457A82FD2B96F87D92634E9AFE72 +:105500007EBD258FCBD71D837DE63C3C9FE807728F +:10551000608FE833ADDFA800CACB463B653EB08D57 +:1055200022DEDCA418F39B6609399B25C69B95E710 +:10553000E47AD1EC1A8CE3C87C91F60CF36A7D9C7A +:10554000324BE8B3AC3C93C0D78D07E6EBF0D56E99 +:105550007DFA2FA3115FFD2ABD743F1AF51EC615F3 +:105560001AE3BCB8CEF6FE36A27F7B7F4B08CF0D88 +:10557000DBEB557E6EE7B085D0B597F7B8B5AFAA2F +:10558000492FCECA7319E24BEDFD5308EFCFA80D9A +:1055900007B85EB091FD7EB32EF934EA2B4D7350FF +:1055A000FECA3BA6EE4294BF59794904E77A05C486 +:1055B00042E78F5F1DD10B94D7720EBD40792B9AB5 +:1055C000B8DF783E7D3021CF2DE4A781A1FCFEA776 +:1055D000FA007FDAE8DEF2DE23CFE27D29D73DEF65 +:1055E000FF3FC9C9D55172F20C1217F1BF51A1F397 +:1055F000562D7577BC3E8EB948F0497B9C83DBB352 +:10560000FAE4D3C817D675F3FB3197BE9FCAF5A746 +:105610004DE6B94C20FE9D6FBF52233F05F8F10ABD +:10562000E0C7857966EAD794C8FD47CDD43D0CD74D +:10563000B37B70A0360F9EBF2BF23222F914890A79 +:10564000DE7391F04BFB26E9FF454F1DA0D6DD5FD1 +:10565000795711EB1AC4483F55A5FB3EA47BA7EB35 +:10566000D29ED59F7B6B3F8CE77944AD2ADD0F96A8 +:10567000E7DF1B53A63A51DE37B628942701BF4D0A +:10568000788F6EA178AF66D4B5B938DEEFF3F8BD88 +:10569000D6C011E7D40417E2EFC85F30AFCB7AB3BE +:1056A000EAC4F79EFE46A5739A4B3EE3F9BF8175A7 +:1056B0006E435E66E098792ADAD7F9CC49F729DF9C +:1056C00049585DBA06FA35F1B30858873F1CE0E740 +:1056D000E174CE357ED0FE32CCFB1D7F4F2AF969B6 +:1056E0004D37C427603CEA206BE84478839B549292 +:1056F00023F0CF27A3BF17541249FFBC9D7E37E587 +:10570000F7BE9D6D4DA4759AD9B398BFBB45C87FB0 +:1057100095B8278178B11544F27D812FD94505913F +:10572000FCCD0E13484E01F997C4BFF78BF76B30D1 +:10573000DF17EF85A87B0A319E6EDD62BC27D0F4AF +:1057400033254DB918F8A435EAB9D847CC0F1A9FBC +:10575000576D32D6DBC53C179A67B933CFDEE7F910 +:10576000FCD9DE97E7F3ED281F4883B7A2CEC71A0E +:105770006E72529E65BA99E2831B9D9CCF36AE56DF +:10578000E9DE77F4785D8D8CF22AD68BF1241F4BFD +:10579000BEDD27FC7AE0D739E87746F28F0729414A +:1057A000B2AB6DC91867EF14EB7FDAC2FD5499876D +:1057B0002CF3233B85FC3D79AC80F220F79E2A2810 +:1057C000D6E76BED53BB1E1943FA99E7B3C21EBB74 +:1057D000F4F13EF07073AE6A887F48FF58CADB660A +:1057E00001B7A47FF4FBC7851DEA8ACA4F0E9C2728 +:1057F0003FF98EAC89EFA31D947CC6F65DC5DC94A1 +:105800004F3392F601C7859D0BA4B0A994979CE6EF +:105810004FD3EFAB32B38DE7DC9B7BF4C285ED0F4A +:1058200032B3617F608FACF72EB1FE1EB844FEA785 +:105830002AE2B7D578EE087C1FEBE1F3CBBCE5EAB2 +:10584000D8700EDEEF92F9CBA556764DB99DDF6389 +:105850005EA5C35BAC87E36BFA9DBCDFF4265EE21A +:10586000380FD823EDD513F97BB22ED729E1CBCC55 +:1058700016765FDCCF8D86BF6C52DB67367009F31E +:105880003CCE4ABCA771651113E7B789ADBE6C8CDD +:10589000CB18F1F14A0F7E92F64F0638A66F66914B +:1058A0007B69D03EA5D8D173FE8B6C2AFBE77A1CAE +:1058B000FB3711FE785E060B7499F93D4D511F05BB +:1058C000F5785DBD28AABE95F74F3077317DBE02D1 +:1058D000EECF15BAB726C70B8AFD5FF754BC0F3F52 +:1058E0007397E244FFF6EAE21316D4A76593BA9ED3 +:1058F0001B08EB1DE71950698F81E7183F02782FCD +:10590000F3B85B8366F17E3F3AEFA79FB54DF1A9EF +:10591000C09775454A28D3DD9BAF2FF3C87DBB9C4C +:1059200017306C7C9F61FECB85BC8F7C44EF67D2C7 +:10593000FB61EB05CC3FBB98E7CB45F79B23FB898D +:105940003C7B1A1FFDA7367ECE1ADD3F20F8B6D36A +:10595000645A81C97BB59EC256DB25405FC6F96398 +:1059600099675465702807D717B5DE73C13BD363B9 +:105970008CBBE2CF657C3F7C2E7C55F6C297E08FD6 +:105980005A23BF38CCFE673F05381C298A13CF2D18 +:1059900056FA6336A13D2C9B24F97B42A5AF18D65D +:1059A00017C30CF71522FCEDAB44FE5EC964FBC4C3 +:1059B00056D40F7E13337C3F63CA1EA5E77D0FF0DC +:1059C0000F5D2180F7D7794A5AF17E03D083DAA997 +:1059D0009E7D0E7E6F8BAA1747C987E06F924FDCC2 +:1059E0003F007E72FAB02BFF2BF07B5CE455774EC4 +:1059F000E4FAB83393974F7BB8DFF6B0C0E36F2576 +:105A00009D637578488FD0197E613C27D2AD9BF09D +:105A100074558A5877F09ACA19B0EECE24364C01E4 +:105A20003EF9C38EAAD67583F07DBF19EF8B99839B +:105A3000735B5F02BD7395C0CBD33BE6ED0FF238CD +:105A40008F8272B6821800E8BE4B09521E0ED2BD7C +:105A50008F75FDB837DF04A3DEF769E778FFAEDEA8 +:105A600072E68B7A9F692917F2BEA0CB8C28BA9573 +:105A700046D16D7254BD5AD64306FD25F5DA82DD56 +:105A800077ADEF9782F91F0ABA63A89F2DCA08C69F +:105A9000F67B9656DA07207FBAB481A0D20F7896AB +:105AA000EFB701EF96A3FE227EAD237D3D0BE59B74 +:105AB000EA2B2A7D1723BF34AC4F83FE073D2B5BB7 +:105AC0006DD0F5EA757769F8D193773D0DAD66181D +:105AD000F7AA51BF7D0EC7332BABF6CF50CEC19F77 +:105AE0002D51EBD81A550F46F56F3D8F3E5F17F5D8 +:105AF000FEAD51ED9BA2EA5BA2EACDC6F7E72F52BD +:105B0000482EE603FD1071E79393CF3C327EDA36E0 +:105B10008AEE297A1A5BD717919D25BEFE6647A3A8 +:105B2000D46F8AFEDE6A550A0BA23DD0CEA29FBA80 +:105B30007BF1A980D7136DBF78FBE4B87F3F8EF768 +:105B40008D6A5AAC4E2BF0E1A1189E1F147C9DFB70 +:105B5000EB941B0BEB38B4734408CFAD4E02DFA2BD +:105B60003FFDEC5D790E84637187CAF0FEE78A0E13 +:105B7000F59F56FA2E82CF5EA6CBB35BDAAA04312C +:105B80006FADE62D3E4ECD2E35849FA0E8C9AF6A9D +:105B900055E8BDA521ED5DBD5F4DA982D07FC91E31 +:105BA0002584F767976C31B6AF6833D6653E52BD32 +:105BB000FEFEB23B921718ED7F839F4AFE5766BEEA +:105BC000319FE8DBFAE19B982F3F9FE4312A3F5257 +:105BD000FA39E670EA6C8C5B3E9F4C79F1E00FDBA2 +:105BE0008A74F7C0649CFD5863009C1FC63E6EAC6F +:105BF000A552BE7F4269B70CC438F9FB8CEECD8F3D +:105C0000DBB5F3C7E35DD8BF8136DB1F1F1B45F152 +:105C1000D58FC19FE59BEFB5423F70B9BE6457BBBE +:105C20003A106A1FEF7E2F8EEE05F58E93531CE41B +:105C3000D363E6505FE7FB3DF9A9FF8EA57689C7E0 +:105C4000A337F37D83F437C78BF1DA1F49DE330EB8 +:105C5000F926CEE1C478F11271DE7F74874AE31C25 +:105C6000B1391E9A01E31CD93AAB1F7EC469B1D683 +:105C70006DC14453EF53E509784EF13EF40B53FCEC +:105C800023A4A29F34AE94511C7F5CD8CC5C6E3CA4 +:105C900072F3CF447E18BB9BE7E97D84F17A2E1F17 +:105CA00014AF5FFC0795FC5B09D7A4222130029F4B +:105CB0004DF95C2E3ED8FA388DF3E176CD89F07C33 +:105CC000BC5D233E5B067C89291F47307F11E65D62 +:105CD000B65FF5A269FE700797EB656D4A08F5D7C8 +:105CE0008A6B351FE51146F1F924D90FF8D5AAE3DF +:105CF000EF65BED0548A9F09FEB6C17F785F3C91A4 +:105D0000B56DC0BCC6E53BFE33BE8EE6E71F483E20 +:105D10002E6005179217770CF681C877F27952DB5F +:105D20008892812CA21FE43DF0260BA3FBDE415399 +:105D3000AC17E331F2BEB7BCDF7D93C9F927E4931A +:105D40009BC03E60DCEDC37C1EA7FAD2E49D827549 +:105D5000B06D3ECC039B19B4D2771CD449A686BE45 +:105D6000EE87FD349FEBC5ACEF312A1FCBE7F94539 +:105D7000320F4A96C0D08350EECAE3923E774197E5 +:105D800007F33B2BF11E77F9F8A41BB2C0EE3F924C +:105D9000FF37DA4F948F4CFA5D26D47FFDCBFDBCE4 +:105DA0007E7152A106F535CADF2B2743FF17F27D1E +:105DB0000FE4EBE691E3C2F3EDF8FC3717051EC6DE +:105DC000B2DE626FC638C109A57BA5498DF47F5547 +:105DD00061079F5422F52E8D0DF60EC53A23FC9DCA +:105DE000AD3C99EF6BCBEFE3F902FC040EE06B41A5 +:105DF00090E789C0CF6FEBC7F30190CF16C8BC9175 +:105E00006663DE08F3F2FC26990F24F37AF223F995 +:105E10004A5B2F245FE984C8B38ACE2353F6F07C13 +:105E2000ABA620EB8A213A18F33C56C4013F009EF2 +:105E300056FDEEED04FC84C65285EB0D96C6CF4DA3 +:105E4000E5F7D58ECD0CE7A21C7FD0C852B2810FEA +:105E500097A881D7111F1DEE3F0F467DF5C1D6A62D +:105E600004D427C77FA37A6740FF3A71AEC04EAB18 +:105E7000F41D8D0E773E7D8FE0D8CE8DE9780FFA38 +:105E80006DC137C7DCE27B3EA7F70DFE01F42BCDD9 +:105E90009C5688FA17F4F53B7DEAEBED57107CD35E +:105EA000ECA09F617D0F0F52C4776058309EC74BA6 +:105EB00019E62B6950AA0511FD8AED09946BBF30D4 +:105EC0004DC461294F4DD249E2BF175D4084F03B7C +:105ED00074261BD3709DF96CAB13E556D2678A6AA2 +:105EE000F786418FAC02FB8B6A76958817AEDAA9EC +:105EF000D0F7B2567468642F3F10F217AD878EB397 +:105F00006ECA57AEDDBA90E7B30BBD8369D2C8271E +:105F1000339DE6FF8ABE89F99ED03723D8880BB41B +:105F20009BCEEFF54187296AB50BBFA3B32AD553A2 +:105F300060E5E736C42F4BC4FD7A499755FF93457A +:105F400079AA2CFC10ED53970898D8569ED7B2C169 +:105F5000AD529E7DD9EE81CC058F96EE56E8DEDB04 +:105F60008CDDC9544F383580EA650FF79FC8BFE311 +:105F7000C4E959F6701ED53F7CE8C551E27B453C2B +:105F8000DFC5C964BE0BD1E1E41C9E1F6F0EE6DFC6 +:105F90005B8C7E5887C6422EEA4FF9457E018E5FA4 +:105FA000E413F95974DEB3CB81E3F8C16F42FE65A7 +:105FB0003E1E4F77893C226B9A89B97478BE02FDE8 +:105FC0002AA0478C2B96B974F7E55E1779454D42A8 +:105FD000FFB2A0AF13E3C773041FC479920CFDE7AF +:105FE000D86B881FE2BD1719C667011ECFECE10F01 +:105FF0007C96C2F39370FC2BE618F3A8B4E24F280A +:106000002FC7DF93FFDD40FCAF151BE3A2FEF4A911 +:106010001F32BEFE43E7E2A30AE423FCDE5C3ECB74 +:10602000E7F1BC5E78277938B99FCB037803F7E2B4 +:10603000772FAE14783FC9B87C9CF4C5917CAC171F +:10604000F890FCE6CF63F1F8C917479111AF893E8C +:10605000233E934B8DF84AF51BF1D47F4EA6A17DCC +:1060600040E07B86F681B50586FAA0867186FE192A +:10607000AB271AEAEEE06586FE59CD15867A4ECB3F +:10608000D586FE795B1618DAF343CB0CED4376AC7C +:1060900032D487B5DD62E87FF1EEB586F611E1DB3B +:1060A0000DED233BEE36D40B3B7F6EE83FE6C0366A +:1060B00043FBD8AE5F19DAC71F79CC50BFA4FB8F62 +:1060C00086FE134E3D63A897B0170DFD27D95E33AA +:1060D000D4A738DF34F4FF7EDA7B86F669AE8F0C06 +:1060E000EDD33D9F1AEA65DEAF0DFD6F1E1478E01B +:1060F0007B605FE69836FD4F98219FBBEE44F99D8B +:106100009D62E6DFDDB8C0F8FD2FA5FE137CFB39EC +:10611000B3CF33659EFD7DC98FAD68E70B91AF6747 +:10612000308CD79F6C5388AFCF666F1DE0C79A75D0 +:10613000EB48F4D99859074772A9D3504FF5A719DE +:10614000FAF79FE332B40F08780CED036BBD86FAC3 +:10615000A0862243FF8CD53E43DD1D2C35F4CF6A4B +:10616000F61BEA392D730CFDF3B6040CEDF9A15AB8 +:1061700043FB901D0D86FAB0B6D586FE17EF0E1ABA +:10618000DA47849B0DED233B5A0CF5C2CE2D86FEDB +:10619000630E840CED63BB7618DAC71F6933D42F06 +:1061A000E9DE6DE83FE154D8502F61CF1BFA4FB2C2 +:1061B000BD6AA84F71BE61E8FFFDB47F1ADAA7B9C6 +:1061C0003E34B4D77DE4A57C5FF6A442F928D33DE4 +:1061D0009F18DAC16FF6A05D5CC162BDE83747FB6E +:1061E000DDD21F2BF37E6598E7265303C5576F5208 +:1061F000B99FE61CC2F34BC01FB7D9B89EE5E7E0D4 +:10620000A58CBE47E7C03CEC241E3FE4F9E52964B9 +:106210005FC944BA309E09FE4C02FA2D2EB7139A7C +:106220009CA53C3F3F2EE25FA69FD17D2FE27CFEE6 +:10623000E560D4F92007338604928714E2FE6AE70A +:1062400054DC772C65C10DE8FF4E51873ABAC00E79 +:10625000BF1CD3F779CE341BE05137DFF3312DE982 +:1062600005E790DF69B663D4BF675CF13D0C05D6E6 +:10627000A93FF7F809EC87CCB0256C69043903799C +:10628000BDBBD149F5D6C634AAFFB4D145E5964683 +:106290000F953F6FF452FBD6C622AADFDFE8A37A40 +:1062A000A8B194CA6D8D7E7ABEBD710ED51F82FDD8 +:1062B0003E963B60BF8FE5AF603F8FED8FC23E1EC5 +:1062C000EBBF690C52D9D6D84CCF1F6B6CA1FAAE7C +:1062D000C62D547FA23144E5EEC61D54FEB1B18DEA +:1062E000DAF734EEA6FADEC630D5C38D1D547FA68C +:1062F000B193EACF361EA0FA738D5D5476341EA199 +:10630000F285C66E6A7FA9F114D58F8973BBCB86DF +:1063100028E25CD34EDFDFF34FCCA37D9B7CFE688D +:1063200056E032A49BFCCE83FC9E43F47E209A0E62 +:1063300047C5F8DA44FEBD06EDA2DC6D781F32F2E7 +:10634000BD05D736CCE3B862083F4FEAF97E83F04B +:10635000AF97087E94DF7390E7E54B841C14223FCF +:106360007A881F5FBA90FD8EDCEF1E770716133F09 +:106370000E3205699F6FE7F9A6299981DA21D05E6F +:10638000636FB070F7D44BCFCBAC3CCED3FDBCEA3F +:10639000DDE63AFB7CF5E2DEF059DBF77E988EF61F +:1063A000A7F41B95EE81BCACC5CFC178C62D02DF2A +:1063B000B70C3119CAFB33FD37239C1FE4341CBED4 +:1063C000CF1DC96FBD1CB7C820EFE5CC4579D4B34C +:1063D00098EF4FF869BC2BC0D1C3FA6C16A4F21623 +:1063E00077602DAEE72AD820603D30CE4ADF8D2C75 +:1063F000B372B98886E37601C7ED627E593E99E9AA +:10640000BF1DC73994E37BE83AE8F209E63B17A2DF +:106410007DEDBE1FE1F8E2A94F0E2B5911FCCA78A1 +:10642000C28612712FE75A457CBFBA577E39B557DD +:10643000DFC0E3297361BF85F7BC64FEF8C9068D30 +:10644000F422E69F63BCF564C30D79087FB47EAC8B +:10645000C6EF6114601EBB8D8FF7563CE509C97B02 +:1064600004D5E081E3BEEEDD4C19AFE8B2A7727847 +:106470007C784FE19A3D56D28FC0173B709DCBC6BA +:10648000AA9487FCB229948BDF4DDB68E2F40FBE3F +:10649000C0F383CD4E3FBD57B3357104DD2F013EB0 +:1064A000C1F854F7101E7F927CB052DC4B97F40772 +:1064B000FEDA85F4FCF80F633CC807F57BC7D27D94 +:1064C000AD2693C83F16E3235CB80ED53194BE4F7A +:1064D0005686CE03F2DFD878BA4FDBAEB2D53BFB9F +:1064E000D097FF10F47B398D7FDFAE49C8A16C7F58 +:1064F0004DD0F335D1AFEC99E7E97B452B3B342FF9 +:10650000C685D9A8AEA1FAEF34F7F0EDEA17076413 +:10651000EBD651BFFB9FFC1C9C750DAD88E7E022BC +:106520005DE5777DE53C1AC631D0B8A4988FF5ECCF +:106530001B32114FDC2E48FE532DF18107ECFA750A +:10654000F4F0FF1B92FFD1EF9F6975396603E85D98 +:106550008042DCB704FED749DFC358C0BC542E626A +:106560007E2A97001B21BFFB837759F07C73196B40 +:10657000A3E72B8B160EC67A3DEB9E9C06E35DD1FE +:10658000BCE64F6900CAAC96BBA60C00B82B42F320 +:10659000FF8465F976E5309EE781FC1CC5F9BB9464 +:1065A00086F517E1B9C6A325EB07C2F399224E0180 +:1065B0007CE753D18E667BBB8240BF4377E5531C9B +:1065C000B85BE8B527337DDDC84FD56B399FC9FB74 +:1065D000D03DF253B4FC9D8178E665EEA6EF32D64D +:1065E000EFB526211F2EC31DA6AAF713A5BDE67E73 +:1065F000C272F013B01F7E6F8EBEDBF8760CDD37F3 +:106600003FAA00210A7ACB87F43B6F52795CED4BAD +:10661000132C49C57DF466C24BAD2D341CF10276B6 +:106620003A6628EAC5F7DA368CC078DEC4D060F462 +:106630005FB55F59BD4D6E83DEA7EF1DC938DD4FD5 +:10664000341E378B86371A0EAB8505F17E8F52F4D8 +:10665000DC57E867809EE0FAE12087FF2635903618 +:106660005AE5FE0BC5FFD2FD142F60FD6C5EFE7D6A +:1066700046E3FCEBC4BC1DFFE6F16779DF2A1A0E86 +:10668000C5C9E7EB054F2C8747DA9FDEF0703A4823 +:10669000780A8672FDC106FB68DD6B4C6BD257A190 +:1066A0003D1B175380473A33CD81114381DEAFC67E +:1066B000F0F8988C87C97D2E3BDD94CECF93C286AF +:1066C000EFFAB0A8B892DFE6D4901E33A5FC1469A7 +:1066D00006F9E9893B151BE34E15CC4B76219FBD8E +:1066E00025F144F1A6FF03A9D1552F006200000057 +:1066F00000000000000000001F8B080000000000E8 +:10670000000B8BE36060F8518FC033D0F8E8F81FBE +:106710009A7C1E0B7EF5847026507F0A10C7037189 +:10672000141087027100107B03B11B1017B301ED29 +:1067300000E24C204E01E278208E02E250200E60F2 +:106740004398E3C8CEC0E0C18EDFAE356C9862BF1F +:10675000B810EC004ECAFC328A873E16E46360E053 +:10676000E147F0A7F1A3CA0BF121D825C294D9D5EE +:106770000CD40F00B3EF4DB0800300000000000008 +:106780001F8B080000000000000BDD7D0B7C55C551 +:1067900099F89CC73DF7919BE4E4C9CD0338090102 +:1067A0008206BC845750D423044CDBB45EAC0F7417 +:1067B000ADBDBC94A7448A95EEFA6F0EE4610CA8B7 +:1067C00051B18D887A4144DA85365054B68BEE4506 +:1067D0006D8BD6DDC62E2A5A5DA3765B6B95A6BA65 +:1067E00014DABAF5FF7DDFCC24F79CDC3CAADDFF90 +:1067F000EFF75F291DE69C3933F33DE67BCD377318 +:10680000FD0195A91732F609FE07659EC6182BE80B +:106810002F1FFE86B6A8AB0AFECD228CCD646C6C11 +:1068200010FE6931F6CCED7B7E33713A63BB9ACBB7 +:10683000553FD44B9842ED77B67DF8FCD9F9F0DCA2 +:106840006151FC6AF3ED85C53DF0FDCE32BBD80C3D +:10685000E313A6B242C6CA02BC1FC61C86F5B18CA1 +:10686000D777355F9ACDA0DDD88ED6DF6B59FDF393 +:1068700092E5784765C900F5C33E61F89DFE5F3D2E +:1068800095A25EC6184DB500FFAF94F72BDA3EFB1C +:10689000C6A334DFDD6D2AF35B03E7B1ABC33D6F05 +:1068A000390F9C9F3DB37F7E7FED7C083E98CF548F +:1068B000D6A3B27158B55F8C407FD3457F4C7F49DA +:1068C0008D6532B6A531715E858FB1A64687CAB691 +:1068D000C6362A6F6FECA0B2A5B193CA2D7A5700C5 +:1068E000F1A887A15DCAB8410BDA57F6D7B3A677EE +:1068F000B8DEB3E468A29F26E035F23B5DEDC355F8 +:1069000009577D7DE6DC00C2DFD6C8983D11C70F70 +:106910005039D554DFF24F61ACD5178DC400D9D3AF +:10692000C3D7D533A81B59B1137EC05F73A6616D61 +:1069300006B8A7980B7EC3807ECF172D08F4201EC3 +:10694000BBF5B77B60EC4AF8F34939B4D34FE42286 +:106950001C53197FDE8F2FC6F2619E73F83F01AE84 +:1069600094F7F0774E95EAE0F853F0BB143CCF096A +:106970001B8B5578EE1B63D3BCD8A194F730DE1C7B +:10698000F38AD50ACC87F5BA9F4BFA241B4D66FBD8 +:1069900019BBAFB192E0DC0F750BCAFBFE5BF23F97 +:1069A000E79750907FBB7E920A1365EC9E67AD5DC2 +:1069B000C8FA77E3FFCD606CBB8FD173E79F58E2D5 +:1069C0001182A7F7C452A86F5B5858DD0E789F5A02 +:1069D000CFF1B74DE9788BDA7DD1B0B0DD7EBDFB6C +:1069E00052AC6F8BE5AA0E7435A59EE36F724C75A1 +:1069F000464D19C837F0FCAD8988DFE5DFBA8AE675 +:106A00005169587EE867F2994266E541BB4A4E17E4 +:106A1000A6DFF45B3F7C34B9D6B0DACBFAE960C3C9 +:106A20001F84FF1E7DE3470A7C3FF92B8685E30E1A +:106A3000478F8B98CF4D0F989F3F2B0D3D6A393D67 +:106A400006D0E11AA0C394C1E9E02DEF684CB077FD +:106A500000A75B1B23449FA6468BE8D38E74827AE3 +:106A600007369D3D705D6E51D90AA4DB96105B71AF +:106A700010E96757A76D274BC63611FDB622FD8A70 +:106A8000695A36AB612C13FEB273A99E0C55C0F83F +:106A9000A9EF41C46C51FAEA0E03BCE8FDED9D0C70 +:106AA00068BF35C8DFFF07DB613B73FAEB279D6DDD +:106AB000AEBA7CDFE4B31D6D2A6347D8B57655D0F6 +:106AC000D5BF8DFDA7CE2F90A6BF2651573675D8BE +:106AD0000ECCAF5D894718C8F256251141C9F60C96 +:106AE0007C575B83FD42DD646CCFDD8B9D6767F770 +:106AF0008FF30B67B1E3C0BA5CCC623F42FCCF8A34 +:106B0000F64680F361DCE82296C3D84FF17B184744 +:106B10009FCEE1FC29DB6237E9FD7879D969717094 +:106B20005C29D735C137DA56C3D1A6A03E78D9D172 +:106B300080DFB451CCF41314B98C15C1E2CAB71973 +:106B4000EA09490FCDD47FD593228FFAF842B41FBA +:106B50009C8EBC1DCCFF0D9A7FB8771103FEFA11F5 +:106B6000BE02FACEADAEF9D91C18DFE8F645717C4D +:106B700003E905B064561A095CC261C433B04AF82F +:106B8000638D9D0B433D898B0DFAC98C16B344EA86 +:106B90007CF47804E5B6EC17C6FB6D2ABEA0FEC1F6 +:106BA00050E3FBC4F8DEF17C355087F799113E1FA6 +:106BB000EFB84DC1D8A2187C3437ABE6129CB7AF02 +:106BC0007BBC8AEB1EF05CC7E0FBA8C2E590E699AF +:106BD000BFEC571770EA6177BFB23FC00BC3FE0C22 +:106BE0004F7B4DCCD3DBAFB71FC6002F9387A2FFDF +:106BF000024EFFB33DF4AF1C21FDFF87FAFD48E7CD +:106C00007CB061929170CA44FFB903E195F079E1DB +:106C1000DEF0AF4B89EE61F19DA4E71FC477727C73 +:106C20002F3D473AAEFC7EE0B80FA71DD73BDF01F2 +:106C3000FC3BC27594776612B3A731360EE503C8E4 +:106C400089CDAB42A4DFDA6B5902F9A4FDD8FC6C04 +:106C500034BAEE5113C790AF9D9FFBD82330F43D5B +:106C600052EE6E9D4EDF6DCF4A442E0D0F2E77EF04 +:106C7000013BC341B9AEB0455D61D4BF8C25A09E38 +:106C80007784EBBFFD8772838BE179BB8F913E8662 +:106C9000E76F8D42FDF8583E7F1EE4CFF3B13D3CD7 +:106CA000FFDE61D13E93F7978FEDD16EF827DE3E80 +:106CB000BF5E654E8A1EF3CE2BC748C46369E6DB10 +:106CC000A2A8849727501FA17D80FA08182E276458 +:106CD0002E46BC842E30AC5D80ABBBE65F57BC0457 +:106CE000BE7F7A7EA1F236940F2ADC3EDE8FFA6CEC +:106CF0007CCA38874C0589F784AF5BCD02B9FF0D9C +:106D000085D90D40A79C9E8EAB503EB76D3AC2FC14 +:106D1000809FE25A5EAFC97A96FD84EA8CE4ED6EFC +:106D2000E55592BFB302BD2710FFB360FD3601FEEB +:106D300067E90D5A0332C5D6FCB474DEF3466051E0 +:106D400002DECFEA6CEDFE32EA6396203AC8F735F0 +:106D5000AF03BFA4E0E70901E77D02EE95C80F2964 +:106D6000EB3124D663A86F3D165EA4233EDE61247A +:106D7000E7F6DCF7F526C44FCEEB2CAA2903E71380 +:106D8000AA85759932DE2CDD0DCFDF0A8EC5CC7E4B +:106D9000482918BCBF817A24FE28B69F85F20F9639 +:106DA0004C4EADA3C5AB8682FBBAED2B11EE8B0129 +:106DB0006E6BF0FEBDF0DE23F009E33D966EBCFF86 +:106DC000297C807E3A3167FA67EF37E7758F7C1947 +:106DD000217EC9829B816552477DDA5FB719AF3B3F +:106DE00003EDC254F99F0F7EE2142C430EFA8B5A26 +:106DF000BE1BAFF23BC36071940FC87B382FFA0FF4 +:106E0000F59B157D18640EFBB562707D1609503F29 +:106E10006FAAF15F139FD4331DFD2649671FCC0F66 +:106E200097B2515C994D7C10CE4F6B57B635762E8C +:106E3000D47D29751F9743126F46394BE4A13FF269 +:106E4000F152EBD2C983F7E3C557932F7A220EF4A0 +:106E5000720A8CE8236C707814D5A071F47CCE97FC +:106E6000008FA2CE18084FD08CA167C39A32270C8E +:106E7000094FB380C74BF76609D708E73FD8FB66D1 +:106E80009F1D598CFA23333D5C3E840BF4CD6895ED +:106E9000D3C91736884EBEFC0E160F137CA3D5340B +:106EA000F4622CC650FF79E1D3CD00E1458EAF07E7 +:106EB0001E5CA8E7F5CFF32CD5E4E3F4CD234AFD1F +:106EC0006826A3EFB2D4F859884FE0BF6EE2BFB096 +:106ED000CDB07F23021D9C83A5BDC801FE6D3E3A47 +:106EE0009B55E177E1285B03A5118EB37A68D72C17 +:106EF000FDCAFCE9AE75325E555D78F2E2AD48E858 +:106F00006159DFDEC7576EFA6F5F6950BDB920FA6D +:106F100030E2729EE0072F7E006FF3D4147AEA26E7 +:106F2000C7E7F695025FCBD2AFE3A2C0FD2E7C95FA +:106F3000D55B4F2BBC4B1BD727BDB280EF199FEF02 +:106F40003D91773B17E3FA517BDB3641C3A2B60E86 +:106F50003B00EF2704E35F4E1D3FAFBE81F028F9F1 +:106F60006ABE160EBE0DF50EBB3C1BF5E937542567 +:106F70002D1FDD0FF6823E1EFDC400433E3DFDC6C3 +:106F8000449AFF60FCD6DE1858A8A7E8E1F6357AE7 +:106F90001DCAB7F6CA832F2E00905BF22BAA49C6F2 +:106FA000D4283AC97985C3B35A8C7FFFDA569A2719 +:106FB000E06F35CE5FF2A1E4B772DBB631BE5106A9 +:106FC000E840FF3AA78D459302E77A0A7EF2E6F0A1 +:106FD0007806E06103F653649A73D1240CD6362404 +:106FE000B19478E8B079BC61FDFC09BB52F5E7E3E8 +:106FF000825F98C5ED39A647C92F196CFDDD0D7864 +:10700000AA1A8FF50E05DB15D5B104AEA316F17CD7 +:10701000861A6BA6792C4B2808DF7D0A73C5FF9A68 +:10702000050C777F9EDB81CD65E64E0DD6E59D7222 +:107030001E71C5CB5F7792DC117891FC955F177557 +:107040006869C56C1BCB5623BE0DD76F40E9315123 +:10705000B8172D8B53BB16610FC2F4BBB1DF7C4157 +:1070600007C9EFB9116B17F2FB6E4197FC9AD61B5B +:10707000558027CFD2292E91DFB3B81EE328C6EB67 +:107080009FA3780A3CA7F84B51AC8391CB1BB18FDF +:10709000229E371AF1DD38CFDCD91B884C79CC76AB +:1070A0000CB4E37C3633017E7D4E838D71A5FBD716 +:1070B000CE648B53F8EA310137C8053B11EEA7EFD8 +:1070C0003D4241DD39A73A787D15B60BD1FA2B67E1 +:1070D000D36DECAF0CD901D72BF2055F0787707C1D +:1070E0007F7DC75184AFCCE4F303BE1F8574B8CB5A +:1070F0006716213FDDB5D65894A8227C1C47BE0CEC +:10710000AA021F16FC01FC18A2FE4DD5C7E517F810 +:107110006CE85F98A52C61911F676F52805E7EC4FA +:1071200007CAADE989B672789F53CFA236F29DC0E7 +:107130009F560AADA1AFA0C01FE0E718F1454583F7 +:107140008DF8D2C31D0CCB76BDE1CDFF83FEC031DF +:107150002DEA58297CC8A2E477483C6554C27A4B92 +:10716000E7CF5923F343A43DA087B93E93FA01F832 +:10717000F535E41BDDE4FC3A523D646CD4AC5FE2CF +:1071800022D44D8AEBE9C266683597384897534850 +:107190004BF4C73AA62629E81661A49770222AC69E +:1071A0000F4C3BD14E022FC1E3AA82258395EE7886 +:1071B000B0CF0AB9EA6C11B03D8C779378666C3425 +:1071C000681E3AE8071EBC96768FC192802F1CE29B +:1071D000138C1BB37FA071E4777A9825835928AF6D +:1071E000AA699DF4C96FFC0EDAA08DC2E377EEEFB9 +:1071F00006C78B67BCCBDCF31CF17761DDFA95FC2D +:10720000A67CA8EF74F62BC90F80BC1C44E08C7ED2 +:10721000FADCEA638715D0A34DA5DF72909F6FC596 +:107220005740D756C6E9CE6A55979CD14AD5B7FC88 +:1072300064B7599C5F22B9D43EC0AE48D2FA10F56B +:10724000E1F822C3A35FDF50E213B5147D63141F7E +:107250008BA4E25BDA95ACEA32FA6EEBD4AF27513D +:10726000DE1BE5E654E209C15F5B3D78044F81E037 +:10727000BD4DF8834684EBBD6005977B018BCB4900 +:107280007FA923EC0AFEBE8F6FABB85E6E8DF27DD8 +:107290000A239064281FC2203E3417BFC6D965C098 +:1072A0004F41C6F9721B949C2F1234BE1FF93365EF +:1072B0005D4A7E94FD0FBF2E851E79DD4FEB32BFF8 +:1072C0007F5D7E11F1D6A747A49D12BB8CD3EF78CA +:1072D00025E1E511B11F31B07F8E9FD3D07737E222 +:1072E000578F87707DECD9B62484F0EEE9BC343B2F +:1072F000950EDEF23ED06749703C77823D80E5FD19 +:107300008D26957DF602DA5FF0FD0EA1DFE4F32312 +:107310009A4AE3366B5C9FEC09C442B46FF5CC55D6 +:107320009F9F0428A938AE4531C45A725757CE5092 +:10733000E397AE515D7865DA3543CE77E3EB450BE5 +:107340009F4D697F939699FFAB0C868EE02C5C1F56 +:10735000C37D7FBA31B2F059DF67C7CB0E11073E4C +:10736000D274709383784F5E48F2A35CACB322343E +:10737000E880BF2A36707DC23EFE84BFEFDBCFB30C +:10738000C38BA14E2606D4F7B42D6947793AFA2566 +:107390008DA9C077E3519FA0FFB88DEF3304E00FB4 +:1073A000CA090A6943BFE396B14412DA8DEB70EF64 +:1073B000FB14B1ADB41F38DAB3CF5024F458916741 +:1073C000DFA21494534DF567A7C31EA4C3D9FFEFE2 +:1073D000E970BFDE153453BE2F51580CF9B564ED7A +:1073E0002F952529FCFACF824FD9C6307B2745EE51 +:1073F000EE50BA725029ED5CA3D671BBA4EBB9096B +:10740000E447F55CD00EB5CEC55FFFDD9368E716A7 +:10741000BC7B8106743AA66570F95BC7F4D4B88664 +:107420001C07ECB863B89EA59DBBB3F9522AEFFFC9 +:10743000F86B477D40B7F11B587433D19F1DC77D52 +:107440002A4BD0DF12F4AEDDC6E95BBE95C70D99BD +:10745000E3A67FF9324731B09F8D2C8ADF8E5BC166 +:10746000C8BEABB88625D0401CBD3185EEF0B762F2 +:107470009B9B3F4609FB6E94873F2CE0833CE08357 +:107480008A8E783B8E5F745CE3B68367FCF156D7D7 +:10749000E7683CE09704E9F5947ED01E05F0901E65 +:1074A0005EBE1C857C3965E0B89F95EF4E79F8EE9D +:1074B000149B73F55E40CCF6D68F9F9F40AD626AF9 +:1074C000AA9D2FF94E67F69F914E2C36323B68C429 +:1074D000ED92A52AEDFF0BD82F5A1F08E1BEEE0E44 +:1074E000833D3F11FDF6973586FA66C7FA5071AABB +:1074F000DF9510723F11E46591CEF97594CEEDD30E +:10750000129DEF57ECC8E2FB7503C7DF2CEC021E9F +:10751000179A78060C9FBCD4BAE1A9EB2C392DB58B +:107520009E25EA1C8EE602EEBF3F2C4A394E4B6682 +:1075300007D9F9C001A497E43EF933390B02B87FAB +:10754000D01CAECEE6F699A5A6EEA33787CB47B101 +:1075500014BA368BFDE3C1F0D982FB92E8D7607C88 +:107560001CCA877D762407FBCF5940F18F8733C132 +:107570006E807E67EA5C0F69158CF6D9CED77336BC +:107580006FAE40FD6DCFD267F0EF901F357366F19F +:10759000628BDAD98934F82BD743C2CED6FFD49385 +:1075A000221FC0523089BF047FB3F0C8ECA3317AE8 +:1075B000FCF33A94CE5C46768E53CE124DB89E1BA9 +:1075C00062AE781DB4BB44B47394E929EDE2DC0FDC +:1075D0004C6977996867BBDAC506B4BB0AE1867661 +:1075E000CC35AE3D60DC6BE5FC586A7FD101FD2DEA +:1075F00015FD91BDDFD7CE1AD0DF0A393F573B7357 +:1076000040BBB5A21D738DCBDCE3F6BD1F63C8F78D +:10761000E427B5145C1120FFE5DDD12EFEF3D2E1A5 +:10762000E902CE8FCF162CA8437EF9DA733E86F19D +:10763000F5A3056E3E95ED9B1A59CD9A94384753A4 +:1076400078178D93E6B999FEF99241DA2F11ED651D +:10765000BE4A80F60706E39F36B11FDF26F6850691 +:10766000E84D21179A2AB9BEF2BE577D5C4E303DD7 +:1076700046F10DA3D239AF2ACDFECDFF2FF07E24E7 +:10768000E45E536575C7DC28A6495CBD3900FCD0B3 +:107690001C99DB7111D45F61576FAE2DFBDF0BEFCF +:1076A000CFF5952E78FF99ADFC5F0D6FAFBED1057C +:1076B000EF436CE390F0CAB897B7DF3FEBAAF08FC7 +:1076C0006311D4572D055F8FE0BC5B44FE454E4BE4 +:1076D000CDE64DF0DD6416FF0BCAB75BA16D37DA5E +:1076E0007FBA457A6AB8EFB4497A0CD75F7304D68B +:1076F000610A5CDF12FA4896DFD62DBE5F52A4F312 +:10770000A4A40223315EC083FB198FE93C7E2EE1E5 +:10771000FB774FFDF79E3AFCE34F683F9908FFB8AF +:1077200034FA49C8CF6D458CE2FE0F17B9F5776B77 +:1077300066839AAABFF3042E9F59B8208872F199E4 +:10774000DB173C5701F36C7E4113F97F116AE71395 +:1077500072F6E8ED0BEACA30FFEA052E4FBD7A1E3D +:10776000E3CBC80F2D22EF48DA43729CE6F0DCE74A +:107770002A303E0B7E0ED90D0513B271DC56A1EFF7 +:107780005B85BEF7D2F3291F977B7742FF961FF3E5 +:107790000003547E1BEAF189DC3F88437D2FF80704 +:1077A00058FE5363849EFF4BA345F5DB603E58FFB4 +:1077B0006E6394EA7737D65079AFF02F1E42FF02FE +:1077C000DE8F9AA3527C7277239B8D71EFDB1B03B4 +:1077D00054B6349AB3D114FBC7C608D51F68B4A8F1 +:1077E000DED45849F5271BA3547FACB186CA5AE5AD +:1077F000D2CFF9C8EF6F38EA0378B73F555E8DFEF8 +:1078000044D91C9DC73F75736E607AFF730967ADDD +:1078100032F74BF85DA5AD929DC2028E1A4ADFEE9B +:10782000CBD86EB6ADF376E18E7959F969DB2DF2DE +:10783000011F5E5825FA337B9FC94EDFDF57B05DCD +:10784000B04AF497DF41F1BB34ED9660BBB3A2A21E +:10785000BF486273287DBBEBB15D6E54C05B6A6D3F +:10786000D2D38FBB06E128C96D581C23FFCBB908C2 +:10787000FDA4FC98998BED4AF21A6EE4CFADCDF8D9 +:107880003C7B0E7F5E8AED898F3B9EC67C4AD31679 +:10789000CFB13D3D4F6888DF9C5AD18FC1FBBF639C +:1078A00021B72BF2EACD5D0160A96651CF8F593B1C +:1078B000B15EE2E7E3655DD0CB944CDC77882A0AC1 +:1078C000C6B5A1AE423D7F8EADA8502F35F8F877F2 +:1078D000CC658A02EB38CF8676280FA0AE423DDF1A +:1078E0008676502FF5F3F9645D6C52BB2D222F4044 +:1078F000BF384AFBFE39F596824BE33691AF975F6E +:10790000CBFB1F5F6F3F8D4BFF6C83D997C33AD979 +:10791000722323FB765BCBCFE662DE58663DAF3F3A +:10792000DD523A6F13D8BB25C52C4EF672C1E34524 +:1079300018772F29610D58F7151E9E84F5D2621E07 +:107940007F6B297CBE08F33A4AF13DD4C19B754C4C +:10795000F0FB7CA35E98B47808BFAB4F5EBF308F5E +:10796000E2ECE8B7D943E48584ABDCFBDC6362DDA1 +:107970008A0FE4F91F7D1C9EDB6EE4F2F47B2DBFC1 +:107980002078B41887A7C717E4F08CE1F37DF29450 +:1079900080672C9FEFF97F10F08CE1F03EF9070132 +:1079A000CF580E6F10E10113FDFCD31C9E8F747B2A +:1079B000949946EF78E71FAA70EFF783DF5084DFD2 +:1079C0003DBCF00AB61CE6EBDBC1E777B1713BF9D1 +:1079D00017CD9399AE644329FCB58C006B433C22D0 +:1079E0007E70FFED2121AF245D4AF6194EDE94C171 +:1079F000F12AE955B22FF016B693F42ADD1772F288 +:107A0000D2E477F7C121E858BA2FFC566AFF5EF836 +:107A100006D223CA901EB946AF7A2FC0375AE09FCC +:107A2000391FCFBD481F489F6DE339BCDB44FE5072 +:107A300010E1CDE5F8CD0D635E8E8057D0ADE4F852 +:107A400030F00A7A961C17F00A7A961E1F065E41DD +:107A5000E7D2E36E789FF2713D3B1C5D9B041C4DA9 +:107A6000223F2AA80F03C71963C8F9F4C17106E0C1 +:107A7000C84A81E34C6848F8FBE038137E2BB5FF19 +:107A800091C2710FC2710E9499028EB0E0BFC1E035 +:107A90003831427A9CF0D0E3C408E971E2D3D1A333 +:107AA000653287A345D02343E770C87EBCEBA8B5F9 +:107AB000C82DDF8C62B77C6B2DE6F2E02139BE5811 +:107AC0001F460997077DEB56E02D23CCE93FD87878 +:107AD000FB0EB8C7AB3AE81E6FDFC1F4E355FD807B +:107AE0008FF7B78A2714FAE29719DC0F4F6AA97E3D +:107AF0007343DCE55F43BBAB0C114FD052FDF07814 +:107B0000DCE55F43BB6B457FB6AB5D6C40BBA5A2BC +:107B10003FE61AD71E30EE0A393F35B5BFE880FE82 +:107B2000D68A768E9ADA9F35A0BFF5625CDBD5CE19 +:107B30001CD0EE66393FD7B8CC3D2E63378E687FB8 +:107B40002F7F99E1DA87CCAD77D7FD15EEBADC4708 +:107B5000A47A59FF78B2BF6C9917138F5938EFD6B2 +:107B6000CCF809CC2FBFB775C1BC7CDC97CAE172D9 +:107B7000F65EE38B4D984FAEB3F563130087BF46B7 +:107B8000E7F1D5393CEE88AC8278085A3AC5FD5BFE +:107B90007C7612F72E831551914F21E014ED65BCD0 +:107BA00064307ED2237C7F588FB475F352A77D4119 +:107BB0007699E28A6BBFA9C677217E030C14C4B8FC +:107BC000FEBC0439CE707C3BE27660F2A27D783355 +:107BD0000B4571BFB85C8B1F403ED958BB91A10BC0 +:107BE00065D4367CB5D9C2EDBA060591618EE2F94D +:107BF0005D6C69208A79B4E6BC39B4DFD854E0F60C +:107C0000077B0DBE9E8F1A1A9566065FC7605717D1 +:107C10002D4CC18FDFAFC8F737227DFE62AC78A64E +:107C20002D02F56C3655013BECAE8E1BE6D501BD41 +:107C3000CC71E2FBD241BE1FC70E60FB8F5A973D4D +:107C4000A363FBB18CF4EA9F8CC626DC2732277233 +:107C5000F9C0A65B3B9B61FE9D5F299C8AE75DF2B4 +:107C6000BEB4B10CE5455F3F6773BEF8587C07ECC6 +:107C70006CA7E6F34D08C65F42FC14D57550FE8B29 +:107C80001696F940223F4CE4BD79F1FD9AC1FD6D95 +:107C9000BFBFDFAF6CCDC77D8E40B49DA51DE76D26 +:107CA000A4FF70E3CCD7AAB2DF4EC1FB6F0D77FE05 +:107CB0005193C83792F56FE7B00EF44FFBE611858C +:107CC000794CEF9FC7EF0D93C7B1C24E11AD63134F +:107CD000CACCFEF61DF3BEA920BD3FA7C64F1BB4FC +:107CE0008F1DD753E7EDAF8BD37E765FFFF95157EA +:107CF000FF7DCF23BCFFBE7A1DAF83994AFC6ECEB9 +:107D0000BB86E2207A2DCF77648BDC7961BAE9C833 +:107D1000FC263FE61F7BF39BEA343BE027FE2E3533 +:107D2000699F92B9FD7499AFB3A44674C8AC2B7F18 +:107D300001785D79CCC7881E1F43EB94BC89B7DFFF +:107D4000E179262BC53ECE3216CBC2971F30B50E39 +:107D5000F9F203F6F3AC6929F66E859FE701B236B6 +:107D60007E1EC9813FA8879677B8CF275DDFE9AE31 +:107D70005FC72E2DC4F578DD361FC9A1959E7D9B6A +:107D80007C3FA7CFF5ACA115E3EB527F2F31999E35 +:107D9000072A6DED130FCC443D79B69FC741DE1322 +:107DA0007EBB9CD7AA70C2B0E1FD3B87A65D711E69 +:107DB000C3EF13ADC528E77318AD672FDF2E6D73C2 +:107DC000CF6FB8F97BE72BF747069B87BE57B1D338 +:107DD000C55367FB1557BEC5C640D61406F6C3E9A2 +:107DE000202FFBE2D4FF1124BD7325064DB8DF3FE1 +:107DF0008BEB9F8673B01CEEBBBF1BE4BBF6FC4451 +:107E00000CF950E66B04030EC1A4E831E2B3F6C8E6 +:107E100030EF4BE1BD36C4FB8AA1BF07FEFBE41384 +:107E2000E03F8AF550BC89E72BB589B849932F7696 +:107E300009C6FB9B5ED21826AA35F91A484F39A30A +:107E4000998572C15FC1DFFB8F6BF96A9960E27C33 +:107E5000B4E3EA76639EEA12BF4FC4ABA3A4D7FD96 +:107E600061C7B6D1CEF3C569BFC7F826B7B32E0A2E +:107E7000830103DF6991453EDC17FDC9BEA58BB0C8 +:107E8000BE2AB2404712AD15FD7CF0DD033319CC9C +:107E9000AF757F264BA2DCD41306C6F9571DD22836 +:107EA0005EB1FAFB9934FEAA83D7EFA9877E9427A7 +:107EB000CEB77E45EBB589E05FF5F8977FE60878A9 +:107EC00030EFB26993C8EB73A2912F67E238ECAB45 +:107ED000181F90F04B3E09583C5EB26A6F0EE543A6 +:107EE000F6F1970EEDE17B3F9497A6F143EFF2F3A5 +:107EF00038E5FB993C5F4DD97BF45A9A5FD7953EA4 +:107F0000844B296D60FF89F810F0413B9BF8E63BFC +:107F10004A623CBC7FFF3B3B8DF2C938EE4E6309A1 +:107F2000D9459BA89D9C6760EF5D0EAEAB4085591F +:107F30008E249EF7FDFD59B81FB96EAF96C4FC3E66 +:107F40002829CF2F6879F661991D5680EE37904821 +:107F500082F2D05A923B37746DA1FC827587DDEBBB +:107F60000DF01A4DC2BC57BFA2453134B1FA078F8C +:107F70006659309FF7BA1FC942FCC3388B0DE07BAE +:107F80009FE9DE17C6FECFE40EEC0F3537F2D9BA03 +:107F9000AEDBF8789EF5FC1EFEA368E07EF0137E53 +:107FA0004F3EC8DEBC11D91FABF79F7AD081F1DEFE +:107FB0003FF8DB07311F79CD5F3E7AF01F001EF6D8 +:107FC00054D04479B4EEBBFFF9E0DF031E3F38EC38 +:107FD00057912F4E3EF9E89EED503FF9EAC46A05ED +:107FE000EADD426F9F3CF0C7420BFAD9F0E4FC5146 +:107FF00008F786C7E6B9F63DBDE549E0A3843F75BD +:108000003E09A29F7558C1CD72C68E88D2438F6734 +:108010000E692C08F3FBE0849FF204D6C1B38DD522 +:10802000489FB5944780F55B00AF37ECBB95F6DD14 +:1080300007E2D729512358264B3065F586435FBEAA +:10804000E4FCE958FA28AF601DEB25B9EEFD6EDDC2 +:1080500071A0E33983D3ED14582C9804B36EDF6D0F +:108060007C5C0FDD3EC07FCC1E48B7931EBA9D627C +:108070006B1EDA8E2F0FE5A5CDAF92FBF86B1FBB01 +:108080007CC87C81939E753A187E57887CB6237E87 +:10809000FB2FA8AFDF3FF88F7BB6E7237DFDD17ABA +:1080A000A4F7FE536318F0C5BBBEDE6B71FDF53E51 +:1080B000E937F1FCD2AA275F21FD71F2B1170D8BD0 +:1080C000E4360B2B60879C647DFF75A35D7283C2D1 +:1080D0002BEB766726FD59FD74BA21B1B0CECAA24A +:1080E000E7647FDF90E0FC7E43E2E8654A1ABACDA0 +:1080F0000894733D912820BCACDDFD0B439CBFEF81 +:10810000A3A75283747C6B013E1F8C8E127E13E1F9 +:108110009F9542CFDD7C9D0EB61E4FEEF493FF2C53 +:10812000E97B52E42DAC4B28AFB034EBB42F2FE1F8 +:10813000AFCCEB88063CEB58C03BDC3A1E1E8EBF32 +:10814000124FB8D80B06E26B539141FBDC5A9641B3 +:10815000EBAFD567BDE2205F3CE763BBE093A6AC25 +:1081600099CC4A935FDE8CF6474ADE831E8ED1FEA1 +:10817000BB9E6F56633E83F7DC88CF54610EFDF3E0 +:1081800031CF5763E9F21718DB4AF3FC96C8D3BB2B +:10819000738E5A844712CCDB0B294FC29C7BE6D8E6 +:1081A000388AD3E74EE5E370BAE84CD8D9224F6657 +:1081B000303BE75BA3D90E2CEF2D82F29C81F6CBEE +:1081C000C240FCFA00F5E3B65FBEA58876392CF113 +:1081D0008842F9C38110C8A97B95DE63E3F0F942B8 +:1081E00095EC3D78DE16CA4D693F9BB767B66D9931 +:1081F0003379DE2C4F968247B81F2557D759510740 +:10820000ED1B8335907D12C07C9671689F7751B9C4 +:1082100059AC97302C43AC67B31E733C7596A47869 +:108220004081E8B72010E6F6FD65FAFBA9E7ED838B +:108230006C07C56B305DFC9394731C4C9CAF1AEEBD +:108240007B1CAA0473CBC53D1BF972DEE85F148A60 +:10825000147082CB64086789783B0AAD2980AB181B +:10826000DC7C9CF768D643F5B138150D53AEE39B23 +:1082700018CFEB5010CF41F63AF917AAA32A9F9CCA +:10828000ED9967413F1D99F0B30DE1674B3ADFACC3 +:10829000DAAFC6A17EB3D670B8A78CFCEF9D48CFED +:1082A000D36A432F3E3FFDC6F516FA39DB849DBFE6 +:1082B0002DD3ED67EF0B703B5996DB72041D2F1722 +:1082C00074D463CAC294F5405303FFF6FB81B5B57D +:1082D000E4DFEA1C0EEF73399E6EC66CCC67F15773 +:1082E000F0BC1FF0537B94947316FF12E07614F8E1 +:1082F000AB8771DEFED20ECAA7D54DEEAFA27FDAF4 +:108300009366DDC812F7B1711FAFB5314EE54F71FD +:10831000CD613F66079DBB80F112C82FBAA0178CB4 +:10832000F3A3CF368EC9F839B106B27B67A8F19FA7 +:10833000517F16F8C553B05F9E0FAC89BC6919AF69 +:1083400096FDBC1AE0F6862C65DEB051BC62EF4E9D +:10835000C053C74511B1CE6314A7784DB4033C9305 +:108360007F7BAF22E26F4A40AC33669985FDEB4CD0 +:108370000BD8E474FA00702CFDC8471AF25982CA6F +:108380000C5C3FC0977FC6F505F3CE643DFD4E2AD9 +:108390008C9F1D3176A27DAF03C2B45C2A93584AEC +:1083A000BEC1E7BE5CBE6F9C05E5A9402E8F4B6148 +:1083B000BD1AFDE6586F00EA914A1EEF81096AB8BE +:1083C0005E0AC5FC0AE57A5BE45E6F7DFC99E3C654 +:1083D000D79F045FFE59F0098E8FF266F0F53D20BD +:1083E0001EA505D3C4A31083FCDC5C6B19D2CB3C67 +:1083F00087FD5EC59B719CF6DA172214EF3980F574 +:1084000026BDADB60EEC0B731AE7EF8CDBB6107F12 +:108410009BB3443CA9C61D4F2A0A72BF3927C8F92D +:1084200090CDE17189F2208F5300BF51FC2347D4D6 +:1084300099CDE3237DF55ADEBEAF5EC5DF7F8AB8F6 +:108440004679307D5C635C90E4FD20710D61AF5A2C +:108450007DF2CD1D7F95F9AEF3B530C90963039860 +:10846000C180E7B1A5FC3C9255BA99CED718829F3E +:1084700046AF640987BF277F457E3FD6315C7E4B80 +:10848000D013BF2DEECB874E69077C592CF2A18B00 +:10849000BDF15B61A7C87333C3D929F3839F2EFF56 +:1084A000FCE78AFD05C29F3887D394E3CED3F0DA88 +:1084B00035C3C50FBC7AB7E9A2A927F281EF0ACF6D +:1084C000DD578B714B4DEFC27031EBCCE4E7458E3D +:1084D0005E6E503C7F3B0BF03C63CFFA3FB3929F04 +:1084E000A37B309F25F84393EE77CA90F434ED4D8B +:1084F00068E74A79A8C47FFC47B4570DA4B3867ACD +:1085000038417C26F56E16EBA532B826CAF06A8093 +:10851000A737CECD413F34836D4DBBFE245F7CB881 +:1085200081E741EBECEC6CAC4736F0B878513C9607 +:108530009DC479387677A4908E20D17F3936DEC5F8 +:10854000D14F9FBCBA40DF9925AC17C44C57BD4CE6 +:108550009CDB1AB528E2FA8E35733B168F8BF17DC2 +:108560009B18E123B20670563630BF3E22E27145B9 +:10857000CB9224B74B1ADC7E6E44E43F473CDF7954 +:10858000F9E94EC94F600E203F011EA249C4C371D4 +:108590008DEE07D07BFC849762C00BE2E143C6F905 +:1085A00060F46246F76278F121F90DFE47FEF91892 +:1085B000E82709CFFD11379E82961B4F19956E3C17 +:1085C0006546DDF89178CBAEB15CED24DEE4FD5577 +:1085D00083E1A97445D72684E7D3E2E95050E47DCE +:1085E0000B3C9584811F18F27952512C3AEF4B7C49 +:1085F000FEA0E077246020C5DE9278F1F27DD10AFA +:10860000E0639417F9CCC2232EAC2A93E2CA1181FD +:108610004F65A3E4F3F4F6A697DF7506FC8E765C4F +:108620002046874332D04E237E7F87A5DA69BE403D +:10863000969381F77205B8BCD219D81D4AFF393E0E +:1086400090C3C7495E74BBF7677CF0BD92B2EF245C +:108650004B4D67161EB99476EE44D11EED69960215 +:10866000EF44D4A353507F713C29610E1FDB017A84 +:108670003565DF5217FB3F23859B99229E87FA358C +:1086800063E0FA1E8BF0029C63DBF8FD75D62DD6F5 +:108690005C3E9C7D1CF9778298DF04790EA6D37D21 +:1086A0000EA1C201BB18CF4374B8CF3B8CD9E0AE4A +:1086B000970A395F2AF400D38E2CA4738BB78019E4 +:1086C0005D86CFDDE761465B3C2F6BF45E068E0571 +:1086D000F0D52DFCBCDC980DCC5C96D26F493CCB20 +:1086E0005C96D77FDF8B973F0321B75EF8DAC2CB6A +:1086F000485E3D74CB87A174FA614F63C45C361E3B +:10870000F3E702546676269E0EC23CAC1D1C0FD6C3 +:1087100022A65AE17EBE7DA011E6E3A37C376AFF64 +:10872000F08D7B273D6A219DE29110DAC14EFC223B +:108730005447961353511EF974BB089FCBFB262652 +:108740006E2CA5F94FD838864AAFBE29F9EF27E835 +:108750007CF7D836350A9E221B7BC66FA33D453178 +:108760001980B7ACD952F17C4D5588DB55EF0563C4 +:1087700013421857714C95EC8415FCBCEA6078F3F1 +:108780008E27CF97DDBF869F2B6F36F35DE702778D +:10879000091AD9216E17C9F37DB29FD63679BECF9B +:1087A00052D18F2FEF28DB8C74F49EEF53198F7307 +:1087B0002E13E7FB5E0EC62F24BC9829E74FCBFB98 +:1087C000CFF795ACAD0821FE76611E1ECCABE4263A +:1087D000CE17931200578ADCC2ABBC6A00E4F2E603 +:1087E0009E8B42563F9CEF05E39F47BC9406C2E632 +:1087F000B26929F811E7C5C60A3EAFBC85F1733FDF +:108800001DA038CB10EFCE660C3D2C10F27F979058 +:10881000FF8081FAC529F27D57DCCEA573D2421EB6 +:108820004BF90B6251E82D4B457B60D22DEE755113 +:108830002EE46C8547CE960BF95CEE79EEA5E3A4A9 +:10884000849996AE124EEF7A581512F27A142BC212 +:10885000BCD5536CCEA8F9563F9FC873685E3BC920 +:108860001BB793FD4F4DBAC797FD0C171F52748766 +:10887000E236BE0833D1C6EB2C10FAC11367E8B359 +:1088800067EAF0EE0A64A34002E56CA43E4EE734CA +:1088900022752C6AE1FCDBF839FE76837FA7061C83 +:1088A000C5C8477DDA7D3EFA5FEDA1308DFBA61A83 +:1088B0006B473ECBABE7FB2A79422F0C25571DAD0A +:1088C0005FAE8E09C5EF413E92F2B52CC954232507 +:1088D0008E21E5BB94E75EF99DE195C323CC3BF186 +:1088E000EBF1E4126B207E60FA56EAB9AA5B470B03 +:1088F000FD51CAF5E7FD6B7471BFDFA2F936FC7359 +:10890000CBE5072205264D2769E2BD7A9F53E87D16 +:1089100077FB8D2D98F7B06521AFBF145ACDEB577B +:1089200029E427BD23DE03465C79C8A70BCA1D5C7A +:108930002FB75A3813284B873E47D88471E089FDFA +:10894000ED343D4AE780A57CF17BF242F4B07B3FF9 +:10895000445FC3EF9F9072475FC3F3255A4B0F9E4E +:1089600058329DCEC1D37DA846A081CE47F93B6E3B +:10897000A4733F5EF91310F26729CA1F85E4CFCFB5 +:10898000902F34D37DFE5DCA9FBDA8E8E1FDC4E908 +:108990000D747999DF6A502DE8FF65143233FAE3DC +:1089A0004B529EBF2CDA07F4188B427B5F5D03436A +:1089B000BDE1AF17F1933A7E6E30AFDEA2F33CBE5D +:1089C0000A467CEAE5E3B7906F6710DFBE159AD1DF +:1089D0007FBEFA9721E14FB2A8C2E3853C7E3126E3 +:1089E00014FB15C2511661E27E9391F125FD3753B8 +:1089F000C4F3CA100F361B2A9EE7B53306F0B599AB +:108A00003F2239708761E7CCC77DBE7FF345315E79 +:108A10003B9C7F25F5ADD4CF52EF4ABD7D5646999C +:108A200088A34A3FACEB39D463A7ABD5DCD47CE751 +:108A3000ADCB581DBF2784F3B35FF8CEA7472F09EE +:108A40001980F249191AF523CFC54AFE0C0D72CED2 +:108A500049F2B56C2FF9DADB6EC4FC5CB984D6D56B +:108A6000A91D9C1E133B6E243BC4CBC7B25F75206F +:108A70003F4FCA18429F7E23649F9501F0DD511D30 +:108A80005D91EEDEB8E230D7EFF7AFD916443EBFC6 +:108A90000FF195B2FE431962FD4F5A4FF8BA44E008 +:108AA000EBD11D6E7C4586C1976CFF99F11517F8C7 +:108AB0008A727C0D76AFC010F8BA64287CB5C77690 +:108AC000B595639E4D5C8D8EB7F0DE5B357921D414 +:108AD000EF5BA1EE43FBB53D3637381EEA7BA24F74 +:108AE0001F51E0FD827026E71F33790CDB3915AA90 +:108AF00045F13DB3A30EE7B9A7B41AEF0EECB73BAF +:108B00004BF939B25B4B978496A6E0614FE7D3AE41 +:108B1000FB1BF678CEFFCB3227ACB8F27CB62FE346 +:108B20007183A2384BE07E7FED32BE8E82F93CBE6F +:108B300013B4797D62989F8B7F766A2BE5C1DF56EF +:108B4000CAB7E3A4BDD3E9B17764DC2154C1EFD146 +:108B5000ED8C832A8776BEF3B93D9621FC04784FCD +:108B6000F1A15095DBAFD4845DE3DFE1792EEC20F9 +:108B70009FC7DE91EDB561FCD09CDA1E928BAD19DA +:108B80007DF6CD58B46FB6C75482A308E040D9B47F +:108B9000757907DD5F58F4B166F3F5DF11B97A72C4 +:108BA000BF9DF3604648DEAB4B788E26CD79181A10 +:108BB000CAAEE1F16E89DF1D19DCDEDE2AF2B0A754 +:108BC00077C7E6650ED54EC45B6B7AF8F9106FBBBC +:108BD0006BC23C1EBAD5C7CF6D6E1D6F2436019C8B +:108BE0005B152E1F9D7FF5C9FB5C88AE7B969B3B7A +:108BF000917F0E1E2BDF42575FC42DDAB73A68C54E +:108C0000D5F2F0E072724998CF67425DD4E6FB95E9 +:108C1000B2BFE43E7E3F4C32720DE0636D98DB4B99 +:108C20000743201F084FF1E2D4B86886900F124F17 +:108C30008F9F589281791791522B17FD85DCD206B0 +:108C400086E727E478074BC578BAB56532C2B73CEA +:108C500099D99E02BF1CEFF1507A799429C713F875 +:108C6000FEE1BBBB5CE3F9EBDCE3F997C17838EFDD +:108C700040C7A629D3071FEF87838C972DE921E8EA +:108C8000F6D499B733304E1FA984F190FF71BCF030 +:108C9000C0F18ACEDCAD64A6ACCF3561AEBF9F9289 +:108CA00078D4E3C597A6C8A15F08FE7834B62BB088 +:108CB00014FABD6D7C6B10F9788F92084C40BD376B +:108CC00055A5FB49B7EEF83089F6EFA336B76F72BA +:108CD0006A9C8BD0EF2E0DF378FDA33BE6D2778A0A +:108CE000DE41E77BB44EF80BDFDD8AF104DC6FF286 +:108CF000DAD5C23E04FE3F8AEB7E4C3DA33CB7482A +:108D000067C3F393504E6C54C99E63E0DEEB33FBB4 +:108D1000E3359D3ED19FD87793764591B0D387B008 +:108D20002FA24CEEAB519DEFC3C9780EABB6993272 +:108D3000AE7F9F43C62DE5FE86DCD7C866C98B5241 +:108D4000F7DFC6319BEEA91FCF129B10B832DB9A1A +:108D50008BFB02133AE373E9BEAD0D8CE20B9AD99B +:108D6000C0F74BC63D90D317E73C8FB11B912791BD +:108D70003F33C4FE2BD007ED86A4A7FE6F19324FF8 +:108D800093D7F538D743FA322EE79833205F37125E +:108D90009E81795CFCBE4219C75F26FAD916BB3B9F +:108DA0008872FDA1905D1286FA1414AC05E45F5838 +:108DB000582FAA67369EB3D29AB91FAA8599FA6925 +:108DC000E81B817624F737F27EBC741B8CBE928E32 +:108DD00092AE7F2D3D41655A9A46FB85C28E7486C0 +:108DE000B41F4BF55EDA5F053782E85AC16244D79B +:108DF000E280A9223DCB6BAD4D41A42BF830E8F7C2 +:108E00008D0EF37D083FEB09E23EF26074D52B0531 +:108E10009D623C7EC49A07DCF7F6C57474EAD7E716 +:108E20006A97620DAFC73B2BEF0EA25D007A9CECF8 +:108E30000267854AE74B47A0CFF979D6F041F2AFF8 +:108E4000B6E68873FB20FFF19EFD07332CE28B39D9 +:108E5000BDDDF3B253F4C6565F3212ADC2F6C9455A +:108E6000E8F7380F7039F168CC2B271281A550BE76 +:108E7000919143FD74562C786E12AE6BDD21BF418B +:108E80008EFFCB8CAC56F2EFC249CA2BDCBA703DD8 +:108E9000DD5B24E5CA807603EE3975EF3FFDEEC950 +:108EA0005746631ED71BCB3FCAC47C9D37F5DE4CAB +:108EB0009CEFBBB7FC7B26E615BE718B46E775AF12 +:108EC0001571BBAF36FEF74C8C63B50A79DA13B671 +:108ED000BF8974611B79BEC9CA8486C16CDE3FFC40 +:108EE0005DBD370385445F7D6D579EAB2EE7B5D6DC +:108EF000CFF7F556EF3B6A94005E56EECDA178D6DB +:108F0000BB3A5F17EF1E1ABD13E3F547847EE909EC +:108F1000C7EEC0F587F3A17B3A8FF845FE62B78FA5 +:108F2000EB4BBB1EF75BE2827FBCF3FAF15319D423 +:108F3000EFF27B35B2B31603AE3782888EAF584D51 +:108F40007121EFBC97BFD1F5E36298D7F2DB14BA79 +:108F50008F0EDBDF027E647CE3AD1427F5C2B5D84B +:108F600071E7C52CED5A48F1F6251B14D2E34B7678 +:108F700028B4CEBD79BACB98B5654E599A7CDD231D +:108F80003C8FF07A4FFCD56B5F1D080BBB6A269BAC +:108F9000C5E34655775659C3EFAFBD0B763E26ADB8 +:108FA000BED718A0F2FD4693CA6F86395FAF3E7CEC +:108FB000F4C72443F4EE99C877078FBD937135BC8D +:108FC0005A1FE1F6FD053B3F6A7A1C5E4F63B1EC28 +:108FD00024C92F9BE4CC3502FF17B280158679DEB9 +:108FE00021ECF86967A09E02DF871D0AF979EB6121 +:108FF000C5625EDE3508EF14EC9FDBF5D7E0EF9F2E +:109000000C017777D89B0FF7D9E01EECBBB51A3F60 +:109010008FE07D2ED7C337853DD2F4E4B71720BF4C +:109020009CBC4BA1FB9A57ED7D8BF254971FF69B8E +:109030001A0F461E47F926F9D3CB7FE0171BB8EE6F +:10904000FBF8ECC8ED840FC907B06E22222F2BA2CB +:10905000D6A4E1B761F2BF4FFA7AC6E03AF7F2D38D +:10906000C941FC965F8679DEC232CB5E80F19AE51B +:109070002CD6CA7F77C77EE96F0987BC0FB49AC721 +:10908000BE306FD3AE85757AF063EE0F6D3E34EE71 +:109090001EB4A3A7FE54A71CEBEAC74AA6A1BD575E +:1090A000FDA33029D5EAE79ABF84EBFAC29DE23EE0 +:1090B00026A1472FC07F5A03F174C14FE668E78E9F +:1090C000005F5E3C5DF0B1EEC993EBF831E6BF5650 +:1090D000EF56C83EAB7EC1FBDEE172EE89FD8FA389 +:1090E000BC5DF58BBBB330EFFA377A4721D261FF15 +:1090F000EE962CCC8B7C5777B210AFBF4968AE7B15 +:1091000012FAFC8F4C45DE63EDCA6F656D0EC1FD32 +:1091100087477C26E691ACDBEBE77993CFAE223A2A +:10912000409DE74B1E4A9FDFBAEAD17B0B2D9ECFB5 +:10913000E6CE73DDEDA37DD01BC02FC36106CBFB54 +:10914000EBCB23EC1A3A1F729DF01FBD798F329F33 +:10915000D4BBAEBF90E95ED78017F2131D980FDD28 +:109160000527F21C9BBEE3770230CFDFBC366A27AF +:10917000EE7FBFBFFBA759780EBD6FDF52E4EFBD96 +:10918000DF356EC8FB7B4F0A7920EB83E5BFEE0726 +:10919000BD84FB256B5EF5937DB3E64535A30AE3FD +:1091A000183B7D34AFC74F3C5D3819EAAB0FF8F27E +:1091B000EB393894E72AE9D5977F2CE8B3EA073FE3 +:1091C000A27CD8BE3C6441A7D5078E1AC8275E7C16 +:1091D000CEEB3A6AF484D3D0ABEBAD05E8DF347D57 +:1091E000E7B481F2E6374F296C54D9C0EF573CF20F +:1091F000539E672EE835785E79F24B3F9C4EED4CDE +:10920000F4CB06A35F15F2CE0CE2EFEFFD10C65DC6 +:10921000F19A9FF2DA577CEF6BC4E7BFD61B88CF79 +:10922000D73CD0528876C50A9F536852C99FAF7801 +:10923000F026E2BFEB5FBCA950DC575AC4E581536E +:1092400084702DDF7139C1751D8B13FFAD7840A37C +:10925000FB444EE9ACEE401A7ABE28D6C9AF77F986 +:10926000D11961BFC6382DDA6B3FD778FE9627BF7C +:109270008634CF4CCCABE2F4D99BA9CABCA600CAB9 +:109280008F75A2D5BADDB7D2F9BFF746F373F28076 +:109290000747E04B41BDA6BD387F14A70BB3D05E96 +:1092A000A7EF4074CEC3E7D8BEDB6707A7B8BE13ED +:1092B00079BF7CFC0D627C987708F7077E5DC8EF6C +:1092C00083619EBCE81B0EADACC73CE84F049C7D9F +:1092D000EB7DB7C82317EBFDBF8E73398279D3942A +:1092E000E7DEED4B8E72E54BFB5D71F4FE7C609F1B +:1092F00058C7EEF7302FCA67EEC3E7530AD9BFD776 +:109300006DF3BBE27FEB0E89730F9E3C226F7EF301 +:10931000F562DD7BE9E795032F78E400DB5130A2AD +:10932000B8F51A5F82F2D2619D92DDB666BF8FF208 +:10933000817FBBEF9997AF06BEFE6D975C9F6E79FC +:10934000DAB73E01CF88B7150767B074EBF3B7788B +:10935000BF6EBAF509CFD3AECF3023F9F53793A757 +:109360007D7876AFC7EB0791A7A73207D849D978A0 +:109370009EECBDEFAE1E4BF78479F02AE5A7572E81 +:10938000DE9569B9F2BCFBCF5D70BBA6FF1C0CC7B4 +:109390009FE4CB55FFB896C6E9E357C997523F0DF6 +:1093A00092C7EFC5A3F7FD3FA3FC2918983FE1CC76 +:1093B0006595F87B254D06ABC4F889A386A2C8AF96 +:1093C000DEFD0B26EECDBEF96946BFA7B63CAB4C21 +:1093D000E6E5D1BD7037FF843F678CEF0B9D7E9E25 +:1093E000D7A3F3D48674F7298DCFE2F26347169F93 +:1093F000D797B22C71FF6B4CE47D76D13E5093220F +:10940000D6514E16AD239FF0BBE5B9B16886FA91EF +:1094100005B6D0B977442EC6F3B1D169EAD7C641B3 +:10942000FD735915BC7E9EFA8372A87F216B3CAFF9 +:109430009FA34EC37B2AF6B00917D7425D57155636 +:109440000DFDEBC54602C7DA02EB36007CDD9CC59C +:10945000EC1CE0AF0C3F7382D5FDF3CB30A09E4BEC +:10946000705B18BF68CA09503E67B38F7F37D2FE62 +:10947000643FD5BA358FCEB355008C65FDE354EB10 +:109480001CEEAA30FF7DA2E61C3E5E338CD744ED75 +:1094900024DE4656CA7C5F2D83D343CB561B0E4039 +:1094A000797916F717AFC89279FB3C2EF1BB2747A5 +:1094B000EDE271D4DE31F4FB0BDA87FFF10FF0BC83 +:1094C000F72B19B4BFF55A88F3C595D95B7D674171 +:1094D000BD3A30E66BC854AF29FB6EC2F29CEC7803 +:1094E0003C8BF797C4FEAEBE56E3FD851B32316F51 +:1094F0005BB1B91DAC00F1AE017C34D9CC32C6E110 +:109500001271E7CF6A5A756F92C6CD748DCB4A41FE +:10951000EFC03ABA72365F47E0D3921E7AA586D77B +:109520001725CA9B7A2C9A474316C03FD59F188DA2 +:109530007ED7D5FEC478CE5F6E3FFF24F67B0E97B4 +:1095400073788FEE74B13EA71FE676BACC9B5BF7BB +:1095500092D84710BFE727F3F9701A08CF3A841161 +:10956000DAFDE07D1ED7A97ED69D2731FB051E675B +:109570009BED9147E7897CA2F386F15F6FCB12FEEA +:109580006B312BFE6BF243BB15BB83D383FFDE4BEA +:10959000BDCE6CF1FB15B4BFB55EFCBEE2872F9467 +:1095A00067633C383B8BEB4D996F6D581AE5A31CF4 +:1095B000F2C839C9AF938F9B4BE977138FB3AF5282 +:1095C0007E95ECD7E478ECCBBF7C97E75F4EEDA9B6 +:1095D000FC36FEFE8DEF988F25ACFEBCC30F8FF3DB +:1095E000BCC399C7F839C2C7D15FC6F858C47D6EED +:1095F000256885989582978CCA5C57BD3928E829DB +:10960000F217A7F157F47B5CA9FD4C33F9EF3566EF +:10961000D794BBBE672FB8F30EABC5FCA2E14002E6 +:10962000E733F3B89BAEE70ABB6F56BE8390B29A9E +:10963000D73DEFC375B4FF73EE30FB3F3FCA12FA5C +:1096400047D277201E5DF99B53D9946FD3EFDA7917 +:10965000F1F8AE1B8F920F009F1ACACF1CDB8DCF83 +:10966000BC3A373E0B626E7C8E5AE4C65B51DC8D91 +:10967000AF921567B9DE8F6EA876D5C76E3CD7D589 +:10968000BE0C144F6A7D5CDBE75DEDC7775CEAAA30 +:109690004FECBCDAD57E526289EBFDD97B578D88C1 +:1096A000FE93BBD6BBDA49FA9F73F8EF5DFD49FA2A +:1096B000CBF3EDD58CDB255191EF3A18FD35B56133 +:1096C0001EE6F544930EFD7ED4A7E50323FBD3AD40 +:1096D000F37221EF316F19EDB3DFF9C26D688FE6D8 +:1096E000006FA09CF5EAF59C233FA1F8BA373FE153 +:1096F00066CDA27D88D3AA3D1BF9A58075515CBBC0 +:109700005915F7A2CC0D903EBE4355BF9ABAEF341F +:10971000369BCB8DB1D962DF1DF41FEABB920CE6FC +:10972000901E5499EB7735B3F298B827EAEE5BF1C7 +:10973000F72D9B737A2AAD1C801FEBA3FBE53DE858 +:109740009769E827803C3F2B1BFABD5A05790E43E9 +:109750005D693AF31580AD24C01C3CE7017A8ECEDA +:1097600047E7B07C657D15BA367DFAC4FA0498E007 +:10977000995567D3799A0F574CA2FB5A3F0CF7DDE6 +:10978000D3C87F77B88EE7055C25FC8C0F978DA337 +:1097900076AF5E0BAB0DF8E9DF70E66037BC6A7040 +:1097A000BF63B8F8D88A9DF76462BECCAB953CEF36 +:1097B000403EAF1778AACFD6885EEB966538FC9C02 +:1097C000A68FF6A3D12FC2DF13BC21C1D72FD6316C +:1097D0003ED43E7D97FB7CFD31C729817FAE3BB2F5 +:1097E000D0756FCB95AFF038DC957F662EFBEBEF35 +:1097F000B2F9FDCF7F27C6BD020ABC1FE90AA0430C +:109800000E963F99B300D7033C4F2A50BFE41898F7 +:109810005C80F785F1321F22F1DF59F4A5C760EAB9 +:10982000D765F3F12F63311FCEE7E56BD76662BBD7 +:10983000BEFE643F25D02FC0F14A8EE32B04BEE963 +:109840003D5F213D0EE305F079EC9A92160CA1CA1A +:10985000F15E66F10F5E02BEBA9445A95FD93F255D +:109860006ACEEC9783EB576624F3A0BFF5AFFA29D5 +:109870004EFCBB4DBDDFFB3ACCEBCD557F7C0CCF16 +:1098800003B078CF68D47357756ACC02BADF14B6C8 +:10989000D721DFB09A919DDF9EF7DD20AD87F5F7E8 +:1098A000F2B8DAFAEF4CA473D7EB33DDF77A4A7EDD +:1098B0005929F865FD23E3E89CB6FCDD0C6FFFF841 +:1098C0007B3F16FD9E2EFF9DE3967C9EBFABB3783B +:1098D0000BCEAFD9ACA67BBCB7E7B204ED3F968EFA +:1098E000F0775A607C07ED21C6E7F1AF824F171D74 +:1098F000C99B26ECB1BBB0FFD79EDA3F1AE5D7F380 +:10990000931E1D4FFECCF491E183093D1415708226 +:109910001E227FE1772C14F5A7F1170E087BEA666B +:10992000D5267BFE6661D79F56B9FDAEA9D1880EBC +:10993000F5AE235A06E22B0B8DE594DFFFCDC26412 +:1099400079FE7BBE7600FC99B385DCD87BE79B175C +:1099500037F3F887DB4E1371226997C5E00FCAED24 +:1099600053EC8886F04FEC74C71B672755F21B3FFA +:10997000AD1DF6C36C8F9E1EB11D167F361BF0D930 +:1099800055C9E56D5732C4CF59802AE2795E6EFB26 +:10999000CCDBCFF32837E0FBEE6C2EE7EF3579997F +:1099A00001F22F939F8B73B46AAA534A26986F765D +:1099B00001AF3BD95016A3BCC57C67E5646500E4E4 +:1099C000ECF13B7F796B5B29DEE7C0F18BF526FC80 +:1099D000772083DB1D520E3E7B16BF875DDC1F3375 +:1099E0005DC49FBDF39B0EEB8D94AD5CAFE2FBE4D9 +:1099F0008FFF44F744ECCFB57E761EDAF3CF69745F +:109A0000AE39A8F7183969E07C1CE52AAC8F1293AF +:109A1000EB91C06185EEDB0858DCDF0C9AE6548AD6 +:109A20005FC75906C6BB3F38308EFCCDE7047EC603 +:109A300065C64E22BFAFD5768E31C791FDDB9B5DEB +:109A40003010BF5D49FEFB669375D6A6E7F6E35777 +:109A5000CE635DE734DA04BEA1338FCA49E8CFC3D1 +:109A6000A375490EE7C9C34DB9E9E2A5EB46F5FE7A +:109A700001EFDD61DFE7F7194D3E32ED7A9487485B +:109A8000623CA7F87F0141130160008000000000E4 +:109A90001F8B080000000000000BB5597B7494E593 +:109AA000997FBECB5C9219325F6620848B382490FC +:109AB000100871180284A8EB2750C01861806ADD75 +:109AC000D5D6091C81E63696EEA27B6C8F9384B6C0 +:109AD0001CE46C736A2F7497F67C50EDA1957806A0 +:109AE0004924D049CE101012049B285A508F1BE9EC +:109AF000965A4B32915A70BB3DCB3ECFF37E9F734B +:109B000009B4FEB3C949DE796FCFFB5C7ECFE57D3A +:109B1000E7979FCE03F00138B599008B00E6ABA024 +:109B2000DABC803F86BC7E3E40C4014FC4CA0146B9 +:109B30003F5578DD0DFAB907D775DFAB687900E5D9 +:109B400089F63E9808901377F8A34822E7790089B0 +:109B5000FB390648B8BF7715489500C97C084838D6 +:109B6000DF913BF63E607FACC7E1DF8FF3395A3BB4 +:109B700078917E871D1E0B615B06A0BFEC4E8D5B4E +:109B8000E7E5C47F0480E3CE59A01B34AFB6C3DD44 +:109B9000EED4FC806702C024DCAF01CBD1919B9056 +:109BA000DDC8C7D86C80FDCC578A4FE0732D3ECB03 +:109BB0008CA844E78F5D7E7A22F3A5EDF7131F8210 +:109BC0004F8897FA5FA0FD9ACE72E468FE00ADCF91 +:109BD000E62B5201067800FEAD15F75493FE408740 +:109BE0002A1CCF4DF59D73F09C22FC3495BA537717 +:109BF000AE989EDE8728ADB7F6DFD33E7DE70E9C9C +:109C00005755882A410017B613BC24A79FE55491E5 +:109C1000DEA4A0D04300F5E4728AF9CFD63B912DA3 +:109C2000EABBC5BA8027EAAD41F902A7E5401B921D +:109C300080BFDE00580CD04C2763FF9FA5C4E57B96 +:109C4000D0C47F4EF455F891A7C6D3C766D8B16D7E +:109C500090E33F9C8FF37147F83E0DF57AE43D1990 +:109C6000F2500F1FFD22C7A845BDCC39BAAF4077CF +:109C70008FA7F79D0BADDF9B46763F2AF951E39006 +:109C8000B48DCD203E9BE3BFB7EBD8AEEAFEC03E1D +:109C90008CED6FB5F0060DE5A9EA6E594E7A5C0AB7 +:109CA000ED6D1AB6F36408C7B08D15223DA473F5A7 +:109CB0007CC9FE16D43B8C856F275C7E5393D8CE2F +:109CC000961DE2CFE05C2940EF334E6EADF1EC36ED +:109CD0000A7DD3006976D904DE5AE1E434D27BD719 +:109CE000F17F2CF623DDA4A1AE267CCD7BDBF99899 +:109CF0009E86BF273599CF7BD23CD7961FAE27BE15 +:109D00001B8E5FB2E7A17C91FF8ACD005C3228E90F +:109D10008DA42780841A4248D6AAA0B31CAADF9338 +:109D20008EE7331E89ED68F52359FE1551C7ECA463 +:109D300087C88788F772B6FF0E0FDAF3C5B7BBE79F +:109D4000D6B9997FF0A05EBA2E3A0CF23BEC3F4CAC +:109D50007EDAF2D6B58A619CBFD6D3703BE9F32B8D +:109D60009ACDF28765B9E47787D01FFC29BF2D27EC +:109D7000BF4556CAC91F2AA95FC6F43AEC8335EC21 +:109D8000A75D32909FA23FB07FA03F682F00AD47F4 +:109D9000FFE0FDA5ECF71D83B24EFD6822D798CDFC +:109DA000FD651BA8DF31B84263BF9751F541F2DF73 +:109DB000441FD38901CC26D34A108A95A7FB711E74 +:109DC000EB65C0D4CF7BE853D4BA1425C34FF2144B +:109DD000D9F22BD16F9378FE52FB033BBF8F7E03EA +:109DE0009A4B8602806D9AC02314621FF1F9752781 +:109DF000EF816DAF56AF3D88F26D3BA7F0FC62FD81 +:109E000089E5E85350B5BAFD04B5D5A1D8721BF168 +:109E1000B747013FDA6511B6FA4280BB1E1E3C61AE +:109E200013EE3C8FECDBD977DF3C95707ED10139A6 +:109E3000C842E75FC6DEFF25CAB7BD17F50AE3F1E2 +:109E400087EC32DE6E85CFA4349C578C3C1FD3BE8A +:109E5000BC5ACD417F592AE43CA23DB2338A8C558D +:109E6000E5EBC7085F6BBDE16384BFE4D05F0A1018 +:109E7000B6D075FE525E18EDDD69D7E769DCC2D653 +:109E8000987B3CFD03261E2A29AE9BFEA522BF23FC +:109E90007B7CFBC8BF463A15BD0075FEAE8977884E +:109EA000EA8385A8C7C785DA606BA7F281A3026041 +:109EB000B30EF00DC4E3E327EB6B81FADFB75D1A55 +:109EC0009E23D6DCA075F8F714DABB240A8104D2ED +:109ED0006F3EAF040C3F8DAB97864D1BDC9849FF5E +:109EE0009F9009278D7109FE1DFB916E5B6A1EFF15 +:109EF0001A61F7C74A05B56A8A3EAE7BEABD29EB0F +:109F00004EA69DF7AE3661E265177E2886E21B0AF3 +:109F1000E3219020FCBEA504F6E3B04D857E07F258 +:109F2000F3A22CF482F191FDE9FA3385EB4EA24ABB +:109F30009EF6EABFF6A03E7FED31F3C7321177C639 +:109F40003A2483F17F00E339F6AB3FF4EF8399AC19 +:109F500097F3858B859C849F6A15F8BCEAF3C5014D +:109F6000B27B15EA87E4DA1C970C03D76F253DE531 +:109F7000515A15F2619A851B4544AF5DA175F57B79 +:109F800025F0E1BA860359F2EF193A3505DBA658F8 +:109F9000E678C4D44B244B2F2FD387A5E3F573C3A6 +:109FA000D2CF0C9841FA01E5510FE105FA5109535E +:109FB000C6E3C4D20BB917F9DF1F29BEE0FA374C4C +:109FC000FAF8E3AE435CFCD6947F6ABEC04BB3297B +:109FD00077A3A1B0DC9B4C7CC06E810F27FE92DC86 +:109FE0001110EB9AF64A4662E678F9B61EB4D5D956 +:109FF000C91660D84308F0AD7B33F1556FCA5F9F37 +:10A00000257F7358CA381FFDD45D8776DA64E2F77E +:10A0100056FC34D884FD1A102F51FFFF1F7FD976CC +:10A0200009E69B76990B7333ECB2DAF7B9EC027A56 +:10A030002EC7B56D4E6187AB27E77AA03C8583ECD0 +:10A04000FD2B318E01C6B1557B246E3B07FB76DEBE +:10A050008972077B14AD16F7270797B9E6533C3B87 +:10A06000AB06884432BEF0D928C6B9C3FDB336F872 +:10A07000916E7048663F58782E68E4A03CC17341E9 +:10A0800057F10406818FF480FB387F26CFCE7AB358 +:10A090009CE8F4AFA8A4B4DD7236E8A27C7F182552 +:10A0A000231C49E73E799DCE5D38A02E76E0FCB7B3 +:10A0B0000B15F6B7553FAEFBB903E9D6E42B2CDF01 +:10A0C000A9C16D5F643B9C95351A1F3D2BF3BAC641 +:10A0D0009F28868CFD55876C1C5F22683789F9B5EF +:10A0E000F1F9919ED9BE4DEE94FD379A380DE6FBFD +:10A0F0009FABA5BA6E8A2B40796CD56D36CE7B5757 +:10A10000A6BA7E46F54C89BE6FA5867C5E39F6758B +:10A110008E4BC90E090A91F0A9C2132F4551BE2BCF +:10A12000AF0CD901DBE59D4376CAB31B2DBFDE29F9 +:10A13000F061E1694B42AEB3DF81F1743017124830 +:10A140000FD4763BD9A569C8EA0FDB293F87CC3A03 +:10A15000A8F9F90FB85FDF2DB17CF5CF4B861F3F13 +:10A160009EE83962273E9A0F4A307926CDEF5B4947 +:10A17000EB1A20F66D8AF3D9F162CB9ECCFE574DD7 +:10A180001C7EF5EFE0B0CDC2611994110EAFDD1B5E +:10A19000F210EEAF0DE5BACAF1FC6B030AE3E16F12 +:10A1A000E091F3DA59AAC3D0A05713B24EF25BEB99 +:10A1B00046CF5EB5539DB832FE31EBAD367E7C05A1 +:10A1C000E9E3010837927C0FC45D5A02E5AD1D1624 +:10A1D0007E571377188644F3B11D2467B2D7C1E3C5 +:10A1E000D19724AE2FACF8B3C5B4EB16D30E5B30C9 +:10A1F000B0FA30A435F68B3C057B33ED72FF9C4CF6 +:10A20000FDD48088173531112F92B6984AFA4FCE77 +:10A2100097A09DFA535C6C8FE851716E33E913CFB0 +:10A22000693C9849A7392BAFFD207F12E3F7AA2A92 +:10A23000F2DFD5F34A25C5955BE5FD6C7B7465D9E6 +:10A24000A3764CC4A71A338FF6275ACBA128A59F13 +:10A250006C7BF4FB8B3DE1F25B9FF7BA592F5BFD02 +:10A26000B5E8285487C534A1FF81C149FBA8AEAB2E +:10A270005FAA44A91EB8CD2BB33C8DFFBB616D1006 +:10A28000557645EEDB7E10E7FF58172B21BBE1FD2D +:10A29000E01C897C7AFAA6DD0B70FF471DB600C56D +:10A2A00013D0F795509DF49DC2E76A83E4A7076D2C +:10A2B00001BA0F8C5629518A9F11AC8F81C71D0698 +:10A2C000D51F91EE3F89FB01E104DB505CFA02E10E +:10A2D00004EBED8B447F1D7E9C887A58D78DF91D49 +:10A2E000C9AF5BF1B19DE225D6DDEFD27C76DD3DD5 +:10A2F00030ABD8B3915AD53FD9EBBE75DDDDFCA9A3 +:10A30000A8F3ACF166F44FD26B735CE2FB66AACEA5 +:10A310009B2C519D97EC3972D2CBF1217F01992969 +:10A32000D7D44F675FCE67754711C92FED60BF68FF +:10A33000B6193BBC38DEFC0B89F30B1C45232DC141 +:10A34000B8F8462EEB7BF415C9705000C3BA82E210 +:10A35000F966010518DD18BB44F5F2B50E27D79351 +:10A360005BD03E4F21BE379B798CFADFC0BAA60581 +:10A370005AF95ED30A3BB8DD8C7FFF101C1F0F46D5 +:10A38000BBDBEC840BAB0EE1F1A2F171A4C9C47983 +:10A390005316AEB3717A9B17713A2F855394E759D0 +:10A3A000BEEF0F281AC9D3D9F7DF3F9D4AFAC0FA8A +:10A3B000B888FCD6AC37504F6CF7E490DB207D7E3C +:10A3C00064E2F10ADDDFD0D55BAA14D68FBC54B4A9 +:10A3D000F37A8F14919D933DD7678431FEBED87B6D +:10A3E000642EE10405E1BAA3E100AE4BE3AB29E63C +:10A3F00022A7FFAC8F7C893CF1B612A07C837C95B0 +:10A40000D827A6F8EA5287F30237F12349EA63FB1B +:10A41000C9D2C98CBA3D7254091969FE85F23C460D +:10A42000F1ED0EAF5937AB6305940F177AFD8C8BA6 +:10A4300096B8B0B7DC235A3CFF21F10E62E3F3C7B4 +:10A44000CD2F8B36D2FCB5992E203F844FA3B5D4A7 +:10A45000DF5EA4C02EEC6F7FA3BE14D2CE0749DC12 +:10A460006B23B6B102BE370EC9CC5F64E86AC12C5B +:10A4700037C5B97D2B28AFDD6FC68B5345AEAD8494 +:10A48000EB289D3B19C04EF2E1FE5F51DE45FE23F5 +:10A490004BC5FE5613579D6FD4B8E693BD7A262D53 +:10A4A000505024DDACF7D67A4335DE45A9FBC7AD65 +:10A4B000EAC9B4FB0FEB238272923F1DBEE0306A03 +:10A4C00025BAAF5E7FFB11927700EB0EA4DFD2E3DB +:10A4D000887AC85EEFE41894F7211CBE83FC7A7B6F +:10A4E000EF9652CA7F20B5B23D76773F9EFC0FDCD7 +:10A4F000D774D145911C9A7ADE2AE03CDBB5E83965 +:10A50000AA5BB04EB99FEA96C3711BD72DC1739554 +:10A510008CB7C3672B7DC5747182808BE8360DA81C +:10A5200021D247D340E56BB5546F9C5BC6758B74E5 +:10A53000AED247716821DD53A96E1998C57D4B9E37 +:10A540003AAFA85392C773F8BD40822281179895FD +:10A550008197C6CE5739BF37762B7A3A6EAC7DFFDE +:10A56000E255599FFF4A78C1B62526E98C8743A258 +:10A570006DEC3E5C407234D8626CDF96833631DF1E +:10A58000215A8076DE170DC86CCFD76808ED50636E +:10A5900037A603B278C6ACDFCF5C0CDFCE71F0DE3D +:10A5A0007029B5D7BC99F1300ACB986F90D6B3DD3E +:10A5B000473A453D956DC74FBCE21D24CF078F85B7 +:10A5C0006E32FF3BD30F6AECE21D87EAB02918D741 +:10A5D0005E37F3F51A8C5FF47EF8B21937DF04ACFE +:10A5E00037246AC5BD3146BE8CF6DA709F64B4A0CC +:10A5F000FD373C60E37A02AA449D1DC25F8A5BA5D9 +:10A600007BD48CB8853336F2BB0DAB33E3D983668C +:10A610001DF4E0DFA9839EF79A79B7044A443DEE22 +:10A6200076D13BE19FFB6D9AC27587318BE8DFAA3B +:10A630000E3A8571CC8F71AC1FE318B598975EF216 +:10A64000DEE43D287BBF95975ACA7EC3EF37678EFD +:10A650005F7C299FE3660E141110FF8ADCA0FE9A2E +:10A660003493D7ACFD2DB09EEDD60A5FCCC09D656E +:10A67000BF11AABBCBC7DBEF94A9FF6618B3E3DD1C +:10A680001976CD3142D4FEA72CE2568E7377741A18 +:10A690007E8CC4D701F9774B99A8C346BE20F2152A +:10A6A000F239C39116DF47A6887A6AFB4312BFAB23 +:10A6B0001E2FFB0DE7F1A6C4A09DE24F4967DDB751 +:10A6C000C83F1168E7E97D668D99E7D63A455E5B3C +:10A6D00063DDCF2C794DBCB480372AE2F0446E693B +:10A6E0003DE5BD35669E5B5B9569EF52185C390DA3 +:10A6F000F9F8922E71BDB44ECF9C5FFFF08257A93E +:10A700005CF8BC38F91F6FE8F75EF2F3C1AB0FD10C +:10A710007B68B389EB40A9BF7B98DE555FD316B445 +:10A72000E1DA882BAF42439C264DFCEFF284467958 +:10A730009F716933BD0F7E426FEB93527E13980C6D +:10A740000BBFE64EB78BD867ADFBA657E3F68CCDB3 +:10A75000984E7E0FE5BE9BDEEBB2E36B4BD9E90A68 +:10A76000D2FB99E30315F634FB5CD9162EE5FCD039 +:10A7700073A2C0EF4EC78F6CE247E55692D69B7925 +:10A780002F134F57084F64CF4327D63C4238E8DC9D +:10A790003051F2A7E5C5AE37F366A7D11D892BBCB2 +:10A7A0001EEF3B250F4E48E7F35BCCE7484CD04308 +:10A7B0002347F99EF3CA82C5BB84DAA332F5E76C5E +:10A7C000FCF92EC23FB4F17A0B97B9B6767D1A8E9A +:10A7D0003BBBB1222C4AC91DB303D389F63A8C176F +:10A7E000B89E177124F981C6F52CC07420DCBD62B7 +:10A7F000E2AAD227F0BF04830FE16F29C414C2FF7D +:10A800001250E151EAABE8B8D8DE0586427174898E +:10A810009A382E55F0785445DCDD0DC33C7E0F3D53 +:10A82000E9E0BE7BC1AF527F3944DB2821DD194B03 +:10A83000DC4FE551A240CDBF8C38A3907233BBA54D +:10A84000F4A2C2650B77B8188B157EA7B6F85E2CFC +:10A8500009BE97E8E0A438F9659F881B01979073BB +:10A860006C04F8BDCAE2EB4E15562BC8FFDD2A3842 +:10A870007371FDA19332FB67EFB0DFA07816F099FA +:10A88000FBFE80FB6672E9018F06537256E33E7A47 +:10A89000275BA2E20D97F593B8A9BC217ABCE2FA36 +:10A8A0007BEC2B446F79DCC1758AEC8C2A546F3EAB +:10A8B000E413798DBEC7C8433AD5ED125CA0EF25ED +:10A8C0008A857C16FD6A34A92748EB457CA227DEE1 +:10A8D0000B5EF1FD461E7F2FB54223FD488902F92C +:10A8E00086EBF3EB315900CC77DEA6B1D1A72B5321 +:10A8F000DFF304E2A72F489887245DE7BC1370BA02 +:10A900001354F7A2D5AFA4D7C7F5BE8D5B7DC88F12 +:10A91000E4D7583F10063FC5F3C9B057A3FA57A66E +:10A92000753E61A60FD14E5F32F1F54E6E5E057D2C +:10A930002F74C058EF273C3F3CD11920BD079D33F1 +:10A9400016126EEFF084B7FA506FEF4807673311B5 +:10A95000D558149A90C2B30BF42AD23356018CCF37 +:10A96000A79C82DEF51CD1BA301C3B919F6711F782 +:10A970004E2FF1078CDBA8F97E197D3FC768C3F322 +:10A980009E54420CBEEB72C049F4A0287C6109B60B +:10A99000EA32DDFF849B4A6E94C3959223FB1C929E +:10A9A000EB2E4B2E3925D7F873A2B6B933E91C7FAD +:10A9B000DBB0C4F27D97E45BE0306EA3F7847F7276 +:10A9C00018B3890F4B2E54347F6FA499FAB2E4D494 +:10A9D000C80E940774B4836547D4D7B3B99972DAB3 +:10A9E000C094C78FF6983F5E8EFF03E8FDFEFAE045 +:10A9F0001C000000000000001F8B08000000000089 +:10AA0000000B2B146060F8518FC07BB950F9E83807 +:10AA10008B13959FC18D5F3D212CC38060CFE66075 +:10AA20006098C80CC1FE50FC838981E131146F62CB +:10AA300086E0132C083D4AEC0C0C9A406C00C4E6EE +:10AA4000ECF8EDD265C5149B2FCFC0E0A28CE05F7F +:10AA5000956260109406FA539A327F8DE2A1815B71 +:10AA60004D50F92F7451F92FF51918044C91F8BA7B +:10AA7000A499DF08D4DB04C400E1FB6D4A6803003D +:10AA800000000000000000001F8B08000000000014 +:10AA9000000BCD7D0B7854D5B5F03E67CE39F3C8A9 +:10AAA000CCE46498C0240C78F200526FD0210408E2 +:10AAB00010ED010262A5DE11A98D8FAB43821095C6 +:10AAC000477C54D2D6DB39214F2084A8A9373E6A6F +:10AAD000077C14ABD8A0A2DE8AB7A3A2C55B6FFF28 +:10AAE00078FFDE5FEA8F363C047C36DA5AEDFDB53E +:10AAF000FC7BADBD4FE69C9309C1F6DEEFFFD3AF03 +:10AB00006EF6D9AFB5D75A7BADB5D75E7B8FDB2359 +:10AB100012E9EB849C823F9AB68B849059999410E9 +:10AB2000491BF4404A8C5325B63C39E53A93FC174F +:10AB3000D3EC7983907C48BF47C87842BEC3CBE84A +:10AB40009F0EF91A9E31E13153125348BA2CD34F5C +:10AB50000D61794D14C82901BEDACBCD719A3CC183 +:10AB600073482E219F79596A2CA44595347DDB9B2F +:10AB70006A2922E44B922861F36C9C139F8EE9B9F9 +:10AB800090B608A4B6DF9F050EB209F1D2928CCF21 +:10AB90003C2667BEBBA4581AFAA5FF8F3DA4D1D4AA +:10ABA0004F24984F27C0067932A0BBC214CA706CDC +:10ABB000E6169AAFA0F0027CCBC57805C3874EE2BB +:10ABC0000142E64065DAFF0B81D90713B4FE273155 +:10ABD00025E6A6A537059E26A498906DB35E892428 +:10ABE000285C39523F5121F513BDBF1CDAFF2321E8 +:10ABF000B309F9D4C3C633E15A40441C2703BF1D2F +:10AC00004F03F00F5ADE256BDBAB012FFFE68A3DC9 +:10AC100084A5E95A98CFB659E3C52D740E9B935A73 +:10AC200075E914423A92DA4C89A69BE581DA7AA852 +:10AC3000FFAA8CF36D4B96E1F717664DCD1D2C07DF +:10AC400050ECE3B6E5FB6A5308674F62139DD7C625 +:10AC5000C13DF3010F35F9BD98771D7A66BE5B8360 +:10AC600076416CB7CD4BABD2EF4601493D5484F8E9 +:10AC7000ABADA7F940A55A01ED5CD11E9DE2984805 +:10AC800095940EE67CE8FF03244608E5D380661819 +:10AC9000504EC88D88970C9FE9FE029ACF219C2EBA +:10ACA000A902E4434565F99C436B969173E8BFCBD9 +:10ACB000299E681B95FEEF14C5BBFC67571CF0EC82 +:10ACC0002965DFCDF1142B3E299C2ED2F5B1EB1C6A +:10ACD00048EDDFE52F2F8D233E2B6FF235034FB864 +:10ACE000AECA053ACA95E261379DB29C386766CD17 +:10ACF000CC0CBE9A0EED98BFDF32AF8D24103EFE15 +:10AD0000770418640EF2376FEFE44F33FD2C999AF5 +:10AD1000BF5FC6F989D6F98F56BF2D49293ECD228E +:10AD2000078A12113A75D2412ED4258AA27639119A +:10AD300011286A5B4A17EB4B695E9E168BC4E8F8D4 +:10AD40002D79B4D34242EE30AE4B1B143F724B3FD1 +:10AD50007EDF0A63CFB37C5F44EBD3B4C54BD755DA +:10AD6000F9C8F1FF27C518D07DAB30504B4A32F2FD +:10AD7000C0CDE9E48EBCF26781E2759B106F3A0C9E +:10AD80007C9717443EA5E59D5208D3A54A0554F685 +:10AD900048305F8FD94E22AD5205A6354A08E6D518 +:10ADA0007FB00EDBFB916FDB0B947490E6BB8A9453 +:10ADB0001DAEA20C3C2F1301E1699719BC5DB21DB9 +:10ADC000EE27A19CAED39F1199C9CB009317446D78 +:10ADD000895C12C8D20FC7D333C6D586E187EF1A74 +:10ADE000E3735A2C009F1729A987802F7423B23C44 +:10ADF000602B37F2ACE56A736439C82983F64FF1EA +:10AE0000E38910E4774B7D8493A46939E0A100784D +:10AE100085D2317C5BCF4AFA4F294C8C1CCA6F52C9 +:10AE2000793BF2A9A4C609F0D17231F132CA419539 +:10AE3000D8F0A74475943B4E793D1A1F39E5B45BB1 +:10AE4000B3E4E13FAA65FD60BF51F5784EA6FEB0C0 +:10AE50007E3016E07892B94EC9776CE3B79F47868B +:10AE6000409EB6CC52B44D946E925F49037FC0DFD2 +:10AE7000D06CCE3702C887F60181CED71D0E1A39A5 +:10AE8000305F589F30FFA803AE31D693733DBE0BA1 +:10AE9000EB3167E47A24F18808700646C1D3F0BA32 +:10AEA0009CB33C979C66BCCD7C3D1609F13F013EAE +:10AEB000DA263C8E746A917B6A917FA72B4CCF90E7 +:10AEC00081C825D333ED0640EE523ADE0945B32C56 +:10AED000F8EC8B8A6742BF16871CA053D391AF8DC5 +:10AEE00030F2852410F30FD7A7CCF5DB5902E373BA +:10AEF000D2C3E44D908FA3C0F8943FBD24859DE557 +:10AF0000903493CFA411F39F5655A4055CA7839D5D +:10AF1000201FDD5522E5F591706D4F7A48DA3D3AF4 +:10AF2000DCDBCF63FAC5E56F243758F0AA0A416E1F +:10AF30006F5CA582FC148C0439057294F470FCC417 +:10AF400022A0EF3B924DE428D0E5A5B9440B807ECA +:10AF500089E93AED4F81F9C11A8A54B2141892FE68 +:10AF6000B3255FDD097A512EF5ACD4407E97AA97C0 +:10AF7000404A4833F62B47A65E0BFC2897F27546ED +:10AF8000123AA0482AE3EB2FB3EE2A0580C3635F91 +:10AF900077A63D402294C9E766E01C698F70FAF2FB +:10AFA0007AA3AECB61BBCB9C774A61F6CE709EB0E4 +:10AFB000BC59CF92029D39D1E56A03E72357931418 +:10AFC000A6BA747CD0BA8E78BB16C2F036AC4FB835 +:10AFD000FCC4BF30C8A1D8035B8A40FE2E89D4D3FD +:10AFE000EFB582C2E05866C783D99EE2A916F02465 +:10AFF000A909C49B899FF682A9B909E8D71FCA3A53 +:10B00000FF766AB74872363852CC8E2B24A971402D +:10B01000B72F669681DC1DAD1F271E5BE4D8C104E7 +:10B02000ACC37C05F590CBE4130AD7A5B49F9B0471 +:10B0300066DF4961C5003C2994DEB034E93C6E12FC +:10B04000F247CED39C4F4BC09C4F767AB6C27CA6BB +:10B0500064E01FFE2E73FD334A3B27FCA395B7CA5D +:10B060007A6425E89B80735E8C6EB2CAE8D6CDE721 +:10B0700027FBE9FC80FFC309939FBBB3CF2F8EFC56 +:10B08000E59C9FA47A103FE6F892676AB5343303D3 +:10B09000E7BD82CAC619862386FDB85482ED924266 +:10B0A000E25EE00B57B87D00ED2EBF4EA07F25423B +:10B0B0003B381752BDD6A0786D7D612E298776FE6C +:10B0C00018594B53C59F20CB68BDD62F5D8C1FC22E +:10B0D00095367EBD4B106DF835E1590F7064C1EFA8 +:10B0E000EF47E1EFDF3F7F01F2F7531C5FA7E1EF8E +:10B0F000A7006F4EFEFEFDF3D318BE9ECDB7C1670D +:10B10000A6EB3D25367C112E970B78FF93E3030BBE +:10B11000649A761206F7DD91837D6007C8E2606766 +:10B1200033856F5DD3E012D0959BF313FB05CB7C89 +:10B130000B561111C6DDC2E7B5D815F51EA170DD9D +:10B140005E539C5B47D3F705C1861F33BD97EA0F5B +:10B15000E04F90D7B0EE3E7B8BC13F1ABF6D4DAA3A +:10B1600073A1FE707EADB414E4F8D6F2275E5F42A0 +:10B17000F1D8162EAD40B3A04AC0FD9487EB9F4393 +:10B18000A6BEE178A2F83B04F09B7C78EFBACB3006 +:10B190009DACEBBAEA676D240B5E94C28302D0E9E2 +:10B1A000EE0421E3685793D50145A0DF2725061556 +:10B1B00045437C1C3F1D3E6EAF1191CE37AD9CBA0E +:10B1C00013D68859EF6B22DBF7102DC4F50595DBFC +:10B1D00081D1D721E8F9725CCF6901EA454BA95CBE +:10B1E0000D327B1CBE3F4CF53FC0116D1C52603EC2 +:10B1F0001F99F61D89E0BEA695B3DCE6A93E84A79B +:10B20000355FDD01F088261C0961347E13C52CF200 +:10B21000B4B03466001EA20DBA0EE97F4A09B79891 +:10B220000F781F50415F471B59FD36BE3FA6D3180C +:10B2300080FE0B337601C2E18B68A81F27888C4FF4 +:10B240000A2BDB6F14E9FA2CD02403F63B85832B01 +:10B25000719FA51CBAF05DD8F2D1EF87DDE7C0B8C9 +:10B260003D04C63D2B925A007418901213607CDF87 +:10B27000AC5BD20445809E76D32EFB649DA8140F50 +:10B280005275A31E2F077ACF262B2D7C5626B2F59A +:10B290004BE5849EB2D0FF6E17FB7777D51DDE3568 +:10B2A000E550CF87789A4C2A75E86F12A1FB785841 +:10B2B000BF4DF41F8C0FA6C1F8DAAA8157007F9307 +:10B2C000D441E413BA0E26003FF4C94601F057DF1B +:10B2D0003A85ED6F0DF21BE053AFC8E59E46FF4780 +:10B2E000F1A3F0FC90203379763E413B222F4A5265 +:10B2F0001AEE1B53CDC0D26EC007C831BDFF40311E +:10B300002D8FAC22319D56F502FE826097A4508F9E +:10B3100078017F41C4CF7CA063B4B4113C0AD40E41 +:10B32000EED1253ACE56A9F177FF48DB6F3DE08A92 +:10B3300019C4C28F0E3BC25F4ED79F653F3B2C475F +:10B3400078FDB1ED095D82FE6A3C39A8075EE272C4 +:10B3500086F2ED3701AE1AF563E45BE21F7746FD36 +:10B36000B99A5CDAB171301115ED553787AD254AC0 +:10B37000ED65B0EF3CC4102B010F240576A2AB475E +:10B38000E0FE8F185941F957D1449B5D2F857DB65A +:10B39000FDBAAB4961FDD71A82DDFF94C2F5E41A0C +:10B3A00066E246F4E74814F62D885792F6A27DC768 +:10B3B000F60DC0EECC1FF67D9B7FA153AB20D9F6D6 +:10B3C000111261FB1EA0F1A9A291ED46C78B63BCCF +:10B3D0001576B8CFB89D5FD28E5BF65DA3B793C8E4 +:10B3E00071CBFEAD15F8D6620F52FBE9592197D209 +:10B3F0002342E52BE5B376B6284907A73BA9116D93 +:10B40000F2C61511715D2F1735D64F94F195E2D123 +:10B41000D33848F4CCF8CCB4974DFD6EB1037A80A4 +:10B42000EF3C5C2F5F24C4EF03BEDB9CD790B6E2F9 +:10B43000A745210DC827DA0AACB779CA120DE485F1 +:10B44000C9679B1DF834FD7CEDC914390AF2590B0C +:10B4500033B8233184C3D4334EB84CFE1D1EB79489 +:10B46000EDF35C9E1EF4D7797B6ED7817FE937EED2 +:10B4700067E37C4B1735F0472F4D197FA470FC51C3 +:10B48000F997C33316DE9CDF3F8FC572018EFAC871 +:10B490008279A5D46E58DD7423A6754D9BE74AB416 +:10B4A000DFE35D3707ADFC7BA2EF3B4198D7894EC8 +:10B4B00019E5FA893E21057E92139DF5F89D7C7170 +:10B4C000EA948BD27B0DA737FD8F027AA4EE3E0162 +:10B4D000F7DB2FBCB571F2A01FF21D37C27EA88E1C +:10B4E0000A6E3DCB7EA155689C068BAF2D39507DF1 +:10B4F0006C4AC6EE3CC4F94631F7A1928EFE957DAA +:10B5000062E27F835C6EFAA2C53D19FC0087DCB164 +:10B510004DB4EA4BFEE209E07FDCA8344E532DF334 +:10B52000D8185212A807FCBD36BCBD21CA0EFF2890 +:10B5300083C778889449E09724BE18D849357EA6F9 +:10B54000173E1914D01FDBC6F962C43A6FDA3A57B6 +:10B55000B2F8F1A81D48347F661FED2A63A959FE91 +:10B5600009E81F4AE74F45E6FF7A5D4C7C0AFC0B71 +:10B5700072A82904EBA76B2EB3EFFCB87F35D7A5D3 +:10B580000967F3790CCE36C117033F48DB74D33E0D +:10B5900060F63691E204FC452D1CDE9A705C172C97 +:10B5A000F3188D7F3A92F1B960BFB5256B31ED0884 +:10B5B0000C02CF924D524C8FA33E8D7BC0EFB0C991 +:10B5C000C3F29DC904AB1F5EE101FB7093CABEB715 +:10B5D0004596B3BC66E679B9CEF31A2DA7F06E3264 +:10B5E000587E4BB281F5A3AD60DFC90C56AF94F71E +:10B5F000432A789EF7432A9782FE6F2B33CBAB30DA +:10B600000F8E2C58D7A63C6F2B63F5BB928DD8FFBD +:10B61000267F6CA95ECE99D65AAF9CC1136CEA46C0 +:10B62000BC67EAE98E7A0C3E135F997A86BD5E8C20 +:10B63000C135B21E11ECF5568C564FB4D5AB5C9E9D +:10B6400075DCB64A3B3C6DE14F3CB03E293F7DDDA9 +:10B6500065E16F99F3D3764296223F1AC4F3BD0A8F +:10B66000F08791D6622AD797B998BDD664F26B94C9 +:10B670004855B4DC554AA4F34316BF90463CF8BD88 +:10B680008C786CDF55A73F203BDF1A7733BE95607F +:10B690007D096027E844A81C9B2F37270DA4DFD61F +:10B6A0006415EE1BBCC4BE9ECCF46A97C8FD1AF6A6 +:10B6B000F1E97CC9F742383F9467E49017FDAAAEE0 +:10B6C000309D6788CDF7FC0ACB7C22749E21365FC3 +:10B6D000DBF772FB3C87E5BD432EB8285F6AE8972D +:10B6E0004AA19ED808FAB490F2A1EBD905E0071E52 +:10B6F0004D7E8D36FFF6A43E0FCE613A9355F34A48 +:10B7000065E6E76CAA003D53E10139DBE6A77A84E0 +:10B71000C9495CAF52A4710DD831AE435E3406FC0A +:10B720001A3BA7922254F16819FB18F6016B2CE31F +:10B730000ECBDB2F92C8CF1DDC86569A96CC2B1DE4 +:10B7400037122E77A406BF3BE7F7BA18EF06FEF3D1 +:10B7500035B5A27E19951F6EA7FC506995B78C3E32 +:10B760009F50FA80BDEFF21BEEAC7655D322ECD79A +:10B770001CF7F1967F1B05AF37211E6E7ACB4BDC91 +:10B78000C2E8F8959B6EC679B89AAEB4CDD345E5BC +:10B7900038EA71959FF385496C8AC6F43FE00DA69F +:10B7A000725B05B4BF95B54FDC827AD509D7EBA2A1 +:10B7B000FE335716BE1CC6C36E72D087E7616E1586 +:10B7C000D6C54B6FCDC1F16E3ACCD605C50BE2E9BB +:10B7D000138A277711D209F544466E27903F5A9273 +:10B7E0004B913FBC809F99E8CF24683F97323D46FC +:10B7F000A2147E6013AD4717C3C8F773008AE172C5 +:10B800008D956F49C6B19FAE6403F6EB2D35C81A0E +:10B810003A0F5F8CE3C3AC1F63F8C8A9E4FDC5D839 +:10B8200051E6707925EBCF5B3A80ED3D510AA76573 +:10B83000FD507DFE1FC027815883EDBB1261781C2F +:10B840000D5FFB0F4FCB1DCCC2171979114739D1B2 +:10B85000996C42B9D1CEF55967915E0B7A642BD7BA +:10B860005BDB40EFA0DF82E907552A62F24362FB0F +:10B8700037B47335F88F4A3CB3B9BD4BD01F80FB4A +:10B8800038292AA5761665FCDBED12E3DFF64A0DB2 +:10B89000CF99B77879BD2A92DA29B07EF07CC3CBF4 +:10B8A000FACD85D5596259E76A1DCAF32D793AEE6A +:10B8B0006FDB4983E726C817F1BC94C0BC4FD15158 +:10B8C0001F2A7242C5BC4FE7FAD9DEBF132F4A5E6A +:10B8D0009D0AFDFB42BCBDD0C0DA17DBFBDBA2B08A +:10B8E000F13AA44636BE8FE5C7EABF43BD89C11F02 +:10B8F000E2ED49136B5F6CEF6F34BAB923B5B67DD7 +:10B90000A9BF9CD2C9A65752489F606583EDBB5A18 +:10B91000DD686BF7D25BD36CF274FF60C969F9E53F +:10B9200038F089457E1FF726AE2679845C27851777 +:10B93000B646695E4E4C1668FE81D0DC4D4B271131 +:10B94000D2D0B400D7D76A2E37D6345DC4F25DF5B5 +:10B950000AD87DAB5302CAD7D55C2ED419240AFA73 +:10B96000E73289F91D4C3D4B753FEAD9BAB05DFF0E +:10B97000D4A94CFFD445ECFAA7EE3EF9F8A06DDF50 +:10B98000AE4D06BB7B4DD3225C2F66BD355D3723A4 +:10B990001C6B088B135803F21BD75362722DADBF7B +:10B9A000140848E138BE79DA6490AF4704EDFE260A +:10B9B000F06B5FE7C3F325277ECCF38D7D667C08B3 +:10B9C000D70FAB1D7107CE7435E80718574A209C76 +:10B9D0005F75BC0B603D5138579B7A89CEB7767A3C +:10B9E00066FC2361868B79407C5CB7141F59CE4B73 +:10B9F00086F107F2D922DFBF2ADE16F0719672B8FF +:10BA0000CEB4BD59DE0678473D307CFEF235C0CB62 +:10BA10005FCB4FDB32FCC4EC9A061FDA357F3B5F0D +:10BA20003139FB55E9BC4F647E7B22D1794DB7D0CB +:10BA3000CD412FB35D23E013CEFFC179356B249D3B +:10BA40009C783AD2E0135D54681E39B018F7D7F7E6 +:10BA500028DAD520B7AE03FC8D033C32BC1DA7FA13 +:10BA6000B0D572FEB3BAEBE657AA28BFD575E68506 +:10BA700004CBF8759D45ED7084B6FABEBC0A6AEB3E +:10BA800091EB3A199ED7F4AD9CD76AC107C57729C7 +:10BA9000D8CB4F727847E0BB94E3BBDC6E2FD795D1 +:10BAA000317BB92EE6C0772A3BBEEB38DFD079B6C2 +:10BAB000DE81F35C94EBF567F0541F61FBF67B824B +:10BAC0005A10E4E971AAD75AA9DC3A02763DCD1F93 +:10BAD000ED9B195C09EB4B6276FED1BE592CEFE170 +:10BAE000F9FB6839F4EFE7F5EF9B155C99451E3BD0 +:10BAF000E9513FAC8F0DF3BC01ED91CFA84500E7B4 +:10BB00001D5129F16F12EC1FFC3F7D17FCA747FD6B +:10BB100037FD2E85D5B2EB6FB3DFC246E988D59EDF +:10BB2000F6ADA2790B5EDCA5F6BC442CF9221B3CD9 +:10BB3000C43F3B735E69EA09F8FBC0124F200FE671 +:10BB4000D583FF74C1C55587BF0EF65458D4DC5950 +:10BB5000CE9D3372489B2959FC6274DA3387F50C09 +:10BB6000F82DC2C5A73DE768493E3BCFAA575C12F6 +:10BB70003598CA2D7E81A67F99077CBB3FCCCE1518 +:10BB80003EF1AB3BDC38AF4D8E73A8942DEF6A6A63 +:10BB90009F6B3DFF71733F18DD9F6BD67387766F88 +:10BBA000E220A8ECBCEEE4A60BE75ACE41A3BDBC54 +:10BBB0003EC539F8118A6A1EDA92050F78D200FE66 +:10BBC000A8F4ED789EE222CCCEF3A9CC4FAE50DCA7 +:10BBD0000EE0BEA3D10376A6AF8CF9C9C6CB8C7F8D +:10BBE000C8B32CCECAC7E54747D9BFAB50EFB3495E +:10BBF000F676048CBFD9997A64B0B1B3988EE39984 +:10BC0000251188FB22D1303F57899FF65C85EE6F66 +:10BC1000F07C508A18E897A6F966B7FD1CB6440672 +:10BC20007E59C1CF95385F0C9FBB47CFCCBF76A65E +:10BC3000F5EE48EA338F4DC9AC978DB05E28AD7AEA +:10BC4000934B318E703C6944FBEF87626216C0D51E +:10BC5000B46CA9014BCFB5ACF177AD340D4DD066C6 +:10BC6000C05168AF42D2F12A9ACFD1F640A8DB7A10 +:10BC700065F6223FA55F083607749FB1A86D710B6A +:10BC8000C45B854AB419620C865BB0E835A83F51A5 +:10BC9000FB18DAB77BCE5BB414EA4F23189F45C874 +:10BCA000371681FF20F4772CDFD6CEDA9B76492732 +:10BCB000E55B80BB3D999E07707E4366FBEA659C11 +:10BCC000AE1EC940BFA687F22FF82515298179A598 +:10BCD000E99579C7802F23EC3CD2F45F6CCE4F5CA2 +:10BCE00002F35B171F5C025DB8FCE6B95AAA0FE3CA +:10BCF0005AF8B9F3625A00F6F22765DA4EEBBAFC4D +:10BD000081CCCEFD5A9307D14FB895AA13EBF9FE1B +:10BD10009619A41FE86DE6FD6ED2887C1EE3F198AB +:10BD2000A658E0E7234A589D017C552F8B3C1E53B3 +:10BD3000AF07F8B6CA46EEF9700EFEAA0BED1289EF +:10BD4000C4098F4BC373243C772BA67892F93E41EC +:10BD5000ED1F5848FB6B534333B6209507AB87E57F +:10BD60004531F4D7DF07F4BAB1EDD98532E597ADA7 +:10BD70000146AF9BE57D9B10DF32D79724EE01FE95 +:10BD80009323849C0CA11C4BBB31AE8DF4959AF28D +:10BD90008B822AC7C4C37270ECF355291CABB6DA88 +:10BDA000C78A96C67DA05FE271A3275D82357E6853 +:10BDB00027A76F6BB2C116DF2A87991F5F4EAC9D14 +:10BDC0000974AD11125B71FD503B8258E4AD1C1E2D +:10BDD000C275EF232B72D39454BE43171C80109C62 +:10BDE000079307908FC8BE494C0EA8E67A73C4F932 +:10BDF000F592B4F71CC8B3382D7799F427ABDC77EC +:10BE0000C661DD23678F8B549ABE3FDFEA87172315 +:10BE1000090276BF197FF520E75FB35C69FA01D6A6 +:10BE20006F4F36CD073887E1E5FB1C9FC937B73127 +:10BE3000F82771F964CEEFA5B7D6A4D7517ED9BA49 +:10BE40008AC24C5962EB2D22F2AF6F1215D8459978 +:10BE5000F5E45EC5E6678EEB9CDFDE61FC9FC4F116 +:10BE60009F06C422BF0F61DE4719E0E7942FC87E0A +:10BE7000071EF9BCA58221DC97BBABD97995B37FAE +:10BE800072E0F4F86F8BE8ACBDFAD5E8F02B79944A +:10BE900078B826FA379B8710C2DF17B47476460F3E +:10BEA0009B7830E962E6E9BE2DF7747EB0CEE4E718 +:10BEB000A84FDB93643EEEE7B5E5E8EFF4682405B0 +:10BEC000E7CB9E308BABF574F62C8573549A8F813B +:10BED0003CF596B2722FE7676F67A2B3288CF9180A +:10BEE000C0A44458B9C2CB3BB53AC303229ECA3161 +:10BEF0009856816A78401F510180FE0E02AA83E2A3 +:10BF00006F079FCF44ED8FC2424855362EB9C55EAC +:10BF1000EFC71C0D93D49E38C80BBA16D12F32A987 +:10BF200074F90150F7EE281B7F6269B819F37C1E83 +:10BF30006E80B312F907E761F6F7233E6E8E9AE83A +:10BF40005960F1C398E5F7F2F23CB5F100B427D59A +:10BF5000F6F2BB393C7E680FE535F6F2DB79FB5C27 +:10BF6000B57100CB3B59796EF48EF40292A9B79D5E +:10BF7000D72BE6FEC4ADC93E5C473B939DF399FECB +:10BF800060EBCAACBF99D7EF48F6CC0739535CCE0B +:10BF9000DA9546630B75CBFE5C53D87A3053E0FFDD +:10BFA00008F8D9C006A0F0F829BEC0AF09EB13FC11 +:10BFB0006FEED8287C4F689EF2EB64FAC7ECB77E30 +:10BFC00001F625A67FC0E4B7FD87E764E53BD24ACA +:10BFD000F9CD22CFC96D94EFAC71ACB778ECF9B55F +:10BFE000AA3DBF2A62CFD768F67C75D97C5BFFA5D6 +:10BFF000315BDE84635BB216FD71DDC9A6B9351411 +:10C000009F3DDC0FDC9DAF16C03EE0F67C169771BD +:10C010004FB211BFB782BF18CE6FC01F88FA328EE1 +:10C02000691FF80965F08F31BFDE7DC9AAB93534C3 +:10C030003FB1A9656E0D958317727C537EB1D947C8 +:10C04000D46EBA5081F3B8AA78DA857CC2ECA56EBA +:10C050006FEC0AD87F4DD275225AF077A5C2CE1365 +:10C06000260E9FDFF5DBF4CD957C1C533E9228B560 +:10C070007EE9786D7CBC68233BAF52ABD51930DECE +:10C08000150A8FFBD1A86561894B541B8774307DDD +:10C090006B04FD4A80AF3B9FC2530EEBC92060A7E3 +:10C0A000465669B8AFCB294F83AF9F78CB348C2BE2 +:10C0B0000A54A60438779948ED6898774182E2C51A +:10C0C000C237BED2065BBE3B8FCDB310F6DF33C1A5 +:10C0D000FFCCF6F5075D0BAF5766817DA6B2B8C2FF +:10C0E000C0EA0290478392BE8E7D272CEE03CE914C +:10C0F000A81D11BAE82A9457D23216FF46AEB2E311 +:10C1000039A37787E3EA9A945999F36613EFE678AF +:10C11000444A14003FFF5C48FC00EA91B288C76AB9 +:10C1200077B9FCAC1F277CAF297A33E0CB84EF17BB +:10C130008ADEC2F2BC5F42FB0D00480943A4706B6B +:10C140001CDE3B2138277F24DC6027798AB2CCAF04 +:10C15000367BDCDB68E7E8D40EEBC57990213CC781 +:10C160007C5848F4413EF7901BEDF9DC6A1E0FC580 +:10C17000E31E43E3FA23332C7CF79CC2ECB9AD6693 +:10C180005C24E1FB3F1731F51EEE3364C8D3F5B5EF +:10C190005761E7AF051E62E4E482BD4D0D779077ED +:10C1A0001B15BC7F3261154538E59B7BBFA3A03DC5 +:10C1B0002AAF1D8FFB47BA86D310CF2BDFD28EE775 +:10C1C000DB0AC43597C03C7B30F5917E4CFD70D3C3 +:10C1D00086A6413A1F4855A2A2BDFFFB9583B70230 +:10C1E000911679124FC1FCD67A126741E8E1879324 +:10C1F000123F01587FCEE9F2A6A43F0DE596FA3F23 +:10C20000073A0DD797597D6AD63D877822FA3E8640 +:10C21000BFECF1F596B8CECFFD163E214BEDF11BEC +:10C2200094EF7E89EB1DEC5F9725FEE20CE34C61F9 +:10C23000699EBE7F8D9FEF3BFAE7EDFF29E79C20CB +:10C24000D86D2F75BA306D6F2AC1F46D9174578116 +:10C250007DFEAF2E92CD6F68A6836027502171843A +:10C26000F3C3BBC0B7142F2B255581FDF74AE3CF8D +:10C27000F3ACFEE29506F3FB50865C02F47FBB6DE7 +:10C28000816CDD0F9BFB6067BB8C7F6A7012EE1FB9 +:10C2900087EF31B0F8B8BA2A1301DAB7FF3785FB58 +:10C2A000BA0332C61599F690899F2347595CD77512 +:10C2B0003C2E6E158907A1F04322A2DFE643F2EF80 +:10C2C000C199163E97DD3CAEB453467F8841FF07C7 +:10C2D000FAE2DA1ED9E62F59D367CFAF26CBC7C310 +:10C2E0003E7475AF4C529417AE2316FF0B9DEFA70B +:10C2F0000ADB8FAC218DEDB09F6BE3FE823A95484F +:10C30000E3A8FDB9EE991FCD067F91DFCDE4F77B61 +:10C31000741FA659E2F3AFF7A714D8571E7D6AE63B +:10C3200065F309B44FB517E2BD1B92D5CF5BDF694A +:10C33000876F2CF89DF09A7E92D1E0907631BA3AD0 +:10C34000C72D749B71A4C619DD173CDFADF1FAF659 +:10C35000FB8263B55BE8D648B67B8663B55BF25774 +:10C360008EF78D51DA75868D38C89DE175E789E3C2 +:10C370003A1424B6EE3A2363944769B9EB34E5A541 +:10C38000A76F0FF142702F490790703F9D9E8876EE +:10C390005892E0FD8E7D72FCEF41CEEEFB0F17311F +:10C3A00004C893FD2ACC4B1034F00BE8EA2558AEB4 +:10C3B000FFC615168BF8A281FA1F2F7D10D6E9252E +:10C3C0006E99EBC30117F4ABFF51AD017B729F9CDB +:10C3D0009E9847C7AFFE0149001F2FF863BA1EF0B1 +:10C3E00075DE50AD0C2CF0CBC75EBA12FAB97E6880 +:10C3F0008904F9ABDC2C2EE8C39FEE994D683FFB16 +:10C400007607481AE097520AEC9FAF7FCAA543BC53 +:10C41000E70D3F0BE8D0CFF54FAC7B60191D5F787F +:10C420002680F0543FB1E661E6BF6BC17EAE7FFA75 +:10C43000D2DCED7C5E748F42F63573FF9B919E08D3 +:10C44000F705D6B9C9356057987830F973917F816F +:10C4500004F7BFAEDF9587F6CA305F4BB47E394430 +:10C460005F926B9667B1579BF9BAFCE06316972A07 +:10C47000EC7AE16A9C5FFFB771BE02A5C83B74BC51 +:10C480005B39BE683D9C87F188909A42CB3F7844E7 +:10C4900060F3EA9FBEC35B04E3EF50EA50AEB1F332 +:10C4A0001813DE45BB16B4C2BA5EA4E61503C9175D +:10C4B000FD6C37CAE70DBB5C69D83FD114F7513525 +:10C4C0007E97FDBE15D1FD02E583F5281269FAD4E9 +:10C4D0003A947BEBFBB7E27E73C3B3F6F54EF11CE7 +:10C4E0004B53F86F78C3155B06F9277F12847B3AAC +:10C4F000EF0D3C14047AD071562A741D7CFD73BB79 +:10C500009F18FAFF3C34B23F6A57E0FD970DFD9B40 +:10C51000D9780E79F21EFCA360E43E7797DBEE6FCC +:10C52000F894BC361B37B7BBC665D587C3F7BDB813 +:10C530007CB961F7A7F71B74DC0F9E78FF7EB89774 +:10C54000B0F62F7FB8FFFBB06FFB17AF0A7271C355 +:10C550004FDFB9FF7B149F1F3EEB16814F3E7AFEE3 +:10C56000270FDF43F31FFD765A8540F32F7279F5CD +:10C57000D19E3F8FD7683FB73CBF7802CCFF96BDB6 +:10C580008B269CEE3ED94794AF526EAB1E4BB17DCD +:10C59000D5B3B4BF0934BB8FA70EBABCF4D44B9348 +:10C5A00001BE0F0FBA31FE6083C6E24DD6F7AFC3AE +:10C5B000F86DC8DF46F1BBFEB10EBC173412CFC612 +:10C5C0004431C2D63984ACAF7FEAD2BF3FAF1252FA +:10C5D00039A6417F6408F58BB3DD86DF507A9E3B38 +:10C5E0003AFD3E255F2880F70D8F6D66E33AE8F748 +:10C5F00021FC63EE48FA0D8EA0DFDA1FDF03854FC2 +:10C60000658F4F36E9B76EEFB74E7B3FF023C7BA61 +:10C610001D0DBF0DDC3FFFB85B1F72C3BA7B22C785 +:10C6200088207DDDA965B4ECA3B63F4C26942F4E3F +:10C63000CA4357C3FA1B7ADEAD42BCC0CAE7DF501B +:10C64000408E7DB4F7754543794EFC02B5AB3E2272 +:10C65000C37F036087E3FD14C0DF838134F80DD608 +:10C66000DFD680745A9FBA6429DC4FA3DFD19FB014 +:10C670003EC5F87E7DEA85154216BA4DF38498FED4 +:10C6800048E5733B314347A10AE8777809F0DB6856 +:10C69000F433E7ADC2BCE758E868C8B84E475B8FD3 +:10C6A0001FED704B105FBC81DFA336EDFB0D29E160 +:10C6B0000D92659D9A7AFFABDEDF2CF28CE2AFE241 +:10C6C000F31D6B1D8F3D9FAF86AF3C58ECB346E228 +:10C6D000ADB9CD8D72F8ED196E8C833A2C6BFFB429 +:10C6E00091AEC7A15765B29336B9BAE284AC653949 +:10C6F00007F99DC30EBAA649689F40DB5D63303DD4 +:10C70000E23C474ADCE6229A053FEBDD436F433CBF +:10C710001EF98597607CDCBF78713FB4E17E6F0ABB +:10C72000F4DA4B7B3F7B18F4C9473F7613A6E758F2 +:10C730003CE31A95F57162EF67F7FF1F881786C60D +:10C740001AD4DF78FCBBC0E7F70A044C93DF3F91B3 +:10C750007B0EDCCFBA81D68573E835BFF8FEC5C045 +:10C76000A7908773D3353989AB61DFBFE6DE090255 +:10C77000D8331B7C837F0139F4FECF738102E4C37D +:10C78000BD9FCD067ABDFFF433E780FCA3F6A1661A +:10C790003D3FBCCEFA0E85C57EBFA17FDB00F0FD1C +:10C7A0000D50CEEA0BA7F89A013B1CC607BBE486E6 +:10C7B000677375EF39B67AD8CF06F7D0AD31DC4F55 +:10C7C0001A8522DAF4E942A0F30DBBECE3AFF630B0 +:10C7D000FDBB41195ACDEAF714327E18C076377B7B +:10C7E000981C37CB9DEDCDFA377A8A6DF5CCF6EBF8 +:10C7F000E15C230BBFFFC0C3FC2D37ECFA725AB6C5 +:10C800007B9923C761DFBF231003FC24648F17F7D4 +:10C81000BB6B95F4D450397EC7770FCC7C211F17A2 +:10C82000F2604F3DC7D7E75A1FCB3FCDE3ECD706A9 +:10C83000691EE0F50C3E0E7CB3EE192F01FB6CDD9A +:10C840002FA8BD44F1BAEEE95F4E06BAADFBC5466E +:10C85000A4FB3A771AE93DB4C74D208EEA833DAF79 +:10C8600062F907727A328CBB6E9FF7B0F59EA09981 +:10C87000AEEB77F3CDA47D3E70DE7A0CFD5F69F4FC +:10C880009BBBF8B91B44AEC1FCD0FF0CF943053883 +:10C890005FA73DFD0B4F51567BBD0DCE45C08FE9C7 +:10C8A00031886A394F96088B07FD4F07BF411C1529 +:10C8B000EC3315C023C5872C313FAE1C09CF003E99 +:10C8C0006E8F2C47FF5657B93A03D6E5F39C6FDCC1 +:10C8D000B47FB48FF7F7A2FFC313953EB1CA0BEF35 +:10C8E000313FFA3B49A9E57B31BAEEF1BBBF9C7EF3 +:10C8F000B79EFB8429DC363CD9CFE39F13183E8CCE +:10C90000809BBD33400C17ACE7CBBDC4FCC37DEAB4 +:10C910006FCDFB32522B2BCF338B5B59395FFF1B13 +:10C92000EAD8FA76D2EBF27D1D781FFFF27D05F58D +:10C9300040F7CBFDD3DE01B9FE1CC856D8CFE7B90E +:10C94000911EE7EE8B5FFA4D9AFF87862928AFCAC2 +:10C95000FBE3174DA7F9AB1A4AD08F37C8D7CF954D +:10C960003B4443A6F4DACFE3F08CEF0A08FF35E04E +:10C9700052A00D57124D619BEB14E2B59EF407587F +:10C98000BE3F1FEEFB5ADABBFCD0FE4601CF1FAF05 +:10C99000F88FDF2C065CBEF99B236D905EF31A5175 +:10C9A00072E8B82B9FD2DA993B85F7B78FF62766E6 +:10C9B000FACBE091F98D88E441BC64F0E441BC9984 +:10C9C00078A235F1BEBC05CF18EF6DE2F9F2C0C117 +:10C9D0002B003F9707A6EE27C191F874DA1B4EFC97 +:10C9E000FE118AA83E7BCFA3FFC543F1F5BA473FAE +:10C9F000E541BFD1D064A918FD482E2F6DB7DE9553 +:10CA0000386B7C09FA9DA6E503DF0D64B76733E355 +:10CA1000B175F65B128BB07D5C179B073F57FA2D03 +:10CA20006172FD0F50343703FF6F257F27C07730C9 +:10CA3000E77119ECB72B495A86F6FF400665A08BC3 +:10CA4000936EF54457A0FC5A926E073F3F85B7C0DE +:10CA50009B9F8197440730CE8BBC7666F7CB46A46C +:10CA60001E0FF18CC7781B84BB6EF0E324E0AD8E03 +:10CA70008201FA10C8C2EC0C7EAFE5D0BB5F5ACB86 +:10CA8000C970393BD718EEC7D385F7912DF56C7A6D +:10CA900006EB09D9FAA1794B5CC9C83C83C3F9BD3F +:10CAA000CE13C47705B2C0458CF18047F38FB53FF4 +:10CAB00026F49F0DEFB95CB879674D27D5278F868F +:10CAC000060A3D347FD1E6875B21CE7137DDE6C1B2 +:10CAD000F934CDD718D590D7AF86FD66BD44978A77 +:10CAE00025AE69B997E99BE55EE62FA6E506945F5A +:10CAF000EC65FEA3BA30BBE2056FF744A95C3AF2DD +:10CB000058C5AFCFD646A7535DD729B796453F1135 +:10CB10009D68E1D9EC3E1BFA6F5F89196E57E65CA0 +:10CB2000FEABFA5D4324866998C43135E32F22A415 +:10CB300007D342D28F69940C603A990C61AA1155BF +:10CB400064FCCED65B318961BE94C431DD5DC4EE38 +:10CB5000351C117CB19D59F40AD523AF2FA6E51BD6 +:10CB6000FFDD857102CDDEE2AC7AC6E5B9A8BAD5A3 +:10CB70007A8FEC110FEEE377376B4807F37BB397AF +:10CB8000C9C1662FF36FEE6E66EF121C79C413DB1A +:10CB9000497B3B1A204A1E1DF7E8B6378A21FECB97 +:10CBA000ACF76888E9E9CF0F3F7336C4E97ECBABB9 +:10CBB0006FF2E2BA48237F9AFC52EFF133FF7D9780 +:10CBC000FC8155CF68DEF816901B071EF7A17D7A11 +:10CBD000D3ED02DAA74413703DADE2747A34D4FF8A +:10CBE0009E0BE461B75B03B9BCAACB7D18DF69E992 +:10CBF00059AC5BFBBB87CF83F4FC139E4FAF1AE3AA +:10CC00007EE32AAA7881CF9CFD1032290FEC7AF4BA +:10CC100095D8D63DF3CF9AEF7A99DF3D3415F9B91F +:10CC200028C8FD1D6D4A7127A54FC7E50A9E379993 +:10CC3000F1547B38DEB46E9280F62991E1EF2E7EBE +:10CC40001FFB31AF0BFB37EBED31E7A313A73F7DA4 +:10CC50000FE04D316AF9A1383BC749293DF8DED6CE +:10CC60005D8FB8F13D9BE9B597DD007266FA2E6ADB +:10CC70001FD1757DA7908AE03B41BBDD31C0E382C7 +:10CC8000B3AB3E86FCF85D6E0D609CBECBAD035E23 +:10CC9000FF8797D92D5353372EA4CB97BC7F79AA02 +:10CCA00010FC6E1AC46731FF55108D8467D93B2D77 +:10CCB0003770DCBDF7D8A2D3BE47036AC9B0C5BF81 +:10CCC000F98861934B2147BED051BFD8563E11CE53 +:10CCD000D4A93C98E827E9004D776F321680FEDF33 +:10CCE0005C4762B0DF9D048A91D277229527F06E6F +:10CCF000131C83F842105F48BB09613971F1F25C83 +:10CD00009A3E20F62F05A21F85F9E743FCFED0AB23 +:10CD1000AD45B09E3B8546BF75FE092FC699F1F91A +:10CD20005FCFE338683F04FABD6BD74C15F010763F +:10CD3000EBD7013CEFEDE6F4D875C17540871FCA0B +:10CD4000F19540A7F72E57F8F769D7C2F7F2C73E1B +:10CD5000BB1AD2E9B5E351EF2E1ABCF1979368BD27 +:10CD6000F735827E935CD21F84FB2864173BAF2883 +:10CD70002F232988DFD90D13817A292585FDD1AC90 +:10CD80003784A91180B43AFE0DBC1F2FB13C8553E6 +:10CD900007BE2F2F4B1703BDA71FBAEE432877F905 +:10CDA00018DD1F25868AEF41BDF5935FCFA3E3DD34 +:10CDB00035B718F75B8F86626F7E9DE2E7AE192468 +:10CDC0000DF18E1D9B7D787FFA0A9F86F8EAF87236 +:10CDD000280272A5B45A498B0897E19E4CEB6D7EF0 +:10CDE000DD857204F0ECA940FC93204D1F98527E23 +:10CDF000760381F8B5C1EA563CD7D70B965BF6A10E +:10CE0000BDB27E39C43BE56EC95D1CA6EBA7D78BCE +:10CE10002C41CEF79DDD06F760EEDA4B6539954B78 +:10CE20007799E7736509AFF5DDAC884FB0C587DE4C +:10CE3000E5E5F54A135E2627135E7C27EB2D37C305 +:10CE4000DF5E0FCA9FBB6A2B8A715FB86D17EE1F3A +:10CE50002EE5F37BEFCBD464F05796EE72E3FCEE55 +:10CE600054064458F7C6D304F703777DF3CD230F58 +:10CE7000C23AE0F74FAB7C793C7E39510070DD0956 +:10CE8000FB1A7F068EEB55163F35C7C7FCC4153E0F +:10CE900066B7C738DC746CE7BA8FF966A13F3CDD32 +:10CEA0004AAB6CCAB918FDE1553E7ECEEA61E7B7E0 +:10CEB00059DACDF1811F7DD91569880334DB99E7F3 +:10CEC000B22FBFB5E6EE6B811FB7796240E7F72E50 +:10CED0005F5D00FC6BCEFB2E075DCD794C97481A49 +:10CEE000DE4D23FE5831CCEF620EB7594E6752FC2F +:10CEF0002DCB39FDC53EE627BED3C7CBCB58BB4CA7 +:10CF0000396F1FE4F7AC4B9DE54C2EBEFCD69C77E9 +:10CF10001FA4F06EDFEBC175B17DDBB348A7F781CD +:10CF20003EE519FA805E023A7698EF5D442B510E89 +:10CF3000473DA4D553914D3E31BFB4198F69CA897D +:10CF400051EDC0338DEF8C50453F9BD981F067BECA +:10CF500007B5393F713DD0D35D3BA0807B6C7DAF81 +:10CF6000B010B6018B5DCB307EC4CDE3B79DFDDE46 +:10CF700099F4C05B3D2495A43BA629107FA1627A59 +:10CF80003219C1B437A961DAE2637615451BEA9B11 +:10CF90002D5C6F6DE6E9F738BF99A959DFB487A416 +:10CFA000320F8B7B2D6B477F8754AA1CC6541D8E76 +:10CFB000276801BE2209923DFE9524F03D928785A7 +:10CFC0004407D41BCFCFF1C7D7B273F76ECE27A6D5 +:10CFD0007FCE9CDF760EC7760E57CAABD9DEA7820E +:10CFE000780CE45FF35D2B7E1FE434F81F14B2E38A +:10CFF000FF1EC0FFBA9EC34B0A348CEBC2385233BB +:10D000006EF48FD52475BA786E271D7297B17704A8 +:10D01000362713F8FD64B201D3DE6423963F2CC497 +:10D020007F02E3997107A3CDFF31BE0EF69872E03F +:10D030000CE799F2C69FF4F17D89F5DDAFB1F9F304 +:10D04000CCEA1D81F8633A9F63106F3C65ECF3C333 +:10D050008D77AE45FFFA0FC5C42F61DE9FDDF10D60 +:10D0600003DC57F55D33907FA8BD7800BED7E56A35 +:10D070007F221867BC7531C419D7B9B5A7217F5570 +:10D0800045C3627827B26E82762BEC33FC5BD72ED9 +:10D090000E43FE2C8271C65ACE3DA8077A7DFAEB6C +:10D0A0003EB47FE53C789FC2B4DB469F8FFD7D8A0E +:10D0B000F9B0199F857C62E0BB2B9C4F287FBCFD9B +:10D0C000B7F0C70F87D7A787F1C70AC61F77C27AFD +:10D0D00095911FDE3D137EF888F3C1104FA51CF318 +:10D0E0005E0CE3072F5FDFCEF13FE7EBC85CEF5448 +:10D0F0009E755AE59E2907C7BB587CF30B57FCF475 +:10D100000AD0EBEE5D538B615E3F9D942A84B8A6F6 +:10D1100061F9213746E09CB03CFAA7AB35BA8ECB1B +:10D120004B496A0AA6E9E2223AAF30AFD7CBEB4DC2 +:10D130008F8EAF67EFD9FD6D7459E58B0773F233AE +:10D14000F2E4BFA0BF480E9EEF26046607FC6DFD0B +:10D15000513CA29E00FB4FE1F60D3C014762B1B38A +:10D16000FF2BE0FD7FD53E97248C889089977277BE +:10D1700035135807549E2F00FC797B7718A0B7729F +:10D18000C8D02B100B64F2AD7216E327B3DFCB735C +:10D19000981CBF3C4718BE4703B6F454FC07CB7736 +:10D1A000D13C5C270079318DDFAB29233DB81F3E90 +:10D1B0009BF4635A4E06303D870C611A23AA0BD2AA +:10D1C0000A1273F138A8D990AEF5247E0C5BA845FD +:10D1D0009EC465C037100725B8C0EE593F0FD6D999 +:10D1E00095E6FA71EC53093F7F186BDF9A4BF46BAD +:10D1F000907F467B77948C7E7F2866895B36EF0F25 +:10D200007D857B1D8D309F11F73ACED53EC67B1AAA +:10D21000C6AB8B5F8BC0BD0C6D0FE403E39E43F97F +:10D2200019825BD9D46E7E28E7D72FE33BBA4BF542 +:10D2300034C2F060F6783A339527B0F8BBD6BCCB51 +:10D24000548CC3F3B0F33489FB89CC7ADBC1A99940 +:10D250003F320EEFBF7A1C67FFCBC5F8ED8C0ECCCA +:10D26000DE7828C71E6F688EDF1226FD70CFCF953F +:10D27000470CD7B923E169CBB9BA9F72C2F03CCC55 +:10D28000F1CC78C7AF1A8748EDA287804E23DF1B09 +:10D290006270D2F5F308C06DF627A9F63844277EF0 +:10D2A0009ECC61766F5D8EFE38F46B89DF7B222722 +:10D2B0003F6BFCDE93D03FE5D3A74EC7A72FBCF64C +:10D2C00004EEEFE43C1FDAFD2761834CF3EFEC70D2 +:10D2D000E1FDF2F7553D673AE5C7D63B4A6206AC39 +:10D2E00053EE57C9E5FBDDD6F12BE2102FBE35C654 +:10D2F000B5F7C0728CA378A75A5C0A7152A99749F6 +:10D300003FECCF72B8FFE3CAE03866A7345F86EF20 +:10D310008F6FFDDC55F826D80B5D0A01BFC98BDB8A +:10D3200014CC6F695614B0EBB7FC73E22C38E7FCF1 +:10D33000CF008BAB4CED506ACD77D8F01DA159F1E1 +:10D3400087B60899FCEAC872BC77361490900F8EA5 +:10D35000F55C3A616E18E2CC415050B87A4B4416F5 +:10D36000F76A88ECDC6D3875B173359677E23FC8A3 +:10D37000CFAF9CDF7F1564FAB8BE4AF282DC6AAF99 +:10D380003A868727C1BEC32CED7161BC184D2F04AE +:10D39000F882FA4249A0F005A32922D1FE3ECD61D0 +:10D3A000FB3E5FCF4C11F096DB45B2C6977D9AC32A +:10D3B000E6EF2B231782DD11D4458CBDF4C13B6E03 +:10D3C000E563B7FF3087C5F7F5F07B9D27E4C42BF5 +:10D3D00060F29DB83B4F3088857FFD6C3EEFD0FEFC +:10D3E000599C5202FB3FA69BEF8124306EA9ED476A +:10D3F0006F18E0376A9BC5F8C0DF2778818FFC295A +:10D40000762A1CAC8AA31FAA3DAC209C278404FA70 +:10D41000DF53CDCA45F8AE5F15A54711A608EF89C1 +:10D420001F7D7B02D0DDD7D553608D4FDA020F20F0 +:10D430005378BA391F95541DC7779046D0A7322626 +:10D44000029FF84699FF778376BFA0790F27D0CB4C +:10D45000F05652C6DAA5645238DED2FE2907DF390B +:10D46000FBFD5F396C3FDB26D3F9027D3B1502EFF4 +:10D470006D8855EC9DFEDC4A3176011D67E7792CFD +:10D480005EBC9BDFA6F3856F8DC0794FF7AC58214A +:10D49000C07D92F3AF51CDDEE7768ED31660F0BF3C +:10D4A0005729E2BB96DBB7CD9E0C6FCA1D0D0C450C +:10D4B000C27E2867706C0FF8D1BFFB5E65C510BCDB +:10D4C000ABFF9E7FED7841B3F6C3FC8BA562AA103B +:10D4D000EEF15DE89FD4DE5A4DF3B0EEA93DDDD10B +:10D4E0005DDA0EF6F4C9C75C9CDE8DB89E5F4C9584 +:10D4F0004C8450DDA38682F75B530B62BF9E0BEB1F +:10D50000769B88F1462713A65F4CF301DF3F50B9A5 +:10D510002908FCF0802E55007FFC25B7EE423F85A0 +:10D520007F5B67C807DF37B78A027C2FDD56F1AF14 +:10D5300065B49FD20521AC876F5BCCC6DB52C85760 +:10D54000DDFCFD7E750949411C5F5E357B27362F6A +:10D55000C6EED550F9C1F61B55EC9C4CED39F87D63 +:10D56000D0A76A35DBA7AAD1BB6EC63C3F8F516BF3 +:10D5700014623F17607ADA1C8FA6FE86104BC743F1 +:10D580005A29A667A3FDCADEC9348FDFD40131BD95 +:10D590001AFA2D170FD7033C61DFE17ADAFFFB2679 +:10D5A0001D0DF3DC8ECDA9FBBCA929905327B9BF73 +:10D5B000977E2F04BFD3FBA65F82E733E543F83E97 +:10D5C000BB7A60288E701BC7AF8279749F77D9644D +:10D5D00088DF517BDFF83E7EE7E748CE797D981BF8 +:10D5E000BFC50F7C993F5E487079A98F87F30B36D2 +:10D5F000CF60A588EF67E2F90C85EF9DEFB2F744A5 +:10D60000E0AA13BC03333C8FDBCCDF4D60F715275A +:10D6100083ACC5734ADA6A3CBCBFCDFAFBA0DF8598 +:10D62000F5EF6FD452B0DE8FEF258FC17E30C0CFC3 +:10D63000AF86F5CA4A364EA0AFE346F81EA8B29CA4 +:10D640003FD1FFDFE167FEB2F71FFB03EA5BF37D2B +:10D650002973FCB360FCE24CFE7EC2E0D9B33F7498 +:10D660005139EDFFC74DC5E86F6F35F1087F946EF6 +:10D6700013A01D953F13549FFE353AC97FE0EB6917 +:10D680000FAFD77D407D11E4CB825F1DC2F78F566F +:10D690000522B84EB6557D82F789B7AB0CFE355DD5 +:10D6A0008C0FD744863CE0F7BBB64B50775ACEC7B9 +:10D6B000C671784CBA97C455A4FBB82E01E340C09C +:10D6C0006010677313B104BE1B3702D24364305D30 +:10D6D00042FBD9CEFB7DA75324EC7D9741786B9F0D +:10D6E000ACEE2218F740F9C203F134ABBBC6812F70 +:10D6F00087EC8CC47E0DF977EE736B004749E72702 +:10D700001EA81FE872E11B91C0C8A2C9B7C5197C49 +:10D710004CE170E6F535E3F8532A89CEDEA5D4FE58 +:10D7200015E47AB0D7ADA15E9562DDA86F7AF2D824 +:10D73000F864A813E3BDAB45CC4FA962F04FE97D77 +:10D7400066239CC7AE8AB0795F0BEFD320BCF18112 +:10D7500012A85FA9AA704E95771FAB274FA270D36E +:10D7600071AE05B8850C5E4A385C250017C55709AF +:10D77000D43F07E77D00E619EC1CAF6D29CACCA3A6 +:10D780009ECFAB1EE0C7FB2F8C9F28098D537005E1 +:10D790007E857D5D849639D67F0DAB2FC12F1D8888 +:10D7A000A0C70D1C770A3FFF14E1BB0071E54F23B2 +:10D7B0001C255D6E5BFBAEF08A019C479F5B1318D6 +:10D7C0005C1AC82F3F87CBDF2B205EFD7D7C1E318E +:10D7D0000BBFD3F2A3AF1243A0F6687388BDBB7B27 +:10D7E000628682FE046ABCBFFD5D587FDD0AFAF9DD +:10D7F0001FF892C5D1A66628BB3631B92210536EE8 +:10D8000051202B5A146CBFBD92DD1355AB430B1541 +:10D81000904FFB7B2E45F9103BFE8FF87B248EF357 +:10D820005EFF011FDA9F936FB3E385C2AFC37E36FD +:10D83000EA38070E18E317825C85F2BC0A94BFB879 +:10D840003E6759FB85F392D7D83BBC8103F72D8700 +:10D85000F77AFD07E2C5C0271147BDEB8225B8CE98 +:10D8600002FB297458AF51847AA6BF164C7D5281B1 +:10D87000E97E48037E62E4B0BC2184D8CF4CD4D08A +:10D8800074F78238BEDB1198C9EEEB23FE4398A6ED +:10D8900021EDA9E0DF0F248A554C358DA52AA6E697 +:10D8A00078A69EDCC6EBBF1610B3BE4F1DD0FFE2BC +:10D8B000B6CA2D2968DCFA2B38FF3B9FD1AB451E39 +:10D8C000AA5D49F32D7BFDE051263FCD4B15C23BB0 +:10D8D000453705D9FE77D81F5DBE02ED6208CD81C0 +:10D8E000F910D820D0766707CA76009F4FD707C4B3 +:10D8F0001B518EB1F8C463FBA91D742EBCE3A407B1 +:10D9000041DE195111C77BE765F6BD237CD964B0B0 +:10D91000A3BA4BFD44A0DF2F09E461BBEEAA4DB7CB +:10D92000027FF4F7092190CF0F707BEA811DEBDABB +:10D93000215E6B1BFC8008ADFFE2ACE34BA15EEA0D +:10D940000511CF2C177609F7E4D0FE4EFCD68BF1EB +:10D950007927FEB9A711CAFF34C59FF5F715327EA6 +:10D960000422317B5AB7D9D5F03E35E49DF57D05CB +:10D9700047D0AE3BAB2A6E80FC55ABC802209EA6BA +:10D9800053A8E8DE35101E30D0CEE5EFC06A95EC26 +:10D990003BE54D0DE21CB528CBB72513B85F26E556 +:10D9A000CC2FDF16DE19027B63CB2E097FABA7726B +:10D9B000C7A59E6F82BC2C8728736ADFA54C3B27C6 +:10D9C0008176AEB94F7FA7AC4E0F403CD56F9838EB +:10D9D000EF2A5F380EF4D168FAE23EFFD7CCFB8421 +:10D9E00028C73004DA95D11FDDEAA007F0BCAA579A +:10D9F00050417FAC8A125CAF257D42CAAA3FC25C0F +:10DA00006E50B9BB89A09C677237CCE50895BF1EE4 +:10DA10008C67EC64FAA03E32D889F2A7C7C5F485BA +:10DA2000A4896097AD31A8BCA5B01447F47110FF6C +:10DA3000746DA3148338CF6BB99E31E567465FC51B +:10DA400015B84F69CAE1108723CCF5C33883E9873D +:10DA5000D07D4C2E8FEB65E9B16802CF5B70233C23 +:10DA60003EA3D71EF16B980975F5A3BC1FD7C7E479 +:10DA7000BE49173A3FED74BF43D1DE376321E02D35 +:10DA8000D057248AB04F8CD429909E0870FF11B7CC +:10DA9000E3918830CFBE1DB8D87D06DF4FE4B75F75 +:10DAA0000CC86CDB51AF803C2C89B17B77FEE8EA77 +:10DAB0008721F8E3236ED71392C07712486303DE01 +:10DAC000270970F87D95833AEE637B2FFD36E0B32E +:10DAD000A4B27F22D815C1DEA3E4EFE8F79F048249 +:10DAE000D83E58994A7B402F9531515C5295F04071 +:10DAF000FD6B2322C276524A13C89F8C11B559CBB5 +:10DB0000CCF3C7811CFBBEA1D7CDF70D298C9F3468 +:10DB1000F70D1D42FC6D8C7B98CBE44A572CA5AFCA +:10DB2000D460DFC0E4C40393949DB00ECBF8BE8DE7 +:10DB30008487F05D6EDC4F507B7E7AD78B4BC09E26 +:10DB400037E7E7E6F30B4407F177AFBEF3C3A33A39 +:10DB5000C0E7ABEA9F2858E0D3FC41F62E5AD90023 +:10DB6000DE5B0F56D2F9C1FC3BE9FCC2A3CF2FC04C +:10DB7000CB03912772A0BF4C3F06D2239872A940D5 +:10DB80008F60276B772D6D07FD38F9E0398E1F9078 +:10DB90000930AF806EB713C78A6F7A141818F05621 +:10DBA00061DAAF0EBDE761BFE3E377E8A383C1A20B +:10DBB00061FF9D61B16F1FE5EFF03D1A63EF854B8B +:10DBC0004176FF076404C425F91F138D09A0EF688F +:10DBD0000AF2C9DF2F19D32C7E2B7FE55F6CF14849 +:10DBE000106B6DE5E3E1FD28DF87062A197D7D9442 +:10DBF0005FADBF0BD01760BF6FD21760FE4B5F6584 +:10DC00006304D6E9C8FD2783373722A62E003BF1EF +:10DC10003C96EF9E25E23DF732BE3EBBC20FEA2B9B +:10DC200071E4C15AD89F766C53D0AE4CED60F78F3B +:10DC300052B3983DD19F66EFC06E4F29850DB8DF76 +:10DC400062F7F7B7576F2ABC1EC6A98E57BA2CFCCD +:10DC500013ACCEBE0F1F82FD3CFAA30C81FB5D040A +:10DC6000AB5E30F3CE766EEE7FC13FF057A92AEA65 +:10DC7000C7D80B526103AC73B510E35EA34191D3D7 +:10DC80008FBFEB9D0A30FF5ABAFD63EBEF8BB80EE6 +:10DC9000750C387EB72A1A04B8FCF6DF3930FD76E9 +:10DCA000EE590CBF81B082C16301EED7E94F8BE81A +:10DCB000CFD81E89E75B7FF76B495062F7D60C859A +:10DCC000F91566D8ED8BAA207BAF797650E4EF2169 +:10DCD00031BE39C1F5B2F4A339EC7D9601F65DAEE3 +:10DCE00024A8F7E87C0E3BE6E1FCFDAD59413C97EA +:10DCF000B6BF4764CEC3A4E3979C7FC0DF01FE0795 +:10DD000099CB137FCA85F4DE5A3980F2D4E4AB355F +:10DD100006E52BFA5DBCEF75F46B94807CA2FDA642 +:10DD2000B639FD1AAB3D007707B57FC0DF6EF36FE4 +:10DD300058E411E00FDFB5A4E381DDDC4EE22AC830 +:10DD40000D83F682F64CAF0BF11AE811F2AC78D5E0 +:10DD5000FC0C5FAB00AF289F5FC2F1B7C58A319E54 +:10DD6000B72DFF32F43BF93AA78AD06E3EF7FBB4E9 +:10DD7000F1B8DE605449E13CAA86D0CED879DE60A5 +:10DD800004E4BCB91ECC714CB871855AE3B37B5D19 +:10DD90008C1E265DCAD9BB1A2EF85DA6A2ACF4581B +:10DDA000837C15C9CE57BFE4E7104F0D2C0C5AE306 +:10DDB000149C76AF69DF3AEDD7484063F6B344ED83 +:10DDC000D58A8C3D6BEAD90E21F5E6F9B05E1F517C +:10DDD00034E68F8847DEA445AEA97EBC37FCA8D4C4 +:10DDE000EFAB60FE5076AEC8F9F028B727A56D738B +:10DDF000D00E907BF8BCFB0436DFB1F9B01DE73DD7 +:10DE00000A1FE673B9AE7E5E44F471163F4E0D41B3 +:10DE1000FF979A6279D550D87EE6F352AC97C53F0A +:10DE20005404BFB7E1F40B517986EF7AFD7FE30F1D +:10DE3000E27E3D220D46EC7E9EFF763FD0DEE0DFA7 +:10DE4000E007220E3F8FD3AFE3F413997E1DF8B3A2 +:10DE5000FA8B9C7E9E28DCCA2D013FCF4BC1F92056 +:10DE60003F9B445CBF27B91F72ABFFC2254634F30A +:10DE7000CE859C66BFF72219CA61F6BB986CBD9926 +:10DE800072DD94F359E4FA1B280F4791EB83FC7C75 +:10DE90007477335F5F6122813E7FF4B1173D10E7F5 +:10DEA000FA36DFFF0DEB7BD0F316BD1E003D7FCEB3 +:10DEB00019E879BE1E47DF2FB1F5777B8DE8C5F3F2 +:10DEC000263EDFBC21968606255C777944C6B4875A +:10DED000BFC798B7D48ED7739F75F273338EDFE3C5 +:10DEE000D1C397C0FA5A2A627CEA9C83F67A4B8B9C +:10DEF0005E0E5F4A410C2D6674186EE727F92B8081 +:10DF0000BE3512B69B7FD2DE2E033FAFAF32B8BE16 +:10DF1000FEF918F5C2EC1CC209FF228F3B3BFC1135 +:10DF20003DFF5BE10CFC1744ECF56A57BE9CFFED2E +:10DF30006CF047C9F8DACA0CFC1795B94F0F97C6B1 +:10DF4000E0FFFBAA31EA956687FFD2A5A3C05F4632 +:10DF50002E84FB3BDFAE1DA35F4ED72B1B4E5FEF26 +:10DF60009A26E73886ED3EC2083E2232CAEFD0102C +:10DF7000F3CBE4A932A65F9D8F8CF0720B1F39F9A9 +:10DF800061D90C19F965241F71FA713A8CC91F9C6B +:10DF90008F9CFC70A67CE4E48F0C1F19F99759F84C +:10DFA000C8C90F57DD28A33C0B2D263B5D45D9F88A +:10DFB00088B51B933F381F39F9210B1F215F38E1CA +:10DFC00077F2C97F3B7FA83293335CBEE4697F2D33 +:10DFD0007FA4C3975AF8C349E7F882C5C80723F955 +:10DFE00083D385F3C79874E7FCE1A4F399F2879390 +:10DFF000EE19FE48A31C31E177D239D13C258F9D23 +:10E00000E30FF3C599D159A374F69FF9FA2756780F +:10E010008B47D2FBAFA6B3C6E9CCD77F5EECAFD5BA +:10E0200027542F58E8ECA4D78A4BDA909E23E9CCEA +:10E03000F1CBE93C26FD389DC794DBA3D0D949BF7D +:10E040000C9D09B35B96327BD3493F4A67AF83CEC1 +:10E050005F897E63AD4F277DC7A2A399368C725F1F +:10E06000F7935C66A7BC0B861D4D1B72B2D7FB8C69 +:10E07000D7AB803B44D05FAE3D4ECB4CBFC865FBB9 +:10E08000E85B79BD27796AC2B17B536303F8FD9ED3 +:10E0900078412B584EC7F9BFABAF99F9008000000B +:10E0A0001F8B080000000000000BED7D7B7C54D529 +:10E0B000B5FF3E679E994C9299304966F262121202 +:10E0C000081874122005C5F69004088FDA01514132 +:10E0D0001107410C1048A056B1A5E5009157A306C1 +:10E0E0008C3C2CDA014CA5566DF05AA188F7131E12 +:10E0F0005AECB56DA496AAA534A09746448CAD55AC +:10E100007A7FB5FEF677ED7D32678604F0F6FEFE87 +:10E11000F97DEEF8690FFBBDF75A6BAFD75E7BE771 +:10E120008B2FF8EF6B8CFF56323682B14D2BD9F422 +:10E13000B652A483CAD414C6BE90E5E91E85CA4F60 +:10E14000AFF030CD11CB6F5E57308EF1FAE94D65EF +:10E150006BF09DB3AE1FD34A18FDBE60B17ADE0BE3 +:10E160000398D62F96662C4AFD79C6F28EDD281FBD +:10E1700048E5A75738A97F8C1F1EDA5BFFC97DF4DD +:10E180001FB84CFFB954CE98CE588668EFCC64CCFB +:10E1900026FEC92C6907CE5A7C8C3D906B0F5AF82D +:10E1A000527F92CE6A0107A33FE36BCBB59F52AE7D +:10E1B000E60D7CD55AA7318F42C6AE96F0B159F91B +:10E1C000FFCAF9FF765B7447EAC5F556ABBC5F370B +:10E1D0005211BF19BE151E95DA3BA3562D0AF85BE6 +:10E1E00079F9D058F90DB2FFD54AE8AD089FA79E3E +:10E1F000670FB506195B7BBDC097516F2AEAF1F531 +:10E20000557A2C729D610638DADCAFBEA5F0F9D8DC +:10E210009C6EDD42F3B79EEB74C6E635D5C3A87F8E +:10E22000C6DA2DAC220697BEEAAFBE1E79FC9BC1B2 +:10E23000A22B0BAEBCFF0A4F90BE4377D9A93DCBB2 +:10E24000B1478B95D87A397C285F5FCAA2AD3C3F35 +:10E25000D7C9D639393CD7284C730FE7F98A93F2DE +:10E26000F1F370FCE5C879AE2D664FAAD7F0B495EE +:10E270001D7194037F0D7E37FAC9B60751BFC86F71 +:10E280006F57F9FCD66C647A21AFB7E601B7EEE0C0 +:10E29000E56B520AA3163EFF359F8B71D7DC1E8CAF +:10E2A000AE42FF9A16F4F1FE69A8A068978E7665D3 +:10E2B000B2DE6C4F74356F17601D49CC12EB9FB105 +:10E2C0003CEF9964862C4674E84947A58BE82846BC +:10E2D000A7821E0BD75B4BAC7C7D9F305708F4B7F1 +:10E2E000DADBE048E2DF65CD1525AC3056BF71457D +:10E2F0007074A3CD94B671FCBB2FEE77793F95FA7D +:10E300007DDADB303DCCCB9F55964C0F9BE8E4CFBC +:10E310005E4127BFF5887A6C78D8093AE13D1EFB4B +:10E320001AD6E751831B147C57392722ADAB1E85C3 +:10E33000C321EA9FEA5C00B836A99E624AAFA2FAFE +:10E340003AAF0F3C1EF1DCB9AE80AFA3515787390D +:10E3500082E84F9B5CC6E19826F1146D52057E4B16 +:10E3600058B498C36F57939A3D87CF6BA0A7BC1240 +:10E37000FBFBC8CA7B55C6DB6FAC612C8BF76765AE +:10E38000EDBA155FCB897627EFEFA1EAD3E122F44E +:10E39000A308BA1F6771674FE4F53745AD2AD8C6A1 +:10E3A000C11D035FB3F1F4AE6A953978FF699DB37F +:10E3B00027338E97BD9E025AA7F5C484F719A7CFBD +:10E3C0008D4D3B3DE00BBB77640622FC1BDDB12687 +:10E3D0001BE3A78EB69EEEA15BF437D69EDDC9CBBC +:10E3E000DDC3E3F3A33382010FAFEF623CDFD8DF7D +:10E3F00005E2DBCEF74FB1A49BA3133295CE52AC0E +:10E40000C3D49ED7F3B63015E332DDED3B7315630D +:10E41000CFF37D8B7DB25BD5D424C0E7A4126AE52F +:10E42000C54F6E5CE38898F07B7D86C05BE30A563F +:10E43000FC1EA7839202350C7EF18022E8C0EA66BA +:10E440001AE062E037F15BB8BE3A2DD20B5FEBE128 +:10E450006FCE01A31B87C5D20FD8049CAD9E0ED5ED +:10E46000C3E11A7CC15396CCE71FD483FB3AF93C35 +:10E47000370DCD2FC3320C7A7B75C2C06D7379BD59 +:10E48000A5CFBA43C087EB84E314F841B2B3E96384 +:10E490007C371D9CC1829CEF252FF31517F1715C11 +:10E4A000C1CCE222CE976D1E8D619DD665F6E2F756 +:10E4B00078FEB89F9666755E629E1B56788A8BF8CA +:10E4C000FA5B5638E9BB41AEFFAA9F4E4EBBD30460 +:10E4D000AF2EC9378DB4755972C8BCBE0C2F871FBB +:10E4E000F1E3A87F8A891F4725BC8C7E13C737CAF2 +:10E4F000D9702D3096C3213AC1EED9C0F13D668A5C +:10E50000357B015F7FAB6EF780FE37ADBC79C34CC6 +:10E51000E0F30D0BD1C4A609F6EC79A67519749C2D +:10E52000D8BFC32BE6BD3BA03FA68430BFE9135F35 +:10E53000F7F37492FE18435ABF49A4C1A0AE45FA3E +:10E54000D6891AEF67371877365FA7376FA28EB470 +:10E5500057BF55E5BCF7A1F513361C19C5D3C5FA4D +:10E560003B0A4F6FF7B1F66AB42F10F51B7DABD69F +:10E5700051FDA122BDBE6516B58FCAF5F876D889C2 +:10E580009EA33B1AD3B14F5AA64CCB0EF26F6B59D8 +:10E59000D4CF787FEF6EFCF8A893F3399F22DA335B +:10E5A000FDB735984FAB4CA76E3C5683FEC64C2941 +:10E5B000DA0278ECEAB0117DEC3A7AD3ADD8EF9F6D +:10E5C000707881D946F38281702FF06E5AE12F6EF8 +:10E5D000B281EEF9B738969F12F2173F63D2076CFB +:10E5E0009EF87454090630BF597C7C2B9FDF265B54 +:10E5F000701BE07783F72735560E8F4D29C100E059 +:10E60000F155EF2E91CE90F0643FA8D1F83C36053D +:10E61000447AE0C6CD34FFC479446D2C3B547A056E +:10E62000F390F5FEBBEBE80B0E573AFEFFC7ED6F1C +:10E630000DB92FDFBE55EED73EFB29B8B27EFE5591 +:10E640007AFCDFF6FF6FDBCFF216129E2F4F0F8C96 +:10E65000F8AB4B6511F0F747A75526CD36F19D5025 +:10E6600086D0C7BBA0B7921EAD913DD2FAE8B824C0 +:10E67000C8CF4DCB432E6D0097BF3BA6B920B73610 +:10E680008557A517C37EE0FA14585EE33F563BA1B9 +:10E690009734D6A89E553CBDCB539884F28D3C8DC3 +:10E6A000F28DBE4A4AEBBA1A825C78C0979E34C794 +:10E6B000240778BD1AC8A58DD5858179A6796D9274 +:10E6C000F2882DE733E2EDD7E716EEDC50102BF79A +:10E6D0006528D28EAB9C30988F1F857EC77F4726DA +:10E6E0008C3B0A3D6D13D7D31CA4A715AE2FC2FCDB +:10E6F000343504393550A60768D6104FB24168E466 +:10E7000083DDC7A2EDE0CB2DCF2F059F5EE3E18334 +:10E71000F3F10634458E7E8DA7D3FC6A10FA336B75 +:10E72000E27A2ED7F3BCD071780707C3852BADE012 +:10E73000F32319F1F935E80FFA7B8819FA7B4A19A6 +:10E74000D793C8240B42DE8F9E5884F971FD10F5D3 +:10E750000D3DED844FE86DFDA0C7F174542FDF80AF +:10E76000793E1AB2320B6FE7996CD2BFD8C5FA5B0B +:10E77000868D695847C6607B54E7E3BA13F4B54405 +:10E78000BDAC472F0873BDC2D44F7289272EFDC977 +:10E7900089F10C7AF9C657D893506E1F7885ED270A +:10E7A00025B7790BC1618184C3072B42A31B398232 +:10E7B0008B148F0B46816540599071BA49B2343B36 +:10E7C000F12D52430F8FE1E31E7DCE45F05EEAB599 +:10E7D00047819F8D636F9E0E7875ED4C61806FA3AE +:10E7E000CDB30D72ECAA47FFB10E726CA3ADE36915 +:10E7F000C831556FD95093C7ED1DABC0D7261F5FE9 +:10E8000027AFBFA9ED85B34F13FE9D2185CFE3212F +:10E810007D690DF4D82E55D8B5CC1AF64FE1F4BC6D +:10E82000E759FB74A1FF8449FFD9BD2385D2869D9A +:10E830006AC063493F3BE161493FB12FCA562F6926 +:10E84000803DB14755A4BCE4701EC9581BF404D2E6 +:10E8500047E6FDB2DA4A7A29A5D3D3776FD04D7A4D +:10E860006AA27C0FCBFDD6164D91FDEDDA3086B74E +:10E87000DF53C964FAE713B55C8CAB48FDE2B90D10 +:10E88000DA688CCF449AFF540EF33D76A3FEBF4F57 +:10E89000ACA572659285EFF5438F3CBEDE1D88CD39 +:10E8A0006F70FA9F5FD38B50BEA4B6377DE33AA951 +:10E8B000CFB60D673580176F373D6ADA9F87FA59F3 +:10E8C00068BEBF965F3E6F35C8FB095AB9FECDBF23 +:10E8D000A18356D70253BFE5E92EEAAFD6C11A503D +:10E8E000BEAF5375CD36F557E493E35959F23B1C4F +:10E8F0008FC54D76CF4A8EB7E2E8F5B702AFB65C6A +:10E900003B53385E555F4779294F7B5F70334E81AB +:10E910006CEDD85036EC985DA3A20F5DCBF35BF3A2 +:10E92000D4900EFE96E2263C46775B6A7E04B8479A +:10E93000AFAA66D7C4C61BE913FE81B57A79C37C3A +:10E940004E2767DD6EB2EF7E620D11DDFDC46DF7FF +:10E95000E8C2F80D80EF15A9D16CE849D33615ADA2 +:10E960006FE4782892703EEA1BB25EC7389EB61BF1 +:10E970000AF9F86BB9DD85F1D7FAA63A31AF8DE126 +:10E98000062758C6F3071B6A0AC0FF8A55B68A8F46 +:10E99000B3718CD07B8B32D227627D450FA42BCCF8 +:10E9A000B4FF4E4A3A8B86045DEB3EC937AC7C1E01 +:10E9B000C3E15FA90881EF393CAC1CEBB2E53668D6 +:10E9C0005A2F78FC50F6C3B8AEEBAEA0AD49FB327F +:10E9D000B3E6F877C04FBAEC6DBF06DCD67A5DA11E +:10E9E0009D3C7F57525B2AFACF4C77A9587F16E39C +:10E9F000FFCF41D5A872BCC0CECC658497AC163B86 +:10EA0000F939325BEC64DF6CD255E26F0FCC6551A3 +:10EA1000AC234B574FC1FF93D9F9F10A8CE3F7A907 +:10EA2000ED76A467DA59D0C4AFFC27DEFF1CF6A947 +:10EA30009FF17C131FFA302DFCAD748E1F47AE473B +:10EA4000213B11752B606F8A9F4B577507EFF7D9E4 +:10EA50009582AFAEFD2E8BEE54A8DCB9AC5C54872A +:10EA60001FC72EEBB7FE8C3D0338D99D4D1D965424 +:10EA7000135C9709B8DA5BD62CC13AEC25A679F07D +:10EA8000FF1D841384C32F8F7129C0F9D5074CEC67 +:10EA900007FCACBC281F38E14B3FD7F66E12ECAE3A +:10EAA0002EBBF037908D5221ED7E93FF6273BAD06A +:10EAB000C312FBE9AF887A46FA0926FADD73247D92 +:10EAC00012E8FD87CB0ACBC0EF1B0DFEC544FF103B +:10EAD00077C04F86C7A50DE6F3BFD727E4DF1E57E3 +:10EAE00043AFFBFA3B3E31FEC6D73862393CF6AC49 +:10EAF0000A7E13F6EADACD2ADB89F5B6083C6E6A9F +:10EB000062C4873769A1DF4EC6BE6AB086743E7E96 +:10EB10006B89805B6B4D30BA52FAA1743EDF1439B9 +:10EB2000DFD6DCB0CB023A18CB3C3B391E53AA9956 +:10EB3000967435F1DB0D6837A03A9D816E1987B167 +:10EB4000CAE79F2CDBA534E94B40071B7343B71280 +:10EB5000FCAC4165CAD0183CDC128EC935BC1EEC39 +:10EB600069DF8BF7C1DF16AD9ECAC077DC3E3E4E33 +:10EB7000AAE817444EAE288E2F7793A897362D9E7D +:10EB8000EE884F82EE1773BAC13C47C6E37D93848B +:10EB90004F8E95D5D8393DAD4C17F269D77C01978A +:10EBA000E450427FAEE0DBB504473BC33ECA5F1E84 +:10EBB0005F9EDD925909BACB65A67C3EEE89742F23 +:10EBC000E123FBE8F6A92A5FD703B54CB5605CA644 +:10EBD0006BB5E5023FE01B6BC7A9D46F4E757AA5F4 +:10EBE0001DFE9B6A55039EBCB5A53BE12F33F0EBA0 +:10EBF000F57994F252D4F3540EBC9AFCB842EFC8A3 +:10EC0000E474CEC7CB39DAFD4DC02FBB2E7E7ECC4F +:10EC1000BCFF2C974FDB9CA97AF2D5F093C6EFDBB3 +:10EC20008E7E05D28F2AE842B8B2F17FC20F6B4DBB +:10EC300065AE12F83D37A8E4DF810F3297CFD1F6E9 +:10EC40008CAA67F1FE1CCF887D6D6BB3EA8352A15D +:10EC50009F30CD8EF2DC7F3ACCF3DDFD337736F09A +:10EC60001E95FE3F8BD4630D383C24E5F54392FF9F +:10EC700055EECDAD823FF4813CA18F710944FBE795 +:10EC80005E39F72E35BC3519707AC741367BF9519C +:10EC9000FDD6FFE0F53DD50C9E64B6D6DAE0F49AD9 +:10ECA000E4155F5254F5FFF7BF9BA4DE1485DE74B4 +:10ECB0000DF94548CE19FA8EB75D35E4BA0611DF75 +:10ECC000A367E84DEB21D7875A3A8638B93CDADC9E +:10ECD000FCA3F5D5D743FEE65D65E53CE7B97EC705 +:10ECE000D6DB32CC7AC26BEBA137F4AD279C9850BF +:10ECF0000BBD22D7481F9DA071A0B739655ADFF21E +:10ED00001AFC188D36FD39F0B4453EA6C36FD265A6 +:10ED1000B4D77FB01E72E75997E87F51CB0FD6EB7F +:10ED2000B997D73BF83E7585532E0FA7A895B92004 +:10ED30003FA3121EC5FDB64E5869D25BEA76774CEA +:10ED4000C479448F1E21F92BD747DBB07F5B257C2C +:10ED50005B332A5430910151BB16ED852F4EE8E705 +:10ED6000A4767B93B5AA7E232E4F5F13405FBCDE53 +:10ED7000E7E982DF0EB508BD26B1DF3BFA2986BF81 +:10ED8000BF01FA53E55EB7D05357DEFC24F848E5DF +:10ED9000A0D26DC9F09FBD7D8B0DE9DBFB59691ECB +:10EDA000D19F47067984DCCB069CE0272038FC6C99 +:10EDB00034AD23114EC6BA12F36FEA97649CF7DCA8 +:10EDC0007A68B83877809FEED9555C3EF4E2775B7D +:10EDD000DCAFC7BFCA3432823C64F71579358DCEBB +:10EDE000917C611DFE2F1BB7AB3413BF34DA5B2F50 +:10EDF000E4C49D43EDF0680CF5AD17F2293FD71A36 +:10EE00006E007C1F7B71E40D10778F4979D6DFA3EC +:10EE10002D45FE27EB86C7F9FB13BF57ECFF97E79D +:10EE2000405FD64E596DD7D2214F77B050287D0024 +:10EE3000F0DE1C821C59CFB442E41F7D6E41F318F2 +:10EE4000D829BFB2101F6954F4C5730BE027D62B25 +:10EE50003CA597B75312F76DB9C6E8BCCB6A65D528 +:10EE6000E0730360108E80F853E9FCCC7644E851DF +:10EE7000E08FF85A5844831E6CF00D6BD44AE59627 +:10EE8000130E1DF2C5A2AF21FDC6EA09933F79AA70 +:10EE90001A89F603FED771569A29C423D66B716B73 +:10EEA0002C52DA375FD8F748F384757C1F5B8EB835 +:10EEB0004E51BFED72FC136BC98FCD9AE3FBE3E3B8 +:10EEC0003C8371ECFBC2EDC9E6FEA5FDF2DC230F2D +:10EED000125FE8B3BFC68BFA7B11F490D89FC1D7FD +:10EEE0001E79E4A109FAE84BF4B7FDA2FEDA7B9B98 +:10EEF0009FC1F79A1FD9B85EE75BCFDA2EE48F1572 +:10EF0000FDE28BFE78BF760E4FE829BC9F5F123C76 +:10EF1000472B56C80FA37F987FD8A7897692F11DFB +:10EF20009C2EE45122FE9F5DD930BDB77D783E5DB9 +:10EF3000D84389F2D20679592EE46496892E1C9022 +:10EF40009757F72D2F3F831E20F800C1C590CBFFA8 +:10EF50004C8BBC8BF5387C62DD8E5CA64448BF14BC +:10EF600076CFBF6A7FDC2EF9E3AE24B6A10476C566 +:10EF700038D5033DD2B01F9E5DE999007FC6DA0700 +:10EF8000D510F4CF1EBB41DA15869DD2083A25BDB7 +:10EF900054DD89F3566E6F4C227B83DB237038B5CA +:10EFA000F27926F17DBDB1A5FCB793518FEBAB642F +:10EFB000E724DA1BD20EF1CF8DCFFF302D62F3F1B3 +:10EFC00079BA6B54D25777952C6DC73A375433EAD8 +:10EFD00027D12E48D42713F5C744FD30511FCCBD8F +:10EFE00027413FFCD2FA98D0A7AE542FC3AF377D4C +:10EFF0008CF443DAFFF70939BE52A4DFEC771FED3A +:10F00000D7DA6421D70E74AB6497479B32D331FCB7 +:10F010002E1B9B44FAF3A3C174F85BCA259E6BD3E5 +:10F02000C22AEC446E387A703EAFFA983B043D55E4 +:10F0300057CBC60761AF6BEE329C4FAE54C94ADB6B +:10F04000358ADBF3382FFA999BECE6D694671EBA23 +:10F05000167A18B7E3E97CB50FFB5D93FBE9B3744F +:10F060000F8D6BB137874AE1A75B797336E8B7D567 +:10F0700016267FF6F3D23FFA82FC5AE5B99251FE8A +:10F08000A2F4A3EEEBA37CBF2C3F20BF89E5FF2EAB +:10F09000DBB5F7D1FE906C77A48FF6AFCA7647FB4D +:10F0A00028FFA52C7FBD8FFE7F2DDB75F4D1FE9848 +:10F0B0006CF7661FED8FCB766F5D542EE4EA3BB2A2 +:10F0C000FC4442FF2765FD4E99EFF00685BFA28FF5 +:10F0D000F3B2670B049FAB3BD2A115A49AF4E8747A +:10F0E000A19F1B7ADC65FD55D2AE45DFB01F89A517 +:10F0F0000D88F5F743C937F16BAC88D98D061F2B06 +:10F100001E2EE2350CFBD3B0135F4E0F523B778BB4 +:10F11000B457591B137AD7A5E17C9B4FF0D5DD433B +:10F12000853F07F47797899FDFE1B38973CC32017C +:10F13000CF187C06AA067C549E7FB7B4DB1D5ED92F +:10F140009F37D69FD92F3EC927FC6DD1CBD0E7780A +:10F15000CCCB54AF2F3ABA45CE3F7A197A9E94D091 +:10F160005F5F74754742BDBEF65755C2B87DED83EB +:10F170001B13FA7B4E96B7C9EF753E55C2EDD2F41C +:10F180009748C7519C1373BAB26E1CB64197FE25BF +:10F19000B39FC1ADABE44FC860DD71F491CA3A448E +:10F1A000708BA40FDB8502A60D23A64AF2F2BD7E6A +:10F1B0004119071566D0D76D178AA8DC883F591703 +:10F1C0005C958E7892077CBE32EA86EB0DF073A4D4 +:10F1D000CA7DD0A37F206E00F2DD17117101317D51 +:10F1E000EE1D1FE87B2BEB55FF30FCCDE18CA40915 +:10F1F000747E3D5CF8FFF51227D9FFDCBCF0F70305 +:10F20000E7B54C0EE11CFE2DAFA0A7CB9D235CEE15 +:10F21000DCE072E7051FF9527C880BE2D234043936 +:10F2200035EEA7A59B6A1027F18685CE5FEE6BD6DB +:10F230001DF3D9C5FA83118F61C43918F11846FC42 +:10F24000C3A3F0FBC3CF5FE2DF017FD4800CB1FF2B +:10F250000FEAAA0BFA46EB3471BED37AF4D11A9CAA +:10F26000377D52AD7A00AF125B7802D2AD61E12FEB +:10F270005ED73275E260F877A2D690629A07CED751 +:10F28000CCF6C6404F4325CA5BA755927FB7F11F06 +:10F29000554EF0A3B59EC224D88BC6B9D5A61A7117 +:10F2A0009EB56B5A7C7E5FE75989EB7EC92BD611E0 +:10F2B000957EC2AB0ECF9882388B623DBD2C49C87B +:10F2C0006FF28FBDEB9574B3CC42712319D09F3888 +:10F2D000FD1473BB0B746DC4936430137E0A100F5E +:10F2E00023E8792842CAA003300E4F03BF968BF162 +:10F2F00069D44FC42BB3864A40777FF77AA8DCE005 +:10F30000E37DF1FBBFCB750DCE10FBFA51AB3E9503 +:10F31000F4386EE8832F1FF44D157E72E08D57D9B7 +:10F3200078D4467CFB134EBFF02BE39CB2B7F81D9C +:10F33000034F5D32BE2E115FBB6D3A9DB31FDA7174 +:10F34000AF1FE7406B7F1EE9EFE9A51FE3BB4AF65D +:10F35000C3C193043B9A73C42475E497B2876EC803 +:10F36000B8843DB43423793DEC97BEECBC1EBB4E53 +:10F37000DA7B867D67E203B765607EA54AAF769D3E +:10F38000718E342EC3F51AD935FF73F6E4828CFFE3 +:10F39000863D79A5E7515FC23EFC76C625ECC3DB0E +:10F3A00033DC5FD63E6CEC155F97F363F5C4D36A2C +:10F3B0006E85F3E33A66FC96907FF15B72AFD4C939 +:10F3C00038BCB11637F12BD7930AF99117EA569A40 +:10F3D000579DBE6A09FCBF74BEC1E97DFE038CCE99 +:10F3E000317939ED67A3FDC236076B37EDBFC52F05 +:10F3F000F0B4896F17301167369FEBFFED267E5D05 +:10F4000080F3E45494C7E733CBCC34E015B196BD18 +:10F41000C5692E3BB1E3BA2366BF6B460AC5EBB1A3 +:10F42000AFB0AF901D22DBF7B58F3E5B11BDEE880C +:10F430000DD103DA7319A6F81386C3EE519C8F0F12 +:10F440003E53D2DB7E36E03A6759157B97F3AF1710 +:10F45000ED9E31880FD59F5028EE774EB588BFBB03 +:10F4600036AA907D36E7FE85C3C0E746BD17B2E3F6 +:10F470005C717187F0AB645996947D977F1F3DC492 +:10F48000EE08CBF412D8B76E2D88F3B0D912FFE78F +:10F490006C0D651EC8C9DBDD1AECDCD9D3B4B771BD +:10F4A0006E307B66A913709BDD96A4D1D7C9AC2EB4 +:10F4B000C8CF7F7C4171C277496CCFB63227F2B397 +:10F4C000ECCC9AC4BF7B5BA6D811E797E5624EA44B +:10F4D0002B56F1F1399C524786697EB30F3CF537C4 +:10F4E000F477B7B5FD20C553CB78EDD9075EFB3B6C +:10F4F000ECDDBBB4B01D7ACB55BBED924805FC8763 +:10F50000B6C5A7AFD9179F2E6B8F4F0F3B1A9F9E83 +:10F510008403400ED7973EB730C48976FF3899CE22 +:10F520003F1672FDF8ABE9621AF0312CF8C9D01D14 +:10F53000887F7DF19FDFFCD37779BAFB5716B2CF76 +:10F540005F1CC27560C0CF1ACDC7FCCE3EF6D41387 +:10F55000F7F3F2B34F67C1026487BA447CEBC21F72 +:10F560003988BECFAF088DAEE67A5DD5C203F9E02B +:10F57000BBE7F7FDDB1328FFE03907F9B93F90FE41 +:10F58000BF83EFEC3FF318C67D2EB90C7CFF836779 +:10F59000F70E049C16FCE4E57CC4A59C7DFA2715B7 +:10F5A000947EFAC757E37BF6C74F0D9C4DCA5A3479 +:10F5B0001FE7F6463F0B9F493AD58FC3EFCC876EC6 +:10F5C000B7D95E34BE5FB6DF85F0FB52BF6B3BFA46 +:10F5D00061FFED4ED1F15DB0FBFB1F8BAFF286F802 +:10F5E000AEA4F2051C3223391CDF4F11727DE16E8F +:10F5F000471CFC076D8DC7C7FB5C9F799ED71B1C02 +:10F600008DCF3FC3F582E7F9B825E7674E84FC7CD0 +:10F610005FEA3D67F8770FAF5FCFF3BD3CFFBCD427 +:10F620000F12D7999F29F4E7FA7DF1E3EFB7F65E61 +:10F63000BF2853E81125383135F1876C47EF7EED4F +:10F64000219932BEFAE99EFA16E197E0DB89D3D818 +:10F6500042B9AF5E528CFB14EC9E1CBE5F16824812 +:10F660000A63F90B9969DDE4A708A501EE6FCA7872 +:10F6700088CF6C62DF9E5D11198678DF332B1A0606 +:10F68000579BF4B1795B97BC1AE07453B727A39CDE +:10F6900062CE657EDD8F0FA7C29F31A4CD46F2EC0E +:10F6A000ECEEC39BEF029DB6D918F83B2FCF44F97F +:10F6B000B9B6575261C3CDDBEE2DC7F9AAD1FEEE24 +:10F6C000ADDF1A5C6DE27B5F761F1AFCA1CE23E0F2 +:10F6D000B07764C7B81CBEDF166E5542A8B6B0ED51 +:10F6E000A61BBF0EDB66BB85FC1C155616B69463C5 +:10F6F0001D3F7B359BE7D7BF3CA202EBE15D4C434E +:10F70000FE06353C6928F8D31336F203F2FCA32A2F +:10F71000A7B343259BECA7F93A66650A7FF7869B5A +:10F72000DDB5D033797F47E061497D52D164FA2D50 +:10F73000D4EFAA6C4B85FDF2BECDBD4E49039D367C +:10F74000FC16F3D09F15FDB27631EFF9D22F5E7B18 +:10F75000C046F6487DEBEAD431B0E7FE695110D7D8 +:10F76000D4DDAA103FB87B6B3C7DD5F2BEFD7CDCBE +:10F77000B33B52A8FFB319D17CE8596753A2F9E90A +:10F78000A23DF1C1DADDBFF83BF8DEFC687CFB444A +:10F790007A5825E998FF4ACC747531DD30ABB52233 +:10F7A000565EB78CCB03D33944DD7BCD76E8EBF3E3 +:10F7B00027DB2F391EA74B1624782491BDB470087F +:10F7C000AB0E8A7802C5C9FB3F8B7F717B70E15419 +:10F7D0005663E4D33902E89A93EC5F4FFCE2210BC5 +:10F7E000A7EF6C200F7EB09F2693DFF4830FED24EC +:10F7F0003FCE7671C582AF7BB17FD8E86AD3FCCEAD +:10F80000ED3B9C8AF99D0BB6A7A67378EDC7BE4663 +:10F81000DA23D20BBB36901F7A65DBE154C4852F07 +:10F820006CEB47E7C9FB9F55D2550EE7735D3F4A26 +:10F8300066BDECD3055DE2BC38910F19F2F514FEFC +:10F84000C9E5F05399DACE4CE8318DFD480FC8EA8E +:10F85000D750D6D04B7F46BBA73383425E29A27DCB +:10F86000966529D5FF8D3FFC6C26CFF7577668B893 +:10F870004FE49FC842AB7995772DA17B3D03202FA4 +:10F880002376B29F1B33689CBB19C70BCF9F636560 +:10F89000ED564E9F732077AFA634C16FCE6E250A0A +:10F8A000952EA5C91177EF695E8B23EEFC896D3724 +:10F8B0009573F8CF875C4DA5F39D76F843173C19F7 +:10F8C0005F7F216BA771EB9EF9C261EE178ABCA026 +:10F8D00037CD0EBBE66F123EBFF16BAF625D3E19D6 +:10F8E00037D0FD2B9B909B2CFC55AC67A194E37704 +:10F8F000390ED2FAEAEFBF7FF05CAE8F7CB4EC3BFE +:10F9000083E7F6937E05ECF7AD8AA0AB6AD69EC777 +:10F91000E777ABD46F161E50DA87F2F45D7CDDD04A +:10F9200023AE7D46D153B8FCBACBC9F454D0D99B91 +:10F93000022F75723DA897560EF8E934DE9F808F2E +:10F940000CE87D1DB42E2EBF5667F2F11677719E1E +:10F95000C053470F56A4816EFECAF92BF623D74B2E +:10F960005852FAC5F84D846BEDF604389BE15808FF +:10F97000F8C5E365F10B1C9EBDD0D9A392DF9F644F +:10F980005A9C9E69DCBB7B74A522E4843E6506F824 +:10F99000F4E619151538A77C18FEB06CD9D148F0DB +:10F9A0004166C4DBB53BF938AE613D692AAF5825E5 +:10F9B000D29F677E6FD2D65CDE8F2D12801F66F3DA +:10F9C00014AEF70ABD25097ACB1781889AC5C79D61 +:10F9D0006309BF8AA3F5F7C66803892E9709386FB4 +:10F9E000296F18DC7009BD348B8F9D9C2EE7073D75 +:10F9F0006AA89BE28F029813CF4FC917F92957BB0A +:10FA0000E83E5596CA0DC95EE06D7CB3ACDC5C4F38 +:10FA1000A72F4BC1970F947289FA86BE9805650986 +:10FA20007AE790863DA0AFAC59A5E5AB0B62F3DC5D +:10FA3000ACF07D08BDF9BBE23E4DF2813DED39BC35 +:10FA4000DEA29A20F91F336E395182B8A56BB20439 +:10FA50009F4D937AF2368535C22FE0E7F4AE9423BA +:10FA6000BD31B094E70F7F4121BD7AD10B632C8B60 +:10FA7000DCB47EA1572737EC5031FE1D25343EC73C +:10FA8000CB1D53513F4BF089805BD0AB7F955E809F +:10FA90007ED20E8597BC42701371678027ADDBC99B +:10FAA000D6415FF6B3950AEAADC91074B166B6D017 +:10FAB0008760CAA6A58BEF5BFCCBADDF469B809B26 +:10FAC000D525F21B31CEA3A9625E19AAE58E29D0F5 +:10FAD000FFCB453A7DB9A2EDA4CDB851E0D1C16AC2 +:10FAE000B04EE4635D7C1ADA1EB709BE550D659809 +:10FAF00047D600F17DBDD3A9233EE7759FA107B787 +:10FB0000BB414F6C5F4085DCBC47CAFB8F6C5AD64B +:10FB100030C891376C0CF68A2F3FA17E51890AB903 +:10FB2000718F94B39F84AAD2C0243E716B695EFE2C +:10FB3000DD6713F64222DEEF9478AABF90C3A226B7 +:10FB4000F9513FFD53B217EA2FE4C7E59F5BC15758 +:10FB500032C824076B0FD17DD245AC83429917B5CB +:10FB60005958D4B47FF72589713FFBA383F8D53763 +:10FB70005B07EDA4F866164C9D9A12DBAFF5172CC7 +:10FB80004CE77BEF3A8B4AF5EBA7DBC9CF58BFCEEA +:10FB9000B203E771F517ECA2BCBFE8AFFE423FA687 +:10FBA000E36CDBCAFB198A761FAFB90BF87F59A14A +:10FBB000B8B3FA0B99546EE8C3F51714519F8F0B25 +:10FBC0007DB07EDF67727D56CA3FCD3F902FFA3EF3 +:10FBD0000BC9D7C95C9E82DF9E8EAA7A31C7CFF946 +:10FBE000D0BB244F4F1B717672DC732B38431D142E +:10FBF000CB3FEFE924F99A8DF80DA483226DC00B59 +:10FC0000E580D3F9E906FF68B7A2DFC74207ADB8C0 +:10FC1000FF53173A388E99E82506D764DCF1EB815B +:10FC20006BE6EA8E7695F38A1F6EF9F5F74B07734C +:10FC3000D23B24F996DEF17DC4E7645AD4383E867F +:10FC4000582423AE1824F2A86A91F13C6F7CBF3A85 +:10FC5000D79496F57BDAEBC726A17C78A968FFE3F9 +:10FC60002DBFFD8F5590A5865CB376E787534C6911 +:10FC70006742DACDD3434D694F42B92FA1DC9F9043 +:10FC8000CE15F567A5758EB0709BF2852DBF9F844C +:10FC90007B45B3723ABF857B5C4D96772655F3F46E +:10FCA0009CE1822F2D3EA090BFD580DFE210237D06 +:10FCB000D51DEAB4C37F9A3C3CF4AACAEBD5ED53F8 +:10FCC000283ED7DDB6A71D7CA60EED82A6766D4236 +:10FCD000CFAD6B3B45EDFAECBF44A57DBEA1E4344E +:10FCE000D55BB4EC433BF4B675C15561C8CDA96A88 +:10FCF000509CBBB38896C3E97EF1BE294CC49F0AD1 +:10FD00007E7A3EA01DC67CF497153ADFECD97FE8D9 +:10FD1000D71DDB1F46FD3F0C3DF03BC4B924DFF38C +:10FD2000F14A2BAFFFC7457F1E81F1FE802AA3C099 +:10FD30009FA383217766D6DE3918F9B72F2A3E882C +:10FD4000299CB4753E8EB891BF6EF96812E2484E98 +:10FD5000A674E621FEF86F59FF25D2199D8F039EE8 +:10FD600075FEFF43F03D99D799A7F2F47F65554C96 +:10FD7000A67471E7E348976F0D4CA6FA433BF32C4A +:10FD8000BC7DB99E3D19F06FF5087EF804B79BC1A4 +:10FD900057FF902097CF4A3EF3BB81DA7F424EB2A5 +:10FDA0003A21171FE7B69793F3CB598F753EDBCAFD +:10FDB000E130EBDBC9E2DCF6DC8D13C3024E61E817 +:10FDC000E15982F44DF2D14AFA92211F0D7CA4E44C +:10FDD0007704497E24C8AF68A6B6C89F11FB7E5E33 +:10FDE00020BE8BFC4109DF86B220EF77E64C7768B6 +:10FDF00003C525748E001D3E9C24D6C5F70FE1D99E +:10FE00006DE0C52FEC23E61776EB91CCB18BFC238C +:10FE100048DFD79DC0E7143BE9652D53B480CB87FD +:10FE20006F26C53FC7FC1F36B2775AE4FDE79645FB +:10FE3000C5E49FEBD1F39F72507BBE5D07621EB796 +:10FE4000821F99F870CBFCAA00DD1B2CD002E02F9A +:10FE500006DF64D6B60CF8F10D3E89B4E08F0AA532 +:10FE60000D7EC818AF67BA9F799B8D85611FDCB680 +:10FE700043F0BB9E7C85E797C6FAB9D2FC16AF98D3 +:10FE8000972127B356B7517C69D6968274D2272022 +:10FE900070A1976D1CB413F0FE223095F0D132E5BD +:10FEA00047497796C6E8D93648BB0AF9B7CA7838C1 +:10FEB000836EF083FF6ECE23593B1037B2C82FEC10 +:10FEC000FBF754AE77F17DF78780815F46F859E400 +:10FED00017E7FA3359E7B7B03FFE174FFFE3788AC9 +:10FEE000FC4B785AF6E72BE39B725F6E56DA6D593E +:10FEF000826F0A3F03CF873E919B15F9A6DF745EA0 +:10FF000033EB3B8B02147F24E7937CDFDE9A5B7834 +:10FF100072D682B33DFC86052FD6C74FBEE36C82F6 +:10FF2000BFEFA4BD8DE4C3496E77AE041F957EC1BB +:10FF30009372DD15DF5EF83AECEF5FFAC5B927EC96 +:10FF40007D66A6ABF5A1DF7FB757FAB208BBEF65B8 +:10FF50000BE9F93DF4D53A88E82B49D251B625BAD8 +:10FF60006D1EE8EC1637F9A95B8A55D28B5AEE4F15 +:10FF70008E422F6A29E824F8B68C0A7AC037397D78 +:10FF800011FEBA67D8A95F0E401DF53F9A9E1D0568 +:10FF9000FC39BD89716738897F3269177F545B18D6 +:10FFA000057EAF43F037CA8B556A1FA3C3EED42931 +:10FFB00026FAF948FAFD3E827E9466CA977E06AE1E +:10FFC00017A49ADFE3B85CBE418799AB8DFD20E8AA +:10FFD000EEBD4D59E437C6FEC23ED82BF9ADC18FF8 +:10FFE000FF10883C0FFAE9D1B30D3BFFE13CA2D7EB +:10FFF000B52982AEB72789772FF6FA8371F756B7FE +:020000022000DC +:1000000073BB04F287DBE3FBD0CF1DBCF93E9EBE81 +:10001000232BF2EF9D18779941C7613BE8EE2EE95B +:100020000760CBE3ED56C44DF5A42D17A7E769C2D1 +:100030001F7E919F81FDD311DF4EE83DC9A5DD36BE +:10004000D0FB962461E719F26DABA2D0FAB672FC30 +:10005000637F1AF5FE7ACEA5223EF977529E1D7D6A +:100060007D581AFCE3867D9E68AF2FC61278BFF5D7 +:100070007C6CF897EB5D41F2E35D6711FEF6EE569E +:10008000471C7D9CDE1790F4A3CDA6F2952941D0A4 +:1000900007DA635DF5458C8D4E37D5DF3A48D437A6 +:1000A000E8E9678AA4A7E87CEC277DFE1086FD516D +:1000B000EF12F4787EBD6507F6C5F98CC87CB43FB5 +:1000C0003FC3859B42AC1E9044FFFAE72BE0EF3A1A +:1000D0006D15F4023FB4D94FD0A3A7F37FE39E433D +:1000E000A29ECEF3758B391F2493193B5FAB93F718 +:1000F0007816ABA7062E35E9EF88BD257F1C2A159B +:10010000C4E806F01B5D4EDF2316C24F6745D84496 +:10011000D73DF5D4D3D45F5F76F7E2AD7FA6FB4A37 +:10012000387733D3455D8C7E942F148C6FA2279340 +:100130003D4E7A3DFC40D58CDE7D4991E9E49A0E36 +:100140007A87A55EFA83320E758EC3BE4A19DEC663 +:10015000609FD77789FD73ED811D8761BF7B6B3A07 +:10016000F240EEF5D2CF69D09B31CF5107365A60BD +:10017000971CFA50D059E5E9D933C0AF5F72052A10 +:10018000295E3E101910C830F93D581BF1A9395BA2 +:10019000140FE8E0A574A679084EC122C0A9D22E9A +:1001A000CE4196751694DE65B24B470644BC7A8DF7 +:1001B000AA0D09F0F1CFF7118F5D1190F7304E269F +:1001C00045A08F55BA92880F3EBC69D04E47416C0E +:1001D000FCB99B0BD2317E4540E89F5F04C21501FC +:1001E000D2F74215D8CFC501116750690F16C1CE9D +:1001F0007AC9955589FD3DC13847D3C714E1CA5620 +:10020000A55FC07E82D3D19E42E76BCD83C19FA6FE +:10021000CC75097D914D263AA991F4F46081C0C353 +:10022000831384BFF1B74A9B0F724D7536DF83FC91 +:1002300089452921E0E70DC59B073F279B6FF39E6A +:1002400071C6DEB9E9DB4F6365674C71150F2A5C37 +:10025000D14EA72FF96DF857477A33B60FE4B6CBD6 +:1002600041F204E5222E23B81D726FB2D341EF6B29 +:10027000A4C0FF25DA6BF0CB4C76FEE22DAC1BFE62 +:100280003CF04B5EAE19FD8A72D6867DC242B673D3 +:10029000E67798B62509FF1F6FA7839FA6E0DAA22D +:1002A00068D72EC6CDF5E29CD758DF6A5B5B19E6AE +:1002B000A72FE2728DCF6FFB18DD91EF039F4E2ABF +:1002C000837FF7C9147B7B3A9F4743C088BF0B925B +:1002D0001D785AD24351AABD1DE7DB06FDF54F1A22 +:1002E000D300FA33E0B13A89E30772F82E5708F6E3 +:1002F0003CE621E71307A7185C84DF7D320D1583E8 +:100300000BA7DB6A4FB9193EEE769C8727C2A52F53 +:100310007818EBC07CD3532F86CB5675CF42E2E7DB +:10032000E75D21E1674B8013B202249F9AB0BEC5FE +:100330002C42FEE1C54EA6C12F35CFB184FCB3B52A +:10034000D2EFCDE0F4E37AC97955F0DDF34F2B24F9 +:100350002770AE62E697382731A7EB0C3FEFEE042B +:100360007FAC94778BE027C6B72DBE1DE7EC241732 +:10037000EBF725FABDF538391DF383897DF1D8E611 +:1003800002D2073B01EC51C85C45FB13FE3521FF4F +:10039000B500FC399BE71796C3DF9C6C157AE45DCA +:1003A000CD8376AE94FA00F408C32F67ECE72F02F2 +:1003B000957BB1BF5BB32B9FA77D0EE7CEA84BED1E +:1003C00027314FA31EFC72973AA7580AFEC7F59D26 +:1003D0004381A0E053AF156741CE2E55825942CEDE +:1003E0000E8C4B9FB144E89CC2F0ABCFC73981253E +:1003F00006D779D21F3FCFF0BF733C0513F0644E90 +:100400002F30E12968C653356B4F49C093B9DD627F +:100410008E27B4039EE2E2C25BC4BAEF9072C2A020 +:100420005BEFF21D1666F253A4956B050F40AF7C8F +:10043000CD46FED5FF9474C9F15001BDF037FECA18 +:100440000380B70BF64D29F47B560B7CC39F3B15FD +:10045000FEAE1591C188AFE378AD98DA8B9CDCB025 +:100460003FA91674F281E4EB46FECE808877253FE3 +:100470003CF488F50EA9D706F3D14F45A1A12F066C +:10048000E97C7DAE3C5F5E7CB33B82FE4ECB7382EB +:10049000CF02C25EFF2C20EE591969637D463C05F0 +:1004A000FCCC663FE9E73DF5847F9759231497B963 +:1004B000D9164DBA8BF4AFB01DFAD75FCE09BA3852 +:1004C0007A74CE7CCCF32FD35D0CF10A8E6C41276D +:1004D00073E5B9D65F5850EA6303493F33D23D7A9A +:1004E000D70E4B9CDED5F56496D4BB1AE2E2267A91 +:1004F000CABB061A7A960EBDAA7B4F92A1B76BB8FB +:100500006FA0FF6C90B44F19D9055D07F2A8FE19D2 +:10051000C45120BECD1AD9867DA6B789F3DA2EA99B +:1005200047D52F387B35E47B17137C593FE020FB00 +:10053000835975D2A7CEF4E8F3D19C1B4DF8DC2F7C +:10054000E30FEBECED03A1CF77497DCB481BE7FF31 +:1005500048E3FEE34B929FD7B944BAC919B92A3B85 +:1005600003F139C2CEAA4BE5F9EE2B810FE71782D2 +:100570003E883E510EF9D2756068BC1EBA4DE8B592 +:10058000EFDB447BFDE705123EDD25F0FF76756568 +:10059000D23B6D1F85ED74AFA34BEA9B065C56BD45 +:1005A000FFA31C7AF7A147BF14F0D82CD7D1620B58 +:1005B000E60F837E05BD0EE7DCEB44DC6D7DF4DDEC +:1005C00099D0F3EA6BFF318BF213E2283E523A1FC7 +:1005D0001A48F3F0D361FC628F2833E0D0E317941C +:1005E0007A2AF37567F6A66FD6BFBF264CF1684C22 +:1005F000C41F5F2B59EE45F512C6277BAB42E8DBE3 +:1006000074DE9810B7C1CC69CBC5E939D98AF4A397 +:10061000C5E7DF059F7206E611DFDF7B363D15EF8C +:100620000474BFAF12BE16B5CC9E85388E3F6544AC +:10063000EA80FFFD9BD656C8FBEB44B7D77E904BB4 +:10064000F61C6B16E7BCEFD9B459D8A7DEEA76FBE7 +:100650009D26F8ACCE16FAC21C87D4DF39BF35F31D +:100660001BA3BCA2B2F7F39055721D2932DE8BB1E9 +:100670001B1DD00BF6E39F41733DC1A756CBFDDD9B +:10068000BF4BF899AFEDEA3E883BC8756D65146FB6 +:10069000D17F793BF187F76CAC1DFEA6F7B6A508B4 +:1006A000FA857F94F73B6FA4E8779E85DBA1A63897 +:1006B000B005126FF31CDC6EE5FC78EFEE3196149A +:1006C000DEEF82ED4A08F1BAD74A7E0DFBA53FE482 +:1006D000878C13AA651D6B3A79FFF39A987324C52A +:1006E00089452D39046746E722A923A3142F66C044 +:1006F00087CB9DC654DE6E8116A5F390C4F80B66B9 +:100700008EA7003E70EE6FD2731635AFA738821EEB +:100710003DA12D312EE09F8E78BAD1E3E4A8213F90 +:100720009F011C47C4E44A5FF294EB41CF660BFC87 +:1007300089FDBC4721782E620D220E40CAB344BD0C +:10074000E58C45C8DF798E8DF43D945D40E32D60E6 +:100750009DF27C5BE83197C3FB21493F06BEEBBAB3 +:1007600058FBF5BCFFC372FE46BDBAE5AC7DD1D5E2 +:10077000E20B7B81C359C879A790F3F8BAAE40DE8B +:1007800027CAF944B99E28CFB3EC427E1BF4613EE0 +:1007900077845E73EDF2A805787E758546F14FCBC0 +:1007A0009CA957E3FEEA6749E2AB03AEE08B2793CF +:1007B000486FBCCF12DAFA06DF12E3D68A7CF6A7BE +:1007C00064E297ABD70B7EB75ABE6FFBA9DC37A7A5 +:1007D000E5D79923F6C7218C538CFB4A3534DE3894 +:1007E000679915FB7A82E7E37C2BE889F31D37874D +:1007F000F37849EF8B1DED6BE0D73A1C58F443AF0B +:100800007CBF02EF928EC33F78FE87B6C853B840D4 +:100810003F96051B618F5739231F67F371AA068E18 +:10082000B7425EAD4A5E3C9AEE3730ED2FC84F635B +:10083000DA5FB3892FE57AE8BE40021D1AF3AB6296 +:10084000DDF956DC23709EBA17FD18F34D9CDFE1ED +:100850008022EC9F8479D539233F44283A9F8F2505 +:1008600067446C9E95CEC881CE20CDC79A9341F344 +:10087000B1E564F43D1F2B8B503C90D59942F7199C +:100880004D71D269E89775C4C7671BF7346271C3AD +:10089000E27BF84356083B9DAD13EFF28E95F5C70A +:1008A000BA1DA7B02F56A7307A1FF5307385567141 +:1008B000381EB2B17DD88FBCBB22F33BAD8799D82F +:1008C00067FA0911BFA438459C15639120E25B0FBC +:1008D000273934E2CBC1605C7CB2219F0FFF318F9E +:1008E000FC8A87921C6ED017AF4FF987FE981C2D9B +:1008F000241BD9147F5C78313D42C5EC025F5CD388 +:1009000040EFA5F8591BBD1F33014E615A6F878216 +:10091000F9E5DEC3486EB39121F9EEAAB0E7AA0C5F +:100920003825CCAF0AEFEA028FEE78BB8D356FD158 +:10093000CCF03A0438A6C5E069C02F71DE17AD7F50 +:100940002B877B8509EE4E07BD73CCB1C772D27B76 +:10095000699F60F7DDEF8F7C1D74F2998DEB7DD080 +:10096000BBA738494EA6D774D37DDA93B1775B68BD +:100970009D87E5B06AF2E85CC49BCECB917673C2EA +:10098000BC8CF524AE33110EC67C2FB7CE23467F28 +:1009900089EBF5F4D13E619D6FDAC3B558E749D6CE +:1009A0003914F8FD39E6623AEF34F8D46BD88FC5C4 +:1009B00097E7578C357C45E0BFE11A7CC77D63F62D +:1009C000273E7ADFB3F606BCEF396EFCEC7B90DE97 +:1009D0009FABDD80F8FB71550A9D7B7F2FA7E661F9 +:1009E000DC6F1977CBEC7B32F02E45DEB91B7C5CDB +:1009F0008E8CBB4D91E7E423BE81772BC6DDA190A1 +:100A000052F5CF3C5EBF14F66DC48673FB9BADE21E +:100A10009D58DE8566F657ADCB11E702EB243ED636 +:100A2000E704057F6462DE6CBA88DFE276856D2AB2 +:100A3000CD3B62C3BC8F5DCFB9501AFA8DE4359BB4 +:100A4000F49BE3131CB76BA5A29EF95C687B8E1226 +:100A5000676F27EA353F90FCB8E7FC92B7BF69A8FB +:100A6000B9DC4AE5DB313FDE8F3B28E41BE6356D20 +:100A7000A8F89AF5CDE333C68C0519DF5452D08817 +:100A8000DEDEB44776028F87031FA690DE66ED1C7C +:100A90008A7560FFED4FA7F367115FE115E73563D6 +:100AA0006B424FDEC7BFC7396EA1D71C4E75EC68CD +:100AB000E44B785DC2E9A8C18FF8AFC9E0BF521E10 +:100AC000E0DD2683EFFEA2600BF1FD8978E96B0083 +:100AD000FC371DF4BD8175D337CC3C363A4F6221CB +:100AE000FA7E34A6B382ECEF18BFFE39E6FD619EB4 +:100AF000E0D7AF263F44F2E92D8C0FFEC9DA89DE3C +:100B00007BF848027FEC938F607A99B1736B838F87 +:100B10002911CE3F517F8D4EFC2C8D455E035FCF5A +:100B200091EF41E5717E46F66C0F1F8BDF2F3DE79D +:100B30004B83158A53D9929C4A7ECE638315F27BF0 +:100B4000BE049905389729C6BB8016DC5B25F8F1F1 +:100B50004EC69728B3617F8CAFC99A83EF1609E719 +:100B6000F133D774605EE34BDEB815F95F679D56CD +:100B7000D4FF06AE7E937EE4A1F76EA6942A65F0BC +:100B80001B961FED3E84774626978A38E7507BBB3D +:100B90008AF4C4122FC54D0F7B5DA4BF3ED24BF724 +:100BA0001287BED0B90AE96F685E7A77EA9A03E1E4 +:100BB000B119E86FB2378472EF4C1FDDC760D30400 +:100BC0007DBCBDA296F67B22BE27307DDAD7F9F731 +:100BD000E89B857896867D9A3350F0B948D1BE4E11 +:100BE000DEFE267F7D08F31B3577A305FB92E93FE8 +:100BF000B6803F4E97F8F246445CC7F4C814DB1C3D +:100C000037D1C3BD581FA783FF021E0CBA30E8E1DD +:100C10004555C273AA84A755DC7F9C1611E71BF8C3 +:100C20004DCB84FBDDF87948AF37F8E37145B69FCB +:100C30002DDE4BFAFDDB5C8471BAAA0E175403CE8D +:100C4000C408F8BCDFBA3D4872B27AE62D13915F52 +:100C50001D59DB4197893DA6FB38A0ABF7EC71E944 +:100C6000C3924EFDD314F2FF30F37D1C0BE2DFC4C0 +:100C7000FD7DBF5BC8EDAC883DEE7E0FF473737DE8 +:100C8000AE9F047249AE5A29FEAC44C69F712AA396 +:100C90007554BA9528EE77ED752ACC4E7060516781 +:100CA000016D9176C4875F170D4F011DF1B4663158 +:100CB000D933B748F8DBB26B6CC0FBDBA3C4BB49CC +:100CC0002F29CDB7137CDE760725BD923C7B5AC613 +:100CD000B15DE567CEFE242F151DFE8CABF6668B4D +:100CE000F340BFB8573264A980DBB4990AC37BDAFA +:100CF000ACC945EFA0F371BFF8C2749FFB9699C2CF +:100D0000FE9FB67C7814AE8017CB8DF8B9A00D4C41 +:100D10007B6A38C2DA71EEED67217AA7AF365F35AC +:100D2000CBB937A7A99A13F3644E3A6751670A3AC9 +:100D300098E8567660DF1D57A28DE9B40E3BD1EFDF +:100D4000715B784C06E6E18CE4C13F56792199B598 +:100D50000F8BF1B54A292FF238BD8429EE5BB15AC9 +:100D60004DFC2291CFC07186F9047AD23AF319EF83 +:100D7000F5D3389D04E71443FF90F68BF13EDF7501 +:100D80009DDE398417B7D8DF793C1BE756B3720B69 +:100D9000857D30FD176F215F090A3A39FE21ABC00E +:100DA0003C8FF7719F744EAE9027AFFCF1EE3CD8AC +:100DB00067C753C279B0CF1A728304F4A2690E7A5E +:100DC000BFFF782042F9C7E57D13D43F85B4379C37 +:100DD000E7A5FAC20E437DF8C98FE745F2CCEF6272 +:100DE0001D4F32DA0DCA45BB4319C15CC44BFD72BD +:100DF000469682738DA5721E45250E3A0F30DA1580 +:100E00004D5FDB81F1B97ECFDE054F4CE0E338CE9C +:100E10004929EF9B7F5F077F08E246B9DD86F8D05E +:100E200087ECA17516E8F3D551E9178DE7CB3D7135 +:100E3000BCE7741BE4C70C67A81A57C9F94F5D9744 +:100E400019E3BFBF97FB758BC117249FDE72771A1A +:100E5000F939DE9C9DC0C74708FD607C44F2EDB0C7 +:100E6000E0DBF899F9E2F8996B3B80B744B9575544 +:100E70003CA011EB1D1F1178AF66612AAFF95DE34D +:100E80006488971B59B057B968F0BF50BBE0FB139B +:100E90004B05DF2E3F1A3A8CF4E4E1061F177C7EE7 +:100EA000524901C981B7EFFE0DA55FBD4EA172CEBB +:100EB000579FCA1DD11BFF17EB9B52E4A5FDC8F934 +:100EC000CE6EF09D2D3D72BFFD8AE4AE32F35561CA +:100ED0008F24E02F663708391B93AF4C471C5F9E69 +:100EE0005B157F97823528BDC959039FBF8BE921C8 +:100EF000F1F6C415EA013DF360C21F67FC7D0DDE0B +:100F0000D203FB3157B6AF70323D19FAC134695F75 +:100F1000497B87EB07BFCE257D58D8397ED839B0BD +:100F2000BF478616782D7DCF3B35A01D43BBB1163C +:100F300077087CED2F6F8AF7A5266833C6E29C738D +:100F4000228B3C60BEAF3C88EBEF56935C181C755F +:100F5000721B3496BE6AB7272E3DB4CD1F57FF9A39 +:100F60007DC1B8F2322E54CCE5C38E86E2D2233A4C +:100F700046C6D5FFCA5B5A5C7A54674D5CFDEBBA36 +:100F8000C271E9212CA262D1D7774F8F6BF7171668 +:100F90004DA777CE74ADA32493EEA3D3EF6B1722A6 +:100FA00071ED87CAFBAF63D8FCB8F6EC05F12E41B2 +:100FB00003FF0FF81B92F02EC140F98EF2CDD36CD7 +:100FC00071EF1B0CC43DD9547CE3EB27DE77B5E70A +:100FD000C9FBAEC3D970C8DB8BF0C3D52DF081AA95 +:100FE000DD2C1A2DC07AA82E1BB24DDCDF4D5C978C +:100FF000711F96599EB1A2DEDF820AC3936B0E7FEA +:101000003C3E9382F1F84C2E89C7674A281E9F699F +:1010100023E3F1E9D5E2F1D9AF261E9F19E1787CEF +:10102000664D8FC76720128FCF9CDA787CE635C477 +:10103000E3B1FFB2787C15E8B571E503D635C4D3CA +:10104000A3C46771F3B2B876063E75FEDFA5F0590A +:10105000E5DEA8C2AEAE7932FE9D8A2BC5EB9804C0 +:10106000BC5EE93D66CEF7C6E76580AF841BD385DD +:10107000FE1367EFFC52CA8BC381AF57E3C910FC64 +:10108000E2EC9FC16BC9FE31F41D98C3D817935889 +:101090003BF1F9443D7E0AF8BD057CBF3BDFCAD376 +:1010A0008B2DED6BA03F7C1A78E3A462217E7D1B23 +:1010B000E673AF6B23B57F35F939EAFFD025F832F7 +:1010C000CE0DAE940FF6F88F6E68203F8EE1CFE91B +:1010D000D38F13CC8BF137629E3AF1B7AA65556175 +:1010E000DCCFFECC26E238BB278873C1AAFBC750F1 +:1010F0007E8F9D9424E46795B3200FFA62658D433B +:10110000A17712DD4BC8AF52F5BA8DEE4F1EDB2131 +:10111000EA1F7BBF90F619D773C9FFD613A727E341 +:10112000A18E95854E34A0DE4D83E8FDDA2A794FF5 +:10113000E090C2341DF23A43C8F3632916D19F5799 +:10114000A138BD63058CF4C7634A09F5DF739E358A +:101150009BC59D67EDAFF388383C234E6F0993E73D +:101160009D1C3E28BF271834CEFB20C7BA538C38AD +:101170003D1107A88F0A521C3963226E717F8B972D +:10118000ECA1B1F2FD97FDD670B517F32C15F7DE83 +:10119000F7CBF8BDE312BFF077535C46B38C6B35E9 +:1011A000E6D53494E69528F7C83F8E719B93A47DCD +:1011B000145C8979EC5F1E0C6D10E88FB383F7B374 +:1011C000B6134B517FBAD0938F79DBDEDB04B8CCFA +:1011D0001812E298EDA19337273CF5FEB120ECA45C +:1011E000B574DE553D4DBC1F51E31973EA799EAFCE +:1011F0004C1774D452A0345B44FCD1F3A0DBEC0157 +:10120000026F3505AD49D87F55D24FFCCB1E7B3ED2 +:101210007E7F1D0E7C77FBD25EF6558F9EC49AE9C9 +:10122000FB2FECA757F246603FEDA0F6867F9AEFC2 +:10123000FB57315F637D6F7A05BEAB7FEEA077F51C +:1012400089CE4DFA465FFBCA804BD539DD8A2E3EEA +:101250004A11EB37F8CCB8ACC8EFF24CE71235E9DD +:10126000D1240FF98F7AD71B8EF501A78BF8CE8486 +:1012700041E4F7A99A3686D63596E9F49D8017564B +:101280002FC97FFAF4C39CCD8BF3C35C6D03DFE100 +:1012900070FA202FE362BE63E8653D7049B497AEF3 +:1012A000D41FD3A36F5D4E4FEC1D5EE3E4FB1B6FB9 +:1012B0007B94A8883BD3260732B17EF17B7B9DD8F7 +:1012C0001FD59C0F61DF4F92728A950AFD21C4FFE2 +:1012D000C3FCFEC6DC1127FC5845F17A45A57C67A6 +:1012E000A33AE1BDA41E3B52BECF5199F877B31289 +:1012F000E061AC37516E19F69EF12E7B5FEBCFCBE0 +:1013000097F22DC8067DC1CBB9EC22BDA5E37716B7 +:10131000F24BBF9271CBDC8D9C7E07FD7008F97F8C +:101320005EC9BCED9E37907E6220D905AF06EE7E89 +:1013300012E5037F20CA0DF937285FF82DAB55E57C +:101340002EF8BD4A86BF7D6B019FCF9124763BD29C +:101350007E56DB32858FE32F2D2C5F0D7E60675428 +:101360006FD2358B8699CF7DBF827E389D4F92F1AB +:10137000E77978E2B19CBE56F821F2FC51AB87F7D1 +:101380006B97F7FA72ACACD1C1BF767FB3DB03F8D1 +:10139000BA44BFAF97FDBE1CFD56178AF455A1E4B1 +:1013A0005303301F45A1F95C55A2B4E35DF4EA7420 +:1013B000513EB9FCC7D988A7ACAE34EA7FFD7DD4D5 +:1013C000AF96EFFBA66A11DB60EC37E907396C15C5 +:1013D000F89892EFA4F9EE758FB1E15D8F9BC3C2CF +:1013E0002F75C3C8950AE4D9CD116D38E2038DF588 +:1013F00085F3451CCCB491A2DEB4F06CDB5CD3FA6F +:101400006FD6BAE95DDC9BA79FB282BFFC3E611F2D +:101410004FC13FD4D83E0EE31FBCFF376E1F44F6CA +:1014200061D5CC02DA9737328DBE37B108F1B5E914 +:10143000AC99D2B7B236FACE641D62FF9EEAD9BF2C +:10144000FD7D85B47FEFCC37EDDF8EE4EFD904DF8F +:1014500088DFB77DF131BECF6BF347F4BDCFFAE241 +:10146000DF55D3976C5F5A70317F32ECDE181F6FF7 +:10147000233EF465FDC3C67AF8FABE87F971BBE96D +:1014800000C58573B9007F389FF70A31EFF8751EE4 +:10149000EA853F99F5A47F593FEA432FBAC4F9E1A1 +:1014A00016E0E74ACF0F13CF278F646AC1C211B18C +:1014B000F385FAB79CCEE035488759A11BF7AAC639 +:1014C0008C1CC0DBD54BBF567207D376F0FCC765CA +:1014D000FC7AD18020D1AFDF2EE21CF09E1DFED021 +:1014E0005D456507E929DD19CC033E629CBF3F9E3F +:1014F000C2DB95A39DD8D73DED9DACD1656A5F79E0 +:101500009BE0BF9F3E28FECECBA75E85FC729FCEA0 +:1015100070931C3DFD909DE2CA06D8C57EF419F774 +:1015200053F017741067925F20D6AB1CF2C329A446 +:10153000B30DF435E2114FCB7B6D9F7A43F49EFAE5 +:10154000A70F662AE8776E53F10D18776E536E81F8 +:1015500040AAA8FF7C7E90FA3B1DD43E3E8A754D82 +:10156000718B782D1629831FD061193ED16981DCDA +:1015700058DE7D7438CE99DCF477EDAAFB9F388E67 +:10158000F7E5DE7FC1466FAACE6FBD31AD1DCDAC94 +:101590009A3F3CF462FB617ED41667A72CDC1D9F4A +:1015A0005ED4169FAE4F900F8972E0ED7CF99E5E7F +:1015B0009085C0DFAFD47EF9AAA2750AFA8F52FCDB +:1015C000C402897F87A3A16B075FBFE3E192F29515 +:1015D0004467222E26F3918272E8A3DB24DF7F2E5C +:1015E0003FDC05BA74F42FBD1AF65765FFC9B3097D +:1015F0009FDB928290A79FE22129A45F16F2B32578 +:101600005F94B73CE6082A52DE8EA840DC8BA0E748 +:10161000FAAD425EF29F53BCB3A63981CF16BB66CA +:101620000FA0DDF7C43D9EDAAD77D3DF3FAA631D7F +:1016300074EF61687F415FF59667ECF8BB98058DA4 +:10164000DAE0957CBE0BC32EFABB48D6CFADF4775B +:1016500021110681F812D5A979F06EF7A27DE27CFE +:10166000C3DA5F9C5BADEB5E19467FC6FD25FB0BC5 +:1016700053746CCFAF7D5E4DEF7FDDBDEC367A5796 +:10168000AAE7DD07198F76F7FD3328FFF0B6CFFA0A +:10169000A1DF330FAA1ED0C199C7C774E0EF42DDA6 +:1016A000DDE40EC2CF5ECF1A42E23C267EDD8D8A9B +:1016B000787FE2CFDB7F9F0A3EFF67233ECDD3904A +:1016C0004AFB3BD8906ABEFFB56BBB85DE0FDCD50D +:1016D000B4F4D7A3F8782D536F1D8E757ECD3BDC07 +:1016E00085F7058D7243FFB7A68FFC11F8CED73E64 +:1016F000B7D07EB072F986F8CEEA872753BCE3AE46 +:10170000B0CB8BFD176CDA29EF2F8B7B22BB1E74BD +:1017100012BF2A606D6BA077D6378D23FCD436D5E7 +:1017200012FC07DCE8223D62D78114FAAB8CBB3C8B +:10173000235DF4F77798B5A637BFF3917C0BC1759D +:101740004C7FE137D9F5A678EF719C65F444C8CD9C +:10175000450FAA14777964EA3BC7F1CEB5B19FB8BB +:10176000A6952DF89CF87BA2771AF422E733FF495F +:101770000BBD8B76B97DE5E83F9AE697B8BF76E971 +:1017800021FABB0289FBEC6853B90BFEF1C4FD766C +:10179000675321BD1FC3D609BDAAA6BFF87BA55FAD +:1017A00062DF7DA37FC6C5FB8EE54E8D8B7736F657 +:1017B000999136F8BB710EEC0C31ADD54DEF16504A +:1017C0007CFB3DFDC539F03DFDC57BC8D6BF2FDD97 +:1017D000FD2B0EA7FF931F9985F1FA33AD0C7416FC +:1017E000ECF654C21DE096F179AC48DC77DB6C0B6B +:1017F000AB449FD6C8BFFD8AE7DB9A6A8761BF2FDB +:1018000091FD3D971FB91BFDCC5D1EF9F82003DD4E +:101810000DA17D3FF7C23415E775782F57DCD70E41 +:1018200057E2EFB6DA7C61A24B836F17F3F9EEE86B +:10183000E57C7B537FA11F15FBC2D4CFD2A0C77814 +:10184000776506ECD92716A8F4770A0C3D2C55E2EB +:10185000AE20C8E8BD3CE748018F8291AA3E3E9584 +:10186000C6A17CF74871BF3B79783B43BFC528E7E9 +:1018700074B2D46F09E29E4C41889D32D7E3ED4F9C +:10188000A1BCB844BC8BA83267D0CDC7BA9FFF8B30 +:10189000DECD6B1169830EFED2ACD03E5DCA772AD5 +:1018A000FECE10E2E4497E0E17F273A9DF1E34BFAC +:1018B0003BD49A3DE6C1FE5897A615F98CF78819D6 +:1018C000E22604BF514222DE8CADE97E452D88CD53 +:1018D00073AE335A85B8C144B8CD95F3FBB69CDFDF +:1018E000B5219E2EE97B7E0DFD8371F464CCCFBEC5 +:1018F000D86DA5BFA3335CF035768F4AE770F66CE0 +:10190000BF5BF2638A37CA61E2BECCE3FEDD6407E7 +:1019100025C673F85CFCCBF58A3C9559418F7695CA +:1019200055E39EC47D6A98F49AFB2CCD649F7CA6F7 +:101930000AFD688FE4DBB99EF09E797CBC1CCB1E4F +:101940007A8FAF7F92F6BCD81FF1F74612D7DF3FF0 +:1019500069CC5E82A78C9332F842E66AC99FE7ABF6 +:10196000C49FEFEC54443CCBBAB19AF9EF703FA658 +:10197000363B318FD3FDA51EE1147E98CDD7320FB3 +:10198000FC1F7E16DA6A1910C357BDC497724091C6 +:10199000F788B88032F123E3EF4824CBF85F63DCAB +:1019A0003B4BADED8E5EC6C7CF3C6FA37EF2B68ECD +:1019B00002CCABAF76DB93C43D1DB6261444BD0507 +:1019C00085917700879CD5B38342BE7414006E87DF +:1019D00002C28E3F9414CCC57BA7C6FDA0BEEE010B +:1019E00025EAEF8BA59F8ECB3BDD49FA909DE0B9B0 +:1019F00038D14FF7B27245F7B0AB0E8C09C02EAD9F +:101A00000FDB55E807F5FB847EB0B8518D3A855E53 +:101A10004EEF4704A55FCE807B7F099FF38A168037 +:101A20009EA54FB133F89F5A0A3A9FF80EF482F9F7 +:101A3000A5E4CF8BDDCFF6B8105F13BB9FED71210E +:101A40008EF8E2FBD9BC1E1F4F592EEE5FFC5F27BC +:101A500033B2EB00800000001F8B08000000000084 +:101A6000000BE57D0B7C94C5B5F87CBBDF3E92ECAA +:101A7000269B902781B09B072424844D808882B8C0 +:101A80002480511197870A3E371020EF4468BDB17A +:101A9000C59BC504888A35D48868513708145BA073 +:101AA000C1225288740141AC5AD38ABDA895264AF6 +:101AB000954720015FB4C5FA3FE7CC4CB2DF8628DA +:101AC000BDF77FFFBF7B7FFF583BCE37EFF39A73A5 +:101AD000CE9C996D51EDCBD568C6BCCB9873136382 +:101AE000ACC5A7F3A64530E6B39A1983B485B5FA19 +:101AF0007563A1BC10CAED5041857F21DF6249F7B3 +:101B00003DE260F86766B18CC58EA7FF86FAACB07F +:101B1000D582F56CA1B3AC8C7D8B7FD7057C6F7AB9 +:101B20008A617DDE94B1E6485742541663D62CB7DD +:101B3000C3E2646C7DD2EC7742C74115BD8EB16BB8 +:101B4000A88A9741DF6130A6C8BB6066EC499D9EBC +:101B5000B1C198FD67D3942181795EBFB7BD77CAC3 +:101B6000CC29136192D0B72C57E0FF2CE93A997732 +:101B700085C0BA5659FBCAD578A8DF20F2DEA899ED +:101B80005361CD3E45E6139B5CB08EC7439866BC5F +:101B9000C0F9A941FD1BA07F8B5DB6BFF916ECEF24 +:101BA000C95C99FFC5E32E98FFE3066D7FB846D95F +:101BB0001E3372BC1F249F6C5A0DF58731570E4B94 +:101BC00061EC1F499E09F618C6EC3DB67C40175BD8 +:101BD000F5C1F4A6D13056986D360CCA98E1E21CD6 +:101BE0006607F81AA215970FF3D1CC350CF05D6D8E +:101BF0004FDEA04724A8762FE2D39C60CF7D04DA85 +:101C00004DB5C342A1BF593A1BA586E8C9FE44A8F9 +:101C10006660CE0D6F43FDED499E1B70BCD861D34D +:101C20000F9B107FB346667BA0FFE28BAA8B41BF60 +:101C300069A9469F02F5CCCDCCE5CBEAC3B7C9CCA8 +:101C4000F16D463850BDDB36E961A88D76CF6CEC7E +:101C50004FD2495AB3DD88FDBD606073915E9A4BE7 +:101C600093754A565F79895D47F34A4BD751FF8F89 +:101C7000A4CFCA0F81FED4C829E3F4F6BE7AC9B650 +:101C8000541DAE3F7908AF1716EDD64D867AC9CDF3 +:101C90009E589C47B2EA9987EB4E9EBBC8E8756098 +:101CA000BF403F4077631B7D21931197253A9606ED +:101CB000FDB9ED76FA6EB01517617DC35CB3058989 +:101CC000F719F7E610EC3F2D7D436332F4CB6CAA95 +:101CD00013EBA7C1BAB19EFAC01D3E84AF9CCF23BF +:101CE00036B510E791A7F7DC87EB6783AE716D829D +:101CF000F2A15137163AC3194BD4EFC8590AFDADBA +:101D00005560DD01EB95E9870E8E9706C5EDBD05A3 +:101D1000F9318731E457593ECCC908BF757623CDD8 +:101D2000D7EEB5E59B619C895FB8092E757695DA8B +:101D3000EF533BC26C386FE6BA6F3EAED36DB11352 +:101D40005F239F43FDE83ABB13E9C01CDDF1E8685F +:101D50002C77EA9C69AC8FEFCFFD266EC3233095BC +:101D600030876735E22D4FDFF1C42DB89E475521EE +:101D70001F3A9EFB31D44B9A6DC97D04B20F477751 +:101D80003C5108E9B306E60D89626CB5F321970270 +:101D9000E5FBA2990DE71506688A87F6168BE263C4 +:101DA000D0EF58E0533D8E1BAFF8D2003E1667CF00 +:101DB000BBD8FF8DF6779D58BF40F5EF57B2912BFA +:101DC0005CA9D17944E2E20F2A413E5FE4D2808DE2 +:101DD0003E059A036A69F87610638A93F9ADD06E6E +:101DE0002A733520FE7E837885F9AF35823C81A643 +:101DF0006B75661F0A86B02C97DE0AF97BD395892E +:101E000034BFE876A647BA698242C827A7CF3232E4 +:101E1000C0CFC226CE4FF3051D32D539D83D8AB189 +:101E2000ADF630823F0C4BE97CC6E1C6561B7D9B6C +:101E3000A08BE4468711272DF1C6D8725E0FFB8375 +:101E40007E8C0FB17BDD48B763393E01B054FE0A8A +:101E5000F225F5FB90489B782AC6957C568D7C66CA +:101E6000E772C39C27C687FCFC0EA513E1D65D7202 +:101E7000211CE5C1FC36BDDF0474C71AA7BA3A04B9 +:101E80006F7E9B2C7834B6AFDD33406A21486F6D8E +:101E90007A1FD26B5F3F7F0FB75B06EEE7F7428E8C +:101EA0001C98F75578078CF74CDB0B2108B7B53336 +:101EB000196BA7FD01A81ED221AAFB5D3BADC7F996 +:101EC00093E130CE333FD133A4BFB54ABB4BCFE90A +:101ED0009CF6A57B5367DD7708F2516347E6E2BCC9 +:101EE000E25566D6033D7D26E0127100E006FD3F17 +:101EF000AD008B44F5C1F769654DC212F83EB6904E +:101F0000C333AAD0A5AF44F91DD93315F9B6E706F6 +:101F1000C63640FF7161352D48FF71F7A6E7D6C37D +:101F20003A43C7B07B6741BB2E412709D0260264E4 +:101F300076FC435E07F61771C04DF3E91915EADC2C +:101F40000055E260EDD6284A1B43B01E5BAE60BD73 +:101F500095310AF1F3CA2236F7A52C622335228A7D +:101F6000A7C7205554D660C0762A5343F9F7061CFC +:101F7000E7C970BE9E189DFEDE9959B45F503E0AB7 +:101F8000F87C03CCE51B7B24AD3BCEC40A71BDF8C5 +:101F90001DE907A6E1DA01E571053539387E5C0AED +:101FA0004F1F49F0ABB85F3CC37CEB36215CD38D4F +:101FB0003684EBF4F4C3C7109FD3CDAC558F78743F +:101FC0001ABA3AD2FBF0382D6EB6D101EBEF3EFBD8 +:101FD000E9732BE0DB93CB67CE5B88ED475938BFC5 +:101FE0007B773867E3DEC986447E9A09BC8BED00B7 +:101FF000EE17BA42750A6C48478EA4447420DC1D63 +:102000001C8E086B9600E5CC1E6183791DD93F9C20 +:10201000CA65FEF33FBF6E43A69D80FB37E2679320 +:10202000C9B7C1D1277F2C91B1A4774C18C6BC8801 +:10203000AF9E1D21BE0D4002E7EA9C13A7A4513DAF +:102040003FD57B7904AFA79FE952A89E81F074CA5F +:10205000C0689FF2BE3A8AF811C0558479CBAB7143 +:1020600076AC5FADEBD88EAA84C5C0DC88374B0B4D +:10207000D787243D5914F84EF4EBB7A17E730EF5C3 +:102080001AE27F57FCEC517DF51A841CAF30FA87B9 +:10209000A37E23DBC9FC6013AB91F948C8EF15FBA5 +:1020A0005D4528CFAF367BF21C80DF5D465642FD92 +:1020B00084C3774B005C72545A772F5C36C5F95055 +:1020C0002E235C30DFF398550BB7A747F072DC7412 +:1020D000B1FDC30AB5FF245DE73766135CE6BE4475 +:1020E000F2C66F9B19B00E098705EB3EFB8665F7BC +:1020F000C16381DBD8A9CFEE0F0FD96E416EF174A9 +:1021000006F4B4A06CD90C4C83F7B3DE7A8D26A10B +:10211000ECC037F87736CE19D6FD55C8642312D3F4 +:10212000FD3F9D6944BA5DC46A282D614D94A29813 +:10213000D2819E666F54693DF62D8ACFEEE0624FE4 +:1021400047BAA84D87DFCB410C3F83A2DB0B52E39C +:102150002AF8ACE814D4AFEC0D908F83693FAC7AC9 +:1021600071FF693916E653A0DEAA68D84001C4ABF6 +:102170001A740437EF6ABE0F41BFF16E589FB74122 +:10218000E7C27E963AF444CF8F3AC47E0B2A22CD22 +:1021900047A40D062EC7E578CB99CE8FA94EE1E96D +:1021A0002AD4072CFDE121FB6B30D498515FE9194B +:1021B000AAB321DD7E6574CDC5F57C15359CA1BE25 +:1021C000D260AD692CE4E5C4535F85F80BA93C47A8 +:1021D000C7155C6433D46FDE0F6941BC973AB8DE33 +:1021E000140CEF854DDAFCE275DA7CA94F9B5FC0D9 +:1021F0003CBF8A87A5976F09AAE7E0FAE27CE6244C +:10220000FC3418EC7F74201D3EAC329CFFF2211C84 +:102210006EBAA13C4D8E9C3297F6C548234BA3F96C +:10222000F2F927E7442938DF8648CE0FFFD5F906B3 +:10223000CFF309C770AE4781F8C4F11A800F04BC10 +:10224000486F5BB0D5F402CA8105567B38AEE38C8B +:10225000D2934EFBD063563B971736DA67E7DB78AD +:102260009F5B855CFB44716EF6433BDDE3DB1EC682 +:102270007D6CC1A3FA5CD48F0B665B48DEEC396DD4 +:10228000F199A07D09C02E01E4F51EE751D29F838C +:10229000D7077F7655EEDB80B2F9A0AF87A0BE13DB +:1022A000588FF669A01329A7A1CFBFC4B8DB504E41 +:1022B00003F965AA30FEA7A7429D08C727759FECC2 +:1022C000787D2CC949927F55CB7A363368BF33C6A7 +:1022D0007310EB773DF0C134C5DEB7FEEE57471003 +:1022E000BD8C6D30F5F58FFFB73A208FE337C222F2 +:1022F000AE86B459FBBD647D503BF64F53E03CA520 +:10230000DEB2D6E8C9403DF419775E1ECE67ADA1B6 +:10231000A910F9FDDB04CF7B28F74E4C751FD67151 +:10232000BE1B8EFACDBE4B0B52C84E3D6676A21E2A +:10233000827A2CCAC926A19FC79B9917F74FA9DF9C +:102340004A3D2A98BF3A1C5C5F38EF70DD4F7AC770 +:10235000259815C05B2FF426B3E52517EA7BAC4D15 +:10236000B1E1765265679D8B417E59DA1C5EC4638C +:10237000753C7322BCAA2CBACEABE07B9A45E71D14 +:102380008A746CD7F9908EAB9A997731E0CB6C70E8 +:10239000F9131D54CF7B5536DA539C4EE43CAA7694 +:1023A000CF641E0BCD6309EAD1689F2C84FE0D60BB +:1023B00077E09F41D82786B946E2F7B1D1521FF4A2 +:1023C000D1FCD39A3DBDF608D971CCAD73F37DD85D +:1023D000F669581FBCBF71B81293A1FE5FF103EC00 +:1023E000BBEFC4BBBE45BC7F89FBF368689FCCE7ED +:1023F00075E4E86CDA87BF646EB12FDF16817A9BD3 +:10240000CC7FAAF7DC6F037E58CCBC24974B998F06 +:1024100052D63C88E86011ECBB2AC07FD11CD7FBA8 +:10242000A84F205FFA83F832305FC1DAB91C07FE8B +:10243000F407D04F05EAF700D74A33F38761DAAAE9 +:102440006D57C57AA85DF5EE6F4D7E0DDF70BA8AC7 +:10245000D32FC9A9413805D90752DF9776005BD938 +:102460007388E8EB0AEB9DB237C5A25ED0A8F0F105 +:10247000A7E92D2E33C0BFF2311DF13574347D5CD8 +:102480001EEE4F9C8EAAEDD34EE1BE170D6C8A74E2 +:1024900063DEA5F73DE4A0FA4E3FE42B5FB5A2470B +:1024A00002ECCE92E9B8AF96FA0C1F7704ACA78C79 +:1024B000ED988622E64BF69611F9A37C8BB6BCB25A +:1024C000559BAF66EAC7BD7A1B8C53FBE79609AFF5 +:1024D00005F0E175C9D668D4CF606E8E6F11EEFA43 +:1024E000BB223C97E10F997E5DE79BF09A81B14951 +:1024F0008A6B5A32E9E73E23F26199CA5C97B34F7F +:102500009F4EE2FAFE41CBE7833C01E5F9595EF2CA +:102510003FE4E55F9E1FE724737E0C6B17FAABEA7E +:10252000659101ED076A7777B28EDA1D34F2F2C752 +:10253000AD612E8463BC91359A73FBEAC5EB588379 +:10254000390AFD0CEE7B711D66BBF42F7819EA8FFA +:10255000DE186E5F48FB3451AF23BC26EACD1BEA80 +:10256000616A57093BE6FBE8242CABC780F0443B8B +:102570001EE90FB6652F83FE8C3A90ABD82FF0245E +:10258000DA05EB439817E703E50CF576531C975FE4 +:102590004664FB5C6CCFFC0AA6A09BE0F71F27BB40 +:1025A000EF4F26B9EECA26FE16F3A81274D63B8F5B +:1025B000DD8ADF1ADE47AFE88FC27D803599487F1C +:1025C0002152A17C02E9BDC7310F7CFB6182BB9E19 +:1025D000F02BF4C4058F0F25FB9ED50E2279B1CACE +:1025E000CAED0E98B706AE92DFD62B1CBE79F9ED78 +:1025F000B4CFF53C083ABE12E09710786D4A5634D5 +:10260000F2EF92F067FC31D9B506C7EF7ADF6C467E +:102610007FE3D8B19C5FAADC16F2235501FFE3BC2F +:10262000AA9631D2CFAA84BDFD8F24CFCFB0DDAA28 +:102630000F2C5E7D04CAD316F2C318A23D63502C42 +:10264000A5E0F7D1E4AF7A1EE157BCCC737E3FEB37 +:10265000F357E57D5BB0B290CFD786FA5334EAE307 +:102660000174E74FE6FA924C5F0D9A3FFAD0089E4C +:10267000AD7A826F98BD9DFC1A553BB93291A77710 +:10268000CD43BB83954731B493AA764ECE3984F9B6 +:10269000D6901CF413E57D38DD86FA5D574E941311 +:1026A000E71BE6F0BC8CEB49D27794A27CB18EF5A7 +:1026B00027FD0CFA1BE6B690DF2398FE24DDC5014A +:1026C000BD22BCE2EE34FB905E7BFD1A06E631A72C +:1026D000F4D1E56621E787897D64D832375B68E904 +:1026E000CB5BA2399EE0BB0EE173DE317533CE6762 +:1026F0007332F71B2D89D7DB4F004938CCA09524C6 +:10270000F7E74707709605E44D2D147F8B20F042C4 +:102710003E405FB9D0A4909DB40414A8DADCBEF9A1 +:10272000C8F64BE28DD47FD84595E09A6CE37E44A1 +:102730006BA38033E01FE13CB1A7BD2002D69BDA3A +:10274000EC27FF4C088E9580A3743C3A1AFD578302 +:10275000D489E83F78AE36F700FA75D487DBAF4509 +:10276000F8DA9B6CF9E84255BF51DDE4AF619CCECD +:102770008A9B6DA4EF30B5261DED974B02CFFF4825 +:10278000729DC0F5E7BF67A0F1BF7A8CEB6FCD49B2 +:1027900015C322A1DD27EF035D2A03CB4F2F3B603A +:1027A000463D3F797532F98BAC8DDCBFC352814019 +:1027B00060BEEA637FF6F2F91D1D8A53894DB110A0 +:1027C0003F613BB41F1634D88D083E4733D3E1BC7C +:1027D000ADAB67E904F21314284F6B9CA343FF4B86 +:1027E0009AF01B058F6F4DE1EBF8ED253DF9DD7596 +:1027F00066EEF7ADB447B5E8B9DD4874539912DD1C +:1028000082FAAE3185CB5343D364F28707EB2B9525 +:102810003B8B485F09963F52EE48BAFBADCAFD6953 +:10282000BF65D29FC6E9AFC1C0E1EDFD4647F26783 +:1028300018E3FB48CAE397123C840FE9D7F251AA88 +:102840001AEC2BE351862DEF98E485AF0B5647EA3F +:10285000AAB2B01FE712EAE7310BA37E56271F4842 +:10286000473E69B431C58EFD2D1E867CC83E34318D +:10287000A417F5318B0EE5B9BAC6855F991A199B75 +:102880004FF927210FF54F261B68BCE3821E1B94CE +:102890001E85F41AE6CAC1FDEE8FC99E8C9471C2E2 +:1028A000BF8FFC5B1B4A7A9E55E5FAB2B5F6836D85 +:1028B000CB21FF9CB0D3F31FCF9A45F4F2B0AA9876 +:1028C00060FCAF22FF40F5BE1AC714D4E3C6093836 +:1028D0005F865E1219E035F955BD1BF9513570BAA6 +:1028E000571F8E6EC176BE58CFF81498DFB50D7E97 +:1028F0005255F7D94E3C5168EF8F8F81F683821481 +:10290000BBD8C7BC54BF5ACA913685E48853C73C6C +:10291000AD5CBF0C413E380C08C2FAB5E6F06C94D1 +:10292000CB5F87F0D49BCFE7E53D1EE2AB27BDB37D +:10293000E62AF23FB29AD1984687423D90BB6F9DFE +:10294000E5FE9F9962DC6185208F400ED4E038005F +:10295000A73B53B8FF6A6F1473D960FF1816E2994A +:1029600083EBABEDC889477AD91B1E9B8F7A202C4D +:102970002A09F7BD8F857F24186EC34226CF43FCFA +:10298000BC25EC451CD701E347D516B8519E80FE07 +:10299000457CD633D348FE90A80726D3F7BD8AEFEF +:1029A000E945B88E5BB91FAB79A62B21341AD358F1 +:1029B0001DD2EDAE7FEAB99F04145DDCCF0A4A5CFC +:1029C0000968170C761B7528070617D6FCE541F435 +:1029D00047BE6570E29946376B4A227DB691FB4F40 +:1029E000A51F3A1FFDA5B00E7DFC9889C530EE4F9E +:1029F00015FBD3C548BFA5625C2BF733341701E143 +:102A0000C3FC9A1D1CBECD0BEDC43FBDFE9E4AD635 +:102A1000EBCFC17DA5BBC626FD60BCFC6E59DE4177 +:102A2000FB7EF778BB0DE560AFBF679E91D6714A1C +:102A3000D095775EBAF07F717F51F7DCC1FC3CCF57 +:102A40003CD515E8FFEB5605DFA6EAC8FFDB2DCE27 +:102A5000079F65BE0CE4936E26FA2BE17CCD547E75 +:102A60005ED85DC8CF11D878A719E9A2BBF75CB0D2 +:102A7000273CD04F24BFCB73C0D8FACBEB7BD7A673 +:102A8000F07DF86CACEB29C4B7A46349F77B73E322 +:102A9000F2D1EE1888FEDF657C9F783BC5ED433AA6 +:102AA0009B6276163F099F0E0A3F1D9BCEED18A62E +:102AB0007A3CB89EF706A7E7203C82E721E5D45E82 +:102AC000D12E339199D19E07DEF5225E46EE1A494A +:102AD000FBC9AF049F238BA1BF60A4D80B33E35A7B +:102AE000A2904EFA8FEB1E356BD4778C97E2DA45C5 +:102AF000EB16F507DA77109DB87EA3B1F53EF20329 +:102B0000565A9C481747B108DABD709BC98F7EDEC4 +:102B10006E83A511F9F358D83D87630064FBCD9E01 +:102B2000D7B0FFB9B7DFB012F3CA8141F62580876D +:102B3000EEA28E3C9C6F81D97304CB2BCC9E61B1ED +:102B4000B0B4B3433D2322504EBA0789FDD73DCAE6 +:102B50007DD9F9F3F914287CFCA346CF1F10FE079A +:102B6000950EAB3385E895DA314B0CF5735CF0F9D3 +:102B70007E836BE27998FFFE35C372EA613E05E120 +:102B8000EFDF598DFBF5537139A40F09B81C14EB15 +:102B90005AA873C7FAF59AF91EC7712A6C45C31271 +:102BA000808ECF1AC47C2D62BEAA73C877CD1775EC +:102BB00029A2FB0715A27BFA83FC2BDE48E21393C4 +:102BC000AEBE85F8AAC8EC44BE5A1F0AAC037ACD43 +:102BD0003B623E604F30D48BE13BE9CD9B98732440 +:102BE000F276A289F34BE22A85E4A7F497153377AE +:102BF00012AA8EFF48F17C85F3FE4BD83FC7A1CBCC +:102C0000CE5D60A5713BDE0FE5FBF6443EFFEFC3F2 +:102C10003F63AB75E8D79825FC54B3CE1AC93E5A2A +:102C200028F4A55998C2FC66339701C7BF95790C63 +:102C3000C8CFB7332FA5F3988FD23B999FCAEF66C1 +:102C40001D94FF4358F6D05A80FFCCA746A4A17F1D +:102C50002A00DE96544E1FF74673FAF82C8EFC03BA +:102C6000315744AF33057D007F46633FC09FA9398C +:102C7000C9017C322546E0ADA33E02E03733D69150 +:102C800083E78BD75DE2789976C246F0D9AF80842E +:102C9000CCEDA30F1014960480C3F50285ED17F850 +:102CA000FE74BDAB9CFCD3475CCBA3A3619E53F5E4 +:102CB00016C24BBB53EFC37D7BB3D241E725AF2F89 +:102CC000F73444C2F7D73314673DB4BF217A668422 +:102CD0001FFB418B0AC66DCF527CB83FCF58C7ED62 +:102CE000FDC221863E3B1CFEBD31559B9FEED27737 +:102CF000E279D9F42CADFD3E83AD3E8FFEF419DFB1 +:102D000063C78F4F053B1EFD3B23D948F2A75DB932 +:102D10001D7F5D2AF70F6AEC78865E46904FB78478 +:102D20007039DA3EF1E0846E58EFE76D0E82E29B77 +:102D3000195C8FBC2FD57D3DE2E59CA16311C2E5F6 +:102D4000E33A80EC08C64ED481620934FD699D8D5A +:102D5000F227EBE2293D5D67A7B4AB2E9DCACFD524 +:102D60003929FFD354D72D388F55211C0F72FCA55C +:102D7000824E570DCD7BCA0DE3AF7ACB40F992D688 +:102D8000A669B8DCA5433F7E280CE0BDF44585FC70 +:102D900026E56D2E23C6542C7CCDB312B795C56F96 +:102DA00075CC4031527951611E609149E9EEBB7199 +:102DB000BEE3DE3B118BF0F9AC6E3CCDE3549D8B52 +:102DC000E671A6AE90D26DA9EEF958CFD5D6B9323C +:102DD0001EFABB796BA79A08E9549742FAF12417B7 +:102DE000F3F9000FEB0C7C5F5897607622DF4E1EE4 +:102DF00035EBD91F3094CB9E0A5CCFAD510BA60E9C +:102E0000423A185FA462BDDB812E312FE9F6FBF94F +:102E100095C3A152D0C4D97D0AC1E7DD9D7A9AC776 +:102E20008563A1743E7E61E7DE72CA77853A515FA1 +:102E300090F566BF9C1287F6C1929733E3D0DE38D7 +:102E400003F861B0DE55A2FC95AD4A2BDAC979DBF7 +:102E50002393904ECF44B51EFF119D1F18C92F0C10 +:102E600086E9A7CFA07C1B12EF44BE3A27E4306866 +:102E70006C61B85F5719A57EE8C9C4FC9950BE4F74 +:102E8000E3387680E3DEA4C1B4FFA62BAA0EEDBB27 +:102E9000BD2FCD74D2393DE3E3EC7A86F7BB79DB05 +:102EA000D317F6D0783EE2CF17B73F9BFC63C8BD7F +:102EB000B8E3E1D03B19EDAB6C3CC8A5BD6BC25C7F +:102EC00038CFBD06E7F15A94C3CF5AC84FF3F39FEA +:102ED0003CF0F16E4C1FABCC7D00D24DA951D44FCC +:102EE000F14FE74D4B807A9B77B11C648B4C807916 +:102EF00022CC236BDDF90309305EB62FB200C36923 +:102F00009C5B720E0E86FC2F5F51FCE857CF6D6DF7 +:102F1000D9A0A0EFE5D20B8351CFFC65AA5DA39F9A +:102F2000670E2D3C42E7A241FB7856F3F97CEC6F2B +:102F3000DBE0D62591C00F2395D6D3CB1D48BF7FAC +:102F4000CA253B49F8475E6E9BFD2E5F973701F51A +:102F5000506F9191FCD7B87C03E4CFEE4C217D619A +:102F600097CE4BFB8977BED9897AD459B7F769A434 +:102F7000A34AA88F7A60658E37FC1AB4D73E4A758B +:102F800002C5B0A1CF5D5F88F0A9DAF9E4B4C15001 +:102F9000EFEC44EE972E79F9F369642F8355897627 +:102FA000CAD99DF5B17740BB47B3F2290EC4AD6FC6 +:102FB000A57158351FE729B14FB18E6C3AD7205211 +:102FC000B453D48119BF47B545EE4F647DF8AA6E5E +:102FD0005BEE403FFC588FD9897EE7750E6F02FA91 +:102FE000BBE4BE07FBD7DBC80F0946D1AF6D36E99E +:102FF000EF57BA6F493F98ECEF2923F7CB497FD9B8 +:103000007A23DF673781BC403A93FB2C8CFB51EA73 +:10301000B8007F1B6C063930CFC4A74CE417B9D277 +:10302000F1A55E542DEC987CB15FCE1D54FF6A076C +:10303000ACF7B4D9730AD7B790B9B8FF5A75DA515B +:103040009EFEC1EC3A8DDF2BCC3D49B806D80FCFA0 +:10305000E17CAAF4A02FA504E84BE62BDB0F2F9907 +:103060005D5F90BCBEC2FAC17274E9973A96037470 +:10307000B0F44913D915F5C27EABB7E699513EB00D +:10308000D7741587615FBC96B7ECED6FA93597E4EF +:1030900007EE759783D73EE0770FC8153FC87DCF01 +:1030A00008ACD45E8FFE1817FCCF0A7433E92218DF +:1030B0007801FB5A707BC053541ACC77320BD3D4AF +:1030C00073B148F2CB324BD47F6EBD62DE1305DEA6 +:1030D000265E381686F270E997B92417075ACFABE7 +:1030E000623DBFC5F540FA5A863B15E777ED1736C6 +:1030F00015F97892AA679E80FD17E63F320DF78B8F +:103100004BA19AF9F7D2F915CEFF870A8F5F60E7D6 +:10311000795C509BB0CBDA4AB3C8EEDB85762BDA0C +:1031200055B38CA47FB659C1DE84FA6D6FC710FF0A +:10313000EF95FE94221E97D31622DA6F8A237D64C0 +:10314000B08997B338C6CB65FFF362A97F90B33CD3 +:103150000E625E288DDFDFFE3D98F92BB29BCDB469 +:103160003F34E7703BB179F908EA5FDAB383F535AC +:103170006F8E4279531F46F2B9D9BAA13119EB3D8E +:10318000A877A21C6976F8EF44BBB9F93C3FB706B3 +:103190007B969F8BAB5E2BC61980FDDA9B47FB07A6 +:1031A000EC55CAF7C523403D80EBFB027FC7546E48 +:1031B0002F1E433B74749FDFFE586F1C06EFC7330E +:1031C000234C457A0FFE2EF120BF4BBBF30303D7F0 +:1031D000339B239B62F0BCAB3ACDB308F13C6FE16B +:1031E000A6104F805F6488EA2EC1EF9F146F7A119A +:1031F000FDA0AC98DB631FC8B892BF713B79A2B148 +:10320000E3A6DB000E13FFAE53BCF6FEF8EFB5EB02 +:103210001FD469E2349EDF1827EC7A8EEF9EB7F553 +:103220004E8A9991E596E122AE45D1C4BF605C0B10 +:10323000FABDBC2F8FA0F10B6771FDF4C2325D0B9C +:10324000FA2BFC223EE679E1F7F3B65909EFCF0BF2 +:1032500038DE2BE4DCF3E21CD8DB6AE0768FEA4F41 +:10326000ACC671DB32C89EF7334177BBC344B93D6E +:1032700002F3F56F8C6138AF6E29671411CF22E22B +:103280005D9E17F0FE17E25FD6221F0E18FF322058 +:10329000DC609F40BBF701BDC65FF27CCD280937DB +:1032A000DEFE691E57D4EB0FA974083BCFF7F07010 +:1032B000ACDF1643EB3DB7EC93BC7576825BF66EE4 +:1032C000ACB7D344742EE126F1FA7C2F9DF584101F +:1032D000FD19B99FEBB8ADC31A789E75DCFDA91531 +:1032E000E5D19F6BF57EE377C4C5DC25E26DEE1278 +:1032F0007136772DFBF82EDCEFEF2AB9740F7DAF16 +:10330000D0C60D1C4F73ED41BAEC85CF299D263EEA +:1033100068CFC6DEF8200E1F6B6F398F4F389925A6 +:10332000E38378FCD0A950011F11FFFDB283D6CDF5 +:1033300004FEF7ACE3FDC9F9EE51F9FAF7F8B4F180 +:10334000527B7AFD3E3ED223255CEA6D4E73205CB3 +:10335000FE12E3398AF87EC8926BC673E79288FC46 +:1033600023E837AB52613F06383F31DCF33E964BE2 +:103370003D45FA2FBB0CED8775B88E6557B64F9655 +:1033800087B65529C0B7A7DB36EDC214E643F06017 +:103390002F7139DA65F387E3BCCAE1D3A4283C87EF +:1033A000051E8EE279D44B83E3498835637939EA87 +:1033B00003E5AD7A574838E68D7DF5A05F8F8EE343 +:1033C000816DE7FE8432D61ABB5C4F7698793CE873 +:1033D00031E776FF3A1CE54C99C5625E867A535018 +:1033E0007C47D9CE55ED29D9FDBFF79F4F907CD9A9 +:1033F000A1D7D04157001D50798C51F0899FFC72A4 +:10340000FDE5AF3F3C301EAC4BE0B92B08CF5DBDB6 +:1034100078F66BFC7B5DAD9F24E1BE7E4EDAF14E0B +:103420007E2E59FE2B7ECEB842C8DDF241AD790822 +:10343000F7C17AED399C4CCBCD4C9D1870FE589E4F +:10344000CECC8817E9872B7733F59A80B8CF721FD7 +:1034500033637E970EE48785F0A80A7C523F509F25 +:10346000F0596666E649902FC3FE30D5F9C88F2B18 +:10347000E7D56F1E41F0CE18CEFD922BA41CB11AD9 +:10348000855C74C623DC46AC336AEA9FB31AEFC589 +:10349000FB03193EED77D9FFB8E10AE9D9E9817854 +:1034A000760C0C9709C3B97DFE8B5FF4D6D7F33841 +:1034B0001B50E3255DDAB95D65C0F9BD6F94FEACC4 +:1034C0001F2482FE578EB491DC07A75D399EC42865 +:1034D00048CFE9B8DCDD1509F92CD463F9F832DFFF +:1034E0000BF7203A7FE87D23C161D7DB8616F4A372 +:1034F0002C1CCEFDA06DA2FFD3759E31270CE82FAA +:10350000A8C9284EEB5BC7A2753966A493C5EB73B7 +:10351000CCF303FC19F55B0E8623BC465A74E437E2 +:1035200039BD650CC5899DB6E8589882E563CC58CD +:10353000DE6539F07B3B7C5FB43E3237F01EC0E283 +:10354000753FCC280E8073E6162DDC47B56AF3A3D1 +:10355000776BF3D5C319C1F75F6D97E3D7E6C71C47 +:10356000D1E6598F36EEE895F1EED937E379CF7A87 +:10357000BD133F9558745E13F0BB6AE17CCCB6EA8C +:10358000E9DCA9C4C6E38B4EEE5A95877A7BF947EE +:10359000C587D13E5B7C94C327381EAEE4D8E1BF1B +:1035A000A11D0EF855287E6AB342723C384E4EFA81 +:1035B00085FACB93E5D28F9D1E484FC1783F23E219 +:1035C000812A6ACBC7E0F98A84FFD5AD6B28DEBDBE +:1035D00074BA76FDE5AACA965D569E7AB97E6F7179 +:1035E000D9113E45E25E5167FDED37E2FED7797BAA +:1035F000E129DC17AEA92D609F8C8182D57F98864A +:10360000F0297A5461284F8A7E3DE2358A3B15F6CF +:10361000D96271BE651B6FDFDD01F516FA14D24B5E +:10362000E707C5B715AF0E9A47505CDBE2DDFBFF3D +:1036300086E306C7B7C938A8B28DDF9AB4716FDCCC +:10364000FEBFA6AD458FEB5F28E7EB9D44F714F86E +:1036500055A1BEF3B21398B91AE3B3DC3B87C3FAA2 +:10366000AF69E6ED2A198FBB92F1508B4C60178041 +:103670009C3A6235125D7CBE2E82FC959F5367900A +:10368000AEE7FEC8CA413C5FF98242F66FA5D07B27 +:103690002A7FCEFDCE8B541ECF8EF4E20A9877851A +:1036A000580FD247E077D6C4ED67199F85715BAE9E +:1036B00080F3FD0A5817C6B363BC5660BBC078AD33 +:1036C000C0EF01FE71B2E7A57FE17983EFC5CD3090 +:1036D0004FFDBF873A516F66CC1D8A7409F286DBB5 +:1036E0004333B9FCEA6FAF2C15FAB281F465B057D9 +:1036F00068BDCDA56964EF0C469988FBEFCF4DD42A +:10370000BE58E77B3104BE19841D53ACE3FEBEE214 +:103710003B8C049FE6989748EF697E92FB1BD1771C +:103720008F7A64F39A11DA73B9DE386BD770F4EFDD +:10373000DCB126C1A9DD5FE5B99C2FE6F2FBAB2F1A +:1037400006F7890FF03F01BE778878EB3B449CB5C4 +:10375000B46FEEE88DB3E6FD48B8057F977C27BFD0 +:103760004BFBE6DB040F1B11709EDF1CE90BC1381D +:1037700049567265E7499B84FED0B32684D67342CE +:10378000E1F199C5A1EE47AE43B8AD4D4E46B8D96B +:1037900046F0FD2B2FDF35DCC6EBD3F993C437732E +:1037A000B986A3DD72624D482EC249C6771DCFE1AE +:1037B000FB49D8581E879220FA4918A1D3A4F1A139 +:1037C0003C7EEAC4547E2E611DEB36A2DEB4C9CE27 +:1037D000E3948A8DEEDF5D1B301F18D78C704A1181 +:1037E000FD49B821BE510F29FEA9899F63AB9E14E4 +:1037F000CCDF752C9DF07742EC6F122F8C717BEC37 +:103800008E7762E89E9C948BDF4F97F21CD9407AAA +:10381000582F5D6EE2767464AF1DCDF5707627F794 +:1038200007344F15E7C2405FF25CF8EF989F6AF7E4 +:1038300069ED68A01F6BA01DFDDD74D64B1F4174A0 +:10384000164C3703D1D315D0D9CDDF4567D07E9C38 +:10385000DB3A309D55BEB26D9717CF277EF56438A1 +:10386000837AA7D4A65827DA7F9B5684BB203DA92C +:103870007AC3B1BF533E7DE1E5E25E1E1DA108FFA4 +:1038800090CBA2049C0F9FFEC5A333280E6393C167 +:1038900086A2B07A8B89EE2D55ED2CA5F84BC87712 +:1038A000F2FC2A3A87A9DE1D148FF9F32763ED1481 +:1038B0005FEB4DC4F81CD08B295EA36AA381E2396B +:1038C000AB8EEA9D4816D5AC6725CE2FB83DCEE32A +:1038D00022D06D75ABBEC818D1BF1C2884F6DFEAB4 +:1038E0009D8F9E477F73703C6789C2F787E0F3A086 +:1038F0001F8D10E74157B1AB50EF03B838FD488F2B +:10390000309F348E76A2DFFA177FBE7D0FCCF3D4C2 +:10391000077139E81AEADAF86638DEAB94E743F261 +:10392000BCACAB3525C27319B8CAF49C3857E8C390 +:103930001B97DBF6DD0AFA9A306E9AD20A833F7C37 +:10394000028C57D162207F55C5B617363F83F2F7F8 +:103950007D13DD932CDF76E84FD7A01DB0C3103D5B +:103960009D2FC7A2C4F6E1ABDACEFDBB123F65BF07 +:103970003E64B48FE2DF516F90782ADFB1DFC84632 +:10398000F5876741EB7E6387E532F86AED9C46FE7A +:10399000CD17BF3622BF9DDAA7B03847FFF6259B6B +:1039A000DE0CC77A125FBDF8EB8737FF8C3D63A949 +:1039B0001EC55B0C84BF3BD1574AF46D65183F565A +:1039C000F281C9371DF1FA93A544E79FA9359CCE32 +:1039D0009F5D118BFA6C89C11B6BA3947F2F79EECD +:1039E0008782FE5C09FC7E8B3701D7B370FDADB4D6 +:1039F0009E45CC437457F22C8F1FFA12ECB41D97DE +:103A0000C1234BE7FCF1D90613DDEFFE4CC4277B45 +:103A1000FFA817F120F7917EF243B1468AD883FCC4 +:103A200097424FFDD388DEB80673A01D5EBD715569 +:103A30003BE2E3F450571CF9CF98EA157052301E60 +:103A400050FF87A9711C1FFC7E03B503BDA100BFF9 +:103A500063FD7603DD730868477093E3FF408C0FC6 +:103A6000F30E457FC067B1DC3E6178148B74A3F020 +:103A70003655CB4AA6DB01FED9629DBD7CBEF16105 +:103A8000CED782CFBF38CAE547956F6621F17FBB9D +:103A9000C11F87F57CFBE728C4FFC171E702FF1B4C +:103AA0000D827FB5E5302F550984E73E6EE72F6A1A +:103AB0000E886F47388973DE6AD09FFDE981EB1469 +:103AC000E7D5E23C77B1E0F760FC05F3FFDF47881C +:103AD000B86EC1FFB23D5B7FF973C73E7EF7127CC3 +:103AE0002A40BFB0219FBE6F22BDA6628D9EE223F9 +:103AF0003F597D30F66AA0EB33AD923FB5F2B497F3 +:103B00003F97F1F8F592973629489FC1FC79A6C4F2 +:103B1000A75C963FE1FB65F9B384FDDF95A7BDF097 +:103B2000D6F2E3E201E4696ABA169E5FB2AC880994 +:103B300058682B1A46FEFD20B84A7806CBC5DF8EA2 +:103B4000B05F562E320CC50980A3849FA44FC63C9B +:103B5000344E2FDD4AFA94FB532F7D06AF570BC727 +:103B6000E0F25342FEB87FC3E3592BDA14716FC100 +:103B70007B38712CF1A38BC40B6B3A9C181D98F702 +:103B800005E55B83EABB82F2EEA0FA9EA07C8DA6DF +:103B90007EC5EE83461ED7EAD7D433D5DE44F6522F +:103BA0007F3DC1C7CF21779E377A912E86F4507C16 +:103BB000ADE121E6C57BDB3DAF727F57B7BD271C6A +:103BC000F59115215C2FECB6897C24CFF7C41857EA +:103BD000A2FC93DF7B42B8FFB9DBDD131E19E07F47 +:103BE000E86CD3D37DE90E1FF76FF59F4F3DC1B54C +:103BF00043F8BFA6EA2D49B56331DE3985EE7F5D16 +:103C00006830887C1ADD5B967AE35F99FB4F13700E +:103C10009EA1DC5FCEBC2E15E354167094B1923792 +:103C2000EAC3D1BE5FD0C6E3548A576BF1B9C8323C +:103C300027C26F47F9A28D2F598CF61BDE935CAF1C +:103C4000FD5E26F8A02C880F3CC2EF1FCC072BD2BC +:103C5000855E91C372843F89CEDB9608393C559FBF +:103C600075CB5C8077F7113D3341FE429B9EADC41E +:103C7000756E55485FC58B15C85FD2FE93F0EA425A +:103C80003E1931B07ED1F5F24779180F50B1EBC330 +:103C9000EC9F41DAB5EBFDE17B31FFCA7F247DC8A3 +:103CA000FAD72FD8F7B77B50DE76EF3331A4E7EEA3 +:103CB0007DAF27FD18F37B4C64E7773F64E2E7199B +:103CC000FBACE43FE91ECAF5FAFA57BFCEEEA0FD01 +:103CD00083DFD36F4D37121E2FB4FDE338DA791727 +:103CE000DA6055A817EC0B237EA9DE1342F117DD2D +:103CF000AF7E9D17186FF35F5D8F8CABE8B6F2FB5C +:103D0000E1DD91DC0EA8DE7BF50B184F50B973BFD7 +:103D100071019417FCF69B6C9497DD2F717DE79CE5 +:103D2000A1E339F4A5EE4DBFA9D990807E4546EFB9 +:103D300083CCC978740EF2457FB8703874EFE3F61F +:103D400004C0A504E5FC40F0F8633ABF87FA3F0FD2 +:103D50001EE7EFE1F2EB2A86F1077D70515CFCBBB8 +:103D6000D5675668FDFCFBBEAFB351BE7CDF7A7BE6 +:103D7000FE3F5B6F78C6FFD4F5727A5F9B6EE7718A +:103D8000A34174DF9FAE5FB99FF2DBAD4E9AEF1592 +:103D9000F27B76C6FF547EFFEFC1F7F4FFB5F87EE5 +:103DA00043E0DB6A433F67F7ABDF24B17F61DDE5CA +:103DB000FF4BD72DF5F37CBDF3480ED47F93B51E92 +:103DC000753A48DB203DA35E9C0BBC1EEFE0EF384C +:103DD000093BA840D8416B33B8BFAB9EE9E8BCAE05 +:103DE000C05C4E7A66C190C7CEF378361DCDE775BC +:103DF000F3B59BF93B5E5ABB6FCA10BD1FCF1F0EB8 +:103E00002E87F1A1DE41ABCE56CFBF77E2F7694EE8 +:103E1000AEDF4F1B7213C5BD1698DF9E8B7EE12966 +:103E200016AD5D7453909D73835D5B5EC85E8A467C +:103E3000BF5B619681DED89A86F503ECBFFB33F851 +:103E4000BB0237B0A6069BE53F0517B25355019755 +:103E5000834170E90F070147C6F59C60B8A99647F2 +:103E6000DA296560A7F275917D2BED5409BF60B822 +:103E70003161F7AA34641F7CD521FCBC38A03F5ABD +:103E8000772F3C05BCFF55B806E3E7FBE0FC34C2E6 +:103E9000795C7F380F517354E4A76B853E3E458DA6 +:103EA000E4F921ED7A37C1CF47ED0ABE70AAA877B1 +:103EB0004CB644AA14C7651FDAF71E4C2263892A40 +:103EC000F39AD0CF6FEB780DF9AEE80913BDB73296 +:103ED0004415F76155EEE7066EF586E6527D97319B +:103EE0000AEB2D667873AB289139155E9FE1FB399B +:103EF00078690EDFFFC1B32F6C57843A34D67B54F8 +:103F0000A57BD6F407F04EC53499FA75E9A278FB83 +:103F1000F05C6AEFD5F1F62EBCB76E60B6240526CC +:103F20003BACC076FF31B4235684D039C2F47C6EEA +:103F30002F48BE1F3592FB3F64EA1F69E7F4A4785F +:103F40003250CF9DD19041F6487D88BBF265DC8729 +:103F5000B685D13D9FA29577DF3C0EE7B77D9013E4 +:103F6000C9E5F48C1D14373FBF61DE0FDF83EF9E80 +:103F70002D21F4FDAF233D5F6600DC4F2BF67B5E09 +:103F8000860FF36F3D68C4B8E419AD3BCEA1FF6E58 +:103F9000C69C308AF39CC15A7F8FF1A06C8E9EFA2A +:103FA000EFDC6E35222C6E6E3DAFA27D75F34405BD +:103FB000C51AEB0CB125DD07F32912E7B7CA48EEA5 +:103FC00017A90FE17EE1A295438727C3F79BF13E36 +:103FD000DE65EC9B5C597FB2B21EED9461E27E8E91 +:103FE000AC8FFD60BFE347F273708B808BCC0F2BDF +:103FF000E0F58B1B4D9D2968C7341AFC23207D3EBC +:104000002BDF3612CAA727B369EBC652BC0EBD63BD +:10401000D219C20E93BF7C8DC38E769C8789F88C93 +:10402000D50EF24F754E761AF15D93CE350E1BDE2E +:104030000B09CB721D46BC2F6A52ECC8EF9D931939 +:10404000F7B75B795CC3719B3F15FD1BC79D194E8C +:10405000F49B0F93F13FA342C94EACCEF4A4E23CD3 +:104060008A9A8ADE423E679760DD7918CFCB8878DE +:104070001FBD2394F9911FFADEABCA18897E1AB3CB +:10408000F3275745F7BD57354CCFE3531B053D4C40 +:10409000C77855A0B3E70C1DA5D8CFC90CF13DCA10 +:1040A0009667E1F4C5707E9D06DB705C5FE78A1061 +:1040B0001D9ED34D7F88D31BD0BF5985F60FAB2CE7 +:1040C00014CFE30DA2DFBB96ABEE169C8799A9F83F +:1040D000DED4CDAD39643F7F94E5B1E0BC4E3EC83F +:1040E000AE413C2D58BD86CE4524BE98DA3E6510C3 +:1040F0008C73729383DE6593F8FD282B7F32B6EBC9 +:10410000C5D31C85F003EB31E3FC9FCF9A7F3DC202 +:1041100007BEEF47FC4DCFF7A7E27B5253F515CC16 +:1041200085FB693C73E2BE7C8171FEBBD0A8921F07 +:1041300049F2BBE46BC9CF306FE25FC98FC17CBC71 +:10414000B98EDF7DDC5267A6F4177536A6A631B6A8 +:10415000B52E9EF2DBEBEC94B6D6A5D3F797EA9C8E +:1041600094DF59379EF2BBEA5C94DF5D5748E99EC5 +:104170003A377DBF07C087711E303EC91B29677063 +:104180007EBADC3E3920F167689CAC43392DF107DB +:10419000F62EBD8721DFA91A482FF8EF9A3FC831C4 +:1041A0006F446E1F5C311F122027316F8DEA5B1F39 +:1041B00086264E8C0A90732A7F7F00E5616C6EDF45 +:1041C000FAD1157831B70F2FD86E5210DE900E2528 +:1041D0005CA0BD3F3637102E5D8F5D85782FD139BD +:1041E000C9DFC13AB6BD42790B9DDF2619D96EF4FD +:1041F000D776FCBB85A17F54AF73C69BF05E518917 +:10420000C2D4007FC3DD35214C0DD8BFEEAD8DD4B7 +:10421000E4A3FFFDD821749FBD15E7791AE9F1F8F1 +:104220000367FFFA73E8FFF9073F1DE5217AECDA2F +:10423000F4148EBB2CD449FE08866FC591FF85CE41 +:10424000CBF02FF05DBBF9DE307AC7EE39A3ED4F2E +:104250003F477FED4ABD0DE5E8FC06BE2F7F807825 +:1042600004B8FF59E051BEAF5724FDE241EFDDFD38 +:104270007A6432C16798F0E71CFF51E24F288E70D4 +:1042800085DE26C271B4EFF189F1E578C1FD7D9C30 +:10429000C0C86F025A3FAB053C7CFCA0D18F779021 +:1042A0003F56CCF40E82628F6677C1774FE3EBF412 +:1042B0007E9B527B84E2133C660BDDEF635E4357CB +:1042C000607F4A2D7FE78D750C8944BF8E7CA72DBA +:1042D0006CACCB88F7C8512620DDCC4F3F40EF4671 +:1042E000B126C586E734C5E27BB1BCBFAE7A32E603 +:1042F0005819FBDD48FEFED5990C95D63D71241367 +:10430000E76E4DB4EF4A3F56F16AFE4E6271538E2E +:104310007151C0FE325F7C5F80EF39047CFF00FB8F +:1043200085FE0637169522310E16EF3D0C4E9F5F27 +:104330008A727BF0DC1B555CBFAC7F74241FFF4C82 +:10434000061F7F2212C7387C1794EB81F3E7DEB19A +:1043500091EECD31BB11FDAA72BCF9E9B92B314EFA +:1043600079FE6A7C8581DE81A4B8C7B5E1D336A128 +:10437000FC3A1ED46F85D8EF607D463CFF3C891126 +:10438000EF742ECCFD7965DB7F49E76B651F9A687A +:104390001F2F1BCDF75B96E5CBE3EFE369FDE753FA +:1043A0007EF911BD8B58BD93BF9F0829F7EF4A7F57 +:1043B000B093C71F06FB715FDBFE61F865FDE63B4E +:1043C000F9B9DFF7F9CDE53DB7EADF70FFAF8463F8 +:1043D000B57291CE9BAA5F5D117BB9FB64785E8359 +:1043E0007418EC47FF3E3F7BB05FD196A93DAFBC50 +:1043F000D2FB6B325F529B9D72620CDE67F32466C8 +:1044000022DC6BF35230DEA8AA7612A5C1F7DB4A94 +:104410006A33A97E59ED182A5F385211EF6632BA15 +:104420001F29FD99177C6911EC3BE651BD0E260B47 +:10443000ED2FA8F6083C8F93F796BBB7EAC97EE844 +:10444000DE3A6A03D26569DB13461D7C5F98C9F5C5 +:10445000A6B341E702555B3FA1F3BA4AD64EF80135 +:10446000BC3173E0F910C60B0E1A787EE5BFB4D6E6 +:1044700020FD96B62AAE4DB81F995BC9FF7161EB5E +:10448000DD066F003E2767AA9AF71BE4FCF332EDC6 +:104490009AEF385F9C4FB9A9F5DC07C809BF0A63DA +:1044A000FC3DD89EDFE3F9ED99F563280EBAB475AB +:1044B00047158F430BB3A15FE574507CE4CD62BC1C +:1044C0009B33B9DE77469C839DD9AE27F98BF345A4 +:1044D0003E3EAD68EFF1CF16ED660B789D42393266 +:1044E000AEAF7E69EB1AD207CFEDBC290DF5FFEE1A +:1044F000DDEF86A7C2F7BB33397F76EF0CA377F4E5 +:10450000BA77FE6CDA5EA0EBB3AD93A391FF64FFC4 +:104510006599FC7D87B36DFCBC8FF9781C5325C26F +:10452000794CE03C07D13B0BB29D8CDF3AB3F3D71B +:10453000E1BAAC3E3C569BBD47F04918F93E86D9DE +:10454000E0F1A23FC1B09BBF934CFC0DFD37A67BB1 +:10455000DD28BF653DA3D9459BAB7CF78BC9FB7EAE +:10456000E2FE0AEC5F6F7B60FE4B4A8DE44FBF6753 +:10457000B4FDF63B510EBF69207C2CC9607EF45F10 +:104580007C5E6B6D413C2F7138E99CF59E3142CECB +:10459000C4778CC3F88E8A4685B930CE2C3E89DF2D +:1045A0008F11BCDFE970BEB32A9AEE13909E5DE1D5 +:1045B000D333CF18921FC3315E9D8DF70FC738924A +:1045C00024A0136CBF2693EBF1C78D3C6EB32299E8 +:1045D000C7E50F13712715513C8EBF4BC6F9CFF2BB +:1045E0000FC7B8978A971228EEA54BC6EDC3779CE4 +:1045F00067452E8FDF97F0ADF8D181E1487715F34D +:104600005BD3B1BCD3613B47F1452F5BE9FD20DDB6 +:104610002B5611AF16B2C1C4F76FBAEF50BF298144 +:10462000DE2BD924E8ECB9DEB863673CCAD9C10FE8 +:104630005AC203EF1F941A9BF87D0385C7BBC8BC01 +:104640005C17E6715D5D829E4B43455ECCBF34BC1A +:1046500089E6DD89F72B107E2FF27B03A713DA772B +:10466000511CEA8B19F4DE62A7C3B768379587D06F +:104670007B87A55E85E479D92F4CF41EE9A917B98B +:10468000DFBDACAE96DEC32C03B6C77B6E9016E2E0 +:104690007DB55386A6241CF7540CA468573DC8F575 +:1046A000A523D6B549C4DF1B4D0ACAEB32202DD451 +:1046B000F72EB0A67B9EE1DFD15267651B4D744F8C +:1046C000C003DFF1BE25033D08E9A6970F366AE374 +:1046D000163B1DDA77160E09FE3B24E0FA4626F754 +:1046E000BB5486B5AE4DA6F5713E01FCF07872E67E +:1046F0004BF85934C671A429281FCA5A433A51EFBE +:1047000028DB6AA0F74487C9F8386187958240C3DF +:10471000F3E252C6F5CBA9FAAD141FF6F996905CF8 +:104720005C57A7782FB3EC473FE6F079C5EAE2EF94 +:104730007FD0DB44ECD4E6448A179F8E3164442753 +:10474000A3F8FD84A8A66CC467D9AAAB741427A2E9 +:10475000E77617A42E85E2E8CD24472B841CAD5CB8 +:1047600035216202F2D53B7A7ADFBB2C6211D97D0A +:104770009FABC04F9791FFC1708BCEE272A702F83A +:1047800004EF19578A7B56E59BF93B92E52BB95FFD +:1047900091FD82BF1BBA34C41F8EE32DDDA47722A6 +:1047A0009ECA8DADC363701C21F7A0BE07E592ECD5 +:1047B0006F6948EB22EC6FE9B6102ECF33A3455C4E +:1047C000CE13B1A8E7F6AF2FE6DD5BEF85F0C0F8BA +:1047D0001D59AF773DADDC9FF4396BBFFF4368F2E5 +:1047E000C5D6109A175824747F2D78BD670C301FDA +:1047F00098FF996D21747FEB3390835EBC3F1DE978 +:104800007A9CE21CFEA0A77778705EB81F2DF6692F +:10481000DB570E7246601C65E53B052AB657B3B8F8 +:104820003C063CDC42707AC740F75483E1FE999025 +:10483000DBBD7CB72D8CE8EECC608EFF33DB79FCE2 +:104840005C67A4B8876C684DC2F8E633DB46E4D0F9 +:104850007D4F548A00EF65368EF73391AD49B680AF +:1048600072496F78A1291EE903DBA4A09EC0F5B1AF +:1048700072F36A8A67C178E7BC5C4AFDA6CBC42B99 +:10488000033D92BD3E2F4BE815385EAC88AB27B98F +:10489000D56A44B9EC11FA63C5D6E078675E7EB597 +:1048A0006C0FB38D9671D618DFED55282EA6BCE19E +:1048B000BE52E48BF29A357722BDCAF997ABAC10A1 +:1048C000E541A7A2A7797486F077AB59E038C93CD7 +:1048D000B5C5F6ADB3208BF3FBF559764ECFB8E3F3 +:1048E000413F150DCA6AEADF21FD067C3DB21D80FD +:1048F000C188FB44E764513EC07AE5FC82D72BF1C6 +:104900007B671697339D0EFBE313A3FBEEB95DB8EF +:10491000342622EA3BEC6BB45C7BE38E81D74B7090 +:10492000ADE88FCBE2FECB72981FCE73F87A6DBCE8 +:1049300079FA466D7EE4566D3E6BA7369FDDA6CDB7 +:104940003B5FD3E6C9F719C3ED7DBCFF8EF63EA6EB +:1049500068EFDB4DDCDEC73CDAFB98A2BD8FDFD110 +:10496000DEC73CDAFB98477B1FF312DE68F7631E55 +:10497000ED7E2C7F56C0698F785F684FBE671EFA48 +:10498000297BE38F4B2D41F7B886C8FB3D321E349F +:104990006C8078D030C493BC171B7C7FABF79DDA5A +:1049A000A0FB5B485FD8CF5F623C8F6401BC3F5582 +:1049B000DA5726C0787B927D994B689F0FB1603C97 +:1049C0007BC78ACF56A279B433C6F378560CDEABD8 +:1049D000EED9CCEF4BFB49CE742CB7BF739DD447B7 +:1049E000806E8A00BA48C7F2FEECF7BE3FFBBDEF0F +:1049F000CE6AE944EA73CF1B7A12505E7EF2A27946 +:104A000035CEF313E1BF6473CD41F10DDC4E5AF2A4 +:104A100098B201F7A76D59FC9D810B47003ADF4121 +:104A20009F0B2E8E213DBB37BF5AD1D13B17F1B121 +:104A3000B40F497D2C49017D0CE51FAC1FF7E9112E +:104A4000EB749AF967F84235F496B9252AE8FEC95D +:104A5000604DFDD1BB9383EE9F8CD4DE6F98B37C09 +:104A60003FEECFB3578FD1D42B764F08829B98A7B8 +:104A7000D04B8B511FC47DE641339D3F2E7D4F4F60 +:104A80007A4C0916825C2CC1BE008F251B451C7513 +:104A9000AD76BF2D519917DFF75A20F621496F25C2 +:104AA00036E68A84F667739A36E3BBAAA56FBC9B89 +:104AB00067C37B79CAE438744E6C1FE1F90FA4AF69 +:104AC00024838BE2762B76A445E23B6B5D470E5147 +:104AD0005CA6A49324832D14F1D9D2C4F57BF48F62 +:104AE000E9A3FAF0DDD2342834D5D2B7AE80F81578 +:104AF000D2873FC7F815F8543259F11A47F7CD7FDE +:104B000089D837E47C4F08FD9FA5F27E7E20CA2B12 +:104B1000725F7F2E0A50D7A53BF0D52ADC9F725AD0 +:104B200087FB514F7BA625F60E80C77693A707E932 +:104B30007FC9DB05E1184FF7E55603DD27F86BF376 +:104B40000BCF619CF3AAA6178CE80728537D468AF1 +:104B5000F37CB1C58871CED76F69A1EF8BB6149184 +:104B6000BDB898D590BD7852BECB21D65F92AFAC80 +:104B7000B7C1BCE78CE2FA7A49283F779CAA9F78B4 +:104B8000289AF42B85E27DE7B8674E8D413DA53527 +:104B900092DE4F0A1DC5E54A30DD5F784BCFFDB888 +:104BA00073389E077AD769F64507D1F99C8B9964CB +:104BB00047DDEACFE0766B96D66E2D31DADF41F92C +:104BC000CE7EA7A7DF2BE9F523380DA41F57C2FE21 +:104BD00082F71FDD13F51A3AAC9E12A6A1D3B92CA9 +:104BE00080FE61E8DB30D825203F677A8AA6FEED9B +:104BF000733283E83AB7AF9CE4C1359A7B9495F859 +:104C000085EEA1E4F7FBCEEF63DEA8695FC96669B4 +:104C1000EEE7956EE4E70A953B23E9DCB144BC730B +:104C200037D7C3BF57EDE6DF61211AFE1A56E0FC05 +:104C30000FBEFF19F86F2388F387B9F8DF29FDE16C +:104C40000E98EB7D8F00DF9340FF81E61D02717EA1 +:104C500089F3267D57F8932AD3B93FA9D2DB6EC4D6 +:104C6000F73A00EEEA208CD36C52081F50DF3C2844 +:104C700097E79751DCB5367E0CFBC378CBAA23FAB5 +:104C800022E493E072A03BAEF7EEE171AF8BD70563 +:104C9000C76BAEA6F3D32AF40F05E0AD79949DFB64 +:104CA000CFB6EC383C18E030DBCDE9B3A275A6A155 +:104CB00028AB3F3D015DD33BD58B18D0159EFB0043 +:104CC000FFFAEC03AF1BD545B43BE4FAAB5C9CFEAA +:104CD0000623FD65F7A7BB4A6F8D91DE5D59AFB026 +:104CE000271CBC3EC26330D263103C087E417090EA +:104CF000F0E985575079305C167918D1C7A2DD8A62 +:104D0000CFA7F45FC740700BC6EB62D66EC47B289A +:104D10008B772A4E7C875E9EE7B0F1417EA4B75226 +:104D2000C88F54E516709174E0E6743EEB22F78B61 +:104D3000DC86EFB08EE9A38B39D3B5FC78EBC55890 +:104D40002AFF57E904767EF2C35E297DC87548398B +:104D50008CFE42A20B112F1DCC1FC1FEC6E74609D7 +:104D60007FE338364E131F3DC03B1DC1F1D172DFCA +:104D70000EDE378ADEE0FB86949F1EB11F78561840 +:104D80006259E07E23BF0BFFDB9207D3E93D92A47B +:104D9000E583A85E51888DE2FB8B96F3B8EB22A8E1 +:104DA000670FD01F5636A424E13EF0F1C3239EF3D3 +:104DB000E23B980F44C78E073C7FB2C2108DEF4E86 +:104DC000CA7A1FAF989A8471239FAC31CDA5F77D25 +:104DD000FFDD4CBF5B54B92B8EBF1BA7B7C462BCB1 +:104DE000E6D99706D1FB488785FCAF58F172385E4B +:104DF00027285FC1F7DF59233C8746D1F973CB667B +:104E00003AB8B0B564A3FC3F3A8A60C84E625FB955 +:104E1000B40FD1BE7E32C4761BF67BF2458313CF2E +:104E200063A1DC85E7463F50FC9F5E47EFDD28B17C +:104E3000E8B7E97A4F4FF7334BF5FBB3B1DF8ABAE6 +:104E4000DD49A8C296E4C27E09783E67F21CC571AE +:104E5000CB57BC904487508D2DF4EE7F80BFF77DFB +:104E60002CAF447F2FE43DCBD322F8BBB197F7F7AB +:104E70004AB8FC509C5F6F16FB37EAE998A29E8EF9 +:104E8000F13DA8A7631EF5744C514FC7EFD5EBB4A5 +:104E90007ADCDB787E1BD3E7F71DA63F4FBFABE381 +:104EA000CD67E935B4DF5AD2D1FE5CAA843A515FAE +:104EB0005CAA70BE5EFA51083F7FF22568E821F8CF +:104EC0005DD56B7B40D70AA0DBEB2E9A59E0BDE5A0 +:104ED000C92C52932F302768EA4FB53934E5D7C72C +:104EE0006768CA6FB0E768F237A55FADA97FB37393 +:104EF000B2267FCBF81B34F567BA666AF2B30BE7CC +:104F000069EADFEA2ED294DF3EB754533ECF739F57 +:104F1000267F67C9039AFA77D72CD794FF9B9ED137 +:104F2000FB7B6D685F99F0DD2133A55FEB6C2AEAAE +:104F3000874BDF4EB320FE2716E86A2E17B7909CEA +:104F4000CDE9FBF6D1AEA1D931FCFD28A4DBA1E26D +:104F50007D286736C76722036D8DECDAF604A4A3BB +:104F6000E07AC1E513C30E7C6E071C366ECFBC5DC4 +:104F7000057934F1AA03635220BF7FFB7C9E9F70AA +:104F8000E0D7C9907F63FBC6DB55902F13471FF80E +:104F90001CCB6FFCD5629E9FCD48F5782F3BFE76EB +:104FA0002FCEFFBAE4D54EEE0711EF6BF8C96FD1E3 +:104FB0007B9FC56CF1A704BC1382F0C07BF3080F84 +:104FC0004CFD40C7981E003AC6F435A0E362905FDE +:104FD00087818E313D02F6267EFF1DD89B98BE0547 +:104FE000F626A6BF073B13D376B03331FD63DD5CF5 +:104FF0004A8FD679A8DD9FEA4A283D565743DF3FBE +:10500000A8ABA5F4CF755EFA7E63B6F057ECD6FE7A +:105010005E943CAF94E793F535AC230CE540871ADA +:1050200089BFC726CF1D07B6EF55F66980FE15C1AB +:105030005CB766D3B9A2F6772D9E4DF1DC910DE3F6 +:10504000BFE7989D860FBEDF76B1E6108600BD27CC +:10505000DE1908EED729E861F468D7BDD85FEF7B89 +:10506000FFE23C7DBD819F9BCBF374199720CFCF8E +:10507000E92F209E48C62B5C6BE6F7B765FC808C59 +:105080004F9AFA0523FE9FD4A8D2399B55657E8C92 +:105090003390F14793B023C0FBA46846F2210EBEC3 +:1050A0001B73F9BBD27A4837FE0DEA6707C44399F0 +:1050B0009817FD9A71E25C1EEAD1FCA67EE1A1F888 +:1050C000A849220E63289E63F27A746E6B457B08B2 +:1050D000DB0FEA38887EB8C47F004EA0DEB30A8FAB +:1050E0001F907118583F8CD7F763BFA97F87F1C312 +:1050F000FBF864FDE47607FAE1D6FFD0EC44FF99B3 +:10510000FC9D03722A015C660BB94687EC9817FB7D +:1051100025DB1247FEA17C511E99EA5983F0779B4B +:105120006C1F85115FA50C457D60A6D097BF036FEE +:105130006B2F8737892F898F807812C287C49FC4CD +:105140006F301E25FE82F125F1F8BF156F6355FE05 +:10515000CE9FA9C24CEF077E1F1EEFED61D322A0A8 +:10516000CA1BA91E27F255D145FB61CC2F6093E9DC +:10517000774864F91F0728F77CD1638808C0F7B522 +:105180004296FF6D80FAB29E7CFF42F61F9706F5AD +:1051900063FAD75F3A95DF0B2B7C8FFBD1DF14FBD3 +:1051A000269EABE7E405C46B662D26BD9859B87EF4 +:1051B00069877F502E5D7751D5E89B858CCB29D8A8 +:1051C0009855A4BFC2A073EB1B853E7A63903E1A2C +:1051D000AC5F9ECE16FAA58339FEC5F758CF67930C +:1051E000BF57ABBF60DC17D2738A5D4FEFD1C8F7F2 +:1051F00057E57BBE53041F4DC1F77CC3F1F72C3D2F +:10520000B41F5ECFBC94DE00EBC1F426E6A7FDF32D +:105210006610BC98BF05437D207F306CC65D784723 +:10522000AF604C412ABDD7D1F75EA13A7A1CBD5779 +:10523000F8175BC07B8507A6D8E99CF18099DF0B46 +:10524000467EC3DF2B94EB7903F69D54D8170EC22C +:10525000BE84E921D89752617DAFC3BE84F91BD3C8 +:1052600097336C37CDAE8DF791ED6FB2158001326B +:1052700030BC6ECAFECD1084E79B9123A6E07ADF96 +:105280008CBC6A0AE2F7CDC8381D4F4D464C076A00 +:105290002FE9FEA62C7E3FF526DB341AEFFF013CFA +:1052A000B347C7F487A7136913FD88E677C3E39371 +:1052B000F17C8DCB9F252FBF9DAD87FC299C1AE8E3 +:1052C00011936A27D03CAFABBD9AD2CFEA5816C231 +:1052D000B5C2CCE115EC87621BE37481F1C7334C96 +:1052E0009E49387E85AE2DFC1A28FF6CFDBBDBD1B4 +:1052F0007E003DBA00F15CA1B7AF76A25FE64D1E1D +:105300003FCA2E1D4C9A65ED4F8F6CE36CCD7D47E7 +:10531000498F156609472FE53F4E7539F93ECDDFB8 +:105320004995712E434CFCBD05F96E27EA3374CFC5 +:1053300031486FC80BE5726D8889CBE95E796514D9 +:10534000FB32F4938772F0F150F2338627B8E6E22D +:10535000FAA49FF6C290307A0765923F3302F38534 +:10536000E81780A91E10F158D767D65892010F3F51 +:10537000C8F0CCC7764C7F498FF2F1AD34850D5221 +:10538000D0AF3BC64276E1F7F06F30FF978D16FC49 +:105390009FCDB235F7E4045E607E149773E1A89E5A +:1053A000E2E326B1E14FA1DFA2E0880123A7FBE2FF +:1053B00026E3F9F9E1D4233C0EA8CF0EEDA1791E26 +:1053C000B229EC19589F295EC7EC01722CC41ECA81 +:1053D000EC01F3094B8FD2E4ADCEC19AFA11E393FD +:1053E00035E591AE919AF24185B99A7C8CFB1A4DC4 +:1053F000FDB8B9F99A7C82E7464DFDC492599AFCF2 +:10540000D09A3B34F587D5CED7943BBC659A72F9D8 +:105410004E29F3BADAD363B99CC6BF94C6259A7AEB +:10542000859645742F32ADE9479AFE989DFB1BBCCB +:10543000F00FD2D59778F116D2A9F15A3F44816D79 +:10544000F26B88A24411B7041467C77DA0C0A6F50B +:105450004B245A0A297E3EF17BE29A7E395ADC1BA4 +:10546000BE523AF08CBC3C1D5470BD22980E0EA169 +:105470005C4AE1E70481EBC5738240B8E0394160E2 +:105480001ECF0902EBE3394160399E1304968F3930 +:10549000A2C5FFB8762DFEAF3A967F45F8BABA435B +:1054A0004B17125F134ECEBA2CBEE6C23FB44F3339 +:1054B000BECF4F0138F9597FBC497C49FCFD57F1FB +:1054C000F67110FF7EC9568FC377E7BB8BB8BC1E41 +:1054D00068FF3687B84EA21C192AE479B03D2FE345 +:1054E00040837F2FE5DFF41D56DC27BED6758C4246 +:1054F0007C2630FEFB148FC579BE40B91C87D124B1 +:1055000050FE4CE96D39B86F760FED398EBFA7EDBF +:105510007DC0CAE534987CA80F763C606D097C7F1D +:10552000F19E441E07F4CD68A12F38793C10FEB0DF +:105530000BE6AD4E1BC589176589DF655759D23D0E +:1055400050FE7F0071C17B78008000001F8B080037 +:1055500000000000000BDD5A7D7854D5997FEF9D47 +:10556000999B9964864C42C8071FC924217C39C085 +:10557000CC24B1A86807242CEE0676422B2488613F +:10558000421204050DA9AEC162333141A3C2366C8B +:1055900003A26D714281BA2DF449105B5BD3762A68 +:1055A0007ED03E6A51DB5D5BDD38484B554A89F160 +:1055B000D98AFD72DFDF39F7646622A9ED1FBB7F50 +:1055C0006CF2E43939F79CF39EF7FBFCCE7B6F95C8 +:1055D000C549544134B2DD1A4D2B262A72846DBE62 +:1055E00049449DBFB0DB29939F9327D3ED25FEF15E +:1055F00014865C446FD9A8B69F977C849F4F27DAA6 +:1056000022C7A274ACBBCAA213E5100D6FD2A307C8 +:10561000981E5949D07FE4605EF401EE5F55147323 +:10562000CCC4F81EDD778092C6377BE4B8458BA0EA +:105630003F7CB7113DA011BD6393E391AD9EE8217E +:10564000D0A3A8A386F998B98F97CE22F1F311FFC2 +:105650003D62A565E0EB91A81E299B4F343B6A276C +:10566000AB3D699C781C7258A38E9573892E7BCCB8 +:105670009D323EB73F3F85DEFC273D29E3FED8AC97 +:1056800094F1F293BE947E1C7A61FA95A716A4ACAD +:105690009BC67F7A80E853AF05539E17DDD2BA824E +:1056A000E689F1A09E4D74457C590ABDA20BE9BA6A +:1056B000C6E3D7F94A88A0D7B74329E3E4917AA98A +:1056C000BF3337FA00EB698A952269BCCF576D1456 +:1056D00071648B7ED0E0D68082799ED16D8D76B25A +:1056E000FEA6320F99D9922F0BE671EB10F3241F0F +:1056F0003C1EB1639CE9816F1E0F5AE578249DFB27 +:10570000DD7378E34A229B35A85329D17E5B7C1355 +:1057100059127E509F462DB0036F1B841FECDF365D +:10572000B90FFCA9F1904F17F274CF21D11EB2D35B +:10573000BA10EBADF36E2715CFC7BA7801ECB3DA28 +:10574000A7897D8ECE085EEF13F3DDA2FFA8EBEDF7 +:105750004DC424EAE7CB7DD6EAFABA1AACD7A8F64C +:105760009837B1CF7A73FDA2806CEB33253FF47983 +:1057700043F8919223DFA02E7B40EC3B1BFE7DE3A0 +:10578000CEFE5D337968ADD163835CEC6FB610F308 +:1057900053BD386E253FD18BB35FD9EBBC82E56A30 +:1057A00063BD5E49B4C9F7A9DA08FFBB9CF5047E66 +:1057B0008AF87FD8A11AFAE5F655BF45ECB3C3279E +:1057C000E5AD52F1964322DE4648F235D2664423D7 +:1057D000C5093B26D92902BB1C6E671639161E6BFC +:1057E000B78BF61BEDECBF654447DAF345FF5BED85 +:1057F0001ED1F6B7CF12CF8FB5FB44FF78FB02D195 +:10580000FF767B50F49F6C5F26DAEFB587C473B8E0 +:1058100027E5124D97AE35AA17E53F4A2FD5F74831 +:105820003B79B6DA420758846A9D96698184BECF77 +:10583000FAA55D072067A59C17F526E65559BC9982 +:10584000A79D89792AAF8CCD23AAFDDF927754BF1B +:10585000D6849F3B92FC5BC9CDE3E3C4496A3C8993 +:105860009FCB4DFD95C875130209BB25C58F88AF29 +:10587000D1F8A1781DE247E9373A5D5F067DDDE7A3 +:10588000927A567A88235E78FE83F067D61B45822B +:105890004E3FDB2B6C6E5D65F95303FCA7D9657831 +:1058A000D2784AD8B9A19A26105D130CEDBD8F9F0E +:1058B000AFEFB5511F3F6FE06DDBB265BB9DF96B7C +:1058C00088D8DE8A27E5A39B289419D3D01BB680FD +:1058D0005EE72ECDFD08F71BBB53E73593A473930A +:1058E00073E93BD8A799AC6FC5555E2A069D9DEF1D +:1058F0005926A0B526D6F1F3B637FAAE7A26297F17 +:10590000BDEC73E59CBD0C8996E67F84386BB3EBE8 +:10591000D0E346BB92CBE98B214E7E66F1A5717F29 +:10592000245A9A494E611F1157DCC6D2988F0FDA5C +:10593000A3573DC3F6F5EC6322E509BDB13ED3673D +:10594000E1DCE8B2FACA3C1FF7AF517D52AED8B7DE +:10595000D52E732AFBE94FA1B7DF9EB4501A726CA3 +:10596000AD5DC447D81CFF6DE4FDD362FCB8C387AE +:10597000FE79FFA97931962F8CFD27F29CFC547A91 +:1059800023DBEDE4467C1F774589E7BDABF51DCEF3 +:1059900064BBBFAB0FE42E284EF0138ECBF5E3C5EE +:1059A000C3CA99E10F9107C336CAAD857D8E587C75 +:1059B0001D4CFF7EE7D3B941D6CB355AF08FBE4A96 +:1059C00091AF0CE4AB9BD98F711E55F3B908FF550D +:1059D00074EE9863CA3D46AED1BCB4508BC28F46BC +:1059E0002216718E8F2CD304DF9CD782D0F7CF89FB +:1059F000A933FF3514CB418B38A53419A76811A7FB +:105A00003453C629FA8853B488533CFFCC45BFB001 +:105A1000D3672F5E25E40D775F21FA338A227A3A25 +:105A2000F2F30D9AEF1037AB0FD28E745E1AEF5867 +:105A30005D1986DDFD328FCF30CF978FD9D32FE31D +:105A4000E431BFCC3F4A9ED60E4DE4D9564D9E97C9 +:105A5000ADBB34916755FFFD1EB35F25FB9FDB2176 +:105A6000FB719BB35BCB94F24D2F93F2A1857CD35A +:105A70006D523EF4211F5AC887E7C843E8230FA19F +:105A80008F3C843EF2105AE4213C5F4FA1421C0D32 +:105A9000570F132D498AAF4F5FB4D392A43859449E +:105AA0005929FD6BED0529F3ABDCC529E3FF903FD8 +:105AB0003B65FC3A8F3FA5FF4FB3AE4899BFDCB7BB +:105AC00028A54F0BAE4BF4399F51B026A5FF19AA5C +:105AD0004DD0633D5D1F6A48A1BFBA76532ABDF021 +:105AE000D694F537505BCAFAD2968E94F9EBDA3435 +:105AF0006A4AEE733A869F35EE9B28FCE48FA5A197 +:105B00005A3FDBF7CD8CBFDC612B819D0737C14F3E +:105B10005BB7A4FBA49D7B9649BBEB24ED3C5C27C3 +:105B2000ECBCDD90FD2A5F9EFB12FE33C8765EC2A0 +:105B300076F901DB196D8CED8CF669B633DA67D82E +:105B4000CE4BD87ECFB19DD19E643BE3F94FD8CEEA +:105B5000685F603BA37D89ED8CF614DB19ED2BEDBE +:105B6000B5A2FD597B58ACFB8FF68DA27DADBD452E +:105B70003CFF657B9B68DF688F88E743CC47932DAC +:105B8000C11770EEF424FD02D74E4FD20F706C7225 +:105B90001F3836793E706CF238706CF238706C7267 +:105BA0001FF835793E706B727FBFCF23E20B7835DB +:105BB000791DF069727F6E4FE4D977E05F5FF9DDA0 +:105BC00033686764361CD338353C3C70B2D65AC053 +:105BD000FD8C86401663059BF652ED12EE872F96DC +:105BE0008B7C308F8605AE0CF35CD82D1C23710F97 +:105BF00098FB6181187F71B6DBCCDB24F293FF3810 +:105C0000097CF9E26C8F78AED6FBC86D41ABE62714 +:105C1000FA979E37767F354FE4C7243EF87CF4230D +:105C20009FFBB73B03B8AF1CD6B57521F6A7C38C55 +:105C30008F5672BEBDEC485077F078ED71B7DFE259 +:105C4000C1FC9600EE2B2F99B847CD9F61A593B666 +:105C500040428EAF7FAAF800E83DE197F93921670D +:105C6000DC8A7CCE792218E5750B874F5D9BC9F3E2 +:105C7000C3914595A05F6D48BCC0FB5C59837B4DCB +:105C8000440B1E48F2EF1F9AF4C29181A7915FBFA7 +:105C9000FEE80AB92E5DAEFBFAA313C4FE2BBAB41C +:105CA0000316DE7FE1110AF6F1FA9326BF971D89EC +:105CB00059B05F4397DC4FD16DF84AA1E1E1790D0E +:105CC000D472577E0574A411F236CBF50CE452FA67 +:105CD00053F36730491B9F1FB782553665F7AC48B1 +:105CE000087A5EA9CB79863D28F0D3AD4FD610F265 +:105CF000FDD515595539A03B483EC0D4E5152FA711 +:105D0000C82DD476B9A02BCEAF99112D96C1A2ACD7 +:105D10008874DC03B52D8F6C7D7612E61F245FB18D +:105D2000471C3D744D20C1DF9CE080CEC71F79E940 +:105D300094EED060773A3131C98F38037C1676F70C +:105D4000FB6C04BBD458DD36E48DB1E7BBC20BEF6E +:105D5000032F08AECC71B71C6FBDFBE2E9FB908F3F +:105D60009E907841E19C06B79421BC4F1379EDFDDC +:105D70002EBE6E40CF4FA44509788DF18487FDF18A +:105D8000BCFE42EE6A5EB7A5345AA8B3BE6E9EDC76 +:105D9000372FDB22F0C01F9007CF454EACA8653AE5 +:105DA000A7BB1ECF85DEDEEFBA3E332628334EE496 +:105DB0007D9A4CFD346DDF580D211BE6F61BB8D7DC +:105DC000BCC579263813FC2FCC8C43AE1E89F36AF0 +:105DD000F91779BAE1C589B9C05B63F1DFA62E5B1B +:105DE00083C1F7B44D6370DF2D26EEBBE513709FC2 +:105DF0003B60E23E1FF904EEB3ACCD0C5F221FAB5B +:105E000056E13BC63779814BE01B32EF2F9F734839 +:105E1000391B5E3C71BDC02D2D653A708BC23B6B4A +:105E20003B249EA1018A9669E85F2BE274ED134141 +:105E30009FC6EB7E6AE2989517A7087BBC6AE2963C +:105E4000EB2F5E26F24275DC219EAFBA5820DAD5E0 +:105E500017678BE72B9D323FC4BF4BD17B709F8B65 +:105E6000A4491C354802378DF5533FB9ABE0F773B1 +:105E700082DA09C0C5E5C0414CAF16B86822FCBE45 +:105E800061C724F87D94046E1DEBF7ABD71657411C +:105E90008ED9CB3442BC2ABF0F477E24FC7505FB4C +:105EA0002B9E2F8F74D872B1EE0809F9C2E6FD540B +:105EB000F9F7D878A8CF30EFEDCE7825F2C8E87D95 +:105EC0001E4CF23D972273EB8033F91E4D34593A44 +:105ED00018B19D5D5E397EE3B1B9755D56710F8A6B +:105EE000640612F72CF41D49F72AF45D4975064043 +:105EF0008C8549F75CE07B875C47B981C4BD0C6544 +:105F0000A08B49F7E212937F757F037DAB5C17CBC3 +:105F10000D24EA05AA3E813A01F26E95E58DAA3C70 +:105F20008103B302325EA5FFBC65C6ABBD6271B82A +:105F30009CD7B5DE5F96477FC52F1BD96E88CFFAF9 +:105F4000CCF81D1A9F63770528B86401511D99FA92 +:105F5000623E88FD7E8DD93F1858F18B6EAFD0B36D +:105F6000E8FF4B60415D84E977FBEE0981BF441E89 +:105F70000C05111619DE2085BD1F9743D5270E0687 +:105F8000E4FCB1758A46AF3C27545DEDADFBBFF331 +:105F9000ADE4FA8BAADFF13926EE317B57E6FB1F21 +:105FA00030F329FCEA919BA78AF3F4A180795E7112 +:105FB0005C78664AFC8B16F8D79326F12FFAC0BF9F +:105FC00068817FF11CF8177DE05FF4817FD107FEC7 +:105FD000450BFC8BE77F2E0EED0E883CDB63C7FD87 +:105FE00097660D3F7C88F7AF6F3708FCA87BF2A35C +:105FF00037A70721C7A37719222FAAFBF25AE3D4A8 +:10600000B3F6E2841E5E6FFB371BEA42ACF6320F3A +:10601000D359D3E2F0216FDB2B42FB913732BC3EE8 +:10602000037926EC8D6A1ED6EB64B759AF291DF6AD +:10603000DF81E7E5924E75893C178B2CF40CB15F3C +:106040007D332F78087CDA2BC28F81CEFA41FF7323 +:10605000533C38A7B20CD8A73E8FE346E4A1E1C277 +:1060600095AE849E9F32EB4E61C432AFBF60D607BF +:10607000D94EDD25CC5F5D8E5BE89DFDB60BF7AAA2 +:10608000A702F2FEA2EA6E89BA8455D4878C362321 +:10609000DAA9C97A821148D425949E547D21A11F82 +:1060A000F773A28EEA323CC02D0DCE194BE1F70DED +:1060B0003D5A36F24195A5FA39819B7717970037FB +:1060C0009F37F955F7C266F37C6BDD536A1460DEC7 +:1060D000FD8CDEB85F9DED1174867769EE031EC4FA +:1060E00015CF4BAA0335EDBB42C4455394DBF2F107 +:1060F000E3E786DD27A67D177E170B1AE0B7C9CD2B +:10610000E921A9EED1D8A3093F1EDBFFAF8045FAF4 +:106110003DC375E8E9C6DB8B8DF5A80332BC68F595 +:10612000420EA90FB58EE7C5308FED2AF5B19BF968 +:106130002E96FB0592E8AF07FDA4FD951FFC26E017 +:1061400012F41ADC1EA3A018AD5BF0F9313D98FAE9 +:106150006F8C456D3EF063E57DB9BFC61DB5619F8F +:10616000F55D7E03F924BC53EE13EECE32E6023F1A +:1061700059DDC634EEAF4D97F1C7FC099CD9C47AFE +:10618000C9469D2D9B71A5F3E3FA6930F96DEAC903 +:10619000329A539EEFB6C1BFEBCC7CBFBE6B91A1D0 +:1061A00063BD55CA3BA9DCF44B539FBFDEEA7800C0 +:1061B00075FEBADEE7CB34F8654B815F6339D3CA2D +:1061C000A53F4E2A97FA54FAA873F7087946F5B90D +:1061D00087E56792CDEE90A0CFFE1041DC34F54A02 +:1061E000FA4DBD0D8697DB0DD6B03155EC2FF53944 +:1061F000BAEFBE1F99FB3A7CD897DC61F19EE1ECC7 +:106200009ED585428EDE876CD09BCBE7590A9CC910 +:106210007E20FC52F9437DB98CBFD1FB52B9559E0B +:106220006FE5327F8DD6B1CDF348C555D3CE060A82 +:10623000F2BE8DF97C3E5E22AEC6D6EBEACC7ADDAC +:106240007E2314CBD71271CFE761CBB14B9C136186 +:1062500073FF35A61D582F229FA8F150B9894BA076 +:10626000D7A4F5A007BA0BD5F8E258D9566F62BE8D +:10627000DA776DB65C07BBC03F169AFB617EAB98C0 +:10628000AFA7D4791A47F1EA911DB938FF06345106 +:10629000576BDD7562DA9D88EFA319A8DCD2B9CD02 +:1062A000876E2DC0E16A8D0A3B28BE9A199F20AEE9 +:1062B0003798E75E53ECD2F1FDEB39E1E5E549F1C2 +:1062C000D7F4A5A333902759FE18F2C41B479FFAB1 +:1062D000F9959EC479A5E459DFDD27F2E28D3BB341 +:1062E00002169917BB9117C3A6DC8D5DD25EC4F66A +:1062F000027E53766DE8D2C4F9D0D8767914B867A7 +:10630000140F98F61C6B47655F6547A57F3E874471 +:106310001D57E165C5FF2673FFCDE6F9B0C6F4BB96 +:10632000351B1789BCB8BEBBA11CC76F9DF9BCAE9D +:1063300029F5F9A8FEDD4AFFDE7BE1C723FD52FF08 +:10634000233B6DB2CE7644D607CFB57EE7A5553C4C +:10635000EFDDBD7D85C9EF559ACDBAD906132FDE85 +:10636000C4FABF54BD90F57F77B2FE6F7AD4D47F64 +:1063700049FFEFBE87FCB2354DBC776BE4BF05AC7F +:106380009F7347BE649BC2CF6F68D6B2C0EFCEF298 +:106390006229677F9FAD04F8BFC5EF469D77A79937 +:1063A00007C6FA33B7414AD22FCE032D3B8157D4CB +:1063B0007CE4A301E6E3F6AD8E09341F74B3B2DDCD +:1063C0007C1F396EFAA9CA2F8AEF335B1BFE15F7C3 +:1063D00095330EE9DF9B793DDEEF9C59E42B6CF59C +:1063E00026F01CE5F40F88F760B779C57D9CF73F70 +:1063F00089F70DDF34F3DCF4E9F128F857B8D2E07F +:10640000FC84F73D0774297F8945B65F4EEF9FDD19 +:10641000F257F0DEF4CDF1F7C08FC2B30AC7BE6CFD +:10642000FA85C2AB0A7F8E97770C3AD85D82F70760 +:1064300039E4EBF424FC54D1199B7F949C5332FA39 +:10644000FF1D7E32E5B63901E000239DBA21C7F376 +:10645000E3C879A658EA733CBE15BFA37A60675CAF +:10646000909DE05FF1C31836A803977D7EAEC0858E +:10647000673A7C85D0D378F29D290E8B381D2E206B +:106480001FCED9F1F26A5D9316015D5B9B4BD41D63 +:10649000549C348DD6FFBD9971E67FA447D6FDCFBD +:1064A000687CAE40AEAD0E5DF88529DFDF5B7F3ED8 +:1064B0005F9E2D710EC55DC06B6BD3CDF88FC9F398 +:1064C00077A8AD54C8A99EABF377C81D776527E5BB +:1064D000DD5FB598E717D341FC505B291DE2AD861F +:1064E0007ACEB874E1A7923FB5EE769BA44F2E23E7 +:1064F0007A48036EA9311AF8F98D6DAFDA346E2F30 +:106500009A762C2AED0FE6E508DC267045A7CB9796 +:106510008FFD3AB37CF9C9E77F867395A8BF9C29A4 +:106520008E4D473D6AD8EF10FA1E72AE5A8AFC3380 +:10653000B42F0B6F38E876CD37D4060CBA234DD480 +:10654000D5AB75EAD6847FC48C2938BF3B34910F14 +:10655000D4F3DB2E0BA755800FCBC0EF7F09BA3BDE +:10656000327CE083FEC4FB727EC4751A71DDCD39C6 +:1065700048E8714C3D646CFDA3C8F088FAC8F08F00 +:106580002D7440E6BFFF44BFF9C7B694F72BEABDB0 +:106590004F73DF6744DDA1C97C9FD38C3A48B9783B +:1065A0007F4FC429EFDEDE6B73E1174DBBABF646C0 +:1065B000F8FC28D42884FCF22B6BBC0679E0EDBEF5 +:1065C000BCEC0EE0A72D9D3388C79BFAEE2B44FB55 +:1065D000769FA316F97989BB664916EFBFE12B595F +:1065E000A23EF7FA665917B8F9E532E187F32BCCEA +:1065F0007CFF9713FBDD7CDE37F33337D3FDEFFEF3 +:106600008C68848736B73F59884F1CBE95169E0309 +:106610003DDDA20FAEBA02F95A8B1E2E10F33D9744 +:10662000AC2FABF62CEE53EC8F5BBEF09AA0735EF2 +:106630007F61451DAFDFBCE5F109A073CB9E572FED +:1066400077EBA2BE7339E8E37D911B89795FDF3C6C +:106650009C97D768C10515E2DE945A0719BBCF3F56 +:1066600006A41C5757483B55678756D555083B0825 +:106670007B8EC7DFC627B594F7683746330DF28A9D +:10668000FAA781F7B56137091CFAB685DAC4FB258C +:10669000137FA8E7A10AE9C76F67F614C26F371D19 +:1066A0007EA8107EFA8E4BF6D71E5EFD13E4A9F08D +:1066B000C1348987AD64F8785D6344E259DA982D76 +:1066C000EA836AFF35151982DEA67DE529E71D0AF2 +:1066D0002478FE8E557ED7516479CF0F9CF4BA355D +:1066E000D60C3F789DF16444D853E6B1D77B2C4B50 +:1066F000C57724B76B04FCF07ACFE3AEE9CE04DEB5 +:106700007255F4C7908FB61CCF0A58A42B0ABFBC91 +:10671000D5ADF2917329E29C71931B7EDBFADD67A4 +:106720009792EC1369E3EBF366132F8DF68F0F1836 +:10673000C0B59B8F48BCB0B97FE0B9C939B84F9A92 +:1067400078C1C4215B4C1C72EB71A9972DC74F1BFC +:106750008DC9387F56F6BD5318B1DD7D7C55DD1EE1 +:106760009EDA00BB5D4974F4D8D56B3A38891F0DA9 +:1067700098F563EBB0C0710FCC7A45DC57B77499CC +:10678000F466BD726F8990B7666232DEF942854D5C +:10679000AC53EB591F625D9B7DC23CE4BB0F1CB246 +:1067A0008D2C26F95DCE9043BC072F728477C22FC3 +:1067B000EFB484063688BA57CB7CF8E7DFF0DDD03B +:1067C0006EAC1B34CFA1D896F46EE083E0AD4E2BB7 +:1067D000DACE2D4E8117825B5F71E07E3FF8BB748D +:1067E0005D9B0017193EA1F33EBBF2C25F469CE4DD +:1067F0001147A705E74D4C034EBFF0FDDF9483EF33 +:106800000BD38687C88DF70CFFBC6609E78FAF55A1 +:10681000C87A0A79E3E5E06FD2D3329F7FD546DDAF +:106820000EF11D4888F0FD49CC7C3F18F95017DF68 +:106830008B0C6AB1AF817E28CDD98DEF547E61E695 +:106840008933A5A16F80FF53D996B200F635DF1BBF +:106850004E33EF41C6E47C27FC5D0B06A98DE9EBC6 +:10686000DAB38DF09B0787ED847B77A7A9CF699377 +:106870009789734DF3E4E08CA1A7BD7A248DF77F4F +:1068800090ECE2FDA5A13B82627CF0F90FF15DD0B6 +:1068900014CB7B2732797CCA9D9AAF9359AD1F39AF +:1068A0002BBE8B19FAF08803C5B117F2C23F845E84 +:1068B000265BE273BFA8E11CF9B65DE3F939F37416 +:1068C000B7C5AC4BDAD9BF17CB7F6970DB8713B282 +:1068D00079FDE2E1F4D3D0EF85E1B347BF5381D630 +:1068E0002EEA878B072DB1B4795854151CADFB9651 +:1068F000882668BF3C41877A1E22C4CD6DE679A008 +:10690000E88DB7FE42BEC72AEC356C8FE9D8CFA917 +:1069100047711F5B3C78E235C8B9D8EE8CA1AE4C0C +:1069200076DB6F47EBCAD8F7D4B42CD49111331F60 +:1069300031C8C8ED9476BC2633F53E78AE42DE63AE +:10694000CF997949E95B089F726EC978577C8F3877 +:106950000D59C7DD28EBF123838C432E916755FB3E +:106960002A7008E38BF965C173D0BBF2036577B574 +:10697000AFB2AFB223DD75EAD9CC6261BFB95F2493 +:10698000DC4BE25FFDA926ECF77BF8D523170FF867 +:1069900061D74ED7D2E2B0F7FF9FDDC6E695703AD9 +:1069A000B7F33F9E5F38AFA4CFE4F603BD47C437CB +:1069B000E79BC995ACE775DE164DD6FD22DADF9868 +:1069C0006F8AB06EF43B45972EDFEB99F5D24E7C83 +:1069D000A7A8E13B4512F874789BCB1CF77458319B +:1069E000BEDDE37B80C4778A72FDB68CD4EF14B72A +:1069F000950A7C078604BD88A4A7BE03ECC43EBCF0 +:106A00002E12C910F33AF1BD6266E23B40C4B2A057 +:106A1000B399241DC5578BFC3E32B753AE1FBEC37E +:106A200010DF578633E57784E10B322F2EADCC3261 +:106A3000F37EBC12F8F6C17B5C043F54F616A57BCE +:106A40004FC2DE16D3DE93BDD2DE939D7A2C0D7637 +:106A5000DBB824986CB72F2067F2DF538CC3EDE0CE +:106A6000AF467E47D75B132CC07BC5DE9A5C1DF812 +:106A7000E8DB7FF9DC9B7783BF176D0257F6FA25B9 +:106A8000BFBDDF2F15F8694837E53B9C26D64FBAC6 +:106A9000654301EC67C92F5FD8C4E7E4DEF4E86C16 +:106AA000D8B7D7A58B79BD65BA88BFDE62B9AE7796 +:106AB0009357D019B5DF2E57CA77A61736662BFB2A +:106AC000495C6F1D9E003DB0BD449FED547B4CDC86 +:106AD000F7872724BFE7B860E2880BA63D469F935F +:106AE000FCAE54D1F9A4E7E773C35BE05F6ABC373F +:106AF0002B58005C3456DF7B3AFCDD33E0072EDD9B +:106B00000D5C3E9E9D32561BFB0F25D907C71CE42A +:106B1000CEE8BC4AF883B2D75E755E6DB3C8EF6449 +:106B2000C7D88FA64A7F50F7F4A2C8E987C54B148F +:106B30008ACF46DC70BCCDC2BD6E08796B7EC25F69 +:106B4000B5A0FCDE4BF9A7CA5F63E3566BE37C3666 +:106B5000E15271DB2FCEE50FF4988ADBDDD00FFD1B +:106B6000C0E741BF73EBA902F11DDC27C7EDDE4A88 +:106B7000F6EB6DF9E187D1E6987962B285FDC52221 +:106B8000FC6AA3F93E50839EDF34F5B78EF3D04400 +:106B90008E8FC72BE53940DBC7E42353DFF5E6FCD6 +:106BA00037CF731CCD4FD86B9D798FA9DF9E761A96 +:106BB00079AD7EBB4DC6475B55700C1D9197151D79 +:106BC000F2BC3709F2A875EB36FD611270F0B8EB34 +:106BD000E353B3CE66987991E5FD99117A02720E6E +:106BE000D119F1BDD50B7FB688F707A759DF1EF87D +:106BF000C9C13C79CFCA9234BE5F29F148853D3482 +:106C000088752FF87F5386F71DF4A71353C1C7D497 +:106C1000BCD00FA1F7FBA78F88F7204305C336D060 +:106C20001DAA7B771AF85AD7F6BCC8DBEB54DEFEF8 +:106C3000043D8DD58FD25B42DE9149C0B9FF57FA32 +:106C4000527EF23FE7B46434D02E00000000000012 +:106C500000000040000000000000000000000040B4 +:106C600000000000000000000000002800000000FC +:106C70000000000000000010000000000000000004 +:106C800000000040000000000000000000000010B4 +:106C900000000000000000000000000800000000EC +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB0000000000000000000000033200010000070 +:106DC000000000080000332800100000000000024E +:106DD00000003320001000000000001080000000C0 +:106DE0000000000000000000800000000000000023 +:106DF0000000000080000000000000000000000013 +:106E00008000000000000000000000000000335877 +:106E100000010004000000010000336000000000D9 +:106E200000000002000033680000000000000008BD +:106E30000000336C00000000000000020000392058 +:106E4000000000000000000800003AF800400000C8 +:106E500000000040000039380080000000000048B9 +:106E600000003A38004000000000000800003A48E6 +:106E700000400000000000180000337000280000EF +:106E80000000002800003C20000800000000000175 +:106E900000003C21000800000000000100003C222E +:106EA00000080000000000010000200800100000A1 +:106EB000000000100000200000000000000000089A +:106EC0008000000000000000000000000000000042 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80008000000000000000000000008000000001 +:106F90000000000000000000800000000000000071 +:106FA0000000000080000000000000000000000061 +:106FB00080000000000000000000000080000000D1 +:106FC0000000000000000000800000000000000041 +:106FD0000000000080000000000000000000000031 +:106FE00080000000000000000000000080000000A1 +:106FF0000000000000000000800000000000000011 +:107000000000000080000000000000000000000000 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:1070400000000000000000000000000080000000C0 +:1070500000000000000000008000000000000000B0 +:1070600000000000800000000000000000000000A0 +:107070000000000000000000000000008000000090 +:107080000000000000000000800000000000000080 +:107090000000000080000000000000000000000070 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E0000000000000000000800000000000000020 +:1070F0000000000000000000000000000000000090 +:10710000000019C80000000000000008000020086E +:10711000001000000000001000002000000000002F +:107120000000000800004870000800000000000196 +:1071300000004871000800000000000100004872D3 +:10714000000800000000000100004040003800007E +:107150000000003880000000000000000000000077 +:10716000800000000000000000000000800000001F +:10717000000000000000000080000000000000008F +:10718000000000008000000000000000000000007F +:1071900080000000000000000000000080000000EF +:1071A000000000000000000080000000000000005F +:1071B000000000008000000000000000000000004F +:1071C00080000000000000000000000080000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:1072100000000000800000000000000000000000EE +:1072200080000000000000000000000000000000DE +:1072300000000000000000008000000000000000CE +:1072400000000000800000000000000000000000BE +:10725000800000000000000000000000800000002E +:10726000000000000000000080000000000000009E +:10727000000000008000000000000000000000008E +:1072800000004000004000000000004000004800F6 +:1072900000400000000000400000482E00400000B8 +:1072A0000000000100004800004000020000000152 +:1072B0000000480100400002000000000000300013 +:1072C00000400000000000408000000000000000BE +:1072D0000000000000003000000800400000000432 +:1072E00000003004000800400000000400003B8063 +:1072F000002800000000002800003BD00010000023 +:107300000000001000003BDA001000000000000147 +:1073100000003800008000000000008000003800FD +:10732000000800800000000200003900004000005A +:1073300000000040000020080010000000000010C5 +:10734000000020000000000000000008000051982C +:107350000008000000000001000051990008000032 +:10736000000000010000519A000800000000000128 +:10737000000039800010000400000004000051A843 +:107380000030001800000010000051B0003000185C +:10739000000000028000000000000000000000006B +:1073A00080000000000000000000000080000000DD +:1073B000000000000000000080000000000000004D +:1073C000000000008000000000000000000000003D +:1073D00080000000000000000000000080000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:1074100000000000000000008000000000000000EC +:1074200000000000800000000000000000000000DC +:1074300000000000000000000000000080000000CC +:1074400000000000000000008000000000000000BC +:1074500000000000800000000000000000000000AC +:10746000800000000000000000000000800000001C +:107470000000000000000000000023E80080000081 +:10748000000000800000000100000000000000007B +:107490000000200800100000000000100000200084 +:1074A000000000000000000800002E70000800002E +:1074B0000000000100002E71000800000000000123 +:1074C00000002E720008000000000001000024E807 +:1074D000003800000000003800002DD00008000037 +:1074E0000000000880000000000000000000000014 +:1074F000800000000000000000000000800000008C +:1075000000000000000000008000000000000000FB +:1075100000000000800000000000000000000000EB +:1075200080000000000000000000000000000000DB +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:1075500000000000000000000000000080000000AB +:10756000000000000000000080000000000000009B +:10757000000000000000000000000000000000000B +:1075800080000000000000000000000080000000FB +:10759000000000000000000080000000000000006B +:1075A000000000008000000000000000000000005B +:1075B0008000000000000000000000000000250026 +:1075C0000040000000000008000025080040000006 +:1075D000000000208000000000000000000000000B +:1075E000800000000000000000000000800000009B +:1075F000000000000000000000003000000000005B +:1076000000001000000050A1000000000000000178 +:10761000000050B80000000000000002000050C848 +:10762000009000080000000880000000000000003A +:1076300000000000000029600008000000000001B8 +:10764000000029610008000000000001000029700E +:10765000000800040000000200002978000800046F +:107660000000000480000000000000000000000096 +:1076700000002FB0000800000000000400002FB43C +:10768000000800000000000400002FC000000000FF +:107690000000000800002FC80000000000000008E3 +:1076A000000030000000000000000010000050400A +:1076B0000001000100000001000050000000000077 +:1076C0000000002000000808001000000000000476 +:1076D0000000080C0010000000000001000008B7C6 +:1076E0000000000000000001000008B600000000DB +:1076F0000000000100001000004000200000000415 +:1077000000001004004000200000000400001008E9 +:1077100000400020000000020000100A004000208D +:10772000000000020000100C0040002000000001DA +:107730000000100D00400020000000010000100EAD +:107740000040002000000001000010100040002058 +:10775000000000040000101400400020000000049D +:107760000000101800400020000000040000101C61 +:1077700000400020000000040000300001000080F4 +:10778000000800040000300401000080000800042C +:107790000000000A00000000000000000000306847 +:1077A000010000800000000100003069010000803D +:1077B000000000010000306C0100008000000002A9 +:1077C0000000306E010000800000000200003070F8 +:1077D00001000080000000040000307401000080FF +:1077E000000000040000306601000080000000027C +:1077F00000003064010000800000000100003060E3 +:1078000001000080000000020000306201000080E2 +:107810000000000200003050010000800000000461 +:1078200000003054010000800000000400003058C7 +:1078300001000080000000040000305C01000080B6 +:10784000000000040000307C010000800000000106 +:107850000000307D010000800000000100001C18C5 +:10786000001000000000000400001C3000100000A8 +:107870000000000400001C3800100000000000049C +:1078800080000000000000000000000080000000F8 +:107890000000000000000000800000000000000068 +:1078A0000000000080000000000000000000000058 +:1078B00000004C10000800000000000200004C1204 +:1078C000000800000000000200004C140008000046 +:1078D0000000000200004C1600080000000000023A +:1078E00000004C20000800000000000800004C00D0 +:1078F000000800000000000200004C020008000028 +:107900000000000100004C0400080000000000021C +:1079100000004C30000800000000000800004C404F +:10792000000800000000000400004C4400080000B3 +:107930000000000100004C500008000000000002A0 +:1079400000004C54000800000000000200004C60E1 +:1079500000080000000000040000140000080000FF +:1079600000000002000014020008000000000001F6 +:1079700000001404000800000000000200001410C1 +:1079800000080000000000020000141400080000BD +:1079900000000002000014160008000000000002B1 +:1079A000000019B8000800000000000800001420C2 +:1079B000000800000000000200001424000800007D +:1079C00000000002000019C80008000000000008C4 +:1079D00000002C10000800000000000100002C1125 +:1079E000000800000000000100002C120008000048 +:1079F0000000000100002C1300080000000000013E +:107A000000002C00000800000000000200002C0212 +:107A1000000800000000000100002C040008000025 +:107A20000000000200002C300008000000000002EE +:107A300000002C32000800000000000200002C347E +:107A4000000800000000000200002C2000080000D8 +:107A50000000000100002C210008000000000001CF +:107A600000002C22000800000000000100002C2370 +:107A7000000800000000000100002C2400080000A5 +:107A80000000000100002C2500080000000000019B +:107A900000002C26000800000000000100001480F7 +:107AA000000800000000000200001482000800002E +:107AB0000000000100001484000800000000000223 +:107AC0000000149200C00018000000020000149092 +:107AD00000C00018000000020000149C00C0001844 +:107AE000000000080000149400C000180000000806 +:107AF000000014A700C0001800000001000014A43A +:107B000000C0001800000002000014A600C0001809 +:107B1000000000010000161000080000000000082E +:107B200000001620000800000000000800001630C9 +:107B300000080000000000088000000000000000B5 +:107B400000000000800000000000000000000000B5 +:107B50008000000000000000000000008000000025 +:107B60000000000000000000800000000000000095 +:107B70000000000080000000000000000000000085 +:107B800080000000000000000000000080000000F5 +:107B90000000000000000000800000000000000065 +:107BA0000000000080000000000000000000000055 +:107BB00080000000000000000000000080000000C5 +:107BC0000000000000000000800000000000000035 +:107BD0000000000080000000000000000000000025 +:107BE0008000000000000000000000008000000095 +:107BF0000000000000000000800000000000000005 +:107C000000000000800000000000000000000000F4 +:107C10008000000000000000000000008000000064 +:107C200000000000000000008000000000000000D4 +:107C300000000000800000000000000000000000C4 +:107C40008000000000000000000000008000000034 +:107C500000000000000000008000000000000000A4 +:107C60000000000080000000000000000000000094 +:107C70008000000000000000000000008000000004 +:107C80000000000000000000800000000000000074 +:107C90000000000080000000000000000000000064 +:107CA00080000000000000000000000080000000D4 +:107CB0000000000000000000800000000000000044 +:107CC0000000000080000000000000000000000034 +:107CD00080000000000000000000000080000000A4 +:107CE0000000000000000000800000000000000014 +:107CF0000000000080000000000000000000000004 +:107D00008000000000000000000000008000000073 +:107D100000000000000000008000000000000000E3 +:107D200000000000800000000000000000000000D3 +:107D30008000000000000000000000008000000043 +:107D400000000000000000008000000000000000B3 +:107D500000000000800000000000000000000000A3 +:107D60008000000000000000000000008000000013 +:107D70000000000000000000800000000000000083 +:107D80000000000080000000000000000000000073 +:107D900080000000000000000000000080000000E3 +:107DA0000000000000000000800000000000000053 +:107DB0000000000080000000000000000000000043 +:107DC00080000000000000000000000080000000B3 +:107DD0000000000000000000800000000000000023 +:107DE0000000000080000000000000000000000013 +:107DF0000000000000000000000000008000000003 +:107E00000000000000000000000000000000000072 +:087E1000070802000000000059 +:00000001FF --- linux-aws-4.15.0.orig/firmware/bnx2x/bnx2x-e1h-7.8.2.0.fw.ihex +++ linux-aws-4.15.0/firmware/bnx2x/bnx2x-e1h-7.8.2.0.fw.ihex @@ -0,0 +1,10714 @@ +:10000000000021E800000068000005D80000225828 +:10001000000036E4000028380000007000005F2077 +:10002000000085B400005F980000009C0000E550CF +:1000300000009BAC0000E5F000000088000181A0FA +:1000400000004344000182300000008C0001C578AC +:100050000000C5900001C608000011B800028BA086 +:100060000000000400029D60020600DC00000001A8 +:100070000306100002000000010600D80000000086 +:100080000306020000030200020600DC000000007C +:10009000010600B800000000010600C800000000D2 +:1000A0000206016C00000000010600BC0000000018 +:1000B000010600CC000000000206017000000000F4 +:1000C000020D004400000032030D004C0004020346 +:1000D000040D005C00000004030D008C00110207F9 +:1000E000020D015C00000001030D01640002021812 +:1000F000020D020400000001030D020C0003021AAD +:10010000030D02200002021D040D028000000012F7 +:10011000030D03000018021F040D03600000000C13 +:10012000040D400000000A00030D0004000F023718 +:10013000020D01140000000D020D01180000002D39 +:10014000020D01140000001D020D01180000003D09 +:10015000020D01140000004D020D01180000006D99 +:10016000020D01140000005D020D01180000007D69 +:10017000031010000003024602101050000000019E +:10018000071011000010024908101140000000087B +:100190000710116000100259081011A0000000188B +:1001A000071018000200026904104C000000010052 +:1001B00002104028000000100210404400003FFFE1 +:1001C0000210405800280000021040840084924A27 +:1001D0000210405800000000030C200800030469CE +:1001E000030C201C0004046C030C20380011047064 +:1001F000040C207C0000004F030C21B80011048186 +:10020000040C21FC0000000F030C223800040492AF +:10021000010C224800000000010C224C00000000EC +:10022000010C225000000000010C225400000000CC +:10023000010C225800000000010C225C00000000AC +:10024000010C226000000000010C2264000000008C +:10025000010C226800000000010C226C000000006C +:10026000010C227000000000010C2274000000004C +:10027000010C227800000000010C227C000000002C +:100280000A00000100000001020C2000000003E849 +:100290000A00000100000002020C20000000000A19 +:1002A0000A00000100000004020C20000000000110 +:1002B0000520040000850000062007800010049639 +:1002C000042200000000400004232400000000403D +:1002D00003221250001004980422B14000000020B4 +:1002E0000422C800000000060322C818000404A865 +:1002F0000422C8280000000C0322C858000404ACE3 +:100300000422C8680000000C0322C898000404B04E +:100310000422C8A80000000C0322C8D8000404B4BA +:100320000422C8E80000000C0322C918000404B825 +:100330000422C9280000000C0322C958000404BC90 +:100340000422C9680000000C0322C998000404C0FC +:100350000422C9A80000000C0322C9D8000404C468 +:100360000422C9E80000000C0322CA18000404C8D3 +:100370000422CA280000000C0322CA58000404CC3E +:100380000422CA680000000C0322CA98000404D0AA +:100390000422CAA80000000C0322CAD8000404D416 +:1003A0000422CAE80000000C0322CB18000404D881 +:1003B0000422CB280000000C0322CB58000404DCEC +:1003C0000422CB680000000C0322CB98000404E058 +:1003D0000422CBA80000000C0322CBD8000404E4C4 +:1003E0000422CBE80000000C0322CC18000404E82F +:1003F0000422CC280000000C0322CC58000404EC9A +:100400000422CC680000000C0322CC98000404F005 +:100410000422CCA80000000C0322CCD8000404F471 +:100420000422CCE80000000C0322CD18000404F8DC +:100430000422CD280000000C0322CD58000404FC47 +:100440000422CD680000000C0322CD9800040500B2 +:100450000422CDA80000000C0322CDD8000405041E +:100460000422CDE80000000C0322CE180004050889 +:100470000422CE280000000C0322CE580004050CF4 +:100480000422CE680000000C0322CE980004051060 +:100490000422CEA80000000C0322CED800040514CC +:1004A0000422CEE80000000C0322CF180004051837 +:1004B0000422CF280000000C0322CF580004051CA2 +:1004C0000422CF680000000C0322CF98000405200E +:1004D0000422CFA80000000C0322CFD8000405247A +:1004E0000422CFE800000006022380000000001074 +:1004F00002238040000000120223808000000030B0 +:10050000022380C00000000E022383800007A12088 +:10051000022383C0000001F402238BC0000000010D +:100520000A00000200000001022383000007A1204E +:1005300002238340000001F40A00000200000002D0 +:10054000022383000000138802238340000000057B +:100550000A000002000000040223830000000138AA +:1005600002238340000000000524000032FE00004A +:100570000524800010440CC006249E806A9605283D +:100580000A000001000000020223148000000000A5 +:100590000A00000100000004022314800000000093 +:1005A0000120000000000000012000040000000005 +:1005B00001200008000000000120000C00000000E5 +:1005C00001200010000000000120001400000000C5 +:1005D00003200020001A052A032000A4000205447D +:1005E000022002240000000002200234000000006B +:1005F0000220024C00000000022002E40000FFFF85 +:100600000820200000000800042211080000000259 +:1006100004221290000000060422340000000002B0 +:10062000042260400000003004228C000000001012 +:100630000422111000000002042212A8000000068B +:10064000042234080000000204226100000000308F +:1006500004228C4000000010042211180000000247 +:10066000042212C000000006042234100000000220 +:10067000042261C00000003004228C8000000010C1 +:100680000422112000000002042212D800000006FB +:1006900004223418000000020422628000000030AE +:1006A00004228CC000000010042211280000000267 +:1006B000042212F000000006042234200000000290 +:1006C000042263400000003004228D00000000106E +:1006D000042211300000000204221308000000066A +:1006E00004223428000000020422640000000030CC +:1006F00004228D4000000010042211380000000286 +:1007000004221320000000060422343000000002FE +:10071000042264C00000003004228D80000000101C +:1007200004221140000000020422133800000006D9 +:1007300004223438000000020422658000000030EA +:1007400004228DC00000001004102400000000E00E +:100750000310201C00020546021020C00000000209 +:1007600003102004000205480217000800000002E0 +:100770000217002C00000003031700380002054A8E +:10078000031700480005054C0317006000050551DC +:100790000317007800020556021700040000000F3E +:1007A0000210800000001080041080400000000251 +:1007B000021080AC00000000021080380000001021 +:1007C00002108100000000000410812000000002DF +:1007D00002108008000002B5021080100000000026 +:1007E000021081080001FFFF041082000000004A8F +:1007F00004108140000000020210800000001A80F6 +:100800000410900000000024041091200000004A11 +:10081000041093700000004A041095C00000004AC4 +:1008200002108004000010800410804800000002C4 +:10083000021080B0000000010210803C0000001097 +:100840000210810400000000041081280000000252 +:100850000210800C000002B502108014000000009D +:100860000210810C0001FFFF041084000000004A08 +:1008700004108148000000020210800400001A8069 +:100880000410909000000024041092480000004AD8 +:10089000041094980000004A041096E80000004AF2 +:1008A0000210800000001080041080400000000250 +:1008B000021080AC0000000202108038000000101E +:1008C00002108100000000000410812000000002DE +:1008D00002108008000002B5021080100000000025 +:1008E000021081080001FFFF041082000000004A8E +:1008F00004108140000000020210800000001A80F5 +:100900000410900000000024041091200000004A10 +:10091000041093700000004A041095C00000004AC3 +:1009200002108004000010800410804800000002C3 +:10093000021080B0000000030210803C0000001094 +:100940000210810400000000041081280000000251 +:100950000210800C000002B502108014000000009C +:100960000210810C0001FFFF041084000000004A07 +:1009700004108148000000020210800400001A8068 +:100980000410909000000024041092480000004AD7 +:10099000041094980000004A041096E80000004AF1 +:1009A000021080000000108004108040000000024F +:1009B000021080AC0000000402108038000000101B +:1009C00002108100000000000410812000000002DD +:1009D00002108008000002B5021080100000000024 +:1009E000021081080001FFFF041082000000004A8D +:1009F00004108140000000020210800000001A80F4 +:100A00000410900000000024041091200000004A0F +:100A1000041093700000004A041095C00000004AC2 +:100A200002108004000010800410804800000002C2 +:100A3000021080B0000000050210803C0000001091 +:100A40000210810400000000041081280000000250 +:100A50000210800C000002B502108014000000009B +:100A60000210810C0001FFFF041084000000004A06 +:100A700004108148000000020210800400001A8067 +:100A80000410909000000024041092480000004AD6 +:100A9000041094980000004A041096E80000004AF0 +:100AA000021080000000108004108040000000024E +:100AB000021080AC00000006021080380000001018 +:100AC00002108100000000000410812000000002DC +:100AD00002108008000002B5021080100000000023 +:100AE000021081080001FFFF041082000000004A8C +:100AF00004108140000000020210800000001A80F3 +:100B00000410900000000024041091200000004A0E +:100B1000041093700000004A041095C00000004AC1 +:100B200002108004000010800410804800000002C1 +:100B3000021080B0000000070210803C000000108E +:100B4000021081040000000004108128000000024F +:100B50000210800C000002B502108014000000009A +:100B60000210810C0001FFFF041084000000004A05 +:100B700004108148000000020210800400001A8066 +:100B80000410909000000024041092480000004AD5 +:100B9000041094980000004A041096E80000004AEF +:100BA0000200A468000B01C80300A29400040558C9 +:100BB0000A000001000000800200A5F8000000000B +:100BC0000A000001000001000200A5F80000000179 +:100BD0000200A270000000000200A27400000000E9 +:100BE0000200A270000000000200A27400000000D9 +:100BF0000200A270000000000200A27400000000C9 +:100C00000200A270000000000200A27400000000B8 +:100C1000030100B40002055C020100DC00000001D9 +:100C2000030101000002055E0201007C00300000AB +:100C300002010084000000280201008C0000000076 +:100C4000020101300000000402010328000000003E +:100C50000201055400000030020160580000FFFF4F +:100C600002016070000000070201608000000001C6 +:100C7000020100C400000001020100CC00000001DC +:100C8000020100F800000001020100F00000000174 +:100C900002010080003000000201008800000028EE +:100CA0000201009000000000020101340000000475 +:100CB0000201032C00000000020105640000003066 +:100CC0000201605C0000FFFF020160740000000789 +:100CD0000201608400000001020100C80000000160 +:100CE000020100D000000001020100FC0000000130 +:100CF000020100F4000000010401013800000011AD +:100D00000401017C00000011040101380000001101 +:100D10000401017C000000110401013800000011F1 +:100D20000401017C000000110401013800000011E1 +:100D30000401017C00000011021400000000000109 +:100D40000214000C000000010314004000020560C2 +:100D50000214000C0000000002140000000000005B +:100D60000214006C000000000214000400000001E6 +:100D70000214003000000001021400040000000012 +:100D80000214005C000000000214000800000001D2 +:100D900002140034000000010214000800000000EA +:100DA0000214006000000000030400040012056249 +:100DB00002040054000000430204005C000000062E +:100DC00002040070000000040304007800040574AD +:100DD00004040088000000050304009C000305785B +:100DE000040400A800000004030400B80005057B0B +:100DF000040400CC00000004030400DC00040580AF +:100E0000040400EC000000040104012400000000C0 +:100E100001040128000000000104012C0000000072 +:100E20000104013000000000020401340000000F42 +:100E3000020401D000008906021205B00000000182 +:100E400003120490002205840312066C000205A61A +:100E500002120388000000640212039000000008E0 +:100E60000312039C000305A8031203BC000305AB97 +:100E7000021203D0000000000212036C0000000107 +:100E8000021203680000003F031201BC003C05AEE3 +:100E9000031202B0000205EA03120324000205EC6B +:100EA000021205B400000001021201B000000001AE +:100EB00007103800000505EE07103820000505F37F +:100EC00007103C00000505F803168030000805FDFA +:100ED000021680540000000203168060000506051B +:100EE0000416807400000007031680900002060AB2 +:100EF0000316809C0005060C041680B00000000755 +:100F0000031680CC00080611021680F000000007CE +:100F1000041680F40000000C031681240004061956 +:100F2000041681340000000C031681640032061D93 +:100F3000031682340007064F041682500000000496 +:100F4000031682600002065604168268000000083C +:100F50000316828800080658041682A80000000ABA +:100F600002168804000000040316880C00100660B6 +:100F70000316E000001006700416E40C0000000CDC +:100F80000316E43C000406800416E44C0000000C48 +:100F90000316E47C002E06840416E53400000004E9 +:100FA0000316E544000206B20416E54C00000008F2 +:100FB0000316E56C000606B40316E6BC000806BA84 +:100FC000021680EC000000FF03040408001406C2AF +:100FD000020404CC0000000103050044000206D610 +:100FE00003050050000406D804050060000000045A +:100FF00003050090001306DC020501140000000147 +:101000000305011C000206EF0205020400000001B6 +:101010000305020C000206F10305021C000306F39F +:10102000040502400000000A03050280002006F6C5 +:101030000405400000000D00030500040010071621 +:10104000020500E00000000E020500E40000002E92 +:10105000020500E00000001E020500E40000003E62 +:10106000020500E00000004E020500E40000006EF2 +:10107000020500E00000005E020500E40000007EC2 +:101080000416402400000002031640300003072627 +:101090000216404400000020021640700000001CB0 +:1010A0000216420800000001021642100000000172 +:1010B0000216422000000001021642280000000132 +:1010C0000216423000000001021642380000000102 +:1010D00002164260000000020A0000010000000148 +:1010E0000216401C0003D0900A000001000000021C +:1010F0000216401C000009C40A00000100000004A0 +:101100000216401C0000009C021640000000000176 +:10111000021640D80000000103164008000307290A +:101120000216424000000000021642480000000083 +:101130000816427000000002021642500000000033 +:10114000021642580000000008164280000000020B +:10115000030420080004072C0304201C00040730AB +:1011600002042038000000200404203C0000001F7E +:10117000020420B800000001040420BC0000005F4D +:101180000304223800040734010422480000000050 +:101190000104224C00000000010422500000000065 +:1011A0000104225400000000010422580000000045 +:1011B0000104225C00000000010422600000000025 +:1011C0000104226400000000010422680000000005 +:1011D0000104226C000000000104227000000000E5 +:1011E00001042274000000000104227800000000C5 +:1011F0000104227C000000000A0000010000000140 +:1012000002042000000003E80A00000100000002C0 +:10121000020420000000000A0A000001000000048F +:10122000020420000000000105180400006F000007 +:101230000618076000140738041A00000000400078 +:10124000041B240000000040031A1EC80002073AD5 +:10125000031A40400004073C041A405000000006F6 +:10126000031A406800020740031A52C000020742F6 +:10127000031A800003F90744041A8FE400000007F2 +:10128000031AA08000100B3D021B800000000034F8 +:10129000021B804000000018021B80800000000C30 +:1012A000021B80C000000020021B83800007A120D9 +:1012B000021B83C0000001F4021B8BC00000000170 +:1012C0000A00000200000001021B83000007A120A9 +:1012D000021B8340000001F40A000002000000022B +:1012E000021B830000001388021B834000000005DE +:1012F0000A00000200000004021B83000000013805 +:10130000021B834000000000051C00002F7D000030 +:10131000051C800033820BE0051D000022AD18C1C2 +:10132000061D509055EE0B4D0A0000010000000212 +:10133000021B1480000000000A00000100000004ED +:10134000021B1480000000000118000000000000D3 +:10135000011800040000000001180008000000004F +:101360000118000C0000000001180010000000002F +:10137000011800140000000003180020001A0B4F91 +:10138000031800A400020B690218022400000000E8 +:1013900002180234000000000218024C0000000095 +:1013A000021802E4000000FF08181000000004000A +:1013B000041A300000000010041A308000000010F1 +:1013C000041A310000000010041A318000000010DF +:1013D000041A330000000012041A339000000012B7 +:1013E000041A342000000070041A90000000000667 +:1013F000041A304000000010041A30C00000001031 +:10140000041A314000000010041A31C0000000101E +:10141000041A334800000012041A33D800000012E6 +:10142000041A35E000000070041A9018000000064D +:10143000031A400000020B6B041A50000000000267 +:10144000041A508000000012031A614000020B6D64 +:10145000041A903000000002041AA00000000002EC +:10146000031A400800020B6F041A5010000000021B +:10147000041A50C800000012031A614800020B71E0 +:10148000041A903800000002041AA00800000002AC +:10149000031A401000020B73041A502000000002CF +:1014A000041A511000000012031A615000020B755B +:1014B000041A904000000002041AA010000000026C +:1014C000031A401800020B77041A50300000000283 +:1014D000041A515800000012031A615800020B79D7 +:1014E000041A904800000002041AA018000000022C +:1014F000031A402000020B7B041A50400000000237 +:10150000041A51A000000012031A616000020B7D52 +:10151000041A905000000002041AA02000000002EB +:10152000031A402800020B7F041A505000000002EA +:10153000041A51E800000012031A616800020B81CE +:10154000041A905800000002041AA02800000002AB +:10155000031A403000020B83041A5060000000029E +:10156000041A523000000012031A617000020B8549 +:10157000041A906000000002041AA030000000026B +:10158000031A403800020B87041A50700000000252 +:10159000041A527800000012031A617800020B89C5 +:1015A000041A906800000002041AA038000000022B +:1015B000020E004C00000032030E005400040B8B9E +:1015C000040E006400000004030E009400130B8F4F +:1015D000020E014400000001030E014C00020BA2A8 +:1015E000020E020400000001030E020C00020BA414 +:1015F000030E021C00040BA6030E0280001B0BAAA4 +:10160000040E02EC00000017040E20000000080089 +:10161000030E000400110BC5020E01100000000FA4 +:10162000020E01140000002F020E01100000001F26 +:10163000020E01140000003F020E01100000004FD6 +:10164000020E01140000006F020E01100000005F86 +:10165000020E01140000007F020C100000000028A0 +:10166000030C400800040BD6030C401C00040BDAEA +:10167000030C403800050BDE040C404C0000005BFE +:10168000030C41B800050BE3040C41CC0000001B27 +:10169000030C423800040BE8010C42480000000033 +:1016A000010C424C00000000010C42500000000000 +:1016B000010C425400000000010C425800000000E0 +:1016C000010C425C00000000010C426000000000C0 +:1016D000010C426400000000010C426800000000A0 +:1016E000010C426C00000000010C42700000000080 +:1016F000010C427400000000010C42780000000060 +:10170000010C427C00000000010C4280000000003F +:101710000A00000100000001020C4000000003E884 +:101720000A00000100000002020C40000000000A54 +:101730000A00000100000004020C4000000000014B +:1017400005300400009C00000630076800130BEC15 +:101750000432000000004000043324000000004078 +:1017600004323E800000001003323EC000020BEE47 +:10177000033274C000080BF00332850000100BF830 +:10178000023380000000001A023380400000004E47 +:101790000233808000000010023380C0000000206F +:1017A000023383800007A120023383C0000001F4CC +:1017B00002338BC0000000010A000002000000019B +:1017C000023383000007A12002338340000001F4AC +:1017D0000A000002000000020233830000001388A8 +:1017E00002338340000000050A00000200000004EC +:1017F0000233830000000138023383400000000000 +:1018000005340000367100000534800030D60D9D8F +:1018100005350000345F19D3063577F051020C0806 +:101820000A000001000000020233148000000000E2 +:101830000A000001000000040233148000000000D0 +:101840000130000000000000013000040000000032 +:1018500001300008000000000130000C0000000012 +:1018600001300010000000000130001400000000F2 +:1018700003300020001A0C0A033000A400020C24DC +:101880000230022400000000023002340000000098 +:101890000230024C00000000023002E40000FFFFB2 +:1018A000083020000000080004321000000001C0D1 +:1018B00004321E000000003804323000000001C075 +:1018C00004325000000000200432510000000020CB +:1018D00004325200000000200432530000000020B7 +:1018E00004325400000000200432550000000020A3 +:1018F000043256000000002004325700000000208F +:10190000043258000000002004325900000000207A +:1019100004325A000000002004325B000000002066 +:1019200004325C000000002004325D000000002052 +:1019300004325E000000002004325F00000000203E +:1019400004328450000000020332846000040C263C +:1019500004321700000001C004321EE0000000380D +:1019600004323700000001C0043250800000002023 +:101970000432518000000020043252800000002018 +:101980000432538000000020043254800000002004 +:1019900004325580000000200432568000000020F0 +:1019A00004325780000000200432588000000020DC +:1019B000043259800000002004325A8000000020C8 +:1019C00004325B800000002004325C8000000020B4 +:1019D00004325D800000002004325E8000000020A0 +:1019E00004325F80000000200432845800000002AE +:1019F0000332847000040C2A0432401000000002FC +:101A00000432841000000002043240200000000272 +:101A1000043284180000000204324030000000024A +:101A20000432842000000002043240400000000222 +:101A300004328428000000020432405000000002FA +:101A400004328430000000020432406000000002D2 +:101A500004328438000000020432407000000002AA +:101A60000432844000000002043240800000000282 +:101A700004328448000000020202005800000032D4 +:101A80000302006000040C2E040200700000000439 +:101A9000030200A0000E0C32030200DC00070C4021 +:101AA000020200FC0000000602020120000000000B +:101AB0000202013400000002020201B00000000135 +:101AC0000202020C000000010302021400020C4793 +:101AD00002020404000000010302040C00020C498D +:101AE0000302041C00040C4B0302048000200C4F72 +:101AF0000402050000000012040280000000200023 +:101B00000302000400140C6F02020108000000C868 +:101B10000202011800000002020201C400000000DD +:101B2000020201CC00000000020201D40000000209 +:101B3000020201DC00000002020201E4000000FFDA +:101B4000020201EC000000FF0202010C000000C8CC +:101B50000202011C00000002020201C80000000095 +:101B6000020201D000000000020201D800000002C1 +:101B7000020201E000000002020201E8000000FF92 +:101B8000020201F0000000FF02020108000000C88C +:101B90000202011800000002020201C4000000005D +:101BA000020201CC00000000020201D40000000289 +:101BB000020201DC00000002020201E4000000FF5A +:101BC000020201EC000000FF0202010C000000C84C +:101BD0000202011C00000002020201C80000000015 +:101BE000020201D000000000020201D80000000241 +:101BF000020201E000000002020201E8000000FF12 +:101C0000020201F0000000FF02020108000000C80B +:101C10000202011800000002020201C400000000DC +:101C2000020201CC00000000020201D40000000208 +:101C3000020201DC00000002020201E4000000FFD9 +:101C4000020201EC000000FF0202010C000000C8CB +:101C50000202011C00000002020201C80000000094 +:101C6000020201D000000000020201D800000002C0 +:101C7000020201E000000002020201E8000000FF91 +:101C8000020201F0000000FF02020108000000C88B +:101C90000202011800000002020201C4000000005C +:101CA000020201CC00000000020201D40000000288 +:101CB000020201DC00000002020201E4000000FF59 +:101CC000020201EC000000FF0202010C000000C84B +:101CD0000202011C00000002020201C80000000014 +:101CE000020201D000000000020201D80000000240 +:101CF000020201E000000002020201E8000000FF11 +:101D0000020201F0000000FF02161000000000288F +:101D10000316600800030C830316601C00040C8685 +:101D200003166038000D0C8A0416606C0000001366 +:101D3000031660B800020C97041660C00000003E55 +:101D4000021661B800000001041661BC0000001F0B +:101D50000316623800040C99011662480000000066 +:101D60000116624C000000000116625000000000E5 +:101D700001166254000000000116625800000000C5 +:101D80000116625C000000000116626000000000A5 +:101D90000116626400000000011662680000000085 +:101DA0000116626C00000000011662700000000065 +:101DB0000116627400000000011662780000000045 +:101DC0000116627C000000000A0000010000000112 +:101DD00002166000000003E80A0000010000000293 +:101DE000021660000000000A0A0000010000000462 +:101DF000021660000000000105280400008A0000AF +:101E00000628076800130C9D042A0000000040000B +:101E1000042B240000000040032A300000020C9F25 +:101E2000032A400000100CA1032A840800080CB10A +:101E3000032A93C800040CB9032A96F000020CBDD3 +:101E4000042A96F800000006032A994000020CBFFD +:101E5000022A9A2800000001032AC0C000100CC109 +:101E6000022B800000000000022B804000000018C0 +:101E7000022B80800000000C022B80C00000006656 +:101E8000022B83800007A120022B83C0000001F4F5 +:101E9000022B8BC0000000010A00000200000001BC +:101EA000022B83000007A120022B8340000001F4D5 +:101EB0000A00000200000002022B830000001388C9 +:101EC000022B8340000000050A000002000000040D +:101ED000022B830000000138022B83400000000029 +:101EE0000A00000100000020022A9A2C00000000D5 +:101EF000052C000036FB0000052C800039A80DBF22 +:101F0000052D00003B021C29052D800019E72AEA57 +:101F1000062DB5E049440CD10A0000010000000282 +:101F2000022B1480000000000A00000100000004E1 +:101F3000022B1480000000000128000000000000B7 +:101F40000128000400000000012800080000000033 +:101F50000128000C00000000012800100000000013 +:101F6000012800140000000003280020001A0CD3F0 +:101F7000032800A400020CED022802240000000047 +:101F800002280234000000000228024C0000000079 +:101F9000022802E40000FFFF0828200000000800DB +:101FA000042A500000000002042A50100000000221 +:101FB000042A502000000002042A503000000002D1 +:101FC000042A93E000000020042A94E00000000EA0 +:101FD000032A951800020CEF042A95600000000EF9 +:101FE000032A959800020CF1042A95E00000000EE7 +:101FF000032A961800020CF3042A96600000000ED3 +:10200000032A969800020CF5032A971000020CF799 +:10201000042A500800000002042A501800000002A0 +:10202000042A502800000002042A50380000000250 +:10203000042A946000000020042A95200000000E6D +:10204000032A955800020CF9042A95A00000000EFE +:10205000032A95D800020CFB042A96200000000EEB +:10206000032A965800020CFD042A96A00000000ED8 +:10207000032A96D800020CFF032A971800020D01CC +:10208000042A50480000000E032A972000100D0378 +:10209000042A995000000002042AC0000000000237 +:1020A000042A50800000000E032A976000100D13D0 +:1020B000042A995800000002042AC0080000000207 +:1020C000042A50B80000000E032A97A000100D2328 +:1020D000042A996000000002042AC01000000002D7 +:1020E000042A50F00000000E032A97E000100D3380 +:1020F000042A996800000002042AC01800000002A7 +:10210000042A51280000000E032A982000100D43D5 +:10211000042A997000000002042AC0200000000276 +:10212000042A51600000000E032A986000100D532D +:10213000042A997800000002042AC0280000000246 +:10214000042A51980000000E032A98A000100D6385 +:10215000042A998000000002042AC0300000000216 +:10216000042A51D00000000E032A98E000100D73DD +:10217000042A998800000002042AC03800000002E6 +:102180000400A0000000000C0400A05000000002A9 +:102190000300A0EC00080D830300A18C00080D8B48 +:1021A0000200A45C00000C000200A61C000000035A +:1021B0000300A06C00060D930400A084000000053D +:1021C0000200A0980FE000000400A09C000000079F +:1021D0000300A0B8000D0D990400A22C000000041B +:1021E0000300A10C00060DA60400A12400000005B8 +:1021F0000200A1380FE000000400A13C000000072D +:102200000300A158000D0DAC0400A23C0000000426 +:102210000200A030000000000200A0340000000016 +:102220000200A038000000000200A03C00000000F6 +:102230000200A040000000000200A04400000000D6 +:102240000200A048000000000200A04C00000000B6 +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:102280000000000000000005000500080008000B29 +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000B001900000000000000000019001AC7 +:1022C000001A001B001B001C001C001D001D001E2E +:1022D000001E001F001F00200020002100210028F8 +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000028002E0000000077 +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:1023300000000000002E0049000000000000000026 +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000004900B4000000000000000000B400B903 +:1023700000B900BE00BE00C300C300C800C800CD45 +:1023800000CD00D200D200D700D700DC0000000052 +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000DC00E00000000061 +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E0000000000000E000E7000000000000000026 +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000E700F7DE +:1024200000F70107010701170117012701270137ED +:1024300001370147014701570157016700000000BC +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:1024600000000000000000000167016D0000000096 +:1024700000000000016D016E016E016F016F0170BF +:1024800001700171017101720172017301730174B4 +:10249000017401750175017801780185018501924A +:1024A0000192019301930194019401950195019684 +:1024B0000196019701970198019801990199019A54 +:1024C000019A01A001A001A401A401A8000000003C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:10251000000000000000000001A801BA0000000057 +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:102540000000000001BA01C9000000000000000006 +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:1025700001C901CC000000000000000000000000C4 +:10258000000000000000000000000000000000004B +:1025900000000000000000000000000001CC01EC81 +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000001EC01EE000000002F +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F0000000000001EE01FB0000000000000000F0 +:1026000001FB01FC01FC01FD01FD01FE01FE01FFDA +:1026100001FF0200020002010201020202020203A3 +:10262000020302170217021A021A021D000000001C +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000021D023831 +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:1026700000000000000000000238026902690271D7 +:10268000027102790279027F027F02850285028B44 +:10269000028B0291029102970297029D029D02A372 +:1026A00002A302A902A902B6000000000000000077 +:1026B00002B602B702B702B802B802B902B902BA4A +:1026C00002BA02BB02BB02BC02BC02BD02BD02BE1A +:1026D00002BE02BF00000000000000000000000079 +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000002BF02DB3C +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:10272000000000000000000002DB03080308031D96 +:10273000031D0332033203340334033603360338F4 +:102740000338033A033A033C033C033E033E034091 +:102750000340034203420354000000000000000055 +:102760000354035C035C03640364036C036C037431 +:102770000374037C037C03840384038C038C039421 +:10278000039403950000000000000000000000001A +:102790000000000000000000000000000000000039 +:1027A000000000000000000000000000039503B2DC +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D000000000000000000003B203E703E703F578 +:1027E00003F50403040304070407040B040B040F9C +:1027F000040F0413041304170417041B041B041F01 +:10280000041F0423042304290429042F042F04355E +:1028100004350436043604370437043804380439E0 +:102820000439043A043A043B043B043C043C043DB0 +:102830000000000000000000000020000000400038 +:1028400000006000000080000000A0000000C00048 +:102850000000E00000010000000120000001400035 +:1028600000016000000180000001A0000001C00024 +:102870000001E00000020000000220000002400011 +:1028800000026000000280000002A0000002C00000 +:102890000002E000000300000003200000034000ED +:1028A00000036000000380000003A0000003C000DC +:1028B0000003E000000400000004200000044000C9 +:1028C00000046000000480000004A0000004C000B8 +:1028D0000004E000000500000005200000054000A5 +:1028E00000056000000580000005A0000005C00094 +:1028F0000005E00000060000000620000006400081 +:1029000000066000000680000006A0000006C0006F +:102910000006E0000007000000072000000740005C +:1029200000076000000780000007A0000007C0004B +:102930000007E00000080000000820000008400038 +:1029400000086000000880000008A0000008C00027 +:102950000008E00000090000000920000009400014 +:1029600000096000000980000009A0000009C00003 +:102970000009E000000A0000000A2000000A4000F0 +:10298000000A6000000A8000000AA000000AC000DF +:10299000000AE000000B0000000B2000000B4000CC +:1029A000000B6000000B8000000BA000000BC000BB +:1029B000000BE000000C0000000C2000000C4000A8 +:1029C000000C6000000C8000000CA000000CC00097 +:1029D000000CE000000D0000000D2000000D400084 +:1029E000000D6000000D8000000DA000000DC00073 +:1029F000000DE000000E0000000E2000000E400060 +:102A0000000E6000000E8000000EA000000EC0004E +:102A1000000EE000000F0000000F2000000F40003B +:102A2000000F6000000F8000000FA000000FC0002A +:102A3000000FE00000100000001020000010400017 +:102A400000106000001080000010A0000010C00006 +:102A50000010E000001100000011200000114000F3 +:102A600000116000001180000011A0000011C000E2 +:102A70000011E000001200000012200000124000CF +:102A800000126000001280000012A0000012C000BE +:102A90000012E000001300000013200000134000AB +:102AA00000136000001380000013A0000013C0009A +:102AB0000013E00000140000001420000014400087 +:102AC00000146000001480000014A0000014C00076 +:102AD0000014E00000150000001520000015400063 +:102AE00000156000001580000015A0000015C00052 +:102AF0000015E0000016000000162000001640003F +:102B000000166000001680000016A0000016C0002D +:102B10000016E0000017000000172000001740001A +:102B200000176000001780000017A0000017C00009 +:102B30000017E000001800000018200000184000F6 +:102B400000186000001880000018A0000018C000E5 +:102B50000018E000001900000019200000194000D2 +:102B600000196000001980000019A0000019C000C1 +:102B70000019E000001A0000001A2000001A4000AE +:102B8000001A6000001A8000001AA000001AC0009D +:102B9000001AE000001B0000001B2000001B40008A +:102BA000001B6000001B8000001BA000001BC00079 +:102BB000001BE000001C0000001C2000001C400066 +:102BC000001C6000001C8000001CA000001CC00055 +:102BD000001CE000001D0000001D2000001D400042 +:102BE000001D6000001D8000001DA000001DC00031 +:102BF000001DE000001E0000001E2000001E40001E +:102C0000001E6000001E8000001EA000001EC0000C +:102C1000001EE000001F0000001F2000001F4000F9 +:102C2000001F6000001F8000001FA000001FC000E8 +:102C3000001FE000002000000020200000204000D5 +:102C400000206000002080000020A0000020C000C4 +:102C50000020E000002100000021200000214000B1 +:102C600000216000002180000021A0000021C000A0 +:102C70000021E0000022000000222000002240008D +:102C800000226000002280000022A0000022C0007C +:102C90000022E00000230000002320000023400069 +:102CA00000236000002380000023A0000023C00058 +:102CB0000023E00000240000002420000024400045 +:102CC00000246000002480000024A0000024C00034 +:102CD0000024E00000250000002520000025400021 +:102CE00000256000002580000025A0000025C00010 +:102CF0000025E000002600000026200000264000FD +:102D000000266000002680000026A0000026C000EB +:102D10000026E000002700000027200000274000D8 +:102D200000276000002780000027A0000027C000C7 +:102D30000027E000002800000028200000284000B4 +:102D400000286000002880000028A0000028C000A3 +:102D50000028E00000290000002920000029400090 +:102D600000296000002980000029A0000029C0007F +:102D70000029E000002A0000002A2000002A40006C +:102D8000002A6000002A8000002AA000002AC0005B +:102D9000002AE000002B0000002B2000002B400048 +:102DA000002B6000002B8000002BA000002BC00037 +:102DB000002BE000002C0000002C2000002C400024 +:102DC000002C6000002C8000002CA000002CC00013 +:102DD000002CE000002D0000002D2000002D400000 +:102DE000002D6000002D8000002DA000002DC000EF +:102DF000002DE000002E0000002E2000002E4000DC +:102E0000002E6000002E8000002EA000002EC000CA +:102E1000002EE000002F0000002F2000002F4000B7 +:102E2000002F6000002F8000002FA000002FC000A6 +:102E3000002FE00000300000003020000030400093 +:102E400000306000003080000030A0000030C00082 +:102E50000030E0000031000000312000003140006F +:102E600000316000003180000031A0000031C0005E +:102E70000031E0000032000000322000003240004B +:102E800000326000003280000032A0000032C0003A +:102E90000032E00000330000003320000033400027 +:102EA00000336000003380000033A0000033C00016 +:102EB0000033E00000340000003420000034400003 +:102EC00000346000003480000034A0000034C000F2 +:102ED0000034E000003500000035200000354000DF +:102EE00000356000003580000035A0000035C000CE +:102EF0000035E000003600000036200000364000BB +:102F000000366000003680000036A0000036C000A9 +:102F10000036E00000370000003720000037400096 +:102F200000376000003780000037A0000037C00085 +:102F30000037E00000380000003820000038400072 +:102F400000386000003880000038A0000038C00061 +:102F50000038E0000039000000392000003940004E +:102F600000396000003980000039A0000039C0003D +:102F70000039E000003A0000003A2000003A40002A +:102F8000003A6000003A8000003AA000003AC00019 +:102F9000003AE000003B0000003B2000003B400006 +:102FA000003B6000003B8000003BA000003BC000F5 +:102FB000003BE000003C0000003C2000003C4000E2 +:102FC000003C6000003C8000003CA000003CC000D1 +:102FD000003CE000003D0000003D2000003D4000BE +:102FE000003D6000003D8000003DA000003DC000AD +:102FF000003DE000003E0000003E2000003E40009A +:10300000003E6000003E8000003EA000003EC00088 +:10301000003EE000003F0000003F2000003F400075 +:10302000003F6000003F8000003FA000003FC00064 +:10303000003FE000003FE00100000000000001FF51 +:10304000000002000000000100000002000000007B +:1030500000000008021500200215002008100000E2 +:103060000000003300000002000000000000000526 +:103070000000000500000000000000000000000249 +:103080000000000300000002000000010000000436 +:103090000000000200000002000000010000000229 +:1030A000000000200000004000000040000000037D +:1030B0000000001800002000000040C000006180F7 +:1030C000000082400000A3000000C3C00000E480B4 +:1030D0000001054000012600000146C00001678094 +:1030E000000188400001A9000001C9C00001EA8078 +:1030F00000020B4000022C0000024CC000026D8058 +:1031000000028E400002AF000002CFC00002F0803B +:10311000000011400000000100000001000000015B +:10312000000000010000000100000001000000019B +:10313000000000010000000100000001000000018B +:10314000000000010000000100000001000000017B +:103150000003D0000000003D00000001000D000051 +:10316000000700D000028140000B816800020220AD +:1031700000010240000F025000010340000C00005B +:10318000000800C000028140000B8168000202209C +:103190000001024000070250000202C000100000BF +:1031A0000008010000028180000B81A8000202607B +:1031B00000018280000E8298000803800000000059 +:1031C000000000000002800000090028000200B892 +:1031D000000100D8000000E8000000E8FFFFFFF356 +:1031E00001AFFFFF00000000000000000000000031 +:1031F000000000000000000000000000FFFFFFF1E1 +:1032000000EFFFFF000000000000000000000000D1 +:10321000000000000001000000000000FFFFFFF6BA +:10322000005FFFFF00000000000000000000000041 +:10323000000000000002000000000000FFFFF40694 +:103240001CBFFFFF0000000500000000000000148C +:10325000000000000004000000000000FFFFFFF27B +:10326000004FFFFF00000000000000000000000011 +:10327000000000000008000000000000FFFFFFFA4F +:10328000002FFFFF00000000000000000000000011 +:10329000000000000010000000000000FFFFFFF72A +:1032A00001EFFFFF00000000000000000000000030 +:1032B000000000000020000000000000FFFFFFF5FC +:1032C000002FFFFF000000000000000000000000D1 +:1032D000000000000040000000000000FFFFFFF3BE +:1032E000018FFFFF00000000000000000000000050 +:1032F000000000000000000000000000FFFFFFF1E0 +:10330000010FFFFF000000000000000000000000AF +:10331000000000000001000000000000FFFFFFF6B9 +:10332000005FFFFF00000000000000000000000040 +:10333000000000000002000000000000FFFFF40693 +:103340001CBFFFFF0000000500000000000000148B +:10335000000000000004000000000000FFFFFFF27A +:10336000004FFFFF00000000000000000000000010 +:10337000000000000008000000000000FFFFFFFA4E +:10338000002FFFFF00000000000000000000000010 +:10339000000000000010000000000000FFFFFFF729 +:1033A00000EFFFFF00000000000000000000000030 +:1033B000000000000020000000000000FFFFFFF5FB +:1033C000004FFFFF000000000000000000000000B0 +:1033D000000000000040000000000000FFFFFFFFB1 +:1033E00000CFFFFF0000000000000000000000CC44 +:1033F000000000000000000000000000FFFFFFFFD1 +:1034000000CFFFFF0000000000000000000000CC23 +:10341000000000000001000000000000FFFFFFFFAF +:1034200000CFFFFF0000000000000000000000CC03 +:10343000000000000002000000000000FFFFFFFF8E +:1034400000CFFFFF0000000000000000000000CCE3 +:10345000000000000004000000000000FFFFFFFF6C +:1034600000CFFFFF0000000000000000000000CCC3 +:10347000000000000008000000000000FFFFFFFF48 +:1034800000CFFFFF0000000000000000000000CCA3 +:10349000000000000010000000000000FFFFFFFF20 +:1034A00000CFFFFF0000000000000000000000CC83 +:1034B000000000000020000000000000FFFFFFFFF0 +:1034C00000CFFFFF0000000000000000000000CC63 +:1034D000000000000040000000000000FFFFFFF3BC +:1034E000020FFFFF000000000000000000000000CD +:1034F000000000000000000000000000FFFFFFF1DE +:10350000010FFFFF000000000000000000000000AD +:10351000000000000001000000000000FFFFFFF6B7 +:10352000005FFFFF0000000000000000000000003E +:10353000000000000002000000000000FFFFF40691 +:103540001CBFFFFF00000005000000000000001489 +:10355000000000000004000000000000FFFFFFF278 +:10356000004FFFFF0000000000000000000000000E +:10357000000000000008000000000000FFFFFF8ABC +:10358000042FFFFF0000000000000000000000000A +:10359000000000000010000000000000FFFFFF9787 +:1035A00005CFFFFF00000000000000000000000049 +:1035B000000000000020000000000000FFFFFFF5F9 +:1035C000010FFFFF000000000000000000000000ED +:1035D000000000000040000000000000FFFFFFF3BB +:1035E000000FFFFF000000000000000000000000CE +:1035F000000000000000000000000000FFFFFFF1DD +:10360000000FFFFF000000000000000000000000AD +:10361000000000000001000000000000FFFFFFF6B6 +:10362000005FFFFF0000000000000000000000003D +:10363000000000000002000000000000FFFFFF0685 +:103640001CBFFFFF0000000000000000000000148D +:10365000000000000004000000000000FFFFFFF277 +:10366000004FFFFF0000000000000000000000000D +:10367000000000000008000000000000FFFFFFFA4B +:10368000002FFFFF0000000000000000000000000D +:10369000000000000010000000000000FFFFFFF726 +:1036A000000FFFFF0000000000000000000000000D +:1036B000000000000020000000000000FFFFFFFFEE +:1036C00000CFFFFF0000000000000000000000CC61 +:1036D000000000000040000000000000FFFFFFFFAE +:1036E00000CFFFFF0000000000000000000000CC41 +:1036F000000000000000000000000000FFFFFFFFCE +:1037000000CFFFFF0000000000000000000000CC20 +:10371000000000000001000000000000FFFFFFFFAC +:1037200000CFFFFF0000000000000000000000CC00 +:10373000000000000002000000000000FFFFFFFF8B +:1037400000CFFFFF0000000000000000000000CCE0 +:10375000000000000004000000000000FFFFFFFF69 +:1037600000CFFFFF0000000000000000000000CCC0 +:10377000000000000008000000000000FFFFFFFF45 +:1037800000CFFFFF0000000000000000000000CCA0 +:10379000000000000010000000000000FFFFFFFF1D +:1037A00000CFFFFF0000000000000000000000CC80 +:1037B000000000000020000000000000FFFFFFFFED +:1037C00000CFFFFF0000000000000000000000CC60 +:1037D000000000000040000000000000FFFFFFFFAD +:1037E00000CFFFFF0000000000000000000000CC40 +:1037F000000000000000000000000000FFFFFFFFCD +:1038000000CFFFFF0000000000000000000000CC1F +:10381000000000000001000000000000FFFFFFFFAB +:1038200000CFFFFF0000000000000000000000CCFF +:10383000000000000002000000000000FFFFFFFF8A +:1038400000CFFFFF0000000000000000000000CCDF +:10385000000000000004000000000000FFFFFFFF68 +:1038600000CFFFFF0000000000000000000000CCBF +:10387000000000000008000000000000FFFFFFFF44 +:1038800000CFFFFF0000000000000000000000CC9F +:10389000000000000010000000000000FFFFFFFF1C +:1038A00000CFFFFF0000000000000000000000CC7F +:1038B000000000000020000000000000FFFFFFFFEC +:1038C00000CFFFFF0000000000000000000000CC5F +:1038D000000000000040000000000000FFFFFFFFAC +:1038E00000CFFFFF0000000000000000000000CC3F +:1038F000000000000000000000000000FFFFFFFFCC +:1039000000CFFFFF0000000000000000000000CC1E +:10391000000000000001000000000000FFFFFFFFAA +:1039200000CFFFFF0000000000000000000000CCFE +:10393000000000000002000000000000FFFFFFFF89 +:1039400000CFFFFF0000000000000000000000CCDE +:10395000000000000004000000000000FFFFFFFF67 +:1039600000CFFFFF0000000000000000000000CCBE +:10397000000000000008000000000000FFFFFFFF43 +:1039800000CFFFFF0000000000000000000000CC9E +:10399000000000000010000000000000FFFFFFFF1B +:1039A00000CFFFFF0000000000000000000000CC7E +:1039B000000000000020000000000000FFFFFFFFEB +:1039C00000CFFFFF0000000000000000000000CC5E +:1039D0000000000000400000000000000000021194 +:1039E00000000200000002040000FFFF0000FFFFD3 +:1039F0000000FFFF0000FFFF00000020000000218A +:103A00000000002200000023000000240000002528 +:103A10000000002600000027000000280000002908 +:103A20000000002A0000002B0000002C0000002DE8 +:103A30000000002E0000002F000000100000000118 +:103A40000000000100000001000000010000000172 +:103A50000000000100000001000000010000000162 +:103A60000000000100000001000000010000000152 +:103A70000000000100000001000000010000000142 +:103A800007FFFFFF0000003F07FFFFFF0000000FE0 +:103A900000007FF800007FF80000FF000000000039 +:103AA0000000FF00000000000000FF000000000018 +:103AB0000000FF00000000000000FF000000000008 +:103AC0000000FF00000000000000FF0000000000F8 +:103AD0000000FF00000000000000FF1C0FFFFFFFC0 +:103AE0000000FF1C0FFFFFFF0000FF1C0FFFFFFF88 +:103AF0000000FF1C0FFFFFFF0000FF1C0FFFFFFF78 +:103B00000000FF1C0FFFFFFF0000FF1C0FFFFFFF67 +:103B10000000FF1C0FFFFFFF0000FF1C0FFFFFFF57 +:103B20000000FF1C0FFFFFFF0000FF1C0FFFFFFF47 +:103B30000000FF1C0FFFFFFF0000FF1C0FFFFFFF37 +:103B40000000FF1C0FFFFFFF0000FF1C0FFFFFFF27 +:103B50000000FF1C0FFFFFFF0000FF1C0FFFFFFF17 +:103B60000000FF1C0FFFFFFF0000FF1C0FFFFFFF07 +:103B70000000FF1C0FFFFFFF0000FF1C0FFFFFFFF7 +:103B80000000FF1C0FFFFFFF0000FF1C0FFFFFFFE7 +:103B90000000FF1C0FFFFFFF0000FF1C0FFFFFFFD7 +:103BA0000000FF1C0FFFFFFF0000FF1C0FFFFFFFC7 +:103BB0000000FF1C0FFFFFFF0000FF1C0FFFFFFFB7 +:103BC0000000FF1C0FFFFFFF0000FF1C0FFFFFFFA7 +:103BD0000000FF1C0FFFFFFF0000FF1C0FFFFFFF97 +:103BE0000000FF1C0FFFFFFF0000FF1C0FFFFFFF87 +:103BF0000000FF1C0FFFFFFF0000FF1C0FFFFFFF77 +:103C00000000FF1C0FFFFFFF0000FF1C0FFFFFFF66 +:103C10000000FF1C0FFFFFFF0000FF1C0FFFFFFF56 +:103C20000000FF1C0FFFFFFF0000FF1C0FFFFFFF46 +:103C30000000FF1C0FFFFFFF0000FF1C0FFFFFFF36 +:103C40000000FF1C0FFFFFFF0000FF1C0FFFFFFF26 +:103C50000000FF1C0FFFFFFF0000FF1C0FFFFFFF16 +:103C60000000FF1C0FFFFFFF0000FF1C0FFFFFFF06 +:103C70000000FF1C0FFFFFFF0000FF1C0FFFFFFFF6 +:103C80000000FF1C0FFFFFFF0000FF1C0FFFFFFFE6 +:103C90000000FF1C0FFFFFFF0000FF1C0FFFFFFFD6 +:103CA0000000FF1C0FFFFFFF0000FF1C0FFFFFFFC6 +:103CB0000000FF1C0FFFFFFF0000FF1C0FFFFFFFB6 +:103CC0000000FF1C0FFFFFFF0000FF1C0FFFFFFFA6 +:103CD0000000FF1C0FFFFFFF000003120000350073 +:103CE00000000001000000020000000300000000CE +:103CF00000000004000000010000000000000001BE +:103D000000000004000000000000000100000003AB +:103D1000000000000000000100000004000000009E +:103D2000000000010000000300000000000000018E +:103D30000000000400000000000000040000000378 +:103D4000000000000000000000003FFF000003FF33 +:103D50000000000000000001000000010000000160 +:103D6000007C10040000000400000002000000902D +:103D70000000009000800090081000000000008A01 +:103D800000000080000000810000008000000006AC +:103D9000000007D00000076C071D2911000000007B +:103DA000009C04240000000000000001000000014D +:103DB00000000001000000010000000100007FFF82 +:103DC000000000FF000000FF000000FF000000FFF7 +:103DD0000000007F000000FF000000FF000000FF67 +:103DE0000000003E000000000000003F0000003F17 +:103DF0000000003F0000003F0000003F0000003FC7 +:103E00000000003F0000000F00000000121700003B +:103E100022170000321700001215000022150000C2 +:103E20003215000002100000001000001010000009 +:103E300020100000301000000010000012140000DC +:103E4000221400003214000000E38340FFFFFFFF54 +:103E5000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72 +:103E6000FFFFFFFFFFFFFFFFFFFFFFFFF00050001E +:103E7000F0001000FFFFFFFFFFFFFFFFFFFFFFFF4E +:103E8000FFFFFFFFFFFFFFFFFFFFFFFFFF8090002F +:103E9000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF32 +:103EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22 +:103EB000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF12 +:103EC000FFFFFFFFFFFFFFFFFFFFFFFF00003C10B2 +:103ED00000000001000000000000000800000008D1 +:103EE00000000002000000040000000500000004C3 +:103EF000000000400000180800000803000008034C +:103F00000000004000000003000008030000080358 +:103F1000000008030001000300000803000008037C +:103F20000000000300000003000000030000000385 +:103F30000000000300000003000000030000000375 +:103F40000000000300000003000000030000000365 +:103F50000000000300000003000000030000240331 +:103F60000000002F0000000900000019000001847B +:103F70000000018300000306000000190000000695 +:103F800000000306000003060000030600000C8684 +:103F90000000030600000306000000060000000603 +:103FA00000000006000000060000000600000006F9 +:103FB00000000006000000060000000600000006E9 +:103FC00000000006000000060000000600000006D9 +:103FD00000000006000003060000001300000006B9 +:103FE0000000100400001004001064400010644041 +:103FF00000000000000000000000000000000000C1 +:104000000000200000000000000000000000000090 +:10401000000000000400200000000000000000007C +:104020000000000000000000000020000000007CF4 +:104030000000003D0000003F0000009C0000000662 +:10404000000000050000000A00000005000001401B +:10405000000001400000000000000000000000C05F +:104060000000013F00007FFF000000480000004802 +:1040700000000000000000000000004800000004F4 +:104080000000000400000004000000040000000420 +:104090000000000400000004000000040000000410 +:1040A000000000090000000B0000000A00000004EE +:1040B000000000090000000B0000000A00000001E1 +:1040C00000000001000000010000000100000001EC +:1040D00000000001000000010000000100000001DC +:1040E00000000001000000010000000100000004C9 +:1040F000000000090000000B0000000A00000001A1 +:1041000000000001000000010000000100000001AB +:10411000000000010000000100000001000000019B +:104120000000000100000001000000010000000488 +:10413000000000090000000B0000000A0000000061 +:10414000000000000000080000000200000001FF65 +:104150000000040000000000000000001E491E498D +:104160001E491E490E490E490E490E49FFFFFFFF29 +:1041700000000000000025E40000800000000013A3 +:104180000FFF0FFF00000000000000000FFF0FFFF7 +:10419000100010001000100020002000200020005F +:1041A000800080008000800040004000400040000F +:1041B00000000000000000010101010101200101D7 +:1041C0002001010101011001010101010120010192 +:1041D0002001010101011001200101010101100173 +:1041E0000101010101200101200101010101100172 +:1041F0000101010101200101010101010120010171 +:104200002001010101011001010101010120010151 +:104210002001010101011001010101010120010141 +:104220002001010101011001010101010120010131 +:10423000200101010101100100000004000000093B +:104240000000000B0000000A00000004000000094C +:104250000000000B0000000A000000010000000147 +:10426000000000010000000100000001000000014A +:10427000000000010000000100000001000000013A +:10428000000000010000000100000004000000091F +:104290000000000B0000000A000000010000000107 +:1042A000000000010000000100000001000000010A +:1042B00000000001000000010000000100000001FA +:1042C00000000001000000010000000400000009DF +:1042D0000000000B0000000A1E491E491E491E492D +:1042E0000E490E490E490E49FFFFFFFF0000000076 +:1042F0000FFF0FFF00000000000000000FFF0FFF86 +:1043000010001000100010002000200020002000ED +:10431000800080008000800040004000400040009D +:104320000000000000000002000000010000000387 +:104330000000000400000006000000050000000767 +:1043400000000123000001230000012300000123DD +:1043500000000123000001230000012300000123CD +:1043600000000123000001230000012300000123BD +:1043700000000123000001230000012300000123AD +:10438000000001230000012300000123000001239D +:1043900000000020000000320000000700000007BD +:1043A0000000000000000008021500200215002097 +:1043B0000000003008100000000000330000003052 +:1043C00000000031000000020000000500000006AF +:1043D00000000002000000020000000000000005D4 +:1043E00000000002000000020000000200000001C6 +:1043F0000000000600000001000000020000004074 +:104400000000004000000020000000130000002019 +:1044100000010000000204C00003098000040E40F7 +:1044200000051300000617C000071C80000821408B +:1044300000092600000A2AC0000B2F80000C34401F +:10444000000D3900000E3DC0000F428000104740B3 +:1044500000114C00001250C00013558000145A4047 +:1044600000155F00001663C00017688000186D40DB +:1044700000197200001A76C0001B7B80001C80406F +:10448000001D8500001E89C0001F8E800000934023 +:104490000000000100000001000000010000000118 +:1044A0000000000100000001000000010000000108 +:1044B00000000001000000010000000100000001F8 +:1044C00000000001000000010000000100000001E8 +:1044D000000000080000000C0000001000000001B7 +:1044E00000000001000000010000021100000200B5 +:1044F00000000204000002190000FFFF0000FFFF9F +:104500000000FFFF0000FFFF07FFFFFF0000003F6C +:1045100007FFFFFF0000000F00007FF800007FF89A +:104520000000000000000001002010010000000059 +:1045300001009000000001000000000100000000E8 +:1045400000000000140AFF000000900200000000BC +:1045500000000000000000000000900400000000C7 +:1045600000000000000000000000900600000000B5 +:1045700000000000000000000000900800000000A3 +:1045800000000000000000000000900A0000000091 +:1045900000000000000000000000900C000000007F +:1045A00000000000000000000000900E000000006D +:1045B000000000000000000000009010000000005B +:1045C0000000000000000000000090120000000049 +:1045D0000000000000000000000090140000000037 +:1045E0000000000000000000000090160000000025 +:1045F0000000000000000000000090180000000013 +:1046000000000000000000000000901A0000000000 +:1046100000000000000000000000901C00000000EE +:1046200000000000000000000000901E00000000DC +:1046300000000000000000000000902000000000CA +:1046400000000000000000000000902200000000B8 +:1046500000000000000000000000902400000000A6 +:104660000000000000000000000090260000000094 +:104670000000000000000000000090280000000082 +:1046800000000000000000000000902A0000000070 +:1046900000000000000000000000902C000000005E +:1046A00000000000000000000000902E000000004C +:1046B000000000000000000000009030000000003A +:1046C0000000000000000000000090320000000028 +:1046D0000000000000000000000090340000000016 +:1046E0000000000000000000000090360000000004 +:1046F00000000000000000000000903800000000F2 +:1047000000000000000000000000903A00000000DF +:1047100000000000000000000000903C00000000CD +:1047200000000000000000000000903E00000000BB +:1047300000000000000000000000904000000000A9 +:104740000000000000000000000090420000000097 +:104750000000000000000000000090440000000085 +:104760000000000000000000000090460000000073 +:104770000000000000000000000090480000000061 +:1047800000000000000000000000904A000000004F +:1047900000000000000000000000904C000000003D +:1047A00000000000000000000000904E000000002B +:1047B0000000000000000000000090500000000019 +:1047C0000000000000000000000090520000000007 +:1047D00000000000000000000000905400000000F5 +:1047E00000000000000000000000905600000000E3 +:1047F00000000000000000000000905800000000D1 +:1048000000000000000000000000905A00000000BE +:1048100000000000000000000000905C00000000AC +:1048200000000000000000000000905E000000009A +:104830000000000000000000000090600000000088 +:104840000000000000000000000090620000000076 +:104850000000000000000000000090640000000064 +:104860000000000000000000000090660000000052 +:104870000000000000000000000090680000000040 +:1048800000000000000000000000906A000000002E +:1048900000000000000000000000906C000000001C +:1048A00000000000000000000000906E000000000A +:1048B00000000000000000000000907000000000F8 +:1048C00000000000000000000000907200000000E6 +:1048D00000000000000000000000907400000000D4 +:1048E00000000000000000000000907600000000C2 +:1048F00000000000000000000000907800000000B0 +:1049000000000000000000000000907A000000009D +:1049100000000000000000000000907C000000008B +:1049200000000000000000000000907E0000000079 +:104930000000000000000000000090800000000067 +:104940000000000000000000000090820000000055 +:104950000000000000000000000090840000000043 +:104960000000000000000000000090860000000031 +:10497000000000000000000000009088000000001F +:1049800000000000000000000000908A000000000D +:1049900000000000000000000000908C00000000FB +:1049A00000000000000000000000908E00000000E9 +:1049B00000000000000000000000909000000000D7 +:1049C00000000000000000000000909200000000C5 +:1049D00000000000000000000000909400000000B3 +:1049E00000000000000000000000909600000000A1 +:1049F000000000000000000000009098000000008F +:104A000000000000000000000000909A000000007C +:104A100000000000000000000000909C000000006A +:104A200000000000000000000000909E0000000058 +:104A30000000000000000000000090A00000000046 +:104A40000000000000000000000090A20000000034 +:104A50000000000000000000000090A40000000022 +:104A60000000000000000000000090A60000000010 +:104A70000000000000000000000090A800000000FE +:104A80000000000000000000000090AA00000000EC +:104A90000000000000000000000090AC00000000DA +:104AA0000000000000000000000090AE00000000C8 +:104AB0000000000000000000000090B000000000B6 +:104AC0000000000000000000000090B200000000A4 +:104AD0000000000000000000000090B40000000092 +:104AE0000000000000000000000090B60000000080 +:104AF0000000000000000000000090B8000000006E +:104B00000000000000000000000090BA000000005B +:104B10000000000000000000000090BC0000000049 +:104B20000000000000000000000090BE0000000037 +:104B30000000000000000000000090C00000000025 +:104B40000000000000000000000090C20000000013 +:104B50000000000000000000000090C40000000001 +:104B60000000000000000000000090C600000000EF +:104B70000000000000000000000090C800000000DD +:104B80000000000000000000000090CA00000000CB +:104B90000000000000000000000090CC00000000B9 +:104BA0000000000000000000000090CE00000000A7 +:104BB0000000000000000000000090D00000000095 +:104BC0000000000000000000000090D20000000083 +:104BD0000000000000000000000090D40000000071 +:104BE0000000000000000000000090D6000000005F +:104BF0000000000000000000000090D8000000004D +:104C00000000000000000000000090DA000000003A +:104C10000000000000000000000090DC0000000028 +:104C20000000000000000000000090DE0000000016 +:104C30000000000000000000000090E00000000004 +:104C40000000000000000000000090E200000000F2 +:104C50000000000000000000000090E400000000E0 +:104C60000000000000000000000090E600000000CE +:104C70000000000000000000000090E800000000BC +:104C80000000000000000000000090EA00000000AA +:104C90000000000000000000000090EC0000000098 +:104CA0000000000000000000000090EE0000000086 +:104CB0000000000000000000000090F00000000074 +:104CC0000000000000000000000090F20000000062 +:104CD0000000000000000000000090F40000000050 +:104CE0000000000000000000000090F6000000003E +:104CF0000000000000000000000090F8000000002C +:104D00000000000000000000000090FA0000000019 +:104D10000000000000000000000090FC0000000007 +:104D20000000000000000000000090FE00000000F5 +:104D300000000000000000000000910000000000E2 +:104D400000000000000000000000910200000000D0 +:104D500000000000000000000000910400000000BE +:104D600000000000000000000000910600000000AC +:104D7000000000000000000000009108000000009A +:104D800000000000000000000000910A0000000088 +:104D900000000000000000000000910C0000000076 +:104DA00000000000000000000000910E0000000064 +:104DB0000000000000000000000091100000000052 +:104DC0000000000000000000000091120000000040 +:104DD000000000000000000000009114000000002E +:104DE000000000000000000000009116000000001C +:104DF000000000000000000000009118000000000A +:104E000000000000000000000000911A00000000F7 +:104E100000000000000000000000911C00000000E5 +:104E200000000000000000000000911E00000000D3 +:104E300000000000000000000000912000000000C1 +:104E400000000000000000000000912200000000AF +:104E5000000000000000000000009124000000009D +:104E6000000000000000000000009126000000008B +:104E70000000000000000000000091280000000079 +:104E800000000000000000000000912A0000000067 +:104E900000000000000000000000912C0000000055 +:104EA00000000000000000000000912E0000000043 +:104EB0000000000000000000000091300000000031 +:104EC000000000000000000000009132000000001F +:104ED000000000000000000000009134000000000D +:104EE00000000000000000000000913600000000FB +:104EF00000000000000000000000913800000000E9 +:104F000000000000000000000000913A00000000D6 +:104F100000000000000000000000913C00000000C4 +:104F200000000000000000000000913E00000000B2 +:104F300000000000000000000000914000000000A0 +:104F4000000000000000000000009142000000008E +:104F5000000000000000000000009144000000007C +:104F6000000000000000000000009146000000006A +:104F70000000000000000000000091480000000058 +:104F800000000000000000000000914A0000000046 +:104F900000000000000000000000914C0000000034 +:104FA00000000000000000000000914E0000000022 +:104FB0000000000000000000000091500000000010 +:104FC00000000000000000000000915200000000FE +:104FD00000000000000000000000915400000000EC +:104FE00000000000000000000000915600000000DA +:104FF00000000000000000000000915800000000C8 +:1050000000000000000000000000915A00000000B5 +:1050100000000000000000000000915C00000000A3 +:1050200000000000000000000000915E0000000091 +:10503000000000000000000000009160000000007F +:10504000000000000000000000009162000000006D +:10505000000000000000000000009164000000005B +:105060000000000000000000000091660000000049 +:105070000000000000000000000091680000000037 +:1050800000000000000000000000916A0000000025 +:1050900000000000000000000000916C0000000013 +:1050A00000000000000000000000916E0000000001 +:1050B00000000000000000000000917000000000EF +:1050C00000000000000000000000917200000000DD +:1050D00000000000000000000000917400000000CB +:1050E00000000000000000000000917600000000B9 +:1050F00000000000000000000000917800000000A7 +:1051000000000000000000000000917A0000000094 +:1051100000000000000000000000917C0000000082 +:1051200000000000000000000000917E0000000070 +:10513000000000000000000000009180000000005E +:10514000000000000000000000009182000000004C +:10515000000000000000000000009184000000003A +:105160000000000000000000000091860000000028 +:105170000000000000000000000091880000000016 +:1051800000000000000000000000918A0000000004 +:1051900000000000000000000000918C00000000F2 +:1051A00000000000000000000000918E00000000E0 +:1051B00000000000000000000000919000000000CE +:1051C00000000000000000000000919200000000BC +:1051D00000000000000000000000919400000000AA +:1051E0000000000000000000000091960000000098 +:1051F0000000000000000000000091980000000086 +:1052000000000000000000000000919A0000000073 +:1052100000000000000000000000919C0000000061 +:1052200000000000000000000000919E000000004F +:105230000000000000000000000091A0000000003D +:105240000000000000000000000091A2000000002B +:105250000000000000000000000091A40000000019 +:105260000000000000000000000091A60000000007 +:105270000000000000000000000091A800000000F5 +:105280000000000000000000000091AA00000000E3 +:105290000000000000000000000091AC00000000D1 +:1052A0000000000000000000000091AE00000000BF +:1052B0000000000000000000000091B000000000AD +:1052C0000000000000000000000091B2000000009B +:1052D0000000000000000000000091B40000000089 +:1052E0000000000000000000000091B60000000077 +:1052F0000000000000000000000091B80000000065 +:105300000000000000000000000091BA0000000052 +:105310000000000000000000000091BC0000000040 +:105320000000000000000000000091BE000000002E +:105330000000000000000000000091C0000000001C +:105340000000000000000000000091C2000000000A +:105350000000000000000000000091C400000000F8 +:105360000000000000000000000091C600000000E6 +:105370000000000000000000000091C800000000D4 +:105380000000000000000000000091CA00000000C2 +:105390000000000000000000000091CC00000000B0 +:1053A0000000000000000000000091CE000000009E +:1053B0000000000000000000000091D0000000008C +:1053C0000000000000000000000091D2000000007A +:1053D0000000000000000000000091D40000000068 +:1053E0000000000000000000000091D60000000056 +:1053F0000000000000000000000091D80000000044 +:105400000000000000000000000091DA0000000031 +:105410000000000000000000000091DC000000001F +:105420000000000000000000000091DE000000000D +:105430000000000000000000000091E000000000FB +:105440000000000000000000000091E200000000E9 +:105450000000000000000000000091E400000000D7 +:105460000000000000000000000091E600000000C5 +:105470000000000000000000000091E800000000B3 +:105480000000000000000000000091EA00000000A1 +:105490000000000000000000000091EC000000008F +:1054A0000000000000000000000091EE000000007D +:1054B0000000000000000000000091F0000000006B +:1054C0000000000000000000000091F20000000059 +:1054D0000000000000000000000091F40000000047 +:1054E0000000000000000000000091F60000000035 +:1054F0000000000000000000000091F80000000023 +:105500000000000000000000000091FA0000000010 +:105510000000000000000000000091FC00000000FE +:105520000000000000000000000091FE0000FF00ED +:10553000000000000000FF00000000000000FF006D +:10554000000000000000FF00000000000000FF005D +:10555000000000000000FF00000000000000FF004D +:10556000000000000000FF0000000000000001A794 +:1055700000003500000000010000000200000003F0 +:105580000000000000000004000000010000000016 +:105590000000000100000004000000000000000105 +:1055A00000000003000000000000000100000004F3 +:1055B00000000000000000010000000300000000E7 +:1055C00000000001000000040000000000000004D2 +:1055D00000000003000000000000000000003FFF8A +:1055E000000003FF0000000300BEBC20000000001C +:1055F000000000050000000300BEBC200000000009 +:10560000000000050000000300BEBC2000000000F8 +:10561000000000050000000300BEBC2000000000E8 +:10562000000000050000000300BEBC2000000000D8 +:10563000000000050000000300BEBC2000000000C8 +:10564000000000050000000300BEBC2000000000B8 +:10565000000000050000000300BEBC2000000000A8 +:10566000000000050000000D0000000C000000001C +:10567000000000100215002002150020000000307C +:10568000081000000000003300000030000000316E +:105690000000000200000004000000000000000202 +:1056A00000000002000000000000000200000007EF +:1056B00000000002000000020000000100000003E2 +:1056C0000000000100000002000000400000004057 +:1056D00000000004000000200000000F0000001B7C +:1056E00000008000000103C00001878000020B4021 +:1056F00000028F00000312C00003968000041A40CD +:1057000000049E00000521C00005A5800006294078 +:105710000006AD00000730C00007B4800008384024 +:105720000008BC0000093FC00009C380000A4740D0 +:10573000000ACB00000B4EC0000BD280000C56407C +:10574000000CDA00000D5DC0000061800000000167 +:105750000000000100000001000000010000000145 +:105760000000000100000001000000010000000135 +:105770000000000100000001000000010000000125 +:105780000000000100000001000000010000000115 +:105790000000101100001000000010040000102193 +:1057A0000000FFFF0000FFFF0000FFFF0000FFFF01 +:1057B0000000004600000010000000000000000093 +:1057C00000000018000000010000000000000000C0 +:1057D000000000000000000107FFFFFF0000003F85 +:1057E00007FFFFFF0000000F00007FF800007FF8B8 +:1057F0000000190000000000FFFFFFFFFFFFFFFF98 +:10580000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 +:10581000FFFFFFFFFFFFFFFF0000FF000000000091 +:105820000000FF00000000000000FF00000000007A +:105830000000FF00000000000000FF00000000006A +:105840000000FF00000000000000FF00000000005A +:105850000000FF00000000000000014B00001500E8 +:105860000000000100000002000000030000000032 +:105870000000000400000001000000000000000122 +:105880000000000400000000000000010000000310 +:105890000000000000000001000000040000000003 +:1058A00000000001000000030000000000000001F3 +:1058B00000000004000000000000000400000003DD +:1058C000000000000000000000003FFF000003FF98 +:1058D00000000000039387000000000000000000AB +:1058E000000000000393870000000000000000009B +:1058F0000000000F00000007000000000000000E84 +:1059000003150020031500200100003008100000DE +:1059100000000033000000300000003100000003F0 +:105920000000000600000003000000030000000269 +:10593000000000000000000200000000000000065F +:10594000000000040000000200000002000000014E +:105950000000000400000001000000020000004000 +:1059600000000040000000040000002000000002D1 +:105970000000002000001000000020800000310026 +:1059800000004180000052000000628000007300AF +:1059900000008380000094000000A4800000B50097 +:1059A0000000C5800000D6000000E6800000F7007F +:1059B0000001078000011800000128800001390063 +:1059C0000001498000015A0000016A8000017B004B +:1059D00000018B8000019C000001AC800001BD0033 +:1059E0000001CD800001DE000001EE800001FF001B +:1059F00000000F8000000001000000010000000115 +:105A00000000000100000001000000010000000192 +:105A10000000000100000001000000010000000182 +:105A20000000000100000001000000010000000172 +:105A30000000000100000001000000010000000162 +:105A400000000001000012240000121000001214D7 +:105A50000000FFFF0000FFFF0000FFFF0000FFFF4E +:105A600000000020000000200000000000000000F6 +:105A70000000002300000024000000250000002694 +:105A800000000027000000290000002A0000002B71 +:105A90000000002C000000010000000107FFFFFFD4 +:105AA0000000003F07FFFFFF0000000F00007FF82D +:105AB00000007FF80000000000000001CCCC0201D3 +:105AC000CCCCCCCCCCCC0201CCCCCCCCCCCC020140 +:105AD000CCCCCCCCCCCC0201CCCCCCCCCCCC020130 +:105AE000CCCCCCCCCCCC0201CCCCCCCCCCCC020120 +:105AF000CCCCCCCCCCCC0201CCCCCCCCFFFFFFFFAF +:105B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 +:105B1000FFFFFFFFFFFFFFFFFFFFFFFF0000000091 +:105B20000001000100020807CCCCCCC51000000029 +:105B3000000028AD7058103C000000000000FF007D +:105B4000000000000000FF00000000000000FF0057 +:105B5000000000000000FF00000000000000FF0047 +:105B6000000000000000FF00000000000000FF0037 +:105B7000000000000000FF000000000000000265BF +:105B800000001500000000010000000200000003FA +:105B90000000000000000004000000010000000000 +:105BA00000000001000000040000000000000001EF +:105BB00000000003000000000000000100000004DD +:105BC00000000000000000010000000300000000D1 +:105BD00000000001000000040000000000000004BC +:105BE00000000003000000000000000000003FFF74 +:105BF000000003FF002625A000000000002625A0CD +:105C000000000000002625A000000000002625A0BE +:105C100000000000000E0000011600D6002625A09E +:105C200000000000002625A000000000002625A09E +:105C300000000000002625A0000000000072000007 +:105C4000012300F30000FFFF000000000000FFFF41 +:105C5000000000000000FFFF000000000000FFFF48 +:105C6000000000000000FFFF000000000000FFFF38 +:105C70000000000000000000000000000000FFFF26 +:105C8000000000000000FFFF000000000000FFFF18 +:105C9000000000000000FFFF000000000000FFFF08 +:105CA000000000000000FFFF000000000000FFFFF8 +:105CB0000000000000000000000000000000FFFFE6 +:105CC000000000000000FFFF000000000000FFFFD8 +:105CD000000000000000FFFF000000000000FFFFC8 +:105CE000000000000000FFFF000000000000FFFFB8 +:105CF0000000000000000000000000000000FFFFA6 +:105D0000000000000000FFFF000000000000FFFF97 +:105D1000000000000000FFFF000000000000FFFF87 +:105D2000000000000000FFFF000000000000FFFF77 +:105D30000000000000000000000000000000FFFF65 +:105D4000000000000000FFFF000000000000FFFF57 +:105D5000000000000000FFFF000000000000FFFF47 +:105D6000000000000000FFFF000000000000FFFF37 +:105D70000000000000000000000000000000FFFF25 +:105D8000000000000000FFFF000000000000FFFF17 +:105D9000000000000000FFFF000000000000FFFF07 +:105DA000000000000000FFFF000000000000FFFFF7 +:105DB0000000000000000000000000000000FFFFE5 +:105DC000000000000000FFFF000000000000FFFFD7 +:105DD000000000000000FFFF000000000000FFFFC7 +:105DE000000000000000FFFF000000000000FFFFB7 +:105DF0000000000000000000000000000000FFFFA5 +:105E0000000000000000FFFF000000000000FFFF96 +:105E1000000000000000FFFF000000000000FFFF86 +:105E2000000000000000FFFF000000000000FFFF76 +:105E30000000000000000000000000000000FFFF64 +:105E400000000000555400005555555500005555AB +:105E5000F0000000555400005555555500005555AB +:105E6000F00000005554000055555555000055559B +:105E7000F0000000000000000001000000005014CD +:105E800000000000FF5C0000FFF55FFF0000FFFF67 +:105E9000F00003E0000000000000A000000004008B +:105EA00000000000000000000000000000001000E2 +:105EB00000000000000000000000000000004000A2 +:105EC00000000000000000000000000000010000D1 +:105ED000FF5C0000FFF55FFF0000FFFFF00003E044 +:105EE000000000000000A00000000800000000000A +:105EF0000000000000000000000020000000000082 +:105F00000000000000000000000080000000000011 +:105F1000000000000000000000020000000000007F +:105F20001F8B080000000000000BFB51CFC0F003E6 +:105F3000091773A1F22FB0A2F2D1B10D3B7E7942C5 +:105F400098858132FD424003A480D80C889558F092 +:105F5000ABDDC18429E62C8B607F9362600894805E +:105F6000B0DB242873D7281E1A385D13959FA20E24 +:105F7000A11F6B40E80C34F954A8BC900A84CED41D +:105F8000C46EAE30541E000F54CD7F60030000007D +:105F900000000000000000001F8B0800000000004F +:105FA000000BED7D0D7C5C45F5E8DCBD77EFDEFD9B +:105FB000CADEA4DB74D37C7013D2368550B669DA9E +:105FC000A658F4A64D4BD0AADB0F306AC16D0BA5C5 +:105FD00050DA060C8F3C45F7967C9036A5A480805D +:105FE00080BCA514AC8A1A3060F5A16E29627DE2EE +:105FF000EF9516A56AAB011141695FE55129EFE9FB +:10600000BFFF39676676EFBDD94D1A049FEFF733AE +:10601000F8733A77BECE9C3973CE9973CECCFA34EE +:106020000F29FD1021A7E18FA65F950821B37329E1 +:10603000B936422B10728346F0EF6D7FD10C1221DE +:10604000A45363E98D81A29D906E4D11929906E54E +:10605000556952444890903A250A2D02F187AB21A8 +:106060006D9F9B380FD3F3212D211E422642BE4245 +:106070007F35C8FA3E2DC3FF7F9E9039B9F1C89194 +:1060800064338C2F13F1D74AA0BD4CB6FD459E4119 +:1060900088D21E213735D0BCAE920C6F731AFE4FDA +:1060A0005E19498672F372A79D479AD3CFD4E5EA69 +:1060B0009F4DC2518443210AC2C1DB13621118DF14 +:1060C000CB4777F7F376CA4C3FE31D89A742E30A33 +:1060D0003C75A53492F111D297D2312F478999AEF0 +:1060E000C7799A8F430A6353FCF556183B83920D88 +:1060F0000E3FEBDF24125B1F9274E0AB377ABD6674 +:10610000D6171E9F54D8F05433727E0AED7A90B69B +:10611000A76B67EE84541F1D8EA55938D611FBFC62 +:10612000C70FC7671DED03D30939003850E8FC6875 +:106130003F9E58D21AA62989D17674DD1483B73BC5 +:1061400043BC07EB3CD84EACB7120A38E8C56F9495 +:1061500038E967045D5A9C5E07F87C1332A36791A7 +:10616000B748226CAF674B6DF42B477B916EE568A7 +:10617000C0928B20555E1D768CCBDA79AB4812D657 +:10618000A10B3E95F1C6741D948AF8435B29CABFE2 +:1061900040541C57896AD8CF67A5E417108E257420 +:1061A00009E7E0FE2384E228A027086C356F695DCB +:1061B0002409F80B9510326F247E6E495969658A5F +:1061C0002DEF256D8348FF69364E15494FA070931A +:1061D000BF2D3496850BF7935D5F3E8FAECAF8E115 +:1061E0006423CD4D54E30FC3FCA5FCF3B91BE63388 +:1061F00011E6A35A801F3A9FBB117F05E6D3159E77 +:10620000CAE713CD0B47379F8F803FFB5DCCAB4078 +:106210003B37FC85CABB2BCDD82ADA8515CE3F2F5C +:106220002FCC8BF2BDEFF07979432AAE93379A26C3 +:10623000C057E8FCBE936F7E94AE90BFB9E7A7E865 +:106240001AE2458CAF68BD6965560ECE0CD1D938BF +:106250005938E28C4FEA04DBED22C90C9453FA3B27 +:1062600080F4173209F4AFC668F9F9909A6D165D9B +:10627000D7EEBDF3483DB40BC5C9B534554349B25B +:1062800084D6EBFEBBDC06F448A28DD8BF80E3BF0A +:10629000733E5E086FCB001E1B9E0F5512D68F6B90 +:1062A000FD0F7DD487F9EE89F1870097BFE27873FF +:1062B000E387E2ED57F6FE159DE1F3D047A7317C69 +:1062C000B54E74C0978543EB72E08B000BA5FBB213 +:1062D0009883B2BD960CC8548E1537792C1FC54FC4 +:1062E000757D26436796C5E7AD53D4A781477E49A0 +:1062F0004BBE0EF424CB6953A1EB3B69E520E2B120 +:106300008FD3D522F96FDACB34BD6D7E4D64354D18 +:106310002392E4A03F917E85CA01A0CF7BA81C50A8 +:1063200068C76F1F65F017A2B70752C4B13F1FE8D7 +:10633000505AD3B4FF073A0F2EBD88E2AD275ADB7F +:10634000803CA64952605E8C571322C1F874BE5F30 +:10635000B9E1BF209C147F92343B478782DEAA4D6F +:10636000CBD44380628B78E812EBDD249E31581F3A +:106370008A0D4F023F140F01E82764100FF0E2A0CE +:1063800049F1417278B86DBE07D7F3FAE6A93BE54B +:10639000EA1CDC1F96B8DC8F32BA264ABC0EF866BF +:1063A000A1FDB783E2A91EF7715C827A135A481ADD +:1063B000F6D156FEFD67243159A2F5262C897B6162 +:1063C0003E0725415F31948BDD1CEE1D8B038CBE97 +:1063D0002AF507019E29028EA4E4A6AF29D2EC1C5F +:1063E0005E047D7DD193AC83EF5A5DBC19E6A9D4E0 +:1063F000A73330EF2E0F5987FCC42207A09F124904 +:10640000EC6346DFA15A6327D077135F8792C6DE1D +:10641000EB3C14FEE29862F9685A32BC6A09E84B18 +:10642000FE2317BF4ED8F79700BF135A078987F688 +:1064300033B9D66886713A3CC926986768F62E90BB +:10644000B8743D2C4BA5F318F05A04D64D9B3F6011 +:106450002642B0CE8BC92A9BDE73319F27ED03F510 +:106460000BB19E3B6406E7F6A612FF5521A8174024 +:106470003AAD262D9C0EA88641E940E37440D7BB77 +:1064800015E61F68C91089E60D6310763ED0F92421 +:10649000A0AB012F2983760337A86D69868F1780FB +:1064A0000E431E8E0F83FE0778F670D4485E844B31 +:1064B0005EC3F014D149DAA0F351AE6079BD96A461 +:1064C0004D9A0F717C09FC8438BE4AEA4D13BA9A82 +:1064D00010D73753F509F0B312E133073330354D98 +:1064E000CF1042F5830794F6DF7D81F6F7C07E3941 +:1064F0006E1936BA2394EECECBE1E9AC4EBABF6C3E +:10650000FA41964F44CF4C4E003B01FA54424C7E28 +:10651000097940E97323AC9BA233FA3C53B9A375C4 +:10652000CAC62BC0AF141DF51B85EB087DFACD162E +:10653000E0E724F445F1230FCCCC9046C46FFC6116 +:106540004677195C37DD4C6F45BD3B8DFB40E81F3E +:10655000817AA71EE4AD70EA41A4CD92ECFA94D6FC +:10656000A9221C0A9507A43E374F2A19B01F98E6A6 +:10657000E9B321EFD4DB9510C9F8E93AF5D7371024 +:10658000BB1EAE10A6F7C176385D3DB25D61BCB8EA +:10659000C65BE184F38CDB8514E3559BDE59B89D23 +:1065A000425E1578A2C87B183AB0E975543FDA23E9 +:1065B00051B9D955F18805F47D0B14D175ED256CD1 +:1065C000DD498BC7C157E40ACF4B3ED4D30CD64F1D +:1065D0008CE94F3E726906F747ECCCF4A900A7ABF3 +:1065E000CF92E4F781AE7C1549C4AFB7744FCC2E7F +:1065F0003F1495EA8F4023752BB07EFF796B2D09F0 +:10660000F4922A7D26D202A7AB7E8DC1971BE76646 +:10661000E4037DA934F9BD17E404EB5F33122C15B4 +:106620007459C7E8B8AF7E5984C0776D10F95070BF +:10663000E0B18C276AA7478BAC380FE6C9E8EE4E6D +:106640009A9E16740972281670D0A3A037D1FF58ED +:10665000F8C8E635F332D807EB62AA01FC76BD4CE8 +:10666000DA410EAC8B4D6D21337272DCE32963FC91 +:10667000B0448B67E810EB7E2137C946E171D651F3 +:1066800066AF37C0E966DB01903B24ED3D316CA37A +:106690001FF739F20D899E23CFA5FF984BE602DD47 +:1066A000BCA9B74532A3F4FFA7D47E1DE4BA38478E +:1066B000BACBC53CD613F28AAF04E669A99FA4F809 +:1066C0000C7834C49F989F52D2570AEBB37EF74F91 +:1066D00075071FE3FC6BBD428F9B0D23E177E393AE +:1066E0008E93C17144BB610A9F9D3FB8DA67FB1569 +:1066F0007C5019A1AF453C40B72D375893697EFDBA +:10670000A34B99DE41E701FC57C02FC615F3C88E95 +:10671000EF9A4FA1798C975FBFD9D2D30B02EC05CA +:10672000AF5199003A699DD6027245E8AB625D9619 +:106730002EEA29CD6747C8D297420C1DF045156651 +:10674000A4A75F7635C1FE6AF5F8F39E1FC6A29F27 +:10675000468F8B7E5A2E795FE8E7E3403F802FAE6D +:106760002F8BF9BBF1BDAEC58BFA48417CF3F662C5 +:10677000FD46D05FA17623E9648567761E3AE1FD88 +:106780000B7A11E3FCA3F08E451F9490508F9ECCA2 +:10679000E1ABA46295A09C63E78672D635A9AA38BE +:1067A00021819E6124F405703EA8698BE339E1DE06 +:1067B000E25F97AD32A0468B0E7244322748A7CFD6 +:1067C0003D7379E3E66F254B9497ED7682500BCDC0 +:1067D000DBE61DA87796D353452E5F9DEBAF88D39C +:1067E0003731E271BBDEBDD59B6EA34746D2E3597C +:1067F000DC1CA5F8D9EA4F1F862365CF968B9B5BDF +:10680000693E5045C80190FFCAA0067AC083A09C8B +:10681000029E9A5AD1BE11E272840C0F6A67D37D30 +:10682000A0CE56C8569ADD3B2C1395E6B7C594B456 +:106830000FCF24AD28EF831C36D1CFB6E13BB0DFBC +:106840002DF5077547FF3156DF2FFA37DA3F5363CF +:10685000EBFFED2902AE010DE41031EB101ED1FF6C +:1068600016AAEF9450B9102E53D2A00468C383A681 +:106870000E762D92B120D5EA4D02FC9F3445199D2C +:106880008D711EA1B486FA9D5267E1799EE6372389 +:10689000BDADE0E7AE1C3D7F0BE8D947CF114037D7 +:1068A000E21C21C61993FECEB41ED859E9FC6E2411 +:1068B0008138C8BD89AA297969BEB382C46FA67020 +:1068C0003C29257F04707857B47FA687E6A54B3B0B +:1068D000A70D53383A29A6504ECFF7A41F96385D1E +:1068E000D376B72526A1DEA84CA898980CE5F4FB32 +:1068F0004270F4A7C8AC5ADBB9B49FD207E8015480 +:10690000EFD3F2B50BC6D459B51368BFADC624FD9D +:106910005DF5BBCCD1EF599EE46F3C1347F64F08B1 +:10692000DB1F1EBAE8B09F02A10E3C0F04886DDF8A +:1069300054E7EAE5F69D337FCFAAB531C0437492A0 +:106940003953A2FBE1729964124D341F341F83FD49 +:1069500072899C6E0ED1FD14F599D77968F9755D31 +:1069600037366F83FC590499C795F20FA4CD14DE16 +:1069700028F0F40B28BFEADAB3D9AA67F807FDAC10 +:106980002F9549BF3205CEB3FB317DDBC3CE6BFF04 +:1069900007E81FCE9B0A3BDFF90D5ACFB6BF039421 +:1069A0009C51DFAAA3EDECFC36C6F893C2E9909E99 +:1069B000DB4EC3FA87DA0633C097041DE6EC15F503 +:1069C00091976DF2CD273BED155BB99D42E403DA5B +:1069D0002FAB403F13F981D4E12A80BB2F355CF502 +:1069E0000A1DE0D6D46B981F50F46638A758F39967 +:1069F000EE1C51985D59B46B923D388E484F9225EC +:106A0000C4043EADEF42F8436C4A44E988909B4A87 +:106A100020CFECFD215DF9AB9DCFB9E56785CCEDCD +:106A2000F85C7E863BFF5CF50AD003B7E787B97D4B +:106A30009B1CD9C9C611E775F9B9F8EAFA9C1C6D17 +:106A4000E47810ED42848E5B673FB7B0BCCCE9447C +:106A5000CCCB0DCF0CD929CFC7F24B88F15189A0EF +:106A600074A04FCFF25D86947AE5D5619BFD3B62C1 +:106A700052FC3BECD8741D6CE37F4E667454D4F822 +:106A80009AE3FB3DE16B90AE4F0D9F3DAADD09E817 +:106A900053B1E915408FF17A468F76B99BA397C31E +:106AA0004807DB801E902E183D0429FCD02E58E7A5 +:106AB0008457C0178E3BE1F61BAF39EA29705E00A0 +:106AC0003EBA82D941C94AE2E6B72B65E07324ADEC +:106AD000FD58023A6F477BD7E7641DFBBFC79B8C0D +:106AE000B5D3F9DE5A4CD7909EDB6EF55A6D09246A +:106AF000B213B165367EFF6399D969B2ED2E64FB9E +:106B0000FF772479B50CFCB63E16B2EFAF60DB0020 +:106B1000918C5CFD5E8E570AAFE5B1C1DB09F39C39 +:106B200038126E01A7976E5B985F74F94AE46FD9CB +:106B300079B639F5A46CFDAC1D39F139848BDBAB2A +:106B4000B27CBD91F275A4D303DA52DBFC6E6D1CEE +:106B50001F3FDFA69C40BE7B5BE8CDFD20D7ADB8D4 +:106B6000273EC500B9D0B0DFA0F96038DA603F3FFA +:106B7000CDD516F4CB36FE11AAA7FDD9D6F156E035 +:106B8000FBA3D07FC1F1A3EEF197B556E71FFF3EFF +:106B9000860FF206E099BBA9486FD95D8857373C4C +:106BA000A2DD1A4F72971D6E7F2DB38F8F9493279E +:106BB000B4A536BBD178E5A33BA5FC27017CB82B57 +:106BC000D4A0AFB6E1E509CE7FDEF4994F005C6E4C +:106BD000B8C72B3F0B8DDB13758EFB22A77F3AEED8 +:106BE0003330EE8BC087C0FF9328B282A0F72428F1 +:106BF0001F2E023F4CA6750DD0A3CB4E15E17A5A3D +:106C0000F7FC659FBC92EA1327E34A1CE95663FA36 +:106C100085325F4D5BA05F0C4826F32F99681F08F3 +:106C2000807D008F24CC3EB046EC97B8CD3E50031B +:106C3000E331FB801B1F05FD75DC2EBBBA891302F7 +:106C4000313EF11BBA9E57EFF7A2FE48FE466BDBC2 +:106C5000EC632FFF9ED917AFE6F6C62B48A2080AB1 +:106C60008F114F2BC07B8C1C2C9A65C3FB4999F963 +:106C7000E1A840457DDBA2FF019C570E781DFAF884 +:106C800055F738F36BC9B252D0DBD6DE4939164519 +:106C9000F9D52EBDE40F9C9F5C45DA7B81FE7BBC61 +:106CA000CCAEBD5AA7AA1995871BBEFB9539AB6818 +:106CB000FE6F32D317FE44E5B4E1CBC1754D28AD6C +:106CC00082FFF5F743B32EFD0081F6E9DEC9E087C8 +:106CD0002B667619373DACE973C23716FC6E7885A2 +:106CE000DDA8101CCA6EC94CE7D9F70145CAFA4F96 +:106CF000611E85E20B445CC1390AA30B6B01F038BD +:106D00009AFE369CEEC27DC9E20AC66A3F03DACF1C +:106D10007EF7ED1BC618BF3F3A98003E2EEC7C0173 +:106D20002D61322C31BEDD1F1BA3BC76F4F242F084 +:106D30002D2DD6D08F27E0A47AF187943C70BEED3C +:106D4000312F037AF601BE3165E744D493E93A6EF8 +:106D500052427D12EDCF1F1A427DD96F38CF959BDD +:106D6000E01FC00FEB08CA97609DB3DCAD3F2F5307 +:106D7000247E4EC9E03E2BC22D48532D9441F9D6B6 +:106D8000A4BC316CDBDF822EAE8F51BE32A130FF4E +:106D9000F210CD8033A7C6F985C4F3028E3707A45D +:106DA00056D82FD75315AAB3C1DEAF8AFD8EE01790 +:106DB0007FA3E573001F84B0737E3C06EBD9972256 +:106DC00018A7D1E54D7C1CE6DDF50B9958744A5D9A +:106DD000C5EDE827B32A8901FE5F5F6D2202F655F3 +:106DE000DF0B72D453CD9909C44D94B5EE82F3D420 +:106DF00015A044019D537608E74B5FC8324DBA1F7A +:106E00007AA95E520C7ED82F327F7F7328998476C0 +:106E100072ACCDEBA3ED7EF2E89A36C85F135BACA3 +:106E2000C0F97993C2FC26C7BEFED81C42E1EBFD37 +:106E3000669864503F4CAB706EBE6648463FCFFAD2 +:106E40006F8771FC6B1EBFEA9125809FEF5E68BC67 +:106E50008AFCB60BDB5FF3E4F2FF69F1F968743D7D +:106E6000BA3673BF99158F2DA74D37F8C86712A191 +:106E7000DCFC05FE346300E5E135BB8BD1DF98DD3A +:106E8000E70AAD4FDBFB68BA2C8F5CBA43617AFE30 +:106E90001B61B50DE09376EFBD1CE11BFC8417E68A +:106EA0002555B4933FC0787C7EB41ECA0BEB6B5261 +:106EB0007A0A2D7FE36B0FAA35E7C1B80FAAABD1D1 +:106EC000FFB019FB13706ABB7758C0DFB45ABD0618 +:106ED0008E4E0BBFFDCD2238E76EDA2D67E07C4E7B +:106EE00053B40BF90DA7FF83CA9F9044D77D23A706 +:106EF000CB8D431B90FF6F1CEC4739B7698F93EF25 +:106F000051BCA29D6FFD8B727C09E4BFF3D5228337 +:106F1000C2F3A7030F1701FEE938AB54BA7FBCBA1E +:106F2000735F40FFA74A46F647F509B46B6D1ADC5C +:106F3000C2C61BFAE81FC11EBAC9C55FFF04FF28FD +:106F40001B79BEF8BEE23A5FEC9E7046F6CFF5DFE5 +:106F50003CF98045C77DE3F13F3F007EFF6BFFE3D7 +:106F60007F3FF079D8D73FF4EB201F367DFD0F0F20 +:106F70007C8EE2F3D81E9F07E8E3F80FBEFAC8BD87 +:106F8000347FFC57D31A80351DE2FBFAF863EF9487 +:106F90001AB49F8E1F2C9A04F3EF7862E124328A90 +:106FA0007E779CD253DA6787278DEB68ECA1FD4D85 +:106FB000A2D9A778EA5A977D43FBAA00BE63877DD2 +:106FC00071D8A39BE837D8D71B07E97ACD60793809 +:106FD000276E7CF4163C278EC4B355EE89211F2AF8 +:106FE00007D7F0C6A1E51FBFB011526FDC80FEC805 +:106FF0000994B3EE769B5EA0EB797EE1F53B49FE0A +:10700000A6029FDCF4E81636EE205DBFA291EB7776 +:107010000CFE316FE4FABDE95ABF93E4DAFF762F34 +:10702000140E4DC86BFF11E7C30D4F5C32EA39F205 +:10703000B86BDF16C2F33A6E0FFC91627ABCB03FB8 +:107040001FFFC623F746619D7DF125B0EEDF3C5959 +:107050000587E6D7BC272E87FD78E2073E7D276DA2 +:1070600073CD0F5E44B97EFC89E75503E3A0A84ABF +:1070700049F5BFE324FB7700F4C18D3C0E61D3AE2C +:1070800070C657945BAF8DE9A5AD46117E47BFD85A +:10709000C634A3FF8DE9BD2BA43CEB7781B786F105 +:1070A000CF34B3DF6ED8F51B95190972EB2A35C1C1 +:1070B0007ABEB418BE175A4F317F1DE63FD7B6AE21 +:1070C000BBD8BE2DB43F8F3FE853402EBAD7F93816 +:1070D000B7A36C4A4B2FE65B77A1178D371E71B6AD +:1070E000D7B5AFD36766B71E7B3EE3C357ADD7C0F6 +:1070F0007EDD78DB5C46F933C8A922350D72AAD74C +:107100006BBC68017DFCD44B76D2265D45738891BB +:10711000C78EDA0DFAE1B45C5E0925D07FAD447507 +:107120003CC7B9E3B5BCF45861D8E0D97774DA2428 +:107130008803F47A987FB367EF3C027201D26A88C1 +:1071400057EA9C15AFB5D9A7E4581CFD9E6ACC68D8 +:10715000CED7BFDA3907EB67CF794DE2DCDCFEDA58 +:107160008334BF3D561A87734258FF566C2F81787F +:1071700089F19E9F2D0DCE697DA19BB59AC6DCF944 +:10718000B5CF28787EFEACD766CF749F73B68FFBE1 +:10719000FCCCC78FBAC72F787EEE82F16FE17134D5 +:1071A00023CE597A08ED1193F9BEFE9297C9814A10 +:1071B00092D94C98DE93D0ECFE91B6137BC1EEF8D9 +:1071C00095A5471E5C45C789906EF487506DA0F168 +:1071D000F4ACD1E8D9E90FF179987E44E2DC2F23B1 +:1071E00065F90C1B8FDBF1BEEA65E7090ACF63ABDB +:1071F000E93FEF9F3B2CC16067D121BD14BEEA156A +:10720000C6CD00CFD92B0F7C6D15D2C3BBF3CF6495 +:10721000E9C510F46239EC2C7DC6FB6317D8E3CDC9 +:107220009ECFF7C03AB9D7A76F9CF451685CB75DA1 +:10723000E027DEAC3DE227DE3CF68811FAF419C601 +:10724000B9DCBDBC88C5FF1C91D03FB4637911FA8D +:1072500033741288035FD143CC9F71631589534EF9 +:107260004ABC2BAC9F00BD3E29257F0DF36FFEADC0 +:10727000BF0CF4BC810BDBCF02FD2332C2FEC5EC98 +:107280000EB7825F43CAF935C66B073B53BFC6785A +:10729000ED5BA3F835FEEA9D3DB27FB75F430EDF9D +:1072A000897640FF38FD1AD109E64C290ECB70D7FC +:1072B000C2E762397F865F5DB790F93308FA2FC263 +:1072C000EA97BBC05F112D371F83FA77F4DEBD103C +:1072D000FC83D1B359F99FA11CF46FC5B460FFC7FB +:1072E0007D06F35B24D597409E6B063BB7529D6BA2 +:1072F00018F4396137D5DA92191E4F39419D8DF650 +:10730000248C2753632C9E721104C0D3757BD32029 +:10731000481785F0792FC44F4E017B33F35368EB48 +:10732000C800C8E7DE948E71955B5331FCBE3D65A5 +:1073300062FA339230603CCD60F158F770BB4A97E7 +:107340004AD6417A90CBF3ED2ADB67B994D959F646 +:107350001DFD496C0DC0150AA01E5A08AEBE545D35 +:107360001CC61F48C531BD27D584E97669D800BF42 +:10737000EA1CB5AC4BA3780CC9076290EF55AABACA +:107380005A68BE88F339D99811576CFCB14965FB2E +:107390004F8BF7A29EA499B47C02B427ED8379E8C1 +:1073A000ED83B9FA18B7A2E9ACFEAD9CAFBBEB2FE9 +:1073B000E2F5B7ED7D07E576C42412E047A7F211A8 +:1073C000E0D8B6D72F819ED7EB25CDB0BF6E9F42B8 +:1073D000E220E7FD9DF5BCFC755243DB7D94E3ABF9 +:1073E000A84597601D8B3B1BB1BCD76F7C32219C9D +:1073F0003A18F7CBE2227B81081A21EED7D87933ED +:10740000CD7F8AB70FC72839D0CD1CEBFC20B657EB +:107410001AAD033C2EFC53B07EE429B75D9CD9C362 +:10742000CBB91DBDBC2E64823E565E5FBA00F4CD62 +:10743000F2F839182F505E115A85F9BAD23590BF3B +:10744000573A90588876310FC67197D7D55DC9CA1B +:107450002FB80ACA6F528B119E50436B1DDA8FB33F +:107460007EF003E8AF264DAD1E8043E7BCF056B377 +:10747000264246E12B28F904DFC47D19005B8A2DE2 +:107480005FE2CA4F76D5AF71959FE32A6F70E43BF8 +:1074900039BE49A3CAECD7FA64B4D30E087FFA897F +:1074A000C90C7E3FCBEF2DFA93F65288A576BFE04C +:1074B000F631E6759BCAF67D39D5D7884D8F255AAA +:1074C00020074F0DE20DED2A9AD262813F3ECB2F6D +:1074D0001A29BF98E1E01796DDCF62E3175F5627C0 +:1074E000BE7B7EB185F3897ECE377E46920F417F8B +:1074F0001AC47F17D9F9427C1DF0C39FF55EB950BD +:1075000099877C01FDB7C4BAB20BCE3D18C74AF3C8 +:107510005FEBFDE442E08F422FEDE7FB6B0BDD2FCD +:10752000B01F20AD0E8FD44BF518D96CD74BC57753 +:107530009B3E3ABE759BF257EDA57A96BE0CFE397E +:10754000CE176E83751B451EF5527C90690C1F90FB +:10755000FA6A03269CCB025CBFF6D5952E80BCA8A8 +:10756000FF1CAC33C41DC69CEB1CAAB7AD33B1AD38 +:10757000336971CA05D73A53BC45006FA519CA5F74 +:10758000F29C17D4CEE96CFF53FC41AA537C01FE58 +:10759000051FF1EAFA83605FBB73F9C6CD5E88838D +:1075A0009F503213F0F932E7D764D0C92744BF9413 +:1075B0008FBC8C7227DA4E982AC9FC67140E62D2EF +:1075C0007E8A2A48DA4FFB2D6A3A409261D0FF0F3B +:1075D000581057ABC4A8C607FC86F345312F95F366 +:1075E000418F660AFA4D92FCF2EE2FF9E49D5B0E94 +:1075F0000938EB7C8C2F8B14FCF5C3A3EC43E1AF73 +:1076000017780DD4C5A57CFA4A2FC8255AEF0E2E3F +:10761000EFFA403E41FEE97708D0ABCFC7F017A99B +:107620003841C04E1951E2D520A7ACEE2D0B414E8A +:10763000DDE167ED447DD16FC4C7EC7C910AB64EA5 +:10764000EE7127F8187F9FC0E59CBBBC82972B4B3F +:10765000D87D1965491FCA2FA582D18D62B0FB5311 +:107660002433C2FF5BE143FF6F7B6657754E1E8874 +:10767000F9DDF1F4AFF07C18AE68C7F8F85A8ECF98 +:10768000DC3C7879E301B28AD76B463AA3744CE7C5 +:1076900037DDC7E91EE4D9048853FD20A6674AE711 +:1076A000711FF3E7F838DFF3F1FAABBCE64C9FCD7E +:1076B000FFD19BB8367125D097C6EF376A45561073 +:1076C0008CE6BB46C4CB5DE09B88FE6E4BAACEF930 +:1076D0008547DE3F73C707259A313E28CAF469AA59 +:1076E000472F84F17D8902F14186538FEE73E9D1F2 +:1076F000E33DE79CA91E3DDE73CC287AF4677C67E6 +:10770000101FE40FB5C4D69277A1479F6FFEC50343 +:107710007A347976E173101734CD7C0CF2A1E8F756 +:1077200016B6821E3D8BCB0DF2DC42D847D1B90490 +:10773000457ABBEFE7A8579FD6CCEB00BE874099B0 +:1077400084F54C9826DEC5DC959F6F89D43B89C5AE +:107750000974175FAA63BC808B5EB6707A75C70B1D +:10776000BC57FDE78943E8F7D9E210FE59F3E9F188 +:107770009B5F76E06F9C7114741F3D84FBC8751F7E +:107780002A4BFF75C2EF9F76F8FDB7D6BDEF76A006 +:10779000213BDDBACFDB5BC7E9FF7F1776A0671817 +:1077A0005F22038037958BDCEEE2B563C551FCDCCC +:1077B0000EB71A73C551FC93ED25BFF565ED16BFE5 +:1077C000F5E5B15BBC5FF69263B9718FE51BB7500D +:1077D000BC42A83A9E40BDAFCC43004FBDF3E3038B +:1077E000C0777B2B3DEACDD5B97B0C629CA9DAD959 +:1077F000D8AE3BA67AC03EDDBD7F11FA5F7ABDED03 +:10780000ADE8AF2CF6E83BAB47C21DD5989C963B44 +:1078100083B3768D6287935526A7BBF5A711AEE09B +:10782000CC6831DC9FEBDAFB5FF7CB708E8B955623 +:10783000839ED4A0717D8B22F3F7367F2EE574AD45 +:1078400000BF5CE1212037E4CE221C6F2CF8882693 +:1078500071F8FCB3768DE2077EAFE113788C80D3AC +:107860000BC70FE1F802AFDDF50AFA31BC7038A0A2 +:10787000EBE61DF6B17BDC710FDEE753EA3DE8670E +:10788000147A25E52F710DC61D72EA2B7288DDA7CB +:10789000F9BF3E766F57F6B7E3FE14F71742490576 +:1078A000E55430C9E455162F9C4E825E8B60FC7205 +:1078B00048417FAFCAE942BE309380F90CCCACF5A9 +:1078C00000BD74723CF699745EE7D394CF6380C7B1 +:1078D000BF8971A84674F74AF09F9A350D60EF5E34 +:1078E000C3DB692484FC53033CCC827B789B491521 +:1078F00085FF628DFB276A480DD0EFF5CDD75F0479 +:107900007AB16658BE7C7E8E91FC88F8017EB9D92A +:10791000E3AF85FB6B33193F22B1C631FC1CCCEFC2 +:10792000ABD4B3FB93621D04DEC57A78E1BE0EDCF6 +:10793000C333D97DD5AC9E1F63F8CDDEC37A34FF47 +:10794000BAD0D3E19695927DFE45480762FE576B0B +:107950003CCEF4FFD1FC3F01BC04F8F3BEE977AFA5 +:10796000A453F29B9E38C6BAD552FAB69DB783216E +:1079700005FD6B828EB4E11D994A3ACEE67F15F87B +:107980006367662716FEE00ABE4E845CE7B8375888 +:1079900001F74267E4EC00FE2504FD52E5758C4ECC +:1079A0002AEA6EBECE3383C703D221272C02C51923 +:1079B000CB916E44FBF276E73B22C1B8335FCCE358 +:1079C000902710DB773A4EB1B8BFCBEF1B8AEFC2DE +:1079D000EFA7BAF8B648DD7EBF21CD19BF7CA6F16E +:1079E000C2EB88F97DCD86CFAE1AE2782FC08DCF5D +:1079F00052C3C27B1093E0BE37D821E693788680CD +:107A0000F52989FE32D2C4E2C414EE1F16ED7F9A26 +:107A1000E50B6FE13D61950CE33D0AF77A8875E867 +:107A2000AB25FCDE87192A9B93BB47DEC7D7C15F16 +:107A300046301EB098DFEB252D1C7F1291807E8B87 +:107A4000E63BF1AF72FC97F0F879BF0BDF2A5F07D6 +:107A5000D5F5FD0D8D9D2BC7EB877D55F0B9300910 +:107A60003BDE85D1F3DFCFC8BE0723E8769CE3BDBC +:107A700025C60BD1F1CE7E17E315A837723F39D753 +:107A80006B315FAFAD86582FB204D6AB8CEFB7AD7C +:107A90008D6CBDB432B66FCAF87E2157B0F5D1E80F +:107AA0007FB05E93DA9CEBA5B9F649A1F511F7A575 +:107AB0007FA425A27ED43B0D09DF57B92288762FFB +:107AC0002D4B574FED55292CFD1504EDEF29BFC166 +:107AD000ECD6571F46D3EAE49A9DCC2E0B39DA4EEA +:107AE000E5F6B2FED8B251ED9722CE6900DEE599F7 +:107AF00056B89EAE269310E724E2A0CA3A0CD49B57 +:107B00007593E1A762BEB113E6B2C22FF1B846E2A7 +:107B1000B8A78C3BA1145F27C0BF8A06D6AEB79A20 +:107B2000A4C1FE1DEB607A04CDA33D28D2A164BCA4 +:107B3000341F8B2F7E1DCF318A45406F8E5DE1C48F +:107B400073A4FDD9360983EB6C78A5F41A314E5C29 +:107B50008EEB345F75C4D1169ADF99A6DB29BE5E21 +:107B60009E62A7AB742BE85BDA0B32C6D56A263D62 +:107B7000E5A29F422F85F135331EC274B8B995E551 +:107B8000135BA1BC9DAF9F56CBE454F188F8ACFCCD +:107B9000F88BC03FE0FE03C78B8023E2E6BF2E7C5C +:107BA000B8F3FF281EFA5C7810FBE4640749933CA5 +:107BB0007AAD482B4F292443F5A9F0FCC13EDC5790 +:107BC000F51E02EBAFCD67F753EEBDFA97185FA134 +:107BD0001ABA24DBECD95FF0333D5685F71C802FB1 +:107BE0002886B43C6C2F67F1C83FD2CC9BFC682F31 +:107BF0007C4A037B4E58C9B4C1FE0E537906FC364D +:107C0000BC4E65EF4184EE74F08B72BFD7111F91AB +:107C1000E5173132ECB19D03855CF89296ECF74F95 +:107C2000CCDD2F5263EC1C2DEC94C22EEE9EFF4057 +:107C30006A10ED94607F86F4FE1489837E31C8DF7C +:107C400043A900AF18C8E598AE039D54C48C1296A2 +:107C50008F9740FE11F0EF4D817751987FEFDE94C2 +:107C600081E9D75375D87E772A8EF95DA926CCEFA6 +:107C700004FF1F4DD3A9564C9F4C25B07C28D586B8 +:107C8000E9E3A9247EFF566A1DA68FA6DAB9DFB004 +:107C900013F3DB5216F727F6E1F7BED400E6F7A49C +:107CA000EEE1EFB8A431BD3DB59BC3BFA45542B8CA +:107CB00003E807AD6CA7F3B39FFFAEF0A3FDBE983A +:107CC000F3A7678EFA24782FED7ECED7EE6F199D3D +:107CD0005FCDCC38F7C9B47B9CEF389CD5E97CCF1D +:107CE000AA7CDD6447FD7377D738CAA7A7CF719404 +:107CF0004F196870E4CFEEBBC051BFDA5AE0C8CF6D +:107D00003DFC6147FDD9079639F2B3F67FCA51FFB2 +:107D1000FC3DAB1DE5E70D5EE3E4674DD73BF2E1CB +:107D2000F8E71CF5D5DB33C8878B63A4C4A0E79ABA +:107D3000E216B6EF7A8A19FF7D9DF35F4A475172CA +:107D40003ED68B01D3F0B65B684FF6B610B4CFD2F7 +:107D5000F2C9F05D89B1773B6839FA579523B7606E +:107D60003DDB39EE75A073F29CF3BC20EC452AF79D +:107D70009780611AEE57134DC17AF72BACDE693F3D +:107D80005E6EC8DEFB237105ED51153C8E45AC6B74 +:107D9000A89DBD9B91BD6F16A06512C6593BEEBD57 +:107DA000F90D677EDEB0335F9674E627B43AF32AA6 +:107DB000F70F1145C178D6F00B67E3B98FF0FBCD13 +:107DC000E25EDC590149BC073117EE7509F8358AC6 +:107DD000771DE44A23BBF72AF43A8DEE5703F83BAC +:107DE000DDA790865AE87C306F44753AAFF0918BEE +:107DF000F6437C9FB8CFE73768BF763F52E3E8F39E +:107E000074EB4B9303EF4E5F3E633D89DF0F81635D +:107E10003AFEF138710C41A6FA99B75249001F8D0C +:107E20003712F3419A562819E93ADBBE8D0718BF7D +:107E30007E2960605A467634A33EA724CBE0DED983 +:107E40005DDC3F51D6D1FEBB2FC0D1A962B223AEBB +:107E5000BA8DE3FFE9AA00EA679F5DCAF4B303B1F4 +:107E6000D503CDB06EAD8C5F84A30A81F8E7F061D5 +:107E70001FCA1DD26860DC4C149E28A3D9D752A417 +:107E8000E18A29703F43C3F48D948EE9BEAA0FEFB7 +:107E9000FD10AD747D65C880F392F72CA607DE5205 +:107EA000ACE2387FAD5C8B7135BE547B0CF6DBF1F8 +:107EB000540CDBDDB2773AC603F8CC731D7E4D4A15 +:107EC0001E323D3B50B80E607CBB6F9F1FE558587B +:107ED0005777FA6D72ACDB9B2CC3F7D33EA9E2391E +:107EE000A3AC714002BFCC0E3FD37B6E09B4D74127 +:107EF0005CFC2D35E4334BF3F0C1D901AECF134D0B +:107F0000564BF13C807FF1D681E62290C1579038E4 +:107F10003C1BE5EDB164CCCFD607C1BF5FA10D34EA +:107F2000839E5271856E7419509FBD8B24D6C7EB0A +:107F30002789C742508FADE36F03CC3E539618C0DC +:107F40007888AE27985FED99A39FD041AEBE19AD5A +:107F5000453E7DEC499F0976A36325EC3DA8634F20 +:107F6000CE7D16F8CA9F53FB4BECF7678F7DEBF97C +:107F7000395EBA20C71E7F7E8E82449476C8DB0DA0 +:107F8000A70FCD01BB0C65AF75705F7193AE128CFE +:107F90003B853DC0E685F6E8BB4AD55EE8BF7492F6 +:107FA000673BA4915035F623EE851092AC463BB664 +:107FB000C2DBEDF762BBAE9F06B0BFEBA70CEE03D2 +:107FC000BC5CBF48C77791BA8A8DAE10D885ABD953 +:107FD000B9EFFA8B2D5F15941F9D84E5C5DA21BC9E +:107FE000F7AB66DA6159C90EC994C3B07ED309C62E +:107FF0004D08FBC0DBD5A4AE9AF25B65E120DAD573 +:108000004E843D04E285FB15B60EFDF45C497716FF +:1080100089BC42361719701FA57DC74AD4D3D8FB37 +:10802000A0D52116E72BFC349B8FDE386D343D4202 +:10803000A43FE4FAC3D3290DD33D293D5E4BF77924 +:108040002615C3FC1D2903F3F7A6EA30DF9F8A63D8 +:108050002AEEA54CE4FB7907F7C3961B1E13E2BE7C +:10806000272A4483FB56E5477ED2067CAB9C4E39DB +:108070004275F6F9FCFD2E4AEF12B49FAF337E79BC +:108080006154417BD38531F6DE8FE01F825FCC7F68 +:108090008BEA8B0EBB39CDD7F179D08D3FF15A6782 +:1080A000F90EEF209E77AC8B199EDDEDC31CBE123E +:1080B000AA4ECA0D23FBA3FCC1517FC0F058DEF3CA +:1080C000C7AFE7DE077AAEED1EF05D1BE86C291D39 +:1080D000DDC5E31DEEDB3027B2DAB63EF7BBF4E2D6 +:1080E000FBAF9B1381FB6A775D470C3D62EB87B763 +:1080F000BF3FB5BFB4650ADFC4B03F3B985F5FD4F4 +:10810000ABB0D83D8FACFED8AEB4EEC4731EE5A3C1 +:10811000E7E1FD38FE5847C922733EF68BF9A3818B +:108120008645E0672BEB60FBB72C54DD8DACBF912F +:108130000CCA9CEF204173BE8EFA2DC5DB8FCC920A +:10814000161DF04EEB01586A63922CA0FD7CA8B975 +:1081500061AF82FCC4F9FD879207E12B8B0D480BC0 +:1081600068BA3690381E003B654953D7B769FDB7EA +:10817000867C068C77EFD3EF60BC7CF73BAA06FBCE +:10818000B0ECA997308EBE5B1A56C194A907FB16B6 +:1081900041BC09E58FD3C1DFAE074B7B152AA7EEA3 +:1081A0002A4A7E8DA00CEA5BF40C3D3C96FA86EFE1 +:1081B00083FA8120B15AE97C7FE81DFE3408E1167C +:1081C000D2DDA355617939C4EB49B4BFBE0A5A0E5A +:1081D0007B0CE35736F798902F6679BDDFEA813B39 +:1081E000FAC120E37324C4F84636AFD37C9EB80CA2 +:1081F0009166EB29AC1ED1582AE6B961DF3BCF96D8 +:10820000C33D8BA7A441B0BD953D453907ACC79E82 +:108210001D1897B027B55FEF16EB2EF04F59C03CF5 +:1082200088FFA1EDD4B494AE91F0A881EFFE94D56F +:108230009BC66658BFB4370EF1133785987C9C37C0 +:108240004CFBB1EB430A7FC7A8C07B4768D780755A +:10825000DCC6FC517B9AACE00C9A5FBFAAB66133D6 +:108260005DA73DE69DCDF06E49F7F7AAF1BECB2B99 +:1082700041364E567FE3F1386F8873298FC7B99620 +:108280005F38F6DECCE8757DF5606903FA29D9FD23 +:10829000A8F5C53C5FECCC0BBEB347B78A4B687EF4 +:1082A000E39E1D5520B8379281CBE11E0E794E26F4 +:1082B000B0FF5FDF3B2FF2019ADF40F37074DE30D6 +:1082C00034F3C3308F0DDB3C1E00F1220EE7C621D4 +:1082D0004A5721388F50807D309F8173154A0FDBBC +:1082E000B62D58ECBF9090EFD598BA87D2C0EED09B +:1082F000477B35C8ABFA743213F22B7A81FED65F16 +:10830000ECE1FB69C5B3662DBF8743F317F57FB971 +:1083100007E23D1BDB343CD7947A12E83F24073D4B +:108320002837C0E4319FE25D2EEE463FE3FFEAF1DD +:10833000A07E026E6FB89FD3A890FD0A4DEF52D970 +:108340003A5ABD0AB6A3DFFBBC25B02EF17D2087CB +:10835000481FE377B39FF2AD82F35E63BB7935DAF2 +:1083600007F5F9A8375791EC1FC67F9F4518FF9D69 +:10837000AB936685D63B19AC46BA6C6CBB743DB406 +:108380003B7BD58A9F9906BCC398B6D00FF92B26A4 +:10839000E702FDEC1D57F9F9507C33FD3CE45970C0 +:1083A0002EC8FD213F5B3FB938D9FF73F00F15D7B9 +:1083B000122C2F4EFE19EE0D9D98A819E0B7EA1E5B +:1083C000F658BE0894C77558C710F011F4F71F5C33 +:1083D00064027F5393D7C13EDD153CD8A3CD43BC87 +:1083E0009FAD51BC3FD4FF7C8F5649FBDB6C96EBB5 +:1083F000B6FCDCBF53AE8DFBF479DCA74AF1EDEBA4 +:1084000061DFD3F21F831FE97B259CCFF1F2C61AEF +:10841000C1F7A8DE4EF52E7933DFE7E060A572A044 +:10842000D156BF85EE73EF02566ED1F1802F52AD5B +:1084300092D0A3229D17B16498D77425BD5362F7DB +:1084400020E17ED56279E547CEA3DF7D5358684BA6 +:10845000A098F1E740B181765B8A278C0B39F18BCC +:10846000501AF011286E1FF04179652DDE930CA68D +:10847000593F90C2FA07F97D53495F8AE71A7F9DF9 +:10848000F31D239FEBDD2285B0FBE68AEBFB03D5D2 +:10849000E6DE4ADABE737829F291FB82DC6E5AC9B5 +:1084A000FC193726AC8BE0EACA39270617803A5404 +:1084B0007FEAC0D390CE207F59006C34AE15EF8395 +:1084C000F4912023DA067DE64264894D83FBD04C8B +:1084D000640C97011F9B2DA7BBE03C19993F28C353 +:1084E00038932EAB1DA7DF3F837129DB421E7CAF83 +:1084F000B52BF4B8BECAD67E7348F825193FF17281 +:108500003DA2930C20FFA16BCFDED1E3FCC5CB0FC6 +:108510005AD977BAF5B80EF7F89AC38DA8971EE521 +:10852000FB5FDE3BEFE3703E50814FD0FAF7FB99E3 +:108530005DFF44191984B85D2566128CA3E3F1AB85 +:108540001D7C5CC12F7A531A31A711F2C4C7A662F1 +:10855000FCEC131F2B5D00E7B7DBABC4BBDC27547F +:10856000F11E24DE9FC81C924ED373D8775B3D600A +:10857000C6220F29E68BE5B0BF0F78916FDD51EC75 +:1085800094DFED21E67FFE2E8797CA6FE487B7A4BC +:10859000D8FD40F55490A4A9BEB98CF3775FF20AD8 +:1085A000A4331F957DF04EA8462C0BF02AF0A05561 +:1085B0007848DA7EBE3D5584EDBF1B64E3083F7DFD +:1085C000A1B8852E0ECF48BF7C2BAE4B47765D18E9 +:1085D000FFEF089B93804F7F6F0183DB4D077F097F +:1085E000723BDD2909E110DF4F727A539524BEDF1B +:1085F000A39E52B05CCC57D4CB95B3791CD735FE33 +:108600004E33DBAFEA1E99E99731E584FDFE7490A5 +:10861000BF931274DDEB1E398FF801887324B58C7B +:10862000CF8EDC8716EA41629E3EC359EE8E83CA26 +:10863000C27D6A82631E8F8C986F2996833CC1FB32 +:108640009A0AF932D8C936F0389F0D32A52B0A7F25 +:10865000FF33830918FFB838FF3CC5DE83DB30F4F5 +:10866000208F37321CEFA36DDC731DC6996C7A2501 +:10867000647968FD8DC09729BEFAF78CB84F9F29A1 +:108680003772F58FC25A833FBDF31B73E15EF85B0F +:10869000FABA32D03F820AE373A44D43FD60879F4C +:1086A0009D87ACA3D3985F8CFE8FBD7BC8EA05E3A2 +:1086B000C64ED057BFC4CFA53AF44BE7DDED370F18 +:1086C00033BD8D984A0CE267047FEEEB01F97C978D +:1086D0004AB2FC1AE267EF0AB0FC92505F4F37D300 +:1086E00013907FEBC1EA5ED0D37AFC225FD16B5549 +:1086F00040FBF83E38CF5A4FFA0C8093B637619F53 +:108700005B9FAAC3F35E7735990CF87BA658657119 +:10871000F64FF876C2397F6D20190CDACE9DC78AE4 +:108720007F5905FB394F7F96A3BFCAF1F547C71F95 +:10873000F29C9F2B7FA678CE3E99B5437B03A93848 +:1087400050B58AE64B9FF4A1DFE07EAF934F88746B +:108750004D88E115EE75D8EF0FABC017803E493B51 +:10876000F2035FACC4C107047F504F9593B42D8EC4 +:10877000E228D70F72745985E5DFE5F4D09B32C645 +:1087800018A7A6C038E78E31CE0CC738C0C1B3EFEA +:10879000D18EE28F70DF3F73F353910A7EFA3CEF84 +:1087A000FFB0944C8568FE9AE1C1C5C02E9616B7FD +:1087B00056829FAC2AC8E2519B76EFD807EAC15C8B +:1087C0002DF15870228B9F827DF1A62FF1B23D3F93 +:1087D000DE7DB53B24E637827FB27DC5ED181DE115 +:1087E000F88721DF716B8D6E8DE22F71F3C78B4699 +:1087F000F015C627DFBBF164C73A8E1C4FC5F29C4B +:108800003C4C12FB7D10317E479989F136B67D6E66 +:10881000C23E87B7E3B9DE66015FB843945B57F6A3 +:10882000829EF63D35570E7A5DA92FD71EDEDDBA42 +:108830002320EAB7F7B654E4A91F74D5AF11F53F6A +:108840008FFDBBE1117C07F2A0372A7FF765F54A5F +:10885000806F87C7D55F89E8AF17C717E78559FDD0 +:108860003B9EB56A813E079A41FE9FB892183B092C +:10887000E803F140DC262767713A554FF91D78CEA1 +:10888000E13784DF49CCB99E1D472F1AF57D813F22 +:10889000A69CEF0B5C95ECC0FBCDB3F8FAADA30042 +:1088A00043FFEBEE971DFBF7DFF0FEABC03BBD8057 +:1088B0001E54CFF6F7BF1CBC6505E0ADF8A7C2DBC0 +:1088C00001FB9796DF14607C7791DEBE17EEC32C18 +:1088D00032A438FC86CC225AD74FF7EC4510AB4176 +:1088E000D3450AB142A8BFA4D9BD129A077BC9C714 +:1088F000FFFED9573E84EFDF981EFBBBAB7288C5E5 +:108900004B6FA95D36AA7FC5FDFB46EEF2207F8F37 +:1089100078C7F91B09DC535243566C19EDEFD3614C +:1089200026DFF756AF8D815DFDEEF3B7C7E03CD390 +:108930005B7D690CF86ACFC45E623F776915CC6EC7 +:10894000EFEE3F13E67117A72E62E7250EFF96287C +:108950003B7FB9EB8B78B42DDA009ED3DEAFF9DD27 +:10896000C8E1FA47E737B188E1698BC6E3B98DF70B +:108970000ADECB11DEBBCFBF1CDF63E89D38B50636 +:10898000F4B3ED1C6E517FEFC44B11EE9EB2B531C6 +:108990008C332EBBD4F1BEBFB782E47DE7EB8302FC +:1089A0006EFD9F03F72363C2BD96E41B5F2D00FF9E +:1089B0005502FE988574F27EC3FFC3F718FE3FF39D +:1089C000FE168799BD768BE1A47750173E585278F2 +:1089D000DF8CF5FB59A4D6F09CC9EF38BC966271C8 +:1089E0005663EDB33738FEFEC4F1776D5A46BFCA01 +:1089F000BA5A16CF3BD678EBBC56E96871FD57A73B +:108A000065C77CC682675598F9A5360C3ADBADDFA1 +:108A10001D74FD6E9885F8ED336ED7C0CE78B2D652 +:108A200083B16D02BF23E8E03DC6EB58745910AF27 +:108A3000068B3B7BAFF13A163C8BC306E26B2CBC3A +:108A4000BAE9F4FDC6E3FF6FF47963D83823FA146A +:108A5000EBF16F7ACC5F7FFBBFF1F89EE0F19133D1 +:108A6000C4A3E097BBF9BDE7695FE9387831E59BBE +:108A7000875A67CDC2F79A14F3BCE5E711F2F322E7 +:108A800016D7388DDB71DDE3FD9CCBE783AD0B376B +:108A900060FC6522887CF7054FFCE78D60B75B269C +:108AA000A39DD3DDEE20C7EF378A8AB9FDD70CCF5F +:108AB000A6ED97FD42C678A842F323ADB2239E16D9 +:108AC0003C298E385317BE0F12E3D646B0A32DC9EA +:108AD0000F8758E71712CBDFDD3A27E4F7659DC70C +:108AE00082E7DEA29A33E2DFE29C1125D9DF8B39DF +:108AF00087FD7EA6E1053FCBB2233E8CBF7B113EB6 +:108B0000CDC3775A7E5144FB5DD63A93FDAE9BF8B8 +:108B1000DD4685603CD19ADBA7A3BD95AC5C8EF5A4 +:108B20008F1639F5A5EC3A09FAE2BFD33669A5E507 +:108B30005D659B4F6D84FB5F48B212E01952CD73A7 +:108B4000BF49FB3FF8315F1CCE7DBEE54BFAC394B5 +:108B50007E5EB8A458B2BFF7728AD3DB9C954C4FA7 +:108B60001F3A9CF07A6CFAFAC408F75B2C5F72D952 +:108B7000701EFCBDC5DB5F9294781CAF59697F877E +:108B8000BC2AE22C77B7F7468AB0FC8502EFB91011 +:108B9000DEBE6DC5E8EDC9CA09DC196E4EB5FF1E13 +:108BA0009A1B7F3B8A92FE089DCF2FA5E4576E004B +:108BB0003A6ED6908E8962CC00B8051EE839B30FA4 +:108BC0007E1A54ACD3C7CBEBD93A7178C478E0E2C3 +:108BD00005BF60A3C9FCC5253C4E69EE367F7A33DC +:108BE000FA2BF8EFAA2A14AE308E5F169958787CCB +:108BF000D16F54211995F61BF09953C13EE99E8718 +:108C0000A877E89D851F01F8860E7AF49BAB47CEC6 +:108C1000DFCD97A6DEE3A49B799C6EA2D938CA6407 +:108C2000659BADFDAC881FE11F2F3DBD067B98A65F +:108C300053EF4C7A0D3AEEA5FC7713A0FF65B6FE14 +:108C40005FE2F45E1F211C0E2B700ED8395F64FCAE +:108C500065F7CE6B2AF3EDDB83FC7EC3CB45750E47 +:108C6000FFC9F225337BE0A73D29BD9401FB1A3AE9 +:108C70007801B6BF848FBF5B4D56CE0CC17C8C0D86 +:108C800060773ED379087C17E4A31CCFB07FE05C0B +:108C900053CFE9F592157B3D1B42F03B306CDFBEB4 +:108CA000C4F98268771BDF5F14AE2E7F9C902B2265 +:108CB000DFBAA5AF0EF739DA25BB238FDF02FE6DD1 +:108CC000D2CDC69FBAE22F1D60F71E52595CC92F44 +:108CD000B684F1BE05A557871D24BAE2ED14C40B76 +:108CE000AC56E353D9A3E08C3FFD8C24D701FD0B98 +:108CF0003E35822F752F17BF673975599E7819F148 +:108D00000EA4A0A7DDE9659135B6F549475407FFE4 +:108D10003AC4F9FC2F5DE7C74F1C66E73B3A0FF4F6 +:108D200087FEFAC2CA07611ED1756FA7201E37CD14 +:108D3000E9F264BAE6497C6084CF5FCC73F5CE0B70 +:108D4000A6C2F7154B64D73D0BB6DF2E690B3ABFB1 +:108D5000F3F675B2B91EEDE81F617E21D15FB495BF +:108D6000E26B06CC2B7173B83A876781CFD53E632F +:108D70006DF6779328BC6B76861EC47728BA866F0B +:108D8000003A7A2B948894D8F8D77D11271F17F2D0 +:108D900019EA81DC5AA618DE7CF26B79AB9C176E5F +:108DA000D5177F95E4F1AB64F9814B5EEA9E012F04 +:108DB000D46F23ED98BE209FC0F4085F0FD1FE084A +:108DC000C984E7825ED12AA33FF048FB728C7F5BA7 +:108DD000E91D0C37D0F4093E8FDF74C8787E16F297 +:108DE000DD3DDE65D7CAD62728BDADE4727CE5B58A +:108DF000CCAF7B59BB733EBBD5F68317C3785F649A +:108E0000E31DA2E4D28441AF4CAFF85DBA64E656EC +:108E1000F80EB807FEB82C287ED7077FEF33C9FEBF +:108E2000497ED5BAE6C71017F13F222C5EF450EB0D +:108E30009AC5E052BCEA1EF2C36103F4A7D1E57DF6 +:108E4000F226D921D7A7DEE9FCFDBE396D12BB574A +:108E5000A2642A2FB7F1AB692541C4F7A52BA4BCA6 +:108E600076ADA9E064A6E587FE435E974FBF9B5FA2 +:108E7000C2E5E13DF9DBCF2F09B3F2FBF3CBBB9E9B +:108E8000E22097278328E72F69CBDFCF5775261776 +:108E90008F6CF8E365E09F7DC1E37C8FE75E9DAD5D +:108EA000EB4D3ADB6787767EAEB70CD665A3A4C3DD +:108EB000FDD7D5130CE41B9FBE7626C6A5DCA033D8 +:108EC000B83F104E9C00FEB1F6F0F5CF42FDA195E3 +:108ED000242E19397EE086E35484C52308F942E53F +:108EE000DA2B20D7A2F03B6EC0AF9474FC936CCA0F +:108EF00056A404D6DDBA06DFCBDE19D0D9BA53BDED +:108F000097564EBEE8D463150E8FC8FF274C0C89C8 +:108F100077008000000000001F8B080000000000A8 +:108F2000000BE57D0B7854D5B5F03E73CE3C924CEA +:108F300092996466F20E338447800093002128C220 +:108F40002421124AAA934020BC74781883841015F7 +:108F50007BE9AD2D270430E02B5ACBA54AEB244505 +:108F60008B8F6AA0698B4AE980A0D4D6DBC8A36244 +:108F7000451D5A44408568F54AEF47F5DF6BEDBD66 +:108F800033734E1202D67BFFEFFB7FFAF5DBEE392F +:108F9000FBB1F67AAFB51F09DC2D939085E0BFAF2A +:108FA000E8FF6FDD1AA7A993216E032924E42EFEA2 +:108FB000DB7BC4BB923808512BE26C4F7868FD6EA6 +:108FC000393495D6DFAA886B9369FD2BF8379590D5 +:108FD000336B090999093952316E25194FC8E715C4 +:108FE0007106598A7CD7971F41FBE1849C5B6BC15A +:108FF0007EF54159358F21A4AE82957A38F4FDEB88 +:109000008CAACB66ED7FFCE541BACEDCC8BA8E54A3 +:10901000CC4A0C5801FE71F14BFAE837C64617E30B +:1090200024646587B6DF8A1D5AFCBC77371BA7BF4F +:1090300079DFE3EB3ACDD775D440EA3AF268E99F9D +:1090400095B8242FD26EA24DC2F944BD669976DE42 +:10905000390BB5F31EF952AEEBB0C238CDB18BADC2 +:10906000F0AB77983F9E901D303ED4D78F2364524B +:10907000FF7011D244C884083C87CB193CF49F424E +:109080005C84CCA2E0103721E500D704F83E2E3EE8 +:1090900090D77B3D470CDDAF4F047EF8A9E27D827F +:1090A000B61FBA75F1FE3437C2F3FA78FA7BE04D99 +:1090B000B96033ADCDD6AD4F9481ABE43FB23E99AC +:1090C00090B4DEE344F8EDF2F4F8BFC567FDD321B8 +:1090D00088F81D88CF1C326904BA2E503A8C932828 +:1090E0001D16D4E74BCB69F971A205F1FA71A21BE9 +:1090F000CB0584F83A908EEEC2CAD174FEF658229F +:1091000051F95337C7078752963E5A356A58343C4F +:109110000F73BA546FDBB981A295F283FF0127D098 +:10912000F33B327982D6DF39BE6B03D4DFEF32D81E +:10913000243AC59C9AE2F809B45E78542E9069FDF1 +:10914000419B1DE1AF9EBDD8183DAE9E7FAB75FC27 +:10915000FB0F0E6F9985A8D602E0BAEEF1FED19111 +:1091600075DEBA6DF1C6343A4F75FD4393609E5B70 +:10917000B7EE338EA0BF37D92C38DF3A9B1BCB8597 +:109180000A5FAF85AE97F2FFDBC0B7B0DEEF4AC132 +:1091900027E0BF95B0117E1770DDD4F84199CF1A42 +:1091A000E17BF17B88F3F9333603C2756D7CE049CE +:1091B0009B13FF534D4C226489DC58ECA44D26D9F7 +:1091C0008806EE6B381C26B3F749921359470F1ED9 +:1091D0001B181EDF3E5EB5C139BE7F3CEEE6F3EBE9 +:1091E000F963203C1E6D8FF5A13E9EC2E8DB69222B +:1091F0002AACFFD8A6ACE03A4F04CE491C4EC7ECCF +:109200002FD6DAC644F8E0EDDB3F5804724DDBADF3 +:10921000B72631F8015F47EC066C4FDC541E5C1139 +:1092200079F85B3CA9E9E8839FFFC2E54A2F3F2715 +:10923000964BADF2182C83C909BDDBF72717F32530 +:10924000E2877976DC61AE6BEF63BE643BC3572F78 +:10925000FD004BA0F006F87FDF3A7BF1C678BAF448 +:1092600075710953609D2774F39E20A1F889C02F62 +:10927000B3652FD0E94423D3830B8DC1F8023AEFB5 +:10928000794E97BFAC96CB8379113DA39F77519DC3 +:10929000ACCEA5EB5CC8F5C9C23AF924948B1AB5DB +:1092A000F43B46FCDF9E00F355B0F98E9A5ABF5D41 +:1092B00048E977E40739052A7C9FFD43B447263BFC +:1092C00093CB235C9F1F9BADB517FFD4E9D35E7A88 +:1092D000F478AC964FFAB13B629E2BB53B3B4CFE0B +:1092E0002CD07FC7DA162EBA0BF8AE2DD63BD4DDC4 +:1092F0009B3EEFDB65063FF06794FEE934793FEE75 +:1093000074007FA679D7B97BF3E5910A66CF7654CE +:10931000C5D505A1E4FDFF5A92DB0EFEC38E601594 +:10932000C27F89C32DF405E1766B01AABE089D8436 +:109330009D1A6C677AF2D6AD278D6EDAFF26D01BA8 +:1093400056CE240E183FB56D3385EF6D03D71F4FF2 +:10935000C607C1BF11F38975E5D9B572AAD7F7035E +:10936000D9AFB78286F260D4BCB5DB3CED30AFA894 +:109370002F5CCDEA02FE1D4103FEFEF99A445CFF1C +:10938000D1AAC7905FDE7D34A740265761DF828671 +:10939000FF11FB06F8B99C7D5B6EF75C917D3B4D40 +:1093A0005D0DA4C7A5A50F4C82F5FD7B32FA0DA774 +:1093B000B7327E9DCFE9FDAE293C3A1ABED37CBDC3 +:1093C00027F87A4FF7E0379000F64FB4ABE4FAECA9 +:1093D0005D2E07EFAED1CAC1AD3ABADEBA550BEF7A +:1093E000A2462DBCABED3606CF9AE658D02B4705EA +:1093F000DFD4CA68778EFA4B51BFEF00FD1E85E7B8 +:10940000D557296FF325F536A03F698B457FDB01E2 +:109410006C01F63297D1F1730BE3F72949863EEDE3 +:10942000478F5ECED5D21DFC88683C1EE77228EAC5 +:109430000BEAB47011AFB6FF1103936375731CFA96 +:109440007D361383D3D61E6B53193F17821DEC99BB +:109450005FD77FBE12D4CCFF13BB478317FDFC033D +:10946000F95157EB47FEFF12C7BC6AFFDF8D63BAA5 +:10947000747234107F1FE67EA03E9EE9B11BDCAF04 +:10948000117ECC921B46FD17A1ACFE199FA7766BEF +:1094900025FA9D470CFE0DF140CFC3061BF063E19A +:1094A00071167FD472FF4AC03349E76709FB3390D6 +:1094B000FDD4CBCFB1EA7B0A60DE63D573357EEF96 +:1094C0009C8B1924941CA957D7483EF01B7AE4358D +:1094D000464B77ABDD84F35BED6E0DFF575FCCC67B +:1094E00071847DABDD7AFBC6348A8FEAC687D2A24F +:1094F000D7739CDBB5B7EC6EAD3FAC307FD8D91CD1 +:10950000BECB4FFB7F66F5272645D1C992A4C5C3C4 +:10951000314E5F6807FC57ADF88D7DF1E19CD9B203 +:109520004E3F313F4DAF8F44FBD42483665D621EB6 +:109530003D3EAF74BE6B6C36E16F9F26A058F3B40E +:10954000FE697FFCDB33AFAEBD7E5E5792560FEAFD +:10955000E77F3791E077C1AFFA796E4862FABD7064 +:109560002BA3FB911BAE453E3C5AF5F264A0DB7B7E +:1095700077FFFDD85CD033CB0E4E06F06F488AC71C +:10958000F6EFD125A502BF0724F40BE76E5D7C3012 +:109590000DE5F2EF185F1F399A837C5CC1E976C450 +:1095A000E4D5D841BD7CBEC6E17C2F91E18B908E85 +:1095B0002CC80F5C29BEFED20FBEAED66EBC96C8BC +:1095C000EC24B9346E34D883FFEC81279405F5FE82 +:1095D000E27951528CB0F8B4D4DA222582FFE8BF88 +:1095E0000BF4427775BCAD9DA2A2DAEC9B097AFC24 +:1095F000D86183A149C269D10FAC228C0F3DDFF243 +:10960000DC3B927EAFF2CB3E10BD4A683389D2B5C7 +:10961000C4AAC278E38F543C130F71598DD90D7AC7 +:10962000BF7AAAFF6319E2CEB971EE75B46D61D746 +:10963000E02607FD3EAB5C82C88F1CA0763D4CD770 +:10964000FF3454AE210C408A9BA3A2AED66F9A463B +:10965000BF8F74761AACB4C75B0FD76FB2D07137B7 +:1096600034F9532154FED1C3333659B2289FB97C03 +:109670005D53BD841C7C78E60CCB75745D8F8AFECF +:10968000159B7C930979C910F048F4FBF98797CEB4 +:1096900050287E14695ABE81F6EF4EDA85FDE7CC7C +:1096A0005979CBAFE877FB0F5B662874FCC285A2C3 +:1096B000FFFD334A150AEF64517F2806EA8E38BF52 +:1096C000DB904FC83D0F97CE5068FFCE24DFED846E +:1096D000D647FDB07413CC5F14A06DD361115BB19C +:1096E000BF186FC3C3A59B545A4F5B534AFE4649EC +:1096F00055145625D0777F2E6E2C55E8FC37273F22 +:10970000BA296F042113CB8BE308ADD726EF9C61F8 +:10971000CE073AF9F2DDB4AC4BEE44780B17AA232E +:10972000E1BB49FDCDA672BA8E86BCA00AF4B9533E +:10973000627ACFB8A6E3D020AA2AE28C8D6A06D23C +:10974000B195F149A67718F289A8E7B23C574F3D89 +:1097500095D53BD7919BFD7DC8638683E99FCED885 +:10976000BEBFFF8ECB135D2FCA6BE271E27B969674 +:10977000076349A785DA9B1BCD647C118D8B772409 +:1097800059191F8B792D0C2ED18FA83726813EAB0E +:10979000603C88DFAB285CBFE5FA20C7CBED000951 +:1097A00029B340E46503C2E394A59B2BE9EFAE58CF +:1097B00012D8494B6732C17A0521BE9DD6C8B87F01 +:1097C000E4C396E5F8B703FF97A5A4E5377B22E34A +:1097D0005078D703BC229F44E156006EA75C957F6A +:1097E0007B5E14DC790CEECE24860F3ACD33E0F7A5 +:1097F00074768D1CBC99827AA74EFF1576151809D0 +:109800006D17E3E072EC66FD9DA504ED73F7FD3185 +:10981000419043620978FD5179962E8ED7FA8B23B9 +:1098200048705CE4F77A256402FD517F310F7F7741 +:1098300036F74D17919FACBF6827EAB8E8DFD9FA31 +:1098400022E338F07B7FF0D0B002F5D76A3B4720A7 +:109850001F770D61F1DFEA785F4AD265FC9EFA8BD3 +:10986000523FF02BF8BB67105D2BE091FE4EF222C9 +:10987000F091A272B46FAB6D4C0FADDE599C42AC4F +:10988000517450381D4C6CFD806743947DFE8AF303 +:10989000CD2CC15FD4AE839E5B9A9E87F161E77F3A +:1098A000978EAAC4F1D6E1789D0A8B9F0A15A60F60 +:1098B0000BBB926CAA14E10BC10F829E9D498DC512 +:1098C00088AF4AC9D6EEE9BD6E5332970B3FE55BD0 +:1098D000DA3E6561405E1C059FE07BBD9C504F9E5B +:1098E000F109E5FF45209710D701FC5E2A0FA3A3DD +:1098F000E9C8E0FEB72466A7281F30FAA5598300FF +:109900008FC04F6F7EC818801FB2F17B61D77E1366 +:10991000ACB39EC399723C94302A8FAD6305AC03FF +:109920009251B4DFF792185F7776948EBB96CEDFB4 +:10993000F9884C807D0A7BF4E757BF2FA1FA2F45A9 +:10994000D441DFBB11DF5C5F52F7C01269FFE90F42 +:10995000BF9AB17E48043F0E30F24911783770B992 +:10996000B887AF9BE24FB52469E496141544F48B95 +:109970009053319E18E7C664C61F15BCECD13FDC7E +:10998000EE517D837940725F0CFACFDFBCDE910629 +:10999000D03B955CEFB0DF0F523717DAB95CDE6170 +:1099A00012C5C9E143A543C18FBF2355769FA27657 +:1099B00065B614D800889F75DC5B4B0647F95FC419 +:1099C000E2B6527FE226DAF82B3AEFECAE5855A613 +:1099D000A49BE58F715BA3FCB24F5B25E4B33B68AE +:1099E00008BAA6A0377FDC916AC2790E97E72406F1 +:1099F000A2E1E2F8BF11F2B7726FF914750A77AD00 +:109A00002127EABB95D99DAE04DFF2645A5F662038 +:109A100001E4F3694E8D3F737F9236DE17FE4C658D +:109A2000A2AF11FAE9DBF7E7FF38210C45F965F938 +:109A3000A09496F820E02BA58370F90C19EA818E8A +:109A4000325125BA7EC591C5E2AA6AFA716C64BC2E +:109A500023923F538238C969F6429E82D205D75F6E +:109A600026DFBECFE8003A4BDE665865B29DDBBB11 +:109A7000EEF1B04E671CE3C38331C41243C77F9538 +:109A8000964877AE97FE943DA21DEC87D0673D7A4D +:109A9000F0128BABC5F7835265A68DD60F3A87E7D8 +:109AA000374B381E8989E27F3A2E0178FEF4E59D16 +:109AB000A7A6527A1807B3F11C74FEAA2839985841 +:109AC000CED6FD53CEFF3F4D8E6379F93836DE4159 +:109AD0000F65139867285D0F9587576203798D0886 +:109AE000D7FD8C9E94EF415FBA38DD5C2656FFA708 +:109AF00083C9671E2F7FC94B57026BA7A74FBC9323 +:109B0000CDFF7389C9F3BD64971FF848F835B19646 +:109B10004602FC4C889F003F6D2EA6EBE9639CA794 +:109B20009359FE86DA315C6F6FBBC2F49F62399243 +:109B30000D7CFC4051BB0DF878BD91E5E31FB005ED +:109B40006D497DF433C5D1F8312F628F841FFF79C1 +:109B5000476522E8C7C35CCF9B789C29E059CFF3C7 +:109B60001E0917E3300E7D3D99F9514AEE29A4B73D +:109B70005244D50CED6A247ED516456FA3CDA0F1D5 +:109B8000FF132E2660FFFA8BE34830F9727ABB1080 +:109B9000BF93D4724DBCF1F989B908A77E5D7AFCF8 +:109BA0008538BCA2EECB55A69128B88A896D3DCCEC +:109BB000534CB4F1497FFEC705CE57F517658DBDEF +:109BC00089C06BD2FC1EA271971A3DFF19367F64C3 +:109BD000DE38A246CDBB2BD9D79D8CF235D9767A0B +:109BE000142D28DF7F25A31D61F68A966D5666D752 +:109BF000413F8BB805E4D946E396EF27175F84FE13 +:109C00003D768EF713FA24F178C4AF9368DFEF73D3 +:109C10003DF47D6E777AFC3F85F9A9026E2FE70748 +:109C2000A177CA2DA5BE535174FB7EB21BBF1F92F4 +:109C300018DFD11E59D09FF2AD1A6DBFF5F84C72E6 +:109C4000087CC668F820824F2BFEFE4DF983859371 +:109C500003F268C89B964B64282D264E63FA42F4A3 +:109C60001BE660FEFC30AA58A2FDFFAA85DA762327 +:109C700079BB91BCDD40F63ADA5E4839113DD5C07A +:109C8000E9E73977D8E4A6ED6E7124E0B8D39CBE3D +:109C90007C07C8556CC2189208657690D04F6DFF4E +:109CA0002C753751F8BB5F377ADB61D8DD8CAEC5D8 +:109CB000F356372BF477638764836D2801A7758D7E +:109CC000E45B46F1771DD757F50EB69E7A47C83448 +:109CD00084CE9F5ECFE0C8ECD8272951F29359C7B4 +:109CE000DA5DEF30727D1F6C2A1B0FBFFB94CD94A1 +:109CF000D4DFE2BF973B18DFA4774898E74E6FA404 +:109D000008A0744EF7B271ADDEA0B4342FB2CE16F7 +:109D100043651EE8F916579C17F4FC2667C0EF0050 +:109D2000B84E8442E0964F3CD1A5401CF994D357DD +:109D300009EB17EB73CBB674D8478D3BC1E06A4D86 +:109D4000D2F2036858C69FEDCC2ECAE410F857280B +:109D5000EB743ED7BA5CB433A2BD2B89EB791709FB +:109D6000EC42BF87B410A417C175B8D60DE3FB2F22 +:109D70008C9E113F674401F83939F78514C8ABBE92 +:109D8000B88DED2BE8F97215E76BBA8EDB607D625A +:109D90001D03D973D1CED84F5C2AF83D8EF34FF115 +:109DA0003CC77C585FFDFA5FC79925A0439B148789 +:109DB00076E1016C27F04EE1F81EC0A1E727256986 +:109DC000879441D775E772629349FF70D6AF917D52 +:109DD000CBA2F5DD7A13D2A1CDA4DD2F17FEFB2394 +:109DE0000E66B74E38FDF7C2BC0DBB1F32015D9742 +:109DF0006F3F690AF4A1A77BFA5F219EA43A161768 +:109E0000D4D75882B0EEE2790AD26DC57A53D04CDD +:109E1000E953FFECCE9001FCDCBB8917E4BCBE63C8 +:109E2000E72BE9144F19F5BE09902F73818F961710 +:109E3000B11BE9F52109EC717AC7E27AE4E3D43881 +:109E40002FF031F8A7E0377C546C5525EA2F7D645C +:109E50005473DDF4FB479E582FEC67BC12C3E45EDD +:109E6000E0F9D59DD30F4914AFF1BBCC21289F72E7 +:109E7000069E83F56F6E7217039D3697111BF00FC8 +:109E8000F547EE807A59B395801C5CE9BA85DE10FF +:109E9000BF4FBC9BC943D891C0F99F14805F76C85F +:109EA00011CFF48D81E9A1578C0C4E85C399E7F051 +:109EB000FD16F91284312DB27EFDBC51FCF3F2D5B2 +:109EC000F0F1C4F20E13ECA7AEE07AA478DE76E9E6 +:109ED0006F51743F0C0110E88D67DB2437F2F1F607 +:109EE000A63207B6276637FCCEF2222BE8F75BA234 +:109EF000F48758471F7AE42DD017D6135D07981EB4 +:109F00000921BF0978051D05BDDE77307B753D351C +:109F1000D7F8BB89D2958EF7CAE0581C4FC8B55EFA +:109F20000EDFE77C9D5EB35D82B81CFC4F7F147C26 +:109F3000A2DD3467C959C0D7C4F22EC4C3CA1A05FA +:109F4000E926E0D93FF7A66540FF958EB47CE0D7BF +:109F50002FF8B88FFCE60DE4C795AD12DB876E7D58 +:109F6000C3540DF6437D4A06FF67267315C8965FF6 +:109F7000BD81F66266278BC35776EE54965A237CD2 +:109F8000EA39B7FF26E0E3951D66122301FDD87A72 +:109F9000F5FC49F508CA0D514D180F429C807A9383 +:109FA000043C60BF859ECDE3F011AB7FBC01F4A9FA +:109FB0006B743EE8C75827FB5D8C5F16EBDD6F01C5 +:109FC0003D59C0E20561D7E2E13BD3CB21D4B3D404 +:109FD000FB05BB28C6EF6D1F4615001D263899DD11 +:109FE000A2F4753AFBB013627CCF4FAB883B3E8A3C +:109FF0006E80EF287E1BE234E1FC439C0AF3974B12 +:10A00000189E14135BBFB2CE1284BCC8ABF6728626 +:10A010009F240BE2E7A061493DD0E9603AE3B31623 +:10A02000C3BADC46669F86023CFBE72610A68798EB +:10A03000DE79E497CC0ED6AB568CC3EA03B391CE4F +:10A04000C411E385FD44123860AA8E8FF0819EAE64 +:10A05000EE5DFB4CB08E991D8CFF23F80A6AF895D3 +:10A06000EA33A4779E43E4CD031EC0A7889B932DBB +:10A07000DD2123E92D9FC91037531BB788C7CD8534 +:10A0800093591C0DFFFA8A97C5BCA2BF889757AC9D +:10A09000F943F6296A0F6E4BFD3D96420E445C264D +:10A0A000DADFC0E93791C743D59C4F568CEF403E6D +:10A0B0005F71AA11E5C35ACEF484F58456BF89B8FE +:10A0C0008C90FB781CD7713DE4E1CB1E976CCD7D65 +:10A0D000AC4F94B7C2FE13E8F74BD47BA6F14DBD4D +:10A0E0006E7FED16CEB71FECA008463BD088FEF27F +:10A0F00047DB24DC8FBDD2F148E8A804F45BC1E360 +:10A10000928F9E2D9DF43EECD7EC48C4F32F1F3E5A +:10A110003BEBBBEF53783FDA3ED50BF6D5D1EC479E +:10A120007EE876C678C11FA66AB01CE2F2A68E97BA +:10A130001320CF74F699B105A0FFEE76B2B8EADC31 +:10A140002FE535808F753F7F7E0A7C5F119492C129 +:10A15000BFFB68C7E35F823DABDBBE0A762E49F3E7 +:10A1600033BF33C1FE8321D8C67EDF91887EE0D91C +:10A170009F3D3405F0DCDCD18CDFCFFDAC0DEBFB7B +:10A180007FFEFCDEFF06BFC19FE08576E77EF9D04B +:10A190000FFE1BF876768217D6511F50D87EA1E0AD +:10A1A00057BDFED9B90FE54EF0C74CF0FF80CF6B1D +:10A1B000981E11FC79B898EDA75495B07D9AC333D9 +:10A1C000626AD0EFE572D730DFDE067267A0F84B27 +:10A1D000A5FD6757D8DB601FFD494E9FFA3CC60FAF +:10A1E0002D945B20BF1097173265D0767317EE9CC5 +:10A1F00002F86C89254531C8A790DC8CECEFCC6A5D +:10A200007DF51F12A5E368AACE4E53FEA6A36DFFEF +:10A210008AF2E99F8D2C8FD0C2FDF5B90B4FE2BEBB +:10A22000056500DB699137922F67DF141C4FB4EB93 +:10A23000F1DB381E5A78DE848E8FF6A67035CF8714 +:10A240004A4B9A611FFAE05DA1C9C0B72F9EB9239E +:10A25000B63E2F9ABF59FFF44E26F7E9755DD7C376 +:10A260003ABF95BB781C4CB392EFB33820BF06F6CB +:10A2700046B56AF4DB5E2E672E1B715C03791B8585 +:10A2800038E0DC5E1921478D889F27F0BBDBCCFCD2 +:10A2900026F7EFE63E01FB625B8C81B409606F5AE2 +:10A2A000B89DDACEE0A5FD6DB0AF4EC7B35D53806B +:10A2B000E3741993B0BFCAFA4FDFCEF6D5821CFE05 +:10A2C000EE6CB05330DE782BD815B506ED8ADBE4A2 +:10A2D000057E38074DD2105F63168D8EAC5B9F678D +:10A2E000013D06FBD3279CC56F3A9D9152E465F46E +:10A2F000F44877B1EF735DBE37411F931DC9039CCE +:10A300006F66F4DA3FF7BC294CE77DE4A593A88794 +:10A310001A80DF61FEC0298DBD15FCB4E58593C8A8 +:10A32000EF55BB197D1A767B8C10D77CB8D647FECB +:10A33000461DCC06CEDF5BA4702D9E1F7921C6067C +:10A3400079B4F39CFF57949F3C0D7A6BF0EE343751 +:10A35000C4DDE75F607270D060407C1E6C1FD50664 +:10A36000F685FAB5C8CA0D8DEE7633E297F9FBC5CE +:10A37000F3963D04F1D7CA3AE205FDD0D05999E9E8 +:10A3800046BB6246FC36EC7E03F945F8B7D41E2E78 +:10A390008371EDD4EEC4403C36CDDF89F470C463E4 +:10A3A0007BFBB4C04365C85FF985C05FFBE7EEDDAA +:10A3B000688179A7111B8CBF25CBF74206AE4322DB +:10A3C000706E628BB1B544A1FDB794B96D1483145E +:10A3D0005FDB53C1CE935C13B76BCBD06F6E485D20 +:10A3E000E08538AB97BE78A109FDAB06772CC23368 +:10A3F00073B77407F33BAC84C12F215FCE0C5E1B97 +:10A4000004F9FF98E34DE0EFBCB1EB26C0CBF95F58 +:10A410005106A4DF674E637C6A9FD6817AE6D51722 +:10A42000A85F3326C28FF1BFA6FE0DAD272936C91E +:10A430008B7236CB1C4DCF5623B353766E7772CAD0 +:10A44000195D87B8981C0D71197869D2EEEFD9D4CF +:10A450003160673FE674C7E140FFF371572E0BA1EF +:10A460001CD53FCBFC3287D9977F6714DF3A4A99D6 +:10A470009D147976C8BB63BE1DE21707C4CFEE7684 +:10A48000D86FA6F443FA7ECB31BC00F0359DC3955E +:10A490009E2B61BC47FD35C49B6BDE76A5368FE5F0 +:10A4A000E9FB8A1767F2753893FDE321BFEB4C890E +:10A4B000473FC629171B62C00EE54BDE7637EE0715 +:10A4C000627CDBED4CF3B66BE49AF97B675CF18C54 +:10A4D000AEC13F29B05F33D7E5EED39FEB1D2FC749 +:10A4E0007821DEA96855C7407C21F607C4BA834DA0 +:10A4F000B135D17AACD2C5FC84E00852037A81FA36 +:10A50000ED56CC27DBE83C1097B75FFB3316973747 +:10A5100063BB6B5CCCFF29A3EB03BFCC99E35FCD9E +:10A52000EC6B3CAEC3994396403F6773AAD4EC8969 +:10A53000C6B30DCF739DE07656F8E30D545ED08F11 +:10A540007B89F16303F8719EFEF54384BF997E9881 +:10A55000B99BD1BD6137B37F224E07BD07E70E41DE +:10A560004F78C646E4BAC1141E06FC29F8BC614AFD +:10A570007818E0A73FFD50161744B92B1B350CF394 +:10A5800010629CF34637EEDB9DA7F125FAB15C1E05 +:10A59000E25F647220E8A28F73002E8817857EDE4A +:10A5A000E4F437B9283E1A0CA18D707E40E8D386BA +:10A5B000173769EE07E8F5A945617ACB128C0B369F +:10A5C00047F10FEC81C5176089E7B4E2D6307CC44F +:10A5D000E5B955C4776ED775A0AFC82509F3C7F79D +:10A5E000E61DFD05F0D90F5D2CBF76A7C4F6E1CCC2 +:10A5F000BB2B218D0A791B16AFB4C7E1395C91BF23 +:10A60000D1C3B591F391C0BF8833205F0FED9FE7B1 +:10A6100072D1CEDBED76491A3B2CF8DA6D089C84BA +:10A62000BC7D7FF647F4FBA6F249621E61072378E2 +:10A630006ED2EC37C07A2AF3FA6FD7BA8FE919C114 +:10A6400077E2FB21CEEF3FA0BC0BE573225F1B1826 +:10A65000C1F6016288E69C96184FD41F5C7BF9F323 +:10A66000F9B62F65B6DF45DD0C900FCC3780F89634 +:10A67000947B617D5D1CDFFA7E0A513E0B0BBFCAE5 +:10A6800013050FF7C9E0D8D2943EF6EF7AE69DACF9 +:10A69000DD5FE8F1CB74E3F407778B6E9FA025674D +:10A6A0002F813C559C2581CBEF25F4FB37F5DC272A +:10A6B00050BD95A8EF58BE6BA079F4F0C6B8FB86E4 +:10A6C000F74AE9D162D85907FCBC97C34DB65DD9AA +:10A6D0003A9FE3F47B00CE83C139AE652334FB2A75 +:10A6E00056AFBB09F2C863F7B8F3D1BFE6E739E369 +:10A6F000A7904F64CAAF0945ADB9707FC4E9D7C20E +:10A700009F52A33D17991648D2D433EAD235EDB300 +:10A710001A076BBE0F5A3352F3DDA31668EA392DC0 +:10A72000D768DA0F6D2DD1D4876FFD96A6FD8860AE +:10A7300095A6BEB9A9A306E461D48EF99A7E639565 +:10A74000B0219FFE3EBA6389961E3A7C4E05BE0636 +:10A75000BA58C2E3A2E5AD206530D26DEC6E2D3E55 +:10A76000128B74E744AF923FA65ED4F187AEBF90E0 +:10A77000AF38C2F823EE52CB27709F264E2F477C6E +:10A78000DC2916263FBDC6ED474ED6C5DDA400FF29 +:10A79000EF854A943FFD679DFC97D524B2FDA58BBC +:10A7A0005503F8DD4C4EE698D9BEE31CBEFF28BE2B +:10A7B000DF91C2F4C26D294C3F5D293F1FE7FC7F4A +:10A7C000B83F7EA66EAE0BEC4539C178DC56DEF4A0 +:10A7D00009E475E62921924FE9F9085FCF16DE7F7B +:10A7E000EB5A1B8EF7E8DA542CB7AD75E3EF3F5DFB +:10A7F0009B8B6570AD177F6F5F5B84E576EA0742E0 +:10A80000F9E4DA72762F63AD1FDB3DBDB606CB6788 +:10A81000D706987CEAE9773109EDED1CA2D56B7378 +:10A820006BE42BA2CF5C725F979CD01B1FBDFACB51 +:10A830000B2F7B7E7BCD89E2E081A8F64D29F10EBE +:10A84000DC779C4826627C3B40FF2FD6FA82078C3F +:10A8500003F3B79E7FC8A53B87469FE311E51C60C5 +:10A86000E874EA75A6FCEA5ED51AC153FF7CD537B9 +:10A870007E7C96F3E910F48F01FB13D57F9F8E7FCA +:10A880007D4AA2268EEE29391F16737E2DD6F16BD6 +:10A890003885D9FDD0FFA3FCBA3F261EFDF2FD4648 +:10A8A00077A6338AFEFB63E26AD8B975E29E4DE96A +:10A8B00047BD369B87F26F422ADB0F942032C1FCE2 +:10A8C000F1101BE64962AE329FA2C3A344FD4A0FBA +:10A8D0001DAF5881BB2C387E4881F1BD86887EC56E +:10A8E0007314B111BE977BF3031D4735813FB62426 +:10A8F0003C1FFCB9A1A96E8DBE2D51E4CBEAEB1231 +:10A9000090B73EF282BDFA5DA5BC5D00798BFB9FDE +:10A910009337C1EFE452CE90E87398A22CE6F2F69A +:10A92000644A18E54DF07B09B777A25D762AD3CF4C +:10A93000D9A93C5EE27E0AF047411FFE8A2B55D220 +:10A94000E0F76AF15D4C985EA492960E7AE26AFB9B +:10A9500053C951A05FB125418D1B73F5FDFBC36742 +:10A96000AF7EBB1D57946FA29A4682F16B3974B5C6 +:10A9700016AB0AFC44B61A3F0A47F1F14309FEFC44 +:10A980005488478C6437EC4F5033EFB6B990EF11D1 +:10A99000AFF49FDF42EBF9BC3E5195DC26CA376627 +:10A9A0005A5903F2117EE51FA02FF2793991979041 +:10A9B0006E4D05B9C98BC773F05E81269E372D1485 +:10A9C000D569D4C57189238D302E9156274118D36E +:10A9D0004A60FF7DB3E46D91E97C728AA719801A01 +:10A9E000575E2C13DCCA6BC57232E96A86ADBD298D +:10A9F000A45B86F6D796ABCD00E72072C9867C9E15 +:10AA0000F2E4CAAFE03C0F2427AF006F5FC4B0FD93 +:10AA1000EA351656FE5B6C423B945FC4B0FD6BB5E5 +:10AA200084B0FB75EFC663DC39C810989F4AE9FC17 +:10AA300085C1B708E05192339D3CBFFBD730E6811A +:10AA400025D40F25D6F135B7A05CB3DF11FF9E48A2 +:10AA50003BACCBBDEB3FDAC0F212CD9B18FF3737D2 +:10AA6000B1FA6A2E1FCB79F9032E27314455098E8E +:10AA70004B29E9427C323AE6523A1432BA209EAD72 +:10AA800087904EB1A403F1BCA97A4B60037E59882C +:10AA9000E780A4909F7C1517CD4F57369EC5D2EA0C +:10AAA000B350BE8AADE9C0FDA0FEC653C04FA4F3AB +:10AAB0002AB34D788EF24E29B01EF048BA2425DA1A +:10AAC000CF3492462279A2E1F8DA747A10F87C2029 +:10AAD0003A194BBC5D3ECAA2D5B1129E77B95A7ADB +:10AAE000ED00A67746587D6F1A6983FC429D83A4CA +:10AAF000C2F94793D58272B83E8BE5234C2309DE19 +:10AB00003F268A41B36E714E4FF027C5CFCF017EED +:10AB100053503A09F832A53662BC48947006B4DB4B +:10AB20002B31BED0F3F54ECE1F846432792097B717 +:10AB30008F3BBF6D7FDB81C2DA55F1C7545A2FB608 +:10AB40002F802DBF7FFFF1A20A85CACFCE37080A1A +:10AB5000EBECB4EFDC0FFA7B67B5FD31276DFF87B7 +:10AB60004713EE37C2F745127E9F994EBF5378DEEA +:10AB70002E261D90677ACB15F81DC03FFF8FEE8300 +:10AB8000704575E72BB76503FE1DA5DE30DE7359F2 +:10AB90006076C3FE5407E43981712E5178287FFD19 +:10ABA0000C4091597D2AADCFE3A815DFB7C37F5381 +:10ABB0003ECA59E66972409E729B64033F66D03676 +:10ABC000EAD7D0FA07F79371905FEE4FAF4D147547 +:10ABD00055C2FBFAD7E9BE0BBD3764D9EDEF7D1F37 +:10ABE000C6EF92F17C8754C3F67B26F2F23A5EE61A +:10ABF000F372DE32B63F35A4666210F27EA78DEEA8 +:10AC0000662BF0E36882F75489C2F8F3CF59F62037 +:10AC1000E4693E904833E4D9D44D04EF0D829CC1E1 +:10AC20007EA87719A5F57870292D41C8E31F594BE7 +:10AC30007CEB8746E9574A1B5F214BFB30B8F3306A +:10AC40004E9B4C22FF601D659175219F5DCFEBD31C +:10AC5000EB59DECEECA37A17EC9F4E5FC79060AA4B +:10AC600005CF1B7BF03C893C9DD800DEECF2103513 +:10AC7000C5541FFB8A51EF4E208197BB6839C9B775 +:10AC800013EB459660332C712ACC9703F6D5AD00B3 +:10AC90001D4BA9070CF572D28AE5B748079615A493 +:10ACA0000BCB1B4837967E623342199FE6E1F124B5 +:10ACB000B5038371DF0EF3A4055BCD984FAD2A0F6A +:10ACC00098DC7DF82FB5E2FE210964639E58096483 +:10ACD000CF89F2474ECF9BBB08DEDF701BB4E7691C +:10ACE00093D3981ECD4A63FEC41689EB9195E21D5D +:10ACF0008FC08F6FA1F505E5C3BD702F9C7EC73C4B +:10AD0000B13ACF82F9C12D467716F82715F0F80C25 +:10AD1000E4ABEB77FE1BE8A3C3336E4D0379AD5D67 +:10AD2000BF310BE284DA0A7E0F4751B3AAA3E4FCD9 +:10AD300083C50C2E711E42FC3E2C8DC97105EC6939 +:10AD4000C13E32851FF597C8F7CDB7A39E2923359D +:10AD50000A9C779F90C6F28D41AE1784FCD4093EC1 +:10AD60005054533AED37C7EBF1C2F9BAF94196475F +:10AD70002E534808FCE91EF86BDAEE22943FE6D722 +:10AD8000EDC3BC7FE41C13DBBF2E9ED7B908E6AF32 +:10AD90005D662666DC4F6A7D07E4796E9DD90DF508 +:10ADA000DA852CCF4A6A2CC1A150DFEAD900723A69 +:10ADB000F76E9F17F2B0743ECCD75E6F61FB9816AA +:10ADC0003A3FECFB4DAFE3E746EAEEE902FEA4EDC5 +:10ADD0007CE04F5F4FDB2BB4CC24EC7C5EACCACE66 +:10ADE00039C54E63E79CDCE6C683F0DE897B15F14E +:10ADF000AA74DAB9DBDA24766E9960DC33903FF41A +:10AE0000937B2ED9311E05BF6110FCAAB27CF31AC8 +:10AE1000D90DE70E8862C371E6F3FBA52D75CD98B9 +:10AE20002FFFBC862E8ECE3FA7D5C3EE3B1C607293 +:10AE30003EA7263F0C792C4BB9D92DB3DCA40AFBD5 +:10AE40001B16528E729F4F587EE466381F81DFB505 +:10AE50007185658D89CD4B421AF8419F81FDEDCFFB +:10AE60004FEB6F7D426F807EE9EE43DEA5F257998E +:10AE70003FC74B907F90DB028B578E3700ABF95169 +:10AE8000BE012FEC5ED3DDCCAEC43C2945DB778B15 +:10AE900043BD098EF07C7060C8062BA2AD9544C7F7 +:10AEA000199612FF2DD1E7CF3715FB1745EF27ADC8 +:10AEB000E7F2B781F33DF9A39A0DF3C95318BFBF69 +:10AEC000F53AC17765CEBC4EF109F22759987C0E50 +:10AED000809701D7BF8CEB715E46FC507733D077FB +:10AEE0006BDA60846B7C79A50CFB4BE37E322EE33E +:10AEF000DF496FFAF487FFFEF03525C5D79686FB4C +:10AF0000013EC395F8ED6572E6827ABAEE4F179A64 +:10AF1000717F56D8CD022016C875170952D907FB84 +:10AF2000817625AD85E07B3F4E3F9C9DE7E3009B0E +:10AF3000D75888A2C9A3DA34F58CBA544DFBAC4675 +:10AF4000B7E6FBA035B99AEF1ED5ABA9E7B41469F3 +:10AF5000DA0F6DF569EAC3B7966BDA8F08FA35F543 +:10AF6000513B6A34ED3FA54B0AD1F58C3F267B550A +:10AF7000A0AFEAEBCA2B8CD8F1D11D014DFF89E1BE +:10AF8000C515A0BFC6EEAED38C434E50BF8DD61BA9 +:10AF9000E9FF185DBC32E8116F9D441EF5000AD927 +:10AFA000776C4FEBDE1333CE821E9F5F638CF87B92 +:10AFB000D08BDC877950AFCE4FD4C7DDB71E520F90 +:10AFC0005A297C75875A0F823C84D3B479AF32D921 +:10AFD0008AEBFAF4A88CE763EA80431D113A7E0AF3 +:10AFE00003C1BAF7113C37A65F774F9C2E6F33E24F +:10AFF0003B2D741D7084DE9CAAA5778C5B4BEFB84B +:10B000005C2DBDE3BD5A7A271669E96DF7E5F6892F +:10B01000DFE4722DDD057E8BE8FF00BFDF343E2DBF +:10B02000E9FABCE164D4B39F6FE57AB6B71E986DB8 +:10B03000298CE801AA5283708F4AE0AD975EB0B2C6 +:10B04000F8A6472F6CE57A61AB5E2FF85E461725B0 +:10B05000E0C1B8F3CD45133340CFA5933DE23E4563 +:10B06000E02BD4DFAA90F3EC74D8275CE30DAB603F +:10B0700027B699D19F3C7CB0F6A001E0BC24E1BC8E +:10B08000F7F2C06A78BAD8970C0C877EB19646154D +:10B09000D461F61A3FEAD30FAE637CF126E843BAD7 +:10B0A000D8B7208E87CD2B9D1E213A3DA8F78785E6 +:10B0B0009E99A8BE8171F5D5DA8D81E2FAFC85CC26 +:10B0C0009E08FD3A91D7C91215FD7B61679A8B02E4 +:10B0D0001EB8AF5060F1C9C4101DE787D1EE4C25F2 +:10B0E0002AEAE16BCBBD8FAD06BCCD783303FCAA59 +:10B0F0005EF17E04DF15E91300DF1DEC7C76B98478 +:10B10000F8D6E3D96071A35F129BC9F687AB7BF0D9 +:10B11000EEAF06BC0B7CEF8AF1229F1D9BC7E29528 +:10B12000F16F0C69B6D27EAEE51EF46776D9BD2FFD +:10B1300043FDD84A163F4E38EA93E11C564EA3070A +:10B14000CFE3EDF2F84BA17EEC2EF6BDF07800CF08 +:10B15000690D59C3BE17AC6B7C19DE01A8FE01FB5B +:10B16000FED2C71BF1FE183576AC7F716B29D48FE8 +:10B170006D60DF279E0836437D440B9F5FEA783978 +:10B1800001ECE1FDECFD865E710F8F73A672BAF4DF +:10B19000A22B8F1FA6F0F622CE995AC3E8B5ACDBDE +:10B1A0007F3DB2978E6E7AFFBE8C04B03E9DA8584C +:10B1B000CE20412C6792107EFF360963FD4608F1D0 +:10B1C00069BD92B88D506F4BCF45FB3A8BBA009852 +:10B1D000C728F25AF03DBE53AF7D972444F6D78579 +:10B1E0009FD09AE45F097E84A3D48FEF8BB4A533FC +:10B1F000FF3D5232FFC195A4667BE9F733FC9E5AAE +:10B20000649FBC10CF77D026F781DFFBA37476FE56 +:10B21000663A29C273C5D38BD8BDBDE9E01753FC8C +:10B2200084FE43B1C3B93D7C4BA98FF839924FD20C +:10B23000E5991515E39002D93D0A84E6C5F459F75E +:10B24000C37B0ABB4020D309F945FAA26FAB18B4FF +:10B25000313F67A07647F979A05D7CBF74B6DF63A4 +:10B2600040FECCD7FA512FF2F58B723AA9298DFF07 +:10B2700006D755B04EC573DFD5ED66C2CEF19074DA +:10B2800038AF534B1A91AEA747AB46769F95E99FCF +:10B290006ACE77D59C9F4EB799910E1FDC2205216F +:10B2A000CF53BBEDD5E3C06FFDFA4F794351EFCCDF +:10B2B000E6FCF9E6C1DA0D4CBF73BFEA3F46CA5F50 +:10B2C0008D8AC83FF5175578EFF0ED454C3F82FB6E +:10B2D000ADD18BFDF88B4E5E177064A812DA8B2B04 +:10B2E000D58B0E313ED78BE9627C1F653D5ACFE688 +:10B2F0005FA57A8607272F33EAF5F625D0047290EA +:10B300004A5A25A867916E2CDDC4B6CE9903573AE8 +:10B31000BD06A8675A1A2B2BE8F876D083B0FE4DED +:10B32000FBC747EB4123CF4B1B2DD4BE2660FECD80 +:10B3300007F904E5404FFEEDB3F46F30FFF665BA50 +:10B340001BDBE9F370D4E31A0B7270CA686DC17C21 +:10B35000B33EEFD22B4FA3CD675CD7CAED48ABB05D +:10B360001F8154583F1C13D5D891495E37945325FB +:10B370003FEA992D2981C48C0990F768CC84F606A0 +:10B380004B5806BBB199DF4FDACCEF276D1E26E292 +:10B390005B4A65287DB9C82F6339CD9F2F62F79E20 +:10B3A0009FCFB5E079FB8D2ED346C8EB45EE85F2F5 +:10B3B0007EFC9EEB18FEEEC2C6588E87CDF118A714 +:10B3C0003C00F3D27EB1B27B18C0F75703A5720ED2 +:10B3D0009C97F762DD24DB9C4D1ECC5B0ECFC0B882 +:10B3E00020FC700EED7FF4058540BCFEBCAD3BD665 +:10B3F0004EE7797E4FFB8E760ACF678798D97E60BD +:10B4000087AC9AC7C27DCB8F1E9E49DB8FED32A2DF +:10B41000891E5B6440BDF9A189DC07E784AA2CB2D0 +:10B420005FA1FCF1E177F8B91DC59B1D7D6E6747F3 +:10B4300026D39F87FBC92B5627152F04B80EA7F5D7 +:10B440007D8FF8FA0C83E63EA37867E9EF4EA239C8 +:10B450005F529D74038E23EAC68B7612488E1EC7F8 +:10B46000CDEEF32A7E02F72A8D171DF83D91FAB52D +:10B47000B0FF90682F52200E2B21B6033E09AF98E3 +:10B4800023BD7BBDE33059E9EEF12707839D62FEC2 +:10B4900028E67D3DB06FA3F543C7126D5D9FE77D44 +:10B4A0003C93C5A746DD3B108F67EAE165EF408816 +:10B4B000FBE89D8A2F0EF2434B0DFCDC55AA0FEFE3 +:10B4C000573E38D991BF390A2F3FCEE0EFC5F0770C +:10B4D0002B6CB43DBE87A05BC77A2A471ECABFF754 +:10B4E00067489AF6428F2D1272A4DAD1DF59C8E567 +:10B4F000E8934CF65EEE221BDBAFF9EBA68F31FD35 +:10B50000BFF88D581320F1E685246134ED17F8510A +:10B51000F27FFADCC0A7DE7D704E873CC8FC0A5B78 +:10B52000496E217BBF601AEEBB4A6A06EADD2BB585 +:10B530001B8F242F9E9E49E78F4D08BA6D749CD8AF +:10B540009167F0BCDFC60CC2EEABF7BCA7191E16A4 +:10B550007DFEE591E4E2E9994E3C4F1B4A827397E8 +:10B56000BF3533FA1E223EF0BB56ED1D8179B07F08 +:10B570006606CA607C71DF961CE8C6FBC5A5E0A71D +:10B58000E4F4417FEB6706E0233D1F00E0608F0796 +:10B59000E2877500379D6F6942DF74C57FB45E6ACC +:10B5A000B1E3FB9EBFE1F415F35E2D7F3A72983E46 +:10B5B000E996247C676620F8C4F96381C7B24CC65B +:10B5C0002FA21478D2DFF72BE37AA02C93DD13FEA1 +:10B5D00067A61FF17A21EB9361460AC352137F6F6E +:10B5E0006280F5BEF62FAEF74AE9F07826E39FA514 +:10B5F000B15706D73BFF4B70950BB8C65C195C9FE3 +:10B6000070FDF975E1F291EE77ED3903C345E95923 +:10B610000EF244A675E33B224B93AE0C3E57E6BFB9 +:10B620008637802FE9CAE033227C2106DF1CE23511 +:10B63000A6CA1C98A8FB37FA7B37E23ECE1C85DAF7 +:10B64000526AEF624D6CBF2DB64A6279A3AF79FFA3 +:10B65000A6878E2E12B2433CB9D7CCF28EDEEE61B5 +:10B66000D1F63393E3E79F993E0FC8CBD2615C2FAD +:10B67000946BDB7932199D453BF12E075D093F9FA5 +:10B680003C04EF91C37D25843FD38DEFEF8EE072B4 +:10B690002BCE2B8BFDC28D85EE14F01B7C166B48D8 +:10B6A000A67661E3C8BA5CD81FF1A5BE769C9DCB97 +:10B6B000A6FE6B149D041CE7D61EB20D31F68F87D3 +:10B6C00015F2AEC2C63EF6592EB802D76646D9EF7D +:10B6D000153B7E6F1B12952F1A4DC206E6FF771B96 +:10B6E00058BE989FD349B93ABCAF06FF6902E87FBC +:10B6F0003FEA7F612F1A5E7CCA0D7688DA7B02FBF7 +:10B700000EDDF1B1680F9A4716E546EF0B2DE2F812 +:10B7100032EADED188D8E97FED1D8D88FF22113510 +:10B72000B9AFF115FC5DD0C567ED9B1EE23C6E68BC +:10B730006DA8EA9411DE3F299A05E5FEB5BE59A72A +:10B7400068BCF75C72F16399781E97DF6BF01FAAF3 +:10B750003A1585EF949A2E4D3D2D70BCEA54149CF9 +:10B76000197561CD7771FED6E860E76F4BC65BF067 +:10B770005E4056E3194DBF16037BAF69D09A6ECD7C +:10B78000EF253EAB6A4F84BCEF45CDB89B9B181F9D +:10B79000E7B49059D1BF1B151F81F3AF435B2DB3A5 +:10B7A000A2C719BED5A6A98F08A66AFA8DDAE1D676 +:10B7B0007C1FDD91AB1DD756A4F95ECCCF13F92CBD +:10B7C000EC5C4FA9A558F3FDB9E4CAC7808F8AC9BC +:10B7D0003ECD7A7ACE910F702E475136619E12F689 +:10B7E000382717F43E4FFE5CB20FC7D7F3BF7ACFAE +:10B7F00064BEBFC4E26CC10F64BC3717BEF7C71785 +:10B80000BF75F99E80F1C2F0EE099C7B13F7A67319 +:10B8100089DBCFDE3DE9F33E4E17E7FB0F4D7D7F21 +:10B82000EFECF163B5EFA144F896BD87F26189783A +:10B830004F49FB8E9D68BF9FCFF300CF470CF49E0E +:10B840009DF1629CE63DBBC87C09F8FB87832F3FD6 +:10B850005FD755CF27F7B33ED365DF7B39C9F1F307 +:10B860006152DFDFDFE9C15F9A46EE4FF68A0332AD +:10B87000F1BB51F76E4C745C03BF0F14D7F4BC27B7 +:10B88000F88DC73304F179B5FE310DD7BF03EFA8AA +:10B890000D347E7A96AF3103EDD4D7B3BBB160637C +:10B8A000D3701C5316C5EB4613BBFF483518E62B67 +:10B8B000445C43F4714F2E3B2FB728F535F40762F3 +:10B8C000216740ED76EC0F62701FE566C96602BC29 +:10B8D000DE64E97EE73137FCBD86D03BDFC37C8781 +:10B8E000886BE264D8A7BB52387BF22DFC1D07C8D9 +:10B8F0008383DD1E3B7524DEC77910E2358081DF4E +:10B90000AB7890C29046F547A2C18AF7A6124DAC1B +:10B910003E16F235B4DDE7E4A324584B02AC7F12A7 +:10B92000DC4B61FB23897B9473D1F8D6EF8F7CD6F7 +:10B93000F5F758B08FA3B3B4FB249F938A3F8D02D1 +:10B94000BC1439109F635E989612FD3E4ACF3E921A +:10B95000C8F7F4933F8E9C93D1E667445EE6BAAB9A +:10B96000CCCFF4BC37A0CBCF0C94679A92129899A5 +:10B9700075993C93693FFBBDBB2D06FD0291771283 +:10B98000EBADCC62F23B32D55709E38CCBF25501DB +:10B990007F1D8E61F999C330CF18D867989E084BE8 +:10B9A000FD8CF812215E8573C21949BDF901F22A96 +:10B9B000EBA3E4FBB0BD6FBD11C862FAEBF12CC282 +:10B9C000DE6B73F916C3FC674CECEF6C9C89E56584 +:10B9D00002D36FF53DED59D9C4CB335CFF9D4922AD +:10B9E0009A77A045BB66BEBE536B2DFEF551FE9DFA +:10B9F000FB3FCC8D10E73973F8BD2E1FC3D38517DD +:10BA0000987FBFACF5A409EE4F3D9055FC38E0039C +:10BA1000DAC13A96296113BCDFBDCB19F82EFCDEE2 +:10BA2000E026BE5DD0DF1D36CDA2F8BEC0FD970B6F +:10BA3000469637BA10C34A01CF0359958FC33A2FA0 +:10BA40005C1736019D7BEA13C228870F64F971BE2B +:10BA50000B9374F56FB33AE1E7387C9CFFD07EF628 +:10BA6000612FF5F651FFBED92A13CF3FEAF545669F +:10BA7000BC469F2CDAF37BE4E39B2C6423A4A26EE8 +:10BA8000DE93628220A32E411D66D3E43FBE9E9EBC +:10BA9000B890D585EBDA5CDC9DFDE878CC67D8DA28 +:10BAA000E93C2BF7B03CF84AB1BE4EEDFA9EE1748A +:10BAB0001DE89D3FBDBF31903C4B7BF879365E92CF +:10BAC000BDBFCF80F126EF7D3D19CA8D5223E6A57B +:10BAD000A3CEE71E7F89F28B6CE84E8E9663B1FF92 +:10BAE000F3AA14C6FDBA06D28AF46EE8A4EB4A8023 +:10BAF0003226047967B25BBBAEE5D1E73169BFDBC3 +:10BB00004887C923415C618CEC1FD3FFD7932E1C5F +:10BB10006F6587F677BDDD19880FB2B38978C708DE +:10BB2000F9AA8EE3A14EE03DA8854FBC6724DE1143 +:10BB30001D6408FC05F8B7D26E51E5B1B0CFE45BE7 +:10BB400004702D266EA4EB629D1D15EF1F2DB5CE42 +:10BB5000463E5ADAA287DF6702386F69BDFCBA0435 +:10BB6000FF7C09FA83967BB2DCB88E95B1158750BD +:10BB700036C677E17E1385EF3CC88F808F283E7CE8 +:10BB8000EF5CB4FF7842D79321BA26397E9A05EC50 +:10BB9000C523C981CF603D59C7C3A72538A869F51A +:10BBA000E17ED4F9DD67FF0CE7EFF0D18C4930413D +:10BBB00078CBB5F43FEB76CB36C80FD4ED7E19F9D0 +:10BBC000B53FBCF5DC6727DD022E29DBD91B2E91A2 +:10BBD0008FD6CBCF992C164F3FEAF699B2C1AF1A48 +:10BBE000DC81EF6B75DFC5EE933B646A699360D3CC +:10BBF0005095C0568AF76188D76781BCDF54337B84 +:10BC0000C7E61D5B8905EECBBBEC063FE8BFF5B68A +:10BC10002576B8372DDE15774906F67704C8123B2E +:10BC2000BC43B2C8CCDFC1FC4E5C2887F2EBEF4CC2 +:10BC3000ECBD51475C00DF47E8B6CB387FF1BCCFA5 +:10BC4000C6C17B06E997AC0570EEED138E5F01FF70 +:10BC5000D4D2EE71ECDD4F4637470E7FC7C969DAA3 +:10BC600008EF28AEA7F606CA0FF93AD773BB0367E9 +:10BC70003DD9BE42D0866FCBF1FD88D516C6A70D43 +:10BC800031BE074B200FF106FBFB5E9FD97C89B0CC +:10BC90002FA07FA752F8B7FDBD073D399BE9E7FF0D +:10BCA000A97726455EBAC1AE104762A49F586F03BC +:10BCB0007FEF464F77F1FDA52FE53EF9625E36FB3B +:10BCC000DE5FFCE3E7EB6A80F7BFA3FCF3066AC71D +:10BCD00000CE0678FFFB32FEFF8759A2BF5DE3DF8F +:10BCE0007F98C5F46D641C077E7F9AAFF3E94386A5 +:10BCF000F2F63EE0FD6E36CBF78C742A7ED817192B +:10BD00001562EF6BF6D74EDCF3EE0FAECE92F04D30 +:10BD10000037E46FFB9A6F65368F5FB89FD1991437 +:10BD2000AE45B9B0F99E81B8FFC20BC33DD1EF1447 +:10BD30007665B179CFCF60765BBCF359A8344AC041 +:10BD400057821EDF4FF67F007A02DEFB65FB00AAFA +:10BD5000860EC0CF6EF4CFB5F19B807B3DDF5712CE +:10BD600071DB40EFAA36C0FBE797C5BFC2DE6DE5C9 +:10BD7000709C3DCCFC4588A8A542D0C38CDF176FD2 +:10BD80005F81E795CA642BFA3B678312BEE777961B +:10BD9000B07317675B597EB0F689711BC15C2C09C3 +:10BDA000B073D88B53D97D30A8DF0DE57A6DBC23F5 +:10BDB000E6FB9C2C34819D5C769F567FD711B6EFB5 +:10BDC0000AFBCE10DF9D3DCCFCD7DA47B4E3D46D3F +:10BDD0009FF901C057A73B2FE5E27647EFE73F9574 +:10BDE000CDFDFB42527835F7B96A89AF231BF5B117 +:10BDF0005F06BD3B819F973EBB3D2725FAEFF7C409 +:10BE00000F96347A0CFE9ED090A1F0F7856C581EE8 +:10BE1000C8F6ED86712EBCC1D67F343BB007F4FA6C +:10BE20008537D8FA88D2CDDE23AD6176CF0CC94BE9 +:10BE3000FA9FE60596209CD7BD07DE17A3F8359B31 +:10BE4000993D15FE832CDF2927D0EF93DE5F66C76F +:10BE50007B02CF4C2F87F19CCFC4F9003F9B8B7D99 +:10BE6000F9A06F37575AF15D8936037B77D0626648 +:10BE7000EF20059F9EB41FF6DC87743C54025B33B1 +:10BE8000B6708824B8218FD584E7695AA6107C2F14 +:10BE90004ECC5714F6EF04B8B2675BBD00E2668F74 +:10BEA0002FDF16353EE1FE4103A7C963BB73F03DAA +:10BEB000E04FF70CC77224617C22EE25C09CE0F7AE +:10BEC00008BCC1DF632251F740477648216302BEB8 +:10BED000A387E736EAD7855C0BC09E3DA5E0B91E77 +:10BEE000C7EFD24ADC0911F8443F61E71640DC0A8B +:10BEF0007B40DC7F13F72216C410352EEA1C4F0D51 +:10BF0000E7FB797B583CB68478B3A1DF7C0B4930E2 +:10BF1000509C2D28ED9880766985D10EFEE9559FBD +:10BF20006BE1F2A66F770E6248B08F2F98717FAAEF +:10BF3000E1C978CC2BAE3274E3FCB183185F350CC9 +:10BF4000E3FB0D43880FCE4135EC1D8EFB77667801 +:10BF5000CFAA00F59F05E87A10EC2E5DF7F2976204 +:10BF6000F09DBC9EF7626C4405B95DB53705E36B87 +:10BF7000478E2FFF8E3C789F249C8D7A81EA3B4828 +:10BF800091E73C7EEF8D708EA6219DFA35B47EC37D +:10BF9000A01FB3FAE070AD81D6BF3368E78D70BFE4 +:10BFA000A56164F834D4D5417BD8F78270AD4CEBF1 +:10BFB0008F0D7A8D7D87036D94B1760C7AE346B848 +:10BFC000FF72CE2EFC8C30BE17D4F0E270C3E62890 +:10BFD000BA3F3288E9CB7331ACDD390F7B3F9CE44B +:10BFE0008635EF1DAF1964E0FE11F393C43A453F67 +:10BFF00092DAF7F8057CFCE5FC9D9FA971A42586E3 +:10C00000BD87AEC239B0037B86235E5206F17B4901 +:10C01000B6309ED711E3E8F94BCC7B1BFF7B4AE798 +:10C020008DDABFB33995D38DCEB31EE7C9F3E5C31F +:10C0300079F686AACC7CA01BA597C2E9A5B0F789A2 +:10C04000DB187C745C3BF885B6EE7160770E5CCAD9 +:10C05000C4F71C05DCD4FFB3A29FC6E19F3188D989 +:10C0600089E5CD1C5F146619E166FBBB405FB047F4 +:10C070008FF1F53F12D51EC7CB0CE3DF79B8DAF5A7 +:10C080002DE0E37CD3EB8BA28B0FF6290EEC1E8107 +:10C090007411F013F290669C734DBA7E4584BD5FB7 +:10C0A000939483FDEEE1EFDF8BF787A19F670CF39D +:10C0B0003381FFC5FB6D449D82FB64F55C3FF4BC9E +:10C0C000BBD6C1EE7B9021747D80D7AA8AF17C7D9E +:10C0D00036BE3E5BF4FBD23D7277B43B7B76D4DF59 +:10C0E000BD11BFF7E0BD67BCBC023E9E467EFB1A99 +:10C0F0000FE8DE1F3DEEFFA6F94DC0A9C3670F9EF6 +:10C1000075F0097C82DC62BF3CADFC0838D51E3A74 +:10C11000EAE4D7F335E7E3FB802BBF4BE908E78779 +:10C12000DD5A7E5ED9E931C0DFBB13FDEEADD8E547 +:10C1300007BDDA9307E8BC5D857CC5AA3D95786E9E +:10C1400075E56F7EF16B95F6BFEDF91F25108AEF4F +:10C15000B34AAB0BDE81AA7F6243820FF2478A9A11 +:10C1600000FAF26C90FD7D59BD3EFF1B970BE14F2D +:10C170003570BB72EEE97B6F007CFCD713461BD891 +:10C18000CD553BCC2133C6F7CBD1CFA2F593AC7EB6 +:10C190000FE62D57EDD6FA45B7FDFC472E37F29343 +:10C1A0009A61488532944168D9B0DDE80D01BE8EB0 +:10C1B000CA5E3A0D5945BA37027CFAFE00073CD9EF +:10C1C000B0AA435E6C4AECFD9D5A2013F81FAB3AAF +:10C1D000EF45FF6B55E78C0FC08F58A53B5F5ED7CF +:10C1E0008F7F756C90367F2AF043824EF4679A9F5A +:10C1F000FAF9732F5238CFFE25251FDFC9DCFE87E1 +:10C2000004897EFFA8232791FD3DF4751AFD23CAFA +:10C21000F3E00F98A3ED2AA3AB7BB784B91AB287DA +:10C2200095F5C65002C4D9F56D46BCCF54FF8B9F1F +:10C230003D097922F29619DF6B58F18B837FBE8618 +:10C24000D657EC343A2A18D856C915A1CF2A37F355 +:10C250004B043D6EFBE5417C370C7E073F56D065B5 +:10C26000C5CE7D2632BA37FE4A3BF6E13B9EBDE89D +:10C27000D371F27A7CE7F3A92F4CC0D767F74A2431 +:10C28000C5D3BB7FDD137F488076823E3DF4D2B5B7 +:10C29000FB3F8DE26A050080000000001F8B080054 +:10C2A00000000000000BDD7C0B785455B6E63A75B3 +:10C2B000EA9550492A4F0292782A09796808454838 +:10C2C000204822958460D206A884A001A3160F21DD +:10C2D000420211DA36D33A378511459ABE1707EE76 +:10C2E0001DBB2FF6145C54FA5EB43318314307BA01 +:10C2F000681F8D731123D0884A3325B6826D2001C3 +:10C300004470B49B596BED7352752A84A0F3CDF73A +:10C3100039377CF976F6D9FBECBDF6BFD75EAFBDF9 +:10C320000E00FE597B0A005676C8F6F50A969D3F28 +:10C330003B2F475359751AA804E3A94036F0CF554F +:10C3400007C0AB37E31F8500CDAFBDF4F29E04807C +:10C35000C60F2DCE6A7CD4F8F2EA68180770DAD8D6 +:10C3600092E4CC05687A6E6D92CB86CF4DDE243B8D +:10C3700097E279E3AF1E4E52A20096BEF77012E428 +:10C38000D2A8AE5186222ABDA32019E0812D736761 +:10C39000D0F325E07992DF7B4E76FBB0BC6484CA93 +:10C3A000FF8ECFAFD2CFB460395F91989ED3DB2C94 +:10C3B0000031589A7128A4CB7B58F63D2FD1B80F85 +:10C3C000014C0278D80AEACF2AAE5FA23AAED7A9CA +:10C3D00018F87DFCB14212AD57FCACDCFE548F9CCA +:10C3E00007F09714D7487B2EE3E00D8831A4AB38D3 +:10C3F000AEFC5EC5C8808DEB8A7192FA5E1A403938 +:10C400003DA7FE3D2657449EEE3DC64F9BFFC7EA23 +:10C41000FC4877A4341ECB2468EC603CA087E85825 +:10C4200021897756743E58ADE03E3C4DEB4CC4F14B +:10C430007658FC16ACAFD8FEF479A20FEB1F53FD73 +:10C44000CBA372A50FDF5FE1ABA9843C9EDF3F92D7 +:10C45000FAF9F6D74954EFB2805FA383C6C5DF2B44 +:10C4600071B44ED30273CCE076A4CB2885E2B94FE9 +:10C47000F23DEF08F2C792CDD83F3BD83FC82FE638 +:10C48000E0735EEFE3025FB921C683782DA5754D99 +:10C4900019BC8FAD274A7D6F848C3757894AF86C59 +:10C4A00004FE3119265F95B1DC828B1F35F83DAD56 +:10C4B000440A199F2693EF855F22BD4D1F589C5E4D +:10C4C000C4B7E925939B70F962E7EBC7E6239F7F2A +:10C4D000D1614AA8E6595C366992C081F66125FEB1 +:10C4E000B6E60BBC09BFC65D85A08C13CF1F8BA31E +:10C4F000E74F31DE5FD89C407CBEB2CB742A1082FD +:10C5000057393E17FCE0BDC9904CA5FF26E2E71560 +:10C510003670FA71DE154765A74238413FF375F86A +:10C52000FB03FBD121ABFBA16F07E837BBC70D7F36 +:10C530003E357CC3F16C233C6F0DE279097263A632 +:10C5400062F52FFFBAFC664FEE607C2FB7B97C6FA7 +:10C550009800CEB5619B25F87C94A230CE4A174E48 +:10C560003412DBBAD512E02884E0A9E1A8F1E9B2DF +:10C570007F6BE67906F857E353957F837C1ABE6E8E +:10C580003D9E837027500B83FB6F7A1CBC51B8FF14 +:10C59000FD7B65DF3624AD0FDB9F44FCFB763A7CE8 +:10C5A0005EC4676D04DCEF463AFAECFDD17158AE1B +:10C5B0008D15F5FE44F393243FB4E7FD1150DF8160 +:10C5C000FBD4E7EE8F8EB505D75FF03B395AC17AC1 +:10C5D000C007951DB66BF1613BD31100D15E21DB25 +:10C5E000525B71FE0B1BD3F31146B86085D4D604A1 +:10C5F000AA8FCDF7F22AD630FD7D91D1793C7F64A8 +:10C60000AA8FF6F553701F9B4A7BE975194721AE37 +:10C610008BC492A1F1EDF6684091B5A87B7935F510 +:10C620005BBC418FC712DB7633B55F82C7B85CB2A3 +:10C63000D914E40FFC5D061B783F1AB7843DEFBEAA +:10C6400093F96959183F7988865183F9E96DED7C32 +:10C650004E80097C3E016743B9B54A956B1572EE71 +:10C660003F00E17E40060B8D21E7BE3B15D77D09DB +:10C67000EB32ED993791F974B9E78C19D283FCAD9F +:10C68000F15D2FF15DD6D0E7BDF7D53F4D7A14BBF4 +:10C6900034EDFE28EF9FB1ECDDFD41E66FA9FEDA37 +:10C6A000FBA91FC1E0FEE5FBBEBE8FE458DF3E0BD9 +:10C6B000D3D3B7EF0FA98F527D8FC549F4F63D6EE6 +:10C6C0007111BDDE7D51BEB1D49E82FB8F7CD0BE88 +:10C6D000F7725E80E5F213BC4F971433EFEF85EEEF +:10C6E0006F4E4AB48FDD1605482EEE4330488FEE6C +:10C6F00089F001BDBFF7F2244F087FFCDFAE6785EC +:10C70000193CCC8F5150BF8BF837165CB49E95BF47 +:10C710009DF22F6B70FEE6CEFDE645D85EFEBBBFF8 +:10C72000E6911CEADBB5DF4C72EA9C29F02B4091C4 +:10C73000055B9B379A10EF73A87B61341EF7AD2F12 +:10C74000BBBDB9D7C245E0D08738D0BA1097469262 +:10C750009F43E131D261E6F28787C7F9FB68FEA605 +:10C76000EEC9203B4271915CE27994CF2AF1FAC57F +:10C77000F37D97F3C046FA610DEBFDE1D63DE93F4D +:10C78000DCBA25FF8DAC7BEE0F76DD82FF3F22FD0C +:10C790005438F81C0CE6F3D77EC2F597A39C4CEFF7 +:10C7A0000D9EFF871D3FD4F3FF3DF77D17EE7BF411 +:10C7B000F0FBBEF907BBEEE1F6FD6D75DFA3EC16ED +:10C7C00092677BFF9A0A21EB1F6EDDAFFC7FBAEE0A +:10C7D000017B48765BD390BE0DE0EF211762AD6A16 +:10C7E00097AC4D30B05DBF6E8CB24D16BE06FB1DD2 +:10C7F000FC370E79D221FC8DB560A8245CE48465F9 +:10C800006C6FC809EBD97E4075CFF4AC4B287E61C4 +:10C81000FD35FC2CA362F05BB05FFB1A9C1FFBB5DF +:10C82000271AECED0A3FFF989E5B689C682A7FF40C +:10C83000B918F7603DD97F469B59E787D8C2FC8974 +:10C84000C80CB3CEEF8880DFDB8DB80F114E23F814 +:10C8500024325543DEC7FEFB1C765E4724F8BC76C7 +:10C86000DBF7C285FD42A3EA8F8D4813FEA686CB77 +:10C87000006EA279589C8C09EB7B68DD4640BF5066 +:10C88000AC83FD4950FD4823BF321837CD6F0CC132 +:10C8900097FDCB907178BD1AEE0378AA787F575C2C +:10C8A000C3F767389C3F1E02E760596C67FF23029D +:10C8B000FB23589BF6C22FC9DE35CD349B12709DE9 +:10C8C00033DD9293609809FD47E7601DEA65E7F361 +:10C8D000BC6E77CF62ACBF53B02999E21373D171AC +:10C8E000837C2EFD0A95F6E432A2CF24397B5C4886 +:10C8F0001FCC33399FC722BE1B7EA98CA7F79DFB97 +:10C900008DF8FEDCBB46E5D3FB87A0A76C04C9F914 +:10C910000689FB4172B691F6AF1604DFE34FDD01E5 +:10C92000C4798EBA9FB969714C7F3DB8E74E440215 +:10C9300067B5BB5BDCB8BED9A9FD19B121F10867A9 +:10C940009A43E847A3DBF4502ED3F704C40D3EF717 +:10C950007369D038A2DB6D6A619CA6DB3F43DC259E +:10C96000D72DF2D511D7F36F8DF099B63F7210D74E +:10C97000F1E6FE13AB713DF643B2739B423800DB28 +:10C98000EBF02DBE87EB9849F5F4E038F1ADAF7BC5 +:10C99000A6C703DCA3F2312CDE5A114FF8E3806402 +:10C9A0001A42D3FE8AF88290FA8F3FD6B73F26CD3F +:10C9B000D0D59F70E8EB1B4A6784BE3FD47A6616D9 +:10C9C000384C1EEC50BB5972F9AEE14769F46D5A10 +:10C9D00003F3086F4870293534604201AFEF9E348D +:10C9E00011B7198C93C0659E0C2D749EE3CB6081AA +:10C9F0003B64FC07D2845C7B80DE27BE24E69B423E +:10CA00006CE252C8FF186ABC0F968E3791FF8A7C81 +:10CA1000E2A2735FD70D71C45F5ABF1FABE37E10F4 +:10CA2000E3A9607AF138907E78675ED6563AF7438C +:10CA3000E1F0CEBC052969D8BFCCFD9E91E4F7CCCE +:10CA4000C5B34DA4978ED57C6CA038D8F83441FF7F +:10CA5000FCAB4A4A4DC83AD6ABEB3FFC73E1A78624 +:10CA60008FDBAEB67F6880466AFF30DA93324FF7CD +:10CA7000BE95DBD7A7295C1E8B12E38C478122E38E +:10CA8000B98A57E7855CC47D5C10F7F5C3E03EC00A +:10CA9000772C0C01EE2B10FB3BFFAA2BA53664FE76 +:10CAA00067D5FD3DBA56E85DC2774148FB9BEAFE7B +:10CAB000687887CFF7A68AF79A120BCBEB6333C15E +:10CAC00047FA3DBEFE0E9657E87733FEC72A251F6C +:10CAD000FB9FE0B2911FBD543DE7C740C4656AFFAC +:10CAE00028739CE85D932785D6BBB47E29C72D604B +:10CAF0008BF0ABADF8EF6A1ABAB97EA3CECFAE8594 +:10CB0000903ACD4B7E753495FAE7E17E73479A2DC6 +:10CB10001887C9623A998E0B4765A7E53AE7C59E23 +:10CB20002C837162D03F1E5F6AE0B8E8BB25976B2B +:10CB3000699DABAAD20DA4AF0E575E8C5B981BC447 +:10CB40003778EEDB3D191383F54D55967A9FD05F0C +:10CB5000ECB71F55FDF6C3EE23B6D2DC20FEEFB8CE +:10CB60002FC6719C563B2770FD73A2F51B5A8E6928 +:10CB7000720B651E765D5E6DF13D8EA42E773AFFD9 +:10CB8000B49CE448B5C58E3DA0AC60410AD961159E +:10CB900072F1730FE3FA0EEFB450180ABEF8C591A4 +:10CBA000310A3E77163C3283CEC90470AEA5F8EC4C +:10CBB00012C9F926B128144AAC373439B874CB827B +:10CBC0004334CF9C9D924476F139755DF24E89F9DC +:10CBD00023FE59C9778714E4A32FB60A7E59B253AE +:10CBE000F05179757F033DDFB4D3A284F2D1325581 +:10CBF0003F2CDB29F865F9CC5D873248EF143CC344 +:10CC00007197FF4DE70AE769AC5A34C98FCFE754F3 +:10CC1000BF6724FB10BCAE9EDC90F791EFFE7E0A4E +:10CC2000CDFB92C9F9B8121C6F4DC9527E7EEC251E +:10CC3000E40B85E2E1DE19F14417F1771EF1D9C664 +:10CC4000B74639E89C7926F91DB4EF136369FCE512 +:10CC50003BC2E2676ADC7509FEDAE2883E7D7BE36F +:10CC6000F6B0F85158FC279C7FADE9B6605C362BD6 +:10CC700038FE50FBAEF1EB80DDA5EE4B57918857A7 +:10CC80008F8F737942E5F3E474B13F5AD9D5FDD55E +:10CC900087CB495F17589C63097D889D6EC7A9E6BD +:10CCA000359616901A2CB34E7883EAF7B4601D714E +:10CCB00072A49BF8BD7BED1F57C462FDFE64E92D95 +:10CCC0002A17288E19715816A48B7D59945DFA166F +:10CCD000C201D5CE1AB387E3741B46E4D139C479B7 +:10CCE00088CF500E7A0DD7D0DFA568EC1B43F02813 +:10CCF000B746803104BF0A7BACAE7E47F2285DFFA9 +:10CD00002AC5A16BBF333B47D75EED9CA06B5F95F7 +:10CD10006EE7737CA8E0F2FCD5B8CE43DD663B41FC +:10CD20007888704908E282F46E267A0F4D797FCCBC +:10CD300003B89E927423AFB384626BA4E78D228EF6 +:10CD4000F8E000DF01F3FBA61AC9F738EEF383D54C +:10CD50004B98EF2AE4130D644F6CF209BE6B2C7CE8 +:10CD600084F97913A07D85FDEB7E21B1BC5C5A6C02 +:10CD700062BBB216DC317E69301FAD29395DCDE36F +:10CD80004C91ED84E7922DFAF6DAEA19CCC7756179 +:10CD9000F2B25695A3E1F2359C0F7F53787934C9EE +:10CDA00081F9E9FA7B82DF4842AE7B51AE937D3751 +:10CDB000941C1A90A361FCB72A5DE837ADAC907360 +:10CDC00063480E8D37EBFB69E507E8E71971033E11 +:10CDD0006AB372F9A7363B97FFAB2D99CB8FDB1463 +:10CDE0002E3F69CBE67255BA90CBF1ADB8CFF121A9 +:10CDF000F2B9DA6DBEDE390A979F8702063E3F8799 +:10CE00006E5F1BEDB0A9FE09BEF777E9B1DC7EA627 +:10CE1000E8139B941BE4E3AEC0291BD92FF3C06732 +:10CE200022BD7C0FF84D6417DE0B01AEDF0F68D01A +:10CE300063B900142E17818BE3B20F403F48E964B9 +:10CE40003703C70DADDB5F7FC68BF3E5915E267BB5 +:10CE5000015D9BD073B24FC52D3ADDB5219DE47CB9 +:10CE60005CCF893924676F3701D9A7C489A46FE2E1 +:10CE7000557FEA9DC2C9110BAFA1DFDF4D5BF84FB3 +:10CE8000E9A1FAABDA63A67EB8BFF5AADFC5710DDA +:10CE9000536CF6B6F58E60BFE7D2855D1093E6DA87 +:10CEA00042EF5B4928331D4EB667347A518348B54B +:10CEB000A8C776ABFDB5F7C79B3D66BA0F58E26CC5 +:10CEC00031931F53B6654244E01AFBFE6E9AE75F4A +:10CED000D313F5F4093922F865A8FDD3F6FDBBF2AA +:10CEE0008DC61F4569AED7685EA3013C848331AE11 +:10CEF0003E9970017B1DEFFFBE74E9BAF6595ED111 +:10CF0000271B26929EAC3638C7E27EE4753923484B +:10CF10005E1C56FDB1BCEA5307330AA89F6C97B05C +:10CF20007D53E5E408D2FF9B6CDE54C2E58CE48CB3 +:10CF3000F829C99DE7653BFB4F20F4E3D2EAA4340E +:10CF4000DA87D925852C274E573BF2493E7FA3E24D +:10CF5000FB3975A573E916F78867AA9E4AA571DEA5 +:10CF6000291C994FF3CCAEB2F0B93D7D349DFDC084 +:10CF700063054BE7AE86A0DCBA9BFEC67EA7B7CBA7 +:10CF80003CCEE94A07C7A7EF26B985F2A26E8BCC43 +:10CF9000F248B3FBDEA906D6E36B4ADEB771FF2A7F +:10CFA00013907D7857835E0ECD71EBEBF15B847E41 +:10CFB000FDBEF65D6FBAFE9E2DDCBEFBDC26E20CEC +:10CFC000B5E89F7A10EFF24A87E933F2535A25E623 +:10CFD0000B4D2ED5560BBFB5B672C1442BAE3BC61A +:10CFE00037592279575EAD5490FF3AB3529A146A7A +:10CFF0002FCEAC7C88E33E33B73C64A6FBF5983477 +:10D00000F75F89FF4DCF972B742FBD09E723E61FEC +:10D01000EF7BFF435ADFEC99ABDE1A45F2BF130FEB +:10D0200002EDB32F2B8AF6F9F0F68B09EC770C9C06 +:10D03000838D66B2AFCAB69F1F4DE7205C0E0029F4 +:10D040005FF237C19D7C5DBB50ED379C5CF3964130 +:10D0500036F9C5BD12F825F4437A4B93CA88DEDE53 +:10D0600014B351949965424F15BF6E235CAB81F5A3 +:10D0700054EFA822AB689FC1F78AB302B68F69BF8D +:10D080004AFA41A75F67050C5EE2936957AC3A3DE7 +:10D09000DB1430F03D6429E8F5F7BB11D179845BEE +:10D0A000B955AFC72BEC7A3D3E6B44F436EA77476F +:10D0B000B25E9FF7BEDDC0F1892A6582EEF96C6B26 +:10D0C000AA8FE8BC337B8A6E9C1A10F7D0B3B1BC30 +:10D0D0000DCB99CED241ED741F3DBBA84A375E9768 +:10D0E00019B2293ED32F453AB7215FD658DDFAF55C +:10D0F000014C273C2F47887BC6261A1FC7696AFD4B +:10D100008AF96E6AEBB7EC5F4CF077E8DE9B78A0AB +:10D110004B378FB3C75E4E6E78FE71E7EB543E110E +:10D120006BF5CA385E41C05D8ECB8449675A5EA7F5 +:10D13000B2D52AE67924127189A179C5BDE62332D8 +:10D14000ACA578E96583A791F4CB7A83AF6301D26C +:10D150007B54B2275279B3C1333703F9B6A87F6342 +:10D16000790CD178A5E3752ADB77C85E4B0CED7B93 +:10D17000F58877280EDB21B13FD06433B07FF945C5 +:10D180005C47DEEA1039FDC54FC4BD2E24BB9217A3 +:10D1900024505C2F83E33FEEF228978C3835EFCE96 +:10D1A000E2F8DEC4ACD207683E396ABA55E85F637C +:10D1B000FF80FD9B46EDAEEE146C8F2C177207EED0 +:10D1C00030B1FC8A34B8A3D5A01FEB21F31DA6AD66 +:10D1D00024FF3ECD10F237F2DF41A1BC8EC8788F1C +:10D1E0003C8EDEBB5302F24B34FA6AABC145FAFB0C +:10D1F0003F67A871080AFC61BF9AC4A33B295EF08F +:10D20000694694B867AA56DE34513CCC6EB4939DFF +:10D21000177FDC6D1F8774762614ECA7FDEE3CDECD +:10D220005342E7F7D30C45DCC75596AE2EA5F93629 +:10D23000CB40FD3BEDD347507FF039C5FD2CC525D4 +:10D24000B06B7C83F23ED96770C0C4FDB4F9D79748 +:10D250001DF7D13AE28FBB96F37AB36DCA5807B780 +:10D260003BEE1D47FA085FB70C7D8E3FD99098487A +:10D2700072AAA6D49E48F93E35CF2048B7314E5EFB +:10D2800092EB7603A8F5D987A763FB8E813AF80164 +:10D29000715F4FF926A305FE1158AF9106FAD74EDC +:10D2A000B7713C446BF74211E22B6BEDEE5A1ACF8B +:10D2B0001E369E36BE2F63F6E175B984935DB58741 +:10D2C000ED896E62E06FAF4A848B968F13292B93A2 +:10D2D000882F171A943C2AE7C6795ECC48A4719D22 +:10D2E0009954FF24CA35B2C4C1F2E7B36749FE4C72 +:10D2F00037B15C5F99BD81EF0D3BCDCAEEE3099478 +:10D300004F80E7109F9B7EF66047178EBBD2FE15BD +:10D310009F2FE4DF3B495F5EE831C4913E5A280FFE +:10D32000ACC70548C32943B04EE76E61703DAE0CF3 +:10D330002B9D97E0FAAC585FA4F6FF28E3DEDA27CE +:10D34000689F175B799F57AB67787D1C6C94910F32 +:10D350002F66DF7617CD7B71032A17C4B4931A4961 +:10D360008F27478A3CA9047736C5D70EF508BBB28C +:10D3700003F7D9450BF322DF4C0A8E77B1F8B46D71 +:10D380001C8D538C5614AE6B51C00C0AC90D23F87A +:10D390002D285F3A8B17BE9E9E407CA970FB711AA8 +:10D3A00007FDC4F22CD7A10C8E036BF1CE9F7EA794 +:10D3B00078E74A555EAD2C5A93CB7923D325D6F71F +:10D3C000D33205DFAF6CFD92F105A3C749FBDAD478 +:10D3D0007A91E59A56EF5D23E4C14613DC5F8365DD +:10D3E000D3DFE4FB299E8672701DC9C526F8BD797E +:10D3F0005588DD061DE707E4E07843D0AE336E962E +:10D40000594F84D36BF454F37C35927D2EC5FEB214 +:10D410005FD8556B447BAC26C23E57C2FAA5B1BF5C +:10D4200012F514FB5C03D6EDCF7F23EAA3ECFF6873 +:10D4300070A25CCD4C98C37587FD8F54CF198B7546 +:10D44000D4971CF3C4FDFE2A237A8E97ED4B1BDF85 +:10D45000275CA88CE078D750F8CD69FDADCEBF1819 +:10D46000D42E4B423ED68B737FB66A14CB2FC87036 +:10D470004D30907CAC1D934F72C83A56D86F498896 +:10D480007D11FEBE89E7D38A783567F6DC178DE714 +:10D49000614EE7D3E7A5689A6F1FCFD7445953F879 +:10D4A000FCCE1C4FF4587CEFB014384972B279E6C8 +:10D4B000914CF223F764DA557BA03F83F6651E7822 +:10D4C000D8FF98A7C61D0CC89C6457D5D9324CD438 +:10D4D000BFAE3ECC5E033FFB27B5D5E1794221715B +:10D4E0000B99F21C7AEE33231D261587E638C758B0 +:10D4F0007A0FE9728CA5B8A9847462DD94D0932464 +:10D50000ECF69D8A44E739DBCAF7C391B71CCFF329 +:10D510005CC38EEF6843FD884768575B17979B3362 +:10D5200041C85D63C0ECC471561C07D64715721321 +:10D53000CBFD0B5D0E08B5D3A6AA78C67489B828B2 +:10D54000E2EA245C13D2C16FC07D4D78EDED9DED14 +:10D5500012F58BE27EDA3E4E1B011D117141BC714A +:10D560001F9CB40F1AEE88E744B217DFF8F660315B +:10D57000EDE31E95AECE4871CEFB5F8DF0915D1050 +:10D580004E678D4A4F38BD8B6F90CEC53748E762E6 +:10D5900072361287A6573BAF1A4EDA7905554ECD33 +:10D5A000AB776C5B2F05EBB5D50EF6FB343A07F382 +:10D5B000CF76E55AFC331CDF4CCBD4F483901B1A96 +:10D5C0008E1A7D9A1CE8A4FB421D7DB15BF5F4C563 +:10D5D000F2798A69FD1F2C97E428233FAFCB4EDEFA +:10D5E0004A71C8989E0B740907DEB1693C7E4CC72E +:10D5F000D74076774C6B37F71FB49EB07568F23022 +:10D600007C3D9A7C1CBC2E554EAA725393972528BC +:10D610000058CE912C96C82EF6E8ECBD5278506793 +:10D620000F965B1F0A8B77FD275DFF3B92D7E8DAE9 +:10D63000AB94A775ED77663FA3ABCF74FE42D77F5F +:10D6400076D1565D7B8D7587AE5E1CE8613BF350ED +:10D650005B25FBC5B79FE9677BD3AFFACFBF57FD0B +:10D66000E737C87FC6F3F916F9CF581E6873F2F38F +:10D67000FFD956C4E5C13617973D6D6E2EC3CFF561 +:10D68000AC57EE3692BD5AD4B391EDDD47D23DEFA3 +:10D69000903C9B6DF0B547E17E4C3ED12173DEA4FA +:10D6A000C7A9D3B76BF74F7997ECAAF88332442810 +:10D6B00043CBDF982B32B842E2F131D5FD40F9D2AD +:10D6C000316A5C6596119EB0E0FED6D88CFE91B8AA +:10D6D0005F87C78AB80A896BBAFFACB702DF9BD6EF +:10D6E000D74BCE76E0E75EBA57C4D2EFC96752DCBB +:10D6F000D624F5BE117F2C46F0D278B24B86DB29BA +:10D70000FE91106F24BD5E478D48E75C9CF3667CFC +:10D710006FBEAD83E342F30E3CDEBC009FC313DE5D +:10D7200042B69334BDEDFDD070F5D61BD7DB87C96B +:10D73000B8A43C0249C40FBDB1468ECB85C749761B +:10D740008C1576F0AC76AF1C4D7ECC7BC0F799B3D0 +:10D7500055BD8A78ACB3C405CFA1C6FF3576A33FCB +:10D760002B9AF4CE33E5F45ED35185F108B7133428 +:10D770003F47E37B94F7EDD4FFC27160FB6D72AF5E +:10D780002FB04919EC770CE70F69F477B7D533DF81 +:10D79000EC6BF370E96F6B54F9B185EB6FB4B57254 +:10D7A000FDAD362F9707DAD6A9FCB891DB0FB63D51 +:10D7B000CBF5436D3E952F77F0F3699902BF2B634C +:10D7C00055BD692DE5FB17308A32C80F8A17AEC3E5 +:10D7D0000F4DC9423E87F3C5507C8016B342F726F1 +:10D7E000F3511F921CBB07BCE328EFA47EE946134C +:10D7F000E7A57E4F7EA8B36D36513C225CBEDD05A9 +:10D800000AF3DD607DEF71DE88BED7E49B8C7E1A63 +:10D81000E9298BFC9093E208DFDDBEF0B4101DC354 +:10D82000CF27F6C5948CBE6E1CC5218FBDE0471274 +:10D83000CE16BA0EB8AE71DF1BEE5776A780AAB728 +:10D84000BE1B7D68299A68DF87A32F25CB559C597D +:10D8500018D467917CE6B11C6DE33C68B3C5E77BE7 +:10D860009CFCBBDF46883C089B2BB526247E53914D +:10D8700029CEE3E678574526DB07BD2FFC339D977D +:10D88000CE111C6F09F79BBEEC291F196A2F85CB9F +:10D89000D395F68B7CEE06E979C9C07A7EA5013C6A +:10D8A00094E7946F01AB84B49ECC2CAB13F3167346 +:10D8B0005EC705BBF1BAF7A32B5BCFF3F843B61BEA +:10D8C000443ED5CABD85F685217182CD99929A9F35 +:10D8D00062B47F660DE277A3FC5CD25FAF930F3F2B +:10D8E00038FDE9FAB53E4E856A87F09DEDA9E27DE7 +:10D8F000984F1ED177BA0F7079A88C49F3AC27FEE8 +:10D900003249011BB59FDDFD4D06D9D1676F9F627E +:10D910002F85C1F2F046E59F26F73439F8A459FD6A +:10D920002E66208E933081E238DA7E6CC9D4E723EC +:10D93000849FB3BE09B861486FDFAB225FAF2F2A67 +:10D94000D227E196BBBAFF709CF2A3C0AFD7DF2EFF +:10D95000AB8DF360273638598F03EA71325D71A5BC +:10D96000BDA1E35618851F044667F6BD21E7A65DF5 +:10D97000CDB7D881257DAF14DD10302A21FCF69A71 +:10D980004A6FE9BCE9C0FE64838BEDC068BB8807C1 +:10D990005558A12082C6FDF6622E8D3B4BB513D69D +:10D9A0009BC04FFB36B268824476E2CBF1AE2EC20A +:10D9B000DFFB54712CC79B29B67A73501E55C8D50E +:10D9C000C90BE8DC2418F9BC6A72A6CEF667B36C02 +:10D9D000A0F8B693F73B1C2F80C05B9BF03D579798 +:10D9E000645F0F83CFB1AB6BFF71B2EB87B34F872F +:10D9F000934FE1F243C33D1CE797E3DDC7689D9A6F +:10DA00007C095FAF16376E8600F3E9CF5CBBDCB4F0 +:10DA1000AED59222E433F85C37E17EAFE87A08E8CD +:10DA2000FD7C59E4C3F657097F28FC7CFF45957BB4 +:10DA30004DAABCC88F076B32ED8707587EF655E5B7 +:10DA4000B01F2265C5A972A33FB33624DF52B36B62 +:10DA50007AD5EF4CE6744578E59078C1A54C713FD6 +:10DA600037C7FAA54E0EAE68FD5A27BF56E40A7EA8 +:10DA7000C86F5726523ED96AF57EEF4AAAFB0AC9FB +:10DA8000C5651DCFEC3EA8D07C5B7EF221EDF30195 +:10DA90009B90CB0713199B3E499F1734C77A5ED5DD +:10DAA000FF5B75F75D4766BECF7EEE9CCE115EC212 +:10DAB0005FA34BF38F3579DDBCEFF393A4B77BA560 +:10DAC000F3271F25FC5EB5B07DD64474C7B35F1D38 +:10DAD0009585FBB4EB8081F16DAEB26C93396EA885 +:10DAE0008CAB8D0AE2D2F7F9B5F39534FAB4F93478 +:10DAF000BA7A2511A7D0FA8DCE12E7A74E8D231C36 +:10DB000031F59CA37D39BBFB5689028C03CF637B27 +:10DB1000F2E8BB1D6D5FFE5FD949F341D8CBC70D5D +:10DB20006B1E36235EBD1D9B4C1C47FE9EF6914628 +:10DB30006F7B14F8683C7081624FE2909DC84FC4BF +:10DB4000451A93C86F1375C9F6D6D724C74AD4921D +:10DB50009D486C2F56C97E526AE1FC3F2B6CE472E3 +:10DB6000BDE454A89C26B98D227EED633C6740CB72 +:10DB7000187A7EBBD5996C34D0BDA2881BCE8D5D42 +:10DB8000378BB731099EA4FB0DA3D96B4A22B95834 +:10DB90001BA3E6670A9CB47CC946FC2D465C8CB18D +:10DBA000A018B17F23DAED26C4B76EE9BC9FE75217 +:10DBB0007F7B31E3A8E55BD27B84E35D075B669204 +:10DBC000BD73F7FEFF72C885CF3F8FDBC871D8BF2A +:10DBD000F46CCB7B09FB2C3BD2CDDF3D35F97B666A +:10DBE00010BC2BA09FF591867F03F470791FF4730E +:10DBF000E9013BB72F0427978BC1CDE51268E1F20D +:10DC000083515B9AF124C0BC911B4C5F421087E5A5 +:10DC1000B14F4CA279EC65CF8E6579A3DE4769F7E9 +:10DC200026E1F71A35B136BEFFD0EE376E3678569C +:10DC300064897B2C71DF7932CAD7CEF71DAE7B09A0 +:10DC4000EFBE5833D077957D89429E78CF02C75F6B +:10DC5000FB4C6AFFF30AD70BCAF3453EEB6585ED33 +:10DC6000B3A9EABDA3266F0B6E1579CA7055F42FC0 +:10DC7000E9D7E7A71550D092DEFF46E1FB8A695746 +:10DC80008CD795C77F53CF5541BCA12534AED19ECB +:10DC90009C24E2826ADDA2D839CEF17C9690937DF5 +:10DCA000D106E613FCA9B34E223AC5BE4EEDFE776F +:10DCB000951FD1E14C0A7E1738D5E8DF4FCF57A822 +:10DCC000F21EA531EBAB62E24FE2C72EBDFC87E44A +:10DCD0005B395FE0369504CD8F9570AC8638E2E70E +:10DCE0001E99F916FAB974819DF57D1938B99C0E03 +:10DCF0006E2E91BFB9AC848D5CFE083AB8AC861E1E +:10DD00002EE116A7932EAC0D56BF2CCEEF6376CE28 +:10DD10002BA95A6AA03875C1DD229F74385CFEA019 +:10DD2000E2383C2E789027DD082E1E415F382E63A6 +:10DD3000B2F91C69B8687844802F99702C81804CA6 +:10DD40002585A6E9FD523C8E542F0717D72B86C593 +:10DD5000C3DF4EF7EB45018F91E31CE178940B3E56 +:10DD60000997673DEAFA9B89D6C4A0FCB994A570CF +:10DD70005D934378DEF8BE385C3E69CF0B46945D18 +:10DD8000545094FFF9C5B31C172F9858B69A52A156 +:10DD9000CE655DE2B878C1D4B257D2B0DEFFE2659D +:10DDA000511F5F36D1E40458B3E6CA9CE9587FCAD4 +:10DDB0008C58B01FE858437146CBA3C0F2DE6A11FD +:10DDC000CFE574E127623F2FD95B1A7D168BB0EB4C +:10DDD000721B94D512E2BC3ED57386CEB3361E2894 +:10DDE0004E96AF37A976CBA52CD52F4F704C24BAC1 +:10DDF0003F4B75F7921EEC8B12F7A25AFB0ED52EF5 +:10DE0000BC44397385439763B25D17B3AEF1BCEF81 +:10DE1000533307874CD99EAFA97DE5886F33491FDF +:10DE20009F9B70E4C98023C82F1282D680F4B7BBB1 +:10DE300054FDA1E5DD93BD84F816B83DED246A26B6 +:10DE400037F4A7B62A3C9E9C4DE3C9FD4B883FCED4 +:10DE5000C51E317FCA7C3D46ECB72A1FF6EE7BFB20 +:10DE6000D19B44D50D21FCBC72DFD75F7D84F8AE19 +:10DE7000BC607352F7BE68B1EEA9DDBF584DF21019 +:10DE80008D5BDDF9D5F8FFB62E0B7F7734B53BE718 +:10DE900001EA5772E4443AAD67DA89403B859BFA60 +:10DEA000F6BE7F93E03BEDBEE8B2F47DF4E8695541 +:10DEB0005E9FB60AF9ACE587ACDA2BF1FDC92A35CD +:10DEC0005F6C15E501E35BCD074C7CBFA3E57936BC +:10DED000AAEB3CABDE3B346E5924F2837DC2BE55C7 +:10DEE000F01F9DC7C9C78D61F159F19D6D734758EA +:10DEF0007C764BF935BFDB0ECF2329CC56F3485245 +:10DF00002085D7A3E6590EB57E2D6F6409B88AB374 +:10DF1000D92E75CBC48F8546913F5D213FE6B4D3A2 +:10DF20003A5372F3451EABC8FB5D1A21D617A5E61E +:10DF30000BAF7A4E061BE363E6FC9AAD789C8BC868 +:10DF4000FE3DF8DFF8FB93A5EA5AB4F3F3E03A8913 +:10DF5000EFFF604B3CF3D8F8172C2E5ADFF817462A +:10DF6000BA08A7F16661076F7DC1B28EEAED6B2337 +:10DF7000BD24177F13DB3F9ABEB36E8F10F95CA4EC +:10DF8000AEE81E6E7C5A7F1AE9DBA66CA15FDA55FB +:10DF9000BDABDD436AF7D7EDAABE5D15953992FC9E +:10DFA000A7817EF6D1BAEF90DB553BB880E824BB61 +:10DFB000AE7FB4182742AC63FF7B778D20BBF4554E +:10DFC000A37B04E57B5D389A1603D7C9DF2AF4E307 +:10DFD000665C27CE507074037FDF53F0AC51E0A233 +:10DFE000F2E19E36177C620AE2AEADA342DE596EC4 +:10DFF000A6FBBCC5C07992ABDEFE97762BD6573D0B +:10E00000CD5F1020A9D931A45F0A0FC8FCDDCD6D0A +:10E0100007449ED31E35EFD2926C002584BF229414 +:10E02000485042F86844769CAE1EE51CADEB1F5389 +:10E0300094A66BEF54F35DB43C65CDCE8C75DDA238 +:10E040007BAFA447E45DC557E6EB9EC397E21C1483 +:10E05000E13FE14FB6C874DEA606007EE9A0EF8678 +:10E0600036423496B7F5EACF0BEE1FE7CF58D43CD3 +:10E07000AB88A346DDF7E916DB0CCEC7B60C937F61 +:10E08000B5453B3763608CEEBBF401BCF5F95893A2 +:10E0900020E3BF161710BEE82962FB057A83DAC7B2 +:10E0A00080CF1B82B776BEF64007EBD544B71EF78C +:10E0B00091F57ADC4779F4B8DFD4A8C73DA5458F40 +:10E0C000FBCDAD7A7C1D5E3DAEE9EB6ED3F51FBB9B +:10E0D000B14C57CF7AF647BAFE39BE5A5DFDD61D10 +:10E0E000F375FDC7752CD4B58FEF5A76437C30C1DC +:10E0F000BF4AD74FE38389077E7A4D3EF0E23F96D1 +:10E100008FEAF71645883BC54987DBFFA2C046204A +:10E1100079F77DF9E04FE17C7083F2F3A0AA6F6795 +:10E120001D107962B36C56CE2343BEC9263BE20272 +:10E13000443A496F6876805B9533B36D46D61BB31E +:10E14000460839A4E56F85FB6F9A1F31BB480A8BDF +:10E15000D3E9F3C887BB7728ECF1EBEA138E824C46 +:10E160007AB3F0CF4A7B14CE33F184B8C708F717DF +:10E170000B029E76526F937B514D2BE43F1EF89A13 +:10E18000E239256AA9DD7B84FB3950BD9DE5BFD905 +:10E19000AEAD43C8DF707FF31159D81D970D1EB681 +:10E1A000432D24FFE4A05DDA5E2AFC4ECDDF7C37F0 +:10E1B000C5139F43717B437F3CB0FD1D10F76AD0B0 +:10E1C0000174EFD43790FFF30F75AE5CFE0E96F33B +:10E1D0005D5E9436D4D1FF5F80B2D11E9824C233E5 +:10E1E000F4734B8E272507E5ED2949F8810B8A3E0C +:10E1F000F9D52B48EFCD39625F473674701CE8E5DE +:10E200007897929338F81E2ABCD4E25E5A1CACB3BD +:10E21000CDCFE5885C27FB09E1F1A88041C417BC9C +:10E220003F15DFA17C41444D09DA1D17D699D8EE80 +:10E2300000D56FBE57DD172DBED0A0AEE3140ED1B2 +:10E2400088FAF5DEAE3FF0BE2C4FEE55E3122D4EB0 +:10E250004AA55C34C6C6F919E09AE814F1272DDE08 +:10E260007093FC5DECA4E1D6BF3CF9735D9C0A762B +:10E27000C6DF501E6770DD62FC5355C22E385575DF +:10E2800013E74306C73FC771AF7B5BDED3F1FBFDEE +:10E29000AD1FE8F87B81F7635D7B20A1DF4471BD92 +:10E2A0004065CE74B22B70DF1B683F03BB47CDB80F +:10E2B00007F13CFBAA65D28DE4632F4FFE82E73F56 +:10E2C000D1D6C3FBAAADEF64DB71AE07DA025C8680 +:10E2D000AF4F8B0B68A5F9F7C0F241CBBF1C2A5E8C +:10E2E000A09D9BCB39E2DEFF11D97552F83DCCCB16 +:10E2F00070799589FDC8136ADEEB0935EFF5849ACC +:10E30000F77A42CD733DA1E6B9F6996CEB289E7081 +:10E31000421271FD3F8EFEEA05330EFD528AE7EF91 +:10E32000E85CF595F57F6520F9971048A5F3F4B3FF +:10E3300024CF1A7A2EA13B318AF3E0BD9964279E3F +:10E340003178F3284FA93BE7641DF95B6722BDE7ED +:10E35000C802E9FCF50775E45F9D318B73F8C6AF21 +:10E360005FE773F7471C94F20FBD7B24913F660B68 +:10E3700098E9FE6857A2E7E7343EE559F1F783F8DC +:10E380009CF8538B47F69984BDD7A7DA7D9B73C45D +:10E39000FDCB3FE608FB532B5F56CFEB1B6A5921A1 +:10E3A0006FC8E4EFEFAB2D9CC78DF3BB280FC5BB47 +:10E3B000CFC2F18DF0FCA4FCDF59FC52483CF3C500 +:10E3C0001C078F93902EBEA34FB83382E33210E820 +:10E3D00049A51CAB017A8F8A7CCEB314E7A573BA2A +:10E3E0001874F9512FE608BBB4F9ED5327294E7480 +:10E3F000678EE7DF721283F1D2E6E8FD1C5FDA9BDD +:10E40000A3F07C4827FB7D16199EA0FD69B606F88F +:10E410007B9AE1E2D443ADFBEC033DFF94EBA0FC1F +:10E4200026652CBDAFCD8B74EC25DCB5F56A740484 +:10E43000C7B9FE39D0E2AF5AFDC8CCA732E9FCE437 +:10E44000539ED835F4E6111587132608CB23537154 +:10E45000032D8F2C97E5D439755FC3F7299023D608 +:10E460009F8F7A97E2EC9648D415F9C171B1BF87B6 +:10E47000EE511A5A1CAF1C441C966D1FC7DF15685D +:10E480007468E35E49757D9813720F84FC26FE3F25 +:10E490008FAA08E68FE67D1F9CA4FF6FE1C117C716 +:10E4A0004D247CB5F7C2F1455C5308CFC306BF5974 +:10E4B000CD633B9DC371EDC39C27A6E1FB7DF1ECD1 +:10E4C0004BE9613FB26FEBD7A99427DBACDE433554 +:10E4D0006BF71F9DFA380FE2E1A5B8C3E07B0FE0B0 +:10E4E000FB138BAA3F2CDAFB638CBAF79F8976FF6C +:10E4F0008DE8DFADCA09ECEF33A87165D23703713F +:10E5000065551F15AAA2483A2EE2C98554929ECF9E +:10E510008D61FD54A0CD8774D1FE3D2979396E33CC +:10E52000A0DFD5F8B2BC6835C7E38A60239716D957 +:10E53000C17AD1F29188C30CC4939E7E4BE7D7FF7A +:10E540001F646349F49050000000000000000000C8 +:10E550001F8B080000000000000BFB51CFC0F00330 +:10E56000095770A3F2EFA2F167B1A3F2E5B850F931 +:10E570007CACA8FC1C34FD84F03F4ED2D4C73333AE +:10E5800030A403713E109733E3577B8B89B07945F4 +:10E5900032105A14487B027131106F116660D82610 +:10E5A000CAC0C021C2C070549834F711C2AB05A9CB +:10E5B0006BDE28260D2B29A2F28D741818527419BF +:10E5C00018D6E941F89248F2478162C63A10768E31 +:10E5D0001A038333902FA088DDDC5CA0BC0B50FEB7 +:10E5E0001AD41C0020DD2117680300000000000081 +:10E5F0001F8B080000000000000BDD7D0B7854D558 +:10E60000B5F03E67CE99772627C9242410C2490861 +:10E610001224E024241010ED24040D8A3A022A2248 +:10E62000CA2462A5081A116B6CD19C900701C1061F +:10E63000B4BDA828138C8A56DBA8A8D4D67B07A122 +:10E640001AF1D16051B16A1BA8D7DA5EF5435A9529 +:10E65000AFBF967FADB5F7C99C337980BD8FFF7E84 +:10E660007FFAD9CD3EFBB5F65A6BAFD77E8CCB2D5A +:10E6700033ED3B8C9DC03F48CF971863998994B187 +:10E680000EC6CA31D59D91146B3EC22293303544DB +:10E690003D4B9AC59883F13F47B0ED73C7644CBDBD +:10E6A000862380A9F2519F9B979D6089766A1E8B75 +:10E6B000761733D68C9F7244E320634A76E8C10D07 +:10E6C000F98CE53227D553826EEA47D1EA5914EA2C +:10E6D0006749D15C1A772E53D854C63CCCFC0B3317 +:10E6E0008457CD2A4AC57ACC9FCED8F4C43CCD7489 +:10E6F0007B236B55C659F22A5BD8EDC7F6319AA732 +:10E700007A3B8B65C078ECEBF9FABC4943F763A61A +:10E71000E67C9A47870E45CB2097E90C3D8478909C +:10E72000069FD7B4FE79390DC493655ED3869B5797 +:10E7300073CA69625EC141E16911F332E7D1FFDD5D +:10E740009CDF10ED92E7315479CBE870762D74613F +:10E75000A40C3E3F15E707DFE689F9A97E27D10D16 +:10E76000E6356FB07929AC3E2CE50F9C97A2B9092C +:10E770002FE6B88ADBD9AA4C49C0B78469BCFFFE32 +:10E78000F143C4970E8D51BB6A165D82F3073EECD0 +:10E79000253EF48709BFCE6C283F03D3F04203F037 +:10E7A000D9B2673A2BC676FE105B01A9D31F6573F9 +:10E7B000A15ECB378E85C8972C5846FD9B702C6286 +:10E7C000B20D3FFD7C2CE048C6D7CED18CF79344E8 +:10E7D000FF9D9DE7645F0DDF1B104FE503F162B6FF +:10E7E00007BC3560B9C91F261FECEC14F80A0E4EA1 +:10E7F0004FD5ED68553206F2416BE6549DF7031D87 +:10E80000651148F4B749671D889760996CB8005F37 +:10E8100013AAE3D975F0DD85F382FE6FF746D7E3DF +:10E820003C9DB25E25C3373DA25579A1A855E5F3BD +:10E830009BED28F61C01FEDA5253905A07E9CF9956 +:10E8400034281F6D6D84B9007FFEA4D14DE9571F98 +:10E850008CA7790CC56FF7346A2DD6757A4FF4EE14 +:10E8600039A7E1FA0ACAA1713A63D9B52D39DF4552 +:10E87000BECBD14B1D9067159282F3F220DC90EF56 +:10E880004438CA098F9D5C4E09F910E4F8F48423DA +:10E89000610DD2092C1296A0DF8C9D2C143779D3F0 +:10E8A000821F132F8087C7B0BF8260C78B0A7CCFBF +:10E8B0009FCB64D582872D3532355A75C1693B1C93 +:10E8C000F909B83F157CC372839C5F955036C231FD +:10E8D000D4FABB1BF0544CEBB85B42BE1E15613141 +:10E8E000E4E3F5E2FB7216791EEB8D5A61C851C064 +:10E8F00077AB64CAAF6C867CD422E0BE7B9E97E087 +:10E9000069C9D13A71ADBE64C2119586E2B7970666 +:10E91000E3B7519148185AB2A7E4E87E6CEF288A11 +:10E920006BD8558A64C49DD06F9B39BEC17AB1DF64 +:10E930004C8925FE607C9FAEEF40B9F09EE08BCC09 +:10E9400050DB8D32C805F7FB73FECC605EC1906270 +:10E95000B8209FD9573B17F3B97A77A5AAD3F7C345 +:10E9600088778F3F2261DE57DE15C6AE77C8D1F7B4 +:10E97000104E77A85A620550BF3EC4100F77A911F8 +:10E9800086F454671AE108E4B7D64E65B516FEFA68 +:10E99000048126B9C0C2B1E2049DEF76707ED954DD +:10E9A00056E5B9D68FF5BC04E7E9AC2CACF9913F3C +:10E9B000802D803F54E40F9DF8E03FB01F3DA2BF83 +:10E9C00088ED2604B52A4927FE1F8178BB4B0DE54B +:10E9D00060BBBB6A9D0B631C2F07912FBD321F07C5 +:10E9E000FED309FF22BF8BA904977311C757BA9FA3 +:10E9F000C57498A86331CF67E82C8613F722DE260A +:10EA000027F0E6457C21DE0A43383336AA285C79B4 +:10EA10001AC7CF09ECCFC73AE20AF0A15B8F199869 +:10EA2000DEA3D4FFE13698C73D3D8E90C12CFCC8D3 +:10EA3000801F2725F0347229ACBB22C11B2CC19743 +:10EA400066FD93E90F936F143FD76FA69E00BE4DEE +:10EA50009350EF699C6F4F551FA90D0EFD439467AE +:10EA60008A26231EDDC29668D5E719889F2FB02F0E +:10EA7000989FA3A384E804DF483FE19F8C74D3C32D +:10EA8000B10D9290875313768AAB506671CB3C954B +:10EA90006C2F8B5BED94858684E3DD2CBEA90D4E37 +:10EAA00082C38DE39591BE89214B2B7E16F7A0BDC5 +:10EAB00000F21CFBC3A14E8CC5FC0F693CB3FDFAF0 +:10EAC000C252E2D3E4792AD80EEA48D0F044FEC01C +:10EAD0007643E32769BC0576784FB99D5FD13F3215 +:10EAE000DB140CD74E611F99F80224CEC10ECA1355 +:10EAF000746A53D96E2915F479F6F70DE4EB36C62E +:10EB0000E9DE8E29D09955CB36B9E3C896697D6781 +:10EB1000E1E241BED1D3A9BE939D13E7EB24FD945E +:10EB2000F8CDD453692C72A504F0E4AD092D6AD256 +:10EB30002DFAD0C9ED4C96BB80EA3DB8E9A3261763 +:10EB4000EA8DDBB512E205C1570F220E746BFF6B25 +:10EB5000697EB1C618FBA38A7AA34F42FAE94684BC +:10EB6000E838660D9371BDE7351C953035CBFBF960 +:10EB700055AC97D68DF3521996BB4332CAA7B11D37 +:10EB8000252FBA83563E8DB005293834E7C7BB21FF +:10EB9000E57C10A3F1F3D6D8F9D2E4C3535E8F46D7 +:10EBA000784F21CCEF0281F70B84DC6065EA877D2A +:10EBB000263D0B0811893C20E6D35B1DC4E746893E +:10EBC000147B481A583E57C8A1B9F8DD840FE0DE1F +:10EBD0002E49822FC2E417CC15657B9F79E7B429B3 +:10EBE00000F21B21077321769F7979E314E8FF3740 +:10EBF000D321AF0B78B13EE374F84D3E0B576379E8 +:10EC0000B91433A0DFB933D7915F71418583F866BA +:10EC10002EC26FC1CB67BBFFAA201D6E9869FFFE95 +:10EC2000D37E3EADA67565C2B3B2D441FDBF5126B9 +:10EC3000D13ADEF7C19FEE3C13E07B6DA61442F89B +:10EC4000DE08FDD1CFFC89F1FAF1A5330DF1953C39 +:10EC50004E3FBEDDA185289796694E1DEDBDEB1C8C +:10EC6000A11E1DE5D20839F4908EDF4FAB46FC9B08 +:10EC700072F1A09443F035FBE5501CDBBDE5A870B4 +:10EC8000E843D37519181F5A29A46C632FDAD72CBF +:10EC9000A61EEDB3ACDF86F79B5AF659E45A5C4AE0 +:10ECA000097EE463E8784C43BA1DF3CF4B8DB3A1E2 +:10ECB000FBFF4BA3BB49017EFFAAD168D9A70E2C4D +:10ECC000BFCEC1EA713D5DC7D887AE749CAFE1BCD1 +:10ECD0001CF4C77B929BE359C875739ED7EDF4343F +:10ECE00029163C2DF3C3BA1F04EE7EFC89F6D07FB3 +:10ECF0001CFB4F6E3F643BC56E47833DD387F2C01C +:10ED000015AC334642FEBAC72B99D5CF40B851EF68 +:10ED100099E30C096FF0D4E03DD93A3CE65FDB861D +:10ED2000F64AB3CAF9A125530EAD6503F9C1C47FF4 +:10ED3000B37F6DD660FAC2C43FF081AE21FEC181BF +:10ED400021BE79BBB902E5598EECB1D9FDFD709CAD +:10ED5000844F54F97F864F74D96DC3DBFF023E198F +:10ED600027FF2FE213D7B2036A1FF987BDAD5928D9 +:10ED700037564B0CE506633731AB7EC7FADA54F4ED +:10ED80004BF9DF2285B92B402EC8ABA13DF0CD95C4 +:10ED90004AAF8A76E8A2D52EBB5D23C6D9D3F7F455 +:10EDA0005B5301A4C3CB1C24EF58A88AF4E095A2BE +:10EDB000EEE1D50EB23F0F6F04F90872EC774CBB51 +:10EDC000B002F5C14107C9B1DF2D9B12E07E426C54 +:10EDD00034E2E712C1BF7F003F253E1EE401F8790F +:10EDE000983225361AE328EFA9DD5782AB0E7FE56E +:10EDF0009507C155790F093083B17572759301700C +:10EE0000FE4EE2F94BE4EA4A83FC998D6DE7C2FCC1 +:10EE1000AEC47FC278D1D55298ECE908233F6FBDCC +:10EE2000F033A260F6209C2EF0AF710D2D9179FC8D +:10EE3000214B8A2C912DF6282B848A16BB2A6A74C2 +:10EE4000AA83ADAF0F107E4048991C5D265BD6515A +:10EE500074F5E72AEAF17659E3724EE9A679FFAE36 +:10EE6000DFFFEA1E7DF124CB381E0E77BB2C0DBAD6 +:10EE70001ECD71CCFC92D507668F407AD74BE4DF6C +:10EE80003277F7E8AB2C7EE23A749AA01FA3968FF4 +:10EE900067E448E4779AE5B78971DA65EEE7FC1331 +:10EEA000F36D1B7CBE4CD8F5A100E2F170CBFC5495 +:10EEB000B2DF5994F4A9C92FAF1C1EE144BE650B03 +:10EEC0003289CFA36B1C36BE5BBCC267CBD7AE9E6C +:10EED0003FACFFCF36BA12F6B9751DB120D13F5DF8 +:10EEE000F07D2603EF88EC6D1ED7C810FC92A5D5E7 +:10EEF000937F985DD1B187DBFC31C2CBC870772599 +:10EF0000FAEF5B5216BD1BA575C574652AC61BE1D9 +:10EF10000FE7CA1443AC5FE9840BFD511646FB3E74 +:10EF200017BF9BF0C07AC85CA1D8F4BF2F62CF7B1B +:10EF30008A2CF61243BFC392CF4FCCC79CAFC78C6D +:10EF40006785A33AF255BB641CC2F5B2B1FD8ACA0B +:10EF5000B9F05DED632C10443F5089C5B06E219728 +:10EF6000270E9C37F08D2FDB198BC377771E63BD7F +:10EF7000481FA5C38DF68BA33862C87A62FE182F8E +:10EF800043BAF94CBFA4F84D0DE96CF60794B3F9F8 +:10EF900083C9F249D1795C4FD1DB7B79CAFD749783 +:10EFA00006FC5040F2B417F9882D10F11866FE994E +:10EFB000EBF0D4E4E029D763AC4881F9DF02984153 +:10EFC0003F2FD5193A1485A60DB9CED05A1DE301AD +:10EFD000479B90FE8BA4E811842BF5EC8631C8BFCB +:10EFE000D2D90DE3915F0313B99E5A78E662F61108 +:10EFF000A4D9C188F111DAF10E07C7D7D13C9BDF44 +:10F00000A8C62F673AC691FCA17018EBB1128A37D7 +:10F01000807D4F698A83AFBF13621DAA0E1EF780E1 +:10F02000E987ADFDDCEE8DFE0DE129086B558A8E7A +:10F030006A9CFB13AD6A64612DCAD91437C9D9D94A +:10F040008EE2D4239675FB8D6C8FAFB5635CCDA239 +:10F050007FDDEE400BFA07290E2EA7D6A534646398 +:10F06000BF068B3A1C84D7B02D5EEF091B714C1381 +:10F07000F5BF9F4D7E0CDAEFB0AE02672E76637B54 +:10F0800065A619878F92FF03744EA1FE16DAF5A9C3 +:10F090002B18263E60184AC9427F8EFFAD1BFD5DCE +:10F0A000F760EB7DAB1CCD7458E6E3CCE6F19C1425 +:10F0B000B64D437B04B0587822C3426F1167AAABA8 +:10F0C00030F94ABFEC3DA0F7F77A54B601B35F833D +:10F0D000F53215E1E77F47FEC8FD9DEFA1BF02E9CC +:10F0E000521609E0E43F65720DCA518ACF01BE3F56 +:10F0F000F54F7DB089D6257323DC2D228E38DDC1F6 +:10F10000E3B48ABF8DF33BEB9703D20989AF27DACB +:10F1100017F173B961307713C9AB76EE1F18F03F62 +:10F12000CC5FD361F717AEDD6ACF7F97CDCB423E80 +:10F13000FEEEDD2AC3F5FDBD247991EFE071EF6BA2 +:10F14000597D1BEAF57522AE5FA731250384E1CA1C +:10F15000E7EE9F8AF1AEB0E0BFBF005FE816FDB2F8 +:10F160003C1873868B13F353189F5FB314BAF04C9B +:10F1700069E8F9AD537B2F44BFC8D8A486B81DC237 +:10F18000E525B587A1945D8EB067B2AD1DC17B75D5 +:10F19000BB7D7E279B7FF27C4142D37C97EFAC25E1 +:10F1A0007E186A3ECE9D12C5F392F9EA3287648BCF +:10F1B0004F7CE5094C66A92017DC3CBDC51BD881F6 +:10F1C000E9579EBC18F245233A5DA85FAB18F77B60 +:10F1D0007F9F126B26FAD69F81F43D59FBE6FF64B0 +:10F1E000FB75D83EF39F6F7FC749DAAF0F76447047 +:10F1F0003D9BF116973B1CE6D8E6EB797DF649CAB4 +:10F2000073A1DC314C79E1F0ED615D9E38017C53F6 +:10F210008B9F485F1BB908D711617FF4A8918BD0F1 +:10F220008EEB79CBC1D0A4EB49D3DAB2711EAD928B +:10F230008E7192DA8D17A74A505E7BD01194F3C578 +:10F24000E2C6FAF973BAD0CFDEE250857DDFA7A01F +:10F250009EA9ADC83F07E5738F6AE4A6017FD4DCA1 +:10F26000CEE34095154D4BB1DD85FAE5AA0BDABD2D +:10F27000FC78F362CC2FD7CF55309674BFE8E7D334 +:10F28000C79E9CCA00BE9E2752581CD78D1273A2DF +:10F290009E5C0EFC8EFC76DDCF5348EF2E7F6AE538 +:10F2A0008373A11FE9B91482A7E6A96B1F76117CAD +:10F2B000CD9C7F9F9D9FBA45CCCB0DA8E96912FBE1 +:10F2C0004286913B1F9AAC74B125A8374C3C98FC00 +:10F2D0005BD75EF25236C2B533AD1465753FDF2B96 +:10F2E000501FDAD7423A6F10BE7F51ACFF4FF25D2C +:10F2F0000B114E69E79EAB687EDD97A9383FA925C3 +:10F30000CDF9EF30DE730ED5AC47F3301E9562E3D6 +:10F31000A0FC9347253EAFEE499D9E7C1CBFD35970 +:10F3200047FBC04D54DF84B76E6749DB48A857B729 +:10F3300031AD00ED8B593F7F22807EC70D3B1D71A3 +:10F34000B4072025BBE0EA76872DCE0A12CA2F012A +:10F350001F5C2FE4CFF5BB56927CBEBEFB8ECF5117 +:10F36000FEDCB05B3D62950B8067F26FAF7BC7112F +:10F37000C2D8D0754F3F1240FDFB97DE8702480F81 +:10F3800018A7D609EBA0EC35C5D60EFB3F9E3EB0C4 +:10F390003F50E8E4CFDDD0BD9E8FB7EB823F611CCC +:10F3A000EB0606ED2DF2E72FF88F9C817EF25F1CB5 +:10F3B000763FF90BF6DA54D2773B3306B5574CFF5C +:10F3C000D894439FEDFEEB03068CFFC953FFF10079 +:10F3D000EE43F67CF3D7077E88F87FC1A3219FDF39 +:10F3E000F0D8BF3FF003D447BB5D32F2CB672F3C70 +:10F3F000F2F0BD90FFECDDF1A5B8B41485EBFFCFC2 +:10F40000F2BFCA423CAC7E61F608C4C3EA67668DAF +:10F410006083D8F766FA19F057CCC25FA63DA8EF13 +:10F4200086FE4640F657224DA2CFDE5D8E38BAAE3C +:10F430009F1E72C590AF6F806F0DE0675E5F7F2D7E +:10F44000EDD7607E0DE0F9FAC7797C6E20BE8D5154 +:10F450007236A6F151B84575FDAEF9179D5586A9CE +:10F460001AD271BEEC28E9B3E476371C04BA9E3197 +:10F47000341DBF605F3B11EF37B08D7CDCFA73FF4A +:10F48000847C944CC74FF11FD307D271AC02749C9B +:10F4900068A5E38AEDF762E1AE8C41E3AA261D5729 +:10F4A0003E7349EA607E9415CFF153C0F33211B731 +:10F4B0003EEA084F51701D3EF5D387EF0D229D5D4A +:10F4C000A1B948F727BEC80323887DAC1EBD0AD763 +:10F4D000E3D1175CDA0E68B3FC857748EF7DF6CC94 +:10F4E00001A74EE731985F027DFE19EBFFEB45FD6A +:10F4F0007EBDF08F6FE84A89635CC2A4D7F5B18BFB +:10F500006BF4007DA778C5F531BE0EAE8FED5920A6 +:10F510000D42BF154A0197ABB14CC2CB4ABDD7A92A +:10F52000F9ED74952A909E87CF41FE1B8A9EE6FCDA +:10F53000359CFF340B5DBBF8FA1D6A9D7ED6E952FF +:10F54000705F2199CE9F09FBE78698F4CE607437EF +:10F55000E3F7CCB178587A25F3C57715FBFA36DB9B +:10F560009BF33FD9FA3EF9BCBE1DDE2E41E7A07CDD +:10F5700020FE9A6673B9FD463EAC4BF87440D5FF49 +:10F58000E526E4935754B6039A5C58F027451FC408 +:10F590008FFB0DDA51E313F98B2AA4D60C6877514F +:10F5A000388DEFA3279D1B88CC7430DD02CFB19A34 +:10F5B000D5B9B8EEF66633DA17DF97C3F7A77F9DA4 +:10F5C000B3621F7EDF08FD33E8BFAD11EC5517FABB +:10F5D00027D994F69FD7088FA138D32A8DF1FDD073 +:10F5E0009D8F3DF618E4CFC3014075ED05156A8D7A +:10F5F0006BBC29E03DD4E826FB6F7ED1930AEA7507 +:10F60000A9F84905F5CDF9354F2A78EE605F7F1CE2 +:10F61000C650B3601D9D579456BA01FAFFB5C4F5A4 +:10F62000ED794B3B953A4BBFE78B7ECE2FEECC4529 +:10F6300079BC5F9CFB48C6579F90B74D131EC9C548 +:10F64000F1F68FFE975C46E344681E7962DF68DF5F +:10F65000B847B6AD023CF6144921DCCFE86958EB57 +:10F6600047B9DCA3CFB7F1DF9E097F92B09FBCEC16 +:10F670004E05E5F70E112FEBC27819CCEF61C01BD8 +:10F68000E67702DE307DAC51A7F4F1C6222AFF599D +:10F690006388F2DD8D15947FAA314CF95D8D359428 +:10F6A0007FB63142F9DD8D0B29FD55E332FA1ED8C4 +:10F6B000B0B3251DE34BA74BDD78BCE05F1BEBA986 +:10F6C0003CDED840E53185DB0D79EDE01F80DC6D57 +:10F6D00068E0FBE43BC01F8D58E037EB1D54B87D5C +:10F6E000ED09445F5730BE5DB3A01CE9DF3AEEB2CE +:10F6F0004948C71EFDAE28EDCF16BA29B64D2E21BA +:10F70000AC8B57C64DA373283F498B1E542C7E5F8C +:10F7100041BB93C5A7201D63FBF0E88D7101D87D27 +:10F7200080C7F3A29D2D78D465614DBE2E133DBBDD +:10F730005BD2D11F9924CA976E56AB8A4F4EC747EA +:10F74000147EFEE1E5CAFA5C5C672F4B3C7E36BF57 +:10F75000C6C18A2CEBFFF2A83DBF45B44B9F53387E +:10F76000ECB99B9410D4B3D9397C1DB9B2D3D1E391 +:10F77000EAFFEED147DAEA39B4BD677F386568F948 +:10F78000E408D4F078B4A67C84F20D70209D901328 +:10F79000F2862257598938B0B9EFB6A43F0F9E9927 +:10F7A000697703BEAE081F54D18EBF0A5C2715ECE3 +:10F7B000F03A1672A23D0E7E31A5DF65F594BA725D +:10F7C000E32A8FF3556BB8EF2B85CF749CF00D17A0 +:10F7D0008FB1EF0F9BF0A5CF51283EB34AF2869030 +:10F7E0000F9A73D82EF45B9AC57A35DBABC72732F4 +:10F7F0001DF050AC16D8E21B6A30B210E5DC2D7D4E +:10F80000928EEDDB9568AE5ACE27A658FC7C35C8A3 +:10F81000FD8CDBA5A88EE577CEF8CB2107DA51CF9A +:10F8200078743C8FF359D93127F20FF944C83FB7A8 +:10F830007A630FE563BEAF960743E214E771093CB4 +:10F84000E1391D8CE7BADC7E8A7BB05CE513EB7E88 +:10F85000E9D51A8F9734A77C9483E37E0701E17082 +:10F86000B1DC2C8A8ED25FADD2A7223E97B05E4A21 +:10F8700017B36E4AC36AB40CE15CC4EAC91F5AEB01 +:10F880000B9C8D74FEEF822FF9BC1AF41346FECF49 +:10F890009EE18E5AFDE77354BEBE178814D6F54A12 +:10F8A0005CCF43D1DD94F7A69C1F951AB910E7658C +:10F8B000AE17331DAA7DF2BA31E131CFDFA5CF59A2 +:10F8C000FDF268C0C78E0E7ECE6B565DBB2B0F8AD5 +:10F8D000B66FD44B0917CC2D235EF2FA038DDC4FA3 +:10F8E00069601C8FEC7D89F0C80C1F97D7FDF5224D +:10F8F00093D0BE7860CD310FCAE9636B0A0EE07613 +:10F90000C5C9E699ACD7FE65CCE4CDB88F3CA6C797 +:10F9100041727FF3987FEC71413EAF8FEB813C7F6A +:10F92000FD78F4D72A7FFFE71C8C378E4A8DDEA442 +:10F930005AF8FB81DBEAC7E0F87F57C2AB55C2F744 +:10F940006A178128E44CC3467D73913E34BE76B479 +:10F95000170C8BDF64B8FBE5C610722CB19E793DA5 +:10F96000F03399BB94E4471C8F64F4F9529FED8502 +:10F97000D22B1BE22AF205F0F1269CCF152CA672A1 +:10F98000BF5ECB42BC5EADE9448707B23ECA21E10F +:10F99000AFF4E547BECD795AC606B5B7D609FB0028 +:10F9A000C0A1385F9E88D3C9BE4F7250BF77AA836B +:10F9B000EFB7B006581F967D39B099C87E82B1E87E +:10F9C0007C432D0E0CA0D5CA7D12AEB76AEDE2EADB +:10F9D0003440D1556BF2855DC4F9E9AA35699D18AB +:10F9E0006F6853A38FAB247FEB29AE5DEB3FBD1A4D +:10F9F000EDEB539D1F8CDE8776BBB99ECDF9DEEE15 +:10FA00008D3E877C50A0A555A5E92887795C78B6FE +:10FA1000C34F719D6341467ED850FDFF529CAF7C21 +:10FA20004CC485D54F5807CA879781FE987F18F830 +:10FA300016D35F805D81E95EB02B307D01EC0A4C0E +:10FA40001F07BB02DBEF00BB02F30F805D81F918DB +:10FA5000D815985FCE22FB113E35C8CF71353BD902 +:10FA6000323AC72DCE419A70FC56D0C14C0FE221DC +:10FA7000BE4C3A2FC9E3531F38F9B912A57ED4BC46 +:10FA8000149E227FA4E61E887BA06AA08CC52480D9 +:10FA9000DBFF61BD11807CE9CE90940EE9844FB408 +:10FAA000BD5E489F390B140ED829774E05050EF41C +:10FAB000F4CBFA7D2B909E3378DC7CE759F06FD045 +:10FAC000338F3EE4243AB71E609DA8071E3D0BB855 +:10FAD00016BE07E6B6DD887EC3BD6F4339D02D1054 +:10FAE0007BFB8798DEEBD4AAF07CCED3235908EDBC +:10FAF000E840D747B761BD40CFBD37513A73E7CD36 +:10FB00003C7DFE16ACFFA3B3E6EE41560FF4C66F84 +:10FB1000A5F3785A6D652AE4471C375ECD87B42378 +:10FB2000776DC9D500CAD3AFB4BDDB02F967F7B5AD +:10FB3000D46E84FC3DFBEEDE8CE5CE9CD53DF930E9 +:10FB4000DEBDF57209F25991339FC7E17357D1F7C2 +:10FB5000FBEA83F43D75FF716D16A425A3E508EE5D +:10FB6000833E3B53A98959F70554078FBB39C5F923 +:10FB7000F25C99CE559AE7F6153C4F0979F520DFEE +:10FB8000BF51F7F1BC53ABA773955952D4E544BEAE +:10FB90005C36F8BE8DCFC9F54949275F07BBFAE44B +:10FBA00018C6CB77F7AEF5A13DBCBBB7C08172AC30 +:10FBB0003457A67DDADD7DE9192980F76DBDAB46A6 +:10FBC000D0D90610C097413F5EA797FAC970D2DA24 +:10FBD000B3B44FA7F625FDEDB7785271FED83E3F7E +:10FBE000D13E5DB41F85EDCBADED6507A6216C5F01 +:10FBF000CCDBA39D987BC03EFE48273FDF3976C013 +:10FC0000F85B641C7F82183F795D1588715B25C3A2 +:10FC10003719F5F34A45C4C343A457CA05C2CCFA01 +:10FC2000554EEE37A4E27E1CC50FA334CEB3070BAE +:10FC3000E83CD8D0F2414ED88BA4F7BD09794FF9F2 +:10FC4000F4A4FCC8A4FA0549E5A727959726E5532F +:10FC500009FE12F1AD01ED02B417EA5349AF9688DF +:10FC60007D6C53CF56F4D7D35E5D81FA75AEC21E5C +:10FC7000E2E8A57E2A44FDBDAFB779693F9865D318 +:10FC800077577F3BC3773AAED3D7647EAE01DC6152 +:10FC9000B26B44BBE7A4D0ABC5281F5EE1E70C12F2 +:10FCA000F88BB8B9DFC5F15D26FA5B172BA5FA779B +:10FCB000D528216C9FACEF72F1D006D2AD77C75A30 +:10FCC0002FD44B9B249560BBA2351D6B51F6BA0C0B +:10FCD000B617E36C53B7E93FAA46ECC441BEC2BABB +:10FCE0002EEDE2FB9A253185FCDC925C9E5759E4AF +:10FCF000FCD381B4531D86F7749CFF7BFC5C574991 +:10FD00004FA9CDCE9F10E3E741EE73727B56CDE550 +:10FD1000E7C8D5AE19B67AC7FBC60EABBF77364675 +:10FD20006CE7E01FEDD77F9C6E1304DECCF2FB9CEA +:10FD30009269FFD8E8985CEFD587E6A50E172FDC0F +:10FD400029FCD267048B31DADA827C4CA6731A8CD8 +:10FD5000CD71CC2E247D2CF2BC7C5D97BDFC59B3BB +:10FD6000BD71C12C8C5B3D1B53A87C4BDB05B39A4A +:10FD7000140CAB73FC82BCE2F88D71B9A576C9C9CD +:10FD8000F2E93E924F87984D3EC96E7EBF634A7B33 +:10FD9000C73ED497B7C0B7E74B919E915928FE2A2A +:10FDA000B6EA322E895752BA5F44FA3F3D410AED16 +:10FDB00080EF957A6533EA95EEB7DAEE5D09F9E7FB +:10FDC00084DCDDFD5AE17E8CBF357D70CB129473EF +:10FDD000B71C91748CAFECED9DC7909FD5D7149252 +:10FDE0000F6A30E488929C2A755C6BA1DF942255DF +:10FDF000C89F2ADF2468DF1AEC9AC1F75AC36C51F6 +:10FE00000A8EE3E2F2B9483592E6F79C13FD878843 +:10FE100034E8FD9F0A07331CC86FBF95B93D5B13DB +:10FE2000F65D6C391FB2EB20E80318B7FCAD9629DC +:10FE30006F40BD166DC614D41B3B3B9DFCFEC9280C +:10FE40007E3EE665A11F58DF90F74E5E463C27DFF9 +:10FE50000318C3607D40FB318A8FCE758F89F3FD17 +:10FE600042F6F50966950BC9F26B52B7D7C6EF7229 +:10FE7000BBDD1F1EC32CFE30C9F924F9F5FEC444B6 +:10FE8000FD02B48FAB5F4DA560829E3619E859998B +:10FE90002BEBB4EF6B84FD9500C7F9028A75185FF0 +:10FEA000C2F287580CF793B6A35C00D477827D84A6 +:10FEB000E92E83DFD7683D0476068CFB52500EC5D1 +:10FEC000F1BCF8416EC79F6F9E932D5629AEE88610 +:10FED000FFE1F86A8B360BD7CD8476BD99F4DD3E11 +:10FEE0004BDC11FE9B2AF6992B93E2915345FC7251 +:10FEF0006AD2F7E4F8E3974E7B5CFACE1F38082EFF +:10FF0000E36D079D177E763A33A43368DFFC8E9548 +:10FF1000A4D7F8B9D667048ECC78A4C3C5FDB77D45 +:10FF20001FB818FADF3BABDD1427F4E2E4E0FBCEA8 +:10FF300043753E841FF411F93F7B67787D7D7E4ECB +:10FF40006FAB3E583BC37B07F2F1BA5764B2559F83 +:10FF5000DAB72A5B86FC966A379DBB0F3C688CC279 +:10FF6000F8D0EE4EB1AF75509CCF2212C17FD8278A +:10FF70009DCFD2C86ECE70C9E6F9AC0C577962FD40 +:10FF800006C66E1E89FD3C9A2F9D523FB9897E722E +:10FF9000ADFD58EC78E18FC4B9DF27F8220FFD657D +:10FFA000B4D393FC81DAF7F9B93EB0EBC7637F4B6A +:10FFB00058244C711030D3A99F53B7EB0DAB9F9EC3 +:10FFC00017CC97512E25ECFB4829F6AFE76AA47FA2 +:10FFD0004ED5AE7F50D8F30FA07D8F76FD466ED7FD +:10FFE000770ABBFE55B4EBF9FDA0B35D36FB3CB41C +:10FFF000108FFC5CBEEEF159CA74B4BFB552BC425E +:020000021000EC +:1000000077CEBAC79BDD004F9EDC9783F92BD63D98 +:1000100031CB0DE5010C40C0925C00796326F42FD2 +:1000200073BC1B0F3361AF1F3D702EC03B61693045 +:1000300084F1D53C593BAF08F5F972AE07035DDC9E +:100040000E4E86FF0111EF81FE57A13F7C858BDBB1 +:100050004757083A9AF97625BAD045FBB84CC1FB08 +:1000600039C9F19D2B106930BFC52EF31C5EC748FE +:100070007E2F15D29441E9CFFDC493D1BFAB9FFE33 +:10008000D7E2F856FA67E49F3AFD8FD52C20113657 +:1000900094FFEA3A0E8BDB12EF5BCEA23713BD72F0 +:1000A000F97D997EBAC9E05741EA10F717028E8BA5 +:1000B000EB116FEB05BECCD4107863EF0F38D76A25 +:1000C00060BF2E252A0EFB70391E68867EFC16FC4A +:1000D0000AFFD984A75DA95BE7B2C5DFA20CFDEAE0 +:1000E0000D2E4DC41BEBE9FE1AF86B744EEC9FC647 +:1000F000776E3FBE7F2CD61BC19927E261A78A6F1E +:10010000F35C84790EC2A8D25B349497B7B310D253 +:100110006096FF62DBBD1BD33E48EE6F91147DC439 +:100120003AEF64FD5FCBFA548EC7A32ACEBB2A43B5 +:100130002F93F03CABF1BB59AF55401EF992EC9CAC +:100140007767E1BE42958FE73F767DDD82E759AB69 +:1001500070EF8FECA22F78F9585EFE0996037E9F10 +:1001600054C3BB5C96F32A40AE18B3C40754ED7079 +:1001700025CA91DBBDD15F229C7AAE5E85A4CB6B94 +:10018000D0885F4E558EC4447C00F71DB8BC88FEF5 +:100190001AFB530D2E4F4EE6D7BF21F8CD4C7F23CF +:1001A000F449BF5FBFC9F4EB4323B95F1F1A69E588 +:1001B00093FEB85C8B87DB31C2AFC817FB28C9F24E +:1001C000DAF42BF23D767E4AF805612FE98624FEAB +:1001D00032FD8471E6FD93F5CEF87700BE1D156EF5 +:1001E000C24FED46CE7FD9777EACE27A35F9EF4B40 +:1001F0000C3E6426E47ED7DDE91B50BEA5CDA113DD +:100200004F6C852BFC672B9D8A5DE1FF48A25B74D8 +:1002100008BA1DE3727F78BAA97E8F61A5433FDEDD +:1002200005BD7A85FC7F0DE53ED12FFC7F907ECD0C +:100230004E9DE290C67EEE370D45FFA1E298269DC9 +:100240004D79F3B187D337917279F386A85750C1AE +:100250006668A916BBD12DF8C2C306DD7FC974F349 +:10026000F681E608C93126CEAD16B4803E9712F568 +:1002700046B825F3FD0199CB758DD20B055C85152C +:100280006CA675DC7162DC0BBDBC3C79DC4237B717 +:10029000834CF9698E5B7837B723CC7AA7897EA027 +:1002A000588C1B9151CEE5B7F3FB5D8578DF0BE8E9 +:1002B000A1DF1D0963FE8DE97FEABA0BEDC7CC22F1 +:1002C000111F0C333CE73E4DF473AF339C8DE3E5D7 +:1002D000019E304EE500B831551BD86192F37E8304 +:1002E000EC418BFD3FCD8DF3FE840D6AFF9B780FB3 +:1002F00028ACDA65915FBD02AF66DE9CE785159F8D +:10030000EFCB00F826EFE2F7DC22380AE42784730B +:10031000290EA679385E1EEC62E4874C72F52EBA7F +:100320000EF0126BE5E766EF5DEB0C537CCCD9F772 +:10033000D4AB38CF0D4E8A87753DE39F733AC25BCD +:100340007DA39401F9ADCFB43DF92AE49BDCF90417 +:10035000C7A35D5BCE43BF78DB8A748A5B99F9DC07 +:10036000953C8E75CFC62D734E437BA24B0EE13E5E +:10037000E4A333B9DF62C27FA99BC7B1A26E11C7E4 +:10038000DA9814C79A29E25886D0974B07F8895112 +:10039000F73071ACA56EAEC7EE897139D4DC25C7D4 +:1003A0009AA0E1A3FE2D5EB4831FF5CF63745F2F87 +:1003B000CCE34800BF87E2587E330ED5E1C538D282 +:1003C000D56E1E475A81F225D3DAFE8884699EA530 +:1003D0003DC5B1FC661C8AB7BFCECDE349AB07B4BF +:1003E0001F383EC5B152ECE3DF24DAAFC1F6E5C3F6 +:1003F0008DFF54DAB51639F24301F7C4DD51B2531B +:100400002608FC8EEFEA0DF14DDAB81BF1B4FD8938 +:10041000AD7DFB815E6DDB783CE4A7C27EDB2ED92F +:10042000D7F746C17FDBC4BADDBB0DFC64F48FB7E0 +:100430002DA07BF56C0D233A8FBFFF6F92158E3187 +:100440004B799C6DFCFDABF74F18C44FDEE676F19F +:1004500073B74BE5643F791BD177083FF958CDD28C +:100460002AE4CB492D3CCE39A983BF47326917977F +:10047000A7FAF129647F8D395E429705F28E9F4974 +:1004800079F5F874CA8FD9CAC7DB29ECAFC9EDBCBE +:10049000BDBA95C729C618F6388FE611F19D8619A1 +:1004A000B67D99C9BB8DD4B3615E137B1C25D6F391 +:1004B0007B03ECE2A4F8CEF6A4F84E41525C51F373 +:1004C0000C1EDF31EB9D26B108B6FFE98679C3C665 +:1004D000191F10F11DB3BFD36EE37165FA0BA2DED5 +:1004E0000AD3B9CAED6BEAB6CCC17C5A7519AE5FB6 +:1004F000CD23CE5926C561FAF58014FD0DD2C7A4CF +:1005000097E997691E66D30F80E26A0CCD25E62530 +:10051000DBF66D2CF29AE0E958C8E5B5991F11CDCC +:1005200022BDE1177AE958CD3E4EF7994D25188244 +:10053000B8B0E2B04D7F9E94EEDD9CEE4F08BAABB2 +:10054000DD83D3DBEFE1F1C4647A9F2C8E77323AFE +:10055000EB49F139BFD0BBC97436EB150B3AFF6CD0 +:10056000EDF0713C93CE667FC543D2F9C5F4F32D0F +:1005700074F67BF8F9D061E8ECF7940FA433F86FC8 +:100580009A87FC32AEC792FD37538F831E6BB1EA58 +:10059000B1473D497A4CD809A61E9B18B3EBB1F17F +:1005A000A8C7A4845DD2D9C968BD17B9BA8FED4771 +:1005B0003DB63E598F19A5FB51CE6CE17AAC635B19 +:1005C0005D6510D211A1A69CE5904EFCF91A9243EC +:1005D000D937F17D98451E1E0F7C64DB2AFA6EEE3A +:1005E000C33CB28DEBAF510FA593DEBF679B4CFAB6 +:1005F0002B598F9DE1E17A6CBA47DC1FD8C6E3BF67 +:10060000DF428F4D273C0EA1C7CEF270FF77683DC9 +:1006100026F4C0362E6787D263333D5C8FCC16EB51 +:1006200073801EB2B41F4C8F558BF61760FBC1F45C +:1006300090A5FD607A6CAE87EBA34B06B44F1EDF2E +:10064000AEC7168876931FEF78114D762703FDC548 +:10065000FD4FD25F3161D76CFFC5D6D8AB50FE33AA +:10066000A963DE796877E4F03845B21EBB46F0D165 +:10067000CD421EEE3544BCB70BF418FA2B428F4D19 +:100680007868703D36E121C55B34881EBBD933A440 +:100690001EBBD933AC1EE3F2AC48E8B122A1C78A35 +:1006A00062BDA7A6C792E4D944538F0D21D73E4619 +:1006B0003D36885C9BF838D76393FF8BF5D8C743EA +:1006C000C837B35EBF7C3B453D66F6B7BD9BEF8B3D +:1006D00026E45BF461BB7C5B3A15D7EDC71EC7C946 +:1006E000E4DB4ECF207AEC63C1A7A6BF01286EB130 +:1006F000EAB18F879063263C43E9B10FFBF518B749 +:100700005F8AFAF5D893DF4E8F25D92F43D92D1F55 +:10071000FE0FE9B10F4FA2C7FAED9553D463667F80 +:10072000DBB7DAE93C7917D0594AD82B939F013AC5 +:10073000D33C07A733D0F7438F256EECDA1D0DFBB2 +:1007400074D25F1F7B78FC910D76BE2C39BE75ACE0 +:10075000664118E934549C8BB13E7AC729F9DCCE46 +:10076000C9CE055E74F6AD04579B1AFE8AE011F1FE +:10077000851FABD1AF07D7AFE67E8D21FC58331D67 +:10078000E27E64B693DE1F185311898BFB914E6F86 +:10079000E620F723C787B24318074AB3BF67A66AA4 +:1007A000FC3DB3C0995FF735A3DCD3A64EC17E32C2 +:1007B000BC627F29E95EA0655D65782DEBAAFF5ECE +:1007C000285EA4B3CCA72DE7D2A1EE0B8EF25AEC93 +:1007D000443538FC7D41879B9FAF34AA5851BD3FBB +:1007E00011E7607F13F089F8A7392F57B6BE03E7EA +:1007F00055E495CCFD85226FB905CEA4F3CBEBA5CE +:10080000288FAFFA0D5E2ECE3353FC47E6F1163C2F +:10081000B7DC8CE797D10E2B8B70BD96CBDF1DF329 +:1008200095B1109E4B948ABBC96FF215D767E33917 +:10083000D675439C635D2EE06A1ACDF7F5367C20B1 +:10084000D1BECE867197665BCF259BFBEDFB322F29 +:1008500075F759D6556BEE3CDA476F0DCE1BF65C3B +:100860007CA0C3C1E219A750AF9DD71BAA5CAD60A5 +:10087000ED787E5F55F87C5DEFBBC82E73B1FA381A +:10088000F9877D92780787C7014DB8A5603DF19F34 +:1008900019FF33CF07CC9AB190E6D3EA8EB8F11C9A +:1008A0002FCC6758FDE03A2E117C7F57C251A4E34C +:1008B0009E090F935EF7EAF5748FD7951B6151C0BF +:1008C000B72F1861785ED4176274CEF8647498EE0E +:1008D000E5F21AD7B5F5BCF0FACA28F5B33E87851C +:1008E0000C1DEF5526958B73C74E210FCDFE8ABD8B +:1008F000DCFFF9814891A5F03D0787FB25E25FE029 +:100900001C8DF605B11F28BC0D1FE1837AC794F03A +:100910000FBD9903CB13EB9FDFE71120C0DF8DB62E +:10092000F7A58AC43EA719871C7337237E1A6F70F8 +:10093000BD5164ACA577C7C66065281FB789D17B58 +:100940003C504EF6AAD97E7CCC69BBE795DF6ECFD2 +:100950008FC5FD4FA8374EBC7745DFA19FB1E21D83 +:10096000A1B149DFCD7B170FE08741F65192F74DDA +:10097000EFF70E7E6F6328BE30F7499D2CFC20E117 +:10098000AF81EF373467723F22B9BE89CF8624BA70 +:1009900099E9135E336E6924C95F33EDB0FBEDE274 +:1009A000FBF1C3E70EAB6FDF037DDB62D1B7EFA3D3 +:1009B000BE85F6EF2D7826A5CE6F85AF89FA7FBF6D +:1009C000F1D0D91F8E4B8C1378F151357F124F47E0 +:1009D00080BC58549F4F477A16AD3EA05AEF435CF7 +:1009E00059FFEED91F5AF07945F6A52D2D244795CC +:1009F000BFE37E3546BFF1BDB04ADC0FB4CCCB1CA3 +:100A00006F1DC089E9E27AEE9F6D9EE48CF9E19F4B +:100A10009BBFE1EF881887F939DCD6C68554CF87AC +:100A20007217F0FD772FF7B3D2EB6F74F3F853C45E +:100A3000CDF50197070EB12FD08F37210F1C42B192 +:100A4000EC9DFD13377F2F2554538076FA41079D87 +:100A500047DABCC7230D76FF65A3B023D68B7B1482 +:100A6000A6DDE231F71F847DE211FDDF89F72CC698 +:100A700063FF1D354BCB12FDB7EB75ED783E6F7DF7 +:100A800061BAED7EE67A85DB43CD621CF3FB2C5F19 +:100A9000BF1D242908A79F75A31F921E0E317CF746 +:100AA00023BD5ECAA77700802E5530CFF41A2D07DC +:100AB000EF076E46F93308BFBD25E4C495ABF97D59 +:100AC000CDCD805F7F3ED6FFED6CA4B33187BF2FC5 +:100AD00096DCEE349F19E7FEFF0BBF97F8FAE3624E +:100AE000FF25F8957CB2384769B8902F93D7872BAC +:100AF000B75BB5AEDB4A393AD9574EEF6F127C7708 +:100B0000A8DDD9AB8AF19D5FE35C6CAF06EDF52DF6 +:100B1000EDCA076B7787F96E6FF1025A27EE5C58C2 +:100B20005F96F19D41584716FB312107D672395423 +:100B30001C14EF3BDAD7EF5072ADB96C8B5B877149 +:100B4000D757F07886A3A4CC5D688137E2E371BF04 +:100B5000E60A1EE768096D7117FA0796AF9F29DB51 +:100B6000CEA59AE951AF42E55FE0E15D5A07BA844C +:100B70007629AB6161A49377F48E483EE4D705797A +:100B80005CE564F0D4F9787C6A2878CCF2A1E0C9FD +:100B9000F57178F2D1E82F3F393C263E8792D32673 +:100BA0001EF77B23D7233D4D7B7328BD4CE7E680A2 +:100BB000AE4F7923AB7D90BFF2E64B32913FB2D37B +:100BC000C43E7B2E7FFF10CA1F0E58CA8DAAC43E9A +:100BD0001FEE6FAFBE606939DA996F8BF3C0810C7D +:100BE0007E3FDB84EBB08FC7A10EFBB8BCD800EB17 +:100BF00026363EB10F186896E2789EE7E86839B667 +:100C0000231FF562117D5F177DBC662CCE7FC13836 +:100C10000DD7ED57AAE1423FF6123C7F0CE9A62A18 +:100C2000EF326BBCEB468DD33F35ADF237389F903A +:100C3000BF8FF6395918565D167F6F12FB39430383 +:100C40008B0FCFDFE37E2BC56B4242DE8B7B462CC6 +:100C5000CABECD3DA39F29CC81F7930D3FA3B84ECB +:100C6000CA5689FC60735FF397DABC18C2A3EE8E94 +:100C7000D23D963D53BD64C77CD9CAEF4D1EBEF22E +:100C80004C8A0FBE29D76DC77B1B47DF7531BC6708 +:100C90007BF882F36BD02E397CE515E761F9618929 +:100CA000D548FCD1A100DEDF0C8CD59FD885786BB0 +:100CB000F5D0794235FB8FC24E0B07E40AA8FF0F2F +:100CC000C74B3EC0E7EFFDC77E8C6C75258BD3F913 +:100CD00008F39EC41DA9D167904F942BCE2F42F9E3 +:100CE000B0C9A9E5619C69539BAB14EDABB4CFC10E +:100CF000E1403976898FEFA71F05DC42FEAADBE6CB +:100D00003F64DDB7BC2A93D3C3DDD01A467E75EBB2 +:100D1000217A72253096F3C1A8D4E85E9C7F95BBFA +:100D2000649F164439C6EF3398F71BAE58C6F36F6D +:100D30008BFDFE643F35D92F7DDD948BD9FC1EB829 +:100D4000E2E77620D394A477CF72C91F33E964E534 +:100D5000077CB7CCCA0F78D5A89F1FC2C00F936C71 +:100D6000FC209D9878EAFC702F8E09F05D7A26DFD2 +:100D70007735AA420768BDBCA9D27A31EF2325F3A3 +:100D8000FDBAE81AB75C3C707D98EB6143D9BC4C66 +:100D90009DF87F159D0B0186D0F1BD046DDA1A0D0B +:100DA000BFBB6A9D145737D785B91E2E0FF4AF8B82 +:100DB0009FE33A8EFAFB664BFAC07581FEA595FF5C +:100DC00097E03A9107AE93452C74199EC35CA4300A +:100DD00023353DC1EF8B2AF8FB3C8BFA9AE8DDF313 +:100DE000456B2476C442B7132720EFB6E14DEB7F65 +:100DF000F7D571EAF8DD30476AC3F3361BD4A3BFD9 +:100E000046BD6AA4F175D7EC9176E23BE26D291FED +:100E1000B5A2FDB1214BA777E592CF19B49DE6238A +:100E2000BEDE70E9283AEFF0E3469D4501BFBF47BB +:100E30000585FD2D48217EBF0BF01EC5FB55604783 +:100E40006039ACE31C7F26F269886543F9A58EDE24 +:100E5000FABD4887F77C748EFCCBE7A367E0FBAA5A +:100E60009BA62EA7FB545FDE1A1DA3155BE7111B83 +:100E7000C9EF5DF78D94E9ED205DDCC366E27B741C +:100E800014FF1EA3F47EA0FF11209D2B906FBE6760 +:100E90002ADAF551BB0D815E0FC19BE5D4F8FBA8A2 +:100EA000E1F272C8CF9F1864782EEE7E277FA723C9 +:100EB000199F0BFD5C0ECF7774E878EEAE7CE3C82B +:100EC00073F05C9E37BFB3A31CF2B231F29C3913AE +:100ED000B01E8FEFB77E33A51C9DC1ED8D3D6467BD +:100EE0009BFD8C59D3CDA2782FA338928D764CEBF5 +:100EF000370E19EFAD80CFDA8DF6137E6FB2D8675B +:100F0000557EBE6E5B85BDD3DA14C94EB7C0D72AF5 +:100F1000FCD2D63D1EFE6EF7DC2BBB3CF956B81555 +:100F20000E8F78BF644CF151E91AACDFD40D6B1B06 +:100F3000EAC77F41FE34AC0579A9355EB9A6C7661C +:100F4000372D0210534B71BC0EBA1FEC1DE7D65063 +:100F5000DE2D2AAAFEB33208DFE2DF110BFF99F083 +:100F60009B718ED5E6FDEBCCB64AA487B79649288F +:100F7000D76FF2F3F30805C8C030DEDF8AAA878D89 +:100F800013E07928B0F4E81EB6319EDFC3C63CDE1C +:100F9000C3C614EF61638AF7B0B11CEF61631EEF43 +:100FA00061631EEF61631EEF61631EEF61631EEFFD +:100FB0006163FA7C639452BC8F8DE578FF1AF378F5 +:100FC000FF1AF3F35DFC1D325614F596235E4E2F87 +:100FD00094908FBC1B9C617CAFE175C137B3D62F59 +:100FE000D87410E3146185624CBE6D4ADA5B3C8FA5 +:100FF0001129E6CBE6FBFE6DD94F31FC9D01F59C36 +:1010000094763C2F7CE7077E4A7D0B9E66BA1FEFE5 +:1010100075EB8E8C12C67EE1BFEC1CB707D7336B25 +:101020004E0F417EE3B5EB303FA5ECF3E54F417E3B +:10103000D7C6C56DB8B57F6766CD9B3AE4FF6DE353 +:1010400092363CEA317666650ABDE7682C69DB07B3 +:10105000235F889702CD7B023A3E6327F5DF0B7052 +:101060001782591FDE05A218E8B47169DBDD3AEE7C +:10107000C7751B556918EFAB6B5B3081DA2B591ABA +:10108000F57FCE2429519EE95ED4B6C063E91FC620 +:1010900083A9B303EFF37B06F7417D03FB2FD02E2B +:1010A000284379FE814CFAF86DA7BE96FCCE0D2040 +:1010B0009F00DE8B220E922F63AB5927B3C4DFB59E +:1010C000221E8FBF3085E3374DBC43258324C638AD +:1010D00044EADCA7898952C3F6F7FDBCC54AD2FBB6 +:1010E000BFF6F7912F4CE17AE86001E003ED8A0941 +:1010F000EE18DA154B919FC7213DF9FABE28F2A0F0 +:101100008EEF948F2D7297A23278DDAFF3FB7205CC +:101110002C8EF099ED92EB61BFB2A5DC6CC7BEFEE0 +:10112000AB8272A87513A3F7D0BC05311DFD096B06 +:10113000BF72D9D0FD5AEAE15BF9C38DCFA461FA41 +:1011400031D795D7194E417E3E3A89D365C1FC4DC2 +:10115000E63A95711FD0EBB5DBAB9E40D5F614187F +:101160007FBBA087D7DBDD837EE7D1B314DAB76519 +:101170003B6BF763FEFBF7CA2467B314A033F49705 +:10118000D5AE95A01CF954C8B98CE0D279F83D636E +:10119000ABC2F47C24357F1722C8247AC77F83DA58 +:1011A000311BDF5735541E7F2CABB8F1FC32F83EB3 +:1011B0006DF617B4FEA6BD204B68177D1AE070943B +:1011C0009C91528FFAFDFC33464FC1757547D23B57 +:1011D00015663A2785FBD75D224E233D70A89EEC0D +:1011E000CD72BF84FAEECBCFB95EFA5AC039DEC9F0 +:1011F000E7CF5807D9954DD90ABDEF21E7F0D4A91B +:10120000D6D7211F38EF77D3BB58CE6FA6B951AFD1 +:10121000341F77D57039D84BF6A6D313D5F09DABD4 +:1012200082CD32C5039A356F0C9FE24E4D29EDD128 +:10123000514FCE56E85DD1D4B314E2FBB4944B6366 +:10124000B88FFBA33D1EAAAFA6B86328EFBBAAFFC9 +:1012500016A986F2AE990AD9FD5DED0B22B48E3443 +:10126000591B477A2EF43AAEB3AE355A08F92B150E +:10127000F76F008EB7179D995DCBF707E87D387241 +:101280003D654BBC9D858BF0BEFA0CADAA86DE4D4C +:101290004CAB72A31C4A9B5DEDE6EDECEF6EB654D1 +:1012A00073BF0ECBAFC679B6B07DF88EB9B974D323 +:1012B000D2B648181F50AFE1DF5AD267E8B57E1C9E +:1012C000D7FE0E5DBEDF1D47FB3D47E3FB627A1193 +:1012D000B757F345DC12BED3BDA39C16FB7A465626 +:1012E00043FB768C617FC793616401E6374AC0A1F6 +:1012F0008AF99FF9B1BDFD28710F6454D2BB76E71E +:10130000A498F1173B9E92E79F13ECD2D09ECF3169 +:10131000140226795E39411E9FCDD7BC7C7E413EAA +:10132000AFE479CCD08E54A2DE4B9EC799ACB709FE +:10133000F9707483FD7B32BC33AABB22683FCF288F +:1013400052082767B2EE668CBB9B74F716D8D7EFAE +:10135000A77E877817A4AA2D05E639B65D06059005 +:10136000E87F5C87971996F1C66F4DB7E527C446AD +:10137000DAEA4FDC59602B9FD47DBAADFC8CDDA539 +:10138000B67C497C86ADFE949E2A5BBEBCF73C5B76 +:10139000FD6987E6D9F2D3FB16D9EA9FF9719DADB5 +:1013A000FCACA3CB6DE5DF39BECA96AF643FB4D5C4 +:1013B00037FD2A961DEA0D07F15E56B004E59689C1 +:1013C000AFEFA7D8F78B93FDA8E47DC2808FE3FB36 +:1013D000647E5A4B0A8F87652D286051CBF7E0DC7D +:1013E000D36DF9ECC5A52C6AD36376BFADF59BF937 +:1013F0000BF9EF3EF17BD52D9997D2BB1AAB26386E +:10140000E95C3CB97AF8FE574A1A8DB7EA9571F44F +:101410001ED94FD2C277A21CC7775D8C0CDC7771C6 +:10142000923EF3FA9DFC1E92FF27DCFE2B74D31E26 +:101430009CB72846FB302D8DED671782DDFDA34656 +:101440008352A52862A05E51827C5F462B3A4A797E +:101450006D26CF5F9FA213FEB49950DF320F5583E4 +:101460007E2CF37C53E6F7BD8E82DFBFC3E2F72705 +:10147000FBF9514D7B78174BF8FBE047C7BF43EDB5 +:101480007CD4AE001DB5D2A1FDFA99ACD781E9D9C3 +:10149000EC28A55DACBE00EDF7B79C866324B4FFD5 +:1014A0005ED7816508C7F4322FBD8B837180144BE2 +:1014B0001CE0709A9687FAFA5E6764D3411CF7566F +:1014C00095A1DEBCEAE20BDC280FAE9AA084F8BE40 +:1014D0002938F0180FB8273DC4F5BCD0230AF314FF +:1014E00042BD4BEE282CC5EF594A3DE9DBACC59A0D +:1014F00084FAF11F29A67E2C23BD90D1A184741DEE +:1015000051A35761BD603B0BC5A1DEBC02D097A8BB +:10151000DF7FCCEFC117149DB60FF1346A455CC272 +:10152000DFCFD0C23A9D072978FFDC1EBCA7BF41A0 +:101530000578509FDEAF083E71929FB7EA1E85FC8A +:10154000BC55AFA81E7CD277D57AA504054900F713 +:1015500065812FB44AAE8F0AEE3F2D86F6C09D926C +:10156000F600F955ADAE10FA55F7093EB81FF9026D +:10157000ECA6C3596D6BF1BEFD047F27DDAB9A1855 +:10158000DCB316D349B987650CCF9C512835E33BB2 +:101590000125C5F90E3C4731A5ACB219D3F299B576 +:1015A0008E20A4D3AA25BCF6C23E49E1E75D2E5F9A +:1015B0007AF121B4732A353FBD135330E3E3852814 +:1015C0008F4FFE2ECF563A17CE96DADFE5A9CCF034 +:1015D000D3EFD068C8E7F99492DDA92DF0C590CF7C +:1015E000C1CEA638A351C9FDB4DC705C427D08EDC4 +:1015F000248CB36B718F847ED4A8702FC5B147AD96 +:101600006674EE2C2FDC27E17E4FEE0A3B9F8F4A5B +:101610008DFE03F9276F75BBED7B00F70D01BF2D24 +:1016200032973FDEF4680AF28F7772417AB3CEE3E5 +:1016300084171727F8E66DE15FFC5B80F38729BF0D +:101640004D3BF6F57E7FF4C1980C7CFDF0D1E806A9 +:101650003C1767348877618FC61D149FBAF962E220 +:10166000C73C110F5BFCB7EE567C0FE112D7D1BD22 +:10167000A9B860AEE3F6D60E8FDD3FBE24C0E555B7 +:1016800044A4EA06D0F867587EBF05FFA0FF27D71D +:10169000707B5DFDBDBF3D2D95B1CF05BC937FA592 +:1016A00055E1BE767E5C7B91D2D744BA0F52D11EF3 +:1016B000098FA0B241E2E09D2DC1FD58AF9369FBB7 +:1016C000354BAA1668E7E1B92EF6924CF462B98C54 +:1016D000F6B13B5BD2E977AD18F82578AF38EFD695 +:1016E00020E5A1FE068A0FDDEE65E877E80D0ABD6C +:1016F0001F9E3CDE18D6AFCF657A47D8E079376BAE +:101700006F423E3A63B745DF33D46BF6FC941E7BE1 +:10171000BEBCD79E9F76C89EDF2FF00ADEC8C142AE +:10172000130FF07F6374BEF5A98BDFDF1AD3C0ED12 +:101730008881768FDDBF61C20E5A224833BDCF6EDD +:10174000772C11F6CF92247BE2B05FBBB416D2F0B7 +:10175000DD513AA7136D70842480E10FF77F398E35 +:10176000DB414733E977C7906980AE57DDDA1FDF89 +:1017700034C65BE29B7784DEACDF0BF9770EB928C9 +:101780008636DBF15A4F23EAA5D10AE9256DDA8ABC +:10179000ED3E8C5FBFEBA2DF567A47D747901DDB4B +:1017A000A3125DD689F37FE63BCA66BCEEFA00B7AA +:1017B000CF969BF8C20D318AFBC47D689F9FB19B79 +:1017C000B1E2247B909787FD585E124F2E0FFB2BC2 +:1017D000B3FA9F8602512011BECB85FD89F935A051 +:1017E0004FCA0EDADF2F1DB1D09E0FF5A864A74EA9 +:1017F00066915494CFE87A633F93059E4349F78AF4 +:10180000278BFBC69393BE6731BE3F9B55E68FC5C2 +:10181000F207EEA36FD4EB252CDFB8183C12A8DA40 +:101820001E10FBEAC5AC18E93E1B7F6F04F1FC16E5 +:10183000FFDD08D7E1F1EFA07DC00EF07DBB75F9AB +:10184000FA66D44BDAAB0E3AFFA0F95849893FB19A +:10185000DFFE931321FC4DCAFE38E9CF1A1943F974 +:10186000DEDDE86628DF9F6AD428BFAB319BF2CF6C +:1018700036EA94EE6E2CA2F4F9C61095FFAAB18256 +:10188000F2FFDA18A67CBCB186F2A96995B45FF2C2 +:101890003ED4C3B8ADB764979BF631163B34E4939E +:1018A000E47578C98D37B92F03D1F67DDF2F6767CF +:1018B000023EDEC1DFBD9801F22DF0CBD94D85F699 +:1018C00078AD356E9D88D7C2FA9D48F1DAA81B54D1 +:1018D000CA719F2EEE8F89B8ED321ECF3E793F3C04 +:1018E000CE8D715F75B07E445C7C653B8FF3AEAC92 +:1018F000E0EFEFAF2CE3FECBFAE3F6F7999DD02FA4 +:10190000B65BB9EB46FEFB976A6F3DF991E57EE168 +:1019100047DE427E65F336375B9B9FF0274D3F32B3 +:10192000D9AEB7F8E736BD80279891BFBC6E89EB7A +:101930003FD6EFC710BF85716F0098FF74EDC08B65 +:10194000B8B5F50B8C27C1F7E2ECCFAB78BC89E7D3 +:1019500027EB697BD32DE5A1A2925919967C91FBC7 +:10196000F0C2268C3FF917513CAA30A5F4C50C4BA8 +:101970003CEA200EC8E34D6194E3FFAFE3517F16CC +:1019800071949F663E978EF104E30985E1F9E15F6A +:10199000673E3712FD59D45F188F435A737DC1F8E3 +:1019A0007DC822FEBB75FDFA459768DFC7A25FF6CA +:1019B000D3BB5542BFE4A519B23748E79D434DFA62 +:1019C000B07AC641E76A74A63BA78AF33C72A21CB0 +:1019D000A610E7EFD9733D49E563510FC8F4BEBBCC +:1019E000A51FA26B51CC4267867E9A5DDF4CEAB69A +:1019F000E7FFBBF499C95F9B945E3A0FB6E9EBC170 +:101A0000F97649AAE977F7C32D9F9896C0079DE715 +:101A10002CC09497C3EAD983F38CB6A8B6719734D7 +:101A2000D8F38B57DBF38B56D8F396F184DEFC9614 +:101A30007923FC96555F7F88EF578C4FE8EBA52CF8 +:101A4000FF1CB453AE61217A3FF6EA769FCD5F7CEE +:101A50000B752AC541F9EFB8D589F356ACFA20EDDC +:101A6000EFE6AFD1C94FB8C4C48FC1F5B81B30D0B1 +:101A7000FFBB2B96F1F3E7C8AB5AF8BC6CF640F20B +:101A8000FBFE7549BF0BA727C525DC3AFFBDBCBCD3 +:101A900035C9715483E0C0F1F0770D06C2F3EDC68D +:101AA00035FB3B027A04F166BE43DFCFDF4A9F84F9 +:101AB000FB1775F8DE29E26F0D0B7792BDF81D3A22 +:101AC000277799F9FE91C1488FEB628DB4087C2588 +:101AD000E3BB6EF16F6B10DF756532C51D594301B5 +:101AE000AD69E2C3027AD7DD89E5791B259621B17C +:101AF000FEF7532E137DA4A785E8DDF7232DFCFC0C +:101B0000E091C5F3B3D03F30E90DF838C2F1C1DF41 +:101B100023C96FB0BF3F720DE3760113BFDF7D4D68 +:101B200092FE37E95FC72CF605D2076C699CCFCAD5 +:101B30000AFEFBCB2B711F11F50BE3EF7BAF573682 +:101B4000DBDEF74FD62F8159A176FC7DDEA369B28B +:101B50008EFE62CB52A5A6D31ED7739EC0A019FEDF +:101B60003B2BB1DEFE20B36A8C1FFC16CF3342FB49 +:101B7000DFFE20A3139FA0787BE12C37F2C79B697F +:101B8000A1497209670CF74CC87B424F30C8BB5C57 +:101B900007CEAD199DC87BBDC7CFAD390BDAA7EB1A +:101BA000F763FEF9546654CFC47E797E5D7BDFB95E +:101BB000FB468B71406EBF9FFAD775F8BE85B9DEC4 +:101BC000F1E900CE2FF6F5972ADE31F455B2CDF8C3 +:101BD0009330E09F6E2E9712EDD2B19D344CBB8BAB +:101BE000D9666590767EB31DE898364B1CD08CF391 +:101BF000C9021EEBF80ADA015A3405FD8F3B672B48 +:101C00001AFA41FF5938B24E36EF5AB619DF894DEC +:101C10006E07603799F0CB83C31FC372EBF8EA30CD +:101C2000F0FF57E3E364FD3945F9B7860FAAAFCD5E +:101C30003A85F9027CF8241FD3A329F270FD81CFE5 +:101C4000B076F0F97624F59746F06547370D0BDF4F +:101C500010FDC17C3763F9FF05333A71BA0080008B +:101C6000000000001F8B080000000000000BE57D55 +:101C70000B7854D5B5F03E73CE3C92CC2427993CDA +:101C8000264F4E42A241039D840483463C8140A3DB +:101C9000F2182A68AC41869706418868DB69C566F8 +:101CA000300F12841ABC7AEBA3D2098217FBB7FD5E +:101CB000A3E56FF92DD2A068B1461B5B8B68B546D2 +:101CC000DBDB4AEB2D29EA0FEDD5CFBBD6DAFB647F +:101CD000E69CCC84A0EDFDFA7F173FBF9D7DF63ECC +:101CE0007BEFB5F65A6BAFD73E93A66A8CD530968C +:101CF000B298A53B64C6982FB843AA66EC1B73152F +:101D0000755B31D45D8C0D643356087FB212C6D238 +:101D10006632A6403B9BAA44F64AF05C616E4715CA +:101D200063454C090F435F3763E14FE039BB8DD703 +:101D3000935938F2898D3175C5F0FDB6C98C1D2BCC +:101D400057D3FDD0E9EEC3335FACCE84F61EC99FF6 +:101D500004DD93EDBD92BF82B1DAD5BDF50E78FEFC +:101D6000E06DAC9F695846927478FEE07024498318 +:101D7000F76A5B76F73068AFEDF0300DE699C97A17 +:101D8000DB55789E7EA91288409976A9A233585FC8 +:101D90007AFAC58FC8C5B85E07C3FE1D6ADD230C7D +:101DA000FA7738D4C5580F7F99B1BDD05EB85A5D67 +:101DB000DC00FD0B4376BF4D4378447DB3EC0FE36D +:101DC000BABE3422691508FC88B4782AD42529D0F3 +:101DD0000FF50E5DA17193EF60BB25C413639A32BA +:101DE00083B15CFCCB86FD7AB7CC463CAD8179A053 +:101DF000C8D5F77F454A65FCDF0C814FC4B7C234B4 +:101E000007D41F10F89DC4860E3B33117FFC3DC6DE +:101E100086A4C51E283AD891D26CC433FF978BF89C +:101E20002DE77F7F02FF17AAB6B0731A0CE754772D +:101E3000E2BAD8571486FBC3C4BE503F796CBDF0DC +:101E40008EA1745671F67E67ABC3BA1457C604FAF6 +:101E50000DAF98CF5211DFCAEF62D7BF9241DDE8D4 +:101E600007F89C391C53E7851BF13689300DE51BBB +:101E7000979F60006F6D45C71C5CFF24CBFB8CF502 +:101E8000125D1BF4C1744553E17D49BCCFBA028C8D +:101E9000013D3A99BFDB31191F36ABBFBF90DA6DF8 +:101EA0009F40B90B3B229D1432A273EBFB52685B3F +:101EB00000E767B3C438C9CCE5023E703AA1043CE0 +:101EC000480EE6CA45BE005AB0E17EA4DA22486F49 +:101ED0005B24A6E0F3E87CC30CE773BA523A7EE7D2 +:101EE00005FE50FD2E5CEF563B6BEA477A06C40EAA +:101EF000E1FE28011599AB1DDA2B111EE6B731A0C2 +:101F0000875B550EF3568FFF9A7A5CEF8B76A29B18 +:101F1000761FF483F75253B4652C1D9EF72E6E7412 +:101F20005DCAD82F6643E3C58C6D57E77787EB60B2 +:101F3000DE33F92C381D7086FF2E83BAD2CA707E2C +:101F4000E79922D3F3A7DB180B9E1FADCF7697340A +:101F5000E07A1E11F2630EF377E07B735C320BC6FE +:101F6000ECABF34C2E0B7AE38D5F607AFE749B8BA7 +:101F7000059D13193F85055DB1E34F4E30FE7996FF +:101F8000F1D5B8E347C7F59AC6ED5418C991705317 +:101F90000AEDBFF19E51FE589DBD4FCD82FD72B03E +:101FA000169407CCE71FD201FF5B0B322BB7697C7D +:101FB0001CA49F7999E97DDBE0FD27552004E8DF2B +:101FC000307FB282F281152823A3F40A7C3F4FD0E0 +:101FD000AF0D2802E9B721D36EA17FBF12F0E0BA9E +:101FE000ADCF63F808F86B19D243CDD8F5DA3CD5FC +:101FF00043B89E4DCB9C9AB3786CBB51BED1C6669C +:10200000959631F66A52EB32E667ECB5DE55AECE08 +:102010005AA8A30CCA63EC4FBD5F6F0C03BC6F489A +:102020009C3E3B339F2E5BE14E3C5EB3C294DAAAEA +:1020300071DA1D036528F79B6D2CD84F741D9CFA2F +:10204000054F4C3B00584B722562826B59AB34AB49 +:102050003486CEDEB0C13EF0F5D4ACA8187F3D7515 +:1020600019E3B43B076A683D326B4DB49EBAAAB31C +:10207000AFE74DC44F05AEE71765E3AD6799C2E121 +:102080004BD8EE1822FC2C43FC548C5DCF32C6F1A9 +:102090007BD6F5D8389DC27A6AC6DB2F5C4FDD3817 +:1020A000FBB5CC3944F85986F849B09EBA89EC574B +:1020B0001B1017C893AD8ED6563C07932BF7BB2643 +:1020C00003BF6D6D965594B1C67B4B6FB9D5750D39 +:1020D000D0F42D771D989B0574FBEA6D32C92F163D +:1020E0003E30B7BE94B19D12976733D27774235DAB +:1020F000BE3F7F5339F1D747F03EC8EBEB704290BB +:10210000CFD7299C1FBF58E08E6C89E1E75D20D7AF +:1021100074900B11903F58EE0639A1C3BAF6B4F98A +:10212000A8FE689B46E5BEB6722ABF03EBC6F6EF73 +:10213000B6D552DD18A7A245D251FF98BA5ED2FBA0 +:10214000E2ECF7BA7489F0B13357BD7635CAE9FAD3 +:1021500064FF5E94132D9730DD25FA95E062FB9FB6 +:102160004E86F61D57B3CA6D50BB601F5F7766433E +:10217000764496104F4786DA50CE2CB16B12D4B706 +:102180006AAC91D32973D703BC2B6C42F6801C51E7 +:10219000A1DF7078EE1E943F37A4DB69FE1505833E +:1021A0004D129C5B2BF01C9E46E7158DCFD64974D3 +:1021B0003E053BECEFC4CA972FE2390BE77556405A +:1021C000313F67DBFFE24D253C933E738DCB1079A9 +:1021D00095CFD7C03E66B6DA35A000147974FE6597 +:1021E00035382203B08EA56FFF54B5A15E54A99077 +:1021F000FEB53349CDC5F30CF88A8532683DC47706 +:10220000CD0CE633E8A518E733D719BB93E061722C +:10221000735A10CF4B7C34732CDE436F6CE9381249 +:102220004377C1744F269EBBA03354A0BCFC90558D +:10223000DCDD808D0519A4BC59DF3FDD16EE3802C8 +:10224000A8CB4BE7C06C75703963ED67ACE71695AA +:10225000F7DBD53632EB7765D1F51529C3129E33FE +:102260009342F03C663D2C53672C46AF4B04C72E7F +:10227000E9BD5C360EDF16C17EC8D3480FFF3DEEC8 +:1022800013F1903416FE30C29F120B7FDDCF4B59F5 +:102290003C7ED1763620BF1C95FD5BB4287E0C7C3D +:1022A000FC77F3CD34C47F8D40D20C812FE017F939 +:1022B0004EBF86E734CBB6113D1565CE3EA14CE34B +:1022C000EDEF98E825A60E70CB4F9F9034D0E7BF76 +:1022D000DD7694F6C9980FF647EAACC0718725B44D +:1022E000538A06A01FC8372DC46C1D505F8DE3E0D4 +:1022F000BE5AE49BB6F9A8695F4F27A54E636930C3 +:102300008E9B95A3BDE463C97EB447422EFEFC2B91 +:10231000C9A9BBB13C9D541441FEFA8A1C0CA21CF5 +:102320003C6DEB771543BFFD79C11FA6A35D967E7B +:102330002480CBEFCCBEB81CE9A839747BA001F493 +:1023400032D5CB9607E2D083718E1E16787BC33EC2 +:1023500050980EF0BC9B37FB707A1CBDA039F47509 +:102360001A6F9690E7D6F6E3380ED0F343E27CBDC1 +:10237000E6E6274E3C0AF0246B15554863C9E54351 +:10238000F3A7039D74FF7C7215AAFB43625E00B83D +:102390001AF5954D39C19FC7CEEBD2542548F2AA04 +:1023A0007F26B6CFFACF8AC77F0EE3755FE9566501 +:1023B000A0B3F7ABE56A9B6DEC3A609CE3388EEB1B +:1023C000CC36A273639C4349C30FA19EC2D85597D4 +:1023D0001F073DE550FA70BE04F5E1F4AACB338146 +:1023E0005E0F650DE7637BE316D67304F8EA10D041 +:1023F0002E9E17E5F7B01E3C2F665DF1DE2377A316 +:10240000FC3BCFE1C76DED117A8D31EF951932C1EB +:10241000736586190F83EBC7C7C388C05B0C1E4664 +:10242000E2E1A1395FFF0B3E87452E9A0EAF74B7EC +:10243000B1C06A58A39ED39F341D363E57EB7FEC44 +:102440006E866678A4DE564CE3FC95E3A1FB2F7202 +:102450006A749C97F3F4BFE1F3C1F5BF983F1DD6B2 +:10246000953428FB25C0A7AB94855352E93D9611BE +:10247000F39E9EA32AB6E2E83E7CD1C7F9EB062F75 +:10248000975F1942FF6977F4FA1643A996FEEBAD00 +:102490002ABCD7551C6E0AC4A113E6B5D1FBC0A651 +:1024A0003ABED7A1EE76AD8CC1A396C1E9A225575D +:1024B0004FCB80F11D120B60BF6DB51C6FA983DE81 +:1024C0002AB2CB4A59F517802F2FF6F2FEB0EE1C38 +:1024D0005CB763662F3917924A39BCDB2AEE61E894 +:1024E0000F48F2DDCBCBD26116847525B17E17EE95 +:1024F000F779196A4F472DC2E12FC7FA3CEF233D08 +:102500000AEC7F1FEA26A0C7EA5047FB679703FA49 +:10251000A09E9FE7A0F3CF0AD7795EBE8F7A8E7E0A +:102520001EAE7B0C9E9CC38FDC0DEFF74C71F8C385 +:10253000B0FE59B6DEA695484F57B8E97C87E74DFF +:1025400091187C35093C3465D8E9FD9EBFBAA8DDF9 +:102550008AE789D2D9A51963F8ED525C671C3A9BCA +:1025600095118FCED212D2D93C1C270E9D7D1EC74D +:10257000B1E2C15A577C2C8C7CAA9CE91AE2A5EBEB +:102580006D1C07C82ACC607CA5713B8D2B9F49A68A +:102590007EF299ED435857D420C379B2A5E035387F +:1025A0003F1B941494F74942F4CB6E9DF6F9F7E97A +:1025B000E3CFA39476F1F15990A19E649D07C65F85 +:1025C000857058C777BAF401A4437F068767D6158C +:1025D000EE209E4FB384FE6DE055F62AD4FE4A06E7 +:1025E000B7EB12F1C5455EDE9E882F8ABCA37CB195 +:1025F00069227CB148D023ECCFD7A87F42BED84314 +:10260000657239E78B64C117455E166EF4E17A395D +:102610001FF4647CAB275C10E59366EFF74D7CB24A +:1026200014EAC82789E0AB15F0A14841FCBC582D3D +:102630008751DF7B9F4DDD8DFA6A6AADAAAC84E7D6 +:10264000BD19C6BAF5BB09EF6C9821BDF6B191C3AF +:102650004EE4BF5A89F8C513EED75D082FEB65E845 +:10266000F7BA5FD0F72ED46B516F3E8F119F32A512 +:1026700097213EACFC9B543A40E7E4A87E21F075DC +:10268000A337F06D9CB78F0D4F41FDC6D80F2B3C83 +:102690007BC47C5A9EBE271E9D9FEDBCF8299E17C9 +:1026A0005958F27132FED3D51A8FBF676D78F2C4D4 +:1026B000A3E38C7344BCFF63813743AE271B72BD19 +:1026C0007C54AEFF98E4FAFA6D5CAEE773B90EFC89 +:1026D0007E302EBF7B81DFA5B8FC7E2401BF3F1B6F +:1026E0000F0F7F07FEFEE578FCFDDD51FE1B1FDFAF +:1026F000E95E8EEF74EF67C3F72981EF13A21C0721 +:10270000DF27084F63F1FDC773C4F7A904F87E3FC4 +:1027100063FC73FCAFF1F6DB85F3F2713F8E1D575E +:102720009F04ED12D2B52AF467ED16D4971F027DEF +:102730000BED4238D724EF3F667FD3BCE3ECEF2CA0 +:102740001BD7C3D666DCD41376FF5DE62B1C6FBEA9 +:10275000D733385C673BEFFD828E002FA5DEACB12E +:1027600072B28F717B5BCF095EE8E572EC72944BBD +:10277000BBBE962161BCA4401F9050DF3E4FCCF7FA +:10278000708646E319EFED52062405FBB7AA5258AE +:10279000328D5733DE78D675C0FA6AB1FF8D5E7D13 +:1027A00026967B322C7A9BD01FFA32C22D28B7E7AF +:1027B00009393D4FC843A3FE4EAE5EEFE5E749033E +:1027C00096A07FDF662BE1729BEBE95C4E1BF0D895 +:1027D0000211368CE70A9871782E46E5FDB2BD8667 +:1027E000BC5FE3C6FE8AD0DFF405B8BEB95E95EBE8 +:1027F000C362BC44EB6C167A64B3D807A30EEBBC7F +:102800005AACF3DAF1D669C5D344D7DB195DEF2AA8 +:102810006F4DE2F18072080E63DF700CB48B073BE2 +:1028200038BF2E1A9C4C7ADAC651FD35B001C7D399 +:1028300053D4235E0A1EA8C938EE43C26FFCD0FAF7 +:102840007B28DED5B759AD447D2EAF859F73DAFA6C +:10285000A23EB417BF2AF6CB4AA7A3EF3BFAA74C78 +:10286000AF20BCDC8178B9AC8EEB0D6920377036B7 +:10287000E47FB42B339C611FDAB3DD52D8B712E981 +:10288000FF72D04FB1837B495CBFC7A85E2FFC1A93 +:1028900006BCCC5D7D96FE5BA8BF9A126E0D9C4B6C +:1028A0007F27E817EE583C7A2B095DAE9123DE6A4C +:1028B000F435A4933FEC6141B7B04FF713BFBB337E +:1028C000C95F62E075ECF87CBFEA03AD12E239A99A +:1028D0001CA682A7498130FA40984DEB65C3A81F1A +:1028E00095027DA03FD3FD0A8D175DC7F4E9E6751B +:1028F000544EC77544C7EF32D6F31DA29B09AEC72D +:10290000E897182FBC9FE14748E437D89F173C88C9 +:102910007808635C07F7F5379E483B2DB8F573815F +:10292000A9580E90BFE432210F2F73B9497EB28FA0 +:1029300094F762E30F2035593EF96D47E352D227F1 +:1029400029E7B48E17C75BC744FD16C7BD63FC16E5 +:10295000C7BD3571FA0BBF452A1B0ECBE8FF5119D5 +:10296000E98F38657E15E75FD40F7F2BE8252D8131 +:10297000BEF75BC15F067D5FD3399B95B8D10E6012 +:10298000614F062FD3AA88BFDEF5523F7ECEEA57AD +:10299000A62B685718F018F019E37E28E0185DAFF1 +:1029A00083DB0F6FD859D3E36E0E5F55EC7AF2EAF2 +:1029B0003F8C85D380CFBADEA36DA140831DE35940 +:1029C000412ABDA13900035F675215ED63D85E85CA +:1029D00061E5A1EB37C112BE2E055926ACFBE6F32B +:1029E0004E7CC30FF819724DDF82FED78DF3E19D47 +:1029F000E289D3C7A7A50B2B3D9CB6A96F0461DE66 +:102A0000F6B9954D9928A1C2D3AF1804DDA3FD45B1 +:102A1000FF7137D4F3EF9D7E850FF8A2FD657F53DC +:102A2000161C190B33D56DDB417EB42F96480EB3BF +:102A3000F00F92EBF1DCB89CD7CB32E75F81FA4321 +:102A4000FBB512E91317C0FB543F6CD6EFA27CD53F +:102A5000C9ED01E441C0777BBD94A01F977B9FCB5C +:102A6000E4E75EFB82F1FBED31FA2D939AE2F9D1B6 +:102A70008C7E5BB378BF109A2AF8CE191BC9E17619 +:102A8000FD9D1724A81FAEE3F13976A49EFCC297E2 +:102A9000198A4C473DEDD34B624F80DFEA705F9F50 +:102AA000B9D449E745EF15C9117CEFF04719DB515F +:102AB000FEF7EA25C47D4EA00777152F919EEDC045 +:102AC000E7B2A80BBA9E93497A8E549D497170550E +:102AD000417E4D446FCF97BD5A84FA14D0D5959C52 +:102AE000AEA45ED4C3865C93B7FB61DE8D0764BF82 +:102AF000534B4C2F63E13EE5C6F3D90ADFCF6BE5BC +:102B000024C93D160F00F71771DE43052383B8373C +:102B10002FD5DB6C77C27CCFCC744E19A67330D026 +:102B20009C89E7ED2FF9B93701385663FF7387C3E6 +:102B30007F3C88707CE4E0E7A858E7C204FB257B73 +:102B40003E70E3FA102E3C77008E4D08875C385CAF +:102B500080F2C358FF44E5E41D995C6EC5C8C93BCB +:102B600032E3E809861C817D0E6772BDE9838D0C16 +:102B7000F566AE3725925F3B32CD7AC704E4D78E37 +:102B8000D8F9272ABF62F6E1BE4F434FB0D384770E +:102B9000BB403B543515EAB3F06F0DF33BD8B0732F +:102BA0007294EEA5336CC093CAE91FF334DA834103 +:102BB0009F574E3CFEFEBCC0A3B82E7BE6B01C3C2B +:102BC00087FD797CECFE3C3EDEFECC95DF6B4F034F +:102BD0003979AA4E2278F5330012C95D30ED62E0F2 +:102BE00099E5DA4EF6515A2DEC614CBC215D7731F6 +:102BF00025263EE76D544DF5AC80CFD43FA7493331 +:102C0000B5E706CB4DEDF92D7E53BDB0B5D6D47FDB +:102C1000524837D58BC38DA6FE93BB03A67A596F56 +:102C200093A9FFF9F7074DED53222DA6F60BF7B543 +:102C30009AEA53FB43A6FE9F3B1036B5570E749B92 +:102C4000DAA71FED35D56B86EE37F5BFE878C4D42B +:102C50003E73789FA9FD9277FB4DF54B470E98FA8E +:102C6000CF62A3F95712E5BB8126A918FB6433B5DF +:102C700053FCE9141026E6D5052A25F21303790D35 +:102C800095827CB88A77615789BC2836DF4EF91C5B +:102C900061F80FCFDD406C7E47318EAB2A986FA66E +:102CA000FBEDA6FCA959221F6A96250FAA9E95A4A2 +:102CB0006930EFACA3328B407DFE59E86A2C5CD2C0 +:102CC00059E062FE0184EB573C5F8E85F521CC53C1 +:102CD0004B04970EFF215C8BB011DE5B7886515C54 +:102CE000780C9C029E85B592827C37065EC6FD01FB +:102CF0005678ADF1CEA22C11EFF4333FC6FDE6CAF3 +:102D00006E5AEFA95740AEB0C478A80FBBE85CADCF +:102D1000D7A508E2CD887B8E81D7C7A27402702523 +:102D200069663E4C2937F3A1C7EF1B9F8EC26C5CCE +:102D30007C9F0DBF1AFCC7F5B51105F13BAB4E6288 +:102D40000F1627C6EF22C59C4F3451BC5E9E25E26C +:102D5000E802AF1FB2BA45D3017FFAA27405FDABFA +:102D6000563967E00FECA445595989CF9DE6AC73FD +:102D7000D69B9BB33E85DE1C7BFE677D8A7307CEA8 +:102D800085B5382F5382DAB9D837B7658DB16F6EF4 +:102D90008B5DBF158E51FBA68EFBC78D738C954A3C +:102DA000C43F5D33D96EF4E385B3C6B773C25956D9 +:102DB0003BE794126BE7E8CE9C64940BA02774E287 +:102DC0007A0CBBE7FD6AEF117409DE2EFC8351F823 +:102DD000F56EC4DB44E1FE97B170FFCB78701FDA6B +:102DE000C2FD18875E94FDBB61D66733E5812C80F8 +:102DF000F71E3695F2608C784C6390713E5576EEF6 +:102E000043E30FD6FF308EDBA8D54B6BDDF8FC1605 +:102E10002A13D1DB77CE9DDEBEF319E9ED89AC4FE5 +:102E2000A16F7E7A7BABF57810CAF64E6E0F6DED12 +:102E3000E179695BB7F0FAAF045D3C23F0B0339BF6 +:102E4000D3517D6A2DE9B79D9287E464E7DBDCCE40 +:102E5000E8B24B11C6FDCC3FC3FD3F923B230DF5BD +:102E6000D6F7077FE90EC6D83D6F08F88F09F8DF5F +:102E7000FCD228FCBF20F8BF2CE06F5AB5A3C604D3 +:102E80007F814AF21AE58C1C85DBA1F653BEC73C54 +:102E9000D94DF07594B28893CE277DFEDC6C4A53F1 +:102EA00027F9DD51C0E5730ACA67A8BB449E1348E1 +:102EB00055CA5FEA86FF484E8BBC26BB2F26AF88DB +:102EC000A1DF98E7D1A4B0987CA7E268FF244B1E4D +:102ED00092552EBE67C84507CBE1727173F7850422 +:102EE00057D0176B5759E5A2513F323C3967380E1E +:102EF0001F19655AADABBD34465EA7EBAAA9EE6DAE +:102F0000F4B5C7E6D9650534537B4E53B9A93D37AF +:102F1000E837D5F35B6A4DFD0B5B75537D52A8D145 +:102F2000D4BF381C30D527773799FA97F5064DED81 +:102F3000E7DFDF626A9F126935D52FDC1732F59F14 +:102F4000DA1F36B57F1FFF203F40C9953AE0E9FB05 +:102F500098D707767FDEBF4EBA12FDB35D6F5FE391 +:102F6000C3786867D6D5AE587AB49647B238DD26AE +:102F70006A37F8F7505B20D050C6D8405B93899FE2 +:102F80001B855C3BD2D642EDCFB5B5D2F3AA6CCE51 +:102F90004F4AA6C8C73F607BDB998AF4DB1A46FA22 +:102FA000CC968255D928478F4A0AEA1D86B9889A55 +:102FB00011FA0B2F3B03F3C5C05BCFAE0D34C4E059 +:102FC000638E6B85A97DAEBAD6D4DE08F8B818E456 +:102FD000F6E77DB7989E5FAE7DD5F4DE968295F7D5 +:102FE000231F6DF53918F211E59D5D1CC5EB568563 +:102FF000E3D9C0EBD6032B7DA88F8CE29F7DFE4AE0 +:10300000BC9761E0FF8AEC0681FFCFFBD0BE3D920A +:103010000EF81D878ECF865F2B5E8F8A785DA3C3E7 +:103020001C87DF2CE49551825C5A86F87D7150FE36 +:103030002048D08EEFCFB0CE6F9D17E4554B368C25 +:10304000FB1F65AFDE700F1B2BAF43D93CAED668BC +:1030500003030BF49E467BB811E318865DAA481C57 +:10306000E79D59F3FC18F7FFB2A00FC6BE46ED5F0F +:1030700032F624019E141024033172482A5EDA8449 +:1030800072B831CB41FEBB46912F607DEFA66C1E1E +:1030900037F9ACF4F4A9E948D0874147067D24927A +:1030A000EF0A6BA5FB308ADBC1E380D1B8DEFDC43B +:1030B0002F43F1F9C57A3E5AC70F319EC7CFDC3C8A +:1030C000DE471D51FF3FEA25BD2911DEB7B6A9BA7B +:1030D00082FABEAAA5D17D0C91CF0D0AAF2F36DFA3 +:1030E000F91FD5CFA81B7986D6FE21FC13FD4F3ED4 +:1030F00037C18568E6978F82E598377154F083DF92 +:10310000A73F85F8F3FB023F213CBA82E58837A848 +:103110001FA6BA3A5A7F06E99CF9A08E7103559D05 +:10312000507C02DEFB19BDA78C8E334875371F0714 +:10313000EA2FD13C99A3F521AA17F0FE139D27C6CB +:103140007FC8E11E92E95EC6078A9E960178B93A69 +:10315000B48AF4B06B436BA9EC6E53EB7F0778FC39 +:10316000755BA0A303F8F9EA6BA7AB980F73ED9A10 +:1031700055548EEA6F827F1CC54A00E33F72B12D21 +:10318000B087E2893C2E2583BAC3F1DA4175CC239E +:10319000DF0CF2B579FDE28E8E183E70E17DA3C999 +:1031A00068FF297F8BB5A7EA6DFA7F649F43BC67F0 +:1031B0002C7C2093805E3F709746C244BFB3D57885 +:1031C000712503CE44E337279013069C06BEAC74EA +:1031D000D7535AA5E239AA9481BE954AE390FEC519 +:1031E0003C2EC14FBCDF7530FE138837C5AF217D43 +:1031F000621DE9D5888F5E0728DA5C159DAFDE1663 +:10320000C8C8C91A8BC789E22913E618A2F97A2916 +:103210008E77AFDBA887291F2A50CAE37A491A6F35 +:1032200037D691138C308C03A65433BA6760C37EB3 +:10323000681FA40CE9B64AC62EF9E6C357FAA640A1 +:103240007B69D067F353FD05250BE3D550C7DCEE52 +:10325000F0C32F1CA9433B4ABD00F34C5D1D0FBCBE +:1032600070F452CA7F127AC9032FA0DCEB33EA183C +:103270006001F9D9973C5AD75D604BF5958CD6C360 +:1032800058DF25F2212EF9E6032F74703FF68C9C4F +:103290001A8C43DAC264DF304F84EE19FE9DE38B53 +:1032A0007D154F1C2D417BC1A7F8CB34D48F99E9F4 +:1032B000BD95390EEAF79C2FD888EBF16C1E21776B +:1032C000C65D15191E94CFD17D8858F681E33D5017 +:1032D0001E11F1D508EDCB24DF07E17A986F521D5E +:1032E000BF86A731751BD6B50E9B3A400F789EB9A5 +:1032F000ADBC557260FE4D0553F19C6D17F1EE9417 +:10330000721EC7579DDC9EBB2E879F7337E5C8A2F0 +:10331000E4E76B9A9117DA68A3FE69A28CC2DF21F9 +:10332000FA2B26F9D29C1FBC212736DECD06E69764 +:10333000C33AFA3A323230EE5BDF61BB0DF5A06F73 +:103340008BFC1ED8A7B948C7837E6F7290EFDBCD88 +:1033500054B7EE9B80EB6CFB9668BF0C3B2A51FB8D +:10336000D5D7CA74FFD5E60ADEB714E6BDF980B733 +:1033700012F3A98F35C9D54350DFF0540EE5177409 +:103380000A7C6DB48D64E379DB33B03380A573FFC1 +:103390008A70BE86E7AD665AC7C683F5943F7367E9 +:1033A0004A6A1DEEB7751DC73EFA6926EEC3FCBF1B +:1033B0003A89DFD10185FEABE5C45C04D62BE8AFCA +:1033C000BA5EE8418F89FD7945E85BD71BF6191B8A +:1033D000BD272A7D02A6E692C08A0588BF954D3298 +:1033E000C33C88E5D176EE070B71BF950BFE437B9E +:1033F0002EC8D2E7217BAE089BFD596B987F1EDE5D +:103400001B5AD56D792EECB93516BFD8354D517D87 +:10341000E87D16956F4B34AE472CF1A744306F67AB +:1034200069C0AC47BDFAB1BC1CF5BE63F82EACFB5D +:1034300058F3F9BBB19F151F1FE4703BFB15A17733 +:103440008EE287515FB6322039F0CAA3151F56F8B5 +:1034500047F166C1C30AA5725E9636160F56F8018B +:103460006384DF35805FCC334A848F79F27C3BC63E +:103470008B572D9648BFB3E2C78A07C31E37E0F9C2 +:10348000850127F31F4B81F97EBBDDCE50EF620330 +:1034900097517C6C91E817030FD9DD2AFCC7FD9882 +:1034A000DAB35E5C272013EF555E15B69BECF5355D +:1034B000C25E5FC90269E8470638DF49B0CF26BB64 +:1034C000DDBA6E2B5C0BC47961B5EF993250817A0D +:1034D000CC891CE1579E66F67FB2EAACB872D76A17 +:1034E000E71B74B53CB4D8A44F4B2C385A57419FB6 +:1034F000D8E49335BC173CD464BF0FD5A6C5AE1134 +:103500007E7F54DC2B5ACC5C9A1BFAB7C043846B89 +:10351000919E447563BC53BD5223F2E526182E4498 +:10352000E7AF4E76C772DE05CAF061C4DF269F831F +:10353000E6013AFB2096CE12E121C927FC1CD3D824 +:10354000B47381BF2B8711FFAB5E3680F19011C938 +:1035500015D92D45FD72E8CA7480A82CF2150B7F91 +:10356000A36E8EEF819D80F273027EBA225F9C78FB +:10357000A491EF60D0E7F52EF780CCE9EEBD51FACB +:1035800030E53B0419FAE1BAF26EF223BEBB92B900 +:10359000DFCD3827419FBD00E7E94AE6FE3743CE3D +:1035A00027A33E2863BE11E88331781B734E1F5951 +:1035B000BDAF0FE83BE856D836EA554EEB0BAAC62E +:1035C000FA46EC38CEF290FD54EC38410F48950A9B +:1035D0005CD7C52A962B7D3C6F6325E3F63F0B43F2 +:1035E000FF98B84410B7119F637275CCF8D87F3339 +:1035F000E6FD74C78C5F42E3539E5C303739829B93 +:10360000629D7FCCF96599CF3A5E97C8F3EB72F86B +:103610008774F45BFF4CAEDC42E0727B6581CF6661 +:103620003A7756BABCBA12737FFB9D5C7753ECF9BC +:103630006D94C67B063EA37ADACCC1583DED2E7B55 +:10364000F5E0D1C2183D8D550FA29FE3D3EA69B7CB +:10365000FAAA07F13ED8E9379D742E9C6AE47832C5 +:10366000F27114502BD232C82E0B63E90AE5133CD9 +:10367000467E8E57F34BB86FB7FB346EFF6A3C2E15 +:10368000ED55FCF41D8C7B8C7BE5F80FF6E19E0C70 +:10369000B50FE5B4D3C53A9232F03D0EB731DFE84D +:1036A000B8E57E49AD48ECEFDEEA3BE7B8FED678F8 +:1036B0007C34686B7DEB0ED41B7F26338C4B2CF354 +:1036C0007D959E5BEDB09D3E7EDE7D5D0AEEF4D580 +:1036D000A01CFBE5B2AFA0FF64BF93FCCA377FF923 +:1036E000C4376A34C40FECF774B2CFEE437FB05CDA +:1036F0006623FDBCBB90FB7DE42D12D92F3D9AA320 +:10370000713FEA21D9F53FC175B146CD86F47C2AD7 +:1037100099D3F3B1EC067A7EFACDAD3EBC8793EC3B +:103720004BA63C48794BF1DDF41D86E765FA3E4235 +:103730005732A3F3BACBC1CBC77D5C0F7C5CE0F5FD +:10374000315176DB83E5AD15984F8D9B1BC5834BBF +:1037500009D377065C67147A2E8BEF82742507CB2A +:10376000BF14833F635CD71960E2E9F1DE77D07361 +:10377000848BDECFE0EB31FA3DE9E379A94FFAB86B +:10378000DEE63A9342F37565C0BADCB1E3A4F2E732 +:10379000B6F8F753CB7C730E21FE8F65EB3FF191AA +:1037A0005C1DB6A31CBDDE77F4387E97E4EC729006 +:1037B000C7233C1F490393502FAF97237716E37716 +:1037C0004ED405D5680FD6DB290F66A83CD383718C +:1037D000A59715D58376F990D8FFC05C99EC6BF866 +:1037E00097B504F765EEAA195CDEF1F8AB711EBD62 +:1037F0005CF1C4D06CBCE711B6933DB2DC158EE031 +:10380000BA62F41F1197E6DF5BA1F7609DCB1B64E2 +:103810003D29358E9E28BE9B62E89F20268E60DC67 +:10382000FD37A2FA56C3FB4B71F9C34C75CC9162BC +:10383000F551FEBD9135A2DFF290597FB2EA572BC8 +:10384000ABFDCF7935C4477F80F0315521BE98A8B4 +:10385000DE099C42747257C30F5CF8BD99E7845C23 +:10386000F034FC524739017AD252FC5ECEA206599E +:103870001D80DEDB433686727447B59DEC8B1DE5FB +:10388000C3CF5F86FC58AD686497970F2D9943EDC1 +:10389000352AEA4D4338452EF5E7F121B73B5286EC +:1038A000E77BCDAF5CAB62E86547F53B53F09CDB53 +:1038B00025E808C4A07BEE8C28FE103F1A09516E43 +:1038C000C71FF95A32C9A7B7B6CB221EC3E8BB241B +:1038D0001E1FE7C7B9225EB3EA3E89F2D356D51C54 +:1038E000ABC7EFDBACEA94882F976F96DF463FF9C2 +:1038F000F290596F0BB6823EA7119ECDFA9CD0F77D +:10390000607007D2EF44F53DABFE529C2BF4B72A12 +:103910005615ABBF24B2AF0CFD45617A796E567473 +:10392000FE950A8FB732FD2AC2EF5CF9BDE72F037F +:10393000F84E559794203E1ECCE6F4BF23F4BA0B04 +:10394000EDDF1D1FC9C4E7BB1CA0D8609E7F6ADDE8 +:10395000235B607D87BF7641CE6FA1FD925C87B807 +:10396000EFA47DB30EF9E06776A2A344EB72856401 +:10397000560A7C9F1492A834F6C5134A624A8CBC3E +:10398000F188FB5959D52352498C7CB93C979F0744 +:10399000E99BB95D9D55CDC2F9B05F1B4A4B76637B +:1039A0007E2B1C4CE42F4D2AD4AA908E8CFED9126B +:1039B000CFE7771CA8C72F21B149B00E9C4F837564 +:1039C000E039571C4AA17A49C84BE5E4503A95A51D +:1039D000A17C6A2F0B4DA6F2BC50313D3F3F7421B4 +:1039E000D5CB43D3A99C12AAA4F282D025545E0859 +:1039F000E71CF6AB08D553393574253D9F16BA8AB6 +:103A0000CACF851653E90F5D47ED95A155545685EC +:103A100056D0F3E9A17554AF0EDD4AF59AD02D5476 +:103A2000CE08DD4EE545A1762A6B435BA8DFCCD0FE +:103A30005D54BF38F42F545E12DA49655DE8216A9F +:103A400037F48D97045F2D4C5FA9F2BC1ABF1FEDB0 +:103A5000835D09E470772E97E3A77D7A6B6E4DB492 +:103A60009F2CEE4358FB75E49AEFD5DA5C03AEC9A0 +:103A700064DF4FAE42FB7E57C8A6D37E9595D07DBE +:103A8000BB36B13F49F6563DBF386ACFA737F07B0A +:103A9000301B0EAC20BF3AABF54EC83FB43157E3F4 +:103AA000F4A884E93B0EBB5A19C555934A87241CD8 +:103AB000A7AFC2D68872FDAE8A53F4DDAA05357A67 +:103AC00035FA19B470FFD112925773AA719D07721B +:103AD000EDC28FA4DF8DFC33A93AEB8AABA07D52F7 +:103AE000878DCC5D8DA9F558D71A18C937C3FFD279 +:103AF000976C3E0FFB730D7D6FF85EECBF2BAFB480 +:103B00008A9F23FCDE8C7C7B09D997BB1C0312DEC9 +:103B1000BB0F83E1B3D790FDD8BF6BE5A3A8479552 +:103B200074FB9F76E1FC61FF745C6FBFE0BBE25EFB +:103B30006D76122C68F2FDFAD3186B288B04672778 +:103B400043FDFC7DE1A7B19CD21F999D02E585074D +:103B5000069E46F131756078B61BEA9F3BCA9E41CE +:103B6000B4560E69733C509F7E5C7F06DDDB35C327 +:103B7000C139A9B84F8E487B2AAC67D76F987F0BA5 +:103B8000D46BDFEB95C18C88EEBF93B53E1EB32F8F +:103B90002EAD57477C17DCA6921F6797329C945E28 +:103BA00031767FFA106E8433C4BF7F50A08FD03E31 +:103BB0001454B3AA30ED837A4539ED03A79737043F +:103BC0007DC03E0C20FDF525ABF5D83E3297A9BB54 +:103BD000A17DE1541BC96B4767099D2B06DD017E62 +:103BE000A72CF6C4EE8364DCA732E9A989F0FBC6F2 +:103BF0003F097ED7E5727E48845FA43DEE5F1D9F3E +:103C00008FFF23CAC72762F9D8DA2F238FCB7F2BE8 +:103C10009EFB6CEC289C3D31F7C1600FA1AB27CF18 +:103C2000764E7875E6FD73E0F577424E24C22B2977 +:103C3000A7B9D1FBB789E40D8E8770C791738487CC +:103C40000D4F15EF467F60411EA7BF9EEF72FFA587 +:103C500021E79CFBEB07D08F69C8B977CF26BF84DB +:103C60009C71083F47D46F3B95BEEB572EF66F53C0 +:103C70008E7E5E1EC5C7CCFEF7ED36B51EF72F3C17 +:103C80008BE7672DAC7D5997697FB42AFEF93B46D7 +:103C9000FCB42BB52282FB570CFA8202FB0E7F0E7E +:103CA000609952A1DAF07EB491B7C5D415BE583EE2 +:103CB00033CEF3281F1AF49041F620D229F6BF41E3 +:103CC000AC333A8EC4F375BE9A47DF1F33DEEB7315 +:103CD00017D07B46FF4474DB61D06DC713746EA4AC +:103CE000D471FD20AD2383E838AD21889A4D0CFDB9 +:103CF000061D48BFC13CF99CE877791E8F2FFC77E1 +:103D0000D36F0DDAF4780ED5A98731BF6E129C3BC4 +:103D10001AF2651DE01AFDFD3E07C93F8DF1FDD386 +:103D2000EA789E2AE06B00FDA1619B87E273B27383 +:103D3000A401E167CE7415ED9F4D39C10D79E3F013 +:103D4000819AA255E266B63D78D902772EDEBB5045 +:103D500093B1BE19EADBD1DF9031CC447D873BF7CC +:103D6000D3FB27DAF266BD88FE897772F53B906E49 +:103D700037E504DA705DFAF92AE5671A747CB6F360 +:103D8000DFE0C728FFA89506FFE077CD40FEF5E00D +:103D9000B8C67889F499863C2E2F1FCC3B9B3E9366 +:103DA00041FC047CCEF947D07FCFFEF1F9DC586F9F +:103DB00077DEF8FCDE73F9EB61EC6DF8555DC27FE0 +:103DC00062AC33C9C7EF1F27CD67649778847F75CE +:103DD0002DFA5725BC87ED3A8B7F3562CA2734FC14 +:103DE000AAC6F711AC78FE419E396F13E5D11315C1 +:103DF000517898B0A76E1573F6DEE94FC3FB33E137 +:103E000097B81FC3B8EF301FFF063825BF447EA404 +:103E1000DEAF73BE5B50C02277C2BAE7FF4D623A95 +:103E2000AC63F06F329556BFEA02780FF58641C950 +:103E3000157141FFC3954E86F1B7418F8DECBAC124 +:103E4000B725E283C1CA14CAFF3B527911E5F7587E +:103E5000F3FE8CF29AE08AB8799156FC5CB3EC5987 +:103E600037EECB43EA6C5731D9A53C0E69C863A342 +:103E7000DF5BE29C7BCE177C0DE9CDB37AA4039E79 +:103E8000B00E95C7210DFACB75EF7F1EBFC398BB4F +:103E90009EEB95792CB245758FA5EBE6FCE06F7132 +:103EA0009C87A271BEC1F360FE6E4DC4F936E6D5A3 +:103EB00095C0000F8CC6F982C7887FBCFD954887E6 +:103EC0000FF97FF0D8DDD03EDF09762ACAE1E96F2D +:103ED00066E277A29A6B9ECD427C2CB0ACDF280DB7 +:103EE000FF99D51E7D3F6F349E40FEF4F7ABAF22A5 +:103EF000FB37913FDDF0EB197629FAEDD43872DC0F +:103F00008A6F63FE6689DB9FCC2E911C1BC4AE3387 +:103F1000494ED8F3919F3B789E8CEE94284FE6C58E +:103F2000EAE9146F607EAF88630E14C4C6318DF564 +:103F3000C0F3B278F1CD44F90705F9FC9C69B6737A +:103F40007FA574CBB3CD386F73A553E2F713399DBA +:103F50002EE7B1349622FA2FF76FA53C756BBC2281 +:103F6000259FE7630DDA070A54E1CFF4C7A1CF44D8 +:103F700078396EEFA5B8D8F1353243BBFCC5E045C2 +:103F800039E37D77ED75A48F32C6FE98CF88AE46B3 +:103F9000F74DCB8CBBFFC731BFCC3E361E34DABEEB +:103FA0002289FCDC4D227FC2783E57C0BD5A94CC9A +:103FB000192E473F6FF7CAFB5C6C2AE6699CAA0979 +:103FC00003DE7BD848CD6E940F9B3DE437685AF1F1 +:103FD00061CD96A93178ACE5785CFE4C8F8AF4DA35 +:103FE00054DC91158E99C78ACFD502AE2441CFA05B +:103FF000BE34127D58FD1FA54B385D3C93E41F80F5 +:10400000F95DBF9A5C85E7B8E1FFC079B89CE6FE30 +:10401000DADB44FC01654D2C7D37853698E446D2C9 +:1040200019894562EB4A2FF93B93CE28F4DCCA4745 +:1040300017E49BF9C8C077A2FD33F06D7D6EE0FBFD +:10404000F88A9E72F4C77527C7D793BE29FA1975E7 +:104050006B7CDC880B5BDFFB4A3ED75FDF0FCE2437 +:10406000FA6A7284CB26C2BF067E8E7DB455457E29 +:104070007189B8BB11F7F79467509CFF58934C7146 +:1040800089E432B50FFD02ADF9FCDC35CE3D237E6F +:1040900098281EE8B1C41593CAA11E8367EBB967BF +:1040A000EC63A238A2759F765AF669347E98806FC9 +:1040B0000C7E69467AAC397B3EC4350E9E9F6B7D83 +:1040C000BE7614EF0F2C9D0153DD5A6353910E778A +:1040D000C0FF61E49B6A3BE535BDF69193A19EE785 +:1040E000A9B13D827EEEE32B5E5B3207E5428D9DFA +:1040F000E21203C0F7EB81EF7B04FF8FFA55B7CBD9 +:10410000913209ED07C914D74D2E7599EA0B6AEC67 +:10411000743EEFB8B73282F64C13E371BB9E9A2F10 +:10412000A40DC0DFAF953A683C578F447125D7C7BF +:104130005B03B8DF032BBED944FED432473ACA47EB +:10414000831E8CB8A14B7C0FFA99B21957E3F70B79 +:10415000DEDA6E6794572F45E3CA1AE87FAB8AAB65 +:10416000B391EE8631CF95E2F3C2CFCB847C107E43 +:1041700059C31F6EF5CF26F2CB4ED41F6BD08B9553 +:104180002E5EC98F1F574EB4CF317ED95FC7954B76 +:10419000DA12937C31E49121175E17F0BF56DAB53D +:1041A0000CE345AF059D027FFFFA625B35E5F3D175 +:1041B0007D6CD7C7FF3697BE5BBA568AEB8F2D1141 +:1041C00074C5307E5F1EC5F3B5C1683E2DB2F37570 +:1041D0002DE67C5AEBB990584E8D2F87BE9DCFF5BA +:1041E00023E3DCC0F321C3CDCF079B274AF79FF51C +:1041F0009C685AD1E90F4FA5721F8EE39A9C4CDF41 +:104200005BB2F2BB55CE1BF35BD79D744666116F54 +:104210002C7F6AFCBC1995F30E6A1FBDD7F28E4441 +:10422000F75A4E65EBBE0280D791A3E71640FF6FA9 +:1042300065EB79053172B2DDCEF365651B0B3E4E41 +:10424000FA74C094675B5FC0E9A0B39EF73B9C35EE +:10425000C3F7EF50B6BF5DE9B3A31FBE80C7ED8EB5 +:1042600078C6BF2770B7A09FBB501E9545F5F81DB7 +:10427000623F017C1DFD239DF6802FD67FA715A4EC +:10428000D3FCA9339F18423F69BB6A53250D4B8568 +:10429000FCA91D6EA5710FBDC7E1EEF4E87BC3421A +:1042A0001F5A8ADF2315EB53DC967C53CCB1CE8AA0 +:1042B000C2655D6F7D013F075272741DF1F5A36CFD +:1042C000BD1EF11752C24EC477C815DF4EF9BCC0EF +:1042D000578E189F3137C505695EF9DCEF25EDCFA4 +:1042E0000B7E01E73D6D0B33B4B3DB3D33CEE9FB11 +:1042F000A6CB0A24EBFDEA650571E82BE6FEFBED93 +:1043000018F7ACD7D807115CB4B8B767E48582DE7C +:10431000BB1AF1714D67FC7CCB3EA68DEBB7728B5F +:1043200071C0DE5E5750C3F3000BB8BDDD81F29D56 +:10433000F9F938A9671907F04471DD097C6FE57652 +:104340001C7FEC7DAFE0308E3F513C768DC563D74E +:1043500078783CFDE6F969188F34BE1763ED67C4C1 +:10436000F18D7A77BA79FEAE2A5EDF29E64D1371B8 +:10437000F6BD82BE5C96EF99B8E6F3EFF218F9103D +:10438000C6387B0B3CDCCECF9BBD17D7DB55CCBFF3 +:10439000CFD1956EFE4E47B0A07E2FE2E9DB62FCE6 +:1043A000BD827EFB4A785CC1FA1DC0B5A2FFDA82ED +:1043B000D95402A74D413A71C8725C3C7E47F093D4 +:1043C000713FD2B89FB66A876CBA9F669CABAB9EB2 +:1043D0006274EE633C14F93951DE5BB05C7D0E5DB6 +:1043E000391FB20A07E67B7DD6F316F1999231F6B2 +:1043F000BC7DBA60F4BCF59FE379FB7C41569CF32D +:1044000096F9CB63E5AC71DE0E5BE23846392CE8F9 +:1044100060BBB0C3517EA2BCC6EF8391DC56B89D91 +:104420007A4F2AF76322FDE17741860BCCF92F46BC +:10443000BE8D916763E4DD187936A3DFC5B1E4D999 +:104440000C3B863B7360BF46A630BA679AD3AC1E5E +:10445000CEC1FC84068DA13FAAAB98A5D6627BA5F0 +:10446000CD8F7EFBF4256A971DEAE91AC32F05E27A +:104470007DDCB007C6751416139CDBC3571DCE81B7 +:104480007E699A3ACF07FDD29A34FA1E98E1671EE8 +:10449000ECB893BE2F64C07FC6E0038DFB575D1A56 +:1044A000B7BBEB5921E9EDD17EA3DFBD3ACDF1CE0B +:1044B000FDCFF81954B2E3FDC9A4B72EC4483F7D1F +:1044C000C7A59FF2E4B4BC391F637F837FF07B6B89 +:1044D0008FC7F865AD79458EC2F1F38A929B393F5B +:1044E0005AF7512B14E7438E9E52887CF3D1279FB5 +:1044F000C833A2F732939BF9EF06256572B99AA4E7 +:10450000F1B8325325F2F7B8B46010D793E4AB5545 +:10451000515EB63BDCDD123A6A57DB18E6CFCE11AE +:10452000E3E84D4CFA7D39FFE91C2E3715F67B8305 +:104530009E650114CC3B5B8008DADCF61458FF1C46 +:10454000F7CFFE8ADFBD4F2A6DAD47BFE0B3CBF991 +:1045500018F724F07F1BF955D17CB25D2F99F3C970 +:104560001E78C99C4FF6C04B9F259FECD2C2075EB8 +:10457000FA47E69319F2E9B81C3C7E3BE07729083C +:1045800015B4DB96C288CDE4B7F411DE96083C87FB +:10459000FF06787645F17CDCCEBF97B2F4E0F38479 +:1045A00047FB6C8E6AFBD7D222EDA4974468FCAB24 +:1045B0005DBD73310E7ED231320DE73DF9D4AB854E +:1045C000A82FBE79C7FB1E4C42784B19F1E0F37758 +:1045D00037FFD283F87A73B34CFACEF5C21E58DE99 +:1045E000F6F10C8C875C2FE8E9FF16EA4B0B63F4BD +:1045F0003A16CAA273766D442693C79063EBF6A56C +:104600000862E3F59BFBBDA6BA71BEDE2C7E5F603F +:10461000DD770F3BF261FD6BF7A593BDFCAE88D350 +:10462000BCBBBFB00FE5F2BD8536317FE086C22C42 +:10463000BE2ED44FDE3AE86403249786EC8CDBCFA1 +:10464000F3A56C9E5F89FFACEB7AEE500A8DBBE65A +:104650003E7E1EACD0F8EF1C040FAE25B96F5DF79F +:104660009A37FB9FCB8375ADE9E1DF09C1FE786F17 +:104670002618E2FE2E2B5CD6736155FF2D0E9E1F71 +:104680005C310FE5D887DD12C931EB3971E3C1BB6D +:1046900068BCD5CCDF5D07EB5AD36B6DBFFC0F4810 +:1046A000DC375AEE415BCF8F6D85C28E9FC12EFAEB +:1046B00004E44EBBBB246DBC7BB7EFB671A6FC63B4 +:1046C0009B8BCAF7DA542A971672BA5D77E0F073BB +:1046D000F9C4D64333F0DC5DF0FC1CD71759D46F16 +:1046E000A1F45D35F090867429FCAEC25E6916F8BF +:1046F000B733EEA7F886F0D7CBAAD55FFFF212CC7E +:104700001B08BBF9F7A70CFF4533E223260FBAF9C4 +:104710002CFE8BC70AC5B97911C0CD7F47E2E71AD5 +:104720003BFBB99908FE44EFDD9CE0BBFC067F2C07 +:1047300015F27AF59EC55D18FA687FEA0F45F43DDB +:104740002D9157270BBCC822AE21334B1E5D98BD5F +:10475000C262E8F746FC08F4E4B1746AD00B73F364 +:10476000F75DCCB585EE1B18F4797007E1CFA01B7F +:10477000BC51644399C3067CB6DAB3DF4700FA3311 +:10478000D5FF6C1F2E423971A3E53B247F96E2DBF7 +:10479000353F2E2CE1FE514D9F87E7D41A16E85283 +:1047A000090FFC77C0DE557A9FBB1DF97B8FC49043 +:1047B000AF6EFED1F77E8872E9A6FF7D5F2ACAA59B +:1047C000134A6F36CEB77E6F672ADEDF7A5709A7A6 +:1047D000E2FB27225C3E59E7CB2D928CFC74B70498 +:1047E000727303FE8904B03ABC10E5E2FFDB6BA7ED +:1047F000DFCFDBB8CF3980F7E636ECE77884FADB39 +:10480000BCBE95F0B5F18099EF6EFAB7FBB2357E7C +:10481000AF355FE02F1F45F3863D76F2AB6E7845EE +:10482000C6CFF8B18D6C84E0B3BE8FEB3803FBB616 +:10483000B15F5EE1481BDB0E9A8C03F96AA3D01FBF +:1048400037EEE7FBB5D1A22FB624F0CFB88A04BF6C +:104850000BBA07FCD0F716C2B02EFEB3185C3EB7F9 +:104860003FE6D4317E74E2F59C3EF49FBCB7E78509 +:1048700054A922CA07C6F7F0DEEB9F3CAEBCF8B3E2 +:10488000E09751F92FCE19ED002C10EF121CE4E542 +:104890007AFB40EA25809FF57D767F181EAFFF9E4C +:1048A000ACA3E9C65E73923F6EDDF79E3D7631ACF8 +:1048B00067DDE3F6CCF91C1C37CA6D63DF3622BD19 +:1048C0005745F7E9A61F3CEBC0DF07C1E7981F6F0C +:1048D000ECD7BAC70F3BD0DF6EC5EB9CFEC30ECE44 +:1048E00077967DEB7F7B1E9ECBED8F9D76205D9C2A +:1048F0003824B19CE2B1EFB7EC7D2115FB19FB36F2 +:10490000BA8F63F66F60E193D5D48FF23ACFB68F4A +:10491000EFE20F0DD610BD7FFF4998BFE575A71FC9 +:10492000E16FF9FEADA908C71F94564EF70F7766E1 +:10493000E379DC620F67AB54F2E72DBBBE44F47839 +:10494000E3CB5FCAE6BF13A8E7223F039CB908DFA9 +:104950009A6F2D25F86E6041A2C79687F93DB40F76 +:1049600015D6F8789C7DDD29F8E60FBB9DA4ECFFF9 +:10497000018378288F7FC1EFBB32760BE921C6BD5A +:104980007892D050FFD0C5F7E9862223FF8BCBB7B2 +:104990008DA2D7C63D5B49BEFDB150CF41FE073C5D +:1049A00098E49CFCF2DC1C2117296F98DE039131FE +:1049B000079F63FF21BB9E34CDF49EF063F1F96F36 +:1049C00013F3C3BA93A5CF41993D9ADF3084EBD856 +:1049D00020F177907E303F76A088EBF5A3FCBFA74F +:1049E00087EF93E0FF0F5EE1726543647123C98531 +:1049F00021FB400EF68B1C5E22915C7046EFFDC7DA +:104A0000F2F51EBBE06B733BAC4B9162F17988FF12 +:104A10009ED3C6FD5C6EDF702FF48FE1E328BD38B6 +:104A2000A2CF8BA37C69C4076EB4C4678CD22A174B +:104A3000EE2A329F87A3F1856F658DEBCF37F4B2F5 +:104A4000F5F6C8A30F22FFBEE624BD67FDF7EC9480 +:104A50002FFEA7EF3E73EC8B40EF7FEA37F8D62CA2 +:104A60006FAD7CDBF2C452168F6FFF94196071F941 +:104A7000169EC7E5DB4CFE1D99BF9BBC15FB9088BD +:104A80004F6F4C206F7F6891B7A067A45D02D53F40 +:104A90007E67DD24949B56FC1A78B5CACD45455AED +:104AA0005CB909FF5E6131F834F068D0EB4DFFEB83 +:104AB000669A67948E0D7A35CEB1517AB5C26DC6BD +:104AC000A7B5FDABF8034D59D1FDB7DF097634E644 +:104AD000C73D25D37DB093DA482ADE1FE84CE27E3D +:104AE0008393AAA8A7F3FA4896A30BE587F17C2441 +:104AF00089DF13391918494D8FB1E7DE3E28A7A287 +:104B0000DF7C38C2ED6F2B1D8264A6F987857D3E60 +:104B100057761785D0FEEA9D5C859180531D7651AE +:104B20002FE3BFC321F2514E8A7B6027C5BDAF7F03 +:104B300067816397903EA52BB980CF551C54D6F260 +:104B40007C7B2AEAE3AB0EAEA3EFB4ADDE6EC6C348 +:104B50000DEE3DA4AF7FC8365379C3BDE6FB8D375C +:104B600009F9DEF22DCBF38357121DDD64A1A3A05A +:104B7000F0435AE9E813833F2B5925B793795EC96F +:104B80002621D7E6CA158B9A00FF278FCA142F3A21 +:104B90007550665D08F777F9F79E5898E7216C0025 +:104BA0007A8EF55FBE877476FE58BC8EB6FF9F374F +:104BB00067DC0E5DD6FFF0D7D31E82F2BD1FBE7636 +:104BC000DE8FB1FEA3578B7ECDC6F69F73E8AFD7BD +:104BD000A3FC3A79C849F74D4F1EFA69D1ED587FC9 +:104BE000D2E9C7759EBC93DBC7E1431E3AD74F1687 +:104BF000727DB0FDA9D3D386491EF37BDD174CE24D +:104C0000F1905307FFF337F85DDD5307012A9487CE +:104C1000C21EDBF86412D9D7279F3A3D23F6F7422C +:104C20003E2B3C1B44DCF1A48735611ECFC974EEDA +:104C3000BFDAF8E39994E77FF3FEC30EBC6F31E768 +:104C4000271F4F43B973F209AE4F80BEBB0B55EF20 +:104C50009A49DD77DB01CF7F16BFB7F9D2A4A38BCA +:104C600030EE32162F1C0F27010F0817E0A505E5BF +:104C700065227CCCFFA7C5C75FAEC7F9D71FBC882C +:104C8000EE7947F122E9FCB987F291007EFEFCD073 +:104C9000E96968779F0DDE9B26F1BCC2FF29F0769B +:104CA000FFD3C2CBE95D9DA4D1FAAC743F96AE7F31 +:104CB000F465AA7FDFE3A7F54E90DFF7FD0FA3EFC2 +:104CC000E7FEBFDDEFE7C57E7B54B40B4F3EF571C9 +:104CD000113B07B8FFFD9F769FC7877B54CFB1F983 +:104CE0005DD5B0BED7596469BD44DA07E91DED6EE4 +:104CF0009EDF3EB4A498EEF13061572C94F8F9ACE5 +:104D00006ADC9E686736CABB59987903E9130BF5CC +:104D10001DE23E9C8DD6339459FBE8B63876D422FA +:104D20005D26FDEDA52D303FE0E9258F4D6D8771A6 +:104D3000FF0B329FD94F0080000000001F8B08003E +:104D400000000000000BB57D0B7854D5B5F03E7324 +:104D5000E6CC4C9249327941900466F22281108669 +:104D6000F00A1064C2CB70213081F032410690808D +:104D70001848C017FEE53603E1A5620D105ADAF2B5 +:104D8000FB8F48B9A0DE362AADB4559C18B4F1515A +:104D900089555B5A2D4E8122224A14AD63F5D67F88 +:104DA000ADB5F7CE9C330481B677F860B3DF6BAF57 +:104DB000BD5E7BEDC799E951FF624D606C8EEFBE21 +:104DC0004FD422083DD33E6010CE48ED98AF40FA54 +:104DD000CC122B0BDA18FDBE81BF37330B0BE68BE1 +:104DE000B88BB179F38DF973D9BE34F37008576875 +:104DF0002CA0407B51E5BBFA3B181B01F558C3665C +:104E0000871D53FD8CA531A699DCB6E150FE4F2CD1 +:104E100030A70CC226C6CA5B21BFC96E622C95B1F1 +:104E2000CE2AD73E55A1666CAC176356FE7F36CEB0 +:104E3000A950FD26662A6F2DC4149387CAA7961C15 +:104E4000B89F97E9C4F23378711857ED7406E39A66 +:104E5000E17990C66BF56DEDA49099FD210EA7F256 +:104E60000DD55BCBD848C6EE12637B7D03C007E34C +:104E70007A3DDEE468725292D33C12EB6197802750 +:104E80008F1A443C5A3DAA2726C1D01E8DBB1B9FBA +:104E900002DFD78BD7E8F9B91A9E539C0EC24B3468 +:104EA0009E23618DE3EC20182CF3B16FE2181F05EF +:104EB000E209FB84F14D56A112B47F7CBF12405C25 +:104EC0001F2F59BA7D28C69F50DC98FF79E93066BC +:104ED0008371BFAEB1234A22D4F1789C8E91D81E43 +:104EE000AFAF94FCE64B05E04C2C3145E082BF4966 +:104EF0009E58C3B852CA930DF134EF0D86F2BDE748 +:104F00006719F2FBF8061AF2FBAE2836C4331BC64B +:104F100018CAF75F37C11077F9FFC3503E7BDB2C0F +:104F2000433CB7F96643F9017B9618F20B022B0D4F +:104F3000F9830EAE35C407B7FE1F43F92147361A71 +:104F4000F28706EF37E40FEBD869888FE8FC91A170 +:104F5000FCA813FB0CF9A3438F19F2C79E7BCA1060 +:104F60001FD7F52B43F9F1E1170CF132F6AAA1FC9A +:104F700044DB9B86F864C73B86F237A59F36E44F37 +:104F8000757E68C897F33F2DFF92211DB894F98173 +:104F90001E56F22456E1FECAD08E997901F90CA86A +:104FA000B681421B6BA63096B5526807B6C550292C +:104FB000F2FDC089F4FAB07F0B12D7EBA3BFE8E78C +:104FC00003D23C5E3A3BD14774ED6148B733F1BF41 +:104FD0004E086D76BF8AFC6763FE9862C612C22ACD +:104FE0000B0E033A0C2B143AC2712C980274188ED3 +:104FF000A130399C42E929E1240A53C37D293D2D82 +:10500000DC87C25EE16C0A7B875D14A6870751D8F6 +:10501000275C40E10DE16154AF6F78288519E1B15B +:10502000949E191E4D61BFF0444AEF1F2EA3D01964 +:105030009E46A12B3C95C2ACF06C2A971DAEA430C5 +:10504000275C4DE9B9E10514E68597523820BC98F4 +:10505000C2FCF0ED1416846FA37060F80EAA372816 +:10506000BC86C2C2F077287D70F85E0A8BC24D14F0 +:105070000E096FA0D01D7E80CA0D0DDF47617178CB +:1050800017A50F0BEFA07078F8C7943E22FC430AD7 +:1050900047861FA57054F8110A4BC28F53383A7CCB +:1050A00088C231E1A7A9DED8F0931496867F4DE936 +:1050B000E3C2BFA4F0C6703BA58F0FB751E809BF8C +:1050C0004AE965E197299C107E93D22786DFA0707C +:1050D00052F81D4A9F1CFE238553C2A729BC29FCF8 +:1050E000170ACBC31F523835FC0185FF11BE44F5AA +:1050F000A6853FA1707AF82B4AAF087F49E137F8BF +:105100001B0FB451AA5DE896C759F86FB7FC337D01 +:105110000321B327C3A022E5A343293777C42590F1 +:105120005C9CB19ECBC51FC47D7C8CE4E468AB93D2 +:10513000EBA43D448F3582EE37E33F7D186B1BFDBA +:105140007E4608F4D396B2D3EFDE01FAC9BFC6CAD1 +:105150007EC28B44C9DDAFED213BCF7040FA4241A6 +:10516000D7C74BDAD38029D896E2509D17DA79D089 +:1051700015AAC1D0EC52489F7E25F4A0C965A2783B +:10518000EF222EFF6BD6E426FA502FA65EDBF8CA7C +:105190009C5C3FCBF2F7E7F27698BDAB9F77F0B51A +:1051A000B773ADE5BE88492862203FD6D978784FDD +:1051B0006CC23E0CBF88E917403D7DD6E94B7701B4 +:1051C0003CFE098CF0EE3F191F68223C370C217819 +:1051D000AEBD1DD7BFA99D81AEB4ABB7C3CC1E7306 +:1051E00005CC5FB598BF7735EFFCC5503E9469722A +:1051F0006F84A46AFFF2E9A8C727AB353C3DC3EC36 +:10520000265B42AD21B9B604DBD4E1CF5AA79D0A93 +:10521000E9E46B35C8CD32D0F3D577823D5174794E +:105220007EC8C3C86EDA5AA704FC582EC344E5AA48 +:1052300099F95448CA6148DF007488E3786703D05D +:10524000B32BD29FAFEEA60F70BC3EB69DEC0E1FE7 +:10525000D6D3D917EBDEDDB0E998AEBF69AEF8540E +:10526000E427368A8DFA468DD075B5E86B6B9DEADA +:105270000E023C97DE52DD186F4FB33005E2A155A8 +:1052800056EA976D4B233E7927ED17994EA0D72FFD +:105290001AFD9B8E698C2D06B9ED01BE6E5F754FB0 +:1052A0003AF2C5D6CD4F6A2C1EF1B8866118A1A777 +:1052B00000D16D2893599C8311BF6BCC44F7F92C16 +:1052C00083EC45310F9AC9D91A84F1B27E36F74F73 +:1052D00020AE9A980FED4CD9CE6F05FFC8F03D1364 +:1052E000C7A37FB512F809CCC9564B437E7221B6CD +:1052F000C3EB7558381D9CDEE1DAB711F2CBCDCC8B +:10530000662E36D87FB1882F5078CCA4B317A3ED82 +:10531000C37B5D49C22E6B605E18D76985CD6F1562 +:10532000724091F067135D592A21DF9A6AE376662D +:1053300073E5ED384F00E70A595E857EAA917E60DD +:105340001EAAD7C7790A20FFBB2E2E1F804EFC2134 +:105350009D1ED6140E3F5B05E37311FDD661DCBACA +:10536000DD9A75BF4BD73F9603B97952B4735A1182 +:1053700078D920EA99793BBEED4901AC674D3513E8 +:105380007C5AA6E7162FC065F5039C4558AEEB2E58 +:10539000A4F7A5FE24763F447D9B942928D7ACDB57 +:1053A00037ACC17CC01F3383E8B09A99D902785CCE +:1053B000CC1C53D211BEED8A5BC8CBC8F8009EEA64 +:1053C000ED0A8D6FBF908367362B0457E84125C0E7 +:1053D0005C440FD43F337B4FFC41D7AF9CEF6AD185 +:1053E0006F75F333F72844E7CC8378AC16FD2F5262 +:1053F0005903C6A3F186FC87F83D2EF071E63FE322 +:1054000069FC97F7EBB6540E8EC0DD3DFFEBE33D34 +:10541000314591716F56403E203E1FB4D238AD02E7 +:105420001E89873FBA92A99FD0869BFA2DE9011E5B +:10543000A46DA6A39368FAD24C629EFB319A2F49C1 +:10544000F7926E3A04BDCBF07D312E86EDC87E54C6 +:105450004C7718E8F4267D3EB47B53C61A867C4709 +:105460007C3386B1638F5CF2FA217EAB4BE8156723 +:10547000433ECA49D93FFC3CC417825EAD769BA728 +:1054800000C6FD96E83F1A2FD17AE4996E3899CF7D +:105490003252C85B13A63B29BD7ABB95F02CE7F7C7 +:1054A00014F215AD133DFD685E1C026F829E5A0416 +:1054B0001DB560FD11D83FD03FCAF91D56E27F39B6 +:1054C0001FD1F89572FF24AE5BA1FDEF6312C8EF08 +:1054D000F6C4450ACED7DF049C69485F90DF669D1D +:1054E000A92C2E8C8CC39E65A2CC54417FD1E3B4F1 +:1054F00067F1FA1E519F7D0DE923699D4CF3DDADE7 +:1055000027B2F8FCC9F89478933700E5A7FD00E8C6 +:10551000B8F0F2766FCAE6E39DF650EB67BF43FA48 +:10552000986721B9B87B03973F917679B9D9A23CA6 +:105530009B9F4CF2FA6AFAFDE43A3506F55973F886 +:10554000FCE33F83F663BC1692FF312CF4F8CF6086 +:10555000B0AC8A517FED8917299E303DAB588578D4 +:10556000B3274B5902F05E10FDCA76779598CA03AF +:10557000762C3FB3CFAD90DF523957B95507679AB4 +:1055800039D113E0F8EDB342E4AF80FCA3B3CE0E03 +:1055900042BDD23ECFB15E03386CD39903A73CD94C +:1055A000C93CD89ECDC962B03CF6BB4287A7E4E9AE +:1055B0003CBF6DF6943ECBA05EF3F48DA3B15E4B81 +:1055C000A5252607E0DD55EE2F51757409F97E5C9F +:1055D000976F9D049405E388C9285E8FA231C6DCCD +:1055E000D8E142FC963277AE13E1EBAFF874706706 +:1055F000648BF9CDE1FD6D7572FF87CCAFCFE6F31B +:105600007A20DB42E55E88EBFF750ECAE9E92607E2 +:10561000F64F7C8FEDE75888BF772AA161481713B2 +:10562000554729F2D525515FEA434DC852CDB6BD45 +:1056300013D74B5A848F6DE4FF10FA8ACA215F4852 +:1056400079DF87CB0F5D7949FFA437B449962CF4F5 +:10565000BB548979C39F22FB0338B42A46FCB84364 +:10566000B63787115F817C5650AF49F9AF557949FC +:105670005FEC12FCC498B70FF2ABC4C70AD1FEAE00 +:105680000CEF02B48399D9A160FE4EC5A12403DEBC +:1056900016097E4912FC048CAE907D26CA49BDBD18 +:1056A0006D1C0BA0DEDED62D1738BC16316ED05720 +:1056B0000CCB5BA69B489F594ABDA46F2D93FC6BF6 +:1056C00030BC4FE8692DDD6C90C7721CEBB35C04F5 +:1056D000C7EE39161AEF8E3E8E00F76379FB087C11 +:1056E00099485FE25204F0B323D3B180EB8D068674 +:1056F000F8D829ED003323FC101A75F3A2E558B849 +:105700001DE00991DCD54AFCA44FB4AA5FDC83FEFE +:10571000A69D113BC263C171295C3E5ACA2D246704 +:10572000370A3C5926FD82E463F438A45EE99EBF43 +:10573000A879BF4CFE47C51FAAB4F4C1FE76C3BC0E +:1057400090FDB229FD584E2F32DD845DDCBCE7D6DA +:10575000E1286F4D0CEDE2786F2DD9C5BB157F07A1 +:10576000D2B73FD7C4503EC06F7BB7BF8DC7ED6C7B +:1057700064848E37AC79BF220BEDDD4A9303CBC432 +:105780000F5F9387F3A3654C213BF601B00FD15E09 +:10579000766767D1781FAAD8598EE5ED434D248FDF +:1057A0005ABCA7E2911F9F17FA70CCB9CE89899095 +:1057B0009F32DD518CFC25D3479F09AA989E5CCE71 +:1057C000D3C75634C3A21BE37EC2FF4365BFAF18E5 +:1057D000057027149AC94FB65B096E53711CE31804 +:1057E000ADF71227051D13A17E5206EFD7332958B6 +:1057F0003E0AE377AA4C81F2F68F52CB507E8C554D +:1058000092385CF8CF0D34443FFA549A34195F58FB +:10581000B92283E89BF4EC0BFB96EEF0DB31DE5C07 +:105820008374C672AC0EE453C4B32D99E68D44F66E +:1058300042A04B0B84BFC9E2788837B3A009F49922 +:1058400029AE261DC75F91E26B40FA2B47922BA62B +:105850007C5B0A9517FCACD6B8B9DFC5E81F957C10 +:1058600019FF82D207EB379771BAB30FB718FC3E16 +:10587000B185C6B82DC718D7328CF12CA16FDA13B9 +:105880001B09BF56A1FF760B7E95FD9E12FA53862B +:10589000CF5B9C77221E9E8F8D677E05E39CDFFD8C +:1058A0001F9B859DEB2E9DAD93271542AEA2BEC6D4 +:1058B0007EA49E3EB9EEF483A8B79ABD4E935ECE09 +:1058C0004BBD74257D1D2FF4B0C46774BE49C8FB61 +:1058D000A6C675EC746E245D15ED8D78CBD7149F3C +:1058E0008AF870923E94F961D1EF883C4F384B2F83 +:1058F000DFDA0B14D7607DFB1C0FC9769FC783F9D5 +:10590000F3675D653DBE91DA95F64B74FE38D19E26 +:10591000E72AF647EFECEBB33F6EBE46FBA3B72892 +:10592000B7E83AED8F896AE8920BF9A1BF89F86F61 +:105930006BC64EA6B7BB6A05BCC528EBD358F7FAB1 +:10594000FB4AED46AF7B0766DB53CFA2FF5CAE7B25 +:10595000AF525FAE6BDF96FDB9C79A908F9285FF0D +:10596000E7DDA93B6D686F5E729BC8996E4706477D +:105970003975AF4AEB78407F8C57B7EEB58555E661 +:1059800049019EC67532848F6539A95D9BB3992103 +:105990001C96742E97DA13C7135DA774DB9FFD0D59 +:1059A000F6A79CB7A42BD0B345E4F7CEE670975B7F +:1059B0007DF3494FCD2F36D09512657FCA7990F28D +:1059C000F3D7174E3D3004C69356C5E5E72901AF1E +:1059D0002C9F56E52E25F9F23560538797295339C8 +:1059E0001D45C325ED526B9611AEE8724951F0CBBF +:1059F000F61384AC99321ADAEFA19EA43B59EF64F6 +:105A000078CC67484F09A91CAE84AA860E8AE73075 +:105A100092F75A09B7DF26F65F6B8B2DE4F4B6D206 +:105A20008EF46535D0D98D6ACFFC60CEE170A27D51 +:105A3000A7927DC71CC8FF56E66E43BDC0CC89C483 +:105A40001F60C7A523FCE45F7492FC762E46F8C560 +:105A5000385B84DE8FD8394EF24FE8F4B745EF97C4 +:105A6000E8B62798517F3F982DFD125E86F653B415 +:105A70009D24ED02692749FBAEDB8E13F612FEB4BE +:105A80009111BBCA52CEC86E91F06D1D0D7618F4FF +:105A9000B7556131A4F72B4C7CBD6FF690DD9D505E +:105AA000DACB7DBF33D2AEA584DB87FF6E7BE53ECC +:105AB00005EC3298EBEF09BA4C62CE3E8CFBB3FAA0 +:105AC00020DFE9D717FAF507CA43B4CB52040C6DAF +:105AD000F31A9813D7E9D39B9907ED03B4EB717DC3 +:105AE000F1F5AEE0785C374C9F9583E33D8A7C010D +:105AF000E931D34D0A9677781CA5BEC2487F47FF8F +:105B00001EDBA756472747279C1D762BD4DF966BB5 +:105B100071284E9A0FAED7BE8C253B7A62765E1FF7 +:105B2000A7AEFC7921B77755F93CE867D9E6EA4595 +:105B3000EBAA6E7924F4D0439573C94E7B21AE5BFA +:105B4000CFF2F5C426EEF78AA6D313822FAC021F3C +:105B50002D15A6181BAD9F26D0FAE944760CB5DBAF +:105B60006C4E54C8BFE3E1E36F9BED5C8074BCB83E +:105B700084DCE728872CCB21FF0FD9B1543EC1210B +:105B8000ED752EF71E2AEBF5C8FD3ABFE429D16F5B +:105B9000B3D2958EF3B45B93F6ADFB655C8FED4E9F +:105BA000CB29463A7968DCF7E72F41FDF9DDC1A43E +:105BB0003F65BD1A97EF2FD9D0CF7B13E6EEB9150D +:105BC000D2D5ACBC7E38EEEF215F42FE9F1DCC8C5F +:105BD000F2F7CF207C3728D8BEB73307F9E6C6BF27 +:105BE000DDB5C449F53FC81E61A87F0BD2B3AC3FF9 +:105BF000C8E5BD80F93BA7CE257B6A5795B30FC298 +:105C000061715A84D9EA4FC7F8CEC9AC58EF876A98 +:105C100013F3F445366FE7A1CA2DE908577BB65355 +:105C20008CD72BE890AF6376BAB6A42F0138D32671 +:105C300071B923ED1558977A70DE1E9A9347FBE5EC +:105C4000389FE87F6813F3DC2EE4D82ECFA7E9CB8A +:105C500018D28F93E85DF623E93F09B52B84893884 +:105C6000BF3AFADEC5E4CFF96C17D261A66328E229 +:105C7000FB0E017F5295582F5B1369FE5A267B035A +:105C8000AA8BF3C93282EF6F8497B6795EA2F7349C +:105C9000C11F31E57CBE59952590EBD2F3C9845CD8 +:105CA000E213E0031FF1499642EB78016F7279E845 +:105CB00069F41BB40DB0D03AF846958FE75AED83DE +:105CC000F788D3409CE678B373B8DFBE88D689EBFB +:105CD0005348AFD598DA721B00CE9A8D410AA3EBD8 +:105CE00097832DDEC9FD7CBD90CE59C318D2E777CE +:105CF00008997269FB88445C1FF8127839C5EC1B5F +:105D000085F1F27F2C1D65C1F1FE299EA13DBA30BF +:105D10009B2D9A05E98B140ECFC2A6A9E5B81E1BD0 +:105D20009BC3E9F678234CF000C6DE68B4310F302F +:105D3000E79B8D0E8ABFDD984EF13F343A29FC6314 +:105D4000633E85672C5CDF2E4C618BBC7CFD6B4118 +:105D5000795296C3E7A92C47FACDEE4C074D02F0D5 +:105D6000BC39C2E48029F0BB664D86B54A48E3726F +:105D70007EA647455DD32D5FE757C5D1DEAE8C2F9C +:105D8000F68E35E4B3FC619138AD9FB91C59B22D44 +:105D9000691FFA05164C4F31949FBBADAFB1FD1C86 +:105DA0003EAF95E5D986F49B6B0619E28BC3A0380C +:105DB00086211996D03EC39DC24E60AC84E3DFC1FC +:105DC000CB7ED630AAF73DD0FF67AF69941F3D0F59 +:105DD000672C9CEEFCBF57851FDB47F3F2F9894C1B +:105DE00086F096FF43A57D0AF618F7FF2DDDA33058 +:105DF0003F0AF92EFF2D58EFCE47AC6E2C77EB1EE5 +:105E000095F9101E34DAA0BFF36FE4EEBB9FE6D520 +:105E1000FF3096EB8272FB20EB9CC6FC0E20CDA5DA +:105E200021D18E52DC17F17F2E897992C094FA200D +:105E3000E6DDBC7B00CE8F2A9A6B4D48C7EA6B69C2 +:105E400026A8FFD1532A433EBA6DCDDB231D80D750 +:105E5000952FB5FEBE04DA3BD3AC3207F4F7E1412F +:105E6000EB23DCAFE0E98D7A3832CE4011D2E5B8D1 +:105E70007EDEC61CC0EBF9DA40119D07599F46F43F +:105E80007D393E60FCA84F902EA13DDFDDF136DC70 +:105E9000DF5FAAB97B0D253AE2EB043F1BDE879555 +:105EA00040F9ED5A7980FC2F9E1938CE33CD292642 +:105EB0007EEEE629A2AB2566A745DFDF92ED2AE953 +:105EC00001980CEE17DFA1FAC076865F336F779BDF +:105ED000E263BD2F9FC73B709F0ADABF2333368032 +:105EE00028BE05FBE8613DF331F08ECF1A89AF7C07 +:105EF0004E25BB8E0D773E548AFBB6FB278E40792C +:105F0000C57CBCFDCF9225DD6CA2FE3FF530968EA0 +:105F1000F3BF3F3E80EBC60BA6A74E9A611E869A42 +:105F20007D87107F2B66F81F5680252E3E7BFA7BDF +:105F300063A1DCF9FFD6DCDC3DE3799CE4078C0B44 +:105F4000F96C8959E8B1757C5F8B9903077E84767B +:105F5000CE9F7A937EBA5C1E6DE0EB1A591EC0305C +:105F6000956010ECA5001E7D4E36C55188FEED569D +:105F7000719E2740E59D0824E0CF510721E0EDF414 +:105F800088F8FBD91098AFA87DADD3829FDB843C05 +:105F90009172CF94CBE5C052B93F7094EB7B98E0FF +:105FA000B7D04FB38271FCD48B7DC0150D7CDFF26E +:105FB000773959D44E7DC34DEF4BFB0EE7E776A002 +:105FC000439CFF5A47D29D9D10AF3B18E30E407D86 +:105FD000073A3DD3A82D07E2FD3651E595FC3B2C51 +:105FE000D8EFCA9F2B2C05FB0D6867D01EB3014666 +:105FF000517E9C07B62D49C6F6146ABFAE5909E01A +:1060000079A7E5AC2B88F6F1AA271477903745E7F6 +:10601000C2968976579A1FA4735D2BF315DAF7643D +:1060200007A15D9D5C5AD5CAFB91F2A49E99CFE869 +:10603000FDF9CB845F7419EBB60FF9B9B0668DFC2E +:10604000FE3666DB80ED78E3E209AE95CD7CFF3469 +:1060500002BFCABE019CD6FA022FCD203C28EE001A +:10606000BB1C8EE5CC3B2909C701F941E7E570452A +:106070008FEB5AE1AC75B711BD44C3AB9B07A77E4C +:106080001E96B3CE2D4857B57E4E07B5CF029EA1C2 +:10609000FDBF3668CC9248F4D09933F2727A00F89A +:1060A00067A07C5CDEA2B2A02B421F922E6E7B32D8 +:1060B0006041BBE543D69C60073EAADBF3E4DCD13C +:1060C000507FF9DE372CA8CF6B9283B9A62444E128 +:1060D0007D3BCB3323F47A5BC08887DB0F1AE3FF69 +:1060E0002E3C31718E8FEA017E96ED5769FDA22B11 +:1060F00067D8DF59E167B48FBDE22DD58DBE8F150E +:10610000A0DF528AAF1F5E89BFFF6DB8A3FD159E49 +:106110005CB14FEF666EF4577CCE0A13E761A6B010 +:1061200077AEE4AFE83ED710A56FDFD5C0BE80796B +:10613000FCCCEC494C26B91E2DB747F546FD23E5AE +:1061400075ADD09FB2FD65A837217E76CFD30968A3 +:1061500017FEB5E5E95E182E47BD5418D14B772FD1 +:106160000D66A21EBFFB99183792289B1E7CFB5E12 +:10617000887FF4A4CA7A92A7EF65FA6EC94578853C +:106180007E5DA53ED2CF81FA54C8D7ABD985FFEA50 +:106190003897E0388745DA5D2AC6796A1B1FDFE940 +:1061A000ED7CBCB75E364EB02B709C8F5ADD28DA82 +:1061B000CFC50449FF9F837136E9EC07692FC8F109 +:1061C0007DCE9A1F0E42FEAAB57F3869067AB82D99 +:1061D000AFB308F9B1668795EC83DB7E1E4FFBD227 +:1061E000E795B2DEB48E38164C40FCAD7C8AE32FC6 +:1061F0000247B7BDB019F1D76D2F5C23DE568B7304 +:106200007DAB9FFDCD09B45F150F54057857DBECCE +:1062100041A2F723C673588A136500F9376C369C80 +:106220009F0CE6E4E768A2CFA79A3D67612E6AB1AA +:106230001EC0FFB7DC4F6E594B7CD09587FAB63E37 +:1062400036A8F5463BEB49C5BD0FF9EDCEB2843219 +:1062500086EB7F7EBEF0D15CAEF7148F87AD2BA6A8 +:10626000F3812C16FA3D80F210D39D0E5683F8DC94 +:106270000BFDC747E08E4EC773C436D49376538F59 +:10628000EBE2B7853E5DA59AC8EEAEB370FBFBA20C +:10629000F0C73C2DF29FCEE576F82FC5F9AA8BB05A +:1062A0005CC679BF38D91AC07567A7859FAB7C4398 +:1062B000F3ECF94F98B73979BE23B900A7D7645FDB +:1062C00088FCBE31AE4843F9B929A9B63F86B7B0BC +:1062D0004E0DE7754649A5D30C7838D9CBE656491B +:1062E0006EC1848C8C9C437A5DB36FC3764F22EE73 +:1062F000605CD5E29CEE49E81FCF379FEC63093420 +:10630000413DFF7356B227B6C6F273942C35D18C3B +:10631000FC70B390530B27C18A1E68A67AD2562F01 +:1063200086D09E9F01BE6A6C5D9B87423F1B4C5C82 +:106330005F6F4866FC7CD4A6D008C4DF10B6C98164 +:10634000F308A33FFC4DCAB7D193999D957402E31E +:10635000AAC3F356631827B412C2AF215E67E1F9EE +:106360001FFEE4A3592DA510C7B507D2C35435B0FD +:10637000CF85E7434D349F33A15DA437864C33323C +:10638000722E7C16FC2D8571CE3233BF2999C26DD9 +:106390007824704E090B26C2F8822F3305E1A13D07 +:1063A00000806F5ED0141C00789B690EB621FE4EF3 +:1063B000A86C33DAA5B3984B5B0BF351B7F1DAE075 +:1063C000D50E8467B56440DCC4CFB977DDAB04700B +:1063D0009D708B991D53019EFA64A79FD2D770BA06 +:1063E00086F46D09C5585E21BAAA062181F48CF3A2 +:1063F0004B748A854746E609CADB62215DCD73F19D +:10640000F31002DE3D3E532FF40BAC12EBC35B6C7A +:106410006C533CD637BB13709F712880A99FA77A15 +:106420008B5C47B65A66017FDE0EFCED02BC24E6AB +:1064300071BEBA5DF2F71346FE1E9AE7A47E15B44C +:106440002F019FD522BC127F1489F68AF2B81FF360 +:10645000863CB94E6D25BBFA762157AED4DF2A2B88 +:106460000B12BE9EB3D2BCCB7E678AB0308FDBAD41 +:10647000120E49E7B5ACC18272A2569C7333C16457 +:10648000A2FE5CD1FCA80591B062AFF17C1D18564C +:106490001694532BF747A7EBCEC9A9063946E74C0C +:1064A000154BD7AD089F72638C1BF9A2DAD24A7ED6 +:1064B0000505E55B7E44BE45D7D39AF9BA52DBCEDB +:1064C000ED32E99FB382DD89727E7146D760940B0D +:1064D00056E69CA2B858B7FD5E2BE8C08AF606CCFB +:1064E000572DDA67B85F8CF619E26F0FB747CDC248 +:1064F000DE5EDA6CB453166FD3D9AB3CB0E9CF0F84 +:1065000058D15ED1D91BF23CC17B96AEC1A837747D +:10651000FE57B25BDE33F171F87BF173042C95E723 +:106520009B857D2AF9DF93A789F3037E9AFF99CC97 +:106530009B18D4C95BEF24C66E2C46FF8412407AA8 +:1065400098E929EBE0E18620DDB300BBAC6F323F78 +:10655000175E4AE5F8FD096FB9E28FA37B18DA7977 +:10656000FDB88EE37F465F6E2FD5E6C5F7B8BFC393 +:106570004A537AD487D1F6927F02CB27FF11CAE71C +:106580006C6A96EC8AB5DDE77DEDF928AF6B94581F +:1065900037AE1FE4F9D37745F829D8DF482F357F88 +:1065A0008EA7756FF4B9D48B65F17E13840B13EF4E +:1065B0009E81F3599360316328CFABBE2BC22F4C21 +:1065C00021EA7F110B7D88FB4837A576C623FAE5C3 +:1065D000F9E02D65C3F6804DC8761C289F6DCBA4CD +:1065E0007D3EBECFECAF7813FD7355B8DF47F11990 +:1065F000B33DD8EF8B5DB7D840751DCC9B39DB0C14 +:1066000078BBB8BBEB618C07F316F0F8835DFD62D5 +:1066100028EEE3F10DA23DE69B8DED5DFC218F7F21 +:106620001FF271DFBA6602175D356314D23FBB8576 +:106630005E967EB71AD30B3C9CC082A6E1572FF71B +:106640004A9E7737EA4B35FE0CEDEBFF2EDF43F128 +:106650005D39BE47F2205C59A9F82DB04E666F0532 +:10666000F2845EA7F5FA56E18F97F3B93B97CB21F9 +:10667000193E3500DA4D8BE00DDA7BFC5F69CF33D4 +:1066800080C3D97D4E5BD839CB841C80F69FC94B23 +:10669000FBE7DB977245B6179F6FEC0FDA6FFF577A +:1066A000DADF1CD59EB47FE5380623CFE279C481BA +:1066B000CC008F4CDFAC04D3E6A1FFED6595F6B5B9 +:1066C00036A79D35E3BE24F3F27DD13B62389F9C13 +:1066D000157A60F37FBA13711DE0FFAD4AFBB99BD9 +:1066E00037F073D51FFEF7A8914862D24EFDB0ED8A +:1066F0008F16278C63B5D81FAD17FBA3AB0FB75907 +:10670000A640FBF5104ED4F947EABACF0985CCB3C1 +:10671000E223709CCD3309FDB3E15BF7C73FEBD6B5 +:10672000537CDC45627C4F0CF27C94A71BB74C6F0A +:10673000D28CE71764387A006FE7D53C26E41F6FE8 +:106740006F88C2E7AF2696EBCBA523E36DCE2191F0 +:106750007302B57B5DB4CFF1AB9C095FE17CCAFEEF +:1067600064BD889FBAAB673FF5B3DC4F2DFB730B5D +:10677000386B923BEF046300E0DAB20BE5C2B41F62 +:10678000483E061161C3FD562927F6CE9E94C1FDF1 +:10679000A518CF18F0FD5DC8D71DB17CDDB470D44D +:1067A000E058944B21579CC901F2C399B378F48007 +:1067B00011983E6E0AA69759E3F316F37D1FA23F88 +:1067C000678E370DF3B13CFAB37C164E27BE575493 +:1067D000B71FC6E92B8AF3A11FB1C3C426A11E9718 +:1067E000F84B19C0E972F4008E3FD9BFEC9731071E +:1067F000F9A5CE6CEC43FB16F939652503D222FDD1 +:10680000E6E7F872312EFB85611661FA95FA8F9EE4 +:10681000BFAC019C5E4AB07F08BDA5407F3A7D3A7F +:106820006B529C215E353D8579F4FEF0AABE86F858 +:10683000FC9A6C43F99B6F1D64C8AFB0760ED7DB32 +:106840000F72DEAE75BD3605F83E11F0D2D9C60620 +:106850001F463E74C5D3BEEBEDDBA6927F3D315C97 +:106860004D615DF354DADC5C159E4DF1D5E1388A5B +:1068700077C4764E417DDEF18B245A9F1E57837973 +:106880003FC676ACF1C4CF157D176E44FDD311EB36 +:106890002FBC03E0ACF8D94DE538DFAB0F2BE40794 +:1068A000AE505987928CFC1943ED55A8BF1BBE060C +:1068B000D2A74DE47AAD02752EE43709BFE695F80C +:1068C000C627F8460B71B827872BA93D995F3B2057 +:1068D000CB702E414BDB6F26FB578C470B2914FEE8 +:1068E00047781085F5872BCDB8CFF44AFEA3A9A829 +:1068F0003FA0BC9DF4BE944B926F1A462532FB9587 +:10690000F16C15F2A75ADC63B8B3C0B31EE96BC6CD +:10691000FA90D986FB0A768B03D791334A86A6D79D +:10692000EADA696A5BC09C74CE9F59F0FC4E3584EC +:106930007A79E5BBC2398D8D038CF24ACA7156F55E +:106940007DDA17BF45F82B247DD48BF2B27EA7C227 +:10695000F5B0FFE77CBFE3C102DF6E84B7B38CCD37 +:106960007F8AE447673F5C1FFCBBE087F9B529B429 +:106970001E0BD1BDDD19254E3A0FF9A3EE71703A09 +:10698000BDDA38B68AF2C755B60EE9E3F8F8F19DDC +:106990001EDC17FCCEB061281799A3EB6BA4D3FAC9 +:1069A000A363B3D13FFDD8008B389FC5C81E95EBBC +:1069B00085FAA371B4DF537FD4BA4F8172F5095DB4 +:1069C00079286FCF0FF23D867838FEFC9727BF03FA +:1069D000E53DF6783A9F577F34E618C66F54E9F8DC +:1069E00026D81D9EC7499E5C01CE6BE5C7683AF369 +:1069F0006DE3FCE7137CB858D0ED12C1878BCDA0B6 +:106A00001701EE45AFA90CE5D392F5CAE0C3E8A79C +:106A100070C6D37963C98792DF34A4CB61489F9C49 +:106A20002EEBC24982BF5DA25DCE0715B86E85769A +:106A30002A0625D13A7E753885CA497E957CFA7238 +:106A400081EF4F28AF2B9A80BFF1DED0C63EC391B5 +:106A50005FAE4E275F9AF1BE8E56AA684827560849 +:106A600027EAF8DB1B39BF3BA517EEDF6C7299F400 +:106A7000FBE6EF09797FADF4FE9AA09325F6602E30 +:106A8000DA915A438C1BCFC5D4A439498EADBD0FC2 +:106A9000228082B59A7722EAD5B53F54C8DF88FABA +:106AA00016EDED91271AC86F2DFB5F102E624EC0B8 +:106AB000D3EC700E85BFCAF17D84F3BF383C57E03C +:106AC000B1A8C77DCACF1AB6929FEFB380D5CDC803 +:106AD0004F63F4278EF0B869DF527B4D638F38D156 +:106AE0000FE853913FCE6532C72E85FB13D1BF28E7 +:106AF000FD8172FF51FA05ADA926C37EE9E7E6E6FE +:106B00007E68FF5FE61F2CE37AEDC27E8DF45A5D4E +:106B1000DBEF469A70DFC5E5213FE1B87E3E6B3E74 +:106B2000DAB7B3023FD5207EFB834F27A0FF5EE29A +:106B3000B3D51CCCC5F54B2BE011FD95ADDB553A1B +:106B40009F0FBFB84AFD7D386157BCCCB83D22E9E4 +:106B50007C65389BF023F58D94DFCF34A6D3225784 +:106B6000CAF1ABE92149DFABCC5C8FAD02BAC77982 +:106B70008BE6A388FE194AFCC2805F903F22FA8709 +:106B8000F34744FF08FA4FEC4FEB8D68792EF5D3AD +:106B9000D843D9877F05EDAC7C7CA117E769FC2041 +:106BA0009007808FBAA7381F44F3BBD4D7121F12A7 +:106BB0003FAF88787181A72CFF9AF4440CD9B9565D +:106BC0007F2523390BA15ECE6A5176AD4C9F927F13 +:106BD0007D7C333CDFB89E9070765AB87D25E17F8E +:106BE0009571FB43F6F360C1AC85F9695C6F60FF9A +:106BF0004BF2B97FE7DF35AE2BE98F25DDE3BB36FE +:106C0000FD31336A7C721C725CAF89F15EAB7EB978 +:106C100027BF67FD02E5CEFE1AEA5D7CAEC0817239 +:106C20004C55BACED2B997E7629C8887E3CFC7505C +:106C3000798F2D91FCF5139F7FFFD28F9DB88E9891 +:106C40007D0FF2A1E759AB99E9EC3D099784F3B7C1 +:106C5000026ED043EBF375EB0099FEAFEA25C9173E +:106C6000D17C1BCDAFD1FC39ED01B013719CCF2885 +:106C700074AE20621732D2531D5999B49F26F95B26 +:106C80006727F27341F90A9D0BBADCFEFAC370273D +:106C9000D4BF343C7E28FA47DAD5D65D6394081F0A +:106CA0004F78FCABA7FFC42ED777BD0B7C3F43FCCE +:106CB00048FE957C7A75BAFCA546FAAA4E21BBC659 +:106CC0000AA15E5FF9AEC06F87F3AFCF2EDB27E876 +:106CD000F138C287F658A285ECB1ABD1DD4BFF7E0F +:106CE000BA7B494F7757B2BF5F157C0D74F76AFEC8 +:106CF000BF60FF7CCBFC929E94F437ED554E372C51 +:106D00009BAF57808E08FE0E4B26C9E96A21A7A7C4 +:106D10007DC3EF6FFAC4FA5FD2F1A705BE8BFAF913 +:106D2000C7F509AE3BAED5AEAD4E6DA0736B3E0858 +:106D3000F57249DE4F889EFFCFAE53DE9ECABF3E3E +:106D40007BD65C70DDF66C62C188ABDBB3CCC3ED87 +:106D500096C87C586723DD5C0A9AE9A8D395E65368 +:106D6000DDC3F1DD8DB7A059DA05296817009D381C +:106D7000B0FF7F964E2A26B67E660393B5E8D0AE66 +:106D80002AF42FCEC5B332E4876869F1E4A0BC6170 +:106D900072BF85FC14C44718F7EF7E6B12AE2F77D5 +:106DA000B1C87E0CE44F2E4DECF66BE01248961FF6 +:106DB0007C68E75BDB096E7E3E89F94266BE3F294F +:106DC000E2C3211EAF8B9744C5F7F2F209E610D358 +:106DD0009FDB41BA538A399D18DE0D605D53F03C4C +:106DE000C88CC38A03FD1337975EB4A05FA66262A6 +:106DF000E8A5BE30DEB2437BABEC05908E7211E0AD +:106E0000AD3CB4BFC59F23EAF7223F16FDACAD8A67 +:106E100047C57327254A00AFA045E3B1B2C0B8BE4D +:106E2000C29FD9589FE139B0EBA98F7C4BF5B3A82D +:106E30007ED07A1DFDCF2BE5E746A3CB2D2A107C13 +:106E400023EE9B50FB80BBD9ADDC7F105D7EB96823 +:106E5000B7D3645A858758EB0F1D6941BFD564C607 +:106E6000E963CDA167AAFC9C0E99276ABCDF06EFF7 +:106E70009C02A33D813FA7B17EF0DBF0557D19BE9A +:106E8000047DAC30D24BA2D97BEC12C09198AA38C9 +:106E9000D01E5FED8DD98EEB8E8A8992BE5FA8F2EF +:106EA00094C2F86298C10F17A1EFF6AA4976DC8761 +:106EB00097E55F6C4139E53531C33DB2C9CF2ADD75 +:106EC000F5F38195C93506F51F3874AC05EF6BC332 +:106ED0007C503EC5CDDF42EFAD51F1D228FE10F41B +:106EE0004DFC89F21AF093DB83DC3820F0FB91B87B +:106EF0005FD03981DB959D593C7CA980EB979F0A37 +:106F00003CFE42CE73AC0E0F199179865F10D73FCD +:106F1000BA71139E16A4CA719FAE9A0EE3EA4C662C +:106F20008315A09360C17B2D9BC6617DAF19F7418E +:106F3000CCEC2F2DAF815C5920F0F252C1A9B704DF +:106F4000DD28C867AB880060DE0F2B7E3A8786F3AA +:106F5000DEC3B8765ECE27FEA8FA1EED5BEAEFB977 +:106F6000BCBE27AA3ED352AFA7BE9897E951F356AD +:106F70001E356F93A2E235321E30C82F29D7961CDA +:106F8000D9B1B9179DFF53E80D3090CF166528632E +:106F9000EF1CBA50651F8DF4E9D4FA828C7FEFD0D4 +:106FA000C76FD980762B517E11BD5E24793D1BF9C8 +:106FB0009BE25D559E21482F0D9BD3A1FC5F0F7D69 +:106FC000D262037EBA79D30E0DEFEA7F70E8528B5E +:106FD00019DA5D30FC672F617BE60D9FBF35DDF56B +:106FE0002DF4D91C358EBD51717F54F996ABC8F381 +:106FF0004D51F5D747E56F8F8AEF898A6F33D65F9A +:107000007C2BDF0F5D0CF38788BB1A9F7C5520ED2E +:1070100082D6E1B8DFA63E66DABD194CEF694D9C19 +:10702000CEB581EA1C3D9DCA7DDAEA54E6477DA0D3 +:107030005D413E7D71253AC98FD65F32DF9B8EE977 +:1070400027057FC04A760ECA9976298704BFB5A95D +:107050001CAE84812FBFBD49B74EDC29F625E4FD67 +:1070600017DC5779B207F9BF7610F7EBB67FC5DFAB +:107070000FF0F7B7903FAB3D91DF2FD87ADF3CBAE6 +:107080005F20CBB7F5B7ACE3F70F1AD397E9F4431A +:107090007BFF5E5FE33E517B6F7EEFBFFD3BC3BE78 +:1070A000C6FB0BFE7AD59DCBE89EE787F8CEC43BA6 +:1070B000E1310EFD3D4FAD8E9F57D6525BE397E910 +:1070C000E06BAF1F56EAD48DE773E1777F27E36E5D +:1070D00007EAEBB6FE77769621BCBDCD04AFF5CBC3 +:1070E0001A875288F711F9BDAF510339BEB5F88F31 +:1070F000E87E69532A5E9CC374B1CF9531D786ED83 +:1071000034A5F2F70EB4F8850E8B6E3C9E5433878F +:10711000CBC5BC7A7BFC71D1EEFD03B93DF882EAA8 +:10712000A071031C0EF4C72FFAAAE64427F4A3F5B6 +:107130001BE9C4730D170766F37B10264729FA87EE +:107140006E54DDC3996E3DB9C024D68D51EFE85819 +:10715000719FDFF86E22BD1BD0FDCE488245DCEB6F +:10716000FFF6776F160C7451FF905F24F6C723EF7C +:10717000CDA8743F8CE43FDAD55A72E4DD1BDD3BC9 +:107180003193305D53000F88A74CB67A16D169ABA6 +:10719000867C573B5031BC4320DF07A916EFD374E0 +:1071A000BFF3D2DB527404E63F64B7B89D2C922E35 +:1071B000FBAF16FD5CE93D1809CFDD0393447FEE7C +:1071C000137F4845FF459C89CE9BB39EDF7F09F521 +:1071D00003156F8FBC2BB2599C83B1DAF9FD7D99F1 +:1071E0001EDA3896EECD6C96FEF955E29CB6B8D70D +:1071F000DFFD1E4EAA85DEC3A986FAAE22DDBAE403 +:107200003ADF8BB9DA3D39E95790F461C333A569A8 +:1072100048F7BDD6135FF5B611DD6FCD3C4BEF7A65 +:1072200068DF1DEBC6754B379FF64E2FC5FB3F6DD4 +:10723000F529EBBB747CF24EDD6CC7D242BCEF6328 +:107240005F81F47DE35719EBCB52F13CC978035FC2 +:107250001EFDEE87979E49C5309EEEC11DFDFB18B1 +:1072600027FA65555388E404FB7B2CD1FBC4C4F991 +:10727000E9FAFB70FB047F0D72790203619ED45E14 +:10728000C007F6883CD37A0DF721BF6CB5D34D45C6 +:10729000B655ECF73629C6FBC817059F5D14ED5DA2 +:1072A0001C28DEC5313BE99D3479BFB3ADBF799D64 +:1072B000DE4E7D5E947F5ED46FEB7FF789C53A7CAE +:1072C000B5599FFFED48C457AF2A37DD6742B987EC +:1072D0007EFDC638378EB3ADB78DE6BFADB725801E +:1072E000E77CDAEA557E9E26D146FA42DEBBD2BE64 +:1072F000AC21B97871A0D3B0BFD3D63B95F0FE8254 +:10730000DA7082CB051BAD9FDFA94BF91AE595A674 +:1073100025D27DD3F74C5D2390FF2E0E4CE6FBFC6F +:107320000AB085CE1F7673442ED03DD46F910B16D4 +:10733000F1FE904FBC63F1ADF2E01D210FE4FB4282 +:10734000FFAC3CC09F36F2727EEFE667515FF2758C +:1073500077FDFF253EB9398A4F5EC0C945FC6FE510 +:10736000EF67696947E2F5FB884CE8BDB6B844AE03 +:10737000CFEA53BE46BAB06E5ADC8B39F5E5547E7F +:107380000FD326EFA58E27FA5D6C9FAB919F00E887 +:10739000710EBE0B30D04CE59A92B87DAD99BA060D +:1073A000E3786A5C3EF320E8E794B84719B9FF98A0 +:1073B000A4E0395409BFD46F72FEFFD61DE7EF7009 +:1073C000C8F3A5F23D396B8B4A173CAB333CF45EF6 +:1073D000AD7CF7439E473BA5783B513EFA33F9BD60 +:1073E0007C792E6D6BEA1407F2FBD666FECE2C1369 +:1073F000EF7E2C15F56AF15D0F686FF620BE9FEBEE +:107400003BE79892E044FC9DFB2DDEC3B6DEABD299 +:10741000BB3BCFFF43A57312E33EE3EF75F836B9EC +:107420000CEF28F82E98A7A07E5DCC1C74EFE1BD70 +:107430008475E51BA05C535A377C411FCE4F1A7FE1 +:10744000B7636CE65B15F84EC7D8DD69E42769BA07 +:107450002B3E01174D27594327C2EBDFAE121F35D4 +:10746000696C12FA5BFC4A12C99F3F67ECA4F738BB +:10747000FE9C634D42FBAED6CC8EE17B1BC307F175 +:10748000F54EB538C78878B11547DEE700BA6437DE +:107490001447DE5BE83001E714937F87E877CC2060 +:1074A0002E3F6AF17D0EF423A8CF8EA077C1F61887 +:1074B000CFEF35FD504957C09EBEB5252A5DF8F186 +:1074C00016FB8DE9D5DB8DF18502CEEB7D17A16230 +:1074D000D03FF72EC242C11FF25D8488DFE91E074C +:1074E000BD8B9061A6FDB9AD0ECE3F5BD7A9744FA1 +:1074F0002BBABD5023A37B902E6C4FE7D79774DB3C +:107500002EFC6AF81E18DA9D91F74232153FE9D534 +:10751000D614DCE7AE13787EDEC2ED54F96E887CBB +:10752000CFA04EF0DFAF2F14D3BB0547C3C5A5FADC +:10753000FBD5ED6AE8F151249F399D83995EFE7475 +:107540000F78481BA81AE094F6B1E4B75D026E39D3 +:10755000FFD1F5EF1BC4ED9C50D47B22BEABBC2702 +:1075600032226FC206E47F4967AC7D0173D1FDD73B +:1075700061E487BB4FCCBF2F954DA17744D2BDE9C5 +:107580007ABFE6EBE27C94847B57B75CB8BEF5C16A +:10759000EB79C6F5C10E31FE6EB8C47B0DAAD83F9B +:1075A000ADC1733F40F707C4FCC877466A6283B930 +:1075B00078FE5ABE37526E658B2AEDFC9ED15A1D5D +:1075C000DE0E08F93AED215E0ED64F14623B8FD8DD +:1075D00023F93513783D1997E394F0BD9E27F4BE47 +:1075E000B83F130DFFA4B8FF791ACF1BD5365B1D2A +:1075F0005680FB0CFA6D503E3C27DE4DB43137BE51 +:107600004779E6ED616EF4CB7F0AE3457E3EB663D3 +:107610004022AED79675A80CCF85AEEAE0EF86A3E0 +:10762000A7B642772FEFB616C58FF7DB6ADFE5FC0A +:10763000507B580DE053B0F21E16E453BDDB02DA66 +:10764000293D5FD3D54228BFBC5509E0B9DAE57BB7 +:107650008CF9F27ED2AAD6A87471AFAB3EEA3DD0C7 +:10766000F7F03F7D2E9703C02F4407C70719EF1D82 +:107670005DAB3C3033CFEF07914C8EBA5729F16D9B +:107680000EA6CDC3F5D3CB29749F1EF8D256A23BCC +:107690000F26FDED171A81130630F671E30A0A650D +:1076A000FD8B4A9BA52FFACBFFCAE87CFD98C34F00 +:1076B0003E30D689E51B48E97F7C6138ADF33E0654 +:1076C000BEE246C04661DF07281C77B84DED0BB11E +:1076D0008F8F9C8EA3F34197FBCB69BE2F5D300744 +:1076E0007ADAE7EFBED7FA3FB1942FF178FE5E2E3B +:1076F000BF24DD8F15EDB53D9EF2EC18A49FB84474 +:1077000007AE5B978B7DFFF307556AE79C2DF10071 +:10771000FA43CEED9DDD0B1F7F5AA67559F082AA64 +:10772000FBB9CA04E4BFBF42B920D9610115F5DF36 +:10773000987246FEFC31413373BA70EBCD3B03E9DE +:1077400062F4117E9FEF43F4DB135F72BFFDB25F03 +:10775000AAC46712AE89251C2E89CFA1859C1FDF84 +:10776000DFFB34B5F3C17ECD81F07CBC5F237A5B57 +:1077700009F48947C0CF1DE4FB7A2B9F5502319055 +:10778000FF01DE7FC4FCB754B70DF0BF6A8DE6A1E0 +:107790007B8751F43EF120F797AC6CE5EF2F4B3A25 +:1077A0005FE909D03BA24CD0B90DFEE079F224D6B6 +:1077B000BA05EF41DE7EF05FA3EF68BA2E2814F41D +:1077C0005CCC8AAFE71EDD05D04B487F323DB975F2 +:1077D00068595F6AD56F382FDE6461742EDC6F8A5A +:1077E00075A39CB8DABBC4F7A88E17D1BEF8512197 +:1077F000B79FBF3039355C1FCC4E0D4D22D379A2D7 +:10780000C983F7C8589395E44E347C93C5BCFD1EDC +:10781000E716FD52855CAEC9FB533264CC91897C7E +:10782000581997FC393E153DEB89017371FFA5721C +:107830006CF25DD96019DDFCC4E0B966A0DFCA61F5 +:10784000C93FCF82784D61218F0F491EA1417CC372 +:1078500086A2B993A0FCBD851E6FA1AE1FD92EA430 +:10786000CFC6F41B337D7331ACB7D8B7A1FD7251CD +:10787000E95A8D0F70C9F26F28ECE4AF95483CA42B +:10788000B17E6EB467BAE1EF397CB4D0B3A830ED05 +:10789000F2F425F8940EE065899FDF2F819FD7D6FB +:1078A0002BF2AEFC1279DF645BD43BE26E7E2F4A92 +:1078B000DE2392F7810A22F79CF65ECF3DA78BE28A +:1078C0007E56F4FD33E5597E4FABC9CF4231340FBC +:1078D000C6FB21ABE2802E866008F400E5D6FEFCF4 +:1078E000CF094EE8FC3685CB13E62BA175CC9D0E57 +:1078F0003E1EE61B43724ABEDFF67E236BC841FA8A +:107900009C11CC43BE7F48F56D413C5D703D93803A +:10791000EAFAFDBD6FFED48FF690F07FB0AF557AD6 +:107920009FA3C35540EF1C5C78726B06E2F27B8527 +:10793000DC5EB8E012EF047DDDDEEF3B50AE3C6B69 +:10794000EA88FB69B49EE6C29EE4F9FE3904E75476 +:107950003BC86F18EF78A722DE9761FE78BEAE6352 +:1079600078EF4983502D8EC85FCC4FA03BFC4BD3A2 +:10797000C57A91EEBB757F0F40CCC765F304AC852B +:10798000EFDB996C4C43B95DC0F63AD05E95F3F5E8 +:10799000BEE0B3F76D9CBFE4F730D63EC7EF79AFDA +:1079A00055B8DE5EFBB64AE78C5675683DEAE78F50 +:1079B0005890EE3FAFD8BB94E494944F78FD1AE909 +:1079C0006786C37C6D7269EFC46B924BCF4AB93442 +:1079D000940DBD4E3DDBDED3BC4C566B9CF85ECFA8 +:1079E000DAB4FC62F1CD15A29BE5E25CBE9CA7B5C2 +:1079F000FF379BEEBFB2F54F129D2D17B0B3BDFC04 +:107A00009ECC16974AF7F82B8EF4654E48BAED884F +:107A100042E7E5A61F49A17842B80FC52BFEABF798 +:107A200004FE9E009FDF8AFF1A40F10F0EBC3A5CF5 +:107A3000BC8BC4EFCF083A96F3F2E97C3E2F667F09 +:107A4000C10F4AD1CEEDD058C049E5E9BE9257806A +:107A5000E315F793BC2CFA3EB53311DBF182BD453B +:107A6000EF5E7BB81FC029EE2559D34DCCA99B8F63 +:107A7000391DFCDDF518672C73EAF0FFB6B8A7D402 +:107A800024E435F37B3A71DD3B5FD0435C7EB2A1E9 +:107A9000FC7C3B7FEF32DE7D83A17DE6E3EBB06EC5 +:107AA0003AC1B4547EDF09DB9F33DF782F6B6B0C58 +:107AB000D7075AE92724EFBD828EB452E37ACE2B42 +:107AC000DEC3F446DD338FA6236DB0A0A30256A01B +:107AD0007FCF5D8777A2FF4F415FA39902D6C30F87 +:107AE000F07D8DB902EF9BE5FD257CDF19CB79E2B6 +:107AF000E9FD3A496F9DA8BF86F0EFC3E8C78DDF67 +:107B000087D1E307BF0FA38FE3F761F4E5F1FB3003 +:107B1000FA7CFC3E8C3E1FBF0FA38FE3F761F4E5B8 +:107B2000F1FB30FA387E1F465F1EBF0FA38FE3F7CD +:107B300061F4E5F1FB30FA7CFC3E8C3E1FBF0FA3E5 +:107B40008FE3F761F4E5F1FB30FA7CFC3E8C3E1FDD +:107B5000BF0FA38FE3F761F4E5F1FB30FA7CFC3E45 +:107B60008C3E1FBF0FA38FE3F761F4E5F1FB30FA02 +:107B7000387E1F465F1EBF0FA38FE3F761F4E5F168 +:107B8000FB30FA7CFC3E8C3E1FBF0BA38F6F16F6BA +:107B90000A7E0F465FAF936DCA45BD93E4F4CD1DD9 +:107BA0009C86EFD95D3023BD9F58C8DF05F9B463CB +:107BB000B683F8FF3AFD10B70C16F7F7041D7FCE19 +:107BC000ECB798B2AE5C5FD2E74461174C56A7D3CE +:107BD000FBDF9FB62A44E7D1FA59DA6589A05ECD6A +:107BE000BA7E933C3666D68D3BA5DC6188A779D3F7 +:107BF0000DE57BCF771AF2FBF8F20DF97D57B80D42 +:107C0000F1CC861243F9FEEB3C86B8CB5F6E289F21 +:107C1000BDCD6B88E736CF37941FB0C767C82F0834 +:107C2000AC30E40F3AD860880F6E5D67283FE48877 +:107C3000DF903F34B8CD903FACA3D9101FD1B9C766 +:107C4000507ED48980217F74E8A0217FECB956430F +:107C50007C5CD71143F9F1E1A0215EC65E36949FAA +:107C6000687BC3109FECF8A3A1FC4DE97F31E44F82 +:107C7000757E60C8AFFBD04DF78AD9AF15BAD72251 +:107C8000EDB269F99F18CA69A960B7E37E3E8B75AA +:107C9000E3F9DF2BD9EBD29EAB707F69E8F71E9535 +:107CA000DBD92F0EE6FECD2F4CDCDE6BF27BC9FF5D +:107CB0009D8C0B5AE09344BCF79DCCCF6DF0FBEC50 +:107CC000A974FE8654A713CF9180DD03916493CBF2 +:107CD00085EB89B8883D9AF18DEE5D8AABD9A36FAB +:107CE000A22F288DBEC3D4317804AEBB9E9C82EBFC +:107CF00095DB987F0BC231592D4CC4EFDABC1ED3F3 +:107D0000B35F6AAA0DF0A8EBEFE598E68CE26FE1AD +:107D1000DFA9B60B54BEBB5DF1EE8602E3D3FB6F69 +:107D2000BE07EB2833F0697323F0192C8477363AB9 +:107D300028DED2984EF1EF373A29DCD3984FE18F05 +:107D40001ADD94BFB7B184E20F377A281E682CA7DA +:107D5000705FA397D2F737CEA7F881461F85071B20 +:107D60005750F8586303E53FD1B88EE23F6DF453A6 +:107D7000D8DAB88DD29F6A6CA6F8E1C63D14FF45EB +:107D80006380C2238D0729FC55632BE53FDB788494 +:107D9000E2471B83140F367650FC85C64E8A1F6B54 +:107DA0003C41F1971A431476349EA3F095C62ECA2F +:107DB0007FAD314CF10BC2FFF8CD60EE9762AA9D0A +:107DC000DEFDF34E1840EFFEC9F43979BE6F509EC8 +:107DD000CAF724E4BB11D1EB87E879382FDAD7262C +:107DE000F07721B41BF2F6E1B9CAC8BB0ECE7D789C +:107DF0001F24B688F7D3FD4E84B0BF970B3A94EF9B +:107E00004648BFFF7241F723901EF3891E5FBB9E59 +:107E1000F5915C27EFCAF1DD5004E1CA4C939FFC59 +:107E200004767E6FF55739BE4C4CAFB53758B8B9AC +:107E3000EAA6F40A2BF71375BDACBAF739AFDC5FCD +:107E4000BD387F7CC5FCA31F64A0FE29FF874AFBC9 +:107E500059AF6BF1F3D11F32A488DBC1438A4C8642 +:107E6000704AAEB7A808C2F7731BCEFED815B92763 +:107E70003B1397D4C0D795CC49EF76CC669E17F1CB +:107E8000131173C0F0C3F83CE6A7D099E31B85F546 +:107E900017C0C201E3BE31567AAFB2C2CAF9221A84 +:107EA0008EF1623EC617990CE1D25CEF78C4CB9993 +:107EB0005CCF813BA0C80FC5BDE919ACEB6184E381 +:107EC0006FCF7D7256C98EE057FA21B69489FDC5F1 +:107ED00035F2FB3097DD5FA7FC9ABBB83F26FAFE70 +:107EE000BABC7FFE6983467211EFB9A39FE2D386C5 +:107EF000BB46E17EF54258BFE1FEB6949335F8FEED +:107F00004631DE97B7F176DF8DA37B47D1F253EE92 +:107F100093D4807D89EBC1FBF170388CE775EF2736 +:107F20001ABDDB9FCAFF5E1CDD97DE1D047AF121BE +:107F30001E578E56F93D6707D0CB60BCDFCCE9C237 +:107F4000FF0ABF7F6C76783DB87F53BB376928ED59 +:107F50009F01FDA0DFEBA0984F491FABC5B9774942 +:107F60001740777588DF8F7F392A1FE9A3FEE868FD +:107F7000DA8F6E3289FBCDA27D862E6DE84F4D2CB7 +:107F8000A477D22AD0A840BA1C1D4FE775DB54B69F +:107F9000EEC91EE4E84E415FAFA7F3F7F69A24FF5F +:107FA0008BFC07C43C3F20E6BFE28597E9BDA4D522 +:107FB0001D9A1BFDCE6C78A850FF6E74373DAF7BC9 +:107FC000F4EE1C1DBDD71FF90BF7F3B350E1AC78ED +:107FD0000E2ECEB77C6758F6A3A13F04954DAAF9A3 +:107FE00042F7FA220BF1C4F585A44BD512EF7BC4FE +:107FF000AE1F47375FEC407C215FE0BA6086D599C1 +:10800000380F400F010A717DE3FB7F0E7A8F630901 +:108010007353782BF352B81CC805F9C0EBDF61C16C +:10802000795EC95A297D75C9D27E18AF675D93D232 +:10803000A1BD39DB36BC980EA0CC6EDE31B90FC0C5 +:108040003D2BB0F8450C2BF72B67FD4EE2AB7D487E +:108050000F21A561F30D0AFAADCA36F785F419C2EE +:10806000BF0174E85151AFE6B8437E98BF333B0A75 +:10807000C8BF7C50CCC3D25CCF4184BF6623237A77 +:1080800091E7ADBBF9AAE4F6F7FAE259187317BD08 +:1080900013597FD49A8CEBCA958CEBF1887F87EBD0 +:1080A0006FC937F8DE1DBD1FF9DFFC7D83F30A4C75 +:1080B00040710FEF3E083B54F243F4F7C8BE30095D +:1080C0007F5D3F5F7A7176445F9F370546266493F4 +:1080D0003E6F47F8B509BEED4371BDFC53C5DD04E5 +:1080E000B09C4F0AF46BB01BF403BDBF24FD7FDFCF +:1080F000D3B83F2EDAFE95E38886D36A617EDCD75B +:10810000ECB67B4A5EFA52E9115E5FFA4895F6C713 +:10811000422887B4095E674F706C12FD77FC0FF739 +:1081200077FB33F9F743A2F1A938783F57F29B5A0E +:1081300063395C526F5D198F7CBEBA8AB87C91F04E +:108140008100C97740FF66732CBDFFF9460CF7BF6D +:1081500049BF9A5C27DF6BF65D443CBF11C3FD72DB +:108160001DAEF77348FF7EDD94C1CF01060DEF1001 +:10817000CD907C55A219F88A45F9B55869CF7E474C +:10818000AFCD41F26F1673937E2960EF4AFC915F89 +:10819000EBFF03B2032776F0770000000000000039 +:1081A0001F8B080000000000000BCBE26060F8515C +:1081B0008FC04BD1F8E8988713959FC3825F3D210C +:1081C0009C0ED49F04C4B1401C01C4C140EC07C440 +:1081D0009E40EC02C4856C403B80381D88938038FB +:1081E00016882380381888FDD810E678B03330041C +:1081F000B0E3B76B1D1BA6181737829DC049995F66 +:1082000046F1D0C7EA7C0C0C9AFC08FE567E5479E5 +:108210000D3E047B913065766D06EA0700A970DD9E +:108220006380030000000000000000000000000068 +:108230001F8B080000000000000BDD7D0D7C54C585 +:10824000B5F8DC8FDDBDBBD9ECDE7CC12624701314 +:1082500002048DBA848051412F1F62DAD2764554D0 +:10826000B4D62E081AF99088A8B4F5350BF9206811 +:10827000D4A8A88048178A88ADD668D1529FF8162E +:1082800041C56AFB621FF5ABD5467D556B15F1AB59 +:10829000D8D63EDF396766B27BEF6E48ACEFFDFEA5 +:1082A000BFFF83DA61EE9D3B73BEE6CC3967CECC6F +:1082B000FA0C95158E62EC73FC731A63851A636C65 +:1082C00052BADCF15D6D5E4F2DFC9BD98C0D636C59 +:1082D000941FFE6931B66FE3931F8CAB676C5B5BD9 +:1082E00095EA83FA08A63056C2D8D6CEAAEB6A8B96 +:1082F000E1798245F1AB351B8795F5C1F75B2BA37F +:108300006526F5C354ECA7D2E0FD3096E0FD325E61 +:10831000DFD63627CC8250EFEAF8403B3E0D972C53 +:10832000AB132A4BD5503FEC7386DFE91FF7C97AB0 +:108330002563344409FEDF4CC626C37B83BFDBFFC5 +:10834000CA5304EF8F3A55E663D9706CEB02B8EB71 +:10835000D3704B38103E7B721ABE2F0A0FE1578242 +:10836000A4B434361AABF67311E8AF41F4C7F41273 +:108370002D761C635D2D564FB587B1F616D6533D4D +:1083800086B16B5B0CAAB7B69854AE6D8950D9A56F +:10839000A70C13E0F216433B233D6E5E8DE1A8EB84 +:1083A00041D351676C1ED1D923F035CA238EF7F91A +:1083B00051CB515F51B2C04062AE6D01CE8F433898 +:1083C0000C2A2745D4D77CC097364F2C1203381A75 +:1083D0008A2F9ECDA0AE87A22FFA807E1D255E6BD0 +:1083E0000D88425D64D69F5888B15F165C6CF4219D +:1083F0001DFBF4D7FBA0FF1AF8FB7915B4D3234576 +:1084000088C72406CF1DF462AC18E8338DFF13E053 +:10841000CC780FFF4D8BAA091FF45BC7787FF2BBA6 +:1084200069C5DEF92AC0A18D8C135C6C7FC67B18F0 +:108430006F5AE49C25CAF148184FBABFAA347F3658 +:10844000B798CC06C1F8454B0D953D50B700DF5F9E +:10845000FC03E43F9896977C21FF2B26A98C01BE54 +:108460001B0F5ADB188C7F33CA3FCC97478047F8E5 +:108470003CF1344BDEA5E06776E922980F9B2E1D78 +:1084800056772D7C376921D00FE0DFA474BFC1E09F +:10849000796291D7BA0BBEEFD1D95958DFD454A81D +:1084A00026907E0B817E006FB4494D0C0F65CB0D7D +:1084B0003C7F6D1CBCFF8587D931F8EEFA275872D6 +:1084C0000DF4D3500FFC80F6D14F8731AB08E8FF95 +:1084D000C7E7FF8C7CD9D8E8B57C95693ED8F01702 +:1084E000F1DFA8BFF89102DF4FF8BAD74A2883F32B +:1084F000A3A23983AEC80F800FE5218B1F8D9C1F6F +:10850000597C980D7C080DCC0777D9DA92646FC03E +:108510007CB8A12542F2B7B6C522FE74093EADC3B0 +:10852000A6A5D9F3F27A9535A1DEBA3EC09A1E44CB +:10853000A5505D97B39D2C195B4DFCBB01F97732BB +:10854000816523B1C3C1FE7A2A500DE367BE2F8730 +:10855000FE91C7658C030C781AC1743D0FDADFE019 +:10856000E7ED5F659BEDC49474FD5062BDA32EDF03 +:10857000AFF524526C02638FB20BED5ABFA37F1B81 +:10858000FBCF84CFC8D1DF5A51575677DB0980AF74 +:108590004B894518E8F276251541CDB60FBE9BD91B +:1085A00080FD42DD04FD7EF3FCC4FE93D2E3FC2E8D +:1085B000313F91001CE6B3D81348FFA90D7629ABD3 +:1085C000C2719BE7B102C69EC1EF611C1C1BDB3F61 +:1085D000C3AEB35BF5345D9E4FB42770DC70D066DC +:1085E00096D09F386F34213FDA066F02F5FA9A8DE4 +:1085F00093A37DC49742C6607CD5B419EA09C90F1C +:10860000CDD4DFCC9CF7FD7221DA0FCC47DE0EE033 +:108610007F85E02FB7CF8399CB9EC057C0DFE92776 +:1086200037FCFB14980F9E5E4F14D7010FC208F25F +:108630001F8E7A93388F4348671822F499C64E06E6 +:1086400091D983930DFA093794B164263C3AE8BF77 +:10865000FC74BF30DE9F33E905F5F78E36BE8EE33E +:108660005BD9E3E941A8233CC51C1EF7B86BFDF6B6 +:108670003CD46FD347367C13DBE9BD63541FF00E47 +:1086800070698449C8A20AD7433E17FCB25F03F160 +:108690005450AF42BF19F358F6077461A8273CD86D +:1086A000BE3EDDDE27E074F7EBEE8731A0CB7138FC +:1086B0000F525F8CFF51E07FEDE0FCFFDFEAF72314 +:1086C0009061C477E5046F3251C9B88D50978D6FB2 +:1086D0003F7E2EBC57FEEAAC08F23924BE93FCFC68 +:1086E0008BF84E8EEFE6E750C795DF678FBB2FE71D +:1086F000B86E78B3E47788F3A8F0D3F1CC867564CC +:108700002CEA07A4E715419A2FD72F64499493EBDD +:108710000F9C4E76D2CD6AEF8129B89EFDC6C3EE7E +:1087200082A16F46BD8B7CDA504FDF95877B237328 +:108730006A07D6BB37839D91F0911E227BB307EA6F +:1087400049D0F78507F8FAD793BAD93F1FF5B9870B +:10875000D17A0CCF5F1B8EEBE3DEF5FCB99F3F2F88 +:10876000C2F6F0FC81FDA27D3EEFAF08DB433F1374 +:108770009EE0ED8B1A5596C8A0A31BAE526F6F3CBE +:1087800016CC7EDEAEA844973D623DEAC1F508CA2C +:10879000D240F77CA44BFE1CAFB50DE8B271D16D91 +:1087A000650BE0FBC7EF1AABBC0EE36D51146167BC +:1087B000C07AE6C9B0B79B2D05EDAC3D9ED4EA303A +:1087C000E8D7EF2ACC6EAE41BAB36FA1BEEE5CFD26 +:1087D00028F3017D2634F27A43683F7B8AD749FF2C +:1087E0006E575E22FD3BD5B05F42FA4F85F9DB0A3A +:1087F000F49FAAF76ACD44FFE29CEBDE3D9F18F39D +:1088000092F07EEAF68EDEB3709D6649E2837C7F4D +:10881000EAC74E39DB23D6DD1EC41BCA4B511EE40A +:108820003A8D7611FE13C6CDC77918C2793876B560 +:108830008EF4F83B233D77CF5DCFB7227D0A3F66AC +:10884000514DC98627BFD1392FA7EA4E7CFEA7F02C +:1088500098CFEC1F2A2503F797BD8EC4EFC6F653B9 +:1088600085FE2B6CECD3E2B547C3FBB6F31723DED2 +:108870005F63B4BE0CD4BF1BDF5B043D61BC877279 +:108880008DF7BF458FA941E8B7FECBF75BF8B14B39 +:10889000BF0C91BE8C75533F605EE9B1FCCCBACD84 +:1088A000783D916D1766EAFD62EE276AC501A2BFA9 +:1088B000560C7475AC47FC3BEF4816473D80B287B9 +:1088C00070D11F5C3FCBA33FBA169EBDA578F93A85 +:1088D0001931A89F57D5F85B0AC2319BE9E847FADE +:1088E000C5271EE84F81F9ED2DAB09931C048B734E +:1088F000EAD1CE9658A19E31CF3B85DE9274F356D5 +:10890000B164112AEDCF2EB2E61C37703F6E7AB5F6 +:1089100056445F8CA37F51E28DDEC506C64751BD2C +:10892000348E5ECCD745C047514BB2F131CC1843A1 +:108930007BA5357FEC51F16913F8B8F9DE26F11A01 +:1089400022FC03BD6FABB023F371FDC8CF8D970739 +:10895000F102BA57A89C4F9E209F6F9EE20443B835 +:1089600001BF0A3507BF60FD63B8FEB9F1D34D23DF +:1089700091195FD08D730AF5A2349CC7A8261FA752 +:108980001F8E28F5A3998CBE0BA9F163703C90BF94 +:108990005E923FB077B17F6F04DE9F80A53D2F01CF +:1089A000F2DBB6F724568BDF05A36C2994DE609CBE +:1089B000CD86766DFF107195E27AC73C19A3AA0E99 +:1089C0003AB9E9562AD66159DF5421E5CAC9FF4DA3 +:1089D000977AA9DE5612FD11D272869007377D80F4 +:1089E0006E33D48CFE7593D373D3A5825E0B73CF95 +:1089F000E352E32C07BD68C2C2BC0C8B7EAF8BB0C8 +:108A00006E0D2AE15AEE1F5696B3C7750BE8569EB7 +:108A1000DC309FA5FDB6C9FEF85938BE4705F709F9 +:108A2000E00C4F69A6F1A55C9DAE3D6BBC0E655791 +:108A3000B42A8CEBE9775525A71CDDD2822E25635D +:108A400037B518541E79651CC13F90BC6D69310A59 +:108A500032E7E796D97A6312D7E95575CFCD0494FA +:108A6000DB8BABEB48C734283AE2E547BA03FC4B53 +:108A7000C4F8B77CFD2A29774B087E218752DE2A6D +:108A80006DDBC6F806AC9A4C0116E7B7B168CAE2CE +:108A9000B4D133E824E903745889FD844C361DC7EA +:108AA00035EA9B539A95A6435754257EAE98347663 +:108AB0009B569986FB21212FD29E637A94FC92814A +:108AC000E6DF0D40A75A9AC7B682701637B024CE9B +:108AD000A3B5E2F92435D686725D1C4B2A88CF46B1 +:108AE000618F3116A1785A9B80FB8693035CBE2A66 +:108AF000CCAD08CF8D128EB8E296AF1BD592345D07 +:108B0000A47C1537D82905F1F3C66FC1F79AD56D46 +:108B1000A21E0A28719A73ED8A90EB04EBC5FE4CF5 +:108B200085A5FFC0B8A188B50DF5C18F54EEEF98AB +:108B3000351D97AB8047B85AA7F890D9379FE252B6 +:108B4000DEDF7F85E250F09CE256C536E86F18B74D +:108B500034C2F6229DAFF2C67F84F886C6AF4C11B0 +:108B60003F986D7BD1AEF5D80CF9A74F89DB68072C +:108B7000DEF2F5C96C7E863CED427C27913EB093D7 +:108B8000C1345F6FD4B89C5C57FBA1714910DB0501 +:108B9000882E95ACDEC6F8A7056280F6BE2EE401ED +:108BA000F8FE331CDF37A58FC6B7803E882AC8FB86 +:108BB000F038D9BBBD1184E3FAAF7BE7A17C023D5D +:108BC0000EA23C1AAAA085057F813E3E51FF81EA94 +:108BD000E17A6B1623BF22186449B03099D6C8E9F0 +:108BE000961F61491BF03304BD247D0C412FB33C1B +:108BF0008A6120566C1D4E8CE3F4798AE49235DB51 +:108C0000A847F46082D6DE2D7AF31FFE05FADB72E8 +:108C1000408B26AC0CF96351F237249D46AD827926 +:108C200096633D1EAAFF21ED003DC8D731B92E80C5 +:108C30009CBE8470E92697D3A1AE3FDE559AF59F7E +:108C4000A8B77493E27912B60E734102E9F309F200 +:108C500012E8A3754F203E81D8D37A8480A8F0DE35 +:108C60006BDAC96B491693341FA41D62543BE3C0F1 +:108C70009EF2004B65E23D0FC80AE35D299E7957DD +:108C800079090E1DD605569BC613DE503F38C4E742 +:108C9000182F66DFA771E477E0C7A7FCC0AF75D5D2 +:108CA000752C9EE19FE8F81DB4413783C7ED9CDF2A +:108CB0000D4C17D778739D700EF9BBA06EBD99113E +:108CC000E71BF83B9DBD29E904C433918019F6DD0B +:108CD0005A0FDBADC0FAD95ADE91C0A76BF1FF8005 +:108CE000AF1D8CF39DCD541DFA452BE7F1D457559C +:108CF0008BAF6F112E573E764E8AE2EB91A1C95988 +:108D00009E58575F51E263B40CFBC65B76209249D4 +:108D100067AF97DB91AC762EB5EF9A70550AE3A753 +:108D2000DE2A7302C98290AB2E17FDC03320F8D61D +:108D30008978A637C2D7397F759CF86858DD54FA10 +:108D4000CA13C28EE0EFFBE5B596AFC31D51BE2F2F +:108D5000E13552A49F82DD7B99E690D3389B9B8FAF +:108D6000F451491ED643C9E521C9E34256C021A7A3 +:108D7000520E65FF83CFC76E05E5B4F4F73E9A8FB8 +:108D8000C5E9F9F8350DDE972E14EB86B40B637345 +:108D900039DF1AFD4497BBC4FE4376FF9C3E47A0D3 +:108DA000EF5EA4AF1E0FE0BCD8B17E4100F1DDB193 +:108DB000614E38930FEE7223AC5F2970B8B6C2FAD9 +:108DC0008FE51D2D2695F2FD1D228EBF59AC67F251 +:108DD000F9231AD7E36B34BEAEEF306201A42BDB6C +:108DE00077DE57C70349AA0F6A5194B51137F514B6 +:108DF0001C6DFCF2A5CEF9CFB40B8E0AEFAADF3FB3 +:108E000057B03FA3FD155A7EF19B79F08F13D98996 +:108E1000382F06FBFE484B6FC17ECF97A7CB66115C +:108E2000F77DA4F581D509A47BEA34D21B55627E77 +:108E30009576325A47AA57F275847DF6397FDFBF9F +:108E40007F6707E7437D0CE3F51D9D0BAE453D5A5B +:108E5000F15B8DA9207763C4BAC2D6F37D0003FE0F +:108E6000A27EA09036F43B7A214BA6A0DDE86EE707 +:108E7000BE4229EBFA00ED920AD77E4429AE57C7CD +:108E8000E37BE77E43B90EA65ADD97E7C3F6FF47BB +:108E90007CB843EFF19B19DF8F50580CE575C4B2D5 +:108EA000FF541664C8EB2F346EEFB05541F646867A +:108EB000BEDDACF414E062B475A9DAC8ED919EA7EA +:108EC000C792DFD477EAB550DB30FFAAF7F7A05D91 +:108ED0005BF2F6A968573EA9E5F1F9DCC8B87DCB8D +:108EE0009CFA0AECB627B50CBB766BDB1CD24F772D +:108EF0007C76C55E0FF06DCC4A165D43FC6707714A +:108F00005FCA12FCB704BF67AEE7FCADEAE271428C +:108F10009670F2BF6A6142F1623FAB5814BF1DDD2B +:108F2000C4C83EA9BE00EC1340B1629573DFAF7AAE +:108F3000BD533E860BBB65B84B3E2C90832290837D +:108F4000EAEEF8B5387EE9418DDB0CAEF1C7583D4D +:108F50005FA1F1405E92B49E67F4A3A17C45D72047 +:108F60003FDC72391CE5F2F8EC71BFACDC7D847239 +:108F7000776C5AEE3E614BCFDF0984295F5BFBCCF7 +:108F8000586A65AB997695943B9DD97FC5F58AC59E +:108F90008666FF0CB91D3B83F4B5DC3F9FB6C20863 +:108FA000E0FECC662FFBE538F4D39FD718AE379B95 +:108FB0005704CA32FDACA4D0FB49118F1DAE7379A2 +:108FC0002D41670BCA525DC441437C7F2E7BFC352B +:108FD00022FEC3E340359F82C1539459F7BAEA3A5F +:108FE0004B4DCCAC87449DE3D156C2FDF51DA294F8 +:108FF000E3B4E7C719CF4758A8921D27F4D9BE821A +:109000005906EE17B405EBC2DC2E8B131DE4FBB63C +:1090100060D57096C1D736DC871C37303DDB711FB9 +:1090200012DAB78B78F80E8F1D29C0FE0B6651BC83 +:1090300063473ED80DD06FBDCEFD270DDC2CDC473D +:109040003B4537D7ACD171FDB627E925FC3B9447AA +:10905000CDBCB86CBE45EDEC640EFA597A80D3AF46 +:1090600056FF5BE6BE2B580A26C997906F161C9ACE +:109070005D54AEC71B71FCC47446764EE278966CA4 +:10908000C5F9DC1C73C4E7A0DDD745BB04FABBFD02 +:10909000EDE2DCEFCB6837479F44ED6C47BB585699 +:1090A000BB73453BE618D7CE1AF702091FCBEC2F4E +:1090B0009AD5DF7CD11FD9F9FDEDACACFE2E16FDA3 +:1090C000D98E766656BB25123EC7B8CC396EFFFBEB +:1090D000B1DE642BE919BE1FD35E728E417E4B72E6 +:1090E0009E43FEDC7C78BC84CBE3FE92598D282F16 +:1090F000573CEDA13DA2BD254E3995ED5B5B58E790 +:10910000D28CB8466B701B8D93E3B999FBF91A03A7 +:10911000F5568EE7A6784EF9291D221F6420F9E93D +:109120001072DF21E4DEFDFE13A1175A6BF87A9569 +:10913000257F1EAE27E43EAB51C37A6A73ECD7FCA1 +:10914000FF82EF0742EFB5D6D4754F0797EF41FD89 +:10915000BC3506C84B9B35DDC4FA0BECBC35332B54 +:10916000FFEFE2DBAB3739F0FD57D6B466A6F27FEE +:1091700017DF43FAD50E7C7FC8AE3E2A7F65BCCB95 +:10918000DDEF5F75EE9FACF3C448FFB797DC46FE9A +:10919000687B0523233ADC7EE29AD5503F8EC53F9B +:1091A00043BDB5AE44FA4F16AD53837DA78DD7634B +:1091B00038FFDA2CE73C5C2FD62359DE8AC15BDC12 +:1091C0004FA8D4C94E6325DEE418810FEE5FFC4C36 +:1091D000371DF3F539AC4F4AD7DF77BD877FFC0DDC +:1091E000ED2713F11F9D637D12FAF3D6024671FE3F +:1091F0001DA294F0B5E527555CBFF76D3C87E79756 +:109200008975BC58AEE3679FE347FD786B2CF73A4E +:109210008EF614C5CD040FDA83730E54829E5EF170 +:109220002B0FBDDF02F63AEE73B68B3C23690FC9F4 +:10923000FEF76E84FE61DC7D25E7F8C7003D3E0445 +:109240003B139B0D26278F7AB8DE5B0FFD5B3E8CB0 +:10925000C71A546E827A1CCAED50C7F227E01F600D +:10926000F96F2D11161F87705854C7BC27ACDFD774 +:1092700012A5F2B696062A6F47FF02CA6DC2BF2832 +:109280008BA9641FDCDDC2BAD0F4EA6E31A8EC6CA5 +:1092900031A9FC694B84CA648B4565474B0D95AD7C +:1092A0002D512AFFB5A581CA99CA9C333C648F25EC +:1092B000577B01CFF267AAEAD09FA88EE93CEEA9BE +:1092C000DBAABF3EFD5CE23953993E1BBF3B762EC5 +:1092D0008783193D8F0772B73B13DB9D3657E7ED48 +:1092E0008287F7858B73B63BC783FE4883E8CF8CB4 +:1092F00091FD90A3DDB7B0BF6083E8AF38C5B4DCA3 +:10930000FDC5B1BFE3A6A81C8F48EFF4BCDCED1689 +:1093100061BB6153447FE5F1D59EDCE32EC6762325 +:109320000BBBE7C748DE7AF67AA0BF92B96621B6D2 +:109330001B59D47D397F1E53D1EFF114F3E7A3B04D +:109340003DC96F6A8D518FFBBDE239B6E771E5FD0E +:1093500006F453345BF4E3E5FDDF7436B72B8A6320 +:10936000E636DC37598B751ACFDA8AF5913E3E5EC8 +:10937000C1B0185330CE5F6C2B0AD47D505761FEBC +:109380009514C71415EAA3BC7CFC9BBE6A290A3C51 +:109390002F6EE4EDD6425D85EF4A1A453B1F87A745 +:1093A000E09B516A27F3F17CDFB4F7EA004751CC28 +:1093B00052706A74897C8892D9F01DB4AF8935AB3C +:1093C0001ED07FE3BDCC46106FB89C917D7B73FBB4 +:1093D000AFA763BE1A6E3FA23E4AB58F98B1BA1AC4 +:1093E000E02E63719C3F9D956F9662BC7DE408D62C +:1093F0008C75A3EAEDF1581F55C6E36F9D557F2B81 +:109400009D0FCF47E1FB5ACA7F4998E0F719A33F68 +:109410001B3FFF287E972C3F7A7606C5D747AD5273 +:10942000997D943C1077DE4CE55C36DD034AEB8891 +:1094300087E3D3753987FFDEF697A763DE9B772E28 +:10944000AFBFEA31383E62DFB9355FE0338AC3AB84 +:1094500085043E2339BEAD2181CF288E6F10F101E6 +:10946000135D0B737C3ED2EDE1660E7BDF0D7F7EDC +:10947000D409EF0E4FAC14F5FF8EB3AFB21741DD38 +:10948000B793D3FF746FD79A35005FFB494CC77809 +:109490006BBB9FC7C54206EB443A227D70BFED4EC1 +:1094A000A1AF245F46EEF6268A72E465CB52F26BDA +:1094B000E46EE3356C27F9356A772051141AF83BCE +:1094C000C9C751BB83AF65F6EFC62F9B1F711BE564 +:1094D000CBF4BEAFDE0A7AD99ACBF16389BF4F9F36 +:1094E000569DCD9F5B27707C6F15FE6910F12DE4B2 +:1094F000F42D84FA43125FC1B791EF7A8F0AB7E473 +:10950000E7C87701DF509A9FA3DE0D1C954E92CFDE +:10951000A3DE0DBE96D9FFA31EBECE0EC6D756C47F +:10952000230CA587F32DA80F828739443C4C171EC6 +:10953000E610F130FF393CD60B3CD6E70B7E0485B4 +:10954000FC0D84C7E141E44FE27158C89FC4E3F0C9 +:1095500020F227F138EC94BFA1E2B1F6248EC75A6D +:1095600011FF08E91C0FD98F7B1EAD1BE3D46FFEE2 +:10957000B14EFDB66E2CD70777CAF1C5FCF08FE36C +:10958000FAA07FDE0ABA85829CFF038D77FF1EE773 +:1095900078273CE61CEFFEC7728F77C2BFF1F1FE61 +:1095A000A7E209C59EF81CAFF0D7B54CBFB9D97674 +:1095B000F8CDD0EE5CD12EA165FAE171675E10B4F2 +:1095C000BBC02BE2098E76B1AC76F3457FCC31AED1 +:1095D0009D35EEC5A2BF949AD95F34ABBF25123E2C +:1095E00035B33F2BABBF66D1CE76B433B3DA5D294A +:1095F000E1738C9B950775F990F6F5CC98D7B1FF80 +:10960000189AE2ACFB2CAF235E29F70FA95E991ED6 +:109610004FF627F7C7583C66213C1DF9F117311F5B +:10962000F1F68ED36714E3FE5C01D7B3B77BBFD1ED +:109630004AFB08581996B6AF8F54A80CF10F8CD17D +:1096400029AF59672AE517FB8ABD498ABF8AFD27DA +:109650008D35539CC93071A31CF7C5A28E7DCE7E7B +:109660003A88F6329E3290BCE911BE6FAC473A7B25 +:1096700079A9D37E219BAB38E2DEAFAAF1EDC877A2 +:109680001F038364743A4F61C8FB6243DE3F633556 +:10969000682F5DCD0251DC472EF03205F32457953B +:1096A000F3787AA5167F08E5C03BB3F93B6D5057B8 +:1096B00066AD1A877E4C84352B18DF3787F3FC2F75 +:1096C000769111C53C5B73C614F2EB5A4B9CFEE3DA +:1096D000112F9FFF4F78359E1F91C7E73D3312A58D +:1096E0006766D02BE4E37E2BBCBF1CF9E9F12DDECD +:1096F000D7D900F5309BA0809D6376AF98D108FC48 +:1097000035478BEFCB07F87E347B00DBFFADE3E220 +:109710007D3AB61FC5F83984B56B481ECC715C9F85 +:10972000B07A6B6B1BC0BFE1DBC326E07998A26FF8 +:10973000ACAA44FDD2DFCFB15C7434FC0EC78BF30E +:10974000BC22B9CF3ED91F7F09E9136A4CA4D025AA +:10975000D582325F48E48F89BCB8D3B5DAF0EB1913 +:10976000F478DDEBCC1B02BF9FE963D275CDF875B1 +:10977000C17F4E4438D27E6A4731EE9B1851B4BB4C +:1097800073C0F14E6E3864DE9273FC0F053F64BD0A +:109790000DF39432C6BFBD8475535E991C3F1A8D7C +:1097A00074D4A7C7FFD42BFCE960A294F4860965A2 +:1097B0007EBA7DF78C1F2828075F51E3FF8570B1C3 +:1097C000485CCF84D7D718A7FDF0FEFE8B9DFDF730 +:1097D0003F8FF0FEFBEB8DBCEEC1F37FA351DE2E7D +:1097E000A0F88B3E93E749B279CE7C32DD6C967956 +:1097F00051215F49765ED42CCD0EFB681E949BB43C +:10980000CFC69CFEBECCF759D0203A64D6B9BF0370 +:109810003E5C7AC0C3880F9F41EB8CBC8BD7DF982E +:109820004FE79D2E15FB410B592C842FDF636A23D4 +:10983000F2E13DF69BD0C40CBBF9581FCF1F649DCD +:109840001EDAD749C05F5CCF16757B1CFB3C976C5A +:1098500070D62F667386E1BCBD78BD87F68B2E75FA +:10986000EDFF8CF071FE5CC29A3B28DE22ECB20563 +:1098700026D38B60695CF6F33B27E37A5BE7E3F181 +:10988000947784FF2FE15A1C4C7A6D78FFC6AE891D +:10989000E79CC2F0FB644719AE17058CE6B95B9FE5 +:1098A0005CD4E9846F30F8DDF0CA7D9681E0D07732 +:1098B0002A76AEB8AC2DE6A9E4D7117FE8784C66DD +:1098C0005B65F0F2EA40681B9647FC2393C88F382B +:1098D000267F67C6C95FCD1771F0E613501E06FBE1 +:1098E0007E217E5F32F0F7EB8ABB63289732FFC39D +:1098F000309A293EA3E8315A37D64506795F0EEFF4 +:10990000B5CCF7603858D43FC9EDBA6AF7F7CEF74F +:10991000208F9F7F3E599CDBA03816CF7FEA6CE1F9 +:10992000FBBDAD9E189DAB69FDADC630B1AAB5A01B +:1099300099D6C14405B3504FF9AA63615CEF7C0727 +:10994000B562B5520835D43B4A1BB7637EDB129F24 +:1099500047C4D1A26407F88209DBC6F892274EFB00 +:1099600048DE1F70FB6D5A301EC7EFB4C83C0FEEC7 +:10997000B73E75EF45F3B0BE38324B47965D25FADA +:1099800079EFC70F4C66005FC77DF92C85F0EB4976 +:109990002FC6C716EFD228BEB1E4FE7C1A7FF18332 +:1099A00097EC980DFD283F9F6ABD49718856E2C328 +:1099B000E287CFFAF784C0C7003AB4AE16F98189BE +:1099C00068E42CF874998F7D07E304127F293786A9 +:1099D000D54DF9538B7716505E65BFBCE9D01EE3B9 +:1099E0001250E63A1FB2C9C7E39FEFE6F3FC3765B2 +:1099F000E7DE0B09BE9E733D889752DECCFE08E37E +:109A0000DD28F08376645724EE519263E0FDBBF7C6 +:109A10006CF5561D87E36EF52E203B6A35B59370C5 +:109A20001A3B6F4AE03C33AACD2A64F18CFBEF0B62 +:109A3000615C6FF94E2D85F9825052DEA0DF72ED28 +:109A4000EF323BA800DF2F231505E5AE65A4872E76 +:109A5000EBB98EF21696EF76CE3FA06B3405702FE1 +:109A600079418BCEC6FACFEE0E5900CF3BBD77853C +:109A700090FE30CE7C2FC8BDC774EE3763FF9F16B3 +:109A800066F7C7D8612FCAD9F29E757CBC5D5F7F2F +:109A90000BF7DD97BBE6F93BF88FD2ECFDE6BD3E58 +:109AA000E77E33DB593424FB7DC97D9F6C49C0B808 +:109AB000EF3EF8E72D98DFBCF4BF3EDAF27D8C076D +:109AC0003FE637514F2DFFF11FB77C0FE8F9DE6EEF +:109AD0009F8AF27168CFDD3B3641FDD04BE3EA143B +:109AE000A8BF2CF4C7A107FE3ACC827E56EE397D82 +:109AF00038E2BFF2A1198E7D55777908E429E9CBC8 +:109B00008427497CB4762BB8190F8E9A285D7CD9AE +:109B1000B74B637E80EFBD177D9487B01C9EADAAC6 +:109B2000433E2DA33C05AC5F03F4BDECDEB5B4AF02 +:109B30009F4DE7C40815F764596A04A6C05EB6EBEA +:109B4000AC6F4EADC7D243790BCBD961D2F7EEEFF4 +:109B5000961F047E9E3030FF3E619F7931C966F9C1 +:109B6000BDEBF8B83DC0BF5036FFDEC37F9C94CD3F +:109B7000BFBFFA9C792A9FB0A53FDC842F7715E5FB +:109B8000B44365BEC0B287CE3E6A5EC221D7BC1D5B +:109B900088CE4DC21F78D267FB8D1294879FECD878 +:109BA000548C7CF6456723DFEFFB64241E8E79DB43 +:109BB00073F8429C8F87F7F8CC6DF0CDE23D2FD043 +:109BC000FA72E8A1E7BC16F93F2CA8809D7288F5CF +:109BD000FFE945BBE5328557966FCF4FF942697E65 +:109BE0005D963CB3D10AD173B2E32F4B72F9BF2C0F +:109BF000B977AE92837FD38C2ABE5E254B882ECB5D +:109C0000B6FFCE2BCEF5F7F35569407EBE360B9FDF +:109C10000FC44F89BF89F89F98C1D7ED7CDE0E3401 +:109C20003F0F6DF5515CC0CDE743C24E5C9E545E64 +:109C3000C8C5F7FE3C882F984732C570E52F09BC90 +:109C4000079BD783E3F3C5E8752C4EFE49D9745BB7 +:109C50005DEAA57D752DE4A5F9D8E1B15E48A07C4B +:109C60003CED61DB2C8C834E66568EFCF536B4538E +:109C700032F6E7F4608CE751179B75983FE13E9709 +:109C8000E231556665C0634E5563B9F22518EB2283 +:109C9000FC6F137981374E514BF1C883B97118E5C8 +:109CA0006598D33F3D309AF6050A27F071385F7406 +:109CB00066CA734A6AA61F3F903D735B05DB8CE55D +:109CC000ADA5509E90B66FBE6DC4571A47B16F6E6A +:109CD00053C4F3027E9F806E302300FAEB56E5F00A +:109CE00081D1F8FC4C95EC4378DE1928CC687F9242 +:109CF000B87FC0B62D7332CFD3E5760B3CC27B2044 +:109D0000E46C3B264A09DD5EB067D07E31308F06B9 +:109D1000CA00EBA1F2469C3FB89F02D312EB61D67A +:109D2000678EA1CE5214872811FD961841EE0FCCF4 +:109D3000D5DFCD3CD7EF679B294E84E9E99F3BCE29 +:109D40008B24283E30D8F738D4883AAC9553FB6240 +:109D500009B7B88FA4B41F2F93219E23C4DBE168F9 +:109D60006D69B80F96A2B282F551390A41D130C55A +:109D70003BBE9AF17C123A07E167BF277F444DA8AA +:109D8000CAE7C7BAE0CCE0ABE41B137EBC57F8F1DE +:109D90006E7E5FADD92FC52BC99FBF1FF97B446D68 +:109DA000DEDD07755FF8E2BE7F818FD70BFF40C60F +:109DB0003DA53C3E62F0F55196EB0B043FCF16FCFF +:109DC000D463CA9919F38340047F798FB17226F95D +:109DD000CB3AC7C7FD5C8EA7E3BE19DA9B96C8577E +:109DE0008E036132CE75FCCAE0FE09F8B74F22DC63 +:109DF000BEF23EB273A55F877E6D5F8E7924CB4E37 +:109E0000E1D776B4C4A97C09E720C655CC84AD5807 +:109E1000345E12E546177C8371FEC398F465C63143 +:109E2000193F97D64CF6F12435FE0AF567717FDAB3 +:109E300057CEF3913591B72DE3E5B29FB70CEE976E +:109E4000CB52E62D7BCB9A766E053A754F8B88798F +:109E50001FA3B8C7DBA21DD099FCE25B1511FF530D +:109E60000C31DF98650E4BCF37CDB0C959F500E204 +:109E700058FA509E3494B7249579388F605EF9FD76 +:109E80007C9EE5B3BEB4730BE38723DEADE807E841 +:109E90004030AD90CA1496526EF0B9A790EF6B8720 +:109EA000B0F41772FD84F53AF4B763FF857C8CD467 +:109EB000F0F81100A8E1BC1926E01B26E7DD3CE71D +:109EC000BCEB97CF0227BD0C3FC7DFEFE77282E301 +:109ED000A3DE19789E0F1AEF2AF2E788772145F959 +:109EE000B9BD8E4AE49F7902FB40C59B791237CFFA +:109EF0007C3642F1A407B0DEAA77CFA4F8D4442E72 +:109F0000EF23D6DD42F26E9E28E2550DCE78D5784D +:109F10003FF7272AFD5C2ED9141EDFA8F3737D0EB0 +:109F2000F24771944ABF887FD83CCED25F9FC9DB8D +:109F3000F7D76BF9FB7F223E52E79F94333E32D135 +:109F40004FEBCA00F11161DF56F4EB41673CB8A258 +:109F50008FC7434ED782A437BC4D3CFFB6BC9C9FF5 +:109F60008BAA285F7339DECBE215F255369525D1E1 +:109F70002F85F7E4E7C8EFCB573AE3C54683335E56 +:109F80001C1679B065AEB871589EB76219ED51CF05 +:109F90000A3B469EDF19CC8E39DBEFF24F8698875D +:109FA000FD1BC5FE16CA933C0FD45AE0CCFB74DBF4 +:109FB0003D83C51F065A975BA74D78B118E46FD84B +:109FC00023BB48FE34BD078FDEB00DF9FCFCCADEB2 +:109FD000B3BDB4CFB089193CFFD9A5173EBD949F3E +:109FE000E7DB52CC92FCA149F74CE589F7CCB4579A +:109FF000A35D2CF5A4127FF2AF0AF1ED72D20F0629 +:10A00000EA8FD1E97539C40E733DB234CAF08A8241 +:10A01000C7574D2F403F368F75E59C97523E3E5CAB +:10A02000C9E54367C786B11E59A9537CAB341E0BE3 +:10A03000A7108E84DD1B194647A2E84F0188B99E00 +:10A04000C1A7A24683659EEF2A89998E7AA590A71B +:10A05000E1F3228EEF581BB777F1F81ADF4F8A1120 +:10A060003D224B816695D979FF112157A50B53A449 +:10A07000CF47B8EE218A08798CB8BE73CB5552CA47 +:10A0800015980B2857408768AA9EF277E8BCBEDE79 +:10A09000E723BA94015D900E1F32CEFF8AF98CEE51 +:10A0A000E770D343CA1DFC8FFCFB91D04F0A9EFB87 +:10A0B000224E3AF92D279DF26A9C74CA8F3AE92301 +:10A0C000E9166EB01CED24DDE43D5A03D1A9BCA90C +:10A0D0006735E2F3CFD2E909179D4604411E18CA3D +:10A0E000794A51402E3689735A5B84BC23038D0C08 +:10A0F0007B4CD2C52DF7A54D20C7A8878A998547E7 +:10A100006F586D3EC5A923829ECA2A29E7B9ED5131 +:10A11000B7BCEB0CE41DED3C839F63CF433B8EE467 +:10A12000FD0D9669C7798C5022EF782CF9B9121D74 +:10A130001889E7F8E5B942D0C77F24BDDBEBDC170F +:10A14000F2001C4AC67E982C359D592A9DB94C9127 +:10A15000FE1D27DAA3BDCD32F01D87EBEBF1B88EE3 +:10A16000713A29418E1FDB0CEB6DC67EAA2EF69D3F +:10A17000868A3733453C10D7DDBCECF93D0AF1C582 +:10A180007DFCCE0EC2D7BAC69ACE87B30FA2FCCA48 +:10A19000F33A039DCF199D00BB59C5F31B4EF91926 +:10A1A000B9D2792EA35C9CC72917E77598F6E89970 +:10A1B000748EF21A30B371DD719DD3A9B0CCE998D9 +:10A1C000E754B18181E30172750D3FBF3772258B72 +:10A1D0002ECC1867443C145D086B7A998833B8E537 +:10A1E000B334E0F473AF38732EE9AB1F5E53959729 +:10A1F0006B9DB8BB25125D3806CFDD18D185209741 +:10A20000F99BE36A00E0B4929C0ED63CA6E2BD4204 +:10A21000526EEF6C61D4FE9E1693CAF22B1697AD68 +:10A22000B5904FF1F10190937189F834B40BAD847E +:10A23000ADD2BAA6DBC704503E9AF83E60CDAA72F2 +:10A24000827FDCAA91D18545D9EBCE887FFCFCB911 +:10A2500059C5C81F350A1E251BF5A9CF463B8B6281 +:10A2600038806F659BA5E2B99FA9016E6FFDDD1F68 +:10A270003B11C7B512268DC79A0A699C81E8E61E74 +:10A280004F9E7BBB63E983346E9B59EC38AFB84D6E +:10A29000F4716680DB47F2DCA1ECA7A3539E3BB4CC +:10A2A00054F4F7ABBA2B295FCD7DEE50653C4EBA26 +:10A2B000509C3B7CCB1F8F21DCCCCC380F5B953E78 +:10A2C000773862597500F5F936A37B3AF263C49585 +:10A2D0005C2E8ED9EEC40BBC3FD6002857B5F5AD29 +:10A2E0000E58693CFFEE8F7F0BFB2F378244E77ED1 +:10A2F000FA88736CA3849C8FBF86D1FA52D5CD683F +:10A30000FF795467F71AEC7E96D0FFDB84FE87F95D +:10A31000317B7E867EDF16B70B31EF4AEA63A97F79 +:10A32000412D8A75CB22FFFF986B9CF3A24AE8D996 +:10A330006A979EAD12FAB9CAF5DCCDC763B683DC65 +:10A3400065F427F19578BAE7C3F703425F0F67A575 +:10A35000984FFB099B32FC742B2D27F27C9CDB5E13 +:10A3600072C7F964FF1352A6031ED9CF607124454A +:10A370004F507CC7136126DA7A1B4AC4FAE08A433D +:10A38000F4DB338D8CF233236027A19E8DCC8ED3EA +:10A39000F99148238B5A087F27BF4F609D977FA76D +:10A3A0001A0905F3508DF2DEA928BF77048234EE36 +:10A3B000AB6AEC0E9483A2D97C5FA748AC0B47D361 +:10A3C000AB092DAD574F08C4B7E3F752BF56A69857 +:10A3D000EACD887348FD2EF5B95B7FE7B9F5F0103B +:10A3E000F3617C7A3CB5C0CAA60F806F65DEE3B02E +:10A3F000B642AC1FE57CFDBC63A92EF2DCE2A7DB14 +:10A40000F0CFEBCE7E205262123829B301EA5F51C1 +:10A41000E8FD6BD77EB71DFDA1EBCEE4F537AFBDF0 +:10A42000A21DF7E3AF3B4F217FE923F11E2A940FD2 +:10A430002DEF073D52529540BB07745E14EB6BCB7A +:10A440008F7EBE11F7D331FF58B6D3F4289D4F96B7 +:10A45000FA45E681A4E377CEFD147D29BF0743EAE0 +:10A460001D7D29CFD3E8287FF0C505F5742E9FEE1A +:10A4700065F51ACD746ECBD77D39E589B8F58F2196 +:10A48000F4CF45A87F14D23F7DA89735D3791E5FBE +:10A49000EA9F5F0418F1A1A6BE99922E7D5642B59F +:10A4A000A0FFB750C994A4E34F529FBF85ED711F21 +:10A4B000508FB128B4F73436D37D74BED922AED2D2 +:10A4C000C8CF3316CDB6E89C91C76224A76E39FE7B +:10A4D000A05F6EED0F10BE8F03329E185578BE0F31 +:10A4E0008F679C1088FD05DF5746D8E33C243E3437 +:10A4F00079A43F93459CAF12F1B7D9D1E27C6EFBB2 +:10A50000224B9ECDA1E5B7DCE0B50B4EC7FDC15F88 +:10A510007BA218CF1DC8BF92EBAB5C8FE53A2BD75F +:10A5200069E97F9D925739C0FE71CFD3B88E1DA9BE +:10A53000530B33F3B0BB16B2467E5F0997679FF0AB +:10A54000A18F542C087881E427E769FC9CB738AFC9 +:10A550002BE53330C0F92B29D7B2BD946B77BB21E3 +:10A56000CB73CD029A579F6CE67C19D77DF9E3FE39 +:10A570001CEBA8EC57CD96E793F3D0CE18603DBD09 +:10A5800036609F9207F4BAA12EDA94EBFEBA638389 +:10A590003C6E73C7D2F57E94F38D48AF8CF91FC81B +:10A5A00013F37FFC0AA2575CD0EBEECD4E7A450642 +:10A5B000A1976CFFA5E91517F48A727A0D74DFC1B3 +:10A5C00051E8153F2ABD62DB3AAB306F28AE46C773 +:10A5D000003EEB636AEA34A86F6C52EF45FBF5DA94 +:10A5E000D8743ADFB123FAF8A30ABC3F3798CFEF0B +:10A5F000C5365307B05DA25AB528EE677637229C60 +:10A600003BCAEB18C6B9243C3BCAF9B99AB5E50B6D +:10A61000021765D061C786C71DF74AEC70DD4B2075 +:10A62000CBAAA0E2C85BDAB490C70D4AE32C89F943 +:10A63000023317F279E12F063F1E9AFA6D5E1F274B +:10A64000EE7DD93FA1631AC6DBD695F3ED3B69EFEA +:10A650006C70D93B32EE10A8E6F72B6F88C3520E10 +:10A66000ED3C53B93D9627FC04784F71A240ADD321 +:10A670002FD0845DE3DBEC7A2EEC208FCBDE91EDE6 +:10A68000B541FCD082993C2E7C7B5EBF7D330AEDC8 +:10A690009B4D3195F028053C5047752DEA56507F6B +:10A6A000977EA6D97CFE7747CE3F2E6DE7DC9FC70D +:10A6B000EFE1E91271CD68CA9C8121A270033F7F4E +:10A6C0002BE97B5F1EA77797C887AFEF8DCDC83F7B +:10A6D0005A3B11876DE8EB9E11CAD16E5990DBD3BE +:10A6E0005D1E7E9EB46B8C37B9BA12EFE5E57A3207 +:10A6F000F12B8FBC5F86F8BA6391B915E5E7C1030A +:10A70000FC1EF5D2B845FB5B0F5A71B52A38B0DE96 +:10A71000BC22C8FD84B18D519BEF6FCAFE52F7F287 +:10A72000FB6A52910B801E3F0806A9DD8301D00F02 +:10A7300044A77859667CB43C0D2FE1FFF08B0BF2F7 +:10A74000306F23526ED195F085E5CD0CCF83C8F1E3 +:10A750001E2C17E3E9D675C7217E8B52F9D766E028 +:10A760002FC77B38905B1F8D14FA48D2FB91B7B787 +:10A7700039C6F3353AC7F32D84F1106EA37BF5F19A +:10A78000F5038FF7C800E359123FC1B7C73E7D3DBF +:10A790000FE3F7911A180FE51FC70B668F57FAE9F9 +:10A7A000CD4A7EC6FCFC1731CE63928E7ABC6C4ECD +:10A7B000861E7A57C8C7DDB16DC64516E67B77F8A9 +:10A7C000518E772849632CAE631354BA27B56BF3C7 +:10A7D0008729B47FEFB6B97D53D0909886718CE30A +:10A7E000823C8E7FF7E6E9F49DA277AFC6F9A86DAB +:10A7F000C0BBB2409F603C012F1173DBD5C23E0449 +:10A80000F9DF8BF37EE46C467973910DCDBF1C8F1D +:10A810007A62954AF61C03F75E9F9C8ED76CF0888F +:10A82000FEC4BE9CB42F4A859D7E143B23CAE4BE61 +:10A830001BD5F93E9D8CE7B03A9B29A3D3FB1F3271 +:10A840006E29F73DE47E4798A5A665EECF8DC6F349 +:10A8500079A3314E915C8DC855DAD674CCB31CBB4C +:10A86000213E9DEE115DC928BEA099CD7C1F65F4E7 +:10A870009D05FD71CE53185B833209F4DB9727CF1A +:10A8800021C6CBD04F7BCE55FF439ECCF7E4753D20 +:10A89000CED7217D21D7732C9195273C3EC8F3C09C +:10A8A000085F19CFBF52F4B33E76B31FF57A4FC09D +:10A8B000AE0D42FD3454AC25E45F4CC0EF4A673323 +:10A8C0001BCF8F696DDC0FD5824CFD67F81B81763D +:10A8D000A4F757F17EDC7C1B88BF928F92AF5F9408 +:10A8E0009FE8626B1AED230A7B3271543BB25C3FE6 +:10A8F000AC60096E04F1B59AC588AF6586A9223FA0 +:10A90000AB665AABFDC857F061D0EFAB08F2FD085B +:10A910001FEBF3E33EF3407CD56B049F623C7EC4A7 +:10A92000DAB2EE9DBB30179FD2EBB9DAA35883AFF2 +:10A93000E31B6A6EF6A35D00EB38D905892695CE38 +:10A94000BD0E613D27FFAAAAEB11F2AFBA0AC47D82 +:10A9500002A0FFF1BEFFFBF32CC263CAE1DE19E1E6 +:10A960008C75A3CB938A446BB17D6A1EFA3D893BFB +:10A97000B99EB83BE6D61349E322280FE515907C33 +:10A980006DA89EF5F4789CD77A82FC0739FE27D70C +:10A990000DEBA07CFC608AF212BBCE5C41F729492A +:10A9A000BD92D5CE15E77C7FCF0B1598EFF5CAA2E7 +:10A9B0008FF2319FE70FFAE17C84EFED6BFE231FEE +:10A9C000F3105FB946A37B132F1471BAEFB4FC6385 +:10A9D00032C6AD6E1576CBE1A07D3DCE03B68AE7DB +:10A9E000A15C9AD43078CDE50DFE5BB2330F954271 +:10A9F0007F7D594F91A32EE158E6E3FB794BEEDDC5 +:10AA0000EB1D0174B8746701C5AFDE16F767BFBDF3 +:10AA1000AB622BC6E79F15EBC9E160EC4E1C17E15A +:10AA200041BEFCE1519FC877ECF5F0F5D19E8DFB5E +:10AA30002B71212F6EB89E7C2C8FFA5D74AB4676FD +:10AA4000D57CA0ED2A50C9F1A625140772C3BDE834 +:10AA5000959E27CB00AE45EB14BA0F0FDB5F037E4C +:10AA6000637CD55A8A8BBAF19A9F70E6CB5CD4731B +:10AA7000B997845CAB9D351CE3A79D0AE901779EDD +:10AA8000EF258FF2FCC285CCBA6E4A658EBCDFA67C +:10AA9000AF511EE025AEB86B56FE5F50C44F27B3D2 +:10AAA0001379BCA8F6C65A6BF0FDB5B7C1BEC76432 +:10AAB000D7775A0C2ADF6D31A9BC3E68F1FCC0DDA6 +:10AAC0007B9F24DDA1F74E46797BF0C01B79E7C35D +:10AAD000AB15116ED79FBAF5A3D687E1F544160BD7 +:10AAE000A7486FD9A45F2E107C388D195610E0BC92 +:10AAF00041D8EF133F857A067E1F762BE4DFAD80C9 +:10AB0000998A797C17203D8EC7FEB93D7F01FEFEF4 +:10AB1000CA51F0EE0BBAF3E6BE1CDE037DB74CE380 +:10AB2000E71DDCCFE5BCB85EC869EB9EDB67A1DC46 +:10AB30001CBA49A17BB217EF7C8DF25B17EDF69939 +:10AB40001A0F421E44BD26E594B1662FCE6FB73C66 +:10AB50004AB9E897BB47AF27BA487980791411F909 +:10AB60005B11B52187FC0D924F7EC8D33712E7BD2C +:10AB70005BAE0E0DE0B77C1CE479770B2D7B16C61F +:10AB80006B16B118E58901BF7FFBBF818F94A33A93 +:10AB90001E03C3BC4F7B26CCDF073FE37ED19A5D0B +:10ABA000A36F417B7AC2333AE56AD73D346222DA39 +:10ABB0007D754F046971AD7BBAED1B38DF4FDB2A21 +:10ABC000EE8B12EBE9A9F84F2B9B5EA73E35453B78 +:10ABD00079087473D3EBD4CF74575E5DF793983FC5 +:10ABE0005BB75D213BADEE59F7FB04D77F3FBFEF6D +:10ABF00061D4C38B7F777308F3B7FFA4770F437ECD +:10AC0000DCB7BD3D84F9946FEB8910D2F74F49AEA4 +:10AC10008FDDFC589EAFC87C35477E2CEB4C10DE98 +:10AC20007FB9CB63629EC9F29D3E9E6FB97F31F1C1 +:10AC300001EA3CCF7257EEFCD8C577DF3ACCE2E7A9 +:10AC4000D39C79B2DB3DB41F7A19F86738CC4079D0 +:10AC500082FD79873D47CFA35C2EFCC8E5FBBF9AF8 +:10AC600033CF59E6A3BAE7FB85F9CE3C02A00FF932 +:10AC70008D09808BF6C0447E64EB3DBE049EB3FF1D +:10AC8000D3CBC3B7E27EF8BBDB9F09E139F8FE7D89 +:10AC90004C91F7F76ECFE8A3DE2B7C48E809591FEB +:10ACA000287FF63E1DEFF8656CE94B3EB277963E85 +:10ACB000A7E6E1EF4FB1AD1E82EBE1171F1F761C37 +:10ACC000D4973CE0299ECDD1A13C59C9B7FE3C6642 +:10ACD000C1A7C53F7B82F269FBF39905BF963CB0E3 +:10ACE000D78BF2E2A6EB8C9EBD5E7E6F868B6F3DAE +:10ACF000AFCD427FA7F59E235ED4437F7A4C61C3DC +:10AD00002BB3BF6FBAEB199EB72EF836709E7AEA56 +:10AD10001B8FD4533B13FDB4C1F8782ACAD22492B6 +:10AD2000F79F3E02E337BDECA37CF9A69F5E41721C +:10AD3000FF96DE4C72BFF4CEF661687F347912C3A1 +:10AD40004C2AF9F3A62D57923C5EF2DC95C3C4BDA4 +:10AD5000AAA55C3F244A11BF459BCF26FC2E6671F5 +:10AD600092C7A63B35BAFFE4139D353E9083AF6F83 +:10AD7000E6737DFDD6361F5DDAFC16C66FD18EFBFD +:10AD80008D267EDFC9997F432B13D43F11F1B14744 +:10AD9000F355990765A03E592E5A2DDFBE96CE2356 +:10ADA000BE53C1CFF5031D12826E0AAE7BDA73A7C4 +:10ADB0000FE7FC6116DAF1F41DA8D419F81CDBF7D3 +:10ADC0007A6CFFF18EEF44DE301F7FA5181FE00E76 +:10ADD000E0BEC15BC3F87D6BCC955F7DD9AE4B67A0 +:10ADE000633E754988E3D93FFFB78B7C6531FF3FF0 +:10ADF0003EC8F50AE65F13DF7A3DA9E18EBC6B9F82 +:10AE000023BE9ECE27F68879ED7C0F70515E743F8D +:10AE10003D1F53C82E5EBE8BEBFD8BD7FB1CF1C1D3 +:10AE2000E5BBBE22F2E35D7945AE3CE94B841E7082 +:10AE3000F3D1AD175ECB77E5496F2E19527C7BA914 +:10AE4000274979EE306FC9CE5B7A9F87F28AFF7C03 +:10AE5000EFBEE7CF0739FF738F9CAF4E3DDB3F5FFF +:10AE600081DE48BFA60727B15CF3F5CF781F70AE2F +:10AE7000F90ACF73CED720237DF63FA66705FDD311 +:10AE8000F476CECF4B06D0B37921F7FD85B5613C82 +:10AE9000C7F6CE8F978CA2FC36177DA55E75EBCBDF +:10AEA000BBF2AD01CE75703B48D253D251CAE9E234 +:10AEB0009F2CA371FAE557CAA95CBF06381FE0A60C +:10AEC000A7FBFDBFA33E2AC9CEB3484C6735F8FBAC +:10AED0002AAD5E56837196841A88A2FC0E964FF6B0 +:10AEE0008350A5D007D114CAFDD5FB18DD2383F606 +:10AEF0000BEE1F1D7992D1EFC4798A2D2D739D8998 +:10AF0000CE509B73DD0F3535C4F5CBEE1087F3E2E1 +:10AF100010A75F9B161379A43DB48F447B26086766 +:10AF20004188E69947F8EBF2BC5A344FFDC802DB82 +:10AF300069CE0DD567E0F9DDE844F58AD1509F1F51 +:10AF40008A9EA103DFA2A7A83FAB82FA45A109BC54 +:10AF50007E823A11EFDDD8C9EACE9889BFA7A02A30 +:10AF6000AC0EFAD7CBF83D77D7C1BC3640DEDB421A +:10AF7000CC2E00B9CBF3B184BF2E0D5F9E17EA85AE +:10AF800084B785718FD60283F243DB3CFCBBA1F60C +:10AF900027FBA9D3AD19889FAF1A70AC4C8F53A76C +:10AFA00073BC6B83FCF795DA0AF8786D305E2BB5CD +:10AFB00093741B5A29F387B53CCE0F2DAC363F0056 +:10AFC000E532C187CB42A6D4F714CF787FCFF06D9E +:10AFD0003CFE7A7824FD7E84F6E1ABDF87E787BF0D +:10AFE0009D47FB632F07B89CBC1CE0F2716EB8CB89 +:10AFF000730C3CAF33465E81C2F6B272EF95587E59 +:10B00000231CFF6E88EC3796C27ECFBF50E3FD064F +:10B010009BF3311F5CB1B9FDAC00132F00BAB4DA59 +:10B02000CCF28EC6A9E3CCCBD5B4BAC3291A3FDF84 +:10B03000313E2B87F509E6D7B927F1F9053E32AD48 +:10B04000572F34F0BA846F5EB2AAB5CF2278AE45DE +:10B050007826F89215E8C79DEF4B8EE1F2E6CC5BBF +:10B060003D84FD9F80257C7F3CD78B785F70BD98A9 +:10B07000C7F5BB9738F25597BFC7ED75D6CBED60D6 +:10B08000991F8860217E4CFB6C18ED073DAB929DAB +:10B090005EB7DF9977718AC8433AE9591EBF3BC949 +:10B0A000A5BF4ED9FD35D26BA70CE21FDF1512EB01 +:10B0B00043192BFB22F9A7BD8A7D2FE713FF3D9B88 +:10B0C000D93AB3337F3F728508507DF86C5518E349 +:10B0D000CC63C4BA2BF3BBBD9646792EBB5C7A51C8 +:10B0E000CAF37107CD8B10FEE30EB2EF707A8A7E41 +:10B0F0004D4ECFFEBCCEB7795EE784BE9ADBE9F752 +:10B10000EE0E7858D24AE7337E7890E7334E3EC051 +:10B11000CF373E8CFE38C6DD22CE73337E2BC0ACDB +:10B120004C3D5F53E8A8B7F9397F655EE444FE8A79 +:10B13000EE47C9EC67A2C97F2734DC50E5F89E3D95 +:10B14000EBCC67AC63FC5EAFE8EFC5EF231C74F299 +:10B150005713FAF4646147465309D2930DBF77B68B +:10B160003B39D848FB4B270FB2BFF4BA9BCFD9F479 +:10B1700074E4874E60C7DF8EBFC39445CFB79DF49C +:10B1800094F20074A5DF7D2DB09D742D6A74D2B544 +:10B1900024E6A4EBF0794EFA95C69D741BD1748C0D +:10B1A000E37D45739DA33E6AD5C98EF695B0606573 +:10B1B000D647777ED5D17E4CF71C477DDC86F31DC4 +:10B1C000EDC7271738DE1FBB73F190E4E0B89E157A +:10B1D0008E76520E4ED8FD3D477F520EE4797CFCB0 +:10B1E0002943A47B54E4D30E260727162750F2FFE9 +:10B1F0006939181DFEE7E6FBC9625DC0BC68B4EFA3 +:10B20000E4FAFFBE27D889F66D01C808EAE381ECAD +:10B210008182479FA278BE3BBFE1886AD1BEC77AD0 +:10B220002D46E73646000B5590A336F1BBA637A84E +:10B23000EA7732F7B7A686B97F3F35CCF7B7EE800D +:10B24000F512D7C711792C41EBA6CA1CBF231AC22D +:10B250009C0ECA1FDABA167FCFB3ADA0AFC62A8044 +:10B26000F98FF5A9D9EB12AC4713D1FF00BDFF95BB +:10B2700030E07BBE0A7A1F863CD74C9CAE008E2302 +:10B280000C96C0F326B03ED279EE0256ACACA8457F +:10B2900097A97FFDB13E07A1D8B7F8583AD7F36117 +:10B2A000D378BA97F143C0A197EF1FF2DF5BB6A244 +:10B2B0009487709EF05F3E5C389ADABD7421CC3E74 +:10B2C00090AF5F2306607FBCE4E574182C2ED7B4E2 +:10B2D000F5967CCCCF79A986E739C8E74B04BD96B3 +:10B2E00084797EC3F28579097E8ED443FBDFE86FD3 +:10B2F0009D8C767992CF67AC631C6A5DFDCDCEFBE9 +:10B30000000E342730DEB9FCD13329EF4CFA09E7BF +:10B31000BEC0E37FE7FE9D39ECB6EF85F9EFB37C65 +:10B320004F8C7B0E14784FD439C08F022C9F9A32E9 +:10B330000BE7073C4F2950FFE60130D580EE67C68A +:10B340002B3D48C4FF60D1DF3E04A0B787F9F873F6 +:10B3500059CC83F03C7FE1B27C6CD7DF9FEC078057 +:10B36000437BE98582846718E8ADC353155AF761BA +:10B370003C039FC72E18D18EA15B39DEF32CFEDE75 +:10B380006F617ECC6151EA57F6CF70FF26432FAE36 +:10B39000B8342F5504FDAD78C947FB4FEFAF3EFCE5 +:10B3A000D3AB00AE3F2CFEEB4378FE80C5FB2A708A +:10B3B000FD3B6F83C6AC89784FB17D03CA0D6B1816 +:10B3C000DA39F3193FF6D37C5871135FC756DC3373 +:10B3D0008ECE87AFC8EF9797E199F272A990971533 +:10B3E000778DA6F3E4F27743DCFDB7B7F0FB2E5A76 +:10B3F000C5EF3BB717F37C619DC5B787D16E361794 +:10B40000D07DE6E5452C49FB9DE543CB7BC43995D2 +:10B4100040FB8971387E25E474DEA3451385FDD693 +:10B4200083F8BFFCD87D15A8CF7E39FEEE31E41736 +:10B43000D50F8D1E52AF3C20EC2926D6A9A8C01BE3 +:10B44000D629F243DE678128D26B207DF380B0C31A +:10B45000AED66CB2FF8FA831710E0DDC478DB4C330 +:10B4600033A7A03DBE57A57864089591D41B600B07 +:10B470008630695FFEFE30F84BC70ABDF2CBF0079D +:10B4800067B4F1788BD3BE13F12969CFC5E02FEAF9 +:10B49000F75384BD316E8333DE79524A25FFB4DF22 +:10B4A0008E73DB6F18371A82FDF64A58F8A35FD8FF +:10B4B0007E8BBF8572D053C3F5714F2AC0CF7DC03C +:10B4C000D2C5CFF93AED3A773FEF85B93DF711DABA +:10B4D000D4D0CF6E93AF0F79A01FF3F9F9BD845686 +:10B4E00047754A1105B3CF2EE1F54418CA338A785F +:10B4F0007BAF72A8C6007D7C24FC97B59DE5783FA4 +:10B5000005A733D65BF1DFD64492FB15524FEE3FD1 +:10B5100086DF732BEEC7A9177170377CF5301FF9E2 +:10B52000E2CCE7F37F03D130D915008000000000A2 +:10B530001F8B080000000000000B95590D7054D7B8 +:10B54000753EEF677FA49576DFEE820043E5D50F69 +:10B5500012423F595602846CC7CF4080CA322C1029 +:10B560003BF6C42D2B18031192D6C129752674BC45 +:10B570002B118782DB6AEAA45153B77D2276EAD881 +:10B5800052BA04C9C89E9566113248181C0963074F +:10B5900068CCC834435C47D2CA6A2D5C8FA7EA39AD +:10B5A000F7BEE7FD91685C63CDD57DEFDE73CFF923 +:10B5B000CE777EEED3412B00780062E73EB38F65F5 +:10B5C0000174B93CBFBAA70A606A588213F83C43B9 +:10B5D0001E333BF1F92CFD777F627CED19DC570CB3 +:10B5E000F0554504580860ED1554AD0C478F0AC25C +:10B5F00002DCA728AB2401D704C05686F389930543 +:10B60000BE63286FDC810F57E3FFD97EA782639367 +:10B61000D491AB14008C08AA5B4139A889ECCF0601 +:10B62000A893418DE0B99158BE63378EE5321C95E1 +:10B630005D2887F62F4CE8116CAF04700334B7BB5C +:10B64000D958D28BEFF1513026B171B2B7D5152848 +:10B650009BAB7F70D1D4CCBFA15EF0AF66EF4B380F +:10B6600094472BF741058EF8BB09CF79E5D35226D5 +:10B67000AF54C963E7E1F9323D07D0C41DB828686B +:10B680008127232877F25389AD33E496F73E2029AA +:10B690007680B258DB00100E518B278422325E0474 +:10B6A0008E4B3443035431D8BF1904C439EE04AF70 +:10B6B00080EFBB32A76E00E1DE67F19C1008BF3659 +:10B6C00070A1FC2E33ECF2E35802A0FE322BF1DC29 +:10B6D000382F23FA63007C6E2D0455A3F7721BDC10 +:10B6E00097E4AF714736C3BB4E01367665C6C42CAE +:10B6F000D4636A39C009A657424F60E71A7A966840 +:10B700002181CE9FBAF5BD054C2F85F850025C4FC4 +:10B7100088167B5EA2FD8ACAECC8503C5E5A9FAE7A +:10B7200057B002347000FC750BEEA921FC40856A0D +:10B730007C9E99985B57E039F9F8DB5DF8132A3D58 +:10B74000BA7159D21C9FD07A63FF6EA5E2E8917B53 +:10B7500001641942920FC08663B68BECF430FB642F +:10B7600094B7D0C771F0224E362B7FFFC57AE47BA9 +:10B7700016CDB3F83AAF23E4AA45FBBCE7456F2BDF +:10B780008A80CF6701D6209F80C7C57784D8ADFB5C +:10B79000D1C59FC4062A3CA853E3F93772CD381EA1 +:10B7A00010A37F578EEFCF59028DC4E3D3BF11C1D1 +:10B7B0008E387CF4F30CAD0E7159F17A478E9A35C0 +:10B7C00057DE0FAEB6FCED52F2FBEB82071187B8E5 +:10B7D000692A97F46C8EFECEACE2B8B9F703F31881 +:10B7E0008E1667E010C543756F7803E1B80EDA5A1C +:10B7F000151C4B4508B0B8588CF250CEF495A213E6 +:10B80000618AB3A9C0DDC44B4DE1F165F821AAC737 +:10B8100069FF335636A6C7813186606029A0CC1EE9 +:10B8200013E75B0B0C2E25DC7BCE3C56E041B97157 +:10B830004DDE42FC2A7DCFBA4B4DE2DF4F28FE574A +:10B84000D3C8CF5DE90CFC15E171E0CC4DB31DED23 +:10B850000BFE36920B228BEFBF9937BE658F239973 +:10B86000CF73E23B2DBE82F2949970087E082CDFE4 +:10B87000A0FF8F38D09FAFBED7BBB23E8BE90F0E73 +:10B88000C4A5E79A45A3B8C3F9A314A7E177672A2B +:10B8900028BFCDF41DB89BF00C2B26760EC6C3FA3C +:10B8A0004C8ABB93C0F29D11B76514B7A84A19C55D +:10B8B0004315CD4B98BC2EF3482D8BD31E11284E2B +:10B8C000311E587C603C289447CA148C0FB6BF9830 +:10B8D000C57DD788A8D23C14CBD496B3F9FA9D3451 +:10B8E000EF1AD9A8B0B817117A1FC56F6C80C98933 +:10B8F000002C27D70AE08F9425C7B19DE16BE4CFD8 +:10B9000059078F679B24A5C4895D128DB8E2F35651 +:10B9100081BD373B771DFDE1328AB64A91F87850F8 +:10B92000E17C8400CE73009EB2B23D70F0CD9A6D82 +:10B930009D68DFC14B127BBF467D7203C614546FF6 +:10B94000693B4B638D3FB2C144FAB54BE041BFAC9C +:10B95000C651C53C7BEFA323674D3C9C4BC9BFDD63 +:10B96000037F5C2A13CFAF59200355E8FE6CEAC66B +:10B970002B68DFA17EC415E6F20FD5657CBB133FB3 +:10B98000E3C298BD00757EBFAD798B9C81F1B28E0C +:10B99000DB79BDADF168A8106097537D9F78F75DA6 +:10B9A00057808DF1D1CF722897F75CB9690FA0BF8E +:10B9B000BBCD6AA9C246D81F99A79EBD457CC07D54 +:10B9C0005594D7F5F892A96EB5BB3B28BE26BA258B +:10B9D0003507319FD5F90E21756431E2F604870DE4 +:10B9E000F6774B1F58B07EEC55010E231F9F186C45 +:10B9F000A8A37AB2F787A69B632BF89A595A873F78 +:10BA00004FA3BF8B080494DF1C11348DE2573A2CEE +:10BA1000D2FC93A8006E81D6C937C7749FCC224F41 +:10BA20001AE1B98F259417EC35259EE34FE360EDBD +:10BA3000EFE89C465ABF22B1FEE9DF8C3A0793CE6D +:10BA40009D55B217DCB2E12F0550302B315E786383 +:10BA5000C4E37725EF09AA79320C5950AF57458EC8 +:10BA60000FE6491657B79F19710E22342FB9D469C2 +:10BA700007DA3D4DBCA3B859CFF3CF5497A0B138E6 +:10BA80007819F33ACE6B3EF474401EC3E7CAE23530 +:10BA9000DC5EE2518DCCD7D744F3581C55ABE08D1A +:10BAA000A1BD7BAF485E8D7021BCEC545EB97D5862 +:10BAB0006E61369FE4B549844BC30B880BEE3BF0B7 +:10BAC00072AAFD411D97C6F6D1734B70DE14497BF7 +:10BAD000AFE3134CC3E797F4CBBAB938153A112743 +:10BAE0002CFD900BB98413488F3B883F3084602C29 +:10BAF00099CB1B031F0A37C2E5F7946F70FD655D94 +:10BB00003EFE97558F3CF9771D07D5C9F9D3AC7226 +:10BB1000FF376A92A6A13E7B74BEC0739C2F56FC71 +:10BB200047F623C266667FB7003F11E6DAB7BFD398 +:10BB3000546F469F34E838003C69A6F8DBFF422A80 +:10BB4000EF1A741C1AD270680E08297AA08659F56B +:10BB5000E8B73D3AAFEFAC57E411F26743A7098E5F +:10BB600031FE7ECEF4FCA49BFB295D4F433F43DFB7 +:10BB7000FFAF9EE97E7ACCF0D34A5899E2A72DEE2A +:10BB80002FE527ACF82CEF1DD4FBDFE9C1950E287B +:10BB90004BF0227DFFA676DE4F6E6EE7FD65F7C89F +:10BBA000C051EA937D7D925287FBE323EB6DE594D0 +:10BBB000EF2ECA5E12118F561E0FA17DA7860A773F +:10BBC0007A50AE6F5464F15179C9A765A03DBE4B60 +:10BBD0003E5B41362385DB5FCEF6B1FA1ABF58F8DB +:10BBE0004E19C919DA5845B0862FFA6CD40F9C4209 +:10BBF000CB8857C2A5FF7A9BCEAD1C96D758F0FDD7 +:10BC0000B38B2516579BFFBEFE671694FB6DA7C42A +:10BC1000F8756EE4E0D7C91F4D1745859E4F5E1439 +:10BC2000D9BAC67F943411E79B4F9A58FC0531FE70 +:10BC300005A6AF899D1FEC5BEEDE9395E0C16E9D7E +:10BC4000B73EA7E7F93AEAFB96D858BFBCF98F4C44 +:10BC5000AC2E8EDF65FB29F53B456AC72605F51C32 +:10BC60007FE32996C7E25D022C46C1E7169FFD459A +:10BC700008ED1B7F6DD44CCDF586EE5133D5E1DD5B +:10BC800046BC1FE53C3178B52F26D69BBF82F9769E +:10BC9000241362280FE43633F9A569D4988F99A943 +:10BCA0007EFBF53EA9F9C50FD8BC81FA7EE2E38B95 +:10BCB00082E6C15FCFF69D667C6CEE1460511EBDBE +:10BCC000EFD844EB0E40E459AA03E979E45B3A3F2C +:10BCD000F7B5A73DD7F9F8AD3FC0C7579D7A7E2D80 +:10BCE0008112E2E3CC037E470CD7CD8C66B2FBCF4A +:10BCF000CCB0C478F17FF092D5BF8BD4AFA163A74D +:10BD000063A24A3818EB262F4E9BA99FDC14FD989E +:10BD1000E157173DB391707908028D64E743519B59 +:10BD20001243BBEBC6785EA98D5A585D790822474D +:10BD3000C8DE78BF853D0FBD21B03EC4C84BFB7443 +:10BD4000FFEED3FDB10F13AF1B535DE310AF67F0F0 +:10BD500042AA7F1E5C918A4F2DF0FC511BE1F92312 +:10BD60006E8AC8E48778B9006D945F0857941B5FAA +:10BD70006263FE0975F1F31B3B53E53413CE765A2B +:10BD80009F5AF7FA9C0B59BC4ECBBC5E4C5F91AAF4 +:10BD9000429E3BF709E97EB961E409DD2F7553C086 +:10BDA000EA5E2DD51D9433146B2983FC044EE97E85 +:10BDB00019F21438E6BB3F1AE3DB7A7F6DCCB7612A +:10BDC000E050DF1651B81F8647167650BD6B5827D6 +:10BDD00085A87FD8ECE2F7E5C6FFD9B9CD87D08D2D +:10BDE0008B03873AF1FDEFEB2345E43FBC4FCC904A +:10BDF000C9E797ED796E15EEFFA8CBE4A5FC026AC2 +:10BE00004711E5CB1F2C7EBECE4771DB69F2D2FD18 +:10BE100061B25A0A513E0D623F0DECB945A37E2531 +:10BE2000D8FB9FFC3E417CC1D11F15BE467CC1FEA4 +:10BE30005C74617ED88E257F01E2B0BD17FB0014D3 +:10BE4000BF7DE3C766CA9FD8A7CBF43EBD4F1F2E68 +:10BE50002C60F7F061D9B3C89575E73EBDF953DEA4 +:10BE6000171ACF9B315E09D7E6A8C0EEA789BE702E +:10BE700091407D61BCEFF4A08BE50BE72A0A9F2A75 +:10BE800017AF8FDD0319BCBFE811B47CE2AB70843F +:10BE9000C547B389FBAF19F316F1005E4727ADC55F +:10BEA0003C79F995232467F215C16B61E1A45EA189 +:10BEB0003E772FA7024CEE8EDCA4FE7AA6CBCAFA00 +:10BEC000CF7DE89FA791E77BF5FA46F3C3D8FF84BF +:10BED000A185DD835AE0081BF7E2CF577D73F3C2DB +:10BEE000646FAB997861F42BEC39F2A849E77B7A5F +:10BEF0007E69D2F9DD94C6EF74BE6E76A5F2357C0C +:10BF000039F338FB4E302C2916EAA307FEFB9FEECF +:10BF1000225CB0AF66B8E87D09E2C5FC1F1FCDD238 +:10BF200008D78F745E8ED3BD0F0109574B0C277154 +:10BF30001D1F4BFB4FE793BFE37DB7730398975FDC +:10BF4000ED3FBD92F8820631FC0FBC8CEB92F46A97 +:10BF50008AD828097C3147BD78FD784F6278A35E86 +:10BF600045E60509BD7AE431BB779E78128401E687 +:10BF70004751184CE9F783AF4B7E2D29CED09E5DFB +:10BF800094EF1ED3E305E4A91CAA937FE2F230FDEF +:10BF9000C251EE77B18F8F78FE23FCFB89899D3FDC +:10BFA000E7FDFA5023BD9FC9B301C5237C1AAAA39C +:10BFB000F9A17C098EE1FCD0E58662483A1F047E37 +:10BFC0001F0E9AA672D87D735464FA0547A7730AA8 +:10BFD000B328EF756CA47AF7A09E37CEE5DBF61395 +:10BFE000BF4374EE22BC6F917DB8FFB77A3D0EAEB1 +:10BFF000E3FB5B747E755FAEB59593BFFA16AE92A8 +:10C0000028FFEA7DE1775DFEEFB81626EE2D77EA90 +:10C010003B93EE4D0C9F20DA497175EAAA45AB13AC +:10C02000E89E7BFBBD6F92BDC3D88FA0FC709F259F +:10C03000E4207F5DCFD0A81F8040E02B14DF87FA7B +:10C04000F715535D04A185F9E3B9DE27E2FF80FB14 +:10C050009AAED928B34353DFBB39ACFEF6AC7E9E13 +:10C06000FA19EC5F1EA47EE654D4C4FA19DFA52A9F +:10C07000C6B75317ABDC0574E102AF8DE4360DCBC8 +:10C080007EC2A369B8EAAD3AEA432EAD67FD8C7073 +:10C09000A9CA4DF9A892EEB7D4CF0C17B2B961CFA7 +:10C0A0007117C72B7E26837D6710209FF3050A53E7 +:10C0B000F8D2D8FD26ABFB8DBD929ACC1B63DF3F37 +:10C0C000BB6486CB4F892F38862382CAF870928F43 +:10C0D0008DBDA772C88E03A608F36FB8D3C4DF77EF +:10C0E000F111A08DE911C23691FCF9163D423FD401 +:10C0F0009AB565802A5ED0FBFC0BD70277533EBC15 +:10C10000F040A098C602776A5E0CC17AA637083B59 +:10C1100098DF27BA799F95EEC73C37BFD7DBDDB0F4 +:10C12000CB3FCF7BA79BF3A3D6CCBFFF507FB604FA +:10C13000F3DBDB7AFDDE8A798CBE3BBEAFC7CB3B3F +:10C14000E037E15D0F477EDF8CACE0797327E6CD09 +:10C1500030AEDFF99089F51750CDFB6F3FFEA3FCA1 +:10C1600055DC2EA7E4AD87BFB857784CE4D79D5B6C +:10C1700052F3DAC37A7FF4F01FE88F7E65E4B522CC +:10C1800028E2FD7A968DBE337E32645224D68F68C3 +:10C190008514DF77EA8FCE613EF3603E1BC27C469A +:10C1A00023D6A96BF3D5A9F4FD469D0A97FC9A7D89 +:10C1B000FFB970E6DA2F9C2C7F66403E11F273D4F3 +:10C1C00006716C52745DD3F6876107F35F0B7C3D9B +:10C1D000857F861F27A82F2F9BEBC78FF53AD64C5C +:10C1E000F737F4C35FAE68F3D37843E4F9CB6A3D25 +:10C1F0008C0D1FC663743B509C874B787F36F1359E +:10C2000041A33C8F7AE65A92F2FCC412DE671D7A93 +:10C210004460DF65CF94FC9AD5F5A6D88899F25092 +:10C220005177FDF7294E917057E85EB355AF7BDB30 +:10C23000ACBCCE6D35EE7186BD3A6FC2E00AF17CC2 +:10C24000BC808DB49EEAE056BDEE6DAB4EF5773105 +:10C250008C6C5A8A7A7C431558FFB45D35CDCB97E8 +:10C260001D8FAE7A93D2F697E5CB0AB7DFED5E4825 +:10C27000F7A8E947E8BB6AB3CE736FB1A7778CBE66 +:10C28000CFBEA5AC6A25BC6CF60A0579BBCCCD79CE +:10C29000FE73476029ED0BDA7235AAAF71EDE65EE9 +:10C2A000FADE98873D08BD37E2C9BB082ABF9D95D5 +:10C2B000EC27EE1F63DDBFB81436BF60D296513E47 +:10C2C0008032F7BCF7C0F4BC1B2E395F417EB870DA +:10C2D00066B8C29CE4AFF18381625637FACEE67845 +:10C2E000B292F924EA7C92D928083BF47A98CAAF32 +:10C2F00071E217F9F7E4D9ADDF245E74EF5C2078C2 +:10C3000092EA65CF3BF6E5497227A2125B8FF7A34D +:10C31000A287B393F5FC3ED37322C2E5A1D343ECCD +:10C320005EF4DAAA35C738FC2191E685BB7FC6EEFC +:10C33000F1D0CAD61B3CCD3085D4A5688FA5173B5C +:10C34000C6FC84DD11333039A17E8BF612EBFB8104 +:10C35000F56BF10F14D6EFA2878078F89ACEB37AF6 +:10C36000DD5F6BB1C9253EAE838844F1B0166478B9 +:10C370009CE63206328EF78226517E5D2BC7CE08B0 +:10C3800015EC7948461EDE0763ECF9FDF46908F701 +:10C390003D001E99E61B20D44A85EA9E48EC414A9E +:10C3A0002FB11CD9790BF94629663EBF257091E162 +:10C3B00096C13F5C8C4D0CFBEE6DE8BD46E07AAF5C +:10C3C00055C14AF9F3989ED7BD366EE7D404B0EF55 +:10C3D0005E865EF7C8B04542FDEF93C19A89EB4F88 +:10C3E0000E8A2C5EFBC73C1AE537AF5BDFF71FB840 +:10C3F0002F8FB524F0B82F61670DEEA3EF6D6B653D +:10C40000BC11337C62F3DAFB17EE3CFDFBC5D49F15 +:10C4100092BC0D510BEB5F446B48A27EB4D5ED612D +:10C42000EFE9EF22769453D326C055FA3B4701B784 +:10C43000CF905F8329C8E1A3F5DC2EFA647CD5C5D3 +:10C44000FF5E62677FE7DAA8103E422C479CB57D0D +:10C45000791CE339C0F4B6EF999AFC5E55E2EF46D9 +:10C46000DEE8F9AB02C6A7A0AAAC1E79AD5931EA45 +:10C4700093D1EBE3C9FDF38FDDBB7FE446DE091EFC +:10C4800085E10301F0507E5F042F28543F445A8712 +:10C49000585ECFB457D0DF95C85D1FA2BFBEA1F3D1 +:10C4A000EC7A26CF032F6B3B3CC4EB471758BD8477 +:10C4B000BFCF9A5B49FCDDEA08FC88F2C575A17321 +:10C4C0003913266BABFDD9095EDB40AD26BC6F6727 +:10C4D00070F9D82D30BE3E6DE5F33FCFB49FA0D1AB +:10C4E00086E9DA8AFA1DC738B0D277D20C7E2EC51B +:10C4F00028F139A47F1F0DDDC8D6E813FC6DD1CF1C +:10C500004889D1E511513E1CDEE0A1EFCBCF3AAD19 +:10C510005E8A3B0BD9674BD8679C6FD8997E3ED912 +:10C520007DAF61B79838DFB07FEEF921D34A8EC373 +:10C5300053B41E7118209C11873F638782B69C708C +:10C5400030EC47C7B0BF5B293AAE060E0AF98DEA58 +:10C55000888A7E33FC8EB81ECFE43818F6E335CDDA +:10C56000CAE478D07FE573ED33F8F3BF4CBF0CD04D +:10C57000801E0000000000001F8B0800000000006B +:10C58000000BDB24C0C0F0A31E815F71A1F2D1714A +:10C590002A272A7F39377EF584B00C03823D8D83AC +:10C5A00081A18619822DA0F8211303C319289ECFDB +:10C5B0000CC15B59107AC4D81918E480580D88F55D +:10C5C000D8F1DB25C58A29A6AFC0C0704319C19731 +:10C5D0009766604803E203D294F96B140F0D1C6D4B +:10C5E0008ACA9FA187CADF6300CC13486A66EA91B2 +:10C5F000667EBC19034302100300B26579B068037C +:10C6000000000000000000001F8B08000000000078 +:10C61000000BCD7D0D7C54D595F87D336FDEBC9934 +:10C62000CC4C5EC2040618E2CB0790DA80430C18AB +:10C630002DDA0704C415DD11A946D7EA242020F21B +:10C6400011D46AB4FACF837C020162891A91DA01AB +:10C65000B48D0ADBE8E2475BDC0EA21657B7BF7465 +:10C66000D75DB55537800205A5D1AAD8FEB5EE39FC +:10C67000E7DE97796F9800B6BBBFFF3FFEDACB7D50 +:10C68000F7EBDC73CE3DE7DC73CFBDE3555D2C7C6F +:10C6900016635FE1DFB719BBD1C5182B48A78CC95A +:10C6A0007ABF8A2933BF2A71E4D957EE33C97F3163 +:10C6B000DE993745BF7731369CB1EF8932F8333098 +:10C6C0005F2D32163C56CA620A4B95A5FBA9663C03 +:10C6D000AFBB24F695845F9DE5D638277CA1892CD5 +:10C6E00097B10695A777F843DB303DE12B4CB210AC +:10C6F000639294286593A1F674685209E9BBC164FA +:10C7000013F5577F4E7C0263F0EF9ADE401678D81F +:10C710006A86ED9A1B7B37BDE7497F97A3CCC0FAA9 +:10C720002CC0649CCF1A293D3D29CC981A8E9DBB04 +:10C73000167215002FC237C915AFE0F830583CC843 +:10C74000D8794CA77EF7E4CD8AD4023C1F57293113 +:10C750002F7CBA25EFC78C1533D636E6502451CE40 +:10C76000985F4E320DC6F1978AF1D83D8C4D61EC41 +:10C7700053C4A79E86671A73D13869B89D787A1D0D +:10C78000FF01E3B536AA9D32CC63C3187DE3548024 +:10C79000D3FC5777EC51AAD55FC3C238EE70D75A95 +:10C7A000984B53632A550AF5DA1B19D56FF2D4BF9B +:10C7B00089709AAF78628FC2B87BC68CCBED2F4F51 +:10C7C0008F37458CDF3AD25F932CC7FE6209ECEFBE +:10C7D0008ECADE6F627FEED09B861BF227F63FF992 +:10C7E0002D24DB14240AD46F2B32990BE1F80613A5 +:10C7F00070C03890F746B58AB53AE657D27C2DFE20 +:10C80000F144810ED6BCE07FD5236586E378A22C67 +:10C81000E92D82B42C693018DF5BCAE9AC8659D2A5 +:10C820002822BC07464E417289BFBE4BA85F8FC607 +:10C83000F118A84CCC6113814F420DE3715E161FB5 +:10C840006AF0DF57400FE54F6E1A870559F251988D +:10C850008F5A06E56A1A0E37EBF8C80DED3D76BC27 +:10C86000C3B8EEB72FF93D4ED59DF15DF9727E1C30 +:10C87000E16B8BDEE25F85BCE3BE2E3701C0295140 +:10C88000D77E2FD45712A1CEEA6169FC06DF9E96AF +:10C890007AD136DEDD2C183E94C39091CEA375205C +:10C8A000DA67F2AF959E6834522F7A68DE2EFB7AF3 +:10C8B0001CAA7E532363A9F1E97C7391110154B042 +:10C8C0000EF352433E1FF21E2322C560D8472E3678 +:10C8D0006643DE3DBE2F1203BCADCF834E2F60EC0E +:10C8E00001F3E69409F0B89B92F47D2D8E3DCAF6D3 +:10C8F0007D469CBEB7F860DD959F3CFE1B8031E411 +:10C90000D7B5527D0D73A7E506810DF452B597FF9B +:10C9100024019EDAA4D8E7FDC8972343C49750DECC +:10C920002EE7533A5BA9C0CAAA8C74F609B243AE8B +:10C9300059AEA0B45AC9C77925BBEB90FF4606880B +:10C94000FF9AF3945408FADB3056D9EA2E4AC3F31F +:10C950000A93885F9B3D5C4E6CF038E5C573A27C02 +:10C96000177000C98B209F17D33645AE9890A51F2E +:10C9700081A7DDACD6447CBC8293C2F500C5283FBC +:10C98000CCB14AF251E45BA333327782A3DCCCB35F +:10C99000976BF746E606510C42FF801F5F8498D1E3 +:10C9A0005E9FC3918272C4C348F837C877256FE190 +:10C9B000BE14AE2F8D39F0D3927B7D6F1D437995D8 +:10C9C0007805E761C92B2562B204AD6BA73C1F8ACD +:10C9D0007F32E5B85AEA5C2F2C622B2FC6FF8F6A94 +:10C9E000C4CF2C437F98D3683C8FB56ED9F71CE336 +:10C9F000375FC806DC40AFF563147D35E0CE53A940 +:10CA0000A4A489BC6C600A4A41F843B9106DEDC317 +:10CA1000EF4A2064E684B03FB15EED70B0D3AFA3BF +:10CA2000065C87B6FA1FE23AFC667A1D7ECA9692C9 +:10CA3000FC669DB3699D79059C4A9562E2780AEB94 +:10CA4000E8C374703D9E55F1793FD0F3D33216A3FD +:10CA50007A9AB2DF8DEB3FD24BF8B6C66DC3F5E8DC +:10CA600005F024E3CF481759E1F2989DAD10DF831C +:10CA7000DC74F0D9EB421E776351810D9FAC93714A +:10CA8000BAC622A8F7DA1B1BD8418023E7856B982A +:10CA90000E74F6E809C38071659449E7237F54F268 +:10CAA00014C42CCA2B79B8B60DE5B927AAD6EA88E2 +:10CAB000BFA876854EF85E45FD7ACACFBE11D72550 +:10CAC000E0FB239C87CC4C4302FCCB658CF02E6BA7 +:10CAD0007186F805FE1A2E211CAA93FF2C7E631A7C +:10CAE000206524E5F5F8842CFC65CD47D41B920F16 +:10CAF0004F9A7752C1FE6C79C6F366069E4C07DFEB +:10CB0000794A4DCE2FA52C4969A57CA8DFCE37A246 +:10CB10005D13FED3064FEB18B1FEF00F4095C3B185 +:10CB2000ED6B8B504FCE8ACC87EF1748DC3E60739D +:10CB30009C78B0DA039E2E900A106FD6FAE3F8695B +:10CB40001D392E97F2817CA24FE6BC5B417FCB63FF +:10CB50006D798F054792E6DD348A2587013DD81728 +:10CB6000E79691FC18A29F4C3C368D89BD9940797F +:10CB70005BA090BC744BCCA213BB12FA9987F34113 +:10CB8000FE0C737E5781DEB81E601EF388DE73B222 +:10CB9000D3BB2968CD279C158E669C8F270DFFE09F +:10CBA000772187876A9709FF50E5CD638C08DA1DE6 +:10CBB0006630735E9C6E1E8DD3AD5ECCCF1380F954 +:10CBC000219F87395D607EF5D9E71727FECA9C9FB4 +:10CBD000ACA9841F6B7C597D39250F4BC3798FA479 +:10CBE000F17106E188513F6E8D51BB5A29710FF2E8 +:10CBF000853BDC4AF2C41D30080E2502E5E7606A79 +:10CC0000D49880D7E63DE7B3726C1788B1A513506E +:10CC1000FE25D81CA8D7FCA59BF343B8D2C1AF0D05 +:10CC200092CB815F0B9EE5421E64E2ED0F43F0F76D +:10CC30001F9EBF98F8FBFED3F3F7FDD9F8FB0FCF8B +:10CC40008FE7F87AAE20EBFA5EAEEE75E08B09FB6B +:10CC5000C02FFA5F1F619D6EB0FFFD952ED30BF8BC +:10CC600019332FD55DAB33B68EF179BC5A90781459 +:10CC7000C7F5B8FA140FC0AB97F5CF02F18A760A60 +:10CC8000CD67A6FB03F500A41BAA8A73EB80BF5EE9 +:10CC900095A4ACFCB319E432F26577A34AE989772D +:10CCA00038DC43F1D9438DCCB12E1F5A2CCF467BB3 +:10CCB000F9A1A5DBEE9D05F86B09975690FAAB92AA +:10CCC000685FE143BC03DCCFE3F8367D0C787B9EE4 +:10CCD000E017FCB7F9A6AB48AE860DC3C0FDC2187D +:10CCE000B10FC96D60B194C0896CC38F8517C0C383 +:10CCF000CBD8CF32AD6F0F8EBB7C2A5BEDB2E1613A +:10CD000043958BE87ACB85E3B6E19AB0E0565D5C5B +:10CD1000BFB0F27CCE9F32E893E0D0EB6E0DE0A97D +:10CD20007C2CE63509F9384FC851D46BE5B8CF9063 +:10CD3000E2FF8970E4550F28388FE396DDC2226444 +:10CD4000A7370BB8D78CF3133CCD05DA5684E780B0 +:10CD5000E057969086E2AF03D9F82BAFD448216A0A +:10CD60000FCB8943B48EF45E0D5566404A18A8FB7C +:10CD70005AC47E10C0EFC37EB5C1FD1DE7735F448A +:10CD8000273DF899A08B166B5DE90279E02F970992 +:10CD9000AF5A7F2DED271461FFC377B2EBF30C93ED +:10CDA0004940CFB3226C15E2F99FE5C46728377C70 +:10CDB000936E4B219DFDCC48E13E66A3C7601AEA05 +:10CDC000E1A909231E40FA4E61B536BEF20AFC8382 +:10CDD0003C309281347DD7BA39BFACAFDCA62E0A85 +:10CDE000603D3FC157C82A0DEC6F0CB203AE53E44F +:10CDF0000B9DE8AFB80A90FFFB5EC63EC668FD0A11 +:10CE0000C2077C3F02F1B5D13310417EDA789352EC +:10CE100093E4F8789DEC7097C0850EFF4DC1717852 +:10CE2000B64FE2F6AF078D48102DA1004BEAB80FC0 +:10CE30005AC0F3B911D88FE1FE49E0CBC28F2AF076 +:10CE4000A5456326A23A4F4FA6C671FC8C42F87CDA +:10CE5000AC3E85F49603A6E906F81E92EBFFEB1EA6 +:10CE600098C743FBDC3153B7F1A1B06B2C3C45971D +:10CE7000C27ACBA2A7ADFAA7B71B0C19FBAB5673AE +:10CE800048DEEF15F203F8B51CE1AAD63E227E6516 +:10CE9000816167D49FBBC1ADBF87724BD6C83E547A +:10CEA000C43EBE2932371737A76E95992EC0931B03 +:10CEB000F0848870774A065F0731362F8876B4CBC6 +:10CEC00061AFCA61BF731FDAA0F0FE6BA0B5C3EFFC +:10CED00092A475E41E64E204E7031813FD1490A6FF +:10CEE0007C680F887D2AD280FB81BEEFD87FAF2976 +:10CEF000AD60D9EC639971FB1E97C3574527B71BEB +:10CF00001A2F19E3CD73C27DC6ED02B27EC86A53F3 +:10CF10007CAA76323B64DB97CC1FF47F71FAB4793C +:10CF2000D87312E8CFA668AB895FDB04BD5B3145DF +:10CF3000FEAA7639E48C5BECD727B974DE4F84DB2C +:10CF4000511E368BD6B3953F1D5F5876B1A5C76D80 +:10CF5000FABE13F94E15FA778214FFBE0BD6D79A94 +:10CF6000BCC5293B7E9A14B698F8449F47F5D68CE9 +:10CF70009DA5A3BCB0F86C4D063E2DBF566B6392C9 +:10CF80001D44B9AC733B5A89C4080E4F3841692619 +:10CF90005C16FF0E8E5B6AF16D27F9A97C9DF71A6E +:10CFA000C8BFF04DF87338DF2A205C913FBA20E506 +:10CFB000FC911476E210FCAB9F995D9FE57B2EEE11 +:10CFC0000717BFE6666887CC8FFCBEABF45CC6EA89 +:10CFD0001A46DE87E9A286495D32A4073A4A4276BC +:10CFE0003D7DA0FD46CA1FDA3296D2035B6EBD01BD +:10CFF000E5D5916EAF4EB6E0175F7DE506BAA35852 +:10D0000043BAEE79D04B7AE0D00F25F23B2D6A97E8 +:10D01000CC1CDCD7E5E98528AF0FAD5954C8B2D890 +:10D0200001756F83C2CAC5F2A24296651D2D6A6F53 +:10D030005B89FBD445498F61D8F7CB96FD9D573F5F +:10D040001E17714B63D966F4475A76EA4BC87F9333 +:10D0500069BFCBFD846A8CFC06D3DEBD24D20FF9F8 +:10D06000875C8917916F9AF75F1CC171F7A2DF1176 +:10D07000F5FA3BDE18DA3D7728F5E3351B3C77847B +:10D080009404F9F1025D0E3AFCD2E5C96A1F9A8F49 +:10D09000B232398CF2C51F5B05F8A80E703DF371F2 +:10D0A000BF44FD37093ECB9CAFA7E15CA2C7601E21 +:10D0B000EC54BD9CE414CDC35DC653ABFC77A8CF44 +:10D0C00060BC775D6E4A7FE64ABC8B7218E55A43B6 +:10D0D0003ECACDCA2E6E170634DA9733A73F61D504 +:10D0E000851CCE36C91F437F41DB04A1E7593DDFD4 +:10D0F00077CAF50CF74316BCD5D1FA9454999EC75C +:10D1000050FCB8AEF1F34D68D7813DD385E9BA60E4 +:10D110003F391B57CB31D2DFD0BF7A05F4BB5AE57C +:10D12000F9964695EAB5456F53EB60BEAB35FEBD4B +:10D130004DBF85E7752B2FCA0D910F4339F66BF262 +:10D14000FC9A468DF713BE8D7F679378BD88A8C77C +:10D150002A44DE2AAF9C1D87FEDA4AADF22ACAA312 +:10D160002308E584A51FDA4A79FD8EC64817DAB58B +:10D17000AB03B1D946B9607E7BBD32DE4FA8610AF0 +:10D18000E13D5DCFC8A8C7FBB3F095AE673AEBC5EC +:10D190006E19A21E939CF586EA8FB91CF52A393EBA +:10D1A00033EBB555DEE6F86EA5C04F656E1B7F7B91 +:10D1B000919FCE253D301BE5ABDB64EA5D15C026B3 +:10D1C000E5ACB918D6F16437DF173458FC1A65722C +:10D1D0001594BB4B997C517EBA1FB05954FA5EC668 +:10D1E00054C7772DD38F909D6FCD0739DFCAB8BE56 +:10D1F00024B43BC0BE3F03BE043941F46B6BEC2743 +:10D20000FEF430E77AB2D28BDDC29ECF181FE6CB98 +:10D21000EECAA7F971FFF7DB3EF27FBBC330CF7CCC +:10D220003EDF8B2A6CF389C03CF3F97C1DDFA3CE73 +:10D23000790EEA8F0CB970AB9BCB317764AE4A7232 +:10D2400020C0F59025C79AF79F1741B9BA3738859E +:10D25000FC1096FC1A6AFE6B1A8F7495E27A6CECDD +:10D26000A7D42FE44453AC42C5FE5A02A097707D68 +:10D27000CA06AD57B9B47E11CA7DF7DB3E322ED453 +:10D2800072612F978222D3D3F6B6AC75B24536FEC3 +:10D29000F15972F78B46E2E7B501BE547C0DC7BB6E +:10D2A0004A879D0C973FF201E9A53B422C918D1EC8 +:10D2B000356E45C8B7F89D6E489586F253CA35F36A +:10D2C0005EE08F4ABBFCE5F4FA18E8E5457A054CC8 +:10D2D0006F56BBADE1D826E4EF07B0AF02C4F3F957 +:10D2E000113CFF68DA7FC7226CDFF40EC7C399E2F6 +:10D2F000DBD3309AF42CD809940ED23F1C23FCBA0D +:10D3000035C06725C1161BAB73FB621197F7ECEEB6 +:10D310000A6C5FC8DB27A2F721DE86C24FCB207ED6 +:10D320008C2DEE2C7C3B88979DEC4D3FEAA5B7BD3C +:10D330001AAE9BBDEF9C47E3DFB29FAF1BC013E16A +:10D34000ED63C01BEA7154B90D36BE5DD738D08588 +:10D35000E7604D8DEA7DC83F4181AF9C403DCDC720 +:10D360005B09FA01D74580CF27A0F519687F7803BC +:10D37000EC3C8462B05C837286FCF839F5D7D2A8A5 +:10D38000F1FE2A0D86FB345F18FA2BB7D517F8F19A +:10D3900047FAE8DCCC1BCEE82FC2CB839509C29FAD +:10D3A0001C00F86CEB0BF4FD0BC4376118C7664723 +:10D3B000A89128E177287CBDB87F7C6E7F167C5BC6 +:10D3C000E946D473787ED8A8935CE9407D87F9223A +:10D3D000A306F54CABD06BEDA897E0FB5AA13FBE7E +:10D3E000C4C314A493CCF78B1D8CAF0F448C0AF9E3 +:10D3F000F5425E777A38DFCA9572721B9E93815E22 +:10D40000C6F38A0E997FEFD0F564137CEFF4897A26 +:10D41000A58CEA59FA4BF6F17EFDAC97DA59707794 +:10D42000682F90BCEFCC33481F76B07DEA2D982F43 +:10D4300012793945794D813CA4014F4AA3BC9FE73D +:10D4400033FBCFC44B20EF050DFBD7F2457B691FA3 +:10D450006F5FECECAF53E1E3AD97FBF8F87E43D898 +:10D4600007A7EE7FBDF66F1CFE7CD19EBDC9DB1702 +:10D470003BFB1B8A6EC118D0C9C607DE08D0C9A104 +:10D48000779224777DBAE6F89E531671B4DBFBCE13 +:10D49000F811F673DF17FB4B4EC92F87904F6CF2D4 +:10D4A000FD902F713DCB63ECAA66FFF4E6A990F7DF +:10D4B000240A25C86FFFC139AB678F01BBBDE1F7F7 +:10D4C0009B50CE2D14726451C31F69BD2DEC98AFD3 +:10D4D000E830CEC2A444F277A1901375268BA27EC9 +:10D4E0009A21733F87A587C136203D5C1776EAA74E +:10D4F0003A8DEBA7BA88533FD56DF11CEA77D8DB9C +:10D5000060C70771FC635D7639B6A8E35682631184 +:10D510008E538EE5C7BBF87A4A14D640FDC948C081 +:10D5200002B4EFC717A2BC3D20E90F37A0BFFC260D +:10D530003F9DD364E2C73A377908F7A193D3FA63E2 +:10D5400061C6F97E66BA50E80F262708CEAF3B5E6B +:10D55000A5CCC75B68E92D986FCD84F4F807C21C91 +:10D5600017E391F808970CF8C8720E3388BF44D4BB +:10D5700021EFBF2EDE268A7126CB5C0F9D697BAB27 +:10D58000FC168177DBB9CE37102F7F2D3FDD95E676 +:10D59000276EF72CF693DDF3B7F31597B35F97CEAD +:10D5A0000FB934213F615E136C74CBA097D5EEBBED +:10D5B000884FB44B65DDB15FB3E89489A7038BFD59 +:10D5C0002EF4971FD83793F6F39B15FD7A942B37DB +:10D5D00021FECE453C72BC1D023DD86C5BCF0B3B9F +:10D5E0006E7DB90AF8ADAE3D2F5FB28D5FD75ED4C8 +:10D5F0001A0198166EC9AB4093EEA6768EE745DD0C +:10D60000BEFB9A6DF205F05D8AF67452D0FF247C61 +:10D61000970A7C973BEDE9BA326E4FD7C532F09D41 +:10D62000CC8EEF3AC13730CFE61FD03C67E4FA0228 +:10D63000693CCD8F8C247B6373480FA1BC3E047A78 +:10D640000DE77940D8FD07BBCF0DD5E2FA92211F37 +:10D65000C0FC649E57457E0B9463FF01517FCBE471 +:10D66000506D16799C498FF9116EE70CDA2BD36354 +:10D670004792149FE48D3541559F9CF8850CF557D2 +:10D68000852E584CF134B0C0D19EDB1C9AFA6B5DEC +:10D69000C776D9F5B8D5BF562D1FB0E3C357067965 +:10D6A0001BFEBDBA332F335BFD221BBFE24853EC98 +:10D6B000E7F049C13F8C7D309C1F0F231F7BFAF39D +:10D6C000E6A33F77DAE555B5647F065CBAB76868CC +:10D6D000FE46461CD42F04BFDA29DBFC734D81E2E1 +:10D6E000539EA73437F6DF6FD72F32D8F118572261 +:10D6F0000B7ACB0D87EEC7F5FF22F4B39FF4F86ADF +:10D70000EBFC5B9CFB261DF470374CA4FD9E356F33 +:10D71000AF750ECEE2BAFD7CA3D597781355765E31 +:10D72000E8F6D5978CB49DAF46BB447DB041F03C44 +:10D730006742F5A36BB3CC9F4E34D0FF955A457E1C +:10D740007937E371503E8DFBE515C0691FED4BEA5B +:10D7500055B40B7DA5DC2FE7F6E8821E71F2AFFA17 +:10D7600084FC682B7D41C3757B628CB31D43A3D0C1 +:10D77000568FF5D7CF2E86717226C9E4F7655171A1 +:10D78000CE2EC74F797E2347F879AE1C69EFE32987 +:10D790003FCFB09DEF6A1E846B9E38B71AE41371B9 +:10D7A0009E1F3DC373FA33ACF783C624C5E3C11F84 +:10D7B000D9EF7780FD8EE7315D8D3D9BDE1B8B229F +:10D7C000B15E42FB4F9E1D4B216FDEE64A94227CE8 +:10D7D000C3902F2B310E4D22BF9E7479C378B45F56 +:10D7E000F247E893F0C875B5C252F108E473F42724 +:10D7F0003122E37A65E28C00D0331F370BA318ABDC +:10D800006899DA84F13AF925FA2417456C54CD78F1 +:10D810000DEB8FD63FC2F6AD6AE50C8C87CA1FCFE1 +:10D8200028BE0756C20C03EB7F93E76F6DE5ED2D25 +:10D830003B05F6A5F7E33C5A1B8F507ABE87EFC332 +:10D84000BF857406FEC8917BC9AF9A037CFC1EF0AD +:10D85000A5222728AF341CA73CEC030CBBBFE3D5A3 +:10D86000828481F35C16EF9F855DB803CC85EB67FE +:10D87000AD27D95D57993EDF9E090588878F4D7D7D +:10D880009BD776AEB7CC2339D6437B233FDFB4F2A8 +:10D89000AA7AF983386E722CEB453EF079593DF245 +:10D8A0007D73636C33E21D70C6E321853C98EBE128 +:10D8B000E773935CF1B908972AC753F7C07A68F702 +:10D8C00098B917E179FB2B6EB25364E4E7123E0777 +:10D8D0003CC7A2F33EE0AB451EB16FD04C6D3AC0E1 +:10D8E000DBA2E54F22BE35AB360FCA8D62EAAF1B15 +:10D8F000E995F0F44EF700FFB40739BDEA5AFE6926 +:10D9000035E27B914713EB3EAE223F7A806647F2C9 +:10D91000499EA5BC1427C6BA4B2D39E6C2380FD78D +:10D920007E4FE8F4E7B97238FEA0DD5E56CA3B6967 +:10D930001FE793B9FC6147FE9DD9E372EE15F868C5 +:10D940006EDCE78827F5845DFBF1DCD093786D13FE +:10D95000E2779C94B88BD613D815CC26773DE14E50 +:10D9600092033A9B979BC273EBB72FDE87FEE21FB1 +:10D97000370EDC4FF8EF9C43F680AED91620C62157 +:10D98000097A78B7F0731E2FC63F616ACA9FD9E53E +:10D990007F667CD31A4FF638C3928612E2030B7E61 +:10D9A0005747CC85EBC88A6BDA24E494555ED230B5 +:10D9B0008EEA6F6FD41FC4790FC22BF63DBA808FE9 +:10D9C000755E4AF26AB49057D6FC60DFBEBA03F8BF +:10D9D00065ABC665F2D6A5FC5C5A1F03025C4AAF74 +:10D9E00027AF06F3B3C55564CEEF9141FC6B0FE052 +:10D9F000F88F2262291F7900E1D281017E8EFCD04E +:10DA00003D87E018C4A398B7BCBE97EFFBCBF938AD +:10DA100099FDB32DA7C67F4B87C1F7F902CE33A579 +:10DA2000C3CF87A0036B80BF2962E920FEBE80D2EE +:10DA300029697D6CE1C1A28B95877D9C237E37335C +:10DA40006D6DD41F40BDFA4863D903B8FE5B2373E4 +:10DA500055115F92A4F854C1AF6DD1BA948AEB12FC +:10DA6000E41082E58DF2726F989F8B3DD2794B4A1C +:10DA7000453D18857280A7B49397978AF6A51D89AE +:10DA8000F622685FBA80C510E6911AE4D1FEBB9B0E +:10DA9000FB4B18BA64007F3F12C81C1D9937FB1B53 +:10DAA000986A89CE69E847BA8DFB41C676F17EC790 +:10DAB0008A71C776D4EFC37EC636F37EAD7E7E28EC +:10DAC000F0323ABA3A350DD222ADBE8FFA59E01C87 +:10DAD000EF21514FD50CFF37109E523E8E55FEA0C0 +:10DAE00080C787E5D8BEDA597EAF685FDCF909BB2D +:10DAF00004FE59ACC5FF8EEA953BC7D928EAE5601C +:10DB0000398E53E92CB7FC22255DBB0CECA704FD34 +:10DB10008F68D7A897D27AB2EAAD13F55A1BAB1E1D +:10DB20007C8FFC2F06ADB3AD8D314AAD75D72CE29D +:10DB30002A8A74EEC71C17D1A6A33F3C4FE17A276F +:10DB400033C5F58047981E0404E02B8EF2F586530A +:10DB5000BD1BBE7BDB853CC95C078CE70BE18FDB23 +:10DB6000759D12CA5D8BEF2C3FC28BFBCF73F021EA +:10DB7000BB1BF8CE1E177A5B9933BF34E6CC2FA8B7 +:10DB800072E6AB8D07EC7A814D9DED2CAF8C3BCBD3 +:10DB9000CB6B1CE5161C9D8D7A5735E071BDF01BD3 +:10DBA00077167446705FB0A6809F176D46BF32F936 +:10DBB000B7D87D986E117EC256E1DFEB16FE42901B +:10DBC0002B946E68ECDF540DDF47377CB30BE3BA60 +:10DBD000D7A1FF0FF5BDC0339BCA1C7613D853E7FE +:10DBE0002B209754236E70FEE57654A74FBB16E1A9 +:10DBF000C8AD4C4A2E1BDE2E55F839C4686B5F2821 +:10DC0000F74A76BD73A918C792932C0AD484F15AA7 +:10DC100004FF85AAE206FA1583A5DA245CA77FA78C +:10DC20008878231D2C0C5B1C64B0AA13C337403FBB +:10DC300019972A0588178007FA8BC232F242FBC86F +:10DC4000029DF67B4A84FB2973623CEF2F3370EF11 +:10DC50000CF39F48F31F9970FA2B03E59A23DF9981 +:10DC6000C7E729E3BE1CEA8F12FBFD97DCD3AF4563 +:10DC7000BCAC56F87EB829B87024CAA55FCBC6776D +:10DC8000F9774670EBE83704BE4BCE9E43FADC3B97 +:10DC900087C7DBB1EB4EC2F3426CE78DF2736EDDEA +:10DCA000E4714256FF4C4E8CC47DC21629B114E774 +:10DCB000CBCA22AADDDEB2CE2732E1F9B962ACB01E +:10DCC000C3B3533156DAE1064B6524D2B39099A61B +:10DCD0000B847721C207EB6895A2F3F20C38C13EA2 +:10DCE0003251EFE55F7A1DC961D99A4F4DF6B83AC6 +:10DCF0002B2E2CF3FC7E92CB58AD8878071CBF5D91 +:10DD00004AB4129FBDEDE5F19ABA88BF127195F938 +:10DD1000C3CCC8241B9F3D26F8A8DD8ABB6462FFE4 +:10DD200027E28EE80FED15CCC37ADAAEF038FE911B +:10DD30002A337372D1CE8681510EB6F1F8F5110BEC +:10DD400080B1318EA745D946F737960EA7FD23AC93 +:10DD5000D114C56937B7D279B8E50756D16F51925A +:10DD6000F6EF06581FA5213640A986915A90FEA1CC +:10DD7000B6FF7624D2456A621BCE77A99A380B4348 +:10DD8000C53E1C93F809C2DA837481EFFB64E3118A +:10DD90009CBFAD7E8FA3BE87D70773EE31AC97CB08 +:10DDA0008CC739FEB2C7ABDBE2463F0FD8F884CD53 +:10DDB00076C68D00DF3D8DFDA8C2EE1D8CFB38C3FD +:10DDC0003856F8D34EDD3FE7A393FA17EDEFCD09B0 +:10DDD0002968AF3D90137A19E971609597FC0AEFB5 +:10DDE000BA781C8935DE9E55DE4294CFFD6BC65352 +:10DDF000BCC2DE35DE10B66B6D2809D9FDBEFDED67 +:10DE000025B9D9E21906CB853DF19F0AB7BFDE11CE +:10DE10007C5E2B6B0AEED76BCDA207EC7674ADC996 +:10DE2000FD45C0C0B310BE775BA679ECFB686BFF05 +:10DE30009CD92EEDD7EA1F43FBCEC17B043C8EAFAD +:10DE4000AECA42987EF5EF00D537EDF3F07DB0B065 +:10DE50009B2C7C1E38583B07F9F026119FB680C5D5 +:10DE60004358F8217391BFE743F66FA1736D78FAB9 +:10DE700093C2E382616190FFC484FF509FDCD8E9C4 +:10DE800071F85F16753BF30BD9DCE1B87F5DD8E51F +:10DE90006149C0FF4DCCE68F81F9FE5EE1FB9645FE +:10DEA000ACBE15F77D2DC2CF50A7317918E8DF65DC +:10DEB000CFFE700AC5F978395E8FC27E4DF7A6E1B4 +:10DEC0005A12482AA8DF0FEE3AF7AA6F316C9F6CFE +:10DED0001D85FBC03C96D53F3CBFDD09DFE9E0CFA7 +:10DEE00084D7F2AF0C0587DCC3E99A396EC82B39A9 +:10DEF000E2B04E779F6F0A5E969B3CF47DBED3B531 +:10DF0000BFE06F6C7F915717FEBABFAEFDF4D38CA4 +:10DF1000BF26DC19C7753BB88E55C3E058E6F27CC6 +:10DF20004DE434E55128779FA2BCF4D4ED31DE09ED +:10DF3000EF0BD147DA5CA446235C7B1BF93D94DDF3 +:10DF40009EF8DFA3DCDEFD1F6E86718ABBF3D88BE3 +:10DF50007855C494241DFD0B8676452EEA7FE37523 +:10DF600077D855241615D6FF68F623B88E2FF17A88 +:10DF7000C4B9429F1BFB353ED1AAD14FB2DB931AE5 +:10DF80009D077C32F5FFB004F2F9B44F52F3113F14 +:10DF9000170ED47890457EB563EF3F603F4B066621 +:10DFA000C9989F27FAF9F0F127A730E867F7CE2044 +:10DFB0004BE17A90930AEEB396EC7293BD7CF34FEB +:10DFC0008306F6B3E4A965DBE7C0F8D2B341826704 +:10DFD000EA538B7EEC25F89A080F4B9EB93277A353 +:10DFE00098970AA8D9BD4AF8F5CCD468BCDFB0CC64 +:10DFF000CB6E407BC7C283C5BF3302D364BC97B529 +:10E00000A4278FE2B707F95E86FAE51845CA6E982D +:10E010009B65BF75A797EBD30F3E52E8DEA4D4B340 +:10E02000E77A9A5FEFD5345F8949F2FB30DE7231CF +:10E030004FA847F3301F939263A1FC83C7243EAFE0 +:10E04000DE095B7D4538FE56A58EE41E3FE7B1E054 +:10E050009DD133AD19D7FD0C2DAF18493EE3A73B39 +:10E06000497EAFE871A7701F0629EDC7AA036EE7C6 +:10E070007D28660424E083E5243221DDB58CE4E2CA +:10E08000F2DE75B46F5DF19C531E009E632980FF24 +:10E09000E637DCB13998FFA79F84F05ED1D1BE4747 +:10E0A00043480F18A7568175F0EDCF9D7E69ECFFB0 +:10E0B000F3FC93FB636C80EEEBACE85DC3C7DB75F0 +:10E0C000D9618C135E9121778EE23F469EBC6FDE54 +:10E0D000EACDBC9FF5DA14BA9FD5332CAB9E1DBC9C +:10E0E0009725E4D0CD3B3F7DD884F13F78EAD8C373 +:10E0F000789F62E95FFEF8F0F7719FF6CF3E0DE57D +:10E10000E78AC7DF7FF82EC0EB87CF795DC82FC7BE +:10E110009FFFC98F3743FEF85BE32B24C8FFC2CBB8 +:10E12000EDE8E34FFE69B80EFDDCF6FCCC11888704 +:10E13000DB9E9E31E254FAF238F057D26BD7774922 +:10E140006ED73E07FD8D80EC6E9166D067EFAEBD59 +:10E150008508DF876FF2388D153A8F6758DEBB8CE4 +:10E16000E2AB318FFBB6E53BDAE83ED3C9F8364780 +:10E17000BB227CBD63E8FDF25D57FEFD8595987A74 +:10E18000623AF6C706480F65B65BF13AD0F59CA136 +:10E19000E9F829FB4241BCAFD8B1868FDB0B740C88 +:10E1A0009D4CC70FF11FE79F4CC7DF9E44C7A53F9B +:10E1B000DA8C85BBB2C75D5B745CF6F4774E799FF1 +:10E1C000EF78C63A1E0ACF8BC539C04FBCC6512F57 +:10E1D000AED7A772CC08D1D99B9C0365C75BFE580C +:10E1E000C8803F8E7806AEC7F538F0BC57DB06DF37 +:10E1F0006B9F7F4341B976FCE9DF283A9D37B080B9 +:10E200000476DB7136F8D787763EDDAF413C3E12AF +:10E210004CA1FF62F9DD8B895ECB9357CCD643F4DA +:10E220009DFC1ACB937C1D2C4FEE992765A15FB105 +:10E230009ACFF568B240D8A1697A4A5548C7FDB36C +:10E2400090EF86A2A3356F0DE77D9E8D9EA687D6A3 +:10E25000ED50EBF3F856AF2C61B9B857B9E2EED9EF +:10E26000445F6B1FB12229BD918DDE83E7315FF3DF +:10E27000DE655475F2C3A03F4CCCFB74EBFAF4F3AB +:10E28000FA7A78CBC1C55F7032FE56B578493EBF89 +:10E290003BC94B7158FB3DFA0377C0FA1C78C5C3E4 +:10E2A000B64193EB2B0E7BF42CE72EFF95613FDDFF +:10E2B000D020B58E807637985CBF649E5B25EE7665 +:10E2C00033DD869FE5DE8177313E90FDD2C7285E43 +:10E2D000EF9F7DB4EF5AF1B08FE295F73E7DE2C734 +:10E2E000A8678EFFC8CBB8FEE3F1958B84DFF2F010 +:10E2F000D3271EFEBF507EF851EEECD9FBF41D87EC +:10E30000EE447E7F486268BAFCE1A9DC890CD6FB4A +:10E31000CD5017CFBD17FDF2FB9723BF621ECF690B +:10E3200017E524AE47FDBFE8A11112C6EBACF0F72C +:10E33000FF05E5D2B19FE72205D8874F9F9882F469 +:10E340003AF6CCB313511E825DA9DBFD4737D9DF06 +:10E3500097B0D9FD37F7AEEF43FEBF19CB797DE912 +:10E360002BB176D07EC7F1D15EB9F9B95CC337D194 +:10E37000518FFA59E11DB83D46FB5673948BF60256 +:10E38000A95148E79B7B9CE3D7AA5C2FAF500616A8 +:10E39000F2FA9DA3383FF451BBE5AAE428CF6C6F95 +:10E3A000D55FAA1667F423DAE3B949167EBF53F4A2 +:10E3B0007B73CF97E3B3DD2F3D791CFEFD7B1233DA +:10E3C000F1FC903DE9A37DF55225352EBF9CBEC7DB +:10E3D000D17EB1F2A3C4B898473BEB17627D2EF50E +:10E3E000F3FC33E21EC1D210E4115EB5FF1F916F42 +:10E3F000963DEBA378FA65BF043B0AF0BAEC995F4F +:10E40000517CFBB25FDE41745FE64D11BD079EF4A7 +:10E41000328CC7FAE0C957A8FC034FAA10C75DB6F3 +:10E42000DBB7DF7EDFD14A97F57AC5A57EE77C9A18 +:10E43000F05C8CFC674728758B733ED8F9C7707EFB +:10E44000E413C3FCDB63284E60287BFB176A91D87A +:10E450004F70BBDBB2AF5BF0FC051DADAAC934DB6E +:10E46000F9B5CC789CEA9F33F84EF12434DCA72A26 +:10E47000884FC08B47E67E6B4F243C09F9B9353293 +:10E4800097FC671DE5DA245C9F3F13FCE385FEC91A +:10E490007E7EB18BCE9BD5A8FCB1E33C7E412EE9BC +:10E4A00063566AFB5ECCDFA9C078C840397CB79F51 +:10E4B0002F85016E07BE9CE7FFBF18BC3767BA7196 +:10E4C0003D5F933E88A5FDED5BD67D20B99997E72A +:10E4D00059C5CDBC5CACFF15757C7DEFADCD253C41 +:10E4E0005A78B866775B1FDEEFBE66F7C8F948F763 +:10E4F0006B02E3DF47BCFE42C4ED99795EE2BF7375 +:10E5000076C7AFBC0CF2DF5D3C96E455796FFCD268 +:10E510000990BF6E7109F9037FA772BBE81FB6BAF5 +:10E520004C0FF44FB219EDDA3B25A2E70DE8F2816A +:10E5300086B54C57F8A63C49F5E7B3DE20CFF71671 +:10E54000609CBEADBD3B80ED574A74BE79ED7FBC8B +:10E550003E1371F8DBD70FB4607AC36B4CC981717D +:10E560006B77E9ADDC6D23FADB0DFDB9D2FD0DE271 +:10E570004F56091F69FCA884AFB706CF754C179595 +:10E58000A7F14B71E7167EAF09BE792DE2A5C90749 +:10E590007C780EE6C7BD88F9A1F49B054F267E3F27 +:10E5A000C122D067EFABC69F54287F4D35FEAC9299 +:10E5B0007F6AA0502E267FD55FF0FB7277E2ACE138 +:10E5C00025E4DF1A5F80FCD697DDBE4D8FC7D7D913 +:10E5D0005BCC7CBE9FE467079F8F780FC582FB2DC5 +:10E5E000C6E5FB1FB10AF4F75608E60170BD250722 +:10E5F000DA11CE6B59AF07F9FB3AD647E9F56C80D3 +:10E60000D204D3144CEBF0218812F29F500AF0860A +:10E610007D9311FE7EB2C33FABFDCDBB12D2F3B5ED +:10E6200033BB3F7752AAAA4C1D9EBE9753D7FF51CA +:10E6300023C25707EC83FA10C9C3ED0C5D417F502C +:10E64000DDDBBFFFD25ECE06CBF939CA603F2A7F41 +:10E65000A7C156CFA167A89E94AD1FC83BE259320F +:10E66000F31C8ECCEF752A7F97220B5CCC1C8E7C22 +:10E670006FFDF1F6EF49BD67E3FB2BD5BE64753B3B +:10E68000E89927F2FB46A9909FE57BA419E32A7736 +:10E69000C2F60FCFBF215F6D46316F5C8FFBD0F9A3 +:10E6A000322C155B1CD5653EAE6F2EF371BF3494D2 +:10E6B0009B587E898FFB9DF06D9428E4E7630AF2F6 +:10E6C000E8C08E8A5F9FAD0F4DA7BA8EAFBC7A1699 +:10E6D000FDC40CA687A7F0FB7AE4277E39667ADDB5 +:10E6E000E973FFAFEBDFCD67314AC32C4EA915EFBD +:10E6F00011619D948E62BD9446591FA5856C805210 +:10E700009D692EEECFE0EBAD98C5285FCAE294EE8E +:10E710002CE2F72C0E48FE18EAB1D3F9711A7DC528 +:10E72000821FEB7F3313E3B3FEDD3D89BF5BC4F58E +:10E730004C267EDCEAF6079BEDF7E71E5369DFBF48 +:10E7400073954EF4B1BE37FAB87C6CF471BFDECE6F +:10E7500055FCDD85038FA9B16DD0FBC12053F200BC +:10E760008E83EBDF28C63834ABDE13F95C7F7FBEC7 +:10E77000FFD9B3315E38EE334C1FF94353C4B7169B +:10E780001FCD5703FCFCA0C3F3815DEF8CF6C5DB06 +:10E79000B1FEBE7FF493DD7ACBBD12D9AD4C976844 +:10E7A0009D2D10F47B22BFF728C6B99B1BBC3ACA2B +:10E7B000EB051DDEFDF4EE4AE74CC3DE5FB79807BC +:10E7C000EB7C80CEC5179CE65EE70250C4C87F99FB +:10E7D000FD3036260FFDEDE45B71C803EEEFB5DECC +:10E7E000EFB2BEAB184F85F6410DF7736E6D518ACF +:10E7F000DB813E1B777A493F87C47EEEA73E71CE10 +:10E80000F92EBF679014FEEF63420F3CEEE3E7176B +:10E8100056BD9F8AF502FC9CE9CFFF29E24D356B7E +:10E8200018D727FCBC2EA974D6201E8F3DE6D557DD +:10E83000033F4DD871F5CD287F26F480DD04FCB36D +:10E84000494A46E8BD9F314A0CF138EDECAA8F30B9 +:10E850007F730FF7C74FE8F11A88D77FF5713B66D2 +:10E860005C72E57458D6AC6DE7D651E8CFD7314E1F +:10E870008CFBBB42FC71ABB8E3DD99A3D1E9A7F4F3 +:10E88000CB23B0A62DDE0E579EE99057F919F9510A +:10E8900019F58B1DE5A3317C0BE4C4E8004B052181 +:10E8A000DDB9DA9C46EF8A8122C0F534061527D0FF +:10E8B0007734C8197C7F098F61FC9046218F5B57A4 +:10E8C00028676E519E0BE97657EF6C24FA7E9C3FC9 +:10E8D000E05793075E692EC275DE2ED507ECF3EF85 +:10E8E00025FF9235FF25227E04FA61D8EFB19E7391 +:10E8F000293EAE4B3156123C821EE5D1CFAE473A8F +:10E900004CE8B9F8264CEFF3C4293EECE84E41AF91 +:10E910009EF137E2F7F23296F4509A2A467AF8F1ED +:10E92000FC9DE236931417BD36C8F96FC28E11A450 +:10E93000B7811E8578FEDAF63420E81C1CEF8E1AAB +:10E9400083E813203B694998BF1F700CCA7558C7EC +:10E950007F167CB564073F87037EFA33ADDBA5CE17 +:10E96000770D002DE628806B46FFCA5F8DA9C4FB9A +:10E97000818CFC3C20FFD442E4F71E37437EDF89C4 +:10E9800088C4F2A492A47940D6974FA919C4B4269A +:10E99000FE7708E74899E7014F06AEBB096FDFF441 +:10E9A00021CE37E2E7F87E82991ACAC5A3D15BFE71 +:10E9B000EB1EE86FC30E89A2A54E78F83B554B7647 +:10E9C000F8A9FF693D52EADB901FDEA190BCC8DDCB +:10E9D000C1EFB99EC84BECC1FB2B4BA278A711F835 +:10E9E00012EBA1BFB2DD9FC47799AA7B9E2C443F56 +:10E9F000E4B149FC9D8136BF4E78D8F8656224CADF +:10EA0000C3D21A25E59A88F331BD38BFB6DFB863A3 +:10EA1000DB385D4DB582F8868520DD3EB6FCECC561 +:10EA20000CE3FFAA36375300853172AE6D5FDDE52A +:10EA300031AEC1F8B0D2B563668661DD77F98895ED +:10EA4000D9FCB5460BC687011D18FA2F8E59E79AD7 +:10EA500065BDA12B6CED27F825473CD3319FA85706 +:10EA6000DA1BE271A4BD211CEF84B06397EC5293D2 +:10EA700078BF745ACF93BFBE00E7DFA1D2FB7E27D9 +:10EA8000DE7956C175EB45FC9C8378494814B799EB +:10EA9000975470BEC37BB692DF7A102FEB1BE8BE93 +:10EAA000AE8978017AB47D09FC8678E9F1A6F0FD9B +:10EAB000844D4A9F0BE59CF90CA37DD151712FF831 +:10EAC000D865BF3DF00880F21D7F9EF0B3F716E2D7 +:10EAD0007C36E1FE2E90867F89C6E3D4AEF473FFC8 +:10EAE000F2E57E2EE7E6F885DC2E3F49CECDF1D368 +:10EAF00079413C85EB7075CEE574AEF81DBF38D713 +:10EB0000567B693D646977A51FE5E39C6B5318DB71 +:10EB100067B503BC15DAE34E8FEDBC83EE5D973C21 +:10EB2000CEE333A7F5ACA4771E96ECE0F7B586C626 +:10EB3000DB4A5A5AD5D164A1FD5CF2E8FAE7681FB6 +:10EB40006AE1EF18F25520CD57163E26C82C85EF06 +:10EB5000C6B140AC18F174AB98BF55CE58ACF83B79 +:10EB6000367D7E2BE20BE6BBC92FCACB78BB74B9CE +:10EB7000681F12F7F24B33CBB9BE3EF10E9F2FAC9C +:10EB80000FDD4DFE7B3EBF69D1D8EF1F81EFC3770C +:10EB900071BEB1E607EB4942F8BD354985E6DBB306 +:10EBA00092EE45B6ADEF71DC373F9AB17ED01E4094 +:10EBB0007FCB464B4F62D0FEF9E84763CD6A4536BE +:10EBC000BDC0CF0F58158FC7B5E4F3907679D5192E +:10EBD000C6F746C0F0B2F18522CECB5F2D483C800F +:10EBE0007CE5ADE953D06DB9BC4B9A8E6A74A67BB7 +:10EBF0000EC50779453C7766BF9B1A557C038A256D +:10EC00001B61073B96EE43537AA431426957A34EEA +:10EC100069AFA007A09DF4FC5A81873522FD89A029 +:10EC200087955AF52DFB542EE3F11972592BF99F54 +:10EC3000E452FE4E9BF5AE0CF0772FC20F1B9FECFB +:10EC4000F1CF2C2189788B5D586FB888DF185EC3AF +:10EC5000E32D36083E3B9EF1AEE06E01C76E01D754 +:10EC6000C33ECEC72CC2E304BC51F1AE8DC85BF7E6 +:10EC7000814E81FF7E293BFE7F85702DEBDC3F6B53 +:10EC8000A48EF1E63C6ED88A13FE642A7F5F732857 +:10EC9000FA66D221770E7FB7624D6382BE1F695C30 +:10ECA0004C6957633D95B74BF1D771BCDCA9A79E62 +:10ECB000FF5B62FEEF0AF97BA6F37CD817EFF74FF4 +:10ECC000E679C27FE40CE32ACEB0DE018C3F1F9BC5 +:10ECD000DE1FBC8771E79EA1F709E674A3E2157EEB +:10ECE000CE4BF73A6E73253EC5F99FF8C1123A171D +:10ECF00091DB27A5D0BD08F6FA67F8BD2E57FF8C2B +:10ED00005E04341F9F89F1E5755EFD19CC7F784163 +:10ED1000E34C8C2FAF1BA1DF8EFBBF4BD735913E51 +:10ED2000AB3B8B517CF90DEB7ED66202DDF6F88DA4 +:10ED3000AFF8FC3D79F82E8A65370F3D2FE7BB28E9 +:10ED400077A19384F80C266CE367E09340CEDFC094 +:10ED500027F70DAE5395F3C93CCE279B70DD7A881B +:10ED60002F46E44C3E3D5F4473383F14E670FE98F6 +:10ED7000913318AF457CE17365BF373C4EB4B3D6D1 +:10ED80003DC8B576BBFCB3E4E170378F6BDF73ED44 +:10ED9000E3D7A2BDE2ED19578CF37A7C4C7214C60E +:10EDA000B10DCA114F7D04CF75D18EC47710CB4BF6 +:10EDB00059722CA5A9E222985758D4EB12F5264493 +:10EDC00087CFC7F39C19028EB41D594FF72F2C3BE8 +:10EDD00092C9F511D4176BD07E043E5A33E6B31AAC +:10EDE000FEBE4140BCB306F663112FD7CF49F707EB +:10EDF0007289DFD348CBA5193959ECC8B45CFADB6A +:10EE0000F8E35E7FFC32EA5FC8B7FF81FEAECEE179 +:10EE10007494B85DF5B7F507F424BD85FB0045D8BB +:10EE20008BF8D4218BC5CEFE9F80F7FF55FB5C96F7 +:10EE30003023686763DC1EC6DF76AC62B81E41BF54 +:10EE400098883F5FD75613F5680E1B7819ED286B2D +:10EE5000FD286771BEB6FAEDCEE1F65E778E157FBE +:10EE6000C3F754E3E81F3CDF0179BCCE82726ABC71 +:10EE7000B8DF55C63AC95F7236EBA5B49CF5513A76 +:10EE8000910D501A639A1BD30A16738B78BC29987C +:10EE90002E55133FC2ADF4456AE23E8413E3F1D030 +:10EEA000FFB73A67F905B8DE37E758F734520E7FF7 +:10EEB0000513E753A7F35FE432E361E29FA1DE931A +:10EEC0006543DF6333B2DC63FB2BEE193D89EB61F5 +:10EED000C87B46E7E81FF17B434749AEE78FD79FE2 +:10EEE000C47C70D3EF48AEE7E32D7FD8971C5A77E8 +:10EEF000FC25DC9778661BD42F7B247B9CA7957A16 +:10EF000046F0B8D0E6BCAB348AFB54F939AC2CFCE3 +:10EF10008A56BD3E7482179C1C1FFA3F3D4E66FF09 +:10EF2000935CF17FE374E172E79025AF451CAC354B +:10EF30007E5398F5E23D54771E7FC732139E969C10 +:10EF4000EB7B813306E7618DE70EF0F1BE6E7C2C22 +:10EF5000C8C74348AF93DFDF32ACF8D8A308B7D5B2 +:10EF60009FAC39E36333F1F389584F5B738C3F6097 +:10EF70003B5B5CE91F730AB2C6957E42FA8E199F0D +:10EF800072399A9D6FF7BCF614ED233D797EDA0F46 +:10EF90001C41C709E4DFDFEA4E629CC131CDC8994C +:10EFA00000FCD6FC8312FE1E9EF0B7E50A3F48F334 +:10EFB000F079F169507F5D8CBF33BCAE6F2EF94B99 +:10EFC000DE9FEA9A8DF178C997582FEE7F73845FA0 +:10EFD0006C4B6818AD8BE4AAAB2238DF759FBB473A +:10EFE000FD16ED970E85E1F9CA0BEB15CAAF5DA5CD +:10EFF00028F46EE6CF1267E1FEFD5B21EE2F4B6E2B +:10F0000015EF05320EE7E1C9F147D74AE9FCC2C85E +:10F010005CBA17392924D3FCDEEBBC72C4F9F03D8D +:10F02000378A8203E0EA2A7125B83FCFC5CF690746 +:10F0300053373F87E5F94CFC87C47967E6F7402EE4 +:10F04000976FF3AB641FCAB1D6AAF7489586BAF793 +:10F05000F3B4D34D7189905E82F0858CE932BE5B4A +:10F060001C8A26F1AD1F3625C0F7C7FECE735D881A +:10F07000B7DC0E96358E714A80CFDF5FC62EA1F7C2 +:10F080000F0D17C504FBA11F6C77BAF613033C8E56 +:10F09000B453DC3B3EEC49BC8C26E9E107F324D3B6 +:10F0A000C6BFB302DCEE791FFAE7F16E09EAFF3D55 +:10F0B000C37ACF26417E84961FBE61A29FA6653289 +:10F0C000E78340B7E4433E0A24791441A82A4EFE60 +:10F0D000C9D6B042701E9612744E935CA55C8A78B5 +:10F0E000F057013D8A2825780FFFF0EA1148777F15 +:10F0F00047E7487B9CDBAB417E8F7A83E0A392AAF3 +:10F10000434CCF32BF5065CC45BF6730C4FC7F1E37 +:10F11000127A48F0AFF55E69B08BE3ADA48CB74BC3 +:10F120007AD8A8E1B6F69F06DDD4CEE2BBCC7E4706 +:10F1300008FAB578E2F43B07A17685E17B30AE2A88 +:10F14000FEBE4A6EA52B76318CB3EDC214BE6DC4E3 +:10F150003688DB9DFEF0ED11F4E76E981C1B857080 +:10F160001F11FC6B4E55E89C32739C97839C2E4775 +:10F170002B5DF4AEEBC6F5530AF18DC583C1814812 +:10F180003880E5DC6FB0311820BFFFD1CA8A81F921 +:10F19000E86F0C2C1D2EE9F67EF87C4A5DC951788B +:10F1A000AF746DC785AD78AE538AEB1EECFC7DA1C4 +:10F1B00099AD68E71FD9E116F4AEA7F5FC42B26439 +:10F1C0003486901F3415BA779D9C16FBF5F9B86EFE +:10F1D000D7BB285EED48C2F297EA7EE4FBED95AB23 +:10F1E00043C80FDB0DB902F9E3DB5ADDDA008CBB53 +:10F1F000BE3DDF8FDFD734BB24FC5EBABEE25FCA00 +:10F20000A09FD269F9548FDE029F42B7F788AF36CC +:10F2100088F758B459FCDDCABCA9FC7DE4BC18BF12 +:10F22000E705F2839FEF56F1B87FADF3CDEFA37EF4 +:10F23000D5A6F27DB416BDFF56CA8BF33BAD5A611D +:10F24000CE7324AEB7ADF1200D2CCEE7E9704C2B78 +:10F250005DA92974BECFDF8BB58E6DB53E576A218F +:10F26000F65BEEDA3F1FE109FBF7CF87FE8F59749B +:10F2700034C53BFA329FD3860BC725514E1D11E78B +:10F2800000F07D14FAF58E0D9E0BF37CBA7C80DEC7 +:10F29000D9D3F60DC4096EF3D075388F0D175E55AE +:10F2A00088FE5EADEB8DEFD37771EE9839AF895A5A +:10F2B000FCE900F265C1702921E425DA212131CF72 +:10F2C00010BED31B12E77900DFFB773292F7F049CB +:10F2D000C577AC06E77137E3F360FCFE6C21CA5AD0 +:10F2E000FE266B25AEA3A0E8EF835E37D57FB85E20 +:10F2F0004FE27A3FF434DB81FB8BA038EF1CD42B38 +:10F30000B57C9C6077DB4AFC1EACB29D57C2FFFE09 +:10F310003D9047FC796CC71F49DF6E64FC1D046B90 +:10F32000FCB370FCE274FE61C6E179F2C5FC4BCB24 +:10F33000A1FF1F3514D33DA3660B8FF807741B8103 +:10F34000ED40FE8CD0FCC63760920F07B93C785276 +:10F35000D4DBB04F7B01E5CBB457DFA6F7BB1E0D66 +:10F3600046A87C7DD5C774DF7DA3C6E15FD4C1F913 +:10F370007051644045FFE88D1D92B6CD769E3A4CA3 +:10F38000C063D1BD24AE11DD87754814378431299F +:10F39000AE29C24429C1EFE64A447A3EEB4F95407C +:10F3A0003F1B45BFEFB7BBD836D26BFD0CCF0D1757 +:10F3B00076308A9301BE5031FE6A61C730F435B1B0 +:10F3C0006D91D8AF31FFFE16AF8E7094B47FAC62F2 +:10F3D000FD60879BDE4C454676597C5B9CC6C758D2 +:10F3E00001675EF72A1A7F6C2533F83BADFABFA0A0 +:10F3F0005C0F757975D2AB726C03E99BCE3C3E3ED7 +:10F400001B68A77B05535D941F5BC5E11FDBF5EC13 +:10F410001D786EBF20C2E77D6395783F498EF795D2 +:10F4200060FD4A4DC3FB10795B783DCF18801BC649 +:10F43000B911E196D27829117095205C80AF12AC99 +:10F440004FE71E03FB709EA1F6E1FADAA2F43CE658 +:10F450008B79CD47F8B1DE759C9F8084E65778950F +:10F46000779E735DE4CFC958FFD5BCBE8CBF64E105 +:10F47000423D6ED2B863C579B90BBF4B787FE119B5 +:10F4800082A3A4C3EB68DF119ED747F3E8F6EA1224 +:10F49000874B47F915107005BA24C26BA05BCC23CB +:10F4A00066E377283FF80A33F15DD855F9FCFDE9AA +:10F4B000C39314F27380F1FEEE9DB8FE362874EE0D +:10F4C000B2FD4B1E8F9D9CA4F4ACE672456296DCA7 +:10F4D00002202B9A146ABFB192D1F98736357FBAD0 +:10F4E00082F2E9C5CE2B493EC40EDD43E74719F150 +:10F4F00001817D7EB23F0BEF76E205E037707F1B26 +:10F50000CD881B089AC3A7A35CC5F2BC0A92BFB4FE +:10F510003E27DBFBC573B4D76492CFC17D5BE6A207 +:10F520009F38B02F5E4CE73F19F51E0F95905E0B8C +:10F5300062F407D5AB77613DEBF7450238D30A4A51 +:10F540005FC4341860660ECF9B523EFF99916A48A3 +:10F55000774E8BD3BB32C173F93BF684FF7C4A53A1 +:10F5600098765688EFFB12C51AA5BACE538D526B0A +:10F570003C4B4FAE17F5832157D6F76083C65FBC6F +:10F5800076B92587CCDB5FC573B28B38BD9A3C0357 +:10F5900035F83B1A4D4F07D0E3CD1ECF4B8EC277C7 +:10F5A000B4FE49D82183BF9F523E8FBFBF8B4FF11E +:10F5B000E6537744E7B383655B91CF27187DAE951B +:10F5C00024C7783CEB7B2F821D740EBE1B6C8450CD +:10F5D000DE9951178DF7FE4BFC7B5BF8AA42B4A372 +:10F5E0003694069804DF7F10E4E7341BAA56DF8EBA +:10F5F000FCD1DB2DE5A37CDE2EECA9ED5B97B5629B +:10F600007CDFFAF512C9F117261F9A8DF5927B5C03 +:10F61000741F7E7A87B43907FA3BFC968FE2390F64 +:10F62000FFACB31ECB3F1B0B8438853F0E51C2EDA0 +:10F6300069C36157033924CC67D6F78F3C4076DD28 +:10F6400059557113E5AF56C5A621F17403A082BDCB +:10F650006B30DC67929D1BE17A5FAFE4DF81377529 +:10F660008C8BD5A33CDFD298E2FBEA727E6ED0127F +:10F67000DE968FF6C6DA1E99E1F6A772EB95EA657B +:10F68000282FCBF1B60263BB92969D9360FC9C370A +:10F69000C9EDDFB23A2308ED3A5EE7E2BCA37CFA9B +:10F6A00030D44743E98B7702DFE0425DE7728C425A +:10F6B000E8DD69FDB141EB5711CF0BBA240DF5C759 +:10F6C0008228A3F55AD22D25EDFA232CE406C8DDB5 +:10F6D000D58CE43C97BB61214740FEAA14FFDACEEB +:10F6E000C43BC4FDED247F3ADD5C5FC8BA0BEDB2CC +:10F6F0004526C85B80A538620CC378B91BEB653A18 +:10F70000DFBC51E8194B7EA6F5555CC173654B0E05 +:10F71000E70B38C2423F0C33B97EC8DFC2E5F2B016 +:10F720002E9EBE174DD0B921C55A0E4FEBB5A30181 +:10F730009DF098DFD14BF27E583797FB165D607EC7 +:10F74000A7FCFD95D6EE49D3116FC1EE22970BF7BA +:10F7500089913A05D3B290E488FB2022E23CBBB702 +:10F76000D262F79B623F51D07A3922B365EB7C05B8 +:10F77000E561498CDF070D4417FE188385CE11FB28 +:10F7800049C612F46E07AB5F4CF79282027E7F652A +:10F790003FFDDED7FB5D575E8DF82CA9EC1D8D7605 +:10F7A00045A8EB20FB26DAC7C110B50F5526E99D09 +:10F7B00082501917C525550915EBDF1871116C47D3 +:10F7C000E414C3FC9118D356E9E979F60773689EEF +:10F7D00083FB862EAFD8372429DED6DA37B449F139 +:10F7E00077291EE67C2E573A6249A356C77D0397B8 +:10F7F00013DBC728DB701DDE1410FB9BF000BD532C +:10F800004FFB09B0E797070ECE427F8F353FAF9889 +:10F810005F300AF383EFDFBBEFA081F0F9AB7A47EB +:10F820004B36F86A03627E657D26BEB310AA84F962 +:10F83000E1FCDB617EE1A1E71714E5C1C85339D8CB +:10F840005FBA1F93E8114ABA35A447A89DB7BB1108 +:10F85000DA613F997CF005E26732B66734AFA0E128 +:10F86000B4134F170FF7043230E2ADC2B25F33F476 +:10F870001EFA95484F38F5D1C8DCA2417F9E69B386 +:10F880006F9F10EF443E1103FBAF08E53DBF478675 +:10F890003202E3D8023B5CE608D4173BF8EF5F0482 +:10F8A0007A6573BCCD6F15A8FC8B237EAD163BB675 +:10F8B000F1F1E07E54EC4383959CBE7EE057FBEF74 +:10F8C00063BC15E4FBF8B782DCCFE5AFAC8FE03A60 +:10F8D0003D79FFC9E1CD8DB89217A39D7821CF6FF7 +:10F8E00098ECA277166EC2F55980F6CB23462D8D83 +:10F8F000DC5F83FBD3B6F50AD995C9ADFC1E5B72FC +:10F9000032B7277A531F737B3CA98C5A4CFB2DFED0 +:10F910002EC5C6A9AB472DC171A6C62BDD36FE0983 +:10F920004DCDBE0F9F1452AD384B49F85D24BB5EE0 +:10F93000B0F299EDBCC2FF427FE8AFD234D28FB1B2 +:10F940003DF2A8C5B8CEB551147FF55DA1AF07DF74 +:10F95000B94F06B97F2DC57F37CAF2CFB9DF6EE345 +:10F96000EF4DA57F37EABB21A447C0799E61F9ED31 +:10F97000BC93397E836185820D83C2AFD39B729124 +:10F980003F6363245E60FF5DB736F43F417F8AA921 +:10F9900070BFC224A77D716788BF037847C825DE82 +:10F9A000EBE27C7358E865F987E7F1F782FAF877BC +:10F9B0004F2523BD07F3D99F318F8F32E6713BCDA1 +:10F9C00023EA7C2FCB9A8745C78B429C7FD0DF816F +:10F9D000FE078F902781A49BE8BDAEB28FE4A9C536 +:10F9E000578B4CE02BF8EEDAF21BF26B94A07C0202 +:10F9F0007A27D767FA3516AA08771BD83FE87F77AA +:10FA0000F8376CF208F187FDB6C2786837B7B2B83C +:10FA10008672C3845EC89EE972135E839D529E1DEA +:10FA2000AFB5018EAF05885792CF7B69FCF5B16207 +:10FA30008AFF6E29B88AFC4EFEF6712E6C77B7B03D +:10FA4000B75A44FC4C28AA24691E550364676CBB52 +:10FA5000B09FDE7DB6D683358E0537AD507B1C7FDB +:10FA6000979BD3C3A24B397F17C68DBF472665A589 +:10FA7000470FD123929DAFD4003F97D8D5373D840F +:10FA8000F587B27B2DFB36D37EBD26A873FB5906C6 +:10FA90007BB5226DCF5A7AB64D4AFEF6225CAF8F07 +:10FAA000293AF747C423BF8522F7B800DD4F7F42CC +:10FAB000EEF557707F283FE7137C7850D893F2FA21 +:10FAC000F3C80EF0748A79774B7CBEA7E7C35F9DBD +:10FAD0008A0FAF0A70F9A77D5EC48C61363F4E3540 +:10FAE000FF1D4C2DC9F39AA9F0FDCCE7A5542F8B2F +:10FAF0007FA808DFB9CBF40B813CA373CFFF6FFC69 +:10FB000041C2AFC7E4FE88D3CFF3BFEE07FA2CF4AF +:10FB100037F88158869F27D3AF93E927B2FC3AF88C +:10FB200067F71765FA79A278BBBB04FD3C7B43DF1E +:10FB300042F9D9E0A2F57B44F8215FEBB86916C61B +:10FB4000977BF0A638D4F3A46482533615BAEF63DA +:10FB5000AD374BAE5B723E8B5C8FE49E42AE1709B5 +:10FB60003EDCB94AACAF3093519F3FB1E305156D10 +:10FB70008FB3843E19D4F7A8E76D7A3D887A7EE288 +:10FB800019E879B11E87DE2FF1F5776FB5CB877055 +:10FB9000E78BF9E60DF034BF5FFCCE13F350DA29A2 +:10FBA000DE0BCD9BEDC4EB39CF65F2F32AEEF757B0 +:10FBB0008DF015B8BE66BBE81ECB796F3AEBCD2E43 +:10FBC0007A297C2580983F93D361B05D8015CC4322 +:10FBD000FA56CBD4EE5B479CEDD2F08BFA1A87EB4A +:10FBE000DB9F9FA65E989F4364C23F43F566873FB5 +:10FBF00062147C279C86FFE288B35E4DED4B05576F +:10FC000067833FCA86D754A6E1BFB4CC7B6AB87479 +:10FC10000EFFDF579DA65E6976F8AF9C3D04FC653C +:10FC2000EC12BCE77575CD69FA1574FD87C5A7AEF2 +:10FC3000774343E638A6E3FECA497CC43C24BFF3BD +:10FC400007B85F264FF350FAF5F9C80CCFB5F1515C +:10FC5000263FCC99E4217E39998F04FD041D4ECBBB +:10FC60001F828F32F9E14CF928933FD27C64165CF5 +:10FC700065E3A34C7EB86EA587E459FE4CB6CD5D16 +:10FC8000948D8F78BBD3F287E0A34C7EC8C247C463 +:10FC90001799F067F2C9FF3A7F681E2E67847CC906 +:10FCA000D3FF5AFE4885AFB4F147269DE3D36612D1 +:10FCB0001F9CCC1F822E823F4E4B77C11F99743EF2 +:10FCC00053FEC8A47B9A3F5224472CF833E99C5832 +:10FCD00035368F9FE30FF2C599D159073A07CE7C8D +:10FCE000FD333BBCC527D3FBAFA6B32EE82CD67F94 +:10FCF0005EECAFD527A01780CEFF0D417960FF00E5 +:10FD0000800000001F8B080000000000000BED7D4C +:10FD10007B7C54D5D5E83E679E99CC2493C9E4FDFD +:10FD20003A0921044C701221057C9D8410068876C6 +:10FD3000808881A20EF230402001AD626B2F030457 +:10FD40004868548280E0553B046CD18A064B95226A +:10FD5000FA1B1E5A54EC8DA268FD288D94D2888817 +:10FD6000F151A1F7AB7AD75A7B9FCC994902B4DF06 +:10FD700077FFB9BF9BFEEC669FFD5E6BEDF5DA6B1E +:10FD8000EF097865CF538CB1B1560B530A19FD7D3D +:10FD90000FFFD54C5E9D34CDCD986B9C5C6A50F0C6 +:10FDA000EB0AC64632B6DE1E4ABA15BE072A8DD405 +:10FDB0006E7C6A64BBEFF1EF465D7D27F376D81960 +:10FDC0009B5478997A6EA857C45882D7CC146BB8D4 +:10FDD000DE0F4745B6EBAD9F0AFFC4797859F0298D +:10FDE00089B1A9DEC87AFE158363FC45BAFA996C1D +:10FDF0008207E6716BED65E661E4F3FD51DDA5EB8D +:10FE000031FD3CF318BB6359F43C038C25F54DA13F +:10FE1000DB46EC5FEB4F4BAF71CAD4EFB078C6EB6B +:10FE2000C5F65F6F14D683F2BBB57AF150AFA86FF9 +:10FE3000BDEB45BD97B01EF4FBB5A8AFCD63D7CAE7 +:10FE4000C63A1FB47BE1809236C5DE777D1B56B083 +:10FE5000DA0E829F224D7184CBA73A252A3FB5DC6A +:10FE6000C9544BF8FBFAE6DC2A06F55DAD256B308C +:10FE70009DDD9CC8D47EE0977071105313F5E305A7 +:10FE8000A93FE738E8D88EE505547E6AB995FAC7E8 +:10FE9000F17DC5FDF51F3B40FF6997E93F93CAC35C +:10FEA0007861CC9ACC9889FF9319E2F79F35005D71 +:10FEB000ADCE342B0658EAAF5DACAE3FF89A32CDEA +:10FEC0001F4BC391062BD52E6D1E40070D023E26FB +:10FED00023FC570AFFED34042C717DEBAD92A15F3A +:10FEE0003BE6FCA97AF8DE27E8C01A34AA4184BFB1 +:10FEF00011CA8BC3E50F63FF30EF5592E7433FD242 +:10FF00007F96D9F314ECCFB5D7737C69F51E11F346 +:10FF100058E534707A653E867034D95FFF5082F9B7 +:10FF200098ACF68081E66F3CD7A5A3E3479C1A9D69 +:10FF3000840CAC2C0C9781EAAFBA9EEFC355492CC8 +:10FF4000B822F7CAFBBFCFA9D0BC8AB79BA93DCBCB +:10FF50003007074BE1F5027CF8FE5ECAF777A695FD +:10FF6000355B019E6B24A6DA47C077C94ADFF1CF23 +:10FF700009F8CB10F35C3B98ED90AF86BC911DB6B1 +:10FF80009422FE1A53EDD84FBA59C1FAF9A9E69056 +:10FF90000CF35BD3C60279506FCD6A7BC002E56B70 +:10FFA0001C794103CC7FCDB77CDC35B729C195D80E +:10FFB000BFAA2A6EE89F8652783B17B62B11F566CA +:10FFC0003983ABA05D1AEB8C618670FF8C65259C34 +:10FFD0008965F889111D3A5D58A90F1D85E994D3EB +:10FFE000635E8BB1D008EBFB9AD93C487FAB121A09 +:10FFF0002D3190EE4044C0F765765B70656EB85D5C +:020000022000DC +:10000000D3F250A869B02E6F023AE8876FBC92C84D +:10001000E9EA9984C65A1F94EF9296D4FA74F4527E +:10002000E8E2749594C0EBB1113E2BD20BF4F8EEDC +:100030008DB84EA7ACAC93305D699D88F9661929DF +:100040008CB5A74EB12E407C0464E76005F32BDF2E +:10005000BD11F3501FF179D87967732EE49B9AE5AF +:100060006B683B33B5BA04E0192FF0D51E90695D7B +:100070008142161C0CEB0A06F2D267C3FC0A9C7282 +:1000800005EEF3C32DF7CA08E7362F6329D09F91F9 +:100090008502464C0D279815C67BA8F2942F1FFBAE +:1000A00091F8BAAB0C45E938BF0D41A38CE31DD8DC +:1000B00056F08609FA0F56CACC02FDC777CDAA665C +:1000C000809F7F387369BDC613133E6140A76D8161 +:1000D0007627F2879DDBCCE92837E2AE339EEAD261 +:1000E000C9A1032B0AD2719D6DDBCCCC02E3DA47A8 +:1000F0004496B74D57D29DD0DEC6E0BBB6CF7379DC +:100100001A827D3448D0CF9116B3DC65C775E8DA22 +:10011000433DA5D529F9911F54DADD48375F0374B3 +:10012000BF07D0EC94553906E9F7A444F276872945 +:1001300060D1E36D7912C75BEB72E6390D345298EA +:100140002BFB906F3C28717E60B73315E1A2E1373D +:100150003ACD6BA98CF7F7C3DFB4D4683D146ABA03 +:10016000A62F7DD93D9DB213E091B0C759120B5D0A +:1001700025542A7BBB10EEC5D925B80C8DDE5E9FB9 +:1001800050B0750ED45BBACBEE417CD84E583E468B +:10019000BE106B6DFD02D30D07A63305F85FEC3280 +:1001A000B7271FF8B24D49F6E4C378264F88213CA3 +:1001B000ECCBCC9ED390AF7ABE28A5EB12F35CB704 +:1001C000DCE9C9877DB071B995D275821EAE7ABE61 +:1001D0003AFE4EDD7E1896C0F962EFFA96FD7C7D00 +:1001E000934E5E00FDFB82C49783A993757CF954FE +:1001F000028797D66FF4F85A391BA1A68D0338B43D +:100200004F303BD741B67C727EFA02C86F6F363BE7 +:1002100071FD1B5ACAD6CD447A7FC7C006637E42A1 +:1002200041FA3C5D7FED03F43F41CC7B675AE031FE +:10023000C983F3BB7FE251D08176C6041E63980F59 +:10024000DC3BF1E828C8E3A61C83F99F4E54015E0D +:100250003B916FA403FC126E981840FA4E08CC90A4 +:1002600081073FD4B260DD61E0473B07073E922043 +:100270007FD2CD4295D85F2EAFFFBA7B7B7300DB78 +:1002800017F3FC5B1B974FC47C3BAE07E6EF867D04 +:1002900080F4DCBEADC985FB66E3E411E90A946F26 +:1002A0002F09A632E82FDFE57AC30AFDBB25DE9EC3 +:1002B00005BEF6E27CB68BBCAFED2B2FCE07E0F38C +:1002C000E84CDCDF9D260FEEABB6232367E07EFF14 +:1002D0001AE0C5602EED594A9AAF1FBCB72E4FF5F4 +:1002E000B40E46FE07A929FCDDE149F53CABDB97DE +:1002F000266764BE5D52D2105E4118DF381AE06F87 +:1003000052B6627E7DC251AF11E6BBC1A1A4213CB1 +:10031000020987793E49C093EDF7AA30DF0D693CA9 +:100320005FD7F69217E1113D8F769392EE29BA824C +:1003300079887AFFEE3A0682C3958EFFFF70FB192B +:10034000A8E75FAEFDDFC47E1DB09FDC2BEBE7BFEF +:100350004A8FFFBFFDFFDDF6C1843CE29B97A707F4 +:1003600046F56C32F323FFDD545311334BC78797A7 +:100370002609FB0CEB917EAC925DB2FDC12AB23333 +:1003800083CCFD8605847C73B0C93511F8E38656AD +:10039000D983ACAE70B22B6630F0B32637725D48AD +:1003A000FF3988E7BDB27325E483CE0ACA079B797B +:1003B000FDA05BF6A2FC5EED966DB375E307BDFC98 +:1003C0003BE847697A79B141C80BF600CC08FA6975 +:1003D000C9CC6B5FA7D30FA72571B9B1A1A5E28DD9 +:1003E00042944B685F28A0574DA83A827ADD06D028 +:1003F000D32CA4A7E5B5E4A39EA6CAC4870B445E8C +:10040000518D1EC8B2213879F40738593004F5DB14 +:100410005B5F584AFA2F2A3DA85705BA0260F2B02E +:1004200003BE3B8FA0FE174CE5FD323B0815D07F85 +:100430005C086BE8680DF683F2CFC334FDDD510232 +:10044000E564922928E7EDEBF2511E805E88F252B6 +:10045000D3CFB293B8BE9688FA1BE4DB9BE589380C +:10046000BF4D1E2343FF84B35AA777B1BEFA5B92F8 +:1004700089A938DFA4A1E66000C6B547E969D1FAC9 +:1004800058AF3EE0037D42D76F6CA13322FFF58960 +:10049000F1A044A19E34692BEA296DAFB11DA8DCFF +:1004A0006E7F8DED6360277CBADCB715F573B6FE01 +:1004B00051C640EF5D20E0902F396D681C180695FD +:1004C00028A81CC618D65B31CD973D0F97C3F847B7 +:1004D0009E4B9F3E07E6BB745B2CE163BB295086B5 +:1004E000A06E3239B7A27C5D9494D582F2ABCDD4A4 +:1004F000F90CCA2F39F0DB75DE2CB0778C1C4F1B42 +:10050000DCB04EE86743C79EB3CF8C40BC5B89BE6E +:100510001E6A5EEA453DAA5BE6762D33FA52270352 +:100520001DEFDE65AEE57A8F8FF49E9DDB1C94D7C0 +:10053000EC540D1E2F249A090F2F08FDAE64D5929E +:100540004694CFBB6549C8498033E8211DA81F9058 +:100550001EB2F6CD4A98D36AA1974C75BDB10EE58F +:10056000FEEA01F49C0D49DC6FD1117488FE0EAFD8 +:100570002B07057F770513F98F26AA9938AE24F447 +:100580008AFFB50EF3BBD15E4CE7789101C6BBCDB7 +:100590005AFD3F4FACA372699201F6AED1FD6A8B52 +:1005A0007D74787E0B5CD63703D8BFBCA4CED7CF82 +:1005B0007C1E4814F319C1FD53D0AE36A8D3478C26 +:1005C0006E03953B45DA112C96510FCA3382DE0D2E +:1005D000A9E740BE6D81AEFEDD2E5B841F686F57BC +:1005E0009E4DCF67E6B9C5784616FB11E07150C045 +:1005F000EC5C01F81F1474905E64CA343309F02A6D +:10060000BB3B4B8BDCA87FDB1950205B3B0E560FAE +:10061000FD0447071F1A83FA6696EC09C0F7ED0E32 +:100620003BE1B17DA7C1FB4B847BF0AA4AA44B6D93 +:10063000BC9F8879AF6D2EEDA9837667ED76A7A470 +:10064000201D796A719FFEDA6E7606B8F19B86FCF2 +:100650002E5F0EA6A37EB4C935AEA5E93AC80B3805 +:10066000DB364D6C21FDD0D971731EB45B0BF616D1 +:100670008EBFD63DC58AF36AF3355A917E5F38D076 +:10068000E8CDC5FD3D58662B619CB6726EA7E42788 +:10069000B926E2FAF2578361A2DB7F8A9BD359BB6A +:1006A00047F00DB7E01B4698C708F4AF947990DF88 +:1006B000599CAC14D765CA6C54D57EF078B5E887E0 +:1006C000013BB297D156A47D98EC3DFE53E427DD63 +:1006D000E68E3F20DCD626D83CEDF03D18D31187BE +:1006E000FD27BB6C32AE3F85C1FF03A89A64C00BE7 +:1006F000F2F74C4678496935939F23B9D54C76CDAE +:10070000866699F6DFEA392012605E29CDF2C716B7 +:100710002CEFFA62398E93EA964366B03F93679A5C +:1007200023FC85A9273EF916EDD254A6F32B42FBF4 +:10073000E14EDF8B2E98B72553D88758B70CED4C78 +:10074000FE676B96C9BFB46B0587CFDA9FB120D81F +:1007500010586E5D56CAAB23FF358BFADB7FCB9EFC +:10076000453899ADAD9D86381D5C9771B89A5BD7B9 +:100770002CC175980B23FDB086A464825F1603EE2E +:100780000F7CEA53C6F703FE19A1281B71024B3FE9 +:10079000D7F19718B4B7BACDDCCF40B64999B0F7C6 +:1007A000F3C2F8F840D89FD1FDE448BC9E967F92F2 +:1007B000F17E771F764D427AFFC5B2BC12E4F74D49 +:1007C0001AFF62BC7F1473889F24A74D1D0AF3DFB4 +:1007D000EBE6FDEFB635F6BBAF5F11E56D6F00627E +:1007E000011EBB572A77A39DBAF62199B543570737 +:1007F0005AB95F62438005518E6D503DC7AA715F43 +:10080000351A3D01E4C7859CCF6EF72AC115C20F8A +:100810001580F93AC47CB7677A6C0668BF7A1C7396 +:10082000B6031E1D954C8D417F98D1B30EDB2995E3 +:100830002E8674CB00C632CC3F56B47304024B9064 +:100840000EDA32D90C829F5191261787E161177019 +:100850008CF5423DB4A3DD2FDE87FEB6F6CA290C27 +:10086000F98EDD0DE3C4F17E91C8C91505F8B20714 +:1008700078BDF89A48BA233E8974BF18E806E7396C +:100880002A12EF1B047C328CCC6B067A5A81FC0B4B +:10089000F595F91C2EB19EA8FE6C4A5A1DC1D1CC0B +:1008A000701F653F10599EDE9A5C817497C974DF92 +:1008B00061DCACC404C247FA91C7A7C8B0AED57515 +:1008C0004C36E0B82CA0D69572FC20DF585B25533F +:1008D000BF1995AE0A33FA6D2A6515F1945057D4B5 +:1008E0008EFE320DBF096EA7545A84F59C1505C3C0 +:1008F000C98FCBE93C19E81CC6CB38D27337C22F5D +:10090000BDDE1CE5B7D7ADDF70F9BCC91A17881D6D +:100910008E7ED2C87DEB72E70ABF2BA70BEECAC64C +:10092000FFE37E58639CB20EF531B6D248FE5BF40D +:100930004166C21C4DCFCA8114E8CF0229F20D5383 +:10094000873130240EF513A69AB13CF33B8B7EBE63 +:100950003B7F5B447677BB89F35183D05F35387436 +:10096000A2BC1E8929972B152F658E457FE8EA2C9E +:10097000E6E1FEB8BDB47FEE1573EF967D5B6211C4 +:100980004E1F5918F283D22381196F417D67254389 +:100990004F325B6B6CB426E8E4194C3D28A7FEFB94 +:1009A000E906A12FB5A3BE144FFE901988A7EE76D5 +:1009B00007437F6C4248D6E4BA8A223EAC67EC6AB1 +:1009C00041B95E6CE81C660579B4D9F9FB96CAEBAF +:1009D00051FE665D65049ED393F8558B69A45E4F06 +:1009E00038DBA25E77293DE1DB09D85F49A696FF97 +:1009F00064820A40EFB06AF9BD6FA0FFA2C9147803 +:100A00000E79DAF36E16A81C857C4E2BDFDF82E5AB +:100A1000BB6CBCFFE7DDFB5B0257A07730AB6243EA +:100A20007AB81C9CDA8D8A0DE5673BC203DACF7B6E +:100A300064EF8415C6B0DE52BFB373229E47687858 +:100A4000992BF8EBEAD75807EE5F4D1FDD9E6496B1 +:100A500091892841B31AEC872FAE4BB452BB8BB1AE +:100A60006A53E2C8CBD3D73A415F3724F2F18A0DFB +:100A7000FD9F5B051325CDDFDF88FA53C54B76AEAE +:100A8000A7B64CDB817ED98A21455B63D13EF9E371 +:100A9000AD26CC3F9968A4FEDA7FE71FE2E4E75079 +:100AA000E90827F40F101C7E6B97D13FDC075E62CC +:100AB0005DD1DF3727C608BB4D9971D0CDCF1DD68C +:100AC00029E173B0E8F93E2FE6BB7A3913E7504EBF +:100AD000B2F7F2937C2A9D23A5FA0338BE19F48A53 +:100AE000FECEA18C173322CEA1B6395586F58D17CF +:100AF000B3E97B8CD1B71BE1FBD88BA36E4671F7B2 +:100B00009890677EA7FA1BFCFE75F38842BDBC8CEB +:100B10004EAFD4EFFFAA3807FA77ED945566D58526 +:100B200072751BF3785C8310FFEB3D284F5A989A3F +:100B300087DF8F3CB7607D39DA296F1B889FB48DC2 +:100B40002B233D55DBBF97B357A2F76FA9CAE8DC4B +:100B5000CB686495C8EFE6A0613812C520D7734C06 +:100B600087419F8AE37C125303C807490AF30F6346 +:100B7000D048E586139600CA1943F39A4ED4678C81 +:100B80004E1FF9934B64FFA944A4836660A9B0CEBD +:100B9000188E3A66B0ABCC5F34307FF8DF89BB2764 +:100BA0003403FF301CB67D4CFD86C4F827D6921F57 +:100BB0009BAD8FEC0FC6398FE358F7FA42B1FAFEBE +:100BC000851DD393F85C4BE052FD35F5E9EF22D259 +:100BD00045747F1A7F7B3FF1F90997ECEFF13EFDF9 +:100BE000C9EE7EE6A7F1BF77135F684183DE18E2A6 +:100BF00072C888FD628AFD41BF568027D213F46314 +:100C000077A39CBB4E32A21CD1FA4733D0E7E86BE6 +:100C10002F69E90217E71BD1F8DFB5A2B1B6BFFD16 +:100C200078B5905FD172D38472B394CBCB141D5D31 +:100C300058506E0E1F586E8E1274C518878B269FE3 +:100C40006F74FA07E37A2C6EBE6E4B2693781C0104 +:100C5000B77FFEAB76C8932EBE1F83318ACD8BF64D +:100C60004595EC447D52B32376AD704E40BFC6DA55 +:100C700015B207F5D05EFB41D8179ABDD22433A137 +:100C80009FCAED78EE0A76C724B23BC02EC1C3CA14 +:100C9000ED30CF18D80F6DADA5C7AAB11EE8AD6471 +:100CA000EF44DB1DC21E499D13F97DB8D33F1EE9F9 +:100CB000C3EE95496F0D162E0DE13AD75532EA274E +:100CC000DA3E88D62BA3F5C8683D315A2FCCBC2715 +:100CD0004A4FFC97F532AE575DA97E867FFDE965E8 +:100CE000A42792BEF0680BE28FEC2AC8276F7C9491 +:100CF000E4B91697B1BF4726FBBC3D90EC427B247C +:100D0000686204FFB50F2A2EF4BBDC2DF05C17EFF0 +:100D100091D15E0403D289F42ABB99DD83FA6AB3C8 +:100D20005CC2ED76D55E82FEB216B99484D568B009 +:100D3000EB47A09D6627FB79BBE3D987C620BD8121 +:100D40003D4FE7AB03D8F12BC47E1A95E8A47D6232 +:100D500030AFF714215F6C29A3F3CCED260FF9B364 +:100D60005F10FED13D22AD12E74A5AF98BC28FBA0D +:100D70007780F27DA27CBF48A3CB5F15ED4203B420 +:100D80003F28DA1D1EA0FDEBA2DD9101CADF14E5AC +:100D90004707E8FF0FA25DE700EDDF15EDDE1BA0C2 +:100DA000FD71D1EEC33EE55CBE7E24CA4F44F57FA3 +:100DB00052D4EF12DF272428DC6F31C079D9AE5C22 +:100DC000CEE7EA0F77AAB971613CCE72713F85A672 +:100DD000CF5DD66F25EC5BEC1BED4852710685FBB1 +:100DE000EB12FDE15F5359D87ED4F8D8A0113C6EC8 +:100DF00043B343357BF13B179FBFBD55D8ADAC83A3 +:100E0000F8793BC2A96860383F81BC3989CE0D4969 +:100E10005F44FA9BABE3E7DBDC265E5EC2E119864A +:100E20004F81ACC14786FA4F0BFB7C82F0B7EF4C89 +:100E300008F7375BD7DF836E1EDFA2CD6B20FA6C1D +:100E400011F3D2EA0D44475BDD2CA2BF81E8F9C162 +:100E5000A87A03D1D5B6A87107DA5FABA3EA0DB4BF +:100E60000F36458DFB9C28EF10E9CF84FFF072F41C +:100E7000174DC7EDDA39715BCDBA80CE1FA3D18B88 +:100E8000BD99CB8124D613411F71AC9307B908FAE1 +:100E9000305DCC65EA35C454495E16B815110FE5CE +:100EA00063A8B79B2EE653B9167FD2ACAC7461BC75 +:100EB000C66AB7BB84BA01BD01FD1D3F1474DBAB2C +:100EC0007F60DC00CA777780F4149D3E979984F4A4 +:100ED000BD85F5AB7F687EE70D9B864E40BF73FBFB +:100EE00008A6F278132BF901C0CC484D443F99A1D4 +:100EF000DA330FFA4D73097FEE65CE132E777E70CD +:100F0000B97383922487FBCC550CFD631E94535513 +:100F1000CF176D407D60E93B06F2F7E7AF57C90E8A +:100F2000BEAF4B52F47E8D5EFB42C46568F10E9AF3 +:100F3000FEAFC5416C3206A660FBD5AD2E09FD5350 +:100F400073C5F9D501F714F2BFB6D7C8A4AFB71F60 +:100F5000D9E41D8CF14695B213E9A3B9B5F44DD48B +:100F6000AF8241239D17D8647502C6E56CAAC9B348 +:100F700021DCF17C4D6F7714381B2BB0DEF69A0A1A +:100F8000F2F336FD73AC15F9D15A675E8C827E5F41 +:100F90003CB7827483D71583FB365813F9BDADB2C5 +:100FA000FFF3ACE8F57E2BE292DA198FCFBCEAD0E2 +:100FB000F4C9186731A8D955C271EE233F59BE4B09 +:100FC000E889CB0C9ED3A0E32535737B6110D85FF5 +:100FD000887F23C693E077A6C34F2EC6C328DC7E46 +:100FE000C5D032D40118C051A74744E353AB1F8D7D +:100FF0005766F41422DD8D717139ACF1F181F8FD81 +:101000001831DF85497C5FF7E22D6864C897357C2D +:10101000056BF8B95CF08889F8F6D740BF2C979F2C +:1010200053F617BFA3E16998E003D1F8DA690AD053 +:1010300039FBC16DF7A6623CD2DADFF9739CFDF48F +:10104000A3A5879D8A163F1A83F63470C41879D4F5 +:10105000BF640FAD4FBA843DB467D355640F0D64C0 +:10106000E7F5DA75C2DED3EC3B1D1F7882F84091BC +:10107000D4AF5DA79D27356F1AF606CACDFF467B14 +:10108000F2D9A47FC39EBCD273A97FC13EDC9F74FA +:1010900009FBF0179B8A26A0FEFA2FD887AFF78BA3 +:1010A000AFCBF9B37AE36A55BB04FCB8BE971F2FE8 +:1010B000213FE38FC59EAA177178E30C76A267DB08 +:1010C0000E89FCC90B03469A577D60E512F403D3E1 +:1010D0003907D0FFFCD58CCE33A19CEC21ADFDC2ED +:1010E0000E0B0BE9F8F2E23D90D7EDC75CC6E3CCFE +:1010F000E683FE1FD2EDF75C3C578EC3F2C8EFCCFF +:1011000030331EF18A3197FDC56B2E3B511E3AAC30 +:10111000EBFFACC6C77FC07E407688683FD03EBA42 +:10112000B05C0D1D862D9C27A93D49BAF813868712 +:10113000DE00CF7543CF14F6B79F35B8CE5E369636 +:10114000FD05F8FE8B666739C689069E94C80E9E1B +:101150002DE2EFC60425B2CF66DFFFD623E8E719FC +:101160007DDA639E05FD2DEEE47E9514C392929F79 +:1011700041BAE920BBC327F24B50DEDB5505CFC592 +:1011800066E150D0FE9CA9B1C4897187B7D955B426 +:101190007367D5A87FC4F38359338BAC08B7591D47 +:1011A000312AA55666B4A1FCFCE7F7142F3C576022 +:1011B0007B969159F17B8A991963207D69E36433A9 +:1011C000C6F9A5D89815F3652B617C8053DC281FE0 +:1011D000CD6FD6FE5FFD1DFBBBCB183A4071D5220B +:1011E0006E7BD6FE37FE81F6EE5CD56746FFD9559D +:1011F0003BCDFC6C43C0BFB823327FF5DEC87C49D1 +:1012000028327FCD91C87C2B1E04C2382F7F6B60A3 +:101210001827DAF3742C9D832C04FDF806179F061B +:10122000FA1816FCBA781BC6BFBEF8DDDD7FFE19C2 +:10123000E47BDE36907DFEE230D081117EC66036E2 +:10124000CEEFEC63BF7AF27E3C477D26052D4076DB +:10125000B0FB85023C6F3FBFDCB7B512F8F1D88513 +:10126000FBB391DF9EDFFB9B2791AE3F7DCE427E9D +:10127000B24F85FFEFC047FBCE3C86E33D175B8254 +:10128000F2F9D35D2F15207C16FCFA956C3C273EB5 +:10129000FBCCAFCB28FFCCD3C3313DFBF4AF0A6608 +:1012A000919216CCC6737BAD9F85CFC67C9C88740B +:1012B0008FFE3E9077673EB3DBF5F6E2BFDAEF4292 +:1012C000F4FB52BF6B3B1371DFED7404305DB0F380 +:1012D000E75FF0547A87A72BA87C01406414C0EF25 +:1012E000130797E70B775A22E03E644B241E3E011A +:1012F000FDE505A8373418F9FD0CE8032FC0B885C3 +:10130000E7674E44B9F989F0439F817437D46F8001 +:10131000EF09F0FDBC38478CDE37772473BDB96127 +:101320006FE4F8FB8CFDD79F9BCCF58C423C31D50C +:10133000F185F401EE6D2C4CE6F2FB99677AEB1B1C +:10134000B83F02B611D0D642B19F5E96B4FB14EC02 +:101350009E0CD8270BC539A7F67D21D3AD1BC6FB44 +:10136000CA1AD7EE04F9932CFABF60E2FBF5ECF24F +:10137000D02318E77B66B9AA56EAE29CE66D59F2DB +:101380007A1AD04DFDEEA4528A3917DFEB9F3E1436 +:10139000877E8C611D26926367771EDA3C17E9B35E +:1013A000C3C462152A4FC6F2731DAFC5FD08BECF78 +:1013B0007B3C81EEFB68EDEFDA324EADD4F1BB7FC2 +:1013C00075FF697CA1DEC9E1F0D2A8CEAA0CD8676E +:1013D0000BB7481EACB6B0E396A937A14DF3B88160 +:1013E000FC1B6546E63394E23A7EFB7A3A7C6F78E2 +:1013F000656419AE07BAA8C1EFEB64DFA462E44BE1 +:101400004F9A281E1ABE1F9181CE0E166E309F82F3 +:1014100075FC42E07BDD347B1DEA97D0DF6119DA91 +:10142000C5ED905491FF10EB775774C4A1DDF2899C +:10143000C9DE2CC5239D361EC3790476F17E5988FA +:10144000CF7BBEF083D7ED37911DD2F0D4AAB8720E +:10145000F4937C67908CC8079E92880FDCB5259228 +:10146000BEEAA0EF5418F7EC3607F57F3629988DC1 +:10147000FAD5594730DBC5DB13FFABDBF9FB7F2027 +:10148000BF9B1F8C6C1F4D0F87C4BAE0AF504F57E6 +:10149000D1F5901319CBC2E5F5CB400EE8CE21EA89 +:1014A0004FAF37A39E3EBFDA7CC9F1802E9942F040 +:1014B00088213B69E13056A9F07802C90AFD9FC531 +:1014C0007F811DB8700AF36ADFE9DC00E91A48F68B +:1014D000AB13BF7FC800F49D8EC843FFD7F3B1E4C0 +:1014E0002FFDF43333C98DB3DDA050C0BA17A74E1A +:1014F000DD5AA99BDFB9BD87E2707EE794509C0B53 +:10150000ED79A1EF9F73F2FCC2EE75E47F5ED171BD +:10151000280EF9EAC28E443A4FDEB74B72C900E793 +:1015200073DDBF8C65FDECD305DDFCBC389A0F691B +:1015300072F563FC27C8DFEE64F52FC908670C0A53 +:1015400007F99F92D858D2D84F7F5ABB4F93152E88 +:10155000A724DE3EC5B094EA27A7F9CE2743796ACF +:1015600045A78AF789522732CF2AA8F21783E75E68 +:10157000E72094937E33D9CD4D4934CE5D0CF002F3 +:10158000DF671B59C808F4391BE5ED70CA13FC6608 +:10159000EF9482A8CA395A2D11E74DF336425EBF47 +:1015A0009EC775E500FFF9284FE3E83C27847ED00D +:1015B000053B22EB2F64211AB7FED9EF2DFA7E519D +:1015C00081E7F4A69AD19EF9BB804F729A6A49814D +:1015D000EFD2142BCDEBEE5DA0B7017DB8451C41D9 +:1015E000CFA6788A3F5928E4F85CCB015A67C3FD3F +:1015F000B3D439A08F7CBE6CB68A673A245A70DFA8 +:101600006F91387D55B25016CC7386D06F16EE9719 +:1016100042C5909F0BEB473D62CCB352C001F26BC9 +:10162000AE9505E290DEDEE3F8A917EBC27AF1A5EC +:1016300008C7008D979BA2107EE6B34E33BF7C1186 +:101640005C950CE32DEE06DE00B92307CAE2917E1D +:10165000BE629E78DC97A097B018575F3C47C3B72F +:10166000EEF12878EBE19987708CC4CFE23D00D78A +:101670007EE86D93E0FB27991AA1676AF7EF36AD14 +:1016800090B8BC084C9E8EFC7AF3F4B2323CAF7C2E +:1016900018FD61E9A2A351C80F99167717B2C23895 +:1016A000B66B7AF3545EB692E76F4CF9C5A42DA0E1 +:1016B000FF6F36F9D3D00FB37932E8BD5C6F894143 +:1016C000BDC59BEEAF4C41FDD2E07B1D8FD84F973F +:1016D000AB05449FCB389C1F2D6D1CDA7809BD34B7 +:1016E00005C68E7589F9A11E556C273A48C339C1C4 +:1016F000774736FFEE186EA37B5529321892FDC04E +:101700005B4B538C60AEBB28650E4C6120C725EA4D +:101710006BFA620A2A4DA8770E6BDC8DF495727B0A +:1017200051E9AADCF03C374BB01F516FFE19BF4F97 +:1017300013BB7F772803EA2DF22AE47F4CBAF544E5 +:1017400021C62F2D49E1FEC778A1276F955813FABE +:10175000055281CEA552CCB7A52D85EF23F648A41E +:10176000572FDA536E5864A7F573BD3AB6719B8C48 +:10177000E3DF5148E3035EEE9802DFEF4DE1FC2228 +:10178000CDCEE93575652017FB893FE85BF21AC1BC +:101790008DC79F213C69DD56D68CFA722A5B216188 +:1017A000BD35499C2ED6CCE27A111ED1C5BB78FA44 +:1017B00021A460FD369938DC8C36FEBD09C7D914EA +:1017C000C7E795241BEE988CFA7F29CFBB1E90D4D7 +:1017D00076DA8C6D1C8F16E6C575E2775C174C4384 +:1017E000DD6DD7C1776C6309CE2365104F8F7659B5 +:1017F0000318A773D4ADE9C1213B233DC727A33C00 +:10180000B847C8FDCF4D6ACA35284FDE3131B457CD +:10181000DCD951F5F30B797D216FBFF68C8D47260E +:10182000F1B55D8D4F8074AF89DB0BD178DF9122EC +:10183000F4BB8B192CA893230DB5DF90BDD070316C +:101840003BE2FBB9E5B092213A79587790EE952EBC +:10185000629D14CABCA8C3C082BAFDBB37868F7B09 +:10186000E14F16E25777B70C6A477D3D7ABF365C89 +:1018700034B000ECBD6B0D32D56FA83553BC71434D +:10188000B3611B9EC7355C34F3F21CDE5FC3C544F5 +:1018900016C03348A31287F71DAF357CB1662EE220 +:1018A000FF1589E2CF1A2E265379EF7A2E4A91F945 +:1018B000BD17C4FA8CBC9F515D71C8A7357DBF1A96 +:1018C000E42AF25B4DAF66AC2B0EE17F6A6F22F12A +:1018D000BF73CB8191021C4E89FBCEA7827260B090 +:1018E000CE3E38A5C5E589F9457F3FEFEC22799CCE +:1018F0006EE0F78FCF2B3CAFD5C37284E7F95A8DDA +:10190000CF848C88CFC73C078C184F52EF3950C515 +:10191000747415867F2CDE05EC857FF2AACE900CC0 +:101920003CE54CCA973F2F1A0A247A50E36F5FFFB9 +:101930001CE379920D7204BFC3D8252D0E19496995 +:10194000936C10FCF2EF3FAFBC4E9FE7F5C3EDBFC9 +:101950009984E5238A78FB9E940B6FAD247F869053 +:1019600083C69E6C9F4397B746E5ED902FD6E59DC5 +:1019700051E5EEA8F2D4A87C26AF7F7B7CD7480344 +:10198000D89EFF99F29F93F0FED1ED195D3FC6FB03 +:101990005EADABBE9D5409F9D92338FF5ABC5F2216 +:1019A000FFAC06BFC51E46FAADDDD365463F6BEC06 +:1019B00008CFEB32D4ABDF2B513CAFBD637708F9D6 +:1019C000513DB65374ED3AB85E5CDFF131B51BB0F2 +:1019D000FF4299F8C1BAC253546FD1B2CFCCA8E735 +:1019E000B5281B7C285F4B6485FB5D5940CD808604 +:1019F0008BF74E663C5E95F3DDF369EA219C4FE080 +:101A00001589CE417BE918FBB587F79156FF3F8AD0 +:101A1000F7BF8F7131B1F77CB1C208F5FFB4E86F41 +:101A20002371BCFFC02AA3918F0787A27C9A5977A4 +:101A3000E750FC7EDBA2C107700A274D5D4F607C3A +:101A4000C998D4C46A84DF49475716C62B5FB725A7 +:101A50008BE793BA9E4078FE664B7635C6A39CCC46 +:101A6000EACA92215FBE653A2F1FDCF504E6EF4F0C +:101A7000BD9E97177765199C28526EA846F83FE5DA +:101A8000E47CF349B0B391FFFE4794FC2E49E5FC9A +:101A900068D910B52815D753CFE5E71360AB598146 +:101AA000AFDEFE58D7AEA7000EB7FF2496CE779FC5 +:101AB0003A3775A28FC3C9877A7B0A277D9D1C356B +:101AC000923F4293A31A3E1CD99D0AC9992839F71F +:101AD00071B2BA07C7D5D2F57990023CF7A42AC2F1 +:101AE0002FD758A240BF3367DA3DEB287EA16B2485 +:101AF000D2E1C3317C5DB07F08CF768197F1A95CDC +:101B00000E8E4FE576A829651CF507F641C08AF8C8 +:101B10009C6C26FD6DE36435CDE6C63499E2A5C321 +:101B20007E1213D9471BC57DE98D8B06931FAFD756 +:101B30002E7884DB171ADF9A817C4BC7E736CE1FDD +:101B40009B867C6E63AE9A86FC45E3AFCCD89184CD +:101B5000FE7E8D9F629EF35189F261BE07F574F798 +:101B6000387F64623E7ADF615B24BFFB9104DF8BC8 +:101B7000C2FD5CE9F78D097C5E9A3C4D59D541E781 +:101B80004B298FE6BA48EF40C18CFA5BDB90768434 +:101B9000B7377D0AE165E3E45FC6DC5914A6E7A721 +:101BA00087A84B11AE3344FC9C4637F8877EBED9DC +:101BB0008FA46CC3F8923D020FA765D0CFF0BE484A +:101BC0003AC7F31EF4C953CACF1D66B2AE1FE3FE77 +:101BD000F8FF78FA6FC7D3AFF0FBBF8BA745CBFEFA +:101BE00076657C53ECCBCD52C894C2F926F74BC036 +:101BF000777C2FE2F614FFBE54DDB9CEED3F5D9445 +:101C000046714A623EB1F7BDE4BD15B2B72F38DB6D +:101C1000CB6F98C2FAE8ED273FB2B6A25FF0A4B945 +:101C200083E4C349B05357201F157EC49362DD651A +:101C30003F597814EDF584347E3E8AFE01A6A7ABA9 +:101C400016CF073FEB97BE0CDC2E7CC540F6C0C616 +:101C500092E0D679587E4B11C5D1C7083A023A2393 +:101C60007D89FD94FB09360E3E45F0DC389AD1BDE6 +:101C7000B98DB9BC7CE3F402BABF05F41520FE3877 +:101C8000DD46FD3261277F5E9B1A44FC01BDF17188 +:101C9000E7CBC43F35BAEDAD979F17443CF5A5C3DC +:101CA0009EB8C93AFAF95CF8093F47FD285EF75D2E +:101CB000F825402F88D3BFDF71B9EF1A1D26AFD2A8 +:101CC000F603A7BBD31B52C8BF0C6A4B01EE83EFD0 +:101CD00052B91F52E3C7F9E9FE7F207FE8D5C73527 +:101CE000BFC0C35944AF6B1D9CAE1F8FE1EF647C36 +:101CF00087FC5E471F8F83FD82F207ECF7EFB19FF1 +:101D00003BA0F95EC8DF91E27FB50BC75DA6D1B1FC +:101D1000CF8C743757F80DD80391F62DC657F5E6DA +:101D20000D7DF3F354EE37EFE39760DF5922DB715B +:101D3000BD27B6A8C784F4FE680CB70735F9B60509 +:101D40000FE1607D5BEE8FA5F735B47A5F9DB3C977 +:101D500018CF9C99C6F7CD91A3D7C4A33F5DB3E339 +:101D6000A3EDFAC5B804E8B701C6467F7483AD8B0E +:101D7000EC5ACD5FE1FFB981DED3B8D6C0EFEDF408 +:101D8000FC56227A92A65889DECEB418B6A17F03FB +:101D9000DBE3BA1A4027BCCE85F4159C8FFA4CCFF2 +:101DA0007C1BE3F4E79F8FF33D553B8C11FD09BA93 +:101DB00082F1B2490F4EEA22FF5F03420CFB097C1D +:101DC000BB9C07DB004A93C3E764E8A7D6FB0FCEB2 +:101DD000C37F78FF41A35FC807D00F1AA657250E0F +:101DE000E9A55EDCE789D6E769F724933F9EEE69B3 +:101DF0005E4EAF5F2C7F5CB054A7D747DB5B08CF4C +:101E0000EB4A293D6C207C7595F91CFDD4934F510C +:101E10003F03D9EB8BB7FC8DEE3BE1799D9E4EEAFB +:101E2000C3F4247D2FE1BC75F4A5B3E349CF477E0D +:101E300051C9E8DD1887C8C77A3BE91D9706E14715 +:101E40004A3AD8558578708CE86068D73774F3FDC6 +:101E50003466FFB64368F727783BB3107D0DC24F59 +:101E6000AAD19F36CFD1FBDB0C68A71CFC8CD35DBD +:101E7000C5A959D3917FBF6C4BAB40FF9637DD5F4F +:101E80009F3652E72F611D4437B31F959CC85F5E94 +:101E90007631D5497052F2114E152E7E8E526E1B40 +:101EA0005AF457480F9ECA2D3241FF2BD28C34EE84 +:101EB0001059BD1BFB3B3F403CF7F234718FE3648C +:101EC0008C1FF5B30A5B0CF1C987370C69B7E48640 +:101ED000C79FB339D785E32F4FE3FA9B37DDB73C74 +:101EE0008DF43F4F19EEEFC5695C4FA8302BF948D0 +:101EF0009F2FDB522A70BF4FD0CEDF02E5F9F8EEFC +:101F00004D452A87FD04AB25E4A073B9F543915FE5 +:101F10004D9E63E3FA23AB26FAF20AFA7D3097E38B +:101F2000E1C109DC5F794CEA70A39C93ADEBEFC192 +:101F3000EF13F31D1EC4CF3B524216FA49D97C530E +:101F4000C2196BF89D9C81E80519DE196D5F18E8D0 +:101F50007D1395B928257F0FA401CC6FB6B180847D +:101F600072DC6621FD05CB793C87F238CAC16AABC9 +:101F7000C5897E3407FACD787B15FD39D5D6DF7F4C +:101F800088EB463F20F24F2857B57E7939EBC0FDEC +:101F9000C53CA673FA779CB6C670BF21B40B207FF0 +:101FA00075E0B547DE2EC4C7CD4CC0F3616D7DAB87 +:101FB0004C1D2538BFC022BB07E5E6E3E5014BB663 +:101FC0001BF9764C09FA877738CC2117CCE37702D6 +:101FD000CF306FB20B4F097AC88F3387F05C5CA3A8 +:101FE000BFF498F2DF215E3578AC8A01FCA05C9EDC +:101FF0006BF3A01CC57988F944C0290C17EEB7AF64 +:10200000A6A1C27001BAAD7496EAE1630FE1397A14 +:10201000345C068287B60E9CAF2BAE2F5CB6C8BB75 +:1020200017127F3F6FF370FF5C149CF0531AC9AB1B +:10203000F7717D8B99FF062C5C6C652AFAB3E65923 +:1020400096905FB74EF8CD193A0B414F398FCE4B72 +:1020500080E7F96724921B782EA3E7A778CEA2CF5A +:10206000D76BFEE19D517E5C21FF16A17F19D38EB7 +:10207000C876C0F9494E36EC8DF69BF7F2A728FFDB +:1020800019DF178F6DCE25FDB00B813D1A3FAEA431 +:102090007D8F7E39AE0FA869E807DA3C3FAF14FDAB +:1020A00034B146AE57CE5D3FA47D85D00F50AFD042 +:1020B000FC79DA7EF6A657B074E8E7F3F48AFF44B9 +:1020C000FE414EA1D197DA4F7C9E5A3DF4E75DEA7E +:1020D0009C6329F23FD07F62D315CE4FDE189C82DD +:1020E0007277A9A4A470B95B10913F63F0D33987CC +:1020F000E68F9F8FE70C86305CE7093FFE3CCD6F93 +:10210000BF25F2FD3CC4933EBF408727FDBB7BF556 +:10211000952CE488C293BEDD62C013B6433C45C42F +:10212000936FE4EBBE43C8098D6E131ED866603A08 +:10213000BF457CA99ABB1AE5FC1B26F2CBFE55D005 +:1021400025E0A10CF5C4E4B40A533AD4B3A1BD53BD +:1021500084FA3EAB437CA31F18DFD53BBF9CA9F993 +:1021600026C26BD9947EE4E4BA7D3175482723D228 +:10217000E588F7483E4DE371B2E4BF47BDA4C522F0 +:10218000F45C251BFB29CBD3F44785CEE7E788F326 +:10219000E9C5D3EC7EECEF94385F50D339FF57D3C9 +:1021A000797CB896D7D6A7C561A07F5AEF5FADEA14 +:1021B000ADC7FDC2A0DF503CE7665330662EE96331 +:1021C0003E33EA635F9EE37471E4C8ECF938CF2FC5 +:1021D0006B6D0CE3787C482730DE1C712EF625539E +:1021E000847E5640FA9A96EFD5BBB619484F67C61B +:1021F000C63FFF0CE0DD7D34D183F4DFABC77F62E7 +:102200008ED6E303A87F75770C0D0A7D4B95487F2A +:10221000E370FA44BCF71078A558BC33E1DF8AE7D5 +:1022200028DD1D491EE4FF67301E0340DC6D0C3EB7 +:10223000FD4BE497FB63C8BEEA167AD379B9271B36 +:10224000EF3477F7EA4B01D297CEF4EAF7C18CA9C5 +:102250003A7CEE13718BF5E65001EAF75A3B2DAF4D +:10226000C50F601EEF4FBE2CF879BD8DE7D75AFD24 +:10227000F7E0FE7DD1CCEDAEFA38F86EEF0F3E9C64 +:102280003F7437A7D03A103E12F98D1D11F0E9D5F1 +:102290005FB719482FB8D6C0F962CFEF24019F9ECF +:1022A000423A07F9A4404139B4F21333E9DBFBB6F3 +:1022B000717DF7739F99EE85740B7DB23BCA3F1C0D +:1022C0000D97CD623D1B4D4AF635A867A17E87E785 +:1022D000E5CD3C6EB721F89799A8EF35D4FDF3769C +:1022E000FA1E158FF1B9D4F55001C901FE5EC8621E +:1022F000272FD3E0A18DDB20F45CE6EE49EE4FEF13 +:102300006CF8648D8FE2D9188F5F1E23586F9F7A07 +:1023100051E3931D56C6F5733AAF8C8AFF60FABC41 +:10232000A16F7E57EF7E89FCFE3CFA9A93701E9156 +:10233000FD9D3605E2C6105DCBC457166D9C753BFE +:10234000C683E426FB5F447EB26FC3DA32710F9E10 +:10235000FC14633ECD243B8FADE7E7C5A74DEAED06 +:10236000B85F132A43E63B75F0795BF091D916AE5E +:10237000BF33E0BB7ABEA3959755F47F9E72349D20 +:10238000FB2F1D225E8CB1A916D40FF6E13F157DFF +:102390003D6E9FBE2DE4414E37F73F8FE9EE398009 +:1023A0007799EB3B4A286E23E78110F189D32616F3 +:1023B000423FD4E9AD9C4E7159D8EFBC51BCDF7996 +:1023C00006B04F7571640B04DEE659C09E05BEFC75 +:1023D000D2CE728303E3A21E973C31507F8CE0DBA8 +:1023E0006837E5A01C11F14675AC734D17F43FAF8B +:1023F000955947519C59D0904170A6D86116372AFB +:1024000048F1661A7C40FE34C541BB056A90CE5344 +:10241000A2E338983E2E03F181F1033A7D67D1FAA9 +:10242000168A47E8D5173AA2E30BBEB344D24D2033 +:10243000429E6A72F41BC12F35F932905C057DE82B +:10244000423AC71FDFCFBB2582E722D6C8E3098403 +:102450005C8BD65FCE18B81C9E6769A3D49E914B47 +:10246000E32D605DE27C9CEB3397C3BB3D438EC0A4 +:10247000777D370B5D8FFA5D86126137D53FC0429D +:102480008B86F314ED06803397F7562EEF31B55D4A +:1024900081DC8F96F7D1F23D5AAEA798B91CD7E8E8 +:1024A000437F6E89FACD98078206C4F3EBCB838F06 +:1024B0009C1ECCD88598B8E118E7BBCCCAD3FB6C7E +:1024C00071ED985E88C90E22BF0A209C914F9E74C0 +:1024D000903D7341F66C7907D2AAB59C7E56B570D3 +:1024E000BEB74ABC975B95C1F74F7106E707B76562 +:1024F000F07D7210C733E1BDA79D346E95B5C488D9 +:10250000FB7B92F38B6C235431803E140BFC1578CB +:102510003EED77C35E07C55554655C1F423C1F7294 +:10252000981583F053DA012FE359F80FDF3FADC25E +:102530007FC090E3ED057F45FE5A25F05E6FF5FF05 +:102540000243E73F33F97F8517F86FB0FACB33606A +:102550003EE398D284FE80B1C3C7D33C8C4CADC05F +:10256000EFF14C1D9B41E73099CE33B17DE9565BCD +:1025700087365F6D1D28AB504F35ECB7501C6FF49C +:102580003C0D625DAB7EE7A0F3FF43696FAF41BADC +:102590008A9EBF069FE875C0BC6B3360FC6FD2DEBD +:1025A000B91DE9F75E5B6E13D687794F17F39E91DD +:1025B0009134F0BC8D981AF0DE84231015BF3D874E +:1025C000DA7546C68D6BF747C2F1CC3C3DF419CBAA +:1025D000433F006BE6EF068F13FB639CDDF231EEA9 +:1025E000B7550E46EFB71E62360FFA950E9AD85EB3 +:1025F000DCE7D05DBEFE1DD9438CEFDFC00907E9E3 +:10260000279295C781819EA260DCEDA1188B4AFCC0 +:102610005E5122E2A635BFDFA13F6590DE7330C672 +:1026200062477AC5FAC85F0F4AD6609E14A66BE669 +:10263000D6C547E7F5A5735465BB4BC3F4AEBD7370 +:10264000F30BC11F32C47B2F59E87782FEB3EC3203 +:102650007F1757D88D63C57AA2E73916DFFF453952 +:102660006D8FB40FD9FA47553DDC0E223CE3C370A1 +:10267000D5E0183DEF3E70D802F02FD3C1DF6AA13C +:10268000F798018B2CC3D54FFB28FB3294EADF8EE1 +:102690007473C1C4F5CD9EC95692C32E6F0FDDF77A +:1026A0003D197E5F86D679480C2BC75E978971B13C +:1026B000FBC5BE8E9E97B69EE87546C3419BEFE56F +:1026C000D67958EB2F7ABDCE01DA47ADF3A0D9F712 +:1026D0002AD2F749D6558C789C843C4477CE1ACDC3 +:1026E00007DF12FBEF4AF921638D57A3DCA8FAE15B +:1026F000ACAFDDF40EE98E9BF15DD2AAF1B3EEC171 +:102700007CE913F7DF6C0722AB1A2BF17BEA190F78 +:102710003F8CF770AA6E9D754F12949FCD2AFEA133 +:102720001BE455D58F2471EFF6273FC478D4AA3B1C +:102730002452DE9AB2A17E11DAD37E13C60D4C1359 +:10274000EF6A411555EF1FFB73063F97F8B3C04B77 +:10275000979047041AF40DD6F23833B0634C53E81F +:10276000DCDD6FC2791FBB9EC978FE31CDE8CF5A40 +:10277000AFD3A38EDF64B94DB5F37AFA73A9AF0472 +:102780005FD7ECFB68FDE94B31BE767E8AED6F29A1 +:10279000D697733FDF57383FE8C7AE70398AF3AA40 +:1027A00029E6A95EAF3D3EBDFC35BC6A748B07F8D7 +:1027B0001DD297D9FF0FC4E7A1B4CF1CA41F1ABB29 +:1027C0008A711DB80FF7B9E8FC3B80F18681047E61 +:1027D0005E34CEEBD9711FA4C78167A3FE7428CEE7 +:1027E000B2AD0996302493CFF388C69F188F852702 +:1027F0007E0DFDB6C53E94B914E03631D342F7C420 +:1028000026DA391CDF1A2C69FB9FDEA1D2F8763557 +:10281000EB34227D8D2F1A427CFB66D643791F73E1 +:102820009A309DC23C947E5EDE55467E004D2E65FC +:10283000F5CA257726FA155890DABD1EFB2AC995E8 +:102840003FF6CE2F44FBA297DF44F1D301F90D4EA2 +:102850002F397CAEAEF13B698EE0B76B02C4DFE28C +:10286000993F1FC70FF3BB4E89ECEB511EF10E765B +:10287000E4BEEA3DFF1A2A11FF6E8B8D237B6B525B +:10288000A1D48EF2EF6553C761E2EF132C645FC1F0 +:102890009F01EFDF127CA193F185D22C84D3A32872 +:1028A000DCA09F23253C8E72BC92321BF7D9782F77 +:1028B000C0312EBCFEF173D676225F1C5FF8CE0CC1 +:1028C0006C7713EB32623F3FC4ABED30DFC9CC33E2 +:1028D0000EDFC0AAF125D0FB3E538A24BA4FF9DEA1 +:1028E000F22324AFAFDEAFACC2EF933CB9F47E96D7 +:1028F000271492F1BD95898509142F7ECD519EBF75 +:10290000695402B52BDED3B512F33F5413A8FED59C +:10291000FB9DE5E4F7AD49F06079C24C23DF57F940 +:1029200052EF3BEC7A7AF0BEDF548D60ABC92C20BD +:102930003A1FED935815B41F5D23FD128F7656C6CE +:102940002EBE8ECE39034F1B90BFDE2AF0983093F7 +:10295000C7A3DC3A73B209DFBF047AB917D787F28D +:102960003F73645FBA7911FD9508E79BB5FDCDED26 +:10297000FEA9BE21C175625E357A39850722C9611B +:10298000FE7A5C12ED67F177A1DEFC2318A0C00F80 +:10299000C656E756229C8981C03ADFBB4DA1FEC6D0 +:1029A00016DE3A11F132D6B7B693CAED51FCF7B440 +:1029B000EE3E11E4DF45FC417FA93512F9A998FEEE +:1029C000BE9101E3FBF8FB04A95E4E8F297E73C420 +:1029D000FD25B41FF4F541CFB92F93F837688D006A +:1029E000EF42115F07D447EB98EE9382F83EE04B3D +:1029F00073246646FCFA59D09A4B5B278471F0D752 +:102A0000067D93918E20AF1A74F6D654B13F4CE9EF +:102A10003B9B5CD0EEC868FE3ED4CB526026C1E73B +:102A20008F76E5299DDC7F46C4E95D95CAAC3924E3 +:102A30006FA500FA21AE7A299D9F63A6F27B33C36E +:102A40009672B84DAC9618EA35ACD546EFBCC3B813 +:102A5000DF7FAFBBAF3EB59AFB27263E302288AE64 +:102A60008A174BB5F8C08009997DADCFCF42D0FF12 +:102A7000A454E6C1F35FB948227D670AB392BEF958 +:102A8000664DDE6A37CEF343B3673081C7372E0910 +:102A9000CA6B6A9CE44762EE9BE428BCF3775381DF +:102AA000EF939E67F567A13FAFE2622C0B5D13C603 +:102AB0005B859037A85918757C240BE8C887F08B84 +:102AC000E243E8A04178A6F5E603CCADFD3E01AEB9 +:102AD000DBDA45F076687A8CB0B3B4F708AFED4A2C +:102AE000984DF8F1F17D9E52FBFB0F317D25338F20 +:102AF00080057A18C3733709E905EA1DFF8C952113 +:102B00007F383EC0BDD937049FD7F49C297EC98346 +:102B10002EC572EF0A23DA95B7FA25927F171202B3 +:102B2000879338DFA077192779DB4C682755CE9932 +:102B30009585E7A9C71DBE2CB43F4F672AD45F7E99 +:102B40008D857EE7E0789A9FBE1F17F7722EFCE90D +:102B5000BE3B70BF4C511272D15E295796E4205D86 +:102B60004C9A93908BFCED03319F5A2F1F77927FE5 +:102B7000328D73CB9C5984E7CADA6D99382F6D9CDE +:102B800037138227D0AF776CBA053553965F2DC6C1 +:102B90008D891C6F5A118C07E5E5457CBC5BAAF951 +:102BA000787FCDE4F6EA945A180FE0748B58D7F486 +:102BB000EA6D465A5FE1125ADF07498D59E84F7CAA +:102BC00017C78176F95E0B9DB3E4D7AEEDC4F10E65 +:102BD0002E57D95FD08F1B2587F078CC513AB0FCA7 +:102BE000B916FD4A18BF0B0608C6E93E64F6341B49 +:102BF000601F575406859F3952AEF4C6539F0B92FF +:102C0000FCABB17A2ADD5C8EC9CDC961F9A1C98559 +:102C100047A58EA3A548F70E7E6FE5D1A9F1C4FFA5 +:102C2000DE1D2A91DFEF6593E06F259C4F6B726785 +:102C3000BC17E40CA46D53E389BF4D1BC1EF5F4E7D +:102C4000B3F3FAC7464B742E3EBE9ACBF368F983B2 +:102C50007F7A7E1F9643DCAEAC643E92E31358A0AD +:102C6000E626283FF2DE9764E72E3684D66039D810 +:102C70007127255CB495CBAB7B874B25B84F4B8F29 +:102C8000F41C44B9535D94207E77C87388E4D90856 +:102C900028877C51079FDFCDD509C427A2E518C836 +:102CA000899C2C80DF7B53FF5C81DF5FBF91CBC1B0 +:102CB000E17B79BFBE4A2ECF808F2A5923FBE2F3F6 +:102CC0003DB1EF7BF119BDBFA3F0DBAB4FF8F87E50 +:102CD000646B1A497F48651D123F0FEE9470BE99D0 +:102CE000F730FAFD8C81F4090DEF6F85F5B148FBE3 +:102CF000EA0AF51D6D3EC48974BF8B022D9D68677D +:102D0000678AF66568BFE3BC8B343DA851D383AABC +:102D1000B292C2F34EC57903BE568DF22C48300CE8 +:102D20003CEF5BD3D48908CF7106BB07F9F497EF6A +:102D3000F1F7C026A92D95C81FAA5960B553C79FA2 +:102D400086803D63D4C9B9A1412BD8E6E1FC553B4F +:102D50009D11F9E28ED488FA57EF5522CA4B4048AC +:102D6000EACBAF39E289C88FEC1C1551FF071FAAC7 +:102D700011F9D15DDE88FAD776FB22F2C3985FC6DF +:102D8000455FDF531BD1EE4B1630BA60BDC39E02C8 +:102D9000B944E0503B0B93E91D01FABBF1A23FA2FD +:102DA0009F62716FB99CCD8FE887EDE1EF4934C226 +:102DB000FF108FC3A2DE932810EF60D7EE887C97B8 +:102DC000A200EF37C7611A593FFA9EF2F22C07FDB5 +:102DD000AE08ECF511A847F4C113FED20FE0FB9644 +:102DE0009D2C1894705D54970DDBCAEF5D47AF4B77 +:102DF000BBC7CC0C478D58EFEF20BFF1C93C4B6AE5 +:102E0000245E639448BCC61646E2D5E189C46BFCD7 +:102E1000A848BC26A891784DF446E235C91789D751 +:102E200094DA48BCA6F923F19A511789D7ACC64861 +:102E30007CE62C8BC4576EA02EA27C507363245D5D +:102E40000A7C0E5EBF2CA29D86CF00FCEF52F8BC20 +:102E5000A5A6DC84FE86A93E53C4FB22578AD77DF3 +:102E60005178BDD2FBE7C0FF42B8CF353D07FF2206 +:102E7000EDBFE14FDC0378F5A2FDA7E0C700D93331 +:102E800063FD16E20787D26E3AEC12B4A09703E313 +:102E90003C6D468C8FD1F43B741790BDE3E7F6CCC4 +:102EA00044612746DB8753594FB671505FF970AFC5 +:102EB0002DD724F4FF0F91BF78F1656C03DA877F7B +:102EC000A071DEEB9D7FA88F7D88E73957CA2F7BE5 +:102ED000F9F7CD8DC4B72FCBBF95AC301F24261B7F +:102EE000203E3876D9581FDEBBBF60E271B73D3750 +:102EF00059C83F3FF6FE72FAFEB2C4F5B0C0DB5CC3 +:102F00005EAFF8D30FB2F0DE7945B54542793DD6D4 +:102F10002AD1BEABE896C91EACB09764D946A03D95 +:102F20006291B1A8C22E91FFF2C5EF0C6A00FDFFBD +:102F300049FC3CEF9888DB3D96904BFBF57D87C5BF +:102F40006F85F58D15F7400E46D939C71C3C2EF319 +:102F5000D822FE4EF5B15CA221766C8922E22BDFED +:102F6000A575F7FC982922BE92FC0AFBEC2E1E37B1 +:102F700099D345718B3DA39913CF55C2E7B21D215B +:102F8000D4A3F66DCCE5E79320A4E97CB2ADF75C61 +:102F900096DBCD0F16F7DA8D38CEBEF56964278C37 +:102FA00013EFFCEC3382A4C6F92AFC7D837D22FE5C +:102FB000F2B8908FFB98B282E25C1E60222E3640FF +:102FC000FE8A7DB5055CDF8F9297FB58207F03D684 +:102FD000AFB569F547BC8BF5EB86F1FA2CD24F0003 +:102FE000F58B5EC0FA3E2BD53F96E0C9C2735C8D6F +:102FF0005E8EDD343E0BF76D25D88138DFCA1AFEB0 +:103000003E48A5B3CD88DFA55A2E57370E96D6E396 +:10301000776FBADF930DF4913E44A27A13063F1501 +:1030200083FBF4D880FE971BFE744F3FFE97771DFD +:103030005C2F3B9456DCA4F9CFF5FB4FF31B68FAE9 +:1030400097177FD110FD7E2C44695FBF01EC3B4395 +:103050007FFBAEC4C4B85F667CF648DCB7FEFD5D9E +:103060001C98E49F02FEE1C5F568EB7F2FA1E350B9 +:103070001CE0AB3246E27210F7834E7F1968FF699D +:10308000709BE0FC381BD77D30E642B69E7F35A7AB +:10309000F86FCDD6C5454C7005639C97D09BDF1A61 +:1030A000109EAF9E40FA9822E039C5AE50FCF0B1B8 +:1030B000186E0F45C3716C4D39F76709FD771CC851 +:1030C00079AECF06097ED503F0B14BF8B71A711D62 +:1030D00093007EDCBF758309E705705C929DD497F1 +:1030E0007FBD2FD671A57A6834FDF6F2B59A483FB8 +:1030F000D7C0FEFCFEE1796480F30B49E1FD5689FF +:10310000F75BDE7472FB017FDF2D4D170FF866331E +:10311000DFDF4017C497BC425E0218483E7AE07F6A +:1031200038FFBF33BBDF2AA3DE1F29072BC43B2D8B +:103130009551EF6D5588775D2AA2BE6BEB8E969305 +:10314000DAB9C640EBDF9E2DDE7151D890EFA11C9D +:103150006424E9479DEF1BE85CE0B5A45BE7B4C1DC +:103160003A86FC6218D919AF25FFE89E7730FF64D4 +:1031700001D929AFA7DDB503CB0BFE272FD7E4EC90 +:103180002E0C2281FD53294B73D19F5838E28F3387 +:103190007261DE8763D86D984F65751B27C338A9A8 +:1031A0004579A5ABA09F4A33A37A93AE5E748DFE9A +:1031B0005CFF956CEE779E24EE1D64E113A0A59450 +:1031C0001AD18F93951A343AA15FB3B8F799616415 +:1031D0004D1648CDA9EBED4E849F8DF77BB4E4836B +:1031E00052ECB7328FE7AFF2C47E3C08E723493494 +:1031F0009FAB0AA510BE9F5FE9E2E5D5A54FA76387 +:10320000DC6C658556FFA64FB07EA578073A4EF573 +:103210009B86A27F44F8913E3072FAF820DB4AF395 +:103220007D6966B909DF7D99E6E37EBD9B47AD9078 +:10323000502E4EF3AB23F4F7288F67F378A79A51FB +:10324000BC5E8D6F96698E6EFDD3D41E7A3F795A1F +:10325000EDC746E40FEF47EDF3C9F80F19F7F9EDA5 +:10326000B7FD18FD3E955C6FA911FBFC5DDCE73AEC +:103270007EE9C37FA0BC9DC9F9DC642FDFE7D3588A +:1032800023EDCF5AB69ED219AC83D299AC93EFEF0F +:103290008F7BF7770EDAE5BAFD7D0EF7F12D4CA5A1 +:1032A0007A9DB1C34D3C7E23725F0FC407810F7CB2 +:1032B000993D72E07DF8E6807ADA738F235F9BAEEA +:1032C000E969B56DAF919EE6E57A5A1FBE563C8816 +:1032D000CE1106921303F1B581F5B36D46A19FD9C6 +:1032E0007392C27E7B9D9C70E4F4C3DF8EF5C3DFD6 +:1032F000F4FADA807A5AB5E06797D3D306D0CF2EA6 +:10330000710E3C386724BBE273E0E87366538AFAB7 +:103310009B3CDD7D8D860FAD56E56ACCFB589E1D2E +:10332000EFE3951F1D04E50DC29F18DBC9D46DF0B6 +:10333000FD0971EF61EF2085F844AA99C7C1E07BD0 +:1033400089F8438A65159D742FA72709F42C251C3D +:103350009FF18403DA95623BCE5F7ADB5B59934D34 +:10336000D7BEE2479C3F7FF3A099F8F3370912F9E3 +:1033700087BE996E273DEFD443668A3F1C64E6FB07 +:10338000D9ADDD6BC25F6AC2F3989C5CBE5EE9603A +:103390002A3ABB026C1DA55ADCEA29711FF29B0474 +:1033A0000FBDFBFDCD83C912F63BA775F0CD38EEFE +:1033B0009CD6CC5C8E545E5FCD51A8BF538AFAC5B3 +:1033C000115CD7643BDD3B63CC5F82FE578B61C4ED +:1033D00044AB01E5CA033D47A0FDA22CBB13E9BAEB +:1033E00032E7C4F142C87FB2C7446FF6CE7F6A6A43 +:1033F0007C089B19D5545F715F3B677E30528E2CE1 +:10340000DC19995FD411996F889223D1F2E3AE9CB5 +:103410005EF9E041F970A5769622A98B39FD07295E +:10342000BE6681C0BFC5D2D88D6F835A1E2E2C5D5B +:1034300081F4CE78DC54F223B9A5A8370FC9E1781E +:10344000BD2EC7772FB6B7E4140D47BDB222A77AB9 +:1034500016E1736B8C82F6C13731DC5EF8E6152E0F +:103460005F3766F3F28D8F591489F6BF5A3DB20C5F +:10347000E3A2F8BE6AD8C2E529FC59F93B7EAA1539 +:10348000F1B9D1AC9AD3B0DDFFE0F7BFEAB6DC45C5 +:10349000BFB355CF3AE99D9C5772387D35189E359C +:1034A000E3EFAEE636A94357C07C17FA6CF4FB5B3A +:1034B000C66F8DF4BBA36BB1CBD118EFAF3AF15D02 +:1034C000F8457BF979D2861CEE876DE969F3617F57 +:1034D000DABD37EB9EC9013C0ABDF1DB4A7A5FEEEB +:1034E000AE652FD33D0CB7B927B11CED860765A299 +:1034F000FBBBEEFFDD233CAED1DB89BF2F76E6417F +:103500003BFDBED8A1AD165AFF9957B8FE71E6092A +:103510000E8FBB32ED41ABD477FD4D5248C43B75A5 +:10352000C6213EFEF6C47D7188C7BF69F18CCE46C8 +:10353000BA47CF94C688FB31DB1F37D07B95DB5B66 +:1035400097FE6134AC6BE394192370DD37268CB0A1 +:10355000E17B965AB9169F61748DFA25F2A11BBFC3 +:1035600035D0FE3082BCC4B8E0CA87AB294E76BBEA +:10357000CF9680F3555ADBE91E3CAC8BF0B6FD418B +:103580002BAD2B9775ACA1FB42AD5584AFBAD63AA3 +:10359000C2C7A0A936D24BB6EF77D0AF806E778E78 +:1035A000B261FBEDCCE8EDCFFF3F25C740782BCFD4 +:1035B000E1FE9EEDEFF1F745AB0CD74D4439BCE889 +:1035C0004199E2750F4FF9E838BEFBA9ED2F69CAA2 +:1035D000A8F42E1EFF40BF5F7BA7463F623EF377F5 +:1035E00018E81DBECBED334BCE7534BFE8FDB63DBC +:1035F000E0A1DFB388DE77475A4B6DE8FF8FDE7FAF +:1036000077B6E6D1BB45AC99EFC30F617F90DE7B07 +:10361000E5FBF0CFFDED43963925224E5EDB775A70 +:103620005EE3F7DA79BED5C3D4A7ECF44E06DD8BA2 +:10363000302AFC772A8C0A8FAF36FE63E9CEB701B9 +:103640004E2D39FEF3385E0E534B90DE941E670507 +:10365000AA2B7611CFC9F2F9BDC9CD269F4CF468CB +:10366000F4FFE66DF86E6AADBB06F7BF24FABB2E19 +:10367000C77F01FB99F380FF8B030CE96E18F18182 +:1036800039176BE877C6EC1BB57BFFBE0AFC9D6063 +:1036900093DB4774A9F1F1C130DF6DFDC429E42942 +:1036A0005CDFFA3F1990EC0E008000001F8B0800D1 +:1036B00000000000000BE57D0B7894C5D5F0BCFB45 +:1036C000BEBBD94D7693CDFD06C96E6E0412C226DF +:1036D0005C44045C12C0A888CB4505B5BA8100B92A +:1036E0000741FBC5169BC5849BA2861A2C52D40D9C +:1036F00002628B1A2C2285401750C4AA35FDD416BD +:10370000B5B5895A946B0254C57EB6FEE79C99C93B +:103710005E42C47EDFFFFD4F9FE74FABE3BCEFBCD3 +:103720003367CE9CFB9C99CD8E73E96CF98C6976DE +:103730002B63A319FC39E72A718C3D59A5630FD877 +:10374000A0FACDB72A1BC358A491D19FDDC63C6116 +:10375000918C19C7EA9C5E33D4C7EA3CD7403DDB65 +:10376000C19F9BF139F41731CAC7B0DF6C7C5FC0D1 +:10377000D89224D5F6692CB477B0EEC076F07D37B8 +:10378000BECFCED5D1731D33DACC30D6BDF05FDFDE +:10379000DAE17D2BAFE3DFB7F0CFF916A5B41DBE9C +:1037A0005BC298B5A108E00080DB693CE66C33E3BE +:1037B00038061AE75BFCBB9AB19E9449836DF138D9 +:1037C0002D67561CCCC3CCBB62D7C344183C571CD6 +:1037D000CC6781F1D9CADE5775763F9CE5466F8983 +:1037E000C9E6EF4796E502BE1F09F8C639A09E3B21 +:1037F000307CCC6623BCCAEF257C863AB3C60A0867 +:103800006EC600DFEC6E9D371BFA33A42499592451 +:103810007597ABC1BB5416EE784061EC89A4EDD32B +:10382000F0F957A6C80216059F84433982B10623D2 +:10383000AFFF4778E4662C07EB98A6C0B8061D9B3F +:10384000ACC460FB342F7E17170E258CF71FAA8B94 +:1038500031159EEB5A1496C9D864015F22F3290AE8 +:103860003CDF58B9BBD00AE3C6D79B0B558027C5B0 +:10387000E49C6223BAB0A5B92C8C7DAC6773DACD19 +:10388000FDF192629A741DE17935AC490263F3E867 +:1038900013C6129AF8FC7A2B75DECDD0DFBC2EA5AC +:1038A0005B417CAF9EE2EC92EB9A01E3EA5A8C0812 +:1038B000D73D363BA7436317C3F93F368E591F8068 +:1038C0006A12736C5033FDEB582FD651E950F8FA59 +:1038D000C11BE318FFB8ACE5673038E0D7CADBC9D5 +:1038E00071E7E56BBEB04B8C8F7F8170CBF6118F8B +:1038F00077DA11AE81BEDB64621E630CD28FC386A1 +:10390000EDFE99E1AE453CA43695D910BF8C75DA31 +:10391000116F87927D1AD60F996C831C401FD38C30 +:10392000AF1DC3FEA71959BB8AEBEDD09FEECA0DA0 +:10393000846750F4F13C5A2A86F8AD6B28717D3AC1 +:1039400012506980F1109F330C84CFBA7B27D1F3DA +:103950007DCAE2BFDC07F8F2BCA5776C856F5A67B9 +:103960003893C3E3B04CD079807E76FF53E5EBB05B +:1039700002D601EACACCD26415DAD7BB0CBA30E859 +:10398000A7A4E39CA10BD6B57E4FB7810D071424E5 +:10399000CD7ABC1CFAAD345EFF38D26BEBF2E26438 +:1039A000649EB34AD7933FC6712ACD8EAD80A75689 +:1039B000BB333906E67395AABBD385CCA559C3673B +:1039C000C07CAF4A677DF599585715AA9F00FA79D0 +:1039D000919810DA0DF7AF67BAC07B9BC6887FDA83 +:1039E000BC3A4F36D0B3B20CF813F0D3C66CCB91BF +:1039F0001E3CCB18CD8F69ED3E1DD4DB4A6D0E9475 +:103A0000535E0B2C4A14B6833F6C67367AB7DAFDE7 +:103A1000E3E3F2223D248CE5388676A548C7924E32 +:103A2000EC829E5AA3F97C2CF92EBBD9C1D8B0F4F4 +:103A30008D6F87033D26A83A60766AE2616305DFF1 +:103A40008E137407FF5AAF03FCA6E0DB6BD64D1E46 +:103A50001F5017EDFBBEF73C3C03DF1BA16FF91EA7 +:103A60009683997375B2EE44B9B3CAE27FAF25412C +:103A7000FB6659BF7DC6942C98AF22EA9EF21627AA +:103A8000C0FB8889058D17089F16D2BF1EFA37DB49 +:103A9000E4F7AD37627FEB8B64FDFC234E80EF11C2 +:103AA0007D707F44F2E27BACC8F18C4F17AE5B3B7C +:103AB0001ED7CF5988F4BD26DDFD16CA0B5BAFB506 +:103AC000189683ADFA605ACB081BF2E12C12BEFAAD +:103AD0008BB3492FE8E314D21FFA38E64C07BAAC8F +:103AE000CFCAD8ACE29C349B07D7CF64B715E1BAF4 +:103AF000FED1A6903C28D459495EEBE326F952A1A9 +:103B0000999E3936BF058B363EDDFD218E97903E5E +:103B1000ED4818AEDFCC61056EE8BFFCA2E6447A42 +:103B2000CFCE32781568676C65A46FE47A87091E7A +:103B300036221EA8DDCD5B71FC3176F75F6D01F298 +:103B40003ABBD566C0FE9E1672AFB53243A7E4FB02 +:103B5000DFFFDDA623F8407F51FF0FE4CE2C364176 +:103B60007F5AF4E4D1AACDDF2EC39AA5C3F9670C1E +:103B700012FA11F4EE246897D1EA4E40383234F745 +:103B80005C9C77C69C85068F1DFB5569BEA3567B42 +:103B90004D93702D2B742C1BFAFB58C86BBDB5BC14 +:103BA0000CDBEBE718CD48BC1B5DDB4CD87F76EE19 +:103BB000E6D519A84FAC9A03DB67C3BCB19D76EF7D +:103BC000AD5E94E7129E07AC5A29C2314675DF45B7 +:103BD000FA27769C13F96570CC75A50EE0B754757D +:103BE00067E152E8EF3105E69DDF5FDED765F075EE +:103BF00069565C9E1B91DF0A1943BE94EFD31D8C5E +:103C0000D637DA6EA076368FB518E5D6F8BFB90884 +:103C10002FD1768DE67740EB8AB022DCCC79D73C89 +:103C20009CA7CB6C43B9C218F037B48F6BE4FC6D22 +:103C30008CEB7A7004BE77E81CD9C4FF9CCFCFFE12 +:103C40003A7133E947BB3BCD1E8FF3E97AF4469CCA +:103C5000CF831AC927A671799536CB5C847A644DD7 +:103C60005CD7A3A5503EA1671E13C8EDB58EFB9D82 +:103C70000ABC3F10C7AC0857042C53127C6F362B7C +:103C80005E06FD8E023E4539C99214D2CF6647EFDB +:103C90003BD8FF75B6771CD8BE44F31D247D166251 +:103CA0005F105141BD58D4B2818D8E1BD1BE61CD04 +:103CB000DFC6FAED8E29CCD98CEB27ED91C70C200D +:103CC0004FE0D3C774462F0A86887CA76A81FA9D85 +:103CD000B9CA78822FAE93A94837A0BE515E66E478 +:103CE000CE3430589F052D9C9FE6093A649A23C52F +:103CF00005F275A23D42D875CD54927EC3F9AC351C +:103D000078B7421719AB618102F43963CB793BEC88 +:103D10000FFA31DCCFE578C628BE9E80587A7FAD99 +:103D20005D11FDDE2FCA165E8A71259FD5239FD9AE +:103D3000B8DC08D4CF52BFF6549C8F447930AF43DF +:103D4000F5A1FD7739BDBC1148CD84F4D6A1927C94 +:103D5000F7F7F3F7489B79E07EDC082FE0F7D0DC3B +:103D60002F23BB60BC8D1D4F9B106F8FCD000D4D61 +:103D70007A0AA81E4A93E65A80740484F6700E8C60 +:103D8000B3F16195ECE0C7944EA7CAE99CF4CF9DCE +:103D90005933EF7A15EA31A38615215C491A33AA03 +:103DA000404FF70ABC441D02BC41FF8F2BC022319B +:103DB0007EFC3EAEAC4B5E02CF4795727CC6943A19 +:103DC000D55A281F89EE9D827CDB7B2D639BA1FF4A +:103DD000C488C56D48FF8977E61635C13CC347B234 +:103DE0003B67C2773F1174920CDF4481CC4EBADF3F +:103DF00063C7FEA20EB9089EDEE1E18ECDD024118C +:103E0000E66E89A172B509DBB1E50AB65B19AF10A0 +:103E10003FAF2C033D9C4F6CA445C5F0F218948A2B +:103E2000C69AF5F89DC6B470FEBC19C7591FC9E7FC +:103E300013AF53EF9C914FFA82EA31C0E79B117E9A +:103E40007B34C19518C64A71BEF81CE907EDF39D95 +:103E5000F03EB16471218E9F98C9CB07843DB49127 +:103E600079376C45BCE61AAC88D769B947BED32E02 +:103E70005A9D386B03AE4FCF99E34FAE8067EB97F7 +:103E8000CF98BB00BF1FCEED11E6D9E99845FA3EA9 +:103E9000D87E3A7F3A5CA780423A7A34330AED9C66 +:103EA0002D762E4711D72C19DE335B9415E03A7A24 +:103EB0003087DECBFA853FBD6645A6BD0AF537AE35 +:103EC0004FB481EC27408C07ED0FF3CE64EF0376FF +:103ED000B2777CF4FEA5307A2FEDA6B38DAEC7275E +:103EE000A3C0D25C2467CC3BB31D2887C01E22B977 +:103EF000DCBBDF4276DC09BD93E4B967FF10DB561B +:103F0000698CA01CDACFFB67B95D0568479AF5CCD0 +:103F100085EB676EE3F691A42BB302CF898E7D56B5 +:103F2000B477CE326E4731CD99346BB8BF5DB39064 +:103F3000E735065F0EDA39F23B594F09638B653D71 +:103F40001AEAFB84DEAB09E7F55546F7EB88FFDD9F +:103F5000065641FD44C27373007E0AB53EFC10FC58 +:103F60000F0DF6A27CBE2A9DCFA7778D12841F6508 +:103F7000A691F4F4F1426D7398E2B7133FC9D5F9F5 +:103F80000C0581F6A2CF3A23601E120FF3377CF6A0 +:103F90000FF46B243EE6BB0CDD6A417F7CC8EFE684 +:103FA0001795931F35BF6AD9742C43F55A5FBBD55B +:103FB00061C2E8E17EDD715C0398F797A6490624AB +:103FC000AA1FFE748601E977215B4C65056B317091 +:103FD0007B9F197560AFD9566B345FDB76C56BB3C9 +:103FE00073F1A723DBD3AAC3E7D5208E37A208F746 +:103FF00080F4B8021E2B3A05ED2C5B33D41301EC90 +:10400000359A07F550DBB108AF02ED56C5D90C481B +:1040100087AB9A75DCBE5DCBF511F49B8474E169C6 +:10402000D639B11F43864A749D9621F42E988A048E +:104030008F289BF5C22E17E32D673A1F963A859776 +:10404000ABD02EB8847F27FB6BD62F36A2DDD23BB8 +:1040500058674539F3A5C13907E7F3654C0E43BBF3 +:10406000A5D9B27875297F4FBCF5A5C9574AEF0B82 +:1040700075DCD04576433BE77D531BD2C537761DB3 +:10408000E13514DF0B5A82EB8B3604D72BBDC1F51B +:10409000F9CCFD42124CBD7A7BF0F36FECDC6E9CE8 +:1040A000C71CB43ECD7ADB7FDA91EFD6680CE15FB6 +:1040B0003E88E34D37989719D193E7907E8C36B0C0 +:1040C0006C8297C39F5118A320BCCDD19C1FFEA723 +:1040D000F086C2999391C3F11BCDF9A419F844E07D +:1040E0008BE4C4FC1D614FA31C986FB145E23C4EAC +:1040F00029BDB9A48F1EB2D8B6523B2BE9DB79C2D9 +:10410000DFBD3A83EB894F14C7361F7CA77BE4B928 +:1041100035A8CFE63FA816A19D5C32CB4C7CB7F703 +:10412000A4D98B7C5701B84B06B9BDD7F12ED9D194 +:10413000A1F3833F9B26F5372CD93CB0DB4DE40F30 +:1041400007B4237D0D7422E535F4694F70DD984185 +:10415000F681370FFDB7E327783C63BDEE939DAF43 +:10416000E13AEC3491BEAA5BD6BB8DC1F75FC6BB0A +:104170006FCE00B84FDFFBC154C5E69F7FCFFE2155 +:10418000442FA39AC3FCFDE3BFD606D471FCD530FF +:10419000892BA16C0D7E5EB129E43BF6CFB040388F +:1041A000A5FDF298C13D14EDD18DAE3163109EC7CF +:1041B000F42DA5C8EFA529EE0A9CC7A7535C477448 +:1041C0009CEF72D0CE39F0CDFC4C0DF0E83966741E +:1041D000A0DC467B16E564869DE33FC9C83CA84742 +:1041E000A59D2BEDA950FE5A2AEDE90CA7D18EF81A +:1041F00012713755D84F46F38B4EB4FB5887624542 +:1042000075526763DD8B308ED6A17806A31F9FA5FC +:10421000233FA7CEACEBBE02E371661DE18D65695D +:104220002427EA5A996711AC97D1E8F4A5DAA89D3A +:10423000E78A02F4AB389C7D76FD9E19CC6D26385A +:10424000348403FD940530AE1EFC0FFCD30B3F45B8 +:104250003FC740FC3E2A4EDA855EEE07B5BAFBFC4E +:104260001295F0E4D2B9B83EB61E8FF0E3BB25C379 +:10427000F93CE2F3AFF800F46F42B2F3A758FF0243 +:10428000F5F408C63620FD42FDE8BBB3481F7FC1E8 +:104290005C423FDF1C85F69BAC1F57DD3FB4023FFD +:1042A0002C621E92CB95CC4B256B8D253A58A831AC +:1042B0009F06F85F38DBF93EDA15C897BE10BE0CD2 +:1042C000ACD7B04E2EC7813F7D01F45383763EE0DC +:1042D000B5D6C87C1158B6077F57C77AE9BBFA3DF7 +:1042E000DF86F982F886D355A2BAA47031E2E97B61 +:1042F000C621BF6FBB13B696040C35801E25BDB01A +:104300007ABFE2C578CE54D5EC3442BDF6211DF11A +:104310003774386DF418D4539C9EEA6D534F505C3B +:1043200010D815E58071B7EABDDF4EED1D3EA8D768 +:10433000EEB760848255D82AA6A17EADF4EA3FEE9E +:104340000A985715DB391545CD17EC4D03F249F5A1 +:10435000F6E0F7B5EDC1F57AA67DDC67C7C1380D8B +:104360007F9AE47B25801FDFC9B0C4117DD898FDFA +:104370005BC4BF7A7B94FB127C22CBAF1A9DBE57E5 +:10438000F4D05C717E20E48B01F9B14AE3F1E0D016 +:10439000F643D2397F1D365F887507BC2FCEF750A4 +:1043A0003C624CF1A5F9F2F30CEE3744740A7B56EB +:1043B000F3B0E880EF07FAEE5C068F0B1C36F0F7DF +:1043C0008F58229C88C724035B6D2CF2B74BD2B167 +:1043D000668C1F8EB1BB2EE03C8C36196FF030B46A +:1043E000FF3DF1DCDF90FE6AAAAAA3754D558D9BB7 +:1043F0009B00B4D7457CE472F41291DFAB477CA2FA +:104400005F8F7408EAD9C362284EECC43215708FEE +:104410007E828C67C27B8676FCB5899C0F0DC8FEB8 +:1044200045F83DF3617CF90760A360FF5199AEF058 +:104430004CBE6F40F6A984A34ED0591F1C7B148A32 +:10444000E349BAC5F814EA03D61246F2894885EA68 +:10445000C9E4977E8475E0DFAC145722F52FFCFD8C +:10446000F98F0C267F9F35C492DC5865E17E08C029 +:104470001D8457C9779B1481DFE24ED277BDF78147 +:10448000CDAF04C429C4BA66652A4171FA47843C99 +:104490005E98E9CCC6F14FBF6F34627C719488D7C7 +:1044A000D7B9CC5CDE821C40B8EA9631B2D3EA843C +:1044B000FFBD26DD3D02BF5BF581D9A346A15C6D42 +:1044C000A3B88C3ECE3D12C553263E1F41F1AB91A1 +:1044D000D8AE7C99FBDC41E68F5F8DF9B664652927 +:1044E00087D78A76541CDAE50174373B93DB4DB2EB +:1044F0009C91A904C9718CA9113EDB55C26F84AD92 +:1045000093FC8FBA5DDCA818A3F27D1E561DC3D0A4 +:104510006FAADB35A9F055ACB79B0A316E34E6C300 +:104520006956B4F34E17C63810DE27ECEE6B33A194 +:10453000FF34B5AB12E59C65942FEDE7D05FBACBA5 +:104540004C719050FA93749708F48AF84ABCCDE8FD +:10455000457AED8B73E899DB98E9A7CB71999CCEEE +:10456000D2853E495FE6620BCCFEBA398EAF133C72 +:10457000D7217E9A33A68C43BC8DCBD4E8BBBEFD3D +:104580002523582719FDF9D1CEF83E4D03EEDB2047 +:104590000A3C01FB4A19FDF76D243CF27BB96F130D +:1045A000715123BC6658795CD1B25AE019D61FF11B +:1045B0003CBEB7B3240AE69BD5EAA3788D09C74A67 +:1045C000C651BA1E1C81F1AC586D3CC6139E6C28B6 +:1045D0003A84711E6D4DE704C4AFADC55A8C2155A8 +:1045E000ED1F9A8BE2378CD35979AB95EC1EA62D33 +:1045F000CE453FA645D0E99A746703CEBFF83D3D4E +:104600008DFFE543DC8E6B4DAB498F86EF3E791F06 +:10461000E85219587E7AD82123DAFB196B33287EA9 +:104620006459CDE33D2C0B0804E0D51EFA9387C3F3 +:10463000F7EE6004E51799665A37FC0EFD88F9CD50 +:104640003603A2CFDECA7408B765ED4C9D58FC64F2 +:1046500005DE67AF9EADC3784CB68823858EDF2616 +:10466000E8F537DFA81487D719791CB8362BA68D43 +:10467000EC0690E338FFDA217134FF8D995C9EEAF5 +:104680005B26517C3CD46EA9DDB59C215D84CA1F9C +:10469000297724DDFD46E3F1B5DF30195FE3F4D778 +:1046A000ACE7F8F6FC4347F2275DEC2B663EF24D93 +:1046B00032F5DB17E7F252A9E96D2B9350862DEF07 +:1046C0009AE881A7F3D746EBEA902EF58E25D4CF52 +:1046D000436646FDACCD38948B7CB2DACA141BF627 +:1046E000B7281DF9907D18C6905EB487CC3A94E740 +:1046F000DA3A273E655A744231D5D7431DDA2FCBBB +:10470000D473FA16F4D8ACF42A64DF306721EABB1C +:104710008599EEFD48077DFB880DE15EF45B2C1A60 +:10472000B79B2D0D1F3CB71CEA4F0A7FBDF891FCCB +:1047300099442F6B3405ED842FA37F4FEDBE1CCD24 +:1047400014B4E75E1778BE04BDA43258D78CFDAA16 +:104750000BF951D373BAD7D6C4B5E177DD09EE377B +:10476000118E09CD3E32590F583F7DB4D4D67F3DCE +:1047700006D2077F14F3634ECF25F7F71C3AE66E97 +:10478000E776A609F960AE8DEB1FB91F1ABA0F2A9A +:10479000F73D3DC51C4ECF4716923F8C2D1E8178AC +:1047A00093FBA76F9EE17121B93FFA999443A5202D +:1047B0009F402E2CC671016FE732A3E9F9BE18E6BF +:1047C000B4C6E07EA7FB24CAC386AEC224A49F7DE4 +:1047D0009109C50AEDDB5E769FB407BF7B53F89164 +:1047E00038BE1DE088C1FDBDD8FEFB7B31B8BF17C8 +:1047F0008BFB7BDEC717E23C6E12FB6EFDF6F79675 +:10480000FEE53EFCEE2DBD03F585DCDF4BC1FD3D35 +:10481000785F52C1E923A54325399152CAF112E3C9 +:10482000665E23D455DCEF8B0DD8EFB3F03843EB45 +:10483000024671F09F2AB6C7CBE302F7FDF8F7AD49 +:10484000B5362FAE3FC67F90AE7BEF6232FE43EFB0 +:104850007B6EB78AF84F17433FA9F74AAECFFADE0F +:10486000CFC9E1F133DC7CC1F7738D221EC6E3476B +:104870009EB9C3BC81F1B09EAC181E0F13FBCC32A5 +:10488000BEDEA309FEBD5B47ED7BC4FE6131C6877A +:10489000615D7A98A0838A70B12F28C6AFC820F8CE +:1048A00098718A3330CE08ED3DE86F79CC3AD19ECD +:1048B000EF37F688FD46B99E3D621F51EE1B263448 +:1048C0005DDA1EFCBDE0AB1189CE1159F17E3A973D +:1048D0007CB1AF28B118FD9381F8E31DC6F5C882FD +:1048E0002CD758FC7EB2D151BE1E1E1D16F13C368F +:1048F0008DFB3B4C73BB715EEFA5E416229E42E13B +:1049000090726C9FF82E2F9519D1EF07DEF6A03D1F +:10491000306CF73092B7D76471BB024909E30AC320 +:1049200084AECC4B6C8B41FDDF7F5CD7F099C30725 +:104930001E6F5696733ACD5BB41F482FA1A4C17168 +:104940000D86F6BB283E5A6B76203DBC8BAFE0BB94 +:10495000A76F0EF3615CB8476F5E8D7C7B2CE28E97 +:1049600023F180B2FD46F7EDD8FF9C5BAE5D897503 +:10497000E550AC6D09AC434F59D7188477A2D1EDFF +:10498000CE02386A8CEEF40498DA99C1EE215128EF +:10499000475DB1423FBB86BB2E093F87A744E1E399 +:1049A0001F32B82B719CC34A97C5817E8AD645DFDA +:1049B00031733CF5F391E0FB837AE7F87300FFC1B4 +:1049C00075E9854D004F49E4FBB7D5A33EFF596219 +:1049D00021D94B022F87C5BC16E85C093E3508DE9D +:1049E0001FE23835D6B2F464A0C7337A01AF59C09C +:1049F000AB39067D17BC24EB907EEF5382F8E76558 +:104A00004F34F14F98AEA98DF8ADCCE8407EDD145F +:104A10000E2C0076CFDB021EF03718DACDF09CECBE +:104A2000EAADCC310C793E358CF34DEA2AC58BFBCF +:104A30001232AE56CE5C69685A3E9AE57E18F1FC99 +:104A400097887F8EC6D09EABC442E376BD1FDE46FC +:104A5000FBBBE339FC975B7FC6D6EA30FE3153C41B +:104A6000B3669E3190FFB440D85333B104F8663139 +:104A7000A71EC7BF89B9F5A8176F611E2AE7322F95 +:104A800095B7311FBDFF01EBA2FAEF230A063700ED +:104A9000FE67FC6C4836C6B102F0BD85F06D74DF70 +:104AA00019C7E9E3B3448A23C47F2F7A9D21E80321 +:104AB000F87307CE1FF833AB3023804F26C78B75B2 +:104AC000EB6A8A02FCCD48B017E23EC0D5DFF07534 +:104AD00099FAA995F0735001C954E4A70F1014E690 +:104AE00064C0C33562093BCF73BD758DB39AE2D8FC +:104AF000479DCBE3E200CE29AA99D6A5D3A192FF88 +:104B0000BFED1CE84168F7DA72BE5EAF5DA990FEAA +:104B1000BB2E69DD640C3132D56CF1C0B85F3855FD +:104B200086E34EDFC0E301A583F47E3F1DFEB92E70 +:104B30002BB83ECDA9529E16380A1AD2DFB4FC60BB +:104B40003F7F3A5B7B0EE3EFD32FE3EFFF3E0BFC9F +:104B5000FD3CF88F616C18C5DFBEBFBF7F8CE44899 +:104B600088BFCF302A0972EA461397A79DE30F5FEB +:104B7000D503F3BED061276CDE334CF8F1D9AE2EED +:104B8000FCFEACBE6B21AEFBC78D80E1218C7DDAD3 +:104B9000080628D0F6F1462BD53F6F4CA2F264A34D +:104BA0008DCAD38DB9F4FE6CA383EA05D9CECF713B +:104BB0009D5799F87AC8F1970A7A5D65E2F6C45272 +:104BC000D33DC7CA008EA58379FCACA2BD652A86F9 +:104BD00039AAF6B41FC1129EABE0DBB0A5EBC063EF +:104BE00002B817BCE25E8966CEA237BBA6A35819ED +:104BF000FDDEA7098897DA8B0A7303EB1CCF757E5D +:104C000085F07FD63896E039D1E824784E35965233 +:104C1000796DB6EB1B84CBD9D1BD3209FABB6147A4 +:104C2000B786F1BE294E85ECE9894EE6F5C27A6C6D +:104C3000D0733DB121D9E8403E9E347CE6137733F2 +:104C400094D36E4336F47F53CCFC29B1F07CFAD870 +:104C5000320DDBDD02748A7549C797E75F8E8F5A84 +:104C6000411B670E2884A73307A2092FEFEC5209D6 +:104C70009EF3C7C2C9BE38BF6B5F35D54F873B7047 +:104C80003F3CB4FDAC973213D1BF3805EBC560DEB5 +:104C90004B5ECA4B44BFE5E51D4A3BFAD7639E8F86 +:104CA0004E43FA3D15D3FED18F68FFC1407165A018 +:104CB000D3E31B51EE0D4AA27DB7B3423E83651785 +:104CC0008176649D41DA95EE3CAC9F0AE7FA1BC7FA +:104CD000B1013E570938F6A5A5907ECE55341DFA90 +:104CE00087FB5EFC8193DB7B7CBCDD1B79FFDB9E5D +:104CF0007BFCFC5E1AD74BFCFBECF34F64FC186AA0 +:104D0000CFEE5C137E1B23BDCBC682DCDAB72EC28E +:104D100089F0EED33B3E6A4039FD8499E23CCF3CBA +:104D20007CEFC77BB07CA8B6E85E282765C7103E3D +:104D3000CB7F3A776A32B4DBB69B1522BBE4C11A4B +:104D4000A4021CF91BCE1D4A86F10ABCD125989EEF +:104D5000E3D85E783805EABF7C59F1617CBEA8BD16 +:104D60006DB382A4F7CDD32968975E83CE7D807D15 +:104D70009F37B8F4A8CAF30D83F47C7EEBB962ECDC +:104D8000EFB994F625D1C027C394F693CB615D5655 +:104D90000DFE43919BF0C5E32B2F75CC7A87CFCBCB +:104DA000938C76ABA7CC4071709CBE1EEA6776658B +:104DB000923DB15BE7217DE3996774A05F74C6E51E +:104DC000791CE9AA16DAA3FD5A5BE8891C87FEDE86 +:104DD0009FB31C40416CF093D794227EEA76AD9F3E +:104DE0009A02EDCE8C670E0540AF78E9C254F2B757 +:104DF000C12B453FE7CCAEA6845BE1BB07F38B2913 +:104E0000AFC4A5B6D338AC9E8FF333A1C7585701B2 +:104E1000ED8F1069DA288BC188CF633AA20FA632D2 +:104E2000FF7AD5772CB7A39D3ACA6D74A01FBAC17B +:104E3000EE49C67899D48BA0DF2A913F920DA25FEC +:104E4000EB2CB2F7BFAF5E937134D9DFCF0C3CAE21 +:104E500027E36D9B0C5C0F6F0539827426F5308C4F +:104E60007B6FF6E880781D08ED428033F56761DCE2 +:104E7000AFF99EE34BBBA95EF83FC5429FCE896D5B +:104E8000DADF05F3FDABD1BD02C759C09C3C0EAEC5 +:104E9000396C2867DF343A576693FDD49B867300DC +:104EA0007DF900D6EB54B0A73203EC29E3F7D39792 +:104EB0005F199D2DF8FDF76D1F2A5F977EA1638511 +:104EC0002857D78779515E34093FB049F87D4D9610 +:104ED0003146940FEC155DCD11D09F13780FFEFD78 +:104EE000164B11C90F4C4FBD14DE0E00FFBB41CE57 +:104EF000F8402FB88760A3CE268CEB38E1FF16A0D0 +:104F00009F8917C1310CD07BA1DFC37ABD80743279 +:104F1000894504B573B2688AEF3273CC7F6BDEE3E8 +:104F2000C5BA49F8C70BBF75FCF96311281F977EF6 +:104F300051447272A079ED17F3FA0DCE0BCABA6123 +:104F4000AE43B80E13FE66D590AF276A2A7307E802 +:104F50006998C7517CEFFC263C681E7D74FF3DE7D5 +:104F6000718FC23C18CF66E778DE5187881F745472 +:104F7000E6531C6637FABDE89FCD3490BDDA61591F +:104F80004CFE6CC75BF1240FF6C9F84C19CFFBE956 +:104F90003089EFE3ADE47FA684F1F7ECB6BEFE49BD +:104FA000BF74CC4DA1FEF729BEBC17B0FF19C601D6 +:104FB000FC6795F20E7B978791FFD95AB8F88DE17F +:104FC000F87E791E8D2FFDE314D5BB3A03E54FA380 +:104FD000CAFBB11CBA0DFDC4D673064A22ED9F0F61 +:104FE000EBB160DE82CC8795FE353E477FA97F5EC0 +:104FF0002CB407BCBE2FD6EF98C6FDCB63E8CF8E8E +:10500000F0EF031CEBCBEFE0FDB8A7476848FFA12A +:10501000CFE53AC8E7D24FFD40CFEDD2D6E896783B +:10502000DC47B3E4B8B51C58E7B90BB69ADC01719C +:105030001693E632E0F34FCAB73E8B715556CEFD5C +:10504000B70F047E3D5F73FF78BCA1EBFA9B012F85 +:10505000E3FFAE533CB6FEEBDF971F721FCF036733 +:105060001ACF577EEACD589E0F93CED7AFD7C2E363 +:105070001E7E3CF13C9BA7DA87F23882AA38D14FDA +:1050800095793627241CFB87D3BA97E23E18DA11AC +:10509000CB746D18E7F089FC9BA7443CD1D3AE27B5 +:1050A000789F12F8BC53C8BFA7982F15FD334F87C0 +:1050B00049E41773FA7A6A4F1E8DEB63B6288A1F8C +:1050C0001C55198F07389230CFA847CA1D45E4C92F +:1050D000883C9AA704BEFF85BC9A5139F1DF9157ED +:1050E000D38737D013507FAA2156E61D89B88B2568 +:1050F000146F1CFE1ABBC05BDB9A1CEC67BF9EECF6 +:10510000A213FADEB7AEC0F9FC3A93E74D3196B37D +:1051100001FBDD3398E21B323E06782BD883ED7617 +:1051200085115E24DE64BC4CCEB32F8FE73EDD6676 +:10513000F43FDC061E37FBC8DA6509DC2FFBC875B7 +:10514000DC82F2E94F0DAACFF01DF937B78BBC9E78 +:10515000DB453ECFEDCB3EBE1DE5FAED15DFDC4174 +:10516000CF6B82F3137E92E3BC352790CE4EE8FAE4 +:10517000E25088AFBDE618892F9E7775C2DC8FCECE +:10518000281FE2F361025F3B29FFB4F72545E08B5E +:10519000E3D3F3F8102FCFB7F04604E623ED1579EB +:1051A000EB7BBDC179597B659EB9E6257B53E2A5B2 +:1051B000C9EA3006E2C59EE0BE1BF9EC7E73911190 +:1051C000F7B72BA28A8FA27D59A781BE067C8F1EBE +:1051D000E2BE17DF4B3B46C6474FEB3B8FE8109EC6 +:1051E00065DF4F8F568777D429C0C7273BB6EEC6F9 +:1051F00012E021FA612F72B97ADAEA8B44B8AAE197 +:10520000D1C418DCE7059E8EE175B45B43F3568884 +:105210005512F87BB417AADB55A72912EB067F3B82 +:10522000A4071DC71F7B9EC723AA587BC27295FC8B +:1052300037E358B073CEEEF95524CA9D2AB3D9B8D6 +:105240000CEDAA903C92AA5DAB3A330BFA3FEF0FFC +:105250004F88BCD9A90A3AF045069E4BF0AFBB2F48 +:10526000F2D2E713A03DACAF5EB43B2DD6F774C8C5 +:10527000FA9EEE5B5FDE4FDFF3F64FD250CF9F9585 +:10528000FEBF83EF7756BFC0F72F5708F95B1DDBD2 +:105290003E06F19DA206EFEFC9B2DAC8B4F101FBF8 +:1052A0009AD5B9CC88EB21E377D52EA68D0BC82FE4 +:1052B000ADF63223D677EB408E9869FD34B18ED4AB +:1052C0000FB4A775AC3232E344A857617F58EABCEB +:1052D00069B87E12AE7E7084E0F9680E8F0FAE90D2 +:1052E0007C613178A55C44BC0DD960086A7FD662C8 +:1052F000B8D309F00CF5063F97FDBF9BC3F7B57215 +:1053000003D7D73E305E3EC8E1FEFC2F7ED1D75E8C +:10531000E5793C60DE4B7AB4717F4B8FF0BD6F90C6 +:1053200071B0BB53C11EAC469AC8F0E36977A13B8C +:105330003506CAB33A2E7F7747433D1FED5B3EBE2D +:10534000ACF7E13D84BEEF7F7F612AE6A9840DE1E1 +:1053500071DE507B74B9654C22BEEF10E39D6CF496 +:105360003DFAA9DE3F9FE38D4E6779B6BFBE70431D +:10537000A111E967D1A642E3BC80B848D3F6C39136 +:1053800088C761667E5EEEE4F691949F76D2AC6348 +:10539000110ABE1F69C4F7A7CD877E6783E70B3765 +:1053A0004517059E4358B4618AB33C00FF79DB83FF +:1053B000D763787B707DC49EE07A34DAC2A3FFF5B0 +:1053C000EF0A7DC1F5914783EBAC3738DFE9E5B1F2 +:1053D000AE5937E0FED226D5818F2ACC3A0F9EBF38 +:1053E000D2CC9CAFD90E95F6B92AAC3CAFE9F3DD2F +:1053F000ABC6A07D5FFDE7F223E8CF2D7A97E327C8 +:10540000340FAFE2D891AFD18F877557286F6B9B60 +:10541000427A2D343F4FC697FACB97E5222EC772BA +:1054200003E92C941E4E893CA49A86371E0D3C8FAE +:105430007865FB3ACAB7AF9C163CFF6A4D63CB2E2A +:10544000295F3DDC0F303B6D889F32717EA9BBE93F +:1054500096EB90AEBA6F293D817A625C4309FB649A +:1054600024BC58FBFBA9889FB207158672A6EC578F +:10547000435EA17C57E1CF2D12FB69D6B1B63D5DED +:10548000D06E8197C79DE685E4D595AF0D81232425 +:105490009F6ED19E835FE3B8A1797532FFAA6ACB74 +:1054A000B761C1F9763C5E30AEA34DC5F92F10F05F +:1054B0004A3B837926D279097E6489B14FF15F57DF +:1054C000625E98FB9621F17E7B635C2BFFBE96F1BA +:1054D000BC2F998FB5300CFC079063472D06A28F27 +:1054E0000B1BA2280E7A01FBC1FA2685FC84DA5830 +:1054F0005EAF7D9AC7436BC5BE53ED333C9EBD5036 +:10550000E379F54837CE00F86BC4BC904E029FB3E8 +:1055100016EE77CBFC30CC1B7306E415D4C0BC3040 +:10552000AF1EF3C502BF0BCC170B7C1E1077A7383C +:10553000808C4B3CA5F73EBB0DE0547F12EE40FB48 +:105540009A315738D227C823EE37CDE0F2ED72FBFF +:1055500082AD857CFEAD95D9E417A5A0CC44BDFCF9 +:10556000A889BE977A512FFC9D7230E7F13C5379A0 +:105570005538E1A7355E47765EEB5C03C5ED5AED25 +:105580007C5FAC75BD9DFCA4BE7DC0756141FB8098 +:10559000B7F6E5813B738CF4DEE490F62CBD8FB753 +:1055A00049FB3E440F7BE3519F7C80FF0978BE5549 +:1055B000E47DDF2AF2BDA53F746B5FBEB7371EF5F1 +:1055C000B0C45FE873C987F2B9F4874A53DC5B86DD +:1055D00004C4C55AA3BD26CCD76415DF6FBF6AAB20 +:1055E0009807CC8BECCA4F159E275A1EEE7AE06ABC +:1055F000C4DF63191988BF5D43B8DE1A53ECCCB120 +:1056000006E041AE3B733A73D0EEFC749DA908F1FD +:1056100021F3CB3E2AE47A07CF39633EC57ED1CF52 +:10562000FE21BAA032299CE76F7D3A85EF7B584670 +:10563000B90C6857818D4F7952E506D76F2704C0A2 +:1056400003E31A114FAF0DE1FA57E20DD6DD89F6EB +:105650004AF94FC368DD99E6CEC4FAEDC772297FD7 +:10566000F753A107E5BA30C6FDF55BDF8EA7737B64 +:10567000524E5E9E3EC5B9D44A3DD10BD027D9E7E4 +:10568000AD7373883EA3FBFC6E41A78F58783F53E0 +:105690008A9331FE817B527FC7F653FAF6A185DFEC +:1056A0000D7473497B8FD3C14074D6471F21741684 +:1056B0004A3703D1D3F7A0B373DF4567F0FD68978E +:1056C00065603AAB7DF9B9DD1EDCF778617D248336 +:1056D0007627B496043C4F5CB37545249E03FD5C6D +:1056E000F344627F27BC6AE9A5F26E1CB98A882B55 +:1056F00039CD4AC0FEF3C95F3C389DF240B6EAADF1 +:105700002812EBB787D139AABA5D9594FF09F56ED7 +:105710005E5F45FB3BF57B42F2419F599F60A33C96 +:105720005F4F2AE60781FD4CF922755BF4944F5ACE +:10573000F7AEEA40B2A867BD2B11BED0EF118E8B39 +:1057400040B7F5ED6A9921AAFF7BA010D2C7F5BB3F +:105750001E3C87F1EAFA5DD77E867A2D34AFB442DB +:10576000ECC385EE37A5E78AFCD22BD81568270253 +:105770007E1C3EA44B802B9B2F3FD171D3B3CF3CDB +:10578000BF17E03DF141622186944E6F792312CF1D +:105790007BCAFD27B92F77BA3D33CA7D09FCCAF20F +:1057A000ACD8A7F0AF1F97E3B63D0A1EB6C73C6E54 +:1057B0002A6BF4BEC8AB60BC9A363DC9CF9AE79E4F +:1057C000DEB611E9FCFD303ABF59FDDCAB7F18872E +:1057D0007EC34E7DDC343E1DB392E05FB77A1B8FF3 +:1057E00013CB75AAFAD5AB06DB70FE1CED09B95ECA +:1057F000D53B0FD2B9EE50BC96B41FA473DFFDD6D3 +:10580000ADBD7B2AC5479FFDCA80FC79E280C212EC +:10581000EDFDBFAFD8FA4624B693EBD6B78EFDD6D2 +:10582000CF377DEF286A6745F970B975FC56D8996E +:10583000B52F5B18E6B3557C10E69D86EBFBF05266 +:10584000A2FBCFB4C59CEE9F589180F66E85DE9387 +:1058500060A5923FAF78F21E418FCE647EEEC69374 +:105860008CF35AB0E9269AD742E6263AAC7882E71A +:10587000337D01FEDDCE4BACE733B95C2E7EB6390D +:105880008CCE977F26F2A53DFFA98A38C05D64B70C +:10589000DC23E64A198450FF42D8B1CB7275D25E40 +:1058A0003406FAEDF55B5675E2BA9C1CEC4CC4F874 +:1058B0001BCCDF23F0A5607EA2FAFB29897C5DF872 +:1058C000B90BFA0EEC89127C8EED3BF574FE22E0EA +:1058D0003BC29B1CFF6E313EC01D8EF183CF12B8C0 +:1058E0005F037F9D08479DC2BFA95B5631CD06F877 +:1058F000FF8398671FDF6F59C3F95CF0FDDFDEE5BA +:10590000F2A4CE3BA394E441A7DE9788EDBC0767E1 +:105910002B240F42F3E1051D6CD10B7E0E7E0F7020 +:10592000694A203E0FF0B840BDD83F5ED81A907F3C +:105930008FF85A562AE8C4E07F6EF7F3A3DC3F5E87 +:1059400024F83F741D43E5415B883C90DFB34D97DD +:10595000DEDFF4F3BF87E4670DD81D56E4DBF7C341 +:10596000484FD5AC53296FF393B58713AE043A3F34 +:10597000D52EF93558CEF6F1EB329E575FF1E2564F +:1059800005E934945F4F5578954BF22B3CBF24BF0B +:1059900056B0FFBB7256AC831FEFC1FCB96800392B +:1059A000FB66AED8D71778FD82E5475D852FAD65DC +:1059B000E9B45F10825F89D75079B920D746780E55 +:1059C00095970C538102F029F128E99531378DD351 +:1059D00047C7925EA5FEEAA3D7D07907E333F4FD6B +:1059E00023384780C7F56B9E6F5BD3A18873159EE4 +:1059F00023A9A3883F9DFC9A899623A97181756F7D +:105A000048BD3DA4BD33A4EE0A69EF0EA92F0E6A6E +:105A10005FB3E7B081E7DDFA82DA85355C4FFE558A +:105A20007F3BC2CBF97CD7398307E963502FE5FF71 +:105A3000EAEF671E0BC58779BCACC7D61B89F6CACF +:105A40000A13B71B7BACA21ECDEBBDF18695280FC8 +:105A5000E5F35E138F67F7B87A23A303E215DD1D24 +:105A60002A9DEFEEF2F238597F789A08AF5D228EC8 +:105A7000364535A7358CC27CEC4C3AA776BE592FFB +:105A8000EAD974CE5ADA953DE13CBED213CEE32B6F +:105A90007F65AE3F5C85EBE1716A982F339F2F1DC8 +:105AA000AB78BD2912E302F33B78BE4CF9DAE0751E +:105AB0005D68DE42E72ABF60CBA85CD81A9CEF5233 +:105AC00025F8A06253C8F38EEB892FAA42F8C22DA5 +:105AD000F61342F962C450C11785AC50C4A9685F7F +:105AE0006F8990D353D4FC1BE700FE7B8EAA2C0C4D +:105AF000EAE73B54B612E7BD43A1FD4D3C0882FCEA +:105B000026FD4689BFD3C8374306B6434EBFF4E7E8 +:105B100031987F50B3FBC3829F43797AF7FB39FBFF +:105B2000B0FEF21FD33E64FDDB971CF8FA0ECAB339 +:105B30003C10C690BE7B0EBC96F663ACEF0DA3384E +:105B400041CFFD61649F7B0E5828FED23398FB0144 +:105B50004DFBBF2AE822FDC2EF19B875A881D6F522 +:105B60007CC77F7D84F1F7F31D302B94EF072288EB +:105B70007FEAF79AC87FECD9FFD598C0BC9FFFE9B0 +:105B80007C643E478F859F6FEF89E6FB3EF5FBAE59 +:105B90007C1AF3176A771D34CC87F725BFF94701C4 +:105BA000CAD19E17B95D7456DFF524C668170CF587 +:105BB000B6EAAFC47825A3FB4DFE39B46BB627FF18 +:105BC0005278E178E8013CE0BC002F1528FF07C2BD +:105BD000C7B2A1FCFCECBF1F3ECEDDC1E5D9150C60 +:105BE000F31DFC78E1E7D36B3A2C941F0CF3E7CF5D +:105BF0000F7C5580F2E672F3DDF86FBBFEFF3BF3DE +:105C0000DDF36F3B5F4EEFCEA1369EC71A42F7FD24 +:105C1000E9FAE51F52FD798B83E0FD9EFC7EECDF07 +:105C200076FEFF3BEBFDE5BFED7C2FB7DEAF8BF5DE +:105C3000B658313EDAB3FF1F69EC5F9877FCB07F4E +:105C40005739F6DDF396767BB1EA385A08EDDF6016 +:105C5000EDEF3AEC647D90DDD124F6155E4BB26F2A +:105C6000E6E796B99F5422FC24A7C81F6D623ADA72 +:105C7000072C315693DD5932E8A1733C7F4E47F033 +:105C8000BC669CB08DCE2784F8859307A9747FDC11 +:105C9000E1E5303EB43B6CD1599BF8F36E7C3ED5C8 +:105CA000C1EDFEA983AEA73CDC12E35B73309E3CE2 +:105CB000D91CEC375D1FE2FF5C6B0B7E5FCA5E8C0C +:105CC000C3385D69BE9EEE089B8AED03FC43DB3062 +:105CD0007E1FC2B5ACA5D96AFE6FE185FC584DE0C8 +:105CE000A536042FFDF120F0C8B89D138A37CDFCEE +:105CF0004027950CFC583E2FF27FA51F2BF1178AE9 +:105D00003726FC628D86F4E3571BC4F79F03FAA382 +:105D100079F7E153E0FB5FC56BE8FA5C0ECF250332 +:105D2000E0799056A8213F4D10F6F9642D9AD707D7 +:105D300075AA2EC29F97F8ABE46F0E0DEDF349E6FE +:105D4000688DF2C56C83FDF7D9A43296AA314F183D +:105D5000EE0F58BB5E41BE2B7B34CC86F81EA48967 +:105D6000F3BB1A8F8B03B77AC28BA8BDD31083ED18 +:105D700016313C695696CA1C0A6FCFF0FE1F3CE4F0 +:105D800087F717E1DE197E578697B761BB07353A6B +:105D9000174E7F80EF2C2C33A85FA72E867F1F59CC +:105DA00044DF7B74FC7B279EB7D7336B1ADE2799C1 +:105DB0005E62FDE131F42B569868FF615A31F71F9E +:105DC00024DFFF71188F8FC8B23ACFC6F74F15F78F +:105DD00050B473A7370F25FFA4C9E4AA7D09F5D0F5 +:105DE000731194AF52B6F207378C46F89E8F752028 +:105DF000B99C9CBE93F2F8E735CFBDE73D78EEDE67 +:105E00006EA2E72D79EEA78601DE4F2AB63B5E82B1 +:105E100007F36E3A6CC0BCE8E9ED3BCF629C6FFAC9 +:105E2000EC08CA2B9DCEDA7F87F9A76C36CFEBEA58 +:105E30007EDE62405CDCD07E4E437FEB86F10A8AD8 +:105E400035D66DB2A6DD05F094897DE15F4AFA375B +:105E5000F13872D9CAC13919F0FC063C3F78097F84 +:105E6000E74FB2FD246513FA2FE9E2BC906C8FFD79 +:105E700060BF1F0B7CEC1EC6E3FAB29E5EC2DB97CE +:105E8000AF0EEBCE447F66B5DE3704CA69C38BF72D +:105E9000E23CA765B0A91B705FE15E95EE5FE93655 +:105EA000B123145F5F67B7A15FE76622DF63AD9D33 +:105EB000E257DD931C06BC8FA57B9DDD8AE754224B +:105EC000F29D4770DD17B62836E4F7EE492C282FEF +:105ED000EB23AB2F0BE31E1F39863A30DE9E2ECF0D +:105EE0006D0D0F27BF3135DFFD3B84A3ACA5EC4D15 +:105EF000E473F60DCC7B0CE60F3322DE076F0D67E3 +:105F00003EE407FF7D5BEF607B66743C7C459CFF55 +:105F1000BEAD7495E7C316097A9886F9B140674F0C +:105F2000EABB2AB19F9F0EB3115EA6C558C7983928 +:105F30007D3184AF5B6FCDC1F975AF30E9707F6F94 +:105F4000DAFD9CDE80FE8D1A7CBF4663E1B8CFFF90 +:105F5000C230DEEFEDCB3517DE1B3BC8C834BC2F9B +:105F6000EB86F642F2A71F18EEDE8D707D7E1F1BBA +:105F700087EB347FED3ADA4791EBC5B4CEC9B13047 +:105F8000CEE75BED74AF9C5CDF0786179F1A16B8EF +:105F90004EB3155A1F988F11E19F367CDE397C0F66 +:105FA000CF0FE2FA4D2BF665E17D5853D41AE64443 +:105FB0007D9AC41CA897CF33CE7FE7576B145F92AE +:105FC000FC2EF95AF233C04DFC2BF931948FB735C2 +:105FD000F2B39ADB1B8D54FEA2D1CAB46CC67634E0 +:105FE0002651FDF9461B95ED8DB9F4FCC54607D544 +:105FF00077358EA5FAEE4627D5F7349652B9B7D144 +:1060000045CFEF00F461FE088C4FF246CA19844F69 +:1060100057E4970372FDF4AB27E9504ECBF5037FAD +:1060200097EEF190F76C0D6417FC6FC10F72CC13F3 +:1060300055E4C72BD64D017212EB9618FFFC30F5D4 +:10604000717C4C809CD3F87D09280F138AFCF3C720 +:1060500010E1C522FFBAE0771343D60DE950E205FF +:10606000BEF7251405E2E5F443989777BE42E7A012 +:10607000F807EB7AEE65AA9B69DF37CDC0F6603C86 +:10608000B7EB276686F15355E7480AC3734E150AE6 +:10609000D302E20D3F586C625A80FEBAB3213AA88F +:1060A0001EF79363AF62382D36C95D9207707C741A +:1060B000EF99BF3E03FD3F75DFF1E16EA2C7D35BF1 +:1060C0007F86E32E0B77503C82E15D77148FA17DB4 +:1060D00036FC0BBA2FD71341F7F03D69B0FEE1193A +:1060E0008CE7AE54AD2847E73573BDFC01AE23E025 +:1060F000FD4F621DD345FC46DE135826E3E721F72A +:10610000F6DD9197417C9E2EE23C1FFD28F561CC87 +:10611000637C6A856A15E93EC1F70A0A38E4B8A1CA +:10612000FD7D9CCC287E02D63F6B80F5F8F83E833F +:106130000FCF4E7FAC18E9FE06C516C76E87E7EE97 +:10614000D5FC7E5EA5E128E539B88D663A77C83C76 +:10615000FAD381FD290DFCBE3AD635281AE3C9F2DF +:10616000BEB988514E039E7F47D980F4332FF71074 +:10617000DD7BC55A142BEEEB948BE7E5F2DCBDE634 +:106180001E3ADB02F64E1EBFF773FD307EAFC1F143 +:1061900061CC7FBF62405CAB7C2DBFEFB1BCA5D0B2 +:1061A000B03040CFCC13CFE7E7F2FBB9E5F315A24F +:1061B000DF94D56595489429E29E8A94DC7995749C +:1061C0002E78CE751ACE5FB66FCCE3E3AFC7F1E39E +:1061D000118E782A1FC8E5F6E0BC39B76EA1F37CB2 +:1061E000CC66C078AB1C6F5E6ED14ACC8F9EB71662 +:1061F0006F8FA0FB2C29AFFAB1C8A95B518EAD09F6 +:10620000E9B746E83D989F01F74D3FC70C7BDA4F51 +:10621000E671BEAAE77F49FB71551F86913EAF1A12 +:10622000C1F52ECBF78EE1F7FC05C7D727FFF2CFDC +:1062300074BF63FD2E7E0F24943CEE2BE3C40E9EB0 +:10624000D7181ADF7DE5F90F232F1957DFC5F70996 +:106250002F175797E7EFEA7FCDE3C2128FF5CA45B4 +:10626000DA97AADFBF22E152E7DB705F07E930343B +:10627000BEFE7DE3F0A171C68EBC4BEF6B0C245FBC +:1062800065FC5DD62B1A0A32F13E699BE27E2D0F2A +:10629000D6A7AA614C26EE9BD7354CA432F4DC5D20 +:1062A00045431EB5AF6A1849EFA3F2B87D0306381F +:1062B0009DDF94F1CDF3DEEC28F61D70D46F006005 +:1062C000E1FBF39A2D0AF7EFE4B9EA9E1D2AF913D0 +:1062D0003D3B866F46FAACEC78D4A083E7D1F97CDD +:1062E000BFEA4CC8BE41DD8E4F687FAF9675D23A8B +:1062F000C1FA3163E03E12E625C60E0C5FF52F2D84 +:106300008B918E2BDB15E756D44FC6768A879CDFA0 +:10631000F103BD27605DCFE46941F74F48F83F4680 +:10632000B91EF01CE14578AAC3DACF7E801CF14289 +:1063300004E3F9D6BDBFC37DDF539B4652BE7565EE +:10634000FBCE3A9ED71661C538CBC9903CCCAFC5C1 +:10635000785FE7717BF094D8373BF5BC4AF218E1DF +:10636000457E3EA984DC3B20E114EBD29AC7F94E6E +:10637000B6AF6C5F47F6E1D95DD767A33FD0B3E70F +:106380009DC82C786ECAE77CDAB32B82EE03ECD979 +:10639000F5F3A9FB80BECFB44F8A433E94FD27E4BA +:1063A000F3FB29CE74F0FD41E6E5F950B588E7919D +:1063B0008170C6D23D11F23B990F766AD7AF227534 +:1063C000F9FE75AC37B61CCDC8F0DFEF61D27B3C6F +:1063D000185FD0EFE1F73E139F43FF6B725B5C28C1 +:1063E000C7653BA3D1497EA0BCBF8CC9F387E2DC63 +:1063F0000CE8B3B7DC00FF924A03C5D7EF1861BBC6 +:10640000E53694C76FE8693D960C653E8C675C681D +:10641000B0B4E13A2FB13B685FF68E9142DE24754D +:106420008DC6FC909AD50A73629EDDF669FC5C8E7F +:106430009001DD76C7DBABD00E7D8BDBDD355E9565 +:10644000B947921CC9C173186CAC2F07F351D280A5 +:106450004EF0FB09F97C1D3F32F07CD09A0C7E0E89 +:10646000205DE4AFD4C4F07303A7E5B98299BE1CE4 +:10647000CC9BA9793199F2664ECB7302F01CE1AC4A +:1064800029E2E705247E6B7E742807E9AE665E7B11 +:106490002EBEEFB65BCF527ED24B16BAFF48F7B294 +:1064A00045E4BD99285F1F051FE61D356D4D6E4300 +:1064B0003F728680EFC9BEFC667EDE21E53E7364D6 +:1064C000E079874A430B3FDFA0F07C195997F3C26C +:1064D0003ACEEBB4A0E7CA705117F05746B610DCBD +:1064E000DD7AC6CF753CCBCFDF9C4CEEDC4D79AD71 +:1064F000CF0EA57B23BBEDDE857BE8BD89EE6DACC1 +:10650000F42824D7AB7E11E6C3799D7896C7E1AB1A +:106510001A1BE85ECF2A607B3C670765299E973B84 +:10652000A16F49C3714FC443897ED67DDC7E3A6A30 +:10653000792C8DF87B4B988272BB0A2C06B4FFCE67 +:10654000B3963B36F2E7E8B9B3AA2D61740EC10DDC +:10655000CFF1BC2703BB08E946E21BDE07E5417625 +:10656000DB83EF81B84BC8ABBBF2B91F774F3E8FCF +:106570000FD446B43F9641F3E37C02EBC3F3E698B5 +:1065800037F9E77198FF91ADA07CA86A3775A3FD34 +:1065900051B5434FF7A24A3AA9044186FBC9958CED +:1065A000DB99CA4FB6E7A07FD6F4ACA908E7D32D94 +:1065B000EEFBACFAD18F395E5EB68873AB74A7126E +:1065C0003BB12D95F2D1A761EE19D1C770C2FF146E +:1065D000755301F1C39608FA7D80AA5557E828BF84 +:1065E00044E57E18944E85F2F48D24476B841CADEF +:1065F0005D7555D455C8576FAB745F7955D442F269 +:10660000032F68C04F9790FFA178F309B953037C1B +:1066100082E79D6BC5B9AEEA6DFC3ECCEA953CCEF7 +:10662000C87EC1EF3F5D6AF245E2784BB7AA0E5CC7 +:10663000A76A437B4E3C8CF3CB7C2EF7A0BD1BE5B9 +:1066400092EC6FA9A97D21F6B7F43913C9F35FE67F +:10665000C7897C9E4713D0EEEDDF9EC3ED6FF774C4 +:106660006460DE8F6CD7379F761E5FBAC03A7FF8C2 +:10667000217CF2B71D26820B3C143A2F173ADF53C8 +:106680007A8007E03FF59C89EE53FC0CE4A007CF2D +:1066900073473B1FA1BC88DFAB748F10C285FA68BB +:1066A0009137F8FBDA584714E65FD6BE5DA2E1F7F2 +:1066B000ED421EC33ADC48787A5B4FE76443F1FE53 +:1066C00028B68B0FE0BBE72288EE4EA5703A38F56E +:1066D000FC10D22BDDD1E23CB4BE3D0DF3A54F3D05 +:1066E00037A490DFA39344F6689595AFFBA9E8F62D +:1066F000346BC07B4977CC072D913EF09B4CB41393 +:10670000B85D566D5C4BF92F983F3DA6884A5FD81F +:1067100025F29F812EC97FD70F1776058E9720F21D +:10672000F7496EB51B502EBB851D59B323347F9A94 +:10673000BFFF6BBE22CF53DAE264DE36E68B7B14FA +:10674000CAA3A96EBEAB12F9A37AF1BADB905E259B +:10675000FCD51A2B4579D0ADA80447B789DFC3CD46 +:1067600002C7C9E0A535C13FCF1E31DE857C1BA71E +:1067700067D478D04F4DB3B296FAB7CB38029F8F1B +:10678000FC0ED060403DD13D49BC1F60BE12BED062 +:10679000F9CAF50D1BCEE54CB7DDF6C878AE9728E3 +:1067A000FE76FE9B915131DFE16FA327DB97BF8C13 +:1067B000A99974090163EF0B79550DF0219C399B60 +:1067C00082F3D773B704D787ED08AEE7EF0AAE17A9 +:1067D0007404D71DAF04D7BF411CC773FF1FCFE19F +:1067E000A3FF8F25FAFFB630EEFF631DFD7F2CD18E +:1067F000FFC7E7E8FF631DFD7FACA3FF8F75896FBF +:106800008C03601DE300F8FE3A81A7BD783FADEA36 +:10681000CF13BD4AD571BE986B08CA63DE5B31E801 +:1068200092E7C8E4F9AE4BE495D23931791E37F4DA +:106830009C58DFBDBB21E7C490CEB01F7B82FB8A92 +:10684000E1E8072A9D2B93018EBD19DEBC25A4EF3C +:106850004D66CC9BEF5AF1D94A7497BE8C778F1F47 +:106860001E8FE7BB7BB7F173DB3E92375DCB6D6F5D +:106870005F2DED1280B30CB08CF42CCFED5EF63EA4 +:10688000DDCBDEA31B4C2FD2AE7B4ADF9B8C72F399 +:1068900093678D6B11CE4F445C93CD3186E43D7090 +:1068A000BF69C9430ADDFF7DEBF018BEBF7414B0A9 +:1068B000F31D743AFFE248B2B7FBEA6B151D9D2346 +:1068C000703B491F49BB2C4D01BB0CE520CC1FF58B +:1068D000F5900DBA20F8877AC383E82E6F7B4CC8F9 +:1068E000B99694A0F623F664849C6B19167C6E62AC +:1068F000F6F283A8A767AD1D19D4AEDC755508DE86 +:10690000049CC23E2D47BB10F5CD7D46A2ABA5EF42 +:10691000A964CF54E04B908F15D817AC63C516917E +:106920008FDD10AC772B34E6C17BC9E60B7D24E903 +:10693000ADC2CA9CD1F0FD99C2966D784F6CE5EB63 +:10694000EF8CB1E2F93F655222062B66E7BA9B91C4 +:106950006ED2F44ECAFFADD9991D8DF7C59D3EFA92 +:106960002AE5754A3A49D35BC3713DDB5AB89D8F1E +:10697000713335C6BFDE6D2DB1E15966FFBC02F241 +:106980005AC82EBE80792DF0A86292E2318CF0C3F5 +:10699000BF44E80F09EFA7C20F60CDBC9FBBC5FB8A +:1069A0009AA2D79E8C81A53BAD3BF4E52AD45385B2 +:1069B000ED393EB4D736B625DC0AF87826CCFD048E +:1069C000CE63C95B2591987FF7C50E3DDD5FFBD790 +:1069D000D6A79FC47CE9552D4F1B302E50A5790DAD +:1069E000941FFA6C9B01F3A5AFD9DE46CF176E2F2B +:1069F00023BF71115B4C7EE3E7F29E1031FF8A6288 +:106A0000659315E0D61570795111CEF723A7A8E349 +:106A10005F8D83F12E6C57285F78B66BC69478B47F +:106A200057DAA3E99EA797878B7BB442E8FEFC9BCD +:106A30002A8FEFCEE6EB3CD0FD53B32EDA89CE673A +:106A40005FCC237FEA26DF50EEBFE607FBAF1506DB +:106A5000DBDB28E7D96F55FA1D96BEB882434F7627 +:106A6000722DC82F3C67E91AAF06D161FDE488207A +:106A70003A9DC302E81F86BE997EE4C75F9F3D2D05 +:106A800033A8FD2DB3F342E8BAC8FF9EE4C1B8A015 +:106A9000F39AB5F884CEB514F77BCECF7D5E17F4AC +:106AA0007D2D9B19741EB0720BDF6FA8DD154DFB99 +:106AB0009115E27EBE396EFEBC6E0F7F0E1309E2A9 +:106AC000AFF412C71FB91ED4F3DF7C10FB1273F0B2 +:106AD000BF33FBE39DB1F0BE7B10F05E0B8C230453 +:106AE000DD7F20F635116EB27B457CA93697C797BE +:106AF0006A3D9D06BC3704F0AEC5625E678B42EB13 +:106B000001ED8DB145BCBE8CF2B683F3CAB03FCC6B +:106B1000CFAC3BAA96219F84BE07BAE3F6EF5E9EF8 +:106B20002F5B87F1213AE71692E789F1228C776192 +:106B3000BC2860FD2617D8881EABB6EF3C9202F841 +:106B400098E5E2745AD33E435F96DF9FAE80BEE97C +:106B5000FEED850CE80BF785808FBDB681E78FE6EB +:106B600023FA23120F754E4E8729488705FDE9AF9A +:106B7000D6B3D840F7C06C52D8A376DE1EF192820D +:106B800074198217C263083E249EFAF016F23E146E +:106B90002F0BDD8CE864E11EC58BFBB6127FA1F3E1 +:106BA00019087FA1EBBC88751AF07CCBA25D8A0323 +:106BB000EFD997FB3E6C6C487CE9CD4C8A2FD5B958 +:106BC000047E245DB838DDCFBCC8E32537E3FDB2D1 +:106BD00023FD74327B5A307FDE743181DEFFAB746B +:106BE000039600C569FF557A91F391F219E3894440 +:106BF0002722EF3A946F42E391D30B44DEE36836E9 +:106C00003A28CF7A807B4342F3ACA53E0FD5276567 +:106C1000AF737D22E5AA5BE809F70A7D020BD44336 +:106C2000F2B988CF2DB92F97EE47495B1E4BEDCABD +:106C30004C563A2F50B69CE76F97413B5B805DB155 +:106C4000B239330DF5C3C76B863CE9C17B3DEF8D8F +:106C50004B180BEBFDC90A7D1CFE76986CF7F18A88 +:106C600029699867F2C9BAB039747FF14F8CF43B47 +:106C70004DB5BB13F9BD77AA3901F33BCFBC184B17 +:106C8000F737FD50E8919A152F45E2F184EA155C3B +:106C90002F7F39C47D4F01ED57B76DA30D0E6B5B90 +:106CA00001EA85E602C221FB1CFB2A22FD44FAFE12 +:106CB0007393F566ECF7F367F50EDCBF85F74EDCF2 +:106CC00067BA5BF11DBF9AEEE3511230AE73FA3D25 +:106CD00095CE8356AA070BB0DF9AC63D697844BEAD +:106CE000A208F428ACF3E761EE661CB77AC5D36955 +:106CF000B469B5BA8D7EDF20201EBC06DFD7623CAA +:106D000018EAEEE5D951FC5EDC4BC783255ED2F371 +:106D100078DC639BD0EB68C76389763CE603A11DF2 +:106D20008F75B4E3B1443B1E9FD76F08B6EFFE43A7 +:106D3000ECD7CAB870BA7A8E7E47C853CC72179314 +:106D40001E36E7A27FBA540977A01DB954E17CBE74 +:106D5000F4CF16FE3B1A9DD772FD2BE821F4DED846 +:106D600009BD608305D0EDD5178D2CF09CF4241659 +:106D70001D542F312607B59F62B507BDBF26696830 +:106D8000D0FB6B6D8541F5EB73AF0C6A7F8363526B +:106D900050FDC6B1D706B59FE19C11549F553A37B7 +:106DA000A8FD4DAEB2A0F7B7CCA90C7A3FD77D575E +:106DB00050FDB68A7B83DAFF60F1F2A0F7F21EDDA8 +:106DC0000EF4BFC2F03E242395F25EDDAF748C7EDC +:106DD000BF697C89388F1DC6F5D1D2B7B2CD81F19C +:106DE0009177049D0F75387F87F43358DC7F3558D1 +:106DF000DC63D52DF4512AF329E2F73293919E42B8 +:106E0000DB85BE1F1F71E8820DD6B27444F32D1AC4 +:106E1000C8A5F1571C1A9909F59611BFE5F5AB0EF7 +:106E2000FD2A03EA1B5EB0CCD140CE8C1F71E80274 +:106E3000BE1FE4789BBF9FC5C834D9F2C2E25B3065 +:106E4000CF66FCD5196B1D3C5EC2EF7FC1C0C598F3 +:106E500080733246B30FF7EBE5BC102F785E1FF15D +:106E600082A50FE819CB4340CF58BE02F45C0E72E6 +:106E7000EC08D0339647C12FC5E7BF05BF14CB3709 +:106E8000C12FC5F277E08F62D909FE2896FFD93865 +:106E900087CA771BDDF4DD1F1A2BA83CD6B8989E55 +:106EA0007FD0D840E59F1A3DF4FCBF0A387FB13D42 +:106EB000C1BF9325F737E57E66D362D61581F2A070 +:106EC0004B8BC6DFA193FB9403C70134763CC03ED5 +:106ED0008B624EC308DA870CFE1D8FD159EE087CF9 +:106EE000FE9E7D56365E6C7FF3C5C5AFE2B6EE7B87 +:106EF000E29E83D07EBB0B843DEC705A474039C183 +:106F0000C8CF7F4F30F2F3DD13B4CE26A4A7A6AFCF +:106F1000990DF38E0E8AF3DC4D6B343ACFAD5C6481 +:106F2000549F18C7A8DEF475179D079F60752491BC +:106F30009E1275792E98FE02F296265FEC2C417B0C +:106F400063A2D9604339D19757C178DE84DCDFDF93 +:106F5000A4E7FBFE072DC74B30BE06F0301C4FE602 +:106F6000076CF99AF97405FE3C8B09C62ECADF92AC +:106F7000790FCAC52E15ED26995F25E1B268F05D3F +:106F8000913F6F4AC29D08754311BFB75B2DC2F692 +:106F9000BE64CC2F9BB8D840F721F6E57185310F40 +:106FA000C65F13453E01B427B8275F7453FEC8443B +:106FB000913F3218F75D793BDA67B6A0BF86DFC72D +:106FC000761DC6F9A4FE178C01ED9E5078DE83CCA9 +:106FD0001FC1F611BCBD4F0DE0CFACBF03DC91F873 +:106FE000FB90EDF4FBC083EBCC746F24733A09BFC4 +:106FF000B3845C65365117FA9AC515F3DF4114EF77 +:107000009FCD72CF407A718559FF1C41FC9C391885 +:10701000ED9219C28EFF0E7AB919BFFB9FD38B93E5 +:10702000AFFF2046F1B481E846D2855CEF503A923A +:10703000EB1E906F43EB2EE92794CE06A22749471B +:10704000138CFCDEC2893546C7FDF6FF7FE8E7CE2C +:107050005E36350A9A2CC87677A37E28BB683B82B9 +:10706000F5F96C12FDBE8C7C5F87EF47F77FEFFE72 +:107070005BAF3E2A80CE26081DB67E80FE643B793B +:10708000CF88EC7FD700EDDF1076C21B42EF2D9D3D +:10709000C2E9A974A8FC7D2EA7B9704C407E6BFE96 +:1070A00022F20F9899DBD736F81FC5D184DD7BF526 +:1070B000452DC8EEBE4ED8E3A58CCBEBD290FDFD9E +:1070C000EBF2AF21BBFCBA10BB3CD4CEDE3742ECB6 +:1070D000FBDB99FD5FBC4FF7D0088A8B07DB71980B +:1070E0002F87749F6953E97E20797FAEBC9779B270 +:1070F000E0E7C9782F7324FE8EA95B43A5720DF3D8 +:1071000050792DF352793DF3919D7003281EACDF29 +:10711000882952503F1C31FD763CF35832B2248B03 +:10712000EE49F1DF2BF91EF2799DEAFE8B35E05E28 +:10713000C943936DB41F7BC8C8CF5D235FE2EF5492 +:10714000CAF9BC0E7A370BF4E261D0CB58BE0A7A8A +:10715000390BE6F71AE865AC5F97CB7F1F62AA2D63 +:10716000384F4A7E7FBDB5041CB281F1757DC1AF39 +:1071700007213EDF881E3219E7FB46F41593715D47 +:10718000DE884ED4F132CC80E540DF4B3EB83E9FE6 +:107190009FFBBDDE3A95C6FB7F80CF6F717D43F1CB +:1071A000D92DFC89FF03B2867AE000800000000040 +:1071B0001F8B080000000000000BDD5B7B7494E572 +:1071C000997FBEB9652699492603845C20995CB9EC +:1071D0000D3033B91485EAC7256CBA0DEC045A207A +:1071E00018C38424080834445C23A29998A881E237 +:1071F0001ADA88C82A4CA8A0DD833D41A1C59AEEC1 +:10720000991250DAF542B5DDB5D58D8374BD5B6258 +:107210003CADB86BEB3ECFF37E6F66BE2169ED9E51 +:10722000B3FBC78693F3E6BD3FEF73FDBDCFF732E7 +:10723000627D3535B300606B4AEA1C984B656E1869 +:10724000E600B49E7A718E11DBAF6B9B0FA609002E +:10725000D7B75DC3E516EB622EDF6987509119E061 +:107260003DC09F2CFCED520D5001B0C3897FBBF196 +:10727000D7B488EBB75A817F9626059DDE4938DF63 +:1072800030907A2DF6BFF3C8AB3F083970A8129C36 +:10729000C4ED46F75EEF441CF82F46EF519AFFF914 +:1072A00060EE0A07CD0C5B02B301369B40EDF76040 +:1072B000F5B195BCDF17F4733DAE3F5301A0F9D68D +:1072C000A54C174088EB7715AB17E794F3D60A6403 +:1072D000006C0341D7942400AB1FE0118B28B759F1 +:1072E000ED11239E174E9B3F8C4E17B47E81E7AE67 +:1072F000488690CDCFE3435617C0C5396E5E17E779 +:10730000713D07D7A928C3F281E470673EC0EA2C1B +:1073100075A617F7AB34DA43066C1F99E2082761AC +:10732000FB9964E46B1AF231322B0DB0BDEABC114B +:10733000C248F2F3C9A94788DF679291DFA900B973 +:107340003383E5C487E7DD67A64470DEF5E07E6041 +:1073500001F2E36B76A33742FC30D6A505EDB1739D +:1073600027966D6F2C8C9C95F4E3EF57BD8E896F3B +:10737000A7E01F7360CE17466E36101F5A35F920EE +:107380009DDE08D1F94BA3178F02D741C9430BB03B +:10739000BEF8BC19C2581FA119D49FA98443486FD5 +:1073A000E579E3C524A4F3D3763572D64C9DC34664 +:1073B00040FACE39153888F426651AC06D8DED6F08 +:1073C0007327833B8E9E94E92E5DDDE1CDD68D4FF4 +:1073D0009B57A0EB4F5767EAFA2754F975F5498197 +:1073E0006B75E327AF59A4AB6705FF56373E67E3DC +:1073F0000A5D7D6ACB5ADDF8BCB6F5BAFEFCD066F4 +:107400005D7FA74DC81142EA85E9C8C72AD1058525 +:10741000DDADBA7155F60DD524CFE29E9DBAF5C00B +:107420006D7E8BF42B84FF48BF7E0F030A60599951 +:1074300029DAE53823E905EEB3D8B9F02C892A0713 +:10744000F67E4CFAB9D889E3E2CF63AF7A8FF6C9FA +:1074500001536C7EFED57A7017E9C1ACBF420F8232 +:1074600033C7D6832D100EE55FAD07E72068824253 +:10747000806907F4F29F11D6CB7FD6137AF9CFEE4D +:10748000D7CB7FEE69BDFC7D11BDFC4BCFEBE55F3B +:107490007E412FFFAFBCB6E84BC9EB9AA85E2FA484 +:1074A000BCE6BFBB624C79ADC17F242F34316F0481 +:1074B000F57D09F22902E3CB2D262F21BFFFA9DCA0 +:1074C0004E25D8EFEF616FB90FE9B8DC109C9666D6 +:1074D000BCDAFEA53C8C36F559F2232F914FC3F24E +:1074E000538D0F799A1F6AB38AF2368DDE4F6DC2C3 +:1074F000FFE4697E28B448C83B34E40877A2DD7F06 +:107500006A883A00F71B32F42854FE7272F067E47E +:10751000E7D6795A14D424C884C0890D48FFE5A958 +:10752000C34377D0BCDB1DC27F0344C80F466F77CF +:10753000F4ED516274D6E7400BF9F157BCC26F838A +:10754000375A5E83FEFD575E5CAC9CFC82D302E83A +:10755000E71A3CA086C9DF9B20B77E36EBA9D0C3D3 +:107560005D26F6ABD9B6E06F888ECE5F5BAD748ECC +:107570001170A7393D2CB8DC00C68DB7CCB0A67F02 +:107580000C7F996D5BF826CDDB64FDFAC3BFC5782F +:1075900031DF88FBA25C873719C247F269BF886D6B +:1075A0001AEE73B0D7E5DD83D5F97920FAB782D624 +:1075B0008F068CF583BB4AC274AEF94645F46FC79B +:1075C0007EFCF33DDCF7293BD111B6D538C82E70CF +:1075D0004A9C5C0F9AA08AE83A1836848AE7929D02 +:1075E00058C114A71F07512539CE99C2B615B3C982 +:1075F0006E9CBAFED9FD99BAF5E69E76EBFA7D91BE +:10760000E9BAFED2F35E5D3D4A7CF190FDCCD3CD6C +:107610009B8ABF063FD991AA6BCFBBB97539E101EF +:10762000EC570D2EB29F2ADD7A7997930D0AF6E773 +:1076300092724E223B0AE8FA190B203FEB6FCB60A7 +:107640007EE520FF92709F47CD185F5D5C572D58F7 +:107650005A90B134CED26DE2783A0569487309BACE +:107660008C340E4B1B8F1374603FC7E1A9B81ED139 +:107670008DFDAA49F48792B1EE9FE5667D329B109D +:1076800097A07F3A648E6E8238BBA94F423DB4B357 +:107690003C5592DFA1DBB3757A5AEC33F079FCB339 +:1076A000841D1DB5C2BA00F2ADF34E3BE4CFA579FF +:1076B000D12C928FC727F4F8EFA6A9337DE534DEED +:1076C000C9FB1E76BCBB89ECA37EAED8A7CE6058A2 +:1076D0005743F315D40F4F6C9FAF68F327978AB2C7 +:1076E0003E4DD0037758C247F363E7C8B44017E173 +:1076F00015DC7706E9F78D7BFBEF9F865D75961E9F +:1077000033B05F0F9B0927552F8A9AC087F63D73C8 +:10771000E64376C44987DA90AFD7A25F3FD1B72658 +:107720005404B00CF944F4E46133C9A19AF88BE530 +:10773000137E23EFB3D627CE3B6A6F1381ED0DE3A3 +:1077400000D335D266E13820E51827A710C9E558DF +:107750003B92887EE889762B97FFD48EFA5B0C707B +:10776000BC3D93EB3F687773D9DF3E9DDB9F6AF7A3 +:1077700072FD64FB3CAEFFB05DE5FAE9F62A2E7FB0 +:10778000DC1EE076D0E2569150AD51BE48FD917CB2 +:10779000A9BE5BC8C9BDDD1C388247A8364095E24A +:1077A0008FF1FB59BFF033F7D239CBC538F23372C2 +:1077B0005CA5D19376D11E1B27FDCA78B8EB7FEB71 +:1077C000BCA3FC35C5F4DC16A7DFF2DCD83F8E9DE8 +:1077D000E8ED897F2A34FE158879A9FE98DCE2EC71 +:1077E00087ED6BD47E205A4BF623F91B2E325411B1 +:1077F000BFEE73083E4B3E9CD2EC2548FA4CB83B9A +:10780000A4DA7D28AFA0B675A5F1F306D29F6687EE +:10781000C59D8443825ADCBD4E0DECBF0FDBD7F70C +:107820009AA10FDB1B70DB36972877217D0D217D18 +:10783000FCC4B8CEB8F92608A445148ACBDE7BBDBB +:10784000484763B77E5C3388756EB22FE578DB9C62 +:10785000106F6FA2389D4AA529366F8C387CCCA753 +:10786000C5E1B93097F1539B95EF351BADF25C7ACA +:10787000FC34122E4CA3F885F261BBC23292E48A2A +:10788000C567F7015CA434C637E467F2748A9B5D70 +:10789000266FB1FB6AFD1AE52788FB55AB1534DC72 +:1078A000E67999F8F621DE2792C8C7AEB1B27D0419 +:1078B000B5FE0F439F5CE4FE93362FD53FF25D98F3 +:1078C00043F78A20ED4FF7A4A07EBD915D567092DC +:1078D0007D9F748401C7BDAFF41D4B43B9BF6F38A2 +:1078E00091312F3F8E9EA8983F9E3DFC615AF02516 +:1078F000F283413364ACC1F53A8F1BBD1DB8FE6EF7 +:10790000FB990CD54EF73DF5826F12FB2BDDBDAE1A +:107910001AE322E9AF5C276F9676EE84738DFAA5A1 +:10792000054A98F4682464E4F83B52A530DDE8D7B2 +:1079300054E2F7AF005747FA6B00515BA1B05348D0 +:1079400012764A25D9294C13764A75B2532AC94E64 +:10795000A97DE5151FCBE91B57E6F37983DDD770C9 +:10796000BD242F644826FF7C83E23D8AC5EAC7E038 +:107970009E649C1AED585D4EF7B3614D5E255A7CAE +:10798000B94A9E9A5FB9D3AFF7B3AD1D0AFBD9567A +:1079900045C4CBD6FB15F6B3B2FE498F56AF14F5EE +:1079A0005BEE11F5A8D9DEADA489F315158BF35163 +:1079B00049E7A3FB399D8FEA743E2AE97CD44E7EC9 +:1079C00088EAE487A84E7E88EAE487A8243F44ED4D +:1079D000EB2190EB43167F7518B16F9C7D5D7FC5E1 +:1079E0000A4BE2EC6421A4EBEA8BAD59BAF195CED7 +:1079F0007C5DFFDF64CED0F57FCDEDD3D5BF3EFDFE +:107A00001ADDF865DE85BA3ACCFB5AAC5E40E65129 +:107A1000A3ABAF44DCBE24CEAEBF1968D0ADBF7AF5 +:107A2000CD26FD7AC1EDBAF937409B6E7E614B875A +:107A30006EFCBA36059AE2EBE88E49CF1A0F4C601D +:107A40003DF96E5160B61FE5FB66CA9F6E35D33DAA +:107A5000CF38B089F4B4756BB257C8B9A74AC8DD3E +:107A60000042CEC3B52CE75D1651AFF44E768EA121 +:107A70003F0328E72528977F463953194139537921 +:107A800006E54CE55994F31294DF7328672ACFA3D7 +:107A90009CA9FDE728672A5F403953F912CA99CAA1 +:107AA0000B28672A5F695FC3E52FDB833CEF5FDB51 +:107AB0003772F95A7B0BB7FFA6BD8DCB37DA43DCA3 +:107AC0003E84743499637411CE2DD2DDFF500F754E +:107AD000F73FA7AE4E38367E3CE1D8F87EC2B1F112 +:107AE000FD8463E3EB845FE3C7136E8DAFDFE27366 +:107AF000B37D115E8D9F47F834BE3EBB27748E72F6 +:107B000058CB1EF9DD592A4BD21A9E52D0356CF350 +:107B100097D69A103F95A434F8D3BD18073BE6D505 +:107B20002EC17AF04A29FB833930CCB83248973CD1 +:107B3000945B3022F0FFECCFB2B8FFB6994ECD6F18 +:107B400003FB27DF49607C79DB4C37B7CBF95E70EC +:107B50001AA994E363F5B1C725EE2FC7B17F8CA3B3 +:107B6000833C11F973DF2EBB7F0FEAD33183B22E32 +:107B700080FA740CF1D10AF4B7B38EAB061BF6AFE2 +:107B800039E9F419DD34BEC54FF795EF69FE498E2A +:107B90002F31C179B33F768EC7BF927F84D6DBE3A6 +:107BA00017783576CEA889FC39FA09358CF3160C8E +:107BB0005F589C86E383A185E5B47EB545E005DC8E +:107BC000E75ABAEFCD0A29EA9138FDEED5D60B86F1 +:107BD0004E9C21FFFAF8E1E5625EB298F7F8E154B5 +:107BE000DE7F799772C488FB2F380E6A1FCE7FD450 +:107BF0002F70C7ACE31123EDD7D025F693EB363CBD +:107C0000926B71D37D125A766696118F1420BF8DB8 +:107C1000E73A4BE792FC93E34BD064CC2E2D5F8880 +:107C2000A2DC3DBD27407CF619843E59AD2A215186 +:107C3000D876BA06C8DF7FB52CBD7222AD3B005E98 +:107C400082A9CBCA7EA13B37B3AD82D7E5F8352DEB +:107C5000A44452F028CB431D7753185C16DA7E6E8D +:107C6000128D7F0CBCF96E0E3D709D3F46DF4CF5CA +:107C70008401C31F78E082C1A690DC6170429C1E23 +:107C8000A107F806C9DDE73503C9A5C6E43493DFCB +:107C9000488CEF122F7C427881A9D2FAB53C50EB88 +:107CA0009D572EDE47FEE894C00B12E73438C51905 +:107CB000820714F66B9F74E17583F87C2A290C8483 +:107CC000D7104FB8511F3F32BC90B11AE76D2D0C41 +:107CD000E71A905F9BB3FBE6B88C8C075E263FF8F3 +:107CE000416870F91A5CE762D7D319C4B74FBA4E2E +:107CF00059888F4887DD87FB3469FC69DAB5B19A0A +:107D00000ED9305BE0BBB7D0CFA8D388FE05695150 +:107D10003A578FC079322FD3F0E2840CC25B89F8D6 +:107D2000EF660DDF6DEA323758102F6E4AC07F378D +:107D3000EFAA7A87F6B9F92FE0BFB7FD5AFECC0B50 +:107D40005EC67F7F210F3B8AF314F5233FCB2721AB +:107D50007FADDD636EB189F336BC38F84DC62F2D8B +:107D6000C506C62F1AEEA9EB10B8064E40B858A1AA +:107D7000FA62B6D7BA53AA57C1792F6B7866C59500 +:107D80001C96CBAB1A7EF9E69559EC1FAAA3366E6A +:107D90005F75258BCBD5576670FB0ABBF013D16797 +:107DA000207C37DDEB4249024F0D00E3A7447DF50F +:107DB00081B392F47FA6AA0C126C5C467808D75B5C +:107DC00043F86802E97FC33D9348FFC3C0F83551CB +:107DD000FF57D7E557D23966542940762BF53F181F +:107DE000FA29EBED72D45B6A5F16EA3067D0BCE328 +:107DF000C0E70B6AF754A9E78976519FA2DDDFED52 +:107E0000227F347AAF2722F1BE0BA103B5AA87EFF8 +:107E1000D300D942E101E5ECF088FED2A70FD47679 +:107E200015F17D2894E68FDDB7A86E8BBB5F51DD21 +:107E300011976F20A8B120EEBE4B38DF26E64186B1 +:107E40003F763FA314F995B8FB718146BFBCC7D1FB +:107E5000FA26312F92E18FE50D649E82F205E47FD0 +:107E60002B8D6F544E663C98EE17762BF4E72DCD94 +:107E70006E87CA165594E1BCD6DDC593E1CFE8659F +:107E800023CA8DECB43E2D7AAB82F12C500AEA92D3 +:107E90007900B5A0F10BE900D4FBB55A7D67E93351 +:107EA000BFEEF6309FB95E5DFABDDA10AEBFDBFB08 +:107EB0009D00D117F3870195E49CE25121E8B9FABE +:107EC0001C324FB1B354C831315FD1E811F182AEE9 +:107ED000ABA40F6FEDFED10FE2F330328F87F18C40 +:107EE000EF33FB5764FAF6687E95F3709BA7705CDE +:107EF000DD5AAAC52DB40BF7348183A9241CEC4E9E +:107F0000123898EA8483A9241C4CED8483A94E3846 +:107F100098EA8483A94E38984AC2C1D4DE5310B877 +:107F2000A994EF2D3D56BA07C3F4E1878FE2FEF521 +:107F3000ED16207AE47DF9F0E66495CE7178A78598 +:107F4000FDA3BC37D7592E9CB3E6C7F8F07ADB7790 +:107F5000CCC2FF458ADDB8CEDA169B97FCF75059A4 +:107F60006007ED93E2F15AC8CF043D61C58D7CCD29 +:107F7000766A799BC261DFAD76FAF624D6A92E1017 +:107F8000F131CF086701F56A64B27A476939AD13F8 +:107F9000BC8BD6593FE07B2EC74DF12ADD42F2A9BA +:107FA0009F2CF2AFC84FFEBE26F9BCAF54F89D0A15 +:107FB000F259F87B59CB13A29CBA0B90BEDA894ECA +:107FC000E63BEA6D17DDAFF669FC96F9B7587EC25D +:107FD000C479224B9B85F3C79457B0F863F909C95C +:107FE00027996788F1C7F91CF16DD86171137E6913 +:107FF000B0972C25BD6FE8515CE40F2A8DD5CF31A9 +:108000007EDE975F40F87950CB97C9FB61B316E7E6 +:108010005A1F2CB464D1B8DD88E2B05EED72F33A39 +:10802000C3F72BCE236EB22B1C17970F6A3A700D35 +:10803000DB455318CBD2F1EDE7867D83539F21BDFD +:108040008BA816A2B7C989EE212EFFD1D8A3B01EE6 +:1080500027D69F2E35329D7508DB894F37EEC8B77E +:10806000ACA77C20C28C560F9D43D8919C57477972 +:10807000733FCB55F0631FD29D2FF6F3C7ADBF9E64 +:10808000D68FDB5FEAC14F4A1DBC5E83D36DC9CA80 +:10809000A7D2C9745EC5078DFF8D91B0D94BF498F6 +:1080A000705FACAF7586CDB4CFFA2E1FE7E1837B4E +:1080B000C53EC1EE74CB6CC25126A7652AD6EB92A1 +:1080C00085FD217D8C379B902F2ECAB7B9105FDAC2 +:1080D000AFE64F83466F534FBAA559D7BECF4CFA80 +:1080E0005DABF9FBF55D0B2D069A6F12E7FD409332 +:1080F0007350E3E77F6CB7EDA17C7F6DEFF3C50AAA +:10810000E9654B964FC173FE7BA9C0811F68FC9443 +:10811000FCA875F6F07946F9F9209E1F976C760653 +:10812000787DD48710D94D53AF58BFA9B7C1E2C1EC +:108130007283296899C2FB0B7E8EEE7BE0A7DABEC4 +:10814000362FED0BCE207F6F78FBC1D5B97C8EDE4C +:1081500087CCC43787D7BD94F026EA01EBA5D48736 +:10816000FA52617FF2FC7F2C35B13DFC31C19E6437 +:108170003C9276D5B4B70154DCB73113E3E31876FB +:108180009598B7ABD5F276872C8148A612B37B8C35 +:10819000872D4F8D11272ACAC4FE6B3539205FD831 +:1081A0009F8CE2E23221873AE26BDC7C5A8FD675F3 +:1081B0009569B86551A478BB27365EEE5BE712F38C +:1081C000482EA41F2E6D3F1ADFCAE30D3A7B6E1CAA +:1081D000C5ADC7EFC9A0F87742E1FC5AEBFD835368 +:1081E0006F23FB7E32C54BDEE9832D47B7655170A7 +:1081F0003585590E92AE66C42764D71BB4B8D71420 +:1082000019DBBE7B66050BCBE2F07FD3779F2C2179 +:108210003F89E78F909F78E3C9677F75AD3B16AFC5 +:10822000E479D677F7B15FBC716FBADF28FC6237AB +:10823000F9C50A8D0F8D5D425E80F222FC26E5DADB +:10824000D0A5707C686CAB0813EE19C5039A3C137B +:10825000E528E52BE528F98F94733E57E26649FF40 +:10826000F5DAFE8BB4F8B056D3BBB51B17B25F5C22 +:10827000DFDD401E096AB5F6DA267DFB28FF47BF21 +:108280000F7BEE253D1EE917FC1FD96B16F9B6E3EF +:10829000224FF841EB8F5E5A85E3DEDFDF971BFF4D +:1082A0007DA559CB9F6DD0F0E24DC8FFB1F286C8D5 +:1082B000FF956571FEEFA6C31AFF0BFA7FF763FE09 +:1082C000AE96E43D82FB36E2EF3CE4CF07C7BF6BDE +:1082D000CEC1F61B9A9574A2777D59BE38677F9FF1 +:1082E000B980EE012D3E27E57BD797093F90A8CFB7 +:1082F00058AA10C75F8A078A2B8657E478F2472767 +:10830000908E1DDB6DA9946F6E6C497739F1BEB00C +:1083100047D353E95F24DD97B637FC03DD272ED919 +:10832000847E6FC1F9F49DE7D2426F6EAB2786E77A +:108330006062FF09FE1EF62D0FDFCB71FFF3F4DD47 +:10834000A143935B515194BFC34A5C6941FF44DF31 +:108350007D8E18C4F90B8CA2FCC7E4FE192D7F0694 +:10836000EF156D897E4CF4483C2B71ECE31A5F24C9 +:108370005E95F8733CBF6381C7BA0BE83BC244F01B +:1083800076BA637A2AD749F43FF29C3929FDDF2770 +:108390003DC9F9D64C3FE1004B3274D3391ED5FCB0 +:1083A00042E2392FE50B7E8E47B7A477940FA88C55 +:1083B000F35C31FA253D88615503E1B23B66332E0B +:1083C000BCD4E1CD253E8D77BE4BF941B6D3E12C2F +:1083D000F0529C1DCFAFD63629215AD7DCE6E0FCFF +:1083E00083B493A6D1EF009EB428D23FD223F2FFEC +:1083F00097148C2B74AEED3603EB8576BEBF360F2B +:108400003D58E612E782A883F05A5DB266FF11116B +:108410007F87DA0AF99CB25DC6DF2167D4E18AF36F +:10842000BBBF6DD1E217AE43F6036D8540DFE98730 +:108430007A2E390CACA7823E396F8759AC0F0E4BA0 +:10844000F8A842B8A5C6D280ED37B6BD6A56B07C52 +:108450004993635E61BF3A7922E336C6159D0E6F7C +:1084600026EDD799EECD8C8FFF29F6559C87B994D0 +:108470001F29A2BCD4B0CFC6FC1EB2AF5A4AFE67B9 +:10848000E8403ABD08801D8A77A88DEE93F72471E5 +:108490007EBDDA00DD0AEB47C49243F1BB43617F46 +:1084A00020DB733CC17F27FF9D673CF187DFD0BA9B +:1084B000F7A478890EF81CF745FF48CFC3C8AEEB88 +:1084C000CB04AE4DCC8B24E641F22C6ECE930CFF48 +:1084D000CC084784FFFB37AA37FFCCACFBCE22BFCA +:1084E000FF34F7ADE4FC4393F65DA799F221A5FCB8 +:1084F0001D1F005DDEBDBD8B33482F9AF655EE0F74 +:1085000061FCC8552040FEE5B7A6680DF98177FBF0 +:1085100026BB3A083F6DED2C01EC6FEABB2F97CAE2 +:1085200077FB6C6BC83F2F71D62C49C7FD373C9247 +:10853000CE79BAD7B788BCC0E65F14B31E9ACB8594 +:108540001CB6FC69F09013E37D33B63971DDDFF7BB +:10855000A7F0BBAD2DEDA773E989C3E3494128C757 +:10856000F3DF6C1858750DF96B257C2C8BC7BBC7D6 +:10857000CC33CBF26DBA4FA13E6EBDEB355EE72337 +:10858000C30BCB6B71FE96AD4FA7D23A373FF86A5B +:1085900085D3C0791E3BAD4FDF8D9CE4980FF4CDA1 +:1085A000A178E956D4D4F231F22089FBB8B5FBC7E3 +:1085B000041A4BFED51558555BC67260798E47DF9D +:1085C000C6D38AEE7BDA8DE1340B78380F6AA1EFDF +:1085D000B64127300E7DD7086DFC9D49C31FB2BD43 +:1085E000A45CECFB6E5A4F2EE9EDA6630FE5929E5C +:1085F000BEE710F5BA63AB7F4E7E2AF85892C0C32F +:1086000026B0F0F7C690C0B3B0D1A57B8FE82D4F50 +:1086100061FA371D28D5C53B4A90D03EEF99C4FB7F +:108620008E3CE3C73EC249AF9B22CDA407AF239E39 +:108630000CB13C851F7BBDC7B894DFE1EC5080F0E6 +:10864000C3EB3D4F3B8AEC31BCE528EB8F903FDA22 +:108650007A32DD2F9E7589BCC036A7F447F6A56433 +:10866000E7889B9CA4B7ADCF9C5B0AA24E2F22C784 +:10867000E5E7660D2F8DD64F9EB010AEDD725CE043 +:10868000852DFD279ECB9E48F7490D2F683864AB9A +:108690008643B69D147CD97AF2A2A5311EE74F77A6 +:1086A000DD9B83886DE5A99FD63E88431B486ED726 +:1086B000A29F78FA89B51D18033A4BB53CB2699868 +:1086C00071DC9EE9AFF07D756B97B6DEF457EE2D49 +:1086D000E0F3D64C88C73BDF283733BFE47CE407A0 +:1086E000CF93EF9EC67BEF946D0B36964F1AEBBD82 +:1086F0009378CFF425DE116D24BD1ED0E251646B5A +:108700007237E104759BDD4465E7563BE30675FB74 +:108710002B36BAE70FFC2ED9A0A492AA0C0F1AF29E +:10872000F91D552BCD9F0C217E5795031185F0FA2D +:10873000E59FBC534AF4D37B2A70D277871FAFA53D +:10874000EF0E3BCB35FE78A2A5644793CE08BFFE63 +:10875000A819BA6DFC2E2400F41E25A27D2F0C7DD5 +:1087600066E0F723034AE47BB47E20C9DE4DEF5672 +:108770004E68FEE28EA24007ED7FC1652CF6D3BEA7 +:10878000DA77C4A9DA7DC8929D69273EC977748AD1 +:10879000AA421BEE6350CE35921E7D7BD80A740F21 +:1087A0009F9A5DC5F1AD53E3ABE29E483107CE78A9 +:1087B0000CA124A4E3DB60E5EF9A16834DA571CAF2 +:1087C000C0F39FD17BA11CE3C78369D89F739BE251 +:1087D000ED4492EB47DEE6F732439F1DB751B26C92 +:1087E0004266F021A22FDB189DFD804271E587567D +:1087F00005C74F9C63701AB53CA515F57D91F8131C +:10880000066EFF2CD585F3170D275F243E5F1E7E75 +:10881000FBC91F955169E57CE2A201632489DEC48E +:10882000592BD5F877BE1400AC15B175A0E72120FF +:108830003BFA96161FE47AE3CDBF9CE9E6F78FB8C2 +:108840000FBF77BB6C3784E97EB66860F0353AE7D6 +:10885000227A5F9C4AF3CC1F8EE69969DF0B53D3D3 +:1088600029AF4C36F405828E8C4E21CFEBD2F4F733 +:10887000C3B3E5E29E7456F353A3EF1ADD2AC4C7CF +:1088800031C97FE90724FD23768BC8EF6E14F9FA0E +:108890009101C42763F85F59BE4AF80471C78BC5BC +:1088A000EAD9F2F2985E24EA41A2BCA55C61E785B0 +:1088B0007369F92CCFD90F00DD5BA28FBEACB03C41 +:1088C0002FD07A07AF1CF1919C3B1D4BF3839EFF89 +:1088D0007F72947E27982CDED38FE77F82C9E29D3A +:1088E000FD18FE27795A3EFBA73F907F427F718E8D +:1088F000FC85F4135FC22FFD17F179F45DA3C3204B +:10890000BE0712FEC57D3ADBA686E9DE313FCFDD2C +:1089100061A2FE3B81E3AB7C0F29F3B09D6DB3C434 +:1089200038F9BEF17623BF7F7CCF2CDE3F863AA696 +:10893000312EE41F7AE711CAE1F77DF21D61A749E4 +:10894000B487B6008FEBA4F78E69B1778464F37CAB +:10895000EE16603F35BAEF0EF1AE52DA43304DBC41 +:108960003F0C5E16FEB3A0225D8B13D172C2C3DF33 +:10897000BEDB01A49F52FED95A1C92F2376AF2CF95 +:10898000F608F967DB0D117ABF0C1B97A8F172ACE2 +:10899000C3B9B4EEB388DBAD44578D787FD75BA302 +:1089A00066D1F7C8DE9A0C03E1A91FFEE99637EFFE +:1089B000247EBC68661CDAEB13E7ECFD4921E3ADCD +:1089C0002143F8E10D347F959DDFC14ABE1A33572C +:1089D0003EDC84E57E25F87DD2B35E8781CFDBBBAC +:1089E0002999EDB2375F9CBFB7B880D741F9951C84 +:1089F000A07D6AAC02CF6AFCB9BC718A263FB1EF98 +:108A0000F0FD0EF92E55EB2F90EF52997FB1F7A89C +:108A1000C3A9F1DF492E6B38E4B22697D17610EF67 +:108A200053310EA7C6E787C76B9F3B39F8F58A49D4 +:108A3000B1FEDE74358B705522FF1FECF0759790F8 +:108A40003E380C4EC2F5E3C92D65B5E5D0D1387975 +:108A500091DAD339533AE7F3B9A5FCF6CB38877AE4 +:108A6000C9FA93204F9822F443DEF3F342171FE62E +:108A70008F30109D41F113ED6E3ADD0B87C8BFCDED +:108A80008DE9ADA28A7763D28EA5BE4A3F379E3D5F +:108A90002B6DE8FFC67C3FDDCF763B05374E296462 +:108AA000BBDE4EFC321ABC99496CCF17B2889E2FA0 +:108AB00061D77F4FB9F9899A5F89640677D23A13F3 +:108AC000353F926D0CCF10EFB461A3F69D91FFDF9F +:108AD000CB9B1A5FD7A1FF9A80E37A2B443C815D40 +:108AE000097E4C9343BD36FECD8FD0DEE6C6E4B89A +:108AF0004EBB1FD5EF4ABA48FEB07E9759D8515B9E +:108B0000A59AB00EFB73B90EB83F9E44E792F3D618 +:108B10006DFACF4984AFC79D1F9D924EEFEDD89F50 +:108B2000E2B9CF5802FBE99C437089DF73BDF0477F +:108B3000237F97B888F271A751991B76E33A872B68 +:108B400004AE996B0D1EA2F1F2FF1FC97BDD0BBEB7 +:108B5000778AE97B0A7C3E3885E9991CE8237EEE1A +:108B60002E1AE1EF2C4359C3665A7FA8F6FDA9449B +:108B7000DFBAB6E7D9EFAF937EFF2FF02B914F927C +:108B80007FB1738F4C221CFD7FC537A937FF0D5C69 +:108B90003910ACE0350000000000000000000000CB +:108BA0000000004000000000000000000000004045 +:108BB000000000000000000000000028000000008D +:108BC0000000000000000010000000000000000095 +:108BD0000000004000000000000000000000001045 +:108BE000000000000000000000000008000000007D +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D000000000000000000000000900000100000C3 +:108D100000000008000090080010000000000002A1 +:108D20000000900000100000000000108000000013 +:108D300000000000000000008000000000000000B3 +:108D400000000000800000000000000000000000A3 +:108D5000800000000000000000000000000093B848 +:108D60000001000400000001000093C000000000AA +:108D700000000002000093C800000000000000088E +:108D8000000093CC0000000000000002000093D01F +:108D900000000000000000080000972000400000D4 +:108DA00000000040000093E0008000000000004848 +:108DB000000094E00040000000000008000094F073 +:108DC00000400000000000180000A0000028000083 +:108DD000000000280000C0C00008000000000001E2 +:108DE0000000C0C100080000000000010000C0C277 +:108DF0000008000000000001000020080010000032 +:108E0000000000100000200000000000000000082A +:108E100080000000000000000000000000000000D2 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0008000000000000000000000008000000092 +:108EE0000000000000000000800000000000000002 +:108EF00000000000800000000000000000000000F2 +:108F00008000000000000000000000008000000061 +:108F100000000000000000008000000000000000D1 +:108F200000000000800000000000000000000000C1 +:108F30008000000000000000000000008000000031 +:108F400000000000000000008000000000000000A1 +:108F50000000000080000000000000000000000091 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F90000000000000000000000000008000000051 +:108FA0000000000000000000800000000000000041 +:108FB0000000000080000000000000000000000031 +:108FC0000000000000000000000000008000000021 +:108FD0000000000000000000800000000000000011 +:108FE0000000000080000000000000000000000001 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:1090300000000000000000008000000000000000B0 +:109040000000000000000000000000000000000020 +:1090500000001EC8000000000000000800002008FA +:1090600000100000000000100000200000000000C0 +:10907000000000080000A0800008000000000001BF +:109080000000A08100080000000000010000A08294 +:10909000000800000000000100009070003800008F +:1090A0000000003800001ED8000000000000000290 +:1090B00000001EDA00000000000000028000000036 +:1090C0000000000000000000800000000000000020 +:1090D0000000000080000000000000000000000010 +:1090E0008000000000000000000000008000000080 +:1090F00000000000000000008000000000000000F0 +:1091000000000000800000000000000000000000DF +:10911000800000000000000000000000800000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:10916000000000008000000000000000000000007F +:10917000800000000000000000000000000000006F +:10918000000000000000000080000000000000005F +:10919000000000008000000000000000000000004F +:1091A00080000000000000000000000080000000BF +:1091B000000000000000000080000000000000002F +:1091C000000000008000000000000000000000001F +:1091D0000000C00000400000000000400000C80087 +:1091E00000400000000000400000C82E00400000C9 +:1091F000000000010000C800004000020000000163 +:109200000000C801004000020000000000008000D3 +:10921000004000000000004080000000000000004E +:109220000000000000008000000800400000000472 +:109230000000800400080040000000040000B000AE +:1092400000280000000000280000B14000100000CD +:10925000000000100000B14A0010000000000001F2 +:1092600000008800008000000000008000008800EE +:10927000000800800000000200008C000040000098 +:109280000000004000002008001000000000001056 +:109290000000200000000000000000080000125044 +:1092A000000800000000000100001251000800004A +:1092B0000000000100001252000800000000000140 +:1092C00000008E0000100004000000040000129056 +:1092D0000030001800000010000012980030001844 +:1092E00000000002800000000000000000000000FC +:1092F000800000000000000000000000800000006E +:1093000000000000000000008000000000000000DD +:1093100000000000800000000000000000000000CD +:10932000800000000000000000000000800000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:10936000000000000000000080000000000000007D +:10937000000000008000000000000000000000006D +:10938000000000000000000000000000800000005D +:10939000000000000000000080000000000000004D +:1093A000000000008000000000000000000000003D +:1093B00080000000000000000000000080000000AD +:1093C0000000000000000000000083080080000092 +:1093D000000000800000000100000000000000000C +:1093E0000000200800100000000000100000200015 +:1093F00000000000000000080000850000080000D8 +:1094000000000001000085010008000000000001CC +:10941000000085020008000000000001000060005C +:10942000003800000000003880000000000000004C +:10943000000000000000845400080000000000024A +:109440000000845600080000000000020000846450 +:109450000010000000000004800000000000000078 +:10946000000000008000000000000000000000007C +:10947000800000000000000000000000000000006C +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A000000000000000000000000000800000003C +:1094B000000000000000000080000000000000002C +:1094C000000000000000000000000000000000009C +:1094D000800000000000000000000000800000008C +:1094E00000000000000000008000000000000000FC +:1094F00000000000800000000000000000000000EC +:1095000080000000000000000000000000003000AB +:10951000004000000000000800003008004000008B +:1095200000000020000032000020000000000020A9 +:10953000000037A8000000000000000880000000C4 +:1095400000000000000000000000A000000000007B +:109550000000200000003EC10000000000000001EB +:1095600000003EE0000000000000000200001E00BD +:1095700000E000080000000880000000000000007B +:109580000000000000004000000800000000000192 +:109590000000400100080000000000010000404001 +:1095A0000008000400000002000040600008000401 +:1095B0000000000480000000000000000000000027 +:1095C000000040000008000000000004000040040B +:1095D00000080000000000040000404000000000FF +:1095E00000000008000040480000000000000008E3 +:1095F000000080000000000000000010000050404B +:109600000001000400000001000050000000000004 +:1096100000000020000050080010000000000004BE +:109620000000500C0010000000000001000052C7B4 +:109630000000000000000001000052C60000000011 +:109640000000000100003000004000200000000485 +:10965000000030040040002000000004000030083A +:1096600000400020000000020000300A00400020FE +:10967000000000020000300C00400020000000014B +:109680000000300D00400020000000010000300EFE +:1096900000400020000000010000301000400020C9 +:1096A000000000040000301400400020000000040E +:1096B0000000301800400020000000040000301CB2 +:1096C0000040002000000004000050000100008065 +:1096D000000800040000500401000080000800049D +:1096E0000000000A000000000000000000005068B8 +:1096F00001000080000000010000506901000080AE +:10970000000000010000506C010000800000000219 +:109710000000506E01000080000000020000507048 +:10972000010000800000000400005074010000806F +:1097300000000004000050660100008000000002EC +:109740000000506401000080000000010000506033 +:109750000100008000000002000050620100008053 +:1097600000000002000050500100008000000004D2 +:109770000000505401000080000000040000505818 +:1097800001000080000000040000505C0100008027 +:10979000000000040000507C010000800000000177 +:1097A0000000507D01000080000000010000401812 +:1097B00000100000000000040000409000100000B5 +:1097C00000000004000040980010000000000004A9 +:1097D00000004110000000000000000200004112E3 +:1097E0000000000000000002000041140000000022 +:1097F000000000020000411600000000000000020E +:10980000000060400008000000000002000060420C +:109810000008000000000002000060440008000092 +:109820000000000200006046000800000000000286 +:1098300000006080000800000000000800006000D8 +:1098400000080000000000020000600200080000A4 +:109850000000000100006004000800000000000299 +:10986000000060C000080000000000080000610067 +:10987000000800000000000400006104000800006F +:10988000000000010000614000080000000000022C +:109890000000614400080000000000020000618038 +:1098A0000008000000000004000070000008000034 +:1098B000000000020000700200080000000000012B +:1098C000000070040008000000000002000070406A +:1098D00000080000000000020000704400080000C2 +:1098E00000000002000070460008000000000002B6 +:1098F0000000766000080000000000080000708092 +:109900000008000000000002000070840008000051 +:1099100000000002000076A000080000000000081F +:1099200000008040000800000000000100008041AD +:109930000008000000000001000080420008000054 +:10994000000000010000804300080000000000014A +:1099500000008000000800000000000200008002FB +:109960000008000000000001000080040008000062 +:1099700000000002000080C000080000000000029B +:10998000000080C20008000000000002000080C447 +:1099900000080000000000020000808000080000B5 +:1099A00000000001000080810008000000000001AC +:1099B0000000808200080000000000010000808399 +:1099C0000008000000000001000080840008000082 +:1099D0000000000100008085000800000000000178 +:1099E0000000808600080000000000010000600008 +:1099F00000080000000000020000600200080000F3 +:109A000000000001000060040008000000000002E7 +:109A10000000604200C0001800000002000060402A +:109A200000C00018000000020000604C00C00018D8 +:109A3000000000080000604400C00018000000089A +:109A40000000605700C000180000000100006054D2 +:109A500000C00018000000020000605600C000189E +:109A6000000000010000664000080000000000083F +:109A7000000066800008000000000008000066C0CA +:109A80000008000000000008800000000000000046 +:109A90000000000080000000000000000000000046 +:109AA00080000000000000000000000080000000B6 +:109AB0000000000000000000800000000000000026 +:109AC0000000000080000000000000000000000016 +:109AD0008000000000000000000000008000000086 +:109AE00000000000000000008000000000000000F6 +:109AF00000000000800000000000000000000000E6 +:109B00008000000000000000000000008000000055 +:109B100000000000000000008000000000000000C5 +:109B200000000000800000000000000000000000B5 +:109B30008000000000000000000000008000000025 +:109B40000000000000000000800000000000000095 +:109B50000000000080000000000000000000000085 +:109B600080000000000000000000000080000000F5 +:109B70000000000000000000800000000000000065 +:109B80000000000080000000000000000000000055 +:109B900080000000000000000000000080000000C5 +:109BA0000000000000000000800000000000000035 +:109BB0000000000080000000000000000000000025 +:109BC0008000000000000000000000008000000095 +:109BD0000000000000000000800000000000000005 +:109BE00000000000800000000000000000000000F5 +:109BF0008000000000000000000000008000000065 +:109C000000000000000000008000000000000000D4 +:109C100000000000800000000000000000000000C4 +:109C20008000000000000000000000008000000034 +:109C300000000000000000008000000000000000A4 +:109C40000000000080000000000000000000000094 +:109C50008000000000000000000000008000000004 +:109C60000000000000000000800000000000000074 +:109C70000000000080000000000000000000000064 +:109C800080000000000000000000000080000000D4 +:109C90000000000000000000800000000000000044 +:109CA0000000000080000000000000000000000034 +:109CB00080000000000000000000000080000000A4 +:109CC0000000000000000000800000000000000014 +:109CD0000000000080000000000000000000000004 +:109CE0008000000000000000000000008000000074 +:109CF00000000000000000008000000000000000E4 +:109D000000000000800000000000000000000000D3 +:109D10008000000000000000000000008000000043 +:109D200000000000000000008000000000000000B3 +:109D300000000000800000000000000000000000A3 +:109D40000000000000000000000000008000000093 +:109D50000000000000000000000000000000000003 +:089D60000708020000000000EA +:00000001FF --- linux-aws-4.15.0.orig/firmware/bnx2x/bnx2x-e2-7.8.2.0.fw.ihex +++ linux-aws-4.15.0/firmware/bnx2x/bnx2x-e2-7.8.2.0.fw.ihex @@ -0,0 +1,19047 @@ +:100000000000373000000068000005D8000037A06D +:100010000000553C00003D800000008C000092C0B4 +:100020000000EF0000009350000000C00001825863 +:1000300000012E5800018320000000740002B180EE +:1000400000005AC40002B1F8000000AC00030CC06C +:10005000000186D800030D70000011B80004945010 +:10006000000000040004A610021100B80000000106 +:10007000020600DC000000010306100001FF000082 +:100080000A00000100000008020617FC003FE00122 +:100090000A00000100000010030617FC020101FF26 +:1000A0000A0000010000000803060200000304002B +:1000B0000A00000100000010030602000003040310 +:1000C0000A000001000020000406024C00000002AB +:1000D0000A00000400002020030601E000040406DA +:1000E000030602440002040A030602540002040C40 +:1000F000030602640002040E0A0000030000204010 +:10010000030601E000040410030602400003041487 +:100110000206026400000028020600DC0000000065 +:100120000A00000100000008030601D800020417BD +:100130000A00000200002020030601C0000204198A +:10014000030601D00004041B0A0000020000204046 +:10015000030601C00002041F030601D000040421AD +:100160000A000002000020400306022000020425CD +:100170000306023000040427020D00440000003290 +:10018000030D004C0004042B040D005C000000046F +:10019000030D008C0004042F030D00A000050433A0 +:1001A000020D00B800000002030D00C00004043876 +:1001B000020D015C00000001030D01640002043C1B +:1001C000020D020400000001030D020C0003043EB6 +:1001D000030D022000020441040D02800000001201 +:1001E000030D030000180443040D400000000A0042 +:1001F0000A00000100000008040D03600000000C6C +:10020000030D0004000F045B020D01140000000D3B +:10021000020D01180000002D020D01140000001D48 +:10022000020D01180000003D020D01140000004DF8 +:10023000020D01180000006D020D01140000005DA8 +:10024000020D01180000007D031010000003046A75 +:100250000210105000000001071011000010046D82 +:100260000810114000000008071011600010047D04 +:10027000081011A000000018071018000200048DDB +:1002800004104C0000000100021070040000000186 +:100290000A00000100000008031040D40002068D8F +:1002A00002104028000000100210404400003FFFF0 +:1002B0000210405800280000021040840084924A36 +:1002C00002104058000000000210413800000001F8 +:1002D0000210413800000001021041380000000106 +:1002E00002104138000000010210413800000001F6 +:1002F00002104138000000010210413800000001E6 +:100300000210413800000001030C20080003068F92 +:10031000030C201C00040692030C203800040696EF +:10032000040C20480000001D020C20BC000000014D +:10033000040C20C00000003F030C21BC0003069AFF +:10034000040C21C80000001C030C22380004069D88 +:10035000010C224800000000010C224C00000000AB +:10036000010C225000000000010C2254000000008B +:10037000010C225800000000010C225C000000006B +:10038000010C226000000000010C2264000000004B +:10039000010C226800000000010C226C000000002B +:1003A000010C227000000000010C2274000000000B +:1003B000010C227800000000010C227C00000000EB +:1003C000030C22D8000406A10A0000010000000965 +:1003D000020C2000000003E80A0000010000000AEF +:1003E000020C2000000000030A0000010000000CC5 +:1003F000020C2000000000010A00000100001001B2 +:10040000020C2000000005DC0A00000100001002C0 +:10041000020C2000000000040A000001000010048B +:10042000020C2000000000010A0000010000200171 +:10043000020C2000000005DC0A0000010000200280 +:10044000020C2000000000040A000001000020044B +:10045000020C2000000000010520040000710000D3 +:1004600006200780001006A50422000000004000BE +:10047000042324000000160003221170000806A7C0 +:10048000032211A8009006AF0422C000000000065D +:100490000322C0180004073F0422C0280000000CFB +:1004A0000322C058000407430422C0680000000C67 +:1004B0000322C098000407470422C0A80000000CD3 +:1004C0000322C0D80004074B0422C0E80000000C3F +:1004D0000322C1180004074F0422C1280000000CA9 +:1004E0000322C158000407530422C1680000000C15 +:1004F0000322C198000407570422C1A80000000C81 +:100500000322C1D80004075B0422C1E80000000CEC +:100510000322C2180004075F0422C2280000000C56 +:100520000322C258000407630422C2680000000CC2 +:100530000322C298000407670422C2A80000000C2E +:100540000322C2D80004076B0422C2E80000000C9A +:100550000322C3180004076F0422C3280000000C04 +:100560000322C358000407730422C3680000000C70 +:100570000322C398000407770422C3A80000000CDC +:100580000322C3D80004077B0422C3E80000000C48 +:100590000322C4180004077F0422C4280000000CB2 +:1005A0000322C458000407830422C4680000000C1E +:1005B0000322C498000407870422C4A80000000C8A +:1005C0000322C4D80004078B0422C4E80000000CF6 +:1005D0000322C5180004078F0422C5280000000C60 +:1005E0000322C558000407930422C5680000000CCC +:1005F0000322C598000407970422C5A80000000C38 +:100600000322C5D80004079B0422C5E80000000CA3 +:100610000322C6180004079F0422C6280000000C0D +:100620000322C658000407A30422C6680000000C79 +:100630000322C698000407A70422C6A80000000CE5 +:100640000322C6D8000407AB0422C6E80000000C51 +:100650000322C718000407AF0422C7280000000CBB +:100660000322C758000407B30422C7680000000C27 +:100670000322C798000407B70422C7A80000000C93 +:100680000322C7D8000407BB0422C7E80000000CFF +:100690000322C818000407BF0422C8280000000C69 +:1006A0000322C858000407C30422C8680000000CD5 +:1006B0000322C898000407C70422C8A80000000C41 +:1006C0000322C8D8000407CB0422C8E80000000CAD +:1006D0000322C918000407CF0422C9280000000C17 +:1006E0000322C958000407D30422C9680000000C83 +:1006F0000322C998000407D70422C9A80000000CEF +:100700000322C9D8000407DB0422C9E80000000C5A +:100710000322CA18000407DF0422CA280000000CC4 +:100720000322CA58000407E30422CA680000000C30 +:100730000322CA98000407E70422CAA80000000C9C +:100740000322CAD8000407EB0422CAE80000000C08 +:100750000322CB18000407EF0422CB280000000C72 +:100760000322CB58000407F30422CB680000000CDE +:100770000322CB98000407F70422CBA80000000C4A +:100780000322CBD8000407FB0422CBE80000000CB6 +:100790000322CC18000407FF0422CC280000000C20 +:1007A0000322CC58000408030422CC680000000C8B +:1007B0000322CC98000408070422CCA80000000CF7 +:1007C0000322CCD80004080B0422CCE80000000C63 +:1007D0000322CD180004080F0422CD280000000CCD +:1007E0000322CD58000408130422CD680000000C39 +:1007F0000322CD98000408170422CDA80000000CA5 +:100800000322CDD80004081B0422CDE80000000C10 +:100810000322CE180004081F0422CE280000000C7A +:100820000322CE58000408230422CE680000000CE6 +:100830000322CE98000408270422CEA80000000C52 +:100840000322CED80004082B0422CEE80000000CBE +:100850000322CF180004082F0422CF280000000C28 +:100860000322CF58000408330422CF680000000C94 +:100870000322CF98000408370422CFA80000000C00 +:100880000322CFD80004083B0422CFE80000000C6C +:100890000322D0180004083F0422D0280000000CD6 +:1008A0000322D058000408430422D0680000000C42 +:1008B0000322D098000408470422D0A80000000CAE +:1008C0000322D0D80004084B0422D0E80000000C1A +:1008D0000322D1180004084F0422D1280000000C84 +:1008E0000322D158000408530422D1680000000CF0 +:1008F0000322D198000408570422D1A80000000C5C +:100900000322D1D80004085B0422D1E80000000CC7 +:100910000322D2180004085F0422D2280000000C31 +:100920000322D258000408630422D2680000000C9D +:100930000322D298000408670422D2A80000000C09 +:100940000322D2D80004086B0422D2E80000000C75 +:100950000322D3180004086F0422D3280000000CDF +:100960000322D358000408730422D3680000000C4B +:100970000322D398000408770422D3A80000000CB7 +:100980000322D3D80004087B0422D3E80000000C23 +:100990000322D4180004087F0422D4280000000C8D +:1009A0000322D458000408830422D4680000000CF9 +:1009B0000322D498000408870422D4A80000000C65 +:1009C0000322D4D80004088B0422D4E80000000CD1 +:1009D0000322D5180004088F0422D5280000000C3B +:1009E0000322D558000408930422D5680000000CA7 +:1009F0000322D598000408970422D5A80000000C13 +:100A00000322D5D80004089B0422D5E80000000C7E +:100A10000322D6180004089F0422D6280000000CE8 +:100A20000322D658000408A30422D6680000000C54 +:100A30000322D698000408A70422D6A80000000CC0 +:100A40000322D6D8000408AB0422D6E80000000C2C +:100A50000322D718000408AF0422D7280000000C96 +:100A60000322D758000408B30422D7680000000C02 +:100A70000322D798000408B70422D7A80000000C6E +:100A80000322D7D8000408BB0422D7E80000000CDA +:100A90000322D818000408BF0422D8280000000C44 +:100AA0000322D858000408C30422D8680000000CB0 +:100AB0000322D898000408C70422D8A80000000C1C +:100AC0000322D8D8000408CB0422D8E80000000C88 +:100AD0000322D918000408CF0422D9280000000CF2 +:100AE0000322D958000408D30422D9680000000C5E +:100AF0000322D998000408D70422D9A80000000CCA +:100B00000322D9D8000408DB0422D9E80000000C35 +:100B10000322DA18000408DF0422DA280000000C9F +:100B20000322DA58000408E30422DA680000000C0B +:100B30000322DA98000408E70422DAA80000000C77 +:100B40000322DAD8000408EB0422DAE80000000CE3 +:100B50000322DB18000408EF0422DB280000000C4D +:100B60000322DB58000408F30422DB680000000CB9 +:100B70000322DB98000408F70422DBA80000000C25 +:100B80000322DBD8000408FB0422DBE80000000C91 +:100B90000322DC18000408FF0422DC280000000CFB +:100BA0000322DC58000409030422DC680000000C66 +:100BB0000322DC98000409070422DCA80000000CD2 +:100BC0000322DCD80004090B0422DCE80000000C3E +:100BD0000322DD180004090F0422DD280000000CA8 +:100BE0000322DD58000409130422DD680000000C14 +:100BF0000322DD98000409170422DDA80000000C80 +:100C00000322DDD80004091B0422DDE80000000CEB +:100C10000322DE180004091F0422DE280000000C55 +:100C20000322DE58000409230422DE680000000CC1 +:100C30000322DE98000409270422DEA80000000C2D +:100C40000322DED80004092B0422DEE80000000C99 +:100C50000322DF180004092F0422DF280000000C03 +:100C60000322DF58000409330422DF680000000C6F +:100C70000322DF98000409370422DFA80000000CDB +:100C80000322DFD80004093B0422DFE80000000C47 +:100C90000322E0180004093F0422E0280000000CB1 +:100CA0000322E058000409430422E0680000000C1D +:100CB0000322E098000409470422E0A80000000C89 +:100CC0000322E0D80004094B0422E0E80000000CF5 +:100CD0000322E1180004094F0422E1280000000C5F +:100CE0000322E158000409530422E1680000000CCB +:100CF0000322E198000409570422E1A80000000C37 +:100D00000322E1D80004095B0422E1E800000006A8 +:100D10000422F640000000200223800000000010A2 +:100D20000223804000000012022380800000003077 +:100D3000022380C00000000E02238BC000000001CF +:100D40000A0000020000000802238380000864708B +:100D5000022383C0000002260A00000200000009EE +:100D600002238300000864700223834000000226EF +:100D70000A0000020000000A022383000000055F51 +:100D800002238340000000010A0000020000000C62 +:100D9000022383000000015702238340000000006B +:100DA0000A0000020000100002238380000C96A8B5 +:100DB000022383C0000003390A0000020000100172 +:100DC00002238300000C96A802238340000003390D +:100DD0000A00000200001002022383000000080E37 +:100DE00002238340000000020A00000200001004F9 +:100DF000022383000000020302238340000000005E +:100E00000A0000020000200002238380000CF8503A +:100E1000022383C0000003520A00000200002001E8 +:100E200002238300000CF850022383400000035289 +:100E30000A00000200002002022383000000084D87 +:100E400002238340000000020A0000020000200488 +:100E500002238300000002130223834000000000ED +:100E600005240000324B00000524800028780C93F4 +:100E70000624D5E063AA095F0A0000010000000211 +:100E800002231480000000000A000001000000049A +:100E900002231480000000000A000001000000117D +:100EA00002231480000000000A0000010000000876 +:100EB000022000BC000000320A0000040000001004 +:100EC000022000BC00000002022388400000000154 +:100ED00001200138000000000223884000000000CB +:100EE0000A0000010000001102231480000000012C +:100EF00001200000000000000120000400000000AC +:100F000001200008000000000120000C000000008B +:100F1000012000100000000001200014000000006B +:100F200003200020001A0961032000A40002097BAD +:100F30000220022400000000022002340000000011 +:100F40000220024C00000000022002E40000FFFF2B +:100F500008202000000008000A0000010000001026 +:100F600008204000000002000422110800000002D6 +:100F70000422340000000002042259000000000690 +:100F800004226040000000300422F3000000001042 +:100F900004221110000000020422340800000002A4 +:100FA00004225918000000060422610000000030ED +:100FB0000422F34000000010042211180000000277 +:100FC0000422341000000002042259300000000600 +:100FD000042261C0000000300422F38000000010F1 +:100FE0000422112000000002042234180000000234 +:100FF00004225948000000060422628000000030EC +:101000000422F3C000000010042211280000000296 +:10101000042234200000000204225960000000066F +:1010200004226340000000300422F400000000109D +:1010300004221130000000020422342800000002C3 +:1010400004225978000000060422640000000030E9 +:101050000422F440000000100422113800000002B5 +:1010600004223430000000020422599000000006DF +:10107000042264C0000000300422F480000000104C +:101080000422114000000002042234380000000253 +:10109000042259A8000000060422658000000030E8 +:1010A0000422F4C00000001004102400000000E03E +:1010B0000310201C0002097D021020C00000000265 +:1010C000031020040002097F02170008000000023C +:1010D0000217002C0000000302170038007C1004E7 +:1010E0000317004400060981021700700000000C7D +:1010F0000317007800020987021701C408100000D6 +:1011000002170344000000010317040000080989C6 +:10111000031704300008099103170480000409999B +:101120000A000001000000080217003C0000000453 +:101130000A000001000000100217003C0000000837 +:10114000021700040000000F021701EC000000026B +:10115000021701F400000002021701EC0000000277 +:10116000021701F400000002021701EC0000000267 +:10117000021701F400000002021701EC0000000257 +:10118000021701F400000002021701EC0000000247 +:10119000021701F400000002021701EC0000000237 +:1011A000021701F400000002021701EC0000000227 +:1011B000021701F400000002021701EC0000000217 +:1011C000021701F4000000020A00000100000008FC +:1011D00002130078000000320213003C000061A8F6 +:1011E00004130108000000030213010400000000C2 +:1011F0000213013400000000041301080000000382 +:10120000021301040000000002130134000000007A +:101210000413010800000003021301040000000091 +:101220000213013400000000041301080000000351 +:10123000021301040000000002130134000000004A +:101240000413010800000003021301040000000061 +:101250000213013400000000041301080000000321 +:10126000021301040000000002130134000000001A +:101270000413010800000003021301040000000031 +:1012800002130134000000000413010800000003F1 +:1012900002130104000000000213013400000000EA +:1012A0000A000001000000880200A5F8000000000C +:1012B0000A000001000001080200A5F8000000017A +:1012C0000A000001000000900200AA840000000053 +:1012D0000A000001000001100200AA8400000001C1 +:1012E0000A000001000000900200AA88000000002F +:1012F0000A000001000001100200AA88000000019D +:101300000200A270000000000200A27400000000B1 +:101310000200A270000000000200A27400000000A1 +:101320000200A270000000000200A2740000000091 +:101330000200A270000000000200A2740000000081 +:101340000201620400000000030100B40002099DD4 +:10135000030100CC0002099F020100DC0000000133 +:1013600003010100000209A10201007C003000001D +:1013700002010084000000280201008C000000002F +:1013800002010130000000040201032800000000F7 +:101390000201055400000030020160580000FFFF08 +:1013A00002016060000000000201607000000007A0 +:1013B000020160B000000000020160C000000001F6 +:1013C000020160C800000000020162080000000085 +:1013D0000401805400000003020180780000000036 +:1013E000020180E800000007030180F8000209A361 +:1013F0000301810C000209A5020181240000000004 +:101400000A00000200000008020180E40000468893 +:10141000030180EC000209A70A000001000000801F +:1014200002018038000000060A00000100000200EE +:1014300002018038000000070A00000100000400DB +:1014400002018038000000060A00000100000800C8 +:10145000020180380000000E0A0000040000200095 +:10146000020180EC0000003802018100000025E448 +:101470000201811400004BC803018680000409A901 +:10148000020100C400000001020100F80000000198 +:10149000020100F0000000010201008000300000A5 +:1014A00002010088000000280201009000000000F6 +:1014B00002010134000000040201032C00000000BE +:1014C00002010564000000300201605C0000FFFFC3 +:1014D0000201606400000000020160740000000767 +:1014E000020160B400000000020160C400000001BD +:1014F000020160CC000000000201620C000000004C +:10150000040181A800000004020181D00000000055 +:10151000020182340000000703018244000209AD89 +:1015200003018258000209AF0A000002000000080F +:10153000020182300000468803018238000209B1AE +:101540000A000001000000800201818C00000006FA +:101550000A000001000002000201818C0000000767 +:101560000A000001000004000201818C0000000656 +:101570000A000001000008000201818C0000000E3A +:101580000A00000400002000020182380000003838 +:101590000201824C000025E40201826000004BC879 +:1015A000030186E0000409B3020100C80000000145 +:1015B000020100FC00000001020100F40000000133 +:1015C00004010138000000110401017C0000001139 +:1015D00004010138000000110401017C0000001129 +:1015E00004010138000000110401017C0000001119 +:1015F00004010138000000110401017C0000001109 +:101600000215C090000089260215C09C000000044D +:1016100002140000000000010215C02400000000B8 +:101620000315C0EC000209B70315C100000209B997 +:101630000A000001000020000315C1F4000809BBE6 +:1016400003140030000209C302140040000000012E +:10165000090000020000100803140004000309C57B +:10166000021400440000FFFF0A00000400002000F4 +:1016700003140038000209C802140044000FFFFFE1 +:101680000315C160000709CA0315C198000209D1FA +:101690000900000100001008041400040000000309 +:1016A0000A000001000020000415C16000000007CE +:1016B0000214000000000000020090C40000E000DE +:1016C000020090CC0000F300030090D4000209D384 +:1016D000020090E000007300030090E8000209D5CA +:1016E000020090F400007300030090FC000209D790 +:1016F0000200910800005300020091100000000455 +:1017000003009128000709D90300916C000609E045 +:1017100004009184000000060300919C000509E686 +:101720000300942C000309EB0300942C000309EE42 +:101730000300942C000309F10300942C000309F426 +:101740000300942C000309F70300942C000309FA0A +:101750000300942C000309FD0300942C00030A00ED +:101760000304000400120A030204005400000043B2 +:101770000204005C00000006020400700000000487 +:101780000304007800040A15040400880000000522 +:101790000304009C00030A19040400A800000004CC +:1017A000030400B800110A1C010401240000000019 +:1017B00001040128000000000104012C00000000C9 +:1017C0000104013000000000020401340000000F99 +:1017D000030401D000020A2D0204022C00000004C0 +:1017E0000304025800040A2F0312049400210A3350 +:1017F0000212038800000064021203900000000837 +:101800000312039C00030A54031203BC00030A578B +:10181000021203D0000000000212036C000000015D +:10182000031201BC003C0A5A031202B000020A96DD +:101830000312032400020A98021205B400000001FA +:10184000031205F800030A9A0212066C0000000158 +:10185000021201B000000001021207D800000000CF +:10186000021207D800000000021207D80000000092 +:10187000021207D800000000021207D80000000082 +:10188000021207D800000000021207D80000000072 +:10189000021207D800000000021030D8000000013A +:1018A0000710380000050A9D0710392000050AA21C +:1018B00007103B0000050AA707103C0000050AAC12 +:1018C0000316803000080AB102168054000000029E +:1018D0000416807C000000050316809000020AB9FF +:1018E0000316809C00020ABB021680AC0000005464 +:1018F000041680B800000005031680CC00080ABD5D +:10190000021680F0000000070316810000060AC5D9 +:101910000316812800030ACB0316814000060ACE75 +:101920000316816800030AD4031681A800030AD7AE +:10193000031681E800030ADA031681F800030ADDC2 +:101940000316820800070AE00316823400020AE741 +:1019500004168278000000040316828800060AE953 +:101960000216881020200101021688202020010183 +:101970000216883820200101021688482020010123 +:101980000316E6BC00020AEF0A000014000000087B +:101990000316806000070AF1041680A4000000020C +:1019A000041680B000000002031680F400030AF859 +:1019B0000316811800040AFB0316813400030AFF92 +:1019C0000316815800040B0203168174000D0B06E8 +:1019D000031681B4000D0B13021681F4000001FC04 +:1019E00002168204000000030316823C000B0B2049 +:1019F00004168268000000040216880C010101012F +:101A00000316881400030B2B0316882400050B2EE5 +:101A10000316883C00030B330316E6C400020B36A2 +:101A20000316E6E800050B380216E79400000001F3 +:101A30000A00001C000010000316806000070B3D28 +:101A4000041680A400000002041680B0000000020A +:101A5000031680F400030B440316811800040B479F +:101A60000316813400030B4B0316815800040B4E00 +:101A70000216817800000001021681840000000136 +:101A80000216819000000001021681A400000004EB +:101A9000021681B800000001021681C40000000196 +:101AA000021681D000000001021681E4000000044B +:101AB000021681F4000001FC0216820400000003FB +:101AC0000316823C00020B520216824800920092DA +:101AD00002168250012401240316825800040B547C +:101AE00004168268000000040216880C010101013E +:101AF0000316881400030B580316882400050B5B9B +:101B00000316883C00030B600316E6E800020B6333 +:101B10000216E6F8000002040A00000E0000102081 +:101B200002168174000000000316817C00020B6520 +:101B30000316818800020B670316819400040B6969 +:101B4000021681B400000000031681BC00020B6D78 +:101B5000031681C800020B6F031681D400040B71B9 +:101B6000021682440E490E490216824C00920092DF +:101B700002168254012401240316E6C400020B75E8 +:101B80000316E6F000020B770216E794000000014E +:101B90000A00000E000010400216817400000001CF +:101BA0000316817C00020B790316818800020B7BEF +:101BB0000316819400040B7D021681B4000000011D +:101BC000031681BC00020B81031681C800020B833F +:101BD000031681D400040B85021682440000000025 +:101BE0000216824C0FFF0FFF021682540000000005 +:101BF0000316E6C400020B890316E6F000020B8B05 +:101C00000216E794000000000A0000070000200010 +:101C10000316806000070B8D031680A400020B944E +:101C2000031680B000020B96021681F4000001C07A +:101C3000021682040000003F0216823C0000007F72 +:101C40000316E7BC00080B980A00000F00004020B4 +:101C5000031680F400030BA00316811800040BA3E5 +:101C60000316813400030BA70316815800040BAA46 +:101C700003168174000D0BAE031681B4000D0BBB6F +:101C80000316824000060BC80416825800000006A6 +:101C90000316827000020BCE0216880C01010101AE +:101CA0000316881400030BD00316882400050BD3F9 +:101CB0000316883C00030BD80316E6C400020BDBB6 +:101CC0000216E794000000010A00000D00004040E9 +:101CD000031680F400030BDD0316811800040BE0EB +:101CE0000316813400030BE40316815800040BE74C +:101CF00003168174000D0BEB031681B4000D0BF875 +:101D000003168240000E0C050216880C0101010129 +:101D10000316881400030C130316882400050C1600 +:101D20000316883C00030C1B0316E6C400020C1EBD +:101D30000216E794000000000A00000D0000800079 +:101D4000031680F400030C200316811800040C23F2 +:101D50000316813400030C270316815800040C2A53 +:101D600003168174000D0C2E031681B4000D0C3B7C +:101D700003168240000E0C480216880C0101012057 +:101D80000316881400030C560316882400050C590A +:101D90000316883C00030C5E0316E6C400020C61C7 +:101DA0000216E79400000001021680EC000000FF1C +:101DB0000304040800140C63020404CC00000001B6 +:101DC0000305004400020C770305005000080C795D +:101DD0000305009000070C81030500B000020C8889 +:101DE000030500C000020C8A030500D400020C8C1D +:101DF00002050114000000010305011C00020C8E05 +:101E000002050204000000010305020C00020C9010 +:101E10000205021C00000020040502400000000A28 +:101E20000405400000000D000A0000020000000848 +:101E30000305022000020C920305028000200C948E +:101E40000A000002000000100305022000020CB48A +:101E500003050280001D0CB60305000400100CD31E +:101E6000020500E00000000E020500E40000002E64 +:101E7000020500E00000001E020500E40000003E34 +:101E8000020500E00000004E020500E40000006EC4 +:101E9000020500E00000005E020500E40000007E94 +:101EA00004164024000000020316403000030CE337 +:101EB0000216404400000020021640700000001C82 +:101EC0000216420800000001021642100000000144 +:101ED0000216422000000001021642280000000104 +:101EE00002164230000000010216423800000001D4 +:101EF00002164260000000020A0000010000000912 +:101F00000216401C0003D0900A0000010000000AE5 +:101F10000216401C000002710A0000010000000CC3 +:101F20000216401C0000009C0A0000010000100185 +:101F30000216401C0005B8D80A000001000010027B +:101F40000216401C000003A90A0000010000100452 +:101F50000216401C000000EA0A00000100002001F7 +:101F60000216401C0005B8D80A000001000020023B +:101F70000216401C000003A90A0000010000200412 +:101F80000216401C000000EA02164000000000019A +:101F9000021640D8000000010316400800030CE6BA +:101FA00002164240000000000216424800000000F5 +:101FB00008164270000000020216425000000000A5 +:101FC000021642580000000008164280000000027D +:101FD0000304200800040CE90304201C00040CED99 +:101FE00002042038000000200404203C0000001FF0 +:101FF000020420B800000001040420BC0000005FBF +:102000000304223800040CF10104224800000000FF +:102010000104224C000000000104225000000000D6 +:1020200001042254000000000104225800000000B6 +:102030000104225C00000000010422600000000096 +:102040000104226400000000010422680000000076 +:102050000104226C00000000010422700000000056 +:102060000104227400000000010422780000000036 +:102070000104227C00000000030422C000040CF5CF +:102080000A0000010000000902042000000003E82B +:102090000A0000010000000A020420000000000302 +:1020A0000A0000010000000C0204200000000001F2 +:1020B0000A0000010000100102042000000005DCFD +:1020C0000A000001000010020204200000000004C9 +:1020D0000A000001000010040204200000000001BA +:1020E0000A0000010000200102042000000005DCBD +:1020F0000A00000100002002020420000000000489 +:102100000A00000100002004020420000000000179 +:1021100005180400008B0000061807B800090CF928 +:10212000041A000000004000041B240000001600F8 +:10213000031A16C800020CFB031A17D000900CFDFE +:10214000031A404000040D8D041A405000000006A0 +:10215000031A406800020D91031A52C000020D9349 +:10216000031A800003F90D95041A8FE4000000079C +:10217000031B3D900014118E021B800000000034F0 +:10218000021B804000000018021B80800000000C31 +:10219000021B80C000000020021B8BC00000000159 +:1021A0000A00000200000008021B8380000864701F +:1021B000021B83C0000002260A0000020000000982 +:1021C000021B830000086470021B8340000002268B +:1021D0000A0000020000000A021B83000000055FE5 +:1021E000021B8340000000010A0000020000000CF6 +:1021F000021B830000000157021B83400000000007 +:102200000A00000200001000021B8380000C96A848 +:10221000021B83C0000003390A0000020000100105 +:10222000021B8300000C96A8021B834000000339A8 +:102230000A00000200001002021B83000000080ECA +:10224000021B8340000000020A000002000010048C +:10225000021B830000000203021B834000000000F9 +:102260000A00000200002000021B8380000CF850CE +:10227000021B83C0000003520A000002000020017C +:10228000021B8300000CF850021B83400000035225 +:102290000A00000200002002021B83000000084D1B +:1022A000021B8340000000020A000002000020041C +:1022B000021B830000000213021B83400000000089 +:1022C000041B944800000002051C0000326C000052 +:1022D000051C800035380C9B051D0000361919E9D6 +:1022E000051D800035642770051E00001BDA34C907 +:1022F000061E426037B411A20A000001000000026D +:10230000021B1480000000000A000001000000040D +:10231000021B1480000000000A00000100000011F0 +:10232000021B1480000000000A00000200000008E8 +:10233000021800BC00000032021B945C0000003256 +:102340000A00000700000010021800BC0000000294 +:10235000021B945C00000002021B88400000000188 +:10236000021B942C0000000201180128000000004C +:10237000021B884000000000021B942C000000009B +:10238000021B9440000000010A000001000000113F +:10239000021B148000000001011800000000000072 +:1023A00001180004000000000118000800000000EF +:1023B0000118000C000000000118001000000000CF +:1023C000011800140000000003180020001A11A4D6 +:1023D000031800A4000211BE02180224000000002D +:1023E00002180234000000000218024C0000000035 +:1023F000021802E4000000FF0818100000000400AA +:102400000A0000010000001008182000000006006B +:10241000031A1A20000411C0041A30000000001230 +:10242000041A309000000012041AD4C80000000200 +:10243000041AD4D800000020041AD5D800000002E5 +:10244000041B440000000006031A1A30000411C4E3 +:10245000041A304800000012041A30D8000000129C +:10246000041AD4D000000002041AD558000000203D +:10247000041AD5E000000002041B44180000000606 +:10248000031A4000000211C8041A500000000002A4 +:10249000041A508000000012031A6140000211CAA1 +:1024A000041AA00000000002041B443000000002D7 +:1024B000031A4008000211CC041A50100000000258 +:1024C000041A50C800000012031A6148000211CE1D +:1024D000041AA00800000002041B44380000000297 +:1024E000031A4010000211D0041A5020000000020C +:1024F000041A511000000012031A6150000211D298 +:10250000041AA01000000002041B44400000000256 +:10251000031A4018000211D4041A503000000002BF +:10252000041A515800000012031A6158000211D613 +:10253000041AA01800000002041B44480000000216 +:10254000031A4020000211D8041A50400000000273 +:10255000041A51A000000012031A6160000211DA8F +:10256000041AA02000000002041B445000000002D6 +:10257000031A4028000211DC041A50500000000227 +:10258000041A51E800000012031A6168000211DE0B +:10259000041AA02800000002041B44580000000296 +:1025A000031A4030000211E0041A506000000002DB +:1025B000041A523000000012031A6170000211E286 +:1025C000041AA03000000002041B44600000000256 +:1025D000031A4038000211E4041A5070000000028F +:1025E000041A527800000012031A6178000211E602 +:1025F000041AA03800000002041B44680000000216 +:10260000020E004C00000032030E0054000811E8D6 +:10261000030E0094000711F0030E00B4000211F73E +:10262000020E00C400000000020E00CC00000006F4 +:10263000030E00D8000211F9020E0144000000014F +:10264000030E014C000211FB020E02040000000107 +:10265000030E020C000211FD030E021C000411FF08 +:10266000030E0280001B1203040E03000000001280 +:10267000040E2000000008000A000001000000080D +:10268000040E02EC00000005030E00040011121EEF +:10269000020E01100000000F020E01140000002FB6 +:1026A000020E01100000001F020E01140000003F86 +:1026B000020E01100000004F020E01140000006F16 +:1026C000020E01100000005F020E01140000007FE6 +:1026D000020C100000000028030C40080004122F18 +:1026E000030C401C00041233030C40380006123760 +:1026F000040C40500000001F020C40CC0000000100 +:10270000040C40D00000003A030C41B80006123D12 +:10271000040C41D00000001A030C4238000412439C +:10272000010C424800000000010C424C0000000077 +:10273000010C425000000000010C42540000000057 +:10274000010C425800000000010C425C0000000037 +:10275000010C426000000000010C42640000000017 +:10276000010C426800000000010C426C00000000F7 +:10277000010C427000000000010C427400000000D7 +:10278000010C427800000000010C427C00000000B7 +:10279000010C428000000000030C42D800041247E4 +:1027A0000A00000100000009020C4000000003E8DC +:1027B0000A0000010000000A020C400000000003B3 +:1027C0000A0000010000000C020C400000000001A3 +:1027D0000A00000100001001020C4000000005DCAE +:1027E0000A00000100001002020C4000000000047A +:1027F0000A00000100001004020C4000000000016B +:102800000A00000100002001020C4000000005DC6D +:102810000A00000100002002020C40000000000439 +:102820000A00000100002004020C4000000000012A +:102830000530040000C00000063007E80003124B1A +:1028400004320000000040000433240000001600A1 +:1028500003322C700090124D033234C0000812DD98 +:102860000432408000000010033240C0000212E534 +:1028700003337400000412E7023380000000001AE2 +:10288000023380400000004E0233808000000010C0 +:10289000023380C00000002002338BC00000000122 +:1028A0000A00000200000008023383800008647000 +:1028B000023383C0000002260A0000020000000963 +:1028C0000233830000086470023383400000022654 +:1028D0000A0000020000000A023383000000055FC6 +:1028E00002338340000000010A0000020000000CD7 +:1028F00002338300000001570233834000000000D0 +:102900000A0000020000100002338380000C96A829 +:10291000023383C0000003390A00000200001001E6 +:1029200002338300000C96A8023383400000033971 +:102930000A00000200001002023383000000080EAB +:1029400002338340000000020A000002000010046D +:1029500002338300000002030233834000000000C2 +:102960000A0000020000200002338380000CF850AF +:10297000023383C0000003520A000002000020015D +:1029800002338300000CF8500233834000000352EE +:102990000A00000200002002023383000000084DFC +:1029A00002338340000000020A00000200002004FD +:1029B0000233830000000213023383400000000052 +:1029C000053400003504000005348000355C0D41FD +:1029D0000535000038A21A9805358000378B28C1CC +:1029E0000536000034EA36A4053680001EDB43DFDE +:1029F0000636C7A0270C12EB0A00000100000002F7 +:102A000002331480000000000A00000100000004EE +:102A100002331480000000000A00000100000011D1 +:102A200002331480000000000A00000100000008CA +:102A3000023000BC000000320A0000040000001058 +:102A4000023000BC00000002023388400000000198 +:102A5000013001380000000002338840000000000F +:102A60000A00000100000011023314800000000180 +:102A700001300000000000000130000400000000F0 +:102A800001300008000000000130000C00000000D0 +:102A900001300010000000000130001400000000B0 +:102AA00003300020001A12ED033000A400021307C7 +:102AB0000230022400000000023002340000000056 +:102AC0000230024C00000000023002E40000FFFF70 +:102AD00008302000000008000A000001000000107B +:102AE000083040000000020004322C4000000002C8 +:102AF00003322C5000041309043293C0000000027A +:102B000004329400000000100432C00000000020D5 +:102B10000432C100000000200432C2000000002086 +:102B20000432C300000000200432C4000000002072 +:102B30000432C500000000200432C600000000205E +:102B40000432C700000000200432C800000000204A +:102B50000432C900000000200432CA000000002036 +:102B60000432CB00000000200432CC000000002022 +:102B70000432CD00000000200432CE00000000200E +:102B80000432CF00000000200432DB80000000028D +:102B900004322C480000000203322C600004130DA4 +:102BA000043293C800000002043294400000001078 +:102BB0000432C080000000200432C18000000020E8 +:102BC0000432C280000000200432C38000000020D4 +:102BD0000432C480000000200432C58000000020C0 +:102BE0000432C680000000200432C78000000020AC +:102BF0000432C880000000200432C9800000002098 +:102C00000432CA80000000200432CB800000002083 +:102C10000432CC80000000200432CD80000000206F +:102C20000432CE80000000200432CF80000000205B +:102C30000432DB88000000020432101000000002A1 +:102C400004322C00000000020432102000000002B8 +:102C500004322C0800000002043210300000000290 +:102C600004322C1000000002043210400000000268 +:102C700004322C1800000002043210500000000240 +:102C800004322C2000000002043210600000000218 +:102C900004322C28000000020432107000000002F0 +:102CA00004322C30000000020432108000000002C8 +:102CB00004322C38000000020202005800000032EA +:102CC0000302006000081311030200A0000B131997 +:102CD000020200D000000007030200DC00031324FE +:102CE000030200F000021327020200FC0000000CA7 +:102CF0000202012000000000020201340000000274 +:102D0000020201B0000000010202020C00000001FA +:102D1000030202140002132902020404000000014D +:102D20000302040C0002132B0302041C0004132DE5 +:102D30000302048000201331040205000000001289 +:102D4000040280000000200003020004001413515C +:102D500002020108000000C802020118000000027F +:102D6000020201C400000000020201CC00000000C9 +:102D7000020201D400000002020201DC0000000295 +:102D8000020201E4000000FF020201EC000000FF6B +:102D90000202010C000000C80202011C0000000237 +:102DA000020201C800000000020201D00000000081 +:102DB000020201D800000002020201E0000000024D +:102DC000020201E8000000FF020201F0000000FF23 +:102DD00002020108000000C80202011800000002FF +:102DE000020201C400000000020201CC0000000049 +:102DF000020201D400000002020201DC0000000215 +:102E0000020201E4000000FF020201EC000000FFEA +:102E10000202010C000000C80202011C00000002B6 +:102E2000020201C800000000020201D00000000000 +:102E3000020201D800000002020201E000000002CC +:102E4000020201E8000000FF020201F0000000FFA2 +:102E500002020108000000C802020118000000027E +:102E6000020201C400000000020201CC00000000C8 +:102E7000020201D400000002020201DC0000000294 +:102E8000020201E4000000FF020201EC000000FF6A +:102E90000202010C000000C80202011C0000000236 +:102EA000020201C800000000020201D00000000080 +:102EB000020201D800000002020201E0000000024C +:102EC000020201E8000000FF020201F0000000FF22 +:102ED00002020108000000C80202011800000002FE +:102EE000020201C400000000020201CC0000000048 +:102EF000020201D400000002020201DC0000000214 +:102F0000020201E4000000FF020201EC000000FFE9 +:102F10000202010C000000C80202011C00000002B5 +:102F2000020201C800000000020201D000000000FF +:102F3000020201D800000002020201E000000002CB +:102F4000020201E8000000FF020201F0000000FFA1 +:102F50000216100000000028031660080003136525 +:102F60000316601C00041368031660380012136C0B +:102F7000041660800000000E021660B80000000118 +:102F8000041660BC00000008021660DC00000001AE +:102F9000041660E000000004021660F0000000016A +:102FA000041660F400000031031661B80002137EBD +:102FB000041661C000000007031661DC00061380E0 +:102FC000041661F400000011031662380004138631 +:102FD00001166248000000000116624C000000006B +:102FE000011662500000000001166254000000004B +:102FF00001166258000000000116625C000000002B +:10300000011662600000000001166264000000000A +:1030100001166268000000000116626C00000000EA +:1030200001166270000000000116627400000000CA +:1030300001166278000000000116627C00000000AA +:10304000011662D400000000031662D80004138A3F +:103050000A0000010000000902166000000003E8F9 +:103060000A0000010000000A0216600000000003D0 +:103070000A0000010000000C0216600000000001C0 +:103080000A0000010000100102166000000005DCCB +:103090000A00000100001002021660000000000497 +:1030A0000A00000100001004021660000000000188 +:1030B0000A0000010000200102166000000005DC8B +:1030C0000A00000100002002021660000000000457 +:1030D0000A00000100002004021660000000000148 +:1030E0000528040000A90000062807C80007138E61 +:1030F000042A000000004000042B240000001600F9 +:10310000032A300000021390032A4000001013929B +:10311000032A8408000813A2032A9348000413AA70 +:10312000032A9668000813AE032A98B8000213B663 +:10313000032A9950009013B8032B4D9000141448A3 +:10314000022B800000000000022B804000000018CD +:10315000022B80800000000C022B80C00000006663 +:10316000022B8BC0000000010A00000300000008D1 +:10317000022A9CA800000002022B838000086470D1 +:10318000022B83C0000002260A0000020000000992 +:10319000022B830000086470022B8340000002268B +:1031A0000A0000020000000A022B83000000055FF5 +:1031B000022B8340000000010A0000020000000C06 +:1031C000022B830000000157022B83400000000007 +:1031D0000A00000300000020022A9CAC000000004E +:1031E000032AC4E00004145C032AC5000002146032 +:1031F0000A00000200000040022A9CAC000000010E +:10320000032AC4E0000A14620A0000030000100050 +:10321000022A9CA800000003022B8380000C96A8C1 +:10322000022B83C0000003390A00000200001001D5 +:10323000022B8300000C96A8022B83400000033968 +:103240000A00000200001002022B83000000080E9A +:10325000022B8340000000020A000002000010045C +:10326000022B830000000203022B834000000000B9 +:103270000A00000300002000022A9CA800000004AD +:10328000022B8380000CF850022B83C000000352F5 +:103290000A00000200002001022B8300000CF850FD +:1032A000022B8340000003520A00000200002002AB +:1032B000022B83000000084D022B83400000000217 +:1032C0000A00000200002004022B83000000021309 +:1032D000022B8340000000000A00000100004000B3 +:1032E000022A9CB0000000000A00000100008000DB +:1032F000022A9CB000000001042B94480000000248 +:10330000052C000034970000052C80003A730D2630 +:10331000052D000035661BC3052D80003B8E291D41 +:10332000052E00003B753801052E8000393A46DF36 +:10333000052F0000321F552E062F787010F2146CE6 +:103340000A00000100000002022B148000000000AF +:103350000A00000100000004022B1480000000009D +:103360000A00000100000011022B14800000000080 +:103370000A00000200000008022800BC0000003221 +:10338000022B945C000000320A00000700000010CD +:10339000022800BC00000002022B945C0000000226 +:1033A000022B884000000001022B942C0000000238 +:1033B0000128013800000000022B884000000000B6 +:1033C000022B942C00000000022B9440000000010E +:1033D0000A00000100000011022B1480000000010F +:1033E0000128000000000000012800040000000087 +:1033F00001280008000000000128000C0000000067 +:103400000128001000000000012800140000000046 +:1034100003280020001A146E032800A40002148858 +:1034200002280224000000000228023400000000EC +:103430000228024C00000000022802E40000FFFF06 +:1034400008282000000008000A0000010000001009 +:103450000828400000000200042A5000000000027A +:10346000042A501000000002042A5020000000022C +:10347000042A503000000002042A93580000002063 +:10348000042A94580000000E032A94900002148A23 +:10349000042A94D80000000E032A95100002148C10 +:1034A000042A95580000000E032A95900002148EFD +:1034B000042A95D80000000E032A961000021490EA +:1034C000032A968800021492042ABC980000000285 +:1034D000042A500800000002042A501800000002CC +:1034E000042A502800000002042A5038000000027C +:1034F000042A93D800000020042A94980000000EAB +:10350000032A94D000021494042A95180000000E97 +:10351000032A955000021496042A95980000000E84 +:10352000032A95D000021498042A96180000000E71 +:10353000032A96500002149A032A96900002149CC3 +:10354000042ABCA000000002042A50480000000E1B +:10355000032A96980010149E042A98D000000002B6 +:10356000042A991000000002042AC480000000020E +:10357000042A50800000000E032A96D8001014AED2 +:10358000042A98D800000002042A991800000002BA +:10359000042AC48800000002042A50B80000000E6B +:1035A000032A9718001014BE042A98E000000002B5 +:1035B000042A992000000002042AC490000000029E +:1035C000042A50F00000000E032A9758001014CE71 +:1035D000042A98E800000002042A9928000000024A +:1035E000042AC49800000002042A51280000000E9A +:1035F000032A9798001014DE042A98F000000002B5 +:10360000042A993000000002042AC4A0000000022D +:10361000042A51600000000E032A97D8001014EE0F +:10362000042A98F800000002042A993800000002D9 +:10363000042AC4A800000002042A51980000000EC9 +:10364000032A9818001014FE042A990000000002B2 +:10365000042A994000000002042AC4B000000002BD +:10366000042A51D00000000E032A98580010150EAD +:10367000042A990800000002042A99480000000268 +:10368000042AC4B8000000020400A0000000000CDE +:103690000400A050000000020300A0EC0008151E6A +:1036A0000300A19C000415260200A45C00000C008D +:1036B0000400A6A8000000020200A6D0000000003E +:1036C0000200A61C000000030300A0700005152ADC +:1036D0000400A084000000050200A0980FE0000094 +:1036E0000400A09C000000070300A0B8000D152FE7 +:1036F0000400A22C000000040200A688000000FCC8 +:103700000400A68C000000070200A6F400000000E0 +:103710000300A10C0006153C0400A12400000005D4 +:103720000200A1380FE000000400A13C00000007E7 +:103730000300A158000D15420400A23C0000000443 +:103740000200A6B0000000FC0400A6B400000007C0 +:103750000200A6F8000000000200A03000000000F7 +:103760000200A034000000000200A03800000000A9 +:103770000200A03C000000000200A0400000000089 +:103780000200A044000000000200A0480000000069 +:103790000200A04C0000000000000000000000003B +:1037A0000000000100000000000000000000000018 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000010017E1 +:1037D0000017001F001F0022000000000000000072 +:1037E00000000000000000000000000000000000D9 +:1037F0000000000000000000002200340000000073 +:103800000000000000340035003500360036003777 +:1038100000370038003800390039003A003A003BE0 +:10382000003B003C003C00430000000000000000A2 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000043004C0000000000000000004C004D40 +:10386000004D004E004E004F004F005000500051E0 +:103870000051005200520053005300540054007E87 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000007E01E000000000B9 +:1038B0000000000001E001E501E501EA01EA01EF95 +:1038C00001EF01F401F401F901F901FE01FE020327 +:1038D00002030208000000000000000000000000D9 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:103900000208020C0000000000000000000000009F +:1039100000000000000000000000000000000000A7 +:10392000000000000000000000000000020C021C6B +:103930000000000000000000021C021E021E022007 +:103940000220022202220224022402260226022847 +:103950000228022A022A022C0000000000000000B7 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:1039800000000000022C022F0000000000000000D8 +:10399000022F023202320235023502380238023B6F +:1039A000023B023E023E02410241024402440247FF +:1039B0000247024B024B024F024F02530253025482 +:1039C0000254025502550256025602570257025837 +:1039D000025802590259025A025A025B025B026003 +:1039E00002600286028602AB02AB02AC02AC02AD00 +:1039F00002AD02AE02AE02AF02AF02B002B002B13F +:103A000002B102B202B202B302B302CA0000000065 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000002CA02D70000000000000000E1 +:103A400002D702D802D802D902D902DA02DA02DB9E +:103A500002DB02DC02DC02DD02DD02DE02DE02DF6E +:103A600002DF02F000000000000000000000000083 +:103A70000000000000000000000000000000000046 +:103A800000000000000000000000000002F002FE44 +:103A9000000000000000000002FE02FF02FF030021 +:103AA00003000301030103020302030303030304EE +:103AB00003040305030503060306030B00000000CF +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000030B03A900000000000000001C +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100003A903AB0000000000000000000000004B +:103B20000000000000000000000000000000000095 +:103B300000000000000000000000000003AB03BF15 +:103B4000000000000000000003BF03C003C003C169 +:103B500003C103C203C203C303C303C403C403C535 +:103B600003C503C603C603C703C703E703E703EAA6 +:103B700003EA03ED00000000000000000000000068 +:103B80000000000000000000000000000000000035 +:103B90000000000003ED041500000000000000001C +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC000041504750475047C047C0483048304894F +:103BD0000489048F048F04950495049B049B04A11D +:103BE00004A104A704A704AD04AD04B304B304C541 +:103BF000000000000000000004C504C604C604C79D +:103C000004C704C804C804C904C904CA04CA04CB4C +:103C100004CB04CC04CC04CD04CD04CE00000000C1 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000004CE04F90000000000000000A5 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C700004F90550055005650565057A057A057C4A +:103C8000057C057E057E058005800582058205840C +:103C900005840586058605880588058A058A059DAB +:103CA0000000000000000000059D05A505A505AD6C +:103CB00005AD05B505B505BD05BD05C505C505CDF4 +:103CC00005CD05D505D505DD05DD05DE00000000C7 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF0000000000005DE060F0000000000000000CC +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D2000060F067E067E068D068D069C069C06A165 +:103D300006A106A606A606AB06AB06B006B006B5FB +:103D400006B506BA06BA06BF06BF06C406C406CC48 +:103D500006CC06D506D506DE06DE06DF06DF06E063 +:103D600006E006E106E106E206E206E306E306E413 +:103D700006E406E506E506E6000000000000000097 +:103D800000002000000040000000600000008000F3 +:103D90000000A0000000C0000000E00000010000E2 +:103DA00000012000000140000001600000018000CF +:103DB0000001A0000001C0000001E00000020000BE +:103DC00000022000000240000002600000028000AB +:103DD0000002A0000002C0000002E000000300009A +:103DE0000003200000034000000360000003800087 +:103DF0000003A0000003C0000003E0000004000076 +:103E00000004200000044000000460000004800062 +:103E10000004A0000004C0000004E0000005000051 +:103E2000000520000005400000056000000580003E +:103E30000005A0000005C0000005E000000600002D +:103E4000000620000006400000066000000680001A +:103E50000006A0000006C0000006E0000007000009 +:103E600000072000000740000007600000078000F6 +:103E70000007A0000007C0000007E00000080000E5 +:103E800000082000000840000008600000088000D2 +:103E90000008A0000008C0000008E00000090000C1 +:103EA00000092000000940000009600000098000AE +:103EB0000009A0000009C0000009E000000A00009D +:103EC000000A2000000A4000000A6000000A80008A +:103ED000000AA000000AC000000AE000000B000079 +:103EE000000B2000000B4000000B6000000B800066 +:103EF000000BA000000BC000000BE000000C000055 +:103F0000000C2000000C4000000C6000000C800041 +:103F1000000CA000000CC000000CE000000D000030 +:103F2000000D2000000D4000000D6000000D80001D +:103F3000000DA000000DC000000DE000000E00000C +:103F4000000E2000000E4000000E6000000E8000F9 +:103F5000000EA000000EC000000EE000000F0000E8 +:103F6000000F2000000F4000000F6000000F8000D5 +:103F7000000FA000000FC000000FE00000100000C4 +:103F800000102000001040000010600000108000B1 +:103F90000010A0000010C0000010E00000110000A0 +:103FA000001120000011400000116000001180008D +:103FB0000011A0000011C0000011E000001200007C +:103FC0000012200000124000001260000012800069 +:103FD0000012A0000012C0000012E0000013000058 +:103FE0000013200000134000001360000013800045 +:103FF0000013A0000013C0000013E0000014000034 +:104000000014200000144000001460000014800020 +:104010000014A0000014C0000014E000001500000F +:1040200000152000001540000015600000158000FC +:104030000015A0000015C0000015E00000160000EB +:1040400000162000001640000016600000168000D8 +:104050000016A0000016C0000016E00000170000C7 +:1040600000172000001740000017600000178000B4 +:104070000017A0000017C0000017E00000180000A3 +:104080000018200000184000001860000018800090 +:104090000018A0000018C0000018E000001900007F +:1040A000001920000019400000196000001980006C +:1040B0000019A0000019C0000019E000001A00005B +:1040C000001A2000001A4000001A6000001A800048 +:1040D000001AA000001AC000001AE000001B000037 +:1040E000001B2000001B4000001B6000001B800024 +:1040F000001BA000001BC000001BE000001C000013 +:10410000001C2000001C4000001C6000001C8000FF +:10411000001CA000001CC000001CE000001D0000EE +:10412000001D2000001D4000001D6000001D8000DB +:10413000001DA000001DC000001DE000001E0000CA +:10414000001E2000001E4000001E6000001E8000B7 +:10415000001EA000001EC000001EE000001F0000A6 +:10416000001F2000001F4000001F6000001F800093 +:10417000001FA000001FC000001FE0000020000082 +:10418000002020000020400000206000002080006F +:104190000020A0000020C0000020E000002100005E +:1041A000002120000021400000216000002180004B +:1041B0000021A0000021C0000021E000002200003A +:1041C0000022200000224000002260000022800027 +:1041D0000022A0000022C0000022E0000023000016 +:1041E0000023200000234000002360000023800003 +:1041F0000023A0000023C0000023E00000240000F2 +:1042000000242000002440000024600000248000DE +:104210000024A0000024C0000024E00000250000CD +:1042200000252000002540000025600000258000BA +:104230000025A0000025C0000025E00000260000A9 +:104240000026200000264000002660000026800096 +:104250000026A0000026C0000026E0000027000085 +:104260000027200000274000002760000027800072 +:104270000027A0000027C0000027E0000028000061 +:10428000002820000028400000286000002880004E +:104290000028A0000028C0000028E000002900003D +:1042A000002920000029400000296000002980002A +:1042B0000029A0000029C0000029E000002A000019 +:1042C000002A2000002A4000002A6000002A800006 +:1042D000002AA000002AC000002AE000002B0000F5 +:1042E000002B2000002B4000002B6000002B8000E2 +:1042F000002BA000002BC000002BE000002C0000D1 +:10430000002C2000002C4000002C6000002C8000BD +:10431000002CA000002CC000002CE000002D0000AC +:10432000002D2000002D4000002D6000002D800099 +:10433000002DA000002DC000002DE000002E000088 +:10434000002E2000002E4000002E6000002E800075 +:10435000002EA000002EC000002EE000002F000064 +:10436000002F2000002F4000002F6000002F800051 +:10437000002FA000002FC000002FE0000030000040 +:10438000003020000030400000306000003080002D +:104390000030A0000030C0000030E000003100001C +:1043A0000031200000314000003160000031800009 +:1043B0000031A0000031C0000031E00000320000F8 +:1043C00000322000003240000032600000328000E5 +:1043D0000032A0000032C0000032E00000330000D4 +:1043E00000332000003340000033600000338000C1 +:1043F0000033A0000033C0000033E00000340000B0 +:10440000003420000034400000346000003480009C +:104410000034A0000034C0000034E000003500008B +:104420000035200000354000003560000035800078 +:104430000035A0000035C0000035E0000036000067 +:104440000036200000364000003660000036800054 +:104450000036A0000036C0000036E0000037000043 +:104460000037200000374000003760000037800030 +:104470000037A0000037C0000037E000003800001F +:10448000003820000038400000386000003880000C +:104490000038A0000038C0000038E00000390000FB +:1044A00000392000003940000039600000398000E8 +:1044B0000039A0000039C0000039E000003A0000D7 +:1044C000003A2000003A4000003A6000003A8000C4 +:1044D000003AA000003AC000003AE000003B0000B3 +:1044E000003B2000003B4000003B6000003B8000A0 +:1044F000003BA000003BC000003BE000003C00008F +:10450000003C2000003C4000003C6000003C80007B +:10451000003CA000003CC000003CE000003D00006A +:10452000003D2000003D4000003D6000003D800057 +:10453000003DA000003DC000003DE000003E000046 +:10454000003E2000003E4000003E6000003E800033 +:10455000003EA000003EC000003EE000003F000022 +:10456000003F2000003F4000003F6000003F80000F +:10457000003FA000003FC000003FE00000400000FE +:1045800000402000004040000040600000408000EB +:104590000040A0000040C0000040E00000410000DA +:1045A00000412000004140000041600000418000C7 +:1045B0000041A0000041C0000041E00000420000B6 +:1045C00000422000004240000042600000428000A3 +:1045D0000042A0000042C0000042E0000043000092 +:1045E000004320000043400000436000004380007F +:1045F0000043A0000043C0000043E000004400006E +:10460000004420000044400000446000004480005A +:104610000044A0000044C0000044E0000045000049 +:104620000045200000454000004560000045800036 +:104630000045A0000045C0000045E0000046000025 +:104640000046200000464000004660000046800012 +:104650000046A0000046C0000046E0000047000001 +:1046600000472000004740000047600000478000EE +:104670000047A0000047C0000047E00000480000DD +:1046800000482000004840000048600000488000CA +:104690000048A0000048C0000048E00000490000B9 +:1046A00000492000004940000049600000498000A6 +:1046B0000049A0000049C0000049E000004A000095 +:1046C000004A2000004A4000004A6000004A800082 +:1046D000004AA000004AC000004AE000004B000071 +:1046E000004B2000004B4000004B6000004B80005E +:1046F000004BA000004BC000004BE000004C00004D +:10470000004C2000004C4000004C6000004C800039 +:10471000004CA000004CC000004CE000004D000028 +:10472000004D2000004D4000004D6000004D800015 +:10473000004DA000004DC000004DE000004E000004 +:10474000004E2000004E4000004E6000004E8000F1 +:10475000004EA000004EC000004EE000004F0000E0 +:10476000004F2000004F4000004F6000004F8000CD +:10477000004FA000004FC000004FE00000500000BC +:1047800000502000005040000050600000508000A9 +:104790000050A0000050C0000050E0000051000098 +:1047A0000051200000514000005160000051800085 +:1047B0000051A0000051C0000051E0000052000074 +:1047C0000052200000524000005260000052800061 +:1047D0000052A0000052C0000052E0000053000050 +:1047E000005320000053400000536000005380003D +:1047F0000053A0000053C0000053E000005400002C +:104800000054200000544000005460000054800018 +:104810000054A0000054C0000054E0000055000007 +:1048200000552000005540000055600000558000F4 +:104830000055A0000055C0000055E00000560000E3 +:1048400000562000005640000056600000568000D0 +:104850000056A0000056C0000056E00000570000BF +:1048600000572000005740000057600000578000AC +:104870000057A0000057C0000057E000005800009B +:104880000058200000584000005860000058800088 +:104890000058A0000058C0000058E0000059000077 +:1048A0000059200000594000005960000059800064 +:1048B0000059A0000059C0000059E000005A000053 +:1048C000005A2000005A4000005A6000005A800040 +:1048D000005AA000005AC000005AE000005B00002F +:1048E000005B2000005B4000005B6000005B80001C +:1048F000005BA000005BC000005BE000005C00000B +:10490000005C2000005C4000005C6000005C8000F7 +:10491000005CA000005CC000005CE000005D0000E6 +:10492000005D2000005D4000005D6000005D8000D3 +:10493000005DA000005DC000005DE000005E0000C2 +:10494000005E2000005E4000005E6000005E8000AF +:10495000005EA000005EC000005EE000005F00009E +:10496000005F2000005F4000005F6000005F80008B +:10497000005FA000005FC000005FE000006000007A +:104980000060200000604000006060000060800067 +:104990000060A0000060C0000060E0000061000056 +:1049A0000061200000614000006160000061800043 +:1049B0000061A0000061C0000061E0000062000032 +:1049C000006220000062400000626000006280001F +:1049D0000062A0000062C0000062E000006300000E +:1049E00000632000006340000063600000638000FB +:1049F0000063A0000063C0000063E00000640000EA +:104A000000642000006440000064600000648000D6 +:104A10000064A0000064C0000064E00000650000C5 +:104A200000652000006540000065600000658000B2 +:104A30000065A0000065C0000065E00000660000A1 +:104A4000006620000066400000666000006680008E +:104A50000066A0000066C0000066E000006700007D +:104A6000006720000067400000676000006780006A +:104A70000067A0000067C0000067E0000068000059 +:104A80000068200000684000006860000068800046 +:104A90000068A0000068C0000068E0000069000035 +:104AA0000069200000694000006960000069800022 +:104AB0000069A0000069C0000069E000006A000011 +:104AC000006A2000006A4000006A6000006A8000FE +:104AD000006AA000006AC000006AE000006B0000ED +:104AE000006B2000006B4000006B6000006B8000DA +:104AF000006BA000006BC000006BE000006C0000C9 +:104B0000006C2000006C4000006C6000006C8000B5 +:104B1000006CA000006CC000006CE000006D0000A4 +:104B2000006D2000006D4000006D6000006D800091 +:104B3000006DA000006DC000006DE000006E000080 +:104B4000006E2000006E4000006E6000006E80006D +:104B5000006EA000006EC000006EE000006F00005C +:104B6000006F2000006F4000006F6000006F800049 +:104B7000006FA000006FC000006FE0000070000038 +:104B80000070200000704000007060000070800025 +:104B90000070A0000070C0000070E0000071000014 +:104BA0000071200000714000007160000071800001 +:104BB0000071A0000071C0000071E00000720000F0 +:104BC00000722000007240000072600000728000DD +:104BD0000072A0000072C0000072E00000730000CC +:104BE00000732000007340000073600000738000B9 +:104BF0000073A0000073C0000073E00000740000A8 +:104C00000074200000744000007460000074800094 +:104C10000074A0000074C0000074E0000075000083 +:104C20000075200000754000007560000075800070 +:104C30000075A0000075C0000075E000007600005F +:104C4000007620000076400000766000007680004C +:104C50000076A0000076C0000076E000007700003B +:104C60000077200000774000007760000077800028 +:104C70000077A0000077C0000077E0000078000017 +:104C80000078200000784000007860000078800004 +:104C90000078A0000078C0000078E00000790000F3 +:104CA00000792000007940000079600000798000E0 +:104CB0000079A0000079C0000079E000007A0000CF +:104CC000007A2000007A4000007A6000007A8000BC +:104CD000007AA000007AC000007AE000007B0000AB +:104CE000007B2000007B4000007B6000007B800098 +:104CF000007BA000007BC000007BE000007C000087 +:104D0000007C2000007C4000007C6000007C800073 +:104D1000007CA000007CC000007CE000007D000062 +:104D2000007D2000007D4000007D6000007D80004F +:104D3000007DA000007DC000007DE000007E00003E +:104D4000007E2000007E4000007E6000007E80002B +:104D5000007EA000007EC000007EE000007F00001A +:104D6000007F2000007F4000007F6000007F800007 +:104D7000007FA000007FC000007FE000007FE00116 +:104D800000000000000001FF000002000000000021 +:104D9000000003FF00000400000004010000040103 +:104DA000000002380000011C0000011C0000011C72 +:104DB0000000005000000050000000500000000102 +:104DC00000000158000001A8000000C8000000A079 +:104DD000000000C800000000000000000000005AB1 +:104DE000000000FA00000401000004010000000AB5 +:104DF000000000320000040100000401000001581E +:104E0000000001A800000018000000680000015820 +:104E1000000001A800000158000001A800000018CF +:104E20000000006800000158000001A80000000117 +:104E30000000000200000000000000080215002031 +:104E400002150020081000000000003600000000DD +:104E5000000000040000000400000000000000004A +:104E60000000000100000004000000020000000239 +:104E700000000001000000020000002000000040CF +:104E800000000040000000030000001800002000A7 +:104E9000000040C000006180000082400000A300CC +:104EA0000000C3C00000E4800001054000012600AE +:104EB000000146C000016780000188400001A90090 +:104EC0000001C9C00001EA8000020B4000022C0072 +:104ED00000024CC000026D8000028E400002AF0054 +:104EE0000002CFC00002F08000001140000000016D +:104EF00000000001000000010000000100000001AE +:104F0000000000010000000100000001000000019D +:104F1000000000010000000100000001000000018D +:104F200000000001000000010003D0000000003D6F +:104F300000000001000D0000000700D000028140C9 +:104F4000000B81680002022000010240000F0250A5 +:104F500000010340000C0000000800C00002814076 +:104F6000000B81680002022000010240000702508D +:104F7000000202C000100000000801000002818051 +:104F8000000B81A80002026000018280000E82985E +:104F900000080380000F0000000100F00002810003 +:104FA00000090128000201B8000101D8000E01E843 +:104FB000000002C8FFFFFFF301AFFFFF0000000089 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000FFFFFFF100EFFFFF00000000F6 +:104FE00000000000000000000000000000010000C0 +:104FF00000000000FFFFFFF6005FFFFF0000000061 +:10500000000000000000000000000000000200009E +:1050100000000000FFFFF4061CBFFFFF00000005BA +:105020000000000000000014000000000004000068 +:1050300000000000FFFFFFF2004FFFFF0000000034 +:105040000000000000000000000000000008000058 +:1050500000000000FFFFFFFA002FFFFF000000002C +:105060000000000000000000000000000010000030 +:1050700000000000FFFFFFF701EFFFFF000000004E +:105080000000000000000000000000000020000000 +:1050900000000000FFFFFFF5002FFFFF00000000F1 +:1050A00000000000000000000000000000400000C0 +:1050B00000000000FFFFFFF3018FFFFF0000000072 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000FFFFFFF1010FFFFF00000000D4 +:1050E00000000000000000000000000000010000BF +:1050F00000000000FFFFFFF6005FFFFF0000000060 +:10510000000000000000000000000000000200009D +:1051100000000000FFFFF4061CBFFFFF00000005B9 +:105120000000000000000014000000000004000067 +:1051300000000000FFFFFFF2004FFFFF0000000033 +:105140000000000000000000000000000008000057 +:1051500000000000FFFFFFFA002FFFFF000000002B +:10516000000000000000000000000000001000002F +:1051700000000000FFFFFFF700EFFFFF000000004E +:1051800000000000000000000000000000200000FF +:1051900000000000FFFFFFF5004FFFFF00000000D0 +:1051A00000000000000000000000000000400000BF +:1051B00000000000FFFFFFFF00CFFFFF0000000026 +:1051C00000000000000000CC000000000000000013 +:1051D00000000000FFFFFFFF00CFFFFF0000000006 +:1051E00000000000000000CC0000000000010000F2 +:1051F00000000000FFFFFFFF00CFFFFF00000000E6 +:1052000000000000000000CC0000000000020000D0 +:1052100000000000FFFFFFFF00CFFFFF00000000C5 +:1052200000000000000000CC0000000000040000AE +:1052300000000000FFFFFFFF00CFFFFF00000000A5 +:1052400000000000000000CC00000000000800008A +:1052500000000000FFFFFFFF00CFFFFF0000000085 +:1052600000000000000000CC000000000010000062 +:1052700000000000FFFFFFFF00CFFFFF0000000065 +:1052800000000000000000CC000000000020000032 +:1052900000000000FFFFFFFF00CFFFFF0000000045 +:1052A00000000000000000CC0000000000400000F2 +:1052B00000000000FFFFFFF3020FFFFF00000000EF +:1052C00000000000000000000000000000000000DE +:1052D00000000000FFFFFFF1010FFFFF00000000D2 +:1052E00000000000000000000000000000010000BD +:1052F00000000000FFFFFFF6005FFFFF000000005E +:10530000000000000000000000000000000200009B +:1053100000000000FFFFF4061CBFFFFF00000005B7 +:105320000000000000000014000000000004000065 +:1053300000000000FFFFFFF2004FFFFF0000000031 +:105340000000000000000000000000000008000055 +:1053500000000000FFFFFF8A042FFFFF0000000095 +:10536000000000000000000000000000001000002D +:1053700000000000FFFFFF9705CFFFFF00000000C7 +:1053800000000000000000000000000000200000FD +:1053900000000000FFFFFFF5010FFFFF000000000D +:1053A00000000000000000000000000000400000BD +:1053B00000000000FFFFFFF301EFFFFF000000000F +:1053C00000000000000000000000000000000000DD +:1053D00000000000FFFFFFF1002FFFFF00000000B2 +:1053E00000000000000000000000000000010000BC +:1053F00000000000FFFFFFF6005FFFFF000000005D +:10540000000000000000000000000000000200009A +:1054100000000000FFFFFF061CBFFFFF00000000B0 +:105420000000000000000014000000000004000064 +:1054300000000000FFFFFFF2004FFFFF0000000030 +:105440000000000000000000000000000008000054 +:1054500000000000FFFFFFFA002FFFFF0000000028 +:10546000000000000000000000000000001000002C +:1054700000000000FFFFFFF701CFFFFF000000006A +:1054800000000000000000000000000000200000FC +:1054900000000000FFFFFFFF00CFFFFF0000000043 +:1054A00000000000000000CC0000000000400000F0 +:1054B00000000000FFFFFFFF00CFFFFF0000000023 +:1054C00000000000000000CC000000000000000010 +:1054D00000000000FFFFFFFF00CFFFFF0000000003 +:1054E00000000000000000CC0000000000010000EF +:1054F00000000000FFFFFFFF00CFFFFF00000000E3 +:1055000000000000000000CC0000000000020000CD +:1055100000000000FFFFFFFF00CFFFFF00000000C2 +:1055200000000000000000CC0000000000040000AB +:1055300000000000FFFFFFFF00CFFFFF00000000A2 +:1055400000000000000000CC000000000008000087 +:1055500000000000FFFFFFFF00CFFFFF0000000082 +:1055600000000000000000CC00000000001000005F +:1055700000000000FFFFFFFF00CFFFFF0000000062 +:1055800000000000000000CC00000000002000002F +:1055900000000000FFFFFFFF00CFFFFF0000000042 +:1055A00000000000000000CC0000000000400000EF +:1055B00000000000FFFFFFFF00CFFFFF0000000022 +:1055C00000000000000000CC00000000000000000F +:1055D00000000000FFFFFFFF00CFFFFF0000000002 +:1055E00000000000000000CC0000000000010000EE +:1055F00000000000FFFFFFFF00CFFFFF00000000E2 +:1056000000000000000000CC0000000000020000CC +:1056100000000000FFFFFFFF00CFFFFF00000000C1 +:1056200000000000000000CC0000000000040000AA +:1056300000000000FFFFFFFF00CFFFFF00000000A1 +:1056400000000000000000CC000000000008000086 +:1056500000000000FFFFFFFF00CFFFFF0000000081 +:1056600000000000000000CC00000000001000005E +:1056700000000000FFFFFFFF00CFFFFF0000000061 +:1056800000000000000000CC00000000002000002E +:1056900000000000FFFFFFFF00CFFFFF0000000041 +:1056A00000000000000000CC0000000000400000EE +:1056B00000000000FFFFFFFF00CFFFFF0000000021 +:1056C00000000000000000CC00000000000000000E +:1056D00000000000FFFFFFFF00CFFFFF0000000001 +:1056E00000000000000000CC0000000000010000ED +:1056F00000000000FFFFFFFF00CFFFFF00000000E1 +:1057000000000000000000CC0000000000020000CB +:1057100000000000FFFFFFFF00CFFFFF00000000C0 +:1057200000000000000000CC0000000000040000A9 +:1057300000000000FFFFFFFF00CFFFFF00000000A0 +:1057400000000000000000CC000000000008000085 +:1057500000000000FFFFFFFF00CFFFFF0000000080 +:1057600000000000000000CC00000000001000005D +:1057700000000000FFFFFFFF00CFFFFF0000000060 +:1057800000000000000000CC00000000002000002D +:1057900000000000FFFFFFFF00CFFFFF0000000040 +:1057A00000000000000000CC0000000000400000ED +:1057B0000000000000000032000000320000021172 +:1057C00000000200000002040000FFFF0000FFFFD5 +:1057D0000000FFFF0000FFFF000000000000003796 +:1057E0000000002100000020000000010000000176 +:1057F0000000000107FFFFFF0000007F07FFFFFF21 +:105800000000003F0000FFFF0000FFFF0000FFFF5F +:105810000000FFFF00007FF800007FF8000000009C +:10582000000028AD0000291800002919000000051B +:105830000000000700000000000000000000FF0062 +:10584000000000000000FF00000000000000FF005A +:10585000000000000000FF00000000000000FF004A +:10586000000000000000FF00000000000000FF003A +:10587000000000000000FF00000000000000FF002A +:10588000000000000000FF00000000000000FF001A +:10589000000000000000FF00000000000000FF000A +:1058A000000000000000FF00000000000000FF00FA +:1058B000000000000000FF00000000000000FF00EA +:1058C000000000000000FF00000000000000FF00DA +:1058D000000000000000FF00000000000000FF00CA +:1058E000000000000000FF00000000000000FF00BA +:1058F000000000000000FF00000000000000FF00AA +:10590000000000000000FF00000000000000FF0099 +:10591000000000000000FF00000000000000FF0089 +:10592000000000000000FF00000000000000FF0079 +:10593000000000000000FF00000000000000FF0069 +:10594000000000000000FF00000000000000FF0059 +:10595000000000000000FF00000000000000FF0049 +:10596000000000000000FF00000000000000FF0039 +:10597000000000000000FF00000000000000FF0029 +:10598000000000000000FF00000000000000FF0019 +:10599000000000000000FF00000000000000FF0009 +:1059A000000000000000FF00000000000000FF00F9 +:1059B000000000000000FF00000000000000FF00E9 +:1059C000000000000000FF00000000000000FF00D9 +:1059D000000000000000FF00000000000000FF00C9 +:1059E000000000000000FF00000000000000FF00B9 +:1059F000000000000000FF00000000000000FF00A9 +:105A0000000000000000FF00000000000000FF0098 +:105A1000000000000000FF00000000000000FF0088 +:105A2000000000000000FF00000000000000FF0078 +:105A3000000000000000FF00000000000000FF0068 +:105A4000000000000000FF00000000000000FF0058 +:105A5000000000000000FF00000000000000FF0048 +:105A6000000000000000FF00000000000000FF0038 +:105A7000000000000000FF00000000000000FF1C0C +:105A80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC8 +:105A90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB8 +:105AA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA8 +:105AB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C98 +:105AC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C88 +:105AD0000FFFFFFF0000FF1C0FFFFFFF0000FF1C78 +:105AE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C68 +:105AF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C58 +:105B00000FFFFFFF0000FF1C0FFFFFFF0000FF1C47 +:105B10000FFFFFFF0000FF1C0FFFFFFF0000FF1C37 +:105B20000FFFFFFF0000FF1C0FFFFFFF0000FF1C27 +:105B30000FFFFFFF0000FF1C0FFFFFFF0000FF1C17 +:105B40000FFFFFFF0000FF1C0FFFFFFF0000FF1C07 +:105B50000FFFFFFF0000FF1C0FFFFFFF0000FF1CF7 +:105B60000FFFFFFF0000FF1C0FFFFFFF0000FF1CE7 +:105B70000FFFFFFF0000FF1C0FFFFFFF0000FF1CD7 +:105B80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC7 +:105B90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB7 +:105BA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA7 +:105BB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C97 +:105BC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C87 +:105BD0000FFFFFFF0000FF1C0FFFFFFF0000FF1C77 +:105BE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C67 +:105BF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C57 +:105C00000FFFFFFF0000FF1C0FFFFFFF0000FF1C46 +:105C10000FFFFFFF0000FF1C0FFFFFFF0000FF1C36 +:105C20000FFFFFFF0000FF1C0FFFFFFF0000FF1C26 +:105C30000FFFFFFF0000FF1C0FFFFFFF0000FF1C16 +:105C40000FFFFFFF0000FF1C0FFFFFFF0000FF1C06 +:105C50000FFFFFFF0000FF1C0FFFFFFF0000FF1CF6 +:105C60000FFFFFFF0000FF1C0FFFFFFF0000FF1CE6 +:105C70000FFFFFFF0000FF1C0FFFFFFF0000FF1CD6 +:105C80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC6 +:105C90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB6 +:105CA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA6 +:105CB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C96 +:105CC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C86 +:105CD0000FFFFFFF0000FF1C0FFFFFFF0000FF1C76 +:105CE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C66 +:105CF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C56 +:105D00000FFFFFFF0000FF1C0FFFFFFF0000FF1C45 +:105D10000FFFFFFF0000FF1C0FFFFFFF0000FF1C35 +:105D20000FFFFFFF0000FF1C0FFFFFFF0000FF1C25 +:105D30000FFFFFFF0000FF1C0FFFFFFF0000FF1C15 +:105D40000FFFFFFF0000FF1C0FFFFFFF0000FF1C05 +:105D50000FFFFFFF0000FF1C0FFFFFFF0000FF1CF5 +:105D60000FFFFFFF0000FF1C0FFFFFFF0000FF1CE5 +:105D70000FFFFFFF0000FF1C0FFFFFFF0000FF1CD5 +:105D80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC5 +:105D90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB5 +:105DA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA5 +:105DB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C95 +:105DC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C85 +:105DD0000FFFFFFF0000FF1C0FFFFFFF0000FF1C75 +:105DE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C65 +:105DF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C55 +:105E00000FFFFFFF0000FF1C0FFFFFFF0000FF1C44 +:105E10000FFFFFFF0000FF1C0FFFFFFF0000FF1C34 +:105E20000FFFFFFF0000FF1C0FFFFFFF0000FF1C24 +:105E30000FFFFFFF0000FF1C0FFFFFFF0000FF1C14 +:105E40000FFFFFFF0000FF1C0FFFFFFF0000FF1C04 +:105E50000FFFFFFF0000FF1C0FFFFFFF0000FF1CF4 +:105E60000FFFFFFF0000FF1C0FFFFFFF0000FF1CE4 +:105E70000FFFFFFF0000FF1C0FFFFFFF0000FF1CD4 +:105E80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC4 +:105E90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB4 +:105EA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA4 +:105EB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C94 +:105EC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C84 +:105ED0000FFFFFFF0000FF1C0FFFFFFF0000FF1C74 +:105EE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C64 +:105EF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C54 +:105F00000FFFFFFF0000FF1C0FFFFFFF0000FF1C43 +:105F10000FFFFFFF0000FF1C0FFFFFFF0000FF1C33 +:105F20000FFFFFFF0000FF1C0FFFFFFF0000FF1C23 +:105F30000FFFFFFF0000FF1C0FFFFFFF0000FF1C13 +:105F40000FFFFFFF0000FF1C0FFFFFFF0000FF1C03 +:105F50000FFFFFFF0000FF1C0FFFFFFF0000FF1CF3 +:105F60000FFFFFFF0000FF1C0FFFFFFF0000FF1CE3 +:105F70000FFFFFFF0000FF1C0FFFFFFF0000FF1CD3 +:105F80000FFFFFFF0000FF1C0FFFFFFF0000FF1CC3 +:105F90000FFFFFFF0000FF1C0FFFFFFF0000FF1CB3 +:105FA0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA3 +:105FB0000FFFFFFF0000FF1C0FFFFFFF0000FF1C93 +:105FC0000FFFFFFF0000FF1C0FFFFFFF0000FF1C83 +:105FD0000FFFFFFF0000FF1C0FFFFFFF0000FF1C73 +:105FE0000FFFFFFF0000FF1C0FFFFFFF0000FF1C63 +:105FF0000FFFFFFF0000FF1C0FFFFFFF0000FF1C53 +:106000000FFFFFFF0000FF1C0FFFFFFF0000FF1C42 +:106010000FFFFFFF0000FF1C0FFFFFFF0000FF1C32 +:106020000FFFFFFF0000FF1C0FFFFFFF0000FF1C22 +:106030000FFFFFFF0000FF1C0FFFFFFF0000FF1C12 +:106040000FFFFFFF0000FF1C0FFFFFFF0000FF1C02 +:106050000FFFFFFF0000FF1C0FFFFFFF0000FF1CF2 +:106060000FFFFFFF0000FF1C0FFFFFFF0000FF1CE2 +:106070000FFFFFFF0000FF1C0FFFFFFF0000FF1CD2 +:106080000FFFFFFF0000FF1C0FFFFFFF0000FF1CC2 +:106090000FFFFFFF0000FF1C0FFFFFFF0000FF1CB2 +:1060A0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA2 +:1060B0000FFFFFFF0000FF1C0FFFFFFF0000FF1C92 +:1060C0000FFFFFFF0000FF1C0FFFFFFF0000FF1C82 +:1060D0000FFFFFFF0000FF1C0FFFFFFF0000FF1C72 +:1060E0000FFFFFFF0000FF1C0FFFFFFF0000FF1C62 +:1060F0000FFFFFFF0000FF1C0FFFFFFF0000FF1C52 +:106100000FFFFFFF0000FF1C0FFFFFFF0000FF1C41 +:106110000FFFFFFF0000FF1C0FFFFFFF0000FF1C31 +:106120000FFFFFFF0000FF1C0FFFFFFF0000FF1C21 +:106130000FFFFFFF0000FF1C0FFFFFFF0000FF1C11 +:106140000FFFFFFF0000FF1C0FFFFFFF0000FF1C01 +:106150000FFFFFFF0000FF1C0FFFFFFF0000FF1CF1 +:106160000FFFFFFF0000FF1C0FFFFFFF0000FF1CE1 +:106170000FFFFFFF0000FF1C0FFFFFFF0000FF1CD1 +:106180000FFFFFFF0000FF1C0FFFFFFF0000FF1CC1 +:106190000FFFFFFF0000FF1C0FFFFFFF0000FF1CB1 +:1061A0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA1 +:1061B0000FFFFFFF0000FF1C0FFFFFFF0000FF1C91 +:1061C0000FFFFFFF0000FF1C0FFFFFFF0000FF1C81 +:1061D0000FFFFFFF0000FF1C0FFFFFFF0000FF1C71 +:1061E0000FFFFFFF0000FF1C0FFFFFFF0000FF1C61 +:1061F0000FFFFFFF0000FF1C0FFFFFFF0000FF1C51 +:106200000FFFFFFF0000FF1C0FFFFFFF0000FF1C40 +:106210000FFFFFFF0000FF1C0FFFFFFF0000FF1C30 +:106220000FFFFFFF0000FF1C0FFFFFFF0000FF1C20 +:106230000FFFFFFF0000FF1C0FFFFFFF0000FF1C10 +:106240000FFFFFFF0000FF1C0FFFFFFF0000FF1C00 +:106250000FFFFFFF0000FF1C0FFFFFFF0000FF1CF0 +:106260000FFFFFFF0000FF1C0FFFFFFF0000FF1CE0 +:106270000FFFFFFF0000FF1C0FFFFFFF0000FF1CD0 +:106280000FFFFFFF0000FF1C0FFFFFFF0000FF1CC0 +:106290000FFFFFFF0000FF1C0FFFFFFF0000FF1CB0 +:1062A0000FFFFFFF0000FF1C0FFFFFFF0000FF1CA0 +:1062B0000FFFFFFF0000FF1C0FFFFFFF0000FF1C90 +:1062C0000FFFFFFF0000FF1C0FFFFFFF0000FF1C80 +:1062D0000FFFFFFF0000FF1C0FFFFFFF0000FF1C70 +:1062E0000FFFFFFF0000FF1C0FFFFFFF0000FF1C60 +:1062F0000FFFFFFF0000FF1C0FFFFFFF00000995CD +:106300000000350000000001000000020000000352 +:106310000000000000000004000000010000000078 +:106320000000000100000004000000000000000167 +:106330000000000300000000000000010000000455 +:106340000000000000000001000000030000000049 +:106350000000000100000004000000000000000434 +:1063600000000003000000000000000000007FFFAC +:10637000000003FF00000000000000010000000119 +:10638000000000010000000000000002000000907A +:10639000000000900080009008100000000009FF3D +:1063A0000000076C0000008A0000008000000081EF +:1063B000000000800000008A0000008000000081D2 +:1063C000000000800000008A0000008000000081C2 +:1063D000000000800000008A0000008000000081B2 +:1063E000000000800000008A0000008000000081A2 +:1063F000000000800000000100000001000000011A +:10640000000000010000000100000001000025E480 +:10641000000025E400004BC800004BC80000001835 +:106420000000111A00543210000000000021054342 +:1064300000000000000025E4000025E400004BC837 +:1064400000004BC8000000180000111A0054321060 +:1064500000000000002105430000000000000001D2 +:10646000000000010000000100000000000000002A +:106470000000000100000002000000000000000613 +:1064800000000003000000040000000500000001FF +:1064900000000001000000010000000100000001F8 +:1064A00000000001000000010000000100000001E8 +:1064B00000000001000000010000000100000001D8 +:1064C00000000001000000010000000100000003C6 +:1064D00000006000000000030000600000000003F6 +:1064E0000000400000000300000003000000030063 +:1064F0000000030000000300000003000000030090 +:106500000003F00800000000000000000000000090 +:106510000000000100000001000000010000000177 +:106520000000000100000001000000010000000167 +:106530000000000100000001000000010000000157 +:106540000000000100000001000000010000000147 +:106550000000000100000001000000010000000137 +:106560000000000100000001000000010000000127 +:106570000000000100000001000000010000000117 +:10658000000000010000000100000001000000FF09 +:10659000000000FF000000FF000000FF0000007F7F +:1065A000000000FF000000FF000000FF0000003EB0 +:1065B000000000000000003F0000003F0000003F1E +:1065C0000000003F0000003F0000003F0000003FCF +:1065D0000000000F0000000012170000221700004A +:1065E00032170000121500002215000032150000BD +:1065F0000210000000100000101000002010000029 +:1066000030100000401000000000000000000000FA +:10661000000000000010000012140000221400000E +:1066200032140000421400000000000000000000CE +:1066300000000000000089060000892600000036E6 +:10664000000000360810000008100000FFFFFFFFE8 +:10665000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A +:10666000FFFFFFFFFFFFFFFFFFFFFFFFF000C00086 +:10667000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A +:10668000FFFFFFFFFFFFFFFFFFFFFFFFF800C0005E +:10669000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A +:1066A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA +:1066B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA +:1066C000FFFFFFFFFFFFFFFFFFFFFFFF00003C108A +:1066D00000000008000000080000000200000004A4 +:1066E0000000000500000004000000400000180841 +:1066F0000000080300000803000000400000000341 +:106700000000080300000803000008030001000364 +:10671000000008030000080300000003000000035D +:10672000000000030000000300000003000000035D +:10673000000000030000000300000003000000034D +:10674000000000030000000300000003000000033D +:1067500000000003000024030000002F00000009D7 +:1067600000000019000001840000018300000306FE +:1067700000000019000000060000030600000306E8 +:106780000000030600000C8600000306000003065C +:1067900000000006000000060000000600000006E1 +:1067A00000000006000000060000000600000006D1 +:1067B00000000006000000060000000600000006C1 +:1067C00000000006000000060000000600000306AE +:1067D0000000001300000006000010040000100478 +:1067E00000106440001064400000004000000019E8 +:1067F0000000000100000000000000000000000098 +:106800000000000000002000000000000000000068 +:106810000000000000000000040020000000000054 +:106820000000000000000000000000004100200007 +:106830000000000000000000000000000000000058 +:10684000000020000000007C0000003D0000003F30 +:106850000000009C0000000C000000050000000A81 +:106860000000000500000053000025E30000005474 +:1068700000000054000000040000000400000004B8 +:1068800000000004000000040000000400000004F8 +:1068900000000004000000000000000100000002F1 +:1068A00000000000000000010000000200000009DC +:1068B0000000000B0000000A0000000000000001C2 +:1068C00000000002000000000000000100000002C3 +:1068D000000000090000000B0000000A0000000991 +:1068E0000000000B0000000A000000090000000B7F +:1068F0000000000A00000000000008000000020084 +:106900000000040000000000000000001FFF1FFF47 +:106910001FFF1FFF1FFF1FFF1FFF1FFF000025E4BA +:106920000000800020002000200020008000800067 +:106930008000800040004000400040000000000057 +:106940000000000200000178000001780000000053 +:1069500000000000000001780000000000000000BE +:106960000000000000000001000000020000000024 +:106970000000000000000000000000040000000013 +:106980000000000100000002000000000000000004 +:1069900000000000000000040000000000000001F2 +:1069A00000000002000000000000000100000002E2 +:1069B00000000000000000010000000200000000D4 +:1069C00000000000000000000000000400000000C3 +:1069D00000000001000000020000000000000001B3 +:1069E00000000002000000000000000100000002A2 +:1069F0000000000000000000000000000000000493 +:106A0000000000130E490E490E490E4900920092F3 +:106A100000920092012401240124012400000000BE +:106A200000000000100010001000100020010120E4 +:106A300001011001010101012001012001011001EA +:106A400020010120010110010101010120010120AB +:106A50000101100101010101000000040000000615 +:106A6000020041040200410402004104020041040A +:106A700000000204000002CE000002CE0000000070 +:106A800000000000000002CC000000000000000038 +:106A900000000000000000010000000200000000F3 +:106AA00000000000000000000000000400000000E2 +:106AB00000000001000000020000000000000000D3 +:106AC0000000000000000004000000130E490E4901 +:106AD0000000000000000000100010001000100076 +:106AE000200101200101100101010101200101200B +:106AF000010110012001012001011001010101012A +:106B000020010120010110010101010102004104E5 +:106B1000020041040000000200000000000000022A +:106B20000000000000000002000000000000000063 +:106B30000000000000000002000000000000000251 +:106B40000000000000000002000000000000000043 +:106B500000000000000000040000000602004104E4 +:106B600002004104000000010000000100000001DB +:106B70000000000100000001000000010000000111 +:106B80000000000100000001000000010000000101 +:106B900000000001000000010000000100000001F1 +:106BA00000000001000000010000000302555555DF +:106BB00002555555000002CE000002CE000002CE64 +:106BC000000002CE000002CE000002CE000002CC87 +:106BD0000000005400000054000000540000005465 +:106BE00000000000000000010000000200000000A2 +:106BF0000000000600000003000000040000000583 +:106C00000000000000000001000000020000000081 +:106C1000000000000000000000000006000000006E +:106C20000000000100000002000000000000000061 +:106C3000000000000000000600000000000000014D +:106C4000000000020000000000000001000000023F +:106C50000000000000000001000000020000000031 +:106C6000000000000000000000000006000000001E +:106C70000000000100000002000000000000000110 +:106C800000000002000000000000000100000002FF +:106C900000000000000000000000000000000006EE +:106CA0000E490E490E490E49009200920092009240 +:106CB0000124012401240124100010001000100000 +:106CC0002001012001011001010101012001012029 +:106CD0000101100120010120010110010101010148 +:106CE0002001012001011001010101010000000447 +:106CF000000000060000000000000001000000028B +:106D0000000000000000000000000000000000067D +:106D10000000000000000001000000020000000070 +:106D2000000000000000000000000006000000035A +:106D30000000000400000005000000030000000443 +:106D40000000000500000003000000040000000532 +:106D50000000000300000003000000030000000624 +:106D60000000000300000004000000050000000314 +:106D70000000000400000005000000030000000403 +:106D800000000005000000030000000300000003F5 +:106D9000000000060E490E4900000000009200921B +:106DA0000000000001240124000000000000000099 +:106DB0000E490E4900000000009200920000000001 +:106DC00001240124100010001000100020010120F7 +:106DD0000101100101010101200101200101100147 +:106DE0002001012001011001010101012001012008 +:106DF0000101100101010101000000010000000378 +:106E00000000000400000003000000040000000572 +:106E10000000000300000006000000050000000460 +:106E20000000000300000004000000050000000353 +:106E30000000000600000005000000040000000340 +:106E4000000000040000000000000001000000023B +:106E5000000000000000000100000002000000052A +:106E60000000000300000006000000050000000410 +:106E7000000000030000000400000000000000010A +:106E800000000002000000000000000100000002FD +:106E900000000005000000030000000600000005DF +:106EA0000048004800480048009000900090009082 +:106EB0000120012001200120040204020402040236 +:106EC0000005000500050005120012001200120066 +:106ED000080008000800080001200120010110201E +:106EE00001010120012001200101102001200120C9 +:106EF00001011020010101200120012001011020C9 +:106F00000101012000000004000000060000012330 +:106F100000000123000001230000012300000123E1 +:106F200000000123000001230000012300000123D1 +:106F300000000123000001230000012300000123C1 +:106F400000000123000001230000012300000123B1 +:106F500000000123000001230000012300000020A5 +:106F600000000032000000070000000700000000E1 +:106F70000000000800000001000000000000000008 +:106F80000000000002150020021500200000003063 +:106F90000810000000000036000000300000003142 +:106FA00000000004000000050000000000000004D4 +:106FB00000000001000000060000000100000002C7 +:106FC00000000040000000400000001C0000002005 +:106FD000000100000002070000030E00000415007D +:106FE00000051C000006230000072A0000083100ED +:106FF00000093800000A3F00000B4600000C4D005D +:10700000000D5400000E5B00000F620000106900CC +:10701000001170000012770000137E00001485003C +:1070200000158C000016930000179A000018A100AC +:107030000019A800001AAF00001BB600001CBD001C +:10704000001DC400001ECB00001FD2000000D900AC +:107050000000001E0000001D00010000000207806B +:1070600000030F000004168000051E0000062580A6 +:1070700000072D000008348000093C00000A43800E +:10708000000B4B00000C5280000D5A00000E618076 +:10709000000F6900001070800011780000127F80DE +:1070A0000013870000148E800015960000169D8046 +:1070B0000017A5000018AC800019B400001ABB80AE +:1070C000001BC300001CCA800000D20000000001A9 +:1070D00000000001000000010000000100000001AC +:1070E000000000010000000100000001000000019C +:1070F000000000010000000100000001000000018C +:107100000000000100000001000000010000002854 +:107110000000002C00000030000000010000000111 +:107120000000000100000211000002000000020443 +:10713000000002190000FFFF0000FFFF0000FFFF3A +:107140000000FFFF07FFFFFF0000007F07FFFFFFBA +:107150000000003F0000FFFF0000FFFF0000FFFFF6 +:107160000000FFFF00007FF800007FF80000000033 +:10717000000000010000FF00000000000000FF0010 +:10718000000000000000FF00000000000000FF0001 +:10719000000000000000FF00000000000000FF00F1 +:1071A000000000000000FF00000000000000FF00E1 +:1071B000000000000000FF00000000000000FF00D1 +:1071C000000000000000FF00000000000000FF00C1 +:1071D000000000000000FF00000000000000FF00B1 +:1071E000000000000000FF00000000000000FF00A1 +:1071F000000000000000FF00000000000000FF0091 +:10720000000000000000FF00000000000000FF0080 +:10721000000000000000FF00000000000000FF0070 +:10722000000000000000FF00000000000000FF0060 +:10723000000000000000FF00000000000000FF0050 +:10724000000000000000FF00000000000000FF0040 +:10725000000000000000FF00000000000000FF0030 +:10726000000000000000FF00000000000000FF0020 +:10727000000000000000FF00000000000000FF0010 +:10728000000000000000FF00000000000000FF0000 +:10729000000000000000FF00000000000000FF00F0 +:1072A000000000000000FF00000000000000FF00E0 +:1072B000000000000000FF00000000000000FF00D0 +:1072C000000000000000FF00000000000000FF00C0 +:1072D000000000000000FF00000000000000FF00B0 +:1072E000000000000000FF00000000000000FF00A0 +:1072F000000000000000FF00000000000000FF0090 +:10730000000000000000FF00000000000000FF007F +:10731000000000000000FF00000000000000FF006F +:10732000000000000000FF00000000000000FF005F +:10733000000000000000FF00000000000000FF004F +:10734000000000000000FF00000000000000FF003F +:10735000000000000000FF00000000000000FF002F +:10736000000000000000FF00000000000000FF001F +:10737000000000000000FF00000000000000FF000F +:10738000000000000000FF00000000000000FF00FF +:10739000000000000000FF00000000000000FF00EF +:1073A000000000000000FF00000000000000FF00DF +:1073B000000000000020100100000000010090000B +:1073C00000000100000000010000000000000000BB +:1073D000140AFF00000090020000000000000000FE +:1073E0000000000000009004000000000000000009 +:1073F00000000000000090060000000000000000F7 +:1074000000000000000090080000000000000000E4 +:10741000000000000000900A0000000000000000D2 +:10742000000000000000900C0000000000000000C0 +:10743000000000000000900E0000000000000000AE +:10744000000000000000901000000000000000009C +:10745000000000000000901200000000000000008A +:107460000000000000009014000000000000000078 +:107470000000000000009016000000000000000066 +:107480000000000000009018000000000000000054 +:10749000000000000000901A000000000000000042 +:1074A000000000000000901C000000000000000030 +:1074B000000000000000901E00000000000000001E +:1074C000000000000000902000000000000000000C +:1074D00000000000000090220000000000000000FA +:1074E00000000000000090240000000000000000E8 +:1074F00000000000000090260000000000000000D6 +:1075000000000000000090280000000000000000C3 +:10751000000000000000902A0000000000000000B1 +:10752000000000000000902C00000000000000009F +:10753000000000000000902E00000000000000008D +:10754000000000000000903000000000000000007B +:107550000000000000009032000000000000000069 +:107560000000000000009034000000000000000057 +:107570000000000000009036000000000000000045 +:107580000000000000009038000000000000000033 +:10759000000000000000903A000000000000000021 +:1075A000000000000000903C00000000000000000F +:1075B000000000000000903E0000000000000000FD +:1075C00000000000000090400000000000000000EB +:1075D00000000000000090420000000000000000D9 +:1075E00000000000000090440000000000000000C7 +:1075F00000000000000090460000000000000000B5 +:1076000000000000000090480000000000000000A2 +:10761000000000000000904A000000000000000090 +:10762000000000000000904C00000000000000007E +:10763000000000000000904E00000000000000006C +:10764000000000000000905000000000000000005A +:107650000000000000009052000000000000000048 +:107660000000000000009054000000000000000036 +:107670000000000000009056000000000000000024 +:107680000000000000009058000000000000000012 +:10769000000000000000905A000000000000000000 +:1076A000000000000000905C0000000000000000EE +:1076B000000000000000905E0000000000000000DC +:1076C00000000000000090600000000000000000CA +:1076D00000000000000090620000000000000000B8 +:1076E00000000000000090640000000000000000A6 +:1076F0000000000000009066000000000000000094 +:107700000000000000009068000000000000000081 +:10771000000000000000906A00000000000000006F +:10772000000000000000906C00000000000000005D +:10773000000000000000906E00000000000000004B +:107740000000000000009070000000000000000039 +:107750000000000000009072000000000000000027 +:107760000000000000009074000000000000000015 +:107770000000000000009076000000000000000003 +:1077800000000000000090780000000000000000F1 +:10779000000000000000907A0000000000000000DF +:1077A000000000000000907C0000000000000000CD +:1077B000000000000000907E0000000000000000BB +:1077C00000000000000090800000000000000000A9 +:1077D0000000000000009082000000000000000097 +:1077E0000000000000009084000000000000000085 +:1077F0000000000000009086000000000000000073 +:107800000000000000009088000000000000000060 +:10781000000000000000908A00000000000000004E +:10782000000000000000908C00000000000000003C +:10783000000000000000908E00000000000000002A +:107840000000000000009090000000000000000018 +:107850000000000000009092000000000000000006 +:1078600000000000000090940000000000000000F4 +:1078700000000000000090960000000000000000E2 +:1078800000000000000090980000000000000000D0 +:10789000000000000000909A0000000000000000BE +:1078A000000000000000909C0000000000000000AC +:1078B000000000000000909E00000000000000009A +:1078C00000000000000090A0000000000000000088 +:1078D00000000000000090A2000000000000000076 +:1078E00000000000000090A4000000000000000064 +:1078F00000000000000090A6000000000000000052 +:1079000000000000000090A800000000000000003F +:1079100000000000000090AA00000000000000002D +:1079200000000000000090AC00000000000000001B +:1079300000000000000090AE000000000000000009 +:1079400000000000000090B00000000000000000F7 +:1079500000000000000090B20000000000000000E5 +:1079600000000000000090B40000000000000000D3 +:1079700000000000000090B60000000000000000C1 +:1079800000000000000090B80000000000000000AF +:1079900000000000000090BA00000000000000009D +:1079A00000000000000090BC00000000000000008B +:1079B00000000000000090BE000000000000000079 +:1079C00000000000000090C0000000000000000067 +:1079D00000000000000090C2000000000000000055 +:1079E00000000000000090C4000000000000000043 +:1079F00000000000000090C6000000000000000031 +:107A000000000000000090C800000000000000001E +:107A100000000000000090CA00000000000000000C +:107A200000000000000090CC0000000000000000FA +:107A300000000000000090CE0000000000000000E8 +:107A400000000000000090D00000000000000000D6 +:107A500000000000000090D20000000000000000C4 +:107A600000000000000090D40000000000000000B2 +:107A700000000000000090D60000000000000000A0 +:107A800000000000000090D800000000000000008E +:107A900000000000000090DA00000000000000007C +:107AA00000000000000090DC00000000000000006A +:107AB00000000000000090DE000000000000000058 +:107AC00000000000000090E0000000000000000046 +:107AD00000000000000090E2000000000000000034 +:107AE00000000000000090E4000000000000000022 +:107AF00000000000000090E6000000000000000010 +:107B000000000000000090E80000000000000000FD +:107B100000000000000090EA0000000000000000EB +:107B200000000000000090EC0000000000000000D9 +:107B300000000000000090EE0000000000000000C7 +:107B400000000000000090F00000000000000000B5 +:107B500000000000000090F20000000000000000A3 +:107B600000000000000090F4000000000000000091 +:107B700000000000000090F600000000000000007F +:107B800000000000000090F800000000000000006D +:107B900000000000000090FA00000000000000005B +:107BA00000000000000090FC000000000000000049 +:107BB00000000000000090FE000000000000000037 +:107BC0000000000000009100000000000000000024 +:107BD0000000000000009102000000000000000012 +:107BE0000000000000009104000000000000000000 +:107BF00000000000000091060000000000000000EE +:107C000000000000000091080000000000000000DB +:107C1000000000000000910A0000000000000000C9 +:107C2000000000000000910C0000000000000000B7 +:107C3000000000000000910E0000000000000000A5 +:107C40000000000000009110000000000000000093 +:107C50000000000000009112000000000000000081 +:107C6000000000000000911400000000000000006F +:107C7000000000000000911600000000000000005D +:107C8000000000000000911800000000000000004B +:107C9000000000000000911A000000000000000039 +:107CA000000000000000911C000000000000000027 +:107CB000000000000000911E000000000000000015 +:107CC0000000000000009120000000000000000003 +:107CD00000000000000091220000000000000000F1 +:107CE00000000000000091240000000000000000DF +:107CF00000000000000091260000000000000000CD +:107D000000000000000091280000000000000000BA +:107D1000000000000000912A0000000000000000A8 +:107D2000000000000000912C000000000000000096 +:107D3000000000000000912E000000000000000084 +:107D40000000000000009130000000000000000072 +:107D50000000000000009132000000000000000060 +:107D6000000000000000913400000000000000004E +:107D7000000000000000913600000000000000003C +:107D8000000000000000913800000000000000002A +:107D9000000000000000913A000000000000000018 +:107DA000000000000000913C000000000000000006 +:107DB000000000000000913E0000000000000000F4 +:107DC00000000000000091400000000000000000E2 +:107DD00000000000000091420000000000000000D0 +:107DE00000000000000091440000000000000000BE +:107DF00000000000000091460000000000000000AC +:107E00000000000000009148000000000000000099 +:107E1000000000000000914A000000000000000087 +:107E2000000000000000914C000000000000000075 +:107E3000000000000000914E000000000000000063 +:107E40000000000000009150000000000000000051 +:107E5000000000000000915200000000000000003F +:107E6000000000000000915400000000000000002D +:107E7000000000000000915600000000000000001B +:107E80000000000000009158000000000000000009 +:107E9000000000000000915A0000000000000000F7 +:107EA000000000000000915C0000000000000000E5 +:107EB000000000000000915E0000000000000000D3 +:107EC00000000000000091600000000000000000C1 +:107ED00000000000000091620000000000000000AF +:107EE000000000000000916400000000000000009D +:107EF000000000000000916600000000000000008B +:107F00000000000000009168000000000000000078 +:107F1000000000000000916A000000000000000066 +:107F2000000000000000916C000000000000000054 +:107F3000000000000000916E000000000000000042 +:107F40000000000000009170000000000000000030 +:107F5000000000000000917200000000000000001E +:107F6000000000000000917400000000000000000C +:107F700000000000000091760000000000000000FA +:107F800000000000000091780000000000000000E8 +:107F9000000000000000917A0000000000000000D6 +:107FA000000000000000917C0000000000000000C4 +:107FB000000000000000917E0000000000000000B2 +:107FC00000000000000091800000000000000000A0 +:107FD000000000000000918200000000000000008E +:107FE000000000000000918400000000000000007C +:107FF000000000000000918600000000000000006A +:108000000000000000009188000000000000000057 +:10801000000000000000918A000000000000000045 +:10802000000000000000918C000000000000000033 +:10803000000000000000918E000000000000000021 +:10804000000000000000919000000000000000000F +:1080500000000000000091920000000000000000FD +:1080600000000000000091940000000000000000EB +:1080700000000000000091960000000000000000D9 +:1080800000000000000091980000000000000000C7 +:10809000000000000000919A0000000000000000B5 +:1080A000000000000000919C0000000000000000A3 +:1080B000000000000000919E000000000000000091 +:1080C00000000000000091A000000000000000007F +:1080D00000000000000091A200000000000000006D +:1080E00000000000000091A400000000000000005B +:1080F00000000000000091A6000000000000000049 +:1081000000000000000091A8000000000000000036 +:1081100000000000000091AA000000000000000024 +:1081200000000000000091AC000000000000000012 +:1081300000000000000091AE000000000000000000 +:1081400000000000000091B00000000000000000EE +:1081500000000000000091B20000000000000000DC +:1081600000000000000091B40000000000000000CA +:1081700000000000000091B60000000000000000B8 +:1081800000000000000091B80000000000000000A6 +:1081900000000000000091BA000000000000000094 +:1081A00000000000000091BC000000000000000082 +:1081B00000000000000091BE000000000000000070 +:1081C00000000000000091C000000000000000005E +:1081D00000000000000091C200000000000000004C +:1081E00000000000000091C400000000000000003A +:1081F00000000000000091C6000000000000000028 +:1082000000000000000091C8000000000000000015 +:1082100000000000000091CA000000000000000003 +:1082200000000000000091CC0000000000000000F1 +:1082300000000000000091CE0000000000000000DF +:1082400000000000000091D00000000000000000CD +:1082500000000000000091D20000000000000000BB +:1082600000000000000091D40000000000000000A9 +:1082700000000000000091D6000000000000000097 +:1082800000000000000091D8000000000000000085 +:1082900000000000000091DA000000000000000073 +:1082A00000000000000091DC000000000000000061 +:1082B00000000000000091DE00000000000000004F +:1082C00000000000000091E000000000000000003D +:1082D00000000000000091E200000000000000002B +:1082E00000000000000091E4000000000000000019 +:1082F00000000000000091E6000000000000000007 +:1083000000000000000091E80000000000000000F4 +:1083100000000000000091EA0000000000000000E2 +:1083200000000000000091EC0000000000000000D0 +:1083300000000000000091EE0000000000000000BE +:1083400000000000000091F00000000000000000AC +:1083500000000000000091F200000000000000009A +:1083600000000000000091F4000000000000000088 +:1083700000000000000091F6000000000000000076 +:1083800000000000000091F8000000000000000064 +:1083900000000000000091FA000000000000000052 +:1083A00000000000000091FC000000000000000040 +:1083B00000000000000091FEFFFFFFFFFFFFFFFF36 +:1083C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:1083D000FFFFFFFFFFFFFFFF0000FFFF00000000A7 +:1083E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:1083F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:108400000000FFFF000000000000039800001500BE +:108410000000000100000002000000030000000056 +:108420000000000400000001000000000000000146 +:108430000000000400000000000000010000000334 +:108440000000000000000001000000040000000027 +:108450000000000100000003000000000000000117 +:108460000000000400000000000000040000000301 +:10847000000000000000000000007FFF000003FF7C +:10848000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +:10849000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +:1084A0000000000300BEBC2000000000000000052A +:1084B0000000000300BEBC2000000000000000051A +:1084C0000000000300BEBC2000000000000000050A +:1084D0000000000300BEBC200000000000000005FA +:1084E0000000000300BEBC200000000000000005EA +:1084F0000000000300BEBC200000000000000005DA +:108500000000000300BEBC200000000000000005C9 +:108510000000000300BEBC200000000000000005B9 +:108520000000000D0000000C000000000000001022 +:108530000000000F0000000000000000000000002C +:108540000215002002150020000000300810000075 +:108550000000003600000030000000310000000381 +:108560000000000000000001000000030000000106 +:108570000000000200000040000000400000000475 +:10858000000000200000000F0000001B0000800021 +:10859000000103C00001878000020B4000028F0031 +:1085A000000312C00003968000041A4000049E00DD +:1085B000000521C00005A580000629400006AD0089 +:1085C000000730C00007B480000838400008BC0035 +:1085D00000093FC00009C380000A4740000ACB00E1 +:1085E000000B4EC0000BD280000C5640000CDA008D +:1085F000000D5DC00000618000000001000000016E +:108600000000000100000001000000010000000166 +:108610000000000100000001000000010000000156 +:108620000000000100000001000000010000000146 +:108630000000000100000001000000010000050E24 +:10864000000004FD000005010000051E0000FFFF02 +:108650000000FFFF0000FFFF0000FFFF00000046DA +:108660000000000C00000000000000000000001CE2 +:10867000000000F400000001000000000000000005 +:1086800000000000000000010000000107FFFFFFE4 +:108690000000007F07FFFFFF0000003F0000FFFF1A +:1086A0000000FFFF0000FFFF0000FFFF00007FF859 +:1086B00000007FF80000FF00000000000000FF0045 +:1086C000000000000000FF00000000000000FF00AC +:1086D000000000000000FF00000000000000FF009C +:1086E000000000000000FF00000000000000FF008C +:1086F000000000000000FF00000000000000FF007C +:10870000000000000000FF00000000000000FF006B +:10871000000000000000FF00000000000000FF005B +:10872000000000000000FF00000000000000FF004B +:10873000000000000000FF00000000000000FF003B +:10874000000000000000FF00000000000000FF002B +:10875000000000000000FF00000000000000FF001B +:10876000000000000000FF00000000000000FF000B +:10877000000000000000FF00000000000000FF00FB +:10878000000000000000FF00000000000000FF00EB +:10879000000000000000FF00000000000000FF00DB +:1087A000000000000000FF00000000000000FF00CB +:1087B000000000000000FF00000000000000FF00BB +:1087C000000000000000FF00000000000000FF00AB +:1087D000000000000000FF00000000000000FF009B +:1087E000000000000000FF00000000000000FF008B +:1087F000000000000000FF00000000000000FF007B +:10880000000000000000FF00000000000000FF006A +:10881000000000000000FF00000000000000FF005A +:10882000000000000000FF00000000000000FF004A +:10883000000000000000FF00000000000000FF003A +:10884000000000000000FF00000000000000FF002A +:10885000000000000000FF00000000000000FF001A +:10886000000000000000FF00000000000000FF000A +:10887000000000000000FF00000000000000FF00FA +:10888000000000000000FF00000000000000FF00EA +:10889000000000000000FF00000000000000FF00DA +:1088A000000000000000FF00000000000000FF00CA +:1088B000000000000000FF00000000000000FF00BA +:1088C000000000000000FF00000000000000FF00AA +:1088D000000000000000FF00000000000000FF009A +:1088E000000000000000FF00000000000000FF008A +:1088F00000000000FFFFFFFFFFFFFFFFFFFFFFFF84 +:10890000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:10891000FFFFFFFF00001900000000000000000141 +:10892000000000000000000000000000000001D373 +:1089300000003500000000010000000200000003FC +:108940000000000000000004000000010000000022 +:108950000000000100000004000000000000000111 +:1089600000000003000000000000000100000004FF +:1089700000000000000000010000000300000000F3 +:1089800000000001000000040000000000000004DE +:1089900000000003000000000000000000007FFF56 +:1089A000000003FF000000000393870000000000A8 +:1089B000000000000000000003938700000000009A +:1089C000000000000000000F000000070000000091 +:1089D0000000000E0000000E00000000000000007B +:1089E00000000000031500200315002001000030E6 +:1089F00008100000000000360000003000000031C8 +:108A0000000000020000000500000002000000025B +:108A1000000000000000000500000003000000014D +:108A200000000004000000010000000200000040FF +:108A300000000040000000040000002000000002D0 +:108A40000000002000001000000020800000310025 +:108A500000004180000052000000628000007300AE +:108A600000008380000094000000A4800000B50096 +:108A70000000C5800000D6000000E6800000F7007E +:108A80000001078000011800000128800001390062 +:108A90000001498000015A0000016A8000017B004A +:108AA00000018B8000019C000001AC800001BD0032 +:108AB0000001CD800001DE000001EE800001FF001A +:108AC00000000F8000000001000000010000000114 +:108AD0000000000100000001000000010000000192 +:108AE0000000000100000001000000010000000182 +:108AF0000000000100000001000000010000000172 +:108B00000000000100000001000000010000000161 +:108B10000000000100001214000012000000120406 +:108B20000000FFFF0000FFFF0000FFFF0000FFFF4D +:108B300000000020000000380000000000000000DD +:108B40000000002300000024000000250000002693 +:108B500000000027000000390000003A0000002B50 +:108B60000000002C00000000000000EC00000000ED +:108B7000000000290000002A0000000100000001A0 +:108B800000000001000000010000000000000000E3 +:108B9000000000000000000107FFFFFF0000007F51 +:108BA00007FFFFFF0000003F0000FFFF0000FFFF86 +:108BB0000000FFFF0000FFFF00007FF800007FF8CB +:108BC0000000000000000001CCCC0201CCCCCCCCD9 +:108BD000CCCC0201CCCCCCCCCCCC0201CCCCCCCCFF +:108BE000CCCC0201CCCCCCCCCCCC0201CCCCCCCCEF +:108BF000CCCC0201CCCCCCCCCCCC0201CCCCCCCCDF +:108C0000CCCC0201CCCCCCCCFFFFFFFFFFFFFFFFA1 +:108C1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:108C2000FFFFFFFFFFFFFFFF00000000000100014A +:108C300000020807CCCCCCC910000000000028AD11 +:108C400000002918000029190000000000000000A1 +:108C500000000005000000067058103C00000000F5 +:108C60000000FF00000000000000FF000000000006 +:108C70000000FF00000000000000FF0000000000F6 +:108C80000000FF00000000000000FF0000000000E6 +:108C90000000FF00000000000000FF0000000000D6 +:108CA0000000FF00000000000000FF0000000000C6 +:108CB0000000FF00000000000000FF0000000000B6 +:108CC0000000FF00000000000000FF0000000000A6 +:108CD0000000FF00000000000000FF000000000096 +:108CE0000000FF00000000000000FF000000000086 +:108CF0000000FF00000000000000FF000000000076 +:108D00000000FF00000000000000FF000000000065 +:108D10000000FF00000000000000FF000000000055 +:108D20000000FF00000000000000FF000000000045 +:108D30000000FF00000000000000FF000000000035 +:108D40000000FF00000000000000FF000000000025 +:108D50000000FF00000000000000FF000000000015 +:108D60000000FF00000000000000FF000000000005 +:108D70000000FF00000000000000FF0000000000F5 +:108D80000000FF00000000000000FF0000000000E5 +:108D90000000FF00000000000000FF0000000000D5 +:108DA0000000FF00000000000000FF0000000000C5 +:108DB0000000FF00000000000000FF0000000000B5 +:108DC0000000FF00000000000000FF0000000000A5 +:108DD0000000FF00000000000000FF000000000095 +:108DE0000000FF00000000000000FF000000000085 +:108DF0000000FF00000000000000FF000000000075 +:108E00000000FF00000000000000FF000000000064 +:108E10000000FF00000000000000FF000000000054 +:108E20000000FF00000000000000FF000000000044 +:108E30000000FF00000000000000FF000000000034 +:108E40000000FF00000000000000FF000000000024 +:108E50000000FF00000000000000FF000000000014 +:108E60000000FF00000000000000FF000000000004 +:108E70000000FF00000000000000FF0000000000F4 +:108E80000000FF00000000000000FF0000000000E4 +:108E90000000FF00000000000000FF0000000000D4 +:108EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2 +:108EB000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2 +:108EC0000000FFFF00000000FFFFFFFFFFFFFFFFAC +:108ED000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2 +:108EE000FFFFFFFFFFFFFFFF0000FFFF000000008C +:108EF000032313031303231303030323A0B090439B +:108F000002000200060406040323130313032313C1 +:108F100003030323A0B0904313131313131313136A +:108F200013131313A0B090430301020000000000CC +:108F300000000609000035000000000100000002EA +:108F40000000000300000000000000040000000119 +:108F5000000000000000000100000004000000000C +:108F600000000001000000030000000000000001FC +:108F700000000004000000000000000100000003E9 +:108F800000000000000000010000000400000000DC +:108F900000000004000000030000000000000000CA +:108FA00000007FFF000003FF002625A00000000056 +:108FB000002625A000000000002625A000000000DB +:108FC000002625A000000000000E0000011600D6BB +:108FD000002625A000000000002625A000000000BB +:108FE000002625A000000000002625A000000000AB +:108FF00000720000012300F30000FFFF00000000EA +:109000000000FFFF000000000000FFFF0000000064 +:109010000000FFFF000000000000FFFF0000000054 +:109020000000FFFF00000000000000000000000042 +:109030000000FFFF000000000000FFFF0000000034 +:109040000000FFFF000000000000FFFF0000000024 +:109050000000FFFF000000000000FFFF0000000014 +:109060000000FFFF00000000000000000000000002 +:109070000000FFFF000000000000FFFF00000000F4 +:109080000000FFFF000000000000FFFF00000000E4 +:109090000000FFFF000000000000FFFF00000000D4 +:1090A0000000FFFF000000000000000000000000C2 +:1090B0000000FFFF000000000000FFFF00000000B4 +:1090C0000000FFFF000000000000FFFF00000000A4 +:1090D0000000FFFF000000000000FFFF0000000094 +:1090E0000000FFFF00000000000000000000000082 +:1090F0000000FFFF000000000000FFFF0000000074 +:109100000000FFFF000000000000FFFF0000000063 +:109110000000FFFF000000000000FFFF0000000053 +:109120000000FFFF00000000000000000000000041 +:109130000000FFFF000000000000FFFF0000000033 +:109140000000FFFF000000000000FFFF0000000023 +:109150000000FFFF000000000000FFFF0000000013 +:109160000000FFFF00000000000000000000000001 +:109170000000FFFF000000000000FFFF00000000F3 +:109180000000FFFF000000000000FFFF00000000E3 +:109190000000FFFF000000000000FFFF00000000D3 +:1091A0000000FFFF000000000000000000000000C1 +:1091B0000000FFFF000000000000FFFF00000000B3 +:1091C0000000FFFF000000000000FFFF00000000A3 +:1091D0000000FFFF000000000000FFFF0000000093 +:1091E0000000FFFF00000000000000000000000081 +:1091F0000000FFFF00000000555400005555555574 +:1092000000005555F00000005554000055555555C7 +:1092100000005555F00000000000000000010000B3 +:109220000000501400000000FFF55FFF0000FFFF8A +:10923000F00003E0000000000000A00000000400B7 +:10924000000000000000000000000000000010000E +:1092500000000000000000000000000000004000CE +:1092600000000000000000000000000000010000FD +:10927000FF5C0000FFF55FFF0000FFFFF00003E070 +:10928000000000000000A000000008000000000036 +:1092900000000000000000000000200000000000AE +:1092A000000000000000000000008000000000003E +:1092B00000000000000000000002000000000000AC +:1092C0001F8B080000000000000BFB51CFC0F00313 +:1092D00009A74BA2F217F0A2F2D1B1393F7E794231 +:1092E00098858132FD3ADC0C0C2640ECC18D2A6E4B +:1092F000CC04A1E770303074B233306400E973AC51 +:1093000008F978A8BDEFF41062653A0C0C9B342183 +:10931000EC679A94B96B140F0DAC6E8DCAD7B084FC +:10932000D04BADA07C34794DA8FC355328DF1ABB57 +:10933000B9D74D89B35FD70995BFD911BFFA596E17 +:10934000101A007AB633FFB80300000000000000D6 +:109350001F8B080000000000000BCD7D0B781CC5A2 +:109360009170CFEECCEEECEEAC7624ADE4952DDB37 +:10937000B3B2648B20C8CA968D001146F24BDC67ED +:1093800092C5187EC171640D0614636079055F8211 +:10939000D1C87A5852FC581BC7988761ED00F191EB +:1093A000C7D9095CB824DCBF020ECC2597884738A2 +:1093B0009240222070093F708A73C4E43F12AEAA23 +:1093C000BA479A59EDCA3217EE4EF948BB677ABAD6 +:1093D000ABABAAABAAABAA7BFDAA87CD3F9BB10FD3 +:1093E000F10FCABD5EC658C54469A4BF78DF6813D3 +:1093F00063EF59321B82D26A4B7F75340AE566BF30 +:10940000DE03E51DA1DBE8FD4659D5FD09F886A57B +:109410004F4B9EC2D8501763B90554FF24D6438CD6 +:1094200099871A26C6B1CB72E6616C31B6ABD6DF2E +:109430000C31FAFB10C6F6C317168EABB3EC501CFA +:109440001EBE9C6A65958C797913285799DF81F146 +:10945000634BD998FFF489FEBCBA8FE554D10F3520 +:10946000BC2492D2268F6B971B5F5E9B7DD2D1BEB0 +:109470009685A36F9E0CFF90998C7030EF56C610A6 +:109480008E28CB7AE3C5FB39D695CA3E5987F8FAC0 +:10949000CB48325CBC9D8D979E2E95E5FC8C0D745F +:1094A000E954F74699996DA0F999DFC252B368DC87 +:1094B000FE68CD819084D0A51883F9FA5F98770073 +:1094C000F1F1292611DEFAA337A86601BCDA25AB33 +:1094D00076E0A306A765513FF05FF601E847867185 +:1094E0000FC0F7B23E793CC4BF3DDEAA8F389E9FC5 +:1094F0009D4FF8089EC4D88886788579C0F79E5815 +:10950000CA1A8592C5A07D3D3C3678FBE3E12F5415 +:10951000EFA1F636BD642DE8A277C02873D33F8F44 +:10952000AF18CEBF02C765F532CC4F61C1C4104C35 +:109530006DBD94BA82F8FDFB7F69F6027E8E9A6C4F +:109540006C08EA4A34C5907FECEFCEA95847789270 +:10955000354FD62F5149F83C5ACDF9C31FF558FE67 +:10956000530BE38539F052142EA03FF239BD029C13 +:10957000B4BE2F53FFC104AC03182FCC4689492237 +:109580000C08328FB15266487C512424C41B632DD1 +:109590003AF26F34F0E7EEF712EA573277B20F4340 +:1095A00027D0AF0CFDCEFB18FA3D0EBC01760FF5AF +:1095B0008BD4F9B07CA2DF415877C094B0FE742AF6 +:1095C000FDD092D6770397335BBA62F49CC98F982B +:1095D0001E184F4BF88C21906B212DC7E2D0EEDF87 +:1095E0005AD531E01DF8E37CEB41FACD43BE64AFC0 +:1095F0007A80EEA1845BFEA8D53E17BF16A37B5FE1 +:10960000C5FC19A9A9D615ACDCB83AF15DB1761F35 +:1096100077D903F22BAE4CD465AD6682AFA7989F85 +:10962000B739C591C5920CF5C1F8F71E9642BDD069 +:10963000A35DA6E2FCD9071F7EE85DE290F35AB273 +:10964000B9105E5E61719247765DD1FBAF974AA01B +:109650008CAD33471DF0FC12FF81EB38B6C11C9D69 +:10966000061DBC72B2632DD0197822F100F0DDCE58 +:10967000D0A5ECD506D47397E6483E5654C6FDA84F +:109680008FD866AEB7548DA94B26F874B8E2C218CD +:10969000CAB5BEAA0B630CE4469F928C25A17EA49A +:1096A000E2EF4CECB7FF8308433DD91FAB89E0BC28 +:1096B000FA3F9837235D607E21C6E54510E18B7344 +:1096C0007E63F513F0F6C73C2AC273B481CB9D9D2F +:1096D000A17F30BD50F719721AFBF769302E8CDF6D +:1096E000DE74C85C0B7CEC4B6929BF3EB91F7B1C48 +:1096F000F8933E44B98F6DEC7527B9DE1784637219 +:109700003D65D6A05CD55962A8407B452DB142A7E6 +:10971000A2DC1D7FAEE3B8B53F3C25827C81ED0D18 +:109720001587964C5C5713FC9F75D19BE99E897EEB +:109730006B26E8D7EF33494E587340BFE17C64B3E2 +:1097400003F1D42B952D44FBA57FE650AC103FC907 +:10975000B181DF7A012EC0510EF9C81F5B614AD07A +:109760004F2F1830E52412B68E48A752F95B2FBE52 +:10977000D7E5B79C7C76B204760322ED34761ACE18 +:10978000B347E3F42DB68EFA601DB105C5DF2BBEDD +:10979000442A497A27FD12C221B353097EB9FAA996 +:1097A00097E200478BC4F5B11CF5590837D3E5B7EC +:1097B000471DF8A896CD1609DE2B41DE4F7EFFA788 +:1097C000C86DA604F87A8D25DBB01C882F117A2E7F +:1097D0006F5D6830F8E9C5E1B4F1AE5F9210EBDB84 +:1097E0002C912A39DFE25FB0218136068B9DE9D5C5 +:1097F000E5664E47B075603D7AD910F25ABDFC1A45 +:10980000C26DC2FF10EE9216A83BF0EA352F36E784 +:10981000C1BCF536754C8921DFF0F6363F7A911ED2 +:10982000A762E97EFE5792B0E36C7A743DCA5EAFE0 +:1098300073D889688F16C0CBABDEB6CBA58A4278C9 +:10984000289B161E0662990109E50753C722305F5F +:10985000157910BEDB25E89D41FD03E556A17F7A11 +:1098600085BED9DB6550B9BBAB9EDEEFE94A50FD42 +:10987000AEAE66AAF7779954DFDED54EE53D5D4979 +:10988000AEA7B42CC9D35D55C69D12DADFD62FCD55 +:109890001FC227BBC2C64F19D9E33FE77590D96CE9 +:1098A00026F09DF413D302BEDC556A5CE40110BEC1 +:1098B00051FE94F524C25767FC5482FA70F733B90D +:1098C0005E6C7F0A6F7F9FF46BDE3EC03A504E3372 +:1098D00063CD71F0C0E5E2B771DE50EEAA80EFB45F +:1098E000E97FF73DFC0EF0B82B7E62E305E5ACC9DD +:1098F000E7CB5A5F009406550EFF4FA4774D4B13EC +:10990000FAE40CC67E218D59349F5344FFA08F2E5C +:1099100070E8A36725858FDF7862703F2FE61B49CB +:109920008E9A88EA73A4D43771FD853B72960F48EE +:109930003B607C8B917E3380F9AB8ECF47332583A0 +:10994000DB41A2BD529D3051CCFD332A99C513CFC6 +:10995000232D26F5FB7D241EB4BF27DDA6F2756CF2 +:10996000AAC8174F8AE7F6FE417EC64B76CEE3457E +:10997000DADB76BFDDAE289CFA71ECD969CE93C9EB +:10998000600F80BD7698E9AEF9DE8B75C73C831A0F +:109990005FAFD3A5C79F043D36E5F57B435EBDECC5 +:1099A000EB1ED60C4BBBBCDDA14FE0BF5233E8B27F +:1099B0006BC28932575DD167BADA57A5DC7650455C +:1099C000F213AEF7333A16BAEAB33ACF70B5F7C727 +:1099D000DA5CF548F35FB8DACF4EAF76D53F2ABEF2 +:1099E0006FCF9BFF405E7DBAFD940BB9663FAFBC65 +:1099F00078498AF87B55133D07BA9E5307FFFCCD83 +:109A000097EB160EB142FD74137DEABC66A987F888 +:109A100093CB6F8F25913DBD474A9EB71CFD0D67C7 +:109A2000811D86F8C893EFCC59F74EAEC73D5C3F19 +:109A3000B2557C3E677F70B64AFBD0B02799053E91 +:109A40000A2A59BDAC61623E95C20EB5E13FFB8367 +:109A50001F7B71BDF4E8C601DC6FECB9F82F62978B +:109A60006993E1B7FBFF92E669C7FD7BBE1EFE92DC +:109A70007C48758E63B73F1E7EEB8CF47DE867995A +:109A8000BEDF25C93C50BFE5331EDA1F6D157E864B +:109A9000A13C3F433FE81BEE97D15F427BF1D819D1 +:109AA000CCC0F625D15113F5C7059EF6D67A80AF06 +:109AB0002466C662503FFC7F6BBA979D85A6ED2851 +:109AC000E1EFF6E6D51136853F259C70EFCF43F5E3 +:109AD00053EFCFFDB19953EE8F5E479B02F05C02CE +:109AE000FBC84403965C0E78236FC7AE74D857CB7F +:109AF0003D5E6AE7F59E97467B67BBC4E5BBFDFE0E +:109B00005E8F87F0FA63309BB1DDD91FECF070FAFD +:109B1000F2FDA4166EB372E8179158BA4E9F4C47E7 +:109B20004DC911BFFC4FE3A1A7743486F645168DCD +:109B3000D04F811CD2C0FE837FCAE5975897C3F3EC +:109B40001EB0FFBD09B4B3B557F1B922EC23BF274E +:109B5000657916933F434A917F2949E5FFF47CBC20 +:109B6000DEC6B11CEE17CEF4250EB0C9743BECE195 +:109B7000FEC1E548B70AA4DB6768BF6ED36D48E352 +:109B800074835553906E577AB81E1992B3B40ECFA2 +:109B9000FE20E2A1EF9B3DA4DFB66A0B07E7E1F7E9 +:109BA0002F781998876CAB9CA376FFDD78C8872B3C +:109BB0001C06B8D08EFC09872BAC8CE8FF137015FF +:109BC000E5B7B28EE3F1DB8F0AF19B65D33D94ECF0 +:109BD000C0753A31EF1AF233221F7A1A90DE12D191 +:109BE0007B9B90ABDBE491FF56BA8CCB6B35732932 +:109BF000CA894ECD4772F26AAFF5540AE54448620D +:109C00000FC0BCBDA807415E5EF16525817CD8F917 +:109C1000136FB3D700FDE20DB8F6AB76D929038BED +:109C20008229D009FB49C417CB2A63E3FB9D9AC95B +:109C3000FEE8DF7BDCFBCAA3BB2F88E458713CBC89 +:109C4000D5754497EB26FCD1F9EFAFF6B234E9397C +:109C5000F5908FE6756B2630D488F39BBF2C037488 +:109C60002BF5F27566EFFBAE3EF88C2E3BF0D4B9C7 +:109C70005B79D55F00EE717CD9DF81FAF1974DFEFB +:109C8000BED87780BF65088FD204AC0638EDF4A645 +:109C90002ABD68D71FBC3E079616F0D1216E3F8BB8 +:109CA000FE27E087B52DE067A7168057F7BC8AFE30 +:109CB000D8E3C17B3C7D7C74775F3F83EF7EA32438 +:109CC000E6A03FA773EB021AEF326107D978BFE233 +:109CD000CB7D9585E20DE378F76E5D8170BFC7ACF3 +:109CE0007A6F23D5E777C2F34F17E197E3F1C719EE +:109CF0005EF73EF763E30F982FF2C705367F0C54EB +:109D000010DF9F307FD8DF9D207F003F5CE485D24D +:109D10009493175E0470851B5862C898E00FBBDFF0 +:109D2000497C21E8F451E13C1E5FA81BBDC6AF167B +:109D300081BD299BA44707F4CD16D117F72AE89FC8 +:109D4000C83492DF10142DF913E12F87F254D54D4A +:109D500092F341D8B4527CACC9E3964F79F22BD63A +:109D600061E6EC7E71DEEA461F8D8B9E131C57D692 +:109D7000582E80F3117E69644BB4A3FDECE7EDF33C +:109D8000F87784AF62F39119F75BA35B09ED6B3F42 +:109D9000FBCB88D34F3B79FEEE71626B9253C66D5D +:109DA000F2DB334D36DE74E0BDF877327BD361D71A +:109DB000EF41D9BC7802FFE6B21B3A102F61E649A9 +:109DC000A09DDC53FD7716BEDDC2F8BAECC712F9D0 +:109DD00022C6FD379D289CE17B4B5A928B633CC188 +:109DE00054C7507F79B534972FB1E9F9798242EEA3 +:109DF0009F27271F4239F5A50A9641793E8E4F1FAE +:109E0000EC279007EAD7F0FDC129575AE8C753E677 +:109E1000E88D388538EC0BCE3BC5D92FDFB70E74F3 +:109E200065D9EBCA44DC493592BC147CC6EAB9BC9E +:109E30001A68E0F69AAA1E623A94A1CCE11CC62BDD +:109E400026F8CC626B4E413A72BDB81B4ABE6FCA4F +:109E5000D2384A2CE8D27FE3FC543F3D79B8BDCBE1 +:109E6000905E77C4014A8AC4779FF64A2E7AF574C9 +:109E70005967FDCAF19D574E10FCB206CF1DFC6E0E +:109E8000BF9FEE38A35E6E274EB7FDF37970DD827B +:109E9000720FE03876DB88BC1ACA73733F956B008B +:109EA0007F7F12ED8EDDC63AB19FE7BADE77F911FA +:109EB00025B992BE3F77D5B3F252C738E70AFF22E1 +:109EC0006323F2796127FEC4BE511B7BE2438C1BE6 +:109ED0003679C98E2D86EFD5B1A559B97CA2FE5C25 +:109EE0009397ECA1E7601F847CFF5C533C6B15F0FB +:109EF000D3E4FBCB57C756503FC7368DC8499A8726 +:109F00004A78C2791A00DFB9EDCFCAA6767CB8FFCD +:109F10004DE405D878BB4BF4736C538E61BF5AEE99 +:109F20001986FD699D39D36CE0F20EE1D48E9493CD +:109F30007D07FB6A75F52913FDD9FD47709E8B26B9 +:109F4000EA3B1260F7011C3B709E4D5837B2560138 +:109F50003CE5CF3382F35CE490E3369E5B3C53E216 +:109F6000F9175D66562EA00FEDF2D2B33C49C4FB43 +:109F7000A5CA6845213B341F8ECF6E6CCDCACEB8C2 +:109F8000D84784E3972D1C0FBF94C7C21F695CC0DC +:109F900043BD9D3701F83F56C3CC76DCF79631E2DE +:109FA0001B58794751FFD9714C59FD34BB75A163DA +:109FB0007DEAF0DE65270B7D33117738EADC6F8DA3 +:109FC000EB45D46B61CC6BE8E7FEF96890F60DDEEB +:109FD000A8FCE6681E7C149F9B2391BCECB1E53580 +:109FE000634F62DC406E4A7C05F1753108546107AD +:109FF0005C2CD3BA35CDEE28C519D243E42A3F44B0 +:10A00000BA4BA9AC8F703BB1B01CDFD23532C389DB +:10A010005F1B7F5B14E1EFFD60E928EA67D9537F9E +:10A020003DC527A6E9F71F9A2D754C05FF0D13F0C6 +:10A03000DF20E0B72E6B22177E1AC709E90007E080 +:10A040006FE8A4F953C23F5004FE8109F8EB510FA9 +:10A05000F47A1A4E087E1BEEF171EA18D17750CCD3 +:10A060002B7F3E83753EF227F79E94F80A8AC8ED4F +:10A07000627E301DA23BCC73BBECE04B59E7F6FB94 +:10A08000407C8FB919E396D010F56E31F802EA8B57 +:10A09000336447DCFE1E99EFE37BF111DAFF228E79 +:10A0A000AC189C0FBBE5D43D389E52DD4FFB2A25F2 +:10A0B0009A21BD19AC87797C12E3F88CE005B32EA8 +:10A0C000DB007C1F0258D426AC8F7C03EBD08EE9DA +:10A0D0008EFA381E2AAC98E6B0E7FBE2FD2FF93184 +:10A0E000CE1A65C602E4B7DC4524EF9428E86980FF +:10A0F000C727E74C8AFF24581CFD963EF510C51172 +:10A100005903D40D18279A65ADD0DFC01FBD3CFEA2 +:10A11000809B41C7FCEF90B99F2A9F3EC5E8F7BCE2 +:10A12000A0CF6AC9C68B9B4EC34897C5448F61991F +:10A13000E863E66E6A9ABC6E9E3F7701E7BBF6C2A3 +:10A1400076EF6AF5F9192EB92AF2330CFC17FC5F89 +:10A1500046D025586FDC49760ED21748968DB5E764 +:10A160002403FD3C89C16E1867567D7618413D3643 +:10A170003BF59C933F0C4B97905E5B15EEFF59EEC1 +:10A18000DD1A780DEA7B533511F4BBBE2F4B05F178 +:10A19000B0BD0BE6AAA05F53A5F2D82B0BA68CBBD3 +:10A1A000EEEB622EF9BAAF59267DBAEFA6D7324B45 +:10A1B00001EEBE68ED42949566F3AB7BD1BF11AE64 +:10A1C00037C87FFD1B313EE0F137B283CFED7DA96B +:10A1D000628E9864C7B0118AC35745592267703997 +:10A1E000273BF0146E628FD7C2FB598C91DD097842 +:10A1F000F81DE2415E976DF5B1C978D89BE2F9454B +:10A20000375C31FF8033FFAC5DE17CC2CC322E6F16 +:10A21000E4447D21FBDBA6D77D80A7060C4CB1432F +:10A2200012AE9B59B77297CE03E2F92372D2AB00FC +:10A230001CB33624141CFF39E18793982A57123F28 +:10A24000E9FB919FEEBB2D28D6BDBE1FD77D58B12F +:10A25000F3F7C6D77D5829B0EEB729295D41BB7900 +:10A2600077C6829D2E9B7BEB083DEFF1805DA511AB +:10A2700098CF213FC5252690C5D7EBAC04F7BF2F5B +:10A280005138FE4B6BB3DD1E786FFC7AD6E675F065 +:10A290007E30A59928E7E6D67DAB7529E0F53DB07F +:10A2A000E7310E387776B6DB87EBF07A1E3F285D14 +:10A2B000C63C6D484FC43BB4AF4EF37A44D8FF83DD +:10A2C0005DDC5F5E63652556603F12F065289F2266 +:10A2D0005E7BE52A342AA5F9B136941F83DB580248 +:10A2E000C3B0B336E4CCCB009E78B35FC7FEE7C6FD +:10A2F000138FD37B18BF1BE08DF7F2F7A5B04DC4C9 +:10A30000F102EC50B78AFA57CEB0F31D74D36A53FA +:10A31000D760FFBD4A6A09E2514B703916A8CD5289 +:10A3200079A73242F672B82567929FFBF43D6CAD77 +:10A3300083DF570ABE08343133AB4DF05F5624D467 +:10A34000DCBECA13BCAA01DB05F93E80ED36F5067A +:10A35000E4DB8C89F183B0E05BE0CB15387EA97536 +:10A36000A815F12D37655BB10B588F94A774A79290 +:10A37000A94238EE3CDDD741710F8BBDC89680BD38 +:10A38000ED61137FA89F6BCDFB917E7FC4C5897E55 +:10A39000BF59A3D63A1827067433000F25A3FB73C1 +:10A3A000FBA0DD538037D60CF5E66CEE31A4BB8DF7 +:10A3B000A7EA91731640FBF2184B9884E76CEE15F0 +:10A3C000785FDD116288E75236C67C71C2D72508F6 +:10A3D0006F7855B61BE50DABE17CBE4F4EFF721397 +:10A3E000B4DF77C49BB00CC77A61B05E1CFBAF3999 +:10A3F00037B1497693737D1D4F7F4EECC3B93EB2A2 +:10A40000FD82B0AEAE45BE9775BEAEA6EB6F6A05D7 +:10A410008AA0DD3BF32691FF2AE4ED2C81DA6A362F +:10A420003AEC81E773C17453A08CAF3136E3F29EEE +:10A430007749B66A3FCCB3B7F4C52A1ED75DA6E309 +:10A44000FE5932CBA50F4F9EFE3EDB866356DA9D4A +:10A450008F51DAE9AE87F3F2358293E274BC9F1232 +:10A460005B3F198984534E6D0B8CECE571FB67DB08 +:10A470007E1883BA34D28121495FF90FDADAA1FD5F +:10A48000B6F0480C43D581D0F3540FCFB1F348C791 +:10A4900054DCFF7E473138BFB7C01880AF9D864C73 +:10A4A000F8DAB1EC391DDF0F8FDE4E7CB8B385E7EB +:10A4B0006BDAED778E7A5187B3ADD01E9D125B5B60 +:10A4C00078FBF1FE00165C0F5B457FC71AE13DF09B +:10A4D000F931D01D23C8EF728EC6F7982A2BC3FD21 +:10A4E000896867F753373A46FAC0EE6F3ED3BB71BF +:10A4F0009D055B32265096D59929EB71183F92F055 +:10A500006441E2C07BCAC565A5D04F0EFA092CCBC9 +:10A51000E6900CC3AFCC088C3AEC8F9D09DE3F6B04 +:10A520008E4E4BEEA39D7CB9C34EC67A0FDA9D8644 +:10A530004C7627C8EB2771DDC84D32F949CD35ADD2 +:10A540000CED17DBBF668F735CFE9F663BE3D72184 +:10A550006E87BD2CD13EA8624E328EF962EC452F3B +:10A5600043FBC86A4BC6D17EB57E11D27B483EA65E +:10A570004F73CAC73E21A7A349EE1F39867E1747EE +:10A58000BEED57BDA95FE07A932A3B52B87E6E7943 +:10A590004D3290EE156BB81F65234C91FC24ED1ED7 +:10A5A0009E1FC6F8FE72D7FD33081EB9FC924A946E +:10A5B0006FBBDA6BA6CCC7ECEF62895A879FA15FAD +:10A5C0004EA948EFFED842B5D077BE982F51BB08B0 +:10A5D000FB3566E81FA9DFB6A0B3DF3A6FEAFF2BB1 +:10A5E0001593FBCF8FA307B487695F1138C1F8F9C2 +:10A5F000DEB5FD9427179D6136E2FAFB8E8FE5925A +:10A60000B026A221F330AED72FFA4E5BAAC17A8CC6 +:10A61000FACD460FD467FAFD4BB702FDA373CDEB1D +:10A6200031E4F686E7B34BFF11EBE89B3E83B14A7A +:10A63000FFB61E4BE01FF5FD60973E13FD40DBBBF0 +:10A64000625456FAB81D5185C9325006402FE2BCFB +:10A6500083B5D0CEB1FFC438303E8F34C75CCF59FC +:10A660008CCB475C5B683F80FE9AE343F9D5911D34 +:10A6700046B928EBF9F6654304EDCB63C3E7B01A9E +:10A68000E0AFAB7C229F4E3724B4E377A05D5987BF +:10A6900071746E57BE3F7A3E9369DFA2A6D1BEDBCE +:10A6A0007ABA2D87B294CF1EF1707F9F4D8F88FAB2 +:10A6B0006225D9CB5173024E875DA16CFCC1D9BF15 +:10A6C00072F875CAA2230CFD2F4A93517539C01F29 +:10A6D000D693ECB20684D7D04D5C0FA53C9F51D9E0 +:10A6E000F823FACED30D620BFD9ED11443FB748583 +:10A6F000AF92E0DFBAD8907CF8DD49B95802E75B49 +:10A700006174A35C0176483F00707BD61A9900EE15 +:10A710006F13A9AF38F37BCA1286E49D22FEBBAB50 +:10A7200094F7BB23CCF79965D18D339DFEBAE1D167 +:10A730007911CC93BD4AD0F1161FCFA7B0BFDFDA95 +:10A7400065CC447CF676D553B9D6574AF200AC0EA8 +:10A7500092075A6994EC49FB3BFBF9567DF5035E81 +:10A7600087BF64AD8FE767DD1274B7DB162DDBEFB3 +:10A770006EC7E9794B09A78BDD2E5C11CD6BE729FC +:10A7800018770927005E077F293AC0ED986F496D59 +:10A7900086E81E900BFB17CFD45B37F8A0DF797EDD +:10A7A0009E5FB3373E1443FE7B1FF034955CE98512 +:10A7B00075213BF3AB6593F21E64E1C75474DD056C +:10A7C00017DA31E8A77B2CD0FA05E4F779688C2EEC +:10A7D0002EB81E2C84E778EBC11EF711813F875CF1 +:10A7E000A2F58074467DD42F713E980CBF41F00FC6 +:10A7F000229DA1DC67D341D0754B759BEEB4570BFE +:10A80000BC57AFD09CEFDDF4DE52BD5A5DAB15F8FE +:10A810005ED019DEEBEEF79CBEBEBCF56997877D76 +:10A820007C5F618FEF9FBDDBF57D81F7EA150DCE73 +:10A83000F7DCAEB5E1F3CFBE5F2DF8BD800FDEE7EC +:10A84000F5CFED754577F35BB0B6DE551FE7A34650 +:10A850002E97B7C2F2912244BF8B92E46735AA5675 +:10A860003BF4E4F57E8E97F1EFCEE1DF3D2DA78638 +:10A87000914F821DE91CF2C1704327D9AD76BB818F +:10A8800030E7D33DB84983F532F48C378BFBF621A2 +:10A89000C59D9761976FF8BCF4DD9E80F03FC9F0CD +:10A8A00007FB8032B18FBBE31C43423FFAF3820EB9 +:10A8B000ECE0430F3D047C598620D74CE803B6E614 +:10A8C000820B2E80E7BBF039E9E51CC5D3CADAB9A3 +:10A8D0003C06FE33953A9E9F81F27FEB070BBA51FF +:10A8E000FE593166E0FEAEAC9A91BDEC6FF2ED47D9 +:10A8F000BBD80FFC1F76ACD79F88F1ED7E06A51C58 +:10A9000039458F0A7D53163386D1EEF1553303F75F +:10A910003BF8BDE2C0BFF7A275CF4AE4AFF7199884 +:10A92000FF0F705B9F203B829FA3626B9E7D09C7D8 +:10A930002FD32B0D94ABDBC21C5FF678B410713FA4 +:10A9400058B7E441B4339E28FD7C0EFBDBD6C81615 +:10A95000E192F5C572EC4AC4BB64E7A532B302FDCF +:10A9600028F57CDF5D79F1807F0ED62B6736620893 +:10A97000ABC4CFF9661C7F070F30A7BF3ED8A1B686 +:10A98000A2FFDDEC38CFE4F69CB190EC39C6E91AB1 +:10A99000AC36C81FEFF1DB7E0DD3E3073C6C037AC6 +:10A9A0001980EF6D17D577CBE4FF608790150625EA +:10A9B0009EB76D3502BEA11FADC9A07C0EA00FE9E8 +:10A9C000177FCC20B8E6F90D979F261F8F7B849FB9 +:10A9D00072DBE2150CD7C1B6734658FC14FC8ECF5F +:10A9E000279CC8911EB4FB9161FF8B9BF6406D2A9A +:10A9F0008E7CF9582019F3A3BD29ECDE71BE8D0FB2 +:10AA000010DF2A20F6F03C50F4FC55661FC0DF270B +:10AA1000FC8C66079F77B89AE70DC93ADF4F83FD34 +:10AA20003BCFEF80D7F6E78CDB89BA87D357D8893D +:10AA3000BDAB2A5DFEFB5EFDC4ECC42DC8BFB87E75 +:10AA4000B5C755CA3BAAF62428EF28B1F008A65E80 +:10AA5000FACE8A92FFC96EFF90D6B6D8EFC667A22B +:10AA6000D6C1D7BD684F4EA1B7278F6F0470FC5D6C +:10AA7000999AC15AC7F8BBDADB8227151E7FB97FC6 +:10AA800071F1F1E1EF6DD4333EC15A03F12B0BDAD2 +:10AA9000BF372AA9A4B31F5FCC74E379DC1E370249 +:10AAA000CEB8E889DAE1F925B077929F2F3AAA3B30 +:10AAB000F337D70ABEBF4233D7227EF3E775A276BB +:10AAC0007AB171EFCFB8C7ED157219C64DE3B8BDB5 +:10AAD000B8F891CFC7F308D2EC8D269283E9BB1268 +:10AAE00048DF368BCEA7E11AC2FD65E3E7D93F42C6 +:10AAF000BD3FA5A5B97F2495BC02964A30B3DFC2FD +:10AB0000FD2AEC9D29FE1B603C9FA0623CEECBF928 +:10AB1000576E5F41FCEB8BF178F7F785FC63D5410D +:10AB2000F73951110F9E4CEFC279520AC25F4E792C +:10AB30001092D244390AB47FECAB5FDDAA60FE41CB +:10AB400035EC1A0CCC134B75E3FB20F48BFE18ABE1 +:10AB50008DC731AD07FDD91EC9318F28F7DBA9227A +:10AB60007E3D07E741FC612686510EEE5E4EFDC339 +:10AB70003EE81EE42B5FB53B5F4241F8297EE0DEF4 +:10AB80000FCD608911B4A75933C7530973F82FA6A5 +:10AB9000B12F7AD8CFF5C897E5D44338AE963C4468 +:10ABA000F9FEA84F519F459356EB8FA2C2BF5B2A77 +:10ABB000F05E295C4E349EC5DEE4F1B6049E4BCCBB +:10ABC000F939FE2BD658AD489F6A105FF85D65C70E +:10ABD00008D9674342CF0F293C5FCE96DF6007EE6E +:10ABE00047F9BD39F4CDBDE857EC2B2F23F99B1362 +:10ABF000F0996BDCF20EE45CCEB9FE42D12C57B377 +:10AC0000C5CEC109FFD5192B53CF209F7EADCADA1F +:10AC1000CBCFB5B034F0040B5425768CD7E740BDCC +:10AC2000AEA9E039EB0F5698FF8CE37E4D3AF4B3B2 +:10AC3000F548E75725A2EBD76A1317A19C66EC509D +:10AC4000D0B9DEBFF6F51395A763244F7768478F19 +:10AC500038E5E98E96A2F2F49753C9B3AF9DE0BAF6 +:10AC60001F1F3F933F7E5179FA6F38FEB8DC6BB1FE +:10AC7000E5DE18E583E4C3B3A3E5E3917F923A2EC2 +:10AC8000FF24B580FCDBF131C93F7D625C5DA5F836 +:10AC90003CF787E68F9FDFDF785C59F8110FAE48ED +:10ACA00056A980C7DF5533CB0BEBA3A4BAFFE9B598 +:10ACB000C644BE07AB1D15E7594655B48BEC730D62 +:10ACC000DB9B3F1EBFCEF613D4C376BF93E79975C7 +:10ACD000EDBBECFE7B71DEB0DEAC73B91FE02EC6BF +:10ACE000F150C646E8DCF3A7045E2BD5648BEA88F6 +:10ACF0004FDDAED50CC6012F776F782E80F0DBE7E5 +:10AD00006D19E819E77E61F9F8F7E652FCBE3C5C84 +:10AD1000B3537C578ADFD579932B11DFBF519295BE +:10AD200014C0CB93ABBD12C85584EFF48F26572FB8 +:10AD300050B95E7CC29FBA00C7E959D536540BFDA5 +:10AD40000CDE7419ED13C6E1EEE4F1D2F2736B7709 +:10AD50002E0392F6646A687DCDBE5926FD361833FF +:10AD60000E38F7F7769EC9137EF352EC97754ED3E3 +:10AD70009F3FCD76A0BF385DCA3CA4BFBEA8727904 +:10AD8000EE4FA6482F547670BFE3E764F35AD541DF +:10AD9000D7DE3F793B0BEDA73E2FE8D0EBB3B8BC35 +:10ADA00017793EBDA531B2D72518D719B7E8965304 +:10ADB0005FC47ED57A1E77500D1E2F029D4B716F9A +:10ADC0007F35D703F02DC5BD7D311EF71E8AF338C0 +:10ADD00037EA66DD51B7FB1D8A67639A03BEBE93EF +:10ADE0001EA4B877C060C60268A7E60629EEAD1AB1 +:10ADF000164BA17D0EFC447ABB9AC7B9036A8A91AF +:10AE00007C8BF138B86224592BF4378471EF027CC3 +:10AE10007F8DCAEDFFC5AA79BBEA882FDB7AD3FC08 +:10AE2000B546788E75F278C8AC64AE95E397EBC9F9 +:10AE3000F17B04D8EB0CE31C93ED92F430DA1DB7F0 +:10AE4000A35D026FFB566D96303E386197645A7D64 +:10AE500022CE64313A6F43EDAD852CD103EFCB3375 +:10AE60008DC3B8CFC9B74B660BBB24DFFE408F1B29 +:10AE7000C617940693EC14B0170EE1BC82EBD21601 +:10AE80002A7FDB3ED93333F56D7CAE5E92261BDA2A +:10AE9000B72E99C3F755EDE6C31C0FFC3E833BFE6E +:10AEA000EA4DB2D7CA9B472D760AFA413366B20003 +:10AEB000FFFCD59CB6EF213F94CB0909E54BB9C106 +:10AEC000F7873D5A9BEAF4BB3C3281EF616C6FCC53 +:10AED000311FA7F5C1B2D2A7D10EB1D818E6CFDA8B +:10AEE00074B0E34ED164B615F969B6093602BC9F59 +:10AEF000B366AC1B431CC625BA074DC99A75090F2A +:10AF0000AB71D043C49DC6CF8DADE2FCB86336CBE8 +:10AF10006E90300E3816437EDC71D68BDA2A8C6345 +:10AF2000F5F2F7F755F1F7350363552AD637F1F700 +:10AF300036FC3B36FD3E666858F2FDF28EEE8CB470 +:10AF400008EA55B93F48F3005FAFABE5769E02C310 +:10AF5000B8E49D28B360CA3B84DF6AC77080C6A985 +:10AF6000BA95ED0F70FD2B615E9A14E07228D2F253 +:10AF7000A6854B9959395628BEB2633097C3B84A53 +:10AF80004D82E9B02698D63CCA902E3BFA72B42E78 +:10AF90004A12BA07E93517BBA604E52F2DCBC1B875 +:10AFA000A5036326B249492A974397407C158FD35E +:10AFB0004612FCFE97D2665EFF0F959F67FABDCAE8 +:10AFC000ED39BB1E1B18EB46BBAB04F814E57379D7 +:10AFD000EFA885FEE8488A255A19C29DA07DB9349C +:10AFE000A0537CBAA485C7A73FDB9263782F8174F6 +:10AFF000EB28C3F67307F873A957F7A03FCF86B3C2 +:10B0000032704BAF750270EA01EEFF0905389C768D +:10B010003D36901946FF86566DC399E3E3229C06A0 +:10B02000C6FFDD70466E1570027C04E7BA319A5790 +:10B03000551E9C5545F239BD018F2B2F7123B3BA94 +:10B0400037F37D04EDDF6329D57C01D763B541F685 +:10B05000B0CA5244577F2CC9F375607CB4DB9E653F +:10B060009E309D938DA51FC2767E3D6DE17B7F75E1 +:10B070003A887242658689FB07900524875AAB930C +:10B08000B94DE837D23D09BA5FC1DCC4FBD5399E62 +:10B09000C6FBD3A13FD28303137E732FF54F7EE40B +:10B0A0005630FC71DEB27E48C833114FAEE579DD13 +:10B0B0007254FEBD33CE3A97F1FAAC14D7AFB3B0A9 +:10B0C000EE8EEF4CD4F1BC5FCC51AF99788FAC4F82 +:10B0D000F9D8F9788B09BF96B98DFBD5C47C63A9E3 +:10B0E0004E86EBC41FE5F41F9F5F741C5FA61B5FB9 +:10B0F00026E92BC01343FAF997FDB155A276804794 +:10B10000419F3A693A78023CA39F09F08CF1E1092A +:10B110007CE91F095FBEE3E16BD9B4F125F54C85ED +:10B12000AF4E95CE05F95E98477AE77F1FDEDC715A +:10B130000259DC6FF1DF85477B9F997FAEE5CB013C +:10B14000F7B916FB1EAF62F913F6799671BD2F2F72 +:10B15000233FA0F2F24AF227805A4994374F9E4F7C +:10B160003178ECFC4279E39766FECA91972C8BF319 +:10B17000A78A9C64CE7CDC6F0ABDA118DE82F2E94E +:10B180007E211FEDEF71603FD2AD89E7371D7BC592 +:10B190002FF2AAB8FDFA684012F64B0F8D0FFBF79D +:10B1A00047030E3F6008F9C5288E8F7C3B7578D425 +:10B1B0004BFDEF32D42CFAAF7B3C46E053B85FFD39 +:10B1C000271E77D7C5BE6A014B79106F750CF4B88E +:10B1D00017F3E5DA298EB3AD2B4971BBBD5D1D5464 +:10B1E0007E2228158B33FD73A0609C2917C37C3AFF +:10B1F0002BAE92FDC490894F9F1C77CAB7DB312FCD +:10B200008BC70D552A3375FC9C459D9E68C3F90775 +:10B2100044DC0587C275A7683CEFF1D82B777490A2 +:10B220005FA4A27911FA45DE08F0FC54B3336162E1 +:10B23000DE4558E4DD7A6B8746D06E06FCBE817031 +:10B240007BB524E5A7FA4D959F6B14FEE0054DA94B +:10B25000CDD8CFA092E9E0F92A7F5886F74C0CA20E +:10B26000731CF4E6DB83913ED49B4866ACEBC130A3 +:10B27000D5F7097B83FEC00E5920EC107B9E8B8294 +:10B280005C6F9D8A17A6203EDFFFF043FF12BAD7FE +:10B290008AFE82C06718FF535AB83E092C68A8BAC4 +:10B2A000D281AF3F097D1BE8E2E7B676CD4E75242B +:10B2B0000BBC5783769E9E8D27EE17525E3E8DF017 +:10B2C000C1845F47A95D621E80BA0A0633D6012F8A +:10B2D0006A10FD499D1C2F61C00BE2CDAF1D3225C8 +:10B2E000E6981796B8BEE5F4665C6F3B61A37217EB +:10B2F000A6EC060D71CF43BAED71F46BBEA199981F +:10B3000087B2A0F6AD4DACE423C133D38687E2DF2C +:10B31000224FC53EBF638FB70F8143FE5EEE23B958 +:10B32000BCEF661FCFF358EEA3F5F511C63D692AB1 +:10B330003CD8F473D0BBCAE9D74A083A3705C5BD33 +:10B34000164CAFE2FE893CFCC177742F9AACF392A5 +:10B350001955CEFDDE4ED1FF60D7C699BF72E4B15C +:10B360003E1314719C80796610E78F8B0FD7DBF545 +:10B37000E21E24966BF572BF24D1C5AECF5CC788A0 +:10B380001EEFBFFA34D5FF7D23A3BCBAEDC11A82EC +:10B3900073FE3D962BCE6F7FA7E0F93AF82E0BEBAC +:10B3A000B31BE02885B134D86F1A29ABD5003AC455 +:10B3B000D759B4BF2ADFC0EDBD5295DB6DFD8BC7F9 +:10B3C0003AF0FB5176BD5FFE14ACCFC5EC5369F883 +:10B3D000EEEE6090E777BE2789BC8A1CD9453BFF1B +:10B3E000DDAE839D046532C1ED58AD9ABFDF51C11A +:10B3F000F30F9726F87CFDCBD87E74B1CF16ED52B3 +:10B4000002EF97215F60FC6FB6D186FD9426F4CDE4 +:10B41000F8BD3F36BF0DE1D598BE19D75964204716 +:10B4200076AF3F9572D9BD5A8CAFBF4835AF5F1D1F +:10B43000E4EB6ABDE8DFAEFF4835AF463E292F6238 +:10B44000A7DE28D661EC9E88D003BA74A183BE9F84 +:10B450000FFA443FC99B918E35D9B92487FDD55C3D +:10B460008E6A02CF9A9A6698DF512AE02955D394C2 +:10B47000771CB1CE5F4EF73656EB77F69D82789506 +:10B48000693C2DA15F84F9B25B2A7C09DC82455AB4 +:10B49000F43B2D78BFB3E24ABAA7AC7FF685B49FE0 +:10B4A000EA13FCF552858FFC0EBE65E987505FC438 +:10B4B000627AF7BFE2FEDDA653AE4AC27D4E9FB868 +:10B4C00017A854D6A519424E69B0AE33621D2ACBD7 +:10B4D0003237E2BD784AD3682B9EC35400B91B179C +:10B4E000629C4E956E2AC3E763AD280766825DA411 +:10B4F000C1FBBB03A93D386F16B55C793333A39903 +:10B5000056ECC7E6B70745FF36DEF2F9742FB6737F +:10B51000F8DB8CD41843791CA94E51DE2CE2B12102 +:10B5200032F1FE41B17E34C1A7B114F3AC77D06FD4 +:10B530007BD02FF6173AE5954EEE3F49FD2BA27FC3 +:10B54000C447A9E3FB6F093E29357D05F9E2AB82CB +:10B550002F8C549AE1FD447EEC074A73434E42BF60 +:10B560004BB8416F4439376B43B61BFD0AC16A9D26 +:10B57000FCFDDF15DF757ACDEF22DEEE0E98DF439E +:10B58000FE5B70CF48F73AA1E7508F0D8F5EBE3952 +:10B5900080FABF19F653F0DDAED1791136851F74EC +:10B5A000CE4DEDAEFC83F9F7245DF92F55A90ED7EA +:10B5B000FB8C1DB7167ABDB83DC2F5FAAC80398256 +:10B5C0007002BCCF62991171E1DE2ECB25D77E26A9 +:10B5D000E657A79B26F2E9BC68D2C2F21782FE7535 +:10B5E000206FE8F9BA4C3796F26ED3C4F5AC6C4DC7 +:10B5F0005A58C676737954B535D38D655B20F92AD0 +:10B600008EA7E86E7E01385EC3E7602705506E6442 +:10B61000103FB83ECD68413F603E7E6CBF6D4953E0 +:10B62000D2F53C1F4FC5FACBB7D7EC7CF8CB9A8547 +:10B630008E60C6A730FEFF39716FDA0D8FEC7B6A22 +:10B640001FA0FA86D361A799C07375F73D8579D39A +:10B650005E534DD2B91F96790AF3A4D7758418CFDB +:10B66000FB4C96A03E798779DA11CFEFB0E74A1606 +:10B6700039E85F12E2E744D880427E5B0BFE87EB3D +:10B68000EE8A8CE2CAEFBD6AAFBB7E255B5D89792D +:10B690000257EE5618E6B17E2E2FCFF04F42DF5DF7 +:10B6A000C5D2FDE88FEA137924D77CE7141FEAEFAF +:10B6B000CF2DD2E3E847B2E1A80CF175F216AC2F1A +:10B6C000C33FF17CBD96F5613EC3EB0F2FBAF04C42 +:10B6D00086FD64FB6736515E1CF99BF3F178F980B7 +:10B6E0001BCEE3CD231F6EFB3C6E3138E48312C9C1 +:10B6F000DDFC716B4392EB5CA9D596A67B7AACCD51 +:10B7000032C37DE21DA1DBE81E9F8D965F47FBFFE4 +:10B7100058604E16E55F4BC8B0CF519CC6ED027E17 +:10B720006FF274BF3743867DFECAF5FDB6E8481256 +:10B73000ED79FBDC7348CDD21C2599DB4BDB62C76E +:10B74000795F3BF5FB63814B2BBB012E436269BCE8 +:10B750001FE478F714D57953E7852AF0BC6DE652DB +:10B760001EFFE3703236B602EF81F1B3123AC7ED35 +:10B7700017F1038A2F90BF269333E3E87F76E79B88 +:10B780008770DD413FD7893C9850BDFB7D7E9CE1B1 +:10B7900072419F16B040703D94A85A8ECE3136BB90 +:10B7A000EF8DB1E979438CFB8F8BAD570F530DD0E3 +:10B7B00019E40FFE90FCF3BC6E8F7F3423B523BFDA +:10B7C000DF008A63E34267BF767C3A2FFEFA01BC52 +:10B7D0005FC2AFF6E3F849C4103F035D8CEE71EA37 +:10B7E00051929FA17B8B7EE2C59C4ED653CAFDEE43 +:10B7F000D66C9E07E5AF4D46705DF95FF0463D7132 +:10B80000213AA0DE5FD57E3FFA076E0EF17C352629 +:10B81000F3F3997ECD3231DFA65F49C5505FF96EF3 +:10B82000E3FBA9562D95C2EFBCB10E05F5FFD35F22 +:10B83000BF9CCED9AF8FAD90D1BEB2443FEF3C7428 +:10B840007809FA3DFBBF11663994FF72D6877A6595 +:10B85000FDC35EB297AEFEDB308DBFFE5B573D8809 +:10B86000FE5BE93B67196F92DDD3C3EDA7BF3BFFDA +:10B87000C796980FFA5B7BBA851EB11231CCFBBE1E +:10B88000C6CF3E8BFAD49EBF8D3FD5C850FC74FD09 +:10B89000C152577C75BD0CED517F42B9BAD03E5CA8 +:10B8A000C897B7C3DC6E940E0ED3FD2EEB0FFD1FB1 +:10B8B00005E72555A7D91B30DE9D21C56E47FB0640 +:10B8C000EB6F24F2B7BCFD37FB7D98CFB6FEE07E70 +:10B8D000DF65649F737D66C3A91EDC69A15C526B42 +:10B8E000F51ACC235BFAB7DF2841FFCDD57FFBC724 +:10B8F000FE339AE87E8DB155B00EAE3BE8A57CFBD9 +:10B9000080E1C9BB8786DF9F792DFE13BEBFFADBBE +:10B91000FFBAE2E7F0DD5B20F703204ADF1A79C3C4 +:10B92000F73DACA760C383FD3CEA9663D71D7C9DC1 +:10B93000EEBFD03D6CACFA4CD473EEF590DFFE3D1B +:10B94000F6810FF71DD71D1A24BFCF750FBFF33334 +:10B950009427D7E5C9C3B7F01F05FC34FF1472DF85 +:10B960004FC30E964FCB1F71F537DEBB17EDCFB728 +:10B97000BFF5FFEEB5008F1BFEF4BB7BBF88FBAFAE +:10B980007F08E828CFAF7BE88D7BBF00F37CE751D1 +:10B99000BF07F9E2DDC7BEFAE05D507FF7A70B16DF +:10B9A0004A507F3DC4EDB5770FFFA112F3D56E7AF3 +:10B9B0006CF90CE4BB9B1E593A63AA7BACDE053ED6 +:10B9C000CAFA9DF064B9DDF5A884C9217891222FC7 +:10B9D000F3E8F0F6E1633E5C67BF97D818EAAB6B1B +:10B9E0000FFDD187FCF794C9C6102F4F3CFCFA53CA +:10B9F0005F80FA3B40177F01BAC0BC6779E8DEE898 +:10BA0000DC2CBC3FFADA87CFFFCC594D582A09030A +:10BA1000E9C2C6483F4EA2E70B40CFA6097A16A559 +:10BA2000DFD707E99CF57587807EA74EA6DF3BF838 +:10BA30008FD327D3CFA3B9E9F71EDB701FC5961F9D +:10BA40002E2F68A7D87EB66B1EB960CA7BF5DFCDF6 +:10BA50005BAFC5F0DC29FC4E3F0E9965DA62E487E6 +:10BA6000AF3D785714E9EC4FAC42BA7FE3BD39687B +:10BA7000C4FE5A19BB14F130F6985F3F00DFAC7F6B +:10BA8000EC5F480FBFFBC8B33E83EFA34B24909BF2 +:10BA9000EFB2F1BFE7705F7DAD70525C73FF7FACBA +:10BAA000F8197C7F0D74817E50A01FD59F32F97DDF +:10BAB000DED766CF6B37E83E980A9AF7B559BE1EB7 +:10BAC000AECD0EAFC17B7FF3F17E8E66FB5326E8D1 +:10BAD0002A35233D5F5D81FC578C9EF6FC759CFFEB +:10BAE00069F0FE7EF77A9DCC37633E94FF367DDFAA +:10BAF000DD7FCCF773689FFB9E4FF79C017565CC8B +:10BB00004776D061AF8EF751E5D31DFDA66BC93FD7 +:10BB1000B6B9609E7B3E3F2CD3F2FCAE021FC75BE2 +:10BB2000CFC79FC789E1A949335CFC62E3ABBB8AFD +:10BB3000EF4BBD253EF263F62BC6BFE07E77EC19D6 +:10BB4000851D804F7A4A9650FC2D1FCE5EB4E31CB3 +:10BB5000F72DCB5A92EEE591A3FA42346DF2F32E13 +:10BB6000149888E180C71F1F4BD23D3EAD1E86FE54 +:10BB7000944CCB5806E1C82CF7F836031CB2E063AE +:10BB8000FBFB3BB579FC9E14D3E79160BFBEFDC8BB +:10BB900072924B19453F87F4F7E91EFD407C329CB9 +:10BBA0005B34717E73632871FFA2E2780F887CF4A6 +:10BBB000EDCD37105CBED9D1523C1F3C385CF50C42 +:10BBC000FA014ACCCA38BA901F10FDB1668DBDEE9D +:10BBD000F2C3733802CB3C981B00E395D078C7833F +:10BBE000EF468DDB4F818D81C4FD53D8457F6EF8C4 +:10BBF0006C3C6E46BE20FC6834BE8D57BC4FA135F0 +:10BC00004AE7CEC7F8FE27C96E8B528A379D7B93D1 +:10BC1000630BE9DE25E4CF08F7E77D45437FF0C3FA +:10BC200049D379DE2DA8A773F8F5B51ADFB744021A +:10BC30007A00F993E97CDFE64FC9948FE34BF1BCBE +:10BC40009CFC75E053C646F01C7949AD87F21B4B4E +:10BC50005A64EEB7157185C859E924CEEBDED9B523 +:10BC60001EE49B5F695C8FDDAB8C0E5C0570F47726 +:10BC7000478C034D382F85B68A3755B10398F7693D +:10BC80008F3B2AF0EF631ADDA7E11378B85D32EE3F +:10BC9000B804E5C05F7B683F5473A4F4F16A288D53 +:10BCA00091DFB6CE86F22DF1DD82971B3D73A03E6B +:10BCB0006CCBFD456C11AEF31B06D24FA32BFB865C +:10BCC000BFDEFC34EADB1B7B4D3FB2FF7DB7AE76B7 +:10BCD000C9F9C9F96FA3944F1CF9EBD70617A0FE59 +:10BCE0009ECDF3DF181E729F526E740BF999B05AF5 +:10BCF0009B287E3026CE27B2DB9AF8FD0158F7C686 +:10BD0000DA18C6CFF41A398DF7699B5F4F5A0BB812 +:10BD10005F83DA031D7F8E740CE959A29B1215F71D +:10BD2000386172F334EC10D821931DFCF742DE4CDD +:10BD3000E095AF07F6C4E7724B895FD531B4BFF227 +:10BD4000F9F4EF059FD8FC0092CB7A0DE3499242BB +:10BD5000F6BC8DEF62707CD4F2812E66BD46E7E7BB +:10BD60007879379675441F2A33E2F9F877B65C176D +:10BD7000F44607DB6B4060692EDF77CCDFCDEBB696 +:10BD8000BC8B3447691E76BD7A83BB6EF38B3F96BE +:10BD9000F75CF04FA9E97E9ECF4FC5F8687023E7A6 +:10BDA000233B8F72BA7C443EE28AE9D33DFF79CED1 +:10BDB0008E1FC7781E951C1B18719EE35E5F955CF5 +:10BDC000105E4CE7B829AF63B86A3E9D832A167FA0 +:10BDD000EBED3AD8E83CC765EB175966392FFA3DC9 +:10BDE0007578EFC0CF783E68C2CE074D76EE8FE211 +:10BDF000F9E34A8A1B87F46FC68611BF8D0B2F2A81 +:10BE0000743F41F1F539427986DBB4E7DAF13E510E +:10BE10001BAFDB9A8AE6C72E0D3BF4607E5EE6D64A +:10BE200013CE8F15E367F2C72F9A1F7B7EB862C2CD +:10BE30000F9D3FBEA937D0FD7A33D3FC3CCB1561B3 +:10BE40002ED766B3D16E85DB7A49D591AF34F792A0 +:10BE500091AA7F34F05CC28B71A45B84F5D27978AF +:10BE6000D03A4D1F4EA15FF3CFC32BE2FC586BEAD3 +:10BE7000FEBD786FCFCC74837D9E868F876343FD34 +:10BE8000967178727FC02B4CE7B031FA7D1A23A9E6 +:10BE9000B76148A6A623F1389600CF49FF95F3F97C +:10BEA000E3FCD2649F4F19519DE77FB6357D3C7905 +:10BEB000C303627E5768E600F2493E7DB69D601E70 +:10BEC0006CB171F3F386EF084B76DEF01DC81FC727 +:10BED0003D9730CDB8F81DE797907F427D59227B82 +:10BEE00072E7F925F4BB507E164C60DDAFF1F30C20 +:10BEF000B7CC6489CD405F658D8519F678CEFC217D +:10BF00009C7FEB2FEEA4DF7B198CA7E7E2FE739CEE +:10BF10002ECDEE7343DBF17C797CE27CF9FFB63CFD +:10BF2000E402E7CB9F72CA8162E7CBBDE15ED2B784 +:10BF3000EA09E6FB46CBCD46FABD0AB67B25FE3EB6 +:10BF4000857DAEFCA7E1F3566A786E1C1D6033193F +:10BF50007B65DB9E2D180F89CE320F63FB9B4BBE9A +:10BF6000BC328AE7CEE7F1F73FD80EEF35CC3F354C +:10BF70002D4CE238396270FB30E57B15E577A096F1 +:10BF8000E7DFC21E6F54B2FD6A06E529BC1676E4EF +:10BF900029D8F1B5E578081AE875B496113F14C3AD +:10BFA000E3DDE25C38DEB38E7909810DFC1E82DEB2 +:10BFB0002E9DEA435D312A777419D4EECE2E93EA92 +:10BFC0008FC8C931E4DF402DBF0F64AFF0870FF891 +:10BFD000F83D38CF893848BA84F3FB44C9EDE42AE8 +:10BFE00091079D69BB387299835E74C1C662279DB3 +:10BFF000EBCF7CD241675F82DFDBEC8FC173C7BAC6 +:10C00000D1C4BD875B378D31BCF73092FB0343FF52 +:10C01000564CF4B7B3AB93EE6BEC6B7CD3443EEF72 +:10C02000EF4A53BD44D687318ECB96B146CAF756F8 +:10C030000D5E6F17752D95433B1FF0CEEB60575388 +:10C04000BD1AEA28FFBA36BAEE812C5B06E338F453 +:10C05000A1DA62D1BD36FE58DA752F64C0D8E86A1D +:10C06000173F7284F292B7C4189DBBF4E50655845D +:10C0700023C0C23AC6BB06AA1F7F2902E5D1669F2C +:10C0800081FCB17D53E173CB78BED9F97B3C8158FB +:10C0900026C7CF83A6287FE44E11DFF2C73C79BFC5 +:10C0A000C3C01A9F447FEB9179A40F3E29E8E54F66 +:10C0B000703B629C3ED503678DC7CF6A500F65F811 +:10C0C000EF972D5E47CAE86E29C5D6A27E8CCB7449 +:10C0D000AFF4AC6B3BE91E8EC07C99D1FD44AD1B27 +:10C0E000627847DB492D6316E6510C18B514D789E1 +:10C0F00034EC598DFE9E48E2A135E8B78B44BF7FF2 +:10C100002195F54F7560797E499CE089D4BF7431E3 +:10C11000B5AB7FEB127CAECDB1EF3149D23D267D80 +:10C1200046CD94F7BF13908EBC32BA51C4B5BECB86 +:10C13000F2EA33F3DAD7E4BDFF44DEFB85AEFA70F2 +:10C1400023B7AFB64985CF1DA7C4BC022D604739C0 +:10C15000F8C3A71E6A74C7E576935D37379C4A9586 +:10C16000607BB10E02B5FCFE1085654DCA13EB7CF9 +:10C1700030D78FFC6BC869BC8748E9CC32CC57926A +:10C180004C358DFEA1607DD2C27C8688CAF3239493 +:10C19000CE8449F1EC4ED3447C2A9D49514F51F94C +:10C1A000DDD2D4B5389E7D8FAB2F364A72F2FA12AB +:10C1B0003BFF6334C6F33C46C9BF1F909759B8CFC5 +:10C1C0001B975FCDBE57399CE3F2CBC278A0437E6C +:10C1D0007D81E623E4576935BFA769BAF26BA8CB26 +:10C1E0009D57F5889CEAA5FEEAB91C9B904F39CA79 +:10C1F00077DAB7FDD32BE5D3493ED17D1ECCFAF4D7 +:10C20000168C1BE07575581FDABE72A545F64C8674 +:10C21000F2E602F51CCF80F71D25E82FD0F9BD7C92 +:10C2200036DE874FE2F707C2BAA47B7982420EE579 +:10C23000C3996F47CBF54349F4D385841C9481FFA0 +:10C240000D80F7DE12C365D7E7DBD7E37866CBDC7A +:10C250007A220FCFC31D9E69E14FD1FFA6519EC226 +:10C26000FF01F8FC26CD3BAA5A2E7C0ABBD696F3DA +:10C2700076FBA74AB83FD12EE3470606D0EED80298 +:10C28000720CE3617B365947F0BE62DF112F433BEE +:10C29000C497FBDC4F234D04BF1140FFC8261E0F7F +:10C2A000B1AAD82194B73941872D28D7FCC8275C7B +:10C2B0001E813CA373197E23350F49B7BE2AF5644E +:10C2C00009D747B4AF51AB1DEB1CFE7BBAC4FEFDD2 +:10C2D000A03C7E3D0E1E815F53CCAD6F470AF16BD3 +:10C2E000BEFEB3F1312FC2F58F5D629EE0E814F619 +:10C2F00012C6879C7CA21AFC5C48B1F6C39FFF045F +:10C30000C9977D45EE3518EA023942F7BF1C6C74B7 +:10C31000DE17F83B2177EC7AC89764E7613F81C26A +:10C32000FD1C157A3BE41B4BF17B1AB83DA8C4F801 +:10C33000B97EBBDDBF0BBD61E79DE2EF306139DB4C +:10C34000BE77A28195E99F9C68EF1178991D74DFF3 +:10C35000B362975284F35128E81ED76FB8C7F546E9 +:10C36000EC71F97931B48BB1F445391DFDE84FC159 +:10C37000D21833913FF6DDFCE2DA2D51CCABAC277D +:10C38000BF69C867E5302ED2B7F964CF66785E2AF8 +:10C39000FA33BFCFF8F9D37AFBFEB2F1FB014B239E +:10C3A00028170DEBB7FC9E4E9E5F69D321C41E6615 +:10C3B000D73BE63343F467E337842267E1045E4208 +:10C3C000EC5157FBD9A2BD8D1768BFCC5386F70A35 +:10C3D000B8E541ADE0DB507DBEBE38313E3F39A20D +:10C3E000DBF9C624BF15D1BE316C36441C79005B25 +:10C3F00092B7D2396DF3FE948571EE704AA3FC4179 +:10C400009FF83D445F6CFC3E82C5881F7FB5F8BD38 +:10C4100003075D9CE71BEC7BB47A1DF768C5D1BEB2 +:10C42000FAF3DDA3B512E138EE3D5AF5EE7BB486A2 +:10C43000F2EED11AAAFF78F639437FBE7BB42E8F75 +:10C44000544CEE3F7F9FA36AF7C7AE6427BECF610F +:10C45000EC10D12FFA49F3B71EDAEFE456E23D773C +:10C46000D105E661ACF76CF9DECA76DCEF2C127A06 +:10C47000953DBE12F56AF4344626D4CD9127687FE7 +:10C4800073B8D4FC3CF2D30E4C0C067837097E947A +:10C49000B5110BFD1E332EC9115D4C8D9FAF873D2D +:10C4A0002CF9B3EDE78B669BB7E13C7744C4EFE131 +:10C4B000C4BF4EF7C1D8FD5845BEBB4B37FBF8771C +:10C4C0007CDC8F70BFC68E8833AEF2B1DFAF91A433 +:10C4D000F3D87DDAEAF6B8C38FD8172DEAEFDAEF92 +:10C4E000A4FF7FFD7E0D317E267FFCA2FEAEC35CE5 +:10C4F0004EF03C7A55E8CBA193FAE977F98A9D8B07 +:10C50000BE51497DD78957D5C8BB4F637C5D665DF9 +:10C51000BF3370A2EB31BF2CE617FA4164DC2FF475 +:10C52000834801BFD089AED762E3E6FB857E363112 +:10C53000EECF0A8D5BEC7E033DABB7F2DF28CDD2A8 +:10C54000F7B79BAC19E34BB7AF3ACA7F8718F767C9 +:10C550008B310F94F36B31B886EB964C6997E8609A +:10C56000272E2BC778D5B71B9715F037EA6DEDF559 +:10C570007C3C0EC71D0B4A24B44B74CCFF2EC077F5 +:10C580000D7FDCFCF8C918C75AC6F56A69ADAF154E +:10C59000FD9137FE2860A9317CEEF6BB476F8D9F79 +:10C5A00083EF4B851D19DF1B6BC57311991F062C7B +:10C5B000DC3FFE2772664C6A008000001F8B08007B +:10C5C00000000000000BED7D0B741CC5956875CF55 +:10C5D0004733F268D433FA78461F7B244BB60CC23B +:10C5E00069D963470219B7850CB21130D8064CE2FD +:10C5F0000D63B083D8E76405788392B5332D630B60 +:10C6000049D667247FB00921E31F3109B00ABFC3AF +:10C6100066733823E310939045B0C0429ED908C793 +:10C62000614D96CD2A06126FD609EFDE5BD55277A3 +:10C630007B643B0F9277DE794F39A15C5DD555B7AE +:10C640006EDDFFADAE618DF9FA710FA3BF8FCB190F +:10C650001BD406DFCCCA67EC94CE224C622C92DE4F +:10C66000F3666E94B140B33BE22D636CFB2665B17B +:10C6700013DAF576367410DE293BE0F1C62E616CD4 +:10C680007F022A593006FE2D82F77A98EC85F766EC +:10C6900024E333E408BEC7560DF918ABE89119AB93 +:10C6A00012F3319CAF3C97C1F3B2213E8EF1BE51E3 +:10C6B0007ED271EDE34D366EA04791C4B8F31C34C1 +:10C6C000AE72781BAE73899C3A286518BF11C6AF4D +:10C6D000BEF0F1ED703396626CFE44BB7D7CC6D239 +:10C6E0000CF1E16B95DF71CD81B2FEC304C392D52D +:10C6F000B71F37FA95E17FF9FEBD5E2EB38F1D5847 +:10C70000D7192B60AC8D310DF1B2C5F3CF8527F26F +:10C7100018737AFF67E189798C39602D2C0CCF5D15 +:10C720001C6FECCCC78EF402C67AF05589EA1F7FE5 +:10C730000CF52D5887F16F50240B9C46B94582F7B4 +:10C7400061FD5BBC6CD51319F0703DBE07706CC900 +:10C75000E1FDE80FF0E95322FBBACB26FADDA0C8D1 +:10C76000343EC2A115E2FAC41FC09180BA13FF4D36 +:10C77000F84A166B803F6F094BE1FBCCB99BA56172 +:10C78000BCECB8AFB55BC5E7A9F42668678AAC5EB8 +:10C79000510BF52AE76F474DF8CCF23015FB67BD1A +:10C7A000E6500143384EDAEBC7F9783F82A72CC335 +:10C7B0007BA124437ACFD258AB1E4078A0DD63EA38 +:10C7C0005F92D2705D0063EB15E1B3DF6762FC72CC +:10C7D000ACC3FEB41D5B933AE29968BF4BC9C97FF5 +:10C7E000770AFCE3B3ECB3B47F8ED5B97144820F02 +:10C7F00006AD3B1BAFBF4BC453472A27F6D903FFF7 +:10C80000C3F98BA31C2FC5AFBDC12AA2B47F638E11 +:10C8100010D6DFD41B112F9A6788D562FD67E919FE +:10C82000D0BFACD51F91A9FD58FA0AA82B7FCC65C3 +:10C830002C24300FFB5F82FF9A01ED4D2FB4CF8087 +:10C84000F76B609BB0BDB8A9F67627E0ADB8B564CC +:10C85000426EC0FF731AAD75033E03EED96C48C635 +:10C86000F166373DB599E693993E05C67B44DBB743 +:10C87000AC2232316FB598D7A0C3595807BC049683 +:10C880001CD98C705C0464E55027F86776FDE1AF35 +:10C890004A73B004FEF0138CA3F28209BA31E8FDAA +:10C8A00077A5F19402FD8B57A5865DB82B8A2221CE +:10C8B0009E7B5C823E7D51EAB7C4519D7B3C83DC0C +:10C8C00060AC9DE6FB3EF0B513F0FFDD8487396177 +:10C8D000A05442A17A3211A27A672242F5871255FA +:10C8E000543E9850E9F903895AAAEF4E68541F4CF8 +:10C8F0003451FDB1448CCA4712ABA8FC76224EE5F8 +:10C90000C1440B95FB12ADD4FF078936AA3F9BD0DB +:10C91000A97C26D149E5F712496AFFFBC46EAAA794 +:10C920001329AA3F973844F56D89212ABFFFDEC33A +:10C93000FB2558E2A911770471F25480F3FFA58713 +:10C94000D5E2E5A6F576243A17E2FB467D383C337E +:10C9500077F41C72B43771A8C6DCDF7F7244FF27FE +:10C96000D8DF3725D68AF4E23F99BC19F7C5AFBAAC +:10C97000D7A0FCF247A1BF894E3A60FCF839E4E841 +:10C980009604DB631EDFF9BEAC67C1783F57CA6807 +:10C990003F9CEF3BDFC982715D0AF433F1DD93ED1B +:10C9A0007C5FEDE3FD5AC89BE849F55E3FE06354C8 +:10C9B00006E6BB1CDE1F89511D240ACB22E28FA58F +:10C9C00091059D11676BB782FD635A0EB4C71B3C7E +:10C9D000ADEC52787EF24696837C0FF2270BD6A9F7 +:10C9E000BDA4E96BA09E23FAB738E2BF467ACB62BA +:10C9F000439A5486F49662486F4EA6DDEB877E4FCD +:10CA0000EAB9F16E182FAA2D7728F0BCE1B5D894B9 +:10CA10004C787EFAA58629F89EC2D429A80F9E7A62 +:10CA2000E9DC7A8D31F7841E01BEF99143FB03C224 +:10CA300071A9CCE2B8DF3D09A61FAF24BCEAC7014B +:10CA4000AF95010FA76B97A63180A7E3A7726A5F26 +:10CA500019CE2B4B587F7A444E21BD3C3D72EBBD25 +:10CA6000B8FE532AABC1B187DFFBCAF3B8FEA7A358 +:10CA7000AC06D41C3BFC1AB443FD2985CDCD02BEC7 +:10CA8000FBEC318DE4A2EBA5F29403C6CB51DD287B +:10CA9000ACC6F7E7A997965F8DE33FF59A4C3CEA61 +:10CAA00052ACED875F13F3BF24A7B2A489753B9DF9 +:10CAB0001AE1E1E991E5841763DD8B51D99ADE5FD4 +:10CAC00074DA3ADED32F9D5B5FCF3DE2B6E85FF5C7 +:10CAD00007D6F79D8CD3C793BA5FC37D9B3F723552 +:10CAE000DFB7112DE3BEC1FA2CFBF6F44BCBCFBB65 +:10CAF0006F69EBBE4503203FBF5F1A678807D8A266 +:10CB0000B1CDA07FE62B71FD71A253D67A10E8CC8F +:10CB10007DB233867CE53E99D490CFDC2753322F0B +:10CB200041DECE99D86763DF8DF96E0970FEE93872 +:10CB3000997662BF8ED061CF1A1F8E0F7643063C66 +:10CB4000C5025924CFE77B787B476839F59F184F9A +:10CB5000B2B72BB75BDAC5FB28988B18FB42E0F124 +:10CB60004E1DFACD0F713BA523F4AA674D7586F1D2 +:10CB7000C6DB0F2B7758DABD04FFFC1263BE579556 +:10CB80004CEFDF1250A8EC083578E2344E83427C3B +:10CB9000E8847DC9C17D02FEAA3E9BBF9E7FEF4A0D +:10CBA000DAD7A780CE709F0FBFD640F48CFC90558B +:10CBB00036417FC827123CFF089EA3BD64A7633B94 +:10CBC000DD3F195169BCEA4761BF4DCFCB746B1D86 +:10CBD000C6277A7D2AA2517FBB3D10D0ACFDBD1186 +:10CBE000DBFB82DE8CF9ECFB39BDCDDABFB4F5DCC2 +:10CBF000F3DBDF2F6EB1F60FC7FFB4F9F39AACFD8C +:10CC0000E73C65A27FD3FC93F1CB4507ACFDAB1E9F +:10CC1000B4BD2FE67F0AE7CF30CECC1DD6FE333A27 +:10CC200033C33FD9FC0BC7ACFDEB46AD75C3FE99D2 +:10CC3000CC8E9BE07BDE6F6B6C756C5D04F4C80181 +:10CC40004D473B3507ED5A05DB357D344AAE44EBA5 +:10CC5000032AEA9508D77B429FB8F28758BC7A62CC +:10CC60009C07EA927B1CF0FE28DA92A0D7BE5537CB +:10CC7000BAC701EF6B8E5CAA3F583744F594C34F97 +:10CC8000F5AA1FBC4A759F9EC350AE559F39AE7F13 +:10CC900011ED333020D1AEF6AF7D41FF22CA9B2685 +:10CCA0002FD97FFE8DEEC5D8FE82516F7B21BD1F2F +:10CCB000DA1B5EF2EA685FFA5BDDC358BFCDA8AF4E +:10CCC0009FF9168EBF45CF25A35251C15F31E13D7B +:10CCD0007FE33BDAED38FF0E99E17A7D1B0BA9FF6C +:10CCE00072B437EBD1EFE926F8EE9659AB07ED5366 +:10CCF000D5EAAF3AD1BE03FCF685D3AB62808FDDB7 +:10CD00002E5E1AF8FDCF00F75F8C12FE8EE4C3781A +:10CD10000E612FC380DA5A580F9AE0DD6457AA3AA1 +:10CD2000D6B371FD008FA3BE730451E5A8CF7EC7B3 +:10CD30000172D2B1B6E34E94978E965D7753D9F6D1 +:10CD4000F0DFA2BC75B43E730FD5D7BFF055AA6F04 +:10CD500078E3EFB0043BE03F0330AF63E3BB9BA855 +:10CD6000DDD74AFBD5C694CD5D683F3472FFF22112 +:10CD700069EC642EFA9B9BDC91830057FFD7475FD9 +:10CD8000DC9F8FA2B254D90CE5438DA74E66A1FE5D +:10CD90006D025702FA17A5BDA4178A9A94BD5E9337 +:10CDA000DF5684FF86BD0FA6C30DDDF05E706D7982 +:10CDB0000ADB7BD01F0563BAA82525AD0139F72D05 +:10CDC000E13707D5C862C46FB009FC5E5CBE924F04 +:10CDD0007670B025D2EE467F2DCAFDD56F488A4CBD +:10CDE000FEF01D002FE973ABBFFAD05A800FE306A7 +:10CDF000EB410AC27CC5E9FF22788B9B95728C1BA4 +:10CE000018F015237C60DFE709F8F39A237BB1DD86 +:10CE100080AF78FD90B4266702BE3C5525F8F29AA3 +:10CE2000397CE3F263BD3A6C86EF41E18F9E055792 +:10CE30008B80AB15E082794A102EA897ACB7C2550B +:10CE400022F0568C70A13FB5DE0A57496BDA82B7E3 +:10CE5000627588E02A5E6F85ABB87548CA32C1F545 +:10CE60004D49C411EE9C046FAD023E9DC31711F0F5 +:10CE7000453658E18B08F84A057CA51BACF0457493 +:10CE8000269BE12B554708BED20D56F84AF511C92D +:10CE90006382CF1E87B0C3373CEAD051BF7557308D +:10CEA000D27BDEC0C9B406EF758FEEF76492CFACCB +:10CEB000C23936EEFFA2D3CB9CC7B12EEB12FB18C2 +:10CEC000FD3F96F4A09EF5E373838FCB70FC86A99B +:10CED000DCF9E3FDE9B9E3ECBA318FF3741E4BE5FD +:10CEE00099E5285F07D8870CF58DF37421B50FAC51 +:10CEF00078E830E2C15BC5F5B6D7371642F9B0B372 +:10CF000094B1119CCFC9BC38EFFD2BFC5DE5D0AFCF +:10CF1000EB1517CA5A36BCD0ED457FA95BF2E8483D +:10CF2000C7DD95BF0DA13E981D4A79CC71AAFED9E7 +:10CF300073494F2511974504A686726F1BA87DF48F +:10CF40001350307B00FEBC72A37DE5D2169083BFE8 +:10CF5000749BFA437D70A2AEA3BD90D760D4AF5D41 +:10CF6000DA02727030DBD62E4BA27E3D8DB755862D +:10CF70007580FC6A1FD4967A401EFEA3AC9679A0F9 +:10CF80007E89AE75352E3C7F7BDE12672C95693F1E +:10CF900031920078CD3E1D66A979D02F988CC7A01C +:10CFA0005FB633C582A6FED9A74B2CEDBD40971ABC +:10CFB000D0E548932C1D87FA8E2097BF8A96D4D14E +:10CFC000AE9AAEA5A8F446C734C46B76ED589AF66F +:10CFD000290A021966F5568C929CF44765A699E8D1 +:10CFE000D1B9516F61E467652B28BF739AEA291E96 +:10CFF000C1A226BD52CED184FA30FBB497E8C00E50 +:10D0000077773062A1FBECD33EEAF7E7EF3F3B23B3 +:10D010001ECFEE5F4DFDC6ED08A6DC8C7CD8A3FBD1 +:10D0200015D4D3531C43A34F92FE8AC84BA0BE2DE8 +:10D030002CA7BAD18F92F36E5E8B789C93ADEE8362 +:10D0400021978665CBBED6E5CB345E5D3EB78F7348 +:10D050008E8EEDC6D0474A7247D834A8B3B1556812 +:10D060003FB05AB77A10DEEFC0F821C0E1C6F82110 +:10D07000C07FDD73231AEE133B2E51FBEFEADC7BFE +:10D08000D640B5BDEE2BB3703F23F9D67821FD2DE8 +:10D0900020AF9482606D2CAE57E3F89A6708FD17B5 +:10D0A00056D1AA2D867A2FF837A86F9F981667CD8C +:10D0B000307EBF04FE0EE9E35686FD7BB5D018EA4C +:10D0C000674D35E24C303EC883FE409CE27EFA9DBF +:10D0D000FE08F94325D638546F1363C8C7BD4DC148 +:10D0E000148820168BF07609DF9F71767F7749BD13 +:10D0F000C53E49BA527A1EC5BB6576305FAC07CAD9 +:10D10000C14821D90FB3E689F82B93D9C740EFC99D +:10D110009C91268C53E92FBA083F5ECF7F13DEB671 +:10D1200094A67419DEEB00AEDB0C43FCB09CBFF799 +:10D13000C300976B83A188B706FD186F7CB704EB1B +:10D14000D8B3E3CAAB9DA087BB5C82EFF5FA651A42 +:10D15000CA991C4D7542FB9920D31A4B103E2E677D +:10D16000BE9CFFF52EF4A73C32AFBFBAEBDB57EB0A +:10D17000B01FC3EF642D46787B4B19F9D1BD6F8783 +:10D18000C368370E8463619493592B3B4624E49F14 +:10D19000122BFF4C71245721DED8BD3E05D7DD91FF +:10D1A000606A05CCE5C94AABA8873A9C1C0F1D8A6A +:10D1B0009BF07A8F04D634E07343A0B30AF7F9F7F3 +:10D1C00085E5445F833317742299BA436EB502E84C +:10D1D000A8CA13F3A2DFD52BFCD2A42887A3839E71 +:10D1E00051807F581B6CC2F8E400F03DCAE15EB785 +:10D1F000E2C57866D7E532DB87F595A79A2AD11E76 +:10D200007CC541F13D83CE7E56C0E97AAB2B49F611 +:10D210009F1117BF01E0C47D36FA9D2EE0749F7404 +:10D220008F75A269DE25B3A17D50FA4F07988E71E4 +:10D23000F24D236C39C0972EE0749C53BBE07627E7 +:10D24000C6ADA6FD222ED580DCDCB973A907748794 +:10D25000DF90C7FAAEA51AEC433FEACD4BB17D573C +:10D26000975E71B63C9A1AE4F0B870BF814E6605BD +:10D2700044FD222B7C3B136ACD09C0C7F6446DCD1B +:10D28000098A2B6A544EE63F5C68D965F3FFCF6A82 +:10D29000F7275B62A40F938791FF7DF3CA2D71FA84 +:10D2A000C70B25218738DCE162D9A28F0736FEC67D +:10D2B00049717040C394E2C9E7795962BA34174B97 +:10D2C00099EC94C9FA19F45122E449BF14AB42BA5B +:10D2D0003B9138AA1C80E7BD7ECE675DCB7C24E7FE +:10D2E0009893D7FB0B4AD46E86FA77E4E822E4DB06 +:10D2F0009932D9D3D0DE82F6E6D66B0B23B8AE6D69 +:10D30000D92058914F2F6264970D57C814FFEACD6A +:10D31000CFDE8B76C23AC7D889EDB89ECFF8888F1A +:10D32000B75FF3DBD0ADD0BE6B7EB68A664976A020 +:10D33000E93A0C53F7178408BEDEE8DCA9E6781456 +:10D34000ABB2DA41F739636E1C7F6023CC097434C9 +:10D35000E00B2EAD40F84A6415C3F9EB922F2A0773 +:10D360004C7267A071F995D8DFBD49610EE8FF1DC9 +:10D37000DFF27BF2E6233B9E526E85797AE591558A +:10D38000617C5FCE620711EEF957FE13FA093B97F5 +:10D390003815F4650693CFB7AC4339A5662376D824 +:10D3A0009142CE1FDB13876AD602FE7624866AD6A8 +:10D3B000C2C49DC05FA8573A658FAE43199062738F +:10D3C0009C20672F2BF8C2D548E7BF2C8F8719D038 +:10D3D0006C41417F37CAA33C215F98FE7A7603C037 +:10D3E00071D9D53EE283EEED5B96E94EB46B808E4B +:10D3F00088FFD255C847063EA2F93CEE9AB724DF13 +:10D400002B633C35BF6899B700ED10181FE65B022F +:10D4100075671DC2C1F96A47DECF96A13C4378B754 +:10D42000F07C4708E5C676A40378BF6EE783D47F17 +:10D43000BB577D0BEBBFD9F9FB6508DFF6C0D02ADF +:10D440001CEFA1BC8F96A19DB343D8558FE6BFBCFE +:10D4500054273B2AF2C801DCF7CB41BFB1B3E96ED8 +:10D46000B5D08BDBDCA9DE0588DF2B65DA7F7BBFDF +:10D47000DD029F5B2589FC98AEBF62A97D12E9ABF6 +:10D48000E17DA4BF220AF7DF638B719F0B51BF01BF +:10D490005C53EBBF28AD437F99B1B80476E2D4EA80 +:10D4A000F512D295D2E0896741BD70F54A8B3E2ACC +:10D4B0006871BD83F16EB672A5C5EF5DB5FE068BD2 +:10D4C0009E624E258CF821BB13E1BE9CD335D0BDA6 +:10D4D00007F7379755E9E80FAE954648BEB25E1795 +:10D4E000AD1F4533D953CD2CDD8D915D67ACA90CB3 +:10D4F000E0C9D1F3888F062485E81665FCD3D0EE09 +:10D5000057789D5D0B1A1CF8FC0AA5A403E5C5B26B +:10D51000B49BFC67478EF305ACBFB36A0AE5699E0E +:10D52000382ABBD740FF9FC6B29903F0E10C7ADCE2 +:10D53000CF43FB35AFF3FA60937C25DA13D7BDCD2B +:10D54000FB4F9913726F867AFC65AFC8F3B09807EA +:10D550009077B550BD2F472E5AF053D88FE323E56F +:10D56000731E837AED2887FF8B1AAB71009D9EC8CE +:10D570002BE3F6CD092D77213CBFFD25570DF2EBAE +:10D58000BC97985B8671AFD594B9C84F863CEC13B5 +:10D590007226BB6AD489FC3B5CE77EE136D42F8BD4 +:10D5A0003D912C15F943277A63FAEC1F1F81FD4149 +:10D5B0001D8AF4FFABED33BB51BF1AF569F70F6D50 +:10D5C000437ACD0A819E34ED5F677911E9DBFE6B0A +:10D5D0001482935D05A35D86AD63A1C330CF9A9B92 +:10D5E000DC11C433D8FF69C2F3A56E8A07E01FEAD5 +:10D5F000DFBED9B3C8CEC8BB26EA477B784D73647B +:10D6000005C615D6AC2CBC0D4B838F2793A3DB6EC0 +:10D61000DC1DD260FEBECA5DABD07E98F07B921E50 +:10D620004AB646D25518AFF9F1D64BE676035EBB43 +:10D6300054EE8719F6E948D32033E7C3FAC1AE4F59 +:10D64000CD427BC0030605D08390CF4A459CE2A320 +:10D650007E108757C1A3E9152364DFFBEBB97D9FDB +:10D66000A3B1762C075C9AE4C275D670FB51A997DA +:10D6700059CA926FCD662913FE960ABD0E9CA9BCAD +:10D680007B31E044AB737C0C250B052F28AE367044 +:10D690006C8584EBB8212F427016683C9ECC9CE9C7 +:10D6A000AAEBC18F63F19D92BE00B33EFCEF7355B0 +:10D6B0004C437BF977C35ED207DEEA428AAF18E3B8 +:10D6C000FE24C8E598BBED278B4E98FC4F6F28A928 +:10D6D000219E6FD9F4C39CCF021E5CC3E57391EE0B +:10D6E00056DFE9227E546F88ECC33CC84F841FB4D8 +:10D6F0005ADA112339E98C49D7E7E0F388C56E7609 +:10D70000AD04BF10EC8ED5416D7E3EAC6397C484F2 +:10D71000BD514E76A05D4EDEDBA05D9A3FFF4FB758 +:10D72000E7DBA2ADDFBA8DA1FDFEC5DD98BFBAA7CC +:10D73000C1AD62FEE6BAE7F8F8911DEBBA90CE0DE6 +:10D740007E81795B30CE325C31D8540EFDEF5EEADB +:10D75000A3FE5F17F8BDFBA795DF3B02CF3FCC2FA1 +:10D76000A9C15065973B1EC675AEF3C5AEC375A083 +:10D77000FE423AFE0FD17F327E7165694D7F8B7A12 +:10D78000AD82917DE98DCE253B8C5558E37F9D720E +:10D79000AB82FC794DFE474B3B6BCFE6C76DCB1F91 +:10D7A00024BAB7D3C7FE3CBE0F1B9696742DC82073 +:10D7B000DF4D76D39E03E7E02FEF1D1F78103FFD6E +:10D7C000800F8DF88AEB97FE8585C44F461CE0508C +:10D7D0005EF336ECD791A8227BCE6E97BBD9C89B5F +:10D7E000DFA47820D74B036146F4B7B3CCBD572FE5 +:10D7F0009BDC4E77E431A27387874D3D61C2A34B1A +:10D80000F14C3D61E2AB9AB462A9CF3B1AB2F49FEE +:10D810003F12B1B47FF6CD2A4B7BDDA86AA95F76B3 +:10D82000B2D6D27FE19866A92F3ADD64E9BF985D50 +:10D830006FA95FE1B9D9D27F89B2C6D27E55E80E11 +:10D840004BFBD2C89D96BA81FFDF0619B7BF12B154 +:10D8500014E27567424B71FBB989EA1D8955542E54 +:10D860003AF3F71EF23BAA64A2EB54FED796A2BD90 +:10D87000D20BFA11FDA0C295F09E69FEFCE6264B84 +:10D88000DD98CF1F85792CF26A95A56EF86B5FCD78 +:10D89000FF3BF2C760FF5B50DEDCB448F15E0FF582 +:10D8A000C38D41EF3B50AE9F1A24B807AA4F7BA40B +:10D8B0006A349B951B57619C292A93DE5D33FB5488 +:10D8C00027CA49B6446695D2D974572DE4E289C671 +:10D8D000BB9882EFBDE648619EB91B83AFA8FF5796 +:10D8E00071FDBFC4E1A3906E6E95BC3F8BEC01CD82 +:10D8F0002D813E2DE620B3A2AA27A46948772107EF +:10D90000CB0DA19D906A47BE2E5CEC19D3C97E1940 +:10D91000A2F630B4A37E2F5A6FCF7324C9BE513400 +:10D92000CF98D0FF521AE009C57DADA8DF436BAD9B +:10D93000FD0B99A90EF0DCF5A26B18E9BEAF364BD2 +:10D94000C1FE8AADBDE09824811863FF929F938F3A +:10D95000F29FCD63F3D0EF90C1AE42FC741F9308E9 +:10D960005FB0AF9213F5CAA844F6F45D75C130FA02 +:10D97000224B1C2537233E362C71D7209F5D16E2A3 +:10D98000F23BF7CC2D52CC649FDED8E6600780973F +:10D990006E6EF352F9C6CA14437ECE66A3AB0A710B +:10D9A0001F98A7F520ACEFA63689DA57B54DA1F23E +:10D9B000736D79EC00C8D3CFB705A85CDD564CCFAA +:10D9C000FFAA2D4CE517DA6650794B5B19951FE6D7 +:10D9D00007853E1B0BA17D7CD3A2B110EAA7FE02F6 +:10D9E000711E0B9E637C9139C742A89FFAC23CAE60 +:10D9F000FDB3963CAF39DF7AAB5807684F8A47C210 +:10DA0000FA9B523C9E49F6E8D455CA5EB41B26ECFC +:10DA10004D650DDA9BD789F7A6D6DEB818FD6A45A5 +:10DA200066639FC4EEFC873CCE7F4F4CE371D5FE0E +:10DA30000087B7D3ADA5318EDDB940D9DB8E71BA81 +:10DA4000F7EB6FCF87F1BAF3843EB7F9C7E7D36F2F +:10DA500041431F54717D906DE8832AAB3E389F7F10 +:10DA6000328C89318C6747B249EE768FAEF0525CCA +:10DA700057E0716715D83FE7F04B0B4E3B282E3728 +:10DA80005E07FD8DF2A3E0B49B9EDBE18EB01D240A +:10DA900077D654F2385CBCFD754B9EFB8E10C747A1 +:10DAA0007C36B423FE5A146F00DACB36FCB707E994 +:10DAB000E359E18FC417F2763B3C46FBF7F314239E +:10DAC0004E18C6750C8F6E97C9DFACE7E72706C402 +:10DAD000BABB60DD9867E8AAE776DE64EB9C767AED +:10DAE0008A659DD39CA3B4CE69A7FD19D7D921EC33 +:10DAF000830117A7BF813277AA1DE61D0EDDDA5913 +:10DB000066B213269BCFF04BC7EBC2CF8B861F6844 +:10DB100036FB79F13D8F379BFDBCCF177CB7D9130E +:10DB20009EF0F30EED7E6C995E62F2F32E7567F453 +:10DB3000DF76856C7EDEE599FDBC84E097C9FCBC90 +:10DB40003EF4F3C84F890DCF30FB79B5C077F97F2C +:10DB50000E3F6F8CFC6030149477AB26ECE1C9ED7E +:10DB600060277BD7943F1970653E17B511E43BE2FF +:10DB7000A35FE27208FD25A417F0976AD05F32FA1E +:10DB8000FD87B09BCEF69F0CFF8AA9D8DFEE474DEC +:10DB9000BCCF781C4262E42FE860FFA0BF93153829 +:10DBA000DA5E02F82F7E69AF042E0AFBDBD7EEFCAB +:10DBB0005129EA9D36467674DBE82BD2ADE85FB199 +:10DBC0001ECAC7B212E7D8A8094F41B19F0F1688E5 +:10DBD000F394424F6C688964611CF19E36FD2A2CD7 +:10DBE000EF5E1FBB6EA6699F8D789211DFB4E3656F +:10DBF0009D83B5668A5365873C9CDF6C719E2F09B7 +:10DC00007978A1798AF3C9BDC6A0F67441C19FEEA7 +:10DC100087E6608C6E2E2F8B8313F35656C0BC3074 +:10DC2000C725621F92D9C955B10CF47089D86773A2 +:10DC30005C94F49271DE789E83E296F6F8E8E3F75E +:10DC4000FFDB326B7CF4E432737CF4F1FB4F7667DC +:10DC50008A8FDAE737E2C2551E2E9787B5573DE81F +:10DC60004FF66A41CAD70D5435F0BC9B9FCF736401 +:10DC7000E7AEA5C8F798778A67A13CF1B0F82C3CCD +:10DC80006FA9507D6A34DE8EFE88CBC9E7BDC9CF4F +:10DC9000F9A170B5ED3C42B3B5CEE256FD62ACDF02 +:10DCA000E0A7ADC2DE9B9E776619C697065EF46D4F +:10DCB0009173019E251D21847770D9EF43E8CF8CA5 +:10DCC000E7EFF457BA34F24BB85E8AEF7865A90EE5 +:10DCD0007CD279E45408E3DF030BDDD9D267187BEB +:10DCE000BF80CB73639C0F0A22B41F9D47ADFD1606 +:10DCF0009DF916E9175725D70F4315600798E8F5E2 +:10DD00008FC24EBC4EC46FFB134DE47F80BD4C717F +:10DD1000E642AD7518F92B27CA24F4CBBA12ABE84A +:10DD2000F984FCE0EB45230CF7DB8E2FBF966F3DAB +:10DD3000075C314A799EECA8B5DF485ACE6B067E67 +:10DD4000C8AE60A4075CB3C7F861DFFAA48EF11F08 +:10DD5000D80E3D2772367EED74D15BB7E0FEDBA0B6 +:10DD60005F6F20D685EF75B5FB358CDF3F3FFFC673 +:10DD7000A59518BF1C71A8C8E781788AA13DB23D5E +:10DD8000C19266BD02F26AF71674C9634CCF05FCF6 +:10DD9000E5D68FEAE81F17AC8C509CC8B9698C2176 +:10DDA0003EB35726D17966DE33FB699CBC6646FAE2 +:10DDB00073A092A5AA257A9F7950CF558E3C566DB7 +:10DDC000B2CF072A95B0CF84FFAD4B7669B87F03F9 +:10DDD0009B920CF9CC9BDEC322386E4592C581AE76 +:10DDE000F32AB4C52837F3624A39E6E307FEE0C8F0 +:10DDF0001817DF50C8F971A08CC74FFA243696C4A3 +:10DE0000B26E8125EE6C2FBD9E8B2F5B6B8A53E427 +:10DE100056707E3DDF7A58BD95EE3F857511FF2F18 +:10DE200028BC94F252AAA057E64C36E0F9FA2D35F8 +:10DE3000C1BD98BF9CC8232812E6110CFADD916879 +:10DE400023BAED4FE8449FF9B1B112D4C785E0B3CE +:10DE5000A0BEC9ADD7E83C776FA23323FDBAA6C9EF +:10DE600044BF05ABACF4AAC4AC749A131DA373559C +:10DE7000FE7A9B1C380F5D7ED2D2C877BC2C7139DC +:10DE800059B2E33B1477E99EBD8BE0F15630DDF1EA +:10DE9000192C959B75C0EFC0F023AC1AE9B42AC5C4 +:10DEA000D65F82E71B92ACB97A72FA993595F3FF87 +:10DEB00000EC1BE6213F040306E9DE18EF2CFD060B +:10DEC00074B3C564FFE55671BAB1CF6BA713131CC9 +:10DED000B48EAFEFDA7E35EAA32DA5C955B85F5BE6 +:10DEE00098AC627CD7597923C909ED484C1FCD27DE +:10DEF00056A3F36DC679E916477C57A1291E669C87 +:10DF000077B3FBD7C52C25D1770AD5DF217B8B09C9 +:10DF10007BABB87E17F9A5607F8D61BD28F2CCF090 +:10DF2000616E7FB5BAB1BEDE6A7F850DFB6BEDB960 +:10DF3000EDAF1BD75AEB2B575BEBCB57DE60197756 +:10DF4000DC2E17F1F98295493A8F3255E5E7AA8D13 +:10DF5000BCE012C0EDC75967CBD7BCE618C9E5FCD9 +:10DF600095D6E701EDDCF4B954D82180C734E251ED +:10DF70007B3642F9AE9C6AA6625C2A3B79376B8F8E +:10DF8000A0FDA196A15DF1DD9DDDCB227599FC255B +:10DF9000EE47F4D6723FE2970D239ECBD18FB85156 +:10DFA000669877DB596BF523AE9F6ACDFF7B6D7E5C +:10DFB000446330FE4A21E0C3EB4CD2391DAFF02759 +:10DFC0009E2EE0F02E437B2B833DB26CAA47B40F0C +:10DFD00090BD627CDF64B43F3995DBE9DF1565579E +:10DFE00022527482ECBAAA22941B4F4C1BED0CA255 +:10DFF0007C933C2398271B08B0F422F40FDEF692A2 +:10E00000FDD95725E9059F9918AFAB56F8D32C4E8B +:10E01000FECB3D73833588B7BE0AA7F0B3E3C9C50D +:10E0200051D373C3FFF6B41E2DB33C17FD7DAD2352 +:10E030008B4DE318F3DCF347079DCB37E281FDA559 +:10E04000917D18A7E97F7B4F08F37CD7097C768503 +:10E05000474294AF8F9E3B0E38A1E75A16E2BA0DA5 +:10E060003BDD28A7D6C649DF7725DA16F2FC722BEE +:10E0700095C6791B838E964CA2EFED7467E4DBB3F3 +:10E080006BCF4D8F774ECD9C3FB6E78D67D7A73DC1 +:10E0900099BE0334F2C69F549EDAE3CDD0A290BF5E +:10E0A00020E0BCD0BC4257224EFA6877A285F48D9E +:10E0B0006B6B52437DC7FE8A911F39AE77C4F98ED0 +:10E0C000F1754FE3EBCE5E6DD543E1B8157F2E6F52 +:10E0D000F230EA4556534EF4D99B68A5F95476DAE6 +:10E0E00083F9027FD4FAFED9FCCFF5E6503DB7079D +:10E0F000ED7AF53AFC842F38D1EF7CF85425776C13 +:10E10000C8378157C0838AF1293B7E9F98160B231D +:10E110007FEE14DF17D9C77943D8A10E948B781EF0 +:10E12000D7A953BCAB53CAEC977E5ED0BF579CB304 +:10E1300032C991CF4D9D6F9623FC7C952147BCA79A +:10E1400025BBDC895BFB3B2D72679D2F76DBD4F909 +:10E1500013F9894F8B4E563CC7E2B8AE29FBC63C3B +:10E1600001D3FAEA0AB89CFA5E3E9F7FD1998FB933 +:10E170001D2FE23CC6BE8DCB89A97C9F76093EEA65 +:10E1800043FA734DD09FC1D7763AB3F3AF9DCE66B5 +:10E19000378F3951BEF7C0BFBB03240F2CE74DCEDC +:10E1A000A76780AE4A88AE8ACE7DEEE34F2D27E387 +:10E1B0005F55E06776E318D1730F5324847B9CBED0 +:10E1C0008B387D1BF81AF75703F25FD46EEB4AA821 +:10E1D000453CFF504B7AE8ED422E9FCFE797BF5268 +:10E1E000C0FB39CE7CDC19443DCB3C2398B7EFAF64 +:10E1F0000876611DA86A08CF3FDD5B7FEA28E6F557 +:10E20000EFAE7347502F6B6B535BB03DA75A9D87A2 +:10E21000FAE5B9A96EA1FF63CF4DC57390AC95CE59 +:10E220005DF789EF713B124C5B07F03D5FF72E43C2 +:10E230003B3EAB244EE77C73EBD505146F61A3CC5A +:10E240008DF2AC96D1F9197FFD588899E2E5A78443 +:10E250009EEDBF610DF9476EA18FD9CA350CE5D38C +:10E260003299D37DBFD0C3C67B3F177A7C40D0376D +:10E270003B0DCF0B316FC1083E77559C2D4679552C +:10E28000EFE4EDEFF3F62EA3BD42B46B42DFFE8068 +:10E29000B7EFC47600DCBD12DAD1FED484DE3DF3E4 +:10E2A000476A1F30DE6FE4EF1B74F1C3464EC7EEC2 +:10E2B00010B7AFDD21C3BEFE2AABBE04F1D2CAD671 +:10E2C000E7E0B9C0386BF64DD8D7ED4B7685F05CFA +:10E2D000EBF03BF7AFBA15F7E7EDD973D1EF741850 +:10E2E000F1B1856F84508EF486D97040F85994C787 +:10E2F0006C14FADB96C77C672A9703FD8FDC6AC52E +:10E30000E7A15B6DF8E47435293E3F9C041F063E8F +:10E310008FF1F67E031FF5367C6EE4ED7DC6FBB50E +:10E32000567CFE7C6A447CAFFD07EAD76BF48BF227 +:10E330007ECEA0A791BEFB8B32B26FC1FECC0D2169 +:10E34000FD25EFD4C26CE27B15AF396EC626E266BE +:10E35000C010C40F92E4A27D9976EC15CAFF7CDA56 +:10E360007C6BC4AB8D38D3FDB678E60EDB79B9593A +:10E37000216BFE693C2E329DD34F56C82A278DB89B +:10E38000A35D7E866C7A3FD7663715D8FC51236E25 +:10E39000698F53DAE398EB10A64B312EF9DAB2CD40 +:10E3A00080DF15228F151379ADEB45DE6AB9C85BA6 +:10E3B000ADC4BC15943760DE2A0FF35F3C6F7593D4 +:10E3C000C85BAD1279AB9B45DEEA736D1753F9F963 +:10E3D000B6D954AE6E9B27F25C3522CF7599C873BF +:10E3E000D5893C17A793012F8FF30E2C74A7EE0548 +:10E3F0007A5871ED7BC417C51EF0DB1C19FCB4D82C +:10E4000033EDB7A11CD7FEB27EDAA3423EF72DC989 +:10E410006C87FC8D882F631E0EE13F9D2FEC1791BA +:10E42000AF2BDB504CF757AC59C2F33CFD4D8A374C +:10E4300060D2DF86BE7F56E8FB81EB1F5C85E74537 +:10E4400082573F4AF9870D4BF87911A3FF17C57C16 +:10E45000467D279E43C8109F36CA823BF67BD01F5D +:10E46000EE5EC9F3DBB787362ED3F3CDFA8FC76BD9 +:10E47000370BFD32A9DF5CFB30E5291A340FD5F7E5 +:10E48000D40F0E80A7CEA67CE607B3E95E02917F8B +:10E49000B0CF6FDFA74F7B7FEE11704F769E235E6C +:10E4A000609CE738D3F9C9CE73FC82F0D887E7398E +:10E4B00068BD3C8FD457673DCFB16EE7A21ED4F341 +:10E4C00013F9FD310FE5F7EB4F7930BFDF18E6792F +:10E4D000DEFEEA931EC94407321BED74A15EAF97BE +:10E4E00019C6BBD6540629EFCF66CB6A6506B86756 +:10E4F0008539DD9C80FE947F5A0B1B47F9A724CFFA +:10E500003789BC7B17BB93F2FCFA6B0EF217C6F38C +:10E51000FE153CEF9F4BA480797DD04399CE0154EA +:10E5200058CF011875A548D46D79FF3F35CF7FCFFF +:10E530003189F2FC0598E757CFCEF3F71F7549D321 +:10E5400060FDAF8532E7F9BB449EBFBB4296E8FE53 +:10E550001923CFBF706E08E3484B1C67D21F43BF1F +:10E560000D956C2F9DA7117833F0E870AAACD59764 +:10E5700021CF0F7E2FD2939F8DAC2A243EF874F2C8 +:10E58000FCBF091979FED68F30DED3B770665937D4 +:10E59000EDDB28F1CF78BEDF391A42FDDE3B9EE786 +:10E5A000FFC0F25D7524CCED58597C37D52DE2FBC8 +:10E5B00067E5F9C7F38D3CCF5F24DE9B1ABD717808 +:10E5C000C6A790E7FF8AF093FE4FEB95DF84220405 +:10E5D00087C3C3F58AA316F44A19EA95B7AC7A053E +:10E5E000E49839FFDA21DE33E459EFFC67489EF501 +:10E5F0004E22EF97860D79FF8107C7FD2864E4D787 +:10E60000F9FE45D84A2EEF6FE0FE48BCFDA065DF5D +:10E610002E17F88F8B38775F0BF87F3ED413FFEE01 +:10E62000598EF70184B8BC8AD7C919BFBB32DAC783 +:10E63000CF83FCEFE77B491F6C0C0D77B757F37363 +:10E640000504F7423E6F5F93D52F8D0AB89F0E31B8 +:10E650009BFF3AEA31EB33A3DFE3A2DFBD767DB661 +:10E66000D0AACF2AC2D6B8E0F9F5D93C92C3F70AAE +:10E670007D56B9E76BCDA8CFFA8DFCDAC2998F1C15 +:10E68000C0F32575FCBCE2C4F77143DDE6FCDA0398 +:10E69000A1A165945F3B7A9CF2683785F93EF6D775 +:10E6A000B9B32518E70BA2DE7984B75FA85FFF74C2 +:10E6B00030764718D6A337B0AA56DFC473232E99F5 +:10E6C00014F72E29E2DE25FA46170CE0A457F07D58 +:10E6D0002812BEDEA447370B7935B890A5312E3FFE +:10E6E000D0CE529BE19D41176BC0EF910703B28AD8 +:10E6F000E7B10667431DE396356E15E554A4A76A96 +:10E700001D9E138DF4F0F83CD3AD71C1BBC4B80CA1 +:10E710008DAC0B58D7F03B59347FB29D9F4B4CBE0C +:10E720003D9BCE630E8695307E473FB090517C274F +:10E73000A25D7954F831346E447BE14DAC9F0F9E5D +:10E74000F1EFD92E109E713B1BF6CAFC9D4C5F2247 +:10E7500019FE259E3749ECA632954851793071282B +:10E76000FC4B17DEA3334475A3BFDDCE0E365AED46 +:10E77000F032DDDA3E7387B5BDEAC1CCF136C3FEB7 +:10E7800037E649259EA579BF9D48131C0389A3023E +:10E79000AE11AAF725DEB4C0659FD73E8F1D4E3B54 +:10E7A0005CF675D9EF5DCA053F9EFC3C417FA9E64A +:10E7B0007209F5658F123F8CF4AB3085ECC0FE63B7 +:10E7C000FF3652017C943A73D5089EDB4AD672FA22 +:10E7D000630B4769AB725FF2EA6867E46AFCDCD5F9 +:10E7E000B02E7B915F92BA9C8DE7A52E1EDA68C58C +:10E7F0009787D1775EB30F6DB4C097D278DE7E165F +:10E80000E3CF094EB447429C1ECECEBB8D523ED6BE +:10E810007F3A9FCE21D8D7672F87EB376F46BD3819 +:10E8200058CBBFF71DAC3F7514EDA4415D56F17B8D +:10E8300031784E7AF3C37A96C2A3924E36F63CDA1A +:10E840000D7D1ABF0FC0C093F1DD7500A7C4EFF3B3 +:10E85000120AD3F132AAFA883793FD9B7785721793 +:10E860007D3F551DF19ABF7B19AC2DF7F27B6046B9 +:10E8700029BE07753A5FD6D71C7911CF2B3259665E +:10E88000532E877DAE3B9544FCC3BE7C142E985816 +:10E89000774A3F4EF7955C3CE4661173DCEE10D48A +:10E8A000CDF428F0C716AA12EAC55C3C87548378D9 +:10E8B000E6FD0C3CE7EA73E95E9DBBBF028FB1BF8A +:10E8C0002D7F073BCABFD311F896A4F9E27B49F02C +:10E8D000C7A74CE0E7470ECD53341FEFAFB2FAD1D4 +:10E8E0002951EE13CF0F8AFA77457D50948F18E7A0 +:10E8F0003B8EAECEC5751A7EF7B745BBB19E394F7C +:10E90000C916BB32A065DBEE4D095AEA333A8B2CAF +:10E91000F77ACCDC516EBD27E4189F6F32FAA97EDE +:10E9200054B6F4CF6BB2CE77D181A0A5DDF8EE3C22 +:10E93000B7B6C8761F8975DEC9E6D357CE780BE522 +:10E940006DAEEAA6EFD272551E1FCA55B93CB5EF9F +:10E950008F6B02FFB5887F036F2C9FE3CB29B7260F +:10E960006798BEDBEBF3A7C5F75849116FD722CBE9 +:10E9700033E457AA3CFA3684A35F9C5F33F6799C54 +:10E98000AF6A05BF4389F49BAC6FA0FB51B65EFA3A +:10E990007B0DCFA3F47D7D94CE01F8D3EFD1390068 +:10E9A000D877E29767121E2AFDB5A32C0ECF739D70 +:10E9B000B1CDF4FDF00E568679925C4F9CD7778BE3 +:10E9C000BA2F7E2FD5DF843A14B94A2BAF1FE3ED5F +:10E9D00078DF9A6EBE57B196C91877AA647119CFBD +:10E9E00003F6155DD58B74BD80B53A30AF69D4237D +:10E9F0008802B0076E813AFA6DCF9EC96A9A1F9D50 +:10EA00009073CE4D76391794918FEE6E80EDCF20B6 +:10EA10009700FF2D66FC1BF03C5B2BEC73FC83F72F +:10EA2000831AB7CF8D7AA05EA1730E5F2BE2F61327 +:10EA3000F0FBDD45F327F8FDD95183DFADF2D42E8D +:10EA400047EDF2B30F6D1F93DCF06BB286E7CDFCA0 +:10EA50006CC3C47B65047702E77B5CF0D9A3027EBC +:10EA60003FDE30017A60CED018E5E2BE239EFF3C47 +:10EA7000377E1FF6AF7A6A5441753EE7D9A48CF60B +:10EA8000708FA275E2F38B87565BF30987565BE0C4 +:10EA90009EC578DD2EE767EE90996E7AEFB36F66CC +:10EAA0005BEAC8D77A06BD067A9FF21DDF4DECA659 +:10EAB000F2602245E5BE8237086EBAB7B20EEF7536 +:10EAC0001C22BD97CD540F9617D5260FE3F9AFB78B +:10EAD0008A22344ED5A3ADF214F867D98E18BD073B +:10EAE0007F741EFC97B9F183B82E25E9D6F1BE17C5 +:10EAF000454BD2B983ADC1AF0DA31F1AD4983A0BC1 +:10EB0000DE0B3A35BADF8455B008FADBDE74978441 +:10EB1000F791783556E385C741C401B6F7F0EFB9F0 +:10EB2000C26B9964F60F940AB698C717D422B3BE85 +:10EB3000D82FF260073625199AB078AEA6FC128459 +:10EB40005B9CDF900CBF91FB3FF7E684E83BDDADBB +:10EB500003EEC5C8878A7384E721A3AC06F947F1A1 +:10EB6000A4E9BC07F0460D7D6FE51BE2F56AD1AE66 +:10EB7000A478BD8AB7BB2A620CCF276F1DB8F26795 +:10EB8000B83E803332ABECECF33D8A7394CF53CB79 +:10EB9000F952F18CF171EA39DFC23C0DD4FEA8A81C +:10EBA0002B695E1FE2FDC183A4BA027200E32A064C +:10EBB000BEFF3A1C7FBD08D6A974BADFC1739E8A16 +:10EBC000A6CA3C2FCDF7E7C3DCF85BD46EDB9FB25F +:10EBD0002D4C9F024AEFA2439CCF0E88734DB30F7A +:10EBE000F0734D07C4B9A6AA14A3EF258CFAAC079D +:10EBF00039491A751887454CEDC6BE1CA8D48A2C15 +:10EC0000E79F047E021AC78F92F64A881F45631257 +:10EC1000CAB9803325937E3FC4D71BF02479FD8089 +:10EC2000A8FB745E4F71FC04945699F2BD0FF27A02 +:10EC300099A6905C3B30C9799EBD427EE4D6023FE6 +:10EC400098F8644738FE31E2A7FA51E00F8BDD985F +:10EC5000B2D4AB047DEE4FCA64F7ECEF293FE73D39 +:10EC60008C7F0FF21C3FC87F0CE4399607410EE3FE +:10EC7000BD3393F59F792FBB93EB9DF8CFD09EECDE +:10EC8000AA8B94A3DCF3A7DFA2FB23FC5A642EF229 +:10EC9000C99C624ED75BF7FC96F448AE93DFE7E67B +:10ECA0005339BFE48AFBE4A6548BBA8FFB57D9557E +:10ECB000A22EEEAB73E5DBF8AB16F80BE9C6990CA8 +:10ECC00099F55D97E09F9941B6C67C4F9401C7ECDA +:10ECD00062C3EFE6F4A624651DEF97FCC770BCAADB +:10ECE000D84A97742E670E06D032F4FF97707C8E48 +:10ECF000B53F3F57A646C71A70FDF3465804CFC527 +:10ED0000D51573797449F5E861E49FB947E0390C8A +:10ED10005699CF1C281F8CF1940A3ECEA2A2781DD2 +:10ED20001FB7E3377C5C7E6E434D73FA8F8E70FAAB +:10ED3000EFAA03FA2FA373DC44FF5D7540CF509F09 +:10ED40007B94D3BF51AF39C2E9DFA8C33844FF4633 +:10ED50007D1C6F75C990CF441F5B2B77BD796EFA10 +:10ED6000D71C44DF2306FDAB0EA2EF9704BDFB22A8 +:10ED7000BC7E54B42B0AEF7F84D7558D3990FEBBEF +:10ED800004FD1F70AA3F26BEEE094ABA09AE6831DB +:10ED9000F76F0F68CEA64C7C2289766791F6856264 +:10EDA000283BCBDC5C3EBCE84A4D81713CE527D971 +:10EDB0001D513A7FD03A45C1EF0F7F45754FB9B32A +:10EDC000750AD8019E19EFF3F6060FB5DF57FA2E34 +:10EDD0006FBFCD47F5AC694D4577C078F755BA554B +:10EDE0003C1E70DFB46554CF9AE9A17AD7E02EF5C6 +:10EDF0000E649DE9EFD339D3FBFA983A85E45F9C22 +:10EE0000BEB7AC28F10DD139A104DB8D799D0AA7DD +:10EE100026E3F9840A3DA9F3EF3641BF4031A39EB2 +:10EE2000F36B6E92ED95D14EAC65BBAB4DFC7C6740 +:10EE30003197077749EA618C0F8F8F03061FDD6FCB +:10EE4000ABCC25BDD8916049F339F7BF2B2E27FCF9 +:10EE50007842F05E14F39C9C2EB3422C599D41FFE6 +:10EE6000F647D5A5648F31CF18C0306E8F8EDB8901 +:10EE7000D1C3748F474FF438DD0F55E5E1E779FAD8 +:10EE8000546E2F2E9E7F82CE71F7454FD0F7C77DEF +:10EE90002AF7C736CC67F45D4A399E379FC7584E6C +:10EEA0003DD82F7326C6F5C173F3F98F9CB3ED9A45 +:10EEB00007707FBF21EC9A8785FDD2A78E791C163B +:10EEC0003FEBF030CA1D3F4B6EC698CC37457FB044 +:10EED000730EE0FBB90B37CB184FDADECCED30B058 +:10EEE000730E22BFD9ED1C5F27E81FFFD9F68E6194 +:10EEF00087FB3A8734B4DFEDF68FAF93DFD7598EB7 +:10EF0000FE15DDEF9322FCFB3AF9FD9D3E786E5E27 +:10EF1000E7F87AB5741AE369B94CEFBA529AC0FBB4 +:10EF20007C7682FCD3229167634BF9F71403D1E01E +:10EF3000F5574035A99E3ABA09CADD3E66E18F61B0 +:10EF400021E70E0BFE604AAC18E5579BA23D8F7877 +:10EF5000007C1EC175DBEF0DED518F7BCCE78D7B07 +:10EF6000D0BF807DD69A0616A3FD9353ADD0F93657 +:10EF7000233E9D5DC2EDDF97057DB638B49771FCE9 +:10EF800061F555A2935E28CD74D22BE86432BDE2C0 +:10EF900013F4313EFFBAEC55686F3FC0607DA8376F +:10EFA000B2D37194EBFF2AE63B21E4FA0951EF5CFE +:10EFB000F9EF4D740EB25666F45D46EDDC8CDF65FC +:10EFC0003C3F2ED7C53DECB5E372FD3D84DFD7E273 +:10EFD000A4FB007D2A97EBC6BE4F06B7C13FBEA873 +:10EFE000BA18E5BB716F61383EA69BE3A43E89C5A4 +:10EFF000B87DC7EFC3F269804F86E7404734BA97C0 +:10F0000065A142DF554B25D6735B4F16C7CF149BC6 +:10F01000EA3E3545FAC9B8CFEF7C700DD4075F41A1 +:10F020007A093AC7C86E06BAD2E89E3ED817BA2FF8 +:10F030004293E9BBE460CD874737C1FC793EEB3DA5 +:10F04000B1534A389E7D25829EF2819E2E217ACA36 +:10F0500029E1F4E4C7F26C7ADAEC35DB1D3DFED42D +:10F060001DB87F767AD298959EC225E3F4142E219E +:10F070007A12719F467E4E75502DA7EF44061B1BDA +:10F08000CE798FE864F40488A3EFF277C7E70EA384 +:10F090009E1A682C22BCAB25D6BC12D805179798AF +:10F0A000EA8146D582F771FA11FC6EC77BE7CA6D1B +:10F0B0004BE93BA138CF07E6C4C5778D367ACC291A +:10F0C00011F47881FB99539F26BA32FCF84B8AE2FF +:10F0D0008B4B889EB9FC0E8AFBB61E5019D1B553D6 +:10F0E0009C2FD11A25CAAF4DC6C74D62FD80F7A629 +:10F0F000128C17D702DEF3916F79BCADB7F6D51835 +:10F10000DEEFDEDBE8A4785BAF90EF1FD672F99EEE +:10F110006C3945F493557A4231CB11FB3EE016B47D +:10F1200080CAF2813D980565B2E1C7A1737DE7E031 +:10F130006B1C5C8E72757BF3E1F426DCAF475D11CE +:10F14000CC33827F1D47387BD521AF450FCC3F356F +:10F1500082E727CEE7BF8EC7D5EAB95F6D97E7FE96 +:10F160009228971FB5F638378FB718FB5E145716DD +:10F17000A35E0D3527E99C9EC1FFF6758404FF87C9 +:10F18000E2FCFBFF1C55D98BE768028D49E207833F +:10F19000FFDBC53EE444B9FD7759497CA3990E7D58 +:10F1A0002ABFDFFE42E9E5F5791C7E177EEB974525 +:10F1B000FCBAA52483FCB79786FCEFC17D86A90E17 +:10F1C0003645F63A4CF6D93EC1A79714697D2554C9 +:10F1D000C607B0DC1EA8ED9E41F41591F8BD3EA314 +:10F1E0009D746FDA4E2E67901E9F4039D0B8B7FDE0 +:10F1F0005C72E081097A7C00C7556AF9FDF01DC593 +:10F20000F187A8DE23D3FDF08A36C2CF37D78FD05F +:10F210003EE6F46496FBB96C54A3FB53D7E42F4548 +:10F22000FA00FAF936E235B0CEE99DC9284E1E9BA8 +:10F230000DCF877770BA1F68E6743FB0432679BD5B +:10F240003FCAE3CA18F1C57B458C50D0FEE6C3FA2D +:10F25000C351FEDD05C6A9CE477707CFFC88EEB5C2 +:10F260003B0874BC59C96047C45FD366C3FCCA3F3E +:10F2700079E977148C7D36E8CDB951C89D1D5C9E27 +:10F28000F8A299F304174A1F86BD314F891D45BC6A +:10F290006A8C7F270574F26249C1D971C8BEDABB96 +:10F2A0002CFCDDE7D62231539ECC780E7698E446CE +:10F2B0003E8A3A69DF0CBEF86149EC751CD75F9B4A +:10F2C00026793A2E9FEC76060A28133D1C9BD00B1C +:10F2D000C770DF1615C5FE15CBBE92132D0FB30BED +:10F2E0005FAFAF19081AE8A177C1A532EEEB039220 +:10F2F000670CE58909BE5F217C337AB85C2961A27D +:10F300005D063A467D7917FF9E18E9FB7A93FF99CF +:10F3100057CAE915F8610CDFB7F7C73BF6F1774E2E +:10F320001C550AF191D6589366A6F5FED738BDC78D +:10F33000FE8BCBF356C6BF071E3D9A407B61AD4C9A +:10F34000716428C97EF6A19D6C3A6701FBF531CE48 +:10F35000BB57F0F5B7C6CF73333A07ECAFE77990F8 +:10F36000B28D915790FE4DF6B1A714E380FAE8C82C +:10F37000E208C649C6E380DED20CF6B19D9E9D1B15 +:10F380004732CACF9CB599F970B875DF5BE85FEE7C +:10F39000696674BE75EB1DBBBCB310BE569961FCAB +:10F3A0002D2FDD45FC97B756A6FB8D1F5CCBEFF7E5 +:10F3B0009F6C7F8D7B72FB45FCC2EF4CA7C9DF14AD +:10F3C0007131BF67244DFEA8889BF97D63BC5E2F19 +:10F3D000DA15467600103EB50F60FCC3FCFB41CD4C +:10F3E00011CAAB04B4601ABF47B3DFA31B5C2FBFC5 +:10F3F000E3C2750A7B5FA9CFB6DC0B1F6C0C5AFA0F +:10F400001BBF5BD2A16CF620BEBDAAAE629CF27798 +:10F41000A5F13AC477713425D131C42285E4A7F12E +:10F420003B264B1CF5B9782E15EFE6761602DC125A +:10F430001F736929B7F77322FC7BC7AC46A6A67079 +:10F440005CD69AC673BFDEF5E4FAE3EF05B0C64AB0 +:10F450009C27B604F7DB5BC1EDC89E49BE1BBFB657 +:10F4600054B6DC73CE9CBA9AE9FB0D83AF7E911B38 +:10F47000BB1EC75DE258ADA1BFF9419C7F0FDA29E1 +:10F48000EC77FB7B3BC28B6F28253A8F1FC5EF754E +:10F49000EEAB6411B4933ACEACF0A03CB92FE0A629 +:10F4A000F358EF953E766D7B05D00BC0DFECA27C68 +:10F4B00014951DBEE4CD980778B794E98DE04377A5 +:10F4C0003AF52694BF7F5DFACFD7E6037E3B710FF6 +:10F4D0008A187BA4F4833EBAC700EBFCDE5E0DF70E +:10F4E000678FD7A87F70ED85BC8F37A5D1EF3D38EA +:10F4F000E35FC67D0AADF5909F188AAB2E9487AF67 +:10F500008ADF5D0AAD655B94DC8975BE2BE44248F9 +:10F51000C4BF4222EE1512E7097AC4FEDD2FCA836A +:10F5200002EF8AA6DE4CF2102429EEEB7697F87DE6 +:10F53000AE1A467A34BC96915E0E357179B2357F3B +:10F5400033C5A9838B15FADEB543CCEB6F1CD3B062 +:10F550000E76C4D652937C0E36713BE25DFC28BF1A +:10F5600000ED467D31DA94E06F6CC37E3E35B21813 +:10F57000BF77CAD5B8FC0BC753ED68321AFD07D761 +:10F58000011673E91C03D14F782D872FD4CCED9849 +:10F59000507C8461DC6E8780E31725DA761CD7788F +:10F5A000FFE592D82E8EC711CD3CEE37C4B8DF18D8 +:10F5B0001F9791DD1AAAE5E3061A755A679EC6D70A +:10F5C000B9578CFFA592580AE9C95FCBFD3663BCD9 +:10F5D0005F17C70FF079464164E3FBDC5E30DA8DDC +:10F5E000F2FB81D8217C3F77EDA8EE8E4C3C37EDC5 +:10F5F000FB63E7DA773B7D1BFB1E9ECEEF1908CF3E +:10F60000D0643CAFB2FB4B73F7E3FD19DBE3EE1EB6 +:10F61000F5338CFDA4D44DF3EC09446E467B6BF7B7 +:10F6200026FD2D8CAB0634A57C33EC6B20BDE7BDED +:10F6300099586F0A3224D9F1FC35F23FF87183CD25 +:10F64000DC0E3FA5B1BD689FECFE03DF87DD4BD824 +:10F65000F736331EBFC33CC3EE4D1C9F86BC34E05F +:10F66000545446F7892B1ABF4FFC7869C4A2C7953A +:10F670004646E319F78AEF0924DF43B932788D3B18 +:10F6800082F7653C7FCD334B713F06DADD1ACAF550 +:10F690008175CD329E1FDCBE94FF6EC6F64D2AAD3D +:10F6A00027D408EB81FEA1F43F74613E2E7434CF61 +:10F6B000B29E90580F08EEB7E877E9347E9F67282E +:10F6C000AED3BDF106DC817498D69314F7A107542C +:10F6D00085E00F345AEF430FC415C97C8FFCBBB8CB +:10F6E0002E931D6D97E3F7B95AE93B3CBBDC994C6F +:10F6F0007E398B16FF07C9AF0BFC1D880BEEC73494 +:10F700003F9EDF2454445015D5C8D3A2784ECD4136 +:10F71000BF5B80E73F295EA8F37BDBCB1BA30D78A3 +:10F72000DF0F10BD8671BB5C1669C0DF058B8CDFF7 +:10F73000F3A4D2FB25E29EA7F21EEB794EFBF9CF94 +:10F7400012D643F1E788ED1C67C9B1F78EA11F56A9 +:10F75000627B6EFCAE59B62D5E6894F6DF452B9841 +:10F7600096F977D126C38BF1BB681EA7563C0DF1E5 +:10F7700053C5F1D853D3519529AF3181C794D409DA +:10F78000EB2E15E725A2D322463C9FEE9D1C3F1F82 +:10F790000BC2C7097EE87060C1397F0FCBD1F66418 +:10F7A0004DA3C98F75F8B8FD3A717EEF17748E625C +:10F7B000F2FDB59EDF73E5F3B83EDA8528C7B7E4FE +:10F7C000F0B8BE4FE571FD2D393C4E3FA59AC7F507 +:10F7D0008D7A7615775D8D3A9E398E98DA8DF9B6E9 +:10F7E000E468214B5E2B7025C5F51D211699057B1C +:10F7F000E54EDF41793F3738A498F7733847E83B47 +:10F8000021A02D8AD33B3C695DE27614C5F51DBE6F +:10F81000215EAF16ED4A8AD7AB78BB2B14A3EF4D10 +:10F82000B6605C3FC3BECC9C26E247627F9628ADA3 +:10F830005B908E97C0F2EE85FD99BA3AB605F1D08D +:10F84000A430C541877352E27B9415F4DDC9754B32 +:10F850009982DF8319F5ABBEC6BF6BCB6BD6289FF1 +:10F86000EFD7F877D7496DF939E96900E4485ADCF0 +:10F870007399CE3ABB3D28EE8519B8FA21BA1F1309 +:10F880007F576039AC67C3341E071B5EB88BEEE947 +:10F89000B8FFEA3F52D9B5B02384F66967D96F99AA +:10F8A000795EE0452DD3BD4E6F8A712A4EDF4771D8 +:10F8B000D164C4FA3DE004BDB4D3FA931EE645B961 +:10F8C000F4E75A57FF346E777CD2755D3C5D12F0D9 +:10F8D0008E79F03C617FFDA7056F1F3B4E70F5D11F +:10F8E0003DAA5D6533CBD16F7858E0D1E83F5CD657 +:10F8F00041707756EE22B8BB2A3B98593E786AF998 +:10F90000FD9FF679564EE7E32495BF0CDCCF9D179B +:10F91000EE5D2CD3FCDE49F0BEC9C07B688CEE3BAB +:10F92000FC73C3FF86A0974F0B7E59E0FF9669FCDE +:10F93000BC6E3262D07B399D77FB28CE5AD1EF9ACC +:10F940008C5F828DD6736478CFACB95E5E11CBCDFF +:10F95000E4B718E5AF111F59E7E7AF5F09BC9D4455 +:10F96000BCCDC271531D97217C22DEFA658DC7A7DD +:10F97000267BFFCBAED1C24CBF9765947FF3ACC35F +:10F9800072AEEC7CF07C755A39E1EB7F1CB2BE772D +:10F99000476A4AC6DFABEAAFB7E2D3C0F359FBFF11 +:10F9A00029E1F37C74785E7CD6F3BCCCA785CFF3D9 +:10F9B000C1730BDA0717804F3B5D4E36DEFFAB7429 +:10F9C000D93F8DDB59E7C3A39D1EFFDC78FCBF8DBB +:10F9D0001E1FBE407AFCFF783C373CCF5D201E0DD9 +:10F9E0003979C8CDEFC19EF5CD0DAF2E05B8FFB961 +:10F9F000691EFD6E3873C62E5901F6F2F1E9DC5F1F +:10FA00009F25F239F6F98E0B7DFC6AD38A2FA1DE91 +:10FA1000FC68E51486F199D765F5A7518CDFDCE821 +:10FA2000C8781FE5AB02BFC3D303C24E8E5D331F40 +:10FA3000FA2F7FDD3117F3C493AD8F3599D645F991 +:10FA4000A96CCBEF8DBE0AFE209E3F32BE1F7CB557 +:10FA5000695E4E26BFC9D8DFD757AEF864FBBBD26C +:10FA6000F1A9EEEFF9E0199A5E7E41F266FC9C3452 +:10FA7000D3885F0E7D9DFB0FE03DB930CEBAFC58B8 +:10FA8000169D3B7C0D1FD561BC27F6ABE9D07F7975 +:10FA9000538D25CE639CCFBCB56FD63EFAEE2FB604 +:10FAA00082FA9F9A6EB5EBC6F7C7A02B997F4F3AA3 +:10FAB00075B5EE329F67BB3462F845ADA5F4BBA5C2 +:10FAC0006EEDE2C760FC57AFCD52F7219FAE68DE06 +:10FAD000863EE2EB370724F33DAB39113EDF82D59A +:10FAE000DCAE7DEACDB84B36EDEBFF0220A06A33E9 +:10FAF000008000001F8B080000000000000BED7D5F +:10FB00000B7855C5B5F0ECB3F779E47D124E9E90B5 +:10FB1000B04F5E249084931002288F9D071A15F52C +:10FB20002410091AF010224609E9D15A4BAB2D27AF +:10FB300004307251835A1A5B6C4F22D6DC5BAE06DE +:10FB40001AEFC55BEB8D0888F7D7DBC843D38A353E +:10FB50000A45EA33F5EA95565AEFAC3533397BEF6F +:10FB60009C106CBDDFFF7DFFF7A7F51B66CFEC99FE +:10FB700035EBBDD6CC9E335D95084924C4BEB46137 +:10FB8000E57001215FC2DFA2501901EDB309B9CEC2 +:10FB90002769C1684288E24DAF2D0CB597F2F74551 +:10FBA000BBF9FD343516DB4F48A4BE2F4C7B227FBA +:10FBB000BFBEFEC2EF13EF24425269493C19DEC2B8 +:10FBC000B1FD080960BF27A6FA32545ABE2EF9DFEC +:10FBD000FC56297DFA8308CFE32AC03D98511B4388 +:10FBE000485903D18205B88ECD84B65F7B959AB013 +:10FBF000AD18EA9A4C5C84D864F513A80BB8C4BC61 +:10FC000009B45DA1FDE768C4DF46DB1B2D9E5524CA +:10FC10002BECFC45179A7F741D8A560EF34D6A250E +:10FC200004E737AD4B8C27FA1FFB53E555D0BFFFD8 +:10FC3000A8C5B9C93D7EFF5E1B69EEA3EBCBED0AFB +:10FC40005857EBF079AD6AC176974CFC7D48477FF9 +:10FC50007A7D4CA8FD0A3502E9DC6FD366FC339D42 +:10FC6000E7E835764F0F01BE58F20F31741D275665 +:10FC7000C44B7635D43F86E3E72F5309BE97FBB0DC +:10FC8000DFAAD271972B4413E3D7EAC6FFEFA98C02 +:10FC90008F2A0017084720723A9D87BC2E7B1EA72B +:10FCA000456FCF77D37D61F8EFE84607199846C8CE +:10FCB000E753F3F07DF17CE992E22DAE52E49B54E0 +:10FCC00099005E2E49F7D179AF83F90B000FFEF44E +:10FCD000E202588FBADE1B7DF1EB10F836C361C625 +:10FCE00073FF90D74AE8B805CB18DFD62D7BDEB27C +:10FCF0009E96DD168A7F5ABE0D5DE785DE7B82CF3C +:10FD0000D36BF3B5477808B94B9DD7D9E1A0754AB5 +:10FD100016720921BB820B3A0380B7CD6CFEBA651F +:10FD2000359B81DEB9D5C429C7C33A8806FC7A62FF +:10FD3000414C70131D8A38B472E0AF0FFF1A47B6FA +:10FD40007960B24E847FBD4DCD05BE2444B57A297D +:10FD5000FE9F567C1B55FABCF6A43D2017D1B2BAC3 +:10FD6000D80A783A6A65F248362F453889A2E6D62D +:10FD70008695AB4D38AEE0ABDE606DDC1A1D5FEDF5 +:10FD8000576DB82E517F6D23417A1D03BAD943CFE9 +:10FD9000970D11C453BFCD8BEBFAED15CEF84D4C3A +:10FDA000EEDAEE0439FC72AA04EBD80F7C4AE7FBCA +:10FDB0002C78F4496209E1637DCFF45C92191A6FE3 +:10FDC00079BD4C06F208FE7D4942EBAF5B12657CC3 +:10FDD000CEDFCF93B575302FB9CAAE3E4EE5C755CD +:10FDE000BD1CE5FFCBAB8813DA7B6DDE4D31F479BA +:10FDF000EEB23FDE81F392208EF7A16D702DC32706 +:10FE0000C37F634F74F736DA2FB17DF85BC0579F1D +:10FE1000467BE312747CFB0B4EE710FF12C403F425 +:10FE200073D2FEB58A6A7586D1734BABE5B070DBD1 +:10FE3000ECEA19BD9E31F3616636FD275DD7670F89 +:10FE4000470401AE15246085FECB89B680C13D62B2 +:10FE5000053D7192D345BC7F920CC4CC01FD542D5D +:10FE6000A37E3AE95F1AD748D7D160ED8B29A1E587 +:10FE70002B7C1D6FDC215703DDCEF27564660F1EEF +:10FE80002AA3EF7D46FFBFCD49FB07E5809DF255D4 +:10FE9000438BFCB63D3634FE4ABF713D541E8F5E27 +:10FEA00001F37D9FCD47F5D77AC0E75BC4E9DF4614 +:10FEB000F9FB285D3FACA3D73B3928D3A98F59D490 +:10FEC000FB4A693DB056F4A7AC9244888FFD935C21 +:10FED000D7E0B9AF943E3FA5BA914E6B1ED6B64659 +:10FEE000D0FAA6A8227C6FF875B904F4C27872EC37 +:10FEF000BB9BC2E708C197FB70A401DE32B0476824 +:10FF00002706D257E9E462565614B387CB58BB791B +:10FF1000DC92AC686C3FF657B9399CBDABCE627AC7 +:10FF2000B06E7BF8F7ABB362587B67787BD895C926 +:10FF3000E6274A5F3AD0B5AE3EFC38FFEE8EC57E6E +:10FF400027D7BFBB52A3E31CB730F915ED7BDD8C7F +:10FF5000BE0FB9995D38D673E5E114A04FABE4CC80 +:10FF6000A178FC306130975004DED0729B0DF4F222 +:10FF70007637837B598637C24DFBAF19AAB0A5D21D +:10FF8000FEFD0DC423A921FD608623DE6DB63BC2B4 +:10FF9000EE754680DDA3FF3C6D2FC12E81B804A015 +:10FFA0007BE056E08B404FA4F37109F9E415A0A75C +:10FFB0008FD2739B8E9EE96EA39C99E9D9B43DCAFA +:10FFC000507F8BA8151618F7B81C84718FD9465E20 +:10FFD00001FE3F46F9AB0DF8EBFCACC21A9DBDFA31 +:10FFE00088F3FBB125B3904F3F5B126501BE1C8FB8 +:10FFF0009FDEE3F27596DBABCCECE0D64B5D2827B9 +:020000021000EC +:10000000232027AD4B989C8CF77EAB7538299C5EDE +:1000100010E537F61BE5E9D892A571A0C7DFBA7BDA +:10002000564C6398F72E73BB113FEB7A8DEFDD12C0 +:1000300034E1E56E36CE78F3BEC5D7758AEB73C171 +:1000400047C7BD4C5F887ED772FE10F5FA26E3BC29 +:10005000D73518E715F271DCDB1E097E0AB557B9F2 +:10006000C0CFBDDC7E92CDB30CF673ACFE6BC3F992 +:10007000043C547F288C4EEE1ED90D7586179F893F +:100080004FCCEB3966A17C007AE6270AEA999CED11 +:10009000AB2DA9EA58BE6B318D73B17C9799ED8D6C +:1000A0008375097D6E7E3FC46717A6C3FF2DFE1AB8 +:1000B0001FFFCC3E4EC45F42EE6F50FAACF30A987D +:1000C0003EB9859636B703F16973AB58DE4098DFC9 +:1000D00046C860514D21E8A3482281BCFE4B5430F4 +:1000E00087D2F378ED1BB97A78FE91D3A3AE73EF84 +:1000F000A114027C10EC4C043ADE2913F027DF1C1B +:10010000DAB705EA91AF5A9CA09FAEAB2F8F994DFD +:10011000EB65C7A95DA0F59FB9E3999E5DB6DAAA24 +:100120001FD7CCB77526BE4D703B995F3E1A3F1066 +:1001300027EA31BECEA6CEE2C329749EBA961DF33D +:10014000609EA6EDCF5BF3E9F32E582F9DEF11BE15 +:10015000DE06EEA712075D2FD53B6F80AE83F57EDE +:100160004742FD449461AB5E1FADF2BFBB389C1E9D +:100170001FE2787881EBD96519BEE7403F534756B7 +:1001800082F13EFC2E83AF6ED96D12ACB3066207CE +:10019000DA5E0B70CC0EADC306EBA028698C1CB9DF +:1001A00003FC86517CB6327CBE3154BB25B1747CD5 +:1001B0007C0E9AE4FF62F179BCE77A9C3F7025716E +:1001C000E618FCDCF420C4393502CE90BF2B01BF09 +:1001D0000B7E78E3B67757FA0CF19C331ED69BA9B9 +:1001E0007AE3808F4E6732BC3C1443FD5D1DDE7E9A +:1001F000CBE549C8E7C95BA44EF08F69199C143B55 +:10020000B6DF787270BD44BC40F7DEDBEDCD3D61FA +:10021000E4252F53E27E9A7731E0F3B34EC9B38DD4 +:100220002DDFE0CFAC1922CF0DAB3AFF6C3C7F6DD8 +:10023000198B9742FE5A30A684CE2BF3797E0BFEA3 +:100240005A81C15FDB52E60AE3AF35537F4DA72FDA +:10025000CCFEDA09E2BD7A36CCB784CD77DCD6792C +:10026000358C73ECFB592501685FF610EAD7C97C21 +:10027000DE635C6F9F5866B40B099913D8E9A148F7 +:10028000233F8C635F269BC699C8BE507F3E1DF4FA +:10029000DD89EE8695DF023EEE8EF4E4A863E9F395 +:1002A000DF9932F3D77A2291EF84BE117CD76FF3B6 +:1002B0007CD84FDF3FF174AA67930A7AB1B21CC6AB +:1002C000EB3D3F5592293E7B6BA39AC14FEBE5EF87 +:1002D0007FF8837CB43FBD410BB3472DD41E51D072 +:1002E000A3B9DF27F484985FD049D8A339994C4F3C +:1002F000346D7FDBAAD2F5AF12F134FCB960FCD4C7 +:10030000EE6D74A8372C5C5FFC2C26F8B89BC56595 +:100310007A7C959BF0754BD0882FB39DFA4D30B306 +:10032000C2E262FE518E3B34DF9A4E77CF365D7D5E +:10033000E5065A47BF8CF1C3C907B24AB6A9213BAB +:10034000D61BAC287C1AF8CD1F857AE16FB66741C1 +:10035000CBD76ACF003F17B267DFCF745F943D3BC6 +:10036000455D74A4C7F959FF3917D67FFB24F40FF4 +:100370004E6D67FCFA0D8EF793B681423D7CA7F86F +:100380007ADFE4EB3D15B4605C45FD8CD81A5D7CEA +:10039000B196EBAB935C9E849C8BF6BB338D7AB6A7 +:1003A00069BB11DE557718E3DF7B339D2C0EF0B768 +:1003B00047829E3C2EF8662DF3838F7B2B518FF75F +:1003C0001E37C64BF79AE69948DEAE9734B437E449 +:1003D0007B843C1E0FF2A76E027FBBF735B9BB4D85 +:1003E000E7375F996531F0E5A81ECE637A18FC0403 +:1003F0003DDE3E0439D4F5BFA1D9E4A758548B0C97 +:100400007CFB9A8C7270EC9A1BD632398920288733 +:1004100036B6DEDE4D31C1367798793D6CDEEB9530 +:10042000A061DEA7383F8C3BEF04FED1FF8F478CE5 +:10043000FD872E52BEBEAE78E4EDAF682FDE575575 +:1004400043DC2EE29263E09FB842FEC9B5F6C133A9 +:10045000FDA00FA3078B20BFA664B179D66CAF4176 +:100460003FF298C5BB2506FA1FB538219E281B62AE +:1004700071C41AEE2709786A4CFE92B03713D94737 +:100480002A2768CF3E0B467B40EF9EA85B6E0D8708 +:10049000AFEBCE4D2603934275912700395BAAD36B +:1004A00037EE4C1BCEEBCE34CA59DDB90C7C5FD88D +:1004B000AB35DBCB313F50E7DF91AA5FC71FB8BD3B +:1004C0007A2F93C13FEAD72ACCAF1D2F4F96926562 +:1004D0005CFF094E579127AB53BC61F364D72D9352 +:1004E0004D7A87F95FB02EBDBCE49AF48C185FE8B2 +:1004F000998B1DBFD6CDF4A7C8C36516D0F763C6C8 +:10050000E7CFD179783FF33CD959AA61DDE6F93ECE +:1005100007D9BF40FEA89EF35B19CF1F1DBBE65253 +:10052000E4AFE3B52FCC07BABC75F77F9D584EEB0F +:10053000BF693A341FF4793DE4931241DF101BE6A2 +:10054000777C12FA73CBB7AFB6A6A2BCFD17C6BFB5 +:10055000C78E67217F5EC7E972CCE631D82FB3DC46 +:100560009DE2709E53793C44FAD261BD13E1E7B736 +:1005700026FC7C557D7F4ACC47F523D0F15D95D193 +:10058000878E9A7EA1385B94A3F97B1BB911F8B2D0 +:100590005FD1A2802F3710E6679D711C4B3A3D8BCF +:1005A000DAE18837924ED3A11AC1D799479FC78401 +:1005B000DFBF7A3297D1432381DC8320E724D6B38F +:1005C0008D965BE203688746BA239C3DB48BFBFEA5 +:1005D00036ACAF09DA9D11547F941EDB5E06FD2315 +:1005E00025E291295DCA062B7E0EFB134DC128958D +:1005F000D0FE593999B8AEE68581DF417B738F5DB6 +:10060000857828617BB10DFCC27DBD8DB1B05F7076 +:10061000B06B4DEC302DFF09967609610BA4FC748C +:1006200006FE9506B52F7654D1FED313FB2DD114BB +:10063000559F3FF6C50E071D674B9B37C549F5D93A +:100640003F3E766C876301214949DAE0220FC5EF0E +:1006500063276A1CE9841467F1F102AFD568F329B6 +:100660009E7E24C63FB9439B42C82F2D3EB744FB14 +:1006700047EDFEA446A1F856A4AA620B1D2F26BB87 +:10068000FC4118AFF9B17BCBBE4BE72BCA4EAE5540 +:10069000DCB8EFC6DF9F525BA9D075CEE7F011350D +:1006A000A1329BEA9928AF6AA171DB8F1F7BA54617 +:1006B000A1F3F72768B7115AAFDEFDCA0E8067AE07 +:1006C0004FF49F560BFDC5788F3CF6CA8E001D2F48 +:1006D0007543253945E93577388071EED90A7FA50C +:1006E00042E7BF3B3BFFC18208EA576F2F8F22B41E +:1006F000BE395BABB517E33E57B14ACBADD9950FC9 +:10070000C2F8650D81E984AEC716B8ECC16AFABCBF +:10071000B560F0C854AA429A6526AF31567FC04EE4 +:10072000D711E508062603EFF3FD063245CD053E59 +:100730001EADE7B13CD6683D85D55F7DE9D626F490 +:100740008F1CC469B994D6E37D0512D889D4280FCB +:10075000C6FB0EDFAA9769FD55C979DBB652E437AF +:100760008C27CE2C4EEE81FD9E2D594C2E0E3C72C8 +:1007700073C6DB747DAF3E929CBE1AF6B736313E2F +:1007800036F365550EDB47E98F0CDFFE269773B114 +:100790001F1A3744B43DB43C04F13F85C34206BF41 +:1007A000D706FB420E35772585FF459ED716F223E7 +:1007B000DECB6E8B0B009C4B3AF2314E10E3BFC187 +:1007C000C7CFF2F03C3A195096822A922D084FA2D8 +:1007D0002CDD58439F274512DF5E5A264E22585F74 +:1007E0004245692F6D5F9CE5DD0DE32E4E4E2D6E6B +:1007F00077C33CBF56C04F16EF8BFC53085EE76DC6 +:10080000006FA25C5B7C5B810EFF058C3EFD098462 +:10081000BFA7FD7C11ECA30E4ECF8438E61E933E9D +:10082000A6726823F4FD921CAE6754F67E6225A37F +:10083000C7C8BD11C11E37D2CBA3D7731FF1F5B600 +:100840009CCB27C159A1E72DCA800DF45BCBB9021F +:100850007C9ED81E9E1E229FD9722E9E0466E99F02 +:10086000B37586C67161FB58783A2DB87F7DCC8A06 +:10087000F199795CA1DFEE88D192132EE05FB59CEF +:1008800093C6815FC1E7EEA9840C621E7F00F1244C +:10089000E0CB9FAF25039FDFB1B73C9944EBF0AFAE +:1008A00070FC737D0BF8B5E8E69F92CDF0D6D4408E +:1008B000F8F902BA2EBA8EC6B4025C47FF9F2B67C6 +:1008C000D4E0786C1FB25F61F15799A2E17E78D9CC +:1008D000608233208DE50341C7FE047F39E2E911D0 +:1008E00009F5B079BD597CFEB22EC6A7C90D3E7977 +:1008F000B5CE4F117C3E9E5C10721F830BE242C04E +:100900008747CDD5EF7B0BB8FF01F46922D29FD189 +:100910002D359AD18DE3672C1F4C9E800F32B0BDD0 +:100920006CF0800DF0DDC2E14C1E1A889DC1D7B17C +:100930008E9619396C1FE8812CC6CFFD7D95B32E9C +:10094000857D9B3C05CC0C299B2FF4F203472BA8FB +:100950001E4D1EAD53415711DF5CEF5237C511EAF2 +:100960001F9FF340ED6605F0A315E3BE2AFDCB29DA +:100970001E8BDF47B85CFC388B70FD61965BE2171D +:10098000F8D4CBA9C0FB281F66333BDBCCE915D2DA +:100990003B6CDFF3EBD733D2047AA686EB19D64E45 +:1009A0005CDE16684FB2B03C2A71B2F534BE549981 +:1009B0000B8BBC3D4556C19F68927C5B01F16B86F9 +:1009C000D4B5F05CAC6F2D454034F57356D1875FDC +:1009D00052389A062303722CE45F22D4689D7FF874 +:1009E00049A7847C763B9D6143C958FEB83DC586C6 +:1009F000F334DE9B13E7D3C3A778F7607E348AC352 +:100A0000E730D92DC5584F4A52D75A645D7B34B36D +:100A100063BF9FAADD934DE9708A9FE7211D890678 +:100A20007FAB3BCB1877097B71B3AADD0FEF99FB46 +:100A30008FE79F950DD6623E21F96EFA88F25572C6 +:100A40001FC1389EF4B3FC5C72C380A545C71F85E7 +:100A500039854CBE641290285E4ED751E0E242EDDB +:100A6000A7254A1FF07F238813F21387E2BDA54E06 +:100A70004AAF4389319E760A7275C34829D0E3494B +:100A8000CE5F89518C0F0F45F877C17B0AF55390E3 +:100A90004FB97EFA75463ED34F3662E013725E1E42 +:100AA00058A46B3F24D54C61F34C2B6E9774FC34E7 +:100AB0003A2E71C2B8BFFEEB374F2FA2F8B666B21E +:100AC000F15C74FE5A9D1CCCA966FAF1590EDFB395 +:100AD000D96C1FF890DBDB0FF01C8A27CEF678F07C +:100AE0007F7C7BA07E454A94477687F413F03FD005 +:100AF0008BF2A70FF827C9C6EAB9DC7FADCB61E35B +:100B00009ECC61F5A458D6CF4C9FB25CD6AF4B6655 +:100B1000FAEC3E72D40BFBC4C24FA2FE1181731AD1 +:100B200054AC09F0D3B672BA9E30E31CC966FE0914 +:100B3000B563B8DEB17645D8ADE18E2CD02F796C97 +:100B40007FCEEC9F9BDF3B63ED3C80F9A0132C1F15 +:100B500074BFD31B3719F62D4E6491007DDF164507 +:100B6000E3D930F07CC2F16AE3F1EE669E6F893D15 +:100B7000178571F087D92C9E54F24E23FD95B9D478 +:100B800035A0AF588937E0D4D1DFEAB418E295D860 +:100B900073B1F87ECBB9592438E942FABC0CDBF3C7 +:100BA00053585CF4D9C9E571240C5ECC700F7038D1 +:100BB000455DCB53AA880E9E72E2DC0CE39713636B +:100BC0001C359E1F12CBE9DF724E36D89F109C3623 +:100BD000C3F3011A0F06F4F39F65F387E68D220134 +:100BE000DDBC83D95A5C0EC68BF39D6766D082FA52 +:100BF000E65FCA685798FDA2657734B3F3A0AF45A6 +:100C0000FC05F2EC9C49C8AEECF2E49C449DDDE3AB +:100C1000EF09BD123714F2EF24FAEE0EAE8F7670A4 +:100C2000FB33EA079ACE3B5DC3ED8BD03FE3C58330 +:100C3000A2FF19AEFFF61EAC4D017ED8E7704A3216 +:100C4000D5535B22BC296017BE9DC5F8FBDBDCEEEB +:100C50004F72546AA77578DB95ADB27D2989ED4B4B +:100C6000D1E932001E2A0F01BD7F60A6CFA5A3F4F3 +:100C70008930F053883ED1F8FCEBF233CBE6FBE44D +:100C80004290BFED1281FD933955C4702EE5DA1CF8 +:100C900016175C9B1365880BD698ECF752E89708FB +:100CA00065D445F9017A3B24C921FDD7CAF9C1FDB4 +:100CB000DE519B4AF1753FF76F5A72B5EB812FBA3F +:100CC000FF52191C86B8BB4D213D2E784F0B0E9755 +:100CD000C2BA2881687C57BEA24A6DA375EBCB5679 +:100CE0000F9C0324FBC3DBA3E80D92D644F178B339 +:100CF000C0B78BADA7C53560CBA670A4B53078A6BC +:100D0000F43D2F29BA754E6966FDFC3956B1CEB651 +:100D1000C5A5F05C53205F77073CA7E3DD9EC3F8D1 +:100D200022AD4F42BB96E6A708A1F44EF3B071A3E3 +:100D30003D41694D4168BD1D969A02B0231D495140 +:100D400068AFFE9CEBFB2EACB7E5E4C000A06BCE19 +:100D5000C94105E2DED469DA5D285F7C5DAAEC4C0E +:100D600083BC55D44906576782912FA867CAE1EC26 +:100D700061FC1FED2D06789262550B3B974A32C1FC +:100D80009F4D4AE0F62389F8F681FC38BCE8F72548 +:100D900045D27EF13AFB47BCA5B08F144C2C2C01F8 +:100DA000FBB738D273C001FE5589BBA49DB6FEDBEC +:100DB0002EB6EF61C67717C73385FF213DFC13F9C7 +:100DC00009A29F759C3857F07B14E79FF215AEEB94 +:100DD00001EE96CDFF12659700FFDD5214CADFFDCC +:100DE000D84FE09BC2B13B6736B49723FFA405A858 +:100DF000BF0C7A3F32234828CB2909739301DFE3E4 +:100E0000C1D9B241D69AF4FA73B30DF1DF6D3A2726 +:100E100025E2835FF178FDDA69DE7E98B775FF0E13 +:100E20001B8C7FCBEEB76DE1CEC58EBE7F917892E5 +:100E30009A997FDAE2244EC87F94AF6842FF639D9F +:100E400083D629FD5AF64868D748BD2308A468E927 +:100E5000DB7B388DD627B768B3C1B427511E182C59 +:100E600008D9A1B416CA5716C0CFDE01D8C748BBEF +:100E70009BE02954813F6A19320E02DFD38808F2C1 +:100E8000611F587DE87F7D901AE509503E7F71EF24 +:100E9000EBEA5DF4F966DA2EA7007FF7A4009F74F1 +:100EA0004CB779C00F4F9DE67B1DF090A050FF8698 +:100EB0003E8F77C578601F49B59312E705F06E5EE7 +:100EC000B7D01BE2F99CBB991C44E4C6727EF5B90D +:100ED00061DDAA4CEE067EFF630ECB971EB69280B4 +:100EE0002301F25A6C3D7539DA1980878010A6C249 +:100EF000FA0724FD795451EAF8E703EC7FD170F644 +:100F0000615E6F1DD71FE52B764BA77474FF228798 +:100F1000ED53A7EDE99654E4E3DD6D8B5DD89F803A +:100F20001E4BDBC3E29F75B4FD2683DE58DD00EB6C +:100F3000EB8864FE21D51B965C3ADF21CB6D2FC078 +:100F40003EC5A112E201B9BCFAE4C06154BB1CDE8B +:100F50004336DF2EF473287FB4D17A6C2EB35787D3 +:100F60006D3ECC631D4EA3E315C3F89BF2FCD1216B +:100F7000B936CB616C2EF39BD2EA774B9602E6D75B +:100F80007A75F08DCA476E4542EE6CC0C320E261AF +:100F90007DBDC2F2011C9E03CB5735013CEB5DA920 +:100FA000C5908753F9B80FFF6BB7DC45E1595F2057 +:100FB0000521AE5ADF29B1FDF2CE576D753AFBBE61 +:100FC000F3E957D15E5CD5CFCE55AEEFDFABC0397C +:100FD00066F77B07904FD7533E8C2805BAA988E760 +:100FE0000FAC0319C067663E8DAA667A0F72AC39E2 +:100FF000F1CCAF817A708503FD7DA15FEBB83C53E6 +:101000007D8AFA3029A9B018E2D459B9ECB99827E9 +:10101000A41F25A483B06B65B922AFCDF4317C0643 +:1010200001FC29C61F6B176694805D58C9FD794A7B +:10103000E785B961EC8318DFFD935AA2C6E8E8069C +:10104000F8D6F1DBD5B9EC5CF7D5B90A8743530183 +:101050004FAA85CA33C42D366F810A651297E7F807 +:1010600021B54D87A7C3B6409E4AEB873323D15E97 +:101070005179B806E039B0FC49B90BF410A517E86E +:10108000DF877F5183F86C019A811EF235219D49DB +:101090000A8DD3C0FEF814B48F2DF5D7619C3F6A3A +:1010A000D7F64988F79640743082FEF3AABE1A96A6 +:1010B0005F754578B8FE42FA0AF9AACB718ECA3B31 +:1010C000C4B1221E9FE41819B092B1723909E271BD +:1010D0004AE3953C1E2F9BCFE273F80B17870BFB5F +:1010E00027DE1771F8BA0DFF07FDC65B535EC252CB +:1010F000F0BF88F344FF3B39DD6EE4F1D5F7721998 +:101100007FAC2BED437DBBEEB41FE522BA9AE98795 +:10111000E89346BD26E23CEAA8E1388BA3FA2E8389 +:101120003868F14F25677B98F589F266D83FA3E3CD +:101130002D3AFFEB58BD3FFC0F9C4FDF85FD5AD485 +:10114000FB7EF4B73FD82585DD37368F933E50358B +:10115000EFF7941EEFF7C6E179A70FF62CFD0ED43A +:1011600003BBE3F01C4EFAC032A4F307AE791EA015 +:10117000ABAB9DE1E583BE4AE487F792550BF8D30C +:101180006D7D0F2D7C87CEDBCDE5FDBD5FC81B607F +:10119000DD9B9E786A21E4B1D605A5497618BFF794 +:1011A000A77F057BD5BCFB1B4E108DF69FFFBB0DAB +:1011B000F6452CC16EF6BC37CE09FDFEF0D88E8503 +:1011C00080CFF6BE766C7FEFB16EAC1F78E229D48B +:1011D00023822FDFFB45F7737F86BA37D60379B0BA +:1011E00016DFC3DF873A59168BFB67C477D056A743 +:1011F000CBDBEDDCFB3CCA95E083ABFA187F927A3F +:101200001BE62B043F9E7A29924871B48C677E7F3F +:1012100013CF5335F17CD32D3C5F768EF3C311B1E0 +:10122000EE8D6ADA692BC4259EA415A5C886838F26 +:1012300097C2F3627C4ECECFC2EF81DEDB6E15E744 +:101240004A32603FF4D6FBAC5E9657A575DAFE3E97 +:10125000B4033D1DACBE0EDAA11ECDFA8BF59C7A0F +:1012600033A23E9C9F16828FB0BCADC58274A3F39F +:10127000C7CEA3F09CB2A8FBC0DE8BFEBFE3FC1C74 +:10128000829FC555026ED1EFBDEDB280BB88C12DE6 +:101290000BB88B18DCB280BB88C12D0BB88B0C70DF +:1012A000FF2EA2391CDC029F0AE0CF85E7780641B9 +:1012B0008FAD11F334B1BCCE7DA555BB418F3775D1 +:1012C00032FA45E569BBE19CC5D95CE6B737CB424C +:1012D0008FB0FC867CDFECD7C02FFCA42B4205BB73 +:1012E000B436C17706F5D08FD877262F3C7273C6F7 +:1012F000B00E9E531B8966CDD1C5913BCA33085DA4 +:10130000CF99FBCA33AC74BCCF9F9F97017AF9F495 +:101310007DF61BB50BACE3161E578A38C916A5AE71 +:10132000853CCCD1F2829C83C81FB11E7921AD5F70 +:10133000C1E8D8CACFC1B45E1FDF0DF9728BC349B3 +:10134000340AF7B2EAF86EC813254D63F20E393548 +:10135000D827264B24F4033B6C815EF4039C7D1953 +:10136000E00744150CD826D3FAF286BD0B210554AC +:1013700048F5EB993C8CDF767F49FDDDA50FDFBC9E +:1013800012E6D92513A79C0AFDDAF0FD0C07FB8EA7 +:1013900009463A23F299F285FC2205C715FD46FD60 +:1013A0007D2E5F1D36E69F51BF8644D0B2EC0E9E67 +:1013B000A7971ADBD1AFF9D6C07C8C37CEDE1ED909 +:1013C00052A0D78FECFDB47EE62FA5350F5E06EB5D +:1013D000B9326FF52C98663DDF4774813C829F12CD +:1013E0008836D8C599D3183F2739BD55B02E87E622 +:1013F0004DBC07EC91DD8BE7FDD41BBDD636FCAEB2 +:101400006924A30E1DAAC70D7661A7D5973A1BFCC8 +:101410009B0EEEE7EC6670D3F7713CB55273C1FBDF +:10142000747C1CCFD1A029303EF81B50FFF8579791 +:101430003FAEDF6733DB1D18BF341AFC94403DF22A +:10144000A16AF380FE790FBAE2F7938122FDBE858F +:10145000391F08F611E4E9DA69E5574E9B1D2A4564 +:10146000FED04CA7EDBCFDC834EDCA69409FDE49F3 +:10147000139CDB6774147E406B35F7037EF936DA14 +:10148000B9569FC2FC37DF69F4DFDEDFA891535401 +:101490005E763EF336EAD7DAFD8C6EADFBDD56881C +:1014A0008F77F2FC496BC507E8C70564827CDF6A69 +:1014B000EBDB0ADF07B66E23F1340224AD0B877332 +:1014C00041BF7EF40C938743160BE6590EF5CCE82A +:1014D00006FF446A667E5CAB5FEDB1639E96C58D88 +:1014E000344EDA01F1FBFA6682F982D67EE66F921B +:1014F00002261FADFB5F45FE117112F5ABA680DF22 +:1015000013EFB27BC02F49AB1ACC60F2483C3910C4 +:10151000C754F9762C467E2B2E037E3BB0FCB9AD2A +:101520000E98B78AC661F4FD9DE9DA33305EE019A2 +:101530008940BE73A7B5B302BE3BDDB958750660DE +:101540001DBE65A37E0EE817E25B86F151AB6BA56D +:1015500007F4D6B63616676DA37116C4513B9F6962 +:10156000433FAC558DF4C0B983ABF64BB7E3FB8179 +:1015700068027CD14AF109F5AB829706F5E7C9AE5E +:10158000AA1ACE80F30902EE8FAC83AB003F1F3D59 +:101590006D27015D1E3BBECABFEB2E78DF59E2917D +:1015A0003D10AF0DFAC05FA6A2EE69A3F54EABD712 +:1015B000EE817CD6155210F6DFE2B9FF9255CDE8E8 +:1015C000F883694C9FFD609A8597362EA77CDFC112 +:1015D000192802BBF621E703F85393A8FEC77F50F2 +:1015E000BA340DA01C41FC0A7475D9B5E26FEAF853 +:1015F000D455C9FC0AB10F04FB42B81FB442417A6A +:10160000A7517A83FE1374BBD235AD04F0B49FC3E7 +:1016100095962761BE80046C88AFA415BB95B5056F +:101620006C1F295CBEE159AE471327794BC12E24AC +:1016300026B3FD8544B9DC120179A962C9D3A3E2BE +:101640003E35EE3B8D24A67A7A74F814F993B349AB +:1016500031484F12FCB502FED49169E1E301F15E1D +:10166000681F2B02E9BEA4335004F1A9D8C712EBBE +:101670000EB645D6EBF5D901AECF82F93C0FE96441 +:10168000FB244916CF24CCEB44B3759C4D5A50C66D +:10169000CEFDB6235E7E3E8DD99FC42C2FE6EF464D +:1016A0001263701D8959A411DE4F6C4F91DADD7AF7 +:1016B0003C3BD1CE5CCBF1332AFFE06FB941FE99C0 +:1016C000FFDE4AF91AE238D0039C4FD9F7105C1FAD +:1016D0008CEA39AE0FAEDACFE8DEBA9FF95722CFE7 +:1016E00043C8702EC8DD594B4609D8F956DB30CABD +:1016F00061AB452D697385E47B22BDB0382A8879BA +:1017000089C533724BDADDA1F73EB2AAB8AFFCD17E +:101710006282FBCF2F3EF37A501F270ABA98E3204C +:10172000D0BFE037087DFCE75CEF27A03F5B2D03CF +:101730005BE19C8CD09FADFF76AFE17B17B3FE746D +:10174000284C5F39825141FDBE12ECD1C69460191C +:1017500088A665D406868FA802323015D65F7AF443 +:101760009F41CE89A2E23A630A0717807FAEE44523 +:101770001BFC9BC8FDB7415A1FF27E6CDFAD270AE8 +:10178000F75344FECF0CD7E79C8F04FE459C0AFB21 +:1017900048D0DF9DC7BF03CC6372353D4F32D8E3DD +:1017A000317C1DCDE2B4F1EC8E78FFEBCA4B8A7927 +:1017B00084FD0BE19BD15BEC87C1BA6A0AC6EFD707 +:1017C000F93CD3374067FDB9EE4B39DF7FCCE5E616 +:1017D00049BE7F90E95B11571B661C517F60E38512 +:1017E000BF3F71FE5546B8605B12C67156547BE030 +:1017F000FCADC6F163EEAF10E5D361E157B961FE10 +:101800003FB1EF877D04BFC31DCB6F46FFC239DFF9 +:1018100062FAEE9AF123AC23DCBD0CA2EC30ED535E +:1018200075643D4720AF19E588457E5904C125857B +:10183000E35E750A7EDF00E3D5A0FFB4C930BF19AF +:101840009E08353C3C13E1B7C3B2B719F8F31D0E3F +:1018500057E6AE0BC37F3FEF779A9FA78EF6A86D32 +:101860000A85376EBE5A0C76BCC3A256EC7485CE80 +:10187000A1C72C247F84737B4D9D3BF2E0DCDEB658 +:10188000B6BE7AE08B386598C0BD04895E23DCC99A +:10189000F5C673BEA9BE04437D72739AA17FBA3F99 +:1018A000D3D03E75C37443BB3B5062A867755C627E +:1018B000E89FD35961A84FEBBAD2D03F3F586BA8ED +:1018C000CFE8BDDED0BFB0AFD1D0BEE6AF59071E66 +:1018D000013DF11A3BCF4E1C6A995E3E44F9A33C90 +:1018E00076AE316EAE71FD37759ABE9B1C879FCC6C +:1018F000F45FD361DCD7CCF45D81FAEAB30282F9FC +:10190000A2A8EDF95B81AF52D610BF9DEAD528138E +:10191000FF4F345E88BFF3F7C3BED267D5ECFBAD93 +:10192000E7A0298C9F7BC8C4E7B5AE38668FCED5BB +:101930004EE017333E5F6C67FBCF8BA38CDF090D46 +:1019400071BD3998C7F4C844FC2ABE2B3AC3CFEB0B +:101950004607DDC89F04BEEF91605F416A83EFB721 +:10196000137CD1E8B7DDA20C9062DD7C0F73BDB3B0 +:1019700093F37BD746278EF3A38D2958EEDAA8E29E +:10198000F39F6CCCC332B8D183CF7B36CEC57237D0 +:10199000F5D7A0FCD9C66AF65DD0462FF6FBA78D19 +:1019A000F558EED9E86372E75BC1BE93E2FA879C13 +:1019B0004B089B2FBFCC653C271DA20B851CDE5717 +:1019C000153FDC1F311E3EC6BC2F375CF03B830D3C +:1019D0002757070FEAFABF9B17E3C2FDEA39640EE7 +:1019E000C6A313BCFFF9465FF060CEC47A51F00B7A +:1019F00039BF263B5C3FCA0778DEEA5FF39A1F0EC9 +:101A0000148C8F9F101F99F8B54BC2EF048A4026A3 +:101A100031FE1B4ED3CF23F49FA8AFED880B7B9FE5 +:101A2000C09A7CC6778D9C3F1B4DFCB9389FF167EF +:101A300076FEFF5BFC79EABE18F4974F593D198991 +:101A4000FA3CCE7D51F89CE43909D80192A05501A9 +:101A5000FFC216808DFA5DB7E55B79BE22DB89791E +:101A60008C88AF96EFC8DC958AF9A8CF9C44037F99 +:101A7000A8110E33537CA42C2104F3013E27DBAFC5 +:101A8000BB95FB4B0AA52BD84B8F25C4E7780E4797 +:101A900077AF853C3E3FDE93AF4EA057E7D9065C5B +:101AA00013CBD918FDF915E56C59FEFF8E9C093E44 +:101AB00027E767E586FB3EA191CB5954FE83286753 +:101AC00082CFD7807FA59BBF2D9FF9556D9CCFC539 +:101AD00039B85356D5B213F29F27B27AF4DF997D05 +:101AE00087CBC5C4F8CDB719F4A0494E277E3F82F5 +:101AF000F9711D12DABD46476C202AF6ABBC7F6136 +:101B0000FC8DA1EB7ED745E5795C247003C0B596CA +:101B100058701F78AD231AEF21225DD60F86757C91 +:101B2000FAC454EDC17C90178DA8CE2494238CEF79 +:101B3000E99FD791844700593D701BCAC11C228D73 +:101B400000DF4BC349722B1D77D7376331EE9A33D1 +:101B5000BC16F1B00BF240B00F5D455D912471A44D +:101B600015E4C6CFE2990AC730BCEF803C43169516 +:101B700021C9D32103BFB9A48347E9FBF20BD47F6A +:101B8000A04094383CED2E0BBCE295A19F44583CFC +:101B90005B769AB5CF2783EDD4B490856404DB2FB0 +:101BA000AD0EB4039C53C979E719E0A9E49FADFFDA +:101BB000928674243AE1A2F015A8F0FF14CE1B041B +:101BC0003629A49D963F8CFAFE13A0C73704EC4E2D +:101BD0003BC8BBC2DAFF607538410E7364DF2FF378 +:101BE000295DBF2D7B939E477FC63F937D7FA0BC21 +:101BF000037E8E8506A75F52B82AA24BEB6F8265E3 +:101C0000F3E7887777A89FD00FE6FA0FB6B0BC400D +:101C1000FBBD8CCFDBDB58FD04E7EBFFE0F2F03BD4 +:101C20002E0FF46F33E02F2285E107294AF16FE789 +:101C3000F4B338FC0301885BFD945E4ED04E7D8882 +:101C4000FF7BEB76FAB660F7063C17260D78C9974E +:101C50005121BC98C7D1F2BE87E3D8E838F03DA344 +:101C6000C3D1A939281F45D6F7E17EDE05C651D27A +:101C700029FE9452065FB3EC3B9DCFF637B59B200F +:101C8000DF4F1108E3D9A95F28B9F5EFFDCDF4F9CD +:101C900018F87A22FAC83155439067A908DA55C86E +:101CA0009398E97416743ECCFB271BF3AF27A05B17 +:101CB000FC74468F8A0D570461DF71D1F98DB13004 +:101CC000EFE20D9541388756B5A11CCB8A47D93E26 +:101CD0004A855575C17750951BAEC2FEE51B9662CD +:101CE000BBB6A106CB451B6EC0E70B37AC08EACFED +:101CF000C155B9E8383ABD50114DE7D3E9F3F4E9DD +:101D00002AC2A1293586E70BCFD71BDEB356786FE1 +:101D100062E7687D97011E6C244D82BC8D1C5B8D33 +:101D200078D99A9AE206BC64F075694A26CB5F14AA +:101D300010F46FC47E0CA567FA74D80FE992DE0622 +:101D40003D634B09123CA7A30C4F86F53F2719EFC3 +:101D50008110E5B4E9221F3185C92DB9B0BDDE7B04 +:101D600075FC1B2E38F11278A8EEE5B9B45E1E7F23 +:101D7000838BF2CDFBFF945207DF43ED7D95A0D21C +:101D800079697AD94EF84E6B6F5DFC8F1369FF6BE2 +:101D9000F6BCFA032BD5037B574AD8FEEB19B49D4A +:101DA000C273459E6F36C03DEB652D1DFC89EB89E6 +:101DB00082DF852D2D5057EE51218FE91986FDDCEC +:101DC000BA357615F385E7291C65843C0680CAACD4 +:101DD000BEA80CF42CFFE3EDBBE1DF94BFB2BA6EFA +:101DE0007BEB7BA0F706650FA451D776B99F77D11F +:101DF000F1B29A8A9DF07A7617DFAFDC65C7FDCA2B +:101E0000B55D4CCF6613CF08ECDBF441FED50AF785 +:101E1000C6A9EDD110E716123C8F3BB5899D1B3A40 +:101E2000F3A8BD1BF2E6670036684F97300E3EB14F +:101E300091689B73C8B87A7D8EA8533980FB3016A1 +:101E400098DA85DE977CDF96EFD4E9F905BE644326 +:101E5000DDD3412A6D14DECC2682F793D8283FA02B +:101E60005FA63986DBC10E50DA68656C1B858F8FE3 +:101E70007661B1A8FBFC0ADC2F4212A89DF280BB60 +:101E8000164C71E0FD696EBCAF4ABE9C38C1AE66AF +:101E9000540F1CB0D2FEB3B472D4F7B389EF8541AE +:101EA0005ACED3F6627DAE23D80EA9390BE433E8BF +:101EB00078F3CF333DA311A702ED15C4A3F0FBE4E3 +:101EC00030EEA94A61F6BA9A74E2F32B491F964B99 +:101ED000C82096D790112CBDC489F7BA2D74503BF9 +:101EE00045F55CDB7437EA238B837D4F52526DEFEF +:101EF00086BC5EDD326ABF68BD7E80603E7F69B5AC +:101F00008AF7320ABEAD1DBD4F42C5EF3589A2A684 +:101F10005FA7B3FB471F5D8EF785A916E3F9EF7B3B +:101F2000B8DC3D389DE9FD9D12D747B7303A13C55F +:101F3000F7C84DB47EBD771ACA236D1FC0F6150EC3 +:101F40006CDF69F5B625D1FAF10F0B09EC0B1C001B +:101F5000BD90181AFF78CDCDA9900FEADE926B855F +:101F6000B2D627BEE708703803E9FAFCEF99D5141A +:101F70004E9E87D3E7777671393E309D607986AE85 +:101F800007E59FEF9F255D138FF9A5C5A45E8173BB +:101F9000BA3F9FCEF29241C95B85F0AE67F7170852 +:101FA000796A16FCA1046C69208F1E37AE4FC07F82 +:101FB0007D90E59FAF6FAE791EF69B9634AF27609C +:101FC000D742E7E5D8B989F21555B82F5ADF65270A +:101FD00090EF969A7DBF03795ED16057416EEA9B80 +:101FE0006A707E20349C2BAAF7ADC6EFCE573834EA +:101FF000279C83B8BCE11EA4F3E606CA8B949F63BA +:102000001A96B3FD476AD465BC4FD487EF27555065 +:102010005F86BE3F75C9F3123B871F2490E7ECCE65 +:1020200027B89F90A010DCFF89A74A09CED3AD68DE +:10203000DA7108E2ACC974A1B07FA5129F0DF03D22 +:102040009E9FF6E83DE7E3D13F07BF662AD287E5CA +:10205000A337C82AD80937CF2BBF7E90609EA4A390 +:10206000A13D807EE9123A195DF7D2CEE243802786 +:102070003A91B8077018F49CC37BB90AF0C156288E +:10208000EC77AD5558FEA698B03CD18D700E0795F3 +:1020900087319E716CB0E1BC6B1D2DCCAFA303DA10 +:1020A00053C7EA0FF33A24EFB709DFA71E9E04FADD +:1020B00021CF29C377F5E4F6D851F907BDAA151445 +:1020C000E27A3C47D87A660D6A32C1A37801C2E44D +:1020D000F86E662F227E26E9FD8C4A6760958BCECE +:1020E00073F460D3D6683ABFD5E579D3590AF24F75 +:1020F000FCC01F825F5F48EF4C07BBF79B54E65F55 +:102100002D3AFF548C3E6F1C3183F16709D871BAA8 +:10211000CE62B0CBD4FECE063B4ECB52B0E3B42C55 +:10212000B985D9F15960BF693F0FD86DFA3C82DBA0 +:102130006D07B7DBC556E724B0F3A5C73583FD2D82 +:1021400079B9DA609FC5FCB133549423CF41AFA174 +:10215000DD916DB4DF15DC7E1F2BF7AE349CFF9B49 +:10216000C1E4316E06D31BE4E540069E9B58C8E4EB +:10217000F1DD5708DE677AF61546F7809570FFC6E1 +:10218000483FD0E79CBEC30F51FA4ABB925FF88E1E +:102190004EFF93E901B483E3D14D9D9189F3977686 +:1021A000D5C8705861D615B3267F9700BF5D98DFFC +:1021B000C7A3EFE3795ADE0CC87710E70D2D10D7CF +:1021C000F8EC38CF62B9652BC4C99F503ADB9D63E8 +:1021D000C72B01E0285C2B0649302885EC2AEDEF5F +:1021E000813C56E909D913A0EBF534917690DBD404 +:1021F0000E66CF12BDB04713C27772BD03CE668E96 +:10220000D6537D4E437D72738AA17FBA5F35B44F3A +:10221000DD90676877073C867A56C75C43FF9C4E23 +:10222000CD509FD6556DE89F1FF41AEA337AEB0D17 +:10223000FD49403B5AA0B3F7857D3E437F108B0C90 +:10224000A0578A4CC0FF9EB9BFD9F8FE49EADF3AD1 +:10225000C0CBF3231E4B09AB633BD51394E55F78EA +:1022600014ECCF5CBB7380BE7F7D9335E40F13F01D +:10227000AB880C7459EA8B46F9F398FC6B731EE239 +:10228000E62381C320B725477C780EFBE619312E63 +:10229000E4039E97582C4723BD3E392E7B2026B958 +:1022A0001922135788AE9FC04040CFE74910F7CBA3 +:1022B0004DEB17790B226F67717FB34426D17EF601 +:1022C00014239D2354239DA3F28C748EF118E91CD2 +:1022D00037D748E778CD48E739C3D20B8FC27E2481 +:1022E000C513A17EEBA46A23DD059EE7D2FF85C35B +:1022F000B319AF1EB2FD8F203713E1F30113FE882F +:102300003C1FF5FE675E16EFD0BF658E329DBEA600 +:102310008A12F029BDCCEC8059FE05FE8ABDC9E4C5 +:102320005B17D203D1EBB7A6D276CF20D303B397F6 +:10233000B861BB8F0CAD9E3319E89A469E15DF211C +:10234000F9E0FC924EBE77CF80FDCC0D9EE100CC33 +:10235000DB65C7738BC70EDD79D8424BEDBC1BED37 +:102360005A4CC1E002F007F6CC88463DD72C7BF7EB +:10237000805E88DCC5F64FCF2CF0AF847E4392C5DB +:10238000B3C905FA82AD6BEDCBA3F1B1D14E99FD86 +:10239000E4C0EAAD0398EF607129DE18E7423FD947 +:1023A000837922937E29F699EC9A29FF213518FD2D +:1023B00068D268C457FB5C9F5BCA1AAB3FC7CF7F2C +:1023C0000CE3F34524D00EF6FDD26ACF1B77009EB6 +:1023D000AE7E7D32F87163F22021FC0E32FCF6E114 +:1023E000F703648984F835E375E992B7DB20AE8E94 +:1023F0009C32B800FC93A1513C6B43F0FEBE08E652 +:102400003F9C7894C545A5AF36217C4992EA01BF2F +:10241000695F3CE39B131219DE47EBB38FB3F825DA +:10242000ABD9ED0136DCE7F6BC00F513EB25BCEFCC +:10243000BC6C4893E1FC58B69FB6D3F94A36792B69 +:10244000E15E8EBA3BD9B98D5F7EB816CF9705BFD6 +:10245000CBDAF795FBF11CFD89EFB1F63927037252 +:102460002CADE707F8F85267652CD8B52D12F37735 +:10247000C6D097C53D8B047D767DFEC2774A43F476 +:10248000693CEB391C4B9F378D782F8B2363E925F3 +:10249000E28C850A8B23447C5145BC585E46FC582F +:1024A0005E6C7C91559087F8AD251EAC6B3CDE8848 +:1024B000AAD6CA9F043AF963498ECE7F1165678216 +:1024C000773DEC6FBA2ABD78DF4F5601F35B4225AA +:1024D000B3FF49095ABA87B61F17F78F3BBC12D210 +:1024E000EB568FCCF29E7E05E42D985E3C0BD69386 +:1024F0005CC0CEA1676DF7A37F7B0D75F3201E1D19 +:10250000F8A1120FE708F1CEB230F17928AF663AA0 +:1025100047A804F09C6C89ACCE802F561614B87670 +:1025200042BC0EBC01DFB9CFDC93715D603EF22985 +:10253000FA2913F53BCECF25EDE3F7502DF3BA2D55 +:10254000A057F6151BFDA0057CFDA2BC9CD4235F03 +:102550005D3E57F2B4533EB85C2103B06FF0B7AEA6 +:10256000AB64536015E0A7AEC74ED8792292A63F60 +:10257000CF2DF44C1D117FDE43C0676B79FEECDD7F +:10258000423FD2FBDDEE69076BE9F333355210F2BF +:102590005FD739A8479609F78AFB57B6E8F2DA6B96 +:1025A000BB5E1C92622FC26FFAE174F9CB1921B99C +:1025B0009717062C00E7D14724768F3D872B51C80B +:1025C00043850FF59DC4F55D72FD5E29451E3BBE3A +:1025D000D91E50B922603F32F8EA12AB930377E874 +:1025E000F55C5E5FDB1DD09FFBF722EF4BFF305E9B +:1025F000DE56C3F4599223C0E326763E36B5993DA4 +:102600004F272312F45789735322DC03051B2DB483 +:102610009CE2F0D72C51E1BCDB796647EE3D50AA35 +:10262000D773747901C80F52ADE9FF119DD7EA58ED +:10263000A2B5D0F9E89AFC60EB9B65DF1D0590CF51 +:102640001A94703D3153D87C51AE20D311A6FCA30F +:102650007DC317F81D81390F6957FC4F409D04EC6D +:102660004E3817FEC3A8EF63FB06C5E1B4E39759E4 +:10267000FE39C0F73F294810E797310F293B48B290 +:10268000DEAFB73A1DC97ABFBE78C069A8CF3A920B +:1026900062E83F7B5035B4CF19CA33B4CF1BF6186C +:1026A000EA979E9D6BE8BF604433D4179DAB36F428 +:1026B0002F2735867AA56385A1FF62E76A43FBE58C +:1026C00029B718DAAF506F33D489CFBB0AF88B58CB +:1026D00062F13B96317927937E5EF070B2A68F331C +:1026E00046F33A2936A4931DE8A2B79FF33C2A94F7 +:1026F0008B24AA7F69F9459EEF29A02FD5C3535893 +:10270000FE46DB0A47AA32B5B3BD409FA7020A01C5 +:1027100038EE8F6C6D5E0D7CBF29D62951BD727F5E +:10272000AEF8EE9B723DD52B4FCD7DF000D8B9A70A +:10273000F62BC818A1EFC259FBD648C2F231D31DFF +:10274000183FFD10367F4A21FE52F07CED87168F30 +:102750001BE65F6F19CC80F2268BDF06F0355A7CC2 +:102760001E287364DF2180F3A6F8AE0C888F8AE6FA +:102770007D120979D7A25F5924B0EB4F3DFB4EC7BC +:102780002574BC4F09190138FA073FE87D8C963350 +:102790008F60F299CC9CFBCE8357013E07AD985FCA +:1027A0007CDF46B613DDFD14EFDFC9CE45AD76C83C +:1027B0005E05E443F1A4C2F990AA22661FDE1E273B +:1027C0002F7B6356F99F01AEB753C3DF23708ADBBB +:1027D00017F1DD71669E27F98618FDFBD7E0FBA295 +:1027E0006E3D174F7C93F4EFABF8BE55A116301A2F +:1027F000DA5DD84E971980F557C27D89D4DEC4C5FD +:10280000E7298097F2E84F2D78AE12BC48DA3E22D5 +:10281000B173AD4461F70191F9CAC8A81F9C09EFD3 +:1028200033FF19F3FCB45FB9C3E83FCF24C6BA390C +:102830008F7F4911B31756D37D30971499E166F70E +:10284000C1E8EF35837B811B791E8FA468F87DD6A4 +:1028500003F35DC5E0578971E614F27BA2F8FD35FC +:102860003759D83D29E6759407CAEB217E6A204581 +:1028700025B08F37A390C125DE235C8FAFE472B300 +:10288000D279F84F601FB617B1F8DFE27026FD333A +:10289000E58F55815802FC736303892DA4FD7CF9F3 +:1028A000AEFFD468F9CED333D6FE98BEFACEBF4C75 +:1028B000BBF3115A4EB2F80F83DF4EEEE77E13A939 +:1028C000C27D74293019EDC9C5DAC57DD9AB7F5FEA +:1028D00008E7196383AA93C21939FD2C9EABCC86F5 +:1028E0003D98D9300FC70F19CED59F57DA975DFEA7 +:1028F000FBC24438BF4C061280CEBFB2B3FB7A8E07 +:10290000D09082D6BFF15C3EE611BB8A7CA7607C8A +:10291000F15D3C393882F7FF541215FDAA31F4E716 +:10292000FC63E603001CF867227EC06F8C285C8D78 +:10293000B1E1E98A7FC0B78E78FC9D92BA42261F2A +:1029400062DEAFCA9FAE2CA657049F4F041FC597E7 +:10295000E15CF4A942467F510A3C99BFCB3DC5F9E1 +:10296000F05421FB2EB7ABC88B78FD38FD8FB956DC +:102970000A43A3F83E6182F536F371FED6F55E2C6C +:102980001D2E2962FCD318797170DDF577D2E162D2 +:10299000E13A23F8A3E8E2E07AE0EFC49746467E06 +:1029A000179F35315C949E67809EA46A84DD8B946A +:1029B0007071F0FDE26B802FE1E2E07B0CE49D0C96 +:1029C00030F8AEA3F10FF89D61BE6F5A8CF1F51A85 +:1029D00096878FB4A918AF46D64A98B79348B6954C +:1029E000DD5FF1B77DE7344ABF2432100FFAEF39CB +:1029F0003BCB877A4672F579E167385EBA8AB4E7ED +:102A000000AF8DB95C1F541BFB3DC7F94EF413F7A3 +:102A1000F1D015F1EFDDB2F1BB658B83F0EFDD5442 +:102A2000BCAFFC30D7EFE6EFDD48A98AFEF9560BC4 +:102A3000F5CFC1AF4D68EEDD44EBB7A746E23E628D +:102A400063CA7F0C49201B1DD45FD7D149C0F3DE78 +:102A5000C623CE6CEBF8F85827EF2BF38739EF73CA +:102A6000439EEF37853A3BBEAEF72567B6CEEF2BD8 +:102A700024C3160C9AC88885E19F9FBB4AFE6AF85A +:102A80007F3A81E17F5FB617F5BFB017ADFFF68FD4 +:102A90002AE433C0EEC3BECD484C24DA83F6E97392 +:102AA000F3F4FB6B5F703D6735DD9F13B2D37FDFBF +:102AB000FD39213F46228149E1C657F0F993928AB8 +:102AC00079682A167E88071AA32F4C97818D03B543 +:102AD000F03DE6E68D7397427960A3B6F43475E471 +:102AE0005ECE2E2F2BC2F3D2EEAA76F4778807EEB5 +:102AF0005549F41EA9D5FBDDC9F583867AAA6FA8CE +:102B000056EF774F6E1E36B48BF3D356173B3F9D6F +:102B1000EE3F6BE8DF61B1E0FED7C86AE2EF2986DD +:102B20007CF588A1BD428B0EC4C741DEFA9C61DCF6 +:102B30006D6D8CBFB33AC852435CA36878EE3AA778 +:102B4000D3B1543FCEB42EA7A19E1F4C31BC37A3A6 +:102B50005735B417F6E519C775CE35B497F3F36258 +:102B6000958E72E373F2BC017E815738B7BF01EED8 +:102B70009950EEC53C2AEC1DCF2F197B4EFFE56C1A +:102B8000ADAC28712C9F07EE99CFF7E358BE40C833 +:102B9000673B974FC19FE3D17F669E560E707C992D +:102BA000CDEFBBCC737A30AE8E64E70AC5FD5C66B0 +:102BB000B9B995FBA5EFDBC2B77B47FD56E33D45B1 +:102BC000213E65F714BD5FC1DECF275AB27E1F7765 +:102BD00025F71B6365765FD744F7565ACF4519EE44 +:102BE000AD0CCD138BCFDFCF0C3F8F58C7C5CF2394 +:102BF0008FB31EDB05EF5DBA4BE02B217CFBB747A3 +:102C0000F1956A90EBBBC6F8F953B0DD6ABABF49DB +:102C10001FBF04308F7DE1F845A3E682E8F4E2D7D8 +:102C20001FB710A4DF57F5833532D80AF73D4D346E +:102C30007E7F911683FEC4DF686723C1A6A6E238B3 +:102C4000DDC0FF1A696966F10DBBBF9998E2199260 +:102C5000E7C2F37B91B1835BBAC1DEDF1EEB09787B +:102C6000681C631949043CAE26C35B202E7FEB57DA +:102C70001136C0F3C7BF7A117F8F3214B744C9B081 +:102C80007F78B1F0897C8FB84F85FA4DF520D73326 +:102C9000651A7F51518DB39C4F413975AA25B8FFF4 +:102CA000CFBF6BF98C7C900030CFE4E73FE3A842C4 +:102CB000995C82572192F90950B2FD9AB86795F74D +:102CC000F4F88D057CCC1BBB6FF3E9E07F45C23A7D +:102CD0005E2C32EEDF7C421AE206002FF02318A9A8 +:102CE000901FA8C0FB268B9EA94A867278638753E3 +:102CF000B186F669CCEBF58DA3378E733998A2684F +:102D0000C741DFF9C6B9D7E9375C3F142ADA6FB09B +:102D10001F1F0FFAD784C913AC9829CE2732BC8E57 +:102D20009787177920E9E1D72B0DFBCB3E9560DE25 +:102D3000E813B61FB555F263FE50777EB44B867329 +:102D40007C9691494C3F07D9F71C708109ADBF288B +:102D50000DE3FEC844E7073F8F60F74B3D9EE7FB5E +:102D6000EF22E677CD61E70559BECE76C0BB6A009B +:102D7000ED70ACA707F39F815CFDB9DDF31C7FDB31 +:102D8000F3B5F38097B78AB4BF4079342203CF8F6D +:102D9000A8C5C44326633D488AE07E80CBE3207FFC +:102DA000F429D1E29C61F0264AC8DB6CD6E99BB7D6 +:102DB000E3C3D3257A26A3CB953399FC9F9FA6C561 +:102DC000CCA4F39FB5B1DF33391BC9CB58962F4F35 +:102DD00019EDCFE02EE4F5B33C9F7E368118EEC1AD +:102DE00017FD66F2F2F4468777B3CE9F547F68F7FB +:102DF000435C9998C5BFD3D308FB6EFE19164F34B8 +:102E000075BE6D83EFE3E6CD2CBF12E0827E78FFC6 +:102E100086326C83731199D37C393367C3F7D244FC +:102E2000DB07EFABC336F8BD848FF939EF8FAD2CDC +:102E30004FF571042B053CF366D65C09EF7DBC6051 +:102E4000D806FC305A9F3D8C79B67933BD38DFC740 +:102E5000F34CF5AB595D25D4EEBAE0DC363FCF9F9D +:102E6000C7FC3762E1FB7E26BB6DBE3F519BF297EC +:102E7000B5C09FE3E92F8B63F0D08F5DF03B62EC30 +:102E8000DCAD6FFF1F0FDDA522FF9C817957072363 +:102E900008FB9D9FBF4F5F7D9C3E88EBD9563E92BD +:102EA000F1A352CC9B387B709EA387E1FBD8FB3CFF +:102EB000B9987F27CA20FA293192CAD6D76F5CDF2A +:102EC000F29922FE50D977A5A67B45CD7ECF254528 +:102ED000E277D9781E6E22F97EF6F517EED2CBF79F +:102EE000732F4D86F1E73FF7CA2428C3C8F7D02FC8 +:102EF000DD13CB772BE9B4B17D85E1CB60FC5B3D85 +:102F000036DC5FD9EC7CE7B21F97E277EB7EF89E68 +:102F100085EC37AEF716FD796009E21B6B68DF9D23 +:102F2000FED7420671DCF57DC6E763CE019BFC3718 +:102F3000339FFC27974B95B0EFBC9B09FB7DB86690 +:102F40004743521BDB4FF1DB61FF2B68844FDC836F +:102F500096237B3B80AF93123A5731BBA7DA58696F +:102F6000B4EFE29EB435D1CBD01EAEE930C3ADE1B3 +:102F7000B99B9B3A27580FE7AB3D00372D6F9DC992 +:102F8000F8617DE4922320DAA47410F7F3285CBB87 +:102F9000002EA27893209FF00789F9BFA2FF87B384 +:102FA000077F3620E1396B07EECF65FB7AA07FFA09 +:102FB000D0F01989C247A2BD38CE47FBFFF01AEC0A +:102FC00077921417BFC76E7827FC6E4EF37ED9C96F +:102FD000F21381AD70EFD0C7C58CAECD8EE801DCA9 +:102FE000FF0A9AE593C14DE17A2A1C5C221F6E9676 +:102FF000AB9DDC4E5D56A2F5C37BD6CC3EBC876F45 +:10300000E45B6C7F99E20DBF6FDEAC1009E83677A8 +:1030100078E49BF85D500AC17382E27E29E2D11CFC +:10302000E0E78ADF4578D359E1807B1292E22D7880 +:10303000DFCD666763BCFE779C93248B979D0B6DF9 +:103040008C877B4B56DAF9BDBC777EB18EEDB3A988 +:1030500009F0FDA42BCA87F7618CC4CB084FF98A0D +:103060004F67C1FD1569E7A34B609FE1A71CDF62B5 +:10307000DC459523B3FCD1217CB8B2F8FD6F89976C +:1030800075811D0CB6BB246921EC875463FD532563 +:10309000251EF0FA08C7039C1D66FB1C4127C4C50A +:1030A000AD11DA031500CFABEC77093F756A71F10A +:1030B0000563EFC94D6CEFC4FD929157AD98B714FD +:1030C000F7D20BB8DEE776E67FEB9E5B91176F8D4C +:1030D00057884B770FB558572BBF2FCB4C7FD1FE5E +:1030E000CBBFCA61F9C3E1E1F74B8C13977DC9D718 +:1030F000D50ABF43A08B235AA97D03385BE177082B +:103100007471CAFF006896913400800000000000CE +:103110001F8B080000000000000BED7D0B7854D5DC +:10312000B5F03E73CE3C924C92936408135E9E249D +:103130003CA2063849262121014F12C060830E8827 +:103140000A8238418400818C68DBF4F13713021164 +:10315000B9EA05B18A36B603172B6D6D8D962A55DF +:10316000A4830F8A7F9146A0142DF58F4F50908C29 +:1031700050A5DECBBDDCB5D63E2733E72431607BDE +:10318000FBF57EDF1FBE8F9D7DF63EFBECBDDE6B4B +:10319000EDB5772E5C809FAB18BBA0978F8C17186E +:1031A0002B666CE55FD3582823FEB9C29F4B5D0E9A +:1031B000D98DED1E6AFF2963351DF950EEB3D56C2C +:1031C000CD8FF537CA3CD5C6D820C6AE1824F9C372 +:1031D000D07E6584695BDCFDF7CB4C67818E3EDA7F +:1031E0008D79EDA8EA5AE087F6095398D6D7F78685 +:1031F000A9BCDF23E3198DB723BD6BB11FFA315989 +:10320000FB99E461ACFBD763B2D70BB1FECDE3F918 +:10321000774F4F6773701D2592B6E0551F638399F2 +:103220002C84B09C1FB1D5B9713C1B8DDB3E52FB89 +:10323000FE7828190BD17B83AAD9AD389F87937E5E +:10324000686330FE9A37466D750ABDE7BD46E0E318 +:10325000DF95AC0D4E87FED99731D6092593220E06 +:10326000D6C73A56FE5560E12F85BF44EDC63C18DF +:10327000D352844CC6EAF057E8FAF0A1710E07CC9D +:10328000E7231B8B3A0B189B2A0E9BF63CD6BD22DC +:1032900073AA503285B76B2C1A82F68FB665B409C3 +:1032A000B0DEC5752C28A631B6708DFDDDAE3C466E +:1032B0003F17E8FF0DE33E81FEF52189AD8772D10E +:1032C00031B52D191F8B0D0E5CF7678C45F1BD458F +:1032D000F7C27BAED87B1F1DBCDF1181718585EEE7 +:1032E000A0E0A5F94E7B1EEAB7EF74C8EB611E8B18 +:1032F0001F347FA79E49B1F7B3811E007CAC8CB10F +:10330000A66375E157E2C69DAB267B3EBC127E29C3 +:1033100061251744C69E6FDEC9DE1B85F3999F1A8F +:1033200000F84C0480201D0194A599C931389E6B8A +:103330000E845F817EEF88550115E03943827EF966 +:10334000B8FEDCC10BE3E86E7791407035EA1F37B9 +:10335000BBD84878EF54B34CE55DAA568FEFAF5118 +:10336000030D5832293AE2135857E36A0E9FEE379D +:103370004684590A3C9F03952CC69CE21DF50827FC +:10338000E75026B716E0BC8241AC67DA98BC1EE075 +:10339000268A778A29D90467C273D9078BD2701D10 +:1033A0009E9FDDF434C26B0D3601FCD6576A052EA4 +:1033B000786FFD4CB7DA0A53DC620BD1384C66F2F9 +:1033C000DD00A7F04FCB5E1A02D5911D1BAB86E244 +:1033D000E3AE084B017A58676B1153A0DFBAC94CB2 +:1033E0006D252886E93BA55DFEA7F1FD11B3DDAA99 +:1033F00008E3ADCFD60AE4B8F1151626BA3E0DF8AB +:103400005D0FF3FEC1CEDC5406F33AB36B0C95ECC2 +:103410003CC0A78431FC16CBEE4DC7A79AE1F998C2 +:10342000587DC58E2DB6A1B01E405D8728C79E1B56 +:10343000F369581DC99C07DF8BFE4452B7C253CFB6 +:103440006FA61730E89F2D2902C2719E203B582E8F +:103450009291C024A0F7B99C24D8DC5DCF7D1FFBDE +:10346000B597335904382C64EA08EC6773290CE9E2 +:10347000EFE68010C6F5C18252FC63619CEA8EE2E1 +:1034800020CE7FB93DED43A03F11E9EAAADEF38FDC +:10349000CD4F621F1A742AC6F8CEDAEF637BD7E2EB +:1034A000B7E07B5181A95B116E4274340DCE82610D +:1034B0009C5F771A4B477C3FAFCBA995A341DEA118 +:1034C0007C1A19C846FE5B695356613B3BEC6F4062 +:1034D000B8770B32F537E0C3E40DCFFE00E9CC2618 +:1034E000ABEB017EECA85660C37167E617A25C3BAC +:1034F0006DEF1A41F201E49E00ED873A6E9B2301C5 +:103500003C560EE9FA10EBFFD5119C23011C57E63F +:10351000742DB6417D54C13DBC7E45D787581FFFF1 +:10352000F4265E2FEC5A8CF8B9E6E92DFC7D602874 +:10353000068475D3D3DBE78460FC8FD340EEE1BC17 +:10354000D5AE0538CF95CF8FB1AD8FC37F750197BD +:10355000AB1F27F07E1F67B35B6721BCF3BA46CF72 +:103560008AE3C731055CAE1A74BFF4858488901273 +:103570007B8F79FB1EFF1D5D5F2CADD6FB49D15FB4 +:1035800062BF57BC4A3AD2293B013207E1F2EBCB8A +:10359000B7225C7EABA673390FF049CFEFFDBD6556 +:1035A00002F3A3BC386D07391D27074EAB5C0EB084 +:1035B0007C3EFECA21721AE223331DF0E3C371E49C +:1035C000B4BBB3B0DC42FD3CB91C3F1E512E684574 +:1035D000FCC8D122D43BAF9C1F5680F3EF6FBEC610 +:1035E000F7BED0BFB7B45587178C25225D3C7FF955 +:1035F0001603BF69F0FE353A7CAB0B62FD69DC61F6 +:1036000000DFB1317A31C61D689D4905FF987532DA +:103610001F7F0FE8BC00E9D75807632D34DF8F5BAD +:10362000F4F74A8D792844FF4B5FF8D6662EE7946D +:1036300074E46FC61EE0EFB98CEF02FDC377573418 +:1036400055B3F7402F8AA1030EE4F315EB3A1D0A98 +:103650008CB7A243D0C2EE783ED3EE8AE72B4F2E32 +:103660005FA747D43CADC47F304FE23F4D453D6539 +:10367000A5971E785BF9B6D7784ABA793C85C6EB30 +:103680000F0F15055C2EFCDDF0D0DA373C7BE489AA +:10369000057E3DFC97ADBF970FFCE7EBCD7FE37B4D +:1036A000F066E1DBECAFF8BD4AFEDE8A6F01FE8A10 +:1036B000504E9BE978C58E6CDBC2FC58FFFB6A0F4D +:1036C000FA51BED78B0AB527EDD8121A0ABF36EECB +:1036D000BA8305709CE77EFE6C08DE5FF6D4F75374 +:1036E00018C89B8FA40D992A3C6F787C6D8A06E5DB +:1036F0000929948272F2A3B05813EEC3FE7AC0E097 +:1037000007DDAE5AC94877B08F7FFA1F6DDF86F9A3 +:103710007F2E80BD03F05EB9E38BB66F037CF66A43 +:10372000AE28EAE71352D7B4EF407D699D3BD8023B +:10373000786EDC69B687963DF1FD4C850CA7D050BC +:103740001BD94391A1F8DECA6D763582F03A2CAAD6 +:10375000F019D6C8A26D383FEBFB8D1DEF91BD254A +:10376000835D37ACBC773B681EA2FBC61DFFF2A988 +:103770009882E5476FB171389E14B3B300EEF5FD42 +:10378000D8556B0AC0AE4A825F26B009A8E70CF88C +:10379000B0F020B2635A7FF2C42FC88E7C6B708168 +:1037A000131E9FDAF6BB1401DA4F75E4A6D691BD5D +:1037B000B5DA24777AE428DA01CEDEFA5ED929A0D8 +:1037C000B1CDD82E5E36D82329E5307EC316BB1A7C +:1037D00082C70D3FFFB71F3F8A74FFA6531DA56028 +:1037E000FDACC386ED821615C88E622942490C3F96 +:1037F000CB7FFEC134E487E55922AB05FC2CFBE509 +:1038000067BC3FD8B909D07FF9D3EF4CFB0ED60384 +:10381000EEA0AB0FFC5477EC7174B9FBC04FC73B03 +:10382000D3D04E6FFDC93982FF47BB053638BBF791 +:10383000FBF58F9F7420BF9C0244C869882FB1CECE +:1038400091DA179E22D7A25D07EDF27A65607C2D92 +:10385000C2B516135D13FCEBDF72AAB5F8BD5FDCD1 +:1038600099C200DFC7A520A7EFC7D6666A30FF7AE6 +:103870007B2853A6923FAFFFE1D789EE96BCF1F5C6 +:103880004C46FA4FCBB295D23AB3707DB7B7DF4012 +:10389000EB5BCC024477F58F897E94979F49ACE629 +:1038A000E93EF8C351C8E59493DD31EEDBDCFE67F9 +:1038B000EB613DC71DF00BD44307C5F0E302B66FC3 +:1038C0007D1BE5E3679D8304E477F10DBB0BE1739A +:1038D000D78B695B9C50FF93AEFFABDFF86C1AF29D +:1038E000D15DD952D029D3FA433ABC840B02958AD0 +:1038F0005482CFE12707C73DE3B805FAFF059E3F95 +:10390000AA9AFA13BC8E6F75260AE0031ECF64F5DF +:10391000645F317690219DF0B1627CCB9433B8FE28 +:10392000627D3D8DDB8F4F7B14F90BFC955480CF6E +:103930005F0EBFE71802FD421E1B1B85F3EAFC80E9 +:10394000EA4C1DA4A47A63F068DCE96491783EDD5A +:10395000F681854FCDED600F12DC1A59AA82FEC2A6 +:10396000714774DA0BF81DF8EEE332FA45D03FCE1A +:103970002F8AD18523F63C3BC66F86DFB344E76BC5 +:103980002BBEAC7C2E14EAFE93CEE7AC9DF377FF02 +:10399000F66F88E461833DFC63844F03F06388F82D +:1039A00091F3170379380AE8FDE4932F1FB919D66C +:1039B00071B2C3EEA9A5AF99E567FD33C09FD05F93 +:1039C000043F3441453C9C73A0FDEAAD063F15E63B +:1039D0007DD20D0FC7F6C197F0BC4FBE743315ED05 +:1039E000FB7F94DC5CD28FDCBCB2D02C373F63F918 +:1039F000A9F019D017CB2F437D6485AFE1875AE535 +:103A0000E2BE0285E06C958BF07384C5C171D9CF9D +:103A10003E2139F739C839D243DBBE20BD04608D61 +:103A20003A816E57863FA5FA5AD44B54DF335B1860 +:103A3000D7D7BACDF0B4B677EB72C7C0BF7D350B20 +:103A400025A37FF6A218DE0A53EB86B9B4A19DFD2B +:103A500064763804F059ABDBEDDD723405EDECB57E +:103A600069469DDD5A87FD42E3E410BE9FC0ED9E8E +:103A70006E7F34250DCA26DD5F5FE33A94F93ED8A8 +:103A80006F52C29F32DF2F8AC1654D328F9F747B88 +:103A9000797FE3B9EF37628A02F5AE30ABE92B6E7E +:103AA00004129BE6DDC578FB54F1FC2FBA601E675B +:103AB00042236D4E98C71957F4175D584A79E9218A +:103AC000B49F743BF4FDD0D5993027F601F31F293C +:103AD000479C87344716C0FF360E1A56FF5A6B0AAA +:103AE00003D12526FBF6BE00EF2F06C08B6AEFF848 +:103AF000C732E64F8D64F78E7380FE73A0BE5F02FF +:103B00007A08EDE0FA7673FBB25D2789FE9659E8F4 +:103B10002F8073C9EA4D7FDF31E8AF801520FD4D5E +:103B200015DDE4B777EF13C3188F3AE362645F9C47 +:103B3000013E014C82FF2E12DECE3C2984D16F67FC +:103B4000A14144D72B810FD0AE32E8D3EABFF7F2C0 +:103B5000EF7FF5E792EF40978667FF34EE07509EC0 +:103B60007AF6CDD12F60FDB93F8EF813EBDDBF7A29 +:103B7000F717E4CF75EF76329C57F7EEDF8E407D76 +:103B8000DCFDBC5345BAEE5EEDD4503F847627870A +:103B90004761FB708EF7D617CF8DEB2239BE86F0CA +:103BA000F3E34207E1F5CCAEFF785BC075ED722A16 +:103BB000B88EC6DD49E433353E9F1066F8FE8BE7CC +:103BC0004A027174F1B7AE67A583C727BB811E9FF8 +:103BD000C9277F5EC3F534BE50F66F2DE87FECD861 +:103BE000E3B80DDAAB7FF39FE3505E753FB3C78157 +:103BF000F20CFCB61F32A08FA70BA73D6207389FBF +:103C0000461B10FCE9194577CF0DE5F705170E8720 +:103C10006E8003AE0BE0528F76587FF0D887F02885 +:103C2000FE6784C7A7E43F34EC9AC0C4EC78B808B8 +:103C30001A7F9E1C7609B8FE5FA7605CA83B07F45C +:103C4000BF8AEB3E370EE34B03ADFBF83F2D1D5C07 +:103C5000E2BA6DEC92D6ED28FA67C537A7FF7B0B69 +:103C6000B91EB3F2416F3A7FEE1B54FF45B24AF3DF +:103C7000BD48FE1F5DF4BF1EEFE3867A2E1DEF5395 +:103C8000FF69D73D10DE5FD3F19E2CA3DDDFFDE29F +:103C90007F8EA0F55EE4BA17FD2F5D778FDD24FAE5 +:103CA0005D3930BF7B59A4538172AD6E8FAC05BFB7 +:103CB00002C75B374CD92A72DF84FC143D56CD36DF +:103CC0001671BF642D2BD4B6A05F0576C6E364A73A +:103CD000401DD6BD2E5011C478929371FAFACCE3F0 +:103CE000FE31C609256515F56701EEC7187579A27D +:103CF00053C67A6B0BCC07EAAD836C72ABD23F7CB8 +:103D000044CFFE3968374A6E87C97F715BFC90C427 +:103D1000910E93BF92C05E9225984F822AB130F9DE +:103D20008171EF23DE8A64824B220B8764F745C1E1 +:103D300089FCC675B201278DD6EF5446AE42FB69A9 +:103D4000570F9C563105E17498FB9F3DF064C68F78 +:103D50000E376F11A3F8B9A452DD7E5B03C1516227 +:103D6000E047F27598FC4E097FB399E15A45700C13 +:103D700052BDB5CC29B79ADFA775AE55AA18C2793E +:103D80002D6E0960BB627BC739EE7F0EAE0F225CE1 +:103D90008B7BC3D5287D2CBA00ED400F4B51D1EF62 +:103DA000F4B8863189E28AE037505C5166E8CF8901 +:103DB00055AC83E2767EE9548F3D9B43ED118C6FC9 +:103DC000B5DE91C2F71FF298E2A77856854CFE64E3 +:103DD00002DF1FD9F4A2DF8E741D00B615C011B228 +:103DE000CFB891EA33DC4C1360DC19CC6F6FF17003 +:103DF000F67E9CE2ABFECE45507FDDB7C98BF1105D +:103E0000BBA0ACA1F6E942F871F273D53D4950BFB1 +:103E10006175563ACE3BA396D93D589F95AD620841 +:103E2000F0008B1EBE1EF5C61C517D9C4F77F63EE2 +:103E3000C0DBF53AD66F4CBE6B6A12F4FBB088EF6C +:103E400003CC61FE1B9064AE6DF50771FFF6BA11ED +:103E5000D1916971718E8F8BB2A9DF0D92DF7E07D0 +:103E60003CBF01679ADE9B3F6EC0C1E1F90DB2DF36 +:103E70004EFB496C8A8CFB448276857821E9D2F727 +:103E800093C623BC605DCB6B9DE1D530BFE5AAFA3C +:103E9000E7E508B75AA70C3D5895AF6E38CAC5A9D3 +:103EA00062C5635F87F51E7CD289EE233BF9C8A10A +:103EB0006118E7567DDF9C86F2B480A96B658CE7BC +:103EC00008EAAB1EC46FB1A03E4E7065E43F2C699A +:103ED000AF3B80DFB9FE4941403D95EEE37118F1FB +:103EE0004981E469C666217C35FCDA32C949F2E9C8 +:103EF000E41681FC88EADAC05E8C9B6C2A75CA4E97 +:103F0000C29B96827ED1321DCEBFB7ABAF8DC4FEB1 +:103F10003FB7ABAB157C12A6FE4B416E21BD9CACEE +:103F20005DFD104E67844FA1EF65F8EA4A22F0EB81 +:103F3000F5B56F4828B7C1CF3A986F1A2F707F59DF +:103F4000DC782D939EA0F18E80DF8B71A2939B5B1A +:103F5000A7E136F862A60AE8B7C0BADABE0EFD9746 +:103F6000C2FCD02F9EC1D48D3EA41FB181F4C2F2F9 +:103F7000ED16FF578F9B64F82C71BC6DE6FA62E872 +:103F8000935488DF31FB63563F2CDFE78EC501C6B3 +:103F9000C4C66748AC7DC4650C3FAB47FEE9F8D9A1 +:103FA00059CAE3AEE3D3B5803F4E9FCDF3F1B8BB22 +:103FB00051EEDCF5F95BCB91EE7D4E1587D158DAE9 +:103FC00014DCBF9D5B5FE943B2AA7215BC82F57930 +:103FD00041A803FCA6FAEC04F75BE477A6A641FD32 +:103FE00056AFB017CB3A257B5A3A9473102F30EE68 +:103FF0006D79957B81AC59AD3AD311E07E7315D2C2 +:10400000C51958BB13F87767D7C161F17AD6282B49 +:1040100041094B71F2AADA95C0A438F84C95D34CFB +:10402000F5ABBD59A6FED3956C53FBD7F22E37B531 +:10403000D7AA05A6F6877D5C8F1CF09DBBF94E586C +:10404000E7815D0E19417800E1E289C1E540D9B907 +:104050002AA4E3D72FF7DB314FC198EF429F44EFFB +:104060002F241E41B6E47EFED21EFA6344FF9B66F7 +:104070000AE1D580EFD78B1FDEBB08FA9ED0FDFD8D +:10408000A9E2B1F977223F84ED2A58246C090BECA0 +:10409000D5A0DF2616DC8BF26876A52B8A718559B0 +:1040A0001807107AD355CBA4E3B5F47E9928231FC3 +:1040B0002F6E37B73F553CE655FCDE53A05F70FFCF +:1040C00076B6253F6216BB97E255B32CCFAD74D9B7 +:1040D000EC33C7FB9E1278DC2CF4072E2FFB935396 +:1040E000067D5AE9F0619DFE8C72AA989F8A7269DA +:1040F000BCC3DCCF28DF043B4C8271FED4ECA2F2BF +:10410000CFCD3295FFAFD94BE53BCD0A95EF35E7E3 +:1041100051F9B08FEFBF643401BEE3F260326AFD43 +:104120008E2FE3A7987C0DE9F2347A0CE19B714065 +:1041300054B72A31FE32F21632B02EC6DE9BD1F4CD +:1041400072604A1163BFD1BFCF166D7915F5234C4C +:1041500021940CEFB3863DAFE2FE554FFDAE77CC18 +:10416000EDDF15F69AEA6BB2CDF57B2BF7C6BFDF14 +:10417000DFFC336A157B00F4EAAC07F9BEA5B5DDB8 +:1041800098DFEB2DEA5CDA6FF3680AE6B93014F6D3 +:1041900059D86EEB333FC180CB5C9105D1AE9A51BB +:1041A000A5D6F9E3F4DE6B3E6E47BDA6EB0303CE66 +:1041B0004CD5148C8FF637DE9B4BC6DB31CE398B5A +:1041C000F17C9AD9BB58BA323ED6EFA83EEE9BA9F5 +:1041D00081A9481F0C6D07A4FBB963B6C4EF2B5A25 +:1041E000CB4D73EB86E7C07855FE0201E92B63D116 +:1041F0007576DCA73832F31D1B96E37360FE30DE64 +:10420000CD1794E133E3E0745A9FFFC1FBCCFBABC5 +:1042100046795C6F7FCBC6EAB1FDAD94C0F0B9A61C +:10422000F75DD47E5AD7534792F938E3C1C01341A2 +:104230000FCCC8E17063F900F7B131B81BDFED0FA7 +:104240004E3D74878F405F2DA8651ACAF99B2F6871 +:10425000C367C57DFFBC0EAFC36BB93F84F0AD8BA8 +:104260006B1F5FCCBF63C0DBFABDF1C5FC7D437F34 +:104270001F99C1C24E6E47B5A0DD300BF423EAE3AF +:10428000A9A29BE4C091C3A2EA2469C1F5F912FC7A +:1042900055C1A0B32AA0BD38ABCE1D0CA9A48F87F1 +:1042A00023BC97CC59528BF149A6CB2B17FC43FB6F +:1042B000B0202299E497552E650C20A73CC566FDD9 +:1042C0007910F3BAECB1799ED1E7D9DFBA0D79252F +:1042D000837C96808F738A399FBC236A238A915F7F +:1042E000EC1C9EE3ED2C21DEDECB29E6FC32BED2B7 +:1042F00046FB5EBF9F746E16D2E7AAE9B936F43763 +:104300000ED69C4DC7FD67032F3D7CDAD41A1819D1 +:1043100017A7DE34DD3907F1A9302D19E9E2A0BF76 +:1043200028A1D21DC3D726FFD9741627BF60195FF5 +:10433000CA57172BE70E74D9C85E3830F933D273D9 +:1043400027F2641BEE8F4AFA7E85569C46FD4E94FA +:10435000BEE7C6FDDA9D5DEFBA915FE7B2B01DE53D +:10436000DF3C16B1233DDEC2BAA87E2B03C742C490 +:104370007C4285CADB984671E1DB599409B9686FC4 +:10438000338A5FEEFFD5B647317E394E8FDF8FC758 +:1043900054B3383B39A4AFBBD0A75D8BF01F9FDE71 +:1043A000790CF562C6643B4379AC017D613ED0EB8C +:1043B000C5131216F681CF33450B6F2A8E936319FE +:1043C000B50107F67B4ACFA74400229EEC69795BD2 +:1043D000E3E5C8029DFE7F57A4DD82EFEF2FE6FAEA +:1043E0007D7C3A9717E0EED8C8CECD536CEBE3EC6A +:1043F00081269D5E7AF8C81170209F2F568394778E +:1044000059D55E90D0D5873C39531468B0CE93DB34 +:104410004D5C2FF6873F43BF5DAA7E34F460BB4FEF +:10442000FB167E57B2F13C32297D8E17E1C3E4D9E9 +:1044300084F750B1F0A5F2685CE97BF716A1ED5363 +:104440006BA3FDF5713B953FA39FB5293457163DEE +:10445000B1FEE36ADFDD3FD287FD4559807E9B6A6E +:104460002624A0FCDDE40E8D40F89C10D404DC6F03 +:104470000A3D2ECADCFF8ACE473A5C529B9983786C +:10448000B96E5271A706F5E3B5D9856897EED6E106 +:10449000FC11E37A20E4E77EDE89E9778FC0715E64 +:1044A0002F1E5C88DFB96EBA93F8FEF8E15CCC8C05 +:1044B00062477C4B6EB813DFD1EDB49B7439757CC9 +:1044C000DB9D64271DF7E6926E017941E3BE5EC372 +:1044D000FD96D799F62AFA11B3747BECC6F9563BD0 +:1044E0008CCBC9E32827A1FFF57E737B46FBF163E4 +:1044F00048E4BDE519B7BF06926B4F159BED2FAB96 +:104500003CFBC8CDE31CB376B14703A96037D76441 +:10451000DB3F44BFA44920FA30E4DAAC5A750FDA25 +:104520000FB36AEA8A5CB0EED4F00401FDBEEA5A29 +:10453000656A128C37A34628C1F10CBCCDA8B9839B +:10454000E25033DAEF70E0FEFFEF8AFC11A417FBB4 +:10455000E3D50AEEA32F692F780DDF1B1B4A207CC1 +:104560005F37E38C0DE1BF6907D8D12ADAB56392D2 +:1045700011CF07B79DF5C4E729C7F8628303FDCCC7 +:10458000AA6D9F0E41BE30E4020B6D7B34427ADE91 +:10459000C3ED2DE6F77EA99CD3FB0D24E742552CF5 +:1045A0002F487CB57F04F923C3C01F0139776DE91B +:1045B0009E1188FF456B18ED879E1AFEA174008638 +:1045C0008C54BB82B8FF89F5713E4A1DA03C9D53B7 +:1045D000597F6DC77DBFD656B0FF8761FBE7545F3B +:1045E00023B964EC3F29CA4C7EC7557F7599FC8E70 +:1045F0004A66F6631ABADEDD81EFCBAB9D72EA3014 +:10460000F47BCC7ECD4E47A46D3F7C3FFA7DC6B691 +:10461000227DCAD9163FE8728B1F5460AA7F2DAF46 +:10462000CCD47F268B4A940FA7B0E0BF02DC1A9847 +:104630006C2739A8C9D110D467A895A6FED7954E86 +:10464000378D57B43F42FBE119F0BE08F09BE9F209 +:104650009BD7D3F439D15D79D379D2A305910E5389 +:104660007BD1BE9DA6F1D44EB91ACDCFC2A3EACB61 +:10467000589E4BB8D6DB02F351041664938115BBE8 +:10468000FCD5980E5D7222F83296A1AAE01308AF0D +:1046900010C0ABD583F9F3DFFB11EECB3601FC3153 +:1046A000AEF04D91ADC578EE395BA01EF58E6C5322 +:1046B0001EAB83FA47823FB30EF86B941818525220 +:1046C0008C69661BAA815DD8C4BF76BC8CE58ECE92 +:1046D0008A75137D080FC0338CDBE0B691FD3C5525 +:1046E000DC350EF350CE3C9954149F9F7FF21B464D +:1046F0009EA9E6ADC3389D676421C69FFCD5C91A43 +:10470000E65DAE78760CC51BCF95565E513208F744 +:104710007BA7B8B8FF21457BE20039D8AE2DC37323 +:1047200001072B459EFF32D54EF22CD11696F5E0AF +:1047300023E929C7D576B2777F56C2E5F2C1D70003 +:104740004430F18369DCBE2CE9CCB1C7F3D92CDD50 +:104750003EAC2AD1F3ED301009E3CC1C74F8498C3F +:10476000F3FEAC2499C629A9555EB5233DC8928CA9 +:10477000FE6EC651BF3C16C6DBE1F1ED41FF63C7DB +:10478000D1CE498282FD15EA3FB8A6F2CE4A94FB0B +:104790007912C3FE3BE42949D83F63BE6A4BC4711A +:1047A000F6D9C3A3609EAB26F1FD985595AE9F63E5 +:1047B000BC3DE328E379944C5B4EF473AD43C1797F +:1047C0003049CDBE05F8FB03D0638AB37F3EFEE0DF +:1047D000C14183505ECDAC9407615ED2CC47442E7C +:1047E0002F28A31BC6B3314ADE078AFBD31468DF28 +:1047F000DE53671106F0961DCCE8CF12A03E53E8B9 +:10480000E93F6F0ADA1F393DED21E4E34D82512F74 +:10481000A4F60CCB78C6F88B4A0AFEB4CE8DF09184 +:10482000F538803C08E39A19B6CE71487F2B6C9D11 +:10483000944F7EBB4D198DE5ADB981E5487F979DBD +:104840004F8D207CFE52EB08231C2E3B7FDD6094B5 +:1048500073A0F77FBC19E96D8A9DE4FB0E47E74A18 +:10486000CC13880E4AA4BC76FB734B83DF0154DC67 +:10487000FED0F4AF911FF4862D5D14FA875B86CCD1 +:10488000F9D1B0273EB1F5AC5303D39B7D22C4EAE6 +:10489000C8972B62EBD446BA28EFA567DD2EA82F68 +:1048A00034EA21FFBCF761DDCAA2ED79180F3CCBD9 +:1048B000DC418CAF9ECDBBF946C4EFD907ED98DB48 +:1048C000C376E09B48D7DE441E57F7F8F3D0DF3CB1 +:1048D000D0C9EDCE0EC0BB060BCD0D75B9C7FAF031 +:1048E0007D297D3D743B5B31B81AD777F6BB8822B2 +:1048F000586F978329204F76E42D6AADF2205D2A08 +:10490000E9A8BF8D751EC571C0EE7796690F9650E8 +:10491000DCDA88A77EFBD2E2A95294F2F01CB92C13 +:104920008879C78DA52DF9A8BF9DA50AF151E3147B +:1049300081E2F08D4D7F21F9D6D07496E0CBA48032 +:104940008A783FA5E7216FB0B35B6742D9F05FE299 +:10495000ADE85F825C59271462F99263551C9FB2DF +:104960008E4F7BE4231E151AC8EE4B0CD4D277670A +:104970000AF20D68AF744F78681EE6D9CF4C906F7D +:10498000C038CF0BCFB5F0FA70F906CCCBFFE3B34C +:104990006FCFC3BCFC9959F2F76D201FFFFADC39C9 +:1049A000DE9E2DFF01EBD167F57AB281D74FE74547 +:1049B000284EECA6FDAA333509E4FFF5379FEB9BA3 +:1049C0005E30C5597AB58B02979373B8FCF9647A57 +:1049D00016C93123FF79854DA6FCE703BA5C8BE548 +:1049E0003F3319F39F578CEE5C9082E736983A1567 +:1049F000F3BF1A026EDA3FB8BE69377DF7A04D19D2 +:104A00008E7232B13CF007E4ABD3C99DC467876AAC +:104A10000F65A2BC0D95CABA9D101D89F899CB02ED +:104A2000E4A7CCD5E3B136901EB85F33DB3DD28E20 +:104A3000FB34B3E798EDB7EB5984FC9859B5D6FC35 +:104A4000A7B878AE48DF5D0034C3EC3A3C56A467A3 +:104A50008FD2E77502E9F1A0A08CC5BADDD399C960 +:104A6000EDFB2715D22B792EDACF4EBCE2E8B84009 +:104A70001F78EF6806FD09ACF40CF8B358CEC3DC20 +:104A80004B94C3529743857156EA7275AAD8202277 +:104A9000FF9CD999CDE2ED38DB046E2FA7EEE4F14F +:104AA000204F2EC0DD83F08D7C97F2CBF339BC57BD +:104AB000D822C3100FB609C9D4DFC02BC04DCFC355 +:104AC0008776E087ABAA010FD0FFAADBF6ABAD710A +:104AD0007808E9F3DA91C8F93DFAAB84F0D6ECDE58 +:104AE000F3F44EE078B6CEF74AFDF9C5CEF3CA0925 +:104AF0005C7FF537CF2B27707DD5DF7C0DBE35E091 +:104B000064F02DD3E5D5DC39D974FEC3A8CFAACD86 +:104B1000263FD198676FFAD9A6F4453F03D18DD3CC +:104B2000A04F5D7E187034E667C8831DFA79C9D836 +:104B3000FCD2B698E797467C95DAF46B920F62B296 +:104B400044CF67E779B7E03E4D6AE719B2DB52150B +:104B50007607CAD3AB27E470BAE8F8A22DC387CF93 +:104B6000ED02E619A536EDA2F77BADEF92D7D5B7EA +:104B7000BC9C048280E41DCA6401EDE380C91EACC4 +:104B8000644B4DF662B5EB0ECB3EC0B74CFDAFF6B5 +:104B9000B698DAA72BF758ECDF8DA6FA0CF5118B37 +:104BA0007DBBC5D43ED3B5DD54AFE8EA24FBF3406A +:104BB000730DF9CF934F44C90E8DE87EF64BBA9F23 +:104BC000FD0AFAD9C09F7BD1CF86725FB34ACFFF6F +:104BD0006F732995FB9B352A3B9BFD545AF9DAD715 +:104BE000D9E5C37CB6524F2AF92165C5814D1330F2 +:104BF000B5EE7074243A1F138F76907DBC764F9972 +:104C0000CD81F187FD623841403D3921B5AF73A0B8 +:104C10004699FA5791697171A6D4DA28C33CEF54CA +:104C20003DEE32D3FDFE143A1FD2240BA9A0079CFF +:104C300092CA7C501F1190EF08417DF3046E3FFA39 +:104C4000B516F2136E84AEB80F32C7057610CC7766 +:104C50004EBD106EA5F86088DAE7016C91FF9ED911 +:104C6000B79AEA73DD2C22D2390EE67765EAFB9E0D +:104C70008867CFF5AF127D06998AFD8F66B67DDD18 +:104C800045FBC4BADE0EBD65BB70E5C5EBEDCD13CB +:104C900038DFAC15548A1784D224DA9FB0EAD3C621 +:104CA000093CAE746D2BD7F3D16C16DC0AF3BB0E46 +:104CB000F52AF0DB4C19E081766C93624378187C1E +:104CC00058DA156DCB80E73EC54EFB370DECD36946 +:104CD00018626BD0F2A2B87F5FFC7EA015E9C2F02B +:104CE0007F0C7A07FFE1E5149473C718EDF3244EA7 +:104CF000BE47447FA3EC2FE1562CAF3ADF21A2DC64 +:104D00001FC84F32E6BFAB790ED1CBEEE6009591CE +:104D1000E67A9D0E83547FA5B989EA7B9B4354EEC6 +:104D20006B5EA7D3E1066ADFDFBC99EA079AC33A54 +:104D30003D6EA7E74E5DEEEC9EA0DBB1AE4A8A2F3A +:104D40003289973657C88A7F168FFFC474DE9E0853 +:104D5000F23F5410470F807F94D70D5E5D4E0F4495 +:104D600007E9EBBEEEB0E1B9904D76F297BE223D79 +:104D7000CC7683019AD35B8EDDC8148A575AE51925 +:104D8000D8172AD2FDF50CECBEB44B90DB2CA862F0 +:104D900008C27119D825D95FC5BE0804713E037FCA +:104DA0008FE3C796343F847A11EC743A376D4F3BEA +:104DB000B240CC89F997BDE062F13797E9E7DB2F84 +:104DC000759E001F3BD2C140F37CA754934A8B636E +:104DD000F0494CE7749238C44D79DE0E6738BC1A3E +:104DE000E5CD0B093CDFC2ED1F117FCE3AB994CB64 +:104DF0009B67466AC9A5B43F787ECF05B4433BEDB7 +:104E0000145F5BF9FC9B17652735CA674DF6798FF0 +:104E10009E176CA4E71B6D2C807959854EE61260B5 +:104E20008E5B4AAB86F2EF55746AC8AFB2A4C6DB9C +:104E300051D6B2B1E9531ABFDF761BCFFF6A7CB1FE +:104E4000588E3F1F3EAF54DF1F0447F143570C6E8F +:104E5000174BD793A2734C72E29F4E7F6A3F31B5D6 +:104E600033D6E543FCDFECE17AE1BAC074C2C75C3B +:104E7000D6417C389F7552B98045A90C307E4E7B57 +:104E80002153A95CC4FC54FEAE283013F12339FC35 +:104E9000141739C0A28B5E007AFA6472995CC97AE1 +:104EA000CBC58B958386FC33E4619B433FF7D313DB +:104EB000D7F114605CC7C0C76DA5E67D3A2B7F753E +:104EC000172834DFEE5F95DBDCF07EF7EB625820CD +:104ED0003B4DD94BF94F850EF25F8AE62B6DB83FFB +:104EE00086026414E6C3ACB39F8A1FE76CC54DA469 +:104EF00097CF62541AE5A9A4E6DD1217076DD5F71E +:104F00001FB74389E7AC52E677494A1C9DFD1F7DD8 +:104F10009E9573A730D47FD27C0D93C4588ACCE37E +:104F200042535DCC9700FE283B7F361FC7BD56B766 +:104F300013D6DB5904F9617069818076C5FE91DA78 +:104F4000F7909F437757A4511C1A63AD97219F8018 +:104F50001C423EC1FC2F92430F91BCBD9169AF62D0 +:104F60001EC34A5521F9723DE3F0B0C26965C51709 +:104F7000C4D72B81AF113E56FE5DB873CF513CAF05 +:104F8000F9B7DAA10B5DEE8838AE377C615D8FF43E +:104F9000B52E235EBC827591DF779F663E2FEA6453 +:104FA0001DDA5094433BB73094B78522CF9F8C4E87 +:104FB000E7FE8E957F7FAECBB3065D1EB080528438 +:104FC000F2BB5B500AD7F37388DC7EDF7D39F917BB +:104FD000AF961AE7DA437A7E44C5DA1F7038D3F900 +:104FE000B653FA3919EB777E5D9AC6FD21D75F4C2F +:104FF000F26E65D3172639B5329FE3BFB05529C28B +:10500000FCB43BF57DBEEDAA7F17F2D7B28E8DCFF3 +:10501000EE57F0BBEDDFC0FB08CEEC7393DDC2F6BC +:105020000F2218750BE67DF1EB5D9FEA7A7D8B69A7 +:10503000FFEBD08C3F929C46BF1DCFA71D14189D3F +:105040005731E677D0D6F9E10FB263F219FCE7B732 +:10505000BF938DF239FB5FF2119EBFB253BCAB011F +:10506000E79F817EB4FF8D528AAFF13CDA83D3AFE4 +:1050700024FFCCB0EFBA3FEA7BBFDE989FF11D63FF +:105080005EA704C104C7B775B80F2DE5F6CF217B25 +:10509000E769FCCE27CF5E296080B1E7795AE7B88F +:1050A00034770C3F03D94556BBB8D2D34AF5D90360 +:1050B000D84520495FC57E475771BB68CE920D76B3 +:1050C0003A4FF415ED2163BEADC92CECC0BAC6143D +:1050D00039934274B40F66DC8B3149AF0BEE232F4A +:1050E00007601DED77A6A8A2175358F9BE588597FB +:1050F000C72B9D389E88699B612F96A22D9A81E5CA +:1051000054169078DC3A4CF0FAADD0D54AE78434A6 +:10511000D58BFEED5A4F15C53D4E307710E3E43781 +:10512000A4D54C82CFB2B98BA707902F66B7A6D073 +:105130007E92E450A53D68275CC3F7F7C09F207BB3 +:10514000FD0F1ADF7730E065E4694A69A169E4C7B9 +:10515000DC0C28198AFB142AE58DDE087625F6FF7B +:10516000A3141C949F8DFB650F8E1300D54BC57047 +:10517000CA5858C7C7077F5AF23ABC7692451C6E88 +:10518000685FF10AF0BD0DCFEF5DEAFE7680EA4B75 +:10519000D886C7F6C0B86F663EFAF53D2C0687394B +:1051A000DA8F3E58C4508E7464560AB1FDA8730954 +:1051B0000B32F77862FB1D03ED6F8C12038565C51A +:1051C000B8CFB16101C955161C4F763A8B8EC073AA +:1051D00072E530149EA7ED1EC4E930F42923F8755A +:1051E000DB55B26B429F296477F9AA6D844F7641F3 +:1051F000A1B86CB9BE0F69C859DF953CBF9CFD874B +:1052000042EF4F8A9AF3337CE36DC167DC687F48D5 +:105210005F2A7F5F2AE37CE5CBB005E3E317ADDED1 +:105220004C1E07D4EB4E45A67846BDD19F454F6333 +:105230003EF64A8C2BFBA8D76C5709AD8FE8B37CA0 +:10524000D7C936DC076D17811EE83C7247358E538F +:10525000817E848A71DFA0C6FD38C6709F8BED34D5 +:10526000CB7F235F3941631DC85FEB854E11E13968 +:1052700019CC6A2C35264B58563195CA29CC4FE5A6 +:105280003416A4B2866DA0F21AD641652DEBE4FD6A +:10529000BD49213C973A91B9C2746E39F7654EFF0A +:1052A000ECBB32E5A74C5F62C378B4EF269E47356E +:1052B000103CD6EBF0F0223C7C5F1D1EB85EDCFF9C +:1052C0009D86F7F1A4FDFDE071350B11BF4F6761BD +:1052D0002ABFC62212A74BE515CCC39E718291BC92 +:1052E000605744080EA55D0189EB050B3CAA397D8A +:1052F00058E5D8A6323DBF0663D350B60941CA7FF0 +:105300007AAE4CA1BA0BEF91A0EF85699FD868B730 +:105310003EF725559D5540843F51F6FBF918EFF6B1 +:105320001555DD990BF58EB223F3313EEE2BAFFA16 +:10533000650ED49FF9F551DE3EBEAAC80E706B69AA +:105340007973FE94F87B9832785CDAE554D5421F85 +:105350006DAB055BA0FFDD0E7E2F930300D9921588 +:105360009BDF889AC84B7694AF1EA508E55F99EA43 +:10537000FF29F2AFA804EB91FF7E20F37B9C9E2BCC +:10538000D3FD494F7611CEF721D5FF8BB241787E00 +:10539000C415C28081D1BE5DB7FB9EC31CA0E2FED6 +:1053A000CBAE32ED57F8BEF5B92DE9FC829530CF82 +:1053B0004694D950BE5616D885FD1A6D5D238AE0F5 +:1053C000D9EAA4B71D841F4DA6FCFE56835EEA8170 +:1053D0003E90EE5EE2F4D193B78F7613C0D9E70F1B +:1053E000B462CAEB84F9D1114D0A8DFB5B1A578C5C +:1053F0002E46BA389D76C8F101D1F7308E775D3EE2 +:1054000034EEFEE234DE97F6A20DE896DBC37E169C +:1054100047D78DBB1324A4EBC68F5938291BE9FC51 +:1054200027AD684797019DE33EDD8A1D4FBF8CF68F +:10543000C52ED45378CEFE372FBE8CFB04155F4BA0 +:10544000A038CDA443C772D12EBDEA58572BC6CF82 +:10545000BA5FFCE3504E7FC6FED039E1ABE8D1A97C +:10546000E277EF47B9BCAA4562781E789510E475DB +:10547000BB4BE6E7813BDBE6239C355794CE3BE80C +:10548000F971F5FABA609CBD65D0FF133DBF1DD41C +:105490000DC95105FE113F8AE7E99CEF6701D093E2 +:1054A000D03EE1A855CE46F7625E4A837E1FDA8A77 +:1054B0000ECBB9F501F2CDFFBD4CCF2B19CE867FB7 +:1054C000C57BD084898362F7A019E786573D96BBD8 +:1054D00015F78B563D76A72A233C86E71722DF1B5C +:1054E000F7A2B1887C05F67B4AE0FB6BECF0870CF9 +:1054F000CFA72FD1E7B6749D40FB7C62AEC84AC1EE +:105500000F19FFE3C1CBBE4D74019E8B17EB13E661 +:105510006CF790DD12641574EE81ECB8A7D2A23955 +:10552000346E9AC24240AFAD09D11C9467A1175D99 +:105530002A9D0369CF205ACD0DA99B51BFAE6AF1B8 +:1055400008B85F396E22972FD9874B37D3F96ED0C1 +:10555000B3888F55C9A307B33EEC49A3F4E13CE3FC +:10556000ECEC3D6FDC988476E8AF247F12E67B9DFF +:10557000399CF3A571D9E20800FD4BE207BEC3F7E1 +:1055800076627E906FB344F030E8EEF966ADCFBC42 +:10559000468585ABF15EBE55B7833C81FAAAD7FE3E +:1055A000AD15EF7B5B750F65CC821D312E15E1B318 +:1055B000E33591F69B4AD8F6D60AA817037D868173 +:1055C0007E9E671D22F2A9D36B634A1C9D24288905 +:1055D0004C89F3EF93F2D24DF5647588A97F6A691F +:1055E0008EA9DD389761D89569DA15A6FE1358A7FC +:1055F000B802D6510A7C10819966D4149ADAD95F20 +:1056000038DD97C23FAEA738FE9C21A78C7A70E2A6 +:1056100029335F947605E9DEB6049D6F120E4BA622 +:10562000F3F14EF787C7F07E3DE70079570B26EA86 +:10563000E7E287B1617DE55D3D9C9462E3F0E47152 +:10564000A91236F2E10A682FDE67676185FC35A68C +:10565000E71985D17F889DD708B762BF72940B0088 +:10566000F7417E33BC07CF31C33B2B6086F7D07A3E +:1056700033BC8707CDF0BEACC90CDFEC90199EB9E6 +:10568000EB269AFA8FDA5065AA8FD97C8DA9FFE5AF +:10569000E159A6FA95DB6F36F51FDBB1D0D43E7E1B +:1056A000E73233FE41AC231C9EEF62ECD1ECDEF41A +:1056B00050105965EE2F1E1357A0DCD3CF4914EDBF +:1056C000FB769FF410827F480F56FCB7267C8FF044 +:1056D000DF55E70E0A13891E2201A407FD5C4F2F38 +:1056E0007A18800E7E345197933A1D18F2B13FBE5E +:1056F00035F0FCAFA86F494FB8D7E61B7112588F31 +:10570000DFED7D15ED70B9CA45F76D3C9C3482FC28 +:10571000147F2EF8F705E80F8CB3A3DC525A8428C7 +:105720005D8E68F1D30477D31328A7DA5B613DC39C +:1057300030DE663E37737D8DF9DCCC40FB0AC59DBB +:105740001153BDE03013514F16BFAFB426C3F78AD3 +:105750008EF13C29AB7FE8EBE2FB1DE5A73A5FC683 +:105760007B392604B9FE2D8D1AFB1AC11F219F9685 +:10577000833C453C32FF496412E690F9FBC03F7917 +:10578000688F36B14415F9E79B22F74BCFD902E475 +:105790004F5AFDCBD64A3FD997607F0F43BBEE7B74 +:1057A000E30387270EE293417C8B6718D9DB935D77 +:1057B000E087628E0AEB60686F751B793EA1C65B5D +:1057C000F0FEAE6EB4658630B6B9B5E19610E5630D +:1057D00031B9AB04E38EFCE7E4C4C0DB13C14E7AFD +:1057E00057E0F1C83AEDBD113B60BE5DBAFD3978B6 +:1057F0007E07DD13B67FA4F6CEC44103E76B18F134 +:105800002C23BEB5A339426552BE2A527E8225FEA4 +:10581000D46593A714A0DE5AC5FDDE9338A932FAE9 +:105820004E0AC91317EB74C6EDA7DDA2E3C3E6EA7F +:105830005C8BFB870B743C2C1454F247977B4F51C5 +:105840007CC1290AB4AFE74CCDDFCAE312461C6124 +:10585000A87829F6CF40EB5DEEFDC8147F624F6655 +:105860005C547E66DC3A7F7817E717BA6FF6DDE99D +:1058700043AB505EF7FECE698A6BDD127CC344DF1A +:10588000B736BD69A2E7BAD03BA6F62E4FD48EF14B +:105890003BC0F3B0F262CCD34BB8FF4194178902FE +:1058A000C99BBA1DF66FE0B9EE81D77992BE7FAC85 +:1058B000B993F069ACF3EDE6A354EF6AEEA2D2BA65 +:1058C0004EC3EF374AC74B41F2EFA36047E2BD9F9B +:1058D00003F9FFBF2ECF213BFE9BA2FF6D1E678900 +:1058E0000CC7FCD5736D4CE07E5E7401F2C37C2165 +:1058F0004545FDD896B5F7CF1817F8832D95D6C72F +:10590000EA237FC6B876231809D45F8B3C867E5A7B +:10591000774A0AD5E78D0F68081796AFF7CBB071B5 +:10592000FBD413198E72EA34AC01FD81F363FCD50C +:10593000D48FC901A4CBFA74F033E1F9095B681C78 +:10594000E6217DAFFC37B7A01F752231741A2D9068 +:105950006FBCF03CAF3B383FB6BDB08DF8EF0F36B3 +:1059600091FC8CD0F302CF0F737739F0FC43CE98C3 +:10597000C075383EE65151DE3D3CC77BFD8CF86377 +:10598000B77E1EA33B81973796F3BC8C9BCAB99D0B +:105990006994417424E0799B5E4E15EF1D4DF7002C +:1059A000D43A19DAA9F07D8DECC4DD4EE2B7D87D8A +:1059B000894CC6FB123DB9CA59E42B8FC8287F64B5 +:1059C000697936CF8FD1E398E800E2FDB8B39E75D0 +:1059D00092BFDE33DFC33C6FF393E93CAECB30F8CC +:1059E000E38BE53F2D2DE77EFD8AD7DE7D1BE55558 +:1059F00062796045795C9ED08A943D14576A2E572F +:105A0000E87B304FF2FB9C225B83F1F9152E1EA739 +:105A10001A283EDDDFBA3FB9BDF3218C879D4E5673 +:105A200046E1FBC677611ECDE571EB33E6111BE75E +:105A3000CBF9C288B71AF54333EE1EADC7C96FED77 +:105A4000EB7CDFF775381CB3334B9E980E3766E45A +:105A500089F17B323B74BC6ED5E1F2AA43B9D3C65F +:105A6000F1A5A21FEEC90D86914E3D19FCBE6463DF +:105A70005CBC1F1CF749E607B37FB91FDA976D1BA3 +:105A80004BE7098C7918E36E57B5F6F2B83836D083 +:105A90001BBF57647A02D1C78ADD6FBE8DF261E900 +:105AA00013638B500F18EF59E10B70A5BCB483B68C +:105AB00008C10FE0FA13A4E767F61DA4FC2F03BE8C +:105AC0005F159EDDC33B49BE776FF916BF1F388B4C +:105AD000C9783E7EC5AEDF1EC5FB015618FB1E3BD6 +:105AE000CC711EABBE9159601EFA994EC6E585D3A6 +:105AF000786F98647AEF89CBB4DF9493BE650AEA35 +:105B00006DA7A4C775743D54ACEB4FE1E88DAD684B +:105B1000CF1B71637605E8731EA7A479BA5C3CDEDF +:105B2000D1A3D70555A1F680F8CA1918573CC4F57A +:105B3000F80416227FA48C055AD1F8718A77A8FC44 +:105B40009CBC1E37BA672FF9ED28C1D07F1CAE7FF1 +:105B5000FF8749A79F8E4099E357AB502C8F9CE35A +:105B60007FC94E2D619AE48FEA3ECF6EE3EC2D356E +:105B7000C1F77EB4CA584748DF97E5EB314271ABB5 +:105B80009346BC84F189AD7A7C2127A9C186226C19 +:105B9000CCA2D06A2C2F6F50872C5162E3E7AE2A3B +:105BA000FD3800F5CA0D4E1BC671EC1AF78F5DA3C8 +:105BB000C19346FA96822EF40BCFEA747F76D8AC66 +:105BC0005017EB1FFF8F34BB8E4C1915AB0F91C2D2 +:105BD00002BF9F817F6F4893FB089E3BB53765F2FC +:105BE000720AF7DBEF1E96B313F5C89DC572018AE2 +:105BF00006E37D7785F97C27FC1C59648A6FB88E93 +:105C00002C8ADB9716986C6EF77963EDE48F29A6E2 +:105C1000FE8CE559C6532DF5B04E2CA596F734539E +:105C2000DD5E635EC7D90658078B9FB7F9BED0FB10 +:105C30009ABD47A6C4E9DB14A98BC5C329A569D8B9 +:105C40009129C047439B46139CE2F0CDB44CFD5CC8 +:105C500025C029639DF6917E2E87BD1B173F4141CC +:105C6000FFAE69BED03D93E27D64A73A62ED1AC6ED +:105C7000CFFBC3E7C5961B9BC1F6895B4F0E9B49C3 +:105C800072F1EE000BB6805CDB336CA10BE5C6C68F +:105C900066EDD0FBD0AF6D5821C51BD22459C0FC96 +:105CA000F8F429F0DCE487854DF0B26BB33B111EAC +:105CB0000E56E3423B392B7D16D1A5C234AAAF95CF +:105CC00067D1782E7D7FD03ABF3530BF485CBEBEED +:105CD000A49FAB6418A42E8BC11573D4C879397FE7 +:105CE00041443FC621303DFEC5E16737DAF5FBF39D +:105CF000122B1E0ADDC6E579D0E9C5FAE6502BCA9B +:105D00000DBCDF93EA376B6D1EBA6753E1F57B3F3D +:105D10004579959017871F16C307CD0FF1E7E969FD +:105D2000FF3DD2EDDF8A9F8B2DD75AF0D8ABDDA196 +:105D3000D5A37E5A3B68B42DFE1C635645D58A0A0E +:105D4000E413DC04B908FBF9A2FBB1822CBE5FC4EA +:105D5000F1C35D09286BA711DDA7C5D3793F744F47 +:105D60007EDCFF10DDB759E0B5C9AE66211F6F6A52 +:105D700011E6F4B53FD05461DC27CDD797176214F4 +:105D800097B1B7DBC2D902C6B843742E65422DCF96 +:105D9000BF73FD79431DB63FE7712844777A3CA273 +:105DA000C4589A67712DFA1BCFB5F3FDB1CF3C8C67 +:105DB000EED11316370D417EB3B77F48E7F9304C6B +:105DC0008D7A730CDEC3A8625CC466BA6F67FCCEC2 +:105DD00044D3FD3C633BD24DF5DBD60D35F55F1A60 +:105DE000CE35B52FD97CA5A97DF9F62253FDF60D48 +:105DF000E5A6FE4E76C74B63316EA2C79BD3706D8E +:105E00007DD0033BCAEF0502B544F27B8CE5DEA0F2 +:105E1000CB6BCDF706D9ADF7C60E10FFB0C64F7EDF +:105E20005B61BEDFB4E75E93299E8BBAD764F42B27 +:105E300009B41FF6402DD7D359D770B954DDAE0839 +:105E400074AFAB8E3F4CFFA4F8A2BE6EE4BB48DC3F +:105E5000FD5DE91EBF86EF6578397D386A6C61CCDF +:105E600053992ACED7D0BEDC7498D3C7A61A33DE96 +:105E7000B31C01CA7379E031A6AEC665D42CA6F373 +:105E8000EBC2E2BC2CA2871A4E0F4BC3A2096E4E86 +:105E9000242EC4470D9F777AED2CA217E37EE05E97 +:105EA0007839C6EF6332CEC3A75BE03EE6F0DF177A +:105EB0002FFF5E61B9C7F712F1E2086D88A4025C9A +:105EC000EC3253307E3375713DE519D9BD2AFD7D25 +:105ED0008F1AFD9E06BB979F8BB5EA912DCD2C1294 +:105EE000AFAFED6BE42A46FB080D2117BCB7761D5A +:105EF0006383154469C085F26AADB7CA45E7DFC35D +:105F000001DACF5B03FA89FC9BAC692EC4CFE76949 +:105F100036BAFBAC2D3BE04579D1B685CB0B61F1B0 +:105F2000E63A9C475B5A66B693F44C2441BFBF3AAD +:105F300081DF5FCB5CFA3DB6122F43126FD7A81CEE +:105F4000DD6EE66B8647A6A15F4628D1F25CB361A1 +:105F50007F7912F7CFD36AD2CDF76F6943CCFD4377 +:105F6000EC607E89AE0A15A2175B9D1EF744FE9574 +:105F7000F4FD4BC9F340089F1BF7AF2530AEEF5837 +:105F800088D38B1107952CF779E5ACB1DEFF65A1BD +:105F9000179D6F8CEF673938BED68C62747F94750D +:105FA0003EC2E21A2FF25B367B80E1F3EC52A71C73 +:105FB000A69D0585F849027C3D2AE0BDC11B88CE1F +:105FC00025FDDE07EB3CAD7475C9F3BE443ABF69ED +:105FD000523F74DE8FBEB4D2F9BAEC3627F6EFEF3B +:105FE0009E615197376BF47B89997BB67E6E9911D0 +:105FF000FFDB65D9D8D7B7615CE35F277DDE8571AC +:106000009D708B97ECF29E7BB82DF77B187559AF7E +:106010002B1589EFA07E869F97F47B60B464E20F16 +:106020001B9B5C88E7F0D6DD817461AC2363E406DA +:10603000B601E83FE1FCC30CED8B8491AA10E0E5CA +:1060400097C20FECCE8E787FC35AA6E9F7BF589F50 +:106050006F9AE4E2741F627DDE3BF3C8249B1E9FAF +:10606000D0ED441D4E607FBCE2ECE37EB41EB8B8B8 +:10607000B93C4A9F02F38AC36BEFFE21D33D2986C8 +:106080007D227BF97C326A9516849B2C733F4209F2 +:10609000F9591DDAC9FDACE7E7B81E182FBD9FF509 +:1060A000FC7212B73BACEB49FF87AD47AEA4F57865 +:1060B000B87FA7843486F7BC24481BC8EF49602EFC +:1060C0003E2F9023F1FBB709B57DAFE79B067E24F9 +:1060D0007DDF575F8FACA9A9757DD85DD6F5C05C13 +:1060E0003AA6E45DC47ADC7DEB176BBF985FB2D053 +:1060F000E497B4FD8D7E49FFDFE5FEC71AF4A7E201 +:10610000E85FFA2E878724692C330E6EEF4F12F961 +:10611000DF059AC4F302ED32BC17874F29A4C331BF +:10612000E60F85061BFE10E04BABE1F955C9F98A75 +:106130007ECE6C03C52113872985EB596C3EF5A2F1 +:10614000767A529C9F9A80BF646369B5D301578663 +:106150003FCA4C76794F3BFA5B922E4FA4987FFB57 +:1061600077B1DB2FB644FCBCFB25F2658D43ADD780 +:10617000CFE155784B28FFC4022F9E17953199F334 +:106180005FBDE8CF983C08EFAD0C46D0E45A23CC75 +:106190008CE0BD990E0CA983FEA9F4FA23785E78F1 +:1061A0000DD8C5983FBBC62BB7503C01FC4B59E5F9 +:1061B00070910CB8C077127C7785AAB9FF19C5BF5A +:1061C000D320A93B22863F4AF7A1E665B618769C04 +:1061D000D31BC34BA20EF704DF2A96EBE1FB7BF83F +:1061E0007E52C576F267815E79FF295A670F9FE478 +:1061F00060FB4FC9BF9573B87FEB1C59D319CF47CC +:106200000EF674E46518AF4DD7A792C76F6A4FF4C6 +:1062100082DF06723F313F2E5EC162F8B6EBF47248 +:10622000E1429C3F8CF115D0171827FC7BFBC5562B +:10623000FC1A7A160049F99FFDCA858BF45FA78A7C +:10624000EED5C8271BBD36B22B377A577B1742FDD8 +:10625000FE9112DD037F7FE9C27564777BB93D68EB +:10626000B46FDC2F527B8A456EE0FE7BBCBD81FBA8 +:10627000EFF17ED5C629B3BE545F6605CCEF0FADF6 +:1062800037BFBF7D5A6019D2E7F0A0D9FFBBACC9B8 +:106290006C0F4EBC5A5B3E99EC8D923EBF777E9A56 +:1062A000D688EDF797F2F9B0D2BEE1F5A0EEF73C53 +:1062B000D4ECA272A0F96FD6FB3FAAF76F6F96A934 +:1062C000FC61B3974A03EE67959A00EE37FC0C1F0A +:1062D000F5F15D67D3EF0E4D898B53F7E8C5270BBA +:1062E000757B88DF33D71BAF5CCE5D37D97FDF642A +:1062F0009273FB0EF5D037D0E9E853CBAA9ED2F1CA +:106300008D7CBF6EEABBE407DC5FBA7A7336E27954 +:106310000AE059E97F7D5BF5F50D0487079ACDFE0C +:10632000A2EB1A4780EEABD0F5EF03BADC34DAB754 +:106330004DE6717FD7B5D02F3FD66F13F61363DFCD +:106340001BC5BC097DD17D468D996E069A5F9B6504 +:106350001D1B2539418EEBEFB8B091DB798A8BF2AA +:10636000FB415C452F43393852A67B3662CF03741C +:106370007F9573647A38FEDEAB8D236D35B85ECCC5 +:10638000FF899F578ED4B52E17FAE71CCE28004CF4 +:10639000B19F4EE676428E6E0FBF92BDB8EAC73E01 +:1063A0007C3F7D0BF263EE3AF3FB9FEA727ADDA845 +:1063B000852F61BFCF4A6DE1BEFEDE638C1E6C315E +:1063C0003E413896CEFAD23C2A6B7F94C491BCF8F9 +:1063D0007ABAA53EC4D23FC7D27E85A5BDD0529F12 +:1063E00068E95F65A95F63E93FCB52BFD9D27FA15E +:1063F000A57D99A57D95A5FE6D53FFD1E76F4EED67 +:106400008BBEAC7463F473480186F161878EBF1E46 +:106410007EB5E0FD9B1595FF3919F0ECCA291D4C9E +:10642000F2E6C9F43EED27F8E98C8FEF5742FFBE44 +:10643000EE398BF50FEBF17FFF5173FC7FCE51D31B +:106440003E413FDF8B8D13E2F7A6D706AADA91CE45 +:106450003D36BAA7222B538FDFD432BAD7DD8E7FD9 +:106460008794F69FB46BB34A18D3439F3DF7DB3D47 +:10647000A1C3C7C966A6625CC1D11EA43884B07826 +:106480000EC3B861DB16FE6774A689152D741E0C49 +:10649000EF2F063B626DE7068A2B5C91E550F05CBE +:1064A000E3586F8980FBEE7B036ECA4B653BB8DF18 +:1064B0006AC473F2DACD7EED1516BF37C352BF54EE +:1064C0003FD777951E672B623ECCC7EDF173FBB9C2 +:1064D0001FCBF073B75FCD2EE91E2D470D233BCCAC +:1064E000E1E1719DA98B9BE8D5B4C3FCEFC538A64B +:1064F000F0F6B33AFCA789F97B304EB4D1CBE34434 +:1065000035DE00E3F7F3737CE820E989076DF4AB2F +:106510006928D71C7A3C08F010C23CC6B67B8C3F79 +:1065200067E467B4AFE6E571B72C879FF27FD03E92 +:106530005A0D78C9F3F2F82D0BEBF0169880F0B7EE +:10654000C615ACF0EE2F9E2659EC85FEE0BFC88044 +:106550007F062BFA9F84BF90E322F8B68DE2F07796 +:10656000B28D141FFA0CEFE55463F7D7B5E5F37657 +:1065700023EF9842070AD0A3A35343BF71ADC0A233 +:10658000ABA17F1BEBD2F0FDA42C9161DE72F294E3 +:106590000D044F234E995C6A865BAA66BE773EC99E +:1065A00002C7FEE235170BC7FBAEEA275EF377861C +:1065B000A311B769BC2AD07E158F5BB4E05ED4E02E +:1065C000F951C6EF67E1F9CCF7E571B9725F1ED7F3 +:1065D0004346DCCCADD36DE58D475DF1F2CE883B13 +:1065E000DF83F61418410ECD4FFB0DF63C8782F782 +:1065F000EE27B04808ED5149CF77156EACA17BDB93 +:10660000D767F1F8B311F763626D68A18FE315F7EF +:106610009D1D79F335EA378CA9781EF5BEBC2A8A10 +:10662000B32500DDE3BD1D4CE5798D32FCEBCB8E4F +:106630004FB0E4833B8699F326A501F2202316BCD4 +:106640007CC6E687A42FF1170CBC7C50AEEDBDEAEA +:1066500012FCFE38BC300DEA6961D6E280F90C6D9F +:10666000E078E9EFFDFF5FFE63CBFF06C977702A94 +:10667000008000001F8B080000000000000BC55BBD +:106680000B701CC599EE79ECEE68B592466265AF69 +:106690006CC1CDAEF5B22D9BB11146188147ABD57B +:1066A000C39C4956C218877392C57612392F36900B +:1066B000107145B163BD220BC9966C034E10612564 +:1066C0004B48311CD1B9428E5CB8DC5A98C40443A3 +:1066D000447028550257C2983C0857A50026499D8A +:1066E00013DFFF77F7681F5AC98FD45D96C2AD7F5D +:1066F000A61F7FFFFDFD8FFEBBA7567289C44D48C4 +:106700006783187508586EF747813EBB498C122F76 +:1067100021198408641921E7F1B7215E76470889B9 +:106720009512D2115148CC414834A252BA3FE2A14D +:1067300065C1C78E9EF0613F15B24EE097B9EA8CF5 +:10674000215710D24B5C614985713CA729FDA006F9 +:1067500034D4B0177C683443FD4C81D0F7F63F4900 +:1067600024760521D9EEF78D2EA8A7FAE4704E25E0 +:106770008C63BE6F8C41BD1E43A1EDF21A668C9DE9 +:1067800040EFD9C1FA21E780BF7584683828F04D01 +:106790002A6788E2A6B49905FF744E7CA24180FE68 +:1067A000F288329E01CF3BDCBE6A02B4AB96A8925F +:1067B000171BF5C5F0BDF35C0EE9463E5BD5BB4F3C +:1067C000006D2BB3EB0AB4B799BA609613B261436C +:1067D0006885712D21B99B34C170211F440CC1F310 +:1067E000CF1AD0089EEFB7E9054422E440BE2AA89C +:1067F000F0BE26A0154C43B97FE367FF01EBA5CAA5 +:10680000D32A093104B1F2D2CBD4F6A9FD3A48D843 +:1068100020C0DAA70C6234C07B9B14D409C8CBED2E +:106820002CD386D6831C167F8A84803F5B51B61199 +:10683000E57CDEE98AB7DF698884E4C769AD0A864A +:10684000BA0E4AE461319415BCD4F9F3724E973113 +:106850007A9BA151B968067F5EC49E5F481E973A35 +:106860004E6AFF9FE1EB014F0A82ABB024CF650176 +:106870003E24C27ECD5268A701F3321A607E808723 +:10688000AC7212ED063D7092700C904F880CEDB218 +:10689000601D613D711D0F5C49683DB3D61E1D41F1 +:1068A000BCC86AC196AC38BFFB6BB76C453CEC17F3 +:1068B000C8D6F104F99573F9B9AB055AD64AE5196A +:1068C000D3C0FB7E62AAD8AFB53E5B5EBA3ED45061 +:1068D0004048F5679BFD43A8976EAE976E51441CE8 +:1068E000F737C0AA8128CF065A25E2C3298624C4D7 +:1068F000F9B5C4A0E53544A3E50F513F412F7FC052 +:10690000F5730D4E199EAB2424E2E47337845A715B +:10691000DE3EA2525A23FA6E19E6D33CDC68200E02 +:10692000E0B7D9B68890762EA7B87CD441944F377B +:106930009F4FB314ECC67E405E4480F647EB823D29 +:10694000489745FBFD4BA0DD58BDD18BF4DBFBEE3A +:10695000A2F8B2737C81044527F4B7BF585BD30D0E +:10696000F3593E6C10C4DB61EC17D6EBE5AAD0C33B +:10697000A85F96FCF21AC222B6FF115FCFE6F7FAC3 +:10698000EC39A8DED1708D13DAAF1B0B3E8F65C5D5 +:10699000B3FAF399F07CEDB85A93A9213FA1C7B19E +:1069A0001FBD4B38E621497C45195F9F4EC23DAE65 +:1069B0007723C549C88378B1D691C8210F3E8FCBC4 +:1069C0002748DF1339E8695A15E7B3333FFDFA1F4B +:1069D000E2F27A8697D8D2BE280987CF2C84C38C5E +:1069E000A86138A1DE8AA9713FDAB1D5933313C803 +:1069F00046F98949BF0BE80355A1E7709EDB63BAEE +:106A00005DC6794EF74D603D4B4E65457D22C2F91E +:106A10004095F19F384E7F607F0DDABDB3678007E8 +:106A2000C4B10B06BD7EAEFEC945228995311ECF8D +:106A3000D37FFBA8FCD79F71263D07BC1A43D05FCC +:106A40008787E1154A11FBDF8F7E44A0A5A8E07877 +:106A50000142FDC1FE067F66C83577BC71EE578ED8 +:106A6000226E4BE3CFD78268C6CBE970D312C8AD94 +:106A70008DAAF45C5CBEC9F103B87C13E561C94F13 +:106A80008BE3FEAD44DCE7067401ED8FB5AECDD1EE +:106A9000FEBA25D05FD9B0B65682FEF5985A83A2C9 +:106AA000691ECE5D83F4EF67F119FC1DF6931B6040 +:106AB000B8FC00ED4E02EE8FD619EFE1F880B3FF7F +:106AC000C67A56FFA9FD59F37B97E302D6E7036C1C +:106AD000077A7416CBB2589FDFC5F0FA11F6A311EE +:106AE0008DAE5BFF09A276C3BA7D2FF07E4C42B912 +:106AF0008E31BBB0B272DA8F98BA5A8F4D8840AFE0 +:106B00002AD3EC04BADE159592D6EB9A13B07E4ADE +:106B10009C06FCC8D5D0FF8E2293D68775B6537CD1 +:106B2000CF838BB8BF312D3CBBB293F19C53BD904A +:106B30005DBDD87E6F0C2EAA46BF61F6513DBDE803 +:106B40007617594F425EC0DE3E7093E1C371649187 +:106B50008428CE5C15F4B955BFB49AAD4F4F3D5B58 +:106B6000E7776E082EC7F99140905C8A9CACF1A043 +:106B7000FD1ADADE80F6E03FEEDA10AA403A775AE4 +:106B8000D86D83755DBC6D86CEB796C767BD3AE894 +:106B900095979684EAAD4AA85EC12FBB00FC593692 +:106BA000D787D4717B302E03FBBF87C765FB231AC1 +:106BB000A5FB236594EE8CE8B4DC17A9A4CF1F8C49 +:106BC00034D0B24476D2757BB088AD5B8F0DF804BB +:106BD000B99490130AF29BBFB62987005DBBE58488 +:106BE000329D468F895B8CE3CB47EDE55B180FDA6E +:106BF0004E4904EDBD00667219F62F901907C67F45 +:106C0000C4886DC779563AD46EA07B2A9A4CB427B3 +:106C100018E7A1C5C8B7F711ACDF5BADCCB4AA7358 +:106C2000FB7790B78C1D186F7A241AB7950C6F24D8 +:106C3000316C1F7285297D7C971FFBEB2D17E97C3A +:106C400066F9ACB4B37E0422603FB99BEC497A91FB +:106C5000019CCDEA0DC85F2609EFBD713994BCF7E0 +:106C6000532A975439D81BC4A4FEF2D7417D9057BC +:106C7000F596A9B472CB294CB6B7BDE5AC7ED79AD0 +:106C8000EDFEEFBA19FF189777AD9A50886BFE7139 +:106C900088E14C924F6F45534E3A7B3BEBB7B8DDE2 +:106CA000EDD1593D3BDA5B2CE5105113DAB5F3B861 +:106CB00002EADDD9E1A6385C43759EC7DD1DF837D1 +:106CC000C419E006C9F684B8CEA6A6CCEB02FC38FF +:106CD0003CC9F54BCEDD91934EBEA97C59F564D9E4 +:106CE000A07CCB329B473199521AB3E6F27184EB08 +:106CF000756FC576EAAFCE827CD11FF6CA930AB60D +:106D00000779374413F8242441CE30F1C16AE60FE5 +:106D1000BE5E651C41FD2D39F3A282F6C0C28565B9 +:106D2000172CF9C85C3E567F3261FC50DA1BB71352 +:106D3000DFCC0D3F3E8D71E66E998C40F948E6033D +:106D4000A348AF341DAA039FFBE13DF06BDA15B5F4 +:106D50004DC7F7D9D42EB4BC9145FDEF1F4533D4B0 +:106D600009FDBD50EDA5FCB5098607C75D2993F661 +:106D700022A8D7752D196A65F6634C4C8E875FC0C3 +:106D800079648279C1FA922B4CD03F0E603C539EBD +:106D900068CFB5A16ED6FE297111B76BA0D72F634E +:106DA0007CCBFCEFCBD509FEB7580AFE0CFBFD9D52 +:106DB0002DB8E8186D279F9E86798BA640CEC338E4 +:106DC0009E7FD2270D8CED57127D84603BF6DED27C +:106DD0003392484B73E977F93A14941032897297D9 +:106DE000A34E94FF07634DE6345908F765AF078A51 +:106DF00013702787296E1C2DE5AF0760FFF9D28637 +:106E0000D06F906F5BCB3A4A13788FEBFBC91B8D29 +:106E1000DFE2F393371ABFC3D2ED27747CCFA749C3 +:106E200018F1D69AF929726702FEFF3A87BF7127D7 +:106E3000EAEF934FADBD805EEAF3F05761F1F73FA3 +:106E400028675BCB4DAF07AE416984A93FB9BECA85 +:106E500038877C7DFC26E32FF87E96BFDB81BF72EE +:106E6000E4EFCB49FC65FBD3CBEFC8D8C2FCB547F8 +:106E7000B424FE6C7290F2E7F66B14C7B69622CA81 +:106E8000A7BD6535931F844072729CE0F62F1027D2 +:106E9000FCEA06231FDF7B3EAD4F9BF09E3C69D78B +:106EA0004734B4F706EF04F64DE8578224B77B0D5C +:106EB000DA2D93E23603F12B218E6394CE22D39404 +:106EC000CEE1F98C523FD38B5CA209F8FC0A7432F4 +:106ED000CBE2F251DCD02FE0D1DDA20AADA8BFA0F9 +:106EE000B837C0382E57218D33891F36306EEC4CA1 +:106EF000A1FC0A633FFEB3409DF0FDEAAF7103922F +:106F00001110CE67C6F519F497EAABDD9489A38218 +:106F1000EA2FD567B3D5A1B6B9E3EF5B6445457FEA +:106F2000F875C90C7578518F8DADC85FB114AAF48E +:106F30005F1BD71FBB6C7A82AEB97A24650DD3B8BC +:106F4000E152F507E24B3FF67F4830D6BC807C1516 +:106F5000D8A91EA6AEF727394EDCF50CE79D1BD944 +:106F60003EA7B39AD9878FFB99FE37F2F2563FB30B +:106F7000AFABAB8D8FE13A7E9EE350AB3682389E4D +:106F8000451FDA603425BE875F7B11F02157303C06 +:106F9000C88DCF111697926121C15E59F60970B460 +:106FA000CD9F909F90D5289583D59FBB86AD2BC64E +:106FB0005B8D09FBB55D7EB61FB7E683F15C63565A +:106FC0009AF7FFC8DF3724BFFF3C9FDF3B37189F8E +:106FD000C7F15FBDC1F8829FC6C3DBD45FAF045C5D +:106FE00098CB84F32BE338E8C63F21FE5B5F1FFCA0 +:106FF0000ACE3FA3B882EA9755A6CAFB5C9DF1353D +:10700000EC4FF155D2F7A42C2F6D9C696F79E935BF +:10701000D4FFB89F8AD2795B7E1C76563ADDD7CEF4 +:10702000D33EDECEC2EB6AB116E43FEA95A93F1922 +:1070300015C2BFDC85B8F032FDEB575E5B7406C647 +:10704000CBCDF8D5A233A0D72E1ED7F60B84EA8D70 +:10705000B9CA151D8167C10DC12F3D8371CB46A7EC +:10706000DE0AED461FEBF4609C97E15568DCF048C2 +:107070002D93DF3DDE86176F83F7EEC65B33B0CC12 +:10708000BF6DC7C62DF07ED127EED98334CE6F27D2 +:107090008CB3F8936D2FE273CF9D0732B6C0F382A5 +:1070A000CFD4E4EC2638CFBEA01FEDC34989E276E9 +:1070B000A3570E26FAED276A191E076BD97AE60642 +:1070C00058BE6E3E39446D0CD7724DECABC1847E18 +:1070D000C6707705EDD7D431BEBF1539A1B683FD93 +:1070E000B37B5E3AC5FC0311D13F74CAB0D5037EB1 +:1070F000F6998A0E12254B2543DB8DFCB5C994BF4A +:107100007D55FB95C4F1FF255040F9CBF1BCC2FA87 +:1071100031E599E984F8EDDFFC596EC41398291D17 +:10712000F555CE6BC859887F8BAF8EDC58F56760FC +:107130003D4E0A243C0471F0B79A27AA3B80EED456 +:1071400064962F4595007B8C7B56B4B7859B8F0842 +:1071500018D74198147678800E3E2160FCE15926BC +:10716000537A495826A713E3CC73E72575517CFF62 +:10717000418B45687FE0E7C5E7503F21BED9E78EE8 +:107180009256187F7A874B23EB118FB3FDFD0CE7E6 +:107190003951B55D111077F01C71F74BBF8FCA796B +:1071A000B452CF5061BECEDC7037E68D9DB7F8C4C7 +:1071B000DDF0BE3F8BADD36850CFC885F78F6E8FA3 +:1071C0007D11D7AB73D3DA8D99506F0476499897B8 +:1071D0001A39D8D49D09FDDA6B65156395E900B3BA +:1071E00063651E91E67D3A15DD5900ED0F6F6A72F9 +:1071F0002E2FC7F70A7D3FA20A0D3CEF40FD5361D9 +:10720000B37E98C53DFA9E6AE8DF51B556C2FDCC03 +:10721000BA3A3BCFEB9D5344783E169655E4BF3FB8 +:1072200073AF13DB1537C37C800F05ED2E742DF47F +:107230005593F357A0BDDE3C81FA92D363D730EE6D +:10724000CC09B3F7967C155F4B0CF3E21FC2BE0866 +:10725000D76B094978EF453FD8F307291BCBE4E703 +:10726000160EF646C864BB8DC5F7A76DF1E742CD93 +:107270002C9ED6A0DFA895DEB8ED76E4BB59D421CC +:107280008C266324DABB0EE80F9B658ADF479B9F41 +:1072900079751DCC73E0FE1772AF03FAB1F02F1AA7 +:1072A000AF033ACF90483BCCE3DBEDEFF4E3F3C719 +:1072B0005BCEBE8ACF3B85FEA01FDA0FBF2CE9A8AC +:1072C0009FC359565C61D0FD4C36CFE774DA61BD7F +:1072D0001270DC58C3F4D32A3B23274E617C118DF6 +:1072E00034D079EC8D0469A9B6D44CE2B82327C216 +:1072F0007760BE9E983924F32AD857F92A17E3BE3F +:10730000AA5720375783BC1A9F1F1B54320093C7BC +:10731000F29C9B544E837CF69E3A1DBC458FD3DE77 +:10732000E27B7E7938E1FDA810FCE932A0CBCDFDEF +:10733000770632705F1C9CDA09E37EA84E99820FB3 +:10734000F5EF591A7764AD62B1AF734D2848CF118C +:107350000644AA47AE72A89F9437037D4CF4BF152C +:10736000C9FA0DBFA0B288C627546FFC5107ED3F84 +:10737000BBC11EC53C4FBF6BE7E47278355AC4F6FB +:107380002380ADE07882DC0AB91DADAD61A5634014 +:10739000341DAB711F05F24BE283FBA5D81F08FA21 +:1073A000257BF1F6BE6AB44B8F897AB136D78E58F9 +:1073B000FD8E0EDCADA4F34F161FA9E358EF03B505 +:1073C00022F7E7C9E3A6D28AAFD9403BF50161E7CE +:1073D0003F8E60B381768868CCEED837FF33DD0707 +:1073E000E13910D2D67E8ADA1DC0AFD692790AFD75 +:1073F0009F3D782FD984F6AA469971E0994161C8DA +:1074000094DCB41E3DFFA9F5790CDC671497B13C00 +:107410006574E23E5183352C954D51877944D7EB05 +:1074200022048B6459E50CC1739EB22A5DC47CAE04 +:10743000BD479FC8817E8A0688867ADC3060F83333 +:10744000506F4F4AC441ED9E19C2F52F1BB06BB867 +:107450005ED93D4111E315C1D7B004F3FC8311128D +:107460000BD850CFAA9C88CF9CF6E04419D4F71AC9 +:10747000CA8C06F32DEB62F6C55745A206B52F461A +:107480007601E0818B14FAFD88A0FFFD31D80182DE +:10749000F38AF2F88DE72D7CED09F11CC1FD6EB287 +:1074A0003DC8413BB11ACBE4B8B015ED402699F583 +:1074B0002BD1C8B3E46D1B9AF2A013F7111AD16F48 +:1074C0005E8EFA05F34C170F5AE511B02F462921AD +:1074D0004F47145A3E1551890186E474C443E9F3B9 +:1074E000F5FEBD35F9A8AF6692BEBEBD2FE77AC4E2 +:1074F000D50E29DA2A801C5EA9F98DD709FAF6641F +:10750000E1E9A66A46537D7C3A76346F931EA79FC5 +:107510003A35D1744B02FDDDA2D73CC4AA9F0BFEC5 +:107520007410EC31F897C780368B80E6F9F8AB1F02 +:10753000128343E5A8BF8A897EE6C30A7510EDAEC3 +:107540009C077CA23E2FCF1B447D7E85EB911C6C5B +:1075500064F9BD54FD4508AEA3F115FDD9C8176304 +:107560007F827929E067AFF0CCD56F1B97BFCD2321 +:10757000BF9B68DF8FA6C8FF4352F5713F496B0F71 +:10758000E8FEDEB20752963B03FD7F47A48BFA79F3 +:107590006B1D3AF2ED6B12E3025B766C67308DDEA9 +:1075A000E6D531BD5C5F6F1CC375B1ECE67C71A89C +:1075B00065FFE27169E8640DB4CF94A32AE69F33B6 +:1075C000751A39A6B17BC97A0E58A7E758C3074583 +:1075D0003A8FC37D77D37DF0E1836B69393AE0EF71 +:1075E000C69409D88171EC775F3E68D1D597813711 +:1075F0005ECFC297455B385B7A3CCB978833A087D8 +:10760000127166D116CE2CDAC219A5116737329CD9 +:10761000BDFB7CD65012CEFA0167AE0BE36C69E07D +:10762000FF0767E7FF4E38FB49601667D9816B2F6C +:107630000B670581CBC0D9A81A76621E62B407FC1D +:107640006539CDA3D3798D9AEA20DDCF601394E319 +:1076500037D54113E6F9F31AC6674D65C83F80E791 +:107660003F552CDFAEDCC4F3ED3D56BE9DD9651A07 +:1076700012A23F917A4268B747FBEC1AF62BF84EFC +:1076800088BB30EE2C00BF00BC7E87E725B389267F +:10769000A29F2A1B9E36F0FD72B0E368F7978D4DCE +:1076A000D33CF58A902B8C479B165F87DB49D4C46B +:1076B000F1C6991D57E03F162784E9FE62C570B2F6 +:1076C000BD2FED11DF7280932B4DB1EFD9297EC014 +:1076D0000824E3602FB7F796BCADB86C8E9DAFF76A +:1076E000D705F2E37EE1F04196979ECF1F8CF17CA7 +:1076F000B245970DC702E9F62B8F05D8BEEC689D01 +:10770000D184FD5F023F5B0317E14F0E053625E98B +:1077100039D0497A6ED1969E5BB4A5E7944EF02796 +:107720009F03FA72FCC921AE07FFD77A7E7FE0EF94 +:10773000A3E74FC7F5FCC1C0E5F99387B1DDA5EA22 +:10774000F9F2E1DD22EE5D9B115F69C669E47CF52B +:10775000F2FC75B5AFCB791AEA8DC9FAE23CB40FE9 +:107760001C7FA9EDEC2DB74E61BE6196E6E720F6D1 +:10777000962DF4F997FDC618F24BF48B3BF77B0E70 +:107780001701F3A1F6D8B674F2EBE171B6CD09F2A8 +:107790004D83F755B2FFFB6807A7EA83CF06683C25 +:1077A0001DD5500F41DE3FB84CBB7AFC72ECEAA10C +:1077B000C0C2F3C8E5F1FE02F3F819CA0DE6F16A9A +:1077C000CA3C7E7E99B879F37270B314E701E32B5B +:1077D000B3F96E9D9ED754FB5A9C18AF3FEA0FDF5A +:1077E0008CFA71F2151B19F2CEDD3FC771D238B594 +:1077F000F39A7438D99CF41CDAD33C797F44791D10 +:10780000F70198C7CF8371BE1951E9F3DE88873E2F +:107810003FC0F3E98FF073897D3CFF3F10A9A4E5D9 +:10782000431183968FFAD8BE395756853CBAFF82EA +:10783000FE13E69B175092E8253BD5243ABB02C6BF +:107840004BB01BEE4D5A12EDD9569644AB557A52B9 +:10785000FB2FFB43AE5A90DF95E1CAA47A8B361B0F +:1078600049F52E563F0A6523AF96E286D07DD0A615 +:10787000AB4814E5EE283B3185797587DB6EA2BDF8 +:10788000838AEFCDFA371FC553412DC3D3D2DAFC1B +:10789000389E5EE5EBFB0D99ADE3884756D19F8E90 +:1078A00014B178E0B8F7E129C4CBE1833E1FFA793F +:1078B00007C81EEDB523571BC278E09F799E70A4C0 +:1078C00047A479BC0F4F49F47E854C5C948FF9F640 +:1078D000BB449D3AD59E60A75BDEB8337A3C413EFF +:1078E0007AAD2B298F7716EDB336BF7CFE1809458C +:1078F0008F17C7F320F3D5B3DB78BC5374F74F97DA +:10790000639ED623D3FD3CFC8EBB12CEE752CFEF55 +:107910001A6A66CFEB6A507ED6B94B430DD373908B +:10792000530395DF8048F357A355E612C4DDD843CF +:107930007EAA2FF3F1D3160139A4D117AB94ECEC46 +:107940009E45EAF3AFCDE61BD6523EBFA191B004EF +:10795000FE77540ED3FCCA68215BC7D12A83F1D1CC +:107960006FDF8AEBD9766C0FC17D3CD15CE4ED040E +:107970007CECAAF5B2F8DA95B02EF0FFF0DFCE3F3E +:107980008D076E7DE1DF874C961F3C99957CAE7527 +:1079900017E279BE73AD4BEDFF42799CC61A86772C +:1079A000F27C06C5AB0C78CDC0F55793E5E13828DD +:1079B0009A1827A6F6978AD30EC469421C71A93873 +:1079C0005D574B2CBDEEBD4CBD3EC8F5FAE144BD44 +:1079D0007E96EB757F06F3E7A97CBCC2F5D6CA0B91 +:1079E000979E2065DE84FDE393D67B3FBB47583AE4 +:1079F000606AF45CE522ED94550FCF53D2DD47B0B9 +:107A0000EA7509E9F953F9B9C1DE88B6E44C31E603 +:107A1000B98528BDA0C7F359C518EB2DC37C37B372 +:107A20005310B62DC1739BD14A99D132D059887F5A +:107A30009607248A45CB8C76B1FAD678C72C3BF6CC +:107A400017292D3F2FF073918F2D8B7D15F5E9D8D8 +:107A5000435B96607C34E2EDD4C4729413F3E71F69 +:107A600068DF0FD3F3B779E4646FA99E4A7BFE34D5 +:107A7000EB0F03F47D9777DDC2F73E5A7EF50B9A44 +:107A8000C76BF9FD2FF01CC4C1EF6FD83D6111CF5A +:107A9000AB2D39612E0A95ED4D1E6FD80F12239A2A +:107AA000A6DFC7ADF7B05EF43EF8B91DE4198CABA4 +:107AB0004512C67B46F660EF24E6CF53F389F6CD38 +:107AC0008EB7282E49C8443F81FB90AC05F09F5DDE +:107AD00064887DC05FD1B9AF8B28C7D281697A2E07 +:107AE000593AA02F38DF831132BE905D774BFCDC12 +:107AF00011F89380BF7D32D3117795296E84FEFFF4 +:107B000052ABB07B87B0DD407CB8CFEFD61A13C63E +:107B1000CBAE63EB9F2FF1F34FDECF88CCFC41FE61 +:107B2000415DDC88F2AD63E71DCB3C4C8EF9D84F4C +:107B3000F9DC7E4A2BD97BA257D0F3BE52392CE612 +:107B4000A5C11521BB997E1185DFDB0C8B8853E520 +:107B5000AF12B56BFDFE8FB6A35DDB1BD1979C0109 +:107B60003B385ECBF47ABEB8B2908F0FF664711DCD +:107B70008D1BD93D870BD99105E250AD8ED9175F8A +:107B80005D827D81387459DDE5C5A1ABEB2E239E66 +:107B90007EC5B2DB17697F5A0FB66AAD983F9B94DA +:107BA00074CC3B0FCB93B7DD0EF4C966511F425A1C +:107BB00089F6AEC3F7CD6E7AEE62C5ADC3C6E043BB +:107BC0005B80AF8FBE24EA26D45BFAA5E75FBC1DBD +:107BD000C5F595D7326E07FACAAFBDBD712BE5CF9B +:107BE0009444B041FFD5B2EC5F711E5709ECBB0A5B +:107BF000EB1C29B346A57C58E73C17CB777F66B6CC +:107C00007C0EAA4A2142F3EE8F64DE14437FFEED20 +:107C10002C3BCDA713BE3F2DC0BFD8BD22222CC206 +:107C2000BC07C3E9B1AC1213FD47DB2E42CFA7DA84 +:107C3000EEB3537FF2ED7C42EFC359F715DB3C8482 +:107C4000EE671D784F7919F6CFF33765ACDE55E551 +:107C50009378F9975C85F8C7F39A4A1235BDF17BA2 +:107C6000216D1196B72064FA13F83E97887A37F69B +:107C70002B1B1A9E3BB6C924BA1BEAB795ABE6E7A5 +:107C8000807E349CAD8BF81D0AD1697BB2C2A07690 +:107C90004922E3ECFB93D9FB206F93C4FB20200F18 +:107CA00082F902DFFD2297C76A7A0ED8B6278D3C8B +:107CB00034FECF229C1793CFB13D25CFE2FD91A199 +:107CC0005DD91407435925E3314ABB689C3A543CBB +:107CD000BBAFA1F704EFC97A7FB059C37B3FABEFCD +:107CE000C0712498175D5FC7D10216B4A8F27D3821 +:107CF0009FED2C4E6987FD06E2DBBA4F63E3F2B2DB +:107D000015B1BC94ADA5EA75DCDF482D75AFEFA4C5 +:107D1000F77AF4ADF8DEC9E545FC7DC742400B209B +:107D20009F6E7ECE1CB5EE6DB0F1CC66D413FEDE38 +:107D30004526E938D96486B0EF14542ACF54B98265 +:107D40005878FEC492AB9474CFC63EC1EEC549AD1F +:107D500032C1EF272E74CF66A4CEC7EF2F87AF6353 +:107D6000FD86AFC6F2963A6398D919D6EF5D75C60F +:107D700013CC4E98BCBE99F43DCCAC1FE4F7002C5C +:107D8000BA531ECF40FFF7E81793CFFB2DFF68D102 +:107D90004BF9B9FF617C05FAB43A3AE3C790A9D42C +:107DA0008CB6621C5732CCECFB8AE75859FA2C2B64 +:107DB00027EA24DACF0F793EDFA2577645FDF8BDDA +:107DC000927798D96BABDDCAD976365AEF5D1E8FA4 +:107DD000BC5B27D352F035FBBF05727AFA3F182EF1 +:107DE000951FB13C1F751CB07E2BF04F8A6B960718 +:107DF000659FD4403DFBCC12B4DBD108CB7712E9B0 +:107E00008D892F54B0FBB8683FCACC713F7EABB3AD +:107E100072ACCF8FF9FF150344CDC365452309B478 +:107E2000F6141860C07D69FBB888F7384A0C65C63F +:107E300040DC7C2FF99C4B3B27511CFA0648348AC6 +:107E40007A6F26E7414B48B815C7F5563AD4988A59 +:107E5000D70993F3A1A53C6F969A274D8D7FDFA993 +:107E6000E3E7E3D791EB687E4EDAB6A01FB7E2DF17 +:107E70003293D0FBDAA56362D48BF9E3EF9CA6F7CB +:107E8000E8A481A888FE84F4E451A57E7A2CB86029 +:107E9000FEF40897E3D3FCFB9DA7F8F77578BE8145 +:107EA000F46FF11E37D0BFE6F7B8DFE5F7B8CFE0E3 +:107EB0003DEED2383E1581E1E942FB4787100A22A8 +:107EC000DFA44026F4BB26FCD0EAFAF8FEEF3B63C1 +:107ED0003E11F17004F67F4D69F723CCDF8F8D2CB6 +:107EE000BCAF7A02F73D0BF05182FB1E4CE8998F34 +:107EF0001C8EB9F0FE21BB976BED038FE03E10F8AE +:107F00003C82FB406F9AFE8F2DA7E7B9A40BF63D8C +:107F100009FBF023551AC567E9A1E47DE0D060C9EB +:107F20001D2BD03EBC2A9162F6B8D0B6C0F725CB47 +:107F3000EB67BF2F595E7F6D7C3F77B1F3BABABE56 +:107F40007B07DD2F6A6E8A83F9F208A9FED3AA7F28 +:107F5000213F6BAD77EAFB0BE70F4C9A3F18E3F735 +:107F60000BC6A2772B34DEE638B899CF7B162F7379 +:107F7000D69F8DDFE5BD97E2E59E4191E61CACFE04 +:107F80008E7BEFA5EB3656582452FF06FA84F7C3D2 +:107F90009F8818533B81AF3D37869D4D50EF73F559 +:107FA0006CBF5E22879DB82E2593928826A2A4A539 +:107FB0006E8AF9999DF4FC2375FC129E9721871611 +:107FC000CEBF84EAFFB67D6D0B7EFF91B0CF2EB1A0 +:107FD000F6D98752F6D9D1F4F72F52F9B9FB6FE4ED +:107FE00067FEF5B4F2417C9FC8D7117EE730FE9F53 +:107FF0002F1F845F2821ED2CD4D67627E875B3C4D3 +:10800000BFA3E438BC583CB6CFB30F3E502F703FEF +:108010005AC8FC38CA438AB7AB20FAB45981F74032 +:10802000EC3AE5C31F3651DED08A7ECF911AE76362 +:10803000C480F747641E4FD84888C60B0A8F039D3B +:108040003C1EBB709CA173FFC6F6178454D1781DEB +:108050003F844EE4CF2A3BF0BC2AF1FE33BF6FA928 +:108060003C10169B12ECFB8FF97C3B228A80F54B6F +:1080700063BB8806FDDBDD3AFD7EF80A7ECE65D364 +:10808000C804CAFF80C7378471EC867311277E5FEE +:1080900068B53FE0599B81F6F5C0A685BF9FE8E033 +:1080A00071AC55AF634064F73237D9A3C5D055875B +:1080B0001C54D2EDDB7E52AF25E9B9DD9DF25D099E +:1080C000D1E9F7B08AAF6CC1FB8736E5B5C572421E +:1080D0001CD491115E82F76B466DE9F1F07A3DBBDD +:1080E0003F77601EBC5838B4BEBF9ABD4FCBCFE1BE +:1080F00066CFDF0AB52176FED6A2A27D39CDE51680 +:10810000EF27E5DCAD30F95C6D7D7DF00CDAF50C28 +:10811000EFBA9CEDDAFCF98A7375C66FEB697C984F +:108120007CFFDA29F2EF187CEC3B0625E5FCF542F2 +:10813000F7B0FF542FF0FB5229FB5B03EC5B763A60 +:10814000DCA7E88FEBE2EEF70E731C2A0FCCD0EF22 +:10815000BA72627FA678CCE90BD2FB4EC529781C97 +:10816000A962784C5D8F91AA261ADF8C1C7CFFF9DE +:10817000F350EF6C951845DB72215C8E1CE4B8E47B +:1081800079ACF9F0388578CC5F088F6C3E51FC13E0 +:10819000E69DB3CD2E609E4A8DEDA1F351AA428695 +:1081A000518EBB1B22C86E5CCFB2B5AD09F6F5810E +:1081B0009BFCDE867CF61EEDA5AA59F7A5051A677D +:1081C0006618798389DF8B2D6D60F1729F71A1EF45 +:1081D000368293ECBCC7980CA4C9F33A783EA6BF8C +:1081E000FE01721ACA47EA1FA0FBE1AE2B4BE879E9 +:1081F000444D43F2B9E4B12BEFF5E0B9D437BC9D5F +:108200001E9477D7B1FBE8FC66FBE3F3047B67E0E1 +:10821000FD534717B3DFB9F5F77BB6BBE6F637BBBF +:108220008E29782AA8326A501E7DAE3E6A2FFA8ABD +:1082300040C2D0B4CFE4F760CDB549F82A6D1053F1 +:10824000F4CB4CA2FF17A7913C60604200000000F5 +:1082500000000000000000001F8B0800000000006C +:10826000000BFB51CFC0F0030907F1A3F2B7A3F154 +:1082700067F2A2F245D1F83668FC035CA87C37347B +:10828000F372D1D4938A8FB031309C01E22B6CA869 +:10829000E2260C105A184AB300690324357798B1C6 +:1082A0009BD7AA00A13580740C10B701F11271069A +:1082B000868592407120BD459C32F7A2E359A2D435 +:1082C000356F1493863D5551F98D060C0C5B0D19D5 +:1082D00018FE1B41F80E48F2E2C60C0C4D0610F6D3 +:1082E000452D0686294035E6AAD8CDBD04949F0ABF +:1082F00094D730C66FFF6B0B547E261A5FD7159547 +:108300002F8D261F108CCA3F178ACA170B87D000E3 +:108310000162219BE8030000000000000000000053 +:108320001F8B080000000000000BED7D7B7C14D546 +:10833000BDF899D7EE243B9B4CC206164CC26C4844 +:108340002060C00D048C48EB24041A14718D68530E +:1083500054D82055B43E564A35F6A2993C091135F9 +:10836000A055501E4B001BB9D85204A5B6F62E8F4F +:10837000E2A37E6CB4D48B8A76C147AD3F1F917B5C +:1083800015DB1F5E7FE7FB3D33D999CD86C4B6F779 +:108390007AFFF8D1FA999C398F39E7FBFE7ECFF747 +:1083A0009C75CB3CD12E20E42BF8479F7FE0082121 +:1083B00053134FA332182365F4398D049BE9ABA7FF +:1083C000F9701ABC57D45D3A34216A9484BC84088D +:1083D0004AD878C947481A21BD421654109D0C2727 +:1083E000C40D7F6984886A588771D275DAB6941093 +:1083F000C9B78B844BE8936C50DF3B9B109E0EF902 +:10840000D530686C10924388AB5ED0DEA1E5801851 +:108410003704DA6F75210976D0DAB6E0C99840BF23 +:10842000F399468230AE4B269C48EB955C1234A003 +:1084300077256B6FCD57E9DC4FA04CFC24B89DC06D +:10844000FC78129309C9A3CFAF7001B43F1DCF557B +:10845000A2073BE8786E2D9DC48AF13DF98AAD777D +:108460001CACD755EFC2F9A4CBB198C0C17A356E18 +:108470001EED976338D73BAC6FBD5A05AC7738AC6F +:1084800097D68FF0198D027DBFBC365C0AE38D9CB8 +:1084900011E5445ABEF7BC27110E5E808307E150F8 +:1084A000688743A0F6F6CD7158AF21920E3A5EE38D +:1084B000B7223F85B268B8D5261FAC37B2390EEB6C +:1084C00075C96A739090873C1904BE5B7FCC1B759D +:1084D000D379AE6E2024368E908E0699C42832DA77 +:1084E0001B542CB735F8F1491168FC88B63F359D0F +:1084F0008F76D0F61416FAAE12DBB3903DEF231C44 +:10850000D2432D49C779DD6196291AE4D044BA0EC9 +:10851000A526939424E828F9E90DF20EB87A8AD3B7 +:10852000110F56394DCB7694DDFE518EF684E42240 +:108530007CB02C1032DAA44F51D44910E629D279FC +:108540002A14D69973FDD7DAE6514D046C27081525 +:1085500091107DDFC291DA5DB6FA9701E2743DEFCA +:1085600010199F179CBE842314AECD3E12ED085007 +:10857000FAF1D61831A01F8E448A54FAF4891FC626 +:10858000AD7916D07A29A666977CF370B0D677C1FC +:10859000E90BE49A8989EFED32F194EEE543510558 +:1085A000E6190D017D34178B3CACEF9B9B6F692F57 +:1085B000C0551CE60A7669FDF1B211F03215F0D70C +:1085C0008717A46B0B2F1D0AC30BE5929478B99EF5 +:1085D000A8D8AF438CCAD9265C404E79010E88AF2B +:1085E0009E10E2B98CC281FB06E1D05C591BA278D7 +:1085F000114910E121A96327839CE33D3382C574AF +:108600007EADDEB105206FAA018F743DCD8D7C2D2E +:10861000D0B935AFE47527C3D1CBB17E7FEB8323CF +:1086200083C3DD0A5FCDE0B0AB1AE150C27FA37017 +:10863000B0E6B51AE685741AAB467C07F96F964E1C +:108640003D7A6D2ABEB2F0714F1F1C7B181CCBFE09 +:1086500077C0D1D347E7BB189D977CB3746ECDAB81 +:10866000BD0F5E068397F6CDC0CBD2AF440ED6C207 +:108670003C96AA2E0DE8EC0782E1AA0379EFE1C847 +:1086800076AA4F81F7C848CA874AD3AB9A46C82C06 +:108690002E0DD74384AB32C3363E5C2A524D3A99F5 +:1086A0003EC9EA1E81AA6012957AED7C597FECE5FD +:1086B00049876CF329E5BC3EB07BC8B9E45C98CF30 +:1086C00049BAFE181978FD1F34F4168B45544F37FC +:1086D000F44C3A24F5AFFF814022C0F744DEE5C2F6 +:1086E000F5ACE84CEB2885758DADEAA4F399CB3158 +:1086F000FE270AAD3C8FB6EFFEB458B4CD67A9C2D1 +:108700001F77A798771F9CAC7ED49C7067F7EF3FCC +:1087100050BFAD5C38C45178E962A83A408790A94F +:108720009D067696ABBB22368A24C64DCC9BCA6C7E +:1087300073DE2423C53C7D439BE74070B4DA9D542F +:108740009ADA08EDD72C059FD328BE5B72F8601328 +:10875000497CD7C2BB05F766A569B81DDFFDE02ED1 +:10876000AC9E0DF3FF8C18C560DFD2F2D8A5F4FDE6 +:108770002A935EFACD6310FAF8D1FF307D74027D42 +:108780004CFD46E8E3012EE77F1F7D487DFE47272D +:10879000DA75AD853506E8A3CF280D102A2784CEDB +:1087A00052F48BE89CD0AF807F3CE8EF421DED9304 +:1087B00074EA9E403FB7C63BE492E877CA2D7F6DCE +:1087C00067CC1A17D62D997E06B813202F4585C47D +:1087D000D2603DC485F20CC8F2AB31E057DD2D17F5 +:1087E000F8B01FC26BA0F588D08F7E0FCC80AF028F +:1087F000D0EFCACCD0C433ADDFF91DFFFC5026CC7E +:1088000063A8ED89226AEFD9E03E703F91BC67E131 +:108810008DD2F7CB30404E02FE7AD5E25A808B4C97 +:10882000F820F83DCDFEDB0CF0ABDA08E3CB55E6E3 +:10883000931466233EB7721AD3D77E8AFF4930ABB2 +:10884000D931686FD50F86EF80C9EFCBF9D03B20C7 +:10885000AFBA7248A73029D14E729130F24FCB7C1B +:108860006CD7B5EAB61847E12FFD582D05BF2E206D +:108870006AE9977AEDE336E17C363744C9DB12F8D2 +:10888000BB11F4F346AF08119023F9F5BD1C94DD3C +:10889000B9710ECA56BD4577A485D1696B3BD58B9E +:1088A000502F6BBC4A9F059D8126D9417721329F6D +:1088B0007E773461FAF101F06B03C870F87D77BD03 +:1088C00093DEFAE8AB65687C703BC80DFADD537740 +:1088D000E9AE1A3ABF25B139AE024A3F019EF915F9 +:1088E000A7EE224B012E271ABE206F1725FA17F28A +:1088F000C3B17EC9EA0AD74C9B5E5F42983F492DBF +:1089000000D7A513EDDF6B34E54FEFC1AFE8D44ED0 +:10891000B60BC84703CDEF1AFF1393C42989F2DBC6 +:10892000ED02DA156F533F10E8E6EDF640D448D17A +:10893000DF824B629C27719C5377EA2EB0C34F3481 +:10894000C81CE00BD6A951B82E69AF70E9CAE0F394 +:10895000CEE69DF41B35C73975679C03FB313FF6A6 +:10896000170EC6CB37E2153A8E436220CFF29F1B1B +:10897000D605EBBCE0F42769605F5AE359E36BB0BE +:10898000CE618972B49ED94F5158A70FCADA90D6DA +:10899000A9C13A6D71853E381732BF7F2038B7358F +:1089A000EC9A24A6D027D6D355C4FC4A9714463F48 +:1089B00078B079B8FD743C1B3DF6CDC37FE679AC49 +:1089C0004A9A47879FF909967F37D877D30B697FF3 +:1089D000873D6890624AA2680A52F89D2A207A353B +:1089E000D8A3D904E149E5D349D01FBC29D744799C +:1089F0001E593139319EA0D27AC778A6BCF6B90C7F +:108A0000901BC45E6FD33F32E8058897F9DA3E8544 +:108A100076822FDD007B51F089EFC565E7FC500FB2 +:108A2000E57361E0BF664BDE117208E255A216DC09 +:108A30000AF0BA8B779974A7EB8D10C7A2FE704726 +:108A400010F5EA5D3CC447542657ACF949C38B3353 +:108A5000B1ACA4968B9B1A222562517F386E9298F6 +:108A60005F494E5F1675839EE38B6F85EF0C344E26 +:108A7000B21C69CE2B3D1A8678558E0BE596655F44 +:108A800025AF671DAC672A5B0FD8E1B6F5ACE37381 +:108A9000FAAFA7D93BD65C4F6A79D602EB91FAD3ED +:108AA000430BAC4719B85FF2FC2DBDE32E24865D65 +:108AB0002FACCAE3D83849EB5855E402194D5A4651 +:108AC00006B7C25A9F30D7953C3E5DD713A9D6B59D +:108AD00032EF41BD89AEFF245DBF0070F6A78673FB +:108AE0009A7C5B09C82F6B9EFB7916F748EF836F62 +:108AF00004C7735731BADCCE87F7C3F7DCC56DE81E +:108B0000A7B8733B511F794AE8BACEA17E16D32D80 +:108B1000644D1E899640FC8B7E1BF4CD9ABC9EC78B +:108B2000A14CDB11D556B6E6B1264F1DA9D8F8B039 +:108B300075D6F0D7804ED27289360EEC8ED81D04D1 +:108B4000E49F3B97AE933ED3C49E1807DF2A238150 +:108B5000ED1AAC2386FA94B24700E8C393BB8B545A +:108B6000D0F1D67C2930F81697E17AACF17FCDB3FD +:108B7000B85D329E0ACD7527C36937E0A9A43F9E30 +:108B8000763FEFC4D3FB263FA5C0D3FBA9F869F716 +:108B9000F326FD75A6A6A322F987254CEE3AE96FC8 +:108BA000FB4F6617B07158DC1851A5A1DB89E3B8FB +:108BB0007343EB013E02E09FA274BDBF5B037FE500 +:108BC000417F7925C82477AEC603DEFEEA0DFF5F3C +:108BD000DE36DF914B547C6FF1EB2C6145DA095A9C +:108BE0007EE8AA82CCC5F41910B894EB5BDB40D7C1 +:108BF0005604F25E26C02FA7DE1C87EB1A882F1EB4 +:108C00006920257679FC48B588F2F8911B0BD6547B +:108C100041DCCA57381964AB5E1E58BF04EC38BF3C +:108C20008671AD6CF3FB149ED9428E4D2E99F64F92 +:108C30009ADEA3839D23901E1DE2FC7E6AE7C49802 +:108C40005824A20D4EDEB2CEC6223AEE18D86F508E +:108C5000110EB902D87F610D30D80F0E0F5DC523FC +:108C60009E97D58DED126C7AE65681D11129F1B11E +:108C7000C1C5A03F95BD6BD1D7460AA7922228F760 +:108C800072D06EF47212053EBA1FDE5378BCCE87E6 +:108C90004A605DA3576802AC67BB198FE3882C0E4E +:108CA00047BA53B700DD6DBC2DDDA43B750BCCE797 +:108CB0005C811F483E9C2BA4A0BBB4B90601B176D1 +:108CC0005A0A9F0FDFCBE64259008CBCE531E4E73E +:108CD0000ECE946F067905E84BE348E21FFDEEA83F +:108CE000A08676C722131F3EADB302E82A50EEAA33 +:108CF000FC3E856B7B58D141EEE6E5F56415009F9F +:108D0000FE5120C0A7A3E6FF6763152DAB3CE9CD5C +:108D1000F4D3F2D2DE46C077BE2EF7829CF286D420 +:108D200003B0E7D3DE4070BF61548BDEE8D6FAAF04 +:108D30004B76197EB0B734EDDAB9E0C77105322F42 +:108D4000D371DA579120F457B4F78EC1FBBC80E1A0 +:108D500087F8FEC82531B2987E374F9743F01DAA99 +:108D6000472BDCA0A7459421445E1244FBA1A0BD83 +:108D700007ED69450BDF44A8BCFB500A2F02F82819 +:108D80004103E1973DE710C2679DD44354D87799DA +:108D900011D3611E6BE7B4913A9B7F1F31F141659E +:108DA0009F1E2D49D0DF7A81FDFD60EDDAB4EB4ADC +:108DB000A01DDB0F91488B49B706E1E93ABC40B7EB +:108DC0001AD2E52DF0FDC09220CFD3B250A655C2E5 +:108DD00010941F47C07CD649C648E8B76E8EAB16C4 +:108DE000BF639057C934D39ED412F84AD3F46D8030 +:108DF000AFB182C4E4FBA8CED846FA7E44B95BD5B5 +:108E0000283CB2E73F187B86C2C13F530E89E5E09C +:108E1000476B5C3EAD1FEE17881E04BE5C1B7B13C8 +:108E2000EC835A0F01F88DAE0EEA301F9029480FDF +:108E30002173BF430BEE970208B736A03B6F6D67F7 +:108E40002347DBC94ACF7EC0CB2362E44F77D2F6FB +:108E50008F3C27040DCDC63784F28DCD2ECEBD912B +:108E6000CA8714F68CD57E307D9BF07F99DEB2ECFC +:108E700005CA5FEB04D4978CBF86AABF89A11F2CBB +:108E8000A470BDB88F097A4480CF5C0A1FB463CA4E +:108E9000A4779CF69A982853847D74C7C1431B61BC +:108EA000BFE13CB7BA5DED5F3F17CAD67A29FC0E29 +:108EB0009A7C7560EFBF8F05BDF6FBA05B83FDB8A4 +:108EC00017B99EF7703FB542D0B607D8FCE469D019 +:108ED0009F30271A660E65CA5BC0CFBFD7051DF845 +:108EE000ABA78C8B42BD9B1C6F391FC6A3FCD64120 +:108EF000E7D133E3E0B14C5ABE9823B7925242E631 +:108F0000ED130CF7A4FE7098BBC77D1CE03817D694 +:108F100069C3CBBC5FDBD64DFF7B038893E2FDC00A +:108F20009B232E7E04BE433243A0C749D572F22450 +:108F30007D5E5CCEFCB2DF57FDE13D82F3A0D44103 +:108F4000E7F5FBF23FF8C04FADD039F46BE6CDE06A +:108F5000A2EE14EBA3EF258DD2C95CFD535C07088C +:108F60005237A5D753C7D9BA5EA472A591AEEB927A +:108F70007D6FB79C0F72A6524639D36F3DC9EB98EF +:108F8000E12CF7E1BD8A14C3FEB048D28330EF3F35 +:108F90008BE113C88F3BBF63CC04BF23467A3B50A1 +:108FA000BE86512E58FDE6E42C41B9222A3CEEA3A0 +:108FB000D227F2C9C95C2AEFC19EF1F129E14C72B6 +:108FC0005D209C6C743440DCD9D4FB5845F9A8E290 +:108FD0000B11C74F0F1294635E1247E59F0950A310 +:108FE000749005121CFB0751EF103203F7CD7D6919 +:108FF000FFEC71AFC271397D0DF9CAF335C615E3C7 +:1090000048AFFFF47107996F5A227FC067DF375F5F +:1090100045ED18483E686E50F1E986CC0488B3955A +:109020003039B7B2C1CF9213C4BD3AC86B25E8D26C +:10903000400E78941809D0769F54C8BD0478D08C1F +:109040006F597EA0A7981CE729DE3D419723AE22E9 +:10905000E7BA86B4DFD09A3376C499EC2AA0D480DC +:109060009CE83750BBFFEE6733D5DF019B7D272A95 +:109070000509BA3EC3FA84F23003160911BB3E104B +:1090800079163F6B5616CB28B74F7FF59530CDF448 +:10909000BF09E45384CA53C165811870D8AB92DA12 +:1090A000762B47ED02C9BF44B7F3FB556007801E1E +:1090B000F6DFA8C7878007410CD5D631FF23087695 +:1090C000CD1ACF42721CEC44CF428CC7B6E50C0FD0 +:1090D00030F9C5E2785401A21CB3E8747FCE15FEC6 +:1090E000386DDF3AF20A3FC8BD5629E48738CF739E +:1090F000394FA2DFDA763A93B8293DB5F90BD08E15 +:109100006E3B3D664424C5FA3C84C98B7442CCB89E +:109110001D2DDBF44A9B9F97613E274B98DC59E35A +:10912000F98D0EF92C2E4D8CC0F82E2584765475B1 +:10913000D92EBD0EF47B5809BBD5FEE358DFA1FF45 +:1091400038CC7B813616DF718EFA94F3E85F0EEB34 +:1091500005B85F4D50AE26D74B7286E19904765123 +:10916000DF7B15BE5BF8E2448C3F437B0DE2D254BB +:1091700022005F25E83FEAB083C1D02429E2286DB0 +:109180002E1DE584914FA2DB613DA28EF1E2162EE9 +:109190007B32C48BDB4675F853D193E86FC7B80BAD +:1091A00085510CE8C8ED9FAD837E6EA1A6DC30141E +:1091B00009AB7BB849F8FC14FD6355FCC04E67DD74 +:1091C000A2735FA6592938A39FD44AF9888C1BB88B +:1091D0005E7205C321D43B91A3300F914CC2F98B31 +:1091E000B9878F06E83C7E29323BC21657FAD06E0B +:1091F000A75CC0EBBF1429BCA474364EF2F821BEA4 +:10920000F219A85F2486FE4DA4E3B407A6997A2E2E +:10921000892F866847A957054DFED633B8E18C6E75 +:10922000E15F7A4910728688FF7C4105FB13F008E4 +:10923000FE9B04F615D05AB17802E6ADD3FFC1BC4F +:109240003366D0B20DAE82BE401F63EA7BC90F7495 +:10925000C3DA5BF428003EC00E4C7AFF7A323E1A25 +:10926000F639E2D002617941FDE880AF8C8B53532F +:10927000C16168F1AC767F673BC62F08B54FC0DE91 +:1092800036FDF6B526BE3B41FF8C83FC2BA67F5AEC +:109290004C7DB3AE41C3E7030DC558FF604310CB0F +:1092A0000F379463B9AD41C7F2BD0DD5F8DCD010CE +:1092B0003293E8A2284FD78ED4D67360AF924D95E3 +:1092C0002FD22E6BBDDA6B04CAC67A5606A770146D +:1092D0004551EBFD9506A5CBB559DAF72024F4F8F6 +:1092E000FD2D4D87607E45DA6B1C2D7F5B6A3FD07C +:1092F00042A7B476226B9FDBFA286B9F66C6F9B44F +:10930000F983C081C9C5207C8F3ED7E698FEE61060 +:10931000FB95433F0AC7B581AFF7BD7431AAB3F5DA +:10932000FEA6F24839E4E3B1F9D7B4EEC4F9A36874 +:109330009A4EC895AD3F6B32145C9F19F70991CBDB +:109340006DFA689E24B179977EBD7987CCF56686E3 +:10935000E23AFC79580C9F2DE5809F14335C14B5DC +:10936000EDDA6EE6A76B43F3731E8224C09C447B48 +:109370002937A88398BB30E97DE60C1DC73D4F62B5 +:10938000F1BD0D914A99F1B18EFB9315E67B2A97B9 +:10939000512E8ACF333BFD8201DA433BA32CD16EA1 +:1093A000C079AA83D8B3435C271143E8CF4D125547 +:1093B000A64FCD7E672595D315C6AF43C5C7BF98C9 +:1093C000F8F89BA03AE0F589E01C377B274FCA29C3 +:1093D0006B0FABB6E913FA5F969EEEB06BBCC16C37 +:1093E0004759524739DA8F0C3BEDA09CD00447FD1A +:1093F00088DAC98EF2594BA73BDABBFD958E7266AF +:10940000F9858EF679911A47F9EF85B72A3AE12165 +:1094100025C179A8E3B897DF4A82944E161E11D071 +:109420009FAB27F15923C06FABE7301E04ED546AA0 +:10943000175D0D7FD2325FFFF22CA0BF85842C73A5 +:1094400067D1A7189720BE7175BD3BC93E66E3EF93 +:109450008F0F6B5A4CDB1F5BCEC6A74FB4D38F194F +:10946000CCDF5D74E741EFB9B4FEAD23421096FF47 +:109470001689DF0365C310CCFDCF781ED0D5E56615 +:109480007CE0B819777ADDCC7725623CAF86D6BF11 +:109490002E45AF6672E3F5CA2354EEBD9E16CF8308 +:1094A00072A3F17E650B261AAC6EFB8E6D1D8B9739 +:1094B0007318F7D1435A9B1FE24BB9C1291D1A9B60 +:1094C0003FACCFA506B702DFEC90585C7F2BA7EF2F +:1094D00090E8D35F183AE3FEFA9BE6FCAC728B147B +:1094E0007E02E4C7E2E5592EC87F5ADCFEB2047C56 +:1094F000FE8AC5CF6214D7F71667C931A302FC955F +:10950000D7FF38ACCBBE5FF68AE48CEB267FA76E24 +:10951000F9CB0C6F3772410C5FCAD1BC85B679BEEE +:109520002C65607FE356F61D6324E7C8237C5662F2 +:10953000FBBDAF482C5EFA77ACB327F53A89B9DFAB +:109540004332609DC722D7207C3FA3F400F6EEF3A0 +:10955000C79F95E2200FE6E738E4C1E216C1E17F3C +:109560005DB9D4E3285FB5FCB2CC54F93A7DF46D13 +:10957000D8E8D16657564040B10CE269CC4F244937 +:1095800079DD3E12E638FA7E04311A21C463E571B2 +:109590005B76EB5955DA6BF42FD2ECBD62A419DF80 +:1095A000D7444A57F9F0178B2B1971CB0EA7F0C986 +:1095B0000F121DF23BF213EFD1AE19B55C74C43338 +:1095C0007C4B9C65EF5CD111B79193E24FD67AAC9E +:1095D000F50E37ED13A24735C0DB6A6FCC0F76402E +:1095E000E7BDA4790E7DBFDADADFAB7D80B50384F9 +:1095F000503874CCA9DA9E6A5F162D66BADEB4784C +:10960000B002F85B26C1FD1067F115B278BD4217B4 +:10961000DC03E3893D32E0DB1762F1D791A02469D6 +:109620003F7EA79E06F3B827549305F5694698B484 +:10963000D3FEC3427C341A602212E2C1DE6A311AC0 +:10964000837259670CE07CE0CD7F97E336BAB4FAB9 +:10965000935A2B7E1F3D63FC5E9F5F41AEF1E1F8A4 +:1096600011B44B297A9B7DCC9F02FF5F0C8A983FF7 +:10967000B4950B8F75A588BB5BDF1954DF0DB15D09 +:10968000A0DC85F4D67A8C437ACBCCEF0D431E1444 +:109690007995C5DB8DCAE0D130C40B27B9F03C43C6 +:1096A0004679AF06FCEF3EE651058C7F47CEBDCC38 +:1096B000CBFC8C98CDCF389594BF729C0B57B8E8F3 +:1096C000F7B8E1B561F8DEED27388C4766CE60F972 +:1096D000281967B3FCB0DAF373C92760B72BE147E9 +:1096E000A1DE4F11F71EADBFCE2530FF3AF63DDCAF +:1096F000C79394A00E79111229C5F8B92407F1195E +:1097000071B1B8F962F3799D8BC90D34FC6DFEFE21 +:109710005FBDE11A80EF185DAB04D75D5092F7ADE5 +:109720004A324FD8F837EC72CA37582FEC577D11B0 +:109730001F7346FF4B923F3F1BF647DB462D607E73 +:109740008F6FD739EFD8F83EE2627AF1EE3B9EF4A4 +:10975000437D2F1FFE3EC0294D8FE8302FB1308C46 +:1097600078EF6BE765ED24BA1C8847659C3F3706A8 +:10977000F4D36AEED35235DB22213D517F9D4BD08D +:109780000DA5A788CBE6D75AFB5DF4DF87205F5C89 +:10979000265CEE9E78AD9C6A3D27A470BDBDBFCB14 +:1097A0001FC4F50C746EC4DAF7595C6E0E4CB46FBE +:1097B00043BCFB7AD31F5BB677E36188672F3B8F8F +:1097C0007AC241C83FD97CF819C03B350F195F7484 +:1097D0001E86FD8225B51E161F272194CF1F11BEA0 +:1097E0001AECB38FE08BB4FF47CAB4AD8D01F89C7F +:1097F0004E2EA3FCBCD1C5F64F4585ED2F8B20D74F +:109800008A4D7987F06079714461F2CE207223CA63 +:10981000DF7616BF35E8FFA0FCFD4E673CF7BA7552 +:10982000CEF2B5A46638C89B6B1F904894837C7FAA +:109830009B3C0C407C80E1EB3A126903F9B4D2DC2A +:10984000EFBFE9A9892EF0B3AF9FA206204FD382C4 +:10985000E77617D36B1F50BAD26C7AEB065FD465EC +:10986000E6EB601CA6398BE9858FF6CC8C015FBED8 +:109870004DE506E23D699D2BA59E7910CF36EE9110 +:1098800082CC4E627A00680A40774377850EF16D8C +:109890000A2D6D98B33FCEFF9A76E77A078347F299 +:1098A000FA2DFB78A0F5B8BA997D934C67BFB6F84E +:1098B000D5A4A3BEF3454D22692E83F8D85D78FE6A +:1098C000A8DE70AB6EFA3C95961F857DBA63A65CE8 +:1098D000A76C702EF32F22E7C073A8FDE3FF60FF93 +:1098E00077A07F4EFFFEED3E23047C6AE507BAE5D4 +:1098F000304392C8FCA976FF20F5B9B45E38437DA9 +:10990000E199FB439C13F673EAE0E518A47FDC279A +:109910003B61DA47CD52E812CC83FFA3400C0EE83E +:109920004B457BD368E534B06FEB565F9A09F45A28 +:109930007744F0F1019395A1BDB71AF7033F714940 +:10994000A69D1817813FEBCA03B3412E374B417FC9 +:1099500016F8C377B1B86B45796918F765945A0959 +:10996000ECEC67774EC1BCF71B94D922C8F9BFB99C +:10997000983FFCD18E5F4C23747ECD8F7B490CF5D4 +:109980007714EDB51BF608482F3FF8B917F3EB6EC7 +:10999000D87DD3D6B9741CEE292FCE47D87DDDA350 +:1099A0002C5EDA8CF3B9E1C9CB7E6F98EB92353837 +:1099B000B762DA1746D00FFAEA263759C4F2ED9C9F +:1099C00076E2E2F6D2C37E98577716E60FF4D1AD71 +:1099D00048DBD3FE75F45993826E47BB19FF7EE8CE +:1099E00065FBA85CF7FE85B8BE5DDF95607D5C4BCE +:1099F00096EB5DFA3D9F5BB2DAE13A8CC7B868112D +:109A0000ADFFF0318EAD6BD7C42D6901F8FE16D7CE +:109A100062DCB760F978D67C177797B68DA2ED1621 +:109A2000AFCE2A80FDD3993F7F3C03ECD31FFCFCD3 +:109A3000CBB6E9659867DD3B97F2F32DDD02E6A131 +:109A40005ED32E24F93D2C6E76334A04DAFE893F2C +:109A5000CF7E83F6FB80CAE5342AB23EE879D7F59B +:109A60002B28879508C8E55BF6498E38D92DDD6F20 +:109A7000631E34ECBFE79E4F45F08BCE385A72FB25 +:109A8000CFC86917D89DB7EC5A85F1CC5BF67CF44A +:109A90003AF0CB2D4971B40FE08F91FDF3D067BB45 +:109AA0009DF1B5CFC88BD3D08EED1E96D23FB7F2C5 +:109AB000CF2DF9F1F1BEFFD864507AFA70F7FFD9D3 +:109AC0006450783EF7E57F6CFA1780FB33692AD043 +:109AD000F72D3BDEDDF463D023FBDC3CD0C9C7CFE0 +:109AE000FCF4D18769F9E3D7C64D06960ABB993CC9 +:109AF000FA38706A38D81DCB9F993502E871F9DEC3 +:109B00009923C819ECFB8F295D456D7465D9E7DA97 +:109B10003E0E8C772AE8CC67123EC88BBD2EC8E378 +:109B2000FE9C23BD1DD47FBD3972CA05F6D6619D4A +:109B3000F4027C0EEE79FBF08F69F9238A1F770A15 +:109B4000FCD0959DC5E3BE51EC2CD83FBA79CF65CA +:109B5000977CAB0C9E521086BF85F4A23EEA87D755 +:109B60002314AF6509BC0E8847330E7A4BE4CFAFA0 +:109B7000437E43321E3F823FCEEB8FC7867E78BC4A +:109B800071F3C350B967584A3BD5C2E34D7B2F3FB1 +:109B9000A31FF57112FF0E04E7A5A6FF31D7ADDFB5 +:109BA000E706FEDBFDAF8F3EEC033CBB837301EFAA +:109BB0008F7F964F8D19F2BED4BB10E0D0FB8C5B2B +:109BC000EDA27D6E78E6DF515F7DBCF7659786720A +:109BD0009D6470549E7E4CFAFEBD0276E5CD667E95 +:109BE000CB4D5AEFECD7E9B837D1218C20E26FF694 +:109BF000EB65803FB69F7773F4D26A0DCF07E4E040 +:109C0000BA6F8E32BEB839BA7F3EC4FD93E1FEAC66 +:109C10002957EC78E5CA019FC76703FD0D844F6B98 +:109C2000FD2AACFF5C5ABFCDC9B7FDE9A6D7057ABE +:109C3000C1C2EFC75B4EB96EA7ED63BF72A9FC74DA +:109C40005A967A5D20778C5F082A9C4B4AC63B9CCB +:109C500047AA433BA529651E51323DEC4FA207EBB5 +:109C60003C930597C1F87AF0F57C3D78FD0292842B +:109C7000A6F6875BE32C37CAE597026EDC877F592F +:109C8000D21EFA21D0C7F3128173A3F30AFE2C6A05 +:109C900029E210BF07BBC7E60F5D52CEB50EA3FD8C +:109CA0002ED1A95ED112746AD5876608B81F65CD1A +:109CB000C77A9F3DA76C35E8DF93669ED9A191A135 +:109CC0000D18F7E7C5881BF629CCB853814ED01E76 +:109CD0005E96E746FB10CE5DB3783E8BFFB75BFB2D +:109CE000CD4A18F5F451737EA47BC78E1D54FE5CDB +:109CF000081FA6A4769074B666039E4B98FEE74AAA +:109D00007E21827EB928FC0B11F2F70E99795DAFA6 +:109D100034C868D7412638E4A3D7546FC1FADF9A14 +:109D200071A20BE7D2B24D4F5E54FC0B11EC828B4B +:109D30004AB6E4823C7E01F22A53E8D1193293B745 +:109D40008DE3BFCBC37A5EB883E53FBC90F7502E5E +:109D5000E0EF50D14F372CA3EF9F2BE68280B2E784 +:109D6000EA9B1490C7CF69CE78CBFEF17FE660DE28 +:109D7000F9FE2D22C8ED2ED33FDD66C6E51E35CF98 +:109D8000A1779BE7D0773468F8DCD9508CF53F6B2E +:109D9000086279574339967737E858DED3508DE516 +:109DA000271B4258DED7508BCF5F372CC5F7191DC4 +:109DB000DD2D003F3281DB0571AEDF3444B03ED68D +:109DC000508FF5A7DDCC2FCD6FA7F6FC39942FEA85 +:109DD000597E579714AAB5EF9F59ED82263C4E64E1 +:109DE000858B654AF727ABE74F0539DC5AF4DD89E7 +:109DF00080AFE7B4313C3BF7C5CEF9A7B93AAF5ACB +:109E000046CB691932E64759E3B5E68483B2CD7F84 +:109E10002D687791D814C067B46A38E0FBFB14DF73 +:109E2000B4FD85148F902758130E68605FFC96DB95 +:109E3000D5920D7EC444B37E6EA9545932381E05A6 +:109E400099CDFFD98A482EF0DBB31C8BE77D2F2CF0 +:109E500090629B1CB8ACDA59FEC49477D9730A5946 +:109E60005EAB2FF5BE209CC774C6A9193FB9FDCEC5 +:109E7000F8799AE68C9F0BEA41FD9D29FDC7EB9B83 +:109E8000774635B39B55F13D906F1406DC577C4205 +:109E9000EEA0A764D9D31AEC1F2B04F21117DCC86B +:109EA000E2275793B804F63AF859127DBFC8E0305C +:109EB0008F643109BAC0FE5E4242F8BC967AF4F073 +:109EC00074E7C624B62F52A5C279244E3F5F80FCAA +:109ED0009481E6977C6EA92F4FDF94036EF39C88E4 +:109EE0007FBA1CB6FB57B798F8B8D37C523ABA0978 +:109EF000E867A0EF58F2C3921B7FCD0EDD2EDBF09A +:109F0000623D07EA9F8C1F6B3EC457C6F643E62CA2 +:109F10007F368FA2B6AB534379387371BB3B9F56E4 +:109F20006D5EAD4D06B1321EB24B6979D3B14017AB +:109F30008B83323B78733DF3FB37CFF744E1DCC4CE +:109F4000C915052F8F2383AF23590E3E347AD21AB9 +:109F5000C0DBE8E70494236B46FFD77EC833CB8F82 +:109F600033B992AF44C681BD5FF1D65F4642BCEFC4 +:109F7000AFD9E175B24D5E6FBA33321AE4CE15B285 +:109F8000BE9EF1E572771A49D06BFD6A6D4DB13610 +:109F9000303CBADACFBC6F9F3CEF3EFA1B801F12F9 +:109FA000F4C1DA1DF08CC6F3A07181A820172A3DF8 +:109FB0007968DF8533890E7187ABEB6312E0FF7A36 +:109FC00039FC04CCFF4A1295987FA80E073B20E489 +:109FD000D3709C4DC3DF1B89F6B6180FB0B8C910FB +:109FE000CF5B10E2D0E32B09A906BA9C41E21CEC3E +:109FF00087F09E0F47827EF8AD29DFFA8D53EFBCC4 +:10A0000057C0CDA9387F48A3DA4ED753C7877436D7 +:10A010005F5DCCF2C179366E32EC8FCCF271E80F15 +:10A020002EAA0F605EF3BFCAE11E99C5F7D9FB5C8B +:10A0300015F9B14E995005F6EB50D743743A71DBE0 +:10A040007D32D6FAFEEA0DBF01E38F510395700D04 +:10A050008B3B97C51167090AD2E9491FC17DA581CC +:10A06000C63F08F9EE45A07708E6BD4B0AD709F6CA +:10A070006017C53B9477507A85E7BF51FD04CF4DFB +:10A08000543F41FBDF52FD04E55F51FD04E59F5164 +:10A09000FD04E547A97E826737D54FF0FE753EF493 +:10A0A00031E057F26998AFDAEC62E7E5B649CE7B6A +:10A0B0001A4EC92CBE693DBF9019FEB74B0C6EC637 +:10A0C000BBAE28E68B8A9D67E13931FAC4731D3B2C +:10A0D0007B0D685AB22B8EE727A612390876CA98EC +:10A0E000D5711DCE720C33E353DBBE157E43407A2F +:10A0F000CC24E4DBB45F7EFD51C823BA9727783FB8 +:10A100008EF7740C5382A6EC895C79131D6FFCB634 +:10A11000E86337B1F814E60BCF548EC796D0FE45EE +:10A1200014B830BE978FC720DF887C9E41201F3631 +:10A13000F3820FC9F5B4FD7D776462FBFCFAB8FECB +:10A1400038EC07BCA3B07CE315718C93E62CF56268 +:10A15000FFA9AFBE1FDB4AEB333F36CB245C9185B2 +:10A16000EB0BB764D1F753AF52F1BE9F7517777BF6 +:10A1700080CC56074FE07A3A231938DEC3AE9E5A98 +:10A1800088E3EF5DACE0FD21FB5E6C39BE9A3ED703 +:10A19000BFF8C01A18E6617FD595D7D3F2A5692C10 +:10A1A0007FCC3BF5903C86B6CFBC952F1570BC0399 +:10A1B000587E24E2C3F39B534AD939B67D33C46A2F +:10A1C000BBDC1E9BC6E2DEC1B4BE734904FA51B4C7 +:10A1D00060FEAD7474B63E13F882FA1790C72AAACF +:10A1E000A1D85C809B990FBF950B07D360DF61E915 +:10A1F000A53AD88DD6F9662B2E5C96C6E29453B656 +:10A2000010A4D7BDEFF35188A73E7DA4CB03F2ED98 +:10A21000E9239305B0BBA604791DE6F7F4FB6BD3E5 +:10A22000000E1B8E2C1B81F17F12F5504B844C4984 +:10A230004BC7716680109C6AEF5F20C07332F42FA9 +:10A2400061FD215FF811E8CF25FA9F9FC6F2D8ABD8 +:10A25000FAF5AFE1E15964EB0FF648EE1F9DDF9F81 +:10A2600069F69F0BFD73ECFD2B79987FA139FF6494 +:10A27000FEBBC89CF71E2E7AF724B0836E12315EA7 +:10A280005AB033ECB1DFB771431AE38BCCBE7D25F6 +:10A2900003C7DF77B420F34C710034AA6DF99498AA +:10A2A000B1E4D0DFD949E55149ED0B92EA2724D535 +:10A2B0004F76940FBEF9201FA2EB78DAC7ECE6A721 +:10A2C0007D4D681FB6E6F2B89FFD4B8E9D73379E9D +:10A2D00017709D89F544703D07E64DC7F67B5F64B6 +:10A2E000FD0B76467F07F9A87BE6F2783E3C592FB6 +:10A2F00055A61720FC5A7D35BF83D4FAEC8B450256 +:10A30000F4FC54CFE403B07F9655C49582BC2CDC9A +:10A31000106A02D4B8A3DA410F2D9FBD33D4AC9498 +:10A3200041AA8C8C7E4DF69CF933D3405EEA04E959 +:10A330009652BC30A72C41E7DB1F987CB0828EF789 +:10A340009449D7D385500CF7A904D20BFEE8B6CEBA +:10A350001A7E3C2DEF33EBA71C99ECB00377A76571 +:10A36000E33CA5079CF91083EDDF6C6BD01DE71172 +:10A37000B79B7AECC0D8F3114EDB3B0BBA40BE6FF3 +:10A38000EFACC9E415F88E739F28310EF33F9E821F +:10A390000F4F274CB1D0793CD5C923CA09F9A3384E +:10A3A0004B443DE9A85FF9006F9659FDBEBEFAD750 +:10A3B000AAC09FDAD72962FF1D69AF55358A20965A +:10A3C000E793F165D81FF3D6C5DC1A1DCA561E3BAC +:10A3D0009507BB411EC03E11F0B1B54FE4F6E978D8 +:10A3E000BE7DA672AB1BD675914622C3A89D307563 +:10A3F0005FB405E4FBF49DC6C14C26371ECEA0F524 +:10A4000063CDFDCB8BF27B2A3D8087C91CCB8710A7 +:10A41000A960A3E3DE3EAE14E5E70BDE68533AC85D +:10A4200015894339398D04CEBA5903BE5C72E1C532 +:10A43000F4F907533E5E54105904F2E7D4094E6B09 +:10A44000A4F3697CF3F67160771D3C5A43C08F9387 +:10A450008E88C8BF922F2484510ED508D7D9F036E4 +:10A46000352899F261F1DD1381DE7DDBA69B7B7DD2 +:10A47000628E0FCE3D457780DEFF439A9BDDDB1574 +:10A48000940C739FF50F6953219F22C2EE9333E51D +:10A49000628540F01E37F206CFF23BABC31EFBB91C +:10A4A000EB27E34C4E971FF72DEFA1E3B7A8D3A7F7 +:10A4B00000DD6F5BE312013EE298E056904F27FA11 +:10A4C000E476D8918F4CBF7B82E1C1B9BF1B20DA03 +:10A4D0007D5520D74EAB95BB81EFCCF3A714834DB0 +:10A4E00037825E32F789334F67A25E7EA290F917FA +:10A4F000C97266C687CEBC227E5DB6C3FE0CD8E5A7 +:10A500004C20859C3976B623EF8ADAFB2F037F9F98 +:10A51000CCE53506D7880CFA647AA144F0FBC2CEAC +:10A5200083B09FF759B95B057E9E7ECC739CCF802C +:10A53000FB0708CA892D663EFC1EA3EB20ECEB3D11 +:10A5400059EB21904778F8689780F74E99F14CA91C +:10A55000255409F2746ABBD60C4F62E81915C3ADD5 +:10A56000140DFA8CD7E1792D7284C59F64FA3F9857 +:10A57000DFE4076CF128FADF1C628B4B0780659CD7 +:10A58000F1AAE478D4B074AF0FF39CCC78D4BD3F7B +:10A59000168278BFD7AB2CCFE7E9F3228F203D504E +:10A5A000FF4B00FB257CFEDD37D3F236323A0BF24F +:10A5B00065891C7D03E8372B5F0D80BF62C5AB8AC0 +:10A5C000D279F33C8B1BCFA56C8F337BB0223794B1 +:10A5D0000EF26AFA733C017F6372BA86EDA6C73544 +:10A5E00094A3E756F360EA92738F19E381DE0F4C70 +:10A5F000DF7116D857AD8A0BF7CD9BB90851418E44 +:10A60000BFC6E8B3F5288FF783ECAD92D12F7A9AC5 +:10A61000D25210DA87D3BB9A02307E36F2D95E1F4F +:10A620008FA9B66BC3E95BA0DD53565ECF69633C6F +:10A63000D8E5195BF5B3200EB1670B7BAF1F2198EE +:10A640008F2EE7B27383D4F83558FE915A0AFC3D39 +:10A650003D9D37CF53EAD3D3E9FC33C6DC8AFD9F57 +:10A660000A7043EA5F99E85F09FD4B20E10FEC793E +:10A670008ABB0EBCD730DE0878A8E34D3E48F20B0B +:10A6800016925EF45BA89D7F31F497C488B9C9AF78 +:10A69000CE06FCE4537B16F793876EE71B10CFB50D +:10A6A000ECFC7C5F290FD348D8FBA15AF84E205709 +:10A6B0006B02BC0DD5CE8F9AF6FD26D3AE970C82D9 +:10A6C00076FEEFC0BE2F62FC21B2F39B4BD21DF68B +:10A6D000BABE00F6611A3A2E98259E07F678BC1489 +:10A6E000CA37765CD02A8F847B30D4516038377675 +:10A6F000E8B3645A9FD1CCA13EF8312D1BB9F47B4D +:10A7000010BB003AD961E5A96B6BABE97C272CF152 +:10A71000A11D18E0E3ABC601FDDEC0A33D90D11D35 +:10A72000BB03F82B79FE5BCCB85F46F3A7B7825F1B +:10A73000DC98CEF45CA3893FABFCB63B7C17C0072A +:10A74000C224705E5132F956F2B1F34D8D90B04D86 +:10A75000EB9BD2FBF2CB46B1FD52FAF4827FC8FCF0 +:10A76000BCBF03FFF7D8F13F3798D576838FE15F01 +:10A77000F81AF70458718D64FFD57A4A5F9C8DC929 +:10A7800058038D2399F795B416B0F31D2BF3C69695 +:10A79000421CCE3A8FF23A1FDE82F8CD65F9F47D85 +:10A7A00078E6A95F0676AA79CF8B35DECF4DF85AC9 +:10A7B000CF8CE64B2398AF6FC19763746AB57FDB8C +:10A7C000BDF8F174479E4798809FBD2B5DB5F6B7E5 +:10A7D000313F89DA7BB80FFCF7C25BA2EE30C0993B +:10A7E000C2FD57F0BDBA5C761F9275DE7FA8F09E61 +:10A7F00099CFF6D7499348B697917EF789BAE54B3A +:10A8000063C0BEC9FD6F07994C4DBC990591738219 +:10A81000CC7EC53CA4E35CF825FBFAA91DB108E891 +:10A82000DFCA37AA33E373D43C9260FD95C3B432D8 +:10A8300096CF7EF3AC17A97D54098C8FF6D84DB313 +:10A8400060DFA7D2C3CA6977B7B7413E7725EC2945 +:10A8500081FD65B4CE02FBAB720CABF7423D6DFFE0 +:10A8600047597F233DC7214FA2F67B6825F57845E0 +:10A870009686718313D02E901BAC0414E6D76B5FC1 +:10A880002B6E1035E3068F9A7285D2D5874857A66E +:10A890005C19CCDFFFCCE457EBB9DDCC4FF91CF4ED +:10A8A00010CE3F348AD14968548DF904780D269F23 +:10A8B00013FE44301DF3E292E8E7E07AE69F74B5B8 +:10A8C00058FE853AFB7A3ADE3690D3B47FC67F35A0 +:10A8D0001F5F15B0D359849DEBF36A26FD6A17C23A +:10A8E000BD94F9D52201FDB1B5333B0BEC84B5E93C +:10A8F0007ABAC706F79A745DF138F1101E000FC3DB +:10A900003C43C083A4A41976B85A707CA981E58120 +:10A91000F598F2FB4590EF1877D17361DC66978666 +:10A920007146E305E66F0D84CF81E29416DE2CB903 +:10A93000C07919BE124F26175E32DB159493E96A6F +:10A940006662DC733DACDD4B6924659C7E9A87D9D9 +:10A950002719CD21BCBF152145E75BD0C2F4B5D581 +:10A96000AEDC1C87028F67F25AC5E73C735E63CA90 +:10A97000C90CF59C44FBD966FB79E94E79663D67C5 +:10A98000794C79265CEAF8EE984EFA5D1BDD7FC7BC +:10A9900063E5030579768E53C7EF06DAD9FD556373 +:10A9A00056101E9E5A674807BCBD74DE9FB7DD0F68 +:10A9B000764F4EB1B9CF166F04BB4D34027C077D84 +:10A9C0005F6BCEEB615710EDFB168E23708FB1FEDF +:10A9D00061C8807C1E5997D1AF9114E353269F998B +:10A9E0007D4EEDF55A4F8EFD9C2EB3D72DB867885E +:10A9F000A4CA6DBB9FE713737D56D95AE7BCF24FCB +:10AA00000F0DA3DF99B447C538504867F1CA097ADA +:10AA1000EE16F0174A14868FEDDDEA020FF3E322FB +:10AA200070BE67A2BB67D9EF68397A8F0BEF09DC7C +:10AA3000D1DD357E29EDD74988198F52674168B835 +:10AA4000955A0B5DF4DD8860E3F77E40D73FE95708 +:10AA50003B3B26D0F7FE1FF21867DAEA61FE16EDDF +:10AA60008FEFADF8D38EEEDD5970FFC0FA07D6CE6A +:10AA7000190BF642378F79DA3B92E251F51E168FA9 +:10AA80006AF224EEFD196FF3D32563762C291EA5F7 +:10AA9000C378B678549367EAC0F1A8360FB30BD6E3 +:10AAA0004709CB33EAE6A3E00FEE50BA509EEC50D4 +:10AAB0006A4008114967F1A01DDD663C4AE98B0731 +:10AAC000A57F17F2513D2CAE732FC8EF1C7BFF13EF +:10AAD0001C3CF36DFD311EA5F4C5A3B0FF3D1E1651 +:10AAE0004F7AB05FFFFEDFC77894D7F9FD9F98FDDE +:10AAF0003741FFA967FAFEEEACEB6CF1A38DE6BC23 +:10AB000027ED8B56025CC79BFBBEE3BAC3E8E27934 +:10AB100085980CFA6BF3F6CE703AC63FC408C0F9BC +:10AB200031D38E1FB77109E66F6E4EBA87F7E726ED +:10AB30009FFFC6E4A7831B4CBF7AC37CC403594163 +:10AB400010DFE336FE27679FCFE8252C6E366EE3D5 +:10AB5000F217C69FC1AFFE8DC7F4AB97F0965FFDAD +:10AB60001B4F0ABFFA64F512AA72293DB7B8509E6E +:10AB70004E5CDD86F90F13F7182877B52FA6104223 +:10AB8000FF3FFA8B52B4B3F2BF381FCBD217E76145 +:10AB9000B99BEF6D04B8183C8BFB48EB443C073F76 +:10ABA000DA70C67B4A14E6EF48F5D31D7EEF60F1FC +:10ABB0009E4D49F19ECD66BC277B4E19EE479FEC1A +:10ABC0002CE8126CF2A94461F01CCB9110B4DB6C40 +:10ABD000CA6DABFE40E3D87488637475D69C314E61 +:10ABE000B8C98C0FF58D77278B07E33F88F7AAEC60 +:10ABF000FE8DCD2B16AF9D03E5ACAA32E0DB1285AE +:10AC0000E593E9478DE4F8C2C776F8F332CB072C19 +:10AC10005188431F50D057C17D9989F5F08EFD189A +:10AC20009B7CC67974D632F96C95478487A39E982D +:10AC3000A058FB8A87187E673496A6DA5F1C0CBF83 +:10AC40008FF3BDDCD976FCEE4A8DDF09FF5DF8ADF0 +:10AC500077E27782898F9201F1EB4A073E8AD69F8D +:10AC6000F9FE600BBF7DE30D88DF03D917D9F03BF8 +:10AC70006160FC4E5052E0F76D77A84481F6228B5C +:10AC80003759FA99EAA716BB7E3A908C6753FF5B57 +:10AC9000FA697C94DD2B69E9A771A09FB884BDB1E6 +:10ACA000654B70543A8B87A0FC297693E7217E1B75 +:10ACB000E5486F13955797566D41FD341C44940A2F +:10ACC000FA2926C2B8AD0B09C601D76D69BBF505D7 +:10ACD000FAFCE98665285736DC988DDFBB4DC9C282 +:10ACE000F1ADF7B93731FDB47E03D54B6503EBA564 +:10ACF0008B1401D773B9D2B74F1283FE5F432F5D18 +:10AD0000AE9C619FE47BCA10F5D206262F07D24B7A +:10AD1000B50AD30B75CA007AC9D63F955E0A2B4C8B +:10AD20003F5CAF24EB95FEDF4FA597969ADFBFB54A +:10AD30005FFFE4EF3BF552C4EC37695BF400C4A558 +:10AD40005CA427C8F65F4907D0C16A803385E3E673 +:10AD50005F76463D36BDF4332EBAF642B02746B292 +:10AD6000F842B25E6A52183DAD31F9E2A041F512E7 +:10AD7000ACA37B3E9E8BB7F4D284C752EBA5098F60 +:10AD800089E9C567D04B6B947E7A698D92522F31D9 +:10AD9000B9556CEAA562532F15477B86A497862A7E +:10ADA000B738AFB90FF1DFAC972CFF6060B9F5F59C +:10ADB000F49235DEE65DEC9EB584DC0A3FEA945BF6 +:10ADC0004BA601BF725EC68F29E4D6FE54728BF388 +:10ADD000327AB4FC050AFA16BB5EB2E44EB2BC1A73 +:10ADE0004C2F7DD9A79798DD51FC77EAA5A1DA1DF4 +:10ADF0005FFE0FE9A52F07B53BBE9E5EB2C6DBBC6A +:10AE0000CE89DF497B287EB984DD31692FC52FAE1D +:10AE10005330F5928671675965F292E2F74BC5A6F9 +:10AE200057DCFBC23AECF7BDED0E735E1617C4FC9F +:10AE3000A9E4B8E00CA2E1BD7DF9CF09B86F44C424 +:10AE400078638CC9EF947128EAD7714057C9793576 +:10AE500083E57F5DF2ED3B90DEFE55D655AF2D3E8E +:10AE6000F02B3934CC8B7AD38C5FF5E57B198E735C +:10AE7000726D89737251E73939F3777FF2D9EFFE3A +:10AE800064425C0AE374CEF371CDDE6BF1FC568A4A +:10AE9000F37145F0FD01CFC78D0BE23D74CD59D65E +:10AEA000395C8BFFD839E08CF34FC7F11C983A6DB1 +:10AEB0000AE0A7D4CBF4A05E6B10FB79448A9F52C2 +:10AEC000F84EB2FC23E639530B2F6D23AF18E81C64 +:10AED000D8795E1B1F4ABE339F03A3F4BB0EE4F870 +:10AEE000324E5021FFA39963F761195C7A707B8A17 +:10AEF000F816C45735CA770BBC05CE7B777C21BCCE +:10AF00005FE5F638A7813EA4F47411C31F1153D135 +:10AF1000D346217C09D4DF3BFD03CC33F9686F9A1B +:10AF200006FCF371D94917E4353673311617CF3360 +:10AF3000E3E22462C4D8FC18BD99F7FA35DF318A00 +:10AF40009DC3CD75DE7B12F2317B20DF157F2D4C4A +:10AF5000EB6F0418B2F990DCE1780B02FEAB13E35F +:10AF600018C75A447AF07915D985CFEBE5F0629885 +:10AF7000DF0233BED5E4C9F836C6EBFEC9F3B2F042 +:10AF800070B2BA0A916354EA06D009956391663C9F +:10AF90002FC8F067C1B9C3BC1724DE70547F87CABD +:10AFA000A3630D71FD1D882F36BC8FE54919A17A69 +:10AFB000E0E3F4E2881BFAD519AFE9EFD8F82B9C4F +:10AFC000116E80755D1D39AEBFE3381FFD17473B1D +:10AFD000ABBF15C7C673695A22BE42F1DBE6B5C9DD +:10AFE000915392E10EA13CF41188379E943976BEBC +:10AFF000B192182E5A9EE963FBA0B34944047856D7 +:10B00000934E7C7E5DF97021D985FDE6921E7CCE43 +:10B0100023BDF8A47A4A64711FEB1EB17ADE7E8FDD +:10B020009820B3BC52A39214471438FF64EE9FFDDE +:10B0300027E3533957EB62FB5FC43CBFCFEEBFEC55 +:10B0400032F5EA564EEF82F516E80CBFCB46BA1041 +:10B05000BF2209C5D0CE32F3B431C7B0200197FB6F +:10B060001AD8F93AF87D2DC8E7CED4293D29704F7A +:10B070007004EFB7A5EA3508F4CE51310DFA40D689 +:10B080003AFD700E669579AF6D32FFBD6BCEA7B1FC +:10B09000E80ACC6F58E5E531FEB96A24BBA776E52E +:10B0A0009BEC5E844379B7C9F114FD572ACBF0BC01 +:10B0B000F5CADCECA66BCAE0F701F8A8FDBED3E444 +:10B0C000A7D229601EF2CADC9A339EF350DA59BB2C +:10B0D00081EA5706493B770E7C9FE9BBF1F254D9D0 +:10B0E0002EF75696D2FA4C42EE6960E74556E64591 +:10B0F000FC70AEC678D3A3029FCD9C5CBF08E4D39E +:10B100004AC2F6A1572A3CDE6FFED931EF4F61BD2E +:10B11000DCB4A30EB99CFC7DF7171C890DC37CD051 +:10B120003780FEF7174D433B56F075E279E5B442A0 +:10B1300076EFB09C1B89813C92A9C203BC0C868F20 +:10B14000274CBB479DC13BF2A4DB2A74FC1DBAB659 +:10B150002CF6BB739EE2A47A33DF5A34F381ADF14F +:10B16000B67B993DF499F9045D513E19E8F730D268 +:10B170002FFCB21E9ECB807168E517965D26EB9F73 +:10B180003379EBAC4FE849768E69BCC9C76EB2869D +:10B19000877CDECFCCF3BE563C5D5B4730EE5FDC98 +:10B1A000F240255CA94C995D87F8A6463907EE3F29 +:10B1B0001F5B21F71AECFC2FF62F34FB176F73DEA1 +:10B1C0007757B0DA592E34CFAD8C25B6F7946E0B85 +:10B1D0008FFD05EF712D24B6FBF1402E9AE74D3619 +:10B1E000C38B14FB54C9F90123329CF901C9BFBFB9 +:10B1F00093FCB4F6FFCFE6F5BC0C80CF8A6CDC4F35 +:10B20000DC74C7EC51A9FA59706CCD9AA603DDB471 +:10B21000DC49F532E02F3607E94710099E1BA68A64 +:10B22000B314EC0D41565D18B76BA165988E12935F +:10B23000B01C31EBD51E565ECEEAFBC6F7CEC6F18A +:10B240009BEF0CE2F842EC3C36BE42F5C044FC1DDC +:10B25000BBC3847D07EFC11665F53061DFC17BB2EA +:10B260004525F65BC2BEC3EAD51E565ECEEA312244 +:10B270004DE9658112952AE83ABF38FE9D33DABD63 +:10B280007FA2766F8BED9EBF38D8BDB4DF9FE6BF3F +:10B290001B877CEC3FB507F0F7C716C7C6E3EF3E48 +:10B2A0005879E0967E92A6BF3F0BE490A5A7168A38 +:10B2B00004CFAF5A705A28AB6D709ED382D342250B +:10B2C000D68A65134E0BD51E5636E164E9396B3EBE +:10B2D000C9FA6D41FB16097CF7C1F4DB22FFEC9241 +:10B2E00016E427F16FA09F41BFC13D739D7DF78D8F +:10B2F000307C58F7760DA46FC3469D63BF413F3045 +:10B300007236CC57CC2598A70EF177660712754791 +:10B3100000F3BAD8FD4B7ED205A15EC9A21B3FBB8C +:10B32000D7BCCEAC77E7AA5BE13CAF24C7A4110041 +:10B330002FF31EC2AB54FC9B78CBCC7AA587DDDB08 +:10B34000A2B0DFFBB8DAEC2F2866BD1A6D85F323B7 +:10B35000D6EF812C30FB4B3E56EFF2B3F6ABB2D8B2 +:10B360007DEEEE5C769FFBAA2C767F3BC448545B57 +:10B3700019C484DF9728C35D069AADFE3E4A2F00AC +:10B380009F5559EC3BAB0287511FDDDD50CDDED719 +:10B39000B1F301C6B7CCBCADD302FBFEC4C98EDF8E +:10B3A000771850FF6530FD77B0E8413E04F2D5BC18 +:10B3B0007FB54D39B39FFC1353AFB424FDBE65B3C5 +:10B3C000798EE87E3847449F07F2A6A15EB5C67D18 +:10B3D00068C4CDCFC15548F54704CC03AA37EF8BDD +:10B3E000EBD4597E70B392ED3887DC2C32BF707D80 +:10B3F00083F3DCA394C9E6DD5AF4E051E01B51610C +:10B40000F7DE0BB1F568370B852E9216F8E7F1B928 +:10B41000C5DF167DAE0279A580BCA2F459C6E8133B +:10B420006C95D6A2D97DF439EE1FA1CF42465F16A6 +:10B430007DA615FE73E9B32D893EDB4C7A4B2B6458 +:10B44000F4D996449F6D49F469952D7CB46585FDCA +:10B45000F6DF2368ABE3CD3CAB6BFC97D9E2216D03 +:10B460005F5EB30EF2D88D22F6BB14C974757F06E9 +:10B47000D3D3E20CC30DF67BB23C1A4C0E754AE1F5 +:10B480005ED03F2DA417ED056305877CDE2E19FEE7 +:10B4900065A05F4A8CEFC0B89E925E29955EA2FDC2 +:10B4A0004F654CC5DB7690EEAC7EED92F3DE3A75DF +:10B4B00006E54BDB3C9412CA8FB67924F45C93F317 +:10B4C0001EB024F938905E5C5F3B59D6C0AE9ECB6F +:10B4D0007E7F66E4E56572A10DBED999ECFE80E63B +:10B4E000B92C2EFCF0FCC9A9EB43EC775B92BFB3FF +:10B4F0002343C4FA7AD289FC021BEEE09F8ADFAABA +:10B50000EC817B46EF2BC9C6FDE4FF4FEFFF20BD6A +:10B510008F7C10E31F6D5F0A9847F3EEBD735642B0 +:10B52000DECC50EF830B6784AA3373127ED640F6CD +:10B5300028E65153BA9C91119A07EDAFFED1E53937 +:10B540006087B873CCBCB35C668FD1FAE6ECA9898E +:10B550007AA33291AF01719CE5172F990AFCF1EAA9 +:10B560000C1617CB18C6EE61B0E6F574268B833D3A +:10B570009DC9F8B483CAE5E8B8443E470675E8C1FA +:10B58000CFE8CDE3A35D01B00B997FBD32BCB31A08 +:10B59000EE1B5D39BF48057BD9F26F2FCFE3F17702 +:10B5A00033EFA94C5F6ADFDF58E463F4FB5FBE8AC8 +:10B5B000C7603D41258EF92AE7A824CE413CAC92D4 +:10B5C000DD1BC6E5B27BAB251294597CDE3C5748A7 +:10B5D000C2E4EB9C2BFC9948510FF24261768177D3 +:10B5E0001D8771502B2F6587AFE68E4C8863EF0B5C +:10B5F000E339C2FDD3D2F1FB9FB7B273D29FDFA173 +:10B60000BEB517CA5EB872839057F8ECB7F6D07221 +:10B610006F164FBAA07CE1596FEDA5E3D73DC8B3D3 +:10B62000FCBCD3C3F2A1FFF1E18487DFD7A3FF32D3 +:10B63000E0FC76C698DE03B09FD0DBC8615E83E491 +:10B64000FF0FDDFC7DBA0C9EFA0D6F29277F02E407 +:10B650007E3589615CC53AC776DBB0F07D0027F1A5 +:10B66000CA8B8AC15FBEC7A5E603DFDDD3E69E0CA9 +:10B67000BFAF54F029413E25977B989DD04B7D6705 +:10B680005A5E78E765DBEDF9270B73183EE4FA564E +:10B690001DCE41C85A10AF4ACA18C3E8E0AFD9E17D +:10B6A0008DF09D4AB9F410E4E35E1D09A09CA852F8 +:10B6B0002FAD827369572E65E557CD3CACE47844D5 +:10B6C00072FCE1A7261D517941EA27831E66F781A6 +:10B6D00011554CFA3D41E7BD8C163D105DD4E03E5E +:10B6E00044FC5B63F40157E6B94988DDFFA207CD4E +:10B6F000FB37FBE882FBEAECA1D3C50FA90FCDEE27 +:10B70000E509BE8C7CF28A847C72B27AC98F800E85 +:10B7100092E97D657885CC97F4E70B8B0F3ACA6A7E +:10B720007234A4FB6598A7478E731ADC87A29EBB70 +:10B730004285F7EE3A17EE935AFC60F1C194EC3E65 +:10B740007E580DFC1B56E2B3380D0140ECF4BE08E8 +:10B75000F8831F983F1690E077AB38B8E79B1899AD +:10B76000D9093A5F502EE33ED08278630FF8950BEB +:10B770005670E484439FD1B2EC8093DAF7BB83C266 +:10B78000D0E179EF9CD275403751C115E1F269598A +:10B79000EAFD2DC877238BF15D9BF7BD5628770E08 +:10B7A000D7D0DE4FCE0F6B1BEB413AEEBCE22CE460 +:10B7B000BBFB1B3412A6707DCB8C131AF3BD48DF84 +:10B7C00010D783F73FA1F66898F1EFA7C0BFAFBAD3 +:10B7D00082C44FEBAF107A220701FE6F78309EFDD6 +:10B7E000F9D3E173E0F749EE9976039E73FDFC8E81 +:10B7F000F068B5C4BE8EE82876BF427C148F777C93 +:10B8000069E67D0BC47C1F3E8BBD8FE2736303C46E +:10B810008E696B3864C7E205D8EFFF0100846E497A +:10B82000008000001F8B080000000000000BCD7D91 +:10B830000B7854D5B5F03E8F79251372F29EBC4F2C +:10B840005E1220C024241034E24978181064109449 +:10B85000A8C14C00FBA1D7C740AD1D2D3513124226 +:10B8600088A001B545293441B1DC5B6D537F6FCBB6 +:10B87000D7CF7A878788BD80F151443FAC01FDFD69 +:10B88000EABDF6BB11B4E5DED2DF7FADB5CFC99C12 +:10B89000339909F8B8FFFDE3D71ED6D9FBECBDF606 +:10B8A000DAEBBD1FC3D850AEE861AC77DCA08BA546 +:10B8B0003316CAB42B7B05067F5A4D4D35634B6753 +:10B8C000A7B31E8076D9598BAF82B12FF1EF9AC8FA +:10B8D000D3AB888CD5403DA957650A6349BDF64670 +:10B8E0007926634A91B0AD066031646F9C3F01EBED +:10B8F00029546FE3DFA7D53089B19FB61DD53E2A05 +:10B900008BB453B83E20F8273396D5ECF38492B02D +:10B910009E243A119F156C60AFCADFB74F8ED4CF0B +:10B92000C17E33A85ED3801B9EED3E4FAA09BF8D1A +:10B9300082D03400F0C6032E86E3CA5AB8E21997C3 +:10B9400060C65BE6F8B433AA57D83C2CDC4EED0455 +:10B95000042FC059E1070415F0509B99B8DAD4AE12 +:10B96000BA1EF02E67F4F725C37EFA6CD8BEF2003B +:10B970005342298CB9EC7DB63900BB6E48E86D871F +:10B9800021DFB25E60674DF5F16F049610FFA522CE +:10B99000033A87DE90FA90EE8733AE10A93D810915 +:10B9A0000E682F53D692E74079E6601A0BC137F341 +:10B9B000A100C71D3D0F7BDAA00D0763CFB4395935 +:10B9C000683C63CFB62904EF6BF3D0F39FDA547A67 +:10B9D0003ED7564EE5BF68F3123CD0564BF00B6D88 +:10B9E0001AC12FB63512FCEB361FC1FBDB9AE8F902 +:10B9F000DB363F3D5F6A5B43E52FB705080EB705B1 +:10BA0000095EEA6001A4E3ECCD7248047CB3EA3C31 +:10BA10007B1C45F0FCC9E77D6B90FE0C26CCCBD897 +:10BA2000D33ABF64796ED8FA36D4637364066CC0B7 +:10BA3000BA3C37F8DFA67AB3BC12BC7FD697F6EED5 +:10BA4000F16AA4C3382FD22765C90FEB911F535653 +:10BA5000C02BE0873D36554AAB64EC51A5A1D10916 +:10BA6000FCF5888D75A402BD1FEDBD6933C2D3AA54 +:10BA70003FBBF305E8AFA7F7DA6E27E0B12DA3F1DE +:10BA80004D15CA9FE85D4070495D7D12E2C3420BCF +:10BA9000BA0FC3FBEB07E1DF39342D2106ED6B7ED6 +:10BAA000A0F3951C769632F6F69CFB843950EFA9EC +:10BAB000DEC5DD8FC3CBA7EC01610ECC8F8D2DEAE7 +:10BAC0005E3681BE973379FB8D9385487986736E98 +:10BAD000F73297A97DE84F03D67BE3B448EDAF85F5 +:10BAE000FA216CBF5859540DE31F7E5FF4EE816A52 +:10BAF00027EDEA0692C71EE6DD0BF82EF601B3C06D +:10BB0000F84B9A593F2BD21909CA53EB94FE1EE801 +:10BB1000AF2C45A72B933F1A2A47B913D897F03E6D +:10BB200065A124B0627836F2F7061F266B003BCD84 +:10BB30007C692A97B03D467CF67631D003FA1DBE6B +:10BB4000DAD9B707DA5B8DFC5B86F3C8E579B1EF2C +:10BB5000BC8AF35D52E7AC6202BE57E93D7C1746F2 +:10BB6000FC8CEFA2EB61BBA2A9DCF88E5D3C2FE35D +:10BB70003C6FDCCA48EF24170FABEB2AACED8AD53B +:10BB8000F1DB35D563D2D8FD33618C760CB94AB67A +:10BB90006B4935D8CE5CD9BB079A5EB6F4EE7A9283 +:10BBA000CF9B9928C13C2427805E7447EA9F4D694A +:10BBB000B83F05E876BF3E1FC909CA92398407FF1E +:10BBC0009EED6B5D80F27CFF5322EB01385DE6F366 +:10BBD0009CDEAD54C294B143BA7C24A4AFBE01DF55 +:10BBE00027EC90990AEF1359C896598D4FC11B66DF +:10BBF000C8EFBD7333913F6C82772FC0D5B56BAF63 +:10BC0000AB86F666CCFD2201F19DF13B519000FE22 +:10BC1000D754DE5EE5D4A4401FE079DDD4FC69ABE7 +:10BC2000809E2902F30DB847EB11150AB0FE338C44 +:10BC30003562B9B0FB5400E7FF2F356E01E5F92FEF +:10BC40009FF90B15F8FE4D1DCFF1763E7EB42068AE +:10BC500047DA3DC0DC3380FFB2F9D36E0BACC47160 +:10BC6000D877815E82A6ED7F9FE1443BD271C141CE +:10BC7000ED3336384EAC85F72EBF9202EF8BB78985 +:10BC80001AF6D7A124F409503F39A9EAA80ADFB36C +:10BC90007AD18B7A22F96A99F8BED77D531FD2FFE9 +:10BCA000D1032EAA6F4B72F6B9007E463BA7944291 +:10BCB000F93375B28272FC4CF7321FC991222A65A2 +:10BCC00064D71411E7E319CD33DC032C9C2C844991 +:10BCD000AED85AD6877276F2965CD2BF1D82322CCD +:10BCE000559238A8F2745D35C0903B6CE103BB50AF +:10BCF0005FCF74287B157CE93D8E72DBB941F12260 +:10BD0000BF5EA91C3CF03B28EFD49CBE62D02FB68E +:10BD1000948307DEC7F2269839A8DFAB35385B2B52 +:10BD200048DE42BAFC095F3AB0BED888F383E5AB7F +:10BD3000902E9DEC4829F4DBA08B7AAFB24728C245 +:10BD400071DEC148FC3B53AF545BDD8817B463C858 +:10BD50002D1434B8F70945E9040E0BB568278BE5B7 +:10BD600002D4A339124B86F9C971DA2C72AF765A14 +:10BD7000F5804DE78BABFE647D9FC74C30F4939FFD +:10BD8000C2ED50347DA2C795932EA7203E399D3237 +:10BD9000BD8CC63727BD54EEAF265049AE45FAEDEF +:10BDA000A9AF87FA859A7358F55E1ADFABD8503B76 +:10BDB000F263C1FAB1F1BD521353902FAE04E5AB5B +:10BDC000AAF8DD4087E2C6F9E7E34D2EB6CAF121B5 +:10BDD00045A2F1813CAF40792EE916C11044DA2F1B +:10BDE000EB4D6021933E1DBF23D5024FE8CBB1D46C +:10BDF0009FB4AFD8523E7960A2A57CEAFE2A0B5CC4 +:10BE000019BED2527FDAD1060B5C33B8C0527FC65E +:10BE1000A91B2CF0CCA15B2CF5AFFAD34A4BF9D57A +:10BE2000C3775ACAAFB9B0CE02D7B31F58EA9FB48E +:10BE3000B33568DF99C73BA8213F2BE995A8BF0C14 +:10BE40007A2D4A112D7E0953E4E111FA83AE7578FB +:10BE5000521933B5372E91D33BC90BDF99FA75A927 +:10BE60003916F8565D1FA52F2C667ED3F789E5138A +:10BE700099DF542F735995A51C3840F9385187C95B +:10BE8000CF2A21B9461DB4176C5B67C64D4DADC0B6 +:10BE900077EB929C5E078C63E3D5EA8F9BA1FC91C4 +:10BEA000D76C6C037C3357EF776386763BCE7F711C +:10BEB000B79D85D2183B30D31E467D91ECB6F7393D +:10BEC000503FB97FE4C776934B9D0CFDCBE4BA613C +:10BED000867E6C675BB7566A03B96D0B69A5A0B81F +:10BEE000E43A5F18FD1A399DA922F49752C70E2033 +:10BEF0009CA271786E8A4AFDA56850DF2C8F0AB427 +:10BF0000631AE79BA248FA6F78A383EC96AC287F6C +:10BF1000FC6780FD404B09E4E5CCA249E44F92B8B0 +:10BF20006543FD05B954DEFA2391CAD9C5B4022C84 +:10BF30003F93C9C41ED06FE34ABCA45F871F90C85B +:10BF4000EF6899FF960DFD856636606325E0BFB208 +:10BF5000B084FEFAD56C889ED7302D01DF8F177D17 +:10BF600077235CDBB76D36CAFEFD69FE475200FFE2 +:10BF7000AD76FFF3D8DFD654B737A422D64A8180F6 +:10BF8000FCD2E5A8EA2942BFC8B7F56DEACFC6B032 +:10BF9000BFDB964CDEDE08F8DCF6A4E815A8BEE6AA +:10BFA000447D715B7DBA97DB7FDDBEC8CC550AF559 +:10BFB0006E7CB8B40ADFA7CBBE7A1C47FA324508BC +:10BFC00041BBEFE8FC97905E7D5485F709BDB21741 +:10BFD0009B4B646A03D22BB19B79C340AF1B8AD5BC +:10BFE0000DABB07F97A0EC017D9C7B977AF087E842 +:10BFF000772AC55E09E0BC4060BB13FD57E61946D1 +:10C000007A3D6203BB8B7CF304F8612AF2CD1507FD +:10C010006DC837F5CECF1C507FDD6B36B23FEB9E3F +:10C0200094FBD06F509C87B48F804FB256703B55B5 +:10C03000BCEB0AB253BD82B29BFCFC8D0E2FFAF909 +:10C040003B912F803F76219F94E17C746D40D765B2 +:10C0500082BB5F445698947E60033E27E79D114162 +:10C0600072D8D452A12315E0CA8A22294D45FFB6C1 +:10C07000BE039F3575AD523A3C67CC11E44CA8F72E +:10C080004A4A31F1D1CDAB979C42FFA75E71ABD844 +:10C090007FF195CE9B513F4B0AE0376DB4DD379E63 +:10C0A000D2B81D821FE57CB5FC31F9912AE871F800 +:10C0B000AE3ECD4D7C9FA5F33D3C795CB52C91EC1B +:10C0C000EE23B6C0019B295ECB6B0E0B5A057EB7E3 +:10C0D0005E187247E2A9DCE641AA977B1FAB44FFDA +:10C0E000A4A079485809F5F2EEB2F2FD7FA6FADF76 +:10C0F000417E2AB8AFDBF25E711E21FA768A5C1FA0 +:10C1000025A7FA93D02E26CF2B4DED40BD92C65ACF +:10C11000965444F8E639DD4FD9A5FB41863E37FCFD +:10C12000DBA747E2D2F37D22F0F5B3C3FE9E0938C8 +:10C130008EA08DE69B0D87A564E4C7EF2D217E2C94 +:10C14000F09CA7FE9B3F1FD8980CE5373A860F2539 +:10C15000A3FDFA07EE87ED7159E3E4A9A95C8F4CC2 +:10C16000D49FB61EB0EC53E169677ED2A7CC37747A +:10C170001CDAFF152BA8EC21BB3D2C2C01FDF17A1C +:10C180002AE7E7292F290D0CC65114560ED2F39831 +:10C19000FE3C0CCF0A4E179C78129D92D1F3D9DF4A +:10C1A00099FE7BACD7CF94DF2BA6A7AD5859508E04 +:10C1B000FD1D1107F692BA641AFAC3FD9DA97B30E2 +:10C1C0009E6010AF24005CF0403AC150BF07E79B6F +:10C1D0003D94C0D04F5283B2E61A37BABF4236629E +:10C1E000DF458C3F5888C34ED6DD8E7C3475BFC981 +:10C1F000FE33B4735678DA512B5C336885679CB292 +:10C20000C2FB74BA42947212FD25A203FC9F3AF459 +:10C210009980FEFC1120289BC98064C3EDD702FEE3 +:10C220002DE057A0DF5718B2C6432DA73F39CDC622 +:10C2300011352D7150CBE9C433E238B4A756FFA2B3 +:10C24000E5F4DD7763FD16737DA0CB19B772532B30 +:10C250003CB5C7FDDBE7A35E0E4AA4D73ED8F597F1 +:10C2600032EE1F0D67F89290BF559ADFDB1E107DEE +:10C270007D301FCEE0C6D078C0D7A97AED58EB61EB +:10C28000EF9B814300BF73CA816A85CD958E1D6D7A +:10C29000433D932FAB287FCA8CBB7E9A08F0A677CC +:10C2A000A11CE07754358BECDB511BCDCF2681E709 +:10C2B0003536D918E5475AD26D44A7C654EEB7CDE6 +:10C2C0004935FCB75022FADF10C927A2FF3E753F5F +:10C2D0006315D67C859B976B6E2CAF0C47976BE3F1 +:10C2E000EAA7F329C0BF9AA17A49498FD01DCA098C +:10C2F0009EA2B1E11E90B9EAB7E5B3663A66355938 +:10C30000E129A75D1D68874FD43BC97F65D2A70788 +:10C310007F07F017E04FA33E9E723A49C2719E1408 +:10C3200079FB5E06DF9BE89FC9CE886128CFF4BB0E +:10C33000037D583FAA3C78FA8D29872DF8879D18F0 +:10C3400087264D83780CF51A0BB4A35F787B6A526D +:10C35000FAC793A0B88255201FCC95DCDE30D2FFFF +:10C360000F9217DC5AE63833FE9D569487372486A1 +:10C37000F2B3A948DD867185F2AF12D93D259155FA +:10C3800056423B7F6D1B9C721848FFA32FBDAC1318 +:10C390009E5B1B12D6E07CFFA28D31D4FF036D4E55 +:10C3A00086FAFF853685E017DB3C04FFBA4DA5E72A +:10C3B000FEB6727AFEB6CD4BE52FB5D512FC729B58 +:10C3C0004670B8AD91E0FF935EDF910A93701AEA70 +:10C3D000B1F120BB952F3A4B903F9A25CC188D9206 +:10C3E000D31BD77ED7B91CE4C097BCEFDA0CB49F3F +:10C3F000F7497ABE63DFB5074AD19F189A8B7CCB89 +:10C40000345955607E055DAEE005FBB89C60F14B8C +:10C41000A04F8B026E17989C415486D0BF83F94879 +:10C420000FB1355EA76FF2E5B4E317F476866CB111 +:10C43000DAD1783BECC26057378CA79BB1400FFA3A +:10C4400031F2605707D0DB592413FCB4A0EA4C3812 +:10C45000380FC76DD7E55C66012D17E34EDB6080B2 +:10C46000E2D01AB71E877E9FE2D28E9F38D986A26D +:10C47000483C6AC4A1D1F18029BEB7D80FD08CA4A2 +:10C480008F129C02B7936C24FE217ECB4EE5F526DD +:10C490002A6F1C4CA1FC14CF4755783E6B48F546DB +:10C4A000E0296ACAA15453B9B7BC72769A092E77AB +:10C4B000A6DC8CF9C42794B9DD4EC0BF34A9EA606C +:10C4C0009A3792CF7A1B3BE4F92A0DF5FDFF743EB3 +:10C4D000EB5F14AEDF7E9EF19B54CC47849EE779E0 +:10C4E000BE57327E9343F1AD6EF70AD9386F0FC64F +:10C4F000B5C5213101E5E9594676146300D16C8F49 +:10C500005481A11D36D9A3DF53DCAEDBA382149680 +:10C51000E08D315F267B24E17C002D54FB747CCFC1 +:10C52000285E35CA610861B2578CDB532A2F413B24 +:10C53000216AAE299676685ECBFB4CF3CC30BEB355 +:10C54000DAA5C90356F8BFCBEE19FCB5551E74A287 +:10C55000DEDA7A3136DFCE4F33F4FD08DEE2973390 +:10C5600022F428C037C5F8E4E51A843A384E7FA78C +:10C57000CDD26F4BD00A37DF67856FB9CB0A9BFAF4 +:10C58000237BFA95E190F68ED9AE7F04FA12F59BE3 +:10C590003AD4BA10943B5BCD8AE6A13F733BF37665 +:10C5A000E1F85775275AE2CC3FA0CDA53CAA40F947 +:10C5B0007527538F60FEA6B076BC827A63C7CA899E +:10C5C00047305FF3D3FA72B22FD7A4A5109D52C49F +:10C5D000A223EF63BD5B27B10ECCF384B8FD7702D5 +:10C5E00065309E7DE44149437D1FDAC0FAF87A89BF +:10C5F000D56FB8BDD79AB75819958FD8DEB8AEB0F9 +:10C6000018BE577F9820A07F5E547DB6BE04F91FE8 +:10C61000F416E6695656A736A01E33E082EAE279A0 +:10C6200066D8A90EB73F0DF58BB4F27518B7140490 +:10C6300055FB4AF768BF666567749E3744E3437AE3 +:10C64000A6A58E1ED7571D87D1DE59B057382FECBF +:10C6500022F0DB7493FCC84302CAE5CA20D330BF82 +:10C66000B56A3DD3FA61BE24964CF3F2CEE3257B46 +:10C67000302E8466C88F507519BC47E7D7E8F95C3F +:10C68000D92C8905F0DD4A8FC4303FC482C5A42B64 +:10C6900088CFE19F2BBB3F0B7F897AA259A2B82B91 +:10C6A0003505FC2980CF6E11582FC0679BA71DF15F +:10C6B000007CFB46E625778C0D36A21E59590DF6F7 +:10C6C0009FF0E0FE8813FEA3F6D02F043E2B0A9ABB +:10C6D000FC08C403FDC229C87756FF6225FA8553BA +:10C6E000884E67CD74FA3FBA9C32F98DAE0EAB1D01 +:10C6F000B317C4B6637646768CFB4D861D1B37DBBD +:10C70000DB7D05BC1F4E1155CC2777AE961BFBADCC +:10C71000F944FB97B98CD30CF4583EBE8171BC959B +:10C72000303C19DB7BCBAE081D68BB987F2BEAE55C +:10C730003F2AA914D7BC99E29D2CF27C67C85907FF +:10C74000B0CBFB3C03D8B1E9C8FCC6FC089CD0F3D5 +:10C750006782DF4A557721BC378D85E6D461FB1CA3 +:10C76000DEE43C39FF30962730B20FAF3EF6A7CD5E +:10C77000A13CC483E3072E7388F38D55CEFF86C199 +:10C780002CD047A90F6D96806FB609EAF69AA2C819 +:10C7900077A9F89D30C6774B429BE518DFB98DEF3E +:10C7A0004046BAA6A37FC7E991A5978B3A3EE6FE1D +:10C7B00065D43B8A3F09E3A16D9B6505EDCD37C587 +:10C7C00023F352E36E0D6DB649A3BF03B4DB0DFC3A +:10C7D000C5D8F8F761B9B97FDB18F87FDBF4B85436 +:10C7E0007B76BDFC2BE307D537645EC678013F1B23 +:10C7F000FA89AA3F491CAB3DD0991B628FB737AA73 +:10C800003D17E1E7F16F1D13BF38EDC178B7458DD6 +:10C81000D7652F19DD1ECA6738935274844432C419 +:10C820003232EAF77A99DB137F2FAD33EDF033091B +:10C83000E57F54FFABB93F90C0427DE877B272FF0D +:10C8400056F3F81F3D3093D6259E5ACFBC2E40E5B7 +:10C8500029B997F470EDEADE7A3BBCDFD5CC06B09F +:10C86000EB5DCD832ECCD3EC1A1A74A9587EDF9BD6 +:10C870009BB1DFDACE24D2C533592FE5C98BAF96F1 +:10C880007DA8BF93AFFEDCB71AFA294EA992307F7C +:10C89000838E13E51B53EB9EC67E8B6D9A13F55367 +:10C8A000569DAC601CD4690FD4DB31EF751B536906 +:10C8B0001D5F56C422CAAFB1E110FA9FCDEA76CA15 +:10C8C0002375CA4C20F950B737221CCC20BDF41474 +:10C8D0002BA2FC6068BDC4FD4216106E48A27FD03A +:10C8E000BAC308FD84DE03B3917EB7338AC78A5684 +:10C8F000F40A8847D19F93545AE7C5BFE9BA3E94DA +:10C90000086FF27B9E1C993F9E9762F7F1EF61766C +:10C91000C83EE5372B7D6417F4F598E58CF366F691 +:10C920007DF2B7EBE744C1B22340EB4CEC2A639DA8 +:10C93000C95A9E75FA0736A4BB22B214DBCC4BB79A +:10C94000B77C68ED01F4678E342512EF16355BED88 +:10C950007A61945D8FCE77D46A9DB331AEC88ACAAE +:10C960007780F890BD32F864549CD7C5E33807F35C +:10C9700076931CB06605E36A237EDC8D15D18FCAE1 +:10C98000D7FDA8E8EFEB94D0CF900EC53243FB68FB +:10C99000635EA708E3712404685D122AA5B66747A1 +:10C9A000FC5CC1CE9CD95560FF45E6C778AE5D60A2 +:10C9B00032C2917E8718F61B64A07F70BEDD22C351 +:10C9C0007E3739CF4FC2BC9EC3F5B749981F4D067D +:10C9D000877810EDAAEC5350E836D9D483189F8499 +:10C9E0008EDB689DB043F12EAF87FE3B8E65B0763F +:10C9F000A8B62989E75B3A3C5E676505AE6FA82B50 +:10CA000018C8EDBDE9F31738AF06FB890B79101F85 +:10CA1000FDE0F1D93D21B0978E0BB9CC6FCAC33A76 +:10CA2000E40043FA392E1458DE1F6C0355303E02E1 +:10CA300037B88BE7203EDB31E90B749FCDBC9DF806 +:10CA4000DD6CA764590F715CC866FEB458EDE759F8 +:10CA5000DE1F047FDAEFB89CF6132DEB2B8E0B252F +:10CA600071DABF22AA7D2566FB9176D32CED6E94F8 +:10CA700019E5D3434D89C40FD171CC3FA537FC389C +:10CA80003D63F47AD4A63CBE1E457F00CF4B4FA138 +:10CA90007D11FF98CEF3A8731696C8947FCBB3AEE2 +:10CAA0004BCDD3F9DED82F3127DD16E52F7B65CCB2 +:10CAB000D735B8A3DF5BFDE405C84B31F6E58849FF +:10CAC000D58388CFBA150E15D7CFE3E5DD4FB73143 +:10CAD0005A0778C7155881FAEA68FAAD091B6B0145 +:10CAE000465D077ED47BE9F72F0801BD4E0B3C9FC6 +:10CAF000B731FD60596B8C38CF7836CB4CAEAD1A60 +:10CB0000A3DC1E2EC37D4ECDBA9C00974D46BD3A88 +:10CB1000520E03AC459F95F5111F18EF570404CB37 +:10CB20007AD469CCC3737C6A5A63EC0F33E35397AE +:10CB30003A46B9235C43F8482C100F9FBAAA4BE33E +:10CB4000F3BE9EF7DC98FE66D958F8AC90F9F8E28F +:10CB500096DB07893E2B44234F6FC56705E3F4BD81 +:10CB6000243EFA3A05E05333D67C213E7563CCD798 +:10CB70000AC720D16785C4F759C5C2A7EE72E64B34 +:10CB8000CF0F6EB283FE94E2E7098DFCE0758FEE65 +:10CB9000B5E607437BAFAD97D14F653ABC7D4118F1 +:10CBA000F039BF705D39C9971EFFDD8A1D82BEBF97 +:10CBB00055E6F2784B9EBBAFDD24CFBB41AF69A0F9 +:10CBC00017FA40FFE0730FE8096D3CEE5FF310FCCD +:10CBD0002CC4931AED5F2BA7E73F01DE58FE5C5B88 +:10CBE0002DC1463B156B048A2B27DF25505C194D60 +:10CBF000B75B33781CB92D5BB97935EAEFFA04BE1F +:10CC0000AEB3E62A08A52371236303A4DFB7DEC40D +:10CC10002AD1EF98B88FE39D3E27B34F12904E87ED +:10CC200007DB50CF2CB3A9986FDFA4327DFF0AC475 +:10CC3000ADE0C7B58ABAEE010B83F9EEA1D0DC678F +:10CC400050FFDC9461D3F32ECA91034807AF5D45D2 +:10CC50003B76CBE96C8AFB4E644B0CF3DC0E47DF72 +:10CC60002B98E70685E8DBEBA5BC8B252F9E7CF196 +:10CC700097AFE03E9277C07E635E33C367CD9B3F44 +:10CC8000D6FCB40DF3DECDADEEB5A2175117984822 +:10CC9000F8DBFBFA8A1085B082FE618657666180F8 +:10CCA0006F3CE3A07D0FDB5C61F223B609CA703BE9 +:10CCB000C67B0E2E7FCD5171ED2D5130C355728C38 +:10CCC00053A5E6645C7BDE84AF668EA67F74BEDD12 +:10CCD0009791944EEBF27A5EFD0B56F1E81C2CCC4A +:10CCE0004B25672EFA7B237FEECAE0FA75939DEB06 +:10CCF0009BE87A063E2D48C31AE4AF0BDA47B60824 +:10CD00007E05F29080F6A63008EF4D7493D3870429 +:10CD1000D4EFF1F0DF2D7C9ACDC690DB02B6E5337F +:10CD2000690AE5CD3EC6F9201912468FFBDE51E3B4 +:10CD3000AE7BBD94C59217BE8E70CB51C9DBAE469B +:10CD4000E862D0E1FFB5DCE4EB74A73F539E50DA14 +:10CD5000E055C9FFCA1479FE35BDE113790A2F3FAA +:10CD60006BE113EB7E57E9E027823A39C6FEDFE03C +:10CD7000B0B011F3421B78BEA820FC09DF7F1B6412 +:10CD800062A73BB2EF305ABF45EFC795DC819F0EDB +:10CD900001FD3C2199F6FF851A023F1BA23C9D43F1 +:10CDA000C1F5821F273EF4D321C03B283B1507C89D +:10CDB000C9F725BF1FF5E05F45BF5204433E5AE067 +:10CDC000DF9B01EDF728CFACE957516F5729B81E0B +:10CDD000DE1CFC41780EF8654A5AECFCAA61470754 +:10CDE00074BA9DB685F3711DE14241C340460CBF44 +:10CDF000A039F810B5374BD7E7D1E5AFEAEDECD461 +:10CE0000EDEBF2BB5FF8E459C03B51ADA81200AFA7 +:10CE1000C48A70FA52184FF7EB2555E8EEFF8B5E87 +:10CE20001F7CFB6AE4E71DB9FE97334C7472AA8A33 +:10CE3000EC277D353013CB67FDADE257AF631EEABB +:10CE40003AB78271DC79AFAD5A2C1E8D07B4F32A44 +:10CE5000E2EFBCD0437C6EB4F3B26B68A7BE7FF642 +:10CE6000BA53104FBC9C32942B00FCFA1313AE4BF8 +:10CE7000077E7D39632817CB1BDB2FF41C46D8C6F1 +:10CE8000ED85E747177A4230DE590B3E7DFA519423 +:10CE9000D52BECB4AF6FB3EED718FD5E9529D13C1E +:10CEA0005F9569A5C3F1BB800EE9F1E9F0C1683A6D +:10CEB0007C60A6BF81FFDA426D08E90348262F0592 +:10CEC0003EED6E63E1D580A39635307F1A3491AD87 +:10CED0000EFCE3A30CC3F4BE7AB188DAF913D6775B +:10CEE0005EE8FE4C1A1769E74C81F609B67FFCAE86 +:10CEF000838487EB185FEF65E9210DF5AD06F3FB41 +:10CF00009497BE1F8EF5BD311F0FE57139BB298B7C +:10CF1000EBAF54DD0FEAB1F77A96C05329FDD17714 +:10CF200015F8AEABA8B72916FF9DCBE47E2E841C66 +:10CF30001A7ED7A9BCE05C69E22B45A7E3FA7CED39 +:10CF40004BC43711F7BD41F9C3B5403FC073DCB1E5 +:10CF5000B42A8AB74A59F50D209F13B3F8FA02E0B4 +:10CF6000EDC8C4FA337B5177315729C7FB61CFE352 +:10CF70000CF305AE0A78D2FB218672E2627E05735D +:10CF8000419999CE873B6B711C7DE5C807D3B37679 +:10CF90003E8CE702FAD147017FD60B30C641BBED8C +:10CFA0005007FDFD1C3BC555D1E3CAD4F1F84EAE88 +:10CFB0009689788CA29363E8E947E1FBCD93EDDE97 +:10CFC00010BC9A25F636AD44BE5AE0263B0FEF9BC7 +:10CFD000FA4CF4BA3693B7776D26B7CB9BFFD3D90B +:10CFE00084EBB1D174BE5C7E9BACB767E2B7C999E4 +:10CFF00031E40EF86D0AE23F8ADF92E3F2DBF4CC13 +:10D00000D8FC3623161DA261683984F92649CF332E +:10D01000CB17A6877E09B05360018707E1DAD0EB12 +:10D02000B85E5D2C13AC1DAB0F1DC672BF3B80FEFE +:10D03000C5D3827F1EF6635702B47E28B9359ADFC6 +:10D040003F647CEDF6B595D6F66F88D5BE9AC9DB00 +:10D050009FB5C0EDC7799BA5FBDF063DBFC8E4E7E0 +:10D06000360E65F2FD3CF1E4617CD6D8F2304EE735 +:10D070002B908756A4F3A5E4E19A2C2E3F302F770E +:10D0800050FDB8F2F0223D132BB83C24A23C78B1FD +:10D090003F166AF420BE9CFF83998F3F8C797143C1 +:10D0A0003E16663D6B918FB900A37CC41B5FB93EF1 +:10D0B000BE71383EE86761A58DF6D39F6793F7A0F0 +:10D0C000BF3AAE569171BC6D9906DEDA439964C7DA +:10D0D0008718F2693F1B3EE040B9ABE3FB96AE0F09 +:10D0E0000D6ADC2DEA654BD01FD2F97AB7B17E7696 +:10D0F00005DF1FCDE45E86F488965B57E940B9DF13 +:10D1000044DF3C9DBECBB37C8F20BDFAD9D004F464 +:10D110006F8CF9881ECF637A7FD505DA63B1F8FB8F +:10D1200052F6E237997CBFEE6FF47652FFE60CC4FC +:10D1300092EB59F7FC96E4395E3B2FEADFFF5CA7E0 +:10D140009BA1D71351AF23793CA130D2D9A4D77F6B +:10D150008EF83AEFEAB1C829C8FB7331E53D0DE41A +:10D16000BD28A6BCBF1847DEFF39163DBE05F93EF7 +:10D17000184BFE76665E1EBDC52C4E6F31EB9BD103 +:10D18000FBAC4EEF772F9FDEEFC6A1F77B99B1EC9A +:10D19000797C7A9F8D43EF0F3363D973CF287BFE61 +:10D1A0006FB1F07062FF0295FF07C95B5E2884745F +:10D1B000D45671BA1BF51ECB54F47954D7A21FBDB7 +:10D1C00013FC308C17C1CE9DCFFCEFD1E72C2BC6C2 +:10D1D0007CCF12B95FD6F4A3D6874315DF4A3F4907 +:10D1E0005935A3FB792D938FE752F65E8DD8FB74EA +:10D1F000C4375A5FF6EBE752BE93EBCFCD22BA0CA1 +:10D20000CD47FDB4FBC15401F3F4795A5840BF3BFC +:10D2100053E7E32D992AF56B7CB75B0E0B32D60FE3 +:10D220002802EE0332B557969511BFBD683C00BF8A +:10D2300072ACBF3C4B9B80CFC7F4F18DF86DBAFF49 +:10D24000D09FDABB06F5F7745D5F4FD7ED8801FF1D +:10D25000255FABCCE27E56353EC10FBF0FB778A33A +:10D26000FEE6FE21D7D7C67844DF001B42BB02E1B1 +:10D270005C9F45EFAFD86BE87D3CC798897692EB11 +:10D28000FDAB11BF9A2C458FE3787BF1F05C98C51C +:10D29000EDEA427D1E0C18F09CA7E3397F2C3CA3DD +:10D2A000E974B9F8DEA7DB75C077A93EAF31DB338F +:10D2B000F61B18F366472501F1C5F14E2EAFBE638C +:10D2C00025E4A7B58CD86BDF6DD89E96A8C8E91465 +:10D2D0008F2A09D8EE4E3D7FBCF3AEEDB41ED6BF0B +:10D2E0005EA9447F2E670DB777EA5D05FDB87FE044 +:10D2F0000EBD9D683E1DF9DE3E30615A05D1E56EDA +:10D30000ECE79A3AEE1F261FA3DDF64C2B5464146B +:10D31000A65447C883716DB710F2A01F149AEFE6A8 +:10D32000EB599E6531F31EC6D3C86B18E3659EEAC0 +:10D330004BD46FA7FA4A6228E0FB2AF51D21F2338D +:10D3400022744CAB24BDE764B674D47B8E14CA8BB4 +:10D350006DD5F916E6A99BE6093753CC8CD07574C8 +:10D36000FB7CBEEA7D0101E9EC2A87AEE0ADCB177C +:10D3700022FF49547B893F124A397F30CFDBD45E8C +:10D38000048F69D3AC78544E433C22ED7719F83CB6 +:10D39000F555F031EAC5A70BAF176A0850BE20B4A7 +:10D3A0004166B86FE3C7890F513E211872280E7885 +:10D3B000FED555D0874ED8D102FF735C7F0466D06E +:10D3C0007E4516988A4F375334E4A76BBCCC8BE765 +:10D3D0002DAE71BA431847B38BF2A7E67508D3FA9E +:10D3E00094F065E2D7EAFF252E37D6FE2F376FF18E +:10D3F000AA2EEFA6BCC5AB593531EAEB798B716C1F +:10D400002884E75720D6E3F9540CFAD06FF6AA34F3 +:10D410004EA3FE5BBAFE488EE3F7BDA5F76BF0F7AF +:10D42000F28D0DAC98F409D80F94CB26A6E0FA370C +:10D43000DA7DC46761E5F7E8FDF92053F07C9E765C +:10D440005D8A8CF958637CC6788DF63FD6DB1FC1A8 +:10D450005FDF777FDAC69A7EE5E6E3AD32E1955C81 +:10D4600058FFB179DCC678A3F13EDA160CCFB1E1F2 +:10D47000FA969F9E69C1D9EC435C3F74F2F9B637C6 +:10D48000816465E332F3E06DEB00855D92FF336C00 +:10D49000F7EE2B3E79040FA60C3AA7B5A33F71EF28 +:10D4A00042F8A688F6A74B385FDF367F7424DD4F3D +:10D4B000F9B00336A72229A3F9A3636E65533A692D +:10D4C000AA490B8F41BCDE71DC7BCA0DB0DB33692E +:10D4D000A107F0EF78C3DB9401DFCDDAE1DCB20520 +:10D4E000E12582BEEF739FBB1EE8D6319FC3993BF7 +:10D4F0001A16E2FA54C7CD02F913B9F03DC107ACD0 +:10D50000FE5E44BE3612FE4BB2B95DEBA817E2D404 +:10D51000E3FA4FF570FBDAB168EC7ADB8C7A2BF822 +:10D52000F9FF78F5D665F37A410C5DD03FBD2092C6 +:10D530003EEED05243B722BD2E8A747E5D08FEEFC8 +:10D540007FC575E21375596A0FCF0F4EF2909C2B71 +:10D55000C7A6C2FBED0DA288FAE8D0D5595BA6019B +:10D56000DCDB200A789ECC21FB681D13F7F8B6A3FC +:10D570003E52D7125F74DD0CFC5C49FC3C8DDAD165 +:10D58000F87BED07FC3D1E9CF34D8ECF67C04757DF +:10D590007900FFD7CADEF90EFA517F16DC01B434E8 +:10D5A00083CE922D5E68E7DEFD129D678BC72FB19B +:10D5B000C6BB1CE0D76BA57E3C57F07A6D1A8DBFB9 +:10D5C000F762EA1E4C66BF9C374CE33C512F8A1B26 +:10D5D000541AFF7C8F493E0ECD744C1822FBE7BBDA +:10D5E0000EC7A3BDC5EDDD18F82FC57A5F1F7FEF0D +:10D5F000293FE27FD14EF80BFB3308FF13B525B46A +:10D60000DE2B257DEE467C603C2EB42F806F0BF622 +:10D6100027E50FE5A17E30F0BD5CBD78A767543EDD +:10D62000F74E4F0C7FC0D013E80778B87FF4F9BDF0 +:10D630002A9DCF23FF289E7E7AD0F395F5D3839E33 +:10D64000AFA19F80EE1BBE09DD99C654057CD05961 +:10D65000F88AEA69A4EF41C7D0FE18E14280F818C1 +:10D66000ECB4721DF2FB7A1F87ABC0C704FDDDE18D +:10D67000F77BD2A4F8ED1F2DF03D86F8D9D287A410 +:10D68000AF926FDFED1965B7769BE9134DA7B9D25D +:10D69000A71D785EEB5C9D40E3D52E303AEF08C1C4 +:10D6A0004A32E23B4BB3D139105919EAC0F5B445BF +:10D6B000AA1C40BD89679365D33A438AE664B26980 +:10D6C0001D29AD51B1C0193E8FA57E56936A29CF51 +:10D6D000F6975BCA73D7782D707EA0D652BF30A85C +:10D6E00059E0A250A3A57E49B7CF0297F53659EA73 +:10D6F0008FDFE1B7944FE85B63299FB42F608127E8 +:10D700000F042DF5A7EE0F59CA2BC3DD96F269471A +:10D710007B2D70CDE00E4BFD19A7FA2CE53387F673 +:10D7200059CAAFFAD38005BE7A78BFA5FE2C36B2AF +:10D73000DF4AE0FB2F455536F851B494F375A71036 +:10D740007BB314CA9732E3CF6BC3F5D6591E89F663 +:10D7500011B18536DABF1182FFD0BEFAA2F6356963 +:10D76000D5D6FD1EC00F8776C1F7F5B50EB2A3B3AF +:10D77000A2F64BD5B3E2643C773AEBA8C470BD7512 +:10D7800011F295389AAF18F01FF2D5173A5F8D1E37 +:10D7900097708971696FE23E34635C8B715CD0EF86 +:10D7A000F530AEB0695C9ABE9F1BDAE94C2B1A3D8E +:10D7B000BE59FABEE6E871CEC2F5CC71A3C717BD5B +:10D7C0009EE9CAD6D733C1AF359F8F3AF7363F1F90 +:10D7D00015C28A480F4D20FD708E813C01EC2B92C2 +:10D7E000032165F4388CF5CDFA90D38BF4A98776B4 +:10D7F000FAB000730E263FC8A55AE52EB1DC2A7791 +:10D80000495ECFD87C031332267DE3F0890AFFC539 +:10D81000E293C50CF802C6B518F802E9BF58FE7AC3 +:10D82000F49C1645CF2F585D32D2465B9C22C73AF6 +:10D83000D769D00BE29E99D919F1EDCBBC6C6BFC8A +:10D840007A19F6655EB6B9FEE5DB97EBB3BF815F8B +:10D8500002FA7F297ECF64BFFA55E296DBB247D940 +:10D86000E7DBB2C7B0CF23710BE6BD119FD225DC39 +:10D870002F03DF8BFB5F4394DFBE337BECB8E5CE39 +:10D88000ECE8B8E59C8C71CB01DBF7293ED16EE565 +:10D89000F109F803816C1E17F27826C8FDBCF3DE8F +:10D8A0008CC3B845B81F731A35663A68DF453A5CD1 +:10D8B000EEF81FCA1E65FF1ECA1EC3FEBDDCCEF3F6 +:10D8C000132F1FE7E7FD5F4997C219408FED6C32B8 +:10D8D000ED7331D65B1AFD8CF220F5F2B67D8CE744 +:10D8E00033BBB1DD46B55EB8C38DEFD7D2331EDF93 +:10D8F0003D91FD95FD9A27B2BF9E5FB32BFB9BF830 +:10D90000355F318EDA847114B4DFB191D327F47EA0 +:10D91000125F17D1E3A94D9BF573B7ED3CEE39A02B +:10D92000F3E72F757AB4E5F0FC49FDB85AF2633796 +:10D930000A49A42F379E71507B5D36A18FF1FCF40C +:10D94000AF715C87B3A727A3BF7AFED8A174BF8944 +:10D950005EA7753A9C8CD0E165A4DFFBDF7BE73BDB +:10D9600059663A34ADA2731E113A58EFC530C66FEE +:10D970005706685FC73CC9CDF77397323AE70F9CEB +:10D980007CFDDCE9FA111CF8BE332FC4503F26663B +:10D990004B8CF4B8CAF72175C37F14A74A3F09A37B +:10D9A0003EFC42B793368FF5DC8C4BDF2F93187516 +:10D9B0003EC6A59FBF765DE2BCEE29434FDA5916FD +:10D9C000E2DFD9B69F7D68DAE723EBEB61F1F4E59E +:10D9D000C7FA7CC8A23684F43DABEF178CAE6FD487 +:10D9E0008BA6D7E1A10F7B26A5E3396C91E68D319B +:10D9F000BFC71CAF8DF073EDF044F3BEBB14EDC296 +:10DA000044F33D06698D6C9219CEF0392799EB6786 +:10DA100035291638DBEFB1D4CF5DA35ACAF303E53D +:10DA200096F2C2A0D70217856A2DF54BBA350B5C6A +:10DA3000D6DB68A93F7E87CF024FE86BB2D49FB494 +:10DA4000CF6F299F3CB0C652FE0B36B400534255EF +:10DA500039798BE680B1ED3AB3DC83FBA83666DC1E +:10DA6000E4F4C7A0B7F13C9CC1F93D5EB921FF2F9A +:10DA7000B7F9C273CAF0FC7393451F34EA7AF170A8 +:10DA8000DB1A2A3FD216A0F765397C3EB5A3F51AFA +:10DA90009E3F00D487D1BE8B4E2D84F3E9D09CC32A +:10DAA000125FBF28CB41FE50FC8CE7B535CA435FFF +:10DAB0007301FA338DB79EDD1C9E631AEF6C67AB62 +:10DAC000A57CAE7287A5BC1118F34A8885AEF5AC6B +:10DAD000B5BC9FAF3E60F9AE3D6FE50E94BF4D1EE5 +:10DAE0003B43F9A37D69746E376F9106F86CC2FDF4 +:10DAF0009439E0E7E4642FC2F5E14DFB577AD08F0B +:10DB000031E87D7FCE2C9DDED77A30FE3D9C02F43D +:10DB10008C613F2E979ED1743CAAAFDF35DAADEB16 +:10DB2000F277E6707B693C417F5D9F83F9BAE3D26F +:10DB3000E77E15F11F3BAF11DD7F74BFA0DF6EC61E +:10DB4000F6FE0C7A7E3B1BADDFBF93C3D7D31A45DD +:10DB500008BCC05F6AB4F536FA481F04581FD49356 +:10DB6000DFE6E70C3766CCF3E239C9D539B1F3FA11 +:10DB7000322896B0492F09453736A15E6ECCB05396 +:10DB80009EAE31CEBD69B7EA7AFD9BF2C9D7E78F69 +:10DB90005916FEB82AE72AE28F78FA1EFEE47C685E +:10DBA0004756217EE77A3EECC7781ED7FDB81C7435 +:10DBB000C5928368BB19647CBF3E73DB753BC8EFBD +:10DBC0000B3C77348DCE69C7E3BB4D6D8A22C3BC55 +:10DBD0009E53D464DC9769DC57010EB0C7BCAFF923 +:10DBE000BFAB9E011BFB09A3EB07F19F98BFF0B8E9 +:10DBF000695C747B191D36F297E3FE8817753E5FEA +:10DC00009AA7FD23D269699EEFE7F8644E7F39D267 +:10DC100009E0E7095646E05FE6D0FA04C0987FC500 +:10DC20007B672E63FD01BEFB35B5238FB4B39FDA4E +:10DC300071F37600FE2D95A78FC02F119CC7EB5F67 +:10DC40006E3FA6F9E4E31EE4F7917E2E6BC978AF30 +:10DC5000EA4DC155E48FDD1CBC839EDD6D4A0AEEA2 +:10DC6000AFFDA04DABC07B2D6EBA799A82FB5E6E84 +:10DC7000BE7D153D8DF6FDBABCD88B64BAE7442A4B +:10DC8000127DCF103FF1752709DC1D4ED74EDD0FF9 +:10DC90001E9E8BFCE3C473AFE027FBD7D757745AA3 +:10DCA000CE59F5321CA74B95FFCB1C67F5DAB4F7BC +:10DCB00068DCEECB5BD7193D4ED039D0EFE7EED222 +:10DCC000BE10F17183126BFDC8186FBCF6FD71F4C4 +:10DCD00083315E836ED1FB58379736F8705D5412EE +:10DCE0009C74EF145ED7407295E4D4E58AD76F81B7 +:10DCF000F65F403E95BD2AF2698BDE9FA4AF83B6E6 +:10DD000000E9D6A746FAEBB5F9BE44BA8CA2E365A2 +:10DD1000D2E914EA611BC639032E3A37C714C1ACE5 +:10DD2000C79BF47D536040899E9B1F9ABA07E9B751 +:10DD300079E53F3B45C02F3B97FBBD0F579CABC1DF +:10DD40007B7D1F66C3DFDB837EF3FA2486F15753A6 +:10DD5000EB1735E67B7D5B0E3DA9E0FEE0A6B2CE7B +:10DD60000C5C3F6861F2E7663F311ACFA6E03DC424 +:10DD70008FA176BE2EC0F4796D09F1F33F06BCAADF +:10DD80001BE0228CB7B89E6ED1FD4CE3DC8F9494DF +:10DD90006E47BFA43564DD77BFAADB0A33B37F2AA1 +:10DDA00045E2B7101E6EC0716D14899F76E20DBEFC +:10DDB00025B81F3A4CCF7EDCC75D13C1277FBD401D +:10DDC000F8F89972442B1A8DCF283C986AC7762EA2 +:10DDD000179FFE3CBEDEEF70B25022749D0EB41F42 +:10DDE00044FAC87CDFDAE36E030ED1A1525F295FEB +:10DDF0008775A9BCDC5857CFF2F7315CB74DAC66DC +:10DE0000743E44C47A18F7250E6A785EBC75E7C084 +:10DE100022CF04282FF57BF0DC01C0C7E50CDC5FC6 +:10DE20000030E579068E1FAEA37BA726E2FE606771 +:10DE3000E773C78F5ECDF8554BB48EF4DC713C7F31 +:10DE4000DA6FC078F012C6D39F30026B4E0FC0C598 +:10DE5000237008E1DDFABE95D69DCF1DEFE4EB0FF0 +:10DE6000CDB919B86E2C92FDA967497D749EF45BFB +:10DE70005E0FEEF7ACEEC5FB29432ABF8F74336308 +:10DE800096F5F5EE5C3BD1FFDFF3FCF7E4C23369B6 +:10DE9000FD30A5A7ECD97212F257641E0689EE91E7 +:10DEA0007918E0F3503D48F390543148F350A89E60 +:10DEB00063C5309EC23A9E7657611C746F44A7A812 +:10DEC00084F145692AE12D56F3F5F5A45A41417FC5 +:10DED000A847DF9F707D35BF774171F038BD3D9712 +:10DEE000F37F6F2EDF5FDD9BCBFDA0647503ED5BE1 +:10DEF00074368AB40E9F8C4FB779FC9D7A7DD962B7 +:10DF00002FD616FAB7E49AF220309A8578AF98B3F4 +:10DF1000283D15D7C5EA55F93E8C2B7FAAEFC7825D +:10DF200079FA07AC7FBC3A2DC1CFE7EDB198F3A6E3 +:10DF30008FEB52F3166FBE8CB8385EF94D374B74C9 +:10DF40009E5974FA9FB811F0BD7B7F1ADD4777B2F6 +:10DF500049AA1E04F89EDF65D17E909FE7723B7F41 +:10DF6000AF389C89FAAF3BDCEEC3A7E3C5D650AE11 +:10DF70001AB9AFC168F7DE97EA69BFD386C4717575 +:10DF8000E83745E371F2E2AB6E9C876378DF5005BA +:10DF90004D28E5235B48B8D8C83D66B7E9BAEB75AC +:10DFA0007D7EDED6FDE293F210E57B4F7A20FEA661 +:10DFB000755BEB7DAB2B7D821DAFDE6989BCE7799C +:10DFC000CDA0ED23F3BD16ADF2123BF6077AC69253 +:10DFD000AFBC71D912BA1F65951EBF83BEB194DF65 +:10DFE0001E95FF5CDE14F167CFD3FFF7113D96A9B4 +:10DFF000DC2F5CE675F4E13EAB1B7D563FF89DBF20 +:10E000004B744FDE49FC16E87DB279FC1EAC174D0F +:10E010008F9C3C63FC3C3E18A10FA3BA6C99EF0C9B +:10E02000D103EF0391ACE7A4891E97A2839FA5CCEF +:10E03000C3CFA2E9B06A19D0A778F4F84FCA3EA2BC +:10E04000CF49A00FE63FA2E9314F5A68C375FD558D +:10E050004B0466CE9F18F846D32B9A2EE07F9E4C39 +:10E06000047A7CB885AF17BCA98F5B0AFF078DD3F4 +:10E0700087796985C67196DF0FA1E8FB0354DA1F23 +:10E08000733B1011CFC12E45FB6169D767C7BCFA3E +:10E090004A7D9FDE283B22351F31E76DA2EF35898F +:10E0A000C6337A1C8B747B31EA7E35399C87FE42FD +:10E0B000729E9EB79962CD6FB3EA8C987AD7C8D713 +:10E0C00044E49DF3554B7089251E12987F0456C079 +:10E0D0003EAEF3482A9EE37EA329E30934B73738DE +:10E0E000F9FA1E9316923FF5C57A81EE85B981390A +:10E0F00055377CB706980CC7E79BE322D868F75CD6 +:10E10000EF6774AF7FC8CF02781E6F1D341FAC8AD3 +:10E110008C739DC74EFD44FB27D1E39F1219F794E2 +:10E12000AF32EEE7F00E971ACCAFF27D35C3773001 +:10E13000B6A732926765791AF75F33F9FA6B435ED7 +:10E140008AAE970314A75D46BEB5212F46BED5CD36 +:10E15000866CF8FD6D4E7798F6A1046D9F8EF08168 +:10E16000651F8A9F611EB52BE74E2FEAB9AE8471F9 +:10E17000533059DE8D5566521CB208DBEF4AE0FB86 +:10E180009398CACFB125E07D0112EE0303FFDD4471 +:10E19000A751F6F8F0EA7DFDE9787F9C4CF7C08B3B +:10E1A000CC49F6C1FF80A0C7AB6AD7816AF2776914 +:10E1B0009F6A4BD076CEDC9E3FA994EECFF117013B +:10E1C000412A11CF89044BF56C1837A1B3721E2F69 +:10E1D0008DF41B82EF4DEB4C7E9C663CDFEB74664E +:10E1E000521CD56D6ABF38567FA0B5C6C85B45B70F +:10E1F0001FDD5E97BE0FB3CBEE1DD400CFAEDF4B5D +:10E2000095ED8CE389F1E6DA3CD16267563AD31496 +:10E21000D974CEFE6CB6DB72CEC5781ADF19741DC8 +:10E22000F1CBD8C21387F3227E99DB3EEF84C52F52 +:10E2300063F34E7C13BF6C47DEBC13786EEFAFEF19 +:10E240005F4BEB2BE702A0A82A23FBA464DC170793 +:10E25000E32CD0F74931599D80747606732DE3EA9B +:10E26000CF5309EF3455A3F3AC503480216D9AECB1 +:10E27000A5DFE9D86EDC03A0AFAF6CCF51527AE8CE +:10E280007E23BE0F4B6E52048C230DBFDFE8DF6888 +:10E290003FADDC2BE0FD61F1D6319ECFFBCAEB67D1 +:10E2A000CFE7C5583F3B26043EF821AE2FBC265190 +:10E2B000DCB3C2F300BD8F8EAB7F93C7E3A55D9245 +:10E2C000FF37283F834D6FADF83EE6B95E7450BE10 +:10E2D000F9EEFB3F79A446453AC1FC4FA378FB0910 +:10E2E000CCEF4B6522F9E7DDF93C3F27B50B14175E +:10E2F0006E56ED8D2FC2F3604EFD478897DA18FCFD +:10E3000000EF3B3E57EEB3A15C1DCC9943EFCF9598 +:10E31000F37DA9E73C095EB453C6F75D09FC3EDB1B +:10E320002EFDF75F4EE671FFEFA44ECF13FAB3DB7D +:10E33000E62F0F54E07E7A8126C918BF530ED1BD57 +:10E3400010CE0B32BD970481E2C5AE047FF9F74CC5 +:10E350007433DA755E00E5302DD6F7767A8FE3A157 +:10E36000EF53ADF7EC7EA07FFF818E8FF34222F555 +:10E37000D7950A78B9CDED8CE3EFC5D8E7881BF3C4 +:10E38000667F88743F98A37D944772A3EB43CFD1F7 +:10E3900053C2B8CBD18B7C7D69D0036E3FCE37D8CA +:10E3A0009B32D0CF3DE5E736727DE4A47519935FCB +:10E3B000A2AFFBF3FB6C5AF05FD4DEB0ADBA1A57D4 +:10E3C0002399FA9477B41FF381761E97ED46EEA554 +:10E3D00031FC4510F323B8EFE18F3AD8EA2E9D8740 +:10E3E0007EECE23AEE27AD423F89EB4B8B5F13EDBB +:10E3F000FFB8995FC1FB836EF7C80AFA13D17E504C +:10E400008FB694FC851EF017F0FC52B41F64E89B95 +:10E410002D4191A13EDB5A6D23BF7E6BF9D06BD7A6 +:10E42000205DAA6595F21AE583CB6653790DF5F365 +:10E430003A7E3A93EA93DD0B7913887E8B6AFE402D +:10E44000BF8B60CCD3D6EAB313D0EEECD6E711EF96 +:10E45000A19D9B69A203E37EF2ED9E1291FC253DF6 +:10E460001F72F8C104BA1FFD03AFBB0FF3B973F5F8 +:10E47000F5AE555B255AEF5A5579BA1ECF45ADDA40 +:10E48000289077ED0FF89231CE6A59BFD48EFB17E2 +:10E490009495EE00EE056A095AFDA7E8781D3C0A3E +:10E4A000A2CF4AA04F2C7F2BDABF8AF61B6AF2F567 +:10E4B000FB67AB5815FA0D6FE8EB5C86FFB0445F65 +:10E4C000E702F6B02F31D931C37F90C586BA7C18E8 +:10E4D000EF4A99AF5FB3BAA544D7B9D2A7AF5D836E +:10E4E000F25F5D5C8CE39DA0E767B606DF7362FCBC +:10E4F000B9F5A244F2B5DBCE487FEEAEBAF2E976CA +:10E50000C0EFC08313B33E84F2C5F9767E8E4354C8 +:10E510007F5C87FED1EF6DA4CFE2D93D675062A545 +:10E52000206FAEA0404F631E92822E269BE43C4992 +:10E530001F4F46F5B0506C92EB15F91CBF94F53C9B +:10E540008E05A60FE5025DEF518BF7509C28ABE4DA +:10E550001738F355BA17DEA8FFB4C0D703ECFBEBAE +:10E5600035CCDD16021ED89F0A78A07D290A261216 +:10E570005C1C4CA3674930859EA5C15C2A2F0B9675 +:10E58000D0F38A6011BD1F1F9C447079701A3D271B +:10E59000042BE9393178153D27815DC17A15C17A9F +:10E5A0007A4E0E5E47EFA70497D2736A70093DBD9D +:10E5B000C15BA9BC32B88A9E55C1567A3F2DF80F6F +:10E5C000045707BF4B704D702D3DA7077F40CF19F3 +:10E5D000C10E7AD606DBA9DECCE0C3045F197C8CC1 +:10E5E0009E5705B7D1B32EB893CA0DF93B81FF04EE +:10E5F000FB7A7DCA0B0ABF7F3A4C7ECFEE38FAEF2A +:10E6000027F95C7FBAF3B5CEFC8C48BD2D51F58D52 +:10E610007A3BF2B97F619CEB139D616709C5D325F5 +:10E6200055184FEF0E8A1ACD5751F11EF4BB1FCB70 +:10E63000E7F6D469E3F7191AF173CA1C7E4EE89E17 +:10E64000FDAD7CBDA136EDB2F2311DF9FCFBDD72F2 +:10E6500088FC83DD0146F72FBB4A07056CA7DF2343 +:10E66000D3EFAAD8B33F3F80EBF88B6AB46AD48764 +:10E670006AC84F799CC5DA6C828FE5DBF4BC8DF6F5 +:10E6800034CA4D6175C602DC2751D82962388D79AC +:10E69000977A84D5394C09B348BEA33FC16A870E27 +:10E6A000E71BFED6D0E3587FF794D22A7E2F113F86 +:10E6B00057B4E5C1628AEB76DBC302DEF71682C08F +:10E6C00062AF294FB9BB6BE5B3E8CF17777B0FE299 +:10E6D000EF9F1586BCD310BFC3BADC15F5AA0D2E6B +:10E6E00068AF648776D005EFCBFAFC0D09008FDFA9 +:10E6F000173A88CF09037D0D89F09CB43F7C10C385 +:10E700008EC9E1A10637C0538FB24348D6CA4175BE +:10E710007612C0D34E6987D0ADAD19F2CF1E87F304 +:10E7200064EFEB1807F8ECFE23F3B6035CFB69AF6C +:10E7300004EE7C64FEC1CFFA95695E9C6AAF86F4F4 +:10E74000CEBB4FA1BCC96E79C89552317A7EFA71A1 +:10E75000DC38CE20BF27224F1BA679C8AB665521D7 +:10E760009A077E0FFD628D9FA71ED6F903E6E16D25 +:10E770009C87FE04A51ECB87E73205EFBBBC3E9B02 +:10E78000FFAE42E2C662FA7D2083EF80BE1396247C +:10E7900099E781EB81DD23FEE1D8F41DCEE779BB5B +:10E7A000FF69FAB6E9FC1C8FBED7EBF1E7A5E45888 +:10E7B00028E07C0872FC77A463BC7A5714E8FB98C5 +:10E7C000A2E8BC5B562612BDDC4C0C55F27370E817 +:10E7D0003F151588C639BECBA26B6EC1FF1F74BD35 +:10E7E0007009BAB25A1E8F1BE794E3E99B2DFAB861 +:10E7F00063E839A2C33DBF2B223DE72DE07CDCFD61 +:10E800001CCF171A7ACEF1627D18F386869EBB88DC +:10E8100078658CA1BF743DF330A230D39C279D4C0A +:10E82000F6AF4EEF6747AE766501EA9D8A549D3F8D +:10E8300078DEF46151A9273DD3C0CF79831FD899E1 +:10E8400046F3A356F16B0219F93FBBAB26521EA14A +:10E8500008FC05B98A7E632A8CCFA46A45C473E498 +:10E86000C63E38A6B47ACC7266D8F3881C1AFC90DF +:10E870004AEB1BC8A758FF419DCF22EDF0F592AEA1 +:10E8800007722CEB34FDDE1CFACEA81F8F6F7718B1 +:10E890007CDBF926D98DA43AEE1F2477A6121F2718 +:10E8A000CFF1E38962D3794FBF1DF38BF715485F32 +:10E8B000492F7CB7E07F46EFCEC78B743230EFAF85 +:10E8C000D0EF041582DD51A1BCBF0E685D8D76CD01 +:10E8D0004EFEB4CAF8FCA975AC0F7FDF06E845BF51 +:10E8E0008F171293681D0AF8752ECDBF3D45C1F9EB +:10E8F000DF91EBDF5090115F0E9444B51227F3B116 +:10E90000DDF317BBB3F1FCA59280702FC05B30DE46 +:10E910004F1D623AFC28967FDDFCC063058DAF6316 +:10E920007EE02FF9DA36E45B5C0740BCB4F10AED17 +:10E930007735F8F852F6DF90C788FC289586FCE01A +:10E94000FD6FA0FF7699E5229E3FD3A4EBCB5F1429 +:10E950005CCA9F49AD97B99C73F931D6755F1C5B52 +:10E96000CE0D7C7F5230B6BC6F9EFF5E086B1B796C +:10E970004C6754BEC2E5E91AC4F8D3B5909D714CFA +:10E9800041BF99E731EFC03C26CCB7B3D41995C746 +:10E9900014C89F37F297D1EBCE461ED3B847229AC0 +:10E9A000CEAF1658F7C1A23EA2F5677D3CBD1B183D +:10E9B000FFFDD21312AD539FD7C44FD0BE9FAF06F9 +:10E9C00042A000EAE74616E227C4AC0A43FD833FB3 +:10E9D0003D8A712D7BC8EBC47B4117FE97C034C0C4 +:10E9E000E3D87F49F494998FF2988BBC07F218D83A +:10E9F000B90395AFE6E1BAD8B13300031E872B67A0 +:10EA0000D0BEA685C70FE5A15F1B8DF7727F6BCCCB +:10EA1000FDA3D1E35FBEE20F6EBAF7406970E2BEBC +:10EA2000B078EB7AFFA1EB817FCFF37F82FC94B4C7 +:10EA30007AB8137FA8A55311695DCF58AFCA565F46 +:10EA400070E1FA5CF65DDC6FCC617DF47B22D17CF9 +:10EA5000BBB6D07F1EF97D6764DDECD815E675B3D3 +:10EA60007B73EA1AA0812747D6CDFC1F63BF5ADA11 +:10EA70004025F2D9CEEAFF45F7192CB4437C8A74BD +:10EA80009EF66E3AAE9B37D7BC9281F81879EAE8C9 +:10EA9000F11BF9A8E878532AB4E6A9CF7B6F4C0E96 +:10EAA000936E899DA736F26446BC89793025869E8F +:10EAB0008EA6B7D17FB3C0E34B66E3F7F21FD7E969 +:10EAC0000D7A20A310F3BF9D7C1F91E610681FD123 +:10EAD00079EF2BA59417A98E1D178CE4C559B82C76 +:10EAE000D67A61739C7D19930AB91D69B6F1FC9FB2 +:10EAF000B0F695D5885773A54BC0F85866C336DC79 +:10EB00000F9EABD76BF16EA6FDABD179FFDC421E39 +:10EB10006F2EB4874B153D2FE88D214FF1E871CA58 +:10EB2000D6BB08FB3D75BBC430DE5ED83A236BAC68 +:10EB30007CF27BC817787F5A21B71323F38587FBB4 +:10EB400062D0C7D8C711BDAE3252DEEAA2FCB1B165 +:10EB50009F63443E0AB97FF180FE648EDE721C1F03 +:10EB6000EEEF40B9BCDC7D1DD1CF1698FEFD559768 +:10EB7000DEDFF14021D797D1FB424E603EA42CE26C +:10EB8000175D3FE27F58F321B2D8B0A2D09C07A90D +:10EB9000B881AF2B1F728921C0D7F546D91EFCFD65 +:10EBA0003259CF833495C9748EA5E90F9217F5BBFE +:10EBB0002B8E1C19FB4E0C38F182C0FA4C7A3A515C +:10EBC0001EA07C63E20599DE47CBDBCC287933E6D7 +:10EBD000271EBD8CF9897E6FCC4FA4DE93E5B88EDD +:10EBE000BF3981DBC5E8FACF47D58F5E9F36D66542 +:10EBF000A3BFDBAAF3FF79FFCC2CD4BF4DF650D9CD +:10EC0000E5C8BB41A793177FAC60BBAEFFE4F74EEE +:10EC10001AEBEED757A7D23AFBC92689D60392261C +:10EC20002BFDB897A9AB90C719861D8C5EBF6B6191 +:10EC3000A1036407F5F9B91EED6079643D2FB19A1F +:10EC4000C3F1ECA081DFE5AEE3FDAC50CFC745AF2B +:10EC5000E3C5913743CED6EAF279A9FD08CBED7C26 +:10EC6000DF72F4FB367DBECEFB9FBC713A74F5DDDE +:10EC70001A917ED7762BFC0FF93754CDEFA37EF790 +:10EC8000A2837E2F27A9467C1A7FCFE854EBBBCB0B +:10EC900066A33EA9B1D1BAC0483E758BD487BF8365 +:10ECA000BBA8C6467EEFD6C72B899E83A04FEEB287 +:10ECB00061BD0D741F6842090B48E004BD5BCECFF7 +:10ECC00075B9401EB05FD7DF97D33AB2ABD51DC040 +:10ECD000DF4F3CA1EBA170EBCFE83EEE5513DC29F2 +:10ECE00098575DA2099675DAC5B52ECBFAB1C11752 +:10ECF00076E6CDC4FBB65C5B6DB46E3D7B52DD4DFC +:10ED00000D989FDD6263745E4188ACEFAA747FB892 +:10ED10009EE7D5FD8921DC1F5C86F9D90FE9DC96D9 +:10ED2000F13BB7DF767ED6E0B368BEF8B728BE30D9 +:10ED3000F492C11FF1F492294FFB99453F952EA300 +:10ED40007E664F7A899D7547F492A11FDED3C7FB7B +:10ED50006EF9965D0761BCEFFAF92984772FFEEC16 +:10ED6000159C7FD71D02DB40F3E4F0C592FF4A43B8 +:10ED70008FE3BA398CE3FF02A2720E7D008000009F +:10ED80001F8B080000000000000BE57D0B7C54C5C4 +:10ED9000F5F0DCBDF7EE6EDE374F1248C2DD4020E5 +:10EDA00090070B040810754320C60AB8BC41A26C3A +:10EDB00078192040508B5851164200113F2322A24F +:10EDC000D2FE178A96D66A0352B58AB011A5D0979B +:10EDD00051A952B5900A2A024A14D0F555BF73CEF4 +:10EDE000CC4DEEDD24826DFFBF5FBFDF97FEEA30C2 +:10EDF000779EE7CC79CD9933B38C31A6F7606C9AC6 +:10EE00006F5E70640EA3BFABE0FFD3AB96B4E6BFFA +:10EE1000C3FFE31F141C5D51151CA9B6E5C3D3A3A2 +:10EE2000950FE7E8D18CDD1DC9AA1AF2DA97FFB673 +:10EE3000BB9DB1418C4D959817CB99C3C35812D443 +:10EE4000BFABDF76BF0BD299AACD0FF97B9AB2B7D1 +:10EE50003B21BFA2BBC45832E4F33E1BE48F819434 +:10EE6000B5FC783B94FB97C7B0C774E8A7F2E2A063 +:10EE700095F96DFDCF38F0B0A6437E6AF6EA647F5F +:10EE800034963FE8C67690EEF4C3F788DE913501FC +:10EE9000187706532E343B057CAEB6F6C678512162 +:10EEA0009905069ABFEBFCBBD2C0B4682CB753B926 +:10EEB0007F04745008E97B52A0169A1EEFEAC9D568 +:10EEC00001BEF35D3D7998AEEBEAC9D793DBFAA9B1 +:10EED00055D954845BB631DF2E849F7953C7C7B4AC +:10EEE000954FD4F9F87525BC5E63F2E0D4F721ADF7 +:10EEF000FD47FF5415C61DAB2B84BF976306C7356E +:10EF000077805F23BD6F454D706436E06B858FD28F +:10EF100038C63C0DD0FE5EB17E1AE47741BE4EF598 +:10EF2000A6C69BFA19A8C7D3F8B143773765019EE7 +:10EF30006B359B26E9982AE588B7D5D14AF90E6A40 +:10EF4000C7E1AE8BF13C86EB06DDB14931D89ECFEF +:10EF50004F8956BE6AC52F43B8187D37E00A9FEF28 +:10EF600044DD46E386BA7A2620DE7EDED53311D331 +:10EF7000658ADF81F85EE684F977D0EE7AC417D42B +:10EF8000EB2BFA672C5AFB20578C2BE3FAD4FC4F5F +:10EF900033AECF2A85D542FA50D45DBF6806B89605 +:10EFA00041B70E48150DCA21752A4E4D7633762885 +:10EFB000D33707C7BD4D769FF2115C35FDBC403796 +:10EFC00015CBEE088E84F5D612D90C6F74FB7954EC +:10EFD000C07A227E6BC4FABDAB063310AFA1CC1150 +:10EFE00035E6F56FADBFEC2EEA6F4B37DFB6742810 +:10EFF0002FD1D985000EA7F8741C6F1DFE7B2896B3 +:10F000007B6FC3F94CA9B3F9914F4A584C40C27970 +:10F01000E9098CA531B68DE97D588FF6FD03C4341E +:10F020008FBFE03FA1DEE7199EBBB01FE8CF8FF393 +:10F03000F1F4D656CBD84F51228D137B897E80CEEA +:10F04000736AA22F8D4F16CDF169B73BB5F51AE162 +:10F05000F33E1C0F303304E1FAA1F87C44ACAF0955 +:10F060009F8F201C9DE1F38BBF77F1209E3E733371 +:10F0700037EBDF397F3897256A8A89BFD7C55BE7C9 +:10F08000B16600CF3F2EC62F4CE7F4F9BC585FE7BE +:10F09000B252760250E770327FC400C88F661EE419 +:10F0A0008F8D76ABDC7B5E8FA1FABB33473C8FF351 +:10F0B0005EE392A6225C6BE2796AD4BB452FA1F293 +:10F0C0003D62BCE7053D6FCB8279407FF1827F8D49 +:10F0D000FACB45FDE53AEF1708A20FE2D52ECB1D7E +:10F0E000E273BFE0AF6DE9BCDF32399AF877D6BD85 +:10F0F00072C02111FF8E1D3598B11BA92BF8FE623D +:10F10000B39A89E56932F3035FB065EA7BC8CF1A29 +:10F11000FCEFBB2CC6E6000836A09FCA3C6F5C1013 +:10F120008A2BFDBCDCE077906BF620ACC34C5F749F +:10F130000DD2C1AC75D6F239EFDEEEC7F1FF3294D5 +:10F1400069521AF6A7BCD76CE81BE877D9BBAF1594 +:10F15000BC6CD23F6FE931491F44C13F0A981BF98B +:10F16000FAB515CFB11320832EB2E2B809F0791C9D +:10F17000E3F201266F1F67D2075FAC682A7819EAAD +:10F1800029B611C7900E672A1C8F8CF972CC727742 +:10F1900078378EF7E6488EEF70FC5D14EBB281B1E4 +:10F1A000726C8FF214E57782CC6A488E43BF487741 +:10F1B0001BBB76DDB65E32D1E1544DC2C5BB88F8CB +:10F1C00087F689826E14109371094847DD3405F380 +:10F1D000C052984FD43DCC06EDE0538306784B5493 +:10F1E000DC921BFA6FB637D775017CB5F461EEED92 +:10F1F000305C970AADB10BD48B1CA9335947BA6266 +:10F20000B14558DEDFE6DE0EF9F889DA1A15F2F1BB +:10F210003A4BC0E56DF64FF020BE374C659A0C7C3A +:10F2200091E18AA7F9CC58FE29B3C1F7E462004501 +:10F230004779A295A5227F4F65EEC7A0DD9F57AF06 +:10F240006259267CC4BA381EE274A077C083536723 +:10F25000B48E252C639B2C99EB7178B774F3C4B8EA +:10F2600088FFB5486F0CD131E97B961719780CEA05 +:10F270005FC79A15943B8C35312C2FCC2C4DC4FA9A +:10F28000061FADB1B12AAE276BFC1CBF5AFC7AEA4F +:10F290004423FC2A80DFF5040FA76F03BFC63C128E +:10F2A00073DC9206ED232B387F86AFEB6017E7E720 +:10F2B0002BBA79B25CC847DF7CF79D0C7CE0147CEC +:10F2C0001059E1AE0A027C112CD62DC17811BAC6B4 +:10F2D0003C90674E29902D21FC35C4471145EE44E2 +:10F2E00019E735DBC69414C64A457BCF54267D000A +:10F2F000742C231D933C55D807065DE3478FFBE52F +:10F3000000F43BEA9658F77AE0339BD3E743B846DC +:10F31000A6823E023E88E8595382F4F0CA0CDEC74A +:10F3200046C0474307FCBD4DC8A704D9976AD3B070 +:10F33000F75F35BD5C4CEBD957827EA3ED3B9A0E4F +:10F340005D81721EFEBAE27F763479F2B0DCC8B31A +:10F350002083796D8B6CCD7B9CA9247F8CBC1FF3A3 +:10F360003F8361D830D0D7AE1D4DABF390CEAFE622 +:10F37000745E0382A1BF89BE717D002F9953195B12 +:10F38000998660837C8A69A3F7B679EB7CDD3AA124 +:10F390007B435E813C5175E8EFA8CC5A70BD27B124 +:10F3A000D577E2B89A9369F740FFFEAF00CFCE362B +:10F3B0003C9F7B71CA2B8F42FD354B62DDA8D7D5B0 +:10F3C000119CEED49FC4056A49AF07A85F89E51078 +:10F3D0005D4D9C2AB9D7D3F2B42CC2FCB4BD51DA2E +:10F3E0007A17F6F35606DA8D7FBFF37C0C83F91F8C +:10F3F000575A62705EA796BF11E38175F8FB729948 +:10F40000ECA21B25AEAF67ACF876F04CC82F157C8C +:10F41000F2BACBB3D065D2576C5932E9E37901988F +:10F42000A949BE2DD81925888EE71736245AF286A9 +:10F430001E5EE86035B8FE0B7EDD68EF06F39CB714 +:10F4400033BE3FC27C0A0408E2FBD49E8C6D688FF9 +:10F450003D29F8EF7597F72E1C1FE7E58376C7F770 +:10F460003A5890E45593CAA2B9DC9780DE7D7CA817 +:10F4700076F33AB8AF9B1DE5C31C89B53888EFD841 +:10F4800041C4EBFBA932437A0D9FF79CBF6B765CBE +:10F49000C73925ACC5DF1FE729ADB9AD90EB015CDD +:10F4A0008770B8C2F5C6AC862576863426E795A166 +:10F4B0007CBBB84E22F916AE3F401E1C7C01FA9D63 +:10F4C0002DF4CB9C7A6BF967876E39F828DAAFCFC9 +:10F4D000D9C9AEBB09F58BC9DE0FD72F3F77817E27 +:10F4E00041BB71301BF21DC8A3DAE8AC38DFF7D896 +:10F4F000D7A756405D0763A75738293DBB42A37481 +:10F50000A14B27BC2F78AEF16037A2A7A6C1A89760 +:10F51000C71C2E755E0FD99B5365FD24F2C7B60933 +:10F52000C14775A457D09F2EE497A08AFCA18244BE +:10F53000898679FD1F40C2774042B20679335CF577 +:10F540008DAFBC80FB1F80FB31806BCCA06C07D2E1 +:10F550006B2D631750FE18F3BB39D54EE35484ED81 +:10F5600073C2E17EC925F4EA10805B467D9AF7AA52 +:10F57000CE3A87DBD0A79DC1DF59BB85A0273BB220 +:10F58000DF0D3E5928E875F68E716BBAC2046A5FCA +:10F59000FC30B3399AA89EE85ADE2A05901FE5D4BC +:10F5A00014A22F27D2631AE24FF10BF824C41734A8 +:10F5B000789399E8F9A6BD514407A9DD64E628C20D +:10F5C0002F9C3E650FC811A4E768DEDEC99C2BD1D5 +:10F5D000AEF1EDBD93D77FC1AE395289EF526D9434 +:10F5E00006536D4544AF272DF4BACE9A073AB4E4DA +:10F5F0003F519B33515E00FD9D34AFC32752C7FB83 +:10F60000A023AE2C8E07DD53867A6B0EF3AED18825 +:10F610004FEBE9FB29A5FEE01DC8E73B24E6073CCC +:10F620002D7CF6C967503ECDFFCD83B1289F3E5259 +:10F63000EA5370BCEAC7EA6251BE9F52FCB1D8FEE1 +:10F64000A3009753E1E30DC892847CF5C44AA0B7A8 +:10F6500016E13F910066B7ACF9098CF339E019F96E +:10F660007CD19E2F297FD0E36C61A9D86F7319CE0E +:10F67000635E6574CD4A285FFC9C95FFE6FFE2C19E +:10F6800014347D017FDD04FEBA61BB453B5437DA9B +:10F69000858B8EC86E1C66316B21F8C2DB2F6E38ED +:10F6A0006127F96E632DE9C3DB9783A56347BE5AD3 +:10F6B000CC367C2A1740BAE7A3B719A661766495C1 +:10F6C00090CBE174EFCA12FC2EE81EF0E3463DEF4A +:10F6D00087796563A50097D3B5BF7478ECF0FDA377 +:10F6E000B7BB6C73407F6777FC3156CA6BE303C6C8 +:10F6F0005611FECE36F4F85E79F189E097563D203A +:10F70000F48FFE1C4CB00B64F7F2B45A0DC60E0712 +:10F71000B8ABB7A96EA4FDEA27654F34DA4B7F7307 +:10F7200090BD51FDE479A2DF6AC9D322F52770624A +:10F73000517E1BEBB6E0C9F7CB503E2F00BB7D34AA +:10F74000B0E4FCA72FF2FA40EF11288F77FDA3EC6D +:10F750000ECC83FC7076B06EA50D8DF6E6E80ED665 +:10F76000ADE11F650CFD10BFFC82D6E5A37D12EB59 +:10F77000E26ADFBEEAB13376E4D7B3B0405A3CAEBA +:10F78000A35C698FEB68FD82639F2FA4726DBD7EC1 +:10F79000E97594D00E49267A7FEA7918BFEA6D8719 +:10F7A0007B348EF7D42DB10CE8E043A586D3FD4F12 +:10F7B000EB52502F57A9FE148D52FEBDEA673F262B +:10F7C0007ABCE9B51FA730B2273D69369207FE34EF +:10F7D000846FCED64904DF5CE6237AACFAA9EC4507 +:10F7E000FBF6A2C2CA7775B0AEBF107CE3604B0ACD +:10F7F0007E827A0A7A5A0FF07C68676467F85F97AE +:10F80000C9BE75B0EDC724F87EB1295922F9F59A21 +:10F81000EA44FCDCFA623CD1D31D59DC6E2B7DED51 +:10F820006219F2D7AD2EA5C6A111FC56B906ABAB35 +:10F830000CC6EFF09785FD7E66BF01EA5F80EF8F13 +:10F84000B82DF5095F1F6E77444AFD204DE17634EF +:10F85000FCBD8E727111EFAB8D9F99FE19C2FFA690 +:10F860008067F1CE0FCB1E41BE9B195D1307F8B91F +:10F8700070E484BD2BF245928D65E3BC9ADEA73C13 +:10F880007327EB71A96DF858FC1CD81566FEDDF1E5 +:10F890007E18FF5ACB417F13DE16C34E627D12E203 +:10F8A000ADA50CF5B91FC67D0CC699BB09EA9BF83E +:10F8B000B58D2EEC6DDF5D6DFCC7E48A38B46F6EDC +:10F8C00012FC1EBE5EE1FCBF2DCBAAF78CF66C2BA2 +:10F8D000E7FBCEF49E618755AB81C7114FD57F738F +:10F8E000B8510E573FC9F90C0CCA966CA0FB33BF38 +:10F8F0003EF0E6F500CF99063569348D6A95AF552F +:10F90000BB814FD11E053B2A82E4EB176467A596A5 +:10F91000825E83F99F49F232A4EB76FC09DF3BE477 +:10F92000CF2446F2EB3F2657F7DCF3A91CDB393F27 +:10F93000DED4895CFD53985C057B220E8661A77F2F +:10F94000B5A03BCAC770FC1A780D978F55597A87B6 +:10F95000F211FEDE64263CCE7FE26392779F83BC89 +:10F960009335D42F40D7A8BF619F80FA7E51E053D2 +:10F97000CAD7A1DEA27CE344A9A023B8ADF80C2F1E +:10F98000BF4FC81F63FDD555CC1F03FDB6BC28076C +:10F99000B6C3D4CEE92DB109005F5D04F71F9CD337 +:10F9A000443EDEC8B3199530CF73FE020DFDDB2D4A +:10F9B000118CFC3FE7BC2DB1F1E8DF14FE9D5AE746 +:10F9C000F9DC9303811C23BECE3D69DA27D5C688B6 +:10F9D000FAA9BCBEF1FD1F7BE5581DFD0301EE97A2 +:10F9E00008A75BB20C61BECDC26F314AFEE629F4B6 +:10F9F000DF7DE6EF69437FDD67AB2FF2BC9293C0FA +:10FA0000D0CFC35612DE4FFAAF4E8139B1F799F716 +:10FA1000CDE1645779EC6980F7591C25ACEA706D2B +:10FA20002CDAE9724CE141B447E702C2D1CE9EBD67 +:10FA300021CC0E10F6EDDC4D6A1BFDD07F03E41FD8 +:10FA4000BA49D8EF555BADE5F3F79E21BA9B1F4647 +:10FA5000773E9C4B5A7BBAEBD643F0737FD61FE9B7 +:10FA60006E941C6D433A3F7788FBB73E5BADB23571 +:10FA700008EFAFA500837E3EDB2B939CFEEC399E06 +:10FA800067FE64A26783FE0DFC9D45BAECDDB95E9E +:10FA90003FFBDBBF0FBE03AA543FF34EC1A3909EB2 +:10FAA0007DE66FBD5EC0FCB36F65BEC3DAD72FDDE8 +:10FAB000F7E58D34AF7D0E86F33AB7EFF799A88F4F +:10FAC000CF3DEF70233D9F5BE5A07DB37F5F0CE9E9 +:10FAD000FB7319DC4EAC7DF18B826692E3ABB9FF10 +:10FAE000AE073F47F96CEFD7C7D02FF1D95E878EAD +:10FAF000702CDE1745F6F2E2E723020CDBBFF805B7 +:10FB0000EDFBFE53F02CB273BFEC39A0C7DD48D734 +:10FB1000F1DCEFB5F885A13F5F09E32FDCD3689FE7 +:10FB200005E5A5FBBF2D4039756E77A31DE518D8F7 +:10FB3000C13F43FA1AD763F3FD2AACDF27681B766F +:10FB400005B9D0E3CD71FEBC8EF0C2F1700EF0802D +:10FB500070015EAAD07EED0C1F55FFB5F8F8F44693 +:10FB60001CBF7AEF1086FE9C36BC481EFE3D260068 +:10FB70007B19849F7FDFF74501EECB2F05EF9AFFBE +:10FB8000CFE0DDF15F0B2FA7F7BC1E3AB7E3C2E869 +:10FB9000BE3D5D3FBB94F24FC5B869BE97C9EF2F1C +:10FBA000FFD7C2FFBFB3DEEF21BCC9FF8DF05E6A95 +:10FBB000BD0F8BF58ED11CE43FFC3693FD00B8A53C +:10FBC0009EFF6FC2DD6A17D9DCCE4298DFDB2C3096 +:10FBD000A94422EB83EC8E5A50C7D85FD344D77622 +:10FBE00099EF41683F3216FF0D5D16F4E47EF85A36 +:10FBF000F6DEC84ADC3F813DF118F9B1DF538E00D3 +:10FC0000DC4DBE62B2131C8CD3D5C524E7E3B89F8C +:10FC1000BACE3341DD8C76B78FEF5730BF07EDDBBF +:10FC2000610E0DF37F5909F381FA7F89B169B57AC5 +:10FC3000E7F8199B7468AA04F6EE7545D67DCAF5F7 +:10FC400061FB8D2953ADE593D9F66405FA9F5CA558 +:10FC5000B280847E696BFDE89E1AC13585D5D4716A +:10FC60003FCE25F144FBC3A6747DBBCCCF9FD952B8 +:10FC7000806792DEF366F4C35CDF8AA79B999E449B +:10FC8000FE0ADA673266A3F56A4A2A7A7CBD19BF92 +:10FC90007C2A00DFE74A6112EEF718F96FC67ABED8 +:10FCA000A57C6AA993EC640783FD239FB765BFE930 +:10FCB000A0AE314CA30DCF2308AF5E750FE275A83F +:10FCC00043AB755BDA13DCB59E814E3DFA7F1FBFF7 +:10FCD000FD11BF83DAE3D748F358CB8D6867C6B20E +:10FCE0005837EECF639DE94C49A2E6E43FC4134D7B +:10FCF000F2078E600DE40F2C52CEB6C29145E5415D +:10FD0000F473D52E81F6488FE94CE7E7D8151467D0 +:10FD100020311FFB2EAACDDE7CB508EC4D17A5C403 +:10FD2000AFAFEEE0F6E5C5E2A7D7F407FA43DFB7D9 +:10FD30007F30DAB5E2CFDF5C81ED646673E33E9835 +:10FD4000793CBA3618FBE57C115764B3EC83E33D8C +:10FD50009116FC24962758F2C9DEAE96FA5DA66687 +:10FD600059CAD37C7D2DE5DDAA0658F21935C32C7E +:10FD7000F5BB2F1B61C9BBFC3FB2D4EFB16EBC25F4 +:10FD80009F5D7FBDA57EEF2D332DE57D02F32DE533 +:10FD9000B93B6FB6E4F31B7E62A9DFEFB95596F26B +:10FDA000FEC1F596F28187365AF2839A1EB1D41FAE +:10FDB0007274BBA57C68F3AF2CE5C34FEDB6E4AF1E +:10FDC0006879DE52FFAAD04B967C09FBA3A57EA9D9 +:10FDD000F30D4B7E94F68EA5FED5A927C2FC1E9A84 +:10FDE000FF16A00BA5869FF75DA39FB1D4879D5AF0 +:10FDF00005D28D2AE8E1DA9CF396F231EEAF2DFDC3 +:10FE0000D9413EE0F9A913FDC39046B2064AA35971 +:10FE100013A51306F8F6F744FFC8CFFC6B90A8FEB5 +:10FE200032F48B4CD41BAF16DF42E75E1753F979DF +:10FE3000B0C25A14A4EBEB9CD17EDCF71B7C1B1BDD +:10FE4000925910F6A3712189522D14C582B02F8DBD +:10FE50000F45509A104AA4EF89A1784A9342DDE8F1 +:10FE60007B72288DD294500F4ABB845C94A6867214 +:10FE7000294D0BF5A1B46B6820B5EB16EA4F697AF2 +:10FE800068387DCF080DA53433544ADFBB874A2834 +:10FE9000D543D752EA0A5D4369566802D5EB111A79 +:10FEA0004769CFD074FA9E1D9A4669AFD02C4A7B21 +:10FEB000872A29CD092DA0B44F681EA57D43B750D0 +:10FEC000BBDCD0124AF34277D0F7FCD0ED94168415 +:10FED0006A29ED175A49A93B740FD5EB1FBA9BD27B +:10FEE00001A107E8FBC0D0FD9416861EA5EF834252 +:10FEF0000F533A38F4734A8784B6515A147A82D22F +:10FF0000A1A15F523A2CF434B51B1EDA456971E8A1 +:10FF100005FA7E45E877945E193A40DFAF0A35521C +:10FF2000EA09FD91BE97840E533A22F4067D2F0D07 +:10FF3000BD46E9C8D03BF47D54E86F9496854E5099 +:10FF40007A75E81F949687CE507A4DE8234A7F143D +:10FF50003A4FEDAE0D7D4AE9E8D0D7F47D4CE84B41 +:10FF60004A5BFD08C56A985C6C957FB6EFD0DF13DD +:10FF70009DD0A1DFADB5BD90C7F747FD8CA1FF6354 +:10FF80006C8D44FBF287A23E7999E4E450878EF9A8 +:10FF90003AAC9AC6C7D15218BB01FFA133D638D4A8 +:10FFA00041F6C35FEEE4EDD6949C78F716D47F4B10 +:10FFB0001C0CE314C2E5AF31EEAB450792D1EE5A0B +:10FFC00033A0B91AFD30F7BA9A2B30CDCDE6FECE6C +:10FFD0002C91F6C9E67ED8AA015C5F572CC9267F12 +:10FFE0003E4BBA3CB8E6093D6FD4FFB48FC847B763 +:10FFF0006492BEB8CC7E2EB7DEA5E2B0BE88C80C37 +:020000022000DC +:10000000E0617F6CB6EFAAEC0EE2AFFE857ECAFF20 +:1000100043FD8CCB1ED4793F4CF1D8C780FE9B2E7C +:10002000D6FD5DD53B15FD66CD1936F72AF85497F8 +:10003000FC8CBA0CF28E34EE6F827527BF67F31119 +:10004000D98DB6CACC30FFAFA3DAEA579A0EF2B216 +:1000500004E863FAADF23F1C05EDCB9B3D8CE86CE8 +:100060006DB514E0718D0DAFB8A07F9FC7D982FA2E +:100070007F7AD839F2CA25CF6698E3307DD51FBE86 +:100080008B70FAC47986EF12714D37675BFDD00033 +:1000900032C1F30EC083E7220792971E1A8CF0FD3F +:1000A0005966B01300A668C8207CADE37E54C37FB8 +:1000B0005A09F2D903FCFB4EF23319E80F3CB0F0B9 +:1000C000B654B4CFD7D6ED52F15CB0396309633181 +:1000D000663A0AF078A70C66C778D9E9FE250AD2F5 +:1000E000BB6A635BC98F9DC9028FC17C6D51CB75A3 +:1000F000D417B288C733DA5F10FC62A4C76D1C6FD7 +:10010000FE4512D9A36BED353909BC3F6A7708CF9C +:1001100045008E13F7BBB6AF82F272853995011692 +:10012000BB3192FCF90A8C69B63B99D5AEFC9FECC9 +:100130007861DFD550BCD00989FB45F10FFDEBD4C8 +:100140000EE389941ACF4A186F36D3F44734133D1F +:10015000D48F5B80EB735CC4D1E01FC6FB4C47BA05 +:1001600001FC4F5F1EE5E903E53BB2B99D0DF4E1EB +:1001700037FB335589C3C1164A841F80B81AF38EE2 +:100180000D8EACF52ED33CB01EC849B517972F275E +:1001900024819F95A21DCCAF04E90AE787F12919B4 +:1001A000BCFCE4BD52603B2F67A9909F75A42BC592 +:1001B00059CCE8B26624233A64E8E364BED54B82A6 +:1001C00058EE83C5D1715FA430C50EF8AC14F15B55 +:1001D0006C8344F15B16F8603E27EB76BD82E5CD7B +:1001E000929EA541BF7F10F2AF3983C3D58CE363E4 +:1001F0005DC57BF42DC8CFF2C7338C8B31F0377DD2 +:10020000C3CA258CE8BA41BD1DE9E46C8C8EFBB4F1 +:10021000E962FC19328F4F09C71BF21DE2F77331F7 +:10022000DEC93B635AC743FB18C6BF11E31699E208 +:10023000A6F83D63DE061DD44935419C8F5F62FA06 +:100240006F71BF21E65197BC94E13C4E7C1CA3A387 +:10025000FF9FF54AE0FEEE95B7D17EE864A52EC972 +:10026000FD2DF2C0322F643866A29B707A536D6206 +:10027000BD053F187C60D0CF3941FF461ADB4B12D9 +:10028000F4693A8F93F1BB66A1DBABCDE5D0EFD536 +:10029000E94B18F2DF71115F7526DB3101FDA277A2 +:1002A000678B767A4D0EF2BD313EFC79884F04DDC6 +:1002B0003AA29D9E3E808FAF05DDD649203791DE64 +:1002C000EE75101D84EB9163621DE0CF6737E4ADDE +:1002D0000DBFEBF47DFA06872702FA9B5EFFEC6DFB +:1002E000785EF29E8857806133697D34813741574B +:1002F000CF8B719FC7F6343EF001AED7FD0E7E0E58 +:100300002AE8231CBF86DC3F86FB5FE87F337E0242 +:10031000F97D206E863413E0CC10FC932CE23B1B5D +:100320001DD7499526793BB0178F1B490A8B8F6DD6 +:100330002BE7ED3D467CE837F07D30EDB79939DEAF +:10034000B940F463E4CB626C5EF4D35CFB50C771DC +:100350002B35BD79BFD7DED770E175A48F297637ED +:10036000DE47787025B3C4F51688F1978BFA6C6A6E +:100370004287E78BE1FAFDD8323902E56E7DE8F479 +:1003800013BF81FE23BC763A9D8960CD4FFC06F9F0 +:100390006E22A3F10EC49DA37CECE8AC0118275596 +:1003A000EFC99230FE2C458C67F4FB4091AD1CCF19 +:1003B000B30FC45D97361BCA378D9B2CCD36CD331A +:1003C0005989A3F848C06F5A9528AF82F27DE33F60 +:1003D000C8257D32455B8EF1A4CED14CC3254F6834 +:1003E0008BFF8CC0FA386E95094F09A37979E384A5 +:1003F000B2B439D0AE7EF4AAA1D86ED3387B444FC4 +:1004000098EF03E5FE22D9449750EEC77DFEDA91BE +:100410004059004744FA80E518D216A1AC3884FA56 +:10042000971533379256A3A3BB64F67B9509383DE5 +:100430003DF9786B75EB39D8E6DE9C2FFFDC9BFB32 +:10044000D55E8AEAFE4D4F94D7A36D1A8E4F7C8FEE +:10045000FDF7B4137F6F949A07225D94CA5A31F264 +:1004600055D71C4E179B24D08B85744C24E4BED7E3 +:100470008F7ADAAE2B35289FD5367E7692FF44E808 +:10048000313A32CEB29413DDDFD1CBD0635C7FA89A +:1004900023ED59C26F43FA83DAC1F8F74B5E8F6AD6 +:1004A000927BF02FD203C940D0180709725A1A67FD +:1004B000D2EBEA44EF02948B0F087E8279A699E38F +:1004C000A1EB053D3E90EE9D867630533409CB3747 +:1004D0004A9A948076B2905F46BC3930BA44F68628 +:1004E000A867E8F17557B000EAF175AD7281CFDB0E +:1004F0002EE0658A2F88788E13FACD18DF5EEC2502 +:10050000FD6B1FE95F82E9DD1287C75FC2D863FD1B +:10051000F13C5CB1C8E70727D989B9EF4FD302E8AE +:1005200037DCD12BDE88074D1378B3A1DE75E0569A +:1005300004F195A14DE37AA486215E361AF681C2B4 +:10054000084F8456D3BA383C5ECF4CF20F313D1180 +:10055000649A5AE427BDA24E7CE636F4576D6CB31C +:100560002F3C76844FE272D25E6E2779FB2B814F4F +:10057000FBC867484E86CFDFD02FC67A86D3413B73 +:100580003D1096BF6F9C3D0DC77B10D687EC9AD56A +:10059000A9077B0E26534ED8C7F55B66031E36B9F6 +:1005A0006C1809C1D68D7E9D21BFDD9D2A73190D62 +:1005B0009640AB1F0FE59314E4F795041DAF5CF272 +:1005C000E118BCE7B3769C4DA33AACC99308E5F7B4 +:1005D0006CB533B47795F88941B4BF238B1C1AEA04 +:1005E000D7EB7BF3F8B4FBC66C2CC776D1FD6D441A +:1005F000959BBCEFC5205FEE177A71D8A9A6D238BB +:10060000284F1CAD0D403E33BE0F3D1994F17B4287 +:1006100039FF3E7C4C3D3AE920EF27FD775FC99BCF +:100620006386A09F2E4F718BF9AE9371BE5730DA5F +:10063000E7C58D0C6AA5D03E3E9D8FEB19192C1F86 +:1006400082F95B652641FDE88F934A508E0C97E254 +:10065000F9BCF03F227E197D6FB5AA915F32A12AC5 +:100660005DC4A383BE3DFDF8B207F0BE583CFA4D11 +:100670000AA9BE46F4C88E8CA2BC0F70027AE9B0FB +:10068000DA4476C561E08595D0F853B43706A19D6C +:100690005C918AF08F49F42B58DF5ECAD876EC5C07 +:1006A0007E97EAAB03F52CB31DF2A9E0B356BB84E9 +:1006B000BDAEA7A35FDB63D7510ED49758F58891E1 +:1006C0004617DA2DFE9FC83C6BDED9D39A57D3ADBF +:1006D000F9D1425E1E885B41F87608BDF860583C4F +:1006E00062B4909B46BADFAEDF8A70EC8F8C4159C2 +:1006F00004792E07FC9F28421EBA8B2798E4CC521F +:10070000216F518FE33886FE3EB6ECC4BDA8CFEA18 +:10071000BDBACD2CFF0D7DD5991E2FECC5E7312636 +:10072000D157D3D1FD963CD1BE76C5327622BBEDF2 +:10073000BB2CFA1B74C4578BF11A6ABA4E7AD228B2 +:10074000CFEACDD7E1D1BE9EACDE66B977A08FE40B +:10075000CA37F7CFF54042B4CF83F1656CEAF84B66 +:10076000ECD3795C9261D78497CF1578F55CC22E73 +:100770002911F52ED72E5925E0B9945D5222EAAD04 +:1007800015E9E5DA25A572F37917DA1FDD6DC48F57 +:100790006BD33732B33D76AF98EFB45E8CF72BE274 +:1007A000AA3AEB377C3F3CB177B4257EE852ED8D19 +:1007B000FDEF77623C97FB5127DA9D1BDD36867C87 +:1007C000F4EE352F69983FEF56C8A97E8C79223A0E +:1007D000BAE7E60CC9CC93087C8BFB68485FEFA5B1 +:1007E000D3FA39F57A86E3DB53B97C3A107715D121 +:1007F0007362AB3DDADD628F1AEB157E5FCB48DDAD +:10080000A2BCA437A3FECB1DBEA9A4AFA60EB0D038 +:10081000534E983D6AE0DF90A32F9C7DEF9E7EB003 +:100820000EC913B91C8DEEAD5BE82479A2BB18E7A5 +:100830007DD537FD2270BF51760DA79BF0F918F6D4 +:100840006981C09F319FF07AC305FD1BF3BEEA9B0F +:10085000734EB40BCA86DA284E32BCBE415F46FDE9 +:1008600063A16117906E6293B81E8A9D587388F2D7 +:100870003D19C979B588DB6FA5DD6F7646E671BA9B +:100880009A1F8D74E4A0F6063D5DD9491C796E8EE1 +:10089000ADD5BE93C9BE631AF2B983B91B511F30DF +:1008A000258EF8C0DFC74B7601C86BBD12FAEFD5B5 +:1008B00066DF4D35FB29D65DA1939FC2A4AFED66DF +:1008C000FF446776DD9EDE867DC2ED1AD5C36C6877 +:1008D000A785DB49863D00F69B474D6A6F27A9C275 +:1008E0004EC23F75B0C9AE623EBF22EC15AC0FF3ED +:1008F0008D403B6BED189B7B15C0B716EDA9A43658 +:100900007B8A291EB2BF638B53C89F74B70476538A +:100910000FDE0FE229FE4824E9F9FFB4DDF28CD89E +:10092000EF82FD44E399F717E6FD8771DF2A518CCA +:10093000D938A586E1B9A163743DC3F8F5849EFC5E +:10094000DE56FD370F04AFC27DC3E8F13D5741FFCE +:10095000FB6C3CAE3562B44DC2FA9A472BF671FC83 +:10096000A621BDEFFB2A326DAE894EF68DF860E010 +:100970006C68BF2EDB4EF799D7093F8EFF4B7E0F79 +:10098000ADB447AF34DD543F5ED0D303137D1EF4C6 +:100990001FAF73A5D0BECA28CFCCE1F47DDFB8C9A4 +:1009A000649FBD14D5AA4FB9FDB09AFBC1DAC92D19 +:1009B000C1170E818F4D636C114EDA3F8DE0FBA79E +:1009C000DE11443FF54A9C84E33A3C1CFEC609FA1A +:1009D00034A4E3CA227E5D13E48EFD2628FF67EF70 +:1009E00048EE77D00C7B9D9112BDAF2465DB7A93E6 +:1009F0001F3C42CCB75E6A49C5F5785035EC5AF7D2 +:100A000061DC8F3D98DC7300D2C77D576C9E8AF6FF +:100A1000B07A573EE949A3DDAA6C9F3307E6757C9F +:100A2000C4E42DB3E1BB9CD52B13E17EA617E7EF01 +:100A3000BF6B4C4139FB7710B22B25ECDFDB8447D1 +:100A4000D5EA959FFF78A64EEDB5B0F637223D1B4F +:100A5000EDC7677B1373905EAE994C76D40313F5A4 +:100A6000349C875DB71329624400E6378E6203CC5D +:100A7000FEA853429E66E6F07EEE1BB72615E7758C +:100A8000BA3797DFF548EFC867621FB3D1B526754F +:100A900026EE9F4672B963D825B02FA5B882FB26F3 +:100AA000F5A2F8045C4FF43F9C12EB75BA37973F00 +:100AB0000F783E4B9DC3907E74A26B631C83AFE2A4 +:100AC00019A7F7385C5F137D3FC08C3F7D6F0BD259 +:100AD0006186D61FF1FD88A12F268AFDB2238ED60E +:100AE0006FD3286F00CFFF914FE6D0FC3E27BC3478 +:100AF0004EF112BD270BFE8828E7EBCD26DA03D98D +:100B00002E339F8CC8263E013EF0119F644948DF7A +:100B1000C67C13CA9B9F46BF41636F3BED83AF9476 +:100B2000393C976B07785E8AE0F7E9DC7622C8D417 +:100B300024CDF638E68FC8812C18B7E4A5088F2895 +:100B4000DF6E3E8FD920E46CED0AC682BD59ABDD65 +:100B50004331213D18F93C8D7EB19F1161FDAC59A7 +:100B6000E16441475B3F467B45F8C1C2DB9762FBCE +:100B7000C2B6F6EB5668346E787B7B27E38F0C1B8E +:100B80007FFD8A54D19EC3EBFFABCCED5FD18FA329 +:100B900093798C0A9B87126D3DD70F9F8FB3937EFD +:100BA000CAC2FA71A45AE301C2FB89E804AEABC31E +:100BB000E08AD013BEB79FC84EFA614A30757C7E7A +:100BC000FBF535DA4509388CF306A35E548E354EB5 +:100BD000E138496EC61ECEF16ECAE1E74005E47702 +:100BE00058CEDF27A8B03566E3FB0315AB829486A9 +:100BF000D36339ECE99AB8FF3805E5A6AB66581C13 +:100C0000EA81F31B06C5E1FED217CBCB25C537041D +:100C1000F3E5FF9C35C48EB0BC1DC370FD6EE8C10A +:100C2000668C87EF33243E8F1B6AAF29C7FDFC1308 +:100C300039DC3E7A7505BE9980F7CE9DCC03F4F77A +:100C400006D011E6FF0AF480F9B756E894FE6D4528 +:100C50000EA527EDDC4EBB41BC6F80F7CE703EBBCE +:100C6000845ED99563F8896F4DC5789CF27FBE315B +:100C700008EFED26F9A74D1C057BDD66F14EC87522 +:100C80001EEB7DCCA913ADF72D2BBDC32DE52C6735 +:100C9000605B9EFC308CF4D1CC75F1DBD11E9E36AE +:100CA0003AD1527FF2BA6E96FCA11C2E1FC695F760 +:100CB000B07CBFBE22D792AF0C814582E7F07AAA02 +:100CC000CD0FFD5FF8934AF7F32ED40CE9721BCFDA +:100CD000933E0FC7FB49E37ECC9B826FE03BAEC3E4 +:100CE000C5A31964AF97FF13F6F1B82EBFE27EE3F8 +:100CF000595B24E647E3A0C54F7175B76E73B8B171 +:100D0000DEEC2D32F30DC4D94804DFE9D7B2B7AF1A +:100D1000A775F4FF0CEBB5403D3CC7B0456DA07620 +:100D20001F45301DEF47CE6A16FD490328CEFFDD73 +:100D3000256B3371BC8529500EF6D2C763EAE7DA1A +:100D4000500ECA7F4AC673B08F77CB14D7386FC99D +:100D50005F076B80CFF9071BDE2C827E4FD6CB4C12 +:100D60008371CFEC746CE3F16C9E2EE81F6B8337BC +:100D700040F17E93B3BC9FA0DE3B3D375040F1492C +:100D8000CB93899E3BC0CBDCB7102FB658FD3148C2 +:100D900097CE724F46B896DEA7C6FB2533BD8BFBB8 +:100DA0002EA21F3F2B4CC37B0D2737A874BF0FF813 +:100DB000662C9D7BD427DAB83F7137D1D74C45B725 +:100DC000E3F83337C8644F18EF24187CC9EE977DD9 +:100DD000B0E762FE75920FEF59B890C860FC5B32C5 +:100DE00022695D6F5932A40BC263DC730ED70B9F6F +:100DF00000CFF84CF737E6BFC8EF4FB142CD867150 +:100E0000F7639B463D86F3F9EC508F38B45F3F3A69 +:100E10003241E578E3718FF36A1B0BF01DA2336357 +:100E2000FC1F2890DEEBF0A5F401104FA5356CC631 +:100E3000FB07E7F6FE3C13DFF169C6771F4CFB7B2F +:100E40005FAB9FD2FAEE83621B91DE6790E9BD072C +:100E500071EF9A2981C71F417BF9ED2E64EFB4D75A +:100E60006F2B393E8CFA20F2F83DB1608A0478F499 +:100E7000E98CEE654E670D22DE8CE34FC74502FC20 +:100E800069D512DD53996573DFF806DA81AB6234F8 +:100E90005C4FA3FF1382AF07F4E1FC6FC8BD45228E +:100EA0003FCB386FDAC7ED47BCCF8AFEBE2A02912E +:100EB000EEC9D991BF8CFBAC257D12841C69B1DFD2 +:100EC0009684F78EEDF4EECA5CF4D243BE7AA72383 +:100ED0001080F55BDE47A77AF3ED4F6E1E80D55D7F +:100EE00035744F6FDE1E893D2261FD6D6514AFCBF9 +:100EF000584DA03FDE570D9435417EA1AED404D1AC +:100F00009316E0F75A9D205050AEF859604D02F408 +:100F10003F479C8BB39D506E923B0B1BACF7601709 +:100F2000E3FD57CBB98F770DFACF67A3FF5CA3F72B +:100F30003FACF7DDEA553A2732EEE57AA362282E78 +:100F400072FE261EFFD1361F997D07389BEB0B1CC6 +:100F50001C4BF04AEE006B3F9F9B70BCA436782E72 +:100F600035BFF0F9CC757339535D2F05021DCCCF19 +:100F7000C06F5C31D3516E2CD82191BF7A54D212FC +:100F8000C2F37CC07322F43BD7EF8D9D5288F70CDF +:100F90005910DF7D007453F9E2AD7C1D00B1AFF74D +:100FA0004C695BEFF7935AEC88A7F77DD1357EBC8F +:100FB0002753F305ADFF415867E4FB79BB0276D4B4 +:100FC000AF67587D6C34F04DF596D70E22D9BEBF71 +:100FD000E9E914B4172B1282D9B678DC5FEDDF543F +:100FE0007E451B1DCE0B58E15FB0D39A0FC78F9F74 +:100FF00079497FB5C393734313C68BB55B3F113FEC +:101000008AB632DAF97376C8749E68AA6739FFAB7C +:10101000F2B7D07DA02A80B356C3AF7EA2C7396095 +:10102000A5635CE60F9D6F3B7A932B88DE2EC2FA98 +:10103000CB1DD1DB65CE37DC5FF5AB3E227EC3CD69 +:10104000DFA5C1FB6E53B050D82DE1F225FC1EE1A7 +:10105000BBAA665B05F36A798DDF23BBA068429F5C +:10106000660750A4742677E70ABD3807F520A41F49 +:101070006C793A16D7DB58F79B50BFE4B5E997A5D2 +:10108000B3821948374B9F8D70FB71F8D1C1BFDE19 +:101090000EF98F77C9AC23391872F90EA2FC34F41B +:1010A000E442795BA6867A51C8C54BED0FFE55B870 +:1010B00066225C0351EF73B8DE5BC7E139B181C3CF +:1010C00037BB1D5C7EBA7FB0F4E70E37F67B2A2271 +:1010D000487AFB14C0554BEBCAED868B4EA0A3FE9D +:1010E000640F90BEFF2899EBFB56F86E7EEB9802DA +:1010F000EB3EAF575301DE57ABB8DF41FA7DDE6FF1 +:10110000F9FDA3D3524917B2635F0EC622DEE6EFA4 +:10111000E6786B9B4FABBE3FDBC7ACEF2F135F781E +:1011200058837A7111E3EF122CDADB85DEE5D950B2 +:10113000C21A64BA97D64CF20B4887CE1BD973D625 +:10114000783C07733B9DB83E9DC427A36180EFA305 +:10115000CCC5FA1487F1E98D37137E5A7A115F47AF +:1011600006557C6FA3659744EF0B2DBCB524B68460 +:10117000E1783CBE34AA2FD74FB17DB99C933C3562 +:10118000143FEAD799761FCE6F2B8FA3662FB10637 +:101190003A97DCCAE181BD38C123E91AAB18C0E334 +:1011A000D19DA8DFA26D1DFA478AFB727B7BA16CE3 +:1011B00023BBB9DACEEDE773625FD14D9477EBCB09 +:1011C000FD76AEBE3CFEFB1C6C47E9BED82847004E +:1011D000FD0FA0A616E2FC5E936C14F7FDBBBE3EAD +:1011E000BD2FD45BFD37477610406852F5BA66587C +:1011F000D7D5F173E95EEA8DF005D7776CD1929D72 +:10120000D8EE5857A6C9FCBD132F33C5A3FD457DA5 +:1012100077D4ADE83782BA32EC39A6177D9881F5DC +:10122000B7621EF0702CA261D4ADD8DEA5308C8BD5 +:10123000F7BFE8207B401DD19C41FBB648D8FBF6A8 +:10124000C7F8C5037548570753137334A83F43893C +:10125000748B7B11233F857A4A157FEF82AD6E1E1A +:1012600084EBD38FADD670FD00EA3DDF257E1F3DB8 +:1012700059DF17AAC6776F86314E684584574BBE33 +:10128000DACECBC7F7754DDA940E79DC33201D5CCE +:1012900023531CD2A4A21605DFDD4142B90EE87823 +:1012A0004AF033C583EBEAD11BE2201F3C6C7DDFA3 +:1012B000E83A455711CE740FAB91C97ED247617F92 +:1012C0004773F979B5C472283FB69C25103F3A752B +:1012D00015E1F7964B03D0CEAE5E7579F35DD0374E +:1012E0006FD2A662C8DBF8BD9296DB79DCD28D4A5C +:1012F000838AF14D714C6BF1C37A2C4E68A0F9B41E +:10130000001FE179DC74A599C64FAF6209B85ED5BC +:10131000A01C119E96793CEECAE6E4E5153A94C30A +:10132000FCB6F86C29E8079A67D0A5B19F539AEBF1 +:10133000289E6D2A7F8FAA3F4CCFBC3E8BEDADFB24 +:101340003E1DFB5B006601D65BB0F7D96C7A874B1C +:10135000D26D38FE8F055F2D704607315E90FDDA45 +:10136000CAD70FF565DFCB0F9B44FB4D7DF9BED28D +:10137000DFD7D8573690BE5EB0F7F747711FDB59FD +:10138000FF0B1D2C48F87BD141F04BB6969EE44FE5 +:1013900062F43202F6938DF9B9209F70FE1BFBF2C6 +:1013A000F34E83AEE78AF8461B085FD4A33731BFFC +:1013B0007DA8AB83FBBCAC9EEC94F93BC2EF019BD8 +:1013C000E223658BDCA2B862C9DE321BC797AE8C04 +:1013D00070A33C9F6E6FA0FDBF84F22CA74D9E852D +:1013E000B753EBB9BDA66E90C8FE35FCB20EB0DFA8 +:1013F00050BE57A6B7E4F37714F4327A4F51D8D9D8 +:1014000073F954E07BB5C5CE76D47CF836F9E3B7F2 +:1014100070BB521176F0ACB0F75E2AD799EC4EEA69 +:10142000B685E490BA3C8AF6B78EB077608EDBC69C +:10143000F951AEFBB3147AF7C0E46717768997F1D8 +:10144000F861FE5D11F6E6E37D55CB3D1783FFAFF6 +:10145000C3FBD626B9EA1DC9D89503D08F200590C5 +:101460000EAEF3941CE2E9CA20DDC7514096266017 +:101470003B90BD54EF6E8A5B057EF44761B9473DF2 +:101480006D86E755FC4707F7FEFFD837A6C3733BC9 +:10149000569C7859EF2918EF4B56A01CEED116CF69 +:1014A0005D7198DFDFFE22E29F994720AF4B80906D +:1014B0004CC66E8B3CF68A0FF2CDDFC631A92BBE2F +:1014C0003FF6CA4F31DEB862A542EB5C11BB94E235 +:1014D00091830E27D9C9FE11C19F527CB2DD49F715 +:1014E000951E42E00A118E18DEBFAD99C69DC19AC5 +:1014F000CF60DCEFD5494D314816461CF89A9281F1 +:101500005BF0FEF2C55FFD64923383CE6D791C8182 +:101510007FC55FF13C7822FABB28EF9FE4E907FC26 +:10152000F94ACB8D30328BCE5D394901F8CF3DD8A9 +:10153000F233CCF7CCBD87E7EF6DC98CA0FCC64970 +:101540000AE0F3DC4AD11FDB3809FB3BF730CF7FE1 +:10155000D577E3248C03AC10EF97550C93E8FDB2DC +:101560006FC57EC3F08755D85EE2E9081644BBE13B +:1015700052F50A72BDDFA29D22C79CA4B88DFC7CE7 +:10158000CFB7B8DF96FB78D55CA4AB238194641801 +:101590006FBE8D35A1FE1C2BF6D96B6DD6F72DBF16 +:1015A000EDC3E58E9126E479A91F036FD05FDCBF00 +:1015B000D3DFB65C6B7F861D3347F03DF4DFEDDF94 +:1015C000E9DF9023467F0BF2385E4CF3EFFDEFF43A +:1015D000FF8F307C18F6AE01473EF22AD0DD7194C1 +:1015E000CDA6F918DFEBA460F214940F87653ABF1B +:1015F000AC4B4EB1FD16C7FF5322DD0F3C5F3324C9 +:10160000CE86FECC5C2EF7EBEEE4FE85BA953C6E02 +:10161000FECC93430623692D12E7DB671AFF66C7EA +:101620007770168B73EE457B1AED6579F8CE47A37C +:10163000BDD464AF56B7FA559A157C27B32EF9037B +:10164000A592C6B109B9B3F27BE31B26E71A7A88E3 +:10165000C35920E0B9A1C0735DAE094EE3BBF12EC2 +:1016600072783F8F887EFAE5324B7FFD24BE5E158F +:10167000915C1F0E3AE29EFB06EDAB0B6C78AE3927 +:10168000F8688D1DF5766E9F1137E40E6A1BCF68E2 +:10169000D7E62F6EB1FA8BF7727FB1318E5BCCAF8C +:1016A00022A1E9568CBB7EE489671E745E41F11766 +:1016B000ADEF24A2ABACDC61E4FF3C69643AF763B4 +:1016C00062FECE270E3E88714587229B7EFC06EA8D +:1016D000D9BB63D876E0FB1B86C464EE2EC4F8EA5F +:1016E0003889811D53E288E985E7D1F7E7943C42C8 +:1016F000F4C618D9E5F7E77897E2FC9B5D513630E0 +:101700000299CFCEE9C1F70799DE9DF11544F9D0D2 +:101710009F77C8C646B28436BCDD2AD6E911C4DB41 +:10172000201C9FBF43027F99BBD13FB8AABB8474E2 +:101730006C8CFB704EC9C3B983DAC67D38C7BB4613 +:10174000CC43D48FA3F78D3A1B3F7CDD6A73B97D00 +:10175000FEB018DF5B0CF467D293E3474659F213EF +:101760004727328FD92F3DB19B253FB5A287A5FED4 +:10177000F5B3732DE5631C4D8566BBC058B7CBDD53 +:101780007F3535FA92920B29CEB205F90BD66BCF85 +:10179000384C3777D3D01FB160DD35E4EF8E0B4D79 +:1017A000A7B4BAFE1A3AB45E189A40F945A128CAFD +:1017B000BF2A3795D1BEE85989CE15A09F0BF8FEF8 +:1017C000CCA184010CFB59B46757E1116E5F79B36A +:1017D000A1FF31F2EB85A887C674D76CB5F85E56C9 +:1017E0002882FA691AF14E21F6538E320EBE57EF57 +:1017F0001E3A15E9A7A4364643FAEE8C5F1A73B970 +:101800009DAA36F3F98E0A8DA3FE8CF2DFE76659A6 +:10181000EC05357987827C62C0A1364B94FE289412 +:101820004BE9E23DE3143C37FC43CECF93504F40AD +:10183000FD684C5DDEE19C5F40FEB0E8CEF1EB1050 +:101840007267BAB89FF2A77CCFBB48676397372B04 +:101850004EC443B45DC37DE0D8A2FEA9734DFDD450 +:10186000364E6328A71C49CC8EFA703AA4A5A672FE +:101870005F27F135EF85C927434EB30BBFC0B71DB6 +:10188000D98D3C26B2952E5ECDB5C65735495CCF75 +:10189000FA7FCBCF1FDECFF75D443E682A615377D6 +:1018A00093BC68CAC4F891FFD4FCA1675AE7B11A87 +:1018B000DF1FC42ACD0CEFCD7CD50A07A7CF4BC1C3 +:1018C000F1A1A8FFAACC96215DBC7AD5554DB8AF41 +:1018D00069BC63E0403CC787EDD037E467DC37BCC8 +:1018E00007DAA11837C8E3E918D94186FD8FEF0C54 +:1018F000A07F64F13EC77609EA2D8E6DE985F2F589 +:10190000D1025F641E9E83EDFFF218DE87F644C7A6 +:10191000507CE5E27D112F63FE4A99C26FC1AEF0A3 +:1019200044E525773ECF4BF1A1CBBB2009F5EC79FF +:101930009812BEAF75BEE6AD3DE330DD14854F4F66 +:1019400033DF3ACE773EC17F95826E670AFEAB5495 +:101950001A88BF66608036CC6BE672291FEFA9C378 +:101960006250FCB88AF43810E992D36375285EF0AF +:10197000B14BF4C3E93E9C2F178512A99EC19F7AF3 +:10198000816F68DE20BE7ECB60BC1F6936BAA7E3DC +:101990005B955688FC7169FAF852C17B576AB1A40D +:1019A000227D38202D35F1B3B72DFEBA2C05F5FD7B +:1019B0006A97CD1CF77065DE0FA3F3DC3C2E8F67B2 +:1019C00046839E243F522C43FF5C45B24E7ED69BFD +:1019D000EF96F0D087DDAC06B3D18F73F39208F2A7 +:1019E000A7CD3D52B326466FBF5ED342054C073CA0 +:1019F0004D08F5A434B78F6F34AE7B6568B2C06311 +:101A0000C1659D0F0EF270FF9D1A70B8B7B9D07FF7 +:101A1000E793911F4E6530ED01F2E3F072C37F87CB +:101A20007E41F40FB69DFFF95BFD79C83F8E249B84 +:101A3000E59CB29D5FAF84EBAFB33B54FE6E5BE3BE +:101A4000EB836D507EDAE521FFDEE42CDF1C84633E +:101A5000FEF8C0532ADA83F73E1D3B546FC36383FD +:101A600012CC46BF56430DC74FC30699EE55C05F13 +:101A7000D438F33D46613F1C66DCDE08A7EBF9A1D4 +:101A80001E841F43AF18F2FAD915A9B45935E4F6EC +:101A9000A5F4CD42A569CF6B809F859BE2343FBD05 +:101AA00023F7DA057CD70F1F78C3AB43C03F245F11 +:101AB000CEA7331B33E99731F2EEC223A47F346FF4 +:101AC0002DEA99D2E1C5B41F0E93D7A777BE41ED99 +:101AD000F10C0EF5D08827BE7EFA6DE85E5583BD09 +:101AE000F0FDBA1F29316E3F6B4F1F861E36E0375F +:101AF000F0F10791BF27DFF353C4F3A5F92482EC7B +:101B000055877F1C23390AA9598EAA6176AAF17DCF +:101B1000FB0FE48F7AC11FC6BC8D7936D90DBB8906 +:101B2000CFFF8F8CDB15C638EFE78FFF1DC901D0C3 +:101B30000B38FEBE3CAE7FFF737075AC1FF689F9A3 +:101B40005EAE7E7822CFBADF31E030E0FA9380F7E4 +:101B500072F5C71B79FC3DA270FD01F53EC0F7E0B0 +:101B6000CEBDD8474379254B2D1F903FE9C5081DB1 +:101B7000F1F0EAFE08AAEF71C6915FBD74FF87E736 +:101B8000F11DE41B0A26BC81F4E0D9EB5098C98E04 +:101B900033E665CCF3CF62DEA0678EE699D6CBF84C +:101BA000FEAFEA9DB271BB881FE0CF7BDD9560DFA1 +:101BB000DFD3447A873D14A5A15F269C5FC3F93427 +:101BC0009C2FC1EE23B97AE899783A8730F8379C90 +:101BD0003F5DDE7748CF207FA27C3B5FE3C8C7F73D +:101BE0006BCEEB5CBF8E41FF27F2696E3CFDBECC35 +:101BF00001B9E1816112BEA7C8EDC311C23E0CD785 +:101C00006B35F9DEC87C80EBAA27320A11BF97A694 +:101C1000C7DFA9A48FAA25B2571C909AF591AF13DC +:101C20003E8BCBFF617CF66D5EAB9DC2EDAC383B6D +:101C3000D95997A23757FE7F9CDE5CF9267AEBCC08 +:101C40009EEE95CFF919E8AD57FEA07F9DBE5CDEF4 +:101C50001788BE40FE7B711F75ED1FDD71A807114F +:101C60001118470FF45288EFF91C1A9CE146BFCDBA +:101C7000B5DFF1FD08E824DA8F84EF07A60B39ED14 +:101C800013FBF86B0ABCD7E47379F06B84B7A447F5 +:101C9000547FD4B7976BA74E4FAAA178421FA46672 +:101CA0003964DC0F095FF7B13F70DD8BF37F987DFE +:101CB0007A63FE0FB64FABF22FC33E75799C134883 +:101CC0001F0615B6DE75E9FD8BBC85E3B7155F41D0 +:101CD000C5D0F789A8EF812EE6E5FF1BF6EE98D276 +:101CE000860B4E58CFB5F9C1C9E8179C8CB126E4D4 +:101CF0004768DCECE989728819E71FE46720BEA118 +:101D0000FC4B6F8E84795CFB006B3B1F81F251C5ED +:101D100071AD7E0989B5D55F93BFFFCD0D346FFEE0 +:101D20008E38F3352BFC9C50E40B211F63CA1785BA +:101D3000E5B7F2FAA87FCCEF91B7E927C6F8EF72C2 +:101D4000F88D7894B278B45BF748F4BEF3F5C5E744 +:101D5000ECE8571953DA7CB01BD47B38FFF0E46809 +:101D600060CDEBF74834DF5F3ED9B4D9AF50689B04 +:101D70004786FEAA8BA400F9CB1B1ACB3C1DF0E5CD +:101D80002FF3ADFB23FCC3DFDDA816E87734480C46 +:101D9000DFEDC67E304EF172DAE3FA51FB2C6A1F9A +:101DA00074245D7EFB29C53C7E37BCDEB3463D1105 +:101DB0000F49FDC39A4C68903AFC3D92FDF95CAF27 +:101DC00037D96C0BD15EFBFD932737A3BF6914E3B2 +:101DD0007471F8C91393FDDC8FC33C61F07EDF7C26 +:101DE0009FCCB7DA0BF8A75BDB07BF0F5F4FB76B72 +:101DF0002FD6BFCA4A27718AF7E5F3308FB8244936 +:101E000043FB7A91376203FE58CE985241D7FE4F7A +:101E1000267B8A01BE0866F19FB5D2B5FFDC64A4BB +:101E2000EB45CCA8FFE9665C7FAF8D59EEF18DDA0A +:101E30002BB5B6CF51E8F778A8FD89275B36237E0E +:101E4000603DA89CF2CAF7D0794358BE388C2F1851 +:101E5000CF135FA23C2EE2BFFB128E9F7F0AFC7C59 +:101E60002CEE79348DE0766393F8FDA68C02EEC7F4 +:101E7000540B383DC414887536FDDE0A4B6F5B6722 +:101E8000267E8FC50437E1695A9280DB1F3B65349B +:101E9000C887A604962F019D74792AF2A1D519D876 +:101EA000DEABE03985E28F7EE84F204FA609BC64A7 +:101EB0003C15F316E205436B90BF1616F1F365C7A8 +:101EC0009ED73AE4AFD3EDE9C58FF7411612E16032 +:101ED0003B89EE25633F591DE0A3A53D7F79C2DA1A +:101EE0003335E987B417EB313A6CBDCAC3D66B649E +:101EF00058BEC29A8F55B8BC8A454480BD35F3B9E7 +:101F0000FBEB5292309E48A237D7401EDBF15DFDBD +:101F10000105A953A287225DEA6A37A83BB8A0EB66 +:101F20005B4EA0D97128AF48DE767B08E5F304E468 +:101F30006BCAA74FC1739FC9453575A950BFB8205B +:101F4000E321FCFDC2EB57DFAFD28FED15747F4864 +:101F500081759A56F89B83D89F22B9DE1A2D7D0F82 +:101F60005DD687C1B1352CEF0FABBFE912F27B759F +:101F700058FBE561E51BC2F25BC2F2EBACED2B67EF +:101F8000F3F3D54A583F44DCA5F863BCA0F757E506 +:101F900086423C079BF654FE4375D0E6DA5A4EDF84 +:101FA000D30B0AA698E95315F27F7A92D7D3117D05 +:101FB0008E2DE8843E72C2F5142FBF2A2A3F0EE709 +:101FC000777210D3915F4E46E87174AFF830D85FE6 +:101FD000B80ECEA635C5585E5244BF7781EFB58F97 +:101FE00031C55DBE7CBF83E09BB3879F478E8CFA73 +:101FF00069595A129D17B738282EEFA1B2B4C2B64C +:10200000DFC798FB2EC7C7DCBD52007F3A6C5E204D +:10201000ECBD7179834C7E8DAD3C2EF0A62DEDDFAD +:1020200061C77361FC9D86F53C5EB15D39C67BD6A8 +:10203000FECEAE6179F8FBECC7F11F1DBC93ED2F0E +:10204000B0C6AB19F1B4C679ADAF93785AD3EFA847 +:10205000AD2D18648AAB15716E4C0926635C63ED77 +:10206000E144BA9FB3DFC69C45A6F308C34E3CBB10 +:10207000C247EF947EB2A28A52A3FD39A9D1DE0DE8 +:10208000EDBCF7F9EF9B0DDBB3EB9EE13AD6AF2148 +:1020900023F493B385C5E887FE64C53271982FE2B7 +:1020A000A045FCED157B1A65FCBD9D4F9E3B11457F +:1020B000FE693C2C403BEFAC427474BEE68B03DF00 +:1020C00051DE46FB00170B1DF80EC6BB25268ECA37 +:1020D0006F59C2DF17BBE5DB482A37F077FA76463F +:1020E000F1FCC63C1B9F48DC3B0CF72D51711AA23A +:1020F000ED26E1873ABD53A6F6A79C718F8F463F28 +:10210000D6D6092978497F8EDA6277C37CDC2F8E98 +:10211000A3DF63791FEA05C98F1C90D11E1A56CE22 +:10212000C81E1D06F6A8EEC22DA2772CD2C5D0E798 +:10213000A01EE4CF04F9EF6E32616FCEF99D4CF72B +:10214000383FDCFA34D5FB6847723C8EF7C98EBF46 +:10215000A6A05F6B3ED31AF1FCF798E08F5320D70F +:10216000B0FFF940B71150EFA39D9C6FE7035DD21C +:102170001D93303A2FDDB992E86A7EAACC90AEE783 +:102180007BF87B54F3F17705744437A74327FC0FA2 +:10219000E310E2059D2E003AC5B8DA053B3BA6D315 +:1021A000EAE7389D86D37138DD86D3EB9B06BD0EFA +:1021B00060037E487C65F87BB8090DFD4BE8F79815 +:1021C0005AE5853715E5C431FC27D91D03A7E2FA86 +:1021D0001C68B5AFB9BE6D94B97CFAE0A9814757C8 +:1021E000135F703FC446718E68DC43C473D05D1DBD +:1021F000D87F57BBB9DE3FF0357FC7C5DFDD4E7EE8 +:10220000E80371FC9ED7DABBA7D03D2FA37E63778E +:10221000FB327E0F6C45EA1C93DC3BD03DE51B3C5A +:10222000CF3DD085BFBF72E08E81DFE03D32FF62DF +:10223000FE7B35C7969D3883EFFDBC131AA699EF38 +:10224000D5ABD53CDE5F4D6A8899639ADF81C503C3 +:10225000899F0C782E8AF3B277D2976A48978DDDE2 +:102260006F6DC2F7A9FC5D149AAFE3CB0A0D7FF73F +:10227000A654DCBF8DEBC7E5B91AF331DDE7AF4DEE +:10228000C21F32C1EF7CBF5C973ED949BF1793C4D0 +:10229000DF9D51636ED0EC26783C490A9F978BFFF7 +:1022A0000EB0F17D95E8B7B21FDFEFBF246B0437A6 +:1022B000CC43C3F3EF195F571C6D8271D4CCC13A84 +:1022C000065B1DECD783EA1DB769C518BF71A5EC85 +:1022D0002E64267FD1341B872BFC5D33FC3D41A44B +:1022E000DB5A177FBFC5F42E91E5FD96CEDE217334 +:1022F000F773F17B9CF88B943DF8F7D677BF64BAFF +:10230000974B769F83F1FBB8F85E0BC65339929CCE +:102310009E88587A0F69A49A40EF8979518EAA193C +:102320006CD178A2AF06FA1DB02BFA49AD763AF619 +:102330006BBCCFD4BCEA855125386F89E9896ED34F +:10234000BB5B5DEC63711F6BE48DF1A78B7166C89D +:10235000FC3E32FE3021DE0B6EF70E16731FC5FBFE +:10236000270E7F940DF76B63C43AE29FF91DAEE62A +:10237000CC9A20D66BB6317DB7E9DDB13A118FE644 +:1023800088E6EFA634AFBA83EE97D556327A7FABA4 +:10239000CE38575B28EE3588F7548C77C9A627D9F5 +:1023A000E9DDB5E9D0DE5560F23FFCC0F7BA2E7525 +:1023B0002FD9F0171A74711C6C3684B3B17BCA72B2 +:1023C000E2A72E4EA2F7B5191FD0BB4AEA5DC3DDC6 +:1023D000E89F68E5CF2EA9C578FFB27171E2F216C9 +:1023E000137FBC533D419B857ED9AFA2E97DEF2B86 +:1023F000BF4E5F8EEB74DC7E95851FF7DD75E6FCC6 +:10240000B34998C6D03DE47D5F0DD329CEC4D64CE8 +:10241000F2817D1549745E1A3735D57C1FF97641F6 +:102420000FE3B33DB7F583F9CA2940FFD16D724C74 +:102430004D29F4219FAC8DA69BE26CAD88CBA8956D +:10244000ACEF3E1C14FC7550ACEFC17E3C7E96296F +:102450003ABD5369DCAF6FECAE2C33EF4F378BFADC +:102460009B45FBC6EE4B8F569AF0D5E8D8FFE7C1E7 +:1024700088AF94896EBA4F8AF22E097F7730CA8D61 +:10248000703676E1FAB8B18B9D7EBFB871B1CCEFF2 +:102490005FC739C95E34EEBDAA5F56903C3CD84F49 +:1024A000B7DC176CEC9244787F49AE39CAE581936A +:1024B000DE357BA73AF11B9453AA1A47F7FD8FDB51 +:1024C0005A0621FF1DECC7EFC5D4496E9D99FCDC6F +:1024D000D7B7C9832DA8270D79E0C07B0C05167AE4 +:1024E000B25FCE7B84BB841C30DE75FB57E500FEFB +:1024F000A9A677D80ED91B46215C2DC0E7BB91CF8A +:10250000C3DA1B7CFDBFCD27D787F1C94BB8B8888C +:10251000FFB5FC1D4335F9B918B3FFEC2D41278DEC +:1025200051715C8F2D4EFC06E9C2B1BA3285E9E6E5 +:102530007A32979F4EE35D80AB887E2BA327ABE476 +:102540000F047A9C04F4F8663F85EAD5C6F37DB59E +:102550006A6BC947785665FBDE413E784FDC636F96 +:10256000BB7F1E2F61FCB7317F43AF19EBFFB9C8AA +:10257000AF5CF27B1E0F5ACDEF13BD2735BC42EF87 +:10258000D50D7590BFDF7867C9880755EF5C48F1B6 +:10259000A06BF15D25588FB54973CB12517F6FB594 +:1025A00033FEBB39FC9DA559A2FEFB20DEF09DD178 +:1025B0003E6E1E6FE13BA595C5EA88AF537FC67797 +:1025C0002F1CB7CBF4CED9FE7FF2DF6BBEE2027FC9 +:1025D00017C9B7DA65799FC67756A1DF25AB641AAC +:1025E000FD9ED3F1D865E52B51AE0ADDF09EE40DDA +:1025F000FA0AE93D27F2230FCF289C8AEF240E5FC9 +:10260000994EFC748C358DC1F791FC9B54E2975A1E +:10261000B586EBF57B1329FF7F0194DA682A0080E9 +:10262000000000001F8B080000000000000BD57D9B +:102630006B6054D5B5F03EE7CC2BC92419928003CA +:10264000463C0921061CF090849090002781407838 +:10265000D9E121061A6040AAA8A823C54B6CA99904 +:10266000900422448914945A4A07146A153020F6BB +:1026700062AB76004554D0888FDA8A36A0456DED7E +:102680006D04A9F47EF6F2ADB5F63E99398749C0DE +:10269000F67E3F3E1077F6D9EFB5D77BAFBDA36787 +:1026A000B41FCB2A644C5FA6308931F65DD792F116 +:1026B0000CF2CCE7919C258C25683263BDE1BB2DE3 +:1026C000E060198CB918F334F465EC557B7B25E692 +:1026D0005F5DC058FD30680FFFB5F9183B22331B12 +:1026E000CB676C6A3A9BEF877CAA68CF14DEEF77E2 +:1026F0000BD46CA5176317F0CF18C69C9BEC9F7486 +:1027000040A7F8E702FC6BF889E495AE636CD1064C +:10271000CB773BABC6FE1784CCDFBFDB62CEE7E3F3 +:1027200078C371BC9AD4803B3A8E35AD3DF1D6D09A +:1027300097F2A2ED0668EE8CD3D7C20F23D8880B90 +:10274000CAA5DB7F5DD73EF4253B8EC7687D59DA8D +:102750000F3D12C0E36CA68DAD01409E0D2E774952 +:10276000859887F964E1281DC9FE2117F7D3510721 +:10277000807332F6F7EB783F12B3E9A7615E7F878B +:102780003E2E0C60EC90C26A71DDA72456BD07E6B0 +:10279000F35B87BA0CE1FEDBC4ABA4106E186B4B85 +:1027A0009F96CC58B980F36F1D6C31D6674C2B9B2C +:1027B00001E3FD5686BC1BCB1582CB6FBEC82FC371 +:1027C00075BD783EBF6CA12F3A8F434AC753236033 +:1027D000BEA154996D47783356F54C9CF5FF75288A +:1027E000EFC798E77A9C27C20BF3B00F3F16F3367A +:1027F000F6DFDA7E9E2651FB8EBA5AF6F1C0E8F774 +:1028000000E20F8C37FC9D404332ACCF9EA9E62BF3 +:102810006AB4FCA7832B6669C3A378C60ECD66593C +:10282000B03EB6A280B1BED82FDFF740061BAF4343 +:102830003FCCEBF74E4F8EB6CFBF5636CDDB982749 +:10284000637E2FEECB47F8E348F8172AA8D67D041D +:10285000779EC721615D0730DF0FFA79AAE0FD4658 +:102860007774BD0F89F5EBACF3D005A41BB71CDE64 +:102870000EDF6A64360EE9C018FF87627FC627CB79 +:10288000FE30F45F931819B814D2C98FB020AEA7E8 +:10289000CAC9E64F837E6BD2F8F7683B89DA4D5E92 +:1028A000C7EB4D6EE029F6B3D51D2DAFA9E0ED8C39 +:1028B000BCB14E637EF9D77A385DAC4867ACE4E2D0 +:1028C000F9872A585E10FA6B70047FDE8178B0D2E7 +:1028D000C6B667E0F7E02F3A305DE9F43440FA48D5 +:1028E000D27D545E6B73799C80FBCB15CFCBC838FF +:1028F000FEA665D1B85FCBAA5D821F6764748C4366 +:10290000F454C6CABA9C8108E50C6FCFBA181F36BA +:10291000887D1B0C3C04D33D9A87FAB1B320106527 +:102920003405B673951FF6735A52DA3915AA6CD569 +:10293000BE536D83754C2B4DBB6700CCE3C9B61BF2 +:10294000AA6D8007D30AD29ECD86FC4E6D26CF5F3E +:102950009736DC0EF9FAFA59D5E320FF9AA6FF5C08 +:10296000EB1D1DC7E817BE6F43FCBA212BB0035304 +:10297000C63A6F8EC0BCFF26A5686B70FE399D43BA +:10298000114F8C766F49ECA3DF48D17C879DF5D73A +:102990007C9837D6113FFD5AD39FD6E27CC70D39BC +:1029A0000B705D582C85D7009C6497EAA885BC5FA6 +:1029B00073688A46E57E571FC6BE833F015D2C744F +:1029C0007D330EF9008047737A216DB67FD161F0B7 +:1029D000B36CC606B1460FEE2F4077F385F4EEF9DF +:1029E000180CCB4E1BED10C7439DF370DD0D0CD6BC +:1029F0008DF8BCD9C36C388ECC3AD700DF9600F87E +:102A00003580D7D2F3AFFC431A8AAD6A3CC837256C +:102A100016902F601A78FF57881FCBEA810F42BBB0 +:102A2000ACC01F287F0EF0650DAC63E9B31FA6A8EC +:102A300030A95B1139603FBEB83E921B81F51EC9BB +:102A40007AA53FF2A54FEB9896037CE10B47E07720 +:102A5000B84FC63C3FDDDC903212FAFBEB6E459B73 +:102A6000024D972840074887DF28913119D87ED03A +:102A70003684DB177B56672E807DF8A3C0AB2FB260 +:102A8000B8DC60DF1CEAFF43A857953D71F81AC80F +:102A9000BE51B7DFC47FAE17FC0780EB9816C3A703 +:102AA0006D72C59F701E0B6DA2FCF11B68DE13DDFD +:102AB000419DE464B59AB61AF0B02687D39DD3E65B +:102AC000A7EF5EC439A2B356BEBFEAF7E9FBAA5B23 +:102AD0009967CD30BE9FAC28BA9FBA76611C965FCD +:102AE0000FFB8970925D9D36CCFBAB80867AE17ED0 +:102AF0006EF69C4E8AEE67A5B2E24184EB5280B33B +:102B000013D6B5540AF2BCDDE50979B0D3F65535D4 +:102B1000F0FD2EDDD5B986F27ACA54186FB1180FC0 +:102B200036FA7009D4FFAB5761541EB69F4239AADA +:102B3000C25FC41FA67CE3403C381770071528BF4E +:102B4000DE633B152B67813E0E9740F992FD0EDA4E +:102B5000D73BDAECA6F2BB18D437F02AEB6279DB6C +:102B60006B587206AE870D63C310EF8CFD30E46EB8 +:102B700077FB61C85DD817EFB0987DA954DC32D2DD +:102B8000C3D29F0DD8E6CCC274866A4378F4CECB0C +:102B900047F96BEC0F7BFE2043B8DF22E6CA36A76D +:102BA000D37E4EDD7F2553E1C75BF74B4C05913259 +:102BB000657F3AE553CEF7A53C0088F671EA2F6EA3 +:102BC000F1E61792480F62BBCF777CB0EC0730EE8E +:102BD00094B530750FCDC385F338A34B619C078046 +:102BE000BA09E1B834CB1644383F9234F4913268D4 +:102BF000DFF0AA9D3909096C210137E902C9733553 +:102C000095F6FD08EC0BEA0DBA3DC4F7C5558FFBF0 +:102C1000E2F4CA4C8D81B32D34BB09FBB3C33E87AC +:102C2000611F12D444A6C6C0F95D16B013FF0CE9AB +:102C3000C77360DDD562FF93F2D24CF598D2F27281 +:102C400000E914F001F94DB2D6CF340E74F38909BE +:102C50003F58870DD7E92F93D8A330EF1BAAA13C8B +:102C6000A6BFD50929F608F4D7B1C01D94408EDA65 +:102C7000CBBE2479602F33EB6BFECCD327580AC12F +:102C8000E1939EF0E546C417D4CF06B141882F00EA +:102C9000670DFB3FF38EA2396949FE4D063D20DFEB +:102CA000B13195E03CEB889D8561BD6718DB85E51A +:102CB00067424E4FA8308A472C07DAE13A9C9C3F86 +:102CC000A5169BE1DB4B37C333BDCA0CB7DE7E33A1 +:102CD0009CAEA8CE3695F70D0C36955FB938DF94CB +:102CE000BF2A38D254FFEADA0A533E2B34C9547F44 +:102CF00040F374537E60EB1C53FD6B362D34950FFF +:102D00000ADF662ABFF689A5A6FC90B61F98EA5F7F +:102D1000B77FA5A97C58648DA9BCE0C87A537E789A +:102D2000FBA3A6FA23DEDF662A2FE978D2545EFAE7 +:102D3000D95E537E54E7AF4DF5C79C3F68CA97B341 +:102D4000D74DF5C7BADE36E52B3D1F98EA4FF07E2A +:102D50006C2A9FA8FEC5543E39EFAC293F55FB3F76 +:102D6000A6FAEDAC7120CAA3EB7202BF40FE222787 +:102D70007D4178FEFE5C89A503029F3932C3134072 +:102D800079F22DED8BA70D7E27F0F71C73CF93B34F +:102D90002F6D5FAC17F645A53285A13D71A64D227A +:102DA0007CFF9B7D05D7D31A6C4C190DD3717339F9 +:102DB0007D27306605E48B3DC3C350EFBA23C2DAEA +:102DC000507EA416034DC4F25FDDC56C317048AF70 +:102DD000F298F2BDFD5E53FD2BAA555379DF409E5C +:102DE000A9FCCAC59A297F55B0D854FFEA5ADD9488 +:102DF000CF0A5599EA0F68F69BF2035BAB4DF5AF2E +:102E0000D91430950F0A2F36955FFB44D0941FD20A +:102E1000566BAA7FDDFE90A97C58A4D9545E70A49D +:102E2000D5941FDEBEC9547FC4FB61537949C713D3 +:102E3000A6F2D2CFDA4CF9519DFB4DF5C79C8F9885 +:102E4000F2E5EC5553FDB1AEB74CF94ACFEF4DF575 +:102E500027784F9ACA27AA9F9BCA97FC05F474D477 +:102E6000471A9C9EED8588E75F9ACABF4EE81FF916 +:102E7000217C9796A6685231E2FD3F4CFD3D92942D +:102E80009287F853CB1235A7847A3DD7BBAFC8CF12 +:102E9000167A3DEB48807C43C80FC886AD3A991737 +:102EA000EAA7C10FA8CF48EC2B867492A2B336D400 +:102EB00013417F217DC703FA0CCA1303AFD3E4ACDF +:102EC0002CB43392A2FA69E68582CBD74F07E6335A +:102ED00092C333F203FDF2615EB7B5ED197F257C35 +:102EE000BA958556A150AE547CA91D409F6F24C44D +:102EF000B73F27BA006E31E3BD9AD09A99DF031D20 +:102F00004F747D41F5BBFAB5F37E25586CAC9DF648 +:102F100020D8F136A0D7D63AA02BD063D6D77928BF +:102F2000BFA1CE4BF987EB544A37D5E551FA689DDE +:102F300046E59BEB8A29BFA54EA77CB8AE8AD26D29 +:102F4000757EFAFE785D35E577D405287DA26E3171 +:102F5000A54FD605A97C27D8D198DF5D17A2B4ADBF +:102F6000AE99BEEFAD6BA5FCBEBA4D94FF555D9812 +:102F7000D2FD754F50FAEBBA362A7F1EF42ECCBF25 +:102F80005817A17CA4EE08E50FD6B553FEA5BAF7F5 +:102F9000297FB8AE83D223759F51FA5A5D27951FBA +:102FA000AD3B4FF92F849F615ABED0B31437EDBFAC +:102FB000BFE29A6D8A14FDFEDC60FFB47CD8BF9539 +:102FC00049297760F974266B0ADA17163BC2BA0FE3 +:102FD0007F16FDDB2B182B447DA75FEEB606D8EFDE +:102FE0007A5922BCAB4F53B735A0DD9DCFFD0BAB5B +:102FF000135928219FD086F4EC5BF02715D4A98CB7 +:10300000BAC36807DC1C04FB864C62C0C33CC2C365 +:10301000A3DFCA4E62215A8F32C87F3BE2217387F9 +:10302000DF433FDA6D326B47BBE9DA41813BF1FBAD +:10303000CDEEA083D43AA6E5A29D39D519E97D232A +:103040009477BEAA68DBD4EEC7BBAB752230E51E11 +:10305000CA5FFC3C13E54FD5FF280184CB1BF6E487 +:103060006AF42B84049C43F9B2296D1BE4AF43B886 +:103070007F3A3078FAA7A80FDF3D3015E5D877D032 +:10308000C406BA9EC6543BD2F50CA6BF9C85FA1C5A +:10309000EA8D90BF9185287D282FD08CED6783A184 +:1030A00080F9C048677F04DA5427A707EB3C5AC56C +:1030B0003EB4E6CBA6F4F541FE5684CB2703F51DBE +:1030C000DF872AD26095E6773DEBDC82F3F8FB0BD5 +:1030D0005F9E960644E16BF825186E11C0ADE68838 +:1030E00042F631E87F8CF2F7809E0DFDAC2AFF3E60 +:1030F0009787F5DC6FB13CF1A34A2CEFB815C600F9 +:10310000067126F8F2CF50CFAB81726A7737CF9F26 +:1031100001BB14F9D3D7091F913F535A08FFFAC6D0 +:10312000E3871DEEDEE4C78B50BF5F0F660CF9DE50 +:103130009783B2685D35E824C27E574861C44396E0 +:1031400011B1637F7F1BEEA17ACAA0C09E7CB2F34F +:10315000C30F17C0F737104F10EF3DE15CF42BACF5 +:1031600096395E845E53B4ED00129BC7AFA33FF166 +:10317000E6CDBD86A11F0CF107EDA07F08381AF837 +:10318000716733A431FC0CF0EE051CE7BF9E1B9168 +:1031900087F871D78B252AEE7303F69F11ED9FA157 +:1031A000CB0AC653527D5BD15F3915950AC4CB92C9 +:1031B000E4F0B62CF277D5EE89C33F4F897D7DC30D +:1031C0006BAF0A53BF9C2E8DF20FC4FC3E10F5A6C8 +:1031D0001E7CF5AAE5D0EF9D47EC9A13C72DECF0C5 +:1031E000F993E3E073ED63453931EBB86BFF49EEDA +:1031F000C7438F1FB47FA38F4AF3B4BBDC91F4A104 +:10320000D1715886ED8B2E7B221BE1C3086F0C7C9D +:10321000541CC981ADEED8F9F376400F27110F91F8 +:103220001E42B0DEEB9D6AEA8DD07F07802E0269D8 +:10323000E0E71E07E2E342A651BA88F929BD858579 +:103240001C88FFFED0430E06E3DDC6DAE8FB9DC511 +:1032500037F5C7FC5DAC739C17FABBA1B9FE65746A +:10326000CBCC687DA8B22FAC7B7A78C1CB984E7B53 +:103270005C3A1D52899ECEE0F81D52B0A91F8C37D2 +:10328000676779D395F0FD7A85E3171BC1D876F48B +:1032900013E4681D21D8B74F1E1A948F7E0B631D4F +:1032A000FF10F07D7D90FE0FDCEF9A958CF0A5F37A +:1032B0000527ED5F175D15DFFEC72B65645F9DF386 +:1032C000101FEF7AD199467625E3FAE26D427E63CC +:1032D0001EF5453BCA6FCA077F8EF4717B88DB53AE +:1032E000CB13FF87DA7748B226F5077E6CE77EC2FC +:1032F0003FDB5D9E060DE934DC1FE70DD0610DBD9F +:10330000887E68DF6A4F24137D7E2D0B3F5EFF8031 +:10331000377F40545EFF590E17A50C2079DEBB00A5 +:10332000D671D80B763B8E9BE1D2142CEF15EECFE5 +:10333000E9BF4B3EB00B4951BFE083A8076744F596 +:10334000E0E589FD19DAFD1D12EB944A49EFA175FC +:103350004915AC0DE95A2AFE8F00CE6B7312F32883 +:1033600025F1E83CE02D5270BE9A8BE69BE9273FA1 +:1033700002EBE3D2D64817CF03F0B31AED7BA7F0E8 +:10338000971DF9673AC13504E36FEF151D5F2D678F +:103390006D0CF890E4F90FD2D336839EA66442BB3D +:1033A000C4E013381FD9CB3CE82F0A5508FFAB8384 +:1033B000C3F5623872FDABBC80F39D065C2AF78FC3 +:1033C000E679D0EEB525D23CDF710674846756A04D +:1033D000DFCF62EDE223595750FE7A07E77BEC9B83 +:1033E000864CE43F6EA686707FAFD7256D0DF187C2 +:1033F0008E46B4AFA70122907FA8D86EA23366F1A3 +:103400005F011A913F723AFAAFC8DFC45E427FE6AD +:103410000CF4674A68F69C30E046FEAB9D83C0D64C +:10342000C27DB58121027C248715BB701E8DEEE91B +:10343000A9985F99743D0BC4E13FAB40BF8A3863E4 +:10344000F2B680CBD383FE66F86D1C9B525804F80D +:103450008BED7C2E8BFC1BE33759C6B7A676BBDF02 +:103460007339F3B17718F3C9A1749DE0A3B08FE469 +:10347000EF5A3033F27E2FF2AFAEA4FA0B5CEE902F +:1034800002A8C01ACD7E5E434E1A690EF600707F08 +:1034900072A723CCF11530B48F3882823F593BC7D5 +:1034A0007FAE0CC5BC8D9D32F6930A63F28AA80CE0 +:1034B000FBEBC054C1B4AB5C473F5577EBBBDC744E +:1034C00015E8CBA7ECD1FC934FEC9D83787E6E275B +:1034D000B05798CF53E55B27D9910E7E29B378E793 +:1034E00006A80E444CF34D6411937E9666C9F7B35B +:1034F000D4CFB6940FB694E75BF2232DF52B2CF9BD +:103500004996FAD32DF93996FA0B2DE5B759CA9792 +:103510005AF23FB0D45F69295F63295F6FCAAF2851 +:10352000C81678F2A8A5DD364BBB10D58BD207980C +:103530006A6E4C5CA47F3DFD954C78D5F6FCC1C10C +:103540004F417E7748D290FE777F756ACDB5B87FC0 +:103550006D363AAD58E0FFAAA98377CB3AFAE0EA94 +:103560001921E19C36D749C4BFA761FF918E9E11F6 +:10357000F4F49F602F45AE61EC37602F61FE45B0DB +:103580009730FF1CD84B98FACE015DF64057DAF31E +:1035900072745DF0AFF06862745DF0AFF8449AA9A0 +:1035A000BCEC8B7EA6FC98F3D9A6FA233F196CCA13 +:1035B000EF4C36C323D058606A9FABFF3311F51A26 +:1035C000B6A234FA3D1BE1944FFCC48A2F7362F11A +:1035D0002506BFDF01B8E8D744F3EFDEAB54235F25 +:1035E00038F8E172F62BE0AFBBF7A56D4539F0F482 +:1035F000CCA4C6B454E0A7855CBFDFFDFCF1241C5D +:10360000E7DD94F6C9B80FD77D25B395B02FE5CF88 +:10361000B308EE9BB69F91FC482A54A9BEB6BF5D85 +:103620005661BE43F6B5F7433DF1DD942043F9F111 +:10363000C27E39BC12EA1DBCE1776BB19F5DD00F31 +:10364000AA86EFA641BF50DE704E468EC46886C083 +:103650001F86A09203EB019DB79A9FC7B4F7C3F3EF +:10366000E828BC3A12115EB9CCA58F83FEDA9670B9 +:1036700079B03BB2B7F23AC89FD55D9D4C43F8256F +:10368000939C6B0BF2F3AFDD910A0EB790FE3BF407 +:103690005BDF2470E935019FFA3D87E7A0BCD97D47 +:1036A000C0A1A29F1DE11682EFAF033E61FAEEBDFD +:1036B000058E252887FB2A6C3BF4FF3EE057883BAC +:1036C0008A5507F437153B23FED9E57F972F5C8792 +:1036D000DF6DC2DFCE0EE0BE041AEDA158BF365B2F +:1036E000610F99E5A02D9AA77D8DC9E3BC6C8CAFC5 +:1036F0006B83B48D9FD78798AB28861EF6CD72F862 +:103700000AA9FA97788EB72852E1F0A15DA07BCF85 +:10371000A442FEEB93D3A8FC0F15DE2FEBB568B9DE +:1037200047F6507953DE63770CC77D0386E144B9D1 +:10373000DBC2FDF0AE2E3F7D8C5F1DE6F7822DD201 +:10374000743BCEA7D8E9C1FEA6F8CCFEF836FFDB65 +:103750008978FE5D63F1C7EF8AC85561D8C7394BD8 +:10376000CCF5AD711AD71772BD7481C0B3C9A1B6BB +:10377000711EE86F0A8B34A25C9C6D8B109F1FFA40 +:10378000154002FA1D1A38B93209D7BF48D206428D +:103790001309BEE3BE6A8BA4AD13A0ABC43C179D56 +:1037A000EBEC7A5E26BCB0D2FDEFF79D4A443C6953 +:1037B0000B1BF8D64EF8B67BDF71A2D31790FE7ABA +:1037C000E01BAFD7F1F88B776C7A724F72FB06BFB4 +:1037D000C242B1E721428E4FF125B1500C7ECC0E92 +:1037E000A49BF2F57B1CB49E7DCF313A0FDA69EFD2 +:1037F00090EF80F5EE2D717A5612A7E4E77205027C +:10380000BF9D6C58C312710EB3C613B573F745381C +:10381000FDEE63EA58849706FA6508DAE7EFEB9065 +:10382000514FF32C7407D1C79B7FD461E25B4ECD1F +:103830009CD740924762F675A8256FF8B5711B3189 +:103840004EC00A07AB5F7B4D61B2296EE6693CC78B +:10385000B347FBB9CE88D7682FA4FE76FE4855A69D +:10386000BB63E267229FCBD9C837593DC1F3E93A20 +:1038700097F4718C5E30F479A6A01DA8A14709E9E0 +:10388000E279C6ED57D19F54ED3C487CE048369D27 +:10389000FFEE3E7286E230F646B2B7615CC2DE23CE +:1038A000D35317FAA2FDB3F60C3AEF33FADF857261 +:1038B000E81A5E0FE76BE0F92EC0A3B438FA9FB1A7 +:1038C000EF5DF3DB279BE06BEDFFE2F621A28B06B9 +:1038D000FC11EA2D290C3C5308F921EC204B87F907 +:1038E0004F2DBC9BF4CE2EB8B9A753BDC94327CAF0 +:1038F000786EB5B17FDA56F4A7817E2A6F81FC1508 +:103900001ACF678414C2938CE2FE5BC9FF20F4C611 +:10391000C983CD7C7877E6F1443B4CF15C2899F083 +:1039200072728AB97CF2D0E716E1F7A766BA54D46E +:10393000C3A4A1B3FBA2DF73BD80D39BFB96267605 +:10394000C4814BBA5DEBD513FDA477D848EFBEE236 +:103950007C26E9BB93F37B96E7CEF30AD533F2AB33 +:10396000133ABCE867727A7FFAC127B1DF33D3120A +:10397000105EB9FA8F5C287F776772FDBDBB7E8DC4 +:103980007518F91FA37CF5A17C7586107E2D4F64F8 +:10399000927C5D3D25B1310D36E1BF0AB9BFA0056E +:1039A000E086F375069222089F964C46726C97B695 +:1039B00092F8CF8F53DA659C5F39D023C2E71FC8D6 +:1039C000FFA0DDD0CC0853D1BED2FCC302542F4897 +:1039D000FA794BA690B3538B06E1B9CE2E2FC8319E +:1039E000DCB748E408FA117B17C80CEDB05512A3F8 +:1039F00079857EE9A6B82243EEF6461B1DB6BC6566 +:103A00001F1F3F97DD21A39F605726E793937FB544 +:103A1000506E453EA2C961A403EB3EAB9E76AEAFAD +:103A2000B8D3888E0CB818F0AB54766E43BB77379A +:103A3000730531CE47654157ACDFC6A8FF30EA6F4A +:103A400090FE78CADE345CDF23DAD25707227ED5B7 +:103A5000B889BB552ABECFD12FD15293E8C1F53DCD +:103A60005CBD3E2DF6DCECE271DDB20CE3AE063D52 +:103A700004F9655A442D47BC4A675A3DA69B44FD4C +:103A80009F88717F8A7A23F0EF9FA1DE780DC12392 +:103A90002117C7F7DB482FDD522BCB0AF4B7639F02 +:103AA0001C56E2D82D467F61D1DF16D1DFE3A2BFDD +:103AB000D5FBD7973B108E0146EBE91BD256A21FD0 +:103AC0004B5DA156B8687D53E404845323A373B9B6 +:103AD0002D429F35DAEFDE57518FF119E7407164BF +:103AE000C0CF336A030909E88F9040EF017EBD7DA6 +:103AF000032FEF9360A373F7ED0F4FA2FC236E9E8D +:103B0000DF23F4E4C7C5BC326A750DCFCBB788FE9E +:103B100073DBE7A6C6F3A719A9A167EF12F3DA636F +:103B20000FC81FA27EF83B251C8A234FAD7CCEAA6E +:103B3000570FDD9768CA1BF873297EB72ACAEFA60C +:103B40000D877E7D93DA65D70068AE07755491BA0C +:103B5000F89D97F33B239EA32187EBBB0D3915C43A +:103B6000FFCE01BF437C768436B9D04E36F85C6A0E +:103B7000179FD35C88DF8D62DDABC5BEDA439A6BDD +:103B800000B477BDA3503C40C5E8BCFDE8376A717E +:103B9000F37D33E223C8A503E52D394B899F029DB0 +:103BA000338F14ED4F1ABDC9DB01FD37D9FC3DFA47 +:103BB0001DEC9B6CC4BF94F3FD89EF855830827473 +:103BC000AE6430F2AFB8542D8472DBA9DA82B8CF7C +:103BD0000A8BD14325029B6AEB238EDAB24DE52492 +:103BE000A753D13047F86431E2234C69610310CF09 +:103BF000409FC6FE92DC374F61E83FF0D92C711B25 +:103C00001A433F878BD93E89ED4FC9397D02EBDBE3 +:103C1000336D267D4E612D5FA2BDA65C223E63ED15 +:103C2000F0E4B8F1B3CC1B1F3FBAE22F0CFF4537CD +:103C3000F5AC7834D8554CF6CC6A15E088C364E608 +:103C4000133FDE51A810BDEFD8C4E5788BC0376BA9 +:103C50003F0D16FEAF1871465A3ED5078D7FCD2019 +:103C6000E8AFF5DD74F2B71E2854C84FBE5ACFA591 +:103C7000B8A2D58537111EEEF072FDC2D02B767832 +:103C800017CA27F03BF05FEE6C31FB27766C5AA920 +:103C9000E33CCF796592ABAB3257BAE2C9A90705CD +:103CA0009E197CE431611737ABD37B8C3730D665F6 +:103CB000D45380FD6971FAB7B9CDF49C7BA467FE3B +:103CC000B159CCC7A897698B48D86FA6A057A3DE77 +:103CD000554173BF6F0EE776E90F0AF463C37B4764 +:103CE000F14EA9753C8CF25B19358EF497D5AA4C30 +:103CF0007AED31752913F02179B5DA7BA67D2C9404 +:103D000037A832EDEBBAB265AE587DC10ADFD4AB4D +:103D1000648ACF65A133FD0EE420BE875CE8775D41 +:103D2000A5CA1447D5E0E5FA4603F08778746BED31 +:103D3000AF19E3B6291EF8AF73B0BF838537B1E67C +:103D40008CE87C21257F887BB842FB0D5A8DBF0013 +:103D5000ED18E02F183FDD3D1EF7ECB7BA303C5BA5 +:103D6000C483F6ECBFBA14DFBFD4383B369DE1F014 +:103D7000C678915EB83D9CFEAE861F57A445FBC138 +:103D8000782813BF1772E1EA5AB37F25A725CDAC77 +:103D9000076B9747CF56FD3487015F467DA88DF3AB +:103DA000C9DDFBE410FA01CF3117E1C5D3D8344E99 +:103DB000BFBB2C7ED9DDD05F4FFC79E82637F1E51B +:103DC000DD76B65F4A6578CCA47AFA304ED2306E92 +:103DD0006A4920B708E6E73B3F94F8B8B4FF30C51E +:103DE000BB02DC391D6BFCFC8F95F9391F9E0A79EB +:103DF0008463DB0C2A5F750FF350DE16EE8778DFE5 +:103E000026E873A790476D599139A82FEEFACF8F06 +:103E1000E4D838FC1145DC7E1EE24AD1C371E8B714 +:103E200058943B6D2C9488675DCFA711DFF2328FD9 +:103E300003F1E1927EE2EA4835C50DCB328FEFB552 +:103E4000AC7B17A67D71FDFE4A5CBFA4F175B7F887 +:103E5000FD21D4CBC0BCD55829D4D9C7F7D7C7FCCE +:103E6000B4DE051A5FFF9BDA74CABB011ECE61384F +:103E70009F1A1127CB3CCEBED80F8F9B0DDC0EDADC +:103E8000D095F1E6C9F1AB0BAE028E6F6A321B8D95 +:103E9000F2DAEB20BD90E569D5D46F37EBD820D6A8 +:103EA00031BBC43F8FD6E1E6EB5807E88CFD865264 +:103EB0001C148F7E7741605111F127A6A39EB86E26 +:103EC000964A7624F3F925F46331FFE5E1F165D7ED +:103ED000CBD37B847F434A3FB600CAD72D4DA1B8D0 +:103EE0009998752C2FC2FB0BEE357E92EB7E03FE6C +:103EF000DCBFB7C0ED20BDFF52FB1FD593FCAE5811 +:103F00007A6BCCE4F2B441F2BBD0FE08BDCBF9D859 +:103F10007A313E1B075386EFBE3E8EADB17E9828A8 +:103F20009F91C47D0A339F71B234939FF37FDB0F5F +:103F3000FFF3A22CC12F7BF6C71F07DD0EEB35D98F +:103F4000FD5E945FB9ED7730D483CFB9E3FB958CF8 +:103F5000B459C83FE3DCA93941AFF6C7E12BABF652 +:103F60003A168763BEBF2EE8F4F5226E3FC2D652E2 +:103F7000BC6AA357E670F6ACA478BE73A0C7B01EA7 +:103F8000CE53125433FF757ACD7CF7DBC621468AB7 +:103F9000CC7A5A9304F3CAA0FDD6B633F107F2D512 +:103FA000EB7B6F15E7474B92003F4F8A22A35F439D +:103FB0007FDB22D6975FAABF8674B405E10CE9C304 +:103FC000C3FDC730BF734F11233DB08AE36BABC451 +:103FD000E3F1BBA30FC5C102640754713B209755A1 +:103FE000B9A6C5917386DE1FF533737C6EF24CE77C +:103FF0006906D7838C71BBDBD706B1AFAB847DD5A7 +:1040000094B1DE24172F775F0CBE65739BF7C7E969 +:10401000B5C8C56EE673111C2466D84B5F23DDFB63 +:104020002ADAE5FEF1EC25F74C93BDB45EE3F61217 +:10403000D12DE0D7034B3C5BD1EFFC00DE87407C09 +:104040005BE4D9CA62FC43FDF0A41AE3FCD0A338B8 +:10405000206AE76C1672AA59E89F8F8973993575A3 +:104060003AA5DBEBAA849E1AA0F255758B29DFE8EE +:1040700039C5D01E7E140C31E4A729915B491EA4DA +:1040800056314F028C9BB6B92344F15E4B1209DFC7 +:1040900036D605A97D6A19C7BB9F06121EC3B57B1C +:1040A0004738080EF9A501EF08CE9F3BEC80870B3F +:1040B000F02715FFA7F741B9BAD31E0EAD2C243D4A +:1040C000258CEB94CAB87F25F91D253C81D6C9FD06 +:1040D000ABBD04FE1AFED896ABB83FD6A9F1F8F3F3 +:1040E0000760FBDA119E363501F1677D3187D7BA5B +:1040F0004246FADDBAB2E311B4AFD2CAC1BE023B46 +:10410000FE90F720F9B1D717F3F3875EC5FFC19092 +:104110008E0E07DC41B4EB53ABE4903385D2934E63 +:10412000E0D7A9E31C267CB9BAD6EC974D660E13EE +:104130009F745AF2DF96CE478DB0DA636ED257D1B4 +:104140001F84F08D399F213BC4A1737FE0BA99FC95 +:10415000FCE5C1B2E995958584479DE8B730E83D17 +:104160006D18D77BCF151B768EBFE97B909FA9BBBF +:10417000284E20875555A2FFE70171EF247A8E184B +:1041800021BA7C5DE8410D927AFF801839E308FF7F +:1041900093E87CE7A8EC0429669DE8778F851BFAF5 +:1041A000DB4DF4E44D339DB7B51466933C3BE7E536 +:1041B000FE9AEEE0D562B1035B607E3DE98B8E62D4 +:1041C0007E7EEADEE420BDD171BE0FE985EB8BB9BE +:1041D000DF6AA73D209FC820BC217B7C7DF14193F5 +:1041E000BD32D067F613B7683DDB73ABC4FC8C7A85 +:1041F0000E5B80C59B1FDE07F936F6DC1AD1AF5186 +:104200002FD116A67E136D667B2E29CFDCEFBA1157 +:10421000DC9E53BC67AFF9244EBCEE0F0A022D237F +:1042200062EE6B29DE2D1F7C027062DF5C207F65F1 +:10423000571C81B0FF125D5564FF3D58C8CF93777E +:10424000961C9C83F4B50EEC27B2E31378BC9F1345 +:10425000F07525E059CE980E86FAB2B53F96299BA7 +:10426000F67F9DC6EDBC573C6718FA6952CA2248D2 +:104270005CECA7B608FA5E588A5BD6C06287EF414D +:104280001DCF155EA93A48FAE83AB72C231D1F4501 +:10429000FE4C7C94DB798DDA992384A70199CEA713 +:1042A0001C42DFA17542FDF555C75D789ED6AF3E35 +:1042B000F566E4777B472804A707D0CEF645F1FEE4 +:1042C000010FE463E8ED3723F87DCC96B253CD3986 +:1042D000D06ED3621BAD5B66EDE4676D2CE4E71036 +:1042E00089DFFCCDD507EA1F2E3EEE3A4DED44FFA7 +:1042F00065DB22E827DC847C0AE6F97AF11917FAF3 +:104300009DD7556DEB85E3395832C98375C55CBFC0 +:10431000D9396A3AC5873D50C3E9E281E2E9912A79 +:1043200021E7F817BF5E5148E1309D780FC6A14ED6 +:104330008D2C463E29E87AE7B0856C15F283426EF3 +:104340009FDB32CCF801F84EFB77AE8AAFC3C15E7B +:10435000A5F3D9F5650E15F77753954C707DC0CB55 +:10436000F9E92137E7AFEB3DFC5CCBB5CCDC5F5A1C +:10437000C9B6508E697E2C656A9FA87F2EB16A6F80 +:10438000E42628F7F453189E83D6EFB959C7F11FD6 +:1043900004FEECA4FA66FBD7C9CA4358FF5CB1938C +:1043A000EEF9DC9F03FA228CFF1371BFADEF43F9E6 +:1043B00012FA751DED437A115DF8CCFC39B3C69C39 +:1043C0007758CECD6C167E7D29FBDCD03F1A0D3997 +:1043D0006B0F925E898E488453A3E21946F625D06E +:1043E000655FF45B666792DEED2836F449BDF876CA +:1043F00084AFD89FB489D30DBD25E8F9167A8BDD3B +:1044000063D1273D21965184C37238DB98ED34DAAD +:1044100011CD188B6C921BED5C6E309709CF1E2866 +:10442000E37CAF45F04586877671F49D7E4BE2EBE9 +:104430004FDE45E6F9A4D758F4A76EFAB3EA4F0F5A +:10444000897BCA434236E62CC438BA8F0E22BEEDB1 +:1044500079969FB35CEA5EF38167B99EB0EB431E29 +:1044600077B7EB6507E1EBCE0F9308FF1B92DBC933 +:104470007E7FD2EEB97218AC77CFCB3BFA2DC0F36A +:10448000CE62CE27F774A3E716144B425F0E1414C6 +:1044900073BDE60B2546AFA996F53EC4D7AA3DDF0E +:1044A0008DB56F534B022554DF622F4A2F815D0B70 +:1044B0007A86439941F6D910B0CFB791B213A47858 +:1044C000BE218BC57D53979FE63F648A4A7E0BA72A +:1044D000B0DBFB2F639E7AD01F0F15042A8BD18E81 +:1044E000B22DD5F17CD9F78354A213C0D2C188C7AD +:1044F0006EC6CF0D16BCC3E3AF1DED57AD427D6751 +:10450000B7111F68B1378DF51AE70F7B059E3F9DE8 +:10451000C5E1F6CC9B66BFC79C62B3DF035AC9E80E +:10452000DF7FFAC5D71217C48163A064C19CE298EB +:1045300073585F9B4741F8ABAC93F011DF4AE0FE44 +:1045400019CD1BFBEEC2EE977A3E1FB49E77141C6A +:10455000B1D04757FCA75FC27B0A06BEBDDE2B6801 +:104560008A3FBFE4BDF9E22C118FC508CF96DF94D6 +:10457000C0FD0E22FFF57A3BE5F34BFDCB059EB85F +:10458000E4A2289E74C5DB88FAD5EB076E13F69A71 +:104590005B467CE23FB3FBBAF04DBF0FE1756B7534 +:1045A000A01E53DFE06383F15C61F2D057FBC5C608 +:1045B000395E67F1EB1AE96782EF4CFA6E789F9DDE +:1045C000F0624ACD51D07327DD18FECA0EFBFF49B9 +:1045D000F1849A46C0A3494EEE87FDA078E9E61023 +:1045E000CCEF419C07E4F716076A30FF74A1BE0EBA +:1045F000C71F5DA4B7F2758DA3FB17063CBBA76B65 +:10460000F3FD8B3618DB7CBE1D30F9331A3CDC7FA2 +:10461000B8CADDF339F3B78D27BDB328F0CBE23844 +:10462000F1A4D175B4525CF0E5AEE35081BE07FB56 +:10463000FB0CD703F0183B74A21C2EC47973FDE366 +:1046400052F357CE979ACEC915A1C7B171CB972F08 +:104650002F12710603A2E511B18FCAF9D1FC1CFE1D +:10466000DF84DFBF1B0F7B6351E06DC4036B3CEC49 +:10467000BF0A4F032F3C45FA09E267FF227E19FB70 +:10468000017CFA33417F4B9422139F7EF838D15836 +:1046900026DDCB37DA45EFAD44DFD16820F9731F53 +:1046A000F183DA90D3837A5B4A298F5BF7611CB67A +:1046B00087E8F22B1C67B912198CFBF5B51CF9437E +:1046C000438C5FEA3AA679D10EFBEFE2559BF15D90 +:1046D0000BC5D1A161A4E57FEF5FB1B90ACF3D6CF5 +:1046E000C0A781CFA54CE8683B847223DD417132BD +:1046F0008D13B91C6A2CE7FC422991F8FB1A22752C +:1047000096707C385BA4CB25902695F075DF57A476 +:10471000DB62F35387EB8E92DED13CC025A984C3C4 +:10472000A55932CBAF870F4984D76E5E1E1F3EACB2 +:1047300056F877DDC26FCE78DE9929F8B611270DCD +:10474000283B328D5256990F43E4B527A33C72DEC5 +:1047500033A347BCFCA3C5BE33FA0BAC504CFCDC06 +:10476000E5339F676FEC63D04388C785EBB7525C36 +:1047700078B3B767B9F19A9073D6F126DBDA6C8813 +:10478000FF93CFDB4C746A4DCBEF7E96F4F7B5C147 +:10479000E13D8EF3619DAB7DDC405A1FA5C6F7C09D +:1047A0000AA97D5CCCBAE6D93B7AA39FF344E859C9 +:1047B000573C38CD5B96D03E2E66DD0DBEA5646FAE +:1047C0007DB44C21BEB336B3632ABE07B4F62D8543 +:1047D000E23DD726733C5A3BC441EF6D24D54A3B9A +:1047E000942C33BC31BED25FC2DF071AEB6B23FBC4 +:1047F0002BA9F62D3BC6BFCC2A5169DFE72E3B69BA +:104800000FC0FECD5BF1A51DEDAF240F33FA0BD722 +:104810006761BB763BB69B5BBB87E26692208FF5F8 +:10482000E7862407BF0FD4DAB58FB171760ADE139D +:10483000A2F7620264173A11CF204DC07D50A2FB4F +:1048400091C422E23D9976D6937EBE27F2AA8CE3EC +:1048500033209A8FE3F8D1EB672512BEAEB99BDF08 +:104860003F83DD6F5A08F980B02F0CBFD322411768 +:10487000CEB9FE5BB17E609043453FD5A2BCC3F488 +:104880003E82E12F62ADFCFD0C17FCC571B242E621 +:10489000F7360296F7346A2C7987F017AE2811F7AD +:1048A000CCF3593ED29B5A1326FC750E12FAB83738 +:1048B000BEFE9C24E2ADACF16D6B7D0B1363FD1469 +:1048C000ADBAEC423C39AB32F2236D748442A80796 +:1048D000AECAB20557A21E28E228168A75C3FF5633 +:1048E0002D80FAF3453C63E96732D363D635AA33AA +:1048F00091E9A638EC3453BE9C5D69AA3FD635C019 +:10490000545EE9B9D6543EC15B60CA4F544B4DF575 +:104910005D40D8026E3CCE82491467414D645339E4 +:10492000F7BB35F3F8561DFEE2BEA4E99D768C6315 +:104930009E23DEDB30F0605516F727CEB7C449A4BE +:10494000B35008CF7366035E4460FDB3179BDFC9A5 +:1049500070617C45CAC5F118C67EFECAD84FC38FA8 +:10496000D7CDFE45F90EC7CFEEF9188F47CF551FAB +:10497000203F03ECD77B395077BCD8AFF1331753C6 +:10498000DC88E37C2FA6233E3C3FE2E95C281F2B1A +:10499000E063F8A11CE733A83CC4FC83B2614A8EF3 +:1049A000A30AC5AB395C2DEDB81E07B3C4B3A83C50 +:1049B0009E85FC36D9A6725A2FD817141F50057839 +:1049C00088FD4E382F311DFD6C33B97F9679F93E45 +:1049D00018F43156C0EB96CA0112B69FA09AE1EACC +:1049E00010712B0ECB7E3CC4385C4F9658FCA3E371 +:1049F0002ECF2F9F2C6F5D84767A4B8D52157B3E88 +:104A00003B7124D7B3BF2891C47994751FD414BEC9 +:104A10000F25F40EDCA929337AE4F393CE0F20BDE1 +:104A2000B24BBED8C2EE9EF4A849420FDD98621E7A +:104A30002F9755F5AA84FD39D6C8EF759D2A1C40DD +:104A4000FADDD91512712923EEFE9888BB3F5578FF +:104A5000A8F27B50FF2BC057F2BB58E2E58DF87BE4 +:104A60005C6024E65E8735FEDE88B77FF75E85E210 +:104A7000FE437748227EB1E7787B161B6F8FFCF6EA +:104A80005BC7DB87881E8F2D9628BE6DB0326D3CCC +:104A9000C665CC51D897789FCE7A9F6051E1D8F106 +:104AA000781FD788B7FF5E61C1F8A642F42BA5D363 +:104AB0009B1973664EA1F6C054283EFFEB935B2B07 +:104AC0008717523CFED27AFEAE12B5FF1E53CFAC12 +:104AD00089137FDF94F78C7D30D47F13F805C5E709 +:104AE0005BE2F1DFB445282EAD7D33F74B5AE3F19D +:104AF000DBFDE9C928F7ACF1F8EDE338FE5D2A1ECD +:104B00007FF24849C4E1EB5329DED7AFB070563489 +:104B10001EDF8A47FF6A9CFB7F978877DBC0FE48D1 +:104B20004DC3387F907785F49E19C5F92F0C64AD7D +:104B300042D6D515E78F762994CF6896B64EC88AA7 +:104B4000C6F91F1BC7FD0B0B0B15DAC7F645D2566E +:104B500016A367BC1D36F0BBD38DF8DD5E3696D646 +:104B6000751CE68DF58E8F2BB8AC78FF7F77BD0670 +:104B70007D1BFDBC874A12ACE7FE5952789B8474BA +:104B80003797EE7FBF0E2485FAEDC6A1339A301E0B +:104B9000E92C4C11E9AA7CD857872EA0DEE3E3EF7D +:104BA00044011FB563FB44E63A89F5937CD39AF040 +:104BB0005EC72497B44786FAED62DE93026192B72E +:104BC00033545B50D5B0BE85CFBA389F4D14F41A1C +:104BD000532ECEDFFD768CFF9E5C6627793C7951A3 +:104BE000C44FEF30F8402E67B12E79107BAF13E938 +:104BF0006126CA6F18EFEA6FBE53790FCE0BF41619 +:104C0000C277F19E930C7F11DFDD4CAFDC08E589A4 +:104C1000E89784FA6BF3B6EAC84F26033FC175CC18 +:104C20009C69C14FFD31F2C332E86F20944F9F62FF +:104C30002E4FB4E0FD9691FC1CC6908F6B7DD3C9BE +:104C40007F8FF126785EFBFA3468920AA9BDCDDB2E +:104C50000A78F0E690F1071662F94699A1DF253C43 +:104C600052F07D1FF37D1B79EA9C1BA9C7B8DDB507 +:104C7000CCD581F17FEFDFCD083F67AF90C255A85B +:104C8000B72EE2F89CB98CEB8357073B5F46B938E7 +:104C90001BE87E028C9BB9385289F83A7B09D7030E +:104CA000E7041DAA1E733E69D84FF5B3FA396E8129 +:104CB000F2DFF7559893FBD54C7AE19CA0FD54ACFC +:104CC0009C9BBBE853928FF32DFAE05CA157CC6517 +:104CD000317A24D29980DB8191563DB195E492F3EB +:104CE0007B3DCB25231EF08F96F7F3E61B7194795D +:104CF00085228EB28D4D87FE36CEFAB52BD6CF6784 +:104D0000C44BAEAC0E1C1F19433F493E8F83DE558A +:104D1000CABBBCFDB8DC7A5179C892F93DB4CFDC8E +:104D2000A8F7B41773FB315A0EFF7753B3E388FF2C +:104D3000D3C57ED8105E2531E76622CE7E8D8FFBEF +:104D4000BB370EE6FE91359B98EA4CBD781EEDA26E +:104D50005DA572E228E243FB3B0ADDA7B3D65B33D5 +:104D6000BED4AEBAF13D150EDF199192ABD438F630 +:104D7000C9D1F17FB1A900A7EB23CF71FBC8D6E65B +:104D80008D8DF37C43CC636DC9330CE5C65B433931 +:104D9000BE25153BD50498EFD5BEF646B4AF327D9F +:104DA0006AD3F761ABA6005D231F09B1F6F2F442A6 +:104DB000E247EC51C2C35F139F39067A3DD24D12D0 +:104DC000B3E8CD61E03346BCB46C2A177CA68DEC09 +:104DD000ABA4428E9F98473A9F8A7C03F9595E7B29 +:104DE0008687E23C38BDE7C1DF58BFB1914EB5D0F0 +:104DF000FF64CDCC1F922C7AF3D5DFFCB619E9F411 +:104E000018D029DE775F0BFB8EE3B4173EE3C27B3D +:104E10006DFE210B0FE23EB07257C740A0AFB5FA4E +:104E2000F0B9089FB585B778F0DDD2638378797BD8 +:104E3000B9EB34F2ABB7CB475CA5C6C077ED4FD822 +:104E4000E8C0756807FFCA7B33AC2FD7F7F7BA0005 +:104E5000ACEF6DF13EF19AF16BAFCA8A913FDB473F +:104E6000960F29457CC5CB954017831DE1EC7871E1 +:104E7000B906BE561FFC25E1D74DEF28E184ACEE04 +:104E8000F1FBC32E3AE4FEB79B96BD55A9C7917BB3 +:104E900006BD55E7F2B89A450F0D742C88A937BDA9 +:104EA0005436C9B1532B5815D2F1A203831CB93122 +:104EB0007EF3C9A5FCDC71E18AF8E3CC2935EBBDB2 +:104EC0008BEA558706F516464A1C88A73785A05DEC +:104ED0009C755BDB550F16F33C50E2C81A125B8FD2 +:104EE000FBA96EAAED6E9D3C9E45AFAA70201F7671 +:104EF00031FE5EE96392CAE32599AE7BD1EE6E5D29 +:104F0000C0E3912ED2CFB9FFD3A5E9F206C48F0C2E +:104F1000FE8EEFAA0C7E7FD015B955C6F85F077CD0 +:104F2000C73816EBF82D423EAF01BD17F563B72D1C +:104F3000C2EDA4BC308DE73EEF20BB26F17C1FB252 +:104F40006B0ECEBA8DFC3D46FFDDEDB3D12FFA5985 +:104F500075BA6FE311E37829FD51692F1E97600B35 +:104F60009653DC658D87F42D978BF3E3645B3BEB05 +:104F700045E729CCDD3BC64F97AC99ED704746A27B +:104F8000297F45B5D90ECF2F55699CA4BC7EA67A42 +:104F9000D583F53EB2148567A5E25E290BFE887ABB +:104FA000CD1ADF42F90F851877C2E3A43D217EEECA +:104FB0003B4DE7F686C15FA7F93B67A2DD69F0D9F3 +:104FC0008DF95C0E25E6456CF1DE61B0FADB26E575 +:104FD00085F578F8B555E0F7641F2F9F86CFDEC5BD +:104FE000C4376F2BE5FAF1341BC02C1FF562EE3F7E +:104FF0004FB29C833C25FA31D2FCD2C053A584B772 +:105000002CE289737E67E877891AD7EF20AD5C863A +:105010007C18F89FEC2168556E288CEA495EDFBF4A +:10502000A9D759F436B7D0DB128DF75D2D7A9A7F68 +:105030009C998FF66561D2D3A6A39F22AE1EC6EDC2 +:1050400069AB3EF65AA9D93F91CB8EF9C92FA6F18B +:10505000F74B370E3E7300EF639EF3313A373DAAAC +:10506000CD30E96B477D111BEE8BC11F0D7969C0F7 +:105070007D8AAED079E051D0EB3C20D78EDA2399EF +:105080000F015E6768374EF200DF3D3AEC15F7021C +:10509000C2EFB0C96FF5A676C87332A6DFEEE8CBD3 +:1050A000C0DB1D9B1E0F21DE865446F64982D0933D +:1050B0000E6D5237A33C6121AF94321AE8A48CEFF5 +:1050C0007F2E7B81FC291B87F6EC1736D6734B8924 +:1050D000FE5F2807BAD59B60FEF85EF9C6594FBA45 +:1050E0001642FEBCC04BA31EE84BE74B63F2897926 +:1050F0005C5F0279D41FF5DD83431CD5E1387C6405 +:10510000EDA636928700885329FD63E63574AF57C4 +:1051100076E3BA6D1467C272B8DEB6F6977999B8BD +:105120009E83C98F65C7CA3D438E9C18A93BCB603F +:105130001E6B4A7557D970E2B3FCBC49B49F6563D6 +:105140002FD9D3E2C199B73F5DC2E35E580ED7DFD6 +:105150008CF452FB73BF140861FC0AF0363AD7B0E6 +:10516000D6CB2AE3F07A2F3BB0D81FFF5CF489D46A +:10517000987351633EF918CB0EE9C9523E2F971A26 +:1051800036C987FB25B612CFD543F728142FEEBCBE +:1051900047A1FB84E75628DB909F397F54902AC7AC +:1051A00081FB29C19F3A847C1E2EE637394F31F1AD +:1051B000CFA95A9289CF7EA738DD9437DE9F8ACA5D +:1051C000A9F664EE474A203EFAC71C1EF7FDE18AA5 +:1051D00002C2C3846B4ED8E3F14B23FDF047FC1CA5 +:1051E00028E1D03FECB9C9943679A19FB9CD0B8A9B +:1051F000A0475655C6FDF7F3CE2791BC32DAF9CB5E +:1052000038FF9F5B7B92FA9F773E85CA131A3AED6F +:10521000A8CFCC8FFC9EFCFCF3CE27907C9BDBF2CE +:1052200090E6423D6685E4413FB1511E6DEFA67A9E +:1052300037359BE3FB1684CCF17D86DC813F7E779E +:10524000ECF95BAE3EEB6056749F0C399253A67F2F +:1052500017F152CD6B23FFA67308D7CFBBE303979B +:105260007D4E94678D03E0EFEA54E10F7C1E2FA181 +:10527000DE3811F50E7A57E9C2053C2F34EC08C62A +:105280005A1BD1EF3681B1E0A3806A553976762A70 +:10529000CFDC9F0AFD55E20FB0960955D31A356E43 +:1052A00017AB13F07C20D34EEFEF5CB8C06C17F057 +:1052B0003DAF8CAEF66FC69E4BA84892308F3781BB +:1052C000DF225EDCAEB7915CB91DE40AFAAB9780D1 +:1052D0008A8BA058C25C9DE88F1E2B6BEF90FFEB72 +:1052E0003D85215D1976757DF2A799B1F7BC176FE1 +:1052F00036C3E3E60D49A67DBBC19F6E2ABFEDF123 +:105300002B4DF94ACF00537E82F75A53FB89AAF9F5 +:105310003D951955A5A6FA17D91F8CFBEDBBB33FD8 +:10532000DACAB85E74080F0E51BFEF2D6DA37B92E1 +:10533000E27CA24AC0BCCA37CB86EF491EC677487A +:10534000F02D13E14736FCFD494CB35D9985FB62B6 +:10535000B633928AB95D3376A7D9EF9C24EC6EAB55 +:105360005DF27499D9DF7C00E39D7BB32E7BD398EB +:105370000FE211FA2B2A85BFC53A1F20035B21EAF1 +:1053800011224ECF3AAF256D7B4268D78D05398EFD +:10539000F7472E777E97EB0729CF5940F71F0F79F4 +:1053A000F939E1A19C87C6A541FE6006F7271FF4E5 +:1053B0008E75A7919FCB4571C35246BD3B1FF22FFF +:1053C000F795E8FD3FC3FF60F47B50E8B7C751BFD6 +:1053D000C57B866C90DB4FF77AF594CA183BFC606E +:1053E000FF6026F29957FA0E6BC478CEB7938765A3 +:1053F000C6D39B0F2570FFDF2B074A6CC86FC6DA38 +:105400008236B44326A8036C68374C7049840F6316 +:1054100055AE97FDA5CEF067876CC3601D15226E53 +:1054200079ECCE3DE3B19F8A36581FD28BDBA9E9D8 +:1054300050EBF68856837CF776AF530D131EAA4DBA +:1054400077437985A16755717F8D1FFEE27E2D61BF +:10545000EAB8BBA1FE1271FEB364A7F99DFC2A8BCA +:10546000DFA642E8591596EF5F9799F52C95050947 +:105470004E2F65723F4677FE908382BFFD55C45F15 +:105480007D2AE2F9FF24EE8FBF23DE59FA5CBCB31C +:10549000F4529D46E9E1BA624A8F8878FFE322DE42 +:1054A000DFEAF77C50EA68BA82E4A3A4C5F28FB5BC +:1054B000AE82163FFC78CFA85EC2BE6BAFBC02A620 +:1054C0009892A8E4E339C42D65BA67D4F0EEF1ED03 +:1054D0005F4D5FAA33BF2B7651B9A3E30E8C3F7BA0 +:1054E000492AA7F3EE43F70CD8561F63CFDD338A62 +:1054F000CBE9433718F701DAE8FC6CEDB267C83E38 +:105500005CEBCBEF316E3B293CC32437ADE95A59F4 +:10551000FC7E1E17BF0F94B4FC1A8287513E66941E +:1055200064D2639322B3A8BFB9CD33495E168F12FC +:105530007C44F8ED5AF5BDA4079C0DB020BEFBDD00 +:10554000EDBC443F56BAFBABA0BB4F855DF927616C +:1055500057225E608A788129E205A6881798225E24 +:1055600020DD205E60FA615D357D3FEB03A9247389 +:10557000BC45F91860D13FAAC1AF419FB97DD9811F +:105580005557C0BAE7B7CEA0757537EFF9F7DDEB21 +:10559000457D61B5241DC673E40FA72506F1DDA284 +:1055A000C025DEAF4BC23CA71F9DCB8BE951BD4A46 +:1055B000BCC7A6C7D4FFF0C0730CFD6DF36A958716 +:1055C0003F8999CF3C5F07D757306EBD87795E6EB4 +:1055D0008A7E9B5331FAFFE5F2DDC365817B915EE4 +:1055E000E62EDB1341BD60A2CEEFA124F94236C402 +:1055F000C76EED0AAFE18FEDB0737FEC9F93E3FBD5 +:1056000063554EA7623EF36A7B717FEC65CECF781F +:10561000CFA66594DBE457BEDCF7215AF585749F6D +:10562000F32CBE074DE76DE638D743B3FA8570FF1C +:10563000EF0FA668E88F943CB3888FBBF00CBB04D7 +:10564000CFA5797CAB27137005F5403C9984F255C2 +:105650001A0BA01FA89931F17B8F449C919F853034 +:10566000CEE87EAFACE37D25E37EB1233C8BF091A9 +:10567000D56AA6F74E1C9638BBE839F8684BBC9A39 +:105680002E7F9B7835A6A65D967DDA28E289BBDE63 +:105690008754FFB5F72109E511BE79E23C569CD34A +:1056A0004DF2E6AA147F2AF411BFA0D9497952130A +:1056B000CAF7B786395485C73B34613CC36B783E23 +:1056C000A1D1EF41A2FE427D19D9478E3CAE1719F8 +:1056D000FA38526A24F6BC48B7E83378590BEA4DD9 +:1056E000D26D744F6A92452FB1C64B58CFF30DFC63 +:1056F000FD6094908FC6B9CE65DAFD975BCF887B4D +:1057000039E765618C7B4AD303A457CF41BDDA8367 +:10571000711EAD4D9E18BAC23897587D16E35C6273 +:10572000F5598C7389CD639C4B6C7D8C7331EBCFB9 +:10573000667D19E35CCCFA73A9E57E82C57FC4A4BB +:105740001EE32F8C75E6AAC7683F376470FB61E3E0 +:10575000F4E93ADEEF3A8BF10014DFC3DE43FD9942 +:105760009EEC52E9DC406F421076E9ABDC4F758568 +:1057700018A70FC673003D6588780E239EC4F0639A +:1057800039FD7E2D02FDF44D9CD217E5C606BBDE29 +:1057900017E96A832499E2E7FB32B3FE7F8575FE41 +:1057A0008536537C88E1A732E2439CD536131ED957 +:1057B0002D7894365A36F9A1010E741EB67129D788 +:1057C000271153588CBDA12C68A3F75B6A60FF4377 +:1057D00031BFDF608E885F992DD66B7C8FB14F6CA7 +:1057E00038FF9ACC36DDCFFDB22167119E2B72783F +:1057F00030A98DA19EB48079B21E857EFD625E4681 +:105800007B1BF3D68B781AC662E4E9C5E72F1AC56D +:1058100099061A15FA7D844DC5DA1115F33F92B435 +:10582000108D5A7D38364E4B8A6DAFD07BC0140731 +:105830009124F67541B3990EE7872C76C54CFE7E10 +:105840008C955EADF6860D06C3F9DD399A19BFF762 +:105850002CACC49C2345D7CFD44735D3BAB7D2BAE2 +:10586000FE3F5FB7815FEF25FAB7F486713E969CE5 +:10587000ACB130BAAE79020EC7923B5EC6DFFF769E +:105880001A7F1704DE47D978E316A4CB8FEF77325F +:105890007AFF80A9F3EE85FCFC0D4E8ABB9ACBDA29 +:1058A00028CEB17E7416F52F279551FD79F725D3B3 +:1058B0007BBA7FDAF8E91094E7EFA505E6A17FEC63 +:1058C000E35E7E7ACF7BFE0FAF95F1BCE0BDC47680 +:1058D0007A77FCB4CC3C787FE4BDEAB7EDE80F3DC5 +:1058E000A1312D56AF9CB7C2FC1EE69BA3B9BE5A90 +:1058F0002DF3739BEA39FC1DBA13ADD76C138F0ED1 +:10590000137ECF97F8BA5C6378FDF9815B293E027C +:10591000DF15A8E8413F80F9DE19EFBEFD3B62DCF0 +:10592000F7323BE6A6131C996725A5DA167C6F3E75 +:105930000470A27702C5FB9B8E2BFB89FBEC6A7F70 +:10594000F4233A7E3840C6FCE3A3B9BEFF91CAEB0C +:1059500085BC89422E06F26625F3754AE67DA1B81C +:105960008CD31253F7023F9CD7FA3B8ADB7816E0C0 +:105970008672E484A7A3E900E4FF044A19F285795A +:10598000DE3F105CBF9F0F3B0CE5F36BCDF0EB1CD3 +:105990009D46E3FF69C3A164D2B73C2CE0E843FA1B +:1059A0001BF183F92DFFB91CDFAD98CF38BF738988 +:1059B00038292BDED6C07EA1DFC093C85A53FBE244 +:1059C00039C3BB9553609E9E0AA933B504F1BABD95 +:1059D00012F17A9EC0EB9A6596DFAFEA3E45715FA1 +:1059E0008B84DF6091CFCC2F195E912D12F362175B +:1059F000E3FB3CF60DC105BAEF7416139E98FA4FFF +:105A00001DC3E3834E049A7A33C2430EEFD3F7F1FA +:105A10007819D008FAC7EA5B9B46CB86DF4FB5C73B +:105A2000C07F5EF5A1A6E1A41FBA3A2BBC1CFE18EC +:105A300077FB2CAC3B1E7CAD7068701F27382CC2E6 +:105A4000DF73E6B9180E6E16499E85700AD819BE26 +:105A5000D3702938CC9BF9779ACF1BF8DE7C713C48 +:105A6000B8703E70313C18E1EFA9AB3AA6A667D0FA +:105A7000EF77F56C837E3EDA30763CE64F20269059 +:105A8000DFDEEFE0FE1020EFA2285E305BA7BD6FE7 +:105A900006C69D79884F1A7863C069FE86934DB516 +:105AA000B81F7F4B5631BE78BE77E42D142762E0D5 +:105AB00093054EC87F705DD47E00A666BE6AC5B7EA +:105AC000E7BAF87780E878FE3811B76F837D8CF3FA +:105AD0007B6E69BFFBE1BEDE363F9489ED42DCCED2 +:105AE0009E95988047000D47F9EF71CB010D10F19D +:105AF0006295CE82A8B71BEF3619FDD8C2663BF679 +:105B0000E2FB2FFCDD2BE37E4B57BB08B7CBEDCD83 +:105B1000D3E2DAE73685FF5ED5A603B359F6109CCB +:105B2000D748D72992CF5CBFB439B5E62CDC8F3784 +:105B3000F97D7596E1661F1BFB09FB614B2FF3A2F4 +:105B40001DD69060BEF73742F0BBB2319CCFD85221 +:105B5000F93817EB992BC5BD9C04D3FC0C7F34AEF0 +:105B60000BF52205FDE6F4AE9C59BFB8B89E8DCA70 +:105B700015F4E3F7582F85EB6586FF789C5EB8A790 +:105B800010E3229C1EC4FFF604F6567661F49EBE16 +:105B900071FF7AAEC013236FC8634FA5BE0FF7EF36 +:105BA00094EE4C47B93297713D98C647BF294B34A4 +:105BB000DD9F9E2BDE8731F2DF1F932BF49D7EA6A7 +:105BC00076A07F5FB52703CF111DE9A8DE1B71D733 +:105BD0001D22FE7EAD3DD2548CE743E5AE4E7CEFF8 +:105BE000F9A5210E86E70FD32ABFF7188FCF0FD064 +:105BF000B96392C0AB8D8E3686F2F554D73BBC2C80 +:105C0000A53CE61C3730AEF72AA41F64681817EAD3 +:105C100008CFA4F8DA8A101B3F13E5AE88FF0E34D4 +:105C20009AFD796331CE2503F9873B88E7A840F7D1 +:105C3000A6726BDC7E92253ECBD807D4D3CBD22E76 +:105C4000DE37236FCC276A9F70BF94617759F1EBE1 +:105C5000B2FD526EFE1E8CD52FB57E4CCF7EA9B5FF +:105C600063FE77FC524AB3D91F64DC733C346B92F9 +:105C70001C467B3E237B9B33C65FF70B31AF5F8BAC +:105C8000B88BE785FFEA45E1BF8AA0FFEA1AF477FF +:105C900069C28F554CF9C3E8BF223F5615A5461C73 +:105CA000C6987FCE64B1FEBDA692C02FC6C4ACDB41 +:105CB0007E3E97E6F7A0012F61BF027E123E9ED581 +:105CC000B2E8F75DE11FF47F4D367475E21960DFCD +:105CD000FA54711E596FE8BFF47B16C81EE2FA121F +:105CE000F9C95C829E26974DA1DFD73059339F17A3 +:105CF00025E5D9A3FE2E86E75336CB7952CFFEAEEB +:105D000054651AC58D29E8EF2A40BE772BF9BF14D8 +:105D1000AF46EB37DEE933D68D7119E857FDDFB6B4 +:105D2000ABEF1DA3BF85F07D7694FFED31D8CE1D7E +:105D3000A2B8B1C65EE36723FE3C2C89DF0F66BDC7 +:105D4000F7EC3F4DF0DC3C8005D3D1BFE5F6845045 +:105D50007F51541BF9E1BBBB0764DCFF8121C232D8 +:105D6000C145A7F1A2F77AF97DC3CBF55B3589DF91 +:105D700063CE0E25901C73801CC37354C31FE6C8EA +:105D8000F0D33B13CC2DDE97B469DAF438F2D1C0EE +:105D900007CF18FF57080F253293E8421E0D78FAF7 +:105DA000FFC04F6EA4FF173959A800008000000003 +:105DB0001F8B080000000000000BE57D0B7C54D514 +:105DC00099F899D79D9BCC244C20C1411EDE24A07C +:105DD00051061C9E020672934C200F02C3A3594425 +:105DE000C009040CFEB11DAD76D1B5CB0D8F1813D3 +:105DF000B5A3428B8F6D27902074DBFEA3825AB52A +:105E0000EDF05051A10E6A9116D0885171B7B5F1DD +:105E1000D196DDB575BFEF3BE7CEDC3B9940EC6337 +:105E200077FFFF8DBFF672EE39F73CBEF3BDBFEFD3 +:105E30009C3958576D8DE632D6ECB6469D167C4E91 +:105E40001CC4DC8C7D817F257D9F5B364C63EA65BD +:105E50008C953842CC0FED1C76A676F918637E8DB2 +:105E60002D1C976C77910A9D4D612C7475305BCD1C +:105E7000634C3A379AA99318DB3733E851E13D7305 +:105E80006B2C98054F36C2F3BE8BD1DF17367C3FA3 +:105E900098B1E9FD8FCF98C618F4C7363FFBECB335 +:105EA00053617C7C05DF39CECD62EA101C2F3412A1 +:105EB000FBD7C7C379E13830EE257F957107D80E3F +:105EC000D63D8EE6E1D55808E073AF852D41381DEB +:105ED00014F0FE76B06087331F9F0B0759018EC503 +:105EE000025EA9FD39CE5DCD62930C651DDE873E55 +:105EF000FAE8A3A1B01F38A435595FAC5AA91F8492 +:105F0000077EF7A614BE91F919AB54C78672874174 +:105F1000391BDA5F8CD3F44555E8E75BD09CCD2084 +:105F200030A84C06B05A443DBB32DA08F3CAB0EA96 +:105F3000E5E92195AF83CA5F55A78734288764FFB9 +:105F4000616532635945CCDF4ADDC4D52D50767882 +:105F50006DACD503C5C9F69E6E59C0B980B14C066B +:105F6000E52251CEC7FF3794711F17BF7F8A65E3C3 +:105F7000BE9ADBA92AA3752D51B372DF1F0BFFBE9A +:105F80008A5D85EDF5F713AF0E2DA7FD851D1A036C +:105F900070A9C77F29D0DEAA0E658676DBA02EEE1B +:105FA000C6614319CC87EB53AD5B613FD8426BB4FC +:105FB00053EC07BEEF1FFF15167326CB923DC43C72 +:105FC0006E8E6FB121C97DD6EB6F16FBAA3FEFB580 +:105FD000B2C6AE34FDC74BCA6EC6F9039EDEA2E65A +:105FE00025F17473CEEC6B18C0F3DB16ABDF86F3D0 +:105FF0002C83FFC1D3E266D156829F87AD46788756 +:10600000B3FD046FE6D15643BDA4D809FE4EC44784 +:10601000587F068BD2D3C5628C15C27E31D66D29CE +:10602000E4DBCEE9619907E16A6121F605D2853B9F +:10603000774078DEBA613D7B770C140F66C4705EE2 +:10604000F232573403E625219E00BEC9459AAA22A2 +:10605000BCBD93A9DC7F7F4D041FEB2CF50184C3ED +:106060005835B88DF6D31F62C171F8FDC0E633D044 +:1060700076AD1B989877954381FE178B79EAF36686 +:10608000DEC5F4DC8DFB86FD06F3D8BB3A3E021E6E +:10609000B7203EC1FBEFAB6E8E8F13D944C4C71639 +:1060A000D543EBD0E731E0796F0D2FC17D6656AB5C +:1060B000BF75326D8BE2198AFBC1F178D07485DA35 +:1060C0005946BCF06F16A00F8BA7398874A27F9F2A +:1060D000DAAF8C1FC2B8A38BD59F201C53F9CF5BBE +:1060E0009B0B7720BF7F6BF3A24156787FA41FFEE6 +:1060F000B31CF9CF104319F90FEEE7E6EF7FFFFB72 +:10610000C07F4FE3140A92F54704FF598EFC07BE87 +:10611000CBB86C9DF55730DE8A5B6C511B0CB1ED32 +:106120001B8BD2D2D75BDF84F941BF6FC3BEC440A3 +:10613000BE641CFCD07129ECCB29D546FDADB8E37B +:10614000E30AE43F0C99CD79E1C9F1A847EC4FC6C9 +:10615000A6B803E5D4F2D83049013CAFD7BE5C3FC6 +:106160003AFF3CABDE1ACA85F66F66867F032407CA +:1061700078F28D5025940B67A91F22BDFE8BE02F6E +:10618000DF53D57FC5F227A2DCA2AABF3196814F8B +:106190007D22F854C03DB52F9FB2975BC2C4DFDDAE +:1061A000B0B130C5372FF6B4239D27F84D29C7C7A6 +:1061B000CDBF4ACF47985EFF0CAFC77E2CB9D88FB2 +:1061C000B2C3DC8F95DAD99D7C3CBB8B3FF57A67F7 +:1061D00029C707FDF966762866B1215DAACE52F877 +:1061E000AE60BA2A97C2FB8CEB5818F72DE329163C +:1061F0007E3CCD7C72C47C3216F176A9F5C3C53CD9 +:106200000ED4DD606D21BCB445395E4E3AAF1E221E +:106210009D7391BC4F94137C389BDE83DC0AE1783C +:10622000A9FC76B958CF5CF18CA8130785CE338EC4 +:106230002BBA88F488FEEADBAC0938FB63307FD7E1 +:10624000DF5F36B15549D64F2B35D3952B5647FDD9 +:106250002D6F594CF39C580AF2CC95E41F11F5713F +:1062600086FBFE6988856D13CE332FD1CFC1BACCA2 +:106270008CD130EEE9B8CD0F62898D66FF92151C86 +:10628000D7B7FD331B3C4C03BA7A6E839769D0F0C5 +:10629000A720C7F019DB5044EF0F6CF053F910E85A +:1062A00077587E61834AE5C31B2AE9797AFDA7AF57 +:1062B000CF87713E0339CF94BEFDFF5DA9625A6757 +:1062C000E6B9F14C83F9296E4F36CA17E796F2F317 +:1062D000CAD5E780EEF9BC64312F0F3D0F88F91E57 +:1062E000C2F9D2BCF87C874E0F5D8BF837EB5CCCE3 +:1062F000660178B914A622BC64FBFED751EDDB32EF +:106300005D5D564A74D6AD203CEEB232924FDA0A49 +:1063100057B413B6A4C2E63E80F2F4F47ACE074F27 +:10632000AFE77CF0C6D2F47CB055F0A5C4BE8F5B5D +:10633000B3D10AE35E51C6BA6DC01F2E2DEA2D45BA +:106340007EDC39237423D2C7A5454C7566D37B9573 +:106350008D676CD7767B6514F0ECADEDF17FCA40AC +:10636000FEAE792DD9B3A09E8DCC5E00F0D926E883 +:10637000605B737AFEA83FE3621ED74F57D7E3FAFC +:10638000DEDEF034C931BDFE3A26F833E3FAF8B662 +:10639000BA567925F4B751D0A1DE6EE392D0C65239 +:1063A0004359563C12EAA9EF3CC846B141008F2D33 +:1063B000CE25D134F37867BBE7DE8C5CD233CE6474 +:1063C0008F32CCAB79C828D463F575BEB3478E59EC +:1063D00011BEC3583B03BE73FAB69D058A3BB94E46 +:1063E000E02311DA1F25F7027A01976F3A3DD31F98 +:1063F0007C923DC367E2673F2E35EB57F0477471DF +:10640000EFCF0B27B6B2E477738BF277B45A92EDE5 +:10641000490302395BC30C7F53514F85BF7C5E54E7 +:10642000A09E5458D297BA0E1D443A0F668651BFAB +:10643000AAF13BD8195D2F80FFB98AA02C27CB7217 +:1064400091DD540F8A26530DFA2E634B992A27CBE0 +:10645000836CC746A2BC92D6DBBEDD03887C7AFF84 +:10646000870E945BD2FA7AB223A4F512BD37E2E527 +:106470001930824ECD509FC1FD6CBD5A7D169F8351 +:10648000A6ABCF117CD7C797E3BA37B1F47AC5FB77 +:10649000D343CF9792FEE151FF1EEB6F063DD24FE3 +:1064A000FBCBEA11CE85A047FA492F7DB1D4A09746 +:1064B00026F545D54AFAE200F771A0ED743D0CE8E7 +:1064C000FCCD52DAFF88BFC982FAAB467AEC8F5115 +:1064D000CF32E87B03D5B3F47E17563E46F004393D +:1064E00029EC1B6820931C4C9465D8871229EEB3C5 +:1064F000025F195F36AADD3E92B1DA42BD7D5E3B96 +:10650000EA11251536614F79DAD5D18C1D970CFD2E +:106510004D63ECD55EBBA877D737C23F5DEA3B0140 +:106520000F4CFDF3FD19EDA8A3D9AEB18A7AE73B74 +:106530002AD4CF285277BBA05E3E60C9BF2B07C7C5 +:10654000577767C1F8FF7AB9527F783A967B87BF51 +:106550000EE57B0ECCAE973370BEA5610FECCF136A +:10656000070AEA65A83F5AC0C7DF5936A65E1B81F5 +:10657000700AFE89F62D18F1231F84F18248D73363 +:10658000803F19E97B5019D7B3E43207C1A9C41180 +:10659000B321DE94E4335583799416B1CD56C09778 +:1065A000578B0F0E41B8BD8C76C814EA3FB30CF17F +:1065B0006C09F49FD5F73B6719970BA9DFC37739AF +:1065C000F4DD62FEDD0CA489197CDD4D76AACF2BAB +:1065D000C3798779FD3CFB84C8180FCEF34F51B7C0 +:1065E00025D9DE5666AF6F1A4DED87537F5DBCFD32 +:1065F00085E16CFE5ED7978E80A98CCFAD39DA929B +:10660000203CBF59C6F955EA93B1DE2138CE71A9B5 +:10661000D73D1FD63996FD211AB89CE6E1A3793FF4 +:10662000CDE1ADE3477ED9EF421A5F979FE6D9C827 +:10663000E7D91FBEFEB94F1D3FAF28FB8CEC731886 +:106640006F16CD67199F8F8E1FE3CB3E8D227ED8AC +:106650005D1FDB54E4E736A675025ECD9DF4C7E10D +:10666000467DE8BB655C9F3F5AA035223C328B7A61 +:10667000697F55456146FDE4D9326127C11E5BA79C +:106680000A7EA970B98C7806F332E9974F0938FE73 +:106690004CF47F5CE2FD17C3A7B6891C4F56C23C81 +:1066A00096887AFDBB043DB1FA76DCC79209EFD239 +:1066B0003EAF282B4DD9E7E277901EF57D5E5D76E3 +:1066C000958E272182FF05E8E136A40798DF57055C +:1066D0003D1C2DE85D847A59CB9FEC6C07314F8EC1 +:1066E000E7B03E7F2BC081D9A31AEA032E7B8EDF51 +:1066F000A8FF95F8BAEA50FE1BE8254CFB21E8E517 +:10670000CBF67BA3A0A7D4FEA1DF7F48474F5F3D18 +:106710003051A7A70D34EE5EBEEEFEF0B73F3A78DB +:1067200058EC43EA53EF47A7CFDBCAAE6C37D2A78A +:1067300001EEDFA2F1437CFC0BF12DE6E5763FE8AC +:1067400009DB685D2978B550E1FD33ED5AE2BB3ACB +:10675000DE2F38705DBBE6A6F1FEC9B8DE16017FFC +:10676000DDDED1F15987E313623DD565167D9F3A91 +:1067700069DC060ECF34787DA1F17F68A4BB1206D8 +:1067800086F3E0247D5D68FD5BC53E27EC4199C53D +:10679000D08E93BC1EAEBFA8C11F1BF9A33EFECF77 +:1067A0000E14D58BF17F62E433D565DC2F9159C48B +:1067B000EC82FFEE37F2A905089F3C7A7F88DE0B5A +:1067C0003EFA65E96BC07238B680EC9766C6D2EACD +:1067D00003928DDB8BCC3B91EAC1CE21FDED987706 +:1067E00034F94D47B34C15E9A6AD4821781CF39513 +:1067F000294D689F2C1B3B91A4AFB0DF9F04FD483F +:1068000005FBE169B02BF08976902AEC2055D84140 +:10681000AAB083546107A9C20E52851DA40A3B0881 +:106820009F36C763EA905CC2030FCE478A2DA675D8 +:106830004851FECC3C3795EC1ED917650AF9190E64 +:106840001FB20D45BD85E3CDD12B3D0EF4332D5048 +:10685000BA5818ED81D2D0676506BE19E493670B6C +:106860007D1EC72485FEF95CA6C19F39F16A45E803 +:106870003DDC0FADFB0DF4F205F52F58A20DF949E3 +:1068800091358A70735EFEB886F6C8EF54D6CD484F +:10689000EFEBD250BF97EF60E43F746DD734D21B5B +:1068A00001D3B2BD8CEDAF7B86DAC781513BFDB819 +:1068B0004E30AC0CFA6E7CF10D560DBE6F09DBA2AA +:1068C000A864B6845759E368CFAABCBCADCC46FBDC +:1068D000F6D9E84C2A5F2BFC54FA3C7F29F62B2E84 +:1068E000ECC111E1A8239D7D7EECC08337EE85715C +:1068F00032434E0FA8418007910AB47F4FAEDBC9E7 +:10690000B0FDB12B340D9D9CA7F24353D085DD66BD +:10691000D7285E21AF7B82FC7CA71CA12983617FE5 +:106920008E6FECE27267496D657E76D27E491D6F8F +:106930006539976F27F6EF69A1F55BE46E8453DC48 +:1069400011DD81F039952FF99B606B4E5D7E6024DF +:10695000F61FBFE9FA7DBFC0FACB25BF05DEC7F73A +:10696000C8644FC54BEFF4AE31F09DBA42298CE3B9 +:106970001D2B58538170C9ACF44B193948A75DF7EA +:10698000A0FD747CDDA421B8BD2DF9BBBCABB0DD8E +:10699000CD4F1D9D0AEDE425B6A9B86E5989117C2D +:1069A0002E5134AD1BFAFDDAACD0CC7298E7B2C6EA +:1069B000F60AB423E586FBB6A01FE592CFBFD582C9 +:1069C000F33DC5E4EE5678B6E66F94F17D4B7893CF +:1069D0008CF30DE6AFB416A01E502A77231F6F511B +:1069E000B7C897C2FB4B156BFDF5D97DE1D1F220FD +:1069F0009B15BA12E7D5EC5D9385ED7EBF2104EDC2 +:106A00005A4BD3DB8D4B04FCEAC6EEDAB112F163CC +:106A10008FEC41B8B45834EF4A588F764D96BF93F7 +:106A2000F5FDEEF172CE8F9786617F15DA1FE237A2 +:106A30002BCB1F68D750DF1ECCF7AFCECE64C7E09C +:106A4000E4779D334A97971BE4649F71F3D74C41D9 +:106A5000B8B58878C6E307BF4F7CFBFAE9C1D5F823 +:106A60005D7CBBB69DEC5C4D6668A7F767679F02CF +:106A70007BD93328F9FE91722E475A6E023860BDD9 +:106A8000EFC0D18274F6F2CD0747A2BDDC26F0ED4F +:106A9000D41E99F85BCB72573B19673ECD3B19E08A +:106AA00022EDF67A50EE8F554BBF51FEFF06FEDD0C +:106AB00083F0FB6FC43FC28F25E58FB6A3BEADB296 +:106AC0002ED223B6D53D23A7E3231B9784761AF154 +:106AD000C4E5E37E10DC577665721F53BF3BB53DBE +:106AE000764F5A3F88D8D75D03DFD7C770FC6F94C5 +:106AF00073FD84ADCB1B907D7CAF559DFC18D2CD32 +:106B0000CD4E4F27F4131476AD73392BB3237EF893 +:106B100006EFD0404E1E11F4E319675D60CF453E8D +:106B20006FE3C6FFE7D01FC89B1076694B96494EAE +:106B30001526C70B31CEDFA99C8FF599A672880D5B +:106B400066B12263FDC5A6F229476C24FA15B47D0F +:106B5000B21FE709D3D7486EEE9BB613E58F3ECE42 +:106B6000EFCA255A579390F3A7C6B128CA7957F8A8 +:106B7000AA4DA550FEB985F55AA6E1E4D4ECD2A9F8 +:106B8000E4222579B84DF26F2A45FC2F957B379288 +:106B9000FC526D38DE95187F84F2A4B8FD4CB741E5 +:106BA0003E95CB0E53F94AF5091683F69E95EEF005 +:106BB00020E8FF4A66684FEB3197CF969BFDB5FD05 +:106BC000F1058575672D00BC8BAF5F34C802E5FF0A +:106BD00028B7A68DD3FC48F8F3BA403FC1B8E2E32A +:106BE000A09F60792FE827587605187D77CAC2E301 +:106BF00023876EBA9EE854AA6516670E2E770AEDB3 +:106C0000FB6B82EF14CEE2783400BCB706D2E03DD5 +:106C1000CE1BF53E9CF7F9FC90179A37C3A0C7002E +:106C2000F49188FAC9C12F385E527CA8FFF15AC48A +:106C300078117A3EBE61BB182F6A8AC7EE536D4445 +:106C4000778121CF7AF37DC6F136125CDA1C1C8E77 +:106C50007A1C2CEE9BB813F10C9E836CD0FE8A80BC +:106C600094769F5CE76CA678C353E50AF5E7B277A4 +:106C700051DCC1754EA2FAC784DD94EC9FC7F9B10F +:106C80007FAB3BA997FEB9FDEB70CBB6C56A8770A9 +:106C9000BBDDD33959288D501E57E4A1B8F031C659 +:106CA000F52A997924A4EF79817C9E8FC1B431A013 +:106CB0005B33DB4DE5EE09D0FEE45EFB04940F3F51 +:106CC000CC0A798330CE8161D248E4E3F11F872E6C +:106CD000F19C272E021BECB57A6954AF751A1F9DE3 +:106CE0003F63567C9FDA3EBE776F1EEAC33FDC27C8 +:106CF00013F16AC3ACD131F97DDBDD13E07AC2B8A0 +:106D00007D7B096FDB340BAD6B69D81255E09FCBEF +:106D1000363F46F2E79A2536BF4AFADEBE5FD4A177 +:106D20005F5FB5F9C728587E82E4EDA9BD765C2681 +:106D3000BBF6C655F264285F3B6C25A217BB213019 +:106D400054E8C121A2A393952109EDEC6677D72FD2 +:106D5000EAA0DC0CFDEE403EC5BA1C4807A7D427CC +:106D6000B270DE378879FDD0618EEFEBCFF703E9A3 +:106D7000E306C7111FD2C0F16BB3CAC2487FD75A0E +:106D8000BAB250EF6E09CC58699F8EF0398B11164C +:106D900036EB83CB770426D07804AFF83E7B14F92A +:106DA000793C8B8DBC05D7B74FF20346B303373D13 +:106DB000E5ED4638E17E9D875E2FB45FD7965A3465 +:106DC000E778B0939A8E2D6D03BEE27EFEEE95F6C7 +:106DD000CB013E2CBEB40DE4F1A2406025FA1BEFBE +:106DE00015F920F71D8AAC447D09088DF8CFA1BDA7 +:106DF0003D61631C3895CEFBCB7BC8AF18581C4E49 +:106E00008A2E386F1CAE19FB4FF3FDBB625F3C014D +:106E1000F5BB0198475989FA3D7C1E2FE07A230B78 +:106E20002CBA009FE27C2318F334A3CD1F7A2E7E68 +:106E3000B131DF2681DF629FC7EDB3D7D6C0FEB484 +:106E4000AD1B33D8A624EB078B75368B763ABD5E27 +:106E5000774B3EC53180F1CA187720390EFD2F16C9 +:106E6000F33E9E19FA21B66B1B2FA93BA05DD0F70C +:106E7000FB0ACAFF40FB13E61D943F77A09E264FF6 +:106E8000607EE730B41FED9A9057D62FA0D1AF03A4 +:106E90003904FF66EF992C84EF128CA3C0BA975C7B +:106EA0006C25BC7A2B7CD90E11E7D09C28FF717C15 +:106EB000D847B982E3BB2BB4D641C216E450D9748B +:106EC0006AA738860A3B15DA05BD67B6E4535C410C +:106ED000EE2D033C0A86FFE0407D7E5F268B205E20 +:106EE000B85487D66D887F2C0FFDAE622ECADB3278 +:106EF0004BEF20E86F93FB938A2D30FF6520AF3175 +:106F00008EB6E20E478F513EBB411E217DBB420E25 +:106F100086719C65B798EBE1EF6EBBC16E762D96DE +:106F2000683EBABE2017D94DED5DECEE8F6DD934B9 +:106F30002FD3FBC501EE1FD1F9CE53E56A0FD2273F +:106F4000E0CB7BF8FC5E80CBD5B8D74AFB16F7B117 +:106F5000A8C5827C412138C51B2D59A8D76502FFE1 +:106F600040F6E16A68D2982F1DBC3E71A01D02BB9D +:106F70001D291B86F070107C3D758C0DC2BC1384DE +:106F800097215F6A85F7938AB9B94978B9592FC1B2 +:106F9000CB25F49B54786D723FAE62FECFB2694E42 +:106FA0008FCD736178F5858F7B4B3E7C0FDDF73A93 +:106FB000A7F585D33B011E77690E6DC9C3F5BD20CA +:106FC000D60F94E120BF25C0A915F5127B6C24F2E1 +:106FD000CF93421EB2C0241EA7615D790BD2F8BDCB +:106FE00075B958382B985B9147F65CCC3E38C95F31 +:106FF000FAA74FCE5FCA5446F85CE6B145A3B02F5E +:107000008724BF1DE77328DBC222960BF331D8EF2C +:10701000828AF3F085CE80397E9AF0A70C707E9735 +:1070200086404F42BB670423BFCB3F17713CFA3405 +:1070300064213F48856D590BFA657A008C4EF20346 +:10704000B316E40775629F5AA6DCF7D660A8572CE2 +:10705000563F031D6FD9390BE903CDE316503FAC02 +:107060001664FA706A7A00E170ADCF4A7A400FEE8A +:1070700034D43B6F651E8CC75CEBFDF4B21EF84E3A +:107080002BE3F0D26EB04437C178D7B070169A0AAD +:1070900019F65B6E447D2153FEC7292BA1C99D9D26 +:1070A000D7EFAB872D768EE379A17F67EB7DA31AAF +:1070B000F02E58655DED01F9906DEDAA1D8D71966C +:1070C000394CBB45C63CA3DEC501A83F3A7BCF8EF9 +:1070D000CD283F0267489E95BEF2F26AD457F5FC70 +:1070E000C185CFAF598570D7F7E1F3E05DBB315E65 +:1070F000B11CE39EA8E7087B448FBB2E177184E583 +:10710000B7707DA0F9976C879BC389E2B743F0DF26 +:10711000B0DED86CCE378714AFDED42DFC5697780E +:10712000797F36E86F2DD3FF140BEAC7434EA4C610 +:107130006779BC97EC20E86A70C7636A27C237E4B6 +:1071400056E6A0BCACB4537CF78B2F98FD0B9CBBD0 +:107150002FF1FDAB5FA4917F7FABE7FD1B78DCB720 +:10716000DF7A297E23E2F1FD55970EF3001C061508 +:107170005E3AD806F0B1A37481F57C087A29E2C79B +:10718000F3025E2D5F219E060DD46CA4EB3B2DEA2D +:10719000BC19A857B5DB18FA65CEFACEA82AEA477B +:1071A0000AEB65B08FF367BEA7623F39F52C6C839D +:1071B00072C61CAE5F7ADA6D77E52B286FFE4A79CE +:1071C0003572977FA1815FE4CDE1768EEE3FEEEFE1 +:1071D0007BDD7F9CFA7E8F90C3BA7EDE1CB5919DCD +:1071E000094F5ACF67A75894CBC36E537C0EC3BACE +:1071F000774C64ECAA733EF2EFA6FA7DF5767F6DCC +:107200007FF3FD1B96D0FB71E7EA89DE7FB4A19185 +:10721000CA5D1BC2F47C7CC37A7AEEDDA051FB69A7 +:10722000B733A28FB3B73AA31BD15ECD88BD6B2312 +:107230007D5B5230EF051100E9FEF48D97117F68F8 +:10724000B684C60DC27DB664B24EA0D3E6ACEE2EB7 +:10725000CC6FD08615913F8ED9352FD69F6C2A6280 +:10726000E8673A2E45466543F93418333BE0D9F3D5 +:10727000B1362A1BDE87ACC054812F3D3D928F6F03 +:107280009FE1DE81E36FCA0E4F61A0C7BE719875A2 +:10729000A27EDBD2F968EC23E0177F7AE9C9D51822 +:1072A0004F386DE91A89FCA1B5B2A203E320CB7A6D +:1072B000623ECCAF9B59F3C70617E0D5518CBDE8B1 +:1072C000F9C9D3927112C0E09D8DC5B0BEFB9CA2DE +:1072D000FE8355180FB46786BDDC8F3D7AF5616873 +:1072E0005F7749E8562C2FAFFA64A51DF874DD4589 +:1072F000BCBFF257D5DDC87FEECC087B81A3B2833B +:10730000AFBCB31AE777E704DEFFD1C3EFAC467E2C +:1073100064AB67C12EF243CDF448C8BFBD602FC037 +:10732000BAB65D31719084FCB0CAA6E7917898CE68 +:107330003700455DF2DD711BE8D34BD1AE03FCB8DD +:1073400046F0EB04FE0360855E64473DEDD6615D6B +:107350005ECC8F691B195911E47A03E9632DF82F6C +:107360005CB345A33CBE05CC93FF10CC375C23E255 +:107370006F1E1642792EE9ED5848BD1DDA057F9D36 +:10738000A5A07E207BED26FD0B7D26384F6A6FC3BE +:10739000A75D33FA376C37055B302FEA98EA6068EF +:1073A0006F306DC90BA3A1FF6BC5B71666E8CF465A +:1073B000FA4605E67B57A0FE06FBB6609DA3C738DC +:1073C0009E9BF1385E458A1E21893CEF6B1ACDEDFC +:1073D00025D4CFC6D3BCE8BD1D06C579D925FFF39A +:1073E000B9C8CF875A385EB2C3518CABE8FCFCE811 +:1073F000A38F39301FC3897C88C739148CA72C13FD +:10740000F5A5F6FBA47AA89F26F4DF1967A39B10C5 +:107410008FA58EFBA6A39D98A0F339328F4F7534AC +:107420009DC0F12496C930BF6CF3336A17C6EB9E3A +:107430007FF1CC4E99F23074BCFC7CA73A02E01389 +:10744000D6F346FE7D27E2E1D1321D4FFFB04A2D33 +:1074500036E68D7CBC13FD9DFDE689B0DFAE6A1C6F +:107460008D71379157C2FE95FAB32DF78F413C9637 +:10747000AADB3A32A68BFDA3F8E3C855D8DFEB169A +:107480005E7EE5C5913B116F03953705F260BF162F +:1074900007EB29DE5732DB9CA77CBC8CC77593F9C0 +:1074A000DB0F527EACB592E3D5A2B2F86AAC4FB511 +:1074B000DBF47AFDB9B628AAA1FDB11CA8AE00C6BE +:1074C0002BB672BDA67886B7BD89E473C81A8772D9 +:1074D000F60343288FD556C9FD60CBBD0F9FC43C32 +:1074E00026D85E4532E0EF697B6C15F2A7563CB9B1 +:1074F00001F43F588D15CA505EDA2BAB51C247F6E6 +:10750000E668433C6C08F3CC467DF81AC0BF18C04F +:1075100027D3FBDD93A43F30831D745512CF55C68E +:10752000F6233E5D7DD64C17337BCDE59273E67234 +:107530002933DB31E5B2B95CE13197E778CDE52A53 +:10754000C55C669B393D8094203D3FF51C04BDD150 +:10755000E994F5A593D2090D2AE6FD37829EEFF452 +:1075600024E985EA617D259FFFDF16F483AC0D5881 +:10757000E95CC6B6FB37CDBE18F5CD22843869A5C7 +:107580002407566CB6903EBA421E313B904B79E3CD +:107590007127EA4B325312E317F0781CCA97CC904C +:1075A0004772C077D7153B98827161968013D99B3B +:1075B000A9FC04063A8EFC63AED82F907C01E41738 +:1075C000BAFD02924C5D8FE386DC944FC7FC1C2E03 +:1075D00056F80FE1E27674A9DB2763FEB51CD6A04E +:1075E000BD6BB3190E7243EFFE2F50FE803DA6A275 +:1075F000BCF3C5685D995E16B5C27C32D555640F83 +:107600003180D318F83E74472ABF31C3EDEC9C1C7F +:10761000C2EBB3D14514A774A35E8DF68C3BE44551 +:107620003E76A0AE95F2F43F6556BF13FBDD1AE43B +:10763000CEE86C61F7A4E4D759943AA287472E812B +:107640007ED03FBF7EF83134192C1EFE1EECF610A2 +:10765000DA194EBBD0D3834CD326505EDE93B3F3FE +:10766000B0FD286ABF697D98F8F56691C70F8C5FF9 +:1076700042FF72BDF785133930F64F66737AAC97C7 +:10768000DD1ADAB7805FBF4EAC8BF02B255F4FD889 +:10769000257ABE476AFEF7F3A2BF7BE658F4763A36 +:1076A000BF524D7972DA9A5501D217B99C3DFAC290 +:1076B0001AE28FCD3399E04F0FECDC0FFCE93B076A +:1076C000FEED8D45888F118B3F03E0F29DFBEF9B14 +:1076D0004DEB8F5A3C95D0D54585BD6F2C42FDB200 +:1076E000C24EF9C5CDC386E610BEFA9882E430C713 +:1076F000175C8B706EE8702ADC3E52B32B86EAAAC8 +:1077000001FE45CB51EE5D25F00AF4E3D7020EDC15 +:1077100082F0418C1FB4A9722FE2D7E058388E65F1 +:1077200059B5FBA30AF28F70BC00F9BC8A09C2F0FC +:107730003E925F8AFA6F53DD0D3C6E03FB7F11E2D0 +:10774000F159FB19846710FEE3F0E4726D48A53926 +:10775000BE20295CAE5D95123730C8B533467CFB40 +:1077600064B6F93CD3698C2738D01F7686EBA3B07A +:1077700080218057CB193FF7857E7DD487D1AF8F8D +:1077800079BDA86F6A42DFD49C7F799EF733BADF58 +:1077900047C403362E511D73A6E07B46F830F544EE +:1077A0004442BDBE7036F703CC381BA2787B9DD314 +:1077B0009CDFA53FEFAEE0FC7EC0FABEDDACEF7F04 +:1077C00047CC673903BC1EDF377FFEE239E6784CD1 +:1077D000B3F7CBE5CF27E4FE85ED0942B6EF3DFFD9 +:1077E00006F90BE6CF5CED45BBAAA1D8CDD0B1FC24 +:1077F0009DFB3F26FC7505ECFE4A86F87EDBC798AC +:10780000B7D5A8480CE3A42DF9CD84EF9F7A99074A +:10781000DBE70CE3FC772DD81B56C083391DDCAEAB +:107820006D5059D469B06BA70AECD6F1F9C9E25B87 +:107830009FED56108FBB54F4F70E017641F1018194 +:10784000B7320B1D3C08FD0E096686511EEA766FA5 +:107850004382FF1AF299C538C55393FA60C9E7DF2E +:10786000227BD705F62ED24B43C4323D9D1D37F502 +:1078700094D96E76A97653DE339E3F33D60FB295F8 +:1078800072BB24DF1A45BDE06CC2DE0C511CB85936 +:10789000B10ABBD44AFE1078127C7A4E707BAC27BA +:1078A000B2EA20DA259F2AF630EA9967F73F386F67 +:1078B00006D1ADDD8FF095BCC01F90AE7D92E2CABF +:1078C0004FC31F4E88BC6B8C3159916E9726F3B015 +:1078D00019D2FBF70FA2DFF2C3613686F2F43A91B8 +:1078E0007FFDA4B0B3AF53F87E5D27E4CA75220FC5 +:1078F0003B0D5F20FDFB2A903708BF54FE7095DAE0 +:10790000608A37F6E51366FED0137997ECEE08F23D +:1079100001C0E7F573CCFCA2BFF8634FC4C6FD4BB2 +:107920001E6FBB8DFA291F540FEF7707CDF994F620 +:10793000C862935DF2D7E7279C6FE8FC5F46FECFF5 +:10794000FAD28B6C0F13BD4851276B52903EB45145 +:10795000B7237D1CB1F9316F38411FA774FA48E590 +:10796000FFC0E7091F389F37F0FF38BEFF10F00453 +:10797000F520E0FF41C41B17F07BCEFFB56623FD69 +:107980006C933489F00EF8FEFD16C20BDB6D506E61 +:1079900043BCF0F7DDEF3EFCDFF7E5F8FFE3FDEC7D +:1079A000672AFFD7F7F56FCDFFED730627F83FE69F +:1079B000DFEAFB37560DBD3427CF948FA8A25DA414 +:1079C000E723EAF6D0B917735789BCF3A3D89EF919 +:1079D000781EE1D5B399C8AB0C1D4379923D7CFD6F +:1079E00038B493D90F78FEE1AF2A12F5BFC0EF1279 +:1079F000F5BBF9F77A7DDFFCD4F872B4533A843DD5 +:107A00009CFA9C32DB63CA53857975CF31E53772B6 +:107A10003BEBF88B17AFD2789E6A0FCE4FCF8B4CD3 +:107A2000D869DA30B2F3743BEDAD1787ADC2FC1202 +:107A3000E6EEF2A23EDCDC9445FE915DB3151167E3 +:107A4000D64645605EAFB6CFB1201EBBB759097FA1 +:107A5000F47CA3DE1787EE14F9D99FD07C2AF9783D +:107A6000BA9D78E6C58B56893CCEDFD37C02227F57 +:107A70005BD8951FE1F71CCEFF4EF52A5F8F6E870E +:107A80007EF6621EADE7D9E9EA1FB1FE3AB4B70C43 +:107A900074FEF61D4332C4B974933F36B388CBF3FA +:107AA000B55E7E5E6AF93257B4204D9CF69FE77250 +:107AB000B9DE62491F0FED9C51E6AE243B32568879 +:107AC000473E967F227B447EF32A3ABF63637ED48F +:107AD000978B3772FBB0F80A6B3B9E3D3F25F6ADA6 +:107AE0003FFB70B01AAFA57870878DA19FFF42F65B +:107AF00060E984ADE4C794C10EC2FCB1B5FF4BECA4 +:107B0000C36D57AC24FBF05390432CAD7D3848A691 +:107B10003C92F516F203CADEEE2D2897D6827C45FC +:107B20007F986EEFA5DA8117B2F7EA813F513E11D7 +:107B3000EC03DA938DD015F2E3B5297663AA5DE8FC +:107B4000DABC9FEC42EF70E0B3E867EFC70E6CE978 +:107B5000C70E74336D36FAE724CDC21E627DEDBCCC +:107B60004B3EFF1AD9810D422EA7C2A325B280F841 +:107B7000AD0413B2E6A01CD924A35DC0FC763FBAC5 +:107B800047D0FE33EAA5EE0516FDBC198FA3CC90B5 +:107B9000E9FE00FA43FCBE3A93FCEB1155C479FCB4 +:107BA000F93B50EFDB25FCEDF8F7E79C3BAB16E724 +:107BB000CE18E6F764FD2DCE9F3DE6C53CD97A117F +:107BC0008769DBBF87E1F9F8FA220FE9FDF5A8F72D +:107BD00018F8887EFE6C17F2778C0B0EE3F9353DB2 +:107BE000E3EA4F60BC4A63B9136C86FCB8FB057DC1 +:107BF000F7E4F376CD3921EF04837EF95D51DFECB4 +:107C0000D0ED5C46FEA5372FF6EF349EF77BA852E9 +:107C10001272497DB092E0A9D1F885B3D487B1AC96 +:107C2000DBB3BABCD0BF8B0AFFD38E4A8BF83EB809 +:107C300083BECF15F70CB86351EB50639C88FB11E2 +:107C40003345E1E8A34D12FA191BF1BC08C6F1B7A0 +:107C500046FCC67B4F7E50691179F4EA0F2AF3E89F +:107C60003CF80FF1596CDD7812FDB7C5059282FA28 +:107C70006F8B23F6AE85FCEECCDF9943E7A60A11A5 +:107C80008F4AA02DFABD804F16A27FB26CEB58B27E +:107C9000676341DEEF6C16B6233E54B2083DDF9BAE +:107CA000197A16E77F60DC4C7B2ED05120B0603310 +:107CB0003E7F3A33F893CA3C0E177E5E8FE34BE368 +:107CC0008CD07E6C0F7A17E57BB87C51E2F77DF1A2 +:107CD000D81CFFF895D01B1F53D517B1DFF7A7AB02 +:107CE00087F1B96F66F065825F7FE702C5BE809C51 +:107CF0007A15DBBD698D746517D239F8D7F9FC5850 +:107D000064649A73F0FA7747845D78340BE4BC01BD +:107D10004FF609F9B35DCCCB561FADC47CA836BC79 +:107D200000039E7F2A0BBD8DE3B515ADA4F87AF351 +:107D30006298D304ECBFEB9E7C00E55A9FE569CBCB +:107D400095F044DC27BFC6AD1DAAAFAF9F63F3AF6C +:107D500044593BB11AEF43499E0FFCD56AF4BBDA94 +:107D60009DBCBCF795139D283FD72AE27E9653AA67 +:107D700062C48B2F045EBC5EAAFE56E0452FCEEF98 +:107D800078198FD3A5919F9F613B170BD17C61DF41 +:107D9000CEA5DB37D88F7FC3F7B01FFF8E4FD88FAC +:107DA000CF07B21FFDF97DEC551CAE476A2CE29C53 +:107DB0006E50AA32D007CCDB5975FE79BBB0DE30ED +:107DC000EF4155E9E7EDA9E2F3CEA9E27834A46AE0 +:107DD00000F36E9CDC4E7E79A66528965998960233 +:107DE000F4C0F145C238D76CF4695BF8FFB8FFA95D +:107DF0007237EEABCB3DF93DB41B6B5FBABF434668 +:107E0000FF3EF353DC69E60B6FAE6E99867A4C7CCD +:107E10001D96A3F151ABF09CE7D67CBEEFDF8E8FB1 +:107E2000DAA915831E53E01F6301BADCFDCA831D66 +:107E3000F24883FF5DE089EE7F07C874229E2C4ADA +:107E4000C407BEDB817AE3A24CCD8B71B0CAAAF61F +:107E50000E8C331D4DF8FF7FB31AEBF5F15EAAE9E6 +:107E6000E840BDCEE551B6E4A21DEEB1F861E56C87 +:107E7000EDD990960BF39FFED223A3F17E95458317 +:107E800079FF5BE3DB1A707EAC88EB87C077AE4688 +:107E9000788EADE2FCD8E5511D79D88F17FA01FA3A +:107EA0005AEC31CF7BB1C2CB55C7BEDDD0827690C4 +:107EB000275841ED47F071BFC260DE1E9CF7AE4609 +:107EC0008C9F1D95D461281F5FAAF9CDEA00F0753B +:107ED0005BD6663A472BFBCCE7E7F4E7CCD91C8F9F +:107EE000D834AE9FC2FCE6E3FC660A7BE0F5D2E044 +:107EF000422CBF6955436E1BF185BA2ACE17BA2EA4 +:107F00004A738F8F6E8F007D2FAB22BA8FCC43BA0E +:107F1000EF01BA6F42BC88A9E41758F2559B07EDF0 +:107F2000BD3C318E5DE2E7C74106533CEFE9A663F5 +:107F30006437CC9CCFF1FDEBF3B83CD8324F97CFF0 +:107F40009115D8EF22E817F3D56D9D4FC9149F1BEB +:107F5000D17518F582E66B6CFE8D30AFE6CEEBB7CF +:107F6000E339E99363DCE4B73C99A364A15FA6CD50 +:107F7000F3C028467A8EF4C1618CAB0AFCB8E9A53F +:107F80005777A1DEFF9AC2F7FBD5DA8B3FA03C3AC8 +:107F9000055A1BF45C492E76603EA25C2A531E8E65 +:107FA00041CFA27821FE390CED37B9576A53269399 +:107FB0009C5286A09DEAE5EDBDACBB89F2143C2C39 +:107FC0002419E3938CEB71B2D0776D37A9774F41C9 +:107FD000FEE9B179104FF4B8DF4201FFD4B89F9B9E +:107FE0002914F793C43D4FAE25AB28BF45F76BB8B6 +:107FF0002ACDFA57E65C7319F463533CB06C09F769 +:10800000D397817EA6C0FCCB113FA15C3ECD1D8DD8 +:10801000C1FC0E25F3E6287F4916F30AE46CD17003 +:10802000DE8798A717F3C724C59CCF54915BBF394F +:1080300007FB75E74CC07C3CE83617FDE6ED556E56 +:1080400093DF503FA7A5EBD3478777D1392FD003D4 +:108050003CA87F1CC3389903CF7FDD27613913A368 +:10806000CCF9ACCFB92DFD1EA406710FD211FFCEF5 +:1080700018FA353E2C621E1CA601F388882F1DDDE0 +:10808000857E9D819E3F6FAD5DBFCB7CFEFC1BBBA3 +:1080900050FE7CF8B95DF417DE8571C2FECF9FAF4C +:1080A0005B83714509CF45039C8E542DD82DE71B6A +:1080B000CEF3B1FFE8E1E7F9F8F9F3DFBEF4E1E868 +:1080C000BB2624CF9F6F9C73FB2EE3F9F36F1EFD3D +:1080D000E91AE3F9F3E6A3DF5C230F4BC6E76FAFC2 +:1080E0006D5A837C09E4FECF89AF5FE0BCEDEFAB56 +:1080F000F879DBDF563988FE2E74FEFCBF2A0EA30A +:10810000C75F403FD29CA81F655BE9FE10C6C2FC5A +:108110007EAE14FBF739A197FC7CAEE07BFDEB4310 +:108120001F135CFA3937FF6695D2DFB9F973F45D36 +:10813000CA395FDC2F7ECE36F4C72AA37FE5B0D9DB +:108140007F02F29C55931E168A71BB42D3E5BC4D4B +:10815000BC675683FEF54C85B867814514EC6731E2 +:10816000EB3A817209E52FFA89177BBA4E503EE34C +:10817000884B292E7FB6B6F42DAC8F62B23B9E455C +:1081800000BD13E92DA79AF3559237D8DEC7381CE6 +:10819000EDDC9FD55A6B198CF78EDC69D1F1F79A1B +:1081A0005D28B7CF3A40EE529C90A9F6E2A41CF4A9 +:1081B000577B3B117F7B1C4C9767443F0462FAFE60 +:1081C00012D2D75A1D66FAFA0AD3DB8F2039ADCB0B +:1081D000FDAE23234D727FD2CB23C9BFA2EB09FE94 +:1081E0006A37E587F437DEACEAECD52DBEE4FC5EF9 +:1081F000A879770C97D3EA0ACC971A51FD6E27C657 +:10820000C58CED857F6722C25DF79379AB1987F73F +:10821000DC84BC9C82F533D1AF94D737AE0FDFCF6F +:10822000A8C6F69379FB0BAD07DAAB349E9FD3E378 +:108230005F0A1F5D9EA6CAFDF61ABEDF5705D45A17 +:108240009C5FCDC1D76F0DA6695757CDF5F79A92B0 +:108250002E2FCAE3B691DC2E4C6DF75E35A7A79A98 +:10826000830F8CC27E3E6C4AEF77BA23D16ED3283F +:10827000ECEFEC7EDE0EFB5F60E8B7A19AD3695BA2 +:1082800056FA7EFE54ADDB71C13504DFBB397C414B +:10829000FFBD1EE1F7DECCE00DF83E41B713B8DDBF +:1082A0000676D73A82AF5D237DB9CDC1F909EEB527 +:1082B000EDEA347CC967E64BA9FC28C1D716320D1C +:1082C000CF29EC9B19BA0DFBD7E3C117D2976B4AA4 +:1082D0005482438F5867AA3D7CAD80C31F175A4C08 +:1082E000F78AE1F97BA3BF63AB68A7F3FF7BABE73A +:1082F000AC36F2FFFB5EBE64AD91FF336DE41ECA87 +:108300007B71F2F2832FD7AE16FECE08C1F30E8139 +:10831000AF02DFFB3BE78EE7FFB17D6D3FF1C58725 +:1083200093FBF430C1FD16DD6FCBED93D4FB243A03 +:10833000ABFBDC2751897208FDC1467BAD53F02BA6 +:10834000A0BF4EECB764822D984EBF9DB450E4613F +:10835000F90EC76CFAF93985F32BD40B1A45F9E8F5 +:10836000952186FC4C8A5AB8DFA025628A733E911B +:108370005887FA4435D77F553634A9E71C2D8CF33E +:108380007BEB803F1BE7B946CCF3E870A8E7FAC265 +:108390006AA35DA6D72B0BF9FE01FEFEAC7A8AC15B +:1083A000DF00388B72AED83A31AE927FC2E26F8274 +:1083B000F1AA8BF6939FB60C3805E63F94FB4AED85 +:1083C000E836AD985CBF199FEFCD0CBD8CF39C5384 +:1083D000FC8E1FF5CFE28DB142F47703FE1FA91684 +:1083E000FE18F24F09BAAF2909791718E6F586D8B1 +:1083F00087E691E9E9AF72A1AE8727FC1627AA07A5 +:10840000E4B7E07EEBECE152BBF17CA163115F3F8E +:10841000D89D6F5773BBB3BB9ADBCB67701DCDC3C1 +:108420009AC98EE98F8EFAE69B4DA07CB465B91689 +:10843000BF95BF223F919E27A78FFB61ADC58B7271 +:108440004DCF1F1BF7DAD03D94E7B84EE879DA81BB +:10845000DDA87725F2C5B49F359AF2C5B467769F3B +:10846000375F4C7BAAB191EE4199147740FF771D9D +:1084700073EEF1C27E2D1279D57FACFE88F21C7F9F +:108480002AE82C95FEF5E752E1CFEC8FFE736BCC1A +:10849000F49F5D73A789FE735ED9DB68A6FFC7777B +:1084A000A35DABAF63D82BF7E8F4EFA931D0BF5C85 +:1084B0007341FACFC3F6A9F7C7E8CFE13509FA1F30 +:1084C0005E3300FA1F533330FA1F5393A0FF313548 +:1084D000E7A1FF850B385C74FAD7ED079DFE13F416 +:1084E0003B3C22A9C23F948EFE2725D6A14EAA313D +:1084F000D07FC2EF3896D337B346A4B4F4FFA86E4A +:10850000374C5A8D76851E8FFB69B5670F97FB2117 +:1085100015FB4DE8853173DC4D8F0FF58DB7F4D623 +:10852000227D2DF559D940F2EFDA7C8329AEE4C2E1 +:10853000380BC66FD8FFDF71163D8F35359E901A08 +:108540005703FDFA6B35797DF56EF88BDA743CC113 +:108550007D49E4F93205F37CFFB7E4F7EA7E1A803F +:10856000D3D61A6187580C76C896E9A107117E7A8E +:108570003CBF05E3F9305F67BE3503F347061ADFFA +:1085800084FEA3621F54AB611F0A67A93B70DC9A8B +:108590008336A29B05D5633B85BEBC8BF88AB84762 +:1085A00028359EDCD74FC7E8FB1FBCB2AD41E3F7CF +:1085B0002EFD88E859E8F7BA5F6E5E95E8477FAF11 +:1085C000069FA831F85925D14ED77BD8115531F2E5 +:1085D0008BD74BCB9EA67E35A6598626F50C7A63A3 +:1085E000D41B76DE47F18A04DF79C3DCCF6F451CEC +:1085F000E4F552F500F6F7DB4AA6F3D3E7F93E447B +:10860000C2D90638C1FBC334AEF037A6B1575EC13C +:10861000EF2AF5F9EBF7F8C4CDFE70987F9CD60BE6 +:10862000AAB8C5C027556BBC18FD2BAE22A6E0FE2C +:1086300066FAC4BC4FF43BEF5F1AE7FD728DB0578A +:1086400045BCFCBD99EA69ACD7EF15E819C6EF1532 +:10865000B8142086791DAD221EB82D5BBF175C9320 +:10866000310FA4A56821E51BFEAEC3A9301E677EAD +:108670000DF95E2DD3FFE201A4C36A3D8F7532C7A9 +:108680007355F091EA943C9F6A66F04BE5A7A30B03 +:1086900033FFD8D3B190F2991A234E05E3862F6F9A +:1086A00060FC5C3D53B36BA7127F20782D883CBAE9 +:1086B0001DE36C2F3039CC306F37C0EF3790E13F7E +:1086C0009CC7CBD9E138C65D25C5CA9AF249FFF4EB +:1086D000539CF70D1BE5DD94635E0DE6C31459282A +:1086E000AFE612C4351CD7CBA298FAE95A1FB5637E +:1086F0001E71AD2AF762DCB6A9AEF505F4B77C3879 +:10870000C1C22E82F1E74E36DFA720757C700AEFDA +:1087100023AB1E60FECBFA53C7C61F32C021776E53 +:10872000FAFB15986D199D27D2F360502F5C382EF7 +:108730009907F3870DF1F187C0961D3597E3C5C6FC +:1087400025A151730D723E79BF41EF41CC17EEF177 +:10875000F273782D914574AEAD354B637EF463C7EB +:108760006E8B38D0EF576465191827F26A24B78FDB +:1087700008F883AEB511EB5D1DB628C2738F2F1CB0 +:10878000C4FC8286376CC4BECBF1B021DA6F5E8E3A +:1087900067B2DF4271F6B93E46E7D7E5E27D1AC21D +:1087A0009F2976C20B6972536CD2640E5FBCD27281 +:1087B0001EEC53CC18CF65E6783BCA67633CBE6FAE +:1087C000BEB5FA1AF2733DAEBC4D6222EF8ED1797E +:1087D000A09AE89D1AFAAF5F80F1085F7C1C0F75C4 +:1087E0007C013AA17B8C7B7EC1EF13D6F35CE51450 +:1087F000FC95221F107FAFF5A7F0FD14FEDEDF3ED3 +:108800002F989B653A8FB0C7CE082FDB002FD1FF82 +:10881000DCD6B1F730E29DD661E5F1771054B88E21 +:1088200010DE638AFEA318482A83DC6A5BD045E722 +:108830008E95AF8FF223FF6D1BF7A403FDF26DF948 +:10884000B90CFD99CCAAEE473FD5F2476C161E3FF6 +:10885000E770695B9F4378C05844C27DBD0E8404B5 +:10886000F6AFE3D37C411F8D9B397DAC647E09E577 +:1088700077030BD2730D0BD3D3C27C745FF7D2B0E6 +:1088800085E412E0A77C3194F76843A8AC5EEDC89C +:10889000795FE626FBF9CEF5A1447CDF207F4B27EC +:1088A0007C46F76324F0C91BA2FBB4D6466C9487C0 +:1088B000B8ED7E9B4CF905805FDCA9D0A5E1FE2DCB +:1088C00007FCA275A6E46F00DFAAC0BC8C15222F9E +:1088D0002391E7C1E20EE4138DC50EE267A97897F4 +:1088E00006CF8E8F36E42FACB8E5A900EA8189FC6B +:1088F0000D81577AFEC6DA5077C577A0FFEB543961 +:108900008CFEFDD47C8D15B7A4CFD7C844FE9C3611 +:108910006F7F19E5E77BE7830E30BD2FBEB91D21C0 +:10892000D9787F457351A805CF8537FAED944FD894 +:10893000A8DAD2C6AB1E15FEDBB30B40F5BE12FDA6 +:108940008F5D5ECAE31A377B3FE2979EC7B52785E6 +:108950004F35560A792E87BC2807ADB3D41FCCE516 +:10896000FACC8FE6A23C12BF63208B76C7CB34BA19 +:108970006F6372B5595E817CDD4BED47F372AE904B +:10898000AFAF97869E9E6BF4EBC654BAD73A713E52 +:108990004E5BD780F6966E7F3D125F4771C488BAF2 +:1089A00052E57EF2F3E743CFECBD389907C250EFB2 +:1089B0002E30E5C796B2B1A6FA727992A95CE1B9F8 +:1089C000DAD47E8EB7DC54965AEA28CF54F797BB98 +:1089D000C5F905AB6BC428CC4B3D2EE0DE871E06E7 +:1089E000788E01E07692E026F2FA2E1CE7E0707BAA +:1089F000FDA53F34E0FD98FDE5156EAFE5F662EAB2 +:108A000033797F2613FDBEDD61CC0FFCE5DCB77545 +:108A1000FDEF239A97C827D4E335EFCC3DADD77F40 +:108A200082FB9A7A3F6B6BEDC90EA17FFE9EBE5F03 +:108A3000A6DF9B79FEFB5A6F15F33B5AC0ED5FD65C +:108A4000D86BC3FDCF28F4B056C3FE5B443BD0D7F0 +:108A50002CB55392F742EAF12C3D5F5C8A087F55B2 +:108A6000D86C1F67D426ECD58C5A837D8EEB34EA04 +:108A700069D9B5093B3A1BC7E9CF2ECFABED639758 +:108A80000B3FC2DD14D7D2EFA11C51FBF02E7E0F9D +:108A9000E58E4D56CCE3B2DFF73EA6C6A0FD8FFDB6 +:108AA000EBFB9F57CB74BC1845EF53E24FA97836C8 +:108AB000BA56D2EFFD1C4DED93F195B47CE28A5A83 +:108AC000BBDEFE0A5C7FF23ED718C1FB7401F3EFF8 +:108AD000C0F899839F8F2B7170FB20A762F15A8C8D +:108AE0009BB4F9464F4459502AE0A8F73B7E7A6878 +:108AF0000A8E5F8217B34C44BD85DFAFF6A6D0A7C0 +:108B0000FBC3D3B5B59C7E529FA9F7B316D4DEBB89 +:108B1000CB9D9FC4FFA2DA6D9722FEA7EABF9B9F61 +:108B2000095935F4AB8DE7BF8BD3E2FBA49CF80861 +:108B3000EEF179F8C89D284F2E437D959F7FD6DFB3 +:108B4000FF5D6D81699D724503E5FDD738BA72916D +:108B50004FCB23AC267E91DA6F4D91CB54BFC97BAE +:108B6000339D17381BE1BF177136B2EA30DACD9F5B +:108B7000792505E3B2776E889EEC1983E799C57D68 +:108B80004FC3A45809C6D3A3F5BB9C429FC6FCE7BC +:108B900075B5E2DEEBE86394E7268F789AE2B5528A +:108BA00087A52B43413DB09DA1FE97E98D127DBC69 +:108BB00029ECB69A221B5E0D98980FE0C1FF213C6C +:108BC00010766231E21FFA3773188DDB10B590BE54 +:108BD000581E6962785F4F7FE3ADA955F8FEF9DA58 +:108BE000C95F9CE9EDB2D37DB1897B6BCD7937CD7F +:108BF000826EAC093A0BDE41F310F7D65A9374B08B +:108C000081DEA7DCBFDB5FDCD670FFEE16FC4EEF2B +:108C100067B398DF79EEA5BD9BC6F91BDF6FFDEB4F +:108C2000B9A71A843FF1A15A837DFEC15C3E4F90E3 +:108C3000BF8FE03C40FE7E97EA85FCEDAAE2FBC2D6 +:108C4000BE7CBE8562F90BF22D0E2D79423D00ED02 +:108C50000FFD3A4BB178D2E55FC4B83E0A7A9E4622 +:108C6000F6E6F9F32F162E6E24FBF285903B8CFE70 +:108C70006017E64FA0BD39C3E9F9F3F22F6C946F8A +:108C80005136CD1D55104F997F33D2E59F9B77F11B +:108C90003D11BFEE2FFF02FAC86506BDF4E4C8100F +:108CA000D9452DF9F6F00E8F09FE12FF9D3033FCE9 +:108CB000415AD1F8762B531EF2A4813FF33BF0DEEC +:108CC00020FD3C08FE25E233586FEF223F9AC43C5A +:108CD000DCCF96026F9757A9D0F559B293C47E2680 +:108CE000F0457992E17DC3FFF06A06C37BB4F0DE04 +:108CF0001DDCDF4CD85FF493B9D2F8E5127EBCB42A +:108D00007E3973FE4DDF7C1B467A9C04FBC37FF7E4 +:108D1000CBBC1F7F79FECD26C2E732101868E797DB +:108D2000B310E9DFE5A07FA35F57C78340CE5702AA +:108D3000B89F8764BE9F7DF79DF3C7D95E6E079786 +:108D40007BF2E8FC51F2FBD5F24AF144BD2F6F1ED5 +:108D5000E75F817EE2C837CFE3F291EE894679B4CE +:108D600097E70D8CCBEC0E231CAF94DF3980DBDB57 +:108D7000E599549EA360BC3934721EB49FE82D6DF2 +:108D8000CB477CB3C70BF0BEA1716BB91DB7B488DC +:108D9000DBE18C45D5A130BF4003B73FB26DCAE6D9 +:108DA000A1F0BEBCA1F408DEB933669EF9BCFC7F1D +:108DB000757ED0C3B5271A50FE9E14F769C09E4732 +:108DC00077E4F7A51BA403DC7759C90DA39D94860E +:108DD0006E98C564FF85689FFBA59B543C2F9A4AFB +:108DE00074F40FE572AFB837CE444788F7B71BF875 +:108DF00020F03986EB3F04428BF236EC5D4427D9F4 +:108E0000402764578E7EEEEFF1F7CBBE3C7DC4FE6B +:108E10009BF963610089F06FCD17F57BAF0A67A9F5 +:108E2000B7201E7FE37F081E5E15509B713E89DFD1 +:108E3000D7D1FBE33E2918AF5E1D4278A00C463A1D +:108E4000FB5E9545C8593EDF641C3B4AF18D061810 +:108E500007EDF0B74A435BB1DF0625E69E847EB599 +:108E600080C5BF4941BD5771A0BE75E17B0117990F +:108E7000CE2FA63EFBBB1770D07C3EBF1D29F0FD58 +:108E8000ABFD1E98F067A5FE1ED83322BF34D15F1C +:108E9000CA79E6BDF3B252E6F3E5CE33BF5A167C8B +:108EA0000EE1C96495F2B5EE9BA9FE04CB674BD4E5 +:108EB0009FCECB3B5FBEE1CA471B7D493D507AB593 +:108EC000F57AEE3F983820FF814DD8F7579DB09A3C +:108ED000FC02D3BB334D7AFBD567079BCA7F6BBFC0 +:108EE000439552636A3FEE5C03CDF3CAA76F30B57A +:108EF0009B10BBD954F69484CE22BC261DBEDDF453 +:108F0000FD94F84653BB03753306A13EDF9F5F43D4 +:108F1000CF33D4E1F4E9BC02DA7FA73D4CF7BAEADB +:108F2000F9857DFD1CE6DFA7FDC3FF103EE00A7C4E +:108F30006613F97B745FE1B6BA673CE9E805ECD8E3 +:108F4000ECF926FF3BB7630FCD6324CF014F73E6E7 +:108F5000239EDA13783A18DBE7CE37AFF327D87EB3 +:108F60008AD13EE5F793A5DAA73D7FA17D3A76FE4B +:108F70005FDB3EDD21235EE876E8652C44F6690B75 +:108F8000D8A774EF565694CE9769C76C0CEFC5D628 +:108F9000EDD386A2D02EF4F3361475B14B012E0D0D +:108FA00009FBB0FE49B40F75BBB5256813F7EF8810 +:108FB000F348689F127CFBB54F4BE653DC33D22B52 +:108FC0001552DE9EF0AF4CBF1EBF7FBA89F38155AC +:108FD0002F955D8FF61FD07A05E579021FA7FB96C6 +:108FE000DC877B10DF0CF7088CC67352BAFFFD1FBD +:108FF000831CAF9B3FDF9A8DBF5B71F4817AEB6B73 +:1090000030EF653E6B3BDE6FB094459E47BD6BDB3A +:10901000F88574CFE1A78D0EFDFE81B4F766E9F205 +:109020007D85E83F53DCA325E33D5AF05CB1B87180 +:109030002EC69952EFD162111E4F4FCD73B7336FC9 +:10904000FB1702FF13E3159ABE273D23558F60EBF4 +:10905000B91E50043DA07EE416F948A9F13B17C69D +:10906000BBC79FE7BE51113FD1E3DD7A3ED06DF122 +:10907000E2DD980F6447DD8BFCB8B147713F12F910 +:1090800041ECC0A3E8FFA2789F816F1BF2815419C5 +:10909000EF5D157167AC97E9F76822F7E6032A34AC +:1090A000FFE2E0A39597633944BF635A1A1FB95B87 +:1090B0009E99F4AF7D3DAE340A3FE4A6F9147FE6F5 +:1090C00076F4D7E733DD9FD04CEF156ECFDF9A7C77 +:1090D0007F17BDD7FD9A5E6BDADFCD9828CE671576 +:1090E0006B8C5D017A4D2485BEEF147C4AE74312F8 +:1090F000F2218C378CE0F92EA9FD3D24E436D8F717 +:10910000DBE773FBFEA1F906FB5E71F3DF53423F21 +:109110002BFA233C9D070F627CED538C77F993F774 +:109120001E49A379FC4F921F51C5BD47DD78EF5111 +:10913000E93F6D651807CA7CCE4EF740047BCD74BD +:109140005F1230D3B9414FE5F139F9FCF1B9CC16D2 +:10915000467AEC35510BD9D98D777B88CE969C63B6 +:109160007E55618973B17A7C175640F9174E1167A5 +:1091700076B3B08A710809EF4B42FD3A603E27EBA7 +:109180001CDD98D073713DCED1667C5CD260D66B0D +:109190003516223DD925EE5F4A8DA37832BAB85DE7 +:1091A000AED8F9B9DB247DF0F5A6C41B9BEA965234 +:1091B000DCBA679CA438C9FEB098E03158ED3A8417 +:1091C00071B8A5B09EA8BF2F7C5CF88B04E8E3F1D2 +:1091D00099E3E92E6525BB2DD7A0BFA7C4238788B7 +:1091E000755C03EB88792E1C5F0FAAC76CA85F9E85 +:1091F000992FE2383EE6437CBCCCA1AD207B8B5955 +:10920000FD285F5A3B3A5A884F3F62A7FBC5F1C021 +:10921000A6DD10F73A50F78C1DFD089F86B3FD4E72 +:10922000F23344BD883F9759465AF03E80D6CB9BD7 +:1092300087E34F5FB7B65F44F79204D5D2A6951483 +:10924000CFB3596C7ED1098EB798C721757DE16C7B +:109250005388F050B364317EBFBB4AF1CFE51D4E59 +:1092600005DBCDF786492F73818E46F761E05D04FB +:1092700043313F9F115FFD4A606F00ED324F819D8A +:10928000654F4BEA19D9D66E3FC2B79675D3B9B9B7 +:10929000FF040AFD4DA60080000000001F8B08009F +:1092A00000000000000BE57B0F7454D5B9EF77CEBA +:1092B0009C9939E4EF01034E30EA490419EB80131D +:1092C000920281202784400841277F19BC50260A3A +:1092D0001AFC73EF28B6F2AC6D0E24C498A8441F94 +:1092E000F4DDDB6A3BB2E05EF0DAD7B457FBD4E7DB +:1092F000750D7FCAAD8468A0166DF5B64191ABF7C8 +:10930000B56FC54B51EAB28FF77DDF3E27734E3202 +:1093100009F6B55DEBADF7C615B6FBEC7DF69FEF34 +:10932000EFEFFBF63E3783E6050F403D84BD700D41 +:109330004033C4B98C422F97B7401F97EB60884BDE +:10934000001D92A5001B8252A2BB10A02882FF7CA8 +:1093500019A056052F1401748706B36359005DDE0A +:1093600008401E8089FFEF5984AF19A06BD30024F9 +:1093700031047448D88EE3985702EC2BC6E77A3351 +:10938000F77FAA04629E32ECFE7B90CEAA404B830C +:109390008B4BB07DEF1AEEAFD68109F900574770BD +:1093A000B2A9D8F8AD70979FD76572BBBF437A86D4 +:1093B000D675917EF85E8B9A657A72B0B9C3FB9BC5 +:1093C000A120F0EF6211FDBB4E3B7B3DADC7902F5E +:1093D000665AEFE3783224DA73709CD60084BBF1CE +:1093E000E9C2846424700F6A00B8B4C7CD8C78B821 +:1093F0007F6644E6FD3728912A5A3FA8A06DC3F541 +:1094000037403DD71B1E02689F0C50FE716915AD99 +:10941000EF5751DC5331BDA7F37BEFFEEED0D439CB +:10942000F85A54FDE14F347C741CA0BA2F04B06B81 +:10943000F2E0FA482835DF7C6B9EB288C4F3BE6444 +:1094400044CA225887E77BC391D9008FDDAC713BBA +:10945000C0F065916C6E5F1C21FABC28DA4FF906EA +:10946000EF718E67977F638DB7A4F8705609AE0FC2 +:10947000F2E5F04C7D6CBF3BACF9EBAB5B80F87B6D +:10948000CA877283FB6A8ECC6E5571BF11D077E4A8 +:10949000E0127C1D335BA3D7F1FCAB797D2ACE8F24 +:1094A000EBF17D88F44B337F43C4C7E362FF06EEE4 +:1094B0009F25D6FBF8CD823EE538AD3E05CBEDC904 +:1094C0006B7A43B43FD1FE926144A97F0462664E39 +:1094D00038356FDDDBD8653AF52BDE6F28B8FD42F5 +:1094E000622208062F0038916DB59B735B5BCBC77A +:1094F000BE8FEBD8C874B3E65987624AEB5813B1F4 +:10950000E8AB88FD74BC0CADC4A74EE257568A5F29 +:109510005FB3E834BA5C1E71F3E78D61A53A1D3D77 +:109520002A52FCFD2AAFA34FCC5761AD039F6F7544 +:10953000F2FD1E7A8EFDAE3762DFA0FE4AA514A7AB +:1095400075A11C1A12F2D317D0F674E390F7DE0C53 +:10955000F6B826F57B4BEE0D4B28C27F937ADE6E74 +:109560003FCFC1E77317C51EE679004257A2DEB6AA +:10957000587A1B958D69AC9496BE744E86E412D2CF +:10958000CB2024B6E13C95BAE11B427A6C0CF68103 +:109590008EEBDE58F06252A675EC95FA26E1FB0BD5 +:1095A0002DBE6E0E6DF31959A4677D4A2CC4F3FFCE +:1095B000679E6F86D8D7952BC5BA16AEB4E8161439 +:1095C000CF6FB2EBB5822E0345E9E5FA17D582EEEF +:1095D0003FAB887D8FF69573C5D6D9A8DC00FB0D0F +:1095E0009DDEFB45B5187F64BC65B65C45F632DD93 +:1095F000E362FC9B94E2DE99D8E5939567F766E118 +:10960000FE1606853CFDECB54F376E53C8ACF50130 +:10961000BDB7BBF965359635761DDBA3B11FD07894 +:10962000237623A4F968BFE77A2B73CB90140A0D35 +:109630003777EC7B4A6F231897A5EA3F6E438AFB86 +:10964000519EDB542E5F6ED3C09C05F04A5B80EBCD +:10965000AFB6E95C26DB82FCFC505B98EB47DA1680 +:1096600070FD689BC1F59FB65573F9E80AB1FF25F7 +:10967000D71A574570DD67664294E4267399625E97 +:109680009EC3FBD15AD2D0754E59CB6BEEFD24BD93 +:10969000D46F29C414F20F2BC054483E564258C907 +:1096A00043DDFB6071EC0DE2EBB265751D79B8DF4F +:1096B0005537CC2E203ABDBA387242E89909446732 +:1096C000203A62D9BA30F673EA4FEBF0CFA1F1132A +:1096D0006C6F1E27DE91BF58A826F6914EC310F37B +:1096E000C75EC7D16AA137F443098555E0F8CD03B9 +:1096F000C8A0B25054F569A41EF863BFD177E43016 +:10970000DAE9C7EB33E2DDC8E773C62185E4A406D6 +:10971000D743FB58856EF13DDB6FE05F6610EB6A67 +:10972000AAAE0615573B7952C3AEB39EDC02869AA9 +:10973000AAE77AB65D15C6FDACDFEAF9D619E4EF03 +:10974000870737838EF2B33E30E88DF1731F3FB742 +:10975000F7D58D7C7FCF0BF043C3F884E872B6CC8D +:10976000F894E8F6C2E2C8EF85BDB4E997DE9F2D14 +:109770001E9653F3E3DF920B19A9F5E15F055CE652 +:10978000AA57AA57B8FA5769D7B8DA75880F56207A +:109790001F3E3214F68F2B02D7BBFAFBF779260156 +:1097A000CAC3CB55C25E4196719517FB776ECB86C7 +:1097B0006EF2ABD542FFCF78CD00D9F3370A974B85 +:1097C000B7E2F3ACDD32F8D10E3F2CC1A419C4E7E7 +:1097D000014F781FBEDEEC07B667363D027542AF1B +:1097E00067D7495C66261AC028192BA776D9230BA0 +:1097F0003B8D0C0F136EC97C60D6DC6E3DD56E8F31 +:109800003322CFC9661E6F7D97D0BF6BEBB2F38852 +:10981000AE3017E612FF7A8D1FB11C9E8B419CFC67 +:10982000F878F3DAE3D8755FB26EC275FA3CB84FD8 +:10983000E4FFE1E61A3981F2D81328DAE32FA452C3 +:10984000360847FCEE5D7D0FC96F669D2DE742FE31 +:10985000D17BC243683FE65F088159E2B61786654F +:109860002F0CCB5E1896BD302C7B6158F6C2B0EC45 +:109870008561D90BC3B21786652FA81CD9579DCE19 +:10988000F3FB928DBC1F5F4294683757D5D1BAC2A3 +:10989000C28ECEB6EC373EBF899F970A7BDA250D84 +:1098A000DE0DC8E75FAEDABB5141ECB78B7412FD39 +:1098B000F16BABF6EE350B527E75340EBA95F83E71 +:1098C000756C79DD2AB75F5DE21BDC44FD616B6F6F +:1098D000B8DE611F36587C46DCB0A10E4B75959002 +:1098E000C32568810DC417B5257FB882F48FFC7F2E +:1098F0009DC3BF46EB2C3936C5FAF1FD3B683FAB43 +:10990000AF11EBCEEF7F6C9319223F34EC21B9F805 +:1099100057C4967B502EA0A3375CE7987FEA2A2194 +:10992000B7B7D78DD0E5DE3A877F5F525C32E84526 +:10993000BA3C72C27F2080B8AA4116E3FFA1E67F3D +:10994000EE37C5BA1EA873E139B0708EC0358827CE +:109950002C5CF3DF5A5B954B8FF7110171F463DBDD +:109960004EFCA77DD6F8EDBCEF6A31BEBDBFAF9E01 +:109970007890F787ED0FF3FC969F1C582ADADBE806 +:109980007DE49BAFB4E25779841FCD49BA74237646 +:1099900083B82270420C3C28BFCB0368CB90D767BA +:1099A000247BDDFDFB0D1CD79755FA8107D779E89D +:1099B000C4F1FDEA545A17CA07B2F497751B362949 +:1099C0008B53F271AA6E03CF83EBF8DB3A074EE8B4 +:1099D000B5E8D950149E29E13E074F9CD8AFE27BF1 +:1099E0000D3EB13F30DFDC6FE07B0D19BD57115EDE +:1099F000FDE7136FED5710AF0E8CD0EF37ADD46E7F +:109A0000CF3370E257FB793F9ABE83F6E3D3A4B01D +:109A1000A9D350BA97D6F59313EF31DE6D9822C6CD +:109A2000FFCE89F7ACFE86772AE32DEC8F4D8D1A99 +:109A3000D8B8D32067D3A88BFAF493AFB776D1BE4A +:109A4000B54815F72F10E33701AE2F4CEB7BA7F588 +:109A50008BAC0FE9F012D3C1D22BE467B42F0DFE0B +:109A6000F8A9A5279EECE7817047E6A838C62E5FC7 +:109A7000AD11FA010B46E4FC08F1FBD51A415F1B5E +:109A80007FE1F37FA1E7DFB1F462C08A2B7615BADC +:109A9000E395B72D7DFB67CB5EDB780DDF7FA38E73 +:109AA0009F8B71C7D259D0E9CD1303AD247747EB13 +:109AB0002CFD0E89F70FD7B9F1DFEB5477C8E548D5 +:109AC000BB556F84C4DB422E33605F29F1C5B0E41F +:109AD000F43A9DEAA880DCEE8302E8CE13F24A76DF +:109AE000E3AC6567916F06D115147C8EE375AD9676 +:109AF000A6C00D0E3936A50324C7DD5E943F4DF098 +:109B00005B294FC98BAFDE7380E4A5C70BA938442E +:109B100015765BD4A76E6EE578D9DDDE34D23EE5EE +:109B2000406B28A5174527BFE9D28B8C93DF64BD16 +:109B3000186FFC2F9DBCC0F266AF27FBA46FB390DB +:109B4000DFBE28E9C3C7277CBC3E677FCB1E78EB0E +:109B5000A7A6F4EC23DB0E8646F8A8527B8F3706C7 +:109B600024B765E685FDCBF25D7CCEAAFF724A7E06 +:109B7000FCF59A4B8EC6B3F357D60B79195DDAF61E +:109B8000DDB3DEA6FB91FD15A1B476B280E6B5FD8E +:109B9000D0D3D6BAF1F9D5F50EBB3EB55E3C1F91D8 +:109BA0001743AC3BB3DE2D4FF8DEB5F52E3D9B9849 +:109BB0000FD83FE49CFF636B7E8CCF8AEB2788CF66 +:109BC000D6DD2DF1383B4E6CDD64CE189F3E55F549 +:109BD000429F4797076ADC7ED0E1AF16D3BCABFD4E +:109BE000629D7F776CF517F257BB6B04DDCBEB47BB +:109BF000FCD50A96078B7E65D6F386A596BFCD8ADF +:109C0000059CEFDF6FF16D2C6E07CEF3E42CCAD804 +:109C100043FEA0D790B97E2E5CB8C78324B8A7FEB8 +:109C20004FC3F1351181E3ED78E22F80DF034EFC65 +:109C3000DE75F080C0EFC189F1BB23BEB9B73E4DE0 +:109C40007C83F8FE3EA22FE2FB2DD43E5423E46633 +:109C500037C662836C7F4C9570F5B5F0B7355FC23F +:109C60007D76F74A61C2B15DC1FA5CE0BC8891B310 +:109C70001AE953C784417D5B6FAA9AC31E1FC3753F +:109C80002449063CEB7269BEEEEBA404E5C546DA56 +:109C900073621026BFD42B31BF5A8352A21AE95CDB +:109CA0009990983FE837128447AF0E2594226CDFD5 +:109CB00068A8C32B90CE995B0797018EB7ADB9E624 +:109CC000A81FFB7D582CC1E538CD6E5F0C1EC47EED +:109CD00067CAFCDA76B40F75BD774012DB8FC6B267 +:109CE000E284576099F7BD2195F8A7723EAEB6544D +:109CF000D46D3ED48092AA17927DC27A3055DFFA95 +:109D0000EE8939471C7CFB4EBD1BA7FFBAED457899 +:109D10007F666ABF1BC0B2E3C8877A2B5EBF15F7A8 +:109D2000FB69DBE09C23C89F7DF5C25F61BCBEAFD1 +:109D3000DE190F58F1BA8E7E84E8D213008DE4D676 +:109D4000977CE4A745B89F8D6F7A80F21A4B3ECF7F +:109D500055A97DF3569117DDB8F7F40E8A375A7579 +:109D6000252E239D5A95C866A6E35EBFBE0DDB8FE8 +:109D70005BFC381082ED141FA9094F42267AEB7163 +:109D80006D21F6CBC071FD386E46785BB201EBB544 +:109D9000A8D83AD2D1BFD64C9610FF91FE669879DA +:109DA000AD2BD32CFB8D74BC499721E9A0CB575028 +:109DB000702CBAC91725A6A3E9A4EBB6E60CE66F8A +:109DC00057BEE02FF93F8AC7362EF06BAC47A6711D +:109DD00072C63CA71EF62D7B308FF2A11EE8A6F9B5 +:109DE00043DE3334BECD47F03C6A125DCEE3FA0861 +:109DF000D7A9A09C71CEB7B1B485F3C7AB510E0CF7 +:109E00006C5F1DF69E71F2DD47FD27E0F3DBC4E7D2 +:109E1000CC149F0F2822AEEB79D3C3F8A167EFF3E0 +:109E2000CC1773AF1C9EC96FC5A2C49718C861F642 +:109E3000EF490914DCCF5F597AD253D7B7A3059FF6 +:109E4000EB5BAE0A93FFEB99FD632FD57B0AF32002 +:109E500093F62F1B076FC5FAFAA73C92B02BC0F4FC +:109E6000EAD93A39D1CDC96CD347FCDB80CE87C65D +:109E7000B7E5E9664B6F3677484CD75B21EC233B5F +:109E8000B511225CDE0E712E250899B4BE5BE2424C +:109E90009F91BED5D3F1BD03E6655C371679273BAC +:109EA000F3E0E3C58F94493AEBB05BB5B61F53635B +:109EB0008189E222B961242E921BB0ECAAD1D3C6CB +:109EC000456C61FEAFCEAB3C7115D92FDB2E7F7494 +:109ED00070A58FED72EF096F2C34BE5DFE95ED37E6 +:109EE000D17F915FB3F3268777173E2A935CC83002 +:109EF0004C72A110AF09C7BDB0AD8B9E83471D2624 +:109F00007FDA93ED8F521E17B4526EDF74635FA039 +:109F10003E4DDE0C358DE7419CC638DDEE7FD81B0B +:109F2000592EB3BCE9733B108FFDF64A940FAC1F5A +:109F30005EACCBDBD12F6F0A7DF2153D27F5FE61BC +:109F4000EBFDA66BC305758E792A1B84BF3D6CE5BE +:109F5000F1BAF47A2F8DD31DD224CF64B277CF6AB1 +:109F60002D59A97EA97C5EACB2C191CFCB0826BD8C +:109F700082DF09CE6B663466981EF4530F96C7AA2B +:109F8000A95F86EA394D7E2B2318E6BC6DEB422192 +:109F90002FA0E164F934EF1E35164AD5C797574113 +:109FA000E72ACF43DF1B42520C980A90FFC891D199 +:109FB000DB112EFF920C022F348A731D3480DDC515 +:109FC0009C7FFA8721EC77CC44FB84E55F05CECDFE +:109FD00022BEF280D3E8FC4AFC3E9DF415D63FE950 +:109FE0006BA04948E7FF92991354B0BE152DAA1FE4 +:109FF00079F980273E9BE4F453B957A7F2DB0DE2D1 +:10A000001CEBADB0F20499B1EEE09EAEB9346F85B1 +:10A01000CCBAF7CE32396DBEFEAE862CDEC78E329C +:10A02000E34ED29FEF3600D71FB7F34E689F7DF304 +:10A03000F89C0038FF6CC25B33709DA7AD757ED76E +:10A04000E2C74D81EFBC43FB986268CB77E03A6F83 +:10A0500041FB9A40FBF8BA129668FFC7374AD05BBB +:10A06000383E3D6B03DF7DE74C09DB01DBBECB17E0 +:10A07000E7A7ECBD017090ECE9A20F47FC01EBD51E +:10A08000E261777DC90577BD02BCAE7AA5EAAE571D +:10A0900069EEFA8A80BBBE5277D7A143D87B84BFD2 +:10A0A000D6399CC3DE7B4439E2CFF0B7B6D57BC648 +:10A0B000F9BEAFF1ECBB9033D64FD8741F8F4FFF72 +:10A0C000BD6CF577497E6D3A3F2E893CA6992F8766 +:10A0D000F7A108BFBEE0B24931C77B3F6A103874B0 +:10A0E000241F1794D98EF758786B3C3EA817164159 +:10A0F000D2616754C58E1F4B4A4A705F5DB4608F52 +:10A10000731E81DFD50B37F27B4B9FB99F55A7F6A6 +:10A110004D8FE58F05AE5B0E2C4B88AB80E5FAD8F2 +:10A12000BD5262BB44E156ACE33EDCC73294179D9E +:10A13000FC53C00F4907AECA243DF3909F3F5635EC +:10A1400009FBF567233EC3712A35D1CFA66B664163 +:10A1500047F23E1C575BE8D77217D07BBE547B2179 +:10A160008DF7E8C78417D551CF6D7C351E3D46FB72 +:10A17000EFC106CB7FCF87F9C4EF73058DB949488E +:10A18000E1B5917C9D85D7C84E2FF3A6FCEAAF1BA5 +:10A190002633BD3282820E6A08386E98E0FCE5D71D +:10A1A0000D69F09C7F71EC7D9287CE405116D9DF0E +:10A1B000A5120C7B341AE7DFD95F04BD62FC9E0553 +:10A1C0006AC2941CB822A1F0F928FE9ECB98973A57 +:10A1D000179BBB28F65BF69F167FA24F7AF93D7C52 +:10A1E000634A1DE50D72CC0F294E46C376E7F10593 +:10A1F000563FCE4FFD6133E50FECFAA73F2BFC77BE +:10A200008A63BBA699AD12F67FF5CDDD77E6A1FD99 +:10A21000EAA29817FF56FCFC85674DC6FB229E7884 +:10A2200091124B144FE8B2E9CF49C513B8BFFF45AF +:10A23000FB3BA61F1AA8C02E4BAF3C534572DEFF56 +:10A24000C2C175F9E4BFDA91895761BDD82FE2B375 +:10A2500099909889EBAD78BAD1C7E7753ACCF5A358 +:10A26000BDF575F502ED7B2D8624843F4DE805C2D2 +:10A270003BBE57141078286612FEF223CEA5BA030F +:10A280005F32DE448171E1D3D1F813073C35C31945 +:10A29000B7CC985645F62F7005E25F1127B0BD90F8 +:10A2A000F13F612FE2C676C2C7861A67FC0947787C +:10A2B000FD149F10EEF6CF50DC78B2F1C706E579B9 +:10A2C0005E97202E05F0BD47638C3FA3843F71BD90 +:10A2D000D18D6EFC991947FF96C6BE3C581E99D584 +:10A2E00048740E09BF37CB3BB88EE6ED475C695228 +:10A2F000B9F7F9E3E42FCCA746E483E560D6079AE3 +:10A30000851365C69DF3AD7DF6D7C52BB7607FC3BA +:10A31000C29DFDB3FDDCBFFF232D9129F4FE20E992 +:10A32000E3A280853B353498F3D88EF3FBE49FBDE0 +:10A33000D85E0ED98C3B6FA6B5125F7E27707CD29B +:10A340000712E1411B37DE88E24D7EEEBA26212F4F +:10A3500012044D9A6FDE90B8E7702CB8E549CA47F1 +:10A3600054783D61618647E2D5158DE9E46B6D8CCB +:10A37000EF3774AFC33D4F6679ABA57E5DEAFB2C2A +:10A3800067DDC1A23CCE370681DFBBA62116B1C670 +:10A3900039ED8C7BDB138A95B77AF94E6306D96564 +:10A3A00021E77B1B7EB1D9E4B82BB29CE639AEE342 +:10A3B0003A699EE22DBD247FFDA51EC69DE7438719 +:10A3C0001F0BE37C3735FEB06A3A96B7EC7FC28B41 +:10A3D000DD209A3779079595AAC7150FFDF5F399F2 +:10A3E000AE7AEB5397B9EAB7EFBAC265179B22D79B +:10A3F000B8EA77EEBDDE55AFD24A5CEFAF082C72FB +:10A40000B5AFD42B5DF586EA55AEFE91828F9529C6 +:10A410003AD3EFFE46D4D79AE74E57D1B9576D5F7E +:10A420006163892EF0249DCFF664F771DEC1C68F7B +:10A43000364EEC298CCDDB3E3965DFF6347A5C385C +:10A4400073B43DEC6D1478A3A9A82F96EEDC7CC400 +:10A450004EC62573D61C710E7C6BDA73E05BBB1B9A +:10A46000A73AED6AD24BFD9A163C71741AF1A1B568 +:10A470008EF1E79D2171DF65D9C63A3203B07CD9F0 +:10A48000BD04C3E0E6F26D4A2C2B25679984337333 +:10A490001867EE663929157A68EB5B7FA861423F41 +:10A4A000F36F6D1A2467017CD016E0F2CD369DCB98 +:10A4B0008FDA825C1E690B7379B46D01973F6D333F +:10A4C00038FE3ED956CDE50F1066925FF94BCFB3FB +:10A4D00009F7327D0AF9D7A4EF3294DF9AE00F8DA5 +:10A4E0007D4890BBD0B051BC8CFB7F81E89A59A0CD +:10A4F000587A22F63F42A7517AD8BAD07889E8D55F +:10A50000AC40D23BF7D2FA84727690FA77935F80B0 +:10A51000945F1878A1259A4FB8DBF20B03F93E112E +:10A52000D758766C5281CEF9BA8AA777B13FF081BD +:10A53000FE1E9DD7FEA651E024F213648FD6A25FC3 +:10A54000201C62A29D26BFEA433B4B76DAA73EC49D +:10A5500075B54289FB037FBA9F408358B5A39470B9 +:10A56000AF958718E327FE38BF504B7E216F22BF7F +:10A57000D0B05C227C5404E1DCFCB4FEE17F38FD09 +:10A58000434E93902713845DF6DBEB50EF66FAA9F8 +:10A59000120C111DFCE0CECFD874F0F31357BBA002 +:10A5A00003C498CE0AF95FDAB7699CA278A2CC629C +:10A5B0009512E8AD24BAD8FEB3E2E96526D9F55A7A +:10A5C00003E94E7EE48C58778A4E49E6EFAA02B141 +:10A5D000BEDAAEB8B109FB2F5AE0D7888F4AC04D1A +:10A5E000B7558FC6994E0BADFCCDC2DFB8DBFDA3CE +:10A5F000F23D394D6EBC37CB9B5C4FF418B0FCE696 +:10A60000C0DE376B4BFE08BF395017F73CE0F09BBC +:10A61000035F167E7320E5372BB64CE837636EBFB9 +:10A620001910FCC924BF298DEF3747FBCBEEE07D25 +:10A6300027499E6D7FF9D5262B8F9097E03CC22647 +:10A6400059E4B537CD8104E5FB321B6FB99DEF07A7 +:10A650000284FDF9ACE7254D281F87D47F4A521CA0 +:10A66000A256887C997265E9111952FA8EFE777E9E +:10A67000537A7CB7909E1FD267E4911EDBB8B5FF7A +:10A6800085675C7ADC7F9DADC78D9D240799BA3EB6 +:10A6900097E2E8DDCD355A05F98FD933E67A902E69 +:10A6A0002F597A6CDB395CDFF226176E1672FD12B9 +:10A6B000D949DA279A99DF215D27592CEB215CE9EA +:10A6C00098B7A778BE5A83FBB9FFE7FFF02CE54E99 +:10A6D00046DBA14D370E1690FF19981C56290573BD +:10A6E0007FD3B3CF2AD78DED77CF8309F67FDDF9FE +:10A6F000616BBCE79E55268DEDD7A5D71F25FADEE9 +:10A700005C0861F23735D0C7F7916A6190CBB5E547 +:10A71000B118EDE726C44D53F1DD3776ED30A73B98 +:10A72000E8ECF03F9B9AD2D8DFD38B227734F1F953 +:10A730008AC88B5CCACEE2AF20D31D1FC4695CBA45 +:10A740003FB747A2F54EC9F922F80702429ED03022 +:10A7500045597E64394CF76872CB625FE7F58CBA75 +:10A76000572B058EFE5EC2759F922149E7EE668EDD +:10A770008FCF5D46FBB1B3652BCD263E67D17CB450 +:10A78000FF96E0D1B7E9BD4BDF978D481729CF6E13 +:10A79000E56F660C7DD44572853A314CF6A8FD4BC9 +:10A7A00027B97E0ED4613A276BCFF90CD2F953DF6B +:10A7B000058FFB7ECC487E5EE41935DA10E9F3E7BD +:10A7C000173DB4BF4992D8DF4F9A849C6A0B843EF0 +:10A7D00068E0C8133AF2906C3F25924F25955724B4 +:10A7E000FB5B6EDE2BD1FE0A46DE7B83F6379EBF17 +:10A7F000FF73979D56DE71DC765FAC95E4BD53AA7E +:10A8000090C92E75CF2CDA43F72AED767BFFDD4D0C +:10A81000F6B95042A5F397EE1973736102DCE2EFCB +:10A82000AD73DD271CD32E43CC79CFCA2E8F59F3BD +:10A83000E596C7CC6BF2E85E9F88938F96EBC2EFEC +:10A8400097CA225E0A988CE77E6BDD37229C44E52E +:10A8500007D67D235B5EAE1DFC06E7FBCE9B0ADFC1 +:10A860000733978A7C9EB9DDAFB5E7519EEE9BDC3E +:10A87000BE5551353FC777F1F924FF8FD079C92CE8 +:10A88000AEDFC0756F2C4A74F2C3FA5CE7B9E350CF +:10A8900093C0B793B4BF7F47E4057D8CB7299C175D +:10A8A000F9A5028DFD91559FE4D3CCAFE27C3BF33B +:10A8B000E58449F2A3A1999F27EC3FFD76CEFCFCED +:10A8C000EDDB687D853E3E4FF0807296FC5B17D1D4 +:10A8D0001249A367C5C0C4F69DD5B2F0578AF027C8 +:10A8E0005DD9D3B9DE593E97CFED743054D2B3273A +:10A8F000B589F347CF58FBEC403A5239E511F44B98 +:10A90000731CF8BE6B19F3DB8B8A48FAE279E47E9C +:10A910009E6F4779D11EF25F3BCAB76B328E7F754F +:10A92000B3C8EB7754A7BF676CB7EB1053899E6A27 +:10A93000FEC4EBEA6913E75523FE201C3388DF537E +:10A940000ACD08CD3FA5304F62FA412440E70B9F66 +:10A950005B72B3235BC421181FF03DA09D8B6F2F4A +:10A9600021DAAAA13E388BCFD57012DEA77CC76250 +:10A97000F453349E37C2E73553A65E2B9B0EBB358E +:10A98000A3D91AAF50E4B747AF2FAB59E4D13AAAD5 +:10A990003B22FCDD81AEC0CC34760FAC7EED3EFDBB +:10A9A00035EAB763A50C34CF8EA9F382B49F1D5747 +:10A9B0000AFB9BF5D627CF6ECB2279BD07FE95E427 +:10A9C000354F617CA483FE4435C98BA668CE7B8459 +:10A9D0007669CBE96316FFBC8B9FE4F39DF33320CC +:10A9E0004CF6ACCAF36E92F2893B0D95F1D8E8F7BC +:10A9F0003366C8AE78719226CE897742AF46E7B902 +:10AA000039A519AEF8D17EAFAB2956DEECF0D7935D +:10AA100066C4D8EEDAFCF5127F27B00FA3D7FD8805 +:10AA2000849E05E38947260B3DC3F0FBC34429C937 +:10AA3000F3B4E26EC7BC77350B7DBBD4F8A3F73512 +:10AA4000DE3E7E407940877DBC81FC421A7EFFD28B +:10AA50009AB7F3858F5D78A773B1C03B9B6E1C0ED0 +:10AA6000D43BD6739B253F3BAD7B523B512E7F940D +:10AA700066DC364B2FC69BF76A6BDE949CFA84FC2F +:10AA8000140AB999DEECFB47E1FF7B19FFF9557118 +:10AA90006E112B8BC59BE91E4CA9F05BFE02CD23EA +:10AAA000CE956DBAFA1857FE05E9C8EBFB6573E859 +:10AAB0002E93F9D90B845F3B512E49AEBDF94F322D +:10AAC000AE3F8F72497E5BE91D82CF38CE83F8B7E7 +:10AAD000AD73CFCFE7597E55A7E70FC167A51CC758 +:10AAE000C42F0B5C7A5D7ED8C479B7F3563C38DE50 +:10AAF000FE7C053ED7387F6C7EF9A966EB1E80157B +:10AB00006F80A7607B25ED2B20273CD2F8E3D8F996 +:10AB100065B862623BF8D8283B38BACCCE199601AA +:10AB2000F99D6C5EF38F1D48976CEB1EDFC7CD5F00 +:10AB3000BF8BEE078DB527C3AC9F5FC08EB03C9D29 +:10AB4000279F3FF9FF5C3E6C39B8FA5409CB01D21C +:10AB500047F02502098F889FF81C59326581F30C54 +:10AB6000FC9B665DC96190894FA6F1D11ECBC1687F +:10AB7000FA5F0EA6249CA7C67E69FADD22AE2C8061 +:10AB8000218970F8D514D071EA2E56F6193E9F36F9 +:10AB9000FF9444F1CBCF9ADD71E2A5F86EF36BF42C +:10ABA0007E7ED0A64A24F73BBF310C145FE42637E3 +:10ABB000F37728BE578681BE37C98561C6C5F00ABE +:10ABC000F0B94F7BD67F1CBEC8F251B4C7291F51C4 +:10ABD000CB0ED8F5EF5BFC68CFAAE7757D3F205719 +:10ABE00093BFFABE3298312534BEBD88368BF38AC6 +:10ABF00039CFBBF9327ADD4B64E33FC83EA884C746 +:10AC0000511E5A4A7D69717876462C6DDE2E222FB0 +:10AC1000FDAC796A3AF902BE3FBEF315603CF2E73B +:10AC200092B3579B75710E7349BD7F9AEF939CA7A2 +:10AC3000F381700A978D1EEF5238CDC68F88171991 +:10AC40001F9ADB15682F65BCC8F871ABE9D7E8FC23 +:10AC500038ABF8FEEF51BD16F123C5D30F78E2D91A +:10AC600095129DF38AF3DE113D950FAA25B8BF9A80 +:10AC7000B79FB8AB03D7FF2845F1C88F37DE7AE21C +:10AC80002E84A6E0A3B3541C2752E24FEC21BDB0A2 +:10AC900070DDF1D997BBE8D85FEC5F9F4E4E3F5C0B +:10ACA00023FC4495274BE6FC75489CE71D0FDD26E9 +:10ACB00053DEA337E849101E48DDEF42AF84657FBD +:10ACC000D0C3F39C2FC04013E7D18AB768B494591E +:10ACD00020BEA73C46E7E0934110C471DE6DCB2750 +:10ACE000AD73785A2A2E477A1AB98EEF8BBA5F3C29 +:10ACF000C2F3B487FF296B88F205C1C3C729AF75BA +:10AD00003EECD7C181978E670B9C75B8F85F14C273 +:10AD100069CF5976EFB535E2BBC7DA3E8CAF514EFD +:10AD200057852A74DABF324EFCF0F41AE17773AC1F +:10AD300076FBBCDE6E7FDF6A1FEFDCF6F668B67D61 +:10AD40008F509CA78F3A3F6F696CADD59086ED6BA5 +:10AD500004AEF38D9CA327AA082F755AE7E7FD746C +:10AD60007E2E62483E8FB7F38CA3E75B45E7E81C75 +:10AD700037FCFF798E6ED3C1A6A39D57EA0C4C71A8 +:10AD80009D8FFB82168E591CEB594374A77C09C713 +:10AD9000813AC7812AB5F3F941B7964E3FE694C58B +:10ADA0009E5CE3B0AFAA2EEE9D1C1B95473A56EC75 +:10ADB000B7F05C5F8113CFD972D56FE1B9FE71F046 +:10ADC000DC05ABDF885DCC922DBBD8B78EF5D2BE4B +:10ADD000176618BA362F954781A8C6E7E1705F4E0F +:10ADE00098EC56A7A55F012592EBFCEECC2E3B0F0D +:10ADF000093F03015FCAFE15D1BCEBD3F61F79CF23 +:10AE00001AB7CBB2BFEDE1DB84FE5FC2FEE696C5AA +:10AE10005E21FAF903EEFB7E93F40C973D3E457AF2 +:10AE20009386FE67CB5626896F5910E7BC664B1098 +:10AE300034C2A950AE75120E6C475CC7F9E54BE4FD +:10AE4000815AA3C0FA797C7242A1FB5795C1830A4B +:10AE50007DFF59FB3CDA876C977DE03CD7EAB75E13 +:10AE6000BF8BF0F1A34F1D12DF8777487CEEDCA289 +:10AE70001E5F27F2A3F25C7FC1D8793744853F86F5 +:10AE80005DE2BB71925DB683A3F82685D788EFC8D3 +:10AE9000116878F2699FB121DA276C15F6B33D0C81 +:10AEA000FAB7D97EC6D37E37175A23F633C13D92FF +:10AEB0007FA3F1DAAD7EC7467DE79E65D9E99602AC +:10AEC00081FB47AFAF455DC7ED180DEA97E7A7A136 +:10AED000EF2ECDA4FB1CB6DCB56F8D5BC988F4EBFF +:10AEE000EC0ED6FB28DF66E73DD163F1B95B4D4838 +:10AEF000CCBF0A929CFF5C0D43FC3DCEDAF2981465 +:10AF0000C5F7D4FD1FD7AEC5DE8D9167409CC389C0 +:10AF1000EF08D5541ED4C7FDAC3CA8AA8B3CE8A1D1 +:10AF2000E63BE52ED21BF45F946F384EFE0AEBE74A +:10AF30001664B1BF1A4F5EFF6B9BF81EAD9BF243C8 +:10AF400028E77DD6F768CF517E08CB4C052A390F0C +:10AF50009F048EA76E78D1FDDD6266D0FDDD625163 +:10AF600059AC80D6579C9CE27A3EBB6FBAEBBDD3FE +:10AF70008B2257451D79DBFF07EDC0E2E89F66078E +:10AF80002AA27F463BB07BDA485E328BE2285F899B +:10AF900021EFC27D446EF0308E3A16B2F04DD8CF1C +:10AFA000F242D74C99FE16AEF2A278E44E49E12A5D +:10AFB000FF856B5CF7A946977E6F5CD3D2EC2BB410 +:10AFC000A6D085DFFD17AEE5713E24BD99CAF9F81C +:10AFD000DBA2E23B83E7A4B4DFB7BBF1A7AD6F3BD5 +:10AFE000CA8C3B88DEB6FEDBB8F45CDF27723A3CE5 +:10AFF00031E22FD52DA1658E7D744E8AF3793EC93D +:10B00000258DF3B07D2F5419969B1DF750390FCE27 +:10B01000877B83AC9FD9C932FEDEC0130A1B746FD5 +:10B0200028BB340CCEF3F96F7D79E9D7695FD9CAB3 +:10B0300020105DB2EDEF978C521EC7EEF7B5A8EC6D +:10B040003AEFB1E7B3EBBFA6386A26AE9BE677DCF2 +:10B05000E33CFD501F503E2833F912CB79E64312F2 +:10B060007FC71FB3F3F78152EE2F45FD8788AF43AB +:10B07000A1223E371E0AC93994971C32CF89780B1A +:10B080009F8B78739B8B4F7669E3D921539CC77F45 +:10B090003F24ECB11D6F8D47E7D171963F233E44AD +:10B0A000A16822DA74377D57E7B7E2F17DD1BF7E20 +:10B0B0008EFCD0F5466C2FD1EB349A1B3E2F990EA7 +:10B0C0007C5ED2F2F03766DF8AF30E59721DB0CF84 +:10B0D00049C6391FB1FB8DD897C0887DE13CD1109E +:10B0E00088739B31FE2A743BDBEBA736204FE99E29 +:10B0F0009785B30356BC717E812AF2CA51D09D79DF +:10B1000082AE432B859DD11CF9922F60671EB6C677 +:10B110006F273B8365A7B9E58BDA99634427B5C0F0 +:10B120004D5F25CB6D67D69619FDD46F027BF3C6B4 +:10B130009FC3DE4020CF25CFA34B5B9E51CF87849A +:10B14000FD07539A3756CF71BDA7A369E40F0A04D0 +:10B15000DFECF33658AAB1FE49A1A3BFE7F3A391F0 +:10B16000F5C480BFB7FF82EBF9A2FDECFAFF0661E0 +:10B17000BB84A3A047000000000000000000000006 +:10B180001F8B080000000000000B0BE16760F85106 +:10B190008FC0EBF850F984B0083F69EAD1F113266B +:10B1A00006064166CACC00E1C5BCA8FC127606863C +:10B1B000686E0686236C0C0C8540EC08C4DF7910A1 +:10B1C000F27BD921F4244184D8070AFD328A873ED4 +:10B1D00066106560601243F0A78AA1CA338A22D83C +:10B1E000FD5294D9B500A81F0074BFBA0A800300AD +:10B1F00000000000000000001F8B0800000000009D +:10B20000000BE57D0F7C54D595F07D336FDEBCF9E6 +:10B210009779492661121278090944083241A04100 +:10B22000A1BE84A8B14BB723A28DAD6D07FF50B06E +:10B23000A8A9BA96ED6AF342FE90C400030B8AA057 +:10B24000764041DA6AA5AE75DDB6B603F8A3B45F01 +:10B25000B79B5AB7EBDF6E50EBBA6DB5B19685EE82 +:10B2600047CB77CEB9F765DE7B998458EDF77DFD46 +:10B27000BEF0D39BFBDE7DF79E7FF7DC73CE3DF700 +:10B28000C6AF7A58F574C6CEE0CF858CED0830C6CF +:10B2900016E6CA7D7FEB2D5FB38031F37E25B10FBB +:10B2A0001E1DD8B1BA7C8DCED8E11DFBB75E0CCF88 +:10B2B0001FBAA37ABE1F9EB73289B112C61E8EB4C2 +:10B2C0007B346CDFE3C9EC8347FB23C647EAA0BEAF +:10B2D0003FED611BE0BB877656475998B17AA6507F +:10B2E000FB9E3DBD2FFAE1FDF49D4C9F05ED676689 +:10B2F000D77AF40863E5C33263C539B8321DD993F0 +:10B30000AFFB18FB6AC7B193AFD7427B996D08C4F6 +:10B3100060609335205CD3556D4300FA61DD508742 +:10B3200071A68733BC7E40BCD70EF2FA23FCFD43E6 +:10B330001D43D41F76A02E82F7F82B3CAF32619CC0 +:10B340003A463F67E0BF9A9D866715C03BE7008C91 +:10B35000ABE69ED7A6871CF5E94CFEDDB0F55D1582 +:10B36000632FE02F258817C763F629C0F7BCB1F813 +:10B370005A785978FFA5E177F89529C13500E74358 +:10B380002C9AF463D97DCB8B0CCAFDF7C168809FE2 +:10B390003FF5B5AD17E3F33B3C8901F8E4E4F13D3B +:10B3A000543FD0E94974427D969A0A9E8378EEF420 +:10B3B00030C46356981907019E593294F58CAD1725 +:10B3C00072F54F58823CEE14A5CECC1771BC87EFB6 +:10B3D00060FA00C0333DBBF687D8CFF4E7BC2CA0A1 +:10B3E000239D57370FD7E7E4C72AF59D0ACB9E3731 +:10B3F000BE5CCD94D961BF8DEE3355EDB0DF46F71D +:10B4000099E10CAF0BBACFD40EF2BA8BEE56FF35E2 +:10B410007770FABAE9EEA6B79B4F93A5BFCE8C60C2 +:10B42000722ECEAF15519854E3E28D729805393CD7 +:10B4300070E788940CE7F09E9EFDBD6497BBBF3C0F +:10B44000FCB91CECC9C9C147EA262107E5C3FFAF17 +:10B45000C9C19F361F50CF6627D0B37F2974C0F66D +:10B460004807377E5699EED04FD4001C7D1DEC4422 +:10B470000DE035D8A152B9B943A3E7031D712AD312 +:10B48000A0AE19C09F7E9E654C503540BB1335B6AB +:10B49000712309F8CE0677B45173D443757147FB15 +:10B4A000424377BCF79B4186FA71F018CB0C4838C1 +:10B4B0003E63C62C844B65062CA4B7343CABE2FA41 +:10B4C000B869C1B6368463D15C45F74A889EF1D32A +:10B4D0007829638B79572C50903E720DF4B3A9CC28 +:10B4E000CB36688CF5FF515F762DD4EF5AECD7360A +:10B4F00024E0BD5F3F720D7CBFA9494DE2FBBEAAAF +:10B5000099F47EE0AA10F3C2FBC8FA4F16BE0EF201 +:10B51000AF561F8BA7703C1F6B43BDCB641FE1DF91 +:10B5200090D5F6A01C496C7B3BD637D5975621BCED +:10B53000D3250FD17960615131C2D95F997E33BA79 +:10B5400000EB8ABE01DA27EA8EB649E7423FAFCB6D +:10B55000AF227FEAE0DF996AC083F1BAC5AF682302 +:10B56000D41DFC06B200BFCF17BF27EAF77B6BA044 +:10B57000DFDF482CA13532369FD9DAC3F783958CAB +:10B58000E383F8013E89679CFD9D5F77E5E7088EC0 +:10B59000376DE3021C0B253E5F7E58AB1849A4DFD4 +:10B5A000332CE3AF1A0BEF26F9C0F328C70D407F09 +:10B5B000940337FC6E78DDF80C566608FE3E898DE4 +:10B5C00020FDDDF09F5FAFACF21440C50E378C7BE1 +:10B5D000BE0E70178C85DB92EF431D1AC9CBF73A6C +:10B5E000EA485E0E425DC7FA1FBCC43F9D71F9DD9B +:10B5F000FDBCBE17F9372A37129F47B7497CFDCCEF +:10B60000A26D00F89B3F6064A731D6FEE61EA867D6 +:10B610003A4BE70FE8367D20815C80DEB8E546CF07 +:10B620005F61FBCC1D1E0997E08CE9B91CEB8BEE2A +:10B63000F478BC30CE8505239FA4F7370A39B8C308 +:10B64000736416EA0D23FEDB681CF037EF3EB21A76 +:10B65000EA3F067995809FDFFBE3C8AD0467A768E2 +:10B660007FAA94E9A087E6AF538E7BCEC5F6AB6F79 +:10B670006440075DC8E9283CE3CAE9EF5E92A09EFA +:10B680005907720AF5BF11726AF1D5807F48C7A7C2 +:10B6900037788EACC6EF1A149D6963F97AA17FE4FE +:10B6A0005728CF99B50017E0D92CFB72EFF3C9A941 +:10B6B000B9FFC8AC09E474E974D685E33D309E9CBB +:10B6C000AECF2FA716BF73A5735C26EFA3711B180F +:10B6D0001B19807E7FF8879FFD0AE535B346D1FDB3 +:10B6E000D258BC33F20182A3A14935CCC458BCDD89 +:10B6F000788EC563A42C599F475EEF98585EAD7253 +:10B70000734786BD062CDBD21127B91DE8D0498EC0 +:10B7100007851C6FC5A66563F5F6260F5B83F2B738 +:10B7200029C8D63C8EE3B7CCCFDBCE2A19EB24F95F +:10B73000DE82F25D4EE0180CF882BC11C4CB066BC1 +:10B74000607CFBFB0AE85F1AADC3C2037A3CD7DE1C +:10B750000C41FB2D01FE7EB8B3ACC9ACC8D5FFBB14 +:10B76000536B32978C7D3FE03B687A8139DFEC7C0C +:10B77000D1A80F38FA37B07F3B7CEA92B1FD0D8833 +:10B780007A81274CFD0D4AE938F382BE95B27106E5 +:10B79000FCFB8EC48C9646EC17EA20C78BA7FCDC1A +:10B7A0007C66716E9C57A49F9B26D06B9194FCAED7 +:10B7B00004F458BAA4BD8E55E3B899365608F31070 +:10B7C000BF877E4306C7F319E93F58979CA3CBF385 +:10B7D0009D274C8403C9112E15A062DF2D45B408A6 +:10B7E000851A334D6B613EC3546C97001E4F02EABD +:10B7F000205F530DB5DD0FF5F275F21BCE799393F3 +:10B80000877CFD69A23F15FB037C3C3AAF9FB53FA7 +:10B81000F1FDF8F2C0DB011DFE5D8272695DFB1A6D +:10B8200006AAE1BB621D68FE70E3BF2C8171024372 +:10B83000BE04FAB181C611D22B1ADA0185F8FD488F +:10B84000F6425CAFAB58FB00F0F34949E7E3CAE9C5 +:10B850007812EC666D4939CBD8E0B2FAFDA0E90662 +:10B86000F09F24F8051FA1FE7BE2EB38F8A8880FB3 +:10B8700080AA223E311B3E32E003E3F50B7C2C3ADA +:10B88000B9F11808986D38DF9B67377E0CE9A10E77 +:10B89000D57A48AFC819A2CFA04FF70C407FB33D6F +:10B8A000DC3FB3E8A23666885E219DB5A3720AD557 +:10B8B00039FBB5FA037A335C77038DBCBFD0287CA3 +:10B8C00019826F0CBD19D07BEED8FEDE15F0DC06B8 +:10B8D0006098C4AF8C835FD677563F16BE63FAF983 +:10B8E000D1BB4427ECC7DB90E3BB9B4E5E8F4EFA87 +:10B8F000653CBA9D0D1EEBBB3F159EB3E1E5866727 +:10B90000B2F363FAA9739801EB6C1A1F41FB0D9D0A +:10B910000A8DDFBF8EDB47FDC72E22FFF2CB9EF4E0 +:10B9200031942FF3591F43FBFECB965E36E6D37757 +:10B9300099483ABE223CBE5E7E00EC5DD38F7A8C85 +:10B94000AFE3FBA19E81FAB435B23905D691FD3B38 +:10B950001F0FA07FD0EFE376C7CC7B5FEFC478C129 +:10B960006E23FE8E17EDDC007FFEF07DBFEDC4F888 +:10B97000D36EA6F1E711DEDFACFB7FC79F8BF6A38A +:10B98000FEEF7A0F336DEBAEF57CAA925995CCE3BE +:10B99000177579B8FDF034AE57B3D0CEE2EBD5D4FD +:10B9A000E0C1554897F269417D2FF066F78D4FBE93 +:10B9B0008076CDC3F7EAF3BD408FC3373E29BD0A79 +:10B9C00070DCEBE176D6E362DD1B1DEFD84109E9BF +:10B9D000F8B44FEF8A827C7CC1C38C76806BEA29F5 +:10B9E000F649D4EBBD1B2E90FCF05DC33A5E7F346C +:10B9F000B84CFA3EAF9332D9BD614513EAE9A56A66 +:10BA0000FB9B4B00CFA5308FBA60DCA5F290B71D31 +:10BA1000ED22A328EFFAF8F009B52D03E32EBDAF10 +:10BA200077E8F202924B871C7FF877203736FA3C92 +:10BA30008DF8927DC9D7EBD59EFC7A6DA9CAF5D950 +:10BA400052D0675D40EFA9EB78FDC3A0CFD0CF28DF +:10BA5000DF09FACCD6EF52D909F70705EF225C349B +:10BA600016E6FA03FDF880A704E119F2E27CFC3047 +:10BA7000D0CC5B3816FEF2ED8AE92DA0F2B8F7DCE7 +:10BA8000B1F06E1678437F07F2F5F7E7C2676918E1 +:10BA9000FA8DBDFF7EA7FECEA50FC6E9C7AD0F96F6 +:10BAA0007D718D87515CC543F3FF0145FB21DAF3BE +:10BAB000E6CFBC14A7AB662301D43FEEEF2BD3E750 +:10BAC00038E209EEB2F9F67870388CFDF278D503D9 +:10BAD0005F2C2F4FD9F4C51E31EFF78879FEEF6246 +:10BAE0007D79C5E3A3F2B898570F14805D9857CFBE +:10BAF0006CE072809A0CCAB9A7C2044FAEAEB8EA25 +:10BB000032C58172F50251E774309B9924633CBBC6 +:10BB10009C25900F852DED2C0570F92B98E99D073C +:10BB20003280738EAF13997AA0930C62A8D2FA3A3E +:10BB3000F428D67DB8F6DAEA0AF842F158AE0EFDDE +:10BB400030DDF6DEC2A3BF2A1D0FDBF4524FEDDD60 +:10BB5000E48F067570F7A09D9ABDB70DFD7B75BB90 +:10BB600092405351D54D96027B2428279807FDAE6D +:10BB700030AB423E05558379301EA3411DE00F8650 +:10BB800093BC1E13EFB5146F1FE775BFDECE9A602E +:10BB9000DC7EE14F1EA95D4D72D0AF57EFA5754019 +:10BBA0009F1FF5C0F3B097F36593940A7917A2DF4E +:10BBB0006CAA280FD06E0A1A37FF31AA2FE4FF466D +:10BBC0007BC68BF287FF6361ED8D39421EBD393A2A +:10BBD0000F60DCA916E3203CEE3428E246667326AB +:10BBE0008BF3CD2CE0F407F33D1707A2EF8FE5E2CE +:10BBF00048541F72D4439A69A05F28C75802F5734E +:10BC0000C0C81AC84FA582D7918FFE688E8F3B900F +:10BC10008F528E8F3B902F528E8F56DDE2A355B7F9 +:10BC2000F868D52DBEEDA84A9639F878C5952F3815 +:10BC3000F978D555D7FF19F9B803F998677D7B498D +:10BC4000E6F3E8C80EE02FC6295AF83CDF57B98161 +:10BC5000EAE6159ECCBE2A7CBEA1B516EAEF1EF31D +:10BC600051FCE0F08EDB3D1A8CB35987F6D045BB12 +:10BC70005CCCFD3BBD9AE4E4D65ACF7ED4AB5F15D5 +:10BC800071AD01E1DF59E31E396766D41E87BC4BF5 +:10BC9000F87777093BA2F9DC3E15F5435F0DD70F26 +:10BCA00014FC5A88F13B46718EC10E95CA3EA8A776 +:10BCB000FCE857AA2C05F5ED1D1AD5EF83F50ACB44 +:10BCC0006DF03E0BCF77C2FB2CDA1B86A715F5E48F +:10BCD000B73BC0440354F674A854DEDDA1BD2BD796 +:10BCE00052FC8FCA473A742ABFDE5147E5818E0461 +:10BCF000950F763452D9E459B1D6CBF54B6B35C696 +:10BD00003BD6D6CCC77D8D408327994119D2D2C965 +:10BD1000E605B9E7169E4D9EE69BF0BB2D864C705E +:10BD2000801D7E6C46FE76B762BB6883CCFB8B8D34 +:10BD30000C2D8BE56DB7DE0B74DFD1C2F1626AF2B8 +:10BD4000D2DAFCFDDD89ED4A160AF8E2C9CB2ECA2B +:10BD5000DFDF066C777F0BC087EDC24397CECADF6B +:10BD60006E23B6AB5C08F0E1B81543975D927FDCBB +:10BD700041C46376D141B2AF40A24C9C77252BB52C +:10BD8000226C37BBF8E0E7F9F3E1AC8CFE8ACE9F7A +:10BD9000CFC1F6615AA82405FDB21AF11CDBD3F31A +:10BDA0006C133E2F6814FD28BCFFBD5730B2BB0B8F +:10BDB0005BB4BD2A88CC6357F0F95CB252DF83F5DF +:10BDC000D97E3E5E75B5C924D05385BA2649D0DFE9 +:10BDD0003CA87B60BE95E84909F5DA1C858FBF77E2 +:10BDE000669A49F0BCB006DAC1778F41DD03DF9572 +:10BDF000D4403BA8CFF17378AA2F18A676565C637F +:10BE0000DE055AA717E02868D125545383C26E2C4B +:10BE100069E4FD178E68870A40B7AC84656739CC42 +:10BE2000A72D9F67648C3CD1F573F2FB0BBB19F90E +:10BE3000E34572C361B306E02EE7FE1B0B327D1FA4 +:10BE4000D8FD775FB5BF1CEDE3D953593BCE9BD2EC +:10BE50004F1C984DFB77E52C85FAFAEE4F7CAB7CB6 +:10BE600015C287EFA15EFAC9EFCCC6FABB3F5A36BE +:10BE70002595470FCC390006A8CDEE70FB0F254F56 +:10BE800024A510C0AB0B780705BC3FECFA4F8A4BDA +:10BE9000943CC5EBA7BC95874DB089664FCB121F6C +:10BEA0002C780FEC11F04EE7F0D4ED15F04E03783E +:10BEB000019E037B05BCD3393E750F0A7865638A02 +:10BEC000360978230927BCFF1FE873A2F74B72A637 +:10BED000D3041C773430599A47FBF5B45EBF2B6707 +:10BEE0004DF21B037A35FA9F169C3F157A74F6348F +:10BEF0002E27B30715B3F8DCF1ED348B5FB307D50C +:10BF0000E3D8CEE2D79CC1A0595C30FE77161FE77C +:10BF10000C868FDBFB7F1117DB8567E75FDF528EB7 +:10BF20004F9FC027AAB23EAD28D7CFD3C2EE985DAF +:10BF3000CEE11938C7391F82B39DF361603697AFE0 +:10BF4000A771FC92DCBC08CEE172D627E8D7E71BCC +:10BF5000A59F3129FA3D3449FA3DE4A2DF4393A479 +:10BF6000DF437F1AFDB6223E20FF5B23A3F890FD3E +:10BF700074567CD2CA84708DE293067C0A6CF8A455 +:10BF80008313D261149F74F8B8BDFFC9E2B359C8D6 +:10BF9000C366C19FA83CB13CDCF329A73C4CF9B473 +:10BFA000531EEEF9747E7998F2192E0FFD4B39FD70 +:10BFB000AC7842340CE3CD1F7FBCBBE63AC70B9D87 +:10BFC000EB1CEFAE73F38F179AC7C7DB77FCF39EBA +:10BFD000C7D1FE5AECC998686F419B21D45DB24E1F +:10BFE00076F4A1AADE38DAF9FD15418AE71DAE5ACA +:10BFF0003405EDA3FEC6F9641F0DE27EA62DBE003A +:10C0000076F47FADF3E5F613C7E34B9FB0BBFA843C +:10C01000DDE57E6FD95D83751EB207DCEF7F2C4BAB +:10C02000220E9A2CE3713976A2DEC637373C169C75 +:10C03000EF17AE67C4B8837587D3CD09C676777F0F +:10C0400074835A85FB93CF0E61FDBBE64737B44836 +:10C05000FFE7E1FABAFC71075C5F611FFFBF02AE48 +:10C0600043DD29075C7799A909E1DA21F6FFC69338 +:10C070008F1759EA7FC8D0FFC652A7DCEAE88B6168 +:10C080007E102EBC3639099FC3EDDA4DF54EB9EA64 +:10C09000933DD49F55F6CB7CBE8416CADCFEB942D4 +:10C0A000C9D40A3857C07AFA982CE23DA2DFFB5C6B +:10C0B00075CBEF4437F4CC0CACE7F73BD55321A656 +:10C0C00083BF1F3E15A0723CFA0E36887868D5CC27 +:10C0D000BD88FAE09D09D2ABA1167D3EE6B559F1C7 +:10C0E000CD9E86FD06CECFA0C85F92354DC2791E8B +:10C0F00054793D94BD8AFCD1600B6BC0BC0C6B9C29 +:10C10000C23AADC920FA9971C46F747C417FC66090 +:10C110003C18BFEF22ADC16E67877C9C5E612FD754 +:10C120002B83D5E978918D5FFD776618DABD3DB533 +:10C1300077135C01175C01015710E1427BDB0D575F +:10C14000CDC470B9E965D1C1BDFF5771CA4BFBBB06 +:10C15000534F4954960BBA9721DDA11E3F554CE52C +:10C16000945385F4BCF4D454AA979C2AA37AECD4B3 +:10C170000CAA179FAAA232726A0E95E153E75019D2 +:10C180003A751E95C1530D54064E5D40E5A087C714 +:10C1900089D4538BA9BE6921E7637A29E7E328DFB5 +:10C1A000162E227E16B4B0C42CC0BF401E7A9EF25A +:10C1B0005E5AC18E9572F42A50797E5A91A0570129 +:10C1C000D2CBC68FC246A017F7EFE22B6CF1B12D90 +:10C1D00022DE6DF1710BF2D146E7161F8F3747BC97 +:10C1E0007C1DD954CDCAEC7CEC6952C8CE2C68E5D4 +:10C1F000766681CCE1F8A0E01A8F8F53DB3D4CB717 +:10C20000ADCF656B828EFA945491A35ED256CE74F4 +:10C210009BFE08C3BB25B07E1627AB9DCF17CC76FF +:10C220007C67C52D83F5F31DCFD59AF31DDF59F239 +:10C2300054847901C0CF28F2B00CFC7D8BBE188CE1 +:10C24000B5C5373F23E89AC38B7F1FC15FD1DE4E50 +:10C25000328A7380BFD9D905742B4D28FA80867431 +:10C26000BAA8F341F41FBFE367B8BF2EB196CE233F +:10C27000D07EABA126B1BEC1572DE41C646911A5C7 +:10C280007832867AC6FBEBB61AECE7E332A3F812F3 +:10C29000665E40FDC47AD0EDB86F8341DD3CFB3172 +:10C2A000A54C615955E82BC029B692D77378439DA8 +:10C2B000D3E175D45F7E7655341919DBCFA4FB5BCF +:10C2C0006EABDBF6EBDDF08EE917D4F1D4A2F7DE2E +:10C2D000FF165F24F646082A1F621F22FD3B0E1D33 +:10C2E000DC7C9A6CBB2AD42FA02774D42FE7E17E84 +:10C2F00016D72FD3845EAF14FAA502F50BE9A1A9D6 +:10C30000F4BC5CE89732D42FE7A11EAA12EBC11C43 +:10C310002A43A85FA054849C0551CF9C87FA85EBE3 +:10C32000192B7EC5E25CEE54D43BF0DE2FF40D6396 +:10C33000598ADB6E5BAC570FD8F54DC322D203117F +:10C34000A16F22AEF91C11F3B940AC1711F77C5E56 +:10C3500060CD67BDCC3E9FB7B9F4CC66D77AF19C6F +:10C36000980FA3EB45C3D13AF43BB75D5A4A793CE9 +:10C37000A3FAE6D299A46F2249AE6FC6832F26F4A2 +:10C38000CDF8F00D3BD68DCDD67A165F30A93C8E18 +:10C39000C18627491E1585EFB768F3D7C51F84B737 +:10C3A00005F3DFA83B0274FBB82FF5920FF0293894 +:10C3B000EF45DC9460BB6FFA653C45EBF5DD12E9B7 +:10C3C0007385EF9F6E9EFFEB047E07ED5FF5F17CBA +:10C3D0009AAB308E14616A3BCEE7CDD7B30CEEFF3B +:10C3E000E8DD4E7D37ED8EA043FF54DC56E4A89780 +:10C3F000AF2B77B44711477D47C10490DBF8754EEA +:10C40000BD174A38F55EA06EBE4BBFF17D08BF7EFA +:10C41000BE533FC627370FCAC43A1B17EB6C18E749 +:10C4200041714E7E4362BDB5BEB3D6478B1F8C1D96 +:10C43000A475AFBF8ACBAB37AC49D7D48FE54BCF10 +:10C44000DCDBC99EF0BBE4C22FE4421572EB77CB74 +:10C450004585251769C73AD4EF925BB79D3347E10D +:10C46000721B12EBE35D739FACC3F8487FAD4B6E5C +:10C47000C53E09FC47F9F5E3C117392B7CE3D861C8 +:10C480009396DB5E762D344D4B8CF641EF9ADB9B19 +:10C49000C57C4DA55AA67A68DE60F630C6A09AD54E +:10C4A00076DCA706B95CA894A0BF3890DD0BCF7BE3 +:10C4B0005785E979840D33DCF2B2F84F4B5C11CA31 +:10C4C00095534E438960DE7572B272B352D1096ED4 +:10C4D000B399DBB5E67CBEDF12D23206A50E3EA7CD +:10C4E00092DDD4FBB294C1FCBA4D651EAA9FB81A66 +:10C4F000166EAC570EC5911F6695A2E17A1AAF4928 +:10C5000049B81E96B0F6559DD0416F078FC7DF53CF +:10C5100075FBBC6B7058B9FD4397037DFDE1D44AB0 +:10C5200005C63D59C6D238FFA4F235291CFF0BAF12 +:10C530004A94C716ACE3FB6C61A0198EB7A98CEFC7 +:10C54000B385EA793C6F5319DF37837614CFB3EAAA +:10C55000167E508F876DF64DCFC29F917C0446E3C7 +:10C5600075FD0CF3DFAD385D40CEF2B85B82C7DD00 +:10C5700002EA411E97AB17713A3D4371B84D625FB5 +:10C58000C51B3618EABF70BDD680EB3DC615C9BEC7 +:10C59000AFD1F6A05C5EA470FBFC8B41E32685F472 +:10C5A0004E8546EB2073FA21FEF55E1DF31CAB644D +:10C5B0004EFF2D358CCE4B6C5CD24CFD9DD00122B4 +:10C5C0009DE4B70EE3E851164C605E6AFA0FD7EAB5 +:10C5D000B8B9164DBF93C5B833AB60098433002B8F +:10C5E00033AEBFD3A03C23F1F1907E7EA395F28EB3 +:10C5F0007D7AD0B15EFBD72B347EAF94CD223FBF86 +:10C60000184CF5225F2CFEB3709AA15F35137F871B +:10C61000716E59EAA17EEEF519FDD86E0BF87D48D2 +:10C62000B72DC77C0CE1DAA27B5A291F430FD1B882 +:10C63000B72C2DDA33608BA3F689F9FCDF3E63ABB0 +:10C64000F8FE1EE6F89EB5E6F32FD2E2BBB4A07F5B +:10C65000BA6975A613BEDB585947F9175AF39A9D64 +:10C66000ABB03EAD7E3E9277AF2209BF7088E087C7 +:10C6700079B647B1ED8FFB2B86693F772FAC13D886 +:10C68000EF57711E94905C1AB89EF8620986FBD32E +:10C690005B96CE8CE68B9F5BA5B2FE9142DC0AF3E3 +:10C6A00086B9BC62FC98F02971C69FB794F07832C5 +:10C6B000C6A7355BDDEA674BC988535E97FED7593D +:10C6C000E4B59DCB670597CF802BAEECD51324AF97 +:10C6D0005BC47EAE1BEE7D829E67974BBE0FDE97DE +:10C6E00000B9847E37EA454DB86F73A29ECB655181 +:10C6F0006B3BC59D838037FA55FEB444720A4F12D6 +:10C70000DCBE860E51DFD618243761219F95423E4C +:10C7100083F5F9E511E4F0DF70DE84C307298DCEDF +:10C7200017CB103FDE11FACAFD7C63A55847742E63 +:10C73000A7F1AB130F0ED8E4BF7425AFBFA3F0F37E +:10C74000671BAB58F3265AEF3C99CE2AAC6FA37DFA +:10C75000F513572B09F115934B411F89DFFB6B6FC5 +:10C760009F67CF57D8887ACD169F3959097ACC164A +:10C77000E7F4FFF156D2670CF419D2419AB67ED68F +:10C78000B0ED7B7FB8F91D9447B79EDB28F62D2CC2 +:10C790003DB751EC43587A6EA36B5F626355BB3370 +:10C7A0005FA0F2F60F44CF6D14F36C74DE57165190 +:10C7B000BEB535CE8B42BF457C46D08FF4443D801C +:10C7C000F0E13C467AA21EA8B7E901D7F7013FFF86 +:10C7D0007E58368A30EF6923EA01C7F7AC95DB054E +:10C7E0009C2E813A6D8FE0E7692FF85D5B18E77545 +:10C7F000A1E847FF515B345F5E4A6EBDF3E4E48C11 +:10C80000E43C28FCAA3354D79F9AF8FB8DB89F0CC0 +:10C81000EBD85D1D1A95FA759F88F2781333C029FD +:10C8200022FB0FE1717FB749C8899F7D92DA471AD1 +:10C83000870C942315DA1A64AFE8199C3791632AA0 +:10C84000BB03D6F75005CB06CEC5FE06DF41790AFD +:10C850002D18F5FFF8FAEEBD3A9ACA339FAD72FD76 +:10C86000CBFF59FC8CADFD857EA7FF7582BDCCB298 +:10C87000E8BCB1A1EC608CF28047F2F97B273BDE8B +:10C880002C7E06B7FE8FB54DE86FFAC1EEC4BC1919 +:10C890000B3F4F85C950CED5443B192DA3F8B8F0B6 +:10C8A000D88230609EB5F9F565D9FAB3F3AF5FD899 +:10C8B000115BC4BEFE78ED46FB655FE9C27EFDEC10 +:10C8C00025DAD73901128F7806C2195A57C1C6A284 +:10C8D0003C90682CC9ECF474C369E135DE7872D8F9 +:10C8E000E9FF9EADBD1273F1731CFDAB1F8C3FEFD2 +:10C8F00045B835A6A3DCCB72FB978763689ECAACAC +:10C900007301D51F1EC6796BFAB57D68B735C37B39 +:10C910002C1555EB4AE4F4538F9507E127A38CDDE2 +:10C92000132AA0F9BCFEE508E5719CF4A4D5BBE090 +:10C930009537BA9CFC27AFB7A11DF7B72F3C7DA157 +:10C940006AB7D377F8F97ABA31CCF30E36CAED2A42 +:10C95000C6A97466A8281FFD1ACFDB180F6FB5C2D1 +:10C96000E3A093120B4E4887EF6052368CD72DEC24 +:10C97000EFEE40A2CD9EAFF9157F80F0E9F7F338D6 +:10C98000F785A7A394BFD2A579C84EED0B6F53AB23 +:10C99000D02E7DCECB6A19C6974DB5E8CF005F8CFF +:10C9A0008D1C39837C0973BBC81F6936B3C817B0A7 +:10C9B000FF6B319EA4C9BFB69F8FD0597B12E5B1E2 +:10C9C000BB42F6D8F5E1074DBF513F20C5ED4619F2 +:10C9D000D6631CEF989A3A82FA5A6FFC88D10D7090 +:10C9E000FC16E77F09DA29299A07D67797965C47DC +:10C9F0007282782189A1243DFCDB0AF097A11F7F78 +:10CA0000CC63FAF3ECFFB10A8592F92D7CC785CB94 +:10CA1000A5379B4EF1787F30C1CFC7A1FF43F62DDC +:10CA2000527206A688EB122593B18494A420DE12DC +:10CA30008AEBC7021F74BF5753BF92B1959D09BDC2 +:10CA4000877EE5618A037EE0FD9E05DE00BB8FFAEE +:10CA500045EE9C29CEF5DB0FF31E9411EB82F58A8F +:10CA6000D1FA13207E82DD46F36363479C9E33F93F +:10CA70009B06DA03618C7FA27F1A063700DAFDA6D7 +:10CA8000491D6171EC8FEB2B6B3F2554C7E89C5619 +:10CA900028E1D47B6AC5E4F45A4FC9CCBCF928A379 +:10CAA000F203925A655BA7C76BF7E72EBB407F5630 +:10CAB000D9F657E570754EAE27C0CFDB98E2C46259 +:10CAC00049665F07640FDF37EE0A5FA322FEECF4CE +:10CAD000993368C7787917E017241BF3D1E502DC96 +:10CAE000B4B3F92D3EADF7F378EECA17BFCE70E4BC +:10CAF00057E3EF0BF1F93A6378127CF0CAA99DABCA +:10CB0000504F2DE07EE3D6D0A7D9F17A5C1F3E4D81 +:10CB10007E686F4969159D8FB4F26AD5309DCBB59B +:10CB2000E4F450C99571CCE7EB29BB328EEB7C8FD6 +:10CB30002F1947FD7CACE44903FBED3D1D6578AE44 +:10CB4000A5375E4DFE53EFE91953DAF3E017625C47 +:10CB50005F0411BE2A2E6FCC96C7D91BF7A808CF49 +:10CB60006FEBB9DED91AFAAE81FEAEA2CB746E4677 +:10CB700009C3B8307EEB828306FA7F4A2A9CF26BA7 +:10CB800063FBB1C6811F89FC626C63CD3BC9F13E7A +:10CB90002F1C63EB29A37A01F283915E75BFF7A97D +:10CBA000056608E6892FF75CC3716B7E3457D88D14 +:10CBB0000AC57124D00838AF72F29F71F09B699E4C +:10CBC0005CBFB6787DAF62F0739C33C53E866CD097 +:10CBD000B9E16EA968FE00D2BF7C209E4F9EE4782A +:10CBE000DF3B186F0980198BE70F03F18B291ED6E5 +:10CBF000CD587B711CF5C9E010CA5700ED4F6A276C +:10CC0000FFD22E4FFD2AD893B89F2AECC9AE70F5FB +:10CC100084FE31C67FD8AC09EC212591E2F97DED87 +:10CC20006D1E5AA7CE25F8E58AA3CF57C1F8BB548D +:10CC30006E77C871C54478DCEBA9143476A9400F2F +:10CC400025C8FB71F75F146C7E405D8887ED9219F3 +:10CC50006CD757B548AC73AE79119E5CBC4CBB3AEF +:10CC600021E6B751209572B9C59F607D02738D5939 +:10CC7000FC02AF2637723EA2FDE68B7B19ED2BD569 +:10CC800039CF65162C719E07F51A9F30302F546BE3 +:10CC900056477C71941BE7394DAFE087D7F5FCDB35 +:10CCA000AAD3BEEFEA788ABD569B831B1E19F9FCF6 +:10CCB000FFA381E643EAC27C7498DCB9A1BE78BACE +:10CCC0004F223F5F1D8902BEC826FC6E9BE0771A8B +:10CCD000D71FCADBE5EB4FB7586F7676E8546EEF97 +:10CCE000A8A3F7777724A8BEABA391EABD1D06D50C +:10CCF0003777B452795F4752AC531986EBDDB632C1 +:10CD0000FD5E3C3FC7CCCD2D3F824FB645F4171892 +:10CD100079EC03BC2ECE31BEA676B7E039C86D855E +:10CD2000FA551E00E1D1E2BFE9C67392DB6AF5173E +:10CD3000F0C8C8F4FEF5CF7463FBB9BCFD1FD47B0B +:10CD40005A30AF6E9B387FC0F49567A103D78B85AF +:10CD5000E2BE9C6D2556FC6172DF95E17740C76DA0 +:10CD600055EF6DBCA09C3138BE8FB53C17A7FC02B7 +:10CD700082FFBCC0FD043FA926F07F9604BEDC4DB7 +:10CD8000F8CFB5F20892EC0ADB7A342FC0CF556C9D +:10CD90006B786F703708B8A3C9610349FDB09A0A70 +:10CDA00007300ED096353134D3A73F4E7135A6C724 +:10CDB0002675DE643D3AC20B73ED7D150903D5DCA3 +:10CDC0001CD7F3E81283FA2D0FF07C8FFBDA9B550A +:10CDD0003E8F0D3A7F501D10F92660F0A25E947FC1 +:10CDE000E0253B471FA73DB63317E4DA8D0BA77646 +:10CDF000167B769278323949F21B5535075EA7FDCE +:10CE0000CE7A50DC8333597E5C2DE4EF25573F43C7 +:10CE10007E410F512F7AC4C31A616A17B7DAD6134D +:10CE200086F754041D764D2451E4A8FBB47247FBE9 +:10CE3000B294D30E2A49CE76BC9FD236DF519FBA28 +:10CE4000E67C477B7FBCD9518F367EC4D1BEB27D94 +:10CE500085A3FEA7D2FB1D17FE6FB8EA93ED47C16D +:10CE6000386831C641B99FDBAB5D43F1CE13C823AF +:10CE7000D4CBE906B297C056A67BB250C0D09E561E +:10CE8000341EEF0CC26445790BD439FD375F85330E +:10CE9000EE196F33B256BF186755300E4AF6BC41D3 +:10CEA000722387593640E7BCB89D8DEA16ED063FE0 +:10CEB000FB5A5F35FF2E61CF2B7197B2D8B7C76B86 +:10CEC0002070DD385B9CC23D4E7C6572C23890BBE1 +:10CED0003D0BCBFA1BB67933FE77327BC36637FD49 +:10CEE000BD90678BFE46CB2D6DE40F314F6200CABB +:10CEF000AE8ABB4DB43F376213981FBD58223FE343 +:10CF00007CDDBA1E9398D0BEADF01CF717209E575B +:10CF10006629261C9FDCBA1612EBD8A260723FEA83 +:10CF200035A59CDF9362B553146EC7B37A3E3F07B5 +:10CF30001B6ECFE23E9052AD35A07856C959F5B27E +:10CF4000081B334FFBF13C682DE69BF37364811A99 +:10CF5000EE6FAB7A9A4A7F8549CFADF796DCB17A0E +:10CF60002EA7BD8915747F9AA2669916C66D99433E +:10CF7000CCEB90BB145B19C9EDFF6CC7F83AD9A58F +:10CF800019B1AFEC8C178CCA57FDE4E6C11744DE2B +:10CF9000C0C92F65E51500DFF2EC0FE46A909FD75A +:10CFA00002DC3E3BF9259E0FF16CC72987FDF14657 +:10CFB000A094DE2F5F7E485E66B31397339E7FC6D4 +:10CFC0005856BE6CAE7D3C9147268F1C3983767FC8 +:10CFD0006262FDFCD1F8B5B4FF62D5FF39E1A5F876 +:10CFE000D43FCB30711660BD8AF26BC7E29571D821 +:10CFF000D91F8DAFA67E4EDE9995D18E7CB6439516 +:10D00000F0FC2EE289F1F3E5AD8764CC873B1BDCB5 +:10D01000CFB9E4F75ED1CFC93B93948FE7CB5E45A0 +:10D02000F178DF754983F69B1987D377AC98EE6D5D +:10D03000B9F0F46728EE66F567F5AF229EB63CC5F9 +:10D04000BE188FC3F5219E31ACEB93C253453C6DA6 +:10D05000E71C47E91CE3F1ABF1E8DCD5912A946BBE +:10D06000C77FEF2DE1E78CBCBE84962FCEE68643CA +:10D070000E437F763D6FC1119E188E6E84C3E69776 +:10D08000F784793E698F9CCC1BDF738FEBD35CE315 +:10D09000021DEA4AC97B237D7EB29A19AD40CFDEDC +:10D0A000698CE80980FD7658CDC53FFCEA5FB33B4B +:10D0B0006C79E14A05BC77F4D74EFADAAFF3F3C5E1 +:10D0C000CCFEDEE6BFA9B82E403B6FAC97DBF5B1D6 +:10D0D00020B5F7C69CE79047D7A16912E5957B4537 +:10D0E0003E07C3145FB473EA120F92DC0415C2F357 +:10D0F000FA40EAC220C99F61E2FE2898CEEDE87F9F +:10D10000F8589A74BF525E47FEDA78FE4E5FC70148 +:10D11000079F2DFA59E724D8E96B755ADF3C759FB4 +:10D12000C778D164FDA6AECA86E753E8AF96F0FB98 +:10D1300024C7C3A32DC8F7E7008FB620D97306C54F +:10D14000132C3C025A9298D1159939211EDD020FF9 +:10D1500037FFBB2D3C2609B75FAC0763E854D949BC +:10D16000F9F966A542F113371E7D553CDFB4BB3299 +:10D17000F120C62D6E1578597121C0EF56C46F7419 +:10D180003E6869B18FD9CB36E03C603C7F8455E482 +:10D19000D7CFAAFA75C73CEE0C72FB26304A57214E +:10D1A000870BB81C5E1F4C75A25CF86B7A87B06E5B +:10D1B000AD3763F22C2A9DFB8F9B2A9DFB8F56DD9A +:10D1C0008203F33F1CFB8F22CF42AD107938D9BFC9 +:10D1D000257DE7AF68A7FD4755CE66C96F14FB8F65 +:10D1E000AA7A90D6CFD1FDC70A679E05C3CBB46C8F +:10D1F000F8DF11F438E323AEFBDFCA5CFCDA552913 +:10D2000009FFC7C99F5D6B9DFC79782C7F1ECEC737 +:10D210009F5D6B85DC5D979F2F65EAD71C7C194F5E +:10D22000BE66B40E3D9F6242FF83FE29E2BFB36D2E +:10D23000E1BAC398027F17E378F83DC3C7302FE205 +:10D24000FBD1D43F21FFCA6259B2B18A5AF9BE77E5 +:10D250008F38377F91F7B48AF74F6C59521DBD064E +:10D26000CAE1A0E4A09355E23E1ACE8B2EF0CF5136 +:10D270008F9E7C65D684F19BDD1DAA43DFEEAEE177 +:10D28000E74477AFDB966C0612F4C46A28DFA2BFCE +:10D2900056E92E467FAA4EA7FCEA9F04F9BE8CAC45 +:10D2A000717B06E8F91384DF174B8BF80BA7F30C9F +:10D2B0002363A03D538D378B417FDA202682F11FF7 +:10D2C000D94697609DDE3983937C04F3A3801E2F9B +:10D2D000217FAAC16C96F3D063CB12BE5F714BD392 +:10D2E000CCBDF63CB14488CB0FABE7F72130391108 +:10D2F000CF67D75AFCBB1FE8554F7AC49010DED8D1 +:10D300006D3C5FF021F17C5730F92BC42B96CC4853 +:10D3100088E7BD62BF4A02492F2579E3F794DD7F94 +:10D320007B50C81BCF0F3A11F4B8E5ED4470E158BB +:10D330007953D249034DDA1F8753BF0FD2FC3EA861 +:10D34000E13E40E56D7CFE6EB4F2D34CF62CCA5142 +:10D35000B995F3C0F87C2ED6F5BDB89E4E0B717909 +:10D36000288CE99896C5F4E70E34E13D7A3DA9B0E2 +:10D37000817AB5B2645B5333DF271DC1F84265651E +:10D380009AEAAC491DD907EFCBAE4B1CC2F3CDD303 +:10D390000D95E85FD69A31504E7B3AF8BE6C11CBB2 +:10D3A0001A4A9E75DBA7F0F86C796CF57286795E87 +:10D3B000A5073A15E8A7A793D1BD4BC5CB4DD2EF32 +:10D3C000E58D7E0DF55D6515F3A808D7658CEE89B2 +:10D3D0009D7E077F5F0CEE9797D631AD93721AC191 +:10D3E0009FBEDCC6373596BA11FB3F144E4D0B2D50 +:10D3F00044BB9AEFEBFA62DCCE4EFB320CCF9506C3 +:10D40000979806C2D35F7B255B6593FB7921CE0F8E +:10D410005F1D3332F539F9DB463E27639B1BAB03B7 +:10D420009F0D63BB20D171065B29E4364979B04179 +:10D43000945B9DE4F25C1CBFBA2E6BA2CD5016CB60 +:10D440009848279897B4EF91F6B132FC2E5DABB4B3 +:10D45000D1796B93FD8C2D02FDEB61E2123FCE374B +:10D4600035663C8472F38B208FD3F80BCCECFD3106 +:10D47000F497FD9A9EC03CFADEECD3186F5CA626AA +:10D4800031DE181EEECCBE02743ADA16429F00EC72 +:10D490001C93F23A0AC02F3418E9775AB763CB19B4 +:10D4A000E51B14AD2B92701D057AB520BCC1C614C6 +:10D4B000F949D12559A2D76EB9FDDFEF84F6BB8FAC +:10D4C0007913A66E9B2F2C11B7FB8D15EB403FE413 +:10D4D000B157ACF6675B5F73FE2D8FEF5A7601CCC8 +:10D4E000AB2B43A43FF8BC9AEC7A6D9DFFF5C5F9D0 +:10D4F0007E8192BD94F2F4149D250244DF14D9DBA1 +:10D50000FE38D3BE5AC5CFFF529E718CED0DA15F80 +:10D510002C274C5A8FC4795C19DF2FA073EA0F7A3D +:10D52000AA789E1FB6EF29E3EB2486A9709DEC290B +:10D53000E3EBA2D9CCEAF03E9E9EB2A4339F4B12FD +:10D54000EBD0E9CBE397DBE8D7334E7ED61F435CC5 +:10D550007FF6609E12F43F58C6CF090E62FE25EE9C +:10D56000E3BD2C51FEE56065B20DE787F94A88EC12 +:10D57000AA43250AE137F872E441BF4DEF59799883 +:10D5800056DDCABBB4EAEEFCCB6A732DC5C906E30F +:10D59000D6BDA42B26CC3BC17B1930CFA0D7959FFD +:10D5A000D13BCE3993AF89F986FB46381FBCE124C5 +:10D5B000D90D0AD80DB4BF8C7C433E21DF18EE1B79 +:10D5C000DE4E7E8EAF826998D764E5D9011FF722BF +:10D5D000A97C7282DB11E2DCB42CDE5B7CB3F8BC8C +:10D5E000A984E7915A7CDB54E2CA1B2D71E68D6E4B +:10D5F00042BE91DDFBD3B85DDF6C5A7825BF3F5545 +:10D600009CCBFEE35DDFEAC1F86BB5F9398A13F50F +:10D61000941D26BA292C199D21211F5384A79B0EE6 +:10D6200003822F20EF4FA0BC2B71B18E083B35E851 +:10D6300011E799051DB70ABABD2AF4F9AB623D1B83 +:10D640004CEC25BE9F40BBB181B129984D09A095F6 +:10D65000EAC926BCBACC1F4E1DC6FE4FFEFCEFCA5F +:10D6600010EE10C6A36C7E4B4C8CC3D8502BEDFF34 +:10D67000FDEB0C0FAE1BC81FF4ABB60A79B4E05635 +:10D68000FAF83DCA16DF800F7ABEF9D653B29AFB7C +:10D69000B730DFD01E1C9D6F15A37C33C91E1479D3 +:10D6A0008CEEF966F1F9CFCDB7AA60F2F55009D743 +:10D6B00023C43F975CFEA5E2C7CC6FF5F03CA84FB2 +:10D6C000BDA778DFF8791B69CA3B287BD94FFA3AA6 +:10D6D00096D3D7E130DAA7D739E59725578A75432E +:10D6E000F71C03BC627757EFC917CFB1E26427A1DB +:10D6F000EF21D493722A88F930FBB75F13C479B451 +:10D700007FE7C4FAE75EA17FF608FDB31BF3F46C74 +:10D710007A68B7D0B3F7B9CE2FFE6D98CF9F656109 +:10D720003E9FF6ABC920F29D1DB9EA23788F76CDD6 +:10D73000735ED23F53B71E2C9C68FC8A759EF7958A +:10D74000A7B720EC3A277596EFADFCBCF74B97FBDB +:10D75000907FE54887A25EDC2FF266A3248FD5B7C1 +:10D76000F1FC93B2BED400E374C0CC13163DFD1897 +:10D770009DAFD93B083CA7F88851B00AEC24329100 +:10D780004176F7F7ADF04C83F695655EE6419F7202 +:10D790003BDFE754E11F8F7F649B18B7E3E93EC38B +:10D7A0001969E73E6899C87BAC74ED7396BDFC9F20 +:10D7B0002FA37D57E6BA9FF6FDD2FDDAB0733FFB8B +:10D7C0007F17DD77CB0703F6F560AAC492289F5335 +:10D7D0006F7CDD71EE667D98EB5DF885BD668BA78D +:10D7E000DF271D2C44FDBE671D8F7FC14F37E679B3 +:10D7F000F9EA86BF8E7CDBB9EAF6DFA07DD853F26A +:10D80000E68731CFB13B1CA27E76AFBB85D9FD3D0B +:10D81000F03BBAC336BF6C4FF70A6EFF9DBEF59062 +:10D820000FFAABBD8D25F83967F633BC4F5A177C1C +:10D830006ED9CE88CFD5712FA37C0BD3C9E7EAEB85 +:10D84000B89EAB1D6419949B196B4CBAD7A7663D63 +:10D85000D8A3F07DE57AD971EF70CDF631F7823734 +:10D86000A39C4C01BB15EF1BAD49B71FBA1F430169 +:10D87000C24F98E2BE97DB35FE7EF5E0A5B41E826E +:10D880007CA0DD54ABB74B591C3F156ECF60A8A4EC +:10D89000CD397E19A089FC70CBA37B9CF72B6FDF61 +:10D8A00070C9DB0976F5270E003D323D8FFC84728E +:10D8B000AD59C663F7472D799399F18FC82796E440 +:10D8C0007630938DAA7CFA7C544F272719DF629714 +:10D8D0004DB82E14279D795E85ADCE3CAF60C25900 +:10D8E0005798AD5E951B2722E2322CD5AEDBC7EBF5 +:10D8F0008B98CFA3BF393C78C3C531500A7D785788 +:10D90000E3F958BFA517D76509777E0095811A9965 +:10D91000F4D1C9733C6407862A950C2E56356CAF3A +:10D92000817E1D5BC0954A2DC61180EFE1388F23A3 +:10D930008413CEFCDE51FA88F6A08626F4FF8D957E +:10D940004D0CE37C41D457B4EF6E507CCEAFCB147A +:10D950008F84F9F35698C75B19FAC73EF08FF1B977 +:10D96000E5BF5BE39C8D0F936D679DC7EAC6F358D7 +:10D97000807FE134AD0AF3F518DECFA8DBEE2D9CF5 +:10D98000C6125D8CEEC5AAA278EDCB218D7C2B71E1 +:10D99000FEAABBC3757EA1909F5F783090F2476C62 +:10D9A0007108A9A8D5E117C4593BB72B59924A6D04 +:10D9B0000A6B7806C72FE671D0AE486F15EA97EE6E +:10D9C00012E73AFBB108D763F18897E7D184F87E74 +:10D9D0001253CD32FB3ECAEA085F87E1FDE7512EC4 +:10D9E000AEDEF4F747FBC066D2A2AC01F3360AB54F +:10D9F000072E6E053A6933C4F715E37C3F837D0338 +:10DA0000DBAF88A48FCAD87E3A97ABB6C8D7699DDA +:10DA1000D366F1F3846C81BEA71BE0DFF9A9523A0B +:10DA2000975FFCD7EBABF01E97D17E70AEC2FAF8D1 +:10DA300009FC0EC74BF1789D95B707FE7E7DA404C7 +:10DA4000E321D92CC6A1BC61775CAE3EFAAA4DFE9B +:10DA500016479C7139F4CB301E776A7806C5E164AD +:10DA6000CCAF8D8EE5BFA2FE358F2B6AC762A3F7C0 +:10DA70001C56239CA3F75FC47B63A8F7553A3F96D7 +:10DA800007CE26E4EB583885FF18E1717937BC1FC3 +:10DA90008938EDFE6E8C1BDAF607EE29E17EE4286C +:10DAA0001C8944BC77410E8EA4F53C6CF2FB3934E2 +:10DAB0002823B9F6E9655F92108E4783A92B103EA3 +:10DAC0005FAB41F05D1CE7FB23A3FDC69CFD8E3ED2 +:10DAD0008FF37E47EBADBCEE03F4314EA62D5B4ECB +:10DAE00079CE3D229E6EB4F1737BC10A7ECECE4DBF +:10DAF0006798CFAB919FEE38A53F6C7C3642F37CA4 +:10DB00001CBB58C4DFAE69140467FA87717D5C2BB7 +:10DB1000F2BF6EF9E6FD4771FDBA6531AC9609DCDE +:10DB2000E7FBF2515C9FBD78AF00E52BA68FBE02EC +:10DB3000F5EBDA428CEB996401E2FF16E3E7E9DEEC +:10DB400062CF169C678FB347F87E0FEBF3D17A65EF +:10DB5000C23F9487EBD33EC7FAF5D99DCEFA6AB699 +:10DB6000A214F5C3EAED3EFC1B0F6CAD6B7DFB9B75 +:10DB700008DF47F82C6BEFD56C727CE33FCE5590F5 +:10DB80006E6BCFD3AABCB6F3229B22DC7EFE25C8E7 +:10DB9000B16ED3273784330AEE6FBEF6C479575E71 +:10DBA000C0B09F4C6FF902BA1B9BF4849BEED7F672 +:10DBB00039E13C1B1E6EB82DFF613C38E4039291A5 +:10DBC000EF3EA3DD42BE73F7BE8A73141B64D6B565 +:10DBD00000F361BFF4309EBB586FFA353C1F7D32B5 +:10DBE000302D837F9FE21F22BAF8AEFD433C9FA8F1 +:10DBF0007D1E9603B14C12E5CECA4308A8ED04A3DE +:10DC000024F37568207E96F715F0DE3BC1FB9A89F8 +:10DC1000BFC7BCE2338B78CA1CDD4B21E275567C52 +:10DC2000A6CB97FC18AE1F5DFFEAA5F3965D85FCB9 +:10DC30001CA159C974BA6FAE2619453EFB9FF3C6A5 +:10DC40003C554294A1DE5BD64AF1C8EF467C62DFC8 +:10DC500098CF4F7FD834705FBCD7978A17029D95B5 +:10DC60002FF1FC88A6702A85DF79E36D3E8C437D19 +:10DC7000FF916B298FE386F8C532AE233F10FDBCC0 +:10DC8000F5D56F2C62005FEFA3119625BF2FA3A0DF +:10DC9000DF77C3135E8AC37EEEB1088D7FC3E39F37 +:10DCA000DDBF1CFA91FE71A9FE06CDCB2EFAFE86D1 +:10DCB000272FFF1753E083BE7357A7150F4F905FB1 +:10DCC0007CA39F7D06E3BD16FE16DF553D4D793AD8 +:10DCD000371C28A4FD8B517991A17D3D9D1FFFCC60 +:10DCE0008A3CFB226F0979FF7544A1FB97A5038746 +:10DCF0003E4DF01DFCB80FF1922ADAD92F60BC57C7 +:10DD0000057ED08EE203E65724BAC7E8D75FD9A3D1 +:10DD100060DEC40D07F628D7D0B900BECF6FC1A909 +:10DD20001ED86AE23C516BB46A8CDB2C7BECD102CE +:10DD30003C4FF5B9C7FED07B3E3CFF9C978D2C072E +:10DD4000FD70F301EF713C7F11D05DF6A8C84BBDAB +:10DD5000895410B4FF87FFB8F825F8EE97A08730F4 +:10DD600015EE9743BF50BE8D75B083510FDDFC9407 +:10DD7000735EDD7CE03505F1D13C6CA4E2028C23BE +:10DD80003BED6177FB13ECB482E7656F3ED84F7EC5 +:10DD9000DBCD4FBCF522CE8F9B5DF3F397F84BD9CB +:10DDA000587BB8B8C0E57F1D289E94DDFAB9474F6F +:10DDB0003C60021D7FFDF8AF1E30818EEBFEF8EE59 +:10DDC000037F87F1BFEF0634D42F377FF5170F7C21 +:10DDD00011F07CEB29BF07E5E2EDA71FDEBF0BEAE0 +:10DDE0006FBF306BBE04F5FA023EEFDFFEC6EF4BAD +:10DDF00075E8E7B6A72F9A827277DB3797D13D5641 +:10DE0000E38DFF7607BFB73E074F869F3F7C4A42B0 +:10DE10006781FE4007952E3EB0F48882F3ECBF2464 +:10DE20003682FECC4D07FFA0A0FC1D35D808D2E5F8 +:10DE3000C813AF1DFD22D4DF02BEF8F3F005F09E3B +:10DE4000EAA1F318D9A918DFBFE989CB3FB674015D +:10DE500096BE04767F331B217D3D869FCF013F1701 +:10DE6000E4F8392EFF1EE9A73C849B0F02FFCE1D6C +:10DE7000CBBFB7F097C563F9F75705EEF385EBBE57 +:10DE8000BC0B5F3E519CD79EB5FC991BBF79C584E6 +:10DE90007ED3DBAEF93A1E9DD708BF225E607CB20E +:10DEA00000E7E5E35FDBBF2B867CF627F0DED2B729 +:10DEB0001F3D310D2FFD79D337F269A4C3C8D37E3E +:10DEC0000DEFEFBFE1E97FA375E1ED6FFE44D1F9FE +:10DED00039CE0209F4E6DB6CF4E759DC97B949EC7A +:10DEE000A7DDF8D0FFBCF845F8FE46DC1FD3887FDD +:10DEF000543F6AF0733237652E6BD531DF235342BE +:10DF000078DF94E1F3E1A6CCA1959867EFA6FBB684 +:10DF1000026BFF2FC757FCFB48373D71FC6294BF73 +:10DF2000F1F869E1AF21FE1F82F70F39E7EB58B92D +:10DF3000195150FF5BFC7D7BCF49E525689FFDB6FD +:10DF4000A279C01E7EDB37A2D0BAFC0DAFB62F314E +:10DF500096EFE8DFAEA2FDB00D79F793DDF2B0C920 +:10DF6000250F163DCE369FCF8EC77BA3D39D05BA16 +:10DF7000435E2C7A759629E43F7A0B14BAF7BAD728 +:10DF8000A7FF1BE6018FFCC0C7F6C2275D058B28E3 +:10DF90005FC10D27FA4BBA6DFF440E2729EF538E50 +:10DFA0006974FFC0D83C238FEB9E2B7E7E53316576 +:10DFB00086E71BDCE735DD76C617BCC60BA92AF25F +:10DFC000C79E2AC0B8BDA7FDA9618C1747570FDFB0 +:10DFD00009BD6D1776D9F688737FE54801F72FAC38 +:10DFE000723BFAD338CE15E2EF7DC949C99E9F48EE +:10DFF0002208FECDD1CD5FB8C4ACE7EF515EDCCFD7 +:10E00000ADF1648DEF77FA13FCDE0BF0338671DE31 +:10E01000748B49F3AF42AEBF1F4DFE18E12EAB002B +:10E02000375DE77E45BEBF43689503221FA1AF233E +:10E0300045E530CE25CC57D1B2740F05F82F2F62AD +:10E040007F305E06E725FA08A857DF7BFF1AE379E1 +:10E05000413C3F665730F53AF6EBAFE3FEAFBF8287 +:10E06000C7AFBD22CFD3B27F47F592A0AB555A714F +:10E070006EB5BAAF0EEF6F4937C5395D5892FCD215 +:10E08000DF8875C6BA9F7087C4283E614A2AE78731 +:10E09000C174AD94C7DD111FAF6A90D3E6C33C765F +:10E0A000BAEFCBA43280F245E798B264D71546F9AF +:10E0B0003D64D6F940CC9342B98E269884EBCBF6DA +:10E0C0004882EE5D3057316D5F43EE7DEF52711F38 +:10E0D000591DAFC7931AC3F6A16891B51F4BF9CD6F +:10E0E00053529A86EDFCE1A43FBA30E7EF2F602946 +:10E0F000928F5235CCF3DBDA9CE77146E5B2D0491A +:10E10000372D2AF20FA25C3E3017A7BCC8717E9152 +:10E11000D9CF2F5A718E1E71EF4CE1346D159EE7E9 +:10E120001D37CE51DD3E2F8176A1886F5879098544 +:10E130002D7CFFFFA4F053613ECD88DAFC59A9B4D1 +:10E14000CD15DFB0EEAF318FE3FCD3E6B177288E8B +:10E150006DEEBA04CF9768B3D837B0DE25EFBC8434 +:10E16000E210E7F1793267CB6E9A27DA87445CA236 +:10E17000D11997582CF06E00DF9EDF6FC6FDD46575 +:10E1800051EEB7CA5A3BF9C10D51EBEF99703F7987 +:10E19000B4DEC2DB8FD6EBF9FBF7E1E72E8BE6F7B7 +:10E1A000735BA213F8B95AC443F7BF8FD5E3833C1E +:10E1B000CF4FDC2BD515F694618A94B6A3B481DFDA +:10E1C000CFD2780C53EE336B63627EF0F544660277 +:10E1D0001F11F7B4C6092E5DF102C2BF13AC56DCA5 +:10E1E0003FDB21A5EEC5BA2905E8BCFBDD92D06B6B +:10E1F0009F9A29F49A199889FE5AA49AF2E077A274 +:10E200007783EF93FCEF196CA9BB8DF4EF4E733B52 +:10E21000D105F42FE95B73835FC3FBFFB6A76EA143 +:10E22000F7A6AC6A786E7BEC39F9CC0F701FF77BE0 +:10E23000D169045FF7926DFDCD30EC9604CF870A6B +:10E240009ED3A2DAF349F647F9BCB7DEBBE9F57411 +:10E2500034C2F15C9C9F9ED6F7D6FBE03932CDE705 +:10E26000EED4B38F621C6FCB92C31AFE7D809ED812 +:10E27000334B903D5DD81FD0B1BB4ECEA25F60182E +:10E280007B48BFB9F90B7CDF80FC951B3DE43F5810 +:10E29000F959DDCC0CA01C5D124DF5A25C6C670930 +:10E2A000B5AA0AEF555E5447796F025F8671799B74 +:10E2B000FEDD21196C26E999B08679424C35084E6D +:10E2C000E07111EA95513E9D337ADF22E997823A57 +:10E2D000FEFE1E29C16AEDDF1B86AE2DCAE9433C56 +:10E2E000A8692C4239173FB35324EF39BD7890EA1F +:10E2F000613644E5D7502F96E079E94CEB4CE86461 +:10E30000D79AC3A4470AAE607BEC79602596FE5A83 +:10E31000E9D45FE3E9A39DAAD18FE35D124D7E05A9 +:10E32000E9D7A5CD7FF37A806F6394C74B2CFAA809 +:10E3300028CF305E09DE975388785CDD89F701C409 +:10E34000ACF8B16B3CC40FF19D2AD0B3F6ED91BE91 +:10E35000B8FF52B686EFC355B021D24BD3D808953B +:10E360003A5A4A33500F272599E07E99E6ABC7F415 +:10E370004867E6E4E07E58E88B9D0CE09F415E3301 +:10E38000D1DF4C79043F1801B733B9819F0B8FEA75 +:10E390007C1E3371FF8A6A04DA6CF3D2F26BAC4FE5 +:10E3A000FDAC90F6814E8838D745988083FEEB7A95 +:10E3B000FEF7C3F4BAD8063C270B4268D03941981F +:10E3C000F818279FD6A48E9814E7D2E8FB72FC3E7B +:10E3D00081F7F039F71BC2D739EBE5627F709A6B92 +:10E3E0009FA15CEC0F96335B7B61BFA2FC5AE744B4 +:10E3F000CE66BFFE22FAA7EDC3BE15307E85F3665A +:10E40000B2E74C261B6772C797BA9A1A9E8F019D76 +:10E410004ABE75FA92D6C5788EFB20A675B34357CF +:10E42000F4BE8074DFC53C09BABFD665579C5A5B01 +:10E43000C4E8EF91B617245044FF17EDE8A52A0071 +:10E44000800000001F8B080000000000000BE57C2E +:10E450007B7C15D5BDEF6F66F633CFD949D87910DF +:10E46000C224E11120E82609C8AB75481053A4BAAC +:10E4700001AD685BDDBC24421EDBF8A2ADF738219C +:10E48000112970BDF1D1965AF06C38BCACE0DD407A +:10E49000C0D406EEE65104C41AA8A278B48D5A1569 +:10E4A0002B909816B13DF6707EBFDF9A217BEF244A +:10E4B000426FEFF9EB860F9FC99A35B3D6FAFDD6B6 +:10E4C000F7F75CBF09800AFA388044C01F0DFFAB24 +:10E4D0007A83E405B059ED123F40218003EE0350EA +:10E4E000005C10E27612B4F33505BAF8EAAEF681B4 +:10E4F00024031C585AEEE948A2F156AB1F8F02C004 +:10E500005B70299D0633000600DCA060671940F7A8 +:10E51000031072E6D33CA352A99DF5800D42124030 +:10E5200076C09F1AA1790DFD6416AE2B1FC48F47CC +:10E53000C7678BC4EF97F07F7AA50B6CAE9EF60091 +:10E54000BF1AD34642E4BC0C1C374B81952A40E6E7 +:10E550009CAC98F7A1C9F641471191A8C1A50280CA +:10E560004120DADC8F93DAC1D8BF0ED73570BC53A7 +:10E570008DE0FBD90B0C2982E3E50692828A0FEF2E +:10E5800007F1F9A8F9B2E2DE5FFAEEA7E987A2E6A1 +:10E59000BB564DCE207E20BBD54B0AF3C117213E82 +:10E5A000BCA1F89C78DBD6E164BEE4205F880FDD77 +:10E5B000F422B607CD859091DF9B1F171F3D937EF8 +:10E5C000C84EEB041FAD2B0FC789E07D67562C9F0B +:10E5D000DC5A2C9F128B62F994EC8BE54B7E47033F +:10E5E000D37D18E986F100A9E3B558BE9A7C2BC209 +:10E5F0007F7DF12DB72ADC40F4F4E6CFEACF956BAE +:10E60000AECCA75BE3F8A42485EE00A46F20C83E3F +:10E6100005D7A5D8043E6C6AC769BA9F4BF733F893 +:10E6200075BF0B719B6DE156074DC5B664B62FF3F0 +:10E630002BA3B9E11E7C7E5030C547FBA8170F32D3 +:10E6400016114EB04D38819200E3D94978C5F9DDF5 +:10E65000847785F01CE1FBC9D0C1ED5440BC171292 +:10E660007E430D62123FF847D373EF9AB8FF102E26 +:10E67000111D26EEB1DFE8C860B90A3E8BF3DA5D02 +:10E680003322019A578120EDD94277E041752CADB4 +:10E690000F6C83904E77118414E48F5345F92B88C7 +:10E6A0001E475C251BAE07DF57D68AE76CE5C165C0 +:10E6B00084035C4A90E9586B3B7B99FFF47E81CEE2 +:10E6C000EB47B8BC4DEFD9916F2B996F6A2480F35B +:10E6D000394CFAAF966E27AC553F4EEC2DDF0091CA +:10E6E000860E921BA293D601FA29C2ED50731F72B7 +:10E6F00097FA855C0E54C089F8CA0D86196F79881F +:10E7000037859E7F46E0C685FF68DD794BC32C7751 +:10E71000F92477D8AF35C5E2AA70456C1B947767AA +:10E72000127D171E9181F832300E6F055AFBFEE103 +:10E7300065C40E5797A1D2FBE05B1085BF418114E1 +:10E74000DF825280E7E9C684DEF8DC6AE1F33AB89A +:10E750008EF079FFCC5B198FFFFAC8064F0055DBAE +:10E7600025FAB9BEE7BAEDD12CDF02C4DDBA475DA8 +:10E770007C4D0E437922CE9FDF22C6CC9FE37FD60D +:10E7800049F4415250F2F5E074C3A3B82E64DA2F75 +:10E790001E55F93D1B045A091FA11F1C2B2772BDD2 +:10E7A00065A17217CE7B50D67F45F761631A837FD0 +:10E7B000F4D25C5E7FF1D23CBE5AEBB0F667D0DF9C +:10E7C000DF9A7923CE37B859F62DC3BB83BF74EADD +:10E7D000E16280674D7AF39B3AA479D87E5595F82B +:10E7E000F995AAFE1B1EBF4A8CDF1FBFE2E7794ED8 +:10E7F000823961E4C7BA074EF27C4D6AC61885E8D3 +:10E80000B5E9093393017EAF2272705CC75245FBB4 +:10E81000637ACFFBCB9B67A5A27101874B9755BC51 +:10E820000E699E22BBCB5881F836F1AC01B8359900 +:10E8300070274304D7B100AFB4AF0FAB81F7789D19 +:10E840006A0244A270EF58EAE0F1073D38352180B2 +:10E85000746D747548848F4112048D3188BFEA58F5 +:10E860007A0AAA7D32E92F6B3D167D2BD5C019158A +:10E87000E9CA7325719BF844FBAD4452590E07AFAA +:10E8800081D04A64D9C04780F5FA903748BB109FC1 +:10E89000C3921BF7699A3223A1A398E5E1E6B95127 +:10E8A0007A7C6300ED143E3F2C5B01C2A3A55F514F +:10E8B000FD09B9055D26BD92FB48148EF1FF10538A +:10E8C0009F0E8328FCE3A043DEFDF45D34CAD81F0D +:10E8D0008BFBF87DCBAD465C45C98D45A7455F3CBC +:10E8E000EE9D1EC43D390999907D09E5FF024CCE8D +:10E8F000BC41EBC1451E2AB6F1693D7CB370DC8397 +:10E900008B10EFB735FE9848ECFCD638F1F2138F38 +:10E910002BC966E8ACBFB2405548EFFA8C3B24D215 +:10E920006332EA33C289AE6BEAB81EBD2F050EFF13 +:10E9300055423E392A0D4943FE67CD081812F91B8E +:10E9400095E0D3B05F5F916FD0780943DABFB11221 +:10E95000DB5901DF7E1BB69D19EDDF50B03DCC9336 +:10E96000C4F32E74EBC33CB8FE74D27F0AC9A3E58E +:10E970001705F9EA8266BE2640180CA5C73FDAA73C +:10E9800006AEA5F72C3F293F02B243A2FE20EFEBD3 +:10E9900070579241FB18AFAF13E3F56B521ACBE7F8 +:10E9A00095F8E3B40522F3B4DE7CC0656BFEE49E0B +:10E9B000E71F1F04ADD2B5D89F8BFC492139C50D87 +:10E9C0009C48C36CAAD48700ACBA6D47D600D6DF8A +:10E9D0001051514FAFFA96C4FD8B9FDCBBC24096DD +:10E9E000AC9A29DA759ED61506F275D51DD8CE01DA +:10E9F000F891D99F0F2399AF8F69E023BE5E1C5019 +:10EA0000EF027CEEF1DC59A97DE949EBDAF8284EFA +:10EA100038BCE739C5A696B39DCB954386D4FB7920 +:10EA20005B92D003168E568D9EA60FCF6053D545B0 +:10EA30001268E917DB03B6F79D48E7721C97D6E129 +:10EA4000700541C5ABB3F9BE08E3274EBFB84CFD16 +:10EA5000329FF48BC4FAE55E0FF25789D62FD0A30C +:10EA60005F2A3CC0FC1F5DA6B23E70FA90E3A85F2F +:10EA7000821E8D71EFD4DA65C29FA59F83E6F32EC7 +:10EA80009B1F7C48A7BD32081A5E9D33FC3AADC778 +:10EA900049F8C447D26768CC47FB10603CEA2BD6E4 +:10EAA000C3F7717D3FE8C1E50F085F8F78549E077B +:10EAB000375AA27DC61980AEFB54FFBFD0BAF3B35C +:10EAC000E0006101DF02C2FFF024A1AFF0B965A44C +:10EAD000AF6CFDF90DF4338EFD4C565A7DE1BDAFA0 +:10EAE00078A0177ED58CAB92EF271CBAE7067CB4D2 +:10EAF000F1B776DF06A4D7280FFE2BF913C6321B19 +:10EB000034E2F56789FFB285FCA8A5865325BB7959 +:10EB1000D19D17227D67D94BCBCE5A76D3B2BF0792 +:10EB20003CF9A67F12BC8EE40EA0FD5B64972E9686 +:10EB3000C8692BA1671DAB174025D9C37CC82927FD +:10EB4000FFFBF1A2799B57E2AB1707CD4B7020F387 +:10EB5000F67B141E67F39AABC3B1F59C62F381DABE +:10EB6000C7F3F1F8B53D201BCE6BFAC06DD13C83E5 +:10EB7000D67361ADD887E1CDF71DE8CB2E5AE3CA35 +:10EB8000BDF1BBDFF335F6D1EBD10F104E9E28F16E +:10EB900055F9FB58E7E93461AFD73DF08C9B70FC29 +:10EBA00073E253520F9F5606904F38CFC511F5CCE4 +:10EBB000A78F4D3E6D597B757CB29EFBA7F9143033 +:10EBC000F9E4137C4A6ADE0FCA3FC6A78FBF8E4F97 +:10EBD0002BFD1B5614206E8C80EC1B8AF87CC62FF4 +:10EBE00047AEC7F6CFABE46DE46FAEF497BB876278 +:10EBF0007BB3EF409B84FDB6F46481173572849E2D +:10EC00003386C8DA26923BB5B992D6B939B70456DD +:10EC100046E9B5CDB972652889F4DFBC84F9517C29 +:10EC2000D8BCE64056341F37937F55DC9B4F2FA44A +:10EC300049BC4FCF2E90590FB9031092F1D654D43E +:10EC4000E9D4CECE107177B62EDAA40734EC3F3477 +:10EC500066F914B27B8F2F4013AF91BFB22D928F04 +:10EC6000EB5B837AD4C99E8CF05BAC3CC19A408844 +:10EC7000FBED53D08FC6FEC48E319175193D716383 +:10EC80004271BC5F3E19C88FBF60FAF1D96B63FB5C +:10EC9000ED71FE8AAAFB221417A49A71817285B8BD +:10ECA000D133B503C8BFCB4DBBECA70C263FA5F1B4 +:10ECB000D156F890820FE57B025F4848B80F7C5927 +:10ECC000FECAB5E932EFD7B3FE65928ECFAD9EDBBB +:10ECD0002C91BDC8FE4A613F19A039EBCED13DEF62 +:10ECE0004D4C4B607EAFB68BFDF045D48AA40C5AD8 +:10ECF000B73A86F4B5F5DC78735F56BBC57365ED3E +:10ED0000FE8AE4AF7B2E59F8CFE33B9A2B52FA7878 +:10ED10002EC75C27CECBFED0EAA18E5003F265B59C +:10ED200024F4A7F19ADDC4BBD8E7CD0BD5F584B3A5 +:10ED30009D470A5615130E025A098DB7530BC80585 +:10ED400049FDEB4F2D5DC401C32A7D3A1B8FCBE3F8 +:10ED500045B609FB11C9FA1EF26354BAB0473B131A +:10ED6000507F309F023933A3F8B429EDF27A99FE2F +:10ED70003D6FCF4B94290ECCD5D2282E48CB0D8297 +:10ED80005CDC33DFCE5C733E9BB66A34D1B7309225 +:10ED9000BC328A7E6BBE3D097DEBAB2DA6BEB2F8C0 +:10EDA000FDF2990D31F3392B63E7732EC0F968DD5D +:10EDB000AEE6866BCAFA9FEFE57EE67BDEA2CFDC8D +:10EDC000B77D5F7E9028939F5984F3E13809345FC3 +:10EDD00052EFF9B2BF7C4A4A8E92E391340FAE7B78 +:10EDE0009FC5475B20675694BE7A384DBCBFC5BFF0 +:10EDF000C1351FC7FDF1D0E56EC2FD6629E41A4694 +:10EE000076728C0C9BF0FEEAB5DD11CA8B6CD18159 +:10EE1000A5D733DE984279847F4F4BE3F1B7AC2D11 +:10EE2000E7F7245B73838DF22A28E8B44EB48F6F22 +:10EE3000935ECAB3F203717E64F60C353217EFA706 +:10EE400007535051237D6B82C74650BE62A9EC63C5 +:10EE50003F3322816D5C4F1EC60506E76F869BE33C +:10EE600065071EE23CC55A05820AEA893EFC0D1F71 +:10EE7000F91B03E9376A97E89C6FB0A3DE8ECE3F9B +:10EE8000F6CE4B44A6D07530A97485BA7499FA872A +:10EE90009AF9997C5D2BB7E17A86AD09B03F99F676 +:10EEA00000707E405183FCBE849243FE5262E13A80 +:10EEB000CFE5BCE5246415F92EC8EF9BD354E13FA0 +:10EEC000E07E90FFF0BDB8F6E2B8B68EECA6FD404D +:10EED000EDD0457ED5427760471AF25D76E93ADD9E +:10EEE00077EB2EF64FEDE84F49F9A46F64CEF7FDAE +:10EEF000FFA6AF4FA699F914535F5B7ADAD2DBFD18 +:10EF0000E96992618A3FAE7DDAF32D8A3F267AF471 +:10EF10007788BF87C9AF1ECB71D71FA89D3D0374EB +:10EF20003BE1BB098143FB9D04725FB8471C735EE4 +:10EF3000CC8D38853EE2481720EEC96FB6F2847159 +:10EF4000385F6317F93703054899C87642BA87E4F2 +:10EF5000C87AFE0A384798690AC59594EF53C8CF16 +:10EF600036BED6BFCEB5754974C5F08AF13E04FCF5 +:10EF70008CF71C972A13CE0BA66A0D94771866138C +:10EF8000FEFE20C48DC1C4A840FEBE1371467EEDB6 +:10EF900033FE0F580FF4877BC4AB51C07C11F114C2 +:10EFA000E238319DE30C1DC8CFB1238E893EBD6987 +:10EFB0000A50DC92908BF11E44FB417258D2AEECA9 +:10EFC000FFAC297ACA4DFE14FA3FEC4F195572680E +:10EFD00068FE55F9411C77BEF0D4DF39EE5CED11C7 +:10EFE000F6D0407BB8299FECB3C6744CEE6AAF48AC +:10EFF0008DB2A3ABED912C5F313D1F99338FF4E6B9 +:10F000003AA137B7F8E3F566C8351FAF3F48F3F0CC +:10F01000386B864C3B3A82F49CCD607D61CD6F3C71 +:10F0200055F363C2212445B248FE57CFAC4F20FBB5 +:10F0300065E9D9F8E70EBB751FF1F1783F7EDCB8C2 +:10F04000F4F2B2749CAF300DFACEFB4EB5F2BE6A4C +:10F05000434CDE776A1CCE34E07C17A459F1DE3FC6 +:10F060009FFFA56B7FF9DFCEBD6F0D3290FEF716C7 +:10F07000FE39195F823FD8BA9289CF671EF95D3297 +:10F08000F953EF3DA25486B07D17AD6502C0DD8F08 +:10F09000FE7D1CE51BBF6BDAC597D2F5D944372C32 +:10F0A0001DC0C2756F48A1C386CB7A63C9D644120E +:10F0B000C6CBED9A707A4CDB5A478D1382648797E2 +:10F0C0006CDBEF188874DEBBD5C3F9C73374B08529 +:10F0D000F49E6919B49ECE559E4E177EC24BE9FE32 +:10F0E000F9B41FB41EC2D71FDA9C1061FBDB6E1788 +:10F0F0007E8F7EB3348EA207F113BFAEC3FB063AF8 +:10F10000C8DE2F9450FF7AF8F6F23D38EF4774FED0 +:10F11000E4EBBDEE85EFA90EF247164E812ECA43F1 +:10F120002ED9262D7F18DF9F679E2FC5D335D7B0E8 +:10F13000C7E8DFF9E1FB1CCC7CA5785A26E9E91584 +:10F1400012EBB1F92B629F43581CFE358EBB00C7F2 +:10F15000653BD41CDBDF7DE4FEE57BB07F67AB83E2 +:10F16000F5F6A2B87C62BCDE5E916EFAD7E3E03AB7 +:10F1700091072CFE5FC55AFFF19DA5AFCF609C871C +:10F18000A0813F3DEAE2EBD947196C303B5D63FE5D +:10F190002F69DD7F9875A1AD7D1CC9CFCE231F26B9 +:10F1A000DE895DF55922BEFBE6FA3F37EEC1EE522D +:10F1B000F0A746F8DC306227F9BB1E5C5A12AEEFAE +:10F1C00009337E2BFD12DBD1F435EFFFCDAF395E75 +:10F1D0004B0A6E42BED623E09796F4ACAF3E4BC4CA +:10F1E00075DF03DB5FBE8EEE2DE9B179FF7F96EE12 +:10F1F000FEDEAB41BFA82F7D60C9C76C13AF8D7B0E +:10F200007F362D07E93AFFA4E473E23A166F7DFFDB +:10F210002E92EB85AD687F4572F914787BF08A6495 +:10F2200033DE16913F82F80C54FD88717118F94253 +:10F23000F63FD03688FBB32A10BF28978BAA3E7BB7 +:10F2400087F22AC8B92C398BAE912C797C1F388C67 +:10F25000C35B3CBECEDB3BF248FEE37175BE1FBD17 +:10F26000F7EBF402A67381A64FA3FCDC42F02F5704 +:10F2700085FCBDF5DF41CF8196FB4125FC1FB185A3 +:10F280009CC8E292A3226E2E79CDC1FEC22E7BFBDA +:10F2900079B6274785DDA27E8AEF4A7E931462E71E +:10F2A000E02B83F5C998FF50D99E9E4B336EA6F68E +:10F2B0004ED40F1B58DF2A9C8F18F37A91E85F5ABF +:10F2C0005A48A930E3CB241FD9A7EBA7FEF1BBC74F +:10F2D00079DC0706939DBDFEAF0912E5B5AFC467A3 +:10F2E0003D54AA4C2CA3536EE84A457A4A421F5615 +:10F2F0004C627FDD554FEDF87D280D29B6E8E7C952 +:10F30000DDA076A95ED445FA297E7F7478F2F08F6D +:10F3100088CE8DF9EC6B7DF3AB58FFAFE4789CBFE2 +:10F3200068E9DD97B6EF21FDBFF8DF9F4A01BC7E9B +:10F330006A6BF6D2FE6FDFF8588A4E76C066A4D0AC +:10F340007E7E1A1276207EFFA76648A6BDD353A8FC +:10F350000EA196974A8AA76BF90F713D5FA07EA513 +:10F36000F5D61EFA1BB70FA3FF0159346EC7B41FA1 +:10F37000213DF7CE4D0A36607F5D6B2CFD8BB7FCCF +:10F38000C4AB715ED41868EEFF407AAF76A39DCF10 +:10F39000CF6BDF5038DF5A075D8CB7F8F7EBC21F31 +:10F3A0003A0807C4BFDC49BDFB11860ED25B75E687 +:10F3B000B94CDDA13F31DEEAE2FCE02AD3EEC5EB39 +:10F3C00097D28C58FD82FCE1732403D7C567A7212F +:10F3D000610F1B9F771A2E5CC7A7EF64AEA7B8E03A +:10F3E000ECC65753A4E21E7D03B08CF5C3D97061FF +:10F3F0006AA00FFE5AD7F3A65EB2DAD6F98CD62AE7 +:10F40000912F0ED026AEDBD15EBA701DD5A79DEC34 +:10F410003F569FE866B942EC770DF5501C7FC03B24 +:10F420001AFB97ECB067CC10E4A4909DB4F66DF194 +:10F43000AE8FA66DA3F7D10EBA69DF5A2EB29DB476 +:10F44000E472C90E2991F211D521BB8FCE33E3F9B5 +:10F450005A11DEEFE848EA63DFC2EF4FA3F8B9F1D3 +:10F46000F98BBC2F9FEE932033BFF7FB559B3E7368 +:10F4700090FC9DC50D523DB48FCA5C476A5FFB1777 +:10F48000B9F9E532EE5729EEBFD23EA6130F04DEDE +:10F490005F7C197FAF7AC7E923FAAB5EBC9F71FF2F +:10F4A000892DC8B8AF5EF79897FC9E2ABBE155F945 +:10F4B0002AEE573DF720E371D18907BD20CE05B371 +:10F4C000491F219DD944DFC2B5B7317DF74080F196 +:10F4D00058B54EF1535EF0820D2A77F4B1AFADA668 +:10F4E000DC38E1BE6B482E2EE048741EF6890358C6 +:10F4F0009F19279510E92F276CF83DC50317DA07E8 +:10F5000048A48F94137617F1E781BD1EC6D3FFCCB4 +:10F5100010798C8A1317A6FD90EEE7DB8218211272 +:10F52000FD86C92FE912EB35D028FEA9A3DF0A68B2 +:10F53000DC6EC7F7F1F9BFE07DAA6F887A9EF9F516 +:10F54000C90667029D377DE2852A9147839314FFA0 +:10F55000D48AB110177F5D4EF31D06AD9BE8FFC442 +:10F56000A4A76EEB27D39E25B99B97144C45FEFCB0 +:10F57000E58D0F1D392417B8CEA1B4AEF68FB80DA6 +:10F58000BE011AE9358B1F75ADCE98739ABA8D1FDF +:10F59000C5C96F6C3FFA49CCB73A48D5C82FFEC4ED +:10F5A000D1358DEC8981F36EC279EE79C619937FDE +:10F5B000AE6BF9F41D207C60A41689C285257F56A8 +:10F5C0001CBBC894F7F8FD8A97FF5D19A65F65CA52 +:10F5D0003FAC1D7055E725D5F6D066E20FCAA7CF20 +:10F5E00040DC566FBF10239F9F6D3B78EA4EA4E32B +:10F5F000B3B0259FB17AB56AE747D37E41F1443F66 +:10F60000F2F95912DE1CDD875CE2FD3EE532499CD1 +:10F610007FFF3FD3A72DAB3E5752A2F91D2B878BFF +:10F62000FAD1A7EF65F4F2D752711AF8D32F970CDD +:10F6300026BD18CF5F4B7FC6EBC51F66687DEA45C8 +:10F6400030FDABCB7AEE8573D37E81747F91AD00B4 +:10F65000F9D1B51BFFCAF609D9DA45752EB5A1CF88 +:10F66000B9FD18D92B6EEFBF95CEA57BD31DCBCF9F +:10F67000F8FEF5A6DE41FEDC457C56E41471EE8D05 +:10F68000713DE5831AC93E8EA135A940FB08E510FE +:10F6900026FF486A7B85CFC1E3E336A31C8A8294A8 +:10F6A0006F71F49CB36DCAE073373E67339639D5FA +:10F6B000C60C3E77E3FEA536974AF9A53903F2ADAD +:10F6C000F3C608EDE3C307A164A5C017E7012E1E2A +:10F6D000C6B646F54C9A126D877C1572B0AFFCBB6E +:10F6E0007780D03B4F126D38EEF50304DF9B14BFDB +:10F6F00099EC09F3796623ED37ADCB93C2F1BDDD0B +:10F70000CC8FE0C81C77FB12E53F23E9306AC09339 +:10F71000D36D880B5FA97C7F21B627FE64AD684F4F +:10F72000927715607BF24FD64DB7E1FEFBAE954B5D +:10F73000ED48CF16E3B9E953B1DF26EFA8227D6883 +:10F7400093416D44BE35A58483D4A67A8365D93DA3 +:10F75000EB026D5780D6B13C1BD4951CEFE91AE53E +:10F76000931A3D2E1FC5D93679CA9CE8715639F4D3 +:10F77000339C57CA00AD01C749748603D476E0B8FC +:10F78000D406ADB082DACB07A1DE46BA4A6C5A0580 +:10F79000E7A3903C8A532FCF1B374F9347CFA2FD4F +:10F7A000BB7E80C0C5D55E1BCD3CBC9228F64349CC +:10F7B00095833BF03ACDDC871B0758E7C9227FD4FD +:10F7C000B9377383C81F74E5119F1565C376C243AB +:10F7D00057830D366450FF96ED8497B71C2E95E243 +:10F7E000D7DB5357DB47E2924B5C79F713D8DE91B6 +:10F7F000B63D48D7226F60D600C62F4468DC3BEF89 +:10F8000052C4B849C164AA0B021D714CF4997E3DE3 +:10F810000410C784F90388E331247A6B63EA4AE36E +:10F82000D7A1A46EE375DCEE14EB98132A68ECC044 +:10F83000758C71860651DC88F3CFA3F9EF74868648 +:10F8400012AE8C5C38427C7FEBEE6BD70BFA7259B0 +:10F850003E58DEB84EF3EC8B345E1D8E4FE7CDE79D +:10F86000139E53E87909F596942DF4E95C2F8700EF +:10F87000C24F05BD91E2CD4966DC0FEDC24FB6EA3D +:10F880004C41F9CACBE793C765203FBFE4506C5D9C +:10F89000CF24587BB098E31617EB8D0971FA6E529E +:10F8A000EB67AC07275D214EFF1F034C7B920339AA +:10F8B000444738EE1CCC679E83E136D8A2CF692C32 +:10F8C0003D78D85DDE447C9A6113CF69A0EB5CB7CC +:10F8D000EBD364DA97EEE3F3A084DAA0D503B62F76 +:10F8E000668873AB78B96E89D3A7168E47BFA1CE51 +:10F8F00027BF6AF41B7037D173B92EF88CC8778F85 +:10F90000E970C99CA73A62E77AD89F255EF3B3C92C +:10F91000D8DF74D40E14EF5AF5B1DD6F98F5B14A03 +:10F920007523F55F30F3EA14DF50FF9E08C0B3E49F +:10F93000F764C9A045E951B796005A14BF128BD29B +:10F9400062DA56BD6DA9B805C9BE9C98F74BD57152 +:10F9500021C2C56103BDA35CCA2B16C4BE7F3CB6E1 +:10F960004E76DC1BB1FB6CCF082914775C67E67B15 +:10F970007C91D04103D73B9EF2E7D81EFF6EECF39B +:10F9800013AF904FFF75DC7EC7D7178F811499F5A1 +:10F99000D895F87946F0B3279E08305FC79A795E0C +:10F9A0008F1ECBC7F4CA583E0EF0C7F231734E2CEF +:10F9B000DFB203B17C1A583532A67F50B024A63D81 +:10F9C00078E9C498E7F3D16045B70B574C8F797E3F +:10F9D00068F3AC98F6F03577C63C3F22342FA67F0B +:10F9E000D4D6C5B1FB16879B781C8C0ED7C73EAF0B +:10F9F0004C56E85CE002CA3BEDDBB5AD3F8C19DF4D +:10FA0000C28181FFFAC28192F0A242FBD48171AB24 +:10FA10003411F190619024F4DEFFA4335CD7772594 +:10FA20001C7C1587034BDEAF94A74A37EDEE457774 +:10FA30009E44FA57433F820E273AEDB912E95FA37D +:10FA400002C20A3A500F27E4EDA738BBE3BE149F69 +:10FA50009413559F837ABFD147B84A611C2D7D37D7 +:10FA600099F32917658DCFDF9E51FC12E95B1C329B +:10FA70005F467BDD248B38E00959BE3BFA3CD5EB71 +:10FA8000157EBFD72BECD02F1CE11DA4076C2E6177 +:10FA9000279B64A68D7E74CA8FA650EE99CF5B52C9 +:10FAA000564DCD257BD851A47928758A6DB4A5CB48 +:10FAB000125F647B5062D8441D0884B83D06ED0394 +:10FAC000E119ED41A197EC818CF601A7BE5D356E81 +:10FAD00090345CA70B8C9412B69377D339AC073271 +:10FAE000A4FA62CA7F5FB63FDAA5D2DEFC3CB878E2 +:10FAF000924C7E57F70285E9EFAEFAF9B90B19512E +:10FB0000F285B4B68B736DAE733DEDD06E1947FCC4 +:10FB10003BA6F0F9C36FE9B93EFCFE2BE511ABD66D +:10FB20003F9D4CF563A78B445D8E75BFD22BF4725D +:10FB3000A557D4E3D42DF8CC7127F3C1F24BFFCCF9 +:10FB4000F1B15A00C1D409B4C66EF6CB57EAC28FE0 +:10FB50005C488748F85E82BDD948223DDA3A33C214 +:10FB6000795A33FEB8FD2D91AFBCFD3F20C6AFBB27 +:10FB7000C36BE7FE3BCC794B8E04C6D2B8B79080FE +:10FB8000B1BF14184BF6DFAF8246F3CC09CC7DF041 +:10FB900038B667AE96D87FA67E7A7E16EE29F5FF38 +:10FBA0000E7C6FEEC6F9EFF16A4CCFADE0B793DF94 +:10FBB00077EAAE9A648A3FDFF288E7BB24D0364406 +:10FBC0008D778B39DE5B772DD94D7E29CD47F3D3E9 +:10FBD0007A68FE992A1450FB1404CEBD99DF7BDEAF +:10FBE000D9A0DB857FE9B793DF83BF4628F6AF3F17 +:10FBF000EDE4F394FA7B1381F231F57B9D9C0FECDD +:10FC00005C7C71FB4F7189770FEC18E4288CE2C79C +:10FC10001A0534C4CBF474BDCE4B7ED5F8F4ABAA30 +:10FC2000E7ACF8E504C653FD2681A7FAE7C57722BD +:10FC3000F5CF8BF3CCFAE4CB78CA243CD56F2ACC31 +:10FC4000E43A4B1AA28FF11F431C694E3A5F4546B6 +:10FC50000CE7BAF2265ACF6319A27EBD4995738884 +:10FC60004F9B24179FFB42EED5D5E5922C1AA8276F +:10FC70006F67150AF09A89E3396DE9A5A6DFD74CBD +:10FC8000F3BCB36FFB2054AD706CC496A11C879578 +:10FC90005D1D1F502FBD407A46433F0CF2D8BEB1C8 +:10FCA0007FD01991992FA8975E20B9EEB0BB54D29E +:10FCB000A357D64B3A6FA6153F28B22FCB467E529C +:10FCC0009B9248FC4BA140C3D2332827298A6CEA77 +:10FCD00019D05D18978D32F5D0F3DEB9373589FC30 +:10FCE00074BC1F58B1AD0F3FD08FFF841FB8562989 +:10FCF00016FE0A9F370E5F139B4F9D44F9A7943E53 +:10FD0000FC3FCA475D85FFB7D7FB7F670776929FA9 +:10FD100088D77091D057E14802FB0325A6FE8248A0 +:10FD200012C75DF17E23FA8BC7BC51FE62FCF8ED71 +:10FD3000A65E3FE51576663DC5D0D84E74E97C5E7B +:10FD4000EB451E374CE036CFA3DE6AC649A8875381 +:10FD500071F2B139E2798774BEC885F2FACE4F17D5 +:10FD6000AD5A31196137C4B407C6A25507F1F7423D +:10FD7000EDCF072F91BE6DB771BEBDFBD048AEF77A +:10FD8000ED8FEE32944B32EE91C313D93FEA3C2211 +:10FD9000E46C7B9AF6FA248A2B8E2A4075A86E5B57 +:10FDA00087C3D3075D7B482FA31C0DC914F6CAD5A2 +:10FDB0002AE994D77669220E76ABEA18AE530F0083 +:10FDC000E739CFED28E4B8F875532F2764F8BB491D +:10FDD0002E6A94F5796A610FFFADF14BC84F2FEE93 +:10FDE00093DF5FD27B16BFC391935C87D95DA9C9AE +:10FDF000CA98DE7CB7DA756B4AB9D8A0764D3A5FFF +:10FE000047505E036FD545041FCEB736A6F595372C +:10FE1000AECB6C3F40FC80D7DD40E76875FFE73D27 +:10FE200096BF176622B4703F7EF9E5281ECF93E98E +:10FE300031E3C6765ECF48BF2651BC50E71476E268 +:10FE4000FC970A3F678D3BBA758AA222CE8B23CDE1 +:10FE50000738DE6D736A8437F74610FC6B73B35E48 +:10FE6000ADDB77A388433DE0A37A99ED095DBFA799 +:10FE7000F1BBF63A353A6771ABCD9046E70C0E61AF +:10FE8000AF4720DF7626F5DCB7E673B7FD8C8BA095 +:10FE900011373AE553DDB666F846D4BEBEEE4DE600 +:10FEA000F59798F8DC9E1091E9BCA70B63A70DBCF1 +:10FEB000AE9E7502CF6BAD7304E7C7B73BBA3EA6E3 +:10FEC00073135C974AB81901629DD0365C23B971EF +:10FED000AB3AD3E156355F743DBBB5AEBA6B50AFAC +:10FEE000A7A25FB40C2EEB1BD23F75093D6D17CA5C +:10FEF000E6F6020BF7CFAD9A3A39AA4D0A737CCFDA +:10FF0000FB9599EB5735E5125DC26EDA6C6196B7D9 +:10FF10009439A01A13887E5DD48992BC79FA94C76B +:10FF200048B43CFA528DB4E9D8EF7B45F635E290FF +:10FF3000A95F89EF5F6ADBED6C0FABFF73766A3107 +:10FF40009D4BC8071EDA86D7CFE68687915F9595C9 +:10FF500012989549E7ECEFCEE37ABE3F6DB7FB66AA +:10FF6000909EEC309E1A88E32FFEA55DA3FCD1E3A2 +:10FF70006F77472ED13EFF4AE238B0D32EFAB18DCB +:10FF80008E24CED3F68983CE916E6C7DDF41DFD394 +:10FF90009CCB0C7C3713F7697C6B4305F16F023403 +:10FFA0003752BE11F57380E5220BCC3871D8860626 +:10FFB00092C3AEC0E05928473FCE8C8D57DB4C39F9 +:10FFC000DE47FED5F0FEF5850107382FB7DBF40BD1 +:10FFD00097C1A181C4EFDDFBEF28D470DCCE908DFA +:10FFE000EB77479D72DDAD47E1AE31D33CB735E7E6 +:10FFF0004DCD0AD4133F96ECFFC091827CA8FB63E1 +:020000023000CC +:10000000388FECE43F20FF4B33A3E51FFDC9689C0C +:10001000F792FB38B9ABB37539382F7B06585FBD03 +:1000200070AA95E3FB177EA87A487F207D908AED21 +:10003000DD74EE93CF6DCE1735BCF9C53594F7FD61 +:1000400062EF92C1C4EF7B32ED4C0FCA497902C90D +:10005000E30E607D69C97331C9332EA5581579A4A3 +:10006000629213925F47FB7496DFDD329F93A29CEE +:10007000B0DCA09CA854B75AACA2DCF0FBC3591F5B +:100080006C6F3F39929E37707B868EA1B6CC38DD7F +:100090001E991E92F0FD327BE400BD5F86F3376847 +:1000A0003DF25D26813FFA9CF9756F0AAFD7D2BF4A +:1000B000EF7B4D3B44C55751F21365EF45FBB23F13 +:1000C000F0C5AABFA03C15EAA532F9EDF5AF296C41 +:1000D00067EA7F33F1966DA2CDF67F9C1EACA052ED +:1000E00093F195CD07E93AD11FAEA0709AEC8D86B9 +:1000F000FB3016AF3AEADBC973DA0FDA85588FA204 +:10010000FC66CB816F8DA2F8ABF3B413DC3865CB02 +:10011000DFBA7EFF4BA4EBA17DC847E8D33F62FC6A +:10012000F587D74EA92385F29F87323FB8C9E646A7 +:10013000F99920E8DA9FD9B10A4322989AA51F229B +:100140001CCDCB0E1C2239EA3CF1372F7D1EB1FBB2 +:100150008D0F52C85F6871E8A354BE62BCD687FD9C +:10016000DB69EE7F99596F43F24679E8736BD2D71A +:10017000B3BCE9ED3793DDB84752F7D3B9CA47A608 +:100180001C5871F542E1B24055CBEC69E42FA93916 +:100190000AD039CE3DCFD863E2DF6186C1714A2DE6 +:1001A000422684FB5F6DD68154C5F941C321E2A08C +:1001B000BC4A5D202948DF6DC7E7CFABCDF3BCEA71 +:1001C0002BC4D11F659AFE53211492FF84FBCFF9F3 +:1001D00094AE3715DF06BC6DB7C111270AE70BB225 +:1001E000E00BFA294DA9693D7ED413D9FA9B649F8F +:1001F000DF34FD9DEDE5420F756D97428CF7ADC084 +:10020000F236F18CB69E3F0634F453595EA20718BD +:100210003F136D069F9B4ECC2A04AAD71C8F6A9A67 +:10022000F07E4F9B140AD1F32141970DFF913F7946 +:1002300001B62DA7F28609D0C5F42F22FAB9EE280F +:100240008EFE35270E53DAB2261C771ED3CF39E740 +:100250004E803ECF57DC59E6F94A1EE445FB9770C5 +:10026000A4EF78A1279F64B0BC7D661775D227CD17 +:10027000F1F12785EA553F34E91F9A255BE70BCC5E +:100280008733E677FCB5261FAAB79A7C582D706293 +:100290007D2F5C0721A6BFC6A43F9E4E9CFF30C5A4 +:1002A000BF8BD0EF263C56AD8DC5D962930F8BE343 +:1002B000F8501B90C4BC2145CC6BFAFBF3C1FA117A +:1002C000EB5C6CAE337E5D4BECE25C6C09E287CE9E +:1002D000E9FEBBD619BF4FDFCC32713C1246C6ECEB +:1002E0005365FA55ED532168A914F75A7EB48587F2 +:1002F000F8F7A6997EF48D6B843FD9D27E6005C94C +:100300007DC95E45253BDFD95E9E4875029DC76D60 +:100310009C9DED6C2B5D65A0BEDB7564C86CFA9E80 +:10032000A8E484CCF250FA5A49C84DF1C66B25892D +:10033000855CAFA1A5D3FCF81EDBD5CEE3437E5789 +:10034000CC7EFAD432522F0DC74B12C90FD80522DA +:10035000EF21BDF697DFD2BCA5476DE328EFB91CAE +:10036000F783C6BDF1E77337933F711BB5A94EB84C +:10037000BDFE56DACF9AE3B24AF7CF1F17F5D7D5AD +:10038000EB94908CED1B7788BA903ADC2F89D76B71 +:10039000E7F9EBF60E4D9F1F15EFCD33F15AE2D181 +:1003A0009E9E417E5E76227F7771E3203BDBBBB36E +:1003B0003989FF3603C71BA6E75FC647083970F6C1 +:1003C000E5FB45FCBA5D822C9CE070D6FD0E8A0FE1 +:1003D000CE96BB2234CED93D271C74EE5AD1724240 +:1003E000D43F98F53F169EE2F97FAE3DC1AC576C05 +:1003F00076D03ED59CB0DA1D0EB2D37ED35FAADD97 +:10040000F83EB71793DF4FEBD928713DF9C1BD2FE7 +:1004100071DEA7769BA8A358DCFAA483F0BA18F182 +:10042000A9911E8166D6CF4B5A1D6A5F7A65D19A13 +:10043000D8F6BD57C0E593162E47C008C2E517533E +:10044000843EFFE24402C7495F1C1559FCAFC12737 +:10045000DBBDE3665EAC3B22EB8E6B7B9E3B7FBCE1 +:10046000DB417517D3DA3E67FECD68DB3F95F8F2C6 +:100470006D0854139DDF6E4B54C92F9DD121F4C9D3 +:10048000F43627E7C5BF0DE126B2779DFB5E594ED6 +:10049000796FA3DCD53554EDD14F8BCCFD060832F6 +:1004A0003FCE5AF13DB6997F3EC8A778A7D3DEC1AB +:1004B000F2DD39372948FA1BD6C6EEDF4D45B1FCCF +:1004C0009A0E42BF4CDF26F4DA4DD0C1E3DF44FC84 +:1004D000C6F93BB347DDC2FE0FC6A354175DBD2D61 +:1004E000F6FDDA383BF86F59F6983A84FEFC83F84B +:1004F0007D3914B72F33BA84DE9AFE86E20B21DDF4 +:100500004722CB8A29DF66F1297E5F8E685F5F779D +:10051000F45BD3CFB6DAB798FE6D580DFDB414E98D +:100520003D0AEA09238397C375E00FECC8E67339E7 +:100530005FB6B00717861CBC46C35FAB5F7939CF87 +:1005400051C071C5BB59E447CB6D3FA563EF5772EE +:1005500015C8A0F8E2797788E4EEF1AC0F9F282D5A +:10056000E33A95763ABFABB335CFA073ABBA6D76AD +:100570001FC51375AD0AEB9DBA6D4E21F784175C4C +:100580008FBF4DBA81F0827EFA191A7F261DD9508D +:10059000BEB055E2BFB33273EAE70EE2EBF1387F4B +:1005A0007D46FFFEFAF9AC287FFDE890C2D479744D +:1005B000B569996949FDFBEBB55F0A7FD1BA5F8BDD +:1005C000F24C7CAF6D93D8BFEDF1173325F2173B9A +:1005D000F73EECA078B453523F4F44860C32F9D624 +:1005E00072E0070ED2475D53A0AB80F2AF5213CB3F +:1005F0004F2D3BA578DD2D8973B45FD9A966021A0A +:100600004E26B0FE3B7F4A9C1F917F42F50EF708B5 +:10061000A8C0F97901C627D53B10BE6BA07A397FF7 +:10062000573F1F825C6F19A70F9614AF5F4EA5EC62 +:100630000DB08CE3A765D0C4D751FBDE62BD38EAAC +:1006400065872AAB9C7F70705E3014F57E416F7DAC +:10065000537385FC972F3B16C748CF2ACE1F1C55D6 +:1006600054CAEFB41CF8EB735437D4857E7601D1AD +:100670006DFA2D2D07DC1C57749E480A113FFF644C +:10068000E2F5AC99776F18AF307FE409E23A6ADFA0 +:100690004B058483CEBD17F302B8DF2FEC7B69A432 +:1006A000CEFB1F1275CD5B63EBC46BC2B175E01658 +:1006B0009FEB4C3EE3BA8639327AD6B5DBD691E26F +:1006C000EB43CE24E900EF9F2C1D8AF1FFEB7EA5C2 +:1006D000F8A3EB2A919EBB490F969B38005B979736 +:1006E000ECE9B46C8DF1D6D026F65BDE2BAE38FF8C +:1006F00077445EC5CEF3F7EA2F37AAA9FF8BFC44F7 +:10070000AE4B802F8D19D47EA840E1BA85874E2E3E +:100710001E1E9D6F0349C4CB75F62EAE7FAB3B21E9 +:10072000F3FAEA4E747B872491DE5B3F95EA7C6F97 +:1007300032F5C9E182C42AC2B541F36652BEEF1058 +:10074000BF7FCCB4DB7513C4FBCB4C1CB59C9C9E0B +:1007500048F984CEBD03F8BB8E9BB2441E6E5EB6D4 +:10076000FFFBD9637BE298FEFCD2A8384A9C8F201D +:100770009D244FBBDE7686664814E75E3CF55DA29D +:10078000F7A88DBF6F6BD8EB34E83B92BA77DC9C4F +:100790009F8040E05A8ADB1EDAB768B8F8B87E1945 +:1007A000EFC7EAD6859D540F54733A91CB846BF60C +:1007B000BEC9757E35BBC73E4D7E0FFA393791DF16 +:1007C000B3ABCDCEFAA7E4B532C6DBAEE365E985BF +:1007D000FC7DBA2F91C6AD396AE3BABF9AA365AF63 +:1007E000CE207FE5B572F67BA4D7CAD2494F955289 +:1007F0007C4B7ECFD121DCB6E879205B9CBB74EECC +:1008000077731E428202811718128397EA96DFB02F +:100810003F508D7A301A37D67B2BB26DE23B4A0BB4 +:100820002F6149673CEC10D7EAD65D5EA263893D33 +:10083000CCFBDBB0CD2EFAB78B2BD0DF09C0F70D88 +:100840009FCCFBF92ADDC27D98EE08E5D279E03134 +:10085000330E38763A3098F4E0B12981E174F5E44A +:10086000C4E6670C28E77583348BF7FD5C8BF0C713 +:10087000E2F731D57C2F251D62CE15ADEB7F660BDF +:100880007C4C7788FC10F971D95EF3DC8DED7AC76A +:1008900054D247B3B2D225B2EBAF9ACFFFCE3C6F62 +:1008A00002657232D76FD0F7501ECA93FBED641FFA +:1008B000679B75C7B3BF7DDB0DF43EA0DD4EA27C08 +:1008C000C178E1B75B79FFF83CBFB5AED995B1FA15 +:1008D000EDB62BF84FBFCA36E3AF61304CF8F5499F +:1008E00089A4F72F1CB19BF5FFA121FED1BDE9BF63 +:1008F0005CDF41E740A8D78EA05EA3EB3F90777AFC +:10090000257BEC95F3FC0D23DEE23CD1B1FDA75F26 +:10091000F4B09E754301765DFFD51FBC7DADAB0184 +:1009200066F1FE2E835B63F069EDF339107F97214A +:100930007E9F7F6FEAB55A8C7B697F561685FC7463 +:10094000B5CE2DDDAE478C81F86B5DDB4C203DD004 +:1009500030E26213E9F773E6773AB8BE3C67941D5C +:100960003897FD39F73F540E5D06F6EF1F21CEDBB9 +:100970006AA64A7C2E501311F6B2E656612F87B54F +:10098000CCB493FEFE0EFAC9BA8FD5C829AA6BBDA6 +:10099000D9B493D77FD5C978AA31FDC4064833842A +:1009A000DECEE06B4DCBFB4D7C2E198020E5DD6E5D +:1009B000191F8B83E110786C00F6DF5E29F942E4A1 +:1009C00077E8B1FDB77F6F26E36DB6F9FDCE957080 +:1009D000E4CDF1430EE985F6EEEF8C46BED49A7273 +:1009E000E01BAEB5D2F999EF55754C233EBB35D41B +:1009F000BD87DA9D468644E7E6093982CF3FF6FA9D +:100A0000DDF43EDA913D74BE56EB70A94457AA79E5 +:100A10003E63C99D2F134AEF4B8ADE2FF1BEF55C72 +:100A200073B6A82F3B660FE5F2F71DC557770ED8B2 +:100A300030E2956B48CF1DDB7FF41A47D4BE9DADE5 +:100A40000F0C67FBB2F7A0574B8AC6956CE2CAC67B +:100A500057499A65DACD589C9D259C917EDE71F0B0 +:100A6000E6EF123E5A6667485A945DDDFDBB94A1DD +:100A700051E39E6B13DF2F607C35ECB6E4E8753EE6 +:100A8000C6EB3C1716E3A194F1DF6FA9DD33669C3A +:100A9000A88F0483EA296A8BC4DFCBE04AB701310F +:100AA000E7ECFA4071CE1EF377DFC2F44128BE674F +:100AB000EC73F2F95BA75DE5EF733B4FABEBC577EA +:100AC0009D412517DBE341FD9CE20F7F8E953F0999 +:100AD0002A3ADE9FA08BFA39E43CD7194E9A21CEF0 +:100AE000B7B19FEB0C2707C127E218D13FB152F4F1 +:100AF0007F033A14D2D3D753AA09E56A0A68366A43 +:100B00005780D148866D52387213A9A188D7E6F96B +:100B1000D8254A35FBDABF1EFED8E0630B8FF830CC +:100B20003A3D9C4797E01185ECEE38D0BACD75710F +:100B30001DCE785DDB49F43C6CCABB2F51C85FD732 +:100B400039E03C9AB5BE49B676A62359D3D2E85CC3 +:100B500063C7A17A6EEFC3E895EBABD2CDF73EC584 +:100B6000F7907FD7D9424CA737289E9F00913EE946 +:100B70005C9C932FCEE14D7A3BED61B6D79DF7A2F9 +:100B800020E3BA8239E2BBEF89CD12BC8D4AD3573C +:100B900028E8C1F1153E4731C79F0861DE3FA8D262 +:100BA000D25ECDA6F724B38E77AA4AFC90225EF9D6 +:100BB00052E2D5F3ADD30BBCDE94F95DE77F54D69A +:100BC00073DEE46BCBE4FCEB6A49EE52E8BCC695FD +:100BD0002BEA80231026BF1CD579CCF7A14D39B361 +:100BE00096B13C07C4DF878AAFAFDC1ADAC0F532B2 +:100BF00073ACFA995C8033DE9E737E7B81A8A7B1CB +:100C0000D339BBCAF59EA584DB226F6059CE58AE9E +:100C1000FB1CCA83D94263C5DF2512784E047D3C94 +:100C2000F1F9A23B8FD76BD51B3D9C90C7EBED989C +:100C300002616952EF73FC4467B88AF948F54013C2 +:100C4000FA3AD717F5C228551AD519C123151A8DA6 +:100C5000BFDCAC978DAF7FBEE816F541565DC1C3D2 +:100C6000092F723DA9554740F44EB6E895AFA6AEA0 +:100C7000C0B08FCCEFA97B453EFC6F930F5CFF8A21 +:100C80007679A8E04384E3FD445D7C97ABE23ED9EE +:100C900044DCDBE5A404AD8EFB54D4B34F54DF4DEC +:100CA0007AA3A9C292E3F056AE8F443E50DBA2373E +:100CB0009EBEFF024D25FE04E0550000000000002E +:100CC0001F8B080000000000000B0B926360F851BE +:100CD0008FC00B8451F9E8385214957F4C04BF7AC9 +:100CE00042F8300B82FD448081611507046741B1F1 +:100CF0001C107342F13928BEC689D093CBCFC050A7 +:100D00000AC4B5FCA8E62A3141686B460686560639 +:100D1000A039401CC98590676186D052360C0C2BD7 +:100D20001C10E2C6A60C0C75401C614699BF46F12A +:100D3000D0C09AC1A8FC301F547EA51F03C349240C +:100D400035E13EA4991F18C2C01014825B7E6B046B +:100D50002A7F46122A5F034DDE3E1795DF1B09A14D +:100D600001FA5B832FC803000000000000000000B0 +:100D70001F8B080000000000000BCD7D0D7854D5BE +:100D800099F0B973EFDCB933B933B981042630C0B7 +:100D90004D081035C00502C69FD64B4016777DDA48 +:100DA00029766D745B3BFC34A2A24EB15FCDB6B424 +:100DB00033901F428C30FC7C1814E9A8A0A850A3E3 +:100DC000AB56776D3B086569EDD72FEDE7F6411718 +:100DD0006D408BDAAD35B2557497AEDFFBBEE7DC04 +:100DE000C9BDC324845DF7677CF47AEE3D3FEF799B +:100DF000FFCF7BDE7312D07CAC6612639FE0EF0AFC +:100E0000C6822A636CEEE093B1648ED5337621FC02 +:100E1000CFBDE58C7E6FCE63AC960DFE94318C5DBC +:100E200080FFE3636C6C2CFD22D65F2FB1E4588BFE +:100E3000315582F795F831F3E252687FD1218D75F3 +:100E4000198CD5B13E1F9BCCD80C36404F8B193234 +:100E50003E67338B9EF52C4ECFF7E6F77F139F77D7 +:100E6000198928AB606C959E98148271DE9D9098CC +:100E70001681F7FB14BB12DFB328747EC9E03C0A6D +:100E80009F8CA519D6ABD16EB025A8FA412FB3BA65 +:100E9000F06DA345F34B3FC6AC56285F64A473586E +:100EA000DB69D791622C370DE6682459A28EB1CF49 +:100EB0003293F052174DF7C91178F6265842C716EB +:100EC000368B8761AA81C474FCAEE86A5A9E81EDB4 +:100ED0000654FCFE8732D6D4AB9F0DD7658834A864 +:100EE000DF1E5E64F743FFADDFB1581C9E72EE1249 +:100EF00066427FB26E31E891294A96F0CAF6B2AAEC +:100F00003D0082A2F5BEC8901EFBA0CC102E83C36C +:100F1000A5E77CF3619C37D4C467B12C215CD0BEBB +:100F200035BC288AF0AB5196966732A6411FD8BED1 +:100F3000B58C65EBAA180BC4E05D3D96FBF6631912 +:100F4000EA31C35576E06D2DB3A27ADD60B93D3C40 +:100F5000EF6800EAF90D664E837A4AEE2A825B3129 +:100F60006C9680A75F493309E13639DC7E2DC9CB09 +:100F7000315E568D049B8FF3FE935C143F1708FC83 +:100F80005CB897C3ABE82C2B4B889FE75F0C4159AB +:100F90008E322B485C68D9881FBFCE8CC7F0BBCE81 +:100FA000EBCB067BB0444238B21C5F061FF722F140 +:100FB0005D8D1A0FF9AA10AE9CAFA49EDE5988CFA2 +:100FC0003AFC8EFD95F3EF8AE1C517E2C78D2F7FBE +:100FD000F9C8F0D55A25D13CD99939D16BA6BBDED9 +:100FE0008BF9E3EF6D942F8970463F1DCA1748FCBB +:100FF000FFD70045111F2EB9F836C90503B980F295 +:10100000BBFEC423212E176BF07D807DA5343E7D71 +:1010100038B950590E8439843C2FD368C6C98BF82F +:1010200058BCCCE546D68D46C44783E9E3F86F91BA +:10103000CD374783C819D90512C0D96ACE4E237E51 +:101040003E580C4D60FEA3326BE508E233CAF1292D +:101050002F8EDB202EECD2B7F374DC2D231E81BE45 +:10106000398DB189F0FC04FA55CA4354A6F1B15D3B +:101070008B4AE334F40B7A21FDAB90FE3B1644908F +:10108000BEE55EFA2B48FF2A17FDA3407FA49F927E +:101090003EC8383C242F9788EF79FA6AD9D608E7FA +:1010A0000F0BF9E352F15D31F877A43796B78481DD +:1010B000FE12A737D27F4B18E82D71FE305CE57425 +:1010C00023AB4DEA58362B75175F6FC9D37F72A5D6 +:1010D0009BFE5BFE04C8BE14D19DB473C02F5BAEF3 +:1010E0009A5A9AA81B9A6EADA9F80E658AAB2C7114 +:1010F000FDD21A644D4FC1D35E63EE58013006A293 +:10110000E66CD473AD6195CFD7301F44FA1D107CC7 +:10111000F4AADF3E80F4DDE2372B0D1DF16CBE82B8 +:10112000F20C7836B99C79F1DC7ED5BC3C9EA7FDEB +:1011300027E27973019E3717E0D9293BF3DF1C368C +:101140003C78DE9CC7F3680F9E375F39B512F5F126 +:101150006681EFE3E9EBD269C0F365A0A72230FE18 +:10116000C76AE2B724376F26D211943F3D4EFA93F7 +:10117000143CD8398571B954A4C504A756CEB25DC4 +:10118000D0EE4AF96AE603B83A8011C7028C635080 +:10119000F592FC2434C4C7E6728575A10CCB575B6D +:1011A00048D700FBABA272A9192C1D9C8972A07AAA +:1011B000E440B34DC98076CA62960B82207DCCC2D2 +:1011C000E524A717B38BB99C9A12F6374A31D72A70 +:1011D000309E6CFAAC07014E50C33E1C7F7B69F514 +:1011E00003B20B5F4189EB557F789906C698AD3500 +:1011F000676BFD80970E7D49292BA2879DA7FC91E7 +:10120000CC72208FC647123D653D7109E2737B2089 +:10121000F1FC6F695C663D08D048E6C0279F207EE0 +:10122000A2E6837F26E1D3628D30CE4489F35D99B7 +:101230009E388070C114C94FD0742B8A76EF40B8A5 +:10124000398A76B0E34050C8BB9A0D569D0D47438E +:10125000346BDB508F295674C9F4B3E5604C93C5E9 +:1012600096B9E447618D13A5B9841F09F97C94CD23 +:10127000EC5EF8BE59318265AE7AFF82F606E8BFB1 +:10128000D9668B7B8BC8DF7BC21EFDA8C2AE952AB8 +:10129000387DD01F9AC7067FA8AF2F167C72191B06 +:1012A00098A8007D6E0BE43AFC12E9EB59D8EEC326 +:1012B00057FA6E40FDCDFA13D3D06F007D3D1BE190 +:1012C0001BA9BE0EE6F573CC385972B6BE3EDBAF35 +:1012D000C93522FB4DD7FB7DA8AF679627A2BE6A12 +:1012E000C67EA6DAF371DC3CFE0E5C1745FBDDFE24 +:1012F000E8BC26C46FFB930D4DB68B1F160BBE8941 +:101300000B3AB6573693FD077D40F6DFF15B14A527 +:101310008FDBDBA7D92CEEAFF4F3F273BC3C531F89 +:10132000F02D453AFB1351A4478790D7992FF435F8 +:1013300096A03E318D59C04BACEEA9B7D75179225A +:10134000945108254E9F2AC5D6106F79BED4B91F77 +:10135000E6D8A5FC7C0CE0E761F4A886F607F03936 +:1013600041D81F3556607FB40443F8D4CCD234F949 +:101370002D3AB767E8B17ED13DBEB053D39F2EB4AE +:1013800053EF70F8476CA704DE84FE9C7196FE1C38 +:1013900078B1C4A53F670A3FA5507F7614E8CF8E89 +:1013A00002FDD951A03F3BC289A85B7F76E4F5E7F7 +:1013B000728F9FD2E1D829F68F64A73A2ACFD34EF5 +:1013C000F9413EEBC88F12762AD1B374183BB55D54 +:1013D000CADBA9ED28370EBF4C7F3AC1FDCEBC9DBC +:1013E00012788E019E4DE4CB21EC5479019ECBBD49 +:1013F000780EC44686673F6F0BFE2FC7B3E33FB737 +:1014000017E0B9BD00CFEDE1B807CFED793C5FE360 +:10141000C1737B457314F9B95DE0FB59E910D92913 +:10142000B04FCFA3BC6A4F27D328F6EA0BF13403A1 +:10143000397EBFC2FE5BC4CF27B7C55FC0E7FE677A +:101440005409E9C2F65A0CF53AC847531AFAEF9014 +:1014500012D1589D9BCE9C1E43D1F9576B4FA4D3FC +:10146000D05E0BC5FF9EF05FB99DE4ACC36F47D162 +:101470001EB53D0ACA7B3AF61FA7FEDBCBAEF5AE22 +:101480000FF2FD0F3F3F671CFCF58FF1AE2FC9FF38 +:1014900015FAF4BDA5E0F7CAA4475F958AFBBDFF26 +:1014A000289D87DF8B3AF193C9344A51BF776A7A16 +:1014B000D951A4FB074C4B74A15C7D26A9C5D1CFA3 +:1014C0008A2DD1D04EAD8F4119E520AA6AD24CB4F5 +:1014D0009F6037F0BB58377644977556D13AC39A18 +:1014E00087DD3AE32F88269844EF13A30355DEF7F0 +:1014F0006FE8B42E8ACAA05FD464A386F3683796D7 +:10150000686EBBACEA89A80AEFD7EBDC4E75F8939E +:1015100047AA50AE636CCE3A182700EBD539684F16 +:10152000A38D0467BBB13A2771FFE4439CCF8218B7 +:10153000F70B02E5CBB20140424739B7FB0B6249DA +:101540001AFF6C39E6F371CA013DC954177E713C2C +:10155000D9A50F034A322789F519FA212C738FADCB +:10156000015DFD625DE333E3695A87DB5367770111 +:101570000B8DF14984EFB3E854CEE94474013EEF9A +:10158000085A4D887F30404C9B37747FE0D190DE05 +:1015900038577F0E9DF3F44EACFE5E3FF693067F08 +:1015A0000DF0B3F633C947B0ACA403C6BA72B4ABFE +:1015B000C9EFF5A35D5535A315C6B9A724427AA195 +:1015C000E55898F0B811F11460AC3BA5D1B32B6588 +:1015D000D0B33315A527F8836C2AD43FDDE8CB764A +:1015E000D17A87FB21F9670D7F6E12F858E40BD191 +:1015F0003C568A32B857C40F197D78BB56DAE01BC7 +:101600009C27FC1BB6BC76ADA47694A71C34C77986 +:10161000EA17FA1532322FC635149B5908A7027003 +:10162000A25E29BD3ADAEC82639E4FE6EB45F90BE8 +:1016300049A4539BC4E5DFF9FE4B1FF71F7EEDD392 +:10164000A8DE15674A655A570B3F3A125E92CEA143 +:101650006E9558720AADB995DFF73B7002BDDE9406 +:10166000E24D3E6817F1F71BA3EAFEFBF121CBB375 +:101670000672688746ABE4F7B6AD5D42FCE98CFBC9 +:101680002331DF793E6EC7E48065D5925D50CD078A +:10169000ABD08BB0459CC17C00F9A175EDEC019CF1 +:1016A0007FBA4C25BBE3F4E3D7748A2715E2A31075 +:1016B000BFEF0B3E791DF13B17F17B05F94977EB45 +:1016C000BEC559C257DF62C277BDCF87E3FD8FC168 +:1016D0005BC13C1EF7713F6F5E7E1E9F273C397CCD +:1016E000D2AD039FD493D4129F982CB798BE5B3091 +:1016F000AFAAC17915E2EBBF6A7E0EDE4BC3BE789E +:101700005647F806E204DFE58A07BEFF6ABC3B7075 +:10171000E979B8721C2EEB7F065C6F4A897F40F92D +:10172000DE28F875A3D2AFA19C37F904DF94C44931 +:10173000BEB0BE7BDDE7C817B47FCD07CF4DD81E46 +:10174000EA6D52063CED9D71C2387F2E0F712E0F4F +:10175000CA7FAB3C38707509B84D96E5FC5CEBFB75 +:101760006FA14BDE2ED6B35A05FD7116B2103FA500 +:101770004A2224631CFDE75F61EDF0FE94ED1BE857 +:10178000C23842B91307E7EDAEAA58C1FD65DD477F +:1017900076119EE42F9F8AF17551A0DC970ECC281C +:1017A000629F632A0505088EEA61E012F118FA6467 +:1017B0003236FF2385FA0F598CEC6A98F533F4130F +:1017C0004BD192807F57C64C118FB124C43363979D +:1017D00093BF571EFCB4FBFD32F52BD99BD92725AF +:1017E000E7D1AF02FD4EFE4FE8F71CF006D94EEAF6 +:1017F00017A9F3C9E8C17E3780FF024E34F87D0691 +:101800003D031871403FB88EEBDFF5E0CFE07BA6DB +:101810003C63FB603CDD524DF4BB4AF41C433FF497 +:10182000BDF9DA00C3B5A8F0B351FCD0CF2EA9653D +:10183000C77D40F712AB20BE155347C48FED15533B +:10184000C70EB7DEC4484F9536D86EA87AFFD94F79 +:10185000F497ABFC836545AF1EE4EB61E6273724C4 +:1018600038B2188F3BE6DBFB5882D6CDFA328DD6E4 +:1018700075673EF9449EC7382919ADBF1A8AE165DC +:101880001D0A9BCB0FF61B1D5F97C065F54757D808 +:10189000FD2E78DA841EF24757D9FD23A083ACC40D +:1018A0009B96623CA49EAF8F3797DCC08ED7A13F3A +:1018B0007C03C59D3A2AC654E1BA0620E0FB889A0B +:1018C0004EFEBAC3A7072AAEA5385F7BE5B5515CCB +:1018D00077B4FBE314FF3B52F1AC8DFD769C296598 +:1018E000010BD74FD5145FE83833796CB2C8FC4A86 +:1018F00018D717B47F51C5F9CD593C22BC1D511FD3 +:10190000C55F4FD571BDB3B9E447B68CF16D53498E +:1019100062FFAA0EE3C2F88BEB7B6D8C43A8093DF6 +:101920001130CEEEC719077E12C68970BB2D2F77F6 +:1019300092E77B5138CE2E27ECEA7ADA37B3BA8AAF +:10194000D4F76B9174C90CD4BBF9F7068E5BF3F333 +:10195000E9A53C1EAD3253C3A1251BE56A90FFB338 +:101960001E7A33C337D8AF6BBDD3A1DAA427D21305 +:1019700059760FCE47B19B104F6DD2A8D9B8EEE97A +:1019800018D7152DC64F4AB4F37DF443014739E407 +:10199000A3407411EDA7B6811F369A5442779F3445 +:1019A000839EEFE3FE68C0507EE7E6B33E395C4EAF +:1019B000FC24E2D6AD7AF5B0F1A3769023366DE83B +:1019C000EF7ED54AD07A90258F221C0A9B41F02BBE +:1019D000B1C347AB008EE332F7879572BE1FCB0CC5 +:1019E000F0075DF8F86BD53E2E23DF87783F85FD45 +:1019F00077A98DBFC5EFEBE5F85BF8ECAC9A27EC67 +:101A00005C815CE8E523DA7F36BE6C09F9B623D247 +:101A100018CEB7F80BD559B80664D1CB644369E04A +:101A20007494D1EE4665DA2F072B7C02E1B6E11FF4 +:101A3000843B723994DD714AFB7A7B32CCDB68D40B +:101A400006FC51E41B5EDFE14719E931039FDEF735 +:101A50003EC5BB8FD09A7A8EBDE18AD7C12BBBD849 +:101A6000BEEC67D5464DA92886875123C24367340B +:101A7000D349F154A60D94C27C35E44168B745D0F2 +:101A80003B83F6671AAEA3B9FD6913F6A62765D2A4 +:101A9000735BAA96BE6F4F5954BE37D540E58E94FE +:101AA0004DE58DA9C5F4DC998A733BA565697F7EF8 +:101AB0004BA5B943A2F8C0ECC69F37D0FEDC2B0C77 +:101AC000CBE9E9BC0C3A9B8D63ECC2B6698D188FEB +:101AD000DA52665EE70310F66F8DAE3B84F04D314F +:101AE0005F91A0DCACC45E6CC3FAD379FD856D97C1 +:101AF00036627C6E4B50C4BBCC2F9E030F5C2F36DE +:101B0000E186123CB754F07D8B91B64B603BDCB75D +:101B1000AB3ABFF1424AD6E6F35DD2F832A034A424 +:101B200071F8BFD56613FCA49A2E053E686B5C471E +:101B3000F39F2EFA077BF4972E7BF44DC5CFE19EE1 +:101B4000757E70B708B84BE3FD36A2FA0F72E21A41 +:101B5000E4A370532EAD02693BCDA728CF8299E54F +:101B60009437722E3EFA316E12CC1DACEF8F59367F +:101B7000AAB9D5F8BE62F07DE9E536F5BB1403B32A +:101B8000F07E67B25113791B143FB8493144BE4B04 +:101B900082EF47FE54263FE7C621EA63BD74FD602D +:101BA000BD21E134CEE1CF8E709E4C8913FF5E2BB8 +:101BB0001B9E792D900DCFFC433A97D791D2E3210C +:101BC000418FEA827EC7169447EDF3B10610EDD13E +:101BD0008B5DF604FE2DB3431EBF266C8DF294FD83 +:101BE000C6384FFDCA84D70FAA885FE8F93EB669A8 +:101BF000B6A73C7EE5A59EFA8168A3A75CDAF0E76C +:101C00009EFA13924B3CE57F2FBE1B0AF03ABD00B3 +:101C10001F23A61B534CA1A7D33CCE9C2F0B3FE008 +:101C20005CE533D3BC65DE6F805D5FCAD705DCFF42 +:101C3000FF2A13750AE1B05C7EB58CF578D984F57E +:101C400032F931CCFB7D70FF50C439D729B036460C +:101C5000BFEEBB14076D49078C003C4F0727661980 +:101C6000D8F727FC8997149E277631978BE44CCAC6 +:101C700037928AE73B397CB73E656D7DD365670255 +:101C8000B1AF537C9A35707FD216FB2D81A8F51029 +:101C9000C505D126D2BE90F5109AF45714D5D917A0 +:101CA0007A05C73F30E19B47D16F3CD5A05A016808 +:101CB000FF1BC5A479AC9FC0D70B0017C9CFDD733C +:101CC0004F925F135092B4AF17A891485E70BFE077 +:101CD0000BAEF8F5DB8ACFEB4715E0690D2A2F8CA8 +:101CE000534CA8DA7439E2E9FFC8625FB0BF09E17A +:101CF000BC7BEE188A276C48C577D4F8C98FC9E138 +:101D00003ED8067F5FD372ACFF533FCDB335A5E518 +:101D100050951E983BB514FDE1D70BC66D0D879A03 +:101D2000304E119CDA93C07E4FCFEABD08E7BFB1B9 +:101D30002A47FEC1E9134F5EB69661BB08B5BBBB2F +:101D40004A22BCA52708BF8EC178502F5C6FCCEE0D +:101D500032115E8EC77419FFAED5031D3CF262339B +:101D60008CAB85137A92FC0EC413965F9E93E57E2E +:101D7000AA1DA974AD37EFACEF2538A2E3651600B4 +:101D80001A49535BA6E13CFCE519F2931686BFC8DD +:101D9000A85C63E7EE877AC1868061A2C98EDAB952 +:101DA0001FE2DE24A8539BECB16D633F6A5309F731 +:101DB00077EAF8FAD0807F506FCA1F2F673B302E2A +:101DC0003CDF37B06716B4ABF1AE1F55377D70FFFF +:101DD0008EB9BEA3FFF3A73914E7BABB7E75682D91 +:101DE000E5617CB994F68BEB7DC703803A3911C964 +:101DF0002D74ED1BEBC7823F39E4C2CB347F713FBA +:101E000029DFCF107ED2E994F6934340DF949FC739 +:101E1000A73EABDA33FDC037BFF37BE39DCE33E59E +:101E2000E7F4FF8162D7633D87CFE469B9A805FD78 +:101E3000779731B2D776FBA117C95EB7C6A3188FC3 +:101E40006FF717BC5F20DE078B8FB3C1CFE3F4EBD6 +:101E500025E0D7C9837A441374DD28A519CA53FA3B +:101E6000EB116B0FE667B034EDA78E5A6C4AE94A66 +:101E7000ACDCF011EA836034427994CEF7CA15FCE9 +:101E80007B5B55F228AEA7D2953AC9455B999AC3B8 +:101E90007CB0BBA7A80FC82E7BB9DACFFDF3363FC5 +:101EA000D71777FBBD7A2321BE7FD9CFFD8DB6B082 +:101EB000F0478CADD12F4C2FD20FE2074CC60AFF52 +:101EC00033EB100FABFD5C0F6C84CFB83E484F5125 +:101ED000B37B908FED0CE58DB8BEA7CBDCDF8DCD4D +:101EE000D125A85FD3D0FF189C272322BBEA7338E3 +:101EF00072F01DD6B541B4099371FC8E1CE2459574 +:101F0000603D64E0FE48770EF1D001F2245BA8AF9B +:101F100012ABFD3C6EA3D07A25C6E3349A1927791B +:101F200071F4FA9076A5409F17CA018B16EE6F15D3 +:101F30005FBFD764AE1B767FB470BFAFADCA8E52A1 +:101F40008AA93FDBA8207DFD7614FDE8CBFC3B1B76 +:101F50001702DFB57DC6A614DCF62A965D87FBE185 +:101F6000AC9DD6D31F00C424CF57E4A271B1BF3BB0 +:101F7000308F56BB9427A859CD842F4DE2EB474DA7 +:101F8000AC1BB568C1BC849C0D056F4B81BCDEEFFA +:101F9000F7AE33997CB5AF1DE357315F561EC65F70 +:101FA00073E4954D1A3E0F6A7D8AEFF33DE9B71F42 +:101FB000457A82394AF0FCCD7E0F5FAE11F23C1FAC +:101FC000FB9C3B887F58E188B215453A04D47802DF +:101FD000E31F8A580739ED7FE2E7FB208110FF5E9F +:101FE0000807AC4F9FF7433F81489CAF8351595F2F +:101FF00082DC659B5F28425F675F14F44B0EDB3128 +:1020000043F833CC368BF183036F14FC5DFCAEC612 +:10201000C43A3AEADD578175F4CF088EA1E1FCC5D8 +:10202000BF07CE1F0BFDE7C039A45C38712991FFB3 +:1020300053A5A4299EDE6AF2B8B90C0A0AF3F3602C +:1020400059904DA33DC848365FD7F03C1E35E68D0C +:102050009F0F95871A6DCAF238A8CEE516C6CD89AE +:102060003C13867A109E949FB73E365BC409BC79B8 +:102070000643E5FD394FC76E61DA0BDAAD73D52F34 +:10208000EC3FFAC5F8F0FAA330EF4157CC93C3EC1C +:102090008F0DB653D84997DE09A8CCB36F6E2F5C6D +:1020A00046F1A300F359187F698D5ECB1226E51B1C +:1020B00010DD3A19E76B668EA2F2ABA847713F2795 +:1020C0000AF617F849D5EC1C752EBE9F8BCE8AC137 +:1020D000F5A5ACF3751DC85314FD479981DF625116 +:1020E000DE7786F48890A7EFABF149EADCC13CB11A +:1020F000BC9E53D94AF7FA79C3944526E6A55529DB +:1021000019CDED0F3A7E6B472ACBEDBEF0FFD5A877 +:1021100045FD39FB1F85709D958F56C3F58AAC65CB +:10212000C8FF0C6636DBC8978579654E5EF436CC01 +:102130004B23BF2BCBF7DF87E0CB91AE47EE945913 +:1021400012F5D4E9EF66D525F0BC39F7A85A0DFC95 +:10215000F5572AF74F4E7F97E3E3DDD4479E38D0FB +:102160000DEA18FA7EF3730FA80B5CF8BB59F83D23 +:10217000009FEAC517975FA60F1CC43CD0537B6530 +:102180009297A1E05B193D784871E1E9EDBD32ED30 +:10219000FFBDAD80AB518EE52A92DBB3E795F5F834 +:1021A000CB2BA387A99FD3DFC9AA719A8726BDE14C +:1021B000E7F3C4BCC49B9F7E40C5B5C5B9E0BEBAB9 +:1021C00080BFB3A21FE897CE6784728F529E6328A8 +:1021D0002DF250C11CD0BECB91D10FA29F7CC599CE +:1021E00027687FB2300F2588F39CE3F2C36AF97E3B +:1021F000DF069C673D96CD6CBA089E0AE719C47944 +:10220000CE19842F8FE77ADFB0F188BB52B943EE45 +:102210007CBCC267C95CBE2F5CE2EFA5FC8A73C1BF +:10222000A1D7417F6E3BEDC051373C1CDD08876B69 +:102230007FE4EE3A8E87BB953E6D24E386AD8271D6 +:10224000010FB56318DF7282714F57337B31C0D1F4 +:10225000D3CCF53D48CE29B457CE3E54A5F639B679 +:1022600066F6607FD115F0DDB30ECAD0FE58651357 +:10227000D83B3CB8E0FEEE8AA36BE27C8D12ED20E9 +:10228000BF458986F8B99F9872B2BF003EACDF2A7D +:10229000F4A1336EC704C939F77148217F10D6BB4A +:1022A000988F55C9F320DB2AF87AF7EF54B5683ECA +:1022B00013F8937FA7923EF49E4372F232878AC747 +:1022C0007614E4653AF8EDF03BF97A73F6A27FDA1A +:1022D000EAABFD3AF96F238CEB764C584AF99CE94E +:1022E0000A959FFB9098F02FBCF37B59CCC789CB04 +:1022F000C33C5EC679A8A03F457CBC601EC5E3EB2D +:102300006D380FFFD9F370D61378CE06ED42AB547B +:10231000F775CA0B1B619CDE81FBACF126CC8FD21A +:10232000BA28AC0A7DCDE7E58FF1388593BFDA5E38 +:10233000C6E9760AE75951946EA754CFBE79DC39C5 +:10234000A7C5D6621C83315A2F0C05AFA25DBB43D3 +:1023500071EDD7E2860CEDDFE5F16D517F720DE78F +:10236000DF37D4040BA0FD2BEFE8A37D00619F0AAB +:10237000CF836D28C867DD20F2579DF3601B0AF2FA +:1023800059378433DE7CD629DB8BE6830F9E63E3EB +:10239000FE12339D736CFC7C61FE3C18D8673CBF19 +:1023A000B6C1390F555EEFA1C3BFAA8571193EFFB3 +:1023B000DB0AFC66E7F9DE10F2F5DE0F031EF99A80 +:1023C0001618924ED3106F85F2F5DE0FA771BE7C02 +:1023D000AEA2289FDCA65DE3A1CF20BC7C9D4D244E +:1023E00082F9EE28FFA869293C4B04FC7749ECAA46 +:1023F000B580B7391726E6E1B8B7C6FB17A1AB54CD +:10240000B982F970BC2E219F57CAB1E0098067F3E9 +:10241000C2EAD265F0FC4A402A0A7F37AC5350CE5C +:10242000DB531A433939FDDAB461F7DB76A6D21EE5 +:10243000BDBCD352C80EEF4CBE682C40BE2EAF9927 +:102440004D79F80D3CCE1430CC07119F9F0B481EE0 +:10245000BA00DE3E1770F177F7AC6BE9596E676D25 +:1024600083F619B269CC1B881ACCCA995C901417F0 +:102470005E42B519A906FABF15968B187A057C3409 +:1024800005502E13FDAA5A041F9B17F2FC92D54B40 +:10249000A73EE83EE7F2FD005F3FB13AB1CE5160A2 +:1024A000BD55C43F76E8B40BF05587FE1DEBA5F390 +:1024B00034E35B5816E5E56E7CEFC7F39DF1953884 +:1024C000AFF1ABC4B94E11079098A68C21FE32280B +:1024D0008F6FD7B74282BF0C3A77738780A3087F8C +:1024E000DD1128A2BFB5FA641AF15C154ADC89DF58 +:1024F0007569C0C0F8C3C4962CD5DB20E2AB00F6EA +:10250000AF909F4C890DFE60DC713526F9213B05AB +:102510005D22B10C9E9C60357BF517311EB83EA143 +:10252000DBA80F274EE8FF25E66BB07F9019CADFC6 +:10253000246BF701A433B3B581D228C65D07242CE0 +:1025400087A08CFA68D21AC387E33BEBDF712B07B5 +:1025500028CF7C5C5B7F0EE3AECEBC026A92D6FBDA +:1025600066ACF96A8C134B13359F86E36E60166E6A +:10257000C755776672A847C737040CA4EFC4AA24CE +:10258000C5AB2A57F0F7136D2D2ED3D65E86E7AB79 +:1025900028FD6B51AF04EA2DABCB354E3096B89584 +:1025A000017D3E0E2676229E8235FC9C6E2096A6EC +:1025B000678F3F4B7E76E8F28C8D7E5BF7AC6FB217 +:1025C000A52E7DB55FD02550CBECAC3EC8873B44F3 +:1025D0006245C6DE12BCB10EEBF13C5C857D43F07A +:1025E0002FCF6F0E09FE05FEDC877C61AEE83B4C09 +:1025F000E1C5DAFE0E9F49F23996C391A6F3753D07 +:10260000B3548AE702DD7E8D8786302D8A998374E4 +:10261000D362F66EE49F65011EEFBAAB2297C378D2 +:102620007119D00BE3A6DAB19FB28950EF1795323A +:10263000931A308E9AA638AA21E2A83B93EB72AF88 +:10264000417D7F530923FB512DF8A181AF57014FE5 +:102650000710CEF0C25E09B7C84276663EC2BB53D1 +:1026600049FEE63BD06EE711D94A3397BC88F8841F +:1026700083AF0949D00F1E3F29ED91AF73D9556043 +:102680002C05FB5BA895905D3AC8B8DE03B9FA7FCC +:1026900008D742E37D922BA68F1E517F85EF3FB274 +:1026A000AC52C4F3F2E8D26D35E01F2F6BD9BCAD4C +:1026B00006BA5AD9F2E856F4974F742F8FB8D77FDD +:1026C000273BFF5704E9F356D64F783AD929517C76 +:1026D000E864F68EAF62F9C4CE80896527DFA6591B +:1026E00090EAC0FD01D27F6F3D20517EDBCA1E29DA +:1026F0008DA9E0A7CB121391CFDEDA71E7C462F1A6 +:10270000A3E663208633F1FBD289C5F2F956F6AC15 +:10271000A7FC9C959D7EDB2EE63F9625A7A13CACB1 +:102720004FEDDDF9A67FD04FF1A101277F94E78F10 +:10273000338D9F8B9BFFFA55513CFF713490903441 +:102740008C8F1EFF33CAB73958B6288A7EDAEAD78B +:1027500002248F77AAC969860BDE3B236A82F8546C +:10276000DFE6A1C319E4CB8AB3E990DEC3F30465C5 +:1027700016B2D07E2DD42D5A0F9DEA97A8FF76B1C0 +:102780006E2E9CAFD2F2F856F7BA4F29B798E98A65 +:10279000A7CBB5DEB87A540BD178E3351EBFFE3037 +:1027A0009018AFCDE5FBD62DA3309EB06F2BB7BBF5 +:1027B000C5CF73ACFD0C87739314B2D6019C9BF20A +:1027C000FBDB03FC9CA732C0106FEB947ED2170B8F +:1027D0002F1FC8C9AE79403D0DE35585F3694DB54E +:1027E0006C453BBB3E95A667AB7E4A43BBBC4EE304 +:1027F000FD6CD2FFC8CB86417C16D15916F3BF378A +:10280000A4925BD1DE6E32A03ED45B67669AD05F45 +:10281000C533B29817BDC9F8237F6F8B7E62A25E65 +:102820009A97BB529D34DEA698A8C78EF37AA6A8C5 +:10283000C74E88B2F3FDCDC5A89737D50AF8D8DBC7 +:10284000A22CE0D3FB17E3FA78535D35C1B94937C1 +:10285000491E06DF2F2CFABE3B95213834F43BC1CC +:102860007E6DB24E79FBB31409E5E5ACFEEA7DBEA0 +:10287000A2E3D47378FD2DDFDFEA5E2F03BDAFD373 +:102880005C7E46A9A0F726C6CFDD2835169EC96511 +:10289000B9C9E629FF6583F56ED4B87FD4E2F05557 +:1028A000CC62E87F80E65CBDDEC5DFB26DD9787EA4 +:1028B000369A28786FC07ACEA3F78AF3577A07E75B +:1028C0002F0DE500865C68A6E95CB0C33F43E9B321 +:1028D000CE5496F8A02BD5444F478E0BEBFDB52672 +:1028E000FC9982F15B00EF1AF7AB697F4C2EB7E8D9 +:1028F0003C8C333F584ED0395367DE67CDAFD6BBE3 +:102900005E75DEB7219FBBFCC107849E516A666B72 +:1029100026C5BBF83EDFFCD737909EE93C7E6314AA +:10292000F5DAC1CAE61EB4E38E7E196ADEEB534DBA +:10293000DB6AA6E038896DB84FDA6ACE36E81E0C3D +:102940005D6139B4034A1A63634CC3756139ED1B89 +:102950000CB032F09763099A9F6650360B53CDE462 +:102960008DB48E38166453705FC1B4D98D2EBDA15D +:10297000087CFACFA46A5A66A3DE6926FBE08FAE14 +:10298000A0E79D111EBF2F846F83C6D7A91F06E243 +:102990008FA0FE0CB6ECDECAE32E43D07F33D0BF4F +:1029A000DEAD07B9FD3D752C487642D6D38162FB7A +:1029B000184ACB72EAF730D2A002F17909E547B69E +:1029C0001EBFF346CA4F7F2D4841DB83E179471391 +:1029D00023C0ABBF652BD93DB9E5DBF4CCD319F4EB +:1029E0002BC51F0D7E3E18EFBB9862221D2DBEBF6A +:1029F0006E2707E432773FDB793F896DC3E2E96FE9 +:102A0000F278B25FD2E60E839FFDEC28DEDB713AEE +:102A1000CC0C948F83AF5D4C70AC3ECEE563A19E31 +:102A200026BB0AEBDF8140D9E03D0A797AA4561231 +:102A30009F74A7D2F42C11780B5A49BC548605EA2E +:102A4000B85F065C41F30AD5F7E650FE02163F92E6 +:102A50009DFF5E0FDFC92E2539DFA53A890F4BEAAE +:102A6000FA886FFC7A417F3AEF4F35447F7A417F95 +:102A700006EFAFA48EF35DD802F85CF204F6F77DA2 +:102A8000E41F4587715C7A448B6E23FC0E85AF434F +:102A9000C7A795F617C1B7F3DC24ECC7C6540FE9F6 +:102AA000DF6E61873656D9744EA203ED911FF54B48 +:102AB000A7D02F5C4F5F8087EA498F1894977B37A8 +:102AC000133F95F3AB5E5F4EEBBA8C9F979528B79B +:102AD0005701844BC6BCF12C3DBB15FEBDBBCECC13 +:102AE000B6C2F74CD0B6715C0916104B8AEC5B7419 +:102AF0001B2F925ECF94F17ADDEC88B61ACB55A2EB +:102B0000ACE4A86CA836D92DDD9F33A81CE2E5A162 +:102B1000FAD5CB5E34B05F639468271DE1EDAABDA2 +:102B2000FD64543E0EC619A91C1A1EDEBB8D5F71D2 +:102B300078478976EC286F57EDED6728FA842DA049 +:102B4000878BDEE0AF6FF5C62DB3FCBE25B3D35344 +:102B5000AFA436E3291F7C6DDAD87ED73887FA27F1 +:102B60000FCB1727911F5C7AFB64307103EACD6F9E +:102B70006FC82E6C8B41D99F98284179A2F162DBF6 +:102B8000E209601F5B96921D6D167A6359CB2DBCCE +:102B9000DCBD5C453DDFBC53A2F551B3D0078C25AD +:102BA00054B437EF54254F77413FB704431EFBDA47 +:102BB000AC27549EDFE9B533CDE5890EA988FD69C0 +:102BC000EEF47BECABF37E59CB72D23BF972F76437 +:102BD000826799D0E7CB841E07C337B109E8B72CC9 +:102BE0001824384EECB96722FAF5EF48991BBE85D8 +:102BF000F1C89B429EF374CED389CF1F0D309167ED +:102C00009738FC09C07D62AD3CD0356BE87E9A8573 +:102C1000DD28EC676990F7D39CDF5F48E6B0BF77AB +:102C200036B43F4AF9334A66E2756087AF096A1ED7 +:102C30003F7A59629B474F9FEFBCFF2AC8CFC92DEF +:102C400013E38FB4BDF3FD1E81B7C17DE9EC05E848 +:102C50002FFC7BF9E2DE6AE00BC0DF7D9F325F383C +:102C60007AB1F94C8AA11D77E87054C43F9902707B +:102C70004F1FC47FE0CCCC31D7B9E23DEB04DE7707 +:102C800004CDA2F82F9CFF3B2B433E8C8FBE73E4F8 +:102C90004ADA47BE57CDDC80FA64A5C08B838F9398 +:102CA000608FDA5CF2D6DC7DC7E10698E74DBBCBDE +:102CB00046492E7EBE69F7E645E3CA116F65B371DA +:102CC000FDBD7237C7DF8D3D6BB7B579F48283C721 +:102CD000CCC788C79C803B8FC79A444731FFB5B9A2 +:102CE0002EA1CA45FCD7A1F07893E8EFDE4866E351 +:102CF000C3D0EE0DF6BDEBD621BF1E59501AAC1B4A +:102D0000C4D7B2285F47BF21FCEC936067DCF33D7A +:102D1000D1333982719537147E1EFD44CF145ED6AF +:102D20004479277C87E71BE27CFC899D53A85C28BB +:102D30008F67D1256F1FD3CEBD266F6731FEFE7A18 +:102D4000C06A85AA73838963415CD7452E5D897605 +:102D5000E8CE1392897ED6BD91CB7F619A43DBD5B5 +:102D60000D295372AFDF8243E46FFD262879F236D6 +:102D70005A538B1F7DD3356F59B128BEA4E8F0BEDE +:102D800088FF3CD2713E0AF2B8F648EBFF5350F28E +:102D9000EC4F8E5BE53D0F1059E1CAF367E8077908 +:102DA000BF6BCC55AE1AEC873086E7EA99F3CB8A35 +:102DB000F933F67BD7FD47FEFEB2E518D79B5F934C +:102DC000A17DCB53BACF74DF6370B69E65B9BCDD0D +:102DD000233A68B9BC7D1BC13990B654D376F77ECF +:102DE00055FE1CBAD0674ACB0DDB510E0F413FC7D1 +:102DF000693DBFCEC9AF11F737653DF169B9E5E16E +:102E0000ADEEF8BC21E2EF8CF57AE2C35DC1EC5186 +:102E1000CC7B6A0895B7FBE17B97C8BFFB6CD7E416 +:102E200076CC2F73E2CFCCDE26DA03AE711F65D6E7 +:102E3000C23DC5F6BBE9A4CC5C9CFD2F298E186071 +:102E40007D741E29623270C8A12DE0B88FD63D195D +:102E5000BAEF21D2C0E3998D212E1741ED6DCA3F03 +:102E6000DFD070CAC0EFA72778EB3BF57CE07C622F +:102E7000BEDD464BA17D58A7FE81D7BEC43A11BE28 +:102E80007A5F36C0F3E0164F467FEF330AC3B82AA5 +:102E9000B39D387966D838B9FDC5F9E965E574B4EC +:102EA00082E789323B8DF723F84D85F22F945A85BE +:102EB000F22A5FF5273E1F2AB27FE28C3334BF0827 +:102EC0007E1C61BD2D2993F2896BF6EAB47ED8731E +:102ED0004CA278E7B654ED5694575847F0BCD8EB5F +:102EE00019F9A9A3275A4B2F403BF46B1EF7063E56 +:102EF000A942BF7EECB11283DBE9E4C5D7B8E6EFA7 +:102F0000E4C38D5ACCF7CD60FD92915DE757C7AA17 +:102F1000895B430087146948E0388E1E1A7D35CFDF +:102F20000F1935D69C85E746603D988B47A15C62BA +:102F30003E892BD71F97BC7EA58EF9F501CE57DFB2 +:102F4000EE9AD0817C356AB239CB47E7342A16E154 +:102F5000B99451E3CDF7B17D7BC9A8458BB13EC093 +:102F6000C2EFE1A95E84F1925117F1F28C6EDEDEC0 +:102F7000B1137781DCBC49FE7F623BE2675D88C7A5 +:102F80000FDA049F9428BDA4BF4A407EDE043BAA0A +:102F900029692A6B2DCDDB29AF24CAF7AB1C7D3004 +:102FA000E7C2C486906B5FCA5FEEECC3647B96B9E0 +:102FB000F645AF94391D4ED5980FF273802C7FAF34 +:102FC0000FE2F7999077BF08EFD944F9FE08FC5A51 +:102FD0003AEFE7CFD0BA2A2D29C93D166F8E71F985 +:102FE000369A32FC6B2432F3EBF15E9351B330EF3F +:102FF0004AD50EF7A03C3BED0BF9645FA8CABB6F46 +:1030000058F3DCCEBC3EAAA67B857A901E7BBA968E +:103010005CE9AFA4FB93089F8F84AE2539DF1712BC +:10302000F9FF2C4E796578C6EAED5184975C6036DD +:1030300075D353E3E8471FEE07FB8EFB679C7BBF0E +:103040004D29EFEB71FBF9EB275ECFE5A4FCA3FB69 +:10305000F279D97864A22EEE43FF638AB877236DA4 +:10306000B0F467311E82FB4D2EBDFBAF216E47DAF7 +:10307000528B3DF9F57BD5440EF9D35FCEF3ADFC11 +:1030800089ABB7227DBB532B892F98D897AC16A458 +:103090000AB22F96E624EC2749FCD3954A53BDEAA1 +:1030A000FA4C0EF70998E1B3163460FD9DB943E878 +:1030B0006F2CF00D04006FD535CA876EBB539897FF +:1030C000D917F2E66576A4609EC85CF24EF693725C +:1030D000BCBFC547F10735663522DE14234EE70B2A +:1030E000A76C33668B2D190F9CF97C4DB9AE315806 +:1030F000CFF34D31EFB65A9C772B84C7C147215C83 +:103100006F14C0156979A807E5E103B6D3C6034576 +:103110003E71FE20D2C9486FAA2DF7D1F750436FF8 +:103120001AF537C5DE5CF0F8A2A6CFC7E35516DE68 +:103130006F17697998EA078FFDD9118CEFAB2DBB1A +:10314000A85C081FCC98CA4E7E5E753DCF271CAA8E +:10315000DEA11563A8DE4B17DAFF82F4FD373C5081 +:10316000887918A99E9E37292E90A5A743E783AF9B +:103170008DA5793C54CBF8B9FCAB1F277AEE067AC3 +:10318000A2DE7E287382E295A1FF0D564F223D42BA +:10319000F5C1E6F3F302DB001E97DED36A010EF7FA +:1031A000F99F12A15F529D345E04714AFC98E17C44 +:1031B00026EF237FE103932547835FDB1ECDDA48AB +:1031C000F7C9407736CB251795B68FE27E193EFFBB +:1031D000C2711C3E70F2D5B5EE6CFA274803E86761 +:1031E00041A52B8FB8A05D21DDAB4B0AF384CF50F6 +:1031F000FED207DDFC9E59D6023FF087A688710AF1 +:10320000E5D7A1B75386757A69FF30F20E74D98E6F +:10321000EBF28753597A76449768220F238BF65244 +:1032200015F2B93EB6CC467E6E07FD8B60056299FD +:10323000B5B46EF2B1815258BF577627ED2AB14F1F +:103240008BF79F04B625BA2E28A77B152C3CFAD203 +:10325000115DB62E588E72ACD1FEB95AB9A211EBDF +:103260002B362F4FDD96FC19D69F2AEAAB95DF78D7 +:1032700011EB5789FAEB63AB1B715F5813F5A76D20 +:103280000394C2F76935EC0105F85FE94E1EA1F120 +:10329000D7F0B8579A25FB501F57D51BB43FAB75D5 +:1032A0004319BF7F83C7CDD20CE083EF9316F2EFB3 +:1032B000E16E0E2F5B95FFBEE52AF83EA1817F2FC0 +:1032C000EBE665B622DFFFCFB0FDF88C41E70D22BB +:1032D000DD1C7EB6D0699FFC15D6AFDCC6BFD774A7 +:1032E000F3B213E703AB26E1BECD946E66E3BE56A0 +:1032F0009AF531CCFB73EC649B7690E45109BED413 +:10330000837AD1919F8752CFD1737DAAB707F9777E +:10331000776A2F959DFB6A6ABAF9BEB10EFA0AED7B +:10332000F09D255CFF163EFD9559CA638CA0433A7B +:103330000B9929CBF77B6D46710680288DFB4CE0FD +:10334000CE59F75AC5F89DCBFB44F8219F3A7CE64D +:10335000C4850E1DBFD8C377AC06F8CC9DAFD6068A +:10336000FCE63E87B866AFB7FC8D5E6FFD55CF7942 +:10337000BFAFC879BF2F3CE22DD7F779EA3B70F495 +:10338000A47AB62E9C82F86CA2386B4F8551897155 +:10339000B3CDE2BCEB068CFB4FC1F3BB2D22AECB11 +:1033A000E3BB1B312E0BEFEF4F65E869B43CB4155E +:1033B000CFE7AC4F356D5D48F688C76BEF1371E012 +:1033C0005D42EF80BFB9AB04FDD3CBD3928A71DAF3 +:1033D00028BFE7DBBFC226A3D113B4AEC7F5BB1627 +:1033E000CD309F6B5DF578095F4F19CEFEA9C224E1 +:1033F000775EE8E3A27F875FEC090986FC94AE4A1A +:10340000D07EE16325DC9FD9ABDA8F97CCC579C23A +:1034100038C817561F9D6B1A9F3469BD1F69E0FBA2 +:1034200089A13A5E1EB7B24FA2B825AC47707EB1F3 +:1034300055DEB87149AD375EDC53C6E19F20E22D01 +:10344000418CE3C0F38F5AE3DFE2B80B75EEA7B40B +:10345000869B2B51AF68A1F88FF0FDE9D7EEE1E72D +:10346000B174AE8F8BF87587106F67FB754EBE51C8 +:103470005DE90917BEAA756FBE5197F0DF3A449E09 +:1034800051979FE713A47F2A178DBB0DAEEBC0FFAA +:1034900071E94FA5CE77BC6206DE4FC0F390F7E02E +:1034A000BE0FE93DE3972597E13DDEEC908C7ED79A +:1034B000365F6E4C64B01D6E99ADE4FED81119FCF8 +:1034C000B190CAEFCBF01B5EFFEA5CFE585BCAF01E +:1034D000E4452A754A7AEC0C3CBFC0E151A2EAF1FE +:1034E000D1500E055892F70FF55DF41ACAFF749E7D +:1034F0009D29F03B710B5DE77A41AD5613A83FA6BD +:10350000A125433BBC6DEA83EE756385CEF96A77EE +:10351000E65CEB63468BB1BBC4B9F92E716E3E4FCE +:103520001F912F74CFE8D7D971171D4B75CED7E1F6 +:103530007E1E87D2EFB056BBCF6F38DF4B7527DECC +:10354000C0168EA91F3CB7846618D7817E5C07E23F +:10355000BA2F9AA6BC0E659B7A5CE47596EA45F292 +:103560009BF6F8ED9FD13A6DB38F61BEF39EA53EF9 +:10357000824F1DD71975E7E77C20F4A72AA74BD106 +:10358000DF652F717E5A3F6191B5CCC38F5EFF3EE0 +:1035900068029ECF83EE8ACDF3291DF9D978E9CD53 +:1035A000243FD303F16908FFDADAA6F9FE7ABA6F8D +:1035B00094EC53A19C3D17B12FC47A8E7C5D19B653 +:1035C000EBF422F2D88A791B2EFE929DF3DAF843AF +:1035D0007BDD997818F13AEA2F2E3FDE86EBF4CEA8 +:1035E000E679328D2753BFF69799C8BBE3F85FA001 +:1035F0009B9E79AB35F134B2E3A8BFB83AD786FECB +:1036000083C823B59BF8F9D7C2790F756EE155BF12 +:10361000BD509F3B48AFCA40623196956301EFDFD2 +:10362000351079B6A346DBD1592EFCAE127C93CF70 +:10363000C365227E4467B0C57C31CE84E56A8C0BBD +:10364000F3F98D1A6BAF23799759F21998FFD80CBB +:10365000986A283FF43595FC55A6C4732BE1FD8E7E +:103660009FD43227EE20F68593F752396E37237EAA +:1036700012BA89DF358CE74EC67B367AE9A983DD3D +:10368000C767840DD0D3C0C8CF64CFBDA25F433A13 +:10369000AED212933061EEDD09894710E65B700E01 +:1036A000185709D937E27757FD5B102FF9FA7E5E7C +:1036B0007F9F62AFC2F73F50EC5B75929BE2E7F0F1 +:1036C00086E2C703FDCB35A4DF8E748461DE5BC761 +:1036D0000A5F15964FADF15988BF5DF38F56AE80E6 +:1036E000E77DF37F062E1263DF8B25E85ED24CAABE +:1036F0009FF2379D7B48577E9020FA95D9FD9EBC5E +:10370000AD5D95CCA6D08A0D8E085F9F1F407DAD24 +:10371000E23A00FDC515DCEF56ED023FC472AD4341 +:10372000806EF749BDD7A1D1FC9EFEE78BF05CE02F +:103730007DC1DE57B0FC8CFE97BC5CD67B1DC62DD0 +:103740005ED21354BE5FEAA3FAAFEBB7F072B08F4C +:10375000EAFF41BF8397CBFAA87E67E0DB8B165F59 +:1037600002707E87DB9F5D07DEA9C435D6F85589D8 +:10377000D141977E1C9F7BFE808AF67595F56CD0B3 +:10378000656736A25C609ED0AADEF9B80E1B5F6347 +:103790004D45F48FAFCDB205759F4ABF07D01F1FAF +:1037A0001F837EE1D57833FD69F5BB56C776474464 +:1037B000BF3FB7E44FA95F0953C9C7E7041E0E19FD +:1037C0009F56BF0770DD307EA7E8379BF67D4AFD28 +:1037D000CEC73C9EF16DA2DF4EB368BF93D678FB97 +:1037E000F587B93E9C94FB98E83EA9C69A87FD4FA1 +:1037F00002BA2F3FBFF644DF4931680FE34F02FAA8 +:103800009E677BA2E3A423A23DD0F13CDB13BD263F +:10381000E504FC40AFF3851FE93269A7680F74190E +:10382000497BC41BE27D529B680778C7765183FBB6 +:10383000C507FEFA64A5DB0F74F63DEF1FE2BE87F5 +:103840009A30B7DF83E37E2C4D9D8EE30E48CD7416 +:103850007FC5760EEFB6B86F11B4DFF527DECFAEB9 +:10386000B5BDD2BC3AE49357A4A9687FC2B2B32FC6 +:1038700047CF09DFE897F03CC1C49E84CFA679F119 +:103880003CFF5DD2F1CA28AE03572446AF75CDABDD +:1038900032B783F7B32243E356EA16C3F1F0FDE4EF +:1038A000F060BFF87D397E376C86E7DCCE821BE0A6 +:1038B000C4FB6EE96463851BDE01699ECEE936D5E3 +:1038C0003D2F80AFB9087C78EFB31B3E357713C32B +:1038D000762AC0D5AC0FC283EF113E15E059AE0F6A +:1038E0006D370EF6CBE417B4C7785CA7BDFF8E1C0E +:1038F000E609B5774B26C6355BC7ACCEE17D35A76B +:10390000E8CA5CB08F699E971DD0D77C0EF3A7CF15 +:10391000BA372C667AE2A3B05EC832D7BED04EFC6E +:10392000CF25B46EF88B70D178B0D81749CEA67A6F +:1039300057A263518EFB44531FC0F819C29B86F2F5 +:1039400063311E1FBE525E93FB0E94F719D5B3F977 +:10395000FD6B9CAF30EF1EEDD9BDB8AE9882E7F09D +:103960004C7A3ED67F3044F1E59842C1B21EE15711 +:10397000AD9CBF6E3B9E1B98B1DBF9BB1CDD63A603 +:1039800040BF8FF772BC3C94B2C8FF6E4FD5EEA417 +:10399000BCC9944965275EBD3BCAE37B57CAABD21D +:1039A000F8F7809E10F13B35E6B58301B692F25FE1 +:1039B00002C76EB471BFA70DE38E0DF47740FE1CF5 +:1039C000FBE906B8B09FA891DE3E05FD990CA37BEC +:1039D00005AE948F85DCEBF461FA6525AE7E1FD7CA +:1039E0009206EE17AD5CFA94AF981F375C3F18470C +:1039F00072FA794217FDDC74EA7CFBC9855CFD74C0 +:103A00001BBC9FA1FC97C27E60C41CCE2780F10D19 +:103A1000A0EFBDE16A9E770FF8A3731271F6A40CB4 +:103A20007CB2BF9C5978FF48A0529F956623EFFF58 +:103A30006994B90AC4EFEFB7DF06EDF73DC7E90DAA +:103A4000E531B7235D77F372BE3D54FFCAEC61E701 +:103A50004BF477E6BB2F7ABEF36DA17DC700C67B22 +:103A600041BE76C7787B26E296AA902375B7F0B35D +:103A700044BCFAAC7ECEF3DE8317C2DE7B4A80AF55 +:103A8000099FA75E9629BFCED1E385FD3871CC0D85 +:103A9000621DBF5EC8DB53B08EC4676F2A4ACF4732 +:103AA00050FEA0DE03A95A2ABF14E6EBC23D298BC3 +:103AB000DEB7A61AE839BF7F6D00CF293C0AEB7F3D +:103AC0003C1752C932E3B0CC5E5069BFEDD1B2BEF3 +:103AD0007194B4AD65C6E13D1B778975B103CF5DC7 +:103AE000D31F1E877AE431BFFD2AC64BD26B23E673 +:103AF0001E98C781673EBC1EEF23FAFE7E9561BF0C +:103B00004F6C3E39EEBB48EFE7555A57BC15E6EB14 +:103B1000E5B55846BA4FE7F27CE0F80F7237A35C80 +:103B20004A8CEE7DDC3DEB30FDFD8143B39E358755 +:103B30008BD726F5C45BA8DF4A7AF97AB6A48ED172 +:103B4000799791F77F98F238BBC3BDE670FC03E329 +:103B5000FC315C71F638078EF3736ADD629C927DEE +:103B6000FCBCE4EE59CF8EA3FEF78BFE2BCFD93FE2 +:103B70008B149987D3FFE3A2FFDDFB3FBC17F1BB9A +:103B80006FBA4AE439F4E4B3D7A31FD40DF8C77B66 +:103B90009FBA2F187815E7593223C48AC9278C1386 +:103BA0008EB8ECD3E038A7EFEDC07E04DD400CC644 +:103BB000E139A4124BA5F81CD0C183BFEE29B95737 +:103BC000D10F29591731D14E3CF1E4E171C5CE4BEB +:103BD000C078E3879B9783B7DDA2FFEF43FF18CF41 +:103BE0003EF4FCB3E3106F8F4F07BC0D235FD0FF93 +:103BF000B462FDEFF7F78DC3768F3EA336D1B921BE +:103C0000A5734C0DAE435F80F53BADA71264CFFCAE +:103C1000C6B279B89E7A39CCCF2BCCD4E239D42B2A +:103C200020A256C6C27D44EFBE8EAA3491FE09156D +:103C3000ECF7A8C7BE9473DB99C2761769B01086FB +:103C40007E6BC07EA525F7F87C3DA7C5BCF56BB49F +:103C500038D9850B100E636838E61CF1EA2380C35F +:103C600076DB81C27617201C30EEF421E09895F3C4 +:103C7000F61735E236FDDD3DE8EF9922704C17F37B +:103C80009A19E5E7B8C16A7BBE2F8B8CE27E12E001 +:103C9000C7ADAFFDE0167C85E2815CAF16F65BDD5B +:103CA000E62D7F0BCF78433FB7BD732DF14D4D9C73 +:103CB000F562AEC75078296C0FE3B3E030F471F4CD +:103CC000BEE33FD588795D20E6E5DF9DF0ECAB4EA5 +:103CD000DDE66D3FD43C14FD3F662FD645BCFB5F4F +:103CE0001FB01768FF3ABBF6591BF58022E2472543 +:103CF000F5FCDC7049BA8BE070EC45491DCF6F389C +:103D0000D8FFCF21CC477DA27F72D17B732E0E27A7 +:103D10003647DCFEA511DDE9DE3FB0592FD9CB9245 +:103D2000068DF45B49031F0FDADD43F227C675C623 +:103D30004B3BF5578AFA2BF3F5EF2F56FF10FAC7D6 +:103D4000E47F727D20B7A83B71BF07751CDE03F0CE +:103D50006120B1DBADB7E4043F57E2E49374633E06 +:103D600009CF1BA9C27C997CDE4892DF5732BA3A50 +:103D70003913F3919CBC11275FA4F0FC5C7EFEC25A +:103D8000DF96315F04FA3B7D5CA2BF632445F8FDFA +:103D9000694EBF43D1319F1FDE3F2747F72DE464B3 +:103DA000CA9777FC60D4A9D81EE6F5E3E1E6D53AD8 +:103DB00038AFE3A66B5E85F371DA17DE0B55980713 +:103DC0005398FFC2147E1EC8C1770BEBFFF5ED3888 +:103DD0004E8CEF27DFB63F40293E01C374EE972398 +:103DE000399085BE807501ED17B7E2F5AF5583FEBA +:103DF0004CBBF067F27031DB407D2CC7B83F558873 +:103E00002FD9F0CA89829DCA18CFBC98FEAED7A020 +:103E1000FFFE65BA77BFC3E0FE7B00F46431BB5A96 +:103E2000D81F6E44D23D10C2DFEBD06C8FBF97BF5E +:103E3000A7BB9CEF9FE7EFE32DE8A7503E3F2C90F8 +:103E4000CF427FCEC47B0D8BF057A758373972EA2B +:103E50009CFFC6FBDCE97C518CEF83FA637CFFD2CC +:103E600069F78B088FDB3A4F597C67B5B3CFC18FA9 +:103E70007CBD1675E2D9B5BFF29CC7FF45442E7ACA +:103E80006E9FD58EEC5E89CD251115F5CB3D259124 +:103E9000C3489F136B03C45FC70BFE6EC801703B22 +:103EA000517EFA374CA3F39707370422F4770DD7E6 +:103EB0004C8EB8FDBCFECEE27ACA79FE46ECD35FEA +:103EC00050CAE317B34A4DE7DE5D15E522B166C778 +:103ED00076773C35B146227C02632D4279FECDDAFD +:103EE000F97E775E8E93F7E7940BDB0FE61D0F4CA0 +:103EF000E0F98A023FE27CF7B206C140CCFC2CFA22 +:103F0000D137897BA1573F73FFE1FB011FAB2F091D +:103F1000D049A82BCE7CEF309E07966D2DCEE3E3E3 +:103F200099C3AF417905DEAB487954F108CAE3BBC8 +:103F3000CC47F1E177D9AF22735C78F97C29BF07D0 +:103F40008175FA293F340DFFA07EFE5AC6EFC91FC6 +:103F5000BDB1C75B6E664BC6E0B9A7E66D7E9695B0 +:103F600030AFD87BCFF415A57C1FE44696EC4039E2 +:103F70006D17F1815B7F305DC5FC9E9BE61855B2E5 +:103F80002BFFE34B02EFBF033E365DFB5837EB5987 +:103F900015E33D6F3C3DE7DACB18F693ED18574F2C +:103FA000F75916DD675CDEE985F35CF32884DBC92D +:103FB000231D0A0E65AFE4911FE7F9B5526F7EEE3F +:103FC00048EF536D177C56789FEA48DB6FF80FB6C1 +:103FD000BF1BDB579CDD7E7D79328EFB24CEBD5D21 +:103FE0002AE8455C6F490ADF2F5A1F3DC7F7187C46 +:103FF0009787F95E337C7B3C7F8DF72CDA0812DDE6 +:1040000057C9EDEAC114BF87A0D51FFF3C9D93FBA4 +:104010000799F6135BCBD821BCAF242D4926E623A4 +:10402000DAC6174A91CFEC97E5729F2B1FB135BCCA +:104030007837CA694FA95F9CFFE893B15FFB8FC6D1 +:1040400042CCE768F55B51FCFBA0F277F97EF2FC0D +:104050003F5A64DF3EA337F951FFFCFDBE3974DFE0 +:10406000EBCDFA2285E24BD80FC0FFEE634FCEC3F3 +:10407000BF8BD7BA3FCC72A417B22AAE5F6E7E5AFE +:10408000263D71CB1361B26B373F75EB4357C3F8D5 +:10409000D20FC2FCEF133E75E3C33C5FB295E0B9AB +:1040A000F9D96BFE6F5ACC0B8F5EB6AE1571B5B4F5 +:1040B0001545BB7C6B807D15F77D1C3C38FCB740FB +:1040C0009FAFE07D9637EF2DA3BCB93CDF2A50BFF0 +:1040D0000E4FE1B3AF2E2962D78E08B9FB7D98DF72 +:1040E0005320ED3D7003CDAFF74B345F0928F25BF1 +:1040F00018EF87629E508FE6917E54CA4E81EFBFC3 +:104100007F54E2F3EA9DFE001E31BB79EF03EAB271 +:10411000F0A07D70E05DB0777E1BCAED02A3AC1A03 +:10412000EF4958F0C47ED2D3B73CF1A78E4BE1FDE6 +:104130002D321BB81AF4D5ED7B65CA87C2FD4FEF4F +:10414000DF07E1F7E7DF462A11EAFFCD5B8BFE11BF +:10415000DAFD0EF4621054CDEFFA7EABFE1D96131D +:104160007A12F5E2EDCF79E5FCF6BD6FA8382FC3E2 +:10417000C70662A048AEF8C89B1F5F58FF0376468B +:10418000C57DCADB7B37505ED9ED4FBFFB2ACACB5A +:10419000ED05FAE277F83F9567DBF1F74A0BFDECA6 +:1041A0009FCFA324C6BDA38BDABF7C5EA3D01FB76D +:1041B000ECFF6017FE7DC5DF3FF54FBBD280CF55CA +:1041C000FFF6CFBBBE8D7ED48F8206EABDDB1FFB20 +:1041D000EDAE6FC17CDF7D2E405701FCE1878F3C47 +:1041E0007C2F94FFF0CAB4D9129483068F8BFCE124 +:1041F000C98FC798D0CF377E78E558E4C7FF0F53F3 +:10420000B692DF00800000001F8B08000000000055 +:10421000000BED7D7B7C54D5B5F03E675E67F23CCC +:104220004926C34C5E9C04122306996040B4514F4A +:10423000222258D401D126B6B543401E1A317A7DC8 +:10424000E47EC5E6E44108218141630C0464006911 +:10425000A9481BF894E2ADB60322D5DBF6365AAF77 +:10426000AFA20DD15ADB6B71B48A7EFDF47AD75AB6 +:104270007B9FE4CC2408B5F7FEF3FDBEFC7EBAD9E3 +:1042800067EFB3CF5ECFBDD6DA6BEFB9EB89CB2743 +:10429000B014C6BEC0BFCBC696279B188BB846EBE2 +:1042A00050636C0663DA2189B109507D4A944C4F02 +:1042B00093BC8CADC27F6A8CBDB7FF13A75CC1D81D +:1042C0002989C56CE5F07CE073A7EC61EC98CE62BF +:1042D000CCCFD8338FBF75EC7F41FD2FA19406570B +:1042E00080B1DB0F39868714467F5FD0FF8D5CD9A4 +:1042F0008765349741B9EAF1EBAEBDA4024B4700A4 +:104300008667B7B358BB9A32F6BDDB5F7ACBC9A0DC +:104310009F2AB358DED7C6B67FCC3E73B22278FE52 +:10432000D8BA0F6CE74339F097D71996CC3E3C5476 +:104330002AFA15C2BCF01F1731D678DCFDECD1D2B9 +:10434000D1F74BD554CF3BC9F08F0BD9855FD870CF +:10435000BCFAED5BB0F1F12C867025E2EF9326E517 +:10436000D9A30EC66E7BE2FAF4D019F01C3D0B3CCB +:10437000AF90F8BC3E4ED767A9D980E703C9860F36 +:10438000E03DF99A2B321FDA4EAEF96B014B65EC2A +:104390005D47EC26C443EC6997BA139E2F7EFA154D +:1043A000A70EDF3FF9C40B4E6D2A819326CD843AC8 +:1043B0001BF97B91417D95C42BB73F921A75A5419E +:1043C0007DF5A7735EAF40BA2931A24364C15C2D6D +:1043D0000DA7974DF0AE8A001EB15FE4F022E9FC14 +:1043E00071E801844038ACF49466211D4FCC41BE85 +:1043F0003B1D1D4DB85584FB426837FEE0649ED3DB +:10440000D315207506A7E2785D44D7933B3E39B6B5 +:1044100016FA477FEA54E58BA1EE883973000E63E4 +:10442000BF4DDD1D184B6F66FB56FAE232ACB5D0BE +:104430007C13E993C8072B13F800DF47FA9A783901 +:104440001D1FC00C18CB3E1B78FE3E7CD5AA5A1C03 +:10445000BF98786B5EE3D2910FDE2C77455CF0E875 +:1044600084437BE85EF86EEC7907DB09AFDC34FD52 +:104470008F0E2D75EC7C7F0FFCA859F8F13B8D5207 +:10448000FB0478EF3B46C6741B1BE54FB33DB4DA23 +:10449000C6340B7E56B9626F4AF05DF67337DB0D9A +:1044A000DFB5FDCC2DE13C6E7FD8117101BE6F4FA1 +:1044B000625184FF8FDBDC1103EA0FFDEFA69BBE88 +:1044C0000BF5F71F7631F82C5BFEF04F083FCB1849 +:1044D0006B60A03F9E79E2DE533F453EDF6E632E68 +:1044E00015DA930748CE972F511B5A33E0BD27BFEB +:1044F000F83EF65FF9181045C2FECB6F92A07EB26F +:10450000DF25E1F74EFEFC151AFFE4CF530338C751 +:10451000FF38F893F359D9E8FC97F739B4212B7D8C +:10452000995D1BC12FF287B50E08B875A07B10F9F5 +:10453000FE567CCEDF93BE10B28372742B9693A08E +:104540003C94AEBBCF8FEB47E3DDEE8ADD13482111 +:104550003AE7C8B388CE3948EF5BF7C4CFE3C74228 +:104560007E6E77C696F1FEE11CCE1783F4DE53AA69 +:10457000C4F949B427BE6FF6FF17B528611CFEFECB +:104580002A176B1818472FFD428C7BEB9ECFCF89E3 +:104590001FCF10CF13BFC39FDF2D3103F53CDBEFDF +:1045A0008EEC0638EB9DD192CC327A1E1C281BADC6 +:1045B000E788EF623D03EA3F75B01AAA27F1FA4196 +:1045C000275B41FDD3A08EF355864E227D6FFB897C +:1045D0009B75C2B8B71D7CE5D4EFA0FE1EE21C2877 +:1045E000FA5EF6E0A9EF023FBCB7CDC60CE08FDB68 +:1045F0005CD1827ED47FFB5D6C277479CF112DC88E +:10460000B4D0FBB6A7DC27504F8CD40780EB94B115 +:10461000F0B436D5F4BE5DCC585B53884A1B6BD8DA +:104620003E84F01976B61B4A3B6BF801AF4F50B190 +:104630006E54433BEA19A7A2B6C2BC1E4A0626A97D +:1046400040FD914AF2E7CEC810FAB0611AEAAB35E4 +:104650004D731F781BF5826230D58BE3315A3FEDE5 +:10466000CCFE0EE2F76F825FCC793A1D21350070E7 +:1046700038119F8017873DD45108E33B7C9E729888 +:10468000316BF72DD491EFBBCAD47294535706E720 +:104690001F178C8FFCC88EF630FCAE9267FFD0AA35 +:1046A0003FDC4B7FC9481FC1FABC11F4179B6C69F2 +:1046B00007D6492983BA85DE4E0FCC3B8EFE29EA08 +:1046C0003BE78DCAC74FA580EF14E2A1D9A5EE86BE +:1046D000B296851D383EB3957EB011E07868C91753 +:1046E00025430047ADBDC7A1E37A7D79D9071B27D4 +:1046F0008EC259FBD4DA41290D4BFF125C9F6B53DC +:104700004AFE8025105B4982FECF486CA013CAD9AF +:10471000CA5FFBDFBE00EA827F8E623D6B749CA3A2 +:10472000F81CBED3CAD8DCFDF83D25ECB8C3C26F77 +:10473000D39E0A5E7735CCEBDB2B8A49AF950D040F +:10474000BF3E15EADF5A3169BA0DE8303583CBC177 +:1047500051C740F614A42F7C17E1B989C51C88CF36 +:1047600010539D8457A10FEB5840D419E1F377F50E +:104770008E9DC8AF89EF7F2B1AB9FE6AE8F2EDA3D0 +:1047800091AB7139BEE9B9D8B3C8E6A101754E3213 +:10479000B38C7728702C998D1D0FF0DB37341E7E7B +:1047A000258DF01BB02B36039FDF5CBCA3531A2B67 +:1047B000DFB5A9AFDEC810BFA92547B13C9D5D623A +:1047C000CE23911E1F6113F0C98519FABC0CC08F4E +:1047D0003743BF0ACB7A255660077E59AF86AEC1F4 +:1047E000FA2A5B68A217F0F197FCD039D98897C1F3 +:1047F0002CB25F4EFF3D2E7750CA5180E7B5A58E93 +:1048000008CEBF25F9D23E94B3575B5DAA0DE0FAFE +:104810002B7681716E64034487D7D27AF311FE6AD6 +:10482000102CE922D27BDF8E229E595AA013E4F08D +:10483000DB6CC801C2CBBE03AC8BE562A651B98468 +:10484000E944AF9B59B41DD70D98F7CDD679B3BCC9 +:10485000C1029417F6ABF1EDBBC479BFDD14EE478E +:1048600079369F3F9A116AC0F19682605F3A1DBE09 +:1048700013DED46F951BB35FABE053A6E83317A4E8 +:10488000A20E98569502EB489FD0079755CA34BEA2 +:104890002FAA9C403B2B711C169AAD8FC8671192B2 +:1048A0004D6629A04F7C8275CCF712FB99DFF73556 +:1048B0005ECEDEBA00E7ABB766CC183BAF447837C4 +:1048C00064F0F9D4E17B1679AB0B694E0DFAD77D14 +:1048D00096AEE37B97553A887F5A40ED71BDA71F8E +:1048E000437D5817620D9DE548A6877484D39C6765 +:1048F000225C753D6BA52EE46B5D0914AB5F1DCE8C +:10490000ED19F6B8F9B2816355CACC33BFC7740745 +:104910003B9B7E975572F8028016848FDD9844EB9E +:104920005F5D632B7D6F1DE843E4B7443C0E3BB5F0 +:10493000F371BDEC2DF116B6407FD01E21C4DB70A3 +:104940009276BEDDFA3C533C6FD1CE47FDBEAE360B +:10495000879E9BE3AC93B83E33E5B557662B0E605C +:10496000DD1EF02D04FE5D7AB2ECE1469897DE9AEA +:10497000A6B102A8E377B0DD630CFF08C65BEA6569 +:10498000459D80DF463B23BA41CF9285C0877F6A31 +:10499000DAB315D7BDA59D5796A0BDB452E5ED8DF0 +:1049A0001D5796D459BE67CEE3A7F7FBAB514F34E2 +:1049B000C20038FEB0F24C1FEAE73AF72FFBAC7AA0 +:1049C000793895F3D5276F5CE99D42F2ACEE47B993 +:1049D00036DB4F08FE5A2AEC869F56B3EF2C2CC3C9 +:1049E000F9A89B6717235C7A4927CC7BB8796A11B1 +:1049F000AE034B3BD756A37D3F2C69FBDD20EFA5D3 +:104A00008FEC3F0FE990A2822103723BBC7B3D6F8C +:104A10009FA115CA01ECC76A103FA58FBCA0679C77 +:104A20006FD53B6182A775049FFCB90225FAB3AC30 +:104A300092057643D1796E6FA805BEBFB6D6598E62 +:104A4000EB449AF0CB4E8979BBCF9709BFEB800E30 +:104A500058F64A1CDE0F326CD46EF63B25D617771B +:104A60008962477A67E7B1880DE8FABA23740AF5D4 +:104A70008683E9B46E672F0A31F42FD63941E5A158 +:104A80001D5CEBD45AE0D507A4C116B46B8D7F4FE3 +:104A900062E8D7644D1C6CB919DADF073BA805EA58 +:104AA00055EDBE1CB4C3BD875C01B43F3C99850481 +:104AB000DF8AC80B47F0BD12D02E36E8B7F291134B +:104AC0000F3BA07ECE1E6700E171834C0D12FFC428 +:104AD000D2D0EF385759E10E023FBC5F539DFE65BF +:104AE000F102C664669872418E421233146B3D33F4 +:104AF000A19E93D0BF28AE3DD73328A15EB7439F78 +:104B000056C0AFCF3E7018E1F77D8BA968F7EF6B09 +:104B100019A8C2F6C82D8CED2C47E51EA5BAA23007 +:104B2000B519E89ECFA01DF9A091A906BCBF4B1EE8 +:104B3000988B72788EC0836A8F3DDF5688F27D88AD +:104B4000DE0339CF6C2DB7C23F94867C7FAEF2690D +:104B50001AAE03279FBA4045F81B99BE92E4FC9019 +:104B60004B4339F7B8A22D687FF63EED622D204702 +:104B70000F3A041D1624111D3A510E80FF93500E5A +:104B8000401EB29D8347B0FFC9796EEA3FF5D02F32 +:104B9000AA15F87EB9AC0CE0247A9F88527D68BFD4 +:104BA0004B031401FF44FAEA70BD2F740676037DAF +:104BB0003A52E3F5727526E7A3EA4C59F0F16737EC +:104BC00025C3FBF5868BA17CE8F5878F21BDC1CA83 +:104BD0006D403907FEAACEB4F057FDC062E2AF6760 +:104BE00086FEE917F90887C602E887651584DC9711 +:104BF000A2FEFD998D21DFEFCB0F133E7B6B988AD0 +:104C00003AFDFD9A1765AC6F5099CA50C7B3411968 +:104C1000F1E885F64EACDB078FA05C7B7BA6335CAE +:104C200087A71E7F92F0FCF20D60AA003DBC2CD439 +:104C3000EC403C6A2904575611D79FBD3B4A22CD10 +:104C400080D7741C12BFFF981C413FB2B7F69EDF9D +:104C5000DF07F58E9F4964AF7DE26888E6E2F78C56 +:104C60006932CAE34A8187AA9A28CD7315F0810B6D +:104C7000E6B12AAF6122CA417A0DACA6855432D47E +:104C8000A3AB1E4B8AE0BACF6679687D9F7D488AC8 +:104C90005E8674EB76929FFA7E398B5E8672BE2EAC +:104CA00089FCD4B59FC77CC1B2513D31B9D21995A9 +:104CB000D3102F46FAA5F05EE4055B00FDEA5C3BED +:104CC000FFBE0C066233F25D73D92D756C945E0FD6 +:104CD000361DDADA867A8C05FDA89F479E3B82B5A1 +:104CE000E8CFDC73FF9C791E78EF413774B918D098 +:104CF0007FFF1DEB8C32E40B983720A557D8AFAC63 +:104D000034E45E60F1DF9B107E8B3EEE758B7E930C +:104D1000436EB26358C88D7A1DF0F6FBFBD01F3F7F +:104D200024055A60BE936E7CB1084497553DB55832 +:104D30001AA2F8822423F2BD4F7DC090FF3FC9081C +:104D400049C114C4DB9013F97FF6A1C5FE210BFF06 +:104D5000F576BF5B80CFF7676A84FF93024F267EAC +:104D60001E700ECAA83F8D83A03F018FBD57BF3E66 +:104D7000FC08AE1EB8BE8089F0486606E75B7BC8BB +:104D80008FF03CE0147A53CC5F53F97AB22B93DB6B +:104D900013DB059F6F13F0023F6FCB84522F034547 +:104DA0000DDF71F95804ED64C7FCB9C69086E3AB1A +:104DB000DCFE50427EC403F4DF85FCAF9705FEF4B1 +:104DC0008887FA073AD9687FC0931FF51DF0DB7713 +:104DD00070BC493F93349B84F8B983F8CF0B7803B8 +:104DE000C9FCCA784AC4CFE4451B5C0530EEC73520 +:104DF0007C1E530F7EEA1B2F5EB8E2531B8B5E6056 +:104E0000A90BBC540FBD5054807CBB2F673ACEEB2E +:104E1000FD138BFD123C7F2B93FB7FC399DC3E017E +:104E20003A54233CC6358CED46FB2B255064E59F58 +:104E3000DF08F931F10F9647D1F553ADED1CFF0FA7 +:104E40002489F6D2D3BC9FC6FD773639B19DD3ED08 +:104E50009337EE25BC7A2B61FD2944F8FFB31DF58D +:104E6000C0C7463AC375BDAA92D365D5E30AE179B6 +:104E7000D5087E879C885F130FE9873E70E2F3D9DF +:104E80004F019EF1B91A7AAD83EB6586FAE4E4E747 +:104E9000860BF1B211A40AF9BC71A8EAC8121877FE +:104EA000AFAC056DEA287EAA873EF0219D36D60E6E +:104EB0004CC1F1D68AF53ACF1E6D46FD232B5A061A +:104EC000AE2775226EB10E601A2C233B84D643396F +:104ED0008BC355DC77D75CD4D3EFB35415E158FBC3 +:104EE000948DF4D9878F4911D43BEB3E0FBFEA82F2 +:104EF000FADA4B9886F65B7AF487E16AD243B68099 +:104F00001BE6B7F6BEC089365CCFF725933E8C34DE +:104F10003152DAC8B93A3C5F01F601FA43AB8CA1D1 +:104F2000390A8CA3B5852EB011BF0E1CDB86FA3E64 +:104F300094A2A29E2D34603E163BFA3616213F679E +:104F4000FA7921292B1BE35BC69B47713EC5F7F815 +:104F500042008796C5F9A3BDF886967938FF276D7C +:104F600014AF78FFC90768BEEF570ABD19DDFC6AA8 +:104F70003A7C273DCFA9B92DF6E7FB4F4D4A0F8D5F +:104F8000E32798A509C7DAFBB83E53B3D63D6F00B7 +:104F9000DEB2B254C25BBAC1AA313E9DDE0625E93B +:104FA000D7061FCA1FB337F8165AF8C7A48B5EA1DD +:104FB0001D1A22B955CB515ED615971C7C15EA0EE9 +:104FC00055257B2C3F4B167A41CF4778DF6B62B17A +:104FD0003660DD3F372931D4BBEF36A95437F91C91 +:104FE00096DD39145FAA5725DCAFB8D5CEDA5CE080 +:104FF000AF4DCB8A9707B35FFD8AA043F45BE4CA49 +:10500000C47EF17261F6BBA56164BCA3BC9F589FCE +:10501000C57A73DB80146BB3C4616EDDE38EB55962 +:10502000E390918CB8FA889D2ADE3FA31F0D7A1079 +:10503000E3916E3E04C68DE8BD0BA684AAB3302E64 +:105040005433E8C470CFAA1EA91A5D972B6CF3D312 +:10505000510E5C8CDBF989E33ED0A430C4DB3AA06E +:105060002796912695CA779B7C0CF1DAD3A451F947 +:105070004D81B74299FB193B843D1D11F45B28F02B +:105080006096667FA4B813F8CD2EF81CA6A17720F1 +:105090005DD16E01BEB6B7B553DCD56E38297E073B +:1050A0007AFC9B485FBBCAED63E8CF886F18E86164 +:1050B00028FDAED077B0DD3B5F31B0BFB726E6C488 +:1050C0007E1B043D4F8A75D4846FB998C77231AF87 +:1050D0003F64687CDDF079C8BE77E5190CF9DCAC7B +:1050E000C37A55101C277E6EC1FF10EEB3A078A1C5 +:1050F0001F6FC1FF9D88FFDBC227E6F8D1EE990F35 +:10510000A64219E23F85F4C547358CE4EF74F44DAF +:10511000A483773E0B237C91A610E3FCBD829EF70F +:10512000343550DDEF0A36E1F7CE047F5B165F4F72 +:10513000D799F4384B38FF90115C9FC5F77908FF79 +:10514000492CD88C767652F086C36D004FA1666FDD +:1051500060B3B01EAC42FDB854571AD0CECD5E1429 +:1051600061E877D4F7480CFD90A460680EC6A336BA +:105170004D09F522DD924A6344D7F4CA01A715EF21 +:1051800067E6FBB3EB37DCA451FC75246EDB62678A +:10519000AD1518C7297D00FDDE8792BF47F1DD46BA +:1051A000C3A5BA3CA49728FEBBCCAE909E9DE00C54 +:1051B000ED45B8EF7D60BE8131824FEEBF388AE5A4 +:1051C000ECECE03E9CFF8E35ED0538EFBA74ED1443 +:1051D000A39D07D755BFF2D13A427A9019BF9B875A +:1051E000FAAE2E99D7BFD633AF13EDBCBA09DA3D6C +:1051F00012F2BB67689E07D79D89BCDD87ED182733 +:10520000CFD20F6591BC3832DE51302E0DB08D03F8 +:10521000E728BC76F68EC5CFDAE26182AF0111DEF7 +:1052200051FD007CF9AC952FDD9313F8B292915D9E +:105230007CBAEF3C88FC588C7CA95099BE08F812C7 +:10524000ED3FA127800F0771FCF4CA2FE7C37F173A +:10525000FCF78AE0C7CFB284FD26F8D02DF44AE2ED +:10526000F7DF34F957E89BC4F5DB6B83F51BE039B6 +:105270007CE3A337A29DEFDA535284F03C9A1FC916 +:10528000C178469218B7D301EB0EF42BCB3B759344 +:105290000672553699458AA98C1615023C1ED1AF67 +:1052A000C711F063BFA9F3BD4B705FF433F1FD4646 +:1052B000D650938C7608F85FB82F90E8FF99EB589A +:1052C000E7B9BD64E7AD4B8D87FFB311B8CDFDD312 +:1052D000CF6AD09FB3A33FE7417FAE2ABAA422CEC4 +:1052E0009FFB0CF1EA5483E8825BF4E03FC61F9514 +:1052F0005941A7277B549FFE378CA77A381D25EE8E +:105300008FFC63E3BD9B6AFAE9DC0E9BEAE4FE3F97 +:10531000AB662AD9B701EEFFEF02E70BFD518BFE1A +:10532000A4F5FF41B40B885F552ACB3CDC0F8121EB +:105330008E3AA7E3783CEE06F51EAC9BEF97791CFE +:10534000D46F6AD248BB1DD7F7D1764E37EF2216FD +:10535000B77E7BE62B71F53C85190ABC9734598DD5 +:10536000B303FE51BCDC8B2FE2BF2F631487FCA478 +:1053700088FB7B6BF34BCA0D6DF47D581F2F47FAEA +:10538000823D47EBA32997A63C025E9D7E78EF1DE8 +:10539000780FED2C67F80EB2073B2F510B516ED6EC +:1053A0007BF83A991EAD25BB317DB21C7103EB76BB +:1053B00016EF54901E9DA5456417AEFD3C42FE4E6F +:1053C000E2FC4DBBB013EDC21CC6AEEB99F2AFA828 +:1053D000FF6EF09876614C47FD98DE0625ADEF7FB5 +:1053E0009F5DB8345C18671786C47CC12E0C211FE2 +:1053F00016F77DA4207C9DC25EDF585AFD26EAF98F +:105400000F27737BD71D9DF7663AB46795727B179C +:10541000D66905F9C90D7A3019E1BC2FC6FED9430A +:10542000FB3A0DBB55E42B0E4F7A6503D909EEF913 +:1054300061867E4D56303449D6C8FEBE13F16DCE1E +:10544000DB333FDE4E7F3B819FBF64FD27FE1D8126 +:105450007F41CC87DF8920C714A07F31D38FEB6ACF +:1054600027B8A738DFCEAB7B7DE8D7AC7324E24901 +:105470009B1E8F278DF6BDD6784CBF5A5FC3E5DFE4 +:10548000C2C714A75346F995EA6A42FD1F5C97BE4E +:10549000E2FBE92C64F860EA4BBA3E88DE27E25D65 +:1054A000685728E14D3ADAB9C0EF3B109EA4BEFD23 +:1054B000A42713F9DD3991AF0FE6F88704BF1CF27A +:1054C0008CD8A74CF352DC94EC39FCEB82FA39F817 +:1054D0008F22E24F19FDF8D2A30A43BD7C2E6E50F5 +:1054E000C0BCCE635119FDAFA96C88EAD31034A8B3 +:1054F0009783FB8BF50B58ACC069C37DA7683BF263 +:10550000DD7A357410F9F3D4E6C13725787E4F4E35 +:10551000E85F86E0F9931EBE0EA6B000E5BBA85872 +:1055200002CF2C5152487E5997E33DEBBEED4FEC34 +:10553000FAD3A46F599EFA4EB2953EC6083CB8FF06 +:10554000E260E65F44E01F78C4B21FED18CA5882DB +:1055500076D9FD682F819E9CBC87DB03ADC7258A69 +:10556000B3F4A0BD447614A3E7C68D2CD28AF252C0 +:105570001038A1214D5FB6913F0E0AB910E34013D8 +:105580008E27ABF81EC8F185D759E4B815E4270A71 +:10559000C8CC9CAB93FC7C92CAED5AB31DECADD742 +:1055A000917E52DAAC107EE7DE6149433B396B7E77 +:1055B00080ECC4CC69DA0718DF67C65D6467659E56 +:1055C000A3EDC77AABB3E1AAB9C0009917723D73D6 +:1055D000AAE71ED233EF783482D7A6809C2289179F +:1055E00071B9D5155D42F9B14D66814E6DF4F9077B +:1055F000E7EB7F24BA08FDD451748B3F6419C73898 +:10560000CD7B995F9F1F453B788DE047BDA6818D7F +:10561000674F3B3CDC8FC1F8BF87FC9A20D56D29D2 +:105620001C1F980E23FC9ABFE13C5CC75D44775772 +:105630005E3C1F278E6BCFE67C1CF5E85FE0B8EF81 +:105640002F1EBA07F90EF8CC963D03F76D431351A0 +:1056500055FCC511FA811D9E3F66D7EDF81CF8C7B1 +:10566000919D7D7AFE1991432585F6C9968CF0D1DE +:105670007427C65D967E964E71DF25CCC93405FD34 +:105680000226F269F4634F5750FF20CAC992E3F330 +:105690008EBD01787B33D7C630DFC9ECCF447F8322 +:1056A000E973D0FE5932DF4572B5F4F845EDB8BF65 +:1056B000AB16D91B2434B8C3AED1FCA3A2B8F7E310 +:1056C000F272687E8563C767D6BA6DBC3A97B7C475 +:1056D000E74B943423F9FCF1C6833983FC2C15F293 +:1056E00063BE3F2C0D4C41BB7E56F696AB3A00CEC6 +:1056F000BD9983390AD42FCE7EB8B32D8FB17DCD1D +:105700009C3FA17E95518975ED265C3797DAD9517A +:1057100087C5FEA8CAE6FAB92A9BEB036837B0FD35 +:10572000926CCE9718E3CA83FA522CC1BE78EBB1C3 +:10573000EA7F9BA29D5E8F2E097FE1D2C68B33E864 +:105740004CF3CCA4942A0EC7B180E1B2A15E08D27A +:10575000BE8113F8114B05E3E19390BE0354A6B04C +:10576000412AD3588C4A95A91296992C40A58705B1 +:10577000A9F4B2062A7D2C4C650E1BA0328F0D5267 +:1057800059C062546A982967C9B328C29D56A84F68 +:1057900066412AF71572FF6DB8D9CE767AC89F2375 +:1057A000BFCD6871A9AD1EF2E3A8BD11FC36CC37A0 +:1057B00035B28BCC3C9C17AE80F67B7F6B2BEF24F5 +:1057C0003AF1BC9C44FCD894495BDB2C71D7D61FC2 +:1057D0002A3591B251FA98CF8D6CBE4E1842DEF642 +:1057E00035075E0DE1BC7EA804300F696F268F8BF4 +:1057F0008EF6E7FDBE27E83979D1A56FA2DDF6B1B7 +:1058000091A6A13D723A7A9D3E0E5C5E80EBCF3050 +:10581000C681E17BC327AA0A24F8DEDBDD3F99823B +:10582000F160B02F9CB87FF0F6A6578A489F449D40 +:10583000CCEEB5D0F79A00D311CF1AACBFA562FD5C +:10584000CD3DFBF57776B6BE1EF5C5733F4AA27D0A +:10585000A13BBB25F217993DD08EF91C75C25F495B +:105860005CA7946CFD7E7CCFC40F53F5EA3FC0FB70 +:105870007B5F9E1497BF12C9E676F5BE226D15E2D6 +:10588000DDC403584D75EB61FCB7BACF213A9E09D0 +:105890001F6F6DE2F850B243BB48BFD93592CFE7D6 +:1058A0007E346502C691CF348FFDFFCDF340714049 +:1058B000FD69EA8BBD97060A30CEBDB4CBC5F30DAA +:1058C000C257E8567C2D0D3FC41A33795E89237385 +:1058D0006C3B63F919A8AF4DFBC994E7CDF84FCAEB +:1058E0008F0929B88E7CE4DBC9D2B87EF28DC7F768 +:1058F0006DC2CE7C48C44FD764B388753D5EE3BDAE +:10590000F15DF407943CA69D03F851EC1C5E5774BE +:10591000F3E569E89F96B2728C2D280A7F7EF1BB71 +:1059200011B6D8C2FF497911B2EFCD3C8511F912F9 +:10593000FEFB9AFCF87DCE3F0BF97A3BDB49A5A331 +:1059400035D080789AF0AD00ABB3F4B3B3EAE34856 +:105950005787AD9CDA7DA131ED43BC9DC7F3ED6A5D +:1059600080AD4CB1B6CF7B3BFB2BD8BDED2921459B +:1059700085EFB46BAEB9E43F2D9D1E17878A0ABE32 +:1059800019951F4E97354D2C80F6934DC40781A075 +:10599000448F75D93AC37C6E985F8D01F5D6E29934 +:1059A000BE14CB3C5B3344DED06717F8AEB3E2EFF6 +:1059B000F30B5E0DA1FE2B7652BEC2B1D439E9C302 +:1059C000299CCEE8371579E3F7093B9BD400FABF51 +:1059D0006B9B9480D5AF18A1F3944789CE2E95D3B5 +:1059E000D9651FACC6F5187C171ADF1EFD530BC610 +:1059F0003BEC82DE2E41EF694F25D05BFD727AAF22 +:105A00003BBC4EC5FD107B4AD1741E93D2699F5694 +:105A100051B503E8A7E48B793B5423AAC1F71CBA1C +:105A20001293555C7F60DED67C6E06F058E8B2CEED +:105A300011F661DEF4BACF6DE3DA471F093DECF4ED +:105A4000001D2CEBE0B7CB42E778D10E7BCA30D0FB +:105A5000BE773E1E34C80C4A39BBF8A2C7A52B98A6 +:105A60009FD97B3DD7FF6D6AF0AA54A867CB5AC473 +:105A700080210EF74CA77A77477200FDCE7D52E069 +:105A8000AA4948B7723BD9CB49821FB2A71F257FCD +:105A9000BA37C7CDF345C2DFA0F7C24C19C4FDFD2C +:105AA000AE9EE19A1428FB01B1B87EF4EB47D4CB4B +:105AB000D10EAF6401DC66DEC4227D4B2C71BBBB12 +:105AC00072781E4AD7A76FD5DC8CDFEB70D1FEFE53 +:105AD00091757F9C970AF5F592F232CE67FD93435C +:105AE0003598C770EA22A713E30661B0CF10FF1BF9 +:105AF00076386B22291C4FF8BDED77077777168E25 +:105B0000D6EBCA1652BDDC67A7FE0F372E7CE81C09 +:105B10001827B581A97CBF8AD9791EB35946156B60 +:105B20003D119F93441E50E2F33B73B93EF0752D37 +:105B300075237DD67755C8E8E74EEA90242CD546E4 +:105B4000598F5059378FCE85D454DB259897DA106A +:105B500090ED30FF555EBE6F33A97121BD97DAC35A +:105B6000A87FE277567939DC93BA42621C99647552 +:105B7000128C43DF3BC3FBCBBC5C5FF5323617E1D5 +:105B8000D8EED09CB8CFB17D5D86648DC77C4FF0D8 +:105B9000773F8C1F25391940638A3D3C52D7685F97 +:105BA000B9F3BE970F63DE58E7DD1CE5E91D8BE70F +:105BB0004D867AFA6C99D60F558FD4E03CD7973A38 +:105BC00019EEAF6E9778BEE3868B9C5F47FA4CD296 +:105BD000810E129534DFEDF7DDF00DA4F3A49EB035 +:105BE000DF6699CFBE090ACD27FC2C1866603714F2 +:105BF000EB4E491B477ED40A26A17C99E325B65F6C +:105C00002DE8945F7F3FC54BD41E46FBA1AAC0D7A9 +:105C100006C790CF6B19F7B5099C3F4D3E4B1CEF63 +:105C20005A41B7FCBB98C4FDA228EDD767C16B14DD +:105C3000A7FF9A93F245403F513EF486195EF25316 +:105C4000B78A3811ACD3BE0553512E18E969556F88 +:105C500078AE10FA857B8A28AFC4FCCE9E099C1EC4 +:105C60006B75796E84E2C2805794AF75551E039AA6 +:105C7000E48EE6E6B7CBB01F8F07F62F0EE4201FA9 +:105C8000ECCA88F9111FDB2F7A87E22E1B66BC4C09 +:105C900065776A0AC1B3569FDE80F1DBB529F54806 +:105CA00071CBF738DC3D722407FD845FF47E737D91 +:105CB0005B25061F19F90581FE25EB31FEBF49352D +:105CC000F961C88DFC7064F6B082FB761B1AE5247E +:105CD000A4CF0C9B2D09F961C38332C37DEF4D2105 +:105CE00033AE3440FD3748D2F325A81FE6C9A46778 +:105CF0001EE8A9AB3A17EA0F30F543DCA7C8BCA2EF +:105D0000AE0ADFCFACF27DC8303F297FE12F500FC4 +:105D10007A6B86589D907BB41BBDF80F0DF11E92D7 +:105D2000707DC004798ABB56869AD1CF071ADC8170 +:105D30007157A40BE54B2DE1F148A61A55E8A3ECE9 +:105D40009654DAD7EBFAB4F5B00DF510E8738CA3DE +:105D5000ED4A8D45296FE8623960707D41718A7422 +:105D6000A162B63A62A4677649ECB7945BCA787DC3 +:105D700078319B8479A5DEE0DFD86478FF691BFB6E +:105D80002DA3F31521FADEF62A85EC4F6FD7291DD6 +:105D9000F5DC4536E565DC87F20E7DC050EF7E719F +:105DA000B9720FF6F7869C71E759BCC02F283FDE09 +:105DB0009E76CA83F606924E2C4923B8285EC4EC20 +:105DC000C12DA9044FBE8CFAB84DC839B3C7F4959C +:105DD00038AFA7CF21BFD523EC0D78EEC775B8CD6E +:105DE000E44751B7B44797C37BDD17F1F7CCEF0C0D +:105DF000CFB8E7FDA7F1F983CE720CF3A757BCFC2F +:105E00005DCCC74E3FFEA7CF313E935E133FEFAF51 +:105E1000E59AFB0775146FF71E4F8ECAB80F7AFC10 +:105E2000B6F9F89EF7F1C0B7A93CEE3E41F9F5D6B8 +:105E3000F7419FE6E5079D13B2719F6219C9D90822 +:105E4000BCF0179849FA8CFEC27AE62D7B3C981775 +:105E5000964371D60A1FFFAEC78C436F9438DD0599 +:105E6000DF2C41A6A77D0A9050E4D34B79BECEFE2D +:105E7000A332C33CADB7664DD9897AABFB89988113 +:105E80007E835E087EFEC5B83EC674941B63714A6D +:105E900008F31D13E15DC11A48CFFDDAEF37F3397E +:105EA00069DFC2932CE60DB48ECE243F847F1FEAB7 +:105EB000B297448BFCD4D7FD85025F51CA332FE8DB +:105EC00029CAA4754D659C5E82AE30BAD2379DCA90 +:105ED000B953A12CF6713DE14F61463AD8E37E55A6 +:105EE000A6733F1BE430E52F1A0B813732F87C5044 +:105EF0000E72EB358DF29FF10FE6B352E2DFB7F988 +:105F0000B89E4CC91F5270FDF6AE66EA4E425AB8B2 +:105F10007D178C93CB546D4B60F43D9207B4F73BE7 +:105F200078FC03D484F1858CEFC7F47311AF12D3DE +:105F3000EE07FEC9698CC7539CFC621CB43E741802 +:105F4000F5A6CFC6341570E27FC415D73F5D5FD686 +:105F50008C78FFEEFBA91AAECFE989F18E04BE4919 +:105F60008C932C8FB846EB6C948F1C6AFCBC12E3AC +:105F700028FFE19747E29148373C7A88CEEA0C3314 +:105F8000CF7A26D727537EF89262CD97DAF0128B1C +:105F90003801391BF6D85994E429CAACE7BDD202BE +:105FA0002C9A0483A51D351620DFA7751DBC170785 +:105FB00037D707B35FBEB0B7FE3481CF2375D67F26 +:105FC000BAAC7078D282B5BF44FE9EE924FBA9D555 +:105FD00031D85707F5D627521886721ECD88E4DCD3 +:105FE00009E35D99C3F96364FD295D24EC7C9E2F70 +:105FF0003925439379BEE4502D9A966ED9538E7A03 +:1060000064AA3E548BF6D9D4C97952AB86FDF9F90E +:10601000C4F58C5D85F69E01F61EEE2F46A20B6B35 +:10602000111F5B3BA44CC4CFD6D29276DC670FD74E +:10603000331959EBA1097C5FABBA9EB951AFF71D7B +:106040002EA2BCAAB03D568BE30CC038785E64FB30 +:10605000F5ED9BD1AEDFF09A8BE264472EEA6DC07E +:10606000F97515A7308CB3763D193A47B5E0878DA1 +:10607000D86F864DD86F367E9ECDF08D67C7A54C04 +:106080005D28E3F980893DD16811DA2BA0EFAF0CD0 +:10609000901D5085EB92A6C36A7221D0A372C840AE +:1060A0007A69B3785D0B403901CA0E89EA59B6C8DE +:1060B000428483EDB513DE596905E17317D0BD64E1 +:1060C0001A63B3AE1876CB71F36CE6786BD2F979BC +:1060D000AB526EBFAF2F939342A01777CD36D7D375 +:1060E00041B2B7CC38D3C3C601E51A18BAB34CD6FF +:1060F00070FF26F5EDC87338EF8B86EC5C0AC53867 +:10610000209FDA78FEB3E907ACEF58506DE53FB356 +:106110003C57E80D531EF245DEBCD97E50D81FD344 +:10612000843EADBB2B4CF693D6C0EDA7AEB222B2E7 +:106130000735D3DE6D10F6DCB95EB2533BAFA87302 +:10614000223F1457822385F86E58F67DAC4FF3D961 +:10615000847E1C5028AED9B0E28B2F40BE260A3D6B +:10616000A8AE0E54E3B877DF36FD08DA09F95D030F +:10617000B980F991796DF1A6717BF82E7618DBD193 +:106180009E443B6052FD810EB4F3BD65328593366B +:10619000D96306D637553215E54115ED6AD901DCCC +:1061A0003EB38CA3D27C27CD066F0EEDD2FA0FE959 +:1061B0003D2FBCA76963F1F6DC84647A6F0B2AB0CB +:1061C000ECD1F9A789F9E7CF0A10BECDF917E3FCA6 +:1061D000D9E8FB7DF8DD6CB47707E3E6DFDF35F067 +:1061E000E5F3D707A55B61DCCD62DE4313F8F75317 +:1061F0006739E3F4DB99E2C97B33B9FE32A60B7B46 +:1062000028B1DD1E35307EB917200B079025E3F548 +:10621000E28A9CC211BD887166DA9A27FD10A5F347 +:106220007D9EB441B27B5935F8E720FA298F1D6174 +:106230005F477D09F65D3AC865EA63B2E102BD9742 +:1062400052F19F7171DF15029E31EB0F8B0EE278D8 +:10625000B9B39C5AA7259E3EB2FE809D83F6E3C843 +:10626000FA94B01EFDDDEB0FE3FD15664411DEFF71 +:10627000EEF5E74CEB0ED9AB60145CFFD0C75DB810 +:106280004F84B930B8DE974DD0F83AAF321DD77D84 +:1062900073BD77875D645FE5A3FF93427E099DBB75 +:1062A0005641DE6C16BFFBF004EE071E9EC0E3F6FF +:1062B000EA5D513FE26F8B5713EBC38022CE0F8A0A +:1062C0007C0B40A5C5EE3D581523BBB65762B19D6A +:1062D00080E796834924D7E12A75A78BD3A58159F6 +:1062E000F8E1E127D8168C13E8120B4897E2C34176 +:1062F000B2A7FC9A9DECE0B063D0588EEBC4E2BC30 +:10630000505B00EB8C9F039D9513C1F3251E5B4CE6 +:1063100047BB8E5DAED0FEB64937BFC4E97EB8D963 +:1063200049F199BE59493B31CE5BA5AB5F2FC3F113 +:1063300096CA14E7DC2719EBC8FEB90FFC0C684FAE +:10634000AD8CC7FB3216247BED19FFB9047F2E1BE1 +:10635000922868C962B44E69E0CE63DCC7B4DB96AC +:106360000B7E31ED36535F8DD8776C50413F424301 +:10637000BB0DE7A80E2A78AE26FC605106D6EB844A +:106380001E459FA67DA610196E8792FF68DA77B921 +:1063900068DF655239772A943FF773BB2C17E90DF4 +:1063A00074CF45FB2E0DEDBB01B2E74CFB8EE64FE3 +:1063B000761A9B7EFF45B4154FEFFFD4CFF5788159 +:1063C00078BF605612D987DD3E8EEFDE108BE03D40 +:1063D0000DB0FED378BEA04AF92A8972B62F93CBAE +:1063E000592FA8A70368FF86F8F77CB70328644FE6 +:1063F000C4D852D477EFA56A1467DF1A2F87138D9C +:10640000783DD5F69A338E7F721BE3DB13E5AC5BE8 +:106410008931F46B814FFC9B78292D8032DD17AADE +:106420000A929D1594E9FC22BEE3C53C633E6FD5FC +:106430001E9EE386794D0423AD4D453E0E3BE97C1F +:10644000DB1BC90CF9B83B8F1968F7872F917720B0 +:10645000DF99EFAF10F43DE8E7FB352BF5F663E885 +:10646000677EF7F7C90CED8C6EEC07F5EED56C077F +:10647000FAE3FB32592DDA2FBDB28BEDAC20FA3F97 +:1064800087FCB9B16302E9AD62A436F05777650BBA +:10649000AD97BEBCD85CF4FBBCC067DCCE1EEC4044 +:1064A0007C4C6C04FC4B64AD0BFF8CC355900770A7 +:1064B000529DC5C1E91370CE6C3124CCCBF68293CA +:1064C000BC13E0F4E9F7DCCECF2D733A9AFCDB9DE8 +:1064D000D7706C52058D4FF6B939CE2DD88EFA6A29 +:1064E000B521211D7DA0EFD01FFD91F04B6EE96914 +:1064F00068C7737C9F9CE4CFBB954105E971F8CDDB +:10650000D709CEFE4A27ED87F7AB9CAF7677487464 +:106510006E6537C087F5877516014B8175377E2804 +:10652000E1FA3E316F681ECEC302BF82E3D4192A5E +:106530001B89E7CD247E26F8B4BC81665A1F19E773 +:106540003F661F68C6544B3594477E2ACA953C93D4 +:10655000F89EFA17E803879758E0003AFB894F54F2 +:106560000E6FBA80B75B1D9270AFB21BF8D6807108 +:10657000F7CB7CFF6545821FB27C4F7CDD571FCF78 +:10658000AFA3FAD0F821E9A3376B92703F67B762E7 +:10659000B8D16EEDAB284AD304DFD620DF26F07BDE +:1065A000951E7363FFE1D51C5F11C017DA23DDC6AA +:1065B00030E1CB427F6941EA287EEA47E433EA2CA6 +:1065C000B5C867BD6EDC81F437E13EE5E3748C54F9 +:1065D0001C71227D115EC4C5ABC79268BDD0746DBD +:1065E00087D0E3A4FF3591878DDFAB491DE5F7BA6E +:1065F0004A4674ADCB03FE467A343A35AE3F18E5D1 +:10660000BBA5AF5675A29F95AF8A10AF9163E8D72F +:106610001AC09FE83F9BEDB70939BB451F24F9FA23 +:10662000E4CD6462EA03E847CFC0EF46DA97578CBF +:10663000D207E48CE4B5F75299EB2D95CF6BE36A62 +:106640008DFCF8EEBCC129C847C3554E1DE5B9BB4A +:10665000F2801FE9EB438A7BC6933BFE3EC81DE5F3 +:106660007DF74B208738CF668A218DB417F4F076FA +:10667000CD843B64C2CDE5B6B8229359ED935B85DA +:10668000BC25EAA35B2BEF277D84C915D5BEB1FAE3 +:10669000E6D6D5E163CB709EBFE77858D138102796 +:1066A000772B4307EFA57D3916BC0AE33E5A1B8BB7 +:1066B000E07EED6EA16FC21D2E0DF55158C85DFF35 +:1066C0006A2177F53C1FAB40F0D5083F25E8076607 +:1066D0006F388676A986F614E0B6FEF1043930806C +:1066E000AF60FD59DEF1139A473FF035EAB36155CB +:1066F0004BC3EFFB2A6586FCE1CBD3FE0DEBDE1E20 +:10670000C013F2835D4BB3911ECE6422AE41F26A98 +:10671000CAF7C6BC81C348FFDE10D75F20DF55181B +:10672000BF52DFCBD7304E77CB63F1F3E85362042F +:10673000AF06FC67105DC43AA0717C4E14F04CD4D7 +:10674000F97CAB7EFF5933C6B5C2C047B80F3F4690 +:10675000BE85DD07E48E62DE46EEEA787B61C43EEC +:10676000B01BCF23FD73577B3593CF652BBDD9C0AD +:10677000318CAF2F073870DEC3B3068E21FFF623AE +:10678000FF5AEC98E291FEF172DC9FA75D8374EDF5 +:106790009694C116E41301B78CF382FFED7E49BBDA +:1067A0005F023F73F75C9684F7A9F41B4748EED36A +:1067B000F1A81AAECB79036E740DBD2199EED931D3 +:1067C000E75B60CE57E4D3D63772BC5CF6D96FE690 +:1067D000A09E2CC0751BDEDF107849413DD5DD71D0 +:1067E0005D35EA6703C69D81EBE44BC123883F76A4 +:1067F000F26A2DF5629C6FFCFABC2F735099CCE5C0 +:10680000927FB727DE2E3E3474E73194BBDDBAF2B7 +:1068100061328CB7B1479651AFA9066B41BAA7D583 +:10682000330DE30289F6F3CD7DF1F6731AD8EB3818 +:10683000AF89BAF201C68B37BEC4683F8A75240798 +:1068400092C0CEDC783C89AF373D5204F75B0E37FF +:106850007239D8DD27D1B90675753009F1E39B256A +:1068600033FCDE868A0F25A4D7CDEB6CC43BC31D59 +:10687000FFE444BF7B5995F241B23AD65E37FD033F +:1068800013EEE509F56563F27142128E970A70E323 +:106890003A757342BB37E17DB493F15E10AFAEC47D +:1068A000901EDE3EC709BC0F2BB1DF4509E3A426CD +:1068B000B427FA11BFF56923F6A73C7374FD33F9C9 +:1068C000BAD42FDA053F8FE82316E6F78A88E72344 +:1068D0007602669E4E42BB83D1F980277DAFCC37CE +:1068E000F2808F6018B45F1BC4F70AD05FC91CB573 +:1068F0003F7345FB0AD19E2BDA4DFB1675DE116FF7 +:10690000BCBDCD2CF18165BF5E9436155EBDF90529 +:10691000BBFF5926E2BCF0FD5F6E7E7F3EEE4FDC92 +:10692000E8E37948A65DEEB1057E3B1FF9769783D3 +:10693000F68BCDF1EB12C637E3B07FF0F37B72FE3E +:106940003878A717EF4919B5EFC78FCB9688F85C51 +:10695000C9042DCEBE37ED90942AC6F94F77469ADA +:10696000857DD9E21DB5FFEB4CBA28831DE83F6C4D +:10697000E895555C47FCCFCA9B2579B4BF39DEC882 +:1069800077946818E763F65F82FDA15DBAA154E8C9 +:106990000F16A17DDDCCC13E3CB2D55B3DB2DE49D8 +:1069A0006CE6A8DD8819C4E8EFA4B5B128F25B95C0 +:1069B000881776BFF129ED1B6DFCFC841FD7897009 +:1069C000E33BE4AF45D6004343BF34C349F1C27350 +:1069D0009BED78660AED491E5798C1F8FE977D88B1 +:1069E000FC81544008F27DD7A736F26F7C154374C2 +:1069F000FFD6455F0396BE88EAF7A19D927ABC5DFB +:106A0000C2FB78C07B6D77F9C98FD495E9BCCC0007 +:106A1000FE98953389C73B8E0765D45BA9AF36E8EE +:106A2000D6B829A62AB04C2A8F62B9AF2A541BE4E3 +:106A3000CF0D09C649BB9019781E844C273E6E14B1 +:106A4000CBBE998CF218538F8764954A4D57B1DFAE +:106A500071954A73FC0D33F9FBA63F3D39273E9FE4 +:106A6000222D347E3C43BAA1631EEAA77EA407967A +:106A70008B8709FEED8D809872F8CE6A79B1F37C30 +:106A8000FA0E31E1B2873E5A8FF29A164A8C5B9C1D +:106A9000294F70E02A1C37E53159D8CFF1ED292272 +:106AA0005F30319E431C304E1C87E2442814C6E7F9 +:106AB000EB316FC2CC0FACDFF2F97ACC0FDC2A0DD0 +:106AC00091DD88771BE0BEDB69F12FF09A9DA30969 +:106AD000FAC5E337FC1AD007D6B3F08C1B68FFF277 +:106AE0006F420FA5F5383723DE0A81C84EE0AFB4F8 +:106AF00057C3D5B87FB43733F23A9E77371E75D275 +:106B0000FD07CC1EA13C0277490AF7D713F2A66A0B +:106B100072443E5C516825B777789E54F78C12CA50 +:106B2000934AC1FC29CBFD2029E29E9123275EF1E7 +:106B30007D0FFD249137153EE1F263DE5477D5C118 +:106B40002958AE9507FE15EF0F310ED849AF3CF727 +:106B5000236E47DF999FB4C365FA2FF09DF6BC3CC6 +:106B60009A4748F04B5F93C1DEB2C481B7E5ED7C34 +:106B700035AA213EF97D5A46BE4CE3D926D6CF3DF3 +:106B800087E8C1CFFBEFB54728BEBF37AF2CD0ACED +:106B9000213D387E13E393FF57E8234F5A54A77BD8 +:106BA000F0441C2EF5B117E3E2702918874B3B7DAA +:106BB0001CEE5E1BA37C0C66530631CE6F9EE34039 +:106BC000BC19F87D89C3674C15F28E37EA58F66513 +:106BD0007DE52DEEC948CA5C1FCD27F9C265CF9768 +:106BE00040BDD03EE81E2F5EEDAD19A43C636FA3FF +:106BF0004D7BDB925FD87BD7C2F4F1E2D766E90325 +:106C0000251A057E9E0325F2737245128B5AF74FA3 +:106C100031971FE6991AE27E4B6AF8051DEBAC86A8 +:106C200005785E78485A04F3B9B220F4608E25AF37 +:106C300018FD1A9C07E6A253BE9DE0E7C061BB8128 +:106C4000F183EE86CC1D185F3B723D8F636CABF217 +:106C500012DD2FF4727EDB91167F4EDB933CB81968 +:106C6000F525FB9D8BFB15B3A26E6B1E529DCF1DB0 +:106C70006BCB42FFD1598DFD8A993D80F32C36C6EE +:106C8000CF6B78314731E3B04EB1EFE110F92CB260 +:106C9000755F645719E81D4BDE5CB2C86731F9D3E4 +:106CA0003B4B25FE04B868BFA777568E84FBA8BF70 +:106CB00011FC7AAF4DA573FBEC3C59D0B9611AEECB +:106CC000AF27F73865D433DE9A06BA97C0D7E3A466 +:106CD0007BDF4CFA252F7A879521BC78CF2ADE2BD3 +:106CE000527A405F09EF7D8CE731D533D3F372934D +:106CF0009EB3C6D093E42C59D03339BC3F2A8F4F72 +:106D0000CFDF8C47CF5D393CFED9DD25D722FCDDB6 +:106D1000BA93F6F502E25E3B132F69651C2F03D18F +:106D2000858497B4695E82EFCF429F8CE0E5768ED2 +:106D300017136E534EC2555C4E7AEB65E28F8F434C +:106D40007CDF24596F1FA4F3C00ACF5B51C3926448 +:106D50008F9BBF057E5B1C3C7FCE99310E3E045C51 +:106D6000DD01FB5CCA6779295643726B4C994EF67C +:106D7000F025076B909FD2A4C9D3D15E708B7C980D +:106D800091735ADFE4F29B386F6F9921CD277DC153 +:106D9000622ECC4BD0DBABD07E57AA145EAFE1F0B5 +:106DA00027DF25D3BD4163E5B6AE19DB3FC631A46D +:106DB000D3CBDDC8FA8970035C5798740F25111E78 +:106DC0004C38017E77EE8C517899C7A0B87781D87E +:106DD0006F4DF9E7188F2B35BCC8709F2FB5C34690 +:106DE000F1F0C0E10AF29337B0C657F0FBBB027670 +:106DF000B253D2AA1A7E80F3BAD09B147F6E6D1A5A +:106E00001B979EA6DE2BB40FE898AF1411E7C27B48 +:106E10008D033AE677987C8D74A57C33C01BC62B16 +:106E2000C6C2CDA432F2CFE6D3FB26DCF34CB8F5D4 +:106E300078FA02DCA57170A770B8373CCBFD7F06ED +:106E40007EA20DE89C1EF0501E9A3BFCC73EF4E764 +:106E5000C2A54E3A07D2D57380F26EFA7599D6EF75 +:106E6000BB72B4F5CD93E1BB9F16321DF4CDA6D90C +:106E70000BE99CED2F701F00F8226DF630ED57A73F +:106E80007D3A99DA755FB3E4F48CDE53F2BA237479 +:106E900071AE45AE1C357A14F7274D3D69E61DB23B +:106EA00087F83A9628DFB7E672FBD2932EF24DD8D8 +:106EB00020B3EA41B31D469C4B79380663088764CA +:106EC000840EE3B98D5CC682B86F3B9247526F0463 +:106ED000F11E1359D8C589792567E2F37D52F04632 +:106EE000940F4382751C9E6F6EBC7F13AACF2DD169 +:106EF000BA953743FB6DB87E61FED1E5DF5FB09296 +:106F0000E8CFE34FBB42FC9E80B1EB58501E771D8B +:106F1000EBAAA3F3C01FEB5C1EC6CA7DBC3CF80500 +:106F20005F5C897C21111FDC827C50BC627CF9DFB4 +:106F300020F62367E772FF87A9834CDC377307D2FB +:106F40004BCFDB54857EEEC87D332B74C3A18DBE41 +:106F50003782A7E5A7C3136F376A79BB8F857F8810 +:106F6000799DFE67EA6A6F86A6C7C53AEFAD6E7770 +:106F7000CF273C0593C63B67E4AD8948E3E2A7E72A +:106F8000EFC34FE23A91B3748CDC6C44B847E4C66B +:106F90006E50DCA356C0BBE1FA8373492F80FCD04E +:106FA0007E191B54CA307E1879A70FE5D9E8628193 +:106FB00062F86E77454BCE2D683F54042BACF989AF +:106FC000932AC65F97CB7DE6BAAC8BBC04B3642E24 +:106FD0006B3DF1BDBCD3E499C684BECEABE2F97F74 +:106FE0006A295FAFD43299F4DB4054A6BCCAEE865E +:106FF00060B675BFEFAD5C9EFF9A37CBC9F31CCB73 +:10700000E3F34B5ECDE57AEF5F84BC3D20F806F3F9 +:1070100021554B1E00F0CF93C8777A4ABC1E702CC6 +:10702000E5FC539BC83F0972B6ABDBE49F18D993CC +:1070300086C4ED4955D76E42B9F349DCCEE9BD614E +:10704000D90718737843F051DFEA17C38D6CD45E0B +:107050003C2DDF98EB0C7586F5207CA299F201CFD0 +:10706000C037A65CE5548CE19B97E3F8C6C7F5ED05 +:1070700001819F81E88B94EF93AE8BBC86D932C59A +:107080005347F6511D030AC647BA742659ED56C038 +:10709000E33097C366294E0E2B381E5FCEE5784C41 +:1070A00007BA521C5D8CAB961DA078DC7A36F07C5A +:1070B00009E24FE779EF03F601A9DC32FE662FB74C +:1070C000D77291DE3CEFC8CFF709A274CFD71691E3 +:1070D000DFBB25915E4BE2CF698FB1EF85BCFB9999 +:1070E00041F2EE437987F6B43C21EF337BDDF32D9B +:1070F0007ADE17E2742AB41B826E8312E26B0CDD17 +:107100004267B20FB89DE70DE9717AD6D48BA6DC41 +:1071100003BD52F3301F7745BCBD60D2EFFBB92CE5 +:10712000CE4F073A64E5211D52401F5AF9390474C5 +:1071300060A3FD4DFFEC7476AA995FD35BD34276D2 +:10714000D2461055BCD7C91B6B93AE413874258607 +:107150007ED646BC6FA06234BF3431BF73DAA1441F +:107160003FBF99BEBF51D13D0B10FF21BE8E5EF8CF +:107170006A7CBFB985CF7AAE43F9A995C5BDE8E26F +:10718000BD1496BD08BF5763273C7EEDDDF8F7467A +:10719000E72FFAAB7CDFF9B24FCFD0CFC3F3951313 +:1071A000E77FB9E21A7FFE3E3DFBFA8AD1F95FE93B +:1071B0008BEF57B3F8D9EC6F8C37FF3C6019CFE8F1 +:1071C000FCBF5EEAFAF279697CFED7CE3A43BFC9CA +:1071D000E3CFFFBAB9A7997F696C2EDE77FD8D9A50 +:1071E000338C6BE7DFFFE68A2FEFF79DC6C4EF18FD +:1071F000E67DC3E3F3115B235D9BC047C40F7F377C +:107200001F199E85163E4AE487F9E58EEC45E3F2A8 +:1072100091A09FA0C319F943F051223F9C2D1F2537 +:10722000F2C7281F19D93758F828911FBE758783D0 +:10723000EFEBD5B29D7486690C1FC934FF33F2871A +:10724000E0A3447E18CB479C2F12E79FC827FFE39B +:10725000FCA1AE918209FCB1F02BF14794F488892E +:10726000DF443A07ABAEC8BE7E5CFE107411FC7101 +:1072700046BA0BFE48A4F3D9F24722DD47F9239A18 +:10728000FD0D0B7F24D239D4BC26839FD318E18B0C +:10729000B3A3B306744E397BF967214B5CB5682CF8 +:1072A000BDBF329DB535D2828A783A5FF795D61345 +:1072B00046726EE229915E8B16ACC9BE615C3A0BD8 +:1072C000FC0A3A9F917E82CE67D4DBA7A17322FD90 +:1072D00046E9CCF8FE4288DB2389F4033ABBE3E9B4 +:1072E000FCF7D1EF4CF29948DF33D1F1C1D3DC8701 +:1072F0005098CFE347FE3C46E33EE81EBF5F49BEE1 +:10730000C8BB35FB25DCBB6B96E789F1BE8FFDA0C2 +:107310007C4BF437E7B1AF656005C62D67D876F9C9 +:1073200017A68C856B8B249BF7774B563FBC2A9F07 +:10733000FB1DDB9B54A65B7E8F65C3EA5815DAB54F +:1073400039066BA1FCDFD599C09A63F1E6FB741294 +:10735000C50F46BF17E171FDC506C5697C9F9650F4 +:10736000FBF62685C6C7EFA37F3676FCA4D38CEF49 +:107370003FC3F879D43EE6BE08DB7CBA17088FF32A +:107380008E67DFF53545C2E39D431DF9EE874B1649 +:1073900007459C50F18A73CD386CFA56379E37D525 +:1073A0000B38DD7C693C5ECCEC037FC63846EB8D48 +:1073B00025B4FFEE4B0A37633CD15BAD0430CFA15F +:1073C0003575968FCE612F9D1D778E7AADCCEF3BB4 +:1073D000B69CDF388C71159BCC685F38B1BF24BE7A +:1073E000DB2AEEFD067B7B2BDEFB55BAE311693110 +:1073F000D44F083E5122767EFF1B2206E479EA2E06 +:10740000A7B80F2EB661C564BABF4CB41FBF06EF54 +:107410003DA2787E0EF80BF9C737E0FE6A5F534055 +:107420007ACB821F5F42DEB8591E12DFF336EEDDE3 +:107430008A76B8B9EFE155C7EFFF413EF74FF68ABC +:10744000F96F59FC28E517466CEA9DEC6B345DBA80 +:10745000F7BAB7B6A410F1B857FC4E4B5FDDA304E2 +:107460005FEF4A26ABE963C7DDB29229F8DC3C57EF +:107470006FF637DBE13DBBF53DE89FA44E3B3DFD9C +:107480007B57866AF571E4F09090173C4F8FBF0BE5 +:107490004029911A9EA76701CC7BDDF2822D805B8B +:1074A000E56C6EB819F37B7AAB94C07874EC4DED53 +:1074B00095FE19E16CB6C7A40CBC47E841E2838F86 +:1074C000838CD1B99D84FEECB32F28FF9C420B36F0 +:1074D000BA76338CE791695EB80F854A9F26138888 +:1074E00020DFF95214BE4F067FB199A209E3393566 +:1074F000BDCD98F7DDC65843960FC7E9A2F366BE27 +:10750000A5CE38BF6A649D72445E0B49A3E7A7B756 +:107510005C12AF9F9E11F87827DFCCF70F523CCA60 +:10752000B1E2D8AB9837E430EF0DF2D8E3EE636800 +:10753000C53D6F5CA7EEE47A7E4B7194FCC4A89BBA +:10754000653A7229FF58E7F13AC5DC77A2DFAFC987 +:1075500015306D39CCEF65EFBD8F492DE54877BD0E +:1075600085CE19CB2C887967BD9B427EB78788B3BF +:10757000C0819BEABAAE792CF750F4AEA9F7533C20 +:10758000A2B6A41CE329AD8DFC9E90DECF19BF1FCF +:107590007CB116C1FB73FD6CD08DF89E5CE3A473C7 +:1075A0006D63EE3D10783F1D1F8DE051023C1612B9 +:1075B0001E851C9E20B96BBD84D77F96FFD77F4365 +:1075C000B9AB648157715E8E1427DD5F743AFC8D10 +:1075D000E03905F09C76FA7ECFE4B33879A31B52EC +:1075E000113E49BB13F9ACCF612CA6FA4A6F21E6D4 +:1075F000D199F2D6BB18E46C1ACA27CBB4CAD59677 +:10760000C521BF93F05C20B14BBF4C7E385CFDF9C7 +:10761000C7AFC1733FA3F75D0C4C59387554AFFA2F +:10762000056D8B0BB85E704D7CEACF08FFE61A271C +:10763000DDDB9CF89E39BEBFC67902E14E9413BFD4 +:10764000B8AFC2EFE3E70F12DBB3C5776ECDE7FB50 +:1076500043E67D1CFB8AF87E72EFCBB608E5B18964 +:10766000FDE32D2BF9FE71227CDE84FB514C7D77EE +:10767000E4C40FFCB89FDC2BF6937B4F2CA7FDE4F2 +:107680002DB57C3FF9D67C2D2E4E71B6DF1FC197EC +:10769000E05FD7C4AD6E8AB77CC57998FDF766F216 +:1076A00075CBB851ECB3ABB06E21BDAA4BC7D55B5F +:1076B00067C26F96589FB251E6B247D7D945F9BC19 +:1076C0007EB6F262AEDB9B9DC1AB0AB231DE14A284 +:1076D00078D335883FCB38CC1E28A5730C67392E5C +:1076E000B3AD6618A7F9E8255B84FCC804BD8A7FA2 +:1076F000567D695487495F825E6978401DAB777D0E +:10770000AC7AE35C1CA7D49050FFB716DA03980755 +:1077100093A84FD7391A5C786F615B537033DE835F +:10772000F108E004F7331B53143A07D126CE45186D +:10773000A9FC775D12E7FF60215F671FCD30C8DECF +:10774000D82735D7062DEBDB9B13395F3F27F0CFCA +:107750002A426E7EBEA3ED45FC7D81F61532E5A77B +:1077600077449676607CB1DF27E32FB04159E7C6B6 +:10777000B8B7D120AB1807EFF7B5BC88F7961A95C4 +:10778000B2560CF3385A59D781E7D637D6CB1760A3 +:107790001EDD1C714FEB3695DF1FDCDF2007F09EEE +:1077A0002C434DA138FAD606918F9A1FE0F865FA5E +:1077B00035E53379FA2EF2EDD1DB9C12DEDBB5DD57 +:1077C000C77F67AF7BF58B8378B75D49657514EF2D +:1077D000179F38CBA56A2ADE77A747711FC8A72B4A +:1077E000C1289E4F5A3D80670C306FF779BC87D017 +:1077F000582CD3FEFAE11D73A26FE07835C9345ED0 +:10780000DFEA03FEAB30DEB7C34E59977B84BCEF93 +:10781000D9718AEE51EBDFD19E837663AA6EF97D32 +:1078200046F8EFF07D07E97EF7E4803DEE770FFB49 +:107830006B07E99CBD8B599E17F2323A73541E9F19 +:10784000BBFB18FDAE813DA15FDED218BF3F607566 +:107850008A077FBF6C17CC07F33BF7C8BA8CEB9352 +:10786000F1A6447EDA230EC365CDF3B8A294CFBB54 +:107870000DEF6D017E292D948318DF5F23D6617B88 +:107880000ACF5F31E99E5816AD9BFDA5F7A57B9504 +:10789000EB365BEF9B327FEFC1AE0ECA2AE033F7C7 +:1078A00071B51C0FD0E5D6F37B1CB75D51509EA27D +:1078B0008DF2E1B6C3AFD5629EA8F7B114BA57FEF8 +:1078C0005E5B48A2F360593CAE7BECEE7BA6217F69 +:1078D000DF59EB94315FE29337263447695DCD6B16 +:1078E000B059F202D41A7ECF7646A3273019E6A308 +:1078F0006ADEC064B067ED8DCE00DAB5737E5C36AB +:1079000061E84BE00837A981C90EBA47884AF33CC1 +:10791000C5793F9E9F5E67918F370AA438FFC0D517 +:10792000981CB6C2EFC8E7F8853FFF02CB3AF38058 +:10793000C067581ADF2F33DB5985EEAB42BEBF1B41 +:10794000D66DA856653CEEBF05E0DD5AEF5451FFF9 +:107950006EBBEDD8BA6F21DFBE60A39CE06D771FD0 +:10796000F42FB3CCAF5F1ADF3FFC4CCC7B8FDFD85A +:1079700022D189D0E30BF1DEC13D6E630BDDF76CE4 +:10798000BCB6F057B3A03E6257BCB910EDD63DA8C7 +:107990004FC09EFF3F0F6F5C8876C59E0CE346BCD0 +:1079A000C766C3BA5FDF7F14F4EA9E62E37509EA33 +:1079B0008F14B3E86C1CAF90F7EFDABD7A23F59F14 +:1079C000CAEB9B760F2FC43CB57E8407E0B3EF7003 +:1079D0001292FA77B465A21CB565F4F8711F7E7334 +:1079E000398802CCE7B5EDEFFD4601A1B04B613F10 +:1079F0000A7DDFC45F5F3BFB62C4C7E48710FEAD56 +:107A0000830EFADD97ADCF3D48E7893F02FCE07E6B +:107A10004E7F7ED41F1C07FEAE265FA0AB18EF0F73 +:107A2000E2A5F93C35E00B3C6691D3E4D2F87ABF8D +:107A300014A5EF2F98F8AB6BED17E17E4D7433CEA4 +:107A4000AF6AFB23D7DA617E5B53A37E84BF7CFBE6 +:107A5000565ECF66220FAEE75AB4CBB6FA79DD3F59 +:107A6000317C2DE223711EFD8E013FC607CF380FFA +:107A7000D1EFABC2713A3C9CEDF7FF1F7EBF16E31E +:107A80003E677ABF6F62BCDC8F19A7F0ECC6F9477E +:107A9000F9F1FFBFFF3FFBFE8289FCFCDE99F98113 +:107AA000F173B132BF577B8DA75AB1DE1F36AB944D +:107AB000DB4F6F1430737F9FEE43DD7CF31CDA0FD6 +:107AC000DEBA7AD08DF71796EEE821FB7BAB5AAD84 +:107AD0005C85EB5AA54CBEE5C6CF5A292F66E36AF2 +:107AE00059C538C0B6CA0FDDD8BE0DEC2B4983B2DC +:107AF000A69ADA8D7A99ECA5DE9A17DD4B2CDF87F2 +:107B00007E94DFB5EDAE23FE6596E723F73AAC86AB +:107B10001979F03C6C11FD4EA7D9BEB694F3F9D695 +:107B2000DBAAE7927DB742E6F6D61DDF7F1EEDB9F0 +:107B3000AD60FFE13A7C74C51137E62D6D992B934A +:107B40001E2E11F5FCB976FADD73BA6718DECFCBBD +:107B5000639128F43FCF35300FC773E5CA0CF78B1C +:107B6000D3EF1AA49F8B39ACD63D8776E5361F1F1D +:107B7000B79DA951F4F3C08E247F7DCE8F5747B7B0 +:107B8000A15D06F69C8BDF64905EEE1DFD9D0AC62E +:107B90001AC8BE4B06FB0EFD8C6D0DD3A5021ACF85 +:107BA00046C6E235A58584FFFEFA3BC9BE5B03F6F7 +:107BB0001DDA0DDB561F50ADFBED99F3E3EDB5D4A7 +:107BC000CAF87A72823D9668C7391C7CFFD951E5A4 +:107BD0008C1896FDE7C4D2A1827D61B1173374354C +:107BE000AE9ED8BFADE910B3C6CFECA7F9BD93F2F6 +:107BF00052F3FE9101FADDA846C6F32CD9A08DEC14 +:107C0000A836F1FB8676F1FB86DEC6648AB3ED2BDF +:107C1000D47D8B61DE7D0B9CF47B606D4D837DE8B4 +:107C200057B4AE7212FD5AAFE1F97A98578C71A62B +:107C3000CC7C99CECDD9AEDBA4A19FE3B6359462BE +:107C4000BCE37EA69F4BF7C26845C43F192CB0B178 +:107C50004A42BFF496CD184FB9F3EA24BAC763C2BB +:107C6000B7BFDC9ECCC6FB4B2D71DA07F1FE5290FC +:107C70008FFF02F7F9215A00800000001F8B0800D7 +:107C800000000000000BD57D0B7854E599F077E6F5 +:107C90003EC964E62484901B6126998400094C3017 +:107CA000D868833D81A878D97644D4D0DAEEE166ED +:107CB0000143778AACE22E3627215C42910C186290 +:107CC000424006040B22ECE0EF6D77D9FD27882EA9 +:107CD0005ADB7F6C6D952E7683ABDD6AB76EA46A36 +:107CE000EDBF58FFF77DBFEF64CE9C2404ACFB3F93 +:107CF0004FF33CEDE73BDFFDFDDEFBF77E87CF3E3C +:107D000083BFAF30F699283D9516C6C633B6FB85BE +:107D1000E4424F2D6389564996AE01F8BB3F5FC8D8 +:107D200000CEBDC3C1AC12635DF6442F9319AB3ACC +:107D3000648FDA0AA0DE9E7C1CE15266EF9A379BC4 +:107D4000B12336068D19DBDBE488690128E336822E +:107D5000FB963A6212F4DFD6FCE47B8FC3783D6178 +:107D60005768323465D81EE0EE5515B12D509F6B23 +:107D70006591B8077F8F17DC52CDD8F1A38EA61876 +:107D8000C20CE02CC68E4AAC89D7470B9A003E74D1 +:107D90001BAFEF5B767B408172BD852DC77A7D5F1F +:107DA0005B020EDAD79600EC6F166335EB5BBF1BF8 +:107DB00086FA0D671C7C5DABFCFB9C52AABDB9EC3E +:107DC000B3C7A5F986F18A9A43356A15AC17FAB09C +:107DD00042DAC04E9CF7B8057EB81A61A6B03A5890 +:107DE000ED3E0787B5277EDA188425C0F408D7C68C +:107DF0000E3CA45511ACC6AB86CF77C364BECEF89B +:107E000002D19F9D78A80170747C0E13F0F65B95EB +:107E10007A9C4F9F9F318B0B60875EFFEAADCB8BC7 +:107E2000619F7313A52C9BB17726336D29ACE7684E +:107E3000066F7FA3FF938734E8FF78B668AFBDF77E +:107E4000AA02EB3832DF25C6BB638762A3FDDC6480 +:107E500085369D07FE6687E72AC37ED8ED3FC1FAC7 +:107E6000A312EFFFF5D8F3B7B441FFAEAC58A90C9D +:107E700074A0C4DEBAD53691CE51C787C65C4837E8 +:107E800043EB555C80AFA925B15256C3D83593F763 +:107E90003EE4BF2AD5FEDAC9FE30E2C70CEBE76E3E +:107EA000C6D7A632379D6F7CC133921FDA15D99899 +:107EB00082780DF53FE55E69C0EF127F06B5DB699C +:107EC000E7E33C37F0A47B91613C7BB9C0BB8DDD1F +:107ED000B40CE8625293436EF543B9E0AE8548278F +:107EE000DE350E26013D5BEA9233AB805E0B9EF2DF +:107EF000B0EBA17ECFB2C8E900D2EF55961003B81F +:107F0000FBDA68810CF3EE095735321F63BD591E49 +:107F10004E9FC596798F8D70DE85E5569A775BF317 +:107F2000CCC85D30CF268F4746D41EB1859A902F9E +:107F30008E781CB2867C6789154A21C636FA674757 +:107F4000DBE17CBB1C1C9F03E573A31A8CDF3EEFB7 +:107F500049B704EDB7A9B00FE4B3B076C364E4C386 +:107F60003516380098C2FABB1B2663FD0D16D6C61F +:107F700052F36F9324C2C7436B4A6FC1F91E9A979D +:107F80002B31033F649471BCE0DE3C790073926353 +:107F9000EDF27E7610C61FFFB19759615DB94EF5BF +:107FA0000CE2A9678A8BED0FF063C6F5642E705959 +:107FB00090AF01B30AEE0FA68A6C81F6E3ACF144F0 +:107FC00005D4B3B9AEC18321A4C7987217C08F3747 +:107FD000B822EB818EC67FF571560270EF051F93B4 +:107FE00000EE6DB6909CD85DCB62B83E4FC49270E7 +:107FF0004C87F5543998BF92AFE933F89FE7ECBB53 +:108000009F322FCE03BFBBC4EFB09E4A7D1FCC7200 +:10801000D33218C7A732790B40F9EA60E29F605D5E +:10802000B0B5B015E6F19D5D7533F6F73D15FA264E +:108030009567DDE7B064F586F14A192B9EA81CF61A +:108040008F273AF5E3BAD89759ECA0C4EBFD3098E6 +:108050004FE0A9F7E9012D01F54AC01691809E7DF8 +:10806000CD6FD13E99EA517DF9D862503904F3972A +:10807000282EC28BB73E7D3F246160BC121C1B7949 +:108080009EC9375541FB6D7F6399B985402E3FB737 +:108090006D09C4B6C03EFB421CD6BA603D0097C90C +:1080A0006C8EE44F9DE7FC3207E161488EC21A12E4 +:1080B000573236D126C607D802F3E5210CA4F9526F +:1080C00039E7AFDC4C90CB55748E6E2B8C9FDF5C08 +:1080D0009A43E72A470BE6831CEE0B48346E3B9C21 +:1080E0007B00D6A7452CA183FEE1F4BE4FB4A3BF0D +:1080F0002B059E609E6D964186F4A95998FF69D81C +:10810000C3B6AB5F2E500DFCF203433FC48797E923 +:10811000F8E0E3201A5819FCDE6C91BE9DCB8F610C +:108120003EECC5BBF499FB24A013B6869F1FEC5E02 +:10813000FB0CFAE5A9E978F629E9B0971960C06364 +:10814000F96667EAFC19D22FC7877FAB23EDF712D8 +:1081500013DD2D1374771C1907F9E31A16DB2FF1C1 +:1081600073473DEB556D6C0BD29D8D6DF6CD64EC78 +:1081700013BF44F89E85FA610479371FCF63D67028 +:108180007A64C679ADC3E12339822EAED6E934BD17 +:10819000DEEBF26A99DEE1FBB6970686F0AE19E8EF +:1081A0001A240F0BC3B9E77A0715E4733687850ED7 +:1081B00082BEF03EF116BBA99608F33CD237D42715 +:1081C000A6E6D2590D1E9491BEFFE834E259DF575E +:1081D0006E29DFF7A1A74F14A01CEF43390DA5DBD3 +:1081E000840735C0E9570D707B65FBA99C292F00DA +:1081F0009DCD79F604D350DE9DB1C69C6877FCBD59 +:108200007F3DE2F7E30616D2A0DEF7CA0083E5B2AF +:10821000EC53DAB5483CFA785015B3E48F5DF6BEFE +:108220001027BB48654EB28B86D5DBE36750BEEDA9 +:10823000BCC513D258EAF7434FEF96FCB0FE8284D8 +:1082400065C83E40B24DD90BBBA2A8AFABADC9A922 +:108250002EC04FB7FC64B47136EAB3BC6936E08314 +:10826000FF08BC13B58FBF98BE7F3D6CD4F7DF2AE3 +:10827000077D9F9FD2F7D7ED7B6A07EAFBB84BB427 +:10828000D71E4FA2BEEFB22BC7198CBFA1DC1FB502 +:10829000A1FE758AF1B56351ACD7FB6F38782CAA73 +:1082A000A1BEB9E59902D5837A5E9FF7D9F968F73F +:1082B0004CC57DD0BAF68695E2E17ABF6F14BDFF5A +:1082C000D9C1CF7618F5FE37CAF7A6E97D1D66AE8F +:1082D000B83B5C3DF6F9F4D9E26E19F5ACC0B312C7 +:1082E00038126E05BBCB7E287923F2BF6EEFFCAC53 +:1082F0002C106DF520BEB99D69E6AF7B859CA97EEB +:10830000D41189C1FC73267B886FF7ACBAFD00D20B +:10831000D59C67CFF666A2DD7866A11DEDC6350156 +:108320001BD161DFDFAB936461A7E27AC16E2CA041 +:10833000F53C7D416255C3D73B29E650D02E30FF36 +:10834000DE1C10FCCDE20B4FE6D23AD816A83CDA80 +:10835000A6AD088FB0DE0DBADC6D813D93419D90D6 +:10836000902F1F921505E72DCE0D6BA874EDB20569 +:108370000E6038DFD93E2962CAB8149C93AD30EC48 +:1083800067FBA4847E9FE50E6F0AC0F8BB9EA9DB45 +:1083900016446AB5083952E120FD0276783EDAE9E2 +:1083A0005F9DA87C3F0078F870736D253803A3DAD1 +:1083B000D3ED2DE1DEF672036C1FD9AE5B59C2E539 +:1083C000417BCB73ECDF91866CA14ADC17AA254E6A +:1083D000A7E7BF26EC7D3AD75987CE77921D04FADE +:1083E000C986FAA7D922939C039EDA7825A9357409 +:1083F0005258AF947023CA927E2E3FB659060E3D56 +:108400008AFB59ED207D85076131E8257D3DAFFB75 +:108410002D23EA1FD0378A1B805FFAFD437692C571 +:10842000A88F84FEB9CF2ADFFD04CAC16F64D03C97 +:10843000BF2F8DFCDB03B5E87F54D4A07C027D9C6C +:10844000897A5D5B087A93E1EF0ECD8276C9127668 +:1084500018FDAEE9CFC5A515B0BF6F54B868DD856E +:108460006BADFEB7AF80FAA60109F9326053DD8823 +:108470009F5D4DF37D6C047C0EF92FB0E8040C3148 +:1084800019CACF90755D7109EDD5A2E8F17E07CAD2 +:10849000EDE58CE381C5A40570AED797A82FE1F96F +:1084A000979CC8A07E3AFD14AE75D0FC57230DCC26 +:1084B000FA3CFBCB9B837494778F45EC0F0817E055 +:1084C00022357AD80A63FEA6DC45E3EAFBD4D7BF9F +:1084D0002B7269FB0B5EFAFEDE41BACDC3FD550E71 +:1084E000DF9FEE77FD47A02F8A72F4F2F7F9AB36E3 +:1084F000941779F7B0AB50B4CD3821D3BE8BD41DCF +:10850000B4EF3F8CB64F15F689F2CFAF113F9BF712 +:10851000598CFB84F506C43EF39A4DE733F6BEADA5 +:10852000A5B30C7E88BE5F8B7C3712EF1AB647BEB0 +:108530000EF4D0D1566DE14872C72DF46FAE77407E +:1085400091101F42FFFB9E389FA6FFBD4F5834E796 +:10855000F4E17A3FD7ABF37107E91BB7D06FF9FBB2 +:108560003BA2DA087A5F2FC7093F1EEC99E5648FBA +:10857000CACA9C77D04FFA79D9BE2D06BFA5A2945E +:10858000B73B5ACAE566DE275696B802674F2EFEFD +:108590007E2E3F2F94AB7932F88B507FF2DCB305FF +:1085A000DF83DF7B8F16CE4455D87BEEE10209EDE9 +:1085B0009065CF4C95A07E9325FEF25494134FDA2C +:1085C000E85C4F1FCB50F01C574FCCD8877A419FA7 +:1085D000778198376FED91DD88CF9E168DE4973EB9 +:1085E0008F793FDEC95C7E1F11710BD41F8FE1FABA +:1085F0005AA74B5B088FDA0A9CA777594500EDFB19 +:10860000230EBEEF9EC5FF202D82B27715B3C8336F +:1086100046885BAC622ED997C293DE5EAF877E360A +:10862000633F689F61847B576D5CA854F1F342FD02 +:10863000B7B1B898F0CBC212F98179C2D759502A94 +:10864000D67F4D94DD8F7E488125D6863221BCA809 +:108650007509C0CEB9AE10FA35ACA9511930D8ABF6 +:1086600079D187D9DA1CEE67D87386D7C717DC7B38 +:108670001AFD88A2A59690E447BF3E349820BFC952 +:1086800041F8DF937FF24C3F949BF2670E62B9B8DA +:10869000742AAD23D4DF754305E22F7F7F08F9AD3F +:1086A00067D1BD21F42346F3FB0B45BC4587F73466 +:1086B0005BE6A15E8E2F70DC84FBDEB64CC945BF45 +:1086C0007F9B3DDA807181BD006B30EEBB1576EA91 +:1086D00067591A6D1DA8C2DF07F2915FB709FF5FE6 +:1086E0001F6FF7324713DA117B9A4F2EE4FEFDCD50 +:1086F000B988BAF576F093603FEB6F9B57DB6A1849 +:108700008FEC308C8F55839F10403F3B4EFEE278BC +:108710008B3FA2C96C981F8E7EF241A8DFFBA19708 +:10872000FCE46D59BC7FC64CC6E36FCD4F929FBD34 +:1087300047710D225F8FB326148C0B806E4B1E2465 +:10874000259548EC81FAACB53E790BC1FBC94FF7D2 +:1087500029F9118433063E20FF187C845B30AE3546 +:10876000CCDF36F93B6F54707C8EE647C7176CA49C +:1087700038CD707F3ADC85F2285F552555D09DD1E4 +:108780008F36FBD9BD4F0F26F09C15890D4A85E821 +:10879000BF5C203FDAD5E08A3849D90FD03E4AC0C5 +:1087A000CFDE227FF17E753E4659CAB0E120437B81 +:1087B000EFE50A1E6734FAD5E89792E92BFC6AA325 +:1087C0009F9DA8E07EF590BF8DEDCAC6F6B34F0819 +:1087D000F962B66BFA143614676D45BA616C1E8E79 +:1087E00003F873F5E45039AF1ACA1315DCAEF27909 +:1087F0009886FEA64FE6F60BFADFB4BFF98C911C03 +:10880000C7FDA19E626CE68EAB68BA79D5D0FEB981 +:108810000ACEEF32F687F1E4BA0CEAAFE3D3601781 +:10882000517F1606D57015DA410E82FFF6AF98DF3C +:108830000270E19AF4F3F8A2FC71BB9CDECFEC8FDE +:108840003F52C1F5D6A5FAE3EF97A6FBE3D2ED9F21 +:10885000681487BA3F5AE0043F66EF6B205B7CD810 +:108860008EDB65BB1F78D28DF609EC7F9103FDE9A5 +:1088700053C95BD8F491E8EF7FC65F8F575C9EBF0A +:108880007EE489275F46FFBCB3CE5283CB38F2C467 +:108890005BAEC523C42987F495498F8F43593F1E8A +:1088A00083DEDC4EA99EA87ACB908FD780DEF7229C +:1088B0003F0F30E4E7AEF93C9E33521CF1DBB57F4D +:1088C0003E71C4BD7E4997D39191E2F7AF978B7A01 +:1088D0009FB8C740AF0BE5E93ABF05E588B44E8FB6 +:1088E00037FAE75F2FA7DA0FC9CB262D6CB93CB951 +:1088F000F9E5B2F129B9F9E7168F4CF8AD5C0E8EA7 +:10890000C10FFABCA9B85F7AFD38EB00A7032B8F23 +:108910001F9AF9C2DC7EACB8DDFBE29CA5DB7B6E66 +:10892000C8CAA5FB9E9813CB658BCF3C887662C4E2 +:1089300041B4BCFB5389C70766336EF700FE502F66 +:1089400079DB5902F1E73B354072E5D87A10FC75C6 +:108950001CC6F8E4D7363115E1DE351F537DDF3B09 +:108960003686F17D6F73F77C3CFFCB95173A7F5FBE +:10897000AA9CC0BF91E403C91DB2CBDBA3E85F1F73 +:108980006DE5B07B7F3BF93FFB60AC24D2A14D216C +:108990003F0CF49566237AB3D0F9829DA5A1DEDA67 +:1089A0007D95653FDE5BC4238E7137737F3C540E2B +:1089B000F83A791BC068DF807FE404B824DF3DD833 +:1089C0000E76F291B20AA2833D892E7715FCDEF372 +:1089D000923A49BE881C02CA7159885E995E3A2C47 +:1089E00075F4BB13E19DF64401E2B9601D8FFF4DA4 +:1089F0005ACA14B4C37AD427DDD7E17935E7302BCE +:108A0000FC9E2FB130F2E96E3BF7DB762F2B9DA950 +:108A100031BCF7BCCB8D727050E8BBEE04D8852317 +:108A2000ACA7A7CC2EECCEA56EF4C3BB85DEED5D66 +:108A30003A9FEE8D2645FC16ABC13F6811FA77527E +:108A4000840DC5C9909CFBD6E8F1C19C5B97DBF017 +:108A50003EC8228C07EB4F1300F7D5ED20FE2F58B0 +:108A60006BA17DE49AE2575FA970D23ABE2EE21460 +:108A70007ED64571B3E34BB93D7BFC540EF9AD9DF9 +:108A8000F58535B86F0C5BA1DFB65795C9AED7FB3E +:108A9000DD27C6D5FD51B37FBB6B1DF7BF7DCD1B59 +:108AA0003FB04E473F733061453BBD8951DCD3EC4D +:108AB0006FE6093FF566F45389EE86FCCFD7CA8886 +:108AC000EF0D7EB735E5877E1DFA229EB2C7C953EA +:108AD0005E003DBBF0B1AA5B5DEEB4F8A282F1C5C9 +:108AE000EDA7049EB42AC29B7C7A30E1013EFAB71E +:108AF00047FF6BBB0BE6F326F5F68170020358B611 +:108B00007801E941ABD65AC5ED60D21BBA1CEB5DCA +:108B10009A3313FD42FABB52D865785FB0B4AD15F5 +:108B2000E9569EE31ACC443EFED1D27EEA0FF667A8 +:108B300039F4579462ED2DDA079C07F25D52ED4748 +:108B4000BCB14889BF5C46FB06EA0DF2261CE6ED87 +:108B5000256C5F36BC3E4FAD17E371B85B4A727B44 +:108B6000D316BD01E55CF7B5392192B72CD19A81B6 +:108B7000EB6EF531F417FB167EDC9A81FC05675A23 +:108B80008AEBB325258CCF75BEC2E9403E9D949CEF +:108B9000B4AE3C7F39A3F1E85E1D3042F3FF0CCF49 +:108BA000C98A7EAFEEFFC525A423C01B8DF34236D4 +:108BB0006F7747236F57B42E5A80ED7ABFBB712170 +:108BC000EA1FB003DA34C4D39AD2FD467FFC85296C +:108BD000529A9FF5A796BB5A98F616B0DE3651F614 +:108BE0002F6F73A31FD65FD7D641FE5F9385A12B4E +:108BF000B5CB01EB417B62B185FCA9BEBAC56EAABB +:108C00007FC54EF2BB6FCD9C09E8B71D9FC2E9BF7F +:108C100057E2F70E3A3EA44C4E97FABCF706F93EDF +:108C200066597F571046BF4FDC9F9AD7F749251FDB +:108C30006F9B97C71F4A3EC966B171C4EE12DAF145 +:108C4000D707B91CD0DB9794FCFB22A906EBFDF3F8 +:108C50004F17039CC1D2F209B633A6C7D1B54A5803 +:108C6000D7231B32443CFF93AE469417A2FDF5C1B7 +:108C70005F77A19C36D62BC1E1F5F9EB14F2BFF377 +:108C80006D4CBB19ECDCFCB5577EDB86F7646A6E75 +:108C90008A0E4B87F7EB3FF72F091FCACF858CEE63 +:108CA00059EC37E6129DDA6B383DEC79734503DAFF +:108CB0000F7D3F726B789F9AC778FDF55770BDB3F3 +:108CC000F5B5782FDA7385CD0E86F64161F3C624AB +:108CD000C6472FF7FCF5731FB55EE09DD918D1B7D5 +:108CE000FEFB59712E6C796E8ABF2E12AFFEA2CA9E +:108CF000CFBBDE2F4F117939822EA3161ECFD1EBB9 +:108D0000778BBC9DD72B393DF5A25D86F6D62D1904 +:108D1000A48F65539EC95641BF8A1837B8E05B3EA1 +:108D2000E4EFD1D6A5C7CD86E0A178D9EBA5DF4386 +:108D3000BBFA96FC99A8C7F57859EFD3F302182F20 +:108D4000CB06BA72E4A4F24A8E054BC35A90F40BD8 +:108D5000E959F615CB28F1531E5FD56667A4C5897E +:108D60007D4B789C585FC707E5E971705F3D23FB39 +:108D70007797BABF15DB7FD48C227FA4F8273020E9 +:108D80008C5FA82A31A37C92859EFA9AD053A09F2B +:108D90000E052FA29FE2FB785CC78CAFDBFD3C0E7B +:108DA00060BECFD3E39D71C48367ECF8E53F07F95C +:108DB000F9FCFF8E5FFE67F0F2E29717A6FC79C719 +:108DC0002FFF33981EBFEC4DC52F1BEEFA13E29711 +:108DD000BDC54F9E49B0547C72E3D2D58377B1CBE9 +:108DE000CFABDAFB82BAD083FCD22AC9D612A0A7B5 +:108DF00007BAE93EB140DC1F9AF1A606385F54E598 +:108E0000299F06678D7D9F6E2DE7F45AA0DF7B9A20 +:108E1000E876A79BC7B34E0C5A282FAAAF292F0775 +:108E2000EDC76E3BA3F8E89E07FC3968E72F11FEFB +:108E3000D2CEACC106CCAFD1AE6232D219D8E49E4C +:108E400010DAE1CD961A9E2FA5786AD07E596599E1 +:108E500089FAB7FBDAA4FB05A45BB744F7F7D5CFD3 +:108E6000AFA67CAAEA2F5BC82A1B2B7F6AB5E03726 +:108E7000B7231AAA92C6BE57E85BD54D71885E7BB0 +:108E8000746108C67DB2253FB415E8FB2951FE4147 +:108E9000DC3BEAF5CFE0EF60283D374AFD3F88FA3A +:108EA00013A234D7FFB3E89718A5FF49D1EFD42810 +:108EB000FD5F14FD4E8F52FFB2A87F6594F17F2CA9 +:108EC000FA2547E9FF13D1EFB551FAFF5CF47B6354 +:108ED000583DA78B5F88FAB3A6F17F29DA0F88DFA8 +:108EE0002F94F8F93D79F653052BE19C6D48F7284E +:108EF000DFF7B5E7308AABBD7143562DE939F2B3E0 +:108F000077FFF5798AB3F5AD05D19C3D763CEDFF51 +:108F1000A26C87F1AF09F8890EBB04BDD71C4ADEED +:108F200018983EDC5F1AE21711AF3E9A215B29EEDA +:108F3000646183FBD10EF3C8CF53DEEB4D4CDE02F0 +:108F4000F3D7C459C20EE35C17C8A6796AE2C939DF +:108F500068B7E43A9502A477F657FC5E02346B0DCD +:108F6000EA6F3D4FE23B070F44795E03E839E4E3E3 +:108F70009F5AB91E1A1A5FCEC6F1CDEBEA6991E984 +:108F80009EFC9A4020CD4EEC5173328D72B0FB9412 +:108F90002561F7A5FCCE1A9525C61BECA9E253ACBA +:108FA0005082FAE2C4DF4B7ED0F33DDF1176A5D6C6 +:108FB0003F5F81F51C9DC3F9633DE65B14E37C32A2 +:108FC000CF9355930AEEEF6880DFFFD94F25958048 +:108FD000216F4611F7E7A3E557F421FD548D4E7F2D +:108FE0000A3A1F289FAAF939215F2E33ECABB1DC76 +:108FF000CEF3816A389DA5E8A6C2A2D38D05DADF3B +:109000005CCEC7BB5022C6CB4E8DB7C4305EA89C89 +:10901000C799F4758DC6B755625D7ABBD1F8ABBE02 +:109020009CA58D371A9F874CED46E3B74653BBD1BD +:10903000E44EA5A9DD68F2A1CEB48F63A23E2E4A0C +:109040007FB945E0EDE27C69E66F3D9FE70F258F34 +:10905000ED403B26D71AFA29C677D8F7ED9CFEF3E8 +:1090600041A6817E9D88FF5DCA86EE41F4FB8D7727 +:10907000CA73685D0793F373FE027F0375D59697F5 +:10908000BAC7F8A19FAF87B9E21D1847DAF61D8B62 +:109090008C7643C90B3B7A25CA73E3F160DF3AC68D +:1090A000D2E3A92C7CBD3C3C8E7A65199707E67803 +:1090B0006AC62701A65C918A4BFB44BB0C5B0CEF94 +:1090C00036A03E48F563DDC7FC50F0419F8883FF22 +:1090D000C2AEFE5739D27774A02D13ED877C467E41 +:1090E000BAFD84A2D9FDC3F309A0FD47E5688FD777 +:1090F0007F407194A1F6E0F621BEC6B20FA0FFA793 +:10910000345FFB28F399EEF38F33E503635E8BB98D +:10911000ACF130CD93333C0FEB3E2BB7A3D857784F +:109120001CD71C1F02FB8EECF7806D50A17B5211E7 +:109130009FDFB5EE3CC5973FF2DB22B88E42972AFF +:1091400021BD143036A8918657FBD11F9715D72023 +:10915000B62F884AAD656437F2B84CC15226559196 +:10916000BDEE89E0FD801E4F9A27F21E5092A11C91 +:10917000D5ED79B0DB2755E0792B23E7AB18E26812 +:10918000420E4EFA29E6D7EBFB3D51564DF25ADF1F +:10919000DFD0BEE7F2787AC0C6FA31FED203EBA385 +:1091A000FDA996065CFF47B03EDC9F8E8FDDDFE5B4 +:1091B000F81861BF0D78FFEAC3FDCAB8DF0F9465E8 +:1091C0007CBF11BC8F2D583A48F72185802FE37E54 +:1091D0001B53FB554CFB9D7DB1FDEA714447C5BF58 +:1091E0006EC77CB8D4BEF8BAF4F857C0A6D2BEF6A3 +:1091F0008A75ED5AB77A8605CF6DA9C3827ED4EF02 +:10920000DFFC412BE2A17795CC309E29B341A24FE0 +:10921000B9EE3C9D37AEDF5737DCDF9213FCFCF331 +:10922000CB6C742FABEFE786A178204BB0DCB4FD9C +:10923000DC71B1FD98CF69A04C16F7073CEF0EF832 +:10924000E12FB1BFB27B647ED0F395F4FB99E3A725 +:10925000E6D4A0FDD9DD347526DAB5AC4A93E6C371 +:10926000388B855E192B1E5AE84A529ECDC4E8A25F +:109270007EBC97624007788E80CF563BB68BC0FC91 +:10928000D06E5733CFE799B82626EEB7791C7448CD +:109290004F0BBCFC853867C0C3DA8A8BF89F603FF0 +:1092A00058C97E80F3DB5293E25BDD4ED1ED133D76 +:1092B0008F7345F9A361943717A16BA2E3BDB07E0C +:1092C000CEB7E2FC23E9E7BF7B994CEF80F2C4F90B +:1092D000E7AD394FF42B5BF8F91744B7373872997B +:1092E000C1DFD6E9B991C6D5CF7FAE387FF339C398 +:1092F000BEBB2BC61BF669E3F78ABD89F312DE0BF2 +:10930000ECB4272494CF971A3F7FA6CCFA538C3B1A +:109310005CEA3DCE5EBCC711F7C163DCE324705F3D +:1093200043F738EB3E56D04F1BEB1E67B094D39FEC +:109330009E57E5CD65B6E299FCDE95ECBA52AE4F8C +:109340006C657E915FC5FDB5A17BDAFA9C99787456 +:109350003254F740BF974B793B19FC73BC9FD7EF52 +:10936000E57D580FE5C952A1FFB03E2775EF3F9646 +:109370009E5EFCA30519D5D0B5FCD5AE02CCAFD608 +:10938000F9EE74C58A5B91EF9E2A954DEF02CCF7FA +:109390007303949F01E3FB77A1DC671AC5AF936267 +:1093A0003D7918FAB672FAA0F8B2C90E3821DA8DF2 +:1093B00066078C76FFFA7E85F9FE354AFC6CAE07AF +:1093C00009310FE5946F0DA3FC5A690DD811B5242E +:1093D000A7D3ED88A5DC8EE8D4F168B223C605F8E2 +:1093E000EF476C3CAE7524E809B5C24F8FFFD64AF3 +:1093F00072FAF17217C513062A849C92A3144FFFC8 +:10940000E2F4A926DD5C6BD42F5A03BEA330E853E7 +:10941000FE1E4271915CCA17F9913AFF99F5EB086B +:10942000FAC53DF922F238756F6609698CDF9BD168 +:109430003D5882F3DFE365AFDC827A27151FE2FB3C +:10944000EE5B56B11FCFB3C7AE2DA2F8D0AABC4079 +:109450009B213ED4BB285E80E733B0BE4862D7C0B4 +:109460007A05FEF578905EAF590BA93E15A748CF57 +:10947000EF5A2CF2D3168BFE3BB3B87F9060733D4E +:1094800035B88E66CE4F7F6A5E27DEA761BE6E9FBF +:109490001A3D8CFB7A73727A7C525F8FAE07C6CA14 +:1094A000CF34E777C2395C8DE7306A9EEA28EF0354 +:1094B000F64F2E096F2EBE7CBB4F7F7767F6A3CD8C +:1094C0007EDE7DD6B042F15C917F61F387135385D8 +:1094D000FD86F904663C2279DD08EDADC2CEB0E729 +:1094E0008612A83761B911BC2F00FD7D07EED32687 +:1094F000B35339D0CF5ECC62A86FAC1E85F248F46E +:1095000077916B27172551AE1F955A498EBAFC5A91 +:109510000E8EBB6B796E0D4F17D024F4C343A97B1D +:109520004D1E775E325ADC59F899AB1E6B45FDD55E +:10953000D306E7EAE779D50B619CDDA39D67D37E6F +:10954000D28BA3C79BD3F5BC5F9C6B856EFFA886AF +:10955000F32CA573BE77B251FFE56B242FF4F7A36C +:10956000374C2E14F6F8179B87DC3DDAFEF43CE40A +:10957000E28BE721EBF9D69F230FB96BB221BE61D5 +:10958000CEBB2E9D5CACFB49BB265F825F65681F2E +:10959000A3F63D313ACFA1F6AA42FAE98BC727CF0D +:1095A000CF4F98F098D7A45D567EBE8E4F3D3F3F7B +:1095B000BFD9C4EF2E46EF028A5416C3B8EB45F06C +:1095C000FABF47C26B3DB6E17EEAA9C917B193F570 +:1095D000769F376EA5F80369F7BD971BB72AC2B807 +:1095E000D50C28316E9565885BB1DFDEAAD4A6E282 +:1095F00056BF4039559C8A5799E513ECF3DCE48B50 +:10960000FAC7BADC2C91E754A5CB4DA4A3D1E286CE +:10961000BF9B2CEE672E316E78A33F9BC7D5845D30 +:109620007EA38873E8768C1E3734FB253D2AF74BE2 +:1096300002B6841BED987745BEF898791A112197E8 +:10964000D6317A0F3C29DA9AE69F14A9B17E2727F2 +:10965000AB84C5A0EFF5F713063FC45D49F6D2C849 +:109660007EC8BB93399D64FAE5B478A06EDFEEBC8A +:10967000EDB152E3B95B853CD6EB757DAED79789EA +:10968000FBD980B8CF0C2EF8E785E8477DA479FD9B +:109690005B723FCF3DE5C8F762BDABF8BDD8DEDBFE +:1096A0009803E96CEF033F2F45FD62FEFEC1E963BD +:1096B0002F531ED1EA5B3C21ECBFC71EA6FCEEB1C6 +:1096C000BE83305ADC3453C48B321097B3867FAFDD +:1096D000402FDF99C4DB5DE350AE44FCFF6A12C744 +:1096E000EF7B879FA577781B6CDA7C3CDFEE988D4B +:1096F000B502AAFA9B785E23F8EF317C97B6F7F4AF +:10970000B28E72803FCCE5F728DD4D735CEA08F33A +:109710006C69C90FB5DBC15E117140FDF78ACAC81B +:1097200049648D4376AD10E38727F76D2CC0FC8A22 +:109730001EF1CE6DB47388E038442F9A9BE76525FF +:10974000DC9897D557CBED4A0DD6477989D6FA06DE +:109750005CBFF30AB5C26A9023AF4CE271DA9C9BFE +:109760006D6F0D18F448567D3A9CC90C30881AA7C5 +:1097700009B6CBAE50D02037B315390D5E5C999544 +:10978000FBAB4CF88F100B213D5FF777553BE6C1E3 +:10979000FA56BF6AA5BCB46054F93AAEF7BE01C927 +:1097A0006FBC771EA22FD7ADBD98B7D6DE02F3D817 +:1097B000E93E8CEC87688B4CF006F11D8C6E257FA2 +:1097C0001FE663778B7BFAFEA6B68E72A4C775166A +:1097D00099E8D1744E957695D737737BBAB7A96D52 +:1097E0001EFA519D6B2C32FAA99D179650FB4ED94B +:1097F000126A03785BFD0ECA07DA1DB38510AD7BD4 +:10980000233CCF6777E4BC7B09947B9A4EBAF1FD89 +:10981000A97ECE7AFDDE75FB498FECEE55E99D44BD +:109820006655C482F4A1E71998F77B4CD0631FCA30 +:109830006BA4EBF1AF59C85FCE97253CBF69CFBB96 +:1098400069BF45B9F23E37ECF78C68EF5C6B0DBD34 +:109850003D0EDAAFB39CC37CE0A2E208437DEB5C33 +:10986000EBA0DF7F3989D38B9D011E0DE7071E4CCE +:109870000AB60E3F4FBD9FF95CF57782607E26D019 +:109880002FF28A389D8B9D5382A8AF15579CDE031B +:10989000243F64D5A837C10E453B55F1A7E76FC1FA +:1098A000DF85CFF4FC7D7CC777F6DB0D9837B07B86 +:1098B0001C0B61FEBAB73E3D5FABD0A6F693DF044A +:1098C000F4B41EF091B7BC382D7FCBDC5E5BF03B6F +:1098D000F27B7DED57F3BC9B7A9E77F325F0FFFF7B +:1098E00027F3512E390F457C6F054B8C73BF24E451 +:1098F000F1B6F60CA21FFDFB2CFA7895AE37C8BE68 +:10990000E9AF3BE91E403AAA3B4F79F07BD7CCB98F +:10991000A8BD93F74936D30CEF4FB739D4858740AC +:109920008F361EBE7B417B652AFF280C30EA79709A +:109930000CE81D41D74AA069D4F5B212403CEA793F +:10994000ABC7447E457FDD6A0BBD075F63E1EFC1B6 +:10995000EB2C247FBA41FEA09DDE3DC6BA76B580D1 +:10996000A1E54CCB2F8833D013FDAB3E2EC0FDEDCF +:1099700005BDC2E89EE9E72751AF7EF8061802A1AF +:109980008BE13DFDDDABB9F43AF578059B8278DDDE +:109990002D31417C5FEDC23CDCA8B053FEF600E007 +:1099A000C183F9673CBED0D7E0A078559F6425F904 +:1099B000D37FEEFA7948A77B66FBF7A31ED8F3E6C0 +:1099C0008A02CC63FDEB29FCFCBA0B06497FF9D671 +:1099D000F1BC2B9DEE882EE97E85C3E3AF013A2CC6 +:1099E0004BA39BC36F97135E0EBF0DE7EDADE3F97D +:1099F000E6DE7AD6E60056DCD32253BD8FC5FAAB3D +:109A000000BFDEA6DC347A2FD272D3F8A1644D7A7F +:109A10007DF8A5D724C4EB936B54CA6F604DB17E1B +:109A2000BC0F01135123326486F623F8B19DB37F36 +:109A3000FE12C689FA5ABD0A95D949FADE490FC8FD +:109A4000F3FD0CEBAF9C3092FEDBD3C20EE1B9C04C +:109A5000FE624B615F256B9312E2EB11A46BC3793D +:109A600075DF0F7EA8418F3F92C1F9A4DB0E7ADE2D +:109A7000202F578A3CC2BB44691EC75C3E9231B05E +:109A800002EFB7BF74784F976BE2D8E7FE08F2DFBA +:109A900008F259CF4B643616403E1C6B9CAD412EEC +:109AA0003FA3124BF07C31A197819F90EFF3F258C6 +:109AB000EA1D3FF05D5E863E1EC0E9F9884AD0F897 +:109AC000CE5FBBBBABB16AF87C66D8CCF743F9A7D5 +:109AD000A556A2BBEE0D194D23E5B7FCA972EFA068 +:109AE000C857EAAF6BA33CD53D4D5C3EEC41795580 +:109AF00085DFAD9A43FEEE369147A2CB9DD1F05E55 +:109B00002DC67B7ED5C712DA4793D4B884F450B4FF +:109B1000462DC00F4E740B7D0AC329E23D16D9A510 +:109B2000F788FC3BBDD4C7A99E22A79DE39E967CE7 +:109B3000E2B75D2D7E2AFBCFBDDE80F1EBBD8B1839 +:109B4000D9A385CB93E45FEAF8B383CD8AF82B5190 +:109B50004DFC67E2B7BD6F9E213B725B4B25F1ED7B +:109B60009E8238C9056F1DBF9FF02D4FE7D7ADAF5F +:109B70002512BE5AE2777AD761E6475FFB7B098CF4 +:109B80004BDE536A0BB9EAB05D7AFF2FEA1C3FEF58 +:109B9000B98F5AEF4D1420FFED3E04FC77D50874C1 +:109BA000FA79F980C5BB1A47A07B33ACE3F1592F92 +:109BB0004B93B7BB5AC05573E2F9BBA82C5CCEE5FA +:109BC000EDDE1699A99353F748454D26B96A3A3701 +:109BD000B62E3DCFD57C6EBD12EC3F8479A4B93B47 +:109BE00046DAFF9F8A77BD34E781F6D7B7919DD0DB +:109BF00053BF98EC844AD766B21FBAD5391318E11F +:109C000085C7BDCCE3EA79D4C3E446A3350D7F7A9A +:109C10003EF5EFA70C2E40B95A9221BBF1BB233978 +:109C2000DAF905F30A2E3DFF59BF571C6D7F95AE3B +:109C3000E5F4CEA21FE407D905753F2139B2A78903 +:109C4000EF635B469CE8EBB5C39F2C68C7EF948835 +:109C5000FBFB0F0E97CDD7B81DD58BF9F8725B863D +:109C60001FF3257F53E92779D0BAEA9933A4C75F58 +:109C7000B5FA518F57AFB9EBB798F7F408CAC52AB0 +:109C8000EA5760BCD7F8959023EF4C61A67C4CF660 +:109C9000B9E2EDFF1AE4EB182DDEEE1A1FCE984A5A +:109CA000F7937E87783774D17CD6FCA95FEC7B7CF8 +:109CB000D778B5C838FFE96353270C78C65EC794D8 +:109CC000A95F6C5EED7A37CFAB5D7FDC166A65A964 +:109CD000755CEEF700519CF07B6CC52B81CC69164E +:109CE00047E764FD8E128CE3E45BE95DEAB5560F4D +:109CF0007FDF7D40223FFF6EED94A312FD18D5A3B8 +:109D0000E0FD6B068B3BD08F5DD1E012F74109EA95 +:109D10001F10FDEF8E3BD3E2B3DF79CA99165F0CBB +:109D2000B0ADF4AE670573A47E073A099C7DF72CAD +:109D30002AB180E97766BDD3877AC48D745D309C83 +:109D40004FD69E75BF70CA30FE2D53C1EF9E06FFE1 +:109D5000F125F625F2B344FFD1E4C8EF5B5C2F9CFC +:109D6000023E5BE650EEA0F346270EE4D49629BFF0 +:109D7000AA347E1F2C250F381E33D624341EDF8ACA +:109D8000713BA792D5611E5C54D9E1520DF81E6D4E +:109D9000DE4D405349E24FE5A27E82D3CFDFAF8D47 +:109DA000365ED585B693D360C9EE4A46F1B58CE2EE +:109DB000EEC42280EFF9B15B73E5E3EFE97A79D382 +:109DC0000303A717C1F9B95996DC86FD12F7BF81C5 +:109DD0007A37A3DEE1471C976B07348CD77554B2F2 +:109DE00038D269E703DCBED8162CA575966FED72E4 +:109DF0008D24AF76B610310DC1190B629A1DC61FA6 +:109E0000DFA4E217CA86C6C95B60A1BB587D3DFAD4 +:109E1000B8A3ED7FAC7175FCEBF5E6F19D4F7C804E +:109E20006FCC596C62EC9798D7A5ADF7E1634C16EF +:109E300093B493D3102EE7F7A3EE43137E81F5F38B +:109E40002D591824679D13A309FC6E8FFA7FDC1A25 +:109E5000EA95AA0B96971FC57812E00DE3849DDF63 +:109E60008B28CBA15C09C2BE4D263881F52B5E99AB +:109E7000A2B5015F3883E97A726562A105F966656A +:109E8000714E8C68F902AC17FCFF95F8DFA05762A1 +:109E9000C51692A3E70F48FBD07FECFC636C6321EF +:109EA000C0FB0E4BC7DBA0C98AC4C293C477B132D2 +:109EB000EABF4FE0B303F13339B5FF15C1E8468C73 +:109EC000BBAC38B0E80A24FFA1DF0F6DA7F1DC9529 +:109ED000E23CC47D5446301D5FB1D8EF7E8DFAE27E +:109EE000FC21298071DD95893F10BCF24076E9485C +:109EF000EB5E91E071991507021497D1D7B3F2D0B8 +:109F00003EC7A2ACD43A2F755DE6F334AF6FADB067 +:109F10006FDB5DCFF7607CD8E6FE610FC679AC429F +:109F20003EB48F125F1A98CAFD53FD7B50B00F2BC1 +:109F30007E2FA1030736ECAB9D9190626F4F954643 +:109F40007C4FD62EEE81E90FD72DFB49EFE9F56F57 +:109F50000B3D84E32B79C867E20FC66FC913DF9707 +:109F6000F2E3FF45A7E13D83B38AF32DB3AD65F876 +:109F70006EDA85F93132FEAE25E87D9F6C09CDADF4 +:109F8000433960FB78C0404F992E164AC0FC99AF08 +:109F900059298E07E324DCD3713EDE8ED61318A137 +:109FA0005F7E84E17BDA4C8545B46C5C0FD4BB0CDE +:109FB000EDAB3485F206FC2C32B760787F26C647BD +:109FC000D305E5AB59FE4AD344DCD3247F9987CB34 +:109FD000D5D1E46F4A3F45E89DB0B3DE720EEF3550 +:109FE0009CC10F5B502F38597DEB901C33F8073F15 +:109FF0002BB588F7C9BCBF0B8905E384CBB91F51CA +:10A00000147BAC15DF29C2B90E5AF3113ED43017B8 +:10A01000F7A7B8E2A8378B628F37607D20E2F55B47 +:10A02000A8FE89863900CB7FF48964111EA7C3D0AE +:10A0300010D27B51ED8BFDF8DD981AF1CD8DA2DAAF +:10A040003AB2EB8A22A6785D281D36CBEF896C9058 +:10A05000F255B6867E42EB7904D683F19D2D95E7C5 +:10A06000FB1BD06F445328949ADF2FE6D7E954FFA7 +:10A07000FE97A7C67612DF33605AAE554EF1CFC4B5 +:10A08000E0C9FB252F9680BFE929BEE944BE017EC9 +:10A09000F121DF00FFA08EC773E9748B7789F92A5D +:10A0A000C5DDF475DE388DD373F76C96C0B8C7CEB6 +:10A0B0000D3C7FA9DB2ECFC1BCACEE6C4B08ED8014 +:10A0C000EE2900E3FD658D2344F97EC595CB489FBD +:10A0D0001783DD8BBE6E7BBADD7BF5346E27B1E274 +:10A0E000DC11F5BA59DFF69F7352FE6A27CC8F6BED +:10A0F000EE7C7305F997DD05FCBE64E7ECC17CF4EA +:10A100008B03F5D79DC67DEBE306EA5F7C43F28EB9 +:10A11000BD9E21FABBC4F5E870474B74CA3B40BFF3 +:10A120000FB6F450D9D912A3B2A7E5D09477289EE0 +:10A13000152738D55FBCFBF4717F2C2398AE9FBDEB +:10A14000B5E9B06CF2730BD474B8C8EC8FE9E34F87 +:10A15000626971ACCE96E7681DBB5A12B4AE075B5C +:10A160004E8B752609EE6879236D9DE679CDF398BF +:10A17000D7695E97795F66BCB981CF917E6D3AFDF4 +:10A18000D5FD84844AD93475CBB459741B48DFC7D4 +:10A19000EB387B5F1453D53A2F5C9F443DB4A558F0 +:10A1A0007C076176442B453BE615B786F17777E56A +:10A1B0004C3AD7FEFAFD2EB48FB7D49F77A19F34C7 +:10A1C000495B97B6AE4AD72117CA97896BD37FEF01 +:10A1D000ACE4711999ADA375EBF290C99C1ECCFA51 +:10A1E0007C484E7D924B71A6B1ECBDFE601BBD1349 +:10A1F0007EB0D842F4FB6070C73C5CFF83F5FCBBCB +:10A20000CE0F0AFDFF61907F37C4C6069FFF0CEAA0 +:10A210003709BB4EC793CEFFA482AC788E32C5916E +:10A22000597D7244BBCC3B97D1F7C85955D265F4E0 +:10A23000E71E2CFE09DDD7C92C42F878B0B894DEB1 +:10A24000296FAA4B6E463E63160BCB043F2C6BE284 +:10A250008E30E21FCEE59FA619E47367FD6A19FBF5 +:10A260004FD2D2BF7331716D3AACE38FCD1EE0FA9D +:10A2700092F17C52597C2F42C7B3BBFE2DAABFE797 +:10A280005EE88EFB0C9AF9334A72C82BF02D49B365 +:10A29000389D333BFB2C33859F7F732B495CE77ED6 +:10A2A0001117FDBEF0A33B05DC234AFD7D774C94DE +:10A2B0000F8A528FA74E39BDC087FBEC10F06E514C +:10A2C000AFEFA76CB325CDAFF154A5E7A5C8F5391D +:10A2D0006970815A98D6BE6879695AFD94B37CBE7C +:10A2E000D1E827A0A5CFE7AD4DCFDB98B4367D3EB2 +:10A2F0005D0F64040BD37E9F18499F77B4F9B405B2 +:10A30000D63328EFDD950E3FEA5177E5C624CA51D2 +:10A31000772597A7E6F331E09F558D4FE14DC7971D +:10A32000D51299576AB0933ABC91E5FC1E282AE2EF +:10A330009121FFFC8BECBFBF98C753B70639FF6C68 +:10A340002DE6EFF8B61EE0FCB335C8F97743C92E09 +:10A3500005E3A49BBE07748AF78089FB19E5778023 +:10A360005D8A7C12C77B17B04F9DC511A6C2EF6EE8 +:10A370009BD64FDF17545900F36EDCAE683F7DBFAC +:10A380006829C030AEDBC39E273821EA6599C3A790 +:10A3900078FD36C17FFAFEBDC503ACA10A4D83A886 +:10A3A000844AFAB627A676233D87986C35C294C7AF +:10A3B0000A7E4505C0E89F1FBEE09C370BF723E4EB +:10A3C0009BED81082B33CAB7D079F2CBEF9903C745 +:10A3D00077D5707904789F51352B85771D6F8783EA +:10A3E000FCBB22F407FBCCAA94F7F1F82A873D4185 +:10A3F000FE7D8E862AAEE781CFAFAE9A95E2F3C39B +:10A4000007743E4F979766F969969BB7E19C467B28 +:10A410002E6451D04E72B235A97E015AF77538DFDD +:10A420003EB1EEBD82CFF608D8C9E493183FCF42C3 +:10A430003A017D71E754F5ABD87EA216094F05FCB1 +:10A4400007DAF9F749CBA6295FC3DF276977A6E9C1 +:10A450009D896BD36199DD49F39BE57B816A619AA4 +:10A46000A15D4D22836986FDF9EA72D2605DDE6FDF +:10A470006D0951DC7C7F4B1DC5B97B5A142ABB0288 +:10A48000574AA8CFD66353183F87C9948F9C891029 +:10A490009425A16403E6DD3C8249E7304EF1E6787D +:10A4A0003F4E5FA86ADCB886FDA23C5F34556D461E +:10A4B0007E72DFE9D0F07EC81D8C509EE2A6EF25AB +:10A4C000E76472BF3F84FEE106FCA003FA130B1C95 +:10A4D000B1C968C7DBB8BD37FDB918C3FC18A78B75 +:10A4E000C3EEC41F4E623F6725AB711BF83FA33814 +:10A4F000A6D07B665BB8C0C8873B853FF530D0E30C +:10A500007CC14FA5D5B86EEE4F4545FD866F762BC5 +:10A51000A877DDB610E79F9B590DE7273FE7AF7996 +:10A5200000133FC9BCBE51C0729CBECB0ABC4BEDF0 +:10A530005DC51AC3FCDA0DDFBCF70CEA7B7731F39B +:10A54000D37E041FA7F83691A071433ADF26F9386D +:10A55000B53ADFFA4F12BC59E7DB1087B7F27A7CC5 +:10A56000A088B01BF81EE31C3A7E674E5377211D6E +:10A57000B9C38E7318A7D2F1AD9FC7DD53D547A8D5 +:10A58000DE741E85CB999689A185B59CAF1E9EC8A9 +:10A5900062784F39710DECA916E1E4518461F94CF0 +:10A5A00036C045CD202B7253308CC3FC867AFD1CFF +:10A5B0001E9E1829F018FC5A1D3F1941C08F84E7D0 +:10A5C000DA4BF87107A34CADC67766030D18C701C7 +:10A5D000C39FF69FE14A72788D803D090E47383E51 +:10A5E00032E438879B797D61302635C0393CFCA93F +:10A5F00075C4EF8F2CAFE2F67B5608E8DFC03777E3 +:10A600004E534F217ECA36033FA4D9AD4A1A5CE9A6 +:10A61000E27EDACE3B2DE4A7ED5C50EA1B29DEA6F4 +:10A6200097FB445C01EFCDB1EC6991D3E242E6B215 +:10A63000607D3412E6E77606EFB33695FB4B51CEDC +:10A640008DBB39C6E8BB4B55DCBFDFB0EC45D2173C +:10A650001EF1EF7AB813535A6D9CAF6ADC80178FE6 +:10A660008BFF9EDDC8F9C8E3E17C9459256099D73A +:10A67000BBFC1C1EE2A720F013C5F722F9467EDAC8 +:10A6800024F8A52027AA1AEF75F5F5BC2F4A9DDE00 +:10A69000DC77F2EFDCAD9FA6FE369D2EF977EF0654 +:10A6A000859CDD3B2D3C8872E2E13B79FC3170B347 +:10A6B000FF24EEA3A28B614618FB6F21670A1BE300 +:10A6C0000DE8FF07B7C2EFF053BE5F95E81DBB98DA +:10A6D00007F8ED1CD2B5B34AFD6F3E1FFF0E934E37 +:10A6E000E7794D9CCE2B7A389D6F2AE7745EDEC5E4 +:10A6F000E97C5339A75B2043A2731D2EDBCAE95CBA +:10A7000087611CA2731D1EC24F7924DF63A0B70DA1 +:10A7100013EF7DE3E274AECEC1B812EB1174EC0A14 +:10A7200073B84BC01E85C35141F77288C3420EE413 +:10A730000555A2F34D48E728E76CE197887F17E4B9 +:10A74000489A615D1F0BFDF8B0629B37123FBC2831 +:10A75000EA5F99A6F8ABA1DC58C0FFFD9F875FB206 +:10A76000C732611C47E1E604FACB1B2516C9047DFC +:10A77000BEB1700BC18E525B241348D951B495D72A +:10A78000CF7151FD86F11B79FD120FC1F6BCB56783 +:10A79000D0BFDE30D111C2F0CA86BCBF21D85EE284 +:10A7A0002278D3B7EE1D5C06A57DC2567A27B0E1AC +:10A7B0007646BF83DB9F8FF1E009B99E38E6A56E30 +:10A7C0006E6187307F6C822D42EF9C266811467C3B +:10A7D000EF677EC4CFF820C950A007B6CF82769F1E +:10A7E0009F1DAA32F0F715D59CEF574BE106FC6E82 +:10A7F000EDD038CC467CC03C33791CAE85C5820692 +:10A800003B64767529F573C861CA7302DA24FAB31A +:10A81000CB403F23E9D520BB81D6C55C8378EFA030 +:10A82000DB57297F6AB58BECBCE07E17BFDF5B4B43 +:10A83000FECF96629E77D3507E80FB81C103E407F2 +:10A84000C2EF745F16C0BC008AA7A7DB255EBCF709 +:10A8500033E4778E60A77CA31AD6D52BEC9303C282 +:10A860003ED9529748F3979C4CB5601CB44FD44FD7 +:10A87000EC4A46519D83DDB20CFBBB6B56CB88E2A4 +:10A880008A9E21BBE5AEEA11EC166F3BE897E9C35F +:10A89000ED17DD5EF1B6C7291FD96CCF78DB37879E +:10A8A00029CE817E12ED33C6FDA6F6A842DF3580A3 +:10A8B000DF719F59B583CC41FE986B90C78D0ECC4C +:10A8C00043BAA944FF4C4EF9E70E1157CD77F3FC7C +:10A8D0004A188BE2E5BF7FF36192339D1E96C60F47 +:10A8E000ADD5DC2E681374C264AD10F1EC9BA6AC40 +:10A8F000C77D021EDBAB47B0533BE01C8DF2BFC3EC +:10A90000CBE8FE4C9997DD8072CC992FD7D0F7C851 +:10A91000C4BFE76597B91DDB59CDF9EE1776A513CE +:10A92000F1ABFBD91DC53CEFA2A372079D7F47F198 +:10A93000C5F3B19CA67C914DD7F2FC901E918FE897 +:10A94000CC608B703D8F88F90E544BA2E4F0E60585 +:10A9500047E6917F5B6961DC5FE2F108B39FB4BEBB +:10A960009AA5DBC595FCFBE57BA7A987112F4ED5E2 +:10A9700046F2DD590CF20DF547FEC87153BDD4F90E +:10A98000458F7FCB551A3E376619950926EECDC205 +:10A99000FCDF33D324BC5F7536723CCA4A54C1F322 +:10A9A00076CE92E97B7D09715EFAB86BAAD57FAC51 +:10A9B00036C4BF9DC5FC9DC168715CF37AB26C3131 +:10A9C000F2F7B2CADB2D4A29D1938276AFEC12F9A5 +:10A9D000FE41FE4E46F670FDA9F77F49D0CFCB3A37 +:10A9E000FDE402FD5413FDFC50D0CF2B23D34F8E3A +:10A9F0003B9D7E069673FA69951C06FA51583AFDFE +:10AA0000BC2EE601FA791DC7D5E9A7B38ED34F67EF +:10AA100090C7913AEB2E937E1671FAE9088A7797E0 +:10AA2000E2F7F704BDAC9FA6BC83F4AAE3D31C4FA6 +:10AA300032E373F382A21B88BE1A057D358E4C5F0C +:10AA40003FD4E9EB12CFC95D17A1F7AD3A9F7B5414 +:10AA500026E1FB958FA6A917101F9DC1689A1CDEE1 +:10AA600054BC9FDEDF592D518A5FB18DFCBD8AD267 +:10AA7000D8CFAC17E153DBF4213EB54D273E3D7FE7 +:10AA8000BA0CF934C4BFD3D951BCBF03F38C3B2AF1 +:10AA9000459EB290E73ADFEAF8D9D7CEFD517D1F47 +:10AAA0005E13DE1125CB73A0047BCE09E5D699EFAA +:10AAB000E5D3F778969E9447B22FBDB53BE6935CFD +:10AAC0003CFBECED18D7E8A88B7718E539F8C3C53F +:10AAD000D367211DEF4856F853726F2C3F53E75B45 +:10AAE00056CFED38B39C76B78F7C7EE638974F0112 +:10AAF0007EF6A7F8BBA04A6EC5F3D2D7EF1BE2EFF4 +:10AB000018DDDB3AEB64CA2F2858CABF9BE99C22A8 +:10AB1000D37BB5FAE9E9FCFD51B5FAA5E9E38DFC73 +:10AB20009DE47ECE25D2CDCFAED0BFCB07754EE211 +:10AB3000CBAF4C1F812FCDA5CE971D411EEF7C546E +:10AB4000F1EF33E6BF7F53D0C947D3941BA653A977 +:10AB5000DE8CEBDC9555796329A72BCADBD92571EF +:10AB6000FAD31EE4F467B530F5C92AA4C38BF3FB0E +:10AB70006DD387F8FD363AD72023BB775EB5BA9000 +:10AB8000E0CD3C8F3CAB56C85F717EEECD239F97E6 +:10AB90002ED7B2669F9A87292D402F8B711CCFB577 +:10ABA000074EE3754DC7D9FB929872D3BF95C7AFD7 +:10ABB0007A97F3F855EF560B9DCF7E11EF450AD1EA +:10ABC000AE2497862E7BF62F5FCDF03B671F22E1E8 +:10ABD00087C6A6B7472FDC9740B9FAE813763FDE61 +:10ABE000479BE9CD59DF95A8847AF9C76E2D333F8D +:10ABF00075CEBABCB1AD13F2672BDFE7F078B7764C +:10AC0000597245B7D79CD3C2EB111F0AFA33595C6E +:10AC1000FF1BE944B76786D18923E4E7F1413E5E33 +:10AC2000061B48A03D0A7E400CCF47E7076D7AB867 +:10AC300013C7CBA81C645C2EF1F7ECC3EC061448D8 +:10AC4000063AE84ED14137F50F72FF27A33183EB67 +:10AC5000DF2AB50FE92EA34EFB00FDA18CCAC86503 +:10AC6000F187531950906FC1FE7A09E30C658CBFD0 +:10AC7000472D2B8EF672F9E2A2EF1918F67108D75C +:10AC800051B655DF8790AFDFE1F48D746FFC6EE352 +:10AC9000AB62FDC027C7B09FB9BDD2784EB35E642A +:10ACA000FFCFA4E4F133D3C91E89BFD482ED550B85 +:10ACB000C57BA11C2D5E7702DBC74CF1723D3EEED9 +:10ACC0005F1BA1F8955F830961BE009C177ECFC30F +:10ACD000BF2E19AD606407BF88FD9DABDE6A70F9B9 +:10ACE000B15D52B783FF057F1F8BCE6DEB4691A7F9 +:10ACF000EAC8FCD9DFBC83FCFF1E85F9519F6F5861 +:10AD0000B6F125D433CE660B8611989CE8E0DF932C +:10AD1000552D31B2DBD552FE1E759473D6F31BB69A +:10AD2000621CC28971B628DDA7B3208F67395D31F7 +:10AD30000E570AD893405F07E3541C96931CAEE568 +:10AD4000F12E8C1F1BF337BCCA20C945AF9293C0AC +:10AD5000772FE6FC07DF727E2FAEDBF559A18CF46E +:10AD6000FABA9C34D82EE86B83A7EDB402F33B8289 +:10AD70005A25EAF72BA6AABF47BA59151C785142A3 +:10AD80003A2D6416F29FC47BEC6BADF5BEB7E83E7E +:10AD9000987F772143E272C93983DB670E3FD7374B +:10ADA0000E8D85627EF27B34FA8EFE535228014D61 +:10ADB000D7039E1AED384FD83A6316C64B061CC807 +:10ADC0003FFAF866BC7A6688BC895CA1376D5AE5A3 +:10ADD00048F7593A7FA953C3DE19E3F93AD1CFDBDB +:10ADE0002CDE799ADBDF39AD216706D177F8F4578D +:10ADF000D0BFAE667E8C036DB830D785F1978D5984 +:10AE00003C6FEED1BFFBFE1DAD367E4F7033DD8F44 +:10AE10004289EFAC3CDA4294BFB1194C6BAC8779F4 +:10AE20006CDA3C8427CF88DF910B78DD4C415BC620 +:10AE300096CC483E8CF9961B10367C3FBAC7CD4461 +:10AE4000BE6EF28E4BE90F9448FAADC0A94EC375A1 +:10AE500067AB2EF203B31B071DC827EF8BFC956C65 +:10AE600095B51BBF471913F8CB1671AC6C3D6E2519 +:10AE7000EEFDE7CDE0FECAADA2FC4BD1DE5BC728FC +:10AE8000EFD2099613CA8BA8183F5F654487D9F59E +:10AE9000F23EE4DF763987E4A96F11F717E6E8FDA3 +:10AEA0006B6309A41FB0271A6618EC095F3DB7272A +:10AEB000006F745E3ED89723407EC5F5D80EFD4FD7 +:10AEC000CCA3F028E07F023EB2EAB47EB453F4F69D +:10AED0009D8B007BF0DF9D825EF2D5019267D90ADF +:10AEE0009F5F9F272CD6119BAE7C0DC7D5FB6F991A +:10AEF0001E9ECFF117D5B0BDFEFB2E1CD707E5D0A7 +:10AF00003E930A8D5BC9ED24C08784F1E76FCCE0E6 +:10AF1000F275CA74E5EBC6718F55ABDFE2E3C61478 +:10AF20001CD75BC7ED04BD5E2FB74F0D2F46BA6F20 +:10AF300056E3D7390CFB329CEFB7B17EB4F335D36F +:10AF4000B17EBEF993F87BDEFCB230BD8FDBBE6212 +:10AF5000E6A3F8FE2FDAE8D81A823936CCE0FF7E75 +:10AF6000654FF66013EACFED0FC824FFBCB5722918 +:10AF7000E66D78131D8751FE79EB7330B633749FFD +:10AF8000EC45FE0604742AFC9DE7F95AB60FED92D3 +:10AF9000ED9F72BC6FBF8A1DC7F78059893314FFBC +:10AFA000DF3E4AFE59563049EFFEB26A55CAF3DA1F +:10AFB0003DC39F9647955597A4F1F47CAF9E6CEDE9 +:10AFC0005D8C07753638FCF8EFA43CDFF0981BED7C +:10AFD000B76DAD0E05D7BD6DD19D16CC938ACEB69B +:10AFE000D0BBAAE8038CF6935D07FB01383B71F8F0 +:10AFF00025BC27CB3E3D8EE75A89FD648BFC34F897 +:10B000003B43EF0A6AF388EFB31B656951566ADD6B +:10B01000DEC4BBB49F071FE078F7060768FDDE3A81 +:10B02000352D4FCDDB08FADCB0EE98695F6639BD8F +:10B03000D1AEE6635CCC2C5F469353AF4C6BF8C14A +:10B040000C83FC1BCBBEB8D4764BD6CE65FF7E05F9 +:10B05000E87B07CF27D0BA258ADF3CDB55731DEE8E +:10B0600067D9AF798EDA92FB6F7A08F382AE7A5B9A +:10B07000263E5FB23B9BDE6D7E2719B98EF2C1C0C2 +:10B080000AC5EFD04FB0069E1B8071263CFA6A6855 +:10B090003DA060E749F69728472758BF5BF35DD28C +:10B0A0009B8ADF03F85FC4B8BE9860CDBE0EDF5741 +:10B0B0004FB8D5116A87FEFF69975FC477E79ADBBF +:10B0C000CB304F6851FCFE45343E7E8513E4E122CF +:10B0D000974CF3B9FC724E2BC0133298CB3D93B111 +:10B0E0002BDBE417FF16C6195C9125EFC7F79575A2 +:10B0F000F28B7DB8FE4889CCF3A46269E7B14C09B4 +:10B100003B508F4F3BE4483B97EA783A3CE3B974B5 +:10B11000B826910E5F713A1DBE09E79A85D72A714C +:10B1200007DE8F3395450E820FF4AEC8AB5A21F27D +:10B13000AAFEF1532BC37D0F1ECEA4EFC2E3F23063 +:10B140006F75E5916ABA6F7DE68FF7501C64F04722 +:10B15000FCFDD83353F57FF7225682EB7E6FD70F75 +:10B160001EB91FEADF7B7C420E92F2C95F2FFEE51B +:10B170008F61BCBB2D590CE9FFFD96640F7ED37126 +:10B18000EEDD274A50FFBDFFDCFF7A04F1F69B633A +:10B190004EFA7EDA6FC477BCFB7FF10FBFDA85F31E +:10B1A0001ECBAC41DFE237479FADC078C4CA23FF56 +:10B1B000548272EEBDC78F5C49F0E387A763F9DE66 +:10B1C000E11F542C223D142B417B531FE7EE27DC5B +:10B1D000E7C65DE43BEAE671FF1F96EC3350008062 +:10B1E000000000001F8B080000000000000BED7D38 +:10B1F0007B7C15D5B5F09E73E6BC724E9249C813A0 +:10B2000012980309040C30092731BC278788019163 +:10B210009E00628280272142402007D08AF76A99E7 +:10B22000909497A8A146042ED803168BD67A83B59E +:10B23000CA456C437888AD6DA305AA1434204554E3 +:10B24000C4542BD0FBD3FAADB5F64CCE8304F0F644 +:10B25000BBF7BB7F7C879F4EF6EC3DFBB1D6DAEBAC +:10B26000B5D7ACF9E4F99F1556E632B6E0F9E786B2 +:10B27000E0F593E77EDABFD2C5E017EC5D16CBD8D8 +:10B28000BD26E66F86FBF7BEB0BAAD471C5C77C53E +:10B290006A785DB0EB91BFF2ABF036BFD651FD02DC +:10B2A000C6C4A244C63E8E65E5CD2E6C6F63CCCE7F +:10B2B000E8F72DFC37609335A2FCB18595BF04ED0E +:10B2C000060623EF9F13E03E8C9B7371E644771CC8 +:10B2D0006F87F33807D7DDD0BE16EE27C0FD8B8C05 +:10B2E00095E2FD6FF1373674EDAD088C2543BB3D1B +:10B2F00091E3EF15BB6E9FA598A87D0EB3E2FF7892 +:10B300007B37633D6D2C80EB886E3F08DB1730F692 +:10B31000FCF39DEDCDDF9AF973720AAC9BFE60ECF5 +:10B320003581CF1B7EF7F52A84FB302DD63774FF8D +:10B330005E16B66E18EF4B7BDC0E299EB1B787F216 +:10B34000FE2F5BD8DD3EC4CB0AF589B3D9B0FE151C +:10B35000AA5A6209CD63EEA62587D393185BB83B42 +:10B36000391F8737EE2F7CEE19D35D70FF826AEFAD +:10B37000302950AE78F6B111D8EE397333CE6BE187 +:10B380007307525458D785E64371D86EEED6847C45 +:10B39000B31C7A7EDEA65BD4929C10DC6EDA158933 +:10B3A0009FC1CD91E5A17B22CBAF16751CF8D603CA +:10B3B000EB6BB604ED025E8F8DEF05E3B04D82922C +:10B3C0000DE3148A7E3383FA588F6AD1863336F6BA +:10B3D000EB5F1FEE09F5B5AF1714AE83FA7526DFE4 +:10B3E000D4DBA1AC3D6D5676C263BF3C5A65665056 +:10B3F0009E379899CC098CB5E6FCC87A06E63F0BD7 +:10B40000F10C705A37DD55137461BFECA0299FB160 +:10B41000B89F08AA5E7ED704F4C8D4C6D92DF0FC24 +:10B4200079539CB2CE43F4C9B03FEDE7E6E04E80DD +:10B43000FBD896157FC4F13E7EC1A2AC63B8FE482E +:10B44000BAA9D967D16C43607E3BEBE38AA1DF5791 +:10B45000FE61164468DFB153507684C1BD069090FA +:10B4600006E37FB23D768D0078FC2439D85B42FC40 +:10B47000C5067B27F2E7EEF6C1B566D71B7F17A09E +:10B48000BFF9C1C871A2E961A54EC7F0CB09A7AB4E +:10B49000E876F013C5C250FDC2E5B73D7176581885 +:10B4A0003D9C6DB4321877FE24EB35C703BA643285 +:10B4B000C1C54170B97750737F0B940551F236A422 +:10B4C0005333C10EE37C827FF5E36506F35A807443 +:10B4D0000D24FBE5C9371E33037DF73437BFBFD8D2 +:10B4E00083BB82B19D0AF193552F423F9F429B75CA +:10B4F0004A685E8BD3FEB8A9A447A87C61CF2F56BB +:10B50000FD1EE9D6EF0A306877416E894B04F8EDED +:10B51000C57D8EF42AF1B2D1BEAEF9405C3BEEA3FC +:10B52000E61E5E33F083BD3F17124D00F70BE79F19 +:10B5300075B22EF6ED82F3895EEB90ABF912AC9802 +:10B54000E07C1AFF047A7C4E517FA2005DB1069820 +:10B550001CAC3BB547202FD0457FC67389F627FE2C +:10B560000DE15D29F0E77F6409E4111C67B91484DB +:10B5700063F473CD3AFFF834DFF70B1C27CDDBA65D +:10B580009AA17DDA44A6D443171F9A95EF4B00DFAA +:10B590007B98DF8A30640DC9348F790CF04870577E +:10B5A000C6E3FE593009E009FB61CEB4C6F148CFCD +:10B5B0004D4B98622E82B2185C85E5398C059E90C1 +:10B5C000609FADB731356C3FCF6D8272F8FAB786A8 +:10B5D000D503FE16FC24B2FE5ED642E32E7CE15B70 +:10B5E0005B783F8C35D23A6083597DB0A7BED2E1FB +:10B5F000F769BEFA16AE4B98029DC03C97FD5C08F9 +:10B60000DA000E49D6669A6707CC7307CC6BC6F290 +:10B6100071EC4380DB5FCC3E5A6FED83956A3594C5 +:10B620003F5F3E47AD06D0932842BED12C707A2CA6 +:10B63000693E4C7C84492FDD9506F3B1FBA83FA001 +:10B6400079E9561877C40B65B46E56C3A4DB7A410A +:10B65000B9A68CE03422C02406709AA1E3891DE5C6 +:10B66000783D01BC14EBB5CDBCFF794C2378CF6796 +:10B670006DB4DE8F9544C2EF91FD569AC7977B1249 +:10B6800082362184C72F99128FFB3B35863147E2E2 +:10B69000D5788E8673CDD628B887C3B92FC2371216 +:10B6A0004F8B5F06787741A74FEAF2E37DA6D23A47 +:10B6B00042F45847F878B24EE072472BABB807E631 +:10B6C000BDB1A290F8EAE30003D653EFA808F92C25 +:10B6D000FC3582CA2D76182766586799EA0B57F20F +:10B6E000B22DAFBE7C5306F463F1A74B80948D65F9 +:10B6F00056D682FD8B410783EB648FDF9507E3CE3F +:10B7000031FB0E9B003E678BD5FE44B7CB399C9F27 +:10B71000CA0F0C0C7421778DF53C9E10A823BAC873 +:10B7200063D28E3CA22B2A3BFB3109E93BB637C7DB +:10B7300053EC9098E0CA30F8A79A98D615DC3BEB0A +:10B7400045A6B912E9CA62F10A03C65EA33DF02913 +:10B75000825FEAA0C0121C3FD524B37A984FAA3367 +:10B7600090B73437AC5E6C2CC6F9A401DD69B0BE6D +:10B77000D833CB8AB17D6C3E93EA61BE1B05D8CF2E +:10B7800048570F0B24BF9CFB76B720DD2E2A954D22 +:10B79000C89F93EF5C4FCF3F9A2F9BCCD0FF983C34 +:10B7A000CEE7E35BB9BCDF2C6C48C7FACDE9B280C9 +:10B7B000FD795E067906F717BD5C6C5EE4223C52AB +:10B7C0003B98D77613CEF3EE9CFC7AA0DF717932EA +:10B7D000F51333AC713F3EDFB1442678A6ADD4DC1F +:10B7E00038FFF8561DCE651CCEC9773E5487ED1E36 +:10B7F000E9C912711E69AC4EC076AB9239FDACAA94 +:10B80000E47A98C82415DB65944B42DD702C078AD6 +:10B81000F9BE93127E9B8E65D6100F72EFC9383E2B +:10B82000AF6493F9EE32B83E99CFCB890F09EA0E97 +:10B83000DACC1B687EA936562A24F2FBB82E203DAE +:10B8400075B72B0CBEE338BC53FBF1EB40FB11D7B3 +:10B850006330FE7D020BA0FC7E0BC66E23FA6B717B +:10B8600021FD7D6E51538721BF7DDBC27602089298 +:10B870007A47D6F7CD2A8DF70D66EC6FCAB8786493 +:10B880002A7F73A9F10970DD83FA55177CBD368FC5 +:10B89000EB15B5577AB160987CAA2DBF64C5FE6AD6 +:10B8A000AFF48EB87F6105CC7C4098BCAD691D8F2C +:10B8B000ED16B1B655B85F16359B59306C5FEF7118 +:10B8C000F0712F9FB2115F59B6B6DF0EB3FBEA7D60 +:10B8D0005C7BC5CC34D893CB013E28FF42E35BE9C7 +:10B8E0007EE7BCAEF4605A97F34C89BC7F45882C48 +:10B8F000EFB9ACB713E93E2B6A8F433EFEB1FDC0F2 +:10B90000A6B3509EEFF8ED26E49723CD269A2F1389 +:10B91000E5B83280E3C83EACB33C05CB6681CA864D +:10B920003E3F09E43AF271209038B4232E2A1FC614 +:10B9300021DCCF885C8E9F099AB4ECA108373BD3F9 +:10B94000006E67743DDEE8CF989F71FFA2D44E72FF +:10B95000BFA719F4712CCBED117A00D6239C2F963A +:10B960001B7CA945C4F1B628FB4519CA0B95FDE31C +:10B9700059187D85F0E2645A185E52EADB5A4CB0E1 +:10B98000DF5ECE7B6F53AE0348B5D5E0877FDEA484 +:10B990008E827AB329823F3A3D9DFC92D8F4932659 +:10B9A000B3CE5F4F6E2A19155EE6ED43CF9F2A2F67 +:10B9B000017EEAC9E5CFFF2AEFFD77578A61F2548D +:10B9C000ECE88D78E82CDBA3CA2E280F0E2B4B5108 +:10B9D000F54951F56951E50CDE7E767C7B8119F4E1 +:10B9E000AC37F3CE948BB08F67F76ABF5F80F2FA03 +:10B9F000FAB3E525509EE3E17C6CF13E0135D14E72 +:10BA0000F82D5618E9D72EA5DD3A2717E1A01C36E8 +:10BA100041BB857B044980FDE76ADEDD827C6921CC +:10BA20003E27873DD7CCF5F285CDA7E9B96EFBCF90 +:10BA300031115F58977386DA2D5AFE9915F5CBD5DB +:10BA4000F2521FCAE5131699DA89CCAFF6827DB39C +:10BA5000784F19F3BB42F2E462BA7A00E7A3BD2E35 +:10BA600048C80F3AE91DFB7585F697D1FECF83F7DD +:10BA70001DEB8B7CFABEBFD689D0FED4A28F0A7094 +:10BA8000BC3F6393E1C8CF8303519ECDACA91A8814 +:10BA9000F7672DCADE0FA281BD6F69DF867AAA2300 +:10BAA000FF3F097EEFC7B6670AA0D738F32D1554BC +:10BAB0004E6EDF86F05C936FAD10A19FF733DB33E2 +:10BAC000D11E93F24B787D76FB362CDF96DF9F9765 +:10BAD00007B7679A259CDA808A1268BF53E2FCF3A5 +:10BAE0006913AB413EFCE72879FFADCEA78E95A840 +:10BAF000FF998776C2422E6F676F69AB40BE32DB1B +:10BB000004F209E879E7850F7FBE13E0B173B993BA +:10BB1000EDE0E4E8437B2195933EC8934692031DF4 +:10BB20006E900BA823B0B67601CACE02BBBCCE1D68 +:10BB3000C24BA75C1D14D84DF271762EC99D1D8A8B +:10BB4000BA36BF20741D3516AE309FB5F9B26EBF40 +:10BB5000803E0CFDCD9CE952D621A2C5F602A4C7B9 +:10BB6000C71D7C7DB08F08DF2E1D3F29F95C1EA606 +:10BB7000E473BBFC37CA2DD41FD8279A1DF15A662F +:10BB8000257DADA94C4D8F41BDB72CC5A409685F7B +:10BB90002DFBE061946FBFB3905DD684BA04D62FBD +:10BBA000CA0E6A6EE21FA447B027B87D63AC670671 +:10BBB000F2AB30BED8347F5C3AF2C526B79A8E7CA1 +:10BBC000C6E0BFDDF3C5E6E448BED89CDC155F04E3 +:10BBD000453619F9A131CE5D16E6C37EEFDACEF90E +:10BBE00061E77D01EEE786FAB9D1FB4D097CBE869F +:10BBF000DC4DAD6F26B99DFA943B11F184821AEDAC +:10BC0000D68D1B06EC403C4CF64C217C35953DEB2B +:10BC1000A8CA0DD1BB13CC7FBC3FC3CCFD1F065DB2 +:10BC2000E14F84FEE63C91BA1DE962AD8E9FB326DA +:10BC3000D0F7605F0EF2187867442F6BF325AA9F48 +:10BC4000C9DAEFC7FDF3FFF1F73F86BF87100FFF9B +:10BC500055FC2D5AFED18DF15B7D1F6F145A2CA916 +:10BC60009CDF92BE8BF7A7009C6ECAF33F8EFD1936 +:10BC7000EB9CFDAF8BD2FDB9A1F9381F78B5F44E1E +:10BC800028CE5EF009F1A7D9FFE224FF45B47DE09C +:10BC9000CC6DFFF9A3B0EE44162BA19DFCBEB57D83 +:10BCA000B082F68FC9FFCCAB386E4FB304BC12EC38 +:10BCB00021BE7E189FD6F9C1707F0ADA3D1FA17799 +:10BCC0008CF30F6EEF19F4B756F9D3C35DD2A19977 +:10BCD000E8AEE375737087807418DC3C17EBEFC82F +:10BCE0005534E8CFA1D31BD0A34A7AF05DD01FB65C +:10BCF000CB366944AF1531418665371FAFA922871E +:10BD0000E87739E3F4CC6A4C347E17F4C8C7CD36F3 +:10BD1000D1B8A00790FE14A2CB8E3884EBD574D98D +:10BD2000417A9901B7CF753FE7E7A867C587DDD7A7 +:10BD3000FD28463F377ADFA0CB947A631E9C0ECF56 +:10BD4000FE08E88804B7DA1FE779349FFB350C7EDC +:10BD50003EC8E36F43FAECD4EF450E8F398F67127C +:10BD6000FD1ECDE774B53A96D3FB56470BD93D2659 +:10BD7000BB9C50974E7E8463F8FC4A679C15E1F2A9 +:10BD800011D0730F904FFE54DD2FA2DB97CE5C3F96 +:10BD9000D9F9B3034C417D661E88C931C883B448C4 +:10BDA000FB9A316BA86CBEBA8C7EBF48FFC63F6C55 +:10BDB00091ED355D9E7179B84958B219E7B5299D65 +:10BDC000DB7D1F08ED874C80D72AF433C0D4BEBC7E +:10BDD000106312802F9CB1707FF891B786C5B7BBF6 +:10BDE000427E832F75781DD95F188F7E2CE3FE620B +:10BDF000D6417E0C20E9C0E3B0BEDAB876DA9FCB3C +:10BE0000995A49F4A3C5CA486F867FE5DC5A33F9CD +:10BE1000251882DA837AAD10C4FDBDD0FE35F563F6 +:10BE2000AF64011BEC8B2DFD3BC6A35EB4C5CB02FA +:10BE3000A817E000E4BFC327A1FD46AB7FA01466AE +:10BE40000FD5C6B4F726BD3AB9C38AFD5EAC84A14E +:10BE5000E1B95AED9B152CAE0BBB694F24FC2E2289 +:10BE6000A9E77745E767E288CE614E64EFDFA05D22 +:10BE700061D8139DF641943D116D3774674F2C3690 +:10BE80009DEEBF34CC9E885EC7627874543E5D0FD1 +:10BE90009AD17FCCDA0B7DB15DB4339DA17EA2EF48 +:10BEA00077D66FFAE81B84D3E297A3FC3E5174B7B0 +:10BEB000305416BE15101F61F5EE303EE8D1F9473B +:10BEC000090B660BE83FE76567695B10EDC75ADD54 +:10BED0009F96DCDA3E1EE116EB69665568379EE7F1 +:10BEE000FB71C4BEED07D00F9150DA9689E452ABD6 +:10BEF000FB89A3F5BBE1FB3698D15E5A2E3215F5CE +:10BF000040668F257E05F03F8BFE596FFD1099FC32 +:10BF1000E82B766DC57309AF73E0C917E97EBC8C59 +:10BF2000F3992FE97CB19CF3C5E57607F10BEF138C +:10BF300003689E933DFEA9C3603DD526A510F7B1C9 +:10BF4000536CFE591BF4774F0393EB902659F34D36 +:10BF500002B6B73219FD3FDE447E0E551C3330F772 +:10BF60002F706D3DE3CEB5C0FC6A868934EFDFDB10 +:10BF7000D419D8DF457D9F45E361EE302EE7BCEF55 +:10BF80003BFCA85F7A631C241F1EFFD1801D365A1C +:10BF90005733CDB77AA33B11F7CDDC615CFF9CEC46 +:10BFA000F1CD1D46FB5D29443977C730AECF78AD62 +:10BFB0007216EE8BD7629E2AC17DE106BE634A43AC +:10BFC00034156725C17EF2A631FDD7D81080FA322C +:10BFD00018600BF0A5CDDEB634B48B36175A957ABF +:10BFE00018620A5332715FDF26041B505E882C23CF +:10BFF0005382F6A5253605E731C1D6E841BF339B0C +:10C000006F49386727773AEB8ACE42F25264E78C61 +:10C01000FD078D37C6B4A5E1FC365A616AB8CF1466 +:10C020005E6E85B1D6919F8D9727D979B9B5E244D7 +:10C030001AC2A115602E24E0FD3FC958BF1EDA9B2D +:10C0400061AF3E2A04B663D9029C03CF6D26D9DBCB +:10C0500008DF78C3968EF58D9BB1DE2A71BF185329 +:10C060002C17DAC3FCCAA931BCBD09C6ABA3FE5864 +:10C070008B40FB2B23E1DC4DA1F5CDB135E721FE53 +:10C08000592DF79F6F2D56B73442BF5B0556560F9B +:10C0900028C88A197CF6F748975A6FB705ECE83D2F +:10C0A0003A7EAFA657D5741AE9E80FD9C40F43F406 +:10C0B000EA20BEE9053D12F91ED22BD2D772FB4011 +:10C0C0004F15D1BD5CDD82FDB03805F59265D99C78 +:10C0D0003E97FD50923589E892E87199A0A4A21F7D +:10C0E000C91B0765B82E7340F91AFCA06A8D99F92F +:10C0F000C3F4D4918FD80241CEA79E5E0EFD575F48 +:10C10000CCCDC7F327A3BEDACAFB8DEEE7F584E2F8 +:10C110003DC3D0DFEA6C237C311BD8767908CF365B +:10C12000C217C251237CC03EF21059B8115F395179 +:10C13000F836DA8B226F3FC97E92EAB1CF1BC1E796 +:10C140004F1CB7ED08109CA4320BD07CAC89F76F64 +:10C15000CAE0FD6DF66A03919E3757C528A8BFBE99 +:10C16000666DBE89E8390ADF4EFDDCE4D37CDF5121 +:10C17000DC6F784CEC20FEEB1F438DC4D324C7E664 +:10C180003EC0FDC1213F7D90EB01B949FC7C244AB2 +:10C190007E5F446734545D7C4908E2F878DE1629F6 +:10C1A000DF5B486F5804FB771DF29D5DD1FA421B9F +:10C1B0008D5B0B72788B847235F2F9DA3D5D9F8767 +:10C1C000BC867EF5FC901E14F26F72D86ED9E826FC +:10C1D000FDBB1D955DD457D94A7A0EFDA65CFEA91C +:10C1E000E9F7E0BE9DDF97E8C12972BDFD9EC6015B +:10C1F0003BEA747D0BF534C3DF6AF0A7C91EAFE0DC +:10C20000417E55E0FD1AE9839C7AC3AFC52FB85C27 +:10C2100031DAA1BFF55AE75C23F4F393A59F815E61 +:10C22000037AE55EFD5CBEF4CDEC54D46B960A72E5 +:10C230002AEA2F711E937E6ED23FE2FE39B39FCE63 +:10C240007942F86BE1F8D3F1B000F140E785FE5593 +:10C2500084971A8EEF85255CBF630126DD369CE34B +:10C26000590E833BE235BC8C7894BBC0E362C4A317 +:10C27000C2F12847E28DF4B85AA073DC1788D7883A +:10C28000FA260E9F4A94AF61FB37A161BB99E58600 +:10C29000E0139FAFBA7F887E9437C17E05D4FE0538 +:10C2A000ABC8EE520B51BFF934DF6BF5005E62D0C4 +:10C2B000EECC45BB8BD5205DA03F7F0AEA592B9879 +:10C2C0009A6521FC174EE942DF58B7D7514372DC1B +:10C2D000638A90D7178659687C3AAF41BD6AAD4DE5 +:10C2E000B71FE4DED84F61DF4EBD8AE23AAAF5B847 +:10C2F00086C5D35D7EECEF8C7E9E34DEC3E5DE78B2 +:10C300008F95FA37CAC6FAA07FEA276658A4DF7C61 +:10C3100052673BEEDF67A23F9DEC424BD0718F1B13 +:10C32000F5739F15ED45837E365AE53FA0BEB0718B +:10C3300065BCAC2585E8E8C8917EA41F57EBFCA03E +:10C34000DC9348F3F882C9A417033D51BD51EEB404 +:10C35000A7CE9B48CFB85ACF5CAAFB13CCE44F3092 +:10C36000EC8FBDE77B06D1FE007D534379DCB1DB6A +:10C37000A1C38BCB8FBD2F0F207901FA27D9DF1DE9 +:10C38000AFC70677A0FCB0F837E3BED47667733B3F +:10C3900097059F7B16E7BF2F9DE206CEAD68DB8435 +:10C3A000F1197B453E2F6D8F93E4D0F2F6EDCE412F +:10C3B00050FE5C602FA1FD6AC06D6FA7DD15742271 +:10C3C0009ECE85CA374D0DC3FF5EA013BCBFD0DA29 +:10C3D000D23FFC3CDC281B712A5846F9F39AAE0781 +:10C3E0002D8CE1E563925F43BA7BC50AFD4079611C +:10C3F0001CDC77DD08FCBE88C3F57608AC0DCF6B7E +:10C400000DBEB4774D2AAD17E0C78430F8803D42A9 +:10C410007AD4B98F4D3BD01E1969FEEB2B0F227CCD +:10C42000D3CD123EFFB171DEFA1F6E5D3E77E42080 +:10C430003C001FE4675CF9490CC7CFB302D9337BDA +:10C44000C5C6C3DBB0BD6A57D0BEDFABDBB3844A21 +:10C45000D0B3E6EA2C351A8E1BF5F53759E4DEC366 +:10C460005CA175D7AEB19DC63881DAF36766328CB0 +:10C47000E7A8F97A365DA3E2843E17DA1FEB8FF363 +:10C48000FB892D140FD4B70B7BC77EC1AAC1FCEC6E +:10C49000FB5907CA4B96D491D2959D50FBF13A9F18 +:10C4A0007948F77C387A7CB2AF0B49EE9090AC8D2E +:10C4B0008A4B62E165F3D5E55F77EEC7C8FBFB9178 +:10C4C000871620DC22FB3B6BF18DC738A28E5F0AFA +:10C4D000C4B7CE5982C31E84FB2787FA8F780A74AB +:10C4E00020437DCDA731DCDE07FA44BB8A35F2B8A4 +:10C4F00084B3167536F2838492166B5598FEF3BE9C +:10C50000CEA7E6D8B89D057CDE1ACED78CFA426F4E +:10C51000D7E770A73CDCBF1DDBC6E5E8FDEC19736F +:10C52000B89FE394FEFCFB1E99AE7DCEF37389FBAE +:10C53000D997FB6D1E3C67C8A373EF3E0FB510FF84 +:10C54000396BF1931FE1AC600ABC84FAEF7A1EA745 +:10C5500034F76702F1835777159B63A17EC156417B +:10C5600071C07323747B6A2EC82DEE979012EBD2A4 +:10C57000F93A081E28AFF2D03FF1A299CE77CF0347 +:10C58000BAE0B9458D6F525C42DA32A6D8D210DEDD +:10C59000FEC376AE272D5D9D1EE2A37145412BC6DD +:10C5A000DD19F059A0FAE9B905352C81E585D619D0 +:10C5B0001D8FC4C2E38650BEED8AA453946F91F1DF +:10C5C0002DFFB045D28B7643F2DC905F8E02CE8792 +:10C5D0000D391E2DD73FCD57630A381EB9FCD92D12 +:10C5E000103FB84ABFD2E5A8218FE7E9F2F89C993D +:10C5F000EB03736D1BE8DABBC04DE32D60ED7ABC35 +:10C600004B8715E5497774D0BB80EB1B7D0A22E987 +:10C6100060E1F996C33682BBF20AC58B3CC45A620C +:10C62000611FCE15039538AF9E20EF119FA9E3FC43 +:10C63000349FD4654CC2F3FEB9180B91FFDDF58C25 +:10C6400068BD225A8F30E66BD055B4DD3DE2A120A3 +:10C65000E9138757C84F9C055EA979033F6E47FED3 +:10C66000B75264F5707DCAF9839FB6C33C976B36A9 +:10C67000C906D7CB8E319B12E0BE6012034211C8AF +:10C68000EBD58CFBC73F30EC9FC050845BFD5ACE8E +:10C690000FEBEB387E671670FEE0D5AFF717F07D35 +:10C6A000D48AE3827D7470450E8D3FDE9E2762BC86 +:10C6B000628994A791DD001DF6802BCA0ED447CD68 +:10C6C000FB6CDCEF04FCCA05FCF8569D558CEF357D +:10C6D000BA05E17920D62A9B797C1A93A07E3CFE8C +:10C6E00001ED6F75CD6DC0FA2926164880792FB6F9 +:10C6F000B5ACC2FB97D2DF9E8DF8FF7E4C9988784F +:10C700007F44F2DF8974E5B52B59CBA81755C4F5E2 +:10C71000BC20AAE50530EF5745B5A280F8538674D2 +:10C72000CE79357D1BEB01FCD3FCC721BDA1FFC336 +:10C730002537487035A7098A8D5D3D7FB3BEBEFAA7 +:10C74000D76DC195E47757B6229C179BC500D74F8C +:10C7500023D763C02B7A5D0BEDFE1F2798681D0160 +:10C760009CE76716FF4F2533F93745E447B08E2520 +:10C77000781FD6B1F45AEBC01964A29D96C182BA53 +:10C78000BF55437B14B838CDE784C5FF103E2F4A10 +:10C790003EFD1C5465FC3C588BD0DF9E72C6E5A064 +:10C7A0001F66398B51106F59D20F7E8CF474481369 +:10C7B00019FA731E8889DBC1E291AE7A07D16F75D1 +:10C7C00025DB88A3F0531CC5E124EE173F7C32968D +:10C7D000EC66E18099E8EDD02927C5E51C2AEEDA60 +:10C7E000FFF2844E6787F673FA3B6CE7747AD89E43 +:10C7F000BE430B3BC7D9AAEFE3AFD2FA65E1F943D9 +:10C8000077F2F2A915C059C2E22D46DE6D0DE07E29 +:10C810007F6A9695F4B591CE8111F1145E13B7A39A +:10C82000B3A6CD8E47F973F83356E88675FEAC8013 +:10C83000CB979166F77DA88FDF7AC5CC5A8045E506 +:10C840005C689330BEF856DD2FE06DAFCCE80DFD8F +:10C850001E70A4E623BD1C38EDCE10A0BFD6F40197 +:10C8600074ED9C873D758E00CF651DB9FD641CB4C9 +:10C87000FF4AB3C9EB701F581A05D27B009C3D4696 +:10C88000127AC84F44A80496C51AA49600EA614BD0 +:10C89000E3C8FE79435F1F9E3123BCBF9AC9F1FEF6 +:10C8A00086C0CB5A25A3FDADB4DAA97C70911C34A7 +:10C8B00063DD1E60FB6174BC9C05C425D82FEA4F64 +:10C8C00048B71936D6122627A0E2243E0FE6BA84CE +:10C8D000F86FD5F53FAFAEFF65C250783E9FE932A5 +:10C8E000117E5BF5B8EEAC350B5D785E728049BBAE +:10C8F000717D9763A7C60B00A7933A1F391C159744 +:10C900006DACE735AFBCD01776FF1D9D2EFEA4E3BE +:10C910003D276337C505331FD80CE9D81FE7E73932 +:10C9200019FB55A4C79C8CB75584EF1BBDEF15634D +:10C93000703F6B0E19E737DEE56E608057AF2897C2 +:10C94000A05CC5760943C2E95776A13F334B1AE391 +:10C9500042FED1EA9A43F42C1C189611AE771CE8DB +:10C96000867E3FD5E779E03AF4FB3763FD6953E310 +:10C97000FD5DF4635C5B757800F2B3709F8E74DAD2 +:10C98000887E5B1DB61BA2DF033AFD9A0BF9BCAE95 +:10C990004FBF7944BFADE99C7E5B4F5712DD1E8EC1 +:10C9A0009D1749BF6940BF00B783B17E19F9636B1A +:10C9B000BA4DDDC18974EB1278FEA010CB10DF6098 +:10C9C000076484CBDF838E0133319E3C07E3C4A030 +:10C9D0007E9C22E7A3DD6E72E6D23E385037A02F50 +:10C9E000EAF983F5F946EF0FA31FE68AF42F19F74A +:10C9F0000F21BC6CB81F7C14C77548B75795D69CDF +:10CA00000CD43759E3532AD2FD2DFA7EBAC56E3BBA +:10CA10008DEB604940EF61F239EBC82C7ABE3BBC2C +:10CA2000743F4E291F6713ECAFC2B071A4AEC78923 +:10CA3000F66F3D99EFCF2B2CC078FEC0070FA3BD3A +:10CA40005466273D3BB1B443C0F3D00F044E773951 +:10CA50004C5D7912E177B407F9874CCE493AFC5224 +:10CA6000DD08BF698591767F777003FAE88BE74E22 +:10CA7000DDAFA72803FD9C57C1CD05EB89FBDF0384 +:10CA8000B7E478DFF442A0970F98D41B6F1E1BCD3C +:10CA900022E276BAD393DE42799CDD95BEC4E51AD4 +:10CAA00088CD9B793C14D78FC67FAFF26F4924D7CE +:10CAB000FF75E65BA0278EBFB5F23E2CB7EF99302D +:10CAC000D305FAEAF87102C5712D2A6CD8A6A19F88 +:10CAD000E4CECAFB92A1FEC9FFE8352B09EBEF12A9 +:10CAE000F438AFC02C15EBEF1628AEAB72046FEF25 +:10CAF000F4F82D1887365DE4FBD1A5C72318F07B29 +:10CB0000A0D04CEB7AA050F76317CA7425D0203F11 +:10CB10002CE7F1C920872D647731BF05E7FDC7D128 +:10CB200020258762BFFECCC630BE7AFC76DB2CD5D2 +:10CB3000C5DB859F973DA2EF3FC32F198DC7753A7F +:10CB40007D197138F8FC1D83C3EBF979CB23FAFC0E +:10CB50005C32D7B3715ED306F36BB8FD7BBCA2D851 +:10CB60008261857778803FE323F1FE0DB80F0EA434 +:10CB70007F138BF21D14168A4BFBC0A28824D7DCCE +:10CB80002CF04BD0BF4B8A7C0DE842F9E0E179B341 +:10CB9000486F8B73AAC80F7FADCF6F837308DDAF6B +:10CBA000602605F18ABFF586DC033A7A67C25387AF +:10CBB000B0BF37B26D9DFA675A61485F3BF03628C7 +:10CBC0003C00F289AC59E4F645A06429EAB7A50E09 +:10CBD00009ED94DB593BD57F0F4F36FAE1F98D42D1 +:10CBE000D7CF8BDBE9BCCAD0EB3ECBE4FA1CE877AD +:10CBF0002F209D4E61FE7DEDC42F1B4584838B0548 +:10CC0000F9FC619E285FA3E5FE38FB56D20BE0D706 +:10CC1000969A7EF53EA6E9A684E2B4404FD0BE8F38 +:10CC2000ED753DE155D1BF0FE199C69A05EE476D0F +:10CC300013489EDFC764D2138B143BA7F3C87DD57E +:10CC40001907512990DF07F442E2DB6F560AFA799F +:10CC500018333714EAF08487B2AE3C2CA620BF56B6 +:10CC6000ED0CE1B3C1F98392A5D07EE2413BB3C1A3 +:10CC70003C26BA02B4CE3F0A266525AD2770F0BE29 +:10CC8000A4103C8F74CABB483C9442BBFBB1BD2C82 +:10CC900072FD04F4151CE7F697AD34CE64D641F866 +:10CCA000F13189E07FB2D0CDE3C27C65C5C900BF58 +:10CCB0005E72E5BE7678EA589069169087C7743F31 +:10CCC000D0AD76D07BC80FA6BF47E4B6281807A81A +:10CCD000B448E35C38EFDC843CB4D3F38F2807B06E +:10CCE0003CC9C3CBB9CD6D5E2794278FE2E5217B8C +:10CCF0003A5AB1EC2BE1E5A1FB5A4C58BE2DC74D79 +:10CD0000EF4BF562BEDB0623FDC966EA1FF01E8B02 +:10CD10007AC904417A09E5DA7BD55C5F9E90DD8FA4 +:10CD2000F4B3A32B4A892F25CC9C566CC1754FE2D6 +:10CD3000F132C37D9575581E5ECAE320134A82E620 +:10CD40004D509EE6179E41FAFD7B610AD7E3FD2513 +:10CD500096E980CF043F8FA31CA14DB04C1D4C74AD +:10CD6000F97DDD5EFA06E9219A3E5FC1BD867098C5 +:10CD70006BF0117E3E5B318DFB39F1372D85EC2355 +:10CD8000A2CBE318C488F4718CBF1F75E23DA504E3 +:10CD9000F1A2C570BEC6EC4AC3F7E1F9634FF66570 +:10CDA000DC1E0ACE247F07D239CAAF69AB8564B8CE +:10CDB000DA05D68C76107345F1F9B3D6283D54AB1D +:10CDC000C3FD971A88E37E0216560FF34FB5C76965 +:10CDD0004E901718F6D1126E7FB37FD8C2DB811D3B +:10CDE000D5EBE6645CC2593A6FCE710B12FA7F5EE6 +:10CDF000952BE9FDB18978169387EF9BD552B9C27F +:10CE0000C3DF9F999853ECFD0B94E38E9A094F96DC +:10CE10009E7BCC88C737EF10651BCEE76BE067853C +:10CE2000BA2905707E25DFD02B031664E686DEF571 +:10CE30009AD03893E0F69E8BE23324D6BC12FDA341 +:10CE4000CF0724D2875892A061F9A6577B723F5A28 +:10CE50001AC7CBA0C96EC2C3C4EA25167CDF8AF903 +:10CE60000596EDC679C6933E3831EB66D2FFB3A680 +:10CE7000FDE0541CDA039A89F42693BF8CF6DD1486 +:10CE8000E483782D7D9BF6FF2B752C88F1FCBF99F0 +:10CE9000F60E9535C051368E2F064FA21E3195F5F0 +:10CEA000213DEE38F4690DB32798DD7F2009D7FDC9 +:10CEB000CB14DA7FA03F32A2D300233EE16D5F9214 +:10CEC000897AE4890AD02301AE274E0B0CCFF78E66 +:10CED0003FDA93ECC1E3B33EAAC7F91C2F48A4F88C +:10CEE00027EF15276B213F87208A617CCC2B36D713 +:10CEF000DF8FEB3C6897D1AF7B953D040A262BD49E +:10CF00008F4EA8AC31ACEF857FC238A959A92A3E13 +:10CF1000BF7E499C827E0FD8A13605C6ED53C1085D +:10CF20008EF36EEE4B72C2CA5CAA3D09AF763AFF31 +:10CF30009BE6AB3C85FA54B26672A3DDD029A70408 +:10CF4000FF2C8C8559F6EA2FEEC238DDE30EFF2C5C +:10CF5000DC028FBCFAEBBB302EF778BAFF14961FB9 +:10CF60005DFFDBBB4AD3316EFF81BB719DE5D5020E +:10CF7000C997E2EA0D620A8C73A716CF100F9713B8 +:10CF800002B724C2B5B454602B61FE53E4ED16B46D +:10CF9000374A6A2A3331CEE7DF6F96697EC763D599 +:10CFA0004C8C23389EAE9A900F023E7C78BEFC7F5C +:10CFB000ADFF04E81FCAC733A1FFA4FF86FE93F5A7 +:10CFC000F9BBFF9BFAB7E8F31FD8357CA66441FF95 +:10CFD0004034C5594B7E88745BDED9BF762819AEC4 +:10CFE0003364014F5659694D25EDD39272DE7FB4FB +:10CFF000DED3399E838F97E5B3B59886FC33E36C17 +:10D00000A071DECB6ECCC4FD76B4C286BA4D67BFCC +:10D0100059E5ABDB4C11FE95C6586E9F4E8E457997 +:10D02000FD9E6F0E958503E332C3EDD3A3DDD8A734 +:10D03000BFBE99EB754775FBF4B89DF395E3689F08 +:10D040000AA176476ED6FD2BE5FDB25817E7199D6C +:10D05000EDA2FD2BFDB87D7AC47D63F6E93BBA7D78 +:10D06000FAA79B0DFF8A70FFB5ED5337E72B6E8350 +:10D07000AFD465A03FE1C884D591F6A9CCFD2B972C +:10D080002DB209F9FBBB33CDE49F7B77663DF1B947 +:10D09000AF405108F79B77677777CE5BD7C34732AE +:10D0A0008DDE679296CB8914E7C09AEB30FEE4B12F +:10D0B000A560C7427F97F475FC46E0EF4F69794C55 +:10D0C000C2788BD424AE6F25820CAA4F0F7B2F4CD5 +:10D0D0008F9788B507EAF07C315666F9181F08D299 +:10D0E0008B9EB7DBB9DF39537FCFCDA5BF47F6772E +:10D0F0009D0E63F5F7AB9CD5CCC4DFBB6D96902E2F +:10D10000D2C4E671D87F6F95313A8710DB73F0FE99 +:10D11000F5ECB3E875B70A5DD3D1DA224E478A93AE +:10D12000DDCFDF4FD2F77196BB2FA7FFEDA49FDDB8 +:10D13000A90D3521FD27EBEDEFCC59D207E5DA8CAF +:10D14000524146FE5C77EAA73F4C427DD22D606893 +:10D150000A2B91F9BE6BCD9E97897CF758998DA1CA +:10D160009E79F41BDF365CE77BC36318FA97D6160B +:10D17000C9DC3F500DFB04FD68D57C9F283DD82CB1 +:10D180005F187D45CFB7139F57049237CD31EC67B9 +:10D19000F85E867B4FCF996900A7E69EEC53E4DFEB +:10D1A0000B8B06CE447EDE0CB204F5989BF7946C94 +:10D1B000D5A0DF66FD7CF5F2A97996CA30FE30AACB +:10D1C00088E31D5F7727FB4E2BD98AEF1785E06236 +:10D1D000F005032E9DFCED87C8DFA6D770BE30A3F7 +:10D1E0007C03E70BD5EECC76FD8AF475CC0D708010 +:10D1F000E7D71471BC1FF9C6770AE188FC02E16128 +:10D20000F08B254512CF0700F343BF9257E47E040D +:10D21000B00B497F8CC6E3AD45DC4E9A2E6A3F4C7D +:10D22000D6F9EE4AB816CFACB4E0B8C0AF6484FF0C +:10D230000CBF9BE635452EE6F3F36DA0F919F379A3 +:10D240002FB6711BCD13F917E91F1C2F972D2AF547 +:10D250003BC5E8B794F75B5ACDFB2DF595113FBF61 +:10D2600003F83EF1F5ACCA887E8F5B82193A5F5FA6 +:10D27000B9348CAF47AFEBB2A5F187C85FEFD0FAF6 +:10D28000086857144F837150BF2E4F7023DCFCFA8F +:10D290003A27546FA7F7BD26962FE1EB985947F42C +:10D2A000F66E4290F8B931EE896FFCC44FB3CA8D67 +:10D2B000753436E03A2A701DD87F35A7E3897EBEE3 +:10D2C0008E89594B681D77FAEBA8FF12793BF50B55 +:10D2D000D76DA4E74CE074FC904EB7EFFC5DCDF445 +:10D2E00085C98FEBE1E9079D780A103C271AF0CC3D +:10D2F000E1F02C2FE5F3289FB99DD635A3B48EC35A +:10D30000532EE6742417CFC2F91EBF83D311C86110 +:10D310006FB89C5CA3D3CD717DDD06DE6618EBADE6 +:10D32000E1F09C82F400CF4F41BC41BB3BE44E395D +:10D330009681E3BC99DD988172EC3D830E8CFDA94A +:10D34000CBB1D6152AFBD0427E0DF2178F739948C8 +:10D350005FF596280D9877610445EEB02EECDB481A +:10D36000BBD4F0EB4CB307F6C791DEA7AEFC00E1EF +:10D37000007AB96EA798D6A484EC5256B224C2BEE5 +:10D38000DE30F50FAE61481F2E0B9DEB3C25341EA1 +:10D39000247D7CA04D46FDF6A9A9F164F71C473B0E +:10D3A0005708C939939DDB9D5EB06F317E1CECD26E +:10D3B000065D3FD5F317041A904E4BD09ED5CF7F14 +:10D3C000C2ED58A6DBB1B7801DBBEE06ECD8578A7C +:10D3D000F8F9E624B0DB13D12E9CFAB80BED8DC31F +:10D3E000E6C8F89023FFCFED593916FDFC6F32F6F1 +:10D3F00012C2F79D52DD9EBDDD4D7652B43F04EC66 +:10D40000CFDF172587EC4EFA61FB0909FC7C5D54E0 +:10D41000FF80F52EE68BC0DB557E90687B209A6EF0 +:10D420001A2495FC06BA1F2415A9D28CF36F11108B +:10D43000BED1E716DDD199C4B47FDA3F231A76094D +:10D44000FD0409CF0533F4E705FF3CB287B68E64CF +:10D4500012C6CFB255019ADFABA2FFCB22F26372A4 +:10D46000FD210DFD354012F545CA820473F7F32DF9 +:10D470001CA65E46F8DD627629189FFAC55133D1A5 +:10D48000F924757309F2B9DB59634922D2832C2838 +:10D490002D72888E066C827986D9CD038376268696 +:10D4A000C507DCB44B8A280F6E4E8B683F748F1C07 +:10D4B000519F07467778FDB0234A44B9A0AD28A212 +:10D4C000FDCDEFAA11E5E1EDA511ED479EF74594DD +:10D4D0000731BF09173FBAA33CE2B92F98BF15E344 +:10D4E00081060DB74968D3324D7D2707F6E1601DEF +:10D4F000FA63AFF823FA19DC5E6942381DC67C2254 +:10D50000602716B3F911FDB197C53388CF00FC43EE +:10D510007C0E62500E8BBB9F285B4265F8AF7F5438 +:10D52000FDF2938E4307C3C6CB1D1E9B44E7B71E77 +:10D53000E6417FC45578C24069D49376B16050C04B +:10D54000F5505B366833A3F783A2D7737985FDD096 +:10D55000418C99329F24FFE857602FF5807618534D +:10D5600012BE4E871C894F674E243E6395487CC689 +:10D570001745E233418DC4678FD2487C26FB22F1E8 +:10D58000995A1E89CF747F243E7BD544E2333310F1 +:10D5900089C73ECB23F1E4D66A22EAFBAD0944D227 +:10D5A000637B65EB3658FFE1229B8478CC6E5C1E72 +:10D5B000F1BC81470DFE7585C72935D1785CFF57D1 +:10D5C0008C03BB1E3EE7223E6F0AE19399675EF330 +:10D5D0005CCFC017F0B985C3C94FBD7816F13FDDE8 +:10D5E0003F83BF703FF5F18AA7483EBD3190FBA94C +:10D5F000C7315544FC1E489F55D243E6EDA3E40CC9 +:10D60000C9A152430EE97E290CBBC1FD72DB557ED8 +:10D610006BD982E5A9ACA3B7D80FE3175A56A17E00 +:10D620007E29FDEDF7058AB3D860C459340C4F4606 +:10D63000FA6CA3F261E78B22FAE75D2C40F30FE767 +:10D640008F189776C3FC7192D4F29DF8B49C19E2BE +:10D650007BC45435E27B60079B4E93DDC0EDBDB0CB +:10D66000B804B2938F15FB630B502E569859F8FBF4 +:10D67000DEC6F599E1DC4E38B69FDB3DDDD9C72F1C +:10D680000CBF31FBF89F8D3F3886F6F15090E7C311 +:10D690008DF3DBEBD9C76599BDD18F3081DBC747EF +:10D6A0004F83FD00F7DFB963005D3BE751CACF6FE1 +:10D6B000B38EC46AE8F7FAAAC64672B7EED403A4DA +:10D6C000877ADF02BD88F026F0F71FCE9B282F0F48 +:10D6D000136B480EDEA2E3F9807E9E376EF9381F89 +:10D6E000C601DC72F22992539289E3B93449F0DB26 +:10D6F000312E689C9C89F2C66766811DA4F768314B +:10D70000182793C6EC2F21BE2FEBF19E1D093C1E5E +:10D710006CDC83C5D45FE7F9C322EE77F4BAB66751 +:10D72000A29F715C8D4DC0A9795D65A7F0FC1909B8 +:10D730001E79DD89ED1C5F2796C841FE7EE61F69D4 +:10D740003E1DF73319CFA74FE4713A3A11DB97EA40 +:10D75000C7E9F9275A8576F2036BC3C15E6758FFA4 +:10D760000BCA4B70E24981667B02C6463DFBC4860C +:10D7700001F45C673CECFAD86BBF9FB9C1C1E3DB35 +:10D7800044B90EE384F63E24E9F1B05AD68FB0BE18 +:10D790002286CE7799A879DEC1FA9A41BCDE5C97E1 +:10D7A000FB5252E8FCF7638BBCED3E8443457F237C +:10D7B0009ED889E7EAD17AC85E51D2701F6981B8D4 +:10D7C000ABE260C3CF87A2E3600DBAB8DEFD1360A1 +:10D7D0002785E7D33831FF56F2EF1F758B01D487C9 +:10D7E0004BA6D934E49725D20611CFAB277BFCCECC +:10D7F0001105F8BEEBF62568E7C286253C6DC91217 +:10D80000829827CD380FE8E41B517C6F83F3C5ADB8 +:10D81000C8C7EECCB0915C1CDFEBE143480F072A90 +:10D820006D644F47F33DAF5D257E847A359E7FDD85 +:10D83000A29F2B95B246E257B7B116BA5E7D6E77BE +:10D840006DFE077CAF1FAEE3FB31DBE9F995CEC57A +:10D85000A390BF03FFCEC2FB232FA822C2DD2B0360 +:10D860001C60BCA3091AD16D49AC40F4021A38D926 +:10D870003717312F4D17F64DABE3726FEC2F1A7E31 +:10D88000D1FCE48E3CBF6744D8B9FE84C4A043A257 +:10D89000F3D7AEF5C00DCEA7E99C61623772E5CD36 +:10D8A000EC9F72B9727B77F0544A9271FF329F718C +:10D8B000FE49E775865CB91E3CAF710E7AFB886441 +:10D8C0009477417AEEB0738C05E703F09C8CEBFB08 +:10D8D000A7F57E76D57968841DF05DCF410D788EF1 +:10D8E000C7803FE8E73D89E72983894C4E2F44FAFA +:10D8F000E2BFF7D66822FA274BD2CD7496C2502FDA +:10D90000847929F00FE7E565BEF81678EE762552A2 +:10D91000CFF09E1C48EBFDBD60528451086FAEA74E +:10D92000503DF23DC6D79F66E6EBF746D547C32389 +:10D930005A3FC1F360C4DB8DCA576D84AE9FCA6C79 +:10D94000C0B7FDD06EDFC33EC4F8485DAFF146C539 +:10D950002544EB354F8CE0F26A8C555D83F8FC442E +:10D96000F7234A4C1191AF989CA328AEC46817DDE9 +:10D970004F343E812E368C48BE1A2F3016F9FB0EDE +:10D9800025DF59BD01D637E0C78328BFE5A194BB89 +:10D99000EE7B1BCB4FF7277B758B3E4EFF5EF39ED6 +:10D9A000DF00E51293700FC57F79DE9BE1C6382654 +:10D9B00007EF278DD53495219C73FBE6D7633B2B6E +:10D9C000A376B70D5D342C3C5EFD79BDBFDBF4BCA6 +:10D9D0000999AC99FCB931CB2541237F2D13CDF9A1 +:10D9E000704D0B8A12F46F1599189308D7B44697A7 +:10D9F00084FB3B86F7FB56DE9FF2B1DF92BEBC7C18 +:10DA000093E23CDD0FE72308349F9B72849681509C +:10DA10002E49E4F593F29FEB89702BF11AED6FFF1D +:10DA200018DB97E87A439CDA71E05B58F774FF865D +:10DA3000E704A08B57FDC59681180736C24EF39DAB +:10DA4000EEE3E7C1938BEA048C339FEE573DE1FA96 +:10DA500047EB08FE7ED0B422DE6E9AAFD2521DB6DE +:10DA6000EEE96A0743BFD2F4F2D31497BAC1399BE7 +:10DA7000F4BE6951FCA50CFF80FD7EEC8E5B895FD6 +:10DA8000BF3D2B92BFF8F00F37F19783C9267ABFBD +:10DA9000D5C2F98B7408FD29D375FE52CE1AE9FE62 +:10DAA0000CD64CD799AC8DC7579CEEE42B7D92FADF +:10DAB00046F09577914EA6311FB56B73FE80F88ABC +:10DAC0000BE80EE32CC6D95DC45FBBA0AF53230A9D +:10DAD000AEC947699D33BA892379E39E9B1B701DAC +:10DAE000335C2D2ECC2FF69B588B82E75557F3D302 +:10DAF0004EF944FAF9D5F2A98DF861B41F68CAF558 +:10DB0000E34A2E8F203F91115712A4F5C2BAAE8C72 +:10DB1000203F8A725D7E1AAEAF77A59F5F9B7FB470 +:10DB200009F4DE58377A39BB7E5C72FCC81B884B1F +:10DB3000AE05DE48F9CEF4EB6F1475CED8B03825BB +:10DB4000A7A763D5A31E1442434CA8AF6D73B0358D +:10DB5000F87EE80EA5F829159FD7E3AAEA5599C7DC +:10DB600037B531753B8C6711358AF3B7D8A584BAC0 +:10DB7000047C3FA18DF4BF8E6426A1FE65BC4FB02E +:10DB80002D9669D85FBDCAF77FBDCADFF386E7E986 +:10DB90007CC69203CFE7019EEFE272E2D25A1EF7F3 +:10DBA0007E2941207FE2A50A17E9031FAEB3511E6B +:10DBB000DA2AFDBDDD2423FF0A5B45FDE58FE47E07 +:10DBC0003F8D79D3E9EC5F58974657FDFDCF2A3D4D +:10DBD000AFDFA5047936F5BB3655C07EAB9BFA4D59 +:10DBE000C771ABD7A7BA993BD47ED048BEDE2AB75F +:10DBF000FA577C7FB8A3CCC5DF7363FE3CD4236D9A +:10DC0000E6ACC97633CAB7879AF740FDA24C978431 +:10DC1000FA7F499F931B8BA0FCF1CB163A9F99BFCB +:10DC2000736A7C0B61534DEBEA1C697E3052AEDDAA +:10DC3000BB2BB2BCA839B25C1B25C7A2E556D9489C +:10DC4000DDAE96998272E82CCA21F273703954CDF8 +:10DC5000383E81DEADE1F16B861C1A63F5968F8448 +:10DC6000752FD0F16EB305CE6F0778D91E19985F66 +:10DC700047FBB3633FEEE79427DCF918FF91389236 +:10DC80009FE3F41FE9F3E373B63EA38690BCEB3346 +:10DC900089E8E3D26607F9D92F39B85D74E975814F +:10DCA000FC314DBDBF5EB519FA691A6193B8C5A0C4 +:10DCB0004E2E48C1F4A27C3F2559D5F9947FA32C60 +:10DCC00046E27E4666A73C00F816315CAB1BEB567D +:10DCD0003D08F57D40C0A3FEB890B5C5E126FAA980 +:10DCE0008E37669E34B00EFAAF9D1A437B6B81D699 +:10DCF0003C1EC1287E23FA902EF1750E7C5FC6640F +:10DD000057A56268B7684F421EB67B6824B7535761 +:10DD1000772CF1E183467E1EEBCB651A6ECFB1DF27 +:10DD20009430D433E72D1F49F91D92AC1D3D8A91E3 +:10DD30003ED69A89EEE73D389CEE0B534ADBC6E2AD +:10DD4000FCD73AC9FF7F60B38DE713799DBF7F771A +:10DD50006E1B87C7BC0C17E5718E5E7F83D0A2BF98 +:10DD60009FD3168774F3D1B607E210AE1F19F937A7 +:10DD7000A400E513647220320FC7567329EE933363 +:10DD80006B96FD7E38C277CA0C0FCAF3B109597180 +:10DD9000B22B546FBCAF2926163D8BFC65EC376661 +:10DDA000DA1F22C8457C6FF6E0BADBE6E33E39E3D2 +:10DDB0008B49C0F9CA6B9EA13C7FB02EC2EB99B5CE +:10DDC0000E5A979B35AF42FF68ED9AD5AB3641FBB3 +:10DDD000DF831E87712367A6C4907FEECCBE58C236 +:10DDE000EE192987E729646269577AD0A89166827B +:10DDF0007B711FEED73B837E3D19F757EE6494BBD2 +:10DE00008BD69AE91CE6E094131B8B9242FB4B984D +:10DE1000B2BC03DFBD3BF328D443FB0F3585F215BD +:10DE20001E59FFE52ADCB71F16D9248C339AFF133D +:10DE3000F369DB907F7EBFE1AF05F87E958EA7E8A2 +:10DE4000FD57B5BE1FE57D646BF83E6C85FDF1ADF9 +:10DE5000E9BFB40FDF44FE6EEC43963125E27D73DB +:10DE600063DF75EA7F3ABF37E24BED0A5377BA2892 +:10DE70001FA82A00FFBD3892C7975E1C69A576E2ED +:10DE8000DF97EEFA1DCC7FD948FFBBB86FFB30356A +:10DE90000FE94DEE90BC68FEBA50A0A0BCCBE2F9F1 +:10DEA0009C365A7C26A247D1FF8BDF21DF5F337F70 +:10DEB00018EEFF4FF5FEFA8FF49FC67EAA1FF2FF01 +:10DEC000753F43BA1B417CA0FACA3413C6E7BA9A1D +:10DED0008CBC863EAF03F97E928FE8D2E0E3D93066 +:10DEE000DFED5DD86FB1A3B87E959DE4A37E1A47A0 +:10DEF0004B465EE40A94574F2F30319CC7D8AFFB96 +:10DF00009830FFCE63B015513FB0174D3199B9DE4F +:10DF1000D1910D65F7D7DFF6580E7070159974B969 +:10DF2000E76BC5F7135D5AFCDF04E87F699A594631 +:10DF30007F84AB28913FA7DAE9B9EC9CC456D40F93 +:10DF4000A5D6F8BFC58F0ECDCBC4ECB20BE8E4412B +:10DF5000F80BE9C2DDC4CB061D7CD128D03E5D8A1A +:10DF6000A10FF93C4F41732E97BB283F97A65969E3 +:10DF7000BC4EFC1514DB4621DF52D5ACA4423D3F1C +:10DF800033C3B86C9D9F35480CED0D188EF29D384B +:10DF900073DB2DC8878C7957DB83E3F0BDCA68F843 +:10DFA00055EBF3FC177D9E231428E7743FCF4F7485 +:10DFB000FE693C6FCCD3E9F1B71F26FD279E655360 +:10DFC0001CA13F88FC759B18ABC729B6ADC572AFC5 +:10DFD0001C339DCB99F5F71FB7313FE525712571AE +:10DFE0003DFFB263F2768C2797EB801E7B437BF379 +:10DFF000128A23EF559F2A617C79BD458F3707C56B +:10E0000002FD319A57DD8EF59AD52ED52B144F4B44 +:10E010007C6BF9C958E2A3974D3E529EC68EE271C1 +:10E0200069E98C9F036548BEDD7361BD4A3F2EF7E9 +:10E03000A3E152388AEB230B30760F9E53C6F1765C +:10E04000AB0585E75D61B209F3A8F4324FA1F17A1F +:10E0500099E52F9E48C071045DBF12FD9D7C01C6ED +:10E06000DF66E1F992CFAE68FCB7B396ABC733AECB +:10E07000F7E8E3E43409C1ECB03C4FB7EAFDFE3603 +:10E08000412D1D5580795254F2CBB2B72CB4FF9676 +:10E09000652BE5C8179709BD158DE0C4F9B7B681A2 +:10E0A000E7EB33F2A5D4EBEF11FD0FE64B998D743E +:10E0B0009B66E4FF66CABB2FC2F35BB478CA63B445 +:10E0C000C998E7FC188A7334DEABAACF4EA47C450E +:10E0D000C67B55063F4DA9970FFB519E16DB15F2E7 +:10E0E0007BAEB945EDE4C7A857DB79FEB98D23981F +:10E0F00084F3DB342A81E096C6944DE67EA1FD537D +:10E10000ABEF1F619F40EFA57AF5F9391AE7B5E348 +:10E11000FC9C757C7EADC6FCEEB7EBF33B42F92A66 +:10E12000AC319264A67C9DC009C2F83D6B9057212A +:10E130009DA32186745F955B4DFD31586FFCA82E21 +:10E14000E6CB22D767CCC3B919E8CC8CE33737626A +:10E150009E036DB048F954113E6938FEE20C0E1F63 +:10E16000D6E646395F9566E7EF8F30F9B017ED00D8 +:10E1700013F0B92EE0F3E258B511E9A7358FFB99FA +:10E180005A2B0665A0DC9F647FE35DF45F4FB2B35A +:10E1900066B2E7946BC70B2CD6FDD3495646FEEE0C +:10E1A0008E322BF9651777FA9979FC85F63B0BF9D6 +:10E1B00057AFCEF3D7CF8478EAF89D59CF5F509A06 +:10E1C0008EFCABD66735911F48C793019771FB1240 +:10E1D000B4340FE1AD3955C2F77BB97EB4788D25E3 +:10E1E0006877E3FAB9DF39B1D4F73ED27F1F14A5BF +:10E1F0001ECC3368A6BC6C4D157114277B51687F0B +:10E20000FA5F89DE5C74CEDEE46E6E41B9D03441D3 +:10E2100056404286FCD02E7B3779193AF331A74419 +:10E22000E54D4BE9266F5A4AB8FCAED2F356564537 +:10E23000E5ADACEACC4FC9FBB9D1FB4D098D0CF370 +:10E240003C34AD75733FBAAE0F7C292AF1D7DADFC3 +:10E25000D557CC4C0DDBDFD522F73F3D1EA71496DA +:10E26000853DA78CD6F308E872D8D1F8D33F53BECA +:10E27000B1BA3EEE754921FA3FA3EFA72F46F1F65A +:10E28000297A1E3EA31F232F84D2BAAB57789C57FE +:10E29000D5792BBD8F5465DFF9E7EFB24F8CFED9EE +:10E2A000263989E73BB95EFF96165BDCD5FD960CF7 +:10E2B000E3FCFD352BC7A3A371C0599C4777EBEB5B +:10E2C000379AEBFFC63E35C669B574BE1797551928 +:10E2D000C607ABEC0EDA9755F6ECB308B7EFCA07F2 +:10E2E0008CF55DBFFFAED7F7EA58356E7432D94B67 +:10E2F000DB29BF98C321E339DE7EC7AD7A3996ECBE +:10E300002F2146CFCB15E3243FACE01CBCB53189AF +:10E31000E7EB423D3A2951A6F7355B1D03B3283E92 +:10E32000296602E543F4C6D848CFDFEF1870169F80 +:10E3300087FE292EABD531D883ED42CFF1F213C33E +:10E3400064825F893396F699D7C9ED796F2FD983A7 +:10E3500076C21C9BF23EC1A93E5EDE09D70F13F8C0 +:10E36000BA8DF50ED4E13F6434D76FE73879FE8675 +:10E37000E87606DD2A7ABBB787A943110E4B753FB5 +:10E38000476CAECFED02FE9834F2F1533105DF2138 +:10E39000BFB8B6EDC7D7CE2FFEE9DD586F47DEAB6D +:10E3A000D7A3F9067AB75156510F5B1D1BAA17C1A7 +:10E3B0005EB5AF11F8F3DACB77DF92C5D85F0463AF +:10E3C000FC9F3D8DEFB53DEE6011E385CF4F8CEAAC +:10E3D0001F4D5297ACB7D7D6CEC2FE9ECC37CA1FC0 +:10E3E0006D5333A03F4B647F4432FAF35830C66B11 +:10E3F000F9F59A1FAF1F15D2FFC11E98817034EC3A +:10E4000080D52726350E85B19CD254524A2D57A669 +:10E4100031D4C32D49DCDF6949626A1FB4B333FAD2 +:10E42000D2B92CF031CA07604B97C93F503D9AEBE7 +:10E4300035272C5C6FB72415B7A01D6D61F2B3BFF3 +:10E440007393DD50331AF1D367D261A4C390DD20FA +:10E4500092FF271BEC0FF4CBDA9B800F224C324C3F +:10E46000949FD18EEBA7FAE93BD14FDA32DABF6441 +:10E4700074983D94DDA45A513FFE50DF574DF3FB95 +:10E480009AC2CF7357E974969D63E4439F4276899D +:10E49000985052807689D1AEAF9465C275F7CDD0D1 +:10E4A000ED06B043D05FD0B7C98F91AEACAFE8AF47 +:10E4B000C0F5F62D9F6B45BFC6AAD1FC7D43CF9A10 +:10E4C000A003FD02ACC6C4F0BB4C8B753DDE2255EB +:10E4D00073BF59B9DD85F26A8BEF5907F69F9DB37B +:10E4E000634D5FDC179248DF71CA6EE2F697F8E081 +:10E4F0008C60B8BF799D2496E23C0ACD7EFA8E06E8 +:10E50000EB314245FDAF97F96DF776D4537BE49B31 +:10E51000318FDF462172BF18D7CCB11C1F0D824F3F +:10E52000FB9E87E72E0C8F9FECA3E79FDF369AE7D1 +:10E53000A99235C98BF27FD4DF7C04976DA3457A0D +:10E54000FE5762BB13EDEC6CA62EA9C275FA5C32C5 +:10E550008F6B6B263F60D20A5941FCDB93DA1F199F +:10E560008AF58A49A17411BADFE1E27FA4529EDAEA +:10E57000A163FCCF23BD159ADB9FF81EAEE7119176 +:10E58000C7C7895C8EF79EEA223DD492D446705E5E +:10E590009BC6482F1BB3F6AC13D53D7B928FA17E53 +:10E5A000E30434A1DEE47209F47E8C4751287F2411 +:10E5B0000B30056C4BB03B25A642FD44FBDB5CAF4A +:10E5C0008AB2B3B2619B601E48A08A866F51EE2862 +:10E5D000DCDE1AAFE7973CF2F534F2439BEC7EF2B7 +:10E5E0008B9494C730A4BB4EFB6C55FB214C89E740 +:10E5F000690B8A0B894EDA18DA91554D02F1FBAAA4 +:10E600009C2AFA4ED4DC26FE5D8E6A9DEE98A8D038 +:10E61000F7028E8C76EA764503C1BD9A7138B1F562 +:10E6200036D2EFAB1A8BC9AFD0692FEA79F6AB9B24 +:10E63000F83EB4EA796FAA74BF2E0092EAFF38DA86 +:10E64000B05756EA76B3FE9D027DDC984EBD3D5232 +:10E65000CF5D67E17A87F6BA99F4A4CF6BBE88C321 +:10E660007D1F7391E7B301392C47C8A91CAE9F5693 +:10E67000ED337729A7D8A620E9C99FA35D9014316F +:10E680006E845C5C67E978EC590F8D4B7105C63878 +:10E690005B74BFD7F5C6F9425F6F6BC525FA7ED5AF +:10E6A000967DCFD07774369681264D7A9C427EA88F +:10E6B0000287EFF2688287F2587FB4571E33931FA8 +:10E6C000A1F3FB32798CF4DAD95953961C82F926DE +:10E6D0007A06E5E3FCD24466C7BCB53163B8DCE931 +:10E6E000F6BB32A57C1F2596AAFA7765DA6FE98B0F +:10E6F000FAF00446DF0988FEBE4CFC1899FAFB5F6D +:10E70000F77D19E007F87D19794C02FF7E8CF17DC9 +:10E71000192532FF62F47765D6E9F6C71616DC8450 +:10E72000793EB51C2BE1F3B5CF0E3720BFF83CCFB7 +:10E730004AF9A453661CA1BC2E17051E07106D973D +:10E74000DC91376ED09802FCEE525905E5871BCC60 +:10E75000F57AA6ED56A6D27947A4DD22EA7AE31728 +:10E7600017389D3618F9A1F5FC77E4C38775178D26 +:10E77000B95EFEBB00E5B7636FF1EFE4751BAF92C6 +:10E78000271AF9ED68BFBA1252787EBBA8FC77173A +:10E79000317F5D36B56BA176BF34F2E095A902B545 +:10E7A000B3E8712BFCFD51EDF5C1B4EF989E97DAFB +:10E7B000F57A2AC5B1D69ADA5F44D5C465E1F68107 +:10E7C0006B7B641E7297C0ED0F26B648786E6C7C2A +:10E7D000C711CF1FA686D9170DBA7C58A8E7B93341 +:10E7E0009E5B78E379EFEE1E937C8DBC778AD88DA3 +:10E7F0007D95FF18CAB950DE3B4679DD5D8F661AFC +:10E800007903F53C8B02C1AD33EF5D9EA8E7BDCB2C +:10E810008BCE7BA7DB612D5278DE0C9745B1E2F7FA +:10E82000B958B13D8071E6D78393717F4E7EF52450 +:10E83000CC633067C14393BBCAC3DDD96E4D641E40 +:10E8400030E3BE18651719F4077C37C2CFFBC81830 +:10E85000AEBF06A3FC45F335B69FECFCA8FC788F51 +:10E860008F6106FFA67C5DF34F3A789E87A8769766 +:10E870001CC594E7EBFB3F2AA3F383B92C40D79A3E +:10E88000CEEFDBF17314798D48709677094199C703 +:10E8900065D84DF4BEA764C2FBF78218DA82A24B9A +:10E8A00003AE7733C3445802EA9132661B4885753C +:10E8B000AE153594B7DBDF75060568B73A49E6DF74 +:10E8C000356830717FCA7A2198CDFB4D4339A33525 +:10E8D0009854ECE7DFC7703FFF1B6374FD024040B4 +:10E8E000F3D1AF0DFA77A38CF1EA98A905AF268191 +:10E8F0005F57A3FED3851FCAE8AFC112B0A37ED66F +:10E900009169A2F3984B56B59CCEFB12FBD37B8248 +:10E910000DB18135A5BC9E78C125474B29D5E79916 +:10E92000B8228FEC01F5B9F71CF41EF14E1D4FD142 +:10E93000F8BEA731B21C9D472EFAFB937398FFDFF8 +:10E94000D3CC577F1F71E718AE17573185F0D360CE +:10E9500091DF7123FF5F2B329C7F5D06879B29939C +:10E960005FFB269494935E906065D9345F3EFFBE52 +:10E97000798902CEB72181D3DB3F3BDFE879FE61A5 +:10E980004C7F0EDF04BE3F1BD61A715A5C4F9DF3BD +:10E9900082ED19E44FB24EFF9F0A9C1F6A6BF97B10 +:10E9A000EE5B6A4C94B7ECCCFA6CD2BF82169E9F99 +:10E9B000527B94E7DBFF50509EC5381F81C994E716 +:10E9C000F1B331FCFB80A6C74717225F7E2B6A9FFD +:10E9D0005429C2DB98F771DCD4F585D8EF881E4C3A +:10E9E000B1C1DCF65A834E4C2912BD7E8699100CBB +:10E9F000FDC684790BE5F1F87ECE22B8DF03F9502D +:10EA0000787BB2D723F33B9E1CEAFB660CEDBFE09C +:10EA100030F46B9DFB987F6FE749D387BBDFF01025 +:10EA20009F27FEBDF8A18E6731BE61F750BF381633 +:10EA3000DA5F78F0C478410EC1E9F3D707105D7949 +:10EA40001AC2F62DFE6F7DE43E666B12793EBFA6BC +:10EA5000C8FBF89DC388E7AECA3FC8F53BE37B031C +:10EA60005B7C8585389F8D96C6528A93F0F85370EB +:10EA70005E676FF11D36F1FDD91FF9C9AFBEAE2734 +:10EA80007D42CB61D2CE04D4EFFDFD709DBF7A37BD +:10EA90004D413CBFA8EBB906FC0DFDDFD03BA3F711 +:10EAA000635FDDCE50C6AA4DA8DF8FFDFAD7F41DF7 +:10EAB000CEFA7D3C6F80DDD54ADFED635046B1B8BC +:10EAC000586E3F8CE731526BED97F199A08FBB4C9C +:10EAD0005A6698BDB7B889D7330DEA4787CE656DBA +:10EAE00016BF867694B88F9FCFC2788DA8D7A19D88 +:10EAF00086FCDF5243C123CCA2DB6996722BF10165 +:10EB00004F929E5F45CF1398DDE4EFB4CBB8DFD5CD +:10EB100067E2F1149179E3468D556721FC8CFC8DF9 +:10EB20009FE6AB63309EC2AFEBB35FE9DFA568370A +:10EB3000F2EE1E9D4A7AC557CC477AC5F8B126FD3C +:10EB4000BB14D3E9BB14C6FDABF337EBF9B73BF30A +:10EB50003AF23CCD0B27F1BC0A58C6B8DE453E2B35 +:10EB6000F9A1713FB744EDE7F032E6530CCF0BB19A +:10EB7000506CA33CD0199877B088E7570C6FBF98BA +:10EB800075103FC23C8B11FDE8F4956A5E4AF9AC02 +:10EB9000BFEB79D5776DFFB1DC9882FA8EF13D8EAF +:10EBA00056FDFC7CBCD9A5EAE7C2FAF739A2E30717 +:10EBB0003A5661DE37EF089BB4929F4FD1B9F167A7 +:10EBC0002F5B48CF67E6F5ABD0FF55DBCB4CEFA50D +:10EBD000459F0B2F60BBC7235BF88ABD65C5FDF35E +:10EBE000CFC665348CED8CCB70FF17E3321E191B3A +:10EBF000169711BDDF12F4F3E003AE2F7B84C7C17B +:10EC00007A7335F2D774970776B3BE4F9D7ABC8E70 +:10EC10005DD458B85FB9BBE7B6EB747CC0DAF16E6F +:10EC2000B387F43986E73569E805F184BE33D3321A +:10EC3000DAF70CCEDB2E1BFE18FEFD342D9DBFE750 +:10EC40006D979BE9FB6596852E85F65D03F71FB0F2 +:10EC50007FE1F125D375FF5E279D44D18FA0F0BCE5 +:10EC6000A3E8FFC07E7BC15EA5F7C14DCDF41D3585 +:10EC700001DF1787FD9390C7F9C556471B9F9FC4B7 +:10EC8000BF9300EDF2489E66502C3BF58372A1D7EE +:10EC90000376CAAB6F8D695E82F5D644FE1D9AFE7F +:10ECA000797C1E5B2DF05C12CFC78FFD647AFD7EF0 +:10ECB0002C67F6B4D3F7278E8CF5B58EE5E7D443F1 +:10ECC000888FE8F35EACD36718DD6BC407A3E81E3A +:10ECD000FD7FC87F59A38DF42822352AA7935E6D46 +:10ECE0007C8F6990C7D786F035EC0FE3FB3FC6F702 +:10ECF0007BBAFBFE4FC88FA0F1F7DFBC6DA467772E +:10ED00003C0C7814C2FC413A5D9CD2E9C4B83F7215 +:10ED10002CC74B9EAABE8FE37B3C2D4F631CD96250 +:10ED2000509A117E8B9B1FD8F5BB249E179ECA3923 +:10ED3000DC5E623E17F1F36523FDE7397CDA57E1CB +:10ED4000FAFB24B142F4F3ACCB99C2E6B8C82FC8A1 +:10ED500030FE0CE4F4B3D80FEC8F00CA8F943EA3BE +:10ED60008674F5BEEFFFB6EBFF0105BEC8820080DA +:10ED7000000000001F8B080000000000000BE57D74 +:10ED800009785455B2F0B97D6F6F4977721392903C +:10ED900005C24DD88204E8668920889D84840001DC +:10EDA0001BD01115B1C31A204B0BEA1F67D0740892 +:10EDB0009B884E505454C406C16DC06998888C0419 +:10EDC000A7898838A213B779B88C93880BC8D686E0 +:10EDD0005171C619FFAA3AF7A6FB761297F7FFF30F +:10EDE000BEF7BE17F53BD63D7B9D3A5575AAEA9C0A +:10EDF000CEFBBE704D491263A1DB99BC9D31966478 +:10EE000066DE402E63DFE3DF158CF57119184B0EBB +:10EE1000A7BD5C02A56758D0929F05DF935CD70A17 +:10EE200023A162B981F557188B555A5C08573542B2 +:10EE300039F8CB13B151F8EF57BDFC3B05FC9EEF01 +:10EE40007C19E180D589E5F33EB0B918943F735B36 +:10EE5000BA5F84FC61E33DC9AE518CD94786040F8B +:10EE60008CE3CC9E494E4C99CBD52F298F311BE397 +:10EE70007F3DC544262661CA02F7C98CBD7BB942D5 +:10EE8000E34A3179AE657DA1C09AD6970DD09ED95F +:10EE9000C5BFF749622E3F54EEB3C2CD16D8C2B0FB +:10EEA0000DD35CFA6EC07E1C5714995DC9584FA2F1 +:10EEB0007ACB5245E5931E8C655998816587F1A2FE +:10EEC000A559CCA2D87218AB81ECEF71CA3E802D47 +:10EED0007C8CDF43F9F606A104F1B98C31B9667870 +:10EEE000783C5AFD65A9266A3FF622F40778C89651 +:10EEF0004D7E01F06A5FC708662B98BF3FC0E342B2 +:10EF00002D85F130DF7E9B82E34468C28A7DA56156 +:10EF10002FAD770D83EF493DA471EBE1FBD69AE16C +:10EF2000CD1680A53B5B2E47D42B0D72811552E97F +:10EF30009F921BE7497F90BF7053C2B6F5D886E415 +:10EF4000CD9961676C36AE2BE07DF9585721CEBF65 +:10EF5000E05D23F5FFF5DDB17E33F4BF29B3A24FA9 +:10EF600002D49BF7819931A1331EB4D4C79A535967 +:10EF70002ACC63435F132E967D9D40F865FD80206B +:10EF800060BCD2DD1FF82C23717CEFF4C6A1DCE25B +:10EF9000B251BF58CF301ACA6F100D38FE05EB04BE +:10EFA0000753B0842F4D188D705201D65BD0203896 +:10EFB00070D80B36E71BAC48473EE6E80F49FF4DDB +:10EFC000B2C1630B8FA3429DCF1FBE134B02F0DD76 +:10EFD00060612E587356D92B719B48F3662EC4433B +:10EFE000659FA46DEB617E0B91BEA1BC7173BE2BBE +:10EFF0000DFA7DDFA810ACB557D958C6B07D8D0E7F +:10F00000AB70684A98EEFE20C9BE0C68EF0F40D97D +:10F010000D8E30FDAD32727CFBFE6920FAEF032DC0 +:10F02000203D9CB8E71F6944D76C25F5C3989F52D3 +:10F03000C9A8AC4945FCD4B58EF7C1D7F90D0986EE +:10F04000AA5C6CC75185EBE1BB3B96EDC47DB7A1D3 +:10F050006FF36880FBAC9399A0607B957D04ECE72F +:10F060007D33437A91EE8E253C4A1B5D48454C4AE0 +:10F070004821FC49F7030CE527BA8C34EECB557ACE +:10F080005C2584048604C35C4EF710C69C2ECF3AE0 +:10F09000A483D891EAFEAD89F1F787F1DB116FF017 +:10F0A000CD5EF3FEEE3A80B79A5839CEA7F99EC1ED +:10F0B00033B0DCD7774A02D2CBD7096F52B9AF470A +:10F0C00031C187F4A3F28F2EE82583E8E5A0E8C6D6 +:10F0D000FD281939DD4B77266DC37ADB1D9E07713C +:10F0E0001C97AF0A8AB8AD5E943FB9AF44E97E1D64 +:10F0F000D82ABE0EB01D030FC33AC4E6B61A11CF0C +:10F100000596FB1EF96404D6F351BD6A752B341BBA +:10F11000E52096F7092CF09CA3F3F89E54C7ED3038 +:10F12000304F80988FDF8AFB65D93846EBF5606DEC +:10F13000C3239F0001FA0ABC8FB5E2FAAC94583D94 +:10F14000A40FC6DEF1642BB45BE333CB6648BFB1DA +:10F1500066FA591C63A9857C7EA1BFD8FDDBB38804 +:10F16000BE0D26CC3758F6AE8FE8BF51A5DF1A4941 +:10F170003148389F63A21FD7FD82A4D44950FFC2F3 +:10F180000AD9E1832927C5BCF1E1B3002B75F10A47 +:10F19000CBC4F9BBB6E13898C922AF97C3ED255E61 +:10F1A00014996B44042C713A3C90C826C8C3C3DF41 +:10F1B0000FABF3FDBCA37F46FC9CD92C44BF8089D8 +:10F1C000E36F002CAE1CAAAC87719DAA7D6A0BCEA2 +:10F1D0005F8CCB5370BF2F9679BB35B63C652EC084 +:10F1E000AF2578FEE48AD84707E2520B84A1D8AE57 +:10F1F000CBD086ED1E33D2BC96F777CC0A02BC5C2E +:10F20000C874F820AD57E9C0B7D1CAF30547CF0499 +:10F2100068AFDECE66E13A2CB7029CDB3D1F9ABB9D +:10F220004E649E1E6178EC5D662FF12149D95A0328 +:10F23000EDCE3F973B7C3D0BE7CF37F1F58D6EE789 +:10F240006042FEA738FE6309BCDF6367630C59C3E5 +:10F25000007F35856EE4DB4926E0F8283FA79B68F0 +:10F260003D136FCBA7EF0704FF430B71FC57DB1C6B +:10F270003B619D364D77A5C524619A62005A63FBB8 +:10F28000FEB5FCAFB763BDD78D0E94BBC28C923474 +:10F2900011CAA7BB4D0633E41796F37D97DE24FA17 +:10F2A000114E2F097EF22CC089BE7805F7B198FA6D +:10F2B000F6E6F93DC274BDC99E4D74B2E975D10F31 +:10F2C0004289DD2B280FCD47BA5EACF69FC5F1B958 +:10F2D000A94CF1E3BEAA51E5009BCF685D4F595E92 +:10F2E000DA8CE35E6C7D6D33B6375634507EA8926F +:10F2F000713A05F184FCE5BC57F623BF1CDB87D7C8 +:10F300000FDDA0E5B732A4CBF3A31519E5D05864FF +:10F31000B2987F2DE005DBD7D6F3DA1C958E60EB33 +:10F3200063F959E9D4DE9DACC58AFCE7BCA4F2CBF5 +:10F33000F2185A776821EE12801F666CEF7AA48B60 +:10F34000D1CA21E4ABE71923BECEA4501CEE476D11 +:10F35000BD7EECFBA604575A22F22B23AC27CAFB36 +:10F36000E6A3FDCA72399D23CCF633664901BCAAD7 +:10F37000FC01F69B741FEE3757AAC3877CDD52E46D +:10F380006ACD09CBF7687A991AB5CFA6AAEDFE3AED +:10F39000CE91373D825E6BF2F93E9B2782BE05E33C +:10F3A0003A606237BA23E86F4A3ED7B3B4749EAA74 +:10F3B000976974A895BB4C6DA7A35C6CD7E5AEE8C4 +:10F3C00028A7F66BE6F4C4EAE3959D909626EAE951 +:10F3D000BF289FCBC359F99C0F68ED4697D3E63100 +:10F3E0004B2D5F93CFF9E2DD592D0AAEE3DD50BD21 +:10F3F0003E01538047723AF28D41B8E15A840D3292 +:10F400009339CCF3250B4A7CC61E2A684945F8A1DE +:10F4100014AD3EB0E8E19406854448AD2DA95E5B8D +:10F4200098FEAD0D97121F2C043E8874D26C74D0D8 +:10F43000FC7C757C7E8EE6FD839743FAD26A591177 +:10F44000655A3E97252FBCCE394C39EC857AA52ECE +:10F450008B03F930DBAC1C7603FC92C042EBBB584B +:10F46000774D8ECC55E58F368E524B2F5F6A121535 +:10F470000BF41C1D4967A389CEF02F92BE0A6CD6EF +:10F4800036210E5373D03CB48B7E1CC6333A98F5AC +:10F490004AF86C3023518DF84FA9D7D38D963EAAE8 +:10F4A000F2F16F1CAEDBF34785C71B2D2F0F0CEF5E +:10F4B00049F212B65A2011C6ABE92D6F633958874D +:10F4C000BDF9EE35F950AED0A2DC7C3F54693680F0 +:10F4D000BCC7FD550ACC620CAEA7C783EBF46E7AAD +:10F4E0008E13F771F43834FDE680C0F1C052037B0F +:10F4F000918F5C92A80C5F0FEB2AA3E885FACF34BA +:10F50000A6933EBA49A5A3C13DB725A21EDFB93FC8 +:10F51000F7901943BAEFC79FEF7A84E6AB96EF4EA8 +:10F520003E20FBC1F99B4C8E25B7A03C1698773B3B +:10F530000CE61DCC827A19E6D09C208C33438C7368 +:10F54000D4437A3C76CE9164987F6C82E769C4C7D5 +:10F55000AC6B26AD415868EEA12C83F19D2F6BCD8D +:10F56000C3F1DE257B7663FF15164F9F1498CAD929 +:10F57000DE9E81F1B858EE1EAABEEE1EE2EE72FCCF +:10F580007C3C8755BC27C77BF6613BCD8690DD81EF +:10F59000E71949CEC47A4CE6F3FAAB4A57878C8E0A +:10F5A000EF4230FE431BFB38EB910E63FF727D355B +:10F5B0008C77FE833D9D784ED0F052A09E17161892 +:10F5C000DC29415137DE97703E15B6B23E69385E90 +:10F5D000A33A5E4BB28A6F25D76DEF7EBCF582CA27 +:10F5E000AF6F17547E1D7C1AE1E7992CAF77C27973 +:10F5F000C72072395027909CF8938ADF478D500EB0 +:10F60000F9818525D6C1B85263783BA90F18FCF55E +:10F6100050CE5DF0FB9B30FFF12A9B034549195307 +:10F620004C48F4F398CB84E3FE34FF1F075B617E04 +:10F630006DF99E0F71FC4CE6F2EAC60F62489F77A7 +:10F6400017DA33495F1FC7F1FE63749083CA0BD486 +:10F650009F3155F0D3B98829EF5641FF57C1FFE1DB +:10F66000FE5FD071DE5292B1DCD5F81DE6F70BE6F5 +:10F6700035E27866B1064AAF63014A67B3164AE7D6 +:10F6800030F9602BD47DABAEE72DB7419D19865084 +:10F69000A609E6512506D7E0A603FC5FC0F17F5D11 +:10F6A000F4E64702E27D45D9405AE74DC93F897EDD +:10F6B000A70B1C9FB04FFFA1EED3914E43C4BE9940 +:10F6C00090CCC72DB5D6C7C37CA6A7643951EFB976 +:10F6D000E23BB917CEA398C98208F328126D249F84 +:10F6E0005B3E91B799B3C274038C232E0DF8D544B9 +:10F6F000955F3D78218E2541BD966C91CE85CC7568 +:10F7000093D40830682F8427C63CE9E7013E067A87 +:10F710002FEA872DB0C0D84FCB6881F48EC9A91BC2 +:10F7200027C0B667AFD43107EA7BAFBC2B3A906EE7 +:10F73000A76D3E228D04F88D7C4B08CF7B70AE9573 +:10F7400070FF4DF1D8BC917A71492FE3C71DFC10B1 +:10F75000FE9BDC4F0F97E6026C09C3D39814CE478B +:10F76000BDE743EBCB8723CA6717D893909FB24B73 +:10F77000D825DF03FE5FAADDCF4EA0AE22CE8E4796 +:10F78000FA2954CF6BC0594CD323F6C137B596979D +:10F790000F43B9F1A682410580A7259AFE20C3C96F +:10F7A00003C6FDC4E53DB6231DB68C7B69EC79D458 +:10F7B0001F9AB286632B7F99C8E5F4EC02B7B300B9 +:10F7C000D273C6D68548271FD742470319FBA41614 +:10F7D0000EAA70C4FEAC5626F8646D2AA55FD42A22 +:10F7E000949EA9CDA1FC73B50E827D05AE31D8BF24 +:10F7F000C2BC9BF1BCB1BC4E6228FF96DB9771D8AE +:10F80000689191C9AEED7DC4100BF05A3F3F572F60 +:10F810006EF4AF8985F12C6D72996C002FEF9D58B5 +:10F8200068C3F2F70BB48A0B8F7A8F20F99C7BE7C1 +:10F83000E35F4C6511E7E08B02E9D5138B5D25D8BA +:10F84000EFE7B5A3693CA76A5D349ED3B525943E26 +:10F850005AE09E8AF37335B5AD4985F6A7EE6A93F3 +:10F8600032202D720974EE1EEF627E3FE067B39185 +:10F87000CB8FCD691607EEFBFC21331EBD19B19D60 +:10F88000EFB906EB5F9D38AFA8077C9F36BA4CC234 +:10F8900072D77CC718C21A5DFFD8FE5058CB399476 +:10F8A0006F677D1C2F6F37BE4D70BB04788199B692 +:10F8B00037C6D239B5FD788C1FED1A339FE3F9CBEB +:10F8C000EAB83DE68009EA536A91EB018F3D9BB2AD +:10F8D000AE398078FCA39199159C2F7405F33F9065 +:10F8E000B93ED1C5E568C87039F0BF5D6527D291D2 +:10F8F000BFADB630733A94DBFD7F5A115E2BD8BC96 +:10F9000022F47B3A91CB6DC6BCB14857E78C5C5F63 +:10F910004318F5D62A9376DEF40C46F8740C2F8F34 +:10F92000FD2903F977AC777AF7F383717C035224CE +:10F9300005DB7D62F7C6F674D43F448BD70CFBE839 +:10F94000E9671FCDFE1551BB9FF6F3D37BEE8CB953 +:10F950009E91FEEFC2F64FDCFD7C06CE7320E8A13F +:10F96000C807E6DDF3FB8CDF43FD278187607B075B +:10F970008C8E73FB91BF3F6AA173C49377570E4778 +:10F980003E36FFDE6B8BD390CEF73127B2AD070A40 +:10F99000B8BEB170F39E7B519EE73A9803DB1BB66D +:10F9A000A5CD900EF59C3B847A4C47ECCA1233707F +:10F9B00038A9815F229E2F3130079ED3D9778FA738 +:10F9C00047CA99470A149DFD6570EF92A322E84942 +:10F9D000B99BBE2C4867917A430CF16B4D5FF84D93 +:10F9E000E6F1F632927B0D54FFB9A6996FE37C0FD6 +:10F9F00008BE343CA7F9CA4C0E9253800E23D24560 +:10FA0000635FD23BF6197CDB488ECD8579027CD6CC +:10FA1000ED7B08F15209E5F1BC56E96C69BB0DF2CA +:10FA20002B13B2199E034EFA9793FE7AA9C0649CD9 +:10FA30006755E3FDC5B8BE67C7318700FD973F77BF +:10FA4000A198E45B6FC6D06E72B6B13EE53AA87F6E +:10FA5000576EC12894CB6E3140FDB16ADE5F75D31D +:10FA60001E0BC2A0DA268AC020139AF25FCA50C2C7 +:10FA7000EB6668BD270BCF57C91ED04FA1FCE62C03 +:10FA80005F1AEABF9A3C6DCB773715901CBCAF0C60 +:10FA9000DBF914C685FAD54F957F268377318D27FC +:10FAA00095EBE35ABBBD0DC1C5A49743CBA897EF17 +:10FAB000945BAE655CBF957F4DFD7A8E211FC810AB +:10FAC000CB48DFCF30737D9DC93333713D7F6AFFF3 +:10FAD0000FC6FE8BF4AD6A439CC33C32ACAFCCEA9C +:10FAE000517FB015D6EBD204CF719CDF0255FE33A7 +:10FAF000C9A1A09C4C4970BD87DF2B2C20570D2439 +:10FB00004FFF82709508FA57DF08FDCBF2D3E4E986 +:10FB1000C404D7099CCF4F2DAF30C766B4B774F07B +:10FB2000DDAF86EBF86EBDDDC49C786EDD6426FE2D +:10FB3000C20E1B2A8E801E7E39366108B7B7DC3EA6 +:10FB4000BC2703F951CF5897F87A11F6BD07701BFF +:10FB500004F9E0A1FDDF528FF66017FC6B073A193C +:10FB60007FD1C03C11722FBA3EAC935008F3CA67E4 +:10FB7000B1BA722E9660223BA42DF127CE37F8B889 +:10FB80005ECE343F1E39DF71EDC7635195023CF400 +:10FB9000C4B4BBF91C54E7F3079C0FA47F9EE8EEA6 +:10FBA000518876BEBFC912CADDF192C83C11721AE3 +:10FBB000C69F86E3777D17A31B7F079DFDC4F1DFFA +:10FBC00002E74803D2EF9726B24334A97689A6C547 +:10FBD000B97EB2CBA03D07ED14334CA4CF36D9BDCE +:10FBE00064A7697A3DD9E1433EA2D973CBB83DAE53 +:10FBF000C9CAF743539A2CFB800FA49BD9678DB8D1 +:10FC0000EFC57886E7CE8EF69365D27F0E084CB5A9 +:10FC100083F0FE3BDB85449247A16B63C86EB2C99B +:10FC2000191CFC5BCACF217B9F66F74917614274A0 +:10FC30007E37D33836D997BD3604EA6DAA8B25F9BD +:10FC4000BD29CBBF2E1BE1DBFB52BD1A167C04ED98 +:10FC50004B2C6422FB7117F61E2E8F249F7DFA1009 +:10FC6000B2EF74C078DE1A2B0A049F0239B597E40C +:10FC7000129403BCBFA7AEEF7189DB578EFB0DBE9C +:10FC8000FEC3C2783F8E7697DC703B3FF5BB66A71C +:10FC9000795F3DE76C4A684896219D5BE8B916E9B3 +:10FCA000E4DA053BAD9E087BEC28ABFB7AA48F130E +:10FCB000F3773E8D7E1A369F9F93A03EE91BBE6F61 +:10FCC0000D84A771A6D629BF003C8CFBBB4140BC6C +:10FCD00044D347875D6C052FDF194FCB54BB9D483C +:10FCE000763B648CB85E8FD95234BB18D157688F7D +:10FCF00095D6AF648685EB172B0CDBD18E07787415 +:10FD0000E1F937F49C59B38BF1F11D1CA2D9C5A8B8 +:10FD1000FC638164926BC1DA96CD13FA032C053330 +:10FD2000AA916E9AAC8E9D542C64BD04E07306B605 +:10FD300017F5EC1B557EF91853E289BE8E8AB4CEB6 +:10FD40000FC6C651FBE76F87FE010E76E0DD913AE4 +:10FD50003342DED60B5CFFA830050720DE1F53CBF5 +:10FD60006970BA99DBA91046BBEB01555FA988E120 +:10FD7000F0BBB26703E27F9FEA0FA88883EFB69FCC +:10FD8000824F0343391EBA4DD4D9191FF3F656F1E9 +:10FD9000C9EDD921E037DBB11D0960CC9772C8BE2F +:10FDA000DD6167AC14547CFAEF1C80F33FD89FF000 +:10FDB00024CCB0D0FA7C76BB81CE35E7569CC8DB2C +:10FDC000AC607D36743F966B3453B9C7A2E8F6B188 +:10FDD0000E3C85AC489F1ED4C700FE486EB547DA7E +:10FDE0009D3F727F66473EF7618D1834C575CF7FA2 +:10FDF000666FFEFC9F6C28A46E539B88E98A8F6710 +:10FE0000A33F6076F97773E87B8519CFC261BEC6E0 +:10FE10004C7828E530C8AF0F0A5DFB10BF1DF83CD9 +:10FE200069E8D66E4BF8B41B081F9A9FEB8593E9DF +:10FE3000444F489FC45F4ED9547C078206805F6858 +:10FE4000CC72E0B9B0039F0F99293FBCDFFDB1D35D +:10FE500023F6E90B12C7CF0B88B7F888EF1DF657CA +:10FE60003FE9B11ADEEA658725126F1F0EF3BC85E4 +:10FE7000FB78A56DB8A515BE97C7171C453BD87D67 +:10FE8000133C7F2E247DE75C319E0FAB599C03E928 +:10FE9000FB8CB1E508DAA5D88A9F269797C634551A +:10FEA00009C007BE68DAB90F531807E185EDE57C94 +:10FEB000FB8C1C8CC3F1780C0113E1732EF3EE0460 +:10FEC000BD6509037824E997DEB5D0CFD2A7A2D7C4 +:10FED00005A606E7E1A5F83FA88740F9B149588F84 +:10FEE000290FCBF8DD142E4FE7683FE981507E19CA +:10FEF000EA634B13F6DF3316BE2FB1D92C2B123B1E +:10FF0000AFF392C6B52D7D8776FEDE791C51FC2AB3 +:10FF10002076470F2A1F0FC621BF0EF3F520D9C741 +:10FF20003BF3752817B1CE67D4753E13B5CE673A4B +:10FF3000D699B7A39D2756ABFD1BD5FECF044E64C3 +:10FF4000A27E714EB3FF8174423D76E96F7B6F47AD +:10FF50007A5CADF2F7A53D0279B81EE9A23EFE40FB +:10FF60004B975A026B904E6597BC6C6D5AD89EB8F1 +:10FF7000D41D30A1FCB428FCFB3ED5EEB184F9D7EA +:10FF800020DE533DFCFB523763A313F977E4CF5ACD +:10FF90003B4B0CFE4C5C476D1C9DFA8DC2FBC009AF +:10FFA000FC9CB35AF367D8B99E80FC14F13670B349 +:10FFB0004957FE9CDD7423BAB807F9F5DFB5F6475B +:10FFC0004C1054FB53C47A67758F87316AF9679E6A +:10FFD000E9282F7E2FF27A8A46970AD7338C38BECB +:10FFE000F7D4F131767306E89D4B710F6587F1B454 +:10FFF000CFE9C948B4911C21BEBD2F01E05CD49F5C +:020000024000BC +:1000000079FF1ADC81EF28FA5EF95E1EE9BFFBEA90 +:100010002401FD9C8B2670FB6D93C1417AB00FCEFD +:10002000CD3B615FD4D9F37AB6DAD08EE1BA0FFD59 +:1000300085D1F3FAACD6E59A1FF17DE166A705E913 +:1000400066D116A7656E847DBBFEA9C79B15E40724 +:100050002E4BC800B4542FF9EFB92C09BF8B01D82F +:1000600011908EB020BECFD89ADFC0720BB7240C8F +:10007000C7F396567FD1E622D7FC887518FC947E8C +:100080005D8604F4F0B0FD7AF8A6098CDBA77F66E4 +:100090003D67500F8F38AA879F1F1D12BFC77396E9 +:1000A000CDE0B70898AE3421CC7CF1A1FED0DFA81A +:1000B000775799502E7ECED8D7782E3FB96F6D1EC8 +:1000C0009E1F4EB3C09FA7C23A2C6CDA6892145C94 +:1000D000576FF110C47B8125B4D381F3EDC437D6BB +:1000E0005442BB4BBCC057615D16FBF5F99DF94C02 +:1000F0009D6A07643991F4154D07A7999FECB315D4 +:100100003553EEFB24C2FF3526B091E2401697EA44 +:10011000E7BB549218F2BFEEF89A14D7528C7CAD1C +:10012000ED2E81AD27FA95C7D7003C6F9381AD279F +:10013000FF8D7CC76A80E7BB63C85F73594D213B65 +:1001400081FEFD0D371D417B4899C8FDFFF26839DE +:10015000EF57002FB008743E59197BC71AB43B946F +:10016000C3FCD10FB4581DF7654DDB441CE7DC55CB +:10017000E6F03E84FFE66F881ADFA6887CD847E564 +:100180005BF4E597ECF8DE1C096BF359A08E4FF495 +:100190004D237DE632D51EF509160139737AB8BBB9 +:1001A000114D5A976DCAE7F9123F4F5532CFAD3214 +:1001B000F0A74A8BE756D55E2E4F84F247E15C8963 +:1001C000F8B9B0399EECB017B01D84B7703B6B39ED +:1001D0006BA07372650FFEBDF27702D9D52BC532C5 +:1001E000924795CB998CE774A40F57C478911E223F +:1001F00061D6A0F92D82546F899771FF18AC9B2BA3 +:1002000022CE09F24D27A19F2A9F107818DAAD0C53 +:1002100044B5C35AC85E52CDB85DA27AFFF7667D79 +:10022000BE9FE8EC3123F71F801A43E7A9C7965C0D +:100230001783FC0AF80F3F974DE7FCECC7FCE99BDE +:100240009C7CDE9B16F7A7735D3AF248C4DF7D3CC9 +:100250009E60BEE14D3AB7CD4FE77830AAE7AAF7E6 +:10026000712869687E6F26FFC4260156C149FE7356 +:100270009F95DABB84DAAB51F57436CBD48DDCDDD7 +:100280001BA473C0FD42C73901F7EF751B7BEAFD64 +:10029000E777AB7120926B8085F207917DA7430FC2 +:1002A0004B66D17A5872A47CBECEC8DCC897AFDB4F +:1002B000A697CFD709F09DEB61C9917EF01FFBAEE9 +:1002C0009DBBA68DF4988A22EC6F9B12FC5619EB0D +:1002D00095FF34BFDA4EF55C14DA68A5F17F22B8D9 +:1002E0008F1810EF31EEF55720DE1FC8CE467A4C3E +:1002F00029E2F22CAFC03540E6E51D840F173F57C9 +:100300007F82762CC0FFFC6CD78065B9588EEB2FAE +:100310001F39B93C8A1DA9C6EFA9EDF42932E8526C +:100320003681DBF53EB172BA9BCDDCC588DA9D0A19 +:10033000B4938B711FEE3F5E1E319E0EBF1453C8E7 +:100340002F35486D77BE4170A1DE32FF5E33ED235D +:100350002679FA223CFB780EADD727AA7CD4E80791 +:10036000D447A2C7EBFE943C1CE321343EFAE3746D +:10037000ACFACB161BD5F33FA7B34DD70E20BA4B23 +:10038000089FFF393DFFDACEDB292A4843FB11C61F +:1003900079FC1DCB1775C479905ED6BD5E08F4A4B8 +:1003A000D30B395D74D60BFFCBE8EEEA1FA23BA856 +:1003B0003FEA87FC9195CFEFDEE783712EF9EDFDE3 +:1003C000710CCA9D921A521C781EDDB93ACE05E90D +:1003D00049C91787ED9DF28B25FE2EF4AB4DEA7AC5 +:1003E000A3DF4B4809FBCBBF78E61F6B7E09EBF21E +:1003F000B5C0422837AA1ABF5DF34BC0F311D043F2 +:10040000307EEDA4D45A8C72667199CD5BE740FEC4 +:10041000A6F7432D79F2FE14C54EE3CC30A412BFEB +:10042000A4B8B7AA1D4607DA3DABDE111D4826D594 +:100430002CB406C7175DBF3A7082CE29B281857A87 +:100440008DED9C8F861DB4875637DEF525DAC9AB56 +:100450001B4FBD8FE7CAEA28FF57B9EA2F8CF683F6 +:10046000D517A97EB04BD9A5A84F027EC83FE78318 +:1004700071F5E7CB4F745DFFF493CFBE00E338F521 +:100480007E4F27483E7666C76B71426ED81FA6F92D +:100490000DCF04FAC67BBAC0AF969E53FD26E1F598 +:1004A000E3FC5FD90F03EC0960134F2B8CC1383C80 +:1004B0005F556C333A608559C5EEC79F7818E9FEE1 +:1004C0003DB303E3872B765F30219FAD105C21C1E4 +:1004D00049D3891322E21C96EEFEB4F8113C6FA4B6 +:1004E00089AC14D66DC9EFBEE2E55D2C6485F24B94 +:1004F000F7B415FF0A618FCD6BE962DD0A03874C03 +:10050000ADB62ED62DD0564CF6DAA7BFA17539F56B +:10051000A2C07A6675AE5FBEF3349D27E1BC14922B +:1005200051EE05C432537C57EB179CF6C248CAA75C +:10053000F8A91F5BC779454CA5773BC3B8DCF2F738 +:10054000CDFE525CDF7B9613DD7F2E7939DD3FBA1D +:100550003A05F5E172A32F45A6947F2FDF7A8B4AE7 +:100560008FAE3403F95B7D6938AF055BAEA6792D9C +:10057000641EA2C3F247795CE657700EDCD3C57ADD +:100580005A8AF97E31B39B86E2FEF80A5A42BDE6EA +:100590007313976FBEB7F8B9D4CCB67F84E7EFAFCB +:1005A0005A9205947FE29B460BE2E5E68309649745 +:1005B000F950E5D7856F7E558CFBEAE62CC96B9622 +:1005C00069DE3E154FC2F7DC3EA6485AFC6636B6D9 +:1005D000DB6EBA01CAFF0DCFDF0E5D79C2D3E7DB58 +:1005E000CD31C2304853F8F906FEDE62481FBC2DFB +:1005F00056B5E222DFC74C69C7F95FAACEA7FAA9B0 +:10060000CF8B1FC6FD36D7E68D07FCFCED9D13266C +:10061000F4EFF8920CAC3F8EABE5538299235989E5 +:100620004F0DE3A37ABF990523F7ED8E4FA3F6ADE7 +:100630003E1FE404E1AD9AC5533CE5E7A69009F9F5 +:10064000810FFAC573D342D0378311FBB47AC54901 +:10065000951E4CE1EF59E17DA7F9AD17A9FB3C7A56 +:10066000BDA2F7BDA158BFEFB5FA6C4BD7FED5F0D0 +:100670003EF7119E2A8CCC27E3FE79CF4CF2A9627B +:1006800023DF8F0CF8647FA0F7131B5E4A190378F1 +:100690003A1D30269552AF7ABE5ABEF7D3236BA1CE +:1006A0007C7AAAC8ACC457BF31E1393FB59085CC3C +:1006B000A81797FB0536A48B7D09DFBBDC97E5EC1B +:1006C000FF2F3F651BBE447B5D18EFFA7DB8A81B6A +:1006D0007E3A04F11A1BC6EB572C377E2C66CA658E +:1006E0007DC85F11855F0DAFD17CF1D522A54BBED2 +:1006F000087F7F66117864ACF5C85AC0DBD76A1CE6 +:1007000046D58E6F495E015A43E807AEF27F49F045 +:100710006A9457041FBA0AE3703BCF5B8FCFE8FCA3 +:1007200090CA77DCBFE7F7032A9A048A4F857A7468 +:10073000EEAA467F14956E3892911409FBA3E0400F +:1007400054795714EC8E2AEF8982BDBAF215FB5FFB +:1007500032F1CB21415D3973CD143A7775D617FC50 +:1007600084D7EAC62F4D3EA48F5E2113F23DE34AA3 +:10077000E6B3A3FE755024FDEBBC128A43BD64B5FD +:1007800095EB8BE765154ED0607663198CE3BC6FF3 +:10079000A8ECC37A566E173FEF0EC5A9F66FD2BF0D +:1007A000EA55FD4B54F5AF0E7B861ACF7C3E9597EC +:1007B000D7BEB73589710AB4DFEAE776B6CEE3AFC4 +:1007C000A7756855ED7045E277CFE2B9B1DDD7CFB7 +:1007D000807698F6555F7158CA4964E411E2FAE7E9 +:1007E00027BE89296833FC94B9FF3C16D7CDE73280 +:1007F000617CCF3CBEC4ACFCD5FA38B42B88F691F2 +:100800004730CE61211010DA1BE66F88D267983B23 +:100810003E8876874DFAF81B8C93C1FDB708E376C6 +:10082000643C1FEBF397349DA67DB4246A1F795472 +:10083000FF45F43E7A40DB474EE6C47D5424DA2877 +:10084000BEE6FC511E17DDBECAC8D6E07C7709148F +:10085000F7DCDEC4F5E7F6FD1C663E358E4DDDCFD8 +:100860001AFECEE03E1BD8BD7E72E6B9BFE461DC65 +:1008700044C5BE0F863E02E9997DEF0D3880F0F346 +:10088000FF91F901EB5CBEF0C56FE7D0B85E343381 +:100890001CD7F9175FC944BDE2FC0B668AB739BFA4 +:1008A000D24C7ABCEF453BDDA338DF9B9F17EA0FA4 +:1008B0007E33B495E4D22A5A9F43C5264ADB9BFE79 +:1008C000F1119E17DB9BCC0ACEA3FAC558DA6FD57F +:1008D0002F58C98F7CFEE0377991F75DFE5FE7A363 +:1008E000C59B9C077ADC8B749DC0FD06D507C63C72 +:1008F0005E877683C643A679905FF8877F0E45BEF4 +:100900007B7EEF2113F2E573C6D6AD485FC78ECC70 +:100910007CDC3806ED9DD0583AE811AFDC370FF794 +:100920005567BC703C9C073CE0BC002FE5A887776E +:10093000878F13FF6DF1F1E51CCEFF2E6562562403 +:100940005E0417FF6E273B1ECC9F7F7FF19BA1C8E3 +:100950009F7E6CBEC24413EDEBFF2DF3EDF3DF760B +:10096000BE9CDE9F2C56B85E1A45F79DE9FAF95BEE +:10097000097ED6EEA0F1FEC4FD7EC5C4FF5DF47D08 +:10098000C3FFD8F57E555D6FBB8CE795F307FF99E4 +:10099000C97EC6BC57FC0F9DB7A6E717888EA34E2D +:1009A00028FF1A0BBCE3C822ED83F48E7A1B8FBBA1 +:1009B0007E25356BBBC8FD4C74BE2A54CF574FAB58 +:1009C000F1AEF56CF8AA00EE07D0277692FD7EF81E +:1009D000E137B19E671CE90966C6E9EA2B8BFD0980 +:1009E000B4A74DE8354F5A8EE72B0F3F7F017C7837 +:1009F0000FEAEB979965845FAA83F100FC92DD20F2 +:100A0000D777218F3BE4B2E5F559E8579E60D39F35 +:100A1000BBA6449D9F2629FAFC12B63709ED7B251B +:100A2000B946062710568CE523CE956B27CA34AFFE +:100A300049AC61956CFB4978A2F3EE2BB2A2E2C9F6 +:100A400015F4035CACF45B86F37F17F1340ACB2F0B +:100A500063E8B7F2BD23AAF120065AAF572C973F9F +:100A6000B13E12BFF87F0ACE6FCA61C4C311507085 +:100A7000505F2FEC3595E0D4420BE9FD1283F33043 +:100A80009FA7EEFC2C51D390229E93389E0B08AF6B +:100A90009EC37B605C2F8D3153BC6B447D9A777D08 +:100AA000AF1116C5F6EFC7EFAE6EF0DB4B724AB86A +:100AB000AF2E57F5FA095202877BB5886EDA6F7E42 +:100AC000C263E1DF1C12EA1FF9B60489DFB30DCD62 +:100AD000417B96688873A07D023DFC785FAE1EEF77 +:100AE000F738197B5EF27C3A91EE8DC8AC00F1517B +:100AF000C002682F169A5EF956207FBCD7E026FF09 +:100B0000EE91E3080FB4D882689F615BA4331D7A2D +:100B100031FA4194DEE1FB3919B0CACD56DA1F3102 +:100B2000FD4CA4AF0EC97115E0FAC6C0FA66C33C0D +:100B3000F39BAD2E359FE27334BCDEA9C6E3D4C36C +:100B4000FE0F62BCDF77F01DD68DEE2EF7C576580E +:100B500047BBD84E41543BAB6B2D2C680EB7A3D589 +:100B600097B0BED8B97E21D61F19AEBFB656A67EA5 +:100B7000A3EB1BBBE97F4254FF77D5A6AAFDF3F98F +:100B8000FADEE571175A3BA66EDA298A1A8704FC49 +:100B900025D2FE113D1E7337F3298E6AC79414F3D4 +:100BA00083ED58BA696762D4BC2CBD127FB09DD862 +:100BB0006EDA6152436A649C5B743D9B8A0F8D7E42 +:100BC000B572B6DC745D7F4C0EE463BB65C0F49116 +:100BD0003EA7D982F99A7F6325D0716FC943F2C4C9 +:100BE00094C364F45F94DDF77C3EC2658B80969D70 +:100BF000B87F5A042CDF0B7476CC37B14681CACB50 +:100C00004CAE87FCB2F8202F3F0FDA4BE0FD22BF3D +:100C1000E9876936863307A87ECC047E4F0F180714 +:100C2000CD33BB3F1F8F91C999788FA54FA17CEB26 +:100C3000713C0FAFB692FFABB4809F97B5793D5032 +:100C4000C2ED7D5A3A7892C2F99FE019847898B63D +:100C50006A109DC7EBADEECAE7506EEC8EA5F8F3B7 +:100C6000B235374C1D85E37BB607BD03F0C5B43DF7 +:100C7000748F69EEAA6B6F7917BE7B9EB2D2F72B89 +:100C80002779E69440BB5F08CA9CE7E0C3DCAB5F12 +:100C900032E13D8469813DE7D07E3DEDAA588AD39B +:100CA0009EC6026F60FC00BB4AA4F6DB9EB59B307B +:100CB0003E7D6AE04B09ED0B53C70914B6DB669520 +:100CC000336FCA25BF32C5452C2951E59A95FB479C +:100CD000CAD6F41E900DDFA7AAE7FD6839F44809CB +:100CE000E7EF7DEA1DA9787F262458E5ED23C3E5CB +:100CF000B11D6C775B098F9FB8454D35B84F21F713 +:100D0000CFCC5F676EEB1B87A9313810D2A42905C1 +:100D1000B7E13C4BB359F1E6911447C7B6D37841DC +:100D200024603F1BB314B46378981AFFB4218BE49A +:100D30004A5BBEC3940670DBC62C19EFDFC4E6BA6B +:100D40008EE0BA2F6C1014944F6DF99C7E43767E22 +:100D5000AFF92359CEC4F21FA5F6957DC09AFB8842 +:100D600087FA91BFCEC9FD757F99E4B91BC7A1D1A0 +:100D7000F325EA3E602C9083F6AEBBAE83FD87F48C +:100D80002E39E2505F1A6575DF4BE52D8E7B2E857F +:100D90007E1EBE476468F76E2FE174D0470CF6A341 +:100DA000B87399D3D95663EB626C6FBA9A5F9A287D +:100DB000E7D9387D31ECBFCD280FC0F9B5ADB61AF3 +:100DC000F04E5AE94A4E6F774A01A267BF4B31F89D +:100DD000803EABD4FAB3EB24F73618472F0B93ECD5 +:100DE00089B00E533CB7E078A606EA3E42FBC93C08 +:100DF000346662BA61A309F5B13EF59A7FAC6542EB +:100E00000F68EFE4CE2CDDFDF1A9530A9E29895C21 +:100E1000A7ABBE74525C96AC18E2D390FE5DC5C918 +:100E200049982ACB50AEC2BA05B0BF22B189F66F3D +:100E30007B0DF032185F3B6BE1702AF77FC3FE2415 +:100E4000D8349FC7D5F7B2E8F76F86BAFFA47E1CE7 +:100E50007EA296BFA1F014F07F4C9F013E2EC1DE12 +:100E6000DC05FC18E1676B154A03B539F47D6FADFD +:100E700083E0C6DAD104EFAB7511BCBFB684D217DC +:100E80006ADDF47D8E12ACA3FB791626635C5C6F81 +:100E900029407CA3131F18C4FDB5DA3A1AD7E51B05 +:100EA00050CFD0D6AF48CC8D4779DDCE9478B90BF2 +:100EB0007F8296FEBBE6D18F717AC8047CD78D09FC +:100EC000C3885FC45F3FC6E79962E1FC339B717CD6 +:100ED000CBC083315E2C437219882E3D4CC1FA265B +:100EE000E6E67C1EB75A1AAE8F42F6A95E1EE6AD44 +:100EF000E378E2EB3781F7A7E185A9ED6CAD640AF1 +:100F0000DDD3905A07E13E2912CFDC7D297C6F2F7B +:100F10003738D0BFD6CE5A773F4FB08DE2B8334D79 +:100F2000ECDC2B23491B52C44CD4671CA966E4B7E4 +:100F3000779464A19E737DB9C0A408797183D74A60 +:100F400077AA35F8C69A041DDCE6F48893F05CB6FF +:100F5000A2EDD1FF80F6E7DCF1C5D9450A8D63E744 +:100F600083D8EF8A1807DE736A87B248BFEDAB8C6F +:100F7000E457C63FBCC7ACDD7F2EBBFD1213DE13AA +:100F80006A73591C828CEF8228C5A351EE1B18C5C9 +:100F900021BD8FEB09F8FF505D4F6BC33714E7D2CB +:100FA000A6C6C1B07545AE483DAAF7A46CE2AF1F16 +:100FB000FDF21F3CDED76891D10ED9569E4876517E +:100FC000A6DEDFD6FA9FEB8B6D43BD6CEE2A91DF78 +:100FD000A38E6A8F39B8BEF731EA7B24D740CF435E +:100FE0007911E47ADEC7B7A7F8D00FF1F14D710E91 +:100FF000BC01E759D7D3B708E00D4E9343447B7843 +:10100000135B83764DA0653AAF309F51AFF7B5F6CD +:101010004A403BA5762F3B76A49FF47D202B19E513 +:10102000EEDC9C6686FC93350832FA2DE723FE122F +:10103000918FABEFE3489E4157611CFB2491E67D05 +:1010400055894474B2B384516A650EB25FCEDF2015 +:10105000D0BB45F31B9CA685117266AEFA7D5E8EF1 +:101060008152EDFB04B5BDF475658B517EA7637E9F +:101070002EA673E9BE4FFAACC9922084CB8F9F2471 +:10108000A9FD331EC7814C0AFE5D9FC3CF797367EC +:101090005DB7837450A698905EB5FEE6E60C5F835C +:1010A000F70DE66EC8472CB1074C3CCEF881B8E28C +:1010B0009DC84A4B26F1F968ED56A8720F1062C21E +:1010C000788093789385F808B7532F79F637E467DB +:1010D0005EF28199E4F992615CEEB25C7FDE4CEEE7 +:1010E000B7D4F99126FCE62CF93FCEC2F992FC86E2 +:1010F0008D274C74DF01F621F2DFEA46B1CD1CD713 +:10110000D99F71F8D90FE2BAF4233572FFF78FF93E +:1011100091B47BB3D5BFE77E100D8FD5C245F2B732 +:10112000561F5C9DE2E9421F40FF654D62677FD21A +:101130004FF53B45DBC97F3549EF6FD2FC78DDF1D8 +:1011400057CDDFA4C1E53543FBA25F62494D5E5F29 +:10115000F45354D58CA754CB3FABDE8BD5E0CA6E8D +:10116000EEC58E3715DC85FC44BB0F5B5E33586DD6 +:101170007704B5F786AA072992128FF4D3EEEF1FF2 +:10118000CF7E609CD59B61323DD08FA1C4A3DF5A36 +:101190007BC7E3FC2E91DF6BD835643BD2EFE2A630 +:1011A000FB4C06F8FEF624AE979D8DF2A355ED3A62 +:1011B000417EED4AD642EB08EBCB2C917E558CDB81 +:1011C000EDD1795C4B7F63F7227D2F0E08AE9D2811 +:1011D000B72C01B2F3B5EFBAC1E88B58EFDFAAF430 +:1011E0001D3DEE1DA8D72687BFE338711C4BCD816E +:1011F00073EFE34EF96D2CC622E1BABF81710EA7E1 +:10120000B78C70A01EB438B0A78AF4875DB132DA0B +:101210000FBF888A4F3EA0F6776012D70F4FABFE04 +:10122000F6D3CF8AC49F71BCB8CFBF10F4EF801C37 +:1012300052F7F721154F3327F1FDA8955F1CD848C9 +:101240007AE3B9C629FDF11DB2F3FBDF8EEB07DFB0 +:101250005F53EB9D6F8C2D417C9C6F7CA4F800EE5E +:10126000B7407E12EE4FADFDE393F8BB52679B781B +:101270007C0DF3F3F8C14AC4EF88C871F6A0F79D5E +:10128000B47ADA7DCDD38DBF8B33E486D7AFDAE283 +:101290003D9A6D08BFC765367A7C683733EECF0F4D +:1012A000A29E4EFB1FDA5F9BE375E339402B67B2CA +:1012B000B8E8BC52B57F3ABDDBA5F98D963D67A471 +:1012C00078C939C3946BAE47FEF09A91F0BF6C10A9 +:1012D0000BA25DEE428D7D1BAEEBB2ACD6D73D00CE +:1012E0002F5F8C8C0CCA8F50F94F6AEB288C83AA25 +:1012F0005827D03B2F35CCB5F208B6A3BECFD49635 +:10130000E5F813CA91D0EB5C0FAFF08BCC3382F8C9 +:10131000CA003CFFB1D1C101B85F3237F37762FE3A +:1013200035899F7F3E32F178EC8A6C7E9FA68F1ABA +:101330009F5591C8EFDF9CD1EEE7CC080EC078B185 +:101340008ABD69142F7646BB6F03DF519FAA18CE62 +:10135000EFDD6878ADF865F300A4B78AB9811CCCDD +:101360006FCB92CF515CDE737686E702C3F3761EB5 +:101370001FFAA4753BBFF7EF7F13F58BFABA5E0235 +:10138000C623F498CCC7B7154539EA1D3BAC1DF10F +:10139000EE5DDD1F5A6C6AE0F785041E1FA6C1DAF8 +:1013A000FC10C6F99D51E979718C0AABF3581CD732 +:1013B00040E36F33327E4FEA697E0FE58BB496AF20 +:1013C00071DC5F3C3D08DFEA8279F817EEA77CD03C +:1013D000FF71FFD81A4CF8EECA92424B08E5F3921F +:1013E000679EFC1AE5C1A94745BA73507FFBAE3C26 +:1013F0001ED7C70C860C8C9F7D228FF6B1C40CA81B +:10140000779F32FA29FF9455A673C2A9647E8FEAAA +:10141000D4AB3DA8BF534243268ECBA3C5D3ED7CAE +:101420002813F17A6AE793C5E8577FACC042F7BA50 +:10143000A3F9D7921DFAF8E0B62CFD7B2D2327F3F4 +:101440007D3852C5F3E8C9DCEE55191B78209BE6C0 +:10145000C9F70BAC17BFCFC3FC698F24615C537F06 +:1014600001F9441F71BB09E39B42F9167ABF64C9B5 +:10147000AEFB4D2E3ECF901DF68570C7668A73A8D1 +:101480002F635E9C27EE037C5FEB4280BFDF702101 +:1014900030221EE7B1C4E0BC92E27BDFE84F6F7AF6 +:1014A00000FED5FBE9FE279E87FAA7B6F6E0EF3BE4 +:1014B00004FDB77E807831280AE2B934D17F2BC68B +:1014C0006587EE1EC6B643FEA944158F890AF351FF +:1014D0003C969FF05CD993DB072AD7FEE66BDC577E +:1014E0002C4394FB7781AFEEF0167D1F66F564CE3A +:1014F0008F2A36F377BE2ACD1C4F4B9F10280E65DE +:10150000E91A6E5767CF08F47EE2726B306E2CC01A +:10151000CB778A0EDCCF4B4D8101C9303FAFDA0E5D +:1015200094F720BFD2DA5B6E0D2CC4F696EFB6129C +:101530009FF74E4E52E3DAEE4B413DBB7379474F76 +:10154000D91659EEF1B8C8F837AD5CC7FC02A08FC8 +:101550000CC5B8ED965B3F802A7FDB65A571C1891C +:1015600086EEB346CFFFB411C63312EFFB5B19F220 +:10157000CDCF813FFAF0BD8504D7AF29CEEA4D919A +:10158000EDE4F3F6A09C5AE4D7D7AFECE188C7FDB1 +:101590005BF9A74209EBDF32D948E3AC5C3B96D656 +:1015A0009DFDC948F7D4A3D761965AAE633FEE8E2E +:1015B000253A3C8D97F0713CCF0E2479D396E037D5 +:1015C000215D850EB1D0F6041A6F26EADBA7770FEE +:1015D00074223D2DA901BD3C0EC71BC89423BE77C4 +:1015E000D05910586B1EC6F131B28369FD2FB56C0E +:1015F00068413D08EF1DE40DA73468EEE2DE406966 +:10160000223FEFFF7132D72F30761EE363E8BE0B27 +:10161000F1B58009F9B6B67F2B7645DF3BE0F9CF0F +:1016200068F5411548D2EE3B18709C0113BECB18EB +:101630001298B217E876E9AA9B16E3FDBDA5DE8DE8 +:10164000D7A37EB65462252618579B20D238DAAC31 +:10165000ECC619282F22FBC9E6A99C129E67A3DAC3 +:10166000DFFEC95C6E55A02484762A56091BB05D46 +:101670008D5F90C13EA21EC6DBA31C69CB57F3BB96 +:1016800099AF86DFE8F96AF83D3699EB0F6D59CAD4 +:10169000AFC72585EFB5B67F37223EF107CEE7B855 +:1016A0001F3BE2FF613FBE3799513B5B55FEB514CE +:1016B000C687E31CB0457FEF2367871EBE64971E75 +:1016C000CE6DD4C3439BF4B0E3B01E3EA4F68BF6BC +:1016D000027C1703ED0598A2BD4031737B01C268FF +:1016E0002FC014ED05F81DED0508A3BD0061B4176A +:1016F00020ACE11BED0608A3DD00F313A718F4F7F7 +:10170000ED7EE0FE25FA35C2F72B7DC4FF5E9065C5 +:1017100007F2BFB17DD47DA4BE8BA7DD1F7EA13CA7 +:1017200097DF0B10B91F2C742AA6CBFB97DA7DFA32 +:10173000E8FB979F092D6BD284CEF72F3F1CE6F96B +:101740007E7232A7479CD7657DFD23308EBE6DF536 +:101750002B03F05DBB56C1CEF09CB46798479A024C +:1017600078ACDAFCE51CD49BAA63827370FD5AEB5B +:10177000943F5DA1E93359F80E13B3209D6BF7ED4B +:101780004746DD97611BF4F7637EECBE4C341D6960 +:101790007AE063C6509A4C7ADBB8AD681F5826D8F9 +:1017A000E91DCD1356B612EFFDF85EE5FEB1F6A3C6 +:1017B000461EEFB341D8CE22F449658A41A78FCFA8 +:1017C000BB3882F4F10E78836060C3D09F63D08D04 +:1017D00067903F46475F839F4A8CBAE795AE2B3FA1 +:1017E0006C7FB62EBF9FC7559C8CF215CE9D282FBF +:1017F0009DC14B74E52FAC5847F1C0745F07E86199 +:10180000E68611BAFAF3DD6375E533056E2762AF3C +:101810001B69BEF3516F447973FBBA35249FB60937 +:10182000146FA0D4ACA3FB52672CDC9EA4D109D0CA +:101830009F89E26E93F8F779AA1C3A25B4648AB0BE +:10184000BE8B2F6978609C80F782B665E23DA3FD70 +:10185000459E895328FEBD753AB677F31E6322DD97 +:101860006F9082F7CC86762AF6F460754A78FD335D +:101870008DDC7EB66D342379BFAD81EBFDDB1A7A4A +:10188000C4F48BF0DBF563BE14B47BB733D682EBC4 +:101890005924E6929E7CE1A8886A3E8CBFA400EFA2 +:1018A000BF2C7BD348F794B5F1570C7F656BA20131 +:1018B000DF4562741E386368FE7A2DCA1F67604078 +:1018C00010E5CAC3DB52AE8375FF2ADE73038E7B3D +:1018D000D9EB8571186FFAD52E2345BD7DBAE9F194 +:1018E000AD781F606DC3E326B43B2E91FC268A7F42 +:1018F0007E7A9B09EF034C7C6A1B7D5FF854199D2F +:101900000F17312F9D0F4F6AEFF1A8F32C12370CF0 +:1019100048A2754B4B403A3CA8F283F218EE5F9F09 +:10192000599A6F44FBD8925D09F4EE9A326B5611C6 +:10193000D2417B2081DEDBBA55A5C7F66322EDF7E5 +:10194000F6ABF83B9DDDBD0737F36216D1EB5517BB +:1019500007D3B9E9EAE0207E3ECD0D913E07782419 +:101960003B56FBB10BA699D81EC67562BC9DA985D6 +:10197000BF3B63E0F79995592D446FCBB3801E614F +:101980007D96BFFE3687F35908EF35B9C7893A7A95 +:10199000AB9E10ABA3C7592C5177CFEF1718DC15AE +:1019A000015F55DA5757FE9AAB0647EDEFE1E17C50 +:1019B000DADF97E9F4387A0951074FD695AF6433E7 +:1019C00074F76217EFE076F9CAC604F2A3971BF822 +:1019D000FDF2591EFEBD6A7F82EA5F8FE9783F04FF +:1019E000DF7FC1F3BEEEDD10D58F5E89FFA7A0DDDE +:1019F000BE85EC47A13491F4D8CA9C56F28FA4C29C +:101A000027B47757FA00C67E5D2C847EB24A89E3FC +:101A1000D5E690B357A685E9A0AA511FEF58759453 +:101A2000E35B8B338ECE07BEBE06DF6BAA2A159C06 +:101A3000A8CF2FDDD56642BBD3559E5E5EBC67B294 +:101A400068B3DEDE541168A3715EBD3F85ECA1551D +:101A500068178A588F7F4D91B9FEA2FA6166614678 +:101A60005FD2FB9B51FFBB7094EBFDEDC71E17349B +:101A70003A62CECEF8A85C71D284728CE20A60FE23 +:101A8000E98E77F9BDE9B9DC9E164D37881F29022A +:101A90003FE9484711F90B19C7D74210BB7EE7CF82 +:101AA000C7D322FC1FC85FB45FF063DC69345E16E5 +:101AB0007A5A096F0B3D36AF5FEE3C9FAA15C729D6 +:101AC000CEFC59585F7C5F2E1A6F8B580BCD6F116F +:101AD000F0ED6002D18389DEF57D4E70A09C564604 +:101AE000B79AF03E7578DFBD4DFBACDD01BB18E762 +:101AF000E366749F15FAB3F488784F79C6456EF79C +:101B0000F805BEEF3E02F78B7E7F5D7D3185BEFF1F +:101B10007CBA6925FB6B15DA09E33AE3A30AED8683 +:101B2000719DE7A9F9A73AE483383B9EBF4BBA52AF +:101B3000272FB534DACE682955EF0B8C62A374F7E2 +:101B400005BA797F27FABE4091586A30C1BCCA5E97 +:101B500055E9708585E479BBCF48FCD0B3BA88E4F9 +:101B60009DE7550E2FBB3DA767A47DD0A3DAD534E2 +:101B700038B3AE470AE6975965BAD7525627D23BD3 +:101B8000F765504E8928B76655DF4CE4F31FDF39FF +:101B900070AB0FF0F6F16D4929F87EFA89D5C624AD +:101BA0008B122EF7F1EAA24C8C7B3AB1D13C8B7EA2 +:101BB0002FE00E0BFDCE40E5BE9EFCDD78D19632C7 +:101BC0000BE0B37B7BD0BB67C34AB91CA858FD5C54 +:101BD0001C5EA359BAFAED3C195482EB8A3C434B84 +:101BE00047A1FD6DDB13321694B70D453E3FBE9401 +:101BF00070C7CA56AFCEA4F336B429D2FEF3517CD7 +:101C0000D9CD562EA74F5A5910F5AE937BAC7E7A9C +:101C100063D35247E5CF24F37B8C1EC00DFA5FBF20 +:101C2000DA61A7F3EE19C321552EFA06A05CCF9313 +:101C30003DE34B510F3734FD02C7F585E07F225558 +:101C40000CDB792BD1CE0BA9A7AE3FDDD36A45FBC8 +:101C50006EC4FD7B4F877DBE937D77626917F65D0D +:101C60002DFF23D52FFE842AAF511FC714F5718C89 +:101C700063437D1C61D4C731457D1CBF576FD6EBD4 +:101C80006779E8274B0EDB7BFB885F3A516FF515D0 +:101C9000B01CAF8DD3D14328C75EE5F6BCE582F713 +:101CA00031F413E1BB54780EF51578E9FD75DF4A80 +:101CB000B38CEFB73E187B07BDCF5E235964336901 +:101CC00006DE4B713D2E0F814E1541DF575CB4B0DF +:101CD000C8F701F241498B840B2D69BAF24572961F +:101CE0002E7F62EA205DFE24C5A983A7E48CD195EE +:101CF0009FEAC8D7C1578E9EA42B3FDD355D07CF25 +:101D00002CB95657FE6A77992EFF9A598B75F9D7D9 +:101D10007A6ED2C1D797DFA62B7F83B74E97FF0D80 +:101D20001C5F505E34E179CA8CEF8E5928CD67CAAA +:101D3000B1D911F6817185066F57710EF7AAFBE1D3 +:101D4000F3A9AE0DA5A447B66421DDA2AD16F58FAB +:101D50006DA58A7ABF927FEF25F1EF00A7D1BBA7CF +:101D600051E5BB2B372EB6F98282718353E72F944E +:101D7000808F8DBBB479445F80A7BCFE2487C736B3 +:101D8000FF2E1BE09953CF727858F305CCFF60EA21 +:101D90002E0ECF64A48ADCF0BA7BA10FE86ADC15B2 +:101DA000D91B1CDC0E42EF01D980BFA2BDB6CA62AE +:101DB0000BF68D78D707F182EF54205E300D025D6F +:101DC00063DA0C748DE961A0EBF9C0EF8E005D63FE +:101DD0007A14CE99F8FD8F70CEC4F4189C33317DFF +:101DE00003CE9798B6C0F912D3B76A6751FA4EADD1 +:101DF00087EAFDB9B69CD2E3B55EFAFE7E6D0DA50D +:101E00001FD6FAE8FB0BA57C9FB1FD51EF437B6524 +:101E10003A7FD6AB728A35A9F16CCD2C40F86B9520 +:101E2000123EB384FD94DD9FEF25F659845EF6BC27 +:101E3000E43AC2D7B3974C7E26F57B7DBEE735FCEE +:101E4000FE6ED6CCFE23449473DE97E138CADE558D +:101E5000DF17896E779B4A1F4D535D2DC8472EB7FC +:101E60007C44F7BC9534D05EC722FC22F9CB855F59 +:101E7000C27FB04E974B2DF564BFFC96292B619F16 +:101E80001FB21FA1F2F556269B613EC245EE9F1F71 +:101E9000EFE0F113F5DFB6505CC2781C3BE45F2E37 +:101EA000F3F349FD0290704ECCE7710BE3657EAF12 +:101EB0009FFE22E29B265C6C29A47C9B49417FDE2D +:101EC000F87E6A798C7348A0FE697CF537F1FE775D +:101ED0007CDBC2DF01001A32E2782D3C1E6BBC872E +:101EE000C74F0917BDD43FC0DAF8A8FC78AC93807F +:101EF000E3F390DE5A3F88C76FC1F86EA2FAA97C5F +:101F0000FC3D255EDEE4E0F10330BE32AA8F6CD5E5 +:101F100089BFC7C1DB8F53DF6734B14627DA174C5F +:101F2000153607CA8DF1B92D696A7B144FA2958FBA +:101F300077307AE7B1DFDF79FF8800BCBF912DB839 +:101F4000495FD4F6E996FC962C6C6FCB2D166A2F60 +:101F500043DCE344FE2BB95C0CF5A59953453AAF3D +:101F60005DCCF7D8A7C27A4A49061A6FBDCB4EF6A8 +:101F70008C370F2ABDF1FDEAE9AA9EFE03F49038E2 +:101F8000F53F450FFB3AD6D74CF8E6F169B8BE3AB3 +:101F90007A7074D003E5D717013D74412F9DE92174 +:101FA00078AD8A6F6A6F7CBF307DA0DC3D64FF3303 +:101FB000F921EB87F0FE777CEBA5F1A200457C765A +:101FC000D08397AFAF70314C1F66E7FF1C7A18299A +:101FD000F1F74ACD15167A0FF5C7E8E3C6102B8E38 +:101FE0008722FB0B3CDB709F975D548E203C8FE576 +:101FF00017A37AAEE51FC2FCE4CEF99EBF858C081C +:102000006BDF4FAAED68F952D25BB12807B476B402 +:1020100072A642DE5EB8DC700BEAC9CB8B025B5065 +:102020001F2841FD00E7C7383C59E2BF9382F10405 +:10203000CE94705C3513C71D5E86FA957AFF8DD9F4 +:10204000B87EADC03FC867AFB828E9F4EDC96C03EE +:10205000BD4F4CF72DD330BE59EFAF9F9CFB39E9F4 +:10206000E393A3F4F168FDFAE6A9AA7E9DC5B2FE4A +:1020700093EF51FF6A6A72E47BD43CFEE88932D95F +:10208000C0E35E1C86E149F80EB342EF9169EF515F +:102090006BEF9F4F48D3DE3F77BD5395C4DFFD46BE +:1020A000FC94B006D20B26B300A5A5AC85D2692C52 +:1020B00044A99B399AF09DD6C35FE58D1C81FBC670 +:1020C000C0DF378F7867BE01C7F5B55D7DE73CE4BB +:1020D000A177CE9B27F0F12DBB9ADB8F9A2D5DBFA8 +:1020E0001BF02AC8D77EFD111F8CD29741FEF683C4 +:1020F000F9BE02F217E1C939750CEB152BFAF82776 +:10210000ADFE14B990493DBA97775386FEBE17E2EB +:10211000F7B5848113709D5E4BB87402DADF5F4BB4 +:10212000E869E0A9D9846977F5B5FD3025772DF9FF +:102130002BA6C8C5D45F075E93F5782D66FC5DF9C4 +:1021400089CC27A1309EC4FC944E6141C2E7541053 +:10215000D4085F8921B500BF143B6D7635745138C2 +:10216000A2B01FBDB3147EEFF600E2B54AF4FC55F1 +:102170008E78EF769B7ACE68B6BCBD8FDF0B95C8A4 +:10218000CEDB6F550BC1371B39DD573E3F95E2B3B0 +:1021900097BD2BD2EFAF9DC22102FD8EAF194BE34D +:1021A000BFA2660CA59FD7321FE2BBC2C2F178D690 +:1021B0007768A808FDDC1FEF790DFBAF3034C55DF3 +:1021C00006E3FB7CCBDBCFE2F94AA3DB0A51D9E083 +:1021D000C0FDF61A8FAF65DFBD948976E9EEE81889 +:1021E000E8F7EDA911E70B66F3A4A3DD9BED984991 +:1021F000E3D2E8B5C252AC5B4FED7CF966818BF659 +:10220000BFCC82F4FB01558CC72356598EF1F78D54 +:1022100001C67BE5D17A535E4C90F8AC09E3FEC66B +:1022200084D733C3CCDF3FCE88E5F1D1CC33E21283 +:10223000E42779235C27A7D279367797865FB40B9A +:102240008E0F0E26BF71C95191EE35BC1233741733 +:10225000F29956C0B700FAE6C4C15E5B36BE3737A6 +:10226000D17301EB33F13B11FB3DD65F603DC89E5E +:102270003DC246E7E91F89DF89E61BFF98AAC6FF32 +:102280000C6543D57BB214BFD4FE8E4871840FC653 +:10229000C651FC43BD7A5E1ACF063C380EF20B8F56 +:1022A0001A31E29CE2FBC89E91CAFDA71A3FB9828F +:1022B000B957A15F6882CB120AA28E956A604A0460 +:1022C000DFB32A314C8918476C4EA20EB63BD2754B +:1022D000E5E34767EBF2135C97E8F27B940CD7C118 +:1022E000C9EECB74E57BCE2AD0C1699EC9BAF2197A +:1022F000E53374706FEF75BAF27D6AE6EAF2B37C8B +:102300004B74F92FABF79A99CFF5564E1EF23DFE5E +:10231000D777DD325D39287018FDD819C0F0711FEC +:10232000F56FF8A5AE5DA6707B8D0FFE41FA2A4AC7 +:10233000D5DB6FC49817055C9FD6329B17E9A25076 +:10234000CE3F8C62A850D6DB71326C273F447E941E +:10235000F123F15F63A7FDCCF5F75CD2F5FA5730B6 +:10236000F2E786ED367CFD8B61FD915FA1BF2472A3 +:102370009EE82F89C40BFA4B2261F4974496477F5D +:1023800049643EFA4722F3471CD5AFFFA816FDFA71 +:102390005F7ABC206A1D42B47F5E9605F67017EB2B +:1023A00036A6554F1F4CDC40EBA6C9F5B127677424 +:1023B000B96EB3E09FFF8A755B364D95F7EABA7D3B +:1023C000C5368C7266A3DCE47CBC3B7BDACC04575C +:1023D000CD34E01F1B543EFF8DF55F1427ABE0EFBB +:1023E000166432F67F62FE45F1B51ADFE9F87D3AF0 +:1023F000FC1D0307D103AD77CD87768A5BFCC6D081 +:102400006A47B9F291A1817E0770BBD3B306DBBFE7 +:1024100031D72BA0FF3B95B9F72C4479DE3BF41163 +:10242000BE73E4BBCDCEF9391C81D1AEDC7A9B9D65 +:10243000DED1D7C6392783C74BFD7A9AEA4F77F0AA +:10244000B8A97BA7713F88DD21D37B0D65B94C8D81 +:102450007F65997386D0EFC53D386D14F9FD36DF81 +:102460008D76414022BE07CFD4778DFBBC2AD27B2C +:10247000805DFC7E9C07E373B5DF8F13D538337620 +:10248000AF95FC66DAEFC78971DC4EFF5FF8FB7130 +:10249000BBA745FA8DCBBB7B07F92D3A9784B210C9 +:1024A000F7D80F3F973CDC4F66DC6F1CB40EC4FCC2 +:1024B000FB0DBA77A71FAE5034BF317FD7F7F6A810 +:1024C000DF5BBB6580F6AE34F5FF30FE7E9B80FBA4 +:1024D00098E9F4A487D5F7BB1F56DF411EE4B7E89F +:1024E000E2C41FEE780FD94FEF210F7E4AD6E50FD9 +:1024F00009A4EADA1BB65FD1E53B8339BAFC114780 +:102500001D3AB8D518DA3320097F674264182F3E88 +:10251000AA65B4AEFEA5C75D3A784C6B89AEFEB92C +:1025200069D99CCE94D097F83B6073EAFB507CD27B +:10253000D8936E5DB90C89DFAFC8547FE7E0E7DE62 +:10254000AF807C3A2F1972F4F90939BC3D382FB9A4 +:1025500070FF6871FEFD582BFF3D5A35BE7F8EFA25 +:102560008EB6F62EF3D6DBD275FBE66FEAFE684731 +:102570000686F1D7161ED7C224C7F157B0BCA06497 +:10258000635C9E56FEBB695C1FDA3DC1F5F769547A +:102590008FFB7F1EB39F5C8CFB76CE30DEDF6C83BF +:1025A000E1C6E9B93C4E6F6F04DD9BAFE4F53F71C6 +:1025B000F3541BF79C783E3EF62BED7D5B1F9D335D +:1025C000B7C6B004A4C71B3604EE1E0845679B1AA5 +:1025D0008CFC9E8FDF88FA7C6901E8AD4EB4DF9AEF +:1025E0009FB0E1BD9D1A89EC6C7157AE5F042A1251 +:1025F000E8B5217E3EF6C2DC9C788E803D19E12F45 +:10260000A9718BD4FFA02B395FEB7C3F2658477212 +:102610000ACED3688FE9ADDEDF8881F5F3D13B1FA9 +:102620008CFC07C6064674AEDD3BF977DD27D1D6B4 +:1026300049BB6FA4DC64746F077C971A588910310A +:10264000AFBBDCDCCE71953A2F2C87FCA4483C460E +:10265000F79CDA9364039F9F128F7C4A2B1FCD4F08 +:10266000FE5DF3C890F8BDBF4C0BB71B44DF23D40D +:10267000F2D3BC9CCEB57B803659B3331CE6F768E9 +:102680003CFC3D4DFA8BB0A364A8F7681272BABE49 +:1026900037D8715F286ABFF8FB19289E60AD5D7F4F +:1026A0007F70D5957C9F0C53E917E47E9C338FDFB8 +:1026B00073C3BF22F13BFA1D9405766EC75B709B16 +:1026C000E508CAFD056922FD7ECB78974CEF54CD15 +:1026D0000596B90DED40D64C825BF35948C800B958 +:1026E000E4D3CBF345A8170AA40F93FF7D1E86BA47 +:1026F000E1EFE5AC8B2A67FB8CE4FE82E877A2343D +:102700003FDD8F9DFFAF54F5B8616C18F7AFD95618 +:10271000A2DFF22B3F9CCFB222F6836AEF6CF7FF69 +:102720008EC32B18D98FA2F5040D56D06F16E1A7D2 +:1027300001BCC6E4A07C5825D13B7AD174A6E11532 +:10274000D66FE56A3ADF703B9F16B77106E336A095 +:10275000DE19DF8536821BADF4CECD5967CB50D460 +:102760009FB57812CD5FD7CFC37CF8FB63ED4F598F +:10277000A99DF615406838EEA762E9DD8356DFEFC4 +:10278000BABC27E169D5FBFBA2D3EB8A3C5BAE0464 +:102790003AF01819F9E5EA77898E3A18C79DB666B6 +:1027A0007AF7EE67F8B5B65F1961372905792826FB +:1027B00086F335BF16E8D5AABF527D7FC87781E37F +:1027C000FF6646F6B92B4181447EF32E036E887670 +:1027D0004F065A49DF9FEF0F9B79D1C9FDC517C737 +:1027E000D2FC3DEBC6103CA08FCF80F1DFEC7A81AC +:1027F000FC14D7EC60AB63148CD3BA6614E22F7868 +:1028000025D7B706A872261A5F4E37DF37D3DC1AF2 +:102810007FB5D13E5F5627D0B96019EA0A08DFCDEF +:10282000DF11D6E00B0D2A5CC4E1E5AB05ED1E1807 +:10283000DDAB9FCBF8BDFA2754FB0CCE13539C277E +:10284000DA0D76A9F61B9C27A6384FFC8EFC096191 +:10285000E44F08237F4218F913A6C89FF0FBA7098D +:1028600085F44E33FAEB2644EC37F4D74D88D83F45 +:10287000E8AF8B84D15F17591EFD7591F9E8AF8BD6 +:10288000CC477F5D248CFEBAC8F2E8AF8B84D9E8D0 +:10289000496118FD2FAEE93A78269C232644EC774F +:1028A000F4D745B68FFE3A5D7B9E9B74F5AF07CD9E +:1028B00031B27E5F6F9DAEFC8D3582CE9F076C89F5 +:1028C000E4F0BCCD3D885EDAF2DDFFC2FDF1D7D881 +:1028D0007FDD62CC26FE4176906595310E5CEFFF80 +:1028E0000B9A32AD98008000000000001F8B08009A +:1028F00000000000000BDD7D0B7C14D5BDFF99D9D5 +:10290000DDD9DD64934C42123610E2E48541376133 +:10291000C34B50AA43021834DA4D782590C70602FB +:1029200004446FC456838D6643421209B41183A2D6 +:10293000A5B020A2554A576A2BB5D66E0029166C51 +:10294000A97D81525840B95AAF3542A9F4FE6DBDF8 +:10295000BFDFEFCC243B9BF0D0DB7BEFFFDEF8C189 +:10296000C99939731EBFF37B7C7FBFF39B931542DC +:1029700057111BC7D88A6691F9D2E12AF49663F9F8 +:102980007CA3C4CBD3DC436507639FE3CF2DFDD786 +:10299000579B189B6A61ECB5261B5D834D325DF732 +:1029A0003639E9BABF496153B3193BD09443D78351 +:1029B0004D6EBAFF8BA689743DDCA4D2F5974D45C8 +:1029C000743DD2E4A1EB5B4D6574FD6D9397DEFB26 +:1029D0007D531D5D8F36D5D3FDB79B1AE87ABCC9F0 +:1029E00047F74FC0386A2DFDE3BA76236359364660 +:1029F0003F9FC3BF517E1BCBCAE92F5FFF9C6C2852 +:102A0000E7069C86FAA3F72886E7F9C11CC3F3B151 +:102A100007DD86F2F823130DF56F38AA1ACA53BEE4 +:102A2000AA4025C626858A0CEFDDF4BEC750CEED40 +:102A3000F2BDFE015CEFD8F4E7FD781D1957B35BDA +:102A40009019BBE5C8F03A730A94A36BC6C4BB19CE +:102A5000B308E975532731E6BD3896B1218CE5B14D +:102A60005E91654219EAE2BA7983CCBF4D80F6FEE9 +:102A70009642CF2714C18324DE0F4B84F9BCC4B621 +:102A8000AE11F0BE42F7F5F7DD4C36E155AFDF5F32 +:102A90001EBC5E64FF7A3DAFCD380EC67AF365EC9E +:102AA000B7D131660DF0D30E51A8F6003FED58C5F1 +:102AB000AA4B5DB01E3B55D10ECFCB5E92F34D0AB3 +:102AC000D6AF1F5312C3D87D1E91E8A6D787160B29 +:102AD00070FCCF562BE29AF8FEF9DC31317D1BCE2B +:102AE00067BE47A0FA138A185DBFD2CB543FBC37EC +:102AF000B9F748611CD4F3FAA68CC7F68B2556EDBE +:102B000071513F3796E442FF3E41DD16C6DF8BB080 +:102B10001D9C87EFC5BD51D8DF963BF97B51FCBDAD +:102B200067B7C452BF77B60ADB4C309FC93B99BA2E +:102B300015DEBF471BEFF53B8326ECAFA695F7A745 +:102B4000B75BB3294D521CFD74AA61F50F3AC7213A +:102B5000AD04F60CAEB7D92B22DD8656C8A20F966F +:102B6000EE1E1C225CDB73EA3D48DFB72D9C8F24F0 +:102B70009BCA58063CDF53C2BCD0DE57C6C54F4B7C +:102B8000C4765E65EE6CE49F71BF36CC97C83401A5 +:102B9000DAC75F14BC7FAFE8C4F1030186003FDDF4 +:102BA00001659C8FD7CBEAD3F3199B53564374CE60 +:102BB000A9608209CAA32AB68A89F0DEF5DE1E1151 +:102BC000FBCDED0AD1559F877B72BC09CBC5167929 +:102BD0001A8EBF789A407A23CBCB56B5433BE75A3F +:102BE0002D7E5CF76926D7AFB07CFEA0895961289D +:102BF00059CCFDD53228AF586D616BA0BCE2A18BDA +:102C0000A7DA510FFDD0EEC6717E947F242F08EF16 +:102C10007937C27A00AB2DBFF7771344E8A766A3D4 +:102C20008929C0777F4AF7EF8807BAFC29E3C5D81E +:102C3000895065DE34EF260F8CE754EB0F92912E0E +:102C400035AB5F8FF5C27A9D6FFDA1C4449CBC1A61 +:102C50009B9F0CBA42A30373A907703C352926B683 +:102C60000665C7F4AA1484FE2F781DF526289F0652 +:102C7000BDA25E8BE37E95EA9DDF23C956A017EBCC +:102C8000B29C0E018F97C17F9FE378DE1C92CCA08F +:102C9000BF851DFCBE2ECF4B5B2D35D268B832F3FD +:102CA000E990AE0F603E7761D9D65F6E386E7F7D5A +:102CB0007F98BE78C9139378F67A8682E6FEDC8424 +:102CC000E3D8C3CE58707C157138AF0530AC00F135 +:102CD000AF5F4239D1F9EBD326DBEBFBA1DECD525E +:102CE000C14F900ECBCCBC9EC282B3499FD7678B9D +:102CF000B80E356F9A887FCF05946D0CCA278A3835 +:102D0000BF573417921CB21F723EAA68E6F52A7E9E +:102D1000ACFA05A8F22BA0072E5CE9C5E1B41EBFF2 +:102D200001FD8EE5D917AF273D501CB2D3FD3917F1 +:102D300053E83AF7E228BA5FEAE0FA20F453E65F94 +:102D400005ED9CF359A97C6E3FF363FF91FC59623A +:102D5000F68B8902F255F3AA2428DF71F1266AAFB7 +:102D6000EC623EB5F79571F7BE9E84FCBE7D707E29 +:102D70002F35076761FBA56E0BF1E1E5F85D880F64 +:102D8000D35BCC6749C6F9EF646E2E8F6CBF650CC0 +:102D90006355D1AC3E80737084C6A3BED0E95D0597 +:102DA000636137E2A09BEA54A073551CFC3A8CA6E1 +:102DB000A33258DF1897F6BCA4A9AED58CFC1E9898 +:102DC00082E34A6B60AC79527F5902866C4EC172C5 +:102DD000B019C7956C63329633D81101CB32F046E7 +:102DE0003B94879B55D20F662F53F07D8979687D80 +:102DF000A240C13E0ACF536D0ACD2B15E685CF47C1 +:102E000098A17D284B53F5FE583019E6730EF53B1B +:102E1000E891CD96D052064B5C218AA45F2BBF2649 +:102E200050FB0B3BB2B79AB8BC0E3D05F75F282D9F +:102E300060A5409F158F640F6583E000FDBA10D632 +:102E400009E5B22A2EF47501E89C5AC2D4A91319D7 +:102E50002B673A9D5890C15CE669E5E9255BDEEF9A +:102E600070107DA9EC2C79A4CE07E576F70A0F8EB9 +:102E7000AB5FDF795428B26897CA509E23C75FB909 +:102E800036B0EE5A05DBE3EB58217559F03EC887A2 +:102E9000C503EBB5D0C5ED0033733E3CFDC8CBBBDD +:102EA000D05EE8E33E6D6165B4BEACF714CAF9E3E9 +:102EB000A5CEFC354ABF7D796A592AD9CB49259AD6 +:102EC0003D023950402F3C07B807AFCF03EE518089 +:102ED000A57702EEC1F22E900BBC0600F7E0FDDDF7 +:102EE000807BB0FC12E01E2CFF08700F96F700EEFE +:102EF000C1EB2B807BF0FEE45B3C634BC84E77D983 +:102F00003C20D72CA7F7C967A0FFAA2689E178CE75 +:102F100015717A6C5916A5E23CB63C28F919DA57B6 +:102F2000736814D6AF908EBC6E4BEFA7C33B0DEB0E +:102F30002D5CEF05B31568675EBDDD8DF2FF42A91C +:102F4000472D198FF4744BA84FBC2EBFA0005D878E +:102F5000C9A02FA07C4D666FFED7911EA5BCBFE215 +:102F60000C6EF7AE31B1FD2C015ACB576FC571BE57 +:102F700050EABD0DDB59F06AFE81E10ADAA3780957 +:102F8000D7A76A28C80BE9A7DEB4D230FD5451C2D6 +:102F9000EDB33493DBE78F91EE548FCB4179832CE3 +:102FA000AC01111FCE8E50392547167C93F03D4E53 +:102FB0007789FD96F3B393C92D20B7234062B1EC16 +:102FC00000C6467BA9D3C79273BA1CED513F5DE49E +:102FD00003D85E6F8CA4201EA9718C9C3E14CA3548 +:102FE0005D428200AFD43AD8AAD5D04E6D77E6B60E +:102FF00055409F75DA3881FFA514B4478F0832DA3F +:10300000ABE20465EE246CE70D0BDB06EF2DF85AFE +:103010004F36C90B3C13F207CA43EDC649240FB51E +:103020007EB88EBDB4DCCC7F74DF881F23BF05550E +:1030300009C75B2BAB52822B4CAEBA04E2DFC8F25D +:10304000432526CEEFECA005C75191A5082DF938F0 +:103050007E4E87CAAFA54B0B1CF89C05C531B48EBC +:103060009C0E8F0AF2B674DECF98B0761760BB6103 +:10307000FDEAEBDE8E4606DAAB91152905ED872CCD +:10308000D3F860FE16A4FFC22C3EFFE204B7E4C0F2 +:10309000F69742FB688FE5E0347C3ECFA5B06658DA +:1030A000AF05ADF912EA0FEF5ADE8FB7235ECA45BE +:1030B0003B6D96A51150AE88E2F206E323DC580B77 +:1030C000F4487060BB80131D03E952A38DB7B62B83 +:1030D0005E5A64B8FFA805F9B99C717E5ED05A9219 +:1030E000F6048CABD6979B80EDD79AF9BC5FD6D609 +:1030F000D9ABD1B3BCFBE7D9023C2FAF4FC917D234 +:10310000FBDB7B0EF92F09EB1BE5A15CEEB2603B0C +:103110007D74DDC0E7BD480E66633F8B6C7CDE7D51 +:10312000FCD0CDFBA9EDAE915C705D6CF6A43D01C9 +:10313000F516FBDE4CF52562FB9CCEE51B7BB471DE +:10314000D8DD380E267BD3902FCE6E989B46F3EABF +:103150007EC282748C712BD3113F023F90DDD4F973 +:10316000A26A2C973FBDDF374ACCD4EE1B9A1CE9EC +:103170007621AA81CB4DEDDA5F537921C815DA4368 +:1031800089BD24E876E9727256CE42E5884B374B0A +:103190009EA053E8977BB083F5BB07B113AC94F7BF +:1031A0003F4F5B970A91EB13FD79AFB61E1548DFD1 +:1031B000B0F7B13D6CF784FEBC20987DAFABBFBECD +:1031C000DE6F45027F0FD707F9E584365FACBF821B +:1031D000EA8B9A5C3B48DE57AC33F9AD025E9F5EEA +:1031E0008D767FC58B02E1CE0F57BCFCCB3970FDCD +:1031F000D3E35BAB707E7D7E01E00F94E7C59A9DC3 +:10320000AB0D0E2ED75F9DE1FD08F563DFBA3FF6EB +:10321000BD91A8173FDC7588F4C571584B13D07564 +:10322000FEF79EB6A09ED2C7BFA0636B474622DAC8 +:10323000B3F8318863869B8FD0BAA4E528E40FB039 +:10324000523EDF85AD7CBD18AC57763CFA19354C43 +:10325000453E70BADD68B7876BB821056C30EA4F20 +:103260007DBD103860FF9B0134A19ED5D7AD22A350 +:10327000CB207791F3B16BFD3A347B304FE3B379D8 +:10328000758FD27B0B3A6A9EC67ECB7539AA35DE26 +:10329000D7E97D6EAD85E87D6E6D769B93F027A7AF +:1032A000F75DA640DE0350EFC3E5CFDC9392417695 +:1032B0003B0DED36D21B71DF620DFF2D017A23FE2F +:1032C0001B84DEC34BC3E8BD640BA7774546E0CF44 +:1032D000AFE0BCEEB5BAB741AB1FEE1C2BE1B8E6D0 +:1032E0000BAC1EFD9AF2C056CB7094B3BAF80434FE +:1032F000A3AED2749A5F9F9EADCF97592CDEE7F6AE +:1033000034926FFBE9CAE57D33606FF24BF57202D0 +:103310002FEBEF95337528CA3BF3A532B4EBFDFDD7 +:10332000C427C879806F4BB99ED1F58BFEFCCCBD0C +:1033300035DF04279B9DB173BE5E0EEDED86E7671A +:10334000A6B8D390AF75FCC61283C45F55D7807FF3 +:103350008C7634DAABE03886472B096817BE5ACA38 +:10336000717E5696721DDE8F1501FF024933C08CA7 +:103370004C1C83FC066B3DE6D276EADB518151F5AD +:1033800097C17F59CB439FE038514D603B788D0109 +:103390001A7C5DA31F9459F2987E1C1AA98722ED0E +:1033A000BBFE5E243FAFC95940FC65C9E272A4CFA1 +:1033B0001FE6EBC7F9EBF385F19663BD6F27F0F2DB +:1033C0005DDAFCCFA4AB0522EAEB4936791B40C994 +:1033D0006DA2B202DF839F7AC4D92C47DD2B21EE88 +:1033E000FA864B5E83FE5E964AB8BA6AB82CE37AD8 +:1033F0009E69E638FC4C398C33FFEAE777269DCB93 +:10340000736F0A93B7E55F59CF96D70A3E11E7D994 +:1034100010B3CD20475DA0B7D2F13A368DFC28F429 +:1034200025715CF7DA45E293743DBEA1C6A2DD3B8F +:10343000E1CB8D5F93C8712BFA6B885BF18AB895ED +:103440005DCB712B967769FE1CE256BCDFA5E9EBDC +:103450008A28AE5701BDD3F84E3464121ED6EFEB66 +:10346000F6F9841C8A4908D3C3601F6250BE5843D2 +:10347000267B069A3ED175264624BEE5E3D3EB7F34 +:10348000CDC2DB653192FF1901714B895403F72BD3 +:103490001B7E6311E0FA6D6DDDAEC90CA843130904 +:1034A000C7C988BF5A62DC4EECA725DEED0CC70504 +:1034B000D18E39146739931ECCC2B8536FBEDD8DDF +:1034C00078E78463CEF4141CFFC67837CAFBD704B0 +:1034D000F789065CF7D556F2F796077AB2C82F74CB +:1034E0003211F5C399F4C05FDF463E591DEDC6FEAB +:1034F0008A45D621C0BAFE7186F7F9D2F18887B520 +:10350000B8D467D02FF8AFD761A3204BD796323EFF +:103510005E491525C28B26D2ABB0ACAB56239EDCE0 +:103520006A32C44316BD61625605E31F65C937A2FE +:103530001DDA6021666CC1FFA584E34913E9C1452A +:1035400018FF08B33B6DDD85C921C4418F4E7BDC7C +:10355000077A334D601ED437EF9A4325C81FEF6FAB +:103560001D9AD08C78EAEE96910C9ED76E6D4FC363 +:10357000EBFB5BED65A8AFA7CA2553E311876C8A07 +:10358000A7F8DB3BCBB9DFBFECD7D9C477BFD6F404 +:10359000FFF27FECDB2C833D5C04F7648C9304A288 +:1035A000FD3E78B4BC694F9A0958E5429CF730EA71 +:1035B000E1BBC457E74C42FB29F877A4507D65D0A6 +:1035C000F8B17E3D8BFE14F0DDDD0F1FA5763E12B7 +:1035D0000FDF590EEF2FBFFB07B1D8CE5D1B7E3337 +:1035E000411629BE7314E9FE2761EB0E19FDBB8D50 +:1035F0005BF3D04EFC09E323D9FDED2DD3F46D64CC +:103600007CE466A9E004BEAFC74522C7F19116F776 +:103610003B53CAFD93E204CF9C72BE7EB4FE971A60 +:103620007FDD1E1E9FD2CB95FE3889B928FE29C9A1 +:103630002E8ACB126E7DDFC41AB05F1D9FE8F7FFA4 +:10364000AAD1F7FDB8AE34E4A7A53B9E4843FEFDE2 +:10365000208697BDDB7FBEE8411887B75B94198849 +:10366000ACD7CC2437BCB7D0C7F12F7380929D1450 +:1036700086B36646D33C966E1C6BB097400FEAE764 +:1036800003332B0A903FF7493EE2A877CCC145C8E7 +:1036900027EF00DEF4D17A73BBF64E97693ADEF776 +:1036A0007D4D60D902967F1093E5203C46FA90FD4F +:1036B000C4E27F06EAC78C0B04514FDDFD12E01611 +:1036C000C6E306C88F2B7E6C993E9CE32A8CAEB174 +:1036D000E5E6A034181F2CD3F0545FF9A51725C4D4 +:1036E000B9CB773E4A7805D4A43F3B1DE5F3C5032B +:1036F000C312D1CFAC198BFDE8F5EF7989D3C1CED8 +:1037000042D2CCB0F5AEC949681B0EFA3BFD37CFAB +:10371000D66D8029D5E03ADD0876F0D7DF5ADA0C8D +:10372000C2F8D5122D2E6EEE257CBD26E72DF25F58 +:10373000EF6EE5EDDD9DF3565B06CDAB64080B5BEC +:10374000FF8C9916A28FFE3ECC9BDEF315D46F0939 +:1037500021BD5699590B5C9F887EF8D910BCDFE0DB +:10376000B3CA568C232CBD7F0B9693AC36D904E399 +:103770003A14EF1D33733C999D1B908FE13A1AAFB9 +:103780000D66553C85F33ECCE97B5FB6BB0CE392FE +:10379000F709696E1F5C5B503D603F8FDAF973C1BA +:1037A0003D341EF5600C8F63DC6787F220FCAD5F53 +:1037B00017749898378CDE37755AEB898FCCCA66A8 +:1037C000D487B57F768D591346DF5A89790383AC48 +:1037D000DB4FE3A714E1F88377FFE27A1A8F09F051 +:1037E000044035F59EC9470FC03C832DF0D2CD8CE7 +:1037F0006DAADFFBE12E78AE36C72938EFEF3070C7 +:103800005860016F71D50B189FD896EF9D89ED38E0 +:103810005940E0719BA080EBF1F14FFF752CD2F580 +:10382000E311BD2790EF2DC20B4B71DF63FE4C1EE1 +:10383000FF61AED058A457D25ECD3E998F90BDB7F0 +:10384000389504B4D34141A3D3DF44A2D3AB42F0B3 +:10385000696A5F367D3D08F58E887963D02EAE9F0C +:10386000C9E5EFE014CFC299C80F8A291BDBFDD848 +:10387000723C1DDBF381389986839D1E367123AE21 +:10388000DF9416004A931913852466867227137BEA +:10389000AD68BFB5E7EFC2FAB2895045925901F45D +:1038A0003F792F0BF8C09EEC752D50BAA83E985961 +:1038B00094880639F80D5CE715B16EC419C34D9FA5 +:1038C000EC8B43FCF280E046DD5F75EEEC52A4CF5A +:1038D00089BFEDB4A39F702ADFBB12E934CCA49E4C +:1038E000F2E2BEC3B93D3601ED7B9E289BB438AAF7 +:1038F0002D99B102FE2B7B75E5DF6293E0BD8F7BD6 +:10390000479ABF0FF53E566D6E8CCB9D78F0FAFD51 +:1039100037E1B844D68B716E669BA6F6C5A7097FC2 +:1039200033D536A1BF1D7BD7B57DEF131E7229FBA2 +:103930006F4A24FBD44BE588F73F762B66F49B3E19 +:10394000EEBD188B7AACE0D57D4705C0250536471E +:10395000D0148BF52DFFD617FFC6FE8E8C88C77846 +:1039600037C934D039B985AFE7CD71463FF6E9990B +:103970001C1F3F3D93EB69B3E2267A9FF39919AE82 +:10398000A3C2A08CE334DB648CE79F73483CCE5C1D +:1039900067A538D9B95733E3D865E4E237888F0093 +:1039A000F7A415AA4FCFA4F8D4646ACF07EB6D0231 +:1039B0003E6EB1A7D17A0BA2D88BB819D68FD69705 +:1039C000C1FA22DEBEE533BE9E95F5B16EA42BACE6 +:1039D0005FEEB718FA59A1EFFC4AA0F50B60BB4F98 +:1039E0005D04F427A2BC4E4FF7BAFEEFACDBA7F69E +:1039F000D81D482FA519E4238DB107A2A00CFD8581 +:103A00002C3659B8314C3F4A36B9C58DFA3196D665 +:103A1000A7E1780CF9859F8A9EA86BD3492FFE0EEB +:103A2000E994C27A5F17A13C94F9482FFC2FD28BFE +:103A30001FE2F81B905068271D22E1DA0F6CFB365D +:103A4000BE0BED2FB51FDAF82E98E69B4C6F915FF9 +:103A5000D39B8E3A90F417F9032D5932F9E7375D6D +:103A6000C308FFF7AE8CE1FBA866A02C3E6F54DCC8 +:103A7000388E9B4C02F7DB5746D3F30FF4F9AFCCEB +:103A8000A4FEE0C747EDF986FA11AF8744AE5F5157 +:103A90007D915EAB674427C6DCB6EBA0FC1D81EDD3 +:103AA0005E33AE7F1EC0274584A3CC6E1BC67175E6 +:103AB000B96466F6578C27576DC9A47D337B97F59B +:103AC000AFBB90AF7CA3152C0F99C5E5B373550C14 +:103AD00013E2FAF992B646C08E0E73459D1260E964 +:103AE0008739C4A015F9AA6EAA1ACE5777CE62F408 +:103AF000FE4F04E6B3E17C4A241A6777899A82FB79 +:103B0000B1DD25C922E2CE1FFDE3BE930FE1FCDF4C +:103B1000B4907FDF9DCFE7D5FDD34CC2A52744FFEE +:103B2000938BF1FD390E37FA1F8F0BDEEF227F9B4F +:103B30009CBFD9580BEBF094D865437A74C788239F +:103B4000378EC3766D148FE84EE774EC5EEAA2768A +:103B5000FAD6716D0C8D63E03A8A7C1D968A7EF4EC +:103B600033004FC422EE84F5D3E8D51B8BF4BB4958 +:103B7000F317609DCA76133E857A61FB491F6BB8C7 +:103B8000EC63BFE8CB8E0BBBDFB70EBC9D2BDDFF1C +:103B9000D4EDFDCAACA4FEE7DDF16A0AE24C7BD7A6 +:103BA000CB3947B9FC2BB8CE1B9AF33B46221FC436 +:103BB00088F2336CE03A6D98BDA3671B3C8F2EB43E +:103BC000913E63BEAD3DB8EED12637E90FA4E73391 +:103BD00048DF66EE3F45AE63480CC59072480D8DD8 +:103BE0000F1F9F1E37B9C677EA498AD3B3D028B4CE +:103BF000B7BE029683F1851396E32417BE4C6E7709 +:103C00003FD5F4AE22B05E361CFD64AE77ED41B018 +:103C1000AB9350CFA4F91E8072E8DE58B730EC6A3F +:103C2000F40C97835478253A93F4CDC259301E93FF +:103C3000E8765A097F1C49191C8729E5E1FA66FDD7 +:103C400025F4CDFAFF7E7DB312C7BF618CF7E15931 +:103C50008427D5AD38FF612DDC2EEAE5A7246E1749 +:103C6000F5F74E0A7C9C39ACD782FC5A0D7A7E0857 +:103C7000E8FB2766713BCB1A23F4BDC61F551A7F9C +:103C8000D8BB3EFD23CA7D35E03AECA7AAD17A0A1B +:103C9000ED4555A385CB75C33435E27DB273FAFB90 +:103CA000CC73EAF507F0FD29DC3E552FFDF724B46F +:103CB0003B977C3F941A7F365AB33730FEA438CFF7 +:103CC0009338DF936C481ADE3CFC7713ED27659937 +:103CD0001336E37C5734678938AEC3F943A95C25B2 +:103CE000E524201F6FD5F453A3ACFA895E9FED4BFA +:103CF00045BC797DBEE7692C3F92758EF6C54EE4D2 +:103D0000F75A505F9C28FFD3081C5775C3CFC91EB4 +:103D100056EBF6F0CAF449423EAA5E7AAE8F4EC226 +:103D2000FF009D6E1B091C4D7CA5DA10FF6497DD1A +:103D30006CC371B53A4A2F8B874E36B95910F0D003 +:103D4000AAE858A247B5B9D72273BF9AE4B7FAE2F6 +:103D500004161C827940E35870EC97EFE754D34483 +:103D6000AD9F3CF2A3703F28BC9F9A8B37533F0B0B +:103D70002E4EA67E0AAF9BB1F7A5446C57A438D847 +:103D800095DA6F6BCAA1F6F5F6F4FB525F9CC0475B +:103D9000FC50D8377EAF0DF757B2CBEE6488AF57E3 +:103DA0005730B2B743556F513AEA83DF9A285FE73D +:103DB00052FDAD6F9259D00AE6A249A1EB394D9E52 +:103DC00012CCCA1EE4C38462E6F6B1FEF1245C4C58 +:103DD000A6790DB99848D7A153F9B856456F166A18 +:103DE000C2E4DD3E5B934B008F417DBD495F45B131 +:103DF000604E7839C1504E018D8E6584049F132E1C +:103E0000C888A87F5D447B6322CA7C9CE83C1BDF9A +:103E10002B30948716F1713BB4793AC6C9F9BE309C +:103E20003AC18CB476787B8E8B2369BE3117B3E8A8 +:103E3000AAAF03FEAC05FEBF9D0F95ED8BB9D587EC +:103E4000F6E090C0EA87C0355ECB7333BB05D2E79E +:103E5000F8D30572771BFE02F26A76F85BF1792BD4 +:103E6000D45F2FF7C7D1180B986BE0FE1D45768AFB +:103E7000EBDEC97A09EF7A984C725ECADC749DC594 +:103E80003C749DC3EAE9FA717368020A53A7ECCD4A +:103E9000990DE35B6EF36E49C038D508EFB3148714 +:103EA0008A88BF445EF57945DE47F8C6C705359276 +:103EB000FBC78F3F8E09DAFC19F57F3FDE87FE27AF +:103EC000CE1E1FD6BF45EB1F0C8626FFBECF330D7F +:103ED00065BE4E8E441ADF80FB03CA9F5D6B2CF3D8 +:103EE000716737DC12447AB62B5C0E4CA96382B83A +:103EF0001E17B24477785C24F2DA02FE14CA5DDF42 +:103F00007CFBE54DC5F75BD21332300E9A5D5C4504 +:103F1000F892B1668D3F8CFCDD917879F91ED08FD7 +:103F2000D9CD303E667688FDFC09FFB26755C5796C +:103F300062BE783BFAB807B4B7BF220EEDE6BF68A1 +:103F4000723970DD2F2FA73D59A522EEFBB6295CF3 +:103F50008FB5652DA0727BA248FE6ABBB282F45079 +:103F60007B6A29E57D5D69DC6B9A6CA46FD6A1FE46 +:103F7000817287CCFCD63CDC23A9B5613CAE0DE94F +:103F800008EDB4CAB5A49FCD292281BDF6DF0597FF +:103F9000A1CB3680EE8AE7ABB84E1DA0EF100777B5 +:103FA00038797DE60B2EEBC9C27115901C5E00209E +:103FB0008BFB30389F0E283F02E3B70EB28F1849B3 +:103FC000BFE89CA8FEFEE05FECB804C3736887F20C +:103FD0005C2E3824CA13BBB47CF907E59B817A9127 +:103FE000F3B3106B27BCFEFD2799A63FBC7BEF8285 +:103FF000F2A88956C247D34C8D14DFFEFE6F4DDA0E +:10400000739E37E8D6E4F1FB59EE5A1CD7A8172562 +:1040100005E9F2FD9DCC7417DA05A789C539318F02 +:104020006DED27880F7234F9D6C7397A273B85EBB7 +:10403000313A2819E63D4DB61ACAA358D8F3746C24 +:10404000CF58D6F3002F458FC87CC2D7666BF98452 +:1040500037B01B900EDF8DC8271CA5E713FAC7D118 +:10406000780B1F0E8A9897ABE713BA824BC58CDC8E +:104070007EF9FC6E934D3813966F3D72BB5F541DF5 +:104080006845FCABA2900EDB19F95B7A7B9257DC9A +:104090008BF4DE11C8A03CDD1D8173FB3E87F2CEA0 +:1040A000E73228FF7067A0346E812B4CFEFD890635 +:1040B0007D8AFB56C8D7580FC7BBE339B108F72D27 +:1040C0007698BD510983E885483B7FED4623DF455F +:1040D000B67F297DDD85BF42BDCDB33D6751EF324F +:1040E0005F4044FDD1472FB5D4D0CE87B339AE5C05 +:1040F0008F89BB3CCFA040FC023865B526C72D9AFE +:104100001C9F9AE5FD2BDA9B44A7EA3383E8991CB0 +:10411000B280F307F5F9560ED8074C9B43FD5B08B8 +:104120004086FCFC245800E8674AEC8F835EEC175D +:10413000F811E38C3ABFB7646BFC6EAAA0E7178056 +:10414000DF110F5B7C650CE3A12D5E473DE5C1BA35 +:10415000787E2A6E36209E6C758015BD0CBFD923E3 +:10416000F25BE33D6165F86789781EC99F09738C2E +:10417000FCA9F32553130CF2A35F75BECC9DCDE9CA +:104180007CA97A91EBD98FEF7A6338BE7BCD81F829 +:10419000F4A46B26E9C5DB0436285F9C6C52693DAC +:1041A0002271F0EC25DEEBE6100E9E4EF8C57B7119 +:1041B0002AE1D4F69800C5710E615C87F2D403E45D +:1041C000CFDEEEE67917C3519B4239566532FAAF1E +:1041D000C3311E0EF5E53A5EBEDDC6DF77CEE2796D +:1041E0009FB76BF9714EAF4CE5DC3AEF8D7310273A +:1041F000F97F40ED3CFD306FF7769740E343BBE439 +:10420000C9BD343D4E6A7C16D2F8EC647AA002E354 +:1042100012A7DA7F665E10C69FB7CDE171F1DB6D44 +:10422000B17C9F2967FC15E44693DF9C245A8F5488 +:10423000338746975A0FBDDE95D64DC76F208773DB +:10424000E7909EDF6D90C3C8F776DE53301FEB3DDD +:104250001AFD9AA0027DBCCB991BF9FE89E858CAC9 +:10426000D33AD96C55501E4F3EF432D1356F2CCF16 +:1042700023A09F09DCE5C2F86C4FB335AD0171E7AF +:104280004F2537E6FF1DD2EAEFC25CD6FC707E6296 +:10429000B1C83F3DAFCC5BF51E3C2F7B88EFCF878D +:1042A0001ACF3CFF02CA99D744A623CFC7F36BF3BA +:1042B0005A99BF05C673680FCF0FF016C2C39B187B +:1042C000FB95EB3ECA9F0FA98C59A1FD0EF45BB084 +:1042D000639BCD660ECB8FB6417F13E13D5BABD9BF +:1042E000EDC3F2C53CE23FBFEF315F08CA4E73D762 +:1042F000149D9F9A39BE145932E509331E6FE1FCB3 +:1043000074DD429E9F62BFE8A2F781AF5A91AFAEC3 +:104310001FEEBE6E12E0C8911B19F15361EC24B27E +:1043200077DE464141CC3AA5F14533E6EF54FBE256 +:1043300018EE6B55BB4E917EAFDE032612E65D98FC +:1043400010A279DE0EBA64553E3DE7F9D6A99C6EFF +:10435000537DCD8209E95AC3D7259BEDA1F1848A0B +:10436000F8780E8DF20918E73C09CFD1BE16C6EADF +:1043700074061406E339E42BDC8BFEF00584EEEEC4 +:104380007E3D1B6AE4F65A191724BA1EF23219E56B +:10439000429FEFB63A2E271DC8F7C8FF8D990CDF54 +:1043A000BB506F22BCD5A19C4BC0BC109760A3F83A +:1043B0003AB66B0E6B17F851405C50E9659447DBD9 +:1043C000ADC9515F7BAE99532CD89E87438569A6B2 +:1043D000B50CDB3B340BE6A90CE4D340C4FBAF685F +:1043E0007EE3A1C6C7541A5719237C3DE4FD60142F +:1043F0004E3FF2FD5722DE9FFBB16F552CC67B046A +:1044000016B04E043E539884ED98412C31D8D59186 +:10441000DED61E0DE51704733DD23FA0F5D7007E12 +:104420000ED66353EDEC19187907C637811F6C1847 +:10443000DF047DF6938FDAA8DDE7817648970E0BCF +:10444000EFC7379E2958FFA63F3F67C1B8EC75AB51 +:10445000ECB4BFF7933F3F4FF9F9CF83DDC1FAEFDB +:10446000CCC9E0DFC564ECB90EE3B4152D9F642C14 +:104470008079FD214A5D7500E99367A2B8E9AEBC79 +:104480007D5F27BFA21E84FB3278AF43C3037A79D6 +:104490005E9648B86A9EDF4F797C2356A5A78B139A +:1044A000F9FA59B07D1F5FBFD1B10107CA0DFBBD3D +:1044B00089F25114F6520F7DE7329B515E4F643FF3 +:1044C000A7B47E22D7E7649393CAD9FB9767888401 +:1044D0007FC16EC2BC77A4DF3F662FB4FB6CC6837E +:1044E0000BF64237CF662F5B011E2FDB31B22D3822 +:1044F00014AE76DFA3BB8FB27EFD7BEA4D65D71E7F +:1045000078BFFAD9288A078C5AF3E453186B3EAD6A +:10451000F5A78FC3DB6832E0C3BC6B8D7A27CBF184 +:104520008F18D4F7A1C6B171FC3B946843FD5DAF11 +:10453000CC8BAB09D39367A07F15F105CC07AFA94E +:1045400073330C78E9D4EA07B251EE4F361DD9B86F +:104550003F1BD729447AECD0EF791E441E137F8984 +:10456000793879CC196841F9F0DDC7F37CA731C1FE +:10457000C4F3DFE83B89934DF29368A79323DACF26 +:1045800069FCB58AF17F8400DE045C87D684CBF9B0 +:1045900065398D42D09287D71E15F3F11632AF6F71 +:1045A0001AAE63AD85F63926CC5534FCCF281FF6FC +:1045B000F8AAB40C8CFB797D3DB968CF16F6F99D4D +:1045C000BD95F45C94E9794EEBD6D7316EFCBD0B0A +:1045D000791922E0F6BCB9DCDE8DBE449CF57AED9B +:1045E000F91FA202CB317F2987D5D3BCD9545958A2 +:1045F0000B7AB6C2CA44CCC3AC783A71AB2F8C7F6D +:104600006F6F1524DC07B9DDD5938B74AD30052FA2 +:10461000D07B6004306E5C004A0EF3CD8E2D8ED9B7 +:104620008A7683D5768D2FCDC579F1FEA05D9E4F1C +:10463000EFED1A8FFEE6A225EA0D73E1FEAE5823D8 +:104640001F1C5C319FFCC7439ABE0A35FEE0F01880 +:10465000289FAF35911ED1E314873E7B2C17BF17DF +:104660007B67B90587C08EA505CCB283F325E70B20 +:104670001B5D43BEA7DFC33C798F60A3EFA1745CD1 +:104680006D72A57F13E5A8BAD8E2BE5541FD5E3F25 +:1046900002F35CEED0D641C7CD4CF138715D575B6B +:1046A0003C4EF4A3AF844B743FB64DC3252D765FCB +:1046B000996710FBDE769DBD2E3C4FFDFEB91C7741 +:1046C000DF3F578B8F992653DCAECDC1DC68AF221C +:1046D000FDCEC8F6AC4EA31FFA45FDAB657301BF16 +:1046E0002218D7F0EB6A81B9114FFB7E67726BFB22 +:1046F0002A9F454DE0F158EDA7350B9E4BA9FC3B99 +:104700004CF02C299E6291E57C8CAFE8F8B6589B62 +:10471000CFDB16F5EBB8DEC57319D177EA6C4FC362 +:10472000DC24B2CBF4FD5F8B16C767EA18033E7B2F +:10473000682ECFDFD3FD9153B33C4DF81E9BAA32B8 +:104740005C97DCD95AFE8B869FAF164787E1B1474D +:10475000A8BDD08B22AEEBA5F0D8FA7B0AD6613D7E +:10476000F067BA701EF168A1304EA5C23872FBED39 +:10477000F7FA89DC4F5A3FB174EFBB680752C5CBDB +:10478000FAFDAD9A7ED6E31E9D5ADC63BDA69F0B53 +:1047900025C58EB8767DEAE5FDAE487B6233071805 +:1047A000CA43B48DE735616201F9B3668FEF53E018 +:1047B000AB0393C7EC40FB0FB73F413BBA6EEAB285 +:1047C00091581E51C6BFC7B0BB8CFC56787369C1E7 +:1047D0007B50AFF3B7269ACF905B7AD9A07CDD648B +:1047E0008C3F49662F8DC3EA34B6D7398EC7717EA8 +:1047F0002E831F0DE3891EC7FDBA38573DC3BCBECB +:10480000B8E0CA20EE33C44D14DDE0F9B147270704 +:104810008F0830FEB871BD0CFDF438B34CFEA075A6 +:104820009CE8C7BC40ABAB5EC5EFD7F43C4689649F +:1048300000DA2F3A4DDF8577BACD22B62F69F11510 +:104840001A1FFAB3E3761FC4FC289F2AD277788711 +:104850008B0A6C181F5FEF1409EFAC2F5A7110F31D +:104860005DA4E6B8C548A7DFCD35111FB6BBCD2C7A +:10487000487AEB08C5A1DA656897F63143543E31B2 +:1048800097E7F7AC739DEEC882F6BA9C66C2BD226C +:104890000BD17751AD13B9FF6FFBEC5B412B3CFFA4 +:1048A000E6E40512EADB0313DFB29DA5F7F93AACA3 +:1048B000738976C28B937753FCABB36801F9B1FD72 +:1048C0007852A1E71666237CDA3959A4BCCCF5AE40 +:1048D000029689ED82C14024F7CDC9054194D70BDA +:1048E000AA8DCA166F195B8B713A9748FBEA8569E6 +:1048F000E21B4807D32491FBE3F9DB7D880BD6014B +:1049000083207C97A68A06FD22CB5186F58C4A34FB +:10491000C6BD4C5FD9A666727CDBAB059D62F30D0C +:10492000FEBE5FC5F17D6B8AAD77158E2731105CB9 +:1049300008653BF8FBDCD330C6C184D8950CF36026 +:10494000D7FF8EDB0589A93C4E5EB4D887EDFC12FB +:10495000DA1126A219E171AB2897313E65CB329668 +:10496000258C4785F9F3E688F8D495F4BC2EB7BAC0 +:104970009E6FB5D497F1EFBB558A0BB799400F12D4 +:104980008E60C16CC4AF09A95BB97C717D8634DDD2 +:104990001396A7FEEF4BBC23CAC6A3FE34CA49A494 +:1049A0005ECF9DADA661BDAB8DD75F6DBD2BE5FD27 +:1049B0007D6A4FF3236EE9C76D4A2CF2F969ED7BEE +:1049C000C4F3C76328CF40CFFF8BECA7AA2173D3D2 +:1049D000D4B0FCD213953C6F37B2DE4D75053796D7 +:1049E000C178FC59201FD0FEE60633C949B7875F5E +:1049F000A797717B1279F52BBD3D188F5BE013FCF7 +:104A0000E674BA4E5707D14FC56582BE3FE3B784FF +:104A1000D9B3B72DDE62EC572DE279105627233932 +:104A2000B23035489B4E36470EEE8B2ED6EA3F11FC +:104A3000BDF98E09E8EF817D443D71AC76A1847E9D +:104A4000F6B9CFE2C85F78343AAF8AFC4D067A24D3 +:104A500091BFA382FF5AADBDBF58E3BF288DDF28A9 +:104A6000568438F44981E25F7A7B171AE264DEDE0D +:104A70003F5687A83D563F14714C8EC0703C4B3456 +:104A800079F23A787C2694CEFDD5C511FCED635DB4 +:104A900034DEC5BF35B9F13BCCC5B657293E6303FB +:104AA000DEB04EC2EFB7DAE97D67219325DA679170 +:104AB00038B8D5E42FAC3D01F7DF2ED49AF8F7E8EB +:104AC0003896648D2E380F7317B5930A7EBB89EC28 +:104AD0003153F0BB68411B67E4B88ED5F2F8CF05BF +:104AE0001067CC5767AFCA3ECA67D7F20907F26BA7 +:104AF000D838320D652D3E6E2C57FBAC06793AF650 +:104B0000D9BE8F4CE8EFF8AC4A0BF4BFC4C7F7B17D +:104B10002FD30FB5232A9ECBEA03B6292CFE9DD1B5 +:104B20005F9F753DA1E23EB8BE4E91FD45BE377B0D +:104B300089FA14F2616E9DE73B65C4A7FC7B6A2F7E +:104B4000FAEBF9987FEF29380CE59ADFF2FCFB1AB3 +:104B50009BC347FBF8AD967F0BCF83EB93334D4F51 +:104B60009DD1F4D48974568576FBDDC7E2A4F03874 +:104B7000D9F734B9F06A71B2130F464BE1FED6AEE5 +:104B8000BA29DF43BD53855F508CC13C029381AE8F +:104B9000B56B8DFE5AE4FEBDAE670027919D3AD1FC +:104BA000C8E34B70E5FB2F0EFE1DFD95F410B03FE2 +:104BB000E51F9BB5FCC8429B711CD364E3386E753E +:104BC0000E31946728C30DF56FCFC9343CCFEAE2AC +:104BD00071E60BA0CFD6509E8D872621B17AB237D1 +:104BE00036F40C32F17C188E73F66B7485C5FD15A6 +:104BF000DAA728F4A313D1CE05A95E0C0BD1FB7163 +:104C00001A5E34D9663E691E8BF851E1796C086EE4 +:104C1000304E7407231C7352CFC729E1796D49CCFC +:104C20004BF5F4FCC114E6A7EB70CC0CCEC43CA24F +:104C30001095AF418369421154E89AC9543ACF6440 +:104C4000E73D8BCF221F6533FF71BC5F10FDD1089C +:104C5000CC4F2898AFBC64213BFBC0F2C3E03716B1 +:104C6000CC55FE62017A6EB1DEBF7C3FC86D8155C6 +:104C7000A43C73DBB1D53BF17BF65973D48FB09D67 +:104C800078FC107EFC95E3D09792934BE563C4E3E8 +:104C9000C7124903F331BE6C3F97CAC7D0FB89CC1A +:104CA000C7183147B597D3FCB83FF10B8B3F95E759 +:104CB0006FB09029D96027E2CB2F6727C03FC7F597 +:104CC000AB01BD8FF969AC5E6E5B01D716B7C4F35B +:104CD0005723F4618D2D35F800D58B7563BC2B52AD +:104CE0008E5F367B46607FEC55F044353F0371F1B3 +:104CF0004917C7413A1D74B9D2EF47D2E34A72123D +:104D0000996F819BA4E1F8EB4AF48E9487039A1F74 +:104D10007350F3637E817924617E010B99E3CFDACE +:104D2000FAF5C3A5F189999D0D1BD7C0F99FA9A4D8 +:104D300078658355A67340ECDC8FFCA2E34B983D6D +:104D40007D4639C55F5265F283FBE8C0F5569F5E2C +:104D5000700AB4DEB7329F99334597393CEE13D9C8 +:104D6000CF39C7D67731DECA4C8E7AEB8D979EA7A6 +:104D7000AE17F4728B5D75BA719FDB32F87CD6DFAB +:104D800033BDBA9CFCE72F9747A497FBF287CC660C +:104D90009ADF01E7D06D6B2EE3AF1E1094AFA1EB4D +:104DA000F58D633FDE89E73915608207EE25F85EF1 +:104DB0005B8E7E594121B10E5B79EC67A437C05FF1 +:104DC0007E00C709F779FC47652AC6C5CDB24CFB02 +:104DD000A880671BF0F96AD42B706D9BAB3E88EB03 +:104DE000A09767CC551BC3CB6766AB0F8797E1A72E +:104DF0005B34E2B8D5F8FC52F2F9B2596D23798AE6 +:104E00005CE7ABC4C9EB9B94C7DE054731EB3907C0 +:104E1000DFAF3CCEF941CFFBD4EB0F49739F52C2B9 +:104E2000E2B44332EA47BB498FD5DF10FE7D8F1EC7 +:104E30002F4A28E2E7827C1AC3BA4C61F860A8E4E2 +:104E4000DD82F31162277AB1BF074E0B0AF2FD90A3 +:104E5000623761C6844237C5A55AECFC1C8AC8710A +:104E6000EF28E7FE6A71B9FA0CE76F3E8F84DB8B9F +:104E700083ADD0DE6AD03CE86FA965F56CB0F8A5CB +:104E800025D14BFD005DBF8F7433CB1E2A9B1C7C4C +:104E9000BCFDF94EFA95E7FDD934FDC63CE9B47F77 +:104EA000B05AC32BABE5F56C25D0A52355A4F378F8 +:104EB0008EDF1C28C3755A2D88EE552827AAAA24F0 +:104EC00026F7EBC7D1921C5CA0E1C16780EF0A62B4 +:104ED0003B54CC7FEA546D6EFAFE44910CF889691C +:104EE000F98B7AFFED8E2CEABF03FAC7FE3A1DE676 +:104EF00020EE1F74321BED97E43902E4FFE739CC52 +:104F0000F4BDCAF1152F8CC2F3266C8912E1B4C826 +:104F1000F63F2CE73829DBF7FEEE4338AF9040F937 +:104F2000446549A79F7F81FC203A5D89994AC16EFB +:104F3000915CD5F3F880635C6CB8FE5CDFC4E394ED +:104F40001D5A9CD27487DB8F7231A4888F7BBCDDA5 +:104F50007B12E93D04F8580DD3D376258AA9E17177 +:104F60009451B244795D310769BF689D9D9F7F5020 +:104F700033EE4784ABD72E82B61187831DC2BC5F48 +:104F80009823DF1F8FB0339178CD8107DC00BFDC21 +:104F9000D2FBF1EE4389FDF33425EB710E3EAF6C8D +:104FA000DF9E83182F59ED30D3F92E57A2C3F11588 +:104FB000DF3888F1E5A7BE6962E1DFBF5D053D84AA +:104FC00079FF83F4A0E0C355C4154D187777E1D578 +:104FD000AD849F4B327C1EE79B17CBD5E479E3AFC2 +:104FE000BEBD5F8CE0DF4F74AE8C26BFB013630A8A +:104FF00018AF5A1943FB0691EF8D9CC7E30BC3967C +:10500000AB9948AF1BE62B9A5CCA742E4B4DC3A1DB +:10501000A3B86FD19934B8BE7069EFBFB35CBD1E41 +:10502000DF1F3F9FEBD9636FF95371BF748B4752FA +:10503000304E35FAA17326F4B7DB8BB91CB707568F +:105040001C4CC771A59A298EB633709AF088D5EE9C +:1050500026BFAEBBD9FB387E87EA1B61A238A4F518 +:105060008E52FA8E799D22B845286F695C3F1DBF2C +:105070008B5CED16E8DC8871F313B4FD90234518C2 +:10508000477A33358BFCD69E71194208E8BAB4884A +:10509000919FB2743BDF8F2E4E1DB303E3E4275282 +:1050A000F7D2B9757FC9F24E60D40ED77FD9DE8BA7 +:1050B00094AFB3791C235C7FB461FD748CE79D6F62 +:1050C000E45BE5931B3D7387413B938B24196FF49D +:1050D0002466D0BEEA062D7F6AC3F647D94A8C877C +:1050E00035F278AEF9A289A9801F4D1705BA9ACD7D +:1050F000FC7CBE210AA3FD6C53B1914F2B8B03FBAB +:10510000CD38FECA6B8F513CF20E89F6EFD715836E +:1051100081403AFC055628BD5F7F9935FDB54E09A3 +:105120001CC571B63748AC199E3F26F4BE81F2E625 +:105130008B1765A4E3F19B393F6CC995883F98397B +:10514000743BCEA3F36F1932CAEB6DE2BD07F0FCDE +:105150009FDB760BEE56286FCE9D1E5C02E50D534D +:105160006C6EF2DDE501FA93F4B7DEBFAEBF376BCC +:10517000FA7BF3ACC7CD94970A4017CFCB59DA7DB1 +:105180006A19968B1A248594B696D77397FE3E0BB0 +:10519000B4617F773B4D0CF1AFB9F1F76D374059F2 +:1051A0002EB0F59A9C03FBFF4AAFC87C6174BBE547 +:1051B0006214F385C9F71436C4502EB40D37D49F4A +:1051C00026671A9EDFEABCDEF07C8632D650AECC73 +:1051D000B9C950663BF9F9770053683CCDAF4491AB +:1051E0009DDFF01D9EA77B77C4B97775FE7BA72F47 +:1051F00002FA2FD6F29016072C86BCA1C7EEB89FF4 +:10520000CEE35B8FE7F1B9310E607CFFC979C6BC94 +:10521000216B92C8FB73F27CC13F543E5049FB4066 +:10522000C31C0CBF8F0CD67AFD28972DA9E37230D2 +:10523000FEB241F6C86EEEA738B326F4A556C355A4 +:10524000EAD78BA8372AADC4279B97327EDE16B2E9 +:105250004A32856E689D3E48DDDE8CDF4F6DC1753C +:105260009571DC8B7BB0DC26B05E1E8F95889FD15C +:1052700024E238873DB7ACE779BE8EF5565C47E649 +:10528000B1212E37178B32CA57729D64E07FEC43F1 +:1052900009C36999A985BE4EC447409738F07B1E63 +:1052A0006B1CB36A7622D9751E2F96F9F8A1091BDB +:1052B000AE83353B4071747BA299D82AB3DB6AD0A8 +:1052C000FBFA7C68FE343FCF8129D05E828FD1B952 +:1052D0008C480F5F183D36AF3CFB24CA77185D0F32 +:1052E000A15E6E691C5387F925098ACFC75CFD74DE +:1052F00045371DEFDB59D8BCE03D3543A5FCCE2139 +:10530000F83D627C3F9D2668746A13BC47D18EF9D4 +:1053100066F3FD9748BA9866311F7EDA639225C31B +:105320007C327DC67AA7E6C5EBFBC3249F74BA42E4 +:105330007A7F7F4CEBCF12313EC9FB9C87CE599BC5 +:1053400025325C975D0F9FEBC1FD96CE22B18F0F8A +:105350007CBABC0B03DBDBE7E238BA5561E45F449F +:105360003E073A3F82EB62719A157EDE9CF1B9CD21 +:10537000ECF161BC2615CF2D847576A5BC3B8FF66C +:105380008D574A0CBF87B728C6796F8EE1792E8F6B +:10539000CDE071CC4AA04BB87CE6153F4ECF591DED +:1053A000D875B09FF6F919B4E819527011B69BB1CF +:1053B000C24E7A7203CC17F556D4BDF6AD26BE3F69 +:1053C000F964349433C418867EF9631625A50BE47A +:1053D000E65733CEAEAAC57A29268688A5614FFD49 +:1053E00016C4874CB091BF8678D01B6627F3A450B3 +:1053F0000AEE136FAEFCE849D46BBE1FDBC8DE01BA +:1054000060C8C07C017DDFBD3DF52D5B0DE1A306CD +:10541000DAEF291BF1960DF34BCEAF35119D2F65B9 +:10542000F72371D0BA6285E27F848304C24119F305 +:10543000AF0207294CA5EFC8F538448DED303F6F1A +:10544000C9C6642BC5658D383B12FF089E1F517C71 +:1054500078D3120D2FBDE6B6D177655F1217152DE3 +:1054600052C7CF27FE35E2904BC52F07F86757D9B3 +:10547000CF55E3B47B2CDAFE9D9FF2D3CBE36C5A7D +:10548000D943655DCE22FD9856B48340B4D644A37B +:105490001F335A0A525C9925480AE2B282D8F709AA +:1054A000FF807F255B29AE1DCC7D199F2F8BA2EF3E +:1054B000E16CB244DF8F5ED17FC9C930F82FAB7386 +:1054C0004E131E5F13C2535C302FE6C16BC2E3B8AC +:1054D000976A37920E1D16B647180DFA697EBA966E +:1054E0007F6AE4074139F0376C27DBD7C1F9377D94 +:1054F0000CC57F22F1FC9AD43197F56BD6140FC0FE +:10550000F10F221F5C897F5B351CDFAAE1F835882B +:10551000E3F3F13C0CCE975F16C73F8B78F6B27E73 +:105520008D8FCF4BE17ECC1AF46314A4C3415ABFD4 +:105530008EBA28EEEFFDF3E8B1E96AE4F9BF8A1EFE +:10554000FA77355792970C31F80C9E8BC8DEB6521D +:10555000BE8F191905DEBBE6B39FD950EFE5557232 +:105560003DBCC6556A9F42765315307F2D2A77B7CA +:105570000DE3421B5C7CBF7B836BEF5BE86F77BA0C +:105580000A9204A5BF9F4ED7EE22DC27DD30ABC0C8 +:10559000620ABBBFC1CCBFFF8D1CD7D84A81D631B0 +:1055A0006D91773FF2536716F7E3815D79BE8AC24A +:1055B000F352336E53295FB2E217DE6B2E777E8F84 +:1055C0003E5EC0248A350EC7B32009F5FEBC34EF19 +:1055D00006C4251B4A98BB59C1AB475C0B748806AF +:1055E000B9C7238737F44CFA08714492478235A330 +:1055F0007662C783FC166A72D43DA294C671DEC57A +:10560000283E3927374478D93A4B52F05C805B53B7 +:10561000DD53178DC3FC789EE71ECD42E418FF6B67 +:10562000133FB759C79FED9F70FB9BB8E954CB0D53 +:10563000D0DE12C0490AE22487F11CE7687FCF3E22 +:105640008C8FD4011E55A1BDBA4D463C7A7304FE21 +:105650009C8CFBE5797835E6B7FFDB7C0D974E60D7 +:105660001350FFEAE713B1AE273C7F87F92DC28ABA +:10567000A6FE738A22E9F9DA3D05E7715D4E348CA6 +:10568000BD6C1E927E8EBE7E0EFF2FBE332505F7AB +:10569000D1BB9BB97FFA45CFE55FDC703BC37DE6AC +:1056A000A50D33D85400658B1A6652795E15F76BD9 +:1056B0008FBDD56B42FCD3ED12FDE4C79614D8B371 +:1056C000C7D1F74A749ED695FCD89F6F5C3D15C52F +:1056D000CC9A5B6047BE5EEA11E9BC4085054D7817 +:1056E000EE4937F89DA81F4E78DE2AC4F25F142FCA +:1056F0004241E89FE773DCF259F55CF473935C1266 +:10570000F9674B67058E62FB892EE00718C0644F6E +:10571000E0E802284F764A6E05F58EF7A889BEE3C9 +:1057200007FFF029C4F142D774F4E77CE9FCBCF52B +:10573000A39E6D743ED8F91CBBCA9537F87F507E86 +:10574000E3A228877F77AD5F87697E6B32FAAD4031 +:105750009761668F8072910C78295CDF54CE0A4C79 +:10576000C5A38B57CB1E3BFA171BB697509EC90695 +:10577000D71C3BEAB94EC1E3C9267F33E0C4EFDE54 +:10578000F4FCADCECA1B3C48CFEE18D210AC7B94D3 +:105790009A82FE51670ACF0FBDB382E3D8CEDC1FD9 +:1057A00039D18F9586888289E4C6F8DDBEBDEB5A73 +:1057B000B27BDD9ADFD93D6B2FD9D7A7804E680722 +:1057C00099A7C43E58BC72984BB37F7583FBB57DD7 +:1057D000E702385DE4DF3FA5D9D54BF1E7A5DAFB59 +:1057E00067FBA94B36713F7A39E805F44722FDD6AD +:1057F00048BF3AD28F053F9BFC50DDCFBEB25FFB66 +:10580000761BEA91CE29B65E2BF9A55E6958FA405F +:10581000FF7689EBEC7174FA22FDDA255A9E4DA4CD +:105820003F7B5F85318F109D07A47B22AFC28ED551 +:1058300016366F457EC5B833E563AACD6887933EBB +:105840008BA371276D2F6CEE49E47E25FA85C76A1C +:105850006736F7005DCE6971EAC459467FA14D6095 +:105860003C1EA6ED97BEB3BC70CA14943B30CB541B +:10587000FFD5B37F67F4A70E8C7E51647E03DB6E89 +:10588000ED7F9EC1F38522FD4BA6E332911795640F +:10589000CD2F44DE723EA5A2BF298BAC17F7F16C69 +:1058A000B6B54750AF5EB61DFE9D2CE12EDDBFB4F0 +:1058B000D57E5BC5F80DDE2F75623DFE3E902A4811 +:1058C000DF3D67F179C0A30338CEFC4AA12FEE2E4D +:1058D00027F7B76B734AAA3DAFFFFDBE796BF91A84 +:1058E000544FE87F6ED6DA1FFDDA1E8AEB5FBBD11C +:1058F00038EE6807CF8B8C361BF5BDB78ADBE17FAE +:10590000D1F42BFE98F57C0711F38CEBDBE660FC01 +:105910000AE8B20DD663D426AB01E7E8EDFCA48219 +:10592000CF23675344DC40F3BF1335FA0C5C47DEEA +:105930001F9152C1FFB9F762DC225B3B1F48CDF0DB +:10594000ACC272927E5E50441C435FC7346D6932B4 +:1059500077CE5B658C6B78CB30FFFE1A0FFF6E380D +:10596000B3DB38BEE4D4F3CDE1718C362124E07E84 +:10597000A44F60F53F84FED21A8D744C2EB39CC2A6 +:10598000F30E9223E2177FAC30FAF7FAFA44FAD317 +:1059900092F77DF29FBB5D12F7E74BB578511D334F +:1059A000F8F3C44F409F7DB3761FC5E78F7824DAA4 +:1059B000378AB2F472FF7F9648F95A03F863807F02 +:1059C0001F590E104E4B467F9F0D7C3ECCEC6DC692 +:1059D000FC8D7E7FFF25EE77823F8FE7FC46C63F3A +:1059E0002AB324831ECCF33CCEEB6BFEFDB42AEE2F +:1059F0009F44FAF79DAE6D32F2699E1470CA6477C7 +:105A00007E4A7633D21FEFCB2BC64DD8ABF8EE2BA8 +:105A1000DB57E699C2F101ADF768C99784F365BF1A +:105A2000E4FB7896F810F90D965302D9B34ED76976 +:105A3000FAAEC0F2C7A16E248F1E2F88C4FD963B1C +:105A4000148A5BE87E7C24DE073F20B572FC40DCD4 +:105A50006F2971C762BC218BD597FDA7FCF954BE95 +:105A6000FFF1CFF2E70F69FB0AED1A5E6E4FE578A2 +:105A7000F9E90AB96F3F10EDB3BE1FC2B473645B9E +:105A800066F0F3F199765E63C68A9478B4EF3F9B33 +:105A9000CFF3F86245F5118C7763A22C9E2FDCEDD5 +:105AA000D9F61EC615E7CC9652308ED3ED291531A6 +:105AB0006F353175FD77D14E1E9A6FA3F736942856 +:105AC0008417A2C19E0F86CB07E2707846385CF43B +:105AD000731CCE488E125D1C671F7B8B7FFFD56EBB +:105AE000C3587B3F1E6F4FDDB6BF90FBF5F47D556D +:105AF000E2A6AD744EC392894C56E2117F0BA4AC62 +:105B0000EA1CCCAF22BE1C71EE20EE5F746E17DC77 +:105B1000028CA333502AB611BE14E93CC8A3A9A530 +:105B20007FC0FCD5F38007916ADF4A3CF726DAE5AF +:105B3000F654FEBD4367CC1115714F673A73E37796 +:105B4000389D02E043C47F2912F93903F19C2A20D1 +:105B5000BF247B22F61F3C0133E2B97659253CD79E +:105B6000EDBA9FE21CDD82E7483A328D594D29A5F6 +:105B7000EFA38D386C49483DF6759C1FE81B3FA389 +:105B8000F39736225DBB9D0E46B82C75159D47FDDB +:105B900014CC3B5EC0FD08EEDFB497480AED57E534 +:105BA0002ECE09C7FFC352BF1C3E03FCF3FB1C3DB6 +:105BB000BE8BACE7595CCCF2AEA2DD591C9FD8E09D +:105BC0003F8E7B1E74621E75658E11CF985201E761 +:105BD000C40EF4974C9A7F648AF08FBA2AFF8FE044 +:105BE0001CF7FF0E9C5356F5CFC63965C2603827A7 +:105BF00049C33949113867858673025562DF38BE5B +:105C00000CCE39AAC52DFEAB704E229665BEEE5F56 +:105C100010E73811B75C338BD13EEB009CD33800D2 +:105C2000E74C415C74459C13B12EFF5E193F304F29 +:105C3000E47238679611E7B45F0AE7A4961E1B0C5E +:105C4000E76C48FDB238C7F346FA7F23CE69469C1D +:105C500033E83E46A907E52DAA44A47DF13CC9439B +:105C6000E7936C18C1E31765234ACBD1EF3BBF879D +:105C70009FFBB7A1B252467BE9030626FF9C71BC8D +:105C800092773A9ED675B414A2B8263B61A5FD283A +:105C90001DA7747BF6E6BE8C3866E93037F6A3E3C1 +:105CA0009604B3E708C62B138AC9F20F865BC65663 +:105CB000255D0EB704FE73B8C5F5CFC52D4C5169EF +:105CC0001FA842DB07EAD6F26D373C62F3B702BD8C +:105CD0007E35FB6C01C6E3F4FDA04BB5F76571A7FB +:105CE000BD52347C47AA8F2B58A99D07ACE1A6F87A +:105CF00079EAFCAA2FB09F0182397DD938D24714A6 +:105D0000F75DBCBD41C2734C6C536C0194EFC5DBB5 +:105D10001F9470FF495E6163A8B7176F6FA4B2F359 +:105D2000019B42E53EFE1EF908CA87C26A25CC37B0 +:105D30005D5C67396589C573D58DFECA4F2A188D9C +:105D400077945F1AF4FE7FF7788E5632FE778432AE +:105D5000940C549291FB76DD3F06B41387EB5DEF14 +:105D6000A47DBF1167F7D684ADB38EFBDB3D1CF776 +:105D70005BE27DF49DB94530D7E3F7A8652356D0A3 +:105D8000BEE07966ABC7FD6990C3145C7F90379223 +:105D9000BFC8F5D7E54ADF0FECF66410FEB7CC902C +:105DA00069BFB9DF2FF0C8A84787ACA5E46D94A7F9 +:105DB000CD5557B13FF2FF9B5C45F281BE1E57FBAC +:105DC0007E8F8F7F07A8F672FC0D5792CB2917198B +:105DD000E17319C389509E0ECF9574C471C368DFF7 +:105DE000239824B0A1509E6E3A6CAA87AE7A265AA8 +:105DF000652BC75B77E687C5E17B0E032E85E7370A +:105E00000B563AEFA890FDDC84DFB71E007B86E7D7 +:105E10005CEB7174FDBC9869CE2BC5CD8D78703F5D +:105E2000FE02F3FC4D9516371FC3C67DC9B8F9DBDA +:105E300028F7D77CF6335ACF9E227E9E44BAC5748B +:105E40009B1BE6BBFBB0A860BE145CF97702F5565D +:105E5000F223761FDEFB960BEAEF3E382699D65CDE +:105E60001E427A67B7A274BAB05E8744FAFEA54DA7 +:105E7000330F610AFC8FFCF745CF83EB9EED8FDD7E +:105E80008E57FDBBE8C54F5AC88FFA4187F434FAE4 +:105E90005B6737664653BEA7E6C75569FB3E7A7E09 +:105EA000DB390D974D9FAFF97D0D49FC3BDC1CFFA5 +:105EB00071B443271E1614B4DFD572AF45A0F8CBDA +:105EC000C3FF727C229E3FD93B0DF34C6CE243A38F +:105ED0000F40FD6AC42098475CDDFC7D1FF473F120 +:105EE0002EF5FF211D6CD59C8F1E5CAEFE1DE5427C +:105EF0002F47DFAD7E1E5EFEEE7255A80E2BC34F00 +:105F0000D06ECC0BB6555F262FF84BEF4B6BF3BD25 +:105F1000127F6F1382DFC1FD33DF312BC3FDE193AD +:105F20001ABFE8F57EE74D379CBF063F71B81F35B5 +:105F30002FAD2B16F711DE1358A819AE0BB72F9CF7 +:105F40007D23ACD77BEB4AC80F5EECE3FEEE7B3DD6 +:105F500093BE87F9748B00DF2326FAA079E674F2EA +:105F600077D70295E1F99C755C7E16770B7EDC672E +:105F7000B87523F753BD17F5BC0EE3BE55E4FED349 +:105F8000994FF8F7B9DE88FDA75D9247C2FD86D02C +:105F90005681AD87570B7D3FDF87DF6F1D00390CC2 +:105FA000972B7D7FEACBEE47DD5CADF95B5F7E3FF3 +:105FB0006A1AAEFFF986B14E36C87EB87E1DB01F94 +:105FC00035A28BBE976266B713F5FA07962FB72FE7 +:105FD000B5ACA190F6A3F4FDA9E35EBE1F94EDB5A8 +:105FE0006D46BB72069C37D4E321C1F7E644E493C7 +:105FF00037F9F99CB7EDA99F8E7E5D5FBCB5CCE209 +:10600000BB16E853ABF9FDBB5E799E9F6B336A9478 +:106010008AF25A6BF6D2DFEB58A8E525566E7CB1B2 +:106020003505D6F385250BEA70FE0B379A0C7ADA24 +:10603000EB8BA7BFAFD722744D4D403BB65A203DE6 +:10604000719BD86C4E80766F5B23B85B154D88E0F2 +:10605000F91B3E137DEF3FD6CBFDA0F30DFB0E6089 +:10606000FB91FB137D7CF34341E3AF2394F7877CE3 +:1060700083FECAE29C496C6AD8387649F507F07B02 +:10608000C7B393ACF22AD00B776D7C400AD7CF33DD +:10609000C0E84E0DF78722F63306E6E5D5D0F74582 +:1060A00003F72D8CF51EA936FAF1A36315FABB5E32 +:1060B0002C83D361466BCDE643284FB563BF3A01CD +:1060C000CA4BBDF15A7E6C611CFD7D2E6B70FC1FAE +:1060D000104F7F8B9F1F7D46307EAFF1432FF7F728 +:1060E0001ABD5A7C5C757831BEB240A3D307DB334E +:1060F000DB30AF54FF6E7481E6A738F579D6C74B15 +:1061000018FF5908B59FCA87ABE6E72F1CE81FAAFE +:10611000E8EF52BBE4B71BFDFE059A9FAEB70F3008 +:106120004DC2F746BFE694709D96169B82B8BF5944 +:1061300013E98787602CC9FCEF43A27CE9FD821F2D +:10614000AD86FBD9D46F667FFBFAB822FDEBA50EB6 +:106150002E9F4B23FE7ECD692FB723793597DF47DE +:1061600008A17F2D5FDABFDE5F7D79FF9AE691316E +:1061700028FDB6F77DC7AAFDA0BF5CA3AD134CB444 +:106180000DF75D619EF54F0DB28F70FD73C679DE20 +:10619000F2D9E836F497177AF9B93A351DC6F14ABB +:1061A000DE896D9857F09E260F91E329B419F12DE1 +:1061B0009EAF185EBED5692CCF5006E643DAF47563 +:1061C0004B1FD8FEAEC7CF2CC075FF60AD9540A267 +:1061D000DFCCBF9F7E6FA349FB8E9BFBD7B4AE8302 +:1061E000F8E7672ABF427F774AC7BDFBB6CFFC26D8 +:1061F000FE5DD1D38D16C5AA0CACAF9F5F9557201D +:10620000B3F03C49FDB9EBA11F1AFCE7C8E7954084 +:10621000BFF0FDCC839ABD3C6E51284EF01FC420C8 +:1062200050F30080000000001F8B080000000000F9 +:10623000000BED7D0B7855D599E8DAFBECB3CF393F +:10624000E124D9799260083B24D1D006384082609D +:106250001177C22BD8E81C106D70404E1EE4C16B44 +:106260000ED88ED189668724904042239C205046C8 +:10627000C2234E5B1D6E746AAB8EB7730296E23B0F +:10628000B6DE2ABD0C1C0844A99DDE28C5A633FA3B +:1062900079FFFF5F7B27E79C2410EDB4DFFDE6CE9E +:1062A000E1D3C5DA7BEDF5F8FF7FFDEFB538DB2CE8 +:1062B0002B7A1A63977D96088F93B17A8115754171 +:1062C000C96A663196CCD817F8BB6378C9581D6384 +:1062D000B98C4D97DB1E60F15015455727969AA64D +:1062E000C6273226601395B1FCA80F457CDFCB98FA +:1062F000629BC1D8773D305802BC7B59D11EC1F694 +:106300005BA25C3B5C8C055AEE119B72A03C66392B +:10631000821F57BF5073E869785DD47972EA4FE005 +:10632000F9D5CA0817F66759CE580FCE4F724731C4 +:106330002803BE59512C7B685EBB6B610A36C69A36 +:106340006AED54060A5D1D127C1F57C0E793EBF0FF +:10635000A47B12B02E32CDCEE8F705FCE75023988F +:10636000963554EF9BA2C82C1DCAC8D3790CE7E51B +:10637000608A00F32FD67F2260BD652DCC05E0C377 +:10638000BCCA363FD4EBE16F3B14A837587F1B30B3 +:10639000FB990CFF0BA4C4F48D83B65847B8D5C441 +:1063A0003136F77A70D5093E964D56E6CFC675322E +:1063B0005AE7CA68BB5177511D7F76807399016790 +:1063C000E64E6322CCA3EF5D4BC70E00715FCBC9D5 +:1063D0007FB3007C2FF96CAA007547DB07ADB7C20D +:1063E000FB2B6F585C3B6818ED1759B3195B6F7C3A +:1063F0007F5CF69E4AC6EF9F155C5BE15199EF27E3 +:10640000DB1E86EF950916664982076D36E6B707EB +:10641000AD0BC06C9F3D34FE153D9D89381E8C2F01 +:1064200000FEEA5E8A6008A7DEE7850E5B1A36EAA0 +:10643000D986E35768F67EC47765C7E653D5502FF3 +:106440009F63532C0A8EF790ECC7F14A9C5ECB9C5D +:10645000E1E3ADCE9ACB1606E16B29730DD5B1FF02 +:1064600067AC170350D7E00FB6DFC824AA9BEFCB69 +:10647000BBE07D107E2BC2DE977A22E3FBBE0E9539 +:106480005BD9AD5F00B2A647A9DB92903E270BAE69 +:106490004E58DFD286E2275F87EA95B2597F351BD7 +:1064A000EADF5D134B78FADF1B16447B102F0B9D40 +:1064B00065088F12131EC7D2B73D0CEBFBE4B3681F +:1064C00086EB2B6132D11792CC17B839F6C56CB375 +:1064D00042FFA5D0FA00D055E9CB7D9F03A6A12E9F +:1064E0000FD125C18D2D6466BF22FE4F66CC5C079F +:1064F000CCB3C4DED2639936D47F3934C0EFFE61A9 +:106500000DE3FBECCBCEAB2D46C67995E0BC62A08B +:10651000C47905F51F3EAF52FCDBE4E1F32AC579EF +:1065200005ADA70CE7250CCDEB8EFEFFF3DCEBC829 +:10653000170202D1A3659785F9695FB7F17D7DAC3C +:10654000F7874FC3FBC0591BEDFB4CFD34F1812B8A +:10655000C00776A8C8176645E3BEFF4FE0079D9EBB +:10656000DCFFF7F901D39C9EB1E031C9C48F1E2333 +:106570004B63C3A3C612C78E474F187DD50BEE27BA +:10658000C7C1387A5D2443FE7FD9CA880F5CD96CB5 +:10659000EB68A0FE03F9C8E78FB48B0CE161F7F05C +:1065A0007DF376A72D22E01CFBFA5F7840FB15F205 +:1065B000EDB3AF7A2629D9C3DBDDB446A57643DF38 +:1065C000B16811F8C86F1FD0FE15BF1B339C9967C7 +:1065D000F13AE45306FECA8F55CB1150B7E7D9BB49 +:1065E0006C49587F448E403EB5C5CE6C73B05E4357 +:1065F000F5A487EC2AD507F7EFCDCD082715183875 +:10660000CABFF22681F8727965E6B69D399CCF8DB6 +:10661000C3FE0EDA42E80C7E491941FB6A047EC0D3 +:1066200054C057B14107F03B86F82BE7AFD81D9F08 +:106630004DDA867C1CBEF71E50383EF1FB69063EE3 +:10664000BFFE7D3964BCE2265B08DDCB9E39DBEE04 +:10665000453C1A7C3A7CFC05F6D0F92E5242EB4BB5 +:106660009242EB4BD561EB23B945EB4B1BDEFFF1BF +:10667000BDBD25B89FAEB4D80C2502309368D0BDFF +:1066800030B41E933E4F1EB3DC89F0BDE8B3302E0C +:106690006742DFDFA83EE9B37FC9C3EFFB34C676AC +:1066A000C07EEE5D7DFB39944BFA8B765726B4594C +:1066B0000DF0D183E073D6DA45EDCF2E8536D0FECE +:1066C00088D57DF75C687FA44E748146C42EEFB3F5 +:1066D00010BED7BC683F2CC27CB21F850D3181B182 +:1066E000D31EA14BCF606C4A87FC65F11D82DFE1B0 +:1066F000F85708DF25886FD78DF17DC767D3B7EDD1 +:1067000044B9E3717A11BFFF8DFFBF2CFEC7CA8762 +:106710008E03CFED217D0F660B65261BE8FE02C6BA +:10672000D9932276EC003834145E7C270DEAD7E248 +:1067300045A2826CABBB00EB91D98CE6F1648A4830 +:10674000FA97B58A7588A48FFDE64DE4CBE7278AD2 +:10675000CC2670B9E8BF85F43EA660BFFFCBD2B1AE +:10676000159E4B0863989FFA70EC8E25D0F3EE28A7 +:106770004D70019F8EF72FB5AB9150E66805B8BEFE +:106780009202512980B6F1D9EA521CD75224AA05A7 +:10679000D0FE649148EB9FE46686DEA775A7413D75 +:1067A000D2A0A7C89A0FCEA29E53DFFC1E437D4FF6 +:1067B0002F767A33E17943D189E5D84F8332398610 +:1067C000A35D8B9A01784F34E8BCC1A9D9B11FDD14 +:1067D00009760691BDA7BB0CE56CD22C86FD36C6AA +:1067E0004B051D304FEBB32BDCD84F933A3311BF21 +:1067F00033E1DA14BFD59EEE0CAA3BC5828E6C6ADB +:10680000672F877292BF4D43FDE1A4F3489E13BEEC +:10681000DF09DF8E87FFECAAAB7B32D4811AFB51F4 +:10682000CEC6658B176CB0B9E28A64E60FA26B5BCB +:10683000863CA4AF320441D07B8043240B7A0FF511 +:10684000678B41DF043D0074A8D94887BFA97D81CB +:10685000F522C1B53DE1FE1CF8C15A6C08CFD70145 +:1068600020BA9CC3E9E4A79BF25F2806BDE54C6A09 +:10687000DB549C6FAC2A33B4E32C05EC04E239B250 +:10688000C9D2B1040019897380F7DB97891D3AD406 +:106890009B85AEA404E8B7296D2F43FDA1A940EC68 +:1068A000B0C0F3734DBFD4D05E389023D33E6BAEEF +:1068B0005A1ECD4618D72C5307405F0352DE5FE1C6 +:1068C00079BD3848EE3E595D9280FAF0D5B27B042E +:1068D0003FF0B33327DC75AFC338173F8F663AF10B +:1068E000277777318C938AF215EAA939F7E595E68F +:1068F00020BAED5E94AF179B6E21FD3AA13A946FDA +:106900002530EDEDD9B0BE73B2BB6E0EB43F27B2E9 +:106910009E3AF83EC1D06B1286EB352C69368D431A +:10692000BF8B9FF73ADC86DD847A2B897A20D58469 +:1069300014F902EACFE17A4F82A15787CF23E47B93 +:10694000D00713CAC6698EA0F18144FCA4477BF826 +:10695000F883ED8CF7A00D68343F94CD89C3DF9B9D +:10696000F35F5BE5BE86709DFED32201E1B98671BF +:10697000FD53CD56B67D0DD67F1EE871878B2F1344 +:10698000E5C724633D93C2FA395713B7ED87087FF3 +:10699000802F8ED9DC7CD58AFBF31A7CCF62F8BAC3 +:1069A00083E505FE9CB369FAF4F33CF34923CA0B73 +:1069B00006F2221AF49B270DBE41DB3291A64EFB54 +:1069C00033A15A3CF543D48BF2EDD42EA11AF63FF5 +:1069D000743AA926207838DCCB70BD938CF69E865D +:1069E00050B9905EC3F471D3B00C7D3E12FCED261D +:1069F000DC040E373D68BD5F54683795C0CB666BCD +:106A00005711D255F35459D161BCE6CC9B1DB88FB8 +:106A1000D3816F59A09EEECCA73A738B2C937F4EF7 +:106A2000F66C9331C6EE8213643F371525A659A044 +:106A3000DF93C522F93B44D5755A45F86530B2431A +:106A40004CBAB717C91784A8203EAECAE1F632CDBA +:106A5000DB6EAC7FE7D49B494F6E027B19FB1F6D49 +:106A60009F99FD86F7D750A1CD2921FF8BEBF41D0F +:106A7000889FBB45B513FA3951F88905E5C4816C87 +:106A8000F130F25F5F65BE03F7715E099FFF9E6C98 +:106A9000D1B0B374922B3E95BFFF6E85968FFDEDFE +:106AA000719B72A7CD8ECFC13E2A40789AFE98B3D3 +:106AB0005BBEB97432F209B0D7905CEAE39F237BE6 +:106AC000A8116D76A0A7C62E89F86A6357CE9904DF +:106AD0007CCE0A2401E5CB5DB393CBA632F6DEDD96 +:106AE000B2A6019EEB15CE7FDF93DDA28EFCAA40FD +:106AF0003C8CF2E7AF72FA49CEC567B3C328A71A38 +:106B00004B6269DE8D302F1CE7700A3B8CFC6A48B3 +:106B10003EF6D03A5A0B625F43FFC7B522AE151D51 +:106B20009779FB86484672ADEEA547F45B619CA35E +:106B300079F67EB02899A5A58FE49029076D6C069B +:106B4000C9A36B865E148E87DD513A7365233E3A86 +:106B5000EA18AC6341A52A93FD62C8A958836E2642 +:106B600035A509C530EE9A240B5B02FD94B4697912 +:106B7000E4AF29E0F2C00E7F107F6B7C20A6A1BF9E +:106B80003877A8DCB085C9094B981CA92E09951B3C +:106B90002A73D9DD309F73CEE5640FE3EFB320F99C +:106BA00011BE8E2E63BDA6BC319F5F47CE3422FE40 +:106BB000F758FDA4F700D528966FB0617E3EA1F08E +:106BC000C702BE3F5861D8C13F75D96D4820012921 +:106BD000A6CF3E64EF8EAEF748AC2F88FF3225FE7D +:106BE00006FE479D98C022CB867332EA8B4C566CCA +:106BF0005472BC9FDBC048DE6D8F0CE8167C7E3B78 +:106C0000731D817976E89C5ED36628A26506CA7FEB +:106C1000A3FEA82A5A807ED77802A71741BB9B58AB +:106C20001BD9F54EA6F4B4CD457F10CB42BF01135E +:106C3000235C9DB868A587DEA77C9BA9A88FED7013 +:106C40001F5116C1E3AAD234A2D723BA74276EFB10 +:106C5000F10C6601EB9976CBE0BE223FC515C91554 +:106C60003D921D6B96C5D5E90717CE1AAA5F58ED60 +:106C700028EA18013FDFA8CC7F11F72DCB6A233B10 +:106C80001CE4A2B203FD7842608200FCFE62EF3B8E +:106C9000CFDA27A25CF69D63242FDE7CF63494695C +:106CA00099F98E45502E79A5E4D985C827DC20991D +:106CB0006E43B0FEC7B39A84EF45AADF76E9A9CD4B +:106CC0003A9AB06BDC3FA77124978AF4965627BA9C +:106CD00071FF5A64971A1BB48EBDA5C494A1BDF66A +:106CE00006B61F43BB77B0DD77D64E257E7819FDFB +:106CF00087E88F2E7BF3DF106F978FD9544118E20E +:106D00009F6B8C7D96B7F1DE28E42F7DA8F70BD81A +:106D10007EE35BF7A17E0BFAB7A092BF5344FC5C05 +:106D2000064CA15E3F5DF6139E5904533AA1CE5E18 +:106D3000EE22FCA16185EF99B77FD123A84F6A7637 +:106D4000F24733904383FB2EC8DF698E7F791FF7AC +:106D5000779E37E6DBE772931FBC8F4D76213F0BA2 +:106D6000DF1F67B7DCA4A1BE75604B940BF5C86943 +:106D7000FFFCD922F48B54C3781617FAB73EFCE116 +:106D8000D348A7676DE40F2BEA2C8D8A86F7575BF3 +:106D90002CBC93B0F90CE34F617EAEBE42B51BE74D +:106DA000437E2E81F8B8583A06BF770AE81988DF83 +:106DB00062BB5347BFCF8DFC573BB2B8DE1D3E9F31 +:106DC000BB0CFC32294078B0881C0FCFFCB527A63D +:106DD00094FC462E852B0F1AF12FB39F703A791829 +:106DE000FBC9C5EFB444FC6E0CED6E2ACD1D4E2FD1 +:106DF000A67FFC8AE11FBFA29C20FA3ABF8FD3175F +:106E0000D0CB09F2EBBD00723D6D38BD5CB1727A3A +:106E1000D1CB60EC9B907EFA1B119F2C7F6CF412FF +:106E2000706684D04B2630521BFA379DDC9E2BAA0D +:106E30000B8D7384D3CF9A7DE335A44F05E9276981 +:106E4000F8787DCE86EDE89F36E9C0322340F464C1 +:106E5000F9579B0B3825EBDB974EF46059AA30D4D9 +:106E6000374C3AB1DCE552A2A15D1CD2591AD1C906 +:106E700092D231F843BF2C9D88AA9FF4A96BB09F92 +:106E800011BE60E768C1F85973CCF600C2571145CE +:106E900097250555712E6F8A41DEEC8819BE5E512B +:106EA00055B6F9B91E4BF29AB905160CEF35C77EE7 +:106EB00042F2482937E451183C87E12B7CFE2F2B06 +:106EC000AC1AF7B1119F625E2E6787F96F4D7B5D3B +:106ED0000890BF5A7FD342F6E9687C3D50DBB36F20 +:106EE000A115DABF745B34EAC59775A1C33A1DE3F7 +:106EF0006F47C96E1A6AA7EC5F18249FB3F4773402 +:106F0000D403FFB144A5F1B274C1DF3E0DCB6E0DC9 +:106F1000240A7B76A5F64869EE7F7D382FFE6BED5F +:106F2000095CA70917E00724A79CBD20A732187B9E +:106F3000B058FB1EDFFF409F9128475F7F1FE1365F +:106F40002A9DB21485F42966DA3F7C9C2F2BAFA5CD +:106F50003079DD30BABCFE1F38BFCC5736B4A39FA2 +:106F6000ED9A8FC7E3742BDF4FE1EDEB0D7DED5212 +:106F7000A5E785D2203BFBBE18B0AF603D01AB5FFB +:106F8000B89E5E7613F3D7E1FB648D29FA5CA4B357 +:106F90003886FEADFB367339F4A7EA695645D2D17F +:106FA000CE3BFED2FD8A6704F83C5DE1793B185F79 +:106FB000D67845C676C72BDDEFE0F3FAA80819F7B7 +:106FC000C17395DA2FBE0CDE86E0D3F4E225D82714 +:106FD0008DB56D54C294FCA88C4B4E781EC4AFE4A2 +:106FE00078781FC4CF46C3FBFE0AAD17E1FCDA4434 +:106FF000CF036E98E7995FF4933D75655FDC61D4CC +:1070000027AF1CBBBAFC36B46B7C713168473E516C +:1070100026D27797BB96931F504F91C86FF84CD7E5 +:1070200016A514D655B0D6F37F82F166DBFFA0A279 +:1070300039FF74FA0439FAEFD82FC8C1245CB4457B +:10704000006E9D3EBA7C3C5436281FBF40388FA14D +:107050009D54761D393A186736E5E8B1B1C9D1BEFD +:10706000E17294F4AEBF981C3D365E7FF83A72F43C +:10707000CA0DE4E895636396A3AEB23F83BE65EAAA +:10708000D3A3E95BA0A7DF8E789BE6641AC2799A46 +:10709000D3DE519F36BA1E7EA46C500FCF2FBB8E0D +:1070A000BE1ED46E49D97F017D3D53AF8C423979E4 +:1070B000799F45443A2D6A0FA51BD3DFD1D7CFC79F +:1070C000E98571F411C6B962652F08D137D6BFC3FF +:1070D000E9309C2E805EBE8370158EFDFC8FC2B49D +:1070E000FFD6B76EA407F4393CA9E88FE9B3B2A282 +:1070F000AE11F6C3D1F58B0FE2FEFBB854257E1618 +:10710000CE6F415FEA30E89DE233A69D0BFAC5D110 +:10711000B2FF0FF428B31498EFAED9F05D8299173F +:10712000C4DCDD1DB0AED44B4E8AD72724FDA65B50 +:10713000257BD6DE8FF1ED84177E5BD79D43B2C8E9 +:10714000CBA07EA6EC1EAA7FA2D9BD68C70EF7DB36 +:1071500007BA5580DF36C19D97877A8AC07A3A157B +:10716000CC9BB9A77B3DD47F5F1DADD077C3FCF727 +:10717000A1FE78561D14B733FCA9C17E7C0253E2F0 +:1071800090BF1FE64DE32922A379DB33C2E63546E3 +:10719000FF3E761B6FF63B19FDFD1F7178C0F3E5CE +:1071A0004923F8FD8D79C2AB53384FC75AC30E46F9 +:1071B0000A0CF6F727C9217183C17507C7058490AA +:1071C000B801F53FFDA703140FB8655FE8BC2701C0 +:1071D000BFC77D30490AF5E38D5BCBE5F984B5A2E5 +:1071E000B10FA0AF44CA6F20B8BD17E1DD867CB8EF +:1071F0001EE07404C69E7230341E3CA4F7D5D1F74D +:107200005907E590F7261DF5972946FF6E01F7D936 +:107210007F7E1E4519F1BFF24AEB056BD448791306 +:107220007C1EC3E3EB7A08BDE74DF9FDC92F601C56 +:107230006B0A8F4F4249FE424711EBC078ADA32045 +:10724000B00EEBE3526415E976B1C549EF9B556882 +:107250004F9B51BB7B46505CA9F98D00C5B312937F +:107260002D4C47DC554B9467A6C01FC4BF9907D768 +:10727000B88C7F6F2FD4F2B0BD7D8E4DD1301F26DC +:107280005B0AC94B4B0CCB4B8B672D1F239DC6B3A1 +:10729000A076F05CC6B9009FB86DAD91B73693E5A6 +:1072A0007CC53862DE5A840F26BB817D3073FFAC0B +:1072B0003D2B5598F2DFDFF34B2C671F7E30EE7EBF +:1072C000153BE920FCCEE9DC730FAFFB3311CFAFE8 +:1072D000D5CD988071B5A3753C6FD462CCCBEC3F13 +:1072E000B382D3FFD175DADD38CE6B75179251AF0B +:1072F0007EB26E64BE1D5DC1E9B590694524EF9D07 +:10730000A282718DFA14C9C87F5405F47317A8338B +:10731000B68E43BCB16866A1FDA80AB1506E5F018C +:10732000FA01D49A321E7C1FC158B042EF4175E178 +:107330004C791ACDA321F3A41407DFBDDAC248CEDD +:10734000DBEED525D1895BD27D3F8DC7445727948D +:107350000FFCB33D300EF94C181F7E6CED649A9F04 +:10736000E0EBA3BCD683E338BF9EA6F0BC806905E2 +:10737000AA500F034658791CA3DD2D76605CB6DD5C +:10738000BD9BF419B90A5812C887ECE40CCA7360A3 +:10739000CD762513DE1FB7FAD7627DF76607C57174 +:1073A0007747BA9766427F7BA648948FE9AA88E11F +:1073B0007669A1EC6751C3E16696D3E4FE6405D615 +:1073C0007368F5E7672AE287F21840104C5E86F290 +:1073D000C0CBF5AA7A434E810AAEC933D957B6FF5E +:1073E000AE962D781BC88CBDB7FA8348B40B0EC47B +:1073F000484403EDCC958C7CCE277892391F0D2420 +:10740000E3FE3DF9F0A713316E723C465D8974735B +:107410007E6A607F05EA7DED6C861DF13171611138 +:10742000C2F17C018BC17EF6AFE5F6556601D3460D +:10743000B2A70F949B7E463519E9B111F7207C7FE6 +:10744000348B75D4011C8FD61CF563DCE710C82F74 +:10745000F47FEF15DCE7C8FE689519F9F159BF63B1 +:107460002DBC976B4486F1BC03ADE5FA5A78DF7901 +:10747000D949BC38C257AE97737E4FF1E9CE048F1D +:10748000BF12EA3BD232BCB8DFCF9495EA98C76806 +:10749000E6E1B5D72CA778DA8E29F74D2841FF8E83 +:1074A000914FBDA7BD5CAB827EF7E4D9BD380F39E3 +:1074B0002B9C8FBA499F907D722CEA1B9D911EFFD9 +:1074C0002D380F41EDD9AA20E979FC282F8F564F8E +:1074D00057909FCAC3F28442E5A5D5808BD4CAE3F6 +:1074E000F89215EC8178AC33A2C77038EE423F8336 +:1074F0002D681FCE09E5A397ADEE0938EF0F2F8B4E +:107500000F4AC0273AADEE0358FFE5E5DF6D597825 +:107510001B6D0D1DFBEF6C6164174AEDE6B89AA276 +:107520008C80B71B8DA732573EC203FA637FC9FE1A +:107530002EB7CAE4B7B9517F267CA15F51F80AFD86 +:107540009AEDC2FB0DFFEE2FD57EB4757E68EC3F41 +:10755000FACD46738C1979A25CDF928D571195E5AF +:1075600044AFA6BEE5133A74CC83D5D3242FEA7B6F +:107570001149E1F4CEFBA3EF79DE01F159B37FB9F4 +:10758000EC69FFAD39FC39EA5926BD0FEA5959A11A +:107590007AD6B1726150BF511287FAF52D2B67B8B8 +:1075A000BF3175226EA47D63E85BD43E6DE8FD902B +:1075B000BE5544FEA9707D6BAD93CBD3B512D7BB3E +:1075C0004CF8E519F26B7EC510DC46D2B776DF4089 +:1075D000DF9A6DD057B8BEB51DD78E709DC23A3AAE +:1075E00069DF77E891F1347F2FD91D50C738E078F3 +:1075F000C636A39DBC5BF0D67D8DEBDDFD9DAE2137 +:10760000BC45B3C11FE58F384DBCAA2C03EDE4EF98 +:10761000DE31ED30FA539C23E49FE27A62063F5755 +:10762000BA311F4531F351B242F5F4F1DF8F102624 +:1076300007E9E18E0CA51BF344A20C7B8149828EE5 +:10764000A15EF9A66C1A2F7DDE5B2C3F9EECA27E1C +:107650007C1FB32A74FD4AF5E7FEF1A82782FD31AD +:107660009EE8CCAFDF8BF0C8B3D3FAA2B5503C395B +:10767000C3E8B9B43C86D389E475A3BCDA9EC9F5E6 +:1076800085F0BCC0BD02D74F9EB4EA94EFF6645AB1 +:10769000AC80FE3F133F4F9573FC3E19C3F735D2C4 +:1076A0008D1E04A7C1FDB5D63A4897F6A03C01D37C +:1076B0008FD68A7E34E8B7B5F014F94F7657CA747E +:1076C0005E63BADCC6F0FC05BB5BEC40397522E6B4 +:1076D0003EB109E7516339827A6BD1A3BDCF615EB8 +:1076E000D5D5401A4A6F76FCA5AFD59543FD0F79E5 +:1076F00059DCAF5B208FE80F31C7DFB36232F9434B +:10770000761BFE90F6EA13E4FF68AF8CA0FEC2F988 +:107710006B6CA57C01FD12E1FDFE8BB1EF2207042D +:10772000A6CD02FD6A59683E7EAEC3D3560EEFDB8E +:1077300073DC4BE7C278912D7CB3470E48D43E539F +:107740002F70A05E50B46C667470DEFEB0F1072C32 +:10775000D4DEACBB2B541A3756B999F4C1D8019971 +:10776000DE7F2741A2FDE15B29D3BA7C916E37DA37 +:1077700081BE472DAE2344BC7CFFEC5D7A33C17DD6 +:10778000508F58AB123E0FAC7C2A19FBB3A556267E +:10779000A39D955AAED07319F83C3211D963A7EF67 +:1077A0008FCEE1726EB81CE6F9AAC4C750AFDBC534 +:1077B000F3210FB940814E1B4E67276B2E925CDE82 +:1077C000015A814D19FE3EBCFEA4D5AF0760FC27CF +:1077D00005E66D5386D3F7EAACA07C28F8AF49D212 +:1077E000EDC8EF814EC9CFB1B1FCE75BEA32F0FCE6 +:1077F000C51A3A6FB5B786FB711B568AE6F922CADD +:10780000FB297AF49E57D1CEBDBA821BD7E1781DF1 +:10781000CA07FAEBA5E8F736F3814C3A30E10AF8EB +:107820007F9BE3BF8798CC9F0BEF991E3BF90FCF4F +:10783000578AB49EF76B8E66205FB99AE5D050796F +:10784000AF38F8B884EF37205F0116604DBBB00E3B +:10785000E15EE0B3A9A4DC879D8732C735D7132B3F +:10786000752DC6FD98088C07FD8091456208DCCF18 +:1078700055723C5FFD91D081FDD5BDF4EB6DA477D1 +:107880001AF94615CC234F4823BE730AF55DDB6D0C +:107890003605F9E5EDFDA17EC03B0642FD7E792C63 +:1078A0002EA4BEC07E5348FB454A7A58FEF5D74306 +:1078B000DE2F556785D413B3BE112A87BFE4B9A95B +:1078C000C422AF8C727DB5C749FC3BFC1C5562518C +:1078D0009784F232B222F43C55F15AEE1F2874CD4F +:1078E00010715FFDB44DA07D540676375874ACC15D +:1078F000EAE94E42BBA445608FB3E1F65E215377BF +:107900004D477DA0C9A2E079ACB1DB7FFD0BD0CDA6 +:10791000AFE9756407CE6B7BE724D68BD18E837D70 +:107920005DD294573413FA999F01F4ABE2FC36BB55 +:10793000AD504F570511E9F90C26DE43BB9E81C9B6 +:10794000DBA2555AA624019DCC37E8E42EF67B290C +:107950001AD67DF7EF351965EAD1759EA915D0BE07 +:10796000F4F7CA29AC03F191FE1064F7D23E8CFE05 +:10797000E007CFE9B83ED57500E5F52A319261DE22 +:10798000CE5110174847F5CDF68E0680CBDB917DA2 +:10799000273CF03C22D9C26C23E4A585DB7D8F19FE +:1079A0007C6C34FB2FDC3F321BD747F2E92FEBAF67 +:1079B000191CD7193FA67CF8EF09BA83EC48A58DAE +:1079C000E79931D686E79A800B52BDDE6BF85D5998 +:1079D0000FD5C7635E561ADAB73AD51D05AC676B8B +:1079E00032C543298E1009759DEACC6F89E576B0C2 +:1079F00044C2B183E685CF338CE7D3402266AC78AE +:107A0000207AA4F8AC59961AF9D0837585EB85F9DC +:107A1000FFFCC63FA27DF8FAE69B66DAD4A1FE5FC2 +:107A20007FF1E51401DE9F9DF6F3A942F6D03A4DB1 +:107A3000BF41A3C2FD068DCA73E457682800F51143 +:107A400008B8A1CBC7F3F02A999209EB5D25AB25C5 +:107A5000585FB5C34EE7781BE345D22B22363B284F +:107A60004F92B1ADA65F6E1FD2D96483CECC79346C +:107A70005AB5A436A09BB763FAC4E2203A33E7D3E1 +:107A8000FDD2FD24279A5244F25F35A5CCBC6E5E30 +:107A9000B80DF9665C30FEF838B60C2FF17F1BF29A +:107AA000EB38E4FFD576B4D78B26DEA8BF50793209 +:107AB000D89F7B0B23396DC893FB533D144F3FDF99 +:107AC00029D0F987F38F7E6B1AEEBBF39D1F37B277 +:107AD000C8A1EF7FF9D8E3A9385EA67F2012C7BFFF +:107AE000F2283F4778F9C41FAD6A50BB3552BF1525 +:107AF000E30BF73DFAB88CF1DA25C73EB606A0FED7 +:107B000001C67928FFB98DE8DB9CCF9A839B176368 +:107B10003F551D75DBF8798DA22877E4F0F5E43543 +:107B20002E8A42FFC7A5062B9D530CF8665D77FD94 +:107B3000BDB53CAE74332B881A89FE2EB4F17EEAB3 +:107B4000F57BA8DF408A3B0AE571E01D0BDB0AF4F8 +:107B50007601E3E3C0530291DC0F11A8B3F9315F62 +:107B6000D8D3263C85F47111FAD7613DAF56580839 +:107B7000DF0B7481F25A3D6D7932C2C3D3B0544EDB +:107B8000E6EDBB1CB0DA770CF95BD694477029D3CD +:107B9000D388BF7914E6BF2387DA75D40937EEA7F7 +:107BA000AC05BECFC6EF67503E00C093FA2D6DB254 +:107BB000849CB7C964EFDB475A77DECA1FD9B1FF8F +:107BC0009D450B1D94C79C5322EAA80F678BA467A1 +:107BD0008D064F334E37DAFBBD85BCBF7AF72FECED +:107BE000886F5F4ACF69B45F7C063CCD763E039ECA +:107BF000BE6532C1333E87113CB17F1DFAFF18E1EB +:107C000009EB59E0D6049C677C4E174338FCA182EF +:107C1000F3E771D99AE08175C517A802C221DE8009 +:107C20001FF4C3E1E7EE6238FEB81C4DA073375075 +:107C3000F74039AED025F0FC010E2F8C2306C38B04 +:107C400065EB6C0EE89F56FE084AA90FE57313EE2C +:107C50004961685F4F93DD242F4CFA6D5FBD7AE573 +:107C6000DA91FC85467B2BF31AF110DEBEC1DA45B2 +:107C7000F57372DBD44898F7B94491A1BF6DBB3559 +:107C8000407E51F84AA1F87E98FFD4F40FDF5BE103 +:107C90008EAD44BEF4B2E247BE63C6AD06E36E29C4 +:107CA00032E5D59A71B7C1F5A4703B64901FC4CB7F +:107CB00061713637F16933BE36D6EFBE729EF21867 +:107CC000E5170082E0B22689CBA90C3C6181767071 +:107CD0001653EAE662BD8BFCB289658C35037C02E3 +:107CE0008226623C4F7F385A41FF099334711F7ED0 +:107CF0003F673CF9FF4C3CA4E877892FC077F9BF78 +:107D00008D540590D3D36A662C46FFF050FE928BBB +:107D1000F8DB68F2EB626DD241CC330BD4661DC444 +:107D2000BCB441F905FB57980E654BF754DCDF37BF +:107D3000926FBD867CEB7D715E2AC9B55D5CAE99A4 +:107D4000ED4F6FF906F1A7DE96596F219D9FD9601F +:107D500071212D94B0FE8BE83CA8AAFCDAB71B6019 +:107D6000FEDFC2C36AA01F157F98F36D3D05F8576B +:107D70005D9D887A21FB91AC8AB7A15DDCB188E278 +:107D80009C9F46A968EFBF17D1BFD11D344E552522 +:107D9000B747AB2A45A3E4FC2A8B7917D13D150BD5 +:107DA000196B01F8AEB23151837E571D9548CE5EF6 +:107DB000A8AADB9A789D717AAB3637E2FB8E25361E +:107DC0009A5F6FEBCF73112EBD567F6E4C36E587F1 +:107DD000A752FB071C745FC02A50FEA2A07DB1F31E +:107DE000E623D87F7EC38CD48BC4E7781C6D95C501 +:107DF000952463FBED16867E9CDED6F16FE1F76776 +:107E00003659B93BCCD396BB0CF67BB5B11E98AFB7 +:107E100046ED2B22B9DFC7787F26559195EC217A64 +:107E2000B034CCD8867CA334DB3B5109D22B3A2426 +:107E3000D02BE0FBD60CAE57B46670BD42CA833D72 +:107E400003F4283DFB239E6FB114786E0C9E73548F +:107E5000EFA7738EC6FD20AD395CAFE8F0DAC2F44F +:107E60008A9E7DA8871FA90BD52B5AAD6D5CAFC824 +:107E7000ECCB2FC1EF7C22E3F62D9FCF71D03B706E +:107E80007E0D915A12C6011A19E70B8F56BA7D95CD +:107E9000C89F1499E21C5B2A8CB8627C2CED33B32A +:107EA000BCD17E6BB6F2BCE3D1F89090D1F73CEA3E +:107EB00043072DFCBE09339E360DD802AEA759B03C +:107EC000139C1EADF47C1FE7D3BCFAEF8B701DC36F +:107ED000F8A311374B91BA48CF1461FFE27E36E325 +:107EE000EFE1F3F2F81D240F991EC97A43E2D9FCA1 +:107EF000FDD5B2743AFFC6ECCE2CE45F71C67CCFE0 +:107F00007C36AB0EF7D9EF3F8B66F52E3C47E2256A +:107F1000661567C487D1DFC0FD0F2AF975E28CFCB6 +:107F2000ACB897B7917FE1DC83CC85FCC16CCF8C7A +:107F3000F63AF3EA81781A67F0FC70701CE1EC7C89 +:107F4000571DE62D34A449DEADAE90EF059227868D +:107F5000FF94E6290CEF7FAA6117C0AB3C2E7FAEE1 +:107F6000EFDFB0A9617EE22CCEC7E399F90BF2B343 +:107F70005950FE6874DEE65CBEDD558773718F2252 +:107F80000F0C3962F613AF84C90377B8BF8CE323B3 +:107F90001B0508F45F5A23503CC9BE327731D247E3 +:107FA0005FB3A022BF3B7FE05619FDA6F94DDC9ED2 +:107FB0002DD7051E27D6D9AFD09FB0D1C05FF98786 +:107FC0003DDBD05F57926401930FFAFB2DE8AB5075 +:107FD000DF5413E9D2A0C905E6A7C9E92D02F9FBD0 +:107FE0008A1B734FAD87F76B6EB3517E44BDB13FB3 +:107FF000E4AA34DA0F8122EBA6227C6639BB18BFD3 +:108000002B9DC526A35F63703D3FE276BD047FE8EC +:10801000BC911E6AC76F6A0AAD9786C597AD55A118 +:10802000F6BB52C542EE57C075C5C5FEE9E3302721 +:10803000DFCF53A51E71A4B88E8907338EDE9E6BE9 +:10804000C6E17B34D457E2E6D80C79A845E506C5ED +:10805000E58FCBAE3AF4BFB4E7D9FB317E96BAE2F6 +:108060005774BEEB94C749792B669CBE08FEE0BCF2 +:108070002B0F86CE332ECCAF11195637F9C5D7AAA0 +:1080800042CF639DAB9E4579DD265F085FCFCBA0D5 +:108090001FA29CFD69AD9D4A7FAD42E589DA242A85 +:1080A0005FA95519CAE353B559549EAE75D1F3D79C +:1080B0006AE750595EFD4D8679C6265C54C6E9F3E1 +:1080C0008271BFC4B9865ECA5FB85AC3FD5A752FA4 +:1080D0003D42F7FA5CD82FB86CF419F773790C3875 +:1080E0009534D84E3D04537D0BEC3E61CE5FDE1FD0 +:1080F000F54DF44785E46BA8E45F2AC6737888578A +:10810000839E4CFF5471B585CE5F1787E1A3729FA4 +:1081100075A88EEB0A7B6FEE1F4F185D9BF47723DB +:10812000799260E4D784C7817ED0B9B76407C0AFC5 +:108130006F7FF20CF41F555799711F2FE59B5574F3 +:1081400030EEFFF833E5BB244823E775D45671BD04 +:1081500061F47C9891E352DBFEC43C20B33C93DA9B +:1081600076D76CC0E384372C2E78C22C955D6F6275 +:108170007D7C8FC585F70A98F838077F477A956226 +:10818000EC745E6F2FEB49E27686B71BF50DDF6A64 +:1081900099911DC03A28BE7F72D97D1350BF391EF8 +:1081A00013A0FC81CEA95A32F281F65621247FA079 +:1081B00013F307008ECF1AF828C5FC01F8CE9AB049 +:1081C000E25B79D06FE7BEF194BFDD17D991BCCCEB +:1081D00039D4CE26324F97E1775C3E15F3C0D5E413 +:1081E0006550FFA1F17ED08E74F0F810FA1D49BEE3 +:1081F00018ED0F98F1B9561BD7D324B50ECF0DF655 +:10820000C664517EDD7355AA012795F2219E687DD3 +:108210002899826F46FE427BA4DB8EF1E4BE568B2A +:1082200082F0E8F5F17B1CF6B430F22B3FB1FFD6BB +:10823000FC29D85F1ECF6790D03D8F42ED1146726A +:10824000A3B7F503A10EEA472F3B291FA13721D081 +:108250008DF0392AA85EF45BEFA9ECABC3FCE73DD7 +:10826000AA44E7C1CF94F5D605E72F8064E9AE4470 +:1082700079A7D9F9F9FC9670FAF1BC9A01ED538B04 +:1082800078BE446B6B5F37D65B05D683F34935EE1A +:10829000B14ABD417E427B2BD7A399FEBB6FFB2524 +:1082A0008AA3931CEB6B11781C7DFF3D64B78C1681 +:1082B000EF3F5FCBCF4598754F4D28BD0EF5FFE1E1 +:1082C0008FB07F82B8995707F3EE64EEEE0CAE1FC5 +:1082D000F6937D85BFD943797EA9ABCC7B01F8733A +:1082E000D26F802E53EDF3F27E0CF3B40B4CC5F835 +:1082F00063EA8A50F898FA8F19A7FED8D8879F208A +:10830000DE791C90F450336F31C127521EA099378B +:1083100077C0883BB21583F7399D32F31D31AE1D0E +:1083200087F405F0FBF72A1E1FFE8F2AAE1FC755E4 +:10833000CA9A03F38241CDC37EC2F5B0D1F434337F +:10834000CEBDB6CA6D59973B74DFC0609CF95E4ED6 +:1083500057AF4D74D7A19DDF2B30EF56BC27C5E139 +:10836000AE43FD19DE6DAE9B41C3501C79107E619A +:10837000F8EF74703AD5DB05BE2F82E136192F076E +:1083800000C5CF42F7DAD03D0713D6A573BF1AF365 +:10839000167183486DC0784EAA4F988D7457E64C7D +:1083A0009363A02C8E17B661B924E5632BF9D92706 +:1083B000EA76F4D774365B5CE8AFE98C0C3CFF1EC0 +:1083C000AEA33992ECB2703AFADA3A6E27EE36EF93 +:1083D0003D44431DD6912930F3E711016E7B8CCAD1 +:1083E000BC753C7E9CE97375E3FD5A17B64F9F81BF +:1083F000D39BBD8ED1F34E07EF277C9C39C3C7A119 +:108400007B7DFA0C7A2CDF1733BF381BFB174CFE31 +:10841000ACB3A078716C81321FD777FB3AC31E9240 +:108420002ECC40FED119C3FBD34465FEB2207FE3BE +:10843000EDC678CCCEDB1D103A560E20FC410FC0A5 +:10844000F36965BE507952BC4FD0C7450DBF0F6868 +:108450008D1E5A5FBA4E30E838546F974CBEC938FB +:108460009E4B1AD28EEC1086EA09852AD53719DF81 +:10847000BF36913FEF5DCA3AB6A2FD6BF0D3E17C07 +:108480004325BE90DA24CCC4EFEF37E1235D207B97 +:10849000B504EC1AD413DAC7A52E1EA706F16FC6D1 +:1084A000E3B0B45FD2E85E2307F2E752E37B134EFA +:1084B000C7EF9E4CFEBE9305331DE89F58FDED347B +:1084C000BAAF221C0E37B25BC2F388630B43E3B032 +:1084D0005EA48F04BEBEE03C019F915FE04B133170 +:1084E00052C17C463E81991F70E8DD05C74C38A219 +:1084F000FD6233729DF756F1BC8243397B294F6090 +:108500003BD8F53C6FC04F79046CB6ACF2BC814FE0 +:10851000E9FC926F9F85EE8330D76DCB31EE9548A5 +:1085200019764F05E509D80CBA6C2E9A4CF3D86E23 +:10853000DCEBB8D75DE218295E3B5A7F6DEBB8DC07 +:108540006CD86FDEEFE7A5FCB8BDAB783F99FA8732 +:1085500094C7D08EF700C27845F75EA4739457CFC6 +:10856000F228C450DCB983DA9FDDB2BEF9E6F8A187 +:1085700078B339BE15E30441FEA95C87E7C97530BD +:10858000EEDE7837C51DAC182740E637467DAF3B99 +:10859000F709BA1F67EFBD22E509EFCDFD16D9F740 +:1085A00047278A24878FCEDDDC837AC4A709924BC4 +:1085B00057E9FCCA4E8C4FA6E758691DCCB81FD1AD +:1085C000B4370B5BFC163CCFCD0A99E13FD06D78F8 +:1085D0003F1D94B29844A515CB4297A0C7A13E93E6 +:1085E00052F99425486FB5DDFB8B05F4FD52FE7DF5 +:1085F000E4804EF2C3C134435F0A50FEE5384522A1 +:10860000F9D9BEA2A4793AB4B72E9B49F79DBC997B +:10861000CBCF2382FE13E309E24F49EBF97EF4C985 +:108620005ECAB73DD42E131DDA1EFBF40CC6A9D9C1 +:10863000F2081AAFB3FD6F9382CFF755AD97094E8D +:108640009DABF9BE3D27B2CAAE90F736EE7F33FA46 +:10865000BFAB8AEFF7492D3CDE9B5EEDA1FB2F7C83 +:108660002B24CACBD35BC40ECC83F5AD58B1EC1E22 +:10867000DC0F398B2441A5FCC5A5A4AFAD1009942E +:108680009DEE3716623EC73597108FF469CEDB97A3 +:10869000BA58427FCD3939303507D6B7697D66C8BB +:1086A0003E4FAC1143EF67B2699B0939B58CEE4D73 +:1086B0005958C3EBE9A05422BED3572CA47AA24F39 +:1086C000660EB4FB8BDA748C0BDB333CB3109E2745 +:1086D0006364F22FA51771FAF061C7B80EB793E47F +:1086E00065BA6F711BE6EFA6BF6B610E15FDE52E37 +:1086F000BA97A9017810D24B67CCBBAB783E26580D +:1087000092C4E702EBB17ED71F2708B8DFA5F53C7E +:10871000CFD8A18A21F74CD9D1EF0FF8EE6E9DFD8D +:108720006BD4D33A736D64D7CDD3DC549F572403F5 +:1087300080815EE7BE63C1FE3EBD067BF03AF190EC +:10874000D1E8D057C4E85C673BEB5981F8D00744C7 +:10875000929FF3FA7B880EE30AD4990807DF62F749 +:10876000043C27B6DFC0737BFCA57A3C07A7E70073 +:108770009DE23ADBEFA33C665FA2948BEDBF73AF43 +:10878000A803E6D8A1D6FB3A919FFCCF75128F576C +:1087900063BE33D2DFBD12CFD389774D5816E43F85 +:1087A0003BDABE780AEE63A06343AFF33CEFCF60E1 +:1087B0006CFE7F44F07CDF2A46FCE9A8C3F56BCC55 +:1087C000CFD573B91FF6955699E1FD587272D951FC +:1087D0001BD9C3F7FBDFC0715A39DE26D47CDA809F +:1087E000F4F496C0FAD1FEC5802FF79B7B1CFC3EAB +:1087F00015EE575866F0C3E3727F03D2E321C3AF8F +:10880000B0B725F6671867DF9B04DC0838D65F2D04 +:108810000CF52380DD22A03D9B6ED8B3B7F74B212A +:10882000762A73BAB6E2BAEFCA9F43F973E9617662 +:10883000EB84B0FA9CF586FDFAD5EF0DBB637DEEB7 +:1088400090DFE0508E8DF2A0F6D67CD2CCF363455B +:1088500092979DBE9257B3709F413D98CF86976F78 +:10886000197A78A76F39F93D5425D080FCABB39ABB +:10887000DF8FB4D7F7C92B583F54C9F3EDB75BDD91 +:1088800013509F8FDF378EF96761FF5B8A9035B891 +:10889000DDA28EE799DD5AB110CC67DEA9E5F9A912 +:1088A000475B78FFA3CDC3ECEF500D6FE773CF8C20 +:1088B0001CE93CF2BB467F83ED306F227B38BF0B57 +:1088C000EFD7AC9F36F4529FBB84FADF9BB3C8A1AD +:1088D000660FC99579853DF5686ECCCF01A9250E47 +:1088E000972B837CE7BB06DF69E1F549B06F913ECA +:1088F00027B997C7203D64AE90145499EDBE36CD8C +:1089000011C477F6467AF6637EFAA1654EDA277BC4 +:10891000AD5A15E5B32D9B2020FF3B19F3B764FF3B +:108920004E4A4914285EBF9EEB81D03FE7573EB1C7 +:10893000C381FCA59DE72B5D037E85F84ECFF62411 +:10894000E719F203F1140EB7D1F8D03CAD87F8184F +:10895000F11DE8B77B6539CDCFE44B9D2B65BE3F5C +:1089600073AD34CED1B917D6E33C3EFD6304C9994B +:10897000DB594FFD287EBFEBF225930F247DE47970 +:108980009EEE5534E0FF9D84DB26A8D0DFD1C8FEE3 +:1089900095C171A141FFC418E57F21E3FE9EF0F36C +:1089A0002C3F30E069ADD4BE8FFBE89F30612C17BF +:1089B000CF89B7D9918E9A3396DB912EA667EEB602 +:1089C000235D3477ED2EC07BC686CE857F62C138AD +:1089D0008C2D7326DDBB77749DE79FB09F413D2AA8 +:1089E000730B9D0F2F646D3AFA99315317EFD56DC4 +:1089F000CA78D08E76952343A37CA5ED993C5FE998 +:108A00007D633EAF4D6CA3384AB3A147677AEC74DF +:108A1000FEB73925E930EA03778A87331E47FBC85A +:108A200068FF7EC6F5F3EE9C46FE5B84A15739A530 +:108A30003686787A7FBD4ADF476484E6BFADCEE8EC +:108A40005A883751361B71F13B8DFBB7EEDC16733C +:108A500018F398CC7E7F618C7FA9D2FD0EAEFBCE41 +:108A60004450606662BFCCB47BBC687F1957D1B1FB +:108A70005F5B3DEF633BAD80D3AB2D89E75D5A99DA +:108A8000E6473D6C4E957606DF17321EEFC10BD6DA +:108A9000F0BC70F87A02EBB91EFABD4AEDFC7A28F8 +:108AA000AF18789BA6B4D17E99C644573DEECBB0A3 +:108AB00038D1B0B8CECB8A5682ED8C7875BD37F000 +:108AC000FC4E94DF5F317EBCB34AFB18E7D350E124 +:108AD000BE8AEB6888D9CBC87F3CC6B8F26B13B5A9 +:108AE00024A473534F6C30ECCFE3795A5130FDDB43 +:108AF0003670B8DB3670392D15598D7B1BEE544618 +:108B0000E2AB4F5778E40D41742929FCDE86A80DAD +:108B10001C4F37FAFEDD0A4F54E8F71EE2EB77CA26 +:108B20001C4F02C0AA3E79683FBECABC2D2B913FA4 +:108B300018F455F8FD779C48EF77CA1D196D41FC74 +:108B4000F546F050B3791E50BD2292BFED9C535CA8 +:108B5000417CAE81E76586EF67B344BF77307F43E2 +:108B6000BF77B0BE887EEFE03AFABD83DBA3DF3B80 +:108B7000F83DFABD83DF5FAAF4CC4478A0FF3BF850 +:108B800039FABF83BFDB5FE1CEC1764B26AEA5FBD2 +:108B90006012AAB45CAC7F05393F6F03C0A37CBEF2 +:108BA0009BE8A33181D3C57D2B2F937DD5181F3F23 +:108BB0002358AE9718F401785B148C376B3CC79B35 +:108BC0009ACDEF5FAD2FE2F68D79DFDC68F898671C +:108BD000E40BDC0EFC03CBF903E3A8BC63C041A5A6 +:108BE00036104765DE400C95F9033751B96020997E +:108BF000CA8503E92477170DA451B978E0EB542E08 +:108C000019984265C1C02C6AB774600695770E7CCE +:108C100083CA6F0ECCA5D25AE95E8DEB28DFFF1D0B +:108C200027CE7F67957B0DD69B9897EC25D86FC58F +:108C30001BC88FD2C6D05F56BA81F383E72AB552DC +:108C40007AFEB271FE50043ACAC17C154F15C27348 +:108C5000581C5939F547B47BA7567A36D27776BB7C +:108C60005D0ACE3B8967941FF5DD4A6D13BDFF3366 +:108C7000E7991C4FEB5F8D72E0B2C10F328B1E7310 +:108C80002C87F5351BFBFEF8CDA67EDB1F89FAF499 +:108C9000F955FC9C10F38D7C2FB1252CEF23C2C815 +:108CA000A7B0482E92079601D9BC07B615E173A765 +:108CB000EC7D7719F2FDC91657838A25F0F758E243 +:108CC000D3BB3670BEDF4670B4F2F3F8E7C3E2F40C +:108CD00000E727084EE1E7DF5F56FC0F05F15D80F6 +:108CE000F7F7A81D023CF85C7E0DCFB7FDAA707E99 +:108CF000AED2F0AF19F0180D2EE17037F90AACEFD3 +:108D0000195C9F5FE2F735D4ABCF6BE8C373F4EB2C +:108D10005A34ED6FCFB3F8DE36E0F647D3E8C50935 +:108D200078E002F6F9735F719FBF48743EBF87E435 +:108D30007F6B644F12DED7DC6AE5FBFDB5893D45EC +:108D4000EEA0EFDEDCC0F3FC7EB681CBC3579D5BAB +:108D50005F4197D2BC8C1E0B9673AA3C3FC3F9CDE2 +:108D60004FE95F804B9214B08430DE92D743F20417 +:108D7000F9FE2D519CEF978CB0FF9FAE2879335CA4 +:108D80006EE0394890BB6FFD29F40FFBF257443772 +:108D900063DC0741F8388FE39E562DE4676B00399A +:108DA00040E74A2BDC17B0BFD36AA9C9672F7E45BD +:108DB000F85FE1F07771399CC6F52FAB22EAE3A3A7 +:108DC000F8BD48C523CAC7E24F3604F92790CF62E1 +:108DD000BB11F8CEC048FB2188EF7C4670199DEF8F +:108DE0007CFEA7C15D09C9D3FEB27CE81C3E9A3B5C +:108DF000C487266CE4FED751F95075DC88F2D9821D +:108E00007224C80E1BCE87247A0FF84ED99880C9D9 +:108E1000DCA3F297F48D23F0F111F8CB2D1BFF9C0E +:108E2000FCC558E768EB0D87A78DDD2E1C463D4637 +:108E300095282E17A7EC7AF152DC48ED791E0BBA73 +:108E400062BF20BFE0C8F74765BE527308F37EAE2D +:108E5000E912E56DE9F9DE7FC0BABED5A6A01EFC19 +:108E6000C4B8C70EE139A36AC9AE704FACF756E477 +:108E7000677B0CFB19EAD3A96EED27BE6063ABA339 +:108E800083E30FCB3672FE62CEF346F3FAF70A6D38 +:108E900039C23B4EF630F4EF3E1EC3EF2B579DCA4E +:108EA0004ABCE77D87C2FFDD97B825F731BA5FF38B +:108EB00016EE2F044436A17D25C589FC1C9FA465B0 +:108EC000E13CA4498CDF67CA16FE01CF91A8CC43D0 +:108ED000DFED58C8EF896ACEBAFEFDE68DB5A1F187 +:108EE000C561F4985CD6867EA3B67889ECDC6D49C2 +:108EF000D2528C27D63B79B0518E148DF1F31F429C +:108F00003F95CA0294EF6E997B7DBD697B6DE879D0 +:108F10005C9BDAAF217FB2E25AD19F9B907824F814 +:108F2000FC76DD262ED71B0DBBCB96A253FED78E2B +:108F300029E5B310DDF6142FEB73E23DF63AEB852D +:108F400072474C04F981175956B5A1BDFF78526C90 +:108F50000C9FFF270CE34F7FB789EB812DC67D6AFD +:108F60007B8CFC71A7E2BC80F70EC5D95D8217FD32 +:108F70003785A1F7AB45BADA42EA52B4E9B70FD068 +:108F8000FDCC56CCE386F5EFCAB948E7CB54D6639F +:108F9000D48D7D6FF8D94C7F79385C761A70D95DA5 +:108FA0006B37E88FC7DD6317F2FBF877A682DC83A7 +:108FB000715A6FEFA17BBFA3E2EDAE0268B567AE59 +:108FC0009BB5407D572EF7DB33D6C582F3F277E5AC +:108FD0005EA4F985CFC77AE20AE56B474901BAF783 +:108FE000390AE08379DAEDC63C96CCF3D215C55147 +:108FF000EF5AC88F18B582E327611EEBC07B43840C +:10900000B8CFC85FBC6B259DC56592AD9FE4F3B832 +:10901000397D67F1B2F5F8793F66E8171CCC473225 +:10902000F2CFCC7CA4C415A1FFBE406CD83DD0E3E8 +:10903000C2EE89669655D7F58F559F75FCEC95A0C5 +:10904000FEBA3786FA116FF4FD1F6AED3F7B05E823 +:10905000E0F19CEBD3EFCEDA39B46F1EAFD5084EFA +:10906000BB6A0BA8FC01CAD5A0FCE229867F45AAF1 +:10907000ED67CBA18CF6FF804D067C7EB091D3F3DB +:109080000F6AED4270FB88638CF2E4817B0A740FF7 +:10909000F33146FEDD06E513BACFE5DAC2C9472C47 +:1090A000417E06B31FB3FE9481B70685FBFD9E5A31 +:1090B000C8EF1F7F4AF244C45E673DB7EC0BB50BA7 +:1090C000CDE7E6BE18DC2702D33058BB2786F3C3B2 +:1090D000167F33E5D746BF9B7EC411B45F3F31E4B2 +:1090E0005F1C3262540CE785E61DEE9A0A4B9C7EAB +:1090F000E3FD65F6F7F85C968AED772DE271C3A87B +:10910000F94AF2F2A0F57837F1F11E8FE17AC9CE73 +:10911000892C79B973F8FB36238EDCE66045CF8D58 +:10912000000FEF267E9E61A7919F60E26FE8BD9DD4 +:10913000FAF16E32F8BEAAD5E1BFC311A7D9FBEB95 +:10914000296FF4AC7E2987CE81D3B9EDF0F5D9D85B +:1091500022E6403C6673FF4EF87AC7B1961EC1C83E +:10916000C7F8CC3CAF4EFBE00DFD52FCD079F0715E +:10917000AED0FBD4BFECBEC8D864E4F3399883EF1B +:109180008B42B111E67D6D1EFF77320042E248E767 +:109190007ACCFDC1EEB8FEFE08BF6F21BC8C8A0AF6 +:1091A00078D80CC6BEB1E9A6871AE6119CC9CFB91A +:1091B00070D3CD0FE179C18765EDD64DB9E8E632C0 +:1091C000EE839B238F781F5C5444BFC73DC23C761F +:1091D000C8F9776CE276AF88DF87E3D12C0B0DBA44 +:1091E00008A7F338BC5F7326E259E5FEEC1BD029D3 +:1091F000C08FF8DC3537A37FE7403F2108837A131F +:10920000E565C354CCFBB684A1FBD2C3F1928CDEDE +:10921000658B717E0FF487892C40F5491805A52BC5 +:1092200017552AD3F19C453A9E1BF250FD16A653C2 +:1092300039857550F975E6A7F753D15FC89D8C74D1 +:109240002E78BA9FD3DD0CA652607916D32C8C5C95 +:10925000FD1EAADFCA742AE732CF8B97609EBBE659 +:1092600096CF40B9BC6E18BD8C8D8FFEDD26C6CF63 +:10927000FB25F1B88714F7CC88F7A7BE5BE17968C6 +:1092800053101F8BC8E2FE98D1F0D660C8EF46ABF2 +:10929000DB4DF74E2548749F5063DAC8F72D3D6CBF +:1092A000E86916AB8BF2ACAC86DED2F0BB1FFF18C0 +:1092B000EFC36B766A5EF223C34BD4C74CBDAAE9F9 +:1092C00077C77F5CE7FCCFD74B7F22697B36258C45 +:1092D000F07E8CFEBFA7F0AF7351CFD70E623FE692 +:1092E000F94FBB71FFEDE0BDFE95504F1EBA1F3721 +:1092F000CAC35CF81EF4FE7FE0E373BF6FBD66DC9B +:109300003769D43D1EA3BE2F764C7A3B2BF4AE2496 +:10931000A5C6B0E70E6CF23C47FB4F63AA146CCFB6 +:10932000AD3A45F73EC2FAFF09DF2B37BAEF519D40 +:109330001883F27B701F8D113EBF41B90AFBF8F80C +:10934000637E19F9C306FFAB741E61C3F79FA5F3D3 +:109350007C6B0CBB79BD415FAC2697E79D7BC4134A +:10936000B88E8FBAD28FE03EF9A8CB42FEFD8F1A9D +:10937000D2E8DF6BFDE899AB5C0EC37BCE27EBCC6C +:109380007C37CA27918C75B2424D9B4BF62DBF2F6F +:10939000C494CB1F3D730F97CB5D16432EF33C96C1 +:1093A000A7BA6E5191EED67EB180FD1D7EB7C0EE9C +:1093B000C2F3386B9FF8B7A92541FB2C5C4EE37DC7 +:1093C0008B3FC1F9B864CA0F32E1380C2ECAC8FF0E +:1093D0004E8B39DFCB7BBF4EFA74C30DFE9D16A9B1 +:1093E000CB46E7097E6BDC073AACDF307C87E3F3E2 +:1093F000C026F755C4BBD0C5EFFF1C86DF9A84B1E9 +:109400009D331B63BB16C6F10C13253D3AC63F972F +:10941000F45D8BE6D250CF8A59E862C1FE9D85F794 +:10942000E6CB7F03F38B911401F9448C6AD0876BF0 +:1094300066C83E10FE460CD1BBCCF1CCFAFF05F15C +:1094400090451C7078000000000000000000000043 +:10945000000000400000000000000000000000408C +:1094600000000000000000000000002800000000D4 +:1094700000000000000000100000000000000000DC +:10948000000000400000000000000000000000108C +:1094900000000000000000000000000800000000C4 +:1094A00000000000000000000000000000000000BC +:1094B0000000003D00000000000000000000003C33 +:1094C000000000000000000000000000000000009C +:1094D0000000000000000008000000000000000084 +:1094E0000000000000000000000000000000000C70 +:1094F00000000000000000000000000E000000005E +:109500000000000000000004000000000000000057 +:109510000000001800000000000000000000001C17 +:1095200000000000000000000000001C000000001F +:109530000000000000000013000000000000000018 +:109540000000003E000000000000000000000001DC +:109550000000000000000000000000020000000009 +:1095600000000000000000010000000000000000FA +:10957000000000100000000000000000000000508B +:1095800000000000000000000000000000000000DB +:1095900000000000000000030000000000000000C8 +:1095A000000000AB00000000000000000000000808 +:1095B00000000000000000000000C00000100000DB +:1095C000000000080000C0080010000000000002B9 +:1095D0000000C000001000000000001000009C0807 +:1095E00000040000000000040000C0800010000023 +:1095F000000000040000C08800100000000000020D +:109600000000C0800010000000000010000093382F +:109610000001000400000001000093400000000071 +:109620000000000200009348000000000000000855 +:109630000000934C00000000000000020000935066 +:1096400000000000000000080000969800400000A4 +:109650000000004000009358008000000000004817 +:1096600000009458004000000000000800009468CA +:109670000040000000000018000630100028000024 +:1096800000000028000099500008000000000001C0 +:1096900000009951000800000000000100009952EC +:1096A0000008000000000001000020080010000079 +:1096B0000000001000002000000000000000000872 +:1096C00000009BB80000000000000008000000013E +:1096D0000000000000000000000000020000000088 +:1096E0000000000000000003000000000000000077 +:1096F0000000000400000000000000000000000561 +:109700000000000000000000000000060000000053 +:109710000000000000000007000000000000000042 +:109720000000000800000000000000000000000928 +:1097300000000000000000000000000A000000001F +:10974000000000000000000B00000000000000000E +:109750000000000C000000000000000000000001FC +:1097600000000000000000000000000900000000F0 +:1097700000000000000000020000000000000000E7 +:109780000000C4C000000000000000200000C4E68B +:109790000000000000000001000060000020000048 +:1097A0000000002000007300000800000000000816 +:1097B00000009BF0000000000000000100009B90F2 +:1097C000000000000000000800009B930000000063 +:1097D0000000000100009B9100000000000000015B +:1097E00000009B96000000000000000100009B9715 +:1097F00000000000000000008000000000000000E9 +:1098000000000000800000000000000000000000D8 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000006000012 +:10985000000000000000002000009B9800000000B5 +:109860000000000100009BD800000000000000087C +:1098700000000053000000000000000000009BE01A +:10988000000000000000000200009BE40000000057 +:109890000000000100009BE5000000000000000146 +:1098A00000000009000000000000000000000001AE +:1098B0000000000000000000000000440000000064 +:1098C0000000000000000001000000000000000097 +:1098D00000000050000000000000000000000089AF +:1098E00000000000000000008000000000000000F8 +:1098F0000000000000000000000000000000000068 +:10990000000016C800000000000000080000200849 +:109910000010000000000010000020000000000007 +:1099200000000008000017D000080000000000013F +:10993000000017D10008000000000001000017D24D +:109940000008000000000001000620780038000038 +:1099500000000038000016E00000000000000002D7 +:10996000000016E200000000000000020000A0401D +:109970000000000000000020800000000000000047 +:10998000000000000000E0000020000000000020B7 +:109990000000F3000008000000000008000016F8B6 +:1099A00000000000000000D80000173F0000000089 +:1099B0000000000100001717000000000000000177 +:1099C0008000000000000000000000008000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A100000000000000017780000000000000001B6 +:109A2000000017B80000000000000008000000510E +:109A30000000000000000000000017A0000000006F +:109A400000000004000017A4000000000000000453 +:109A5000000017A80000000000000004000017AC80 +:109A6000000000000000000800001798000000003F +:109A700000000008000017C80000000000000002FD +:109A80000006000000400000000000400000C00090 +:109A900000400000000000400000C02E0040000018 +:109AA000000000010000C0000040000200000001B2 +:109AB0000000C00100400002000000000000E200C1 +:109AC00000200000000000200000E2040002000866 +:109AD00000200002800000000000000000000000E4 +:109AE0000000E20000080020000000040000F50073 +:109AF00000280000000000280000F64000100000D0 +:109B0000000000100000F64A0010000000000001F4 +:109B10000000F6C000200000000000200000F6C099 +:109B200000020020000000020000F30000400000DE +:109B3000000000400000200800100000000000109D +:109B4000000020000000000000000008000011A834 +:109B50000008000000000001000011A9000800003A +:109B600000000001000011AA000800000000000130 +:109B70000000400000200004000000100000590018 +:109B800000300018000000100000590800300018D4 +:109B90000000000200005700000800000000000163 +:109BA00000005701000800000000000100001158EB +:109BB0000000000000000001000011600000000033 +:109BC00000000010000011AC0008000000000004BC +:109BD00000004000002000000000002000005300B2 +:109BE0000010000000000010000000000000000055 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C100000000000000000000000147000000000C0 +:109C200000000001000014B0000000000000000867 +:109C30000000005000000000000000000000147848 +:109C400000000000000000040000147C0000000080 +:109C50000000000400001480000000000000000468 +:109C600000001484000000000000000400001488BC +:109C7000000000000000000800002AF00080000042 +:109C80000000008000000001000000000000000053 +:109C9000000020080010000000000010000020005C +:109CA000000000000000000800002C700008000008 +:109CB0000000000100002C710008000000000001FD +:109CC00000002C7200080000000000010000415854 +:109CD0000038000000000038800000000000000094 +:109CE0000000000000002C440008000000000002FA +:109CF00000002C46000800000000000200002C5468 +:109D0000001000000000000400002EB00000000061 +:109D10000000002000006000002000000000002083 +:109D200000007300000800000000000800000000B0 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D500000000000000000000000000000002F587C +:109D6000000000000000000100002F98000000002B +:109D7000000000080000005000000000000000008B +:109D800000002F80000000000000000400002F846D +:109D9000000000000000000400002F880000000008 +:109DA0000000000400002F8C0000000000000008EC +:109DB00000002FA80000000000000002800000004A +:109DC0000000000000000000800000000000000013 +:109DD0000000000080000000000000000000000003 +:109DE00000003128000000000000000800062A20C2 +:109DF00026000040000000080000A0000000000055 +:109E000000002000000040C1000000000000000130 +:109E1000000040F000000000000000028000000090 +:109E200000000000000000000000600000200000B2 +:109E300000000008000040000008000000000001D1 +:109E40000000400100080000000000010000404048 +:109E50000008000400000002000040600008000448 +:109E60000000000400004080000800000000000422 +:109E70000000400000080000000000040000400452 +:109E80000008000000000004000040400000000046 +:109E9000000000080000404800000000000000082A +:109EA0000000800000000000000000100000504092 +:109EB000000100040000000100005000000000004C +:109EC0000000002000005008001000000000000406 +:109ED0000000500C0010000000000001000052C7FC +:109EE0000000000000000001000052C60000000059 +:109EF00000000001000030000040002000000004CD +:109F00000000300400400020000000040000300881 +:109F100000400020000000020000300A0040002045 +:109F2000000000020000300C004000200000000192 +:109F30000000300D00400020000000010000300E45 +:109F40000040002000000001000030100040002010 +:109F50000000000400003014004000200000000455 +:109F60000000301800400020000000040000301CF9 +:109F700000400020000000040000C000010000803C +:109F8000000800040000C004010000800008000474 +:109F90000000000A00000000000000000000C0688F +:109FA00001000080000000010000C0690100008085 +:109FB000000000010000C06C0100008000000002F1 +:109FC0000000C06E01000080000000020000C070B0 +:109FD00001000080000000040000C0740100008047 +:109FE000000000040000C0660100008000000002C4 +:109FF0000000C06401000080000000010000C0609B +:10A0000001000080000000020000C062010000802A +:10A01000000000020000C0500100008000000004A9 +:10A020000000C05401000080000000040000C0587F +:10A0300001000080000000040000C05C01000080FE +:10A04000000000040000C07C01000080000000014E +:10A050000000C07D01000080000000010000101819 +:10A06000001000000000000400001090001000002C +:10A070000000000400001098001000000000000420 +:10A08000000011100000000000000002000011128A +:10A090000000000000000002000011140000000099 +:10A0A0000000000200001116000000000000000285 +:10A0B0000000604000080000000000020000604254 +:10A0C00000080000000000020000604400080000DA +:10A0D00000000002000060460008000000000002CE +:10A0E0000000608000080000000000080000600020 +:10A0F00000080000000000020000600200080000EC +:10A1000000000001000060040008000000000002E0 +:10A11000000060C0000800000000000800006100AE +:10A1200000080000000000040000610400080000B6 +:10A130000000000100006140000800000000000273 +:10A14000000061440008000000000002000061807F +:10A1500000080000000000040000300000080000BB +:10A1600000000002000030020008000000000001B2 +:10A170000000300400080000000000020000304031 +:10A180000008000000000002000030440008000049 +:10A19000000000020000304600080000000000023D +:10A1A0000000366000080000000000080000308059 +:10A1B00000080000000000020000308400080000D9 +:10A1C00000000002000036A00008000000000008A7 +:10A1D00000008040000800000000000100008041F5 +:10A1E000000800000000000100008042000800009C +:10A1F0000000000100008043000800000000000192 +:10A200000000800000080000000000020000800242 +:10A2100000080000000000010000800400080000A9 +:10A2200000000002000080C00008000000000002E2 +:10A23000000080C20008000000000002000080C48E +:10A2400000080000000000020000808000080000FC +:10A2500000000001000080810008000000000001F3 +:10A2600000008082000800000000000100008083E0 +:10A2700000080000000000010000808400080000C9 +:10A2800000000001000080850008000000000001BF +:10A29000000080860008000000000001000060004F +:10A2A000000800000000000200006002000800003A +:10A2B000000000010000600400080000000000022F +:10A2C0000000604200C00018000000020000604072 +:10A2D00000C00018000000020000604C00C0001820 +:10A2E000000000080000604400C0001800000008E2 +:10A2F0000000605700C0001800000001000060541A +:10A3000000C00018000000020000605600C00018E5 +:10A310000000000100006640000800000000000886 +:10A32000000066800008000000000008000066C011 +:10A3300000080000000000080000DA820018000099 +:10A34000000000020000DBA0000000000000000090 +:10A350000000E00000000000000000040000D10048 +:10A3600000000000000000040000D1040000000014 +:10A37000000000040000D1080000000000000004FC +:10A380000000D10C00000000000000040000D1100B +:10A3900000000000000000040000D11400000000D4 +:10A3A000000000040000D1180000000000000004BC +:10A3B0000000D1000000000000000020000092809A +:10A3C0000000000000000004000092800000000077 +:10A3D000000000280000805000A8000000000001DC +:10A3E0000000805400A80000000000010000800070 +:10A3F000000000000000005000008050000000003D +:10A4000000000010000096000000000000000004A2 +:10A41000000094000000000000000004000094040C +:10A42000000000000000000400009408000000008C +:10A43000000000040000940C000000000000000474 +:10A4400000009410000000000000000400009414BC +:10A45000000000000000000400009418000000004C +:10A460000000000400009400000000000000004014 +:10A47000000094200000000000000004000094246C +:10A48000000000000000000400009428000000000C +:10A49000000000040000941C000000000000000404 +:10A4A0000000943000000000000000040000942C24 +:10A4B00000000000000000040000943400000000D0 +:10A4C000000000040000928400000000000000046E +:10A4D0000000928000000000000000040000929044 +:10A4E0000000000000000004000092A40000000032 +:10A4F0000000000400009438000000000000000488 +:10A500000000943C00000000000000040000B98836 +:10A5100000000000000000000000D000000000006B +:10A52000000000040000B100000000000000000472 +:10A530000000B10400000000000000040000B108A9 +:10A5400000000000000000040000B1000000000056 +:10A55000000000100000BCB000000000000000047B +:10A560000000BCB400000000000000040000BCB00B +:10A5700000000000000000480000D8580000000063 +:10A58000000000040000D85000000000000000049B +:10A590000000D85400000000000000040000D85C57 +:10A5A00000000000000000040000D850000000007F +:10A5B000000000100000D84000000000000000046F +:10A5C0000000D84400000000000000040000D84053 +:10A5D00000000000000000080000D4C800000000D7 +:10A5E000000000080000D4D8000000000000008037 +:10A5F0000000001000000000000000000000D4D89F +:10A600000000000000000008000000000000000042 +:08A61000070802000000000031 +:00000001FF --- linux-aws-4.15.0.orig/fs/Kconfig +++ linux-aws-4.15.0/fs/Kconfig @@ -248,6 +248,7 @@ source "fs/sysv/Kconfig" source "fs/ufs/Kconfig" source "fs/exofs/Kconfig" +source "fs/aufs/Kconfig" endif # MISC_FILESYSTEMS --- linux-aws-4.15.0.orig/fs/Makefile +++ linux-aws-4.15.0/fs/Makefile @@ -129,3 +129,4 @@ obj-$(CONFIG_CEPH_FS) += ceph/ obj-$(CONFIG_PSTORE) += pstore/ obj-$(CONFIG_EFIVAR_FS) += efivarfs/ +obj-$(CONFIG_AUFS_FS) += aufs/ --- linux-aws-4.15.0.orig/fs/attr.c +++ linux-aws-4.15.0/fs/attr.c @@ -18,6 +18,30 @@ #include #include +static bool chown_ok(const struct inode *inode, kuid_t uid) +{ + if (uid_eq(current_fsuid(), inode->i_uid) && + uid_eq(uid, inode->i_uid)) + return true; + if (capable_wrt_inode_uidgid(inode, CAP_CHOWN)) + return true; + if (ns_capable(inode->i_sb->s_user_ns, CAP_CHOWN)) + return true; + return false; +} + +static bool chgrp_ok(const struct inode *inode, kgid_t gid) +{ + if (uid_eq(current_fsuid(), inode->i_uid) && + (in_group_p(gid) || gid_eq(gid, inode->i_gid))) + return true; + if (capable_wrt_inode_uidgid(inode, CAP_CHOWN)) + return true; + if (ns_capable(inode->i_sb->s_user_ns, CAP_CHOWN)) + return true; + return false; +} + /** * setattr_prepare - check if attribute changes to a dentry are allowed * @dentry: dentry to check @@ -52,17 +76,11 @@ goto kill_priv; /* Make sure a caller can chown. */ - if ((ia_valid & ATTR_UID) && - (!uid_eq(current_fsuid(), inode->i_uid) || - !uid_eq(attr->ia_uid, inode->i_uid)) && - !capable_wrt_inode_uidgid(inode, CAP_CHOWN)) + if ((ia_valid & ATTR_UID) && !chown_ok(inode, attr->ia_uid)) return -EPERM; /* Make sure caller can chgrp. */ - if ((ia_valid & ATTR_GID) && - (!uid_eq(current_fsuid(), inode->i_uid) || - (!in_group_p(attr->ia_gid) && !gid_eq(attr->ia_gid, inode->i_gid))) && - !capable_wrt_inode_uidgid(inode, CAP_CHOWN)) + if ((ia_valid & ATTR_GID) && !chgrp_ok(inode, attr->ia_gid)) return -EPERM; /* Make sure a caller can chmod. */ --- linux-aws-4.15.0.orig/fs/aufs/Kconfig +++ linux-aws-4.15.0/fs/aufs/Kconfig @@ -0,0 +1,199 @@ +# SPDX-License-Identifier: GPL-2.0 +config AUFS_FS + tristate "Aufs (Advanced multi layered unification filesystem) support" + help + Aufs is a stackable unification filesystem such as Unionfs, + which unifies several directories and provides a merged single + directory. + In the early days, aufs was entirely re-designed and + re-implemented Unionfs Version 1.x series. Introducing many + original ideas, approaches and improvements, it becomes totally + different from Unionfs while keeping the basic features. + +if AUFS_FS +choice + prompt "Maximum number of branches" + default AUFS_BRANCH_MAX_127 + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_127 + bool "127" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_511 + bool "511" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_1023 + bool "1023" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +config AUFS_BRANCH_MAX_32767 + bool "32767" + help + Specifies the maximum number of branches (or member directories) + in a single aufs. The larger value consumes more system + resources and has a minor impact to performance. +endchoice + +config AUFS_SBILIST + bool + depends on AUFS_MAGIC_SYSRQ || PROC_FS + default y + help + Automatic configuration for internal use. + When aufs supports Magic SysRq or /proc, enabled automatically. + +config AUFS_HNOTIFY + bool "Detect direct branch access (bypassing aufs)" + help + If you want to modify files on branches directly, eg. bypassing aufs, + and want aufs to detect the changes of them fully, then enable this + option and use 'udba=notify' mount option. + Currently there is only one available configuration, "fsnotify". + It will have a negative impact to the performance. + See detail in aufs.5. + +choice + prompt "method" if AUFS_HNOTIFY + default AUFS_HFSNOTIFY +config AUFS_HFSNOTIFY + bool "fsnotify" + select FSNOTIFY +endchoice + +config AUFS_EXPORT + bool "NFS-exportable aufs" + depends on EXPORTFS + help + If you want to export your mounted aufs via NFS, then enable this + option. There are several requirements for this configuration. + See detail in aufs.5. + +config AUFS_INO_T_64 + bool + depends on AUFS_EXPORT + depends on 64BIT && !(ALPHA || S390) + default y + help + Automatic configuration for internal use. + /* typedef unsigned long/int __kernel_ino_t */ + /* alpha and s390x are int */ + +config AUFS_XATTR + bool "support for XATTR/EA (including Security Labels)" + help + If your branch fs supports XATTR/EA and you want to make them + available in aufs too, then enable this opsion and specify the + branch attributes for EA. + See detail in aufs.5. + +config AUFS_FHSM + bool "File-based Hierarchical Storage Management" + help + Hierarchical Storage Management (or HSM) is a well-known feature + in the storage world. Aufs provides this feature as file-based. + with multiple branches. + These multiple branches are prioritized, ie. the topmost one + should be the fastest drive and be used heavily. + +config AUFS_RDU + bool "Readdir in userspace" + help + Aufs has two methods to provide a merged view for a directory, + by a user-space library and by kernel-space natively. The latter + is always enabled but sometimes large and slow. + If you enable this option, install the library in aufs2-util + package, and set some environment variables for your readdir(3), + then the work will be handled in user-space which generally + shows better performance in most cases. + See detail in aufs.5. + +config AUFS_DIRREN + bool "Workaround for rename(2)-ing a directory" + help + By default, aufs returns EXDEV error in renameing a dir who has + his child on the lower branch, since it is a bad idea to issue + rename(2) internally for every lower branch. But user may not + accept this behaviour. So here is a workaround to allow such + rename(2) and store some extra infromation on the writable + branch. Obviously this costs high (and I don't like it). + To use this feature, you need to enable this configuration AND + to specify the mount option `dirren.' + See details in aufs.5 and the design documents. + +config AUFS_SHWH + bool "Show whiteouts" + help + If you want to make the whiteouts in aufs visible, then enable + this option and specify 'shwh' mount option. Although it may + sounds like philosophy or something, but in technically it + simply shows the name of whiteout with keeping its behaviour. + +config AUFS_BR_RAMFS + bool "Ramfs (initramfs/rootfs) as an aufs branch" + help + If you want to use ramfs as an aufs branch fs, then enable this + option. Generally tmpfs is recommended. + Aufs prohibited them to be a branch fs by default, because + initramfs becomes unusable after switch_root or something + generally. If you sets initramfs as an aufs branch and boot your + system by switch_root, you will meet a problem easily since the + files in initramfs may be inaccessible. + Unless you are going to use ramfs as an aufs branch fs without + switch_root or something, leave it N. + +config AUFS_BR_FUSE + bool "Fuse fs as an aufs branch" + depends on FUSE_FS + select AUFS_POLL + help + If you want to use fuse-based userspace filesystem as an aufs + branch fs, then enable this option. + It implements the internal poll(2) operation which is + implemented by fuse only (curretnly). + +config AUFS_POLL + bool + help + Automatic configuration for internal use. + +config AUFS_BR_HFSPLUS + bool "Hfsplus as an aufs branch" + depends on HFSPLUS_FS + default y + help + If you want to use hfsplus fs as an aufs branch fs, then enable + this option. This option introduces a small overhead at + copying-up a file on hfsplus. + +config AUFS_BDEV_LOOP + bool + depends on BLK_DEV_LOOP + default y + help + Automatic configuration for internal use. + Convert =[ym] into =y. + +config AUFS_DEBUG + bool "Debug aufs" + help + Enable this to compile aufs internal debug code. + It will have a negative impact to the performance. + +config AUFS_MAGIC_SYSRQ + bool + depends on AUFS_DEBUG && MAGIC_SYSRQ + default y + help + Automatic configuration for internal use. + When aufs supports Magic SysRq, enabled automatically. +endif --- linux-aws-4.15.0.orig/fs/aufs/Makefile +++ linux-aws-4.15.0/fs/aufs/Makefile @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: GPL-2.0 + +include ${src}/magic.mk +ifeq (${CONFIG_AUFS_FS},m) +include ${src}/conf.mk +endif +-include ${src}/priv_def.mk + +# cf. include/linux/kernel.h +# enable pr_debug +ccflags-y += -DDEBUG +# sparse requires the full pathname +ifdef M +ccflags-y += -include ${M}/../../include/uapi/linux/aufs_type.h +else +ccflags-y += -include ${srctree}/include/uapi/linux/aufs_type.h +endif + +obj-$(CONFIG_AUFS_FS) += aufs.o +aufs-y := module.o sbinfo.o super.o branch.o xino.o sysaufs.o opts.o \ + wkq.o vfsub.o dcsub.o \ + cpup.o whout.o wbr_policy.o \ + dinfo.o dentry.o \ + dynop.o \ + finfo.o file.o f_op.o \ + dir.o vdir.o \ + iinfo.o inode.o i_op.o i_op_add.o i_op_del.o i_op_ren.o \ + mvdown.o ioctl.o + +# all are boolean +aufs-$(CONFIG_PROC_FS) += procfs.o plink.o +aufs-$(CONFIG_SYSFS) += sysfs.o +aufs-$(CONFIG_DEBUG_FS) += dbgaufs.o +aufs-$(CONFIG_AUFS_BDEV_LOOP) += loop.o +aufs-$(CONFIG_AUFS_HNOTIFY) += hnotify.o +aufs-$(CONFIG_AUFS_HFSNOTIFY) += hfsnotify.o +aufs-$(CONFIG_AUFS_EXPORT) += export.o +aufs-$(CONFIG_AUFS_XATTR) += xattr.o +aufs-$(CONFIG_FS_POSIX_ACL) += posix_acl.o +aufs-$(CONFIG_AUFS_DIRREN) += dirren.o +aufs-$(CONFIG_AUFS_FHSM) += fhsm.o +aufs-$(CONFIG_AUFS_POLL) += poll.o +aufs-$(CONFIG_AUFS_RDU) += rdu.o +aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o --- linux-aws-4.15.0.orig/fs/aufs/aufs.h +++ linux-aws-4.15.0/fs/aufs/aufs.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * all header files + */ + +#ifndef __AUFS_H__ +#define __AUFS_H__ + +#ifdef __KERNEL__ + +#define AuStub(type, name, body, ...) \ + static inline type name(__VA_ARGS__) { body; } + +#define AuStubVoid(name, ...) \ + AuStub(void, name, , __VA_ARGS__) +#define AuStubInt0(name, ...) \ + AuStub(int, name, return 0, __VA_ARGS__) + +#include "debug.h" + +#include "branch.h" +#include "cpup.h" +#include "dcsub.h" +#include "dbgaufs.h" +#include "dentry.h" +#include "dir.h" +#include "dirren.h" +#include "dynop.h" +#include "file.h" +#include "fstype.h" +#include "hbl.h" +#include "inode.h" +#include "loop.h" +#include "module.h" +#include "opts.h" +#include "rwsem.h" +#include "super.h" +#include "sysaufs.h" +#include "vfsub.h" +#include "whout.h" +#include "wkq.h" + +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/branch.c +++ linux-aws-4.15.0/fs/aufs/branch.c @@ -0,0 +1,1432 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * branch management + */ + +#include +#include +#include "aufs.h" + +/* + * free a single branch + */ +static void au_br_do_free(struct au_branch *br) +{ + int i; + struct au_wbr *wbr; + struct au_dykey **key; + + au_hnotify_fin_br(br); + /* always, regardless the mount option */ + au_dr_hino_free(&br->br_dirren); + + if (br->br_xino.xi_file) + fput(br->br_xino.xi_file); + for (i = br->br_xino.xi_nondir.total - 1; i >= 0; i--) + AuDebugOn(br->br_xino.xi_nondir.array[i]); + kfree(br->br_xino.xi_nondir.array); + + AuDebugOn(au_br_count(br)); + au_br_count_fin(br); + + wbr = br->br_wbr; + if (wbr) { + for (i = 0; i < AuBrWh_Last; i++) + dput(wbr->wbr_wh[i]); + AuDebugOn(atomic_read(&wbr->wbr_wh_running)); + AuRwDestroy(&wbr->wbr_wh_rwsem); + } + + if (br->br_fhsm) { + au_br_fhsm_fin(br->br_fhsm); + kfree(br->br_fhsm); + } + + key = br->br_dykey; + for (i = 0; i < AuBrDynOp; i++, key++) + if (*key) + au_dy_put(*key); + else + break; + + /* recursive lock, s_umount of branch's */ + lockdep_off(); + path_put(&br->br_path); + lockdep_on(); + kfree(wbr); + kfree(br); +} + +/* + * frees all branches + */ +void au_br_free(struct au_sbinfo *sbinfo) +{ + aufs_bindex_t bmax; + struct au_branch **br; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + bmax = sbinfo->si_bbot + 1; + br = sbinfo->si_branch; + while (bmax--) + au_br_do_free(*br++); +} + +/* + * find the index of a branch which is specified by @br_id. + */ +int au_br_index(struct super_block *sb, aufs_bindex_t br_id) +{ + aufs_bindex_t bindex, bbot; + + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) + if (au_sbr_id(sb, bindex) == br_id) + return bindex; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * add a branch + */ + +static int test_overlap(struct super_block *sb, struct dentry *h_adding, + struct dentry *h_root) +{ + if (unlikely(h_adding == h_root + || au_test_loopback_overlap(sb, h_adding))) + return 1; + if (h_adding->d_sb != h_root->d_sb) + return 0; + return au_test_subdir(h_adding, h_root) + || au_test_subdir(h_root, h_adding); +} + +/* + * returns a newly allocated branch. @new_nbranch is a number of branches + * after adding a branch. + */ +static struct au_branch *au_br_alloc(struct super_block *sb, int new_nbranch, + int perm) +{ + struct au_branch *add_branch; + struct dentry *root; + struct inode *inode; + int err; + + err = -ENOMEM; + add_branch = kzalloc(sizeof(*add_branch), GFP_NOFS); + if (unlikely(!add_branch)) + goto out; + add_branch->br_xino.xi_nondir.total = 8; /* initial size */ + add_branch->br_xino.xi_nondir.array + = kcalloc(add_branch->br_xino.xi_nondir.total, sizeof(ino_t), + GFP_NOFS); + if (unlikely(!add_branch->br_xino.xi_nondir.array)) + goto out_br; + + err = au_hnotify_init_br(add_branch, perm); + if (unlikely(err)) + goto out_xinondir; + + if (au_br_writable(perm)) { + /* may be freed separately at changing the branch permission */ + add_branch->br_wbr = kzalloc(sizeof(*add_branch->br_wbr), + GFP_NOFS); + if (unlikely(!add_branch->br_wbr)) + goto out_hnotify; + } + + if (au_br_fhsm(perm)) { + err = au_fhsm_br_alloc(add_branch); + if (unlikely(err)) + goto out_wbr; + } + + root = sb->s_root; + err = au_sbr_realloc(au_sbi(sb), new_nbranch, /*may_shrink*/0); + if (!err) + err = au_di_realloc(au_di(root), new_nbranch, /*may_shrink*/0); + if (!err) { + inode = d_inode(root); + err = au_hinode_realloc(au_ii(inode), new_nbranch, + /*may_shrink*/0); + } + if (!err) + return add_branch; /* success */ + +out_wbr: + kfree(add_branch->br_wbr); +out_hnotify: + au_hnotify_fin_br(add_branch); +out_xinondir: + kfree(add_branch->br_xino.xi_nondir.array); +out_br: + kfree(add_branch); +out: + return ERR_PTR(err); +} + +/* + * test if the branch permission is legal or not. + */ +static int test_br(struct inode *inode, int brperm, char *path) +{ + int err; + + err = (au_br_writable(brperm) && IS_RDONLY(inode)); + if (!err) + goto out; + + err = -EINVAL; + pr_err("write permission for readonly mount or inode, %s\n", path); + +out: + return err; +} + +/* + * returns: + * 0: success, the caller will add it + * plus: success, it is already unified, the caller should ignore it + * minus: error + */ +static int test_add(struct super_block *sb, struct au_opt_add *add, int remount) +{ + int err; + aufs_bindex_t bbot, bindex; + struct dentry *root, *h_dentry; + struct inode *inode, *h_inode; + + root = sb->s_root; + bbot = au_sbbot(sb); + if (unlikely(bbot >= 0 + && au_find_dbindex(root, add->path.dentry) >= 0)) { + err = 1; + if (!remount) { + err = -EINVAL; + pr_err("%s duplicated\n", add->pathname); + } + goto out; + } + + err = -ENOSPC; /* -E2BIG; */ + if (unlikely(AUFS_BRANCH_MAX <= add->bindex + || AUFS_BRANCH_MAX - 1 <= bbot)) { + pr_err("number of branches exceeded %s\n", add->pathname); + goto out; + } + + err = -EDOM; + if (unlikely(add->bindex < 0 || bbot + 1 < add->bindex)) { + pr_err("bad index %d\n", add->bindex); + goto out; + } + + inode = d_inode(add->path.dentry); + err = -ENOENT; + if (unlikely(!inode->i_nlink)) { + pr_err("no existence %s\n", add->pathname); + goto out; + } + + err = -EINVAL; + if (unlikely(inode->i_sb == sb)) { + pr_err("%s must be outside\n", add->pathname); + goto out; + } + + if (unlikely(au_test_fs_unsuppoted(inode->i_sb))) { + pr_err("unsupported filesystem, %s (%s)\n", + add->pathname, au_sbtype(inode->i_sb)); + goto out; + } + + if (unlikely(inode->i_sb->s_stack_depth)) { + pr_err("already stacked, %s (%s)\n", + add->pathname, au_sbtype(inode->i_sb)); + goto out; + } + + err = test_br(d_inode(add->path.dentry), add->perm, add->pathname); + if (unlikely(err)) + goto out; + + if (bbot < 0) + return 0; /* success */ + + err = -EINVAL; + for (bindex = 0; bindex <= bbot; bindex++) + if (unlikely(test_overlap(sb, add->path.dentry, + au_h_dptr(root, bindex)))) { + pr_err("%s is overlapped\n", add->pathname); + goto out; + } + + err = 0; + if (au_opt_test(au_mntflags(sb), WARN_PERM)) { + h_dentry = au_h_dptr(root, 0); + h_inode = d_inode(h_dentry); + if ((h_inode->i_mode & S_IALLUGO) != (inode->i_mode & S_IALLUGO) + || !uid_eq(h_inode->i_uid, inode->i_uid) + || !gid_eq(h_inode->i_gid, inode->i_gid)) + pr_warn("uid/gid/perm %s %u/%u/0%o, %u/%u/0%o\n", + add->pathname, + i_uid_read(inode), i_gid_read(inode), + (inode->i_mode & S_IALLUGO), + i_uid_read(h_inode), i_gid_read(h_inode), + (h_inode->i_mode & S_IALLUGO)); + } + +out: + return err; +} + +/* + * initialize or clean the whiteouts for an adding branch + */ +static int au_br_init_wh(struct super_block *sb, struct au_branch *br, + int new_perm) +{ + int err, old_perm; + aufs_bindex_t bindex; + struct inode *h_inode; + struct au_wbr *wbr; + struct au_hinode *hdir; + struct dentry *h_dentry; + + err = vfsub_mnt_want_write(au_br_mnt(br)); + if (unlikely(err)) + goto out; + + wbr = br->br_wbr; + old_perm = br->br_perm; + br->br_perm = new_perm; + hdir = NULL; + h_inode = NULL; + bindex = au_br_index(sb, br->br_id); + if (0 <= bindex) { + hdir = au_hi(d_inode(sb->s_root), bindex); + au_hn_inode_lock_nested(hdir, AuLsc_I_PARENT); + } else { + h_dentry = au_br_dentry(br); + h_inode = d_inode(h_dentry); + inode_lock_nested(h_inode, AuLsc_I_PARENT); + } + if (!wbr) + err = au_wh_init(br, sb); + else { + wbr_wh_write_lock(wbr); + err = au_wh_init(br, sb); + wbr_wh_write_unlock(wbr); + } + if (hdir) + au_hn_inode_unlock(hdir); + else + inode_unlock(h_inode); + vfsub_mnt_drop_write(au_br_mnt(br)); + br->br_perm = old_perm; + + if (!err && wbr && !au_br_writable(new_perm)) { + kfree(wbr); + br->br_wbr = NULL; + } + +out: + return err; +} + +static int au_wbr_init(struct au_branch *br, struct super_block *sb, + int perm) +{ + int err; + struct kstatfs kst; + struct au_wbr *wbr; + + wbr = br->br_wbr; + au_rw_init(&wbr->wbr_wh_rwsem); + atomic_set(&wbr->wbr_wh_running, 0); + + /* + * a limit for rmdir/rename a dir + * cf. AUFS_MAX_NAMELEN in include/uapi/linux/aufs_type.h + */ + err = vfs_statfs(&br->br_path, &kst); + if (unlikely(err)) + goto out; + err = -EINVAL; + if (kst.f_namelen >= NAME_MAX) + err = au_br_init_wh(sb, br, perm); + else + pr_err("%pd(%s), unsupported namelen %ld\n", + au_br_dentry(br), + au_sbtype(au_br_dentry(br)->d_sb), kst.f_namelen); + +out: + return err; +} + +/* initialize a new branch */ +static int au_br_init(struct au_branch *br, struct super_block *sb, + struct au_opt_add *add) +{ + int err; + struct inode *h_inode; + + err = 0; + spin_lock_init(&br->br_xino.xi_nondir.spin); + init_waitqueue_head(&br->br_xino.xi_nondir.wqh); + br->br_perm = add->perm; + br->br_path = add->path; /* set first, path_get() later */ + spin_lock_init(&br->br_dykey_lock); + au_br_count_init(br); + atomic_set(&br->br_xino_running, 0); + br->br_id = au_new_br_id(sb); + AuDebugOn(br->br_id < 0); + + /* always, regardless the given option */ + err = au_dr_br_init(sb, br, &add->path); + if (unlikely(err)) + goto out_err; + + if (au_br_writable(add->perm)) { + err = au_wbr_init(br, sb, add->perm); + if (unlikely(err)) + goto out_err; + } + + if (au_opt_test(au_mntflags(sb), XINO)) { + h_inode = d_inode(add->path.dentry); + err = au_xino_br(sb, br, h_inode->i_ino, + au_sbr(sb, 0)->br_xino.xi_file, /*do_test*/1); + if (unlikely(err)) { + AuDebugOn(br->br_xino.xi_file); + goto out_err; + } + } + + sysaufs_br_init(br); + path_get(&br->br_path); + goto out; /* success */ + +out_err: + memset(&br->br_path, 0, sizeof(br->br_path)); +out: + return err; +} + +static void au_br_do_add_brp(struct au_sbinfo *sbinfo, aufs_bindex_t bindex, + struct au_branch *br, aufs_bindex_t bbot, + aufs_bindex_t amount) +{ + struct au_branch **brp; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + brp = sbinfo->si_branch + bindex; + memmove(brp + 1, brp, sizeof(*brp) * amount); + *brp = br; + sbinfo->si_bbot++; + if (unlikely(bbot < 0)) + sbinfo->si_bbot = 0; +} + +static void au_br_do_add_hdp(struct au_dinfo *dinfo, aufs_bindex_t bindex, + aufs_bindex_t bbot, aufs_bindex_t amount) +{ + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = au_hdentry(dinfo, bindex); + memmove(hdp + 1, hdp, sizeof(*hdp) * amount); + au_h_dentry_init(hdp); + dinfo->di_bbot++; + if (unlikely(bbot < 0)) + dinfo->di_btop = 0; +} + +static void au_br_do_add_hip(struct au_iinfo *iinfo, aufs_bindex_t bindex, + aufs_bindex_t bbot, aufs_bindex_t amount) +{ + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = au_hinode(iinfo, bindex); + memmove(hip + 1, hip, sizeof(*hip) * amount); + au_hinode_init(hip); + iinfo->ii_bbot++; + if (unlikely(bbot < 0)) + iinfo->ii_btop = 0; +} + +static void au_br_do_add(struct super_block *sb, struct au_branch *br, + aufs_bindex_t bindex) +{ + struct dentry *root, *h_dentry; + struct inode *root_inode, *h_inode; + aufs_bindex_t bbot, amount; + + root = sb->s_root; + root_inode = d_inode(root); + bbot = au_sbbot(sb); + amount = bbot + 1 - bindex; + h_dentry = au_br_dentry(br); + au_sbilist_lock(); + au_br_do_add_brp(au_sbi(sb), bindex, br, bbot, amount); + au_br_do_add_hdp(au_di(root), bindex, bbot, amount); + au_br_do_add_hip(au_ii(root_inode), bindex, bbot, amount); + au_set_h_dptr(root, bindex, dget(h_dentry)); + h_inode = d_inode(h_dentry); + au_set_h_iptr(root_inode, bindex, au_igrab(h_inode), /*flags*/0); + au_sbilist_unlock(); +} + +int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount) +{ + int err; + aufs_bindex_t bbot, add_bindex; + struct dentry *root, *h_dentry; + struct inode *root_inode; + struct au_branch *add_branch; + + root = sb->s_root; + root_inode = d_inode(root); + IMustLock(root_inode); + IiMustWriteLock(root_inode); + err = test_add(sb, add, remount); + if (unlikely(err < 0)) + goto out; + if (err) { + err = 0; + goto out; /* success */ + } + + bbot = au_sbbot(sb); + add_branch = au_br_alloc(sb, bbot + 2, add->perm); + err = PTR_ERR(add_branch); + if (IS_ERR(add_branch)) + goto out; + + err = au_br_init(add_branch, sb, add); + if (unlikely(err)) { + au_br_do_free(add_branch); + goto out; + } + + add_bindex = add->bindex; + if (!remount) + au_br_do_add(sb, add_branch, add_bindex); + else { + sysaufs_brs_del(sb, add_bindex); + au_br_do_add(sb, add_branch, add_bindex); + sysaufs_brs_add(sb, add_bindex); + } + + h_dentry = add->path.dentry; + if (!add_bindex) { + au_cpup_attr_all(root_inode, /*force*/1); + sb->s_maxbytes = h_dentry->d_sb->s_maxbytes; + } else + au_add_nlink(root_inode, d_inode(h_dentry)); + + /* + * this test/set prevents aufs from handling unnecesary notify events + * of xino files, in case of re-adding a writable branch which was + * once detached from aufs. + */ + if (au_xino_brid(sb) < 0 + && au_br_writable(add_branch->br_perm) + && !au_test_fs_bad_xino(h_dentry->d_sb) + && add_branch->br_xino.xi_file + && add_branch->br_xino.xi_file->f_path.dentry->d_parent == h_dentry) + au_xino_brid_set(sb, add_branch->br_id); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static unsigned long long au_farray_cb(struct super_block *sb, void *a, + unsigned long long max __maybe_unused, + void *arg) +{ + unsigned long long n; + struct file **p, *f; + struct hlist_bl_head *files; + struct hlist_bl_node *pos; + struct au_finfo *finfo; + + n = 0; + p = a; + files = &au_sbi(sb)->si_files; + hlist_bl_lock(files); + hlist_bl_for_each_entry(finfo, pos, files, fi_hlist) { + f = finfo->fi_file; + if (file_count(f) + && !special_file(file_inode(f)->i_mode)) { + get_file(f); + *p++ = f; + n++; + AuDebugOn(n > max); + } + } + hlist_bl_unlock(files); + + return n; +} + +static struct file **au_farray_alloc(struct super_block *sb, + unsigned long long *max) +{ + *max = au_nfiles(sb); + return au_array_alloc(max, au_farray_cb, sb, /*arg*/NULL); +} + +static void au_farray_free(struct file **a, unsigned long long max) +{ + unsigned long long ull; + + for (ull = 0; ull < max; ull++) + if (a[ull]) + fput(a[ull]); + kvfree(a); +} + +/* ---------------------------------------------------------------------- */ + +/* + * delete a branch + */ + +/* to show the line number, do not make it inlined function */ +#define AuVerbose(do_info, fmt, ...) do { \ + if (do_info) \ + pr_info(fmt, ##__VA_ARGS__); \ +} while (0) + +static int au_test_ibusy(struct inode *inode, aufs_bindex_t btop, + aufs_bindex_t bbot) +{ + return (inode && !S_ISDIR(inode->i_mode)) || btop == bbot; +} + +static int au_test_dbusy(struct dentry *dentry, aufs_bindex_t btop, + aufs_bindex_t bbot) +{ + return au_test_ibusy(d_inode(dentry), btop, bbot); +} + +/* + * test if the branch is deletable or not. + */ +static int test_dentry_busy(struct dentry *root, aufs_bindex_t bindex, + unsigned int sigen, const unsigned int verbose) +{ + int err, i, j, ndentry; + aufs_bindex_t btop, bbot; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry *d; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, root, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + for (i = 0; !err && i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + ndentry = dpage->ndentry; + for (j = 0; !err && j < ndentry; j++) { + d = dpage->dentries[j]; + AuDebugOn(au_dcount(d) <= 0); + if (!au_digen_test(d, sigen)) { + di_read_lock_child(d, AuLock_IR); + if (unlikely(au_dbrange_test(d))) { + di_read_unlock(d, AuLock_IR); + continue; + } + } else { + di_write_lock_child(d); + if (unlikely(au_dbrange_test(d))) { + di_write_unlock(d); + continue; + } + err = au_reval_dpath(d, sigen); + if (!err) + di_downgrade_lock(d, AuLock_IR); + else { + di_write_unlock(d); + break; + } + } + + /* AuDbgDentry(d); */ + btop = au_dbtop(d); + bbot = au_dbbot(d); + if (btop <= bindex + && bindex <= bbot + && au_h_dptr(d, bindex) + && au_test_dbusy(d, btop, bbot)) { + err = -EBUSY; + AuVerbose(verbose, "busy %pd\n", d); + AuDbgDentry(d); + } + di_read_unlock(d, AuLock_IR); + } + } + +out_dpages: + au_dpages_free(&dpages); +out: + return err; +} + +static int test_inode_busy(struct super_block *sb, aufs_bindex_t bindex, + unsigned int sigen, const unsigned int verbose) +{ + int err; + unsigned long long max, ull; + struct inode *i, **array; + aufs_bindex_t btop, bbot; + + array = au_iarray_alloc(sb, &max); + err = PTR_ERR(array); + if (IS_ERR(array)) + goto out; + + err = 0; + AuDbg("b%d\n", bindex); + for (ull = 0; !err && ull < max; ull++) { + i = array[ull]; + if (unlikely(!i)) + break; + if (i->i_ino == AUFS_ROOT_INO) + continue; + + /* AuDbgInode(i); */ + if (au_iigen(i, NULL) == sigen) + ii_read_lock_child(i); + else { + ii_write_lock_child(i); + err = au_refresh_hinode_self(i); + au_iigen_dec(i); + if (!err) + ii_downgrade_lock(i); + else { + ii_write_unlock(i); + break; + } + } + + btop = au_ibtop(i); + bbot = au_ibbot(i); + if (btop <= bindex + && bindex <= bbot + && au_h_iptr(i, bindex) + && au_test_ibusy(i, btop, bbot)) { + err = -EBUSY; + AuVerbose(verbose, "busy i%lu\n", i->i_ino); + AuDbgInode(i); + } + ii_read_unlock(i); + } + au_iarray_free(array, max); + +out: + return err; +} + +static int test_children_busy(struct dentry *root, aufs_bindex_t bindex, + const unsigned int verbose) +{ + int err; + unsigned int sigen; + + sigen = au_sigen(root->d_sb); + DiMustNoWaiters(root); + IiMustNoWaiters(d_inode(root)); + di_write_unlock(root); + err = test_dentry_busy(root, bindex, sigen, verbose); + if (!err) + err = test_inode_busy(root->d_sb, bindex, sigen, verbose); + di_write_lock_child(root); /* aufs_write_lock() calls ..._child() */ + + return err; +} + +static int test_dir_busy(struct file *file, aufs_bindex_t br_id, + struct file **to_free, int *idx) +{ + int err; + unsigned char matched, root; + aufs_bindex_t bindex, bbot; + struct au_fidir *fidir; + struct au_hfile *hfile; + + err = 0; + root = IS_ROOT(file->f_path.dentry); + if (root) { + get_file(file); + to_free[*idx] = file; + (*idx)++; + goto out; + } + + matched = 0; + fidir = au_fi(file)->fi_hdir; + AuDebugOn(!fidir); + bbot = au_fbbot_dir(file); + for (bindex = au_fbtop(file); bindex <= bbot; bindex++) { + hfile = fidir->fd_hfile + bindex; + if (!hfile->hf_file) + continue; + + if (hfile->hf_br->br_id == br_id) { + matched = 1; + break; + } + } + if (matched) + err = -EBUSY; + +out: + return err; +} + +static int test_file_busy(struct super_block *sb, aufs_bindex_t br_id, + struct file **to_free, int opened) +{ + int err, idx; + unsigned long long ull, max; + aufs_bindex_t btop; + struct file *file, **array; + struct dentry *root; + struct au_hfile *hfile; + + array = au_farray_alloc(sb, &max); + err = PTR_ERR(array); + if (IS_ERR(array)) + goto out; + + err = 0; + idx = 0; + root = sb->s_root; + di_write_unlock(root); + for (ull = 0; ull < max; ull++) { + file = array[ull]; + if (unlikely(!file)) + break; + + /* AuDbg("%pD\n", file); */ + fi_read_lock(file); + btop = au_fbtop(file); + if (!d_is_dir(file->f_path.dentry)) { + hfile = &au_fi(file)->fi_htop; + if (hfile->hf_br->br_id == br_id) + err = -EBUSY; + } else + err = test_dir_busy(file, br_id, to_free, &idx); + fi_read_unlock(file); + if (unlikely(err)) + break; + } + di_write_lock_child(root); + au_farray_free(array, max); + AuDebugOn(idx > opened); + +out: + return err; +} + +static void br_del_file(struct file **to_free, unsigned long long opened, + aufs_bindex_t br_id) +{ + unsigned long long ull; + aufs_bindex_t bindex, btop, bbot, bfound; + struct file *file; + struct au_fidir *fidir; + struct au_hfile *hfile; + + for (ull = 0; ull < opened; ull++) { + file = to_free[ull]; + if (unlikely(!file)) + break; + + /* AuDbg("%pD\n", file); */ + AuDebugOn(!d_is_dir(file->f_path.dentry)); + bfound = -1; + fidir = au_fi(file)->fi_hdir; + AuDebugOn(!fidir); + fi_write_lock(file); + btop = au_fbtop(file); + bbot = au_fbbot_dir(file); + for (bindex = btop; bindex <= bbot; bindex++) { + hfile = fidir->fd_hfile + bindex; + if (!hfile->hf_file) + continue; + + if (hfile->hf_br->br_id == br_id) { + bfound = bindex; + break; + } + } + AuDebugOn(bfound < 0); + au_set_h_fptr(file, bfound, NULL); + if (bfound == btop) { + for (btop++; btop <= bbot; btop++) + if (au_hf_dir(file, btop)) { + au_set_fbtop(file, btop); + break; + } + } + fi_write_unlock(file); + } +} + +static void au_br_do_del_brp(struct au_sbinfo *sbinfo, + const aufs_bindex_t bindex, + const aufs_bindex_t bbot) +{ + struct au_branch **brp, **p; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + brp = sbinfo->si_branch + bindex; + if (bindex < bbot) + memmove(brp, brp + 1, sizeof(*brp) * (bbot - bindex)); + sbinfo->si_branch[0 + bbot] = NULL; + sbinfo->si_bbot--; + + p = au_krealloc(sbinfo->si_branch, sizeof(*p) * bbot, AuGFP_SBILIST, + /*may_shrink*/1); + if (p) + sbinfo->si_branch = p; + /* harmless error */ +} + +static void au_br_do_del_hdp(struct au_dinfo *dinfo, const aufs_bindex_t bindex, + const aufs_bindex_t bbot) +{ + struct au_hdentry *hdp, *p; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = au_hdentry(dinfo, bindex); + if (bindex < bbot) + memmove(hdp, hdp + 1, sizeof(*hdp) * (bbot - bindex)); + /* au_h_dentry_init(au_hdentry(dinfo, bbot); */ + dinfo->di_bbot--; + + p = au_krealloc(dinfo->di_hdentry, sizeof(*p) * bbot, AuGFP_SBILIST, + /*may_shrink*/1); + if (p) + dinfo->di_hdentry = p; + /* harmless error */ +} + +static void au_br_do_del_hip(struct au_iinfo *iinfo, const aufs_bindex_t bindex, + const aufs_bindex_t bbot) +{ + struct au_hinode *hip, *p; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = au_hinode(iinfo, bindex); + if (bindex < bbot) + memmove(hip, hip + 1, sizeof(*hip) * (bbot - bindex)); + /* au_hinode_init(au_hinode(iinfo, bbot)); */ + iinfo->ii_bbot--; + + p = au_krealloc(iinfo->ii_hinode, sizeof(*p) * bbot, AuGFP_SBILIST, + /*may_shrink*/1); + if (p) + iinfo->ii_hinode = p; + /* harmless error */ +} + +static void au_br_do_del(struct super_block *sb, aufs_bindex_t bindex, + struct au_branch *br) +{ + aufs_bindex_t bbot; + struct au_sbinfo *sbinfo; + struct dentry *root, *h_root; + struct inode *inode, *h_inode; + struct au_hinode *hinode; + + SiMustWriteLock(sb); + + root = sb->s_root; + inode = d_inode(root); + sbinfo = au_sbi(sb); + bbot = sbinfo->si_bbot; + + h_root = au_h_dptr(root, bindex); + hinode = au_hi(inode, bindex); + h_inode = au_igrab(hinode->hi_inode); + au_hiput(hinode); + + au_sbilist_lock(); + au_br_do_del_brp(sbinfo, bindex, bbot); + au_br_do_del_hdp(au_di(root), bindex, bbot); + au_br_do_del_hip(au_ii(inode), bindex, bbot); + au_sbilist_unlock(); + + /* ignore an error */ + au_dr_br_fin(sb, br); /* always, regardless the mount option */ + + dput(h_root); + iput(h_inode); + au_br_do_free(br); +} + +static unsigned long long empty_cb(struct super_block *sb, void *array, + unsigned long long max, void *arg) +{ + return max; +} + +int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount) +{ + int err, rerr, i; + unsigned long long opened; + unsigned int mnt_flags; + aufs_bindex_t bindex, bbot, br_id; + unsigned char do_wh, verbose; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *root; + struct file **to_free; + + err = 0; + opened = 0; + to_free = NULL; + root = sb->s_root; + bindex = au_find_dbindex(root, del->h_path.dentry); + if (bindex < 0) { + if (remount) + goto out; /* success */ + err = -ENOENT; + pr_err("%s no such branch\n", del->pathname); + goto out; + } + AuDbg("bindex b%d\n", bindex); + + err = -EBUSY; + mnt_flags = au_mntflags(sb); + verbose = !!au_opt_test(mnt_flags, VERBOSE); + bbot = au_sbbot(sb); + if (unlikely(!bbot)) { + AuVerbose(verbose, "no more branches left\n"); + goto out; + } + br = au_sbr(sb, bindex); + AuDebugOn(!path_equal(&br->br_path, &del->h_path)); + + br_id = br->br_id; + opened = au_br_count(br); + if (unlikely(opened)) { + to_free = au_array_alloc(&opened, empty_cb, sb, NULL); + err = PTR_ERR(to_free); + if (IS_ERR(to_free)) + goto out; + + err = test_file_busy(sb, br_id, to_free, opened); + if (unlikely(err)) { + AuVerbose(verbose, "%llu file(s) opened\n", opened); + goto out; + } + } + + wbr = br->br_wbr; + do_wh = wbr && (wbr->wbr_whbase || wbr->wbr_plink || wbr->wbr_orph); + if (do_wh) { + /* instead of WbrWhMustWriteLock(wbr) */ + SiMustWriteLock(sb); + for (i = 0; i < AuBrWh_Last; i++) { + dput(wbr->wbr_wh[i]); + wbr->wbr_wh[i] = NULL; + } + } + + err = test_children_busy(root, bindex, verbose); + if (unlikely(err)) { + if (do_wh) + goto out_wh; + goto out; + } + + err = 0; + if (to_free) { + /* + * now we confirmed the branch is deletable. + * let's free the remaining opened dirs on the branch. + */ + di_write_unlock(root); + br_del_file(to_free, opened, br_id); + di_write_lock_child(root); + } + + if (!remount) + au_br_do_del(sb, bindex, br); + else { + sysaufs_brs_del(sb, bindex); + au_br_do_del(sb, bindex, br); + sysaufs_brs_add(sb, bindex); + } + + if (!bindex) { + au_cpup_attr_all(d_inode(root), /*force*/1); + sb->s_maxbytes = au_sbr_sb(sb, 0)->s_maxbytes; + } else + au_sub_nlink(d_inode(root), d_inode(del->h_path.dentry)); + if (au_opt_test(mnt_flags, PLINK)) + au_plink_half_refresh(sb, br_id); + + if (au_xino_brid(sb) == br_id) + au_xino_brid_set(sb, -1); + goto out; /* success */ + +out_wh: + /* revert */ + rerr = au_br_init_wh(sb, br, br->br_perm); + if (rerr) + pr_warn("failed re-creating base whiteout, %s. (%d)\n", + del->pathname, rerr); +out: + if (to_free) + au_farray_free(to_free, opened); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_ibusy(struct super_block *sb, struct aufs_ibusy __user *arg) +{ + int err; + aufs_bindex_t btop, bbot; + struct aufs_ibusy ibusy; + struct inode *inode, *h_inode; + + err = -EPERM; + if (unlikely(!capable(CAP_SYS_ADMIN))) + goto out; + + err = copy_from_user(&ibusy, arg, sizeof(ibusy)); + if (!err) + err = !access_ok(VERIFY_WRITE, &arg->h_ino, sizeof(arg->h_ino)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + + err = -EINVAL; + si_read_lock(sb, AuLock_FLUSH); + if (unlikely(ibusy.bindex < 0 || ibusy.bindex > au_sbbot(sb))) + goto out_unlock; + + err = 0; + ibusy.h_ino = 0; /* invalid */ + inode = ilookup(sb, ibusy.ino); + if (!inode + || inode->i_ino == AUFS_ROOT_INO + || au_is_bad_inode(inode)) + goto out_unlock; + + ii_read_lock_child(inode); + btop = au_ibtop(inode); + bbot = au_ibbot(inode); + if (btop <= ibusy.bindex && ibusy.bindex <= bbot) { + h_inode = au_h_iptr(inode, ibusy.bindex); + if (h_inode && au_test_ibusy(inode, btop, bbot)) + ibusy.h_ino = h_inode->i_ino; + } + ii_read_unlock(inode); + iput(inode); + +out_unlock: + si_read_unlock(sb); + if (!err) { + err = __put_user(ibusy.h_ino, &arg->h_ino); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + } + } +out: + return err; +} + +long au_ibusy_ioctl(struct file *file, unsigned long arg) +{ + return au_ibusy(file->f_path.dentry->d_sb, (void __user *)arg); +} + +#ifdef CONFIG_COMPAT +long au_ibusy_compat_ioctl(struct file *file, unsigned long arg) +{ + return au_ibusy(file->f_path.dentry->d_sb, compat_ptr(arg)); +} +#endif + +/* ---------------------------------------------------------------------- */ + +/* + * change a branch permission + */ + +static void au_warn_ima(void) +{ +#ifdef CONFIG_IMA + /* since it doesn't support mark_files_ro() */ + AuWarn1("RW -> RO makes IMA to produce wrong message\n"); +#endif +} + +static int do_need_sigen_inc(int a, int b) +{ + return au_br_whable(a) && !au_br_whable(b); +} + +static int need_sigen_inc(int old, int new) +{ + return do_need_sigen_inc(old, new) + || do_need_sigen_inc(new, old); +} + +static int au_br_mod_files_ro(struct super_block *sb, aufs_bindex_t bindex) +{ + int err, do_warn; + unsigned int mnt_flags; + unsigned long long ull, max; + aufs_bindex_t br_id; + unsigned char verbose, writer; + struct file *file, *hf, **array; + struct au_hfile *hfile; + + mnt_flags = au_mntflags(sb); + verbose = !!au_opt_test(mnt_flags, VERBOSE); + + array = au_farray_alloc(sb, &max); + err = PTR_ERR(array); + if (IS_ERR(array)) + goto out; + + do_warn = 0; + br_id = au_sbr_id(sb, bindex); + for (ull = 0; ull < max; ull++) { + file = array[ull]; + if (unlikely(!file)) + break; + + /* AuDbg("%pD\n", file); */ + fi_read_lock(file); + if (unlikely(au_test_mmapped(file))) { + err = -EBUSY; + AuVerbose(verbose, "mmapped %pD\n", file); + AuDbgFile(file); + FiMustNoWaiters(file); + fi_read_unlock(file); + goto out_array; + } + + hfile = &au_fi(file)->fi_htop; + hf = hfile->hf_file; + if (!d_is_reg(file->f_path.dentry) + || !(file->f_mode & FMODE_WRITE) + || hfile->hf_br->br_id != br_id + || !(hf->f_mode & FMODE_WRITE)) + array[ull] = NULL; + else { + do_warn = 1; + get_file(file); + } + + FiMustNoWaiters(file); + fi_read_unlock(file); + fput(file); + } + + err = 0; + if (do_warn) + au_warn_ima(); + + for (ull = 0; ull < max; ull++) { + file = array[ull]; + if (!file) + continue; + + /* todo: already flushed? */ + /* + * fs/super.c:mark_files_ro() is gone, but aufs keeps its + * approach which resets f_mode and calls mnt_drop_write() and + * file_release_write() for each file, because the branch + * attribute in aufs world is totally different from the native + * fs rw/ro mode. + */ + /* fi_read_lock(file); */ + hfile = &au_fi(file)->fi_htop; + hf = hfile->hf_file; + /* fi_read_unlock(file); */ + spin_lock(&hf->f_lock); + writer = !!(hf->f_mode & FMODE_WRITER); + hf->f_mode &= ~(FMODE_WRITE | FMODE_WRITER); + spin_unlock(&hf->f_lock); + if (writer) { + put_write_access(file_inode(hf)); + __mnt_drop_write(hf->f_path.mnt); + } + } + +out_array: + au_farray_free(array, max); +out: + AuTraceErr(err); + return err; +} + +int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, + int *do_refresh) +{ + int err, rerr; + aufs_bindex_t bindex; + struct dentry *root; + struct au_branch *br; + struct au_br_fhsm *bf; + + root = sb->s_root; + bindex = au_find_dbindex(root, mod->h_root); + if (bindex < 0) { + if (remount) + return 0; /* success */ + err = -ENOENT; + pr_err("%s no such branch\n", mod->path); + goto out; + } + AuDbg("bindex b%d\n", bindex); + + err = test_br(d_inode(mod->h_root), mod->perm, mod->path); + if (unlikely(err)) + goto out; + + br = au_sbr(sb, bindex); + AuDebugOn(mod->h_root != au_br_dentry(br)); + if (br->br_perm == mod->perm) + return 0; /* success */ + + /* pre-allocate for non-fhsm --> fhsm */ + bf = NULL; + if (!au_br_fhsm(br->br_perm) && au_br_fhsm(mod->perm)) { + err = au_fhsm_br_alloc(br); + if (unlikely(err)) + goto out; + bf = br->br_fhsm; + br->br_fhsm = NULL; + } + + if (au_br_writable(br->br_perm)) { + /* remove whiteout base */ + err = au_br_init_wh(sb, br, mod->perm); + if (unlikely(err)) + goto out_bf; + + if (!au_br_writable(mod->perm)) { + /* rw --> ro, file might be mmapped */ + DiMustNoWaiters(root); + IiMustNoWaiters(d_inode(root)); + di_write_unlock(root); + err = au_br_mod_files_ro(sb, bindex); + /* aufs_write_lock() calls ..._child() */ + di_write_lock_child(root); + + if (unlikely(err)) { + rerr = -ENOMEM; + br->br_wbr = kzalloc(sizeof(*br->br_wbr), + GFP_NOFS); + if (br->br_wbr) + rerr = au_wbr_init(br, sb, br->br_perm); + if (unlikely(rerr)) { + AuIOErr("nested error %d (%d)\n", + rerr, err); + br->br_perm = mod->perm; + } + } + } + } else if (au_br_writable(mod->perm)) { + /* ro --> rw */ + err = -ENOMEM; + br->br_wbr = kzalloc(sizeof(*br->br_wbr), GFP_NOFS); + if (br->br_wbr) { + err = au_wbr_init(br, sb, mod->perm); + if (unlikely(err)) { + kfree(br->br_wbr); + br->br_wbr = NULL; + } + } + } + if (unlikely(err)) + goto out_bf; + + if (au_br_fhsm(br->br_perm)) { + if (!au_br_fhsm(mod->perm)) { + /* fhsm --> non-fhsm */ + au_br_fhsm_fin(br->br_fhsm); + kfree(br->br_fhsm); + br->br_fhsm = NULL; + } + } else if (au_br_fhsm(mod->perm)) + /* non-fhsm --> fhsm */ + br->br_fhsm = bf; + + *do_refresh |= need_sigen_inc(br->br_perm, mod->perm); + br->br_perm = mod->perm; + goto out; /* success */ + +out_bf: + kfree(bf); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_br_stfs(struct au_branch *br, struct aufs_stfs *stfs) +{ + int err; + struct kstatfs kstfs; + + err = vfs_statfs(&br->br_path, &kstfs); + if (!err) { + stfs->f_blocks = kstfs.f_blocks; + stfs->f_bavail = kstfs.f_bavail; + stfs->f_files = kstfs.f_files; + stfs->f_ffree = kstfs.f_ffree; + } + + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/branch.h +++ linux-aws-4.15.0/fs/aufs/branch.h @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * branch filesystems and xino for them + */ + +#ifndef __AUFS_BRANCH_H__ +#define __AUFS_BRANCH_H__ + +#ifdef __KERNEL__ + +#include +#include "dirren.h" +#include "dynop.h" +#include "rwsem.h" +#include "super.h" + +/* ---------------------------------------------------------------------- */ + +/* a xino file */ +struct au_xino_file { + struct file *xi_file; + struct { + spinlock_t spin; + ino_t *array; + int total; + /* reserved for future use */ + /* unsigned long *bitmap; */ + wait_queue_head_t wqh; + } xi_nondir; + + /* todo: make xino files an array to support huge inode number */ + +#ifdef CONFIG_DEBUG_FS + struct dentry *xi_dbgaufs; +#endif +}; + +/* File-based Hierarchical Storage Management */ +struct au_br_fhsm { +#ifdef CONFIG_AUFS_FHSM + struct mutex bf_lock; + unsigned long bf_jiffy; + struct aufs_stfs bf_stfs; + int bf_readable; +#endif +}; + +/* members for writable branch only */ +enum {AuBrWh_BASE, AuBrWh_PLINK, AuBrWh_ORPH, AuBrWh_Last}; +struct au_wbr { + struct au_rwsem wbr_wh_rwsem; + struct dentry *wbr_wh[AuBrWh_Last]; + atomic_t wbr_wh_running; +#define wbr_whbase wbr_wh[AuBrWh_BASE] /* whiteout base */ +#define wbr_plink wbr_wh[AuBrWh_PLINK] /* pseudo-link dir */ +#define wbr_orph wbr_wh[AuBrWh_ORPH] /* dir for orphans */ + + /* mfs mode */ + unsigned long long wbr_bytes; +}; + +/* ext2 has 3 types of operations at least, ext3 has 4 */ +#define AuBrDynOp (AuDyLast * 4) + +#ifdef CONFIG_AUFS_HFSNOTIFY +/* support for asynchronous destruction */ +struct au_br_hfsnotify { + struct fsnotify_group *hfsn_group; +}; +#endif + +/* sysfs entries */ +struct au_brsysfs { + char name[16]; + struct attribute attr; +}; + +enum { + AuBrSysfs_BR, + AuBrSysfs_BRID, + AuBrSysfs_Last +}; + +/* protected by superblock rwsem */ +struct au_branch { + struct au_xino_file br_xino; + + aufs_bindex_t br_id; + + int br_perm; + struct path br_path; + spinlock_t br_dykey_lock; + struct au_dykey *br_dykey[AuBrDynOp]; + struct percpu_counter br_count; + + struct au_wbr *br_wbr; + struct au_br_fhsm *br_fhsm; + + /* xino truncation */ + atomic_t br_xino_running; + +#ifdef CONFIG_AUFS_HFSNOTIFY + struct au_br_hfsnotify *br_hfsn; +#endif + +#ifdef CONFIG_SYSFS + /* entries under sysfs per mount-point */ + struct au_brsysfs br_sysfs[AuBrSysfs_Last]; +#endif + + struct au_dr_br br_dirren; +}; + +/* ---------------------------------------------------------------------- */ + +static inline struct vfsmount *au_br_mnt(struct au_branch *br) +{ + return br->br_path.mnt; +} + +static inline struct dentry *au_br_dentry(struct au_branch *br) +{ + return br->br_path.dentry; +} + +static inline struct super_block *au_br_sb(struct au_branch *br) +{ + return au_br_mnt(br)->mnt_sb; +} + +static inline void au_br_get(struct au_branch *br) +{ + percpu_counter_inc(&br->br_count); +} + +static inline void au_br_put(struct au_branch *br) +{ + percpu_counter_dec(&br->br_count); +} + +static inline s64 au_br_count(struct au_branch *br) +{ + return percpu_counter_sum(&br->br_count); +} + +static inline void au_br_count_init(struct au_branch *br) +{ + percpu_counter_init(&br->br_count, 0, GFP_NOFS); +} + +static inline void au_br_count_fin(struct au_branch *br) +{ + percpu_counter_destroy(&br->br_count); +} + +static inline int au_br_rdonly(struct au_branch *br) +{ + return (sb_rdonly(au_br_sb(br)) + || !au_br_writable(br->br_perm)) + ? -EROFS : 0; +} + +static inline int au_br_hnotifyable(int brperm __maybe_unused) +{ +#ifdef CONFIG_AUFS_HNOTIFY + return !(brperm & AuBrPerm_RR); +#else + return 0; +#endif +} + +static inline int au_br_test_oflag(int oflag, struct au_branch *br) +{ + int err, exec_flag; + + err = 0; + exec_flag = oflag & __FMODE_EXEC; + if (unlikely(exec_flag && path_noexec(&br->br_path))) + err = -EACCES; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* branch.c */ +struct au_sbinfo; +void au_br_free(struct au_sbinfo *sinfo); +int au_br_index(struct super_block *sb, aufs_bindex_t br_id); +struct au_opt_add; +int au_br_add(struct super_block *sb, struct au_opt_add *add, int remount); +struct au_opt_del; +int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount); +long au_ibusy_ioctl(struct file *file, unsigned long arg); +#ifdef CONFIG_COMPAT +long au_ibusy_compat_ioctl(struct file *file, unsigned long arg); +#endif +struct au_opt_mod; +int au_br_mod(struct super_block *sb, struct au_opt_mod *mod, int remount, + int *do_refresh); +struct aufs_stfs; +int au_br_stfs(struct au_branch *br, struct aufs_stfs *stfs); + +/* xino.c */ +static const loff_t au_loff_max = LLONG_MAX; + +int au_xib_trunc(struct super_block *sb); +ssize_t xino_fread(vfs_readf_t func, struct file *file, void *buf, size_t size, + loff_t *pos); +ssize_t xino_fwrite(vfs_writef_t func, struct file *file, void *buf, + size_t size, loff_t *pos); +struct file *au_xino_create2(struct file *base_file, struct file *copy_src); +struct file *au_xino_create(struct super_block *sb, char *fname, int silent); +ino_t au_xino_new_ino(struct super_block *sb); +void au_xino_delete_inode(struct inode *inode, const int unlinked); +int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino); +int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t *ino); +int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t hino, + struct file *base_file, int do_test); +int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex); + +struct au_opt_xino; +int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount); +void au_xino_clr(struct super_block *sb); +struct file *au_xino_def(struct super_block *sb); +int au_xino_path(struct seq_file *seq, struct file *file); + +void au_xinondir_leave(struct super_block *sb, aufs_bindex_t bindex, + ino_t h_ino, int idx); +int au_xinondir_enter(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + int *idx); + +/* ---------------------------------------------------------------------- */ + +/* Superblock to branch */ +static inline +aufs_bindex_t au_sbr_id(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr(sb, bindex)->br_id; +} + +static inline +struct vfsmount *au_sbr_mnt(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_br_mnt(au_sbr(sb, bindex)); +} + +static inline +struct super_block *au_sbr_sb(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_br_sb(au_sbr(sb, bindex)); +} + +static inline void au_sbr_get(struct super_block *sb, aufs_bindex_t bindex) +{ + au_br_get(au_sbr(sb, bindex)); +} + +static inline void au_sbr_put(struct super_block *sb, aufs_bindex_t bindex) +{ + au_br_put(au_sbr(sb, bindex)); +} + +static inline int au_sbr_perm(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr(sb, bindex)->br_perm; +} + +static inline int au_sbr_whable(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_br_whable(au_sbr_perm(sb, bindex)); +} + +/* ---------------------------------------------------------------------- */ + +#define wbr_wh_read_lock(wbr) au_rw_read_lock(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_write_lock(wbr) au_rw_write_lock(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_read_trylock(wbr) au_rw_read_trylock(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_write_trylock(wbr) au_rw_write_trylock(&(wbr)->wbr_wh_rwsem) +/* +#define wbr_wh_read_trylock_nested(wbr) \ + au_rw_read_trylock_nested(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_write_trylock_nested(wbr) \ + au_rw_write_trylock_nested(&(wbr)->wbr_wh_rwsem) +*/ + +#define wbr_wh_read_unlock(wbr) au_rw_read_unlock(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_write_unlock(wbr) au_rw_write_unlock(&(wbr)->wbr_wh_rwsem) +#define wbr_wh_downgrade_lock(wbr) au_rw_dgrade_lock(&(wbr)->wbr_wh_rwsem) + +#define WbrWhMustNoWaiters(wbr) AuRwMustNoWaiters(&(wbr)->wbr_wh_rwsem) +#define WbrWhMustAnyLock(wbr) AuRwMustAnyLock(&(wbr)->wbr_wh_rwsem) +#define WbrWhMustWriteLock(wbr) AuRwMustWriteLock(&(wbr)->wbr_wh_rwsem) + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_FHSM +static inline void au_br_fhsm_init(struct au_br_fhsm *brfhsm) +{ + mutex_init(&brfhsm->bf_lock); + brfhsm->bf_jiffy = 0; + brfhsm->bf_readable = 0; +} + +static inline void au_br_fhsm_fin(struct au_br_fhsm *brfhsm) +{ + mutex_destroy(&brfhsm->bf_lock); +} +#else +AuStubVoid(au_br_fhsm_init, struct au_br_fhsm *brfhsm) +AuStubVoid(au_br_fhsm_fin, struct au_br_fhsm *brfhsm) +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_BRANCH_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/conf.mk +++ linux-aws-4.15.0/fs/aufs/conf.mk @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-2.0 + +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS} + +define AuConf +ifdef ${1} +AuConfStr += ${1}=${${1}} +endif +endef + +AuConfAll = BRANCH_MAX_127 BRANCH_MAX_511 BRANCH_MAX_1023 BRANCH_MAX_32767 \ + SBILIST \ + HNOTIFY HFSNOTIFY \ + EXPORT INO_T_64 \ + XATTR \ + FHSM \ + RDU \ + DIRREN \ + SHWH \ + BR_RAMFS \ + BR_FUSE POLL \ + BR_HFSPLUS \ + BDEV_LOOP \ + DEBUG MAGIC_SYSRQ +$(foreach i, ${AuConfAll}, \ + $(eval $(call AuConf,CONFIG_AUFS_${i}))) + +AuConfName = ${obj}/conf.str +${AuConfName}.tmp: FORCE + @echo ${AuConfStr} | tr ' ' '\n' | sed -e 's/^/"/' -e 's/$$/\\n"/' > $@ +${AuConfName}: ${AuConfName}.tmp + @diff -q $< $@ > /dev/null 2>&1 || { \ + echo ' GEN ' $@; \ + cp -p $< $@; \ + } +FORCE: +clean-files += ${AuConfName} ${AuConfName}.tmp +${obj}/sysfs.o: ${AuConfName} + +-include ${srctree}/${src}/conf_priv.mk --- linux-aws-4.15.0.orig/fs/aufs/cpup.c +++ linux-aws-4.15.0/fs/aufs/cpup.c @@ -0,0 +1,1442 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * copy-up functions, see wbr_policy.c for copy-down + */ + +#include +#include +#include +#include "aufs.h" + +void au_cpup_attr_flags(struct inode *dst, unsigned int iflags) +{ + const unsigned int mask = S_DEAD | S_SWAPFILE | S_PRIVATE + | S_NOATIME | S_NOCMTIME | S_AUTOMOUNT; + + BUILD_BUG_ON(sizeof(iflags) != sizeof(dst->i_flags)); + + dst->i_flags |= iflags & ~mask; + if (au_test_fs_notime(dst->i_sb)) + dst->i_flags |= S_NOATIME | S_NOCMTIME; +} + +void au_cpup_attr_timesizes(struct inode *inode) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibtop(inode)); + fsstack_copy_attr_times(inode, h_inode); + fsstack_copy_inode_size(inode, h_inode); +} + +void au_cpup_attr_nlink(struct inode *inode, int force) +{ + struct inode *h_inode; + struct super_block *sb; + aufs_bindex_t bindex, bbot; + + sb = inode->i_sb; + bindex = au_ibtop(inode); + h_inode = au_h_iptr(inode, bindex); + if (!force + && !S_ISDIR(h_inode->i_mode) + && au_opt_test(au_mntflags(sb), PLINK) + && au_plink_test(inode)) + return; + + /* + * 0 can happen in revalidating. + * h_inode->i_mutex may not be held here, but it is harmless since once + * i_nlink reaches 0, it will never become positive except O_TMPFILE + * case. + * todo: O_TMPFILE+linkat(AT_SYMLINK_FOLLOW) bypassing aufs may cause + * the incorrect link count. + */ + set_nlink(inode, h_inode->i_nlink); + + /* + * fewer nlink makes find(1) noisy, but larger nlink doesn't. + * it may includes whplink directory. + */ + if (S_ISDIR(h_inode->i_mode)) { + bbot = au_ibbot(inode); + for (bindex++; bindex <= bbot; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode) + au_add_nlink(inode, h_inode); + } + } +} + +void au_cpup_attr_changeable(struct inode *inode) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibtop(inode)); + inode->i_mode = h_inode->i_mode; + inode->i_uid = h_inode->i_uid; + inode->i_gid = h_inode->i_gid; + au_cpup_attr_timesizes(inode); + au_cpup_attr_flags(inode, h_inode->i_flags); +} + +void au_cpup_igen(struct inode *inode, struct inode *h_inode) +{ + struct au_iinfo *iinfo = au_ii(inode); + + IiMustWriteLock(inode); + + iinfo->ii_higen = h_inode->i_generation; + iinfo->ii_hsb1 = h_inode->i_sb; +} + +void au_cpup_attr_all(struct inode *inode, int force) +{ + struct inode *h_inode; + + h_inode = au_h_iptr(inode, au_ibtop(inode)); + au_cpup_attr_changeable(inode); + if (inode->i_nlink > 0) + au_cpup_attr_nlink(inode, force); + inode->i_rdev = h_inode->i_rdev; + inode->i_blkbits = h_inode->i_blkbits; + au_cpup_igen(inode, h_inode); +} + +/* ---------------------------------------------------------------------- */ + +/* Note: dt_dentry and dt_h_dentry are not dget/dput-ed */ + +/* keep the timestamps of the parent dir when cpup */ +void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, + struct path *h_path) +{ + struct inode *h_inode; + + dt->dt_dentry = dentry; + dt->dt_h_path = *h_path; + h_inode = d_inode(h_path->dentry); + dt->dt_atime = h_inode->i_atime; + dt->dt_mtime = h_inode->i_mtime; + /* smp_mb(); */ +} + +void au_dtime_revert(struct au_dtime *dt) +{ + struct iattr attr; + int err; + + attr.ia_atime = dt->dt_atime; + attr.ia_mtime = dt->dt_mtime; + attr.ia_valid = ATTR_FORCE | ATTR_MTIME | ATTR_MTIME_SET + | ATTR_ATIME | ATTR_ATIME_SET; + + /* no delegation since this is a directory */ + err = vfsub_notify_change(&dt->dt_h_path, &attr, /*delegated*/NULL); + if (unlikely(err)) + pr_warn("restoring timestamps failed(%d). ignored\n", err); +} + +/* ---------------------------------------------------------------------- */ + +/* internal use only */ +struct au_cpup_reg_attr { + int valid; + struct kstat st; + unsigned int iflags; /* inode->i_flags */ +}; + +static noinline_for_stack +int cpup_iattr(struct dentry *dst, aufs_bindex_t bindex, struct dentry *h_src, + struct au_cpup_reg_attr *h_src_attr) +{ + int err, sbits, icex; + unsigned int mnt_flags; + unsigned char verbose; + struct iattr ia; + struct path h_path; + struct inode *h_isrc, *h_idst; + struct kstat *h_st; + struct au_branch *br; + + h_path.dentry = au_h_dptr(dst, bindex); + h_idst = d_inode(h_path.dentry); + br = au_sbr(dst->d_sb, bindex); + h_path.mnt = au_br_mnt(br); + h_isrc = d_inode(h_src); + ia.ia_valid = ATTR_FORCE | ATTR_UID | ATTR_GID + | ATTR_ATIME | ATTR_MTIME + | ATTR_ATIME_SET | ATTR_MTIME_SET; + if (h_src_attr && h_src_attr->valid) { + h_st = &h_src_attr->st; + ia.ia_uid = h_st->uid; + ia.ia_gid = h_st->gid; + ia.ia_atime = h_st->atime; + ia.ia_mtime = h_st->mtime; + if (h_idst->i_mode != h_st->mode + && !S_ISLNK(h_idst->i_mode)) { + ia.ia_valid |= ATTR_MODE; + ia.ia_mode = h_st->mode; + } + sbits = !!(h_st->mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_idst, h_src_attr->iflags); + } else { + ia.ia_uid = h_isrc->i_uid; + ia.ia_gid = h_isrc->i_gid; + ia.ia_atime = h_isrc->i_atime; + ia.ia_mtime = h_isrc->i_mtime; + if (h_idst->i_mode != h_isrc->i_mode + && !S_ISLNK(h_idst->i_mode)) { + ia.ia_valid |= ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + } + sbits = !!(h_isrc->i_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_idst, h_isrc->i_flags); + } + /* no delegation since it is just created */ + err = vfsub_notify_change(&h_path, &ia, /*delegated*/NULL); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path.dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + err = vfsub_notify_change(&h_path, &ia, /*delegated*/NULL); + } + + icex = br->br_perm & AuBrAttr_ICEX; + if (!err) { + mnt_flags = au_mntflags(dst->d_sb); + verbose = !!au_opt_test(mnt_flags, VERBOSE); + err = au_cpup_xattr(h_path.dentry, h_src, icex, verbose); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_copy_file(struct file *dst, struct file *src, loff_t len, + char *buf, unsigned long blksize) +{ + int err; + size_t sz, rbytes, wbytes; + unsigned char all_zero; + char *p, *zp; + struct inode *h_inode; + /* reduce stack usage */ + struct iattr *ia; + + zp = page_address(ZERO_PAGE(0)); + if (unlikely(!zp)) + return -ENOMEM; /* possible? */ + + err = 0; + all_zero = 0; + while (len) { + AuDbg("len %lld\n", len); + sz = blksize; + if (len < blksize) + sz = len; + + rbytes = 0; + /* todo: signal_pending? */ + while (!rbytes || err == -EAGAIN || err == -EINTR) { + rbytes = vfsub_read_k(src, buf, sz, &src->f_pos); + err = rbytes; + } + if (unlikely(err < 0)) + break; + + all_zero = 0; + if (len >= rbytes && rbytes == blksize) + all_zero = !memcmp(buf, zp, rbytes); + if (!all_zero) { + wbytes = rbytes; + p = buf; + while (wbytes) { + size_t b; + + b = vfsub_write_k(dst, p, wbytes, &dst->f_pos); + err = b; + /* todo: signal_pending? */ + if (unlikely(err == -EAGAIN || err == -EINTR)) + continue; + if (unlikely(err < 0)) + break; + wbytes -= b; + p += b; + } + if (unlikely(err < 0)) + break; + } else { + loff_t res; + + AuLabel(hole); + res = vfsub_llseek(dst, rbytes, SEEK_CUR); + err = res; + if (unlikely(res < 0)) + break; + } + len -= rbytes; + err = 0; + } + + /* the last block may be a hole */ + if (!err && all_zero) { + AuLabel(last hole); + + err = 1; + if (au_test_nfs(dst->f_path.dentry->d_sb)) { + /* nfs requires this step to make last hole */ + /* is this only nfs? */ + do { + /* todo: signal_pending? */ + err = vfsub_write_k(dst, "\0", 1, &dst->f_pos); + } while (err == -EAGAIN || err == -EINTR); + if (err == 1) + dst->f_pos--; + } + + if (err == 1) { + ia = (void *)buf; + ia->ia_size = dst->f_pos; + ia->ia_valid = ATTR_SIZE | ATTR_FILE; + ia->ia_file = dst; + h_inode = file_inode(dst); + inode_lock_nested(h_inode, AuLsc_I_CHILD2); + /* no delegation since it is just created */ + err = vfsub_notify_change(&dst->f_path, ia, + /*delegated*/NULL); + inode_unlock(h_inode); + } + } + + return err; +} + +int au_copy_file(struct file *dst, struct file *src, loff_t len) +{ + int err; + unsigned long blksize; + unsigned char do_kfree; + char *buf; + + err = -ENOMEM; + blksize = dst->f_path.dentry->d_sb->s_blocksize; + if (!blksize || PAGE_SIZE < blksize) + blksize = PAGE_SIZE; + AuDbg("blksize %lu\n", blksize); + do_kfree = (blksize != PAGE_SIZE && blksize >= sizeof(struct iattr *)); + if (do_kfree) + buf = kmalloc(blksize, GFP_NOFS); + else + buf = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!buf)) + goto out; + + if (len > (1 << 22)) + AuDbg("copying a large file %lld\n", (long long)len); + + src->f_pos = 0; + dst->f_pos = 0; + err = au_do_copy_file(dst, src, len, buf, blksize); + if (do_kfree) + kfree(buf); + else + free_page((unsigned long)buf); + +out: + return err; +} + +static int au_do_copy(struct file *dst, struct file *src, loff_t len) +{ + int err; + struct super_block *h_src_sb; + struct inode *h_src_inode; + + h_src_inode = file_inode(src); + h_src_sb = h_src_inode->i_sb; + + /* XFS acquires inode_lock */ + if (!au_test_xfs(h_src_sb)) + err = au_copy_file(dst, src, len); + else { + inode_unlock_shared(h_src_inode); + err = au_copy_file(dst, src, len); + vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + } + + return err; +} + +static int au_clone_or_copy(struct file *dst, struct file *src, loff_t len) +{ + int err; + struct super_block *h_src_sb; + struct inode *h_src_inode; + + h_src_inode = file_inode(src); + h_src_sb = h_src_inode->i_sb; + if (h_src_sb != file_inode(dst)->i_sb + || !dst->f_op->clone_file_range) { + err = au_do_copy(dst, src, len); + goto out; + } + + if (!au_test_nfs(h_src_sb)) { + inode_unlock_shared(h_src_inode); + err = vfsub_clone_file_range(src, dst, len); + vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + } else + err = vfsub_clone_file_range(src, dst, len); + /* older XFS has a condition in cloning */ + if (unlikely(err != -EOPNOTSUPP)) + goto out; + + /* the backend fs on NFS may not support cloning */ + err = au_do_copy(dst, src, len); + +out: + AuTraceErr(err); + return err; +} + +/* + * to support a sparse file which is opened with O_APPEND, + * we need to close the file. + */ +static int au_cp_regular(struct au_cp_generic *cpg) +{ + int err, i; + enum { SRC, DST }; + struct { + aufs_bindex_t bindex; + unsigned int flags; + struct dentry *dentry; + int force_wr; + struct file *file; + void *label; + } *f, file[] = { + { + .bindex = cpg->bsrc, + .flags = O_RDONLY | O_NOATIME | O_LARGEFILE, + .label = &&out + }, + { + .bindex = cpg->bdst, + .flags = O_WRONLY | O_NOATIME | O_LARGEFILE, + .force_wr = !!au_ftest_cpup(cpg->flags, RWDST), + .label = &&out_src + } + }; + struct super_block *sb, *h_src_sb; + struct inode *h_src_inode; + struct task_struct *tsk = current; + + /* bsrc branch can be ro/rw. */ + sb = cpg->dentry->d_sb; + f = file; + for (i = 0; i < 2; i++, f++) { + f->dentry = au_h_dptr(cpg->dentry, f->bindex); + f->file = au_h_open(cpg->dentry, f->bindex, f->flags, + /*file*/NULL, f->force_wr); + err = PTR_ERR(f->file); + if (IS_ERR(f->file)) + goto *f->label; + } + + /* try stopping to update while we copyup */ + h_src_inode = d_inode(file[SRC].dentry); + h_src_sb = h_src_inode->i_sb; + if (!au_test_nfs(h_src_sb)) + IMustLock(h_src_inode); + err = au_clone_or_copy(file[DST].file, file[SRC].file, cpg->len); + + /* i wonder if we had O_NO_DELAY_FPUT flag */ + if (tsk->flags & PF_KTHREAD) + __fput_sync(file[DST].file); + else { + /* it happend actually */ + fput(file[DST].file); + /* + * too bad. + * we have to call both since we don't know which place the file + * was added to. + */ + task_work_run(); + flush_delayed_fput(); + } + au_sbr_put(sb, file[DST].bindex); + +out_src: + fput(file[SRC].file); + au_sbr_put(sb, file[SRC].bindex); +out: + return err; +} + +static int au_do_cpup_regular(struct au_cp_generic *cpg, + struct au_cpup_reg_attr *h_src_attr) +{ + int err, rerr; + loff_t l; + struct path h_path; + struct inode *h_src_inode, *h_dst_inode; + + err = 0; + h_src_inode = au_h_iptr(d_inode(cpg->dentry), cpg->bsrc); + l = i_size_read(h_src_inode); + if (cpg->len == -1 || l < cpg->len) + cpg->len = l; + if (cpg->len) { + /* try stopping to update while we are referencing */ + vfsub_inode_lock_shared_nested(h_src_inode, AuLsc_I_CHILD); + au_pin_hdir_unlock(cpg->pin); + + h_path.dentry = au_h_dptr(cpg->dentry, cpg->bsrc); + h_path.mnt = au_sbr_mnt(cpg->dentry->d_sb, cpg->bsrc); + h_src_attr->iflags = h_src_inode->i_flags; + if (!au_test_nfs(h_src_inode->i_sb)) + err = vfsub_getattr(&h_path, &h_src_attr->st); + else { + inode_unlock_shared(h_src_inode); + err = vfsub_getattr(&h_path, &h_src_attr->st); + vfsub_inode_lock_shared_nested(h_src_inode, + AuLsc_I_CHILD); + } + if (unlikely(err)) { + inode_unlock_shared(h_src_inode); + goto out; + } + h_src_attr->valid = 1; + if (!au_test_nfs(h_src_inode->i_sb)) { + err = au_cp_regular(cpg); + inode_unlock_shared(h_src_inode); + } else { + inode_unlock_shared(h_src_inode); + err = au_cp_regular(cpg); + } + rerr = au_pin_hdir_relock(cpg->pin); + if (!err && rerr) + err = rerr; + } + if (!err && (h_src_inode->i_state & I_LINKABLE)) { + h_path.dentry = au_h_dptr(cpg->dentry, cpg->bdst); + h_dst_inode = d_inode(h_path.dentry); + spin_lock(&h_dst_inode->i_lock); + h_dst_inode->i_state |= I_LINKABLE; + spin_unlock(&h_dst_inode->i_lock); + } + +out: + return err; +} + +static int au_do_cpup_symlink(struct path *h_path, struct dentry *h_src, + struct inode *h_dir) +{ + int err, symlen; + mm_segment_t old_fs; + union { + char *k; + char __user *u; + } sym; + + err = -ENOMEM; + sym.k = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!sym.k)) + goto out; + + /* unnecessary to support mmap_sem since symlink is not mmap-able */ + old_fs = get_fs(); + set_fs(KERNEL_DS); + symlen = vfs_readlink(h_src, sym.u, PATH_MAX); + err = symlen; + set_fs(old_fs); + + if (symlen > 0) { + sym.k[symlen] = 0; + err = vfsub_symlink(h_dir, h_path, sym.k); + } + free_page((unsigned long)sym.k); + +out: + return err; +} + +/* + * regardless 'acl' option, reset all ACL. + * All ACL will be copied up later from the original entry on the lower branch. + */ +static int au_reset_acl(struct inode *h_dir, struct path *h_path, umode_t mode) +{ + int err; + struct dentry *h_dentry; + struct inode *h_inode; + + h_dentry = h_path->dentry; + h_inode = d_inode(h_dentry); + /* forget_all_cached_acls(h_inode)); */ + err = vfsub_removexattr(h_dentry, XATTR_NAME_POSIX_ACL_ACCESS); + AuTraceErr(err); + if (err == -EOPNOTSUPP) + err = 0; + if (!err) + err = vfsub_acl_chmod(h_inode, mode); + + AuTraceErr(err); + return err; +} + +static int au_do_cpup_dir(struct au_cp_generic *cpg, struct dentry *dst_parent, + struct inode *h_dir, struct path *h_path) +{ + int err; + struct inode *dir, *inode; + + err = vfsub_removexattr(h_path->dentry, XATTR_NAME_POSIX_ACL_DEFAULT); + AuTraceErr(err); + if (err == -EOPNOTSUPP) + err = 0; + if (unlikely(err)) + goto out; + + /* + * strange behaviour from the users view, + * particularry setattr case + */ + dir = d_inode(dst_parent); + if (au_ibtop(dir) == cpg->bdst) + au_cpup_attr_nlink(dir, /*force*/1); + inode = d_inode(cpg->dentry); + au_cpup_attr_nlink(inode, /*force*/1); + +out: + return err; +} + +static noinline_for_stack +int cpup_entry(struct au_cp_generic *cpg, struct dentry *dst_parent, + struct au_cpup_reg_attr *h_src_attr) +{ + int err; + umode_t mode; + unsigned int mnt_flags; + unsigned char isdir, isreg, force; + const unsigned char do_dt = !!au_ftest_cpup(cpg->flags, DTIME); + struct au_dtime dt; + struct path h_path; + struct dentry *h_src, *h_dst, *h_parent; + struct inode *h_inode, *h_dir; + struct super_block *sb; + + /* bsrc branch can be ro/rw. */ + h_src = au_h_dptr(cpg->dentry, cpg->bsrc); + h_inode = d_inode(h_src); + AuDebugOn(h_inode != au_h_iptr(d_inode(cpg->dentry), cpg->bsrc)); + + /* try stopping to be referenced while we are creating */ + h_dst = au_h_dptr(cpg->dentry, cpg->bdst); + if (au_ftest_cpup(cpg->flags, RENAME)) + AuDebugOn(strncmp(h_dst->d_name.name, AUFS_WH_PFX, + AUFS_WH_PFX_LEN)); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = d_inode(h_parent); + IMustLock(h_dir); + AuDebugOn(h_parent != h_dst->d_parent); + + sb = cpg->dentry->d_sb; + h_path.mnt = au_sbr_mnt(sb, cpg->bdst); + if (do_dt) { + h_path.dentry = h_parent; + au_dtime_store(&dt, dst_parent, &h_path); + } + h_path.dentry = h_dst; + + isreg = 0; + isdir = 0; + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + isreg = 1; + err = vfsub_create(h_dir, &h_path, S_IRUSR | S_IWUSR, + /*want_excl*/true); + if (!err) + err = au_do_cpup_regular(cpg, h_src_attr); + break; + case S_IFDIR: + isdir = 1; + err = vfsub_mkdir(h_dir, &h_path, mode); + if (!err) + err = au_do_cpup_dir(cpg, dst_parent, h_dir, &h_path); + break; + case S_IFLNK: + err = au_do_cpup_symlink(&h_path, h_src, h_dir); + break; + case S_IFCHR: + case S_IFBLK: + AuDebugOn(!capable(CAP_MKNOD)); + /*FALLTHROUGH*/ + case S_IFIFO: + case S_IFSOCK: + err = vfsub_mknod(h_dir, &h_path, mode, h_inode->i_rdev); + break; + default: + AuIOErr("Unknown inode type 0%o\n", mode); + err = -EIO; + } + if (!err) + err = au_reset_acl(h_dir, &h_path, mode); + + mnt_flags = au_mntflags(sb); + if (!au_opt_test(mnt_flags, UDBA_NONE) + && !isdir + && au_opt_test(mnt_flags, XINO) + && (h_inode->i_nlink == 1 + || (h_inode->i_state & I_LINKABLE)) + /* todo: unnecessary? */ + /* && d_inode(cpg->dentry)->i_nlink == 1 */ + && cpg->bdst < cpg->bsrc + && !au_ftest_cpup(cpg->flags, KEEPLINO)) + au_xino_write(sb, cpg->bsrc, h_inode->i_ino, /*ino*/0); + /* ignore this error */ + + if (!err) { + force = 0; + if (isreg) { + force = !!cpg->len; + if (cpg->len == -1) + force = !!i_size_read(h_inode); + } + au_fhsm_wrote(sb, cpg->bdst, force); + } + + if (do_dt) + au_dtime_revert(&dt); + return err; +} + +static int au_do_ren_after_cpup(struct au_cp_generic *cpg, struct path *h_path) +{ + int err; + struct dentry *dentry, *h_dentry, *h_parent, *parent; + struct inode *h_dir; + aufs_bindex_t bdst; + + dentry = cpg->dentry; + bdst = cpg->bdst; + h_dentry = au_h_dptr(dentry, bdst); + if (!au_ftest_cpup(cpg->flags, OVERWRITE)) { + dget(h_dentry); + au_set_h_dptr(dentry, bdst, NULL); + err = au_lkup_neg(dentry, bdst, /*wh*/0); + if (!err) + h_path->dentry = dget(au_h_dptr(dentry, bdst)); + au_set_h_dptr(dentry, bdst, h_dentry); + } else { + err = 0; + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bdst); + dput(parent); + h_path->dentry = vfsub_lkup_one(&dentry->d_name, h_parent); + if (IS_ERR(h_path->dentry)) + err = PTR_ERR(h_path->dentry); + } + if (unlikely(err)) + goto out; + + h_parent = h_dentry->d_parent; /* dir inode is locked */ + h_dir = d_inode(h_parent); + IMustLock(h_dir); + AuDbg("%pd %pd\n", h_dentry, h_path->dentry); + /* no delegation since it is just created */ + err = vfsub_rename(h_dir, h_dentry, h_dir, h_path, /*delegated*/NULL, + /*flags*/0); + dput(h_path->dentry); + +out: + return err; +} + +/* + * copyup the @dentry from @bsrc to @bdst. + * the caller must set the both of lower dentries. + * @len is for truncating when it is -1 copyup the entire file. + * in link/rename cases, @dst_parent may be different from the real one. + * basic->bsrc can be larger than basic->bdst. + * aufs doesn't touch the credential so + * security_inode_copy_up{,_xattr}() are unnecrssary. + */ +static int au_cpup_single(struct au_cp_generic *cpg, struct dentry *dst_parent) +{ + int err, rerr; + aufs_bindex_t old_ibtop; + unsigned char isdir, plink; + struct dentry *h_src, *h_dst, *h_parent; + struct inode *dst_inode, *h_dir, *inode, *delegated, *src_inode; + struct super_block *sb; + struct au_branch *br; + /* to reuduce stack size */ + struct { + struct au_dtime dt; + struct path h_path; + struct au_cpup_reg_attr h_src_attr; + } *a; + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + a->h_src_attr.valid = 0; + + sb = cpg->dentry->d_sb; + br = au_sbr(sb, cpg->bdst); + a->h_path.mnt = au_br_mnt(br); + h_dst = au_h_dptr(cpg->dentry, cpg->bdst); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = d_inode(h_parent); + IMustLock(h_dir); + + h_src = au_h_dptr(cpg->dentry, cpg->bsrc); + inode = d_inode(cpg->dentry); + + if (!dst_parent) + dst_parent = dget_parent(cpg->dentry); + else + dget(dst_parent); + + plink = !!au_opt_test(au_mntflags(sb), PLINK); + dst_inode = au_h_iptr(inode, cpg->bdst); + if (dst_inode) { + if (unlikely(!plink)) { + err = -EIO; + AuIOErr("hi%lu(i%lu) exists on b%d " + "but plink is disabled\n", + dst_inode->i_ino, inode->i_ino, cpg->bdst); + goto out_parent; + } + + if (dst_inode->i_nlink) { + const int do_dt = au_ftest_cpup(cpg->flags, DTIME); + + h_src = au_plink_lkup(inode, cpg->bdst); + err = PTR_ERR(h_src); + if (IS_ERR(h_src)) + goto out_parent; + if (unlikely(d_is_negative(h_src))) { + err = -EIO; + AuIOErr("i%lu exists on b%d " + "but not pseudo-linked\n", + inode->i_ino, cpg->bdst); + dput(h_src); + goto out_parent; + } + + if (do_dt) { + a->h_path.dentry = h_parent; + au_dtime_store(&a->dt, dst_parent, &a->h_path); + } + + a->h_path.dentry = h_dst; + delegated = NULL; + err = vfsub_link(h_src, h_dir, &a->h_path, &delegated); + if (!err && au_ftest_cpup(cpg->flags, RENAME)) + err = au_do_ren_after_cpup(cpg, &a->h_path); + if (do_dt) + au_dtime_revert(&a->dt); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + dput(h_src); + goto out_parent; + } else + /* todo: cpup_wh_file? */ + /* udba work */ + au_update_ibrange(inode, /*do_put_zero*/1); + } + + isdir = S_ISDIR(inode->i_mode); + old_ibtop = au_ibtop(inode); + err = cpup_entry(cpg, dst_parent, &a->h_src_attr); + if (unlikely(err)) + goto out_rev; + dst_inode = d_inode(h_dst); + inode_lock_nested(dst_inode, AuLsc_I_CHILD2); + /* todo: necessary? */ + /* au_pin_hdir_unlock(cpg->pin); */ + + err = cpup_iattr(cpg->dentry, cpg->bdst, h_src, &a->h_src_attr); + if (unlikely(err)) { + /* todo: necessary? */ + /* au_pin_hdir_relock(cpg->pin); */ /* ignore an error */ + inode_unlock(dst_inode); + goto out_rev; + } + + if (cpg->bdst < old_ibtop) { + if (S_ISREG(inode->i_mode)) { + err = au_dy_iaop(inode, cpg->bdst, dst_inode); + if (unlikely(err)) { + /* ignore an error */ + /* au_pin_hdir_relock(cpg->pin); */ + inode_unlock(dst_inode); + goto out_rev; + } + } + au_set_ibtop(inode, cpg->bdst); + } else + au_set_ibbot(inode, cpg->bdst); + au_set_h_iptr(inode, cpg->bdst, au_igrab(dst_inode), + au_hi_flags(inode, isdir)); + + /* todo: necessary? */ + /* err = au_pin_hdir_relock(cpg->pin); */ + inode_unlock(dst_inode); + if (unlikely(err)) + goto out_rev; + + src_inode = d_inode(h_src); + if (!isdir + && (src_inode->i_nlink > 1 + || src_inode->i_state & I_LINKABLE) + && plink) + au_plink_append(inode, cpg->bdst, h_dst); + + if (au_ftest_cpup(cpg->flags, RENAME)) { + a->h_path.dentry = h_dst; + err = au_do_ren_after_cpup(cpg, &a->h_path); + } + if (!err) + goto out_parent; /* success */ + + /* revert */ +out_rev: + a->h_path.dentry = h_parent; + au_dtime_store(&a->dt, dst_parent, &a->h_path); + a->h_path.dentry = h_dst; + rerr = 0; + if (d_is_positive(h_dst)) { + if (!isdir) { + /* no delegation since it is just created */ + rerr = vfsub_unlink(h_dir, &a->h_path, + /*delegated*/NULL, /*force*/0); + } else + rerr = vfsub_rmdir(h_dir, &a->h_path); + } + au_dtime_revert(&a->dt); + if (rerr) { + AuIOErr("failed removing broken entry(%d, %d)\n", err, rerr); + err = -EIO; + } +out_parent: + dput(dst_parent); + kfree(a); +out: + return err; +} + +#if 0 /* reserved */ +struct au_cpup_single_args { + int *errp; + struct au_cp_generic *cpg; + struct dentry *dst_parent; +}; + +static void au_call_cpup_single(void *args) +{ + struct au_cpup_single_args *a = args; + + au_pin_hdir_acquire_nest(a->cpg->pin); + *a->errp = au_cpup_single(a->cpg, a->dst_parent); + au_pin_hdir_release(a->cpg->pin); +} +#endif + +/* + * prevent SIGXFSZ in copy-up. + * testing CAP_MKNOD is for generic fs, + * but CAP_FSETID is for xfs only, currently. + */ +static int au_cpup_sio_test(struct au_pin *pin, umode_t mode) +{ + int do_sio; + struct super_block *sb; + struct inode *h_dir; + + do_sio = 0; + sb = au_pinned_parent(pin)->d_sb; + if (!au_wkq_test() + && (!au_sbi(sb)->si_plink_maint_pid + || au_plink_maint(sb, AuLock_NOPLM))) { + switch (mode & S_IFMT) { + case S_IFREG: + /* no condition about RLIMIT_FSIZE and the file size */ + do_sio = 1; + break; + case S_IFCHR: + case S_IFBLK: + do_sio = !capable(CAP_MKNOD); + break; + } + if (!do_sio) + do_sio = ((mode & (S_ISUID | S_ISGID)) + && !capable(CAP_FSETID)); + /* this workaround may be removed in the future */ + if (!do_sio) { + h_dir = au_pinned_h_dir(pin); + do_sio = h_dir->i_mode & S_ISVTX; + } + } + + return do_sio; +} + +#if 0 /* reserved */ +int au_sio_cpup_single(struct au_cp_generic *cpg, struct dentry *dst_parent) +{ + int err, wkq_err; + struct dentry *h_dentry; + + h_dentry = au_h_dptr(cpg->dentry, cpg->bsrc); + if (!au_cpup_sio_test(pin, d_inode(h_dentry)->i_mode)) + err = au_cpup_single(cpg, dst_parent); + else { + struct au_cpup_single_args args = { + .errp = &err, + .cpg = cpg, + .dst_parent = dst_parent + }; + wkq_err = au_wkq_wait(au_call_cpup_single, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} +#endif + +/* + * copyup the @dentry from the first active lower branch to @bdst, + * using au_cpup_single(). + */ +static int au_cpup_simple(struct au_cp_generic *cpg) +{ + int err; + unsigned int flags_orig; + struct dentry *dentry; + + AuDebugOn(cpg->bsrc < 0); + + dentry = cpg->dentry; + DiMustWriteLock(dentry); + + err = au_lkup_neg(dentry, cpg->bdst, /*wh*/1); + if (!err) { + flags_orig = cpg->flags; + au_fset_cpup(cpg->flags, RENAME); + err = au_cpup_single(cpg, NULL); + cpg->flags = flags_orig; + if (!err) + return 0; /* success */ + + /* revert */ + au_set_h_dptr(dentry, cpg->bdst, NULL); + au_set_dbtop(dentry, cpg->bsrc); + } + + return err; +} + +struct au_cpup_simple_args { + int *errp; + struct au_cp_generic *cpg; +}; + +static void au_call_cpup_simple(void *args) +{ + struct au_cpup_simple_args *a = args; + + au_pin_hdir_acquire_nest(a->cpg->pin); + *a->errp = au_cpup_simple(a->cpg); + au_pin_hdir_release(a->cpg->pin); +} + +static int au_do_sio_cpup_simple(struct au_cp_generic *cpg) +{ + int err, wkq_err; + struct dentry *dentry, *parent; + struct file *h_file; + struct inode *h_dir; + + dentry = cpg->dentry; + h_file = NULL; + if (au_ftest_cpup(cpg->flags, HOPEN)) { + AuDebugOn(cpg->bsrc < 0); + h_file = au_h_open_pre(dentry, cpg->bsrc, /*force_wr*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + } + + parent = dget_parent(dentry); + h_dir = au_h_iptr(d_inode(parent), cpg->bdst); + if (!au_test_h_perm_sio(h_dir, MAY_EXEC | MAY_WRITE) + && !au_cpup_sio_test(cpg->pin, d_inode(dentry)->i_mode)) + err = au_cpup_simple(cpg); + else { + struct au_cpup_simple_args args = { + .errp = &err, + .cpg = cpg + }; + wkq_err = au_wkq_wait(au_call_cpup_simple, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + dput(parent); + if (h_file) + au_h_open_post(dentry, cpg->bsrc, h_file); + +out: + return err; +} + +int au_sio_cpup_simple(struct au_cp_generic *cpg) +{ + aufs_bindex_t bsrc, bbot; + struct dentry *dentry, *h_dentry; + + if (cpg->bsrc < 0) { + dentry = cpg->dentry; + bbot = au_dbbot(dentry); + for (bsrc = cpg->bdst + 1; bsrc <= bbot; bsrc++) { + h_dentry = au_h_dptr(dentry, bsrc); + if (h_dentry) { + AuDebugOn(d_is_negative(h_dentry)); + break; + } + } + AuDebugOn(bsrc > bbot); + cpg->bsrc = bsrc; + } + AuDebugOn(cpg->bsrc <= cpg->bdst); + return au_do_sio_cpup_simple(cpg); +} + +int au_sio_cpdown_simple(struct au_cp_generic *cpg) +{ + AuDebugOn(cpg->bdst <= cpg->bsrc); + return au_do_sio_cpup_simple(cpg); +} + +/* ---------------------------------------------------------------------- */ + +/* + * copyup the deleted file for writing. + */ +static int au_do_cpup_wh(struct au_cp_generic *cpg, struct dentry *wh_dentry, + struct file *file) +{ + int err; + unsigned int flags_orig; + aufs_bindex_t bsrc_orig; + struct au_dinfo *dinfo; + struct { + struct au_hdentry *hd; + struct dentry *h_dentry; + } hdst, hsrc; + + dinfo = au_di(cpg->dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + bsrc_orig = cpg->bsrc; + cpg->bsrc = dinfo->di_btop; + hdst.hd = au_hdentry(dinfo, cpg->bdst); + hdst.h_dentry = hdst.hd->hd_dentry; + hdst.hd->hd_dentry = wh_dentry; + dinfo->di_btop = cpg->bdst; + + hsrc.h_dentry = NULL; + if (file) { + hsrc.hd = au_hdentry(dinfo, cpg->bsrc); + hsrc.h_dentry = hsrc.hd->hd_dentry; + hsrc.hd->hd_dentry = au_hf_top(file)->f_path.dentry; + } + flags_orig = cpg->flags; + cpg->flags = !AuCpup_DTIME; + err = au_cpup_single(cpg, /*h_parent*/NULL); + cpg->flags = flags_orig; + if (file) { + if (!err) + err = au_reopen_nondir(file); + hsrc.hd->hd_dentry = hsrc.h_dentry; + } + hdst.hd->hd_dentry = hdst.h_dentry; + dinfo->di_btop = cpg->bsrc; + cpg->bsrc = bsrc_orig; + + return err; +} + +static int au_cpup_wh(struct au_cp_generic *cpg, struct file *file) +{ + int err; + aufs_bindex_t bdst; + struct au_dtime dt; + struct dentry *dentry, *parent, *h_parent, *wh_dentry; + struct au_branch *br; + struct path h_path; + + dentry = cpg->dentry; + bdst = cpg->bdst; + br = au_sbr(dentry->d_sb, bdst); + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bdst); + wh_dentry = au_whtmp_lkup(h_parent, br, &dentry->d_name); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + h_path.dentry = h_parent; + h_path.mnt = au_br_mnt(br); + au_dtime_store(&dt, parent, &h_path); + err = au_do_cpup_wh(cpg, wh_dentry, file); + if (unlikely(err)) + goto out_wh; + + dget(wh_dentry); + h_path.dentry = wh_dentry; + if (!d_is_dir(wh_dentry)) { + /* no delegation since it is just created */ + err = vfsub_unlink(d_inode(h_parent), &h_path, + /*delegated*/NULL, /*force*/0); + } else + err = vfsub_rmdir(d_inode(h_parent), &h_path); + if (unlikely(err)) { + AuIOErr("failed remove copied-up tmp file %pd(%d)\n", + wh_dentry, err); + err = -EIO; + } + au_dtime_revert(&dt); + au_set_hi_wh(d_inode(dentry), bdst, wh_dentry); + +out_wh: + dput(wh_dentry); +out: + dput(parent); + return err; +} + +struct au_cpup_wh_args { + int *errp; + struct au_cp_generic *cpg; + struct file *file; +}; + +static void au_call_cpup_wh(void *args) +{ + struct au_cpup_wh_args *a = args; + + au_pin_hdir_acquire_nest(a->cpg->pin); + *a->errp = au_cpup_wh(a->cpg, a->file); + au_pin_hdir_release(a->cpg->pin); +} + +int au_sio_cpup_wh(struct au_cp_generic *cpg, struct file *file) +{ + int err, wkq_err; + aufs_bindex_t bdst; + struct dentry *dentry, *parent, *h_orph, *h_parent; + struct inode *dir, *h_dir, *h_tmpdir; + struct au_wbr *wbr; + struct au_pin wh_pin, *pin_orig; + + dentry = cpg->dentry; + bdst = cpg->bdst; + parent = dget_parent(dentry); + dir = d_inode(parent); + h_orph = NULL; + h_parent = NULL; + h_dir = au_igrab(au_h_iptr(dir, bdst)); + h_tmpdir = h_dir; + pin_orig = NULL; + if (!h_dir->i_nlink) { + wbr = au_sbr(dentry->d_sb, bdst)->br_wbr; + h_orph = wbr->wbr_orph; + + h_parent = dget(au_h_dptr(parent, bdst)); + au_set_h_dptr(parent, bdst, dget(h_orph)); + h_tmpdir = d_inode(h_orph); + au_set_h_iptr(dir, bdst, au_igrab(h_tmpdir), /*flags*/0); + + inode_lock_nested(h_tmpdir, AuLsc_I_PARENT3); + /* todo: au_h_open_pre()? */ + + pin_orig = cpg->pin; + au_pin_init(&wh_pin, dentry, bdst, AuLsc_DI_PARENT, + AuLsc_I_PARENT3, cpg->pin->udba, AuPin_DI_LOCKED); + cpg->pin = &wh_pin; + } + + if (!au_test_h_perm_sio(h_tmpdir, MAY_EXEC | MAY_WRITE) + && !au_cpup_sio_test(cpg->pin, d_inode(dentry)->i_mode)) + err = au_cpup_wh(cpg, file); + else { + struct au_cpup_wh_args args = { + .errp = &err, + .cpg = cpg, + .file = file + }; + wkq_err = au_wkq_wait(au_call_cpup_wh, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + if (h_orph) { + inode_unlock(h_tmpdir); + /* todo: au_h_open_post()? */ + au_set_h_iptr(dir, bdst, au_igrab(h_dir), /*flags*/0); + au_set_h_dptr(parent, bdst, h_parent); + AuDebugOn(!pin_orig); + cpg->pin = pin_orig; + } + iput(h_dir); + dput(parent); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * generic routine for both of copy-up and copy-down. + */ +/* cf. revalidate function in file.c */ +int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, + int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, + struct au_pin *pin, + struct dentry *h_parent, void *arg), + void *arg) +{ + int err; + struct au_pin pin; + struct dentry *d, *parent, *h_parent, *real_parent, *h_dentry; + + err = 0; + parent = dget_parent(dentry); + if (IS_ROOT(parent)) + goto out; + + au_pin_init(&pin, dentry, bdst, AuLsc_DI_PARENT2, AuLsc_I_PARENT2, + au_opt_udba(dentry->d_sb), AuPin_MNT_WRITE); + + /* do not use au_dpage */ + real_parent = parent; + while (1) { + dput(parent); + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bdst); + if (h_parent) + goto out; /* success */ + + /* find top dir which is necessary to cpup */ + do { + d = parent; + dput(parent); + parent = dget_parent(d); + di_read_lock_parent3(parent, !AuLock_IR); + h_parent = au_h_dptr(parent, bdst); + di_read_unlock(parent, !AuLock_IR); + } while (!h_parent); + + if (d != real_parent) + di_write_lock_child3(d); + + /* somebody else might create while we were sleeping */ + h_dentry = au_h_dptr(d, bdst); + if (!h_dentry || d_is_negative(h_dentry)) { + if (h_dentry) + au_update_dbtop(d); + + au_pin_set_dentry(&pin, d); + err = au_do_pin(&pin); + if (!err) { + err = cp(d, bdst, &pin, h_parent, arg); + au_unpin(&pin); + } + } + + if (d != real_parent) + di_write_unlock(d); + if (unlikely(err)) + break; + } + +out: + dput(parent); + return err; +} + +static int au_cpup_dir(struct dentry *dentry, aufs_bindex_t bdst, + struct au_pin *pin, + struct dentry *h_parent __maybe_unused, + void *arg __maybe_unused) +{ + struct au_cp_generic cpg = { + .dentry = dentry, + .bdst = bdst, + .bsrc = -1, + .len = 0, + .pin = pin, + .flags = AuCpup_DTIME + }; + return au_sio_cpup_simple(&cpg); +} + +int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + return au_cp_dirs(dentry, bdst, au_cpup_dir, NULL); +} + +int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + int err; + struct dentry *parent; + struct inode *dir; + + parent = dget_parent(dentry); + dir = d_inode(parent); + err = 0; + if (au_h_iptr(dir, bdst)) + goto out; + + di_read_unlock(parent, AuLock_IR); + di_write_lock_parent(parent); + /* someone else might change our inode while we were sleeping */ + if (!au_h_iptr(dir, bdst)) + err = au_cpup_dirs(dentry, bdst); + di_downgrade_lock(parent, AuLock_IR); + +out: + dput(parent); + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/cpup.h +++ linux-aws-4.15.0/fs/aufs/cpup.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * copy-up/down functions + */ + +#ifndef __AUFS_CPUP_H__ +#define __AUFS_CPUP_H__ + +#ifdef __KERNEL__ + +#include + +struct inode; +struct file; +struct au_pin; + +void au_cpup_attr_flags(struct inode *dst, unsigned int iflags); +void au_cpup_attr_timesizes(struct inode *inode); +void au_cpup_attr_nlink(struct inode *inode, int force); +void au_cpup_attr_changeable(struct inode *inode); +void au_cpup_igen(struct inode *inode, struct inode *h_inode); +void au_cpup_attr_all(struct inode *inode, int force); + +/* ---------------------------------------------------------------------- */ + +struct au_cp_generic { + struct dentry *dentry; + aufs_bindex_t bdst, bsrc; + loff_t len; + struct au_pin *pin; + unsigned int flags; +}; + +/* cpup flags */ +#define AuCpup_DTIME 1 /* do dtime_store/revert */ +#define AuCpup_KEEPLINO (1 << 1) /* do not clear the lower xino, + for link(2) */ +#define AuCpup_RENAME (1 << 2) /* rename after cpup */ +#define AuCpup_HOPEN (1 << 3) /* call h_open_pre/post() in + cpup */ +#define AuCpup_OVERWRITE (1 << 4) /* allow overwriting the + existing entry */ +#define AuCpup_RWDST (1 << 5) /* force write target even if + the branch is marked as RO */ + +#ifndef CONFIG_AUFS_BR_HFSPLUS +#undef AuCpup_HOPEN +#define AuCpup_HOPEN 0 +#endif + +#define au_ftest_cpup(flags, name) ((flags) & AuCpup_##name) +#define au_fset_cpup(flags, name) \ + do { (flags) |= AuCpup_##name; } while (0) +#define au_fclr_cpup(flags, name) \ + do { (flags) &= ~AuCpup_##name; } while (0) + +int au_copy_file(struct file *dst, struct file *src, loff_t len); +int au_sio_cpup_simple(struct au_cp_generic *cpg); +int au_sio_cpdown_simple(struct au_cp_generic *cpg); +int au_sio_cpup_wh(struct au_cp_generic *cpg, struct file *file); + +int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, + int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, + struct au_pin *pin, + struct dentry *h_parent, void *arg), + void *arg); +int au_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); +int au_test_and_cpup_dirs(struct dentry *dentry, aufs_bindex_t bdst); + +/* ---------------------------------------------------------------------- */ + +/* keep timestamps when copyup */ +struct au_dtime { + struct dentry *dt_dentry; + struct path dt_h_path; + struct timespec dt_atime, dt_mtime; +}; +void au_dtime_store(struct au_dtime *dt, struct dentry *dentry, + struct path *h_path); +void au_dtime_revert(struct au_dtime *dt); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_CPUP_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dbgaufs.c +++ linux-aws-4.15.0/fs/aufs/dbgaufs.c @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * debugfs interface + */ + +#include +#include "aufs.h" + +#ifndef CONFIG_SYSFS +#error DEBUG_FS depends upon SYSFS +#endif + +static struct dentry *dbgaufs; +static const mode_t dbgaufs_mode = S_IRUSR | S_IRGRP | S_IROTH; + +/* 20 is max digits length of ulong 64 */ +struct dbgaufs_arg { + int n; + char a[20 * 4]; +}; + +/* + * common function for all XINO files + */ +static int dbgaufs_xi_release(struct inode *inode __maybe_unused, + struct file *file) +{ + kfree(file->private_data); + return 0; +} + +static int dbgaufs_xi_open(struct file *xf, struct file *file, int do_fcnt) +{ + int err; + struct kstat st; + struct dbgaufs_arg *p; + + err = -ENOMEM; + p = kmalloc(sizeof(*p), GFP_NOFS); + if (unlikely(!p)) + goto out; + + err = 0; + p->n = 0; + file->private_data = p; + if (!xf) + goto out; + + err = vfsub_getattr(&xf->f_path, &st); + if (!err) { + if (do_fcnt) + p->n = snprintf + (p->a, sizeof(p->a), "%ld, %llux%u %lld\n", + (long)file_count(xf), st.blocks, st.blksize, + (long long)st.size); + else + p->n = snprintf(p->a, sizeof(p->a), "%llux%u %lld\n", + st.blocks, st.blksize, + (long long)st.size); + AuDebugOn(p->n >= sizeof(p->a)); + } else { + p->n = snprintf(p->a, sizeof(p->a), "err %d\n", err); + err = 0; + } + +out: + return err; + +} + +static ssize_t dbgaufs_xi_read(struct file *file, char __user *buf, + size_t count, loff_t *ppos) +{ + struct dbgaufs_arg *p; + + p = file->private_data; + return simple_read_from_buffer(buf, count, ppos, p->a, p->n); +} + +/* ---------------------------------------------------------------------- */ + +struct dbgaufs_plink_arg { + int n; + char a[]; +}; + +static int dbgaufs_plink_release(struct inode *inode __maybe_unused, + struct file *file) +{ + free_page((unsigned long)file->private_data); + return 0; +} + +static int dbgaufs_plink_open(struct inode *inode, struct file *file) +{ + int err, i, limit; + unsigned long n, sum; + struct dbgaufs_plink_arg *p; + struct au_sbinfo *sbinfo; + struct super_block *sb; + struct hlist_bl_head *hbl; + + err = -ENOMEM; + p = (void *)get_zeroed_page(GFP_NOFS); + if (unlikely(!p)) + goto out; + + err = -EFBIG; + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + if (au_opt_test(au_mntflags(sb), PLINK)) { + limit = PAGE_SIZE - sizeof(p->n); + + /* the number of buckets */ + n = snprintf(p->a + p->n, limit, "%d\n", AuPlink_NHASH); + p->n += n; + limit -= n; + + sum = 0; + for (i = 0, hbl = sbinfo->si_plink; i < AuPlink_NHASH; + i++, hbl++) { + n = au_hbl_count(hbl); + sum += n; + + n = snprintf(p->a + p->n, limit, "%lu ", n); + p->n += n; + limit -= n; + if (unlikely(limit <= 0)) + goto out_free; + } + p->a[p->n - 1] = '\n'; + + /* the sum of plinks */ + n = snprintf(p->a + p->n, limit, "%lu\n", sum); + p->n += n; + limit -= n; + if (unlikely(limit <= 0)) + goto out_free; + } else { +#define str "1\n0\n0\n" + p->n = sizeof(str) - 1; + strcpy(p->a, str); +#undef str + } + si_read_unlock(sb); + + err = 0; + file->private_data = p; + goto out; /* success */ + +out_free: + free_page((unsigned long)p); +out: + return err; +} + +static ssize_t dbgaufs_plink_read(struct file *file, char __user *buf, + size_t count, loff_t *ppos) +{ + struct dbgaufs_plink_arg *p; + + p = file->private_data; + return simple_read_from_buffer(buf, count, ppos, p->a, p->n); +} + +static const struct file_operations dbgaufs_plink_fop = { + .owner = THIS_MODULE, + .open = dbgaufs_plink_open, + .release = dbgaufs_plink_release, + .read = dbgaufs_plink_read +}; + +/* ---------------------------------------------------------------------- */ + +static int dbgaufs_xib_open(struct inode *inode, struct file *file) +{ + int err; + struct au_sbinfo *sbinfo; + struct super_block *sb; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + err = dbgaufs_xi_open(sbinfo->si_xib, file, /*do_fcnt*/0); + si_read_unlock(sb); + return err; +} + +static const struct file_operations dbgaufs_xib_fop = { + .owner = THIS_MODULE, + .open = dbgaufs_xib_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +/* ---------------------------------------------------------------------- */ + +#define DbgaufsXi_PREFIX "xi" + +static int dbgaufs_xino_open(struct inode *inode, struct file *file) +{ + int err; + long l; + struct au_sbinfo *sbinfo; + struct super_block *sb; + struct file *xf; + struct qstr *name; + + err = -ENOENT; + xf = NULL; + name = &file->f_path.dentry->d_name; + if (unlikely(name->len < sizeof(DbgaufsXi_PREFIX) + || memcmp(name->name, DbgaufsXi_PREFIX, + sizeof(DbgaufsXi_PREFIX) - 1))) + goto out; + err = kstrtol(name->name + sizeof(DbgaufsXi_PREFIX) - 1, 10, &l); + if (unlikely(err)) + goto out; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + if (l <= au_sbbot(sb)) { + xf = au_sbr(sb, (aufs_bindex_t)l)->br_xino.xi_file; + err = dbgaufs_xi_open(xf, file, /*do_fcnt*/1); + } else + err = -ENOENT; + si_read_unlock(sb); + +out: + return err; +} + +static const struct file_operations dbgaufs_xino_fop = { + .owner = THIS_MODULE, + .open = dbgaufs_xino_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + aufs_bindex_t bbot; + struct au_branch *br; + struct au_xino_file *xi; + + if (!au_sbi(sb)->si_dbgaufs) + return; + + bbot = au_sbbot(sb); + for (; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + xi = &br->br_xino; + /* debugfs acquires the parent i_mutex */ + lockdep_off(); + debugfs_remove(xi->xi_dbgaufs); + lockdep_on(); + xi->xi_dbgaufs = NULL; + } +} + +void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_sbinfo *sbinfo; + struct dentry *parent; + struct au_branch *br; + struct au_xino_file *xi; + aufs_bindex_t bbot; + char name[sizeof(DbgaufsXi_PREFIX) + 5]; /* "xi" bindex NULL */ + + sbinfo = au_sbi(sb); + parent = sbinfo->si_dbgaufs; + if (!parent) + return; + + bbot = au_sbbot(sb); + for (; bindex <= bbot; bindex++) { + snprintf(name, sizeof(name), DbgaufsXi_PREFIX "%d", bindex); + br = au_sbr(sb, bindex); + xi = &br->br_xino; + AuDebugOn(xi->xi_dbgaufs); + /* debugfs acquires the parent i_mutex */ + lockdep_off(); + xi->xi_dbgaufs = debugfs_create_file(name, dbgaufs_mode, parent, + sbinfo, &dbgaufs_xino_fop); + lockdep_on(); + /* ignore an error */ + if (unlikely(!xi->xi_dbgaufs)) + AuWarn1("failed %s under debugfs\n", name); + } +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_EXPORT +static int dbgaufs_xigen_open(struct inode *inode, struct file *file) +{ + int err; + struct au_sbinfo *sbinfo; + struct super_block *sb; + + sbinfo = inode->i_private; + sb = sbinfo->si_sb; + si_noflush_read_lock(sb); + err = dbgaufs_xi_open(sbinfo->si_xigen, file, /*do_fcnt*/0); + si_read_unlock(sb); + return err; +} + +static const struct file_operations dbgaufs_xigen_fop = { + .owner = THIS_MODULE, + .open = dbgaufs_xigen_open, + .release = dbgaufs_xi_release, + .read = dbgaufs_xi_read +}; + +static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) +{ + int err; + + /* + * This function is a dynamic '__init' function actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + err = -EIO; + sbinfo->si_dbgaufs_xigen = debugfs_create_file + ("xigen", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, + &dbgaufs_xigen_fop); + if (sbinfo->si_dbgaufs_xigen) + err = 0; + + return err; +} +#else +static int dbgaufs_xigen_init(struct au_sbinfo *sbinfo) +{ + return 0; +} +#endif /* CONFIG_AUFS_EXPORT */ + +/* ---------------------------------------------------------------------- */ + +void dbgaufs_si_fin(struct au_sbinfo *sbinfo) +{ + /* + * This function is a dynamic '__fin' function actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + debugfs_remove_recursive(sbinfo->si_dbgaufs); + sbinfo->si_dbgaufs = NULL; + kobject_put(&sbinfo->si_kobj); +} + +int dbgaufs_si_init(struct au_sbinfo *sbinfo) +{ + int err; + char name[SysaufsSiNameLen]; + + /* + * This function is a dynamic '__init' function actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ + + err = -ENOENT; + if (!dbgaufs) { + AuErr1("/debug/aufs is uninitialized\n"); + goto out; + } + + err = -EIO; + sysaufs_name(sbinfo, name); + sbinfo->si_dbgaufs = debugfs_create_dir(name, dbgaufs); + if (unlikely(!sbinfo->si_dbgaufs)) + goto out; + kobject_get(&sbinfo->si_kobj); + + sbinfo->si_dbgaufs_xib = debugfs_create_file + ("xib", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, + &dbgaufs_xib_fop); + if (unlikely(!sbinfo->si_dbgaufs_xib)) + goto out_dir; + + sbinfo->si_dbgaufs_plink = debugfs_create_file + ("plink", dbgaufs_mode, sbinfo->si_dbgaufs, sbinfo, + &dbgaufs_plink_fop); + if (unlikely(!sbinfo->si_dbgaufs_plink)) + goto out_dir; + + err = dbgaufs_xigen_init(sbinfo); + if (!err) + goto out; /* success */ + +out_dir: + dbgaufs_si_fin(sbinfo); +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void dbgaufs_fin(void) +{ + debugfs_remove(dbgaufs); +} + +int __init dbgaufs_init(void) +{ + int err; + + err = -EIO; + dbgaufs = debugfs_create_dir(AUFS_NAME, NULL); + if (dbgaufs) + err = 0; + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/dbgaufs.h +++ linux-aws-4.15.0/fs/aufs/dbgaufs.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * debugfs interface + */ + +#ifndef __DBGAUFS_H__ +#define __DBGAUFS_H__ + +#ifdef __KERNEL__ + +struct super_block; +struct au_sbinfo; + +#ifdef CONFIG_DEBUG_FS +/* dbgaufs.c */ +void dbgaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); +void dbgaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); +void dbgaufs_si_fin(struct au_sbinfo *sbinfo); +int dbgaufs_si_init(struct au_sbinfo *sbinfo); +void dbgaufs_fin(void); +int __init dbgaufs_init(void); +#else +AuStubVoid(dbgaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex) +AuStubVoid(dbgaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex) +AuStubVoid(dbgaufs_si_fin, struct au_sbinfo *sbinfo) +AuStubInt0(dbgaufs_si_init, struct au_sbinfo *sbinfo) +AuStubVoid(dbgaufs_fin, void) +AuStubInt0(__init dbgaufs_init, void) +#endif /* CONFIG_DEBUG_FS */ + +#endif /* __KERNEL__ */ +#endif /* __DBGAUFS_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dcsub.c +++ linux-aws-4.15.0/fs/aufs/dcsub.c @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sub-routines for dentry cache + */ + +#include "aufs.h" + +static void au_dpage_free(struct au_dpage *dpage) +{ + int i; + struct dentry **p; + + p = dpage->dentries; + for (i = 0; i < dpage->ndentry; i++) + dput(*p++); + free_page((unsigned long)dpage->dentries); +} + +int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp) +{ + int err; + void *p; + + err = -ENOMEM; + dpages->dpages = kmalloc(sizeof(*dpages->dpages), gfp); + if (unlikely(!dpages->dpages)) + goto out; + + p = (void *)__get_free_page(gfp); + if (unlikely(!p)) + goto out_dpages; + + dpages->dpages[0].ndentry = 0; + dpages->dpages[0].dentries = p; + dpages->ndpage = 1; + return 0; /* success */ + +out_dpages: + kfree(dpages->dpages); +out: + return err; +} + +void au_dpages_free(struct au_dcsub_pages *dpages) +{ + int i; + struct au_dpage *p; + + p = dpages->dpages; + for (i = 0; i < dpages->ndpage; i++) + au_dpage_free(p++); + kfree(dpages->dpages); +} + +static int au_dpages_append(struct au_dcsub_pages *dpages, + struct dentry *dentry, gfp_t gfp) +{ + int err, sz; + struct au_dpage *dpage; + void *p; + + dpage = dpages->dpages + dpages->ndpage - 1; + sz = PAGE_SIZE / sizeof(dentry); + if (unlikely(dpage->ndentry >= sz)) { + AuLabel(new dpage); + err = -ENOMEM; + sz = dpages->ndpage * sizeof(*dpages->dpages); + p = au_kzrealloc(dpages->dpages, sz, + sz + sizeof(*dpages->dpages), gfp, + /*may_shrink*/0); + if (unlikely(!p)) + goto out; + + dpages->dpages = p; + dpage = dpages->dpages + dpages->ndpage; + p = (void *)__get_free_page(gfp); + if (unlikely(!p)) + goto out; + + dpage->ndentry = 0; + dpage->dentries = p; + dpages->ndpage++; + } + + AuDebugOn(au_dcount(dentry) <= 0); + dpage->dentries[dpage->ndentry++] = dget_dlock(dentry); + return 0; /* success */ + +out: + return err; +} + +/* todo: BAD approach */ +/* copied from linux/fs/dcache.c */ +enum d_walk_ret { + D_WALK_CONTINUE, + D_WALK_QUIT, + D_WALK_NORETRY, + D_WALK_SKIP, +}; + +extern void d_walk(struct dentry *parent, void *data, + enum d_walk_ret (*enter)(void *, struct dentry *), + void (*finish)(void *)); + +struct ac_dpages_arg { + int err; + struct au_dcsub_pages *dpages; + struct super_block *sb; + au_dpages_test test; + void *arg; +}; + +static enum d_walk_ret au_call_dpages_append(void *_arg, struct dentry *dentry) +{ + enum d_walk_ret ret; + struct ac_dpages_arg *arg = _arg; + + ret = D_WALK_CONTINUE; + if (dentry->d_sb == arg->sb + && !IS_ROOT(dentry) + && au_dcount(dentry) > 0 + && au_di(dentry) + && (!arg->test || arg->test(dentry, arg->arg))) { + arg->err = au_dpages_append(arg->dpages, dentry, GFP_ATOMIC); + if (unlikely(arg->err)) + ret = D_WALK_QUIT; + } + + return ret; +} + +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg) +{ + struct ac_dpages_arg args = { + .err = 0, + .dpages = dpages, + .sb = root->d_sb, + .test = test, + .arg = arg + }; + + d_walk(root, &args, au_call_dpages_append, NULL); + + return args.err; +} + +int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, + int do_include, au_dpages_test test, void *arg) +{ + int err; + + err = 0; + write_seqlock(&rename_lock); + spin_lock(&dentry->d_lock); + if (do_include + && au_dcount(dentry) > 0 + && (!test || test(dentry, arg))) + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + spin_unlock(&dentry->d_lock); + if (unlikely(err)) + goto out; + + /* + * RCU for vfsmount is unnecessary since this is a traverse in a single + * mount + */ + while (!IS_ROOT(dentry)) { + dentry = dentry->d_parent; /* rename_lock is locked */ + spin_lock(&dentry->d_lock); + if (au_dcount(dentry) > 0 + && (!test || test(dentry, arg))) + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + spin_unlock(&dentry->d_lock); + if (unlikely(err)) + break; + } + +out: + write_sequnlock(&rename_lock); + return err; +} + +static inline int au_dcsub_dpages_aufs(struct dentry *dentry, void *arg) +{ + return au_di(dentry) && dentry->d_sb == arg; +} + +int au_dcsub_pages_rev_aufs(struct au_dcsub_pages *dpages, + struct dentry *dentry, int do_include) +{ + return au_dcsub_pages_rev(dpages, dentry, do_include, + au_dcsub_dpages_aufs, dentry->d_sb); +} + +int au_test_subdir(struct dentry *d1, struct dentry *d2) +{ + struct path path[2] = { + { + .dentry = d1 + }, + { + .dentry = d2 + } + }; + + return path_is_under(path + 0, path + 1); +} --- linux-aws-4.15.0.orig/fs/aufs/dcsub.h +++ linux-aws-4.15.0/fs/aufs/dcsub.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sub-routines for dentry cache + */ + +#ifndef __AUFS_DCSUB_H__ +#define __AUFS_DCSUB_H__ + +#ifdef __KERNEL__ + +#include +#include + +struct au_dpage { + int ndentry; + struct dentry **dentries; +}; + +struct au_dcsub_pages { + int ndpage; + struct au_dpage *dpages; +}; + +/* ---------------------------------------------------------------------- */ + +/* dcsub.c */ +int au_dpages_init(struct au_dcsub_pages *dpages, gfp_t gfp); +void au_dpages_free(struct au_dcsub_pages *dpages); +typedef int (*au_dpages_test)(struct dentry *dentry, void *arg); +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg); +int au_dcsub_pages_rev(struct au_dcsub_pages *dpages, struct dentry *dentry, + int do_include, au_dpages_test test, void *arg); +int au_dcsub_pages_rev_aufs(struct au_dcsub_pages *dpages, + struct dentry *dentry, int do_include); +int au_test_subdir(struct dentry *d1, struct dentry *d2); + +/* ---------------------------------------------------------------------- */ + +/* + * todo: in linux-3.13, several similar (but faster) helpers are added to + * include/linux/dcache.h. Try them (in the future). + */ + +static inline int au_d_hashed_positive(struct dentry *d) +{ + int err; + struct inode *inode = d_inode(d); + + err = 0; + if (unlikely(d_unhashed(d) + || d_is_negative(d) + || !inode->i_nlink)) + err = -ENOENT; + return err; +} + +static inline int au_d_linkable(struct dentry *d) +{ + int err; + struct inode *inode = d_inode(d); + + err = au_d_hashed_positive(d); + if (err + && d_is_positive(d) + && (inode->i_state & I_LINKABLE)) + err = 0; + return err; +} + +static inline int au_d_alive(struct dentry *d) +{ + int err; + struct inode *inode; + + err = 0; + if (!IS_ROOT(d)) + err = au_d_hashed_positive(d); + else { + inode = d_inode(d); + if (unlikely(d_unlinked(d) + || d_is_negative(d) + || !inode->i_nlink)) + err = -ENOENT; + } + return err; +} + +static inline int au_alive_dir(struct dentry *d) +{ + int err; + + err = au_d_alive(d); + if (unlikely(err || IS_DEADDIR(d_inode(d)))) + err = -ENOENT; + return err; +} + +static inline int au_qstreq(struct qstr *a, struct qstr *b) +{ + return a->len == b->len + && !memcmp(a->name, b->name, a->len); +} + +/* + * by the commit + * 360f547 2015-01-25 dcache: let the dentry count go down to zero without + * taking d_lock + * the type of d_lockref.count became int, but the inlined function d_count() + * still returns unsigned int. + * I don't know why. Maybe it is for every d_count() users? + * Anyway au_dcount() lives on. + */ +static inline int au_dcount(struct dentry *d) +{ + return (int)d_count(d); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DCSUB_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/debug.c +++ linux-aws-4.15.0/fs/aufs/debug.c @@ -0,0 +1,440 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * debug print functions + */ + +#include "aufs.h" + +/* Returns 0, or -errno. arg is in kp->arg. */ +static int param_atomic_t_set(const char *val, const struct kernel_param *kp) +{ + int err, n; + + err = kstrtoint(val, 0, &n); + if (!err) { + if (n > 0) + au_debug_on(); + else + au_debug_off(); + } + return err; +} + +/* Returns length written or -errno. Buffer is 4k (ie. be short!) */ +static int param_atomic_t_get(char *buffer, const struct kernel_param *kp) +{ + atomic_t *a; + + a = kp->arg; + return sprintf(buffer, "%d", atomic_read(a)); +} + +static struct kernel_param_ops param_ops_atomic_t = { + .set = param_atomic_t_set, + .get = param_atomic_t_get + /* void (*free)(void *arg) */ +}; + +atomic_t aufs_debug = ATOMIC_INIT(0); +MODULE_PARM_DESC(debug, "debug print"); +module_param_named(debug, aufs_debug, atomic_t, S_IRUGO | S_IWUSR | S_IWGRP); + +DEFINE_MUTEX(au_dbg_mtx); /* just to serialize the dbg msgs */ +char *au_plevel = KERN_DEBUG; +#define dpri(fmt, ...) do { \ + if ((au_plevel \ + && strcmp(au_plevel, KERN_DEBUG)) \ + || au_debug_test()) \ + printk("%s" fmt, au_plevel, ##__VA_ARGS__); \ +} while (0) + +/* ---------------------------------------------------------------------- */ + +void au_dpri_whlist(struct au_nhash *whlist) +{ + unsigned long ul, n; + struct hlist_head *head; + struct au_vdir_wh *pos; + + n = whlist->nh_num; + head = whlist->nh_head; + for (ul = 0; ul < n; ul++) { + hlist_for_each_entry(pos, head, wh_hash) + dpri("b%d, %.*s, %d\n", + pos->wh_bindex, + pos->wh_str.len, pos->wh_str.name, + pos->wh_str.len); + head++; + } +} + +void au_dpri_vdir(struct au_vdir *vdir) +{ + unsigned long ul; + union au_vdir_deblk_p p; + unsigned char *o; + + if (!vdir || IS_ERR(vdir)) { + dpri("err %ld\n", PTR_ERR(vdir)); + return; + } + + dpri("deblk %u, nblk %lu, deblk %p, last{%lu, %p}, ver %lu\n", + vdir->vd_deblk_sz, vdir->vd_nblk, vdir->vd_deblk, + vdir->vd_last.ul, vdir->vd_last.p.deblk, vdir->vd_version); + for (ul = 0; ul < vdir->vd_nblk; ul++) { + p.deblk = vdir->vd_deblk[ul]; + o = p.deblk; + dpri("[%lu]: %p\n", ul, o); + } +} + +static int do_pri_inode(aufs_bindex_t bindex, struct inode *inode, int hn, + struct dentry *wh) +{ + char *n = NULL; + int l = 0; + + if (!inode || IS_ERR(inode)) { + dpri("i%d: err %ld\n", bindex, PTR_ERR(inode)); + return -1; + } + + /* the type of i_blocks depends upon CONFIG_LBDAF */ + BUILD_BUG_ON(sizeof(inode->i_blocks) != sizeof(unsigned long) + && sizeof(inode->i_blocks) != sizeof(u64)); + if (wh) { + n = (void *)wh->d_name.name; + l = wh->d_name.len; + } + + dpri("i%d: %p, i%lu, %s, cnt %d, nl %u, 0%o, sz %llu, blk %llu," + " hn %d, ct %lld, np %lu, st 0x%lx, f 0x%x, v %llu, g %x%s%.*s\n", + bindex, inode, + inode->i_ino, inode->i_sb ? au_sbtype(inode->i_sb) : "??", + atomic_read(&inode->i_count), inode->i_nlink, inode->i_mode, + i_size_read(inode), (unsigned long long)inode->i_blocks, + hn, (long long)timespec_to_ns(&inode->i_ctime) & 0x0ffff, + inode->i_mapping ? inode->i_mapping->nrpages : 0, + inode->i_state, inode->i_flags, inode->i_version, + inode->i_generation, + l ? ", wh " : "", l, n); + return 0; +} + +void au_dpri_inode(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct au_hinode *hi; + aufs_bindex_t bindex; + int err, hn; + + err = do_pri_inode(-1, inode, -1, NULL); + if (err || !au_test_aufs(inode->i_sb) || au_is_bad_inode(inode)) + return; + + iinfo = au_ii(inode); + dpri("i-1: btop %d, bbot %d, gen %d\n", + iinfo->ii_btop, iinfo->ii_bbot, au_iigen(inode, NULL)); + if (iinfo->ii_btop < 0) + return; + hn = 0; + for (bindex = iinfo->ii_btop; bindex <= iinfo->ii_bbot; bindex++) { + hi = au_hinode(iinfo, bindex); + hn = !!au_hn(hi); + do_pri_inode(bindex, hi->hi_inode, hn, hi->hi_whdentry); + } +} + +void au_dpri_dalias(struct inode *inode) +{ + struct dentry *d; + + spin_lock(&inode->i_lock); + hlist_for_each_entry(d, &inode->i_dentry, d_u.d_alias) + au_dpri_dentry(d); + spin_unlock(&inode->i_lock); +} + +static int do_pri_dentry(aufs_bindex_t bindex, struct dentry *dentry) +{ + struct dentry *wh = NULL; + int hn; + struct inode *inode; + struct au_iinfo *iinfo; + struct au_hinode *hi; + + if (!dentry || IS_ERR(dentry)) { + dpri("d%d: err %ld\n", bindex, PTR_ERR(dentry)); + return -1; + } + /* do not call dget_parent() here */ + /* note: access d_xxx without d_lock */ + dpri("d%d: %p, %pd2?, %s, cnt %d, flags 0x%x, %shashed\n", + bindex, dentry, dentry, + dentry->d_sb ? au_sbtype(dentry->d_sb) : "??", + au_dcount(dentry), dentry->d_flags, + d_unhashed(dentry) ? "un" : ""); + hn = -1; + inode = NULL; + if (d_is_positive(dentry)) + inode = d_inode(dentry); + if (inode + && au_test_aufs(dentry->d_sb) + && bindex >= 0 + && !au_is_bad_inode(inode)) { + iinfo = au_ii(inode); + hi = au_hinode(iinfo, bindex); + hn = !!au_hn(hi); + wh = hi->hi_whdentry; + } + do_pri_inode(bindex, inode, hn, wh); + return 0; +} + +void au_dpri_dentry(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + aufs_bindex_t bindex; + int err; + + err = do_pri_dentry(-1, dentry); + if (err || !au_test_aufs(dentry->d_sb)) + return; + + dinfo = au_di(dentry); + if (!dinfo) + return; + dpri("d-1: btop %d, bbot %d, bwh %d, bdiropq %d, gen %d, tmp %d\n", + dinfo->di_btop, dinfo->di_bbot, + dinfo->di_bwh, dinfo->di_bdiropq, au_digen(dentry), + dinfo->di_tmpfile); + if (dinfo->di_btop < 0) + return; + for (bindex = dinfo->di_btop; bindex <= dinfo->di_bbot; bindex++) + do_pri_dentry(bindex, au_hdentry(dinfo, bindex)->hd_dentry); +} + +static int do_pri_file(aufs_bindex_t bindex, struct file *file) +{ + char a[32]; + + if (!file || IS_ERR(file)) { + dpri("f%d: err %ld\n", bindex, PTR_ERR(file)); + return -1; + } + a[0] = 0; + if (bindex < 0 + && !IS_ERR_OR_NULL(file->f_path.dentry) + && au_test_aufs(file->f_path.dentry->d_sb) + && au_fi(file)) + snprintf(a, sizeof(a), ", gen %d, mmapped %d", + au_figen(file), atomic_read(&au_fi(file)->fi_mmapped)); + dpri("f%d: mode 0x%x, flags 0%o, cnt %ld, v %llu, pos %llu%s\n", + bindex, file->f_mode, file->f_flags, (long)file_count(file), + file->f_version, file->f_pos, a); + if (!IS_ERR_OR_NULL(file->f_path.dentry)) + do_pri_dentry(bindex, file->f_path.dentry); + return 0; +} + +void au_dpri_file(struct file *file) +{ + struct au_finfo *finfo; + struct au_fidir *fidir; + struct au_hfile *hfile; + aufs_bindex_t bindex; + int err; + + err = do_pri_file(-1, file); + if (err + || IS_ERR_OR_NULL(file->f_path.dentry) + || !au_test_aufs(file->f_path.dentry->d_sb)) + return; + + finfo = au_fi(file); + if (!finfo) + return; + if (finfo->fi_btop < 0) + return; + fidir = finfo->fi_hdir; + if (!fidir) + do_pri_file(finfo->fi_btop, finfo->fi_htop.hf_file); + else + for (bindex = finfo->fi_btop; + bindex >= 0 && bindex <= fidir->fd_bbot; + bindex++) { + hfile = fidir->fd_hfile + bindex; + do_pri_file(bindex, hfile ? hfile->hf_file : NULL); + } +} + +static int do_pri_br(aufs_bindex_t bindex, struct au_branch *br) +{ + struct vfsmount *mnt; + struct super_block *sb; + + if (!br || IS_ERR(br)) + goto out; + mnt = au_br_mnt(br); + if (!mnt || IS_ERR(mnt)) + goto out; + sb = mnt->mnt_sb; + if (!sb || IS_ERR(sb)) + goto out; + + dpri("s%d: {perm 0x%x, id %d, cnt %lld, wbr %p}, " + "%s, dev 0x%02x%02x, flags 0x%lx, cnt %d, active %d, " + "xino %d\n", + bindex, br->br_perm, br->br_id, au_br_count(br), + br->br_wbr, au_sbtype(sb), MAJOR(sb->s_dev), MINOR(sb->s_dev), + sb->s_flags, sb->s_count, + atomic_read(&sb->s_active), !!br->br_xino.xi_file); + return 0; + +out: + dpri("s%d: err %ld\n", bindex, PTR_ERR(br)); + return -1; +} + +void au_dpri_sb(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + aufs_bindex_t bindex; + int err; + /* to reuduce stack size */ + struct { + struct vfsmount mnt; + struct au_branch fake; + } *a; + + /* this function can be called from magic sysrq */ + a = kzalloc(sizeof(*a), GFP_ATOMIC); + if (unlikely(!a)) { + dpri("no memory\n"); + return; + } + + a->mnt.mnt_sb = sb; + a->fake.br_path.mnt = &a->mnt; + au_br_count_init(&a->fake); + err = do_pri_br(-1, &a->fake); + au_br_count_fin(&a->fake); + kfree(a); + dpri("dev 0x%x\n", sb->s_dev); + if (err || !au_test_aufs(sb)) + return; + + sbinfo = au_sbi(sb); + if (!sbinfo) + return; + dpri("nw %d, gen %u, kobj %d\n", + atomic_read(&sbinfo->si_nowait.nw_len), sbinfo->si_generation, + kref_read(&sbinfo->si_kobj.kref)); + for (bindex = 0; bindex <= sbinfo->si_bbot; bindex++) + do_pri_br(bindex, sbinfo->si_branch[0 + bindex]); +} + +/* ---------------------------------------------------------------------- */ + +void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line) +{ + struct inode *h_inode, *inode = d_inode(dentry); + struct dentry *h_dentry; + aufs_bindex_t bindex, bbot, bi; + + if (!inode /* || au_di(dentry)->di_lsc == AuLsc_DI_TMP */) + return; + + bbot = au_dbbot(dentry); + bi = au_ibbot(inode); + if (bi < bbot) + bbot = bi; + bindex = au_dbtop(dentry); + bi = au_ibtop(inode); + if (bi > bindex) + bindex = bi; + + for (; bindex <= bbot; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + h_inode = au_h_iptr(inode, bindex); + if (unlikely(h_inode != d_inode(h_dentry))) { + au_debug_on(); + AuDbg("b%d, %s:%d\n", bindex, func, line); + AuDbgDentry(dentry); + AuDbgInode(inode); + au_debug_off(); + BUG(); + } + } +} + +void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen) +{ + int err, i, j; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + + err = au_dpages_init(&dpages, GFP_NOFS); + AuDebugOn(err); + err = au_dcsub_pages_rev_aufs(&dpages, parent, /*do_include*/1); + AuDebugOn(err); + for (i = dpages.ndpage - 1; !err && i >= 0; i--) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + for (j = dpage->ndentry - 1; !err && j >= 0; j--) + AuDebugOn(au_digen_test(dentries[j], sigen)); + } + au_dpages_free(&dpages); +} + +void au_dbg_verify_kthread(void) +{ + if (au_wkq_test()) { + au_dbg_blocked(); + /* + * It may be recursive, but udba=notify between two aufs mounts, + * where a single ro branch is shared, is not a problem. + */ + /* WARN_ON(1); */ + } +} + +/* ---------------------------------------------------------------------- */ + +int __init au_debug_init(void) +{ + aufs_bindex_t bindex; + struct au_vdir_destr destr; + + bindex = -1; + AuDebugOn(bindex >= 0); + + destr.len = -1; + AuDebugOn(destr.len < NAME_MAX); + +#ifdef CONFIG_4KSTACKS + pr_warn("CONFIG_4KSTACKS is defined.\n"); +#endif + + return 0; +} --- linux-aws-4.15.0.orig/fs/aufs/debug.h +++ linux-aws-4.15.0/fs/aufs/debug.h @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * debug print functions + */ + +#ifndef __AUFS_DEBUG_H__ +#define __AUFS_DEBUG_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include + +#ifdef CONFIG_AUFS_DEBUG +#define AuDebugOn(a) BUG_ON(a) + +/* module parameter */ +extern atomic_t aufs_debug; +static inline void au_debug_on(void) +{ + atomic_inc(&aufs_debug); +} +static inline void au_debug_off(void) +{ + atomic_dec_if_positive(&aufs_debug); +} + +static inline int au_debug_test(void) +{ + return atomic_read(&aufs_debug) > 0; +} +#else +#define AuDebugOn(a) do {} while (0) +AuStubVoid(au_debug_on, void) +AuStubVoid(au_debug_off, void) +AuStubInt0(au_debug_test, void) +#endif /* CONFIG_AUFS_DEBUG */ + +#define param_check_atomic_t(name, p) __param_check(name, p, atomic_t) + +/* ---------------------------------------------------------------------- */ + +/* debug print */ + +#define AuDbg(fmt, ...) do { \ + if (au_debug_test()) \ + pr_debug("DEBUG: " fmt, ##__VA_ARGS__); \ +} while (0) +#define AuLabel(l) AuDbg(#l "\n") +#define AuIOErr(fmt, ...) pr_err("I/O Error, " fmt, ##__VA_ARGS__) +#define AuWarn1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + pr_warn(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuErr1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + pr_err(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuIOErr1(fmt, ...) do { \ + static unsigned char _c; \ + if (!_c++) \ + AuIOErr(fmt, ##__VA_ARGS__); \ +} while (0) + +#define AuUnsupportMsg "This operation is not supported." \ + " Please report this application to aufs-users ML." +#define AuUnsupport(fmt, ...) do { \ + pr_err(AuUnsupportMsg "\n" fmt, ##__VA_ARGS__); \ + dump_stack(); \ +} while (0) + +#define AuTraceErr(e) do { \ + if (unlikely((e) < 0)) \ + AuDbg("err %d\n", (int)(e)); \ +} while (0) + +#define AuTraceErrPtr(p) do { \ + if (IS_ERR(p)) \ + AuDbg("err %ld\n", PTR_ERR(p)); \ +} while (0) + +/* dirty macros for debug print, use with "%.*s" and caution */ +#define AuLNPair(qstr) (qstr)->len, (qstr)->name + +/* ---------------------------------------------------------------------- */ + +struct dentry; +#ifdef CONFIG_AUFS_DEBUG +extern struct mutex au_dbg_mtx; +extern char *au_plevel; +struct au_nhash; +void au_dpri_whlist(struct au_nhash *whlist); +struct au_vdir; +void au_dpri_vdir(struct au_vdir *vdir); +struct inode; +void au_dpri_inode(struct inode *inode); +void au_dpri_dalias(struct inode *inode); +void au_dpri_dentry(struct dentry *dentry); +struct file; +void au_dpri_file(struct file *filp); +struct super_block; +void au_dpri_sb(struct super_block *sb); + +#define au_dbg_verify_dinode(d) __au_dbg_verify_dinode(d, __func__, __LINE__) +void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line); +void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen); +void au_dbg_verify_kthread(void); + +int __init au_debug_init(void); + +#define AuDbgWhlist(w) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#w "\n"); \ + au_dpri_whlist(w); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgVdir(v) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#v "\n"); \ + au_dpri_vdir(v); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgInode(i) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#i "\n"); \ + au_dpri_inode(i); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgDAlias(i) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#i "\n"); \ + au_dpri_dalias(i); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgDentry(d) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#d "\n"); \ + au_dpri_dentry(d); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgFile(f) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#f "\n"); \ + au_dpri_file(f); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgSb(sb) do { \ + mutex_lock(&au_dbg_mtx); \ + AuDbg(#sb "\n"); \ + au_dpri_sb(sb); \ + mutex_unlock(&au_dbg_mtx); \ +} while (0) + +#define AuDbgSym(addr) do { \ + char sym[KSYM_SYMBOL_LEN]; \ + sprint_symbol(sym, (unsigned long)addr); \ + AuDbg("%s\n", sym); \ +} while (0) +#else +AuStubVoid(au_dbg_verify_dinode, struct dentry *dentry) +AuStubVoid(au_dbg_verify_gen, struct dentry *parent, unsigned int sigen) +AuStubVoid(au_dbg_verify_kthread, void) +AuStubInt0(__init au_debug_init, void) + +#define AuDbgWhlist(w) do {} while (0) +#define AuDbgVdir(v) do {} while (0) +#define AuDbgInode(i) do {} while (0) +#define AuDbgDAlias(i) do {} while (0) +#define AuDbgDentry(d) do {} while (0) +#define AuDbgFile(f) do {} while (0) +#define AuDbgSb(sb) do {} while (0) +#define AuDbgSym(addr) do {} while (0) +#endif /* CONFIG_AUFS_DEBUG */ + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_MAGIC_SYSRQ +int __init au_sysrq_init(void); +void au_sysrq_fin(void); + +#ifdef CONFIG_HW_CONSOLE +#define au_dbg_blocked() do { \ + WARN_ON(1); \ + handle_sysrq('w'); \ +} while (0) +#else +AuStubVoid(au_dbg_blocked, void) +#endif + +#else +AuStubInt0(__init au_sysrq_init, void) +AuStubVoid(au_sysrq_fin, void) +AuStubVoid(au_dbg_blocked, void) +#endif /* CONFIG_AUFS_MAGIC_SYSRQ */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DEBUG_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dentry.c +++ linux-aws-4.15.0/fs/aufs/dentry.c @@ -0,0 +1,1152 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * lookup and dentry operations + */ + +#include +#include "aufs.h" + +/* + * returns positive/negative dentry, NULL or an error. + * NULL means whiteout-ed or not-found. + */ +static struct dentry* +au_do_lookup(struct dentry *h_parent, struct dentry *dentry, + aufs_bindex_t bindex, struct au_do_lookup_args *args) +{ + struct dentry *h_dentry; + struct inode *h_inode; + struct au_branch *br; + int wh_found, opq; + unsigned char wh_able; + const unsigned char allow_neg = !!au_ftest_lkup(args->flags, ALLOW_NEG); + const unsigned char ignore_perm = !!au_ftest_lkup(args->flags, + IGNORE_PERM); + + wh_found = 0; + br = au_sbr(dentry->d_sb, bindex); + wh_able = !!au_br_whable(br->br_perm); + if (wh_able) + wh_found = au_wh_test(h_parent, &args->whname, ignore_perm); + h_dentry = ERR_PTR(wh_found); + if (!wh_found) + goto real_lookup; + if (unlikely(wh_found < 0)) + goto out; + + /* We found a whiteout */ + /* au_set_dbbot(dentry, bindex); */ + au_set_dbwh(dentry, bindex); + if (!allow_neg) + return NULL; /* success */ + +real_lookup: + if (!ignore_perm) + h_dentry = vfsub_lkup_one(args->name, h_parent); + else + h_dentry = au_sio_lkup_one(args->name, h_parent); + if (IS_ERR(h_dentry)) { + if (PTR_ERR(h_dentry) == -ENAMETOOLONG + && !allow_neg) + h_dentry = NULL; + goto out; + } + + h_inode = d_inode(h_dentry); + if (d_is_negative(h_dentry)) { + if (!allow_neg) + goto out_neg; + } else if (wh_found + || (args->type && args->type != (h_inode->i_mode & S_IFMT))) + goto out_neg; + else if (au_ftest_lkup(args->flags, DIRREN) + /* && h_inode */ + && !au_dr_lkup_h_ino(args, bindex, h_inode->i_ino)) { + AuDbg("b%d %pd ignored hi%llu\n", bindex, h_dentry, + (unsigned long long)h_inode->i_ino); + goto out_neg; + } + + if (au_dbbot(dentry) <= bindex) + au_set_dbbot(dentry, bindex); + if (au_dbtop(dentry) < 0 || bindex < au_dbtop(dentry)) + au_set_dbtop(dentry, bindex); + au_set_h_dptr(dentry, bindex, h_dentry); + + if (!d_is_dir(h_dentry) + || !wh_able + || (d_really_is_positive(dentry) && !d_is_dir(dentry))) + goto out; /* success */ + + vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); + opq = au_diropq_test(h_dentry); + inode_unlock_shared(h_inode); + if (opq > 0) + au_set_dbdiropq(dentry, bindex); + else if (unlikely(opq < 0)) { + au_set_h_dptr(dentry, bindex, NULL); + h_dentry = ERR_PTR(opq); + } + goto out; + +out_neg: + dput(h_dentry); + h_dentry = NULL; +out: + return h_dentry; +} + +static int au_test_shwh(struct super_block *sb, const struct qstr *name) +{ + if (unlikely(!au_opt_test(au_mntflags(sb), SHWH) + && !strncmp(name->name, AUFS_WH_PFX, AUFS_WH_PFX_LEN))) + return -EPERM; + return 0; +} + +/* + * returns the number of lower positive dentries, + * otherwise an error. + * can be called at unlinking with @type is zero. + */ +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t btop, + unsigned int flags) +{ + int npositive, err; + aufs_bindex_t bindex, btail, bdiropq; + unsigned char isdir, dirperm1, dirren; + struct au_do_lookup_args args = { + .flags = flags, + .name = &dentry->d_name + }; + struct dentry *parent; + struct super_block *sb; + + sb = dentry->d_sb; + err = au_test_shwh(sb, args.name); + if (unlikely(err)) + goto out; + + err = au_wh_name_alloc(&args.whname, args.name); + if (unlikely(err)) + goto out; + + isdir = !!d_is_dir(dentry); + dirperm1 = !!au_opt_test(au_mntflags(sb), DIRPERM1); + dirren = !!au_opt_test(au_mntflags(sb), DIRREN); + if (dirren) + au_fset_lkup(args.flags, DIRREN); + + npositive = 0; + parent = dget_parent(dentry); + btail = au_dbtaildir(parent); + for (bindex = btop; bindex <= btail; bindex++) { + struct dentry *h_parent, *h_dentry; + struct inode *h_inode, *h_dir; + struct au_branch *br; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) { + if (d_is_positive(h_dentry)) + npositive++; + break; + } + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !d_is_dir(h_parent)) + continue; + + if (dirren) { + /* if the inum matches, then use the prepared name */ + err = au_dr_lkup_name(&args, bindex); + if (unlikely(err)) + goto out_parent; + } + + h_dir = d_inode(h_parent); + vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + h_dentry = au_do_lookup(h_parent, dentry, bindex, &args); + inode_unlock_shared(h_dir); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out_parent; + if (h_dentry) + au_fclr_lkup(args.flags, ALLOW_NEG); + if (dirperm1) + au_fset_lkup(args.flags, IGNORE_PERM); + + if (au_dbwh(dentry) == bindex) + break; + if (!h_dentry) + continue; + if (d_is_negative(h_dentry)) + continue; + h_inode = d_inode(h_dentry); + npositive++; + if (!args.type) + args.type = h_inode->i_mode & S_IFMT; + if (args.type != S_IFDIR) + break; + else if (isdir) { + /* the type of lower may be different */ + bdiropq = au_dbdiropq(dentry); + if (bdiropq >= 0 && bdiropq <= bindex) + break; + } + br = au_sbr(sb, bindex); + if (dirren + && au_dr_hino_test_add(&br->br_dirren, h_inode->i_ino, + /*add_ent*/NULL)) { + /* prepare next name to lookup */ + err = au_dr_lkup(&args, dentry, bindex); + if (unlikely(err)) + goto out_parent; + } + } + + if (npositive) { + AuLabel(positive); + au_update_dbtop(dentry); + } + err = npositive; + if (unlikely(!au_opt_test(au_mntflags(sb), UDBA_NONE) + && au_dbtop(dentry) < 0)) { + err = -EIO; + AuIOErr("both of real entry and whiteout found, %pd, err %d\n", + dentry, err); + } + +out_parent: + dput(parent); + kfree(args.whname.name); + if (dirren) + au_dr_lkup_fin(&args); +out: + return err; +} + +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent) +{ + struct dentry *dentry; + int wkq_err; + + if (!au_test_h_perm_sio(d_inode(parent), MAY_EXEC)) + dentry = vfsub_lkup_one(name, parent); + else { + struct vfsub_lkup_one_args args = { + .errp = &dentry, + .name = name, + .parent = parent + }; + + wkq_err = au_wkq_wait(vfsub_call_lkup_one, &args); + if (unlikely(wkq_err)) + dentry = ERR_PTR(wkq_err); + } + + return dentry; +} + +/* + * lookup @dentry on @bindex which should be negative. + */ +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex, int wh) +{ + int err; + struct dentry *parent, *h_parent, *h_dentry; + struct au_branch *br; + + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bindex); + br = au_sbr(dentry->d_sb, bindex); + if (wh) + h_dentry = au_whtmp_lkup(h_parent, br, &dentry->d_name); + else + h_dentry = au_sio_lkup_one(&dentry->d_name, h_parent); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out; + if (unlikely(d_is_positive(h_dentry))) { + err = -EIO; + AuIOErr("%pd should be negative on b%d.\n", h_dentry, bindex); + dput(h_dentry); + goto out; + } + + err = 0; + if (bindex < au_dbtop(dentry)) + au_set_dbtop(dentry, bindex); + if (au_dbbot(dentry) < bindex) + au_set_dbbot(dentry, bindex); + au_set_h_dptr(dentry, bindex, h_dentry); + +out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* subset of struct inode */ +struct au_iattr { + unsigned long i_ino; + /* unsigned int i_nlink; */ + kuid_t i_uid; + kgid_t i_gid; + u64 i_version; +/* + loff_t i_size; + blkcnt_t i_blocks; +*/ + umode_t i_mode; +}; + +static void au_iattr_save(struct au_iattr *ia, struct inode *h_inode) +{ + ia->i_ino = h_inode->i_ino; + /* ia->i_nlink = h_inode->i_nlink; */ + ia->i_uid = h_inode->i_uid; + ia->i_gid = h_inode->i_gid; + ia->i_version = h_inode->i_version; +/* + ia->i_size = h_inode->i_size; + ia->i_blocks = h_inode->i_blocks; +*/ + ia->i_mode = (h_inode->i_mode & S_IFMT); +} + +static int au_iattr_test(struct au_iattr *ia, struct inode *h_inode) +{ + return ia->i_ino != h_inode->i_ino + /* || ia->i_nlink != h_inode->i_nlink */ + || !uid_eq(ia->i_uid, h_inode->i_uid) + || !gid_eq(ia->i_gid, h_inode->i_gid) + || ia->i_version != h_inode->i_version +/* + || ia->i_size != h_inode->i_size + || ia->i_blocks != h_inode->i_blocks +*/ + || ia->i_mode != (h_inode->i_mode & S_IFMT); +} + +static int au_h_verify_dentry(struct dentry *h_dentry, struct dentry *h_parent, + struct au_branch *br) +{ + int err; + struct au_iattr ia; + struct inode *h_inode; + struct dentry *h_d; + struct super_block *h_sb; + + err = 0; + memset(&ia, -1, sizeof(ia)); + h_sb = h_dentry->d_sb; + h_inode = NULL; + if (d_is_positive(h_dentry)) { + h_inode = d_inode(h_dentry); + au_iattr_save(&ia, h_inode); + } else if (au_test_nfs(h_sb) || au_test_fuse(h_sb)) + /* nfs d_revalidate may return 0 for negative dentry */ + /* fuse d_revalidate always return 0 for negative dentry */ + goto out; + + /* main purpose is namei.c:cached_lookup() and d_revalidate */ + h_d = vfsub_lkup_one(&h_dentry->d_name, h_parent); + err = PTR_ERR(h_d); + if (IS_ERR(h_d)) + goto out; + + err = 0; + if (unlikely(h_d != h_dentry + || d_inode(h_d) != h_inode + || (h_inode && au_iattr_test(&ia, h_inode)))) + err = au_busy_or_stale(); + dput(h_d); + +out: + AuTraceErr(err); + return err; +} + +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, + struct dentry *h_parent, struct au_branch *br) +{ + int err; + + err = 0; + if (udba == AuOpt_UDBA_REVAL + && !au_test_fs_remote(h_dentry->d_sb)) { + IMustLock(h_dir); + err = (d_inode(h_dentry->d_parent) != h_dir); + } else if (udba != AuOpt_UDBA_NONE) + err = au_h_verify_dentry(h_dentry, h_parent, br); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_refresh_hdentry(struct dentry *dentry, struct dentry *parent) +{ + int err; + aufs_bindex_t new_bindex, bindex, bbot, bwh, bdiropq; + struct au_hdentry tmp, *p, *q; + struct au_dinfo *dinfo; + struct super_block *sb; + + DiMustWriteLock(dentry); + + sb = dentry->d_sb; + dinfo = au_di(dentry); + bbot = dinfo->di_bbot; + bwh = dinfo->di_bwh; + bdiropq = dinfo->di_bdiropq; + bindex = dinfo->di_btop; + p = au_hdentry(dinfo, bindex); + for (; bindex <= bbot; bindex++, p++) { + if (!p->hd_dentry) + continue; + + new_bindex = au_br_index(sb, p->hd_id); + if (new_bindex == bindex) + continue; + + if (dinfo->di_bwh == bindex) + bwh = new_bindex; + if (dinfo->di_bdiropq == bindex) + bdiropq = new_bindex; + if (new_bindex < 0) { + au_hdput(p); + p->hd_dentry = NULL; + continue; + } + + /* swap two lower dentries, and loop again */ + q = au_hdentry(dinfo, new_bindex); + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hd_dentry) { + bindex--; + p--; + } + } + + dinfo->di_bwh = -1; + if (bwh >= 0 && bwh <= au_sbbot(sb) && au_sbr_whable(sb, bwh)) + dinfo->di_bwh = bwh; + + dinfo->di_bdiropq = -1; + if (bdiropq >= 0 + && bdiropq <= au_sbbot(sb) + && au_sbr_whable(sb, bdiropq)) + dinfo->di_bdiropq = bdiropq; + + err = -EIO; + dinfo->di_btop = -1; + dinfo->di_bbot = -1; + bbot = au_dbbot(parent); + bindex = 0; + p = au_hdentry(dinfo, bindex); + for (; bindex <= bbot; bindex++, p++) + if (p->hd_dentry) { + dinfo->di_btop = bindex; + break; + } + + if (dinfo->di_btop >= 0) { + bindex = bbot; + p = au_hdentry(dinfo, bindex); + for (; bindex >= 0; bindex--, p--) + if (p->hd_dentry) { + dinfo->di_bbot = bindex; + err = 0; + break; + } + } + + return err; +} + +static void au_do_hide(struct dentry *dentry) +{ + struct inode *inode; + + if (d_really_is_positive(dentry)) { + inode = d_inode(dentry); + if (!d_is_dir(dentry)) { + if (inode->i_nlink && !d_unhashed(dentry)) + drop_nlink(inode); + } else { + clear_nlink(inode); + /* stop next lookup */ + inode->i_flags |= S_DEAD; + } + smp_mb(); /* necessary? */ + } + d_drop(dentry); +} + +static int au_hide_children(struct dentry *parent) +{ + int err, i, j, ndentry; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry *dentry; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, parent, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + /* in reverse order */ + for (i = dpages.ndpage - 1; i >= 0; i--) { + dpage = dpages.dpages + i; + ndentry = dpage->ndentry; + for (j = ndentry - 1; j >= 0; j--) { + dentry = dpage->dentries[j]; + if (dentry != parent) + au_do_hide(dentry); + } + } + +out_dpages: + au_dpages_free(&dpages); +out: + return err; +} + +static void au_hide(struct dentry *dentry) +{ + int err; + + AuDbgDentry(dentry); + if (d_is_dir(dentry)) { + /* shrink_dcache_parent(dentry); */ + err = au_hide_children(dentry); + if (unlikely(err)) + AuIOErr("%pd, failed hiding children, ignored %d\n", + dentry, err); + } + au_do_hide(dentry); +} + +/* + * By adding a dirty branch, a cached dentry may be affected in various ways. + * + * a dirty branch is added + * - on the top of layers + * - in the middle of layers + * - to the bottom of layers + * + * on the added branch there exists + * - a whiteout + * - a diropq + * - a same named entry + * + exist + * * negative --> positive + * * positive --> positive + * - type is unchanged + * - type is changed + * + doesn't exist + * * negative --> negative + * * positive --> negative (rejected by au_br_del() for non-dir case) + * - none + */ +static int au_refresh_by_dinfo(struct dentry *dentry, struct au_dinfo *dinfo, + struct au_dinfo *tmp) +{ + int err; + aufs_bindex_t bindex, bbot; + struct { + struct dentry *dentry; + struct inode *inode; + mode_t mode; + } orig_h, tmp_h = { + .dentry = NULL + }; + struct au_hdentry *hd; + struct inode *inode, *h_inode; + struct dentry *h_dentry; + + err = 0; + AuDebugOn(dinfo->di_btop < 0); + orig_h.mode = 0; + orig_h.dentry = au_hdentry(dinfo, dinfo->di_btop)->hd_dentry; + orig_h.inode = NULL; + if (d_is_positive(orig_h.dentry)) { + orig_h.inode = d_inode(orig_h.dentry); + orig_h.mode = orig_h.inode->i_mode & S_IFMT; + } + if (tmp->di_btop >= 0) { + tmp_h.dentry = au_hdentry(tmp, tmp->di_btop)->hd_dentry; + if (d_is_positive(tmp_h.dentry)) { + tmp_h.inode = d_inode(tmp_h.dentry); + tmp_h.mode = tmp_h.inode->i_mode & S_IFMT; + } + } + + inode = NULL; + if (d_really_is_positive(dentry)) + inode = d_inode(dentry); + if (!orig_h.inode) { + AuDbg("nagative originally\n"); + if (inode) { + au_hide(dentry); + goto out; + } + AuDebugOn(inode); + AuDebugOn(dinfo->di_btop != dinfo->di_bbot); + AuDebugOn(dinfo->di_bdiropq != -1); + + if (!tmp_h.inode) { + AuDbg("negative --> negative\n"); + /* should have only one negative lower */ + if (tmp->di_btop >= 0 + && tmp->di_btop < dinfo->di_btop) { + AuDebugOn(tmp->di_btop != tmp->di_bbot); + AuDebugOn(dinfo->di_btop != dinfo->di_bbot); + au_set_h_dptr(dentry, dinfo->di_btop, NULL); + au_di_cp(dinfo, tmp); + hd = au_hdentry(tmp, tmp->di_btop); + au_set_h_dptr(dentry, tmp->di_btop, + dget(hd->hd_dentry)); + } + au_dbg_verify_dinode(dentry); + } else { + AuDbg("negative --> positive\n"); + /* + * similar to the behaviour of creating with bypassing + * aufs. + * unhash it in order to force an error in the + * succeeding create operation. + * we should not set S_DEAD here. + */ + d_drop(dentry); + /* au_di_swap(tmp, dinfo); */ + au_dbg_verify_dinode(dentry); + } + } else { + AuDbg("positive originally\n"); + /* inode may be NULL */ + AuDebugOn(inode && (inode->i_mode & S_IFMT) != orig_h.mode); + if (!tmp_h.inode) { + AuDbg("positive --> negative\n"); + /* or bypassing aufs */ + au_hide(dentry); + if (tmp->di_bwh >= 0 && tmp->di_bwh <= dinfo->di_btop) + dinfo->di_bwh = tmp->di_bwh; + if (inode) + err = au_refresh_hinode_self(inode); + au_dbg_verify_dinode(dentry); + } else if (orig_h.mode == tmp_h.mode) { + AuDbg("positive --> positive, same type\n"); + if (!S_ISDIR(orig_h.mode) + && dinfo->di_btop > tmp->di_btop) { + /* + * similar to the behaviour of removing and + * creating. + */ + au_hide(dentry); + if (inode) + err = au_refresh_hinode_self(inode); + au_dbg_verify_dinode(dentry); + } else { + /* fill empty slots */ + if (dinfo->di_btop > tmp->di_btop) + dinfo->di_btop = tmp->di_btop; + if (dinfo->di_bbot < tmp->di_bbot) + dinfo->di_bbot = tmp->di_bbot; + dinfo->di_bwh = tmp->di_bwh; + dinfo->di_bdiropq = tmp->di_bdiropq; + bbot = dinfo->di_bbot; + bindex = tmp->di_btop; + hd = au_hdentry(tmp, bindex); + for (; bindex <= bbot; bindex++, hd++) { + if (au_h_dptr(dentry, bindex)) + continue; + h_dentry = hd->hd_dentry; + if (!h_dentry) + continue; + AuDebugOn(d_is_negative(h_dentry)); + h_inode = d_inode(h_dentry); + AuDebugOn(orig_h.mode + != (h_inode->i_mode + & S_IFMT)); + au_set_h_dptr(dentry, bindex, + dget(h_dentry)); + } + if (inode) + err = au_refresh_hinode(inode, dentry); + au_dbg_verify_dinode(dentry); + } + } else { + AuDbg("positive --> positive, different type\n"); + /* similar to the behaviour of removing and creating */ + au_hide(dentry); + if (inode) + err = au_refresh_hinode_self(inode); + au_dbg_verify_dinode(dentry); + } + } + +out: + return err; +} + +void au_refresh_dop(struct dentry *dentry, int force_reval) +{ + const struct dentry_operations *dop + = force_reval ? &aufs_dop : dentry->d_sb->s_d_op; + static const unsigned int mask + = DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE; + + BUILD_BUG_ON(sizeof(mask) != sizeof(dentry->d_flags)); + + if (dentry->d_op == dop) + return; + + AuDbg("%pd\n", dentry); + spin_lock(&dentry->d_lock); + if (dop == &aufs_dop) + dentry->d_flags |= mask; + else + dentry->d_flags &= ~mask; + dentry->d_op = dop; + spin_unlock(&dentry->d_lock); +} + +int au_refresh_dentry(struct dentry *dentry, struct dentry *parent) +{ + int err, ebrange, nbr; + unsigned int sigen; + struct au_dinfo *dinfo, *tmp; + struct super_block *sb; + struct inode *inode; + + DiMustWriteLock(dentry); + AuDebugOn(IS_ROOT(dentry)); + AuDebugOn(d_really_is_negative(parent)); + + sb = dentry->d_sb; + sigen = au_sigen(sb); + err = au_digen_test(parent, sigen); + if (unlikely(err)) + goto out; + + nbr = au_sbbot(sb) + 1; + dinfo = au_di(dentry); + err = au_di_realloc(dinfo, nbr, /*may_shrink*/0); + if (unlikely(err)) + goto out; + ebrange = au_dbrange_test(dentry); + if (!ebrange) + ebrange = au_do_refresh_hdentry(dentry, parent); + + if (d_unhashed(dentry) || ebrange /* || dinfo->di_tmpfile */) { + AuDebugOn(au_dbtop(dentry) < 0 && au_dbbot(dentry) >= 0); + if (d_really_is_positive(dentry)) { + inode = d_inode(dentry); + err = au_refresh_hinode_self(inode); + } + au_dbg_verify_dinode(dentry); + if (!err) + goto out_dgen; /* success */ + goto out; + } + + /* temporary dinfo */ + AuDbgDentry(dentry); + err = -ENOMEM; + tmp = au_di_alloc(sb, AuLsc_DI_TMP); + if (unlikely(!tmp)) + goto out; + au_di_swap(tmp, dinfo); + /* returns the number of positive dentries */ + /* + * if current working dir is removed, it returns an error. + * but the dentry is legal. + */ + err = au_lkup_dentry(dentry, /*btop*/0, AuLkup_ALLOW_NEG); + AuDbgDentry(dentry); + au_di_swap(tmp, dinfo); + if (err == -ENOENT) + err = 0; + if (err >= 0) { + /* compare/refresh by dinfo */ + AuDbgDentry(dentry); + err = au_refresh_by_dinfo(dentry, dinfo, tmp); + au_dbg_verify_dinode(dentry); + AuTraceErr(err); + } + au_di_realloc(dinfo, nbr, /*may_shrink*/1); /* harmless if err */ + au_rw_write_unlock(&tmp->di_rwsem); + au_di_free(tmp); + if (unlikely(err)) + goto out; + +out_dgen: + au_update_digen(dentry); +out: + if (unlikely(err && !(dentry->d_flags & DCACHE_NFSFS_RENAMED))) { + AuIOErr("failed refreshing %pd, %d\n", dentry, err); + AuDbgDentry(dentry); + } + AuTraceErr(err); + return err; +} + +static int au_do_h_d_reval(struct dentry *h_dentry, unsigned int flags, + struct dentry *dentry, aufs_bindex_t bindex) +{ + int err, valid; + + err = 0; + if (!(h_dentry->d_flags & DCACHE_OP_REVALIDATE)) + goto out; + + AuDbg("b%d\n", bindex); + /* + * gave up supporting LOOKUP_CREATE/OPEN for lower fs, + * due to whiteout and branch permission. + */ + flags &= ~(/*LOOKUP_PARENT |*/ LOOKUP_OPEN | LOOKUP_CREATE + | LOOKUP_FOLLOW | LOOKUP_EXCL); + /* it may return tri-state */ + valid = h_dentry->d_op->d_revalidate(h_dentry, flags); + + if (unlikely(valid < 0)) + err = valid; + else if (!valid) + err = -EINVAL; + +out: + AuTraceErr(err); + return err; +} + +/* todo: remove this */ +static int h_d_revalidate(struct dentry *dentry, struct inode *inode, + unsigned int flags, int do_udba, int dirren) +{ + int err; + umode_t mode, h_mode; + aufs_bindex_t bindex, btail, btop, ibs, ibe; + unsigned char plus, unhashed, is_root, h_plus, h_nfs, tmpfile; + struct inode *h_inode, *h_cached_inode; + struct dentry *h_dentry; + struct qstr *name, *h_name; + + err = 0; + plus = 0; + mode = 0; + ibs = -1; + ibe = -1; + unhashed = !!d_unhashed(dentry); + is_root = !!IS_ROOT(dentry); + name = &dentry->d_name; + tmpfile = au_di(dentry)->di_tmpfile; + + /* + * Theoretically, REVAL test should be unnecessary in case of + * {FS,I}NOTIFY. + * But {fs,i}notify doesn't fire some necessary events, + * IN_ATTRIB for atime/nlink/pageio + * Let's do REVAL test too. + */ + if (do_udba && inode) { + mode = (inode->i_mode & S_IFMT); + plus = (inode->i_nlink > 0); + ibs = au_ibtop(inode); + ibe = au_ibbot(inode); + } + + btop = au_dbtop(dentry); + btail = btop; + if (inode && S_ISDIR(inode->i_mode)) + btail = au_dbtaildir(dentry); + for (bindex = btop; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + AuDbg("b%d, %pd\n", bindex, h_dentry); + h_nfs = !!au_test_nfs(h_dentry->d_sb); + spin_lock(&h_dentry->d_lock); + h_name = &h_dentry->d_name; + if (unlikely(do_udba + && !is_root + && ((!h_nfs + && (unhashed != !!d_unhashed(h_dentry) + || (!tmpfile && !dirren + && !au_qstreq(name, h_name)) + )) + || (h_nfs + && !(flags & LOOKUP_OPEN) + && (h_dentry->d_flags + & DCACHE_NFSFS_RENAMED))) + )) { + int h_unhashed; + + h_unhashed = d_unhashed(h_dentry); + spin_unlock(&h_dentry->d_lock); + AuDbg("unhash 0x%x 0x%x, %pd %pd\n", + unhashed, h_unhashed, dentry, h_dentry); + goto err; + } + spin_unlock(&h_dentry->d_lock); + + err = au_do_h_d_reval(h_dentry, flags, dentry, bindex); + if (unlikely(err)) + /* do not goto err, to keep the errno */ + break; + + /* todo: plink too? */ + if (!do_udba) + continue; + + /* UDBA tests */ + if (unlikely(!!inode != d_is_positive(h_dentry))) + goto err; + + h_inode = NULL; + if (d_is_positive(h_dentry)) + h_inode = d_inode(h_dentry); + h_plus = plus; + h_mode = mode; + h_cached_inode = h_inode; + if (h_inode) { + h_mode = (h_inode->i_mode & S_IFMT); + h_plus = (h_inode->i_nlink > 0); + } + if (inode && ibs <= bindex && bindex <= ibe) + h_cached_inode = au_h_iptr(inode, bindex); + + if (!h_nfs) { + if (unlikely(plus != h_plus && !tmpfile)) + goto err; + } else { + if (unlikely(!(h_dentry->d_flags & DCACHE_NFSFS_RENAMED) + && !is_root + && !IS_ROOT(h_dentry) + && unhashed != d_unhashed(h_dentry))) + goto err; + } + if (unlikely(mode != h_mode + || h_cached_inode != h_inode)) + goto err; + continue; + +err: + err = -EINVAL; + break; + } + + AuTraceErr(err); + return err; +} + +/* todo: consolidate with do_refresh() and au_reval_for_attr() */ +static int simple_reval_dpath(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct dentry *parent; + + if (!au_digen_test(dentry, sigen)) + return 0; + + parent = dget_parent(dentry); + di_read_lock_parent(parent, AuLock_IR); + AuDebugOn(au_digen_test(parent, sigen)); + au_dbg_verify_gen(parent, sigen); + err = au_refresh_dentry(dentry, parent); + di_read_unlock(parent, AuLock_IR); + dput(parent); + AuTraceErr(err); + return err; +} + +int au_reval_dpath(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct dentry *d, *parent; + + if (!au_ftest_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIR)) + return simple_reval_dpath(dentry, sigen); + + /* slow loop, keep it simple and stupid */ + /* cf: au_cpup_dirs() */ + err = 0; + parent = NULL; + while (au_digen_test(dentry, sigen)) { + d = dentry; + while (1) { + dput(parent); + parent = dget_parent(d); + if (!au_digen_test(parent, sigen)) + break; + d = parent; + } + + if (d != dentry) + di_write_lock_child2(d); + + /* someone might update our dentry while we were sleeping */ + if (au_digen_test(d, sigen)) { + /* + * todo: consolidate with simple_reval_dpath(), + * do_refresh() and au_reval_for_attr(). + */ + di_read_lock_parent(parent, AuLock_IR); + err = au_refresh_dentry(d, parent); + di_read_unlock(parent, AuLock_IR); + } + + if (d != dentry) + di_write_unlock(d); + dput(parent); + if (unlikely(err)) + break; + } + + return err; +} + +/* + * if valid returns 1, otherwise 0. + */ +static int aufs_d_revalidate(struct dentry *dentry, unsigned int flags) +{ + int valid, err; + unsigned int sigen; + unsigned char do_udba, dirren; + struct super_block *sb; + struct inode *inode; + + /* todo: support rcu-walk? */ + if (flags & LOOKUP_RCU) + return -ECHILD; + + valid = 0; + if (unlikely(!au_di(dentry))) + goto out; + + valid = 1; + sb = dentry->d_sb; + /* + * todo: very ugly + * i_mutex of parent dir may be held, + * but we should not return 'invalid' due to busy. + */ + err = aufs_read_lock(dentry, AuLock_FLUSH | AuLock_DW | AuLock_NOPLM); + if (unlikely(err)) { + valid = err; + AuTraceErr(err); + goto out; + } + inode = NULL; + if (d_really_is_positive(dentry)) + inode = d_inode(dentry); + if (unlikely(inode && au_is_bad_inode(inode))) { + err = -EINVAL; + AuTraceErr(err); + goto out_dgrade; + } + if (unlikely(au_dbrange_test(dentry))) { + err = -EINVAL; + AuTraceErr(err); + goto out_dgrade; + } + + sigen = au_sigen(sb); + if (au_digen_test(dentry, sigen)) { + AuDebugOn(IS_ROOT(dentry)); + err = au_reval_dpath(dentry, sigen); + if (unlikely(err)) { + AuTraceErr(err); + goto out_dgrade; + } + } + di_downgrade_lock(dentry, AuLock_IR); + + err = -EINVAL; + if (!(flags & (LOOKUP_OPEN | LOOKUP_EMPTY)) + && inode + && !(inode->i_state && I_LINKABLE) + && (IS_DEADDIR(inode) || !inode->i_nlink)) { + AuTraceErr(err); + goto out_inval; + } + + do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE); + if (do_udba && inode) { + aufs_bindex_t btop = au_ibtop(inode); + struct inode *h_inode; + + if (btop >= 0) { + h_inode = au_h_iptr(inode, btop); + if (h_inode && au_test_higen(inode, h_inode)) { + AuTraceErr(err); + goto out_inval; + } + } + } + + dirren = !!au_opt_test(au_mntflags(sb), DIRREN); + err = h_d_revalidate(dentry, inode, flags, do_udba, dirren); + if (unlikely(!err && do_udba && au_dbtop(dentry) < 0)) { + err = -EIO; + AuDbg("both of real entry and whiteout found, %p, err %d\n", + dentry, err); + } + goto out_inval; + +out_dgrade: + di_downgrade_lock(dentry, AuLock_IR); +out_inval: + aufs_read_unlock(dentry, AuLock_IR); + AuTraceErr(err); + valid = !err; +out: + if (!valid) { + AuDbg("%pd invalid, %d\n", dentry, valid); + d_drop(dentry); + } + return valid; +} + +static void aufs_d_release(struct dentry *dentry) +{ + if (au_di(dentry)) { + au_di_fin(dentry); + au_hn_di_reinit(dentry); + } +} + +const struct dentry_operations aufs_dop = { + .d_revalidate = aufs_d_revalidate, + .d_weak_revalidate = aufs_d_revalidate, + .d_release = aufs_d_release +}; + +/* aufs_dop without d_revalidate */ +const struct dentry_operations aufs_dop_noreval = { + .d_release = aufs_d_release +}; --- linux-aws-4.15.0.orig/fs/aufs/dentry.h +++ linux-aws-4.15.0/fs/aufs/dentry.h @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * lookup and dentry operations + */ + +#ifndef __AUFS_DENTRY_H__ +#define __AUFS_DENTRY_H__ + +#ifdef __KERNEL__ + +#include +#include "dirren.h" +#include "rwsem.h" + +struct au_hdentry { + struct dentry *hd_dentry; + aufs_bindex_t hd_id; +}; + +struct au_dinfo { + atomic_t di_generation; + + struct au_rwsem di_rwsem; + aufs_bindex_t di_btop, di_bbot, di_bwh, di_bdiropq; + unsigned char di_tmpfile; /* to allow the different name */ + struct au_hdentry *di_hdentry; +} ____cacheline_aligned_in_smp; + +/* ---------------------------------------------------------------------- */ + +/* flags for au_lkup_dentry() */ +#define AuLkup_ALLOW_NEG 1 +#define AuLkup_IGNORE_PERM (1 << 1) +#define AuLkup_DIRREN (1 << 2) +#define au_ftest_lkup(flags, name) ((flags) & AuLkup_##name) +#define au_fset_lkup(flags, name) \ + do { (flags) |= AuLkup_##name; } while (0) +#define au_fclr_lkup(flags, name) \ + do { (flags) &= ~AuLkup_##name; } while (0) + +#ifndef CONFIG_AUFS_DIRREN +#undef AuLkup_DIRREN +#define AuLkup_DIRREN 0 +#endif + +struct au_do_lookup_args { + unsigned int flags; + mode_t type; + struct qstr whname, *name; + struct au_dr_lookup dirren; +}; + +/* ---------------------------------------------------------------------- */ + +/* dentry.c */ +extern const struct dentry_operations aufs_dop, aufs_dop_noreval; +struct au_branch; +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent); +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir, + struct dentry *h_parent, struct au_branch *br); + +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t btop, + unsigned int flags); +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex, int wh); +int au_refresh_dentry(struct dentry *dentry, struct dentry *parent); +int au_reval_dpath(struct dentry *dentry, unsigned int sigen); +void au_refresh_dop(struct dentry *dentry, int force_reval); + +/* dinfo.c */ +void au_di_init_once(void *_di); +struct au_dinfo *au_di_alloc(struct super_block *sb, unsigned int lsc); +void au_di_free(struct au_dinfo *dinfo); +void au_di_swap(struct au_dinfo *a, struct au_dinfo *b); +void au_di_cp(struct au_dinfo *dst, struct au_dinfo *src); +int au_di_init(struct dentry *dentry); +void au_di_fin(struct dentry *dentry); +int au_di_realloc(struct au_dinfo *dinfo, int nbr, int may_shrink); + +void di_read_lock(struct dentry *d, int flags, unsigned int lsc); +void di_read_unlock(struct dentry *d, int flags); +void di_downgrade_lock(struct dentry *d, int flags); +void di_write_lock(struct dentry *d, unsigned int lsc); +void di_write_unlock(struct dentry *d); +void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir); +void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir); +void di_write_unlock2(struct dentry *d1, struct dentry *d2); + +struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex); +struct dentry *au_h_d_alias(struct dentry *dentry, aufs_bindex_t bindex); +aufs_bindex_t au_dbtail(struct dentry *dentry); +aufs_bindex_t au_dbtaildir(struct dentry *dentry); + +void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_dentry); +int au_digen_test(struct dentry *dentry, unsigned int sigen); +int au_dbrange_test(struct dentry *dentry); +void au_update_digen(struct dentry *dentry); +void au_update_dbrange(struct dentry *dentry, int do_put_zero); +void au_update_dbtop(struct dentry *dentry); +void au_update_dbbot(struct dentry *dentry); +int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_dinfo *au_di(struct dentry *dentry) +{ + return dentry->d_fsdata; +} + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for dinfo */ +enum { + AuLsc_DI_CHILD, /* child first */ + AuLsc_DI_CHILD2, /* rename(2), link(2), and cpup at hnotify */ + AuLsc_DI_CHILD3, /* copyup dirs */ + AuLsc_DI_PARENT, + AuLsc_DI_PARENT2, + AuLsc_DI_PARENT3, + AuLsc_DI_TMP /* temp for replacing dinfo */ +}; + +/* + * di_read_lock_child, di_write_lock_child, + * di_read_lock_child2, di_write_lock_child2, + * di_read_lock_child3, di_write_lock_child3, + * di_read_lock_parent, di_write_lock_parent, + * di_read_lock_parent2, di_write_lock_parent2, + * di_read_lock_parent3, di_write_lock_parent3, + */ +#define AuReadLockFunc(name, lsc) \ +static inline void di_read_lock_##name(struct dentry *d, int flags) \ +{ di_read_lock(d, flags, AuLsc_DI_##lsc); } + +#define AuWriteLockFunc(name, lsc) \ +static inline void di_write_lock_##name(struct dentry *d) \ +{ di_write_lock(d, AuLsc_DI_##lsc); } + +#define AuRWLockFuncs(name, lsc) \ + AuReadLockFunc(name, lsc) \ + AuWriteLockFunc(name, lsc) + +AuRWLockFuncs(child, CHILD); +AuRWLockFuncs(child2, CHILD2); +AuRWLockFuncs(child3, CHILD3); +AuRWLockFuncs(parent, PARENT); +AuRWLockFuncs(parent2, PARENT2); +AuRWLockFuncs(parent3, PARENT3); + +#undef AuReadLockFunc +#undef AuWriteLockFunc +#undef AuRWLockFuncs + +#define DiMustNoWaiters(d) AuRwMustNoWaiters(&au_di(d)->di_rwsem) +#define DiMustAnyLock(d) AuRwMustAnyLock(&au_di(d)->di_rwsem) +#define DiMustWriteLock(d) AuRwMustWriteLock(&au_di(d)->di_rwsem) + +/* ---------------------------------------------------------------------- */ + +/* todo: memory barrier? */ +static inline unsigned int au_digen(struct dentry *d) +{ + return atomic_read(&au_di(d)->di_generation); +} + +static inline void au_h_dentry_init(struct au_hdentry *hdentry) +{ + hdentry->hd_dentry = NULL; +} + +static inline struct au_hdentry *au_hdentry(struct au_dinfo *di, + aufs_bindex_t bindex) +{ + return di->di_hdentry + bindex; +} + +static inline void au_hdput(struct au_hdentry *hd) +{ + if (hd) + dput(hd->hd_dentry); +} + +static inline aufs_bindex_t au_dbtop(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_btop; +} + +static inline aufs_bindex_t au_dbbot(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bbot; +} + +static inline aufs_bindex_t au_dbwh(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bwh; +} + +static inline aufs_bindex_t au_dbdiropq(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bdiropq; +} + +/* todo: hard/soft set? */ +static inline void au_set_dbtop(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_btop = bindex; +} + +static inline void au_set_dbbot(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bbot = bindex; +} + +static inline void au_set_dbwh(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + /* dbwh can be outside of btop - bbot range */ + au_di(dentry)->di_bwh = bindex; +} + +static inline void au_set_dbdiropq(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bdiropq = bindex; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_HNOTIFY +static inline void au_digen_dec(struct dentry *d) +{ + atomic_dec(&au_di(d)->di_generation); +} + +static inline void au_hn_di_reinit(struct dentry *dentry) +{ + dentry->d_fsdata = NULL; +} +#else +AuStubVoid(au_hn_di_reinit, struct dentry *dentry __maybe_unused) +#endif /* CONFIG_AUFS_HNOTIFY */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DENTRY_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dinfo.c +++ linux-aws-4.15.0/fs/aufs/dinfo.c @@ -0,0 +1,553 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * dentry private data + */ + +#include "aufs.h" + +void au_di_init_once(void *_dinfo) +{ + struct au_dinfo *dinfo = _dinfo; + + au_rw_init(&dinfo->di_rwsem); +} + +struct au_dinfo *au_di_alloc(struct super_block *sb, unsigned int lsc) +{ + struct au_dinfo *dinfo; + int nbr, i; + + dinfo = au_cache_alloc_dinfo(); + if (unlikely(!dinfo)) + goto out; + + nbr = au_sbbot(sb) + 1; + if (nbr <= 0) + nbr = 1; + dinfo->di_hdentry = kcalloc(nbr, sizeof(*dinfo->di_hdentry), GFP_NOFS); + if (dinfo->di_hdentry) { + au_rw_write_lock_nested(&dinfo->di_rwsem, lsc); + dinfo->di_btop = -1; + dinfo->di_bbot = -1; + dinfo->di_bwh = -1; + dinfo->di_bdiropq = -1; + dinfo->di_tmpfile = 0; + for (i = 0; i < nbr; i++) + dinfo->di_hdentry[i].hd_id = -1; + goto out; + } + + au_cache_free_dinfo(dinfo); + dinfo = NULL; + +out: + return dinfo; +} + +void au_di_free(struct au_dinfo *dinfo) +{ + struct au_hdentry *p; + aufs_bindex_t bbot, bindex; + + /* dentry may not be revalidated */ + bindex = dinfo->di_btop; + if (bindex >= 0) { + bbot = dinfo->di_bbot; + p = au_hdentry(dinfo, bindex); + while (bindex++ <= bbot) + au_hdput(p++); + } + kfree(dinfo->di_hdentry); + au_cache_free_dinfo(dinfo); +} + +void au_di_swap(struct au_dinfo *a, struct au_dinfo *b) +{ + struct au_hdentry *p; + aufs_bindex_t bi; + + AuRwMustWriteLock(&a->di_rwsem); + AuRwMustWriteLock(&b->di_rwsem); + +#define DiSwap(v, name) \ + do { \ + v = a->di_##name; \ + a->di_##name = b->di_##name; \ + b->di_##name = v; \ + } while (0) + + DiSwap(p, hdentry); + DiSwap(bi, btop); + DiSwap(bi, bbot); + DiSwap(bi, bwh); + DiSwap(bi, bdiropq); + /* smp_mb(); */ + +#undef DiSwap +} + +void au_di_cp(struct au_dinfo *dst, struct au_dinfo *src) +{ + AuRwMustWriteLock(&dst->di_rwsem); + AuRwMustWriteLock(&src->di_rwsem); + + dst->di_btop = src->di_btop; + dst->di_bbot = src->di_bbot; + dst->di_bwh = src->di_bwh; + dst->di_bdiropq = src->di_bdiropq; + /* smp_mb(); */ +} + +int au_di_init(struct dentry *dentry) +{ + int err; + struct super_block *sb; + struct au_dinfo *dinfo; + + err = 0; + sb = dentry->d_sb; + dinfo = au_di_alloc(sb, AuLsc_DI_CHILD); + if (dinfo) { + atomic_set(&dinfo->di_generation, au_sigen(sb)); + /* smp_mb(); */ /* atomic_set */ + dentry->d_fsdata = dinfo; + } else + err = -ENOMEM; + + return err; +} + +void au_di_fin(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + + dinfo = au_di(dentry); + AuRwDestroy(&dinfo->di_rwsem); + au_di_free(dinfo); +} + +int au_di_realloc(struct au_dinfo *dinfo, int nbr, int may_shrink) +{ + int err, sz; + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + err = -ENOMEM; + sz = sizeof(*hdp) * (dinfo->di_bbot + 1); + if (!sz) + sz = sizeof(*hdp); + hdp = au_kzrealloc(dinfo->di_hdentry, sz, sizeof(*hdp) * nbr, GFP_NOFS, + may_shrink); + if (hdp) { + dinfo->di_hdentry = hdp; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void do_ii_write_lock(struct inode *inode, unsigned int lsc) +{ + switch (lsc) { + case AuLsc_DI_CHILD: + ii_write_lock_child(inode); + break; + case AuLsc_DI_CHILD2: + ii_write_lock_child2(inode); + break; + case AuLsc_DI_CHILD3: + ii_write_lock_child3(inode); + break; + case AuLsc_DI_PARENT: + ii_write_lock_parent(inode); + break; + case AuLsc_DI_PARENT2: + ii_write_lock_parent2(inode); + break; + case AuLsc_DI_PARENT3: + ii_write_lock_parent3(inode); + break; + default: + BUG(); + } +} + +static void do_ii_read_lock(struct inode *inode, unsigned int lsc) +{ + switch (lsc) { + case AuLsc_DI_CHILD: + ii_read_lock_child(inode); + break; + case AuLsc_DI_CHILD2: + ii_read_lock_child2(inode); + break; + case AuLsc_DI_CHILD3: + ii_read_lock_child3(inode); + break; + case AuLsc_DI_PARENT: + ii_read_lock_parent(inode); + break; + case AuLsc_DI_PARENT2: + ii_read_lock_parent2(inode); + break; + case AuLsc_DI_PARENT3: + ii_read_lock_parent3(inode); + break; + default: + BUG(); + } +} + +void di_read_lock(struct dentry *d, int flags, unsigned int lsc) +{ + struct inode *inode; + + au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); + if (d_really_is_positive(d)) { + inode = d_inode(d); + if (au_ftest_lock(flags, IW)) + do_ii_write_lock(inode, lsc); + else if (au_ftest_lock(flags, IR)) + do_ii_read_lock(inode, lsc); + } +} + +void di_read_unlock(struct dentry *d, int flags) +{ + struct inode *inode; + + if (d_really_is_positive(d)) { + inode = d_inode(d); + if (au_ftest_lock(flags, IW)) { + au_dbg_verify_dinode(d); + ii_write_unlock(inode); + } else if (au_ftest_lock(flags, IR)) { + au_dbg_verify_dinode(d); + ii_read_unlock(inode); + } + } + au_rw_read_unlock(&au_di(d)->di_rwsem); +} + +void di_downgrade_lock(struct dentry *d, int flags) +{ + if (d_really_is_positive(d) && au_ftest_lock(flags, IR)) + ii_downgrade_lock(d_inode(d)); + au_rw_dgrade_lock(&au_di(d)->di_rwsem); +} + +void di_write_lock(struct dentry *d, unsigned int lsc) +{ + au_rw_write_lock_nested(&au_di(d)->di_rwsem, lsc); + if (d_really_is_positive(d)) + do_ii_write_lock(d_inode(d), lsc); +} + +void di_write_unlock(struct dentry *d) +{ + au_dbg_verify_dinode(d); + if (d_really_is_positive(d)) + ii_write_unlock(d_inode(d)); + au_rw_write_unlock(&au_di(d)->di_rwsem); +} + +void di_write_lock2_child(struct dentry *d1, struct dentry *d2, int isdir) +{ + AuDebugOn(d1 == d2 + || d_inode(d1) == d_inode(d2) + || d1->d_sb != d2->d_sb); + + if ((isdir && au_test_subdir(d1, d2)) + || d1 < d2) { + di_write_lock_child(d1); + di_write_lock_child2(d2); + } else { + di_write_lock_child(d2); + di_write_lock_child2(d1); + } +} + +void di_write_lock2_parent(struct dentry *d1, struct dentry *d2, int isdir) +{ + AuDebugOn(d1 == d2 + || d_inode(d1) == d_inode(d2) + || d1->d_sb != d2->d_sb); + + if ((isdir && au_test_subdir(d1, d2)) + || d1 < d2) { + di_write_lock_parent(d1); + di_write_lock_parent2(d2); + } else { + di_write_lock_parent(d2); + di_write_lock_parent2(d1); + } +} + +void di_write_unlock2(struct dentry *d1, struct dentry *d2) +{ + di_write_unlock(d1); + if (d_inode(d1) == d_inode(d2)) + au_rw_write_unlock(&au_di(d2)->di_rwsem); + else + di_write_unlock(d2); +} + +/* ---------------------------------------------------------------------- */ + +struct dentry *au_h_dptr(struct dentry *dentry, aufs_bindex_t bindex) +{ + struct dentry *d; + + DiMustAnyLock(dentry); + + if (au_dbtop(dentry) < 0 || bindex < au_dbtop(dentry)) + return NULL; + AuDebugOn(bindex < 0); + d = au_hdentry(au_di(dentry), bindex)->hd_dentry; + AuDebugOn(d && au_dcount(d) <= 0); + return d; +} + +/* + * extended version of au_h_dptr(). + * returns a hashed and positive (or linkable) h_dentry in bindex, NULL, or + * error. + */ +struct dentry *au_h_d_alias(struct dentry *dentry, aufs_bindex_t bindex) +{ + struct dentry *h_dentry; + struct inode *inode, *h_inode; + + AuDebugOn(d_really_is_negative(dentry)); + + h_dentry = NULL; + if (au_dbtop(dentry) <= bindex + && bindex <= au_dbbot(dentry)) + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && !au_d_linkable(h_dentry)) { + dget(h_dentry); + goto out; /* success */ + } + + inode = d_inode(dentry); + AuDebugOn(bindex < au_ibtop(inode)); + AuDebugOn(au_ibbot(inode) < bindex); + h_inode = au_h_iptr(inode, bindex); + h_dentry = d_find_alias(h_inode); + if (h_dentry) { + if (!IS_ERR(h_dentry)) { + if (!au_d_linkable(h_dentry)) + goto out; /* success */ + dput(h_dentry); + } else + goto out; + } + + if (au_opt_test(au_mntflags(dentry->d_sb), PLINK)) { + h_dentry = au_plink_lkup(inode, bindex); + AuDebugOn(!h_dentry); + if (!IS_ERR(h_dentry)) { + if (!au_d_hashed_positive(h_dentry)) + goto out; /* success */ + dput(h_dentry); + h_dentry = NULL; + } + } + +out: + AuDbgDentry(h_dentry); + return h_dentry; +} + +aufs_bindex_t au_dbtail(struct dentry *dentry) +{ + aufs_bindex_t bbot, bwh; + + bbot = au_dbbot(dentry); + if (0 <= bbot) { + bwh = au_dbwh(dentry); + if (!bwh) + return bwh; + if (0 < bwh && bwh < bbot) + return bwh - 1; + } + return bbot; +} + +aufs_bindex_t au_dbtaildir(struct dentry *dentry) +{ + aufs_bindex_t bbot, bopq; + + bbot = au_dbtail(dentry); + if (0 <= bbot) { + bopq = au_dbdiropq(dentry); + if (0 <= bopq && bopq < bbot) + bbot = bopq; + } + return bbot; +} + +/* ---------------------------------------------------------------------- */ + +void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_dentry) +{ + struct au_dinfo *dinfo; + struct au_hdentry *hd; + struct au_branch *br; + + DiMustWriteLock(dentry); + + dinfo = au_di(dentry); + hd = au_hdentry(dinfo, bindex); + au_hdput(hd); + hd->hd_dentry = h_dentry; + if (h_dentry) { + br = au_sbr(dentry->d_sb, bindex); + hd->hd_id = br->br_id; + } +} + +int au_dbrange_test(struct dentry *dentry) +{ + int err; + aufs_bindex_t btop, bbot; + + err = 0; + btop = au_dbtop(dentry); + bbot = au_dbbot(dentry); + if (btop >= 0) + AuDebugOn(bbot < 0 && btop > bbot); + else { + err = -EIO; + AuDebugOn(bbot >= 0); + } + + return err; +} + +int au_digen_test(struct dentry *dentry, unsigned int sigen) +{ + int err; + + err = 0; + if (unlikely(au_digen(dentry) != sigen + || au_iigen_test(d_inode(dentry), sigen))) + err = -EIO; + + return err; +} + +void au_update_digen(struct dentry *dentry) +{ + atomic_set(&au_di(dentry)->di_generation, au_sigen(dentry->d_sb)); + /* smp_mb(); */ /* atomic_set */ +} + +void au_update_dbrange(struct dentry *dentry, int do_put_zero) +{ + struct au_dinfo *dinfo; + struct dentry *h_d; + struct au_hdentry *hdp; + aufs_bindex_t bindex, bbot; + + DiMustWriteLock(dentry); + + dinfo = au_di(dentry); + if (!dinfo || dinfo->di_btop < 0) + return; + + if (do_put_zero) { + bbot = dinfo->di_bbot; + bindex = dinfo->di_btop; + hdp = au_hdentry(dinfo, bindex); + for (; bindex <= bbot; bindex++, hdp++) { + h_d = hdp->hd_dentry; + if (h_d && d_is_negative(h_d)) + au_set_h_dptr(dentry, bindex, NULL); + } + } + + dinfo->di_btop = 0; + hdp = au_hdentry(dinfo, dinfo->di_btop); + for (; dinfo->di_btop <= dinfo->di_bbot; dinfo->di_btop++, hdp++) + if (hdp->hd_dentry) + break; + if (dinfo->di_btop > dinfo->di_bbot) { + dinfo->di_btop = -1; + dinfo->di_bbot = -1; + return; + } + + hdp = au_hdentry(dinfo, dinfo->di_bbot); + for (; dinfo->di_bbot >= 0; dinfo->di_bbot--, hdp--) + if (hdp->hd_dentry) + break; + AuDebugOn(dinfo->di_btop > dinfo->di_bbot || dinfo->di_bbot < 0); +} + +void au_update_dbtop(struct dentry *dentry) +{ + aufs_bindex_t bindex, bbot; + struct dentry *h_dentry; + + bbot = au_dbbot(dentry); + for (bindex = au_dbtop(dentry); bindex <= bbot; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (d_is_positive(h_dentry)) { + au_set_dbtop(dentry, bindex); + return; + } + au_set_h_dptr(dentry, bindex, NULL); + } +} + +void au_update_dbbot(struct dentry *dentry) +{ + aufs_bindex_t bindex, btop; + struct dentry *h_dentry; + + btop = au_dbtop(dentry); + for (bindex = au_dbbot(dentry); bindex >= btop; bindex--) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (d_is_positive(h_dentry)) { + au_set_dbbot(dentry, bindex); + return; + } + au_set_h_dptr(dentry, bindex, NULL); + } +} + +int au_find_dbindex(struct dentry *dentry, struct dentry *h_dentry) +{ + aufs_bindex_t bindex, bbot; + + bbot = au_dbbot(dentry); + for (bindex = au_dbtop(dentry); bindex <= bbot; bindex++) + if (au_h_dptr(dentry, bindex) == h_dentry) + return bindex; + return -1; +} --- linux-aws-4.15.0.orig/fs/aufs/dir.c +++ linux-aws-4.15.0/fs/aufs/dir.c @@ -0,0 +1,759 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * directory operations + */ + +#include +#include "aufs.h" + +void au_add_nlink(struct inode *dir, struct inode *h_dir) +{ + unsigned int nlink; + + AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); + + nlink = dir->i_nlink; + nlink += h_dir->i_nlink - 2; + if (h_dir->i_nlink < 2) + nlink += 2; + smp_mb(); /* for i_nlink */ + /* 0 can happen in revaliding */ + set_nlink(dir, nlink); +} + +void au_sub_nlink(struct inode *dir, struct inode *h_dir) +{ + unsigned int nlink; + + AuDebugOn(!S_ISDIR(dir->i_mode) || !S_ISDIR(h_dir->i_mode)); + + nlink = dir->i_nlink; + nlink -= h_dir->i_nlink - 2; + if (h_dir->i_nlink < 2) + nlink -= 2; + smp_mb(); /* for i_nlink */ + /* nlink == 0 means the branch-fs is broken */ + set_nlink(dir, nlink); +} + +loff_t au_dir_size(struct file *file, struct dentry *dentry) +{ + loff_t sz; + aufs_bindex_t bindex, bbot; + struct file *h_file; + struct dentry *h_dentry; + + sz = 0; + if (file) { + AuDebugOn(!d_is_dir(file->f_path.dentry)); + + bbot = au_fbbot_dir(file); + for (bindex = au_fbtop(file); + bindex <= bbot && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_file = au_hf_dir(file, bindex); + if (h_file && file_inode(h_file)) + sz += vfsub_f_size_read(h_file); + } + } else { + AuDebugOn(!dentry); + AuDebugOn(!d_is_dir(dentry)); + + bbot = au_dbtaildir(dentry); + for (bindex = au_dbtop(dentry); + bindex <= bbot && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && d_is_positive(h_dentry)) + sz += i_size_read(d_inode(h_dentry)); + } + } + if (sz < KMALLOC_MAX_SIZE) + sz = roundup_pow_of_two(sz); + if (sz > KMALLOC_MAX_SIZE) + sz = KMALLOC_MAX_SIZE; + else if (sz < NAME_MAX) { + BUILD_BUG_ON(AUFS_RDBLK_DEF < NAME_MAX); + sz = AUFS_RDBLK_DEF; + } + return sz; +} + +struct au_dir_ts_arg { + struct dentry *dentry; + aufs_bindex_t brid; +}; + +static void au_do_dir_ts(void *arg) +{ + struct au_dir_ts_arg *a = arg; + struct au_dtime dt; + struct path h_path; + struct inode *dir, *h_dir; + struct super_block *sb; + struct au_branch *br; + struct au_hinode *hdir; + int err; + aufs_bindex_t btop, bindex; + + sb = a->dentry->d_sb; + if (d_really_is_negative(a->dentry)) + goto out; + /* no dir->i_mutex lock */ + aufs_read_lock(a->dentry, AuLock_DW); /* noflush */ + + dir = d_inode(a->dentry); + btop = au_ibtop(dir); + bindex = au_br_index(sb, a->brid); + if (bindex < btop) + goto out_unlock; + + br = au_sbr(sb, bindex); + h_path.dentry = au_h_dptr(a->dentry, bindex); + if (!h_path.dentry) + goto out_unlock; + h_path.mnt = au_br_mnt(br); + au_dtime_store(&dt, a->dentry, &h_path); + + br = au_sbr(sb, btop); + if (!au_br_writable(br->br_perm)) + goto out_unlock; + h_path.dentry = au_h_dptr(a->dentry, btop); + h_path.mnt = au_br_mnt(br); + err = vfsub_mnt_want_write(h_path.mnt); + if (err) + goto out_unlock; + hdir = au_hi(dir, btop); + au_hn_inode_lock_nested(hdir, AuLsc_I_PARENT); + h_dir = au_h_iptr(dir, btop); + if (h_dir->i_nlink + && timespec_compare(&h_dir->i_mtime, &dt.dt_mtime) < 0) { + dt.dt_h_path = h_path; + au_dtime_revert(&dt); + } + au_hn_inode_unlock(hdir); + vfsub_mnt_drop_write(h_path.mnt); + au_cpup_attr_timesizes(dir); + +out_unlock: + aufs_read_unlock(a->dentry, AuLock_DW); +out: + dput(a->dentry); + au_nwt_done(&au_sbi(sb)->si_nowait); + kfree(arg); +} + +void au_dir_ts(struct inode *dir, aufs_bindex_t bindex) +{ + int perm, wkq_err; + aufs_bindex_t btop; + struct au_dir_ts_arg *arg; + struct dentry *dentry; + struct super_block *sb; + + IMustLock(dir); + + dentry = d_find_any_alias(dir); + AuDebugOn(!dentry); + sb = dentry->d_sb; + btop = au_ibtop(dir); + if (btop == bindex) { + au_cpup_attr_timesizes(dir); + goto out; + } + + perm = au_sbr_perm(sb, btop); + if (!au_br_writable(perm)) + goto out; + + arg = kmalloc(sizeof(*arg), GFP_NOFS); + if (!arg) + goto out; + + arg->dentry = dget(dentry); /* will be dput-ted by au_do_dir_ts() */ + arg->brid = au_sbr_id(sb, bindex); + wkq_err = au_wkq_nowait(au_do_dir_ts, arg, sb, /*flags*/0); + if (unlikely(wkq_err)) { + pr_err("wkq %d\n", wkq_err); + dput(dentry); + kfree(arg); + } + +out: + dput(dentry); +} + +/* ---------------------------------------------------------------------- */ + +static int reopen_dir(struct file *file) +{ + int err; + unsigned int flags; + aufs_bindex_t bindex, btail, btop; + struct dentry *dentry, *h_dentry; + struct file *h_file; + + /* open all lower dirs */ + dentry = file->f_path.dentry; + btop = au_dbtop(dentry); + for (bindex = au_fbtop(file); bindex < btop; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbtop(file, btop); + + btail = au_dbtaildir(dentry); + for (bindex = au_fbbot_dir(file); btail < bindex; bindex--) + au_set_h_fptr(file, bindex, NULL); + au_set_fbbot_dir(file, btail); + + flags = vfsub_file_flags(file); + for (bindex = btop; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + h_file = au_hf_dir(file, bindex); + if (h_file) + continue; + + h_file = au_h_open(dentry, bindex, flags, file, /*force_wr*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; /* close all? */ + au_set_h_fptr(file, bindex, h_file); + } + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + err = 0; + +out: + return err; +} + +static int do_open_dir(struct file *file, int flags, struct file *h_file) +{ + int err; + aufs_bindex_t bindex, btail; + struct dentry *dentry, *h_dentry; + struct vfsmount *mnt; + + FiMustWriteLock(file); + AuDebugOn(h_file); + + err = 0; + mnt = file->f_path.mnt; + dentry = file->f_path.dentry; + file->f_version = d_inode(dentry)->i_version; + bindex = au_dbtop(dentry); + au_set_fbtop(file, bindex); + btail = au_dbtaildir(dentry); + au_set_fbbot_dir(file, btail); + for (; !err && bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + err = vfsub_test_mntns(mnt, h_dentry->d_sb); + if (unlikely(err)) + break; + h_file = au_h_open(dentry, bindex, flags, file, /*force_wr*/0); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + break; + } + au_set_h_fptr(file, bindex, h_file); + } + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + if (!err) + return 0; /* success */ + + /* close all */ + for (bindex = au_fbtop(file); bindex <= btail; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbtop(file, -1); + au_set_fbbot_dir(file, -1); + + return err; +} + +static int aufs_open_dir(struct inode *inode __maybe_unused, + struct file *file) +{ + int err; + struct super_block *sb; + struct au_fidir *fidir; + + err = -ENOMEM; + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + fidir = au_fidir_alloc(sb); + if (fidir) { + struct au_do_open_args args = { + .open = do_open_dir, + .fidir = fidir + }; + err = au_do_open(file, &args); + if (unlikely(err)) + kfree(fidir); + } + si_read_unlock(sb); + return err; +} + +static int aufs_release_dir(struct inode *inode __maybe_unused, + struct file *file) +{ + struct au_vdir *vdir_cache; + struct au_finfo *finfo; + struct au_fidir *fidir; + struct au_hfile *hf; + aufs_bindex_t bindex, bbot; + + finfo = au_fi(file); + fidir = finfo->fi_hdir; + if (fidir) { + au_hbl_del(&finfo->fi_hlist, + &au_sbi(file->f_path.dentry->d_sb)->si_files); + vdir_cache = fidir->fd_vdir_cache; /* lock-free */ + if (vdir_cache) + au_vdir_free(vdir_cache); + + bindex = finfo->fi_btop; + if (bindex >= 0) { + hf = fidir->fd_hfile + bindex; + /* + * calls fput() instead of filp_close(), + * since no dnotify or lock for the lower file. + */ + bbot = fidir->fd_bbot; + for (; bindex <= bbot; bindex++, hf++) + if (hf->hf_file) + au_hfput(hf, /*execed*/0); + } + kfree(fidir); + finfo->fi_hdir = NULL; + } + au_finfo_fin(file); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_flush_dir(struct file *file, fl_owner_t id) +{ + int err; + aufs_bindex_t bindex, bbot; + struct file *h_file; + + err = 0; + bbot = au_fbbot_dir(file); + for (bindex = au_fbtop(file); !err && bindex <= bbot; bindex++) { + h_file = au_hf_dir(file, bindex); + if (h_file) + err = vfsub_flush(h_file, id); + } + return err; +} + +static int aufs_flush_dir(struct file *file, fl_owner_t id) +{ + return au_do_flush(file, id, au_do_flush_dir); +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_fsync_dir_no_file(struct dentry *dentry, int datasync) +{ + int err; + aufs_bindex_t bbot, bindex; + struct inode *inode; + struct super_block *sb; + + err = 0; + sb = dentry->d_sb; + inode = d_inode(dentry); + IMustLock(inode); + bbot = au_dbbot(dentry); + for (bindex = au_dbtop(dentry); !err && bindex <= bbot; bindex++) { + struct path h_path; + + if (au_test_ro(sb, bindex, inode)) + continue; + h_path.dentry = au_h_dptr(dentry, bindex); + if (!h_path.dentry) + continue; + + h_path.mnt = au_sbr_mnt(sb, bindex); + err = vfsub_fsync(NULL, &h_path, datasync); + } + + return err; +} + +static int au_do_fsync_dir(struct file *file, int datasync) +{ + int err; + aufs_bindex_t bbot, bindex; + struct file *h_file; + struct super_block *sb; + struct inode *inode; + + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1, /*fi_lsc*/0); + if (unlikely(err)) + goto out; + + inode = file_inode(file); + sb = inode->i_sb; + bbot = au_fbbot_dir(file); + for (bindex = au_fbtop(file); !err && bindex <= bbot; bindex++) { + h_file = au_hf_dir(file, bindex); + if (!h_file || au_test_ro(sb, bindex, inode)) + continue; + + err = vfsub_fsync(h_file, &h_file->f_path, datasync); + } + +out: + return err; +} + +/* + * @file may be NULL + */ +static int aufs_fsync_dir(struct file *file, loff_t start, loff_t end, + int datasync) +{ + int err; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + + err = 0; + dentry = file->f_path.dentry; + inode = d_inode(dentry); + inode_lock(inode); + sb = dentry->d_sb; + si_noflush_read_lock(sb); + if (file) + err = au_do_fsync_dir(file, datasync); + else { + di_write_lock_child(dentry); + err = au_do_fsync_dir_no_file(dentry, datasync); + } + au_cpup_attr_timesizes(inode); + di_write_unlock(dentry); + if (file) + fi_write_unlock(file); + + si_read_unlock(sb); + inode_unlock(inode); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_iterate_shared(struct file *file, struct dir_context *ctx) +{ + int err; + struct dentry *dentry; + struct inode *inode, *h_inode; + struct super_block *sb; + + AuDbg("%pD, ctx{%pf, %llu}\n", file, ctx->actor, ctx->pos); + + dentry = file->f_path.dentry; + inode = d_inode(dentry); + IMustLock(inode); + + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1, /*fi_lsc*/0); + if (unlikely(err)) + goto out; + err = au_alive_dir(dentry); + if (!err) + err = au_vdir_init(file); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + + h_inode = au_h_iptr(inode, au_ibtop(inode)); + if (!au_test_nfsd()) { + err = au_vdir_fill_de(file, ctx); + fsstack_copy_attr_atime(inode, h_inode); + } else { + /* + * nfsd filldir may call lookup_one_len(), vfs_getattr(), + * encode_fh() and others. + */ + atomic_inc(&h_inode->i_count); + di_read_unlock(dentry, AuLock_IR); + si_read_unlock(sb); + err = au_vdir_fill_de(file, ctx); + fsstack_copy_attr_atime(inode, h_inode); + fi_write_unlock(file); + iput(h_inode); + + AuTraceErr(err); + return err; + } + +out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); +out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +#define AuTestEmpty_WHONLY 1 +#define AuTestEmpty_CALLED (1 << 1) +#define AuTestEmpty_SHWH (1 << 2) +#define au_ftest_testempty(flags, name) ((flags) & AuTestEmpty_##name) +#define au_fset_testempty(flags, name) \ + do { (flags) |= AuTestEmpty_##name; } while (0) +#define au_fclr_testempty(flags, name) \ + do { (flags) &= ~AuTestEmpty_##name; } while (0) + +#ifndef CONFIG_AUFS_SHWH +#undef AuTestEmpty_SHWH +#define AuTestEmpty_SHWH 0 +#endif + +struct test_empty_arg { + struct dir_context ctx; + struct au_nhash *whlist; + unsigned int flags; + int err; + aufs_bindex_t bindex; +}; + +static int test_empty_cb(struct dir_context *ctx, const char *__name, + int namelen, loff_t offset __maybe_unused, u64 ino, + unsigned int d_type) +{ + struct test_empty_arg *arg = container_of(ctx, struct test_empty_arg, + ctx); + char *name = (void *)__name; + + arg->err = 0; + au_fset_testempty(arg->flags, CALLED); + /* smp_mb(); */ + if (name[0] == '.' + && (namelen == 1 || (name[1] == '.' && namelen == 2))) + goto out; /* success */ + + if (namelen <= AUFS_WH_PFX_LEN + || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + if (au_ftest_testempty(arg->flags, WHONLY) + && !au_nhash_test_known_wh(arg->whlist, name, namelen)) + arg->err = -ENOTEMPTY; + goto out; + } + + name += AUFS_WH_PFX_LEN; + namelen -= AUFS_WH_PFX_LEN; + if (!au_nhash_test_known_wh(arg->whlist, name, namelen)) + arg->err = au_nhash_append_wh + (arg->whlist, name, namelen, ino, d_type, arg->bindex, + au_ftest_testempty(arg->flags, SHWH)); + +out: + /* smp_mb(); */ + AuTraceErr(arg->err); + return arg->err; +} + +static int do_test_empty(struct dentry *dentry, struct test_empty_arg *arg) +{ + int err; + struct file *h_file; + + h_file = au_h_open(dentry, arg->bindex, + O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_LARGEFILE, + /*file*/NULL, /*force_wr*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = 0; + if (!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) + && !file_inode(h_file)->i_nlink) + goto out_put; + + do { + arg->err = 0; + au_fclr_testempty(arg->flags, CALLED); + /* smp_mb(); */ + err = vfsub_iterate_dir(h_file, &arg->ctx); + if (err >= 0) + err = arg->err; + } while (!err && au_ftest_testempty(arg->flags, CALLED)); + +out_put: + fput(h_file); + au_sbr_put(dentry->d_sb, arg->bindex); +out: + return err; +} + +struct do_test_empty_args { + int *errp; + struct dentry *dentry; + struct test_empty_arg *arg; +}; + +static void call_do_test_empty(void *args) +{ + struct do_test_empty_args *a = args; + *a->errp = do_test_empty(a->dentry, a->arg); +} + +static int sio_test_empty(struct dentry *dentry, struct test_empty_arg *arg) +{ + int err, wkq_err; + struct dentry *h_dentry; + struct inode *h_inode; + + h_dentry = au_h_dptr(dentry, arg->bindex); + h_inode = d_inode(h_dentry); + /* todo: i_mode changes anytime? */ + vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD); + err = au_test_h_perm_sio(h_inode, MAY_EXEC | MAY_READ); + inode_unlock_shared(h_inode); + if (!err) + err = do_test_empty(dentry, arg); + else { + struct do_test_empty_args args = { + .errp = &err, + .dentry = dentry, + .arg = arg + }; + unsigned int flags = arg->flags; + + wkq_err = au_wkq_wait(call_do_test_empty, &args); + if (unlikely(wkq_err)) + err = wkq_err; + arg->flags = flags; + } + + return err; +} + +int au_test_empty_lower(struct dentry *dentry) +{ + int err; + unsigned int rdhash; + aufs_bindex_t bindex, btop, btail; + struct au_nhash whlist; + struct test_empty_arg arg = { + .ctx = { + .actor = test_empty_cb + } + }; + int (*test_empty)(struct dentry *dentry, struct test_empty_arg *arg); + + SiMustAnyLock(dentry->d_sb); + + rdhash = au_sbi(dentry->d_sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, dentry)); + err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + + arg.flags = 0; + arg.whlist = &whlist; + btop = au_dbtop(dentry); + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) + au_fset_testempty(arg.flags, SHWH); + test_empty = do_test_empty; + if (au_opt_test(au_mntflags(dentry->d_sb), DIRPERM1)) + test_empty = sio_test_empty; + arg.bindex = btop; + err = test_empty(dentry, &arg); + if (unlikely(err)) + goto out_whlist; + + au_fset_testempty(arg.flags, WHONLY); + btail = au_dbtaildir(dentry); + for (bindex = btop + 1; !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && d_is_positive(h_dentry)) { + arg.bindex = bindex; + err = test_empty(dentry, &arg); + } + } + +out_whlist: + au_nhash_wh_free(&whlist); +out: + return err; +} + +int au_test_empty(struct dentry *dentry, struct au_nhash *whlist) +{ + int err; + struct test_empty_arg arg = { + .ctx = { + .actor = test_empty_cb + } + }; + aufs_bindex_t bindex, btail; + + err = 0; + arg.whlist = whlist; + arg.flags = AuTestEmpty_WHONLY; + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) + au_fset_testempty(arg.flags, SHWH); + btail = au_dbtaildir(dentry); + for (bindex = au_dbtop(dentry); !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && d_is_positive(h_dentry)) { + arg.bindex = bindex; + err = sio_test_empty(dentry, &arg); + } + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +const struct file_operations aufs_dir_fop = { + .owner = THIS_MODULE, + .llseek = default_llseek, + .read = generic_read_dir, + .iterate_shared = aufs_iterate_shared, + .unlocked_ioctl = aufs_ioctl_dir, +#ifdef CONFIG_COMPAT + .compat_ioctl = aufs_compat_ioctl_dir, +#endif + .open = aufs_open_dir, + .release = aufs_release_dir, + .flush = aufs_flush_dir, + .fsync = aufs_fsync_dir +}; --- linux-aws-4.15.0.orig/fs/aufs/dir.h +++ linux-aws-4.15.0/fs/aufs/dir.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * directory operations + */ + +#ifndef __AUFS_DIR_H__ +#define __AUFS_DIR_H__ + +#ifdef __KERNEL__ + +#include + +/* ---------------------------------------------------------------------- */ + +/* need to be faster and smaller */ + +struct au_nhash { + unsigned int nh_num; + struct hlist_head *nh_head; +}; + +struct au_vdir_destr { + unsigned char len; + unsigned char name[0]; +} __packed; + +struct au_vdir_dehstr { + struct hlist_node hash; + struct au_vdir_destr *str; +} ____cacheline_aligned_in_smp; + +struct au_vdir_de { + ino_t de_ino; + unsigned char de_type; + /* caution: packed */ + struct au_vdir_destr de_str; +} __packed; + +struct au_vdir_wh { + struct hlist_node wh_hash; +#ifdef CONFIG_AUFS_SHWH + ino_t wh_ino; + aufs_bindex_t wh_bindex; + unsigned char wh_type; +#else + aufs_bindex_t wh_bindex; +#endif + /* caution: packed */ + struct au_vdir_destr wh_str; +} __packed; + +union au_vdir_deblk_p { + unsigned char *deblk; + struct au_vdir_de *de; +}; + +struct au_vdir { + unsigned char **vd_deblk; + unsigned long vd_nblk; + struct { + unsigned long ul; + union au_vdir_deblk_p p; + } vd_last; + + unsigned long vd_version; + unsigned int vd_deblk_sz; + unsigned long vd_jiffy; +} ____cacheline_aligned_in_smp; + +/* ---------------------------------------------------------------------- */ + +/* dir.c */ +extern const struct file_operations aufs_dir_fop; +void au_add_nlink(struct inode *dir, struct inode *h_dir); +void au_sub_nlink(struct inode *dir, struct inode *h_dir); +loff_t au_dir_size(struct file *file, struct dentry *dentry); +void au_dir_ts(struct inode *dir, aufs_bindex_t bsrc); +int au_test_empty_lower(struct dentry *dentry); +int au_test_empty(struct dentry *dentry, struct au_nhash *whlist); + +/* vdir.c */ +unsigned int au_rdhash_est(loff_t sz); +int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp); +void au_nhash_wh_free(struct au_nhash *whlist); +int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, + int limit); +int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen); +int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, + unsigned int d_type, aufs_bindex_t bindex, + unsigned char shwh); +void au_vdir_free(struct au_vdir *vdir); +int au_vdir_init(struct file *file); +int au_vdir_fill_de(struct file *file, struct dir_context *ctx); + +/* ioctl.c */ +long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg); + +#ifdef CONFIG_AUFS_RDU +/* rdu.c */ +long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg); +#ifdef CONFIG_COMPAT +long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg); +#endif +#else +AuStub(long, au_rdu_ioctl, return -EINVAL, struct file *file, + unsigned int cmd, unsigned long arg) +#ifdef CONFIG_COMPAT +AuStub(long, au_rdu_compat_ioctl, return -EINVAL, struct file *file, + unsigned int cmd, unsigned long arg) +#endif +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dirren.c +++ linux-aws-4.15.0/fs/aufs/dirren.c @@ -0,0 +1,1315 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * special handling in renaming a directoy + * in order to support looking-up the before-renamed name on the lower readonly + * branches + */ + +#include +#include "aufs.h" + +static void au_dr_hino_del(struct au_dr_br *dr, struct au_dr_hino *ent) +{ + int idx; + + idx = au_dr_ihash(ent->dr_h_ino); + au_hbl_del(&ent->dr_hnode, dr->dr_h_ino + idx); +} + +static int au_dr_hino_test_empty(struct au_dr_br *dr) +{ + int ret, i; + struct hlist_bl_head *hbl; + + ret = 1; + for (i = 0; ret && i < AuDirren_NHASH; i++) { + hbl = dr->dr_h_ino + i; + hlist_bl_lock(hbl); + ret &= hlist_bl_empty(hbl); + hlist_bl_unlock(hbl); + } + + return ret; +} + +static struct au_dr_hino *au_dr_hino_find(struct au_dr_br *dr, ino_t ino) +{ + struct au_dr_hino *found, *ent; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + int idx; + + found = NULL; + idx = au_dr_ihash(ino); + hbl = dr->dr_h_ino + idx; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(ent, pos, hbl, dr_hnode) + if (ent->dr_h_ino == ino) { + found = ent; + break; + } + hlist_bl_unlock(hbl); + + return found; +} + +int au_dr_hino_test_add(struct au_dr_br *dr, ino_t ino, + struct au_dr_hino *add_ent) +{ + int found, idx; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + struct au_dr_hino *ent; + + found = 0; + idx = au_dr_ihash(ino); + hbl = dr->dr_h_ino + idx; +#if 0 + { + struct hlist_bl_node *tmp; + + hlist_bl_for_each_entry_safe(ent, pos, tmp, hbl, dr_hnode) + AuDbg("hi%llu\n", (unsigned long long)ent->dr_h_ino); + } +#endif + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(ent, pos, hbl, dr_hnode) + if (ent->dr_h_ino == ino) { + found = 1; + break; + } + if (!found && add_ent) + hlist_bl_add_head(&add_ent->dr_hnode, hbl); + hlist_bl_unlock(hbl); + + if (!found && add_ent) + AuDbg("i%llu added\n", (unsigned long long)add_ent->dr_h_ino); + + return found; +} + +void au_dr_hino_free(struct au_dr_br *dr) +{ + int i; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos, *tmp; + struct au_dr_hino *ent; + + /* SiMustWriteLock(sb); */ + + for (i = 0; i < AuDirren_NHASH; i++) { + hbl = dr->dr_h_ino + i; + /* no spinlock since sbinfo must be write-locked */ + hlist_bl_for_each_entry_safe(ent, pos, tmp, hbl, dr_hnode) + kfree(ent); + INIT_HLIST_BL_HEAD(hbl); + } +} + +/* returns the number of inodes or an error */ +static int au_dr_hino_store(struct super_block *sb, struct au_branch *br, + struct file *hinofile) +{ + int err, i; + ssize_t ssz; + loff_t pos, oldsize; + __be64 u64; + struct inode *hinoinode; + struct hlist_bl_head *hbl; + struct hlist_bl_node *n1, *n2; + struct au_dr_hino *ent; + + SiMustWriteLock(sb); + AuDebugOn(!au_br_writable(br->br_perm)); + + hinoinode = file_inode(hinofile); + oldsize = i_size_read(hinoinode); + + err = 0; + pos = 0; + hbl = br->br_dirren.dr_h_ino; + for (i = 0; !err && i < AuDirren_NHASH; i++, hbl++) { + /* no bit-lock since sbinfo must be write-locked */ + hlist_bl_for_each_entry_safe(ent, n1, n2, hbl, dr_hnode) { + AuDbg("hi%llu, %pD2\n", + (unsigned long long)ent->dr_h_ino, hinofile); + u64 = cpu_to_be64(ent->dr_h_ino); + ssz = vfsub_write_k(hinofile, &u64, sizeof(u64), &pos); + if (ssz == sizeof(u64)) + continue; + + /* write error */ + pr_err("ssz %zd, %pD2\n", ssz, hinofile); + err = -ENOSPC; + if (ssz < 0) + err = ssz; + break; + } + } + /* regardless the error */ + if (pos < oldsize) { + err = vfsub_trunc(&hinofile->f_path, pos, /*attr*/0, hinofile); + AuTraceErr(err); + } + + AuTraceErr(err); + return err; +} + +static int au_dr_hino_load(struct au_dr_br *dr, struct file *hinofile) +{ + int err, hidx; + ssize_t ssz; + size_t sz, n; + loff_t pos; + uint64_t u64; + struct au_dr_hino *ent; + struct inode *hinoinode; + struct hlist_bl_head *hbl; + + err = 0; + pos = 0; + hbl = dr->dr_h_ino; + hinoinode = file_inode(hinofile); + sz = i_size_read(hinoinode); + AuDebugOn(sz % sizeof(u64)); + n = sz / sizeof(u64); + while (n--) { + ssz = vfsub_read_k(hinofile, &u64, sizeof(u64), &pos); + if (unlikely(ssz != sizeof(u64))) { + pr_err("ssz %zd, %pD2\n", ssz, hinofile); + err = -EINVAL; + if (ssz < 0) + err = ssz; + goto out_free; + } + + ent = kmalloc(sizeof(*ent), GFP_NOFS); + if (!ent) { + err = -ENOMEM; + AuTraceErr(err); + goto out_free; + } + ent->dr_h_ino = be64_to_cpu((__force __be64)u64); + AuDbg("hi%llu, %pD2\n", + (unsigned long long)ent->dr_h_ino, hinofile); + hidx = au_dr_ihash(ent->dr_h_ino); + au_hbl_add(&ent->dr_hnode, hbl + hidx); + } + goto out; /* success */ + +out_free: + au_dr_hino_free(dr); +out: + AuTraceErr(err); + return err; +} + +/* + * @bindex/@br is a switch to distinguish whether suspending hnotify or not. + * @path is a switch to distinguish load and store. + */ +static int au_dr_hino(struct super_block *sb, aufs_bindex_t bindex, + struct au_branch *br, const struct path *path) +{ + int err, flags; + unsigned char load, suspend; + struct file *hinofile; + struct au_hinode *hdir; + struct inode *dir, *delegated; + struct path hinopath; + struct qstr hinoname = QSTR_INIT(AUFS_WH_DR_BRHINO, + sizeof(AUFS_WH_DR_BRHINO) - 1); + + AuDebugOn(bindex < 0 && !br); + AuDebugOn(bindex >= 0 && br); + + err = -EINVAL; + suspend = !br; + if (suspend) + br = au_sbr(sb, bindex); + load = !!path; + if (!load) { + path = &br->br_path; + AuDebugOn(!au_br_writable(br->br_perm)); + if (unlikely(!au_br_writable(br->br_perm))) + goto out; + } + + hdir = NULL; + if (suspend) { + dir = d_inode(sb->s_root); + hdir = au_hinode(au_ii(dir), bindex); + dir = hdir->hi_inode; + au_hn_inode_lock_nested(hdir, AuLsc_I_CHILD); + } else { + dir = d_inode(path->dentry); + inode_lock_nested(dir, AuLsc_I_CHILD); + } + hinopath.dentry = vfsub_lkup_one(&hinoname, path->dentry); + err = PTR_ERR(hinopath.dentry); + if (IS_ERR(hinopath.dentry)) + goto out_unlock; + + err = 0; + flags = O_RDONLY; + if (load) { + if (d_is_negative(hinopath.dentry)) + goto out_dput; /* success */ + } else { + if (au_dr_hino_test_empty(&br->br_dirren)) { + if (d_is_positive(hinopath.dentry)) { + delegated = NULL; + err = vfsub_unlink(dir, &hinopath, &delegated, + /*force*/0); + AuTraceErr(err); + if (unlikely(err)) + pr_err("ignored err %d, %pd2\n", + err, hinopath.dentry); + if (unlikely(err == -EWOULDBLOCK)) + iput(delegated); + err = 0; + } + goto out_dput; + } else if (!d_is_positive(hinopath.dentry)) { + err = vfsub_create(dir, &hinopath, 0600, + /*want_excl*/false); + AuTraceErr(err); + if (unlikely(err)) + goto out_dput; + } + flags = O_WRONLY; + } + hinopath.mnt = path->mnt; + hinofile = vfsub_dentry_open(&hinopath, flags); + if (suspend) + au_hn_inode_unlock(hdir); + else + inode_unlock(dir); + dput(hinopath.dentry); + AuTraceErrPtr(hinofile); + if (IS_ERR(hinofile)) { + err = PTR_ERR(hinofile); + goto out; + } + + if (load) + err = au_dr_hino_load(&br->br_dirren, hinofile); + else + err = au_dr_hino_store(sb, br, hinofile); + fput(hinofile); + goto out; + +out_dput: + dput(hinopath.dentry); +out_unlock: + if (suspend) + au_hn_inode_unlock(hdir); + else + inode_unlock(dir); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_dr_brid_init(struct au_dr_brid *brid, const struct path *path) +{ + int err; + struct kstatfs kstfs; + dev_t dev; + struct dentry *dentry; + struct super_block *sb; + + err = vfs_statfs((void *)path, &kstfs); + AuTraceErr(err); + if (unlikely(err)) + goto out; + + /* todo: support for UUID */ + + if (kstfs.f_fsid.val[0] || kstfs.f_fsid.val[1]) { + brid->type = AuBrid_FSID; + brid->fsid = kstfs.f_fsid; + } else { + dentry = path->dentry; + sb = dentry->d_sb; + dev = sb->s_dev; + if (dev) { + brid->type = AuBrid_DEV; + brid->dev = dev; + } + } + +out: + return err; +} + +int au_dr_br_init(struct super_block *sb, struct au_branch *br, + const struct path *path) +{ + int err, i; + struct au_dr_br *dr; + struct hlist_bl_head *hbl; + + dr = &br->br_dirren; + hbl = dr->dr_h_ino; + for (i = 0; i < AuDirren_NHASH; i++, hbl++) + INIT_HLIST_BL_HEAD(hbl); + + err = au_dr_brid_init(&dr->dr_brid, path); + if (unlikely(err)) + goto out; + + if (au_opt_test(au_mntflags(sb), DIRREN)) + err = au_dr_hino(sb, /*bindex*/-1, br, path); + +out: + AuTraceErr(err); + return err; +} + +int au_dr_br_fin(struct super_block *sb, struct au_branch *br) +{ + int err; + + err = 0; + if (au_br_writable(br->br_perm)) + err = au_dr_hino(sb, /*bindex*/-1, br, /*path*/NULL); + if (!err) + au_dr_hino_free(&br->br_dirren); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_brid_str(struct au_dr_brid *brid, struct inode *h_inode, + char *buf, size_t sz) +{ + int err; + unsigned int major, minor; + char *p; + + p = buf; + err = snprintf(p, sz, "%d_", brid->type); + AuDebugOn(err > sz); + p += err; + sz -= err; + switch (brid->type) { + case AuBrid_Unset: + return -EINVAL; + case AuBrid_UUID: + err = snprintf(p, sz, "%pU", brid->uuid.b); + break; + case AuBrid_FSID: + err = snprintf(p, sz, "%08x-%08x", + brid->fsid.val[0], brid->fsid.val[1]); + break; + case AuBrid_DEV: + major = MAJOR(brid->dev); + minor = MINOR(brid->dev); + if (major <= 0xff && minor <= 0xff) + err = snprintf(p, sz, "%02x%02x", major, minor); + else + err = snprintf(p, sz, "%03x:%05x", major, minor); + break; + } + AuDebugOn(err > sz); + p += err; + sz -= err; + err = snprintf(p, sz, "_%llu", (unsigned long long)h_inode->i_ino); + AuDebugOn(err > sz); + p += err; + sz -= err; + + return p - buf; +} + +static int au_drinfo_name(struct au_branch *br, char *name, int len) +{ + int rlen; + struct dentry *br_dentry; + struct inode *br_inode; + + br_dentry = au_br_dentry(br); + br_inode = d_inode(br_dentry); + rlen = au_brid_str(&br->br_dirren.dr_brid, br_inode, name, len); + AuDebugOn(rlen >= AUFS_DIRREN_ENV_VAL_SZ); + AuDebugOn(rlen > len); + + return rlen; +} + +/* ---------------------------------------------------------------------- */ + +/* + * from the given @h_dentry, construct drinfo at @*fdata. + * when the size of @*fdata is not enough, reallocate and return new @fdata and + * @allocated. + */ +static int au_drinfo_construct(struct au_drinfo_fdata **fdata, + struct dentry *h_dentry, + unsigned char *allocated) +{ + int err, v; + struct au_drinfo_fdata *f, *p; + struct au_drinfo *drinfo; + struct inode *h_inode; + struct qstr *qname; + + err = 0; + f = *fdata; + h_inode = d_inode(h_dentry); + qname = &h_dentry->d_name; + drinfo = &f->drinfo; + drinfo->ino = (__force uint64_t)cpu_to_be64(h_inode->i_ino); + drinfo->oldnamelen = qname->len; + if (*allocated < sizeof(*f) + qname->len) { + v = roundup_pow_of_two(*allocated + qname->len); + p = au_krealloc(f, v, GFP_NOFS, /*may_shrink*/0); + if (unlikely(!p)) { + err = -ENOMEM; + AuTraceErr(err); + goto out; + } + f = p; + *fdata = f; + *allocated = v; + drinfo = &f->drinfo; + } + memcpy(drinfo->oldname, qname->name, qname->len); + AuDbg("i%llu, %.*s\n", + be64_to_cpu((__force __be64)drinfo->ino), drinfo->oldnamelen, + drinfo->oldname); + +out: + AuTraceErr(err); + return err; +} + +/* callers have to free the return value */ +static struct au_drinfo *au_drinfo_read_k(struct file *file, ino_t h_ino) +{ + struct au_drinfo *ret, *drinfo; + struct au_drinfo_fdata fdata; + int len; + loff_t pos; + ssize_t ssz; + + ret = ERR_PTR(-EIO); + pos = 0; + ssz = vfsub_read_k(file, &fdata, sizeof(fdata), &pos); + if (unlikely(ssz != sizeof(fdata))) { + AuIOErr("ssz %zd, %u, %pD2\n", + ssz, (unsigned int)sizeof(fdata), file); + goto out; + } + + fdata.magic = ntohl((__force __be32)fdata.magic); + switch (fdata.magic) { + case AUFS_DRINFO_MAGIC_V1: + break; + default: + AuIOErr("magic-num 0x%x, 0x%x, %pD2\n", + fdata.magic, AUFS_DRINFO_MAGIC_V1, file); + goto out; + } + + drinfo = &fdata.drinfo; + len = drinfo->oldnamelen; + if (!len) { + AuIOErr("broken drinfo %pD2\n", file); + goto out; + } + + ret = NULL; + drinfo->ino = be64_to_cpu((__force __be64)drinfo->ino); + if (unlikely(h_ino && drinfo->ino != h_ino)) { + AuDbg("ignored i%llu, i%llu, %pD2\n", + (unsigned long long)drinfo->ino, + (unsigned long long)h_ino, file); + goto out; /* success */ + } + + ret = kmalloc(sizeof(*ret) + len, GFP_NOFS); + if (unlikely(!ret)) { + ret = ERR_PTR(-ENOMEM); + AuTraceErrPtr(ret); + goto out; + } + + *ret = *drinfo; + ssz = vfsub_read_k(file, (void *)ret->oldname, len, &pos); + if (unlikely(ssz != len)) { + kfree(ret); + ret = ERR_PTR(-EIO); + AuIOErr("ssz %zd, %u, %pD2\n", ssz, len, file); + goto out; + } + + AuDbg("oldname %.*s\n", ret->oldnamelen, ret->oldname); + +out: + return ret; +} + +/* ---------------------------------------------------------------------- */ + +/* in order to be revertible */ +struct au_drinfo_rev_elm { + int created; + struct dentry *info_dentry; + struct au_drinfo *info_last; +}; + +struct au_drinfo_rev { + unsigned char already; + aufs_bindex_t nelm; + struct au_drinfo_rev_elm elm[0]; +}; + +/* todo: isn't it too large? */ +struct au_drinfo_store { + struct path h_ppath; + struct dentry *h_dentry; + struct au_drinfo_fdata *fdata; + char *infoname; /* inside of whname, just after PFX */ + char whname[sizeof(AUFS_WH_DR_INFO_PFX) + AUFS_DIRREN_ENV_VAL_SZ]; + aufs_bindex_t btgt, btail; + unsigned char no_sio, + allocated, /* current size of *fdata */ + infonamelen, /* room size for p */ + whnamelen, /* length of the genarated name */ + renameback; /* renamed back */ +}; + +/* on rename(2) error, the caller should revert it using @elm */ +static int au_drinfo_do_store(struct au_drinfo_store *w, + struct au_drinfo_rev_elm *elm) +{ + int err, len; + ssize_t ssz; + loff_t pos; + struct path infopath = { + .mnt = w->h_ppath.mnt + }; + struct inode *h_dir, *h_inode, *delegated; + struct file *infofile; + struct qstr *qname; + + AuDebugOn(elm + && memcmp(elm, page_address(ZERO_PAGE(0)), sizeof(*elm))); + + infopath.dentry = vfsub_lookup_one_len(w->whname, w->h_ppath.dentry, + w->whnamelen); + AuTraceErrPtr(infopath.dentry); + if (IS_ERR(infopath.dentry)) { + err = PTR_ERR(infopath.dentry); + goto out; + } + + err = 0; + h_dir = d_inode(w->h_ppath.dentry); + if (elm && d_is_negative(infopath.dentry)) { + err = vfsub_create(h_dir, &infopath, 0600, /*want_excl*/true); + AuTraceErr(err); + if (unlikely(err)) + goto out_dput; + elm->created = 1; + elm->info_dentry = dget(infopath.dentry); + } + + infofile = vfsub_dentry_open(&infopath, O_RDWR); + AuTraceErrPtr(infofile); + if (IS_ERR(infofile)) { + err = PTR_ERR(infofile); + goto out_dput; + } + + h_inode = d_inode(infopath.dentry); + if (elm && i_size_read(h_inode)) { + h_inode = d_inode(w->h_dentry); + elm->info_last = au_drinfo_read_k(infofile, h_inode->i_ino); + AuTraceErrPtr(elm->info_last); + if (IS_ERR(elm->info_last)) { + err = PTR_ERR(elm->info_last); + elm->info_last = NULL; + AuDebugOn(elm->info_dentry); + goto out_fput; + } + } + + if (elm && w->renameback) { + delegated = NULL; + err = vfsub_unlink(h_dir, &infopath, &delegated, /*force*/0); + AuTraceErr(err); + if (unlikely(err == -EWOULDBLOCK)) + iput(delegated); + goto out_fput; + } + + pos = 0; + qname = &w->h_dentry->d_name; + len = sizeof(*w->fdata) + qname->len; + if (!elm) + len = sizeof(*w->fdata) + w->fdata->drinfo.oldnamelen; + ssz = vfsub_write_k(infofile, w->fdata, len, &pos); + if (ssz == len) { + AuDbg("hi%llu, %.*s\n", w->fdata->drinfo.ino, + w->fdata->drinfo.oldnamelen, w->fdata->drinfo.oldname); + goto out_fput; /* success */ + } else { + err = -EIO; + if (ssz < 0) + err = ssz; + /* the caller should revert it using @elm */ + } + +out_fput: + fput(infofile); +out_dput: + dput(infopath.dentry); +out: + AuTraceErr(err); + return err; +} + +struct au_call_drinfo_do_store_args { + int *errp; + struct au_drinfo_store *w; + struct au_drinfo_rev_elm *elm; +}; + +static void au_call_drinfo_do_store(void *args) +{ + struct au_call_drinfo_do_store_args *a = args; + + *a->errp = au_drinfo_do_store(a->w, a->elm); +} + +static int au_drinfo_store_sio(struct au_drinfo_store *w, + struct au_drinfo_rev_elm *elm) +{ + int err, wkq_err; + + if (w->no_sio) + err = au_drinfo_do_store(w, elm); + else { + struct au_call_drinfo_do_store_args a = { + .errp = &err, + .w = w, + .elm = elm + }; + wkq_err = au_wkq_wait(au_call_drinfo_do_store, &a); + if (unlikely(wkq_err)) + err = wkq_err; + } + AuTraceErr(err); + + return err; +} + +static int au_drinfo_store_work_init(struct au_drinfo_store *w, + aufs_bindex_t btgt) +{ + int err; + + memset(w, 0, sizeof(*w)); + w->allocated = roundup_pow_of_two(sizeof(*w->fdata) + 40); + strcpy(w->whname, AUFS_WH_DR_INFO_PFX); + w->infoname = w->whname + sizeof(AUFS_WH_DR_INFO_PFX) - 1; + w->infonamelen = sizeof(w->whname) - sizeof(AUFS_WH_DR_INFO_PFX); + w->btgt = btgt; + w->no_sio = !!uid_eq(current_fsuid(), GLOBAL_ROOT_UID); + + err = -ENOMEM; + w->fdata = kcalloc(1, w->allocated, GFP_NOFS); + if (unlikely(!w->fdata)) { + AuTraceErr(err); + goto out; + } + w->fdata->magic = (__force uint32_t)htonl(AUFS_DRINFO_MAGIC_V1); + err = 0; + +out: + return err; +} + +static void au_drinfo_store_work_fin(struct au_drinfo_store *w) +{ + kfree(w->fdata); +} + +static void au_drinfo_store_rev(struct au_drinfo_rev *rev, + struct au_drinfo_store *w) +{ + struct au_drinfo_rev_elm *elm; + struct inode *h_dir, *delegated; + int err, nelm; + struct path infopath = { + .mnt = w->h_ppath.mnt + }; + + h_dir = d_inode(w->h_ppath.dentry); + IMustLock(h_dir); + + err = 0; + elm = rev->elm; + for (nelm = rev->nelm; nelm > 0; nelm--, elm++) { + AuDebugOn(elm->created && elm->info_last); + if (elm->created) { + AuDbg("here\n"); + delegated = NULL; + infopath.dentry = elm->info_dentry; + err = vfsub_unlink(h_dir, &infopath, &delegated, + !w->no_sio); + AuTraceErr(err); + if (unlikely(err == -EWOULDBLOCK)) + iput(delegated); + dput(elm->info_dentry); + } else if (elm->info_last) { + AuDbg("here\n"); + w->fdata->drinfo = *elm->info_last; + memcpy(w->fdata->drinfo.oldname, + elm->info_last->oldname, + elm->info_last->oldnamelen); + err = au_drinfo_store_sio(w, /*elm*/NULL); + kfree(elm->info_last); + } + if (unlikely(err)) + AuIOErr("%d, %s\n", err, w->whname); + /* go on even if err */ + } +} + +/* caller has to call au_dr_rename_fin() later */ +static int au_drinfo_store(struct dentry *dentry, aufs_bindex_t btgt, + struct qstr *dst_name, void *_rev) +{ + int err, sz, nelm; + aufs_bindex_t bindex, btail; + struct au_drinfo_store work; + struct au_drinfo_rev *rev, **p; + struct au_drinfo_rev_elm *elm; + struct super_block *sb; + struct au_branch *br; + struct au_hinode *hdir; + + err = au_drinfo_store_work_init(&work, btgt); + AuTraceErr(err); + if (unlikely(err)) + goto out; + + err = -ENOMEM; + btail = au_dbtaildir(dentry); + nelm = btail - btgt; + sz = sizeof(*rev) + sizeof(*elm) * nelm; + rev = kcalloc(1, sz, GFP_NOFS); + if (unlikely(!rev)) { + AuTraceErr(err); + goto out_args; + } + rev->nelm = nelm; + elm = rev->elm; + p = _rev; + *p = rev; + + err = 0; + sb = dentry->d_sb; + work.h_ppath.dentry = au_h_dptr(dentry, btgt); + work.h_ppath.mnt = au_sbr_mnt(sb, btgt); + hdir = au_hi(d_inode(dentry), btgt); + au_hn_inode_lock_nested(hdir, AuLsc_I_CHILD); + for (bindex = btgt + 1; bindex <= btail; bindex++, elm++) { + work.h_dentry = au_h_dptr(dentry, bindex); + if (!work.h_dentry) + continue; + + err = au_drinfo_construct(&work.fdata, work.h_dentry, + &work.allocated); + AuTraceErr(err); + if (unlikely(err)) + break; + + work.renameback = au_qstreq(&work.h_dentry->d_name, dst_name); + br = au_sbr(sb, bindex); + work.whnamelen = sizeof(AUFS_WH_DR_INFO_PFX) - 1; + work.whnamelen += au_drinfo_name(br, work.infoname, + work.infonamelen); + AuDbg("whname %.*s, i%llu, %.*s\n", + work.whnamelen, work.whname, + be64_to_cpu((__force __be64)work.fdata->drinfo.ino), + work.fdata->drinfo.oldnamelen, + work.fdata->drinfo.oldname); + + err = au_drinfo_store_sio(&work, elm); + AuTraceErr(err); + if (unlikely(err)) + break; + } + if (unlikely(err)) { + /* revert all drinfo */ + au_drinfo_store_rev(rev, &work); + kfree(rev); + *p = NULL; + } + au_hn_inode_unlock(hdir); + +out_args: + au_drinfo_store_work_fin(&work); +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_dr_rename(struct dentry *src, aufs_bindex_t bindex, + struct qstr *dst_name, void *_rev) +{ + int err, already; + ino_t ino; + struct super_block *sb; + struct au_branch *br; + struct au_dr_br *dr; + struct dentry *h_dentry; + struct inode *h_inode; + struct au_dr_hino *ent; + struct au_drinfo_rev *rev, **p; + + AuDbg("bindex %d\n", bindex); + + err = -ENOMEM; + ent = kmalloc(sizeof(*ent), GFP_NOFS); + if (unlikely(!ent)) + goto out; + + sb = src->d_sb; + br = au_sbr(sb, bindex); + dr = &br->br_dirren; + h_dentry = au_h_dptr(src, bindex); + h_inode = d_inode(h_dentry); + ino = h_inode->i_ino; + ent->dr_h_ino = ino; + already = au_dr_hino_test_add(dr, ino, ent); + AuDbg("b%d, hi%llu, already %d\n", + bindex, (unsigned long long)ino, already); + + err = au_drinfo_store(src, bindex, dst_name, _rev); + AuTraceErr(err); + if (!err) { + p = _rev; + rev = *p; + rev->already = already; + goto out; /* success */ + } + + /* revert */ + if (!already) + au_dr_hino_del(dr, ent); + kfree(ent); + +out: + AuTraceErr(err); + return err; +} + +void au_dr_rename_fin(struct dentry *src, aufs_bindex_t btgt, void *_rev) +{ + struct au_drinfo_rev *rev; + struct au_drinfo_rev_elm *elm; + int nelm; + + rev = _rev; + elm = rev->elm; + for (nelm = rev->nelm; nelm > 0; nelm--, elm++) { + dput(elm->info_dentry); + kfree(elm->info_last); + } + kfree(rev); +} + +void au_dr_rename_rev(struct dentry *src, aufs_bindex_t btgt, void *_rev) +{ + int err; + struct au_drinfo_store work; + struct au_drinfo_rev *rev = _rev; + struct super_block *sb; + struct au_branch *br; + struct inode *h_inode; + struct au_dr_br *dr; + struct au_dr_hino *ent; + + err = au_drinfo_store_work_init(&work, btgt); + if (unlikely(err)) + goto out; + + sb = src->d_sb; + br = au_sbr(sb, btgt); + work.h_ppath.dentry = au_h_dptr(src, btgt); + work.h_ppath.mnt = au_br_mnt(br); + au_drinfo_store_rev(rev, &work); + au_drinfo_store_work_fin(&work); + if (rev->already) + goto out; + + dr = &br->br_dirren; + h_inode = d_inode(work.h_ppath.dentry); + ent = au_dr_hino_find(dr, h_inode->i_ino); + BUG_ON(!ent); + au_dr_hino_del(dr, ent); + kfree(ent); + +out: + kfree(rev); + if (unlikely(err)) + pr_err("failed to remove dirren info\n"); +} + +/* ---------------------------------------------------------------------- */ + +static struct au_drinfo *au_drinfo_do_load(struct path *h_ppath, + char *whname, int whnamelen, + struct dentry **info_dentry) +{ + struct au_drinfo *drinfo; + struct file *f; + struct inode *h_dir; + struct path infopath; + int unlocked; + + AuDbg("%pd/%.*s\n", h_ppath->dentry, whnamelen, whname); + + *info_dentry = NULL; + drinfo = NULL; + unlocked = 0; + h_dir = d_inode(h_ppath->dentry); + vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + infopath.dentry = vfsub_lookup_one_len(whname, h_ppath->dentry, + whnamelen); + if (IS_ERR(infopath.dentry)) { + drinfo = (void *)infopath.dentry; + goto out; + } + + if (d_is_negative(infopath.dentry)) + goto out_dput; /* success */ + + infopath.mnt = h_ppath->mnt; + f = vfsub_dentry_open(&infopath, O_RDONLY); + inode_unlock_shared(h_dir); + unlocked = 1; + if (IS_ERR(f)) { + drinfo = (void *)f; + goto out_dput; + } + + drinfo = au_drinfo_read_k(f, /*h_ino*/0); + if (IS_ERR_OR_NULL(drinfo)) + goto out_fput; + + AuDbg("oldname %.*s\n", drinfo->oldnamelen, drinfo->oldname); + *info_dentry = dget(infopath.dentry); /* keep it alive */ + +out_fput: + fput(f); +out_dput: + dput(infopath.dentry); +out: + if (!unlocked) + inode_unlock_shared(h_dir); + AuTraceErrPtr(drinfo); + return drinfo; +} + +struct au_drinfo_do_load_args { + struct au_drinfo **drinfop; + struct path *h_ppath; + char *whname; + int whnamelen; + struct dentry **info_dentry; +}; + +static void au_call_drinfo_do_load(void *args) +{ + struct au_drinfo_do_load_args *a = args; + + *a->drinfop = au_drinfo_do_load(a->h_ppath, a->whname, a->whnamelen, + a->info_dentry); +} + +struct au_drinfo_load { + struct path h_ppath; + struct qstr *qname; + unsigned char no_sio; + + aufs_bindex_t ninfo; + struct au_drinfo **drinfo; +}; + +static int au_drinfo_load(struct au_drinfo_load *w, aufs_bindex_t bindex, + struct au_branch *br) +{ + int err, wkq_err, whnamelen, e; + char whname[sizeof(AUFS_WH_DR_INFO_PFX) + AUFS_DIRREN_ENV_VAL_SZ] + = AUFS_WH_DR_INFO_PFX; + struct au_drinfo *drinfo; + struct qstr oldname; + struct inode *h_dir, *delegated; + struct dentry *info_dentry; + struct path infopath; + + whnamelen = sizeof(AUFS_WH_DR_INFO_PFX) - 1; + whnamelen += au_drinfo_name(br, whname + whnamelen, + sizeof(whname) - whnamelen); + if (w->no_sio) + drinfo = au_drinfo_do_load(&w->h_ppath, whname, whnamelen, + &info_dentry); + else { + struct au_drinfo_do_load_args args = { + .drinfop = &drinfo, + .h_ppath = &w->h_ppath, + .whname = whname, + .whnamelen = whnamelen, + .info_dentry = &info_dentry + }; + wkq_err = au_wkq_wait(au_call_drinfo_do_load, &args); + if (unlikely(wkq_err)) + drinfo = ERR_PTR(wkq_err); + } + err = PTR_ERR(drinfo); + if (IS_ERR_OR_NULL(drinfo)) + goto out; + + err = 0; + oldname.len = drinfo->oldnamelen; + oldname.name = drinfo->oldname; + if (au_qstreq(w->qname, &oldname)) { + /* the name is renamed back */ + kfree(drinfo); + drinfo = NULL; + + infopath.dentry = info_dentry; + infopath.mnt = w->h_ppath.mnt; + h_dir = d_inode(w->h_ppath.dentry); + delegated = NULL; + inode_lock_nested(h_dir, AuLsc_I_PARENT); + e = vfsub_unlink(h_dir, &infopath, &delegated, !w->no_sio); + inode_unlock(h_dir); + if (unlikely(e)) + AuIOErr("ignored %d, %pd2\n", e, &infopath.dentry); + if (unlikely(e == -EWOULDBLOCK)) + iput(delegated); + } + kfree(w->drinfo[bindex]); + w->drinfo[bindex] = drinfo; + dput(info_dentry); + +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_dr_lkup_free(struct au_drinfo **drinfo, int n) +{ + struct au_drinfo **p = drinfo; + + while (n-- > 0) + kfree(*drinfo++); + kfree(p); +} + +int au_dr_lkup(struct au_do_lookup_args *lkup, struct dentry *dentry, + aufs_bindex_t btgt) +{ + int err, ninfo; + struct au_drinfo_load w; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + struct inode *h_dir; + struct au_dr_hino *ent; + struct super_block *sb; + + AuDbg("%.*s, name %.*s, whname %.*s, b%d\n", + AuLNPair(&dentry->d_name), AuLNPair(&lkup->dirren.dr_name), + AuLNPair(&lkup->whname), btgt); + + sb = dentry->d_sb; + bbot = au_sbbot(sb); + w.ninfo = bbot + 1; + if (!lkup->dirren.drinfo) { + lkup->dirren.drinfo = kcalloc(w.ninfo, + sizeof(*lkup->dirren.drinfo), + GFP_NOFS); + if (unlikely(!lkup->dirren.drinfo)) { + err = -ENOMEM; + goto out; + } + lkup->dirren.ninfo = w.ninfo; + } + w.drinfo = lkup->dirren.drinfo; + w.no_sio = !!uid_eq(current_fsuid(), GLOBAL_ROOT_UID); + w.h_ppath.dentry = au_h_dptr(dentry, btgt); + AuDebugOn(!w.h_ppath.dentry); + w.h_ppath.mnt = au_sbr_mnt(sb, btgt); + w.qname = &dentry->d_name; + + ninfo = 0; + for (bindex = btgt + 1; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + err = au_drinfo_load(&w, bindex, br); + if (unlikely(err)) + goto out_free; + if (w.drinfo[bindex]) + ninfo++; + } + if (!ninfo) { + br = au_sbr(sb, btgt); + h_dir = d_inode(w.h_ppath.dentry); + ent = au_dr_hino_find(&br->br_dirren, h_dir->i_ino); + AuDebugOn(!ent); + au_dr_hino_del(&br->br_dirren, ent); + kfree(ent); + } + goto out; /* success */ + +out_free: + au_dr_lkup_free(lkup->dirren.drinfo, lkup->dirren.ninfo); + lkup->dirren.ninfo = 0; + lkup->dirren.drinfo = NULL; +out: + AuTraceErr(err); + return err; +} + +void au_dr_lkup_fin(struct au_do_lookup_args *lkup) +{ + au_dr_lkup_free(lkup->dirren.drinfo, lkup->dirren.ninfo); +} + +int au_dr_lkup_name(struct au_do_lookup_args *lkup, aufs_bindex_t btgt) +{ + int err; + struct au_drinfo *drinfo; + + err = 0; + if (!lkup->dirren.drinfo) + goto out; + AuDebugOn(lkup->dirren.ninfo < btgt + 1); + drinfo = lkup->dirren.drinfo[btgt + 1]; + if (!drinfo) + goto out; + + kfree(lkup->whname.name); + lkup->whname.name = NULL; + lkup->dirren.dr_name.len = drinfo->oldnamelen; + lkup->dirren.dr_name.name = drinfo->oldname; + lkup->name = &lkup->dirren.dr_name; + err = au_wh_name_alloc(&lkup->whname, lkup->name); + if (!err) + AuDbg("name %.*s, whname %.*s, b%d\n", + AuLNPair(lkup->name), AuLNPair(&lkup->whname), + btgt); + +out: + AuTraceErr(err); + return err; +} + +int au_dr_lkup_h_ino(struct au_do_lookup_args *lkup, aufs_bindex_t bindex, + ino_t h_ino) +{ + int match; + struct au_drinfo *drinfo; + + match = 1; + if (!lkup->dirren.drinfo) + goto out; + AuDebugOn(lkup->dirren.ninfo < bindex + 1); + drinfo = lkup->dirren.drinfo[bindex + 1]; + if (!drinfo) + goto out; + + match = (drinfo->ino == h_ino); + AuDbg("match %d\n", match); + +out: + return match; +} + +/* ---------------------------------------------------------------------- */ + +int au_dr_opt_set(struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + err = 0; + bbot = au_sbbot(sb); + for (bindex = 0; !err && bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + err = au_dr_hino(sb, bindex, /*br*/NULL, &br->br_path); + } + + return err; +} + +int au_dr_opt_flush(struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + err = 0; + bbot = au_sbbot(sb); + for (bindex = 0; !err && bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_writable(br->br_perm)) + err = au_dr_hino(sb, bindex, /*br*/NULL, /*path*/NULL); + } + + return err; +} + +int au_dr_opt_clr(struct super_block *sb, int no_flush) +{ + int err; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + err = 0; + if (!no_flush) { + err = au_dr_opt_flush(sb); + if (unlikely(err)) + goto out; + } + + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + au_dr_hino_free(&br->br_dirren); + } + +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/dirren.h +++ linux-aws-4.15.0/fs/aufs/dirren.h @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * renamed dir info + */ + +#ifndef __AUFS_DIRREN_H__ +#define __AUFS_DIRREN_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include "hbl.h" + +#define AuDirren_NHASH 100 + +#ifdef CONFIG_AUFS_DIRREN +enum au_brid_type { + AuBrid_Unset, + AuBrid_UUID, + AuBrid_FSID, + AuBrid_DEV +}; + +struct au_dr_brid { + enum au_brid_type type; + union { + uuid_t uuid; /* unimplemented yet */ + fsid_t fsid; + dev_t dev; + }; +}; + +/* 20 is the max digits length of ulong 64 */ +/* brid-type "_" uuid "_" inum */ +#define AUFS_DIRREN_FNAME_SZ (1 + 1 + UUID_STRING_LEN + 20) +#define AUFS_DIRREN_ENV_VAL_SZ (AUFS_DIRREN_FNAME_SZ + 1 + 20) + +struct au_dr_hino { + struct hlist_bl_node dr_hnode; + ino_t dr_h_ino; +}; + +struct au_dr_br { + struct hlist_bl_head dr_h_ino[AuDirren_NHASH]; + struct au_dr_brid dr_brid; +}; + +struct au_dr_lookup { + /* dr_name is pointed by struct au_do_lookup_args.name */ + struct qstr dr_name; /* subset of dr_info */ + aufs_bindex_t ninfo; + struct au_drinfo **drinfo; +}; +#else +struct au_dr_hino; +/* empty */ +struct au_dr_br { }; +struct au_dr_lookup { }; +#endif + +/* ---------------------------------------------------------------------- */ + +struct au_branch; +struct au_do_lookup_args; +struct au_hinode; +#ifdef CONFIG_AUFS_DIRREN +int au_dr_hino_test_add(struct au_dr_br *dr, ino_t h_ino, + struct au_dr_hino *add_ent); +void au_dr_hino_free(struct au_dr_br *dr); +int au_dr_br_init(struct super_block *sb, struct au_branch *br, + const struct path *path); +int au_dr_br_fin(struct super_block *sb, struct au_branch *br); +int au_dr_rename(struct dentry *src, aufs_bindex_t bindex, + struct qstr *dst_name, void *_rev); +void au_dr_rename_fin(struct dentry *src, aufs_bindex_t btgt, void *rev); +void au_dr_rename_rev(struct dentry *src, aufs_bindex_t bindex, void *rev); +int au_dr_lkup(struct au_do_lookup_args *lkup, struct dentry *dentry, + aufs_bindex_t bindex); +int au_dr_lkup_name(struct au_do_lookup_args *lkup, aufs_bindex_t btgt); +int au_dr_lkup_h_ino(struct au_do_lookup_args *lkup, aufs_bindex_t bindex, + ino_t h_ino); +void au_dr_lkup_fin(struct au_do_lookup_args *lkup); +int au_dr_opt_set(struct super_block *sb); +int au_dr_opt_flush(struct super_block *sb); +int au_dr_opt_clr(struct super_block *sb, int no_flush); +#else +AuStubInt0(au_dr_hino_test_add, struct au_dr_br *dr, ino_t h_ino, + struct au_dr_hino *add_ent); +AuStubVoid(au_dr_hino_free, struct au_dr_br *dr); +AuStubInt0(au_dr_br_init, struct super_block *sb, struct au_branch *br, + const struct path *path); +AuStubInt0(au_dr_br_fin, struct super_block *sb, struct au_branch *br); +AuStubInt0(au_dr_rename, struct dentry *src, aufs_bindex_t bindex, + struct qstr *dst_name, void *_rev); +AuStubVoid(au_dr_rename_fin, struct dentry *src, aufs_bindex_t btgt, void *rev); +AuStubVoid(au_dr_rename_rev, struct dentry *src, aufs_bindex_t bindex, + void *rev); +AuStubInt0(au_dr_lkup, struct au_do_lookup_args *lkup, struct dentry *dentry, + aufs_bindex_t bindex); +AuStubInt0(au_dr_lkup_name, struct au_do_lookup_args *lkup, aufs_bindex_t btgt); +AuStubInt0(au_dr_lkup_h_ino, struct au_do_lookup_args *lkup, + aufs_bindex_t bindex, ino_t h_ino); +AuStubVoid(au_dr_lkup_fin, struct au_do_lookup_args *lkup); +AuStubInt0(au_dr_opt_set, struct super_block *sb); +AuStubInt0(au_dr_opt_flush, struct super_block *sb); +AuStubInt0(au_dr_opt_clr, struct super_block *sb, int no_flush); +#endif + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_DIRREN +static inline int au_dr_ihash(ino_t h_ino) +{ + return h_ino % AuDirren_NHASH; +} +#else +AuStubInt0(au_dr_ihash, ino_t h_ino); +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIRREN_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/dynop.c +++ linux-aws-4.15.0/fs/aufs/dynop.c @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * dynamically customizable operations for regular files + */ + +#include "aufs.h" + +#define DyPrSym(key) AuDbgSym(key->dk_op.dy_hop) + +/* + * How large will these lists be? + * Usually just a few elements, 20-30 at most for each, I guess. + */ +static struct hlist_bl_head dynop[AuDyLast]; + +static struct au_dykey *dy_gfind_get(struct hlist_bl_head *hbl, + const void *h_op) +{ + struct au_dykey *key, *tmp; + struct hlist_bl_node *pos; + + key = NULL; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(tmp, pos, hbl, dk_hnode) + if (tmp->dk_op.dy_hop == h_op) { + key = tmp; + kref_get(&key->dk_kref); + break; + } + hlist_bl_unlock(hbl); + + return key; +} + +static struct au_dykey *dy_bradd(struct au_branch *br, struct au_dykey *key) +{ + struct au_dykey **k, *found; + const void *h_op = key->dk_op.dy_hop; + int i; + + found = NULL; + k = br->br_dykey; + for (i = 0; i < AuBrDynOp; i++) + if (k[i]) { + if (k[i]->dk_op.dy_hop == h_op) { + found = k[i]; + break; + } + } else + break; + if (!found) { + spin_lock(&br->br_dykey_lock); + for (; i < AuBrDynOp; i++) + if (k[i]) { + if (k[i]->dk_op.dy_hop == h_op) { + found = k[i]; + break; + } + } else { + k[i] = key; + break; + } + spin_unlock(&br->br_dykey_lock); + BUG_ON(i == AuBrDynOp); /* expand the array */ + } + + return found; +} + +/* kref_get() if @key is already added */ +static struct au_dykey *dy_gadd(struct hlist_bl_head *hbl, struct au_dykey *key) +{ + struct au_dykey *tmp, *found; + struct hlist_bl_node *pos; + const void *h_op = key->dk_op.dy_hop; + + found = NULL; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(tmp, pos, hbl, dk_hnode) + if (tmp->dk_op.dy_hop == h_op) { + kref_get(&tmp->dk_kref); + found = tmp; + break; + } + if (!found) + hlist_bl_add_head(&key->dk_hnode, hbl); + hlist_bl_unlock(hbl); + + if (!found) + DyPrSym(key); + return found; +} + +static void dy_free_rcu(struct rcu_head *rcu) +{ + struct au_dykey *key; + + key = container_of(rcu, struct au_dykey, dk_rcu); + DyPrSym(key); + kfree(key); +} + +static void dy_free(struct kref *kref) +{ + struct au_dykey *key; + struct hlist_bl_head *hbl; + + key = container_of(kref, struct au_dykey, dk_kref); + hbl = dynop + key->dk_op.dy_type; + au_hbl_del(&key->dk_hnode, hbl); + call_rcu(&key->dk_rcu, dy_free_rcu); +} + +void au_dy_put(struct au_dykey *key) +{ + kref_put(&key->dk_kref, dy_free); +} + +/* ---------------------------------------------------------------------- */ + +#define DyDbgSize(cnt, op) AuDebugOn(cnt != sizeof(op)/sizeof(void *)) + +#ifdef CONFIG_AUFS_DEBUG +#define DyDbgDeclare(cnt) unsigned int cnt = 0 +#define DyDbgInc(cnt) do { cnt++; } while (0) +#else +#define DyDbgDeclare(cnt) do {} while (0) +#define DyDbgInc(cnt) do {} while (0) +#endif + +#define DySet(func, dst, src, h_op, h_sb) do { \ + DyDbgInc(cnt); \ + if (h_op->func) { \ + if (src.func) \ + dst.func = src.func; \ + else \ + AuDbg("%s %s\n", au_sbtype(h_sb), #func); \ + } \ +} while (0) + +#define DySetForce(func, dst, src) do { \ + AuDebugOn(!src.func); \ + DyDbgInc(cnt); \ + dst.func = src.func; \ +} while (0) + +#define DySetAop(func) \ + DySet(func, dyaop->da_op, aufs_aop, h_aop, h_sb) +#define DySetAopForce(func) \ + DySetForce(func, dyaop->da_op, aufs_aop) + +static void dy_aop(struct au_dykey *key, const void *h_op, + struct super_block *h_sb __maybe_unused) +{ + struct au_dyaop *dyaop = (void *)key; + const struct address_space_operations *h_aop = h_op; + DyDbgDeclare(cnt); + + AuDbg("%s\n", au_sbtype(h_sb)); + + DySetAop(writepage); + DySetAopForce(readpage); /* force */ + DySetAop(writepages); + DySetAop(set_page_dirty); + DySetAop(readpages); + DySetAop(write_begin); + DySetAop(write_end); + DySetAop(bmap); + DySetAop(invalidatepage); + DySetAop(releasepage); + DySetAop(freepage); + /* this one will be changed according to an aufs mount option */ + DySetAop(direct_IO); + DySetAop(migratepage); + DySetAop(isolate_page); + DySetAop(putback_page); + DySetAop(launder_page); + DySetAop(is_partially_uptodate); + DySetAop(is_dirty_writeback); + DySetAop(error_remove_page); + DySetAop(swap_activate); + DySetAop(swap_deactivate); + + DyDbgSize(cnt, *h_aop); +} + +/* ---------------------------------------------------------------------- */ + +static void dy_bug(struct kref *kref) +{ + BUG(); +} + +static struct au_dykey *dy_get(struct au_dynop *op, struct au_branch *br) +{ + struct au_dykey *key, *old; + struct hlist_bl_head *hbl; + struct op { + unsigned int sz; + void (*set)(struct au_dykey *key, const void *h_op, + struct super_block *h_sb __maybe_unused); + }; + static const struct op a[] = { + [AuDy_AOP] = { + .sz = sizeof(struct au_dyaop), + .set = dy_aop + } + }; + const struct op *p; + + hbl = dynop + op->dy_type; + key = dy_gfind_get(hbl, op->dy_hop); + if (key) + goto out_add; /* success */ + + p = a + op->dy_type; + key = kzalloc(p->sz, GFP_NOFS); + if (unlikely(!key)) { + key = ERR_PTR(-ENOMEM); + goto out; + } + + key->dk_op.dy_hop = op->dy_hop; + kref_init(&key->dk_kref); + p->set(key, op->dy_hop, au_br_sb(br)); + old = dy_gadd(hbl, key); + if (old) { + kfree(key); + key = old; + } + +out_add: + old = dy_bradd(br, key); + if (old) + /* its ref-count should never be zero here */ + kref_put(&key->dk_kref, dy_bug); +out: + return key; +} + +/* ---------------------------------------------------------------------- */ +/* + * Aufs prohibits O_DIRECT by defaut even if the branch supports it. + * This behaviour is necessary to return an error from open(O_DIRECT) instead + * of the succeeding I/O. The dio mount option enables O_DIRECT and makes + * open(O_DIRECT) always succeed, but the succeeding I/O may return an error. + * See the aufs manual in detail. + */ +static void dy_adx(struct au_dyaop *dyaop, int do_dx) +{ + if (!do_dx) + dyaop->da_op.direct_IO = NULL; + else + dyaop->da_op.direct_IO = aufs_aop.direct_IO; +} + +static struct au_dyaop *dy_aget(struct au_branch *br, + const struct address_space_operations *h_aop, + int do_dx) +{ + struct au_dyaop *dyaop; + struct au_dynop op; + + op.dy_type = AuDy_AOP; + op.dy_haop = h_aop; + dyaop = (void *)dy_get(&op, br); + if (IS_ERR(dyaop)) + goto out; + dy_adx(dyaop, do_dx); + +out: + return dyaop; +} + +int au_dy_iaop(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode) +{ + int err, do_dx; + struct super_block *sb; + struct au_branch *br; + struct au_dyaop *dyaop; + + AuDebugOn(!S_ISREG(h_inode->i_mode)); + IiMustWriteLock(inode); + + sb = inode->i_sb; + br = au_sbr(sb, bindex); + do_dx = !!au_opt_test(au_mntflags(sb), DIO); + dyaop = dy_aget(br, h_inode->i_mapping->a_ops, do_dx); + err = PTR_ERR(dyaop); + if (IS_ERR(dyaop)) + /* unnecessary to call dy_fput() */ + goto out; + + err = 0; + inode->i_mapping->a_ops = &dyaop->da_op; + +out: + return err; +} + +/* + * Is it safe to replace a_ops during the inode/file is in operation? + * Yes, I hope so. + */ +int au_dy_irefresh(struct inode *inode) +{ + int err; + aufs_bindex_t btop; + struct inode *h_inode; + + err = 0; + if (S_ISREG(inode->i_mode)) { + btop = au_ibtop(inode); + h_inode = au_h_iptr(inode, btop); + err = au_dy_iaop(inode, btop, h_inode); + } + return err; +} + +void au_dy_arefresh(int do_dx) +{ + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + struct au_dykey *key; + + hbl = dynop + AuDy_AOP; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(key, pos, hbl, dk_hnode) + dy_adx((void *)key, do_dx); + hlist_bl_unlock(hbl); +} + +/* ---------------------------------------------------------------------- */ + +void __init au_dy_init(void) +{ + int i; + + /* make sure that 'struct au_dykey *' can be any type */ + BUILD_BUG_ON(offsetof(struct au_dyaop, da_key)); + + for (i = 0; i < AuDyLast; i++) + INIT_HLIST_BL_HEAD(dynop + i); +} + +void au_dy_fin(void) +{ + int i; + + for (i = 0; i < AuDyLast; i++) + WARN_ON(!hlist_bl_empty(dynop + i)); +} --- linux-aws-4.15.0.orig/fs/aufs/dynop.h +++ linux-aws-4.15.0/fs/aufs/dynop.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * dynamically customizable operations (for regular files only) + */ + +#ifndef __AUFS_DYNOP_H__ +#define __AUFS_DYNOP_H__ + +#ifdef __KERNEL__ + +#include +#include + +enum {AuDy_AOP, AuDyLast}; + +struct au_dynop { + int dy_type; + union { + const void *dy_hop; + const struct address_space_operations *dy_haop; + }; +}; + +struct au_dykey { + union { + struct hlist_bl_node dk_hnode; + struct rcu_head dk_rcu; + }; + struct au_dynop dk_op; + + /* + * during I am in the branch local array, kref is gotten. when the + * branch is removed, kref is put. + */ + struct kref dk_kref; +}; + +/* stop unioning since their sizes are very different from each other */ +struct au_dyaop { + struct au_dykey da_key; + struct address_space_operations da_op; /* not const */ +}; + +/* ---------------------------------------------------------------------- */ + +/* dynop.c */ +struct au_branch; +void au_dy_put(struct au_dykey *key); +int au_dy_iaop(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode); +int au_dy_irefresh(struct inode *inode); +void au_dy_arefresh(int do_dio); + +void __init au_dy_init(void); +void au_dy_fin(void); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DYNOP_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/export.c +++ linux-aws-4.15.0/fs/aufs/export.c @@ -0,0 +1,836 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * export via nfs + */ + +#include +#include +#include +#include +#include +#include +#include "aufs.h" + +union conv { +#ifdef CONFIG_AUFS_INO_T_64 + __u32 a[2]; +#else + __u32 a[1]; +#endif + ino_t ino; +}; + +static ino_t decode_ino(__u32 *a) +{ + union conv u; + + BUILD_BUG_ON(sizeof(u.ino) != sizeof(u.a)); + u.a[0] = a[0]; +#ifdef CONFIG_AUFS_INO_T_64 + u.a[1] = a[1]; +#endif + return u.ino; +} + +static void encode_ino(__u32 *a, ino_t ino) +{ + union conv u; + + u.ino = ino; + a[0] = u.a[0]; +#ifdef CONFIG_AUFS_INO_T_64 + a[1] = u.a[1]; +#endif +} + +/* NFS file handle */ +enum { + Fh_br_id, + Fh_sigen, +#ifdef CONFIG_AUFS_INO_T_64 + /* support 64bit inode number */ + Fh_ino1, + Fh_ino2, + Fh_dir_ino1, + Fh_dir_ino2, +#else + Fh_ino1, + Fh_dir_ino1, +#endif + Fh_igen, + Fh_h_type, + Fh_tail, + + Fh_ino = Fh_ino1, + Fh_dir_ino = Fh_dir_ino1 +}; + +static int au_test_anon(struct dentry *dentry) +{ + /* note: read d_flags without d_lock */ + return !!(dentry->d_flags & DCACHE_DISCONNECTED); +} + +int au_test_nfsd(void) +{ + int ret; + struct task_struct *tsk = current; + char comm[sizeof(tsk->comm)]; + + ret = 0; + if (tsk->flags & PF_KTHREAD) { + get_task_comm(comm, tsk); + ret = !strcmp(comm, "nfsd"); + } + + return ret; +} + +/* ---------------------------------------------------------------------- */ +/* inode generation external table */ + +void au_xigen_inc(struct inode *inode) +{ + loff_t pos; + ssize_t sz; + __u32 igen; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + sb = inode->i_sb; + AuDebugOn(!au_opt_test(au_mntflags(sb), XINO)); + + sbinfo = au_sbi(sb); + pos = inode->i_ino; + pos *= sizeof(igen); + igen = inode->i_generation + 1; + sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xigen, &igen, + sizeof(igen), &pos); + if (sz == sizeof(igen)) + return; /* success */ + + if (unlikely(sz >= 0)) + AuIOErr("xigen error (%zd)\n", sz); +} + +int au_xigen_new(struct inode *inode) +{ + int err; + loff_t pos; + ssize_t sz; + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct file *file; + + err = 0; + /* todo: dirty, at mount time */ + if (inode->i_ino == AUFS_ROOT_INO) + goto out; + sb = inode->i_sb; + SiMustAnyLock(sb); + if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) + goto out; + + err = -EFBIG; + pos = inode->i_ino; + if (unlikely(au_loff_max / sizeof(inode->i_generation) - 1 < pos)) { + AuIOErr1("too large i%lld\n", pos); + goto out; + } + pos *= sizeof(inode->i_generation); + + err = 0; + sbinfo = au_sbi(sb); + file = sbinfo->si_xigen; + BUG_ON(!file); + + if (vfsub_f_size_read(file) + < pos + sizeof(inode->i_generation)) { + inode->i_generation = atomic_inc_return(&sbinfo->si_xigen_next); + sz = xino_fwrite(sbinfo->si_xwrite, file, &inode->i_generation, + sizeof(inode->i_generation), &pos); + } else + sz = xino_fread(sbinfo->si_xread, file, &inode->i_generation, + sizeof(inode->i_generation), &pos); + if (sz == sizeof(inode->i_generation)) + goto out; /* success */ + + err = sz; + if (unlikely(sz >= 0)) { + err = -EIO; + AuIOErr("xigen error (%zd)\n", sz); + } + +out: + return err; +} + +int au_xigen_set(struct super_block *sb, struct file *base) +{ + int err; + struct au_sbinfo *sbinfo; + struct file *file; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + file = au_xino_create2(base, sbinfo->si_xigen); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + err = 0; + if (sbinfo->si_xigen) + fput(sbinfo->si_xigen); + sbinfo->si_xigen = file; + +out: + return err; +} + +void au_xigen_clr(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + if (sbinfo->si_xigen) { + fput(sbinfo->si_xigen); + sbinfo->si_xigen = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *decode_by_ino(struct super_block *sb, ino_t ino, + ino_t dir_ino) +{ + struct dentry *dentry, *d; + struct inode *inode; + unsigned int sigen; + + dentry = NULL; + inode = ilookup(sb, ino); + if (!inode) + goto out; + + dentry = ERR_PTR(-ESTALE); + sigen = au_sigen(sb); + if (unlikely(au_is_bad_inode(inode) + || IS_DEADDIR(inode) + || sigen != au_iigen(inode, NULL))) + goto out_iput; + + dentry = NULL; + if (!dir_ino || S_ISDIR(inode->i_mode)) + dentry = d_find_alias(inode); + else { + spin_lock(&inode->i_lock); + hlist_for_each_entry(d, &inode->i_dentry, d_u.d_alias) { + spin_lock(&d->d_lock); + if (!au_test_anon(d) + && d_inode(d->d_parent)->i_ino == dir_ino) { + dentry = dget_dlock(d); + spin_unlock(&d->d_lock); + break; + } + spin_unlock(&d->d_lock); + } + spin_unlock(&inode->i_lock); + } + if (unlikely(dentry && au_digen_test(dentry, sigen))) { + /* need to refresh */ + dput(dentry); + dentry = NULL; + } + +out_iput: + iput(inode); +out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +/* todo: dirty? */ +/* if exportfs_decode_fh() passed vfsmount*, we could be happy */ + +struct au_compare_mnt_args { + /* input */ + struct super_block *sb; + + /* output */ + struct vfsmount *mnt; +}; + +static int au_compare_mnt(struct vfsmount *mnt, void *arg) +{ + struct au_compare_mnt_args *a = arg; + + if (mnt->mnt_sb != a->sb) + return 0; + a->mnt = mntget(mnt); + return 1; +} + +static struct vfsmount *au_mnt_get(struct super_block *sb) +{ + int err; + struct path root; + struct au_compare_mnt_args args = { + .sb = sb + }; + + get_fs_root(current->fs, &root); + rcu_read_lock(); + err = iterate_mounts(au_compare_mnt, &args, root.mnt); + rcu_read_unlock(); + path_put(&root); + AuDebugOn(!err); + AuDebugOn(!args.mnt); + return args.mnt; +} + +struct au_nfsd_si_lock { + unsigned int sigen; + aufs_bindex_t bindex, br_id; + unsigned char force_lock; +}; + +static int si_nfsd_read_lock(struct super_block *sb, + struct au_nfsd_si_lock *nsi_lock) +{ + int err; + aufs_bindex_t bindex; + + si_read_lock(sb, AuLock_FLUSH); + + /* branch id may be wrapped around */ + err = 0; + bindex = au_br_index(sb, nsi_lock->br_id); + if (bindex >= 0 && nsi_lock->sigen + AUFS_BRANCH_MAX > au_sigen(sb)) + goto out; /* success */ + + err = -ESTALE; + bindex = -1; + if (!nsi_lock->force_lock) + si_read_unlock(sb); + +out: + nsi_lock->bindex = bindex; + return err; +} + +struct find_name_by_ino { + struct dir_context ctx; + int called, found; + ino_t ino; + char *name; + int namelen; +}; + +static int +find_name_by_ino(struct dir_context *ctx, const char *name, int namelen, + loff_t offset, u64 ino, unsigned int d_type) +{ + struct find_name_by_ino *a = container_of(ctx, struct find_name_by_ino, + ctx); + + a->called++; + if (a->ino != ino) + return 0; + + memcpy(a->name, name, namelen); + a->namelen = namelen; + a->found = 1; + return 1; +} + +static struct dentry *au_lkup_by_ino(struct path *path, ino_t ino, + struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry, *parent; + struct file *file; + struct inode *dir; + struct find_name_by_ino arg = { + .ctx = { + .actor = find_name_by_ino + } + }; + int err; + + parent = path->dentry; + if (nsi_lock) + si_read_unlock(parent->d_sb); + file = vfsub_dentry_open(path, au_dir_roflags); + dentry = (void *)file; + if (IS_ERR(file)) + goto out; + + dentry = ERR_PTR(-ENOMEM); + arg.name = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!arg.name)) + goto out_file; + arg.ino = ino; + arg.found = 0; + do { + arg.called = 0; + /* smp_mb(); */ + err = vfsub_iterate_dir(file, &arg.ctx); + } while (!err && !arg.found && arg.called); + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_name; + /* instead of ENOENT */ + dentry = ERR_PTR(-ESTALE); + if (!arg.found) + goto out_name; + + /* do not call vfsub_lkup_one() */ + dir = d_inode(parent); + dentry = vfsub_lookup_one_len_unlocked(arg.name, parent, arg.namelen); + AuTraceErrPtr(dentry); + if (IS_ERR(dentry)) + goto out_name; + AuDebugOn(au_test_anon(dentry)); + if (unlikely(d_really_is_negative(dentry))) { + dput(dentry); + dentry = ERR_PTR(-ENOENT); + } + +out_name: + free_page((unsigned long)arg.name); +out_file: + fput(file); +out: + if (unlikely(nsi_lock + && si_nfsd_read_lock(parent->d_sb, nsi_lock) < 0)) + if (!IS_ERR(dentry)) { + dput(dentry); + dentry = ERR_PTR(-ESTALE); + } + AuTraceErrPtr(dentry); + return dentry; +} + +static struct dentry *decode_by_dir_ino(struct super_block *sb, ino_t ino, + ino_t dir_ino, + struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry; + struct path path; + + if (dir_ino != AUFS_ROOT_INO) { + path.dentry = decode_by_ino(sb, dir_ino, 0); + dentry = path.dentry; + if (!path.dentry || IS_ERR(path.dentry)) + goto out; + AuDebugOn(au_test_anon(path.dentry)); + } else + path.dentry = dget(sb->s_root); + + path.mnt = au_mnt_get(sb); + dentry = au_lkup_by_ino(&path, ino, nsi_lock); + path_put(&path); + +out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +static int h_acceptable(void *expv, struct dentry *dentry) +{ + return 1; +} + +static char *au_build_path(struct dentry *h_parent, struct path *h_rootpath, + char *buf, int len, struct super_block *sb) +{ + char *p; + int n; + struct path path; + + p = d_path(h_rootpath, buf, len); + if (IS_ERR(p)) + goto out; + n = strlen(p); + + path.mnt = h_rootpath->mnt; + path.dentry = h_parent; + p = d_path(&path, buf, len); + if (IS_ERR(p)) + goto out; + if (n != 1) + p += n; + + path.mnt = au_mnt_get(sb); + path.dentry = sb->s_root; + p = d_path(&path, buf, len - strlen(p)); + mntput(path.mnt); + if (IS_ERR(p)) + goto out; + if (n != 1) + p[strlen(p)] = '/'; + +out: + AuTraceErrPtr(p); + return p; +} + +static +struct dentry *decode_by_path(struct super_block *sb, ino_t ino, __u32 *fh, + int fh_len, struct au_nfsd_si_lock *nsi_lock) +{ + struct dentry *dentry, *h_parent, *root; + struct super_block *h_sb; + char *pathname, *p; + struct vfsmount *h_mnt; + struct au_branch *br; + int err; + struct path path; + + br = au_sbr(sb, nsi_lock->bindex); + h_mnt = au_br_mnt(br); + h_sb = h_mnt->mnt_sb; + /* todo: call lower fh_to_dentry()? fh_to_parent()? */ + lockdep_off(); + h_parent = exportfs_decode_fh(h_mnt, (void *)(fh + Fh_tail), + fh_len - Fh_tail, fh[Fh_h_type], + h_acceptable, /*context*/NULL); + lockdep_on(); + dentry = h_parent; + if (unlikely(!h_parent || IS_ERR(h_parent))) { + AuWarn1("%s decode_fh failed, %ld\n", + au_sbtype(h_sb), PTR_ERR(h_parent)); + goto out; + } + dentry = NULL; + if (unlikely(au_test_anon(h_parent))) { + AuWarn1("%s decode_fh returned a disconnected dentry\n", + au_sbtype(h_sb)); + goto out_h_parent; + } + + dentry = ERR_PTR(-ENOMEM); + pathname = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!pathname)) + goto out_h_parent; + + root = sb->s_root; + path.mnt = h_mnt; + di_read_lock_parent(root, !AuLock_IR); + path.dentry = au_h_dptr(root, nsi_lock->bindex); + di_read_unlock(root, !AuLock_IR); + p = au_build_path(h_parent, &path, pathname, PAGE_SIZE, sb); + dentry = (void *)p; + if (IS_ERR(p)) + goto out_pathname; + + si_read_unlock(sb); + err = vfsub_kern_path(p, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_relock; + + dentry = ERR_PTR(-ENOENT); + AuDebugOn(au_test_anon(path.dentry)); + if (unlikely(d_really_is_negative(path.dentry))) + goto out_path; + + if (ino != d_inode(path.dentry)->i_ino) + dentry = au_lkup_by_ino(&path, ino, /*nsi_lock*/NULL); + else + dentry = dget(path.dentry); + +out_path: + path_put(&path); +out_relock: + if (unlikely(si_nfsd_read_lock(sb, nsi_lock) < 0)) + if (!IS_ERR(dentry)) { + dput(dentry); + dentry = ERR_PTR(-ESTALE); + } +out_pathname: + free_page((unsigned long)pathname); +out_h_parent: + dput(h_parent); +out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry * +aufs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, + int fh_type) +{ + struct dentry *dentry; + __u32 *fh = fid->raw; + struct au_branch *br; + ino_t ino, dir_ino; + struct au_nfsd_si_lock nsi_lock = { + .force_lock = 0 + }; + + dentry = ERR_PTR(-ESTALE); + /* it should never happen, but the file handle is unreliable */ + if (unlikely(fh_len < Fh_tail)) + goto out; + nsi_lock.sigen = fh[Fh_sigen]; + nsi_lock.br_id = fh[Fh_br_id]; + + /* branch id may be wrapped around */ + br = NULL; + if (unlikely(si_nfsd_read_lock(sb, &nsi_lock))) + goto out; + nsi_lock.force_lock = 1; + + /* is this inode still cached? */ + ino = decode_ino(fh + Fh_ino); + /* it should never happen */ + if (unlikely(ino == AUFS_ROOT_INO)) + goto out_unlock; + + dir_ino = decode_ino(fh + Fh_dir_ino); + dentry = decode_by_ino(sb, ino, dir_ino); + if (IS_ERR(dentry)) + goto out_unlock; + if (dentry) + goto accept; + + /* is the parent dir cached? */ + br = au_sbr(sb, nsi_lock.bindex); + au_br_get(br); + dentry = decode_by_dir_ino(sb, ino, dir_ino, &nsi_lock); + if (IS_ERR(dentry)) + goto out_unlock; + if (dentry) + goto accept; + + /* lookup path */ + dentry = decode_by_path(sb, ino, fh, fh_len, &nsi_lock); + if (IS_ERR(dentry)) + goto out_unlock; + if (unlikely(!dentry)) + /* todo?: make it ESTALE */ + goto out_unlock; + +accept: + if (!au_digen_test(dentry, au_sigen(sb)) + && d_inode(dentry)->i_generation == fh[Fh_igen]) + goto out_unlock; /* success */ + + dput(dentry); + dentry = ERR_PTR(-ESTALE); +out_unlock: + if (br) + au_br_put(br); + si_read_unlock(sb); +out: + AuTraceErrPtr(dentry); + return dentry; +} + +#if 0 /* reserved for future use */ +/* support subtreecheck option */ +static struct dentry *aufs_fh_to_parent(struct super_block *sb, struct fid *fid, + int fh_len, int fh_type) +{ + struct dentry *parent; + __u32 *fh = fid->raw; + ino_t dir_ino; + + dir_ino = decode_ino(fh + Fh_dir_ino); + parent = decode_by_ino(sb, dir_ino, 0); + if (IS_ERR(parent)) + goto out; + if (!parent) + parent = decode_by_path(sb, au_br_index(sb, fh[Fh_br_id]), + dir_ino, fh, fh_len); + +out: + AuTraceErrPtr(parent); + return parent; +} +#endif + +/* ---------------------------------------------------------------------- */ + +static int aufs_encode_fh(struct inode *inode, __u32 *fh, int *max_len, + struct inode *dir) +{ + int err; + aufs_bindex_t bindex; + struct super_block *sb, *h_sb; + struct dentry *dentry, *parent, *h_parent; + struct inode *h_dir; + struct au_branch *br; + + err = -ENOSPC; + if (unlikely(*max_len <= Fh_tail)) { + AuWarn1("NFSv2 client (max_len %d)?\n", *max_len); + goto out; + } + + err = FILEID_ROOT; + if (inode->i_ino == AUFS_ROOT_INO) { + AuDebugOn(inode->i_ino != AUFS_ROOT_INO); + goto out; + } + + h_parent = NULL; + sb = inode->i_sb; + err = si_read_lock(sb, AuLock_FLUSH); + if (unlikely(err)) + goto out; + +#ifdef CONFIG_AUFS_DEBUG + if (unlikely(!au_opt_test(au_mntflags(sb), XINO))) + AuWarn1("NFS-exporting requires xino\n"); +#endif + err = -EIO; + parent = NULL; + ii_read_lock_child(inode); + bindex = au_ibtop(inode); + if (!dir) { + dentry = d_find_any_alias(inode); + if (unlikely(!dentry)) + goto out_unlock; + AuDebugOn(au_test_anon(dentry)); + parent = dget_parent(dentry); + dput(dentry); + if (unlikely(!parent)) + goto out_unlock; + if (d_really_is_positive(parent)) + dir = d_inode(parent); + } + + ii_read_lock_parent(dir); + h_dir = au_h_iptr(dir, bindex); + ii_read_unlock(dir); + if (unlikely(!h_dir)) + goto out_parent; + h_parent = d_find_any_alias(h_dir); + if (unlikely(!h_parent)) + goto out_hparent; + + err = -EPERM; + br = au_sbr(sb, bindex); + h_sb = au_br_sb(br); + if (unlikely(!h_sb->s_export_op)) { + AuErr1("%s branch is not exportable\n", au_sbtype(h_sb)); + goto out_hparent; + } + + fh[Fh_br_id] = br->br_id; + fh[Fh_sigen] = au_sigen(sb); + encode_ino(fh + Fh_ino, inode->i_ino); + encode_ino(fh + Fh_dir_ino, dir->i_ino); + fh[Fh_igen] = inode->i_generation; + + *max_len -= Fh_tail; + fh[Fh_h_type] = exportfs_encode_fh(h_parent, (void *)(fh + Fh_tail), + max_len, + /*connectable or subtreecheck*/0); + err = fh[Fh_h_type]; + *max_len += Fh_tail; + /* todo: macros? */ + if (err != FILEID_INVALID) + err = 99; + else + AuWarn1("%s encode_fh failed\n", au_sbtype(h_sb)); + +out_hparent: + dput(h_parent); +out_parent: + dput(parent); +out_unlock: + ii_read_unlock(inode); + si_read_unlock(sb); +out: + if (unlikely(err < 0)) + err = FILEID_INVALID; + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_commit_metadata(struct inode *inode) +{ + int err; + aufs_bindex_t bindex; + struct super_block *sb; + struct inode *h_inode; + int (*f)(struct inode *inode); + + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + ii_write_lock_child(inode); + bindex = au_ibtop(inode); + AuDebugOn(bindex < 0); + h_inode = au_h_iptr(inode, bindex); + + f = h_inode->i_sb->s_export_op->commit_metadata; + if (f) + err = f(h_inode); + else { + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = 0 /* metadata only */ + }; + + err = sync_inode(h_inode, &wbc); + } + + au_cpup_attr_timesizes(inode); + ii_write_unlock(inode); + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct export_operations aufs_export_op = { + .fh_to_dentry = aufs_fh_to_dentry, + /* .fh_to_parent = aufs_fh_to_parent, */ + .encode_fh = aufs_encode_fh, + .commit_metadata = aufs_commit_metadata +}; + +void au_export_init(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + __u32 u; + + BUILD_BUG_ON_MSG(IS_BUILTIN(CONFIG_AUFS_FS) + && IS_MODULE(CONFIG_EXPORTFS), + AUFS_NAME ": unsupported configuration " + "CONFIG_EXPORTFS=m and CONFIG_AUFS_FS=y"); + + sb->s_export_op = &aufs_export_op; + sbinfo = au_sbi(sb); + sbinfo->si_xigen = NULL; + get_random_bytes(&u, sizeof(u)); + BUILD_BUG_ON(sizeof(u) != sizeof(int)); + atomic_set(&sbinfo->si_xigen_next, u); +} --- linux-aws-4.15.0.orig/fs/aufs/f_op.c +++ linux-aws-4.15.0/fs/aufs/f_op.c @@ -0,0 +1,817 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * file and vm operations + */ + +#include +#include +#include +#include +#include "aufs.h" + +int au_do_open_nondir(struct file *file, int flags, struct file *h_file) +{ + int err; + aufs_bindex_t bindex; + struct dentry *dentry, *h_dentry; + struct au_finfo *finfo; + struct inode *h_inode; + + FiMustWriteLock(file); + + err = 0; + dentry = file->f_path.dentry; + AuDebugOn(IS_ERR_OR_NULL(dentry)); + finfo = au_fi(file); + memset(&finfo->fi_htop, 0, sizeof(finfo->fi_htop)); + atomic_set(&finfo->fi_mmapped, 0); + bindex = au_dbtop(dentry); + if (!h_file) { + h_dentry = au_h_dptr(dentry, bindex); + err = vfsub_test_mntns(file->f_path.mnt, h_dentry->d_sb); + if (unlikely(err)) + goto out; + h_file = au_h_open(dentry, bindex, flags, file, /*force_wr*/0); + } else { + h_dentry = h_file->f_path.dentry; + err = vfsub_test_mntns(file->f_path.mnt, h_dentry->d_sb); + if (unlikely(err)) + goto out; + get_file(h_file); + } + if (IS_ERR(h_file)) + err = PTR_ERR(h_file); + else { + if ((flags & __O_TMPFILE) + && !(flags & O_EXCL)) { + h_inode = file_inode(h_file); + spin_lock(&h_inode->i_lock); + h_inode->i_state |= I_LINKABLE; + spin_unlock(&h_inode->i_lock); + } + au_set_fbtop(file, bindex); + au_set_h_fptr(file, bindex, h_file); + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + } + +out: + return err; +} + +static int aufs_open_nondir(struct inode *inode __maybe_unused, + struct file *file) +{ + int err; + struct super_block *sb; + struct au_do_open_args args = { + .open = au_do_open_nondir + }; + + AuDbg("%pD, f_flags 0x%x, f_mode 0x%x\n", + file, vfsub_file_flags(file), file->f_mode); + + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_do_open(file, &args); + si_read_unlock(sb); + return err; +} + +int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file) +{ + struct au_finfo *finfo; + aufs_bindex_t bindex; + + finfo = au_fi(file); + au_hbl_del(&finfo->fi_hlist, + &au_sbi(file->f_path.dentry->d_sb)->si_files); + bindex = finfo->fi_btop; + if (bindex >= 0) + au_set_h_fptr(file, bindex, NULL); + + au_finfo_fin(file); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static int au_do_flush_nondir(struct file *file, fl_owner_t id) +{ + int err; + struct file *h_file; + + err = 0; + h_file = au_hf_top(file); + if (h_file) + err = vfsub_flush(h_file, id); + return err; +} + +static int aufs_flush_nondir(struct file *file, fl_owner_t id) +{ + return au_do_flush(file, id, au_do_flush_nondir); +} + +/* ---------------------------------------------------------------------- */ +/* + * read and write functions acquire [fdi]_rwsem once, but release before + * mmap_sem. This is because to stop a race condition between mmap(2). + * Releasing these aufs-rwsem should be safe, no branch-mamagement (by keeping + * si_rwsem), no harmful copy-up should happen. Actually copy-up may happen in + * read functions after [fdi]_rwsem are released, but it should be harmless. + */ + +/* Callers should call au_read_post() or fput() in the end */ +struct file *au_read_pre(struct file *file, int keep_fi, unsigned int lsc) +{ + struct file *h_file; + int err; + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0, lsc); + if (!err) { + di_read_unlock(file->f_path.dentry, AuLock_IR); + h_file = au_hf_top(file); + get_file(h_file); + if (!keep_fi) + fi_read_unlock(file); + } else + h_file = ERR_PTR(err); + + return h_file; +} + +static void au_read_post(struct inode *inode, struct file *h_file) +{ + /* update without lock, I don't think it a problem */ + fsstack_copy_attr_atime(inode, file_inode(h_file)); + fput(h_file); +} + +struct au_write_pre { + /* input */ + unsigned int lsc; + + /* output */ + blkcnt_t blks; + aufs_bindex_t btop; +}; + +/* + * return with iinfo is write-locked + * callers should call au_write_post() or iinfo_write_unlock() + fput() in the + * end + */ +static struct file *au_write_pre(struct file *file, int do_ready, + struct au_write_pre *wpre) +{ + struct file *h_file; + struct dentry *dentry; + int err; + unsigned int lsc; + struct au_pin pin; + + lsc = 0; + if (wpre) + lsc = wpre->lsc; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1, lsc); + h_file = ERR_PTR(err); + if (unlikely(err)) + goto out; + + dentry = file->f_path.dentry; + if (do_ready) { + err = au_ready_to_write(file, -1, &pin); + if (unlikely(err)) { + h_file = ERR_PTR(err); + di_write_unlock(dentry); + goto out_fi; + } + } + + di_downgrade_lock(dentry, /*flags*/0); + if (wpre) + wpre->btop = au_fbtop(file); + h_file = au_hf_top(file); + get_file(h_file); + if (wpre) + wpre->blks = file_inode(h_file)->i_blocks; + if (do_ready) + au_unpin(&pin); + di_read_unlock(dentry, /*flags*/0); + +out_fi: + fi_write_unlock(file); +out: + return h_file; +} + +static void au_write_post(struct inode *inode, struct file *h_file, + struct au_write_pre *wpre, ssize_t written) +{ + struct inode *h_inode; + + au_cpup_attr_timesizes(inode); + AuDebugOn(au_ibtop(inode) != wpre->btop); + h_inode = file_inode(h_file); + inode->i_mode = h_inode->i_mode; + ii_write_unlock(inode); + /* AuDbg("blks %llu, %llu\n", (u64)blks, (u64)h_inode->i_blocks); */ + if (written > 0) + au_fhsm_wrote(inode->i_sb, wpre->btop, + /*force*/h_inode->i_blocks > wpre->blks); + fput(h_file); +} + +static ssize_t aufs_read(struct file *file, char __user *buf, size_t count, + loff_t *ppos) +{ + ssize_t err; + struct inode *inode; + struct file *h_file; + struct super_block *sb; + + inode = file_inode(file); + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/0, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + /* filedata may be obsoleted by concurrent copyup, but no problem */ + err = vfsub_read_u(h_file, buf, count, ppos); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + au_read_post(inode, h_file); + +out: + si_read_unlock(sb); + return err; +} + +/* + * todo: very ugly + * it locks both of i_mutex and si_rwsem for read in safe. + * if the plink maintenance mode continues forever (that is the problem), + * may loop forever. + */ +static void au_mtx_and_read_lock(struct inode *inode) +{ + int err; + struct super_block *sb = inode->i_sb; + + while (1) { + inode_lock(inode); + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (!err) + break; + inode_unlock(inode); + si_read_lock(sb, AuLock_NOPLMW); + si_read_unlock(sb); + } +} + +static ssize_t aufs_write(struct file *file, const char __user *ubuf, + size_t count, loff_t *ppos) +{ + ssize_t err; + struct au_write_pre wpre; + struct inode *inode; + struct file *h_file; + char __user *buf = (char __user *)ubuf; + + inode = file_inode(file); + au_mtx_and_read_lock(inode); + + wpre.lsc = 0; + h_file = au_write_pre(file, /*do_ready*/1, &wpre); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = vfsub_write_u(h_file, buf, count, ppos); + au_write_post(inode, h_file, &wpre, err); + +out: + si_read_unlock(inode->i_sb); + inode_unlock(inode); + return err; +} + +static ssize_t au_do_iter(struct file *h_file, int rw, struct kiocb *kio, + struct iov_iter *iov_iter) +{ + ssize_t err; + struct file *file; + ssize_t (*iter)(struct kiocb *, struct iov_iter *); + + err = security_file_permission(h_file, rw); + if (unlikely(err)) + goto out; + + err = -ENOSYS; + iter = NULL; + if (rw == MAY_READ) + iter = h_file->f_op->read_iter; + else if (rw == MAY_WRITE) + iter = h_file->f_op->write_iter; + + file = kio->ki_filp; + kio->ki_filp = h_file; + if (iter) { + lockdep_off(); + err = iter(kio, iov_iter); + lockdep_on(); + } else + /* currently there is no such fs */ + WARN_ON_ONCE(1); + kio->ki_filp = file; + +out: + return err; +} + +static ssize_t aufs_read_iter(struct kiocb *kio, struct iov_iter *iov_iter) +{ + ssize_t err; + struct file *file, *h_file; + struct inode *inode; + struct super_block *sb; + + file = kio->ki_filp; + inode = file_inode(file); + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/1, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + if (0 && au_test_loopback_kthread()) { + au_warn_loopback(h_file->f_path.dentry->d_sb); + if (file->f_mapping != h_file->f_mapping) { + file->f_mapping = h_file->f_mapping; + smp_mb(); /* unnecessary? */ + } + } + fi_read_unlock(file); + + err = au_do_iter(h_file, MAY_READ, kio, iov_iter); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + au_read_post(inode, h_file); + +out: + si_read_unlock(sb); + return err; +} + +static ssize_t aufs_write_iter(struct kiocb *kio, struct iov_iter *iov_iter) +{ + ssize_t err; + struct au_write_pre wpre; + struct inode *inode; + struct file *file, *h_file; + + file = kio->ki_filp; + inode = file_inode(file); + au_mtx_and_read_lock(inode); + + wpre.lsc = 0; + h_file = au_write_pre(file, /*do_ready*/1, &wpre); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = au_do_iter(h_file, MAY_WRITE, kio, iov_iter); + au_write_post(inode, h_file, &wpre, err); + +out: + si_read_unlock(inode->i_sb); + inode_unlock(inode); + return err; +} + +static ssize_t aufs_splice_read(struct file *file, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + ssize_t err; + struct file *h_file; + struct inode *inode; + struct super_block *sb; + + inode = file_inode(file); + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/0, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = vfsub_splice_to(h_file, ppos, pipe, len, flags); + /* todo: necessasry? */ + /* file->f_ra = h_file->f_ra; */ + au_read_post(inode, h_file); + +out: + si_read_unlock(sb); + return err; +} + +static ssize_t +aufs_splice_write(struct pipe_inode_info *pipe, struct file *file, loff_t *ppos, + size_t len, unsigned int flags) +{ + ssize_t err; + struct au_write_pre wpre; + struct inode *inode; + struct file *h_file; + + inode = file_inode(file); + au_mtx_and_read_lock(inode); + + wpre.lsc = 0; + h_file = au_write_pre(file, /*do_ready*/1, &wpre); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = vfsub_splice_from(pipe, h_file, ppos, len, flags); + au_write_post(inode, h_file, &wpre, err); + +out: + si_read_unlock(inode->i_sb); + inode_unlock(inode); + return err; +} + +static long aufs_fallocate(struct file *file, int mode, loff_t offset, + loff_t len) +{ + long err; + struct au_write_pre wpre; + struct inode *inode; + struct file *h_file; + + inode = file_inode(file); + au_mtx_and_read_lock(inode); + + wpre.lsc = 0; + h_file = au_write_pre(file, /*do_ready*/1, &wpre); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + lockdep_off(); + err = vfs_fallocate(h_file, mode, offset, len); + lockdep_on(); + au_write_post(inode, h_file, &wpre, /*written*/1); + +out: + si_read_unlock(inode->i_sb); + inode_unlock(inode); + return err; +} + +static ssize_t aufs_copy_file_range(struct file *src, loff_t src_pos, + struct file *dst, loff_t dst_pos, + size_t len, unsigned int flags) +{ + ssize_t err; + struct au_write_pre wpre; + enum { SRC, DST }; + struct { + struct inode *inode; + struct file *h_file; + struct super_block *h_sb; + } a[2]; +#define a_src a[SRC] +#define a_dst a[DST] + + err = -EINVAL; + a_src.inode = file_inode(src); + if (unlikely(!S_ISREG(a_src.inode->i_mode))) + goto out; + a_dst.inode = file_inode(dst); + if (unlikely(!S_ISREG(a_dst.inode->i_mode))) + goto out; + + au_mtx_and_read_lock(a_dst.inode); + /* + * in order to match the order in di_write_lock2_{child,parent}(), + * use f_path.dentry for this comparision. + */ + if (src->f_path.dentry < dst->f_path.dentry) { + a_src.h_file = au_read_pre(src, /*keep_fi*/1, AuLsc_FI_1); + err = PTR_ERR(a_src.h_file); + if (IS_ERR(a_src.h_file)) + goto out_si; + + wpre.lsc = AuLsc_FI_2; + a_dst.h_file = au_write_pre(dst, /*do_ready*/1, &wpre); + err = PTR_ERR(a_dst.h_file); + if (IS_ERR(a_dst.h_file)) { + au_read_post(a_src.inode, a_src.h_file); + goto out_si; + } + } else { + wpre.lsc = AuLsc_FI_1; + a_dst.h_file = au_write_pre(dst, /*do_ready*/1, &wpre); + err = PTR_ERR(a_dst.h_file); + if (IS_ERR(a_dst.h_file)) + goto out_si; + + a_src.h_file = au_read_pre(src, /*keep_fi*/1, AuLsc_FI_2); + err = PTR_ERR(a_src.h_file); + if (IS_ERR(a_src.h_file)) { + au_write_post(a_dst.inode, a_dst.h_file, &wpre, + /*written*/0); + goto out_si; + } + } + + err = -EXDEV; + a_src.h_sb = file_inode(a_src.h_file)->i_sb; + a_dst.h_sb = file_inode(a_dst.h_file)->i_sb; + if (unlikely(a_src.h_sb != a_dst.h_sb)) { + AuDbgFile(src); + AuDbgFile(dst); + goto out_file; + } + + err = vfsub_copy_file_range(a_src.h_file, src_pos, a_dst.h_file, + dst_pos, len, flags); + +out_file: + au_write_post(a_dst.inode, a_dst.h_file, &wpre, err); + fi_read_unlock(src); + au_read_post(a_src.inode, a_src.h_file); +out_si: + si_read_unlock(a_dst.inode->i_sb); + inode_unlock(a_dst.inode); +out: + return err; +#undef a_src +#undef a_dst +} + +/* ---------------------------------------------------------------------- */ + +/* + * The locking order around current->mmap_sem. + * - in most and regular cases + * file I/O syscall -- aufs_read() or something + * -- si_rwsem for read -- mmap_sem + * (Note that [fdi]i_rwsem are released before mmap_sem). + * - in mmap case + * mmap(2) -- mmap_sem -- aufs_mmap() -- si_rwsem for read -- [fdi]i_rwsem + * This AB-BA order is definitly bad, but is not a problem since "si_rwsem for + * read" allows muliple processes to acquire it and [fdi]i_rwsem are not held in + * file I/O. Aufs needs to stop lockdep in aufs_mmap() though. + * It means that when aufs acquires si_rwsem for write, the process should never + * acquire mmap_sem. + * + * Actually aufs_iterate() holds [fdi]i_rwsem before mmap_sem, but this is not a + * problem either since any directory is not able to be mmap-ed. + * The similar scenario is applied to aufs_readlink() too. + */ + +#if 0 /* stop calling security_file_mmap() */ +/* cf. linux/include/linux/mman.h: calc_vm_prot_bits() */ +#define AuConv_VM_PROT(f, b) _calc_vm_trans(f, VM_##b, PROT_##b) + +static unsigned long au_arch_prot_conv(unsigned long flags) +{ + /* currently ppc64 only */ +#ifdef CONFIG_PPC64 + /* cf. linux/arch/powerpc/include/asm/mman.h */ + AuDebugOn(arch_calc_vm_prot_bits(-1) != VM_SAO); + return AuConv_VM_PROT(flags, SAO); +#else + AuDebugOn(arch_calc_vm_prot_bits(-1)); + return 0; +#endif +} + +static unsigned long au_prot_conv(unsigned long flags) +{ + return AuConv_VM_PROT(flags, READ) + | AuConv_VM_PROT(flags, WRITE) + | AuConv_VM_PROT(flags, EXEC) + | au_arch_prot_conv(flags); +} + +/* cf. linux/include/linux/mman.h: calc_vm_flag_bits() */ +#define AuConv_VM_MAP(f, b) _calc_vm_trans(f, VM_##b, MAP_##b) + +static unsigned long au_flag_conv(unsigned long flags) +{ + return AuConv_VM_MAP(flags, GROWSDOWN) + | AuConv_VM_MAP(flags, DENYWRITE) + | AuConv_VM_MAP(flags, LOCKED); +} +#endif + +static int aufs_mmap(struct file *file, struct vm_area_struct *vma) +{ + int err; + const unsigned char wlock + = (file->f_mode & FMODE_WRITE) && (vma->vm_flags & VM_SHARED); + struct super_block *sb; + struct file *h_file; + struct inode *inode; + + AuDbgVmRegion(file, vma); + + inode = file_inode(file); + sb = inode->i_sb; + lockdep_off(); + si_read_lock(sb, AuLock_NOPLMW); + + h_file = au_write_pre(file, wlock, /*wpre*/NULL); + lockdep_on(); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + err = 0; + au_set_mmapped(file); + au_vm_file_reset(vma, h_file); + /* + * we cannot call security_mmap_file() here since it may acquire + * mmap_sem or i_mutex. + * + * err = security_mmap_file(h_file, au_prot_conv(vma->vm_flags), + * au_flag_conv(vma->vm_flags)); + */ + if (!err) + err = call_mmap(h_file, vma); + if (!err) { + au_vm_prfile_set(vma, file); + fsstack_copy_attr_atime(inode, file_inode(h_file)); + goto out_fput; /* success */ + } + au_unset_mmapped(file); + au_vm_file_reset(vma, file); + +out_fput: + lockdep_off(); + ii_write_unlock(inode); + lockdep_on(); + fput(h_file); +out: + lockdep_off(); + si_read_unlock(sb); + lockdep_on(); + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_fsync_nondir(struct file *file, loff_t start, loff_t end, + int datasync) +{ + int err; + struct au_write_pre wpre; + struct inode *inode; + struct file *h_file; + + err = 0; /* -EBADF; */ /* posix? */ + if (unlikely(!(file->f_mode & FMODE_WRITE))) + goto out; + + inode = file_inode(file); + au_mtx_and_read_lock(inode); + + wpre.lsc = 0; + h_file = au_write_pre(file, /*do_ready*/1, &wpre); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out_unlock; + + err = vfsub_fsync(h_file, &h_file->f_path, datasync); + au_write_post(inode, h_file, &wpre, /*written*/0); + +out_unlock: + si_read_unlock(inode->i_sb); + inode_unlock(inode); +out: + return err; +} + +static int aufs_fasync(int fd, struct file *file, int flag) +{ + int err; + struct file *h_file; + struct super_block *sb; + + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/0, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + if (h_file->f_op->fasync) + err = h_file->f_op->fasync(fd, h_file, flag); + fput(h_file); /* instead of au_read_post() */ + +out: + si_read_unlock(sb); + return err; +} + +static int aufs_setfl(struct file *file, unsigned long arg) +{ + int err; + struct file *h_file; + struct super_block *sb; + + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/0, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + /* stop calling h_file->fasync */ + arg |= vfsub_file_flags(file) & FASYNC; + err = setfl(/*unused fd*/-1, h_file, arg); + fput(h_file); /* instead of au_read_post() */ + +out: + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* no one supports this operation, currently */ +#if 0 +static ssize_t aufs_sendpage(struct file *file, struct page *page, int offset, + size_t len, loff_t *pos, int more) +{ +} +#endif + +/* ---------------------------------------------------------------------- */ + +const struct file_operations aufs_file_fop = { + .owner = THIS_MODULE, + + .llseek = default_llseek, + + .read = aufs_read, + .write = aufs_write, + .read_iter = aufs_read_iter, + .write_iter = aufs_write_iter, + +#ifdef CONFIG_AUFS_POLL + .poll = aufs_poll, +#endif + .unlocked_ioctl = aufs_ioctl_nondir, +#ifdef CONFIG_COMPAT + .compat_ioctl = aufs_compat_ioctl_nondir, +#endif + .mmap = aufs_mmap, + .open = aufs_open_nondir, + .flush = aufs_flush_nondir, + .release = aufs_release_nondir, + .fsync = aufs_fsync_nondir, + .fasync = aufs_fasync, + /* .sendpage = aufs_sendpage, */ + .setfl = aufs_setfl, + .splice_write = aufs_splice_write, + .splice_read = aufs_splice_read, +#if 0 + .aio_splice_write = aufs_aio_splice_write, + .aio_splice_read = aufs_aio_splice_read, +#endif + .fallocate = aufs_fallocate, + .copy_file_range = aufs_copy_file_range +}; --- linux-aws-4.15.0.orig/fs/aufs/fhsm.c +++ linux-aws-4.15.0/fs/aufs/fhsm.c @@ -0,0 +1,426 @@ +/* + * Copyright (C) 2011-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * File-based Hierarchy Storage Management + */ + +#include +#include +#include +#include +#include "aufs.h" + +static aufs_bindex_t au_fhsm_bottom(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + AuDebugOn(!fhsm); + return fhsm->fhsm_bottom; +} + +void au_fhsm_set_bottom(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + AuDebugOn(!fhsm); + fhsm->fhsm_bottom = bindex; +} + +/* ---------------------------------------------------------------------- */ + +static int au_fhsm_test_jiffy(struct au_sbinfo *sbinfo, struct au_branch *br) +{ + struct au_br_fhsm *bf; + + bf = br->br_fhsm; + MtxMustLock(&bf->bf_lock); + + return !bf->bf_readable + || time_after(jiffies, + bf->bf_jiffy + sbinfo->si_fhsm.fhsm_expire); +} + +/* ---------------------------------------------------------------------- */ + +static void au_fhsm_notify(struct super_block *sb, int val) +{ + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + if (au_fhsm_pid(fhsm) + && atomic_read(&fhsm->fhsm_readable) != -1) { + atomic_set(&fhsm->fhsm_readable, val); + if (val) + wake_up(&fhsm->fhsm_wqh); + } +} + +static int au_fhsm_stfs(struct super_block *sb, aufs_bindex_t bindex, + struct aufs_stfs *rstfs, int do_lock, int do_notify) +{ + int err; + struct au_branch *br; + struct au_br_fhsm *bf; + + br = au_sbr(sb, bindex); + AuDebugOn(au_br_rdonly(br)); + bf = br->br_fhsm; + AuDebugOn(!bf); + + if (do_lock) + mutex_lock(&bf->bf_lock); + else + MtxMustLock(&bf->bf_lock); + + /* sb->s_root for NFS is unreliable */ + err = au_br_stfs(br, &bf->bf_stfs); + if (unlikely(err)) { + AuErr1("FHSM failed (%d), b%d, ignored.\n", bindex, err); + goto out; + } + + bf->bf_jiffy = jiffies; + bf->bf_readable = 1; + if (do_notify) + au_fhsm_notify(sb, /*val*/1); + if (rstfs) + *rstfs = bf->bf_stfs; + +out: + if (do_lock) + mutex_unlock(&bf->bf_lock); + au_fhsm_notify(sb, /*val*/1); + + return err; +} + +void au_fhsm_wrote(struct super_block *sb, aufs_bindex_t bindex, int force) +{ + int err; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + struct au_branch *br; + struct au_br_fhsm *bf; + + AuDbg("b%d, force %d\n", bindex, force); + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + if (!au_ftest_si(sbinfo, FHSM) + || fhsm->fhsm_bottom == bindex) + return; + + br = au_sbr(sb, bindex); + bf = br->br_fhsm; + AuDebugOn(!bf); + mutex_lock(&bf->bf_lock); + if (force + || au_fhsm_pid(fhsm) + || au_fhsm_test_jiffy(sbinfo, br)) + err = au_fhsm_stfs(sb, bindex, /*rstfs*/NULL, /*do_lock*/0, + /*do_notify*/1); + mutex_unlock(&bf->bf_lock); +} + +void au_fhsm_wrote_all(struct super_block *sb, int force) +{ + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + /* exclude the bottom */ + bbot = au_fhsm_bottom(sb); + for (bindex = 0; bindex < bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_fhsm(br->br_perm)) + au_fhsm_wrote(sb, bindex, force); + } +} + +/* ---------------------------------------------------------------------- */ + +static unsigned int au_fhsm_poll(struct file *file, + struct poll_table_struct *wait) +{ + unsigned int mask; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + mask = 0; + sbinfo = file->private_data; + fhsm = &sbinfo->si_fhsm; + poll_wait(file, &fhsm->fhsm_wqh, wait); + if (atomic_read(&fhsm->fhsm_readable)) + mask = POLLIN /* | POLLRDNORM */; + + AuTraceErr((int)mask); + return mask; +} + +static int au_fhsm_do_read_one(struct aufs_stbr __user *stbr, + struct aufs_stfs *stfs, __s16 brid) +{ + int err; + + err = copy_to_user(&stbr->stfs, stfs, sizeof(*stfs)); + if (!err) + err = __put_user(brid, &stbr->brid); + if (unlikely(err)) + err = -EFAULT; + + return err; +} + +static ssize_t au_fhsm_do_read(struct super_block *sb, + struct aufs_stbr __user *stbr, size_t count) +{ + ssize_t err; + int nstbr; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + struct au_br_fhsm *bf; + + /* except the bottom branch */ + err = 0; + nstbr = 0; + bbot = au_fhsm_bottom(sb); + for (bindex = 0; !err && bindex < bbot; bindex++) { + br = au_sbr(sb, bindex); + if (!au_br_fhsm(br->br_perm)) + continue; + + bf = br->br_fhsm; + mutex_lock(&bf->bf_lock); + if (bf->bf_readable) { + err = -EFAULT; + if (count >= sizeof(*stbr)) + err = au_fhsm_do_read_one(stbr++, &bf->bf_stfs, + br->br_id); + if (!err) { + bf->bf_readable = 0; + count -= sizeof(*stbr); + nstbr++; + } + } + mutex_unlock(&bf->bf_lock); + } + if (!err) + err = sizeof(*stbr) * nstbr; + + return err; +} + +static ssize_t au_fhsm_read(struct file *file, char __user *buf, size_t count, + loff_t *pos) +{ + ssize_t err; + int readable; + aufs_bindex_t nfhsm, bindex, bbot; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + struct au_branch *br; + struct super_block *sb; + + err = 0; + sbinfo = file->private_data; + fhsm = &sbinfo->si_fhsm; +need_data: + spin_lock_irq(&fhsm->fhsm_wqh.lock); + if (!atomic_read(&fhsm->fhsm_readable)) { + if (vfsub_file_flags(file) & O_NONBLOCK) + err = -EAGAIN; + else + err = wait_event_interruptible_locked_irq + (fhsm->fhsm_wqh, + atomic_read(&fhsm->fhsm_readable)); + } + spin_unlock_irq(&fhsm->fhsm_wqh.lock); + if (unlikely(err)) + goto out; + + /* sb may already be dead */ + au_rw_read_lock(&sbinfo->si_rwsem); + readable = atomic_read(&fhsm->fhsm_readable); + if (readable > 0) { + sb = sbinfo->si_sb; + AuDebugOn(!sb); + /* exclude the bottom branch */ + nfhsm = 0; + bbot = au_fhsm_bottom(sb); + for (bindex = 0; bindex < bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_fhsm(br->br_perm)) + nfhsm++; + } + err = -EMSGSIZE; + if (nfhsm * sizeof(struct aufs_stbr) <= count) { + atomic_set(&fhsm->fhsm_readable, 0); + err = au_fhsm_do_read(sbinfo->si_sb, (void __user *)buf, + count); + } + } + au_rw_read_unlock(&sbinfo->si_rwsem); + if (!readable) + goto need_data; + +out: + return err; +} + +static int au_fhsm_release(struct inode *inode, struct file *file) +{ + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + /* sb may already be dead */ + sbinfo = file->private_data; + fhsm = &sbinfo->si_fhsm; + spin_lock(&fhsm->fhsm_spin); + fhsm->fhsm_pid = 0; + spin_unlock(&fhsm->fhsm_spin); + kobject_put(&sbinfo->si_kobj); + + return 0; +} + +static const struct file_operations au_fhsm_fops = { + .owner = THIS_MODULE, + .llseek = noop_llseek, + .read = au_fhsm_read, + .poll = au_fhsm_poll, + .release = au_fhsm_release +}; + +int au_fhsm_fd(struct super_block *sb, int oflags) +{ + int err, fd; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + + err = -EPERM; + if (unlikely(!capable(CAP_SYS_ADMIN))) + goto out; + + err = -EINVAL; + if (unlikely(oflags & ~(O_CLOEXEC | O_NONBLOCK))) + goto out; + + err = 0; + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + spin_lock(&fhsm->fhsm_spin); + if (!fhsm->fhsm_pid) + fhsm->fhsm_pid = current->pid; + else + err = -EBUSY; + spin_unlock(&fhsm->fhsm_spin); + if (unlikely(err)) + goto out; + + oflags |= O_RDONLY; + /* oflags |= FMODE_NONOTIFY; */ + fd = anon_inode_getfd("[aufs_fhsm]", &au_fhsm_fops, sbinfo, oflags); + err = fd; + if (unlikely(fd < 0)) + goto out_pid; + + /* succeed reglardless 'fhsm' status */ + kobject_get(&sbinfo->si_kobj); + si_noflush_read_lock(sb); + if (au_ftest_si(sbinfo, FHSM)) + au_fhsm_wrote_all(sb, /*force*/0); + si_read_unlock(sb); + goto out; /* success */ + +out_pid: + spin_lock(&fhsm->fhsm_spin); + fhsm->fhsm_pid = 0; + spin_unlock(&fhsm->fhsm_spin); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_fhsm_br_alloc(struct au_branch *br) +{ + int err; + + err = 0; + br->br_fhsm = kmalloc(sizeof(*br->br_fhsm), GFP_NOFS); + if (br->br_fhsm) + au_br_fhsm_init(br->br_fhsm); + else + err = -ENOMEM; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_fhsm_fin(struct super_block *sb) +{ + au_fhsm_notify(sb, /*val*/-1); +} + +void au_fhsm_init(struct au_sbinfo *sbinfo) +{ + struct au_fhsm *fhsm; + + fhsm = &sbinfo->si_fhsm; + spin_lock_init(&fhsm->fhsm_spin); + init_waitqueue_head(&fhsm->fhsm_wqh); + atomic_set(&fhsm->fhsm_readable, 0); + fhsm->fhsm_expire + = msecs_to_jiffies(AUFS_FHSM_CACHE_DEF_SEC * MSEC_PER_SEC); + fhsm->fhsm_bottom = -1; +} + +void au_fhsm_set(struct au_sbinfo *sbinfo, unsigned int sec) +{ + sbinfo->si_fhsm.fhsm_expire + = msecs_to_jiffies(sec * MSEC_PER_SEC); +} + +void au_fhsm_show(struct seq_file *seq, struct au_sbinfo *sbinfo) +{ + unsigned int u; + + if (!au_ftest_si(sbinfo, FHSM)) + return; + + u = jiffies_to_msecs(sbinfo->si_fhsm.fhsm_expire) / MSEC_PER_SEC; + if (u != AUFS_FHSM_CACHE_DEF_SEC) + seq_printf(seq, ",fhsm_sec=%u", u); +} --- linux-aws-4.15.0.orig/fs/aufs/file.c +++ linux-aws-4.15.0/fs/aufs/file.c @@ -0,0 +1,856 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * handling file/dir, and address_space operation + */ + +#ifdef CONFIG_AUFS_DEBUG +#include +#endif +#include +#include "aufs.h" + +/* drop flags for writing */ +unsigned int au_file_roflags(unsigned int flags) +{ + flags &= ~(O_WRONLY | O_RDWR | O_APPEND | O_CREAT | O_TRUNC); + flags |= O_RDONLY | O_NOATIME; + return flags; +} + +/* common functions to regular file and dir */ +struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, + struct file *file, int force_wr) +{ + struct file *h_file; + struct dentry *h_dentry; + struct inode *h_inode; + struct super_block *sb; + struct au_branch *br; + struct path h_path; + int err; + + /* a race condition can happen between open and unlink/rmdir */ + h_file = ERR_PTR(-ENOENT); + h_dentry = au_h_dptr(dentry, bindex); + if (au_test_nfsd() && (!h_dentry || d_is_negative(h_dentry))) + goto out; + h_inode = d_inode(h_dentry); + spin_lock(&h_dentry->d_lock); + err = (!d_unhashed(dentry) && d_unlinked(h_dentry)) + /* || !d_inode(dentry)->i_nlink */ + ; + spin_unlock(&h_dentry->d_lock); + if (unlikely(err)) + goto out; + + sb = dentry->d_sb; + br = au_sbr(sb, bindex); + err = au_br_test_oflag(flags, br); + h_file = ERR_PTR(err); + if (unlikely(err)) + goto out; + + /* drop flags for writing */ + if (au_test_ro(sb, bindex, d_inode(dentry))) { + if (force_wr && !(flags & O_WRONLY)) + force_wr = 0; + flags = au_file_roflags(flags); + if (force_wr) { + h_file = ERR_PTR(-EROFS); + flags = au_file_roflags(flags); + if (unlikely(vfsub_native_ro(h_inode) + || IS_APPEND(h_inode))) + goto out; + flags &= ~O_ACCMODE; + flags |= O_WRONLY; + } + } + flags &= ~O_CREAT; + au_br_get(br); + h_path.dentry = h_dentry; + h_path.mnt = au_br_mnt(br); + h_file = vfsub_dentry_open(&h_path, flags); + if (IS_ERR(h_file)) + goto out_br; + + if (flags & __FMODE_EXEC) { + err = deny_write_access(h_file); + if (unlikely(err)) { + fput(h_file); + h_file = ERR_PTR(err); + goto out_br; + } + } + fsnotify_open(h_file); + goto out; /* success */ + +out_br: + au_br_put(br); +out: + return h_file; +} + +static int au_cmoo(struct dentry *dentry) +{ + int err, cmoo, matched; + unsigned int udba; + struct path h_path; + struct au_pin pin; + struct au_cp_generic cpg = { + .dentry = dentry, + .bdst = -1, + .bsrc = -1, + .len = -1, + .pin = &pin, + .flags = AuCpup_DTIME | AuCpup_HOPEN + }; + struct inode *delegated; + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct au_fhsm *fhsm; + pid_t pid; + struct au_branch *br; + struct dentry *parent; + struct au_hinode *hdir; + + DiMustWriteLock(dentry); + IiMustWriteLock(d_inode(dentry)); + + err = 0; + if (IS_ROOT(dentry)) + goto out; + cpg.bsrc = au_dbtop(dentry); + if (!cpg.bsrc) + goto out; + + sb = dentry->d_sb; + sbinfo = au_sbi(sb); + fhsm = &sbinfo->si_fhsm; + pid = au_fhsm_pid(fhsm); + rcu_read_lock(); + matched = (pid + && (current->pid == pid + || rcu_dereference(current->real_parent)->pid == pid)); + rcu_read_unlock(); + if (matched) + goto out; + + br = au_sbr(sb, cpg.bsrc); + cmoo = au_br_cmoo(br->br_perm); + if (!cmoo) + goto out; + if (!d_is_reg(dentry)) + cmoo &= AuBrAttr_COO_ALL; + if (!cmoo) + goto out; + + parent = dget_parent(dentry); + di_write_lock_parent(parent); + err = au_wbr_do_copyup_bu(dentry, cpg.bsrc - 1); + cpg.bdst = err; + if (unlikely(err < 0)) { + err = 0; /* there is no upper writable branch */ + goto out_dgrade; + } + AuDbg("bsrc %d, bdst %d\n", cpg.bsrc, cpg.bdst); + + /* do not respect the coo attrib for the target branch */ + err = au_cpup_dirs(dentry, cpg.bdst); + if (unlikely(err)) + goto out_dgrade; + + di_downgrade_lock(parent, AuLock_IR); + udba = au_opt_udba(sb); + err = au_pin(&pin, dentry, cpg.bdst, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_parent; + + err = au_sio_cpup_simple(&cpg); + au_unpin(&pin); + if (unlikely(err)) + goto out_parent; + if (!(cmoo & AuBrWAttr_MOO)) + goto out_parent; /* success */ + + err = au_pin(&pin, dentry, cpg.bsrc, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_parent; + + h_path.mnt = au_br_mnt(br); + h_path.dentry = au_h_dptr(dentry, cpg.bsrc); + hdir = au_hi(d_inode(parent), cpg.bsrc); + delegated = NULL; + err = vfsub_unlink(hdir->hi_inode, &h_path, &delegated, /*force*/1); + au_unpin(&pin); + /* todo: keep h_dentry or not? */ + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + if (unlikely(err)) { + pr_err("unlink %pd after coo failed (%d), ignored\n", + dentry, err); + err = 0; + } + goto out_parent; /* success */ + +out_dgrade: + di_downgrade_lock(parent, AuLock_IR); +out_parent: + di_read_unlock(parent, AuLock_IR); + dput(parent); +out: + AuTraceErr(err); + return err; +} + +int au_do_open(struct file *file, struct au_do_open_args *args) +{ + int err, aopen = args->aopen; + struct dentry *dentry; + struct au_finfo *finfo; + + if (!aopen) + err = au_finfo_init(file, args->fidir); + else { + lockdep_off(); + err = au_finfo_init(file, args->fidir); + lockdep_on(); + } + if (unlikely(err)) + goto out; + + dentry = file->f_path.dentry; + AuDebugOn(IS_ERR_OR_NULL(dentry)); + di_write_lock_child(dentry); + err = au_cmoo(dentry); + di_downgrade_lock(dentry, AuLock_IR); + if (!err) { + if (!aopen) + err = args->open(file, vfsub_file_flags(file), NULL); + else { + lockdep_off(); + err = args->open(file, vfsub_file_flags(file), NULL); + lockdep_on(); + } + } + di_read_unlock(dentry, AuLock_IR); + + finfo = au_fi(file); + if (!err) { + finfo->fi_file = file; + au_hbl_add(&finfo->fi_hlist, + &au_sbi(file->f_path.dentry->d_sb)->si_files); + } + if (!aopen) + fi_write_unlock(file); + else { + lockdep_off(); + fi_write_unlock(file); + lockdep_on(); + } + if (unlikely(err)) { + finfo->fi_hdir = NULL; + au_finfo_fin(file); + } + +out: + AuTraceErr(err); + return err; +} + +int au_reopen_nondir(struct file *file) +{ + int err; + aufs_bindex_t btop; + struct dentry *dentry; + struct file *h_file, *h_file_tmp; + + dentry = file->f_path.dentry; + btop = au_dbtop(dentry); + h_file_tmp = NULL; + if (au_fbtop(file) == btop) { + h_file = au_hf_top(file); + if (file->f_mode == h_file->f_mode) + return 0; /* success */ + h_file_tmp = h_file; + get_file(h_file_tmp); + au_set_h_fptr(file, btop, NULL); + } + AuDebugOn(au_fi(file)->fi_hdir); + /* + * it can happen + * file exists on both of rw and ro + * open --> dbtop and fbtop are both 0 + * prepend a branch as rw, "rw" become ro + * remove rw/file + * delete the top branch, "rw" becomes rw again + * --> dbtop is 1, fbtop is still 0 + * write --> fbtop is 0 but dbtop is 1 + */ + /* AuDebugOn(au_fbtop(file) < btop); */ + + h_file = au_h_open(dentry, btop, vfsub_file_flags(file) & ~O_TRUNC, + file, /*force_wr*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) { + if (h_file_tmp) { + au_sbr_get(dentry->d_sb, btop); + au_set_h_fptr(file, btop, h_file_tmp); + h_file_tmp = NULL; + } + goto out; /* todo: close all? */ + } + + err = 0; + au_set_fbtop(file, btop); + au_set_h_fptr(file, btop, h_file); + au_update_figen(file); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + +out: + if (h_file_tmp) + fput(h_file_tmp); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_reopen_wh(struct file *file, aufs_bindex_t btgt, + struct dentry *hi_wh) +{ + int err; + aufs_bindex_t btop; + struct au_dinfo *dinfo; + struct dentry *h_dentry; + struct au_hdentry *hdp; + + dinfo = au_di(file->f_path.dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + btop = dinfo->di_btop; + dinfo->di_btop = btgt; + hdp = au_hdentry(dinfo, btgt); + h_dentry = hdp->hd_dentry; + hdp->hd_dentry = hi_wh; + err = au_reopen_nondir(file); + hdp->hd_dentry = h_dentry; + dinfo->di_btop = btop; + + return err; +} + +static int au_ready_to_write_wh(struct file *file, loff_t len, + aufs_bindex_t bcpup, struct au_pin *pin) +{ + int err; + struct inode *inode, *h_inode; + struct dentry *h_dentry, *hi_wh; + struct au_cp_generic cpg = { + .dentry = file->f_path.dentry, + .bdst = bcpup, + .bsrc = -1, + .len = len, + .pin = pin + }; + + au_update_dbtop(cpg.dentry); + inode = d_inode(cpg.dentry); + h_inode = NULL; + if (au_dbtop(cpg.dentry) <= bcpup + && au_dbbot(cpg.dentry) >= bcpup) { + h_dentry = au_h_dptr(cpg.dentry, bcpup); + if (h_dentry && d_is_positive(h_dentry)) + h_inode = d_inode(h_dentry); + } + hi_wh = au_hi_wh(inode, bcpup); + if (!hi_wh && !h_inode) + err = au_sio_cpup_wh(&cpg, file); + else + /* already copied-up after unlink */ + err = au_reopen_wh(file, bcpup, hi_wh); + + if (!err + && (inode->i_nlink > 1 + || (inode->i_state & I_LINKABLE)) + && au_opt_test(au_mntflags(cpg.dentry->d_sb), PLINK)) + au_plink_append(inode, bcpup, au_h_dptr(cpg.dentry, bcpup)); + + return err; +} + +/* + * prepare the @file for writing. + */ +int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin) +{ + int err; + aufs_bindex_t dbtop; + struct dentry *parent; + struct inode *inode; + struct super_block *sb; + struct file *h_file; + struct au_cp_generic cpg = { + .dentry = file->f_path.dentry, + .bdst = -1, + .bsrc = -1, + .len = len, + .pin = pin, + .flags = AuCpup_DTIME + }; + + sb = cpg.dentry->d_sb; + inode = d_inode(cpg.dentry); + cpg.bsrc = au_fbtop(file); + err = au_test_ro(sb, cpg.bsrc, inode); + if (!err && (au_hf_top(file)->f_mode & FMODE_WRITE)) { + err = au_pin(pin, cpg.dentry, cpg.bsrc, AuOpt_UDBA_NONE, + /*flags*/0); + goto out; + } + + /* need to cpup or reopen */ + parent = dget_parent(cpg.dentry); + di_write_lock_parent(parent); + err = AuWbrCopyup(au_sbi(sb), cpg.dentry); + cpg.bdst = err; + if (unlikely(err < 0)) + goto out_dgrade; + err = 0; + + if (!d_unhashed(cpg.dentry) && !au_h_dptr(parent, cpg.bdst)) { + err = au_cpup_dirs(cpg.dentry, cpg.bdst); + if (unlikely(err)) + goto out_dgrade; + } + + err = au_pin(pin, cpg.dentry, cpg.bdst, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_dgrade; + + dbtop = au_dbtop(cpg.dentry); + if (dbtop <= cpg.bdst) + cpg.bsrc = cpg.bdst; + + if (dbtop <= cpg.bdst /* just reopen */ + || !d_unhashed(cpg.dentry) /* copyup and reopen */ + ) { + h_file = au_h_open_pre(cpg.dentry, cpg.bsrc, /*force_wr*/0); + if (IS_ERR(h_file)) + err = PTR_ERR(h_file); + else { + di_downgrade_lock(parent, AuLock_IR); + if (dbtop > cpg.bdst) + err = au_sio_cpup_simple(&cpg); + if (!err) + err = au_reopen_nondir(file); + au_h_open_post(cpg.dentry, cpg.bsrc, h_file); + } + } else { /* copyup as wh and reopen */ + /* + * since writable hfsplus branch is not supported, + * h_open_pre/post() are unnecessary. + */ + err = au_ready_to_write_wh(file, len, cpg.bdst, pin); + di_downgrade_lock(parent, AuLock_IR); + } + + if (!err) { + au_pin_set_parent_lflag(pin, /*lflag*/0); + goto out_dput; /* success */ + } + au_unpin(pin); + goto out_unlock; + +out_dgrade: + di_downgrade_lock(parent, AuLock_IR); +out_unlock: + di_read_unlock(parent, AuLock_IR); +out_dput: + dput(parent); +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_do_flush(struct file *file, fl_owner_t id, + int (*flush)(struct file *file, fl_owner_t id)) +{ + int err; + struct super_block *sb; + struct inode *inode; + + inode = file_inode(file); + sb = inode->i_sb; + si_noflush_read_lock(sb); + fi_read_lock(file); + ii_read_lock_child(inode); + + err = flush(file, id); + au_cpup_attr_timesizes(inode); + + ii_read_unlock(inode); + fi_read_unlock(file); + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_file_refresh_by_inode(struct file *file, int *need_reopen) +{ + int err; + struct au_pin pin; + struct au_finfo *finfo; + struct dentry *parent, *hi_wh; + struct inode *inode; + struct super_block *sb; + struct au_cp_generic cpg = { + .dentry = file->f_path.dentry, + .bdst = -1, + .bsrc = -1, + .len = -1, + .pin = &pin, + .flags = AuCpup_DTIME + }; + + FiMustWriteLock(file); + + err = 0; + finfo = au_fi(file); + sb = cpg.dentry->d_sb; + inode = d_inode(cpg.dentry); + cpg.bdst = au_ibtop(inode); + if (cpg.bdst == finfo->fi_btop || IS_ROOT(cpg.dentry)) + goto out; + + parent = dget_parent(cpg.dentry); + if (au_test_ro(sb, cpg.bdst, inode)) { + di_read_lock_parent(parent, !AuLock_IR); + err = AuWbrCopyup(au_sbi(sb), cpg.dentry); + cpg.bdst = err; + di_read_unlock(parent, !AuLock_IR); + if (unlikely(err < 0)) + goto out_parent; + err = 0; + } + + di_read_lock_parent(parent, AuLock_IR); + hi_wh = au_hi_wh(inode, cpg.bdst); + if (!S_ISDIR(inode->i_mode) + && au_opt_test(au_mntflags(sb), PLINK) + && au_plink_test(inode) + && !d_unhashed(cpg.dentry) + && cpg.bdst < au_dbtop(cpg.dentry)) { + err = au_test_and_cpup_dirs(cpg.dentry, cpg.bdst); + if (unlikely(err)) + goto out_unlock; + + /* always superio. */ + err = au_pin(&pin, cpg.dentry, cpg.bdst, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (!err) { + err = au_sio_cpup_simple(&cpg); + au_unpin(&pin); + } + } else if (hi_wh) { + /* already copied-up after unlink */ + err = au_reopen_wh(file, cpg.bdst, hi_wh); + *need_reopen = 0; + } + +out_unlock: + di_read_unlock(parent, AuLock_IR); +out_parent: + dput(parent); +out: + return err; +} + +static void au_do_refresh_dir(struct file *file) +{ + aufs_bindex_t bindex, bbot, new_bindex, brid; + struct au_hfile *p, tmp, *q; + struct au_finfo *finfo; + struct super_block *sb; + struct au_fidir *fidir; + + FiMustWriteLock(file); + + sb = file->f_path.dentry->d_sb; + finfo = au_fi(file); + fidir = finfo->fi_hdir; + AuDebugOn(!fidir); + p = fidir->fd_hfile + finfo->fi_btop; + brid = p->hf_br->br_id; + bbot = fidir->fd_bbot; + for (bindex = finfo->fi_btop; bindex <= bbot; bindex++, p++) { + if (!p->hf_file) + continue; + + new_bindex = au_br_index(sb, p->hf_br->br_id); + if (new_bindex == bindex) + continue; + if (new_bindex < 0) { + au_set_h_fptr(file, bindex, NULL); + continue; + } + + /* swap two lower inode, and loop again */ + q = fidir->fd_hfile + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hf_file) { + bindex--; + p--; + } + } + + p = fidir->fd_hfile; + if (!au_test_mmapped(file) && !d_unlinked(file->f_path.dentry)) { + bbot = au_sbbot(sb); + for (finfo->fi_btop = 0; finfo->fi_btop <= bbot; + finfo->fi_btop++, p++) + if (p->hf_file) { + if (file_inode(p->hf_file)) + break; + au_hfput(p, /*execed*/0); + } + } else { + bbot = au_br_index(sb, brid); + for (finfo->fi_btop = 0; finfo->fi_btop < bbot; + finfo->fi_btop++, p++) + if (p->hf_file) + au_hfput(p, /*execed*/0); + bbot = au_sbbot(sb); + } + + p = fidir->fd_hfile + bbot; + for (fidir->fd_bbot = bbot; fidir->fd_bbot >= finfo->fi_btop; + fidir->fd_bbot--, p--) + if (p->hf_file) { + if (file_inode(p->hf_file)) + break; + au_hfput(p, /*execed*/0); + } + AuDebugOn(fidir->fd_bbot < finfo->fi_btop); +} + +/* + * after branch manipulating, refresh the file. + */ +static int refresh_file(struct file *file, int (*reopen)(struct file *file)) +{ + int err, need_reopen, nbr; + aufs_bindex_t bbot, bindex; + struct dentry *dentry; + struct super_block *sb; + struct au_finfo *finfo; + struct au_hfile *hfile; + + dentry = file->f_path.dentry; + sb = dentry->d_sb; + nbr = au_sbbot(sb) + 1; + finfo = au_fi(file); + if (!finfo->fi_hdir) { + hfile = &finfo->fi_htop; + AuDebugOn(!hfile->hf_file); + bindex = au_br_index(sb, hfile->hf_br->br_id); + AuDebugOn(bindex < 0); + if (bindex != finfo->fi_btop) + au_set_fbtop(file, bindex); + } else { + err = au_fidir_realloc(finfo, nbr, /*may_shrink*/0); + if (unlikely(err)) + goto out; + au_do_refresh_dir(file); + } + + err = 0; + need_reopen = 1; + if (!au_test_mmapped(file)) + err = au_file_refresh_by_inode(file, &need_reopen); + if (finfo->fi_hdir) + /* harmless if err */ + au_fidir_realloc(finfo, nbr, /*may_shrink*/1); + if (!err && need_reopen && !d_unlinked(dentry)) + err = reopen(file); + if (!err) { + au_update_figen(file); + goto out; /* success */ + } + + /* error, close all lower files */ + if (finfo->fi_hdir) { + bbot = au_fbbot_dir(file); + for (bindex = au_fbtop(file); bindex <= bbot; bindex++) + au_set_h_fptr(file, bindex, NULL); + } + +out: + return err; +} + +/* common function to regular file and dir */ +int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), + int wlock, unsigned int fi_lsc) +{ + int err; + unsigned int sigen, figen; + aufs_bindex_t btop; + unsigned char pseudo_link; + struct dentry *dentry; + struct inode *inode; + + err = 0; + dentry = file->f_path.dentry; + inode = d_inode(dentry); + sigen = au_sigen(dentry->d_sb); + fi_write_lock_nested(file, fi_lsc); + figen = au_figen(file); + if (!fi_lsc) + di_write_lock_child(dentry); + else + di_write_lock_child2(dentry); + btop = au_dbtop(dentry); + pseudo_link = (btop != au_ibtop(inode)); + if (sigen == figen && !pseudo_link && au_fbtop(file) == btop) { + if (!wlock) { + di_downgrade_lock(dentry, AuLock_IR); + fi_downgrade_lock(file); + } + goto out; /* success */ + } + + AuDbg("sigen %d, figen %d\n", sigen, figen); + if (au_digen_test(dentry, sigen)) { + err = au_reval_dpath(dentry, sigen); + AuDebugOn(!err && au_digen_test(dentry, sigen)); + } + + if (!err) + err = refresh_file(file, reopen); + if (!err) { + if (!wlock) { + di_downgrade_lock(dentry, AuLock_IR); + fi_downgrade_lock(file); + } + } else { + di_write_unlock(dentry); + fi_write_unlock(file); + } + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* cf. aufs_nopage() */ +/* for madvise(2) */ +static int aufs_readpage(struct file *file __maybe_unused, struct page *page) +{ + unlock_page(page); + return 0; +} + +/* it will never be called, but necessary to support O_DIRECT */ +static ssize_t aufs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) +{ BUG(); return 0; } + +/* they will never be called. */ +#ifdef CONFIG_AUFS_DEBUG +static int aufs_write_begin(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned flags, + struct page **pagep, void **fsdata) +{ AuUnsupport(); return 0; } +static int aufs_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ AuUnsupport(); return 0; } +static int aufs_writepage(struct page *page, struct writeback_control *wbc) +{ AuUnsupport(); return 0; } + +static int aufs_set_page_dirty(struct page *page) +{ AuUnsupport(); return 0; } +static void aufs_invalidatepage(struct page *page, unsigned int offset, + unsigned int length) +{ AuUnsupport(); } +static int aufs_releasepage(struct page *page, gfp_t gfp) +{ AuUnsupport(); return 0; } +#if 0 /* called by memory compaction regardless file */ +static int aufs_migratepage(struct address_space *mapping, struct page *newpage, + struct page *page, enum migrate_mode mode) +{ AuUnsupport(); return 0; } +#endif +static bool aufs_isolate_page(struct page *page, isolate_mode_t mode) +{ AuUnsupport(); return true; } +static void aufs_putback_page(struct page *page) +{ AuUnsupport(); } +static int aufs_launder_page(struct page *page) +{ AuUnsupport(); return 0; } +static int aufs_is_partially_uptodate(struct page *page, + unsigned long from, + unsigned long count) +{ AuUnsupport(); return 0; } +static void aufs_is_dirty_writeback(struct page *page, bool *dirty, + bool *writeback) +{ AuUnsupport(); } +static int aufs_error_remove_page(struct address_space *mapping, + struct page *page) +{ AuUnsupport(); return 0; } +static int aufs_swap_activate(struct swap_info_struct *sis, struct file *file, + sector_t *span) +{ AuUnsupport(); return 0; } +static void aufs_swap_deactivate(struct file *file) +{ AuUnsupport(); } +#endif /* CONFIG_AUFS_DEBUG */ + +const struct address_space_operations aufs_aop = { + .readpage = aufs_readpage, + .direct_IO = aufs_direct_IO, +#ifdef CONFIG_AUFS_DEBUG + .writepage = aufs_writepage, + /* no writepages, because of writepage */ + .set_page_dirty = aufs_set_page_dirty, + /* no readpages, because of readpage */ + .write_begin = aufs_write_begin, + .write_end = aufs_write_end, + /* no bmap, no block device */ + .invalidatepage = aufs_invalidatepage, + .releasepage = aufs_releasepage, + /* is fallback_migrate_page ok? */ + /* .migratepage = aufs_migratepage, */ + .isolate_page = aufs_isolate_page, + .putback_page = aufs_putback_page, + .launder_page = aufs_launder_page, + .is_partially_uptodate = aufs_is_partially_uptodate, + .is_dirty_writeback = aufs_is_dirty_writeback, + .error_remove_page = aufs_error_remove_page, + .swap_activate = aufs_swap_activate, + .swap_deactivate = aufs_swap_deactivate +#endif /* CONFIG_AUFS_DEBUG */ +}; --- linux-aws-4.15.0.orig/fs/aufs/file.h +++ linux-aws-4.15.0/fs/aufs/file.h @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * file operations + */ + +#ifndef __AUFS_FILE_H__ +#define __AUFS_FILE_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include +#include "rwsem.h" + +struct au_branch; +struct au_hfile { + struct file *hf_file; + struct au_branch *hf_br; +}; + +struct au_vdir; +struct au_fidir { + aufs_bindex_t fd_bbot; + aufs_bindex_t fd_nent; + struct au_vdir *fd_vdir_cache; + struct au_hfile fd_hfile[]; +}; + +static inline int au_fidir_sz(int nent) +{ + AuDebugOn(nent < 0); + return sizeof(struct au_fidir) + sizeof(struct au_hfile) * nent; +} + +struct au_finfo { + atomic_t fi_generation; + + struct au_rwsem fi_rwsem; + aufs_bindex_t fi_btop; + + /* do not union them */ + struct { /* for non-dir */ + struct au_hfile fi_htop; + atomic_t fi_mmapped; + }; + struct au_fidir *fi_hdir; /* for dir only */ + + struct hlist_bl_node fi_hlist; + struct file *fi_file; /* very ugly */ +} ____cacheline_aligned_in_smp; + +/* ---------------------------------------------------------------------- */ + +/* file.c */ +extern const struct address_space_operations aufs_aop; +unsigned int au_file_roflags(unsigned int flags); +struct file *au_h_open(struct dentry *dentry, aufs_bindex_t bindex, int flags, + struct file *file, int force_wr); +struct au_do_open_args { + int aopen; + int (*open)(struct file *file, int flags, + struct file *h_file); + struct au_fidir *fidir; + struct file *h_file; +}; +int au_do_open(struct file *file, struct au_do_open_args *args); +int au_reopen_nondir(struct file *file); +struct au_pin; +int au_ready_to_write(struct file *file, loff_t len, struct au_pin *pin); +int au_reval_and_lock_fdi(struct file *file, int (*reopen)(struct file *file), + int wlock, unsigned int fi_lsc); +int au_do_flush(struct file *file, fl_owner_t id, + int (*flush)(struct file *file, fl_owner_t id)); + +/* poll.c */ +#ifdef CONFIG_AUFS_POLL +unsigned int aufs_poll(struct file *file, poll_table *wait); +#endif + +#ifdef CONFIG_AUFS_BR_HFSPLUS +/* hfsplus.c */ +struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex, + int force_wr); +void au_h_open_post(struct dentry *dentry, aufs_bindex_t bindex, + struct file *h_file); +#else +AuStub(struct file *, au_h_open_pre, return NULL, struct dentry *dentry, + aufs_bindex_t bindex, int force_wr) +AuStubVoid(au_h_open_post, struct dentry *dentry, aufs_bindex_t bindex, + struct file *h_file); +#endif + +/* f_op.c */ +extern const struct file_operations aufs_file_fop; +int au_do_open_nondir(struct file *file, int flags, struct file *h_file); +int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file); +struct file *au_read_pre(struct file *file, int keep_fi, unsigned int lsc); + +/* finfo.c */ +void au_hfput(struct au_hfile *hf, int execed); +void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, + struct file *h_file); + +void au_update_figen(struct file *file); +struct au_fidir *au_fidir_alloc(struct super_block *sb); +int au_fidir_realloc(struct au_finfo *finfo, int nbr, int may_shrink); + +void au_fi_init_once(void *_fi); +void au_finfo_fin(struct file *file); +int au_finfo_init(struct file *file, struct au_fidir *fidir); + +/* ioctl.c */ +long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg); +#ifdef CONFIG_COMPAT +long aufs_compat_ioctl_dir(struct file *file, unsigned int cmd, + unsigned long arg); +long aufs_compat_ioctl_nondir(struct file *file, unsigned int cmd, + unsigned long arg); +#endif + +/* ---------------------------------------------------------------------- */ + +static inline struct au_finfo *au_fi(struct file *file) +{ + return file->private_data; +} + +/* ---------------------------------------------------------------------- */ + +#define fi_read_lock(f) au_rw_read_lock(&au_fi(f)->fi_rwsem) +#define fi_write_lock(f) au_rw_write_lock(&au_fi(f)->fi_rwsem) +#define fi_read_trylock(f) au_rw_read_trylock(&au_fi(f)->fi_rwsem) +#define fi_write_trylock(f) au_rw_write_trylock(&au_fi(f)->fi_rwsem) +/* +#define fi_read_trylock_nested(f) \ + au_rw_read_trylock_nested(&au_fi(f)->fi_rwsem) +#define fi_write_trylock_nested(f) \ + au_rw_write_trylock_nested(&au_fi(f)->fi_rwsem) +*/ + +#define fi_read_unlock(f) au_rw_read_unlock(&au_fi(f)->fi_rwsem) +#define fi_write_unlock(f) au_rw_write_unlock(&au_fi(f)->fi_rwsem) +#define fi_downgrade_lock(f) au_rw_dgrade_lock(&au_fi(f)->fi_rwsem) + +/* lock subclass for finfo */ +enum { + AuLsc_FI_1, + AuLsc_FI_2 +}; + +static inline void fi_read_lock_nested(struct file *f, unsigned int lsc) +{ + au_rw_read_lock_nested(&au_fi(f)->fi_rwsem, lsc); +} + +static inline void fi_write_lock_nested(struct file *f, unsigned int lsc) +{ + au_rw_write_lock_nested(&au_fi(f)->fi_rwsem, lsc); +} + +/* + * fi_read_lock_1, fi_write_lock_1, + * fi_read_lock_2, fi_write_lock_2 + */ +#define AuReadLockFunc(name) \ +static inline void fi_read_lock_##name(struct file *f) \ +{ fi_read_lock_nested(f, AuLsc_FI_##name); } + +#define AuWriteLockFunc(name) \ +static inline void fi_write_lock_##name(struct file *f) \ +{ fi_write_lock_nested(f, AuLsc_FI_##name); } + +#define AuRWLockFuncs(name) \ + AuReadLockFunc(name) \ + AuWriteLockFunc(name) + +AuRWLockFuncs(1); +AuRWLockFuncs(2); + +#undef AuReadLockFunc +#undef AuWriteLockFunc +#undef AuRWLockFuncs + +#define FiMustNoWaiters(f) AuRwMustNoWaiters(&au_fi(f)->fi_rwsem) +#define FiMustAnyLock(f) AuRwMustAnyLock(&au_fi(f)->fi_rwsem) +#define FiMustWriteLock(f) AuRwMustWriteLock(&au_fi(f)->fi_rwsem) + +/* ---------------------------------------------------------------------- */ + +/* todo: hard/soft set? */ +static inline aufs_bindex_t au_fbtop(struct file *file) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_btop; +} + +static inline aufs_bindex_t au_fbbot_dir(struct file *file) +{ + FiMustAnyLock(file); + AuDebugOn(!au_fi(file)->fi_hdir); + return au_fi(file)->fi_hdir->fd_bbot; +} + +static inline struct au_vdir *au_fvdir_cache(struct file *file) +{ + FiMustAnyLock(file); + AuDebugOn(!au_fi(file)->fi_hdir); + return au_fi(file)->fi_hdir->fd_vdir_cache; +} + +static inline void au_set_fbtop(struct file *file, aufs_bindex_t bindex) +{ + FiMustWriteLock(file); + au_fi(file)->fi_btop = bindex; +} + +static inline void au_set_fbbot_dir(struct file *file, aufs_bindex_t bindex) +{ + FiMustWriteLock(file); + AuDebugOn(!au_fi(file)->fi_hdir); + au_fi(file)->fi_hdir->fd_bbot = bindex; +} + +static inline void au_set_fvdir_cache(struct file *file, + struct au_vdir *vdir_cache) +{ + FiMustWriteLock(file); + AuDebugOn(!au_fi(file)->fi_hdir); + au_fi(file)->fi_hdir->fd_vdir_cache = vdir_cache; +} + +static inline struct file *au_hf_top(struct file *file) +{ + FiMustAnyLock(file); + AuDebugOn(au_fi(file)->fi_hdir); + return au_fi(file)->fi_htop.hf_file; +} + +static inline struct file *au_hf_dir(struct file *file, aufs_bindex_t bindex) +{ + FiMustAnyLock(file); + AuDebugOn(!au_fi(file)->fi_hdir); + return au_fi(file)->fi_hdir->fd_hfile[0 + bindex].hf_file; +} + +/* todo: memory barrier? */ +static inline unsigned int au_figen(struct file *f) +{ + return atomic_read(&au_fi(f)->fi_generation); +} + +static inline void au_set_mmapped(struct file *f) +{ + if (atomic_inc_return(&au_fi(f)->fi_mmapped)) + return; + pr_warn("fi_mmapped wrapped around\n"); + while (!atomic_inc_return(&au_fi(f)->fi_mmapped)) + ; +} + +static inline void au_unset_mmapped(struct file *f) +{ + atomic_dec(&au_fi(f)->fi_mmapped); +} + +static inline int au_test_mmapped(struct file *f) +{ + return atomic_read(&au_fi(f)->fi_mmapped); +} + +/* customize vma->vm_file */ + +static inline void au_do_vm_file_reset(struct vm_area_struct *vma, + struct file *file) +{ + struct file *f; + + f = vma->vm_file; + get_file(file); + vma->vm_file = file; + fput(f); +} + +#ifdef CONFIG_MMU +#define AuDbgVmRegion(file, vma) do {} while (0) + +static inline void au_vm_file_reset(struct vm_area_struct *vma, + struct file *file) +{ + au_do_vm_file_reset(vma, file); +} +#else +#define AuDbgVmRegion(file, vma) \ + AuDebugOn((vma)->vm_region && (vma)->vm_region->vm_file != (file)) + +static inline void au_vm_file_reset(struct vm_area_struct *vma, + struct file *file) +{ + struct file *f; + + au_do_vm_file_reset(vma, file); + f = vma->vm_region->vm_file; + get_file(file); + vma->vm_region->vm_file = file; + fput(f); +} +#endif /* CONFIG_MMU */ + +/* handle vma->vm_prfile */ +static inline void au_vm_prfile_set(struct vm_area_struct *vma, + struct file *file) +{ + get_file(file); + vma->vm_prfile = file; +#ifndef CONFIG_MMU + get_file(file); + vma->vm_region->vm_prfile = file; +#endif +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/finfo.c +++ linux-aws-4.15.0/fs/aufs/finfo.c @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * file private data + */ + +#include "aufs.h" + +void au_hfput(struct au_hfile *hf, int execed) +{ + if (execed) + allow_write_access(hf->hf_file); + fput(hf->hf_file); + hf->hf_file = NULL; + au_br_put(hf->hf_br); + hf->hf_br = NULL; +} + +void au_set_h_fptr(struct file *file, aufs_bindex_t bindex, struct file *val) +{ + struct au_finfo *finfo = au_fi(file); + struct au_hfile *hf; + struct au_fidir *fidir; + + fidir = finfo->fi_hdir; + if (!fidir) { + AuDebugOn(finfo->fi_btop != bindex); + hf = &finfo->fi_htop; + } else + hf = fidir->fd_hfile + bindex; + + if (hf && hf->hf_file) + au_hfput(hf, vfsub_file_execed(file)); + if (val) { + FiMustWriteLock(file); + AuDebugOn(IS_ERR_OR_NULL(file->f_path.dentry)); + hf->hf_file = val; + hf->hf_br = au_sbr(file->f_path.dentry->d_sb, bindex); + } +} + +void au_update_figen(struct file *file) +{ + atomic_set(&au_fi(file)->fi_generation, au_digen(file->f_path.dentry)); + /* smp_mb(); */ /* atomic_set */ +} + +/* ---------------------------------------------------------------------- */ + +struct au_fidir *au_fidir_alloc(struct super_block *sb) +{ + struct au_fidir *fidir; + int nbr; + + nbr = au_sbbot(sb) + 1; + if (nbr < 2) + nbr = 2; /* initial allocate for 2 branches */ + fidir = kzalloc(au_fidir_sz(nbr), GFP_NOFS); + if (fidir) { + fidir->fd_bbot = -1; + fidir->fd_nent = nbr; + } + + return fidir; +} + +int au_fidir_realloc(struct au_finfo *finfo, int nbr, int may_shrink) +{ + int err; + struct au_fidir *fidir, *p; + + AuRwMustWriteLock(&finfo->fi_rwsem); + fidir = finfo->fi_hdir; + AuDebugOn(!fidir); + + err = -ENOMEM; + p = au_kzrealloc(fidir, au_fidir_sz(fidir->fd_nent), au_fidir_sz(nbr), + GFP_NOFS, may_shrink); + if (p) { + p->fd_nent = nbr; + finfo->fi_hdir = p; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_finfo_fin(struct file *file) +{ + struct au_finfo *finfo; + + au_nfiles_dec(file->f_path.dentry->d_sb); + + finfo = au_fi(file); + AuDebugOn(finfo->fi_hdir); + AuRwDestroy(&finfo->fi_rwsem); + au_cache_free_finfo(finfo); +} + +void au_fi_init_once(void *_finfo) +{ + struct au_finfo *finfo = _finfo; + + au_rw_init(&finfo->fi_rwsem); +} + +int au_finfo_init(struct file *file, struct au_fidir *fidir) +{ + int err; + struct au_finfo *finfo; + struct dentry *dentry; + + err = -ENOMEM; + dentry = file->f_path.dentry; + finfo = au_cache_alloc_finfo(); + if (unlikely(!finfo)) + goto out; + + err = 0; + au_nfiles_inc(dentry->d_sb); + au_rw_write_lock(&finfo->fi_rwsem); + finfo->fi_btop = -1; + finfo->fi_hdir = fidir; + atomic_set(&finfo->fi_generation, au_digen(dentry)); + /* smp_mb(); */ /* atomic_set */ + + file->private_data = finfo; + +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/fstype.h +++ linux-aws-4.15.0/fs/aufs/fstype.h @@ -0,0 +1,400 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * judging filesystem type + */ + +#ifndef __AUFS_FSTYPE_H__ +#define __AUFS_FSTYPE_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include + +static inline int au_test_aufs(struct super_block *sb) +{ + return sb->s_magic == AUFS_SUPER_MAGIC; +} + +static inline const char *au_sbtype(struct super_block *sb) +{ + return sb->s_type->name; +} + +static inline int au_test_iso9660(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_ISO9660_FS) + return sb->s_magic == ISOFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_romfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_ROMFS_FS) + return sb->s_magic == ROMFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_cramfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_CRAMFS) + return sb->s_magic == CRAMFS_MAGIC; +#endif + return 0; +} + +static inline int au_test_nfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_NFS_FS) + return sb->s_magic == NFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_fuse(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_FUSE_FS) + return sb->s_magic == FUSE_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_XFS_FS) + return sb->s_magic == XFS_SB_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_tmpfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_TMPFS + return sb->s_magic == TMPFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ecryptfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_ECRYPT_FS) + return !strcmp(au_sbtype(sb), "ecryptfs"); +#else + return 0; +#endif +} + +static inline int au_test_ramfs(struct super_block *sb) +{ + return sb->s_magic == RAMFS_MAGIC; +} + +static inline int au_test_ubifs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_UBIFS_FS) + return sb->s_magic == UBIFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_procfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_PROC_FS + return sb->s_magic == PROC_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_sysfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_SYSFS + return sb->s_magic == SYSFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_configfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_CONFIGFS_FS) + return sb->s_magic == CONFIGFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_minix(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_MINIX_FS) + return sb->s_magic == MINIX3_SUPER_MAGIC + || sb->s_magic == MINIX2_SUPER_MAGIC + || sb->s_magic == MINIX2_SUPER_MAGIC2 + || sb->s_magic == MINIX_SUPER_MAGIC + || sb->s_magic == MINIX_SUPER_MAGIC2; +#else + return 0; +#endif +} + +static inline int au_test_fat(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_FAT_FS) + return sb->s_magic == MSDOS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_msdos(struct super_block *sb) +{ + return au_test_fat(sb); +} + +static inline int au_test_vfat(struct super_block *sb) +{ + return au_test_fat(sb); +} + +static inline int au_test_securityfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_SECURITYFS + return sb->s_magic == SECURITYFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_squashfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_SQUASHFS) + return sb->s_magic == SQUASHFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_btrfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_BTRFS_FS) + return sb->s_magic == BTRFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xenfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_XENFS) + return sb->s_magic == XENFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_debugfs(struct super_block *sb __maybe_unused) +{ +#ifdef CONFIG_DEBUG_FS + return sb->s_magic == DEBUGFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_nilfs(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_NILFS) + return sb->s_magic == NILFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_hfsplus(struct super_block *sb __maybe_unused) +{ +#if IS_ENABLED(CONFIG_HFSPLUS_FS) + return sb->s_magic == HFSPLUS_SUPER_MAGIC; +#else + return 0; +#endif +} + +/* ---------------------------------------------------------------------- */ +/* + * they can't be an aufs branch. + */ +static inline int au_test_fs_unsuppoted(struct super_block *sb) +{ + return +#ifndef CONFIG_AUFS_BR_RAMFS + au_test_ramfs(sb) || +#endif + au_test_procfs(sb) + || au_test_sysfs(sb) + || au_test_configfs(sb) + || au_test_debugfs(sb) + || au_test_securityfs(sb) + || au_test_xenfs(sb) + || au_test_ecryptfs(sb) + /* || !strcmp(au_sbtype(sb), "unionfs") */ + || au_test_aufs(sb); /* will be supported in next version */ +} + +static inline int au_test_fs_remote(struct super_block *sb) +{ + return !au_test_tmpfs(sb) +#ifdef CONFIG_AUFS_BR_RAMFS + && !au_test_ramfs(sb) +#endif + && !(sb->s_type->fs_flags & FS_REQUIRES_DEV); +} + +/* ---------------------------------------------------------------------- */ + +/* + * Note: these functions (below) are created after reading ->getattr() in all + * filesystems under linux/fs. it means we have to do so in every update... + */ + +/* + * some filesystems require getattr to refresh the inode attributes before + * referencing. + * in most cases, we can rely on the inode attribute in NFS (or every remote fs) + * and leave the work for d_revalidate() + */ +static inline int au_test_fs_refresh_iattr(struct super_block *sb) +{ + return au_test_nfs(sb) + || au_test_fuse(sb) + /* || au_test_btrfs(sb) */ /* untested */ + ; +} + +/* + * filesystems which don't maintain i_size or i_blocks. + */ +static inline int au_test_fs_bad_iattr_size(struct super_block *sb) +{ + return au_test_xfs(sb) + || au_test_btrfs(sb) + || au_test_ubifs(sb) + || au_test_hfsplus(sb) /* maintained, but incorrect */ + /* || au_test_minix(sb) */ /* untested */ + ; +} + +/* + * filesystems which don't store the correct value in some of their inode + * attributes. + */ +static inline int au_test_fs_bad_iattr(struct super_block *sb) +{ + return au_test_fs_bad_iattr_size(sb) + || au_test_fat(sb) + || au_test_msdos(sb) + || au_test_vfat(sb); +} + +/* they don't check i_nlink in link(2) */ +static inline int au_test_fs_no_limit_nlink(struct super_block *sb) +{ + return au_test_tmpfs(sb) +#ifdef CONFIG_AUFS_BR_RAMFS + || au_test_ramfs(sb) +#endif + || au_test_ubifs(sb) + || au_test_hfsplus(sb); +} + +/* + * filesystems which sets S_NOATIME and S_NOCMTIME. + */ +static inline int au_test_fs_notime(struct super_block *sb) +{ + return au_test_nfs(sb) + || au_test_fuse(sb) + || au_test_ubifs(sb) + ; +} + +/* temporary support for i#1 in cramfs */ +static inline int au_test_fs_unique_ino(struct inode *inode) +{ + if (au_test_cramfs(inode->i_sb)) + return inode->i_ino != 1; + return 1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * the filesystem where the xino files placed must support i/o after unlink and + * maintain i_size and i_blocks. + */ +static inline int au_test_fs_bad_xino(struct super_block *sb) +{ + return au_test_fs_remote(sb) + || au_test_fs_bad_iattr_size(sb) + /* don't want unnecessary work for xino */ + || au_test_aufs(sb) + || au_test_ecryptfs(sb) + || au_test_nilfs(sb); +} + +static inline int au_test_fs_trunc_xino(struct super_block *sb) +{ + return au_test_tmpfs(sb) + || au_test_ramfs(sb); +} + +/* + * test if the @sb is real-readonly. + */ +static inline int au_test_fs_rr(struct super_block *sb) +{ + return au_test_squashfs(sb) + || au_test_iso9660(sb) + || au_test_cramfs(sb) + || au_test_romfs(sb); +} + +/* + * test if the @inode is nfs with 'noacl' option + * NFS always sets SB_POSIXACL regardless its mount option 'noacl.' + */ +static inline int au_test_nfs_noacl(struct inode *inode) +{ + return au_test_nfs(inode->i_sb) + /* && IS_POSIXACL(inode) */ + && !nfs_server_capable(inode, NFS_CAP_ACLS); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/hbl.h +++ linux-aws-4.15.0/fs/aufs/hbl.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * helpers for hlist_bl.h + */ + +#ifndef __AUFS_HBL_H__ +#define __AUFS_HBL_H__ + +#ifdef __KERNEL__ + +#include + +static inline void au_hbl_add(struct hlist_bl_node *node, + struct hlist_bl_head *hbl) +{ + hlist_bl_lock(hbl); + hlist_bl_add_head(node, hbl); + hlist_bl_unlock(hbl); +} + +static inline void au_hbl_del(struct hlist_bl_node *node, + struct hlist_bl_head *hbl) +{ + hlist_bl_lock(hbl); + hlist_bl_del(node); + hlist_bl_unlock(hbl); +} + +#define au_hbl_for_each(pos, head) \ + for (pos = hlist_bl_first(head); \ + pos; \ + pos = pos->next) + +static inline unsigned long au_hbl_count(struct hlist_bl_head *hbl) +{ + unsigned long cnt; + struct hlist_bl_node *pos; + + cnt = 0; + hlist_bl_lock(hbl); + au_hbl_for_each(pos, hbl) + cnt++; + hlist_bl_unlock(hbl); + return cnt; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_HBL_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/hfsnotify.c +++ linux-aws-4.15.0/fs/aufs/hfsnotify.c @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * fsnotify for the lower directories + */ + +#include "aufs.h" + +/* FS_IN_IGNORED is unnecessary */ +static const __u32 AuHfsnMask = (FS_MOVED_TO | FS_MOVED_FROM | FS_DELETE + | FS_CREATE | FS_EVENT_ON_CHILD); +static DECLARE_WAIT_QUEUE_HEAD(au_hfsn_wq); +static __cacheline_aligned_in_smp atomic64_t au_hfsn_ifree = ATOMIC64_INIT(0); + +static void au_hfsn_free_mark(struct fsnotify_mark *mark) +{ + struct au_hnotify *hn = container_of(mark, struct au_hnotify, + hn_mark); + /* AuDbg("here\n"); */ + au_cache_free_hnotify(hn); + smp_mb__before_atomic(); /* for atomic64_dec */ + if (atomic64_dec_and_test(&au_hfsn_ifree)) + wake_up(&au_hfsn_wq); +} + +static int au_hfsn_alloc(struct au_hinode *hinode) +{ + int err; + struct au_hnotify *hn; + struct super_block *sb; + struct au_branch *br; + struct fsnotify_mark *mark; + aufs_bindex_t bindex; + + hn = hinode->hi_notify; + sb = hn->hn_aufs_inode->i_sb; + bindex = au_br_index(sb, hinode->hi_id); + br = au_sbr(sb, bindex); + AuDebugOn(!br->br_hfsn); + + mark = &hn->hn_mark; + fsnotify_init_mark(mark, br->br_hfsn->hfsn_group); + mark->mask = AuHfsnMask; + /* + * by udba rename or rmdir, aufs assign a new inode to the known + * h_inode, so specify 1 to allow dups. + */ + lockdep_off(); + err = fsnotify_add_mark(mark, hinode->hi_inode, /*mnt*/NULL, + /*allow_dups*/1); + lockdep_on(); + + return err; +} + +static int au_hfsn_free(struct au_hinode *hinode, struct au_hnotify *hn) +{ + struct fsnotify_mark *mark; + unsigned long long ull; + struct fsnotify_group *group; + + ull = atomic64_inc_return(&au_hfsn_ifree); + BUG_ON(!ull); + + mark = &hn->hn_mark; + spin_lock(&mark->lock); + group = mark->group; + fsnotify_get_group(group); + spin_unlock(&mark->lock); + lockdep_off(); + fsnotify_destroy_mark(mark, group); + fsnotify_put_mark(mark); + fsnotify_put_group(group); + lockdep_on(); + + /* free hn by myself */ + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_ctl(struct au_hinode *hinode, int do_set) +{ + struct fsnotify_mark *mark; + + mark = &hinode->hi_notify->hn_mark; + spin_lock(&mark->lock); + if (do_set) { + AuDebugOn(mark->mask & AuHfsnMask); + mark->mask |= AuHfsnMask; + } else { + AuDebugOn(!(mark->mask & AuHfsnMask)); + mark->mask &= ~AuHfsnMask; + } + spin_unlock(&mark->lock); + /* fsnotify_recalc_inode_mask(hinode->hi_inode); */ +} + +/* ---------------------------------------------------------------------- */ + +/* #define AuDbgHnotify */ +#ifdef AuDbgHnotify +static char *au_hfsn_name(u32 mask) +{ +#ifdef CONFIG_AUFS_DEBUG +#define test_ret(flag) \ + do { \ + if (mask & flag) \ + return #flag; \ + } while (0) + test_ret(FS_ACCESS); + test_ret(FS_MODIFY); + test_ret(FS_ATTRIB); + test_ret(FS_CLOSE_WRITE); + test_ret(FS_CLOSE_NOWRITE); + test_ret(FS_OPEN); + test_ret(FS_MOVED_FROM); + test_ret(FS_MOVED_TO); + test_ret(FS_CREATE); + test_ret(FS_DELETE); + test_ret(FS_DELETE_SELF); + test_ret(FS_MOVE_SELF); + test_ret(FS_UNMOUNT); + test_ret(FS_Q_OVERFLOW); + test_ret(FS_IN_IGNORED); + test_ret(FS_ISDIR); + test_ret(FS_IN_ONESHOT); + test_ret(FS_EVENT_ON_CHILD); + return ""; +#undef test_ret +#else + return "??"; +#endif +} +#endif + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_free_group(struct fsnotify_group *group) +{ + struct au_br_hfsnotify *hfsn = group->private; + + /* AuDbg("here\n"); */ + kfree(hfsn); +} + +static int au_hfsn_handle_event(struct fsnotify_group *group, + struct inode *inode, + struct fsnotify_mark *inode_mark, + struct fsnotify_mark *vfsmount_mark, + u32 mask, const void *data, int data_type, + const unsigned char *file_name, u32 cookie, + struct fsnotify_iter_info *iter_info) +{ + int err; + struct au_hnotify *hnotify; + struct inode *h_dir, *h_inode; + struct qstr h_child_qstr = QSTR_INIT(file_name, strlen(file_name)); + + AuDebugOn(data_type != FSNOTIFY_EVENT_INODE); + + err = 0; + /* if FS_UNMOUNT happens, there must be another bug */ + AuDebugOn(mask & FS_UNMOUNT); + if (mask & (FS_IN_IGNORED | FS_UNMOUNT)) + goto out; + + h_dir = inode; + h_inode = NULL; +#ifdef AuDbgHnotify + au_debug_on(); + if (1 || h_child_qstr.len != sizeof(AUFS_XINO_FNAME) - 1 + || strncmp(h_child_qstr.name, AUFS_XINO_FNAME, h_child_qstr.len)) { + AuDbg("i%lu, mask 0x%x %s, hcname %.*s, hi%lu\n", + h_dir->i_ino, mask, au_hfsn_name(mask), + AuLNPair(&h_child_qstr), h_inode ? h_inode->i_ino : 0); + /* WARN_ON(1); */ + } + au_debug_off(); +#endif + + AuDebugOn(!inode_mark); + hnotify = container_of(inode_mark, struct au_hnotify, hn_mark); + err = au_hnotify(h_dir, hnotify, mask, &h_child_qstr, h_inode); + +out: + return err; +} + +static struct fsnotify_ops au_hfsn_ops = { + .handle_event = au_hfsn_handle_event, + .free_group_priv = au_hfsn_free_group, + .free_mark = au_hfsn_free_mark +}; + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_fin_br(struct au_branch *br) +{ + struct au_br_hfsnotify *hfsn; + + hfsn = br->br_hfsn; + if (hfsn) { + lockdep_off(); + fsnotify_put_group(hfsn->hfsn_group); + lockdep_on(); + } +} + +static int au_hfsn_init_br(struct au_branch *br, int perm) +{ + int err; + struct fsnotify_group *group; + struct au_br_hfsnotify *hfsn; + + err = 0; + br->br_hfsn = NULL; + if (!au_br_hnotifyable(perm)) + goto out; + + err = -ENOMEM; + hfsn = kmalloc(sizeof(*hfsn), GFP_NOFS); + if (unlikely(!hfsn)) + goto out; + + err = 0; + group = fsnotify_alloc_group(&au_hfsn_ops); + if (IS_ERR(group)) { + err = PTR_ERR(group); + pr_err("fsnotify_alloc_group() failed, %d\n", err); + goto out_hfsn; + } + + group->private = hfsn; + hfsn->hfsn_group = group; + br->br_hfsn = hfsn; + goto out; /* success */ + +out_hfsn: + kfree(hfsn); +out: + return err; +} + +static int au_hfsn_reset_br(unsigned int udba, struct au_branch *br, int perm) +{ + int err; + + err = 0; + if (!br->br_hfsn) + err = au_hfsn_init_br(br, perm); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_fin(void) +{ + AuDbg("au_hfsn_ifree %lld\n", (long long)atomic64_read(&au_hfsn_ifree)); + wait_event(au_hfsn_wq, !atomic64_read(&au_hfsn_ifree)); +} + +const struct au_hnotify_op au_hnotify_op = { + .ctl = au_hfsn_ctl, + .alloc = au_hfsn_alloc, + .free = au_hfsn_free, + + .fin = au_hfsn_fin, + + .reset_br = au_hfsn_reset_br, + .fin_br = au_hfsn_fin_br, + .init_br = au_hfsn_init_br +}; --- linux-aws-4.15.0.orig/fs/aufs/hfsplus.c +++ linux-aws-4.15.0/fs/aufs/hfsplus.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * special support for filesystems which aqucires an inode mutex + * at final closing a file, eg, hfsplus. + * + * This trick is very simple and stupid, just to open the file before really + * neceeary open to tell hfsplus that this is not the final closing. + * The caller should call au_h_open_pre() after acquiring the inode mutex, + * and au_h_open_post() after releasing it. + */ + +#include "aufs.h" + +struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex, + int force_wr) +{ + struct file *h_file; + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + AuDebugOn(!h_dentry); + AuDebugOn(d_is_negative(h_dentry)); + + h_file = NULL; + if (au_test_hfsplus(h_dentry->d_sb) + && d_is_reg(h_dentry)) + h_file = au_h_open(dentry, bindex, + O_RDONLY | O_NOATIME | O_LARGEFILE, + /*file*/NULL, force_wr); + return h_file; +} + +void au_h_open_post(struct dentry *dentry, aufs_bindex_t bindex, + struct file *h_file) +{ + if (h_file) { + fput(h_file); + au_sbr_put(dentry->d_sb, bindex); + } +} --- linux-aws-4.15.0.orig/fs/aufs/hnotify.c +++ linux-aws-4.15.0/fs/aufs/hnotify.c @@ -0,0 +1,719 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * abstraction to notify the direct changes on lower directories + */ + +#include "aufs.h" + +int au_hn_alloc(struct au_hinode *hinode, struct inode *inode) +{ + int err; + struct au_hnotify *hn; + + err = -ENOMEM; + hn = au_cache_alloc_hnotify(); + if (hn) { + hn->hn_aufs_inode = inode; + hinode->hi_notify = hn; + err = au_hnotify_op.alloc(hinode); + AuTraceErr(err); + if (unlikely(err)) { + hinode->hi_notify = NULL; + au_cache_free_hnotify(hn); + /* + * The upper dir was removed by udba, but the same named + * dir left. In this case, aufs assignes a new inode + * number and set the monitor again. + * For the lower dir, the old monitnor is still left. + */ + if (err == -EEXIST) + err = 0; + } + } + + AuTraceErr(err); + return err; +} + +void au_hn_free(struct au_hinode *hinode) +{ + struct au_hnotify *hn; + + hn = hinode->hi_notify; + if (hn) { + hinode->hi_notify = NULL; + if (au_hnotify_op.free(hinode, hn)) + au_cache_free_hnotify(hn); + } +} + +/* ---------------------------------------------------------------------- */ + +void au_hn_ctl(struct au_hinode *hinode, int do_set) +{ + if (hinode->hi_notify) + au_hnotify_op.ctl(hinode, do_set); +} + +void au_hn_reset(struct inode *inode, unsigned int flags) +{ + aufs_bindex_t bindex, bbot; + struct inode *hi; + struct dentry *iwhdentry; + + bbot = au_ibbot(inode); + for (bindex = au_ibtop(inode); bindex <= bbot; bindex++) { + hi = au_h_iptr(inode, bindex); + if (!hi) + continue; + + /* inode_lock_nested(hi, AuLsc_I_CHILD); */ + iwhdentry = au_hi_wh(inode, bindex); + if (iwhdentry) + dget(iwhdentry); + au_igrab(hi); + au_set_h_iptr(inode, bindex, NULL, 0); + au_set_h_iptr(inode, bindex, au_igrab(hi), + flags & ~AuHi_XINO); + iput(hi); + dput(iwhdentry); + /* inode_unlock(hi); */ + } +} + +/* ---------------------------------------------------------------------- */ + +static int hn_xino(struct inode *inode, struct inode *h_inode) +{ + int err; + aufs_bindex_t bindex, bbot, bfound, btop; + struct inode *h_i; + + err = 0; + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warn("branch root dir was changed\n"); + goto out; + } + + bfound = -1; + bbot = au_ibbot(inode); + btop = au_ibtop(inode); +#if 0 /* reserved for future use */ + if (bindex == bbot) { + /* keep this ino in rename case */ + goto out; + } +#endif + for (bindex = btop; bindex <= bbot; bindex++) + if (au_h_iptr(inode, bindex) == h_inode) { + bfound = bindex; + break; + } + if (bfound < 0) + goto out; + + for (bindex = btop; bindex <= bbot; bindex++) { + h_i = au_h_iptr(inode, bindex); + if (!h_i) + continue; + + err = au_xino_write(inode->i_sb, bindex, h_i->i_ino, /*ino*/0); + /* ignore this error */ + /* bad action? */ + } + + /* children inode number will be broken */ + +out: + AuTraceErr(err); + return err; +} + +static int hn_gen_tree(struct dentry *dentry) +{ + int err, i, j, ndentry; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, dentry, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) { + struct dentry *d; + + d = dentries[j]; + if (IS_ROOT(d)) + continue; + + au_digen_dec(d); + if (d_really_is_positive(d)) + /* todo: reset children xino? + cached children only? */ + au_iigen_dec(d_inode(d)); + } + } + +out_dpages: + au_dpages_free(&dpages); + +#if 0 + /* discard children */ + dentry_unhash(dentry); + dput(dentry); +#endif +out: + return err; +} + +/* + * return 0 if processed. + */ +static int hn_gen_by_inode(char *name, unsigned int nlen, struct inode *inode, + const unsigned int isdir) +{ + int err; + struct dentry *d; + struct qstr *dname; + + err = 1; + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warn("branch root dir was changed\n"); + err = 0; + goto out; + } + + if (!isdir) { + AuDebugOn(!name); + au_iigen_dec(inode); + spin_lock(&inode->i_lock); + hlist_for_each_entry(d, &inode->i_dentry, d_u.d_alias) { + spin_lock(&d->d_lock); + dname = &d->d_name; + if (dname->len != nlen + && memcmp(dname->name, name, nlen)) { + spin_unlock(&d->d_lock); + continue; + } + err = 0; + au_digen_dec(d); + spin_unlock(&d->d_lock); + break; + } + spin_unlock(&inode->i_lock); + } else { + au_fset_si(au_sbi(inode->i_sb), FAILED_REFRESH_DIR); + d = d_find_any_alias(inode); + if (!d) { + au_iigen_dec(inode); + goto out; + } + + spin_lock(&d->d_lock); + dname = &d->d_name; + if (dname->len == nlen && !memcmp(dname->name, name, nlen)) { + spin_unlock(&d->d_lock); + err = hn_gen_tree(d); + spin_lock(&d->d_lock); + } + spin_unlock(&d->d_lock); + dput(d); + } + +out: + AuTraceErr(err); + return err; +} + +static int hn_gen_by_name(struct dentry *dentry, const unsigned int isdir) +{ + int err; + + if (IS_ROOT(dentry)) { + pr_warn("branch root dir was changed\n"); + return 0; + } + + err = 0; + if (!isdir) { + au_digen_dec(dentry); + if (d_really_is_positive(dentry)) + au_iigen_dec(d_inode(dentry)); + } else { + au_fset_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIR); + if (d_really_is_positive(dentry)) + err = hn_gen_tree(dentry); + } + + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* hnotify job flags */ +#define AuHnJob_XINO0 1 +#define AuHnJob_GEN (1 << 1) +#define AuHnJob_DIRENT (1 << 2) +#define AuHnJob_ISDIR (1 << 3) +#define AuHnJob_TRYXINO0 (1 << 4) +#define AuHnJob_MNTPNT (1 << 5) +#define au_ftest_hnjob(flags, name) ((flags) & AuHnJob_##name) +#define au_fset_hnjob(flags, name) \ + do { (flags) |= AuHnJob_##name; } while (0) +#define au_fclr_hnjob(flags, name) \ + do { (flags) &= ~AuHnJob_##name; } while (0) + +enum { + AuHn_CHILD, + AuHn_PARENT, + AuHnLast +}; + +struct au_hnotify_args { + struct inode *h_dir, *dir, *h_child_inode; + u32 mask; + unsigned int flags[AuHnLast]; + unsigned int h_child_nlen; + char h_child_name[]; +}; + +struct hn_job_args { + unsigned int flags; + struct inode *inode, *h_inode, *dir, *h_dir; + struct dentry *dentry; + char *h_name; + int h_nlen; +}; + +static int hn_job(struct hn_job_args *a) +{ + const unsigned int isdir = au_ftest_hnjob(a->flags, ISDIR); + int e; + + /* reset xino */ + if (au_ftest_hnjob(a->flags, XINO0) && a->inode) + hn_xino(a->inode, a->h_inode); /* ignore this error */ + + if (au_ftest_hnjob(a->flags, TRYXINO0) + && a->inode + && a->h_inode) { + vfsub_inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); + if (!a->h_inode->i_nlink + && !(a->h_inode->i_state & I_LINKABLE)) + hn_xino(a->inode, a->h_inode); /* ignore this error */ + inode_unlock_shared(a->h_inode); + } + + /* make the generation obsolete */ + if (au_ftest_hnjob(a->flags, GEN)) { + e = -1; + if (a->inode) + e = hn_gen_by_inode(a->h_name, a->h_nlen, a->inode, + isdir); + if (e && a->dentry) + hn_gen_by_name(a->dentry, isdir); + /* ignore this error */ + } + + /* make dir entries obsolete */ + if (au_ftest_hnjob(a->flags, DIRENT) && a->inode) { + struct au_vdir *vdir; + + vdir = au_ivdir(a->inode); + if (vdir) + vdir->vd_jiffy = 0; + /* IMustLock(a->inode); */ + /* a->inode->i_version++; */ + } + + /* can do nothing but warn */ + if (au_ftest_hnjob(a->flags, MNTPNT) + && a->dentry + && d_mountpoint(a->dentry)) + pr_warn("mount-point %pd is removed or renamed\n", a->dentry); + + return 0; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *lookup_wlock_by_name(char *name, unsigned int nlen, + struct inode *dir) +{ + struct dentry *dentry, *d, *parent; + struct qstr *dname; + + parent = d_find_any_alias(dir); + if (!parent) + return NULL; + + dentry = NULL; + spin_lock(&parent->d_lock); + list_for_each_entry(d, &parent->d_subdirs, d_child) { + /* AuDbg("%pd\n", d); */ + spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); + dname = &d->d_name; + if (dname->len != nlen || memcmp(dname->name, name, nlen)) + goto cont_unlock; + if (au_di(d)) + au_digen_dec(d); + else + goto cont_unlock; + if (au_dcount(d) > 0) { + dentry = dget_dlock(d); + spin_unlock(&d->d_lock); + break; + } + +cont_unlock: + spin_unlock(&d->d_lock); + } + spin_unlock(&parent->d_lock); + dput(parent); + + if (dentry) + di_write_lock_child(dentry); + + return dentry; +} + +static struct inode *lookup_wlock_by_ino(struct super_block *sb, + aufs_bindex_t bindex, ino_t h_ino) +{ + struct inode *inode; + ino_t ino; + int err; + + inode = NULL; + err = au_xino_read(sb, bindex, h_ino, &ino); + if (!err && ino) + inode = ilookup(sb, ino); + if (!inode) + goto out; + + if (unlikely(inode->i_ino == AUFS_ROOT_INO)) { + pr_warn("wrong root branch\n"); + iput(inode); + inode = NULL; + goto out; + } + + ii_write_lock_child(inode); + +out: + return inode; +} + +static void au_hn_bh(void *_args) +{ + struct au_hnotify_args *a = _args; + struct super_block *sb; + aufs_bindex_t bindex, bbot, bfound; + unsigned char xino, try_iput; + int err; + struct inode *inode; + ino_t h_ino; + struct hn_job_args args; + struct dentry *dentry; + struct au_sbinfo *sbinfo; + + AuDebugOn(!_args); + AuDebugOn(!a->h_dir); + AuDebugOn(!a->dir); + AuDebugOn(!a->mask); + AuDbg("mask 0x%x, i%lu, hi%lu, hci%lu\n", + a->mask, a->dir->i_ino, a->h_dir->i_ino, + a->h_child_inode ? a->h_child_inode->i_ino : 0); + + inode = NULL; + dentry = NULL; + /* + * do not lock a->dir->i_mutex here + * because of d_revalidate() may cause a deadlock. + */ + sb = a->dir->i_sb; + AuDebugOn(!sb); + sbinfo = au_sbi(sb); + AuDebugOn(!sbinfo); + si_write_lock(sb, AuLock_NOPLMW); + + if (au_opt_test(sbinfo->si_mntflags, DIRREN)) + switch (a->mask & FS_EVENTS_POSS_ON_CHILD) { + case FS_MOVED_FROM: + case FS_MOVED_TO: + AuWarn1("DIRREN with UDBA may not work correctly " + "for the direct rename(2)\n"); + } + + ii_read_lock_parent(a->dir); + bfound = -1; + bbot = au_ibbot(a->dir); + for (bindex = au_ibtop(a->dir); bindex <= bbot; bindex++) + if (au_h_iptr(a->dir, bindex) == a->h_dir) { + bfound = bindex; + break; + } + ii_read_unlock(a->dir); + if (unlikely(bfound < 0)) + goto out; + + xino = !!au_opt_test(au_mntflags(sb), XINO); + h_ino = 0; + if (a->h_child_inode) + h_ino = a->h_child_inode->i_ino; + + if (a->h_child_nlen + && (au_ftest_hnjob(a->flags[AuHn_CHILD], GEN) + || au_ftest_hnjob(a->flags[AuHn_CHILD], MNTPNT))) + dentry = lookup_wlock_by_name(a->h_child_name, a->h_child_nlen, + a->dir); + try_iput = 0; + if (dentry && d_really_is_positive(dentry)) + inode = d_inode(dentry); + if (xino && !inode && h_ino + && (au_ftest_hnjob(a->flags[AuHn_CHILD], XINO0) + || au_ftest_hnjob(a->flags[AuHn_CHILD], TRYXINO0) + || au_ftest_hnjob(a->flags[AuHn_CHILD], GEN))) { + inode = lookup_wlock_by_ino(sb, bfound, h_ino); + try_iput = 1; + } + + args.flags = a->flags[AuHn_CHILD]; + args.dentry = dentry; + args.inode = inode; + args.h_inode = a->h_child_inode; + args.dir = a->dir; + args.h_dir = a->h_dir; + args.h_name = a->h_child_name; + args.h_nlen = a->h_child_nlen; + err = hn_job(&args); + if (dentry) { + if (au_di(dentry)) + di_write_unlock(dentry); + dput(dentry); + } + if (inode && try_iput) { + ii_write_unlock(inode); + iput(inode); + } + + ii_write_lock_parent(a->dir); + args.flags = a->flags[AuHn_PARENT]; + args.dentry = NULL; + args.inode = a->dir; + args.h_inode = a->h_dir; + args.dir = NULL; + args.h_dir = NULL; + args.h_name = NULL; + args.h_nlen = 0; + err = hn_job(&args); + ii_write_unlock(a->dir); + +out: + iput(a->h_child_inode); + iput(a->h_dir); + iput(a->dir); + si_write_unlock(sb); + au_nwt_done(&sbinfo->si_nowait); + kfree(a); +} + +/* ---------------------------------------------------------------------- */ + +int au_hnotify(struct inode *h_dir, struct au_hnotify *hnotify, u32 mask, + struct qstr *h_child_qstr, struct inode *h_child_inode) +{ + int err, len; + unsigned int flags[AuHnLast], f; + unsigned char isdir, isroot, wh; + struct inode *dir; + struct au_hnotify_args *args; + char *p, *h_child_name; + + err = 0; + AuDebugOn(!hnotify || !hnotify->hn_aufs_inode); + dir = igrab(hnotify->hn_aufs_inode); + if (!dir) + goto out; + + isroot = (dir->i_ino == AUFS_ROOT_INO); + wh = 0; + h_child_name = (void *)h_child_qstr->name; + len = h_child_qstr->len; + if (h_child_name) { + if (len > AUFS_WH_PFX_LEN + && !memcmp(h_child_name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + h_child_name += AUFS_WH_PFX_LEN; + len -= AUFS_WH_PFX_LEN; + wh = 1; + } + } + + isdir = 0; + if (h_child_inode) + isdir = !!S_ISDIR(h_child_inode->i_mode); + flags[AuHn_PARENT] = AuHnJob_ISDIR; + flags[AuHn_CHILD] = 0; + if (isdir) + flags[AuHn_CHILD] = AuHnJob_ISDIR; + au_fset_hnjob(flags[AuHn_PARENT], DIRENT); + au_fset_hnjob(flags[AuHn_CHILD], GEN); + switch (mask & FS_EVENTS_POSS_ON_CHILD) { + case FS_MOVED_FROM: + case FS_MOVED_TO: + au_fset_hnjob(flags[AuHn_CHILD], XINO0); + au_fset_hnjob(flags[AuHn_CHILD], MNTPNT); + /*FALLTHROUGH*/ + case FS_CREATE: + AuDebugOn(!h_child_name); + break; + + case FS_DELETE: + /* + * aufs never be able to get this child inode. + * revalidation should be in d_revalidate() + * by checking i_nlink, i_generation or d_unhashed(). + */ + AuDebugOn(!h_child_name); + au_fset_hnjob(flags[AuHn_CHILD], TRYXINO0); + au_fset_hnjob(flags[AuHn_CHILD], MNTPNT); + break; + + default: + AuDebugOn(1); + } + + if (wh) + h_child_inode = NULL; + + err = -ENOMEM; + /* iput() and kfree() will be called in au_hnotify() */ + args = kmalloc(sizeof(*args) + len + 1, GFP_NOFS); + if (unlikely(!args)) { + AuErr1("no memory\n"); + iput(dir); + goto out; + } + args->flags[AuHn_PARENT] = flags[AuHn_PARENT]; + args->flags[AuHn_CHILD] = flags[AuHn_CHILD]; + args->mask = mask; + args->dir = dir; + args->h_dir = igrab(h_dir); + if (h_child_inode) + h_child_inode = igrab(h_child_inode); /* can be NULL */ + args->h_child_inode = h_child_inode; + args->h_child_nlen = len; + if (len) { + p = (void *)args; + p += sizeof(*args); + memcpy(p, h_child_name, len); + p[len] = 0; + } + + /* NFS fires the event for silly-renamed one from kworker */ + f = 0; + if (!dir->i_nlink + || (au_test_nfs(h_dir->i_sb) && (mask & FS_DELETE))) + f = AuWkq_NEST; + err = au_wkq_nowait(au_hn_bh, args, dir->i_sb, f); + if (unlikely(err)) { + pr_err("wkq %d\n", err); + iput(args->h_child_inode); + iput(args->h_dir); + iput(args->dir); + kfree(args); + } + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +int au_hnotify_reset_br(unsigned int udba, struct au_branch *br, int perm) +{ + int err; + + AuDebugOn(!(udba & AuOptMask_UDBA)); + + err = 0; + if (au_hnotify_op.reset_br) + err = au_hnotify_op.reset_br(udba, br, perm); + + return err; +} + +int au_hnotify_init_br(struct au_branch *br, int perm) +{ + int err; + + err = 0; + if (au_hnotify_op.init_br) + err = au_hnotify_op.init_br(br, perm); + + return err; +} + +void au_hnotify_fin_br(struct au_branch *br) +{ + if (au_hnotify_op.fin_br) + au_hnotify_op.fin_br(br); +} + +static void au_hn_destroy_cache(void) +{ + kmem_cache_destroy(au_cache[AuCache_HNOTIFY]); + au_cache[AuCache_HNOTIFY] = NULL; +} + +int __init au_hnotify_init(void) +{ + int err; + + err = -ENOMEM; + au_cache[AuCache_HNOTIFY] = AuCache(au_hnotify); + if (au_cache[AuCache_HNOTIFY]) { + err = 0; + if (au_hnotify_op.init) + err = au_hnotify_op.init(); + if (unlikely(err)) + au_hn_destroy_cache(); + } + AuTraceErr(err); + return err; +} + +void au_hnotify_fin(void) +{ + if (au_hnotify_op.fin) + au_hnotify_op.fin(); + + /* cf. au_cache_fin() */ + if (au_cache[AuCache_HNOTIFY]) + au_hn_destroy_cache(); +} --- linux-aws-4.15.0.orig/fs/aufs/i_op.c +++ linux-aws-4.15.0/fs/aufs/i_op.c @@ -0,0 +1,1459 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode operations (except add/del/rename) + */ + +#include +#include +#include +#include +#include "aufs.h" + +static int h_permission(struct inode *h_inode, int mask, + struct path *h_path, int brperm) +{ + int err; + const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); + + err = -EPERM; + if (write_mask && IS_IMMUTABLE(h_inode)) + goto out; + + err = -EACCES; + if (((mask & MAY_EXEC) + && S_ISREG(h_inode->i_mode) + && (path_noexec(h_path) + || !(h_inode->i_mode & S_IXUGO)))) + goto out; + + /* + * - skip the lower fs test in the case of write to ro branch. + * - nfs dir permission write check is optimized, but a policy for + * link/rename requires a real check. + * - nfs always sets SB_POSIXACL regardless its mount option 'noacl.' + * in this case, generic_permission() returns -EOPNOTSUPP. + */ + if ((write_mask && !au_br_writable(brperm)) + || (au_test_nfs(h_inode->i_sb) && S_ISDIR(h_inode->i_mode) + && write_mask && !(mask & MAY_READ)) + || !h_inode->i_op->permission) { + /* AuLabel(generic_permission); */ + /* AuDbg("get_acl %pf\n", h_inode->i_op->get_acl); */ + err = generic_permission(h_inode, mask); + if (err == -EOPNOTSUPP && au_test_nfs_noacl(h_inode)) + err = h_inode->i_op->permission(h_inode, mask); + AuTraceErr(err); + } else { + /* AuLabel(h_inode->permission); */ + err = h_inode->i_op->permission(h_inode, mask); + AuTraceErr(err); + } + + if (!err) + err = devcgroup_inode_permission(h_inode, mask); + if (!err) + err = security_inode_permission(h_inode, mask); + +#if 0 + if (!err) { + /* todo: do we need to call ima_path_check()? */ + struct path h_path = { + .dentry = + .mnt = h_mnt + }; + err = ima_path_check(&h_path, + mask & (MAY_READ | MAY_WRITE | MAY_EXEC), + IMA_COUNT_LEAVE); + } +#endif + +out: + return err; +} + +static int aufs_permission(struct inode *inode, int mask) +{ + int err; + aufs_bindex_t bindex, bbot; + const unsigned char isdir = !!S_ISDIR(inode->i_mode), + write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); + struct inode *h_inode; + struct super_block *sb; + struct au_branch *br; + + /* todo: support rcu-walk? */ + if (mask & MAY_NOT_BLOCK) + return -ECHILD; + + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH); + ii_read_lock_child(inode); +#if 0 + err = au_iigen_test(inode, au_sigen(sb)); + if (unlikely(err)) + goto out; +#endif + + if (!isdir + || write_mask + || au_opt_test(au_mntflags(sb), DIRPERM1)) { + err = au_busy_or_stale(); + h_inode = au_h_iptr(inode, au_ibtop(inode)); + if (unlikely(!h_inode + || (h_inode->i_mode & S_IFMT) + != (inode->i_mode & S_IFMT))) + goto out; + + err = 0; + bindex = au_ibtop(inode); + br = au_sbr(sb, bindex); + err = h_permission(h_inode, mask, &br->br_path, br->br_perm); + if (write_mask + && !err + && !special_file(h_inode->i_mode)) { + /* test whether the upper writable branch exists */ + err = -EROFS; + for (; bindex >= 0; bindex--) + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = 0; + break; + } + } + goto out; + } + + /* non-write to dir */ + err = 0; + bbot = au_ibbot(inode); + for (bindex = au_ibtop(inode); !err && bindex <= bbot; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode) { + err = au_busy_or_stale(); + if (unlikely(!S_ISDIR(h_inode->i_mode))) + break; + + br = au_sbr(sb, bindex); + err = h_permission(h_inode, mask, &br->br_path, + br->br_perm); + } + } + +out: + ii_read_unlock(inode); + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags) +{ + struct dentry *ret, *parent; + struct inode *inode; + struct super_block *sb; + int err, npositive; + + IMustLock(dir); + + /* todo: support rcu-walk? */ + ret = ERR_PTR(-ECHILD); + if (flags & LOOKUP_RCU) + goto out; + + ret = ERR_PTR(-ENAMETOOLONG); + if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + goto out; + + sb = dir->i_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + ret = ERR_PTR(err); + if (unlikely(err)) + goto out; + + err = au_di_init(dentry); + ret = ERR_PTR(err); + if (unlikely(err)) + goto out_si; + + inode = NULL; + npositive = 0; /* suppress a warning */ + parent = dentry->d_parent; /* dir inode is locked */ + di_read_lock_parent(parent, AuLock_IR); + err = au_alive_dir(parent); + if (!err) + err = au_digen_test(parent, au_sigen(sb)); + if (!err) { + /* regardless LOOKUP_CREATE, always ALLOW_NEG */ + npositive = au_lkup_dentry(dentry, au_dbtop(parent), + AuLkup_ALLOW_NEG); + err = npositive; + } + di_read_unlock(parent, AuLock_IR); + ret = ERR_PTR(err); + if (unlikely(err < 0)) + goto out_unlock; + + if (npositive) { + inode = au_new_inode(dentry, /*must_new*/0); + if (IS_ERR(inode)) { + ret = (void *)inode; + inode = NULL; + goto out_unlock; + } + } + + if (inode) + atomic_inc(&inode->i_count); + ret = d_splice_alias(inode, dentry); +#if 0 + if (unlikely(d_need_lookup(dentry))) { + spin_lock(&dentry->d_lock); + dentry->d_flags &= ~DCACHE_NEED_LOOKUP; + spin_unlock(&dentry->d_lock); + } else +#endif + if (inode) { + if (!IS_ERR(ret)) { + iput(inode); + if (ret && ret != dentry) + ii_write_unlock(inode); + } else { + ii_write_unlock(inode); + iput(inode); + inode = NULL; + } + } + +out_unlock: + di_write_unlock(dentry); +out_si: + si_read_unlock(sb); +out: + return ret; +} + +/* ---------------------------------------------------------------------- */ + +struct aopen_node { + struct hlist_bl_node hblist; + struct file *file, *h_file; +}; + +static int au_do_aopen(struct inode *inode, struct file *file) +{ + struct hlist_bl_head *aopen; + struct hlist_bl_node *pos; + struct aopen_node *node; + struct au_do_open_args args = { + .aopen = 1, + .open = au_do_open_nondir + }; + + aopen = &au_sbi(inode->i_sb)->si_aopen; + hlist_bl_lock(aopen); + hlist_bl_for_each_entry(node, pos, aopen, hblist) + if (node->file == file) { + args.h_file = node->h_file; + break; + } + hlist_bl_unlock(aopen); + /* AuDebugOn(!args.h_file); */ + + return au_do_open(file, &args); +} + +static int aufs_atomic_open(struct inode *dir, struct dentry *dentry, + struct file *file, unsigned int open_flag, + umode_t create_mode, int *opened) +{ + int err, unlocked, h_opened = *opened; + unsigned int lkup_flags; + struct dentry *parent, *d; + struct hlist_bl_head *aopen; + struct vfsub_aopen_args args = { + .open_flag = open_flag, + .create_mode = create_mode, + .opened = &h_opened + }; + struct aopen_node aopen_node = { + .file = file + }; + + IMustLock(dir); + AuDbg("open_flag 0%o\n", open_flag); + AuDbgDentry(dentry); + + err = 0; + if (!au_di(dentry)) { + lkup_flags = LOOKUP_OPEN; + if (open_flag & O_CREAT) + lkup_flags |= LOOKUP_CREATE; + d = aufs_lookup(dir, dentry, lkup_flags); + if (IS_ERR(d)) { + err = PTR_ERR(d); + AuTraceErr(err); + goto out; + } else if (d) { + /* + * obsoleted dentry found. + * another error will be returned later. + */ + d_drop(d); + AuDbgDentry(d); + dput(d); + } + AuDbgDentry(dentry); + } + + if (d_is_positive(dentry) + || d_unhashed(dentry) + || d_unlinked(dentry) + || !(open_flag & O_CREAT)) + goto out_no_open; + + unlocked = 0; + err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_GEN); + if (unlikely(err)) + goto out; + + parent = dentry->d_parent; /* dir is locked */ + di_write_lock_parent(parent); + err = au_lkup_dentry(dentry, /*btop*/0, AuLkup_ALLOW_NEG); + if (unlikely(err)) + goto out_unlock; + + AuDbgDentry(dentry); + if (d_is_positive(dentry)) + goto out_unlock; + + args.file = get_empty_filp(); + err = PTR_ERR(args.file); + if (IS_ERR(args.file)) + goto out_unlock; + + args.file->f_flags = file->f_flags; + err = au_aopen_or_create(dir, dentry, &args); + AuTraceErr(err); + AuDbgFile(args.file); + if (unlikely(err < 0)) { + if (h_opened & FILE_OPENED) + fput(args.file); + else + put_filp(args.file); + goto out_unlock; + } + di_write_unlock(parent); + di_write_unlock(dentry); + unlocked = 1; + + /* some filesystems don't set FILE_CREATED while succeeded? */ + *opened |= FILE_CREATED; + if (h_opened & FILE_OPENED) + aopen_node.h_file = args.file; + else { + put_filp(args.file); + args.file = NULL; + } + aopen = &au_sbi(dir->i_sb)->si_aopen; + au_hbl_add(&aopen_node.hblist, aopen); + err = finish_open(file, dentry, au_do_aopen, opened); + au_hbl_del(&aopen_node.hblist, aopen); + AuTraceErr(err); + AuDbgFile(file); + if (aopen_node.h_file) + fput(aopen_node.h_file); + +out_unlock: + if (unlocked) + si_read_unlock(dentry->d_sb); + else { + di_write_unlock(parent); + aufs_read_unlock(dentry, AuLock_DW); + } + AuDbgDentry(dentry); + if (unlikely(err < 0)) + goto out; +out_no_open: + if (err >= 0 && !(*opened & FILE_CREATED)) { + AuLabel(out_no_open); + dget(dentry); + err = finish_no_open(file, dentry); + } +out: + AuDbg("%pd%s%s\n", dentry, + (*opened & FILE_CREATED) ? " created" : "", + (*opened & FILE_OPENED) ? " opened" : ""); + AuTraceErr(err); + return err; +} + + +/* ---------------------------------------------------------------------- */ + +static int au_wr_dir_cpup(struct dentry *dentry, struct dentry *parent, + const unsigned char add_entry, aufs_bindex_t bcpup, + aufs_bindex_t btop) +{ + int err; + struct dentry *h_parent; + struct inode *h_dir; + + if (add_entry) + IMustLock(d_inode(parent)); + else + di_write_lock_parent(parent); + + err = 0; + if (!au_h_dptr(parent, bcpup)) { + if (btop > bcpup) + err = au_cpup_dirs(dentry, bcpup); + else if (btop < bcpup) + err = au_cpdown_dirs(dentry, bcpup); + else + BUG(); + } + if (!err && add_entry && !au_ftest_wrdir(add_entry, TMPFILE)) { + h_parent = au_h_dptr(parent, bcpup); + h_dir = d_inode(h_parent); + vfsub_inode_lock_shared_nested(h_dir, AuLsc_I_PARENT); + err = au_lkup_neg(dentry, bcpup, /*wh*/0); + /* todo: no unlock here */ + inode_unlock_shared(h_dir); + + AuDbg("bcpup %d\n", bcpup); + if (!err) { + if (d_really_is_negative(dentry)) + au_set_h_dptr(dentry, btop, NULL); + au_update_dbrange(dentry, /*do_put_zero*/0); + } + } + + if (!add_entry) + di_write_unlock(parent); + if (!err) + err = bcpup; /* success */ + + AuTraceErr(err); + return err; +} + +/* + * decide the branch and the parent dir where we will create a new entry. + * returns new bindex or an error. + * copyup the parent dir if needed. + */ +int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, + struct au_wr_dir_args *args) +{ + int err; + unsigned int flags; + aufs_bindex_t bcpup, btop, src_btop; + const unsigned char add_entry + = au_ftest_wrdir(args->flags, ADD_ENTRY) + | au_ftest_wrdir(args->flags, TMPFILE); + struct super_block *sb; + struct dentry *parent; + struct au_sbinfo *sbinfo; + + sb = dentry->d_sb; + sbinfo = au_sbi(sb); + parent = dget_parent(dentry); + btop = au_dbtop(dentry); + bcpup = btop; + if (args->force_btgt < 0) { + if (src_dentry) { + src_btop = au_dbtop(src_dentry); + if (src_btop < btop) + bcpup = src_btop; + } else if (add_entry) { + flags = 0; + if (au_ftest_wrdir(args->flags, ISDIR)) + au_fset_wbr(flags, DIR); + err = AuWbrCreate(sbinfo, dentry, flags); + bcpup = err; + } + + if (bcpup < 0 || au_test_ro(sb, bcpup, d_inode(dentry))) { + if (add_entry) + err = AuWbrCopyup(sbinfo, dentry); + else { + if (!IS_ROOT(dentry)) { + di_read_lock_parent(parent, !AuLock_IR); + err = AuWbrCopyup(sbinfo, dentry); + di_read_unlock(parent, !AuLock_IR); + } else + err = AuWbrCopyup(sbinfo, dentry); + } + bcpup = err; + if (unlikely(err < 0)) + goto out; + } + } else { + bcpup = args->force_btgt; + AuDebugOn(au_test_ro(sb, bcpup, d_inode(dentry))); + } + + AuDbg("btop %d, bcpup %d\n", btop, bcpup); + err = bcpup; + if (bcpup == btop) + goto out; /* success */ + + /* copyup the new parent into the branch we process */ + err = au_wr_dir_cpup(dentry, parent, add_entry, bcpup, btop); + if (err >= 0) { + if (d_really_is_negative(dentry)) { + au_set_h_dptr(dentry, btop, NULL); + au_set_dbtop(dentry, bcpup); + au_set_dbbot(dentry, bcpup); + } + AuDebugOn(add_entry + && !au_ftest_wrdir(args->flags, TMPFILE) + && !au_h_dptr(dentry, bcpup)); + } + +out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_pin_hdir_unlock(struct au_pin *p) +{ + if (p->hdir) + au_hn_inode_unlock(p->hdir); +} + +int au_pin_hdir_lock(struct au_pin *p) +{ + int err; + + err = 0; + if (!p->hdir) + goto out; + + /* even if an error happens later, keep this lock */ + au_hn_inode_lock_nested(p->hdir, p->lsc_hi); + + err = -EBUSY; + if (unlikely(p->hdir->hi_inode != d_inode(p->h_parent))) + goto out; + + err = 0; + if (p->h_dentry) + err = au_h_verify(p->h_dentry, p->udba, p->hdir->hi_inode, + p->h_parent, p->br); + +out: + return err; +} + +int au_pin_hdir_relock(struct au_pin *p) +{ + int err, i; + struct inode *h_i; + struct dentry *h_d[] = { + p->h_dentry, + p->h_parent + }; + + err = au_pin_hdir_lock(p); + if (unlikely(err)) + goto out; + + for (i = 0; !err && i < sizeof(h_d)/sizeof(*h_d); i++) { + if (!h_d[i]) + continue; + if (d_is_positive(h_d[i])) { + h_i = d_inode(h_d[i]); + err = !h_i->i_nlink; + } + } + +out: + return err; +} + +static void au_pin_hdir_set_owner(struct au_pin *p, struct task_struct *task) +{ +#if !defined(CONFIG_RWSEM_GENERIC_SPINLOCK) && defined(CONFIG_RWSEM_SPIN_ON_OWNER) + p->hdir->hi_inode->i_rwsem.owner = task; +#endif +} + +void au_pin_hdir_acquire_nest(struct au_pin *p) +{ + if (p->hdir) { + rwsem_acquire_nest(&p->hdir->hi_inode->i_rwsem.dep_map, + p->lsc_hi, 0, NULL, _RET_IP_); + au_pin_hdir_set_owner(p, current); + } +} + +void au_pin_hdir_release(struct au_pin *p) +{ + if (p->hdir) { + au_pin_hdir_set_owner(p, p->task); + rwsem_release(&p->hdir->hi_inode->i_rwsem.dep_map, 1, _RET_IP_); + } +} + +struct dentry *au_pinned_h_parent(struct au_pin *pin) +{ + if (pin && pin->parent) + return au_h_dptr(pin->parent, pin->bindex); + return NULL; +} + +void au_unpin(struct au_pin *p) +{ + if (p->hdir) + au_pin_hdir_unlock(p); + if (p->h_mnt && au_ftest_pin(p->flags, MNT_WRITE)) + vfsub_mnt_drop_write(p->h_mnt); + if (!p->hdir) + return; + + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_unlock(p->parent, AuLock_IR); + iput(p->hdir->hi_inode); + dput(p->parent); + p->parent = NULL; + p->hdir = NULL; + p->h_mnt = NULL; + /* do not clear p->task */ +} + +int au_do_pin(struct au_pin *p) +{ + int err; + struct super_block *sb; + struct inode *h_dir; + + err = 0; + sb = p->dentry->d_sb; + p->br = au_sbr(sb, p->bindex); + if (IS_ROOT(p->dentry)) { + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = au_br_mnt(p->br); + err = vfsub_mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_err; + } + } + goto out; + } + + p->h_dentry = NULL; + if (p->bindex <= au_dbbot(p->dentry)) + p->h_dentry = au_h_dptr(p->dentry, p->bindex); + + p->parent = dget_parent(p->dentry); + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_lock(p->parent, AuLock_IR, p->lsc_di); + + h_dir = NULL; + p->h_parent = au_h_dptr(p->parent, p->bindex); + p->hdir = au_hi(d_inode(p->parent), p->bindex); + if (p->hdir) + h_dir = p->hdir->hi_inode; + + /* + * udba case, or + * if DI_LOCKED is not set, then p->parent may be different + * and h_parent can be NULL. + */ + if (unlikely(!p->hdir || !h_dir || !p->h_parent)) { + err = -EBUSY; + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_unlock(p->parent, AuLock_IR); + dput(p->parent); + p->parent = NULL; + goto out_err; + } + + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = au_br_mnt(p->br); + err = vfsub_mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + if (!au_ftest_pin(p->flags, DI_LOCKED)) + di_read_unlock(p->parent, AuLock_IR); + dput(p->parent); + p->parent = NULL; + goto out_err; + } + } + + au_igrab(h_dir); + err = au_pin_hdir_lock(p); + if (!err) + goto out; /* success */ + + au_unpin(p); + +out_err: + pr_err("err %d\n", err); + err = au_busy_or_stale(); +out: + return err; +} + +void au_pin_init(struct au_pin *p, struct dentry *dentry, + aufs_bindex_t bindex, int lsc_di, int lsc_hi, + unsigned int udba, unsigned char flags) +{ + p->dentry = dentry; + p->udba = udba; + p->lsc_di = lsc_di; + p->lsc_hi = lsc_hi; + p->flags = flags; + p->bindex = bindex; + + p->parent = NULL; + p->hdir = NULL; + p->h_mnt = NULL; + + p->h_dentry = NULL; + p->h_parent = NULL; + p->br = NULL; + p->task = current; +} + +int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, + unsigned int udba, unsigned char flags) +{ + au_pin_init(pin, dentry, bindex, AuLsc_DI_PARENT, AuLsc_I_PARENT2, + udba, flags); + return au_do_pin(pin); +} + +/* ---------------------------------------------------------------------- */ + +/* + * ->setattr() and ->getattr() are called in various cases. + * chmod, stat: dentry is revalidated. + * fchmod, fstat: file and dentry are not revalidated, additionally they may be + * unhashed. + * for ->setattr(), ia->ia_file is passed from ftruncate only. + */ +/* todo: consolidate with do_refresh() and simple_reval_dpath() */ +int au_reval_for_attr(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct dentry *parent; + + err = 0; + if (au_digen_test(dentry, sigen)) { + parent = dget_parent(dentry); + di_read_lock_parent(parent, AuLock_IR); + err = au_refresh_dentry(dentry, parent); + di_read_unlock(parent, AuLock_IR); + dput(parent); + } + + AuTraceErr(err); + return err; +} + +int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia, + struct au_icpup_args *a) +{ + int err; + loff_t sz; + aufs_bindex_t btop, ibtop; + struct dentry *hi_wh, *parent; + struct inode *inode; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = 0 + }; + + if (d_is_dir(dentry)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + /* plink or hi_wh() case */ + btop = au_dbtop(dentry); + inode = d_inode(dentry); + ibtop = au_ibtop(inode); + if (btop != ibtop && !au_test_ro(inode->i_sb, ibtop, inode)) + wr_dir_args.force_btgt = ibtop; + err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); + if (unlikely(err < 0)) + goto out; + a->btgt = err; + if (err != btop) + au_fset_icpup(a->flags, DID_CPUP); + + err = 0; + a->pin_flags = AuPin_MNT_WRITE; + parent = NULL; + if (!IS_ROOT(dentry)) { + au_fset_pin(a->pin_flags, DI_LOCKED); + parent = dget_parent(dentry); + di_write_lock_parent(parent); + } + + err = au_pin(&a->pin, dentry, a->btgt, a->udba, a->pin_flags); + if (unlikely(err)) + goto out_parent; + + sz = -1; + a->h_path.dentry = au_h_dptr(dentry, btop); + a->h_inode = d_inode(a->h_path.dentry); + if (ia && (ia->ia_valid & ATTR_SIZE)) { + vfsub_inode_lock_shared_nested(a->h_inode, AuLsc_I_CHILD); + if (ia->ia_size < i_size_read(a->h_inode)) + sz = ia->ia_size; + inode_unlock_shared(a->h_inode); + } + + hi_wh = NULL; + if (au_ftest_icpup(a->flags, DID_CPUP) && d_unlinked(dentry)) { + hi_wh = au_hi_wh(inode, a->btgt); + if (!hi_wh) { + struct au_cp_generic cpg = { + .dentry = dentry, + .bdst = a->btgt, + .bsrc = -1, + .len = sz, + .pin = &a->pin + }; + err = au_sio_cpup_wh(&cpg, /*file*/NULL); + if (unlikely(err)) + goto out_unlock; + hi_wh = au_hi_wh(inode, a->btgt); + /* todo: revalidate hi_wh? */ + } + } + + if (parent) { + au_pin_set_parent_lflag(&a->pin, /*lflag*/0); + di_downgrade_lock(parent, AuLock_IR); + dput(parent); + parent = NULL; + } + if (!au_ftest_icpup(a->flags, DID_CPUP)) + goto out; /* success */ + + if (!d_unhashed(dentry)) { + struct au_cp_generic cpg = { + .dentry = dentry, + .bdst = a->btgt, + .bsrc = btop, + .len = sz, + .pin = &a->pin, + .flags = AuCpup_DTIME | AuCpup_HOPEN + }; + err = au_sio_cpup_simple(&cpg); + if (!err) + a->h_path.dentry = au_h_dptr(dentry, a->btgt); + } else if (!hi_wh) + a->h_path.dentry = au_h_dptr(dentry, a->btgt); + else + a->h_path.dentry = hi_wh; /* do not dget here */ + +out_unlock: + a->h_inode = d_inode(a->h_path.dentry); + if (!err) + goto out; /* success */ + au_unpin(&a->pin); +out_parent: + if (parent) { + di_write_unlock(parent); + dput(parent); + } +out: + if (!err) + inode_lock_nested(a->h_inode, AuLsc_I_CHILD); + return err; +} + +static int aufs_setattr(struct dentry *dentry, struct iattr *ia) +{ + int err; + struct inode *inode, *delegated; + struct super_block *sb; + struct file *file; + struct au_icpup_args *a; + + inode = d_inode(dentry); + IMustLock(inode); + + err = setattr_prepare(dentry, ia); + if (unlikely(err)) + goto out; + + err = -ENOMEM; + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + if (ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) + ia->ia_valid &= ~ATTR_MODE; + + file = NULL; + sb = dentry->d_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out_kfree; + + if (ia->ia_valid & ATTR_FILE) { + /* currently ftruncate(2) only */ + AuDebugOn(!d_is_reg(dentry)); + file = ia->ia_file; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1, + /*fi_lsc*/0); + if (unlikely(err)) + goto out_si; + ia->ia_file = au_hf_top(file); + a->udba = AuOpt_UDBA_NONE; + } else { + /* fchmod() doesn't pass ia_file */ + a->udba = au_opt_udba(sb); + di_write_lock_child(dentry); + /* no d_unlinked(), to set UDBA_NONE for root */ + if (d_unhashed(dentry)) + a->udba = AuOpt_UDBA_NONE; + if (a->udba != AuOpt_UDBA_NONE) { + AuDebugOn(IS_ROOT(dentry)); + err = au_reval_for_attr(dentry, au_sigen(sb)); + if (unlikely(err)) + goto out_dentry; + } + } + + err = au_pin_and_icpup(dentry, ia, a); + if (unlikely(err < 0)) + goto out_dentry; + if (au_ftest_icpup(a->flags, DID_CPUP)) { + ia->ia_file = NULL; + ia->ia_valid &= ~ATTR_FILE; + } + + a->h_path.mnt = au_sbr_mnt(sb, a->btgt); + if ((ia->ia_valid & (ATTR_MODE | ATTR_CTIME)) + == (ATTR_MODE | ATTR_CTIME)) { + err = security_path_chmod(&a->h_path, ia->ia_mode); + if (unlikely(err)) + goto out_unlock; + } else if ((ia->ia_valid & (ATTR_UID | ATTR_GID)) + && (ia->ia_valid & ATTR_CTIME)) { + err = security_path_chown(&a->h_path, ia->ia_uid, ia->ia_gid); + if (unlikely(err)) + goto out_unlock; + } + + if (ia->ia_valid & ATTR_SIZE) { + struct file *f; + + if (ia->ia_size < i_size_read(inode)) + /* unmap only */ + truncate_setsize(inode, ia->ia_size); + + f = NULL; + if (ia->ia_valid & ATTR_FILE) + f = ia->ia_file; + inode_unlock(a->h_inode); + err = vfsub_trunc(&a->h_path, ia->ia_size, ia->ia_valid, f); + inode_lock_nested(a->h_inode, AuLsc_I_CHILD); + } else { + delegated = NULL; + while (1) { + err = vfsub_notify_change(&a->h_path, ia, &delegated); + if (delegated) { + err = break_deleg_wait(&delegated); + if (!err) + continue; + } + break; + } + } + /* + * regardless aufs 'acl' option setting. + * why don't all acl-aware fs call this func from their ->setattr()? + */ + if (!err && (ia->ia_valid & ATTR_MODE)) + err = vfsub_acl_chmod(a->h_inode, ia->ia_mode); + if (!err) + au_cpup_attr_changeable(inode); + +out_unlock: + inode_unlock(a->h_inode); + au_unpin(&a->pin); + if (unlikely(err)) + au_update_dbtop(dentry); +out_dentry: + di_write_unlock(dentry); + if (file) { + fi_write_unlock(file); + ia->ia_file = file; + ia->ia_valid |= ATTR_FILE; + } +out_si: + si_read_unlock(sb); +out_kfree: + kfree(a); +out: + AuTraceErr(err); + return err; +} + +#if IS_ENABLED(CONFIG_AUFS_XATTR) || IS_ENABLED(CONFIG_FS_POSIX_ACL) +static int au_h_path_to_set_attr(struct dentry *dentry, + struct au_icpup_args *a, struct path *h_path) +{ + int err; + struct super_block *sb; + + sb = dentry->d_sb; + a->udba = au_opt_udba(sb); + /* no d_unlinked(), to set UDBA_NONE for root */ + if (d_unhashed(dentry)) + a->udba = AuOpt_UDBA_NONE; + if (a->udba != AuOpt_UDBA_NONE) { + AuDebugOn(IS_ROOT(dentry)); + err = au_reval_for_attr(dentry, au_sigen(sb)); + if (unlikely(err)) + goto out; + } + err = au_pin_and_icpup(dentry, /*ia*/NULL, a); + if (unlikely(err < 0)) + goto out; + + h_path->dentry = a->h_path.dentry; + h_path->mnt = au_sbr_mnt(sb, a->btgt); + +out: + return err; +} + +ssize_t au_sxattr(struct dentry *dentry, struct inode *inode, + struct au_sxattr *arg) +{ + int err; + struct path h_path; + struct super_block *sb; + struct au_icpup_args *a; + struct inode *h_inode; + + IMustLock(inode); + + err = -ENOMEM; + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + sb = dentry->d_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out_kfree; + + h_path.dentry = NULL; /* silence gcc */ + di_write_lock_child(dentry); + err = au_h_path_to_set_attr(dentry, a, &h_path); + if (unlikely(err)) + goto out_di; + + inode_unlock(a->h_inode); + switch (arg->type) { + case AU_XATTR_SET: + AuDebugOn(d_is_negative(h_path.dentry)); + err = vfsub_setxattr(h_path.dentry, + arg->u.set.name, arg->u.set.value, + arg->u.set.size, arg->u.set.flags); + break; + case AU_ACL_SET: + err = -EOPNOTSUPP; + h_inode = d_inode(h_path.dentry); + if (h_inode->i_op->set_acl) + /* this will call posix_acl_update_mode */ + err = h_inode->i_op->set_acl(h_inode, + arg->u.acl_set.acl, + arg->u.acl_set.type); + break; + } + if (!err) + au_cpup_attr_timesizes(inode); + + au_unpin(&a->pin); + if (unlikely(err)) + au_update_dbtop(dentry); + +out_di: + di_write_unlock(dentry); + si_read_unlock(sb); +out_kfree: + kfree(a); +out: + AuTraceErr(err); + return err; +} +#endif + +static void au_refresh_iattr(struct inode *inode, struct kstat *st, + unsigned int nlink) +{ + unsigned int n; + + inode->i_mode = st->mode; + /* don't i_[ug]id_write() here */ + inode->i_uid = st->uid; + inode->i_gid = st->gid; + inode->i_atime = st->atime; + inode->i_mtime = st->mtime; + inode->i_ctime = st->ctime; + + au_cpup_attr_nlink(inode, /*force*/0); + if (S_ISDIR(inode->i_mode)) { + n = inode->i_nlink; + n -= nlink; + n += st->nlink; + smp_mb(); /* for i_nlink */ + /* 0 can happen */ + set_nlink(inode, n); + } + + spin_lock(&inode->i_lock); + inode->i_blocks = st->blocks; + i_size_write(inode, st->size); + spin_unlock(&inode->i_lock); +} + +/* + * common routine for aufs_getattr() and au_getxattr(). + * returns zero or negative (an error). + * @dentry will be read-locked in success. + */ +int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path, + int locked) +{ + int err; + unsigned int mnt_flags, sigen; + unsigned char udba_none; + aufs_bindex_t bindex; + struct super_block *sb, *h_sb; + struct inode *inode; + + h_path->mnt = NULL; + h_path->dentry = NULL; + + err = 0; + sb = dentry->d_sb; + mnt_flags = au_mntflags(sb); + udba_none = !!au_opt_test(mnt_flags, UDBA_NONE); + + if (unlikely(locked)) + goto body; /* skip locking dinfo */ + + /* support fstat(2) */ + if (!d_unlinked(dentry) && !udba_none) { + sigen = au_sigen(sb); + err = au_digen_test(dentry, sigen); + if (!err) { + di_read_lock_child(dentry, AuLock_IR); + err = au_dbrange_test(dentry); + if (unlikely(err)) { + di_read_unlock(dentry, AuLock_IR); + goto out; + } + } else { + AuDebugOn(IS_ROOT(dentry)); + di_write_lock_child(dentry); + err = au_dbrange_test(dentry); + if (!err) + err = au_reval_for_attr(dentry, sigen); + if (!err) + di_downgrade_lock(dentry, AuLock_IR); + else { + di_write_unlock(dentry); + goto out; + } + } + } else + di_read_lock_child(dentry, AuLock_IR); + +body: + inode = d_inode(dentry); + bindex = au_ibtop(inode); + h_path->mnt = au_sbr_mnt(sb, bindex); + h_sb = h_path->mnt->mnt_sb; + if (!force + && !au_test_fs_bad_iattr(h_sb) + && udba_none) + goto out; /* success */ + + if (au_dbtop(dentry) == bindex) + h_path->dentry = au_h_dptr(dentry, bindex); + else if (au_opt_test(mnt_flags, PLINK) && au_plink_test(inode)) { + h_path->dentry = au_plink_lkup(inode, bindex); + if (IS_ERR(h_path->dentry)) + /* pretending success */ + h_path->dentry = NULL; + else + dput(h_path->dentry); + } + +out: + return err; +} + +static int aufs_getattr(const struct path *path, struct kstat *st, + u32 request, unsigned int query) +{ + int err; + unsigned char positive; + struct path h_path; + struct dentry *dentry; + struct inode *inode; + struct super_block *sb; + + dentry = path->dentry; + inode = d_inode(dentry); + sb = dentry->d_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out; + err = au_h_path_getattr(dentry, /*force*/0, &h_path, /*locked*/0); + if (unlikely(err)) + goto out_si; + if (unlikely(!h_path.dentry)) + /* illegally overlapped or something */ + goto out_fill; /* pretending success */ + + positive = d_is_positive(h_path.dentry); + if (positive) + /* no vfsub version */ + err = vfs_getattr(&h_path, st, request, query); + if (!err) { + if (positive) + au_refresh_iattr(inode, st, + d_inode(h_path.dentry)->i_nlink); + goto out_fill; /* success */ + } + AuTraceErr(err); + goto out_di; + +out_fill: + generic_fillattr(inode, st); +out_di: + di_read_unlock(dentry, AuLock_IR); +out_si: + si_read_unlock(sb); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static const char *aufs_get_link(struct dentry *dentry, struct inode *inode, + struct delayed_call *done) +{ + const char *ret; + struct dentry *h_dentry; + struct inode *h_inode; + int err; + aufs_bindex_t bindex; + + ret = NULL; /* suppress a warning */ + err = -ECHILD; + if (!dentry) + goto out; + + err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN); + if (unlikely(err)) + goto out; + + err = au_d_hashed_positive(dentry); + if (unlikely(err)) + goto out_unlock; + + err = -EINVAL; + inode = d_inode(dentry); + bindex = au_ibtop(inode); + h_inode = au_h_iptr(inode, bindex); + if (unlikely(!h_inode->i_op->get_link)) + goto out_unlock; + + err = -EBUSY; + h_dentry = NULL; + if (au_dbtop(dentry) <= bindex) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) + dget(h_dentry); + } + if (!h_dentry) { + h_dentry = d_find_any_alias(h_inode); + if (IS_ERR(h_dentry)) { + err = PTR_ERR(h_dentry); + goto out_unlock; + } + } + if (unlikely(!h_dentry)) + goto out_unlock; + + err = 0; + AuDbg("%pf\n", h_inode->i_op->get_link); + AuDbgDentry(h_dentry); + ret = vfs_get_link(h_dentry, done); + dput(h_dentry); + if (IS_ERR(ret)) + err = PTR_ERR(ret); + +out_unlock: + aufs_read_unlock(dentry, AuLock_IR); +out: + if (unlikely(err)) + ret = ERR_PTR(err); + AuTraceErrPtr(ret); + return ret; +} + +/* ---------------------------------------------------------------------- */ + +static int au_is_special(struct inode *inode) +{ + return (inode->i_mode & (S_IFBLK | S_IFCHR | S_IFIFO | S_IFSOCK)); +} + +static int aufs_update_time(struct inode *inode, struct timespec *ts, int flags) +{ + int err; + aufs_bindex_t bindex; + struct super_block *sb; + struct inode *h_inode; + struct vfsmount *h_mnt; + + sb = inode->i_sb; + WARN_ONCE((flags & S_ATIME) && !IS_NOATIME(inode), + "unexpected s_flags 0x%lx", sb->s_flags); + + /* mmap_sem might be acquired already, cf. aufs_mmap() */ + lockdep_off(); + si_read_lock(sb, AuLock_FLUSH); + ii_write_lock_child(inode); + + err = 0; + bindex = au_ibtop(inode); + h_inode = au_h_iptr(inode, bindex); + if (!au_test_ro(sb, bindex, inode)) { + h_mnt = au_sbr_mnt(sb, bindex); + err = vfsub_mnt_want_write(h_mnt); + if (!err) { + err = vfsub_update_time(h_inode, ts, flags); + vfsub_mnt_drop_write(h_mnt); + } + } else if (au_is_special(h_inode)) { + /* + * Never copy-up here. + * These special files may already be opened and used for + * communicating. If we copied it up, then the communication + * would be corrupted. + */ + AuWarn1("timestamps for i%lu are ignored " + "since it is on readonly branch (hi%lu).\n", + inode->i_ino, h_inode->i_ino); + } else if (flags & ~S_ATIME) { + err = -EIO; + AuIOErr1("unexpected flags 0x%x\n", flags); + AuDebugOn(1); + } + + if (!err) + au_cpup_attr_timesizes(inode); + ii_write_unlock(inode); + si_read_unlock(sb); + lockdep_on(); + + if (!err && (flags & S_VERSION)) + inode_inc_iversion(inode); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* no getattr version will be set by module.c:aufs_init() */ +struct inode_operations aufs_iop_nogetattr[AuIop_Last], + aufs_iop[] = { + [AuIop_SYMLINK] = { + .permission = aufs_permission, +#ifdef CONFIG_FS_POSIX_ACL + .get_acl = aufs_get_acl, + .set_acl = aufs_set_acl, /* unsupport for symlink? */ +#endif + + .setattr = aufs_setattr, + .getattr = aufs_getattr, + +#ifdef CONFIG_AUFS_XATTR + .listxattr = aufs_listxattr, +#endif + + .get_link = aufs_get_link, + + /* .update_time = aufs_update_time */ + }, + [AuIop_DIR] = { + .create = aufs_create, + .lookup = aufs_lookup, + .link = aufs_link, + .unlink = aufs_unlink, + .symlink = aufs_symlink, + .mkdir = aufs_mkdir, + .rmdir = aufs_rmdir, + .mknod = aufs_mknod, + .rename = aufs_rename, + + .permission = aufs_permission, +#ifdef CONFIG_FS_POSIX_ACL + .get_acl = aufs_get_acl, + .set_acl = aufs_set_acl, +#endif + + .setattr = aufs_setattr, + .getattr = aufs_getattr, + +#ifdef CONFIG_AUFS_XATTR + .listxattr = aufs_listxattr, +#endif + + .update_time = aufs_update_time, + .atomic_open = aufs_atomic_open, + .tmpfile = aufs_tmpfile + }, + [AuIop_OTHER] = { + .permission = aufs_permission, +#ifdef CONFIG_FS_POSIX_ACL + .get_acl = aufs_get_acl, + .set_acl = aufs_set_acl, +#endif + + .setattr = aufs_setattr, + .getattr = aufs_getattr, + +#ifdef CONFIG_AUFS_XATTR + .listxattr = aufs_listxattr, +#endif + + .update_time = aufs_update_time + } +}; --- linux-aws-4.15.0.orig/fs/aufs/i_op_add.c +++ linux-aws-4.15.0/fs/aufs/i_op_add.c @@ -0,0 +1,920 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode operations (add entry) + */ + +#include "aufs.h" + +/* + * final procedure of adding a new entry, except link(2). + * remove whiteout, instantiate, copyup the parent dir's times and size + * and update version. + * if it failed, re-create the removed whiteout. + */ +static int epilog(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct dentry *dentry) +{ + int err, rerr; + aufs_bindex_t bwh; + struct path h_path; + struct super_block *sb; + struct inode *inode, *h_dir; + struct dentry *wh; + + bwh = -1; + sb = dir->i_sb; + if (wh_dentry) { + h_dir = d_inode(wh_dentry->d_parent); /* dir inode is locked */ + IMustLock(h_dir); + AuDebugOn(au_h_iptr(dir, bindex) != h_dir); + bwh = au_dbwh(dentry); + h_path.dentry = wh_dentry; + h_path.mnt = au_sbr_mnt(sb, bindex); + err = au_wh_unlink_dentry(au_h_iptr(dir, bindex), &h_path, + dentry); + if (unlikely(err)) + goto out; + } + + inode = au_new_inode(dentry, /*must_new*/1); + if (!IS_ERR(inode)) { + d_instantiate(dentry, inode); + dir = d_inode(dentry->d_parent); /* dir inode is locked */ + IMustLock(dir); + au_dir_ts(dir, bindex); + dir->i_version++; + au_fhsm_wrote(sb, bindex, /*force*/0); + return 0; /* success */ + } + + err = PTR_ERR(inode); + if (!wh_dentry) + goto out; + + /* revert */ + /* dir inode is locked */ + wh = au_wh_create(dentry, bwh, wh_dentry->d_parent); + rerr = PTR_ERR(wh); + if (IS_ERR(wh)) { + AuIOErr("%pd reverting whiteout failed(%d, %d)\n", + dentry, err, rerr); + err = -EIO; + } else + dput(wh); + +out: + return err; +} + +static int au_d_may_add(struct dentry *dentry) +{ + int err; + + err = 0; + if (unlikely(d_unhashed(dentry))) + err = -ENOENT; + if (unlikely(d_really_is_positive(dentry))) + err = -EEXIST; + return err; +} + +/* + * simple tests for the adding inode operations. + * following the checks in vfs, plus the parent-child relationship. + */ +int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir) +{ + int err; + umode_t h_mode; + struct dentry *h_dentry; + struct inode *h_inode; + + err = -ENAMETOOLONG; + if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + goto out; + + h_dentry = au_h_dptr(dentry, bindex); + if (d_really_is_negative(dentry)) { + err = -EEXIST; + if (unlikely(d_is_positive(h_dentry))) + goto out; + } else { + /* rename(2) case */ + err = -EIO; + if (unlikely(d_is_negative(h_dentry))) + goto out; + h_inode = d_inode(h_dentry); + if (unlikely(!h_inode->i_nlink)) + goto out; + + h_mode = h_inode->i_mode; + if (!isdir) { + err = -EISDIR; + if (unlikely(S_ISDIR(h_mode))) + goto out; + } else if (unlikely(!S_ISDIR(h_mode))) { + err = -ENOTDIR; + goto out; + } + } + + err = 0; + /* expected parent dir is locked */ + if (unlikely(h_parent != h_dentry->d_parent)) + err = -EIO; + +out: + AuTraceErr(err); + return err; +} + +/* + * initial procedure of adding a new entry. + * prepare writable branch and the parent dir, lock it, + * and lookup whiteout for the new entry. + */ +static struct dentry* +lock_hdir_lkup_wh(struct dentry *dentry, struct au_dtime *dt, + struct dentry *src_dentry, struct au_pin *pin, + struct au_wr_dir_args *wr_dir_args) +{ + struct dentry *wh_dentry, *h_parent; + struct super_block *sb; + struct au_branch *br; + int err; + unsigned int udba; + aufs_bindex_t bcpup; + + AuDbg("%pd\n", dentry); + + err = au_wr_dir(dentry, src_dentry, wr_dir_args); + bcpup = err; + wh_dentry = ERR_PTR(err); + if (unlikely(err < 0)) + goto out; + + sb = dentry->d_sb; + udba = au_opt_udba(sb); + err = au_pin(pin, dentry, bcpup, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out; + + h_parent = au_pinned_h_parent(pin); + if (udba != AuOpt_UDBA_NONE + && au_dbtop(dentry) == bcpup) + err = au_may_add(dentry, bcpup, h_parent, + au_ftest_wrdir(wr_dir_args->flags, ISDIR)); + else if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + err = -ENAMETOOLONG; + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_unpin; + + br = au_sbr(sb, bcpup); + if (dt) { + struct path tmp = { + .dentry = h_parent, + .mnt = au_br_mnt(br) + }; + au_dtime_store(dt, au_pinned_parent(pin), &tmp); + } + + wh_dentry = NULL; + if (bcpup != au_dbwh(dentry)) + goto out; /* success */ + + /* + * ENAMETOOLONG here means that if we allowed create such name, then it + * would not be able to removed in the future. So we don't allow such + * name here and we don't handle ENAMETOOLONG differently here. + */ + wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, br); + +out_unpin: + if (IS_ERR(wh_dentry)) + au_unpin(pin); +out: + return wh_dentry; +} + +/* ---------------------------------------------------------------------- */ + +enum { Mknod, Symlink, Creat }; +struct simple_arg { + int type; + union { + struct { + umode_t mode; + bool want_excl; + bool try_aopen; + struct vfsub_aopen_args *aopen; + } c; + struct { + const char *symname; + } s; + struct { + umode_t mode; + dev_t dev; + } m; + } u; +}; + +static int add_simple(struct inode *dir, struct dentry *dentry, + struct simple_arg *arg) +{ + int err, rerr; + aufs_bindex_t btop; + unsigned char created; + const unsigned char try_aopen + = (arg->type == Creat && arg->u.c.try_aopen); + struct dentry *wh_dentry, *parent; + struct inode *h_dir; + struct super_block *sb; + struct au_branch *br; + /* to reuduce stack size */ + struct { + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + struct au_wr_dir_args wr_dir_args; + } *a; + + AuDbg("%pd\n", dentry); + IMustLock(dir); + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + a->wr_dir_args.force_btgt = -1; + a->wr_dir_args.flags = AuWrDir_ADD_ENTRY; + + parent = dentry->d_parent; /* dir inode is locked */ + if (!try_aopen) { + err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); + if (unlikely(err)) + goto out_free; + } + err = au_d_may_add(dentry); + if (unlikely(err)) + goto out_unlock; + if (!try_aopen) + di_write_lock_parent(parent); + wh_dentry = lock_hdir_lkup_wh(dentry, &a->dt, /*src_dentry*/NULL, + &a->pin, &a->wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + btop = au_dbtop(dentry); + sb = dentry->d_sb; + br = au_sbr(sb, btop); + a->h_path.dentry = au_h_dptr(dentry, btop); + a->h_path.mnt = au_br_mnt(br); + h_dir = au_pinned_h_dir(&a->pin); + switch (arg->type) { + case Creat: + err = 0; + if (!try_aopen || !h_dir->i_op->atomic_open) + err = vfsub_create(h_dir, &a->h_path, arg->u.c.mode, + arg->u.c.want_excl); + else + err = vfsub_atomic_open(h_dir, a->h_path.dentry, + arg->u.c.aopen, br); + break; + case Symlink: + err = vfsub_symlink(h_dir, &a->h_path, arg->u.s.symname); + break; + case Mknod: + err = vfsub_mknod(h_dir, &a->h_path, arg->u.m.mode, + arg->u.m.dev); + break; + default: + BUG(); + } + created = !err; + if (!err) + err = epilog(dir, btop, wh_dentry, dentry); + + /* revert */ + if (unlikely(created && err && d_is_positive(a->h_path.dentry))) { + /* no delegation since it is just created */ + rerr = vfsub_unlink(h_dir, &a->h_path, /*delegated*/NULL, + /*force*/0); + if (rerr) { + AuIOErr("%pd revert failure(%d, %d)\n", + dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&a->dt); + } + + if (!err && try_aopen && !h_dir->i_op->atomic_open) + *arg->u.c.aopen->opened |= FILE_CREATED; + + au_unpin(&a->pin); + dput(wh_dentry); + +out_parent: + if (!try_aopen) + di_write_unlock(parent); +out_unlock: + if (unlikely(err)) { + au_update_dbtop(dentry); + d_drop(dentry); + } + if (!try_aopen) + aufs_read_unlock(dentry, AuLock_DW); +out_free: + kfree(a); +out: + return err; +} + +int aufs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, + dev_t dev) +{ + struct simple_arg arg = { + .type = Mknod, + .u.m = { + .mode = mode, + .dev = dev + } + }; + return add_simple(dir, dentry, &arg); +} + +int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) +{ + struct simple_arg arg = { + .type = Symlink, + .u.s.symname = symname + }; + return add_simple(dir, dentry, &arg); +} + +int aufs_create(struct inode *dir, struct dentry *dentry, umode_t mode, + bool want_excl) +{ + struct simple_arg arg = { + .type = Creat, + .u.c = { + .mode = mode, + .want_excl = want_excl + } + }; + return add_simple(dir, dentry, &arg); +} + +int au_aopen_or_create(struct inode *dir, struct dentry *dentry, + struct vfsub_aopen_args *aopen_args) +{ + struct simple_arg arg = { + .type = Creat, + .u.c = { + .mode = aopen_args->create_mode, + .want_excl = aopen_args->open_flag & O_EXCL, + .try_aopen = true, + .aopen = aopen_args + } + }; + return add_simple(dir, dentry, &arg); +} + +int aufs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + int err; + aufs_bindex_t bindex; + struct super_block *sb; + struct dentry *parent, *h_parent, *h_dentry; + struct inode *h_dir, *inode; + struct vfsmount *h_mnt; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = AuWrDir_TMPFILE + }; + + /* copy-up may happen */ + inode_lock(dir); + + sb = dir->i_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out; + + err = au_di_init(dentry); + if (unlikely(err)) + goto out_si; + + err = -EBUSY; + parent = d_find_any_alias(dir); + AuDebugOn(!parent); + di_write_lock_parent(parent); + if (unlikely(d_inode(parent) != dir)) + goto out_parent; + + err = au_digen_test(parent, au_sigen(sb)); + if (unlikely(err)) + goto out_parent; + + bindex = au_dbtop(parent); + au_set_dbtop(dentry, bindex); + au_set_dbbot(dentry, bindex); + err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); + bindex = err; + if (unlikely(err < 0)) + goto out_parent; + + err = -EOPNOTSUPP; + h_dir = au_h_iptr(dir, bindex); + if (unlikely(!h_dir->i_op->tmpfile)) + goto out_parent; + + h_mnt = au_sbr_mnt(sb, bindex); + err = vfsub_mnt_want_write(h_mnt); + if (unlikely(err)) + goto out_parent; + + h_parent = au_h_dptr(parent, bindex); + h_dentry = vfs_tmpfile(h_parent, mode, /*open_flag*/0); + if (IS_ERR(h_dentry)) { + err = PTR_ERR(h_dentry); + goto out_mnt; + } + + au_set_dbtop(dentry, bindex); + au_set_dbbot(dentry, bindex); + au_set_h_dptr(dentry, bindex, dget(h_dentry)); + inode = au_new_inode(dentry, /*must_new*/1); + if (IS_ERR(inode)) { + err = PTR_ERR(inode); + au_set_h_dptr(dentry, bindex, NULL); + au_set_dbtop(dentry, -1); + au_set_dbbot(dentry, -1); + } else { + if (!inode->i_nlink) + set_nlink(inode, 1); + d_tmpfile(dentry, inode); + au_di(dentry)->di_tmpfile = 1; + + /* update without i_mutex */ + if (au_ibtop(dir) == au_dbtop(dentry)) + au_cpup_attr_timesizes(dir); + } + dput(h_dentry); + +out_mnt: + vfsub_mnt_drop_write(h_mnt); +out_parent: + di_write_unlock(parent); + dput(parent); + di_write_unlock(dentry); + if (unlikely(err)) { + au_di_fin(dentry); + dentry->d_fsdata = NULL; + } +out_si: + si_read_unlock(sb); +out: + inode_unlock(dir); + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct au_link_args { + aufs_bindex_t bdst, bsrc; + struct au_pin pin; + struct path h_path; + struct dentry *src_parent, *parent; +}; + +static int au_cpup_before_link(struct dentry *src_dentry, + struct au_link_args *a) +{ + int err; + struct dentry *h_src_dentry; + struct au_cp_generic cpg = { + .dentry = src_dentry, + .bdst = a->bdst, + .bsrc = a->bsrc, + .len = -1, + .pin = &a->pin, + .flags = AuCpup_DTIME | AuCpup_HOPEN /* | AuCpup_KEEPLINO */ + }; + + di_read_lock_parent(a->src_parent, AuLock_IR); + err = au_test_and_cpup_dirs(src_dentry, a->bdst); + if (unlikely(err)) + goto out; + + h_src_dentry = au_h_dptr(src_dentry, a->bsrc); + err = au_pin(&a->pin, src_dentry, a->bdst, + au_opt_udba(src_dentry->d_sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out; + + err = au_sio_cpup_simple(&cpg); + au_unpin(&a->pin); + +out: + di_read_unlock(a->src_parent, AuLock_IR); + return err; +} + +static int au_cpup_or_link(struct dentry *src_dentry, struct dentry *dentry, + struct au_link_args *a) +{ + int err; + unsigned char plink; + aufs_bindex_t bbot; + struct dentry *h_src_dentry; + struct inode *h_inode, *inode, *delegated; + struct super_block *sb; + struct file *h_file; + + plink = 0; + h_inode = NULL; + sb = src_dentry->d_sb; + inode = d_inode(src_dentry); + if (au_ibtop(inode) <= a->bdst) + h_inode = au_h_iptr(inode, a->bdst); + if (!h_inode || !h_inode->i_nlink) { + /* copyup src_dentry as the name of dentry. */ + bbot = au_dbbot(dentry); + if (bbot < a->bsrc) + au_set_dbbot(dentry, a->bsrc); + au_set_h_dptr(dentry, a->bsrc, + dget(au_h_dptr(src_dentry, a->bsrc))); + dget(a->h_path.dentry); + au_set_h_dptr(dentry, a->bdst, NULL); + AuDbg("temporary d_inode...\n"); + spin_lock(&dentry->d_lock); + dentry->d_inode = d_inode(src_dentry); /* tmp */ + spin_unlock(&dentry->d_lock); + h_file = au_h_open_pre(dentry, a->bsrc, /*force_wr*/0); + if (IS_ERR(h_file)) + err = PTR_ERR(h_file); + else { + struct au_cp_generic cpg = { + .dentry = dentry, + .bdst = a->bdst, + .bsrc = -1, + .len = -1, + .pin = &a->pin, + .flags = AuCpup_KEEPLINO + }; + err = au_sio_cpup_simple(&cpg); + au_h_open_post(dentry, a->bsrc, h_file); + if (!err) { + dput(a->h_path.dentry); + a->h_path.dentry = au_h_dptr(dentry, a->bdst); + } else + au_set_h_dptr(dentry, a->bdst, + a->h_path.dentry); + } + spin_lock(&dentry->d_lock); + dentry->d_inode = NULL; /* restore */ + spin_unlock(&dentry->d_lock); + AuDbg("temporary d_inode...done\n"); + au_set_h_dptr(dentry, a->bsrc, NULL); + au_set_dbbot(dentry, bbot); + } else { + /* the inode of src_dentry already exists on a.bdst branch */ + h_src_dentry = d_find_alias(h_inode); + if (!h_src_dentry && au_plink_test(inode)) { + plink = 1; + h_src_dentry = au_plink_lkup(inode, a->bdst); + err = PTR_ERR(h_src_dentry); + if (IS_ERR(h_src_dentry)) + goto out; + + if (unlikely(d_is_negative(h_src_dentry))) { + dput(h_src_dentry); + h_src_dentry = NULL; + } + + } + if (h_src_dentry) { + delegated = NULL; + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path, &delegated); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + dput(h_src_dentry); + } else { + AuIOErr("no dentry found for hi%lu on b%d\n", + h_inode->i_ino, a->bdst); + err = -EIO; + } + } + + if (!err && !plink) + au_plink_append(inode, a->bdst, a->h_path.dentry); + +out: + AuTraceErr(err); + return err; +} + +int aufs_link(struct dentry *src_dentry, struct inode *dir, + struct dentry *dentry) +{ + int err, rerr; + struct au_dtime dt; + struct au_link_args *a; + struct dentry *wh_dentry, *h_src_dentry; + struct inode *inode, *delegated; + struct super_block *sb; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ + .flags = AuWrDir_ADD_ENTRY + }; + + IMustLock(dir); + inode = d_inode(src_dentry); + IMustLock(inode); + + err = -ENOMEM; + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + a->parent = dentry->d_parent; /* dir inode is locked */ + err = aufs_read_and_write_lock2(dentry, src_dentry, + AuLock_NOPLM | AuLock_GEN); + if (unlikely(err)) + goto out_kfree; + err = au_d_linkable(src_dentry); + if (unlikely(err)) + goto out_unlock; + err = au_d_may_add(dentry); + if (unlikely(err)) + goto out_unlock; + + a->src_parent = dget_parent(src_dentry); + wr_dir_args.force_btgt = au_ibtop(inode); + + di_write_lock_parent(a->parent); + wr_dir_args.force_btgt = au_wbr(dentry, wr_dir_args.force_btgt); + wh_dentry = lock_hdir_lkup_wh(dentry, &dt, src_dentry, &a->pin, + &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + err = 0; + sb = dentry->d_sb; + a->bdst = au_dbtop(dentry); + a->h_path.dentry = au_h_dptr(dentry, a->bdst); + a->h_path.mnt = au_sbr_mnt(sb, a->bdst); + a->bsrc = au_ibtop(inode); + h_src_dentry = au_h_d_alias(src_dentry, a->bsrc); + if (!h_src_dentry && au_di(src_dentry)->di_tmpfile) + h_src_dentry = dget(au_hi_wh(inode, a->bsrc)); + if (!h_src_dentry) { + a->bsrc = au_dbtop(src_dentry); + h_src_dentry = au_h_d_alias(src_dentry, a->bsrc); + AuDebugOn(!h_src_dentry); + } else if (IS_ERR(h_src_dentry)) { + err = PTR_ERR(h_src_dentry); + goto out_parent; + } + + /* + * aufs doesn't touch the credential so + * security_dentry_create_files_as() is unnecrssary. + */ + if (au_opt_test(au_mntflags(sb), PLINK)) { + if (a->bdst < a->bsrc + /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) + err = au_cpup_or_link(src_dentry, dentry, a); + else { + delegated = NULL; + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path, &delegated); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + } + dput(h_src_dentry); + } else { + /* + * copyup src_dentry to the branch we process, + * and then link(2) to it. + */ + dput(h_src_dentry); + if (a->bdst < a->bsrc + /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) { + au_unpin(&a->pin); + di_write_unlock(a->parent); + err = au_cpup_before_link(src_dentry, a); + di_write_lock_parent(a->parent); + if (!err) + err = au_pin(&a->pin, dentry, a->bdst, + au_opt_udba(sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_wh; + } + if (!err) { + h_src_dentry = au_h_dptr(src_dentry, a->bdst); + err = -ENOENT; + if (h_src_dentry && d_is_positive(h_src_dentry)) { + delegated = NULL; + err = vfsub_link(h_src_dentry, + au_pinned_h_dir(&a->pin), + &a->h_path, &delegated); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry" + " for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + } + } + } + if (unlikely(err)) + goto out_unpin; + + if (wh_dentry) { + a->h_path.dentry = wh_dentry; + err = au_wh_unlink_dentry(au_pinned_h_dir(&a->pin), &a->h_path, + dentry); + if (unlikely(err)) + goto out_revert; + } + + au_dir_ts(dir, a->bdst); + dir->i_version++; + inc_nlink(inode); + inode->i_ctime = dir->i_ctime; + d_instantiate(dentry, au_igrab(inode)); + if (d_unhashed(a->h_path.dentry)) + /* some filesystem calls d_drop() */ + d_drop(dentry); + /* some filesystems consume an inode even hardlink */ + au_fhsm_wrote(sb, a->bdst, /*force*/0); + goto out_unpin; /* success */ + +out_revert: + /* no delegation since it is just created */ + rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, + /*delegated*/NULL, /*force*/0); + if (unlikely(rerr)) { + AuIOErr("%pd reverting failed(%d, %d)\n", dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&dt); +out_unpin: + au_unpin(&a->pin); +out_wh: + dput(wh_dentry); +out_parent: + di_write_unlock(a->parent); + dput(a->src_parent); +out_unlock: + if (unlikely(err)) { + au_update_dbtop(dentry); + d_drop(dentry); + } + aufs_read_and_write_unlock2(dentry, src_dentry); +out_kfree: + kfree(a); +out: + AuTraceErr(err); + return err; +} + +int aufs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + int err, rerr; + aufs_bindex_t bindex; + unsigned char diropq; + struct path h_path; + struct dentry *wh_dentry, *parent, *opq_dentry; + struct inode *h_inode; + struct super_block *sb; + struct { + struct au_pin pin; + struct au_dtime dt; + } *a; /* reduce the stack usage */ + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = AuWrDir_ADD_ENTRY | AuWrDir_ISDIR + }; + + IMustLock(dir); + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); + if (unlikely(err)) + goto out_free; + err = au_d_may_add(dentry); + if (unlikely(err)) + goto out_unlock; + + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + wh_dentry = lock_hdir_lkup_wh(dentry, &a->dt, /*src_dentry*/NULL, + &a->pin, &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + sb = dentry->d_sb; + bindex = au_dbtop(dentry); + h_path.dentry = au_h_dptr(dentry, bindex); + h_path.mnt = au_sbr_mnt(sb, bindex); + err = vfsub_mkdir(au_pinned_h_dir(&a->pin), &h_path, mode); + if (unlikely(err)) + goto out_unpin; + + /* make the dir opaque */ + diropq = 0; + h_inode = d_inode(h_path.dentry); + if (wh_dentry + || au_opt_test(au_mntflags(sb), ALWAYS_DIROPQ)) { + inode_lock_nested(h_inode, AuLsc_I_CHILD); + opq_dentry = au_diropq_create(dentry, bindex); + inode_unlock(h_inode); + err = PTR_ERR(opq_dentry); + if (IS_ERR(opq_dentry)) + goto out_dir; + dput(opq_dentry); + diropq = 1; + } + + err = epilog(dir, bindex, wh_dentry, dentry); + if (!err) { + inc_nlink(dir); + goto out_unpin; /* success */ + } + + /* revert */ + if (diropq) { + AuLabel(revert opq); + inode_lock_nested(h_inode, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bindex); + inode_unlock(h_inode); + if (rerr) { + AuIOErr("%pd reverting diropq failed(%d, %d)\n", + dentry, err, rerr); + err = -EIO; + } + } + +out_dir: + AuLabel(revert dir); + rerr = vfsub_rmdir(au_pinned_h_dir(&a->pin), &h_path); + if (rerr) { + AuIOErr("%pd reverting dir failed(%d, %d)\n", + dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&a->dt); +out_unpin: + au_unpin(&a->pin); + dput(wh_dentry); +out_parent: + di_write_unlock(parent); +out_unlock: + if (unlikely(err)) { + au_update_dbtop(dentry); + d_drop(dentry); + } + aufs_read_unlock(dentry, AuLock_DW); +out_free: + kfree(a); +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/i_op_del.c +++ linux-aws-4.15.0/fs/aufs/i_op_del.c @@ -0,0 +1,511 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode operations (del entry) + */ + +#include "aufs.h" + +/* + * decide if a new whiteout for @dentry is necessary or not. + * when it is necessary, prepare the parent dir for the upper branch whose + * branch index is @bcpup for creation. the actual creation of the whiteout will + * be done by caller. + * return value: + * 0: wh is unnecessary + * plus: wh is necessary + * minus: error + */ +int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup) +{ + int need_wh, err; + aufs_bindex_t btop; + struct super_block *sb; + + sb = dentry->d_sb; + btop = au_dbtop(dentry); + if (*bcpup < 0) { + *bcpup = btop; + if (au_test_ro(sb, btop, d_inode(dentry))) { + err = AuWbrCopyup(au_sbi(sb), dentry); + *bcpup = err; + if (unlikely(err < 0)) + goto out; + } + } else + AuDebugOn(btop < *bcpup + || au_test_ro(sb, *bcpup, d_inode(dentry))); + AuDbg("bcpup %d, btop %d\n", *bcpup, btop); + + if (*bcpup != btop) { + err = au_cpup_dirs(dentry, *bcpup); + if (unlikely(err)) + goto out; + need_wh = 1; + } else { + struct au_dinfo *dinfo, *tmp; + + need_wh = -ENOMEM; + dinfo = au_di(dentry); + tmp = au_di_alloc(sb, AuLsc_DI_TMP); + if (tmp) { + au_di_cp(tmp, dinfo); + au_di_swap(tmp, dinfo); + /* returns the number of positive dentries */ + need_wh = au_lkup_dentry(dentry, btop + 1, + /* AuLkup_IGNORE_PERM */ 0); + au_di_swap(tmp, dinfo); + au_rw_write_unlock(&tmp->di_rwsem); + au_di_free(tmp); + } + } + AuDbg("need_wh %d\n", need_wh); + err = need_wh; + +out: + return err; +} + +/* + * simple tests for the del-entry operations. + * following the checks in vfs, plus the parent-child relationship. + */ +int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir) +{ + int err; + umode_t h_mode; + struct dentry *h_dentry, *h_latest; + struct inode *h_inode; + + h_dentry = au_h_dptr(dentry, bindex); + if (d_really_is_positive(dentry)) { + err = -ENOENT; + if (unlikely(d_is_negative(h_dentry))) + goto out; + h_inode = d_inode(h_dentry); + if (unlikely(!h_inode->i_nlink)) + goto out; + + h_mode = h_inode->i_mode; + if (!isdir) { + err = -EISDIR; + if (unlikely(S_ISDIR(h_mode))) + goto out; + } else if (unlikely(!S_ISDIR(h_mode))) { + err = -ENOTDIR; + goto out; + } + } else { + /* rename(2) case */ + err = -EIO; + if (unlikely(d_is_positive(h_dentry))) + goto out; + } + + err = -ENOENT; + /* expected parent dir is locked */ + if (unlikely(h_parent != h_dentry->d_parent)) + goto out; + err = 0; + + /* + * rmdir a dir may break the consistency on some filesystem. + * let's try heavy test. + */ + err = -EACCES; + if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), DIRPERM1) + && au_test_h_perm(d_inode(h_parent), + MAY_EXEC | MAY_WRITE))) + goto out; + + h_latest = au_sio_lkup_one(&dentry->d_name, h_parent); + err = -EIO; + if (IS_ERR(h_latest)) + goto out; + if (h_latest == h_dentry) + err = 0; + dput(h_latest); + +out: + return err; +} + +/* + * decide the branch where we operate for @dentry. the branch index will be set + * @rbcpup. after diciding it, 'pin' it and store the timestamps of the parent + * dir for reverting. + * when a new whiteout is necessary, create it. + */ +static struct dentry* +lock_hdir_create_wh(struct dentry *dentry, int isdir, aufs_bindex_t *rbcpup, + struct au_dtime *dt, struct au_pin *pin) +{ + struct dentry *wh_dentry; + struct super_block *sb; + struct path h_path; + int err, need_wh; + unsigned int udba; + aufs_bindex_t bcpup; + + need_wh = au_wr_dir_need_wh(dentry, isdir, rbcpup); + wh_dentry = ERR_PTR(need_wh); + if (unlikely(need_wh < 0)) + goto out; + + sb = dentry->d_sb; + udba = au_opt_udba(sb); + bcpup = *rbcpup; + err = au_pin(pin, dentry, bcpup, udba, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out; + + h_path.dentry = au_pinned_h_parent(pin); + if (udba != AuOpt_UDBA_NONE + && au_dbtop(dentry) == bcpup) { + err = au_may_del(dentry, bcpup, h_path.dentry, isdir); + wh_dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_unpin; + } + + h_path.mnt = au_sbr_mnt(sb, bcpup); + au_dtime_store(dt, au_pinned_parent(pin), &h_path); + wh_dentry = NULL; + if (!need_wh) + goto out; /* success, no need to create whiteout */ + + wh_dentry = au_wh_create(dentry, bcpup, h_path.dentry); + if (IS_ERR(wh_dentry)) + goto out_unpin; + + /* returns with the parent is locked and wh_dentry is dget-ed */ + goto out; /* success */ + +out_unpin: + au_unpin(pin); +out: + return wh_dentry; +} + +/* + * when removing a dir, rename it to a unique temporary whiteout-ed name first + * in order to be revertible and save time for removing many child whiteouts + * under the dir. + * returns 1 when there are too many child whiteout and caller should remove + * them asynchronously. returns 0 when the number of children is enough small to + * remove now or the branch fs is a remote fs. + * otherwise return an error. + */ +static int renwh_and_rmdir(struct dentry *dentry, aufs_bindex_t bindex, + struct au_nhash *whlist, struct inode *dir) +{ + int rmdir_later, err, dirwh; + struct dentry *h_dentry; + struct super_block *sb; + struct inode *inode; + + sb = dentry->d_sb; + SiMustAnyLock(sb); + h_dentry = au_h_dptr(dentry, bindex); + err = au_whtmp_ren(h_dentry, au_sbr(sb, bindex)); + if (unlikely(err)) + goto out; + + /* stop monitoring */ + inode = d_inode(dentry); + au_hn_free(au_hi(inode, bindex)); + + if (!au_test_fs_remote(h_dentry->d_sb)) { + dirwh = au_sbi(sb)->si_dirwh; + rmdir_later = (dirwh <= 1); + if (!rmdir_later) + rmdir_later = au_nhash_test_longer_wh(whlist, bindex, + dirwh); + if (rmdir_later) + return rmdir_later; + } + + err = au_whtmp_rmdir(dir, bindex, h_dentry, whlist); + if (unlikely(err)) { + AuIOErr("rmdir %pd, b%d failed, %d. ignored\n", + h_dentry, bindex, err); + err = 0; + } + +out: + AuTraceErr(err); + return err; +} + +/* + * final procedure for deleting a entry. + * maintain dentry and iattr. + */ +static void epilog(struct inode *dir, struct dentry *dentry, + aufs_bindex_t bindex) +{ + struct inode *inode; + + inode = d_inode(dentry); + d_drop(dentry); + inode->i_ctime = dir->i_ctime; + + au_dir_ts(dir, bindex); + dir->i_version++; +} + +/* + * when an error happened, remove the created whiteout and revert everything. + */ +static int do_revert(int err, struct inode *dir, aufs_bindex_t bindex, + aufs_bindex_t bwh, struct dentry *wh_dentry, + struct dentry *dentry, struct au_dtime *dt) +{ + int rerr; + struct path h_path = { + .dentry = wh_dentry, + .mnt = au_sbr_mnt(dir->i_sb, bindex) + }; + + rerr = au_wh_unlink_dentry(au_h_iptr(dir, bindex), &h_path, dentry); + if (!rerr) { + au_set_dbwh(dentry, bwh); + au_dtime_revert(dt); + return 0; + } + + AuIOErr("%pd reverting whiteout failed(%d, %d)\n", dentry, err, rerr); + return -EIO; +} + +/* ---------------------------------------------------------------------- */ + +int aufs_unlink(struct inode *dir, struct dentry *dentry) +{ + int err; + aufs_bindex_t bwh, bindex, btop; + struct inode *inode, *h_dir, *delegated; + struct dentry *parent, *wh_dentry; + /* to reuduce stack size */ + struct { + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + } *a; + + IMustLock(dir); + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); + if (unlikely(err)) + goto out_free; + err = au_d_hashed_positive(dentry); + if (unlikely(err)) + goto out_unlock; + inode = d_inode(dentry); + IMustLock(inode); + err = -EISDIR; + if (unlikely(d_is_dir(dentry))) + goto out_unlock; /* possible? */ + + btop = au_dbtop(dentry); + bwh = au_dbwh(dentry); + bindex = -1; + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/0, &bindex, &a->dt, + &a->pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + a->h_path.mnt = au_sbr_mnt(dentry->d_sb, btop); + a->h_path.dentry = au_h_dptr(dentry, btop); + dget(a->h_path.dentry); + if (bindex == btop) { + h_dir = au_pinned_h_dir(&a->pin); + delegated = NULL; + err = vfsub_unlink(h_dir, &a->h_path, &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + } else { + /* dir inode is locked */ + h_dir = d_inode(wh_dentry->d_parent); + IMustLock(h_dir); + err = 0; + } + + if (!err) { + vfsub_drop_nlink(inode); + epilog(dir, dentry, bindex); + + /* update target timestamps */ + if (bindex == btop) { + vfsub_update_h_iattr(&a->h_path, /*did*/NULL); + /*ignore*/ + inode->i_ctime = d_inode(a->h_path.dentry)->i_ctime; + } else + /* todo: this timestamp may be reverted later */ + inode->i_ctime = h_dir->i_ctime; + goto out_unpin; /* success */ + } + + /* revert */ + if (wh_dentry) { + int rerr; + + rerr = do_revert(err, dir, bindex, bwh, wh_dentry, dentry, + &a->dt); + if (rerr) + err = rerr; + } + +out_unpin: + au_unpin(&a->pin); + dput(wh_dentry); + dput(a->h_path.dentry); +out_parent: + di_write_unlock(parent); +out_unlock: + aufs_read_unlock(dentry, AuLock_DW); +out_free: + kfree(a); +out: + return err; +} + +int aufs_rmdir(struct inode *dir, struct dentry *dentry) +{ + int err, rmdir_later; + aufs_bindex_t bwh, bindex, btop; + struct inode *inode; + struct dentry *parent, *wh_dentry, *h_dentry; + struct au_whtmp_rmdir *args; + /* to reuduce stack size */ + struct { + struct au_dtime dt; + struct au_pin pin; + } *a; + + IMustLock(dir); + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_GEN); + if (unlikely(err)) + goto out_free; + err = au_alive_dir(dentry); + if (unlikely(err)) + goto out_unlock; + inode = d_inode(dentry); + IMustLock(inode); + err = -ENOTDIR; + if (unlikely(!d_is_dir(dentry))) + goto out_unlock; /* possible? */ + + err = -ENOMEM; + args = au_whtmp_rmdir_alloc(dir->i_sb, GFP_NOFS); + if (unlikely(!args)) + goto out_unlock; + + parent = dentry->d_parent; /* dir inode is locked */ + di_write_lock_parent(parent); + err = au_test_empty(dentry, &args->whlist); + if (unlikely(err)) + goto out_parent; + + btop = au_dbtop(dentry); + bwh = au_dbwh(dentry); + bindex = -1; + wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/1, &bindex, &a->dt, + &a->pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + h_dentry = au_h_dptr(dentry, btop); + dget(h_dentry); + rmdir_later = 0; + if (bindex == btop) { + err = renwh_and_rmdir(dentry, btop, &args->whlist, dir); + if (err > 0) { + rmdir_later = err; + err = 0; + } + } else { + /* stop monitoring */ + au_hn_free(au_hi(inode, btop)); + + /* dir inode is locked */ + IMustLock(d_inode(wh_dentry->d_parent)); + err = 0; + } + + if (!err) { + vfsub_dead_dir(inode); + au_set_dbdiropq(dentry, -1); + epilog(dir, dentry, bindex); + + if (rmdir_later) { + au_whtmp_kick_rmdir(dir, btop, h_dentry, args); + args = NULL; + } + + goto out_unpin; /* success */ + } + + /* revert */ + AuLabel(revert); + if (wh_dentry) { + int rerr; + + rerr = do_revert(err, dir, bindex, bwh, wh_dentry, dentry, + &a->dt); + if (rerr) + err = rerr; + } + +out_unpin: + au_unpin(&a->pin); + dput(wh_dentry); + dput(h_dentry); +out_parent: + di_write_unlock(parent); + if (args) + au_whtmp_rmdir_free(args); +out_unlock: + aufs_read_unlock(dentry, AuLock_DW); +out_free: + kfree(a); +out: + AuTraceErr(err); + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/i_op_ren.c +++ linux-aws-4.15.0/fs/aufs/i_op_ren.c @@ -0,0 +1,1246 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode operation (rename entry) + * todo: this is crazy monster + */ + +#include "aufs.h" + +enum { AuSRC, AuDST, AuSrcDst }; +enum { AuPARENT, AuCHILD, AuParentChild }; + +#define AuRen_ISDIR_SRC 1 +#define AuRen_ISDIR_DST (1 << 1) +#define AuRen_ISSAMEDIR (1 << 2) +#define AuRen_WHSRC (1 << 3) +#define AuRen_WHDST (1 << 4) +#define AuRen_MNT_WRITE (1 << 5) +#define AuRen_DT_DSTDIR (1 << 6) +#define AuRen_DIROPQ_SRC (1 << 7) +#define AuRen_DIROPQ_DST (1 << 8) +#define AuRen_DIRREN (1 << 9) +#define AuRen_DROPPED_SRC (1 << 10) +#define AuRen_DROPPED_DST (1 << 11) +#define au_ftest_ren(flags, name) ((flags) & AuRen_##name) +#define au_fset_ren(flags, name) \ + do { (flags) |= AuRen_##name; } while (0) +#define au_fclr_ren(flags, name) \ + do { (flags) &= ~AuRen_##name; } while (0) + +#ifndef CONFIG_AUFS_DIRREN +#undef AuRen_DIRREN +#define AuRen_DIRREN 0 +#endif + +struct au_ren_args { + struct { + struct dentry *dentry, *h_dentry, *parent, *h_parent, + *wh_dentry; + struct inode *dir, *inode; + struct au_hinode *hdir, *hinode; + struct au_dtime dt[AuParentChild]; + aufs_bindex_t btop, bdiropq; + } sd[AuSrcDst]; + +#define src_dentry sd[AuSRC].dentry +#define src_dir sd[AuSRC].dir +#define src_inode sd[AuSRC].inode +#define src_h_dentry sd[AuSRC].h_dentry +#define src_parent sd[AuSRC].parent +#define src_h_parent sd[AuSRC].h_parent +#define src_wh_dentry sd[AuSRC].wh_dentry +#define src_hdir sd[AuSRC].hdir +#define src_hinode sd[AuSRC].hinode +#define src_h_dir sd[AuSRC].hdir->hi_inode +#define src_dt sd[AuSRC].dt +#define src_btop sd[AuSRC].btop +#define src_bdiropq sd[AuSRC].bdiropq + +#define dst_dentry sd[AuDST].dentry +#define dst_dir sd[AuDST].dir +#define dst_inode sd[AuDST].inode +#define dst_h_dentry sd[AuDST].h_dentry +#define dst_parent sd[AuDST].parent +#define dst_h_parent sd[AuDST].h_parent +#define dst_wh_dentry sd[AuDST].wh_dentry +#define dst_hdir sd[AuDST].hdir +#define dst_hinode sd[AuDST].hinode +#define dst_h_dir sd[AuDST].hdir->hi_inode +#define dst_dt sd[AuDST].dt +#define dst_btop sd[AuDST].btop +#define dst_bdiropq sd[AuDST].bdiropq + + struct dentry *h_trap; + struct au_branch *br; + struct path h_path; + struct au_nhash whlist; + aufs_bindex_t btgt, src_bwh; + + struct { + unsigned short auren_flags; + unsigned char flags; /* syscall parameter */ + unsigned char exchange; + } __packed; + + struct au_whtmp_rmdir *thargs; + struct dentry *h_dst; + struct au_hinode *h_root; +}; + +/* ---------------------------------------------------------------------- */ + +/* + * functions for reverting. + * when an error happened in a single rename systemcall, we should revert + * everything as if nothing happened. + * we don't need to revert the copied-up/down the parent dir since they are + * harmless. + */ + +#define RevertFailure(fmt, ...) do { \ + AuIOErr("revert failure: " fmt " (%d, %d)\n", \ + ##__VA_ARGS__, err, rerr); \ + err = -EIO; \ +} while (0) + +static void au_ren_do_rev_diropq(int err, struct au_ren_args *a, int idx) +{ + int rerr; + struct dentry *d; +#define src_or_dst(member) a->sd[idx].member + + d = src_or_dst(dentry); /* {src,dst}_dentry */ + au_hn_inode_lock_nested(src_or_dst(hinode), AuLsc_I_CHILD); + rerr = au_diropq_remove(d, a->btgt); + au_hn_inode_unlock(src_or_dst(hinode)); + au_set_dbdiropq(d, src_or_dst(bdiropq)); + if (rerr) + RevertFailure("remove diropq %pd", d); + +#undef src_or_dst_ +} + +static void au_ren_rev_diropq(int err, struct au_ren_args *a) +{ + if (au_ftest_ren(a->auren_flags, DIROPQ_SRC)) + au_ren_do_rev_diropq(err, a, AuSRC); + if (au_ftest_ren(a->auren_flags, DIROPQ_DST)) + au_ren_do_rev_diropq(err, a, AuDST); +} + +static void au_ren_rev_rename(int err, struct au_ren_args *a) +{ + int rerr; + struct inode *delegated; + + a->h_path.dentry = vfsub_lkup_one(&a->src_dentry->d_name, + a->src_h_parent); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { + RevertFailure("lkup one %pd", a->src_dentry); + return; + } + + delegated = NULL; + rerr = vfsub_rename(a->dst_h_dir, + au_h_dptr(a->src_dentry, a->btgt), + a->src_h_dir, &a->h_path, &delegated, a->flags); + if (unlikely(rerr == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal rename\n"); + iput(delegated); + } + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + /* au_set_h_dptr(a->src_dentry, a->btgt, NULL); */ + if (rerr) + RevertFailure("rename %pd", a->src_dentry); +} + +static void au_ren_rev_whtmp(int err, struct au_ren_args *a) +{ + int rerr; + struct inode *delegated; + + a->h_path.dentry = vfsub_lkup_one(&a->dst_dentry->d_name, + a->dst_h_parent); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { + RevertFailure("lkup one %pd", a->dst_dentry); + return; + } + if (d_is_positive(a->h_path.dentry)) { + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + return; + } + + delegated = NULL; + rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path, + &delegated, a->flags); + if (unlikely(rerr == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal rename\n"); + iput(delegated); + } + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + if (!rerr) + au_set_h_dptr(a->dst_dentry, a->btgt, dget(a->h_dst)); + else + RevertFailure("rename %pd", a->h_dst); +} + +static void au_ren_rev_whsrc(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = a->src_wh_dentry; + rerr = au_wh_unlink_dentry(a->src_h_dir, &a->h_path, a->src_dentry); + au_set_dbwh(a->src_dentry, a->src_bwh); + if (rerr) + RevertFailure("unlink %pd", a->src_wh_dentry); +} +#undef RevertFailure + +/* ---------------------------------------------------------------------- */ + +/* + * when we have to copyup the renaming entry, do it with the rename-target name + * in order to minimize the cost (the later actual rename is unnecessary). + * otherwise rename it on the target branch. + */ +static int au_ren_or_cpup(struct au_ren_args *a) +{ + int err; + struct dentry *d; + struct inode *delegated; + + d = a->src_dentry; + if (au_dbtop(d) == a->btgt) { + a->h_path.dentry = a->dst_h_dentry; + AuDebugOn(au_dbtop(d) != a->btgt); + delegated = NULL; + err = vfsub_rename(a->src_h_dir, au_h_dptr(d, a->btgt), + a->dst_h_dir, &a->h_path, &delegated, + a->flags); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal rename\n"); + iput(delegated); + } + } else + BUG(); + + if (!err && a->h_dst) + /* it will be set to dinfo later */ + dget(a->h_dst); + + return err; +} + +/* cf. aufs_rmdir() */ +static int au_ren_del_whtmp(struct au_ren_args *a) +{ + int err; + struct inode *dir; + + dir = a->dst_dir; + SiMustAnyLock(dir->i_sb); + if (!au_nhash_test_longer_wh(&a->whlist, a->btgt, + au_sbi(dir->i_sb)->si_dirwh) + || au_test_fs_remote(a->h_dst->d_sb)) { + err = au_whtmp_rmdir(dir, a->btgt, a->h_dst, &a->whlist); + if (unlikely(err)) + pr_warn("failed removing whtmp dir %pd (%d), " + "ignored.\n", a->h_dst, err); + } else { + au_nhash_wh_free(&a->thargs->whlist); + a->thargs->whlist = a->whlist; + a->whlist.nh_num = 0; + au_whtmp_kick_rmdir(dir, a->btgt, a->h_dst, a->thargs); + dput(a->h_dst); + a->thargs = NULL; + } + + return 0; +} + +/* make it 'opaque' dir. */ +static int au_ren_do_diropq(struct au_ren_args *a, int idx) +{ + int err; + struct dentry *d, *diropq; +#define src_or_dst(member) a->sd[idx].member + + err = 0; + d = src_or_dst(dentry); /* {src,dst}_dentry */ + src_or_dst(bdiropq) = au_dbdiropq(d); + src_or_dst(hinode) = au_hi(src_or_dst(inode), a->btgt); + au_hn_inode_lock_nested(src_or_dst(hinode), AuLsc_I_CHILD); + diropq = au_diropq_create(d, a->btgt); + au_hn_inode_unlock(src_or_dst(hinode)); + if (IS_ERR(diropq)) + err = PTR_ERR(diropq); + else + dput(diropq); + +#undef src_or_dst_ + return err; +} + +static int au_ren_diropq(struct au_ren_args *a) +{ + int err; + unsigned char always; + struct dentry *d; + + err = 0; + d = a->dst_dentry; /* already renamed on the branch */ + always = !!au_opt_test(au_mntflags(d->d_sb), ALWAYS_DIROPQ); + if (au_ftest_ren(a->auren_flags, ISDIR_SRC) + && !au_ftest_ren(a->auren_flags, DIRREN) + && a->btgt != au_dbdiropq(a->src_dentry) + && (a->dst_wh_dentry + || a->btgt <= au_dbdiropq(d) + /* hide the lower to keep xino */ + /* the lowers may not be a dir, but we hide them anyway */ + || a->btgt < au_dbbot(d) + || always)) { + AuDbg("here\n"); + err = au_ren_do_diropq(a, AuSRC); + if (unlikely(err)) + goto out; + au_fset_ren(a->auren_flags, DIROPQ_SRC); + } + if (!a->exchange) + goto out; /* success */ + + d = a->src_dentry; /* already renamed on the branch */ + if (au_ftest_ren(a->auren_flags, ISDIR_DST) + && a->btgt != au_dbdiropq(a->dst_dentry) + && (a->btgt < au_dbdiropq(d) + || a->btgt < au_dbbot(d) + || always)) { + AuDbgDentry(a->src_dentry); + AuDbgDentry(a->dst_dentry); + err = au_ren_do_diropq(a, AuDST); + if (unlikely(err)) + goto out_rev_src; + au_fset_ren(a->auren_flags, DIROPQ_DST); + } + goto out; /* success */ + +out_rev_src: + AuDbg("err %d, reverting src\n", err); + au_ren_rev_diropq(err, a); +out: + return err; +} + +static int do_rename(struct au_ren_args *a) +{ + int err; + struct dentry *d, *h_d; + + if (!a->exchange) { + /* prepare workqueue args for asynchronous rmdir */ + h_d = a->dst_h_dentry; + if (au_ftest_ren(a->auren_flags, ISDIR_DST) + /* && !au_ftest_ren(a->auren_flags, DIRREN) */ + && d_is_positive(h_d)) { + err = -ENOMEM; + a->thargs = au_whtmp_rmdir_alloc(a->src_dentry->d_sb, + GFP_NOFS); + if (unlikely(!a->thargs)) + goto out; + a->h_dst = dget(h_d); + } + + /* create whiteout for src_dentry */ + if (au_ftest_ren(a->auren_flags, WHSRC)) { + a->src_bwh = au_dbwh(a->src_dentry); + AuDebugOn(a->src_bwh >= 0); + a->src_wh_dentry = au_wh_create(a->src_dentry, a->btgt, + a->src_h_parent); + err = PTR_ERR(a->src_wh_dentry); + if (IS_ERR(a->src_wh_dentry)) + goto out_thargs; + } + + /* lookup whiteout for dentry */ + if (au_ftest_ren(a->auren_flags, WHDST)) { + h_d = au_wh_lkup(a->dst_h_parent, + &a->dst_dentry->d_name, a->br); + err = PTR_ERR(h_d); + if (IS_ERR(h_d)) + goto out_whsrc; + if (d_is_negative(h_d)) + dput(h_d); + else + a->dst_wh_dentry = h_d; + } + + /* rename dentry to tmpwh */ + if (a->thargs) { + err = au_whtmp_ren(a->dst_h_dentry, a->br); + if (unlikely(err)) + goto out_whdst; + + d = a->dst_dentry; + au_set_h_dptr(d, a->btgt, NULL); + err = au_lkup_neg(d, a->btgt, /*wh*/0); + if (unlikely(err)) + goto out_whtmp; + a->dst_h_dentry = au_h_dptr(d, a->btgt); + } + } + + BUG_ON(d_is_positive(a->dst_h_dentry) && a->src_btop != a->btgt); +#if 0 + BUG_ON(!au_ftest_ren(a->auren_flags, DIRREN) + && d_is_positive(a->dst_h_dentry) + && a->src_btop != a->btgt); +#endif + + /* rename by vfs_rename or cpup */ + err = au_ren_or_cpup(a); + if (unlikely(err)) + /* leave the copied-up one */ + goto out_whtmp; + + /* make dir opaque */ + err = au_ren_diropq(a); + if (unlikely(err)) + goto out_rename; + + /* update target timestamps */ + if (a->exchange) { + AuDebugOn(au_dbtop(a->dst_dentry) != a->btgt); + a->h_path.dentry = au_h_dptr(a->dst_dentry, a->btgt); + vfsub_update_h_iattr(&a->h_path, /*did*/NULL); /*ignore*/ + a->dst_inode->i_ctime = d_inode(a->h_path.dentry)->i_ctime; + } + AuDebugOn(au_dbtop(a->src_dentry) != a->btgt); + a->h_path.dentry = au_h_dptr(a->src_dentry, a->btgt); + vfsub_update_h_iattr(&a->h_path, /*did*/NULL); /*ignore*/ + a->src_inode->i_ctime = d_inode(a->h_path.dentry)->i_ctime; + + if (!a->exchange) { + /* remove whiteout for dentry */ + if (a->dst_wh_dentry) { + a->h_path.dentry = a->dst_wh_dentry; + err = au_wh_unlink_dentry(a->dst_h_dir, &a->h_path, + a->dst_dentry); + if (unlikely(err)) + goto out_diropq; + } + + /* remove whtmp */ + if (a->thargs) + au_ren_del_whtmp(a); /* ignore this error */ + + au_fhsm_wrote(a->src_dentry->d_sb, a->btgt, /*force*/0); + } + err = 0; + goto out_success; + +out_diropq: + au_ren_rev_diropq(err, a); +out_rename: + au_ren_rev_rename(err, a); + dput(a->h_dst); +out_whtmp: + if (a->thargs) + au_ren_rev_whtmp(err, a); +out_whdst: + dput(a->dst_wh_dentry); + a->dst_wh_dentry = NULL; +out_whsrc: + if (a->src_wh_dentry) + au_ren_rev_whsrc(err, a); +out_success: + dput(a->src_wh_dentry); + dput(a->dst_wh_dentry); +out_thargs: + if (a->thargs) { + dput(a->h_dst); + au_whtmp_rmdir_free(a->thargs); + a->thargs = NULL; + } +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * test if @dentry dir can be rename destination or not. + * success means, it is a logically empty dir. + */ +static int may_rename_dstdir(struct dentry *dentry, struct au_nhash *whlist) +{ + return au_test_empty(dentry, whlist); +} + +/* + * test if @a->src_dentry dir can be rename source or not. + * if it can, return 0. + * success means, + * - it is a logically empty dir. + * - or, it exists on writable branch and has no children including whiteouts + * on the lower branch unless DIRREN is on. + */ +static int may_rename_srcdir(struct au_ren_args *a) +{ + int err; + unsigned int rdhash; + aufs_bindex_t btop, btgt; + struct dentry *dentry; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + dentry = a->src_dentry; + sb = dentry->d_sb; + sbinfo = au_sbi(sb); + if (au_opt_test(sbinfo->si_mntflags, DIRREN)) + au_fset_ren(a->auren_flags, DIRREN); + + btgt = a->btgt; + btop = au_dbtop(dentry); + if (btop != btgt) { + struct au_nhash whlist; + + SiMustAnyLock(sb); + rdhash = sbinfo->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, + dentry)); + err = au_nhash_alloc(&whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_test_empty(dentry, &whlist); + au_nhash_wh_free(&whlist); + goto out; + } + + if (btop == au_dbtaildir(dentry)) + return 0; /* success */ + + err = au_test_empty_lower(dentry); + +out: + if (err == -ENOTEMPTY) { + if (au_ftest_ren(a->auren_flags, DIRREN)) { + err = 0; + } else { + AuWarn1("renaming dir who has child(ren) on multiple " + "branches, is not supported\n"); + err = -EXDEV; + } + } + return err; +} + +/* side effect: sets whlist and h_dentry */ +static int au_ren_may_dir(struct au_ren_args *a) +{ + int err; + unsigned int rdhash; + struct dentry *d; + + d = a->dst_dentry; + SiMustAnyLock(d->d_sb); + + err = 0; + if (au_ftest_ren(a->auren_flags, ISDIR_DST) && a->dst_inode) { + rdhash = au_sbi(d->d_sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(/*file*/NULL, d)); + err = au_nhash_alloc(&a->whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + + if (!a->exchange) { + au_set_dbtop(d, a->dst_btop); + err = may_rename_dstdir(d, &a->whlist); + au_set_dbtop(d, a->btgt); + } else + err = may_rename_srcdir(a); + } + a->dst_h_dentry = au_h_dptr(d, au_dbtop(d)); + if (unlikely(err)) + goto out; + + d = a->src_dentry; + a->src_h_dentry = au_h_dptr(d, au_dbtop(d)); + if (au_ftest_ren(a->auren_flags, ISDIR_SRC)) { + err = may_rename_srcdir(a); + if (unlikely(err)) { + au_nhash_wh_free(&a->whlist); + a->whlist.nh_num = 0; + } + } +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * simple tests for rename. + * following the checks in vfs, plus the parent-child relationship. + */ +static int au_may_ren(struct au_ren_args *a) +{ + int err, isdir; + struct inode *h_inode; + + if (a->src_btop == a->btgt) { + err = au_may_del(a->src_dentry, a->btgt, a->src_h_parent, + au_ftest_ren(a->auren_flags, ISDIR_SRC)); + if (unlikely(err)) + goto out; + err = -EINVAL; + if (unlikely(a->src_h_dentry == a->h_trap)) + goto out; + } + + err = 0; + if (a->dst_btop != a->btgt) + goto out; + + err = -ENOTEMPTY; + if (unlikely(a->dst_h_dentry == a->h_trap)) + goto out; + + err = -EIO; + isdir = !!au_ftest_ren(a->auren_flags, ISDIR_DST); + if (d_really_is_negative(a->dst_dentry)) { + if (d_is_negative(a->dst_h_dentry)) + err = au_may_add(a->dst_dentry, a->btgt, + a->dst_h_parent, isdir); + } else { + if (unlikely(d_is_negative(a->dst_h_dentry))) + goto out; + h_inode = d_inode(a->dst_h_dentry); + if (h_inode->i_nlink) + err = au_may_del(a->dst_dentry, a->btgt, + a->dst_h_parent, isdir); + } + +out: + if (unlikely(err == -ENOENT || err == -EEXIST)) + err = -EIO; + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * locking order + * (VFS) + * - src_dir and dir by lock_rename() + * - inode if exitsts + * (aufs) + * - lock all + * + src_dentry and dentry by aufs_read_and_write_lock2() which calls, + * + si_read_lock + * + di_write_lock2_child() + * + di_write_lock_child() + * + ii_write_lock_child() + * + di_write_lock_child2() + * + ii_write_lock_child2() + * + src_parent and parent + * + di_write_lock_parent() + * + ii_write_lock_parent() + * + di_write_lock_parent2() + * + ii_write_lock_parent2() + * + lower src_dir and dir by vfsub_lock_rename() + * + verify the every relationships between child and parent. if any + * of them failed, unlock all and return -EBUSY. + */ +static void au_ren_unlock(struct au_ren_args *a) +{ + vfsub_unlock_rename(a->src_h_parent, a->src_hdir, + a->dst_h_parent, a->dst_hdir); + if (au_ftest_ren(a->auren_flags, DIRREN) + && a->h_root) + au_hn_inode_unlock(a->h_root); + if (au_ftest_ren(a->auren_flags, MNT_WRITE)) + vfsub_mnt_drop_write(au_br_mnt(a->br)); +} + +static int au_ren_lock(struct au_ren_args *a) +{ + int err; + unsigned int udba; + + err = 0; + a->src_h_parent = au_h_dptr(a->src_parent, a->btgt); + a->src_hdir = au_hi(a->src_dir, a->btgt); + a->dst_h_parent = au_h_dptr(a->dst_parent, a->btgt); + a->dst_hdir = au_hi(a->dst_dir, a->btgt); + + err = vfsub_mnt_want_write(au_br_mnt(a->br)); + if (unlikely(err)) + goto out; + au_fset_ren(a->auren_flags, MNT_WRITE); + if (au_ftest_ren(a->auren_flags, DIRREN)) { + struct dentry *root; + struct inode *dir; + + /* + * sbinfo is already locked, so this ii_read_lock is + * unnecessary. but our debugging feature checks it. + */ + root = a->src_inode->i_sb->s_root; + if (root != a->src_parent && root != a->dst_parent) { + dir = d_inode(root); + ii_read_lock_parent3(dir); + a->h_root = au_hi(dir, a->btgt); + ii_read_unlock(dir); + au_hn_inode_lock_nested(a->h_root, AuLsc_I_PARENT3); + } + } + a->h_trap = vfsub_lock_rename(a->src_h_parent, a->src_hdir, + a->dst_h_parent, a->dst_hdir); + udba = au_opt_udba(a->src_dentry->d_sb); + if (unlikely(a->src_hdir->hi_inode != d_inode(a->src_h_parent) + || a->dst_hdir->hi_inode != d_inode(a->dst_h_parent))) + err = au_busy_or_stale(); + if (!err && au_dbtop(a->src_dentry) == a->btgt) + err = au_h_verify(a->src_h_dentry, udba, + d_inode(a->src_h_parent), a->src_h_parent, + a->br); + if (!err && au_dbtop(a->dst_dentry) == a->btgt) + err = au_h_verify(a->dst_h_dentry, udba, + d_inode(a->dst_h_parent), a->dst_h_parent, + a->br); + if (!err) + goto out; /* success */ + + err = au_busy_or_stale(); + au_ren_unlock(a); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_ren_refresh_dir(struct au_ren_args *a) +{ + struct inode *dir; + + dir = a->dst_dir; + dir->i_version++; + if (au_ftest_ren(a->auren_flags, ISDIR_SRC)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->src_inode); + au_cpup_attr_nlink(dir, /*force*/1); + } + au_dir_ts(dir, a->btgt); + + if (a->exchange) { + dir = a->src_dir; + dir->i_version++; + if (au_ftest_ren(a->auren_flags, ISDIR_DST)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->dst_inode); + au_cpup_attr_nlink(dir, /*force*/1); + } + au_dir_ts(dir, a->btgt); + } + + if (au_ftest_ren(a->auren_flags, ISSAMEDIR)) + return; + + dir = a->src_dir; + dir->i_version++; + if (au_ftest_ren(a->auren_flags, ISDIR_SRC)) + au_cpup_attr_nlink(dir, /*force*/1); + au_dir_ts(dir, a->btgt); +} + +static void au_ren_refresh(struct au_ren_args *a) +{ + aufs_bindex_t bbot, bindex; + struct dentry *d, *h_d; + struct inode *i, *h_i; + struct super_block *sb; + + d = a->dst_dentry; + d_drop(d); + if (a->h_dst) + /* already dget-ed by au_ren_or_cpup() */ + au_set_h_dptr(d, a->btgt, a->h_dst); + + i = a->dst_inode; + if (i) { + if (!a->exchange) { + if (!au_ftest_ren(a->auren_flags, ISDIR_DST)) + vfsub_drop_nlink(i); + else { + vfsub_dead_dir(i); + au_cpup_attr_timesizes(i); + } + au_update_dbrange(d, /*do_put_zero*/1); + } else + au_cpup_attr_nlink(i, /*force*/1); + } else { + bbot = a->btgt; + for (bindex = au_dbtop(d); bindex < bbot; bindex++) + au_set_h_dptr(d, bindex, NULL); + bbot = au_dbbot(d); + for (bindex = a->btgt + 1; bindex <= bbot; bindex++) + au_set_h_dptr(d, bindex, NULL); + au_update_dbrange(d, /*do_put_zero*/0); + } + + if (a->exchange + || au_ftest_ren(a->auren_flags, DIRREN)) { + d_drop(a->src_dentry); + if (au_ftest_ren(a->auren_flags, DIRREN)) + au_set_dbwh(a->src_dentry, -1); + return; + } + + d = a->src_dentry; + au_set_dbwh(d, -1); + bbot = au_dbbot(d); + for (bindex = a->btgt + 1; bindex <= bbot; bindex++) { + h_d = au_h_dptr(d, bindex); + if (h_d) + au_set_h_dptr(d, bindex, NULL); + } + au_set_dbbot(d, a->btgt); + + sb = d->d_sb; + i = a->src_inode; + if (au_opt_test(au_mntflags(sb), PLINK) && au_plink_test(i)) + return; /* success */ + + bbot = au_ibbot(i); + for (bindex = a->btgt + 1; bindex <= bbot; bindex++) { + h_i = au_h_iptr(i, bindex); + if (h_i) { + au_xino_write(sb, bindex, h_i->i_ino, /*ino*/0); + /* ignore this error */ + au_set_h_iptr(i, bindex, NULL, 0); + } + } + au_set_ibbot(i, a->btgt); +} + +/* ---------------------------------------------------------------------- */ + +/* mainly for link(2) and rename(2) */ +int au_wbr(struct dentry *dentry, aufs_bindex_t btgt) +{ + aufs_bindex_t bdiropq, bwh; + struct dentry *parent; + struct au_branch *br; + + parent = dentry->d_parent; + IMustLock(d_inode(parent)); /* dir is locked */ + + bdiropq = au_dbdiropq(parent); + bwh = au_dbwh(dentry); + br = au_sbr(dentry->d_sb, btgt); + if (au_br_rdonly(br) + || (0 <= bdiropq && bdiropq < btgt) + || (0 <= bwh && bwh < btgt)) + btgt = -1; + + AuDbg("btgt %d\n", btgt); + return btgt; +} + +/* sets src_btop, dst_btop and btgt */ +static int au_ren_wbr(struct au_ren_args *a) +{ + int err; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ + .flags = AuWrDir_ADD_ENTRY + }; + + a->src_btop = au_dbtop(a->src_dentry); + a->dst_btop = au_dbtop(a->dst_dentry); + if (au_ftest_ren(a->auren_flags, ISDIR_SRC) + || au_ftest_ren(a->auren_flags, ISDIR_DST)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + wr_dir_args.force_btgt = a->src_btop; + if (a->dst_inode && a->dst_btop < a->src_btop) + wr_dir_args.force_btgt = a->dst_btop; + wr_dir_args.force_btgt = au_wbr(a->dst_dentry, wr_dir_args.force_btgt); + err = au_wr_dir(a->dst_dentry, a->src_dentry, &wr_dir_args); + a->btgt = err; + if (a->exchange) + au_update_dbtop(a->dst_dentry); + + return err; +} + +static void au_ren_dt(struct au_ren_args *a) +{ + a->h_path.dentry = a->src_h_parent; + au_dtime_store(a->src_dt + AuPARENT, a->src_parent, &a->h_path); + if (!au_ftest_ren(a->auren_flags, ISSAMEDIR)) { + a->h_path.dentry = a->dst_h_parent; + au_dtime_store(a->dst_dt + AuPARENT, a->dst_parent, &a->h_path); + } + + au_fclr_ren(a->auren_flags, DT_DSTDIR); + if (!au_ftest_ren(a->auren_flags, ISDIR_SRC) + && !a->exchange) + return; + + a->h_path.dentry = a->src_h_dentry; + au_dtime_store(a->src_dt + AuCHILD, a->src_dentry, &a->h_path); + if (d_is_positive(a->dst_h_dentry)) { + au_fset_ren(a->auren_flags, DT_DSTDIR); + a->h_path.dentry = a->dst_h_dentry; + au_dtime_store(a->dst_dt + AuCHILD, a->dst_dentry, &a->h_path); + } +} + +static void au_ren_rev_dt(int err, struct au_ren_args *a) +{ + struct dentry *h_d; + struct inode *h_inode; + + au_dtime_revert(a->src_dt + AuPARENT); + if (!au_ftest_ren(a->auren_flags, ISSAMEDIR)) + au_dtime_revert(a->dst_dt + AuPARENT); + + if (au_ftest_ren(a->auren_flags, ISDIR_SRC) && err != -EIO) { + h_d = a->src_dt[AuCHILD].dt_h_path.dentry; + h_inode = d_inode(h_d); + inode_lock_nested(h_inode, AuLsc_I_CHILD); + au_dtime_revert(a->src_dt + AuCHILD); + inode_unlock(h_inode); + + if (au_ftest_ren(a->auren_flags, DT_DSTDIR)) { + h_d = a->dst_dt[AuCHILD].dt_h_path.dentry; + h_inode = d_inode(h_d); + inode_lock_nested(h_inode, AuLsc_I_CHILD); + au_dtime_revert(a->dst_dt + AuCHILD); + inode_unlock(h_inode); + } + } +} + +/* ---------------------------------------------------------------------- */ + +int aufs_rename(struct inode *_src_dir, struct dentry *_src_dentry, + struct inode *_dst_dir, struct dentry *_dst_dentry, + unsigned int _flags) +{ + int err, lock_flags; + void *rev; + /* reduce stack space */ + struct au_ren_args *a; + struct au_pin pin; + + AuDbg("%pd, %pd, 0x%x\n", _src_dentry, _dst_dentry, _flags); + IMustLock(_src_dir); + IMustLock(_dst_dir); + + err = -EINVAL; + if (unlikely(_flags & RENAME_WHITEOUT)) + goto out; + + err = -ENOMEM; + BUILD_BUG_ON(sizeof(*a) > PAGE_SIZE); + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + a->flags = _flags; + a->exchange = _flags & RENAME_EXCHANGE; + a->src_dir = _src_dir; + a->src_dentry = _src_dentry; + a->src_inode = NULL; + if (d_really_is_positive(a->src_dentry)) + a->src_inode = d_inode(a->src_dentry); + a->src_parent = a->src_dentry->d_parent; /* dir inode is locked */ + a->dst_dir = _dst_dir; + a->dst_dentry = _dst_dentry; + a->dst_inode = NULL; + if (d_really_is_positive(a->dst_dentry)) + a->dst_inode = d_inode(a->dst_dentry); + a->dst_parent = a->dst_dentry->d_parent; /* dir inode is locked */ + if (a->dst_inode) { + /* + * if EXCHANGE && src is non-dir && dst is dir, + * dst is not locked. + */ + /* IMustLock(a->dst_inode); */ + au_igrab(a->dst_inode); + } + + err = -ENOTDIR; + lock_flags = AuLock_FLUSH | AuLock_NOPLM | AuLock_GEN; + if (d_is_dir(a->src_dentry)) { + au_fset_ren(a->auren_flags, ISDIR_SRC); + if (unlikely(!a->exchange + && d_really_is_positive(a->dst_dentry) + && !d_is_dir(a->dst_dentry))) + goto out_free; + lock_flags |= AuLock_DIRS; + } + if (a->dst_inode && d_is_dir(a->dst_dentry)) { + au_fset_ren(a->auren_flags, ISDIR_DST); + if (unlikely(!a->exchange + && d_really_is_positive(a->src_dentry) + && !d_is_dir(a->src_dentry))) + goto out_free; + lock_flags |= AuLock_DIRS; + } + err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, + lock_flags); + if (unlikely(err)) + goto out_free; + + err = au_d_hashed_positive(a->src_dentry); + if (unlikely(err)) + goto out_unlock; + err = -ENOENT; + if (a->dst_inode) { + /* + * If it is a dir, VFS unhash it before this + * function. It means we cannot rely upon d_unhashed(). + */ + if (unlikely(!a->dst_inode->i_nlink)) + goto out_unlock; + if (!au_ftest_ren(a->auren_flags, ISDIR_DST)) { + err = au_d_hashed_positive(a->dst_dentry); + if (unlikely(err && !a->exchange)) + goto out_unlock; + } else if (unlikely(IS_DEADDIR(a->dst_inode))) + goto out_unlock; + } else if (unlikely(d_unhashed(a->dst_dentry))) + goto out_unlock; + + /* + * is it possible? + * yes, it happened (in linux-3.3-rcN) but I don't know why. + * there may exist a problem somewhere else. + */ + err = -EINVAL; + if (unlikely(d_inode(a->dst_parent) == d_inode(a->src_dentry))) + goto out_unlock; + + au_fset_ren(a->auren_flags, ISSAMEDIR); /* temporary */ + di_write_lock_parent(a->dst_parent); + + /* which branch we process */ + err = au_ren_wbr(a); + if (unlikely(err < 0)) + goto out_parent; + a->br = au_sbr(a->dst_dentry->d_sb, a->btgt); + a->h_path.mnt = au_br_mnt(a->br); + + /* are they available to be renamed */ + err = au_ren_may_dir(a); + if (unlikely(err)) + goto out_children; + + /* prepare the writable parent dir on the same branch */ + if (a->dst_btop == a->btgt) { + au_fset_ren(a->auren_flags, WHDST); + } else { + err = au_cpup_dirs(a->dst_dentry, a->btgt); + if (unlikely(err)) + goto out_children; + } + + err = 0; + if (!a->exchange) { + if (a->src_dir != a->dst_dir) { + /* + * this temporary unlock is safe, + * because both dir->i_mutex are locked. + */ + di_write_unlock(a->dst_parent); + di_write_lock_parent(a->src_parent); + err = au_wr_dir_need_wh(a->src_dentry, + au_ftest_ren(a->auren_flags, + ISDIR_SRC), + &a->btgt); + di_write_unlock(a->src_parent); + di_write_lock2_parent(a->src_parent, a->dst_parent, + /*isdir*/1); + au_fclr_ren(a->auren_flags, ISSAMEDIR); + } else + err = au_wr_dir_need_wh(a->src_dentry, + au_ftest_ren(a->auren_flags, + ISDIR_SRC), + &a->btgt); + } + if (unlikely(err < 0)) + goto out_children; + if (err) + au_fset_ren(a->auren_flags, WHSRC); + + /* cpup src */ + if (a->src_btop != a->btgt) { + err = au_pin(&pin, a->src_dentry, a->btgt, + au_opt_udba(a->src_dentry->d_sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (!err) { + struct au_cp_generic cpg = { + .dentry = a->src_dentry, + .bdst = a->btgt, + .bsrc = a->src_btop, + .len = -1, + .pin = &pin, + .flags = AuCpup_DTIME | AuCpup_HOPEN + }; + AuDebugOn(au_dbtop(a->src_dentry) != a->src_btop); + err = au_sio_cpup_simple(&cpg); + au_unpin(&pin); + } + if (unlikely(err)) + goto out_children; + a->src_btop = a->btgt; + a->src_h_dentry = au_h_dptr(a->src_dentry, a->btgt); + if (!a->exchange) + au_fset_ren(a->auren_flags, WHSRC); + } + + /* cpup dst */ + if (a->exchange && a->dst_inode + && a->dst_btop != a->btgt) { + err = au_pin(&pin, a->dst_dentry, a->btgt, + au_opt_udba(a->dst_dentry->d_sb), + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (!err) { + struct au_cp_generic cpg = { + .dentry = a->dst_dentry, + .bdst = a->btgt, + .bsrc = a->dst_btop, + .len = -1, + .pin = &pin, + .flags = AuCpup_DTIME | AuCpup_HOPEN + }; + err = au_sio_cpup_simple(&cpg); + au_unpin(&pin); + } + if (unlikely(err)) + goto out_children; + a->dst_btop = a->btgt; + a->dst_h_dentry = au_h_dptr(a->dst_dentry, a->btgt); + } + + /* lock them all */ + err = au_ren_lock(a); + if (unlikely(err)) + /* leave the copied-up one */ + goto out_children; + + if (!a->exchange) { + if (!au_opt_test(au_mntflags(a->dst_dir->i_sb), UDBA_NONE)) + err = au_may_ren(a); + else if (unlikely(a->dst_dentry->d_name.len > AUFS_MAX_NAMELEN)) + err = -ENAMETOOLONG; + if (unlikely(err)) + goto out_hdir; + } + + /* store timestamps to be revertible */ + au_ren_dt(a); + + /* store dirren info */ + if (au_ftest_ren(a->auren_flags, DIRREN)) { + err = au_dr_rename(a->src_dentry, a->btgt, + &a->dst_dentry->d_name, &rev); + AuTraceErr(err); + if (unlikely(err)) + goto out_dt; + } + + /* here we go */ + err = do_rename(a); + if (unlikely(err)) + goto out_dirren; + + if (au_ftest_ren(a->auren_flags, DIRREN)) + au_dr_rename_fin(a->src_dentry, a->btgt, rev); + + /* update dir attributes */ + au_ren_refresh_dir(a); + + /* dput/iput all lower dentries */ + au_ren_refresh(a); + + goto out_hdir; /* success */ + +out_dirren: + if (au_ftest_ren(a->auren_flags, DIRREN)) + au_dr_rename_rev(a->src_dentry, a->btgt, rev); +out_dt: + au_ren_rev_dt(err, a); +out_hdir: + au_ren_unlock(a); +out_children: + au_nhash_wh_free(&a->whlist); + if (err && a->dst_inode && a->dst_btop != a->btgt) { + AuDbg("btop %d, btgt %d\n", a->dst_btop, a->btgt); + au_set_h_dptr(a->dst_dentry, a->btgt, NULL); + au_set_dbtop(a->dst_dentry, a->dst_btop); + } +out_parent: + if (!err) { + if (d_unhashed(a->src_dentry)) + au_fset_ren(a->auren_flags, DROPPED_SRC); + if (d_unhashed(a->dst_dentry)) + au_fset_ren(a->auren_flags, DROPPED_DST); + if (!a->exchange) + d_move(a->src_dentry, a->dst_dentry); + else { + d_exchange(a->src_dentry, a->dst_dentry); + if (au_ftest_ren(a->auren_flags, DROPPED_DST)) + d_drop(a->dst_dentry); + } + if (au_ftest_ren(a->auren_flags, DROPPED_SRC)) + d_drop(a->src_dentry); + } else { + au_update_dbtop(a->dst_dentry); + if (!a->dst_inode) + d_drop(a->dst_dentry); + } + if (au_ftest_ren(a->auren_flags, ISSAMEDIR)) + di_write_unlock(a->dst_parent); + else + di_write_unlock2(a->src_parent, a->dst_parent); +out_unlock: + aufs_read_and_write_unlock2(a->dst_dentry, a->src_dentry); +out_free: + iput(a->dst_inode); + if (a->thargs) + au_whtmp_rmdir_free(a->thargs); + kfree(a); +out: + AuTraceErr(err); + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/iinfo.c +++ linux-aws-4.15.0/fs/aufs/iinfo.c @@ -0,0 +1,285 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode private data + */ + +#include "aufs.h" + +struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex) +{ + struct inode *h_inode; + struct au_hinode *hinode; + + IiMustAnyLock(inode); + + hinode = au_hinode(au_ii(inode), bindex); + h_inode = hinode->hi_inode; + AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); + return h_inode; +} + +/* todo: hard/soft set? */ +void au_hiput(struct au_hinode *hinode) +{ + au_hn_free(hinode); + dput(hinode->hi_whdentry); + iput(hinode->hi_inode); +} + +unsigned int au_hi_flags(struct inode *inode, int isdir) +{ + unsigned int flags; + const unsigned int mnt_flags = au_mntflags(inode->i_sb); + + flags = 0; + if (au_opt_test(mnt_flags, XINO)) + au_fset_hi(flags, XINO); + if (isdir && au_opt_test(mnt_flags, UDBA_HNOTIFY)) + au_fset_hi(flags, HNOTIFY); + return flags; +} + +void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode, unsigned int flags) +{ + struct au_hinode *hinode; + struct inode *hi; + struct au_iinfo *iinfo = au_ii(inode); + + IiMustWriteLock(inode); + + hinode = au_hinode(iinfo, bindex); + hi = hinode->hi_inode; + AuDebugOn(h_inode && atomic_read(&h_inode->i_count) <= 0); + + if (hi) + au_hiput(hinode); + hinode->hi_inode = h_inode; + if (h_inode) { + int err; + struct super_block *sb = inode->i_sb; + struct au_branch *br; + + AuDebugOn(inode->i_mode + && (h_inode->i_mode & S_IFMT) + != (inode->i_mode & S_IFMT)); + if (bindex == iinfo->ii_btop) + au_cpup_igen(inode, h_inode); + br = au_sbr(sb, bindex); + hinode->hi_id = br->br_id; + if (au_ftest_hi(flags, XINO)) { + err = au_xino_write(sb, bindex, h_inode->i_ino, + inode->i_ino); + if (unlikely(err)) + AuIOErr1("failed au_xino_write() %d\n", err); + } + + if (au_ftest_hi(flags, HNOTIFY) + && au_br_hnotifyable(br->br_perm)) { + err = au_hn_alloc(hinode, inode); + if (unlikely(err)) + AuIOErr1("au_hn_alloc() %d\n", err); + } + } +} + +void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_wh) +{ + struct au_hinode *hinode; + + IiMustWriteLock(inode); + + hinode = au_hinode(au_ii(inode), bindex); + AuDebugOn(hinode->hi_whdentry); + hinode->hi_whdentry = h_wh; +} + +void au_update_iigen(struct inode *inode, int half) +{ + struct au_iinfo *iinfo; + struct au_iigen *iigen; + unsigned int sigen; + + sigen = au_sigen(inode->i_sb); + iinfo = au_ii(inode); + iigen = &iinfo->ii_generation; + spin_lock(&iigen->ig_spin); + iigen->ig_generation = sigen; + if (half) + au_ig_fset(iigen->ig_flags, HALF_REFRESHED); + else + au_ig_fclr(iigen->ig_flags, HALF_REFRESHED); + spin_unlock(&iigen->ig_spin); +} + +/* it may be called at remount time, too */ +void au_update_ibrange(struct inode *inode, int do_put_zero) +{ + struct au_iinfo *iinfo; + aufs_bindex_t bindex, bbot; + + AuDebugOn(au_is_bad_inode(inode)); + IiMustWriteLock(inode); + + iinfo = au_ii(inode); + if (do_put_zero && iinfo->ii_btop >= 0) { + for (bindex = iinfo->ii_btop; bindex <= iinfo->ii_bbot; + bindex++) { + struct inode *h_i; + + h_i = au_hinode(iinfo, bindex)->hi_inode; + if (h_i + && !h_i->i_nlink + && !(h_i->i_state & I_LINKABLE)) + au_set_h_iptr(inode, bindex, NULL, 0); + } + } + + iinfo->ii_btop = -1; + iinfo->ii_bbot = -1; + bbot = au_sbbot(inode->i_sb); + for (bindex = 0; bindex <= bbot; bindex++) + if (au_hinode(iinfo, bindex)->hi_inode) { + iinfo->ii_btop = bindex; + break; + } + if (iinfo->ii_btop >= 0) + for (bindex = bbot; bindex >= iinfo->ii_btop; bindex--) + if (au_hinode(iinfo, bindex)->hi_inode) { + iinfo->ii_bbot = bindex; + break; + } + AuDebugOn(iinfo->ii_btop > iinfo->ii_bbot); +} + +/* ---------------------------------------------------------------------- */ + +void au_icntnr_init_once(void *_c) +{ + struct au_icntnr *c = _c; + struct au_iinfo *iinfo = &c->iinfo; + + spin_lock_init(&iinfo->ii_generation.ig_spin); + au_rw_init(&iinfo->ii_rwsem); + inode_init_once(&c->vfs_inode); +} + +void au_hinode_init(struct au_hinode *hinode) +{ + hinode->hi_inode = NULL; + hinode->hi_id = -1; + au_hn_init(hinode); + hinode->hi_whdentry = NULL; +} + +int au_iinfo_init(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct super_block *sb; + struct au_hinode *hi; + int nbr, i; + + sb = inode->i_sb; + iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); + nbr = au_sbbot(sb) + 1; + if (unlikely(nbr <= 0)) + nbr = 1; + hi = kmalloc_array(nbr, sizeof(*iinfo->ii_hinode), GFP_NOFS); + if (hi) { + au_ninodes_inc(sb); + + iinfo->ii_hinode = hi; + for (i = 0; i < nbr; i++, hi++) + au_hinode_init(hi); + + iinfo->ii_generation.ig_generation = au_sigen(sb); + iinfo->ii_btop = -1; + iinfo->ii_bbot = -1; + iinfo->ii_vdir = NULL; + return 0; + } + return -ENOMEM; +} + +int au_hinode_realloc(struct au_iinfo *iinfo, int nbr, int may_shrink) +{ + int err, i; + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + err = -ENOMEM; + hip = au_krealloc(iinfo->ii_hinode, sizeof(*hip) * nbr, GFP_NOFS, + may_shrink); + if (hip) { + iinfo->ii_hinode = hip; + i = iinfo->ii_bbot + 1; + hip += i; + for (; i < nbr; i++, hip++) + au_hinode_init(hip); + err = 0; + } + + return err; +} + +void au_iinfo_fin(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct au_hinode *hi; + struct super_block *sb; + aufs_bindex_t bindex, bbot; + const unsigned char unlinked = !inode->i_nlink; + + AuDebugOn(au_is_bad_inode(inode)); + + sb = inode->i_sb; + au_ninodes_dec(sb); + if (si_pid_test(sb)) + au_xino_delete_inode(inode, unlinked); + else { + /* + * it is safe to hide the dependency between sbinfo and + * sb->s_umount. + */ + lockdep_off(); + si_noflush_read_lock(sb); + au_xino_delete_inode(inode, unlinked); + si_read_unlock(sb); + lockdep_on(); + } + + iinfo = au_ii(inode); + if (iinfo->ii_vdir) + au_vdir_free(iinfo->ii_vdir); + + bindex = iinfo->ii_btop; + if (bindex >= 0) { + hi = au_hinode(iinfo, bindex); + bbot = iinfo->ii_bbot; + while (bindex++ <= bbot) { + if (hi->hi_inode) + au_hiput(hi); + hi++; + } + } + kfree(iinfo->ii_hinode); + AuRwDestroy(&iinfo->ii_rwsem); +} --- linux-aws-4.15.0.orig/fs/aufs/inode.c +++ linux-aws-4.15.0/fs/aufs/inode.c @@ -0,0 +1,527 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode functions + */ + +#include "aufs.h" + +struct inode *au_igrab(struct inode *inode) +{ + if (inode) { + AuDebugOn(!atomic_read(&inode->i_count)); + ihold(inode); + } + return inode; +} + +static void au_refresh_hinode_attr(struct inode *inode, int do_version) +{ + au_cpup_attr_all(inode, /*force*/0); + au_update_iigen(inode, /*half*/1); + if (do_version) + inode->i_version++; +} + +static int au_ii_refresh(struct inode *inode, int *update) +{ + int err, e, nbr; + umode_t type; + aufs_bindex_t bindex, new_bindex; + struct super_block *sb; + struct au_iinfo *iinfo; + struct au_hinode *p, *q, tmp; + + AuDebugOn(au_is_bad_inode(inode)); + IiMustWriteLock(inode); + + *update = 0; + sb = inode->i_sb; + nbr = au_sbbot(sb) + 1; + type = inode->i_mode & S_IFMT; + iinfo = au_ii(inode); + err = au_hinode_realloc(iinfo, nbr, /*may_shrink*/0); + if (unlikely(err)) + goto out; + + AuDebugOn(iinfo->ii_btop < 0); + p = au_hinode(iinfo, iinfo->ii_btop); + for (bindex = iinfo->ii_btop; bindex <= iinfo->ii_bbot; + bindex++, p++) { + if (!p->hi_inode) + continue; + + AuDebugOn(type != (p->hi_inode->i_mode & S_IFMT)); + new_bindex = au_br_index(sb, p->hi_id); + if (new_bindex == bindex) + continue; + + if (new_bindex < 0) { + *update = 1; + au_hiput(p); + p->hi_inode = NULL; + continue; + } + + if (new_bindex < iinfo->ii_btop) + iinfo->ii_btop = new_bindex; + if (iinfo->ii_bbot < new_bindex) + iinfo->ii_bbot = new_bindex; + /* swap two lower inode, and loop again */ + q = au_hinode(iinfo, new_bindex); + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hi_inode) { + bindex--; + p--; + } + } + au_update_ibrange(inode, /*do_put_zero*/0); + au_hinode_realloc(iinfo, nbr, /*may_shrink*/1); /* harmless if err */ + e = au_dy_irefresh(inode); + if (unlikely(e && !err)) + err = e; + +out: + AuTraceErr(err); + return err; +} + +void au_refresh_iop(struct inode *inode, int force_getattr) +{ + int type; + struct au_sbinfo *sbi = au_sbi(inode->i_sb); + const struct inode_operations *iop + = force_getattr ? aufs_iop : sbi->si_iop_array; + + if (inode->i_op == iop) + return; + + switch (inode->i_mode & S_IFMT) { + case S_IFDIR: + type = AuIop_DIR; + break; + case S_IFLNK: + type = AuIop_SYMLINK; + break; + default: + type = AuIop_OTHER; + break; + } + + inode->i_op = iop + type; + /* unnecessary smp_wmb() */ +} + +int au_refresh_hinode_self(struct inode *inode) +{ + int err, update; + + err = au_ii_refresh(inode, &update); + if (!err) + au_refresh_hinode_attr(inode, update && S_ISDIR(inode->i_mode)); + + AuTraceErr(err); + return err; +} + +int au_refresh_hinode(struct inode *inode, struct dentry *dentry) +{ + int err, e, update; + unsigned int flags; + umode_t mode; + aufs_bindex_t bindex, bbot; + unsigned char isdir; + struct au_hinode *p; + struct au_iinfo *iinfo; + + err = au_ii_refresh(inode, &update); + if (unlikely(err)) + goto out; + + update = 0; + iinfo = au_ii(inode); + p = au_hinode(iinfo, iinfo->ii_btop); + mode = (inode->i_mode & S_IFMT); + isdir = S_ISDIR(mode); + flags = au_hi_flags(inode, isdir); + bbot = au_dbbot(dentry); + for (bindex = au_dbtop(dentry); bindex <= bbot; bindex++) { + struct inode *h_i, *h_inode; + struct dentry *h_d; + + h_d = au_h_dptr(dentry, bindex); + if (!h_d || d_is_negative(h_d)) + continue; + + h_inode = d_inode(h_d); + AuDebugOn(mode != (h_inode->i_mode & S_IFMT)); + if (iinfo->ii_btop <= bindex && bindex <= iinfo->ii_bbot) { + h_i = au_h_iptr(inode, bindex); + if (h_i) { + if (h_i == h_inode) + continue; + err = -EIO; + break; + } + } + if (bindex < iinfo->ii_btop) + iinfo->ii_btop = bindex; + if (iinfo->ii_bbot < bindex) + iinfo->ii_bbot = bindex; + au_set_h_iptr(inode, bindex, au_igrab(h_inode), flags); + update = 1; + } + au_update_ibrange(inode, /*do_put_zero*/0); + e = au_dy_irefresh(inode); + if (unlikely(e && !err)) + err = e; + if (!err) + au_refresh_hinode_attr(inode, update && isdir); + +out: + AuTraceErr(err); + return err; +} + +static int set_inode(struct inode *inode, struct dentry *dentry) +{ + int err; + unsigned int flags; + umode_t mode; + aufs_bindex_t bindex, btop, btail; + unsigned char isdir; + struct dentry *h_dentry; + struct inode *h_inode; + struct au_iinfo *iinfo; + struct inode_operations *iop; + + IiMustWriteLock(inode); + + err = 0; + isdir = 0; + iop = au_sbi(inode->i_sb)->si_iop_array; + btop = au_dbtop(dentry); + h_dentry = au_h_dptr(dentry, btop); + h_inode = d_inode(h_dentry); + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + btail = au_dbtail(dentry); + inode->i_op = iop + AuIop_OTHER; + inode->i_fop = &aufs_file_fop; + err = au_dy_iaop(inode, btop, h_inode); + if (unlikely(err)) + goto out; + break; + case S_IFDIR: + isdir = 1; + btail = au_dbtaildir(dentry); + inode->i_op = iop + AuIop_DIR; + inode->i_fop = &aufs_dir_fop; + break; + case S_IFLNK: + btail = au_dbtail(dentry); + inode->i_op = iop + AuIop_SYMLINK; + break; + case S_IFBLK: + case S_IFCHR: + case S_IFIFO: + case S_IFSOCK: + btail = au_dbtail(dentry); + inode->i_op = iop + AuIop_OTHER; + init_special_inode(inode, mode, h_inode->i_rdev); + break; + default: + AuIOErr("Unknown file type 0%o\n", mode); + err = -EIO; + goto out; + } + + /* do not set hnotify for whiteouted dirs (SHWH mode) */ + flags = au_hi_flags(inode, isdir); + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH) + && au_ftest_hi(flags, HNOTIFY) + && dentry->d_name.len > AUFS_WH_PFX_LEN + && !memcmp(dentry->d_name.name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) + au_fclr_hi(flags, HNOTIFY); + iinfo = au_ii(inode); + iinfo->ii_btop = btop; + iinfo->ii_bbot = btail; + for (bindex = btop; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) + au_set_h_iptr(inode, bindex, + au_igrab(d_inode(h_dentry)), flags); + } + au_cpup_attr_all(inode, /*force*/1); + /* + * to force calling aufs_get_acl() every time, + * do not call cache_no_acl() for aufs inode. + */ + +out: + return err; +} + +/* + * successful returns with iinfo write_locked + * minus: errno + * zero: success, matched + * plus: no error, but unmatched + */ +static int reval_inode(struct inode *inode, struct dentry *dentry) +{ + int err; + unsigned int gen, igflags; + aufs_bindex_t bindex, bbot; + struct inode *h_inode, *h_dinode; + struct dentry *h_dentry; + + /* + * before this function, if aufs got any iinfo lock, it must be only + * one, the parent dir. + * it can happen by UDBA and the obsoleted inode number. + */ + err = -EIO; + if (unlikely(inode->i_ino == parent_ino(dentry))) + goto out; + + err = 1; + ii_write_lock_new_child(inode); + h_dentry = au_h_dptr(dentry, au_dbtop(dentry)); + h_dinode = d_inode(h_dentry); + bbot = au_ibbot(inode); + for (bindex = au_ibtop(inode); bindex <= bbot; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (!h_inode || h_inode != h_dinode) + continue; + + err = 0; + gen = au_iigen(inode, &igflags); + if (gen == au_digen(dentry) + && !au_ig_ftest(igflags, HALF_REFRESHED)) + break; + + /* fully refresh inode using dentry */ + err = au_refresh_hinode(inode, dentry); + if (!err) + au_update_iigen(inode, /*half*/0); + break; + } + + if (unlikely(err)) + ii_write_unlock(inode); +out: + return err; +} + +int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + unsigned int d_type, ino_t *ino) +{ + int err, idx; + const int isnondir = d_type != DT_DIR; + + /* prevent hardlinked inode number from race condition */ + if (isnondir) { + err = au_xinondir_enter(sb, bindex, h_ino, &idx); + if (unlikely(err)) + goto out; + } + + err = au_xino_read(sb, bindex, h_ino, ino); + if (unlikely(err)) + goto out_xinondir; + + if (!*ino) { + err = -EIO; + *ino = au_xino_new_ino(sb); + if (unlikely(!*ino)) + goto out_xinondir; + err = au_xino_write(sb, bindex, h_ino, *ino); + if (unlikely(err)) + goto out_xinondir; + } + +out_xinondir: + if (isnondir && idx >= 0) + au_xinondir_leave(sb, bindex, h_ino, idx); +out: + return err; +} + +/* successful returns with iinfo write_locked */ +/* todo: return with unlocked? */ +struct inode *au_new_inode(struct dentry *dentry, int must_new) +{ + struct inode *inode, *h_inode; + struct dentry *h_dentry; + struct super_block *sb; + ino_t h_ino, ino; + int err, idx, hlinked; + aufs_bindex_t btop; + + sb = dentry->d_sb; + btop = au_dbtop(dentry); + h_dentry = au_h_dptr(dentry, btop); + h_inode = d_inode(h_dentry); + h_ino = h_inode->i_ino; + hlinked = !d_is_dir(h_dentry) && h_inode->i_nlink > 1; + +new_ino: + /* + * stop 'race'-ing between hardlinks under different + * parents. + */ + if (hlinked) { + err = au_xinondir_enter(sb, btop, h_ino, &idx); + inode = ERR_PTR(err); + if (unlikely(err)) + goto out; + } + + err = au_xino_read(sb, btop, h_ino, &ino); + inode = ERR_PTR(err); + if (unlikely(err)) + goto out_xinondir; + + if (!ino) { + ino = au_xino_new_ino(sb); + if (unlikely(!ino)) { + inode = ERR_PTR(-EIO); + goto out_xinondir; + } + } + + AuDbg("i%lu\n", (unsigned long)ino); + inode = au_iget_locked(sb, ino); + err = PTR_ERR(inode); + if (IS_ERR(inode)) + goto out_xinondir; + + AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW)); + if (inode->i_state & I_NEW) { + ii_write_lock_new_child(inode); + err = set_inode(inode, dentry); + if (!err) { + unlock_new_inode(inode); + goto out_xinondir; /* success */ + } + + /* + * iget_failed() calls iput(), but we need to call + * ii_write_unlock() after iget_failed(). so dirty hack for + * i_count. + */ + atomic_inc(&inode->i_count); + iget_failed(inode); + ii_write_unlock(inode); + au_xino_write(sb, btop, h_ino, /*ino*/0); + /* ignore this error */ + goto out_iput; + } else if (!must_new && !IS_DEADDIR(inode) && inode->i_nlink) { + /* + * horrible race condition between lookup, readdir and copyup + * (or something). + */ + if (hlinked && idx >= 0) + au_xinondir_leave(sb, btop, h_ino, idx); + err = reval_inode(inode, dentry); + if (unlikely(err < 0)) { + hlinked = 0; + goto out_iput; + } + if (!err) + goto out; /* success */ + else if (hlinked && idx >= 0) { + err = au_xinondir_enter(sb, btop, h_ino, &idx); + if (unlikely(err)) { + iput(inode); + inode = ERR_PTR(err); + goto out; + } + } + } + + if (unlikely(au_test_fs_unique_ino(h_inode))) + AuWarn1("Warning: Un-notified UDBA or repeatedly renamed dir," + " b%d, %s, %pd, hi%lu, i%lu.\n", + btop, au_sbtype(h_dentry->d_sb), dentry, + (unsigned long)h_ino, (unsigned long)ino); + ino = 0; + err = au_xino_write(sb, btop, h_ino, /*ino*/0); + if (!err) { + iput(inode); + if (hlinked && idx >= 0) + au_xinondir_leave(sb, btop, h_ino, idx); + goto new_ino; + } + +out_iput: + iput(inode); + inode = ERR_PTR(err); +out_xinondir: + if (hlinked && idx >= 0) + au_xinondir_leave(sb, btop, h_ino, idx); +out: + return inode; +} + +/* ---------------------------------------------------------------------- */ + +int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, + struct inode *inode) +{ + int err; + struct inode *hi; + + err = au_br_rdonly(au_sbr(sb, bindex)); + + /* pseudo-link after flushed may happen out of bounds */ + if (!err + && inode + && au_ibtop(inode) <= bindex + && bindex <= au_ibbot(inode)) { + /* + * permission check is unnecessary since vfsub routine + * will be called later + */ + hi = au_h_iptr(inode, bindex); + if (hi) + err = IS_IMMUTABLE(hi) ? -EROFS : 0; + } + + return err; +} + +int au_test_h_perm(struct inode *h_inode, int mask) +{ + if (uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) + return 0; + return inode_permission(h_inode, mask); +} + +int au_test_h_perm_sio(struct inode *h_inode, int mask) +{ + if (au_test_nfs(h_inode->i_sb) + && (mask & MAY_WRITE) + && S_ISDIR(h_inode->i_mode)) + mask |= MAY_READ; /* force permission check */ + return au_test_h_perm(h_inode, mask); +} --- linux-aws-4.15.0.orig/fs/aufs/inode.h +++ linux-aws-4.15.0/fs/aufs/inode.h @@ -0,0 +1,695 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * inode operations + */ + +#ifndef __AUFS_INODE_H__ +#define __AUFS_INODE_H__ + +#ifdef __KERNEL__ + +#include +#include "rwsem.h" + +struct vfsmount; + +struct au_hnotify { +#ifdef CONFIG_AUFS_HNOTIFY +#ifdef CONFIG_AUFS_HFSNOTIFY + /* never use fsnotify_add_vfsmount_mark() */ + struct fsnotify_mark hn_mark; +#endif + struct inode *hn_aufs_inode; /* no get/put */ +#endif +} ____cacheline_aligned_in_smp; + +struct au_hinode { + struct inode *hi_inode; + aufs_bindex_t hi_id; +#ifdef CONFIG_AUFS_HNOTIFY + struct au_hnotify *hi_notify; +#endif + + /* reference to the copied-up whiteout with get/put */ + struct dentry *hi_whdentry; +}; + +/* ig_flags */ +#define AuIG_HALF_REFRESHED 1 +#define au_ig_ftest(flags, name) ((flags) & AuIG_##name) +#define au_ig_fset(flags, name) \ + do { (flags) |= AuIG_##name; } while (0) +#define au_ig_fclr(flags, name) \ + do { (flags) &= ~AuIG_##name; } while (0) + +struct au_iigen { + spinlock_t ig_spin; + __u32 ig_generation, ig_flags; +}; + +struct au_vdir; +struct au_iinfo { + struct au_iigen ii_generation; + struct super_block *ii_hsb1; /* no get/put */ + + struct au_rwsem ii_rwsem; + aufs_bindex_t ii_btop, ii_bbot; + __u32 ii_higen; + struct au_hinode *ii_hinode; + struct au_vdir *ii_vdir; +}; + +struct au_icntnr { + struct au_iinfo iinfo; + struct inode vfs_inode; + struct hlist_bl_node plink; +} ____cacheline_aligned_in_smp; + +/* au_pin flags */ +#define AuPin_DI_LOCKED 1 +#define AuPin_MNT_WRITE (1 << 1) +#define au_ftest_pin(flags, name) ((flags) & AuPin_##name) +#define au_fset_pin(flags, name) \ + do { (flags) |= AuPin_##name; } while (0) +#define au_fclr_pin(flags, name) \ + do { (flags) &= ~AuPin_##name; } while (0) + +struct au_pin { + /* input */ + struct dentry *dentry; + unsigned int udba; + unsigned char lsc_di, lsc_hi, flags; + aufs_bindex_t bindex; + + /* output */ + struct dentry *parent; + struct au_hinode *hdir; + struct vfsmount *h_mnt; + + /* temporary unlock/relock for copyup */ + struct dentry *h_dentry, *h_parent; + struct au_branch *br; + struct task_struct *task; +}; + +void au_pin_hdir_unlock(struct au_pin *p); +int au_pin_hdir_lock(struct au_pin *p); +int au_pin_hdir_relock(struct au_pin *p); +void au_pin_hdir_acquire_nest(struct au_pin *p); +void au_pin_hdir_release(struct au_pin *p); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_iinfo *au_ii(struct inode *inode) +{ + BUG_ON(is_bad_inode(inode)); + return &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); +} + +/* ---------------------------------------------------------------------- */ + +/* inode.c */ +struct inode *au_igrab(struct inode *inode); +void au_refresh_iop(struct inode *inode, int force_getattr); +int au_refresh_hinode_self(struct inode *inode); +int au_refresh_hinode(struct inode *inode, struct dentry *dentry); +int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + unsigned int d_type, ino_t *ino); +struct inode *au_new_inode(struct dentry *dentry, int must_new); +int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, + struct inode *inode); +int au_test_h_perm(struct inode *h_inode, int mask); +int au_test_h_perm_sio(struct inode *h_inode, int mask); + +static inline int au_wh_ino(struct super_block *sb, aufs_bindex_t bindex, + ino_t h_ino, unsigned int d_type, ino_t *ino) +{ +#ifdef CONFIG_AUFS_SHWH + return au_ino(sb, bindex, h_ino, d_type, ino); +#else + return 0; +#endif +} + +/* i_op.c */ +enum { + AuIop_SYMLINK, + AuIop_DIR, + AuIop_OTHER, + AuIop_Last +}; +extern struct inode_operations aufs_iop[AuIop_Last], + aufs_iop_nogetattr[AuIop_Last]; + +/* au_wr_dir flags */ +#define AuWrDir_ADD_ENTRY 1 +#define AuWrDir_ISDIR (1 << 1) +#define AuWrDir_TMPFILE (1 << 2) +#define au_ftest_wrdir(flags, name) ((flags) & AuWrDir_##name) +#define au_fset_wrdir(flags, name) \ + do { (flags) |= AuWrDir_##name; } while (0) +#define au_fclr_wrdir(flags, name) \ + do { (flags) &= ~AuWrDir_##name; } while (0) + +struct au_wr_dir_args { + aufs_bindex_t force_btgt; + unsigned char flags; +}; +int au_wr_dir(struct dentry *dentry, struct dentry *src_dentry, + struct au_wr_dir_args *args); + +struct dentry *au_pinned_h_parent(struct au_pin *pin); +void au_pin_init(struct au_pin *pin, struct dentry *dentry, + aufs_bindex_t bindex, int lsc_di, int lsc_hi, + unsigned int udba, unsigned char flags); +int au_pin(struct au_pin *pin, struct dentry *dentry, aufs_bindex_t bindex, + unsigned int udba, unsigned char flags) __must_check; +int au_do_pin(struct au_pin *pin) __must_check; +void au_unpin(struct au_pin *pin); +int au_reval_for_attr(struct dentry *dentry, unsigned int sigen); + +#define AuIcpup_DID_CPUP 1 +#define au_ftest_icpup(flags, name) ((flags) & AuIcpup_##name) +#define au_fset_icpup(flags, name) \ + do { (flags) |= AuIcpup_##name; } while (0) +#define au_fclr_icpup(flags, name) \ + do { (flags) &= ~AuIcpup_##name; } while (0) + +struct au_icpup_args { + unsigned char flags; + unsigned char pin_flags; + aufs_bindex_t btgt; + unsigned int udba; + struct au_pin pin; + struct path h_path; + struct inode *h_inode; +}; + +int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia, + struct au_icpup_args *a); + +int au_h_path_getattr(struct dentry *dentry, int force, struct path *h_path, + int locked); + +/* i_op_add.c */ +int au_may_add(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir); +int aufs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, + dev_t dev); +int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname); +int aufs_create(struct inode *dir, struct dentry *dentry, umode_t mode, + bool want_excl); +struct vfsub_aopen_args; +int au_aopen_or_create(struct inode *dir, struct dentry *dentry, + struct vfsub_aopen_args *args); +int aufs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode); +int aufs_link(struct dentry *src_dentry, struct inode *dir, + struct dentry *dentry); +int aufs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode); + +/* i_op_del.c */ +int au_wr_dir_need_wh(struct dentry *dentry, int isdir, aufs_bindex_t *bcpup); +int au_may_del(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent, int isdir); +int aufs_unlink(struct inode *dir, struct dentry *dentry); +int aufs_rmdir(struct inode *dir, struct dentry *dentry); + +/* i_op_ren.c */ +int au_wbr(struct dentry *dentry, aufs_bindex_t btgt); +int aufs_rename(struct inode *src_dir, struct dentry *src_dentry, + struct inode *dir, struct dentry *dentry, + unsigned int flags); + +/* iinfo.c */ +struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex); +void au_hiput(struct au_hinode *hinode); +void au_set_hi_wh(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_wh); +unsigned int au_hi_flags(struct inode *inode, int isdir); + +/* hinode flags */ +#define AuHi_XINO 1 +#define AuHi_HNOTIFY (1 << 1) +#define au_ftest_hi(flags, name) ((flags) & AuHi_##name) +#define au_fset_hi(flags, name) \ + do { (flags) |= AuHi_##name; } while (0) +#define au_fclr_hi(flags, name) \ + do { (flags) &= ~AuHi_##name; } while (0) + +#ifndef CONFIG_AUFS_HNOTIFY +#undef AuHi_HNOTIFY +#define AuHi_HNOTIFY 0 +#endif + +void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex, + struct inode *h_inode, unsigned int flags); + +void au_update_iigen(struct inode *inode, int half); +void au_update_ibrange(struct inode *inode, int do_put_zero); + +void au_icntnr_init_once(void *_c); +void au_hinode_init(struct au_hinode *hinode); +int au_iinfo_init(struct inode *inode); +void au_iinfo_fin(struct inode *inode); +int au_hinode_realloc(struct au_iinfo *iinfo, int nbr, int may_shrink); + +#ifdef CONFIG_PROC_FS +/* plink.c */ +int au_plink_maint(struct super_block *sb, int flags); +struct au_sbinfo; +void au_plink_maint_leave(struct au_sbinfo *sbinfo); +int au_plink_maint_enter(struct super_block *sb); +#ifdef CONFIG_AUFS_DEBUG +void au_plink_list(struct super_block *sb); +#else +AuStubVoid(au_plink_list, struct super_block *sb) +#endif +int au_plink_test(struct inode *inode); +struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex); +void au_plink_append(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_dentry); +void au_plink_put(struct super_block *sb, int verbose); +void au_plink_clean(struct super_block *sb, int verbose); +void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id); +#else +AuStubInt0(au_plink_maint, struct super_block *sb, int flags); +AuStubVoid(au_plink_maint_leave, struct au_sbinfo *sbinfo); +AuStubInt0(au_plink_maint_enter, struct super_block *sb); +AuStubVoid(au_plink_list, struct super_block *sb); +AuStubInt0(au_plink_test, struct inode *inode); +AuStub(struct dentry *, au_plink_lkup, return NULL, + struct inode *inode, aufs_bindex_t bindex); +AuStubVoid(au_plink_append, struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_dentry); +AuStubVoid(au_plink_put, struct super_block *sb, int verbose); +AuStubVoid(au_plink_clean, struct super_block *sb, int verbose); +AuStubVoid(au_plink_half_refresh, struct super_block *sb, aufs_bindex_t br_id); +#endif /* CONFIG_PROC_FS */ + +#ifdef CONFIG_AUFS_XATTR +/* xattr.c */ +int au_cpup_xattr(struct dentry *h_dst, struct dentry *h_src, int ignore_flags, + unsigned int verbose); +ssize_t aufs_listxattr(struct dentry *dentry, char *list, size_t size); +void au_xattr_init(struct super_block *sb); +#else +AuStubInt0(au_cpup_xattr, struct dentry *h_dst, struct dentry *h_src, + int ignore_flags, unsigned int verbose); +AuStubVoid(au_xattr_init, struct super_block *sb); +#endif + +#ifdef CONFIG_FS_POSIX_ACL +struct posix_acl *aufs_get_acl(struct inode *inode, int type); +int aufs_set_acl(struct inode *inode, struct posix_acl *acl, int type); +#endif + +#if IS_ENABLED(CONFIG_AUFS_XATTR) || IS_ENABLED(CONFIG_FS_POSIX_ACL) +enum { + AU_XATTR_SET, + AU_ACL_SET +}; + +struct au_sxattr { + int type; + union { + struct { + const char *name; + const void *value; + size_t size; + int flags; + } set; + struct { + struct posix_acl *acl; + int type; + } acl_set; + } u; +}; +ssize_t au_sxattr(struct dentry *dentry, struct inode *inode, + struct au_sxattr *arg); +#endif + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for iinfo */ +enum { + AuLsc_II_CHILD, /* child first */ + AuLsc_II_CHILD2, /* rename(2), link(2), and cpup at hnotify */ + AuLsc_II_CHILD3, /* copyup dirs */ + AuLsc_II_PARENT, /* see AuLsc_I_PARENT in vfsub.h */ + AuLsc_II_PARENT2, + AuLsc_II_PARENT3, /* copyup dirs */ + AuLsc_II_NEW_CHILD +}; + +/* + * ii_read_lock_child, ii_write_lock_child, + * ii_read_lock_child2, ii_write_lock_child2, + * ii_read_lock_child3, ii_write_lock_child3, + * ii_read_lock_parent, ii_write_lock_parent, + * ii_read_lock_parent2, ii_write_lock_parent2, + * ii_read_lock_parent3, ii_write_lock_parent3, + * ii_read_lock_new_child, ii_write_lock_new_child, + */ +#define AuReadLockFunc(name, lsc) \ +static inline void ii_read_lock_##name(struct inode *i) \ +{ \ + au_rw_read_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ +} + +#define AuWriteLockFunc(name, lsc) \ +static inline void ii_write_lock_##name(struct inode *i) \ +{ \ + au_rw_write_lock_nested(&au_ii(i)->ii_rwsem, AuLsc_II_##lsc); \ +} + +#define AuRWLockFuncs(name, lsc) \ + AuReadLockFunc(name, lsc) \ + AuWriteLockFunc(name, lsc) + +AuRWLockFuncs(child, CHILD); +AuRWLockFuncs(child2, CHILD2); +AuRWLockFuncs(child3, CHILD3); +AuRWLockFuncs(parent, PARENT); +AuRWLockFuncs(parent2, PARENT2); +AuRWLockFuncs(parent3, PARENT3); +AuRWLockFuncs(new_child, NEW_CHILD); + +#undef AuReadLockFunc +#undef AuWriteLockFunc +#undef AuRWLockFuncs + +#define ii_read_unlock(i) au_rw_read_unlock(&au_ii(i)->ii_rwsem) +#define ii_write_unlock(i) au_rw_write_unlock(&au_ii(i)->ii_rwsem) +#define ii_downgrade_lock(i) au_rw_dgrade_lock(&au_ii(i)->ii_rwsem) + +#define IiMustNoWaiters(i) AuRwMustNoWaiters(&au_ii(i)->ii_rwsem) +#define IiMustAnyLock(i) AuRwMustAnyLock(&au_ii(i)->ii_rwsem) +#define IiMustWriteLock(i) AuRwMustWriteLock(&au_ii(i)->ii_rwsem) + +/* ---------------------------------------------------------------------- */ + +static inline void au_icntnr_init(struct au_icntnr *c) +{ +#ifdef CONFIG_AUFS_DEBUG + c->vfs_inode.i_mode = 0; +#endif +} + +static inline unsigned int au_iigen(struct inode *inode, unsigned int *igflags) +{ + unsigned int gen; + struct au_iinfo *iinfo; + struct au_iigen *iigen; + + iinfo = au_ii(inode); + iigen = &iinfo->ii_generation; + spin_lock(&iigen->ig_spin); + if (igflags) + *igflags = iigen->ig_flags; + gen = iigen->ig_generation; + spin_unlock(&iigen->ig_spin); + + return gen; +} + +/* tiny test for inode number */ +/* tmpfs generation is too rough */ +static inline int au_test_higen(struct inode *inode, struct inode *h_inode) +{ + struct au_iinfo *iinfo; + + iinfo = au_ii(inode); + AuRwMustAnyLock(&iinfo->ii_rwsem); + return !(iinfo->ii_hsb1 == h_inode->i_sb + && iinfo->ii_higen == h_inode->i_generation); +} + +static inline void au_iigen_dec(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct au_iigen *iigen; + + iinfo = au_ii(inode); + iigen = &iinfo->ii_generation; + spin_lock(&iigen->ig_spin); + iigen->ig_generation--; + spin_unlock(&iigen->ig_spin); +} + +static inline int au_iigen_test(struct inode *inode, unsigned int sigen) +{ + int err; + + err = 0; + if (unlikely(inode && au_iigen(inode, NULL) != sigen)) + err = -EIO; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static inline struct au_hinode *au_hinode(struct au_iinfo *iinfo, + aufs_bindex_t bindex) +{ + return iinfo->ii_hinode + bindex; +} + +static inline int au_is_bad_inode(struct inode *inode) +{ + return !!(is_bad_inode(inode) || !au_hinode(au_ii(inode), 0)); +} + +static inline aufs_bindex_t au_ii_br_id(struct inode *inode, + aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_hinode(au_ii(inode), bindex)->hi_id; +} + +static inline aufs_bindex_t au_ibtop(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_btop; +} + +static inline aufs_bindex_t au_ibbot(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_bbot; +} + +static inline struct au_vdir *au_ivdir(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_vdir; +} + +static inline struct dentry *au_hi_wh(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_hinode(au_ii(inode), bindex)->hi_whdentry; +} + +static inline void au_set_ibtop(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_btop = bindex; +} + +static inline void au_set_ibbot(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_bbot = bindex; +} + +static inline void au_set_ivdir(struct inode *inode, struct au_vdir *vdir) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_vdir = vdir; +} + +static inline struct au_hinode *au_hi(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_hinode(au_ii(inode), bindex); +} + +/* ---------------------------------------------------------------------- */ + +static inline struct dentry *au_pinned_parent(struct au_pin *pin) +{ + if (pin) + return pin->parent; + return NULL; +} + +static inline struct inode *au_pinned_h_dir(struct au_pin *pin) +{ + if (pin && pin->hdir) + return pin->hdir->hi_inode; + return NULL; +} + +static inline struct au_hinode *au_pinned_hdir(struct au_pin *pin) +{ + if (pin) + return pin->hdir; + return NULL; +} + +static inline void au_pin_set_dentry(struct au_pin *pin, struct dentry *dentry) +{ + if (pin) + pin->dentry = dentry; +} + +static inline void au_pin_set_parent_lflag(struct au_pin *pin, + unsigned char lflag) +{ + if (pin) { + if (lflag) + au_fset_pin(pin->flags, DI_LOCKED); + else + au_fclr_pin(pin->flags, DI_LOCKED); + } +} + +#if 0 /* reserved */ +static inline void au_pin_set_parent(struct au_pin *pin, struct dentry *parent) +{ + if (pin) { + dput(pin->parent); + pin->parent = dget(parent); + } +} +#endif + +/* ---------------------------------------------------------------------- */ + +struct au_branch; +#ifdef CONFIG_AUFS_HNOTIFY +struct au_hnotify_op { + void (*ctl)(struct au_hinode *hinode, int do_set); + int (*alloc)(struct au_hinode *hinode); + + /* + * if it returns true, the the caller should free hinode->hi_notify, + * otherwise ->free() frees it. + */ + int (*free)(struct au_hinode *hinode, + struct au_hnotify *hn) __must_check; + + void (*fin)(void); + int (*init)(void); + + int (*reset_br)(unsigned int udba, struct au_branch *br, int perm); + void (*fin_br)(struct au_branch *br); + int (*init_br)(struct au_branch *br, int perm); +}; + +/* hnotify.c */ +int au_hn_alloc(struct au_hinode *hinode, struct inode *inode); +void au_hn_free(struct au_hinode *hinode); +void au_hn_ctl(struct au_hinode *hinode, int do_set); +void au_hn_reset(struct inode *inode, unsigned int flags); +int au_hnotify(struct inode *h_dir, struct au_hnotify *hnotify, u32 mask, + struct qstr *h_child_qstr, struct inode *h_child_inode); +int au_hnotify_reset_br(unsigned int udba, struct au_branch *br, int perm); +int au_hnotify_init_br(struct au_branch *br, int perm); +void au_hnotify_fin_br(struct au_branch *br); +int __init au_hnotify_init(void); +void au_hnotify_fin(void); + +/* hfsnotify.c */ +extern const struct au_hnotify_op au_hnotify_op; + +static inline +void au_hn_init(struct au_hinode *hinode) +{ + hinode->hi_notify = NULL; +} + +static inline struct au_hnotify *au_hn(struct au_hinode *hinode) +{ + return hinode->hi_notify; +} + +#else +AuStub(int, au_hn_alloc, return -EOPNOTSUPP, + struct au_hinode *hinode __maybe_unused, + struct inode *inode __maybe_unused) +AuStub(struct au_hnotify *, au_hn, return NULL, struct au_hinode *hinode) +AuStubVoid(au_hn_free, struct au_hinode *hinode __maybe_unused) +AuStubVoid(au_hn_ctl, struct au_hinode *hinode __maybe_unused, + int do_set __maybe_unused) +AuStubVoid(au_hn_reset, struct inode *inode __maybe_unused, + unsigned int flags __maybe_unused) +AuStubInt0(au_hnotify_reset_br, unsigned int udba __maybe_unused, + struct au_branch *br __maybe_unused, + int perm __maybe_unused) +AuStubInt0(au_hnotify_init_br, struct au_branch *br __maybe_unused, + int perm __maybe_unused) +AuStubVoid(au_hnotify_fin_br, struct au_branch *br __maybe_unused) +AuStubInt0(__init au_hnotify_init, void) +AuStubVoid(au_hnotify_fin, void) +AuStubVoid(au_hn_init, struct au_hinode *hinode __maybe_unused) +#endif /* CONFIG_AUFS_HNOTIFY */ + +static inline void au_hn_suspend(struct au_hinode *hdir) +{ + au_hn_ctl(hdir, /*do_set*/0); +} + +static inline void au_hn_resume(struct au_hinode *hdir) +{ + au_hn_ctl(hdir, /*do_set*/1); +} + +static inline void au_hn_inode_lock(struct au_hinode *hdir) +{ + inode_lock(hdir->hi_inode); + au_hn_suspend(hdir); +} + +static inline void au_hn_inode_lock_nested(struct au_hinode *hdir, + unsigned int sc __maybe_unused) +{ + inode_lock_nested(hdir->hi_inode, sc); + au_hn_suspend(hdir); +} + +#if 0 /* unused */ +#include "vfsub.h" +static inline void au_hn_inode_lock_shared_nested(struct au_hinode *hdir, + unsigned int sc) +{ + vfsub_inode_lock_shared_nested(hdir->hi_inode, sc); + au_hn_suspend(hdir); +} +#endif + +static inline void au_hn_inode_unlock(struct au_hinode *hdir) +{ + au_hn_resume(hdir); + inode_unlock(hdir->hi_inode); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/ioctl.c +++ linux-aws-4.15.0/fs/aufs/ioctl.c @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * ioctl + * plink-management and readdir in userspace. + * assist the pathconf(3) wrapper library. + * move-down + * File-based Hierarchical Storage Management. + */ + +#include +#include +#include "aufs.h" + +static int au_wbr_fd(struct path *path, struct aufs_wbr_fd __user *arg) +{ + int err, fd; + aufs_bindex_t wbi, bindex, bbot; + struct file *h_file; + struct super_block *sb; + struct dentry *root; + struct au_branch *br; + struct aufs_wbr_fd wbrfd = { + .oflags = au_dir_roflags, + .brid = -1 + }; + const int valid = O_RDONLY | O_NONBLOCK | O_LARGEFILE | O_DIRECTORY + | O_NOATIME | O_CLOEXEC; + + AuDebugOn(wbrfd.oflags & ~valid); + + if (arg) { + err = copy_from_user(&wbrfd, arg, sizeof(wbrfd)); + if (unlikely(err)) { + err = -EFAULT; + goto out; + } + + err = -EINVAL; + AuDbg("wbrfd{0%o, %d}\n", wbrfd.oflags, wbrfd.brid); + wbrfd.oflags |= au_dir_roflags; + AuDbg("0%o\n", wbrfd.oflags); + if (unlikely(wbrfd.oflags & ~valid)) + goto out; + } + + fd = get_unused_fd_flags(0); + err = fd; + if (unlikely(fd < 0)) + goto out; + + h_file = ERR_PTR(-EINVAL); + wbi = 0; + br = NULL; + sb = path->dentry->d_sb; + root = sb->s_root; + aufs_read_lock(root, AuLock_IR); + bbot = au_sbbot(sb); + if (wbrfd.brid >= 0) { + wbi = au_br_index(sb, wbrfd.brid); + if (unlikely(wbi < 0 || wbi > bbot)) + goto out_unlock; + } + + h_file = ERR_PTR(-ENOENT); + br = au_sbr(sb, wbi); + if (!au_br_writable(br->br_perm)) { + if (arg) + goto out_unlock; + + bindex = wbi + 1; + wbi = -1; + for (; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_writable(br->br_perm)) { + wbi = bindex; + br = au_sbr(sb, wbi); + break; + } + } + } + AuDbg("wbi %d\n", wbi); + if (wbi >= 0) + h_file = au_h_open(root, wbi, wbrfd.oflags, NULL, + /*force_wr*/0); + +out_unlock: + aufs_read_unlock(root, AuLock_IR); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out_fd; + + au_br_put(br); /* cf. au_h_open() */ + fd_install(fd, h_file); + err = fd; + goto out; /* success */ + +out_fd: + put_unused_fd(fd); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +long aufs_ioctl_dir(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err; + struct dentry *dentry; + + switch (cmd) { + case AUFS_CTL_RDU: + case AUFS_CTL_RDU_INO: + err = au_rdu_ioctl(file, cmd, arg); + break; + + case AUFS_CTL_WBR_FD: + err = au_wbr_fd(&file->f_path, (void __user *)arg); + break; + + case AUFS_CTL_IBUSY: + err = au_ibusy_ioctl(file, arg); + break; + + case AUFS_CTL_BRINFO: + err = au_brinfo_ioctl(file, arg); + break; + + case AUFS_CTL_FHSM_FD: + dentry = file->f_path.dentry; + if (IS_ROOT(dentry)) + err = au_fhsm_fd(dentry->d_sb, arg); + else + err = -ENOTTY; + break; + + default: + /* do not call the lower */ + AuDbg("0x%x\n", cmd); + err = -ENOTTY; + } + + AuTraceErr(err); + return err; +} + +long aufs_ioctl_nondir(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err; + + switch (cmd) { + case AUFS_CTL_MVDOWN: + err = au_mvdown(file->f_path.dentry, (void __user *)arg); + break; + + case AUFS_CTL_WBR_FD: + err = au_wbr_fd(&file->f_path, (void __user *)arg); + break; + + default: + /* do not call the lower */ + AuDbg("0x%x\n", cmd); + err = -ENOTTY; + } + + AuTraceErr(err); + return err; +} + +#ifdef CONFIG_COMPAT +long aufs_compat_ioctl_dir(struct file *file, unsigned int cmd, + unsigned long arg) +{ + long err; + + switch (cmd) { + case AUFS_CTL_RDU: + case AUFS_CTL_RDU_INO: + err = au_rdu_compat_ioctl(file, cmd, arg); + break; + + case AUFS_CTL_IBUSY: + err = au_ibusy_compat_ioctl(file, arg); + break; + + case AUFS_CTL_BRINFO: + err = au_brinfo_compat_ioctl(file, arg); + break; + + default: + err = aufs_ioctl_dir(file, cmd, arg); + } + + AuTraceErr(err); + return err; +} + +long aufs_compat_ioctl_nondir(struct file *file, unsigned int cmd, + unsigned long arg) +{ + return aufs_ioctl_nondir(file, cmd, (unsigned long)compat_ptr(arg)); +} +#endif --- linux-aws-4.15.0.orig/fs/aufs/loop.c +++ linux-aws-4.15.0/fs/aufs/loop.c @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * support for loopback block device as a branch + */ + +#include "aufs.h" + +/* added into drivers/block/loop.c */ +static struct file *(*backing_file_func)(struct super_block *sb); + +/* + * test if two lower dentries have overlapping branches. + */ +int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_adding) +{ + struct super_block *h_sb; + struct file *backing_file; + + if (unlikely(!backing_file_func)) { + /* don't load "loop" module here */ + backing_file_func = symbol_get(loop_backing_file); + if (unlikely(!backing_file_func)) + /* "loop" module is not loaded */ + return 0; + } + + h_sb = h_adding->d_sb; + backing_file = backing_file_func(h_sb); + if (!backing_file) + return 0; + + h_adding = backing_file->f_path.dentry; + /* + * h_adding can be local NFS. + * in this case aufs cannot detect the loop. + */ + if (unlikely(h_adding->d_sb == sb)) + return 1; + return !!au_test_subdir(h_adding, sb->s_root); +} + +/* true if a kernel thread named 'loop[0-9].*' accesses a file */ +int au_test_loopback_kthread(void) +{ + int ret; + struct task_struct *tsk = current; + char c, comm[sizeof(tsk->comm)]; + + ret = 0; + if (tsk->flags & PF_KTHREAD) { + get_task_comm(comm, tsk); + c = comm[4]; + ret = ('0' <= c && c <= '9' + && !strncmp(comm, "loop", 4)); + } + + return ret; +} + +/* ---------------------------------------------------------------------- */ + +#define au_warn_loopback_step 16 +static int au_warn_loopback_nelem = au_warn_loopback_step; +static unsigned long *au_warn_loopback_array; + +void au_warn_loopback(struct super_block *h_sb) +{ + int i, new_nelem; + unsigned long *a, magic; + static DEFINE_SPINLOCK(spin); + + magic = h_sb->s_magic; + spin_lock(&spin); + a = au_warn_loopback_array; + for (i = 0; i < au_warn_loopback_nelem && *a; i++) + if (a[i] == magic) { + spin_unlock(&spin); + return; + } + + /* h_sb is new to us, print it */ + if (i < au_warn_loopback_nelem) { + a[i] = magic; + goto pr; + } + + /* expand the array */ + new_nelem = au_warn_loopback_nelem + au_warn_loopback_step; + a = au_kzrealloc(au_warn_loopback_array, + au_warn_loopback_nelem * sizeof(unsigned long), + new_nelem * sizeof(unsigned long), GFP_ATOMIC, + /*may_shrink*/0); + if (a) { + au_warn_loopback_nelem = new_nelem; + au_warn_loopback_array = a; + a[i] = magic; + goto pr; + } + + spin_unlock(&spin); + AuWarn1("realloc failed, ignored\n"); + return; + +pr: + spin_unlock(&spin); + pr_warn("you may want to try another patch for loopback file " + "on %s(0x%lx) branch\n", au_sbtype(h_sb), magic); +} + +int au_loopback_init(void) +{ + int err; + struct super_block *sb __maybe_unused; + + BUILD_BUG_ON(sizeof(sb->s_magic) != sizeof(unsigned long)); + + err = 0; + au_warn_loopback_array = kcalloc(au_warn_loopback_step, + sizeof(unsigned long), GFP_NOFS); + if (unlikely(!au_warn_loopback_array)) + err = -ENOMEM; + + return err; +} + +void au_loopback_fin(void) +{ + if (backing_file_func) + symbol_put(loop_backing_file); + kfree(au_warn_loopback_array); +} + +/* ---------------------------------------------------------------------- */ + +/* support the loopback block device insude aufs */ + +struct file *aufs_real_loop(struct file *file) +{ + struct file *f; + + BUG_ON(!au_test_aufs(file->f_path.dentry->d_sb)); + fi_read_lock(file); + f = au_hf_top(file); + fi_read_unlock(file); + AuDebugOn(!f); + return f; +} --- linux-aws-4.15.0.orig/fs/aufs/loop.h +++ linux-aws-4.15.0/fs/aufs/loop.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * support for loopback mount as a branch + */ + +#ifndef __AUFS_LOOP_H__ +#define __AUFS_LOOP_H__ + +#ifdef __KERNEL__ + +struct dentry; +struct super_block; + +#ifdef CONFIG_AUFS_BDEV_LOOP +/* drivers/block/loop.c */ +struct file *loop_backing_file(struct super_block *sb); + +/* loop.c */ +int au_test_loopback_overlap(struct super_block *sb, struct dentry *h_adding); +int au_test_loopback_kthread(void); +void au_warn_loopback(struct super_block *h_sb); + +int au_loopback_init(void); +void au_loopback_fin(void); + +struct file *aufs_real_loop(struct file *file); +#else +AuStub(struct file *, loop_backing_file, return NULL) + +AuStubInt0(au_test_loopback_overlap, struct super_block *sb, + struct dentry *h_adding) +AuStubInt0(au_test_loopback_kthread, void) +AuStubVoid(au_warn_loopback, struct super_block *h_sb) + +AuStubInt0(au_loopback_init, void) +AuStubVoid(au_loopback_fin, void) + +AuStub(struct file *, aufs_real_loop, return NULL, struct file *file) +#endif /* BLK_DEV_LOOP */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_LOOP_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/magic.mk +++ linux-aws-4.15.0/fs/aufs/magic.mk @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0 + +# defined in ${srctree}/fs/fuse/inode.c +# tristate +ifdef CONFIG_FUSE_FS +ccflags-y += -DFUSE_SUPER_MAGIC=0x65735546 +endif + +# defined in ${srctree}/fs/xfs/xfs_sb.h +# tristate +ifdef CONFIG_XFS_FS +ccflags-y += -DXFS_SB_MAGIC=0x58465342 +endif + +# defined in ${srctree}/fs/configfs/mount.c +# tristate +ifdef CONFIG_CONFIGFS_FS +ccflags-y += -DCONFIGFS_MAGIC=0x62656570 +endif + +# defined in ${srctree}/fs/ubifs/ubifs.h +# tristate +ifdef CONFIG_UBIFS_FS +ccflags-y += -DUBIFS_SUPER_MAGIC=0x24051905 +endif + +# defined in ${srctree}/fs/hfsplus/hfsplus_raw.h +# tristate +ifdef CONFIG_HFSPLUS_FS +ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b +endif --- linux-aws-4.15.0.orig/fs/aufs/module.c +++ linux-aws-4.15.0/fs/aufs/module.c @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * module global variables and operations + */ + +#include +#include +#include "aufs.h" + +/* shrinkable realloc */ +void *au_krealloc(void *p, unsigned int new_sz, gfp_t gfp, int may_shrink) +{ + size_t sz; + int diff; + + sz = 0; + diff = -1; + if (p) { +#if 0 /* unused */ + if (!new_sz) { + kfree(p); + p = NULL; + goto out; + } +#else + AuDebugOn(!new_sz); +#endif + sz = ksize(p); + diff = au_kmidx_sub(sz, new_sz); + } + if (sz && !diff) + goto out; + + if (sz < new_sz) + /* expand or SLOB */ + p = krealloc(p, new_sz, gfp); + else if (new_sz < sz && may_shrink) { + /* shrink */ + void *q; + + q = kmalloc(new_sz, gfp); + if (q) { + if (p) { + memcpy(q, p, new_sz); + kfree(p); + } + p = q; + } else + p = NULL; + } + +out: + return p; +} + +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp, + int may_shrink) +{ + p = au_krealloc(p, new_sz, gfp, may_shrink); + if (p && new_sz > nused) + memset(p + nused, 0, new_sz - nused); + return p; +} + +/* ---------------------------------------------------------------------- */ +/* + * aufs caches + */ +struct kmem_cache *au_cache[AuCache_Last]; + +static void au_cache_fin(void) +{ + int i; + + /* + * Make sure all delayed rcu free inodes are flushed before we + * destroy cache. + */ + rcu_barrier(); + + /* excluding AuCache_HNOTIFY */ + BUILD_BUG_ON(AuCache_HNOTIFY + 1 != AuCache_Last); + for (i = 0; i < AuCache_HNOTIFY; i++) { + kmem_cache_destroy(au_cache[i]); + au_cache[i] = NULL; + } +} + +static int __init au_cache_init(void) +{ + au_cache[AuCache_DINFO] = AuCacheCtor(au_dinfo, au_di_init_once); + if (au_cache[AuCache_DINFO]) + /* SLAB_DESTROY_BY_RCU */ + au_cache[AuCache_ICNTNR] = AuCacheCtor(au_icntnr, + au_icntnr_init_once); + if (au_cache[AuCache_ICNTNR]) + au_cache[AuCache_FINFO] = AuCacheCtor(au_finfo, + au_fi_init_once); + if (au_cache[AuCache_FINFO]) + au_cache[AuCache_VDIR] = AuCache(au_vdir); + if (au_cache[AuCache_VDIR]) + au_cache[AuCache_DEHSTR] = AuCache(au_vdir_dehstr); + if (au_cache[AuCache_DEHSTR]) + return 0; + + au_cache_fin(); + return -ENOMEM; +} + +/* ---------------------------------------------------------------------- */ + +int au_dir_roflags; + +#ifdef CONFIG_AUFS_SBILIST +/* + * iterate_supers_type() doesn't protect us from + * remounting (branch management) + */ +struct hlist_bl_head au_sbilist; +#endif + +/* + * functions for module interface. + */ +MODULE_LICENSE("GPL"); +/* MODULE_LICENSE("GPL v2"); */ +MODULE_AUTHOR("Junjiro R. Okajima "); +MODULE_DESCRIPTION(AUFS_NAME + " -- Advanced multi layered unification filesystem"); +MODULE_VERSION(AUFS_VERSION); +MODULE_ALIAS_FS(AUFS_NAME); + +/* this module parameter has no meaning when SYSFS is disabled */ +int sysaufs_brs = 1; +MODULE_PARM_DESC(brs, "use /fs/aufs/si_*/brN"); +module_param_named(brs, sysaufs_brs, int, S_IRUGO); + +/* this module parameter has no meaning when USER_NS is disabled */ +bool au_userns; +MODULE_PARM_DESC(allow_userns, "allow unprivileged to mount under userns"); +module_param_named(allow_userns, au_userns, bool, S_IRUGO); + +/* ---------------------------------------------------------------------- */ + +static char au_esc_chars[0x20 + 3]; /* 0x01-0x20, backslash, del, and NULL */ + +int au_seq_path(struct seq_file *seq, struct path *path) +{ + int err; + + err = seq_path(seq, path, au_esc_chars); + if (err >= 0) + err = 0; + else + err = -ENOMEM; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int __init aufs_init(void) +{ + int err, i; + char *p; + + p = au_esc_chars; + for (i = 1; i <= ' '; i++) + *p++ = i; + *p++ = '\\'; + *p++ = '\x7f'; + *p = 0; + + au_dir_roflags = au_file_roflags(O_DIRECTORY | O_LARGEFILE); + + memcpy(aufs_iop_nogetattr, aufs_iop, sizeof(aufs_iop)); + for (i = 0; i < AuIop_Last; i++) + aufs_iop_nogetattr[i].getattr = NULL; + + memset(au_cache, 0, sizeof(au_cache)); /* including hnotify */ + + au_sbilist_init(); + sysaufs_brs_init(); + au_debug_init(); + au_dy_init(); + err = sysaufs_init(); + if (unlikely(err)) + goto out; + err = au_procfs_init(); + if (unlikely(err)) + goto out_sysaufs; + err = au_wkq_init(); + if (unlikely(err)) + goto out_procfs; + err = au_loopback_init(); + if (unlikely(err)) + goto out_wkq; + err = au_hnotify_init(); + if (unlikely(err)) + goto out_loopback; + err = au_sysrq_init(); + if (unlikely(err)) + goto out_hin; + err = au_cache_init(); + if (unlikely(err)) + goto out_sysrq; + + aufs_fs_type.fs_flags |= au_userns ? FS_USERNS_MOUNT : 0; + err = register_filesystem(&aufs_fs_type); + if (unlikely(err)) + goto out_cache; + + /* since we define pr_fmt, call printk directly */ + printk(KERN_INFO AUFS_NAME " " AUFS_VERSION "\n"); + goto out; /* success */ + +out_cache: + au_cache_fin(); +out_sysrq: + au_sysrq_fin(); +out_hin: + au_hnotify_fin(); +out_loopback: + au_loopback_fin(); +out_wkq: + au_wkq_fin(); +out_procfs: + au_procfs_fin(); +out_sysaufs: + sysaufs_fin(); + au_dy_fin(); +out: + return err; +} + +static void __exit aufs_exit(void) +{ + unregister_filesystem(&aufs_fs_type); + au_cache_fin(); + au_sysrq_fin(); + au_hnotify_fin(); + au_loopback_fin(); + au_wkq_fin(); + au_procfs_fin(); + sysaufs_fin(); + au_dy_fin(); +} + +module_init(aufs_init); +module_exit(aufs_exit); --- linux-aws-4.15.0.orig/fs/aufs/module.h +++ linux-aws-4.15.0/fs/aufs/module.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * module initialization and module-global + */ + +#ifndef __AUFS_MODULE_H__ +#define __AUFS_MODULE_H__ + +#ifdef __KERNEL__ + +#include + +struct path; +struct seq_file; + +/* module parameters */ +extern int sysaufs_brs; +extern bool au_userns; + +/* ---------------------------------------------------------------------- */ + +extern int au_dir_roflags; + +void *au_krealloc(void *p, unsigned int new_sz, gfp_t gfp, int may_shrink); +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp, + int may_shrink); + +static inline int au_kmidx_sub(size_t sz, size_t new_sz) +{ +#ifndef CONFIG_SLOB + return kmalloc_index(sz) - kmalloc_index(new_sz); +#else + return -1; /* SLOB is untested */ +#endif +} + +int au_seq_path(struct seq_file *seq, struct path *path); + +#ifdef CONFIG_PROC_FS +/* procfs.c */ +int __init au_procfs_init(void); +void au_procfs_fin(void); +#else +AuStubInt0(au_procfs_init, void); +AuStubVoid(au_procfs_fin, void); +#endif + +/* ---------------------------------------------------------------------- */ + +/* kmem cache */ +enum { + AuCache_DINFO, + AuCache_ICNTNR, + AuCache_FINFO, + AuCache_VDIR, + AuCache_DEHSTR, + AuCache_HNOTIFY, /* must be last */ + AuCache_Last +}; + +extern struct kmem_cache *au_cache[AuCache_Last]; + +#define AuCacheFlags (SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD) +#define AuCache(type) KMEM_CACHE(type, AuCacheFlags) +#define AuCacheCtor(type, ctor) \ + kmem_cache_create(#type, sizeof(struct type), \ + __alignof__(struct type), AuCacheFlags, ctor) + +#define AuCacheFuncs(name, index) \ +static inline struct au_##name *au_cache_alloc_##name(void) \ +{ return kmem_cache_alloc(au_cache[AuCache_##index], GFP_NOFS); } \ +static inline void au_cache_free_##name(struct au_##name *p) \ +{ kmem_cache_free(au_cache[AuCache_##index], p); } + +AuCacheFuncs(dinfo, DINFO); +AuCacheFuncs(icntnr, ICNTNR); +AuCacheFuncs(finfo, FINFO); +AuCacheFuncs(vdir, VDIR); +AuCacheFuncs(vdir_dehstr, DEHSTR); +#ifdef CONFIG_AUFS_HNOTIFY +AuCacheFuncs(hnotify, HNOTIFY); +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_MODULE_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/mvdown.c +++ linux-aws-4.15.0/fs/aufs/mvdown.c @@ -0,0 +1,704 @@ +/* + * Copyright (C) 2011-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * move-down, opposite of copy-up + */ + +#include "aufs.h" + +struct au_mvd_args { + struct { + struct super_block *h_sb; + struct dentry *h_parent; + struct au_hinode *hdir; + struct inode *h_dir, *h_inode; + struct au_pin pin; + } info[AUFS_MVDOWN_NARRAY]; + + struct aufs_mvdown mvdown; + struct dentry *dentry, *parent; + struct inode *inode, *dir; + struct super_block *sb; + aufs_bindex_t bopq, bwh, bfound; + unsigned char rename_lock; +}; + +#define mvd_errno mvdown.au_errno +#define mvd_bsrc mvdown.stbr[AUFS_MVDOWN_UPPER].bindex +#define mvd_src_brid mvdown.stbr[AUFS_MVDOWN_UPPER].brid +#define mvd_bdst mvdown.stbr[AUFS_MVDOWN_LOWER].bindex +#define mvd_dst_brid mvdown.stbr[AUFS_MVDOWN_LOWER].brid + +#define mvd_h_src_sb info[AUFS_MVDOWN_UPPER].h_sb +#define mvd_h_src_parent info[AUFS_MVDOWN_UPPER].h_parent +#define mvd_hdir_src info[AUFS_MVDOWN_UPPER].hdir +#define mvd_h_src_dir info[AUFS_MVDOWN_UPPER].h_dir +#define mvd_h_src_inode info[AUFS_MVDOWN_UPPER].h_inode +#define mvd_pin_src info[AUFS_MVDOWN_UPPER].pin + +#define mvd_h_dst_sb info[AUFS_MVDOWN_LOWER].h_sb +#define mvd_h_dst_parent info[AUFS_MVDOWN_LOWER].h_parent +#define mvd_hdir_dst info[AUFS_MVDOWN_LOWER].hdir +#define mvd_h_dst_dir info[AUFS_MVDOWN_LOWER].h_dir +#define mvd_h_dst_inode info[AUFS_MVDOWN_LOWER].h_inode +#define mvd_pin_dst info[AUFS_MVDOWN_LOWER].pin + +#define AU_MVD_PR(flag, ...) do { \ + if (flag) \ + pr_err(__VA_ARGS__); \ + } while (0) + +static int find_lower_writable(struct au_mvd_args *a) +{ + struct super_block *sb; + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + sb = a->sb; + bindex = a->mvd_bsrc; + bbot = au_sbbot(sb); + if (a->mvdown.flags & AUFS_MVDOWN_FHSM_LOWER) + for (bindex++; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_fhsm(br->br_perm) + && !sb_rdonly(au_br_sb(br))) + return bindex; + } + else if (!(a->mvdown.flags & AUFS_MVDOWN_ROLOWER)) + for (bindex++; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (!au_br_rdonly(br)) + return bindex; + } + else + for (bindex++; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (!sb_rdonly(au_br_sb(br))) { + if (au_br_rdonly(br)) + a->mvdown.flags + |= AUFS_MVDOWN_ROLOWER_R; + return bindex; + } + } + + return -1; +} + +/* make the parent dir on bdst */ +static int au_do_mkdir(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + + err = 0; + a->mvd_hdir_src = au_hi(a->dir, a->mvd_bsrc); + a->mvd_hdir_dst = au_hi(a->dir, a->mvd_bdst); + a->mvd_h_src_parent = au_h_dptr(a->parent, a->mvd_bsrc); + a->mvd_h_dst_parent = NULL; + if (au_dbbot(a->parent) >= a->mvd_bdst) + a->mvd_h_dst_parent = au_h_dptr(a->parent, a->mvd_bdst); + if (!a->mvd_h_dst_parent) { + err = au_cpdown_dirs(a->dentry, a->mvd_bdst); + if (unlikely(err)) { + AU_MVD_PR(dmsg, "cpdown_dirs failed\n"); + goto out; + } + a->mvd_h_dst_parent = au_h_dptr(a->parent, a->mvd_bdst); + } + +out: + AuTraceErr(err); + return err; +} + +/* lock them all */ +static int au_do_lock(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct dentry *h_trap; + + a->mvd_h_src_sb = au_sbr_sb(a->sb, a->mvd_bsrc); + a->mvd_h_dst_sb = au_sbr_sb(a->sb, a->mvd_bdst); + err = au_pin(&a->mvd_pin_dst, a->dentry, a->mvd_bdst, + au_opt_udba(a->sb), + AuPin_MNT_WRITE | AuPin_DI_LOCKED); + AuTraceErr(err); + if (unlikely(err)) { + AU_MVD_PR(dmsg, "pin_dst failed\n"); + goto out; + } + + if (a->mvd_h_src_sb != a->mvd_h_dst_sb) { + a->rename_lock = 0; + au_pin_init(&a->mvd_pin_src, a->dentry, a->mvd_bsrc, + AuLsc_DI_PARENT, AuLsc_I_PARENT3, + au_opt_udba(a->sb), + AuPin_MNT_WRITE | AuPin_DI_LOCKED); + err = au_do_pin(&a->mvd_pin_src); + AuTraceErr(err); + a->mvd_h_src_dir = d_inode(a->mvd_h_src_parent); + if (unlikely(err)) { + AU_MVD_PR(dmsg, "pin_src failed\n"); + goto out_dst; + } + goto out; /* success */ + } + + a->rename_lock = 1; + au_pin_hdir_unlock(&a->mvd_pin_dst); + err = au_pin(&a->mvd_pin_src, a->dentry, a->mvd_bsrc, + au_opt_udba(a->sb), + AuPin_MNT_WRITE | AuPin_DI_LOCKED); + AuTraceErr(err); + a->mvd_h_src_dir = d_inode(a->mvd_h_src_parent); + if (unlikely(err)) { + AU_MVD_PR(dmsg, "pin_src failed\n"); + au_pin_hdir_lock(&a->mvd_pin_dst); + goto out_dst; + } + au_pin_hdir_unlock(&a->mvd_pin_src); + h_trap = vfsub_lock_rename(a->mvd_h_src_parent, a->mvd_hdir_src, + a->mvd_h_dst_parent, a->mvd_hdir_dst); + if (h_trap) { + err = (h_trap != a->mvd_h_src_parent); + if (err) + err = (h_trap != a->mvd_h_dst_parent); + } + BUG_ON(err); /* it should never happen */ + if (unlikely(a->mvd_h_src_dir != au_pinned_h_dir(&a->mvd_pin_src))) { + err = -EBUSY; + AuTraceErr(err); + vfsub_unlock_rename(a->mvd_h_src_parent, a->mvd_hdir_src, + a->mvd_h_dst_parent, a->mvd_hdir_dst); + au_pin_hdir_lock(&a->mvd_pin_src); + au_unpin(&a->mvd_pin_src); + au_pin_hdir_lock(&a->mvd_pin_dst); + goto out_dst; + } + goto out; /* success */ + +out_dst: + au_unpin(&a->mvd_pin_dst); +out: + AuTraceErr(err); + return err; +} + +static void au_do_unlock(const unsigned char dmsg, struct au_mvd_args *a) +{ + if (!a->rename_lock) + au_unpin(&a->mvd_pin_src); + else { + vfsub_unlock_rename(a->mvd_h_src_parent, a->mvd_hdir_src, + a->mvd_h_dst_parent, a->mvd_hdir_dst); + au_pin_hdir_lock(&a->mvd_pin_src); + au_unpin(&a->mvd_pin_src); + au_pin_hdir_lock(&a->mvd_pin_dst); + } + au_unpin(&a->mvd_pin_dst); +} + +/* copy-down the file */ +static int au_do_cpdown(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct au_cp_generic cpg = { + .dentry = a->dentry, + .bdst = a->mvd_bdst, + .bsrc = a->mvd_bsrc, + .len = -1, + .pin = &a->mvd_pin_dst, + .flags = AuCpup_DTIME | AuCpup_HOPEN + }; + + AuDbg("b%d, b%d\n", cpg.bsrc, cpg.bdst); + if (a->mvdown.flags & AUFS_MVDOWN_OWLOWER) + au_fset_cpup(cpg.flags, OVERWRITE); + if (a->mvdown.flags & AUFS_MVDOWN_ROLOWER) + au_fset_cpup(cpg.flags, RWDST); + err = au_sio_cpdown_simple(&cpg); + if (unlikely(err)) + AU_MVD_PR(dmsg, "cpdown failed\n"); + + AuTraceErr(err); + return err; +} + +/* + * unlink the whiteout on bdst if exist which may be created by UDBA while we + * were sleeping + */ +static int au_do_unlink_wh(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct path h_path; + struct au_branch *br; + struct inode *delegated; + + br = au_sbr(a->sb, a->mvd_bdst); + h_path.dentry = au_wh_lkup(a->mvd_h_dst_parent, &a->dentry->d_name, br); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) { + AU_MVD_PR(dmsg, "wh_lkup failed\n"); + goto out; + } + + err = 0; + if (d_is_positive(h_path.dentry)) { + h_path.mnt = au_br_mnt(br); + delegated = NULL; + err = vfsub_unlink(d_inode(a->mvd_h_dst_parent), &h_path, + &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + if (unlikely(err)) + AU_MVD_PR(dmsg, "wh_unlink failed\n"); + } + dput(h_path.dentry); + +out: + AuTraceErr(err); + return err; +} + +/* + * unlink the topmost h_dentry + */ +static int au_do_unlink(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct path h_path; + struct inode *delegated; + + h_path.mnt = au_sbr_mnt(a->sb, a->mvd_bsrc); + h_path.dentry = au_h_dptr(a->dentry, a->mvd_bsrc); + delegated = NULL; + err = vfsub_unlink(a->mvd_h_src_dir, &h_path, &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + if (unlikely(err)) + AU_MVD_PR(dmsg, "unlink failed\n"); + + AuTraceErr(err); + return err; +} + +/* Since mvdown succeeded, we ignore an error of this function */ +static void au_do_stfs(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct au_branch *br; + + a->mvdown.flags |= AUFS_MVDOWN_STFS_FAILED; + br = au_sbr(a->sb, a->mvd_bsrc); + err = au_br_stfs(br, &a->mvdown.stbr[AUFS_MVDOWN_UPPER].stfs); + if (!err) { + br = au_sbr(a->sb, a->mvd_bdst); + a->mvdown.stbr[AUFS_MVDOWN_LOWER].brid = br->br_id; + err = au_br_stfs(br, &a->mvdown.stbr[AUFS_MVDOWN_LOWER].stfs); + } + if (!err) + a->mvdown.flags &= ~AUFS_MVDOWN_STFS_FAILED; + else + AU_MVD_PR(dmsg, "statfs failed (%d), ignored\n", err); +} + +/* + * copy-down the file and unlink the bsrc file. + * - unlink the bdst whout if exist + * - copy-down the file (with whtmp name and rename) + * - unlink the bsrc file + */ +static int au_do_mvdown(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + + err = au_do_mkdir(dmsg, a); + if (!err) + err = au_do_lock(dmsg, a); + if (unlikely(err)) + goto out; + + /* + * do not revert the activities we made on bdst since they should be + * harmless in aufs. + */ + + err = au_do_cpdown(dmsg, a); + if (!err) + err = au_do_unlink_wh(dmsg, a); + if (!err && !(a->mvdown.flags & AUFS_MVDOWN_KUPPER)) + err = au_do_unlink(dmsg, a); + if (unlikely(err)) + goto out_unlock; + + AuDbg("%pd2, 0x%x, %d --> %d\n", + a->dentry, a->mvdown.flags, a->mvd_bsrc, a->mvd_bdst); + if (find_lower_writable(a) < 0) + a->mvdown.flags |= AUFS_MVDOWN_BOTTOM; + + if (a->mvdown.flags & AUFS_MVDOWN_STFS) + au_do_stfs(dmsg, a); + + /* maintain internal array */ + if (!(a->mvdown.flags & AUFS_MVDOWN_KUPPER)) { + au_set_h_dptr(a->dentry, a->mvd_bsrc, NULL); + au_set_dbtop(a->dentry, a->mvd_bdst); + au_set_h_iptr(a->inode, a->mvd_bsrc, NULL, /*flags*/0); + au_set_ibtop(a->inode, a->mvd_bdst); + } else { + /* hide the lower */ + au_set_h_dptr(a->dentry, a->mvd_bdst, NULL); + au_set_dbbot(a->dentry, a->mvd_bsrc); + au_set_h_iptr(a->inode, a->mvd_bdst, NULL, /*flags*/0); + au_set_ibbot(a->inode, a->mvd_bsrc); + } + if (au_dbbot(a->dentry) < a->mvd_bdst) + au_set_dbbot(a->dentry, a->mvd_bdst); + if (au_ibbot(a->inode) < a->mvd_bdst) + au_set_ibbot(a->inode, a->mvd_bdst); + +out_unlock: + au_do_unlock(dmsg, a); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* make sure the file is idle */ +static int au_mvd_args_busy(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err, plinked; + + err = 0; + plinked = !!au_opt_test(au_mntflags(a->sb), PLINK); + if (au_dbtop(a->dentry) == a->mvd_bsrc + && au_dcount(a->dentry) == 1 + && atomic_read(&a->inode->i_count) == 1 + /* && a->mvd_h_src_inode->i_nlink == 1 */ + && (!plinked || !au_plink_test(a->inode)) + && a->inode->i_nlink == 1) + goto out; + + err = -EBUSY; + AU_MVD_PR(dmsg, + "b%d, d{b%d, c%d?}, i{c%d?, l%u}, hi{l%u}, p{%d, %d}\n", + a->mvd_bsrc, au_dbtop(a->dentry), au_dcount(a->dentry), + atomic_read(&a->inode->i_count), a->inode->i_nlink, + a->mvd_h_src_inode->i_nlink, + plinked, plinked ? au_plink_test(a->inode) : 0); + +out: + AuTraceErr(err); + return err; +} + +/* make sure the parent dir is fine */ +static int au_mvd_args_parent(const unsigned char dmsg, + struct au_mvd_args *a) +{ + int err; + aufs_bindex_t bindex; + + err = 0; + if (unlikely(au_alive_dir(a->parent))) { + err = -ENOENT; + AU_MVD_PR(dmsg, "parent dir is dead\n"); + goto out; + } + + a->bopq = au_dbdiropq(a->parent); + bindex = au_wbr_nonopq(a->dentry, a->mvd_bdst); + AuDbg("b%d\n", bindex); + if (unlikely((bindex >= 0 && bindex < a->mvd_bdst) + || (a->bopq != -1 && a->bopq < a->mvd_bdst))) { + err = -EINVAL; + a->mvd_errno = EAU_MVDOWN_OPAQUE; + AU_MVD_PR(dmsg, "ancestor is opaque b%d, b%d\n", + a->bopq, a->mvd_bdst); + } + +out: + AuTraceErr(err); + return err; +} + +static int au_mvd_args_intermediate(const unsigned char dmsg, + struct au_mvd_args *a) +{ + int err; + struct au_dinfo *dinfo, *tmp; + + /* lookup the next lower positive entry */ + err = -ENOMEM; + tmp = au_di_alloc(a->sb, AuLsc_DI_TMP); + if (unlikely(!tmp)) + goto out; + + a->bfound = -1; + a->bwh = -1; + dinfo = au_di(a->dentry); + au_di_cp(tmp, dinfo); + au_di_swap(tmp, dinfo); + + /* returns the number of positive dentries */ + err = au_lkup_dentry(a->dentry, a->mvd_bsrc + 1, + /* AuLkup_IGNORE_PERM */ 0); + if (!err) + a->bwh = au_dbwh(a->dentry); + else if (err > 0) + a->bfound = au_dbtop(a->dentry); + + au_di_swap(tmp, dinfo); + au_rw_write_unlock(&tmp->di_rwsem); + au_di_free(tmp); + if (unlikely(err < 0)) + AU_MVD_PR(dmsg, "failed look-up lower\n"); + + /* + * here, we have these cases. + * bfound == -1 + * no positive dentry under bsrc. there are more sub-cases. + * bwh < 0 + * there no whiteout, we can safely move-down. + * bwh <= bsrc + * impossible + * bsrc < bwh && bwh < bdst + * there is a whiteout on RO branch. cannot proceed. + * bwh == bdst + * there is a whiteout on the RW target branch. it should + * be removed. + * bdst < bwh + * there is a whiteout somewhere unrelated branch. + * -1 < bfound && bfound <= bsrc + * impossible. + * bfound < bdst + * found, but it is on RO branch between bsrc and bdst. cannot + * proceed. + * bfound == bdst + * found, replace it if AUFS_MVDOWN_FORCE is set. otherwise return + * error. + * bdst < bfound + * found, after we create the file on bdst, it will be hidden. + */ + + AuDebugOn(a->bfound == -1 + && a->bwh != -1 + && a->bwh <= a->mvd_bsrc); + AuDebugOn(-1 < a->bfound + && a->bfound <= a->mvd_bsrc); + + err = -EINVAL; + if (a->bfound == -1 + && a->mvd_bsrc < a->bwh + && a->bwh != -1 + && a->bwh < a->mvd_bdst) { + a->mvd_errno = EAU_MVDOWN_WHITEOUT; + AU_MVD_PR(dmsg, "bsrc %d, bdst %d, bfound %d, bwh %d\n", + a->mvd_bsrc, a->mvd_bdst, a->bfound, a->bwh); + goto out; + } else if (a->bfound != -1 && a->bfound < a->mvd_bdst) { + a->mvd_errno = EAU_MVDOWN_UPPER; + AU_MVD_PR(dmsg, "bdst %d, bfound %d\n", + a->mvd_bdst, a->bfound); + goto out; + } + + err = 0; /* success */ + +out: + AuTraceErr(err); + return err; +} + +static int au_mvd_args_exist(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + + err = 0; + if (!(a->mvdown.flags & AUFS_MVDOWN_OWLOWER) + && a->bfound == a->mvd_bdst) + err = -EEXIST; + AuTraceErr(err); + return err; +} + +static int au_mvd_args(const unsigned char dmsg, struct au_mvd_args *a) +{ + int err; + struct au_branch *br; + + err = -EISDIR; + if (unlikely(S_ISDIR(a->inode->i_mode))) + goto out; + + err = -EINVAL; + if (!(a->mvdown.flags & AUFS_MVDOWN_BRID_UPPER)) + a->mvd_bsrc = au_ibtop(a->inode); + else { + a->mvd_bsrc = au_br_index(a->sb, a->mvd_src_brid); + if (unlikely(a->mvd_bsrc < 0 + || (a->mvd_bsrc < au_dbtop(a->dentry) + || au_dbbot(a->dentry) < a->mvd_bsrc + || !au_h_dptr(a->dentry, a->mvd_bsrc)) + || (a->mvd_bsrc < au_ibtop(a->inode) + || au_ibbot(a->inode) < a->mvd_bsrc + || !au_h_iptr(a->inode, a->mvd_bsrc)))) { + a->mvd_errno = EAU_MVDOWN_NOUPPER; + AU_MVD_PR(dmsg, "no upper\n"); + goto out; + } + } + if (unlikely(a->mvd_bsrc == au_sbbot(a->sb))) { + a->mvd_errno = EAU_MVDOWN_BOTTOM; + AU_MVD_PR(dmsg, "on the bottom\n"); + goto out; + } + a->mvd_h_src_inode = au_h_iptr(a->inode, a->mvd_bsrc); + br = au_sbr(a->sb, a->mvd_bsrc); + err = au_br_rdonly(br); + if (!(a->mvdown.flags & AUFS_MVDOWN_ROUPPER)) { + if (unlikely(err)) + goto out; + } else if (!(vfsub_native_ro(a->mvd_h_src_inode) + || IS_APPEND(a->mvd_h_src_inode))) { + if (err) + a->mvdown.flags |= AUFS_MVDOWN_ROUPPER_R; + /* go on */ + } else + goto out; + + err = -EINVAL; + if (!(a->mvdown.flags & AUFS_MVDOWN_BRID_LOWER)) { + a->mvd_bdst = find_lower_writable(a); + if (unlikely(a->mvd_bdst < 0)) { + a->mvd_errno = EAU_MVDOWN_BOTTOM; + AU_MVD_PR(dmsg, "no writable lower branch\n"); + goto out; + } + } else { + a->mvd_bdst = au_br_index(a->sb, a->mvd_dst_brid); + if (unlikely(a->mvd_bdst < 0 + || au_sbbot(a->sb) < a->mvd_bdst)) { + a->mvd_errno = EAU_MVDOWN_NOLOWERBR; + AU_MVD_PR(dmsg, "no lower brid\n"); + goto out; + } + } + + err = au_mvd_args_busy(dmsg, a); + if (!err) + err = au_mvd_args_parent(dmsg, a); + if (!err) + err = au_mvd_args_intermediate(dmsg, a); + if (!err) + err = au_mvd_args_exist(dmsg, a); + if (!err) + AuDbg("b%d, b%d\n", a->mvd_bsrc, a->mvd_bdst); + +out: + AuTraceErr(err); + return err; +} + +int au_mvdown(struct dentry *dentry, struct aufs_mvdown __user *uarg) +{ + int err, e; + unsigned char dmsg; + struct au_mvd_args *args; + struct inode *inode; + + inode = d_inode(dentry); + err = -EPERM; + if (unlikely(!capable(CAP_SYS_ADMIN))) + goto out; + + err = -ENOMEM; + args = kmalloc(sizeof(*args), GFP_NOFS); + if (unlikely(!args)) + goto out; + + err = copy_from_user(&args->mvdown, uarg, sizeof(args->mvdown)); + if (!err) + err = !access_ok(VERIFY_WRITE, uarg, sizeof(*uarg)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out_free; + } + AuDbg("flags 0x%x\n", args->mvdown.flags); + args->mvdown.flags &= ~(AUFS_MVDOWN_ROLOWER_R | AUFS_MVDOWN_ROUPPER_R); + args->mvdown.au_errno = 0; + args->dentry = dentry; + args->inode = inode; + args->sb = dentry->d_sb; + + err = -ENOENT; + dmsg = !!(args->mvdown.flags & AUFS_MVDOWN_DMSG); + args->parent = dget_parent(dentry); + args->dir = d_inode(args->parent); + inode_lock_nested(args->dir, I_MUTEX_PARENT); + dput(args->parent); + if (unlikely(args->parent != dentry->d_parent)) { + AU_MVD_PR(dmsg, "parent dir is moved\n"); + goto out_dir; + } + + inode_lock_nested(inode, I_MUTEX_CHILD); + err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_NOPLMW); + if (unlikely(err)) + goto out_inode; + + di_write_lock_parent(args->parent); + err = au_mvd_args(dmsg, args); + if (unlikely(err)) + goto out_parent; + + err = au_do_mvdown(dmsg, args); + if (unlikely(err)) + goto out_parent; + + au_cpup_attr_timesizes(args->dir); + au_cpup_attr_timesizes(inode); + if (!(args->mvdown.flags & AUFS_MVDOWN_KUPPER)) + au_cpup_igen(inode, au_h_iptr(inode, args->mvd_bdst)); + /* au_digen_dec(dentry); */ + +out_parent: + di_write_unlock(args->parent); + aufs_read_unlock(dentry, AuLock_DW); +out_inode: + inode_unlock(inode); +out_dir: + inode_unlock(args->dir); +out_free: + e = copy_to_user(uarg, &args->mvdown, sizeof(args->mvdown)); + if (unlikely(e)) + err = -EFAULT; + kfree(args); +out: + AuTraceErr(err); + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/opts.c +++ linux-aws-4.15.0/fs/aufs/opts.c @@ -0,0 +1,1891 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * mount options/flags + */ + +#include +#include /* a distribution requires */ +#include +#include "aufs.h" + +/* ---------------------------------------------------------------------- */ + +enum { + Opt_br, + Opt_add, Opt_del, Opt_mod, Opt_append, Opt_prepend, + Opt_idel, Opt_imod, + Opt_dirwh, Opt_rdcache, Opt_rdblk, Opt_rdhash, + Opt_rdblk_def, Opt_rdhash_def, + Opt_xino, Opt_noxino, + Opt_trunc_xino, Opt_trunc_xino_v, Opt_notrunc_xino, + Opt_trunc_xino_path, Opt_itrunc_xino, + Opt_trunc_xib, Opt_notrunc_xib, + Opt_shwh, Opt_noshwh, + Opt_plink, Opt_noplink, Opt_list_plink, + Opt_udba, + Opt_dio, Opt_nodio, + Opt_diropq_a, Opt_diropq_w, + Opt_warn_perm, Opt_nowarn_perm, + Opt_wbr_copyup, Opt_wbr_create, + Opt_fhsm_sec, + Opt_verbose, Opt_noverbose, + Opt_sum, Opt_nosum, Opt_wsum, + Opt_dirperm1, Opt_nodirperm1, + Opt_dirren, Opt_nodirren, + Opt_acl, Opt_noacl, + Opt_tail, Opt_ignore, Opt_ignore_silent, Opt_err +}; + +static match_table_t options = { + {Opt_br, "br=%s"}, + {Opt_br, "br:%s"}, + + {Opt_add, "add=%d:%s"}, + {Opt_add, "add:%d:%s"}, + {Opt_add, "ins=%d:%s"}, + {Opt_add, "ins:%d:%s"}, + {Opt_append, "append=%s"}, + {Opt_append, "append:%s"}, + {Opt_prepend, "prepend=%s"}, + {Opt_prepend, "prepend:%s"}, + + {Opt_del, "del=%s"}, + {Opt_del, "del:%s"}, + /* {Opt_idel, "idel:%d"}, */ + {Opt_mod, "mod=%s"}, + {Opt_mod, "mod:%s"}, + /* {Opt_imod, "imod:%d:%s"}, */ + + {Opt_dirwh, "dirwh=%d"}, + + {Opt_xino, "xino=%s"}, + {Opt_noxino, "noxino"}, + {Opt_trunc_xino, "trunc_xino"}, + {Opt_trunc_xino_v, "trunc_xino_v=%d:%d"}, + {Opt_notrunc_xino, "notrunc_xino"}, + {Opt_trunc_xino_path, "trunc_xino=%s"}, + {Opt_itrunc_xino, "itrunc_xino=%d"}, + /* {Opt_zxino, "zxino=%s"}, */ + {Opt_trunc_xib, "trunc_xib"}, + {Opt_notrunc_xib, "notrunc_xib"}, + +#ifdef CONFIG_PROC_FS + {Opt_plink, "plink"}, +#else + {Opt_ignore_silent, "plink"}, +#endif + + {Opt_noplink, "noplink"}, + +#ifdef CONFIG_AUFS_DEBUG + {Opt_list_plink, "list_plink"}, +#endif + + {Opt_udba, "udba=%s"}, + + {Opt_dio, "dio"}, + {Opt_nodio, "nodio"}, + +#ifdef CONFIG_AUFS_DIRREN + {Opt_dirren, "dirren"}, + {Opt_nodirren, "nodirren"}, +#else + {Opt_ignore, "dirren"}, + {Opt_ignore_silent, "nodirren"}, +#endif + +#ifdef CONFIG_AUFS_FHSM + {Opt_fhsm_sec, "fhsm_sec=%d"}, +#else + {Opt_ignore, "fhsm_sec=%d"}, +#endif + + {Opt_diropq_a, "diropq=always"}, + {Opt_diropq_a, "diropq=a"}, + {Opt_diropq_w, "diropq=whiteouted"}, + {Opt_diropq_w, "diropq=w"}, + + {Opt_warn_perm, "warn_perm"}, + {Opt_nowarn_perm, "nowarn_perm"}, + + /* keep them temporary */ + {Opt_ignore_silent, "nodlgt"}, + {Opt_ignore, "clean_plink"}, + +#ifdef CONFIG_AUFS_SHWH + {Opt_shwh, "shwh"}, +#endif + {Opt_noshwh, "noshwh"}, + + {Opt_dirperm1, "dirperm1"}, + {Opt_nodirperm1, "nodirperm1"}, + + {Opt_verbose, "verbose"}, + {Opt_verbose, "v"}, + {Opt_noverbose, "noverbose"}, + {Opt_noverbose, "quiet"}, + {Opt_noverbose, "q"}, + {Opt_noverbose, "silent"}, + + {Opt_sum, "sum"}, + {Opt_nosum, "nosum"}, + {Opt_wsum, "wsum"}, + + {Opt_rdcache, "rdcache=%d"}, + {Opt_rdblk, "rdblk=%d"}, + {Opt_rdblk_def, "rdblk=def"}, + {Opt_rdhash, "rdhash=%d"}, + {Opt_rdhash_def, "rdhash=def"}, + + {Opt_wbr_create, "create=%s"}, + {Opt_wbr_create, "create_policy=%s"}, + {Opt_wbr_copyup, "cpup=%s"}, + {Opt_wbr_copyup, "copyup=%s"}, + {Opt_wbr_copyup, "copyup_policy=%s"}, + + /* generic VFS flag */ +#ifdef CONFIG_FS_POSIX_ACL + {Opt_acl, "acl"}, + {Opt_noacl, "noacl"}, +#else + {Opt_ignore, "acl"}, + {Opt_ignore_silent, "noacl"}, +#endif + + /* internal use for the scripts */ + {Opt_ignore_silent, "si=%s"}, + + {Opt_br, "dirs=%s"}, + {Opt_ignore, "debug=%d"}, + {Opt_ignore, "delete=whiteout"}, + {Opt_ignore, "delete=all"}, + {Opt_ignore, "imap=%s"}, + + /* temporary workaround, due to old mount(8)? */ + {Opt_ignore_silent, "relatime"}, + + {Opt_err, NULL} +}; + +/* ---------------------------------------------------------------------- */ + +static const char *au_parser_pattern(int val, match_table_t tbl) +{ + struct match_token *p; + + p = tbl; + while (p->pattern) { + if (p->token == val) + return p->pattern; + p++; + } + BUG(); + return "??"; +} + +static const char *au_optstr(int *val, match_table_t tbl) +{ + struct match_token *p; + int v; + + v = *val; + if (!v) + goto out; + p = tbl; + while (p->pattern) { + if (p->token + && (v & p->token) == p->token) { + *val &= ~p->token; + return p->pattern; + } + p++; + } + +out: + return NULL; +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t brperm = { + {AuBrPerm_RO, AUFS_BRPERM_RO}, + {AuBrPerm_RR, AUFS_BRPERM_RR}, + {AuBrPerm_RW, AUFS_BRPERM_RW}, + {0, NULL} +}; + +static match_table_t brattr = { + /* general */ + {AuBrAttr_COO_REG, AUFS_BRATTR_COO_REG}, + {AuBrAttr_COO_ALL, AUFS_BRATTR_COO_ALL}, + /* 'unpin' attrib is meaningless since linux-3.18-rc1 */ + {AuBrAttr_UNPIN, AUFS_BRATTR_UNPIN}, +#ifdef CONFIG_AUFS_FHSM + {AuBrAttr_FHSM, AUFS_BRATTR_FHSM}, +#endif +#ifdef CONFIG_AUFS_XATTR + {AuBrAttr_ICEX, AUFS_BRATTR_ICEX}, + {AuBrAttr_ICEX_SEC, AUFS_BRATTR_ICEX_SEC}, + {AuBrAttr_ICEX_SYS, AUFS_BRATTR_ICEX_SYS}, + {AuBrAttr_ICEX_TR, AUFS_BRATTR_ICEX_TR}, + {AuBrAttr_ICEX_USR, AUFS_BRATTR_ICEX_USR}, + {AuBrAttr_ICEX_OTH, AUFS_BRATTR_ICEX_OTH}, +#endif + + /* ro/rr branch */ + {AuBrRAttr_WH, AUFS_BRRATTR_WH}, + + /* rw branch */ + {AuBrWAttr_MOO, AUFS_BRWATTR_MOO}, + {AuBrWAttr_NoLinkWH, AUFS_BRWATTR_NLWH}, + + {0, NULL} +}; + +static int br_attr_val(char *str, match_table_t table, substring_t args[]) +{ + int attr, v; + char *p; + + attr = 0; + do { + p = strchr(str, '+'); + if (p) + *p = 0; + v = match_token(str, table, args); + if (v) { + if (v & AuBrAttr_CMOO_Mask) + attr &= ~AuBrAttr_CMOO_Mask; + attr |= v; + } else { + if (p) + *p = '+'; + pr_warn("ignored branch attribute %s\n", str); + break; + } + if (p) + str = p + 1; + } while (p); + + return attr; +} + +static int au_do_optstr_br_attr(au_br_perm_str_t *str, int perm) +{ + int sz; + const char *p; + char *q; + + q = str->a; + *q = 0; + p = au_optstr(&perm, brattr); + if (p) { + sz = strlen(p); + memcpy(q, p, sz + 1); + q += sz; + } else + goto out; + + do { + p = au_optstr(&perm, brattr); + if (p) { + *q++ = '+'; + sz = strlen(p); + memcpy(q, p, sz + 1); + q += sz; + } + } while (p); + +out: + return q - str->a; +} + +static int noinline_for_stack br_perm_val(char *perm) +{ + int val, bad, sz; + char *p; + substring_t args[MAX_OPT_ARGS]; + au_br_perm_str_t attr; + + p = strchr(perm, '+'); + if (p) + *p = 0; + val = match_token(perm, brperm, args); + if (!val) { + if (p) + *p = '+'; + pr_warn("ignored branch permission %s\n", perm); + val = AuBrPerm_RO; + goto out; + } + if (!p) + goto out; + + val |= br_attr_val(p + 1, brattr, args); + + bad = 0; + switch (val & AuBrPerm_Mask) { + case AuBrPerm_RO: + case AuBrPerm_RR: + bad = val & AuBrWAttr_Mask; + val &= ~AuBrWAttr_Mask; + break; + case AuBrPerm_RW: + bad = val & AuBrRAttr_Mask; + val &= ~AuBrRAttr_Mask; + break; + } + + /* + * 'unpin' attrib becomes meaningless since linux-3.18-rc1, but aufs + * does not treat it as an error, just warning. + * this is a tiny guard for the user operation. + */ + if (val & AuBrAttr_UNPIN) { + bad |= AuBrAttr_UNPIN; + val &= ~AuBrAttr_UNPIN; + } + + if (unlikely(bad)) { + sz = au_do_optstr_br_attr(&attr, bad); + AuDebugOn(!sz); + pr_warn("ignored branch attribute %s\n", attr.a); + } + +out: + return val; +} + +void au_optstr_br_perm(au_br_perm_str_t *str, int perm) +{ + au_br_perm_str_t attr; + const char *p; + char *q; + int sz; + + q = str->a; + p = au_optstr(&perm, brperm); + AuDebugOn(!p || !*p); + sz = strlen(p); + memcpy(q, p, sz + 1); + q += sz; + + sz = au_do_optstr_br_attr(&attr, perm); + if (sz) { + *q++ = '+'; + memcpy(q, attr.a, sz + 1); + } + + AuDebugOn(strlen(str->a) >= sizeof(str->a)); +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t udbalevel = { + {AuOpt_UDBA_REVAL, "reval"}, + {AuOpt_UDBA_NONE, "none"}, +#ifdef CONFIG_AUFS_HNOTIFY + {AuOpt_UDBA_HNOTIFY, "notify"}, /* abstraction */ +#ifdef CONFIG_AUFS_HFSNOTIFY + {AuOpt_UDBA_HNOTIFY, "fsnotify"}, +#endif +#endif + {-1, NULL} +}; + +static int noinline_for_stack udba_val(char *str) +{ + substring_t args[MAX_OPT_ARGS]; + + return match_token(str, udbalevel, args); +} + +const char *au_optstr_udba(int udba) +{ + return au_parser_pattern(udba, udbalevel); +} + +/* ---------------------------------------------------------------------- */ + +static match_table_t au_wbr_create_policy = { + {AuWbrCreate_TDP, "tdp"}, + {AuWbrCreate_TDP, "top-down-parent"}, + {AuWbrCreate_RR, "rr"}, + {AuWbrCreate_RR, "round-robin"}, + {AuWbrCreate_MFS, "mfs"}, + {AuWbrCreate_MFS, "most-free-space"}, + {AuWbrCreate_MFSV, "mfs:%d"}, + {AuWbrCreate_MFSV, "most-free-space:%d"}, + + /* top-down regardless the parent, and then mfs */ + {AuWbrCreate_TDMFS, "tdmfs:%d"}, + {AuWbrCreate_TDMFSV, "tdmfs:%d:%d"}, + + {AuWbrCreate_MFSRR, "mfsrr:%d"}, + {AuWbrCreate_MFSRRV, "mfsrr:%d:%d"}, + {AuWbrCreate_PMFS, "pmfs"}, + {AuWbrCreate_PMFSV, "pmfs:%d"}, + {AuWbrCreate_PMFSRR, "pmfsrr:%d"}, + {AuWbrCreate_PMFSRRV, "pmfsrr:%d:%d"}, + + {-1, NULL} +}; + +static int au_wbr_mfs_wmark(substring_t *arg, char *str, + struct au_opt_wbr_create *create) +{ + int err; + unsigned long long ull; + + err = 0; + if (!match_u64(arg, &ull)) + create->mfsrr_watermark = ull; + else { + pr_err("bad integer in %s\n", str); + err = -EINVAL; + } + + return err; +} + +static int au_wbr_mfs_sec(substring_t *arg, char *str, + struct au_opt_wbr_create *create) +{ + int n, err; + + err = 0; + if (!match_int(arg, &n) && 0 <= n && n <= AUFS_MFS_MAX_SEC) + create->mfs_second = n; + else { + pr_err("bad integer in %s\n", str); + err = -EINVAL; + } + + return err; +} + +static int noinline_for_stack +au_wbr_create_val(char *str, struct au_opt_wbr_create *create) +{ + int err, e; + substring_t args[MAX_OPT_ARGS]; + + err = match_token(str, au_wbr_create_policy, args); + create->wbr_create = err; + switch (err) { + case AuWbrCreate_MFSRRV: + case AuWbrCreate_TDMFSV: + case AuWbrCreate_PMFSRRV: + e = au_wbr_mfs_wmark(&args[0], str, create); + if (!e) + e = au_wbr_mfs_sec(&args[1], str, create); + if (unlikely(e)) + err = e; + break; + case AuWbrCreate_MFSRR: + case AuWbrCreate_TDMFS: + case AuWbrCreate_PMFSRR: + e = au_wbr_mfs_wmark(&args[0], str, create); + if (unlikely(e)) { + err = e; + break; + } + /*FALLTHROUGH*/ + case AuWbrCreate_MFS: + case AuWbrCreate_PMFS: + create->mfs_second = AUFS_MFS_DEF_SEC; + break; + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFSV: + e = au_wbr_mfs_sec(&args[0], str, create); + if (unlikely(e)) + err = e; + break; + } + + return err; +} + +const char *au_optstr_wbr_create(int wbr_create) +{ + return au_parser_pattern(wbr_create, au_wbr_create_policy); +} + +static match_table_t au_wbr_copyup_policy = { + {AuWbrCopyup_TDP, "tdp"}, + {AuWbrCopyup_TDP, "top-down-parent"}, + {AuWbrCopyup_BUP, "bup"}, + {AuWbrCopyup_BUP, "bottom-up-parent"}, + {AuWbrCopyup_BU, "bu"}, + {AuWbrCopyup_BU, "bottom-up"}, + {-1, NULL} +}; + +static int noinline_for_stack au_wbr_copyup_val(char *str) +{ + substring_t args[MAX_OPT_ARGS]; + + return match_token(str, au_wbr_copyup_policy, args); +} + +const char *au_optstr_wbr_copyup(int wbr_copyup) +{ + return au_parser_pattern(wbr_copyup, au_wbr_copyup_policy); +} + +/* ---------------------------------------------------------------------- */ + +static const int lkup_dirflags = LOOKUP_FOLLOW | LOOKUP_DIRECTORY; + +static void dump_opts(struct au_opts *opts) +{ +#ifdef CONFIG_AUFS_DEBUG + /* reduce stack space */ + union { + struct au_opt_add *add; + struct au_opt_del *del; + struct au_opt_mod *mod; + struct au_opt_xino *xino; + struct au_opt_xino_itrunc *xino_itrunc; + struct au_opt_wbr_create *create; + } u; + struct au_opt *opt; + + opt = opts->opt; + while (opt->type != Opt_tail) { + switch (opt->type) { + case Opt_add: + u.add = &opt->add; + AuDbg("add {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_del: + case Opt_idel: + u.del = &opt->del; + AuDbg("del {%s, %p}\n", + u.del->pathname, u.del->h_path.dentry); + break; + case Opt_mod: + case Opt_imod: + u.mod = &opt->mod; + AuDbg("mod {%s, 0x%x, %p}\n", + u.mod->path, u.mod->perm, u.mod->h_root); + break; + case Opt_append: + u.add = &opt->add; + AuDbg("append {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_prepend: + u.add = &opt->add; + AuDbg("prepend {b%d, %s, 0x%x, %p}\n", + u.add->bindex, u.add->pathname, u.add->perm, + u.add->path.dentry); + break; + case Opt_dirwh: + AuDbg("dirwh %d\n", opt->dirwh); + break; + case Opt_rdcache: + AuDbg("rdcache %d\n", opt->rdcache); + break; + case Opt_rdblk: + AuDbg("rdblk %u\n", opt->rdblk); + break; + case Opt_rdblk_def: + AuDbg("rdblk_def\n"); + break; + case Opt_rdhash: + AuDbg("rdhash %u\n", opt->rdhash); + break; + case Opt_rdhash_def: + AuDbg("rdhash_def\n"); + break; + case Opt_xino: + u.xino = &opt->xino; + AuDbg("xino {%s %pD}\n", u.xino->path, u.xino->file); + break; + case Opt_trunc_xino: + AuLabel(trunc_xino); + break; + case Opt_notrunc_xino: + AuLabel(notrunc_xino); + break; + case Opt_trunc_xino_path: + case Opt_itrunc_xino: + u.xino_itrunc = &opt->xino_itrunc; + AuDbg("trunc_xino %d\n", u.xino_itrunc->bindex); + break; + case Opt_noxino: + AuLabel(noxino); + break; + case Opt_trunc_xib: + AuLabel(trunc_xib); + break; + case Opt_notrunc_xib: + AuLabel(notrunc_xib); + break; + case Opt_shwh: + AuLabel(shwh); + break; + case Opt_noshwh: + AuLabel(noshwh); + break; + case Opt_dirperm1: + AuLabel(dirperm1); + break; + case Opt_nodirperm1: + AuLabel(nodirperm1); + break; + case Opt_plink: + AuLabel(plink); + break; + case Opt_noplink: + AuLabel(noplink); + break; + case Opt_list_plink: + AuLabel(list_plink); + break; + case Opt_udba: + AuDbg("udba %d, %s\n", + opt->udba, au_optstr_udba(opt->udba)); + break; + case Opt_dio: + AuLabel(dio); + break; + case Opt_nodio: + AuLabel(nodio); + break; + case Opt_diropq_a: + AuLabel(diropq_a); + break; + case Opt_diropq_w: + AuLabel(diropq_w); + break; + case Opt_warn_perm: + AuLabel(warn_perm); + break; + case Opt_nowarn_perm: + AuLabel(nowarn_perm); + break; + case Opt_verbose: + AuLabel(verbose); + break; + case Opt_noverbose: + AuLabel(noverbose); + break; + case Opt_sum: + AuLabel(sum); + break; + case Opt_nosum: + AuLabel(nosum); + break; + case Opt_wsum: + AuLabel(wsum); + break; + case Opt_wbr_create: + u.create = &opt->wbr_create; + AuDbg("create %d, %s\n", u.create->wbr_create, + au_optstr_wbr_create(u.create->wbr_create)); + switch (u.create->wbr_create) { + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFSV: + AuDbg("%d sec\n", u.create->mfs_second); + break; + case AuWbrCreate_MFSRR: + case AuWbrCreate_TDMFS: + AuDbg("%llu watermark\n", + u.create->mfsrr_watermark); + break; + case AuWbrCreate_MFSRRV: + case AuWbrCreate_TDMFSV: + case AuWbrCreate_PMFSRRV: + AuDbg("%llu watermark, %d sec\n", + u.create->mfsrr_watermark, + u.create->mfs_second); + break; + } + break; + case Opt_wbr_copyup: + AuDbg("copyup %d, %s\n", opt->wbr_copyup, + au_optstr_wbr_copyup(opt->wbr_copyup)); + break; + case Opt_fhsm_sec: + AuDbg("fhsm_sec %u\n", opt->fhsm_second); + break; + case Opt_dirren: + AuLabel(dirren); + break; + case Opt_nodirren: + AuLabel(nodirren); + break; + case Opt_acl: + AuLabel(acl); + break; + case Opt_noacl: + AuLabel(noacl); + break; + default: + BUG(); + } + opt++; + } +#endif +} + +void au_opts_free(struct au_opts *opts) +{ + struct au_opt *opt; + + opt = opts->opt; + while (opt->type != Opt_tail) { + switch (opt->type) { + case Opt_add: + case Opt_append: + case Opt_prepend: + path_put(&opt->add.path); + break; + case Opt_del: + case Opt_idel: + path_put(&opt->del.h_path); + break; + case Opt_mod: + case Opt_imod: + dput(opt->mod.h_root); + break; + case Opt_xino: + fput(opt->xino.file); + break; + } + opt++; + } +} + +static int opt_add(struct au_opt *opt, char *opt_str, unsigned long sb_flags, + aufs_bindex_t bindex) +{ + int err; + struct au_opt_add *add = &opt->add; + char *p; + + add->bindex = bindex; + add->perm = AuBrPerm_RO; + add->pathname = opt_str; + p = strchr(opt_str, '='); + if (p) { + *p++ = 0; + if (*p) + add->perm = br_perm_val(p); + } + + err = vfsub_kern_path(add->pathname, lkup_dirflags, &add->path); + if (!err) { + if (!p) { + add->perm = AuBrPerm_RO; + if (au_test_fs_rr(add->path.dentry->d_sb)) + add->perm = AuBrPerm_RR; + else if (!bindex && !(sb_flags & SB_RDONLY)) + add->perm = AuBrPerm_RW; + } + opt->type = Opt_add; + goto out; + } + pr_err("lookup failed %s (%d)\n", add->pathname, err); + err = -EINVAL; + +out: + return err; +} + +static int au_opts_parse_del(struct au_opt_del *del, substring_t args[]) +{ + int err; + + del->pathname = args[0].from; + AuDbg("del path %s\n", del->pathname); + + err = vfsub_kern_path(del->pathname, lkup_dirflags, &del->h_path); + if (unlikely(err)) + pr_err("lookup failed %s (%d)\n", del->pathname, err); + + return err; +} + +#if 0 /* reserved for future use */ +static int au_opts_parse_idel(struct super_block *sb, aufs_bindex_t bindex, + struct au_opt_del *del, substring_t args[]) +{ + int err; + struct dentry *root; + + err = -EINVAL; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + if (bindex < 0 || au_sbbot(sb) < bindex) { + pr_err("out of bounds, %d\n", bindex); + goto out; + } + + err = 0; + del->h_path.dentry = dget(au_h_dptr(root, bindex)); + del->h_path.mnt = mntget(au_sbr_mnt(sb, bindex)); + +out: + aufs_read_unlock(root, !AuLock_IR); + return err; +} +#endif + +static int noinline_for_stack +au_opts_parse_mod(struct au_opt_mod *mod, substring_t args[]) +{ + int err; + struct path path; + char *p; + + err = -EINVAL; + mod->path = args[0].from; + p = strchr(mod->path, '='); + if (unlikely(!p)) { + pr_err("no permssion %s\n", args[0].from); + goto out; + } + + *p++ = 0; + err = vfsub_kern_path(mod->path, lkup_dirflags, &path); + if (unlikely(err)) { + pr_err("lookup failed %s (%d)\n", mod->path, err); + goto out; + } + + mod->perm = br_perm_val(p); + AuDbg("mod path %s, perm 0x%x, %s\n", mod->path, mod->perm, p); + mod->h_root = dget(path.dentry); + path_put(&path); + +out: + return err; +} + +#if 0 /* reserved for future use */ +static int au_opts_parse_imod(struct super_block *sb, aufs_bindex_t bindex, + struct au_opt_mod *mod, substring_t args[]) +{ + int err; + struct dentry *root; + + err = -EINVAL; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + if (bindex < 0 || au_sbbot(sb) < bindex) { + pr_err("out of bounds, %d\n", bindex); + goto out; + } + + err = 0; + mod->perm = br_perm_val(args[1].from); + AuDbg("mod path %s, perm 0x%x, %s\n", + mod->path, mod->perm, args[1].from); + mod->h_root = dget(au_h_dptr(root, bindex)); + +out: + aufs_read_unlock(root, !AuLock_IR); + return err; +} +#endif + +static int au_opts_parse_xino(struct super_block *sb, struct au_opt_xino *xino, + substring_t args[]) +{ + int err; + struct file *file; + + file = au_xino_create(sb, args[0].from, /*silent*/0); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + + err = -EINVAL; + if (unlikely(file->f_path.dentry->d_sb == sb)) { + fput(file); + pr_err("%s must be outside\n", args[0].from); + goto out; + } + + err = 0; + xino->file = file; + xino->path = args[0].from; + +out: + return err; +} + +static int noinline_for_stack +au_opts_parse_xino_itrunc_path(struct super_block *sb, + struct au_opt_xino_itrunc *xino_itrunc, + substring_t args[]) +{ + int err; + aufs_bindex_t bbot, bindex; + struct path path; + struct dentry *root; + + err = vfsub_kern_path(args[0].from, lkup_dirflags, &path); + if (unlikely(err)) { + pr_err("lookup failed %s (%d)\n", args[0].from, err); + goto out; + } + + xino_itrunc->bindex = -1; + root = sb->s_root; + aufs_read_lock(root, AuLock_FLUSH); + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + if (au_h_dptr(root, bindex) == path.dentry) { + xino_itrunc->bindex = bindex; + break; + } + } + aufs_read_unlock(root, !AuLock_IR); + path_put(&path); + + if (unlikely(xino_itrunc->bindex < 0)) { + pr_err("no such branch %s\n", args[0].from); + err = -EINVAL; + } + +out: + return err; +} + +/* called without aufs lock */ +int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts) +{ + int err, n, token; + aufs_bindex_t bindex; + unsigned char skipped; + struct dentry *root; + struct au_opt *opt, *opt_tail; + char *opt_str; + /* reduce the stack space */ + union { + struct au_opt_xino_itrunc *xino_itrunc; + struct au_opt_wbr_create *create; + } u; + struct { + substring_t args[MAX_OPT_ARGS]; + } *a; + + err = -ENOMEM; + a = kmalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + root = sb->s_root; + err = 0; + bindex = 0; + opt = opts->opt; + opt_tail = opt + opts->max_opt - 1; + opt->type = Opt_tail; + while (!err && (opt_str = strsep(&str, ",")) && *opt_str) { + err = -EINVAL; + skipped = 0; + token = match_token(opt_str, options, a->args); + switch (token) { + case Opt_br: + err = 0; + while (!err && (opt_str = strsep(&a->args[0].from, ":")) + && *opt_str) { + err = opt_add(opt, opt_str, opts->sb_flags, + bindex++); + if (unlikely(!err && ++opt > opt_tail)) { + err = -E2BIG; + break; + } + opt->type = Opt_tail; + skipped = 1; + } + break; + case Opt_add: + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + bindex = n; + err = opt_add(opt, a->args[1].from, opts->sb_flags, + bindex); + if (!err) + opt->type = token; + break; + case Opt_append: + err = opt_add(opt, a->args[0].from, opts->sb_flags, + /*dummy bindex*/1); + if (!err) + opt->type = token; + break; + case Opt_prepend: + err = opt_add(opt, a->args[0].from, opts->sb_flags, + /*bindex*/0); + if (!err) + opt->type = token; + break; + case Opt_del: + err = au_opts_parse_del(&opt->del, a->args); + if (!err) + opt->type = token; + break; +#if 0 /* reserved for future use */ + case Opt_idel: + del->pathname = "(indexed)"; + if (unlikely(match_int(&args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + err = au_opts_parse_idel(sb, n, &opt->del, a->args); + if (!err) + opt->type = token; + break; +#endif + case Opt_mod: + err = au_opts_parse_mod(&opt->mod, a->args); + if (!err) + opt->type = token; + break; +#ifdef IMOD /* reserved for future use */ + case Opt_imod: + u.mod->path = "(indexed)"; + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + err = au_opts_parse_imod(sb, n, &opt->mod, a->args); + if (!err) + opt->type = token; + break; +#endif + case Opt_xino: + err = au_opts_parse_xino(sb, &opt->xino, a->args); + if (!err) + opt->type = token; + break; + + case Opt_trunc_xino_path: + err = au_opts_parse_xino_itrunc_path + (sb, &opt->xino_itrunc, a->args); + if (!err) + opt->type = token; + break; + + case Opt_itrunc_xino: + u.xino_itrunc = &opt->xino_itrunc; + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + u.xino_itrunc->bindex = n; + aufs_read_lock(root, AuLock_FLUSH); + if (n < 0 || au_sbbot(sb) < n) { + pr_err("out of bounds, %d\n", n); + aufs_read_unlock(root, !AuLock_IR); + break; + } + aufs_read_unlock(root, !AuLock_IR); + err = 0; + opt->type = token; + break; + + case Opt_dirwh: + if (unlikely(match_int(&a->args[0], &opt->dirwh))) + break; + err = 0; + opt->type = token; + break; + + case Opt_rdcache: + if (unlikely(match_int(&a->args[0], &n))) { + pr_err("bad integer in %s\n", opt_str); + break; + } + if (unlikely(n > AUFS_RDCACHE_MAX)) { + pr_err("rdcache must be smaller than %d\n", + AUFS_RDCACHE_MAX); + break; + } + opt->rdcache = n; + err = 0; + opt->type = token; + break; + case Opt_rdblk: + if (unlikely(match_int(&a->args[0], &n) + || n < 0 + || n > KMALLOC_MAX_SIZE)) { + pr_err("bad integer in %s\n", opt_str); + break; + } + if (unlikely(n && n < NAME_MAX)) { + pr_err("rdblk must be larger than %d\n", + NAME_MAX); + break; + } + opt->rdblk = n; + err = 0; + opt->type = token; + break; + case Opt_rdhash: + if (unlikely(match_int(&a->args[0], &n) + || n < 0 + || n * sizeof(struct hlist_head) + > KMALLOC_MAX_SIZE)) { + pr_err("bad integer in %s\n", opt_str); + break; + } + opt->rdhash = n; + err = 0; + opt->type = token; + break; + + case Opt_trunc_xino: + case Opt_notrunc_xino: + case Opt_noxino: + case Opt_trunc_xib: + case Opt_notrunc_xib: + case Opt_shwh: + case Opt_noshwh: + case Opt_dirperm1: + case Opt_nodirperm1: + case Opt_plink: + case Opt_noplink: + case Opt_list_plink: + case Opt_dio: + case Opt_nodio: + case Opt_diropq_a: + case Opt_diropq_w: + case Opt_warn_perm: + case Opt_nowarn_perm: + case Opt_verbose: + case Opt_noverbose: + case Opt_sum: + case Opt_nosum: + case Opt_wsum: + case Opt_rdblk_def: + case Opt_rdhash_def: + case Opt_dirren: + case Opt_nodirren: + case Opt_acl: + case Opt_noacl: + err = 0; + opt->type = token; + break; + + case Opt_udba: + opt->udba = udba_val(a->args[0].from); + if (opt->udba >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + + case Opt_wbr_create: + u.create = &opt->wbr_create; + u.create->wbr_create + = au_wbr_create_val(a->args[0].from, u.create); + if (u.create->wbr_create >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + case Opt_wbr_copyup: + opt->wbr_copyup = au_wbr_copyup_val(a->args[0].from); + if (opt->wbr_copyup >= 0) { + err = 0; + opt->type = token; + } else + pr_err("wrong value, %s\n", opt_str); + break; + + case Opt_fhsm_sec: + if (unlikely(match_int(&a->args[0], &n) + || n < 0)) { + pr_err("bad integer in %s\n", opt_str); + break; + } + if (sysaufs_brs) { + opt->fhsm_second = n; + opt->type = token; + } else + pr_warn("ignored %s\n", opt_str); + err = 0; + break; + + case Opt_ignore: + pr_warn("ignored %s\n", opt_str); + /*FALLTHROUGH*/ + case Opt_ignore_silent: + skipped = 1; + err = 0; + break; + case Opt_err: + pr_err("unknown option %s\n", opt_str); + break; + } + + if (!err && !skipped) { + if (unlikely(++opt > opt_tail)) { + err = -E2BIG; + opt--; + opt->type = Opt_tail; + break; + } + opt->type = Opt_tail; + } + } + + kfree(a); + dump_opts(opts); + if (unlikely(err)) + au_opts_free(opts); + +out: + return err; +} + +static int au_opt_wbr_create(struct super_block *sb, + struct au_opt_wbr_create *create) +{ + int err; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 1; /* handled */ + sbinfo = au_sbi(sb); + if (sbinfo->si_wbr_create_ops->fin) { + err = sbinfo->si_wbr_create_ops->fin(sb); + if (!err) + err = 1; + } + + sbinfo->si_wbr_create = create->wbr_create; + sbinfo->si_wbr_create_ops = au_wbr_create_ops + create->wbr_create; + switch (create->wbr_create) { + case AuWbrCreate_MFSRRV: + case AuWbrCreate_MFSRR: + case AuWbrCreate_TDMFS: + case AuWbrCreate_TDMFSV: + case AuWbrCreate_PMFSRR: + case AuWbrCreate_PMFSRRV: + sbinfo->si_wbr_mfs.mfsrr_watermark = create->mfsrr_watermark; + /*FALLTHROUGH*/ + case AuWbrCreate_MFS: + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFS: + case AuWbrCreate_PMFSV: + sbinfo->si_wbr_mfs.mfs_expire + = msecs_to_jiffies(create->mfs_second * MSEC_PER_SEC); + break; + } + + if (sbinfo->si_wbr_create_ops->init) + sbinfo->si_wbr_create_ops->init(sb); /* ignore */ + + return err; +} + +/* + * returns, + * plus: processed without an error + * zero: unprocessed + */ +static int au_opt_simple(struct super_block *sb, struct au_opt *opt, + struct au_opts *opts) +{ + int err; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 1; /* handled */ + sbinfo = au_sbi(sb); + switch (opt->type) { + case Opt_udba: + sbinfo->si_mntflags &= ~AuOptMask_UDBA; + sbinfo->si_mntflags |= opt->udba; + opts->given_udba |= opt->udba; + break; + + case Opt_plink: + au_opt_set(sbinfo->si_mntflags, PLINK); + break; + case Opt_noplink: + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_put(sb, /*verbose*/1); + au_opt_clr(sbinfo->si_mntflags, PLINK); + break; + case Opt_list_plink: + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_list(sb); + break; + + case Opt_dio: + au_opt_set(sbinfo->si_mntflags, DIO); + au_fset_opts(opts->flags, REFRESH_DYAOP); + break; + case Opt_nodio: + au_opt_clr(sbinfo->si_mntflags, DIO); + au_fset_opts(opts->flags, REFRESH_DYAOP); + break; + + case Opt_fhsm_sec: + au_fhsm_set(sbinfo, opt->fhsm_second); + break; + + case Opt_diropq_a: + au_opt_set(sbinfo->si_mntflags, ALWAYS_DIROPQ); + break; + case Opt_diropq_w: + au_opt_clr(sbinfo->si_mntflags, ALWAYS_DIROPQ); + break; + + case Opt_warn_perm: + au_opt_set(sbinfo->si_mntflags, WARN_PERM); + break; + case Opt_nowarn_perm: + au_opt_clr(sbinfo->si_mntflags, WARN_PERM); + break; + + case Opt_verbose: + au_opt_set(sbinfo->si_mntflags, VERBOSE); + break; + case Opt_noverbose: + au_opt_clr(sbinfo->si_mntflags, VERBOSE); + break; + + case Opt_sum: + au_opt_set(sbinfo->si_mntflags, SUM); + break; + case Opt_wsum: + au_opt_clr(sbinfo->si_mntflags, SUM); + au_opt_set(sbinfo->si_mntflags, SUM_W); + case Opt_nosum: + au_opt_clr(sbinfo->si_mntflags, SUM); + au_opt_clr(sbinfo->si_mntflags, SUM_W); + break; + + case Opt_wbr_create: + err = au_opt_wbr_create(sb, &opt->wbr_create); + break; + case Opt_wbr_copyup: + sbinfo->si_wbr_copyup = opt->wbr_copyup; + sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + opt->wbr_copyup; + break; + + case Opt_dirwh: + sbinfo->si_dirwh = opt->dirwh; + break; + + case Opt_rdcache: + sbinfo->si_rdcache + = msecs_to_jiffies(opt->rdcache * MSEC_PER_SEC); + break; + case Opt_rdblk: + sbinfo->si_rdblk = opt->rdblk; + break; + case Opt_rdblk_def: + sbinfo->si_rdblk = AUFS_RDBLK_DEF; + break; + case Opt_rdhash: + sbinfo->si_rdhash = opt->rdhash; + break; + case Opt_rdhash_def: + sbinfo->si_rdhash = AUFS_RDHASH_DEF; + break; + + case Opt_shwh: + au_opt_set(sbinfo->si_mntflags, SHWH); + break; + case Opt_noshwh: + au_opt_clr(sbinfo->si_mntflags, SHWH); + break; + + case Opt_dirperm1: + au_opt_set(sbinfo->si_mntflags, DIRPERM1); + break; + case Opt_nodirperm1: + au_opt_clr(sbinfo->si_mntflags, DIRPERM1); + break; + + case Opt_trunc_xino: + au_opt_set(sbinfo->si_mntflags, TRUNC_XINO); + break; + case Opt_notrunc_xino: + au_opt_clr(sbinfo->si_mntflags, TRUNC_XINO); + break; + + case Opt_trunc_xino_path: + case Opt_itrunc_xino: + err = au_xino_trunc(sb, opt->xino_itrunc.bindex); + if (!err) + err = 1; + break; + + case Opt_trunc_xib: + au_fset_opts(opts->flags, TRUNC_XIB); + break; + case Opt_notrunc_xib: + au_fclr_opts(opts->flags, TRUNC_XIB); + break; + + case Opt_dirren: + err = 1; + if (!au_opt_test(sbinfo->si_mntflags, DIRREN)) { + err = au_dr_opt_set(sb); + if (!err) + err = 1; + } + if (err == 1) + au_opt_set(sbinfo->si_mntflags, DIRREN); + break; + case Opt_nodirren: + err = 1; + if (au_opt_test(sbinfo->si_mntflags, DIRREN)) { + err = au_dr_opt_clr(sb, au_ftest_opts(opts->flags, + DR_FLUSHED)); + if (!err) + err = 1; + } + if (err == 1) + au_opt_clr(sbinfo->si_mntflags, DIRREN); + break; + + case Opt_acl: + sb->s_flags |= SB_POSIXACL; + break; + case Opt_noacl: + sb->s_flags &= ~SB_POSIXACL; + break; + + default: + err = 0; + break; + } + + return err; +} + +/* + * returns tri-state. + * plus: processed without an error + * zero: unprocessed + * minus: error + */ +static int au_opt_br(struct super_block *sb, struct au_opt *opt, + struct au_opts *opts) +{ + int err, do_refresh; + + err = 0; + switch (opt->type) { + case Opt_append: + opt->add.bindex = au_sbbot(sb) + 1; + if (opt->add.bindex < 0) + opt->add.bindex = 0; + goto add; + case Opt_prepend: + opt->add.bindex = 0; + add: /* indented label */ + case Opt_add: + err = au_br_add(sb, &opt->add, + au_ftest_opts(opts->flags, REMOUNT)); + if (!err) { + err = 1; + au_fset_opts(opts->flags, REFRESH); + } + break; + + case Opt_del: + case Opt_idel: + err = au_br_del(sb, &opt->del, + au_ftest_opts(opts->flags, REMOUNT)); + if (!err) { + err = 1; + au_fset_opts(opts->flags, TRUNC_XIB); + au_fset_opts(opts->flags, REFRESH); + } + break; + + case Opt_mod: + case Opt_imod: + err = au_br_mod(sb, &opt->mod, + au_ftest_opts(opts->flags, REMOUNT), + &do_refresh); + if (!err) { + err = 1; + if (do_refresh) + au_fset_opts(opts->flags, REFRESH); + } + break; + } + return err; +} + +static int au_opt_xino(struct super_block *sb, struct au_opt *opt, + struct au_opt_xino **opt_xino, + struct au_opts *opts) +{ + int err; + aufs_bindex_t bbot, bindex; + struct dentry *root, *parent, *h_root; + + err = 0; + switch (opt->type) { + case Opt_xino: + err = au_xino_set(sb, &opt->xino, + !!au_ftest_opts(opts->flags, REMOUNT)); + if (unlikely(err)) + break; + + *opt_xino = &opt->xino; + au_xino_brid_set(sb, -1); + + /* safe d_parent access */ + parent = opt->xino.file->f_path.dentry->d_parent; + root = sb->s_root; + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + h_root = au_h_dptr(root, bindex); + if (h_root == parent) { + au_xino_brid_set(sb, au_sbr_id(sb, bindex)); + break; + } + } + break; + + case Opt_noxino: + au_xino_clr(sb); + au_xino_brid_set(sb, -1); + *opt_xino = (void *)-1; + break; + } + + return err; +} + +int au_opts_verify(struct super_block *sb, unsigned long sb_flags, + unsigned int pending) +{ + int err, fhsm; + aufs_bindex_t bindex, bbot; + unsigned char do_plink, skip, do_free, can_no_dreval; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *root, *dentry; + struct inode *dir, *h_dir; + struct au_sbinfo *sbinfo; + struct au_hinode *hdir; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!(sbinfo->si_mntflags & AuOptMask_UDBA)); + + if (!(sb_flags & SB_RDONLY)) { + if (unlikely(!au_br_writable(au_sbr_perm(sb, 0)))) + pr_warn("first branch should be rw\n"); + if (unlikely(au_opt_test(sbinfo->si_mntflags, SHWH))) + pr_warn_once("shwh should be used with ro\n"); + } + + if (au_opt_test((sbinfo->si_mntflags | pending), UDBA_HNOTIFY) + && !au_opt_test(sbinfo->si_mntflags, XINO)) + pr_warn_once("udba=*notify requires xino\n"); + + if (au_opt_test(sbinfo->si_mntflags, DIRPERM1)) + pr_warn_once("dirperm1 breaks the protection" + " by the permission bits on the lower branch\n"); + + err = 0; + fhsm = 0; + root = sb->s_root; + dir = d_inode(root); + do_plink = !!au_opt_test(sbinfo->si_mntflags, PLINK); + can_no_dreval = !!au_opt_test((sbinfo->si_mntflags | pending), + UDBA_NONE); + bbot = au_sbbot(sb); + for (bindex = 0; !err && bindex <= bbot; bindex++) { + skip = 0; + h_dir = au_h_iptr(dir, bindex); + br = au_sbr(sb, bindex); + + if ((br->br_perm & AuBrAttr_ICEX) + && !h_dir->i_op->listxattr) + br->br_perm &= ~AuBrAttr_ICEX; +#if 0 + if ((br->br_perm & AuBrAttr_ICEX_SEC) + && (au_br_sb(br)->s_flags & SB_NOSEC)) + br->br_perm &= ~AuBrAttr_ICEX_SEC; +#endif + + do_free = 0; + wbr = br->br_wbr; + if (wbr) + wbr_wh_read_lock(wbr); + + if (!au_br_writable(br->br_perm)) { + do_free = !!wbr; + skip = (!wbr + || (!wbr->wbr_whbase + && !wbr->wbr_plink + && !wbr->wbr_orph)); + } else if (!au_br_wh_linkable(br->br_perm)) { + /* skip = (!br->br_whbase && !br->br_orph); */ + skip = (!wbr || !wbr->wbr_whbase); + if (skip && wbr) { + if (do_plink) + skip = !!wbr->wbr_plink; + else + skip = !wbr->wbr_plink; + } + } else { + /* skip = (br->br_whbase && br->br_ohph); */ + skip = (wbr && wbr->wbr_whbase); + if (skip) { + if (do_plink) + skip = !!wbr->wbr_plink; + else + skip = !wbr->wbr_plink; + } + } + if (wbr) + wbr_wh_read_unlock(wbr); + + if (can_no_dreval) { + dentry = br->br_path.dentry; + spin_lock(&dentry->d_lock); + if (dentry->d_flags & + (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE)) + can_no_dreval = 0; + spin_unlock(&dentry->d_lock); + } + + if (au_br_fhsm(br->br_perm)) { + fhsm++; + AuDebugOn(!br->br_fhsm); + } + + if (skip) + continue; + + hdir = au_hi(dir, bindex); + au_hn_inode_lock_nested(hdir, AuLsc_I_PARENT); + if (wbr) + wbr_wh_write_lock(wbr); + err = au_wh_init(br, sb); + if (wbr) + wbr_wh_write_unlock(wbr); + au_hn_inode_unlock(hdir); + + if (!err && do_free) { + kfree(wbr); + br->br_wbr = NULL; + } + } + + if (can_no_dreval) + au_fset_si(sbinfo, NO_DREVAL); + else + au_fclr_si(sbinfo, NO_DREVAL); + + if (fhsm >= 2) { + au_fset_si(sbinfo, FHSM); + for (bindex = bbot; bindex >= 0; bindex--) { + br = au_sbr(sb, bindex); + if (au_br_fhsm(br->br_perm)) { + au_fhsm_set_bottom(sb, bindex); + break; + } + } + } else { + au_fclr_si(sbinfo, FHSM); + au_fhsm_set_bottom(sb, -1); + } + + return err; +} + +int au_opts_mount(struct super_block *sb, struct au_opts *opts) +{ + int err; + unsigned int tmp; + aufs_bindex_t bindex, bbot; + struct au_opt *opt; + struct au_opt_xino *opt_xino, xino; + struct au_sbinfo *sbinfo; + struct au_branch *br; + struct inode *dir; + + SiMustWriteLock(sb); + + err = 0; + opt_xino = NULL; + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) + err = au_opt_simple(sb, opt++, opts); + if (err > 0) + err = 0; + else if (unlikely(err < 0)) + goto out; + + /* disable xino and udba temporary */ + sbinfo = au_sbi(sb); + tmp = sbinfo->si_mntflags; + au_opt_clr(sbinfo->si_mntflags, XINO); + au_opt_set_udba(sbinfo->si_mntflags, UDBA_REVAL); + + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) + err = au_opt_br(sb, opt++, opts); + if (err > 0) + err = 0; + else if (unlikely(err < 0)) + goto out; + + bbot = au_sbbot(sb); + if (unlikely(bbot < 0)) { + err = -EINVAL; + pr_err("no branches\n"); + goto out; + } + + if (au_opt_test(tmp, XINO)) + au_opt_set(sbinfo->si_mntflags, XINO); + opt = opts->opt; + while (!err && opt->type != Opt_tail) + err = au_opt_xino(sb, opt++, &opt_xino, opts); + if (unlikely(err)) + goto out; + + err = au_opts_verify(sb, sb->s_flags, tmp); + if (unlikely(err)) + goto out; + + /* restore xino */ + if (au_opt_test(tmp, XINO) && !opt_xino) { + xino.file = au_xino_def(sb); + err = PTR_ERR(xino.file); + if (IS_ERR(xino.file)) + goto out; + + err = au_xino_set(sb, &xino, /*remount*/0); + fput(xino.file); + if (unlikely(err)) + goto out; + } + + /* restore udba */ + tmp &= AuOptMask_UDBA; + sbinfo->si_mntflags &= ~AuOptMask_UDBA; + sbinfo->si_mntflags |= tmp; + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + err = au_hnotify_reset_br(tmp, br, br->br_perm); + if (unlikely(err)) + AuIOErr("hnotify failed on br %d, %d, ignored\n", + bindex, err); + /* go on even if err */ + } + if (au_opt_test(tmp, UDBA_HNOTIFY)) { + dir = d_inode(sb->s_root); + au_hn_reset(dir, au_hi_flags(dir, /*isdir*/1) & ~AuHi_XINO); + } + +out: + return err; +} + +int au_opts_remount(struct super_block *sb, struct au_opts *opts) +{ + int err, rerr; + unsigned char no_dreval; + struct inode *dir; + struct au_opt_xino *opt_xino; + struct au_opt *opt; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = au_dr_opt_flush(sb); + if (unlikely(err)) + goto out; + au_fset_opts(opts->flags, DR_FLUSHED); + + dir = d_inode(sb->s_root); + sbinfo = au_sbi(sb); + opt_xino = NULL; + opt = opts->opt; + while (err >= 0 && opt->type != Opt_tail) { + err = au_opt_simple(sb, opt, opts); + if (!err) + err = au_opt_br(sb, opt, opts); + if (!err) + err = au_opt_xino(sb, opt, &opt_xino, opts); + opt++; + } + if (err > 0) + err = 0; + AuTraceErr(err); + /* go on even err */ + + no_dreval = !!au_ftest_si(sbinfo, NO_DREVAL); + rerr = au_opts_verify(sb, opts->sb_flags, /*pending*/0); + if (unlikely(rerr && !err)) + err = rerr; + + if (no_dreval != !!au_ftest_si(sbinfo, NO_DREVAL)) + au_fset_opts(opts->flags, REFRESH_IDOP); + + if (au_ftest_opts(opts->flags, TRUNC_XIB)) { + rerr = au_xib_trunc(sb); + if (unlikely(rerr && !err)) + err = rerr; + } + + /* will be handled by the caller */ + if (!au_ftest_opts(opts->flags, REFRESH) + && (opts->given_udba + || au_opt_test(sbinfo->si_mntflags, XINO) + || au_ftest_opts(opts->flags, REFRESH_IDOP) + )) + au_fset_opts(opts->flags, REFRESH); + + AuDbg("status 0x%x\n", opts->flags); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_opt_udba(struct super_block *sb) +{ + return au_mntflags(sb) & AuOptMask_UDBA; +} --- linux-aws-4.15.0.orig/fs/aufs/opts.h +++ linux-aws-4.15.0/fs/aufs/opts.h @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * mount options/flags + */ + +#ifndef __AUFS_OPTS_H__ +#define __AUFS_OPTS_H__ + +#ifdef __KERNEL__ + +#include + +struct file; + +/* ---------------------------------------------------------------------- */ + +/* mount flags */ +#define AuOpt_XINO 1 /* external inode number bitmap + and translation table */ +#define AuOpt_TRUNC_XINO (1 << 1) /* truncate xino files */ +#define AuOpt_UDBA_NONE (1 << 2) /* users direct branch access */ +#define AuOpt_UDBA_REVAL (1 << 3) +#define AuOpt_UDBA_HNOTIFY (1 << 4) +#define AuOpt_SHWH (1 << 5) /* show whiteout */ +#define AuOpt_PLINK (1 << 6) /* pseudo-link */ +#define AuOpt_DIRPERM1 (1 << 7) /* ignore the lower dir's perm + bits */ +#define AuOpt_ALWAYS_DIROPQ (1 << 9) /* policy to creating diropq */ +#define AuOpt_SUM (1 << 10) /* summation for statfs(2) */ +#define AuOpt_SUM_W (1 << 11) /* unimplemented */ +#define AuOpt_WARN_PERM (1 << 12) /* warn when add-branch */ +#define AuOpt_VERBOSE (1 << 13) /* busy inode when del-branch */ +#define AuOpt_DIO (1 << 14) /* direct io */ +#define AuOpt_DIRREN (1 << 15) /* directory rename */ + +#ifndef CONFIG_AUFS_HNOTIFY +#undef AuOpt_UDBA_HNOTIFY +#define AuOpt_UDBA_HNOTIFY 0 +#endif +#ifndef CONFIG_AUFS_DIRREN +#undef AuOpt_DIRREN +#define AuOpt_DIRREN 0 +#endif +#ifndef CONFIG_AUFS_SHWH +#undef AuOpt_SHWH +#define AuOpt_SHWH 0 +#endif + +#define AuOpt_Def (AuOpt_XINO \ + | AuOpt_UDBA_REVAL \ + | AuOpt_PLINK \ + /* | AuOpt_DIRPERM1 */ \ + | AuOpt_WARN_PERM) +#define AuOptMask_UDBA (AuOpt_UDBA_NONE \ + | AuOpt_UDBA_REVAL \ + | AuOpt_UDBA_HNOTIFY) + +#define au_opt_test(flags, name) (flags & AuOpt_##name) +#define au_opt_set(flags, name) do { \ + BUILD_BUG_ON(AuOpt_##name & AuOptMask_UDBA); \ + ((flags) |= AuOpt_##name); \ +} while (0) +#define au_opt_set_udba(flags, name) do { \ + (flags) &= ~AuOptMask_UDBA; \ + ((flags) |= AuOpt_##name); \ +} while (0) +#define au_opt_clr(flags, name) do { \ + ((flags) &= ~AuOpt_##name); \ +} while (0) + +static inline unsigned int au_opts_plink(unsigned int mntflags) +{ +#ifdef CONFIG_PROC_FS + return mntflags; +#else + return mntflags & ~AuOpt_PLINK; +#endif +} + +/* ---------------------------------------------------------------------- */ + +/* policies to select one among multiple writable branches */ +enum { + AuWbrCreate_TDP, /* top down parent */ + AuWbrCreate_RR, /* round robin */ + AuWbrCreate_MFS, /* most free space */ + AuWbrCreate_MFSV, /* mfs with seconds */ + AuWbrCreate_MFSRR, /* mfs then rr */ + AuWbrCreate_MFSRRV, /* mfs then rr with seconds */ + AuWbrCreate_TDMFS, /* top down regardless parent and mfs */ + AuWbrCreate_TDMFSV, /* top down regardless parent and mfs */ + AuWbrCreate_PMFS, /* parent and mfs */ + AuWbrCreate_PMFSV, /* parent and mfs with seconds */ + AuWbrCreate_PMFSRR, /* parent, mfs and round-robin */ + AuWbrCreate_PMFSRRV, /* plus seconds */ + + AuWbrCreate_Def = AuWbrCreate_TDP +}; + +enum { + AuWbrCopyup_TDP, /* top down parent */ + AuWbrCopyup_BUP, /* bottom up parent */ + AuWbrCopyup_BU, /* bottom up */ + + AuWbrCopyup_Def = AuWbrCopyup_TDP +}; + +/* ---------------------------------------------------------------------- */ + +struct au_opt_add { + aufs_bindex_t bindex; + char *pathname; + int perm; + struct path path; +}; + +struct au_opt_del { + char *pathname; + struct path h_path; +}; + +struct au_opt_mod { + char *path; + int perm; + struct dentry *h_root; +}; + +struct au_opt_xino { + char *path; + struct file *file; +}; + +struct au_opt_xino_itrunc { + aufs_bindex_t bindex; +}; + +struct au_opt_wbr_create { + int wbr_create; + int mfs_second; + unsigned long long mfsrr_watermark; +}; + +struct au_opt { + int type; + union { + struct au_opt_xino xino; + struct au_opt_xino_itrunc xino_itrunc; + struct au_opt_add add; + struct au_opt_del del; + struct au_opt_mod mod; + int dirwh; + int rdcache; + unsigned int rdblk; + unsigned int rdhash; + int udba; + struct au_opt_wbr_create wbr_create; + int wbr_copyup; + unsigned int fhsm_second; + }; +}; + +/* opts flags */ +#define AuOpts_REMOUNT 1 +#define AuOpts_REFRESH (1 << 1) +#define AuOpts_TRUNC_XIB (1 << 2) +#define AuOpts_REFRESH_DYAOP (1 << 3) +#define AuOpts_REFRESH_IDOP (1 << 4) +#define AuOpts_DR_FLUSHED (1 << 5) +#define au_ftest_opts(flags, name) ((flags) & AuOpts_##name) +#define au_fset_opts(flags, name) \ + do { (flags) |= AuOpts_##name; } while (0) +#define au_fclr_opts(flags, name) \ + do { (flags) &= ~AuOpts_##name; } while (0) + +#ifndef CONFIG_AUFS_DIRREN +#undef AuOpts_DR_FLUSHED +#define AuOpts_DR_FLUSHED 0 +#endif + +struct au_opts { + struct au_opt *opt; + int max_opt; + + unsigned int given_udba; + unsigned int flags; + unsigned long sb_flags; +}; + +/* ---------------------------------------------------------------------- */ + +/* opts.c */ +void au_optstr_br_perm(au_br_perm_str_t *str, int perm); +const char *au_optstr_udba(int udba); +const char *au_optstr_wbr_copyup(int wbr_copyup); +const char *au_optstr_wbr_create(int wbr_create); + +void au_opts_free(struct au_opts *opts); +struct super_block; +int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts); +int au_opts_verify(struct super_block *sb, unsigned long sb_flags, + unsigned int pending); +int au_opts_mount(struct super_block *sb, struct au_opts *opts); +int au_opts_remount(struct super_block *sb, struct au_opts *opts); + +unsigned int au_opt_udba(struct super_block *sb); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_OPTS_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/plink.c +++ linux-aws-4.15.0/fs/aufs/plink.c @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * pseudo-link + */ + +#include "aufs.h" + +/* + * the pseudo-link maintenance mode. + * during a user process maintains the pseudo-links, + * prohibit adding a new plink and branch manipulation. + * + * Flags + * NOPLM: + * For entry functions which will handle plink, and i_mutex is already held + * in VFS. + * They cannot wait and should return an error at once. + * Callers has to check the error. + * NOPLMW: + * For entry functions which will handle plink, but i_mutex is not held + * in VFS. + * They can wait the plink maintenance mode to finish. + * + * They behave like F_SETLK and F_SETLKW. + * If the caller never handle plink, then both flags are unnecessary. + */ + +int au_plink_maint(struct super_block *sb, int flags) +{ + int err; + pid_t pid, ppid; + struct task_struct *parent, *prev; + struct au_sbinfo *sbi; + + SiMustAnyLock(sb); + + err = 0; + if (!au_opt_test(au_mntflags(sb), PLINK)) + goto out; + + sbi = au_sbi(sb); + pid = sbi->si_plink_maint_pid; + if (!pid || pid == current->pid) + goto out; + + /* todo: it highly depends upon /sbin/mount.aufs */ + prev = NULL; + parent = current; + ppid = 0; + rcu_read_lock(); + while (1) { + parent = rcu_dereference(parent->real_parent); + if (parent == prev) + break; + ppid = task_pid_vnr(parent); + if (pid == ppid) { + rcu_read_unlock(); + goto out; + } + prev = parent; + } + rcu_read_unlock(); + + if (au_ftest_lock(flags, NOPLMW)) { + /* if there is no i_mutex lock in VFS, we don't need to wait */ + /* AuDebugOn(!lockdep_depth(current)); */ + while (sbi->si_plink_maint_pid) { + si_read_unlock(sb); + /* gave up wake_up_bit() */ + wait_event(sbi->si_plink_wq, !sbi->si_plink_maint_pid); + + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&sbi->si_nowait); + si_noflush_read_lock(sb); + } + } else if (au_ftest_lock(flags, NOPLM)) { + AuDbg("ppid %d, pid %d\n", ppid, pid); + err = -EAGAIN; + } + +out: + return err; +} + +void au_plink_maint_leave(struct au_sbinfo *sbinfo) +{ + spin_lock(&sbinfo->si_plink_maint_lock); + sbinfo->si_plink_maint_pid = 0; + spin_unlock(&sbinfo->si_plink_maint_lock); + wake_up_all(&sbinfo->si_plink_wq); +} + +int au_plink_maint_enter(struct super_block *sb) +{ + int err; + struct au_sbinfo *sbinfo; + + err = 0; + sbinfo = au_sbi(sb); + /* make sure i am the only one in this fs */ + si_write_lock(sb, AuLock_FLUSH); + if (au_opt_test(au_mntflags(sb), PLINK)) { + spin_lock(&sbinfo->si_plink_maint_lock); + if (!sbinfo->si_plink_maint_pid) + sbinfo->si_plink_maint_pid = current->pid; + else + err = -EBUSY; + spin_unlock(&sbinfo->si_plink_maint_lock); + } + si_write_unlock(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_DEBUG +void au_plink_list(struct super_block *sb) +{ + int i; + struct au_sbinfo *sbinfo; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + struct au_icntnr *icntnr; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + for (i = 0; i < AuPlink_NHASH; i++) { + hbl = sbinfo->si_plink + i; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(icntnr, pos, hbl, plink) + AuDbg("%lu\n", icntnr->vfs_inode.i_ino); + hlist_bl_unlock(hbl); + } +} +#endif + +/* is the inode pseudo-linked? */ +int au_plink_test(struct inode *inode) +{ + int found, i; + struct au_sbinfo *sbinfo; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + struct au_icntnr *icntnr; + + sbinfo = au_sbi(inode->i_sb); + AuRwMustAnyLock(&sbinfo->si_rwsem); + AuDebugOn(!au_opt_test(au_mntflags(inode->i_sb), PLINK)); + AuDebugOn(au_plink_maint(inode->i_sb, AuLock_NOPLM)); + + found = 0; + i = au_plink_hash(inode->i_ino); + hbl = sbinfo->si_plink + i; + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(icntnr, pos, hbl, plink) + if (&icntnr->vfs_inode == inode) { + found = 1; + break; + } + hlist_bl_unlock(hbl); + return found; +} + +/* ---------------------------------------------------------------------- */ + +/* + * generate a name for plink. + * the file will be stored under AUFS_WH_PLINKDIR. + */ +/* 20 is max digits length of ulong 64 */ +#define PLINK_NAME_LEN ((20 + 1) * 2) + +static int plink_name(char *name, int len, struct inode *inode, + aufs_bindex_t bindex) +{ + int rlen; + struct inode *h_inode; + + h_inode = au_h_iptr(inode, bindex); + rlen = snprintf(name, len, "%lu.%lu", inode->i_ino, h_inode->i_ino); + return rlen; +} + +struct au_do_plink_lkup_args { + struct dentry **errp; + struct qstr *tgtname; + struct dentry *h_parent; + struct au_branch *br; +}; + +static struct dentry *au_do_plink_lkup(struct qstr *tgtname, + struct dentry *h_parent, + struct au_branch *br) +{ + struct dentry *h_dentry; + struct inode *h_inode; + + h_inode = d_inode(h_parent); + vfsub_inode_lock_shared_nested(h_inode, AuLsc_I_CHILD2); + h_dentry = vfsub_lkup_one(tgtname, h_parent); + inode_unlock_shared(h_inode); + return h_dentry; +} + +static void au_call_do_plink_lkup(void *args) +{ + struct au_do_plink_lkup_args *a = args; + *a->errp = au_do_plink_lkup(a->tgtname, a->h_parent, a->br); +} + +/* lookup the plink-ed @inode under the branch at @bindex */ +struct dentry *au_plink_lkup(struct inode *inode, aufs_bindex_t bindex) +{ + struct dentry *h_dentry, *h_parent; + struct au_branch *br; + int wkq_err; + char a[PLINK_NAME_LEN]; + struct qstr tgtname = QSTR_INIT(a, 0); + + AuDebugOn(au_plink_maint(inode->i_sb, AuLock_NOPLM)); + + br = au_sbr(inode->i_sb, bindex); + h_parent = br->br_wbr->wbr_plink; + tgtname.len = plink_name(a, sizeof(a), inode, bindex); + + if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) { + struct au_do_plink_lkup_args args = { + .errp = &h_dentry, + .tgtname = &tgtname, + .h_parent = h_parent, + .br = br + }; + + wkq_err = au_wkq_wait(au_call_do_plink_lkup, &args); + if (unlikely(wkq_err)) + h_dentry = ERR_PTR(wkq_err); + } else + h_dentry = au_do_plink_lkup(&tgtname, h_parent, br); + + return h_dentry; +} + +/* create a pseudo-link */ +static int do_whplink(struct qstr *tgt, struct dentry *h_parent, + struct dentry *h_dentry, struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = au_br_mnt(br) + }; + struct inode *h_dir, *delegated; + + h_dir = d_inode(h_parent); + inode_lock_nested(h_dir, AuLsc_I_CHILD2); +again: + h_path.dentry = vfsub_lkup_one(tgt, h_parent); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + err = 0; + /* wh.plink dir is not monitored */ + /* todo: is it really safe? */ + if (d_is_positive(h_path.dentry) + && d_inode(h_path.dentry) != d_inode(h_dentry)) { + delegated = NULL; + err = vfsub_unlink(h_dir, &h_path, &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + dput(h_path.dentry); + h_path.dentry = NULL; + if (!err) + goto again; + } + if (!err && d_is_negative(h_path.dentry)) { + delegated = NULL; + err = vfsub_link(h_dentry, h_dir, &h_path, &delegated); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + } + dput(h_path.dentry); + +out: + inode_unlock(h_dir); + return err; +} + +struct do_whplink_args { + int *errp; + struct qstr *tgt; + struct dentry *h_parent; + struct dentry *h_dentry; + struct au_branch *br; +}; + +static void call_do_whplink(void *args) +{ + struct do_whplink_args *a = args; + *a->errp = do_whplink(a->tgt, a->h_parent, a->h_dentry, a->br); +} + +static int whplink(struct dentry *h_dentry, struct inode *inode, + aufs_bindex_t bindex, struct au_branch *br) +{ + int err, wkq_err; + struct au_wbr *wbr; + struct dentry *h_parent; + char a[PLINK_NAME_LEN]; + struct qstr tgtname = QSTR_INIT(a, 0); + + wbr = au_sbr(inode->i_sb, bindex)->br_wbr; + h_parent = wbr->wbr_plink; + tgtname.len = plink_name(a, sizeof(a), inode, bindex); + + /* always superio. */ + if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) { + struct do_whplink_args args = { + .errp = &err, + .tgt = &tgtname, + .h_parent = h_parent, + .h_dentry = h_dentry, + .br = br + }; + wkq_err = au_wkq_wait(call_do_whplink, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } else + err = do_whplink(&tgtname, h_parent, h_dentry, br); + + return err; +} + +/* + * create a new pseudo-link for @h_dentry on @bindex. + * the linked inode is held in aufs @inode. + */ +void au_plink_append(struct inode *inode, aufs_bindex_t bindex, + struct dentry *h_dentry) +{ + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos; + struct au_icntnr *icntnr; + int found, err, cnt, i; + + sb = inode->i_sb; + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + found = au_plink_test(inode); + if (found) + return; + + i = au_plink_hash(inode->i_ino); + hbl = sbinfo->si_plink + i; + au_igrab(inode); + + hlist_bl_lock(hbl); + hlist_bl_for_each_entry(icntnr, pos, hbl, plink) { + if (&icntnr->vfs_inode == inode) { + found = 1; + break; + } + } + if (!found) { + icntnr = container_of(inode, struct au_icntnr, vfs_inode); + hlist_bl_add_head(&icntnr->plink, hbl); + } + hlist_bl_unlock(hbl); + if (!found) { + cnt = au_hbl_count(hbl); +#define msg "unexpectedly unblanced or too many pseudo-links" + if (cnt > AUFS_PLINK_WARN) + AuWarn1(msg ", %d\n", cnt); +#undef msg + err = whplink(h_dentry, inode, bindex, au_sbr(sb, bindex)); + if (unlikely(err)) { + pr_warn("err %d, damaged pseudo link.\n", err); + au_hbl_del(&icntnr->plink, hbl); + iput(&icntnr->vfs_inode); + } + } else + iput(&icntnr->vfs_inode); +} + +/* free all plinks */ +void au_plink_put(struct super_block *sb, int verbose) +{ + int i, warned; + struct au_sbinfo *sbinfo; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos, *tmp; + struct au_icntnr *icntnr; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + /* no spin_lock since sbinfo is write-locked */ + warned = 0; + for (i = 0; i < AuPlink_NHASH; i++) { + hbl = sbinfo->si_plink + i; + if (!warned && verbose && !hlist_bl_empty(hbl)) { + pr_warn("pseudo-link is not flushed"); + warned = 1; + } + hlist_bl_for_each_entry_safe(icntnr, pos, tmp, hbl, plink) + iput(&icntnr->vfs_inode); + INIT_HLIST_BL_HEAD(hbl); + } +} + +void au_plink_clean(struct super_block *sb, int verbose) +{ + struct dentry *root; + + root = sb->s_root; + aufs_write_lock(root); + if (au_opt_test(au_mntflags(sb), PLINK)) + au_plink_put(sb, verbose); + aufs_write_unlock(root); +} + +static int au_plink_do_half_refresh(struct inode *inode, aufs_bindex_t br_id) +{ + int do_put; + aufs_bindex_t btop, bbot, bindex; + + do_put = 0; + btop = au_ibtop(inode); + bbot = au_ibbot(inode); + if (btop >= 0) { + for (bindex = btop; bindex <= bbot; bindex++) { + if (!au_h_iptr(inode, bindex) + || au_ii_br_id(inode, bindex) != br_id) + continue; + au_set_h_iptr(inode, bindex, NULL, 0); + do_put = 1; + break; + } + if (do_put) + for (bindex = btop; bindex <= bbot; bindex++) + if (au_h_iptr(inode, bindex)) { + do_put = 0; + break; + } + } else + do_put = 1; + + return do_put; +} + +/* free the plinks on a branch specified by @br_id */ +void au_plink_half_refresh(struct super_block *sb, aufs_bindex_t br_id) +{ + struct au_sbinfo *sbinfo; + struct hlist_bl_head *hbl; + struct hlist_bl_node *pos, *tmp; + struct au_icntnr *icntnr; + struct inode *inode; + int i, do_put; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + /* no bit_lock since sbinfo is write-locked */ + for (i = 0; i < AuPlink_NHASH; i++) { + hbl = sbinfo->si_plink + i; + hlist_bl_for_each_entry_safe(icntnr, pos, tmp, hbl, plink) { + inode = au_igrab(&icntnr->vfs_inode); + ii_write_lock_child(inode); + do_put = au_plink_do_half_refresh(inode, br_id); + if (do_put) { + hlist_bl_del(&icntnr->plink); + iput(inode); + } + ii_write_unlock(inode); + iput(inode); + } + } +} --- linux-aws-4.15.0.orig/fs/aufs/poll.c +++ linux-aws-4.15.0/fs/aufs/poll.c @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * poll operation + * There is only one filesystem which implements ->poll operation, currently. + */ + +#include "aufs.h" + +unsigned int aufs_poll(struct file *file, poll_table *wait) +{ + unsigned int mask; + int err; + struct file *h_file; + struct super_block *sb; + + /* We should pretend an error happened. */ + mask = POLLERR /* | POLLIN | POLLOUT */; + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + + h_file = au_read_pre(file, /*keep_fi*/0, /*lsc*/0); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; + + /* it is not an error if h_file has no operation */ + mask = DEFAULT_POLLMASK; + if (h_file->f_op->poll) + mask = h_file->f_op->poll(h_file, wait); + fput(h_file); /* instead of au_read_post() */ + +out: + si_read_unlock(sb); + AuTraceErr((int)mask); + return mask; +} --- linux-aws-4.15.0.orig/fs/aufs/posix_acl.c +++ linux-aws-4.15.0/fs/aufs/posix_acl.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2014-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * posix acl operations + */ + +#include +#include "aufs.h" + +struct posix_acl *aufs_get_acl(struct inode *inode, int type) +{ + struct posix_acl *acl; + int err; + aufs_bindex_t bindex; + struct inode *h_inode; + struct super_block *sb; + + acl = NULL; + sb = inode->i_sb; + si_read_lock(sb, AuLock_FLUSH); + ii_read_lock_child(inode); + if (!(sb->s_flags & SB_POSIXACL)) + goto out; + + bindex = au_ibtop(inode); + h_inode = au_h_iptr(inode, bindex); + if (unlikely(!h_inode + || ((h_inode->i_mode & S_IFMT) + != (inode->i_mode & S_IFMT)))) { + err = au_busy_or_stale(); + acl = ERR_PTR(err); + goto out; + } + + /* always topmost only */ + acl = get_acl(h_inode, type); + if (!IS_ERR_OR_NULL(acl)) + set_cached_acl(inode, type, acl); + +out: + ii_read_unlock(inode); + si_read_unlock(sb); + + AuTraceErrPtr(acl); + return acl; +} + +int aufs_set_acl(struct inode *inode, struct posix_acl *acl, int type) +{ + int err; + ssize_t ssz; + struct dentry *dentry; + struct au_sxattr arg = { + .type = AU_ACL_SET, + .u.acl_set = { + .acl = acl, + .type = type + }, + }; + + IMustLock(inode); + + if (inode->i_ino == AUFS_ROOT_INO) + dentry = dget(inode->i_sb->s_root); + else { + dentry = d_find_alias(inode); + if (!dentry) + dentry = d_find_any_alias(inode); + if (!dentry) { + pr_warn("cannot handle this inode, " + "please report to aufs-users ML\n"); + err = -ENOENT; + goto out; + } + } + + ssz = au_sxattr(dentry, inode, &arg); + dput(dentry); + err = ssz; + if (ssz >= 0) { + err = 0; + set_cached_acl(inode, type, acl); + } + +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/procfs.c +++ linux-aws-4.15.0/fs/aufs/procfs.c @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2010-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * procfs interfaces + */ + +#include +#include "aufs.h" + +static int au_procfs_plm_release(struct inode *inode, struct file *file) +{ + struct au_sbinfo *sbinfo; + + sbinfo = file->private_data; + if (sbinfo) { + au_plink_maint_leave(sbinfo); + kobject_put(&sbinfo->si_kobj); + } + + return 0; +} + +static void au_procfs_plm_write_clean(struct file *file) +{ + struct au_sbinfo *sbinfo; + + sbinfo = file->private_data; + if (sbinfo) + au_plink_clean(sbinfo->si_sb, /*verbose*/0); +} + +static int au_procfs_plm_write_si(struct file *file, unsigned long id) +{ + int err; + struct super_block *sb; + struct au_sbinfo *sbinfo; + struct hlist_bl_node *pos; + + err = -EBUSY; + if (unlikely(file->private_data)) + goto out; + + sb = NULL; + /* don't use au_sbilist_lock() here */ + hlist_bl_lock(&au_sbilist); + hlist_bl_for_each_entry(sbinfo, pos, &au_sbilist, si_list) + if (id == sysaufs_si_id(sbinfo)) { + kobject_get(&sbinfo->si_kobj); + sb = sbinfo->si_sb; + break; + } + hlist_bl_unlock(&au_sbilist); + + err = -EINVAL; + if (unlikely(!sb)) + goto out; + + err = au_plink_maint_enter(sb); + if (!err) + /* keep kobject_get() */ + file->private_data = sbinfo; + else + kobject_put(&sbinfo->si_kobj); +out: + return err; +} + +/* + * Accept a valid "si=xxxx" only. + * Once it is accepted successfully, accept "clean" too. + */ +static ssize_t au_procfs_plm_write(struct file *file, const char __user *ubuf, + size_t count, loff_t *ppos) +{ + ssize_t err; + unsigned long id; + /* last newline is allowed */ + char buf[3 + sizeof(unsigned long) * 2 + 1]; + + err = -EACCES; + if (unlikely(!capable(CAP_SYS_ADMIN))) + goto out; + + err = -EINVAL; + if (unlikely(count > sizeof(buf))) + goto out; + + err = copy_from_user(buf, ubuf, count); + if (unlikely(err)) { + err = -EFAULT; + goto out; + } + buf[count] = 0; + + err = -EINVAL; + if (!strcmp("clean", buf)) { + au_procfs_plm_write_clean(file); + goto out_success; + } else if (unlikely(strncmp("si=", buf, 3))) + goto out; + + err = kstrtoul(buf + 3, 16, &id); + if (unlikely(err)) + goto out; + + err = au_procfs_plm_write_si(file, id); + if (unlikely(err)) + goto out; + +out_success: + err = count; /* success */ +out: + return err; +} + +static const struct file_operations au_procfs_plm_fop = { + .write = au_procfs_plm_write, + .release = au_procfs_plm_release, + .owner = THIS_MODULE +}; + +/* ---------------------------------------------------------------------- */ + +static struct proc_dir_entry *au_procfs_dir; + +void au_procfs_fin(void) +{ + remove_proc_entry(AUFS_PLINK_MAINT_NAME, au_procfs_dir); + remove_proc_entry(AUFS_PLINK_MAINT_DIR, NULL); +} + +int __init au_procfs_init(void) +{ + int err; + struct proc_dir_entry *entry; + + err = -ENOMEM; + au_procfs_dir = proc_mkdir(AUFS_PLINK_MAINT_DIR, NULL); + if (unlikely(!au_procfs_dir)) + goto out; + + entry = proc_create(AUFS_PLINK_MAINT_NAME, S_IFREG | S_IWUSR, + au_procfs_dir, &au_procfs_plm_fop); + if (unlikely(!entry)) + goto out_dir; + + err = 0; + goto out; /* success */ + + +out_dir: + remove_proc_entry(AUFS_PLINK_MAINT_DIR, NULL); +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/rdu.c +++ linux-aws-4.15.0/fs/aufs/rdu.c @@ -0,0 +1,381 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * readdir in userspace. + */ + +#include +#include +#include +#include "aufs.h" + +/* bits for struct aufs_rdu.flags */ +#define AuRdu_CALLED 1 +#define AuRdu_CONT (1 << 1) +#define AuRdu_FULL (1 << 2) +#define au_ftest_rdu(flags, name) ((flags) & AuRdu_##name) +#define au_fset_rdu(flags, name) \ + do { (flags) |= AuRdu_##name; } while (0) +#define au_fclr_rdu(flags, name) \ + do { (flags) &= ~AuRdu_##name; } while (0) + +struct au_rdu_arg { + struct dir_context ctx; + struct aufs_rdu *rdu; + union au_rdu_ent_ul ent; + unsigned long end; + + struct super_block *sb; + int err; +}; + +static int au_rdu_fill(struct dir_context *ctx, const char *name, int nlen, + loff_t offset, u64 h_ino, unsigned int d_type) +{ + int err, len; + struct au_rdu_arg *arg = container_of(ctx, struct au_rdu_arg, ctx); + struct aufs_rdu *rdu = arg->rdu; + struct au_rdu_ent ent; + + err = 0; + arg->err = 0; + au_fset_rdu(rdu->cookie.flags, CALLED); + len = au_rdu_len(nlen); + if (arg->ent.ul + len < arg->end) { + ent.ino = h_ino; + ent.bindex = rdu->cookie.bindex; + ent.type = d_type; + ent.nlen = nlen; + if (unlikely(nlen > AUFS_MAX_NAMELEN)) + ent.type = DT_UNKNOWN; + + /* unnecessary to support mmap_sem since this is a dir */ + err = -EFAULT; + if (copy_to_user(arg->ent.e, &ent, sizeof(ent))) + goto out; + if (copy_to_user(arg->ent.e->name, name, nlen)) + goto out; + /* the terminating NULL */ + if (__put_user(0, arg->ent.e->name + nlen)) + goto out; + err = 0; + /* AuDbg("%p, %.*s\n", arg->ent.p, nlen, name); */ + arg->ent.ul += len; + rdu->rent++; + } else { + err = -EFAULT; + au_fset_rdu(rdu->cookie.flags, FULL); + rdu->full = 1; + rdu->tail = arg->ent; + } + +out: + /* AuTraceErr(err); */ + return err; +} + +static int au_rdu_do(struct file *h_file, struct au_rdu_arg *arg) +{ + int err; + loff_t offset; + struct au_rdu_cookie *cookie = &arg->rdu->cookie; + + /* we don't have to care (FMODE_32BITHASH | FMODE_64BITHASH) for ext4 */ + offset = vfsub_llseek(h_file, cookie->h_pos, SEEK_SET); + err = offset; + if (unlikely(offset != cookie->h_pos)) + goto out; + + err = 0; + do { + arg->err = 0; + au_fclr_rdu(cookie->flags, CALLED); + /* smp_mb(); */ + err = vfsub_iterate_dir(h_file, &arg->ctx); + if (err >= 0) + err = arg->err; + } while (!err + && au_ftest_rdu(cookie->flags, CALLED) + && !au_ftest_rdu(cookie->flags, FULL)); + cookie->h_pos = h_file->f_pos; + +out: + AuTraceErr(err); + return err; +} + +static int au_rdu(struct file *file, struct aufs_rdu *rdu) +{ + int err; + aufs_bindex_t bbot; + struct au_rdu_arg arg = { + .ctx = { + .actor = au_rdu_fill + } + }; + struct dentry *dentry; + struct inode *inode; + struct file *h_file; + struct au_rdu_cookie *cookie = &rdu->cookie; + + err = !access_ok(VERIFY_WRITE, rdu->ent.e, rdu->sz); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + rdu->rent = 0; + rdu->tail = rdu->ent; + rdu->full = 0; + arg.rdu = rdu; + arg.ent = rdu->ent; + arg.end = arg.ent.ul; + arg.end += rdu->sz; + + err = -ENOTDIR; + if (unlikely(!file->f_op->iterate && !file->f_op->iterate_shared)) + goto out; + + err = security_file_permission(file, MAY_READ); + AuTraceErr(err); + if (unlikely(err)) + goto out; + + dentry = file->f_path.dentry; + inode = d_inode(dentry); + inode_lock_shared(inode); + + arg.sb = inode->i_sb; + err = si_read_lock(arg.sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out_mtx; + err = au_alive_dir(dentry); + if (unlikely(err)) + goto out_si; + /* todo: reval? */ + fi_read_lock(file); + + err = -EAGAIN; + if (unlikely(au_ftest_rdu(cookie->flags, CONT) + && cookie->generation != au_figen(file))) + goto out_unlock; + + err = 0; + if (!rdu->blk) { + rdu->blk = au_sbi(arg.sb)->si_rdblk; + if (!rdu->blk) + rdu->blk = au_dir_size(file, /*dentry*/NULL); + } + bbot = au_fbtop(file); + if (cookie->bindex < bbot) + cookie->bindex = bbot; + bbot = au_fbbot_dir(file); + /* AuDbg("b%d, b%d\n", cookie->bindex, bbot); */ + for (; !err && cookie->bindex <= bbot; + cookie->bindex++, cookie->h_pos = 0) { + h_file = au_hf_dir(file, cookie->bindex); + if (!h_file) + continue; + + au_fclr_rdu(cookie->flags, FULL); + err = au_rdu_do(h_file, &arg); + AuTraceErr(err); + if (unlikely(au_ftest_rdu(cookie->flags, FULL) || err)) + break; + } + AuDbg("rent %llu\n", rdu->rent); + + if (!err && !au_ftest_rdu(cookie->flags, CONT)) { + rdu->shwh = !!au_opt_test(au_sbi(arg.sb)->si_mntflags, SHWH); + au_fset_rdu(cookie->flags, CONT); + cookie->generation = au_figen(file); + } + + ii_read_lock_child(inode); + fsstack_copy_attr_atime(inode, au_h_iptr(inode, au_ibtop(inode))); + ii_read_unlock(inode); + +out_unlock: + fi_read_unlock(file); +out_si: + si_read_unlock(arg.sb); +out_mtx: + inode_unlock_shared(inode); +out: + AuTraceErr(err); + return err; +} + +static int au_rdu_ino(struct file *file, struct aufs_rdu *rdu) +{ + int err; + ino_t ino; + unsigned long long nent; + union au_rdu_ent_ul *u; + struct au_rdu_ent ent; + struct super_block *sb; + + err = 0; + nent = rdu->nent; + u = &rdu->ent; + sb = file->f_path.dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + while (nent-- > 0) { + /* unnecessary to support mmap_sem since this is a dir */ + err = copy_from_user(&ent, u->e, sizeof(ent)); + if (!err) + err = !access_ok(VERIFY_WRITE, &u->e->ino, sizeof(ino)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + break; + } + + /* AuDbg("b%d, i%llu\n", ent.bindex, ent.ino); */ + if (!ent.wh) + err = au_ino(sb, ent.bindex, ent.ino, ent.type, &ino); + else + err = au_wh_ino(sb, ent.bindex, ent.ino, ent.type, + &ino); + if (unlikely(err)) { + AuTraceErr(err); + break; + } + + err = __put_user(ino, &u->e->ino); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + break; + } + u->ul += au_rdu_len(ent.nlen); + } + si_read_unlock(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_rdu_verify(struct aufs_rdu *rdu) +{ + AuDbg("rdu{%llu, %p, %u | %u | %llu, %u, %u | " + "%llu, b%d, 0x%x, g%u}\n", + rdu->sz, rdu->ent.e, rdu->verify[AufsCtlRduV_SZ], + rdu->blk, + rdu->rent, rdu->shwh, rdu->full, + rdu->cookie.h_pos, rdu->cookie.bindex, rdu->cookie.flags, + rdu->cookie.generation); + + if (rdu->verify[AufsCtlRduV_SZ] == sizeof(*rdu)) + return 0; + + AuDbg("%u:%u\n", + rdu->verify[AufsCtlRduV_SZ], (unsigned int)sizeof(*rdu)); + return -EINVAL; +} + +long au_rdu_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err, e; + struct aufs_rdu rdu; + void __user *p = (void __user *)arg; + + err = copy_from_user(&rdu, p, sizeof(rdu)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + err = au_rdu_verify(&rdu); + if (unlikely(err)) + goto out; + + switch (cmd) { + case AUFS_CTL_RDU: + err = au_rdu(file, &rdu); + if (unlikely(err)) + break; + + e = copy_to_user(p, &rdu, sizeof(rdu)); + if (unlikely(e)) { + err = -EFAULT; + AuTraceErr(err); + } + break; + case AUFS_CTL_RDU_INO: + err = au_rdu_ino(file, &rdu); + break; + + default: + /* err = -ENOTTY; */ + err = -EINVAL; + } + +out: + AuTraceErr(err); + return err; +} + +#ifdef CONFIG_COMPAT +long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + long err, e; + struct aufs_rdu rdu; + void __user *p = compat_ptr(arg); + + /* todo: get_user()? */ + err = copy_from_user(&rdu, p, sizeof(rdu)); + if (unlikely(err)) { + err = -EFAULT; + AuTraceErr(err); + goto out; + } + rdu.ent.e = compat_ptr(rdu.ent.ul); + err = au_rdu_verify(&rdu); + if (unlikely(err)) + goto out; + + switch (cmd) { + case AUFS_CTL_RDU: + err = au_rdu(file, &rdu); + if (unlikely(err)) + break; + + rdu.ent.ul = ptr_to_compat(rdu.ent.e); + rdu.tail.ul = ptr_to_compat(rdu.tail.e); + e = copy_to_user(p, &rdu, sizeof(rdu)); + if (unlikely(e)) { + err = -EFAULT; + AuTraceErr(err); + } + break; + case AUFS_CTL_RDU_INO: + err = au_rdu_ino(file, &rdu); + break; + + default: + /* err = -ENOTTY; */ + err = -EINVAL; + } + +out: + AuTraceErr(err); + return err; +} +#endif --- linux-aws-4.15.0.orig/fs/aufs/rwsem.h +++ linux-aws-4.15.0/fs/aufs/rwsem.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * simple read-write semaphore wrappers + */ + +#ifndef __AUFS_RWSEM_H__ +#define __AUFS_RWSEM_H__ + +#ifdef __KERNEL__ + +#include "debug.h" + +/* in the futre, the name 'au_rwsem' will be totally gone */ +#define au_rwsem rw_semaphore + +/* to debug easier, do not make them inlined functions */ +#define AuRwMustNoWaiters(rw) AuDebugOn(rwsem_is_contended(rw)) +/* rwsem_is_locked() is unusable */ +#define AuRwMustReadLock(rw) AuDebugOn(!lockdep_recursing(current) \ + && debug_locks \ + && !lockdep_is_held_type(rw, 1)) +#define AuRwMustWriteLock(rw) AuDebugOn(!lockdep_recursing(current) \ + && debug_locks \ + && !lockdep_is_held_type(rw, 0)) +#define AuRwMustAnyLock(rw) AuDebugOn(!lockdep_recursing(current) \ + && debug_locks \ + && !lockdep_is_held(rw)) +#define AuRwDestroy(rw) AuDebugOn(!lockdep_recursing(current) \ + && debug_locks \ + && lockdep_is_held(rw)) + +#define au_rw_init(rw) init_rwsem(rw) + +#define au_rw_init_wlock(rw) do { \ + au_rw_init(rw); \ + down_write(rw); \ + } while (0) + +#define au_rw_init_wlock_nested(rw, lsc) do { \ + au_rw_init(rw); \ + down_write_nested(rw, lsc); \ + } while (0) + +#define au_rw_read_lock(rw) down_read(rw) +#define au_rw_read_lock_nested(rw, lsc) down_read_nested(rw, lsc) +#define au_rw_read_unlock(rw) up_read(rw) +#define au_rw_dgrade_lock(rw) downgrade_write(rw) +#define au_rw_write_lock(rw) down_write(rw) +#define au_rw_write_lock_nested(rw, lsc) down_write_nested(rw, lsc) +#define au_rw_write_unlock(rw) up_write(rw) +/* why is not _nested version defined? */ +#define au_rw_read_trylock(rw) down_read_trylock(rw) +#define au_rw_write_trylock(rw) down_write_trylock(rw) + +#endif /* __KERNEL__ */ +#endif /* __AUFS_RWSEM_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/sbinfo.c +++ linux-aws-4.15.0/fs/aufs/sbinfo.c @@ -0,0 +1,304 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * superblock private data + */ + +#include "aufs.h" + +/* + * they are necessary regardless sysfs is disabled. + */ +void au_si_free(struct kobject *kobj) +{ + int i; + struct au_sbinfo *sbinfo; + char *locked __maybe_unused; /* debug only */ + + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + for (i = 0; i < AuPlink_NHASH; i++) + AuDebugOn(!hlist_bl_empty(sbinfo->si_plink + i)); + AuDebugOn(atomic_read(&sbinfo->si_nowait.nw_len)); + + AuDebugOn(percpu_counter_sum(&sbinfo->si_ninodes)); + percpu_counter_destroy(&sbinfo->si_ninodes); + AuDebugOn(percpu_counter_sum(&sbinfo->si_nfiles)); + percpu_counter_destroy(&sbinfo->si_nfiles); + + au_rw_write_lock(&sbinfo->si_rwsem); + au_br_free(sbinfo); + au_rw_write_unlock(&sbinfo->si_rwsem); + + kfree(sbinfo->si_branch); + mutex_destroy(&sbinfo->si_xib_mtx); + AuRwDestroy(&sbinfo->si_rwsem); + + kfree(sbinfo); +} + +int au_si_alloc(struct super_block *sb) +{ + int err, i; + struct au_sbinfo *sbinfo; + + err = -ENOMEM; + sbinfo = kzalloc(sizeof(*sbinfo), GFP_NOFS); + if (unlikely(!sbinfo)) + goto out; + + /* will be reallocated separately */ + sbinfo->si_branch = kzalloc(sizeof(*sbinfo->si_branch), GFP_NOFS); + if (unlikely(!sbinfo->si_branch)) + goto out_sbinfo; + + err = sysaufs_si_init(sbinfo); + if (unlikely(err)) + goto out_br; + + au_nwt_init(&sbinfo->si_nowait); + au_rw_init_wlock(&sbinfo->si_rwsem); + + percpu_counter_init(&sbinfo->si_ninodes, 0, GFP_NOFS); + percpu_counter_init(&sbinfo->si_nfiles, 0, GFP_NOFS); + + sbinfo->si_bbot = -1; + sbinfo->si_last_br_id = AUFS_BRANCH_MAX / 2; + + sbinfo->si_wbr_copyup = AuWbrCopyup_Def; + sbinfo->si_wbr_create = AuWbrCreate_Def; + sbinfo->si_wbr_copyup_ops = au_wbr_copyup_ops + sbinfo->si_wbr_copyup; + sbinfo->si_wbr_create_ops = au_wbr_create_ops + sbinfo->si_wbr_create; + + au_fhsm_init(sbinfo); + + sbinfo->si_mntflags = au_opts_plink(AuOpt_Def); + + sbinfo->si_xino_jiffy = jiffies; + sbinfo->si_xino_expire + = msecs_to_jiffies(AUFS_XINO_DEF_SEC * MSEC_PER_SEC); + mutex_init(&sbinfo->si_xib_mtx); + sbinfo->si_xino_brid = -1; + /* leave si_xib_last_pindex and si_xib_next_bit */ + + INIT_HLIST_BL_HEAD(&sbinfo->si_aopen); + + sbinfo->si_rdcache = msecs_to_jiffies(AUFS_RDCACHE_DEF * MSEC_PER_SEC); + sbinfo->si_rdblk = AUFS_RDBLK_DEF; + sbinfo->si_rdhash = AUFS_RDHASH_DEF; + sbinfo->si_dirwh = AUFS_DIRWH_DEF; + + for (i = 0; i < AuPlink_NHASH; i++) + INIT_HLIST_BL_HEAD(sbinfo->si_plink + i); + init_waitqueue_head(&sbinfo->si_plink_wq); + spin_lock_init(&sbinfo->si_plink_maint_lock); + + INIT_HLIST_BL_HEAD(&sbinfo->si_files); + + /* with getattr by default */ + sbinfo->si_iop_array = aufs_iop; + + /* leave other members for sysaufs and si_mnt. */ + sbinfo->si_sb = sb; + sb->s_fs_info = sbinfo; + si_pid_set(sb); + return 0; /* success */ + +out_br: + kfree(sbinfo->si_branch); +out_sbinfo: + kfree(sbinfo); +out: + return err; +} + +int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr, int may_shrink) +{ + int err, sz; + struct au_branch **brp; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + err = -ENOMEM; + sz = sizeof(*brp) * (sbinfo->si_bbot + 1); + if (unlikely(!sz)) + sz = sizeof(*brp); + brp = au_kzrealloc(sbinfo->si_branch, sz, sizeof(*brp) * nbr, GFP_NOFS, + may_shrink); + if (brp) { + sbinfo->si_branch = brp; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_sigen_inc(struct super_block *sb) +{ + unsigned int gen; + struct inode *inode; + + SiMustWriteLock(sb); + + gen = ++au_sbi(sb)->si_generation; + au_update_digen(sb->s_root); + inode = d_inode(sb->s_root); + au_update_iigen(inode, /*half*/0); + inode->i_version++; + return gen; +} + +aufs_bindex_t au_new_br_id(struct super_block *sb) +{ + aufs_bindex_t br_id; + int i; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + for (i = 0; i <= AUFS_BRANCH_MAX; i++) { + br_id = ++sbinfo->si_last_br_id; + AuDebugOn(br_id < 0); + if (br_id && au_br_index(sb, br_id) < 0) + return br_id; + } + + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* it is ok that new 'nwt' tasks are appended while we are sleeping */ +int si_read_lock(struct super_block *sb, int flags) +{ + int err; + + err = 0; + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + + si_noflush_read_lock(sb); + err = au_plink_maint(sb, flags); + if (unlikely(err)) + si_read_unlock(sb); + + return err; +} + +int si_write_lock(struct super_block *sb, int flags) +{ + int err; + + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + + si_noflush_write_lock(sb); + err = au_plink_maint(sb, flags); + if (unlikely(err)) + si_write_unlock(sb); + + return err; +} + +/* dentry and super_block lock. call at entry point */ +int aufs_read_lock(struct dentry *dentry, int flags) +{ + int err; + struct super_block *sb; + + sb = dentry->d_sb; + err = si_read_lock(sb, flags); + if (unlikely(err)) + goto out; + + if (au_ftest_lock(flags, DW)) + di_write_lock_child(dentry); + else + di_read_lock_child(dentry, flags); + + if (au_ftest_lock(flags, GEN)) { + err = au_digen_test(dentry, au_sigen(sb)); + if (!au_opt_test(au_mntflags(sb), UDBA_NONE)) + AuDebugOn(!err && au_dbrange_test(dentry)); + else if (!err) + err = au_dbrange_test(dentry); + if (unlikely(err)) + aufs_read_unlock(dentry, flags); + } + +out: + return err; +} + +void aufs_read_unlock(struct dentry *dentry, int flags) +{ + if (au_ftest_lock(flags, DW)) + di_write_unlock(dentry); + else + di_read_unlock(dentry, flags); + si_read_unlock(dentry->d_sb); +} + +void aufs_write_lock(struct dentry *dentry) +{ + si_write_lock(dentry->d_sb, AuLock_FLUSH | AuLock_NOPLMW); + di_write_lock_child(dentry); +} + +void aufs_write_unlock(struct dentry *dentry) +{ + di_write_unlock(dentry); + si_write_unlock(dentry->d_sb); +} + +int aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int flags) +{ + int err; + unsigned int sigen; + struct super_block *sb; + + sb = d1->d_sb; + err = si_read_lock(sb, flags); + if (unlikely(err)) + goto out; + + di_write_lock2_child(d1, d2, au_ftest_lock(flags, DIRS)); + + if (au_ftest_lock(flags, GEN)) { + sigen = au_sigen(sb); + err = au_digen_test(d1, sigen); + AuDebugOn(!err && au_dbrange_test(d1)); + if (!err) { + err = au_digen_test(d2, sigen); + AuDebugOn(!err && au_dbrange_test(d2)); + } + if (unlikely(err)) + aufs_read_and_write_unlock2(d1, d2); + } + +out: + return err; +} + +void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2) +{ + di_write_unlock2(d1, d2); + si_read_unlock(d1->d_sb); +} --- linux-aws-4.15.0.orig/fs/aufs/super.c +++ linux-aws-4.15.0/fs/aufs/super.c @@ -0,0 +1,1049 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * mount and super_block operations + */ + +#include +#include +#include +#include +#include "aufs.h" + +/* + * super_operations + */ +static struct inode *aufs_alloc_inode(struct super_block *sb __maybe_unused) +{ + struct au_icntnr *c; + + c = au_cache_alloc_icntnr(); + if (c) { + au_icntnr_init(c); + c->vfs_inode.i_version = 1; /* sigen(sb); */ + c->iinfo.ii_hinode = NULL; + return &c->vfs_inode; + } + return NULL; +} + +static void aufs_destroy_inode_cb(struct rcu_head *head) +{ + struct inode *inode = container_of(head, struct inode, i_rcu); + + au_cache_free_icntnr(container_of(inode, struct au_icntnr, vfs_inode)); +} + +static void aufs_destroy_inode(struct inode *inode) +{ + if (!au_is_bad_inode(inode)) + au_iinfo_fin(inode); + call_rcu(&inode->i_rcu, aufs_destroy_inode_cb); +} + +struct inode *au_iget_locked(struct super_block *sb, ino_t ino) +{ + struct inode *inode; + int err; + + inode = iget_locked(sb, ino); + if (unlikely(!inode)) { + inode = ERR_PTR(-ENOMEM); + goto out; + } + if (!(inode->i_state & I_NEW)) + goto out; + + err = au_xigen_new(inode); + if (!err) + err = au_iinfo_init(inode); + if (!err) + inode->i_version++; + else { + iget_failed(inode); + inode = ERR_PTR(err); + } + +out: + /* never return NULL */ + AuDebugOn(!inode); + AuTraceErrPtr(inode); + return inode; +} + +/* lock free root dinfo */ +static int au_show_brs(struct seq_file *seq, struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bbot; + struct path path; + struct au_hdentry *hdp; + struct au_branch *br; + au_br_perm_str_t perm; + + err = 0; + bbot = au_sbbot(sb); + bindex = 0; + hdp = au_hdentry(au_di(sb->s_root), bindex); + for (; !err && bindex <= bbot; bindex++, hdp++) { + br = au_sbr(sb, bindex); + path.mnt = au_br_mnt(br); + path.dentry = hdp->hd_dentry; + err = au_seq_path(seq, &path); + if (!err) { + au_optstr_br_perm(&perm, br->br_perm); + seq_printf(seq, "=%s", perm.a); + if (bindex != bbot) + seq_putc(seq, ':'); + } + } + if (unlikely(err || seq_has_overflowed(seq))) + err = -E2BIG; + + return err; +} + +static void au_gen_fmt(char *fmt, int len __maybe_unused, const char *pat, + const char *append) +{ + char *p; + + p = fmt; + while (*pat != ':') + *p++ = *pat++; + *p++ = *pat++; + strcpy(p, append); + AuDebugOn(strlen(fmt) >= len); +} + +static void au_show_wbr_create(struct seq_file *m, int v, + struct au_sbinfo *sbinfo) +{ + const char *pat; + char fmt[32]; + struct au_wbr_mfs *mfs; + + AuRwMustAnyLock(&sbinfo->si_rwsem); + + seq_puts(m, ",create="); + pat = au_optstr_wbr_create(v); + mfs = &sbinfo->si_wbr_mfs; + switch (v) { + case AuWbrCreate_TDP: + case AuWbrCreate_RR: + case AuWbrCreate_MFS: + case AuWbrCreate_PMFS: + seq_puts(m, pat); + break; + case AuWbrCreate_MFSRR: + case AuWbrCreate_TDMFS: + case AuWbrCreate_PMFSRR: + au_gen_fmt(fmt, sizeof(fmt), pat, "%llu"); + seq_printf(m, fmt, mfs->mfsrr_watermark); + break; + case AuWbrCreate_MFSV: + case AuWbrCreate_PMFSV: + au_gen_fmt(fmt, sizeof(fmt), pat, "%lu"); + seq_printf(m, fmt, + jiffies_to_msecs(mfs->mfs_expire) + / MSEC_PER_SEC); + break; + case AuWbrCreate_MFSRRV: + case AuWbrCreate_TDMFSV: + case AuWbrCreate_PMFSRRV: + au_gen_fmt(fmt, sizeof(fmt), pat, "%llu:%lu"); + seq_printf(m, fmt, mfs->mfsrr_watermark, + jiffies_to_msecs(mfs->mfs_expire) / MSEC_PER_SEC); + break; + default: + BUG(); + } +} + +static int au_show_xino(struct seq_file *seq, struct super_block *sb) +{ +#ifdef CONFIG_SYSFS + return 0; +#else + int err; + const int len = sizeof(AUFS_XINO_FNAME) - 1; + aufs_bindex_t bindex, brid; + struct qstr *name; + struct file *f; + struct dentry *d, *h_root; + + AuRwMustAnyLock(&sbinfo->si_rwsem); + + err = 0; + f = au_sbi(sb)->si_xib; + if (!f) + goto out; + + /* stop printing the default xino path on the first writable branch */ + h_root = NULL; + brid = au_xino_brid(sb); + if (brid >= 0) { + bindex = au_br_index(sb, brid); + h_root = au_hdentry(au_di(sb->s_root), bindex)->hd_dentry; + } + d = f->f_path.dentry; + name = &d->d_name; + /* safe ->d_parent because the file is unlinked */ + if (d->d_parent == h_root + && name->len == len + && !memcmp(name->name, AUFS_XINO_FNAME, len)) + goto out; + + seq_puts(seq, ",xino="); + err = au_xino_path(seq, f); + +out: + return err; +#endif +} + +/* seq_file will re-call me in case of too long string */ +static int aufs_show_options(struct seq_file *m, struct dentry *dentry) +{ + int err; + unsigned int mnt_flags, v; + struct super_block *sb; + struct au_sbinfo *sbinfo; + +#define AuBool(name, str) do { \ + v = au_opt_test(mnt_flags, name); \ + if (v != au_opt_test(AuOpt_Def, name)) \ + seq_printf(m, ",%s" #str, v ? "" : "no"); \ +} while (0) + +#define AuStr(name, str) do { \ + v = mnt_flags & AuOptMask_##name; \ + if (v != (AuOpt_Def & AuOptMask_##name)) \ + seq_printf(m, "," #str "=%s", au_optstr_##str(v)); \ +} while (0) + +#define AuUInt(name, str, val) do { \ + if (val != AUFS_##name##_DEF) \ + seq_printf(m, "," #str "=%u", val); \ +} while (0) + + sb = dentry->d_sb; + if (sb->s_flags & SB_POSIXACL) + seq_puts(m, ",acl"); + + /* lock free root dinfo */ + si_noflush_read_lock(sb); + sbinfo = au_sbi(sb); + seq_printf(m, ",si=%lx", sysaufs_si_id(sbinfo)); + + mnt_flags = au_mntflags(sb); + if (au_opt_test(mnt_flags, XINO)) { + err = au_show_xino(m, sb); + if (unlikely(err)) + goto out; + } else + seq_puts(m, ",noxino"); + + AuBool(TRUNC_XINO, trunc_xino); + AuStr(UDBA, udba); + AuBool(SHWH, shwh); + AuBool(PLINK, plink); + AuBool(DIO, dio); + AuBool(DIRPERM1, dirperm1); + + v = sbinfo->si_wbr_create; + if (v != AuWbrCreate_Def) + au_show_wbr_create(m, v, sbinfo); + + v = sbinfo->si_wbr_copyup; + if (v != AuWbrCopyup_Def) + seq_printf(m, ",cpup=%s", au_optstr_wbr_copyup(v)); + + v = au_opt_test(mnt_flags, ALWAYS_DIROPQ); + if (v != au_opt_test(AuOpt_Def, ALWAYS_DIROPQ)) + seq_printf(m, ",diropq=%c", v ? 'a' : 'w'); + + AuUInt(DIRWH, dirwh, sbinfo->si_dirwh); + + v = jiffies_to_msecs(sbinfo->si_rdcache) / MSEC_PER_SEC; + AuUInt(RDCACHE, rdcache, v); + + AuUInt(RDBLK, rdblk, sbinfo->si_rdblk); + AuUInt(RDHASH, rdhash, sbinfo->si_rdhash); + + au_fhsm_show(m, sbinfo); + + AuBool(DIRREN, dirren); + AuBool(SUM, sum); + /* AuBool(SUM_W, wsum); */ + AuBool(WARN_PERM, warn_perm); + AuBool(VERBOSE, verbose); + +out: + /* be sure to print "br:" last */ + if (!sysaufs_brs) { + seq_puts(m, ",br:"); + au_show_brs(m, sb); + } + si_read_unlock(sb); + return 0; + +#undef AuBool +#undef AuStr +#undef AuUInt +} + +/* ---------------------------------------------------------------------- */ + +/* sum mode which returns the summation for statfs(2) */ + +static u64 au_add_till_max(u64 a, u64 b) +{ + u64 old; + + old = a; + a += b; + if (old <= a) + return a; + return ULLONG_MAX; +} + +static u64 au_mul_till_max(u64 a, long mul) +{ + u64 old; + + old = a; + a *= mul; + if (old <= a) + return a; + return ULLONG_MAX; +} + +static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf) +{ + int err; + long bsize, factor; + u64 blocks, bfree, bavail, files, ffree; + aufs_bindex_t bbot, bindex, i; + unsigned char shared; + struct path h_path; + struct super_block *h_sb; + + err = 0; + bsize = LONG_MAX; + files = 0; + ffree = 0; + blocks = 0; + bfree = 0; + bavail = 0; + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + h_path.mnt = au_sbr_mnt(sb, bindex); + h_sb = h_path.mnt->mnt_sb; + shared = 0; + for (i = 0; !shared && i < bindex; i++) + shared = (au_sbr_sb(sb, i) == h_sb); + if (shared) + continue; + + /* sb->s_root for NFS is unreliable */ + h_path.dentry = h_path.mnt->mnt_root; + err = vfs_statfs(&h_path, buf); + if (unlikely(err)) + goto out; + + if (bsize > buf->f_bsize) { + /* + * we will reduce bsize, so we have to expand blocks + * etc. to match them again + */ + factor = (bsize / buf->f_bsize); + blocks = au_mul_till_max(blocks, factor); + bfree = au_mul_till_max(bfree, factor); + bavail = au_mul_till_max(bavail, factor); + bsize = buf->f_bsize; + } + + factor = (buf->f_bsize / bsize); + blocks = au_add_till_max(blocks, + au_mul_till_max(buf->f_blocks, factor)); + bfree = au_add_till_max(bfree, + au_mul_till_max(buf->f_bfree, factor)); + bavail = au_add_till_max(bavail, + au_mul_till_max(buf->f_bavail, factor)); + files = au_add_till_max(files, buf->f_files); + ffree = au_add_till_max(ffree, buf->f_ffree); + } + + buf->f_bsize = bsize; + buf->f_blocks = blocks; + buf->f_bfree = bfree; + buf->f_bavail = bavail; + buf->f_files = files; + buf->f_ffree = ffree; + buf->f_frsize = 0; + +out: + return err; +} + +static int aufs_statfs(struct dentry *dentry, struct kstatfs *buf) +{ + int err; + struct path h_path; + struct super_block *sb; + + /* lock free root dinfo */ + sb = dentry->d_sb; + si_noflush_read_lock(sb); + if (!au_opt_test(au_mntflags(sb), SUM)) { + /* sb->s_root for NFS is unreliable */ + h_path.mnt = au_sbr_mnt(sb, 0); + h_path.dentry = h_path.mnt->mnt_root; + err = vfs_statfs(&h_path, buf); + } else + err = au_statfs_sum(sb, buf); + si_read_unlock(sb); + + if (!err) { + buf->f_type = AUFS_SUPER_MAGIC; + buf->f_namelen = AUFS_MAX_NAMELEN; + memset(&buf->f_fsid, 0, sizeof(buf->f_fsid)); + } + /* buf->f_bsize = buf->f_blocks = buf->f_bfree = buf->f_bavail = -1; */ + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_sync_fs(struct super_block *sb, int wait) +{ + int err, e; + aufs_bindex_t bbot, bindex; + struct au_branch *br; + struct super_block *h_sb; + + err = 0; + si_noflush_read_lock(sb); + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (!au_br_writable(br->br_perm)) + continue; + + h_sb = au_sbr_sb(sb, bindex); + e = vfsub_sync_filesystem(h_sb, wait); + if (unlikely(e && !err)) + err = e; + /* go on even if an error happens */ + } + si_read_unlock(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* final actions when unmounting a file system */ +static void aufs_put_super(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + sbinfo = au_sbi(sb); + if (!sbinfo) + return; + + dbgaufs_si_fin(sbinfo); + kobject_put(&sbinfo->si_kobj); +} + +/* ---------------------------------------------------------------------- */ + +void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, + struct super_block *sb, void *arg) +{ + void *array; + unsigned long long n, sz; + + array = NULL; + n = 0; + if (!*hint) + goto out; + + if (*hint > ULLONG_MAX / sizeof(array)) { + array = ERR_PTR(-EMFILE); + pr_err("hint %llu\n", *hint); + goto out; + } + + sz = sizeof(array) * *hint; + array = kzalloc(sz, GFP_NOFS); + if (unlikely(!array)) + array = vzalloc(sz); + if (unlikely(!array)) { + array = ERR_PTR(-ENOMEM); + goto out; + } + + n = cb(sb, array, *hint, arg); + AuDebugOn(n > *hint); + +out: + *hint = n; + return array; +} + +static unsigned long long au_iarray_cb(struct super_block *sb, void *a, + unsigned long long max __maybe_unused, + void *arg) +{ + unsigned long long n; + struct inode **p, *inode; + struct list_head *head; + + n = 0; + p = a; + head = arg; + spin_lock(&sb->s_inode_list_lock); + list_for_each_entry(inode, head, i_sb_list) { + if (!au_is_bad_inode(inode) + && au_ii(inode)->ii_btop >= 0) { + spin_lock(&inode->i_lock); + if (atomic_read(&inode->i_count)) { + au_igrab(inode); + *p++ = inode; + n++; + AuDebugOn(n > max); + } + spin_unlock(&inode->i_lock); + } + } + spin_unlock(&sb->s_inode_list_lock); + + return n; +} + +struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max) +{ + *max = au_ninodes(sb); + return au_array_alloc(max, au_iarray_cb, sb, &sb->s_inodes); +} + +void au_iarray_free(struct inode **a, unsigned long long max) +{ + unsigned long long ull; + + for (ull = 0; ull < max; ull++) + iput(a[ull]); + kvfree(a); +} + +/* ---------------------------------------------------------------------- */ + +/* + * refresh dentry and inode at remount time. + */ +/* todo: consolidate with simple_reval_dpath() and au_reval_for_attr() */ +static int au_do_refresh(struct dentry *dentry, unsigned int dir_flags, + struct dentry *parent) +{ + int err; + + di_write_lock_child(dentry); + di_read_lock_parent(parent, AuLock_IR); + err = au_refresh_dentry(dentry, parent); + if (!err && dir_flags) + au_hn_reset(d_inode(dentry), dir_flags); + di_read_unlock(parent, AuLock_IR); + di_write_unlock(dentry); + + return err; +} + +static int au_do_refresh_d(struct dentry *dentry, unsigned int sigen, + struct au_sbinfo *sbinfo, + const unsigned int dir_flags, unsigned int do_idop) +{ + int err; + struct dentry *parent; + + err = 0; + parent = dget_parent(dentry); + if (!au_digen_test(parent, sigen) && au_digen_test(dentry, sigen)) { + if (d_really_is_positive(dentry)) { + if (!d_is_dir(dentry)) + err = au_do_refresh(dentry, /*dir_flags*/0, + parent); + else { + err = au_do_refresh(dentry, dir_flags, parent); + if (unlikely(err)) + au_fset_si(sbinfo, FAILED_REFRESH_DIR); + } + } else + err = au_do_refresh(dentry, /*dir_flags*/0, parent); + AuDbgDentry(dentry); + } + dput(parent); + + if (!err) { + if (do_idop) + au_refresh_dop(dentry, /*force_reval*/0); + } else + au_refresh_dop(dentry, /*force_reval*/1); + + AuTraceErr(err); + return err; +} + +static int au_refresh_d(struct super_block *sb, unsigned int do_idop) +{ + int err, i, j, ndentry, e; + unsigned int sigen; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries, *d; + struct au_sbinfo *sbinfo; + struct dentry *root = sb->s_root; + const unsigned int dir_flags = au_hi_flags(d_inode(root), /*isdir*/1); + + if (do_idop) + au_refresh_dop(root, /*force_reval*/0); + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_dcsub_pages(&dpages, root, NULL, NULL); + if (unlikely(err)) + goto out_dpages; + + sigen = au_sigen(sb); + sbinfo = au_sbi(sb); + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) { + d = dentries[j]; + e = au_do_refresh_d(d, sigen, sbinfo, dir_flags, + do_idop); + if (unlikely(e && !err)) + err = e; + /* go on even err */ + } + } + +out_dpages: + au_dpages_free(&dpages); +out: + return err; +} + +static int au_refresh_i(struct super_block *sb, unsigned int do_idop) +{ + int err, e; + unsigned int sigen; + unsigned long long max, ull; + struct inode *inode, **array; + + array = au_iarray_alloc(sb, &max); + err = PTR_ERR(array); + if (IS_ERR(array)) + goto out; + + err = 0; + sigen = au_sigen(sb); + for (ull = 0; ull < max; ull++) { + inode = array[ull]; + if (unlikely(!inode)) + break; + + e = 0; + ii_write_lock_child(inode); + if (au_iigen(inode, NULL) != sigen) { + e = au_refresh_hinode_self(inode); + if (unlikely(e)) { + au_refresh_iop(inode, /*force_getattr*/1); + pr_err("error %d, i%lu\n", e, inode->i_ino); + if (!err) + err = e; + /* go on even if err */ + } + } + if (!e && do_idop) + au_refresh_iop(inode, /*force_getattr*/0); + ii_write_unlock(inode); + } + + au_iarray_free(array, max); + +out: + return err; +} + +static void au_remount_refresh(struct super_block *sb, unsigned int do_idop) +{ + int err, e; + unsigned int udba; + aufs_bindex_t bindex, bbot; + struct dentry *root; + struct inode *inode; + struct au_branch *br; + struct au_sbinfo *sbi; + + au_sigen_inc(sb); + sbi = au_sbi(sb); + au_fclr_si(sbi, FAILED_REFRESH_DIR); + + root = sb->s_root; + DiMustNoWaiters(root); + inode = d_inode(root); + IiMustNoWaiters(inode); + + udba = au_opt_udba(sb); + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + err = au_hnotify_reset_br(udba, br, br->br_perm); + if (unlikely(err)) + AuIOErr("hnotify failed on br %d, %d, ignored\n", + bindex, err); + /* go on even if err */ + } + au_hn_reset(inode, au_hi_flags(inode, /*isdir*/1)); + + if (do_idop) { + if (au_ftest_si(sbi, NO_DREVAL)) { + AuDebugOn(sb->s_d_op == &aufs_dop_noreval); + sb->s_d_op = &aufs_dop_noreval; + AuDebugOn(sbi->si_iop_array == aufs_iop_nogetattr); + sbi->si_iop_array = aufs_iop_nogetattr; + } else { + AuDebugOn(sb->s_d_op == &aufs_dop); + sb->s_d_op = &aufs_dop; + AuDebugOn(sbi->si_iop_array == aufs_iop); + sbi->si_iop_array = aufs_iop; + } + pr_info("reset to %pf and %pf\n", + sb->s_d_op, sbi->si_iop_array); + } + + di_write_unlock(root); + err = au_refresh_d(sb, do_idop); + e = au_refresh_i(sb, do_idop); + if (unlikely(e && !err)) + err = e; + /* aufs_write_lock() calls ..._child() */ + di_write_lock_child(root); + + au_cpup_attr_all(inode, /*force*/1); + + if (unlikely(err)) + AuIOErr("refresh failed, ignored, %d\n", err); +} + +/* stop extra interpretation of errno in mount(8), and strange error messages */ +static int cvt_err(int err) +{ + AuTraceErr(err); + + switch (err) { + case -ENOENT: + case -ENOTDIR: + case -EEXIST: + case -EIO: + err = -EINVAL; + } + return err; +} + +static int aufs_remount_fs(struct super_block *sb, int *flags, char *data) +{ + int err, do_dx; + unsigned int mntflags; + struct au_opts opts = { + .opt = NULL + }; + struct dentry *root; + struct inode *inode; + struct au_sbinfo *sbinfo; + + err = 0; + root = sb->s_root; + if (!data || !*data) { + err = si_write_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (!err) { + di_write_lock_child(root); + err = au_opts_verify(sb, *flags, /*pending*/0); + aufs_write_unlock(root); + } + goto out; + } + + err = -ENOMEM; + opts.opt = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!opts.opt)) + goto out; + opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); + opts.flags = AuOpts_REMOUNT; + opts.sb_flags = *flags; + + /* parse it before aufs lock */ + err = au_opts_parse(sb, data, &opts); + if (unlikely(err)) + goto out_opts; + + sbinfo = au_sbi(sb); + inode = d_inode(root); + inode_lock(inode); + err = si_write_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out_mtx; + di_write_lock_child(root); + + /* au_opts_remount() may return an error */ + err = au_opts_remount(sb, &opts); + au_opts_free(&opts); + + if (au_ftest_opts(opts.flags, REFRESH)) + au_remount_refresh(sb, au_ftest_opts(opts.flags, REFRESH_IDOP)); + + if (au_ftest_opts(opts.flags, REFRESH_DYAOP)) { + mntflags = au_mntflags(sb); + do_dx = !!au_opt_test(mntflags, DIO); + au_dy_arefresh(do_dx); + } + + au_fhsm_wrote_all(sb, /*force*/1); /* ?? */ + aufs_write_unlock(root); + +out_mtx: + inode_unlock(inode); +out_opts: + free_page((unsigned long)opts.opt); +out: + err = cvt_err(err); + AuTraceErr(err); + return err; +} + +static const struct super_operations aufs_sop = { + .alloc_inode = aufs_alloc_inode, + .destroy_inode = aufs_destroy_inode, + /* always deleting, no clearing */ + .drop_inode = generic_delete_inode, + .show_options = aufs_show_options, + .statfs = aufs_statfs, + .put_super = aufs_put_super, + .sync_fs = aufs_sync_fs, + .remount_fs = aufs_remount_fs, +#ifdef CONFIG_AUFS_BDEV_LOOP + .real_loop = aufs_real_loop +#endif +}; + +/* ---------------------------------------------------------------------- */ + +static int alloc_root(struct super_block *sb) +{ + int err; + struct inode *inode; + struct dentry *root; + + err = -ENOMEM; + inode = au_iget_locked(sb, AUFS_ROOT_INO); + err = PTR_ERR(inode); + if (IS_ERR(inode)) + goto out; + + inode->i_op = aufs_iop + AuIop_DIR; /* with getattr by default */ + inode->i_fop = &aufs_dir_fop; + inode->i_mode = S_IFDIR; + set_nlink(inode, 2); + unlock_new_inode(inode); + + root = d_make_root(inode); + if (unlikely(!root)) + goto out; + err = PTR_ERR(root); + if (IS_ERR(root)) + goto out; + + err = au_di_init(root); + if (!err) { + sb->s_root = root; + return 0; /* success */ + } + dput(root); + +out: + return err; +} + +static int aufs_fill_super(struct super_block *sb, void *raw_data, + int silent __maybe_unused) +{ + int err; + struct au_opts opts = { + .opt = NULL + }; + struct au_sbinfo *sbinfo; + struct dentry *root; + struct inode *inode; + char *arg = raw_data; + + if (unlikely(!arg || !*arg)) { + err = -EINVAL; + pr_err("no arg\n"); + goto out; + } + + err = -ENOMEM; + opts.opt = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!opts.opt)) + goto out; + opts.max_opt = PAGE_SIZE / sizeof(*opts.opt); + opts.sb_flags = sb->s_flags; + + err = au_si_alloc(sb); + if (unlikely(err)) + goto out_opts; + sbinfo = au_sbi(sb); + + /* all timestamps always follow the ones on the branch */ + sb->s_flags |= SB_NOATIME | SB_NODIRATIME; + sb->s_op = &aufs_sop; + sb->s_d_op = &aufs_dop; + sb->s_magic = AUFS_SUPER_MAGIC; + sb->s_maxbytes = 0; + sb->s_stack_depth = 1; + au_export_init(sb); + au_xattr_init(sb); + + err = alloc_root(sb); + if (unlikely(err)) { + si_write_unlock(sb); + goto out_info; + } + root = sb->s_root; + inode = d_inode(root); + + /* + * actually we can parse options regardless aufs lock here. + * but at remount time, parsing must be done before aufs lock. + * so we follow the same rule. + */ + ii_write_lock_parent(inode); + aufs_write_unlock(root); + err = au_opts_parse(sb, arg, &opts); + if (unlikely(err)) + goto out_root; + + /* lock vfs_inode first, then aufs. */ + inode_lock(inode); + aufs_write_lock(root); + err = au_opts_mount(sb, &opts); + au_opts_free(&opts); + if (!err && au_ftest_si(sbinfo, NO_DREVAL)) { + sb->s_d_op = &aufs_dop_noreval; + pr_info("%pf\n", sb->s_d_op); + au_refresh_dop(root, /*force_reval*/0); + sbinfo->si_iop_array = aufs_iop_nogetattr; + au_refresh_iop(inode, /*force_getattr*/0); + } + aufs_write_unlock(root); + inode_unlock(inode); + if (!err) + goto out_opts; /* success */ + +out_root: + dput(root); + sb->s_root = NULL; +out_info: + dbgaufs_si_fin(sbinfo); + kobject_put(&sbinfo->si_kobj); + sb->s_fs_info = NULL; +out_opts: + free_page((unsigned long)opts.opt); +out: + AuTraceErr(err); + err = cvt_err(err); + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct dentry *aufs_mount(struct file_system_type *fs_type, int flags, + const char *dev_name __maybe_unused, + void *raw_data) +{ + struct dentry *root; + struct super_block *sb; + + /* all timestamps always follow the ones on the branch */ + /* mnt->mnt_flags |= MNT_NOATIME | MNT_NODIRATIME; */ + root = mount_nodev(fs_type, flags, raw_data, aufs_fill_super); + if (IS_ERR(root)) + goto out; + + sb = root->d_sb; + si_write_lock(sb, !AuLock_FLUSH); + sysaufs_brs_add(sb, 0); + si_write_unlock(sb); + au_sbilist_add(sb); + +out: + return root; +} + +static void aufs_kill_sb(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + sbinfo = au_sbi(sb); + if (sbinfo) { + au_sbilist_del(sb); + aufs_write_lock(sb->s_root); + au_fhsm_fin(sb); + if (sbinfo->si_wbr_create_ops->fin) + sbinfo->si_wbr_create_ops->fin(sb); + if (au_opt_test(sbinfo->si_mntflags, UDBA_HNOTIFY)) { + au_opt_set_udba(sbinfo->si_mntflags, UDBA_NONE); + au_remount_refresh(sb, /*do_idop*/0); + } + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_put(sb, /*verbose*/1); + au_xino_clr(sb); + au_dr_opt_flush(sb); + sbinfo->si_sb = NULL; + aufs_write_unlock(sb->s_root); + au_nwt_flush(&sbinfo->si_nowait); + } + kill_anon_super(sb); +} + +struct file_system_type aufs_fs_type = { + .name = AUFS_FSTYPE, + /* a race between rename and others */ + .fs_flags = FS_RENAME_DOES_D_MOVE, + .mount = aufs_mount, + .kill_sb = aufs_kill_sb, + /* no need to __module_get() and module_put(). */ + .owner = THIS_MODULE, +}; --- linux-aws-4.15.0.orig/fs/aufs/super.h +++ linux-aws-4.15.0/fs/aufs/super.h @@ -0,0 +1,626 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * super_block operations + */ + +#ifndef __AUFS_SUPER_H__ +#define __AUFS_SUPER_H__ + +#ifdef __KERNEL__ + +#include +#include +#include "hbl.h" +#include "rwsem.h" +#include "wkq.h" + +/* policies to select one among multiple writable branches */ +struct au_wbr_copyup_operations { + int (*copyup)(struct dentry *dentry); +}; + +#define AuWbr_DIR 1 /* target is a dir */ +#define AuWbr_PARENT (1 << 1) /* always require a parent */ + +#define au_ftest_wbr(flags, name) ((flags) & AuWbr_##name) +#define au_fset_wbr(flags, name) { (flags) |= AuWbr_##name; } +#define au_fclr_wbr(flags, name) { (flags) &= ~AuWbr_##name; } + +struct au_wbr_create_operations { + int (*create)(struct dentry *dentry, unsigned int flags); + int (*init)(struct super_block *sb); + int (*fin)(struct super_block *sb); +}; + +struct au_wbr_mfs { + struct mutex mfs_lock; /* protect this structure */ + unsigned long mfs_jiffy; + unsigned long mfs_expire; + aufs_bindex_t mfs_bindex; + + unsigned long long mfsrr_bytes; + unsigned long long mfsrr_watermark; +}; + +#define AuPlink_NHASH 100 +static inline int au_plink_hash(ino_t ino) +{ + return ino % AuPlink_NHASH; +} + +/* File-based Hierarchical Storage Management */ +struct au_fhsm { +#ifdef CONFIG_AUFS_FHSM + /* allow only one process who can receive the notification */ + spinlock_t fhsm_spin; + pid_t fhsm_pid; + wait_queue_head_t fhsm_wqh; + atomic_t fhsm_readable; + + /* these are protected by si_rwsem */ + unsigned long fhsm_expire; + aufs_bindex_t fhsm_bottom; +#endif +}; + +struct au_branch; +struct au_sbinfo { + /* nowait tasks in the system-wide workqueue */ + struct au_nowait_tasks si_nowait; + + /* + * tried sb->s_umount, but failed due to the dependecy between i_mutex. + * rwsem for au_sbinfo is necessary. + */ + struct au_rwsem si_rwsem; + + /* + * dirty approach to protect sb->sb_inodes and ->s_files (gone) from + * remount. + */ + struct percpu_counter si_ninodes, si_nfiles; + + /* branch management */ + unsigned int si_generation; + + /* see AuSi_ flags */ + unsigned char au_si_status; + + aufs_bindex_t si_bbot; + + /* dirty trick to keep br_id plus */ + unsigned int si_last_br_id : + sizeof(aufs_bindex_t) * BITS_PER_BYTE - 1; + struct au_branch **si_branch; + + /* policy to select a writable branch */ + unsigned char si_wbr_copyup; + unsigned char si_wbr_create; + struct au_wbr_copyup_operations *si_wbr_copyup_ops; + struct au_wbr_create_operations *si_wbr_create_ops; + + /* round robin */ + atomic_t si_wbr_rr_next; + + /* most free space */ + struct au_wbr_mfs si_wbr_mfs; + + /* File-based Hierarchical Storage Management */ + struct au_fhsm si_fhsm; + + /* mount flags */ + /* include/asm-ia64/siginfo.h defines a macro named si_flags */ + unsigned int si_mntflags; + + /* external inode number (bitmap and translation table) */ + vfs_readf_t si_xread; + vfs_writef_t si_xwrite; + struct file *si_xib; + struct mutex si_xib_mtx; /* protect xib members */ + unsigned long *si_xib_buf; + unsigned long si_xib_last_pindex; + int si_xib_next_bit; + aufs_bindex_t si_xino_brid; + unsigned long si_xino_jiffy; + unsigned long si_xino_expire; + /* reserved for future use */ + /* unsigned long long si_xib_limit; */ /* Max xib file size */ + +#ifdef CONFIG_AUFS_EXPORT + /* i_generation */ + struct file *si_xigen; + atomic_t si_xigen_next; +#endif + + /* dirty trick to suppoer atomic_open */ + struct hlist_bl_head si_aopen; + + /* vdir parameters */ + unsigned long si_rdcache; /* max cache time in jiffies */ + unsigned int si_rdblk; /* deblk size */ + unsigned int si_rdhash; /* hash size */ + + /* + * If the number of whiteouts are larger than si_dirwh, leave all of + * them after au_whtmp_ren to reduce the cost of rmdir(2). + * future fsck.aufs or kernel thread will remove them later. + * Otherwise, remove all whiteouts and the dir in rmdir(2). + */ + unsigned int si_dirwh; + + /* pseudo_link list */ + struct hlist_bl_head si_plink[AuPlink_NHASH]; + wait_queue_head_t si_plink_wq; + spinlock_t si_plink_maint_lock; + pid_t si_plink_maint_pid; + + /* file list */ + struct hlist_bl_head si_files; + + /* with/without getattr, brother of sb->s_d_op */ + struct inode_operations *si_iop_array; + + /* + * sysfs and lifetime management. + * this is not a small structure and it may be a waste of memory in case + * of sysfs is disabled, particulary when many aufs-es are mounted. + * but using sysfs is majority. + */ + struct kobject si_kobj; +#ifdef CONFIG_DEBUG_FS + struct dentry *si_dbgaufs; + struct dentry *si_dbgaufs_plink; + struct dentry *si_dbgaufs_xib; +#ifdef CONFIG_AUFS_EXPORT + struct dentry *si_dbgaufs_xigen; +#endif +#endif + +#ifdef CONFIG_AUFS_SBILIST + struct hlist_bl_node si_list; +#endif + + /* dirty, necessary for unmounting, sysfs and sysrq */ + struct super_block *si_sb; +}; + +/* sbinfo status flags */ +/* + * set true when refresh_dirs() failed at remount time. + * then try refreshing dirs at access time again. + * if it is false, refreshing dirs at access time is unnecesary + */ +#define AuSi_FAILED_REFRESH_DIR 1 +#define AuSi_FHSM (1 << 1) /* fhsm is active now */ +#define AuSi_NO_DREVAL (1 << 2) /* disable all d_revalidate */ + +#ifndef CONFIG_AUFS_FHSM +#undef AuSi_FHSM +#define AuSi_FHSM 0 +#endif + +static inline unsigned char au_do_ftest_si(struct au_sbinfo *sbi, + unsigned int flag) +{ + AuRwMustAnyLock(&sbi->si_rwsem); + return sbi->au_si_status & flag; +} +#define au_ftest_si(sbinfo, name) au_do_ftest_si(sbinfo, AuSi_##name) +#define au_fset_si(sbinfo, name) do { \ + AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ + (sbinfo)->au_si_status |= AuSi_##name; \ +} while (0) +#define au_fclr_si(sbinfo, name) do { \ + AuRwMustWriteLock(&(sbinfo)->si_rwsem); \ + (sbinfo)->au_si_status &= ~AuSi_##name; \ +} while (0) + +/* ---------------------------------------------------------------------- */ + +/* policy to select one among writable branches */ +#define AuWbrCopyup(sbinfo, ...) \ + ((sbinfo)->si_wbr_copyup_ops->copyup(__VA_ARGS__)) +#define AuWbrCreate(sbinfo, ...) \ + ((sbinfo)->si_wbr_create_ops->create(__VA_ARGS__)) + +/* flags for si_read_lock()/aufs_read_lock()/di_read_lock() */ +#define AuLock_DW 1 /* write-lock dentry */ +#define AuLock_IR (1 << 1) /* read-lock inode */ +#define AuLock_IW (1 << 2) /* write-lock inode */ +#define AuLock_FLUSH (1 << 3) /* wait for 'nowait' tasks */ +#define AuLock_DIRS (1 << 4) /* target is a pair of dirs */ + /* except RENAME_EXCHANGE */ +#define AuLock_NOPLM (1 << 5) /* return err in plm mode */ +#define AuLock_NOPLMW (1 << 6) /* wait for plm mode ends */ +#define AuLock_GEN (1 << 7) /* test digen/iigen */ +#define au_ftest_lock(flags, name) ((flags) & AuLock_##name) +#define au_fset_lock(flags, name) \ + do { (flags) |= AuLock_##name; } while (0) +#define au_fclr_lock(flags, name) \ + do { (flags) &= ~AuLock_##name; } while (0) + +/* ---------------------------------------------------------------------- */ + +/* super.c */ +extern struct file_system_type aufs_fs_type; +struct inode *au_iget_locked(struct super_block *sb, ino_t ino); +typedef unsigned long long (*au_arraycb_t)(struct super_block *sb, void *array, + unsigned long long max, void *arg); +void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, + struct super_block *sb, void *arg); +struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max); +void au_iarray_free(struct inode **a, unsigned long long max); + +/* sbinfo.c */ +void au_si_free(struct kobject *kobj); +int au_si_alloc(struct super_block *sb); +int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr, int may_shrink); + +unsigned int au_sigen_inc(struct super_block *sb); +aufs_bindex_t au_new_br_id(struct super_block *sb); + +int si_read_lock(struct super_block *sb, int flags); +int si_write_lock(struct super_block *sb, int flags); +int aufs_read_lock(struct dentry *dentry, int flags); +void aufs_read_unlock(struct dentry *dentry, int flags); +void aufs_write_lock(struct dentry *dentry); +void aufs_write_unlock(struct dentry *dentry); +int aufs_read_and_write_lock2(struct dentry *d1, struct dentry *d2, int flags); +void aufs_read_and_write_unlock2(struct dentry *d1, struct dentry *d2); + +/* wbr_policy.c */ +extern struct au_wbr_copyup_operations au_wbr_copyup_ops[]; +extern struct au_wbr_create_operations au_wbr_create_ops[]; +int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst); +int au_wbr_nonopq(struct dentry *dentry, aufs_bindex_t bindex); +int au_wbr_do_copyup_bu(struct dentry *dentry, aufs_bindex_t btop); + +/* mvdown.c */ +int au_mvdown(struct dentry *dentry, struct aufs_mvdown __user *arg); + +#ifdef CONFIG_AUFS_FHSM +/* fhsm.c */ + +static inline pid_t au_fhsm_pid(struct au_fhsm *fhsm) +{ + pid_t pid; + + spin_lock(&fhsm->fhsm_spin); + pid = fhsm->fhsm_pid; + spin_unlock(&fhsm->fhsm_spin); + + return pid; +} + +void au_fhsm_wrote(struct super_block *sb, aufs_bindex_t bindex, int force); +void au_fhsm_wrote_all(struct super_block *sb, int force); +int au_fhsm_fd(struct super_block *sb, int oflags); +int au_fhsm_br_alloc(struct au_branch *br); +void au_fhsm_set_bottom(struct super_block *sb, aufs_bindex_t bindex); +void au_fhsm_fin(struct super_block *sb); +void au_fhsm_init(struct au_sbinfo *sbinfo); +void au_fhsm_set(struct au_sbinfo *sbinfo, unsigned int sec); +void au_fhsm_show(struct seq_file *seq, struct au_sbinfo *sbinfo); +#else +AuStubVoid(au_fhsm_wrote, struct super_block *sb, aufs_bindex_t bindex, + int force) +AuStubVoid(au_fhsm_wrote_all, struct super_block *sb, int force) +AuStub(int, au_fhsm_fd, return -EOPNOTSUPP, struct super_block *sb, int oflags) +AuStub(pid_t, au_fhsm_pid, return 0, struct au_fhsm *fhsm) +AuStubInt0(au_fhsm_br_alloc, struct au_branch *br) +AuStubVoid(au_fhsm_set_bottom, struct super_block *sb, aufs_bindex_t bindex) +AuStubVoid(au_fhsm_fin, struct super_block *sb) +AuStubVoid(au_fhsm_init, struct au_sbinfo *sbinfo) +AuStubVoid(au_fhsm_set, struct au_sbinfo *sbinfo, unsigned int sec) +AuStubVoid(au_fhsm_show, struct seq_file *seq, struct au_sbinfo *sbinfo) +#endif + +/* ---------------------------------------------------------------------- */ + +static inline struct au_sbinfo *au_sbi(struct super_block *sb) +{ + return sb->s_fs_info; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_EXPORT +int au_test_nfsd(void); +void au_export_init(struct super_block *sb); +void au_xigen_inc(struct inode *inode); +int au_xigen_new(struct inode *inode); +int au_xigen_set(struct super_block *sb, struct file *base); +void au_xigen_clr(struct super_block *sb); + +static inline int au_busy_or_stale(void) +{ + if (!au_test_nfsd()) + return -EBUSY; + return -ESTALE; +} +#else +AuStubInt0(au_test_nfsd, void) +AuStubVoid(au_export_init, struct super_block *sb) +AuStubVoid(au_xigen_inc, struct inode *inode) +AuStubInt0(au_xigen_new, struct inode *inode) +AuStubInt0(au_xigen_set, struct super_block *sb, struct file *base) +AuStubVoid(au_xigen_clr, struct super_block *sb) +AuStub(int, au_busy_or_stale, return -EBUSY, void) +#endif /* CONFIG_AUFS_EXPORT */ + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_SBILIST +/* module.c */ +extern struct hlist_bl_head au_sbilist; + +static inline void au_sbilist_init(void) +{ + INIT_HLIST_BL_HEAD(&au_sbilist); +} + +static inline void au_sbilist_add(struct super_block *sb) +{ + au_hbl_add(&au_sbi(sb)->si_list, &au_sbilist); +} + +static inline void au_sbilist_del(struct super_block *sb) +{ + au_hbl_del(&au_sbi(sb)->si_list, &au_sbilist); +} + +#ifdef CONFIG_AUFS_MAGIC_SYSRQ +static inline void au_sbilist_lock(void) +{ + hlist_bl_lock(&au_sbilist); +} + +static inline void au_sbilist_unlock(void) +{ + hlist_bl_unlock(&au_sbilist); +} +#define AuGFP_SBILIST GFP_ATOMIC +#else +AuStubVoid(au_sbilist_lock, void) +AuStubVoid(au_sbilist_unlock, void) +#define AuGFP_SBILIST GFP_NOFS +#endif /* CONFIG_AUFS_MAGIC_SYSRQ */ +#else +AuStubVoid(au_sbilist_init, void) +AuStubVoid(au_sbilist_add, struct super_block *sb) +AuStubVoid(au_sbilist_del, struct super_block *sb) +AuStubVoid(au_sbilist_lock, void) +AuStubVoid(au_sbilist_unlock, void) +#define AuGFP_SBILIST GFP_NOFS +#endif + +/* ---------------------------------------------------------------------- */ + +static inline void dbgaufs_si_null(struct au_sbinfo *sbinfo) +{ + /* + * This function is a dynamic '__init' function actually, + * so the tiny check for si_rwsem is unnecessary. + */ + /* AuRwMustWriteLock(&sbinfo->si_rwsem); */ +#ifdef CONFIG_DEBUG_FS + sbinfo->si_dbgaufs = NULL; + sbinfo->si_dbgaufs_plink = NULL; + sbinfo->si_dbgaufs_xib = NULL; +#ifdef CONFIG_AUFS_EXPORT + sbinfo->si_dbgaufs_xigen = NULL; +#endif +#endif +} + +/* ---------------------------------------------------------------------- */ + +/* current->atomic_flags */ +/* this value should never corrupt the ones defined in linux/sched.h */ +#define PFA_AUFS 7 + +TASK_PFA_TEST(AUFS, test_aufs) /* task_test_aufs */ +TASK_PFA_SET(AUFS, aufs) /* task_set_aufs */ +TASK_PFA_CLEAR(AUFS, aufs) /* task_clear_aufs */ + +static inline int si_pid_test(struct super_block *sb) +{ + return !!task_test_aufs(current); +} + +static inline void si_pid_clr(struct super_block *sb) +{ + AuDebugOn(!task_test_aufs(current)); + task_clear_aufs(current); +} + +static inline void si_pid_set(struct super_block *sb) +{ + AuDebugOn(task_test_aufs(current)); + task_set_aufs(current); +} + +/* ---------------------------------------------------------------------- */ + +/* lock superblock. mainly for entry point functions */ +#define __si_read_lock(sb) au_rw_read_lock(&au_sbi(sb)->si_rwsem) +#define __si_write_lock(sb) au_rw_write_lock(&au_sbi(sb)->si_rwsem) +#define __si_read_trylock(sb) au_rw_read_trylock(&au_sbi(sb)->si_rwsem) +#define __si_write_trylock(sb) au_rw_write_trylock(&au_sbi(sb)->si_rwsem) +/* +#define __si_read_trylock_nested(sb) \ + au_rw_read_trylock_nested(&au_sbi(sb)->si_rwsem) +#define __si_write_trylock_nested(sb) \ + au_rw_write_trylock_nested(&au_sbi(sb)->si_rwsem) +*/ + +#define __si_read_unlock(sb) au_rw_read_unlock(&au_sbi(sb)->si_rwsem) +#define __si_write_unlock(sb) au_rw_write_unlock(&au_sbi(sb)->si_rwsem) +#define __si_downgrade_lock(sb) au_rw_dgrade_lock(&au_sbi(sb)->si_rwsem) + +#define SiMustNoWaiters(sb) AuRwMustNoWaiters(&au_sbi(sb)->si_rwsem) +#define SiMustAnyLock(sb) AuRwMustAnyLock(&au_sbi(sb)->si_rwsem) +#define SiMustWriteLock(sb) AuRwMustWriteLock(&au_sbi(sb)->si_rwsem) + +static inline void si_noflush_read_lock(struct super_block *sb) +{ + __si_read_lock(sb); + si_pid_set(sb); +} + +static inline int si_noflush_read_trylock(struct super_block *sb) +{ + int locked; + + locked = __si_read_trylock(sb); + if (locked) + si_pid_set(sb); + return locked; +} + +static inline void si_noflush_write_lock(struct super_block *sb) +{ + __si_write_lock(sb); + si_pid_set(sb); +} + +static inline int si_noflush_write_trylock(struct super_block *sb) +{ + int locked; + + locked = __si_write_trylock(sb); + if (locked) + si_pid_set(sb); + return locked; +} + +#if 0 /* reserved */ +static inline int si_read_trylock(struct super_block *sb, int flags) +{ + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + return si_noflush_read_trylock(sb); +} +#endif + +static inline void si_read_unlock(struct super_block *sb) +{ + si_pid_clr(sb); + __si_read_unlock(sb); +} + +#if 0 /* reserved */ +static inline int si_write_trylock(struct super_block *sb, int flags) +{ + if (au_ftest_lock(flags, FLUSH)) + au_nwt_flush(&au_sbi(sb)->si_nowait); + return si_noflush_write_trylock(sb); +} +#endif + +static inline void si_write_unlock(struct super_block *sb) +{ + si_pid_clr(sb); + __si_write_unlock(sb); +} + +#if 0 /* reserved */ +static inline void si_downgrade_lock(struct super_block *sb) +{ + __si_downgrade_lock(sb); +} +#endif + +/* ---------------------------------------------------------------------- */ + +static inline aufs_bindex_t au_sbbot(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_bbot; +} + +static inline unsigned int au_mntflags(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_mntflags; +} + +static inline unsigned int au_sigen(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_generation; +} + +static inline unsigned long long au_ninodes(struct super_block *sb) +{ + s64 n = percpu_counter_sum(&au_sbi(sb)->si_ninodes); + + BUG_ON(n < 0); + return n; +} + +static inline void au_ninodes_inc(struct super_block *sb) +{ + percpu_counter_inc(&au_sbi(sb)->si_ninodes); +} + +static inline void au_ninodes_dec(struct super_block *sb) +{ + percpu_counter_dec(&au_sbi(sb)->si_ninodes); +} + +static inline unsigned long long au_nfiles(struct super_block *sb) +{ + s64 n = percpu_counter_sum(&au_sbi(sb)->si_nfiles); + + BUG_ON(n < 0); + return n; +} + +static inline void au_nfiles_inc(struct super_block *sb) +{ + percpu_counter_inc(&au_sbi(sb)->si_nfiles); +} + +static inline void au_nfiles_dec(struct super_block *sb) +{ + percpu_counter_dec(&au_sbi(sb)->si_nfiles); +} + +static inline struct au_branch *au_sbr(struct super_block *sb, + aufs_bindex_t bindex) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_branch[0 + bindex]; +} + +static inline void au_xino_brid_set(struct super_block *sb, aufs_bindex_t brid) +{ + SiMustWriteLock(sb); + au_sbi(sb)->si_xino_brid = brid; +} + +static inline aufs_bindex_t au_xino_brid(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_xino_brid; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SUPER_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/sysaufs.c +++ linux-aws-4.15.0/fs/aufs/sysaufs.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sysfs interface and lifetime management + * they are necessary regardless sysfs is disabled. + */ + +#include +#include "aufs.h" + +unsigned long sysaufs_si_mask; +struct kset *sysaufs_kset; + +#define AuSiAttr(_name) { \ + .attr = { .name = __stringify(_name), .mode = 0444 }, \ + .show = sysaufs_si_##_name, \ +} + +static struct sysaufs_si_attr sysaufs_si_attr_xi_path = AuSiAttr(xi_path); +struct attribute *sysaufs_si_attrs[] = { + &sysaufs_si_attr_xi_path.attr, + NULL, +}; + +static const struct sysfs_ops au_sbi_ops = { + .show = sysaufs_si_show +}; + +static struct kobj_type au_sbi_ktype = { + .release = au_si_free, + .sysfs_ops = &au_sbi_ops, + .default_attrs = sysaufs_si_attrs +}; + +/* ---------------------------------------------------------------------- */ + +int sysaufs_si_init(struct au_sbinfo *sbinfo) +{ + int err; + + sbinfo->si_kobj.kset = sysaufs_kset; + /* cf. sysaufs_name() */ + err = kobject_init_and_add + (&sbinfo->si_kobj, &au_sbi_ktype, /*&sysaufs_kset->kobj*/NULL, + SysaufsSiNamePrefix "%lx", sysaufs_si_id(sbinfo)); + + dbgaufs_si_null(sbinfo); + if (!err) { + err = dbgaufs_si_init(sbinfo); + if (unlikely(err)) + kobject_put(&sbinfo->si_kobj); + } + return err; +} + +void sysaufs_fin(void) +{ + dbgaufs_fin(); + sysfs_remove_group(&sysaufs_kset->kobj, sysaufs_attr_group); + kset_unregister(sysaufs_kset); +} + +int __init sysaufs_init(void) +{ + int err; + + do { + get_random_bytes(&sysaufs_si_mask, sizeof(sysaufs_si_mask)); + } while (!sysaufs_si_mask); + + err = -EINVAL; + sysaufs_kset = kset_create_and_add(AUFS_NAME, NULL, fs_kobj); + if (unlikely(!sysaufs_kset)) + goto out; + err = PTR_ERR(sysaufs_kset); + if (IS_ERR(sysaufs_kset)) + goto out; + err = sysfs_create_group(&sysaufs_kset->kobj, sysaufs_attr_group); + if (unlikely(err)) { + kset_unregister(sysaufs_kset); + goto out; + } + + err = dbgaufs_init(); + if (unlikely(err)) + sysaufs_fin(); +out: + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/sysaufs.h +++ linux-aws-4.15.0/fs/aufs/sysaufs.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sysfs interface and mount lifetime management + */ + +#ifndef __SYSAUFS_H__ +#define __SYSAUFS_H__ + +#ifdef __KERNEL__ + +#include +#include "module.h" + +struct super_block; +struct au_sbinfo; + +struct sysaufs_si_attr { + struct attribute attr; + int (*show)(struct seq_file *seq, struct super_block *sb); +}; + +/* ---------------------------------------------------------------------- */ + +/* sysaufs.c */ +extern unsigned long sysaufs_si_mask; +extern struct kset *sysaufs_kset; +extern struct attribute *sysaufs_si_attrs[]; +int sysaufs_si_init(struct au_sbinfo *sbinfo); +int __init sysaufs_init(void); +void sysaufs_fin(void); + +/* ---------------------------------------------------------------------- */ + +/* some people doesn't like to show a pointer in kernel */ +static inline unsigned long sysaufs_si_id(struct au_sbinfo *sbinfo) +{ + return sysaufs_si_mask ^ (unsigned long)sbinfo; +} + +#define SysaufsSiNamePrefix "si_" +#define SysaufsSiNameLen (sizeof(SysaufsSiNamePrefix) + 16) +static inline void sysaufs_name(struct au_sbinfo *sbinfo, char *name) +{ + snprintf(name, SysaufsSiNameLen, SysaufsSiNamePrefix "%lx", + sysaufs_si_id(sbinfo)); +} + +struct au_branch; +#ifdef CONFIG_SYSFS +/* sysfs.c */ +extern struct attribute_group *sysaufs_attr_group; + +int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb); +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf); +long au_brinfo_ioctl(struct file *file, unsigned long arg); +#ifdef CONFIG_COMPAT +long au_brinfo_compat_ioctl(struct file *file, unsigned long arg); +#endif + +void sysaufs_br_init(struct au_branch *br); +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex); +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex); + +#define sysaufs_brs_init() do {} while (0) + +#else +#define sysaufs_attr_group NULL + +AuStubInt0(sysaufs_si_xi_path, struct seq_file *seq, struct super_block *sb) +AuStub(ssize_t, sysaufs_si_show, return 0, struct kobject *kobj, + struct attribute *attr, char *buf) +AuStubVoid(sysaufs_br_init, struct au_branch *br) +AuStubVoid(sysaufs_brs_add, struct super_block *sb, aufs_bindex_t bindex) +AuStubVoid(sysaufs_brs_del, struct super_block *sb, aufs_bindex_t bindex) + +static inline void sysaufs_brs_init(void) +{ + sysaufs_brs = 0; +} + +#endif /* CONFIG_SYSFS */ + +#endif /* __KERNEL__ */ +#endif /* __SYSAUFS_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/sysfs.c +++ linux-aws-4.15.0/fs/aufs/sysfs.c @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sysfs interface + */ + +#include +#include +#include "aufs.h" + +#ifdef CONFIG_AUFS_FS_MODULE +/* this entry violates the "one line per file" policy of sysfs */ +static ssize_t config_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + ssize_t err; + static char *conf = +/* this file is generated at compiling */ +#include "conf.str" + ; + + err = snprintf(buf, PAGE_SIZE, conf); + if (unlikely(err >= PAGE_SIZE)) + err = -EFBIG; + return err; +} + +static struct kobj_attribute au_config_attr = __ATTR_RO(config); +#endif + +static struct attribute *au_attr[] = { +#ifdef CONFIG_AUFS_FS_MODULE + &au_config_attr.attr, +#endif + NULL, /* need to NULL terminate the list of attributes */ +}; + +static struct attribute_group sysaufs_attr_group_body = { + .attrs = au_attr +}; + +struct attribute_group *sysaufs_attr_group = &sysaufs_attr_group_body; + +/* ---------------------------------------------------------------------- */ + +int sysaufs_si_xi_path(struct seq_file *seq, struct super_block *sb) +{ + int err; + + SiMustAnyLock(sb); + + err = 0; + if (au_opt_test(au_mntflags(sb), XINO)) { + err = au_xino_path(seq, au_sbi(sb)->si_xib); + seq_putc(seq, '\n'); + } + return err; +} + +/* + * the lifetime of branch is independent from the entry under sysfs. + * sysfs handles the lifetime of the entry, and never call ->show() after it is + * unlinked. + */ +static int sysaufs_si_br(struct seq_file *seq, struct super_block *sb, + aufs_bindex_t bindex, int idx) +{ + int err; + struct path path; + struct dentry *root; + struct au_branch *br; + au_br_perm_str_t perm; + + AuDbg("b%d\n", bindex); + + err = 0; + root = sb->s_root; + di_read_lock_parent(root, !AuLock_IR); + br = au_sbr(sb, bindex); + + switch (idx) { + case AuBrSysfs_BR: + path.mnt = au_br_mnt(br); + path.dentry = au_h_dptr(root, bindex); + err = au_seq_path(seq, &path); + if (!err) { + au_optstr_br_perm(&perm, br->br_perm); + seq_printf(seq, "=%s\n", perm.a); + } + break; + case AuBrSysfs_BRID: + seq_printf(seq, "%d\n", br->br_id); + break; + } + di_read_unlock(root, !AuLock_IR); + if (unlikely(err || seq_has_overflowed(seq))) + err = -E2BIG; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static struct seq_file *au_seq(char *p, ssize_t len) +{ + struct seq_file *seq; + + seq = kzalloc(sizeof(*seq), GFP_NOFS); + if (seq) { + /* mutex_init(&seq.lock); */ + seq->buf = p; + seq->size = len; + return seq; /* success */ + } + + seq = ERR_PTR(-ENOMEM); + return seq; +} + +#define SysaufsBr_PREFIX "br" +#define SysaufsBrid_PREFIX "brid" + +/* todo: file size may exceed PAGE_SIZE */ +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf) +{ + ssize_t err; + int idx; + long l; + aufs_bindex_t bbot; + struct au_sbinfo *sbinfo; + struct super_block *sb; + struct seq_file *seq; + char *name; + struct attribute **cattr; + + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + sb = sbinfo->si_sb; + + /* + * prevent a race condition between sysfs and aufs. + * for instance, sysfs_file_read() calls sysfs_get_active_two() which + * prohibits maintaining the sysfs entries. + * hew we acquire read lock after sysfs_get_active_two(). + * on the other hand, the remount process may maintain the sysfs/aufs + * entries after acquiring write lock. + * it can cause a deadlock. + * simply we gave up processing read here. + */ + err = -EBUSY; + if (unlikely(!si_noflush_read_trylock(sb))) + goto out; + + seq = au_seq(buf, PAGE_SIZE); + err = PTR_ERR(seq); + if (IS_ERR(seq)) + goto out_unlock; + + name = (void *)attr->name; + cattr = sysaufs_si_attrs; + while (*cattr) { + if (!strcmp(name, (*cattr)->name)) { + err = container_of(*cattr, struct sysaufs_si_attr, attr) + ->show(seq, sb); + goto out_seq; + } + cattr++; + } + + if (!strncmp(name, SysaufsBrid_PREFIX, + sizeof(SysaufsBrid_PREFIX) - 1)) { + idx = AuBrSysfs_BRID; + name += sizeof(SysaufsBrid_PREFIX) - 1; + } else if (!strncmp(name, SysaufsBr_PREFIX, + sizeof(SysaufsBr_PREFIX) - 1)) { + idx = AuBrSysfs_BR; + name += sizeof(SysaufsBr_PREFIX) - 1; + } else + BUG(); + + err = kstrtol(name, 10, &l); + if (!err) { + bbot = au_sbbot(sb); + if (l <= bbot) + err = sysaufs_si_br(seq, sb, (aufs_bindex_t)l, idx); + else + err = -ENOENT; + } + +out_seq: + if (!err) { + err = seq->count; + /* sysfs limit */ + if (unlikely(err == PAGE_SIZE)) + err = -EFBIG; + } + kfree(seq); +out_unlock: + si_read_unlock(sb); +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_brinfo(struct super_block *sb, union aufs_brinfo __user *arg) +{ + int err; + int16_t brid; + aufs_bindex_t bindex, bbot; + size_t sz; + char *buf; + struct seq_file *seq; + struct au_branch *br; + + si_read_lock(sb, AuLock_FLUSH); + bbot = au_sbbot(sb); + err = bbot + 1; + if (!arg) + goto out; + + err = -ENOMEM; + buf = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!buf)) + goto out; + + seq = au_seq(buf, PAGE_SIZE); + err = PTR_ERR(seq); + if (IS_ERR(seq)) + goto out_buf; + + sz = sizeof(*arg) - offsetof(union aufs_brinfo, path); + for (bindex = 0; bindex <= bbot; bindex++, arg++) { + err = !access_ok(VERIFY_WRITE, arg, sizeof(*arg)); + if (unlikely(err)) + break; + + br = au_sbr(sb, bindex); + brid = br->br_id; + BUILD_BUG_ON(sizeof(brid) != sizeof(arg->id)); + err = __put_user(brid, &arg->id); + if (unlikely(err)) + break; + + BUILD_BUG_ON(sizeof(br->br_perm) != sizeof(arg->perm)); + err = __put_user(br->br_perm, &arg->perm); + if (unlikely(err)) + break; + + err = au_seq_path(seq, &br->br_path); + if (unlikely(err)) + break; + seq_putc(seq, '\0'); + if (!seq_has_overflowed(seq)) { + err = copy_to_user(arg->path, seq->buf, seq->count); + seq->count = 0; + if (unlikely(err)) + break; + } else { + err = -E2BIG; + goto out_seq; + } + } + if (unlikely(err)) + err = -EFAULT; + +out_seq: + kfree(seq); +out_buf: + free_page((unsigned long)buf); +out: + si_read_unlock(sb); + return err; +} + +long au_brinfo_ioctl(struct file *file, unsigned long arg) +{ + return au_brinfo(file->f_path.dentry->d_sb, (void __user *)arg); +} + +#ifdef CONFIG_COMPAT +long au_brinfo_compat_ioctl(struct file *file, unsigned long arg) +{ + return au_brinfo(file->f_path.dentry->d_sb, compat_ptr(arg)); +} +#endif + +/* ---------------------------------------------------------------------- */ + +void sysaufs_br_init(struct au_branch *br) +{ + int i; + struct au_brsysfs *br_sysfs; + struct attribute *attr; + + br_sysfs = br->br_sysfs; + for (i = 0; i < ARRAY_SIZE(br->br_sysfs); i++) { + attr = &br_sysfs->attr; + sysfs_attr_init(attr); + attr->name = br_sysfs->name; + attr->mode = S_IRUGO; + br_sysfs++; + } +} + +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_branch *br; + struct kobject *kobj; + struct au_brsysfs *br_sysfs; + int i; + aufs_bindex_t bbot; + + dbgaufs_brs_del(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bbot = au_sbbot(sb); + for (; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + br_sysfs = br->br_sysfs; + for (i = 0; i < ARRAY_SIZE(br->br_sysfs); i++) { + sysfs_remove_file(kobj, &br_sysfs->attr); + br_sysfs++; + } + } +} + +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + int err, i; + aufs_bindex_t bbot; + struct kobject *kobj; + struct au_branch *br; + struct au_brsysfs *br_sysfs; + + dbgaufs_brs_add(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bbot = au_sbbot(sb); + for (; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + br_sysfs = br->br_sysfs; + snprintf(br_sysfs[AuBrSysfs_BR].name, sizeof(br_sysfs->name), + SysaufsBr_PREFIX "%d", bindex); + snprintf(br_sysfs[AuBrSysfs_BRID].name, sizeof(br_sysfs->name), + SysaufsBrid_PREFIX "%d", bindex); + for (i = 0; i < ARRAY_SIZE(br->br_sysfs); i++) { + err = sysfs_create_file(kobj, &br_sysfs->attr); + if (unlikely(err)) + pr_warn("failed %s under sysfs(%d)\n", + br_sysfs->name, err); + br_sysfs++; + } + } +} --- linux-aws-4.15.0.orig/fs/aufs/sysrq.c +++ linux-aws-4.15.0/fs/aufs/sysrq.c @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * magic sysrq hanlder + */ + +/* #include */ +#include +#include "aufs.h" + +/* ---------------------------------------------------------------------- */ + +static void sysrq_sb(struct super_block *sb) +{ + char *plevel; + struct au_sbinfo *sbinfo; + struct file *file; + struct hlist_bl_head *files; + struct hlist_bl_node *pos; + struct au_finfo *finfo; + + plevel = au_plevel; + au_plevel = KERN_WARNING; + + /* since we define pr_fmt, call printk directly */ +#define pr(str) printk(KERN_WARNING AUFS_NAME ": " str) + + sbinfo = au_sbi(sb); + printk(KERN_WARNING "si=%lx\n", sysaufs_si_id(sbinfo)); + pr("superblock\n"); + au_dpri_sb(sb); + +#if 0 + pr("root dentry\n"); + au_dpri_dentry(sb->s_root); + pr("root inode\n"); + au_dpri_inode(d_inode(sb->s_root)); +#endif + +#if 0 + do { + int err, i, j, ndentry; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + + err = au_dpages_init(&dpages, GFP_ATOMIC); + if (unlikely(err)) + break; + err = au_dcsub_pages(&dpages, sb->s_root, NULL, NULL); + if (!err) + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) + au_dpri_dentry(dpage->dentries[j]); + } + au_dpages_free(&dpages); + } while (0); +#endif + +#if 1 + { + struct inode *i; + + pr("isolated inode\n"); + spin_lock(&sb->s_inode_list_lock); + list_for_each_entry(i, &sb->s_inodes, i_sb_list) { + spin_lock(&i->i_lock); + if (1 || hlist_empty(&i->i_dentry)) + au_dpri_inode(i); + spin_unlock(&i->i_lock); + } + spin_unlock(&sb->s_inode_list_lock); + } +#endif + pr("files\n"); + files = &au_sbi(sb)->si_files; + hlist_bl_lock(files); + hlist_bl_for_each_entry(finfo, pos, files, fi_hlist) { + umode_t mode; + + file = finfo->fi_file; + mode = file_inode(file)->i_mode; + if (!special_file(mode)) + au_dpri_file(file); + } + hlist_bl_unlock(files); + pr("done\n"); + +#undef pr + au_plevel = plevel; +} + +/* ---------------------------------------------------------------------- */ + +/* module parameter */ +static char *aufs_sysrq_key = "a"; +module_param_named(sysrq, aufs_sysrq_key, charp, S_IRUGO); +MODULE_PARM_DESC(sysrq, "MagicSysRq key for " AUFS_NAME); + +static void au_sysrq(int key __maybe_unused) +{ + struct au_sbinfo *sbinfo; + struct hlist_bl_node *pos; + + lockdep_off(); + au_sbilist_lock(); + hlist_bl_for_each_entry(sbinfo, pos, &au_sbilist, si_list) + sysrq_sb(sbinfo->si_sb); + au_sbilist_unlock(); + lockdep_on(); +} + +static struct sysrq_key_op au_sysrq_op = { + .handler = au_sysrq, + .help_msg = "Aufs", + .action_msg = "Aufs", + .enable_mask = SYSRQ_ENABLE_DUMP +}; + +/* ---------------------------------------------------------------------- */ + +int __init au_sysrq_init(void) +{ + int err; + char key; + + err = -1; + key = *aufs_sysrq_key; + if ('a' <= key && key <= 'z') + err = register_sysrq_key(key, &au_sysrq_op); + if (unlikely(err)) + pr_err("err %d, sysrq=%c\n", err, key); + return err; +} + +void au_sysrq_fin(void) +{ + int err; + + err = unregister_sysrq_key(*aufs_sysrq_key, &au_sysrq_op); + if (unlikely(err)) + pr_err("err %d (ignored)\n", err); +} --- linux-aws-4.15.0.orig/fs/aufs/vdir.c +++ linux-aws-4.15.0/fs/aufs/vdir.c @@ -0,0 +1,892 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * virtual or vertical directory + */ + +#include "aufs.h" + +static unsigned int calc_size(int nlen) +{ + return ALIGN(sizeof(struct au_vdir_de) + nlen, sizeof(ino_t)); +} + +static int set_deblk_end(union au_vdir_deblk_p *p, + union au_vdir_deblk_p *deblk_end) +{ + if (calc_size(0) <= deblk_end->deblk - p->deblk) { + p->de->de_str.len = 0; + /* smp_mb(); */ + return 0; + } + return -1; /* error */ +} + +/* returns true or false */ +static int is_deblk_end(union au_vdir_deblk_p *p, + union au_vdir_deblk_p *deblk_end) +{ + if (calc_size(0) <= deblk_end->deblk - p->deblk) + return !p->de->de_str.len; + return 1; +} + +static unsigned char *last_deblk(struct au_vdir *vdir) +{ + return vdir->vd_deblk[vdir->vd_nblk - 1]; +} + +/* ---------------------------------------------------------------------- */ + +/* estimate the appropriate size for name hash table */ +unsigned int au_rdhash_est(loff_t sz) +{ + unsigned int n; + + n = UINT_MAX; + sz >>= 10; + if (sz < n) + n = sz; + if (sz < AUFS_RDHASH_DEF) + n = AUFS_RDHASH_DEF; + /* pr_info("n %u\n", n); */ + return n; +} + +/* + * the allocated memory has to be freed by + * au_nhash_wh_free() or au_nhash_de_free(). + */ +int au_nhash_alloc(struct au_nhash *nhash, unsigned int num_hash, gfp_t gfp) +{ + struct hlist_head *head; + unsigned int u; + size_t sz; + + sz = sizeof(*nhash->nh_head) * num_hash; + head = kmalloc(sz, gfp); + if (head) { + nhash->nh_num = num_hash; + nhash->nh_head = head; + for (u = 0; u < num_hash; u++) + INIT_HLIST_HEAD(head++); + return 0; /* success */ + } + + return -ENOMEM; +} + +static void nhash_count(struct hlist_head *head) +{ +#if 0 + unsigned long n; + struct hlist_node *pos; + + n = 0; + hlist_for_each(pos, head) + n++; + pr_info("%lu\n", n); +#endif +} + +static void au_nhash_wh_do_free(struct hlist_head *head) +{ + struct au_vdir_wh *pos; + struct hlist_node *node; + + hlist_for_each_entry_safe(pos, node, head, wh_hash) + kfree(pos); +} + +static void au_nhash_de_do_free(struct hlist_head *head) +{ + struct au_vdir_dehstr *pos; + struct hlist_node *node; + + hlist_for_each_entry_safe(pos, node, head, hash) + au_cache_free_vdir_dehstr(pos); +} + +static void au_nhash_do_free(struct au_nhash *nhash, + void (*free)(struct hlist_head *head)) +{ + unsigned int n; + struct hlist_head *head; + + n = nhash->nh_num; + if (!n) + return; + + head = nhash->nh_head; + while (n-- > 0) { + nhash_count(head); + free(head++); + } + kfree(nhash->nh_head); +} + +void au_nhash_wh_free(struct au_nhash *whlist) +{ + au_nhash_do_free(whlist, au_nhash_wh_do_free); +} + +static void au_nhash_de_free(struct au_nhash *delist) +{ + au_nhash_do_free(delist, au_nhash_de_do_free); +} + +/* ---------------------------------------------------------------------- */ + +int au_nhash_test_longer_wh(struct au_nhash *whlist, aufs_bindex_t btgt, + int limit) +{ + int num; + unsigned int u, n; + struct hlist_head *head; + struct au_vdir_wh *pos; + + num = 0; + n = whlist->nh_num; + head = whlist->nh_head; + for (u = 0; u < n; u++, head++) + hlist_for_each_entry(pos, head, wh_hash) + if (pos->wh_bindex == btgt && ++num > limit) + return 1; + return 0; +} + +static struct hlist_head *au_name_hash(struct au_nhash *nhash, + unsigned char *name, + unsigned int len) +{ + unsigned int v; + /* const unsigned int magic_bit = 12; */ + + AuDebugOn(!nhash->nh_num || !nhash->nh_head); + + v = 0; + if (len > 8) + len = 8; + while (len--) + v += *name++; + /* v = hash_long(v, magic_bit); */ + v %= nhash->nh_num; + return nhash->nh_head + v; +} + +static int au_nhash_test_name(struct au_vdir_destr *str, const char *name, + int nlen) +{ + return str->len == nlen && !memcmp(str->name, name, nlen); +} + +/* returns found or not */ +int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen) +{ + struct hlist_head *head; + struct au_vdir_wh *pos; + struct au_vdir_destr *str; + + head = au_name_hash(whlist, name, nlen); + hlist_for_each_entry(pos, head, wh_hash) { + str = &pos->wh_str; + AuDbg("%.*s\n", str->len, str->name); + if (au_nhash_test_name(str, name, nlen)) + return 1; + } + return 0; +} + +/* returns found(true) or not */ +static int test_known(struct au_nhash *delist, char *name, int nlen) +{ + struct hlist_head *head; + struct au_vdir_dehstr *pos; + struct au_vdir_destr *str; + + head = au_name_hash(delist, name, nlen); + hlist_for_each_entry(pos, head, hash) { + str = pos->str; + AuDbg("%.*s\n", str->len, str->name); + if (au_nhash_test_name(str, name, nlen)) + return 1; + } + return 0; +} + +static void au_shwh_init_wh(struct au_vdir_wh *wh, ino_t ino, + unsigned char d_type) +{ +#ifdef CONFIG_AUFS_SHWH + wh->wh_ino = ino; + wh->wh_type = d_type; +#endif +} + +/* ---------------------------------------------------------------------- */ + +int au_nhash_append_wh(struct au_nhash *whlist, char *name, int nlen, ino_t ino, + unsigned int d_type, aufs_bindex_t bindex, + unsigned char shwh) +{ + int err; + struct au_vdir_destr *str; + struct au_vdir_wh *wh; + + AuDbg("%.*s\n", nlen, name); + AuDebugOn(!whlist->nh_num || !whlist->nh_head); + + err = -ENOMEM; + wh = kmalloc(sizeof(*wh) + nlen, GFP_NOFS); + if (unlikely(!wh)) + goto out; + + err = 0; + wh->wh_bindex = bindex; + if (shwh) + au_shwh_init_wh(wh, ino, d_type); + str = &wh->wh_str; + str->len = nlen; + memcpy(str->name, name, nlen); + hlist_add_head(&wh->wh_hash, au_name_hash(whlist, name, nlen)); + /* smp_mb(); */ + +out: + return err; +} + +static int append_deblk(struct au_vdir *vdir) +{ + int err; + unsigned long ul; + const unsigned int deblk_sz = vdir->vd_deblk_sz; + union au_vdir_deblk_p p, deblk_end; + unsigned char **o; + + err = -ENOMEM; + o = au_krealloc(vdir->vd_deblk, sizeof(*o) * (vdir->vd_nblk + 1), + GFP_NOFS, /*may_shrink*/0); + if (unlikely(!o)) + goto out; + + vdir->vd_deblk = o; + p.deblk = kmalloc(deblk_sz, GFP_NOFS); + if (p.deblk) { + ul = vdir->vd_nblk++; + vdir->vd_deblk[ul] = p.deblk; + vdir->vd_last.ul = ul; + vdir->vd_last.p.deblk = p.deblk; + deblk_end.deblk = p.deblk + deblk_sz; + err = set_deblk_end(&p, &deblk_end); + } + +out: + return err; +} + +static int append_de(struct au_vdir *vdir, char *name, int nlen, ino_t ino, + unsigned int d_type, struct au_nhash *delist) +{ + int err; + unsigned int sz; + const unsigned int deblk_sz = vdir->vd_deblk_sz; + union au_vdir_deblk_p p, *room, deblk_end; + struct au_vdir_dehstr *dehstr; + + p.deblk = last_deblk(vdir); + deblk_end.deblk = p.deblk + deblk_sz; + room = &vdir->vd_last.p; + AuDebugOn(room->deblk < p.deblk || deblk_end.deblk <= room->deblk + || !is_deblk_end(room, &deblk_end)); + + sz = calc_size(nlen); + if (unlikely(sz > deblk_end.deblk - room->deblk)) { + err = append_deblk(vdir); + if (unlikely(err)) + goto out; + + p.deblk = last_deblk(vdir); + deblk_end.deblk = p.deblk + deblk_sz; + /* smp_mb(); */ + AuDebugOn(room->deblk != p.deblk); + } + + err = -ENOMEM; + dehstr = au_cache_alloc_vdir_dehstr(); + if (unlikely(!dehstr)) + goto out; + + dehstr->str = &room->de->de_str; + hlist_add_head(&dehstr->hash, au_name_hash(delist, name, nlen)); + room->de->de_ino = ino; + room->de->de_type = d_type; + room->de->de_str.len = nlen; + memcpy(room->de->de_str.name, name, nlen); + + err = 0; + room->deblk += sz; + if (unlikely(set_deblk_end(room, &deblk_end))) + err = append_deblk(vdir); + /* smp_mb(); */ + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_vdir_free(struct au_vdir *vdir) +{ + unsigned char **deblk; + + deblk = vdir->vd_deblk; + while (vdir->vd_nblk--) + kfree(*deblk++); + kfree(vdir->vd_deblk); + au_cache_free_vdir(vdir); +} + +static struct au_vdir *alloc_vdir(struct file *file) +{ + struct au_vdir *vdir; + struct super_block *sb; + int err; + + sb = file->f_path.dentry->d_sb; + SiMustAnyLock(sb); + + err = -ENOMEM; + vdir = au_cache_alloc_vdir(); + if (unlikely(!vdir)) + goto out; + + vdir->vd_deblk = kzalloc(sizeof(*vdir->vd_deblk), GFP_NOFS); + if (unlikely(!vdir->vd_deblk)) + goto out_free; + + vdir->vd_deblk_sz = au_sbi(sb)->si_rdblk; + if (!vdir->vd_deblk_sz) { + /* estimate the appropriate size for deblk */ + vdir->vd_deblk_sz = au_dir_size(file, /*dentry*/NULL); + /* pr_info("vd_deblk_sz %u\n", vdir->vd_deblk_sz); */ + } + vdir->vd_nblk = 0; + vdir->vd_version = 0; + vdir->vd_jiffy = 0; + err = append_deblk(vdir); + if (!err) + return vdir; /* success */ + + kfree(vdir->vd_deblk); + +out_free: + au_cache_free_vdir(vdir); +out: + vdir = ERR_PTR(err); + return vdir; +} + +static int reinit_vdir(struct au_vdir *vdir) +{ + int err; + union au_vdir_deblk_p p, deblk_end; + + while (vdir->vd_nblk > 1) { + kfree(vdir->vd_deblk[vdir->vd_nblk - 1]); + /* vdir->vd_deblk[vdir->vd_nblk - 1] = NULL; */ + vdir->vd_nblk--; + } + p.deblk = vdir->vd_deblk[0]; + deblk_end.deblk = p.deblk + vdir->vd_deblk_sz; + err = set_deblk_end(&p, &deblk_end); + /* keep vd_dblk_sz */ + vdir->vd_last.ul = 0; + vdir->vd_last.p.deblk = vdir->vd_deblk[0]; + vdir->vd_version = 0; + vdir->vd_jiffy = 0; + /* smp_mb(); */ + return err; +} + +/* ---------------------------------------------------------------------- */ + +#define AuFillVdir_CALLED 1 +#define AuFillVdir_WHABLE (1 << 1) +#define AuFillVdir_SHWH (1 << 2) +#define au_ftest_fillvdir(flags, name) ((flags) & AuFillVdir_##name) +#define au_fset_fillvdir(flags, name) \ + do { (flags) |= AuFillVdir_##name; } while (0) +#define au_fclr_fillvdir(flags, name) \ + do { (flags) &= ~AuFillVdir_##name; } while (0) + +#ifndef CONFIG_AUFS_SHWH +#undef AuFillVdir_SHWH +#define AuFillVdir_SHWH 0 +#endif + +struct fillvdir_arg { + struct dir_context ctx; + struct file *file; + struct au_vdir *vdir; + struct au_nhash delist; + struct au_nhash whlist; + aufs_bindex_t bindex; + unsigned int flags; + int err; +}; + +static int fillvdir(struct dir_context *ctx, const char *__name, int nlen, + loff_t offset __maybe_unused, u64 h_ino, + unsigned int d_type) +{ + struct fillvdir_arg *arg = container_of(ctx, struct fillvdir_arg, ctx); + char *name = (void *)__name; + struct super_block *sb; + ino_t ino; + const unsigned char shwh = !!au_ftest_fillvdir(arg->flags, SHWH); + + arg->err = 0; + sb = arg->file->f_path.dentry->d_sb; + au_fset_fillvdir(arg->flags, CALLED); + /* smp_mb(); */ + if (nlen <= AUFS_WH_PFX_LEN + || memcmp(name, AUFS_WH_PFX, AUFS_WH_PFX_LEN)) { + if (test_known(&arg->delist, name, nlen) + || au_nhash_test_known_wh(&arg->whlist, name, nlen)) + goto out; /* already exists or whiteouted */ + + arg->err = au_ino(sb, arg->bindex, h_ino, d_type, &ino); + if (!arg->err) { + if (unlikely(nlen > AUFS_MAX_NAMELEN)) + d_type = DT_UNKNOWN; + arg->err = append_de(arg->vdir, name, nlen, ino, + d_type, &arg->delist); + } + } else if (au_ftest_fillvdir(arg->flags, WHABLE)) { + name += AUFS_WH_PFX_LEN; + nlen -= AUFS_WH_PFX_LEN; + if (au_nhash_test_known_wh(&arg->whlist, name, nlen)) + goto out; /* already whiteouted */ + + if (shwh) + arg->err = au_wh_ino(sb, arg->bindex, h_ino, d_type, + &ino); + if (!arg->err) { + if (nlen <= AUFS_MAX_NAMELEN + AUFS_WH_PFX_LEN) + d_type = DT_UNKNOWN; + arg->err = au_nhash_append_wh + (&arg->whlist, name, nlen, ino, d_type, + arg->bindex, shwh); + } + } + +out: + if (!arg->err) + arg->vdir->vd_jiffy = jiffies; + /* smp_mb(); */ + AuTraceErr(arg->err); + return arg->err; +} + +static int au_handle_shwh(struct super_block *sb, struct au_vdir *vdir, + struct au_nhash *whlist, struct au_nhash *delist) +{ +#ifdef CONFIG_AUFS_SHWH + int err; + unsigned int nh, u; + struct hlist_head *head; + struct au_vdir_wh *pos; + struct hlist_node *n; + char *p, *o; + struct au_vdir_destr *destr; + + AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH)); + + err = -ENOMEM; + o = p = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!p)) + goto out; + + err = 0; + nh = whlist->nh_num; + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + p += AUFS_WH_PFX_LEN; + for (u = 0; u < nh; u++) { + head = whlist->nh_head + u; + hlist_for_each_entry_safe(pos, n, head, wh_hash) { + destr = &pos->wh_str; + memcpy(p, destr->name, destr->len); + err = append_de(vdir, o, destr->len + AUFS_WH_PFX_LEN, + pos->wh_ino, pos->wh_type, delist); + if (unlikely(err)) + break; + } + } + + free_page((unsigned long)o); + +out: + AuTraceErr(err); + return err; +#else + return 0; +#endif +} + +static int au_do_read_vdir(struct fillvdir_arg *arg) +{ + int err; + unsigned int rdhash; + loff_t offset; + aufs_bindex_t bbot, bindex, btop; + unsigned char shwh; + struct file *hf, *file; + struct super_block *sb; + + file = arg->file; + sb = file->f_path.dentry->d_sb; + SiMustAnyLock(sb); + + rdhash = au_sbi(sb)->si_rdhash; + if (!rdhash) + rdhash = au_rdhash_est(au_dir_size(file, /*dentry*/NULL)); + err = au_nhash_alloc(&arg->delist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out; + err = au_nhash_alloc(&arg->whlist, rdhash, GFP_NOFS); + if (unlikely(err)) + goto out_delist; + + err = 0; + arg->flags = 0; + shwh = 0; + if (au_opt_test(au_mntflags(sb), SHWH)) { + shwh = 1; + au_fset_fillvdir(arg->flags, SHWH); + } + btop = au_fbtop(file); + bbot = au_fbbot_dir(file); + for (bindex = btop; !err && bindex <= bbot; bindex++) { + hf = au_hf_dir(file, bindex); + if (!hf) + continue; + + offset = vfsub_llseek(hf, 0, SEEK_SET); + err = offset; + if (unlikely(offset)) + break; + + arg->bindex = bindex; + au_fclr_fillvdir(arg->flags, WHABLE); + if (shwh + || (bindex != bbot + && au_br_whable(au_sbr_perm(sb, bindex)))) + au_fset_fillvdir(arg->flags, WHABLE); + do { + arg->err = 0; + au_fclr_fillvdir(arg->flags, CALLED); + /* smp_mb(); */ + err = vfsub_iterate_dir(hf, &arg->ctx); + if (err >= 0) + err = arg->err; + } while (!err && au_ftest_fillvdir(arg->flags, CALLED)); + + /* + * dir_relax() may be good for concurrency, but aufs should not + * use it since it will cause a lockdep problem. + */ + } + + if (!err && shwh) + err = au_handle_shwh(sb, arg->vdir, &arg->whlist, &arg->delist); + + au_nhash_wh_free(&arg->whlist); + +out_delist: + au_nhash_de_free(&arg->delist); +out: + return err; +} + +static int read_vdir(struct file *file, int may_read) +{ + int err; + unsigned long expire; + unsigned char do_read; + struct fillvdir_arg arg = { + .ctx = { + .actor = fillvdir + } + }; + struct inode *inode; + struct au_vdir *vdir, *allocated; + + err = 0; + inode = file_inode(file); + IMustLock(inode); + IiMustWriteLock(inode); + SiMustAnyLock(inode->i_sb); + + allocated = NULL; + do_read = 0; + expire = au_sbi(inode->i_sb)->si_rdcache; + vdir = au_ivdir(inode); + if (!vdir) { + do_read = 1; + vdir = alloc_vdir(file); + err = PTR_ERR(vdir); + if (IS_ERR(vdir)) + goto out; + err = 0; + allocated = vdir; + } else if (may_read + && (inode->i_version != vdir->vd_version + || time_after(jiffies, vdir->vd_jiffy + expire))) { + do_read = 1; + err = reinit_vdir(vdir); + if (unlikely(err)) + goto out; + } + + if (!do_read) + return 0; /* success */ + + arg.file = file; + arg.vdir = vdir; + err = au_do_read_vdir(&arg); + if (!err) { + /* file->f_pos = 0; */ /* todo: ctx->pos? */ + vdir->vd_version = inode->i_version; + vdir->vd_last.ul = 0; + vdir->vd_last.p.deblk = vdir->vd_deblk[0]; + if (allocated) + au_set_ivdir(inode, allocated); + } else if (allocated) + au_vdir_free(allocated); + +out: + return err; +} + +static int copy_vdir(struct au_vdir *tgt, struct au_vdir *src) +{ + int err, rerr; + unsigned long ul, n; + const unsigned int deblk_sz = src->vd_deblk_sz; + + AuDebugOn(tgt->vd_nblk != 1); + + err = -ENOMEM; + if (tgt->vd_nblk < src->vd_nblk) { + unsigned char **p; + + p = au_krealloc(tgt->vd_deblk, sizeof(*p) * src->vd_nblk, + GFP_NOFS, /*may_shrink*/0); + if (unlikely(!p)) + goto out; + tgt->vd_deblk = p; + } + + if (tgt->vd_deblk_sz != deblk_sz) { + unsigned char *p; + + tgt->vd_deblk_sz = deblk_sz; + p = au_krealloc(tgt->vd_deblk[0], deblk_sz, GFP_NOFS, + /*may_shrink*/1); + if (unlikely(!p)) + goto out; + tgt->vd_deblk[0] = p; + } + memcpy(tgt->vd_deblk[0], src->vd_deblk[0], deblk_sz); + tgt->vd_version = src->vd_version; + tgt->vd_jiffy = src->vd_jiffy; + + n = src->vd_nblk; + for (ul = 1; ul < n; ul++) { + tgt->vd_deblk[ul] = kmemdup(src->vd_deblk[ul], deblk_sz, + GFP_NOFS); + if (unlikely(!tgt->vd_deblk[ul])) + goto out; + tgt->vd_nblk++; + } + tgt->vd_nblk = n; + tgt->vd_last.ul = tgt->vd_last.ul; + tgt->vd_last.p.deblk = tgt->vd_deblk[tgt->vd_last.ul]; + tgt->vd_last.p.deblk += src->vd_last.p.deblk + - src->vd_deblk[src->vd_last.ul]; + /* smp_mb(); */ + return 0; /* success */ + +out: + rerr = reinit_vdir(tgt); + BUG_ON(rerr); + return err; +} + +int au_vdir_init(struct file *file) +{ + int err; + struct inode *inode; + struct au_vdir *vdir_cache, *allocated; + + /* test file->f_pos here instead of ctx->pos */ + err = read_vdir(file, !file->f_pos); + if (unlikely(err)) + goto out; + + allocated = NULL; + vdir_cache = au_fvdir_cache(file); + if (!vdir_cache) { + vdir_cache = alloc_vdir(file); + err = PTR_ERR(vdir_cache); + if (IS_ERR(vdir_cache)) + goto out; + allocated = vdir_cache; + } else if (!file->f_pos && vdir_cache->vd_version != file->f_version) { + /* test file->f_pos here instead of ctx->pos */ + err = reinit_vdir(vdir_cache); + if (unlikely(err)) + goto out; + } else + return 0; /* success */ + + inode = file_inode(file); + err = copy_vdir(vdir_cache, au_ivdir(inode)); + if (!err) { + file->f_version = inode->i_version; + if (allocated) + au_set_fvdir_cache(file, allocated); + } else if (allocated) + au_vdir_free(allocated); + +out: + return err; +} + +static loff_t calc_offset(struct au_vdir *vdir) +{ + loff_t offset; + union au_vdir_deblk_p p; + + p.deblk = vdir->vd_deblk[vdir->vd_last.ul]; + offset = vdir->vd_last.p.deblk - p.deblk; + offset += vdir->vd_deblk_sz * vdir->vd_last.ul; + return offset; +} + +/* returns true or false */ +static int seek_vdir(struct file *file, struct dir_context *ctx) +{ + int valid; + unsigned int deblk_sz; + unsigned long ul, n; + loff_t offset; + union au_vdir_deblk_p p, deblk_end; + struct au_vdir *vdir_cache; + + valid = 1; + vdir_cache = au_fvdir_cache(file); + offset = calc_offset(vdir_cache); + AuDbg("offset %lld\n", offset); + if (ctx->pos == offset) + goto out; + + vdir_cache->vd_last.ul = 0; + vdir_cache->vd_last.p.deblk = vdir_cache->vd_deblk[0]; + if (!ctx->pos) + goto out; + + valid = 0; + deblk_sz = vdir_cache->vd_deblk_sz; + ul = div64_u64(ctx->pos, deblk_sz); + AuDbg("ul %lu\n", ul); + if (ul >= vdir_cache->vd_nblk) + goto out; + + n = vdir_cache->vd_nblk; + for (; ul < n; ul++) { + p.deblk = vdir_cache->vd_deblk[ul]; + deblk_end.deblk = p.deblk + deblk_sz; + offset = ul; + offset *= deblk_sz; + while (!is_deblk_end(&p, &deblk_end) && offset < ctx->pos) { + unsigned int l; + + l = calc_size(p.de->de_str.len); + offset += l; + p.deblk += l; + } + if (!is_deblk_end(&p, &deblk_end)) { + valid = 1; + vdir_cache->vd_last.ul = ul; + vdir_cache->vd_last.p = p; + break; + } + } + +out: + /* smp_mb(); */ + AuTraceErr(!valid); + return valid; +} + +int au_vdir_fill_de(struct file *file, struct dir_context *ctx) +{ + unsigned int l, deblk_sz; + union au_vdir_deblk_p deblk_end; + struct au_vdir *vdir_cache; + struct au_vdir_de *de; + + vdir_cache = au_fvdir_cache(file); + if (!seek_vdir(file, ctx)) + return 0; + + deblk_sz = vdir_cache->vd_deblk_sz; + while (1) { + deblk_end.deblk = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; + deblk_end.deblk += deblk_sz; + while (!is_deblk_end(&vdir_cache->vd_last.p, &deblk_end)) { + de = vdir_cache->vd_last.p.de; + AuDbg("%.*s, off%lld, i%lu, dt%d\n", + de->de_str.len, de->de_str.name, ctx->pos, + (unsigned long)de->de_ino, de->de_type); + if (unlikely(!dir_emit(ctx, de->de_str.name, + de->de_str.len, de->de_ino, + de->de_type))) { + /* todo: ignore the error caused by udba? */ + /* return err; */ + return 0; + } + + l = calc_size(de->de_str.len); + vdir_cache->vd_last.p.deblk += l; + ctx->pos += l; + } + if (vdir_cache->vd_last.ul < vdir_cache->vd_nblk - 1) { + vdir_cache->vd_last.ul++; + vdir_cache->vd_last.p.deblk + = vdir_cache->vd_deblk[vdir_cache->vd_last.ul]; + ctx->pos = deblk_sz * vdir_cache->vd_last.ul; + continue; + } + break; + } + + /* smp_mb(); */ + return 0; +} --- linux-aws-4.15.0.orig/fs/aufs/vfsub.c +++ linux-aws-4.15.0/fs/aufs/vfsub.c @@ -0,0 +1,894 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sub-routines for VFS + */ + +#include +#include +#include +#include +#include +#include "aufs.h" + +#ifdef CONFIG_AUFS_BR_FUSE +int vfsub_test_mntns(struct vfsmount *mnt, struct super_block *h_sb) +{ + if (!au_test_fuse(h_sb) || !au_userns) + return 0; + + return is_current_mnt_ns(mnt) ? 0 : -EACCES; +} +#endif + +int vfsub_sync_filesystem(struct super_block *h_sb, int wait) +{ + int err; + + lockdep_off(); + down_read(&h_sb->s_umount); + err = __sync_filesystem(h_sb, wait); + up_read(&h_sb->s_umount); + lockdep_on(); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +int vfsub_update_h_iattr(struct path *h_path, int *did) +{ + int err; + struct kstat st; + struct super_block *h_sb; + + /* for remote fs, leave work for its getattr or d_revalidate */ + /* for bad i_attr fs, handle them in aufs_getattr() */ + /* still some fs may acquire i_mutex. we need to skip them */ + err = 0; + if (!did) + did = &err; + h_sb = h_path->dentry->d_sb; + *did = (!au_test_fs_remote(h_sb) && au_test_fs_refresh_iattr(h_sb)); + if (*did) + err = vfsub_getattr(h_path, &st); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct file *vfsub_dentry_open(struct path *path, int flags) +{ + struct file *file; + + file = dentry_open(path, flags /* | __FMODE_NONOTIFY */, + current_cred()); + if (!IS_ERR_OR_NULL(file) + && (file->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ) + i_readcount_inc(d_inode(path->dentry)); + + return file; +} + +struct file *vfsub_filp_open(const char *path, int oflags, int mode) +{ + struct file *file; + + lockdep_off(); + file = filp_open(path, + oflags /* | __FMODE_NONOTIFY */, + mode); + lockdep_on(); + if (IS_ERR(file)) + goto out; + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + +out: + return file; +} + +/* + * Ideally this function should call VFS:do_last() in order to keep all its + * checkings. But it is very hard for aufs to regenerate several VFS internal + * structure such as nameidata. This is a second (or third) best approach. + * cf. linux/fs/namei.c:do_last(), lookup_open() and atomic_open(). + */ +int vfsub_atomic_open(struct inode *dir, struct dentry *dentry, + struct vfsub_aopen_args *args, struct au_branch *br) +{ + int err; + struct file *file = args->file; + /* copied from linux/fs/namei.c:atomic_open() */ + struct dentry *const DENTRY_NOT_SET = (void *)-1UL; + + IMustLock(dir); + AuDebugOn(!dir->i_op->atomic_open); + + err = au_br_test_oflag(args->open_flag, br); + if (unlikely(err)) + goto out; + + args->file->f_path.dentry = DENTRY_NOT_SET; + args->file->f_path.mnt = au_br_mnt(br); + err = dir->i_op->atomic_open(dir, dentry, file, args->open_flag, + args->create_mode, args->opened); + if (err >= 0) { + /* some filesystems don't set FILE_CREATED while succeeded? */ + if (*args->opened & FILE_CREATED) + fsnotify_create(dir, dentry); + } else + goto out; + + + if (!err) { + /* todo: call VFS:may_open() here */ + err = open_check_o_direct(file); + /* todo: ima_file_check() too? */ + if (!err && (args->open_flag & __FMODE_EXEC)) + err = deny_write_access(file); + if (unlikely(err)) + /* note that the file is created and still opened */ + goto out; + } + + au_br_get(br); + fsnotify_open(file); + +out: + return err; +} + +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path) +{ + int err; + + err = kern_path(name, flags, path); + if (!err && d_is_positive(path->dentry)) + vfsub_update_h_iattr(path, /*did*/NULL); /*ignore*/ + return err; +} + +struct dentry *vfsub_lookup_one_len_unlocked(const char *name, + struct dentry *parent, int len) +{ + struct path path = { + .mnt = NULL + }; + + path.dentry = lookup_one_len_unlocked(name, parent, len); + if (IS_ERR(path.dentry)) + goto out; + if (d_is_positive(path.dentry)) + vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ + +out: + AuTraceErrPtr(path.dentry); + return path.dentry; +} + +struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, + int len) +{ + struct path path = { + .mnt = NULL + }; + + /* VFS checks it too, but by WARN_ON_ONCE() */ + IMustLock(d_inode(parent)); + + path.dentry = lookup_one_len(name, parent, len); + if (IS_ERR(path.dentry)) + goto out; + if (d_is_positive(path.dentry)) + vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/ + +out: + AuTraceErrPtr(path.dentry); + return path.dentry; +} + +void vfsub_call_lkup_one(void *args) +{ + struct vfsub_lkup_one_args *a = args; + *a->errp = vfsub_lkup_one(a->name, a->parent); +} + +/* ---------------------------------------------------------------------- */ + +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2) +{ + struct dentry *d; + + lockdep_off(); + d = lock_rename(d1, d2); + lockdep_on(); + au_hn_suspend(hdir1); + if (hdir1 != hdir2) + au_hn_suspend(hdir2); + + return d; +} + +void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2) +{ + au_hn_resume(hdir1); + if (hdir1 != hdir2) + au_hn_resume(hdir2); + lockdep_off(); + unlock_rename(d1, d2); + lockdep_on(); +} + +/* ---------------------------------------------------------------------- */ + +int vfsub_create(struct inode *dir, struct path *path, int mode, bool want_excl) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mknod(path, d, mode, 0); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_create(dir, path->dentry, mode, want_excl); + lockdep_on(); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +int vfsub_symlink(struct inode *dir, struct path *path, const char *symname) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_symlink(path, d, symname); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_symlink(dir, path->dentry, symname); + lockdep_on(); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mknod(path, d, mode, new_encode_dev(dev)); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_mknod(dir, path->dentry, mode, dev); + lockdep_on(); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +static int au_test_nlink(struct inode *inode) +{ + const unsigned int link_max = UINT_MAX >> 1; /* rough margin */ + + if (!au_test_fs_no_limit_nlink(inode->i_sb) + || inode->i_nlink < link_max) + return 0; + return -EMLINK; +} + +int vfsub_link(struct dentry *src_dentry, struct inode *dir, struct path *path, + struct inode **delegated_inode) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + err = au_test_nlink(d_inode(src_dentry)); + if (unlikely(err)) + return err; + + /* we don't call may_linkat() */ + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_link(src_dentry, path, d); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_link(src_dentry, dir, path->dentry, delegated_inode); + lockdep_on(); + if (!err) { + struct path tmp = *path; + int did; + + /* fuse has different memory inode for the same inumber */ + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + tmp.dentry = src_dentry; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +int vfsub_rename(struct inode *src_dir, struct dentry *src_dentry, + struct inode *dir, struct path *path, + struct inode **delegated_inode, unsigned int flags) +{ + int err; + struct path tmp = { + .mnt = path->mnt + }; + struct dentry *d; + + IMustLock(dir); + IMustLock(src_dir); + + d = path->dentry; + path->dentry = d->d_parent; + tmp.dentry = src_dentry->d_parent; + err = security_path_rename(&tmp, src_dentry, path, d, /*flags*/0); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_rename(src_dir, src_dentry, dir, path->dentry, + delegated_inode, flags); + lockdep_on(); + if (!err) { + int did; + + tmp.dentry = d->d_parent; + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = src_dentry; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + tmp.dentry = src_dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +int vfsub_mkdir(struct inode *dir, struct path *path, int mode) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_mkdir(path, d, mode); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_mkdir(dir, path->dentry, mode); + lockdep_on(); + if (!err) { + struct path tmp = *path; + int did; + + vfsub_update_h_iattr(&tmp, &did); + if (did) { + tmp.dentry = path->dentry->d_parent; + vfsub_update_h_iattr(&tmp, /*did*/NULL); + } + /*ignore*/ + } + +out: + return err; +} + +int vfsub_rmdir(struct inode *dir, struct path *path) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + d = path->dentry; + path->dentry = d->d_parent; + err = security_path_rmdir(path, d); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_rmdir(dir, path->dentry); + lockdep_on(); + if (!err) { + struct path tmp = { + .dentry = path->dentry->d_parent, + .mnt = path->mnt + }; + + vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ + } + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* todo: support mmap_sem? */ +ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + + lockdep_off(); + err = vfs_read(file, ubuf, count, ppos); + lockdep_on(); + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +/* todo: kernel_read()? */ +ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + mm_segment_t oldfs; + union { + void *k; + char __user *u; + } buf; + + buf.k = kbuf; + oldfs = get_fs(); + set_fs(KERNEL_DS); + err = vfsub_read_u(file, buf.u, count, ppos); + set_fs(oldfs); + return err; +} + +ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, + loff_t *ppos) +{ + ssize_t err; + + lockdep_off(); + err = vfs_write(file, ubuf, count, ppos); + lockdep_on(); + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, loff_t *ppos) +{ + ssize_t err; + mm_segment_t oldfs; + union { + void *k; + const char __user *u; + } buf; + + buf.k = kbuf; + oldfs = get_fs(); + set_fs(KERNEL_DS); + err = vfsub_write_u(file, buf.u, count, ppos); + set_fs(oldfs); + return err; +} + +int vfsub_flush(struct file *file, fl_owner_t id) +{ + int err; + + err = 0; + if (file->f_op->flush) { + if (!au_test_nfs(file->f_path.dentry->d_sb)) + err = file->f_op->flush(file, id); + else { + lockdep_off(); + err = file->f_op->flush(file, id); + lockdep_on(); + } + if (!err) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); + /*ignore*/ + } + return err; +} + +int vfsub_iterate_dir(struct file *file, struct dir_context *ctx) +{ + int err; + + AuDbg("%pD, ctx{%pf, %llu}\n", file, ctx->actor, ctx->pos); + + lockdep_off(); + err = iterate_dir(file, ctx); + lockdep_on(); + if (err >= 0) + vfsub_update_h_iattr(&file->f_path, /*did*/NULL); /*ignore*/ + + return err; +} + +long vfsub_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + long err; + + lockdep_off(); + err = do_splice_to(in, ppos, pipe, len, flags); + lockdep_on(); + file_accessed(in); + if (err >= 0) + vfsub_update_h_iattr(&in->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags) +{ + long err; + + lockdep_off(); + err = do_splice_from(pipe, out, ppos, len, flags); + lockdep_on(); + if (err >= 0) + vfsub_update_h_iattr(&out->f_path, /*did*/NULL); /*ignore*/ + return err; +} + +int vfsub_fsync(struct file *file, struct path *path, int datasync) +{ + int err; + + /* file can be NULL */ + lockdep_off(); + err = vfs_fsync(file, datasync); + lockdep_on(); + if (!err) { + if (!path) { + AuDebugOn(!file); + path = &file->f_path; + } + vfsub_update_h_iattr(path, /*did*/NULL); /*ignore*/ + } + return err; +} + +/* cf. open.c:do_sys_truncate() and do_sys_ftruncate() */ +int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, + struct file *h_file) +{ + int err; + struct inode *h_inode; + struct super_block *h_sb; + + if (!h_file) { + err = vfsub_truncate(h_path, length); + goto out; + } + + h_inode = d_inode(h_path->dentry); + h_sb = h_inode->i_sb; + lockdep_off(); + sb_start_write(h_sb); + lockdep_on(); + err = locks_verify_truncate(h_inode, h_file, length); + if (!err) + err = security_path_truncate(h_path); + if (!err) { + lockdep_off(); + err = do_truncate(h_path->dentry, length, attr, h_file); + lockdep_on(); + } + lockdep_off(); + sb_end_write(h_sb); + lockdep_on(); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct au_vfsub_mkdir_args { + int *errp; + struct inode *dir; + struct path *path; + int mode; +}; + +static void au_call_vfsub_mkdir(void *args) +{ + struct au_vfsub_mkdir_args *a = args; + *a->errp = vfsub_mkdir(a->dir, a->path, a->mode); +} + +int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode) +{ + int err, do_sio, wkq_err; + + do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); + if (!do_sio) { + lockdep_off(); + err = vfsub_mkdir(dir, path, mode); + lockdep_on(); + } else { + struct au_vfsub_mkdir_args args = { + .errp = &err, + .dir = dir, + .path = path, + .mode = mode + }; + wkq_err = au_wkq_wait(au_call_vfsub_mkdir, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +struct au_vfsub_rmdir_args { + int *errp; + struct inode *dir; + struct path *path; +}; + +static void au_call_vfsub_rmdir(void *args) +{ + struct au_vfsub_rmdir_args *a = args; + *a->errp = vfsub_rmdir(a->dir, a->path); +} + +int vfsub_sio_rmdir(struct inode *dir, struct path *path) +{ + int err, do_sio, wkq_err; + + do_sio = au_test_h_perm_sio(dir, MAY_EXEC | MAY_WRITE); + if (!do_sio) { + lockdep_off(); + err = vfsub_rmdir(dir, path); + lockdep_on(); + } else { + struct au_vfsub_rmdir_args args = { + .errp = &err, + .dir = dir, + .path = path + }; + wkq_err = au_wkq_wait(au_call_vfsub_rmdir, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct notify_change_args { + int *errp; + struct path *path; + struct iattr *ia; + struct inode **delegated_inode; +}; + +static void call_notify_change(void *args) +{ + struct notify_change_args *a = args; + struct inode *h_inode; + + h_inode = d_inode(a->path->dentry); + IMustLock(h_inode); + + *a->errp = -EPERM; + if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) { + lockdep_off(); + *a->errp = notify_change(a->path->dentry, a->ia, + a->delegated_inode); + lockdep_on(); + if (!*a->errp) + vfsub_update_h_iattr(a->path, /*did*/NULL); /*ignore*/ + } + AuTraceErr(*a->errp); +} + +int vfsub_notify_change(struct path *path, struct iattr *ia, + struct inode **delegated_inode) +{ + int err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia, + .delegated_inode = delegated_inode + }; + + call_notify_change(&args); + + return err; +} + +int vfsub_sio_notify_change(struct path *path, struct iattr *ia, + struct inode **delegated_inode) +{ + int err, wkq_err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia, + .delegated_inode = delegated_inode + }; + + wkq_err = au_wkq_wait(call_notify_change, &args); + if (unlikely(wkq_err)) + err = wkq_err; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct unlink_args { + int *errp; + struct inode *dir; + struct path *path; + struct inode **delegated_inode; +}; + +static void call_unlink(void *args) +{ + struct unlink_args *a = args; + struct dentry *d = a->path->dentry; + struct inode *h_inode; + const int stop_sillyrename = (au_test_nfs(d->d_sb) + && au_dcount(d) == 1); + + IMustLock(a->dir); + + a->path->dentry = d->d_parent; + *a->errp = security_path_unlink(a->path, d); + a->path->dentry = d; + if (unlikely(*a->errp)) + return; + + if (!stop_sillyrename) + dget(d); + h_inode = NULL; + if (d_is_positive(d)) { + h_inode = d_inode(d); + ihold(h_inode); + } + + lockdep_off(); + *a->errp = vfs_unlink(a->dir, d, a->delegated_inode); + lockdep_on(); + if (!*a->errp) { + struct path tmp = { + .dentry = d->d_parent, + .mnt = a->path->mnt + }; + vfsub_update_h_iattr(&tmp, /*did*/NULL); /*ignore*/ + } + + if (!stop_sillyrename) + dput(d); + if (h_inode) + iput(h_inode); + + AuTraceErr(*a->errp); +} + +/* + * @dir: must be locked. + * @dentry: target dentry. + */ +int vfsub_unlink(struct inode *dir, struct path *path, + struct inode **delegated_inode, int force) +{ + int err; + struct unlink_args args = { + .errp = &err, + .dir = dir, + .path = path, + .delegated_inode = delegated_inode + }; + + if (!force) + call_unlink(&args); + else { + int wkq_err; + + wkq_err = au_wkq_wait(call_unlink, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/vfsub.h +++ linux-aws-4.15.0/fs/aufs/vfsub.h @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * sub-routines for VFS + */ + +#ifndef __AUFS_VFSUB_H__ +#define __AUFS_VFSUB_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include +#include "debug.h" + +/* copied from linux/fs/internal.h */ +/* todo: BAD approach!! */ +extern void __mnt_drop_write(struct vfsmount *); +extern int open_check_o_direct(struct file *f); + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for lower inode */ +/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */ +/* reduce? gave up. */ +enum { + AuLsc_I_Begin = I_MUTEX_PARENT2, /* 5 */ + AuLsc_I_PARENT, /* lower inode, parent first */ + AuLsc_I_PARENT2, /* copyup dirs */ + AuLsc_I_PARENT3, /* copyup wh */ + AuLsc_I_CHILD, + AuLsc_I_CHILD2, + AuLsc_I_End +}; + +/* to debug easier, do not make them inlined functions */ +#define MtxMustLock(mtx) AuDebugOn(!mutex_is_locked(mtx)) +#define IMustLock(i) AuDebugOn(!inode_is_locked(i)) + +/* why VFS doesn't define it? */ +static inline +void vfsub_inode_lock_shared_nested(struct inode *inode, unsigned int sc) +{ + down_read_nested(&inode->i_rwsem, sc); +} + +/* ---------------------------------------------------------------------- */ + +static inline void vfsub_drop_nlink(struct inode *inode) +{ + AuDebugOn(!inode->i_nlink); + drop_nlink(inode); +} + +static inline void vfsub_dead_dir(struct inode *inode) +{ + AuDebugOn(!S_ISDIR(inode->i_mode)); + inode->i_flags |= S_DEAD; + clear_nlink(inode); +} + +static inline int vfsub_native_ro(struct inode *inode) +{ + return sb_rdonly(inode->i_sb) + || IS_RDONLY(inode) + /* || IS_APPEND(inode) */ + || IS_IMMUTABLE(inode); +} + +#ifdef CONFIG_AUFS_BR_FUSE +int vfsub_test_mntns(struct vfsmount *mnt, struct super_block *h_sb); +#else +AuStubInt0(vfsub_test_mntns, struct vfsmount *mnt, struct super_block *h_sb); +#endif + +int vfsub_sync_filesystem(struct super_block *h_sb, int wait); + +/* ---------------------------------------------------------------------- */ + +int vfsub_update_h_iattr(struct path *h_path, int *did); +struct file *vfsub_dentry_open(struct path *path, int flags); +struct file *vfsub_filp_open(const char *path, int oflags, int mode); +struct vfsub_aopen_args { + struct file *file; + unsigned int open_flag; + umode_t create_mode; + int *opened; +}; +struct au_branch; +int vfsub_atomic_open(struct inode *dir, struct dentry *dentry, + struct vfsub_aopen_args *args, struct au_branch *br); +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path); + +struct dentry *vfsub_lookup_one_len_unlocked(const char *name, + struct dentry *parent, int len); +struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent, + int len); + +struct vfsub_lkup_one_args { + struct dentry **errp; + struct qstr *name; + struct dentry *parent; +}; + +static inline struct dentry *vfsub_lkup_one(struct qstr *name, + struct dentry *parent) +{ + return vfsub_lookup_one_len(name->name, parent, name->len); +} + +void vfsub_call_lkup_one(void *args); + +/* ---------------------------------------------------------------------- */ + +static inline int vfsub_mnt_want_write(struct vfsmount *mnt) +{ + int err; + + lockdep_off(); + err = mnt_want_write(mnt); + lockdep_on(); + return err; +} + +static inline void vfsub_mnt_drop_write(struct vfsmount *mnt) +{ + lockdep_off(); + mnt_drop_write(mnt); + lockdep_on(); +} + +#if 0 /* reserved */ +static inline void vfsub_mnt_drop_write_file(struct file *file) +{ + lockdep_off(); + mnt_drop_write_file(file); + lockdep_on(); +} +#endif + +/* ---------------------------------------------------------------------- */ + +struct au_hinode; +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2); +void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1, + struct dentry *d2, struct au_hinode *hdir2); + +int vfsub_create(struct inode *dir, struct path *path, int mode, + bool want_excl); +int vfsub_symlink(struct inode *dir, struct path *path, + const char *symname); +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev); +int vfsub_link(struct dentry *src_dentry, struct inode *dir, + struct path *path, struct inode **delegated_inode); +int vfsub_rename(struct inode *src_hdir, struct dentry *src_dentry, + struct inode *hdir, struct path *path, + struct inode **delegated_inode, unsigned int flags); +int vfsub_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_rmdir(struct inode *dir, struct path *path); + +/* ---------------------------------------------------------------------- */ + +ssize_t vfsub_read_u(struct file *file, char __user *ubuf, size_t count, + loff_t *ppos); +ssize_t vfsub_read_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos); +ssize_t vfsub_write_u(struct file *file, const char __user *ubuf, size_t count, + loff_t *ppos); +ssize_t vfsub_write_k(struct file *file, void *kbuf, size_t count, + loff_t *ppos); +int vfsub_flush(struct file *file, fl_owner_t id); +int vfsub_iterate_dir(struct file *file, struct dir_context *ctx); + +static inline loff_t vfsub_f_size_read(struct file *file) +{ + return i_size_read(file_inode(file)); +} + +static inline unsigned int vfsub_file_flags(struct file *file) +{ + unsigned int flags; + + spin_lock(&file->f_lock); + flags = file->f_flags; + spin_unlock(&file->f_lock); + + return flags; +} + +static inline int vfsub_file_execed(struct file *file) +{ + /* todo: direct access f_flags */ + return !!(vfsub_file_flags(file) & __FMODE_EXEC); +} + +#if 0 /* reserved */ +static inline void vfsub_file_accessed(struct file *h_file) +{ + file_accessed(h_file); + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); /*ignore*/ +} +#endif + +#if 0 /* reserved */ +static inline void vfsub_touch_atime(struct vfsmount *h_mnt, + struct dentry *h_dentry) +{ + struct path h_path = { + .dentry = h_dentry, + .mnt = h_mnt + }; + touch_atime(&h_path); + vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ +} +#endif + +static inline int vfsub_update_time(struct inode *h_inode, struct timespec *ts, + int flags) +{ + return update_time(h_inode, ts, flags); + /* no vfsub_update_h_iattr() since we don't have struct path */ +} + +#ifdef CONFIG_FS_POSIX_ACL +static inline int vfsub_acl_chmod(struct inode *h_inode, umode_t h_mode) +{ + int err; + + err = posix_acl_chmod(h_inode, h_mode); + if (err == -EOPNOTSUPP) + err = 0; + return err; +} +#else +AuStubInt0(vfsub_acl_chmod, struct inode *h_inode, umode_t h_mode); +#endif + +long vfsub_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); +long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags); + +static inline long vfsub_truncate(struct path *path, loff_t length) +{ + long err; + + lockdep_off(); + err = vfs_truncate(path, length); + lockdep_on(); + return err; +} + +int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr, + struct file *h_file); +int vfsub_fsync(struct file *file, struct path *path, int datasync); + +/* + * re-use branch fs's ioctl(FICLONE) while aufs itself doesn't support such + * ioctl. + */ +static inline int vfsub_clone_file_range(struct file *src, struct file *dst, + u64 len) +{ + int err; + + lockdep_off(); + err = vfs_clone_file_range(src, 0, dst, 0, len); + lockdep_on(); + + return err; +} + +/* copy_file_range(2) is a systemcall */ +static inline ssize_t vfsub_copy_file_range(struct file *src, loff_t src_pos, + struct file *dst, loff_t dst_pos, + size_t len, unsigned int flags) +{ + ssize_t ssz; + + lockdep_off(); + ssz = vfs_copy_file_range(src, src_pos, dst, dst_pos, len, flags); + lockdep_on(); + + return ssz; +} + +/* ---------------------------------------------------------------------- */ + +static inline loff_t vfsub_llseek(struct file *file, loff_t offset, int origin) +{ + loff_t err; + + lockdep_off(); + err = vfs_llseek(file, offset, origin); + lockdep_on(); + return err; +} + +/* ---------------------------------------------------------------------- */ + +int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_sio_rmdir(struct inode *dir, struct path *path); +int vfsub_sio_notify_change(struct path *path, struct iattr *ia, + struct inode **delegated_inode); +int vfsub_notify_change(struct path *path, struct iattr *ia, + struct inode **delegated_inode); +int vfsub_unlink(struct inode *dir, struct path *path, + struct inode **delegated_inode, int force); + +static inline int vfsub_getattr(const struct path *path, struct kstat *st) +{ + return vfs_getattr(path, st, STATX_BASIC_STATS, AT_STATX_SYNC_AS_STAT); +} + +/* ---------------------------------------------------------------------- */ + +static inline int vfsub_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags) +{ + int err; + + lockdep_off(); + err = vfs_setxattr(dentry, name, value, size, flags); + lockdep_on(); + + return err; +} + +static inline int vfsub_removexattr(struct dentry *dentry, const char *name) +{ + int err; + + lockdep_off(); + err = vfs_removexattr(dentry, name); + lockdep_on(); + + return err; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/wbr_policy.c +++ linux-aws-4.15.0/fs/aufs/wbr_policy.c @@ -0,0 +1,830 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * policies for selecting one among multiple writable branches + */ + +#include +#include "aufs.h" + +/* subset of cpup_attr() */ +static noinline_for_stack +int au_cpdown_attr(struct path *h_path, struct dentry *h_src) +{ + int err, sbits; + struct iattr ia; + struct inode *h_isrc; + + h_isrc = d_inode(h_src); + ia.ia_valid = ATTR_FORCE | ATTR_MODE | ATTR_UID | ATTR_GID; + ia.ia_mode = h_isrc->i_mode; + ia.ia_uid = h_isrc->i_uid; + ia.ia_gid = h_isrc->i_gid; + sbits = !!(ia.ia_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(d_inode(h_path->dentry), h_isrc->i_flags); + /* no delegation since it is just created */ + err = vfsub_sio_notify_change(h_path, &ia, /*delegated*/NULL); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path->dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; + err = vfsub_sio_notify_change(h_path, &ia, /*delegated*/NULL); + } + + return err; +} + +#define AuCpdown_PARENT_OPQ 1 +#define AuCpdown_WHED (1 << 1) +#define AuCpdown_MADE_DIR (1 << 2) +#define AuCpdown_DIROPQ (1 << 3) +#define au_ftest_cpdown(flags, name) ((flags) & AuCpdown_##name) +#define au_fset_cpdown(flags, name) \ + do { (flags) |= AuCpdown_##name; } while (0) +#define au_fclr_cpdown(flags, name) \ + do { (flags) &= ~AuCpdown_##name; } while (0) + +static int au_cpdown_dir_opq(struct dentry *dentry, aufs_bindex_t bdst, + unsigned int *flags) +{ + int err; + struct dentry *opq_dentry; + + opq_dentry = au_diropq_create(dentry, bdst); + err = PTR_ERR(opq_dentry); + if (IS_ERR(opq_dentry)) + goto out; + dput(opq_dentry); + au_fset_cpdown(*flags, DIROPQ); + +out: + return err; +} + +static int au_cpdown_dir_wh(struct dentry *dentry, struct dentry *h_parent, + struct inode *dir, aufs_bindex_t bdst) +{ + int err; + struct path h_path; + struct au_branch *br; + + br = au_sbr(dentry->d_sb, bdst); + h_path.dentry = au_wh_lkup(h_parent, &dentry->d_name, br); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + err = 0; + if (d_is_positive(h_path.dentry)) { + h_path.mnt = au_br_mnt(br); + err = au_wh_unlink_dentry(au_h_iptr(dir, bdst), &h_path, + dentry); + } + dput(h_path.dentry); + +out: + return err; +} + +static int au_cpdown_dir(struct dentry *dentry, aufs_bindex_t bdst, + struct au_pin *pin, + struct dentry *h_parent, void *arg) +{ + int err, rerr; + aufs_bindex_t bopq, btop; + struct path h_path; + struct dentry *parent; + struct inode *h_dir, *h_inode, *inode, *dir; + unsigned int *flags = arg; + + btop = au_dbtop(dentry); + /* dentry is di-locked */ + parent = dget_parent(dentry); + dir = d_inode(parent); + h_dir = d_inode(h_parent); + AuDebugOn(h_dir != au_h_iptr(dir, bdst)); + IMustLock(h_dir); + + err = au_lkup_neg(dentry, bdst, /*wh*/0); + if (unlikely(err < 0)) + goto out; + h_path.dentry = au_h_dptr(dentry, bdst); + h_path.mnt = au_sbr_mnt(dentry->d_sb, bdst); + err = vfsub_sio_mkdir(au_h_iptr(dir, bdst), &h_path, + S_IRWXU | S_IRUGO | S_IXUGO); + if (unlikely(err)) + goto out_put; + au_fset_cpdown(*flags, MADE_DIR); + + bopq = au_dbdiropq(dentry); + au_fclr_cpdown(*flags, WHED); + au_fclr_cpdown(*flags, DIROPQ); + if (au_dbwh(dentry) == bdst) + au_fset_cpdown(*flags, WHED); + if (!au_ftest_cpdown(*flags, PARENT_OPQ) && bopq <= bdst) + au_fset_cpdown(*flags, PARENT_OPQ); + h_inode = d_inode(h_path.dentry); + inode_lock_nested(h_inode, AuLsc_I_CHILD); + if (au_ftest_cpdown(*flags, WHED)) { + err = au_cpdown_dir_opq(dentry, bdst, flags); + if (unlikely(err)) { + inode_unlock(h_inode); + goto out_dir; + } + } + + err = au_cpdown_attr(&h_path, au_h_dptr(dentry, btop)); + inode_unlock(h_inode); + if (unlikely(err)) + goto out_opq; + + if (au_ftest_cpdown(*flags, WHED)) { + err = au_cpdown_dir_wh(dentry, h_parent, dir, bdst); + if (unlikely(err)) + goto out_opq; + } + + inode = d_inode(dentry); + if (au_ibbot(inode) < bdst) + au_set_ibbot(inode, bdst); + au_set_h_iptr(inode, bdst, au_igrab(h_inode), + au_hi_flags(inode, /*isdir*/1)); + au_fhsm_wrote(dentry->d_sb, bdst, /*force*/0); + goto out; /* success */ + + /* revert */ +out_opq: + if (au_ftest_cpdown(*flags, DIROPQ)) { + inode_lock_nested(h_inode, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bdst); + inode_unlock(h_inode); + if (unlikely(rerr)) { + AuIOErr("failed removing diropq for %pd b%d (%d)\n", + dentry, bdst, rerr); + err = -EIO; + goto out; + } + } +out_dir: + if (au_ftest_cpdown(*flags, MADE_DIR)) { + rerr = vfsub_sio_rmdir(au_h_iptr(dir, bdst), &h_path); + if (unlikely(rerr)) { + AuIOErr("failed removing %pd b%d (%d)\n", + dentry, bdst, rerr); + err = -EIO; + } + } +out_put: + au_set_h_dptr(dentry, bdst, NULL); + if (au_dbbot(dentry) == bdst) + au_update_dbbot(dentry); +out: + dput(parent); + return err; +} + +int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + int err; + unsigned int flags; + + flags = 0; + err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &flags); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for create */ + +int au_wbr_nonopq(struct dentry *dentry, aufs_bindex_t bindex) +{ + int err, i, j, ndentry; + aufs_bindex_t bopq; + struct au_dcsub_pages dpages; + struct au_dpage *dpage; + struct dentry **dentries, *parent, *d; + + err = au_dpages_init(&dpages, GFP_NOFS); + if (unlikely(err)) + goto out; + parent = dget_parent(dentry); + err = au_dcsub_pages_rev_aufs(&dpages, parent, /*do_include*/0); + if (unlikely(err)) + goto out_free; + + err = bindex; + for (i = 0; i < dpages.ndpage; i++) { + dpage = dpages.dpages + i; + dentries = dpage->dentries; + ndentry = dpage->ndentry; + for (j = 0; j < ndentry; j++) { + d = dentries[j]; + di_read_lock_parent2(d, !AuLock_IR); + bopq = au_dbdiropq(d); + di_read_unlock(d, !AuLock_IR); + if (bopq >= 0 && bopq < err) + err = bopq; + } + } + +out_free: + dput(parent); + au_dpages_free(&dpages); +out: + return err; +} + +static int au_wbr_bu(struct super_block *sb, aufs_bindex_t bindex) +{ + for (; bindex >= 0; bindex--) + if (!au_br_rdonly(au_sbr(sb, bindex))) + return bindex; + return -EROFS; +} + +/* top down parent */ +static int au_wbr_create_tdp(struct dentry *dentry, + unsigned int flags __maybe_unused) +{ + int err; + aufs_bindex_t btop, bindex; + struct super_block *sb; + struct dentry *parent, *h_parent; + + sb = dentry->d_sb; + btop = au_dbtop(dentry); + err = btop; + if (!au_br_rdonly(au_sbr(sb, btop))) + goto out; + + err = -EROFS; + parent = dget_parent(dentry); + for (bindex = au_dbtop(parent); bindex < btop; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || d_is_negative(h_parent)) + continue; + + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = bindex; + break; + } + } + dput(parent); + + /* bottom up here */ + if (unlikely(err < 0)) { + err = au_wbr_bu(sb, btop - 1); + if (err >= 0) + err = au_wbr_nonopq(dentry, err); + } + +out: + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* an exception for the policy other than tdp */ +static int au_wbr_create_exp(struct dentry *dentry) +{ + int err; + aufs_bindex_t bwh, bdiropq; + struct dentry *parent; + + err = -1; + bwh = au_dbwh(dentry); + parent = dget_parent(dentry); + bdiropq = au_dbdiropq(parent); + if (bwh >= 0) { + if (bdiropq >= 0) + err = min(bdiropq, bwh); + else + err = bwh; + AuDbg("%d\n", err); + } else if (bdiropq >= 0) { + err = bdiropq; + AuDbg("%d\n", err); + } + dput(parent); + + if (err >= 0) + err = au_wbr_nonopq(dentry, err); + + if (err >= 0 && au_br_rdonly(au_sbr(dentry->d_sb, err))) + err = -1; + + AuDbg("%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* round robin */ +static int au_wbr_create_init_rr(struct super_block *sb) +{ + int err; + + err = au_wbr_bu(sb, au_sbbot(sb)); + atomic_set(&au_sbi(sb)->si_wbr_rr_next, -err); /* less important */ + /* smp_mb(); */ + + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_rr(struct dentry *dentry, unsigned int flags) +{ + int err, nbr; + unsigned int u; + aufs_bindex_t bindex, bbot; + struct super_block *sb; + atomic_t *next; + + err = au_wbr_create_exp(dentry); + if (err >= 0) + goto out; + + sb = dentry->d_sb; + next = &au_sbi(sb)->si_wbr_rr_next; + bbot = au_sbbot(sb); + nbr = bbot + 1; + for (bindex = 0; bindex <= bbot; bindex++) { + if (!au_ftest_wbr(flags, DIR)) { + err = atomic_dec_return(next) + 1; + /* modulo for 0 is meaningless */ + if (unlikely(!err)) + err = atomic_dec_return(next) + 1; + } else + err = atomic_read(next); + AuDbg("%d\n", err); + u = err; + err = u % nbr; + AuDbg("%d\n", err); + if (!au_br_rdonly(au_sbr(sb, err))) + break; + err = -EROFS; + } + + if (err >= 0) + err = au_wbr_nonopq(dentry, err); + +out: + AuDbg("%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* most free space */ +static void au_mfs(struct dentry *dentry, struct dentry *parent) +{ + struct super_block *sb; + struct au_branch *br; + struct au_wbr_mfs *mfs; + struct dentry *h_parent; + aufs_bindex_t bindex, bbot; + int err; + unsigned long long b, bavail; + struct path h_path; + /* reduce the stack usage */ + struct kstatfs *st; + + st = kmalloc(sizeof(*st), GFP_NOFS); + if (unlikely(!st)) { + AuWarn1("failed updating mfs(%d), ignored\n", -ENOMEM); + return; + } + + bavail = 0; + sb = dentry->d_sb; + mfs = &au_sbi(sb)->si_wbr_mfs; + MtxMustLock(&mfs->mfs_lock); + mfs->mfs_bindex = -EROFS; + mfs->mfsrr_bytes = 0; + if (!parent) { + bindex = 0; + bbot = au_sbbot(sb); + } else { + bindex = au_dbtop(parent); + bbot = au_dbtaildir(parent); + } + + for (; bindex <= bbot; bindex++) { + if (parent) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || d_is_negative(h_parent)) + continue; + } + br = au_sbr(sb, bindex); + if (au_br_rdonly(br)) + continue; + + /* sb->s_root for NFS is unreliable */ + h_path.mnt = au_br_mnt(br); + h_path.dentry = h_path.mnt->mnt_root; + err = vfs_statfs(&h_path, st); + if (unlikely(err)) { + AuWarn1("failed statfs, b%d, %d\n", bindex, err); + continue; + } + + /* when the available size is equal, select the lower one */ + BUILD_BUG_ON(sizeof(b) < sizeof(st->f_bavail) + || sizeof(b) < sizeof(st->f_bsize)); + b = st->f_bavail * st->f_bsize; + br->br_wbr->wbr_bytes = b; + if (b >= bavail) { + bavail = b; + mfs->mfs_bindex = bindex; + mfs->mfs_jiffy = jiffies; + } + } + + mfs->mfsrr_bytes = bavail; + AuDbg("b%d\n", mfs->mfs_bindex); + kfree(st); +} + +static int au_wbr_create_mfs(struct dentry *dentry, unsigned int flags) +{ + int err; + struct dentry *parent; + struct super_block *sb; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_exp(dentry); + if (err >= 0) + goto out; + + sb = dentry->d_sb; + parent = NULL; + if (au_ftest_wbr(flags, PARENT)) + parent = dget_parent(dentry); + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + if (time_after(jiffies, mfs->mfs_jiffy + mfs->mfs_expire) + || mfs->mfs_bindex < 0 + || au_br_rdonly(au_sbr(sb, mfs->mfs_bindex))) + au_mfs(dentry, parent); + mutex_unlock(&mfs->mfs_lock); + err = mfs->mfs_bindex; + dput(parent); + + if (err >= 0) + err = au_wbr_nonopq(dentry, err); + +out: + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_init_mfs(struct super_block *sb) +{ + struct au_wbr_mfs *mfs; + + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_init(&mfs->mfs_lock); + mfs->mfs_jiffy = 0; + mfs->mfs_bindex = -EROFS; + + return 0; +} + +static int au_wbr_create_fin_mfs(struct super_block *sb __maybe_unused) +{ + mutex_destroy(&au_sbi(sb)->si_wbr_mfs.mfs_lock); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +/* top down regardless parent, and then mfs */ +static int au_wbr_create_tdmfs(struct dentry *dentry, + unsigned int flags __maybe_unused) +{ + int err; + aufs_bindex_t bwh, btail, bindex, bfound, bmfs; + unsigned long long watermark; + struct super_block *sb; + struct au_wbr_mfs *mfs; + struct au_branch *br; + struct dentry *parent; + + sb = dentry->d_sb; + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + if (time_after(jiffies, mfs->mfs_jiffy + mfs->mfs_expire) + || mfs->mfs_bindex < 0) + au_mfs(dentry, /*parent*/NULL); + watermark = mfs->mfsrr_watermark; + bmfs = mfs->mfs_bindex; + mutex_unlock(&mfs->mfs_lock); + + /* another style of au_wbr_create_exp() */ + bwh = au_dbwh(dentry); + parent = dget_parent(dentry); + btail = au_dbtaildir(parent); + if (bwh >= 0 && bwh < btail) + btail = bwh; + + err = au_wbr_nonopq(dentry, btail); + if (unlikely(err < 0)) + goto out; + btail = err; + bfound = -1; + for (bindex = 0; bindex <= btail; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_rdonly(br)) + continue; + if (br->br_wbr->wbr_bytes > watermark) { + bfound = bindex; + break; + } + } + err = bfound; + if (err < 0) + err = bmfs; + +out: + dput(parent); + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* most free space and then round robin */ +static int au_wbr_create_mfsrr(struct dentry *dentry, unsigned int flags) +{ + int err; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_mfs(dentry, flags); + if (err >= 0) { + mfs = &au_sbi(dentry->d_sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + if (mfs->mfsrr_bytes < mfs->mfsrr_watermark) + err = au_wbr_create_rr(dentry, flags); + mutex_unlock(&mfs->mfs_lock); + } + + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_create_init_mfsrr(struct super_block *sb) +{ + int err; + + au_wbr_create_init_mfs(sb); /* ignore */ + err = au_wbr_create_init_rr(sb); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* top down parent and most free space */ +static int au_wbr_create_pmfs(struct dentry *dentry, unsigned int flags) +{ + int err, e2; + unsigned long long b; + aufs_bindex_t bindex, btop, bbot; + struct super_block *sb; + struct dentry *parent, *h_parent; + struct au_branch *br; + + err = au_wbr_create_tdp(dentry, flags); + if (unlikely(err < 0)) + goto out; + parent = dget_parent(dentry); + btop = au_dbtop(parent); + bbot = au_dbtaildir(parent); + if (btop == bbot) + goto out_parent; /* success */ + + e2 = au_wbr_create_mfs(dentry, flags); + if (e2 < 0) + goto out_parent; /* success */ + + /* when the available size is equal, select upper one */ + sb = dentry->d_sb; + br = au_sbr(sb, err); + b = br->br_wbr->wbr_bytes; + AuDbg("b%d, %llu\n", err, b); + + for (bindex = btop; bindex <= bbot; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || d_is_negative(h_parent)) + continue; + + br = au_sbr(sb, bindex); + if (!au_br_rdonly(br) && br->br_wbr->wbr_bytes > b) { + b = br->br_wbr->wbr_bytes; + err = bindex; + AuDbg("b%d, %llu\n", err, b); + } + } + + if (err >= 0) + err = au_wbr_nonopq(dentry, err); + +out_parent: + dput(parent); +out: + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * - top down parent + * - most free space with parent + * - most free space round-robin regardless parent + */ +static int au_wbr_create_pmfsrr(struct dentry *dentry, unsigned int flags) +{ + int err; + unsigned long long watermark; + struct super_block *sb; + struct au_branch *br; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_pmfs(dentry, flags | AuWbr_PARENT); + if (unlikely(err < 0)) + goto out; + + sb = dentry->d_sb; + br = au_sbr(sb, err); + mfs = &au_sbi(sb)->si_wbr_mfs; + mutex_lock(&mfs->mfs_lock); + watermark = mfs->mfsrr_watermark; + mutex_unlock(&mfs->mfs_lock); + if (br->br_wbr->wbr_bytes < watermark) + /* regardless the parent dir */ + err = au_wbr_create_mfsrr(dentry, flags); + +out: + AuDbg("b%d\n", err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for copyup */ + +/* top down parent */ +static int au_wbr_copyup_tdp(struct dentry *dentry) +{ + return au_wbr_create_tdp(dentry, /*flags, anything is ok*/0); +} + +/* bottom up parent */ +static int au_wbr_copyup_bup(struct dentry *dentry) +{ + int err; + aufs_bindex_t bindex, btop; + struct dentry *parent, *h_parent; + struct super_block *sb; + + err = -EROFS; + sb = dentry->d_sb; + parent = dget_parent(dentry); + btop = au_dbtop(parent); + for (bindex = au_dbtop(dentry); bindex >= btop; bindex--) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || d_is_negative(h_parent)) + continue; + + if (!au_br_rdonly(au_sbr(sb, bindex))) { + err = bindex; + break; + } + } + dput(parent); + + /* bottom up here */ + if (unlikely(err < 0)) + err = au_wbr_bu(sb, btop - 1); + + AuDbg("b%d\n", err); + return err; +} + +/* bottom up */ +int au_wbr_do_copyup_bu(struct dentry *dentry, aufs_bindex_t btop) +{ + int err; + + err = au_wbr_bu(dentry->d_sb, btop); + AuDbg("b%d\n", err); + if (err > btop) + err = au_wbr_nonopq(dentry, err); + + AuDbg("b%d\n", err); + return err; +} + +static int au_wbr_copyup_bu(struct dentry *dentry) +{ + int err; + aufs_bindex_t btop; + + btop = au_dbtop(dentry); + err = au_wbr_do_copyup_bu(dentry, btop); + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct au_wbr_copyup_operations au_wbr_copyup_ops[] = { + [AuWbrCopyup_TDP] = { + .copyup = au_wbr_copyup_tdp + }, + [AuWbrCopyup_BUP] = { + .copyup = au_wbr_copyup_bup + }, + [AuWbrCopyup_BU] = { + .copyup = au_wbr_copyup_bu + } +}; + +struct au_wbr_create_operations au_wbr_create_ops[] = { + [AuWbrCreate_TDP] = { + .create = au_wbr_create_tdp + }, + [AuWbrCreate_RR] = { + .create = au_wbr_create_rr, + .init = au_wbr_create_init_rr + }, + [AuWbrCreate_MFS] = { + .create = au_wbr_create_mfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSV] = { + .create = au_wbr_create_mfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSRR] = { + .create = au_wbr_create_mfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_MFSRRV] = { + .create = au_wbr_create_mfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_TDMFS] = { + .create = au_wbr_create_tdmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_TDMFSV] = { + .create = au_wbr_create_tdmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFS] = { + .create = au_wbr_create_pmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFSV] = { + .create = au_wbr_create_pmfs, + .init = au_wbr_create_init_mfs, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFSRR] = { + .create = au_wbr_create_pmfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + }, + [AuWbrCreate_PMFSRRV] = { + .create = au_wbr_create_pmfsrr, + .init = au_wbr_create_init_mfsrr, + .fin = au_wbr_create_fin_mfs + } +}; --- linux-aws-4.15.0.orig/fs/aufs/whout.c +++ linux-aws-4.15.0/fs/aufs/whout.c @@ -0,0 +1,1061 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * whiteout for logical deletion and opaque directory + */ + +#include "aufs.h" + +#define WH_MASK S_IRUGO + +/* + * If a directory contains this file, then it is opaque. We start with the + * .wh. flag so that it is blocked by lookup. + */ +static struct qstr diropq_name = QSTR_INIT(AUFS_WH_DIROPQ, + sizeof(AUFS_WH_DIROPQ) - 1); + +/* + * generate whiteout name, which is NOT terminated by NULL. + * @name: original d_name.name + * @len: original d_name.len + * @wh: whiteout qstr + * returns zero when succeeds, otherwise error. + * succeeded value as wh->name should be freed by kfree(). + */ +int au_wh_name_alloc(struct qstr *wh, const struct qstr *name) +{ + char *p; + + if (unlikely(name->len > PATH_MAX - AUFS_WH_PFX_LEN)) + return -ENAMETOOLONG; + + wh->len = name->len + AUFS_WH_PFX_LEN; + p = kmalloc(wh->len, GFP_NOFS); + wh->name = p; + if (p) { + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + memcpy(p + AUFS_WH_PFX_LEN, name->name, name->len); + /* smp_mb(); */ + return 0; + } + return -ENOMEM; +} + +/* ---------------------------------------------------------------------- */ + +/* + * test if the @wh_name exists under @h_parent. + * @try_sio specifies the necessary of super-io. + */ +int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, int try_sio) +{ + int err; + struct dentry *wh_dentry; + + if (!try_sio) + wh_dentry = vfsub_lkup_one(wh_name, h_parent); + else + wh_dentry = au_sio_lkup_one(wh_name, h_parent); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) { + if (err == -ENAMETOOLONG) + err = 0; + goto out; + } + + err = 0; + if (d_is_negative(wh_dentry)) + goto out_wh; /* success */ + + err = 1; + if (d_is_reg(wh_dentry)) + goto out_wh; /* success */ + + err = -EIO; + AuIOErr("%pd Invalid whiteout entry type 0%o.\n", + wh_dentry, d_inode(wh_dentry)->i_mode); + +out_wh: + dput(wh_dentry); +out: + return err; +} + +/* + * test if the @h_dentry sets opaque or not. + */ +int au_diropq_test(struct dentry *h_dentry) +{ + int err; + struct inode *h_dir; + + h_dir = d_inode(h_dentry); + err = au_wh_test(h_dentry, &diropq_name, + au_test_h_perm_sio(h_dir, MAY_EXEC)); + return err; +} + +/* + * returns a negative dentry whose name is unique and temporary. + */ +struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, + struct qstr *prefix) +{ + struct dentry *dentry; + int i; + char defname[NAME_MAX - AUFS_MAX_NAMELEN + DNAME_INLINE_LEN + 1], + *name, *p; + /* strict atomic_t is unnecessary here */ + static unsigned short cnt; + struct qstr qs; + + BUILD_BUG_ON(sizeof(cnt) * 2 > AUFS_WH_TMP_LEN); + + name = defname; + qs.len = sizeof(defname) - DNAME_INLINE_LEN + prefix->len - 1; + if (unlikely(prefix->len > DNAME_INLINE_LEN)) { + dentry = ERR_PTR(-ENAMETOOLONG); + if (unlikely(qs.len > NAME_MAX)) + goto out; + dentry = ERR_PTR(-ENOMEM); + name = kmalloc(qs.len + 1, GFP_NOFS); + if (unlikely(!name)) + goto out; + } + + /* doubly whiteout-ed */ + memcpy(name, AUFS_WH_PFX AUFS_WH_PFX, AUFS_WH_PFX_LEN * 2); + p = name + AUFS_WH_PFX_LEN * 2; + memcpy(p, prefix->name, prefix->len); + p += prefix->len; + *p++ = '.'; + AuDebugOn(name + qs.len + 1 - p <= AUFS_WH_TMP_LEN); + + qs.name = name; + for (i = 0; i < 3; i++) { + sprintf(p, "%.*x", AUFS_WH_TMP_LEN, cnt++); + dentry = au_sio_lkup_one(&qs, h_parent); + if (IS_ERR(dentry) || d_is_negative(dentry)) + goto out_name; + dput(dentry); + } + /* pr_warn("could not get random name\n"); */ + dentry = ERR_PTR(-EEXIST); + AuDbg("%.*s\n", AuLNPair(&qs)); + BUG(); + +out_name: + if (name != defname) + kfree(name); +out: + AuTraceErrPtr(dentry); + return dentry; +} + +/* + * rename the @h_dentry on @br to the whiteouted temporary name. + */ +int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = au_br_mnt(br) + }; + struct inode *h_dir, *delegated; + struct dentry *h_parent; + + h_parent = h_dentry->d_parent; /* dir inode is locked */ + h_dir = d_inode(h_parent); + IMustLock(h_dir); + + h_path.dentry = au_whtmp_lkup(h_parent, br, &h_dentry->d_name); + err = PTR_ERR(h_path.dentry); + if (IS_ERR(h_path.dentry)) + goto out; + + /* under the same dir, no need to lock_rename() */ + delegated = NULL; + err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path, &delegated, + /*flags*/0); + AuTraceErr(err); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal rename\n"); + iput(delegated); + } + dput(h_path.dentry); + +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * functions for removing a whiteout + */ + +static int do_unlink_wh(struct inode *h_dir, struct path *h_path) +{ + int err, force; + struct inode *delegated; + + /* + * forces superio when the dir has a sticky bit. + * this may be a violation of unix fs semantics. + */ + force = (h_dir->i_mode & S_ISVTX) + && !uid_eq(current_fsuid(), d_inode(h_path->dentry)->i_uid); + delegated = NULL; + err = vfsub_unlink(h_dir, h_path, &delegated, force); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + return err; +} + +int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, + struct dentry *dentry) +{ + int err; + + err = do_unlink_wh(h_dir, h_path); + if (!err && dentry) + au_set_dbwh(dentry, -1); + + return err; +} + +static int unlink_wh_name(struct dentry *h_parent, struct qstr *wh, + struct au_branch *br) +{ + int err; + struct path h_path = { + .mnt = au_br_mnt(br) + }; + + err = 0; + h_path.dentry = vfsub_lkup_one(wh, h_parent); + if (IS_ERR(h_path.dentry)) + err = PTR_ERR(h_path.dentry); + else { + if (d_is_reg(h_path.dentry)) + err = do_unlink_wh(d_inode(h_parent), &h_path); + dput(h_path.dentry); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * initialize/clean whiteout for a branch + */ + +static void au_wh_clean(struct inode *h_dir, struct path *whpath, + const int isdir) +{ + int err; + struct inode *delegated; + + if (d_is_negative(whpath->dentry)) + return; + + if (isdir) + err = vfsub_rmdir(h_dir, whpath); + else { + delegated = NULL; + err = vfsub_unlink(h_dir, whpath, &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + } + if (unlikely(err)) + pr_warn("failed removing %pd (%d), ignored.\n", + whpath->dentry, err); +} + +static int test_linkable(struct dentry *h_root) +{ + struct inode *h_dir = d_inode(h_root); + + if (h_dir->i_op->link) + return 0; + + pr_err("%pd (%s) doesn't support link(2), use noplink and rw+nolwh\n", + h_root, au_sbtype(h_root->d_sb)); + return -ENOSYS; +} + +/* todo: should this mkdir be done in /sbin/mount.aufs helper? */ +static int au_whdir(struct inode *h_dir, struct path *path) +{ + int err; + + err = -EEXIST; + if (d_is_negative(path->dentry)) { + int mode = S_IRWXU; + + if (au_test_nfs(path->dentry->d_sb)) + mode |= S_IXUGO; + err = vfsub_mkdir(h_dir, path, mode); + } else if (d_is_dir(path->dentry)) + err = 0; + else + pr_err("unknown %pd exists\n", path->dentry); + + return err; +} + +struct au_wh_base { + const struct qstr *name; + struct dentry *dentry; +}; + +static void au_wh_init_ro(struct inode *h_dir, struct au_wh_base base[], + struct path *h_path) +{ + h_path->dentry = base[AuBrWh_BASE].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/0); + h_path->dentry = base[AuBrWh_PLINK].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/1); + h_path->dentry = base[AuBrWh_ORPH].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/1); +} + +/* + * returns tri-state, + * minus: error, caller should print the message + * zero: succuess + * plus: error, caller should NOT print the message + */ +static int au_wh_init_rw_nolink(struct dentry *h_root, struct au_wbr *wbr, + int do_plink, struct au_wh_base base[], + struct path *h_path) +{ + int err; + struct inode *h_dir; + + h_dir = d_inode(h_root); + h_path->dentry = base[AuBrWh_BASE].dentry; + au_wh_clean(h_dir, h_path, /*isdir*/0); + h_path->dentry = base[AuBrWh_PLINK].dentry; + if (do_plink) { + err = test_linkable(h_root); + if (unlikely(err)) { + err = 1; + goto out; + } + + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); + } else + au_wh_clean(h_dir, h_path, /*isdir*/1); + h_path->dentry = base[AuBrWh_ORPH].dentry; + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); + +out: + return err; +} + +/* + * for the moment, aufs supports the branch filesystem which does not support + * link(2). testing on FAT which does not support i_op->setattr() fully either, + * copyup failed. finally, such filesystem will not be used as the writable + * branch. + * + * returns tri-state, see above. + */ +static int au_wh_init_rw(struct dentry *h_root, struct au_wbr *wbr, + int do_plink, struct au_wh_base base[], + struct path *h_path) +{ + int err; + struct inode *h_dir; + + WbrWhMustWriteLock(wbr); + + err = test_linkable(h_root); + if (unlikely(err)) { + err = 1; + goto out; + } + + /* + * todo: should this create be done in /sbin/mount.aufs helper? + */ + err = -EEXIST; + h_dir = d_inode(h_root); + if (d_is_negative(base[AuBrWh_BASE].dentry)) { + h_path->dentry = base[AuBrWh_BASE].dentry; + err = vfsub_create(h_dir, h_path, WH_MASK, /*want_excl*/true); + } else if (d_is_reg(base[AuBrWh_BASE].dentry)) + err = 0; + else + pr_err("unknown %pd2 exists\n", base[AuBrWh_BASE].dentry); + if (unlikely(err)) + goto out; + + h_path->dentry = base[AuBrWh_PLINK].dentry; + if (do_plink) { + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_plink = dget(base[AuBrWh_PLINK].dentry); + } else + au_wh_clean(h_dir, h_path, /*isdir*/1); + wbr->wbr_whbase = dget(base[AuBrWh_BASE].dentry); + + h_path->dentry = base[AuBrWh_ORPH].dentry; + err = au_whdir(h_dir, h_path); + if (unlikely(err)) + goto out; + wbr->wbr_orph = dget(base[AuBrWh_ORPH].dentry); + +out: + return err; +} + +/* + * initialize the whiteout base file/dir for @br. + */ +int au_wh_init(struct au_branch *br, struct super_block *sb) +{ + int err, i; + const unsigned char do_plink + = !!au_opt_test(au_mntflags(sb), PLINK); + struct inode *h_dir; + struct path path = br->br_path; + struct dentry *h_root = path.dentry; + struct au_wbr *wbr = br->br_wbr; + static const struct qstr base_name[] = { + [AuBrWh_BASE] = QSTR_INIT(AUFS_BASE_NAME, + sizeof(AUFS_BASE_NAME) - 1), + [AuBrWh_PLINK] = QSTR_INIT(AUFS_PLINKDIR_NAME, + sizeof(AUFS_PLINKDIR_NAME) - 1), + [AuBrWh_ORPH] = QSTR_INIT(AUFS_ORPHDIR_NAME, + sizeof(AUFS_ORPHDIR_NAME) - 1) + }; + struct au_wh_base base[] = { + [AuBrWh_BASE] = { + .name = base_name + AuBrWh_BASE, + .dentry = NULL + }, + [AuBrWh_PLINK] = { + .name = base_name + AuBrWh_PLINK, + .dentry = NULL + }, + [AuBrWh_ORPH] = { + .name = base_name + AuBrWh_ORPH, + .dentry = NULL + } + }; + + if (wbr) + WbrWhMustWriteLock(wbr); + + for (i = 0; i < AuBrWh_Last; i++) { + /* doubly whiteouted */ + struct dentry *d; + + d = au_wh_lkup(h_root, (void *)base[i].name, br); + err = PTR_ERR(d); + if (IS_ERR(d)) + goto out; + + base[i].dentry = d; + AuDebugOn(wbr + && wbr->wbr_wh[i] + && wbr->wbr_wh[i] != base[i].dentry); + } + + if (wbr) + for (i = 0; i < AuBrWh_Last; i++) { + dput(wbr->wbr_wh[i]); + wbr->wbr_wh[i] = NULL; + } + + err = 0; + if (!au_br_writable(br->br_perm)) { + h_dir = d_inode(h_root); + au_wh_init_ro(h_dir, base, &path); + } else if (!au_br_wh_linkable(br->br_perm)) { + err = au_wh_init_rw_nolink(h_root, wbr, do_plink, base, &path); + if (err > 0) + goto out; + else if (err) + goto out_err; + } else { + err = au_wh_init_rw(h_root, wbr, do_plink, base, &path); + if (err > 0) + goto out; + else if (err) + goto out_err; + } + goto out; /* success */ + +out_err: + pr_err("an error(%d) on the writable branch %pd(%s)\n", + err, h_root, au_sbtype(h_root->d_sb)); +out: + for (i = 0; i < AuBrWh_Last; i++) + dput(base[i].dentry); + return err; +} + +/* ---------------------------------------------------------------------- */ +/* + * whiteouts are all hard-linked usually. + * when its link count reaches a ceiling, we create a new whiteout base + * asynchronously. + */ + +struct reinit_br_wh { + struct super_block *sb; + struct au_branch *br; +}; + +static void reinit_br_wh(void *arg) +{ + int err; + aufs_bindex_t bindex; + struct path h_path; + struct reinit_br_wh *a = arg; + struct au_wbr *wbr; + struct inode *dir, *delegated; + struct dentry *h_root; + struct au_hinode *hdir; + + err = 0; + wbr = a->br->br_wbr; + /* big aufs lock */ + si_noflush_write_lock(a->sb); + if (!au_br_writable(a->br->br_perm)) + goto out; + bindex = au_br_index(a->sb, a->br->br_id); + if (unlikely(bindex < 0)) + goto out; + + di_read_lock_parent(a->sb->s_root, AuLock_IR); + dir = d_inode(a->sb->s_root); + hdir = au_hi(dir, bindex); + h_root = au_h_dptr(a->sb->s_root, bindex); + AuDebugOn(h_root != au_br_dentry(a->br)); + + au_hn_inode_lock_nested(hdir, AuLsc_I_PARENT); + wbr_wh_write_lock(wbr); + err = au_h_verify(wbr->wbr_whbase, au_opt_udba(a->sb), hdir->hi_inode, + h_root, a->br); + if (!err) { + h_path.dentry = wbr->wbr_whbase; + h_path.mnt = au_br_mnt(a->br); + delegated = NULL; + err = vfsub_unlink(hdir->hi_inode, &h_path, &delegated, + /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + } else { + pr_warn("%pd is moved, ignored\n", wbr->wbr_whbase); + err = 0; + } + dput(wbr->wbr_whbase); + wbr->wbr_whbase = NULL; + if (!err) + err = au_wh_init(a->br, a->sb); + wbr_wh_write_unlock(wbr); + au_hn_inode_unlock(hdir); + di_read_unlock(a->sb->s_root, AuLock_IR); + if (!err) + au_fhsm_wrote(a->sb, bindex, /*force*/0); + +out: + if (wbr) + atomic_dec(&wbr->wbr_wh_running); + au_br_put(a->br); + si_write_unlock(a->sb); + au_nwt_done(&au_sbi(a->sb)->si_nowait); + kfree(arg); + if (unlikely(err)) + AuIOErr("err %d\n", err); +} + +static void kick_reinit_br_wh(struct super_block *sb, struct au_branch *br) +{ + int do_dec, wkq_err; + struct reinit_br_wh *arg; + + do_dec = 1; + if (atomic_inc_return(&br->br_wbr->wbr_wh_running) != 1) + goto out; + + /* ignore ENOMEM */ + arg = kmalloc(sizeof(*arg), GFP_NOFS); + if (arg) { + /* + * dec(wh_running), kfree(arg) and dec(br_count) + * in reinit function + */ + arg->sb = sb; + arg->br = br; + au_br_get(br); + wkq_err = au_wkq_nowait(reinit_br_wh, arg, sb, /*flags*/0); + if (unlikely(wkq_err)) { + atomic_dec(&br->br_wbr->wbr_wh_running); + au_br_put(br); + kfree(arg); + } + do_dec = 0; + } + +out: + if (do_dec) + atomic_dec(&br->br_wbr->wbr_wh_running); +} + +/* ---------------------------------------------------------------------- */ + +/* + * create the whiteout @wh. + */ +static int link_or_create_wh(struct super_block *sb, aufs_bindex_t bindex, + struct dentry *wh) +{ + int err; + struct path h_path = { + .dentry = wh + }; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *h_parent; + struct inode *h_dir, *delegated; + + h_parent = wh->d_parent; /* dir inode is locked */ + h_dir = d_inode(h_parent); + IMustLock(h_dir); + + br = au_sbr(sb, bindex); + h_path.mnt = au_br_mnt(br); + wbr = br->br_wbr; + wbr_wh_read_lock(wbr); + if (wbr->wbr_whbase) { + delegated = NULL; + err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path, &delegated); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal link\n"); + iput(delegated); + } + if (!err || err != -EMLINK) + goto out; + + /* link count full. re-initialize br_whbase. */ + kick_reinit_br_wh(sb, br); + } + + /* return this error in this context */ + err = vfsub_create(h_dir, &h_path, WH_MASK, /*want_excl*/true); + if (!err) + au_fhsm_wrote(sb, bindex, /*force*/0); + +out: + wbr_wh_read_unlock(wbr); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create or remove the diropq. + */ +static struct dentry *do_diropq(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags) +{ + struct dentry *opq_dentry, *h_dentry; + struct super_block *sb; + struct au_branch *br; + int err; + + sb = dentry->d_sb; + br = au_sbr(sb, bindex); + h_dentry = au_h_dptr(dentry, bindex); + opq_dentry = vfsub_lkup_one(&diropq_name, h_dentry); + if (IS_ERR(opq_dentry)) + goto out; + + if (au_ftest_diropq(flags, CREATE)) { + err = link_or_create_wh(sb, bindex, opq_dentry); + if (!err) { + au_set_dbdiropq(dentry, bindex); + goto out; /* success */ + } + } else { + struct path tmp = { + .dentry = opq_dentry, + .mnt = au_br_mnt(br) + }; + err = do_unlink_wh(au_h_iptr(d_inode(dentry), bindex), &tmp); + if (!err) + au_set_dbdiropq(dentry, -1); + } + dput(opq_dentry); + opq_dentry = ERR_PTR(err); + +out: + return opq_dentry; +} + +struct do_diropq_args { + struct dentry **errp; + struct dentry *dentry; + aufs_bindex_t bindex; + unsigned int flags; +}; + +static void call_do_diropq(void *args) +{ + struct do_diropq_args *a = args; + *a->errp = do_diropq(a->dentry, a->bindex, a->flags); +} + +struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags) +{ + struct dentry *diropq, *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (!au_test_h_perm_sio(d_inode(h_dentry), MAY_EXEC | MAY_WRITE)) + diropq = do_diropq(dentry, bindex, flags); + else { + int wkq_err; + struct do_diropq_args args = { + .errp = &diropq, + .dentry = dentry, + .bindex = bindex, + .flags = flags + }; + + wkq_err = au_wkq_wait(call_do_diropq, &args); + if (unlikely(wkq_err)) + diropq = ERR_PTR(wkq_err); + } + + return diropq; +} + +/* ---------------------------------------------------------------------- */ + +/* + * lookup whiteout dentry. + * @h_parent: lower parent dentry which must exist and be locked + * @base_name: name of dentry which will be whiteouted + * returns dentry for whiteout. + */ +struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, + struct au_branch *br) +{ + int err; + struct qstr wh_name; + struct dentry *wh_dentry; + + err = au_wh_name_alloc(&wh_name, base_name); + wh_dentry = ERR_PTR(err); + if (!err) { + wh_dentry = vfsub_lkup_one(&wh_name, h_parent); + kfree(wh_name.name); + } + return wh_dentry; +} + +/* + * link/create a whiteout for @dentry on @bindex. + */ +struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent) +{ + struct dentry *wh_dentry; + struct super_block *sb; + int err; + + sb = dentry->d_sb; + wh_dentry = au_wh_lkup(h_parent, &dentry->d_name, au_sbr(sb, bindex)); + if (!IS_ERR(wh_dentry) && d_is_negative(wh_dentry)) { + err = link_or_create_wh(sb, bindex, wh_dentry); + if (!err) { + au_set_dbwh(dentry, bindex); + au_fhsm_wrote(sb, bindex, /*force*/0); + } else { + dput(wh_dentry); + wh_dentry = ERR_PTR(err); + } + } + + return wh_dentry; +} + +/* ---------------------------------------------------------------------- */ + +/* Delete all whiteouts in this directory on branch bindex. */ +static int del_wh_children(struct dentry *h_dentry, struct au_nhash *whlist, + aufs_bindex_t bindex, struct au_branch *br) +{ + int err; + unsigned long ul, n; + struct qstr wh_name; + char *p; + struct hlist_head *head; + struct au_vdir_wh *pos; + struct au_vdir_destr *str; + + err = -ENOMEM; + p = (void *)__get_free_page(GFP_NOFS); + wh_name.name = p; + if (unlikely(!wh_name.name)) + goto out; + + err = 0; + memcpy(p, AUFS_WH_PFX, AUFS_WH_PFX_LEN); + p += AUFS_WH_PFX_LEN; + n = whlist->nh_num; + head = whlist->nh_head; + for (ul = 0; !err && ul < n; ul++, head++) { + hlist_for_each_entry(pos, head, wh_hash) { + if (pos->wh_bindex != bindex) + continue; + + str = &pos->wh_str; + if (str->len + AUFS_WH_PFX_LEN <= PATH_MAX) { + memcpy(p, str->name, str->len); + wh_name.len = AUFS_WH_PFX_LEN + str->len; + err = unlink_wh_name(h_dentry, &wh_name, br); + if (!err) + continue; + break; + } + AuIOErr("whiteout name too long %.*s\n", + str->len, str->name); + err = -EIO; + break; + } + } + free_page((unsigned long)wh_name.name); + +out: + return err; +} + +struct del_wh_children_args { + int *errp; + struct dentry *h_dentry; + struct au_nhash *whlist; + aufs_bindex_t bindex; + struct au_branch *br; +}; + +static void call_del_wh_children(void *args) +{ + struct del_wh_children_args *a = args; + *a->errp = del_wh_children(a->h_dentry, a->whlist, a->bindex, a->br); +} + +/* ---------------------------------------------------------------------- */ + +struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp) +{ + struct au_whtmp_rmdir *whtmp; + int err; + unsigned int rdhash; + + SiMustAnyLock(sb); + + whtmp = kzalloc(sizeof(*whtmp), gfp); + if (unlikely(!whtmp)) { + whtmp = ERR_PTR(-ENOMEM); + goto out; + } + + /* no estimation for dir size */ + rdhash = au_sbi(sb)->si_rdhash; + if (!rdhash) + rdhash = AUFS_RDHASH_DEF; + err = au_nhash_alloc(&whtmp->whlist, rdhash, gfp); + if (unlikely(err)) { + kfree(whtmp); + whtmp = ERR_PTR(err); + } + +out: + return whtmp; +} + +void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp) +{ + if (whtmp->br) + au_br_put(whtmp->br); + dput(whtmp->wh_dentry); + iput(whtmp->dir); + au_nhash_wh_free(&whtmp->whlist); + kfree(whtmp); +} + +/* + * rmdir the whiteouted temporary named dir @h_dentry. + * @whlist: whiteouted children. + */ +int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_nhash *whlist) +{ + int err; + unsigned int h_nlink; + struct path h_tmp; + struct inode *wh_inode, *h_dir; + struct au_branch *br; + + h_dir = d_inode(wh_dentry->d_parent); /* dir inode is locked */ + IMustLock(h_dir); + + br = au_sbr(dir->i_sb, bindex); + wh_inode = d_inode(wh_dentry); + inode_lock_nested(wh_inode, AuLsc_I_CHILD); + + /* + * someone else might change some whiteouts while we were sleeping. + * it means this whlist may have an obsoleted entry. + */ + if (!au_test_h_perm_sio(wh_inode, MAY_EXEC | MAY_WRITE)) + err = del_wh_children(wh_dentry, whlist, bindex, br); + else { + int wkq_err; + struct del_wh_children_args args = { + .errp = &err, + .h_dentry = wh_dentry, + .whlist = whlist, + .bindex = bindex, + .br = br + }; + + wkq_err = au_wkq_wait(call_del_wh_children, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + inode_unlock(wh_inode); + + if (!err) { + h_tmp.dentry = wh_dentry; + h_tmp.mnt = au_br_mnt(br); + h_nlink = h_dir->i_nlink; + err = vfsub_rmdir(h_dir, &h_tmp); + /* some fs doesn't change the parent nlink in some cases */ + h_nlink -= h_dir->i_nlink; + } + + if (!err) { + if (au_ibtop(dir) == bindex) { + /* todo: dir->i_mutex is necessary */ + au_cpup_attr_timesizes(dir); + if (h_nlink) + vfsub_drop_nlink(dir); + } + return 0; /* success */ + } + + pr_warn("failed removing %pd(%d), ignored\n", wh_dentry, err); + return err; +} + +static void call_rmdir_whtmp(void *args) +{ + int err; + aufs_bindex_t bindex; + struct au_whtmp_rmdir *a = args; + struct super_block *sb; + struct dentry *h_parent; + struct inode *h_dir; + struct au_hinode *hdir; + + /* rmdir by nfsd may cause deadlock with this i_mutex */ + /* inode_lock(a->dir); */ + err = -EROFS; + sb = a->dir->i_sb; + si_read_lock(sb, !AuLock_FLUSH); + if (!au_br_writable(a->br->br_perm)) + goto out; + bindex = au_br_index(sb, a->br->br_id); + if (unlikely(bindex < 0)) + goto out; + + err = -EIO; + ii_write_lock_parent(a->dir); + h_parent = dget_parent(a->wh_dentry); + h_dir = d_inode(h_parent); + hdir = au_hi(a->dir, bindex); + err = vfsub_mnt_want_write(au_br_mnt(a->br)); + if (unlikely(err)) + goto out_mnt; + au_hn_inode_lock_nested(hdir, AuLsc_I_PARENT); + err = au_h_verify(a->wh_dentry, au_opt_udba(sb), h_dir, h_parent, + a->br); + if (!err) + err = au_whtmp_rmdir(a->dir, bindex, a->wh_dentry, &a->whlist); + au_hn_inode_unlock(hdir); + vfsub_mnt_drop_write(au_br_mnt(a->br)); + +out_mnt: + dput(h_parent); + ii_write_unlock(a->dir); +out: + /* inode_unlock(a->dir); */ + au_whtmp_rmdir_free(a); + si_read_unlock(sb); + au_nwt_done(&au_sbi(sb)->si_nowait); + if (unlikely(err)) + AuIOErr("err %d\n", err); +} + +void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_whtmp_rmdir *args) +{ + int wkq_err; + struct super_block *sb; + + IMustLock(dir); + + /* all post-process will be done in do_rmdir_whtmp(). */ + sb = dir->i_sb; + args->dir = au_igrab(dir); + args->br = au_sbr(sb, bindex); + au_br_get(args->br); + args->wh_dentry = dget(wh_dentry); + wkq_err = au_wkq_nowait(call_rmdir_whtmp, args, sb, /*flags*/0); + if (unlikely(wkq_err)) { + pr_warn("rmdir error %pd (%d), ignored\n", wh_dentry, wkq_err); + au_whtmp_rmdir_free(args); + } +} --- linux-aws-4.15.0.orig/fs/aufs/whout.h +++ linux-aws-4.15.0/fs/aufs/whout.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * whiteout for logical deletion and opaque directory + */ + +#ifndef __AUFS_WHOUT_H__ +#define __AUFS_WHOUT_H__ + +#ifdef __KERNEL__ + +#include "dir.h" + +/* whout.c */ +int au_wh_name_alloc(struct qstr *wh, const struct qstr *name); +int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, int try_sio); +int au_diropq_test(struct dentry *h_dentry); +struct au_branch; +struct dentry *au_whtmp_lkup(struct dentry *h_parent, struct au_branch *br, + struct qstr *prefix); +int au_whtmp_ren(struct dentry *h_dentry, struct au_branch *br); +int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, + struct dentry *dentry); +int au_wh_init(struct au_branch *br, struct super_block *sb); + +/* diropq flags */ +#define AuDiropq_CREATE 1 +#define au_ftest_diropq(flags, name) ((flags) & AuDiropq_##name) +#define au_fset_diropq(flags, name) \ + do { (flags) |= AuDiropq_##name; } while (0) +#define au_fclr_diropq(flags, name) \ + do { (flags) &= ~AuDiropq_##name; } while (0) + +struct dentry *au_diropq_sio(struct dentry *dentry, aufs_bindex_t bindex, + unsigned int flags); +struct dentry *au_wh_lkup(struct dentry *h_parent, struct qstr *base_name, + struct au_branch *br); +struct dentry *au_wh_create(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_parent); + +/* real rmdir for the whiteout-ed dir */ +struct au_whtmp_rmdir { + struct inode *dir; + struct au_branch *br; + struct dentry *wh_dentry; + struct au_nhash whlist; +}; + +struct au_whtmp_rmdir *au_whtmp_rmdir_alloc(struct super_block *sb, gfp_t gfp); +void au_whtmp_rmdir_free(struct au_whtmp_rmdir *whtmp); +int au_whtmp_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_nhash *whlist); +void au_whtmp_kick_rmdir(struct inode *dir, aufs_bindex_t bindex, + struct dentry *wh_dentry, struct au_whtmp_rmdir *args); + +/* ---------------------------------------------------------------------- */ + +static inline struct dentry *au_diropq_create(struct dentry *dentry, + aufs_bindex_t bindex) +{ + return au_diropq_sio(dentry, bindex, AuDiropq_CREATE); +} + +static inline int au_diropq_remove(struct dentry *dentry, aufs_bindex_t bindex) +{ + return PTR_ERR(au_diropq_sio(dentry, bindex, !AuDiropq_CREATE)); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WHOUT_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/wkq.c +++ linux-aws-4.15.0/fs/aufs/wkq.c @@ -0,0 +1,390 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * workqueue for asynchronous/super-io operations + * todo: try new dredential scheme + */ + +#include +#include "aufs.h" + +/* internal workqueue named AUFS_WKQ_NAME */ + +static struct workqueue_struct *au_wkq; + +struct au_wkinfo { + struct work_struct wk; + struct kobject *kobj; + + unsigned int flags; /* see wkq.h */ + + au_wkq_func_t func; + void *args; + +#ifdef CONFIG_LOCKDEP + int dont_check; + struct held_lock **hlock; +#endif + + struct completion *comp; +}; + +/* ---------------------------------------------------------------------- */ +/* + * Aufs passes some operations to the workqueue such as the internal copyup. + * This scheme looks rather unnatural for LOCKDEP debugging feature, since the + * job run by workqueue depends upon the locks acquired in the other task. + * Delegating a small operation to the workqueue, aufs passes its lockdep + * information too. And the job in the workqueue restores the info in order to + * pretend as if it acquired those locks. This is just to make LOCKDEP work + * correctly and expectedly. + */ + +#ifndef CONFIG_LOCKDEP +AuStubInt0(au_wkq_lockdep_alloc, struct au_wkinfo *wkinfo); +AuStubVoid(au_wkq_lockdep_free, struct au_wkinfo *wkinfo); +AuStubVoid(au_wkq_lockdep_pre, struct au_wkinfo *wkinfo); +AuStubVoid(au_wkq_lockdep_post, struct au_wkinfo *wkinfo); +AuStubVoid(au_wkq_lockdep_init, struct au_wkinfo *wkinfo); +#else +static void au_wkq_lockdep_init(struct au_wkinfo *wkinfo) +{ + wkinfo->hlock = NULL; + wkinfo->dont_check = 0; +} + +/* + * 1: matched + * 0: unmatched + */ +static int au_wkq_lockdep_test(struct lock_class_key *key, const char *name) +{ + static DEFINE_SPINLOCK(spin); + static struct { + char *name; + struct lock_class_key *key; + } a[] = { + { .name = "&sbinfo->si_rwsem" }, + { .name = "&finfo->fi_rwsem" }, + { .name = "&dinfo->di_rwsem" }, + { .name = "&iinfo->ii_rwsem" } + }; + static int set; + int i; + + /* lockless read from 'set.' see below */ + if (set == ARRAY_SIZE(a)) { + for (i = 0; i < ARRAY_SIZE(a); i++) + if (a[i].key == key) + goto match; + goto unmatch; + } + + spin_lock(&spin); + if (set) + for (i = 0; i < ARRAY_SIZE(a); i++) + if (a[i].key == key) { + spin_unlock(&spin); + goto match; + } + for (i = 0; i < ARRAY_SIZE(a); i++) { + if (a[i].key) { + if (unlikely(a[i].key == key)) { /* rare but possible */ + spin_unlock(&spin); + goto match; + } else + continue; + } + if (strstr(a[i].name, name)) { + /* + * the order of these three lines is important for the + * lockless read above. + */ + a[i].key = key; + spin_unlock(&spin); + set++; + /* AuDbg("%d, %s\n", set, name); */ + goto match; + } + } + spin_unlock(&spin); + goto unmatch; + +match: + return 1; +unmatch: + return 0; +} + +static int au_wkq_lockdep_alloc(struct au_wkinfo *wkinfo) +{ + int err, n; + struct task_struct *curr; + struct held_lock **hl, *held_locks, *p; + + err = 0; + curr = current; + wkinfo->dont_check = lockdep_recursing(curr); + if (wkinfo->dont_check) + goto out; + n = curr->lockdep_depth; + if (!n) + goto out; + + err = -ENOMEM; + wkinfo->hlock = kmalloc_array(n + 1, sizeof(*wkinfo->hlock), GFP_NOFS); + if (unlikely(!wkinfo->hlock)) + goto out; + + err = 0; +#if 0 + if (0 && au_debug_test()) /* left for debugging */ + lockdep_print_held_locks(curr); +#endif + held_locks = curr->held_locks; + hl = wkinfo->hlock; + while (n--) { + p = held_locks++; + if (au_wkq_lockdep_test(p->instance->key, p->instance->name)) + *hl++ = p; + } + *hl = NULL; + +out: + return err; +} + +static void au_wkq_lockdep_free(struct au_wkinfo *wkinfo) +{ + kfree(wkinfo->hlock); +} + +static void au_wkq_lockdep_pre(struct au_wkinfo *wkinfo) +{ + struct held_lock *p, **hl = wkinfo->hlock; + int subclass; + + if (wkinfo->dont_check) + lockdep_off(); + if (!hl) + return; + while ((p = *hl++)) { /* assignment */ + subclass = lockdep_hlock_class(p)->subclass; + /* AuDbg("%s, %d\n", p->instance->name, subclass); */ + if (p->read) + rwsem_acquire_read(p->instance, subclass, 0, + /*p->acquire_ip*/_RET_IP_); + else + rwsem_acquire(p->instance, subclass, 0, + /*p->acquire_ip*/_RET_IP_); + } +} + +static void au_wkq_lockdep_post(struct au_wkinfo *wkinfo) +{ + struct held_lock *p, **hl = wkinfo->hlock; + + if (wkinfo->dont_check) + lockdep_on(); + if (!hl) + return; + while ((p = *hl++)) /* assignment */ + rwsem_release(p->instance, 0, /*p->acquire_ip*/_RET_IP_); +} +#endif + +static void wkq_func(struct work_struct *wk) +{ + struct au_wkinfo *wkinfo = container_of(wk, struct au_wkinfo, wk); + + AuDebugOn(!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)); + AuDebugOn(rlimit(RLIMIT_FSIZE) != RLIM_INFINITY); + + au_wkq_lockdep_pre(wkinfo); + wkinfo->func(wkinfo->args); + au_wkq_lockdep_post(wkinfo); + if (au_ftest_wkq(wkinfo->flags, WAIT)) + complete(wkinfo->comp); + else { + kobject_put(wkinfo->kobj); + module_put(THIS_MODULE); /* todo: ?? */ + kfree(wkinfo); + } +} + +/* + * Since struct completion is large, try allocating it dynamically. + */ +#if 1 /* defined(CONFIG_4KSTACKS) || defined(AuTest4KSTACKS) */ +#define AuWkqCompDeclare(name) struct completion *comp = NULL + +static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) +{ + *comp = kmalloc(sizeof(**comp), GFP_NOFS); + if (*comp) { + init_completion(*comp); + wkinfo->comp = *comp; + return 0; + } + return -ENOMEM; +} + +static void au_wkq_comp_free(struct completion *comp) +{ + kfree(comp); +} + +#else + +/* no braces */ +#define AuWkqCompDeclare(name) \ + DECLARE_COMPLETION_ONSTACK(_ ## name); \ + struct completion *comp = &_ ## name + +static int au_wkq_comp_alloc(struct au_wkinfo *wkinfo, struct completion **comp) +{ + wkinfo->comp = *comp; + return 0; +} + +static void au_wkq_comp_free(struct completion *comp __maybe_unused) +{ + /* empty */ +} +#endif /* 4KSTACKS */ + +static void au_wkq_run(struct au_wkinfo *wkinfo) +{ + if (au_ftest_wkq(wkinfo->flags, NEST)) { + if (au_wkq_test()) { + AuWarn1("wkq from wkq, unless silly-rename on NFS," + " due to a dead dir by UDBA?\n"); + AuDebugOn(au_ftest_wkq(wkinfo->flags, WAIT)); + } + } else + au_dbg_verify_kthread(); + + if (au_ftest_wkq(wkinfo->flags, WAIT)) { + INIT_WORK_ONSTACK(&wkinfo->wk, wkq_func); + queue_work(au_wkq, &wkinfo->wk); + } else { + INIT_WORK(&wkinfo->wk, wkq_func); + schedule_work(&wkinfo->wk); + } +} + +/* + * Be careful. It is easy to make deadlock happen. + * processA: lock, wkq and wait + * processB: wkq and wait, lock in wkq + * --> deadlock + */ +int au_wkq_do_wait(unsigned int flags, au_wkq_func_t func, void *args) +{ + int err; + AuWkqCompDeclare(comp); + struct au_wkinfo wkinfo = { + .flags = flags, + .func = func, + .args = args + }; + + err = au_wkq_comp_alloc(&wkinfo, &comp); + if (unlikely(err)) + goto out; + err = au_wkq_lockdep_alloc(&wkinfo); + if (unlikely(err)) + goto out_comp; + if (!err) { + au_wkq_run(&wkinfo); + /* no timeout, no interrupt */ + wait_for_completion(wkinfo.comp); + } + au_wkq_lockdep_free(&wkinfo); + +out_comp: + au_wkq_comp_free(comp); +out: + destroy_work_on_stack(&wkinfo.wk); + return err; +} + +/* + * Note: dget/dput() in func for aufs dentries are not supported. It will be a + * problem in a concurrent umounting. + */ +int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb, + unsigned int flags) +{ + int err; + struct au_wkinfo *wkinfo; + + atomic_inc(&au_sbi(sb)->si_nowait.nw_len); + + /* + * wkq_func() must free this wkinfo. + * it highly depends upon the implementation of workqueue. + */ + err = 0; + wkinfo = kmalloc(sizeof(*wkinfo), GFP_NOFS); + if (wkinfo) { + wkinfo->kobj = &au_sbi(sb)->si_kobj; + wkinfo->flags = flags & ~AuWkq_WAIT; + wkinfo->func = func; + wkinfo->args = args; + wkinfo->comp = NULL; + au_wkq_lockdep_init(wkinfo); + kobject_get(wkinfo->kobj); + __module_get(THIS_MODULE); /* todo: ?? */ + + au_wkq_run(wkinfo); + } else { + err = -ENOMEM; + au_nwt_done(&au_sbi(sb)->si_nowait); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_nwt_init(struct au_nowait_tasks *nwt) +{ + atomic_set(&nwt->nw_len, 0); + /* smp_mb(); */ /* atomic_set */ + init_waitqueue_head(&nwt->nw_wq); +} + +void au_wkq_fin(void) +{ + destroy_workqueue(au_wkq); +} + +int __init au_wkq_init(void) +{ + int err; + + err = 0; + au_wkq = alloc_workqueue(AUFS_WKQ_NAME, 0, WQ_DFL_ACTIVE); + if (IS_ERR(au_wkq)) + err = PTR_ERR(au_wkq); + else if (!au_wkq) + err = -ENOMEM; + + return err; +} --- linux-aws-4.15.0.orig/fs/aufs/wkq.h +++ linux-aws-4.15.0/fs/aufs/wkq.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * workqueue for asynchronous/super-io operations + * todo: try new credentials management scheme + */ + +#ifndef __AUFS_WKQ_H__ +#define __AUFS_WKQ_H__ + +#ifdef __KERNEL__ + +#include + +struct super_block; + +/* ---------------------------------------------------------------------- */ + +/* + * in the next operation, wait for the 'nowait' tasks in system-wide workqueue + */ +struct au_nowait_tasks { + atomic_t nw_len; + wait_queue_head_t nw_wq; +}; + +/* ---------------------------------------------------------------------- */ + +typedef void (*au_wkq_func_t)(void *args); + +/* wkq flags */ +#define AuWkq_WAIT 1 +#define AuWkq_NEST (1 << 1) +#define au_ftest_wkq(flags, name) ((flags) & AuWkq_##name) +#define au_fset_wkq(flags, name) \ + do { (flags) |= AuWkq_##name; } while (0) +#define au_fclr_wkq(flags, name) \ + do { (flags) &= ~AuWkq_##name; } while (0) + +#ifndef CONFIG_AUFS_HNOTIFY +#undef AuWkq_NEST +#define AuWkq_NEST 0 +#endif + +/* wkq.c */ +int au_wkq_do_wait(unsigned int flags, au_wkq_func_t func, void *args); +int au_wkq_nowait(au_wkq_func_t func, void *args, struct super_block *sb, + unsigned int flags); +void au_nwt_init(struct au_nowait_tasks *nwt); +int __init au_wkq_init(void); +void au_wkq_fin(void); + +/* ---------------------------------------------------------------------- */ + +static inline int au_wkq_test(void) +{ + return current->flags & PF_WQ_WORKER; +} + +static inline int au_wkq_wait(au_wkq_func_t func, void *args) +{ + return au_wkq_do_wait(AuWkq_WAIT, func, args); +} + +static inline void au_nwt_done(struct au_nowait_tasks *nwt) +{ + if (atomic_dec_and_test(&nwt->nw_len)) + wake_up_all(&nwt->nw_wq); +} + +static inline int au_nwt_flush(struct au_nowait_tasks *nwt) +{ + wait_event(nwt->nw_wq, !atomic_read(&nwt->nw_len)); + return 0; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WKQ_H__ */ --- linux-aws-4.15.0.orig/fs/aufs/xattr.c +++ linux-aws-4.15.0/fs/aufs/xattr.c @@ -0,0 +1,355 @@ +/* + * Copyright (C) 2014-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * handling xattr functions + */ + +#include +#include +#include +#include "aufs.h" + +static int au_xattr_ignore(int err, char *name, unsigned int ignore_flags) +{ + if (!ignore_flags) + goto out; + switch (err) { + case -ENOMEM: + case -EDQUOT: + goto out; + } + + if ((ignore_flags & AuBrAttr_ICEX) == AuBrAttr_ICEX) { + err = 0; + goto out; + } + +#define cmp(brattr, prefix) do { \ + if (!strncmp(name, XATTR_##prefix##_PREFIX, \ + XATTR_##prefix##_PREFIX_LEN)) { \ + if (ignore_flags & AuBrAttr_ICEX_##brattr) \ + err = 0; \ + goto out; \ + } \ + } while (0) + + cmp(SEC, SECURITY); + cmp(SYS, SYSTEM); + cmp(TR, TRUSTED); + cmp(USR, USER); +#undef cmp + + if (ignore_flags & AuBrAttr_ICEX_OTH) + err = 0; + +out: + return err; +} + +static const int au_xattr_out_of_list = AuBrAttr_ICEX_OTH << 1; + +static int au_do_cpup_xattr(struct dentry *h_dst, struct dentry *h_src, + char *name, char **buf, unsigned int ignore_flags, + unsigned int verbose) +{ + int err; + ssize_t ssz; + struct inode *h_idst; + + ssz = vfs_getxattr_alloc(h_src, name, buf, 0, GFP_NOFS); + err = ssz; + if (unlikely(err <= 0)) { + if (err == -ENODATA + || (err == -EOPNOTSUPP + && ((ignore_flags & au_xattr_out_of_list) + || (au_test_nfs_noacl(d_inode(h_src)) + && (!strcmp(name, XATTR_NAME_POSIX_ACL_ACCESS) + || !strcmp(name, + XATTR_NAME_POSIX_ACL_DEFAULT)))) + )) + err = 0; + if (err && (verbose || au_debug_test())) + pr_err("%s, err %d\n", name, err); + goto out; + } + + /* unlock it temporary */ + h_idst = d_inode(h_dst); + inode_unlock(h_idst); + err = vfsub_setxattr(h_dst, name, *buf, ssz, /*flags*/0); + inode_lock_nested(h_idst, AuLsc_I_CHILD2); + if (unlikely(err)) { + if (verbose || au_debug_test()) + pr_err("%s, err %d\n", name, err); + err = au_xattr_ignore(err, name, ignore_flags); + } + +out: + return err; +} + +int au_cpup_xattr(struct dentry *h_dst, struct dentry *h_src, int ignore_flags, + unsigned int verbose) +{ + int err, unlocked, acl_access, acl_default; + ssize_t ssz; + struct inode *h_isrc, *h_idst; + char *value, *p, *o, *e; + + /* try stopping to update the source inode while we are referencing */ + /* there should not be the parent-child relationship between them */ + h_isrc = d_inode(h_src); + h_idst = d_inode(h_dst); + inode_unlock(h_idst); + vfsub_inode_lock_shared_nested(h_isrc, AuLsc_I_CHILD); + inode_lock_nested(h_idst, AuLsc_I_CHILD2); + unlocked = 0; + + /* some filesystems don't list POSIX ACL, for example tmpfs */ + ssz = vfs_listxattr(h_src, NULL, 0); + err = ssz; + if (unlikely(err < 0)) { + AuTraceErr(err); + if (err == -ENODATA + || err == -EOPNOTSUPP) + err = 0; /* ignore */ + goto out; + } + + err = 0; + p = NULL; + o = NULL; + if (ssz) { + err = -ENOMEM; + p = kmalloc(ssz, GFP_NOFS); + o = p; + if (unlikely(!p)) + goto out; + err = vfs_listxattr(h_src, p, ssz); + } + inode_unlock_shared(h_isrc); + unlocked = 1; + AuDbg("err %d, ssz %zd\n", err, ssz); + if (unlikely(err < 0)) + goto out_free; + + err = 0; + e = p + ssz; + value = NULL; + acl_access = 0; + acl_default = 0; + while (!err && p < e) { + acl_access |= !strncmp(p, XATTR_NAME_POSIX_ACL_ACCESS, + sizeof(XATTR_NAME_POSIX_ACL_ACCESS) - 1); + acl_default |= !strncmp(p, XATTR_NAME_POSIX_ACL_DEFAULT, + sizeof(XATTR_NAME_POSIX_ACL_DEFAULT) + - 1); + err = au_do_cpup_xattr(h_dst, h_src, p, &value, ignore_flags, + verbose); + p += strlen(p) + 1; + } + AuTraceErr(err); + ignore_flags |= au_xattr_out_of_list; + if (!err && !acl_access) { + err = au_do_cpup_xattr(h_dst, h_src, + XATTR_NAME_POSIX_ACL_ACCESS, &value, + ignore_flags, verbose); + AuTraceErr(err); + } + if (!err && !acl_default) { + err = au_do_cpup_xattr(h_dst, h_src, + XATTR_NAME_POSIX_ACL_DEFAULT, &value, + ignore_flags, verbose); + AuTraceErr(err); + } + + kfree(value); + +out_free: + kfree(o); +out: + if (!unlocked) + inode_unlock_shared(h_isrc); + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_smack_reentering(struct super_block *sb) +{ +#if IS_ENABLED(CONFIG_SECURITY_SMACK) + /* + * as a part of lookup, smack_d_instantiate() is called, and it calls + * i_op->getxattr(). ouch. + */ + return si_pid_test(sb); +#else + return 0; +#endif +} + +enum { + AU_XATTR_LIST, + AU_XATTR_GET +}; + +struct au_lgxattr { + int type; + union { + struct { + char *list; + size_t size; + } list; + struct { + const char *name; + void *value; + size_t size; + } get; + } u; +}; + +static ssize_t au_lgxattr(struct dentry *dentry, struct au_lgxattr *arg) +{ + ssize_t err; + int reenter; + struct path h_path; + struct super_block *sb; + + sb = dentry->d_sb; + reenter = au_smack_reentering(sb); + if (!reenter) { + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out; + } + err = au_h_path_getattr(dentry, /*force*/1, &h_path, reenter); + if (unlikely(err)) + goto out_si; + if (unlikely(!h_path.dentry)) + /* illegally overlapped or something */ + goto out_di; /* pretending success */ + + /* always topmost entry only */ + switch (arg->type) { + case AU_XATTR_LIST: + err = vfs_listxattr(h_path.dentry, + arg->u.list.list, arg->u.list.size); + break; + case AU_XATTR_GET: + AuDebugOn(d_is_negative(h_path.dentry)); + err = vfs_getxattr(h_path.dentry, + arg->u.get.name, arg->u.get.value, + arg->u.get.size); + break; + } + +out_di: + if (!reenter) + di_read_unlock(dentry, AuLock_IR); +out_si: + if (!reenter) + si_read_unlock(sb); +out: + AuTraceErr(err); + return err; +} + +ssize_t aufs_listxattr(struct dentry *dentry, char *list, size_t size) +{ + struct au_lgxattr arg = { + .type = AU_XATTR_LIST, + .u.list = { + .list = list, + .size = size + }, + }; + + return au_lgxattr(dentry, &arg); +} + +static ssize_t au_getxattr(struct dentry *dentry, + struct inode *inode __maybe_unused, + const char *name, void *value, size_t size) +{ + struct au_lgxattr arg = { + .type = AU_XATTR_GET, + .u.get = { + .name = name, + .value = value, + .size = size + }, + }; + + return au_lgxattr(dentry, &arg); +} + +static int au_setxattr(struct dentry *dentry, struct inode *inode, + const char *name, const void *value, size_t size, + int flags) +{ + struct au_sxattr arg = { + .type = AU_XATTR_SET, + .u.set = { + .name = name, + .value = value, + .size = size, + .flags = flags + }, + }; + + return au_sxattr(dentry, inode, &arg); +} + +/* ---------------------------------------------------------------------- */ + +static int au_xattr_get(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, void *buffer, size_t size) +{ + return au_getxattr(dentry, inode, name, buffer, size); +} + +static int au_xattr_set(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, const void *value, size_t size, + int flags) +{ + return au_setxattr(dentry, inode, name, value, size, flags); +} + +static const struct xattr_handler au_xattr_handler = { + .name = "", + .prefix = "", + .get = au_xattr_get, + .set = au_xattr_set +}; + +static const struct xattr_handler *au_xattr_handlers[] = { +#ifdef CONFIG_FS_POSIX_ACL + &posix_acl_access_xattr_handler, + &posix_acl_default_xattr_handler, +#endif + &au_xattr_handler, /* must be last */ + NULL +}; + +void au_xattr_init(struct super_block *sb) +{ + sb->s_xattr = au_xattr_handlers; +} --- linux-aws-4.15.0.orig/fs/aufs/xino.c +++ linux-aws-4.15.0/fs/aufs/xino.c @@ -0,0 +1,1418 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * external inode number translation table and bitmap + */ + +#include +#include +#include "aufs.h" + +/* todo: unnecessary to support mmap_sem since kernel-space? */ +ssize_t xino_fread(vfs_readf_t func, struct file *file, void *kbuf, size_t size, + loff_t *pos) +{ + ssize_t err; + mm_segment_t oldfs; + union { + void *k; + char __user *u; + } buf; + + buf.k = kbuf; + oldfs = get_fs(); + set_fs(KERNEL_DS); + do { + /* todo: signal_pending? */ + err = func(file, buf.u, size, pos); + } while (err == -EAGAIN || err == -EINTR); + set_fs(oldfs); + +#if 0 /* reserved for future use */ + if (err > 0) + fsnotify_access(file->f_path.dentry); +#endif + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static ssize_t xino_fwrite_wkq(vfs_writef_t func, struct file *file, void *buf, + size_t size, loff_t *pos); + +static ssize_t do_xino_fwrite(vfs_writef_t func, struct file *file, void *kbuf, + size_t size, loff_t *pos) +{ + ssize_t err; + mm_segment_t oldfs; + union { + void *k; + const char __user *u; + } buf; + int i; + const int prevent_endless = 10; + + i = 0; + buf.k = kbuf; + oldfs = get_fs(); + set_fs(KERNEL_DS); + do { + err = func(file, buf.u, size, pos); + if (err == -EINTR + && !au_wkq_test() + && fatal_signal_pending(current)) { + set_fs(oldfs); + err = xino_fwrite_wkq(func, file, kbuf, size, pos); + BUG_ON(err == -EINTR); + oldfs = get_fs(); + set_fs(KERNEL_DS); + } + } while (i++ < prevent_endless + && (err == -EAGAIN || err == -EINTR)); + set_fs(oldfs); + +#if 0 /* reserved for future use */ + if (err > 0) + fsnotify_modify(file->f_path.dentry); +#endif + + return err; +} + +struct do_xino_fwrite_args { + ssize_t *errp; + vfs_writef_t func; + struct file *file; + void *buf; + size_t size; + loff_t *pos; +}; + +static void call_do_xino_fwrite(void *args) +{ + struct do_xino_fwrite_args *a = args; + *a->errp = do_xino_fwrite(a->func, a->file, a->buf, a->size, a->pos); +} + +static ssize_t xino_fwrite_wkq(vfs_writef_t func, struct file *file, void *buf, + size_t size, loff_t *pos) +{ + ssize_t err; + int wkq_err; + struct do_xino_fwrite_args args = { + .errp = &err, + .func = func, + .file = file, + .buf = buf, + .size = size, + .pos = pos + }; + + /* + * it breaks RLIMIT_FSIZE and normal user's limit, + * users should care about quota and real 'filesystem full.' + */ + wkq_err = au_wkq_wait(call_do_xino_fwrite, &args); + if (unlikely(wkq_err)) + err = wkq_err; + + return err; +} + +ssize_t xino_fwrite(vfs_writef_t func, struct file *file, void *buf, + size_t size, loff_t *pos) +{ + ssize_t err; + + if (rlimit(RLIMIT_FSIZE) == RLIM_INFINITY) { + lockdep_off(); + err = do_xino_fwrite(func, file, buf, size, pos); + lockdep_on(); + } else { + lockdep_off(); + err = xino_fwrite_wkq(func, file, buf, size, pos); + lockdep_on(); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create a new xinofile at the same place/path as @base_file. + */ +struct file *au_xino_create2(struct file *base_file, struct file *copy_src) +{ + struct file *file; + struct dentry *base, *parent; + struct inode *dir, *delegated; + struct qstr *name; + struct path path; + int err; + + base = base_file->f_path.dentry; + parent = base->d_parent; /* dir inode is locked */ + dir = d_inode(parent); + IMustLock(dir); + + file = ERR_PTR(-EINVAL); + name = &base->d_name; + path.dentry = vfsub_lookup_one_len(name->name, parent, name->len); + if (IS_ERR(path.dentry)) { + file = (void *)path.dentry; + pr_err("%pd lookup err %ld\n", + base, PTR_ERR(path.dentry)); + goto out; + } + + /* no need to mnt_want_write() since we call dentry_open() later */ + err = vfs_create(dir, path.dentry, S_IRUGO | S_IWUGO, NULL); + if (unlikely(err)) { + file = ERR_PTR(err); + pr_err("%pd create err %d\n", base, err); + goto out_dput; + } + + path.mnt = base_file->f_path.mnt; + file = vfsub_dentry_open(&path, + O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE + /* | __FMODE_NONOTIFY */); + if (IS_ERR(file)) { + pr_err("%pd open err %ld\n", base, PTR_ERR(file)); + goto out_dput; + } + + delegated = NULL; + err = vfsub_unlink(dir, &file->f_path, &delegated, /*force*/0); + if (unlikely(err == -EWOULDBLOCK)) { + pr_warn("cannot retry for NFSv4 delegation" + " for an internal unlink\n"); + iput(delegated); + } + if (unlikely(err)) { + pr_err("%pd unlink err %d\n", base, err); + goto out_fput; + } + + if (copy_src) { + /* no one can touch copy_src xino */ + err = au_copy_file(file, copy_src, vfsub_f_size_read(copy_src)); + if (unlikely(err)) { + pr_err("%pd copy err %d\n", base, err); + goto out_fput; + } + } + goto out_dput; /* success */ + +out_fput: + fput(file); + file = ERR_PTR(err); +out_dput: + dput(path.dentry); +out: + return file; +} + +struct au_xino_lock_dir { + struct au_hinode *hdir; + struct dentry *parent; + struct inode *dir; +}; + +static void au_xino_lock_dir(struct super_block *sb, struct file *xino, + struct au_xino_lock_dir *ldir) +{ + aufs_bindex_t brid, bindex; + + ldir->hdir = NULL; + bindex = -1; + brid = au_xino_brid(sb); + if (brid >= 0) + bindex = au_br_index(sb, brid); + if (bindex >= 0) { + ldir->hdir = au_hi(d_inode(sb->s_root), bindex); + au_hn_inode_lock_nested(ldir->hdir, AuLsc_I_PARENT); + } else { + ldir->parent = dget_parent(xino->f_path.dentry); + ldir->dir = d_inode(ldir->parent); + inode_lock_nested(ldir->dir, AuLsc_I_PARENT); + } +} + +static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir) +{ + if (ldir->hdir) + au_hn_inode_unlock(ldir->hdir); + else { + inode_unlock(ldir->dir); + dput(ldir->parent); + } +} + +/* ---------------------------------------------------------------------- */ + +/* trucate xino files asynchronously */ + +int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + unsigned long jiffy; + blkcnt_t blocks; + aufs_bindex_t bi, bbot; + struct kstatfs *st; + struct au_branch *br; + struct file *new_xino, *file; + struct super_block *h_sb; + struct au_xino_lock_dir ldir; + + err = -ENOMEM; + st = kmalloc(sizeof(*st), GFP_NOFS); + if (unlikely(!st)) + goto out; + + err = -EINVAL; + bbot = au_sbbot(sb); + if (unlikely(bindex < 0 || bbot < bindex)) + goto out_st; + br = au_sbr(sb, bindex); + file = br->br_xino.xi_file; + if (!file) + goto out_st; + + err = vfs_statfs(&file->f_path, st); + if (unlikely(err)) + AuErr1("statfs err %d, ignored\n", err); + jiffy = jiffies; + blocks = file_inode(file)->i_blocks; + pr_info("begin truncating xino(b%d), ib%llu, %llu/%llu free blks\n", + bindex, (u64)blocks, st->f_bfree, st->f_blocks); + + au_xino_lock_dir(sb, file, &ldir); + /* mnt_want_write() is unnecessary here */ + new_xino = au_xino_create2(file, file); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(new_xino); + if (IS_ERR(new_xino)) { + pr_err("err %d, ignored\n", err); + goto out_st; + } + err = 0; + fput(file); + br->br_xino.xi_file = new_xino; + + h_sb = au_br_sb(br); + for (bi = 0; bi <= bbot; bi++) { + if (unlikely(bi == bindex)) + continue; + br = au_sbr(sb, bi); + if (au_br_sb(br) != h_sb) + continue; + + fput(br->br_xino.xi_file); + br->br_xino.xi_file = new_xino; + get_file(new_xino); + } + + err = vfs_statfs(&new_xino->f_path, st); + if (!err) { + pr_info("end truncating xino(b%d), ib%llu, %llu/%llu free blks\n", + bindex, (u64)file_inode(new_xino)->i_blocks, + st->f_bfree, st->f_blocks); + if (file_inode(new_xino)->i_blocks < blocks) + au_sbi(sb)->si_xino_jiffy = jiffy; + } else + AuErr1("statfs err %d, ignored\n", err); + +out_st: + kfree(st); +out: + return err; +} + +struct xino_do_trunc_args { + struct super_block *sb; + struct au_branch *br; +}; + +static void xino_do_trunc(void *_args) +{ + struct xino_do_trunc_args *args = _args; + struct super_block *sb; + struct au_branch *br; + struct inode *dir; + int err; + aufs_bindex_t bindex; + + err = 0; + sb = args->sb; + dir = d_inode(sb->s_root); + br = args->br; + + si_noflush_write_lock(sb); + ii_read_lock_parent(dir); + bindex = au_br_index(sb, br->br_id); + err = au_xino_trunc(sb, bindex); + ii_read_unlock(dir); + if (unlikely(err)) + pr_warn("err b%d, (%d)\n", bindex, err); + atomic_dec(&br->br_xino_running); + au_br_put(br); + si_write_unlock(sb); + au_nwt_done(&au_sbi(sb)->si_nowait); + kfree(args); +} + +static int xino_trunc_test(struct super_block *sb, struct au_branch *br) +{ + int err; + struct kstatfs st; + struct au_sbinfo *sbinfo; + + /* todo: si_xino_expire and the ratio should be customizable */ + sbinfo = au_sbi(sb); + if (time_before(jiffies, + sbinfo->si_xino_jiffy + sbinfo->si_xino_expire)) + return 0; + + /* truncation border */ + err = vfs_statfs(&br->br_xino.xi_file->f_path, &st); + if (unlikely(err)) { + AuErr1("statfs err %d, ignored\n", err); + return 0; + } + if (div64_u64(st.f_bfree * 100, st.f_blocks) >= AUFS_XINO_DEF_TRUNC) + return 0; + + return 1; +} + +static void xino_try_trunc(struct super_block *sb, struct au_branch *br) +{ + struct xino_do_trunc_args *args; + int wkq_err; + + if (!xino_trunc_test(sb, br)) + return; + + if (atomic_inc_return(&br->br_xino_running) > 1) + goto out; + + /* lock and kfree() will be called in trunc_xino() */ + args = kmalloc(sizeof(*args), GFP_NOFS); + if (unlikely(!args)) { + AuErr1("no memory\n"); + goto out; + } + + au_br_get(br); + args->sb = sb; + args->br = br; + wkq_err = au_wkq_nowait(xino_do_trunc, args, sb, /*flags*/0); + if (!wkq_err) + return; /* success */ + + pr_err("wkq %d\n", wkq_err); + au_br_put(br); + kfree(args); + +out: + atomic_dec(&br->br_xino_running); +} + +/* ---------------------------------------------------------------------- */ + +static int au_xino_do_write(vfs_writef_t write, struct file *file, + ino_t h_ino, ino_t ino) +{ + loff_t pos; + ssize_t sz; + + pos = h_ino; + if (unlikely(au_loff_max / sizeof(ino) - 1 < pos)) { + AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); + return -EFBIG; + } + pos *= sizeof(ino); + sz = xino_fwrite(write, file, &ino, sizeof(ino), &pos); + if (sz == sizeof(ino)) + return 0; /* success */ + + AuIOErr("write failed (%zd)\n", sz); + return -EIO; +} + +/* + * write @ino to the xinofile for the specified branch{@sb, @bindex} + * at the position of @h_ino. + * even if @ino is zero, it is written to the xinofile and means no entry. + * if the size of the xino file on a specific filesystem exceeds the watermark, + * try truncating it. + */ +int au_xino_write(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t ino) +{ + int err; + unsigned int mnt_flags; + struct au_branch *br; + + BUILD_BUG_ON(sizeof(long long) != sizeof(au_loff_max) + || ((loff_t)-1) > 0); + SiMustAnyLock(sb); + + mnt_flags = au_mntflags(sb); + if (!au_opt_test(mnt_flags, XINO)) + return 0; + + br = au_sbr(sb, bindex); + err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, + h_ino, ino); + if (!err) { + if (au_opt_test(mnt_flags, TRUNC_XINO) + && au_test_fs_trunc_xino(au_br_sb(br))) + xino_try_trunc(sb, br); + return 0; /* success */ + } + + AuIOErr("write failed (%d)\n", err); + return -EIO; +} + +/* ---------------------------------------------------------------------- */ + +/* aufs inode number bitmap */ + +static const int page_bits = (int)PAGE_SIZE * BITS_PER_BYTE; +static ino_t xib_calc_ino(unsigned long pindex, int bit) +{ + ino_t ino; + + AuDebugOn(bit < 0 || page_bits <= bit); + ino = AUFS_FIRST_INO + pindex * page_bits + bit; + return ino; +} + +static void xib_calc_bit(ino_t ino, unsigned long *pindex, int *bit) +{ + AuDebugOn(ino < AUFS_FIRST_INO); + ino -= AUFS_FIRST_INO; + *pindex = ino / page_bits; + *bit = ino % page_bits; +} + +static int xib_pindex(struct super_block *sb, unsigned long pindex) +{ + int err; + loff_t pos; + ssize_t sz; + struct au_sbinfo *sbinfo; + struct file *xib; + unsigned long *p; + + sbinfo = au_sbi(sb); + MtxMustLock(&sbinfo->si_xib_mtx); + AuDebugOn(pindex > ULONG_MAX / PAGE_SIZE + || !au_opt_test(sbinfo->si_mntflags, XINO)); + + if (pindex == sbinfo->si_xib_last_pindex) + return 0; + + xib = sbinfo->si_xib; + p = sbinfo->si_xib_buf; + pos = sbinfo->si_xib_last_pindex; + pos *= PAGE_SIZE; + sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); + if (unlikely(sz != PAGE_SIZE)) + goto out; + + pos = pindex; + pos *= PAGE_SIZE; + if (vfsub_f_size_read(xib) >= pos + PAGE_SIZE) + sz = xino_fread(sbinfo->si_xread, xib, p, PAGE_SIZE, &pos); + else { + memset(p, 0, PAGE_SIZE); + sz = xino_fwrite(sbinfo->si_xwrite, xib, p, PAGE_SIZE, &pos); + } + if (sz == PAGE_SIZE) { + sbinfo->si_xib_last_pindex = pindex; + return 0; /* success */ + } + +out: + AuIOErr1("write failed (%zd)\n", sz); + err = sz; + if (sz >= 0) + err = -EIO; + return err; +} + +/* ---------------------------------------------------------------------- */ + +static void au_xib_clear_bit(struct inode *inode) +{ + int err, bit; + unsigned long pindex; + struct super_block *sb; + struct au_sbinfo *sbinfo; + + AuDebugOn(inode->i_nlink); + + sb = inode->i_sb; + xib_calc_bit(inode->i_ino, &pindex, &bit); + AuDebugOn(page_bits <= bit); + sbinfo = au_sbi(sb); + mutex_lock(&sbinfo->si_xib_mtx); + err = xib_pindex(sb, pindex); + if (!err) { + clear_bit(bit, sbinfo->si_xib_buf); + sbinfo->si_xib_next_bit = bit; + } + mutex_unlock(&sbinfo->si_xib_mtx); +} + +/* for s_op->delete_inode() */ +void au_xino_delete_inode(struct inode *inode, const int unlinked) +{ + int err; + unsigned int mnt_flags; + aufs_bindex_t bindex, bbot, bi; + unsigned char try_trunc; + struct au_iinfo *iinfo; + struct super_block *sb; + struct au_hinode *hi; + struct inode *h_inode; + struct au_branch *br; + vfs_writef_t xwrite; + + AuDebugOn(au_is_bad_inode(inode)); + + sb = inode->i_sb; + mnt_flags = au_mntflags(sb); + if (!au_opt_test(mnt_flags, XINO) + || inode->i_ino == AUFS_ROOT_INO) + return; + + if (unlinked) { + au_xigen_inc(inode); + au_xib_clear_bit(inode); + } + + iinfo = au_ii(inode); + bindex = iinfo->ii_btop; + if (bindex < 0) + return; + + xwrite = au_sbi(sb)->si_xwrite; + try_trunc = !!au_opt_test(mnt_flags, TRUNC_XINO); + hi = au_hinode(iinfo, bindex); + bbot = iinfo->ii_bbot; + for (; bindex <= bbot; bindex++, hi++) { + h_inode = hi->hi_inode; + if (!h_inode + || (!unlinked && h_inode->i_nlink)) + continue; + + /* inode may not be revalidated */ + bi = au_br_index(sb, hi->hi_id); + if (bi < 0) + continue; + + br = au_sbr(sb, bi); + err = au_xino_do_write(xwrite, br->br_xino.xi_file, + h_inode->i_ino, /*ino*/0); + if (!err && try_trunc + && au_test_fs_trunc_xino(au_br_sb(br))) + xino_try_trunc(sb, br); + } +} + +/* get an unused inode number from bitmap */ +ino_t au_xino_new_ino(struct super_block *sb) +{ + ino_t ino; + unsigned long *p, pindex, ul, pend; + struct au_sbinfo *sbinfo; + struct file *file; + int free_bit, err; + + if (!au_opt_test(au_mntflags(sb), XINO)) + return iunique(sb, AUFS_FIRST_INO); + + sbinfo = au_sbi(sb); + mutex_lock(&sbinfo->si_xib_mtx); + p = sbinfo->si_xib_buf; + free_bit = sbinfo->si_xib_next_bit; + if (free_bit < page_bits && !test_bit(free_bit, p)) + goto out; /* success */ + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + + pindex = sbinfo->si_xib_last_pindex; + for (ul = pindex - 1; ul < ULONG_MAX; ul--) { + err = xib_pindex(sb, ul); + if (unlikely(err)) + goto out_err; + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + } + + file = sbinfo->si_xib; + pend = vfsub_f_size_read(file) / PAGE_SIZE; + for (ul = pindex + 1; ul <= pend; ul++) { + err = xib_pindex(sb, ul); + if (unlikely(err)) + goto out_err; + free_bit = find_first_zero_bit(p, page_bits); + if (free_bit < page_bits) + goto out; /* success */ + } + BUG(); + +out: + set_bit(free_bit, p); + sbinfo->si_xib_next_bit = free_bit + 1; + pindex = sbinfo->si_xib_last_pindex; + mutex_unlock(&sbinfo->si_xib_mtx); + ino = xib_calc_ino(pindex, free_bit); + AuDbg("i%lu\n", (unsigned long)ino); + return ino; +out_err: + mutex_unlock(&sbinfo->si_xib_mtx); + AuDbg("i0\n"); + return 0; +} + +/* + * read @ino from xinofile for the specified branch{@sb, @bindex} + * at the position of @h_ino. + * if @ino does not exist and @do_new is true, get new one. + */ +int au_xino_read(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + ino_t *ino) +{ + int err; + ssize_t sz; + loff_t pos; + struct file *file; + struct au_sbinfo *sbinfo; + + *ino = 0; + if (!au_opt_test(au_mntflags(sb), XINO)) + return 0; /* no xino */ + + err = 0; + sbinfo = au_sbi(sb); + pos = h_ino; + if (unlikely(au_loff_max / sizeof(*ino) - 1 < pos)) { + AuIOErr1("too large hi%lu\n", (unsigned long)h_ino); + return -EFBIG; + } + pos *= sizeof(*ino); + + file = au_sbr(sb, bindex)->br_xino.xi_file; + if (vfsub_f_size_read(file) < pos + sizeof(*ino)) + return 0; /* no ino */ + + sz = xino_fread(sbinfo->si_xread, file, ino, sizeof(*ino), &pos); + if (sz == sizeof(*ino)) + return 0; /* success */ + + err = sz; + if (unlikely(sz >= 0)) { + err = -EIO; + AuIOErr("xino read error (%zd)\n", sz); + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* create and set a new xino file */ + +struct file *au_xino_create(struct super_block *sb, char *fname, int silent) +{ + struct file *file; + struct dentry *h_parent, *d; + struct inode *h_dir, *inode; + int err; + + /* + * at mount-time, and the xino file is the default path, + * hnotify is disabled so we have no notify events to ignore. + * when a user specified the xino, we cannot get au_hdir to be ignored. + */ + file = vfsub_filp_open(fname, O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE + /* | __FMODE_NONOTIFY */, + S_IRUGO | S_IWUGO); + if (IS_ERR(file)) { + if (!silent) + pr_err("open %s(%ld)\n", fname, PTR_ERR(file)); + return file; + } + + /* keep file count */ + err = 0; + inode = file_inode(file); + h_parent = dget_parent(file->f_path.dentry); + h_dir = d_inode(h_parent); + inode_lock_nested(h_dir, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ + /* no delegation since it is just created */ + if (inode->i_nlink) + err = vfsub_unlink(h_dir, &file->f_path, /*delegated*/NULL, + /*force*/0); + inode_unlock(h_dir); + dput(h_parent); + if (unlikely(err)) { + if (!silent) + pr_err("unlink %s(%d)\n", fname, err); + goto out; + } + + err = -EINVAL; + d = file->f_path.dentry; + if (unlikely(sb == d->d_sb)) { + if (!silent) + pr_err("%s must be outside\n", fname); + goto out; + } + if (unlikely(au_test_fs_bad_xino(d->d_sb))) { + if (!silent) + pr_err("xino doesn't support %s(%s)\n", + fname, au_sbtype(d->d_sb)); + goto out; + } + return file; /* success */ + +out: + fput(file); + file = ERR_PTR(err); + return file; +} + +/* + * find another branch who is on the same filesystem of the specified + * branch{@btgt}. search until @bbot. + */ +static int is_sb_shared(struct super_block *sb, aufs_bindex_t btgt, + aufs_bindex_t bbot) +{ + aufs_bindex_t bindex; + struct super_block *tgt_sb = au_sbr_sb(sb, btgt); + + for (bindex = 0; bindex < btgt; bindex++) + if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) + return bindex; + for (bindex++; bindex <= bbot; bindex++) + if (unlikely(tgt_sb == au_sbr_sb(sb, bindex))) + return bindex; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +/* + * initialize the xinofile for the specified branch @br + * at the place/path where @base_file indicates. + * test whether another branch is on the same filesystem or not, + * if @do_test is true. + */ +int au_xino_br(struct super_block *sb, struct au_branch *br, ino_t h_ino, + struct file *base_file, int do_test) +{ + int err; + ino_t ino; + aufs_bindex_t bbot, bindex; + struct au_branch *shared_br, *b; + struct file *file; + struct super_block *tgt_sb; + + shared_br = NULL; + bbot = au_sbbot(sb); + if (do_test) { + tgt_sb = au_br_sb(br); + for (bindex = 0; bindex <= bbot; bindex++) { + b = au_sbr(sb, bindex); + if (tgt_sb == au_br_sb(b)) { + shared_br = b; + break; + } + } + } + + if (!shared_br || !shared_br->br_xino.xi_file) { + struct au_xino_lock_dir ldir; + + au_xino_lock_dir(sb, base_file, &ldir); + /* mnt_want_write() is unnecessary here */ + file = au_xino_create2(base_file, NULL); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + br->br_xino.xi_file = file; + } else { + br->br_xino.xi_file = shared_br->br_xino.xi_file; + get_file(br->br_xino.xi_file); + } + + ino = AUFS_ROOT_INO; + err = au_xino_do_write(au_sbi(sb)->si_xwrite, br->br_xino.xi_file, + h_ino, ino); + if (unlikely(err)) { + fput(br->br_xino.xi_file); + br->br_xino.xi_file = NULL; + } + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* trucate a xino bitmap file */ + +/* todo: slow */ +static int do_xib_restore(struct super_block *sb, struct file *file, void *page) +{ + int err, bit; + ssize_t sz; + unsigned long pindex; + loff_t pos, pend; + struct au_sbinfo *sbinfo; + vfs_readf_t func; + ino_t *ino; + unsigned long *p; + + err = 0; + sbinfo = au_sbi(sb); + MtxMustLock(&sbinfo->si_xib_mtx); + p = sbinfo->si_xib_buf; + func = sbinfo->si_xread; + pend = vfsub_f_size_read(file); + pos = 0; + while (pos < pend) { + sz = xino_fread(func, file, page, PAGE_SIZE, &pos); + err = sz; + if (unlikely(sz <= 0)) + goto out; + + err = 0; + for (ino = page; sz > 0; ino++, sz -= sizeof(ino)) { + if (unlikely(*ino < AUFS_FIRST_INO)) + continue; + + xib_calc_bit(*ino, &pindex, &bit); + AuDebugOn(page_bits <= bit); + err = xib_pindex(sb, pindex); + if (!err) + set_bit(bit, p); + else + goto out; + } + } + +out: + return err; +} + +static int xib_restore(struct super_block *sb) +{ + int err; + aufs_bindex_t bindex, bbot; + void *page; + + err = -ENOMEM; + page = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!page)) + goto out; + + err = 0; + bbot = au_sbbot(sb); + for (bindex = 0; !err && bindex <= bbot; bindex++) + if (!bindex || is_sb_shared(sb, bindex, bindex - 1) < 0) + err = do_xib_restore + (sb, au_sbr(sb, bindex)->br_xino.xi_file, page); + else + AuDbg("b%d\n", bindex); + free_page((unsigned long)page); + +out: + return err; +} + +int au_xib_trunc(struct super_block *sb) +{ + int err; + ssize_t sz; + loff_t pos; + struct au_xino_lock_dir ldir; + struct au_sbinfo *sbinfo; + unsigned long *p; + struct file *file; + + SiMustWriteLock(sb); + + err = 0; + sbinfo = au_sbi(sb); + if (!au_opt_test(sbinfo->si_mntflags, XINO)) + goto out; + + file = sbinfo->si_xib; + if (vfsub_f_size_read(file) <= PAGE_SIZE) + goto out; + + au_xino_lock_dir(sb, file, &ldir); + /* mnt_want_write() is unnecessary here */ + file = au_xino_create2(sbinfo->si_xib, NULL); + au_xino_unlock_dir(&ldir); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + fput(sbinfo->si_xib); + sbinfo->si_xib = file; + + p = sbinfo->si_xib_buf; + memset(p, 0, PAGE_SIZE); + pos = 0; + sz = xino_fwrite(sbinfo->si_xwrite, sbinfo->si_xib, p, PAGE_SIZE, &pos); + if (unlikely(sz != PAGE_SIZE)) { + err = sz; + AuIOErr("err %d\n", err); + if (sz >= 0) + err = -EIO; + goto out; + } + + mutex_lock(&sbinfo->si_xib_mtx); + /* mnt_want_write() is unnecessary here */ + err = xib_restore(sb); + mutex_unlock(&sbinfo->si_xib_mtx); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * xino mount option handlers + */ + +/* xino bitmap */ +static void xino_clear_xib(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + sbinfo->si_xread = NULL; + sbinfo->si_xwrite = NULL; + if (sbinfo->si_xib) + fput(sbinfo->si_xib); + sbinfo->si_xib = NULL; + if (sbinfo->si_xib_buf) + free_page((unsigned long)sbinfo->si_xib_buf); + sbinfo->si_xib_buf = NULL; +} + +static int au_xino_set_xib(struct super_block *sb, struct file *base) +{ + int err; + loff_t pos; + struct au_sbinfo *sbinfo; + struct file *file; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + file = au_xino_create2(base, sbinfo->si_xib); + err = PTR_ERR(file); + if (IS_ERR(file)) + goto out; + if (sbinfo->si_xib) + fput(sbinfo->si_xib); + sbinfo->si_xib = file; + sbinfo->si_xread = vfs_readf(file); + sbinfo->si_xwrite = vfs_writef(file); + + err = -ENOMEM; + if (!sbinfo->si_xib_buf) + sbinfo->si_xib_buf = (void *)get_zeroed_page(GFP_NOFS); + if (unlikely(!sbinfo->si_xib_buf)) + goto out_unset; + + sbinfo->si_xib_last_pindex = 0; + sbinfo->si_xib_next_bit = 0; + if (vfsub_f_size_read(file) < PAGE_SIZE) { + pos = 0; + err = xino_fwrite(sbinfo->si_xwrite, file, sbinfo->si_xib_buf, + PAGE_SIZE, &pos); + if (unlikely(err != PAGE_SIZE)) + goto out_free; + } + err = 0; + goto out; /* success */ + +out_free: + if (sbinfo->si_xib_buf) + free_page((unsigned long)sbinfo->si_xib_buf); + sbinfo->si_xib_buf = NULL; + if (err >= 0) + err = -EIO; +out_unset: + fput(sbinfo->si_xib); + sbinfo->si_xib = NULL; + sbinfo->si_xread = NULL; + sbinfo->si_xwrite = NULL; +out: + return err; +} + +/* xino for each branch */ +static void xino_clear_br(struct super_block *sb) +{ + aufs_bindex_t bindex, bbot; + struct au_branch *br; + + bbot = au_sbbot(sb); + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (!br || !br->br_xino.xi_file) + continue; + + fput(br->br_xino.xi_file); + br->br_xino.xi_file = NULL; + } +} + +static int au_xino_set_br(struct super_block *sb, struct file *base) +{ + int err; + ino_t ino; + aufs_bindex_t bindex, bbot, bshared; + struct { + struct file *old, *new; + } *fpair, *p; + struct au_branch *br; + struct inode *inode; + vfs_writef_t writef; + + SiMustWriteLock(sb); + + err = -ENOMEM; + bbot = au_sbbot(sb); + fpair = kcalloc(bbot + 1, sizeof(*fpair), GFP_NOFS); + if (unlikely(!fpair)) + goto out; + + inode = d_inode(sb->s_root); + ino = AUFS_ROOT_INO; + writef = au_sbi(sb)->si_xwrite; + for (bindex = 0, p = fpair; bindex <= bbot; bindex++, p++) { + bshared = is_sb_shared(sb, bindex, bindex - 1); + if (bshared >= 0) { + /* shared xino */ + *p = fpair[bshared]; + get_file(p->new); + } + + if (!p->new) { + /* new xino */ + br = au_sbr(sb, bindex); + p->old = br->br_xino.xi_file; + p->new = au_xino_create2(base, br->br_xino.xi_file); + err = PTR_ERR(p->new); + if (IS_ERR(p->new)) { + p->new = NULL; + goto out_pair; + } + } + + err = au_xino_do_write(writef, p->new, + au_h_iptr(inode, bindex)->i_ino, ino); + if (unlikely(err)) + goto out_pair; + } + + for (bindex = 0, p = fpair; bindex <= bbot; bindex++, p++) { + br = au_sbr(sb, bindex); + if (br->br_xino.xi_file) + fput(br->br_xino.xi_file); + get_file(p->new); + br->br_xino.xi_file = p->new; + } + +out_pair: + for (bindex = 0, p = fpair; bindex <= bbot; bindex++, p++) + if (p->new) + fput(p->new); + else + break; + kfree(fpair); +out: + return err; +} + +void au_xino_clr(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + + au_xigen_clr(sb); + xino_clear_xib(sb); + xino_clear_br(sb); + sbinfo = au_sbi(sb); + /* lvalue, do not call au_mntflags() */ + au_opt_clr(sbinfo->si_mntflags, XINO); +} + +int au_xino_set(struct super_block *sb, struct au_opt_xino *xino, int remount) +{ + int err, skip; + struct dentry *parent, *cur_parent; + struct qstr *dname, *cur_name; + struct file *cur_xino; + struct inode *dir; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + err = 0; + sbinfo = au_sbi(sb); + parent = dget_parent(xino->file->f_path.dentry); + if (remount) { + skip = 0; + dname = &xino->file->f_path.dentry->d_name; + cur_xino = sbinfo->si_xib; + if (cur_xino) { + cur_parent = dget_parent(cur_xino->f_path.dentry); + cur_name = &cur_xino->f_path.dentry->d_name; + skip = (cur_parent == parent + && au_qstreq(dname, cur_name)); + dput(cur_parent); + } + if (skip) + goto out; + } + + au_opt_set(sbinfo->si_mntflags, XINO); + dir = d_inode(parent); + inode_lock_nested(dir, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ + err = au_xino_set_xib(sb, xino->file); + if (!err) + err = au_xigen_set(sb, xino->file); + if (!err) + err = au_xino_set_br(sb, xino->file); + inode_unlock(dir); + if (!err) + goto out; /* success */ + + /* reset all */ + AuIOErr("failed creating xino(%d).\n", err); + au_xigen_clr(sb); + xino_clear_xib(sb); + +out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * create a xinofile at the default place/path. + */ +struct file *au_xino_def(struct super_block *sb) +{ + struct file *file; + char *page, *p; + struct au_branch *br; + struct super_block *h_sb; + struct path path; + aufs_bindex_t bbot, bindex, bwr; + + br = NULL; + bbot = au_sbbot(sb); + bwr = -1; + for (bindex = 0; bindex <= bbot; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_writable(br->br_perm) + && !au_test_fs_bad_xino(au_br_sb(br))) { + bwr = bindex; + break; + } + } + + if (bwr >= 0) { + file = ERR_PTR(-ENOMEM); + page = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!page)) + goto out; + path.mnt = au_br_mnt(br); + path.dentry = au_h_dptr(sb->s_root, bwr); + p = d_path(&path, page, PATH_MAX - sizeof(AUFS_XINO_FNAME)); + file = (void *)p; + if (!IS_ERR(p)) { + strcat(p, "/" AUFS_XINO_FNAME); + AuDbg("%s\n", p); + file = au_xino_create(sb, p, /*silent*/0); + if (!IS_ERR(file)) + au_xino_brid_set(sb, br->br_id); + } + free_page((unsigned long)page); + } else { + file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0); + if (IS_ERR(file)) + goto out; + h_sb = file->f_path.dentry->d_sb; + if (unlikely(au_test_fs_bad_xino(h_sb))) { + pr_err("xino doesn't support %s(%s)\n", + AUFS_XINO_DEFPATH, au_sbtype(h_sb)); + fput(file); + file = ERR_PTR(-EINVAL); + } + if (!IS_ERR(file)) + au_xino_brid_set(sb, -1); + } + +out: + return file; +} + +/* ---------------------------------------------------------------------- */ + +int au_xino_path(struct seq_file *seq, struct file *file) +{ + int err; + + err = au_seq_path(seq, &file->f_path); + if (unlikely(err)) + goto out; + +#define Deleted "\\040(deleted)" + seq->count -= sizeof(Deleted) - 1; + AuDebugOn(memcmp(seq->buf + seq->count, Deleted, + sizeof(Deleted) - 1)); +#undef Deleted + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_xinondir_leave(struct super_block *sb, aufs_bindex_t bindex, + ino_t h_ino, int idx) +{ + struct au_xino_file *xino; + + AuDebugOn(!au_opt_test(au_mntflags(sb), XINO)); + xino = &au_sbr(sb, bindex)->br_xino; + AuDebugOn(idx < 0 || xino->xi_nondir.total <= idx); + + spin_lock(&xino->xi_nondir.spin); + AuDebugOn(xino->xi_nondir.array[idx] != h_ino); + xino->xi_nondir.array[idx] = 0; + spin_unlock(&xino->xi_nondir.spin); + wake_up_all(&xino->xi_nondir.wqh); +} + +static int au_xinondir_find(struct au_xino_file *xino, ino_t h_ino) +{ + int found, total, i; + + found = -1; + total = xino->xi_nondir.total; + for (i = 0; i < total; i++) { + if (xino->xi_nondir.array[i] != h_ino) + continue; + found = i; + break; + } + + return found; +} + +static int au_xinondir_expand(struct au_xino_file *xino) +{ + int err, sz; + ino_t *p; + + BUILD_BUG_ON(KMALLOC_MAX_SIZE > INT_MAX); + + err = -ENOMEM; + sz = xino->xi_nondir.total * sizeof(ino_t); + if (unlikely(sz > KMALLOC_MAX_SIZE / 2)) + goto out; + p = au_kzrealloc(xino->xi_nondir.array, sz, sz << 1, GFP_ATOMIC, + /*may_shrink*/0); + if (p) { + xino->xi_nondir.array = p; + xino->xi_nondir.total <<= 1; + AuDbg("xi_nondir.total %d\n", xino->xi_nondir.total); + err = 0; + } + +out: + return err; +} + +int au_xinondir_enter(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino, + int *idx) +{ + int err, found, empty; + struct au_xino_file *xino; + + err = 0; + *idx = -1; + if (!au_opt_test(au_mntflags(sb), XINO)) + goto out; /* no xino */ + + xino = &au_sbr(sb, bindex)->br_xino; + +again: + spin_lock(&xino->xi_nondir.spin); + found = au_xinondir_find(xino, h_ino); + if (found == -1) { + empty = au_xinondir_find(xino, /*h_ino*/0); + if (empty == -1) { + empty = xino->xi_nondir.total; + err = au_xinondir_expand(xino); + if (unlikely(err)) + goto out_unlock; + } + xino->xi_nondir.array[empty] = h_ino; + *idx = empty; + } else { + spin_unlock(&xino->xi_nondir.spin); + wait_event(xino->xi_nondir.wqh, + xino->xi_nondir.array[found] != h_ino); + goto again; + } + +out_unlock: + spin_unlock(&xino->xi_nondir.spin); +out: + return err; +} --- linux-aws-4.15.0.orig/fs/block_dev.c +++ linux-aws-4.15.0/fs/block_dev.c @@ -1660,9 +1660,14 @@ void *holder) { struct block_device *bdev; + int perm = 0; int err; - bdev = lookup_bdev(path); + if (mode & FMODE_READ) + perm |= MAY_READ; + if (mode & FMODE_WRITE) + perm |= MAY_WRITE; + bdev = lookup_bdev(path, perm); if (IS_ERR(bdev)) return bdev; @@ -1743,6 +1748,20 @@ if (bdev == NULL) return -ENOMEM; + /* + * A negative i_writecount for bdev->bd_inode means that the bdev + * or one of its paritions is mounted in a user namespace. Deny + * writing for non-root in this case, otherwise an unprivileged + * user can attack the kernel by modifying the backing store of a + * mounted filesystem. + */ + if ((filp->f_mode & FMODE_WRITE) && + !file_ns_capable(filp, &init_user_ns, CAP_SYS_ADMIN) && + !atomic_inc_unless_negative(&bdev->bd_inode->i_writecount)) { + bdput(bdev); + return -EBUSY; + } + filp->f_mapping = bdev->bd_inode->i_mapping; filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping); @@ -1839,6 +1858,9 @@ static int blkdev_close(struct inode * inode, struct file * filp) { struct block_device *bdev = I_BDEV(bdev_file_inode(filp)); + if (filp->f_mode & FMODE_WRITE && + !file_ns_capable(filp, &init_user_ns, CAP_SYS_ADMIN)) + atomic_dec(&bdev->bd_inode->i_writecount); blkdev_put(bdev, filp->f_mode); return 0; } @@ -2052,12 +2074,14 @@ /** * lookup_bdev - lookup a struct block_device by name * @pathname: special file representing the block device + * @mask: rights to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC) * * Get a reference to the blockdevice at @pathname in the current * namespace if possible and return it. Return ERR_PTR(error) - * otherwise. + * otherwise. If @mask is non-zero, check for access rights to the + * inode at @pathname. */ -struct block_device *lookup_bdev(const char *pathname) +struct block_device *lookup_bdev(const char *pathname, int mask) { struct block_device *bdev; struct inode *inode; @@ -2072,6 +2096,11 @@ return ERR_PTR(error); inode = d_backing_inode(path.dentry); + if (mask != 0 && !capable(CAP_SYS_ADMIN)) { + error = __inode_permission(inode, mask); + if (error) + goto fail; + } error = -ENOTBLK; if (!S_ISBLK(inode->i_mode)) goto fail; --- linux-aws-4.15.0.orig/fs/dcache.c +++ linux-aws-4.15.0/fs/dcache.c @@ -1197,7 +1197,7 @@ * * The @enter() and @finish() callbacks are called with d_lock held. */ -static void d_walk(struct dentry *parent, void *data, +void d_walk(struct dentry *parent, void *data, enum d_walk_ret (*enter)(void *, struct dentry *), void (*finish)(void *)) { @@ -1305,6 +1305,7 @@ seq = 1; goto again; } +EXPORT_SYMBOL_GPL(d_walk); struct check_mount { struct vfsmount *mnt; @@ -2892,6 +2893,7 @@ write_sequnlock(&rename_lock); } +EXPORT_SYMBOL_GPL(d_exchange); /** * d_ancestor - search for an ancestor --- linux-aws-4.15.0.orig/fs/debugfs/file.c +++ linux-aws-4.15.0/fs/debugfs/file.c @@ -142,6 +142,10 @@ const struct file_operations *real_fops = NULL; int r; + if (kernel_is_locked_down("debugfs")) + return -EPERM; + + r = debugfs_file_get(dentry); if (r) return r == -EIO ? -ENOENT : r; @@ -267,6 +271,9 @@ struct file_operations *proxy_fops = NULL; int r; + if (kernel_is_locked_down("debugfs")) + return -EPERM; + r = debugfs_file_get(dentry); if (r) return r == -EIO ? -ENOENT : r; --- linux-aws-4.15.0.orig/fs/exec.c +++ linux-aws-4.15.0/fs/exec.c @@ -63,6 +63,8 @@ #include #include +#include + #include #include #include @@ -109,6 +111,14 @@ return (path->mnt->mnt_flags & MNT_NOEXEC) || (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC); } +EXPORT_SYMBOL_GPL(path_noexec); + +bool path_nosuid(const struct path *path) +{ + return !mnt_may_suid(path->mnt) || + (path->mnt->mnt_sb->s_iflags & SB_I_NOSUID); +} +EXPORT_SYMBOL(path_nosuid); #ifdef CONFIG_USELIB /* @@ -864,6 +874,8 @@ if (name->name[0] != '\0') fsnotify_open(file); + trace_open_exec(name->name); + out: return file; @@ -1507,7 +1519,7 @@ bprm->cred->euid = current_euid(); bprm->cred->egid = current_egid(); - if (!mnt_may_suid(bprm->file->f_path.mnt)) + if (path_nosuid(&bprm->file->f_path)) return; if (task_no_new_privs(current)) --- linux-aws-4.15.0.orig/fs/ext4/acl.c +++ linux-aws-4.15.0/fs/ext4/acl.c @@ -15,7 +15,7 @@ * Convert from filesystem to in-memory representation. */ static struct posix_acl * -ext4_acl_from_disk(const void *value, size_t size) +ext4_acl_from_disk(struct super_block *sb, const void *value, size_t size) { const char *end = (char *)value + size; int n, count; @@ -59,16 +59,20 @@ if ((char *)value > end) goto fail; acl->a_entries[n].e_uid = - make_kuid(&init_user_ns, + make_kuid(sb->s_user_ns, le32_to_cpu(entry->e_id)); + if (!uid_valid(acl->a_entries[n].e_uid)) + goto fail; break; case ACL_GROUP: value = (char *)value + sizeof(ext4_acl_entry); if ((char *)value > end) goto fail; acl->a_entries[n].e_gid = - make_kgid(&init_user_ns, + make_kgid(sb->s_user_ns, le32_to_cpu(entry->e_id)); + if (!gid_valid(acl->a_entries[n].e_gid)) + goto fail; break; default: @@ -88,11 +92,14 @@ * Convert from in-memory to filesystem representation. */ static void * -ext4_acl_to_disk(const struct posix_acl *acl, size_t *size) +ext4_acl_to_disk(struct super_block *sb, const struct posix_acl *acl, + size_t *size) { ext4_acl_header *ext_acl; char *e; size_t n; + uid_t uid; + gid_t gid; *size = ext4_acl_size(acl->a_count); ext_acl = kmalloc(sizeof(ext4_acl_header) + acl->a_count * @@ -108,13 +115,17 @@ entry->e_perm = cpu_to_le16(acl_e->e_perm); switch (acl_e->e_tag) { case ACL_USER: - entry->e_id = cpu_to_le32( - from_kuid(&init_user_ns, acl_e->e_uid)); + uid = from_kuid(sb->s_user_ns, acl_e->e_uid); + if (uid == (uid_t)-1) + goto fail; + entry->e_id = cpu_to_le32(uid); e += sizeof(ext4_acl_entry); break; case ACL_GROUP: - entry->e_id = cpu_to_le32( - from_kgid(&init_user_ns, acl_e->e_gid)); + gid = from_kgid(sb->s_user_ns, acl_e->e_gid); + if (gid == (gid_t)-1) + goto fail; + entry->e_id = cpu_to_le32(gid); e += sizeof(ext4_acl_entry); break; @@ -167,7 +178,7 @@ retval = ext4_xattr_get(inode, name_index, "", value, retval); } if (retval > 0) - acl = ext4_acl_from_disk(value, retval); + acl = ext4_acl_from_disk(inode->i_sb, value, retval); else if (retval == -ENODATA || retval == -ENOSYS) acl = NULL; else @@ -206,7 +217,7 @@ return -EINVAL; } if (acl) { - value = ext4_acl_to_disk(acl, &size); + value = ext4_acl_to_disk(inode->i_sb, acl, &size); if (IS_ERR(value)) return (int)PTR_ERR(value); } --- linux-aws-4.15.0.orig/fs/ext4/balloc.c +++ linux-aws-4.15.0/fs/ext4/balloc.c @@ -566,8 +566,8 @@ /* Hm, nope. Are (enough) root reserved clusters available? */ if (uid_eq(sbi->s_resuid, current_fsuid()) || - (!gid_eq(sbi->s_resgid, GLOBAL_ROOT_GID) && in_group_p(sbi->s_resgid)) || - capable(CAP_SYS_RESOURCE) || + (!gid_eq(sbi->s_resgid, make_kgid(sbi->s_sb->s_user_ns, 0)) && in_group_p(sbi->s_resgid)) || + ns_capable(sbi->s_sb->s_user_ns, CAP_SYS_RESOURCE) || (flags & EXT4_MB_USE_ROOT_BLOCKS)) { if (free_clusters >= (nclusters + dirty_clusters + --- linux-aws-4.15.0.orig/fs/ext4/ialloc.c +++ linux-aws-4.15.0/fs/ext4/ialloc.c @@ -801,6 +801,10 @@ if (unlikely(ext4_forced_shutdown(sbi))) return ERR_PTR(-EIO); + /* Supplied owner must be valid */ + if (owner && (owner[0] == (uid_t)-1 || owner[1] == (uid_t)-1)) + return ERR_PTR(-EOVERFLOW); + if ((ext4_encrypted_inode(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) && !(i_flags & EXT4_EA_INODE_FL)) { @@ -881,7 +885,7 @@ ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) ei->i_projid = EXT4_I(dir)->i_projid; else - ei->i_projid = make_kprojid(&init_user_ns, EXT4_DEF_PROJID); + ei->i_projid = make_kprojid(sb->s_user_ns, EXT4_DEF_PROJID); err = dquot_initialize(inode); if (err) --- linux-aws-4.15.0.orig/fs/ext4/inode.c +++ linux-aws-4.15.0/fs/ext4/inode.c @@ -4786,7 +4786,7 @@ } i_uid_write(inode, i_uid); i_gid_write(inode, i_gid); - ei->i_projid = make_kprojid(&init_user_ns, i_projid); + ei->i_projid = make_kprojid(sb->s_user_ns, i_projid); set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */ @@ -5104,7 +5104,7 @@ raw_inode->i_mode = cpu_to_le16(inode->i_mode); i_uid = i_uid_read(inode); i_gid = i_gid_read(inode); - i_projid = from_kprojid(&init_user_ns, ei->i_projid); + i_projid = from_kprojid(sb->s_user_ns, ei->i_projid); if (!(test_opt(inode->i_sb, NO_UID32))) { raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid)); raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid)); @@ -5183,12 +5183,14 @@ } } - BUG_ON(!ext4_has_feature_project(inode->i_sb) && - i_projid != EXT4_DEF_PROJID); - - if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && - EXT4_FITS_IN_INODE(raw_inode, ei, i_projid)) - raw_inode->i_projid = cpu_to_le32(i_projid); + if (i_projid != (projid_t)-1) { + BUG_ON(!ext4_has_feature_project(inode->i_sb) && + i_projid != EXT4_DEF_PROJID); + + if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && + EXT4_FITS_IN_INODE(raw_inode, ei, i_projid)) + raw_inode->i_projid = cpu_to_le32(i_projid); + } ext4_inode_csum_set(inode, raw_inode, ei); spin_unlock(&ei->i_raw_lock); --- linux-aws-4.15.0.orig/fs/ext4/ioctl.c +++ linux-aws-4.15.0/fs/ext4/ioctl.c @@ -239,7 +239,7 @@ * the relevant capability. */ if ((jflag ^ oldflags) & (EXT4_JOURNAL_DATA_FL)) { - if (!capable(CAP_SYS_RESOURCE)) + if (!ns_capable(inode->i_sb->s_user_ns, CAP_SYS_RESOURCE)) goto flags_out; } if ((flags ^ oldflags) & EXT4_EXTENTS_FL) @@ -337,8 +337,10 @@ if (EXT4_INODE_SIZE(sb) <= EXT4_GOOD_OLD_INODE_SIZE) return -EOPNOTSUPP; - kprojid = make_kprojid(&init_user_ns, (projid_t)projid); + kprojid = make_kprojid(sb->s_user_ns, (projid_t)projid); + if (!projid_valid(kprojid)) + return -EOVERFLOW; if (projid_eq(kprojid, EXT4_I(inode)->i_projid)) return 0; @@ -914,7 +916,7 @@ struct fstrim_range range; int ret = 0; - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; if (!blk_queue_discard(q)) @@ -995,7 +997,7 @@ fa.fsx_xflags = ext4_iflags_to_xflags(ei->i_flags & EXT4_FL_USER_VISIBLE); if (ext4_has_feature_project(inode->i_sb)) { - fa.fsx_projid = (__u32)from_kprojid(&init_user_ns, + fa.fsx_projid = (__u32)from_kprojid_munged(sb->s_user_ns, EXT4_I(inode)->i_projid); } --- linux-aws-4.15.0.orig/fs/ext4/namei.c +++ linux-aws-4.15.0/fs/ext4/namei.c @@ -3222,8 +3222,8 @@ return err; if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) && - (!projid_eq(EXT4_I(dir)->i_projid, - EXT4_I(old_dentry->d_inode)->i_projid))) + (!projid_valid_eq(EXT4_I(dir)->i_projid, + EXT4_I(old_dentry->d_inode)->i_projid))) return -EXDEV; err = dquot_initialize(dir); @@ -3507,8 +3507,8 @@ u8 old_file_type; if ((ext4_test_inode_flag(new_dir, EXT4_INODE_PROJINHERIT)) && - (!projid_eq(EXT4_I(new_dir)->i_projid, - EXT4_I(old_dentry->d_inode)->i_projid))) + (!projid_valid_eq(EXT4_I(new_dir)->i_projid, + EXT4_I(old_dentry->d_inode)->i_projid))) return -EXDEV; retval = dquot_initialize(old.dir); @@ -3705,11 +3705,11 @@ struct timespec ctime; if ((ext4_test_inode_flag(new_dir, EXT4_INODE_PROJINHERIT) && - !projid_eq(EXT4_I(new_dir)->i_projid, - EXT4_I(old_dentry->d_inode)->i_projid)) || + !projid_valid_eq(EXT4_I(new_dir)->i_projid, + EXT4_I(old_dentry->d_inode)->i_projid)) || (ext4_test_inode_flag(old_dir, EXT4_INODE_PROJINHERIT) && - !projid_eq(EXT4_I(old_dir)->i_projid, - EXT4_I(new_dentry->d_inode)->i_projid))) + !projid_valid_eq(EXT4_I(old_dir)->i_projid, + EXT4_I(new_dentry->d_inode)->i_projid))) return -EXDEV; retval = dquot_initialize(old.dir); --- linux-aws-4.15.0.orig/fs/ext4/resize.c +++ linux-aws-4.15.0/fs/ext4/resize.c @@ -21,7 +21,7 @@ { int ret = 0; - if (!capable(CAP_SYS_RESOURCE)) + if (!ns_capable(sb->s_user_ns, CAP_SYS_RESOURCE)) return -EPERM; /* --- linux-aws-4.15.0.orig/fs/ext4/super.c +++ linux-aws-4.15.0/fs/ext4/super.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -113,13 +114,17 @@ * transaction start -> page lock(s) -> i_data_sem (rw) */ +static bool userns_mounts = false; +module_param(userns_mounts, bool, 0644); +MODULE_PARM_DESC(userns_mounts, "Allow mounts from unprivileged user namespaces"); + #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2) static struct file_system_type ext2_fs_type = { .owner = THIS_MODULE, .name = "ext2", .mount = ext4_mount, .kill_sb = kill_block_super, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS("ext2"); MODULE_ALIAS("ext2"); @@ -134,7 +139,7 @@ .name = "ext3", .mount = ext4_mount, .kill_sb = kill_block_super, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS("ext3"); MODULE_ALIAS("ext3"); @@ -1710,6 +1715,13 @@ return -1; } + if (token == Opt_err_panic && !capable(CAP_SYS_ADMIN)) { + ext4_msg(sb, KERN_ERR, + "Mount option \"%s\" not allowed for unprivileged mounts", + opt); + return -1; + } + if (args->from && !(m->flags & MOPT_STRING) && match_int(args, &arg)) return -1; if (args->from && (m->flags & MOPT_GTE0) && (arg < 0)) @@ -1760,14 +1772,14 @@ } else if (token == Opt_stripe) { sbi->s_stripe = arg; } else if (token == Opt_resuid) { - uid = make_kuid(current_user_ns(), arg); + uid = make_kuid(sb->s_user_ns, arg); if (!uid_valid(uid)) { ext4_msg(sb, KERN_ERR, "Invalid uid value %d", arg); return -1; } sbi->s_resuid = uid; } else if (token == Opt_resgid) { - gid = make_kgid(current_user_ns(), arg); + gid = make_kgid(sb->s_user_ns, arg); if (!gid_valid(gid)) { ext4_msg(sb, KERN_ERR, "Invalid gid value %d", arg); return -1; @@ -1806,6 +1818,19 @@ return -1; } + /* + * Refuse access for unprivileged mounts if the user does + * not have rw access to the journal device via the supplied + * path. + */ + if (!capable(CAP_SYS_ADMIN) && + inode_permission(d_inode(path.dentry), MAY_READ|MAY_WRITE)) { + ext4_msg(sb, KERN_ERR, + "error: Insufficient access to journal path %s", + journal_path); + return -1; + } + journal_inode = d_inode(path.dentry); if (!S_ISBLK(journal_inode->i_mode)) { ext4_msg(sb, KERN_ERR, "error: journal path %s " @@ -2041,14 +2066,14 @@ SEQ_OPTS_PRINT("%s", token2str(m->token)); } - if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || + if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(sb->s_user_ns, EXT4_DEF_RESUID)) || le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID) SEQ_OPTS_PRINT("resuid=%u", - from_kuid_munged(&init_user_ns, sbi->s_resuid)); - if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || + from_kuid_munged(sb->s_user_ns, sbi->s_resuid)); + if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(sb->s_user_ns, EXT4_DEF_RESGID)) || le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID) SEQ_OPTS_PRINT("resgid=%u", - from_kgid_munged(&init_user_ns, sbi->s_resgid)); + from_kgid_munged(sb->s_user_ns, sbi->s_resgid)); def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors); if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO) SEQ_OPTS_PUTS("errors=remount-ro"); @@ -3422,6 +3447,11 @@ if ((data && !orig_data) || !sbi) goto out_free_base; + if (!userns_mounts && !capable(CAP_SYS_ADMIN)) { + ret = -EPERM; + goto out_free_base; + } + sbi->s_daxdev = dax_dev; sbi->s_blockgroup_lock = kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); @@ -3540,19 +3570,26 @@ else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK) set_opt(sb, WRITEBACK_DATA); - if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) + if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) { + if (!capable(CAP_SYS_ADMIN)) + goto failed_mount; set_opt(sb, ERRORS_PANIC); - else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) + } else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) { set_opt(sb, ERRORS_CONT); - else + } else { set_opt(sb, ERRORS_RO); + } /* block_validity enabled by default; disable with noblock_validity */ set_opt(sb, BLOCK_VALIDITY); if (def_mount_opts & EXT4_DEFM_DISCARD) set_opt(sb, DISCARD); - sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid)); - sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid)); + sbi->s_resuid = make_kuid(sb->s_user_ns, le16_to_cpu(es->s_def_resuid)); + if (!uid_valid(sbi->s_resuid)) + sbi->s_resuid = make_kuid(sb->s_user_ns, EXT4_DEF_RESUID); + sbi->s_resgid = make_kgid(sb->s_user_ns, le16_to_cpu(es->s_def_resgid)); + if (!gid_valid(sbi->s_resgid)) + sbi->s_resgid = make_kgid(sb->s_user_ns, EXT4_DEF_RESGID); sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; @@ -4398,6 +4435,7 @@ ext4_blkdev_remove(sbi); brelse(bh); out_fail: + /* sb->s_user_ns will be put when sb is destroyed */ sb->s_fs_info = NULL; kfree(sbi->s_blockgroup_lock); out_free_base: @@ -5775,7 +5813,7 @@ .name = "ext4", .mount = ext4_mount, .kill_sb = kill_block_super, - .fs_flags = FS_REQUIRES_DEV, + .fs_flags = FS_REQUIRES_DEV | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS("ext4"); --- linux-aws-4.15.0.orig/fs/fcntl.c +++ linux-aws-4.15.0/fs/fcntl.c @@ -32,7 +32,7 @@ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME) -static int setfl(int fd, struct file * filp, unsigned long arg) +int setfl(int fd, struct file * filp, unsigned long arg) { struct inode * inode = file_inode(filp); int error = 0; @@ -63,6 +63,8 @@ if (filp->f_op->check_flags) error = filp->f_op->check_flags(arg); + if (!error && filp->f_op->setfl) + error = filp->f_op->setfl(filp, arg); if (error) return error; @@ -83,6 +85,7 @@ out: return error; } +EXPORT_SYMBOL_GPL(setfl); static void f_modown(struct file *filp, struct pid *pid, enum pid_type type, int force) --- linux-aws-4.15.0.orig/fs/file_table.c +++ linux-aws-4.15.0/fs/file_table.c @@ -148,6 +148,7 @@ } return ERR_PTR(-ENFILE); } +EXPORT_SYMBOL_GPL(get_empty_filp); /** * alloc_file - allocate and initialize a 'struct file' @@ -258,6 +259,7 @@ { delayed_fput(NULL); } +EXPORT_SYMBOL_GPL(flush_delayed_fput); static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput); @@ -300,6 +302,7 @@ } EXPORT_SYMBOL(fput); +EXPORT_SYMBOL_GPL(__fput_sync); void put_filp(struct file *file) { @@ -308,6 +311,7 @@ file_free(file); } } +EXPORT_SYMBOL_GPL(put_filp); void __init files_init(void) { --- linux-aws-4.15.0.orig/fs/fuse/cuse.c +++ linux-aws-4.15.0/fs/fuse/cuse.c @@ -48,6 +48,7 @@ #include #include #include +#include #include "fuse_i.h" @@ -498,7 +499,7 @@ if (!cc) return -ENOMEM; - fuse_conn_init(&cc->fc); + fuse_conn_init(&cc->fc, current_user_ns()); fud = fuse_dev_alloc(&cc->fc); if (!fud) { --- linux-aws-4.15.0.orig/fs/fuse/dev.c +++ linux-aws-4.15.0/fs/fuse/dev.c @@ -114,8 +114,8 @@ static void fuse_req_init_context(struct fuse_conn *fc, struct fuse_req *req) { - req->in.h.uid = from_kuid_munged(&init_user_ns, current_fsuid()); - req->in.h.gid = from_kgid_munged(&init_user_ns, current_fsgid()); + req->in.h.uid = from_kuid(fc->user_ns, current_fsuid()); + req->in.h.gid = from_kgid(fc->user_ns, current_fsgid()); req->in.h.pid = pid_nr_ns(task_pid(current), fc->pid_ns); } @@ -167,6 +167,10 @@ __set_bit(FR_WAITING, &req->flags); if (for_background) __set_bit(FR_BACKGROUND, &req->flags); + if (req->in.h.uid == (uid_t)-1 || req->in.h.gid == (gid_t)-1) { + fuse_put_request(fc, req); + return ERR_PTR(-EOVERFLOW); + } return req; @@ -1222,6 +1226,9 @@ struct fuse_in *in; unsigned reqsize; + if (current_user_ns() != fc->user_ns) + return -EIO; + restart: spin_lock(&fiq->waitq.lock); err = -EAGAIN; @@ -1827,6 +1834,9 @@ struct fuse_req *req; struct fuse_out_header oh; + if (current_user_ns() != fc->user_ns) + return -EIO; + if (nbytes < sizeof(struct fuse_out_header)) return -EINVAL; --- linux-aws-4.15.0.orig/fs/fuse/dir.c +++ linux-aws-4.15.0/fs/fuse/dir.c @@ -858,8 +858,8 @@ stat->ino = attr->ino; stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); stat->nlink = attr->nlink; - stat->uid = make_kuid(&init_user_ns, attr->uid); - stat->gid = make_kgid(&init_user_ns, attr->gid); + stat->uid = make_kuid(fc->user_ns, attr->uid); + stat->gid = make_kgid(fc->user_ns, attr->gid); stat->rdev = inode->i_rdev; stat->atime.tv_sec = attr->atime; stat->atime.tv_nsec = attr->atimensec; @@ -1030,7 +1030,7 @@ const struct cred *cred; if (fc->allow_other) - return 1; + return current_in_userns(fc->user_ns); cred = current_cred(); if (uid_eq(cred->euid, fc->user_id) && @@ -1475,17 +1475,17 @@ return true; } -static void iattr_to_fattr(struct iattr *iattr, struct fuse_setattr_in *arg, - bool trust_local_cmtime) +static void iattr_to_fattr(struct fuse_conn *fc, struct iattr *iattr, + struct fuse_setattr_in *arg, bool trust_local_cmtime) { unsigned ivalid = iattr->ia_valid; if (ivalid & ATTR_MODE) arg->valid |= FATTR_MODE, arg->mode = iattr->ia_mode; if (ivalid & ATTR_UID) - arg->valid |= FATTR_UID, arg->uid = from_kuid(&init_user_ns, iattr->ia_uid); + arg->valid |= FATTR_UID, arg->uid = from_kuid(fc->user_ns, iattr->ia_uid); if (ivalid & ATTR_GID) - arg->valid |= FATTR_GID, arg->gid = from_kgid(&init_user_ns, iattr->ia_gid); + arg->valid |= FATTR_GID, arg->gid = from_kgid(fc->user_ns, iattr->ia_gid); if (ivalid & ATTR_SIZE) arg->valid |= FATTR_SIZE, arg->size = iattr->ia_size; if (ivalid & ATTR_ATIME) { @@ -1646,7 +1646,7 @@ memset(&inarg, 0, sizeof(inarg)); memset(&outarg, 0, sizeof(outarg)); - iattr_to_fattr(attr, &inarg, trust_local_cmtime); + iattr_to_fattr(fc, attr, &inarg, trust_local_cmtime); if (file) { struct fuse_file *ff = file->private_data; inarg.valid |= FATTR_FH; --- linux-aws-4.15.0.orig/fs/fuse/fuse_i.h +++ linux-aws-4.15.0/fs/fuse/fuse_i.h @@ -26,6 +26,7 @@ #include #include #include +#include /** Max number of pages that can be used in a single read request */ #define FUSE_MAX_PAGES_PER_REQ 32 @@ -466,6 +467,9 @@ /** The pid namespace for this mount */ struct pid_namespace *pid_ns; + /** The user namespace for this mount */ + struct user_namespace *user_ns; + /** Maximum read size */ unsigned max_read; @@ -870,7 +874,7 @@ /** * Initialize fuse_conn */ -void fuse_conn_init(struct fuse_conn *fc); +void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns); /** * Release reference to fuse_conn --- linux-aws-4.15.0.orig/fs/fuse/inode.c +++ linux-aws-4.15.0/fs/fuse/inode.c @@ -171,8 +171,8 @@ inode->i_ino = fuse_squash_ino(attr->ino); inode->i_mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); set_nlink(inode, attr->nlink); - inode->i_uid = make_kuid(&init_user_ns, attr->uid); - inode->i_gid = make_kgid(&init_user_ns, attr->gid); + inode->i_uid = make_kuid(fc->user_ns, attr->uid); + inode->i_gid = make_kgid(fc->user_ns, attr->gid); inode->i_blocks = attr->blocks; inode->i_atime.tv_sec = attr->atime; inode->i_atime.tv_nsec = attr->atimensec; @@ -477,7 +477,8 @@ return err; } -static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev) +static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev, + struct user_namespace *user_ns) { char *p; memset(d, 0, sizeof(struct fuse_mount_data)); @@ -513,7 +514,7 @@ case OPT_USER_ID: if (fuse_match_uint(&args[0], &uv)) return 0; - d->user_id = make_kuid(current_user_ns(), uv); + d->user_id = make_kuid(user_ns, uv); if (!uid_valid(d->user_id)) return 0; d->user_id_present = 1; @@ -522,7 +523,7 @@ case OPT_GROUP_ID: if (fuse_match_uint(&args[0], &uv)) return 0; - d->group_id = make_kgid(current_user_ns(), uv); + d->group_id = make_kgid(user_ns, uv); if (!gid_valid(d->group_id)) return 0; d->group_id_present = 1; @@ -565,8 +566,8 @@ struct super_block *sb = root->d_sb; struct fuse_conn *fc = get_fuse_conn_super(sb); - seq_printf(m, ",user_id=%u", from_kuid_munged(&init_user_ns, fc->user_id)); - seq_printf(m, ",group_id=%u", from_kgid_munged(&init_user_ns, fc->group_id)); + seq_printf(m, ",user_id=%u", from_kuid_munged(fc->user_ns, fc->user_id)); + seq_printf(m, ",group_id=%u", from_kgid_munged(fc->user_ns, fc->group_id)); if (fc->default_permissions) seq_puts(m, ",default_permissions"); if (fc->allow_other) @@ -597,7 +598,7 @@ fpq->connected = 1; } -void fuse_conn_init(struct fuse_conn *fc) +void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns) { memset(fc, 0, sizeof(*fc)); spin_lock_init(&fc->lock); @@ -621,6 +622,7 @@ fc->attr_version = 1; get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); fc->pid_ns = get_pid_ns(task_active_pid_ns(current)); + fc->user_ns = get_user_ns(user_ns); } EXPORT_SYMBOL_GPL(fuse_conn_init); @@ -630,6 +632,7 @@ if (fc->destroy_req) fuse_request_free(fc->destroy_req); put_pid_ns(fc->pid_ns); + put_user_ns(fc->user_ns); fc->release(fc); } } @@ -1061,7 +1064,7 @@ sb->s_flags &= ~(SB_NOSEC | SB_I_VERSION); - if (!parse_fuse_opt(data, &d, is_bdev)) + if (!parse_fuse_opt(data, &d, is_bdev, sb->s_user_ns)) goto err; if (is_bdev) { @@ -1086,8 +1089,12 @@ if (!file) goto err; - if ((file->f_op != &fuse_dev_operations) || - (file->f_cred->user_ns != &init_user_ns)) + /* + * Require mount to happen from the same user namespace which + * opened /dev/fuse to prevent potential attacks. + */ + if (file->f_op != &fuse_dev_operations || + file->f_cred->user_ns != sb->s_user_ns) goto err_fput; fc = kmalloc(sizeof(*fc), GFP_KERNEL); @@ -1095,7 +1102,7 @@ if (!fc) goto err_fput; - fuse_conn_init(fc); + fuse_conn_init(fc, sb->s_user_ns); fc->release = fuse_free_conn; fud = fuse_dev_alloc(fc); @@ -1205,7 +1212,7 @@ static struct file_system_type fuse_fs_type = { .owner = THIS_MODULE, .name = "fuse", - .fs_flags = FS_HAS_SUBTYPE, + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, .mount = fuse_mount, .kill_sb = fuse_kill_sb_anon, }; @@ -1237,7 +1244,7 @@ .name = "fuseblk", .mount = fuse_mount_blk, .kill_sb = fuse_kill_sb_blk, - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS("fuseblk"); --- linux-aws-4.15.0.orig/fs/inode.c +++ linux-aws-4.15.0/fs/inode.c @@ -1655,7 +1655,7 @@ * This does the actual work of updating an inodes time or version. Must have * had called mnt_want_write() before calling this. */ -static int update_time(struct inode *inode, struct timespec *time, int flags) +int update_time(struct inode *inode, struct timespec *time, int flags) { int (*update_time)(struct inode *, struct timespec *, int); @@ -1664,6 +1664,7 @@ return update_time(inode, time, flags); } +EXPORT_SYMBOL_GPL(update_time); /** * touch_atime - update the access time @@ -1749,7 +1750,8 @@ */ int should_remove_suid(struct dentry *dentry) { - umode_t mode = d_inode(dentry)->i_mode; + struct inode *inode = d_inode(dentry); + umode_t mode = inode->i_mode; int kill = 0; /* suid always must be killed */ @@ -1763,7 +1765,8 @@ if (unlikely((mode & S_ISGID) && (mode & S_IXGRP))) kill |= ATTR_KILL_SGID; - if (unlikely(kill && !capable(CAP_FSETID) && S_ISREG(mode))) + if (unlikely(kill && !capable_wrt_inode_uidgid(inode, CAP_FSETID) && + S_ISREG(mode))) return kill; return 0; --- linux-aws-4.15.0.orig/fs/ioctl.c +++ linux-aws-4.15.0/fs/ioctl.c @@ -549,7 +549,7 @@ { struct super_block *sb = file_inode(filp)->i_sb; - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; /* If filesystem doesn't support freeze feature, return. */ @@ -566,7 +566,7 @@ { struct super_block *sb = file_inode(filp)->i_sb; - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; /* Thaw */ --- linux-aws-4.15.0.orig/fs/namei.c +++ linux-aws-4.15.0/fs/namei.c @@ -900,8 +900,8 @@ path_put(&last->link); } -int sysctl_protected_symlinks __read_mostly = 0; -int sysctl_protected_hardlinks __read_mostly = 0; +int sysctl_protected_symlinks __read_mostly = 1; +int sysctl_protected_hardlinks __read_mostly = 1; /** * may_follow_link - Check symlink following for unsafe situations --- linux-aws-4.15.0.orig/fs/namespace.c +++ linux-aws-4.15.0/fs/namespace.c @@ -517,6 +517,7 @@ mnt_dec_writers(real_mount(mnt)); preempt_enable(); } +EXPORT_SYMBOL_GPL(__mnt_drop_write); /** * mnt_drop_write - give up write access to a mount @@ -846,6 +847,13 @@ return mnt->mnt_ns == current->nsproxy->mnt_ns; } +/* for aufs, CONFIG_AUFS_BR_FUSE */ +int is_current_mnt_ns(struct vfsmount *mnt) +{ + return check_mnt(real_mount(mnt)); +} +EXPORT_SYMBOL_GPL(is_current_mnt_ns); + /* * vfsmount lock must be held for write */ @@ -1589,7 +1597,7 @@ * Special case for "unmounting" root ... * we just try to remount it readonly. */ - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; down_write(&sb->s_umount); if (!sb_rdonly(sb)) @@ -1881,6 +1889,7 @@ } return 0; } +EXPORT_SYMBOL_GPL(iterate_mounts); static void cleanup_group_ids(struct mount *mnt, struct mount *end) { @@ -2327,7 +2336,7 @@ down_write(&sb->s_umount); if (ms_flags & MS_BIND) err = change_mount_flags(path->mnt, ms_flags); - else if (!capable(CAP_SYS_ADMIN)) + else if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN)) err = -EPERM; else err = do_remount_sb(sb, sb_flags, data, 0); --- linux-aws-4.15.0.orig/fs/notify/group.c +++ linux-aws-4.15.0/fs/notify/group.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "fsnotify.h" @@ -109,6 +110,7 @@ { refcount_inc(&group->refcnt); } +EXPORT_SYMBOL_GPL(fsnotify_get_group); /* * Drop a reference to a group. Free it if it's through. @@ -118,6 +120,7 @@ if (refcount_dec_and_test(&group->refcnt)) fsnotify_final_destroy_group(group); } +EXPORT_SYMBOL_GPL(fsnotify_put_group); /* * Create a new fsnotify_group and hold a reference for the group returned. @@ -147,6 +150,7 @@ return group; } +EXPORT_SYMBOL_GPL(fsnotify_alloc_group); int fsnotify_fasync(int fd, struct file *file, int on) { --- linux-aws-4.15.0.orig/fs/notify/mark.c +++ linux-aws-4.15.0/fs/notify/mark.c @@ -108,6 +108,7 @@ WARN_ON_ONCE(!refcount_read(&mark->refcnt)); refcount_inc(&mark->refcnt); } +EXPORT_SYMBOL_GPL(fsnotify_put_mark); static void __fsnotify_recalc_mask(struct fsnotify_mark_connector *conn) { @@ -392,6 +393,7 @@ mutex_unlock(&group->mark_mutex); fsnotify_free_mark(mark); } +EXPORT_SYMBOL_GPL(fsnotify_destroy_mark); /* * Sorting function for lists of fsnotify marks. @@ -606,6 +608,7 @@ fsnotify_put_mark(mark); return ret; } +EXPORT_SYMBOL_GPL(fsnotify_add_mark); int fsnotify_add_mark(struct fsnotify_mark *mark, struct inode *inode, struct vfsmount *mnt, int allow_dups) @@ -741,6 +744,7 @@ fsnotify_get_group(group); mark->group = group; } +EXPORT_SYMBOL_GPL(fsnotify_init_mark); /* * Destroy all marks in destroy_list, waits for SRCU period to finish before --- linux-aws-4.15.0.orig/fs/open.c +++ linux-aws-4.15.0/fs/open.c @@ -34,6 +34,9 @@ #include "internal.h" +#define CREATE_TRACE_POINTS +#include + int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, struct file *filp) { @@ -64,6 +67,7 @@ inode_unlock(dentry->d_inode); return ret; } +EXPORT_SYMBOL_GPL(do_truncate); long vfs_truncate(const struct path *path, loff_t length) { @@ -691,6 +695,7 @@ } return 0; } +EXPORT_SYMBOL_GPL(open_check_o_direct); static int do_dentry_open(struct file *f, struct inode *inode, @@ -1063,6 +1068,7 @@ } else { fsnotify_open(f); fd_install(fd, f); + trace_do_sys_open(tmp->name, flags, mode); } } putname(tmp); --- linux-aws-4.15.0.orig/fs/overlayfs/copy_up.c +++ linux-aws-4.15.0/fs/overlayfs/copy_up.c @@ -211,10 +211,19 @@ { int err = 0; + /* + * For the most part we want to set the mode bits before setting + * the user, otherwise the current context might lack permission + * for setting the mode. However for sxid/sticky bits we want + * the operation to fail if the current user isn't privileged + * towards the resulting inode. So we first set the mode but + * exclude the sxid/sticky bits, then set the user, then set the + * mode again if any of the sxid/sticky bits are set. + */ if (!S_ISLNK(stat->mode)) { struct iattr attr = { .ia_valid = ATTR_MODE, - .ia_mode = stat->mode, + .ia_mode = stat->mode & ~(S_ISUID|S_ISGID|S_ISVTX), }; err = notify_change(upperdentry, &attr, NULL); } @@ -226,6 +235,14 @@ }; err = notify_change(upperdentry, &attr, NULL); } + if (!err && !S_ISLNK(stat->mode) && + (stat->mode & (S_ISUID|S_ISGID|S_ISVTX))) { + struct iattr attr = { + .ia_valid = ATTR_MODE, + .ia_mode = stat->mode, + }; + err = notify_change(upperdentry, &attr, NULL); + } if (!err) ovl_set_timestamps(upperdentry, stat); --- linux-aws-4.15.0.orig/fs/overlayfs/overlayfs.h +++ linux-aws-4.15.0/fs/overlayfs/overlayfs.h @@ -139,7 +139,13 @@ static inline int ovl_do_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags) { - int err = vfs_setxattr(dentry, name, value, size, flags); + struct inode *inode = dentry->d_inode; + int err; + + inode_lock(inode); + err = __vfs_setxattr_noperm(dentry, name, value, size, flags); + inode_unlock(inode); + pr_debug("setxattr(%pd2, \"%s\", \"%*s\", 0x%x) = %i\n", dentry, name, (int) size, (char *) value, flags, err); return err; @@ -147,7 +153,13 @@ static inline int ovl_do_removexattr(struct dentry *dentry, const char *name) { - int err = vfs_removexattr(dentry, name); + struct inode *inode = dentry->d_inode; + int err; + + inode_lock(inode); + err = __vfs_removexattr_noperm(dentry, name); + inode_unlock(inode); + pr_debug("removexattr(%pd2, \"%s\") = %i\n", dentry, name, err); return err; } --- linux-aws-4.15.0.orig/fs/overlayfs/super.c +++ linux-aws-4.15.0/fs/overlayfs/super.c @@ -1058,8 +1058,8 @@ return err; } -static int ovl_get_lower_layers(struct ovl_fs *ofs, struct path *stack, - unsigned int numlower) +static int ovl_get_lower_layers(struct super_block *sb, struct ovl_fs *ofs, + struct path *stack, unsigned int numlower) { int err; unsigned int i; @@ -1092,6 +1092,13 @@ */ mnt->mnt_flags |= MNT_READONLY | MNT_NOATIME; + /* + * If any lower mount is nosuid, force the ovl sb to also + * be nosuid. + */ + if (mnt->mnt_flags & MNT_NOSUID) + sb->s_iflags |= SB_I_NOSUID; + ofs->lower_layers[ofs->numlower].mnt = mnt; ofs->lower_layers[ofs->numlower].pseudo_dev = dev; ofs->numlower++; @@ -1156,7 +1163,7 @@ goto out_err; } - err = ovl_get_lower_layers(ofs, stack, numlower); + err = ovl_get_lower_layers(sb, ofs, stack, numlower); if (err) goto out_err; @@ -1237,6 +1244,13 @@ if (!ofs->workdir) sb->s_flags |= SB_RDONLY; + /* + * If the upper mount is nosuid, force the ovl sb to also + * be nosuid. + */ + if (ofs->upper_mnt->mnt_flags & MNT_NOSUID) + sb->s_iflags |= SB_I_NOSUID; + sb->s_stack_depth = ofs->upper_mnt->mnt_sb->s_stack_depth; sb->s_time_gran = ofs->upper_mnt->mnt_sb->s_time_gran; @@ -1318,6 +1332,7 @@ .name = "overlay", .mount = ovl_mount, .kill_sb = kill_anon_super, + .fs_flags = FS_USERNS_MOUNT, }; MODULE_ALIAS_FS("overlay"); --- linux-aws-4.15.0.orig/fs/proc/Makefile +++ linux-aws-4.15.0/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-y += version_signature.o --- linux-aws-4.15.0.orig/fs/proc/base.c +++ linux-aws-4.15.0/fs/proc/base.c @@ -664,10 +664,17 @@ { int error; struct inode *inode = d_inode(dentry); + struct user_namespace *s_user_ns; if (attr->ia_valid & ATTR_MODE) return -EPERM; + /* Don't let anyone mess with weird proc files */ + s_user_ns = inode->i_sb->s_user_ns; + if (!kuid_has_mapping(s_user_ns, inode->i_uid) || + !kgid_has_mapping(s_user_ns, inode->i_gid)) + return -EPERM; + error = setattr_prepare(dentry, attr); if (error) return error; @@ -1987,7 +1994,7 @@ down_read(&mm->mmap_sem); vma = find_exact_vma(mm, vm_start, vm_end); if (vma && vma->vm_file) { - *path = vma->vm_file->f_path; + *path = vma_pr_or_file(vma)->f_path; path_get(path); rc = 0; } --- linux-aws-4.15.0.orig/fs/proc/generic.c +++ linux-aws-4.15.0/fs/proc/generic.c @@ -106,8 +106,15 @@ { struct inode *inode = d_inode(dentry); struct proc_dir_entry *de = PDE(inode); + struct user_namespace *s_user_ns; int error; + /* Don't let anyone mess with weird proc files */ + s_user_ns = inode->i_sb->s_user_ns; + if (!kuid_has_mapping(s_user_ns, inode->i_uid) || + !kgid_has_mapping(s_user_ns, inode->i_gid)) + return -EPERM; + error = setattr_prepare(dentry, iattr); if (error) return error; --- linux-aws-4.15.0.orig/fs/proc/kcore.c +++ linux-aws-4.15.0/fs/proc/kcore.c @@ -550,6 +550,8 @@ static int open_kcore(struct inode *inode, struct file *filp) { + if (kernel_is_locked_down("/proc/kcore")) + return -EPERM; if (!capable(CAP_SYS_RAWIO)) return -EPERM; --- linux-aws-4.15.0.orig/fs/proc/nommu.c +++ linux-aws-4.15.0/fs/proc/nommu.c @@ -45,7 +45,10 @@ file = region->vm_file; if (file) { - struct inode *inode = file_inode(region->vm_file); + struct inode *inode; + + file = vmr_pr_or_file(region); + inode = file_inode(file); dev = inode->i_sb->s_dev; ino = inode->i_ino; } --- linux-aws-4.15.0.orig/fs/proc/proc_sysctl.c +++ linux-aws-4.15.0/fs/proc/proc_sysctl.c @@ -802,11 +802,18 @@ static int proc_sys_setattr(struct dentry *dentry, struct iattr *attr) { struct inode *inode = d_inode(dentry); + struct user_namespace *s_user_ns; int error; if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) return -EPERM; + /* Don't let anyone mess with weird proc files */ + s_user_ns = inode->i_sb->s_user_ns; + if (!kuid_has_mapping(s_user_ns, inode->i_uid) || + !kgid_has_mapping(s_user_ns, inode->i_gid)) + return -EPERM; + error = setattr_prepare(dentry, attr); if (error) return error; --- linux-aws-4.15.0.orig/fs/proc/task_mmu.c +++ linux-aws-4.15.0/fs/proc/task_mmu.c @@ -306,7 +306,10 @@ const char *name = NULL; if (file) { - struct inode *inode = file_inode(vma->vm_file); + struct inode *inode; + + file = vma_pr_or_file(vma); + inode = file_inode(file); dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; @@ -1736,7 +1739,7 @@ struct proc_maps_private *proc_priv = &numa_priv->proc_maps; struct vm_area_struct *vma = v; struct numa_maps *md = &numa_priv->md; - struct file *file = vma->vm_file; + struct file *file = vma_pr_or_file(vma); struct mm_struct *mm = vma->vm_mm; struct mm_walk walk = { .hugetlb_entry = gather_hugetlb_stats, --- linux-aws-4.15.0.orig/fs/proc/task_nommu.c +++ linux-aws-4.15.0/fs/proc/task_nommu.c @@ -156,7 +156,10 @@ file = vma->vm_file; if (file) { - struct inode *inode = file_inode(vma->vm_file); + struct inode *inode; + + file = vma_pr_or_file(vma); + inode = file_inode(file); dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; --- linux-aws-4.15.0.orig/fs/proc/version_signature.c +++ linux-aws-4.15.0/fs/proc/version_signature.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include +#include +#include + +static int version_signature_proc_show(struct seq_file *m, void *v) +{ + seq_printf(m, "%s\n", CONFIG_VERSION_SIGNATURE); + return 0; +} + +static int version_signature_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, version_signature_proc_show, NULL); +} + +static const struct file_operations version_signature_proc_fops = { + .open = version_signature_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int __init proc_version_signature_init(void) +{ + proc_create("version_signature", 0, NULL, &version_signature_proc_fops); + return 0; +} +module_init(proc_version_signature_init); --- linux-aws-4.15.0.orig/fs/quota/quota.c +++ linux-aws-4.15.0/fs/quota/quota.c @@ -807,7 +807,7 @@ if (IS_ERR(tmp)) return ERR_CAST(tmp); - bdev = lookup_bdev(tmp->name); + bdev = lookup_bdev(tmp->name, 0); putname(tmp); if (IS_ERR(bdev)) return ERR_CAST(bdev); --- linux-aws-4.15.0.orig/fs/read_write.c +++ linux-aws-4.15.0/fs/read_write.c @@ -454,6 +454,7 @@ return ret; } +EXPORT_SYMBOL_GPL(vfs_read); static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) { @@ -484,6 +485,30 @@ return -EINVAL; } +vfs_readf_t vfs_readf(struct file *file) +{ + const struct file_operations *fop = file->f_op; + + if (fop->read) + return fop->read; + if (fop->read_iter) + return new_sync_read; + return ERR_PTR(-ENOSYS); +} +EXPORT_SYMBOL_GPL(vfs_readf); + +vfs_writef_t vfs_writef(struct file *file) +{ + const struct file_operations *fop = file->f_op; + + if (fop->write) + return fop->write; + if (fop->write_iter) + return new_sync_write; + return ERR_PTR(-ENOSYS); +} +EXPORT_SYMBOL_GPL(vfs_writef); + ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos) { mm_segment_t old_fs; @@ -552,6 +577,7 @@ return ret; } +EXPORT_SYMBOL_GPL(vfs_write); static inline loff_t file_pos_read(struct file *file) { --- linux-aws-4.15.0.orig/fs/splice.c +++ linux-aws-4.15.0/fs/splice.c @@ -837,8 +837,8 @@ /* * Attempt to initiate a splice from pipe to file. */ -static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, - loff_t *ppos, size_t len, unsigned int flags) +long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags) { ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); @@ -850,13 +850,14 @@ return splice_write(pipe, out, ppos, len, flags); } +EXPORT_SYMBOL_GPL(do_splice_from); /* * Attempt to initiate a splice from a file to a pipe. */ -static long do_splice_to(struct file *in, loff_t *ppos, - struct pipe_inode_info *pipe, size_t len, - unsigned int flags) +long do_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) { ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); @@ -879,6 +880,7 @@ return splice_read(in, ppos, pipe, len, flags); } +EXPORT_SYMBOL_GPL(do_splice_to); /** * splice_direct_to_actor - splices data directly between two non-pipes --- linux-aws-4.15.0.orig/fs/super.c +++ linux-aws-4.15.0/fs/super.c @@ -1078,6 +1078,23 @@ if (IS_ERR(bdev)) return ERR_CAST(bdev); + if (current_user_ns() != &init_user_ns) { + /* + * For userns mounts, disallow mounting if bdev is open for + * writing + */ + if (!atomic_dec_unless_positive(&bdev->bd_inode->i_writecount)) { + error = -EBUSY; + goto error_bdev; + } + if (bdev->bd_contains != bdev && + !atomic_dec_unless_positive(&bdev->bd_contains->bd_inode->i_writecount)) { + atomic_inc(&bdev->bd_inode->i_writecount); + error = -EBUSY; + goto error_bdev; + } + } + /* * once the super is inserted into the list by sget, s_umount * will protect the lockfs code from trying to start a snapshot @@ -1087,7 +1104,7 @@ if (bdev->bd_fsfreeze_count > 0) { mutex_unlock(&bdev->bd_fsfreeze_mutex); error = -EBUSY; - goto error_bdev; + goto error_inc; } s = sget(fs_type, test_bdev_super, set_bdev_super, flags | SB_NOSEC, bdev); @@ -1099,7 +1116,7 @@ if ((flags ^ s->s_flags) & SB_RDONLY) { deactivate_locked_super(s); error = -EBUSY; - goto error_bdev; + goto error_inc; } /* @@ -1130,6 +1147,12 @@ error_s: error = PTR_ERR(s); +error_inc: + if (current_user_ns() != &init_user_ns) { + atomic_inc(&bdev->bd_inode->i_writecount); + if (bdev->bd_contains != bdev) + atomic_inc(&bdev->bd_contains->bd_inode->i_writecount); + } error_bdev: blkdev_put(bdev, mode); error: @@ -1146,6 +1169,11 @@ generic_shutdown_super(sb); sync_blockdev(bdev); WARN_ON_ONCE(!(mode & FMODE_EXCL)); + if (sb->s_user_ns != &init_user_ns) { + atomic_inc(&bdev->bd_inode->i_writecount); + if (bdev->bd_contains != bdev) + atomic_inc(&bdev->bd_contains->bd_inode->i_writecount); + } blkdev_put(bdev, mode | FMODE_EXCL); } --- linux-aws-4.15.0.orig/fs/sync.c +++ linux-aws-4.15.0/fs/sync.c @@ -28,7 +28,7 @@ * wait == 1 case since in that case write_inode() functions do * sync_dirty_buffer() and thus effectively write one block at a time. */ -static int __sync_filesystem(struct super_block *sb, int wait) +int __sync_filesystem(struct super_block *sb, int wait) { if (wait) sync_inodes_sb(sb); @@ -39,6 +39,7 @@ sb->s_op->sync_fs(sb, wait); return __sync_blockdev(sb->s_bdev, wait); } +EXPORT_SYMBOL_GPL(__sync_filesystem); /* * Write out and wait upon all dirty data associated with this --- linux-aws-4.15.0.orig/fs/xattr.c +++ linux-aws-4.15.0/fs/xattr.c @@ -203,6 +203,7 @@ return error; } +EXPORT_SYMBOL_GPL(__vfs_setxattr_noperm); int @@ -297,6 +298,7 @@ *xattr_value = value; return error; } +EXPORT_SYMBOL_GPL(vfs_getxattr_alloc); ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name, @@ -380,6 +382,33 @@ } EXPORT_SYMBOL(__vfs_removexattr); +/** + * __vfs_removexattr_noperm - perform removexattr operation without + * performing permission checks. + * + * @dentry - object to perform setxattr on + * @name - xattr name to set + * + * returns the result of the internal setxattr or setsecurity operations. + * + * This function requires the caller to lock the inode's i_mutex before it + * is executed. It also assumes that the caller will make the appropriate + * permission checks. + */ +int +__vfs_removexattr_noperm(struct dentry *dentry, const char *name) +{ + int error; + + error =__vfs_removexattr(dentry, name); + if (!error) { + fsnotify_xattr(dentry); + evm_inode_post_removexattr(dentry, name); + } + return error; +} +EXPORT_SYMBOL_GPL(__vfs_removexattr_noperm); + int vfs_removexattr(struct dentry *dentry, const char *name) { @@ -395,12 +424,7 @@ if (error) goto out; - error = __vfs_removexattr(dentry, name); - - if (!error) { - fsnotify_xattr(dentry); - evm_inode_post_removexattr(dentry, name); - } + error = __vfs_removexattr_noperm(dentry, name); out: inode_unlock(inode); --- linux-aws-4.15.0.orig/include/linux/cred.h +++ linux-aws-4.15.0/include/linux/cred.h @@ -159,6 +159,7 @@ extern void abort_creds(struct cred *); extern const struct cred *override_creds(const struct cred *); extern void revert_creds(const struct cred *); +extern struct cred *clone_cred(const struct cred *old); extern struct cred *prepare_kernel_cred(struct task_struct *); extern int change_create_files_as(struct cred *, struct inode *); extern int set_security_override(struct cred *, u32); --- linux-aws-4.15.0.orig/include/linux/device.h +++ linux-aws-4.15.0/include/linux/device.h @@ -1279,6 +1279,62 @@ #ifdef CONFIG_PRINTK +#if defined(__KMSG_CHECKER) && defined(KMSG_COMPONENT) + +/* generate magic string for scripts/kmsg-doc to parse */ +#define dev_emerg(dev, format, arg...) \ + __KMSG_DEV(KERN_EMERG _FMT_ format _ARGS_ dev, ## arg _END_) +#define dev_alert(dev, format, arg...) \ + __KMSG_DEV(KERN_ALERT _FMT_ format _ARGS_ dev, ## arg _END_) +#define dev_crit(dev, format, arg...) \ + __KMSG_DEV(KERN_CRIT _FMT_ format _ARGS_ dev, ## arg _END_) +#define dev_err(dev, format, arg...) \ + __KMSG_DEV(KERN_ERR _FMT_ format _ARGS_ dev, ## arg _END_) +#define dev_warn(dev, format, arg...) \ + __KMSG_DEV(KERN_WARNING _FMT_ format _ARGS_ dev, ## arg _END_) +#define dev_notice(dev, format, arg...) \ + __KMSG_DEV(KERN_NOTICE _FMT_ format _ARGS_ dev, ## arg _END_) +#define _dev_info(dev, format, arg...) \ + __KMSG_DEV(KERN_INFO _FMT_ format _ARGS_ dev, ## arg _END_) + +#elif defined(CONFIG_KMSG_IDS) && defined(KMSG_COMPONENT) + +extern int dev_printk_hash(const char *level, const struct device *dev, + const char *fmt, ...); +extern __printf(2,3) +int dev_emerg_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int dev_alert_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int dev_crit_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int dev_err_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int dev_warn_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int dev_notice_hash(const struct device *dev, const char *fmt, ...); +extern __printf(2,3) +int _dev_info_hash(const struct device *dev, const char *fmt, ...); + +#define dev_printk(level, dev, format, arg...) \ + dev_printk_hash(level, dev, "%s: " format, dev_name(dev), ## arg) +#define dev_emerg(dev, format, arg...) \ + dev_emerg_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define dev_alert(dev, format, arg...) \ + dev_alert_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define dev_crit(dev, format, arg...) \ + dev_crit_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define dev_err(dev, format, arg...) \ + dev_err_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define dev_warn(dev, format, arg...) \ + dev_warn_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define dev_notice(dev, format, arg...) \ + dev_notice_hash(dev, "%s: " format, dev_name(dev), ## arg) +#define _dev_info(dev, format, arg...) \ + _dev_info_hash(dev, "%s: " format, dev_name(dev), ## arg) + +#else /* !defined(CONFIG_KMSG_IDS) */ + extern __printf(3, 0) int dev_vprintk_emit(int level, const struct device *dev, const char *fmt, va_list args); @@ -1303,7 +1359,9 @@ extern __printf(2, 3) void _dev_info(const struct device *dev, const char *fmt, ...); -#else +#endif /* !defined(CONFIG_KMSG_IDS) */ + +#else /* !defined(CONFIG_PRINTK) */ static inline __printf(3, 0) int dev_vprintk_emit(int level, const struct device *dev, @@ -1343,7 +1401,7 @@ void _dev_info(const struct device *dev, const char *fmt, ...) {} -#endif +#endif /* !defined(CONFIG_PRINTK) */ /* * Stupid hackaround for existing uses of non-printk uses dev_info --- linux-aws-4.15.0.orig/include/linux/efi.h +++ linux-aws-4.15.0/include/linux/efi.h @@ -629,6 +629,10 @@ #define EFI_IMAGE_SECURITY_DATABASE_GUID EFI_GUID(0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f) #define EFI_SHIM_LOCK_GUID EFI_GUID(0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23) +#define EFI_CERT_SHA256_GUID EFI_GUID(0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28) +#define EFI_CERT_X509_GUID EFI_GUID(0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72) +#define EFI_CERT_X509_SHA256_GUID EFI_GUID(0x3bd2a492, 0x96c0, 0x4079, 0xb4, 0x20, 0xfc, 0xf9, 0x8e, 0xf1, 0x03, 0xed) + /* * This GUID is used to pass to the kernel proper the struct screen_info * structure that was populated by the stub based on the GOP protocol instance @@ -888,6 +892,27 @@ efi_memory_desc_t entry[0]; } efi_memory_attributes_table_t; +typedef struct { + efi_guid_t signature_owner; + u8 signature_data[]; +} efi_signature_data_t; + +typedef struct { + efi_guid_t signature_type; + u32 signature_list_size; + u32 signature_header_size; + u32 signature_size; + u8 signature_header[]; + /* efi_signature_data_t signatures[][] */ +} efi_signature_list_t; + +typedef u8 efi_sha256_hash_t[32]; + +typedef struct { + efi_sha256_hash_t to_be_signed_hash; + efi_time_t time_of_revocation; +} efi_cert_x509_sha256_t; + /* * All runtime access to EFI goes through this structure: */ @@ -1067,6 +1092,15 @@ char * __init efi_md_typeattr_format(char *buf, size_t size, const efi_memory_desc_t *md); + +typedef void (*efi_element_handler_t)(const char *source, + const void *element_data, + size_t element_size); +extern int __init parse_efi_signature_list( + const char *source, + const void *data, size_t size, + efi_element_handler_t (*get_handler_for_guid)(const efi_guid_t *)); + /** * efi_range_is_wc - check the WC bit on an address range * @start: starting kvirt address @@ -1106,6 +1140,14 @@ #define EFI_DBG 8 /* Print additional debug info at runtime */ #define EFI_NX_PE_DATA 9 /* Can runtime data regions be mapped non-executable? */ #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ +#define EFI_SECURE_BOOT 11 /* Are we in Secure Boot mode? */ + +enum efi_secureboot_mode { + efi_secureboot_mode_unset, + efi_secureboot_mode_unknown, + efi_secureboot_mode_disabled, + efi_secureboot_mode_enabled, +}; #ifdef CONFIG_EFI /* @@ -1118,6 +1160,7 @@ extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); extern bool efi_is_table_address(unsigned long phys_addr); +extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); #else static inline bool efi_enabled(int feature) { @@ -1136,6 +1179,7 @@ { return false; } +static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} #endif extern int efi_status_to_err(efi_status_t status); @@ -1521,12 +1565,6 @@ bool efi_runtime_disabled(void); extern void efi_call_virt_check_flags(unsigned long flags, const char *call); -enum efi_secureboot_mode { - efi_secureboot_mode_unset, - efi_secureboot_mode_unknown, - efi_secureboot_mode_disabled, - efi_secureboot_mode_enabled, -}; enum efi_secureboot_mode efi_get_secureboot(efi_system_table_t *sys_table); #ifdef CONFIG_RESET_ATTACK_MITIGATION --- linux-aws-4.15.0.orig/include/linux/fdtable.h +++ linux-aws-4.15.0/include/linux/fdtable.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -82,8 +83,10 @@ { struct fdtable *fdt = rcu_dereference_raw(files->fdt); - if (fd < fdt->max_fds) + if (fd < fdt->max_fds) { + fd = array_index_nospec(fd, fdt->max_fds); return rcu_dereference_raw(fdt->fd[fd]); + } return NULL; } --- linux-aws-4.15.0.orig/include/linux/file.h +++ linux-aws-4.15.0/include/linux/file.h @@ -20,6 +20,7 @@ struct path; extern struct file *alloc_file(const struct path *, fmode_t mode, const struct file_operations *fop); +extern struct file *get_empty_filp(void); static inline void fput_light(struct file *file, int fput_needed) { --- linux-aws-4.15.0.orig/include/linux/fs.h +++ linux-aws-4.15.0/include/linux/fs.h @@ -1265,6 +1265,7 @@ /* can be called from interrupts */ extern void kill_fasync(struct fasync_struct **, int, int); +extern int setfl(int fd, struct file * filp, unsigned long arg); extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force); extern int f_setown(struct file *filp, unsigned long arg, int force); extern void f_delown(struct file *filp); @@ -1312,6 +1313,7 @@ #define SB_I_CGROUPWB 0x00000001 /* cgroup-aware writeback enabled */ #define SB_I_NOEXEC 0x00000002 /* Ignore executables on this fs */ #define SB_I_NODEV 0x00000004 /* Ignore devices on this fs */ +#define SB_I_NOSUID 0x00000008 /* Ignore suid on this fs */ /* sb->s_iflags to limit user namespace mounts */ #define SB_I_USERNS_VISIBLE 0x00000010 /* fstype already mounted */ @@ -1712,6 +1714,7 @@ ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); + int (*setfl)(struct file *, unsigned long); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); @@ -1782,6 +1785,12 @@ struct iovec *fast_pointer, struct iovec **ret_pointer); +typedef ssize_t (*vfs_readf_t)(struct file *, char __user *, size_t, loff_t *); +typedef ssize_t (*vfs_writef_t)(struct file *, const char __user *, size_t, + loff_t *); +vfs_readf_t vfs_readf(struct file *file); +vfs_writef_t vfs_writef(struct file *file); + extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *); extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); @@ -1832,6 +1841,10 @@ struct shrink_control *); long (*free_cached_objects)(struct super_block *, struct shrink_control *); +#if defined(CONFIG_BLK_DEV_LOOP) || defined(CONFIG_BLK_DEV_LOOP_MODULE) + /* and aufs */ + struct file *(*real_loop)(struct file *); +#endif }; /* @@ -2201,6 +2214,7 @@ extern void ihold(struct inode * inode); extern void iput(struct inode *); extern int generic_update_time(struct inode *, struct timespec *, int); +extern int update_time(struct inode *, struct timespec *, int); /* /sys/fs */ extern struct kobject *fs_kobj; @@ -2481,6 +2495,7 @@ return false; } #endif +extern int __sync_filesystem(struct super_block *, int); extern int sync_filesystem(struct super_block *); extern const struct file_operations def_blk_fops; extern const struct file_operations def_chr_fops; @@ -2551,7 +2566,7 @@ #define BLKDEV_MAJOR_MAX 512 extern const char *__bdevname(dev_t, char *buffer); extern const char *bdevname(struct block_device *bdev, char *buffer); -extern struct block_device *lookup_bdev(const char *); +extern struct block_device *lookup_bdev(const char *, int mask); extern void blkdev_show(struct seq_file *,off_t); #else @@ -3408,6 +3423,7 @@ } extern bool path_noexec(const struct path *path); +extern bool path_nosuid(const struct path *path); extern void inode_nohighmem(struct inode *inode); #endif /* _LINUX_FS_H */ --- linux-aws-4.15.0.orig/include/linux/init.h +++ linux-aws-4.15.0/include/linux/init.h @@ -5,6 +5,13 @@ #include #include +/* Built-in __init functions needn't be compiled with retpoline */ +#if defined(RETPOLINE) && !defined(MODULE) +#define __noretpoline __attribute__((indirect_branch("keep"))) +#else +#define __noretpoline +#endif + /* These macros are used to mark some functions or * initialized data (doesn't apply to uninitialized data) * as `initialization' functions. The kernel can take this @@ -40,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 +#define __init __section(.init.text) __cold __latent_entropy __noretpoline #define __initdata __section(.init.data) #define __initconst __section(.init.rodata) #define __exitdata __section(.exit.data) --- linux-aws-4.15.0.orig/include/linux/input.h +++ linux-aws-4.15.0/include/linux/input.h @@ -42,6 +42,7 @@ * @phys: physical path to the device in the system hierarchy * @uniq: unique identification code for the device (if device has it) * @id: id of the device (struct input_id) + * @flags: input device flags (SYNTHETIC, etc.) * @propbit: bitmap of device properties and quirks * @evbit: bitmap of types of events supported by the device (EV_KEY, * EV_REL, etc.) @@ -124,6 +125,8 @@ const char *uniq; struct input_id id; + unsigned int flags; + unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; @@ -190,6 +193,8 @@ }; #define to_input_dev(d) container_of(d, struct input_dev, dev) +#define INPUTDEV_FLAGS_SYNTHETIC 0x000000001 + /* * Verify that we are in sync with input_device_id mod_devicetable.h #defines */ --- linux-aws-4.15.0.orig/include/linux/jbd2.h +++ linux-aws-4.15.0/include/linux/jbd2.h @@ -47,7 +47,7 @@ /* * The default maximum commit age, in seconds. */ -#define JBD2_DEFAULT_MAX_COMMIT_AGE 5 +#define JBD2_DEFAULT_MAX_COMMIT_AGE 30 #ifdef CONFIG_JBD2_DEBUG /* --- linux-aws-4.15.0.orig/include/linux/kernel.h +++ linux-aws-4.15.0/include/linux/kernel.h @@ -306,6 +306,23 @@ { } #endif +#ifdef CONFIG_LOCK_DOWN_KERNEL +extern bool __kernel_is_locked_down(const char *what, bool first); +#else +static inline bool __kernel_is_locked_down(const char *what, bool first) +{ + return false; +} +#endif + +#define kernel_is_locked_down(what) \ + ({ \ + static bool message_given; \ + bool locked_down = __kernel_is_locked_down(what, !message_given); \ + message_given = true; \ + locked_down; \ + }) + /* Internal, do not use. */ int __must_check _kstrtoul(const char *s, unsigned int base, unsigned long *res); int __must_check _kstrtol(const char *s, unsigned int base, long *res); --- linux-aws-4.15.0.orig/include/linux/lockdep.h +++ linux-aws-4.15.0/include/linux/lockdep.h @@ -313,6 +313,8 @@ return lock->key == key; } +struct lock_class *lockdep_hlock_class(struct held_lock *hlock); + /* * Acquire a lock. * @@ -442,6 +444,7 @@ #define lockdep_depth(tsk) (0) +#define lockdep_is_held(lock) (1) #define lockdep_is_held_type(l, r) (1) #define lockdep_assert_held(l) do { (void)(l); } while (0) --- linux-aws-4.15.0.orig/include/linux/memory_hotplug.h +++ linux-aws-4.15.0/include/linux/memory_hotplug.h @@ -231,6 +231,8 @@ void mem_hotplug_begin(void); void mem_hotplug_done(void); +void set_default_mem_hotplug_zone(enum zone_type zone); + extern void set_zone_contiguous(struct zone *zone); extern void clear_zone_contiguous(struct zone *zone); @@ -284,6 +286,8 @@ static inline void mem_hotplug_begin(void) {} static inline void mem_hotplug_done(void) {} +static inline void set_default_mem_hotplug_zone(enum zone_type zone) {} + static inline bool movable_node_is_enabled(void) { return false; --- linux-aws-4.15.0.orig/include/linux/mm.h +++ linux-aws-4.15.0/include/linux/mm.h @@ -1362,6 +1362,28 @@ } #endif +extern void vma_do_file_update_time(struct vm_area_struct *, const char[], int); +extern struct file *vma_do_pr_or_file(struct vm_area_struct *, const char[], + int); +extern void vma_do_get_file(struct vm_area_struct *, const char[], int); +extern void vma_do_fput(struct vm_area_struct *, const char[], int); + +#define vma_file_update_time(vma) vma_do_file_update_time(vma, __func__, \ + __LINE__) +#define vma_pr_or_file(vma) vma_do_pr_or_file(vma, __func__, \ + __LINE__) +#define vma_get_file(vma) vma_do_get_file(vma, __func__, __LINE__) +#define vma_fput(vma) vma_do_fput(vma, __func__, __LINE__) + +#ifndef CONFIG_MMU +extern struct file *vmr_do_pr_or_file(struct vm_region *, const char[], int); +extern void vmr_do_fput(struct vm_region *, const char[], int); + +#define vmr_pr_or_file(region) vmr_do_pr_or_file(region, __func__, \ + __LINE__) +#define vmr_fput(region) vmr_do_fput(region, __func__, __LINE__) +#endif /* !CONFIG_MMU */ + extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags); extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, --- linux-aws-4.15.0.orig/include/linux/mm_types.h +++ linux-aws-4.15.0/include/linux/mm_types.h @@ -255,6 +255,7 @@ unsigned long vm_top; /* region allocated to here */ unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ struct file *vm_file; /* the backing file or NULL */ + struct file *vm_prfile; /* the virtual backing file or NULL */ int vm_usage; /* region usage count (access under nommu_region_sem) */ bool vm_icache_flushed : 1; /* true if the icache has been flushed for @@ -329,6 +330,7 @@ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units */ struct file * vm_file; /* File we map to (can be NULL). */ + struct file *vm_prfile; /* shadow of vm_file */ void * vm_private_data; /* was vm_pte (shared mem) */ atomic_long_t swap_readahead_info; --- linux-aws-4.15.0.orig/include/linux/mnt_namespace.h +++ linux-aws-4.15.0/include/linux/mnt_namespace.h @@ -6,11 +6,14 @@ struct mnt_namespace; struct fs_struct; struct user_namespace; +struct vfsmount; extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *, struct user_namespace *, struct fs_struct *); extern void put_mnt_ns(struct mnt_namespace *ns); +extern int is_current_mnt_ns(struct vfsmount *mnt); + extern const struct file_operations proc_mounts_operations; extern const struct file_operations proc_mountinfo_operations; extern const struct file_operations proc_mountstats_operations; --- linux-aws-4.15.0.orig/include/linux/module.h +++ linux-aws-4.15.0/include/linux/module.h @@ -801,6 +801,15 @@ static inline void module_bug_cleanup(struct module *mod) {} #endif /* CONFIG_GENERIC_BUG */ +#ifdef RETPOLINE +extern bool retpoline_module_ok(bool has_retpoline); +#else +static inline bool retpoline_module_ok(bool has_retpoline) +{ + return true; +} +#endif + #ifdef CONFIG_MODULE_SIG static inline bool module_sig_ok(struct module *module) { --- linux-aws-4.15.0.orig/include/linux/nospec.h +++ linux-aws-4.15.0/include/linux/nospec.h @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright(c) 2018 Linus Torvalds. All rights reserved. +// Copyright(c) 2018 Alexei Starovoitov. All rights reserved. +// Copyright(c) 2018 Intel Corporation. All rights reserved. + +#ifndef _LINUX_NOSPEC_H +#define _LINUX_NOSPEC_H + +/** + * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise + * @index: array element index + * @size: number of elements in array + * + * When @index is out of bounds (@index >= @size), the sign bit will be + * set. Extend the sign bit to all bits and invert, giving a result of + * zero for an out of bounds index, or ~0 if within bounds [0, @size). + */ +#ifndef array_index_mask_nospec +static inline unsigned long array_index_mask_nospec(unsigned long index, + unsigned long size) +{ + /* + * Warn developers about inappropriate array_index_nospec() usage. + * + * Even if the CPU speculates past the WARN_ONCE branch, the + * sign bit of @index is taken into account when generating the + * mask. + * + * This warning is compiled out when the compiler can infer that + * @index and @size are less than LONG_MAX. + */ + if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, + "array_index_nospec() limited to range of [0, LONG_MAX]\n")) + return 0; + + /* + * Always calculate and emit the mask even if the compiler + * thinks the mask is not needed. The compiler does not take + * into account the value of @index under speculation. + */ + OPTIMIZER_HIDE_VAR(index); + return ~(long)(index | (size - 1UL - index)) >> (BITS_PER_LONG - 1); +} +#endif + +/* + * array_index_nospec - sanitize an array index after a bounds check + * + * For a code sequence like: + * + * if (index < size) { + * index = array_index_nospec(index, size); + * val = array[index]; + * } + * + * ...if the CPU speculates past the bounds check then + * array_index_nospec() will clamp the index within the range of [0, + * size). + */ +#define array_index_nospec(index, size) \ +({ \ + typeof(index) _i = (index); \ + typeof(size) _s = (size); \ + unsigned long _mask = array_index_mask_nospec(_i, _s); \ + \ + BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \ + BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \ + \ + _i &= _mask; \ + _i; \ +}) +#endif /* _LINUX_NOSPEC_H */ --- linux-aws-4.15.0.orig/include/linux/perf_event.h +++ linux-aws-4.15.0/include/linux/perf_event.h @@ -1151,6 +1151,11 @@ 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_any(void) +{ + return sysctl_perf_event_paranoid > 2; +} + static inline bool perf_paranoid_tracepoint_raw(void) { return sysctl_perf_event_paranoid > -1; --- linux-aws-4.15.0.orig/include/linux/phy.h +++ linux-aws-4.15.0/include/linux/phy.h @@ -468,7 +468,6 @@ /* Interrupt and Polling infrastructure */ struct work_struct phy_queue; struct delayed_work state_queue; - atomic_t irq_disable; struct mutex lock; --- linux-aws-4.15.0.orig/include/linux/printk.h +++ linux-aws-4.15.0/include/linux/printk.h @@ -285,6 +285,27 @@ #define pr_fmt(fmt) fmt #endif +#if defined(__KMSG_CHECKER) && defined(KMSG_COMPONENT) + +/* generate magic string for scripts/kmsg-doc to parse */ +#define pr_printk_hash(level, format, ...) \ + __KMSG_PRINT(level _FMT_ format _ARGS_ __VA_ARGS__ _END_) + +#elif defined(CONFIG_KMSG_IDS) && defined(KMSG_COMPONENT) + +/* format element '%pj' prints the six digit jhash of a string */ +#define _pr_printk_hash(pfx, fmt, ...) \ + printk(pfx fmt, pfx fmt + __builtin_strlen(pfx), ##__VA_ARGS__) +#define pr_printk_hash(level, format, ...) \ + _pr_printk_hash(level KMSG_COMPONENT ".%pj: ", format, ##__VA_ARGS__) + +#else /* !defined(CONFIG_KMSG_IDS) */ + +#define pr_printk_hash(level, format, ...) \ + printk(level pr_fmt(format), ##__VA_ARGS__) + +#endif + /* * These can be used to print at the various log levels. * All of these will print unconditionally, although note that pr_debug() @@ -292,20 +313,20 @@ * or CONFIG_DYNAMIC_DEBUG is set. */ #define pr_emerg(fmt, ...) \ - printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_EMERG, fmt, ##__VA_ARGS__) #define pr_alert(fmt, ...) \ - printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_ALERT, fmt, ##__VA_ARGS__) #define pr_crit(fmt, ...) \ - printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_CRIT, fmt, ##__VA_ARGS__) #define pr_err(fmt, ...) \ - printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_ERR, fmt, ##__VA_ARGS__) #define pr_warning(fmt, ...) \ - printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_WARNING, fmt, ##__VA_ARGS__) #define pr_warn pr_warning #define pr_notice(fmt, ...) \ - printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_NOTICE, fmt, ##__VA_ARGS__) #define pr_info(fmt, ...) \ - printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) + pr_printk_hash(KERN_INFO, fmt, ##__VA_ARGS__) /* * Like KERN_CONT, pr_cont() should only be used when continuing * a line with no newline ('\n') enclosed. Otherwise it defaults --- linux-aws-4.15.0.orig/include/linux/projid.h +++ linux-aws-4.15.0/include/linux/projid.h @@ -48,6 +48,11 @@ return !projid_eq(projid, INVALID_PROJID); } +static inline bool projid_valid_eq(kprojid_t left, kprojid_t right) +{ + return projid_eq(left, right) && projid_valid(left); +} + #ifdef CONFIG_USER_NS extern kprojid_t make_kprojid(struct user_namespace *from, projid_t projid); --- linux-aws-4.15.0.orig/include/linux/security.h +++ linux-aws-4.15.0/include/linux/security.h @@ -1801,5 +1801,13 @@ { } #endif /* CONFIG_SECURITY */ +#ifdef CONFIG_LOCK_DOWN_KERNEL +extern void __init init_lockdown(void); +#else +static inline void __init init_lockdown(void) +{ +} +#endif + #endif /* ! __LINUX_SECURITY_H */ --- linux-aws-4.15.0.orig/include/linux/shmem_fs.h +++ linux-aws-4.15.0/include/linux/shmem_fs.h @@ -25,10 +25,13 @@ }; struct shmem_sb_info { + struct mutex idr_lock; + bool idr_nouse; + struct idr idr; /* manages inode-number */ unsigned long max_blocks; /* How many blocks are allowed */ struct percpu_counter used_blocks; /* How many are allocated */ - unsigned long max_inodes; /* How many inodes are allowed */ - unsigned long free_inodes; /* How many are left for allocation */ + int max_inodes; /* How many inodes are allowed */ + int free_inodes; /* How many are left for allocation */ spinlock_t stat_lock; /* Serialize shmem_sb_info changes */ umode_t mode; /* Mount mode for root directory */ unsigned char huge; /* Whether to try for hugepages */ --- linux-aws-4.15.0.orig/include/linux/skbuff.h +++ linux-aws-4.15.0/include/linux/skbuff.h @@ -3282,6 +3282,7 @@ void skb_scrub_packet(struct sk_buff *skb, bool xnet); unsigned int skb_gso_transport_seglen(const struct sk_buff *skb); bool skb_gso_validate_mtu(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_vlan_untag(struct sk_buff *skb); int skb_ensure_writable(struct sk_buff *skb, int write_len); @@ -4115,6 +4116,21 @@ return hdr_len + skb_gso_transport_seglen(skb); } +/** + * skb_gso_mac_seglen - Return length of individual segments of a gso packet + * + * @skb: GSO skb + * + * skb_gso_mac_seglen is used to determine the real size of the + * individual segments, including MAC/L2, Layer3 (IP, IPv6) and L4 + * headers (TCP/UDP). + */ +static inline unsigned int skb_gso_mac_seglen(const struct sk_buff *skb) +{ + unsigned int hdr_len = skb_transport_header(skb) - skb_mac_header(skb); + return hdr_len + skb_gso_transport_seglen(skb); +} + /* Local Checksum Offload. * Compute outer checksum based on the assumption that the * inner checksum will be offloaded later. --- linux-aws-4.15.0.orig/include/linux/splice.h +++ linux-aws-4.15.0/include/linux/splice.h @@ -87,4 +87,10 @@ extern const struct pipe_buf_operations page_cache_pipe_buf_ops; extern const struct pipe_buf_operations default_pipe_buf_ops; + +extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out, + loff_t *ppos, size_t len, unsigned int flags); +extern long do_splice_to(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); #endif --- linux-aws-4.15.0.orig/include/linux/sysrq.h +++ linux-aws-4.15.0/include/linux/sysrq.h @@ -29,6 +29,8 @@ #define SYSRQ_ENABLE_BOOT 0x0080 #define SYSRQ_ENABLE_RTNICE 0x0100 +#define SYSRQ_DISABLE_USERSPACE 0x00010000 + struct sysrq_key_op { void (*handler)(int); char *help_msg; @@ -43,8 +45,12 @@ * are available -- else NULL's). */ +#define SYSRQ_FROM_KERNEL 0x0001 +#define SYSRQ_FROM_PROC 0x0002 +#define SYSRQ_FROM_SYNTHETIC 0x0004 + void handle_sysrq(int key); -void __handle_sysrq(int key, bool check_mask); +void __handle_sysrq(int key, unsigned int from); int register_sysrq_key(int key, struct sysrq_key_op *op); int unregister_sysrq_key(int key, struct sysrq_key_op *op); struct sysrq_key_op *__sysrq_get_key_op(int key); --- linux-aws-4.15.0.orig/include/linux/tty.h +++ linux-aws-4.15.0/include/linux/tty.h @@ -405,6 +405,8 @@ extern struct tty_struct *tty_kopen(dev_t device); extern void tty_kclose(struct tty_struct *tty); extern int tty_dev_name_to_number(const char *name, dev_t *number); +extern int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout); +extern void tty_ldisc_unlock(struct tty_struct *tty); #else static inline void tty_kref_put(struct tty_struct *tty) { } --- linux-aws-4.15.0.orig/include/linux/vt_kern.h +++ linux-aws-4.15.0/include/linux/vt_kern.h @@ -130,7 +130,8 @@ void vt_event_post(unsigned int event, unsigned int old, unsigned int new); int vt_waitactive(int n); void change_console(struct vc_data *new_vc); -void reset_vc(struct vc_data *vc); +void reset_vc(struct vc_data *vc, int mode); + extern int do_unbind_con_driver(const struct consw *csw, int first, int last, int deflt); int vty_init(const struct file_operations *console_fops); --- linux-aws-4.15.0.orig/include/linux/xattr.h +++ linux-aws-4.15.0/include/linux/xattr.h @@ -54,6 +54,7 @@ int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int); int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); int __vfs_removexattr(struct dentry *, const char *); +int __vfs_removexattr_noperm(struct dentry *dentry, const char *name); int vfs_removexattr(struct dentry *, const char *); ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); --- linux-aws-4.15.0.orig/include/net/ip_tunnels.h +++ linux-aws-4.15.0/include/net/ip_tunnels.h @@ -100,6 +100,28 @@ }; struct metadata_dst; +/* A fan overlay /8 (250.0.0.0/8, for example) maps to exactly one /16 + * underlay (10.88.0.0/16, for example). Multiple local addresses within + * the /16 may be used, but a particular overlay may not span + * multiple underlay subnets. + * + * We store one underlay, indexed by the overlay's high order octet. + */ +#define FAN_OVERLAY_CNT 256 + +struct ip_fan_map { + __be32 underlay; + __be32 overlay; + u16 underlay_prefix; + u16 overlay_prefix; + u32 overlay_mask; + struct list_head list; + struct rcu_head rcu; +}; + +struct ip_tunnel_fan { + struct list_head fan_maps; +}; struct ip_tunnel { struct ip_tunnel __rcu *next; @@ -134,6 +156,7 @@ #endif struct ip_tunnel_prl_entry __rcu *prl; /* potential router list */ unsigned int prl_count; /* # of entries in PRL */ + struct ip_tunnel_fan fan; unsigned int ip_tnl_net_id; struct gro_cells gro_cells; __u32 fwmark; @@ -160,6 +183,11 @@ #define TUNNEL_OPTIONS_PRESENT \ (TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT) +static inline int fan_has_map(const struct ip_tunnel_fan *fan) +{ + return !list_empty(&fan->fan_maps); +} + struct tnl_ptk_info { __be16 flags; __be16 proto; --- linux-aws-4.15.0.orig/include/net/sch_generic.h +++ linux-aws-4.15.0/include/net/sch_generic.h @@ -280,7 +280,6 @@ struct net *net; struct Qdisc *q; struct list_head cb_list; - struct work_struct work; }; static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz) --- linux-aws-4.15.0.orig/include/net/vxlan.h +++ linux-aws-4.15.0/include/net/vxlan.h @@ -236,6 +236,8 @@ struct net *net; /* netns for packet i/o */ struct vxlan_rdst default_dst; /* default destination */ + struct ip_tunnel_fan fan; + struct timer_list age_timer; spinlock_t hash_lock; unsigned int addrcnt; --- linux-aws-4.15.0.orig/include/trace/events/fs.h +++ linux-aws-4.15.0/include/trace/events/fs.h @@ -0,0 +1,53 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fs + +#if !defined(_TRACE_FS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_FS_H + +#include +#include + +TRACE_EVENT(do_sys_open, + + TP_PROTO(const char *filename, int flags, int mode), + + TP_ARGS(filename, flags, mode), + + TP_STRUCT__entry( + __string( filename, filename ) + __field( int, flags ) + __field( int, mode ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + __entry->flags = flags; + __entry->mode = mode; + ), + + TP_printk("\"%s\" %x %o", + __get_str(filename), __entry->flags, __entry->mode) +); + +TRACE_EVENT(open_exec, + + TP_PROTO(const char *filename), + + TP_ARGS(filename), + + TP_STRUCT__entry( + __string( filename, filename ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + ), + + TP_printk("\"%s\"", + __get_str(filename)) +); + +#endif /* _TRACE_FS_H */ + +/* This part must be outside protection */ +#include --- linux-aws-4.15.0.orig/include/uapi/linux/aufs_type.h +++ linux-aws-4.15.0/include/uapi/linux/aufs_type.h @@ -0,0 +1,447 @@ +/* + * Copyright (C) 2005-2017 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __AUFS_TYPE_H__ +#define __AUFS_TYPE_H__ + +#define AUFS_NAME "aufs" + +#ifdef __KERNEL__ +/* + * define it before including all other headers. + * sched.h may use pr_* macros before defining "current", so define the + * no-current version first, and re-define later. + */ +#define pr_fmt(fmt) AUFS_NAME " %s:%d: " fmt, __func__, __LINE__ +#include +#undef pr_fmt +#define pr_fmt(fmt) \ + AUFS_NAME " %s:%d:%.*s[%d]: " fmt, __func__, __LINE__, \ + (int)sizeof(current->comm), current->comm, current->pid +#else +#include +#include +#endif /* __KERNEL__ */ + +#include + +#define AUFS_VERSION "4.x-rcN-20171218" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_BRANCH_MAX_127 +typedef int8_t aufs_bindex_t; +#define AUFS_BRANCH_MAX 127 +#else +typedef int16_t aufs_bindex_t; +#ifdef CONFIG_AUFS_BRANCH_MAX_511 +#define AUFS_BRANCH_MAX 511 +#elif defined(CONFIG_AUFS_BRANCH_MAX_1023) +#define AUFS_BRANCH_MAX 1023 +#elif defined(CONFIG_AUFS_BRANCH_MAX_32767) +#define AUFS_BRANCH_MAX 32767 +#endif +#endif + +#ifdef __KERNEL__ +#ifndef AUFS_BRANCH_MAX +#error unknown CONFIG_AUFS_BRANCH_MAX value +#endif +#endif /* __KERNEL__ */ + +/* ---------------------------------------------------------------------- */ + +#define AUFS_FSTYPE AUFS_NAME + +#define AUFS_ROOT_INO 2 +#define AUFS_FIRST_INO 11 + +#define AUFS_WH_PFX ".wh." +#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1) +#define AUFS_WH_TMP_LEN 4 +/* a limit for rmdir/rename a dir and copyup */ +#define AUFS_MAX_NAMELEN (NAME_MAX \ + - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\ + - 1 /* dot */\ + - AUFS_WH_TMP_LEN) /* hex */ +#define AUFS_XINO_FNAME "." AUFS_NAME ".xino" +#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME +#define AUFS_XINO_DEF_SEC 30 /* seconds */ +#define AUFS_XINO_DEF_TRUNC 45 /* percentage */ +#define AUFS_DIRWH_DEF 3 +#define AUFS_RDCACHE_DEF 10 /* seconds */ +#define AUFS_RDCACHE_MAX 3600 /* seconds */ +#define AUFS_RDBLK_DEF 512 /* bytes */ +#define AUFS_RDHASH_DEF 32 +#define AUFS_WKQ_NAME AUFS_NAME "d" +#define AUFS_MFS_DEF_SEC 30 /* seconds */ +#define AUFS_MFS_MAX_SEC 3600 /* seconds */ +#define AUFS_FHSM_CACHE_DEF_SEC 30 /* seconds */ +#define AUFS_PLINK_WARN 50 /* number of plinks in a single bucket */ + +/* pseudo-link maintenace under /proc */ +#define AUFS_PLINK_MAINT_NAME "plink_maint" +#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME +#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME + +/* dirren, renamed dir */ +#define AUFS_DR_INFO_PFX AUFS_WH_PFX ".dr." +#define AUFS_DR_BRHINO_NAME AUFS_WH_PFX "hino" +/* whiteouted doubly */ +#define AUFS_WH_DR_INFO_PFX AUFS_WH_PFX AUFS_DR_INFO_PFX +#define AUFS_WH_DR_BRHINO AUFS_WH_PFX AUFS_DR_BRHINO_NAME + +#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */ +#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME + +#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME +#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk" +#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph" + +/* doubly whiteouted */ +#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME +#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME +#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME + +/* branch permissions and attributes */ +#define AUFS_BRPERM_RW "rw" +#define AUFS_BRPERM_RO "ro" +#define AUFS_BRPERM_RR "rr" +#define AUFS_BRATTR_COO_REG "coo_reg" +#define AUFS_BRATTR_COO_ALL "coo_all" +#define AUFS_BRATTR_FHSM "fhsm" +#define AUFS_BRATTR_UNPIN "unpin" +#define AUFS_BRATTR_ICEX "icex" +#define AUFS_BRATTR_ICEX_SEC "icexsec" +#define AUFS_BRATTR_ICEX_SYS "icexsys" +#define AUFS_BRATTR_ICEX_TR "icextr" +#define AUFS_BRATTR_ICEX_USR "icexusr" +#define AUFS_BRATTR_ICEX_OTH "icexoth" +#define AUFS_BRRATTR_WH "wh" +#define AUFS_BRWATTR_NLWH "nolwh" +#define AUFS_BRWATTR_MOO "moo" + +#define AuBrPerm_RW 1 /* writable, hardlinkable wh */ +#define AuBrPerm_RO (1 << 1) /* readonly */ +#define AuBrPerm_RR (1 << 2) /* natively readonly */ +#define AuBrPerm_Mask (AuBrPerm_RW | AuBrPerm_RO | AuBrPerm_RR) + +#define AuBrAttr_COO_REG (1 << 3) /* copy-up on open */ +#define AuBrAttr_COO_ALL (1 << 4) +#define AuBrAttr_COO_Mask (AuBrAttr_COO_REG | AuBrAttr_COO_ALL) + +#define AuBrAttr_FHSM (1 << 5) /* file-based hsm */ +#define AuBrAttr_UNPIN (1 << 6) /* rename-able top dir of + branch. meaningless since + linux-3.18-rc1 */ + +/* ignore error in copying XATTR */ +#define AuBrAttr_ICEX_SEC (1 << 7) +#define AuBrAttr_ICEX_SYS (1 << 8) +#define AuBrAttr_ICEX_TR (1 << 9) +#define AuBrAttr_ICEX_USR (1 << 10) +#define AuBrAttr_ICEX_OTH (1 << 11) +#define AuBrAttr_ICEX (AuBrAttr_ICEX_SEC \ + | AuBrAttr_ICEX_SYS \ + | AuBrAttr_ICEX_TR \ + | AuBrAttr_ICEX_USR \ + | AuBrAttr_ICEX_OTH) + +#define AuBrRAttr_WH (1 << 12) /* whiteout-able */ +#define AuBrRAttr_Mask AuBrRAttr_WH + +#define AuBrWAttr_NoLinkWH (1 << 13) /* un-hardlinkable whiteouts */ +#define AuBrWAttr_MOO (1 << 14) /* move-up on open */ +#define AuBrWAttr_Mask (AuBrWAttr_NoLinkWH | AuBrWAttr_MOO) + +#define AuBrAttr_CMOO_Mask (AuBrAttr_COO_Mask | AuBrWAttr_MOO) + +/* #warning test userspace */ +#ifdef __KERNEL__ +#ifndef CONFIG_AUFS_FHSM +#undef AuBrAttr_FHSM +#define AuBrAttr_FHSM 0 +#endif +#ifndef CONFIG_AUFS_XATTR +#undef AuBrAttr_ICEX +#define AuBrAttr_ICEX 0 +#undef AuBrAttr_ICEX_SEC +#define AuBrAttr_ICEX_SEC 0 +#undef AuBrAttr_ICEX_SYS +#define AuBrAttr_ICEX_SYS 0 +#undef AuBrAttr_ICEX_TR +#define AuBrAttr_ICEX_TR 0 +#undef AuBrAttr_ICEX_USR +#define AuBrAttr_ICEX_USR 0 +#undef AuBrAttr_ICEX_OTH +#define AuBrAttr_ICEX_OTH 0 +#endif +#endif + +/* the longest combination */ +/* AUFS_BRATTR_ICEX and AUFS_BRATTR_ICEX_TR don't affect here */ +#define AuBrPermStrSz sizeof(AUFS_BRPERM_RW \ + "+" AUFS_BRATTR_COO_REG \ + "+" AUFS_BRATTR_FHSM \ + "+" AUFS_BRATTR_UNPIN \ + "+" AUFS_BRATTR_ICEX_SEC \ + "+" AUFS_BRATTR_ICEX_SYS \ + "+" AUFS_BRATTR_ICEX_USR \ + "+" AUFS_BRATTR_ICEX_OTH \ + "+" AUFS_BRWATTR_NLWH) + +typedef struct { + char a[AuBrPermStrSz]; +} au_br_perm_str_t; + +static inline int au_br_writable(int brperm) +{ + return brperm & AuBrPerm_RW; +} + +static inline int au_br_whable(int brperm) +{ + return brperm & (AuBrPerm_RW | AuBrRAttr_WH); +} + +static inline int au_br_wh_linkable(int brperm) +{ + return !(brperm & AuBrWAttr_NoLinkWH); +} + +static inline int au_br_cmoo(int brperm) +{ + return brperm & AuBrAttr_CMOO_Mask; +} + +static inline int au_br_fhsm(int brperm) +{ + return brperm & AuBrAttr_FHSM; +} + +/* ---------------------------------------------------------------------- */ + +/* ioctl */ +enum { + /* readdir in userspace */ + AuCtl_RDU, + AuCtl_RDU_INO, + + AuCtl_WBR_FD, /* pathconf wrapper */ + AuCtl_IBUSY, /* busy inode */ + AuCtl_MVDOWN, /* move-down */ + AuCtl_BR, /* info about branches */ + AuCtl_FHSM_FD /* connection for fhsm */ +}; + +/* borrowed from linux/include/linux/kernel.h */ +#ifndef ALIGN +#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1) +#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask)) +#endif + +/* borrowed from linux/include/linux/compiler-gcc3.h */ +#ifndef __aligned +#define __aligned(x) __attribute__((aligned(x))) +#endif + +#ifdef __KERNEL__ +#ifndef __packed +#define __packed __attribute__((packed)) +#endif +#endif + +struct au_rdu_cookie { + uint64_t h_pos; + int16_t bindex; + uint8_t flags; + uint8_t pad; + uint32_t generation; +} __aligned(8); + +struct au_rdu_ent { + uint64_t ino; + int16_t bindex; + uint8_t type; + uint8_t nlen; + uint8_t wh; + char name[0]; +} __aligned(8); + +static inline int au_rdu_len(int nlen) +{ + /* include the terminating NULL */ + return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1, + sizeof(uint64_t)); +} + +union au_rdu_ent_ul { + struct au_rdu_ent __user *e; + uint64_t ul; +}; + +enum { + AufsCtlRduV_SZ, + AufsCtlRduV_End +}; + +struct aufs_rdu { + /* input */ + union { + uint64_t sz; /* AuCtl_RDU */ + uint64_t nent; /* AuCtl_RDU_INO */ + }; + union au_rdu_ent_ul ent; + uint16_t verify[AufsCtlRduV_End]; + + /* input/output */ + uint32_t blk; + + /* output */ + union au_rdu_ent_ul tail; + /* number of entries which were added in a single call */ + uint64_t rent; + uint8_t full; + uint8_t shwh; + + struct au_rdu_cookie cookie; +} __aligned(8); + +/* ---------------------------------------------------------------------- */ + +/* dirren. the branch is identified by the filename who contains this */ +struct au_drinfo { + uint64_t ino; + union { + uint8_t oldnamelen; + uint64_t _padding; + }; + uint8_t oldname[0]; +} __aligned(8); + +struct au_drinfo_fdata { + uint32_t magic; + struct au_drinfo drinfo; +} __aligned(8); + +#define AUFS_DRINFO_MAGIC_V1 ('a' << 24 | 'd' << 16 | 'r' << 8 | 0x01) +/* future */ +#define AUFS_DRINFO_MAGIC_V2 ('a' << 24 | 'd' << 16 | 'r' << 8 | 0x02) + +/* ---------------------------------------------------------------------- */ + +struct aufs_wbr_fd { + uint32_t oflags; + int16_t brid; +} __aligned(8); + +/* ---------------------------------------------------------------------- */ + +struct aufs_ibusy { + uint64_t ino, h_ino; + int16_t bindex; +} __aligned(8); + +/* ---------------------------------------------------------------------- */ + +/* error code for move-down */ +/* the actual message strings are implemented in aufs-util.git */ +enum { + EAU_MVDOWN_OPAQUE = 1, + EAU_MVDOWN_WHITEOUT, + EAU_MVDOWN_UPPER, + EAU_MVDOWN_BOTTOM, + EAU_MVDOWN_NOUPPER, + EAU_MVDOWN_NOLOWERBR, + EAU_Last +}; + +/* flags for move-down */ +#define AUFS_MVDOWN_DMSG 1 +#define AUFS_MVDOWN_OWLOWER (1 << 1) /* overwrite lower */ +#define AUFS_MVDOWN_KUPPER (1 << 2) /* keep upper */ +#define AUFS_MVDOWN_ROLOWER (1 << 3) /* do even if lower is RO */ +#define AUFS_MVDOWN_ROLOWER_R (1 << 4) /* did on lower RO */ +#define AUFS_MVDOWN_ROUPPER (1 << 5) /* do even if upper is RO */ +#define AUFS_MVDOWN_ROUPPER_R (1 << 6) /* did on upper RO */ +#define AUFS_MVDOWN_BRID_UPPER (1 << 7) /* upper brid */ +#define AUFS_MVDOWN_BRID_LOWER (1 << 8) /* lower brid */ +#define AUFS_MVDOWN_FHSM_LOWER (1 << 9) /* find fhsm attr for lower */ +#define AUFS_MVDOWN_STFS (1 << 10) /* req. stfs */ +#define AUFS_MVDOWN_STFS_FAILED (1 << 11) /* output: stfs is unusable */ +#define AUFS_MVDOWN_BOTTOM (1 << 12) /* output: no more lowers */ + +/* index for move-down */ +enum { + AUFS_MVDOWN_UPPER, + AUFS_MVDOWN_LOWER, + AUFS_MVDOWN_NARRAY +}; + +/* + * additional info of move-down + * number of free blocks and inodes. + * subset of struct kstatfs, but smaller and always 64bit. + */ +struct aufs_stfs { + uint64_t f_blocks; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; +}; + +struct aufs_stbr { + int16_t brid; /* optional input */ + int16_t bindex; /* output */ + struct aufs_stfs stfs; /* output when AUFS_MVDOWN_STFS set */ +} __aligned(8); + +struct aufs_mvdown { + uint32_t flags; /* input/output */ + struct aufs_stbr stbr[AUFS_MVDOWN_NARRAY]; /* input/output */ + int8_t au_errno; /* output */ +} __aligned(8); + +/* ---------------------------------------------------------------------- */ + +union aufs_brinfo { + /* PATH_MAX may differ between kernel-space and user-space */ + char _spacer[4096]; + struct { + int16_t id; + int perm; + char path[0]; + }; +} __aligned(8); + +/* ---------------------------------------------------------------------- */ + +#define AuCtlType 'A' +#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu) +#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu) +#define AUFS_CTL_WBR_FD _IOW(AuCtlType, AuCtl_WBR_FD, \ + struct aufs_wbr_fd) +#define AUFS_CTL_IBUSY _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy) +#define AUFS_CTL_MVDOWN _IOWR(AuCtlType, AuCtl_MVDOWN, \ + struct aufs_mvdown) +#define AUFS_CTL_BRINFO _IOW(AuCtlType, AuCtl_BR, union aufs_brinfo) +#define AUFS_CTL_FHSM_FD _IOW(AuCtlType, AuCtl_FHSM_FD, int) + +#endif /* __AUFS_TYPE_H__ */ --- linux-aws-4.15.0.orig/include/uapi/linux/if_link.h +++ linux-aws-4.15.0/include/uapi/linux/if_link.h @@ -513,6 +513,7 @@ IFLA_VXLAN_COLLECT_METADATA, IFLA_VXLAN_LABEL, IFLA_VXLAN_GPE, + IFLA_VXLAN_FAN_MAP = 33, __IFLA_VXLAN_MAX }; #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1) --- linux-aws-4.15.0.orig/include/uapi/linux/if_tunnel.h +++ linux-aws-4.15.0/include/uapi/linux/if_tunnel.h @@ -77,6 +77,10 @@ IFLA_IPTUN_ENCAP_DPORT, IFLA_IPTUN_COLLECT_METADATA, IFLA_IPTUN_FWMARK, + + __IFLA_IPTUN_VENDOR_BREAK, /* Ensure new entries do not hit the below. */ + IFLA_IPTUN_FAN_MAP = 33, + __IFLA_IPTUN_MAX, }; #define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1) @@ -157,4 +161,20 @@ }; #define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1) + +enum { + IFLA_FAN_UNSPEC, + IFLA_FAN_MAPPING, + __IFLA_FAN_MAX, +}; + +#define IFLA_FAN_MAX (__IFLA_FAN_MAX - 1) + +struct ifla_fan_map { + __be32 underlay; + __be32 overlay; + __u16 underlay_prefix; + __u16 overlay_prefix; +}; + #endif /* _UAPI_IF_TUNNEL_H_ */ --- linux-aws-4.15.0.orig/include/uapi/linux/kd.h +++ linux-aws-4.15.0/include/uapi/linux/kd.h @@ -46,6 +46,8 @@ #define KD_GRAPHICS 0x01 #define KD_TEXT0 0x02 /* obsolete */ #define KD_TEXT1 0x03 /* obsolete */ +#define KD_TRANSPARENT 0x04 + #define KDGETMODE 0x4B3B /* get current mode */ #define KDMAPDISP 0x4B3C /* map display into address space */ --- linux-aws-4.15.0.orig/init/Kconfig +++ linux-aws-4.15.0/init/Kconfig @@ -220,6 +220,15 @@ but you may wish to use a different default here to make a minimal system more usable with less configuration. +config VERSION_SIGNATURE + string "Arbitrary version signature" + help + This string will be created in a file, /proc/version_signature. It + is useful in determining arbitrary data about your kernel. For instance, + if you have several kernels of the same version, but need to keep track + of a revision of the same kernel, but not affect it's ability to load + compatible modules, this is the easiest way to do that. + config SWAP bool "Support for paging of anonymous memory (swap)" depends on MMU && BLOCK --- linux-aws-4.15.0.orig/init/do_mounts.c +++ linux-aws-4.15.0/init/do_mounts.c @@ -548,6 +548,7 @@ void __init prepare_namespace(void) { int is_floppy; + int err; if (root_delay) { printk(KERN_INFO "Waiting %d sec before mounting root device...\n", @@ -601,6 +602,13 @@ devtmpfs_mount("dev"); sys_mount(".", "/", NULL, MS_MOVE, NULL); sys_chroot("."); +#ifdef CONFIG_BLOCK + /* recreate the /dev/root */ + err = create_dev("/dev/root", ROOT_DEV); + + if (err < 0) + pr_emerg("Failed to create /dev/root: %d\n", err); +#endif } static bool is_tmpfs; --- linux-aws-4.15.0.orig/init/main.c +++ linux-aws-4.15.0/init/main.c @@ -801,16 +801,16 @@ static int __init_or_module do_one_initcall_debug(initcall_t fn) { - ktime_t calltime, delta, rettime; + unsigned long long calltime, delta, rettime; unsigned long long duration; int ret; printk(KERN_DEBUG "calling %pF @ %i\n", fn, task_pid_nr(current)); - calltime = ktime_get(); + calltime = local_clock(); ret = fn(); - rettime = ktime_get(); - delta = ktime_sub(rettime, calltime); - duration = (unsigned long long) ktime_to_ns(delta) >> 10; + rettime = local_clock(); + delta = rettime - calltime; + duration = delta >> 10; printk(KERN_DEBUG "initcall %pF returned %d after %lld usecs\n", fn, ret, duration); --- linux-aws-4.15.0.orig/init/version.c +++ linux-aws-4.15.0/init/version.c @@ -43,7 +43,11 @@ /* FIXED STRINGS! Don't touch! */ const char linux_banner[] = "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" - LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; + LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION +#ifdef CONFIG_VERSION_SIGNATURE + " (" CONFIG_VERSION_SIGNATURE ")" +#endif + "\n"; const char linux_proc_banner[] = "%s version %s" --- linux-aws-4.15.0.orig/kernel/cred.c +++ linux-aws-4.15.0/kernel/cred.c @@ -575,38 +575,30 @@ } /** - * prepare_kernel_cred - Prepare a set of credentials for a kernel service - * @daemon: A userspace daemon to be used as a reference - * - * Prepare a set of credentials for a kernel service. This can then be used to - * override a task's own credentials so that work can be done on behalf of that - * task that requires a different subjective context. - * - * @daemon is used to provide a base for the security record, but can be NULL. - * If @daemon is supplied, then the security data will be derived from that; - * otherwise they'll be set to 0 and no groups, full capabilities and no keys. + * clone_cred - Create a new copy of a set of credentials + * @old: Credentials to be copied * - * The caller may change these controls afterwards if desired. + * Prepare a new set of credentials that is an exact copy of @old. This can + * optionally be modified and used to override a task's own credentials so + * that work can be done on behalf of that task that requires a different + * subjective context. * - * Returns the new credentials or NULL if out of memory. + * Returns the new credentials or NULL if @old is NULL or if out of memory. * * Does not take, and does not return holding current->cred_replace_mutex. */ -struct cred *prepare_kernel_cred(struct task_struct *daemon) +struct cred *clone_cred(const struct cred *old) { - const struct cred *old; struct cred *new; + if (!old) + return NULL; + new = kmem_cache_alloc(cred_jar, GFP_KERNEL); if (!new) return NULL; - kdebug("prepare_kernel_cred() alloc %p", new); - - if (daemon) - old = get_task_cred(daemon); - else - old = get_cred(&init_cred); + kdebug("clone_cred() alloc %p", new); validate_creds(old); @@ -631,15 +623,47 @@ if (security_prepare_creds(new, old, GFP_KERNEL) < 0) goto error; - put_cred(old); validate_creds(new); return new; error: put_cred(new); - put_cred(old); return NULL; } +EXPORT_SYMBOL(clone_cred); + +/** + * prepare_kernel_cred - Prepare a set of credentials for a kernel service + * @daemon: A userspace daemon to be used as a reference + * + * Prepare a set of credentials for a kernel service. This can then be used to + * override a task's own credentials so that work can be done on behalf of that + * task that requires a different subjective context. + * + * @daemon is used to provide a base for the security record, but can be NULL. + * If @daemon is supplied, then the security data will be derived from that; + * otherwise they'll be set to 0 and no groups, full capabilities and no keys. + * + * The caller may change these controls afterwards if desired. + * + * Returns the new credentials or NULL if out of memory. + * + * Does not take, and does not return holding current->cred_replace_mutex. + */ +struct cred *prepare_kernel_cred(struct task_struct *daemon) +{ + const struct cred *old; + struct cred *new; + + if (daemon) + old = get_task_cred(daemon); + else + old = get_cred(&init_cred); + + new = clone_cred(old); + put_cred(old); + return new; +} EXPORT_SYMBOL(prepare_kernel_cred); /** --- linux-aws-4.15.0.orig/kernel/debug/kdb/kdb_main.c +++ linux-aws-4.15.0/kernel/debug/kdb/kdb_main.c @@ -1970,7 +1970,7 @@ return KDB_ARGCOUNT; kdb_trap_printk++; - __handle_sysrq(*argv[1], check_mask); + __handle_sysrq(*argv[1], check_mask ? SYSRQ_FROM_KERNEL : 0); kdb_trap_printk--; return 0; --- linux-aws-4.15.0.orig/kernel/events/core.c +++ linux-aws-4.15.0/kernel/events/core.c @@ -397,8 +397,13 @@ * 0 - disallow raw tracepoint access for unpriv * 1 - disallow cpu events for unpriv * 2 - disallow kernel profiling for unpriv + * 3 - disallow all unpriv perf event use */ -int sysctl_perf_event_paranoid __read_mostly = 2; +#ifdef CONFIG_SECURITY_PERF_EVENTS_RESTRICT +int sysctl_perf_event_paranoid __read_mostly = 3; +#else +int sysctl_perf_event_paranoid __read_mostly = 1; +#endif /* Minimum for 512 kiB + 1 user control page */ int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */ @@ -9881,6 +9886,9 @@ if (flags & ~PERF_FLAG_ALL) return -EINVAL; + if (perf_paranoid_any() && !capable(CAP_SYS_ADMIN)) + return -EACCES; + err = perf_copy_attr(attr_uptr, &attr); if (err) return err; --- linux-aws-4.15.0.orig/kernel/fork.c +++ linux-aws-4.15.0/kernel/fork.c @@ -102,6 +102,11 @@ #define CREATE_TRACE_POINTS #include +#ifdef CONFIG_USER_NS +extern int unprivileged_userns_clone; +#else +#define unprivileged_userns_clone 0 +#endif /* * Minimum number of threads to boot the kernel @@ -676,7 +681,7 @@ struct inode *inode = file_inode(file); struct address_space *mapping = file->f_mapping; - get_file(file); + vma_get_file(tmp); if (tmp->vm_flags & VM_DENYWRITE) atomic_dec(&inode->i_writecount); i_mmap_lock_write(mapping); @@ -1550,6 +1555,10 @@ if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS)) return ERR_PTR(-EINVAL); + if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) + if (!capable(CAP_SYS_ADMIN)) + return ERR_PTR(-EPERM); + /* * Thread groups must share signals as well, and detached threads * can only be started up within the thread group. @@ -2343,6 +2352,12 @@ if (unshare_flags & CLONE_NEWNS) unshare_flags |= CLONE_FS; + if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) { + err = -EPERM; + if (!capable(CAP_SYS_ADMIN)) + goto bad_unshare_out; + } + err = check_unshare_flags(unshare_flags); if (err) goto bad_unshare_out; --- linux-aws-4.15.0.orig/kernel/irq/Kconfig +++ linux-aws-4.15.0/kernel/irq/Kconfig @@ -117,6 +117,10 @@ config IRQ_FORCED_THREADING bool +config IRQ_FORCED_THREADING_DEFAULT + bool "Use IRQ threading by default" + depends on IRQ_FORCED_THREADING + config SPARSE_IRQ bool "Support sparse irq numbering" if MAY_HAVE_SPARSE_IRQ ---help--- --- linux-aws-4.15.0.orig/kernel/irq/manage.c +++ linux-aws-4.15.0/kernel/irq/manage.c @@ -24,14 +24,20 @@ #include "internals.h" #ifdef CONFIG_IRQ_FORCED_THREADING -__read_mostly bool force_irqthreads; +__read_mostly bool force_irqthreads = IS_ENABLED(CONFIG_IRQ_FORCED_THREADING_DEFAULT); static int __init setup_forced_irqthreads(char *arg) { force_irqthreads = true; return 0; } +static int __init setup_no_irqthreads(char *arg) +{ + force_irqthreads = false; + return 0; +} early_param("threadirqs", setup_forced_irqthreads); +early_param("nothreadirqs", setup_no_irqthreads); #endif static void __synchronize_hardirq(struct irq_desc *desc) --- linux-aws-4.15.0.orig/kernel/kexec.c +++ linux-aws-4.15.0/kernel/kexec.c @@ -202,6 +202,13 @@ return -EPERM; /* + * kexec can be used to circumvent module loading restrictions, so + * prevent loading in that case + */ + if (kernel_is_locked_down("kexec of unsigned images")) + return -EPERM; + + /* * Verify we have a legal set of flags * This leaves us room for future extensions. */ --- linux-aws-4.15.0.orig/kernel/kexec_file.c +++ linux-aws-4.15.0/kernel/kexec_file.c @@ -255,6 +255,13 @@ if (!capable(CAP_SYS_BOOT) || kexec_load_disabled) return -EPERM; + /* Don't permit images to be loaded into trusted kernels if we're not + * going to verify the signature on them + */ + if (!IS_ENABLED(CONFIG_KEXEC_VERIFY_SIG) && + kernel_is_locked_down("kexec of unsigned images")) + return -EPERM; + /* Make sure we have a legal set of flags */ if (flags != (flags & KEXEC_FILE_FLAGS)) return -EINVAL; --- linux-aws-4.15.0.orig/kernel/kthread.c +++ linux-aws-4.15.0/kernel/kthread.c @@ -301,6 +301,17 @@ * new kernel thread. */ if (unlikely(wait_for_completion_killable(&done))) { + int i = 0; + + /* + * I got SIGKILL, but wait for 10 more seconds for completion + * unless chosen by the OOM killer. This delay is there as a + * workaround for boot failure caused by SIGKILL upon device + * driver initialization timeout. + */ + while (i++ < 10 && !test_tsk_thread_flag(current, TIF_MEMDIE)) + if (wait_for_completion_timeout(&done, HZ)) + goto ready; /* * If I was SIGKILLed before kthreadd (or new kernel thread) * calls complete(), leave the cleanup of this structure to @@ -314,6 +325,7 @@ */ wait_for_completion(&done); } +ready: task = create->result; if (!IS_ERR(task)) { static const struct sched_param param = { .sched_priority = 0 }; --- linux-aws-4.15.0.orig/kernel/locking/lockdep.c +++ linux-aws-4.15.0/kernel/locking/lockdep.c @@ -140,7 +140,7 @@ unsigned long nr_lock_classes; static struct lock_class lock_classes[MAX_LOCKDEP_KEYS]; -static inline struct lock_class *hlock_class(struct held_lock *hlock) +inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock) { if (!hlock->class_idx) { /* @@ -151,6 +151,8 @@ } return lock_classes + hlock->class_idx - 1; } +EXPORT_SYMBOL_GPL(lockdep_hlock_class); +#define hlock_class(hlock) lockdep_hlock_class(hlock) #ifdef CONFIG_LOCK_STAT static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats); --- linux-aws-4.15.0.orig/kernel/module.c +++ linux-aws-4.15.0/kernel/module.c @@ -2789,7 +2789,8 @@ } /* Not having a signature is only an error if we're strict. */ - if (err == -ENOKEY && !sig_enforce) + if (err == -ENOKEY && !sig_enforce && + !kernel_is_locked_down("Loading of unsigned modules")) err = 0; return err; @@ -2863,6 +2864,15 @@ } #endif /* CONFIG_LIVEPATCH */ +static void check_modinfo_retpoline(struct module *mod, struct load_info *info) +{ + if (retpoline_module_ok(get_modinfo(info, "retpoline"))) + return; + + pr_warn("%s: loading module not compiled with retpoline compiler.\n", + mod->name); +} + /* Sets info->hdr and info->len. */ static int copy_module_from_user(const void __user *umod, unsigned long len, struct load_info *info) @@ -3029,6 +3039,8 @@ add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK); } + check_modinfo_retpoline(mod, info); + if (get_modinfo(info, "staging")) { add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK); pr_warn("%s: module is from the staging directory, the quality " --- linux-aws-4.15.0.orig/kernel/module_signing.c +++ linux-aws-4.15.0/kernel/module_signing.c @@ -81,6 +81,6 @@ } return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, - NULL, VERIFYING_MODULE_SIGNATURE, + (void *)1UL, VERIFYING_MODULE_SIGNATURE, NULL, NULL); } --- linux-aws-4.15.0.orig/kernel/params.c +++ linux-aws-4.15.0/kernel/params.c @@ -108,13 +108,19 @@ return parameqn(a, b, strlen(a)+1); } -static void param_check_unsafe(const struct kernel_param *kp) +static bool param_check_unsafe(const struct kernel_param *kp, + const char *doing) { if (kp->flags & KERNEL_PARAM_FL_UNSAFE) { pr_warn("Setting dangerous option %s - tainting kernel\n", kp->name); add_taint(TAINT_USER, LOCKDEP_STILL_OK); } + + if (kp->flags & KERNEL_PARAM_FL_HWPARAM && + kernel_is_locked_down("Command line-specified device addresses, irqs and dma channels")) + return false; + return true; } static int parse_one(char *param, @@ -144,8 +150,10 @@ pr_debug("handling %s with %p\n", param, params[i].ops->set); kernel_param_lock(params[i].mod); - param_check_unsafe(¶ms[i]); - err = params[i].ops->set(val, ¶ms[i]); + if (param_check_unsafe(¶ms[i], doing)) + err = params[i].ops->set(val, ¶ms[i]); + else + err = -EPERM; kernel_param_unlock(params[i].mod); return err; } @@ -553,6 +561,12 @@ return count; } +#ifdef CONFIG_MODULES +#define mod_name(mod) (mod)->name +#else +#define mod_name(mod) "unknown" +#endif + /* sysfs always hands a nul-terminated string in buf. We rely on that. */ static ssize_t param_attr_store(struct module_attribute *mattr, struct module_kobject *mk, @@ -565,8 +579,10 @@ return -EPERM; kernel_param_lock(mk->mod); - param_check_unsafe(attribute->param); - err = attribute->param->ops->set(buf, attribute->param); + if (param_check_unsafe(attribute->param, mod_name(mk->mod))) + err = attribute->param->ops->set(buf, attribute->param); + else + err = -EPERM; kernel_param_unlock(mk->mod); if (!err) return len; --- linux-aws-4.15.0.orig/kernel/power/hibernate.c +++ linux-aws-4.15.0/kernel/power/hibernate.c @@ -70,7 +70,7 @@ bool hibernation_available(void) { - return (nohibernate == 0); + return nohibernate == 0 && !kernel_is_locked_down("Hibernation"); } /** --- linux-aws-4.15.0.orig/kernel/power/user.c +++ linux-aws-4.15.0/kernel/power/user.c @@ -52,6 +52,9 @@ if (!hibernation_available()) return -EPERM; + if (kernel_is_locked_down("/dev/snapshot")) + return -EPERM; + lock_system_sleep(); if (!atomic_add_unless(&snapshot_device_available, -1, 0)) { --- linux-aws-4.15.0.orig/kernel/sys.c +++ linux-aws-4.15.0/kernel/sys.c @@ -1139,6 +1139,21 @@ DECLARE_RWSEM(uts_sem); #ifdef COMPAT_UTS_MACHINE +static char compat_uts_machine[__OLD_UTS_LEN+1] = COMPAT_UTS_MACHINE; + +static int __init parse_compat_uts_machine(char *arg) +{ + strncpy(compat_uts_machine, arg, __OLD_UTS_LEN); + compat_uts_machine[__OLD_UTS_LEN] = 0; + return 0; +} +early_param("compat_uts_machine", parse_compat_uts_machine); + +#undef COMPAT_UTS_MACHINE +#define COMPAT_UTS_MACHINE compat_uts_machine +#endif + +#ifdef COMPAT_UTS_MACHINE #define override_architecture(name) \ (personality(current->personality) == PER_LINUX32 && \ copy_to_user(name->machine, COMPAT_UTS_MACHINE, \ --- linux-aws-4.15.0.orig/kernel/sysctl.c +++ linux-aws-4.15.0/kernel/sysctl.c @@ -105,6 +105,9 @@ extern char core_pattern[]; extern unsigned int core_pipe_limit; #endif +#ifdef CONFIG_USER_NS +extern int unprivileged_userns_clone; +#endif extern int pid_max; extern int pid_max_min, pid_max_max; extern int percpu_pagelist_fraction; @@ -512,6 +515,15 @@ .mode = 0644, .proc_handler = proc_dointvec, }, +#endif +#ifdef CONFIG_USER_NS + { + .procname = "unprivileged_userns_clone", + .data = &unprivileged_userns_clone, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, #endif #ifdef CONFIG_PROC_SYSCTL { --- linux-aws-4.15.0.orig/kernel/task_work.c +++ linux-aws-4.15.0/kernel/task_work.c @@ -116,3 +116,4 @@ } while (work); } } +EXPORT_SYMBOL_GPL(task_work_run); --- linux-aws-4.15.0.orig/kernel/user_namespace.c +++ linux-aws-4.15.0/kernel/user_namespace.c @@ -26,6 +26,12 @@ #include #include +/* + * sysctl determining whether unprivileged users may unshare a new + * userns. Allowed by default + */ +int unprivileged_userns_clone = 1; + static struct kmem_cache *user_ns_cachep __read_mostly; static DEFINE_MUTEX(userns_state_mutex); @@ -1235,6 +1241,7 @@ { return in_userns(target_ns, current_user_ns()); } +EXPORT_SYMBOL(current_in_userns); static inline struct user_namespace *to_user_ns(struct ns_common *ns) { --- linux-aws-4.15.0.orig/lib/raid6/algos.c +++ linux-aws-4.15.0/lib/raid6/algos.c @@ -159,6 +159,10 @@ for (bestgenperf = 0, bestxorperf = 0, best = NULL, algo = raid6_algos; *algo; algo++) { if (!best || (*algo)->prefer >= best->prefer) { + /* 2 ^ (RAID6_TIME_JIFFIES_LG2 - 0.5) */ + const unsigned long raid6_time_jiffies = + ((1 << RAID6_TIME_JIFFIES_LG2) * 181) >> 8; + if ((*algo)->valid && !(*algo)->valid()) continue; @@ -169,7 +173,7 @@ while ((j1 = jiffies) == j0) cpu_relax(); while (time_before(jiffies, - j1 + (1<gen_syndrome(disks, PAGE_SIZE, *dptrs); perf++; } @@ -180,7 +184,8 @@ best = *algo; } pr_info("raid6: %-8s gen() %5ld MB/s\n", (*algo)->name, - (perf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2)); + (((perf*HZ) >> + (20-16+RAID6_TIME_JIFFIES_LG2)) * 1448) >> 10); if (!(*algo)->xor_syndrome) continue; @@ -192,7 +197,7 @@ while ((j1 = jiffies) == j0) cpu_relax(); while (time_before(jiffies, - j1 + (1<xor_syndrome(disks, start, stop, PAGE_SIZE, *dptrs); perf++; @@ -203,17 +208,20 @@ bestxorperf = perf; pr_info("raid6: %-8s xor() %5ld MB/s\n", (*algo)->name, - (perf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2+1)); + (((perf*HZ) >> + (20-16+RAID6_TIME_JIFFIES_LG2+1)) * 1448) >> 10); } } if (best) { pr_info("raid6: using algorithm %s gen() %ld MB/s\n", best->name, - (bestgenperf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2)); + (((bestgenperf*HZ) >> + (20-16+RAID6_TIME_JIFFIES_LG2)) * 1448) >> 10); if (best->xor_syndrome) pr_info("raid6: .... xor() %ld MB/s, rmw enabled\n", - (bestxorperf*HZ) >> (20-16+RAID6_TIME_JIFFIES_LG2+1)); + (((bestxorperf*HZ) >> + (20-16+RAID6_TIME_JIFFIES_LG2+1)) * 1448) >> 10); raid6_call = *best; } else pr_err("raid6: Yikes! No algorithm found!\n"); --- linux-aws-4.15.0.orig/lib/swiotlb.c +++ linux-aws-4.15.0/lib/swiotlb.c @@ -586,7 +586,7 @@ not_found: spin_unlock_irqrestore(&io_tlb_lock, flags); - if (printk_ratelimit()) + if (!(attrs & DMA_ATTR_NO_WARN) && printk_ratelimit()) dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size); return SWIOTLB_MAP_ERROR; found: @@ -713,6 +713,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, dma_addr_t *dma_handle, gfp_t flags) { + bool warn = !(flags & __GFP_NOWARN); dma_addr_t dev_addr; void *ret; int order = get_order(size); @@ -738,8 +739,8 @@ * GFP_DMA memory; fall back on map_single(), which * will grab memory from the lowest available address range. */ - phys_addr_t paddr = map_single(hwdev, 0, size, - DMA_FROM_DEVICE, 0); + phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE, + warn ? 0 : DMA_ATTR_NO_WARN); if (paddr == SWIOTLB_MAP_ERROR) goto err_warn; @@ -769,9 +770,11 @@ return ret; err_warn: - pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n", - dev_name(hwdev), size); - dump_stack(); + if (warn && printk_ratelimit()) { + pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n", + dev_name(hwdev), size); + dump_stack(); + } return NULL; } --- linux-aws-4.15.0.orig/lib/test_firmware.c +++ linux-aws-4.15.0/lib/test_firmware.c @@ -371,6 +371,7 @@ if (test_fw_config->reqs) { pr_err("Must call release_all_firmware prior to changing config\n"); rc = -EINVAL; + mutex_unlock(&test_fw_mutex); goto out; } mutex_unlock(&test_fw_mutex); --- linux-aws-4.15.0.orig/lib/vsprintf.c +++ linux-aws-4.15.0/lib/vsprintf.c @@ -1727,6 +1727,29 @@ return number(buf, end, hashval, spec); } +#ifdef CONFIG_KMSG_IDS + +unsigned long long __jhash_string(const char *str); + +static noinline_for_stack +char *jhash_string(char *buf, char *end, const char *str, const char *fmt) +{ + struct printf_spec spec; + unsigned long long num; + + num = __jhash_string(str); + + spec.type = FORMAT_TYPE_PTR; + spec.field_width = 6; + spec.flags = SMALL | ZEROPAD; + spec.base = 16; + spec.precision = -1; + + return number(buf, end, num, spec); +} + +#endif + /* * Show a '%p' thing. A kernel extension is that the '%p' is followed * by an extra set of alphanumeric characters that are extended format @@ -1821,6 +1844,7 @@ * p page flags (see struct page) given as pointer to unsigned long * g gfp flags (GFP_* and __GFP_*) given as pointer to gfp_t * v vma flags (VM_*) given as pointer to unsigned long + * - 'j' Kernel message catalog jhash for System z * - 'O' For a kobject based struct. Must be one of the following: * - 'OF[fnpPcCF]' For a device tree object * Without any optional arguments prints the full_name @@ -1960,6 +1984,10 @@ } case 'x': return pointer_string(buf, end, ptr, spec); +#ifdef CONFIG_KMSG_IDS + case 'j': + return jhash_string(buf, end, ptr, fmt); +#endif } /* default is to _not_ leak addresses, hash before printing */ --- linux-aws-4.15.0.orig/mm/Makefile +++ linux-aws-4.15.0/mm/Makefile @@ -39,7 +39,7 @@ mm_init.o mmu_context.o percpu.o slab_common.o \ compaction.o vmacache.o swap_slots.o \ interval_tree.o list_lru.o workingset.o \ - debug.o $(mmu-y) + prfile.o debug.o $(mmu-y) obj-y += init-mm.o --- linux-aws-4.15.0.orig/mm/filemap.c +++ linux-aws-4.15.0/mm/filemap.c @@ -2704,7 +2704,7 @@ int ret = VM_FAULT_LOCKED; sb_start_pagefault(inode->i_sb); - file_update_time(vmf->vma->vm_file); + vma_file_update_time(vmf->vma); lock_page(page); if (page->mapping != inode->i_mapping) { unlock_page(page); --- linux-aws-4.15.0.orig/mm/ksm.c +++ linux-aws-4.15.0/mm/ksm.c @@ -2346,8 +2346,12 @@ try_to_freeze(); if (ksmd_should_run()) { - schedule_timeout_interruptible( - msecs_to_jiffies(ksm_thread_sleep_millisecs)); + if (ksm_thread_sleep_millisecs >= 1000) + schedule_timeout_interruptible( + msecs_to_jiffies(round_jiffies_relative(ksm_thread_sleep_millisecs))); + else + schedule_timeout_interruptible( + msecs_to_jiffies(ksm_thread_sleep_millisecs)); } else { wait_event_freezable(ksm_thread_wait, ksmd_should_run() || kthread_should_stop()); --- linux-aws-4.15.0.orig/mm/memcontrol.c +++ linux-aws-4.15.0/mm/memcontrol.c @@ -5828,6 +5828,20 @@ if (!mem_cgroup_sockets_enabled) return; + /* + * Socket cloning can throw us here with sk_memcg already + * filled. It won't however, necessarily happen from + * process context. So the test for root memcg given + * the current task's memcg won't help us in this case. + * + * Respecting the original socket's memcg is a better + * decision in this case. + */ + if (sk->sk_memcg) { + css_get(&sk->sk_memcg->css); + return; + } + rcu_read_lock(); memcg = mem_cgroup_from_task(current); if (memcg == root_mem_cgroup) --- linux-aws-4.15.0.orig/mm/memory_hotplug.c +++ linux-aws-4.15.0/mm/memory_hotplug.c @@ -54,6 +54,8 @@ DEFINE_STATIC_PERCPU_RWSEM(mem_hotplug_lock); +static int default_kernel_zone = ZONE_NORMAL; + void get_online_mems(void) { percpu_down_read(&mem_hotplug_lock); @@ -833,10 +835,21 @@ set_zone_contiguous(zone); } +void set_default_mem_hotplug_zone(enum zone_type zone) +{ + default_kernel_zone = zone; +} + +#ifdef CONFIG_HIGHMEM +#define MAX_KERNEL_ZONE ZONE_HIGHMEM +#else +#define MAX_KERNEL_ZONE ZONE_NORMAL +#endif + /* * Returns a default kernel memory zone for the given pfn range. * If no kernel zone covers this pfn range it will automatically go - * to the ZONE_NORMAL. + * to the MAX_KERNEL_ZONE. */ static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn, unsigned long nr_pages) @@ -844,14 +857,14 @@ struct pglist_data *pgdat = NODE_DATA(nid); int zid; - for (zid = 0; zid <= ZONE_NORMAL; zid++) { + for (zid = 0; zid <= MAX_KERNEL_ZONE; zid++) { struct zone *zone = &pgdat->node_zones[zid]; if (zone_intersects(zone, start_pfn, nr_pages)) return zone; } - return &pgdat->node_zones[ZONE_NORMAL]; + return &pgdat->node_zones[default_kernel_zone]; } static inline struct zone *default_zone_for_pfn(int nid, unsigned long start_pfn, --- linux-aws-4.15.0.orig/mm/mmap.c +++ linux-aws-4.15.0/mm/mmap.c @@ -171,7 +171,7 @@ if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) - fput(vma->vm_file); + vma_fput(vma); mpol_put(vma_policy(vma)); kmem_cache_free(vm_area_cachep, vma); return next; @@ -896,7 +896,7 @@ if (remove_next) { if (file) { uprobe_munmap(next, next->vm_start, next->vm_end); - fput(file); + vma_fput(vma); } if (next->anon_vma) anon_vma_merge(vma, next); @@ -1761,8 +1761,8 @@ return addr; unmap_and_free_vma: + vma_fput(vma); vma->vm_file = NULL; - fput(file); /* Undo any partial mapping done by a device driver. */ unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); @@ -2586,7 +2586,7 @@ goto out_free_mpol; if (new->vm_file) - get_file(new->vm_file); + vma_get_file(new); if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); @@ -2605,7 +2605,7 @@ if (new->vm_ops && new->vm_ops->close) new->vm_ops->close(new); if (new->vm_file) - fput(new->vm_file); + vma_fput(new); unlink_anon_vmas(new); out_free_mpol: mpol_put(vma_policy(new)); @@ -2767,7 +2767,7 @@ struct vm_area_struct *vma; unsigned long populate = 0; unsigned long ret = -EINVAL; - struct file *file; + struct file *file, *prfile; pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. See Documentation/vm/remap_file_pages.txt.\n", current->comm, current->pid); @@ -2842,10 +2842,27 @@ } } - file = get_file(vma->vm_file); + vma_get_file(vma); + file = vma->vm_file; + prfile = vma->vm_prfile; ret = do_mmap_pgoff(vma->vm_file, start, size, prot, flags, pgoff, &populate, NULL); + if (!IS_ERR_VALUE(ret) && file && prfile) { + struct vm_area_struct *new_vma; + + new_vma = find_vma(mm, ret); + if (!new_vma->vm_prfile) + new_vma->vm_prfile = prfile; + if (new_vma != vma) + get_file(prfile); + } + /* + * two fput()s instead of vma_fput(vma), + * coz vma may not be available anymore. + */ fput(file); + if (prfile) + fput(prfile); out: up_write(&mm->mmap_sem); if (populate) @@ -3153,7 +3170,7 @@ if (anon_vma_clone(new_vma, vma)) goto out_free_mempol; if (new_vma->vm_file) - get_file(new_vma->vm_file); + vma_get_file(new_vma); if (new_vma->vm_ops && new_vma->vm_ops->open) new_vma->vm_ops->open(new_vma); vma_link(mm, new_vma, prev, rb_link, rb_parent); --- linux-aws-4.15.0.orig/mm/nommu.c +++ linux-aws-4.15.0/mm/nommu.c @@ -641,7 +641,7 @@ up_write(&nommu_region_sem); if (region->vm_file) - fput(region->vm_file); + vmr_fput(region); /* IO memory and memory shared directly out of the pagecache * from ramfs/tmpfs mustn't be released here */ @@ -799,7 +799,7 @@ if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) - fput(vma->vm_file); + vma_fput(vma); put_nommu_region(vma->vm_region); kmem_cache_free(vm_area_cachep, vma); } @@ -1321,7 +1321,7 @@ goto error_just_free; } } - fput(region->vm_file); + vmr_fput(region); kmem_cache_free(vm_region_jar, region); region = pregion; result = start; @@ -1396,10 +1396,10 @@ up_write(&nommu_region_sem); error: if (region->vm_file) - fput(region->vm_file); + vmr_fput(region); kmem_cache_free(vm_region_jar, region); if (vma->vm_file) - fput(vma->vm_file); + vma_fput(vma); kmem_cache_free(vm_area_cachep, vma); return ret; --- linux-aws-4.15.0.orig/mm/prfile.c +++ linux-aws-4.15.0/mm/prfile.c @@ -0,0 +1,86 @@ +/* + * SPDX-License-Identifier: GPL-2.0 + * Mainly for aufs which mmap(2) different file and wants to print different + * path in /proc/PID/maps. + * Call these functions via macros defined in linux/mm.h. + * + * See Documentation/filesystems/aufs/design/06mmap.txt + * + * Copyright (c) 2014-2017 Junjro R. Okajima + * Copyright (c) 2014 Ian Campbell + */ + +#include +#include +#include + +/* #define PRFILE_TRACE */ +static inline void prfile_trace(struct file *f, struct file *pr, + const char func[], int line, const char func2[]) +{ +#ifdef PRFILE_TRACE + if (pr) + pr_info("%s:%d: %s, %pD2\n", func, line, func2, f); +#endif +} + +void vma_do_file_update_time(struct vm_area_struct *vma, const char func[], + int line) +{ + struct file *f = vma->vm_file, *pr = vma->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + file_update_time(f); + if (f && pr) + file_update_time(pr); +} + +struct file *vma_do_pr_or_file(struct vm_area_struct *vma, const char func[], + int line) +{ + struct file *f = vma->vm_file, *pr = vma->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + return (f && pr) ? pr : f; +} + +void vma_do_get_file(struct vm_area_struct *vma, const char func[], int line) +{ + struct file *f = vma->vm_file, *pr = vma->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + get_file(f); + if (f && pr) + get_file(pr); +} + +void vma_do_fput(struct vm_area_struct *vma, const char func[], int line) +{ + struct file *f = vma->vm_file, *pr = vma->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + fput(f); + if (f && pr) + fput(pr); +} + +#ifndef CONFIG_MMU +struct file *vmr_do_pr_or_file(struct vm_region *region, const char func[], + int line) +{ + struct file *f = region->vm_file, *pr = region->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + return (f && pr) ? pr : f; +} + +void vmr_do_fput(struct vm_region *region, const char func[], int line) +{ + struct file *f = region->vm_file, *pr = region->vm_prfile; + + prfile_trace(f, pr, func, line, __func__); + fput(f); + if (f && pr) + fput(pr); +} +#endif /* !CONFIG_MMU */ --- linux-aws-4.15.0.orig/mm/shmem.c +++ linux-aws-4.15.0/mm/shmem.c @@ -111,9 +111,13 @@ return totalram_pages / 2; } -static unsigned long shmem_default_max_inodes(void) +static int shmem_default_max_inodes(void) { - return min(totalram_pages - totalhigh_pages, totalram_pages / 2); + unsigned long ul; + + ul = INT_MAX; + ul = min3(ul, totalram_pages - totalhigh_pages, totalram_pages / 2); + return ul; } #endif @@ -1082,6 +1086,11 @@ simple_xattrs_free(&info->xattrs); WARN_ON(inode->i_blocks); + if (!sbinfo->idr_nouse && inode->i_ino) { + mutex_lock(&sbinfo->idr_lock); + idr_remove(&sbinfo->idr, inode->i_ino); + mutex_unlock(&sbinfo->idr_lock); + } shmem_free_inode(inode->i_sb); clear_inode(inode); } @@ -2150,13 +2159,13 @@ struct inode *inode; struct shmem_inode_info *info; struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + int ino; if (shmem_reserve_inode(sb)) return NULL; inode = new_inode(sb); if (inode) { - inode->i_ino = get_next_ino(); inode_init_owner(inode, dir, mode); inode->i_blocks = 0; inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); @@ -2198,6 +2207,25 @@ mpol_shared_policy_init(&info->policy, NULL); break; } + + if (!sbinfo->idr_nouse) { + /* inum 0 and 1 are unused */ + mutex_lock(&sbinfo->idr_lock); + ino = idr_alloc(&sbinfo->idr, inode, 2, INT_MAX, + GFP_NOFS); + if (ino > 0) { + inode->i_ino = ino; + mutex_unlock(&sbinfo->idr_lock); + __insert_inode_hash(inode, inode->i_ino); + } else { + inode->i_ino = 0; + mutex_unlock(&sbinfo->idr_lock); + iput(inode); + /* shmem_free_inode() will be called */ + inode = NULL; + } + } else + inode->i_ino = get_next_ino(); } else shmem_free_inode(sb); return inode; @@ -3397,8 +3425,7 @@ static int shmem_match(struct inode *ino, void *vfh) { __u32 *fh = vfh; - __u64 inum = fh[2]; - inum = (inum << 32) | fh[1]; + __u64 inum = fh[1]; return ino->i_ino == inum && fh[0] == ino->i_generation; } @@ -3409,14 +3436,11 @@ struct dentry *dentry = NULL; u64 inum; - if (fh_len < 3) + if (fh_len < 2) return NULL; - inum = fid->raw[2]; - inum = (inum << 32) | fid->raw[1]; - - inode = ilookup5(sb, (unsigned long)(inum + fid->raw[0]), - shmem_match, fid->raw); + inum = fid->raw[1]; + inode = ilookup5(sb, inum, shmem_match, fid->raw); if (inode) { dentry = d_find_alias(inode); iput(inode); @@ -3428,30 +3452,15 @@ static int shmem_encode_fh(struct inode *inode, __u32 *fh, int *len, struct inode *parent) { - if (*len < 3) { - *len = 3; + if (*len < 2) { + *len = 2; return FILEID_INVALID; } - if (inode_unhashed(inode)) { - /* Unfortunately insert_inode_hash is not idempotent, - * so as we hash inodes here rather than at creation - * time, we need a lock to ensure we only try - * to do it once - */ - static DEFINE_SPINLOCK(lock); - spin_lock(&lock); - if (inode_unhashed(inode)) - __insert_inode_hash(inode, - inode->i_ino + inode->i_generation); - spin_unlock(&lock); - } - fh[0] = inode->i_generation; fh[1] = inode->i_ino; - fh[2] = ((__u64)inode->i_ino) >> 32; - *len = 3; + *len = 2; return 1; } @@ -3515,7 +3524,7 @@ goto bad_val; } else if (!strcmp(this_char,"nr_inodes")) { sbinfo->max_inodes = memparse(value, &rest); - if (*rest) + if (*rest || sbinfo->max_inodes < 2) goto bad_val; } else if (!strcmp(this_char,"mode")) { if (remount) @@ -3580,7 +3589,7 @@ { struct shmem_sb_info *sbinfo = SHMEM_SB(sb); struct shmem_sb_info config = *sbinfo; - unsigned long inodes; + int inodes; int error = -EINVAL; config.mpol = NULL; @@ -3629,7 +3638,7 @@ seq_printf(seq, ",size=%luk", sbinfo->max_blocks << (PAGE_SHIFT - 10)); if (sbinfo->max_inodes != shmem_default_max_inodes()) - seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes); + seq_printf(seq, ",nr_inodes=%d", sbinfo->max_inodes); if (sbinfo->mode != (S_IRWXUGO | S_ISVTX)) seq_printf(seq, ",mode=%03ho", sbinfo->mode); if (!uid_eq(sbinfo->uid, GLOBAL_ROOT_UID)) @@ -3747,6 +3756,8 @@ { struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + if (!sbinfo->idr_nouse) + idr_destroy(&sbinfo->idr); percpu_counter_destroy(&sbinfo->used_blocks); mpol_put(sbinfo->mpol); kfree(sbinfo); @@ -3765,6 +3776,8 @@ if (!sbinfo) return -ENOMEM; + mutex_init(&sbinfo->idr_lock); + idr_init(&sbinfo->idr); sbinfo->mode = S_IRWXUGO | S_ISVTX; sbinfo->uid = current_fsuid(); sbinfo->gid = current_fsgid(); @@ -3872,6 +3885,15 @@ kmem_cache_destroy(shmem_inode_cachep); } +static __init void shmem_no_idr(struct super_block *sb) +{ + struct shmem_sb_info *sbinfo; + + sbinfo = SHMEM_SB(sb); + sbinfo->idr_nouse = true; + idr_destroy(&sbinfo->idr); +} + static const struct address_space_operations shmem_aops = { .writepage = shmem_writepage, .set_page_dirty = __set_page_dirty_no_writeback, @@ -4002,6 +4024,7 @@ pr_err("Could not kern_mount tmpfs\n"); goto out1; } + shmem_no_idr(shm_mnt->mnt_sb); #ifdef CONFIG_TRANSPARENT_HUGE_PAGECACHE if (has_transparent_hugepage() && shmem_huge > SHMEM_HUGE_DENY) --- linux-aws-4.15.0.orig/mm/swap_state.c +++ linux-aws-4.15.0/mm/swap_state.c @@ -38,7 +38,7 @@ struct address_space *swapper_spaces[MAX_SWAPFILES] __read_mostly; static unsigned int nr_swapper_spaces[MAX_SWAPFILES] __read_mostly; -bool swap_vma_readahead __read_mostly = true; +bool swap_vma_readahead __read_mostly = false; #define SWAP_RA_WIN_SHIFT (PAGE_SHIFT / 2) #define SWAP_RA_HITS_MASK ((1UL << SWAP_RA_WIN_SHIFT) - 1) --- linux-aws-4.15.0.orig/net/core/ethtool.c +++ linux-aws-4.15.0/net/core/ethtool.c @@ -1455,11 +1455,13 @@ static int ethtool_get_wol(struct net_device *dev, char __user *useraddr) { - struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL }; + struct ethtool_wolinfo wol; if (!dev->ethtool_ops->get_wol) return -EOPNOTSUPP; + memset(&wol, 0, sizeof(struct ethtool_wolinfo)); + wol.cmd = ETHTOOL_GWOL; dev->ethtool_ops->get_wol(dev, &wol); if (copy_to_user(useraddr, &wol, sizeof(wol))) --- linux-aws-4.15.0.orig/net/core/skbuff.c +++ linux-aws-4.15.0/net/core/skbuff.c @@ -4910,37 +4910,74 @@ EXPORT_SYMBOL_GPL(skb_gso_transport_seglen); /** - * skb_gso_validate_mtu - Return in case such skb fits a given MTU + * skb_gso_size_check - check the skb size, considering GSO_BY_FRAGS * - * @skb: GSO skb - * @mtu: MTU to validate against + * There are a couple of instances where we have a GSO skb, and we + * want to determine what size it would be after it is segmented. * - * skb_gso_validate_mtu validates if a given skb will fit a wanted MTU - * once split. + * We might want to check: + * - L3+L4+payload size (e.g. IP forwarding) + * - L2+L3+L4+payload size (e.g. sanity check before passing to driver) + * + * This is a helper to do that correctly considering GSO_BY_FRAGS. + * + * @seg_len: The segmented length (from skb_gso_*_seglen). In the + * GSO_BY_FRAGS case this will be [header sizes + GSO_BY_FRAGS]. + * + * @max_len: The maximum permissible length. + * + * Returns true if the segmented length <= max length. */ -bool skb_gso_validate_mtu(const struct sk_buff *skb, unsigned int mtu) -{ +static inline bool skb_gso_size_check(const struct sk_buff *skb, + unsigned int seg_len, + unsigned int max_len) { const struct skb_shared_info *shinfo = skb_shinfo(skb); const struct sk_buff *iter; - unsigned int hlen; - - hlen = skb_gso_network_seglen(skb); if (shinfo->gso_size != GSO_BY_FRAGS) - return hlen <= mtu; + return seg_len <= max_len; /* Undo this so we can re-use header sizes */ - hlen -= GSO_BY_FRAGS; + seg_len -= GSO_BY_FRAGS; skb_walk_frags(skb, iter) { - if (hlen + skb_headlen(iter) > mtu) + if (seg_len + skb_headlen(iter) > max_len) return false; } return true; } + +/** + * skb_gso_validate_mtu - Return in case such skb fits a given MTU + * + * @skb: GSO skb + * @mtu: MTU to validate against + * + * skb_gso_validate_mtu validates if a given skb will fit a wanted MTU + * once split. + */ +bool skb_gso_validate_mtu(const struct sk_buff *skb, unsigned int mtu) +{ + return skb_gso_size_check(skb, skb_gso_network_seglen(skb), mtu); +} EXPORT_SYMBOL_GPL(skb_gso_validate_mtu); +/** + * skb_gso_validate_mac_len - Will a split GSO skb fit in a given length? + * + * @skb: GSO skb + * @len: length to validate against + * + * skb_gso_validate_mac_len validates if a given skb will fit a wanted + * length once split, including L2, L3 and L4 headers and the payload. + */ +bool skb_gso_validate_mac_len(const struct sk_buff *skb, unsigned int len) +{ + return skb_gso_size_check(skb, skb_gso_mac_seglen(skb), len); +} +EXPORT_SYMBOL_GPL(skb_gso_validate_mac_len); + static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb) { if (skb_cow(skb, skb_headroom(skb)) < 0) { --- linux-aws-4.15.0.orig/net/core/sock.c +++ linux-aws-4.15.0/net/core/sock.c @@ -1675,16 +1675,13 @@ newsk->sk_dst_pending_confirm = 0; newsk->sk_wmem_queued = 0; newsk->sk_forward_alloc = 0; - - /* sk->sk_memcg will be populated at accept() time */ - newsk->sk_memcg = NULL; - atomic_set(&newsk->sk_drops, 0); newsk->sk_send_head = NULL; newsk->sk_userlocks = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK; atomic_set(&newsk->sk_zckey, 0); sock_reset_flag(newsk, SOCK_DONE); + mem_cgroup_sk_alloc(newsk); cgroup_sk_alloc(&newsk->sk_cgrp_data); rcu_read_lock(); --- linux-aws-4.15.0.orig/net/core/sock_reuseport.c +++ linux-aws-4.15.0/net/core/sock_reuseport.c @@ -94,6 +94,16 @@ return more_reuse; } +static void reuseport_free_rcu(struct rcu_head *head) +{ + struct sock_reuseport *reuse; + + reuse = container_of(head, struct sock_reuseport, rcu); + if (reuse->prog) + bpf_prog_destroy(reuse->prog); + kfree(reuse); +} + /** * reuseport_add_sock - Add a socket to the reuseport group of another. * @sk: New socket to add to the group. @@ -102,7 +112,7 @@ */ int reuseport_add_sock(struct sock *sk, struct sock *sk2) { - struct sock_reuseport *reuse; + struct sock_reuseport *old_reuse, *reuse; if (!rcu_access_pointer(sk2->sk_reuseport_cb)) { int err = reuseport_alloc(sk2); @@ -113,10 +123,13 @@ spin_lock_bh(&reuseport_lock); reuse = rcu_dereference_protected(sk2->sk_reuseport_cb, - lockdep_is_held(&reuseport_lock)), - WARN_ONCE(rcu_dereference_protected(sk->sk_reuseport_cb, - lockdep_is_held(&reuseport_lock)), - "socket already in reuseport group"); + lockdep_is_held(&reuseport_lock)); + old_reuse = rcu_dereference_protected(sk->sk_reuseport_cb, + lockdep_is_held(&reuseport_lock)); + if (old_reuse && old_reuse->num_socks != 1) { + spin_unlock_bh(&reuseport_lock); + return -EBUSY; + } if (reuse->num_socks == reuse->max_socks) { reuse = reuseport_grow(reuse); @@ -134,19 +147,11 @@ spin_unlock_bh(&reuseport_lock); + if (old_reuse) + call_rcu(&old_reuse->rcu, reuseport_free_rcu); return 0; } -static void reuseport_free_rcu(struct rcu_head *head) -{ - struct sock_reuseport *reuse; - - reuse = container_of(head, struct sock_reuseport, rcu); - if (reuse->prog) - bpf_prog_destroy(reuse->prog); - kfree(reuse); -} - void reuseport_detach_sock(struct sock *sk) { struct sock_reuseport *reuse; --- linux-aws-4.15.0.orig/net/ipv4/igmp.c +++ linux-aws-4.15.0/net/ipv4/igmp.c @@ -386,7 +386,11 @@ pip->frag_off = htons(IP_DF); pip->ttl = 1; pip->daddr = fl4.daddr; + + rcu_read_lock(); pip->saddr = igmpv3_get_srcaddr(dev, &fl4); + rcu_read_unlock(); + pip->protocol = IPPROTO_IGMP; pip->tot_len = 0; /* filled in later */ ip_select_ident(net, skb, NULL); --- linux-aws-4.15.0.orig/net/ipv4/inet_connection_sock.c +++ linux-aws-4.15.0/net/ipv4/inet_connection_sock.c @@ -475,7 +475,6 @@ } spin_unlock_bh(&queue->fastopenq.lock); } - mem_cgroup_sk_alloc(newsk); out: release_sock(sk); if (req) --- linux-aws-4.15.0.orig/net/ipv4/ip_tunnel.c +++ linux-aws-4.15.0/net/ipv4/ip_tunnel.c @@ -1126,7 +1126,7 @@ struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id); if (dev == itn->fb_tunnel_dev) - return -EINVAL; + return fan_has_map(&tunnel->fan) ? 0 : -EINVAL; t = ip_tunnel_find(itn, p, dev->type); --- linux-aws-4.15.0.orig/net/ipv4/ipip.c +++ linux-aws-4.15.0/net/ipv4/ipip.c @@ -106,6 +106,8 @@ #include #include #include +#include +#include #include #include @@ -270,6 +272,147 @@ } #endif +static struct ip_fan_map *ipip_fan_find_map(struct ip_tunnel *t, __be32 daddr) +{ + struct ip_fan_map *fan_map; + + rcu_read_lock(); + list_for_each_entry_rcu(fan_map, &t->fan.fan_maps, list) { + if (fan_map->overlay == + (daddr & inet_make_mask(fan_map->overlay_prefix))) { + rcu_read_unlock(); + return fan_map; + } + } + rcu_read_unlock(); + + return NULL; +} + +/* Determine fan tunnel endpoint to send packet to, based on the inner IP + * address. + * + * Given a /8 overlay and /16 underlay, for an overlay (inner) address + * Y.A.B.C, the transformation is F.G.A.B, where "F" and "G" are the first + * two octets of the underlay network (the network portion of a /16), "A" + * and "B" are the low order two octets of the underlay network host (the + * host portion of a /16), and "Y" is a configured first octet of the + * overlay network. + * + * E.g., underlay host 10.88.3.4/16 with an overlay of 99.0.0.0/8 would + * host overlay subnet 99.3.4.0/24. An overlay network datagram from + * 99.3.4.5 to 99.6.7.8, would be directed to underlay host 10.88.6.7, + * which hosts overlay network subnet 99.6.7.0/24. This transformation is + * described in detail further below. + * + * Using netmasks for the overlay and underlay other than /8 and /16, as + * shown above, can yield larger (or smaller) overlay subnets, with the + * trade-off of allowing fewer (or more) underlay hosts to participate. + * + * The size of each overlay network subnet is defined by the total of the + * network mask of the overlay plus the size of host portion of the + * underlay network. In the above example, /8 + /16 = /24. + * + * E.g., consider underlay host 10.99.238.5/20 and overlay 99.0.0.0/8. In + * this case, the network portion of the underlay is 10.99.224.0/20, and + * the host portion is 0.0.14.5 (12 bits). To determine the overlay + * network subnet, the 12 bits of host portion are left shifted 12 bits + * (/20 - /8) and ORed with the overlay subnet prefix. This yields an + * overlay subnet of 99.224.80/20, composed of 8 bits overlay, followed by + * 12 bits underlay. This yields 12 bits in the overlay network portion, + * allowing for 4094 addresses in each overlay network subnet. The + * trade-off is that fewer hosts may participate in the underlay network, + * as its host address size has shrunk from 16 bits (65534 addresses) in + * the first example to 12 bits (4094 addresses) here. + * + * For fewer hosts per overlay subnet (permitting a larger number of + * underlay hosts to participate), the underlay netmask may be made + * smaller. + * + * E.g., underlay host 10.111.1.2/12 (network 10.96.0.0/12, host portion + * is 0.15.1.2, 20 bits) with an overlay of 33.0.0.0/8 would left shift + * the 20 bits of host by 4 (so that it's highest order bit is adjacent to + * the lowest order bit of the /8 overlay). This yields an overlay subnet + * of 33.240.16.32/28 (8 bits overlay, 20 bits from the host portion of + * the underlay). This provides more addresses for the underlay network + * (approximately 2^20), but each host's segment of the overlay provides + * only 4 bits of addresses (14 usable). + * + * It is also possible to adjust the overlay subnet. + * + * For an overlay of 240.0.0.0/5 and underlay of 10.88.0.0/20, consider + * underlay host 10.88.129.2; the 12 bits of host, 0.0.1.2, are left + * shifted 15 bits (/20 - /5), yielding an overlay network of + * 240.129.0.0/17. An underlay host of 10.88.244.215 would yield an + * overlay network of 242.107.128.0/17. + * + * For an overlay of 100.64.0.0/10 and underlay of 10.224.220.0/24, for + * underlay host 10.224.220.10, the underlay host portion (.10) is left + * shifted 14 bits, yielding an overlay network subnet of 100.66.128.0/18. + * This would permit 254 addresses on the underlay, with each overlay + * segment providing approximately 2^14 - 2 addresses (16382). + * + * For packets being encapsulated, the overlay network destination IP + * address is deconstructed into its overlay and underlay-derived + * portions. The underlay portion (determined by the overlay mask and + * overlay subnet mask) is right shifted according to the size of the + * underlay network mask. This value is then ORed with the network + * portion of the underlay network to produce the underlay network + * destination for the encapsulated datagram. + * + * For example, using the initial example of underlay 10.88.3.4/16 and + * overlay 99.0.0.0/8, with underlay host 10.88.3.4/16 providing overlay + * subnet 99.3.4.0/24 with specfic host 99.3.4.5. A datagram from + * 99.3.4.5 to 99.6.7.8 would first have the underlay host derived portion + * of the address extracted. This is a number of bits equal to underlay + * network host portion. In the destination address, the highest order of + * these bits is one bit lower than the lowest order bit from the overlay + * network mask. + * + * Using the sample value, 99.6.7.8, the overlay mask is /8, and the + * underlay mask is /16 (leaving 16 bits for the host portion). The bits + * to be shifted are the middle two octets, 0.6.7.0, as this is 99.6.7.8 + * ANDed with the mask 0x00ffff00 (which is 16 bits, the highest order of + * which is 1 bit lower than the lowest order overlay address bit). + * + * These octets, 0.6.7.0, are then right shifted 8 bits, yielding 0.0.6.7. + * This value is then ORed with the underlay network portion, + * 10.88.0.0/16, providing 10.88.6.7 as the final underlay destination for + * the encapuslated datagram. + * + * Another transform using the final example: overlay 100.64.0.0/10 and + * underlay 10.224.220.0/24. Consider overlay address 100.66.128.1 + * sending a datagram to 100.66.200.5. In this case, 8 bits (the host + * portion size of 10.224.220.0/24) beginning after the 100.64/10 overlay + * prefix are masked off, yielding 0.2.192.0. This is right shifted 14 + * (32 - 10 - (32 - 24), i.e., the number of bits between the overlay + * network portion and the underlay host portion) bits, yielding 0.0.0.11. + * This is ORed with the underlay network portion, 10.224.220.0/24, giving + * the underlay destination of 10.224.220.11 for overlay destination + * 100.66.200.5. + */ +static int ipip_build_fan_iphdr(struct ip_tunnel *tunnel, struct sk_buff *skb, struct iphdr *iph) +{ + struct ip_fan_map *f_map; + u32 daddr, underlay; + + f_map = ipip_fan_find_map(tunnel, ip_hdr(skb)->daddr); + if (!f_map) + return -ENOENT; + + daddr = ntohl(ip_hdr(skb)->daddr); + underlay = ntohl(f_map->underlay); + if (!underlay) + return -EINVAL; + + *iph = tunnel->parms.iph; + iph->daddr = htonl(underlay | + ((daddr & ~f_map->overlay_mask) >> + (32 - f_map->overlay_prefix - + (32 - f_map->underlay_prefix)))); + return 0; +} + /* * This function assumes it is being called from dev_queue_xmit() * and that skb is filled properly by that function. @@ -280,6 +423,7 @@ struct ip_tunnel *tunnel = netdev_priv(dev); const struct iphdr *tiph = &tunnel->parms.iph; u8 ipproto; + struct iphdr fiph; switch (skb->protocol) { case htons(ETH_P_IP): @@ -300,6 +444,14 @@ if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP4)) goto tx_error; + if (fan_has_map(&tunnel->fan)) { + if (ipip_build_fan_iphdr(tunnel, skb, &fiph)) + goto tx_error; + tiph = &fiph; + } else { + tiph = &tunnel->parms.iph; + } + skb_set_inner_ipproto(skb, ipproto); if (tunnel->collect_md) @@ -375,6 +527,8 @@ static void ipip_tunnel_setup(struct net_device *dev) { + struct ip_tunnel *t = netdev_priv(dev); + dev->netdev_ops = &ipip_netdev_ops; dev->type = ARPHRD_TUNNEL; @@ -386,6 +540,7 @@ dev->features |= IPIP_FEATURES; dev->hw_features |= IPIP_FEATURES; ip_tunnel_setup(dev, ipip_net_id); + INIT_LIST_HEAD(&t->fan.fan_maps); } static int ipip_tunnel_init(struct net_device *dev) @@ -494,6 +649,93 @@ return ret; } +static void ipip_fan_flush_map(struct ip_tunnel *t) +{ + struct ip_fan_map *fan_map; + + list_for_each_entry_rcu(fan_map, &t->fan.fan_maps, list) { + list_del_rcu(&fan_map->list); + kfree_rcu(fan_map, rcu); + } +} + +static int ipip_fan_del_map(struct ip_tunnel *t, __be32 overlay) +{ + struct ip_fan_map *fan_map; + + fan_map = ipip_fan_find_map(t, overlay); + if (!fan_map) + return -ENOENT; + + list_del_rcu(&fan_map->list); + kfree_rcu(fan_map, rcu); + + return 0; +} + +static int ipip_fan_add_map(struct ip_tunnel *t, struct ifla_fan_map *map) +{ + __be32 overlay_mask, underlay_mask; + struct ip_fan_map *fan_map; + + overlay_mask = inet_make_mask(map->overlay_prefix); + underlay_mask = inet_make_mask(map->underlay_prefix); + + if ((map->overlay & ~overlay_mask) || (map->underlay & ~underlay_mask)) + return -EINVAL; + + if (!(map->overlay & overlay_mask) && (map->underlay & underlay_mask)) + return -EINVAL; + + /* Special case: overlay 0 and underlay 0: flush all mappings */ + if (!map->overlay && !map->underlay) { + ipip_fan_flush_map(t); + return 0; + } + + /* Special case: overlay set and underlay 0: clear map for overlay */ + if (!map->underlay) + return ipip_fan_del_map(t, map->overlay); + + if (ipip_fan_find_map(t, map->overlay)) + return -EEXIST; + + fan_map = kmalloc(sizeof(*fan_map), GFP_KERNEL); + fan_map->underlay = map->underlay; + fan_map->overlay = map->overlay; + fan_map->underlay_prefix = map->underlay_prefix; + fan_map->overlay_mask = ntohl(overlay_mask); + fan_map->overlay_prefix = map->overlay_prefix; + + list_add_tail_rcu(&fan_map->list, &t->fan.fan_maps); + + return 0; +} + + +static int ipip_netlink_fan(struct nlattr *data[], struct ip_tunnel *t, + struct ip_tunnel_parm *parms) +{ + struct ifla_fan_map *map; + struct nlattr *attr; + int rem, rv; + + if (!data[IFLA_IPTUN_FAN_MAP]) + return 0; + + if (parms->iph.daddr) + return -EINVAL; + + nla_for_each_nested(attr, data[IFLA_IPTUN_FAN_MAP], rem) { + map = nla_data(attr); + rv = ipip_fan_add_map(t, map); + if (rv) + return rv; + } + + return 0; +} + static int ipip_newlink(struct net *src_net, struct net_device *dev, struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) @@ -502,15 +744,19 @@ struct ip_tunnel_parm p; struct ip_tunnel_encap ipencap; __u32 fwmark = 0; + int err; if (ipip_netlink_encap_parms(data, &ipencap)) { - int err = ip_tunnel_encap_setup(t, &ipencap); + err = ip_tunnel_encap_setup(t, &ipencap); if (err < 0) return err; } ipip_netlink_parms(data, &p, &t->collect_md, &fwmark); + err = ipip_netlink_fan(data, t, &p); + if (err < 0) + return err; return ip_tunnel_newlink(dev, tb, &p, fwmark); } @@ -523,9 +769,10 @@ struct ip_tunnel_encap ipencap; bool collect_md; __u32 fwmark = t->fwmark; + int err; if (ipip_netlink_encap_parms(data, &ipencap)) { - int err = ip_tunnel_encap_setup(t, &ipencap); + err = ip_tunnel_encap_setup(t, &ipencap); if (err < 0) return err; @@ -534,6 +781,9 @@ ipip_netlink_parms(data, &p, &collect_md, &fwmark); if (collect_md) return -EINVAL; + err = ipip_netlink_fan(data, t, &p); + if (err < 0) + return err; if (((dev->flags & IFF_POINTOPOINT) && !p.iph.daddr) || (!(dev->flags & IFF_POINTOPOINT) && p.iph.daddr)) @@ -571,6 +821,8 @@ nla_total_size(0) + /* IFLA_IPTUN_FWMARK */ nla_total_size(4) + + /* IFLA_IPTUN_FAN_MAP */ + nla_total_size(sizeof(struct ifla_fan_map)) * 256 + 0; } @@ -603,6 +855,26 @@ if (tunnel->collect_md) if (nla_put_flag(skb, IFLA_IPTUN_COLLECT_METADATA)) goto nla_put_failure; + if (fan_has_map(&tunnel->fan)) { + struct nlattr *fan_nest; + struct ip_fan_map *fan_map; + + fan_nest = nla_nest_start(skb, IFLA_IPTUN_FAN_MAP); + if (!fan_nest) + goto nla_put_failure; + list_for_each_entry_rcu(fan_map, &tunnel->fan.fan_maps, list) { + struct ifla_fan_map map; + + map.underlay = fan_map->underlay; + map.underlay_prefix = fan_map->underlay_prefix; + map.overlay = fan_map->overlay; + map.overlay_prefix = fan_map->overlay_prefix; + if (nla_put(skb, IFLA_FAN_MAPPING, sizeof(map), &map)) + goto nla_put_failure; + } + nla_nest_end(skb, fan_nest); + } + return 0; nla_put_failure: @@ -623,6 +895,9 @@ [IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 }, [IFLA_IPTUN_COLLECT_METADATA] = { .type = NLA_FLAG }, [IFLA_IPTUN_FWMARK] = { .type = NLA_U32 }, + + [__IFLA_IPTUN_VENDOR_BREAK ... IFLA_IPTUN_MAX] = { .type = NLA_BINARY }, + [IFLA_IPTUN_FAN_MAP] = { .type = NLA_NESTED }, }; static struct rtnl_link_ops ipip_link_ops __read_mostly = { @@ -671,6 +946,23 @@ .size = sizeof(struct ip_tunnel_net), }; +#ifdef CONFIG_SYSCTL +static struct ctl_table_header *ipip_fan_header; +static unsigned int ipip_fan_version = 3; + +static struct ctl_table ipip_fan_sysctls[] = { + { + .procname = "version", + .data = &ipip_fan_version, + .maxlen = sizeof(ipip_fan_version), + .mode = 0444, + .proc_handler = proc_dointvec, + }, + {}, +}; + +#endif /* CONFIG_SYSCTL */ + static int __init ipip_init(void) { int err; @@ -696,9 +988,22 @@ if (err < 0) goto rtnl_link_failed; +#ifdef CONFIG_SYSCTL + ipip_fan_header = register_net_sysctl(&init_net, "net/fan", + ipip_fan_sysctls); + if (!ipip_fan_header) { + err = -ENOMEM; + goto sysctl_failed; + } +#endif /* CONFIG_SYSCTL */ + out: return err; +#ifdef CONFIG_SYSCTL +sysctl_failed: + rtnl_link_unregister(&ipip_link_ops); +#endif /* CONFIG_SYSCTL */ rtnl_link_failed: #if IS_ENABLED(CONFIG_MPLS) xfrm4_tunnel_deregister(&mplsip_handler, AF_INET); @@ -713,6 +1018,9 @@ static void __exit ipip_fini(void) { +#ifdef CONFIG_SYSCTL + unregister_net_sysctl_table(ipip_fan_header); +#endif /* CONFIG_SYSCTL */ rtnl_link_unregister(&ipip_link_ops); if (xfrm4_tunnel_deregister(&ipip_handler, AF_INET)) pr_info("%s: can't deregister tunnel\n", __func__); --- linux-aws-4.15.0.orig/net/ipv4/netfilter/arp_tables.c +++ linux-aws-4.15.0/net/ipv4/netfilter/arp_tables.c @@ -295,6 +295,17 @@ memcmp(&e->arp, &uncond, sizeof(uncond)) == 0; } +static bool next_offset_ok(const struct xt_table_info *t, unsigned int newpos) +{ + if (newpos > t->size - sizeof(struct arpt_entry)) + return false; + + if (newpos % __alignof__(struct arpt_entry) != 0) + return false; + + return true; +} + /* Figures out from what hook each rule can be called: returns 0 if * there are loops. Puts hook bitmask in comefrom. */ @@ -358,6 +369,8 @@ /* Move along one */ size = e->next_offset; + if (!next_offset_ok(newinfo, pos + size)) + return 0; e = entry0 + pos + size; if (pos + size >= newinfo->size) return 0; @@ -379,6 +392,10 @@ if (newpos >= newinfo->size) return 0; } + + if (!next_offset_ok(newinfo, newpos)) + return 0; + e = entry0 + newpos; e->counters.pcnt = pos; pos = newpos; --- linux-aws-4.15.0.orig/net/ipv4/netfilter/ip_tables.c +++ linux-aws-4.15.0/net/ipv4/netfilter/ip_tables.c @@ -364,6 +364,17 @@ else return verdict; } +static bool next_offset_ok(const struct xt_table_info *t, unsigned int newpos) +{ + if (newpos > t->size - sizeof(struct ipt_entry)) + return false; + + if (newpos % __alignof__(struct ipt_entry) != 0) + return false; + + return true; +} + /* Figures out from what hook each rule can be called: returns 0 if there are loops. Puts hook bitmask in comefrom. */ static int @@ -424,6 +435,8 @@ /* Move along one */ size = e->next_offset; + if (!next_offset_ok(newinfo, pos + size)) + return 0; e = entry0 + pos + size; if (pos + size >= newinfo->size) return 0; @@ -445,6 +458,10 @@ if (newpos >= newinfo->size) return 0; } + + if (!next_offset_ok(newinfo, newpos)) + return 0; + e = entry0 + newpos; e->counters.pcnt = pos; pos = newpos; --- linux-aws-4.15.0.orig/net/ipv4/tcp.c +++ linux-aws-4.15.0/net/ipv4/tcp.c @@ -2434,6 +2434,12 @@ WARN_ON(inet->inet_num && !icsk->icsk_bind_hash); + if (sk->sk_frag.page) { + put_page(sk->sk_frag.page); + sk->sk_frag.page = NULL; + sk->sk_frag.offset = 0; + } + sk->sk_error_report(sk); return err; } --- linux-aws-4.15.0.orig/net/ipv4/tcp_bbr.c +++ linux-aws-4.15.0/net/ipv4/tcp_bbr.c @@ -481,7 +481,8 @@ bbr->cycle_idx = (bbr->cycle_idx + 1) & (CYCLE_LEN - 1); bbr->cycle_mstamp = tp->delivered_mstamp; - bbr->pacing_gain = bbr_pacing_gain[bbr->cycle_idx]; + bbr->pacing_gain = bbr->lt_use_bw ? BBR_UNIT : + bbr_pacing_gain[bbr->cycle_idx]; } /* Gain cycling: cycle pacing gain to converge to fair share of available bw. */ @@ -490,8 +491,7 @@ { struct bbr *bbr = inet_csk_ca(sk); - if ((bbr->mode == BBR_PROBE_BW) && !bbr->lt_use_bw && - bbr_is_next_cycle_phase(sk, rs)) + if (bbr->mode == BBR_PROBE_BW && bbr_is_next_cycle_phase(sk, rs)) bbr_advance_cycle_phase(sk); } --- linux-aws-4.15.0.orig/net/ipv6/addrconf.c +++ linux-aws-4.15.0/net/ipv6/addrconf.c @@ -186,7 +186,8 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp); static void addrconf_dad_work(struct work_struct *w); -static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id); +static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id, + bool send_na); static void addrconf_dad_run(struct inet6_dev *idev); static void addrconf_rs_timer(struct timer_list *t); static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa); @@ -3833,12 +3834,17 @@ idev->cnf.accept_dad < 1) || !(ifp->flags&IFA_F_TENTATIVE) || ifp->flags & IFA_F_NODAD) { + bool send_na = false; + + if (ifp->flags & IFA_F_TENTATIVE && + !(ifp->flags & IFA_F_OPTIMISTIC)) + send_na = true; bump_id = ifp->flags & IFA_F_TENTATIVE; ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); spin_unlock(&ifp->lock); read_unlock_bh(&idev->lock); - addrconf_dad_completed(ifp, bump_id); + addrconf_dad_completed(ifp, bump_id, send_na); return; } @@ -3967,16 +3973,21 @@ } if (ifp->dad_probes == 0) { + bool send_na = false; + /* * DAD was successful */ + if (ifp->flags & IFA_F_TENTATIVE && + !(ifp->flags & IFA_F_OPTIMISTIC)) + send_na = true; bump_id = ifp->flags & IFA_F_TENTATIVE; ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); spin_unlock(&ifp->lock); write_unlock_bh(&idev->lock); - addrconf_dad_completed(ifp, bump_id); + addrconf_dad_completed(ifp, bump_id, send_na); goto out; } @@ -4014,7 +4025,8 @@ return true; } -static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id) +static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id, + bool send_na) { struct net_device *dev = ifp->idev->dev; struct in6_addr lladdr; @@ -4046,6 +4058,16 @@ if (send_mld) ipv6_mc_dad_complete(ifp->idev); + /* send unsolicited NA if enabled */ + if (send_na && + (ifp->idev->cnf.ndisc_notify || + dev_net(dev)->ipv6.devconf_all->ndisc_notify)) { + ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifp->addr, + /*router=*/ !!ifp->idev->cnf.forwarding, + /*solicited=*/ false, /*override=*/ true, + /*inc_opt=*/ true); + } + if (send_rs) { /* * If a host as already performed a random delay @@ -4352,9 +4374,11 @@ spin_lock(&ifpub->lock); ifpub->regen_count = 0; spin_unlock(&ifpub->lock); + rcu_read_unlock_bh(); ipv6_create_tempaddr(ifpub, ifp, true); in6_ifa_put(ifpub); in6_ifa_put(ifp); + rcu_read_lock_bh(); goto restart; } } else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next)) --- linux-aws-4.15.0.orig/net/ipv6/af_inet6.c +++ linux-aws-4.15.0/net/ipv6/af_inet6.c @@ -284,6 +284,7 @@ struct net *net = sock_net(sk); __be32 v4addr = 0; unsigned short snum; + bool saved_ipv6only; int addr_type = 0; int err = 0; @@ -389,19 +390,21 @@ if (!(addr_type & IPV6_ADDR_MULTICAST)) np->saddr = addr->sin6_addr; + saved_ipv6only = sk->sk_ipv6only; + if (addr_type != IPV6_ADDR_ANY && addr_type != IPV6_ADDR_MAPPED) + sk->sk_ipv6only = 1; + /* Make sure we are allowed to bind here. */ if ((snum || !inet->bind_address_no_port) && sk->sk_prot->get_port(sk, snum)) { + sk->sk_ipv6only = saved_ipv6only; inet_reset_saddr(sk); err = -EADDRINUSE; goto out; } - if (addr_type != IPV6_ADDR_ANY) { + if (addr_type != IPV6_ADDR_ANY) sk->sk_userlocks |= SOCK_BINDADDR_LOCK; - if (addr_type != IPV6_ADDR_MAPPED) - sk->sk_ipv6only = 1; - } if (snum) sk->sk_userlocks |= SOCK_BINDPORT_LOCK; inet->inet_sport = htons(inet->inet_num); --- linux-aws-4.15.0.orig/net/ipv6/ip6mr.c +++ linux-aws-4.15.0/net/ipv6/ip6mr.c @@ -495,6 +495,7 @@ return ERR_PTR(-ENOENT); it->mrt = mrt; + it->cache = NULL; return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1) : SEQ_START_TOKEN; } --- linux-aws-4.15.0.orig/net/ipv6/ndisc.c +++ linux-aws-4.15.0/net/ipv6/ndisc.c @@ -566,6 +566,11 @@ read_lock_bh(&idev->lock); list_for_each_entry(ifa, &idev->addr_list, if_list) { + /* skip tentative addresses until dad completes */ + if (ifa->flags & IFA_F_TENTATIVE && + !(ifa->flags & IFA_F_OPTIMISTIC)) + continue; + ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr, /*router=*/ !!idev->cnf.forwarding, /*solicited=*/ false, /*override=*/ true, --- linux-aws-4.15.0.orig/net/ipv6/netfilter/ip6_tables.c +++ linux-aws-4.15.0/net/ipv6/netfilter/ip6_tables.c @@ -383,6 +383,17 @@ else return verdict; } +static bool next_offset_ok(const struct xt_table_info *t, unsigned int newpos) +{ + if (newpos > t->size - sizeof(struct ip6t_entry)) + return false; + + if (newpos % __alignof__(struct ip6t_entry) != 0) + return false; + + return true; +} + /* Figures out from what hook each rule can be called: returns 0 if there are loops. Puts hook bitmask in comefrom. */ static int @@ -443,6 +454,8 @@ /* Move along one */ size = e->next_offset; + if (!next_offset_ok(newinfo, pos + size)) + return 0; e = entry0 + pos + size; if (pos + size >= newinfo->size) return 0; @@ -464,6 +477,10 @@ if (newpos >= newinfo->size) return 0; } + + if (!next_offset_ok(newinfo, newpos)) + return 0; + e = entry0 + newpos; e->counters.pcnt = pos; pos = newpos; --- linux-aws-4.15.0.orig/net/ipv6/route.c +++ linux-aws-4.15.0/net/ipv6/route.c @@ -1586,12 +1586,19 @@ * EXPIRES exceptions - e.g. pmtu-generated ones are pruned when * expired, independently from their aging, as per RFC 8201 section 4 */ - if (!(rt->rt6i_flags & RTF_EXPIRES) && - time_after_eq(now, rt->dst.lastuse + gc_args->timeout)) { - RT6_TRACE("aging clone %p\n", rt); + if (!(rt->rt6i_flags & RTF_EXPIRES)) { + if (time_after_eq(now, rt->dst.lastuse + gc_args->timeout)) { + RT6_TRACE("aging clone %p\n", rt); + rt6_remove_exception(bucket, rt6_ex); + return; + } + } else if (time_after(jiffies, rt->dst.expires)) { + RT6_TRACE("purging expired route %p\n", rt); rt6_remove_exception(bucket, rt6_ex); return; - } else if (rt->rt6i_flags & RTF_GATEWAY) { + } + + if (rt->rt6i_flags & RTF_GATEWAY) { struct neighbour *neigh; __u8 neigh_flags = 0; @@ -1606,11 +1613,8 @@ rt6_remove_exception(bucket, rt6_ex); return; } - } else if (__rt6_check_expired(rt)) { - RT6_TRACE("purging expired route %p\n", rt); - rt6_remove_exception(bucket, rt6_ex); - return; } + gc_args->more++; } --- linux-aws-4.15.0.orig/net/rds/ib_send.c +++ linux-aws-4.15.0/net/rds/ib_send.c @@ -506,7 +506,7 @@ int flow_controlled = 0; int nr_sig = 0; - BUG_ON(off % RDS_FRAG_SIZE); + BUG_ON(!conn->c_loopback && off % RDS_FRAG_SIZE); BUG_ON(hdr_off != 0 && hdr_off != sizeof(struct rds_header)); /* Do not send cong updates to IB loopback */ --- linux-aws-4.15.0.orig/net/sched/cls_api.c +++ linux-aws-4.15.0/net/sched/cls_api.c @@ -217,8 +217,12 @@ static void tcf_chain_destroy(struct tcf_chain *chain) { + struct tcf_block *block = chain->block; + list_del(&chain->list); kfree(chain); + if (list_empty(&block->chain_list)) + kfree(block); } static void tcf_chain_hold(struct tcf_chain *chain) @@ -329,49 +333,34 @@ } EXPORT_SYMBOL(tcf_block_get); -static void tcf_block_put_final(struct work_struct *work) -{ - struct tcf_block *block = container_of(work, struct tcf_block, work); - struct tcf_chain *chain, *tmp; - - rtnl_lock(); - - /* At this point, all the chains should have refcnt == 1. */ - list_for_each_entry_safe(chain, tmp, &block->chain_list, list) - tcf_chain_put(chain); - rtnl_unlock(); - kfree(block); -} - /* XXX: Standalone actions are not allowed to jump to any chain, and bound * actions should be all removed after flushing. */ void tcf_block_put_ext(struct tcf_block *block, struct Qdisc *q, struct tcf_block_ext_info *ei) { - struct tcf_chain *chain; + struct tcf_chain *chain, *tmp; if (!block) return; - /* Hold a refcnt for all chains, except 0, so that they don't disappear + /* Hold a refcnt for all chains, so that they don't disappear * while we are iterating. */ list_for_each_entry(chain, &block->chain_list, list) - if (chain->index) - tcf_chain_hold(chain); + tcf_chain_hold(chain); list_for_each_entry(chain, &block->chain_list, list) tcf_chain_flush(chain); tcf_block_offload_unbind(block, q, ei); - INIT_WORK(&block->work, tcf_block_put_final); - /* Wait for existing RCU callbacks to cool down, make sure their works - * have been queued before this. We can not flush pending works here - * because we are holding the RTNL lock. - */ - rcu_barrier(); - tcf_queue_work(&block->work); + /* At this point, all the chains should have refcnt >= 1. */ + list_for_each_entry_safe(chain, tmp, &block->chain_list, list) + tcf_chain_put(chain); + + /* Finally, put chain 0 and allow block to be freed. */ + chain = list_first_entry(&block->chain_list, struct tcf_chain, list); + tcf_chain_put(chain); } EXPORT_SYMBOL(tcf_block_put_ext); --- linux-aws-4.15.0.orig/net/sched/cls_u32.c +++ linux-aws-4.15.0/net/sched/cls_u32.c @@ -544,6 +544,7 @@ static int u32_replace_hw_knode(struct tcf_proto *tp, struct tc_u_knode *n, u32 flags) { + struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); struct tcf_block *block = tp->chain->block; struct tc_cls_u32_offload cls_u32 = {}; bool skip_sw = tc_skip_sw(flags); @@ -563,7 +564,7 @@ cls_u32.knode.sel = &n->sel; cls_u32.knode.exts = &n->exts; if (n->ht_down) - cls_u32.knode.link_handle = n->ht_down->handle; + cls_u32.knode.link_handle = ht->handle; err = tc_setup_cb_call(block, NULL, TC_SETUP_CLSU32, &cls_u32, skip_sw); if (err < 0) { @@ -840,8 +841,9 @@ static struct tc_u_knode *u32_init_knode(struct tcf_proto *tp, struct tc_u_knode *n) { - struct tc_u_knode *new; + struct tc_u_hnode *ht = rtnl_dereference(n->ht_down); struct tc_u32_sel *s = &n->sel; + struct tc_u_knode *new; new = kzalloc(sizeof(*n) + s->nkeys*sizeof(struct tc_u32_key), GFP_KERNEL); @@ -859,11 +861,11 @@ new->fshift = n->fshift; new->res = n->res; new->flags = n->flags; - RCU_INIT_POINTER(new->ht_down, n->ht_down); + RCU_INIT_POINTER(new->ht_down, ht); /* bump reference count as long as we hold pointer to structure */ - if (new->ht_down) - new->ht_down->refcnt++; + if (ht) + ht->refcnt++; #ifdef CONFIG_CLS_U32_PERF /* Statistics may be incremented by readers during update --- linux-aws-4.15.0.orig/net/sched/sch_tbf.c +++ linux-aws-4.15.0/net/sched/sch_tbf.c @@ -142,16 +142,6 @@ return len; } -/* - * Return length of individual segments of a gso packet, - * including all headers (MAC, IP, TCP/UDP) - */ -static unsigned int skb_gso_mac_seglen(const struct sk_buff *skb) -{ - unsigned int hdr_len = skb_transport_header(skb) - skb_mac_header(skb); - return hdr_len + skb_gso_transport_seglen(skb); -} - /* GSO packet is too big, segment it so that tbf can transmit * each segment in time */ --- linux-aws-4.15.0.orig/net/wireless/nl80211.c +++ linux-aws-4.15.0/net/wireless/nl80211.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -2056,20 +2057,22 @@ static int parse_txq_params(struct nlattr *tb[], struct ieee80211_txq_params *txq_params) { + u8 ac; + if (!tb[NL80211_TXQ_ATTR_AC] || !tb[NL80211_TXQ_ATTR_TXOP] || !tb[NL80211_TXQ_ATTR_CWMIN] || !tb[NL80211_TXQ_ATTR_CWMAX] || !tb[NL80211_TXQ_ATTR_AIFS]) return -EINVAL; - txq_params->ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]); + ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]); txq_params->txop = nla_get_u16(tb[NL80211_TXQ_ATTR_TXOP]); txq_params->cwmin = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMIN]); txq_params->cwmax = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMAX]); txq_params->aifs = nla_get_u8(tb[NL80211_TXQ_ATTR_AIFS]); - if (txq_params->ac >= NL80211_NUM_ACS) + if (ac >= NL80211_NUM_ACS) return -EINVAL; - + txq_params->ac = array_index_nospec(ac, NL80211_NUM_ACS); return 0; } --- linux-aws-4.15.0.orig/scripts/Makefile.build +++ linux-aws-4.15.0/scripts/Makefile.build @@ -314,12 +314,14 @@ # Built-in and composite module parts $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE $(call cmd,force_checksrc) + $(call cmd,force_check_kmsg) $(call if_changed_rule,cc_o_c) # Single-part modules are special since we need to mark them in $(MODVERDIR) $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE $(call cmd,force_checksrc) + $(call cmd,force_check_kmsg) $(call if_changed_rule,cc_o_c) @{ echo $(@:.o=.ko); echo $@; \ $(cmd_undef_syms); } > $(MODVERDIR)/$(@F:.o=.mod) @@ -567,6 +569,19 @@ targets += $(multi-used-y) $(multi-used-m) targets := $(filter-out $(PHONY), $(targets)) +# kmsg check tool +ifneq ($(KBUILD_KMSG_CHECK),0) + ifeq ($(KBUILD_KMSG_CHECK),2) + kmsg_cmd := print + quiet_cmd_force_check_kmsg = KMSG_PRINT $< + $(shell [ -d $(objtree)/man ] || mkdir -p $(objtree)/man) + else + kmsg_cmd := check + quiet_cmd_force_check_kmsg = KMSG_CHECK $< + endif + cmd_force_check_kmsg = $(KMSG_CHECK) $(kmsg_cmd) $(CC) $(c_flags) $< ; +endif + # Descending # --------------------------------------------------------------------------- --- linux-aws-4.15.0.orig/scripts/Makefile.modinst +++ linux-aws-4.15.0/scripts/Makefile.modinst @@ -23,8 +23,12 @@ mkdir -p $(2) ; \ cp $@ $(2) ; \ $(mod_strip_cmd) $(2)/$(notdir $@) ; \ - $(mod_sign_cmd) $(2)/$(notdir $@) $(patsubst %,|| true,$(KBUILD_EXTMOD)) && \ - $(mod_compress_cmd) $(2)/$(notdir $@) + if (echo "$(2)/$(notdir $@)" | egrep -q "\/drivers\/staging\/") && \ + [ -f $(srctree)/drivers/staging/signature-inclusion ] && \ + (! egrep -x "$(notdir $@)" $(srctree)/drivers/staging/signature-inclusion) ; \ + then echo Not signing "$(2)/$(notdir $@)"; \ + else $(mod_sign_cmd) $(2)/$(notdir $@) $(patsubst %,|| true,$(KBUILD_EXTMOD)) && \ + $(mod_compress_cmd) $(2)/$(notdir $@); fi # Modules built outside the kernel source tree go into extra by default INSTALL_MOD_DIR ?= extra --- linux-aws-4.15.0.orig/scripts/insert-sys-cert.c +++ linux-aws-4.15.0/scripts/insert-sys-cert.c @@ -7,7 +7,8 @@ * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * - * Usage: insert-sys-cert [-s -b -c + * Usage: insert-sys-cert [-s ] -b -c + * [-s ] -z -c */ #define _GNU_SOURCE @@ -257,6 +258,169 @@ return buf; } +static void get_payload_info(char *bzimage, int *offset, int *size) +{ + unsigned int system_offset; + unsigned char setup_sectors; + + setup_sectors = bzimage[0x1f1] + 1; + system_offset = setup_sectors * 512; + *offset = system_offset + *((int*)&bzimage[0x248]); + *size = *((int*)&bzimage[0x24c]); +} + +static void update_payload_info(char* bzimage, int new_size) +{ + int offset, size; + get_payload_info(bzimage, &offset, &size); + *((int*)&bzimage[0x24c]) = new_size; + if (new_size < size) + memset(bzimage + offset + new_size, 0, size - new_size); +} + +struct zipper { + unsigned char pattern[10]; + int length; + char *command; + char *compress; +}; + +struct zipper zippers[] = { + {{0x7F,'E','L','F'}, 4, "cat", "cat"}, + {{0x1F,0x8B}, 2, "gunzip", "gzip -n -f -9"}, + {{0xFD,'7','z','X','Z',0}, 6, "unxz", "xz"}, + {{'B','Z','h'},3, "bunzip2", "bzip2 -9"}, + {{0xFF,'L','Z','M','A',0}, 6, "unlzma", "lzma -9"}, + {{0xD3,'L','Z','O',0,'\r','\n',0x20,'\n'}, 9, "lzop -d", "lzop -9"} +}; + +static struct zipper* get_zipper(char *p) { + int i; + for (i = 0; i < sizeof(zippers)/sizeof(struct zipper); i++) { + if (memcmp(p, zippers[i].pattern, zippers[i].length) == 0) + return &zippers[i]; + } + return NULL; +} + +/* + * This only works for x86 bzImage + */ +static void extract_vmlinux(char *bzimage, int bzimage_size, + char **file, struct zipper **zipper) +{ + int r; + char src[15] = "vmlinux-XXXXXX"; + char dest[15] = "vmlinux-XXXXXX"; + char cmd[100]; + int src_fd, dest_fd; + int offset, size; + struct zipper *z; + + /* TODO: verify that bzImage is supported */ + + get_payload_info(bzimage, &offset, &size); + z = get_zipper(bzimage + offset); + if (z == NULL) { + err("Unable to determine the compression of vmlinux\n"); + return; + } + + src_fd = mkstemp(src); + if (src_fd == -1) { + perror("Could not create temp file"); + return; + } + + r = write(src_fd, bzimage + offset, size); + if (r != size) { + perror("Could not write vmlinux"); + return; + } + dest_fd = mkstemp(dest); + if (dest_fd == -1) { + perror("Could not create temp file"); + return; + } + + snprintf(cmd, sizeof(cmd), "%s <%s >%s", z->command, src, dest); + info("Executing: %s\n", cmd); + r = system(cmd); + if (r!=0) + warn("Possible errors when extracting\n"); + + r = remove(src); + if (r!=0) + perror(src); + + *file = strdup(dest); + *zipper = z; +} + +static void repack_image(char *bzimage, int bzimage_size, + char* vmlinux_file, struct zipper *z) +{ + char tmp[15] = "vmlinux-XXXXXX"; + char cmd[100]; + int fd; + struct stat st; + int new_size; + int r; + int offset, size; + + get_payload_info(bzimage, &offset, &size); + + fd = mkstemp(tmp); + if (fd == -1) { + perror("Could not create temp file"); + return; + } + snprintf(cmd, sizeof(cmd), "%s <%s >%s", + z->compress, vmlinux_file, tmp); + + info("Executing: %s\n", cmd); + r = system(cmd); + if (r!=0) + warn("Possible errors when compressing\n"); + + r = remove(vmlinux_file); + if (r!=0) + perror(vmlinux_file); + + if (fstat(fd, &st)) { + perror("Could not determine file size"); + close(fd); + + } + new_size = st.st_size; + if (new_size > size) { + err("Increase in compressed size is not supported.\n"); + err("Old size was %d, new size is %d\n", size, new_size); + exit(EXIT_FAILURE); + } + + r = read(fd, bzimage + offset, new_size); + if (r != new_size) + perror(tmp); + + r = remove(tmp); + if (r!=0) + perror(tmp); + + /* x86 specific patching of bzimage */ + update_payload_info(bzimage, new_size); + + /* TODO: update CRC */ + +} + +static void fill_random(unsigned char *p, int n) { + srand(0); + int i; + for (i = 0; i < n; i++) + p[i] = rand(); +} + static void print_sym(Elf_Ehdr *hdr, struct sym *s) { info("sym: %s\n", s->name); @@ -267,18 +431,23 @@ static void print_usage(char *e) { - printf("Usage %s [-s ] -b -c \n", e); + printf("Usage: %s [-s ] -b -c \n", e); + printf(" %s [-s ] -z -c \n", e); } int main(int argc, char **argv) { char *system_map_file = NULL; char *vmlinux_file = NULL; + char *bzimage_file = NULL; char *cert_file = NULL; int vmlinux_size; + int bzimage_size; int cert_size; Elf_Ehdr *hdr; char *cert; + char *bzimage = NULL; + struct zipper *z = NULL; FILE *system_map; unsigned long *lsize; int *used; @@ -286,7 +455,7 @@ Elf_Shdr *symtab = NULL; struct sym cert_sym, lsize_sym, used_sym; - while ((opt = getopt(argc, argv, "b:c:s:")) != -1) { + while ((opt = getopt(argc, argv, "b:z:c:s:")) != -1) { switch (opt) { case 's': system_map_file = optarg; @@ -294,6 +463,9 @@ case 'b': vmlinux_file = optarg; break; + case 'z': + bzimage_file = optarg; + break; case 'c': cert_file = optarg; break; @@ -302,7 +474,9 @@ } } - if (!vmlinux_file || !cert_file) { + if (!cert_file || + (!vmlinux_file && !bzimage_file) || + (vmlinux_file && bzimage_file)) { print_usage(argv[0]); exit(EXIT_FAILURE); } @@ -311,6 +485,16 @@ if (!cert) exit(EXIT_FAILURE); + if (bzimage_file) { + bzimage = map_file(bzimage_file, &bzimage_size); + if (!bzimage) + exit(EXIT_FAILURE); + + extract_vmlinux(bzimage, bzimage_size, &vmlinux_file, &z); + if (!vmlinux_file) + exit(EXIT_FAILURE); + } + hdr = map_file(vmlinux_file, &vmlinux_size); if (!hdr) exit(EXIT_FAILURE); @@ -386,7 +570,7 @@ } /* If the existing cert is the same, don't overwrite */ - if (cert_size == *used && + if (cert_size > 0 && cert_size == *used && strncmp(cert_sym.content, cert, cert_size) == 0) { warn("Certificate was already inserted.\n"); exit(EXIT_SUCCESS); @@ -396,9 +580,11 @@ warn("Replacing previously inserted certificate.\n"); memcpy(cert_sym.content, cert, cert_size); + if (cert_size < cert_sym.size) - memset(cert_sym.content + cert_size, - 0, cert_sym.size - cert_size); + /* This makes the reserved space incompressable */ + fill_random(cert_sym.content + cert_size, + cert_sym.size - cert_size); *lsize = *lsize + cert_size - *used; *used = cert_size; @@ -406,5 +592,15 @@ cert_sym.address); info("Used %d bytes out of %d bytes reserved.\n", *used, cert_sym.size); + + if (munmap(hdr, vmlinux_size) == -1) { + perror(vmlinux_file); + exit(EXIT_FAILURE); + } + + if (bzimage) { + repack_image(bzimage, bzimage_size, vmlinux_file, z); + } + exit(EXIT_SUCCESS); } --- linux-aws-4.15.0.orig/scripts/kconfig/lkc.h +++ linux-aws-4.15.0/scripts/kconfig/lkc.h @@ -88,7 +88,9 @@ /* confdata.c and expr.c */ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) { - assert(len != 0); + //assert(len != 0); + if (len == 0) + return; if (fwrite(str, len, count, out) != count) fprintf(stderr, "Error in writing or end of file.\n"); --- linux-aws-4.15.0.orig/scripts/kmsg-doc +++ linux-aws-4.15.0/scripts/kmsg-doc @@ -0,0 +1,478 @@ +#!/usr/bin/perl -w +# +# kmsg kernel messages check and print tool. +# +# To check the source code for missing messages the script is called +# with check, the name compiler and the compile parameters +# kmsg-doc check $(CC) $(c_flags) $< +# To create man pages for the messages the script is called with +# kmsg-doc print $(CC) $(c_flags) $< +# +# Copyright IBM Corp. 2008 +# Author(s): Martin Schwidefsky +# Michael Holzheu +# + +use Cwd; +use bigint; + +my $errors = 0; +my $warnings = 0; +my $srctree = ""; +my $objtree = ""; +my $kmsg_count = 0; + +sub remove_quotes($) +{ + my ($string) = @_; + my $inside = 0; + my $slash = 0; + my $result = ""; + + foreach my $str (split(/([\\"])/, $string)) { + if ($inside && ($str ne "\"" || $slash)) { + $result .= $str; + } + # Check for backslash before quote + if ($str eq "\"") { + if (!$slash) { + $inside = !$inside; + } + $slash = 0; + } elsif ($str eq "\\") { + $slash = !$slash; + } elsif ($str ne "") { + $slash = 0; + } + } + return $result; +} + +sub string_to_bytes($) +{ + my ($string) = @_; + my %is_escape = ('"', 0x22, '\'', 0x27, 'n', 0x0a, 'r', 0x0d, 'b', 0x08, + 't', 0x09, 'f', 0x0c, 'a', 0x07, 'v', 0x0b, '?', 0x3f); + my (@ar, $slash, $len); + + # scan string, interpret backslash escapes and write bytes to @ar + $len = 0; + foreach my $ch (split(//, $string)) { + if ($ch eq '\\') { + $slash = !$slash; + if (!$slash) { + $ar[$len] = ord('\\'); + $len++; + } + } elsif ($slash && defined $is_escape{$ch}) { + # C99 backslash escapes: \\ \" \' \n \r \b \t \f \a \v \? + $ar[$len] = $is_escape{$ch}; + $len++; + $slash = 0; + } elsif ($slash) { + # FIXME: C99 backslash escapes \nnn \xhh + die("Unknown backslash escape in message $string."); + } else { + # normal character + $ar[$len] = ord($ch); + $len++; + } + } + return @ar; +} + +sub calc_jhash($) +{ + my ($string) = @_; + my @ar; + my ($a, $b, $c, $i, $length, $len); + + @ar = string_to_bytes($string); + $length = @ar; + # add dummy elements to @ar to avoid if then else hell + push @ar, (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + $a = 0x9e3779b9; + $b = 0x9e3779b9; + $c = 0; + $i = 0; + for ($len = $length + 12; $len >= 12; $len -= 12) { + if ($len < 24) { + # add length for last round + $c += $length; + } + $a += $ar[$i] + ($ar[$i+1]<<8) + ($ar[$i+2]<<16) + ($ar[$i+3]<<24); + $b += $ar[$i+4] + ($ar[$i+5]<<8) + ($ar[$i+6]<<16) + ($ar[$i+7]<<24); + if ($len >= 24) { + $c += $ar[$i+8] + ($ar[$i+9]<<8) + ($ar[$i+10]<<16) + ($ar[$i+11]<<24); + } else { + $c += ($ar[$i+8]<<8) + ($ar[$i+9]<<16) + ($ar[$i+10]<<24); + } + $a &= 0xffffffff; $b &= 0xffffffff; $c &= 0xffffffff; + $a -= $b; $a -= $c; $a ^= ($c >> 13); $a &= 0xffffffff; + $b -= $c; $b -= $a; $b ^= ($a << 8); $b &= 0xffffffff; + $c -= $a; $c -= $b; $c ^= ($b >> 13); $c &= 0xffffffff; + $a -= $b; $a -= $c; $a ^= ($c >> 12); $a &= 0xffffffff; + $b -= $c; $b -= $a; $b ^= ($a << 16); $b &= 0xffffffff; + $c -= $a; $c -= $b; $c ^= ($b >> 5); $c &= 0xffffffff; + $a -= $b; $a -= $c; $a ^= ($c >> 3); $a &= 0xffffffff; + $b -= $c; $b -= $a; $b ^= ($a << 10); $b &= 0xffffffff; + $c -= $a; $c -= $b; $c ^= ($b >> 15); $c &= 0xffffffff; + $i += 12; + } + return $c; +} + +sub add_kmsg_desc($$$$$$) +{ + my ($component, $text, $sev, $argv, $desc, $user) = @_; + my ($hash, $tag); + + $text = remove_quotes($text); + $hash = substr(sprintf("%08x", calc_jhash($text)), 2, 6); + $tag = $component . "." . $hash; + + if ($kmsg_desc{$tag}) { + if ($text ne $kmsg_desc{$tag}->{'TEXT'}) { + warn "Duplicate message with tag $tag\n"; + warn " --- $kmsg_desc{$tag}->{'TEXT'}\n"; + warn " +++ $text\n"; + } else { + warn "Duplicate message description for \"$text\"\n"; + } + $errors++; + return; + } + $kmsg_desc{$tag}->{'TEXT'} = $text; + $kmsg_desc{$tag}->{'SEV'} = $sev; + $kmsg_desc{$tag}->{'ARGV'} = $argv; + $kmsg_desc{$tag}->{'DESC'} = $desc; + $kmsg_desc{$tag}->{'USER'} = $user; +} + +sub add_kmsg_print($$$$) +{ + my ($component, $sev, $text, $argv) = @_; + my ($hash, $tag, $count, $parm); + + $text = remove_quotes($text); + $hash = substr(sprintf("%08x", calc_jhash($text)), 2, 6); + $tag = $component . "." . $hash; + + # Pretty print severity + $sev =~ s/"0"/Emerg/; + $sev =~ s/"1"/Alert/; + $sev =~ s/"2"/Critical/; + $sev =~ s/"3"/Error/; + $sev =~ s/"4"/Warning/; + $sev =~ s/"5"/Notice/; + $sev =~ s/"6"/Informational/; + $sev =~ s/"7"/Debug/; + $kmsg_print{$kmsg_count}->{'TAG'} = $tag; + $kmsg_print{$kmsg_count}->{'TEXT'} = $text; + $kmsg_print{$kmsg_count}->{'SEV'} = $sev; + $kmsg_print{$kmsg_count}->{'ARGV'} = $argv; + $kmsg_count += 1; +} + +sub process_source_file($$) +{ + my ($component, $file) = @_; + my $state; + my ($text, $sev, $argv, $desc, $user); + + if (!open(FD, "$file")) { + return ""; + } + + $state = 0; + while () { + chomp; + # kmsg message component: #define KMSG_COMPONENT "" + if (/^#define\s+KMSG_COMPONENT\s+\"(.*)\"[^\"]*$/o) { + $component = $1; + } + if ($state == 0) { + # single line kmsg for undocumented messages, format: + # /*? Text: "" */ + if (/^\s*\/\*\?\s*Text:\s*(\".*\")\s*\*\/\s*$/o) { + add_kmsg_desc($component, $1, "", "", "", ""); + } + # kmsg message start: '/*?' + if (/^\s*\/\*\?\s*$/o) { + $state = 1; + ($text, $sev, $argv, $desc, $user) = ( "", "", "", "", "" ); + } + } elsif ($state == 1) { + # kmsg message end: ' */' + if (/^\s*\*\/\s*/o) { + add_kmsg_desc($component, $text, $sev, $argv, $desc, $user); + $state = 0; + } + # kmsg message text: ' * Text: ""' + elsif (/^\s*\*\s*Text:\s*(\".*\")\s*$/o) { + $text = $1; + } + # kmsg message severity: ' * Severity: ' + elsif (/^\s*\*\s*Severity:\s*(\S*)\s*$/o) { + $sev = $1; + } + # kmsg message parameter: ' * Parameter: ' + elsif (/^\s*\*\s*Parameter:\s*(\S*)\s*$/o) { + if (!defined($1)) { + $argv = ""; + } else { + $argv = $1; + } + $state = 2; + } + # kmsg message description start: ' * Description:' + elsif (/^\s*\*\s*Description:\s*(\S*)\s*$/o) { + if (!defined($1)) { + $desc = ""; + } else { + $desc = $1; + } + $state = 3; + } + # kmsg has unrecognizable lines + else { + warn "Warning(${file}:$.): Cannot understand $_"; + $warnings++; + $state = 0; + } + } elsif ($state == 2) { + # kmsg message end: ' */' + if (/^\s*\*\//o) { + warn "Warning(${file}:$.): Missing description, skipping message"; + $warnings++; + $state = 0; + } + # kmsg message description start: ' * Description:' + elsif (/^\s*\*\s*Description:\s*$/o) { + $desc = $1; + $state = 3; + } + # kmsg message parameter line: ' * ' + elsif (/^\s*\*(.*)$/o) { + $argv .= "\n" . $1; + } else { + warn "Warning(${file}:$.): Cannot understand $_"; + $warnings++; + $state = 0; + } + } elsif ($state == 3) { + # kmsg message end: ' */' + if (/^\s*\*\/\s*/o) { + add_kmsg_desc($component, $text, $sev, $argv, $desc, $user); + $state = 0; + } + # kmsg message description start: ' * User action:' + elsif (/^\s*\*\s*User action:\s*$/o) { + $user = $1; + $state = 4; + } + # kmsg message description line: ' * ' + elsif (/^\s*\*\s*(.*)$/o) { + $desc .= "\n" . $1; + } else { + warn "Warning(${file}:$.): Cannot understand $_"; + $warnings++; + $state = 0; + } + } elsif ($state == 4) { + # kmsg message end: ' */' + if (/^\s*\*\/\s*/o) { + add_kmsg_desc($component, $text, $sev, $argv, $desc, $user); + $state = 0; + } + # kmsg message user action line: ' * ' + elsif (/^\s*\*\s*(.*)$/o) { + $user .= "\n" . $1; + } else { + warn "Warning(${file}:$.): Cannot understand $_"; + $warnings++; + $state = 0; + } + } + } + return $component; +} + +sub process_cpp_file($$$$) +{ + my ($cc, $options, $file, $component) = @_; + + open(FD, "$cc $gcc_options|") or die ("Preprocessing failed."); + + while () { + chomp; + if (/.*__KMSG_PRINT\(\s*(\S*)\s*(\S*)\s*_FMT_(.*)_ARGS_\s*(.*)?_END_\s*\)/o) { + if ($component ne "") { + add_kmsg_print($component, $2, $3, $4); + } else { + warn "Error(${file}:$.): kmsg without component\n"; + $errors++; + } + } elsif (/.*__KMSG_DEV\(\s*(\S*)\s*(\S*)\s*_FMT_(.*)_ARGS_\s*(.*)?_END_\s*\)/o) { + if ($component ne "") { + add_kmsg_print($component, $2, "\"%s: \"" . $3, $4); + } else { + warn "Error(${file}:$.): kmsg without component\n"; + $errors++; + } + } + } +} + +sub check_messages($) +{ + my $component = "@_"; + my $failed = 0; + + for ($i = 0; $i < $kmsg_count; $i++) { + $tag = $kmsg_print{$i}->{'TAG'}; + if (!defined($kmsg_desc{$tag})) { + add_kmsg_desc($component, + "\"" . $kmsg_print{$i}->{'TEXT'} . "\"", + $kmsg_print{$i}->{'SEV'}, + $kmsg_print{$i}->{'ARGV'}, + "Please insert description here", + "What is the user supposed to do"); + $kmsg_desc{$tag}->{'CHECK'} = 1; + $failed = 1; + warn "$component: Missing description for: ". + $kmsg_print{$i}->{'TEXT'}."\n"; + $errors++; + next; + } + if ($kmsg_desc{$tag}->{'SEV'} ne "" && + $kmsg_desc{$tag}->{'SEV'} ne $kmsg_print{$i}->{'SEV'}) { + warn "Message severity mismatch for \"$kmsg_print{$i}->{'TEXT'}\"\n"; + warn " --- $kmsg_desc{$tag}->{'SEV'}\n"; + warn " +++ $kmsg_print{$i}->{'SEV'}\n"; + } + } + return $failed; +} + +sub print_templates() +{ + print "Templates for missing messages:\n"; + foreach $tag ( sort { $kmsg_desc{$a} <=> $kmsg_desc{$b} } keys %kmsg_desc ) { + if (!defined($kmsg_desc{$tag}->{'CHECK'})) { + next; + } + print "/*?\n"; + print " * Text: \"$kmsg_desc{$tag}->{'TEXT'}\"\n"; + print " * Severity: $kmsg_desc{$tag}->{'SEV'}\n"; + $argv = $kmsg_desc{$tag}->{'ARGV'}; + if ($argv ne "") { + print " * Parameter:\n"; + @parms = split(/\s*,\s*/,$kmsg_desc{$tag}->{'ARGV'}); + $count = 0; + foreach $parm (@parms) { + $count += 1; + if (!($parm eq "")) { + print " * \@$count: $parm\n"; + } + } + } + print " * Description:\n"; + print " * $kmsg_desc{$tag}->{'DESC'}\n"; + print " * User action:\n"; + print " * $kmsg_desc{$tag}->{'USER'}\n"; + print " */\n\n"; + } +} + +sub write_man_pages() +{ + my ($i, $file); + + for ($i = 0; $i < $kmsg_count; $i++) { + $tag = $kmsg_print{$i}->{'TAG'}; + if (!defined($kmsg_desc{$tag}) || + defined($kmsg_desc{$tag}->{'CHECK'}) || + $kmsg_desc{$tag}->{'DESC'} eq "") { + next; + } + $file = $objtree . "man/" . $tag . ".9"; + if (!open(WR, ">$file")) { + warn "Error: Cannot open file $file\n"; + $errors++; + return; + } + print WR ".TH \"$tag\" 9 \"Linux Messages\" LINUX\n"; + print WR ".SH Message\n"; + print WR $tag . ": " . $kmsg_desc{$tag}->{'TEXT'} . "\n"; + print WR ".SH Severity\n"; + print WR "$kmsg_desc{$tag}->{'SEV'}\n"; + $argv = $kmsg_desc{$tag}->{'ARGV'}; + if ($argv ne "") { + print WR ".SH Parameters\n"; + @parms = split(/\s*\n\s*/,$kmsg_desc{$tag}->{'ARGV'}); + foreach $parm (@parms) { + $parm =~ s/^\s*(.*)\s*$/$1/; + if (!($parm eq "")) { + print WR "$parm\n\n"; + } + } + } + print WR ".SH Description"; + print WR "$kmsg_desc{$tag}->{'DESC'}\n"; + $user = $kmsg_desc{$tag}->{'USER'}; + if ($user ne "") { + print WR ".SH User action"; + print WR "$user\n"; + } + } +} + +if (defined($ENV{'srctree'})) { + $srctree = "$ENV{'srctree'}" . "/"; +} else { + $srctree = getcwd; +} + +if (defined($ENV{'objtree'})) { + $objtree = "$ENV{'objtree'}" . "/"; +} else { + $objtree = getcwd; +} + +if (defined($ENV{'SRCARCH'})) { + $srcarch = "$ENV{'SRCARCH'}" . "/"; +} else { + print "kmsg-doc called without a valid \$SRCARCH\n"; + exit 1; +} + +$option = shift; + +$cc = shift; +$gcc_options = "-E -D __KMSG_CHECKER "; +foreach $tmp (@ARGV) { + $tmp =~ s/\(/\\\(/; + $tmp =~ s/\)/\\\)/; + $gcc_options .= " $tmp"; + $filename = $tmp; +} + +$component = process_source_file("", $filename); +if ($component ne "") { + process_source_file($component, $srctree . "Documentation/kmsg/" . + $srcarch . $component); + process_source_file($component, $srctree . "Documentation/kmsg/" . + $component); +} + +process_cpp_file($cc, $gcc_options, $filename, $component); +if ($option eq "check") { + if (check_messages($component)) { + print_templates(); + } +} elsif ($option eq "print") { + write_man_pages(); +} + +exit($errors); --- linux-aws-4.15.0.orig/scripts/mod/modpost.c +++ linux-aws-4.15.0/scripts/mod/modpost.c @@ -2165,6 +2165,14 @@ buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n"); } +/* Cannot check for assembler */ +static void add_retpoline(struct buffer *b) +{ + buf_printf(b, "\n#ifdef RETPOLINE\n"); + buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n"); + buf_printf(b, "#endif\n"); +} + static void add_staging_flag(struct buffer *b, const char *name) { static const char *staging_dir = "drivers/staging"; @@ -2506,6 +2514,7 @@ err |= check_modname_len(mod); add_header(&buf, mod); add_intree_flag(&buf, !external_module); + add_retpoline(&buf); add_staging_flag(&buf, mod->name); err |= add_versions(&buf, mod); add_depends(&buf, mod, modules); --- linux-aws-4.15.0.orig/scripts/package/Makefile +++ linux-aws-4.15.0/scripts/package/Makefile @@ -94,6 +94,19 @@ clean-dirs += $(objtree)/debian/ +# snap-pkg +# --------------------------------------------------------------------------- +snap-pkg: FORCE + rm -rf $(objtree)/snap + mkdir $(objtree)/snap + sed "s@KERNELRELEASE@$(KERNELRELEASE)@; \ + s@SRCTREE@$(shell realpath $(srctree))@" \ + $(srctree)/scripts/package/snapcraft.template > \ + $(objtree)/snap/snapcraft.yaml + cd $(objtree)/snap && \ + snapcraft --target-arch=$(UTS_MACHINE) + +clean-dirs += $(objtree)/snap/ # tarball targets # --------------------------------------------------------------------------- --- linux-aws-4.15.0.orig/scripts/package/snapcraft.template +++ linux-aws-4.15.0/scripts/package/snapcraft.template @@ -0,0 +1,14 @@ +name: kernel +version: KERNELRELEASE +summary: Linux kernel +description: The upstream Linux kernel +grade: stable +confinement: strict +type: kernel + +parts: + kernel: + plugin: kernel + source: SRCTREE + source-type: git + kconfigfile: SRCTREE/.config --- linux-aws-4.15.0.orig/security/Kconfig +++ linux-aws-4.15.0/security/Kconfig @@ -18,6 +18,15 @@ If you are unsure how to answer this question, answer N. +config SECURITY_PERF_EVENTS_RESTRICT + bool "Restrict unprivileged use of performance events" + depends on PERF_EVENTS + help + If you say Y here, the kernel.perf_event_paranoid sysctl + will be set to 3 by default, and no unprivileged use of the + perf_event_open syscall will be permitted unless it is + changed. + config SECURITY bool "Enable different security models" depends on SYSFS @@ -216,6 +225,36 @@ If you wish for all usermode helper programs to be disabled, specify an empty string here (i.e. ""). +config LOCK_DOWN_KERNEL + bool "Allow the kernel to be 'locked down'" + help + Allow the kernel to be locked down under certain circumstances, for + instance if UEFI secure boot is enabled. Locking down the kernel + turns off various features that might otherwise allow access to the + kernel image (eg. setting MSR registers). + +config ALLOW_LOCKDOWN_LIFT_BY_SYSRQ + bool "Allow the kernel lockdown to be lifted by SysRq" + depends on LOCK_DOWN_KERNEL && MAGIC_SYSRQ + help + Allow the lockdown on a kernel to be lifted, by pressing a SysRq key + combination on a wired keyboard. + +config LOCK_DOWN_IN_EFI_SECURE_BOOT + bool "Lock down the kernel in EFI Secure Boot mode" + default n + select LOCK_DOWN_KERNEL + depends on EFI + help + UEFI Secure Boot provides a mechanism for ensuring that the firmware + will only load signed bootloaders and kernels. Secure boot mode may + be determined from EFI variables provided by the system firmware if + not indicated by the boot parameters. + + Enabling this option turns on results in kernel lockdown being + triggered if EFI Secure Boot is set. + + source security/selinux/Kconfig source security/smack/Kconfig source security/tomoyo/Kconfig --- linux-aws-4.15.0.orig/security/Makefile +++ linux-aws-4.15.0/security/Makefile @@ -30,3 +30,6 @@ # Object integrity file lists subdir-$(CONFIG_INTEGRITY) += integrity obj-$(CONFIG_INTEGRITY) += integrity/ + +# Allow the kernel to be locked down +obj-$(CONFIG_LOCK_DOWN_KERNEL) += lock_down.o --- linux-aws-4.15.0.orig/security/apparmor/Makefile +++ linux-aws-4.15.0/security/apparmor/Makefile @@ -5,11 +5,45 @@ apparmor-y := apparmorfs.o audit.o capability.o context.o ipc.o lib.o match.o \ path.o domain.o policy.o policy_unpack.o procattr.o lsm.o \ - resource.o secid.o file.o policy_ns.o label.o mount.o + resource.o secid.o file.o policy_ns.o label.o mount.o net.o \ + af_unix.o apparmor-$(CONFIG_SECURITY_APPARMOR_HASH) += crypto.o -clean-files := capability_names.h rlim_names.h +clean-files := capability_names.h rlim_names.h net_names.h +# Build a lower case string table of address family names +# Transform lines from +# #define AF_LOCAL 1 /* POSIX name for AF_UNIX */ +# #define AF_INET 2 /* Internet IP Protocol */ +# to +# [1] = "local", +# [2] = "inet", +# +# and build the securityfs entries for the mapping. +# Transforms lines from +# #define AF_INET 2 /* Internet IP Protocol */ +# to +# #define AA_SFS_AF_MASK "local inet" +quiet_cmd_make-af = GEN $@ +cmd_make-af = echo "static const char *address_family_names[] = {" > $@ ;\ + sed $< >>$@ -r -n -e "/AF_MAX/d" -e "/AF_LOCAL/d" -e "/AF_ROUTE/d" -e \ + 's/^\#define[ \t]+AF_([A-Z0-9_]+)[ \t]+([0-9]+)(.*)/[\2] = "\L\1",/p';\ + echo "};" >> $@ ;\ + printf '%s' '\#define AA_SFS_AF_MASK "' >> $@ ;\ + sed -r -n -e "/AF_MAX/d" -e "/AF_LOCAL/d" -e "/AF_ROUTE/d" -e \ + 's/^\#define[ \t]+AF_([A-Z0-9_]+)[ \t]+([0-9]+)(.*)/\L\1/p'\ + $< | tr '\n' ' ' | sed -e 's/ $$/"\n/' >> $@ + +# Build a lower case string table of sock type names +# Transform lines from +# SOCK_STREAM = 1, +# to +# [1] = "stream", +quiet_cmd_make-sock = GEN $@ +cmd_make-sock = echo "static const char *sock_type_names[] = {" >> $@ ;\ + sed $^ >>$@ -r -n \ + -e 's/^\tSOCK_([A-Z0-9_]+)[\t]+=[ \t]+([0-9]+)(.*)/[\2] = "\L\1",/p';\ + echo "};" >> $@ # Build a lower case string table of capability names # Transforms lines from @@ -62,6 +96,7 @@ tr '\n' ' ' | sed -e 's/ $$/"\n/' >> $@ $(obj)/capability.o : $(obj)/capability_names.h +$(obj)/net.o : $(obj)/net_names.h $(obj)/resource.o : $(obj)/rlim_names.h $(obj)/capability_names.h : $(srctree)/include/uapi/linux/capability.h \ $(src)/Makefile @@ -69,3 +104,8 @@ $(obj)/rlim_names.h : $(srctree)/include/uapi/asm-generic/resource.h \ $(src)/Makefile $(call cmd,make-rlim) +$(obj)/net_names.h : $(srctree)/include/linux/socket.h \ + $(srctree)/include/linux/net.h \ + $(src)/Makefile + $(call cmd,make-af) + $(call cmd,make-sock) --- linux-aws-4.15.0.orig/security/apparmor/af_unix.c +++ linux-aws-4.15.0/security/apparmor/af_unix.c @@ -0,0 +1,651 @@ +/* + * AppArmor security module + * + * This file contains AppArmor af_unix fine grained mediation + * + * Copyright 2014 Canonical Ltd. + * + * 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, version 2 of the + * License. + */ + +#include + +#include "include/af_unix.h" +#include "include/apparmor.h" +#include "include/context.h" +#include "include/file.h" +#include "include/label.h" +#include "include/path.h" +#include "include/policy.h" + +static inline struct sock *aa_sock(struct unix_sock *u) +{ + return &u->sk; +} + +static inline int unix_fs_perm(const char *op, u32 mask, struct aa_label *label, + struct unix_sock *u, int flags) +{ + AA_BUG(!label); + AA_BUG(!u); + AA_BUG(!UNIX_FS(aa_sock(u))); + + if (unconfined(label) || !LABEL_MEDIATES(label, AA_CLASS_FILE)) + return 0; + + mask &= NET_FS_PERMS; + if (!u->path.dentry) { + struct path_cond cond = { }; + struct aa_perms perms = { }; + struct aa_profile *profile; + + /* socket path has been cleared because it is being shutdown + * can only fall back to original sun_path request + */ + struct aa_sk_ctx *ctx = SK_CTX(&u->sk); + if (ctx->path.dentry) + return aa_path_perm(op, label, &ctx->path, flags, mask, + &cond); + return fn_for_each_confined(label, profile, + ((flags | profile->path_flags) & PATH_MEDIATE_DELETED) ? + __aa_path_perm(op, profile, + u->addr->name->sun_path, mask, + &cond, flags, &perms) : + aa_audit_file(profile, &nullperms, op, mask, + u->addr->name->sun_path, NULL, + NULL, cond.uid, + "Failed name lookup - " + "deleted entry", -EACCES)); + } else { + /* the sunpath may not be valid for this ns so use the path */ + struct path_cond cond = { u->path.dentry->d_inode->i_uid, + u->path.dentry->d_inode->i_mode + }; + + return aa_path_perm(op, label, &u->path, flags, mask, &cond); + } + + return 0; +} + +/* passing in state returned by PROFILE_MEDIATES_AF */ +static unsigned int match_to_prot(struct aa_profile *profile, + unsigned int state, int type, int protocol, + const char **info) +{ + __be16 buffer[2]; + buffer[0] = cpu_to_be16(type); + buffer[1] = cpu_to_be16(protocol); + state = aa_dfa_match_len(profile->policy.dfa, state, (char *) &buffer, + 4); + if (!state) + *info = "failed type and protocol match"; + return state; +} + +static unsigned int match_addr(struct aa_profile *profile, unsigned int state, + struct sockaddr_un *addr, int addrlen) +{ + if (addr) + /* include leading \0 */ + state = aa_dfa_match_len(profile->policy.dfa, state, + addr->sun_path, + unix_addr_len(addrlen)); + else + /* anonymous end point */ + state = aa_dfa_match_len(profile->policy.dfa, state, "\x01", + 1); + /* todo change to out of band */ + state = aa_dfa_null_transition(profile->policy.dfa, state); + return state; +} + +static unsigned int match_to_local(struct aa_profile *profile, + unsigned int state, int type, int protocol, + struct sockaddr_un *addr, int addrlen, + const char **info) +{ + state = match_to_prot(profile, state, type, protocol, info); + if (state) { + state = match_addr(profile, state, addr, addrlen); + if (state) { + /* todo: local label matching */ + state = aa_dfa_null_transition(profile->policy.dfa, + state); + if (!state) + *info = "failed local label match"; + } else + *info = "failed local address match"; + } + + return state; +} + +static unsigned int match_to_sk(struct aa_profile *profile, + unsigned int state, struct unix_sock *u, + const char **info) +{ + struct sockaddr_un *addr = NULL; + int addrlen = 0; + + if (u->addr) { + addr = u->addr->name; + addrlen = u->addr->len; + } + + return match_to_local(profile, state, u->sk.sk_type, u->sk.sk_protocol, + addr, addrlen, info); +} + +#define CMD_ADDR 1 +#define CMD_LISTEN 2 +#define CMD_OPT 4 + +static inline unsigned int match_to_cmd(struct aa_profile *profile, + unsigned int state, struct unix_sock *u, + char cmd, const char **info) +{ + state = match_to_sk(profile, state, u, info); + if (state) { + state = aa_dfa_match_len(profile->policy.dfa, state, &cmd, 1); + if (!state) + *info = "failed cmd selection match"; + } + + return state; +} + +static inline unsigned int match_to_peer(struct aa_profile *profile, + unsigned int state, + struct unix_sock *u, + struct sockaddr_un *peer_addr, + int peer_addrlen, + const char **info) +{ + state = match_to_cmd(profile, state, u, CMD_ADDR, info); + if (state) { + state = match_addr(profile, state, peer_addr, peer_addrlen); + if (!state) + *info = "failed peer address match"; + } + return state; +} + +static int do_perms(struct aa_profile *profile, unsigned int state, u32 request, + struct common_audit_data *sa) +{ + struct aa_perms perms; + + AA_BUG(!profile); + + aa_compute_perms(profile->policy.dfa, state, &perms); + aa_apply_modes_to_perms(profile, &perms); + return aa_check_perms(profile, &perms, request, sa, + audit_net_cb); +} + +static int match_label(struct aa_profile *profile, struct aa_profile *peer, + unsigned int state, u32 request, + struct common_audit_data *sa) +{ + AA_BUG(!profile); + AA_BUG(!peer); + + aad(sa)->peer = &peer->label; + + if (state) { + state = aa_dfa_match(profile->policy.dfa, state, + peer->base.hname); + if (!state) + aad(sa)->info = "failed peer label match"; + } + return do_perms(profile, state, request, sa); +} + + +/* unix sock creation comes before we know if the socket will be an fs + * socket + * v6 - semantics are handled by mapping in profile load + * v7 - semantics require sock create for tasks creating an fs socket. + */ +static int profile_create_perm(struct aa_profile *profile, int family, + int type, int protocol) +{ + unsigned int state; + DEFINE_AUDIT_NET(sa, OP_CREATE, NULL, family, type, protocol); + + AA_BUG(!profile); + AA_BUG(profile_unconfined(profile)); + + if ((state = PROFILE_MEDIATES_AF(profile, AF_UNIX))) { + state = match_to_prot(profile, state, type, protocol, + &aad(&sa)->info); + return do_perms(profile, state, AA_MAY_CREATE, &sa); + } + + return aa_profile_af_perm(profile, &sa, AA_MAY_CREATE, family, type); +} + +int aa_unix_create_perm(struct aa_label *label, int family, int type, + int protocol) +{ + struct aa_profile *profile; + + if (unconfined(label)) + return 0; + + return fn_for_each_confined(label, profile, + profile_create_perm(profile, family, type, protocol)); +} + + +static inline int profile_sk_perm(struct aa_profile *profile, const char *op, + u32 request, struct sock *sk) +{ + unsigned int state; + DEFINE_AUDIT_SK(sa, op, sk); + + AA_BUG(!profile); + AA_BUG(!sk); + AA_BUG(UNIX_FS(sk)); + AA_BUG(profile_unconfined(profile)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + state = match_to_sk(profile, state, unix_sk(sk), + &aad(&sa)->info); + return do_perms(profile, state, request, &sa); + } + + return aa_profile_af_sk_perm(profile, &sa, request, sk); +} + +int aa_unix_label_sk_perm(struct aa_label *label, const char *op, u32 request, + struct sock *sk) +{ + struct aa_profile *profile; + + return fn_for_each_confined(label, profile, + profile_sk_perm(profile, op, request, sk)); +} + +static int unix_label_sock_perm(struct aa_label *label, const char *op, u32 request, + struct socket *sock) +{ + if (unconfined(label)) + return 0; + if (UNIX_FS(sock->sk)) + return unix_fs_perm(op, request, label, unix_sk(sock->sk), 0); + + return aa_unix_label_sk_perm(label, op, request, sock->sk); +} + +/* revaliation, get/set attr */ +int aa_unix_sock_perm(const char *op, u32 request, struct socket *sock) +{ + struct aa_label *label; + int error; + + label = begin_current_label_crit_section(); + error = unix_label_sock_perm(label, op, request, sock); + end_current_label_crit_section(label); + + return error; +} + +static int profile_bind_perm(struct aa_profile *profile, struct sock *sk, + struct sockaddr *addr, int addrlen) +{ + unsigned int state; + DEFINE_AUDIT_SK(sa, OP_BIND, sk); + + AA_BUG(!profile); + AA_BUG(!sk); + AA_BUG(addr->sa_family != AF_UNIX); + AA_BUG(profile_unconfined(profile)); + AA_BUG(unix_addr_fs(addr, addrlen)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + /* bind for abstract socket */ + aad(&sa)->net.addr = unix_addr(addr); + aad(&sa)->net.addrlen = addrlen; + + state = match_to_local(profile, state, + sk->sk_type, sk->sk_protocol, + unix_addr(addr), addrlen, + &aad(&sa)->info); + return do_perms(profile, state, AA_MAY_BIND, &sa); + } + + return aa_profile_af_sk_perm(profile, &sa, AA_MAY_BIND, sk); +} + +int aa_unix_bind_perm(struct socket *sock, struct sockaddr *address, + int addrlen) +{ + struct aa_profile *profile; + struct aa_label *label; + int error = 0; + + label = begin_current_label_crit_section(); + /* fs bind is handled by mknod */ + if (!(unconfined(label) || unix_addr_fs(address, addrlen))) + error = fn_for_each_confined(label, profile, + profile_bind_perm(profile, sock->sk, address, + addrlen)); + end_current_label_crit_section(label); + + return error; +} + +int aa_unix_connect_perm(struct socket *sock, struct sockaddr *address, + int addrlen) +{ + /* unix connections are covered by the + * - unix_stream_connect (stream) and unix_may_send hooks (dgram) + * - fs connect is handled by open + */ + return 0; +} + +static int profile_listen_perm(struct aa_profile *profile, struct sock *sk, + int backlog) +{ + unsigned int state; + DEFINE_AUDIT_SK(sa, OP_LISTEN, sk); + + AA_BUG(!profile); + AA_BUG(!sk); + AA_BUG(UNIX_FS(sk)); + AA_BUG(profile_unconfined(profile)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + __be16 b = cpu_to_be16(backlog); + + state = match_to_cmd(profile, state, unix_sk(sk), CMD_LISTEN, + &aad(&sa)->info); + if (state) { + state = aa_dfa_match_len(profile->policy.dfa, state, + (char *) &b, 2); + if (!state) + aad(&sa)->info = "failed listen backlog match"; + } + return do_perms(profile, state, AA_MAY_LISTEN, &sa); + } + + return aa_profile_af_sk_perm(profile, &sa, AA_MAY_LISTEN, sk); +} + +int aa_unix_listen_perm(struct socket *sock, int backlog) +{ + struct aa_profile *profile; + struct aa_label *label; + int error = 0; + + label = begin_current_label_crit_section(); + if (!(unconfined(label) || UNIX_FS(sock->sk))) + error = fn_for_each_confined(label, profile, + profile_listen_perm(profile, sock->sk, + backlog)); + end_current_label_crit_section(label); + + return error; +} + + +static inline int profile_accept_perm(struct aa_profile *profile, + struct sock *sk, + struct sock *newsk) +{ + unsigned int state; + DEFINE_AUDIT_SK(sa, OP_ACCEPT, sk); + + AA_BUG(!profile); + AA_BUG(!sk); + AA_BUG(UNIX_FS(sk)); + AA_BUG(profile_unconfined(profile)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + state = match_to_sk(profile, state, unix_sk(sk), + &aad(&sa)->info); + return do_perms(profile, state, AA_MAY_ACCEPT, &sa); + } + + return aa_profile_af_sk_perm(profile, &sa, AA_MAY_ACCEPT, sk); +} + +/* ability of sock to connect, not peer address binding */ +int aa_unix_accept_perm(struct socket *sock, struct socket *newsock) +{ + struct aa_profile *profile; + struct aa_label *label; + int error = 0; + + label = begin_current_label_crit_section(); + if (!(unconfined(label) || UNIX_FS(sock->sk))) + error = fn_for_each_confined(label, profile, + profile_accept_perm(profile, sock->sk, + newsock->sk)); + end_current_label_crit_section(label); + + return error; +} + + +/* dgram handled by unix_may_sendmsg, right to send on stream done at connect + * could do per msg unix_stream here + */ +/* sendmsg, recvmsg */ +int aa_unix_msg_perm(const char *op, u32 request, struct socket *sock, + struct msghdr *msg, int size) +{ + return 0; +} + + +static int profile_opt_perm(struct aa_profile *profile, const char *op, u32 request, + struct sock *sk, int level, int optname) +{ + unsigned int state; + DEFINE_AUDIT_SK(sa, op, sk); + + AA_BUG(!profile); + AA_BUG(!sk); + AA_BUG(UNIX_FS(sk)); + AA_BUG(profile_unconfined(profile)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + __be16 b = cpu_to_be16(optname); + + state = match_to_cmd(profile, state, unix_sk(sk), CMD_OPT, + &aad(&sa)->info); + if (state) { + state = aa_dfa_match_len(profile->policy.dfa, state, + (char *) &b, 2); + if (!state) + aad(&sa)->info = "failed sockopt match"; + } + return do_perms(profile, state, request, &sa); + } + + return aa_profile_af_sk_perm(profile, &sa, request, sk); +} + +int aa_unix_opt_perm(const char *op, u32 request, struct socket *sock, int level, + int optname) +{ + struct aa_profile *profile; + struct aa_label *label; + int error = 0; + + label = begin_current_label_crit_section(); + if (!(unconfined(label) || UNIX_FS(sock->sk))) + error = fn_for_each_confined(label, profile, + profile_opt_perm(profile, op, request, + sock->sk, level, optname)); + end_current_label_crit_section(label); + + return error; +} + +/* null peer_label is allowed, in which case the peer_sk label is used */ +static int profile_peer_perm(struct aa_profile *profile, const char *op, u32 request, + struct sock *sk, struct sock *peer_sk, + struct aa_label *peer_label, + struct common_audit_data *sa) +{ + unsigned int state; + + AA_BUG(!profile); + AA_BUG(profile_unconfined(profile)); + AA_BUG(!sk); + AA_BUG(!peer_sk); + AA_BUG(UNIX_FS(peer_sk)); + + state = PROFILE_MEDIATES_AF(profile, AF_UNIX); + if (state) { + struct aa_sk_ctx *peer_ctx = SK_CTX(peer_sk); + struct aa_profile *peerp; + struct sockaddr_un *addr = NULL; + int len = 0; + if (unix_sk(peer_sk)->addr) { + addr = unix_sk(peer_sk)->addr->name; + len = unix_sk(peer_sk)->addr->len; + } + state = match_to_peer(profile, state, unix_sk(sk), + addr, len, &aad(sa)->info); + if (!peer_label) + peer_label = peer_ctx->label; + return fn_for_each_in_ns(peer_label, peerp, + match_label(profile, peerp, state, request, + sa)); + } + + return aa_profile_af_sk_perm(profile, sa, request, sk); +} + +/** + * + * Requires: lock held on both @sk and @peer_sk + */ +int aa_unix_peer_perm(struct aa_label *label, const char *op, u32 request, + struct sock *sk, struct sock *peer_sk, + struct aa_label *peer_label) +{ + struct unix_sock *peeru = unix_sk(peer_sk); + struct unix_sock *u = unix_sk(sk); + + AA_BUG(!label); + AA_BUG(!sk); + AA_BUG(!peer_sk); + + if (UNIX_FS(aa_sock(peeru))) + return unix_fs_perm(op, request, label, peeru, 0); + else if (UNIX_FS(aa_sock(u))) + return unix_fs_perm(op, request, label, u, 0); + else { + struct aa_profile *profile; + DEFINE_AUDIT_SK(sa, op, sk); + aad(&sa)->net.peer_sk = peer_sk; + + /* TODO: ns!!! */ + if (!net_eq(sock_net(sk), sock_net(peer_sk))) { + ; + } + + if (unconfined(label)) + return 0; + + return fn_for_each_confined(label, profile, + profile_peer_perm(profile, op, request, sk, + peer_sk, peer_label, &sa)); + } +} + + +/* from net/unix/af_unix.c */ +static void unix_state_double_lock(struct sock *sk1, struct sock *sk2) +{ + if (unlikely(sk1 == sk2) || !sk2) { + unix_state_lock(sk1); + return; + } + if (sk1 < sk2) { + unix_state_lock(sk1); + unix_state_lock_nested(sk2); + } else { + unix_state_lock(sk2); + unix_state_lock_nested(sk1); + } +} + +static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) +{ + if (unlikely(sk1 == sk2) || !sk2) { + unix_state_unlock(sk1); + return; + } + unix_state_unlock(sk1); + unix_state_unlock(sk2); +} + +int aa_unix_file_perm(struct aa_label *label, const char *op, u32 request, + struct socket *sock) +{ + struct sock *peer_sk = NULL; + u32 sk_req = request & ~NET_PEER_MASK; + int error = 0; + + AA_BUG(!label); + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(sock->sk->sk_family != AF_UNIX); + + /* TODO: update sock label with new task label */ + unix_state_lock(sock->sk); + peer_sk = unix_peer(sock->sk); + if (peer_sk) + sock_hold(peer_sk); + if (!unix_connected(sock) && sk_req) { + error = unix_label_sock_perm(label, op, sk_req, sock); + if (!error) { + // update label + } + } + unix_state_unlock(sock->sk); + if (!peer_sk) + return error; + + unix_state_double_lock(sock->sk, peer_sk); + if (UNIX_FS(sock->sk)) { + error = unix_fs_perm(op, request, label, unix_sk(sock->sk), + PATH_SOCK_COND); + } else if (UNIX_FS(peer_sk)) { + error = unix_fs_perm(op, request, label, unix_sk(peer_sk), + PATH_SOCK_COND); + } else { + struct aa_sk_ctx *pctx = SK_CTX(peer_sk); + if (sk_req) + error = aa_unix_label_sk_perm(label, op, sk_req, + sock->sk); + last_error(error, + xcheck(aa_unix_peer_perm(label, op, + MAY_READ | MAY_WRITE, + sock->sk, peer_sk, NULL), + aa_unix_peer_perm(pctx->label, op, + MAY_READ | MAY_WRITE, + peer_sk, sock->sk, label))); + } + + unix_state_double_unlock(sock->sk, peer_sk); + sock_put(peer_sk); + + return error; +} --- linux-aws-4.15.0.orig/security/apparmor/apparmorfs.c +++ linux-aws-4.15.0/security/apparmor/apparmorfs.c @@ -1189,9 +1189,7 @@ static int seq_ns_name_show(struct seq_file *seq, void *v) { struct aa_label *label = begin_current_label_crit_section(); - - seq_printf(seq, "%s\n", aa_ns_name(labels_ns(label), - labels_ns(label), true)); + seq_printf(seq, "%s\n", labels_ns(label)->base.name); end_current_label_crit_section(label); return 0; @@ -2187,6 +2185,11 @@ { } }; +static struct aa_sfs_entry aa_sfs_entry_dbus[] = { + AA_SFS_FILE_STRING("mask", "acquire send receive"), + { } +}; + static struct aa_sfs_entry aa_sfs_entry_query_label[] = { AA_SFS_FILE_STRING("perms", "allow deny audit quiet"), AA_SFS_FILE_BOOLEAN("data", 1), @@ -2202,6 +2205,7 @@ AA_SFS_DIR("policy", aa_sfs_entry_policy), AA_SFS_DIR("domain", aa_sfs_entry_domain), AA_SFS_DIR("file", aa_sfs_entry_file), + AA_SFS_DIR("network", aa_sfs_entry_network), AA_SFS_DIR("mount", aa_sfs_entry_mount), AA_SFS_DIR("namespaces", aa_sfs_entry_ns), AA_SFS_FILE_U64("capability", VFS_CAP_FLAGS_MASK), @@ -2209,6 +2213,7 @@ AA_SFS_DIR("caps", aa_sfs_entry_caps), AA_SFS_DIR("ptrace", aa_sfs_entry_ptrace), AA_SFS_DIR("signal", aa_sfs_entry_signal), + AA_SFS_DIR("dbus", aa_sfs_entry_dbus), AA_SFS_DIR("query", aa_sfs_entry_query), { } }; --- linux-aws-4.15.0.orig/security/apparmor/crypto.c +++ linux-aws-4.15.0/security/apparmor/crypto.c @@ -29,6 +29,25 @@ return apparmor_hash_size; } +void aa_snprint_hashstr(char *out, unsigned char *hash, unsigned int hsize) +{ + unsigned int i; + + for (i = 0; i < hsize; i++) + sprintf(out + i*2, "%.2x", hash[i]); + out[hsize*2] = 0; +} + +char *aa_asprint_hashstr(unsigned char *hash, unsigned int hsize, gfp_t gfp) +{ + char *buffer = kmalloc(hsize*2 + 1, gfp); + if (!buffer) + return NULL; + aa_snprint_hashstr(buffer, hash, hsize); + + return buffer; +} + char *aa_calc_hash(void *data, size_t len) { SHASH_DESC_ON_STACK(desc, apparmor_tfm); --- linux-aws-4.15.0.orig/security/apparmor/file.c +++ linux-aws-4.15.0/security/apparmor/file.c @@ -16,11 +16,13 @@ #include #include +#include "include/af_unix.h" #include "include/apparmor.h" #include "include/audit.h" #include "include/context.h" #include "include/file.h" #include "include/match.h" +#include "include/net.h" #include "include/path.h" #include "include/policy.h" #include "include/label.h" @@ -282,7 +284,8 @@ { int e = 0; - if (profile_unconfined(profile)) + if (profile_unconfined(profile) || + ((flags & PATH_SOCK_COND) && !PROFILE_MEDIATES_AF(profile, AF_UNIX))) return 0; aa_str_perms(profile->file.dfa, profile->file.start, name, cond, perms); if (request & ~perms->allow) @@ -560,6 +563,32 @@ return error; } +static int __file_sock_perm(const char *op, struct aa_label *label, + struct aa_label *flabel, struct file *file, + u32 request, u32 denied) +{ + struct socket *sock = (struct socket *) file->private_data; + int error; + + AA_BUG(!sock); + + /* revalidation due to label out of date. No revocation at this time */ + if (!denied && aa_label_is_subset(flabel, label)) + return 0; + + /* TODO: improve to skip profiles cached in flabel */ + error = aa_sock_file_perm(label, op, request, sock); + if (denied) { + /* TODO: improve to skip profiles checked above */ + /* check every profile in file label to is cached */ + last_error(error, aa_sock_file_perm(flabel, op, request, sock)); + } + if (!error) + update_file_ctx(file_ctx(file), label, request); + + return error; +} + /** * aa_file_perm - do permission revalidation check & audit for @file * @op: operation being checked @@ -604,6 +633,9 @@ error = __file_path_perm(op, label, flabel, file, request, denied); + else if (S_ISSOCK(file_inode(file)->i_mode)) + error = __file_sock_perm(op, label, flabel, file, request, + denied); done: rcu_read_unlock(); --- linux-aws-4.15.0.orig/security/apparmor/include/af_unix.h +++ linux-aws-4.15.0/security/apparmor/include/af_unix.h @@ -0,0 +1,114 @@ +/* + * AppArmor security module + * + * This file contains AppArmor af_unix fine grained mediation + * + * Copyright 2014 Canonical Ltd. + * + * 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, version 2 of the + * License. + */ +#ifndef __AA_AF_UNIX_H + +#include + +#include "label.h" +//#include "include/net.h" + +#define unix_addr_len(L) ((L) - sizeof(sa_family_t)) +#define unix_abstract_name_len(L) (unix_addr_len(L) - 1) +#define unix_abstract_len(U) (unix_abstract_name_len((U)->addr->len)) +#define addr_unix_abstract_name(B) ((B)[0] == 0) +#define addr_unix_anonymous(U) (addr_unix_len(U) <= 0) +#define addr_unix_abstract(U) (!addr_unix_anonymous(U) && addr_unix_abstract_name((U)->addr)) +//#define unix_addr_fs(U) (!unix_addr_anonymous(U) && !unix_addr_abstract_name((U)->addr)) + +#define unix_addr(A) ((struct sockaddr_un *)(A)) +#define unix_addr_anon(A, L) ((A) && unix_addr_len(L) <= 0) +#define unix_addr_fs(A, L) (!unix_addr_anon(A, L) && !addr_unix_abstract_name(unix_addr(A)->sun_path)) + +#define UNIX_ANONYMOUS(U) (!unix_sk(U)->addr) +/* from net/unix/af_unix.c */ +#define UNIX_ABSTRACT(U) (!UNIX_ANONYMOUS(U) && \ + unix_sk(U)->addr->hash < UNIX_HASH_SIZE) +#define UNIX_FS(U) (!UNIX_ANONYMOUS(U) && unix_sk(U)->addr->name->sun_path[0]) +#define unix_peer(sk) (unix_sk(sk)->peer) +#define unix_connected(S) ((S)->state == SS_CONNECTED) + +static inline void print_unix_addr(struct sockaddr_un *A, int L) +{ + char *buf = (A) ? (char *) &(A)->sun_path : NULL; + int len = unix_addr_len(L); + if (!buf || len <= 0) + printk(" "); + else if (buf[0]) + printk(" %s", buf); + else + /* abstract name len includes leading \0 */ + printk(" %d @%.*s", len - 1, len - 1, buf+1); +}; + +/* + printk("%s: %s: f %d, t %d, p %d", __FUNCTION__, \ + #SK , \ +*/ +#define print_unix_sk(SK) \ +do { \ + struct unix_sock *u = unix_sk(SK); \ + printk("%s: f %d, t %d, p %d", #SK , \ + (SK)->sk_family, (SK)->sk_type, (SK)->sk_protocol); \ + if (u->addr) \ + print_unix_addr(u->addr->name, u->addr->len); \ + else \ + print_unix_addr(NULL, sizeof(sa_family_t)); \ + /* printk("\n");*/ \ +} while (0) + +#define print_sk(SK) \ +do { \ + if (!(SK)) { \ + printk("%s: %s is null\n", __FUNCTION__, #SK); \ + } else if ((SK)->sk_family == PF_UNIX) { \ + print_unix_sk(SK); \ + printk("\n"); \ + } else { \ + printk("%s: %s: family %d\n", __FUNCTION__, #SK , \ + (SK)->sk_family); \ + } \ +} while (0) + +#define print_sock_addr(U) \ +do { \ + printk("%s:\n", __FUNCTION__); \ + printk(" sock %s:", sock_ctx && sock_ctx->label ? aa_label_printk(sock_ctx->label, GFP_ATOMIC); : ""); print_sk(sock); \ + printk(" other %s:", other_ctx && other_ctx->label ? aa_label_printk(other_ctx->label, GFP_ATOMIC); : ""); print_sk(other); \ + printk(" new %s", new_ctx && new_ctx->label ? aa_label_printk(new_ctx->label, GFP_ATOMIC); : ""); print_sk(newsk); \ +} while (0) + + + + +int aa_unix_peer_perm(struct aa_label *label, const char *op, u32 request, + struct sock *sk, struct sock *peer_sk, + struct aa_label *peer_label); +int aa_unix_label_sk_perm(struct aa_label *label, const char *op, u32 request, + struct sock *sk); +int aa_unix_sock_perm(const char *op, u32 request, struct socket *sock); +int aa_unix_create_perm(struct aa_label *label, int family, int type, + int protocol); +int aa_unix_bind_perm(struct socket *sock, struct sockaddr *address, + int addrlen); +int aa_unix_connect_perm(struct socket *sock, struct sockaddr *address, + int addrlen); +int aa_unix_listen_perm(struct socket *sock, int backlog); +int aa_unix_accept_perm(struct socket *sock, struct socket *newsock); +int aa_unix_msg_perm(const char *op, u32 request, struct socket *sock, + struct msghdr *msg, int size); +int aa_unix_opt_perm(const char *op, u32 request, struct socket *sock, int level, + int optname); +int aa_unix_file_perm(struct aa_label *label, const char *op, u32 request, + struct socket *sock); + +#endif /* __AA_AF_UNIX_H */ --- linux-aws-4.15.0.orig/security/apparmor/include/audit.h +++ linux-aws-4.15.0/security/apparmor/include/audit.h @@ -127,6 +127,16 @@ kuid_t ouid; } fs; int signal; + struct { + int type, protocol; + struct sock *peer_sk; + void *addr; + int addrlen; + } net; + struct { + int rlim; + unsigned long max; + } rlim; }; }; struct { @@ -135,10 +145,6 @@ long pos; } iface; struct { - int rlim; - unsigned long max; - } rlim; - struct { const char *src_name; const char *type; const char *trans; --- linux-aws-4.15.0.orig/security/apparmor/include/crypto.h +++ linux-aws-4.15.0/security/apparmor/include/crypto.h @@ -18,6 +18,8 @@ #ifdef CONFIG_SECURITY_APPARMOR_HASH unsigned int aa_hash_size(void); +void aa_snprint_hashstr(char *out, unsigned char *hash, unsigned int hsize); +char *aa_asprint_hashstr(unsigned char *hash, unsigned int hsize, gfp_t gfp); char *aa_calc_hash(void *data, size_t len); int aa_calc_profile_hash(struct aa_profile *profile, u32 version, void *start, size_t len); @@ -36,6 +38,15 @@ { return 0; } + +void aa_snprint_hashstr(char *out, unsigned char *hash, unsigned int hsize) +{ +} + +char *aa_asprint_hashstr(unsigned char *hash, unsigned int hsize, gfp_t gfp); +{ + return NULL; +} #endif #endif /* __APPARMOR_CRYPTO_H */ --- linux-aws-4.15.0.orig/security/apparmor/include/net.h +++ linux-aws-4.15.0/security/apparmor/include/net.h @@ -0,0 +1,124 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2017 Canonical Ltd. + * + * 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, version 2 of the + * License. + */ + +#ifndef __AA_NET_H +#define __AA_NET_H + +#include +#include + +#include "apparmorfs.h" +#include "label.h" +#include "perms.h" +#include "policy.h" + +#define AA_MAY_SEND AA_MAY_WRITE +#define AA_MAY_RECEIVE AA_MAY_READ + +#define AA_MAY_SHUTDOWN AA_MAY_DELETE + +#define AA_MAY_CONNECT AA_MAY_OPEN +#define AA_MAY_ACCEPT 0x00100000 + +#define AA_MAY_BIND 0x00200000 +#define AA_MAY_LISTEN 0x00400000 + +#define AA_MAY_SETOPT 0x01000000 +#define AA_MAY_GETOPT 0x02000000 + +#define NET_PERMS_MASK (AA_MAY_SEND | AA_MAY_RECEIVE | AA_MAY_CREATE | \ + AA_MAY_SHUTDOWN | AA_MAY_BIND | AA_MAY_LISTEN | \ + AA_MAY_CONNECT | AA_MAY_ACCEPT | AA_MAY_SETATTR | \ + AA_MAY_GETATTR | AA_MAY_SETOPT | AA_MAY_GETOPT) + +#define NET_FS_PERMS (AA_MAY_SEND | AA_MAY_RECEIVE | AA_MAY_CREATE | \ + AA_MAY_SHUTDOWN | AA_MAY_CONNECT | AA_MAY_RENAME |\ + AA_MAY_SETATTR | AA_MAY_GETATTR | AA_MAY_CHMOD | \ + AA_MAY_CHOWN | AA_MAY_CHGRP | AA_MAY_LOCK | \ + AA_MAY_MPROT) + +#define NET_PEER_MASK (AA_MAY_SEND | AA_MAY_RECEIVE | AA_MAY_CONNECT | \ + AA_MAY_ACCEPT) +struct aa_sk_ctx { + struct aa_label *label; + struct aa_label *peer; + struct path path; +}; + +#define SK_CTX(X) ((X)->sk_security) +#define SOCK_ctx(X) SOCK_INODE(X)->i_security +#define DEFINE_AUDIT_NET(NAME, OP, SK, F, T, P) \ + struct lsm_network_audit NAME ## _net = { .sk = (SK), \ + .family = (F)}; \ + DEFINE_AUDIT_DATA(NAME, \ + ((SK) && (F) != AF_UNIX) ? LSM_AUDIT_DATA_NET : \ + LSM_AUDIT_DATA_NONE, \ + OP); \ + NAME.u.net = &(NAME ## _net); \ + aad(&NAME)->net.type = (T); \ + aad(&NAME)->net.protocol = (P) + +#define DEFINE_AUDIT_SK(NAME, OP, SK) \ + DEFINE_AUDIT_NET(NAME, OP, SK, (SK)->sk_family, (SK)->sk_type, \ + (SK)->sk_protocol) + +/* struct aa_net - network confinement data + * @allow: basic network families permissions + * @audit: which network permissions to force audit + * @quiet: which network permissions to quiet rejects + */ +struct aa_net { + u16 allow[AF_MAX]; + u16 audit[AF_MAX]; + u16 quiet[AF_MAX]; +}; + + +extern struct aa_sfs_entry aa_sfs_entry_network[]; + +void audit_net_cb(struct audit_buffer *ab, void *va); +int aa_profile_af_perm(struct aa_profile *profile, struct common_audit_data *sa, + u32 request, u16 family, int type); +static inline int aa_profile_af_sk_perm(struct aa_profile *profile, + struct common_audit_data *sa, + u32 request, + struct sock *sk) +{ + return aa_profile_af_perm(profile, sa, request, sk->sk_family, + sk->sk_type); +} + +int aa_sock_perm(const char *op, u32 request, struct socket *sock); +int aa_sock_create_perm(struct aa_label *label, int family, int type, + int protocol); +int aa_sock_bind_perm(struct socket *sock, struct sockaddr *address, + int addrlen); +int aa_sock_connect_perm(struct socket *sock, struct sockaddr *address, + int addrlen); +int aa_sock_listen_perm(struct socket *sock, int backlog); +int aa_sock_accept_perm(struct socket *sock, struct socket *newsock); +int aa_sock_msg_perm(const char *op, u32 request, struct socket *sock, + struct msghdr *msg, int size); +int aa_sock_opt_perm(const char *op, u32 request, struct socket *sock, int level, + int optname); +int aa_sock_file_perm(struct aa_label *label, const char *op, u32 request, + struct socket *sock); + + +static inline void aa_free_net_rules(struct aa_net *new) +{ + /* NOP */ +} + +#endif /* __AA_NET_H */ --- linux-aws-4.15.0.orig/security/apparmor/include/path.h +++ linux-aws-4.15.0/security/apparmor/include/path.h @@ -18,6 +18,7 @@ enum path_flags { PATH_IS_DIR = 0x1, /* path is a directory */ + PATH_SOCK_COND = 0x2, PATH_CONNECT_PATH = 0x4, /* connect disconnected paths to / */ PATH_CHROOT_REL = 0x8, /* do path lookup relative to chroot */ PATH_CHROOT_NSCONNECT = 0x10, /* connect paths that are at ns root */ --- linux-aws-4.15.0.orig/security/apparmor/include/perms.h +++ linux-aws-4.15.0/security/apparmor/include/perms.h @@ -138,9 +138,10 @@ void aa_perm_mask_to_str(char *str, const char *chrs, u32 mask); -void aa_audit_perm_names(struct audit_buffer *ab, const char **names, u32 mask); +void aa_audit_perm_names(struct audit_buffer *ab, const char * const *names, + u32 mask); void aa_audit_perm_mask(struct audit_buffer *ab, u32 mask, const char *chrs, - u32 chrsmask, const char **names, u32 namesmask); + u32 chrsmask, const char * const *names, u32 namesmask); void aa_apply_modes_to_perms(struct aa_profile *profile, struct aa_perms *perms); void aa_compute_perms(struct aa_dfa *dfa, unsigned int state, --- linux-aws-4.15.0.orig/security/apparmor/include/policy.h +++ linux-aws-4.15.0/security/apparmor/include/policy.h @@ -30,6 +30,7 @@ #include "file.h" #include "lib.h" #include "label.h" +#include "net.h" #include "perms.h" #include "resource.h" @@ -111,6 +112,7 @@ * @policy: general match rules governing policy * @file: The set of rules governing basic file access and domain transitions * @caps: capabilities for the profile + * @net: network controls for the profile * @rlimits: rlimits for the profile * * @dents: dentries for the profiles file entries in apparmorfs @@ -148,6 +150,7 @@ struct aa_policydb policy; struct aa_file_rules file; struct aa_caps caps; + struct aa_net net; struct aa_rlimit rlimits; struct aa_loaddata *rawdata; @@ -220,6 +223,16 @@ return 0; } +static inline unsigned int PROFILE_MEDIATES_AF(struct aa_profile *profile, + u16 AF) { + unsigned int state = PROFILE_MEDIATES(profile, AA_CLASS_NET); + __be16 be_af = cpu_to_be16(AF); + + if (!state) + return 0; + return aa_dfa_match_len(profile->policy.dfa, state, (char *) &be_af, 2); +} + /** * aa_get_profile - increment refcount on profile @p * @p: profile (MAYBE NULL) --- linux-aws-4.15.0.orig/security/apparmor/lib.c +++ linux-aws-4.15.0/security/apparmor/lib.c @@ -211,7 +211,8 @@ *str = '\0'; } -void aa_audit_perm_names(struct audit_buffer *ab, const char **names, u32 mask) +void aa_audit_perm_names(struct audit_buffer *ab, const char * const *names, + u32 mask) { const char *fmt = "%s"; unsigned int i, perm = 1; @@ -229,7 +230,7 @@ } void aa_audit_perm_mask(struct audit_buffer *ab, u32 mask, const char *chrs, - u32 chrsmask, const char **names, u32 namesmask) + u32 chrsmask, const char * const *names, u32 namesmask) { char str[33]; --- linux-aws-4.15.0.orig/security/apparmor/lsm.c +++ linux-aws-4.15.0/security/apparmor/lsm.c @@ -26,6 +26,7 @@ #include #include +#include "include/af_unix.h" #include "include/apparmor.h" #include "include/apparmorfs.h" #include "include/audit.h" @@ -33,6 +34,7 @@ #include "include/context.h" #include "include/file.h" #include "include/ipc.h" +#include "include/net.h" #include "include/path.h" #include "include/label.h" #include "include/policy.h" @@ -736,6 +738,411 @@ return error; } +/** + * apparmor_sk_alloc_security - allocate and attach the sk_security field + */ +static int apparmor_sk_alloc_security(struct sock *sk, int family, gfp_t flags) +{ + struct aa_sk_ctx *ctx; + + ctx = kzalloc(sizeof(*ctx), flags); + if (!ctx) + return -ENOMEM; + + SK_CTX(sk) = ctx; + + return 0; +} + +/** + * apparmor_sk_free_security - free the sk_security field + */ +static void apparmor_sk_free_security(struct sock *sk) +{ + struct aa_sk_ctx *ctx = SK_CTX(sk); + + SK_CTX(sk) = NULL; + aa_put_label(ctx->label); + aa_put_label(ctx->peer); + path_put(&ctx->path); + kfree(ctx); +} + +/** + * apparmor_clone_security - clone the sk_security field + */ +static void apparmor_sk_clone_security(const struct sock *sk, + struct sock *newsk) +{ + struct aa_sk_ctx *ctx = SK_CTX(sk); + struct aa_sk_ctx *new = SK_CTX(newsk); + + new->label = aa_get_label(ctx->label); + new->peer = aa_get_label(ctx->peer); + new->path = ctx->path; + path_get(&new->path); +} + +static struct path *UNIX_FS_CONN_PATH(struct sock *sk, struct sock *newsk) +{ + if (sk->sk_family == PF_UNIX && UNIX_FS(sk)) + return &unix_sk(sk)->path; + else if (newsk->sk_family == PF_UNIX && UNIX_FS(newsk)) + return &unix_sk(newsk)->path; + return NULL; +} + +/** + * apparmor_unix_stream_connect - check perms before making unix domain conn + * + * peer is locked when this hook is called + */ +static int apparmor_unix_stream_connect(struct sock *sk, struct sock *peer_sk, + struct sock *newsk) +{ + struct aa_sk_ctx *sk_ctx = SK_CTX(sk); + struct aa_sk_ctx *peer_ctx = SK_CTX(peer_sk); + struct aa_sk_ctx *new_ctx = SK_CTX(newsk); + struct aa_label *label; + struct path *path; + int error; + + label = __begin_current_label_crit_section(); + error = aa_unix_peer_perm(label, OP_CONNECT, + (AA_MAY_CONNECT | AA_MAY_SEND | AA_MAY_RECEIVE), + sk, peer_sk, NULL); + if (!UNIX_FS(peer_sk)) { + last_error(error, + aa_unix_peer_perm(peer_ctx->label, OP_CONNECT, + (AA_MAY_ACCEPT | AA_MAY_SEND | AA_MAY_RECEIVE), + peer_sk, sk, label)); + } + __end_current_label_crit_section(label); + + if (error) + return error; + + /* label newsk if it wasn't labeled in post_create. Normally this + * would be done in sock_graft, but because we are directly looking + * at the peer_sk to obtain peer_labeling for unix socks this + * does not work + */ + if (!new_ctx->label) + new_ctx->label = aa_get_label(peer_ctx->label); + + /* Cross reference the peer labels for SO_PEERSEC */ + if (new_ctx->peer) + aa_put_label(new_ctx->peer); + + if (sk_ctx->peer) + aa_put_label(sk_ctx->peer); + + new_ctx->peer = aa_get_label(sk_ctx->label); + sk_ctx->peer = aa_get_label(peer_ctx->label); + + path = UNIX_FS_CONN_PATH(sk, peer_sk); + if (path) { + new_ctx->path = *path; + sk_ctx->path = *path; + path_get(path); + path_get(path); + } + return 0; +} + +/** + * apparmor_unix_may_send - check perms before conn or sending unix dgrams + * + * other is locked when this hook is called + * + * dgram connect calls may_send, peer setup but path not copied????? + */ +static int apparmor_unix_may_send(struct socket *sock, struct socket *peer) +{ + struct aa_sk_ctx *peer_ctx = SK_CTX(peer->sk); + struct aa_label *label; + int error; + + label = __begin_current_label_crit_section(); + error = xcheck(aa_unix_peer_perm(label, OP_SENDMSG, AA_MAY_SEND, + sock->sk, peer->sk, NULL), + aa_unix_peer_perm(peer_ctx->label, OP_SENDMSG, + AA_MAY_RECEIVE, + peer->sk, sock->sk, label)); + __end_current_label_crit_section(label); + + return error; +} + +/** + * apparmor_socket_create - check perms before creating a new socket + */ +static int apparmor_socket_create(int family, int type, int protocol, int kern) +{ + struct aa_label *label; + int error = 0; + + label = begin_current_label_crit_section(); + if (!(kern || unconfined(label))) + error = aa_sock_create_perm(label, family, type, protocol); + end_current_label_crit_section(label); + + return error; +} + +/** + * apparmor_socket_post_create - setup the per-socket security struct + * + * Note: + * - kernel sockets currently labeled unconfined but we may want to + * move to a special kernel label + * - socket may not have sk here if created with sock_create_lite or + * sock_alloc. These should be accept cases which will be handled in + * sock_graft. + */ +static int apparmor_socket_post_create(struct socket *sock, int family, + int type, int protocol, int kern) +{ + struct aa_label *label; + + if (kern) { + struct aa_ns *ns = aa_get_current_ns(); + + label = aa_get_label(ns_unconfined(ns)); + aa_put_ns(ns); + } else + label = aa_get_current_label(); + + if (sock->sk) { + struct aa_sk_ctx *ctx = SK_CTX(sock->sk); + + aa_put_label(ctx->label); + ctx->label = aa_get_label(label); + } + aa_put_label(label); + + return 0; +} + +/** + * apparmor_socket_bind - check perms before bind addr to socket + */ +static int apparmor_socket_bind(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + return aa_sock_bind_perm(sock, address, addrlen); +} + +/** + * apparmor_socket_connect - check perms before connecting @sock to @address + */ +static int apparmor_socket_connect(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + return aa_sock_connect_perm(sock, address, addrlen); +} + +/** + * apparmor_socket_list - check perms before allowing listen + */ +static int apparmor_socket_listen(struct socket *sock, int backlog) +{ + return aa_sock_listen_perm(sock, backlog); +} + +/** + * apparmor_socket_accept - check perms before accepting a new connection. + * + * Note: while @newsock is created and has some information, the accept + * has not been done. + */ +static int apparmor_socket_accept(struct socket *sock, struct socket *newsock) +{ + return aa_sock_accept_perm(sock, newsock); +} + +/** + * apparmor_socket_sendmsg - check perms before sending msg to another socket + */ +static int apparmor_socket_sendmsg(struct socket *sock, + struct msghdr *msg, int size) +{ + return aa_sock_msg_perm(OP_SENDMSG, AA_MAY_SEND, sock, msg, size); +} + +/** + * apparmor_socket_recvmsg - check perms before receiving a message + */ +static int apparmor_socket_recvmsg(struct socket *sock, + struct msghdr *msg, int size, int flags) +{ + return aa_sock_msg_perm(OP_RECVMSG, AA_MAY_RECEIVE, sock, msg, size); +} + +/** + * apparmor_socket_getsockname - check perms before getting the local address + */ +static int apparmor_socket_getsockname(struct socket *sock) +{ + return aa_sock_perm(OP_GETSOCKNAME, AA_MAY_GETATTR, sock); +} + +/** + * apparmor_socket_getpeername - check perms before getting remote address + */ +static int apparmor_socket_getpeername(struct socket *sock) +{ + return aa_sock_perm(OP_GETPEERNAME, AA_MAY_GETATTR, sock); +} + +/** + * apparmor_getsockopt - check perms before getting socket options + */ +static int apparmor_socket_getsockopt(struct socket *sock, int level, + int optname) +{ + return aa_sock_opt_perm(OP_GETSOCKOPT, AA_MAY_GETOPT, sock, + level, optname); +} + +/** + * apparmor_setsockopt - check perms before setting socket options + */ +static int apparmor_socket_setsockopt(struct socket *sock, int level, + int optname) +{ + return aa_sock_opt_perm(OP_SETSOCKOPT, AA_MAY_SETOPT, sock, + level, optname); +} + +/** + * apparmor_socket_shutdown - check perms before shutting down @sock conn + */ +static int apparmor_socket_shutdown(struct socket *sock, int how) +{ + return aa_sock_perm(OP_SHUTDOWN, AA_MAY_SHUTDOWN, sock); +} + +/** + * apparmor_socket_sock_recv_skb - check perms before associating skb to sk + * + * Note: can not sleep may be called with locks held + * + * dont want protocol specific in __skb_recv_datagram() + * to deny an incoming connection socket_sock_rcv_skb() + */ +static int apparmor_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb) +{ + return 0; +} + + +static struct aa_label *sk_peer_label(struct sock *sk) +{ + struct sock *peer_sk; + struct aa_sk_ctx *ctx = SK_CTX(sk); + + if (ctx->peer) + return ctx->peer; + + if (sk->sk_family != PF_UNIX) + return ERR_PTR(-ENOPROTOOPT); + + /* check for sockpair peering which does not go through + * security_unix_stream_connect + */ + peer_sk = unix_peer(sk); + if (peer_sk) { + ctx = SK_CTX(peer_sk); + if (ctx->label) + return ctx->label; + } + + return ERR_PTR(-ENOPROTOOPT); +} + +/** + * apparmor_socket_getpeersec_stream - get security context of peer + * + * Note: for tcp only valid if using ipsec or cipso on lan + */ +static int apparmor_socket_getpeersec_stream(struct socket *sock, + char __user *optval, + int __user *optlen, + unsigned int len) +{ + char *name; + int slen, error = 0; + struct aa_label *label; + struct aa_label *peer; + + label = begin_current_label_crit_section(); + peer = sk_peer_label(sock->sk); + if (IS_ERR(peer)) { + error = PTR_ERR(peer); + goto done; + } + slen = aa_label_asxprint(&name, labels_ns(label), peer, + FLAG_SHOW_MODE | FLAG_VIEW_SUBNS | + FLAG_HIDDEN_UNCONFINED, GFP_KERNEL); + /* don't include terminating \0 in slen, it breaks some apps */ + if (slen < 0) { + error = -ENOMEM; + } else { + if (slen > len) { + error = -ERANGE; + } else if (copy_to_user(optval, name, slen)) { + error = -EFAULT; + goto out; + } + if (put_user(slen, optlen)) + error = -EFAULT; +out: + kfree(name); + + } + +done: + end_current_label_crit_section(label); + + return error; +} + +/** + * apparmor_socket_getpeersec_dgram - get security label of packet + * @sock: the peer socket + * @skb: packet data + * @secid: pointer to where to put the secid of the packet + * + * Sets the netlabel socket state on sk from parent + */ +static int apparmor_socket_getpeersec_dgram(struct socket *sock, + struct sk_buff *skb, u32 *secid) + +{ + /* TODO: requires secid support */ + return -ENOPROTOOPT; +} + +/** + * apparmor_sock_graft - Initialize newly created socket + * @sk: child sock + * @parent: parent socket + * + * Note: could set off of SOCK_CTX(parent) but need to track inode and we can + * just set sk security information off of current creating process label + * Labeling of sk for accept case - probably should be sock based + * instead of task, because of the case where an implicitly labeled + * socket is shared by different tasks. + */ +static void apparmor_sock_graft(struct sock *sk, struct socket *parent) +{ + struct aa_sk_ctx *ctx = SK_CTX(sk); + + if (!ctx->label) + ctx->label = aa_get_current_label(); +} + static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = { LSM_HOOK_INIT(ptrace_access_check, apparmor_ptrace_access_check), LSM_HOOK_INIT(ptrace_traceme, apparmor_ptrace_traceme), @@ -770,6 +1177,33 @@ LSM_HOOK_INIT(getprocattr, apparmor_getprocattr), LSM_HOOK_INIT(setprocattr, apparmor_setprocattr), + LSM_HOOK_INIT(sk_alloc_security, apparmor_sk_alloc_security), + LSM_HOOK_INIT(sk_free_security, apparmor_sk_free_security), + LSM_HOOK_INIT(sk_clone_security, apparmor_sk_clone_security), + + LSM_HOOK_INIT(unix_stream_connect, apparmor_unix_stream_connect), + LSM_HOOK_INIT(unix_may_send, apparmor_unix_may_send), + + LSM_HOOK_INIT(socket_create, apparmor_socket_create), + LSM_HOOK_INIT(socket_post_create, apparmor_socket_post_create), + LSM_HOOK_INIT(socket_bind, apparmor_socket_bind), + LSM_HOOK_INIT(socket_connect, apparmor_socket_connect), + LSM_HOOK_INIT(socket_listen, apparmor_socket_listen), + LSM_HOOK_INIT(socket_accept, apparmor_socket_accept), + LSM_HOOK_INIT(socket_sendmsg, apparmor_socket_sendmsg), + LSM_HOOK_INIT(socket_recvmsg, apparmor_socket_recvmsg), + LSM_HOOK_INIT(socket_getsockname, apparmor_socket_getsockname), + LSM_HOOK_INIT(socket_getpeername, apparmor_socket_getpeername), + LSM_HOOK_INIT(socket_getsockopt, apparmor_socket_getsockopt), + LSM_HOOK_INIT(socket_setsockopt, apparmor_socket_setsockopt), + LSM_HOOK_INIT(socket_shutdown, apparmor_socket_shutdown), + LSM_HOOK_INIT(socket_sock_rcv_skb, apparmor_socket_sock_rcv_skb), + LSM_HOOK_INIT(socket_getpeersec_stream, + apparmor_socket_getpeersec_stream), + LSM_HOOK_INIT(socket_getpeersec_dgram, + apparmor_socket_getpeersec_dgram), + LSM_HOOK_INIT(sock_graft, apparmor_sock_graft), + LSM_HOOK_INIT(cred_alloc_blank, apparmor_cred_alloc_blank), LSM_HOOK_INIT(cred_free, apparmor_cred_free), LSM_HOOK_INIT(cred_prepare, apparmor_cred_prepare), --- linux-aws-4.15.0.orig/security/apparmor/net.c +++ linux-aws-4.15.0/security/apparmor/net.c @@ -0,0 +1,356 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2017 Canonical Ltd. + * + * 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, version 2 of the + * License. + */ + +#include "include/af_unix.h" +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/label.h" +#include "include/net.h" +#include "include/policy.h" + +#include "net_names.h" + + +struct aa_sfs_entry aa_sfs_entry_network[] = { + AA_SFS_FILE_STRING("af_mask", AA_SFS_AF_MASK), + AA_SFS_FILE_BOOLEAN("af_unix", 1), + { } +}; + +static const char * const net_mask_names[] = { + "unknown", + "send", + "receive", + "unknown", + + "create", + "shutdown", + "connect", + "unknown", + + "setattr", + "getattr", + "setcred", + "getcred", + + "chmod", + "chown", + "chgrp", + "lock", + + "mmap", + "mprot", + "unknown", + "unknown", + + "accept", + "bind", + "listen", + "unknown", + + "setopt", + "getopt", + "unknown", + "unknown", + + "unknown", + "unknown", + "unknown", + "unknown", +}; + +static void audit_unix_addr(struct audit_buffer *ab, const char *str, + struct sockaddr_un *addr, int addrlen) +{ + int len = unix_addr_len(addrlen); + + if (!addr || len <= 0) { + audit_log_format(ab, " %s=none", str); + } else if (addr->sun_path[0]) { + audit_log_format(ab, " %s=", str); + audit_log_untrustedstring(ab, addr->sun_path); + } else { + audit_log_format(ab, " %s=\"@", str); + if (audit_string_contains_control(&addr->sun_path[1], len - 1)) + audit_log_n_hex(ab, &addr->sun_path[1], len - 1); + else + audit_log_format(ab, "%.*s", len - 1, + &addr->sun_path[1]); + audit_log_format(ab, "\""); + } +} + +static void audit_unix_sk_addr(struct audit_buffer *ab, const char *str, + struct sock *sk) +{ + struct unix_sock *u = unix_sk(sk); + if (u && u->addr) + audit_unix_addr(ab, str, u->addr->name, u->addr->len); + else + audit_unix_addr(ab, str, NULL, 0); +} + +/* audit callback for net specific fields */ +void audit_net_cb(struct audit_buffer *ab, void *va) +{ + struct common_audit_data *sa = va; + + audit_log_format(ab, " family="); + if (address_family_names[sa->u.net->family]) + audit_log_string(ab, address_family_names[sa->u.net->family]); + else + audit_log_format(ab, "\"unknown(%d)\"", sa->u.net->family); + audit_log_format(ab, " sock_type="); + if (sock_type_names[aad(sa)->net.type]) + audit_log_string(ab, sock_type_names[aad(sa)->net.type]); + else + audit_log_format(ab, "\"unknown(%d)\"", aad(sa)->net.type); + audit_log_format(ab, " protocol=%d", aad(sa)->net.protocol); + + if (aad(sa)->request & NET_PERMS_MASK) { + audit_log_format(ab, " requested_mask="); + aa_audit_perm_mask(ab, aad(sa)->request, NULL, 0, + net_mask_names, NET_PERMS_MASK); + + if (aad(sa)->denied & NET_PERMS_MASK) { + audit_log_format(ab, " denied_mask="); + aa_audit_perm_mask(ab, aad(sa)->denied, NULL, 0, + net_mask_names, NET_PERMS_MASK); + } + } + if (sa->u.net->family == AF_UNIX) { + if ((aad(sa)->request & ~NET_PEER_MASK) && aad(sa)->net.addr) + audit_unix_addr(ab, "addr", + unix_addr(aad(sa)->net.addr), + aad(sa)->net.addrlen); + else + audit_unix_sk_addr(ab, "addr", sa->u.net->sk); + if (aad(sa)->request & NET_PEER_MASK) { + if (aad(sa)->net.addr) + audit_unix_addr(ab, "peer_addr", + unix_addr(aad(sa)->net.addr), + aad(sa)->net.addrlen); + else + audit_unix_sk_addr(ab, "peer_addr", + aad(sa)->net.peer_sk); + } + } + if (aad(sa)->peer) { + audit_log_format(ab, " peer="); + aa_label_xaudit(ab, labels_ns(aad(sa)->label), aad(sa)->peer, + FLAGS_NONE, GFP_ATOMIC); + } +} + + +/* Generic af perm */ +int aa_profile_af_perm(struct aa_profile *profile, struct common_audit_data *sa, + u32 request, u16 family, int type) +{ + struct aa_perms perms = { }; + + AA_BUG(family >= AF_MAX); + AA_BUG(type < 0 || type >= SOCK_MAX); + + if (profile_unconfined(profile)) + return 0; + + perms.allow = (profile->net.allow[family] & (1 << type)) ? + ALL_PERMS_MASK : 0; + perms.audit = (profile->net.audit[family] & (1 << type)) ? + ALL_PERMS_MASK : 0; + perms.quiet = (profile->net.quiet[family] & (1 << type)) ? + ALL_PERMS_MASK : 0; + aa_apply_modes_to_perms(profile, &perms); + + return aa_check_perms(profile, &perms, request, sa, audit_net_cb); +} + +int aa_af_perm(struct aa_label *label, const char *op, u32 request, u16 family, + int type, int protocol) +{ + struct aa_profile *profile; + DEFINE_AUDIT_NET(sa, op, NULL, family, type, protocol); + + return fn_for_each_confined(label, profile, + aa_profile_af_perm(profile, &sa, request, family, + type)); +} + +static int aa_label_sk_perm(struct aa_label *label, const char *op, u32 request, + struct sock *sk) +{ + struct aa_profile *profile; + DEFINE_AUDIT_SK(sa, op, sk); + + AA_BUG(!label); + AA_BUG(!sk); + + if (unconfined(label)) + return 0; + + return fn_for_each_confined(label, profile, + aa_profile_af_sk_perm(profile, &sa, request, sk)); +} + +int aa_sk_perm(const char *op, u32 request, struct sock *sk) +{ + struct aa_label *label; + int error; + + AA_BUG(!sk); + AA_BUG(in_interrupt()); + + /* TODO: switch to begin_current_label ???? */ + label = begin_current_label_crit_section(); + error = aa_label_sk_perm(label, op, request, sk); + end_current_label_crit_section(label); + + return error; +} + +#define af_select(FAMILY, FN, DEF_FN) \ +({ \ + int __e; \ + switch ((FAMILY)) { \ + case AF_UNIX: \ + __e = aa_unix_ ## FN; \ + break; \ + default: \ + __e = DEF_FN; \ + } \ + __e; \ +}) + +/* TODO: push into lsm.c ???? */ + +/* revaliation, get/set attr, shutdown */ +int aa_sock_perm(const char *op, u32 request, struct socket *sock) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + sock_perm(op, request, sock), + aa_sk_perm(op, request, sock->sk)); +} + +int aa_sock_create_perm(struct aa_label *label, int family, int type, + int protocol) +{ + AA_BUG(!label); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(family, + create_perm(label, family, type, protocol), + aa_af_perm(label, OP_CREATE, AA_MAY_CREATE, family, + type, protocol)); +} + +int aa_sock_bind_perm(struct socket *sock, struct sockaddr *address, + int addrlen) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(!address); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + bind_perm(sock, address, addrlen), + aa_sk_perm(OP_BIND, AA_MAY_BIND, sock->sk)); +} + +int aa_sock_connect_perm(struct socket *sock, struct sockaddr *address, + int addrlen) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(!address); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + connect_perm(sock, address, addrlen), + aa_sk_perm(OP_CONNECT, AA_MAY_CONNECT, sock->sk)); +} + +int aa_sock_listen_perm(struct socket *sock, int backlog) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + listen_perm(sock, backlog), + aa_sk_perm(OP_LISTEN, AA_MAY_LISTEN, sock->sk)); +} + +/* ability of sock to connect, not peer address binding */ +int aa_sock_accept_perm(struct socket *sock, struct socket *newsock) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(!newsock); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + accept_perm(sock, newsock), + aa_sk_perm(OP_ACCEPT, AA_MAY_ACCEPT, sock->sk)); +} + +/* sendmsg, recvmsg */ +int aa_sock_msg_perm(const char *op, u32 request, struct socket *sock, + struct msghdr *msg, int size) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(!msg); + /* TODO: .... */ + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + msg_perm(op, request, sock, msg, size), + aa_sk_perm(op, request, sock->sk)); +} + +/* revaliation, get/set attr, opt */ +int aa_sock_opt_perm(const char *op, u32 request, struct socket *sock, int level, + int optname) +{ + AA_BUG(!sock); + AA_BUG(!sock->sk); + AA_BUG(in_interrupt()); + + return af_select(sock->sk->sk_family, + opt_perm(op, request, sock, level, optname), + aa_sk_perm(op, request, sock->sk)); +} + +int aa_sock_file_perm(struct aa_label *label, const char *op, u32 request, + struct socket *sock) +{ + AA_BUG(!label); + AA_BUG(!sock); + AA_BUG(!sock->sk); + + return af_select(sock->sk->sk_family, + file_perm(label, op, request, sock), + aa_label_sk_perm(label, op, request, sock->sk)); +} --- linux-aws-4.15.0.orig/security/apparmor/policy_unpack.c +++ linux-aws-4.15.0/security/apparmor/policy_unpack.c @@ -275,6 +275,19 @@ return 0; } +static bool unpack_u16(struct aa_ext *e, u16 *data, const char *name) +{ + if (unpack_nameX(e, AA_U16, name)) { + if (!inbounds(e, sizeof(u16))) + return 0; + if (data) + *data = le16_to_cpu(get_unaligned((__le16 *) e->pos)); + e->pos += sizeof(u16); + return 1; + } + return 0; +} + static bool unpack_u32(struct aa_ext *e, u32 *data, const char *name) { if (unpack_nameX(e, AA_U32, name)) { @@ -584,7 +597,7 @@ struct aa_profile *profile = NULL; const char *tmpname, *tmpns = NULL, *name = NULL; const char *info = "failed to unpack profile"; - size_t ns_len; + size_t size = 0, ns_len; struct rhashtable_params params = { 0 }; char *key = NULL; struct aa_data *data; @@ -717,6 +730,38 @@ goto fail; } + size = unpack_array(e, "net_allowed_af"); + if (size) { + + for (i = 0; i < size; i++) { + /* discard extraneous rules that this kernel will + * never request + */ + if (i >= AF_MAX) { + u16 tmp; + + if (!unpack_u16(e, &tmp, NULL) || + !unpack_u16(e, &tmp, NULL) || + !unpack_u16(e, &tmp, NULL)) + goto fail; + continue; + } + if (!unpack_u16(e, &profile->net.allow[i], NULL)) + goto fail; + if (!unpack_u16(e, &profile->net.audit[i], NULL)) + goto fail; + if (!unpack_u16(e, &profile->net.quiet[i], NULL)) + goto fail; + } + if (!unpack_nameX(e, AA_ARRAYEND, NULL)) + goto fail; + } + if (VERSION_LT(e->version, v7)) { + /* pre v7 policy always allowed these */ + profile->net.allow[AF_UNIX] = 0xffff; + profile->net.allow[AF_NETLINK] = 0xffff; + } + if (unpack_nameX(e, AA_STRUCT, "policydb")) { /* generic policy dfa - optional and may be NULL */ info = "failed to unpack policydb"; --- linux-aws-4.15.0.orig/security/commoncap.c +++ linux-aws-4.15.0/security/commoncap.c @@ -660,7 +660,7 @@ if (!file_caps_enabled) return 0; - if (!mnt_may_suid(bprm->file->f_path.mnt)) + if (path_nosuid(&bprm->file->f_path)) return 0; /* @@ -929,7 +929,7 @@ if (strcmp(name, XATTR_NAME_CAPS) == 0) return 0; - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(dentry->d_sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } @@ -962,7 +962,7 @@ return 0; } - if (!capable(CAP_SYS_ADMIN)) + if (!ns_capable(dentry->d_sb->s_user_ns, CAP_SYS_ADMIN)) return -EPERM; return 0; } @@ -1330,12 +1330,14 @@ } return ret; } +EXPORT_SYMBOL_GPL(cap_mmap_addr); int cap_mmap_file(struct file *file, unsigned long reqprot, unsigned long prot, unsigned long flags) { return 0; } +EXPORT_SYMBOL_GPL(cap_mmap_file); #ifdef CONFIG_SECURITY --- linux-aws-4.15.0.orig/security/device_cgroup.c +++ linux-aws-4.15.0/security/device_cgroup.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -824,3 +825,4 @@ return 0; } +EXPORT_SYMBOL_GPL(__devcgroup_check_permission); --- linux-aws-4.15.0.orig/security/integrity/evm/evm_crypto.c +++ linux-aws-4.15.0/security/integrity/evm/evm_crypto.c @@ -190,7 +190,8 @@ int error; int size; - if (!(inode->i_opflags & IOP_XATTR)) + if (!(inode->i_opflags & IOP_XATTR) || + inode->i_sb->s_user_ns != &init_user_ns) return -EOPNOTSUPP; desc = init_desc(type); --- linux-aws-4.15.0.orig/security/integrity/ima/ima_fs.c +++ linux-aws-4.15.0/security/integrity/ima/ima_fs.c @@ -287,7 +287,7 @@ rc = kernel_read_file_from_path(path, &data, &size, 0, READING_POLICY); if (rc < 0) { - pr_err("Unable to open file: %s (%d)", path, rc); + pr_warn("Unable to open file: %s (%d)", path, rc); return rc; } --- linux-aws-4.15.0.orig/security/integrity/ima/ima_policy.c +++ linux-aws-4.15.0/security/integrity/ima/ima_policy.c @@ -743,7 +743,7 @@ case Opt_fsuuid: ima_log_string(ab, "fsuuid", args[0].from); - if (uuid_is_null(&entry->fsuuid)) { + if (!uuid_is_null(&entry->fsuuid)) { result = -EINVAL; break; } --- linux-aws-4.15.0.orig/security/lock_down.c +++ linux-aws-4.15.0/security/lock_down.c @@ -0,0 +1,108 @@ +/* Lock down the kernel + * + * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include + +#ifdef CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ +static __read_mostly bool kernel_locked_down; +#else +static __ro_after_init bool kernel_locked_down; +#endif + +/* + * Put the kernel into lock-down mode. + */ +static void __init lock_kernel_down(const char *where) +{ + if (!kernel_locked_down) { + kernel_locked_down = true; + pr_notice("Kernel is locked down from %s; see man kernel_lockdown.7\n", + where); + } +} + +static int __init lockdown_param(char *ignored) +{ + lock_kernel_down("command line"); + return 0; +} + +early_param("lockdown", lockdown_param); + +/* + * Lock the kernel down from very early in the arch setup. This must happen + * prior to things like ACPI being initialised. + */ +void __init init_lockdown(void) +{ +#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT + if (efi_enabled(EFI_SECURE_BOOT)) + lock_kernel_down("EFI secure boot"); +#endif +} + +/** + * kernel_is_locked_down - Find out if the kernel is locked down + * @what: Tag to use in notice generated if lockdown is in effect + */ +bool __kernel_is_locked_down(const char *what, bool first) +{ + if (what && first && kernel_locked_down) + pr_notice("Lockdown: %s is restricted; see man kernel_lockdown.7\n", + what); + return kernel_locked_down; +} +EXPORT_SYMBOL(__kernel_is_locked_down); + +#ifdef CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ + +/* + * Take the kernel out of lockdown mode. + */ +static void lift_kernel_lockdown(void) +{ + pr_notice("Lifting lockdown\n"); + kernel_locked_down = false; +} + +/* + * Allow lockdown to be lifted by pressing something like SysRq+x (and not by + * echoing the appropriate letter into the sysrq-trigger file). + */ +static void sysrq_handle_lockdown_lift(int key) +{ + if (kernel_locked_down) + lift_kernel_lockdown(); +} + +static struct sysrq_key_op lockdown_lift_sysrq_op = { + .handler = sysrq_handle_lockdown_lift, + .help_msg = "unSB(x)", + .action_msg = "Disabling Secure Boot restrictions", + .enable_mask = SYSRQ_DISABLE_USERSPACE, +}; + +static int __init lockdown_lift_sysrq(void) +{ + if (kernel_locked_down) { + lockdown_lift_sysrq_op.help_msg[5] = LOCKDOWN_LIFT_KEY; + register_sysrq_key(LOCKDOWN_LIFT_KEY, &lockdown_lift_sysrq_op); + } + return 0; +} + +late_initcall(lockdown_lift_sysrq); + +#endif /* CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ */ --- linux-aws-4.15.0.orig/security/security.c +++ linux-aws-4.15.0/security/security.c @@ -531,6 +531,7 @@ return 0; return call_int_hook(path_rmdir, 0, dir, dentry); } +EXPORT_SYMBOL_GPL(security_path_rmdir); int security_path_unlink(const struct path *dir, struct dentry *dentry) { @@ -547,6 +548,7 @@ return 0; return call_int_hook(path_symlink, 0, dir, dentry, old_name); } +EXPORT_SYMBOL_GPL(security_path_symlink); int security_path_link(struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry) @@ -555,6 +557,7 @@ return 0; return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry); } +EXPORT_SYMBOL_GPL(security_path_link); int security_path_rename(const struct path *old_dir, struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry, @@ -582,6 +585,7 @@ return 0; return call_int_hook(path_truncate, 0, path); } +EXPORT_SYMBOL_GPL(security_path_truncate); int security_path_chmod(const struct path *path, umode_t mode) { @@ -589,6 +593,7 @@ return 0; return call_int_hook(path_chmod, 0, path, mode); } +EXPORT_SYMBOL_GPL(security_path_chmod); int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid) { @@ -596,6 +601,7 @@ return 0; return call_int_hook(path_chown, 0, path, uid, gid); } +EXPORT_SYMBOL_GPL(security_path_chown); int security_path_chroot(const struct path *path) { @@ -681,6 +687,7 @@ return 0; return call_int_hook(inode_readlink, 0, dentry); } +EXPORT_SYMBOL_GPL(security_inode_readlink); int security_inode_follow_link(struct dentry *dentry, struct inode *inode, bool rcu) @@ -696,6 +703,7 @@ return 0; return call_int_hook(inode_permission, 0, inode, mask); } +EXPORT_SYMBOL_GPL(security_inode_permission); int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { @@ -867,6 +875,7 @@ return fsnotify_perm(file, mask); } +EXPORT_SYMBOL_GPL(security_file_permission); int security_file_alloc(struct file *file) { @@ -926,6 +935,7 @@ return ret; return ima_file_mmap(file, prot); } +EXPORT_SYMBOL_GPL(security_mmap_file); int security_mmap_addr(unsigned long addr) { --- linux-aws-4.15.0.orig/security/selinux/hooks.c +++ linux-aws-4.15.0/security/selinux/hooks.c @@ -2335,7 +2335,7 @@ const struct task_security_struct *new_tsec) { int nnp = (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS); - int nosuid = !mnt_may_suid(bprm->file->f_path.mnt); + int nosuid = path_nosuid(&bprm->file->f_path); int rc; u32 av; --- linux-aws-4.15.0.orig/snapcraft.yaml +++ linux-aws-4.15.0/snapcraft.yaml @@ -0,0 +1,31 @@ +name: pc-kernel +version: null +version-script: | + . debian/debian.env + dpkg-parsechangelog -l $DEBIAN/changelog -S version +summary: The Ubuntu generic Linux kernel +description: This Ubuntu generic Linux kernel +grade: stable +confinement: strict +type: kernel + +parts: + kernel: + plugin: kernel + source: . + source-type: git + kconfigflavour: generic + kconfigs: + - CONFIG_DEBUG_INFO=n + firmware: + plugin: nil + stage-packages: + - linux-firmware + organize: + lib/firmware: firmware + prime: + - -usr + - -lib + build-packages: + - cpio + - libssl-dev --- linux-aws-4.15.0.orig/sound/pci/hda/patch_realtek.c +++ linux-aws-4.15.0/sound/pci/hda/patch_realtek.c @@ -3154,11 +3154,13 @@ if (hp_pin_sense) msleep(85); + /* 3k pull low control for Headset jack. */ + /* NOTE: call this before clearing the pin, otherwise codec stalls */ + alc_update_coef_idx(codec, 0x46, 0, 3 << 12); + snd_hda_codec_write(codec, hp_pin, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); - alc_update_coef_idx(codec, 0x46, 0, 3 << 12); /* 3k pull low control for Headset jack. */ - if (hp_pin_sense) msleep(100); @@ -3166,6 +3168,93 @@ snd_hda_shutup_pins(codec); } +static void alc225_init(struct hda_codec *codec) +{ + struct alc_spec *spec = codec->spec; + hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0]; + bool hp1_pin_sense, hp2_pin_sense; + + if (!hp_pin) + return; + + msleep(30); + + hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin); + hp2_pin_sense = snd_hda_jack_detect(codec, 0x16); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(2); + + alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */ + + if (hp1_pin_sense) + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + if (hp2_pin_sense) + snd_hda_codec_write(codec, 0x16, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(85); + + if (hp1_pin_sense) + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); + if (hp2_pin_sense) + snd_hda_codec_write(codec, 0x16, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(100); + + alc_update_coef_idx(codec, 0x4a, 3 << 10, 0); + alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */ +} + +static void alc225_shutup(struct hda_codec *codec) +{ + struct alc_spec *spec = codec->spec; + hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0]; + bool hp1_pin_sense, hp2_pin_sense; + + if (!hp_pin) { + alc269_shutup(codec); + return; + } + + /* 3k pull low control for Headset jack. */ + alc_update_coef_idx(codec, 0x4a, 0, 3 << 10); + + hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin); + hp2_pin_sense = snd_hda_jack_detect(codec, 0x16); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(2); + + if (hp1_pin_sense) + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + if (hp2_pin_sense) + snd_hda_codec_write(codec, 0x16, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(85); + + if (hp1_pin_sense) + snd_hda_codec_write(codec, hp_pin, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); + if (hp2_pin_sense) + snd_hda_codec_write(codec, 0x16, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); + + if (hp1_pin_sense || hp2_pin_sense) + msleep(100); + + alc_auto_setup_eapd(codec, false); + snd_hda_shutup_pins(codec); +} + static void alc_default_init(struct hda_codec *codec) { struct alc_spec *spec = codec->spec; @@ -3994,8 +4083,11 @@ case 0x10ec0668: alc_process_coef_fw(codec, coef0668); break; + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: alc_process_coef_fw(codec, coef0225); break; @@ -4117,8 +4209,11 @@ alc_process_coef_fw(codec, coef0688); snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50); break; + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: alc_process_coef_fw(codec, alc225_pre_hsmode); alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x31<<10); @@ -4189,8 +4284,11 @@ }; switch (codec->core.vendor_id) { + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: alc_process_coef_fw(codec, alc225_pre_hsmode); alc_process_coef_fw(codec, coef0225); @@ -4332,8 +4430,11 @@ case 0x10ec0668: alc_process_coef_fw(codec, coef0688); break; + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: val = alc_read_coef_idx(codec, 0x45); if (val & (1 << 9)) @@ -4436,8 +4537,11 @@ case 0x10ec0668: alc_process_coef_fw(codec, coef0688); break; + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: alc_process_coef_fw(codec, coef0225); break; @@ -4566,9 +4670,18 @@ val = alc_read_coef_idx(codec, 0xbe); is_ctia = (val & 0x1c02) == 0x1c02; break; + case 0x10ec0215: case 0x10ec0225: + case 0x10ec0285: case 0x10ec0295: + case 0x10ec0289: case 0x10ec0299: + snd_hda_codec_write(codec, 0x21, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); + msleep(80); + snd_hda_codec_write(codec, 0x21, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); + alc_process_coef_fw(codec, alc225_pre_hsmode); alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000); val = alc_read_coef_idx(codec, 0x45); @@ -4588,6 +4701,12 @@ alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6); alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4); alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000); + + snd_hda_codec_write(codec, 0x21, 0, + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); + msleep(80); + snd_hda_codec_write(codec, 0x21, 0, + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); break; case 0x10ec0867: is_ctia = true; @@ -5322,6 +5441,7 @@ ALC700_FIXUP_INTEL_REFERENCE, ALC274_FIXUP_DELL_BIND_DACS, ALC274_FIXUP_DELL_AIO_LINEOUT_VERB, + ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE, }; static const struct hda_fixup alc269_fixups[] = { @@ -6147,6 +6267,18 @@ .chained = true, .chain_id = ALC274_FIXUP_DELL_BIND_DACS }, + [ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + { 0x16, 0x0101102f }, /* Rear Headset HP */ + { 0x19, 0x02a1913c }, /* use as Front headset mic, without its own jack detect */ + { 0x1a, 0x01a19030 }, /* Rear Headset MIC */ + { 0x1b, 0x02011020 }, + { } + }, + .chained = true, + .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC + }, }; static const struct snd_pci_quirk alc269_fixup_tbl[] = { @@ -6196,6 +6328,7 @@ SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE), SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME), SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER), + SND_PCI_QUIRK(0x1028, 0x080c, "Dell WYSE", ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE), SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), @@ -6611,6 +6744,11 @@ {0x14, 0x90170110}, {0x21, 0x02211020}), SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, + {0x12, 0x90a60130}, + {0x14, 0x90170110}, + {0x14, 0x01011020}, + {0x21, 0x0221101f}), + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, ALC256_STANDARD_PINS), SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC, {0x14, 0x90170110}, @@ -6679,6 +6817,10 @@ {0x12, 0x90a60120}, {0x14, 0x90170110}, {0x21, 0x0321101f}), + SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, + {0x12, 0xb7a60130}, + {0x14, 0x90170110}, + {0x21, 0x04211020}), SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1, ALC290_STANDARD_PINS, {0x15, 0x04211040}, @@ -6929,7 +7071,9 @@ break; case 0x10ec0299: spec->codec_variant = ALC269_TYPE_ALC225; - spec->gen.mixer_nid = 0; /* no loopback on ALC299 */ + spec->shutup = alc225_shutup; + spec->init_hook = alc225_init; + spec->gen.mixer_nid = 0; /* no loopback on ALC225, ALC295 and ALC299 */ break; case 0x10ec0234: case 0x10ec0274: --- linux-aws-4.15.0.orig/sound/soc/codecs/pcm512x-spi.c +++ linux-aws-4.15.0/sound/soc/codecs/pcm512x-spi.c @@ -70,3 +70,7 @@ }; module_spi_driver(pcm512x_spi_driver); + +MODULE_DESCRIPTION("ASoC PCM512x codec driver - SPI"); +MODULE_AUTHOR("Mark Brown "); +MODULE_LICENSE("GPL v2"); --- linux-aws-4.15.0.orig/spl/AUTHORS +++ linux-aws-4.15.0/spl/AUTHORS @@ -0,0 +1,25 @@ +Original author and maintainer. + + Brian Behlendorf + +Additionally the following individuals have all made contributions +to the project and deserve to be acknowledged. + + Alex Zhuravlev + Brian J. Murrell + Chris Dunlap + Chris Dunlop + Darik Horn + Etienne Dechamps + Gunnar Beutner + Jorgen Lundman + Lars Johannsen + Li Wei + Massimo Maggi + Ned Bass + Neependra Khare + Prakash Surya + Ricardo Correia + Richard Yao + Steven Johnson + Yuxuan Shui --- linux-aws-4.15.0.orig/spl/COPYING +++ linux-aws-4.15.0/spl/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. --- linux-aws-4.15.0.orig/spl/DISCLAIMER +++ linux-aws-4.15.0/spl/DISCLAIMER @@ -0,0 +1,24 @@ +This work was produced at the Lawrence Livermore National Laboratory +(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between +the U.S. Department of Energy (DOE) and Lawrence Livermore National +Security, LLC (LLNS) for the operation of LLNL. + +This work was prepared as an account of work sponsored by an agency of +the United States Government. Neither the United States Government nor +Lawrence Livermore National Security, LLC nor any of their employees, +makes any warranty, express or implied, or assumes any liability or +responsibility for the accuracy, completeness, or usefulness of any +information, apparatus, product, or process disclosed, or represents +that its use would not infringe privately-owned rights. + +Reference herein to any specific commercial products, process, or +services by trade name, trademark, manufacturer or otherwise does +not necessarily constitute or imply its endorsement, recommendation, +or favoring by the United States Government or Lawrence Livermore +National Security, LLC. The views and opinions of authors expressed +herein do not necessarily state or reflect those of the Untied States +Government or Lawrence Livermore National Security, LLC, and shall +not be used for advertising or product endorsement purposes. + +The precise terms and conditions for copying, distribution, and +modification are specified in the file "COPYING". --- linux-aws-4.15.0.orig/spl/META +++ linux-aws-4.15.0/spl/META @@ -0,0 +1,8 @@ +Meta: 1 +Name: spl +Branch: 1.0 +Version: 0.7.5 +Release: 1ubuntu1 +Release-Tags: relext +License: GPL +Author: OpenZFS on Linux --- linux-aws-4.15.0.orig/spl/Makefile.am +++ linux-aws-4.15.0/spl/Makefile.am @@ -0,0 +1,55 @@ + +ACLOCAL_AMFLAGS = -I config + +include config/rpm.am +include config/deb.am +include config/tgz.am + +SUBDIRS = include rpm +if CONFIG_USER +SUBDIRS += lib cmd man scripts +endif +if CONFIG_KERNEL +SUBDIRS += module + +extradir = @prefix@/src/spl-$(VERSION) +extra_HEADERS = spl.release.in spl_config.h.in + +kerneldir = @prefix@/src/spl-$(VERSION)/$(LINUX_VERSION) +nodist_kernel_HEADERS = spl.release spl_config.h module/$(LINUX_SYMBOLS) +endif + +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = autogen.sh META DISCLAIMER copy-builtin +EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am + +distclean-local:: + -$(RM) -R autom4te*.cache + -find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ + -o -name .pc -o -name .hg -o -name .git \) -prune -o \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name 'aclocal.m4' -o -size 0 \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \ + -o -name 'Makefile' -o -name '$(LINUX_SYMBOLS)' \ + -o -name '*.order' -o -name '*.markers' \) \ + -type f -print | xargs $(RM) + +dist-hook: + sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ + $(distdir)/META + +ctags: + $(RM) tags + find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags + +etags: + $(RM) TAGS + find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a + +tags: ctags etags + +pkg: @DEFAULT_PACKAGE@ +pkg-dkms: @DEFAULT_PACKAGE@-dkms +pkg-kmod: @DEFAULT_PACKAGE@-kmod +pkg-utils: @DEFAULT_PACKAGE@-utils --- linux-aws-4.15.0.orig/spl/Makefile.in +++ linux-aws-4.15.0/spl/Makefile.in @@ -0,0 +1,1191 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +############################################################################### +# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for RPM packages. +############################################################################### + +############################################################################### +# Copyright (C) 2010 Lawrence Livermore National Security, LLC. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for DEB packages. +# +# Long term native distro specific Debian style packaging should be added. +# In the short term RPM packages are built and converted to DEB packages +# using alien. If someone familiar with Debian style packaging were to +# update the build system to correctly build Debian style packages I would +# happily take it. Until then we will have to make due with alien. +# +############################################################################### + +############################################################################### +# Copyright (C) 2010 Lawrence Livermore National Security, LLC. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for TGZ packages. +# +# Long term native distro specific Slackware style packaging should be added. +# In the short term RPM packages are built and converted to TGZ packages +# using alien. If someone familiar with Slackware style packaging were to +# update the build system to correctly build Slackware style packages I would +# happily take it. Until then we will have to make due with alien. +# +############################################################################### + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@CONFIG_USER_TRUE@am__append_1 = lib cmd man scripts +@CONFIG_KERNEL_TRUE@am__append_2 = module +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__extra_HEADERS_DIST) \ + $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = spl_config.h +CONFIG_CLEAN_FILES = module/Makefile module/spl/Makefile \ + module/splat/Makefile spl.release +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__extra_HEADERS_DIST = spl.release.in spl_config.h.in +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(extradir)" "$(DESTDIR)$(kerneldir)" +HEADERS = $(extra_HEADERS) $(nodist_kernel_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)spl_config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = include rpm lib cmd man scripts module +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config/deb.am \ + $(srcdir)/config/rpm.am $(srcdir)/config/tgz.am \ + $(srcdir)/spl.release.in $(srcdir)/spl_config.h.in \ + $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \ + $(top_srcdir)/config/config.sub \ + $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ + $(top_srcdir)/config/missing $(top_srcdir)/module/Makefile.in \ + $(top_srcdir)/module/spl/Makefile.in \ + $(top_srcdir)/module/splat/Makefile.in AUTHORS COPYING \ + config/compile config/config.guess config/config.sub \ + config/install-sh config/ltmain.sh config/missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I config +SUBDIRS = include rpm $(am__append_1) $(am__append_2) +@CONFIG_KERNEL_TRUE@extradir = @prefix@/src/spl-$(VERSION) +@CONFIG_KERNEL_TRUE@extra_HEADERS = spl.release.in spl_config.h.in +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/$(LINUX_VERSION) +@CONFIG_KERNEL_TRUE@nodist_kernel_HEADERS = spl.release spl_config.h module/$(LINUX_SYMBOLS) +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = autogen.sh META DISCLAIMER copy-builtin config/config.awk \ + config/rpm.am config/deb.am config/tgz.am +all: spl_config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/config/rpm.am $(srcdir)/config/deb.am $(srcdir)/config/tgz.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/config/rpm.am $(srcdir)/config/deb.am $(srcdir)/config/tgz.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +spl_config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/spl_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status spl_config.h +$(srcdir)/spl_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f spl_config.h stamp-h1 +module/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/spl/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/spl/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/splat/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/splat/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +spl.release: $(top_builddir)/config.status $(srcdir)/spl.release.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-extraHEADERS: $(extra_HEADERS) + @$(NORMAL_INSTALL) + @list='$(extra_HEADERS)'; test -n "$(extradir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(extradir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(extradir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(extradir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(extradir)" || exit $$?; \ + done + +uninstall-extraHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(extra_HEADERS)'; test -n "$(extradir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(extradir)'; $(am__uninstall_files_from_dir) +install-nodist_kernelHEADERS: $(nodist_kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-nodist_kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) spl_config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(extradir)" "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-extraHEADERS install-nodist_kernelHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-extraHEADERS uninstall-nodist_kernelHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ + dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-local distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-extraHEADERS install-html install-html-am install-info \ + install-info-am install-man install-nodist_kernelHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-extraHEADERS uninstall-nodist_kernelHEADERS + +.PRECIOUS: Makefile + + +srpm-kmod: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common + +srpm-dkms: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common + +srpm-utils: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common + +srpm: srpm-kmod srpm-dkms srpm-utils +srpms: srpm-kmod srpm-dkms srpm-utils + +rpm-kmod: srpm-kmod + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common + +rpm-dkms: srpm-dkms + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common + +rpm-utils: srpm-utils + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common + +rpm: rpm-kmod rpm-dkms rpm-utils +rpms: rpm-kmod rpm-dkms rpm-utils + +rpm-local: + @(if test "${HAVE_RPMBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${RPMBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${RPMBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + mkdir -p $(rpmbuild)/TMP && \ + mkdir -p $(rpmbuild)/BUILD && \ + mkdir -p $(rpmbuild)/RPMS && \ + mkdir -p $(rpmbuild)/SRPMS && \ + mkdir -p $(rpmbuild)/SPECS && \ + cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \ + mkdir -p $(rpmbuild)/SOURCES && \ + cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \ + cp $(distdir).tar.gz $(rpmbuild)/SOURCES) + +srpm-common: dist + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C $(RPMBUILD) \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \ + cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \ + rm -R $$rpmbuild) + +rpm-common: + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C ${RPMBUILD} \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) --rebuild $$rpmpkg || exit 1; \ + cp $$rpmbuild/RPMS/*/* . || exit 1; \ + rm -R $$rpmbuild) + +deb-local: + @(if test "${HAVE_DPKGBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${DPKGBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${DPKGBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +deb-kmod: deb-local rpm-kmod + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-dkms: deb-local rpm-dkms + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-dkms-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-dkms-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-utils: deb-local rpm-utils + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb: deb-kmod deb-dkms deb-utils + +tgz-local: + @(if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +tgz-kmod: tgz-local rpm-kmod +@CONFIG_KERNEL_TRUE@ name=${PACKAGE}; \ +@CONFIG_KERNEL_TRUE@ version=${VERSION}-${RELEASE}; \ +@CONFIG_KERNEL_TRUE@ arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ +@CONFIG_KERNEL_TRUE@ pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ +@CONFIG_KERNEL_TRUE@ fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ +@CONFIG_KERNEL_TRUE@ $(RM) $$pkg1 + +tgz-utils: tgz-local rpm-utils +@CONFIG_USER_TRUE@ name=${PACKAGE}; \ +@CONFIG_USER_TRUE@ version=${VERSION}-${RELEASE}; \ +@CONFIG_USER_TRUE@ arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ +@CONFIG_USER_TRUE@ pkg1=$${name}-$${version}.$${arch}.rpm; \ +@CONFIG_USER_TRUE@ fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ +@CONFIG_USER_TRUE@ $(RM) $$pkg1 + +tgz: tgz-kmod tgz-utils + +distclean-local:: + -$(RM) -R autom4te*.cache + -find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ + -o -name .pc -o -name .hg -o -name .git \) -prune -o \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name 'aclocal.m4' -o -size 0 \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \ + -o -name 'Makefile' -o -name '$(LINUX_SYMBOLS)' \ + -o -name '*.order' -o -name '*.markers' \) \ + -type f -print | xargs $(RM) + +dist-hook: + sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ + $(distdir)/META + +ctags: + $(RM) tags + find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags + +etags: + $(RM) TAGS + find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a + +tags: ctags etags + +pkg: @DEFAULT_PACKAGE@ +pkg-dkms: @DEFAULT_PACKAGE@-dkms +pkg-kmod: @DEFAULT_PACKAGE@-kmod +pkg-utils: @DEFAULT_PACKAGE@-utils + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/aclocal.m4 +++ linux-aws-4.15.0/spl/aclocal.m4 @@ -0,0 +1,1195 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([config/libtool.m4]) +m4_include([config/ltoptions.m4]) +m4_include([config/ltsugar.m4]) +m4_include([config/ltversion.m4]) +m4_include([config/lt~obsolete.m4]) +m4_include([config/spl-build.m4]) +m4_include([config/spl-meta.m4]) --- linux-aws-4.15.0.orig/spl/autogen.sh +++ linux-aws-4.15.0/spl/autogen.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +autoreconf -fiv +rm -Rf autom4te.cache --- linux-aws-4.15.0.orig/spl/cmd/Makefile.am +++ linux-aws-4.15.0/spl/cmd/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = splat splslab --- linux-aws-4.15.0.orig/spl/cmd/Makefile.in +++ linux-aws-4.15.0/spl/cmd/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = cmd +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = splat splslab +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cmd/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu cmd/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/cmd/splat/Makefile.am +++ linux-aws-4.15.0/spl/cmd/splat/Makefile.am @@ -0,0 +1,11 @@ +include $(top_srcdir)/config/Rules.am + +DEFAULT_INCLUDES += \ + -I$(top_srcdir)/lib + +sbin_PROGRAMS = splat + +splat_SOURCES = splat.c +splat_LDFLAGS = $(top_builddir)/lib/libcommon.la + +EXTRA_DIST = splat.h --- linux-aws-4.15.0.orig/spl/cmd/splat/Makefile.in +++ linux-aws-4.15.0/spl/cmd/splat/Makefile.in @@ -0,0 +1,703 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Common rules for user space components. +############################################################################### + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +sbin_PROGRAMS = splat$(EXEEXT) +subdir = cmd/splat +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(sbindir)" +PROGRAMS = $(sbin_PROGRAMS) +am_splat_OBJECTS = splat.$(OBJEXT) +splat_OBJECTS = $(am_splat_OBJECTS) +splat_LDADD = $(LDADD) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +splat_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(splat_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(splat_SOURCES) +DIST_SOURCES = $(splat_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/Rules.am \ + $(top_srcdir)/config/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +DEFAULT_INCLUDES = -include ${top_builddir}/spl_config.h \ + -I$(top_srcdir)/lib +AM_LIBTOOLFLAGS = --silent +AM_CPPFLAGS = -D__USE_LARGEFILE64 +AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing \ + ${DEBUG_CFLAGS} +splat_SOURCES = splat.c +splat_LDFLAGS = $(top_builddir)/lib/libcommon.la +EXTRA_DIST = splat.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/Rules.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cmd/splat/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu cmd/splat/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/config/Rules.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +splat$(EXEEXT): $(splat_OBJECTS) $(splat_DEPENDENCIES) $(EXTRA_splat_DEPENDENCIES) + @rm -f splat$(EXEEXT) + $(AM_V_CCLD)$(splat_LINK) $(splat_OBJECTS) $(splat_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splat.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(sbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-sbinPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sbinPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-sbinPROGRAMS install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-sbinPROGRAMS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/cmd/splat/splat.c +++ linux-aws-4.15.0/spl/cmd/splat/splat.c @@ -0,0 +1,836 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) User Space Interface. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "splat.h" + +#undef ioctl + +static const char shortOpts[] = "hvlat:xc"; +static const struct option longOpts[] = { + { "help", no_argument, 0, 'h' }, + { "verbose", no_argument, 0, 'v' }, + { "list", no_argument, 0, 'l' }, + { "all", no_argument, 0, 'a' }, + { "test", required_argument, 0, 't' }, + { "exit", no_argument, 0, 'x' }, + { "nocolor", no_argument, 0, 'c' }, + { 0, 0, 0, 0 } +}; + +#define VERSION_SIZE 64 + +static List subsystems; /* Subsystem/tests */ +static int splatctl_fd; /* Control file descriptor */ +static char splat_version[VERSION_SIZE]; /* Kernel version string */ +static char *splat_buffer = NULL; /* Scratch space area */ +static int splat_buffer_size = 0; /* Scratch space size */ + + +static void test_list(List, int); +static int dev_clear(void); +static void subsystem_fini(subsystem_t *); +static void test_fini(test_t *); + + +static int usage(void) { + fprintf(stderr, "usage: splat [hvla] [-t >]\n"); + fprintf(stderr, + " --help -h This help\n" + " --verbose -v Increase verbosity\n" + " --list -l List all tests in all subsystems\n" + " --all -a Run all tests in all subsystems\n" + " --test -t Run 'test' in subsystem 'sub'\n" + " --exit -x Exit on first test error\n" + " --nocolor -c Do not colorize output\n"); + fprintf(stderr, "\n" + "Examples:\n" + " splat -t kmem:all # Runs all kmem tests\n" + " splat -t taskq:0x201 # Run taskq test 0x201\n"); + + return 0; +} + +static subsystem_t *subsystem_init(splat_user_t *desc) +{ + subsystem_t *sub; + + sub = (subsystem_t *)malloc(sizeof(*sub)); + if (sub == NULL) + return NULL; + + memcpy(&sub->sub_desc, desc, sizeof(*desc)); + + sub->sub_tests = list_create((ListDelF)test_fini); + if (sub->sub_tests == NULL) { + free(sub); + return NULL; + } + + return sub; +} + +static void subsystem_fini(subsystem_t *sub) +{ + assert(sub != NULL); + free(sub); +} + +static int subsystem_setup(void) +{ + splat_cfg_t *cfg; + int i, rc, size, cfg_size; + subsystem_t *sub; + splat_user_t *desc; + + /* Aquire the number of registered subsystems */ + cfg_size = sizeof(*cfg); + cfg = (splat_cfg_t *)malloc(cfg_size); + if (cfg == NULL) + return -ENOMEM; + + memset(cfg, 0, cfg_size); + cfg->cfg_magic = SPLAT_CFG_MAGIC; + cfg->cfg_cmd = SPLAT_CFG_SUBSYSTEM_COUNT; + + rc = ioctl(splatctl_fd, SPLAT_CFG, cfg); + if (rc) { + fprintf(stderr, "Ioctl() error 0x%lx / %d: %d\n", + (unsigned long)SPLAT_CFG, cfg->cfg_cmd, errno); + free(cfg); + return rc; + } + + size = cfg->cfg_rc1; + free(cfg); + + /* Based on the newly acquired number of subsystems allocate + * memory to get the descriptive information for them all. */ + cfg_size = sizeof(*cfg) + size * sizeof(splat_user_t); + cfg = (splat_cfg_t *)malloc(cfg_size); + if (cfg == NULL) + return -ENOMEM; + + memset(cfg, 0, cfg_size); + cfg->cfg_magic = SPLAT_CFG_MAGIC; + cfg->cfg_cmd = SPLAT_CFG_SUBSYSTEM_LIST; + cfg->cfg_data.splat_subsystems.size = size; + + rc = ioctl(splatctl_fd, SPLAT_CFG, cfg); + if (rc) { + fprintf(stderr, "Ioctl() error %lu / %d: %d\n", + (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno); + free(cfg); + return rc; + } + + /* Add the new subsystems in to the global list */ + size = cfg->cfg_rc1; + for (i = 0; i < size; i++) { + desc = &(cfg->cfg_data.splat_subsystems.descs[i]); + + sub = subsystem_init(desc); + if (sub == NULL) { + fprintf(stderr, "Error initializing subsystem: %s\n", + desc->name); + free(cfg); + return -ENOMEM; + } + + list_append(subsystems, sub); + } + + free(cfg); + return 0; +} + +static void subsystem_list(List l, int indent) +{ + ListIterator i; + subsystem_t *sub; + + fprintf(stdout, + "------------------------------ " + "Available SPLAT Tests " + "------------------------------\n"); + + i = list_iterator_create(l); + + while ((sub = list_next(i))) { + fprintf(stdout, "%*s0x%0*x %-*s ---- %s ----\n", + indent, "", + 4, sub->sub_desc.id, + SPLAT_NAME_SIZE + 7, sub->sub_desc.name, + sub->sub_desc.desc); + test_list(sub->sub_tests, indent + 7); + } + + list_iterator_destroy(i); +} + +static test_t *test_init(subsystem_t *sub, splat_user_t *desc) +{ + test_t *test; + + test = (test_t *)malloc(sizeof(*test)); + if (test == NULL) + return NULL; + + test->test_sub = sub; + memcpy(&test->test_desc, desc, sizeof(*desc)); + + return test; +} + +static void test_fini(test_t *test) +{ + assert(test != NULL); + free(test); +} + +static int test_setup(subsystem_t *sub) +{ + splat_cfg_t *cfg; + int i, rc, size; + test_t *test; + splat_user_t *desc; + + /* Aquire the number of registered tests for the give subsystem */ + cfg = (splat_cfg_t *)malloc(sizeof(*cfg)); + if (cfg == NULL) + return -ENOMEM; + + memset(cfg, 0, sizeof(*cfg)); + cfg->cfg_magic = SPLAT_CFG_MAGIC; + cfg->cfg_cmd = SPLAT_CFG_TEST_COUNT; + cfg->cfg_arg1 = sub->sub_desc.id; /* Subsystem of interest */ + + rc = ioctl(splatctl_fd, SPLAT_CFG, cfg); + if (rc) { + fprintf(stderr, "Ioctl() error %lu / %d: %d\n", + (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno); + free(cfg); + return rc; + } + + size = cfg->cfg_rc1; + free(cfg); + + /* Based on the newly aquired number of tests allocate enough + * memory to get the descriptive information for them all. */ + cfg = (splat_cfg_t *)malloc(sizeof(*cfg) + size*sizeof(splat_user_t)); + if (cfg == NULL) + return -ENOMEM; + + memset(cfg, 0, sizeof(*cfg) + size * sizeof(splat_user_t)); + cfg->cfg_magic = SPLAT_CFG_MAGIC; + cfg->cfg_cmd = SPLAT_CFG_TEST_LIST; + cfg->cfg_arg1 = sub->sub_desc.id; /* Subsystem of interest */ + cfg->cfg_data.splat_tests.size = size; + + rc = ioctl(splatctl_fd, SPLAT_CFG, cfg); + if (rc) { + fprintf(stderr, "Ioctl() error %lu / %d: %d\n", + (unsigned long) SPLAT_CFG, cfg->cfg_cmd, errno); + free(cfg); + return rc; + } + + /* Add the new tests in to the relevant subsystems */ + size = cfg->cfg_rc1; + for (i = 0; i < size; i++) { + desc = &(cfg->cfg_data.splat_tests.descs[i]); + + test = test_init(sub, desc); + if (test == NULL) { + fprintf(stderr, "Error initializing test: %s\n", + desc->name); + free(cfg); + return -ENOMEM; + } + + list_append(sub->sub_tests, test); + } + + free(cfg); + return 0; +} + +static test_t *test_copy(test_t *test) +{ + return test_init(test->test_sub, &test->test_desc); +} + +static void test_list(List l, int indent) +{ + ListIterator i; + test_t *test; + + i = list_iterator_create(l); + + while ((test = list_next(i))) + fprintf(stdout, "%*s0x%0*x %-*s %s\n", + indent, "", 04, test->test_desc.id, + SPLAT_NAME_SIZE, test->test_desc.name, + test->test_desc.desc); + + list_iterator_destroy(i); +} + +static test_t *test_find(char *sub_str, char *test_str) +{ + ListIterator si, ti; + subsystem_t *sub; + test_t *test; + __u32 sub_num, test_num; + + /* + * No error checking here because it may not be a number, it's + * perfectly OK for it to be a string. Since we're just using + * it for comparison purposes this is all very safe. + */ + sub_num = strtoul(sub_str, NULL, 0); + test_num = strtoul(test_str, NULL, 0); + + si = list_iterator_create(subsystems); + + while ((sub = list_next(si))) { + + if (strncmp(sub->sub_desc.name, sub_str, SPLAT_NAME_SIZE) && + sub->sub_desc.id != sub_num) + continue; + + ti = list_iterator_create(sub->sub_tests); + + while ((test = list_next(ti))) { + + if (!strncmp(test->test_desc.name, test_str, + SPLAT_NAME_SIZE) || test->test_desc.id==test_num) { + list_iterator_destroy(ti); + list_iterator_destroy(si); + return test; + } + } + + list_iterator_destroy(ti); + } + + list_iterator_destroy(si); + + return NULL; +} + +static int test_add(cmd_args_t *args, test_t *test) +{ + test_t *tmp; + + tmp = test_copy(test); + if (tmp == NULL) + return -ENOMEM; + + list_append(args->args_tests, tmp); + return 0; +} + +static int test_add_all(cmd_args_t *args) +{ + ListIterator si, ti; + subsystem_t *sub; + test_t *test; + int rc; + + si = list_iterator_create(subsystems); + + while ((sub = list_next(si))) { + ti = list_iterator_create(sub->sub_tests); + + while ((test = list_next(ti))) { + if ((rc = test_add(args, test))) { + list_iterator_destroy(ti); + list_iterator_destroy(si); + return rc; + } + } + + list_iterator_destroy(ti); + } + + list_iterator_destroy(si); + + return 0; +} + +static int test_run(cmd_args_t *args, test_t *test) +{ + subsystem_t *sub = test->test_sub; + splat_cmd_t *cmd; + int rc, cmd_size; + + dev_clear(); + + cmd_size = sizeof(*cmd); + cmd = (splat_cmd_t *)malloc(cmd_size); + if (cmd == NULL) + return -ENOMEM; + + memset(cmd, 0, cmd_size); + cmd->cmd_magic = SPLAT_CMD_MAGIC; + cmd->cmd_subsystem = sub->sub_desc.id; + cmd->cmd_test = test->test_desc.id; + cmd->cmd_data_size = 0; /* Unused feature */ + + fprintf(stdout, "%*s:%-*s ", + SPLAT_NAME_SIZE, sub->sub_desc.name, + SPLAT_NAME_SIZE, test->test_desc.name); + fflush(stdout); + rc = ioctl(splatctl_fd, SPLAT_CMD, cmd); + if (args->args_do_color) { + fprintf(stdout, "%s %s\n", rc ? + COLOR_RED "Fail" COLOR_RESET : + COLOR_GREEN "Pass" COLOR_RESET, + rc ? strerror(errno) : ""); + } else { + fprintf(stdout, "%s %s\n", rc ? + "Fail" : "Pass", + rc ? strerror(errno) : ""); + } + fflush(stdout); + free(cmd); + + if ((args->args_verbose == 1 && rc) || + (args->args_verbose >= 2)) { + if ((rc = read(splatctl_fd, splat_buffer, + splat_buffer_size - 1)) < 0) { + fprintf(stdout, "Error reading results: %d\n", rc); + } else { + fprintf(stdout, "\n%s\n", splat_buffer); + fflush(stdout); + } + } + + return rc; +} + +static int tests_run(cmd_args_t *args) +{ + ListIterator i; + test_t *test; + int rc; + + fprintf(stdout, + "------------------------------ " + "Running SPLAT Tests " + "------------------------------\n"); + + i = list_iterator_create(args->args_tests); + + while ((test = list_next(i))) { + rc = test_run(args, test); + if (rc && args->args_exit_on_error) { + list_iterator_destroy(i); + return rc; + } + } + + list_iterator_destroy(i); + return 0; +} + +static int args_parse_test(cmd_args_t *args, char *str) +{ + ListIterator si, ti; + subsystem_t *s; + test_t *t; + char *sub_str, *test_str; + int sub_num, test_num; + int sub_all = 0, test_all = 0; + int rc, flag = 0; + + test_str = strchr(str, ':'); + if (test_str == NULL) { + fprintf(stderr, "Test must be of the " + "form \n"); + return -EINVAL; + } + + sub_str = str; + test_str[0] = '\0'; + test_str = test_str + 1; + + sub_num = strtol(sub_str, NULL, 0); + test_num = strtol(test_str, NULL, 0); + + if (!strncasecmp(sub_str, "all", strlen(sub_str)) || (sub_num == -1)) + sub_all = 1; + + if (!strncasecmp(test_str,"all",strlen(test_str)) || (test_num == -1)) + test_all = 1; + + si = list_iterator_create(subsystems); + + if (sub_all) { + if (test_all) { + /* Add all tests from all subsystems */ + while ((s = list_next(si))) { + ti = list_iterator_create(s->sub_tests); + while ((t = list_next(ti))) { + if ((rc = test_add(args, t))) { + list_iterator_destroy(ti); + goto error_run; + } + } + list_iterator_destroy(ti); + } + } else { + /* Add a specific test from all subsystems */ + while ((s = list_next(si))) { + if ((t=test_find(s->sub_desc.name,test_str))) { + if ((rc = test_add(args, t))) + goto error_run; + + flag = 1; + } + } + + if (!flag) + fprintf(stderr, "No tests '%s:%s' could be " + "found\n", sub_str, test_str); + } + } else { + if (test_all) { + /* Add all tests from a specific subsystem */ + while ((s = list_next(si))) { + if (strncasecmp(sub_str, s->sub_desc.name, + strlen(sub_str))) + continue; + + ti = list_iterator_create(s->sub_tests); + while ((t = list_next(ti))) { + if ((rc = test_add(args, t))) { + list_iterator_destroy(ti); + goto error_run; + } + } + list_iterator_destroy(ti); + } + } else { + /* Add a specific test from a specific subsystem */ + if ((t = test_find(sub_str, test_str))) { + if ((rc = test_add(args, t))) + goto error_run; + } else { + fprintf(stderr, "Test '%s:%s' could not be " + "found\n", sub_str, test_str); + return -EINVAL; + } + } + } + + list_iterator_destroy(si); + + return 0; + +error_run: + list_iterator_destroy(si); + + fprintf(stderr, "Test '%s:%s' not added to run list: %d\n", + sub_str, test_str, rc); + + return rc; +} + +static void args_fini(cmd_args_t *args) +{ + assert(args != NULL); + + if (args->args_tests != NULL) + list_destroy(args->args_tests); + + free(args); +} + +static cmd_args_t * +args_init(int argc, char **argv) +{ + cmd_args_t *args; + int c, rc; + + if (argc == 1) { + usage(); + return (cmd_args_t *) NULL; + } + + /* Configure and populate the args structures */ + args = malloc(sizeof(*args)); + if (args == NULL) + return NULL; + + memset(args, 0, sizeof(*args)); + args->args_verbose = 0; + args->args_do_list = 0; + args->args_do_all = 0; + args->args_do_color = 1; + args->args_exit_on_error = 0; + args->args_tests = list_create((ListDelF)test_fini); + if (args->args_tests == NULL) { + args_fini(args); + return NULL; + } + + while ((c = getopt_long(argc, argv, shortOpts, longOpts, NULL)) != -1){ + switch (c) { + case 'v': args->args_verbose++; break; + case 'l': args->args_do_list = 1; break; + case 'a': args->args_do_all = 1; break; + case 'c': args->args_do_color = 0; break; + case 'x': args->args_exit_on_error = 1; break; + case 't': + if (args->args_do_all) { + fprintf(stderr, "Option -t is " + "useless when used with -a\n"); + args_fini(args); + return NULL; + } + + rc = args_parse_test(args, argv[optind - 1]); + if (rc) { + args_fini(args); + return NULL; + } + break; + case 'h': + case '?': + usage(); + args_fini(args); + return NULL; + default: + fprintf(stderr, "Unknown option '%s'\n", + argv[optind - 1]); + break; + } + } + + return args; +} + +static int +dev_clear(void) +{ + splat_cfg_t cfg; + int rc; + + memset(&cfg, 0, sizeof(cfg)); + cfg.cfg_magic = SPLAT_CFG_MAGIC; + cfg.cfg_cmd = SPLAT_CFG_BUFFER_CLEAR; + cfg.cfg_arg1 = 0; + + rc = ioctl(splatctl_fd, SPLAT_CFG, &cfg); + if (rc) + fprintf(stderr, "Ioctl() error %lu / %d: %d\n", + (unsigned long) SPLAT_CFG, cfg.cfg_cmd, errno); + + lseek(splatctl_fd, 0, SEEK_SET); + + return rc; +} + +static int +dev_size(int size) +{ + splat_cfg_t cfg; + int rc; + + memset(&cfg, 0, sizeof(cfg)); + cfg.cfg_magic = SPLAT_CFG_MAGIC; + cfg.cfg_cmd = SPLAT_CFG_BUFFER_SIZE; + cfg.cfg_arg1 = size; + + rc = ioctl(splatctl_fd, SPLAT_CFG, &cfg); + if (rc) { + fprintf(stderr, "Ioctl() error %lu / %d: %d\n", + (unsigned long) SPLAT_CFG, cfg.cfg_cmd, errno); + return rc; + } + + return cfg.cfg_rc1; +} + +static void +dev_fini(void) +{ + if (splat_buffer) + free(splat_buffer); + + if (splatctl_fd != -1) { + if (close(splatctl_fd) == -1) { + fprintf(stderr, "Unable to close %s: %d\n", + SPLAT_DEV, errno); + } + } +} + +static int +dev_init(void) +{ + ListIterator i; + subsystem_t *sub; + int rc; + + splatctl_fd = open(SPLAT_DEV, O_RDONLY); + if (splatctl_fd == -1) { + fprintf(stderr, "Unable to open %s: %d\n" + "Is the splat module loaded?\n", SPLAT_DEV, errno); + rc = errno; + goto error; + } + + /* Determine kernel module version string */ + memset(splat_version, 0, VERSION_SIZE); + if ((rc = read(splatctl_fd, splat_version, VERSION_SIZE - 1)) == -1) + goto error; + + if ((rc = dev_clear())) + goto error; + + if ((rc = dev_size(0)) < 0) + goto error; + + splat_buffer_size = rc; + splat_buffer = (char *)malloc(splat_buffer_size); + if (splat_buffer == NULL) { + rc = -ENOMEM; + goto error; + } + + memset(splat_buffer, 0, splat_buffer_size); + + /* Determine available subsystems */ + if ((rc = subsystem_setup()) != 0) + goto error; + + /* Determine available tests for all subsystems */ + i = list_iterator_create(subsystems); + + while ((sub = list_next(i))) { + if ((rc = test_setup(sub)) != 0) { + list_iterator_destroy(i); + goto error; + } + } + + list_iterator_destroy(i); + return 0; + +error: + if (splatctl_fd != -1) { + if (close(splatctl_fd) == -1) { + fprintf(stderr, "Unable to close %s: %d\n", + SPLAT_DEV, errno); + } + } + + return rc; +} + +int +init(void) +{ + int rc = 0; + + /* Allocate the subsystem list */ + subsystems = list_create((ListDelF)subsystem_fini); + if (subsystems == NULL) + rc = ENOMEM; + + return rc; +} + +void +fini(void) +{ + list_destroy(subsystems); +} + + +int +main(int argc, char **argv) +{ + cmd_args_t *args = NULL; + int rc = 0; + + /* General init */ + if ((rc = init())) + return rc; + + /* Device specific init */ + if ((rc = dev_init())) + goto out; + + /* Argument init and parsing */ + if ((args = args_init(argc, argv)) == NULL) { + rc = -1; + goto out; + } + + /* Generic kernel version string */ + if (args->args_verbose) + fprintf(stdout, "%s", splat_version); + + /* Print the available test list and exit */ + if (args->args_do_list) { + subsystem_list(subsystems, 0); + goto out; + } + + /* Add all available test to the list of tests to run */ + if (args->args_do_all) { + if ((rc = test_add_all(args))) + goto out; + } + + /* Run all the requested tests */ + if ((rc = tests_run(args))) + goto out; + +out: + if (args != NULL) + args_fini(args); + + dev_fini(); + fini(); + return rc; +} --- linux-aws-4.15.0.orig/spl/cmd/splat/splat.h +++ linux-aws-4.15.0/spl/cmd/splat/splat.h @@ -0,0 +1,70 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPLAT_H +#define _SPLAT_H + +#include "list.h" +#include "../include/splat-ctl.h" + +#define DEV_NAME "/dev/splatctl" +#define COLOR_BLACK "\033[0;30m" +#define COLOR_DK_GRAY "\033[1;30m" +#define COLOR_BLUE "\033[0;34m" +#define COLOR_LT_BLUE "\033[1;34m" +#define COLOR_GREEN "\033[0;32m" +#define COLOR_LT_GREEN "\033[1;32m" +#define COLOR_CYAN "\033[0;36m" +#define COLOR_LT_CYAN "\033[1;36m" +#define COLOR_RED "\033[0;31m" +#define COLOR_LT_RED "\033[1;31m" +#define COLOR_PURPLE "\033[0;35m" +#define COLOR_LT_PURPLE "\033[1;35m" +#define COLOR_BROWN "\033[0;33m" +#define COLOR_YELLOW "\033[1;33m" +#define COLOR_LT_GRAY "\033[0;37m" +#define COLOR_WHITE "\033[1;37m" +#define COLOR_RESET "\033[0m" + +typedef struct subsystem { + splat_user_t sub_desc; /* Subsystem description */ + List sub_tests; /* Assocated subsystem tests list */ +} subsystem_t; + +typedef struct test { + splat_user_t test_desc; /* Test description */ + subsystem_t *test_sub; /* Parent subsystem */ +} test_t; + +typedef struct cmd_args { + int args_verbose; /* Verbose flag */ + int args_do_list; /* Display all tests flag */ + int args_do_all; /* Run all tests flag */ + int args_do_color; /* Colorize output */ + int args_exit_on_error; /* Exit on first error flag */ + List args_tests; /* Requested subsystems/tests */ +} cmd_args_t; + +#endif /* _SPLAT_H */ + --- linux-aws-4.15.0.orig/spl/cmd/splslab/Makefile.am +++ linux-aws-4.15.0/spl/cmd/splslab/Makefile.am @@ -0,0 +1,2 @@ +bin_SCRIPTS = splslab.py +EXTRA_DIST = $(bin_SCRIPTS) --- linux-aws-4.15.0.orig/spl/cmd/splslab/Makefile.in +++ linux-aws-4.15.0/spl/cmd/splslab/Makefile.in @@ -0,0 +1,563 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = cmd/splslab +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(bindir)" +SCRIPTS = $(bin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +bin_SCRIPTS = splslab.py +EXTRA_DIST = $(bin_SCRIPTS) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cmd/splslab/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu cmd/splslab/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binSCRIPTS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-binSCRIPTS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-binSCRIPTS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/cmd/splslab/splslab.py +++ linux-aws-4.15.0/spl/cmd/splslab/splslab.py @@ -0,0 +1,202 @@ +#!/usr/bin/python + +import sys +import time +import getopt +import re +import signal +from collections import defaultdict + +class Stat: + # flag definitions based on the kmem.h + NOTOUCH = 1 + NODEBUG = 2 + KMEM = 32 + VMEM = 64 + SLAB = 128 + OFFSLAB = 256 + NOEMERGENCY = 512 + DEADLOCKED = 16384 + GROWING = 32768 + REAPING = 65536 + DESTROY = 131072 + + fdefs = { + NOTOUCH : "NTCH", + NODEBUG : "NDBG", + KMEM : "KMEM", + VMEM : "VMEM", + SLAB : "SLAB", + OFFSLAB : "OFSL", + NOEMERGENCY : "NEMG", + DEADLOCKED : "DDLK", + GROWING : "GROW", + REAPING : "REAP", + DESTROY : "DSTR" + } + + def __init__(self, name, flags, size, alloc, slabsize, objsize): + self._name = name + self._flags = self.f2str(flags) + self._size = size + self._alloc = alloc + self._slabsize = slabsize + self._objsize = objsize + + def f2str(self, flags): + fstring = '' + for k in Stat.fdefs.keys(): + if flags & k: + fstring = fstring + Stat.fdefs[k] + '|' + + fstring = fstring[:-1] + return fstring + +class CumulativeStat: + def __init__(self, skey="a"): + self._size = 0 + self._alloc = 0 + self._pct = 0 + self._skey = skey + self._regexp = \ + re.compile('(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+'); + self._stats = defaultdict(list) + + # Add another stat to the dictionary and re-calculate the totals + def add(self, s): + key = 0 + if self._skey == "a": + key = s._alloc + else: + key = s._size + self._stats[key].append(s) + self._size = self._size + s._size + self._alloc = self._alloc + s._alloc + if self._size: + self._pct = self._alloc * 100 / self._size + else: + self._pct = 0 + + # Parse the slab info in the procfs + # Calculate cumulative stats + def slab_update(self): + k = [line.strip() for line in open('/proc/spl/kmem/slab')] + + if not k: + sys.stderr.write("No SPL slab stats found\n") + sys.exit(1) + + del k[0:2] + + for s in k: + if not s: + continue + m = self._regexp.match(s) + if m: + self.add(Stat(m.group(1), int(m.group(2),16), int(m.group(3)), + int(m.group(4)), int(m.group(5)), int(m.group(6)))) + else: + sys.stderr.write("Error: unexpected input format\n" % s) + exit(-1) + + def show_header(self): + sys.stdout.write("\n%25s %20s %15s %15s %15s %15s\n\n" % \ + ("cache name", "flags", "size", "alloc", "slabsize", "objsize")) + + # Show up to the number of 'rows' of output sorted in descending order + # by the key specified earlier; if rows == 0, all rows are shown + def show(self, rows): + self.show_header() + i = 1 + done = False + for k in reversed(sorted(self._stats.keys())): + for s in self._stats[k]: + sys.stdout.write("%25s %20s %15d %15d %15d %15d\n" % \ + (s._name, s._flags, s._size, s._alloc, \ + s._slabsize, s._objsize)) + i = i + 1 + if rows != 0 and i > rows: + done = True + break + if done: + break + sys.stdout.write("%25s %36d %15d (%d%%)\n\n" % \ + ("Totals:", self._size, self._alloc, self._pct)) + +def usage(): + cmd = "Usage: splslab.py [-n|--num-rows] number [-s|--sort-by] " + \ + "[interval] [count]"; + sys.stderr.write("%s\n" % cmd) + sys.stderr.write("\t-h : print help\n") + sys.stderr.write("\t-n : --num-rows N : limit output to N top " + + "largest slabs (default: all)\n") + sys.stderr.write("\t-s : --sort-by key : sort output in descending " + + "order by total size (s)\n\t\tor allocated size (a) " + + "(default: a)\n") + sys.stderr.write("\tinterval : repeat every interval seconds\n") + sys.stderr.write("\tcount : output statistics count times and exit\n") + + +def main(): + + rows = 0 + count = 0 + skey = "a" + interval = 1 + + signal.signal(signal.SIGINT, signal.SIG_DFL) + + try: + opts, args = getopt.getopt( + sys.argv[1:], + "n:s:h", + [ + "num-rows", + "sort-by", + "help" + ] + ) + except getopt.error as e: + sys.stderr.write("Error: %s\n" % e.msg) + usage() + exit(-1) + + i = 1 + for opt, arg in opts: + if opt in ('-n', '--num-rows'): + rows = int(arg) + i = i + 2 + elif opt in ('-s', '--sort-by'): + if arg != "s" and arg != "a": + sys.stderr.write("Error: invalid sorting key \"%s\"\n" % arg) + usage() + exit(-1) + skey = arg + i = i + 2 + elif opt in ('-h', '--help'): + usage() + exit(0) + else: + break + + args = sys.argv[i:] + + interval = int(args[0]) if len(args) else interval + count = int(args[1]) if len(args) > 1 else count + + i = 0 + while True: + cs = CumulativeStat(skey) + cs.slab_update() + cs.show(rows) + + i = i + 1 + if count and i >= count: + break + + time.sleep(interval) + + return 0 + +if __name__ == '__main__': + main() --- linux-aws-4.15.0.orig/spl/config/Rules.am +++ linux-aws-4.15.0/spl/config/Rules.am @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Common rules for user space components. +############################################################################### + +DEFAULT_INCLUDES = -include ${top_builddir}/spl_config.h + +AM_LIBTOOLFLAGS = --silent +AM_CPPFLAGS = -D__USE_LARGEFILE64 +AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing +AM_CFLAGS += ${DEBUG_CFLAGS} --- linux-aws-4.15.0.orig/spl/config/compile +++ linux-aws-4.15.0/spl/config/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/spl/config/config.awk +++ linux-aws-4.15.0/spl/config/config.awk @@ -0,0 +1,15 @@ +# Remove default preprocessor define's from config.h +# PACKAGE +# PACKAGE_BUGREPORT +# PACKAGE_NAME +# PACKAGE_STRING +# PACKAGE_TARNAME +# PACKAGE_VERSION +# STDC_HEADERS +# VERSION + +BEGIN { RS = "" ; FS = "\n" } \ + !/.#define PACKAGE./ && \ + !/.#define VERSION./ && \ + !/.#define STDC_HEADERS./ \ + { print $0"\n" } --- linux-aws-4.15.0.orig/spl/config/config.guess +++ linux-aws-4.15.0/spl/config/config.guess @@ -0,0 +1,1463 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2017 Free Software Foundation, Inc. + +timestamp='2017-11-07' + +# This file 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 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2017 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:MidnightBSD:*:*) + echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + *:Redox:*:*) + echo ${UNAME_MACHINE}-unknown-redox + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = hppa2.0w ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: --- linux-aws-4.15.0.orig/spl/config/config.sub +++ linux-aws-4.15.0/spl/config/config.sub @@ -0,0 +1,1848 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2017 Free Software Foundation, Inc. + +timestamp='2017-11-23' + +# This file 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 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2017 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | wasm32 \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | wasm32-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2*) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + wasm32) + basic_machine=wasm32-unknown + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: --- linux-aws-4.15.0.orig/spl/config/deb.am +++ linux-aws-4.15.0/spl/config/deb.am @@ -0,0 +1,55 @@ +############################################################################### +# Copyright (C) 2010 Lawrence Livermore National Security, LLC. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for DEB packages. +# +# Long term native distro specific Debian style packaging should be added. +# In the short term RPM packages are built and converted to DEB packages +# using alien. If someone familiar with Debian style packaging were to +# update the build system to correctly build Debian style packages I would +# happily take it. Until then we will have to make due with alien. +# +############################################################################### + +deb-local: + @(if test "${HAVE_DPKGBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${DPKGBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${DPKGBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +deb-kmod: deb-local rpm-kmod + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-dkms: deb-local rpm-dkms + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-dkms-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-dkms-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-utils: deb-local rpm-utils + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb: deb-kmod deb-dkms deb-utils --- linux-aws-4.15.0.orig/spl/config/depcomp +++ linux-aws-4.15.0/spl/config/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2016-01-11.22; # UTC + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/spl/config/install-sh +++ linux-aws-4.15.0/spl/config/install-sh @@ -0,0 +1,508 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2014-09-12.12; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/spl/config/libtool.m4 +++ linux-aws-4.15.0/spl/config/libtool.m4 @@ -0,0 +1,8387 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS --- linux-aws-4.15.0.orig/spl/config/ltmain.sh +++ linux-aws-4.15.0/spl/config/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: --- linux-aws-4.15.0.orig/spl/config/ltoptions.m4 +++ linux-aws-4.15.0/spl/config/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) --- linux-aws-4.15.0.orig/spl/config/ltsugar.m4 +++ linux-aws-4.15.0/spl/config/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) --- linux-aws-4.15.0.orig/spl/config/ltversion.m4 +++ linux-aws-4.15.0/spl/config/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) --- linux-aws-4.15.0.orig/spl/config/lt~obsolete.m4 +++ linux-aws-4.15.0/spl/config/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) --- linux-aws-4.15.0.orig/spl/config/missing +++ linux-aws-4.15.0/spl/config/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/spl/config/rpm.am +++ linux-aws-4.15.0/spl/config/rpm.am @@ -0,0 +1,87 @@ +############################################################################### +# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for RPM packages. +############################################################################### + +srpm-kmod: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common + +srpm-dkms: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common + +srpm-utils: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common + +srpm: srpm-kmod srpm-dkms srpm-utils +srpms: srpm-kmod srpm-dkms srpm-utils + +rpm-kmod: srpm-kmod + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common + +rpm-dkms: srpm-dkms + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common + +rpm-utils: srpm-utils + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common + +rpm: rpm-kmod rpm-dkms rpm-utils +rpms: rpm-kmod rpm-dkms rpm-utils + +rpm-local: + @(if test "${HAVE_RPMBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${RPMBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${RPMBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + mkdir -p $(rpmbuild)/TMP && \ + mkdir -p $(rpmbuild)/BUILD && \ + mkdir -p $(rpmbuild)/RPMS && \ + mkdir -p $(rpmbuild)/SRPMS && \ + mkdir -p $(rpmbuild)/SPECS && \ + cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \ + mkdir -p $(rpmbuild)/SOURCES && \ + cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \ + cp $(distdir).tar.gz $(rpmbuild)/SOURCES) + +srpm-common: dist + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C $(RPMBUILD) \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \ + cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \ + rm -R $$rpmbuild) + +rpm-common: + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C ${RPMBUILD} \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) --rebuild $$rpmpkg || exit 1; \ + cp $$rpmbuild/RPMS/*/* . || exit 1; \ + rm -R $$rpmbuild) --- linux-aws-4.15.0.orig/spl/config/spl-build.m4 +++ linux-aws-4.15.0/spl/config/spl-build.m4 @@ -0,0 +1,1782 @@ +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# SPL_AC_CONFIG_KERNEL: Default SPL kernel configuration. +############################################################################### + +AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ + SPL_AC_KERNEL + + if test "${LINUX_OBJ}" != "${LINUX}"; then + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + fi + AC_SUBST(KERNELMAKE_PARAMS) + + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes" + AC_SUBST(KERNELCPPFLAGS) + + SPL_AC_DEBUG + SPL_AC_DEBUG_KMEM + SPL_AC_DEBUG_KMEM_TRACKING + SPL_AC_TEST_MODULE + SPL_AC_ATOMIC_SPINLOCK + SPL_AC_SHRINKER_CALLBACK + SPL_AC_CTL_NAME + SPL_AC_CONFIG_TRIM_UNUSED_KSYMS + SPL_AC_PDE_DATA + SPL_AC_SET_FS_PWD_WITH_CONST + SPL_AC_2ARGS_VFS_UNLINK + SPL_AC_4ARGS_VFS_RENAME + SPL_AC_2ARGS_VFS_FSYNC + SPL_AC_INODE_TRUNCATE_RANGE + SPL_AC_FS_STRUCT_SPINLOCK + SPL_AC_KUIDGID_T + SPL_AC_KERNEL_FALLOCATE + SPL_AC_CONFIG_ZLIB_INFLATE + SPL_AC_CONFIG_ZLIB_DEFLATE + SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE + SPL_AC_SHRINK_CONTROL_STRUCT + SPL_AC_RWSEM_SPINLOCK_IS_RAW + SPL_AC_RWSEM_ACTIVITY + SPL_AC_RWSEM_ATOMIC_LONG_COUNT + SPL_AC_SCHED_RT_HEADER + SPL_AC_SCHED_SIGNAL_HEADER + SPL_AC_4ARGS_VFS_GETATTR + SPL_AC_3ARGS_VFS_GETATTR + SPL_AC_2ARGS_VFS_GETATTR + SPL_AC_USLEEP_RANGE + SPL_AC_KMEM_CACHE_ALLOCFLAGS + SPL_AC_WAIT_ON_BIT + SPL_AC_INODE_LOCK + SPL_AC_GROUP_INFO_GID + SPL_AC_KMEM_CACHE_CREATE_USERCOPY + SPL_AC_WAIT_QUEUE_ENTRY_T + SPL_AC_WAIT_QUEUE_HEAD_ENTRY + SPL_AC_KERNEL_WRITE + SPL_AC_KERNEL_READ + SPL_AC_TIMER_SETUP +]) + +AC_DEFUN([SPL_AC_MODULE_SYMVERS], [ + modpost=$LINUX/scripts/Makefile.modpost + AC_MSG_CHECKING([kernel file name for module symbols]) + if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then + if grep -q Modules.symvers $modpost; then + LINUX_SYMBOLS=Modules.symvers + else + LINUX_SYMBOLS=Module.symvers + fi + + if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then + AC_MSG_ERROR([ + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source.]) + fi + else + LINUX_SYMBOLS=NONE + fi + AC_MSG_RESULT($LINUX_SYMBOLS) + AC_SUBST(LINUX_SYMBOLS) +]) + +AC_DEFUN([SPL_AC_KERNEL], [ + AC_ARG_WITH([linux], + AS_HELP_STRING([--with-linux=PATH], + [Path to kernel source]), + [kernelsrc="$withval"]) + + AC_ARG_WITH([linux-obj], + AS_HELP_STRING([--with-linux-obj=PATH], + [Path to kernel build objects]), + [kernelbuild="$withval"]) + + AC_MSG_CHECKING([kernel source directory]) + if test -z "$kernelsrc"; then + if test -e "/lib/modules/$(uname -r)/source"; then + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + elif test -e "/lib/modules/$(uname -r)/build"; then + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + else + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + fi + + if test -n "$sourcelink" && test -e ${sourcelink}; then + kernelsrc=`readlink -f ${sourcelink}` + else + kernelsrc="[Not found]" + fi + else + if test "$kernelsrc" = "NONE"; then + kernsrcver=NONE + fi + withlinux=yes + fi + + AC_MSG_RESULT([$kernelsrc]) + if test ! -d "$kernelsrc"; then + AC_MSG_ERROR([ + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option.]) + fi + + AC_MSG_CHECKING([kernel build directory]) + if test -z "$kernelbuild"; then + if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + elif test -d ${kernelsrc}-obj/${target_cpu}/default; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + else + kernelbuild=${kernelsrc} + fi + fi + AC_MSG_RESULT([$kernelbuild]) + + AC_MSG_CHECKING([kernel source version]) + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then + utsrelease=linux/version.h + elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then + utsrelease=linux/utsrelease.h + elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then + utsrelease=generated/utsrelease.h + fi + + if test "$utsrelease"; then + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + if test -z "$kernsrcver"; then + AC_MSG_RESULT([Not found]) + AC_MSG_ERROR([*** Cannot determine kernel version.]) + fi + else + AC_MSG_RESULT([Not found]) + if test "x$enable_linux_builtin" != xyes; then + AC_MSG_ERROR([*** Cannot find UTS_RELEASE definition.]) + else + AC_MSG_ERROR([ + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree.]) + fi + fi + + AC_MSG_RESULT([$kernsrcver]) + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + AC_SUBST(LINUX) + AC_SUBST(LINUX_OBJ) + AC_SUBST(LINUX_VERSION) + + SPL_AC_MODULE_SYMVERS +]) + +dnl # +dnl # Default SPL user configuration +dnl # +AC_DEFUN([SPL_AC_CONFIG_USER], []) + +dnl # +dnl # Check for rpm+rpmbuild to build RPM packages. If these tools +dnl # are missing, it is non-fatal, but you will not be able to build +dnl # RPM packages and will be warned if you try too. +dnl # +dnl # By default, the generic spec file will be used because it requires +dnl # minimal dependencies. Distribution specific spec files can be +dnl # placed under the 'rpm/' directory and enabled using +dnl # the --with-spec= configure option. +dnl # +AC_DEFUN([SPL_AC_RPM], [ + RPM=rpm + RPMBUILD=rpmbuild + + AC_MSG_CHECKING([whether $RPM is available]) + AS_IF([tmp=$($RPM --version 2>/dev/null)], [ + RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }') + HAVE_RPM=yes + AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)]) + ],[ + HAVE_RPM=no + AC_MSG_RESULT([$HAVE_RPM]) + ]) + + AC_MSG_CHECKING([whether $RPMBUILD is available]) + AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [ + RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }') + HAVE_RPMBUILD=yes + AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)]) + ],[ + HAVE_RPMBUILD=no + AC_MSG_RESULT([$HAVE_RPMBUILD]) + ]) + + RPM_DEFINE_COMMON='--define "$(DEBUG_SPL) 1" --define "$(DEBUG_KMEM) 1" --define "$(DEBUG_KMEM_TRACKING) 1"' + RPM_DEFINE_UTIL= + RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"' + RPM_DEFINE_DKMS= + + SRPM_DEFINE_COMMON='--define "build_src_rpm 1"' + SRPM_DEFINE_UTIL= + SRPM_DEFINE_KMOD= + SRPM_DEFINE_DKMS= + + RPM_SPEC_DIR="rpm/generic" + AC_ARG_WITH([spec], + AS_HELP_STRING([--with-spec=SPEC], + [Spec files 'generic|redhat']), + [RPM_SPEC_DIR="rpm/$withval"]) + + AC_MSG_CHECKING([whether spec files are available]) + AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)]) + + AC_SUBST(HAVE_RPM) + AC_SUBST(RPM) + AC_SUBST(RPM_VERSION) + + AC_SUBST(HAVE_RPMBUILD) + AC_SUBST(RPMBUILD) + AC_SUBST(RPMBUILD_VERSION) + + AC_SUBST(RPM_SPEC_DIR) + AC_SUBST(RPM_DEFINE_UTIL) + AC_SUBST(RPM_DEFINE_KMOD) + AC_SUBST(RPM_DEFINE_DKMS) + AC_SUBST(RPM_DEFINE_COMMON) + AC_SUBST(SRPM_DEFINE_UTIL) + AC_SUBST(SRPM_DEFINE_KMOD) + AC_SUBST(SRPM_DEFINE_DKMS) + AC_SUBST(SRPM_DEFINE_COMMON) +]) + +dnl # +dnl # Check for dpkg+dpkg-buildpackage to build DEB packages. If these +dnl # tools are missing it is non-fatal but you will not be able to build +dnl # DEB packages and will be warned if you try too. +dnl # +AC_DEFUN([SPL_AC_DPKG], [ + DPKG=dpkg + DPKGBUILD=dpkg-buildpackage + + AC_MSG_CHECKING([whether $DPKG is available]) + AS_IF([tmp=$($DPKG --version 2>/dev/null)], [ + DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }') + HAVE_DPKG=yes + AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)]) + ],[ + HAVE_DPKG=no + AC_MSG_RESULT([$HAVE_DPKG]) + ]) + + AC_MSG_CHECKING([whether $DPKGBUILD is available]) + AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [ + DPKGBUILD_VERSION=$(echo $tmp | \ + $AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.') + HAVE_DPKGBUILD=yes + AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)]) + ],[ + HAVE_DPKGBUILD=no + AC_MSG_RESULT([$HAVE_DPKGBUILD]) + ]) + + AC_SUBST(HAVE_DPKG) + AC_SUBST(DPKG) + AC_SUBST(DPKG_VERSION) + + AC_SUBST(HAVE_DPKGBUILD) + AC_SUBST(DPKGBUILD) + AC_SUBST(DPKGBUILD_VERSION) +]) + +dnl # +dnl # Until native packaging for various different packing systems +dnl # can be added the least we can do is attempt to use alien to +dnl # convert the RPM packages to the needed package type. This is +dnl # a hack but so far it has worked reasonable well. +dnl # +AC_DEFUN([SPL_AC_ALIEN], [ + ALIEN=alien + + AC_MSG_CHECKING([whether $ALIEN is available]) + AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [ + ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }') + HAVE_ALIEN=yes + AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)]) + ],[ + HAVE_ALIEN=no + AC_MSG_RESULT([$HAVE_ALIEN]) + ]) + + AC_SUBST(HAVE_ALIEN) + AC_SUBST(ALIEN) + AC_SUBST(ALIEN_VERSION) +]) + +dnl # +dnl # Using the VENDOR tag from config.guess set the default +dnl # package type for 'make pkg': (rpm | deb | tgz) +dnl # +AC_DEFUN([SPL_AC_DEFAULT_PACKAGE], [ + AC_MSG_CHECKING([linux distribution]) + if test -f /etc/toss-release ; then + VENDOR=toss ; + elif test -f /etc/fedora-release ; then + VENDOR=fedora ; + elif test -f /etc/redhat-release ; then + VENDOR=redhat ; + elif test -f /etc/gentoo-release ; then + VENDOR=gentoo ; + elif test -f /etc/arch-release ; then + VENDOR=arch ; + elif test -f /etc/SuSE-release ; then + VENDOR=sles ; + elif test -f /etc/slackware-version ; then + VENDOR=slackware ; + elif test -f /etc/lunar.release ; then + VENDOR=lunar ; + elif test -f /etc/lsb-release ; then + VENDOR=ubuntu ; + elif test -f /etc/debian_version ; then + VENDOR=debian ; + else + VENDOR= ; + fi + AC_MSG_RESULT([$VENDOR]) + AC_SUBST(VENDOR) + + AC_MSG_CHECKING([default package type]) + case "$VENDOR" in + toss) DEFAULT_PACKAGE=rpm ;; + redhat) DEFAULT_PACKAGE=rpm ;; + fedora) DEFAULT_PACKAGE=rpm ;; + gentoo) DEFAULT_PACKAGE=tgz ;; + arch) DEFAULT_PACKAGE=tgz ;; + sles) DEFAULT_PACKAGE=rpm ;; + slackware) DEFAULT_PACKAGE=tgz ;; + lunar) DEFAULT_PACKAGE=tgz ;; + ubuntu) DEFAULT_PACKAGE=deb ;; + debian) DEFAULT_PACKAGE=deb ;; + *) DEFAULT_PACKAGE=rpm ;; + esac + + AC_MSG_RESULT([$DEFAULT_PACKAGE]) + AC_SUBST(DEFAULT_PACKAGE) +]) + +dnl # +dnl # Default SPL user configuration +dnl # +AC_DEFUN([SPL_AC_PACKAGE], [ + SPL_AC_DEFAULT_PACKAGE + SPL_AC_RPM + SPL_AC_DPKG + SPL_AC_ALIEN +]) + +AC_DEFUN([SPL_AC_LICENSE], [ + AC_MSG_CHECKING([spl author]) + AC_MSG_RESULT([$SPL_META_AUTHOR]) + + AC_MSG_CHECKING([spl license]) + AC_MSG_RESULT([$SPL_META_LICENSE]) +]) + +AC_DEFUN([SPL_AC_CONFIG], [ + SPL_CONFIG=all + AC_ARG_WITH([config], + AS_HELP_STRING([--with-config=CONFIG], + [Config file 'kernel|user|all|srpm']), + [SPL_CONFIG="$withval"]) + AC_ARG_ENABLE([linux-builtin], + [AC_HELP_STRING([--enable-linux-builtin], + [Configure for builtin in-tree kernel modules @<:@default=no@:>@])], + [], + [enable_linux_builtin=no]) + + AC_MSG_CHECKING([spl config]) + AC_MSG_RESULT([$SPL_CONFIG]); + AC_SUBST(SPL_CONFIG) + + case "$SPL_CONFIG" in + kernel) SPL_AC_CONFIG_KERNEL ;; + user) SPL_AC_CONFIG_USER ;; + all) SPL_AC_CONFIG_KERNEL + SPL_AC_CONFIG_USER ;; + srpm) ;; + *) + AC_MSG_RESULT([Error!]) + AC_MSG_ERROR([Bad value "$SPL_CONFIG" for --with-config, + user kernel|user|all|srpm]) ;; + esac + + AM_CONDITIONAL([CONFIG_USER], + [test "$SPL_CONFIG" = user -o "$SPL_CONFIG" = all]) + AM_CONDITIONAL([CONFIG_KERNEL], + [test "$SPL_CONFIG" = kernel -o "$SPL_CONFIG" = all] && + [test "x$enable_linux_builtin" != xyes ]) +]) + +dnl # +dnl # Enable if the SPL should be compiled with internal debugging enabled. +dnl # By default this support is disabled. +dnl # +AC_DEFUN([SPL_AC_DEBUG], [ + AC_MSG_CHECKING([whether debugging is enabled]) + AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [Enable generic debug support @<:@default=no@:>@])], + [], + [enable_debug=no]) + + AS_IF([test "x$enable_debug" = xyes], + [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_SPL="_with_debug" + ], [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG" + DEBUG_CFLAGS="-DNDEBUG" + DEBUG_SPL="_without_debug" + ]) + + AC_SUBST(DEBUG_CFLAGS) + AC_SUBST(DEBUG_SPL) + AC_MSG_RESULT([$enable_debug]) +]) + +dnl # +dnl # Enabled by default it provides a minimal level of memory tracking. +dnl # A total count of bytes allocated is kept for each alloc and free. +dnl # Then at module unload time a report to the console will be printed +dnl # if memory was leaked. +dnl # +AC_DEFUN([SPL_AC_DEBUG_KMEM], [ + AC_ARG_ENABLE([debug-kmem], + [AS_HELP_STRING([--enable-debug-kmem], + [Enable basic kmem accounting @<:@default=no@:>@])], + [], + [enable_debug_kmem=no]) + + AS_IF([test "x$enable_debug_kmem" = xyes], + [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" + DEBUG_KMEM="_with_debug_kmem" + AC_DEFINE([DEBUG_KMEM], [1], + [Define to 1 to enable basic kmem accounting]) + ], [ + DEBUG_KMEM="_without_debug_kmem" + ]) + + AC_SUBST(DEBUG_KMEM) + AC_MSG_CHECKING([whether basic kmem accounting is enabled]) + AC_MSG_RESULT([$enable_debug_kmem]) +]) + +dnl # +dnl # Disabled by default it provides detailed memory tracking. This +dnl # feature also requires --enable-debug-kmem to be set. When enabled +dnl # not only will total bytes be tracked but also the location of every +dnl # alloc and free. When the SPL module is unloaded a list of all leaked +dnl # addresses and where they were allocated will be dumped to the console. +dnl # Enabling this feature has a significant impact on performance but it +dnl # makes finding memory leaks pretty straight forward. +dnl # +AC_DEFUN([SPL_AC_DEBUG_KMEM_TRACKING], [ + AC_ARG_ENABLE([debug-kmem-tracking], + [AS_HELP_STRING([--enable-debug-kmem-tracking], + [Enable detailed kmem tracking @<:@default=no@:>@])], + [], + [enable_debug_kmem_tracking=no]) + + AS_IF([test "x$enable_debug_kmem_tracking" = xyes], + [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING" + DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking" + AC_DEFINE([DEBUG_KMEM_TRACKING], [1], + [Define to 1 to enable detailed kmem tracking]) + ], [ + DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking" + ]) + + AC_SUBST(DEBUG_KMEM_TRACKING) + AC_MSG_CHECKING([whether detailed kmem tracking is enabled]) + AC_MSG_RESULT([$enable_debug_kmem_tracking]) +]) + +dnl # +dnl # SPL_LINUX_CONFTEST +dnl # +AC_DEFUN([SPL_LINUX_CONFTEST], [ +cat confdefs.h - <<_ACEOF >conftest.c +$1 +_ACEOF +]) + +dnl # +dnl # SPL_LANG_PROGRAM(C)([PROLOGUE], [BODY]) +dnl # +m4_define([SPL_LANG_PROGRAM], [ +$1 +int +main (void) +{ +dnl Do *not* indent the following line: there may be CPP directives. +dnl Don't move the `;' right after for the same reason. +$2 + ; + return 0; +} +]) + +dnl # +dnl # SPL_LINUX_COMPILE_IFELSE / like AC_COMPILE_IFELSE +dnl # +AC_DEFUN([SPL_LINUX_COMPILE_IFELSE], [ + m4_ifvaln([$1], [SPL_LINUX_CONFTEST([$1])]) + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + AS_IF( + [AC_TRY_COMMAND(cp conftest.c build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])], + [$4], + [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])] + ) + rm -Rf build +]) + +dnl # +dnl # SPL_LINUX_TRY_COMPILE like AC_TRY_COMPILE +dnl # +AC_DEFUN([SPL_LINUX_TRY_COMPILE], + [SPL_LINUX_COMPILE_IFELSE( + [AC_LANG_SOURCE([SPL_LANG_PROGRAM([[$1]], [[$2]])])], + [modules], + [test -s build/conftest.o], + [$3], [$4]) +]) + +dnl # +dnl # SPL_CHECK_SYMBOL_EXPORT +dnl # check symbol exported or not +dnl # +AC_DEFUN([SPL_CHECK_SYMBOL_EXPORT], [ + grep -q -E '[[[:space:]]]$1[[[:space:]]]' \ + $LINUX_OBJ/Module*.symvers 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in $2; do + grep -q -E "EXPORT_SYMBOL.*($1)" \ + "$LINUX_OBJ/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + $4 + else : + $3 + fi + else : + $3 + fi +]) + +dnl # +dnl # SPL_LINUX_TRY_COMPILE_SYMBOL +dnl # like SPL_LINUX_TRY_COMPILE, except SPL_CHECK_SYMBOL_EXPORT +dnl # is called if not compiling for builtin +dnl # +AC_DEFUN([SPL_LINUX_TRY_COMPILE_SYMBOL], [ + SPL_LINUX_TRY_COMPILE([$1], [$2], [rc=0], [rc=1]) + if test $rc -ne 0; then : + $6 + else + if test "x$enable_linux_builtin" != xyes; then + SPL_CHECK_SYMBOL_EXPORT([$3], [$4], [rc=0], [rc=1]) + fi + if test $rc -ne 0; then : + $6 + else : + $5 + fi + fi +]) + +dnl # +dnl # SPL_CHECK_SYMBOL_HEADER +dnl # check if a symbol prototype is defined in listed headers. +dnl # +AC_DEFUN([SPL_CHECK_SYMBOL_HEADER], [ + AC_MSG_CHECKING([whether symbol $1 exists in header]) + header=0 + for file in $3; do + grep -q "$2" "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + header=1 + break; + fi + done + if test $header -eq 0; then + AC_MSG_RESULT([no]) + $5 + else + AC_MSG_RESULT([yes]) + $4 + fi +]) + +dnl # +dnl # SPL_CHECK_HEADER +dnl # check whether header exists and define HAVE_$2_HEADER +dnl # +AC_DEFUN([SPL_CHECK_HEADER], + [AC_MSG_CHECKING([whether header $1 exists]) + SPL_LINUX_TRY_COMPILE([ + #include <$1> + ],[ + return 0; + ],[ + AC_DEFINE(HAVE_$2_HEADER, 1, [$1 exists]) + AC_MSG_RESULT(yes) + $3 + ],[ + AC_MSG_RESULT(no) + $4 + ]) +]) + +dnl # +dnl # Basic toolchain sanity check. Verify that kernel modules can +dnl # be built and which symbols can be used. +dnl # +AC_DEFUN([SPL_AC_TEST_MODULE], + [AC_MSG_CHECKING([whether modules can be built]) + SPL_LINUX_TRY_COMPILE([],[],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + if test "x$enable_linux_builtin" != xyes; then + AC_MSG_ERROR([*** Unable to build an empty module.]) + else + AC_MSG_ERROR([ + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree.]) + fi + ]) + + AS_IF([test "x$cross_compiling" != xyes], [ + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([ + #include "$LINUX/include/linux/license.h" + ], [ + return !license_is_gpl_compatible( + "$SPL_META_LICENSE"); + ]) + ], [ + AC_DEFINE([SPL_IS_GPL_COMPATIBLE], [1], + [Define to 1 if GPL-only symbols can be used]) + ], [ + ]) + ]) +]) + +dnl # +dnl # Use the atomic implemenation based on global spinlocks. This +dnl # should only be needed by 32-bit kernels which do not provide +dnl # the atomic64_* API. It may be optionally enabled as a fallback +dnl # if problems are observed with the direct mapping to the native +dnl # Linux atomic operations. You may not disable atomic spinlocks +dnl # if you kernel does not an atomic64_* API. +dnl # +AC_DEFUN([SPL_AC_ATOMIC_SPINLOCK], [ + AC_ARG_ENABLE([atomic-spinlocks], + [AS_HELP_STRING([--enable-atomic-spinlocks], + [Atomic types use spinlocks @<:@default=check@:>@])], + [], + [enable_atomic_spinlocks=check]) + + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + atomic64_t *ptr __attribute__ ((unused)); + ],[ + have_atomic64_t=yes + AC_DEFINE(HAVE_ATOMIC64_T, 1, + [kernel defines atomic64_t]) + ],[ + have_atomic64_t=no + ]) + + AS_IF([test "x$enable_atomic_spinlocks" = xcheck], [ + AS_IF([test "x$have_atomic64_t" = xyes], [ + enable_atomic_spinlocks=no + ],[ + enable_atomic_spinlocks=yes + ]) + ]) + + AS_IF([test "x$enable_atomic_spinlocks" = xyes], [ + AC_DEFINE([ATOMIC_SPINLOCK], [1], + [Atomic types use spinlocks]) + ],[ + AS_IF([test "x$have_atomic64_t" = xno], [ + AC_MSG_FAILURE( + [--disable-atomic-spinlocks given but required atomic64 support is unavailable]) + ]) + ]) + + AC_MSG_CHECKING([whether atomic types use spinlocks]) + AC_MSG_RESULT([$enable_atomic_spinlocks]) + + AC_MSG_CHECKING([whether kernel defines atomic64_t]) + AC_MSG_RESULT([$have_atomic64_t]) +]) + +AC_DEFUN([SPL_AC_SHRINKER_CALLBACK],[ + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + dnl # + dnl # 2.6.23 to 2.6.34 API change + dnl # ->shrink(int nr_to_scan, gfp_t gfp_mask) + dnl # + AC_MSG_CHECKING([whether old 2-argument shrinker exists]) + SPL_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_OLD_SHRINKER_CALLBACK, 1, + [old shrinker callback wants 2 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 2.6.35 - 2.6.39 API change + dnl # ->shrink(struct shrinker *, + dnl # int nr_to_scan, gfp_t gfp_mask) + dnl # + AC_MSG_CHECKING([whether old 3-argument shrinker exists]) + SPL_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(struct shrinker *, int nr_to_scan, + gfp_t gfp_mask); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARGS_SHRINKER_CALLBACK, 1, + [old shrinker callback wants 3 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 3.0 - 3.11 API change + dnl # ->shrink(struct shrinker *, + dnl # struct shrink_control *sc) + dnl # + AC_MSG_CHECKING( + [whether new 2-argument shrinker exists]) + SPL_LINUX_TRY_COMPILE([ + #include + + int shrinker_cb(struct shrinker *, + struct shrink_control *sc); + ],[ + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_NEW_SHRINKER_CALLBACK, 1, + [new shrinker callback wants 2 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # 3.12 API change, + dnl # ->shrink() is logically split in to + dnl # ->count_objects() and ->scan_objects() + dnl # + AC_MSG_CHECKING( + [whether ->count_objects callback exists]) + SPL_LINUX_TRY_COMPILE([ + #include + + unsigned long shrinker_cb( + struct shrinker *, + struct shrink_control *sc); + ],[ + struct shrinker cache_shrinker = { + .count_objects = shrinker_cb, + .scan_objects = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SPLIT_SHRINKER_CALLBACK, + 1, [->count_objects exists]) + ],[ + AC_MSG_ERROR(error) + ]) + ]) + ]) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 2.6.33 API change, +dnl # Removed .ctl_name from struct ctl_table. +dnl # +AC_DEFUN([SPL_AC_CTL_NAME], [ + AC_MSG_CHECKING([whether struct ctl_table has ctl_name]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct ctl_table ctl __attribute__ ((unused)); + ctl.ctl_name = 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CTL_NAME, 1, [struct ctl_table has ctl_name]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.10 API change, +dnl # PDE is replaced by PDE_DATA +dnl # +AC_DEFUN([SPL_AC_PDE_DATA], [ + AC_MSG_CHECKING([whether PDE_DATA() is available]) + SPL_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + PDE_DATA(NULL); + ], [PDE_DATA], [], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PDE_DATA, 1, [yes]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.9 API change +dnl # set_fs_pwd takes const struct path * +dnl # +AC_DEFUN([SPL_AC_SET_FS_PWD_WITH_CONST], + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + [AC_MSG_CHECKING([whether set_fs_pwd() requires const struct path *]) + SPL_LINUX_TRY_COMPILE([ + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, const struct path *) + = set_fs_pwd; + ],[ + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SET_FS_PWD_WITH_CONST, 1, + [set_fs_pwd() needs const path *]) + ],[ + SPL_LINUX_TRY_COMPILE([ + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, struct path *) + = set_fs_pwd; + ],[ + return 0; + ],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_ERROR(unknown) + ]) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 3.13 API change +dnl # vfs_unlink() updated to take a third delegated_inode argument. +dnl # +AC_DEFUN([SPL_AC_2ARGS_VFS_UNLINK], + [AC_MSG_CHECKING([whether vfs_unlink() wants 2 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_unlink((struct inode *) NULL, (struct dentry *) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_VFS_UNLINK, 1, + [vfs_unlink() wants 2 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # Linux 3.13 API change + dnl # Added delegated inode + dnl # + AC_MSG_CHECKING([whether vfs_unlink() wants 3 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_unlink((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARGS_VFS_UNLINK, 1, + [vfs_unlink() wants 3 args]) + ],[ + AC_MSG_ERROR(no) + ]) + + ]) +]) + +dnl # +dnl # 3.13 and 3.15 API changes +dnl # Added delegated inode and flags argument. +dnl # +AC_DEFUN([SPL_AC_4ARGS_VFS_RENAME], + [AC_MSG_CHECKING([whether vfs_rename() wants 4 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_rename((struct inode *) NULL, (struct dentry *) NULL, + (struct inode *) NULL, (struct dentry *) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_4ARGS_VFS_RENAME, 1, + [vfs_rename() wants 4 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # Linux 3.13 API change + dnl # Added delegated inode + dnl # + AC_MSG_CHECKING([whether vfs_rename() wants 5 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_5ARGS_VFS_RENAME, 1, + [vfs_rename() wants 5 args]) + ],[ + AC_MSG_RESULT(no) + dnl # + dnl # Linux 3.15 API change + dnl # Added flags + dnl # + AC_MSG_CHECKING([whether vfs_rename() wants 6 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL, + (unsigned int) 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_6ARGS_VFS_RENAME, 1, + [vfs_rename() wants 6 args]) + ],[ + AC_MSG_ERROR(no) + ]) + ]) + ]) +]) + +dnl # +dnl # 2.6.36 API change, +dnl # The 'struct fs_struct->lock' was changed from a rwlock_t to +dnl # a spinlock_t to improve the fastpath performance. +dnl # +AC_DEFUN([SPL_AC_FS_STRUCT_SPINLOCK], [ + AC_MSG_CHECKING([whether struct fs_struct uses spinlock_t]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + #include + ],[ + static struct fs_struct fs; + spin_lock_init(&fs.lock); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FS_STRUCT_SPINLOCK, 1, + [struct fs_struct uses spinlock_t]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # User namespaces, use kuid_t in place of uid_t +dnl # where available. Not strictly a user namespaces thing +dnl # but it should prevent surprises +dnl # +AC_DEFUN([SPL_AC_KUIDGID_T], [ + AC_MSG_CHECKING([whether kuid_t/kgid_t is available]) + SPL_LINUX_TRY_COMPILE([ + #include + ], [ + kuid_t userid = KUIDT_INIT(0); + kgid_t groupid = KGIDT_INIT(0); + ],[ + SPL_LINUX_TRY_COMPILE([ + #include + ], [ + kuid_t userid = 0; + kgid_t groupid = 0; + ],[ + AC_MSG_RESULT(yes; optional) + ],[ + AC_MSG_RESULT(yes; mandatory) + AC_DEFINE(HAVE_KUIDGID_T, 1, [kuid_t/kgid_t in use]) + ]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.35 API change, +dnl # Unused 'struct dentry *' removed from vfs_fsync() prototype. +dnl # +AC_DEFUN([SPL_AC_2ARGS_VFS_FSYNC], [ + AC_MSG_CHECKING([whether vfs_fsync() wants 2 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_fsync(NULL, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_VFS_FSYNC, 1, [vfs_fsync() wants 2 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.5 API change, +dnl # inode_operations.truncate_range removed +dnl # +AC_DEFUN([SPL_AC_INODE_TRUNCATE_RANGE], [ + AC_MSG_CHECKING([whether truncate_range() inode operation is available]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode_operations ops; + ops.truncate_range = NULL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1, + [truncate_range() inode operation is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 2.6.38 - 3.x API +dnl # +AC_DEFUN([SPL_AC_KERNEL_FILE_FALLOCATE], [ + AC_MSG_CHECKING([whether fops->fallocate() exists]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 2.6.x - 2.6.37 API +dnl # +AC_DEFUN([SPL_AC_KERNEL_INODE_FALLOCATE], [ + AC_MSG_CHECKING([whether iops->fallocate() exists]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL; + struct inode_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # PaX Linux 2.6.38 - 3.x API +dnl # +AC_DEFUN([SPL_AC_PAX_KERNEL_FILE_FALLOCATE], [ + AC_MSG_CHECKING([whether fops->fallocate() exists]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations_no_const fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # The fallocate callback was moved from the inode_operations +dnl # structure to the file_operations structure. +dnl # +AC_DEFUN([SPL_AC_KERNEL_FALLOCATE], [ + SPL_AC_KERNEL_FILE_FALLOCATE + SPL_AC_KERNEL_INODE_FALLOCATE + SPL_AC_PAX_KERNEL_FILE_FALLOCATE +]) + +dnl # +dnl # zlib inflate compat, +dnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled. +dnl # +AC_DEFUN([SPL_AC_CONFIG_ZLIB_INFLATE], [ + AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined]) + SPL_LINUX_TRY_COMPILE([ + #if !defined(CONFIG_ZLIB_INFLATE) && \ + !defined(CONFIG_ZLIB_INFLATE_MODULE) + #error CONFIG_ZLIB_INFLATE not defined + #endif + ],[ ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([ + *** This kernel does not include the required zlib inflate support. + *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.]) + ]) +]) + +dnl # +dnl # zlib deflate compat, +dnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled. +dnl # +AC_DEFUN([SPL_AC_CONFIG_ZLIB_DEFLATE], [ + AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined]) + SPL_LINUX_TRY_COMPILE([ + #if !defined(CONFIG_ZLIB_DEFLATE) && \ + !defined(CONFIG_ZLIB_DEFLATE_MODULE) + #error CONFIG_ZLIB_DEFLATE not defined + #endif + ],[ ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([ + *** This kernel does not include the required zlib deflate support. + *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.]) + ]) +]) + +dnl # +dnl # config trim unused symbols, +dnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS DISABLED. +dnl # +AC_DEFUN([SPL_AC_CONFIG_TRIM_UNUSED_KSYMS], [ + AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled]) + SPL_LINUX_TRY_COMPILE([ + #if defined(CONFIG_TRIM_UNUSED_KSYMS) + #error CONFIG_TRIM_UNUSED_KSYMS not defined + #endif + ],[ ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([ + *** This kernel has unused symbols trimming enabled, please disable. + *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.]) + ]) +]) + +dnl # +dnl # 2.6.39 API compat, +dnl # The function zlib_deflate_workspacesize() now take 2 arguments. +dnl # This was done to avoid always having to allocate the maximum size +dnl # workspace (268K). The caller can now specific the windowBits and +dnl # memLevel compression parameters to get a smaller workspace. +dnl # +AC_DEFUN([SPL_AC_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE], + [AC_MSG_CHECKING([whether zlib_deflate_workspacesize() wants 2 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE, 1, + [zlib_deflate_workspacesize() wants 2 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.39 API change, +dnl # Shrinker adjust to use common shrink_control structure. +dnl # +AC_DEFUN([SPL_AC_SHRINK_CONTROL_STRUCT], [ + AC_MSG_CHECKING([whether struct shrink_control exists]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct shrink_control sc __attribute__ ((unused)); + + sc.nr_to_scan = 0; + sc.gfp_mask = GFP_KERNEL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SHRINK_CONTROL_STRUCT, 1, + [struct shrink_control exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.1 API Change +dnl # +dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to +dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1. +dnl # +AC_DEFUN([SPL_AC_RWSEM_SPINLOCK_IS_RAW], [ + AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + raw_spinlock_t dummy_lock __attribute__ ((unused)) = + __RAW_SPIN_LOCK_INITIALIZER(dummy_lock); + dummy_semaphore.wait_lock = dummy_lock; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(RWSEM_SPINLOCK_IS_RAW, 1, + [struct rw_semaphore member wait_lock is raw_spinlock_t]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 3.16 API Change +dnl # +dnl # rwsem-spinlock "->activity" changed to "->count" +dnl # +AC_DEFUN([SPL_AC_RWSEM_ACTIVITY], [ + AC_MSG_CHECKING([whether struct rw_semaphore has member activity]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + dummy_semaphore.activity = 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1, + [struct rw_semaphore has member activity]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 4.8 API Change +dnl # +dnl # rwsem "->count" changed to atomic_long_t type +dnl # +AC_DEFUN([SPL_AC_RWSEM_ATOMIC_LONG_COUNT], [ + AC_MSG_CHECKING( + [whether struct rw_semaphore has atomic_long_t member count]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + DECLARE_RWSEM(dummy_semaphore); + (void) atomic_long_read(&dummy_semaphore.count); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1, + [struct rw_semaphore has atomic_long_t member count]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 3.9 API change, +dnl # Moved things from linux/sched.h to linux/sched/rt.h +dnl # +AC_DEFUN([SPL_AC_SCHED_RT_HEADER], + [AC_MSG_CHECKING([whether header linux/sched/rt.h exists]) + SPL_LINUX_TRY_COMPILE([ + #include + #include + ],[ + return 0; + ],[ + AC_DEFINE(HAVE_SCHED_RT_HEADER, 1, [linux/sched/rt.h exists]) + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.11 API change, +dnl # Moved things from linux/sched.h to linux/sched/signal.h +dnl # +AC_DEFUN([SPL_AC_SCHED_SIGNAL_HEADER], + [AC_MSG_CHECKING([whether header linux/sched/signal.h exists]) + SPL_LINUX_TRY_COMPILE([ + #include + #include + ],[ + return 0; + ],[ + AC_DEFINE(HAVE_SCHED_SIGNAL_HEADER, 1, [linux/sched/signal.h exists]) + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.11 API, a528d35e@torvalds/linux +dnl # vfs_getattr(const struct path *p, struct kstat *s, u32 m, unsigned int f) +dnl # +AC_DEFUN([SPL_AC_4ARGS_VFS_GETATTR], [ + AC_MSG_CHECKING([whether vfs_getattr() wants 4 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_getattr((const struct path *)NULL, + (struct kstat *)NULL, + (u32)0, + (unsigned int)0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_4ARGS_VFS_GETATTR, 1, + [vfs_getattr wants 4 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.9 API +dnl # vfs_getattr(struct path *p, struct kstat *s) +dnl # +AC_DEFUN([SPL_AC_2ARGS_VFS_GETATTR], [ + AC_MSG_CHECKING([whether vfs_getattr() wants 2 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_getattr((struct path *) NULL, + (struct kstat *)NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_VFS_GETATTR, 1, + [vfs_getattr wants 2 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # <3.9 API +dnl # vfs_getattr(struct vfsmount *v, struct dentry *d, struct kstat *k) +dnl # +AC_DEFUN([SPL_AC_3ARGS_VFS_GETATTR], [ + AC_MSG_CHECKING([whether vfs_getattr() wants 3 args]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + vfs_getattr((struct vfsmount *)NULL, + (struct dentry *)NULL, + (struct kstat *)NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARGS_VFS_GETATTR, 1, + [vfs_getattr wants 3 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.36 API compatibility. +dnl # Added usleep_range timer. +dnl # usleep_range is a finer precision implementation of msleep +dnl # designed to be a drop-in replacement for udelay where a precise +dnl # sleep / busy-wait is unnecessary. +dnl # +AC_DEFUN([SPL_AC_USLEEP_RANGE], [ + AC_MSG_CHECKING([whether usleep_range() is available]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + usleep_range(0, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_USLEEP_RANGE, 1, + [usleep_range is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.35 API change, +dnl # The cachep->gfpflags member was renamed cachep->allocflags. These are +dnl # private allocation flags which are applied when allocating a new slab +dnl # in kmem_getpages(). Unfortunately there is no public API for setting +dnl # non-default flags. +dnl # +AC_DEFUN([SPL_AC_KMEM_CACHE_ALLOCFLAGS], [ + AC_MSG_CHECKING([whether struct kmem_cache has allocflags]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct kmem_cache cachep __attribute__ ((unused)); + cachep.allocflags = GFP_KERNEL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KMEM_CACHE_ALLOCFLAGS, 1, + [struct kmem_cache has allocflags]) + ],[ + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether struct kmem_cache has gfpflags]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct kmem_cache cachep __attribute__ ((unused)); + cachep.gfpflags = GFP_KERNEL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KMEM_CACHE_GFPFLAGS, 1, + [struct kmem_cache has gfpflags]) + ],[ + AC_MSG_RESULT(no) + ]) + ]) +]) + +dnl # +dnl # 3.17 API change, +dnl # wait_on_bit() no longer requires an action argument. The former +dnl # "wait_on_bit" interface required an 'action' function to be provided +dnl # which does the actual waiting. There were over 20 such functions in the +dnl # kernel, many of them identical, though most cases can be satisfied by one +dnl # of just two functions: one which uses io_schedule() and one which just +dnl # uses schedule(). This API change was made to consolidate all of those +dnl # redundant wait functions. +dnl # +AC_DEFUN([SPL_AC_WAIT_ON_BIT], [ + AC_MSG_CHECKING([whether wait_on_bit() takes an action]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + int (*action)(void *) = NULL; + wait_on_bit(NULL, 0, action, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_WAIT_ON_BIT_ACTION, 1, [yes]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.7 API change +dnl # i_mutex is changed to i_rwsem. Instead of directly using +dnl # i_mutex/i_rwsem, we should use inode_lock() and inode_lock_shared() +dnl # We test inode_lock_shared because inode_lock is introduced earlier. +dnl # +AC_DEFUN([SPL_AC_INODE_LOCK], [ + AC_MSG_CHECKING([whether inode_lock_shared() exists]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode *inode = NULL; + inode_lock_shared(inode); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_LOCK_SHARED, 1, [yes]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 4.9 API change +dnl # group_info changed from 2d array via >blocks to 1d array via ->gid +dnl # +AC_DEFUN([SPL_AC_GROUP_INFO_GID], [ + AC_MSG_CHECKING([whether group_info->gid exists]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct group_info *gi = groups_alloc(1); + gi->gid[0] = KGIDT_INIT(0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GROUP_INFO_GID, 1, [group_info->gid exists]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # grsecurity API change, +dnl # kmem_cache_create() with SLAB_USERCOPY flag replaced by +dnl # kmem_cache_create_usercopy(). +dnl # +AC_DEFUN([SPL_AC_KMEM_CACHE_CREATE_USERCOPY], [ + AC_MSG_CHECKING([whether kmem_cache_create_usercopy() exists]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + static void ctor(void *foo) + { + // fake ctor + } + ],[ + struct kmem_cache *skc_linux_cache; + const char *name = "test"; + size_t size = 4096; + size_t align = 8; + unsigned long flags = 0; + size_t useroffset = 0; + size_t usersize = size - useroffset; + + skc_linux_cache = kmem_cache_create_usercopy( + name, size, align, flags, useroffset, usersize, ctor); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KMEM_CACHE_CREATE_USERCOPY, 1, + [kmem_cache_create_usercopy() exists]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 4.13 API change +dnl # Renamed struct wait_queue -> struct wait_queue_entry. +dnl # +AC_DEFUN([SPL_AC_WAIT_QUEUE_ENTRY_T], [ + AC_MSG_CHECKING([whether wait_queue_entry_t exists]) + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + wait_queue_entry_t *entry __attribute__ ((unused)); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_WAIT_QUEUE_ENTRY_T, 1, + [wait_queue_entry_t exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.13 API change +dnl # Renamed wait_queue_head::task_list -> wait_queue_head::head +dnl # Renamed wait_queue_entry::task_list -> wait_queue_entry::entry +dnl # +AC_DEFUN([SPL_AC_WAIT_QUEUE_HEAD_ENTRY], [ + AC_MSG_CHECKING([whether wq_head->head and wq_entry->entry exist]) + SPL_LINUX_TRY_COMPILE([ + #include + + #ifdef HAVE_WAIT_QUEUE_ENTRY_T + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_entry_t spl_wait_queue_entry_t; + #else + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_t spl_wait_queue_entry_t; + #endif + ],[ + spl_wait_queue_head_t wq_head; + spl_wait_queue_entry_t wq_entry; + struct list_head *head __attribute__ ((unused)); + struct list_head *entry __attribute__ ((unused)); + + head = &wq_head.head; + entry = &wq_entry.entry; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_WAIT_QUEUE_HEAD_ENTRY, 1, + [wq_head->head and wq_entry->entry exist]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.14 API change +dnl # kernel_write() which was introduced in 3.9 was updated to take +dnl # the offset as a pointer which is needed by vn_rdwr(). +dnl # +AC_DEFUN([SPL_AC_KERNEL_WRITE], [ + AC_MSG_CHECKING([whether kernel_write() takes loff_t pointer]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct file *file = NULL; + const void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_write(file, buf, count, pos); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_WRITE_PPOS, 1, + [kernel_write() take loff_t pointer]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 4.14 API change +dnl # kernel_read() which has existed for forever was updated to take +dnl # the offset as a pointer which is needed by vn_rdwr(). +dnl # +AC_DEFUN([SPL_AC_KERNEL_READ], [ + AC_MSG_CHECKING([whether kernel_read() takes loff_t pointer]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct file *file = NULL; + void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_read(file, buf, count, pos); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_READ_PPOS, 1, + [kernel_read() take loff_t pointer]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 4.16 new API +dnl # new timer_setup() +dnl # +AC_DEFUN([SPL_AC_TIMER_SETUP], [ + AC_MSG_CHECKING([whether timer_setup() exists]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + SPL_LINUX_TRY_COMPILE([ + #include + ],[ + struct timer_list timer; + + timer_setup(&timer, NULL, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_TIMER_SETUP, 1, + [use timer_setup() for timer initialization]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/spl/config/spl-meta.m4 +++ linux-aws-4.15.0/spl/config/spl-meta.m4 @@ -0,0 +1,170 @@ +dnl # +dnl # DESCRIPTION: +dnl # Read meta data from the META file. When building from a git repository +dnl # the SPL_META_RELEASE field will be overwritten if there is an annotated +dnl # tag matching the form SPL_META_NAME-SPL_META_VERSION-*. This allows +dnl # for working builds to be uniquely identified using the git commit hash. +dnl # +dnl # The META file format is as follows: +dnl # ^[ ]*KEY:[ \t]+VALUE$ +dnl # +dnl # In other words: +dnl # - KEY is separated from VALUE by a colon and one or more spaces/tabs. +dnl # - KEY and VALUE are case sensitive. +dnl # - Leading spaces are ignored. +dnl # - First match wins for duplicate keys. +dnl # +dnl # A line can be commented out by preceding it with a '#' (or technically +dnl # any non-space character since that will prevent the regex from +dnl # matching). +dnl # +dnl # WARNING: +dnl # Placing a colon followed by a space or tab (ie, ":[ \t]+") within the +dnl # VALUE will prematurely terminate the string since that sequence is +dnl # used as the awk field separator. +dnl # +dnl # KEYS: +dnl # The following META keys are recognized: +dnl # Name, Version, Release, Date, Author, LT_Current, LT_Revision, LT_Age +dnl # +dnl # Written by Chris Dunlap . +dnl # Modified by Brian Behlendorf . +dnl # +AC_DEFUN([SPL_AC_META], [ + AC_PROG_AWK + AC_MSG_CHECKING([metadata]) + + META="$srcdir/META" + _spl_ac_meta_type="none" + if test -f "$META"; then + _spl_ac_meta_type="META file" + + SPL_META_NAME=_SPL_AC_META_GETVAL([(Name|Project|Package)]); + if test -n "$SPL_META_NAME"; then + AC_DEFINE_UNQUOTED([SPL_META_NAME], ["$SPL_META_NAME"], + [Define the project name.] + ) + AC_SUBST([SPL_META_NAME]) + fi + + SPL_META_VERSION=_SPL_AC_META_GETVAL([Version]); + if test -n "$SPL_META_VERSION"; then + AC_DEFINE_UNQUOTED([SPL_META_VERSION], ["$SPL_META_VERSION"], + [Define the project version.] + ) + AC_SUBST([SPL_META_VERSION]) + fi + + SPL_META_RELEASE=_SPL_AC_META_GETVAL([Release]); + if test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then + _match="${SPL_META_NAME}-${SPL_META_VERSION}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + SPL_META_RELEASE=${_release} + _spl_ac_meta_type="git describe" + else + _match="${SPL_META_NAME}-${SPL_META_VERSION}-${SPL_META_RELEASE}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + SPL_META_RELEASE=${_release} + _spl_ac_meta_type="git describe" + fi + fi + fi + + if test -n "$SPL_META_RELEASE"; then + AC_DEFINE_UNQUOTED([SPL_META_RELEASE], ["$SPL_META_RELEASE"], + [Define the project release.] + ) + AC_SUBST([SPL_META_RELEASE]) + + RELEASE="$SPL_META_RELEASE" + AC_SUBST([RELEASE]) + fi + + SPL_META_LICENSE=_SPL_AC_META_GETVAL([License]); + if test -n "$SPL_META_LICENSE"; then + AC_DEFINE_UNQUOTED([SPL_META_LICENSE], ["$SPL_META_LICENSE"], + [Define the project license.] + ) + AC_SUBST([SPL_META_LICENSE]) + fi + + if test -n "$SPL_META_NAME" -a -n "$SPL_META_VERSION"; then + SPL_META_ALIAS="$SPL_META_NAME-$SPL_META_VERSION" + test -n "$SPL_META_RELEASE" && + SPL_META_ALIAS="$SPL_META_ALIAS-$SPL_META_RELEASE" + AC_DEFINE_UNQUOTED([SPL_META_ALIAS], + ["$SPL_META_ALIAS"], + [Define the project alias string.] + ) + AC_SUBST([SPL_META_ALIAS]) + fi + + SPL_META_DATA=_SPL_AC_META_GETVAL([Date]); + if test -n "$SPL_META_DATA"; then + AC_DEFINE_UNQUOTED([SPL_META_DATA], ["$SPL_META_DATA"], + [Define the project release date.] + ) + AC_SUBST([SPL_META_DATA]) + fi + + SPL_META_AUTHOR=_SPL_AC_META_GETVAL([Author]); + if test -n "$SPL_META_AUTHOR"; then + AC_DEFINE_UNQUOTED([SPL_META_AUTHOR], ["$SPL_META_AUTHOR"], + [Define the project author.] + ) + AC_SUBST([SPL_META_AUTHOR]) + fi + + m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$]) + SPL_META_LT_CURRENT=_SPL_AC_META_GETVAL([LT_Current]); + SPL_META_LT_REVISION=_SPL_AC_META_GETVAL([LT_Revision]); + SPL_META_LT_AGE=_SPL_AC_META_GETVAL([LT_Age]); + if test -n "$SPL_META_LT_CURRENT" \ + -o -n "$SPL_META_LT_REVISION" \ + -o -n "$SPL_META_LT_AGE"; then + test -n "$SPL_META_LT_CURRENT" || SPL_META_LT_CURRENT="0" + test -n "$SPL_META_LT_REVISION" || SPL_META_LT_REVISION="0" + test -n "$SPL_META_LT_AGE" || SPL_META_LT_AGE="0" + AC_DEFINE_UNQUOTED([SPL_META_LT_CURRENT], + ["$SPL_META_LT_CURRENT"], + [Define the libtool library 'current' + version information.] + ) + AC_DEFINE_UNQUOTED([SPL_META_LT_REVISION], + ["$SPL_META_LT_REVISION"], + [Define the libtool library 'revision' + version information.] + ) + AC_DEFINE_UNQUOTED([SPL_META_LT_AGE], ["$SPL_META_LT_AGE"], + [Define the libtool library 'age' + version information.] + ) + AC_SUBST([SPL_META_LT_CURRENT]) + AC_SUBST([SPL_META_LT_REVISION]) + AC_SUBST([SPL_META_LT_AGE]) + fi + fi + + AC_MSG_RESULT([$_spl_ac_meta_type]) + ] +) + +dnl # _SPL_AC_META_GETVAL (KEY_NAME_OR_REGEX) +dnl # +dnl # Returns the META VALUE associated with the given KEY_NAME_OR_REGEX expr. +dnl # +dnl # Despite their resemblance to line noise, +dnl # the "@<:@" and "@:>@" constructs are quadrigraphs for "[" and "]". +dnl # +dnl # +dnl # The "$[]1" and "$[]2" constructs prevent M4 parameter expansion +dnl # so a literal $1 and $2 will be passed to the resulting awk script, +dnl # whereas the "$1" will undergo M4 parameter expansion for the META key. +dnl # +AC_DEFUN([_SPL_AC_META_GETVAL], + [`$AWK -F ':@<:@ \t@:>@+' '$[]1 ~ /^ *$1$/ { print $[]2; exit }' $META`]dnl +) --- linux-aws-4.15.0.orig/spl/config/tgz.am +++ linux-aws-4.15.0/spl/config/tgz.am @@ -0,0 +1,44 @@ +############################################################################### +# Copyright (C) 2010 Lawrence Livermore National Security, LLC. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for TGZ packages. +# +# Long term native distro specific Slackware style packaging should be added. +# In the short term RPM packages are built and converted to TGZ packages +# using alien. If someone familiar with Slackware style packaging were to +# update the build system to correctly build Slackware style packages I would +# happily take it. Until then we will have to make due with alien. +# +############################################################################### + +tgz-local: + @(if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +tgz-kmod: tgz-local rpm-kmod +if CONFIG_KERNEL + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ + $(RM) $$pkg1 +endif + +tgz-utils: tgz-local rpm-utils +if CONFIG_USER + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ + $(RM) $$pkg1 +endif + +tgz: tgz-kmod tgz-utils --- linux-aws-4.15.0.orig/spl/configure +++ linux-aws-4.15.0/spl/configure @@ -0,0 +1,21408 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for spl 0.7.5. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='spl' +PACKAGE_TARNAME='spl' +PACKAGE_VERSION='0.7.5' +PACKAGE_STRING='spl 0.7.5' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +CONFIG_KERNEL_FALSE +CONFIG_KERNEL_TRUE +CONFIG_USER_FALSE +CONFIG_USER_TRUE +DEBUG_KMEM_TRACKING +DEBUG_KMEM +DEBUG_SPL +DEBUG_CFLAGS +KERNELCPPFLAGS +KERNELMAKE_PARAMS +LINUX_SYMBOLS +LINUX_VERSION +LINUX_OBJ +LINUX +SPL_CONFIG +ALIEN_VERSION +ALIEN +HAVE_ALIEN +DPKGBUILD_VERSION +DPKGBUILD +HAVE_DPKGBUILD +DPKG_VERSION +DPKG +HAVE_DPKG +SRPM_DEFINE_COMMON +SRPM_DEFINE_DKMS +SRPM_DEFINE_KMOD +SRPM_DEFINE_UTIL +RPM_DEFINE_COMMON +RPM_DEFINE_DKMS +RPM_DEFINE_KMOD +RPM_DEFINE_UTIL +RPM_SPEC_DIR +RPMBUILD_VERSION +RPMBUILD +HAVE_RPMBUILD +RPM_VERSION +RPM +HAVE_RPM +DEFAULT_PACKAGE +VENDOR +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +SPL_META_LT_AGE +SPL_META_LT_REVISION +SPL_META_LT_CURRENT +SPL_META_AUTHOR +SPL_META_DATA +SPL_META_ALIAS +SPL_META_LICENSE +RELEASE +SPL_META_RELEASE +SPL_META_VERSION +SPL_META_NAME +AWK +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +with_spec +with_config +enable_linux_builtin +with_linux +with_linux_obj +enable_debug +enable_debug_kmem +enable_debug_kmem_tracking +enable_atomic_spinlocks +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +LT_SYS_LIBRARY_PATH +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures spl 0.7.5 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/spl] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of spl 0.7.5:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-linux-builtin Configure for builtin in-tree kernel modules + [default=no] + --enable-debug Enable generic debug support [default=no] + --enable-debug-kmem Enable basic kmem accounting [default=no] + --enable-debug-kmem-tracking + Enable detailed kmem tracking [default=no] + --enable-atomic-spinlocks + Atomic types use spinlocks [default=check] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-spec=SPEC Spec files 'generic|redhat' + --with-config=CONFIG Config file 'kernel|user|all|srpm' + --with-linux=PATH Path to kernel source + --with-linux-obj=PATH Path to kernel build objects + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +spl configure 0.7.5 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by spl $as_me 0.7.5, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking metadata" >&5 +$as_echo_n "checking metadata... " >&6; } + + META="$srcdir/META" + _spl_ac_meta_type="none" + if test -f "$META"; then + _spl_ac_meta_type="META file" + + SPL_META_NAME=`$AWK -F ':[ \t]+' '$1 ~ /^ *(Name|Project|Package)$/ { print $2; exit }' $META`; + if test -n "$SPL_META_NAME"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_NAME "$SPL_META_NAME" +_ACEOF + + + fi + + SPL_META_VERSION=`$AWK -F ':[ \t]+' '$1 ~ /^ *Version$/ { print $2; exit }' $META`; + if test -n "$SPL_META_VERSION"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_VERSION "$SPL_META_VERSION" +_ACEOF + + + fi + + SPL_META_RELEASE=`$AWK -F ':[ \t]+' '$1 ~ /^ *Release$/ { print $2; exit }' $META`; + if test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then + _match="${SPL_META_NAME}-${SPL_META_VERSION}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + SPL_META_RELEASE=${_release} + _spl_ac_meta_type="git describe" + else + _match="${SPL_META_NAME}-${SPL_META_VERSION}-${SPL_META_RELEASE}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + SPL_META_RELEASE=${_release} + _spl_ac_meta_type="git describe" + fi + fi + fi + + if test -n "$SPL_META_RELEASE"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_RELEASE "$SPL_META_RELEASE" +_ACEOF + + + + RELEASE="$SPL_META_RELEASE" + + fi + + SPL_META_LICENSE=`$AWK -F ':[ \t]+' '$1 ~ /^ *License$/ { print $2; exit }' $META`; + if test -n "$SPL_META_LICENSE"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_LICENSE "$SPL_META_LICENSE" +_ACEOF + + + fi + + if test -n "$SPL_META_NAME" -a -n "$SPL_META_VERSION"; then + SPL_META_ALIAS="$SPL_META_NAME-$SPL_META_VERSION" + test -n "$SPL_META_RELEASE" && + SPL_META_ALIAS="$SPL_META_ALIAS-$SPL_META_RELEASE" + +cat >>confdefs.h <<_ACEOF +#define SPL_META_ALIAS "$SPL_META_ALIAS" +_ACEOF + + + fi + + SPL_META_DATA=`$AWK -F ':[ \t]+' '$1 ~ /^ *Date$/ { print $2; exit }' $META`; + if test -n "$SPL_META_DATA"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_DATA "$SPL_META_DATA" +_ACEOF + + + fi + + SPL_META_AUTHOR=`$AWK -F ':[ \t]+' '$1 ~ /^ *Author$/ { print $2; exit }' $META`; + if test -n "$SPL_META_AUTHOR"; then + +cat >>confdefs.h <<_ACEOF +#define SPL_META_AUTHOR "$SPL_META_AUTHOR" +_ACEOF + + + fi + + + SPL_META_LT_CURRENT=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Current$/ { print $2; exit }' $META`; + SPL_META_LT_REVISION=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Revision$/ { print $2; exit }' $META`; + SPL_META_LT_AGE=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Age$/ { print $2; exit }' $META`; + if test -n "$SPL_META_LT_CURRENT" \ + -o -n "$SPL_META_LT_REVISION" \ + -o -n "$SPL_META_LT_AGE"; then + test -n "$SPL_META_LT_CURRENT" || SPL_META_LT_CURRENT="0" + test -n "$SPL_META_LT_REVISION" || SPL_META_LT_REVISION="0" + test -n "$SPL_META_LT_AGE" || SPL_META_LT_AGE="0" + +cat >>confdefs.h <<_ACEOF +#define SPL_META_LT_CURRENT "$SPL_META_LT_CURRENT" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define SPL_META_LT_REVISION "$SPL_META_LT_REVISION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define SPL_META_LT_AGE "$SPL_META_LT_AGE" +_ACEOF + + + + + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_spl_ac_meta_type" >&5 +$as_echo "$_spl_ac_meta_type" >&6; } + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='spl' + VERSION='0.7.5' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +ac_config_headers="$ac_config_headers spl_config.h" + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl author" >&5 +$as_echo_n "checking spl author... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPL_META_AUTHOR" >&5 +$as_echo "$SPL_META_AUTHOR" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl license" >&5 +$as_echo_n "checking spl license... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPL_META_LICENSE" >&5 +$as_echo "$SPL_META_LICENSE" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linux distribution" >&5 +$as_echo_n "checking linux distribution... " >&6; } + if test -f /etc/toss-release ; then + VENDOR=toss ; + elif test -f /etc/fedora-release ; then + VENDOR=fedora ; + elif test -f /etc/redhat-release ; then + VENDOR=redhat ; + elif test -f /etc/gentoo-release ; then + VENDOR=gentoo ; + elif test -f /etc/arch-release ; then + VENDOR=arch ; + elif test -f /etc/SuSE-release ; then + VENDOR=sles ; + elif test -f /etc/slackware-version ; then + VENDOR=slackware ; + elif test -f /etc/lunar.release ; then + VENDOR=lunar ; + elif test -f /etc/lsb-release ; then + VENDOR=ubuntu ; + elif test -f /etc/debian_version ; then + VENDOR=debian ; + else + VENDOR= ; + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VENDOR" >&5 +$as_echo "$VENDOR" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking default package type" >&5 +$as_echo_n "checking default package type... " >&6; } + case "$VENDOR" in + toss) DEFAULT_PACKAGE=rpm ;; + redhat) DEFAULT_PACKAGE=rpm ;; + fedora) DEFAULT_PACKAGE=rpm ;; + gentoo) DEFAULT_PACKAGE=tgz ;; + arch) DEFAULT_PACKAGE=tgz ;; + sles) DEFAULT_PACKAGE=rpm ;; + slackware) DEFAULT_PACKAGE=tgz ;; + lunar) DEFAULT_PACKAGE=tgz ;; + ubuntu) DEFAULT_PACKAGE=deb ;; + debian) DEFAULT_PACKAGE=deb ;; + *) DEFAULT_PACKAGE=rpm ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEFAULT_PACKAGE" >&5 +$as_echo "$DEFAULT_PACKAGE" >&6; } + + + + RPM=rpm + RPMBUILD=rpmbuild + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $RPM is available" >&5 +$as_echo_n "checking whether $RPM is available... " >&6; } + if tmp=$($RPM --version 2>/dev/null); then : + + RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $3 }') + HAVE_RPM=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPM ($RPM_VERSION)" >&5 +$as_echo "$HAVE_RPM ($RPM_VERSION)" >&6; } + +else + + HAVE_RPM=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPM" >&5 +$as_echo "$HAVE_RPM" >&6; } + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $RPMBUILD is available" >&5 +$as_echo_n "checking whether $RPMBUILD is available... " >&6; } + if tmp=$($RPMBUILD --version 2>/dev/null); then : + + RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $3 }') + HAVE_RPMBUILD=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPMBUILD ($RPMBUILD_VERSION)" >&5 +$as_echo "$HAVE_RPMBUILD ($RPMBUILD_VERSION)" >&6; } + +else + + HAVE_RPMBUILD=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPMBUILD" >&5 +$as_echo "$HAVE_RPMBUILD" >&6; } + +fi + + RPM_DEFINE_COMMON='--define "$(DEBUG_SPL) 1" --define "$(DEBUG_KMEM) 1" --define "$(DEBUG_KMEM_TRACKING) 1"' + RPM_DEFINE_UTIL= + RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"' + RPM_DEFINE_DKMS= + + SRPM_DEFINE_COMMON='--define "build_src_rpm 1"' + SRPM_DEFINE_UTIL= + SRPM_DEFINE_KMOD= + SRPM_DEFINE_DKMS= + + RPM_SPEC_DIR="rpm/generic" + +# Check whether --with-spec was given. +if test "${with_spec+set}" = set; then : + withval=$with_spec; RPM_SPEC_DIR="rpm/$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether spec files are available" >&5 +$as_echo_n "checking whether spec files are available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($RPM_SPEC_DIR/*.spec.in)" >&5 +$as_echo "yes ($RPM_SPEC_DIR/*.spec.in)" >&6; } + + + + + + + + + + + + + + + + + + + + + DPKG=dpkg + DPKGBUILD=dpkg-buildpackage + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $DPKG is available" >&5 +$as_echo_n "checking whether $DPKG is available... " >&6; } + if tmp=$($DPKG --version 2>/dev/null); then : + + DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $7 }') + HAVE_DPKG=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKG ($DPKG_VERSION)" >&5 +$as_echo "$HAVE_DPKG ($DPKG_VERSION)" >&6; } + +else + + HAVE_DPKG=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKG" >&5 +$as_echo "$HAVE_DPKG" >&6; } + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $DPKGBUILD is available" >&5 +$as_echo_n "checking whether $DPKGBUILD is available... " >&6; } + if tmp=$($DPKGBUILD --version 2>/dev/null); then : + + DPKGBUILD_VERSION=$(echo $tmp | \ + $AWK '/Debian/ { print $4 }' | cut -f-4 -d'.') + HAVE_DPKGBUILD=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKGBUILD ($DPKGBUILD_VERSION)" >&5 +$as_echo "$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)" >&6; } + +else + + HAVE_DPKGBUILD=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKGBUILD" >&5 +$as_echo "$HAVE_DPKGBUILD" >&6; } + +fi + + + + + + + + + + + ALIEN=alien + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $ALIEN is available" >&5 +$as_echo_n "checking whether $ALIEN is available... " >&6; } + if tmp=$($ALIEN --version 2>/dev/null); then : + + ALIEN_VERSION=$(echo $tmp | $AWK '{ print $3 }') + HAVE_ALIEN=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_ALIEN ($ALIEN_VERSION)" >&5 +$as_echo "$HAVE_ALIEN ($ALIEN_VERSION)" >&6; } + +else + + HAVE_ALIEN=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_ALIEN" >&5 +$as_echo "$HAVE_ALIEN" >&6; } + +fi + + + + + + + + SPL_CONFIG=all + +# Check whether --with-config was given. +if test "${with_config+set}" = set; then : + withval=$with_config; SPL_CONFIG="$withval" +fi + + # Check whether --enable-linux-builtin was given. +if test "${enable_linux_builtin+set}" = set; then : + enableval=$enable_linux_builtin; +else + enable_linux_builtin=no +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl config" >&5 +$as_echo_n "checking spl config... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPL_CONFIG" >&5 +$as_echo "$SPL_CONFIG" >&6; }; + + + case "$SPL_CONFIG" in + kernel) + + +# Check whether --with-linux was given. +if test "${with_linux+set}" = set; then : + withval=$with_linux; kernelsrc="$withval" +fi + + + +# Check whether --with-linux-obj was given. +if test "${with_linux_obj+set}" = set; then : + withval=$with_linux_obj; kernelbuild="$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source directory" >&5 +$as_echo_n "checking kernel source directory... " >&6; } + if test -z "$kernelsrc"; then + if test -e "/lib/modules/$(uname -r)/source"; then + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + elif test -e "/lib/modules/$(uname -r)/build"; then + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + else + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + fi + + if test -n "$sourcelink" && test -e ${sourcelink}; then + kernelsrc=`readlink -f ${sourcelink}` + else + kernelsrc="Not found" + fi + else + if test "$kernelsrc" = "NONE"; then + kernsrcver=NONE + fi + withlinux=yes + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelsrc" >&5 +$as_echo "$kernelsrc" >&6; } + if test ! -d "$kernelsrc"; then + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option." "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel build directory" >&5 +$as_echo_n "checking kernel build directory... " >&6; } + if test -z "$kernelbuild"; then + if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + elif test -d ${kernelsrc}-obj/${target_cpu}/default; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + else + kernelbuild=${kernelsrc} + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelbuild" >&5 +$as_echo "$kernelbuild" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source version" >&5 +$as_echo_n "checking kernel source version... " >&6; } + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then + utsrelease=linux/version.h + elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then + utsrelease=linux/utsrelease.h + elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then + utsrelease=generated/utsrelease.h + fi + + if test "$utsrelease"; then + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + if test -z "$kernsrcver"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? "*** Cannot determine kernel version." "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Cannot find UTS_RELEASE definition." "$LINENO" 5 + else + as_fn_error $? " + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernsrcver" >&5 +$as_echo "$kernsrcver" >&6; } + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + + + + + + modpost=$LINUX/scripts/Makefile.modpost + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel file name for module symbols" >&5 +$as_echo_n "checking kernel file name for module symbols... " >&6; } + if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then + if grep -q Modules.symvers $modpost; then + LINUX_SYMBOLS=Modules.symvers + else + LINUX_SYMBOLS=Module.symvers + fi + + if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source." "$LINENO" 5 + fi + else + LINUX_SYMBOLS=NONE + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINUX_SYMBOLS" >&5 +$as_echo "$LINUX_SYMBOLS" >&6; } + + + + + if test "${LINUX_OBJ}" != "${LINUX}"; then + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + fi + + + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether debugging is enabled" >&5 +$as_echo_n "checking whether debugging is enabled... " >&6; } + # Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + + + if test "x$enable_debug" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_SPL="_with_debug" + +else + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG" + DEBUG_CFLAGS="-DNDEBUG" + DEBUG_SPL="_without_debug" + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 +$as_echo "$enable_debug" >&6; } + + + # Check whether --enable-debug-kmem was given. +if test "${enable_debug_kmem+set}" = set; then : + enableval=$enable_debug_kmem; +else + enable_debug_kmem=no +fi + + + if test "x$enable_debug_kmem" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" + DEBUG_KMEM="_with_debug_kmem" + +$as_echo "#define DEBUG_KMEM 1" >>confdefs.h + + +else + + DEBUG_KMEM="_without_debug_kmem" + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether basic kmem accounting is enabled" >&5 +$as_echo_n "checking whether basic kmem accounting is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug_kmem" >&5 +$as_echo "$enable_debug_kmem" >&6; } + + + # Check whether --enable-debug-kmem-tracking was given. +if test "${enable_debug_kmem_tracking+set}" = set; then : + enableval=$enable_debug_kmem_tracking; +else + enable_debug_kmem_tracking=no +fi + + + if test "x$enable_debug_kmem_tracking" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING" + DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking" + +$as_echo "#define DEBUG_KMEM_TRACKING 1" >>confdefs.h + + +else + + DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking" + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether detailed kmem tracking is enabled" >&5 +$as_echo_n "checking whether detailed kmem tracking is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug_kmem_tracking" >&5 +$as_echo "$enable_debug_kmem_tracking" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether modules can be built" >&5 +$as_echo_n "checking whether modules can be built... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Unable to build an empty module." "$LINENO" 5 + else + as_fn_error $? " + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree." "$LINENO" 5 + fi + + + +fi + rm -Rf build + + + + if test "x$cross_compiling" != xyes; then : + + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include "$LINUX/include/linux/license.h" + +int +main () +{ + + return !license_is_gpl_compatible( + "$SPL_META_LICENSE"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + + +$as_echo "#define SPL_IS_GPL_COMPATIBLE 1" >>confdefs.h + + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi + + + # Check whether --enable-atomic-spinlocks was given. +if test "${enable_atomic_spinlocks+set}" = set; then : + enableval=$enable_atomic_spinlocks; +else + enable_atomic_spinlocks=check +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + atomic64_t *ptr __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + have_atomic64_t=yes + +$as_echo "#define HAVE_ATOMIC64_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + have_atomic64_t=no + + + +fi + rm -Rf build + + + + if test "x$enable_atomic_spinlocks" = xcheck; then : + + if test "x$have_atomic64_t" = xyes; then : + + enable_atomic_spinlocks=no + +else + + enable_atomic_spinlocks=yes + +fi + +fi + + if test "x$enable_atomic_spinlocks" = xyes; then : + + +$as_echo "#define ATOMIC_SPINLOCK 1" >>confdefs.h + + +else + + if test "x$have_atomic64_t" = xno; then : + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "--disable-atomic-spinlocks given but required atomic64 support is unavailable +See \`config.log' for more details" "$LINENO" 5; } + +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether atomic types use spinlocks" >&5 +$as_echo_n "checking whether atomic types use spinlocks... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_atomic_spinlocks" >&5 +$as_echo "$enable_atomic_spinlocks" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel defines atomic64_t" >&5 +$as_echo_n "checking whether kernel defines atomic64_t... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_atomic64_t" >&5 +$as_echo "$have_atomic64_t" >&6; } + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether old 2-argument shrinker exists" >&5 +$as_echo_n "checking whether old 2-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_OLD_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether old 3-argument shrinker exists" >&5 +$as_echo_n "checking whether old 3-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(struct shrinker *, int nr_to_scan, + gfp_t gfp_mask); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether new 2-argument shrinker exists" >&5 +$as_echo_n "checking whether new 2-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(struct shrinker *, + struct shrink_control *sc); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_NEW_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ->count_objects callback exists" >&5 +$as_echo_n "checking whether ->count_objects callback exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + unsigned long shrinker_cb( + struct shrinker *, + struct shrink_control *sc); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .count_objects = shrinker_cb, + .scan_objects = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SPLIT_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "error" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct ctl_table has ctl_name" >&5 +$as_echo_n "checking whether struct ctl_table has ctl_name... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct ctl_table ctl __attribute__ ((unused)); + ctl.ctl_name = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CTL_NAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_TRIM_UNUSED_KSYM is disabled" >&5 +$as_echo_n "checking whether CONFIG_TRIM_UNUSED_KSYM is disabled... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if defined(CONFIG_TRIM_UNUSED_KSYMS) + #error CONFIG_TRIM_UNUSED_KSYMS not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel has unused symbols trimming enabled, please disable. + *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether PDE_DATA() is available" >&5 +$as_echo_n "checking whether PDE_DATA() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + PDE_DATA(NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]PDE_DATA[[:space:]]' \ + $LINUX_OBJ/Module*.symvers 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in ; do + grep -q -E "EXPORT_SYMBOL.*(PDE_DATA)" \ + "$LINUX_OBJ/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PDE_DATA 1" >>confdefs.h + + + fi + fi + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_fs_pwd() requires const struct path *" >&5 +$as_echo_n "checking whether set_fs_pwd() requires const struct path *... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, const struct path *) + = set_fs_pwd; + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_FS_PWD_WITH_CONST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, struct path *) + = set_fs_pwd; + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "unknown" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_unlink() wants 2 args" >&5 +$as_echo_n "checking whether vfs_unlink() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_unlink((struct inode *) NULL, (struct dentry *) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_UNLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_unlink() wants 3 args" >&5 +$as_echo_n "checking whether vfs_unlink() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_unlink((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_VFS_UNLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 4 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 4 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, (struct dentry *) NULL, + (struct inode *) NULL, (struct dentry *) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_4ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 5 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 5 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_5ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 6 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 6 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL, + (unsigned int) 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_6ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_fsync() wants 2 args" >&5 +$as_echo_n "checking whether vfs_fsync() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_fsync(NULL, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_FSYNC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether truncate_range() inode operation is available" >&5 +$as_echo_n "checking whether truncate_range() inode operation is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode_operations ops; + ops.truncate_range = NULL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_TRUNCATE_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct fs_struct uses spinlock_t" >&5 +$as_echo_n "checking whether struct fs_struct uses spinlock_t... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + static struct fs_struct fs; + spin_lock_init(&fs.lock); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FS_STRUCT_SPINLOCK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kuid_t/kgid_t is available" >&5 +$as_echo_n "checking whether kuid_t/kgid_t is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + kuid_t userid = KUIDT_INIT(0); + kgid_t groupid = KGIDT_INIT(0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + kuid_t userid = 0; + kgid_t groupid = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; optional" >&5 +$as_echo "yes; optional" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; mandatory" >&5 +$as_echo "yes; mandatory" >&6; } + +$as_echo "#define HAVE_KUIDGID_T 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->fallocate() exists" >&5 +$as_echo_n "checking whether iops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL; + struct inode_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations_no_const fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_ZLIB_INFLATE is defined" >&5 +$as_echo_n "checking whether CONFIG_ZLIB_INFLATE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(CONFIG_ZLIB_INFLATE) && \ + !defined(CONFIG_ZLIB_INFLATE_MODULE) + #error CONFIG_ZLIB_INFLATE not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel does not include the required zlib inflate support. + *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_ZLIB_DEFLATE is defined" >&5 +$as_echo_n "checking whether CONFIG_ZLIB_DEFLATE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(CONFIG_ZLIB_DEFLATE) && \ + !defined(CONFIG_ZLIB_DEFLATE_MODULE) + #error CONFIG_ZLIB_DEFLATE not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel does not include the required zlib deflate support. + *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether zlib_deflate_workspacesize() wants 2 args" >&5 +$as_echo_n "checking whether zlib_deflate_workspacesize() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct shrink_control exists" >&5 +$as_echo_n "checking whether struct shrink_control exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct shrink_control sc __attribute__ ((unused)); + + sc.nr_to_scan = 0; + sc.gfp_mask = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHRINK_CONTROL_STRUCT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore member wait_lock is raw" >&5 +$as_echo_n "checking whether struct rw_semaphore member wait_lock is raw... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + raw_spinlock_t dummy_lock __attribute__ ((unused)) = + __RAW_SPIN_LOCK_INITIALIZER(dummy_lock); + dummy_semaphore.wait_lock = dummy_lock; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define RWSEM_SPINLOCK_IS_RAW 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore has member activity" >&5 +$as_echo_n "checking whether struct rw_semaphore has member activity... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + dummy_semaphore.activity = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RWSEM_ACTIVITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore has atomic_long_t member count" >&5 +$as_echo_n "checking whether struct rw_semaphore has atomic_long_t member count... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + DECLARE_RWSEM(dummy_semaphore); + (void) atomic_long_read(&dummy_semaphore.count); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RWSEM_ATOMIC_LONG_COUNT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether header linux/sched/rt.h exists" >&5 +$as_echo_n "checking whether header linux/sched/rt.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_SCHED_RT_HEADER 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether header linux/sched/signal.h exists" >&5 +$as_echo_n "checking whether header linux/sched/signal.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_SCHED_SIGNAL_HEADER 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 4 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 4 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((const struct path *)NULL, + (struct kstat *)NULL, + (u32)0, + (unsigned int)0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_4ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 3 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((struct vfsmount *)NULL, + (struct dentry *)NULL, + (struct kstat *)NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 2 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((struct path *) NULL, + (struct kstat *)NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep_range() is available" >&5 +$as_echo_n "checking whether usleep_range() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + usleep_range(0, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_USLEEP_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct kmem_cache has allocflags" >&5 +$as_echo_n "checking whether struct kmem_cache has allocflags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct kmem_cache cachep __attribute__ ((unused)); + cachep.allocflags = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_ALLOCFLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct kmem_cache has gfpflags" >&5 +$as_echo_n "checking whether struct kmem_cache has gfpflags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct kmem_cache cachep __attribute__ ((unused)); + cachep.gfpflags = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_GFPFLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_on_bit() takes an action" >&5 +$as_echo_n "checking whether wait_on_bit() takes an action... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int (*action)(void *) = NULL; + wait_on_bit(NULL, 0, action, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_ON_BIT_ACTION 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_lock_shared() exists" >&5 +$as_echo_n "checking whether inode_lock_shared() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *inode = NULL; + inode_lock_shared(inode); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_LOCK_SHARED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether group_info->gid exists" >&5 +$as_echo_n "checking whether group_info->gid exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct group_info *gi = groups_alloc(1); + gi->gid[0] = KGIDT_INIT(0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GROUP_INFO_GID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kmem_cache_create_usercopy() exists" >&5 +$as_echo_n "checking whether kmem_cache_create_usercopy() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + static void ctor(void *foo) + { + // fake ctor + } + +int +main (void) +{ + + struct kmem_cache *skc_linux_cache; + const char *name = "test"; + size_t size = 4096; + size_t align = 8; + unsigned long flags = 0; + size_t useroffset = 0; + size_t usersize = size - useroffset; + + skc_linux_cache = kmem_cache_create_usercopy( + name, size, align, flags, useroffset, usersize, ctor); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_CREATE_USERCOPY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_queue_entry_t exists" >&5 +$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + wait_queue_entry_t *entry __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_QUEUE_ENTRY_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wq_head->head and wq_entry->entry exist" >&5 +$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + #ifdef HAVE_WAIT_QUEUE_ENTRY_T + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_entry_t spl_wait_queue_entry_t; + #else + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_t spl_wait_queue_entry_t; + #endif + +int +main (void) +{ + + spl_wait_queue_head_t wq_head; + spl_wait_queue_entry_t wq_entry; + struct list_head *head __attribute__ ((unused)); + struct list_head *entry __attribute__ ((unused)); + + head = &wq_head.head; + entry = &wq_entry.entry; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel_write() takes loff_t pointer" >&5 +$as_echo_n "checking whether kernel_write() takes loff_t pointer... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *file = NULL; + const void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_write(file, buf, count, pos); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_WRITE_PPOS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel_read() takes loff_t pointer" >&5 +$as_echo_n "checking whether kernel_read() takes loff_t pointer... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *file = NULL; + void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_read(file, buf, count, pos); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_READ_PPOS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether timer_setup() exists" >&5 +$as_echo_n "checking whether timer_setup() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct timer_list timer; + + timer_setup(&timer, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_TIMER_SETUP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + ;; + user) ;; + all) + + +# Check whether --with-linux was given. +if test "${with_linux+set}" = set; then : + withval=$with_linux; kernelsrc="$withval" +fi + + + +# Check whether --with-linux-obj was given. +if test "${with_linux_obj+set}" = set; then : + withval=$with_linux_obj; kernelbuild="$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source directory" >&5 +$as_echo_n "checking kernel source directory... " >&6; } + if test -z "$kernelsrc"; then + if test -e "/lib/modules/$(uname -r)/source"; then + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + elif test -e "/lib/modules/$(uname -r)/build"; then + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + else + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + fi + + if test -n "$sourcelink" && test -e ${sourcelink}; then + kernelsrc=`readlink -f ${sourcelink}` + else + kernelsrc="Not found" + fi + else + if test "$kernelsrc" = "NONE"; then + kernsrcver=NONE + fi + withlinux=yes + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelsrc" >&5 +$as_echo "$kernelsrc" >&6; } + if test ! -d "$kernelsrc"; then + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option." "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel build directory" >&5 +$as_echo_n "checking kernel build directory... " >&6; } + if test -z "$kernelbuild"; then + if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + elif test -d ${kernelsrc}-obj/${target_cpu}/default; then + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + else + kernelbuild=${kernelsrc} + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelbuild" >&5 +$as_echo "$kernelbuild" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source version" >&5 +$as_echo_n "checking kernel source version... " >&6; } + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then + utsrelease=linux/version.h + elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then + utsrelease=linux/utsrelease.h + elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then + utsrelease=generated/utsrelease.h + fi + + if test "$utsrelease"; then + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + if test -z "$kernsrcver"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? "*** Cannot determine kernel version." "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Cannot find UTS_RELEASE definition." "$LINENO" 5 + else + as_fn_error $? " + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernsrcver" >&5 +$as_echo "$kernsrcver" >&6; } + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + + + + + + modpost=$LINUX/scripts/Makefile.modpost + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel file name for module symbols" >&5 +$as_echo_n "checking kernel file name for module symbols... " >&6; } + if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then + if grep -q Modules.symvers $modpost; then + LINUX_SYMBOLS=Modules.symvers + else + LINUX_SYMBOLS=Module.symvers + fi + + if ! test -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source." "$LINENO" 5 + fi + else + LINUX_SYMBOLS=NONE + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINUX_SYMBOLS" >&5 +$as_echo "$LINUX_SYMBOLS" >&6; } + + + + + if test "${LINUX_OBJ}" != "${LINUX}"; then + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + fi + + + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether debugging is enabled" >&5 +$as_echo_n "checking whether debugging is enabled... " >&6; } + # Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + + + if test "x$enable_debug" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_SPL="_with_debug" + +else + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG" + DEBUG_CFLAGS="-DNDEBUG" + DEBUG_SPL="_without_debug" + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 +$as_echo "$enable_debug" >&6; } + + + # Check whether --enable-debug-kmem was given. +if test "${enable_debug_kmem+set}" = set; then : + enableval=$enable_debug_kmem; +else + enable_debug_kmem=no +fi + + + if test "x$enable_debug_kmem" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" + DEBUG_KMEM="_with_debug_kmem" + +$as_echo "#define DEBUG_KMEM 1" >>confdefs.h + + +else + + DEBUG_KMEM="_without_debug_kmem" + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether basic kmem accounting is enabled" >&5 +$as_echo_n "checking whether basic kmem accounting is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug_kmem" >&5 +$as_echo "$enable_debug_kmem" >&6; } + + + # Check whether --enable-debug-kmem-tracking was given. +if test "${enable_debug_kmem_tracking+set}" = set; then : + enableval=$enable_debug_kmem_tracking; +else + enable_debug_kmem_tracking=no +fi + + + if test "x$enable_debug_kmem_tracking" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING" + DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking" + +$as_echo "#define DEBUG_KMEM_TRACKING 1" >>confdefs.h + + +else + + DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking" + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether detailed kmem tracking is enabled" >&5 +$as_echo_n "checking whether detailed kmem tracking is enabled... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug_kmem_tracking" >&5 +$as_echo "$enable_debug_kmem_tracking" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether modules can be built" >&5 +$as_echo_n "checking whether modules can be built... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Unable to build an empty module." "$LINENO" 5 + else + as_fn_error $? " + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree." "$LINENO" 5 + fi + + + +fi + rm -Rf build + + + + if test "x$cross_compiling" != xyes; then : + + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include "$LINUX/include/linux/license.h" + +int +main () +{ + + return !license_is_gpl_compatible( + "$SPL_META_LICENSE"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + + +$as_echo "#define SPL_IS_GPL_COMPATIBLE 1" >>confdefs.h + + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi + + + # Check whether --enable-atomic-spinlocks was given. +if test "${enable_atomic_spinlocks+set}" = set; then : + enableval=$enable_atomic_spinlocks; +else + enable_atomic_spinlocks=check +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + atomic64_t *ptr __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + have_atomic64_t=yes + +$as_echo "#define HAVE_ATOMIC64_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + have_atomic64_t=no + + + +fi + rm -Rf build + + + + if test "x$enable_atomic_spinlocks" = xcheck; then : + + if test "x$have_atomic64_t" = xyes; then : + + enable_atomic_spinlocks=no + +else + + enable_atomic_spinlocks=yes + +fi + +fi + + if test "x$enable_atomic_spinlocks" = xyes; then : + + +$as_echo "#define ATOMIC_SPINLOCK 1" >>confdefs.h + + +else + + if test "x$have_atomic64_t" = xno; then : + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "--disable-atomic-spinlocks given but required atomic64 support is unavailable +See \`config.log' for more details" "$LINENO" 5; } + +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether atomic types use spinlocks" >&5 +$as_echo_n "checking whether atomic types use spinlocks... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_atomic_spinlocks" >&5 +$as_echo "$enable_atomic_spinlocks" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel defines atomic64_t" >&5 +$as_echo_n "checking whether kernel defines atomic64_t... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_atomic64_t" >&5 +$as_echo "$have_atomic64_t" >&6; } + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether old 2-argument shrinker exists" >&5 +$as_echo_n "checking whether old 2-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(int nr_to_scan, gfp_t gfp_mask); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_OLD_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether old 3-argument shrinker exists" >&5 +$as_echo_n "checking whether old 3-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(struct shrinker *, int nr_to_scan, + gfp_t gfp_mask); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether new 2-argument shrinker exists" >&5 +$as_echo_n "checking whether new 2-argument shrinker exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrinker_cb(struct shrinker *, + struct shrink_control *sc); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .shrink = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_NEW_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ->count_objects callback exists" >&5 +$as_echo_n "checking whether ->count_objects callback exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + unsigned long shrinker_cb( + struct shrinker *, + struct shrink_control *sc); + +int +main (void) +{ + + struct shrinker cache_shrinker = { + .count_objects = shrinker_cb, + .scan_objects = shrinker_cb, + .seeks = DEFAULT_SEEKS, + }; + register_shrinker(&cache_shrinker); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SPLIT_SHRINKER_CALLBACK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "error" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct ctl_table has ctl_name" >&5 +$as_echo_n "checking whether struct ctl_table has ctl_name... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct ctl_table ctl __attribute__ ((unused)); + ctl.ctl_name = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CTL_NAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_TRIM_UNUSED_KSYM is disabled" >&5 +$as_echo_n "checking whether CONFIG_TRIM_UNUSED_KSYM is disabled... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if defined(CONFIG_TRIM_UNUSED_KSYMS) + #error CONFIG_TRIM_UNUSED_KSYMS not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel has unused symbols trimming enabled, please disable. + *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether PDE_DATA() is available" >&5 +$as_echo_n "checking whether PDE_DATA() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + PDE_DATA(NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]PDE_DATA[[:space:]]' \ + $LINUX_OBJ/Module*.symvers 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in ; do + grep -q -E "EXPORT_SYMBOL.*(PDE_DATA)" \ + "$LINUX_OBJ/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PDE_DATA 1" >>confdefs.h + + + fi + fi + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_fs_pwd() requires const struct path *" >&5 +$as_echo_n "checking whether set_fs_pwd() requires const struct path *... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, const struct path *) + = set_fs_pwd; + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_FS_PWD_WITH_CONST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + void (*const set_fs_pwd_func) + (struct fs_struct *, struct path *) + = set_fs_pwd; + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "unknown" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_unlink() wants 2 args" >&5 +$as_echo_n "checking whether vfs_unlink() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_unlink((struct inode *) NULL, (struct dentry *) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_UNLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_unlink() wants 3 args" >&5 +$as_echo_n "checking whether vfs_unlink() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_unlink((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_VFS_UNLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 4 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 4 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, (struct dentry *) NULL, + (struct inode *) NULL, (struct dentry *) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_4ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 5 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 5 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_5ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_rename() wants 6 args" >&5 +$as_echo_n "checking whether vfs_rename() wants 6 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_rename((struct inode *) NULL, + (struct dentry *) NULL, + (struct inode *) NULL, + (struct dentry *) NULL, + (struct inode **) NULL, + (unsigned int) 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_6ARGS_VFS_RENAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_fsync() wants 2 args" >&5 +$as_echo_n "checking whether vfs_fsync() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_fsync(NULL, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_FSYNC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether truncate_range() inode operation is available" >&5 +$as_echo_n "checking whether truncate_range() inode operation is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode_operations ops; + ops.truncate_range = NULL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_TRUNCATE_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct fs_struct uses spinlock_t" >&5 +$as_echo_n "checking whether struct fs_struct uses spinlock_t... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + static struct fs_struct fs; + spin_lock_init(&fs.lock); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FS_STRUCT_SPINLOCK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kuid_t/kgid_t is available" >&5 +$as_echo_n "checking whether kuid_t/kgid_t is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + kuid_t userid = KUIDT_INIT(0); + kgid_t groupid = KGIDT_INIT(0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + kuid_t userid = 0; + kgid_t groupid = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; optional" >&5 +$as_echo "yes; optional" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; mandatory" >&5 +$as_echo "yes; mandatory" >&6; } + +$as_echo "#define HAVE_KUIDGID_T 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->fallocate() exists" >&5 +$as_echo_n "checking whether iops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL; + struct inode_operations fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations_no_const fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_ZLIB_INFLATE is defined" >&5 +$as_echo_n "checking whether CONFIG_ZLIB_INFLATE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(CONFIG_ZLIB_INFLATE) && \ + !defined(CONFIG_ZLIB_INFLATE_MODULE) + #error CONFIG_ZLIB_INFLATE not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel does not include the required zlib inflate support. + *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CONFIG_ZLIB_DEFLATE is defined" >&5 +$as_echo_n "checking whether CONFIG_ZLIB_DEFLATE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(CONFIG_ZLIB_DEFLATE) && \ + !defined(CONFIG_ZLIB_DEFLATE_MODULE) + #error CONFIG_ZLIB_DEFLATE not defined + #endif + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? " + *** This kernel does not include the required zlib deflate support. + *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set." "$LINENO" 5 + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether zlib_deflate_workspacesize() wants 2 args" >&5 +$as_echo_n "checking whether zlib_deflate_workspacesize() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + return zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct shrink_control exists" >&5 +$as_echo_n "checking whether struct shrink_control exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct shrink_control sc __attribute__ ((unused)); + + sc.nr_to_scan = 0; + sc.gfp_mask = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHRINK_CONTROL_STRUCT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore member wait_lock is raw" >&5 +$as_echo_n "checking whether struct rw_semaphore member wait_lock is raw... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + raw_spinlock_t dummy_lock __attribute__ ((unused)) = + __RAW_SPIN_LOCK_INITIALIZER(dummy_lock); + dummy_semaphore.wait_lock = dummy_lock; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define RWSEM_SPINLOCK_IS_RAW 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore has member activity" >&5 +$as_echo_n "checking whether struct rw_semaphore has member activity... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct rw_semaphore dummy_semaphore __attribute__ ((unused)); + dummy_semaphore.activity = 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RWSEM_ACTIVITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct rw_semaphore has atomic_long_t member count" >&5 +$as_echo_n "checking whether struct rw_semaphore has atomic_long_t member count... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + DECLARE_RWSEM(dummy_semaphore); + (void) atomic_long_read(&dummy_semaphore.count); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RWSEM_ATOMIC_LONG_COUNT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether header linux/sched/rt.h exists" >&5 +$as_echo_n "checking whether header linux/sched/rt.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_SCHED_RT_HEADER 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether header linux/sched/signal.h exists" >&5 +$as_echo_n "checking whether header linux/sched/signal.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + return 0; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_SCHED_SIGNAL_HEADER 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 4 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 4 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((const struct path *)NULL, + (struct kstat *)NULL, + (u32)0, + (unsigned int)0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_4ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 3 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((struct vfsmount *)NULL, + (struct dentry *)NULL, + (struct kstat *)NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vfs_getattr() wants 2 args" >&5 +$as_echo_n "checking whether vfs_getattr() wants 2 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + vfs_getattr((struct path *) NULL, + (struct kstat *)NULL); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_VFS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep_range() is available" >&5 +$as_echo_n "checking whether usleep_range() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + usleep_range(0, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_USLEEP_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct kmem_cache has allocflags" >&5 +$as_echo_n "checking whether struct kmem_cache has allocflags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct kmem_cache cachep __attribute__ ((unused)); + cachep.allocflags = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_ALLOCFLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct kmem_cache has gfpflags" >&5 +$as_echo_n "checking whether struct kmem_cache has gfpflags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct kmem_cache cachep __attribute__ ((unused)); + cachep.gfpflags = GFP_KERNEL; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_GFPFLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_on_bit() takes an action" >&5 +$as_echo_n "checking whether wait_on_bit() takes an action... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int (*action)(void *) = NULL; + wait_on_bit(NULL, 0, action, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_ON_BIT_ACTION 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_lock_shared() exists" >&5 +$as_echo_n "checking whether inode_lock_shared() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *inode = NULL; + inode_lock_shared(inode); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_LOCK_SHARED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether group_info->gid exists" >&5 +$as_echo_n "checking whether group_info->gid exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct group_info *gi = groups_alloc(1); + gi->gid[0] = KGIDT_INIT(0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GROUP_INFO_GID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kmem_cache_create_usercopy() exists" >&5 +$as_echo_n "checking whether kmem_cache_create_usercopy() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + static void ctor(void *foo) + { + // fake ctor + } + +int +main (void) +{ + + struct kmem_cache *skc_linux_cache; + const char *name = "test"; + size_t size = 4096; + size_t align = 8; + unsigned long flags = 0; + size_t useroffset = 0; + size_t usersize = size - useroffset; + + skc_linux_cache = kmem_cache_create_usercopy( + name, size, align, flags, useroffset, usersize, ctor); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KMEM_CACHE_CREATE_USERCOPY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wait_queue_entry_t exists" >&5 +$as_echo_n "checking whether wait_queue_entry_t exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + wait_queue_entry_t *entry __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_QUEUE_ENTRY_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wq_head->head and wq_entry->entry exist" >&5 +$as_echo_n "checking whether wq_head->head and wq_entry->entry exist... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + #ifdef HAVE_WAIT_QUEUE_ENTRY_T + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_entry_t spl_wait_queue_entry_t; + #else + typedef wait_queue_head_t spl_wait_queue_head_t; + typedef wait_queue_t spl_wait_queue_entry_t; + #endif + +int +main (void) +{ + + spl_wait_queue_head_t wq_head; + spl_wait_queue_entry_t wq_entry; + struct list_head *head __attribute__ ((unused)); + struct list_head *entry __attribute__ ((unused)); + + head = &wq_head.head; + entry = &wq_entry.entry; + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_WAIT_QUEUE_HEAD_ENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel_write() takes loff_t pointer" >&5 +$as_echo_n "checking whether kernel_write() takes loff_t pointer... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *file = NULL; + const void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_write(file, buf, count, pos); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_WRITE_PPOS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel_read() takes loff_t pointer" >&5 +$as_echo_n "checking whether kernel_read() takes loff_t pointer... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *file = NULL; + void *buf = NULL; + size_t count = 0; + loff_t *pos = NULL; + ssize_t ret; + + ret = kernel_read(file, buf, count, pos); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_READ_PPOS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether timer_setup() exists" >&5 +$as_echo_n "checking whether timer_setup() exists... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-Werror" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct timer_list timer; + + timer_setup(&timer, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_TIMER_SETUP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + ;; + srpm) ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error!" >&5 +$as_echo "Error!" >&6; } + as_fn_error $? "Bad value \"$SPL_CONFIG\" for --with-config, + user kernel|user|all|srpm" "$LINENO" 5 ;; + esac + + if test "$SPL_CONFIG" = user -o "$SPL_CONFIG" = all; then + CONFIG_USER_TRUE= + CONFIG_USER_FALSE='#' +else + CONFIG_USER_TRUE='#' + CONFIG_USER_FALSE= +fi + + if test "$SPL_CONFIG" = kernel -o "$SPL_CONFIG" = all && + test "x$enable_linux_builtin" != xyes ; then + CONFIG_KERNEL_TRUE= + CONFIG_KERNEL_FALSE='#' +else + CONFIG_KERNEL_TRUE='#' + CONFIG_KERNEL_FALSE= +fi + + + +ac_config_files="$ac_config_files Makefile man/Makefile man/man1/Makefile man/man5/Makefile lib/Makefile cmd/Makefile cmd/splat/Makefile cmd/splslab/Makefile module/Makefile module/spl/Makefile module/splat/Makefile include/Makefile include/fs/Makefile include/linux/Makefile include/rpc/Makefile include/sharefs/Makefile include/sys/Makefile include/sys/fm/Makefile include/sys/fs/Makefile include/sys/sysevent/Makefile include/util/Makefile include/vm/Makefile scripts/Makefile rpm/Makefile rpm/redhat/Makefile rpm/redhat/spl.spec rpm/redhat/spl-kmod.spec rpm/redhat/spl-dkms.spec rpm/generic/Makefile rpm/generic/spl.spec rpm/generic/spl-kmod.spec rpm/generic/spl-dkms.spec spl.release" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_USER_TRUE}" && test -z "${CONFIG_USER_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_USER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_KERNEL_TRUE}" && test -z "${CONFIG_KERNEL_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_KERNEL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by spl $as_me 0.7.5, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +spl config.status 0.7.5 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "spl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS spl_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "man/man1/Makefile") CONFIG_FILES="$CONFIG_FILES man/man1/Makefile" ;; + "man/man5/Makefile") CONFIG_FILES="$CONFIG_FILES man/man5/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "cmd/Makefile") CONFIG_FILES="$CONFIG_FILES cmd/Makefile" ;; + "cmd/splat/Makefile") CONFIG_FILES="$CONFIG_FILES cmd/splat/Makefile" ;; + "cmd/splslab/Makefile") CONFIG_FILES="$CONFIG_FILES cmd/splslab/Makefile" ;; + "module/Makefile") CONFIG_FILES="$CONFIG_FILES module/Makefile" ;; + "module/spl/Makefile") CONFIG_FILES="$CONFIG_FILES module/spl/Makefile" ;; + "module/splat/Makefile") CONFIG_FILES="$CONFIG_FILES module/splat/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "include/fs/Makefile") CONFIG_FILES="$CONFIG_FILES include/fs/Makefile" ;; + "include/linux/Makefile") CONFIG_FILES="$CONFIG_FILES include/linux/Makefile" ;; + "include/rpc/Makefile") CONFIG_FILES="$CONFIG_FILES include/rpc/Makefile" ;; + "include/sharefs/Makefile") CONFIG_FILES="$CONFIG_FILES include/sharefs/Makefile" ;; + "include/sys/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/Makefile" ;; + "include/sys/fm/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/fm/Makefile" ;; + "include/sys/fs/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/fs/Makefile" ;; + "include/sys/sysevent/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/sysevent/Makefile" ;; + "include/util/Makefile") CONFIG_FILES="$CONFIG_FILES include/util/Makefile" ;; + "include/vm/Makefile") CONFIG_FILES="$CONFIG_FILES include/vm/Makefile" ;; + "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; + "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; + "rpm/redhat/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/redhat/Makefile" ;; + "rpm/redhat/spl.spec") CONFIG_FILES="$CONFIG_FILES rpm/redhat/spl.spec" ;; + "rpm/redhat/spl-kmod.spec") CONFIG_FILES="$CONFIG_FILES rpm/redhat/spl-kmod.spec" ;; + "rpm/redhat/spl-dkms.spec") CONFIG_FILES="$CONFIG_FILES rpm/redhat/spl-dkms.spec" ;; + "rpm/generic/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/generic/Makefile" ;; + "rpm/generic/spl.spec") CONFIG_FILES="$CONFIG_FILES rpm/generic/spl.spec" ;; + "rpm/generic/spl-kmod.spec") CONFIG_FILES="$CONFIG_FILES rpm/generic/spl-kmod.spec" ;; + "rpm/generic/spl-dkms.spec") CONFIG_FILES="$CONFIG_FILES rpm/generic/spl-dkms.spec" ;; + "spl.release") CONFIG_FILES="$CONFIG_FILES spl.release" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "spl_config.h":H) + (mv spl_config.h spl_config.h.tmp && + awk -f ${ac_srcdir}/config/config.awk spl_config.h.tmp >spl_config.h && + rm spl_config.h.tmp) || exit 1 ;; + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + --- linux-aws-4.15.0.orig/spl/configure.ac +++ linux-aws-4.15.0/spl/configure.ac @@ -0,0 +1,86 @@ +############################################################################### +# SPL AutoConf Configuration +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). +# Written by Brian Behlendorf . +# UCRL-CODE-235197 +# +# This file is part of the SPL, Solaris Porting Layer. +# For details, see . +# +# The SPL 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. +# +# The SPL 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. +# +# You should have received a copy of the GNU General Public License along +# with the SPL. If not, see . +############################################################################### + +AC_INIT(m4_esyscmd(grep Name META | cut -d ':' -f 2 | tr -d ' \n'), + m4_esyscmd(grep Version META | cut -d ':' -f 2 | tr -d ' \n')) +AC_LANG(C) +SPL_AC_META +AC_CONFIG_AUX_DIR([config]) +AC_CONFIG_MACRO_DIR([config]) +AC_CANONICAL_SYSTEM +AM_MAINTAINER_MODE +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +AM_INIT_AUTOMAKE +AC_CONFIG_HEADERS([spl_config.h], [ + (mv spl_config.h spl_config.h.tmp && + awk -f ${ac_srcdir}/config/config.awk spl_config.h.tmp >spl_config.h && + rm spl_config.h.tmp) || exit 1]) + +AC_PROG_INSTALL +AC_PROG_CC +AC_PROG_LIBTOOL + +SPL_AC_LICENSE +SPL_AC_PACKAGE +SPL_AC_CONFIG + +AC_CONFIG_FILES([ + Makefile + man/Makefile + man/man1/Makefile + man/man5/Makefile + lib/Makefile + cmd/Makefile + cmd/splat/Makefile + cmd/splslab/Makefile + module/Makefile + module/spl/Makefile + module/splat/Makefile + include/Makefile + include/fs/Makefile + include/linux/Makefile + include/rpc/Makefile + include/sharefs/Makefile + include/sys/Makefile + include/sys/fm/Makefile + include/sys/fs/Makefile + include/sys/sysevent/Makefile + include/util/Makefile + include/vm/Makefile + scripts/Makefile + rpm/Makefile + rpm/redhat/Makefile + rpm/redhat/spl.spec + rpm/redhat/spl-kmod.spec + rpm/redhat/spl-dkms.spec + rpm/generic/Makefile + rpm/generic/spl.spec + rpm/generic/spl-kmod.spec + rpm/generic/spl-dkms.spec + spl.release +]) + +AC_OUTPUT --- linux-aws-4.15.0.orig/spl/copy-builtin +++ linux-aws-4.15.0/spl/copy-builtin @@ -0,0 +1,126 @@ +#!/bin/bash + +set -e + +usage() +{ + echo "usage: $0 " >&2 + exit 1 +} + +[ "$#" -eq 1 ] || usage +KERNEL_DIR="$(readlink --canonicalize-existing "$1")" + +MODULES=() +for MODULE_DIR in module/* +do + [ -d "$MODULE_DIR" ] || continue + MODULES+=("${MODULE_DIR##*/}") +done + +if ! [ -e 'spl_config.h' ] +then + echo >&2 + echo " $0: you did not run configure, or you're not in the SPL source directory." >&2 + echo " $0: run configure with --with-linux=$KERNEL_DIR and --enable-linux-builtin." >&2 + echo >&2 + exit 1 +fi + +make clean || true + +rm -rf "$KERNEL_DIR/include/spl" "$KERNEL_DIR/spl" +cp --recursive include "$KERNEL_DIR/include/spl" +cp --recursive module "$KERNEL_DIR/spl" +cp spl_config.h "$KERNEL_DIR/" +cp spl.release.in "$KERNEL_DIR/" + +adjust_obj_paths() +{ + local FILE="$1" + local LINE OBJPATH + + while IFS='' read -r LINE + do + OBJPATH="${LINE#\$(MODULE)-objs += }" + if [ "$OBJPATH" = "$LINE" ] + then + echo "$LINE" + else + echo "\$(MODULE)-objs += ${OBJPATH##*/}" + fi + done < "$FILE" > "$FILE.new" + mv "$FILE.new" "$FILE" +} + +for MODULE in "${MODULES[@]}" +do + adjust_obj_paths "$KERNEL_DIR/spl/$MODULE/Makefile" + sed -i.bak '/obj =/d' "$KERNEL_DIR/spl/$MODULE/Makefile" + sed -i.bak '/src =/d' "$KERNEL_DIR/spl/$MODULE/Makefile" +done + +cat > "$KERNEL_DIR/spl/Kconfig" <<"EOF" +config SPL + tristate "Solaris Porting Layer (SPL)" + help + This is the SPL library from the ZFS On Linux project. + + See http://zfsonlinux.org/ + + To compile this library as a module, choose M here. + + If unsure, say N. +EOF + +{ + cat <<-"EOF" + SPL_MODULE_CFLAGS = -I$(srctree)/include/spl + SPL_MODULE_CFLAGS += -include $(srctree)/spl_config.h + export SPL_MODULE_CFLAGS + + obj-$(CONFIG_SPL) := + EOF + + for MODULE in "${MODULES[@]}" + do + echo 'obj-$(CONFIG_SPL) += ' "$MODULE/" + done +} > "$KERNEL_DIR/spl/Kbuild" + +add_after() +{ + local FILE="$1" + local MARKER="$2" + local NEW="$3" + local LINE + + while IFS='' read -r LINE + do + echo "$LINE" + + if [ -n "$MARKER" -a "$LINE" = "$MARKER" ] + then + echo "$NEW" + MARKER='' + if IFS='' read -r LINE + then + [ "$LINE" != "$NEW" ] && echo "$LINE" + fi + fi + done < "$FILE" > "$FILE.new" + + mv "$FILE.new" "$FILE" +} + +add_after "$KERNEL_DIR/Kconfig" 'source "arch/$SRCARCH/Kconfig"' 'source "spl/Kconfig"' +# We must take care to build SPL before ZFS, otherwise the symbols required +# to link ZFS will not be available. +sed -i 's~mm/ fs/~mm/ spl/ fs/~' "$KERNEL_DIR/Makefile" + +echo >&2 +echo " $0: done." >&2 +echo " $0: now you can build the kernel with SPL support." >&2 +echo " $0: make sure you enable SPL support (CONFIG_SPL) before building." >&2 +echo >&2 + --- linux-aws-4.15.0.orig/spl/cp +++ linux-aws-4.15.0/spl/cp @@ -0,0 +1,2 @@ +#!/bin/sh +cp "$@" --- linux-aws-4.15.0.orig/spl/dkms.conf +++ linux-aws-4.15.0/spl/dkms.conf @@ -0,0 +1,36 @@ +AUTOINSTALL="yes" +PACKAGE_NAME="spl" +PACKAGE_VERSION="0.7.5" +PRE_BUILD="configure + --prefix=/usr + --with-config=kernel + --with-linux=$(case `lsb_release -is` in + (Debian) + if [ -e ${kernel_source_dir/%build/source} ] + then + echo ${kernel_source_dir/%build/source} + else + # This is a kpkg exception for Proxmox 2.0 + echo ${kernel_source_dir} + fi + ;; + (*) + echo ${kernel_source_dir} + ;; + esac) + --with-linux-obj=${kernel_source_dir} +" +POST_BUILD="cp + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/spl_config.h + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/module/Module.symvers + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/${kernelver}/${arch}/ +" +[ -d "${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build" ] && POST_INSTALL=${POST_BUILD} +REMAKE_INITRD="no" +MAKE[0]="make" +BUILT_MODULE_NAME[0]="spl" +BUILT_MODULE_LOCATION[0]="module/spl/" +DEST_MODULE_LOCATION[0]="/extra/spl/spl" +BUILT_MODULE_NAME[1]="splat" +BUILT_MODULE_LOCATION[1]="module/splat/" +DEST_MODULE_LOCATION[1]="/extra/splat/splat" --- linux-aws-4.15.0.orig/spl/include/Makefile.am +++ linux-aws-4.15.0/spl/include/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS = fs linux rpc sharefs sys util vm + +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/splat-ctl.h \ + $(top_srcdir)/include/spl-ctl.h \ + $(top_srcdir)/include/strings.h \ + $(top_srcdir)/include/unistd.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/Makefile.in +++ linux-aws-4.15.0/spl/include/Makefile.in @@ -0,0 +1,743 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/splat-ctl.h \ + $(top_srcdir)/include/spl-ctl.h \ + $(top_srcdir)/include/strings.h $(top_srcdir)/include/unistd.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = fs linux rpc sharefs sys util vm +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/splat-ctl.h \ + $(top_srcdir)/include/spl-ctl.h \ + $(top_srcdir)/include/strings.h \ + $(top_srcdir)/include/unistd.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-kernelHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/fs/Makefile.am +++ linux-aws-4.15.0/spl/include/fs/Makefile.am @@ -0,0 +1,13 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/fs/fs_subr.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/fs +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/fs/Makefile.in +++ linux-aws-4.15.0/spl/include/fs/Makefile.in @@ -0,0 +1,621 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/fs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/fs/fs_subr.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/fs/fs_subr.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/fs +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/fs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/fs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/fs/fs_subr.h +++ linux-aws-4.15.0/spl/include/fs/fs_subr.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FS_FS_SUBR_H +#define _SPL_FS_FS_SUBR_H + +#endif /* SPL_FS_FS_SUBR_H */ --- linux-aws-4.15.0.orig/spl/include/linux/Makefile.am +++ linux-aws-4.15.0/spl/include/linux/Makefile.am @@ -0,0 +1,23 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/linux/bitops_compat.h \ + $(top_srcdir)/include/linux/compiler_compat.h \ + $(top_srcdir)/include/linux/delay_compat.h \ + $(top_srcdir)/include/linux/file_compat.h \ + $(top_srcdir)/include/linux/list_compat.h \ + $(top_srcdir)/include/linux/math64_compat.h \ + $(top_srcdir)/include/linux/mm_compat.h \ + $(top_srcdir)/include/linux/proc_compat.h \ + $(top_srcdir)/include/linux/rwsem_compat.h \ + $(top_srcdir)/include/linux/wait_compat.h \ + $(top_srcdir)/include/linux/zlib_compat.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/linux +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/linux/Makefile.in +++ linux-aws-4.15.0/spl/include/linux/Makefile.in @@ -0,0 +1,641 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/linux +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/linux/bitops_compat.h \ + $(top_srcdir)/include/linux/compiler_compat.h \ + $(top_srcdir)/include/linux/delay_compat.h \ + $(top_srcdir)/include/linux/file_compat.h \ + $(top_srcdir)/include/linux/list_compat.h \ + $(top_srcdir)/include/linux/math64_compat.h \ + $(top_srcdir)/include/linux/mm_compat.h \ + $(top_srcdir)/include/linux/proc_compat.h \ + $(top_srcdir)/include/linux/rwsem_compat.h \ + $(top_srcdir)/include/linux/wait_compat.h \ + $(top_srcdir)/include/linux/zlib_compat.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/linux/bitops_compat.h \ + $(top_srcdir)/include/linux/compiler_compat.h \ + $(top_srcdir)/include/linux/delay_compat.h \ + $(top_srcdir)/include/linux/file_compat.h \ + $(top_srcdir)/include/linux/list_compat.h \ + $(top_srcdir)/include/linux/math64_compat.h \ + $(top_srcdir)/include/linux/mm_compat.h \ + $(top_srcdir)/include/linux/proc_compat.h \ + $(top_srcdir)/include/linux/rwsem_compat.h \ + $(top_srcdir)/include/linux/wait_compat.h \ + $(top_srcdir)/include/linux/zlib_compat.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/linux +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/linux/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/linux/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/linux/bitops_compat.h +++ linux-aws-4.15.0/spl/include/linux/bitops_compat.h @@ -0,0 +1,31 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BITOPS_COMPAT_H +#define _SPL_BITOPS_COMPAT_H + +#include + +#endif /* _SPL_BITOPS_COMPAT_H */ + --- linux-aws-4.15.0.orig/spl/include/linux/compiler_compat.h +++ linux-aws-4.15.0/spl/include/linux/compiler_compat.h @@ -0,0 +1,47 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_COMPILER_COMPAT_H +#define _SPL_COMPILER_COMPAT_H + +#include + +#ifndef ACCESS_ONCE +/* + * Prevent the compiler from merging or refetching accesses. The compiler + * is also forbidden from reordering successive instances of ACCESS_ONCE(), + * but only when the compiler is aware of some particular ordering. One way + * to make the compiler aware of ordering is to put the two invocations of + * ACCESS_ONCE() in different C statements. + * + * This macro does absolutely -nothing- to prevent the CPU from reordering, + * merging, or refetching absolutely anything at any time. Its main intended + * use is to mediate communication between process-level code and irq/NMI + * handlers, all running on the same CPU. + */ +/* Taken from 2.6.33.2 */ +# define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) +#endif + +#endif /* _SPL_COMPILER_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/delay_compat.h +++ linux-aws-4.15.0/spl/include/linux/delay_compat.h @@ -0,0 +1,47 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DELAY_COMPAT_H +#define _SPL_DELAY_COMPAT_H + +#include +#include + +/* usleep_range() introduced in 2.6.36 */ +#ifndef HAVE_USLEEP_RANGE + +static inline void +usleep_range(unsigned long min, unsigned long max) +{ + unsigned int min_ms = min / USEC_PER_MSEC; + + if (min >= MAX_UDELAY_MS) + msleep(min_ms); + else + udelay(min); +} + +#endif /* HAVE_USLEEP_RANGE */ + +#endif /* _SPL_DELAY_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/file_compat.h +++ linux-aws-4.15.0/spl/include/linux/file_compat.h @@ -0,0 +1,141 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FILE_COMPAT_H +#define _SPL_FILE_COMPAT_H + +#include +#include +#ifdef HAVE_FDTABLE_HEADER +#include +#endif + +static inline struct file * +spl_filp_open(const char *name, int flags, int mode, int *err) +{ + struct file *filp = NULL; + int rc; + + filp = filp_open(name, flags, mode); + if (IS_ERR(filp)) { + rc = PTR_ERR(filp); + if (err) + *err = rc; + filp = NULL; + } + return filp; +} + +#define spl_filp_close(f) filp_close(f, NULL) +#define spl_filp_poff(f) (&(f)->f_pos) +#define spl_filp_write(fp, b, s, p) (fp)->f_op->write((fp), (b), (s), p) + +static inline int +spl_filp_fallocate(struct file *fp, int mode, loff_t offset, loff_t len) +{ + int error = -EOPNOTSUPP; + +#ifdef HAVE_FILE_FALLOCATE + if (fp->f_op->fallocate) + error = fp->f_op->fallocate(fp, mode, offset, len); +#else +#ifdef HAVE_INODE_FALLOCATE + if (fp->f_dentry && fp->f_dentry->d_inode && + fp->f_dentry->d_inode->i_op->fallocate) + error = fp->f_dentry->d_inode->i_op->fallocate( + fp->f_dentry->d_inode, mode, offset, len); +#endif /* HAVE_INODE_FALLOCATE */ +#endif /*HAVE_FILE_FALLOCATE */ + + return (error); +} + +static inline ssize_t +spl_kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos) +{ +#if defined(HAVE_KERNEL_WRITE_PPOS) + return (kernel_write(file, buf, count, pos)); +#else + mm_segment_t saved_fs; + ssize_t ret; + + saved_fs = get_fs(); + set_fs(get_ds()); + + ret = vfs_write(file, (__force const char __user *)buf, count, pos); + + set_fs(saved_fs); + + return (ret); +#endif +} + +static inline ssize_t +spl_kernel_read(struct file *file, void *buf, size_t count, loff_t *pos) +{ +#if defined(HAVE_KERNEL_READ_PPOS) + return (kernel_read(file, buf, count, pos)); +#else + mm_segment_t saved_fs; + ssize_t ret; + + saved_fs = get_fs(); + set_fs(get_ds()); + + ret = vfs_read(file, (void __user *)buf, count, pos); + + set_fs(saved_fs); + + return (ret); +#endif +} + +#ifdef HAVE_2ARGS_VFS_FSYNC +#define spl_filp_fsync(fp, sync) vfs_fsync(fp, sync) +#else +#define spl_filp_fsync(fp, sync) vfs_fsync(fp, (fp)->f_dentry, sync) +#endif /* HAVE_2ARGS_VFS_FSYNC */ + +#ifdef HAVE_INODE_LOCK_SHARED +#define spl_inode_lock(ip) inode_lock(ip) +#define spl_inode_unlock(ip) inode_unlock(ip) +#define spl_inode_lock_shared(ip) inode_lock_shared(ip) +#define spl_inode_unlock_shared(ip) inode_unlock_shared(ip) +#define spl_inode_trylock(ip) inode_trylock(ip) +#define spl_inode_trylock_shared(ip) inode_trylock_shared(ip) +#define spl_inode_is_locked(ip) inode_is_locked(ip) +#define spl_inode_lock_nested(ip, s) inode_lock_nested(ip, s) +#else +#define spl_inode_lock(ip) mutex_lock(&(ip)->i_mutex) +#define spl_inode_unlock(ip) mutex_unlock(&(ip)->i_mutex) +#define spl_inode_lock_shared(ip) mutex_lock(&(ip)->i_mutex) +#define spl_inode_unlock_shared(ip) mutex_unlock(&(ip)->i_mutex) +#define spl_inode_trylock(ip) mutex_trylock(&(ip)->i_mutex) +#define spl_inode_trylock_shared(ip) mutex_trylock(&(ip)->i_mutex) +#define spl_inode_is_locked(ip) mutex_is_locked(&(ip)->i_mutex) +#define spl_inode_lock_nested(ip, s) mutex_lock_nested(&(ip)->i_mutex, s) +#endif + +#endif /* SPL_FILE_COMPAT_H */ + --- linux-aws-4.15.0.orig/spl/include/linux/list_compat.h +++ linux-aws-4.15.0/spl/include/linux/list_compat.h @@ -0,0 +1,51 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_LIST_COMPAT_H +#define _SPL_LIST_COMPAT_H + +#include + +#ifndef list_for_each_entry_safe_reverse + +/** + * list_for_each_entry_safe_reverse + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Iterate backwards over list of given type, safe against removal + * of list entry. + */ +#define list_for_each_entry_safe_reverse(pos, n, head, member) \ + for (pos = list_entry((head)->prev, typeof(*pos), member), \ + n = list_entry(pos->member.prev, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.prev, typeof(*n), member)) + +#endif /* list_for_each_entry_safe_reverse */ + +#endif /* SPL_LIST_COMPAT_H */ + --- linux-aws-4.15.0.orig/spl/include/linux/math64_compat.h +++ linux-aws-4.15.0/spl/include/linux/math64_compat.h @@ -0,0 +1,32 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MATH64_COMPAT_H +#define _SPL_MATH64_COMPAT_H + +#ifndef abs64 +#define abs64(x) ({ uint64_t t = (x) >> 63; ((x) ^ t) - t; }) +#endif + +#endif /* _SPL_MATH64_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/mm_compat.h +++ linux-aws-4.15.0/spl/include/linux/mm_compat.h @@ -0,0 +1,209 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MM_COMPAT_H +#define _SPL_MM_COMPAT_H + +#include +#include + +#if !defined(HAVE_SHRINK_CONTROL_STRUCT) +struct shrink_control { + gfp_t gfp_mask; + unsigned long nr_to_scan; +}; +#endif /* HAVE_SHRINK_CONTROL_STRUCT */ + +/* + * Due to frequent changes in the shrinker API the following + * compatibility wrappers should be used. They are as follows: + * + * SPL_SHRINKER_DECLARE is used to declare the shrinker which is + * passed to spl_register_shrinker()/spl_unregister_shrinker(). Use + * shrinker_name to set the shrinker variable name, shrinker_callback + * to set the callback function, and seek_cost to define the cost of + * reclaiming an object. + * + * SPL_SHRINKER_DECLARE(shrinker_name, shrinker_callback, seek_cost); + * + * SPL_SHRINKER_CALLBACK_FWD_DECLARE is used when a forward declaration + * of the shrinker callback function is required. Only the callback + * function needs to be passed. + * + * SPL_SHRINKER_CALLBACK_FWD_DECLARE(shrinker_callback); + * + * SPL_SHRINKER_CALLBACK_WRAPPER is used to declare the callback function + * which is registered with the shrinker. This function will call your + * custom shrinker which must use the following prototype. Notice the + * leading __'s, these must be appended to the callback_function name. + * + * int __shrinker_callback(struct shrinker *, struct shrink_control *) + * SPL_SHRINKER_CALLBACK_WRAPPER(shrinker_callback);a + * + * + * Example: + * + * SPL_SHRINKER_CALLBACK_FWD_DECLARE(my_shrinker_fn); + * SPL_SHRINKER_DECLARE(my_shrinker, my_shrinker_fn, 1); + * + * static int + * __my_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc) + * { + * if (sc->nr_to_scan) { + * ...scan objects in the cache and reclaim them... + * } + * + * ...calculate number of objects in the cache... + * + * return (number of objects in the cache); + * } + * SPL_SHRINKER_CALLBACK_WRAPPER(my_shrinker_fn); + */ + +#define spl_register_shrinker(x) register_shrinker(x) +#define spl_unregister_shrinker(x) unregister_shrinker(x) + +/* + * Linux 2.6.23 - 2.6.34 Shrinker API Compatibility. + */ +#if defined(HAVE_2ARGS_OLD_SHRINKER_CALLBACK) +#define SPL_SHRINKER_DECLARE(s, x, y) \ +static struct shrinker s = { \ + .shrink = x, \ + .seeks = y \ +} + +#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +static int fn(int nr_to_scan, unsigned int gfp_mask) + +#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +static int \ +fn(int nr_to_scan, unsigned int gfp_mask) \ +{ \ + struct shrink_control sc; \ + \ + sc.nr_to_scan = nr_to_scan; \ + sc.gfp_mask = gfp_mask; \ + \ + return (__ ## fn(NULL, &sc)); \ +} + +/* + * Linux 2.6.35 to 2.6.39 Shrinker API Compatibility. + */ +#elif defined(HAVE_3ARGS_SHRINKER_CALLBACK) +#define SPL_SHRINKER_DECLARE(s, x, y) \ +static struct shrinker s = { \ + .shrink = x, \ + .seeks = y \ +} + +#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +static int fn(struct shrinker *, int, unsigned int) + +#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +static int \ +fn(struct shrinker *shrink, int nr_to_scan, unsigned int gfp_mask) \ +{ \ + struct shrink_control sc; \ + \ + sc.nr_to_scan = nr_to_scan; \ + sc.gfp_mask = gfp_mask; \ + \ + return (__ ## fn(shrink, &sc)); \ +} + +/* + * Linux 3.0 to 3.11 Shrinker API Compatibility. + */ +#elif defined(HAVE_2ARGS_NEW_SHRINKER_CALLBACK) +#define SPL_SHRINKER_DECLARE(s, x, y) \ +static struct shrinker s = { \ + .shrink = x, \ + .seeks = y \ +} + +#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +static int fn(struct shrinker *, struct shrink_control *) + +#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +static int \ +fn(struct shrinker *shrink, struct shrink_control *sc) \ +{ \ + return (__ ## fn(shrink, sc)); \ +} + +/* + * Linux 3.12 and later Shrinker API Compatibility. + */ +#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK) +#define SPL_SHRINKER_DECLARE(s, x, y) \ +static struct shrinker s = { \ + .count_objects = x ## _count_objects, \ + .scan_objects = x ## _scan_objects, \ + .seeks = y \ +} + +#define SPL_SHRINKER_CALLBACK_FWD_DECLARE(fn) \ +static unsigned long fn ## _count_objects(struct shrinker *, \ + struct shrink_control *); \ +static unsigned long fn ## _scan_objects(struct shrinker *, \ + struct shrink_control *) + +#define SPL_SHRINKER_CALLBACK_WRAPPER(fn) \ +static unsigned long \ +fn ## _count_objects(struct shrinker *shrink, struct shrink_control *sc)\ +{ \ + int __ret__; \ + \ + sc->nr_to_scan = 0; \ + __ret__ = __ ## fn(NULL, sc); \ + \ + /* Errors may not be returned and must be converted to zeros */ \ + return ((__ret__ < 0) ? 0 : __ret__); \ +} \ + \ +static unsigned long \ +fn ## _scan_objects(struct shrinker *shrink, struct shrink_control *sc) \ +{ \ + int __ret__; \ + \ + __ret__ = __ ## fn(NULL, sc); \ + return ((__ret__ < 0) ? SHRINK_STOP : __ret__); \ +} +#else +/* + * Linux 2.x to 2.6.22, or a newer shrinker API has been introduced. + */ +#error "Unknown shrinker callback" +#endif + +#if defined(HAVE_SPLIT_SHRINKER_CALLBACK) +typedef unsigned long spl_shrinker_t; +#else +typedef int spl_shrinker_t; +#define SHRINK_STOP (-1) +#endif + +#endif /* SPL_MM_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/proc_compat.h +++ linux-aws-4.15.0/spl/include/linux/proc_compat.h @@ -0,0 +1,35 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PROC_COMPAT_H +#define _SPL_PROC_COMPAT_H + +#include + +extern struct proc_dir_entry *proc_spl_kstat; + +int spl_proc_init(void); +void spl_proc_fini(void); + +#endif /* SPL_PROC_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/rwsem_compat.h +++ linux-aws-4.15.0/spl/include/linux/rwsem_compat.h @@ -0,0 +1,67 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RWSEM_COMPAT_H +#define _SPL_RWSEM_COMPAT_H + +#include + +#if defined(CONFIG_PREEMPT_RT_FULL) +#define SPL_RWSEM_SINGLE_READER_VALUE (1) +#define SPL_RWSEM_SINGLE_WRITER_VALUE (0) +#elif defined(CONFIG_RWSEM_GENERIC_SPINLOCK) +#define SPL_RWSEM_SINGLE_READER_VALUE (1) +#define SPL_RWSEM_SINGLE_WRITER_VALUE (-1) +#else +#define SPL_RWSEM_SINGLE_READER_VALUE (RWSEM_ACTIVE_READ_BIAS) +#define SPL_RWSEM_SINGLE_WRITER_VALUE (RWSEM_ACTIVE_WRITE_BIAS) +#endif + +/* Linux 3.16 changed activity to count for rwsem-spinlock */ +#if defined(CONFIG_PREEMPT_RT_FULL) +#define RWSEM_COUNT(sem) sem->read_depth +#elif defined(HAVE_RWSEM_ACTIVITY) +#define RWSEM_COUNT(sem) sem->activity +/* Linux 4.8 changed count to an atomic_long_t for !rwsem-spinlock */ +#elif defined(HAVE_RWSEM_ATOMIC_LONG_COUNT) +#define RWSEM_COUNT(sem) atomic_long_read(&(sem)->count) +#else +#define RWSEM_COUNT(sem) sem->count +#endif + +int rwsem_tryupgrade(struct rw_semaphore *rwsem); + +#if defined(RWSEM_SPINLOCK_IS_RAW) +#define spl_rwsem_lock_irqsave(lk, fl) raw_spin_lock_irqsave(lk, fl) +#define spl_rwsem_unlock_irqrestore(lk, fl) raw_spin_unlock_irqrestore(lk, fl) +#define spl_rwsem_trylock_irqsave(lk, fl) raw_spin_trylock_irqsave(lk, fl) +#else +#define spl_rwsem_lock_irqsave(lk, fl) spin_lock_irqsave(lk, fl) +#define spl_rwsem_unlock_irqrestore(lk, fl) spin_unlock_irqrestore(lk, fl) +#define spl_rwsem_trylock_irqsave(lk, fl) spin_trylock_irqsave(lk, fl) +#endif /* RWSEM_SPINLOCK_IS_RAW */ + +#define spl_rwsem_is_locked(rwsem) rwsem_is_locked(rwsem) + +#endif /* _SPL_RWSEM_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/wait_compat.h +++ linux-aws-4.15.0/spl/include/linux/wait_compat.h @@ -0,0 +1,55 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2014 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_WAIT_COMPAT_H +#define _SPL_WAIT_COMPAT_H + +#include +#include + +#ifndef HAVE_WAIT_ON_BIT_ACTION +# define spl_wait_on_bit(word, bit, mode) wait_on_bit(word, bit, mode) +#else + +static inline int +spl_bit_wait(void *word) +{ + schedule(); + return 0; +} + +#define spl_wait_on_bit(word, bit, mode) \ + wait_on_bit(word, bit, spl_bit_wait, mode) + +#endif /* HAVE_WAIT_ON_BIT_ACTION */ + +#ifdef HAVE_WAIT_QUEUE_ENTRY_T +typedef wait_queue_head_t spl_wait_queue_head_t; +typedef wait_queue_entry_t spl_wait_queue_entry_t; +#else +typedef wait_queue_head_t spl_wait_queue_head_t; +typedef wait_queue_t spl_wait_queue_entry_t; +#endif + +#endif /* SPL_WAIT_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/linux/zlib_compat.h +++ linux-aws-4.15.0/spl/include/linux/zlib_compat.h @@ -0,0 +1,37 @@ +/*****************************************************************************\ + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ZLIB_COMPAT_H +#define _SPL_ZLIB_COMPAT_H + +#include + +#ifdef HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE +#define spl_zlib_deflate_workspacesize(wb, ml) \ + zlib_deflate_workspacesize(wb, ml) +#else +#define spl_zlib_deflate_workspacesize(wb, ml) \ + zlib_deflate_workspacesize() +#endif /* HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE */ + +#endif /* SPL_ZLIB_COMPAT_H */ --- linux-aws-4.15.0.orig/spl/include/rpc/Makefile.am +++ linux-aws-4.15.0/spl/include/rpc/Makefile.am @@ -0,0 +1,14 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/rpc/types.h \ + $(top_srcdir)/include/rpc/xdr.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/rpc +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/rpc/Makefile.in +++ linux-aws-4.15.0/spl/include/rpc/Makefile.in @@ -0,0 +1,623 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/rpc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/rpc/types.h \ + $(top_srcdir)/include/rpc/xdr.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/rpc/types.h \ + $(top_srcdir)/include/rpc/xdr.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/rpc +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/rpc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/rpc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/rpc/types.h +++ linux-aws-4.15.0/spl/include/rpc/types.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RPC_TYPES_H +#define _SPL_RPC_TYPES_H + +typedef int bool_t; + +#endif /* SPL_RPC_TYPES_H */ --- linux-aws-4.15.0.orig/spl/include/rpc/xdr.h +++ linux-aws-4.15.0/spl/include/rpc/xdr.h @@ -0,0 +1,155 @@ +/*****************************************************************************\ + * Copyright (c) 2008 Sun Microsystems, Inc. + * Written by Ricardo Correia + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RPC_XDR_H +#define _SPL_RPC_XDR_H + +#include +#include + +/* + * XDR enums and types. + */ +enum xdr_op { + XDR_ENCODE, + XDR_DECODE +}; + +struct xdr_ops; + +typedef struct { + struct xdr_ops *x_ops; /* Also used to let caller know if + xdrmem_create() succeeds (sigh..) */ + caddr_t x_addr; /* Current buffer addr */ + caddr_t x_addr_end; /* End of the buffer */ + enum xdr_op x_op; /* Stream direction */ +} XDR; + +typedef bool_t (*xdrproc_t)(XDR *xdrs, void *ptr); + +struct xdr_ops { + bool_t (*xdr_control)(XDR *, int, void *); + + bool_t (*xdr_char)(XDR *, char *); + bool_t (*xdr_u_short)(XDR *, unsigned short *); + bool_t (*xdr_u_int)(XDR *, unsigned *); + bool_t (*xdr_u_longlong_t)(XDR *, u_longlong_t *); + + bool_t (*xdr_opaque)(XDR *, caddr_t, const uint_t); + bool_t (*xdr_string)(XDR *, char **, const uint_t); + bool_t (*xdr_array)(XDR *, caddr_t *, uint_t *, const uint_t, + const uint_t, const xdrproc_t); +}; + +/* + * XDR control operator. + */ +#define XDR_GET_BYTES_AVAIL 1 + +struct xdr_bytesrec { + bool_t xc_is_last_record; + size_t xc_num_avail; +}; + +/* + * XDR functions. + */ +void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size, + const enum xdr_op op); +#define xdr_destroy(xdrs) ((void) 0) /* Currently not needed. If needed later, + we'll add it to struct xdr_ops */ + +#define xdr_control(xdrs, req, info) (xdrs)->x_ops->xdr_control((xdrs), \ + (req), (info)) + +/* + * For precaution, the following are defined as static inlines instead of macros + * to get some amount of type safety. + * + * Also, macros wouldn't work in the case where typecasting is done, because it + * must be possible to reference the functions' addresses by these names. + */ +static inline bool_t xdr_char(XDR *xdrs, char *cp) +{ + return xdrs->x_ops->xdr_char(xdrs, cp); +} + +static inline bool_t xdr_u_short(XDR *xdrs, unsigned short *usp) +{ + return xdrs->x_ops->xdr_u_short(xdrs, usp); +} + +static inline bool_t xdr_short(XDR *xdrs, short *sp) +{ + BUILD_BUG_ON(sizeof(short) != 2); + return xdrs->x_ops->xdr_u_short(xdrs, (unsigned short *) sp); +} + +static inline bool_t xdr_u_int(XDR *xdrs, unsigned *up) +{ + return xdrs->x_ops->xdr_u_int(xdrs, up); +} + +static inline bool_t xdr_int(XDR *xdrs, int *ip) +{ + BUILD_BUG_ON(sizeof(int) != 4); + return xdrs->x_ops->xdr_u_int(xdrs, (unsigned *) ip); +} + +static inline bool_t xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp) +{ + return xdrs->x_ops->xdr_u_longlong_t(xdrs, ullp); +} + +static inline bool_t xdr_longlong_t(XDR *xdrs, longlong_t *llp) +{ + BUILD_BUG_ON(sizeof(longlong_t) != 8); + return xdrs->x_ops->xdr_u_longlong_t(xdrs, (u_longlong_t *) llp); +} + +/* + * Fixed-length opaque data. + */ +static inline bool_t xdr_opaque(XDR *xdrs, caddr_t cp, const uint_t cnt) +{ + return xdrs->x_ops->xdr_opaque(xdrs, cp, cnt); +} + +/* + * Variable-length string. + * The *sp buffer must have (maxsize + 1) bytes. + */ +static inline bool_t xdr_string(XDR *xdrs, char **sp, const uint_t maxsize) +{ + return xdrs->x_ops->xdr_string(xdrs, sp, maxsize); +} + +/* + * Variable-length arrays. + */ +static inline bool_t xdr_array(XDR *xdrs, caddr_t *arrp, uint_t *sizep, + const uint_t maxsize, const uint_t elsize, const xdrproc_t elproc) +{ + return xdrs->x_ops->xdr_array(xdrs, arrp, sizep, maxsize, elsize, + elproc); +} + +#endif /* SPL_RPC_XDR_H */ --- linux-aws-4.15.0.orig/spl/include/sharefs/Makefile.am +++ linux-aws-4.15.0/spl/include/sharefs/Makefile.am @@ -0,0 +1,13 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/sharefs/share.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/sharefs +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/sharefs/Makefile.in +++ linux-aws-4.15.0/spl/include/sharefs/Makefile.in @@ -0,0 +1,621 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sharefs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sharefs/share.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/sharefs/share.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/sharefs +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sharefs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sharefs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/sharefs/share.h +++ linux-aws-4.15.0/spl/include/sharefs/share.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SHARE_H +#define _SPL_SHARE_H + +#endif /* SPL_SHARE_H */ --- linux-aws-4.15.0.orig/spl/include/spl-ctl.h +++ linux-aws-4.15.0/spl/include/spl-ctl.h @@ -0,0 +1,45 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _DEBUG_CTL_H +#define _DEBUG_CTL_H + +/* + * Contains shared definitions which both the user space + * and kernel space portions of splat must agree on. + */ +typedef struct spl_debug_header { + int ph_len; + int ph_flags; + int ph_subsys; + int ph_mask; + int ph_cpu_id; + int ph_sec; + long ph_usec; + int ph_stack; + int ph_pid; + int ph_line_num; +} spl_debug_header_t; + +#endif /* _DEBUG_CTL_H */ --- linux-aws-4.15.0.orig/spl/include/splat-ctl.h +++ linux-aws-4.15.0/spl/include/splat-ctl.h @@ -0,0 +1,109 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPLAT_CTL_H +#define _SPLAT_CTL_H + +#include + +/* + * Contains shared definitions for both user space and kernel space. To + * ensure 32-bit/64-bit interoperability over ioctl()'s only types with + * fixed sizes can be used. + */ +#define SPLAT_NAME "splatctl" +#define SPLAT_DEV "/dev/splatctl" + +#define SPLAT_NAME_SIZE 20 +#define SPLAT_DESC_SIZE 60 + +typedef struct splat_user { + char name[SPLAT_NAME_SIZE]; /* Short name */ + char desc[SPLAT_DESC_SIZE]; /* Short description */ + __u32 id; /* Unique numeric id */ +} splat_user_t; + +#define SPLAT_CFG_MAGIC 0x15263748U +typedef struct splat_cfg { + __u32 cfg_magic; /* Unique magic */ + __u32 cfg_cmd; /* Configure command */ + __s32 cfg_arg1; /* Configure command arg 1 */ + __s32 cfg_rc1; /* Configure response 1 */ + union { + struct { + __u32 size; + splat_user_t descs[0]; + } splat_subsystems; + struct { + __u32 size; + splat_user_t descs[0]; + } splat_tests; + } cfg_data; +} splat_cfg_t; + +#define SPLAT_CMD_MAGIC 0x9daebfc0U +typedef struct splat_cmd { + __u32 cmd_magic; /* Unique magic */ + __u32 cmd_subsystem; /* Target subsystem */ + __u32 cmd_test; /* Subsystem test */ + __u32 cmd_data_size; /* Opaque data size */ + char cmd_data_str[0]; /* Opaque data region */ +} splat_cmd_t; + +/* Valid ioctls */ +#define SPLAT_CFG _IOWR('f', 101, splat_cfg_t) +#define SPLAT_CMD _IOWR('f', 102, splat_cmd_t) + +/* Valid configuration commands */ +#define SPLAT_CFG_BUFFER_CLEAR 0x001 /* Clear text buffer */ +#define SPLAT_CFG_BUFFER_SIZE 0x002 /* Resize text buffer */ +#define SPLAT_CFG_SUBSYSTEM_COUNT 0x101 /* Number of subsystem */ +#define SPLAT_CFG_SUBSYSTEM_LIST 0x102 /* List of N subsystems */ +#define SPLAT_CFG_TEST_COUNT 0x201 /* Number of tests */ +#define SPLAT_CFG_TEST_LIST 0x202 /* List of N tests */ + +/* + * Valid subsystem and test commands are defined in each subsystem as + * SPLAT_SUBSYSTEM_*. We do need to be careful to avoid collisions, the + * currently defined subsystems are as follows: + */ +#define SPLAT_SUBSYSTEM_KMEM 0x0100 +#define SPLAT_SUBSYSTEM_TASKQ 0x0200 +#define SPLAT_SUBSYSTEM_KRNG 0x0300 +#define SPLAT_SUBSYSTEM_MUTEX 0x0400 +#define SPLAT_SUBSYSTEM_CONDVAR 0x0500 +#define SPLAT_SUBSYSTEM_THREAD 0x0600 +#define SPLAT_SUBSYSTEM_RWLOCK 0x0700 +#define SPLAT_SUBSYSTEM_TIME 0x0800 +#define SPLAT_SUBSYSTEM_VNODE 0x0900 +#define SPLAT_SUBSYSTEM_KOBJ 0x0a00 +#define SPLAT_SUBSYSTEM_ATOMIC 0x0b00 +#define SPLAT_SUBSYSTEM_LIST 0x0c00 +#define SPLAT_SUBSYSTEM_GENERIC 0x0d00 +#define SPLAT_SUBSYSTEM_CRED 0x0e00 +#define SPLAT_SUBSYSTEM_ZLIB 0x0f00 +#define SPLAT_SUBSYSTEM_LINUX 0x1000 +#define SPLAT_SUBSYSTEM_UNKNOWN 0xff00 + +#endif /* _SPLAT_CTL_H */ --- linux-aws-4.15.0.orig/spl/include/strings.h +++ linux-aws-4.15.0/spl/include/strings.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_STRINGS_H +#define _SPL_STRINGS_H + +#endif /* SPL_STRINGS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/Makefile.am +++ linux-aws-4.15.0/spl/include/sys/Makefile.am @@ -0,0 +1,114 @@ +SUBDIRS = fm fs sysevent + +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/sys/acl.h \ + $(top_srcdir)/include/sys/acl_impl.h \ + $(top_srcdir)/include/sys/atomic.h \ + $(top_srcdir)/include/sys/attr.h \ + $(top_srcdir)/include/sys/bitmap.h \ + $(top_srcdir)/include/sys/bootconf.h \ + $(top_srcdir)/include/sys/bootprops.h \ + $(top_srcdir)/include/sys/buf.h \ + $(top_srcdir)/include/sys/byteorder.h \ + $(top_srcdir)/include/sys/callb.h \ + $(top_srcdir)/include/sys/callo.h \ + $(top_srcdir)/include/sys/cmn_err.h \ + $(top_srcdir)/include/sys/compress.h \ + $(top_srcdir)/include/sys/condvar.h \ + $(top_srcdir)/include/sys/conf.h \ + $(top_srcdir)/include/sys/console.h \ + $(top_srcdir)/include/sys/cpupart.h \ + $(top_srcdir)/include/sys/cpuvar.h \ + $(top_srcdir)/include/sys/crc32.h \ + $(top_srcdir)/include/sys/cred.h \ + $(top_srcdir)/include/sys/ctype.h \ + $(top_srcdir)/include/sys/ddi.h \ + $(top_srcdir)/include/sys/debug.h \ + $(top_srcdir)/include/sys/dirent.h \ + $(top_srcdir)/include/sys/disp.h \ + $(top_srcdir)/include/sys/dkio.h \ + $(top_srcdir)/include/sys/dkioc_free_util.h \ + $(top_srcdir)/include/sys/dklabel.h \ + $(top_srcdir)/include/sys/dnlc.h \ + $(top_srcdir)/include/sys/dumphdr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/errno.h \ + $(top_srcdir)/include/sys/extdirent.h \ + $(top_srcdir)/include/sys/fcntl.h \ + $(top_srcdir)/include/sys/file.h \ + $(top_srcdir)/include/sys/idmap.h \ + $(top_srcdir)/include/sys/int_limits.h \ + $(top_srcdir)/include/sys/int_types.h \ + $(top_srcdir)/include/sys/inttypes.h \ + $(top_srcdir)/include/sys/isa_defs.h \ + $(top_srcdir)/include/sys/kidmap.h \ + $(top_srcdir)/include/sys/kmem.h \ + $(top_srcdir)/include/sys/kmem_cache.h \ + $(top_srcdir)/include/sys/kobj.h \ + $(top_srcdir)/include/sys/kstat.h \ + $(top_srcdir)/include/sys/list.h \ + $(top_srcdir)/include/sys/mkdev.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/modctl.h \ + $(top_srcdir)/include/sys/mode.h \ + $(top_srcdir)/include/sys/mount.h \ + $(top_srcdir)/include/sys/mutex.h \ + $(top_srcdir)/include/sys/note.h \ + $(top_srcdir)/include/sys/open.h \ + $(top_srcdir)/include/sys/param.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/pool.h \ + $(top_srcdir)/include/sys/priv_impl.h \ + $(top_srcdir)/include/sys/processor.h \ + $(top_srcdir)/include/sys/proc.h \ + $(top_srcdir)/include/sys/pset.h \ + $(top_srcdir)/include/sys/random.h \ + $(top_srcdir)/include/sys/refstr.h \ + $(top_srcdir)/include/sys/resource.h \ + $(top_srcdir)/include/sys/rwlock.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sid.h \ + $(top_srcdir)/include/sys/signal.h \ + $(top_srcdir)/include/sys/stat.h \ + $(top_srcdir)/include/sys/stropts.h \ + $(top_srcdir)/include/sys/sunddi.h \ + $(top_srcdir)/include/sys/sunldi.h \ + $(top_srcdir)/include/sys/sysdc.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/sysmacros.h \ + $(top_srcdir)/include/sys/systeminfo.h \ + $(top_srcdir)/include/sys/systm.h \ + $(top_srcdir)/include/sys/taskq.h \ + $(top_srcdir)/include/sys/thread.h \ + $(top_srcdir)/include/sys/time.h \ + $(top_srcdir)/include/sys/timer.h \ + $(top_srcdir)/include/sys/t_lock.h \ + $(top_srcdir)/include/sys/tsd.h \ + $(top_srcdir)/include/sys/types32.h \ + $(top_srcdir)/include/sys/types.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uio.h \ + $(top_srcdir)/include/sys/unistd.h \ + $(top_srcdir)/include/sys/user.h \ + $(top_srcdir)/include/sys/va_list.h \ + $(top_srcdir)/include/sys/varargs.h \ + $(top_srcdir)/include/sys/vfs.h \ + $(top_srcdir)/include/sys/vfs_opreg.h \ + $(top_srcdir)/include/sys/vmem.h \ + $(top_srcdir)/include/sys/vmsystm.h \ + $(top_srcdir)/include/sys/vnode.h \ + $(top_srcdir)/include/sys/zmod.h \ + $(top_srcdir)/include/sys/zone.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/sys +kernel_HEADERS = $(KERNEL_H) +endif + --- linux-aws-4.15.0.orig/spl/include/sys/Makefile.in +++ linux-aws-4.15.0/spl/include/sys/Makefile.in @@ -0,0 +1,934 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/acl.h \ + $(top_srcdir)/include/sys/acl_impl.h \ + $(top_srcdir)/include/sys/atomic.h \ + $(top_srcdir)/include/sys/attr.h \ + $(top_srcdir)/include/sys/bitmap.h \ + $(top_srcdir)/include/sys/bootconf.h \ + $(top_srcdir)/include/sys/bootprops.h \ + $(top_srcdir)/include/sys/buf.h \ + $(top_srcdir)/include/sys/byteorder.h \ + $(top_srcdir)/include/sys/callb.h \ + $(top_srcdir)/include/sys/callo.h \ + $(top_srcdir)/include/sys/cmn_err.h \ + $(top_srcdir)/include/sys/compress.h \ + $(top_srcdir)/include/sys/condvar.h \ + $(top_srcdir)/include/sys/conf.h \ + $(top_srcdir)/include/sys/console.h \ + $(top_srcdir)/include/sys/cpupart.h \ + $(top_srcdir)/include/sys/cpuvar.h \ + $(top_srcdir)/include/sys/crc32.h \ + $(top_srcdir)/include/sys/cred.h \ + $(top_srcdir)/include/sys/ctype.h \ + $(top_srcdir)/include/sys/ddi.h \ + $(top_srcdir)/include/sys/debug.h \ + $(top_srcdir)/include/sys/dirent.h \ + $(top_srcdir)/include/sys/disp.h \ + $(top_srcdir)/include/sys/dkio.h \ + $(top_srcdir)/include/sys/dkioc_free_util.h \ + $(top_srcdir)/include/sys/dklabel.h \ + $(top_srcdir)/include/sys/dnlc.h \ + $(top_srcdir)/include/sys/dumphdr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/errno.h \ + $(top_srcdir)/include/sys/extdirent.h \ + $(top_srcdir)/include/sys/fcntl.h \ + $(top_srcdir)/include/sys/file.h \ + $(top_srcdir)/include/sys/idmap.h \ + $(top_srcdir)/include/sys/int_limits.h \ + $(top_srcdir)/include/sys/int_types.h \ + $(top_srcdir)/include/sys/inttypes.h \ + $(top_srcdir)/include/sys/isa_defs.h \ + $(top_srcdir)/include/sys/kidmap.h \ + $(top_srcdir)/include/sys/kmem.h \ + $(top_srcdir)/include/sys/kmem_cache.h \ + $(top_srcdir)/include/sys/kobj.h \ + $(top_srcdir)/include/sys/kstat.h \ + $(top_srcdir)/include/sys/list.h \ + $(top_srcdir)/include/sys/mkdev.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/modctl.h \ + $(top_srcdir)/include/sys/mode.h \ + $(top_srcdir)/include/sys/mount.h \ + $(top_srcdir)/include/sys/mutex.h \ + $(top_srcdir)/include/sys/note.h \ + $(top_srcdir)/include/sys/open.h \ + $(top_srcdir)/include/sys/param.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/pool.h \ + $(top_srcdir)/include/sys/priv_impl.h \ + $(top_srcdir)/include/sys/processor.h \ + $(top_srcdir)/include/sys/proc.h \ + $(top_srcdir)/include/sys/pset.h \ + $(top_srcdir)/include/sys/random.h \ + $(top_srcdir)/include/sys/refstr.h \ + $(top_srcdir)/include/sys/resource.h \ + $(top_srcdir)/include/sys/rwlock.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sid.h \ + $(top_srcdir)/include/sys/signal.h \ + $(top_srcdir)/include/sys/stat.h \ + $(top_srcdir)/include/sys/stropts.h \ + $(top_srcdir)/include/sys/sunddi.h \ + $(top_srcdir)/include/sys/sunldi.h \ + $(top_srcdir)/include/sys/sysdc.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/sysmacros.h \ + $(top_srcdir)/include/sys/systeminfo.h \ + $(top_srcdir)/include/sys/systm.h \ + $(top_srcdir)/include/sys/taskq.h \ + $(top_srcdir)/include/sys/thread.h \ + $(top_srcdir)/include/sys/time.h \ + $(top_srcdir)/include/sys/timer.h \ + $(top_srcdir)/include/sys/t_lock.h \ + $(top_srcdir)/include/sys/tsd.h \ + $(top_srcdir)/include/sys/types32.h \ + $(top_srcdir)/include/sys/types.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uio.h \ + $(top_srcdir)/include/sys/unistd.h \ + $(top_srcdir)/include/sys/user.h \ + $(top_srcdir)/include/sys/va_list.h \ + $(top_srcdir)/include/sys/varargs.h \ + $(top_srcdir)/include/sys/vfs.h \ + $(top_srcdir)/include/sys/vfs_opreg.h \ + $(top_srcdir)/include/sys/vmem.h \ + $(top_srcdir)/include/sys/vmsystm.h \ + $(top_srcdir)/include/sys/vnode.h \ + $(top_srcdir)/include/sys/zmod.h \ + $(top_srcdir)/include/sys/zone.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = fm fs sysevent +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/sys/acl.h \ + $(top_srcdir)/include/sys/acl_impl.h \ + $(top_srcdir)/include/sys/atomic.h \ + $(top_srcdir)/include/sys/attr.h \ + $(top_srcdir)/include/sys/bitmap.h \ + $(top_srcdir)/include/sys/bootconf.h \ + $(top_srcdir)/include/sys/bootprops.h \ + $(top_srcdir)/include/sys/buf.h \ + $(top_srcdir)/include/sys/byteorder.h \ + $(top_srcdir)/include/sys/callb.h \ + $(top_srcdir)/include/sys/callo.h \ + $(top_srcdir)/include/sys/cmn_err.h \ + $(top_srcdir)/include/sys/compress.h \ + $(top_srcdir)/include/sys/condvar.h \ + $(top_srcdir)/include/sys/conf.h \ + $(top_srcdir)/include/sys/console.h \ + $(top_srcdir)/include/sys/cpupart.h \ + $(top_srcdir)/include/sys/cpuvar.h \ + $(top_srcdir)/include/sys/crc32.h \ + $(top_srcdir)/include/sys/cred.h \ + $(top_srcdir)/include/sys/ctype.h \ + $(top_srcdir)/include/sys/ddi.h \ + $(top_srcdir)/include/sys/debug.h \ + $(top_srcdir)/include/sys/dirent.h \ + $(top_srcdir)/include/sys/disp.h \ + $(top_srcdir)/include/sys/dkio.h \ + $(top_srcdir)/include/sys/dkioc_free_util.h \ + $(top_srcdir)/include/sys/dklabel.h \ + $(top_srcdir)/include/sys/dnlc.h \ + $(top_srcdir)/include/sys/dumphdr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/errno.h \ + $(top_srcdir)/include/sys/extdirent.h \ + $(top_srcdir)/include/sys/fcntl.h \ + $(top_srcdir)/include/sys/file.h \ + $(top_srcdir)/include/sys/idmap.h \ + $(top_srcdir)/include/sys/int_limits.h \ + $(top_srcdir)/include/sys/int_types.h \ + $(top_srcdir)/include/sys/inttypes.h \ + $(top_srcdir)/include/sys/isa_defs.h \ + $(top_srcdir)/include/sys/kidmap.h \ + $(top_srcdir)/include/sys/kmem.h \ + $(top_srcdir)/include/sys/kmem_cache.h \ + $(top_srcdir)/include/sys/kobj.h \ + $(top_srcdir)/include/sys/kstat.h \ + $(top_srcdir)/include/sys/list.h \ + $(top_srcdir)/include/sys/mkdev.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/modctl.h \ + $(top_srcdir)/include/sys/mode.h \ + $(top_srcdir)/include/sys/mount.h \ + $(top_srcdir)/include/sys/mutex.h \ + $(top_srcdir)/include/sys/note.h \ + $(top_srcdir)/include/sys/open.h \ + $(top_srcdir)/include/sys/param.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/pool.h \ + $(top_srcdir)/include/sys/priv_impl.h \ + $(top_srcdir)/include/sys/processor.h \ + $(top_srcdir)/include/sys/proc.h \ + $(top_srcdir)/include/sys/pset.h \ + $(top_srcdir)/include/sys/random.h \ + $(top_srcdir)/include/sys/refstr.h \ + $(top_srcdir)/include/sys/resource.h \ + $(top_srcdir)/include/sys/rwlock.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sid.h \ + $(top_srcdir)/include/sys/signal.h \ + $(top_srcdir)/include/sys/stat.h \ + $(top_srcdir)/include/sys/stropts.h \ + $(top_srcdir)/include/sys/sunddi.h \ + $(top_srcdir)/include/sys/sunldi.h \ + $(top_srcdir)/include/sys/sysdc.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/sysmacros.h \ + $(top_srcdir)/include/sys/systeminfo.h \ + $(top_srcdir)/include/sys/systm.h \ + $(top_srcdir)/include/sys/taskq.h \ + $(top_srcdir)/include/sys/thread.h \ + $(top_srcdir)/include/sys/time.h \ + $(top_srcdir)/include/sys/timer.h \ + $(top_srcdir)/include/sys/t_lock.h \ + $(top_srcdir)/include/sys/tsd.h \ + $(top_srcdir)/include/sys/types32.h \ + $(top_srcdir)/include/sys/types.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uio.h \ + $(top_srcdir)/include/sys/unistd.h \ + $(top_srcdir)/include/sys/user.h \ + $(top_srcdir)/include/sys/va_list.h \ + $(top_srcdir)/include/sys/varargs.h \ + $(top_srcdir)/include/sys/vfs.h \ + $(top_srcdir)/include/sys/vfs_opreg.h \ + $(top_srcdir)/include/sys/vmem.h \ + $(top_srcdir)/include/sys/vmsystm.h \ + $(top_srcdir)/include/sys/vnode.h \ + $(top_srcdir)/include/sys/zmod.h \ + $(top_srcdir)/include/sys/zone.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/sys +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-kernelHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/sys/acl.h +++ linux-aws-4.15.0/spl/include/sys/acl.h @@ -0,0 +1,117 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ACL_H +#define _SPL_ACL_H + +#include + +typedef struct ace { + uid_t a_who; + uint32_t a_access_mask; + uint16_t a_flags; + uint16_t a_type; +} ace_t; + +typedef struct ace_object { + uid_t a_who; /* uid or gid */ + uint32_t a_access_mask; /* read,write,... */ + uint16_t a_flags; /* see below */ + uint16_t a_type; /* allow or deny */ + uint8_t a_obj_type[16]; /* obj type */ + uint8_t a_inherit_obj_type[16]; /* inherit obj */ +} ace_object_t; + +#define MAX_ACL_ENTRIES 1024 + +#define ACE_READ_DATA 0x00000001 +#define ACE_LIST_DIRECTORY 0x00000001 +#define ACE_WRITE_DATA 0x00000002 +#define ACE_ADD_FILE 0x00000002 +#define ACE_APPEND_DATA 0x00000004 +#define ACE_ADD_SUBDIRECTORY 0x00000004 +#define ACE_READ_NAMED_ATTRS 0x00000008 +#define ACE_WRITE_NAMED_ATTRS 0x00000010 +#define ACE_EXECUTE 0x00000020 +#define ACE_DELETE_CHILD 0x00000040 +#define ACE_READ_ATTRIBUTES 0x00000080 +#define ACE_WRITE_ATTRIBUTES 0x00000100 +#define ACE_DELETE 0x00010000 +#define ACE_READ_ACL 0x00020000 +#define ACE_WRITE_ACL 0x00040000 +#define ACE_WRITE_OWNER 0x00080000 +#define ACE_SYNCHRONIZE 0x00100000 + +#define ACE_FILE_INHERIT_ACE 0x0001 +#define ACE_DIRECTORY_INHERIT_ACE 0x0002 +#define ACE_NO_PROPAGATE_INHERIT_ACE 0x0004 +#define ACE_INHERIT_ONLY_ACE 0x0008 +#define ACE_SUCCESSFUL_ACCESS_ACE_FLAG 0x0010 +#define ACE_FAILED_ACCESS_ACE_FLAG 0x0020 +#define ACE_IDENTIFIER_GROUP 0x0040 +#define ACE_INHERITED_ACE 0x0080 +#define ACE_OWNER 0x1000 +#define ACE_GROUP 0x2000 +#define ACE_EVERYONE 0x4000 + +#define ACE_ACCESS_ALLOWED_ACE_TYPE 0x0000 +#define ACE_ACCESS_DENIED_ACE_TYPE 0x0001 +#define ACE_SYSTEM_AUDIT_ACE_TYPE 0x0002 +#define ACE_SYSTEM_ALARM_ACE_TYPE 0x0003 + +#define ACL_AUTO_INHERIT 0x0001 +#define ACL_PROTECTED 0x0002 +#define ACL_DEFAULTED 0x0004 +#define ACL_FLAGS_ALL (ACL_AUTO_INHERIT|ACL_PROTECTED|ACL_DEFAULTED) + +#define ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x04 +#define ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x05 +#define ACE_ACCESS_DENIED_OBJECT_ACE_TYPE 0x06 +#define ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE 0x07 +#define ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE 0x08 +#define ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x09 +#define ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE 0x0A +#define ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0x0B +#define ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0x0C +#define ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0x0D +#define ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE 0x0E +#define ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0x0F +#define ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10 + +#define ACE_ALL_TYPES 0x001F + +#define ACE_TYPE_FLAGS (ACE_OWNER|ACE_GROUP|ACE_EVERYONE|ACE_IDENTIFIER_GROUP) + +#define ACE_ALL_PERMS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ + ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \ + ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \ + ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_WRITE_ACL| \ + ACE_WRITE_OWNER|ACE_SYNCHRONIZE) + +#define VSA_ACE 0x0010 +#define VSA_ACECNT 0x0020 +#define VSA_ACE_ALLTYPES 0x0040 +#define VSA_ACE_ACLFLAGS 0x0080 + +#endif /* _SPL_ACL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/acl_impl.h +++ linux-aws-4.15.0/spl/include/sys/acl_impl.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ACL_IMPL_H +#define _SPL_ACL_IMPL_H + +#endif /* _SPL_ACL_IMPL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/atomic.h +++ linux-aws-4.15.0/spl/include/sys/atomic.h @@ -0,0 +1,315 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ATOMIC_H +#define _SPL_ATOMIC_H + +#include +#include +#include + +/* + * Two approaches to atomic operations are implemented each with its + * own benefits are drawbacks imposed by the Solaris API. Neither + * approach handles the issue of word breaking when using a 64-bit + * atomic variable on a 32-bit arch. The Solaris API would need to + * add an atomic read call to correctly support this. + * + * When ATOMIC_SPINLOCK is defined all atomic operations will be + * serialized through global spin locks. This is bad for performance + * but it does allow a simple generic implementation. + * + * When ATOMIC_SPINLOCK is not defined the Linux atomic operations + * are used. This is safe as long as the core Linux implementation + * doesn't change because we are relying on the fact that an atomic + * type is really just a uint32 or uint64. If this changes at some + * point in the future we need to fall-back to the spin approach. + */ +#ifdef ATOMIC_SPINLOCK +extern spinlock_t atomic32_lock; +extern spinlock_t atomic64_lock; + +static __inline__ void +atomic_inc_32(volatile uint32_t *target) +{ + spin_lock(&atomic32_lock); + (*target)++; + spin_unlock(&atomic32_lock); +} + +static __inline__ void +atomic_dec_32(volatile uint32_t *target) +{ + spin_lock(&atomic32_lock); + (*target)--; + spin_unlock(&atomic32_lock); +} + +static __inline__ void +atomic_add_32(volatile uint32_t *target, int32_t delta) +{ + spin_lock(&atomic32_lock); + *target += delta; + spin_unlock(&atomic32_lock); +} + +static __inline__ void +atomic_sub_32(volatile uint32_t *target, int32_t delta) +{ + spin_lock(&atomic32_lock); + *target -= delta; + spin_unlock(&atomic32_lock); +} + +static __inline__ uint32_t +atomic_inc_32_nv(volatile uint32_t *target) +{ + uint32_t nv; + + spin_lock(&atomic32_lock); + nv = ++(*target); + spin_unlock(&atomic32_lock); + + return nv; +} + +static __inline__ uint32_t +atomic_dec_32_nv(volatile uint32_t *target) +{ + uint32_t nv; + + spin_lock(&atomic32_lock); + nv = --(*target); + spin_unlock(&atomic32_lock); + + return nv; +} + +static __inline__ uint32_t +atomic_add_32_nv(volatile uint32_t *target, uint32_t delta) +{ + uint32_t nv; + + spin_lock(&atomic32_lock); + *target += delta; + nv = *target; + spin_unlock(&atomic32_lock); + + return nv; +} + +static __inline__ uint32_t +atomic_sub_32_nv(volatile uint32_t *target, uint32_t delta) +{ + uint32_t nv; + + spin_lock(&atomic32_lock); + *target -= delta; + nv = *target; + spin_unlock(&atomic32_lock); + + return nv; +} + +static __inline__ uint32_t +atomic_cas_32(volatile uint32_t *target, uint32_t cmp, + uint32_t newval) +{ + uint32_t rc; + + spin_lock(&atomic32_lock); + rc = *target; + if (*target == cmp) + *target = newval; + + spin_unlock(&atomic32_lock); + + return rc; +} + +static __inline__ uint32_t +atomic_swap_32(volatile uint32_t *target, uint32_t newval) +{ + uint32_t rc; + + spin_lock(&atomic32_lock); + rc = *target; + *target = newval; + spin_unlock(&atomic32_lock); + + return rc; +} + +static __inline__ void +atomic_inc_64(volatile uint64_t *target) +{ + spin_lock(&atomic64_lock); + (*target)++; + spin_unlock(&atomic64_lock); +} + +static __inline__ void +atomic_dec_64(volatile uint64_t *target) +{ + spin_lock(&atomic64_lock); + (*target)--; + spin_unlock(&atomic64_lock); +} + +static __inline__ void +atomic_add_64(volatile uint64_t *target, uint64_t delta) +{ + spin_lock(&atomic64_lock); + *target += delta; + spin_unlock(&atomic64_lock); +} + +static __inline__ void +atomic_sub_64(volatile uint64_t *target, uint64_t delta) +{ + spin_lock(&atomic64_lock); + *target -= delta; + spin_unlock(&atomic64_lock); +} + +static __inline__ uint64_t +atomic_inc_64_nv(volatile uint64_t *target) +{ + uint64_t nv; + + spin_lock(&atomic64_lock); + nv = ++(*target); + spin_unlock(&atomic64_lock); + + return nv; +} + +static __inline__ uint64_t +atomic_dec_64_nv(volatile uint64_t *target) +{ + uint64_t nv; + + spin_lock(&atomic64_lock); + nv = --(*target); + spin_unlock(&atomic64_lock); + + return nv; +} + +static __inline__ uint64_t +atomic_add_64_nv(volatile uint64_t *target, uint64_t delta) +{ + uint64_t nv; + + spin_lock(&atomic64_lock); + *target += delta; + nv = *target; + spin_unlock(&atomic64_lock); + + return nv; +} + +static __inline__ uint64_t +atomic_sub_64_nv(volatile uint64_t *target, uint64_t delta) +{ + uint64_t nv; + + spin_lock(&atomic64_lock); + *target -= delta; + nv = *target; + spin_unlock(&atomic64_lock); + + return nv; +} + +static __inline__ uint64_t +atomic_cas_64(volatile uint64_t *target, uint64_t cmp, + uint64_t newval) +{ + uint64_t rc; + + spin_lock(&atomic64_lock); + rc = *target; + if (*target == cmp) + *target = newval; + spin_unlock(&atomic64_lock); + + return rc; +} + +static __inline__ uint64_t +atomic_swap_64(volatile uint64_t *target, uint64_t newval) +{ + uint64_t rc; + + spin_lock(&atomic64_lock); + rc = *target; + *target = newval; + spin_unlock(&atomic64_lock); + + return rc; +} + +#else /* ATOMIC_SPINLOCK */ + +#define atomic_inc_32(v) atomic_inc((atomic_t *)(v)) +#define atomic_dec_32(v) atomic_dec((atomic_t *)(v)) +#define atomic_add_32(v, i) atomic_add((i), (atomic_t *)(v)) +#define atomic_sub_32(v, i) atomic_sub((i), (atomic_t *)(v)) +#define atomic_inc_32_nv(v) atomic_inc_return((atomic_t *)(v)) +#define atomic_dec_32_nv(v) atomic_dec_return((atomic_t *)(v)) +#define atomic_add_32_nv(v, i) atomic_add_return((i), (atomic_t *)(v)) +#define atomic_sub_32_nv(v, i) atomic_sub_return((i), (atomic_t *)(v)) +#define atomic_cas_32(v, x, y) atomic_cmpxchg((atomic_t *)(v), x, y) +#define atomic_swap_32(v, x) atomic_xchg((atomic_t *)(v), x) +#define atomic_inc_64(v) atomic64_inc((atomic64_t *)(v)) +#define atomic_dec_64(v) atomic64_dec((atomic64_t *)(v)) +#define atomic_add_64(v, i) atomic64_add((i), (atomic64_t *)(v)) +#define atomic_sub_64(v, i) atomic64_sub((i), (atomic64_t *)(v)) +#define atomic_inc_64_nv(v) atomic64_inc_return((atomic64_t *)(v)) +#define atomic_dec_64_nv(v) atomic64_dec_return((atomic64_t *)(v)) +#define atomic_add_64_nv(v, i) atomic64_add_return((i), (atomic64_t *)(v)) +#define atomic_sub_64_nv(v, i) atomic64_sub_return((i), (atomic64_t *)(v)) +#define atomic_cas_64(v, x, y) atomic64_cmpxchg((atomic64_t *)(v), x, y) +#define atomic_swap_64(v, x) atomic64_xchg((atomic64_t *)(v), x) + +#endif /* ATOMIC_SPINLOCK */ + +#ifdef _LP64 +static __inline__ void * +atomic_cas_ptr(volatile void *target, void *cmp, void *newval) +{ + return (void *)atomic_cas_64((volatile uint64_t *)target, + (uint64_t)cmp, (uint64_t)newval); +} +#else /* _LP64 */ +static __inline__ void * +atomic_cas_ptr(volatile void *target, void *cmp, void *newval) +{ + return (void *)atomic_cas_32((volatile uint32_t *)target, + (uint32_t)cmp, (uint32_t)newval); +} +#endif /* _LP64 */ + +#endif /* _SPL_ATOMIC_H */ --- linux-aws-4.15.0.orig/spl/include/sys/attr.h +++ linux-aws-4.15.0/spl/include/sys/attr.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ATTR_H +#define _SPL_ATTR_H + +#endif /* SPL_ATTR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/bitmap.h +++ linux-aws-4.15.0/spl/include/sys/bitmap.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BITMAP_H +#define _SPL_BITMAP_H + +#endif /* SPL_BITMAP_H */ --- linux-aws-4.15.0.orig/spl/include/sys/bootconf.h +++ linux-aws-4.15.0/spl/include/sys/bootconf.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BOOTCONF_H +#define _SPL_BOOTCONF_H + +#endif /* SPL_BOOTCONF_H */ --- linux-aws-4.15.0.orig/spl/include/sys/bootprops.h +++ linux-aws-4.15.0/spl/include/sys/bootprops.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BOOTPROPS_H +#define _SPL_BOOTPROPS_H + +#endif /* SPL_BOOTPROPS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/buf.h +++ linux-aws-4.15.0/spl/include/sys/buf.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BUF_H +#define _SPL_BUF_H + +#endif /* SPL_BUF_H */ --- linux-aws-4.15.0.orig/spl/include/sys/byteorder.h +++ linux-aws-4.15.0/spl/include/sys/byteorder.h @@ -0,0 +1,69 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_BYTEORDER_H +#define _SPL_BYTEORDER_H + +#include +#include + +#define LE_16(x) cpu_to_le16(x) +#define LE_32(x) cpu_to_le32(x) +#define LE_64(x) cpu_to_le64(x) +#define BE_16(x) cpu_to_be16(x) +#define BE_32(x) cpu_to_be32(x) +#define BE_64(x) cpu_to_be64(x) + +#define BE_IN8(xa) \ + *((uint8_t *)(xa)) + +#define BE_IN16(xa) \ + (((uint16_t)BE_IN8(xa) << 8) | BE_IN8((uint8_t *)(xa)+1)) + +#define BE_IN32(xa) \ + (((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2)) + +#ifdef _BIG_ENDIAN +static __inline__ uint64_t +htonll(uint64_t n) { + return (n); +} + +static __inline__ uint64_t +ntohll(uint64_t n) { + return (n); +} +#else +static __inline__ uint64_t +htonll(uint64_t n) { + return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32)); +} + +static __inline__ uint64_t +ntohll(uint64_t n) { + return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32)); +} +#endif + +#endif /* SPL_BYTEORDER_H */ --- linux-aws-4.15.0.orig/spl/include/sys/callb.h +++ linux-aws-4.15.0/spl/include/sys/callb.h @@ -0,0 +1,55 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CALLB_H +#define _SPL_CALLB_H + +#include +#include + +#define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp)); + +typedef struct callb_cpr { + kmutex_t *cc_lockp; +} callb_cpr_t; + +#define CALLB_CPR_INIT(cp, lockp, func, name) { \ + (cp)->cc_lockp = lockp; \ +} + +#define CALLB_CPR_SAFE_BEGIN(cp) { \ + CALLB_CPR_ASSERT(cp); \ +} + +#define CALLB_CPR_SAFE_END(cp, lockp) { \ + CALLB_CPR_ASSERT(cp); \ +} + +#define CALLB_CPR_EXIT(cp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ + mutex_exit((cp)->cc_lockp); \ +} + +#endif /* _SPL_CALLB_H */ + --- linux-aws-4.15.0.orig/spl/include/sys/callo.h +++ linux-aws-4.15.0/spl/include/sys/callo.h @@ -0,0 +1,52 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CALLO_H +#define _SPL_CALLO_H + +/* + * Callout flags: + * + * CALLOUT_FLAG_ROUNDUP + * Roundup the expiration time to the next resolution boundary. + * If this flag is not specified, the expiration time is rounded down. + * CALLOUT_FLAG_ABSOLUTE + * Normally, the expiration passed to the timeout API functions is an + * expiration interval. If this flag is specified, then it is + * interpreted as the expiration time itself. + * CALLOUT_FLAG_HRESTIME + * Normally, callouts are not affected by changes to system time + * (hrestime). This flag is used to create a callout that is affected + * by system time. If system time changes, these timers must be + * handled in a special way (see callout.c). These are used by condition + * variables and LWP timers that need this behavior. + * CALLOUT_FLAG_32BIT + * Legacy interfaces timeout() and realtime_timeout() pass this flag + * to timeout_generic() to indicate that a 32-bit ID should be allocated. + */ +#define CALLOUT_FLAG_ROUNDUP 0x1 +#define CALLOUT_FLAG_ABSOLUTE 0x2 +#define CALLOUT_FLAG_HRESTIME 0x4 +#define CALLOUT_FLAG_32BIT 0x8 + +#endif /* _SPL_CALLB_H */ --- linux-aws-4.15.0.orig/spl/include/sys/cmn_err.h +++ linux-aws-4.15.0/spl/include/sys/cmn_err.h @@ -0,0 +1,42 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CMN_ERR_H +#define _SPL_CMN_ERR_H + +#include + +#define CE_CONT 0 /* continuation */ +#define CE_NOTE 1 /* notice */ +#define CE_WARN 2 /* warning */ +#define CE_PANIC 3 /* panic */ +#define CE_IGNORE 4 /* print nothing */ + +extern void cmn_err(int, const char *, ...); +extern void vcmn_err(int, const char *, __va_list); +extern void vpanic(const char *, __va_list); + +#define fm_panic panic + +#endif /* SPL_CMN_ERR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/compress.h +++ linux-aws-4.15.0/spl/include/sys/compress.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_COMPRESS_H +#define _SPL_COMPRESS_H + +#endif /* SPL_COMPRESS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/condvar.h +++ linux-aws-4.15.0/spl/include/sys/condvar.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_CONDVAR_H +#define _SPL_CONDVAR_H + +#include +#include +#include +#include +#include +#include + +/* + * The kcondvar_t struct is protected by mutex taken externally before + * calling any of the wait/signal funs, and passed into the wait funs. + */ +#define CV_MAGIC 0x346545f4 +#define CV_DESTROY 0x346545f5 + +typedef struct { + int cv_magic; + spl_wait_queue_head_t cv_event; + spl_wait_queue_head_t cv_destroy; + atomic_t cv_refs; + atomic_t cv_waiters; + kmutex_t *cv_mutex; +} kcondvar_t; + +typedef enum { CV_DEFAULT = 0, CV_DRIVER } kcv_type_t; + +extern void __cv_init(kcondvar_t *, char *, kcv_type_t, void *); +extern void __cv_destroy(kcondvar_t *); +extern void __cv_wait(kcondvar_t *, kmutex_t *); +extern void __cv_wait_io(kcondvar_t *, kmutex_t *); +extern void __cv_wait_sig(kcondvar_t *, kmutex_t *); +extern clock_t __cv_timedwait(kcondvar_t *, kmutex_t *, clock_t); +extern clock_t __cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t); +extern clock_t cv_timedwait_hires(kcondvar_t *, kmutex_t *, hrtime_t, + hrtime_t res, int flag); +extern clock_t cv_timedwait_sig_hires(kcondvar_t *, kmutex_t *, hrtime_t, + hrtime_t res, int flag); +extern void __cv_signal(kcondvar_t *); +extern void __cv_broadcast(kcondvar_t *c); + +#define cv_init(cvp, name, type, arg) __cv_init(cvp, name, type, arg) +#define cv_destroy(cvp) __cv_destroy(cvp) +#define cv_wait(cvp, mp) __cv_wait(cvp, mp) +#define cv_wait_io(cvp, mp) __cv_wait_io(cvp, mp) +#define cv_wait_sig(cvp, mp) __cv_wait_sig(cvp, mp) +#define cv_wait_interruptible(cvp, mp) cv_wait_sig(cvp, mp) +#define cv_timedwait(cvp, mp, t) __cv_timedwait(cvp, mp, t) +#define cv_timedwait_sig(cvp, mp, t) __cv_timedwait_sig(cvp, mp, t) +#define cv_timedwait_interruptible(cvp, mp, t) cv_timedwait_sig(cvp, mp, t) +#define cv_signal(cvp) __cv_signal(cvp) +#define cv_broadcast(cvp) __cv_broadcast(cvp) + +#endif /* _SPL_CONDVAR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/conf.h +++ linux-aws-4.15.0/spl/include/sys/conf.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CONF_H +#define _SPL_CONF_H + +#endif /* SPL_CONF_H */ --- linux-aws-4.15.0.orig/spl/include/sys/console.h +++ linux-aws-4.15.0/spl/include/sys/console.h @@ -0,0 +1,44 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CONSOLE_H +#define _SPL_CONSOLE_H + +void +console_vprintf(const char *fmt, va_list args) +{ + vprintk(fmt, args); +} + +void +console_printf(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + console_vprintf(fmt, args); + va_end(args); +} + +#endif /* _SPL_CONSOLE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/cpupart.h +++ linux-aws-4.15.0/spl/include/sys/cpupart.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CPUPART_H +#define _SPL_CPUPART_H + +#endif /* SPL_CPUPART_H */ --- linux-aws-4.15.0.orig/spl/include/sys/cpuvar.h +++ linux-aws-4.15.0/spl/include/sys/cpuvar.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CPUVAR_H +#define _SPL_CPUVAR_H + +#endif /* SPL_CPUVAR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/crc32.h +++ linux-aws-4.15.0/spl/include/sys/crc32.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CRC32_H +#define _SPL_CRC32_H + +#endif /* SPL_CRC32_H */ --- linux-aws-4.15.0.orig/spl/include/sys/cred.h +++ linux-aws-4.15.0/spl/include/sys/cred.h @@ -0,0 +1,74 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CRED_H +#define _SPL_CRED_H + +#include +#include +#include + +typedef struct cred cred_t; + +#define kcred ((cred_t *)(init_task.cred)) +#define CRED() ((cred_t *)current_cred()) + +/* Linux 4.9 API change, GROUP_AT was removed */ +#ifndef GROUP_AT +#define GROUP_AT(gi, i) ((gi)->gid[i]) +#endif + +#ifdef HAVE_KUIDGID_T + +#define KUID_TO_SUID(x) (__kuid_val(x)) +#define KGID_TO_SGID(x) (__kgid_val(x)) +#define SUID_TO_KUID(x) (KUIDT_INIT(x)) +#define SGID_TO_KGID(x) (KGIDT_INIT(x)) +#define KGIDP_TO_SGIDP(x) (&(x)->val) + +#else /* HAVE_KUIDGID_T */ + +#define KUID_TO_SUID(x) (x) +#define KGID_TO_SGID(x) (x) +#define SUID_TO_KUID(x) (x) +#define SGID_TO_KGID(x) (x) +#define KGIDP_TO_SGIDP(x) (x) + +#endif /* HAVE_KUIDGID_T */ + +extern void crhold(cred_t *cr); +extern void crfree(cred_t *cr); +extern uid_t crgetuid(const cred_t *cr); +extern uid_t crgetruid(const cred_t *cr); +extern uid_t crgetsuid(const cred_t *cr); +extern uid_t crgetfsuid(const cred_t *cr); +extern gid_t crgetgid(const cred_t *cr); +extern gid_t crgetrgid(const cred_t *cr); +extern gid_t crgetsgid(const cred_t *cr); +extern gid_t crgetfsgid(const cred_t *cr); +extern int crgetngroups(const cred_t *cr); +extern gid_t * crgetgroups(const cred_t *cr); +extern int groupmember(gid_t gid, const cred_t *cr); + +#endif /* _SPL_CRED_H */ --- linux-aws-4.15.0.orig/spl/include/sys/ctype.h +++ linux-aws-4.15.0/spl/include/sys/ctype.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_CTYPE_H +#define _SPL_CTYPE_H + +#include + +#endif /* SPL_CTYPE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/ddi.h +++ linux-aws-4.15.0/spl/include/sys/ddi.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DDI_H +#define _SPL_DDI_H + +#endif /* SPL_DDI_H */ --- linux-aws-4.15.0.orig/spl/include/sys/debug.h +++ linux-aws-4.15.0/spl/include/sys/debug.h @@ -0,0 +1,126 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +/* + * Available Solaris debug functions. All of the ASSERT() macros will be + * compiled out when NDEBUG is defined, this is the default behavior for + * the SPL. To enable assertions use the --enable-debug with configure. + * The VERIFY() functions are never compiled out and cannot be disabled. + * + * PANIC() - Panic the node and print message. + * ASSERT() - Assert X is true, if not panic. + * ASSERTV() - Wraps a variable declaration which is only used by ASSERT(). + * ASSERT3B() - Assert boolean X OP Y is true, if not panic. + * ASSERT3S() - Assert signed X OP Y is true, if not panic. + * ASSERT3U() - Assert unsigned X OP Y is true, if not panic. + * ASSERT3P() - Assert pointer X OP Y is true, if not panic. + * ASSERT0() - Assert value is zero, if not panic. + * VERIFY() - Verify X is true, if not panic. + * VERIFY3B() - Verify boolean X OP Y is true, if not panic. + * VERIFY3S() - Verify signed X OP Y is true, if not panic. + * VERIFY3U() - Verify unsigned X OP Y is true, if not panic. + * VERIFY3P() - Verify pointer X OP Y is true, if not panic. + * VERIFY0() - Verify value is zero, if not panic. + */ + +#ifndef _SPL_DEBUG_H +#define _SPL_DEBUG_H + +/* + * Common DEBUG functionality. + */ +int spl_panic(const char *file, const char *func, int line, + const char *fmt, ...); +void spl_dumpstack(void); + +#define PANIC(fmt, a...) \ + spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a) + +#define VERIFY(cond) \ + (void)(unlikely(!(cond)) && \ + spl_panic(__FILE__, __FUNCTION__, __LINE__, \ + "%s", "VERIFY(" #cond ") failed\n")) + +#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) \ + (void)((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) && \ + spl_panic(__FILE__, __FUNCTION__, __LINE__, \ + "VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \ + "failed (" FMT " " #OP " " FMT ")\n", \ + CAST (LEFT), CAST (RIGHT))) + +#define VERIFY3B(x,y,z) VERIFY3_IMPL(x, y, z, boolean_t, "%d", (boolean_t)) +#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long)) +#define VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu", \ + (unsigned long long)) +#define VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *)) +#define VERIFY0(x) VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long)) + +#define CTASSERT_GLOBAL(x) _CTASSERT(x, __LINE__) +#define CTASSERT(x) { _CTASSERT(x, __LINE__); } +#define _CTASSERT(x, y) __CTASSERT(x, y) +#define __CTASSERT(x, y) \ + typedef char __attribute__ ((unused)) \ + __compile_time_assertion__ ## y[(x) ? 1 : -1] + +/* + * Debugging disabled (--disable-debug) + */ +#ifdef NDEBUG + +#define SPL_DEBUG_STR "" +#define ASSERT(x) ((void)0) +#define ASSERTV(x) +#define ASSERT3B(x,y,z) ((void)0) +#define ASSERT3S(x,y,z) ((void)0) +#define ASSERT3U(x,y,z) ((void)0) +#define ASSERT3P(x,y,z) ((void)0) +#define ASSERT0(x) ((void)0) +#define IMPLY(A, B) ((void)0) +#define EQUIV(A, B) ((void)0) + +/* + * Debugging enabled (--enable-debug) + */ +#else + +#define SPL_DEBUG_STR " (DEBUG mode)" +#define ASSERT(cond) VERIFY(cond) +#define ASSERTV(x) x +#define ASSERT3B(x,y,z) VERIFY3B(x, y, z) +#define ASSERT3S(x,y,z) VERIFY3S(x, y, z) +#define ASSERT3U(x,y,z) VERIFY3U(x, y, z) +#define ASSERT3P(x,y,z) VERIFY3P(x, y, z) +#define ASSERT0(x) VERIFY0(x) +#define IMPLY(A, B) \ + ((void)(((!(A)) || (B)) || \ + spl_panic(__FILE__, __FUNCTION__, __LINE__, \ + "(" #A ") implies (" #B ")"))) +#define EQUIV(A, B) \ + ((void)((!!(A) == !!(B)) || \ + spl_panic(__FILE__, __FUNCTION__, __LINE__, \ + "(" #A ") is equivalent to (" #B ")"))) + +#endif /* NDEBUG */ + +#endif /* SPL_DEBUG_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dirent.h +++ linux-aws-4.15.0/spl/include/sys/dirent.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DIRENT_H +#define _SPL_DIRENT_H + +#endif /* SPL_DIRENT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/disp.h +++ linux-aws-4.15.0/spl/include/sys/disp.h @@ -0,0 +1,34 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DISP_H +#define _SPL_DISP_H + +#include + +#define kpreempt(unused) schedule() +#define kpreempt_disable() preempt_disable() +#define kpreempt_enable() preempt_enable() + +#endif /* SPL_DISP_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dkio.h +++ linux-aws-4.15.0/spl/include/sys/dkio.h @@ -0,0 +1,40 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DKIO_H +#define _SPL_DKIO_H + +#define DFL_SZ(num_exts) \ + (sizeof (dkioc_free_list_t) + (num_exts - 1) * 16) + +#define DKIOC (0x04 << 8) +#define DKIOCFLUSHWRITECACHE (DKIOC|34) /* flush cache to phys medium */ + +/* + * ioctl to free space (e.g. SCSI UNMAP) off a disk. + * Pass a dkioc_free_list_t containing a list of extents to be freed. + */ +#define DKIOCFREE (DKIOC|50) + +#endif /* _SPL_DKIO_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dkioc_free_util.h +++ linux-aws-4.15.0/spl/include/sys/dkioc_free_util.h @@ -0,0 +1,58 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DKIOC_UTIL_H +#define _SPL_DKIOC_UTIL_H + +#include + +typedef struct dkioc_free_list_ext_s { + uint64_t dfle_start; + uint64_t dfle_length; +} dkioc_free_list_ext_t; + +typedef struct dkioc_free_list_s { + uint64_t dfl_flags; + uint64_t dfl_num_exts; + int64_t dfl_offset; + + /* + * N.B. this is only an internal debugging API! This is only called + * from debug builds of sd for pre-release checking. Remove before GA! + */ + void (*dfl_ck_func)(uint64_t, uint64_t, void *); + void *dfl_ck_arg; + + dkioc_free_list_ext_t dfl_exts[1]; +} dkioc_free_list_t; + +static inline void dfl_free(dkioc_free_list_t *dfl) { + vmem_free(dfl, DFL_SZ(dfl->dfl_num_exts)); +} + +static inline dkioc_free_list_t *dfl_alloc(uint64_t dfl_num_exts, int flags) { + return vmem_zalloc(DFL_SZ(dfl_num_exts), flags); +} + +#endif /* _SPL_DKIOC_UTIL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dklabel.h +++ linux-aws-4.15.0/spl/include/sys/dklabel.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DKLABEL_H +#define _SPL_DKLABEL_H + +#endif /* _SPL_DKLABEL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dnlc.h +++ linux-aws-4.15.0/spl/include/sys/dnlc.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DNLC_H +#define _SPL_DNLC_H + +#endif /* SPL_DNLC_H */ --- linux-aws-4.15.0.orig/spl/include/sys/dumphdr.h +++ linux-aws-4.15.0/spl/include/sys/dumphdr.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_DUMPHDR_H +#define _SPL_DUMPHDR_H + +#endif /* SPL_DUMPHDR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/efi_partition.h +++ linux-aws-4.15.0/spl/include/sys/efi_partition.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_EFI_PARTITION_H +#define _SPL_EFI_PARTITION_H + +#endif /* SPL_EFI_PARTITION_H */ --- linux-aws-4.15.0.orig/spl/include/sys/errno.h +++ linux-aws-4.15.0/spl/include/sys/errno.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ERRNO_H +#define _SPL_ERRNO_H + +#endif /* SPL_ERRNO_H */ --- linux-aws-4.15.0.orig/spl/include/sys/extdirent.h +++ linux-aws-4.15.0/spl/include/sys/extdirent.h @@ -0,0 +1,29 @@ +/*****************************************************************************\ + * Copyright (C) 2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_EXTDIRENT_H +#define _SPL_EXTDIRENT_H + +#define ED_CASE_CONFLICT 0x10 + +#endif /* _SPL_EXTDIRENT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/fcntl.h +++ linux-aws-4.15.0/spl/include/sys/fcntl.h @@ -0,0 +1,37 @@ +/*****************************************************************************\ + * Copyright (C) 2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FCNTL_H +#define _SPL_FCNTL_H + +#include + +#define F_FREESP 11 + +#ifdef CONFIG_64BIT +typedef struct flock flock64_t; +#else +typedef struct flock64 flock64_t; +#endif /* CONFIG_64BIT */ + +#endif /* _SPL_FCNTL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/file.h +++ linux-aws-4.15.0/spl/include/sys/file.h @@ -0,0 +1,31 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FILE_H +#define _SPL_FILE_H + +#define FIGNORECASE 0x00080000 +#define FKIOCTL 0x80000000 + +#endif /* SPL_FILE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/fm/Makefile.am +++ linux-aws-4.15.0/spl/include/sys/fm/Makefile.am @@ -0,0 +1,14 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fm +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/sys/fm/Makefile.in +++ linux-aws-4.15.0/spl/include/sys/fm/Makefile.in @@ -0,0 +1,623 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/fm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fm +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/fm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/fm/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/sys/fm/protocol.h +++ linux-aws-4.15.0/spl/include/sys/fm/protocol.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FM_PROTOCOL_H +#define _SPL_FM_PROTOCOL_H + +#endif /* _SPL_FM_PROTOCOL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/fm/util.h +++ linux-aws-4.15.0/spl/include/sys/fm/util.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_FM_UTIL_H +#define _SPL_FM_UTIL_H + +#endif /* _SPL_FM_UTIL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/fs/Makefile.am +++ linux-aws-4.15.0/spl/include/sys/fs/Makefile.am @@ -0,0 +1,13 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/sys/fs/swapnode.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fs +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/sys/fs/Makefile.in +++ linux-aws-4.15.0/spl/include/sys/fs/Makefile.in @@ -0,0 +1,621 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/fs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/fs/swapnode.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/sys/fs/swapnode.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/fs +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/fs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/fs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/sys/fs/swapnode.h +++ linux-aws-4.15.0/spl/include/sys/fs/swapnode.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SWAPNODE_H +#define _SPL_SWAPNODE_H + +#endif /* SPL_SWAPNODE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/idmap.h +++ linux-aws-4.15.0/spl/include/sys/idmap.h @@ -0,0 +1,29 @@ +/*****************************************************************************\ + * Copyright (C) 2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_IDMAP_H +#define _SPL_IDMAP_H + +#define IDMAP_WK_CREATOR_OWNER_UID 2147483648U + +#endif /* SPL_IDMAP_H */ --- linux-aws-4.15.0.orig/spl/include/sys/int_limits.h +++ linux-aws-4.15.0/spl/include/sys/int_limits.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_INT_LIMITS_H +#define _SPL_INT_LIMITS_H + +#endif /* SPL_INT_LIMITS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/int_types.h +++ linux-aws-4.15.0/spl/include/sys/int_types.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_INT_TYPES_H +#define _SPL_INT_TYPES_H + +#include + +#endif /* SPL_INT_TYPES_H */ --- linux-aws-4.15.0.orig/spl/include/sys/inttypes.h +++ linux-aws-4.15.0/spl/include/sys/inttypes.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_INTTYPES_H +#define _SPL_INTTYPES_H + +#endif /* SPL_INTTYPES_H */ --- linux-aws-4.15.0.orig/spl/include/sys/isa_defs.h +++ linux-aws-4.15.0/spl/include/sys/isa_defs.h @@ -0,0 +1,229 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ISA_DEFS_H +#define _SPL_ISA_DEFS_H + +/* x86_64 arch specific defines */ +#if defined(__x86_64) || defined(__x86_64__) + +#if !defined(__x86_64) +#define __x86_64 +#endif + +#if !defined(__amd64) +#define __amd64 +#endif + +#if !defined(__x86) +#define __x86 +#endif + +#if !defined(_LP64) +#define _LP64 +#endif + +#define _ALIGNMENT_REQUIRED 1 + + +/* i386 arch specific defines */ +#elif defined(__i386) || defined(__i386__) + +#if !defined(__i386) +#define __i386 +#endif + +#if !defined(__x86) +#define __x86 +#endif + +#if !defined(_ILP32) +#define _ILP32 +#endif + +#define _ALIGNMENT_REQUIRED 0 + +/* powerpc (ppc64) arch specific defines */ +#elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) + +#if !defined(__powerpc) +#define __powerpc +#endif + +#if !defined(__powerpc__) +#define __powerpc__ +#endif + +#if defined(__powerpc64__) +#if !defined(_LP64) +#define _LP64 +#endif +#else +#if !defined(_ILP32) +#define _ILP32 +#endif +#endif + +/* + * Illumos doesn't define _ALIGNMENT_REQUIRED for PPC, so default to 1 + * out of paranoia. + */ +#define _ALIGNMENT_REQUIRED 1 + +/* arm arch specific defines */ +#elif defined(__arm) || defined(__arm__) || defined(__aarch64__) + +#if !defined(__arm) +#define __arm +#endif + +#if !defined(__arm__) +#define __arm__ +#endif + +#if defined(__aarch64__) +#if !defined(_LP64) +#define _LP64 +#endif +#else +#if !defined(_ILP32) +#define _ILP32 +#endif +#endif + +#if defined(__ARMEL__) || defined(__AARCH64EL__) +#define _LITTLE_ENDIAN +#else +#define _BIG_ENDIAN +#endif + +/* + * Illumos doesn't define _ALIGNMENT_REQUIRED for ARM, so default to 1 + * out of paranoia. + */ +#define _ALIGNMENT_REQUIRED 1 + +/* sparc arch specific defines */ +#elif defined(__sparc) || defined(__sparc__) + +#if !defined(__sparc) +#define __sparc +#endif + +#if !defined(__sparc__) +#define __sparc__ +#endif + +#if defined(__arch64__) +#if !defined(_LP64) +#define _LP64 +#endif +#else +#if !defined(_ILP32) +#define _ILP32 +#endif +#endif + +#define _BIG_ENDIAN +#define _SUNOS_VTOC_16 +#define _ALIGNMENT_REQUIRED 1 + +/* s390 arch specific defines */ +#elif defined(__s390__) +#if defined(__s390x__) +#if !defined(_LP64) +#define _LP64 +#endif +#else +#if !defined(_ILP32) +#define _ILP32 +#endif +#endif + +#define _BIG_ENDIAN + +/* + * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1 + * out of paranoia. + */ +#define _ALIGNMENT_REQUIRED 1 + +/* MIPS arch specific defines */ +#elif defined(__mips__) + +#if defined(__MIPSEB__) +#define _BIG_ENDIAN +#elif defined(__MIPSEL__) +#define _LITTLE_ENDIAN +#else +#error MIPS no endian specified +#endif + +#ifndef _LP64 +#define _ILP32 +#endif + +#define _SUNOS_VTOC_16 + +/* + * Illumos doesn't define _ALIGNMENT_REQUIRED for MIPS, so default to 1 + * out of paranoia. + */ +#define _ALIGNMENT_REQUIRED 1 + +#else +/* + * Currently supported: + * x86_64, i386, arm, powerpc, s390, sparc, and mips + */ +#error "Unsupported ISA type" +#endif + +#if defined(_ILP32) && defined(_LP64) +#error "Both _ILP32 and _LP64 are defined" +#endif + +#if !defined(_ILP32) && !defined(_LP64) +#error "Neither _ILP32 or _LP64 are defined" +#endif + +#include + +#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN) +#define _LITTLE_ENDIAN __LITTLE_ENDIAN +#endif + +#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN) +#define _BIG_ENDIAN __BIG_ENDIAN +#endif + +#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined" +#endif + +#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +#error "Neither _LITTLE_ENDIAN or _BIG_ENDIAN are defined" +#endif + +#endif /* _SPL_ISA_DEFS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/kidmap.h +++ linux-aws-4.15.0/spl/include/sys/kidmap.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_KIDMAP_H +#define _SPL_KIDMAP_H + +#include + +#endif /* SPL_KIDMAP_H */ --- linux-aws-4.15.0.orig/spl/include/sys/kmem.h +++ linux-aws-4.15.0/spl/include/sys/kmem.h @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_KMEM_H +#define _SPL_KMEM_H + +#include +#include +#include + +extern int kmem_debugging(void); +extern char *kmem_vasprintf(const char *fmt, va_list ap); +extern char *kmem_asprintf(const char *fmt, ...); +extern char *strdup(const char *str); +extern void strfree(char *str); + +/* + * Memory allocation interfaces + */ +#define KM_SLEEP 0x0000 /* can block for memory; success guaranteed */ +#define KM_NOSLEEP 0x0001 /* cannot block for memory; may fail */ +#define KM_PUSHPAGE 0x0004 /* can block for memory; may use reserve */ +#define KM_ZERO 0x1000 /* zero the allocation */ +#define KM_VMEM 0x2000 /* caller is vmem_* wrapper */ + +#define KM_PUBLIC_MASK (KM_SLEEP | KM_NOSLEEP | KM_PUSHPAGE) + +static int spl_fstrans_check(void); + +/* + * Convert a KM_* flags mask to its Linux GFP_* counterpart. The conversion + * function is context aware which means that KM_SLEEP allocations can be + * safely used in syncing contexts which have set PF_FSTRANS. + */ +static inline gfp_t +kmem_flags_convert(int flags) +{ + gfp_t lflags = __GFP_NOWARN | __GFP_COMP; + + if (flags & KM_NOSLEEP) { + lflags |= GFP_ATOMIC | __GFP_NORETRY; + } else { + lflags |= GFP_KERNEL; + if (spl_fstrans_check()) + lflags &= ~(__GFP_IO|__GFP_FS); + } + + if (flags & KM_PUSHPAGE) + lflags |= __GFP_HIGH; + + if (flags & KM_ZERO) + lflags |= __GFP_ZERO; + + return (lflags); +} + +typedef struct { + struct task_struct *fstrans_thread; + unsigned int saved_flags; +} fstrans_cookie_t; + +/* + * Introduced in Linux 3.9, however this cannot be solely relied on before + * Linux 3.18 as it doesn't turn off __GFP_FS as it should. + */ +#ifdef PF_MEMALLOC_NOIO +#define __SPL_PF_MEMALLOC_NOIO (PF_MEMALLOC_NOIO) +#else +#define __SPL_PF_MEMALLOC_NOIO (0) +#endif + +/* + * PF_FSTRANS is removed from Linux 4.12 + */ +#ifdef PF_FSTRANS +#define __SPL_PF_FSTRANS (PF_FSTRANS) +#else +#define __SPL_PF_FSTRANS (0) +#endif + +#define SPL_FSTRANS (__SPL_PF_FSTRANS|__SPL_PF_MEMALLOC_NOIO) + +static inline fstrans_cookie_t +spl_fstrans_mark(void) +{ + fstrans_cookie_t cookie; + + BUILD_BUG_ON(SPL_FSTRANS == 0); + + cookie.fstrans_thread = current; + cookie.saved_flags = current->flags & SPL_FSTRANS; + current->flags |= SPL_FSTRANS; + + return (cookie); +} + +static inline void +spl_fstrans_unmark(fstrans_cookie_t cookie) +{ + ASSERT3P(cookie.fstrans_thread, ==, current); + ASSERT((current->flags & SPL_FSTRANS) == SPL_FSTRANS); + + current->flags &= ~SPL_FSTRANS; + current->flags |= cookie.saved_flags; +} + +static inline int +spl_fstrans_check(void) +{ + return (current->flags & SPL_FSTRANS); +} + +/* + * specifically used to check PF_FSTRANS flag, cannot be relied on for + * checking spl_fstrans_mark(). + */ +static inline int +__spl_pf_fstrans_check(void) +{ + return (current->flags & __SPL_PF_FSTRANS); +} + +#ifdef HAVE_ATOMIC64_T +#define kmem_alloc_used_add(size) atomic64_add(size, &kmem_alloc_used) +#define kmem_alloc_used_sub(size) atomic64_sub(size, &kmem_alloc_used) +#define kmem_alloc_used_read() atomic64_read(&kmem_alloc_used) +#define kmem_alloc_used_set(size) atomic64_set(&kmem_alloc_used, size) +extern atomic64_t kmem_alloc_used; +extern unsigned long long kmem_alloc_max; +#else /* HAVE_ATOMIC64_T */ +#define kmem_alloc_used_add(size) atomic_add(size, &kmem_alloc_used) +#define kmem_alloc_used_sub(size) atomic_sub(size, &kmem_alloc_used) +#define kmem_alloc_used_read() atomic_read(&kmem_alloc_used) +#define kmem_alloc_used_set(size) atomic_set(&kmem_alloc_used, size) +extern atomic_t kmem_alloc_used; +extern unsigned long long kmem_alloc_max; +#endif /* HAVE_ATOMIC64_T */ + +extern unsigned int spl_kmem_alloc_warn; +extern unsigned int spl_kmem_alloc_max; + +#define kmem_alloc(sz, fl) spl_kmem_alloc((sz), (fl), __func__, __LINE__) +#define kmem_zalloc(sz, fl) spl_kmem_zalloc((sz), (fl), __func__, __LINE__) +#define kmem_free(ptr, sz) spl_kmem_free((ptr), (sz)) + +extern void *spl_kmem_alloc(size_t sz, int fl, const char *func, int line); +extern void *spl_kmem_zalloc(size_t sz, int fl, const char *func, int line); +extern void spl_kmem_free(const void *ptr, size_t sz); + +/* + * The following functions are only available for internal use. + */ +extern void *spl_kmem_alloc_impl(size_t size, int flags, int node); +extern void *spl_kmem_alloc_debug(size_t size, int flags, int node); +extern void *spl_kmem_alloc_track(size_t size, int flags, + const char *func, int line, int node); +extern void spl_kmem_free_impl(const void *buf, size_t size); +extern void spl_kmem_free_debug(const void *buf, size_t size); +extern void spl_kmem_free_track(const void *buf, size_t size); + +extern int spl_kmem_init(void); +extern void spl_kmem_fini(void); + +#endif /* _SPL_KMEM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/kmem_cache.h +++ linux-aws-4.15.0/spl/include/sys/kmem_cache.h @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_KMEM_CACHE_H +#define _SPL_KMEM_CACHE_H + +#include + +/* + * Slab allocation interfaces. The SPL slab differs from the standard + * Linux SLAB or SLUB primarily in that each cache may be backed by slabs + * allocated from the physical or virtal memory address space. The virtual + * slabs allow for good behavior when allocation large objects of identical + * size. This slab implementation also supports both constructors and + * destructors which the Linux slab does not. + */ +enum { + KMC_BIT_NOTOUCH = 0, /* Don't update ages */ + KMC_BIT_NODEBUG = 1, /* Default behavior */ + KMC_BIT_NOMAGAZINE = 2, /* XXX: Unsupported */ + KMC_BIT_NOHASH = 3, /* XXX: Unsupported */ + KMC_BIT_QCACHE = 4, /* XXX: Unsupported */ + KMC_BIT_KMEM = 5, /* Use kmem cache */ + KMC_BIT_VMEM = 6, /* Use vmem cache */ + KMC_BIT_SLAB = 7, /* Use Linux slab cache */ + KMC_BIT_OFFSLAB = 8, /* Objects not on slab */ + KMC_BIT_NOEMERGENCY = 9, /* Disable emergency objects */ + KMC_BIT_DEADLOCKED = 14, /* Deadlock detected */ + KMC_BIT_GROWING = 15, /* Growing in progress */ + KMC_BIT_REAPING = 16, /* Reaping in progress */ + KMC_BIT_DESTROY = 17, /* Destroy in progress */ + KMC_BIT_TOTAL = 18, /* Proc handler helper bit */ + KMC_BIT_ALLOC = 19, /* Proc handler helper bit */ + KMC_BIT_MAX = 20, /* Proc handler helper bit */ +}; + +/* kmem move callback return values */ +typedef enum kmem_cbrc { + KMEM_CBRC_YES = 0, /* Object moved */ + KMEM_CBRC_NO = 1, /* Object not moved */ + KMEM_CBRC_LATER = 2, /* Object not moved, try again later */ + KMEM_CBRC_DONT_NEED = 3, /* Neither object is needed */ + KMEM_CBRC_DONT_KNOW = 4, /* Object unknown */ +} kmem_cbrc_t; + +#define KMC_NOTOUCH (1 << KMC_BIT_NOTOUCH) +#define KMC_NODEBUG (1 << KMC_BIT_NODEBUG) +#define KMC_NOMAGAZINE (1 << KMC_BIT_NOMAGAZINE) +#define KMC_NOHASH (1 << KMC_BIT_NOHASH) +#define KMC_QCACHE (1 << KMC_BIT_QCACHE) +#define KMC_KMEM (1 << KMC_BIT_KMEM) +#define KMC_VMEM (1 << KMC_BIT_VMEM) +#define KMC_SLAB (1 << KMC_BIT_SLAB) +#define KMC_OFFSLAB (1 << KMC_BIT_OFFSLAB) +#define KMC_NOEMERGENCY (1 << KMC_BIT_NOEMERGENCY) +#define KMC_DEADLOCKED (1 << KMC_BIT_DEADLOCKED) +#define KMC_GROWING (1 << KMC_BIT_GROWING) +#define KMC_REAPING (1 << KMC_BIT_REAPING) +#define KMC_DESTROY (1 << KMC_BIT_DESTROY) +#define KMC_TOTAL (1 << KMC_BIT_TOTAL) +#define KMC_ALLOC (1 << KMC_BIT_ALLOC) +#define KMC_MAX (1 << KMC_BIT_MAX) + +#define KMC_REAP_CHUNK INT_MAX +#define KMC_DEFAULT_SEEKS 1 + +#define KMC_EXPIRE_AGE 0x1 /* Due to age */ +#define KMC_EXPIRE_MEM 0x2 /* Due to low memory */ + +#define KMC_RECLAIM_ONCE 0x1 /* Force a single shrinker pass */ + +extern unsigned int spl_kmem_cache_expire; +extern struct list_head spl_kmem_cache_list; +extern struct rw_semaphore spl_kmem_cache_sem; + +#define SKM_MAGIC 0x2e2e2e2e +#define SKO_MAGIC 0x20202020 +#define SKS_MAGIC 0x22222222 +#define SKC_MAGIC 0x2c2c2c2c + +#define SPL_KMEM_CACHE_DELAY 15 /* Minimum slab release age */ +#define SPL_KMEM_CACHE_REAP 0 /* Default reap everything */ +#define SPL_KMEM_CACHE_OBJ_PER_SLAB 8 /* Target objects per slab */ +#define SPL_KMEM_CACHE_OBJ_PER_SLAB_MIN 1 /* Minimum objects per slab */ +#define SPL_KMEM_CACHE_ALIGN 8 /* Default object alignment */ +#ifdef _LP64 +#define SPL_KMEM_CACHE_MAX_SIZE 32 /* Max slab size in MB */ +#else +#define SPL_KMEM_CACHE_MAX_SIZE 4 /* Max slab size in MB */ +#endif + +#define SPL_MAX_ORDER (MAX_ORDER - 3) +#define SPL_MAX_ORDER_NR_PAGES (1 << (SPL_MAX_ORDER - 1)) + +#ifdef CONFIG_SLUB +#define SPL_MAX_KMEM_CACHE_ORDER PAGE_ALLOC_COSTLY_ORDER +#define SPL_MAX_KMEM_ORDER_NR_PAGES (1 << (SPL_MAX_KMEM_CACHE_ORDER - 1)) +#else +#define SPL_MAX_KMEM_ORDER_NR_PAGES (KMALLOC_MAX_SIZE >> PAGE_SHIFT) +#endif + +#define POINTER_IS_VALID(p) 0 /* Unimplemented */ +#define POINTER_INVALIDATE(pp) /* Unimplemented */ + +typedef int (*spl_kmem_ctor_t)(void *, void *, int); +typedef void (*spl_kmem_dtor_t)(void *, void *); +typedef void (*spl_kmem_reclaim_t)(void *); + +typedef struct spl_kmem_magazine { + uint32_t skm_magic; /* Sanity magic */ + uint32_t skm_avail; /* Available objects */ + uint32_t skm_size; /* Magazine size */ + uint32_t skm_refill; /* Batch refill size */ + struct spl_kmem_cache *skm_cache; /* Owned by cache */ + unsigned long skm_age; /* Last cache access */ + unsigned int skm_cpu; /* Owned by cpu */ + void *skm_objs[0]; /* Object pointers */ +} spl_kmem_magazine_t; + +typedef struct spl_kmem_obj { + uint32_t sko_magic; /* Sanity magic */ + void *sko_addr; /* Buffer address */ + struct spl_kmem_slab *sko_slab; /* Owned by slab */ + struct list_head sko_list; /* Free object list linkage */ +} spl_kmem_obj_t; + +typedef struct spl_kmem_slab { + uint32_t sks_magic; /* Sanity magic */ + uint32_t sks_objs; /* Objects per slab */ + struct spl_kmem_cache *sks_cache; /* Owned by cache */ + struct list_head sks_list; /* Slab list linkage */ + struct list_head sks_free_list; /* Free object list */ + unsigned long sks_age; /* Last modify jiffie */ + uint32_t sks_ref; /* Ref count used objects */ +} spl_kmem_slab_t; + +typedef struct spl_kmem_alloc { + struct spl_kmem_cache *ska_cache; /* Owned by cache */ + int ska_flags; /* Allocation flags */ + taskq_ent_t ska_tqe; /* Task queue entry */ +} spl_kmem_alloc_t; + +typedef struct spl_kmem_emergency { + struct rb_node ske_node; /* Emergency tree linkage */ + unsigned long ske_obj; /* Buffer address */ +} spl_kmem_emergency_t; + +typedef struct spl_kmem_cache { + uint32_t skc_magic; /* Sanity magic */ + uint32_t skc_name_size; /* Name length */ + char *skc_name; /* Name string */ + spl_kmem_magazine_t **skc_mag; /* Per-CPU warm cache */ + uint32_t skc_mag_size; /* Magazine size */ + uint32_t skc_mag_refill; /* Magazine refill count */ + spl_kmem_ctor_t skc_ctor; /* Constructor */ + spl_kmem_dtor_t skc_dtor; /* Destructor */ + spl_kmem_reclaim_t skc_reclaim; /* Reclaimator */ + void *skc_private; /* Private data */ + void *skc_vmp; /* Unused */ + struct kmem_cache *skc_linux_cache; /* Linux slab cache if used */ + unsigned long skc_flags; /* Flags */ + uint32_t skc_obj_size; /* Object size */ + uint32_t skc_obj_align; /* Object alignment */ + uint32_t skc_slab_objs; /* Objects per slab */ + uint32_t skc_slab_size; /* Slab size */ + uint32_t skc_delay; /* Slab reclaim interval */ + uint32_t skc_reap; /* Slab reclaim count */ + atomic_t skc_ref; /* Ref count callers */ + taskqid_t skc_taskqid; /* Slab reclaim task */ + struct list_head skc_list; /* List of caches linkage */ + struct list_head skc_complete_list; /* Completely alloc'ed */ + struct list_head skc_partial_list; /* Partially alloc'ed */ + struct rb_root skc_emergency_tree; /* Min sized objects */ + spinlock_t skc_lock; /* Cache lock */ + spl_wait_queue_head_t skc_waitq; /* Allocation waiters */ + uint64_t skc_slab_fail; /* Slab alloc failures */ + uint64_t skc_slab_create; /* Slab creates */ + uint64_t skc_slab_destroy; /* Slab destroys */ + uint64_t skc_slab_total; /* Slab total current */ + uint64_t skc_slab_alloc; /* Slab alloc current */ + uint64_t skc_slab_max; /* Slab max historic */ + uint64_t skc_obj_total; /* Obj total current */ + uint64_t skc_obj_alloc; /* Obj alloc current */ + uint64_t skc_obj_max; /* Obj max historic */ + uint64_t skc_obj_deadlock; /* Obj emergency deadlocks */ + uint64_t skc_obj_emergency; /* Obj emergency current */ + uint64_t skc_obj_emergency_max; /* Obj emergency max */ +} spl_kmem_cache_t; +#define kmem_cache_t spl_kmem_cache_t + +extern spl_kmem_cache_t *spl_kmem_cache_create(char *name, size_t size, + size_t align, spl_kmem_ctor_t ctor, spl_kmem_dtor_t dtor, + spl_kmem_reclaim_t reclaim, void *priv, void *vmp, int flags); +extern void spl_kmem_cache_set_move(spl_kmem_cache_t *, + kmem_cbrc_t (*)(void *, void *, size_t, void *)); +extern void spl_kmem_cache_destroy(spl_kmem_cache_t *skc); +extern void *spl_kmem_cache_alloc(spl_kmem_cache_t *skc, int flags); +extern void spl_kmem_cache_free(spl_kmem_cache_t *skc, void *obj); +extern void spl_kmem_cache_set_allocflags(spl_kmem_cache_t *skc, gfp_t flags); +extern void spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count); +extern void spl_kmem_reap(void); + +#define kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl) \ + spl_kmem_cache_create(name, size, align, ctor, dtor, rclm, priv, vmp, fl) +#define kmem_cache_set_move(skc, move) spl_kmem_cache_set_move(skc, move) +#define kmem_cache_destroy(skc) spl_kmem_cache_destroy(skc) +#define kmem_cache_alloc(skc, flags) spl_kmem_cache_alloc(skc, flags) +#define kmem_cache_free(skc, obj) spl_kmem_cache_free(skc, obj) +#define kmem_cache_reap_now(skc) \ + spl_kmem_cache_reap_now(skc, skc->skc_reap) +#define kmem_reap() spl_kmem_reap() + +/* + * The following functions are only available for internal use. + */ +extern int spl_kmem_cache_init(void); +extern void spl_kmem_cache_fini(void); + +#endif /* _SPL_KMEM_CACHE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/kobj.h +++ linux-aws-4.15.0/spl/include/sys/kobj.h @@ -0,0 +1,42 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_KOBJ_H +#define _SPL_KOBJ_H + +#include + +typedef struct _buf { + vnode_t *vp; +} _buf_t; + +typedef struct _buf buf_t; + +extern struct _buf *kobj_open_file(const char *name); +extern void kobj_close_file(struct _buf *file); +extern int kobj_read_file(struct _buf *file, char *buf, unsigned size, + unsigned off); +extern int kobj_get_filesize(struct _buf *file, uint64_t *size); + +#endif /* SPL_KOBJ_H */ --- linux-aws-4.15.0.orig/spl/include/sys/kstat.h +++ linux-aws-4.15.0/spl/include/sys/kstat.h @@ -0,0 +1,202 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_KSTAT_H +#define _SPL_KSTAT_H + +#include +#include +#include +#include +#include +#include + +#define KSTAT_STRLEN 31 +#define KSTAT_RAW_MAX (128*1024) + +/* For reference valid classes are: + * disk, tape, net, controller, vm, kvm, hat, streams, kstat, misc + */ + +#define KSTAT_TYPE_RAW 0 /* can be anything; ks_ndata >= 1 */ +#define KSTAT_TYPE_NAMED 1 /* name/value pair; ks_ndata >= 1 */ +#define KSTAT_TYPE_INTR 2 /* interrupt stats; ks_ndata == 1 */ +#define KSTAT_TYPE_IO 3 /* I/O stats; ks_ndata == 1 */ +#define KSTAT_TYPE_TIMER 4 /* event timer; ks_ndata >= 1 */ +#define KSTAT_NUM_TYPES 5 + +#define KSTAT_DATA_CHAR 0 +#define KSTAT_DATA_INT32 1 +#define KSTAT_DATA_UINT32 2 +#define KSTAT_DATA_INT64 3 +#define KSTAT_DATA_UINT64 4 +#define KSTAT_DATA_LONG 5 +#define KSTAT_DATA_ULONG 6 +#define KSTAT_DATA_STRING 7 +#define KSTAT_NUM_DATAS 8 + +#define KSTAT_INTR_HARD 0 +#define KSTAT_INTR_SOFT 1 +#define KSTAT_INTR_WATCHDOG 2 +#define KSTAT_INTR_SPURIOUS 3 +#define KSTAT_INTR_MULTSVC 4 +#define KSTAT_NUM_INTRS 5 + +#define KSTAT_FLAG_VIRTUAL 0x01 +#define KSTAT_FLAG_VAR_SIZE 0x02 +#define KSTAT_FLAG_WRITABLE 0x04 +#define KSTAT_FLAG_PERSISTENT 0x08 +#define KSTAT_FLAG_DORMANT 0x10 +#define KSTAT_FLAG_UNSUPPORTED (KSTAT_FLAG_VAR_SIZE | KSTAT_FLAG_WRITABLE | \ + KSTAT_FLAG_PERSISTENT | KSTAT_FLAG_DORMANT) + + +#define KS_MAGIC 0x9d9d9d9d + +/* Dynamic updates */ +#define KSTAT_READ 0 +#define KSTAT_WRITE 1 + +struct kstat_s; +typedef struct kstat_s kstat_t; + +typedef int kid_t; /* unique kstat id */ +typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */ + +typedef struct kstat_module { + char ksm_name[KSTAT_STRLEN+1]; /* module name */ + struct list_head ksm_module_list; /* module linkage */ + struct list_head ksm_kstat_list; /* list of kstat entries */ + struct proc_dir_entry *ksm_proc; /* proc entry */ +} kstat_module_t; + +typedef struct kstat_raw_ops { + int (*headers)(char *buf, size_t size); + int (*data)(char *buf, size_t size, void *data); + void *(*addr)(kstat_t *ksp, loff_t index); +} kstat_raw_ops_t; + +struct kstat_s { + int ks_magic; /* magic value */ + kid_t ks_kid; /* unique kstat ID */ + hrtime_t ks_crtime; /* creation time */ + hrtime_t ks_snaptime; /* last access time */ + char ks_module[KSTAT_STRLEN+1]; /* provider module name */ + int ks_instance; /* provider module instance */ + char ks_name[KSTAT_STRLEN+1]; /* kstat name */ + char ks_class[KSTAT_STRLEN+1]; /* kstat class */ + uchar_t ks_type; /* kstat data type */ + uchar_t ks_flags; /* kstat flags */ + void *ks_data; /* kstat type-specific data */ + uint_t ks_ndata; /* # of type-specific data records */ + size_t ks_data_size; /* size of kstat data section */ + struct proc_dir_entry *ks_proc; /* proc linkage */ + kstat_update_t *ks_update; /* dynamic updates */ + void *ks_private; /* private data */ + kmutex_t ks_private_lock; /* kstat private data lock */ + kmutex_t *ks_lock; /* kstat data lock */ + struct list_head ks_list; /* kstat linkage */ + kstat_module_t *ks_owner; /* kstat module linkage */ + kstat_raw_ops_t ks_raw_ops; /* ops table for raw type */ + char *ks_raw_buf; /* buf used for raw ops */ + size_t ks_raw_bufsize; /* size of raw ops buffer */ +}; + +typedef struct kstat_named_s { + char name[KSTAT_STRLEN]; /* name of counter */ + uchar_t data_type; /* data type */ + union { + char c[16]; /* 128-bit int */ + int32_t i32; /* 32-bit signed int */ + uint32_t ui32; /* 32-bit unsigned int */ + int64_t i64; /* 64-bit signed int */ + uint64_t ui64; /* 64-bit unsigned int */ + long l; /* native signed long */ + ulong_t ul; /* native unsigned long */ + struct { + union { + char *ptr; /* NULL-term string */ + char __pad[8]; /* 64-bit padding */ + } addr; + uint32_t len; /* # bytes for strlen + '\0' */ + } string; + } value; +} kstat_named_t; + +#define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr) +#define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len) + +typedef struct kstat_intr { + uint_t intrs[KSTAT_NUM_INTRS]; +} kstat_intr_t; + +typedef struct kstat_io { + u_longlong_t nread; /* number of bytes read */ + u_longlong_t nwritten; /* number of bytes written */ + uint_t reads; /* number of read operations */ + uint_t writes; /* number of write operations */ + hrtime_t wtime; /* cumulative wait (pre-service) time */ + hrtime_t wlentime; /* cumulative wait length*time product*/ + hrtime_t wlastupdate; /* last time wait queue changed */ + hrtime_t rtime; /* cumulative run (service) time */ + hrtime_t rlentime; /* cumulative run length*time product */ + hrtime_t rlastupdate; /* last time run queue changed */ + uint_t wcnt; /* count of elements in wait state */ + uint_t rcnt; /* count of elements in run state */ +} kstat_io_t; + +typedef struct kstat_timer { + char name[KSTAT_STRLEN+1]; /* event name */ + u_longlong_t num_events; /* number of events */ + hrtime_t elapsed_time; /* cumulative elapsed time */ + hrtime_t min_time; /* shortest event duration */ + hrtime_t max_time; /* longest event duration */ + hrtime_t start_time; /* previous event start time */ + hrtime_t stop_time; /* previous event stop time */ +} kstat_timer_t; + +int spl_kstat_init(void); +void spl_kstat_fini(void); + +extern void __kstat_set_raw_ops(kstat_t *ksp, + int (*headers)(char *buf, size_t size), + int (*data)(char *buf, size_t size, void *data), + void* (*addr)(kstat_t *ksp, loff_t index)); +extern kstat_t *__kstat_create(const char *ks_module, int ks_instance, + const char *ks_name, const char *ks_class, + uchar_t ks_type, uint_t ks_ndata, + uchar_t ks_flags); +extern void __kstat_install(kstat_t *ksp); +extern void __kstat_delete(kstat_t *ksp); +extern void kstat_waitq_enter(kstat_io_t *); +extern void kstat_waitq_exit(kstat_io_t *); +extern void kstat_runq_enter(kstat_io_t *); +extern void kstat_runq_exit(kstat_io_t *); + +#define kstat_set_raw_ops(k,h,d,a) __kstat_set_raw_ops(k,h,d,a) +#define kstat_create(m,i,n,c,t,s,f) __kstat_create(m,i,n,c,t,s,f) +#define kstat_install(k) __kstat_install(k) +#define kstat_delete(k) __kstat_delete(k) + +#endif /* _SPL_KSTAT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/list.h +++ linux-aws-4.15.0/spl/include/sys/list.h @@ -0,0 +1,219 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_LIST_H +#define _SPL_LIST_H + +#include +#include + +/* + * NOTE: I have implemented the Solaris list API in terms of the native + * linux API. This has certain advantages in terms of leveraging the linux + * list debugging infrastructure, but it also means that the internals of a + * list differ slightly than on Solaris. This is not a problem as long as + * all callers stick to the published API. The two major differences are: + * + * 1) A list_node_t is mapped to a linux list_head struct which changes + * the name of the list_next/list_prev pointers to next/prev respectively. + * + * 2) A list_node_t which is not attached to a list on Solaris is denoted + * by having its list_next/list_prev pointers set to NULL. Under linux + * the next/prev pointers are set to LIST_POISON1 and LIST_POISON2 + * respectively. At this moment this only impacts the implementation + * of the list_link_init() and list_link_active() functions. + */ + +typedef struct list_head list_node_t; + +typedef struct list { + size_t list_size; + size_t list_offset; + list_node_t list_head; +} list_t; + +#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset)) +#define list_object(a, node) ((void *)(((char *)node) - (a)->list_offset)) + +static inline int +list_is_empty(list_t *list) +{ + return list_empty(&list->list_head); +} + +static inline void +list_link_init(list_node_t *node) +{ + node->next = LIST_POISON1; + node->prev = LIST_POISON2; +} + +static inline void +list_create(list_t *list, size_t size, size_t offset) +{ + ASSERT(list); + ASSERT(size > 0); + ASSERT(size >= offset + sizeof(list_node_t)); + + list->list_size = size; + list->list_offset = offset; + INIT_LIST_HEAD(&list->list_head); +} + +static inline void +list_destroy(list_t *list) +{ + ASSERT(list); + ASSERT(list_is_empty(list)); + + list_del(&list->list_head); +} + +static inline void +list_insert_head(list_t *list, void *object) +{ + list_add(list_d2l(list, object), &list->list_head); +} + +static inline void +list_insert_tail(list_t *list, void *object) +{ + list_add_tail(list_d2l(list, object), &list->list_head); +} + +static inline void +list_insert_after(list_t *list, void *object, void *nobject) +{ + if (object == NULL) + list_insert_head(list, nobject); + else + list_add(list_d2l(list, nobject), list_d2l(list, object)); +} + +static inline void +list_insert_before(list_t *list, void *object, void *nobject) +{ + if (object == NULL) + list_insert_tail(list, nobject); + else + list_add_tail(list_d2l(list, nobject), list_d2l(list, object)); +} + +static inline void +list_remove(list_t *list, void *object) +{ + ASSERT(!list_is_empty(list)); + list_del(list_d2l(list, object)); +} + +static inline void * +list_remove_head(list_t *list) +{ + list_node_t *head = list->list_head.next; + if (head == &list->list_head) + return NULL; + + list_del(head); + return list_object(list, head); +} + +static inline void * +list_remove_tail(list_t *list) +{ + list_node_t *tail = list->list_head.prev; + if (tail == &list->list_head) + return NULL; + + list_del(tail); + return list_object(list, tail); +} + +static inline void * +list_head(list_t *list) +{ + if (list_is_empty(list)) + return NULL; + + return list_object(list, list->list_head.next); +} + +static inline void * +list_tail(list_t *list) +{ + if (list_is_empty(list)) + return NULL; + + return list_object(list, list->list_head.prev); +} + +static inline void * +list_next(list_t *list, void *object) +{ + list_node_t *node = list_d2l(list, object); + + if (node->next != &list->list_head) + return list_object(list, node->next); + + return NULL; +} + +static inline void * +list_prev(list_t *list, void *object) +{ + list_node_t *node = list_d2l(list, object); + + if (node->prev != &list->list_head) + return list_object(list, node->prev); + + return NULL; +} + +static inline int +list_link_active(list_node_t *node) +{ + return (node->next != LIST_POISON1) && (node->prev != LIST_POISON2); +} + +static inline void +spl_list_move_tail(list_t *dst, list_t *src) +{ + list_splice_init(&src->list_head, dst->list_head.prev); +} + +#define list_move_tail(dst, src) spl_list_move_tail(dst, src) + +static inline void +list_link_replace(list_node_t *old_node, list_node_t *new_node) +{ + ASSERT(list_link_active(old_node)); + ASSERT(!list_link_active(new_node)); + + new_node->next = old_node->next; + new_node->prev = old_node->prev; + old_node->prev->next = new_node; + old_node->next->prev = new_node; + list_link_init(old_node); +} + +#endif /* SPL_LIST_H */ --- linux-aws-4.15.0.orig/spl/include/sys/mkdev.h +++ linux-aws-4.15.0/spl/include/sys/mkdev.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MKDEV_H +#define _SPL_MKDEV_H + +#endif /* SPL_MKDEV_H */ --- linux-aws-4.15.0.orig/spl/include/sys/mntent.h +++ linux-aws-4.15.0/spl/include/sys/mntent.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MNTENT_H +#define _SPL_MNTENT_H + +#endif /* SPL_MNTENT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/modctl.h +++ linux-aws-4.15.0/spl/include/sys/modctl.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MODCTL_H +#define _SPL_MODCTL_H + +#endif /* SPL_MODCTL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/mode.h +++ linux-aws-4.15.0/spl/include/sys/mode.h @@ -0,0 +1,32 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MODE_H +#define _SPL_MODE_H + +#define IFTOVT(mode) vn_mode_to_vtype(mode) +#define VTTOIF(vtype) vn_vtype_to_mode(vtype) +#define MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT)) + +#endif /* SPL_MODE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/mount.h +++ linux-aws-4.15.0/spl/include/sys/mount.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_MOUNT_H +#define _SPL_MOUNT_H + +#endif /* SPL_MOUNT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/mutex.h +++ linux-aws-4.15.0/spl/include/sys/mutex.h @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_MUTEX_H +#define _SPL_MUTEX_H + +#include +#include +#include +#include + +typedef enum { + MUTEX_DEFAULT = 0, + MUTEX_SPIN = 1, + MUTEX_ADAPTIVE = 2, + MUTEX_NOLOCKDEP = 3 +} kmutex_type_t; + +typedef struct { + struct mutex m_mutex; + spinlock_t m_lock; /* used for serializing mutex_exit */ + kthread_t *m_owner; +#ifdef CONFIG_LOCKDEP + kmutex_type_t m_type; +#endif /* CONFIG_LOCKDEP */ +} kmutex_t; + +#define MUTEX(mp) (&((mp)->m_mutex)) + +static inline void +spl_mutex_set_owner(kmutex_t *mp) +{ + mp->m_owner = current; +} + +static inline void +spl_mutex_clear_owner(kmutex_t *mp) +{ + mp->m_owner = NULL; +} + +#define mutex_owner(mp) (ACCESS_ONCE((mp)->m_owner)) +#define mutex_owned(mp) (mutex_owner(mp) == current) +#define MUTEX_HELD(mp) mutex_owned(mp) +#define MUTEX_NOT_HELD(mp) (!MUTEX_HELD(mp)) + +#ifdef CONFIG_LOCKDEP +static inline void +spl_mutex_set_type(kmutex_t *mp, kmutex_type_t type) +{ + mp->m_type = type; +} +static inline void +spl_mutex_lockdep_off_maybe(kmutex_t *mp) \ +{ \ + if (mp && mp->m_type == MUTEX_NOLOCKDEP) \ + lockdep_off(); \ +} +static inline void +spl_mutex_lockdep_on_maybe(kmutex_t *mp) \ +{ \ + if (mp && mp->m_type == MUTEX_NOLOCKDEP) \ + lockdep_on(); \ +} +#else /* CONFIG_LOCKDEP */ +#define spl_mutex_set_type(mp, type) +#define spl_mutex_lockdep_off_maybe(mp) +#define spl_mutex_lockdep_on_maybe(mp) +#endif /* CONFIG_LOCKDEP */ + +/* + * The following functions must be a #define and not static inline. + * This ensures that the native linux mutex functions (lock/unlock) + * will be correctly located in the users code which is important + * for the built in kernel lock analysis tools + */ +#undef mutex_init +#define mutex_init(mp, name, type, ibc) \ +{ \ + static struct lock_class_key __key; \ + ASSERT(type == MUTEX_DEFAULT || type == MUTEX_NOLOCKDEP); \ + \ + __mutex_init(MUTEX(mp), (name) ? (#name) : (#mp), &__key); \ + spin_lock_init(&(mp)->m_lock); \ + spl_mutex_clear_owner(mp); \ + spl_mutex_set_type(mp, type); \ +} + +#undef mutex_destroy +#define mutex_destroy(mp) \ +{ \ + VERIFY3P(mutex_owner(mp), ==, NULL); \ +} + +#define mutex_tryenter(mp) \ +({ \ + int _rc_; \ + \ + spl_mutex_lockdep_off_maybe(mp); \ + if ((_rc_ = mutex_trylock(MUTEX(mp))) == 1) \ + spl_mutex_set_owner(mp); \ + spl_mutex_lockdep_on_maybe(mp); \ + \ + _rc_; \ +}) + +#ifdef CONFIG_DEBUG_LOCK_ALLOC +#define mutex_enter_nested(mp, subclass) \ +{ \ + ASSERT3P(mutex_owner(mp), !=, current); \ + spl_mutex_lockdep_off_maybe(mp); \ + mutex_lock_nested(MUTEX(mp), (subclass)); \ + spl_mutex_lockdep_on_maybe(mp); \ + spl_mutex_set_owner(mp); \ +} +#else /* CONFIG_DEBUG_LOCK_ALLOC */ +#define mutex_enter_nested(mp, subclass) \ +{ \ + ASSERT3P(mutex_owner(mp), !=, current); \ + spl_mutex_lockdep_off_maybe(mp); \ + mutex_lock(MUTEX(mp)); \ + spl_mutex_lockdep_on_maybe(mp); \ + spl_mutex_set_owner(mp); \ +} +#endif /* CONFIG_DEBUG_LOCK_ALLOC */ + +#define mutex_enter(mp) mutex_enter_nested((mp), 0) + +/* + * The reason for the spinlock: + * + * The Linux mutex is designed with a fast-path/slow-path design such that it + * does not guarantee serialization upon itself, allowing a race where latter + * acquirers finish mutex_unlock before former ones. + * + * The race renders it unsafe to be used for serializing the freeing of an + * object in which the mutex is embedded, where the latter acquirer could go + * on to free the object while the former one is still doing mutex_unlock and + * causing memory corruption. + * + * However, there are many places in ZFS where the mutex is used for + * serializing object freeing, and the code is shared among other OSes without + * this issue. Thus, we need the spinlock to force the serialization on + * mutex_exit(). + * + * See http://lwn.net/Articles/575477/ for the information about the race. + */ +#define mutex_exit(mp) \ +{ \ + spl_mutex_clear_owner(mp); \ + spin_lock(&(mp)->m_lock); \ + spl_mutex_lockdep_off_maybe(mp); \ + mutex_unlock(MUTEX(mp)); \ + spl_mutex_lockdep_on_maybe(mp); \ + spin_unlock(&(mp)->m_lock); \ + /* NOTE: do not dereference mp after this point */ \ +} + +int spl_mutex_init(void); +void spl_mutex_fini(void); + +#endif /* _SPL_MUTEX_H */ --- linux-aws-4.15.0.orig/spl/include/sys/note.h +++ linux-aws-4.15.0/spl/include/sys/note.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_NOTE_H +#define _SPL_NOTE_H + +#endif /* SPL_NOTE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/open.h +++ linux-aws-4.15.0/spl/include/sys/open.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_OPEN_H +#define _SPL_OPEN_H + +#endif /* SPL_OPEN_H */ --- linux-aws-4.15.0.orig/spl/include/sys/param.h +++ linux-aws-4.15.0/spl/include/sys/param.h @@ -0,0 +1,36 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PARAM_H +#define _SPL_PARAM_H + +#include + +/* Pages to bytes and back */ +#define ptob(pages) ((pages) << PAGE_SHIFT) +#define btop(bytes) ((bytes) >> PAGE_SHIFT) + +#define MAXUID UINT32_MAX + +#endif /* SPL_PARAM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/pathname.h +++ linux-aws-4.15.0/spl/include/sys/pathname.h @@ -0,0 +1,35 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PATHNAME_H +#define _SPL_PATHNAME_H + +typedef struct pathname { + char *pn_buf; /* underlying storage */ + char *pn_path; /* remaining pathname */ + size_t pn_pathlen; /* remaining length */ + size_t pn_bufsize; /* total size of pn_buf */ +} pathname_t; + +#endif /* SPL_PATHNAME_H */ --- linux-aws-4.15.0.orig/spl/include/sys/policy.h +++ linux-aws-4.15.0/spl/include/sys/policy.h @@ -0,0 +1,47 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_POLICY_H +#define _SPL_POLICY_H + +#define secpolicy_fs_unmount(c,vfs) (0) +#define secpolicy_nfs(c) (0) +#define secpolicy_sys_config(c,co) (0) +#define secpolicy_zfs(c) (0) +#define secpolicy_zinject(c) (0) +#define secpolicy_vnode_setids_setgids(c,id) (0) +#define secpolicy_vnode_setid_retain(c, sr) (0) +#define secpolicy_setid_clear(v, c) (0) +#define secpolicy_vnode_any_access(c,vp,o) (0) +#define secpolicy_vnode_access2(c,cp,o,m1,m2) (0) +#define secpolicy_vnode_chown(c,o) (0) +#define secpolicy_vnode_setdac(c,o) (0) +#define secpolicy_vnode_remove(c) (0) +#define secpolicy_vnode_setattr(c,v,a,o,f,func,n) (0) +#define secpolicy_xvattr(x, o, c, t) (0) +#define secpolicy_vnode_stky_modify(c) (0) +#define secpolicy_setid_setsticky_clear(v,a,o,c) (0) +#define secpolicy_basic_link(c) (0) + +#endif /* SPL_POLICY_H */ --- linux-aws-4.15.0.orig/spl/include/sys/pool.h +++ linux-aws-4.15.0/spl/include/sys/pool.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_POOL_H +#define _SPL_POOL_H + +#include + +#endif /* SPL_POOL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/priv_impl.h +++ linux-aws-4.15.0/spl/include/sys/priv_impl.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PRIV_IMPL_H +#define _SPL_PRIV_IMPL_H + +#endif /* _SPL_PRIV_IMPL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/proc.h +++ linux-aws-4.15.0/spl/include/sys/proc.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PROC_H +#define _SPL_PROC_H + +#endif /* SPL_PROC_H */ --- linux-aws-4.15.0.orig/spl/include/sys/processor.h +++ linux-aws-4.15.0/spl/include/sys/processor.h @@ -0,0 +1,32 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PROCESSOR_H +#define _SPL_PROCESSOR_H + +#define getcpuid() smp_processor_id() + +typedef int processorid_t; + +#endif /* _SPL_PROCESSOR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/pset.h +++ linux-aws-4.15.0/spl/include/sys/pset.h @@ -0,0 +1,38 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_PSET_H +#define _SPL_PSET_H + +typedef int psetid_t; + +/* special processor set id's */ +#define PS_NONE -1 +#define PS_QUERY -2 +#define PS_MYID -3 +#define PS_SOFT -4 +#define PS_HARD -5 +#define PS_QUERY_TYPE -6 + +#endif /* SPL_PSET_H */ --- linux-aws-4.15.0.orig/spl/include/sys/random.h +++ linux-aws-4.15.0/spl/include/sys/random.h @@ -0,0 +1,40 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RANDOM_H +#define _SPL_RANDOM_H + +#include +#include + +static __inline__ int +random_get_bytes(uint8_t *ptr, size_t len) +{ + get_random_bytes((void *)ptr,(int)len); + return 0; +} + +extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); + +#endif /* _SPL_RANDOM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/refstr.h +++ linux-aws-4.15.0/spl/include/sys/refstr.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_REFSTR_H +#define _SPL_REFSTR_H + +#endif /* SPL_REFSTR_H */ --- linux-aws-4.15.0.orig/spl/include/sys/resource.h +++ linux-aws-4.15.0/spl/include/sys/resource.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RESOURCE_H +#define _SPL_RESOURCE_H + +#include + +#endif /* SPL_RESOURCE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/rwlock.h +++ linux-aws-4.15.0/spl/include/sys/rwlock.h @@ -0,0 +1,234 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_RWLOCK_H +#define _SPL_RWLOCK_H + +#include +#include +#include + +typedef enum { + RW_DRIVER = 2, + RW_DEFAULT = 4, + RW_NOLOCKDEP = 5 +} krw_type_t; + +typedef enum { + RW_NONE = 0, + RW_WRITER = 1, + RW_READER = 2 +} krw_t; + +/* + * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, rw_semaphore will have an owner + * field, so we don't need our own. + */ +typedef struct { + struct rw_semaphore rw_rwlock; +#ifndef CONFIG_RWSEM_SPIN_ON_OWNER + kthread_t *rw_owner; +#endif +#ifdef CONFIG_LOCKDEP + krw_type_t rw_type; +#endif /* CONFIG_LOCKDEP */ +} krwlock_t; + +#define SEM(rwp) (&(rwp)->rw_rwlock) + +static inline void +spl_rw_set_owner(krwlock_t *rwp) +{ +/* + * If CONFIG_RWSEM_SPIN_ON_OWNER is defined, down_write, up_write, + * downgrade_write and __init_rwsem will set/clear owner for us. + */ +#ifndef CONFIG_RWSEM_SPIN_ON_OWNER + rwp->rw_owner = current; +#endif +} + +static inline void +spl_rw_clear_owner(krwlock_t *rwp) +{ +#ifndef CONFIG_RWSEM_SPIN_ON_OWNER + rwp->rw_owner = NULL; +#endif +} + +static inline kthread_t * +rw_owner(krwlock_t *rwp) +{ +#ifdef CONFIG_RWSEM_SPIN_ON_OWNER + return SEM(rwp)->owner; +#else + return rwp->rw_owner; +#endif +} + +#ifdef CONFIG_LOCKDEP +static inline void +spl_rw_set_type(krwlock_t *rwp, krw_type_t type) +{ + rwp->rw_type = type; +} +static inline void +spl_rw_lockdep_off_maybe(krwlock_t *rwp) \ +{ \ + if (rwp && rwp->rw_type == RW_NOLOCKDEP) \ + lockdep_off(); \ +} +static inline void +spl_rw_lockdep_on_maybe(krwlock_t *rwp) \ +{ \ + if (rwp && rwp->rw_type == RW_NOLOCKDEP) \ + lockdep_on(); \ +} +#else /* CONFIG_LOCKDEP */ +#define spl_rw_set_type(rwp, type) +#define spl_rw_lockdep_off_maybe(rwp) +#define spl_rw_lockdep_on_maybe(rwp) +#endif /* CONFIG_LOCKDEP */ + +static inline int +RW_READ_HELD(krwlock_t *rwp) +{ + /* + * Linux 4.8 will set owner to 1 when read held instead of leave it + * NULL. So we check whether owner <= 1. + */ + return (spl_rwsem_is_locked(SEM(rwp)) && + (unsigned long)rw_owner(rwp) <= 1); +} + +static inline int +RW_WRITE_HELD(krwlock_t *rwp) +{ + return (rw_owner(rwp) == current); +} + +static inline int +RW_LOCK_HELD(krwlock_t *rwp) +{ + return spl_rwsem_is_locked(SEM(rwp)); +} + +/* + * The following functions must be a #define and not static inline. + * This ensures that the native linux semaphore functions (down/up) + * will be correctly located in the users code which is important + * for the built in kernel lock analysis tools + */ +#define rw_init(rwp, name, type, arg) \ +({ \ + static struct lock_class_key __key; \ + ASSERT(type == RW_DEFAULT || type == RW_NOLOCKDEP); \ + \ + __init_rwsem(SEM(rwp), #rwp, &__key); \ + spl_rw_clear_owner(rwp); \ + spl_rw_set_type(rwp, type); \ +}) + +#define rw_destroy(rwp) \ +({ \ + VERIFY(!RW_LOCK_HELD(rwp)); \ +}) + +#define rw_tryenter(rwp, rw) \ +({ \ + int _rc_ = 0; \ + \ + spl_rw_lockdep_off_maybe(rwp); \ + switch (rw) { \ + case RW_READER: \ + _rc_ = down_read_trylock(SEM(rwp)); \ + break; \ + case RW_WRITER: \ + if ((_rc_ = down_write_trylock(SEM(rwp)))) \ + spl_rw_set_owner(rwp); \ + break; \ + default: \ + VERIFY(0); \ + } \ + spl_rw_lockdep_on_maybe(rwp); \ + _rc_; \ +}) + +#define rw_enter(rwp, rw) \ +({ \ + spl_rw_lockdep_off_maybe(rwp); \ + switch (rw) { \ + case RW_READER: \ + down_read(SEM(rwp)); \ + break; \ + case RW_WRITER: \ + down_write(SEM(rwp)); \ + spl_rw_set_owner(rwp); \ + break; \ + default: \ + VERIFY(0); \ + } \ + spl_rw_lockdep_on_maybe(rwp); \ +}) + +#define rw_exit(rwp) \ +({ \ + spl_rw_lockdep_off_maybe(rwp); \ + if (RW_WRITE_HELD(rwp)) { \ + spl_rw_clear_owner(rwp); \ + up_write(SEM(rwp)); \ + } else { \ + ASSERT(RW_READ_HELD(rwp)); \ + up_read(SEM(rwp)); \ + } \ + spl_rw_lockdep_on_maybe(rwp); \ +}) + +#define rw_downgrade(rwp) \ +({ \ + spl_rw_lockdep_off_maybe(rwp); \ + spl_rw_clear_owner(rwp); \ + downgrade_write(SEM(rwp)); \ + spl_rw_lockdep_on_maybe(rwp); \ +}) + +#define rw_tryupgrade(rwp) \ +({ \ + int _rc_ = 0; \ + \ + if (RW_WRITE_HELD(rwp)) { \ + _rc_ = 1; \ + } else { \ + spl_rw_lockdep_off_maybe(rwp); \ + if ((_rc_ = rwsem_tryupgrade(SEM(rwp)))) \ + spl_rw_set_owner(rwp); \ + spl_rw_lockdep_on_maybe(rwp); \ + } \ + _rc_; \ +}) + +int spl_rw_init(void); +void spl_rw_fini(void); + +#endif /* _SPL_RWLOCK_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sdt.h +++ linux-aws-4.15.0/spl/include/sys/sdt.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SDT_H +#define _SPL_SDT_H + +#define SET_ERROR(x) (x) + +#endif /* SPL_SDT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sid.h +++ linux-aws-4.15.0/spl/include/sys/sid.h @@ -0,0 +1,61 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SID_H +#define _SPL_SID_H + +typedef struct ksiddomain { + char *kd_name; +} ksiddomain_t; + +typedef enum ksid_index { + KSID_USER, + KSID_GROUP, + KSID_OWNER, + KSID_COUNT +} ksid_index_t; + +typedef int ksid_t; + +static inline ksiddomain_t * +ksid_lookupdomain(const char *dom) +{ + ksiddomain_t *kd; + int len = strlen(dom); + + kd = kmem_zalloc(sizeof(ksiddomain_t), KM_SLEEP); + kd->kd_name = kmem_zalloc(len + 1, KM_SLEEP); + memcpy(kd->kd_name, dom, len); + + return (kd); +} + +static inline void +ksiddomain_rele(ksiddomain_t *ksid) +{ + kmem_free(ksid->kd_name, strlen(ksid->kd_name) + 1); + kmem_free(ksid, sizeof(ksiddomain_t)); +} + +#endif /* _SPL_SID_H */ --- linux-aws-4.15.0.orig/spl/include/sys/signal.h +++ linux-aws-4.15.0/spl/include/sys/signal.h @@ -0,0 +1,54 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SIGNAL_H +#define _SPL_SIGNAL_H + +#include + +#ifdef HAVE_SCHED_SIGNAL_HEADER +#include +#endif + +#define FORREAL 0 /* Usual side-effects */ +#define JUSTLOOKING 1 /* Don't stop the process */ + +/* The "why" argument indicates the allowable side-effects of the call: + * + * FORREAL: Extract the next pending signal from p_sig into p_cursig; + * stop the process if a stop has been requested or if a traced signal + * is pending. + * + * JUSTLOOKING: Don't stop the process, just indicate whether or not + * a signal might be pending (FORREAL is needed to tell for sure). + */ +static __inline__ int +issig(int why) +{ + ASSERT(why == FORREAL || why == JUSTLOOKING); + + return signal_pending(current); +} + +#endif /* SPL_SIGNAL_H */ --- linux-aws-4.15.0.orig/spl/include/sys/stat.h +++ linux-aws-4.15.0/spl/include/sys/stat.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_STAT_H +#define _SPL_STAT_H + +#include + +#endif /* SPL_STAT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/stropts.h +++ linux-aws-4.15.0/spl/include/sys/stropts.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_STROPTS_H +#define _SPL_STROPTS_H + +#endif /* SPL_STROPTS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sunddi.h +++ linux-aws-4.15.0/spl/include/sys/sunddi.h @@ -0,0 +1,59 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SUNDDI_H +#define _SPL_SUNDDI_H + +#include +#include +#include +#include +#include +#include + +typedef int ddi_devid_t; + +#define DDI_DEV_T_NONE ((dev_t)-1) +#define DDI_DEV_T_ANY ((dev_t)-2) +#define DI_MAJOR_T_UNKNOWN ((major_t)0) + +#define DDI_PROP_DONTPASS 0x0001 +#define DDI_PROP_CANSLEEP 0x0002 + +#define DDI_SUCCESS 0 +#define DDI_FAILURE -1 + +#define ddi_prop_lookup_string(x1,x2,x3,x4,x5) (*x5 = NULL) +#define ddi_prop_free(x) (void)0 +#define ddi_root_node() (void)0 + +extern int ddi_strtoul(const char *, char **, int, unsigned long *); +extern int ddi_strtol(const char *, char **, int, long *); +extern int ddi_strtoull(const char *, char **, int, unsigned long long *); +extern int ddi_strtoll(const char *, char **, int, long long *); + +extern int ddi_copyin(const void *from, void *to, size_t len, int flags); +extern int ddi_copyout(const void *from, void *to, size_t len, int flags); + +#endif /* SPL_SUNDDI_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sunldi.h +++ linux-aws-4.15.0/spl/include/sys/sunldi.h @@ -0,0 +1,37 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SUNLDI_H +#define _SPL_SUNLDI_H + +#include +#include +#include +#include +#include +#include + +#define SECTOR_SIZE 512 + +#endif /* SPL_SUNLDI_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sysdc.h +++ linux-aws-4.15.0/spl/include/sys/sysdc.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSDC_H +#define _SPL_SYSDC_H + +#endif /* SPL_SYSDC_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sysevent.h +++ linux-aws-4.15.0/spl/include/sys/sysevent.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSEVENT_H +#define _SPL_SYSEVENT_H + +#endif /* _SPL_SYSEVENT_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sysevent/Makefile.am +++ linux-aws-4.15.0/spl/include/sys/sysevent/Makefile.am @@ -0,0 +1,13 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/sysevent +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/sys/sysevent/Makefile.in +++ linux-aws-4.15.0/spl/include/sys/sysevent/Makefile.in @@ -0,0 +1,622 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/sysevent +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/sys/sysevent +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/sysevent/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/sysevent/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/sys/sysevent/eventdefs.h +++ linux-aws-4.15.0/spl/include/sys/sysevent/eventdefs.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSEVENT_EVENTDEFS_H +#define _SPL_SYSEVENT_EVENTDEFS_H + +#endif /* _SPL_SYSEVENT_EVENTDEFS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/sysmacros.h +++ linux-aws-4.15.0/spl/include/sys/sysmacros.h @@ -0,0 +1,241 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSMACROS_H +#define _SPL_SYSMACROS_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_SCHED_RT_HEADER +#include +#endif + +#ifndef _KERNEL +#define _KERNEL __KERNEL__ +#endif + +#define FALSE 0 +#define TRUE 1 + +#define INT8_MAX (127) +#define INT8_MIN (-128) +#define UINT8_MAX (255) +#define UINT8_MIN (0) + +#define INT16_MAX (32767) +#define INT16_MIN (-32768) +#define UINT16_MAX (65535) +#define UINT16_MIN (0) + +#define INT32_MAX INT_MAX +#define INT32_MIN INT_MIN +#define UINT32_MAX UINT_MAX +#define UINT32_MIN UINT_MIN + +#define INT64_MAX LLONG_MAX +#define INT64_MIN LLONG_MIN +#define UINT64_MAX ULLONG_MAX +#define UINT64_MIN ULLONG_MIN + +#define NBBY 8 +#define ENOTSUP EOPNOTSUPP + +#define MAXMSGLEN 256 +#define MAXNAMELEN 256 +#define MAXPATHLEN PATH_MAX +#define MAXOFFSET_T LLONG_MAX +#define MAXBSIZE 8192 +#define DEV_BSIZE 512 +#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ + +#define proc_pageout NULL +#define curproc current +#define max_ncpus num_possible_cpus() +#define boot_ncpus num_online_cpus() +#define CPU_SEQID smp_processor_id() +#define _NOTE(x) +#define is_system_labeled() 0 + +#ifndef RLIM64_INFINITY +#define RLIM64_INFINITY (~0ULL) +#endif + +/* 0..MAX_PRIO-1: Process priority + * 0..MAX_RT_PRIO-1: RT priority tasks + * MAX_RT_PRIO..MAX_PRIO-1: SCHED_NORMAL tasks + * + * Treat shim tasks as SCHED_NORMAL tasks + */ +#define minclsyspri (MAX_PRIO-1) +#define maxclsyspri (MAX_RT_PRIO) +#define defclsyspri (DEFAULT_PRIO) + +#ifndef NICE_TO_PRIO +#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20) +#endif +#ifndef PRIO_TO_NICE +#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20) +#endif + +/* + * Missing macros + */ +#ifndef PAGESIZE +#define PAGESIZE PAGE_SIZE +#endif + +#ifndef PAGESHIFT +#define PAGESHIFT PAGE_SHIFT +#endif + +/* from Solaris sys/byteorder.h */ +#define BSWAP_8(x) ((x) & 0xff) +#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8)) +#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16)) +#define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32)) + +/* Map some simple functions. + */ +#define bzero(ptr,size) memset(ptr,0,size) +#define bcopy(src,dest,size) memmove(dest,src,size) +#define bcmp(src,dest,size) memcmp((src), (dest), (size_t)(size)) + +/* Dtrace probes do not exist in the linux kernel */ +#ifdef DTRACE_PROBE +#undef DTRACE_PROBE +#endif /* DTRACE_PROBE */ +#define DTRACE_PROBE(a) ((void)0) + +#ifdef DTRACE_PROBE1 +#undef DTRACE_PROBE1 +#endif /* DTRACE_PROBE1 */ +#define DTRACE_PROBE1(a, b, c) ((void)0) + +#ifdef DTRACE_PROBE2 +#undef DTRACE_PROBE2 +#endif /* DTRACE_PROBE2 */ +#define DTRACE_PROBE2(a, b, c, d, e) ((void)0) + +#ifdef DTRACE_PROBE3 +#undef DTRACE_PROBE3 +#endif /* DTRACE_PROBE3 */ +#define DTRACE_PROBE3(a, b, c, d, e, f, g) ((void)0) + +#ifdef DTRACE_PROBE4 +#undef DTRACE_PROBE4 +#endif /* DTRACE_PROBE4 */ +#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) ((void)0) + +/* Missing globals */ +extern char spl_version[32]; +extern unsigned long spl_hostid; + +/* Missing misc functions */ +extern uint32_t zone_get_hostid(void *zone); +extern void spl_setup(void); +extern void spl_cleanup(void); + +#define highbit(x) __fls(x) +#define lowbit(x) __ffs(x) + +#define highbit64(x) fls64(x) +#define makedevice(maj,min) makedev(maj,min) + +/* common macros */ +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a) < (b) ? (b) : (a)) +#endif +#ifndef ABS +#define ABS(a) ((a) < 0 ? -(a) : (a)) +#endif +#ifndef DIV_ROUND_UP +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#endif +#ifndef roundup +#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) +#endif +#ifndef howmany +#define howmany(x, y) (((x) + ((y) - 1)) / (y)) +#endif + +/* + * Compatibility macros/typedefs needed for Solaris -> Linux port + */ +#define P2ALIGN(x, align) ((x) & -(align)) +#define P2CROSS(x, y, align) (((x) ^ (y)) > (align) - 1) +#define P2ROUNDUP(x, align) ((((x) - 1) | ((align) - 1)) + 1) +#define P2PHASE(x, align) ((x) & ((align) - 1)) +#define P2NPHASE(x, align) (-(x) & ((align) - 1)) +#define ISP2(x) (((x) & ((x) - 1)) == 0) +#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1))==0) +#define P2BOUNDARY(off, len, align) \ + (((off) ^ ((off) + (len) - 1)) > (align) - 1) + +/* + * Typed version of the P2* macros. These macros should be used to ensure + * that the result is correctly calculated based on the data type of (x), + * which is passed in as the last argument, regardless of the data + * type of the alignment. For example, if (x) is of type uint64_t, + * and we want to round it up to a page boundary using "PAGESIZE" as + * the alignment, we can do either + * + * P2ROUNDUP(x, (uint64_t)PAGESIZE) + * or + * P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t) + */ +#define P2ALIGN_TYPED(x, align, type) \ + ((type)(x) & -(type)(align)) +#define P2PHASE_TYPED(x, align, type) \ + ((type)(x) & ((type)(align) - 1)) +#define P2NPHASE_TYPED(x, align, type) \ + (-(type)(x) & ((type)(align) - 1)) +#define P2ROUNDUP_TYPED(x, align, type) \ + ((((type)(x) - 1) | ((type)(align) - 1)) + 1) +#define P2END_TYPED(x, align, type) \ + (-(~(type)(x) & -(type)(align))) +#define P2PHASEUP_TYPED(x, align, phase, type) \ + ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align))) +#define P2CROSS_TYPED(x, y, align, type) \ + (((type)(x) ^ (type)(y)) > (type)(align) - 1) +#define P2SAMEHIGHBIT_TYPED(x, y, type) \ + (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y))) + +#if defined(_KERNEL) && !defined(_KMEMUSER) && !defined(offsetof) + +/* avoid any possibility of clashing with version */ + +#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) +#endif + +#endif /* _SPL_SYSMACROS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/systeminfo.h +++ linux-aws-4.15.0/spl/include/sys/systeminfo.h @@ -0,0 +1,36 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSTEMINFO_H +#define _SPL_SYSTEMINFO_H + +#define HW_HOSTID_LEN 11 /* minimum buffer size needed */ + /* to hold a decimal or hex */ + /* hostid string */ + +/* Supplemental definitions for Linux. */ +#define HW_HOSTID_PATH "/etc/hostid" /* binary configuration file */ +#define HW_HOSTID_MASK 0xFFFFFFFF /* significant hostid bits */ + +#endif /* SPL_SYSTEMINFO_H */ --- linux-aws-4.15.0.orig/spl/include/sys/systm.h +++ linux-aws-4.15.0/spl/include/sys/systm.h @@ -0,0 +1,32 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SYSTM_H +#define _SPL_SYSTM_H + +#include + +typedef uintptr_t pc_t; + +#endif /* SPL_SYSTM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/t_lock.h +++ linux-aws-4.15.0/spl/include/sys/t_lock.h @@ -0,0 +1,33 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_T_LOCK_H +#define _SPL_T_LOCK_H + +#include +#include +#include +#include + +#endif /* SPL_T_LOCK_H */ --- linux-aws-4.15.0.orig/spl/include/sys/taskq.h +++ linux-aws-4.15.0/spl/include/sys/taskq.h @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_TASKQ_H +#define _SPL_TASKQ_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TASKQ_NAMELEN 31 + +#define TASKQ_PREPOPULATE 0x00000001 +#define TASKQ_CPR_SAFE 0x00000002 +#define TASKQ_DYNAMIC 0x00000004 +#define TASKQ_THREADS_CPU_PCT 0x00000008 +#define TASKQ_DC_BATCH 0x00000010 +#define TASKQ_ACTIVE 0x80000000 + +/* + * Flags for taskq_dispatch. TQ_SLEEP/TQ_NOSLEEP should be same as + * KM_SLEEP/KM_NOSLEEP. TQ_NOQUEUE/TQ_NOALLOC are set particularly + * large so as not to conflict with already used GFP_* defines. + */ +#define TQ_SLEEP 0x00000000 +#define TQ_NOSLEEP 0x00000001 +#define TQ_PUSHPAGE 0x00000002 +#define TQ_NOQUEUE 0x01000000 +#define TQ_NOALLOC 0x02000000 +#define TQ_NEW 0x04000000 +#define TQ_FRONT 0x08000000 + +/* + * Reserved taskqid values. + */ +#define TASKQID_INVALID ((taskqid_t)0) +#define TASKQID_INITIAL ((taskqid_t)1) + +/* + * spin_lock(lock) and spin_lock_nested(lock,0) are equivalent, + * so TQ_LOCK_DYNAMIC must not evaluate to 0 + */ +typedef enum tq_lock_role { + TQ_LOCK_GENERAL = 0, + TQ_LOCK_DYNAMIC = 1, +} tq_lock_role_t; + +typedef unsigned long taskqid_t; +typedef void (task_func_t)(void *); + +typedef struct taskq { + spinlock_t tq_lock; /* protects taskq_t */ + char *tq_name; /* taskq name */ + int tq_instance; /* instance of tq_name */ + struct list_head tq_thread_list; /* list of all threads */ + struct list_head tq_active_list; /* list of active threads */ + int tq_nactive; /* # of active threads */ + int tq_nthreads; /* # of existing threads */ + int tq_nspawn; /* # of threads being spawned */ + int tq_maxthreads; /* # of threads maximum */ + int tq_pri; /* priority */ + int tq_minalloc; /* min taskq_ent_t pool size */ + int tq_maxalloc; /* max taskq_ent_t pool size */ + int tq_nalloc; /* cur taskq_ent_t pool size */ + uint_t tq_flags; /* flags */ + taskqid_t tq_next_id; /* next pend/work id */ + taskqid_t tq_lowest_id; /* lowest pend/work id */ + struct list_head tq_free_list; /* free taskq_ent_t's */ + struct list_head tq_pend_list; /* pending taskq_ent_t's */ + struct list_head tq_prio_list; /* priority pending taskq_ent_t's */ + struct list_head tq_delay_list; /* delayed taskq_ent_t's */ + struct list_head tq_taskqs; /* all taskq_t's */ + spl_wait_queue_head_t tq_work_waitq; /* new work waitq */ + spl_wait_queue_head_t tq_wait_waitq; /* wait waitq */ + tq_lock_role_t tq_lock_class; /* class when taking tq_lock */ +} taskq_t; + +typedef struct taskq_ent { + spinlock_t tqent_lock; + spl_wait_queue_head_t tqent_waitq; + struct timer_list tqent_timer; + struct list_head tqent_list; + taskqid_t tqent_id; + task_func_t *tqent_func; + void *tqent_arg; + taskq_t *tqent_taskq; + uintptr_t tqent_flags; + unsigned long tqent_birth; +} taskq_ent_t; + +#define TQENT_FLAG_PREALLOC 0x1 +#define TQENT_FLAG_CANCEL 0x2 + +typedef struct taskq_thread { + struct list_head tqt_thread_list; + struct list_head tqt_active_list; + struct task_struct *tqt_thread; + taskq_t *tqt_tq; + taskqid_t tqt_id; + taskq_ent_t *tqt_task; + uintptr_t tqt_flags; +} taskq_thread_t; + +/* Global system-wide dynamic task queue available for all consumers */ +extern taskq_t *system_taskq; +/* Global dynamic task queue for long delay */ +extern taskq_t *system_delay_taskq; + +/* List of all taskqs */ +extern struct list_head tq_list; +extern struct rw_semaphore tq_list_sem; + +extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t); +extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *, + uint_t, clock_t); +extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t, + taskq_ent_t *); +extern int taskq_empty_ent(taskq_ent_t *); +extern void taskq_init_ent(taskq_ent_t *); +extern taskq_t *taskq_create(const char *, int, pri_t, int, int, uint_t); +extern void taskq_destroy(taskq_t *); +extern void taskq_wait_id(taskq_t *, taskqid_t); +extern void taskq_wait_outstanding(taskq_t *, taskqid_t); +extern void taskq_wait(taskq_t *); +extern int taskq_cancel_id(taskq_t *, taskqid_t); +extern int taskq_member(taskq_t *, kthread_t *); + +#define taskq_create_proc(name, nthreads, pri, min, max, proc, flags) \ + taskq_create(name, nthreads, pri, min, max, flags) +#define taskq_create_sysdc(name, nthreads, min, max, proc, dc, flags) \ + taskq_create(name, nthreads, maxclsyspri, min, max, flags) + +int spl_taskq_init(void); +void spl_taskq_fini(void); + +#endif /* _SPL_TASKQ_H */ --- linux-aws-4.15.0.orig/spl/include/sys/thread.h +++ linux-aws-4.15.0/spl/include/sys/thread.h @@ -0,0 +1,65 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_THREAD_H +#define _SPL_THREAD_H + +#include +#include +#include +#include +#include +#include +#include + +/* + * Thread interfaces + */ +#define TP_MAGIC 0x53535353 + +#define TS_SLEEP TASK_INTERRUPTIBLE +#define TS_RUN TASK_RUNNING +#define TS_ZOMB EXIT_ZOMBIE +#define TS_STOPPED TASK_STOPPED + +typedef void (*thread_func_t)(void *); + +#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ + __thread_create(stk, stksize, (thread_func_t)func, \ + #func, arg, len, pp, state, pri) +#define thread_exit() __thread_exit() +#define thread_join(t) VERIFY(0) +#define curthread current +#define getcomm() current->comm +#define getpid() current->pid + +extern kthread_t *__thread_create(caddr_t stk, size_t stksize, + thread_func_t func, const char *name, + void *args, size_t len, proc_t *pp, + int state, pri_t pri); +extern void __thread_exit(void); +extern struct task_struct *spl_kthread_create(int (*func)(void *), + void *data, const char namefmt[], ...); + +#endif /* _SPL_THREAD_H */ --- linux-aws-4.15.0.orig/spl/include/sys/time.h +++ linux-aws-4.15.0/spl/include/sys/time.h @@ -0,0 +1,82 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_TIME_H +#define _SPL_TIME_H + +#include +#include +#include +#include + +#if defined(CONFIG_64BIT) +#define TIME_MAX INT64_MAX +#define TIME_MIN INT64_MIN +#else +#define TIME_MAX INT32_MAX +#define TIME_MIN INT32_MIN +#endif + +#define SEC 1 +#define MILLISEC 1000 +#define MICROSEC 1000000 +#define NANOSEC 1000000000 + +#define MSEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MILLISEC)) +#define NSEC2MSEC(n) ((n) / (NANOSEC / MILLISEC)) + +#define USEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / MICROSEC)) +#define NSEC2USEC(n) ((n) / (NANOSEC / MICROSEC)) + +#define NSEC2SEC(n) ((n) / (NANOSEC / SEC)) +#define SEC2NSEC(m) ((hrtime_t)(m) * (NANOSEC / SEC)) + +static const int hz = HZ; + +#define TIMESPEC_OVERFLOW(ts) \ + ((ts)->tv_sec < TIME_MIN || (ts)->tv_sec > TIME_MAX) + +static inline void +gethrestime(timestruc_t *now) +{ + *now = current_kernel_time(); +} + +static inline time_t +gethrestime_sec(void) +{ + struct timespec ts; + ts = current_kernel_time(); + return (ts.tv_sec); +} + +static inline hrtime_t +gethrtime(void) +{ + struct timespec now; + getrawmonotonic(&now); + return (((hrtime_t)now.tv_sec * NSEC_PER_SEC) + now.tv_nsec); +} + +#endif /* _SPL_TIME_H */ --- linux-aws-4.15.0.orig/spl/include/sys/timer.h +++ linux-aws-4.15.0/spl/include/sys/timer.h @@ -0,0 +1,60 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_TIMER_H +#define _SPL_TIMER_H + +#include +#include +#include + +#define lbolt ((clock_t)jiffies) +#define lbolt64 ((int64_t)get_jiffies_64()) + +#define ddi_get_lbolt() ((clock_t)jiffies) +#define ddi_get_lbolt64() ((int64_t)get_jiffies_64()) + +#define ddi_time_before(a, b) (typecheck(clock_t, a) && \ + typecheck(clock_t, b) && \ + ((a) - (b) < 0)) +#define ddi_time_after(a, b) ddi_time_before(b, a) +#define ddi_time_before_eq(a, b) (!ddi_time_after(a, b)) +#define ddi_time_after_eq(a, b) ddi_time_before_eq(b, a) + +#define ddi_time_before64(a, b) (typecheck(int64_t, a) && \ + typecheck(int64_t, b) && \ + ((a) - (b) < 0)) +#define ddi_time_after64(a, b) ddi_time_before64(b, a) +#define ddi_time_before_eq64(a, b) (!ddi_time_after64(a, b)) +#define ddi_time_after_eq64(a, b) ddi_time_before_eq64(b, a) + +#define delay(ticks) schedule_timeout_uninterruptible(ticks) + +#define SEC_TO_TICK(sec) ((sec) * HZ) +#define MSEC_TO_TICK(ms) msecs_to_jiffies(ms) +#define USEC_TO_TICK(us) usecs_to_jiffies(us) +#define NSEC_TO_TICK(ns) usecs_to_jiffies(ns / NSEC_PER_USEC) + +#endif /* _SPL_TIMER_H */ + --- linux-aws-4.15.0.orig/spl/include/sys/tsd.h +++ linux-aws-4.15.0/spl/include/sys/tsd.h @@ -0,0 +1,46 @@ +/*****************************************************************************\ + * Copyright (C) 2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_TSD_H +#define _SPL_TSD_H + +#include + +#define TSD_HASH_TABLE_BITS_DEFAULT 9 +#define TSD_KEYS_MAX 32768 +#define DTOR_PID (PID_MAX_LIMIT+1) +#define PID_KEY (TSD_KEYS_MAX+1) + +typedef void (*dtor_func_t)(void *); + +extern int tsd_set(uint_t, void *); +extern void *tsd_get(uint_t); +extern void *tsd_get_by_thread(uint_t, kthread_t *); +extern void tsd_create(uint_t *, dtor_func_t); +extern void tsd_destroy(uint_t *); +extern void tsd_exit(void); + +int spl_tsd_init(void); +void spl_tsd_fini(void); + +#endif /* _SPL_TSD_H */ --- linux-aws-4.15.0.orig/spl/include/sys/types.h +++ linux-aws-4.15.0/spl/include/sys/types.h @@ -0,0 +1,68 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_TYPES_H +#define _SPL_TYPES_H + +#include +#include + +#ifndef ULLONG_MAX +#define ULLONG_MAX (~0ULL) +#endif + +#ifndef LLONG_MAX +#define LLONG_MAX ((long long)(~0ULL>>1)) +#endif + +typedef enum { B_FALSE=0, B_TRUE=1 } boolean_t; +typedef unsigned long intptr_t; +typedef unsigned long ulong_t; +typedef unsigned int uint_t; +typedef unsigned char uchar_t; +typedef unsigned long long u_longlong_t; +typedef unsigned long long u_offset_t; +typedef unsigned long long rlim64_t; +typedef long long longlong_t; +typedef long long offset_t; +typedef struct task_struct kthread_t; +typedef struct task_struct proc_t; +typedef short pri_t; +typedef struct timespec timestruc_t; /* definition per SVr4 */ +typedef struct timespec timespec_t; +typedef longlong_t hrtime_t; +typedef unsigned short ushort_t; +typedef u_longlong_t len_t; +typedef longlong_t diskaddr_t; +typedef ushort_t o_mode_t; +typedef uint_t major_t; +typedef uint_t minor_t; +typedef ulong_t pgcnt_t; +typedef long spgcnt_t; +typedef short index_t; +typedef int id_t; + +extern proc_t p0; + +#endif /* _SPL_TYPES_H */ --- linux-aws-4.15.0.orig/spl/include/sys/types32.h +++ linux-aws-4.15.0/spl/include/sys/types32.h @@ -0,0 +1,36 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_TYPES32_H +#define _SPL_TYPES32_H + +#include +#include + +typedef uint32_t caddr32_t; +typedef int32_t daddr32_t; +typedef int32_t time32_t; +typedef uint32_t size32_t; + +#endif /* _SPL_TYPES32_H */ --- linux-aws-4.15.0.orig/spl/include/sys/u8_textprep.h +++ linux-aws-4.15.0/spl/include/sys/u8_textprep.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_U8_TEXTPREP_H +#define _SPL_U8_TEXTPREP_H + +#endif /* SPL_U8_TEXTPREP_H */ --- linux-aws-4.15.0.orig/spl/include/sys/uio.h +++ linux-aws-4.15.0/spl/include/sys/uio.h @@ -0,0 +1,106 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_UIO_H +#define _SPL_UIO_H + +#include +#include +#include +#include + +typedef struct iovec iovec_t; + +typedef enum uio_rw { + UIO_READ = 0, + UIO_WRITE = 1, +} uio_rw_t; + +typedef enum uio_seg { + UIO_USERSPACE = 0, + UIO_SYSSPACE = 1, + UIO_USERISPACE= 2, + UIO_BVEC = 3, +} uio_seg_t; + +typedef struct uio { + union { + const struct iovec *uio_iov; + const struct bio_vec *uio_bvec; + }; + int uio_iovcnt; + offset_t uio_loffset; + uio_seg_t uio_segflg; + uint16_t uio_fmode; + uint16_t uio_extflg; + offset_t uio_limit; + ssize_t uio_resid; + size_t uio_skip; +} uio_t; + +typedef struct aio_req { + uio_t *aio_uio; + void *aio_private; +} aio_req_t; + +typedef enum xuio_type { + UIOTYPE_ASYNCIO, + UIOTYPE_ZEROCOPY, +} xuio_type_t; + + +#define UIOA_IOV_MAX 16 + +typedef struct uioa_page_s { + int uioa_pfncnt; + void **uioa_ppp; + caddr_t uioa_base; + size_t uioa_len; +} uioa_page_t; + +typedef struct xuio { + uio_t xu_uio; + enum xuio_type xu_type; + union { + struct { + uint32_t xu_a_state; + ssize_t xu_a_mbytes; + uioa_page_t *xu_a_lcur; + void **xu_a_lppp; + void *xu_a_hwst[4]; + uioa_page_t xu_a_locked[UIOA_IOV_MAX]; + } xu_aio; + + struct { + int xu_zc_rw; + void *xu_zc_priv; + } xu_zc; + } xu_ext; +} xuio_t; + +#define XUIO_XUZC_PRIV(xuio) xuio->xu_ext.xu_zc.xu_zc_priv +#define XUIO_XUZC_RW(xuio) xuio->xu_ext.xu_zc.xu_zc_rw + +#endif /* SPL_UIO_H */ --- linux-aws-4.15.0.orig/spl/include/sys/unistd.h +++ linux-aws-4.15.0/spl/include/sys/unistd.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_UNISTD_H +#define _SPL_UNISTD_H + +#endif /* SPL_UNISTD_H */ --- linux-aws-4.15.0.orig/spl/include/sys/user.h +++ linux-aws-4.15.0/spl/include/sys/user.h @@ -0,0 +1,42 @@ +/*****************************************************************************\ + * Copyright (C) 2015 Cluster Inc. + * Produced at ClusterHQ Inc (cf, DISCLAIMER). + * Written by Richard Yao . + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_USER_H +#define _SPL_USER_H + +/* + * We have uf_info_t for areleasef(). We implement areleasef() using a global + * linked list of all open file descriptors with the task structs referenced, + * so accessing the correct descriptor from areleasef() only requires knowing + * about the Linux task_struct. Since this is internal to our compatibility + * layer, we make it an opaque type. + * + * XXX: If the descriptor changes under us and we do not do a getf() between + * the change and using it, we would get an incorrect reference. + */ + +struct uf_info; +typedef struct uf_info uf_info_t; + +#define P_FINFO(x) ((uf_info_t *)x) + +#endif /* SPL_USER_H */ --- linux-aws-4.15.0.orig/spl/include/sys/va_list.h +++ linux-aws-4.15.0/spl/include/sys/va_list.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VA_LIST_H +#define _SPL_VA_LIST_H + +#endif /* SPL_VA_LIST_H */ --- linux-aws-4.15.0.orig/spl/include/sys/varargs.h +++ linux-aws-4.15.0/spl/include/sys/varargs.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VARARGS_H +#define _SPL_VARARGS_H + +#define __va_list va_list + +#endif /* SPL_VARARGS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/vfs.h +++ linux-aws-4.15.0/spl/include/sys/vfs.h @@ -0,0 +1,51 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ZFS_H +#define _SPL_ZFS_H + +#include +#include +#include +#include +#include +#include +#include + +#define MAXFIDSZ 64 + +typedef struct spl_fid { + union { + long fid_pad; + struct { + ushort_t len; /* length of data in bytes */ + char data[MAXFIDSZ];/* data (variable len) */ + } _fid; + } un; +} fid_t; + +#define fid_len un._fid.len +#define fid_data un._fid.data + +#endif /* SPL_ZFS_H */ --- linux-aws-4.15.0.orig/spl/include/sys/vfs_opreg.h +++ linux-aws-4.15.0/spl/include/sys/vfs_opreg.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_OPREG_H +#define _SPL_OPREG_H + +#endif /* SPL_OPREG_H */ --- linux-aws-4.15.0.orig/spl/include/sys/vmem.h +++ linux-aws-4.15.0/spl/include/sys/vmem.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#ifndef _SPL_VMEM_H +#define _SPL_VMEM_H + +#include +#include +#include + +typedef struct vmem { } vmem_t; + +extern vmem_t *heap_arena; +extern vmem_t *zio_alloc_arena; +extern vmem_t *zio_arena; + +extern size_t vmem_size(vmem_t *vmp, int typemask); + +/* + * Memory allocation interfaces + */ +#define VMEM_ALLOC 0x01 +#define VMEM_FREE 0x02 + +#ifndef VMALLOC_TOTAL +#define VMALLOC_TOTAL (VMALLOC_END - VMALLOC_START) +#endif + +/* + * vmem_* is an interface to a low level arena-based memory allocator on + * Illumos that is used to allocate virtual address space. The kmem SLAB + * allocator allocates slabs from it. Then the generic allocation functions + * kmem_{alloc,zalloc,free}() are layered on top of SLAB allocators. + * + * On Linux, the primary means of doing allocations is via kmalloc(), which + * is similarly layered on top of something called the buddy allocator. The + * buddy allocator is not available to kernel modules, it uses physical + * memory addresses rather than virtual memory addresses and is prone to + * fragmentation. + * + * Linux sets aside a relatively small address space for in-kernel virtual + * memory from which allocations can be done using vmalloc(). It might seem + * like a good idea to use vmalloc() to implement something similar to + * Illumos' allocator. However, this has the following problems: + * + * 1. Page directory table allocations are hard coded to use GFP_KERNEL. + * Consequently, any KM_PUSHPAGE or KM_NOSLEEP allocations done using + * vmalloc() will not have proper semantics. + * + * 2. Address space exhaustion is a real issue on 32-bit platforms where + * only a few 100MB are available. The kernel will handle it by spinning + * when it runs out of address space. + * + * 3. All vmalloc() allocations and frees are protected by a single global + * lock which serializes all allocations. + * + * 4. Accessing /proc/meminfo and /proc/vmallocinfo will iterate the entire + * list. The former will sum the allocations while the latter will print + * them to user space in a way that user space can keep the lock held + * indefinitely. When the total number of mapped allocations is large + * (several 100,000) a large amount of time will be spent waiting on locks. + * + * 5. Linux has a wait_on_bit() locking primitive that assumes physical + * memory is used, it simply does not work on virtual memory. Certain + * Linux structures (e.g. the superblock) use them and might be embedded + * into a structure from Illumos. This makes using Linux virtual memory + * unsafe in certain situations. + * + * It follows that we cannot obtain identical semantics to those on Illumos. + * Consequently, we implement the kmem_{alloc,zalloc,free}() functions in + * such a way that they can be used as drop-in replacements for small vmem_* + * allocations (8MB in size or smaller) and map vmem_{alloc,zalloc,free}() + * to them. + */ + +#define vmem_alloc(sz, fl) spl_vmem_alloc((sz), (fl), __func__, __LINE__) +#define vmem_zalloc(sz, fl) spl_vmem_zalloc((sz), (fl), __func__, __LINE__) +#define vmem_free(ptr, sz) spl_vmem_free((ptr), (sz)) +#define vmem_qcache_reap(ptr) ((void)0) + +extern void *spl_vmem_alloc(size_t sz, int fl, const char *func, int line); +extern void *spl_vmem_zalloc(size_t sz, int fl, const char *func, int line); +extern void spl_vmem_free(const void *ptr, size_t sz); + +int spl_vmem_init(void); +void spl_vmem_fini(void); + +#endif /* _SPL_VMEM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/vmsystm.h +++ linux-aws-4.15.0/spl/include/sys/vmsystm.h @@ -0,0 +1,84 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VMSYSTM_H +#define _SPL_VMSYSTM_H + +#include +#include +#include +#include +#include +#include +#include + +#define membar_producer() smp_wmb() +#define physmem totalram_pages +#define freemem (nr_free_pages() + \ + global_page_state(NR_INACTIVE_FILE) + \ + global_page_state(NR_INACTIVE_ANON) + \ + global_page_state(NR_SLAB_RECLAIMABLE)) + +#define xcopyin(from, to, size) copy_from_user(to, from, size) +#define xcopyout(from, to, size) copy_to_user(to, from, size) + +static __inline__ int +copyin(const void *from, void *to, size_t len) +{ + /* On error copyin routine returns -1 */ + if (xcopyin(from, to, len)) + return -1; + + return 0; +} + +static __inline__ int +copyout(const void *from, void *to, size_t len) +{ + /* On error copyout routine returns -1 */ + if (xcopyout(from, to, len)) + return -1; + + return 0; +} + +static __inline__ int +copyinstr(const void *from, void *to, size_t len, size_t *done) +{ + size_t rc; + + if (len == 0) + return -ENAMETOOLONG; + + /* XXX: Should return ENAMETOOLONG if 'strlen(from) > len' */ + + memset(to, 0, len); + rc = copyin(from, to, len - 1); + if (done != NULL) + *done = rc; + + return 0; +} + +#endif /* SPL_VMSYSTM_H */ --- linux-aws-4.15.0.orig/spl/include/sys/vnode.h +++ linux-aws-4.15.0/spl/include/sys/vnode.h @@ -0,0 +1,207 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VNODE_H +#define _SPL_VNODE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Prior to linux-2.6.33 only O_DSYNC semantics were implemented and + * they used the O_SYNC flag. As of linux-2.6.33 the this behavior + * was properly split in to O_SYNC and O_DSYNC respectively. + */ +#ifndef O_DSYNC +#define O_DSYNC O_SYNC +#endif + +#define FREAD 1 +#define FWRITE 2 +#define FCREAT O_CREAT +#define FTRUNC O_TRUNC +#define FOFFMAX O_LARGEFILE +#define FSYNC O_SYNC +#define FDSYNC O_DSYNC +#define FRSYNC O_SYNC +#define FEXCL O_EXCL +#define FDIRECT O_DIRECT +#define FAPPEND O_APPEND + +#define FNODSYNC 0x10000 /* fsync pseudo flag */ +#define FNOFOLLOW 0x20000 /* don't follow symlinks */ + +#define F_FREESP 11 /* Free file space */ + + +/* + * The vnode AT_ flags are mapped to the Linux ATTR_* flags. + * This allows them to be used safely with an iattr structure. + * The AT_XVATTR flag has been added and mapped to the upper + * bit range to avoid conflicting with the standard Linux set. + */ +#undef AT_UID +#undef AT_GID + +#define AT_MODE ATTR_MODE +#define AT_UID ATTR_UID +#define AT_GID ATTR_GID +#define AT_SIZE ATTR_SIZE +#define AT_ATIME ATTR_ATIME +#define AT_MTIME ATTR_MTIME +#define AT_CTIME ATTR_CTIME + +#define ATTR_XVATTR (1 << 31) +#define AT_XVATTR ATTR_XVATTR + +#define ATTR_IATTR_MASK (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE | \ + ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_FILE) + +#define CRCREAT 0x01 +#define RMFILE 0x02 + +#define B_INVAL 0x01 +#define B_TRUNC 0x02 + +#define LOOKUP_DIR 0x01 +#define LOOKUP_XATTR 0x02 +#define CREATE_XATTR_DIR 0x04 +#define ATTR_NOACLCHECK 0x20 + +typedef enum vtype { + VNON = 0, + VREG = 1, + VDIR = 2, + VBLK = 3, + VCHR = 4, + VLNK = 5, + VFIFO = 6, + VDOOR = 7, + VPROC = 8, + VSOCK = 9, + VPORT = 10, + VBAD = 11 +} vtype_t; + +typedef struct vattr { + enum vtype va_type; /* vnode type */ + u_int va_mask; /* attribute bit-mask */ + u_short va_mode; /* acc mode */ + uid_t va_uid; /* owner uid */ + gid_t va_gid; /* owner gid */ + long va_fsid; /* fs id */ + long va_nodeid; /* node # */ + uint32_t va_nlink; /* # links */ + uint64_t va_size; /* file size */ + struct timespec va_atime; /* last acc */ + struct timespec va_mtime; /* last mod */ + struct timespec va_ctime; /* last chg */ + dev_t va_rdev; /* dev */ + uint64_t va_nblocks; /* space used */ + uint32_t va_blksize; /* block size */ + uint32_t va_seq; /* sequence */ + struct dentry *va_dentry; /* dentry to wire */ +} vattr_t; + +typedef struct vnode { + struct file *v_file; + kmutex_t v_lock; /* protects vnode fields */ + uint_t v_flag; /* vnode flags (see below) */ + uint_t v_count; /* reference count */ + void *v_data; /* private data for fs */ + struct vfs *v_vfsp; /* ptr to containing VFS */ + struct stdata *v_stream; /* associated stream */ + enum vtype v_type; /* vnode type */ + dev_t v_rdev; /* device (VCHR, VBLK) */ + gfp_t v_gfp_mask; /* original mapping gfp mask */ +} vnode_t; + +typedef struct vn_file { + int f_fd; /* linux fd for lookup */ + struct task_struct *f_task; /* linux task this fd belongs to */ + struct file *f_file; /* linux file struct */ + atomic_t f_ref; /* ref count */ + kmutex_t f_lock; /* struct lock */ + loff_t f_offset; /* offset */ + vnode_t *f_vnode; /* vnode */ + struct list_head f_list; /* list referenced file_t's */ +} file_t; + +extern vnode_t *vn_alloc(int flag); +void vn_free(vnode_t *vp); +extern vtype_t vn_mode_to_vtype(mode_t); +extern mode_t vn_vtype_to_mode(vtype_t); +extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode, + vnode_t **vpp, int x1, void *x2); +extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode, + vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd); +extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, + offset_t off, uio_seg_t seg, int x1, rlim64_t x2, + void *x3, ssize_t *residp); +extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4); +extern int vn_seek(vnode_t *vp, offset_t o, offset_t *op, void *ct); + +extern int vn_remove(const char *path, uio_seg_t seg, int flags); +extern int vn_rename(const char *path1, const char *path2, int x1); +extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4); +extern int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4); +extern int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag, + offset_t offset, void *x6, void *x7); +extern file_t *vn_getf(int fd); +extern void vn_releasef(int fd); +extern void vn_areleasef(int fd, uf_info_t *fip); +extern int vn_set_pwd(const char *filename); + +int spl_vn_init(void); +void spl_vn_fini(void); + +#define VOP_CLOSE vn_close +#define VOP_SEEK vn_seek +#define VOP_GETATTR vn_getattr +#define VOP_FSYNC vn_fsync +#define VOP_SPACE vn_space +#define VOP_PUTPAGE(vp, o, s, f, x1, x2) ((void)0) +#define vn_is_readonly(vp) 0 +#define getf vn_getf +#define releasef vn_releasef +#define areleasef vn_areleasef + +extern vnode_t *rootdir; + +#endif /* SPL_VNODE_H */ --- linux-aws-4.15.0.orig/spl/include/sys/zmod.h +++ linux-aws-4.15.0/spl/include/sys/zmod.h @@ -0,0 +1,69 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * z_compress_level/z_uncompress are nearly identical copies of the + * compress2/uncompress functions provided by the official zlib package + * available at http://zlib.net/. The only changes made we to slightly + * adapt the functions called to match the linux kernel implementation + * of zlib. The full zlib license follows: + * + * zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.5, April 19th, 2010 + * + * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly + * Mark Adler +\*****************************************************************************/ + +#ifndef _SPL_ZMOD_H +#define _SPL_ZMOD_H + +#include +#include + +extern int z_compress_level(void *dest, size_t *destLen, const void *source, + size_t sourceLen, int level); +extern int z_uncompress(void *dest, size_t *destLen, const void *source, + size_t sourceLen); + +int spl_zlib_init(void); +void spl_zlib_fini(void); + +#endif /* SPL_ZMOD_H */ --- linux-aws-4.15.0.orig/spl/include/sys/zone.h +++ linux-aws-4.15.0/spl/include/sys/zone.h @@ -0,0 +1,36 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_ZONE_H +#define _SPL_ZONE_H + +#include + +#define GLOBAL_ZONEID 0 + +#define zone_dataset_visible(x, y) (1) +#define crgetzoneid(x) (GLOBAL_ZONEID) +#define INGLOBALZONE(z) (1) + +#endif /* SPL_ZONE_H */ --- linux-aws-4.15.0.orig/spl/include/unistd.h +++ linux-aws-4.15.0/spl/include/unistd.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_UNISTD_H +#define _SPL_UNISTD_H + +#endif /* SPL_UNISTD_H */ --- linux-aws-4.15.0.orig/spl/include/util/Makefile.am +++ linux-aws-4.15.0/spl/include/util/Makefile.am @@ -0,0 +1,14 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/util/qsort.h \ + $(top_srcdir)/include/util/sscanf.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/util +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/util/Makefile.in +++ linux-aws-4.15.0/spl/include/util/Makefile.in @@ -0,0 +1,623 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/util +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/util/qsort.h \ + $(top_srcdir)/include/util/sscanf.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/util/qsort.h \ + $(top_srcdir)/include/util/sscanf.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/util +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/util/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/util/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/util/qsort.h +++ linux-aws-4.15.0/spl/include/util/qsort.h @@ -0,0 +1,32 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_QSORT_H +#define _SPL_QSORT_H + +#include + +#define qsort(base, num, size, cmp) sort(base, num, size, cmp, NULL) + +#endif /* SPL_QSORT_H */ --- linux-aws-4.15.0.orig/spl/include/util/sscanf.h +++ linux-aws-4.15.0/spl/include/util/sscanf.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_UTIL_SSCANF_H +#define _SPL_UTIL_SSCANF_H + +#endif /* SPL_UTIL_SSCAN_H */ --- linux-aws-4.15.0.orig/spl/include/vm/Makefile.am +++ linux-aws-4.15.0/spl/include/vm/Makefile.am @@ -0,0 +1,15 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/vm/anon.h \ + $(top_srcdir)/include/vm/pvn.h \ + $(top_srcdir)/include/vm/seg_kmem.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_KERNEL +kerneldir = @prefix@/src/spl-$(VERSION)/include/vm +kernel_HEADERS = $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/spl/include/vm/Makefile.in +++ linux-aws-4.15.0/spl/include/vm/Makefile.in @@ -0,0 +1,625 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/vm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/vm/anon.h \ + $(top_srcdir)/include/vm/pvn.h \ + $(top_srcdir)/include/vm/seg_kmem.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" +HEADERS = $(kernel_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/vm/anon.h \ + $(top_srcdir)/include/vm/pvn.h \ + $(top_srcdir)/include/vm/seg_kmem.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/spl-$(VERSION)/include/vm +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/vm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/vm/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-kernelHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/include/vm/anon.h +++ linux-aws-4.15.0/spl/include/vm/anon.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VM_ANON_H +#define _SPL_VM_ANON_H + +#endif /* SPL_VM_ANON_H */ --- linux-aws-4.15.0.orig/spl/include/vm/pvn.h +++ linux-aws-4.15.0/spl/include/vm/pvn.h @@ -0,0 +1,28 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_VM_PVN_H +#define _SPL_VM_PVN_H + +#endif /* SPL_VM_PVN_H */ --- linux-aws-4.15.0.orig/spl/include/vm/seg_kmem.h +++ linux-aws-4.15.0/spl/include/vm/seg_kmem.h @@ -0,0 +1,30 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPL_SEG_KMEM_H +#define _SPL_SEG_KMEM_H + +#include + +#endif /* SPL_SEG_KMEM_H */ --- linux-aws-4.15.0.orig/spl/lib/Makefile.am +++ linux-aws-4.15.0/spl/lib/Makefile.am @@ -0,0 +1,6 @@ +include $(top_srcdir)/config/Rules.am + +noinst_LTLIBRARIES = libcommon.la +libcommon_la_SOURCES = list.c + +EXTRA_DIST = list.h --- linux-aws-4.15.0.orig/spl/lib/Makefile.in +++ linux-aws-4.15.0/spl/lib/Makefile.in @@ -0,0 +1,655 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Common rules for user space components. +############################################################################### + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libcommon_la_LIBADD = +am_libcommon_la_OBJECTS = list.lo +libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcommon_la_SOURCES) +DIST_SOURCES = $(libcommon_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/Rules.am \ + $(top_srcdir)/config/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +DEFAULT_INCLUDES = -include ${top_builddir}/spl_config.h +AM_LIBTOOLFLAGS = --silent +AM_CPPFLAGS = -D__USE_LARGEFILE64 +AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing \ + ${DEBUG_CFLAGS} +noinst_LTLIBRARIES = libcommon.la +libcommon_la_SOURCES = list.c +EXTRA_DIST = list.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/Rules.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/config/Rules.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/lib/list.c +++ linux-aws-4.15.0/spl/lib/list.c @@ -0,0 +1,837 @@ +/***************************************************************************** + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2001-2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Chris Dunlap . + * UCRL-CODE-235197 + * + * This file is from LSD-Tools, the LLNL Software Development Toolbox. + * + * LSD-Tools 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. + * + * LSD-Tools 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. + * + * You should have received a copy of the GNU General Public License along + * with LSD-Tools. If not, see . + ***************************************************************************** + * Refer to "list.h" for documentation on public functions. + *****************************************************************************/ + +#ifdef WITH_PTHREADS +# include +#endif /* WITH_PTHREADS */ + +#include +#include +#include +#include +#include "list.h" + + +/********************* + * lsd_fatal_error * + *********************/ + +#ifdef WITH_LSD_FATAL_ERROR_FUNC +# undef lsd_fatal_error + extern void lsd_fatal_error(char *file, int line, char *mesg); +#else /* !WITH_LSD_FATAL_ERROR_FUNC */ +# ifndef lsd_fatal_error +# include +# include +# include +# define lsd_fatal_error(file, line, mesg) \ + do { \ + fprintf(stderr, "ERROR: [%s:%d] %s: %s\n", \ + file, line, mesg, strerror(errno)); \ + } while (0) +# endif /* !lsd_fatal_error */ +#endif /* !WITH_LSD_FATAL_ERROR_FUNC */ + + +/********************* + * lsd_nomem_error * + *********************/ + +#ifdef WITH_LSD_NOMEM_ERROR_FUNC +# undef lsd_nomem_error + extern void * lsd_nomem_error(char *file, int line, char *mesg); +#else /* !WITH_LSD_NOMEM_ERROR_FUNC */ +# ifndef lsd_nomem_error +# define lsd_nomem_error(file, line, mesg) (NULL) +# endif /* !lsd_nomem_error */ +#endif /* !WITH_LSD_NOMEM_ERROR_FUNC */ + + +/*************** + * Constants * + ***************/ + +#define LIST_ALLOC 32 +#define LIST_MAGIC 0xDEADBEEF + + +/**************** + * Data Types * + ****************/ + +struct listNode { + void *data; /* node's data */ + struct listNode *next; /* next node in list */ +}; + +struct listIterator { + struct list *list; /* the list being iterated */ + struct listNode *pos; /* the next node to be iterated */ + struct listNode **prev; /* addr of 'next' ptr to prv It node */ + struct listIterator *iNext; /* iterator chain for list_destroy() */ +#ifndef NDEBUG + unsigned int magic; /* sentinel for asserting validity */ +#endif /* !NDEBUG */ +}; + +struct list { + struct listNode *head; /* head of the list */ + struct listNode **tail; /* addr of last node's 'next' ptr */ + struct listIterator *iNext; /* iterator chain for list_destroy() */ + ListDelF fDel; /* function to delete node data */ + int count; /* number of nodes in list */ +#ifdef WITH_PTHREADS + pthread_mutex_t mutex; /* mutex to protect access to list */ +#endif /* WITH_PTHREADS */ +#ifndef NDEBUG + unsigned int magic; /* sentinel for asserting validity */ +#endif /* !NDEBUG */ +}; + +typedef struct listNode * ListNode; + + +/**************** + * Prototypes * + ****************/ + +static void * list_node_create (List l, ListNode *pp, void *x); +static void * list_node_destroy (List l, ListNode *pp); +static List list_alloc (void); +static void list_free (List l); +static ListNode list_node_alloc (void); +static void list_node_free (ListNode p); +static ListIterator list_iterator_alloc (void); +static void list_iterator_free (ListIterator i); +static void * list_alloc_aux (int size, void *pfreelist); +static void list_free_aux (void *x, void *pfreelist); + + +/*************** + * Variables * + ***************/ + +static List list_free_lists = NULL; +static ListNode list_free_nodes = NULL; +static ListIterator list_free_iterators = NULL; + +#ifdef WITH_PTHREADS +static pthread_mutex_t list_free_lock = PTHREAD_MUTEX_INITIALIZER; +#endif /* WITH_PTHREADS */ + + +/************ + * Macros * + ************/ + +#ifdef WITH_PTHREADS + +# define list_mutex_init(mutex) \ + do { \ + int e = pthread_mutex_init(mutex, NULL); \ + if (e != 0) { \ + errno = e; \ + lsd_fatal_error(__FILE__, __LINE__, "list mutex init"); \ + abort(); \ + } \ + } while (0) + +# define list_mutex_lock(mutex) \ + do { \ + int e = pthread_mutex_lock(mutex); \ + if (e != 0) { \ + errno = e; \ + lsd_fatal_error(__FILE__, __LINE__, "list mutex lock"); \ + abort(); \ + } \ + } while (0) + +# define list_mutex_unlock(mutex) \ + do { \ + int e = pthread_mutex_unlock(mutex); \ + if (e != 0) { \ + errno = e; \ + lsd_fatal_error(__FILE__, __LINE__, "list mutex unlock"); \ + abort(); \ + } \ + } while (0) + +# define list_mutex_destroy(mutex) \ + do { \ + int e = pthread_mutex_destroy(mutex); \ + if (e != 0) { \ + errno = e; \ + lsd_fatal_error(__FILE__, __LINE__, "list mutex destroy"); \ + abort(); \ + } \ + } while (0) + +# ifndef NDEBUG + static int list_mutex_is_locked (pthread_mutex_t *mutex); +# endif /* !NDEBUG */ + +#else /* !WITH_PTHREADS */ + +# define list_mutex_init(mutex) +# define list_mutex_lock(mutex) +# define list_mutex_unlock(mutex) +# define list_mutex_destroy(mutex) +# define list_mutex_is_locked(mutex) (1) + +#endif /* !WITH_PTHREADS */ + + +/*************** + * Functions * + ***************/ + +List +list_create (ListDelF f) +{ + List l; + + if (!(l = list_alloc())) + return(lsd_nomem_error(__FILE__, __LINE__, "list create")); + l->head = NULL; + l->tail = &l->head; + l->iNext = NULL; + l->fDel = f; + l->count = 0; + list_mutex_init(&l->mutex); +#ifndef NDEBUG + l->magic = LIST_MAGIC; +#endif + return(l); +} + + +void +list_destroy (List l) +{ + ListIterator i, iTmp; + ListNode p, pTmp; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + i = l->iNext; + while (i) { + assert(i->magic == LIST_MAGIC); + iTmp = i->iNext; +#ifndef NDEBUG + i->magic = ~LIST_MAGIC; +#endif /* !NDEBUG */ + list_iterator_free(i); + i = iTmp; + } + p = l->head; + while (p) { + pTmp = p->next; + if (p->data && l->fDel) + l->fDel(p->data); + list_node_free(p); + p = pTmp; + } +#ifndef NDEBUG + l->magic = ~LIST_MAGIC; +#endif /* !NDEBUG */ + list_mutex_unlock(&l->mutex); + list_mutex_destroy(&l->mutex); + list_free(l); + return; +} + + +int +list_is_empty (List l) +{ + int n; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + n = l->count; + list_mutex_unlock(&l->mutex); + return(n == 0); +} + + +int +list_count (List l) +{ + int n; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + n = l->count; + list_mutex_unlock(&l->mutex); + return(n); +} + + +void * +list_append (List l, void *x) +{ + void *v; + + assert(l != NULL); + assert(x != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_create(l, l->tail, x); + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_prepend (List l, void *x) +{ + void *v; + + assert(l != NULL); + assert(x != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_create(l, &l->head, x); + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_find_first (List l, ListFindF f, void *key) +{ + ListNode p; + void *v = NULL; + + assert(l != NULL); + assert(f != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + for (p=l->head; p; p=p->next) { + if (f(p->data, key)) { + v = p->data; + break; + } + } + list_mutex_unlock(&l->mutex); + return(v); +} + + +int +list_delete_all (List l, ListFindF f, void *key) +{ + ListNode *pp; + void *v; + int n = 0; + + assert(l != NULL); + assert(f != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + pp = &l->head; + while (*pp) { + if (f((*pp)->data, key)) { + if ((v = list_node_destroy(l, pp))) { + if (l->fDel) + l->fDel(v); + n++; + } + } + else { + pp = &(*pp)->next; + } + } + list_mutex_unlock(&l->mutex); + return(n); +} + + +int +list_for_each (List l, ListForF f, void *arg) +{ + ListNode p; + int n = 0; + + assert(l != NULL); + assert(f != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + for (p=l->head; p; p=p->next) { + n++; + if (f(p->data, arg) < 0) { + n = -n; + break; + } + } + list_mutex_unlock(&l->mutex); + return(n); +} + + +void +list_sort (List l, ListCmpF f) +{ +/* Note: Time complexity O(n^2). + */ + ListNode *pp, *ppPrev, *ppPos, pTmp; + ListIterator i; + + assert(l != NULL); + assert(f != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + if (l->count > 1) { + ppPrev = &l->head; + pp = &(*ppPrev)->next; + while (*pp) { + if (f((*pp)->data, (*ppPrev)->data) < 0) { + ppPos = &l->head; + while (f((*pp)->data, (*ppPos)->data) >= 0) + ppPos = &(*ppPos)->next; + pTmp = (*pp)->next; + (*pp)->next = *ppPos; + *ppPos = *pp; + *pp = pTmp; + if (ppPrev == ppPos) + ppPrev = &(*ppPrev)->next; + } + else { + ppPrev = pp; + pp = &(*pp)->next; + } + } + l->tail = pp; + + for (i=l->iNext; i; i=i->iNext) { + assert(i->magic == LIST_MAGIC); + i->pos = i->list->head; + i->prev = &i->list->head; + } + } + list_mutex_unlock(&l->mutex); + return; +} + + +void * +list_push (List l, void *x) +{ + void *v; + + assert(l != NULL); + assert(x != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_create(l, &l->head, x); + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_pop (List l) +{ + void *v; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_destroy(l, &l->head); + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_peek (List l) +{ + void *v; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = (l->head) ? l->head->data : NULL; + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_enqueue (List l, void *x) +{ + void *v; + + assert(l != NULL); + assert(x != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_create(l, l->tail, x); + list_mutex_unlock(&l->mutex); + return(v); +} + + +void * +list_dequeue (List l) +{ + void *v; + + assert(l != NULL); + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + v = list_node_destroy(l, &l->head); + list_mutex_unlock(&l->mutex); + return(v); +} + + +ListIterator +list_iterator_create (List l) +{ + ListIterator i; + + assert(l != NULL); + if (!(i = list_iterator_alloc())) + return(lsd_nomem_error(__FILE__, __LINE__, "list iterator create")); + i->list = l; + list_mutex_lock(&l->mutex); + assert(l->magic == LIST_MAGIC); + i->pos = l->head; + i->prev = &l->head; + i->iNext = l->iNext; + l->iNext = i; +#ifndef NDEBUG + i->magic = LIST_MAGIC; +#endif /* !NDEBUG */ + list_mutex_unlock(&l->mutex); + return(i); +} + + +void +list_iterator_reset (ListIterator i) +{ + assert(i != NULL); + assert(i->magic == LIST_MAGIC); + list_mutex_lock(&i->list->mutex); + assert(i->list->magic == LIST_MAGIC); + i->pos = i->list->head; + i->prev = &i->list->head; + list_mutex_unlock(&i->list->mutex); + return; +} + + +void +list_iterator_destroy (ListIterator i) +{ + ListIterator *pi; + + assert(i != NULL); + assert(i->magic == LIST_MAGIC); + list_mutex_lock(&i->list->mutex); + assert(i->list->magic == LIST_MAGIC); + for (pi=&i->list->iNext; *pi; pi=&(*pi)->iNext) { + assert((*pi)->magic == LIST_MAGIC); + if (*pi == i) { + *pi = (*pi)->iNext; + break; + } + } + list_mutex_unlock(&i->list->mutex); +#ifndef NDEBUG + i->magic = ~LIST_MAGIC; +#endif /* !NDEBUG */ + list_iterator_free(i); + return; +} + + +void * +list_next (ListIterator i) +{ + ListNode p; + + assert(i != NULL); + assert(i->magic == LIST_MAGIC); + list_mutex_lock(&i->list->mutex); + assert(i->list->magic == LIST_MAGIC); + if ((p = i->pos)) + i->pos = p->next; + if (*i->prev != p) + i->prev = &(*i->prev)->next; + list_mutex_unlock(&i->list->mutex); + return(p ? p->data : NULL); +} + + +void * +list_insert (ListIterator i, void *x) +{ + void *v; + + assert(i != NULL); + assert(x != NULL); + assert(i->magic == LIST_MAGIC); + list_mutex_lock(&i->list->mutex); + assert(i->list->magic == LIST_MAGIC); + v = list_node_create(i->list, i->prev, x); + list_mutex_unlock(&i->list->mutex); + return(v); +} + + +void * +list_find (ListIterator i, ListFindF f, void *key) +{ + void *v; + + assert(i != NULL); + assert(f != NULL); + assert(i->magic == LIST_MAGIC); + while ((v=list_next(i)) && !f(v,key)) {;} + return(v); +} + + +void * +list_remove (ListIterator i) +{ + void *v = NULL; + + assert(i != NULL); + assert(i->magic == LIST_MAGIC); + list_mutex_lock(&i->list->mutex); + assert(i->list->magic == LIST_MAGIC); + if (*i->prev != i->pos) + v = list_node_destroy(i->list, i->prev); + list_mutex_unlock(&i->list->mutex); + return(v); +} + + +int +list_delete (ListIterator i) +{ + void *v; + + assert(i != NULL); + assert(i->magic == LIST_MAGIC); + if ((v = list_remove(i))) { + if (i->list->fDel) + i->list->fDel(v); + return(1); + } + return(0); +} + + +static void * +list_node_create (List l, ListNode *pp, void *x) +{ +/* Inserts data pointed to by [x] into list [l] after [pp], + * the address of the previous node's "next" ptr. + * Returns a ptr to data [x], or NULL if insertion fails. + * This routine assumes the list is already locked upon entry. + */ + ListNode p; + ListIterator i; + + assert(l != NULL); + assert(l->magic == LIST_MAGIC); + assert(list_mutex_is_locked(&l->mutex)); + assert(pp != NULL); + assert(x != NULL); + if (!(p = list_node_alloc())) + return(lsd_nomem_error(__FILE__, __LINE__, "list node create")); + p->data = x; + if (!(p->next = *pp)) + l->tail = &p->next; + *pp = p; + l->count++; + for (i=l->iNext; i; i=i->iNext) { + assert(i->magic == LIST_MAGIC); + if (i->prev == pp) + i->prev = &p->next; + else if (i->pos == p->next) + i->pos = p; + assert((i->pos == *i->prev) || (i->pos == (*i->prev)->next)); + } + return(x); +} + + +static void * +list_node_destroy (List l, ListNode *pp) +{ +/* Removes the node pointed to by [*pp] from from list [l], + * where [pp] is the address of the previous node's "next" ptr. + * Returns the data ptr associated with list item being removed, + * or NULL if [*pp] points to the NULL element. + * This routine assumes the list is already locked upon entry. + */ + void *v; + ListNode p; + ListIterator i; + + assert(l != NULL); + assert(l->magic == LIST_MAGIC); + assert(list_mutex_is_locked(&l->mutex)); + assert(pp != NULL); + if (!(p = *pp)) + return(NULL); + v = p->data; + if (!(*pp = p->next)) + l->tail = pp; + l->count--; + for (i=l->iNext; i; i=i->iNext) { + assert(i->magic == LIST_MAGIC); + if (i->pos == p) + i->pos = p->next, i->prev = pp; + else if (i->prev == &p->next) + i->prev = pp; + assert((i->pos == *i->prev) || (i->pos == (*i->prev)->next)); + } + list_node_free(p); + return(v); +} + + +static List +list_alloc (void) +{ + return(list_alloc_aux(sizeof(struct list), &list_free_lists)); +} + + +static void +list_free (List l) +{ + list_free_aux(l, &list_free_lists); + return; +} + + +static ListNode +list_node_alloc (void) +{ + return(list_alloc_aux(sizeof(struct listNode), &list_free_nodes)); +} + + +static void +list_node_free (ListNode p) +{ + list_free_aux(p, &list_free_nodes); + return; +} + + +static ListIterator +list_iterator_alloc (void) +{ + return(list_alloc_aux(sizeof(struct listIterator), &list_free_iterators)); +} + + +static void +list_iterator_free (ListIterator i) +{ + list_free_aux(i, &list_free_iterators); + return; +} + + +static void * +list_alloc_aux (int size, void *pfreelist) +{ +/* Allocates an object of [size] bytes from the freelist [*pfreelist]. + * Memory is added to the freelist in chunks of size LIST_ALLOC. + * Returns a ptr to the object, or NULL if the memory request fails. + */ + void **px; + void **pfree = pfreelist; + void **plast; + + assert(sizeof(char) == 1); + assert(size >= (int)sizeof(void *)); + assert(pfreelist != NULL); + assert(LIST_ALLOC > 0); + list_mutex_lock(&list_free_lock); + if (!*pfree) { + if ((*pfree = malloc(LIST_ALLOC * size))) { + px = *pfree; + plast = (void **) ((char *) *pfree + ((LIST_ALLOC - 1) * size)); + while (px < plast) + *px = (char *) px + size, px = *px; + *plast = NULL; + } + } + if ((px = *pfree)) + *pfree = *px; + else + errno = ENOMEM; + list_mutex_unlock(&list_free_lock); + return(px); +} + + +static void +list_free_aux (void *x, void *pfreelist) +{ +/* Frees the object [x], returning it to the freelist [*pfreelist]. + */ + void **px = x; + void **pfree = pfreelist; + + assert(x != NULL); + assert(pfreelist != NULL); + list_mutex_lock(&list_free_lock); + *px = *pfree; + *pfree = px; + list_mutex_unlock(&list_free_lock); + return; +} + + +#ifndef NDEBUG +#ifdef WITH_PTHREADS +static int +list_mutex_is_locked (pthread_mutex_t *mutex) +{ +/* Returns true if the mutex is locked; o/w, returns false. + */ + int rc; + + assert(mutex != NULL); + rc = pthread_mutex_trylock(mutex); + return(rc == EBUSY ? 1 : 0); +} +#endif /* WITH_PTHREADS */ +#endif /* !NDEBUG */ --- linux-aws-4.15.0.orig/spl/lib/list.h +++ linux-aws-4.15.0/spl/lib/list.h @@ -0,0 +1,279 @@ +/***************************************************************************** + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2001-2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Chris Dunlap . + * UCRL-CODE-235197 + * + * This file is from LSD-Tools, the LLNL Software Development Toolbox. + * + * LSD-Tools 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. + * + * LSD-Tools 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. + * + * You should have received a copy of the GNU General Public License along + * with LSD-Tools. If not, see . + *****************************************************************************/ + +#ifndef LSD_LIST_H +#define LSD_LIST_H + + +/*********** + * Notes * + ***********/ +/* + * If NDEBUG is not defined, internal debug code will be enabled. This is + * intended for development use only and production code should define NDEBUG. + * + * If WITH_LSD_FATAL_ERROR_FUNC is defined, the linker will expect to + * find an external lsd_fatal_error(file,line,mesg) function. By default, + * lsd_fatal_error(file,line,mesg) is a macro definition that outputs an + * error message to stderr. This macro may be redefined to invoke another + * routine instead. + * + * If WITH_LSD_NOMEM_ERROR_FUNC is defined, the linker will expect to + * find an external lsd_nomem_error(file,line,mesg) function. By default, + * lsd_nomem_error(file,line,mesg) is a macro definition that returns NULL. + * This macro may be redefined to invoke another routine instead. + * + * If WITH_PTHREADS is defined, these routines will be thread-safe. + */ + + +/**************** + * Data Types * + ****************/ + +typedef struct list * List; +/* + * List opaque data type. + */ + +typedef struct listIterator * ListIterator; +/* + * List Iterator opaque data type. + */ + +typedef void (*ListDelF) (void *x); +/* + * Function prototype to deallocate data stored in a list. + * This function is responsible for freeing all memory associated + * with an item, including all subordinate items (if applicable). + */ + +typedef int (*ListCmpF) (void *x, void *y); +/* + * Function prototype for comparing two items in a list. + * Returns less-than-zero if (xy). + */ + +typedef int (*ListFindF) (void *x, void *key); +/* + * Function prototype for matching items in a list. + * Returns non-zero if (x==key); o/w returns zero. + */ + +typedef int (*ListForF) (void *x, void *arg); +/* + * Function prototype for operating on each item in a list. + * Returns less-than-zero on error. + */ + + +/******************************* + * General-Purpose Functions * + *******************************/ + +List list_create (ListDelF f); +/* + * Creates and returns a new empty list, or lsd_nomem_error() on failure. + * The deletion function [f] is used to deallocate memory used by items + * in the list; if this is NULL, memory associated with these items + * will not be freed when the list is destroyed. + * Note: Abandoning a list without calling list_destroy() will result + * in a memory leak. + */ + +void list_destroy (List l); +/* + * Destroys list [l], freeing memory used for list iterators and the + * list itself; if a deletion function was specified when the list + * was created, it will be called for each item in the list. + */ + +int list_is_empty (List l); +/* + * Returns non-zero if list [l] is empty; o/w returns zero. + */ + +int list_count (List l); +/* + * Returns the number of items in list [l]. + */ + + +/*************************** + * List Access Functions * + ***************************/ + +void * list_append (List l, void *x); +/* + * Inserts data [x] at the end of list [l]. + * Returns the data's ptr, or lsd_nomem_error() if insertion failed. + */ + +void * list_prepend (List l, void *x); +/* + * Inserts data [x] at the beginning of list [l]. + * Returns the data's ptr, or lsd_nomem_error() if insertion failed. + */ + +void * list_find_first (List l, ListFindF f, void *key); +/* + * Traverses list [l] using [f] to match each item with [key]. + * Returns a ptr to the first item for which the function [f] + * returns non-zero, or NULL if no such item is found. + * Note: This function differs from list_find() in that it does not require + * a list iterator; it should only be used when all list items are known + * to be unique (according to the function [f]). + */ + +int list_delete_all (List l, ListFindF f, void *key); +/* + * Traverses list [l] using [f] to match each item with [key]. + * Removes all items from the list for which the function [f] returns + * non-zero; if a deletion function was specified when the list was + * created, it will be called to deallocate each item being removed. + * Returns a count of the number of items removed from the list. + */ + +int list_for_each (List l, ListForF f, void *arg); +/* + * For each item in list [l], invokes the function [f] with [arg]. + * Returns a count of the number of items on which [f] was invoked. + * If [f] returns <0 for a given item, the iteration is aborted and the + * function returns the negative of that item's position in the list. + */ + +void list_sort (List l, ListCmpF f); +/* + * Sorts list [l] into ascending order according to the function [f]. + * Note: Sorting a list resets all iterators associated with the list. + * Note: The sort algorithm is stable. + */ + + +/**************************** + * Stack Access Functions * + ****************************/ + +void * list_push (List l, void *x); +/* + * Pushes data [x] onto the top of stack [l]. + * Returns the data's ptr, or lsd_nomem_error() if insertion failed. + */ + +void * list_pop (List l); +/* + * Pops the data item at the top of the stack [l]. + * Returns the data's ptr, or NULL if the stack is empty. + */ + +void * list_peek (List l); +/* + * Peeks at the data item at the top of the stack (or head of the queue) [l]. + * Returns the data's ptr, or NULL if the stack (or queue) is empty. + * Note: The item is not removed from the list. + */ + + +/**************************** + * Queue Access Functions * + ****************************/ + +void * list_enqueue (List l, void *x); +/* + * Enqueues data [x] at the tail of queue [l]. + * Returns the data's ptr, or lsd_nomem_error() if insertion failed. + */ + +void * list_dequeue (List l); +/* + * Dequeues the data item at the head of the queue [l]. + * Returns the data's ptr, or NULL if the queue is empty. + */ + + +/***************************** + * List Iterator Functions * + *****************************/ + +ListIterator list_iterator_create (List l); +/* + * Creates and returns a list iterator for non-destructively traversing + * list [l], or lsd_nomem_error() on failure. + */ + +void list_iterator_reset (ListIterator i); +/* + * Resets the list iterator [i] to start traversal at the beginning + * of the list. + */ + +void list_iterator_destroy (ListIterator i); +/* + * Destroys the list iterator [i]; list iterators not explicitly destroyed + * in this manner will be destroyed when the list is deallocated via + * list_destroy(). + */ + +void * list_next (ListIterator i); +/* + * Returns a ptr to the next item's data, + * or NULL once the end of the list is reached. + * Example: i=list_iterator_create(i); while ((x=list_next(i))) {...} + */ + +void * list_insert (ListIterator i, void *x); +/* + * Inserts data [x] immediately before the last item returned via list + * iterator [i]; once the list iterator reaches the end of the list, + * insertion is made at the list's end. + * Returns the data's ptr, or lsd_nomem_error() if insertion failed. + */ + +void * list_find (ListIterator i, ListFindF f, void *key); +/* + * Traverses the list from the point of the list iterator [i] + * using [f] to match each item with [key]. + * Returns a ptr to the next item for which the function [f] + * returns non-zero, or NULL once the end of the list is reached. + * Example: i=list_iterator_reset(i); while ((x=list_find(i,f,k))) {...} + */ + +void * list_remove (ListIterator i); +/* + * Removes from the list the last item returned via list iterator [i] + * and returns the data's ptr. + * Note: The client is responsible for freeing the returned data. + */ + +int list_delete (ListIterator i); +/* + * Removes from the list the last item returned via list iterator [i]; + * if a deletion function was specified when the list was created, + * it will be called to deallocate the item being removed. + * Returns a count of the number of items removed from the list + * (ie, '1' if the item was removed, and '0' otherwise). + */ + + +#endif /* !LSD_LIST_H */ --- linux-aws-4.15.0.orig/spl/man/Makefile.am +++ linux-aws-4.15.0/spl/man/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = man1 man5 --- linux-aws-4.15.0.orig/spl/man/Makefile.in +++ linux-aws-4.15.0/spl/man/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = man +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = man1 man5 +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/man/man1/Makefile.am +++ linux-aws-4.15.0/spl/man/man1/Makefile.am @@ -0,0 +1,4 @@ +dist_man_MANS = splat.1 + +install-data-local: + $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man1" --- linux-aws-4.15.0.orig/spl/man/man1/Makefile.in +++ linux-aws-4.15.0/spl/man/man1/Makefile.in @@ -0,0 +1,576 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = man/man1 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(dist_man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_man_MANS = splat.1 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/man1/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/man1/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-man uninstall-man1 + +.PRECIOUS: Makefile + + +install-data-local: + $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man1" + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/man/man1/splat.1 +++ linux-aws-4.15.0/spl/man/man1/splat.1 @@ -0,0 +1,94 @@ +'\" t +.\" +.\" Copyright 2013 Darik Horn . All rights reserved. +.\" +.TH splat 1 "2013 MAR 16" "ZFS on Linux" "User Commands" + +.SH NAME +splat \- Solaris Porting LAyer Tests +.SH SYNOPSIS +.LP +.BI "splat [\-chvx] < \-\-all | \-\-list | \-\-test " "subsystem" ":" "test" " [...] >" + +.SH DESCRIPTION +This utility uses the splat.ko kernel module to test the spl.ko kernel +module. Run "modprobe splat" before invoking \fBsplat\fR. + +.SH OPTIONS +.HP +.BI "\-a" "" ", \-\-all" "" +.IP +Run all available tests on all subsystems. +.HP +.BI "\-c" "" ", \-\-nocolor" "" +.IP +Disable output highlighting. By default, "Fail" is printed in red text +and "Pass" is printed in green text. +.HP +.BI "\-h" "" ", \-\-help" "" +.IP +Print the usage message. +.HP +.BI "\-l" "" ", \-\-list" "" +.IP +For each spl.ko subsystem, print all available test names and +hexadecimal identifiers with a short description. +.HP +.BI "\-t" " subsystem" ":" "test" ", \-\-test" " subsystem" ":" "test" +.HP +.BI "\-t" " subsystem" ":all" "" ", \-\-test" " subsystem" ":all" "" +.IP +Run the \fItest\fR diagnostic routine for the spl.ko \fIsubsystem\fR. +Specify this option more than once to run multiple tests. + +The \fItest\fR and \fIsubsystem\fR parameters are the names or +hexadecimal identifiers returned by the \fBsplat --list\fR command. + +If \fIsubsystem\fR is a name and not a hexadecimal identifier, then the +\fBall\fR keyword can be used to run all available \fIsubsystem\fR +tests. + +.HP +.BI "\-v" "" ", \-\-verbose" "" +.HP +.IP +Increase verbosity. +.HP +.BI "\-x" "" ", \-\-exit" "" +.IP +Stop running tests after the first failure. + +.SH "EXAMPLES" +.LP +Test everything in the spl.ko kernel module: +.IP +# splat --all --verbose +.LP +Test the entire kernel memory subsystem: +.IP +# splat --test kmem:all +.LP +Test the kernel compression and queue waiting facilities: +.IP +# splat --test zlib:compress/uncompress --test taskq:wait +.LP +This is the same as the previous command, except that the subsystems +and tests are referenced by hexadecimal identifier instead of by name: +.IP +# splat -t 0x0f00:0x0f01 -t 0x0200:0x0204 + +.SH "NOTES" +All tests always return a green "Pass" result on a healthy system. Any +red "Fail" result should be investigated or reported. + +.SH "BUGS" +Some tests can deadlock the kernel if an X11 desktop is running, +especially if a proprietary blob driver is loaded for the video +hardware. + +.SH "AUTHORS" +This man page was written by Darik Horn . + +.SH "SEE ALSO" +.BR zpios (1), +.BR ztest (1) --- linux-aws-4.15.0.orig/spl/man/man5/Makefile.am +++ linux-aws-4.15.0/spl/man/man5/Makefile.am @@ -0,0 +1,4 @@ +dist_man_MANS = spl-module-parameters.5 + +install-data-local: + $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man5" --- linux-aws-4.15.0.orig/spl/man/man5/Makefile.in +++ linux-aws-4.15.0/spl/man/man5/Makefile.in @@ -0,0 +1,576 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = man/man5 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man5dir = $(mandir)/man5 +am__installdirs = "$(DESTDIR)$(man5dir)" +NROFF = nroff +MANS = $(dist_man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_man_MANS = spl-module-parameters.5 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/man5/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/man5/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man5: $(dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man5dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.5[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ + done; } + +uninstall-man5: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man5dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.5[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man5dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-data-local install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man5 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man5 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man5 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-man uninstall-man5 + +.PRECIOUS: Makefile + + +install-data-local: + $(INSTALL) -d -m 0755 "$(DESTDIR)$(mandir)/man5" + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/man/man5/spl-module-parameters.5 +++ linux-aws-4.15.0/spl/man/man5/spl-module-parameters.5 @@ -0,0 +1,357 @@ +'\" te +.\" +.\" Copyright 2013 Turbo Fredriksson . All rights reserved. +.\" +.TH SPL-MODULE-PARAMETERS 5 "Oct 28, 2017" +.SH NAME +spl\-module\-parameters \- SPL module parameters +.SH DESCRIPTION +.sp +.LP +Description of the different parameters to the SPL module. + +.SS "Module parameters" +.sp +.LP + +.sp +.ne 2 +.na +\fBspl_kmem_cache_expire\fR (uint) +.ad +.RS 12n +Cache expiration is part of default Illumos cache behavior. The idea is +that objects in magazines which have not been recently accessed should be +returned to the slabs periodically. This is known as cache aging and +when enabled objects will be typically returned after 15 seconds. +.sp +On the other hand Linux slabs are designed to never move objects back to +the slabs unless there is memory pressure. This is possible because under +Linux the cache will be notified when memory is low and objects can be +released. +.sp +By default only the Linux method is enabled. It has been shown to improve +responsiveness on low memory systems and not negatively impact the performance +of systems with more memory. This policy may be changed by setting the +\fBspl_kmem_cache_expire\fR bit mask as follows, both policies may be enabled +concurrently. +.sp +0x01 - Aging (Illumos), 0x02 - Low memory (Linux) +.sp +Default value: \fB0x02\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_kmem_threads\fR (uint) +.ad +.RS 12n +The number of threads created for the spl_kmem_cache task queue. This task +queue is responsible for allocating new slabs for use by the kmem caches. +For the majority of systems and workloads only a small number of threads are +required. +.sp +Default value: \fB4\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_reclaim\fR (uint) +.ad +.RS 12n +When this is set it prevents Linux from being able to rapidly reclaim all the +memory held by the kmem caches. This may be useful in circumstances where +it's preferable that Linux reclaim memory from some other subsystem first. +Setting this will increase the likelihood out of memory events on a memory +constrained system. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_obj_per_slab\fR (uint) +.ad +.RS 12n +The preferred number of objects per slab in the cache. In general, a larger +value will increase the caches memory footprint while decreasing the time +required to perform an allocation. Conversely, a smaller value will minimize +the footprint and improve cache reclaim time but individual allocations may +take longer. +.sp +Default value: \fB8\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_obj_per_slab_min\fR (uint) +.ad +.RS 12n +The minimum number of objects allowed per slab. Normally slabs will contain +\fBspl_kmem_cache_obj_per_slab\fR objects but for caches that contain very +large objects it's desirable to only have a few, or even just one, object per +slab. +.sp +Default value: \fB1\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_max_size\fR (uint) +.ad +.RS 12n +The maximum size of a kmem cache slab in MiB. This effectively limits +the maximum cache object size to \fBspl_kmem_cache_max_size\fR / +\fBspl_kmem_cache_obj_per_slab\fR. Caches may not be created with +object sized larger than this limit. +.sp +Default value: \fB32 (64-bit) or 4 (32-bit)\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_slab_limit\fR (uint) +.ad +.RS 12n +For small objects the Linux slab allocator should be used to make the most +efficient use of the memory. However, large objects are not supported by +the Linux slab and therefore the SPL implementation is preferred. This +value is used to determine the cutoff between a small and large object. +.sp +Objects of \fBspl_kmem_cache_slab_limit\fR or smaller will be allocated +using the Linux slab allocator, large objects use the SPL allocator. A +cutoff of 16K was determined to be optimal for architectures using 4K pages. +.sp +Default value: \fB16,384\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_kmem_limit\fR (uint) +.ad +.RS 12n +Depending on the size of a cache object it may be backed by kmalloc()'d +or vmalloc()'d memory. This is because the size of the required allocation +greatly impacts the best way to allocate the memory. +.sp +When objects are small and only a small number of memory pages need to be +allocated, ideally just one, then kmalloc() is very efficient. However, +when allocating multiple pages with kmalloc() it gets increasingly expensive +because the pages must be physically contiguous. +.sp +For this reason we shift to vmalloc() for slabs of large objects which +which removes the need for contiguous pages. We cannot use vmalloc() in +all cases because there is significant locking overhead involved. This +function takes a single global lock over the entire virtual address range +which serializes all allocations. Using slightly different allocation +functions for small and large objects allows us to handle a wide range of +object sizes. +.sp +The \fBspl_kmem_cache_kmem_limit\fR value is used to determine this cutoff +size. One quarter the PAGE_SIZE is used as the default value because +\fBspl_kmem_cache_obj_per_slab\fR defaults to 16. This means that at +most we will need to allocate four contiguous pages. +.sp +Default value: \fBPAGE_SIZE/4\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_alloc_warn\fR (uint) +.ad +.RS 12n +As a general rule kmem_alloc() allocations should be small, preferably +just a few pages since they must by physically contiguous. Therefore, a +rate limited warning will be printed to the console for any kmem_alloc() +which exceeds a reasonable threshold. +.sp +The default warning threshold is set to eight pages but capped at 32K to +accommodate systems using large pages. This value was selected to be small +enough to ensure the largest allocations are quickly noticed and fixed. +But large enough to avoid logging any warnings when a allocation size is +larger than optimal but not a serious concern. Since this value is tunable, +developers are encouraged to set it lower when testing so any new largish +allocations are quickly caught. These warnings may be disabled by setting +the threshold to zero. +.sp +Default value: \fB32,768\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_alloc_max\fR (uint) +.ad +.RS 12n +Large kmem_alloc() allocations will fail if they exceed KMALLOC_MAX_SIZE. +Allocations which are marginally smaller than this limit may succeed but +should still be avoided due to the expense of locating a contiguous range +of free pages. Therefore, a maximum kmem size with reasonable safely +margin of 4x is set. Kmem_alloc() allocations larger than this maximum +will quickly fail. Vmem_alloc() allocations less than or equal to this +value will use kmalloc(), but shift to vmalloc() when exceeding this value. +.sp +Default value: \fBKMALLOC_MAX_SIZE/4\fR +.RE + +.sp +.ne 2 +.na +\fBspl_kmem_cache_magazine_size\fR (uint) +.ad +.RS 12n +Cache magazines are an optimization designed to minimize the cost of +allocating memory. They do this by keeping a per-cpu cache of recently +freed objects, which can then be reallocated without taking a lock. This +can improve performance on highly contended caches. However, because +objects in magazines will prevent otherwise empty slabs from being +immediately released this may not be ideal for low memory machines. +.sp +For this reason \fBspl_kmem_cache_magazine_size\fR can be used to set a +maximum magazine size. When this value is set to 0 the magazine size will +be automatically determined based on the object size. Otherwise magazines +will be limited to 2-256 objects per magazine (i.e per cpu). Magazines +may never be entirely disabled in this implementation. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_hostid\fR (ulong) +.ad +.RS 12n +The system hostid, when set this can be used to uniquely identify a system. +By default this value is set to zero which indicates the hostid is disabled. +It can be explicitly enabled by placing a unique non-zero value in +\fB/etc/hostid/\fR. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_hostid_path\fR (charp) +.ad +.RS 12n +The expected path to locate the system hostid when specified. This value +may be overridden for non-standard configurations. +.sp +Default value: \fB/etc/hostid\fR +.RE + +.sp +.ne 2 +.na +\fBspl_panic_halt\fR (uint) +.ad +.RS 12n +Cause a kernel panic on assertion failures. When not enabled, the thread is +halted to facilitate further debugging. +.sp +Set to a non-zero value to enable. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_taskq_kick\fR (uint) +.ad +.RS 12n +Kick stuck taskq to spawn threads. When writing a non-zero value to it, it will +scan all the taskqs. If any of them have a pending task more than 5 seconds old, +it will kick it to spawn more threads. This can be used if you find a rare +deadlock occurs because one or more taskqs didn't spawn a thread when it should. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_taskq_thread_bind\fR (int) +.ad +.RS 12n +Bind taskq threads to specific CPUs. When enabled all taskq threads will +be distributed evenly over the available CPUs. By default, this behavior +is disabled to allow the Linux scheduler the maximum flexibility to determine +where a thread should run. +.sp +Default value: \fB0\fR +.RE + +.sp +.ne 2 +.na +\fBspl_taskq_thread_dynamic\fR (int) +.ad +.RS 12n +Allow dynamic taskqs. When enabled taskqs which set the TASKQ_DYNAMIC flag +will by default create only a single thread. New threads will be created on +demand up to a maximum allowed number to facilitate the completion of +outstanding tasks. Threads which are no longer needed will be promptly +destroyed. By default this behavior is enabled but it can be disabled to +aid performance analysis or troubleshooting. +.sp +Default value: \fB1\fR +.RE + +.sp +.ne 2 +.na +\fBspl_taskq_thread_priority\fR (int) +.ad +.RS 12n +Allow newly created taskq threads to set a non-default scheduler priority. +When enabled the priority specified when a taskq is created will be applied +to all threads created by that taskq. When disabled all threads will use +the default Linux kernel thread priority. By default, this behavior is +enabled. +.sp +Default value: \fB1\fR +.RE + +.sp +.ne 2 +.na +\fBspl_taskq_thread_sequential\fR (int) +.ad +.RS 12n +The number of items a taskq worker thread must handle without interruption +before requesting a new worker thread be spawned. This is used to control +how quickly taskqs ramp up the number of threads processing the queue. +Because Linux thread creation and destruction are relatively inexpensive a +small default value has been selected. This means that normally threads will +be created aggressively which is desirable. Increasing this value will +result in a slower thread creation rate which may be preferable for some +configurations. +.sp +Default value: \fB4\fR +.RE + +.sp +.ne 2 +.na +\fBspl_max_show_tasks\fR (uint) +.ad +.RS 12n +The maximum number of tasks per pending list in each taskq shown in +/proc/spl/{taskq,taskq-all}. Write 0 to turn off the limit. The proc file will +walk the lists with lock held, reading it could cause a lock up if the list +grow too large without limiting the output. "(truncated)" will be shown if the +list is larger than the limit. +.sp +Default value: \fB512\fR +.RE --- linux-aws-4.15.0.orig/spl/module/Makefile.in +++ linux-aws-4.15.0/spl/module/Makefile.in @@ -0,0 +1,54 @@ +subdir-m += spl +subdir-m += splat + +INSTALL_MOD_DIR ?= extra + +SPL_MODULE_CFLAGS = -I@abs_top_srcdir@/include +SPL_MODULE_CFLAGS += -include @abs_top_builddir@/spl_config.h +export SPL_MODULE_CFLAGS + +modules: + $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_SPL=m $@ + +clean: + @# Only cleanup the kernel build directories when CONFIG_KERNEL + @# is defined. This indicates that kernel modules should be built. +@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@ + + if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi + if [ -f Module.markers ]; then $(RM) Module.markers; fi + +modules_install: + @# Install the kernel modules + $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` $@ \ + INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \ + INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \ + KERNELRELEASE=@LINUX_VERSION@ + @# Remove extraneous build products when packaging + kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ + if [ -n "$(DESTDIR)" ]; then \ + find $$kmoddir -name 'modules.*' | xargs $(RM); \ + fi + sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \ + if [ -f $$sysmap ]; then \ + depmod -ae -F $$sysmap @LINUX_VERSION@; \ + fi + +modules_uninstall: + @# Uninstall the kernel modules + kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@ + list='$(subdir-m)'; for subdir in $$list; do \ + $(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$subdir; \ + done + +distdir: + list='$(subdir-m)'; for subdir in $$list; do \ + (find @top_srcdir@/module/$$subdir -name '*.c' -o -name '*.h' |\ + xargs /bin/cp -t $$distdir/$$subdir); \ + done + +distclean maintainer-clean: clean +install: modules_install +uninstall: modules_uninstall +all: modules +check: --- linux-aws-4.15.0.orig/spl/module/spl/Makefile.in +++ linux-aws-4.15.0/spl/module/spl/Makefile.in @@ -0,0 +1,30 @@ +# Makefile.in for spl kernel module + +src = @abs_top_srcdir@/module/spl +obj = @abs_builddir@ + +MODULE := spl +EXTRA_CFLAGS = $(SPL_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +# Solaris porting layer module +obj-$(CONFIG_SPL) := $(MODULE).o + +$(MODULE)-objs += spl-proc.o +$(MODULE)-objs += spl-kmem.o +$(MODULE)-objs += spl-kmem-cache.o +$(MODULE)-objs += spl-vmem.o +$(MODULE)-objs += spl-thread.o +$(MODULE)-objs += spl-taskq.o +$(MODULE)-objs += spl-rwlock.o +$(MODULE)-objs += spl-vnode.o +$(MODULE)-objs += spl-err.o +$(MODULE)-objs += spl-kobj.o +$(MODULE)-objs += spl-generic.o +$(MODULE)-objs += spl-atomic.o +$(MODULE)-objs += spl-mutex.o +$(MODULE)-objs += spl-kstat.o +$(MODULE)-objs += spl-condvar.o +$(MODULE)-objs += spl-xdr.o +$(MODULE)-objs += spl-cred.o +$(MODULE)-objs += spl-tsd.o +$(MODULE)-objs += spl-zlib.o --- linux-aws-4.15.0.orig/spl/module/spl/spl-atomic.c +++ linux-aws-4.15.0/spl/module/spl/spl-atomic.c @@ -0,0 +1,42 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Atomic Implementation. +\*****************************************************************************/ + +#include + +#ifdef DEBUG_SUBSYSTEM +#undef DEBUG_SUBSYSTEM +#endif + +#define DEBUG_SUBSYSTEM S_ATOMIC + +#ifdef ATOMIC_SPINLOCK +/* Global atomic lock declarations */ +DEFINE_SPINLOCK(atomic32_lock); +DEFINE_SPINLOCK(atomic64_lock); + +EXPORT_SYMBOL(atomic32_lock); +EXPORT_SYMBOL(atomic64_lock); +#endif /* ATOMIC_SPINLOCK */ --- linux-aws-4.15.0.orig/spl/module/spl/spl-condvar.c +++ linux-aws-4.15.0/spl/module/spl/spl-condvar.c @@ -0,0 +1,368 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + * + * Solaris Porting Layer (SPL) Credential Implementation. + */ + +#include +#include +#include + +void +__cv_init(kcondvar_t *cvp, char *name, kcv_type_t type, void *arg) +{ + ASSERT(cvp); + ASSERT(name == NULL); + ASSERT(type == CV_DEFAULT); + ASSERT(arg == NULL); + + cvp->cv_magic = CV_MAGIC; + init_waitqueue_head(&cvp->cv_event); + init_waitqueue_head(&cvp->cv_destroy); + atomic_set(&cvp->cv_waiters, 0); + atomic_set(&cvp->cv_refs, 1); + cvp->cv_mutex = NULL; +} +EXPORT_SYMBOL(__cv_init); + +static int +cv_destroy_wakeup(kcondvar_t *cvp) +{ + if (!atomic_read(&cvp->cv_waiters) && !atomic_read(&cvp->cv_refs)) { + ASSERT(cvp->cv_mutex == NULL); + ASSERT(!waitqueue_active(&cvp->cv_event)); + return (1); + } + + return (0); +} + +void +__cv_destroy(kcondvar_t *cvp) +{ + ASSERT(cvp); + ASSERT(cvp->cv_magic == CV_MAGIC); + + cvp->cv_magic = CV_DESTROY; + atomic_dec(&cvp->cv_refs); + + /* Block until all waiters are woken and references dropped. */ + while (cv_destroy_wakeup(cvp) == 0) + wait_event_timeout(cvp->cv_destroy, cv_destroy_wakeup(cvp), 1); + + ASSERT3P(cvp->cv_mutex, ==, NULL); + ASSERT3S(atomic_read(&cvp->cv_refs), ==, 0); + ASSERT3S(atomic_read(&cvp->cv_waiters), ==, 0); + ASSERT3S(waitqueue_active(&cvp->cv_event), ==, 0); +} +EXPORT_SYMBOL(__cv_destroy); + +static void +cv_wait_common(kcondvar_t *cvp, kmutex_t *mp, int state, int io) +{ + DEFINE_WAIT(wait); + kmutex_t *m; + + ASSERT(cvp); + ASSERT(mp); + ASSERT(cvp->cv_magic == CV_MAGIC); + ASSERT(mutex_owned(mp)); + atomic_inc(&cvp->cv_refs); + + m = ACCESS_ONCE(cvp->cv_mutex); + if (!m) + m = xchg(&cvp->cv_mutex, mp); + /* Ensure the same mutex is used by all callers */ + ASSERT(m == NULL || m == mp); + + prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); + atomic_inc(&cvp->cv_waiters); + + /* + * Mutex should be dropped after prepare_to_wait() this + * ensures we're linked in to the waiters list and avoids the + * race where 'cvp->cv_waiters > 0' but the list is empty. + */ + mutex_exit(mp); + if (io) + io_schedule(); + else + schedule(); + + /* No more waiters a different mutex could be used */ + if (atomic_dec_and_test(&cvp->cv_waiters)) { + /* + * This is set without any lock, so it's racy. But this is + * just for debug anyway, so make it best-effort + */ + cvp->cv_mutex = NULL; + wake_up(&cvp->cv_destroy); + } + + finish_wait(&cvp->cv_event, &wait); + atomic_dec(&cvp->cv_refs); + + /* + * Hold mutex after we release the cvp, otherwise we could dead lock + * with a thread holding the mutex and call cv_destroy. + */ + mutex_enter(mp); +} + +void +__cv_wait(kcondvar_t *cvp, kmutex_t *mp) +{ + cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 0); +} +EXPORT_SYMBOL(__cv_wait); + +void +__cv_wait_sig(kcondvar_t *cvp, kmutex_t *mp) +{ + cv_wait_common(cvp, mp, TASK_INTERRUPTIBLE, 0); +} +EXPORT_SYMBOL(__cv_wait_sig); + +void +__cv_wait_io(kcondvar_t *cvp, kmutex_t *mp) +{ + cv_wait_common(cvp, mp, TASK_UNINTERRUPTIBLE, 1); +} +EXPORT_SYMBOL(__cv_wait_io); + +/* + * 'expire_time' argument is an absolute wall clock time in jiffies. + * Return value is time left (expire_time - now) or -1 if timeout occurred. + */ +static clock_t +__cv_timedwait_common(kcondvar_t *cvp, kmutex_t *mp, clock_t expire_time, + int state) +{ + DEFINE_WAIT(wait); + kmutex_t *m; + clock_t time_left; + + ASSERT(cvp); + ASSERT(mp); + ASSERT(cvp->cv_magic == CV_MAGIC); + ASSERT(mutex_owned(mp)); + + /* XXX - Does not handle jiffie wrap properly */ + time_left = expire_time - jiffies; + if (time_left <= 0) + return (-1); + + atomic_inc(&cvp->cv_refs); + m = ACCESS_ONCE(cvp->cv_mutex); + if (!m) + m = xchg(&cvp->cv_mutex, mp); + /* Ensure the same mutex is used by all callers */ + ASSERT(m == NULL || m == mp); + + prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); + atomic_inc(&cvp->cv_waiters); + + /* + * Mutex should be dropped after prepare_to_wait() this + * ensures we're linked in to the waiters list and avoids the + * race where 'cvp->cv_waiters > 0' but the list is empty. + */ + mutex_exit(mp); + time_left = schedule_timeout(time_left); + + /* No more waiters a different mutex could be used */ + if (atomic_dec_and_test(&cvp->cv_waiters)) { + /* + * This is set without any lock, so it's racy. But this is + * just for debug anyway, so make it best-effort + */ + cvp->cv_mutex = NULL; + wake_up(&cvp->cv_destroy); + } + + finish_wait(&cvp->cv_event, &wait); + atomic_dec(&cvp->cv_refs); + + /* + * Hold mutex after we release the cvp, otherwise we could dead lock + * with a thread holding the mutex and call cv_destroy. + */ + mutex_enter(mp); + return (time_left > 0 ? time_left : -1); +} + +clock_t +__cv_timedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) +{ + return (__cv_timedwait_common(cvp, mp, exp_time, TASK_UNINTERRUPTIBLE)); +} +EXPORT_SYMBOL(__cv_timedwait); + +clock_t +__cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t exp_time) +{ + return (__cv_timedwait_common(cvp, mp, exp_time, TASK_INTERRUPTIBLE)); +} +EXPORT_SYMBOL(__cv_timedwait_sig); + +/* + * 'expire_time' argument is an absolute clock time in nanoseconds. + * Return value is time left (expire_time - now) or -1 if timeout occurred. + */ +static clock_t +__cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t expire_time, + int state) +{ + DEFINE_WAIT(wait); + kmutex_t *m; + hrtime_t time_left; + ktime_t ktime_left; + + ASSERT(cvp); + ASSERT(mp); + ASSERT(cvp->cv_magic == CV_MAGIC); + ASSERT(mutex_owned(mp)); + + time_left = expire_time - gethrtime(); + if (time_left <= 0) + return (-1); + + atomic_inc(&cvp->cv_refs); + m = ACCESS_ONCE(cvp->cv_mutex); + if (!m) + m = xchg(&cvp->cv_mutex, mp); + /* Ensure the same mutex is used by all callers */ + ASSERT(m == NULL || m == mp); + + prepare_to_wait_exclusive(&cvp->cv_event, &wait, state); + atomic_inc(&cvp->cv_waiters); + + /* + * Mutex should be dropped after prepare_to_wait() this + * ensures we're linked in to the waiters list and avoids the + * race where 'cvp->cv_waiters > 0' but the list is empty. + */ + mutex_exit(mp); + /* + * Allow a 100 us range to give kernel an opportunity to coalesce + * interrupts + */ + ktime_left = ktime_set(0, time_left); + schedule_hrtimeout_range(&ktime_left, 100 * NSEC_PER_USEC, + HRTIMER_MODE_REL); + + /* No more waiters a different mutex could be used */ + if (atomic_dec_and_test(&cvp->cv_waiters)) { + /* + * This is set without any lock, so it's racy. But this is + * just for debug anyway, so make it best-effort + */ + cvp->cv_mutex = NULL; + wake_up(&cvp->cv_destroy); + } + + finish_wait(&cvp->cv_event, &wait); + atomic_dec(&cvp->cv_refs); + + mutex_enter(mp); + time_left = expire_time - gethrtime(); + return (time_left > 0 ? NSEC_TO_TICK(time_left) : -1); +} + +/* + * Compatibility wrapper for the cv_timedwait_hires() Illumos interface. + */ +static clock_t +cv_timedwait_hires_common(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, + int flag, int state) +{ + if (res > 1) { + /* + * Align expiration to the specified resolution. + */ + if (flag & CALLOUT_FLAG_ROUNDUP) + tim += res - 1; + tim = (tim / res) * res; + } + + if (!(flag & CALLOUT_FLAG_ABSOLUTE)) + tim += gethrtime(); + + return (__cv_timedwait_hires(cvp, mp, tim, state)); +} + +clock_t +cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, + int flag) +{ + return (cv_timedwait_hires_common(cvp, mp, tim, res, flag, + TASK_UNINTERRUPTIBLE)); +} +EXPORT_SYMBOL(cv_timedwait_hires); + +clock_t +cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, + int flag) +{ + return (cv_timedwait_hires_common(cvp, mp, tim, res, flag, + TASK_INTERRUPTIBLE)); +} +EXPORT_SYMBOL(cv_timedwait_sig_hires); + +void +__cv_signal(kcondvar_t *cvp) +{ + ASSERT(cvp); + ASSERT(cvp->cv_magic == CV_MAGIC); + atomic_inc(&cvp->cv_refs); + + /* + * All waiters are added with WQ_FLAG_EXCLUSIVE so only one + * waiter will be set runable with each call to wake_up(). + * Additionally wake_up() holds a spin_lock assoicated with + * the wait queue to ensure we don't race waking up processes. + */ + if (atomic_read(&cvp->cv_waiters) > 0) + wake_up(&cvp->cv_event); + + atomic_dec(&cvp->cv_refs); +} +EXPORT_SYMBOL(__cv_signal); + +void +__cv_broadcast(kcondvar_t *cvp) +{ + ASSERT(cvp); + ASSERT(cvp->cv_magic == CV_MAGIC); + atomic_inc(&cvp->cv_refs); + + /* + * Wake_up_all() will wake up all waiters even those which + * have the WQ_FLAG_EXCLUSIVE flag set. + */ + if (atomic_read(&cvp->cv_waiters) > 0) + wake_up_all(&cvp->cv_event); + + atomic_dec(&cvp->cv_refs); +} +EXPORT_SYMBOL(__cv_broadcast); --- linux-aws-4.15.0.orig/spl/module/spl/spl-cred.c +++ linux-aws-4.15.0/spl/module/spl/spl-cred.c @@ -0,0 +1,206 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Credential Implementation. +\*****************************************************************************/ + +#include + +#ifdef DEBUG_SUBSYSTEM +#undef DEBUG_SUBSYSTEM +#endif + +#define DEBUG_SUBSYSTEM S_CRED + +static int +#ifdef HAVE_KUIDGID_T +cr_groups_search(const struct group_info *group_info, kgid_t grp) +#else +cr_groups_search(const struct group_info *group_info, gid_t grp) +#endif +{ + unsigned int left, right, mid; + int cmp; + + if (!group_info) + return 0; + + left = 0; + right = group_info->ngroups; + while (left < right) { + mid = (left + right) / 2; + cmp = KGID_TO_SGID(grp) - + KGID_TO_SGID(GROUP_AT(group_info, mid)); + + if (cmp > 0) + left = mid + 1; + else if (cmp < 0) + right = mid; + else + return 1; + } + return 0; +} + +/* Hold a reference on the credential */ +void +crhold(cred_t *cr) +{ + (void)get_cred((const cred_t *)cr); +} + +/* Free a reference on the credential */ +void +crfree(cred_t *cr) +{ + put_cred((const cred_t *)cr); +} + +/* Return the number of supplemental groups */ +int +crgetngroups(const cred_t *cr) +{ + struct group_info *gi; + int rc; + + gi = cr->group_info; + rc = gi->ngroups; +#ifndef HAVE_GROUP_INFO_GID + /* + * For Linux <= 4.8, + * crgetgroups will only returns gi->blocks[0], which contains only + * the first NGROUPS_PER_BLOCK groups. + */ + if (rc > NGROUPS_PER_BLOCK) { + WARN_ON_ONCE(1); + rc = NGROUPS_PER_BLOCK; + } +#endif + return rc; +} + +/* + * Return an array of supplemental gids. The returned address is safe + * to use as long as the caller has taken a reference with crhold(). + * + * Linux 4.9 API change, group_info changed from 2d array via ->blocks to 1d + * array via ->gid. + */ +gid_t * +crgetgroups(const cred_t *cr) +{ + struct group_info *gi; + gid_t *gids = NULL; + + gi = cr->group_info; +#ifdef HAVE_GROUP_INFO_GID + gids = KGIDP_TO_SGIDP(gi->gid); +#else + if (gi->nblocks > 0) + gids = KGIDP_TO_SGIDP(gi->blocks[0]); +#endif + return gids; +} + +/* Check if the passed gid is available in supplied credential. */ +int +groupmember(gid_t gid, const cred_t *cr) +{ + struct group_info *gi; + int rc; + + gi = cr->group_info; + rc = cr_groups_search(gi, SGID_TO_KGID(gid)); + + return rc; +} + +/* Return the effective user id */ +uid_t +crgetuid(const cred_t *cr) +{ + return KUID_TO_SUID(cr->euid); +} + +/* Return the real user id */ +uid_t +crgetruid(const cred_t *cr) +{ + return KUID_TO_SUID(cr->uid); +} + +/* Return the saved user id */ +uid_t +crgetsuid(const cred_t *cr) +{ + return KUID_TO_SUID(cr->suid); +} + +/* Return the filesystem user id */ +uid_t +crgetfsuid(const cred_t *cr) +{ + return KUID_TO_SUID(cr->fsuid); +} + +/* Return the effective group id */ +gid_t +crgetgid(const cred_t *cr) +{ + return KGID_TO_SGID(cr->egid); +} + +/* Return the real group id */ +gid_t +crgetrgid(const cred_t *cr) +{ + return KGID_TO_SGID(cr->gid); +} + +/* Return the saved group id */ +gid_t +crgetsgid(const cred_t *cr) +{ + return KGID_TO_SGID(cr->sgid); +} + +/* Return the filesystem group id */ +gid_t +crgetfsgid(const cred_t *cr) +{ + return KGID_TO_SGID(cr->fsgid); +} + +EXPORT_SYMBOL(crhold); +EXPORT_SYMBOL(crfree); +EXPORT_SYMBOL(crgetuid); +EXPORT_SYMBOL(crgetruid); +EXPORT_SYMBOL(crgetsuid); +EXPORT_SYMBOL(crgetfsuid); +EXPORT_SYMBOL(crgetgid); +EXPORT_SYMBOL(crgetrgid); +EXPORT_SYMBOL(crgetsgid); +EXPORT_SYMBOL(crgetfsgid); +EXPORT_SYMBOL(crgetngroups); +EXPORT_SYMBOL(crgetgroups); +EXPORT_SYMBOL(groupmember); --- linux-aws-4.15.0.orig/spl/module/spl/spl-err.c +++ linux-aws-4.15.0/spl/module/spl/spl-err.c @@ -0,0 +1,131 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Error Implementation. +\*****************************************************************************/ + +#include +#include +#include + +/* + * It is often useful to actually have the panic crash the node so you + * can then get notified of the event, get the crashdump for later + * analysis and other such goodies. + * But we would still default to the current default of not to do that. + */ +unsigned int spl_panic_halt; +module_param(spl_panic_halt, uint, 0644); +MODULE_PARM_DESC(spl_panic_halt, + "Cause kernel panic on assertion failures"); + +/* + * Limit the number of stack traces dumped to not more than 5 every + * 60 seconds to prevent denial-of-service attacks from debug code. + */ +DEFINE_RATELIMIT_STATE(dumpstack_ratelimit_state, 60 * HZ, 5); + +void +spl_dumpstack(void) +{ + if (__ratelimit(&dumpstack_ratelimit_state)) { + printk("Showing stack for process %d\n", current->pid); + dump_stack(); + } +} +EXPORT_SYMBOL(spl_dumpstack); + +int +spl_panic(const char *file, const char *func, int line, const char *fmt, ...) { + const char *newfile; + char msg[MAXMSGLEN]; + va_list ap; + + newfile = strrchr(file, '/'); + if (newfile != NULL) + newfile = newfile + 1; + else + newfile = file; + + va_start(ap, fmt); + (void) vsnprintf(msg, sizeof (msg), fmt, ap); + va_end(ap); + + printk(KERN_EMERG "%s", msg); + printk(KERN_EMERG "PANIC at %s:%d:%s()\n", newfile, line, func); + if (spl_panic_halt) + panic("%s", msg); + + spl_dumpstack(); + + /* Halt the thread to facilitate further debugging */ + set_current_state(TASK_UNINTERRUPTIBLE); + while (1) + schedule(); + + /* Unreachable */ + return (1); +} +EXPORT_SYMBOL(spl_panic); + +void +vcmn_err(int ce, const char *fmt, va_list ap) +{ + char msg[MAXMSGLEN]; + + vsnprintf(msg, MAXMSGLEN - 1, fmt, ap); + + switch (ce) { + case CE_IGNORE: + break; + case CE_CONT: + printk("%s", msg); + break; + case CE_NOTE: + printk(KERN_NOTICE "NOTICE: %s\n", msg); + break; + case CE_WARN: + printk(KERN_WARNING "WARNING: %s\n", msg); + break; + case CE_PANIC: + printk(KERN_EMERG "PANIC: %s\n", msg); + spl_dumpstack(); + + /* Halt the thread to facilitate further debugging */ + set_current_state(TASK_UNINTERRUPTIBLE); + while (1) + schedule(); + } +} /* vcmn_err() */ +EXPORT_SYMBOL(vcmn_err); + +void +cmn_err(int ce, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vcmn_err(ce, fmt, ap); + va_end(ap); +} /* cmn_err() */ +EXPORT_SYMBOL(cmn_err); --- linux-aws-4.15.0.orig/spl/module/spl/spl-generic.c +++ linux-aws-4.15.0/spl/module/spl/spl-generic.c @@ -0,0 +1,759 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Generic Implementation. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char spl_version[32] = "SPL v" SPL_META_VERSION "-" SPL_META_RELEASE; +EXPORT_SYMBOL(spl_version); + +unsigned long spl_hostid = 0; +EXPORT_SYMBOL(spl_hostid); +module_param(spl_hostid, ulong, 0644); +MODULE_PARM_DESC(spl_hostid, "The system hostid."); + +proc_t p0; +EXPORT_SYMBOL(p0); + +/* + * Xorshift Pseudo Random Number Generator based on work by Sebastiano Vigna + * + * "Further scramblings of Marsaglia's xorshift generators" + * http://vigna.di.unimi.it/ftp/papers/xorshiftplus.pdf + * + * random_get_pseudo_bytes() is an API function on Illumos whose sole purpose + * is to provide bytes containing random numbers. It is mapped to /dev/urandom + * on Illumos, which uses a "FIPS 186-2 algorithm". No user of the SPL's + * random_get_pseudo_bytes() needs bytes that are of cryptographic quality, so + * we can implement it using a fast PRNG that we seed using Linux' actual + * equivalent to random_get_pseudo_bytes(). We do this by providing each CPU + * with an independent seed so that all calls to random_get_pseudo_bytes() are + * free of atomic instructions. + * + * A consequence of using a fast PRNG is that using random_get_pseudo_bytes() + * to generate words larger than 128 bits will paradoxically be limited to + * `2^128 - 1` possibilities. This is because we have a sequence of `2^128 - 1` + * 128-bit words and selecting the first will implicitly select the second. If + * a caller finds this behavior undesireable, random_get_bytes() should be used + * instead. + * + * XXX: Linux interrupt handlers that trigger within the critical section + * formed by `s[1] = xp[1];` and `xp[0] = s[0];` and call this function will + * see the same numbers. Nothing in the code currently calls this in an + * interrupt handler, so this is considered to be okay. If that becomes a + * problem, we could create a set of per-cpu variables for interrupt handlers + * and use them when in_interrupt() from linux/preempt_mask.h evaluates to + * true. + */ +static DEFINE_PER_CPU(uint64_t[2], spl_pseudo_entropy); + +/* + * spl_rand_next()/spl_rand_jump() are copied from the following CC-0 licensed + * file: + * + * http://xorshift.di.unimi.it/xorshift128plus.c + */ + +static inline uint64_t +spl_rand_next(uint64_t *s) { + uint64_t s1 = s[0]; + const uint64_t s0 = s[1]; + s[0] = s0; + s1 ^= s1 << 23; // a + s[1] = s1 ^ s0 ^ (s1 >> 18) ^ (s0 >> 5); // b, c + return (s[1] + s0); +} + +static inline void +spl_rand_jump(uint64_t *s) { + static const uint64_t JUMP[] = { 0x8a5cd789635d2dff, 0x121fd2155c472f96 }; + + uint64_t s0 = 0; + uint64_t s1 = 0; + int i, b; + for(i = 0; i < sizeof JUMP / sizeof *JUMP; i++) + for(b = 0; b < 64; b++) { + if (JUMP[i] & 1ULL << b) { + s0 ^= s[0]; + s1 ^= s[1]; + } + (void) spl_rand_next(s); + } + + s[0] = s0; + s[1] = s1; +} + +int +random_get_pseudo_bytes(uint8_t *ptr, size_t len) +{ + uint64_t *xp, s[2]; + + ASSERT(ptr); + + xp = get_cpu_var(spl_pseudo_entropy); + + s[0] = xp[0]; + s[1] = xp[1]; + + while (len) { + union { + uint64_t ui64; + uint8_t byte[sizeof (uint64_t)]; + }entropy; + int i = MIN(len, sizeof (uint64_t)); + + len -= i; + entropy.ui64 = spl_rand_next(s); + + while (i--) + *ptr++ = entropy.byte[i]; + } + + xp[0] = s[0]; + xp[1] = s[1]; + + put_cpu_var(spl_pseudo_entropy); + + return (0); +} + + +EXPORT_SYMBOL(random_get_pseudo_bytes); + +#if BITS_PER_LONG == 32 +/* + * Support 64/64 => 64 division on a 32-bit platform. While the kernel + * provides a div64_u64() function for this we do not use it because the + * implementation is flawed. There are cases which return incorrect + * results as late as linux-2.6.35. Until this is fixed upstream the + * spl must provide its own implementation. + * + * This implementation is a slightly modified version of the algorithm + * proposed by the book 'Hacker's Delight'. The original source can be + * found here and is available for use without restriction. + * + * http://www.hackersdelight.org/HDcode/newCode/divDouble.c + */ + +/* + * Calculate number of leading of zeros for a 64-bit value. + */ +static int +nlz64(uint64_t x) { + register int n = 0; + + if (x == 0) + return 64; + + if (x <= 0x00000000FFFFFFFFULL) {n = n + 32; x = x << 32;} + if (x <= 0x0000FFFFFFFFFFFFULL) {n = n + 16; x = x << 16;} + if (x <= 0x00FFFFFFFFFFFFFFULL) {n = n + 8; x = x << 8;} + if (x <= 0x0FFFFFFFFFFFFFFFULL) {n = n + 4; x = x << 4;} + if (x <= 0x3FFFFFFFFFFFFFFFULL) {n = n + 2; x = x << 2;} + if (x <= 0x7FFFFFFFFFFFFFFFULL) {n = n + 1;} + + return n; +} + +/* + * Newer kernels have a div_u64() function but we define our own + * to simplify portibility between kernel versions. + */ +static inline uint64_t +__div_u64(uint64_t u, uint32_t v) +{ + (void) do_div(u, v); + return u; +} + +/* + * Implementation of 64-bit unsigned division for 32-bit machines. + * + * First the procedure takes care of the case in which the divisor is a + * 32-bit quantity. There are two subcases: (1) If the left half of the + * dividend is less than the divisor, one execution of do_div() is all that + * is required (overflow is not possible). (2) Otherwise it does two + * divisions, using the grade school method. + */ +uint64_t +__udivdi3(uint64_t u, uint64_t v) +{ + uint64_t u0, u1, v1, q0, q1, k; + int n; + + if (v >> 32 == 0) { // If v < 2**32: + if (u >> 32 < v) { // If u/v cannot overflow, + return __div_u64(u, v); // just do one division. + } else { // If u/v would overflow: + u1 = u >> 32; // Break u into two halves. + u0 = u & 0xFFFFFFFF; + q1 = __div_u64(u1, v); // First quotient digit. + k = u1 - q1 * v; // First remainder, < v. + u0 += (k << 32); + q0 = __div_u64(u0, v); // Seconds quotient digit. + return (q1 << 32) + q0; + } + } else { // If v >= 2**32: + n = nlz64(v); // 0 <= n <= 31. + v1 = (v << n) >> 32; // Normalize divisor, MSB is 1. + u1 = u >> 1; // To ensure no overflow. + q1 = __div_u64(u1, v1); // Get quotient from + q0 = (q1 << n) >> 31; // Undo normalization and + // division of u by 2. + if (q0 != 0) // Make q0 correct or + q0 = q0 - 1; // too small by 1. + if ((u - q0 * v) >= v) + q0 = q0 + 1; // Now q0 is correct. + + return q0; + } +} +EXPORT_SYMBOL(__udivdi3); + +/* + * Implementation of 64-bit signed division for 32-bit machines. + */ +int64_t +__divdi3(int64_t u, int64_t v) +{ + int64_t q, t; + q = __udivdi3(abs64(u), abs64(v)); + t = (u ^ v) >> 63; // If u, v have different + return (q ^ t) - t; // signs, negate q. +} +EXPORT_SYMBOL(__divdi3); + +/* + * Implementation of 64-bit unsigned modulo for 32-bit machines. + */ +uint64_t +__umoddi3(uint64_t dividend, uint64_t divisor) +{ + return (dividend - (divisor * __udivdi3(dividend, divisor))); +} +EXPORT_SYMBOL(__umoddi3); + +/* + * Implementation of 64-bit unsigned division/modulo for 32-bit machines. + */ +uint64_t +__udivmoddi4(uint64_t n, uint64_t d, uint64_t *r) +{ + uint64_t q = __udivdi3(n, d); + if (r) + *r = n - d * q; + return (q); +} +EXPORT_SYMBOL(__udivmoddi4); + +/* + * Implementation of 64-bit signed division/modulo for 32-bit machines. + */ +int64_t +__divmoddi4(int64_t n, int64_t d, int64_t *r) +{ + int64_t q, rr; + boolean_t nn = B_FALSE; + boolean_t nd = B_FALSE; + if (n < 0) { + nn = B_TRUE; + n = -n; + } + if (d < 0) { + nd = B_TRUE; + d = -d; + } + + q = __udivmoddi4(n, d, (uint64_t *)&rr); + + if (nn != nd) + q = -q; + if (nn) + rr = -rr; + if (r) + *r = rr; + return (q); +} +EXPORT_SYMBOL(__divmoddi4); + +#if defined(__arm) || defined(__arm__) +/* + * Implementation of 64-bit (un)signed division for 32-bit arm machines. + * + * Run-time ABI for the ARM Architecture (page 20). A pair of (unsigned) + * long longs is returned in {{r0, r1}, {r2,r3}}, the quotient in {r0, r1}, + * and the remainder in {r2, r3}. The return type is specifically left + * set to 'void' to ensure the compiler does not overwrite these registers + * during the return. All results are in registers as per ABI + */ +void +__aeabi_uldivmod(uint64_t u, uint64_t v) +{ + uint64_t res; + uint64_t mod; + + res = __udivdi3(u, v); + mod = __umoddi3(u, v); + { + register uint32_t r0 asm("r0") = (res & 0xFFFFFFFF); + register uint32_t r1 asm("r1") = (res >> 32); + register uint32_t r2 asm("r2") = (mod & 0xFFFFFFFF); + register uint32_t r3 asm("r3") = (mod >> 32); + + asm volatile("" + : "+r"(r0), "+r"(r1), "+r"(r2),"+r"(r3) /* output */ + : "r"(r0), "r"(r1), "r"(r2), "r"(r3)); /* input */ + + return; /* r0; */ + } +} +EXPORT_SYMBOL(__aeabi_uldivmod); + +void +__aeabi_ldivmod(int64_t u, int64_t v) +{ + int64_t res; + uint64_t mod; + + res = __divdi3(u, v); + mod = __umoddi3(u, v); + { + register uint32_t r0 asm("r0") = (res & 0xFFFFFFFF); + register uint32_t r1 asm("r1") = (res >> 32); + register uint32_t r2 asm("r2") = (mod & 0xFFFFFFFF); + register uint32_t r3 asm("r3") = (mod >> 32); + + asm volatile("" + : "+r"(r0), "+r"(r1), "+r"(r2),"+r"(r3) /* output */ + : "r"(r0), "r"(r1), "r"(r2), "r"(r3)); /* input */ + + return; /* r0; */ + } +} +EXPORT_SYMBOL(__aeabi_ldivmod); +#endif /* __arm || __arm__ */ +#endif /* BITS_PER_LONG */ + +/* NOTE: The strtoxx behavior is solely based on my reading of the Solaris + * ddi_strtol(9F) man page. I have not verified the behavior of these + * functions against their Solaris counterparts. It is possible that I + * may have misinterpreted the man page or the man page is incorrect. + */ +int ddi_strtoul(const char *, char **, int, unsigned long *); +int ddi_strtol(const char *, char **, int, long *); +int ddi_strtoull(const char *, char **, int, unsigned long long *); +int ddi_strtoll(const char *, char **, int, long long *); + +#define define_ddi_strtoux(type, valtype) \ +int ddi_strtou##type(const char *str, char **endptr, \ + int base, valtype *result) \ +{ \ + valtype last_value, value = 0; \ + char *ptr = (char *)str; \ + int flag = 1, digit; \ + \ + if (strlen(ptr) == 0) \ + return EINVAL; \ + \ + /* Auto-detect base based on prefix */ \ + if (!base) { \ + if (str[0] == '0') { \ + if (tolower(str[1])=='x' && isxdigit(str[2])) { \ + base = 16; /* hex */ \ + ptr += 2; \ + } else if (str[1] >= '0' && str[1] < 8) { \ + base = 8; /* octal */ \ + ptr += 1; \ + } else { \ + return EINVAL; \ + } \ + } else { \ + base = 10; /* decimal */ \ + } \ + } \ + \ + while (1) { \ + if (isdigit(*ptr)) \ + digit = *ptr - '0'; \ + else if (isalpha(*ptr)) \ + digit = tolower(*ptr) - 'a' + 10; \ + else \ + break; \ + \ + if (digit >= base) \ + break; \ + \ + last_value = value; \ + value = value * base + digit; \ + if (last_value > value) /* Overflow */ \ + return ERANGE; \ + \ + flag = 1; \ + ptr++; \ + } \ + \ + if (flag) \ + *result = value; \ + \ + if (endptr) \ + *endptr = (char *)(flag ? ptr : str); \ + \ + return 0; \ +} \ + +#define define_ddi_strtox(type, valtype) \ +int ddi_strto##type(const char *str, char **endptr, \ + int base, valtype *result) \ +{ \ + int rc; \ + \ + if (*str == '-') { \ + rc = ddi_strtou##type(str + 1, endptr, base, result); \ + if (!rc) { \ + if (*endptr == str + 1) \ + *endptr = (char *)str; \ + else \ + *result = -*result; \ + } \ + } else { \ + rc = ddi_strtou##type(str, endptr, base, result); \ + } \ + \ + return rc; \ +} + +define_ddi_strtoux(l, unsigned long) +define_ddi_strtox(l, long) +define_ddi_strtoux(ll, unsigned long long) +define_ddi_strtox(ll, long long) + +EXPORT_SYMBOL(ddi_strtoul); +EXPORT_SYMBOL(ddi_strtol); +EXPORT_SYMBOL(ddi_strtoll); +EXPORT_SYMBOL(ddi_strtoull); + +int +ddi_copyin(const void *from, void *to, size_t len, int flags) +{ + /* Fake ioctl() issued by kernel, 'from' is a kernel address */ + if (flags & FKIOCTL) { + memcpy(to, from, len); + return 0; + } + + return copyin(from, to, len); +} +EXPORT_SYMBOL(ddi_copyin); + +int +ddi_copyout(const void *from, void *to, size_t len, int flags) +{ + /* Fake ioctl() issued by kernel, 'from' is a kernel address */ + if (flags & FKIOCTL) { + memcpy(to, from, len); + return 0; + } + + return copyout(from, to, len); +} +EXPORT_SYMBOL(ddi_copyout); + +/* + * Read the unique system identifier from the /etc/hostid file. + * + * The behavior of /usr/bin/hostid on Linux systems with the + * regular eglibc and coreutils is: + * + * 1. Generate the value if the /etc/hostid file does not exist + * or if the /etc/hostid file is less than four bytes in size. + * + * 2. If the /etc/hostid file is at least 4 bytes, then return + * the first four bytes [0..3] in native endian order. + * + * 3. Always ignore bytes [4..] if they exist in the file. + * + * Only the first four bytes are significant, even on systems that + * have a 64-bit word size. + * + * See: + * + * eglibc: sysdeps/unix/sysv/linux/gethostid.c + * coreutils: src/hostid.c + * + * Notes: + * + * The /etc/hostid file on Solaris is a text file that often reads: + * + * # DO NOT EDIT + * "0123456789" + * + * Directly copying this file to Linux results in a constant + * hostid of 4f442023 because the default comment constitutes + * the first four bytes of the file. + * + */ + +char *spl_hostid_path = HW_HOSTID_PATH; +module_param(spl_hostid_path, charp, 0444); +MODULE_PARM_DESC(spl_hostid_path, "The system hostid file (/etc/hostid)"); + +static int +hostid_read(uint32_t *hostid) +{ + uint64_t size; + struct _buf *file; + uint32_t value = 0; + int error; + + file = kobj_open_file(spl_hostid_path); + if (file == (struct _buf *)-1) + return (ENOENT); + + error = kobj_get_filesize(file, &size); + if (error) { + kobj_close_file(file); + return (error); + } + + if (size < sizeof(HW_HOSTID_MASK)) { + kobj_close_file(file); + return (EINVAL); + } + + /* + * Read directly into the variable like eglibc does. + * Short reads are okay; native behavior is preserved. + */ + error = kobj_read_file(file, (char *)&value, sizeof(value), 0); + if (error < 0) { + kobj_close_file(file); + return (EIO); + } + + /* Mask down to 32 bits like coreutils does. */ + *hostid = (value & HW_HOSTID_MASK); + kobj_close_file(file); + + return 0; +} + +/* + * Return the system hostid. Preferentially use the spl_hostid module option + * when set, otherwise use the value in the /etc/hostid file. + */ +uint32_t +zone_get_hostid(void *zone) +{ + uint32_t hostid; + + ASSERT3P(zone, ==, NULL); + + if (spl_hostid != 0) + return ((uint32_t)(spl_hostid & HW_HOSTID_MASK)); + + if (hostid_read(&hostid) == 0) + return (hostid); + + return (0); +} +EXPORT_SYMBOL(zone_get_hostid); + +static int +spl_kvmem_init(void) +{ + int rc = 0; + + rc = spl_kmem_init(); + if (rc) + return (rc); + + rc = spl_vmem_init(); + if (rc) { + spl_kmem_fini(); + return (rc); + } + + return (rc); +} + +/* + * We initialize the random number generator with 128 bits of entropy from the + * system random number generator. In the improbable case that we have a zero + * seed, we fallback to the system jiffies, unless it is also zero, in which + * situation we use a preprogrammed seed. We step forward by 2^64 iterations to + * initialize each of the per-cpu seeds so that the sequences generated on each + * CPU are guaranteed to never overlap in practice. + */ +static void __init +spl_random_init(void) +{ + uint64_t s[2]; + int i; + + get_random_bytes(s, sizeof (s)); + + if (s[0] == 0 && s[1] == 0) { + if (jiffies != 0) { + s[0] = jiffies; + s[1] = ~0 - jiffies; + } else { + (void) memcpy(s, "improbable seed", sizeof (s)); + } + printk("SPL: get_random_bytes() returned 0 " + "when generating random seed. Setting initial seed to " + "0x%016llx%016llx.", cpu_to_be64(s[0]), cpu_to_be64(s[1])); + } + + for_each_possible_cpu(i) { + uint64_t *wordp = per_cpu(spl_pseudo_entropy, i); + + spl_rand_jump(s); + + wordp[0] = s[0]; + wordp[1] = s[1]; + } +} + +static void +spl_kvmem_fini(void) +{ + spl_vmem_fini(); + spl_kmem_fini(); +} + +static int __init +spl_init(void) +{ + int rc = 0; + + bzero(&p0, sizeof (proc_t)); + spl_random_init(); + + if ((rc = spl_kvmem_init())) + goto out1; + + if ((rc = spl_mutex_init())) + goto out2; + + if ((rc = spl_rw_init())) + goto out3; + + if ((rc = spl_tsd_init())) + goto out4; + + if ((rc = spl_taskq_init())) + goto out5; + + if ((rc = spl_kmem_cache_init())) + goto out6; + + if ((rc = spl_vn_init())) + goto out7; + + if ((rc = spl_proc_init())) + goto out8; + + if ((rc = spl_kstat_init())) + goto out9; + + if ((rc = spl_zlib_init())) + goto out10; + + printk(KERN_NOTICE "SPL: Loaded module v%s-%s%s\n", SPL_META_VERSION, + SPL_META_RELEASE, SPL_DEBUG_STR); + return (rc); + +out10: + spl_kstat_fini(); +out9: + spl_proc_fini(); +out8: + spl_vn_fini(); +out7: + spl_kmem_cache_fini(); +out6: + spl_taskq_fini(); +out5: + spl_tsd_fini(); +out4: + spl_rw_fini(); +out3: + spl_mutex_fini(); +out2: + spl_kvmem_fini(); +out1: + printk(KERN_NOTICE "SPL: Failed to Load Solaris Porting Layer " + "v%s-%s%s, rc = %d\n", SPL_META_VERSION, SPL_META_RELEASE, + SPL_DEBUG_STR, rc); + + return (rc); +} + +static void __exit +spl_fini(void) +{ + printk(KERN_NOTICE "SPL: Unloaded module v%s-%s%s\n", + SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); + spl_zlib_fini(); + spl_kstat_fini(); + spl_proc_fini(); + spl_vn_fini(); + spl_kmem_cache_fini(); + spl_taskq_fini(); + spl_tsd_fini(); + spl_rw_fini(); + spl_mutex_fini(); + spl_kvmem_fini(); +} + +module_init(spl_init); +module_exit(spl_fini); + +MODULE_DESCRIPTION("Solaris Porting Layer"); +MODULE_AUTHOR(SPL_META_AUTHOR); +MODULE_LICENSE(SPL_META_LICENSE); +MODULE_VERSION(SPL_META_VERSION "-" SPL_META_RELEASE); --- linux-aws-4.15.0.orig/spl/module/spl/spl-kmem-cache.c +++ linux-aws-4.15.0/spl/module/spl/spl-kmem-cache.c @@ -0,0 +1,1770 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Within the scope of spl-kmem.c file the kmem_cache_* definitions + * are removed to allow access to the real Linux slab allocator. + */ +#undef kmem_cache_destroy +#undef kmem_cache_create +#undef kmem_cache_alloc +#undef kmem_cache_free + + +/* + * Linux 3.16 replaced smp_mb__{before,after}_{atomic,clear}_{dec,inc,bit}() + * with smp_mb__{before,after}_atomic() because they were redundant. This is + * only used inside our SLAB allocator, so we implement an internal wrapper + * here to give us smp_mb__{before,after}_atomic() on older kernels. + */ +#ifndef smp_mb__before_atomic +#define smp_mb__before_atomic(x) smp_mb__before_clear_bit(x) +#endif + +#ifndef smp_mb__after_atomic +#define smp_mb__after_atomic(x) smp_mb__after_clear_bit(x) +#endif + +/* + * Cache expiration was implemented because it was part of the default Solaris + * kmem_cache behavior. The idea is that per-cpu objects which haven't been + * accessed in several seconds should be returned to the cache. On the other + * hand Linux slabs never move objects back to the slabs unless there is + * memory pressure on the system. By default the Linux method is enabled + * because it has been shown to improve responsiveness on low memory systems. + * This policy may be changed by setting KMC_EXPIRE_AGE or KMC_EXPIRE_MEM. + */ +unsigned int spl_kmem_cache_expire = KMC_EXPIRE_MEM; +EXPORT_SYMBOL(spl_kmem_cache_expire); +module_param(spl_kmem_cache_expire, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_expire, "By age (0x1) or low memory (0x2)"); + +/* + * Cache magazines are an optimization designed to minimize the cost of + * allocating memory. They do this by keeping a per-cpu cache of recently + * freed objects, which can then be reallocated without taking a lock. This + * can improve performance on highly contended caches. However, because + * objects in magazines will prevent otherwise empty slabs from being + * immediately released this may not be ideal for low memory machines. + * + * For this reason spl_kmem_cache_magazine_size can be used to set a maximum + * magazine size. When this value is set to 0 the magazine size will be + * automatically determined based on the object size. Otherwise magazines + * will be limited to 2-256 objects per magazine (i.e per cpu). Magazines + * may never be entirely disabled in this implementation. + */ +unsigned int spl_kmem_cache_magazine_size = 0; +module_param(spl_kmem_cache_magazine_size, uint, 0444); +MODULE_PARM_DESC(spl_kmem_cache_magazine_size, + "Default magazine size (2-256), set automatically (0)"); + +/* + * The default behavior is to report the number of objects remaining in the + * cache. This allows the Linux VM to repeatedly reclaim objects from the + * cache when memory is low satisfy other memory allocations. Alternately, + * setting this value to KMC_RECLAIM_ONCE limits how aggressively the cache + * is reclaimed. This may increase the likelihood of out of memory events. + */ +unsigned int spl_kmem_cache_reclaim = 0 /* KMC_RECLAIM_ONCE */; +module_param(spl_kmem_cache_reclaim, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_reclaim, "Single reclaim pass (0x1)"); + +unsigned int spl_kmem_cache_obj_per_slab = SPL_KMEM_CACHE_OBJ_PER_SLAB; +module_param(spl_kmem_cache_obj_per_slab, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_obj_per_slab, "Number of objects per slab"); + +unsigned int spl_kmem_cache_obj_per_slab_min = SPL_KMEM_CACHE_OBJ_PER_SLAB_MIN; +module_param(spl_kmem_cache_obj_per_slab_min, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_obj_per_slab_min, + "Minimal number of objects per slab"); + +unsigned int spl_kmem_cache_max_size = SPL_KMEM_CACHE_MAX_SIZE; +module_param(spl_kmem_cache_max_size, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_max_size, "Maximum size of slab in MB"); + +/* + * For small objects the Linux slab allocator should be used to make the most + * efficient use of the memory. However, large objects are not supported by + * the Linux slab and therefore the SPL implementation is preferred. A cutoff + * of 16K was determined to be optimal for architectures using 4K pages. + */ +#if PAGE_SIZE == 4096 +unsigned int spl_kmem_cache_slab_limit = 16384; +#else +unsigned int spl_kmem_cache_slab_limit = 0; +#endif +module_param(spl_kmem_cache_slab_limit, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_slab_limit, + "Objects less than N bytes use the Linux slab"); + +/* + * This value defaults to a threshold designed to avoid allocations which + * have been deemed costly by the kernel. + */ +unsigned int spl_kmem_cache_kmem_limit = + ((1 << (PAGE_ALLOC_COSTLY_ORDER - 1)) * PAGE_SIZE) / + SPL_KMEM_CACHE_OBJ_PER_SLAB; +module_param(spl_kmem_cache_kmem_limit, uint, 0644); +MODULE_PARM_DESC(spl_kmem_cache_kmem_limit, + "Objects less than N bytes use the kmalloc"); + +/* + * The number of threads available to allocate new slabs for caches. This + * should not need to be tuned but it is available for performance analysis. + */ +unsigned int spl_kmem_cache_kmem_threads = 4; +module_param(spl_kmem_cache_kmem_threads, uint, 0444); +MODULE_PARM_DESC(spl_kmem_cache_kmem_threads, + "Number of spl_kmem_cache threads"); + +/* + * Slab allocation interfaces + * + * While the Linux slab implementation was inspired by the Solaris + * implementation I cannot use it to emulate the Solaris APIs. I + * require two features which are not provided by the Linux slab. + * + * 1) Constructors AND destructors. Recent versions of the Linux + * kernel have removed support for destructors. This is a deal + * breaker for the SPL which contains particularly expensive + * initializers for mutex's, condition variables, etc. We also + * require a minimal level of cleanup for these data types unlike + * many Linux data types which do need to be explicitly destroyed. + * + * 2) Virtual address space backed slab. Callers of the Solaris slab + * expect it to work well for both small are very large allocations. + * Because of memory fragmentation the Linux slab which is backed + * by kmalloc'ed memory performs very badly when confronted with + * large numbers of large allocations. Basing the slab on the + * virtual address space removes the need for contiguous pages + * and greatly improve performance for large allocations. + * + * For these reasons, the SPL has its own slab implementation with + * the needed features. It is not as highly optimized as either the + * Solaris or Linux slabs, but it should get me most of what is + * needed until it can be optimized or obsoleted by another approach. + * + * One serious concern I do have about this method is the relatively + * small virtual address space on 32bit arches. This will seriously + * constrain the size of the slab caches and their performance. + */ + +struct list_head spl_kmem_cache_list; /* List of caches */ +struct rw_semaphore spl_kmem_cache_sem; /* Cache list lock */ +taskq_t *spl_kmem_cache_taskq; /* Task queue for ageing / reclaim */ + +static void spl_cache_shrink(spl_kmem_cache_t *skc, void *obj); + +SPL_SHRINKER_CALLBACK_FWD_DECLARE(spl_kmem_cache_generic_shrinker); +SPL_SHRINKER_DECLARE(spl_kmem_cache_shrinker, + spl_kmem_cache_generic_shrinker, KMC_DEFAULT_SEEKS); + +static void * +kv_alloc(spl_kmem_cache_t *skc, int size, int flags) +{ + gfp_t lflags = kmem_flags_convert(flags); + void *ptr; + + if (skc->skc_flags & KMC_KMEM) { + ASSERT(ISP2(size)); + ptr = (void *)__get_free_pages(lflags, get_order(size)); + } else { + ptr = __vmalloc(size, lflags | __GFP_HIGHMEM, PAGE_KERNEL); + } + + /* Resulting allocated memory will be page aligned */ + ASSERT(IS_P2ALIGNED(ptr, PAGE_SIZE)); + + return (ptr); +} + +static void +kv_free(spl_kmem_cache_t *skc, void *ptr, int size) +{ + ASSERT(IS_P2ALIGNED(ptr, PAGE_SIZE)); + + /* + * The Linux direct reclaim path uses this out of band value to + * determine if forward progress is being made. Normally this is + * incremented by kmem_freepages() which is part of the various + * Linux slab implementations. However, since we are using none + * of that infrastructure we are responsible for incrementing it. + */ + if (current->reclaim_state) + current->reclaim_state->reclaimed_slab += size >> PAGE_SHIFT; + + if (skc->skc_flags & KMC_KMEM) { + ASSERT(ISP2(size)); + free_pages((unsigned long)ptr, get_order(size)); + } else { + vfree(ptr); + } +} + +/* + * Required space for each aligned sks. + */ +static inline uint32_t +spl_sks_size(spl_kmem_cache_t *skc) +{ + return (P2ROUNDUP_TYPED(sizeof (spl_kmem_slab_t), + skc->skc_obj_align, uint32_t)); +} + +/* + * Required space for each aligned object. + */ +static inline uint32_t +spl_obj_size(spl_kmem_cache_t *skc) +{ + uint32_t align = skc->skc_obj_align; + + return (P2ROUNDUP_TYPED(skc->skc_obj_size, align, uint32_t) + + P2ROUNDUP_TYPED(sizeof (spl_kmem_obj_t), align, uint32_t)); +} + +/* + * Lookup the spl_kmem_object_t for an object given that object. + */ +static inline spl_kmem_obj_t * +spl_sko_from_obj(spl_kmem_cache_t *skc, void *obj) +{ + return (obj + P2ROUNDUP_TYPED(skc->skc_obj_size, + skc->skc_obj_align, uint32_t)); +} + +/* + * Required space for each offslab object taking in to account alignment + * restrictions and the power-of-two requirement of kv_alloc(). + */ +static inline uint32_t +spl_offslab_size(spl_kmem_cache_t *skc) +{ + return (1UL << (fls64(spl_obj_size(skc)) + 1)); +} + +/* + * It's important that we pack the spl_kmem_obj_t structure and the + * actual objects in to one large address space to minimize the number + * of calls to the allocator. It is far better to do a few large + * allocations and then subdivide it ourselves. Now which allocator + * we use requires balancing a few trade offs. + * + * For small objects we use kmem_alloc() because as long as you are + * only requesting a small number of pages (ideally just one) its cheap. + * However, when you start requesting multiple pages with kmem_alloc() + * it gets increasingly expensive since it requires contiguous pages. + * For this reason we shift to vmem_alloc() for slabs of large objects + * which removes the need for contiguous pages. We do not use + * vmem_alloc() in all cases because there is significant locking + * overhead in __get_vm_area_node(). This function takes a single + * global lock when acquiring an available virtual address range which + * serializes all vmem_alloc()'s for all slab caches. Using slightly + * different allocation functions for small and large objects should + * give us the best of both worlds. + * + * KMC_ONSLAB KMC_OFFSLAB + * + * +------------------------+ +-----------------+ + * | spl_kmem_slab_t --+-+ | | spl_kmem_slab_t |---+-+ + * | skc_obj_size <-+ | | +-----------------+ | | + * | spl_kmem_obj_t | | | | + * | skc_obj_size <---+ | +-----------------+ | | + * | spl_kmem_obj_t | | | skc_obj_size | <-+ | + * | ... v | | spl_kmem_obj_t | | + * +------------------------+ +-----------------+ v + */ +static spl_kmem_slab_t * +spl_slab_alloc(spl_kmem_cache_t *skc, int flags) +{ + spl_kmem_slab_t *sks; + spl_kmem_obj_t *sko, *n; + void *base, *obj; + uint32_t obj_size, offslab_size = 0; + int i, rc = 0; + + base = kv_alloc(skc, skc->skc_slab_size, flags); + if (base == NULL) + return (NULL); + + sks = (spl_kmem_slab_t *)base; + sks->sks_magic = SKS_MAGIC; + sks->sks_objs = skc->skc_slab_objs; + sks->sks_age = jiffies; + sks->sks_cache = skc; + INIT_LIST_HEAD(&sks->sks_list); + INIT_LIST_HEAD(&sks->sks_free_list); + sks->sks_ref = 0; + obj_size = spl_obj_size(skc); + + if (skc->skc_flags & KMC_OFFSLAB) + offslab_size = spl_offslab_size(skc); + + for (i = 0; i < sks->sks_objs; i++) { + if (skc->skc_flags & KMC_OFFSLAB) { + obj = kv_alloc(skc, offslab_size, flags); + if (!obj) { + rc = -ENOMEM; + goto out; + } + } else { + obj = base + spl_sks_size(skc) + (i * obj_size); + } + + ASSERT(IS_P2ALIGNED(obj, skc->skc_obj_align)); + sko = spl_sko_from_obj(skc, obj); + sko->sko_addr = obj; + sko->sko_magic = SKO_MAGIC; + sko->sko_slab = sks; + INIT_LIST_HEAD(&sko->sko_list); + list_add_tail(&sko->sko_list, &sks->sks_free_list); + } + +out: + if (rc) { + if (skc->skc_flags & KMC_OFFSLAB) + list_for_each_entry_safe(sko, + n, &sks->sks_free_list, sko_list) + kv_free(skc, sko->sko_addr, offslab_size); + + kv_free(skc, base, skc->skc_slab_size); + sks = NULL; + } + + return (sks); +} + +/* + * Remove a slab from complete or partial list, it must be called with + * the 'skc->skc_lock' held but the actual free must be performed + * outside the lock to prevent deadlocking on vmem addresses. + */ +static void +spl_slab_free(spl_kmem_slab_t *sks, + struct list_head *sks_list, struct list_head *sko_list) +{ + spl_kmem_cache_t *skc; + + ASSERT(sks->sks_magic == SKS_MAGIC); + ASSERT(sks->sks_ref == 0); + + skc = sks->sks_cache; + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(spin_is_locked(&skc->skc_lock)); + + /* + * Update slab/objects counters in the cache, then remove the + * slab from the skc->skc_partial_list. Finally add the slab + * and all its objects in to the private work lists where the + * destructors will be called and the memory freed to the system. + */ + skc->skc_obj_total -= sks->sks_objs; + skc->skc_slab_total--; + list_del(&sks->sks_list); + list_add(&sks->sks_list, sks_list); + list_splice_init(&sks->sks_free_list, sko_list); +} + +/* + * Reclaim empty slabs at the end of the partial list. + */ +static void +spl_slab_reclaim(spl_kmem_cache_t *skc) +{ + spl_kmem_slab_t *sks, *m; + spl_kmem_obj_t *sko, *n; + LIST_HEAD(sks_list); + LIST_HEAD(sko_list); + uint32_t size = 0; + + /* + * Empty slabs and objects must be moved to a private list so they + * can be safely freed outside the spin lock. All empty slabs are + * at the end of skc->skc_partial_list, therefore once a non-empty + * slab is found we can stop scanning. + */ + spin_lock(&skc->skc_lock); + list_for_each_entry_safe_reverse(sks, m, + &skc->skc_partial_list, sks_list) { + + if (sks->sks_ref > 0) + break; + + spl_slab_free(sks, &sks_list, &sko_list); + } + spin_unlock(&skc->skc_lock); + + /* + * The following two loops ensure all the object destructors are + * run, any offslab objects are freed, and the slabs themselves + * are freed. This is all done outside the skc->skc_lock since + * this allows the destructor to sleep, and allows us to perform + * a conditional reschedule when a freeing a large number of + * objects and slabs back to the system. + */ + if (skc->skc_flags & KMC_OFFSLAB) + size = spl_offslab_size(skc); + + list_for_each_entry_safe(sko, n, &sko_list, sko_list) { + ASSERT(sko->sko_magic == SKO_MAGIC); + + if (skc->skc_flags & KMC_OFFSLAB) + kv_free(skc, sko->sko_addr, size); + } + + list_for_each_entry_safe(sks, m, &sks_list, sks_list) { + ASSERT(sks->sks_magic == SKS_MAGIC); + kv_free(skc, sks, skc->skc_slab_size); + } +} + +static spl_kmem_emergency_t * +spl_emergency_search(struct rb_root *root, void *obj) +{ + struct rb_node *node = root->rb_node; + spl_kmem_emergency_t *ske; + unsigned long address = (unsigned long)obj; + + while (node) { + ske = container_of(node, spl_kmem_emergency_t, ske_node); + + if (address < ske->ske_obj) + node = node->rb_left; + else if (address > ske->ske_obj) + node = node->rb_right; + else + return (ske); + } + + return (NULL); +} + +static int +spl_emergency_insert(struct rb_root *root, spl_kmem_emergency_t *ske) +{ + struct rb_node **new = &(root->rb_node), *parent = NULL; + spl_kmem_emergency_t *ske_tmp; + unsigned long address = ske->ske_obj; + + while (*new) { + ske_tmp = container_of(*new, spl_kmem_emergency_t, ske_node); + + parent = *new; + if (address < ske_tmp->ske_obj) + new = &((*new)->rb_left); + else if (address > ske_tmp->ske_obj) + new = &((*new)->rb_right); + else + return (0); + } + + rb_link_node(&ske->ske_node, parent, new); + rb_insert_color(&ske->ske_node, root); + + return (1); +} + +/* + * Allocate a single emergency object and track it in a red black tree. + */ +static int +spl_emergency_alloc(spl_kmem_cache_t *skc, int flags, void **obj) +{ + gfp_t lflags = kmem_flags_convert(flags); + spl_kmem_emergency_t *ske; + int order = get_order(skc->skc_obj_size); + int empty; + + /* Last chance use a partial slab if one now exists */ + spin_lock(&skc->skc_lock); + empty = list_empty(&skc->skc_partial_list); + spin_unlock(&skc->skc_lock); + if (!empty) + return (-EEXIST); + + ske = kmalloc(sizeof (*ske), lflags); + if (ske == NULL) + return (-ENOMEM); + + ske->ske_obj = __get_free_pages(lflags, order); + if (ske->ske_obj == 0) { + kfree(ske); + return (-ENOMEM); + } + + spin_lock(&skc->skc_lock); + empty = spl_emergency_insert(&skc->skc_emergency_tree, ske); + if (likely(empty)) { + skc->skc_obj_total++; + skc->skc_obj_emergency++; + if (skc->skc_obj_emergency > skc->skc_obj_emergency_max) + skc->skc_obj_emergency_max = skc->skc_obj_emergency; + } + spin_unlock(&skc->skc_lock); + + if (unlikely(!empty)) { + free_pages(ske->ske_obj, order); + kfree(ske); + return (-EINVAL); + } + + *obj = (void *)ske->ske_obj; + + return (0); +} + +/* + * Locate the passed object in the red black tree and free it. + */ +static int +spl_emergency_free(spl_kmem_cache_t *skc, void *obj) +{ + spl_kmem_emergency_t *ske; + int order = get_order(skc->skc_obj_size); + + spin_lock(&skc->skc_lock); + ske = spl_emergency_search(&skc->skc_emergency_tree, obj); + if (ske) { + rb_erase(&ske->ske_node, &skc->skc_emergency_tree); + skc->skc_obj_emergency--; + skc->skc_obj_total--; + } + spin_unlock(&skc->skc_lock); + + if (ske == NULL) + return (-ENOENT); + + free_pages(ske->ske_obj, order); + kfree(ske); + + return (0); +} + +/* + * Release objects from the per-cpu magazine back to their slab. The flush + * argument contains the max number of entries to remove from the magazine. + */ +static void +__spl_cache_flush(spl_kmem_cache_t *skc, spl_kmem_magazine_t *skm, int flush) +{ + int i, count = MIN(flush, skm->skm_avail); + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(skm->skm_magic == SKM_MAGIC); + ASSERT(spin_is_locked(&skc->skc_lock)); + + for (i = 0; i < count; i++) + spl_cache_shrink(skc, skm->skm_objs[i]); + + skm->skm_avail -= count; + memmove(skm->skm_objs, &(skm->skm_objs[count]), + sizeof (void *) * skm->skm_avail); +} + +static void +spl_cache_flush(spl_kmem_cache_t *skc, spl_kmem_magazine_t *skm, int flush) +{ + spin_lock(&skc->skc_lock); + __spl_cache_flush(skc, skm, flush); + spin_unlock(&skc->skc_lock); +} + +static void +spl_magazine_age(void *data) +{ + spl_kmem_cache_t *skc = (spl_kmem_cache_t *)data; + spl_kmem_magazine_t *skm = skc->skc_mag[smp_processor_id()]; + + ASSERT(skm->skm_magic == SKM_MAGIC); + ASSERT(skm->skm_cpu == smp_processor_id()); + ASSERT(irqs_disabled()); + + /* There are no available objects or they are too young to age out */ + if ((skm->skm_avail == 0) || + time_before(jiffies, skm->skm_age + skc->skc_delay * HZ)) + return; + + /* + * Because we're executing in interrupt context we may have + * interrupted the holder of this lock. To avoid a potential + * deadlock return if the lock is contended. + */ + if (!spin_trylock(&skc->skc_lock)) + return; + + __spl_cache_flush(skc, skm, skm->skm_refill); + spin_unlock(&skc->skc_lock); +} + +/* + * Called regularly to keep a downward pressure on the cache. + * + * Objects older than skc->skc_delay seconds in the per-cpu magazines will + * be returned to the caches. This is done to prevent idle magazines from + * holding memory which could be better used elsewhere. The delay is + * present to prevent thrashing the magazine. + * + * The newly released objects may result in empty partial slabs. Those + * slabs should be released to the system. Otherwise moving the objects + * out of the magazines is just wasted work. + */ +static void +spl_cache_age(void *data) +{ + spl_kmem_cache_t *skc = (spl_kmem_cache_t *)data; + taskqid_t id = 0; + + ASSERT(skc->skc_magic == SKC_MAGIC); + + /* Dynamically disabled at run time */ + if (!(spl_kmem_cache_expire & KMC_EXPIRE_AGE)) + return; + + atomic_inc(&skc->skc_ref); + + if (!(skc->skc_flags & KMC_NOMAGAZINE)) + on_each_cpu(spl_magazine_age, skc, 1); + + spl_slab_reclaim(skc); + + while (!test_bit(KMC_BIT_DESTROY, &skc->skc_flags) && !id) { + id = taskq_dispatch_delay( + spl_kmem_cache_taskq, spl_cache_age, skc, TQ_SLEEP, + ddi_get_lbolt() + skc->skc_delay / 3 * HZ); + + /* Destroy issued after dispatch immediately cancel it */ + if (test_bit(KMC_BIT_DESTROY, &skc->skc_flags) && id) + taskq_cancel_id(spl_kmem_cache_taskq, id); + } + + spin_lock(&skc->skc_lock); + skc->skc_taskqid = id; + spin_unlock(&skc->skc_lock); + + atomic_dec(&skc->skc_ref); +} + +/* + * Size a slab based on the size of each aligned object plus spl_kmem_obj_t. + * When on-slab we want to target spl_kmem_cache_obj_per_slab. However, + * for very small objects we may end up with more than this so as not + * to waste space in the minimal allocation of a single page. Also for + * very large objects we may use as few as spl_kmem_cache_obj_per_slab_min, + * lower than this and we will fail. + */ +static int +spl_slab_size(spl_kmem_cache_t *skc, uint32_t *objs, uint32_t *size) +{ + uint32_t sks_size, obj_size, max_size, tgt_size, tgt_objs; + + if (skc->skc_flags & KMC_OFFSLAB) { + tgt_objs = spl_kmem_cache_obj_per_slab; + tgt_size = P2ROUNDUP(sizeof (spl_kmem_slab_t), PAGE_SIZE); + + if ((skc->skc_flags & KMC_KMEM) && + (spl_obj_size(skc) > (SPL_MAX_ORDER_NR_PAGES * PAGE_SIZE))) + return (-ENOSPC); + } else { + sks_size = spl_sks_size(skc); + obj_size = spl_obj_size(skc); + max_size = (spl_kmem_cache_max_size * 1024 * 1024); + tgt_size = (spl_kmem_cache_obj_per_slab * obj_size + sks_size); + + /* + * KMC_KMEM slabs are allocated by __get_free_pages() which + * rounds up to the nearest order. Knowing this the size + * should be rounded up to the next power of two with a hard + * maximum defined by the maximum allowed allocation order. + */ + if (skc->skc_flags & KMC_KMEM) { + max_size = SPL_MAX_ORDER_NR_PAGES * PAGE_SIZE; + tgt_size = MIN(max_size, + PAGE_SIZE * (1 << MAX(get_order(tgt_size) - 1, 1))); + } + + if (tgt_size <= max_size) { + tgt_objs = (tgt_size - sks_size) / obj_size; + } else { + tgt_objs = (max_size - sks_size) / obj_size; + tgt_size = (tgt_objs * obj_size) + sks_size; + } + } + + if (tgt_objs == 0) + return (-ENOSPC); + + *objs = tgt_objs; + *size = tgt_size; + + return (0); +} + +/* + * Make a guess at reasonable per-cpu magazine size based on the size of + * each object and the cost of caching N of them in each magazine. Long + * term this should really adapt based on an observed usage heuristic. + */ +static int +spl_magazine_size(spl_kmem_cache_t *skc) +{ + uint32_t obj_size = spl_obj_size(skc); + int size; + + if (spl_kmem_cache_magazine_size > 0) + return (MAX(MIN(spl_kmem_cache_magazine_size, 256), 2)); + + /* Per-magazine sizes below assume a 4Kib page size */ + if (obj_size > (PAGE_SIZE * 256)) + size = 4; /* Minimum 4Mib per-magazine */ + else if (obj_size > (PAGE_SIZE * 32)) + size = 16; /* Minimum 2Mib per-magazine */ + else if (obj_size > (PAGE_SIZE)) + size = 64; /* Minimum 256Kib per-magazine */ + else if (obj_size > (PAGE_SIZE / 4)) + size = 128; /* Minimum 128Kib per-magazine */ + else + size = 256; + + return (size); +} + +/* + * Allocate a per-cpu magazine to associate with a specific core. + */ +static spl_kmem_magazine_t * +spl_magazine_alloc(spl_kmem_cache_t *skc, int cpu) +{ + spl_kmem_magazine_t *skm; + int size = sizeof (spl_kmem_magazine_t) + + sizeof (void *) * skc->skc_mag_size; + + skm = kmalloc_node(size, GFP_KERNEL, cpu_to_node(cpu)); + if (skm) { + skm->skm_magic = SKM_MAGIC; + skm->skm_avail = 0; + skm->skm_size = skc->skc_mag_size; + skm->skm_refill = skc->skc_mag_refill; + skm->skm_cache = skc; + skm->skm_age = jiffies; + skm->skm_cpu = cpu; + } + + return (skm); +} + +/* + * Free a per-cpu magazine associated with a specific core. + */ +static void +spl_magazine_free(spl_kmem_magazine_t *skm) +{ + ASSERT(skm->skm_magic == SKM_MAGIC); + ASSERT(skm->skm_avail == 0); + kfree(skm); +} + +/* + * Create all pre-cpu magazines of reasonable sizes. + */ +static int +spl_magazine_create(spl_kmem_cache_t *skc) +{ + int i; + + if (skc->skc_flags & KMC_NOMAGAZINE) + return (0); + + skc->skc_mag = kzalloc(sizeof (spl_kmem_magazine_t *) * + num_possible_cpus(), kmem_flags_convert(KM_SLEEP)); + skc->skc_mag_size = spl_magazine_size(skc); + skc->skc_mag_refill = (skc->skc_mag_size + 1) / 2; + + for_each_possible_cpu(i) { + skc->skc_mag[i] = spl_magazine_alloc(skc, i); + if (!skc->skc_mag[i]) { + for (i--; i >= 0; i--) + spl_magazine_free(skc->skc_mag[i]); + + kfree(skc->skc_mag); + return (-ENOMEM); + } + } + + return (0); +} + +/* + * Destroy all pre-cpu magazines. + */ +static void +spl_magazine_destroy(spl_kmem_cache_t *skc) +{ + spl_kmem_magazine_t *skm; + int i; + + if (skc->skc_flags & KMC_NOMAGAZINE) + return; + + for_each_possible_cpu(i) { + skm = skc->skc_mag[i]; + spl_cache_flush(skc, skm, skm->skm_avail); + spl_magazine_free(skm); + } + + kfree(skc->skc_mag); +} + +/* + * Create a object cache based on the following arguments: + * name cache name + * size cache object size + * align cache object alignment + * ctor cache object constructor + * dtor cache object destructor + * reclaim cache object reclaim + * priv cache private data for ctor/dtor/reclaim + * vmp unused must be NULL + * flags + * KMC_NOTOUCH Disable cache object aging (unsupported) + * KMC_NODEBUG Disable debugging (unsupported) + * KMC_NOHASH Disable hashing (unsupported) + * KMC_QCACHE Disable qcache (unsupported) + * KMC_NOMAGAZINE Enabled for kmem/vmem, Disabled for Linux slab + * KMC_KMEM Force kmem backed cache + * KMC_VMEM Force vmem backed cache + * KMC_SLAB Force Linux slab backed cache + * KMC_OFFSLAB Locate objects off the slab + */ +spl_kmem_cache_t * +spl_kmem_cache_create(char *name, size_t size, size_t align, + spl_kmem_ctor_t ctor, spl_kmem_dtor_t dtor, spl_kmem_reclaim_t reclaim, + void *priv, void *vmp, int flags) +{ + gfp_t lflags = kmem_flags_convert(KM_SLEEP); + spl_kmem_cache_t *skc; + int rc; + + /* + * Unsupported flags + */ + ASSERT0(flags & KMC_NOMAGAZINE); + ASSERT0(flags & KMC_NOHASH); + ASSERT0(flags & KMC_QCACHE); + ASSERT(vmp == NULL); + + might_sleep(); + + skc = kzalloc(sizeof (*skc), lflags); + if (skc == NULL) + return (NULL); + + skc->skc_magic = SKC_MAGIC; + skc->skc_name_size = strlen(name) + 1; + skc->skc_name = (char *)kmalloc(skc->skc_name_size, lflags); + if (skc->skc_name == NULL) { + kfree(skc); + return (NULL); + } + strncpy(skc->skc_name, name, skc->skc_name_size); + + skc->skc_ctor = ctor; + skc->skc_dtor = dtor; + skc->skc_reclaim = reclaim; + skc->skc_private = priv; + skc->skc_vmp = vmp; + skc->skc_linux_cache = NULL; + skc->skc_flags = flags; + skc->skc_obj_size = size; + skc->skc_obj_align = SPL_KMEM_CACHE_ALIGN; + skc->skc_delay = SPL_KMEM_CACHE_DELAY; + skc->skc_reap = SPL_KMEM_CACHE_REAP; + atomic_set(&skc->skc_ref, 0); + + INIT_LIST_HEAD(&skc->skc_list); + INIT_LIST_HEAD(&skc->skc_complete_list); + INIT_LIST_HEAD(&skc->skc_partial_list); + skc->skc_emergency_tree = RB_ROOT; + spin_lock_init(&skc->skc_lock); + init_waitqueue_head(&skc->skc_waitq); + skc->skc_slab_fail = 0; + skc->skc_slab_create = 0; + skc->skc_slab_destroy = 0; + skc->skc_slab_total = 0; + skc->skc_slab_alloc = 0; + skc->skc_slab_max = 0; + skc->skc_obj_total = 0; + skc->skc_obj_alloc = 0; + skc->skc_obj_max = 0; + skc->skc_obj_deadlock = 0; + skc->skc_obj_emergency = 0; + skc->skc_obj_emergency_max = 0; + + /* + * Verify the requested alignment restriction is sane. + */ + if (align) { + VERIFY(ISP2(align)); + VERIFY3U(align, >=, SPL_KMEM_CACHE_ALIGN); + VERIFY3U(align, <=, PAGE_SIZE); + skc->skc_obj_align = align; + } + + /* + * When no specific type of slab is requested (kmem, vmem, or + * linuxslab) then select a cache type based on the object size + * and default tunables. + */ + if (!(skc->skc_flags & (KMC_KMEM | KMC_VMEM | KMC_SLAB))) { + + /* + * Objects smaller than spl_kmem_cache_slab_limit can + * use the Linux slab for better space-efficiency. By + * default this functionality is disabled until its + * performance characteristics are fully understood. + */ + if (spl_kmem_cache_slab_limit && + size <= (size_t)spl_kmem_cache_slab_limit) + skc->skc_flags |= KMC_SLAB; + + /* + * Small objects, less than spl_kmem_cache_kmem_limit per + * object should use kmem because their slabs are small. + */ + else if (spl_obj_size(skc) <= spl_kmem_cache_kmem_limit) + skc->skc_flags |= KMC_KMEM; + + /* + * All other objects are considered large and are placed + * on vmem backed slabs. + */ + else + skc->skc_flags |= KMC_VMEM; + } + + /* + * Given the type of slab allocate the required resources. + */ + if (skc->skc_flags & (KMC_KMEM | KMC_VMEM)) { + rc = spl_slab_size(skc, + &skc->skc_slab_objs, &skc->skc_slab_size); + if (rc) + goto out; + + rc = spl_magazine_create(skc); + if (rc) + goto out; + } else { + unsigned long slabflags = 0; + + if (size > (SPL_MAX_KMEM_ORDER_NR_PAGES * PAGE_SIZE)) { + rc = EINVAL; + goto out; + } + +#if defined(SLAB_USERCOPY) + /* + * Required for PAX-enabled kernels if the slab is to be + * used for coping between user and kernel space. + */ + slabflags |= SLAB_USERCOPY; +#endif + +#if defined(HAVE_KMEM_CACHE_CREATE_USERCOPY) + /* + * Newer grsec patchset uses kmem_cache_create_usercopy() + * instead of SLAB_USERCOPY flag + */ + skc->skc_linux_cache = kmem_cache_create_usercopy( + skc->skc_name, size, align, slabflags, 0, size, NULL); +#else + skc->skc_linux_cache = kmem_cache_create( + skc->skc_name, size, align, slabflags, NULL); +#endif + if (skc->skc_linux_cache == NULL) { + rc = ENOMEM; + goto out; + } + +#if defined(HAVE_KMEM_CACHE_ALLOCFLAGS) + skc->skc_linux_cache->allocflags |= __GFP_COMP; +#elif defined(HAVE_KMEM_CACHE_GFPFLAGS) + skc->skc_linux_cache->gfpflags |= __GFP_COMP; +#endif + skc->skc_flags |= KMC_NOMAGAZINE; + } + + if (spl_kmem_cache_expire & KMC_EXPIRE_AGE) + skc->skc_taskqid = taskq_dispatch_delay(spl_kmem_cache_taskq, + spl_cache_age, skc, TQ_SLEEP, + ddi_get_lbolt() + skc->skc_delay / 3 * HZ); + + down_write(&spl_kmem_cache_sem); + list_add_tail(&skc->skc_list, &spl_kmem_cache_list); + up_write(&spl_kmem_cache_sem); + + return (skc); +out: + kfree(skc->skc_name); + kfree(skc); + return (NULL); +} +EXPORT_SYMBOL(spl_kmem_cache_create); + +/* + * Register a move callback for cache defragmentation. + * XXX: Unimplemented but harmless to stub out for now. + */ +void +spl_kmem_cache_set_move(spl_kmem_cache_t *skc, + kmem_cbrc_t (move)(void *, void *, size_t, void *)) +{ + ASSERT(move != NULL); +} +EXPORT_SYMBOL(spl_kmem_cache_set_move); + +/* + * Destroy a cache and all objects associated with the cache. + */ +void +spl_kmem_cache_destroy(spl_kmem_cache_t *skc) +{ + DECLARE_WAIT_QUEUE_HEAD(wq); + taskqid_t id; + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(skc->skc_flags & (KMC_KMEM | KMC_VMEM | KMC_SLAB)); + + down_write(&spl_kmem_cache_sem); + list_del_init(&skc->skc_list); + up_write(&spl_kmem_cache_sem); + + /* Cancel any and wait for any pending delayed tasks */ + VERIFY(!test_and_set_bit(KMC_BIT_DESTROY, &skc->skc_flags)); + + spin_lock(&skc->skc_lock); + id = skc->skc_taskqid; + spin_unlock(&skc->skc_lock); + + taskq_cancel_id(spl_kmem_cache_taskq, id); + + /* + * Wait until all current callers complete, this is mainly + * to catch the case where a low memory situation triggers a + * cache reaping action which races with this destroy. + */ + wait_event(wq, atomic_read(&skc->skc_ref) == 0); + + if (skc->skc_flags & (KMC_KMEM | KMC_VMEM)) { + spl_magazine_destroy(skc); + spl_slab_reclaim(skc); + } else { + ASSERT(skc->skc_flags & KMC_SLAB); + kmem_cache_destroy(skc->skc_linux_cache); + } + + spin_lock(&skc->skc_lock); + + /* + * Validate there are no objects in use and free all the + * spl_kmem_slab_t, spl_kmem_obj_t, and object buffers. + */ + ASSERT3U(skc->skc_slab_alloc, ==, 0); + ASSERT3U(skc->skc_obj_alloc, ==, 0); + ASSERT3U(skc->skc_slab_total, ==, 0); + ASSERT3U(skc->skc_obj_total, ==, 0); + ASSERT3U(skc->skc_obj_emergency, ==, 0); + ASSERT(list_empty(&skc->skc_complete_list)); + + spin_unlock(&skc->skc_lock); + + kfree(skc->skc_name); + kfree(skc); +} +EXPORT_SYMBOL(spl_kmem_cache_destroy); + +/* + * Allocate an object from a slab attached to the cache. This is used to + * repopulate the per-cpu magazine caches in batches when they run low. + */ +static void * +spl_cache_obj(spl_kmem_cache_t *skc, spl_kmem_slab_t *sks) +{ + spl_kmem_obj_t *sko; + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(sks->sks_magic == SKS_MAGIC); + ASSERT(spin_is_locked(&skc->skc_lock)); + + sko = list_entry(sks->sks_free_list.next, spl_kmem_obj_t, sko_list); + ASSERT(sko->sko_magic == SKO_MAGIC); + ASSERT(sko->sko_addr != NULL); + + /* Remove from sks_free_list */ + list_del_init(&sko->sko_list); + + sks->sks_age = jiffies; + sks->sks_ref++; + skc->skc_obj_alloc++; + + /* Track max obj usage statistics */ + if (skc->skc_obj_alloc > skc->skc_obj_max) + skc->skc_obj_max = skc->skc_obj_alloc; + + /* Track max slab usage statistics */ + if (sks->sks_ref == 1) { + skc->skc_slab_alloc++; + + if (skc->skc_slab_alloc > skc->skc_slab_max) + skc->skc_slab_max = skc->skc_slab_alloc; + } + + return (sko->sko_addr); +} + +/* + * Generic slab allocation function to run by the global work queues. + * It is responsible for allocating a new slab, linking it in to the list + * of partial slabs, and then waking any waiters. + */ +static int +__spl_cache_grow(spl_kmem_cache_t *skc, int flags) +{ + spl_kmem_slab_t *sks; + + fstrans_cookie_t cookie = spl_fstrans_mark(); + sks = spl_slab_alloc(skc, flags); + spl_fstrans_unmark(cookie); + + spin_lock(&skc->skc_lock); + if (sks) { + skc->skc_slab_total++; + skc->skc_obj_total += sks->sks_objs; + list_add_tail(&sks->sks_list, &skc->skc_partial_list); + + smp_mb__before_atomic(); + clear_bit(KMC_BIT_DEADLOCKED, &skc->skc_flags); + smp_mb__after_atomic(); + wake_up_all(&skc->skc_waitq); + } + spin_unlock(&skc->skc_lock); + + return (sks == NULL ? -ENOMEM : 0); +} + +static void +spl_cache_grow_work(void *data) +{ + spl_kmem_alloc_t *ska = (spl_kmem_alloc_t *)data; + spl_kmem_cache_t *skc = ska->ska_cache; + + (void)__spl_cache_grow(skc, ska->ska_flags); + + atomic_dec(&skc->skc_ref); + smp_mb__before_atomic(); + clear_bit(KMC_BIT_GROWING, &skc->skc_flags); + smp_mb__after_atomic(); + + kfree(ska); +} + +/* + * Returns non-zero when a new slab should be available. + */ +static int +spl_cache_grow_wait(spl_kmem_cache_t *skc) +{ + return (!test_bit(KMC_BIT_GROWING, &skc->skc_flags)); +} + +/* + * No available objects on any slabs, create a new slab. Note that this + * functionality is disabled for KMC_SLAB caches which are backed by the + * Linux slab. + */ +static int +spl_cache_grow(spl_kmem_cache_t *skc, int flags, void **obj) +{ + int remaining, rc = 0; + + ASSERT0(flags & ~KM_PUBLIC_MASK); + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT((skc->skc_flags & KMC_SLAB) == 0); + might_sleep(); + *obj = NULL; + + /* + * Before allocating a new slab wait for any reaping to complete and + * then return so the local magazine can be rechecked for new objects. + */ + if (test_bit(KMC_BIT_REAPING, &skc->skc_flags)) { + rc = spl_wait_on_bit(&skc->skc_flags, KMC_BIT_REAPING, + TASK_UNINTERRUPTIBLE); + return (rc ? rc : -EAGAIN); + } + + /* + * To reduce the overhead of context switch and improve NUMA locality, + * it tries to allocate a new slab in the current process context with + * KM_NOSLEEP flag. If it fails, it will launch a new taskq to do the + * allocation. + * + * However, this can't be applied to KVM_VMEM due to a bug that + * __vmalloc() doesn't honor gfp flags in page table allocation. + */ + if (!(skc->skc_flags & KMC_VMEM)) { + rc = __spl_cache_grow(skc, flags | KM_NOSLEEP); + if (rc == 0) + return (0); + } + + /* + * This is handled by dispatching a work request to the global work + * queue. This allows us to asynchronously allocate a new slab while + * retaining the ability to safely fall back to a smaller synchronous + * allocations to ensure forward progress is always maintained. + */ + if (test_and_set_bit(KMC_BIT_GROWING, &skc->skc_flags) == 0) { + spl_kmem_alloc_t *ska; + + ska = kmalloc(sizeof (*ska), kmem_flags_convert(flags)); + if (ska == NULL) { + clear_bit_unlock(KMC_BIT_GROWING, &skc->skc_flags); + smp_mb__after_atomic(); + wake_up_all(&skc->skc_waitq); + return (-ENOMEM); + } + + atomic_inc(&skc->skc_ref); + ska->ska_cache = skc; + ska->ska_flags = flags; + taskq_init_ent(&ska->ska_tqe); + taskq_dispatch_ent(spl_kmem_cache_taskq, + spl_cache_grow_work, ska, 0, &ska->ska_tqe); + } + + /* + * The goal here is to only detect the rare case where a virtual slab + * allocation has deadlocked. We must be careful to minimize the use + * of emergency objects which are more expensive to track. Therefore, + * we set a very long timeout for the asynchronous allocation and if + * the timeout is reached the cache is flagged as deadlocked. From + * this point only new emergency objects will be allocated until the + * asynchronous allocation completes and clears the deadlocked flag. + */ + if (test_bit(KMC_BIT_DEADLOCKED, &skc->skc_flags)) { + rc = spl_emergency_alloc(skc, flags, obj); + } else { + remaining = wait_event_timeout(skc->skc_waitq, + spl_cache_grow_wait(skc), HZ / 10); + + if (!remaining) { + spin_lock(&skc->skc_lock); + if (test_bit(KMC_BIT_GROWING, &skc->skc_flags)) { + set_bit(KMC_BIT_DEADLOCKED, &skc->skc_flags); + skc->skc_obj_deadlock++; + } + spin_unlock(&skc->skc_lock); + } + + rc = -ENOMEM; + } + + return (rc); +} + +/* + * Refill a per-cpu magazine with objects from the slabs for this cache. + * Ideally the magazine can be repopulated using existing objects which have + * been released, however if we are unable to locate enough free objects new + * slabs of objects will be created. On success NULL is returned, otherwise + * the address of a single emergency object is returned for use by the caller. + */ +static void * +spl_cache_refill(spl_kmem_cache_t *skc, spl_kmem_magazine_t *skm, int flags) +{ + spl_kmem_slab_t *sks; + int count = 0, rc, refill; + void *obj = NULL; + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(skm->skm_magic == SKM_MAGIC); + + refill = MIN(skm->skm_refill, skm->skm_size - skm->skm_avail); + spin_lock(&skc->skc_lock); + + while (refill > 0) { + /* No slabs available we may need to grow the cache */ + if (list_empty(&skc->skc_partial_list)) { + spin_unlock(&skc->skc_lock); + + local_irq_enable(); + rc = spl_cache_grow(skc, flags, &obj); + local_irq_disable(); + + /* Emergency object for immediate use by caller */ + if (rc == 0 && obj != NULL) + return (obj); + + if (rc) + goto out; + + /* Rescheduled to different CPU skm is not local */ + if (skm != skc->skc_mag[smp_processor_id()]) + goto out; + + /* + * Potentially rescheduled to the same CPU but + * allocations may have occurred from this CPU while + * we were sleeping so recalculate max refill. + */ + refill = MIN(refill, skm->skm_size - skm->skm_avail); + + spin_lock(&skc->skc_lock); + continue; + } + + /* Grab the next available slab */ + sks = list_entry((&skc->skc_partial_list)->next, + spl_kmem_slab_t, sks_list); + ASSERT(sks->sks_magic == SKS_MAGIC); + ASSERT(sks->sks_ref < sks->sks_objs); + ASSERT(!list_empty(&sks->sks_free_list)); + + /* + * Consume as many objects as needed to refill the requested + * cache. We must also be careful not to overfill it. + */ + while (sks->sks_ref < sks->sks_objs && refill-- > 0 && + ++count) { + ASSERT(skm->skm_avail < skm->skm_size); + ASSERT(count < skm->skm_size); + skm->skm_objs[skm->skm_avail++] = + spl_cache_obj(skc, sks); + } + + /* Move slab to skc_complete_list when full */ + if (sks->sks_ref == sks->sks_objs) { + list_del(&sks->sks_list); + list_add(&sks->sks_list, &skc->skc_complete_list); + } + } + + spin_unlock(&skc->skc_lock); +out: + return (NULL); +} + +/* + * Release an object back to the slab from which it came. + */ +static void +spl_cache_shrink(spl_kmem_cache_t *skc, void *obj) +{ + spl_kmem_slab_t *sks = NULL; + spl_kmem_obj_t *sko = NULL; + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(spin_is_locked(&skc->skc_lock)); + + sko = spl_sko_from_obj(skc, obj); + ASSERT(sko->sko_magic == SKO_MAGIC); + sks = sko->sko_slab; + ASSERT(sks->sks_magic == SKS_MAGIC); + ASSERT(sks->sks_cache == skc); + list_add(&sko->sko_list, &sks->sks_free_list); + + sks->sks_age = jiffies; + sks->sks_ref--; + skc->skc_obj_alloc--; + + /* + * Move slab to skc_partial_list when no longer full. Slabs + * are added to the head to keep the partial list is quasi-full + * sorted order. Fuller at the head, emptier at the tail. + */ + if (sks->sks_ref == (sks->sks_objs - 1)) { + list_del(&sks->sks_list); + list_add(&sks->sks_list, &skc->skc_partial_list); + } + + /* + * Move empty slabs to the end of the partial list so + * they can be easily found and freed during reclamation. + */ + if (sks->sks_ref == 0) { + list_del(&sks->sks_list); + list_add_tail(&sks->sks_list, &skc->skc_partial_list); + skc->skc_slab_alloc--; + } +} + +/* + * Allocate an object from the per-cpu magazine, or if the magazine + * is empty directly allocate from a slab and repopulate the magazine. + */ +void * +spl_kmem_cache_alloc(spl_kmem_cache_t *skc, int flags) +{ + spl_kmem_magazine_t *skm; + void *obj = NULL; + + ASSERT0(flags & ~KM_PUBLIC_MASK); + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(!test_bit(KMC_BIT_DESTROY, &skc->skc_flags)); + + /* + * Allocate directly from a Linux slab. All optimizations are left + * to the underlying cache we only need to guarantee that KM_SLEEP + * callers will never fail. + */ + if (skc->skc_flags & KMC_SLAB) { + struct kmem_cache *slc = skc->skc_linux_cache; + do { + obj = kmem_cache_alloc(slc, kmem_flags_convert(flags)); + } while ((obj == NULL) && !(flags & KM_NOSLEEP)); + + goto ret; + } + + local_irq_disable(); + +restart: + /* + * Safe to update per-cpu structure without lock, but + * in the restart case we must be careful to reacquire + * the local magazine since this may have changed + * when we need to grow the cache. + */ + skm = skc->skc_mag[smp_processor_id()]; + ASSERT(skm->skm_magic == SKM_MAGIC); + + if (likely(skm->skm_avail)) { + /* Object available in CPU cache, use it */ + obj = skm->skm_objs[--skm->skm_avail]; + skm->skm_age = jiffies; + } else { + obj = spl_cache_refill(skc, skm, flags); + if ((obj == NULL) && !(flags & KM_NOSLEEP)) + goto restart; + + local_irq_enable(); + goto ret; + } + + local_irq_enable(); + ASSERT(obj); + ASSERT(IS_P2ALIGNED(obj, skc->skc_obj_align)); + +ret: + /* Pre-emptively migrate object to CPU L1 cache */ + if (obj) { + if (obj && skc->skc_ctor) + skc->skc_ctor(obj, skc->skc_private, flags); + else + prefetchw(obj); + } + + return (obj); +} +EXPORT_SYMBOL(spl_kmem_cache_alloc); + +/* + * Free an object back to the local per-cpu magazine, there is no + * guarantee that this is the same magazine the object was originally + * allocated from. We may need to flush entire from the magazine + * back to the slabs to make space. + */ +void +spl_kmem_cache_free(spl_kmem_cache_t *skc, void *obj) +{ + spl_kmem_magazine_t *skm; + unsigned long flags; + int do_reclaim = 0; + int do_emergency = 0; + + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(!test_bit(KMC_BIT_DESTROY, &skc->skc_flags)); + + /* + * Run the destructor + */ + if (skc->skc_dtor) + skc->skc_dtor(obj, skc->skc_private); + + /* + * Free the object from the Linux underlying Linux slab. + */ + if (skc->skc_flags & KMC_SLAB) { + kmem_cache_free(skc->skc_linux_cache, obj); + return; + } + + /* + * While a cache has outstanding emergency objects all freed objects + * must be checked. However, since emergency objects will never use + * a virtual address these objects can be safely excluded as an + * optimization. + */ + if (!is_vmalloc_addr(obj)) { + spin_lock(&skc->skc_lock); + do_emergency = (skc->skc_obj_emergency > 0); + spin_unlock(&skc->skc_lock); + + if (do_emergency && (spl_emergency_free(skc, obj) == 0)) + return; + } + + local_irq_save(flags); + + /* + * Safe to update per-cpu structure without lock, but + * no remote memory allocation tracking is being performed + * it is entirely possible to allocate an object from one + * CPU cache and return it to another. + */ + skm = skc->skc_mag[smp_processor_id()]; + ASSERT(skm->skm_magic == SKM_MAGIC); + + /* + * Per-CPU cache full, flush it to make space for this object, + * this may result in an empty slab which can be reclaimed once + * interrupts are re-enabled. + */ + if (unlikely(skm->skm_avail >= skm->skm_size)) { + spl_cache_flush(skc, skm, skm->skm_refill); + do_reclaim = 1; + } + + /* Available space in cache, use it */ + skm->skm_objs[skm->skm_avail++] = obj; + + local_irq_restore(flags); + + if (do_reclaim) + spl_slab_reclaim(skc); +} +EXPORT_SYMBOL(spl_kmem_cache_free); + +/* + * The generic shrinker function for all caches. Under Linux a shrinker + * may not be tightly coupled with a slab cache. In fact Linux always + * systematically tries calling all registered shrinker callbacks which + * report that they contain unused objects. Because of this we only + * register one shrinker function in the shim layer for all slab caches. + * We always attempt to shrink all caches when this generic shrinker + * is called. + * + * If sc->nr_to_scan is zero, the caller is requesting a query of the + * number of objects which can potentially be freed. If it is nonzero, + * the request is to free that many objects. + * + * Linux kernels >= 3.12 have the count_objects and scan_objects callbacks + * in struct shrinker and also require the shrinker to return the number + * of objects freed. + * + * Older kernels require the shrinker to return the number of freeable + * objects following the freeing of nr_to_free. + * + * Linux semantics differ from those under Solaris, which are to + * free all available objects which may (and probably will) be more + * objects than the requested nr_to_scan. + */ +static spl_shrinker_t +__spl_kmem_cache_generic_shrinker(struct shrinker *shrink, + struct shrink_control *sc) +{ + spl_kmem_cache_t *skc; + int alloc = 0; + + /* + * No shrinking in a transaction context. Can cause deadlocks. + */ + if (sc->nr_to_scan && spl_fstrans_check()) + return (SHRINK_STOP); + + down_read(&spl_kmem_cache_sem); + list_for_each_entry(skc, &spl_kmem_cache_list, skc_list) { + if (sc->nr_to_scan) { +#ifdef HAVE_SPLIT_SHRINKER_CALLBACK + uint64_t oldalloc = skc->skc_obj_alloc; + spl_kmem_cache_reap_now(skc, + MAX(sc->nr_to_scan>>fls64(skc->skc_slab_objs), 1)); + if (oldalloc > skc->skc_obj_alloc) + alloc += oldalloc - skc->skc_obj_alloc; +#else + spl_kmem_cache_reap_now(skc, + MAX(sc->nr_to_scan>>fls64(skc->skc_slab_objs), 1)); + alloc += skc->skc_obj_alloc; +#endif /* HAVE_SPLIT_SHRINKER_CALLBACK */ + } else { + /* Request to query number of freeable objects */ + alloc += skc->skc_obj_alloc; + } + } + up_read(&spl_kmem_cache_sem); + + /* + * When KMC_RECLAIM_ONCE is set allow only a single reclaim pass. + * This functionality only exists to work around a rare issue where + * shrink_slabs() is repeatedly invoked by many cores causing the + * system to thrash. + */ + if ((spl_kmem_cache_reclaim & KMC_RECLAIM_ONCE) && sc->nr_to_scan) + return (SHRINK_STOP); + + return (MAX(alloc, 0)); +} + +SPL_SHRINKER_CALLBACK_WRAPPER(spl_kmem_cache_generic_shrinker); + +/* + * Call the registered reclaim function for a cache. Depending on how + * many and which objects are released it may simply repopulate the + * local magazine which will then need to age-out. Objects which cannot + * fit in the magazine we will be released back to their slabs which will + * also need to age out before being release. This is all just best + * effort and we do not want to thrash creating and destroying slabs. + */ +void +spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count) +{ + ASSERT(skc->skc_magic == SKC_MAGIC); + ASSERT(!test_bit(KMC_BIT_DESTROY, &skc->skc_flags)); + + atomic_inc(&skc->skc_ref); + + /* + * Execute the registered reclaim callback if it exists. + */ + if (skc->skc_flags & KMC_SLAB) { + if (skc->skc_reclaim) + skc->skc_reclaim(skc->skc_private); + goto out; + } + + /* + * Prevent concurrent cache reaping when contended. + */ + if (test_and_set_bit(KMC_BIT_REAPING, &skc->skc_flags)) + goto out; + + /* + * When a reclaim function is available it may be invoked repeatedly + * until at least a single slab can be freed. This ensures that we + * do free memory back to the system. This helps minimize the chance + * of an OOM event when the bulk of memory is used by the slab. + * + * When free slabs are already available the reclaim callback will be + * skipped. Additionally, if no forward progress is detected despite + * a reclaim function the cache will be skipped to avoid deadlock. + * + * Longer term this would be the correct place to add the code which + * repacks the slabs in order minimize fragmentation. + */ + if (skc->skc_reclaim) { + uint64_t objects = UINT64_MAX; + int do_reclaim; + + do { + spin_lock(&skc->skc_lock); + do_reclaim = + (skc->skc_slab_total > 0) && + ((skc->skc_slab_total-skc->skc_slab_alloc) == 0) && + (skc->skc_obj_alloc < objects); + + objects = skc->skc_obj_alloc; + spin_unlock(&skc->skc_lock); + + if (do_reclaim) + skc->skc_reclaim(skc->skc_private); + + } while (do_reclaim); + } + + /* Reclaim from the magazine and free all now empty slabs. */ + if (spl_kmem_cache_expire & KMC_EXPIRE_MEM) { + spl_kmem_magazine_t *skm; + unsigned long irq_flags; + + local_irq_save(irq_flags); + skm = skc->skc_mag[smp_processor_id()]; + spl_cache_flush(skc, skm, skm->skm_avail); + local_irq_restore(irq_flags); + } + + spl_slab_reclaim(skc); + clear_bit_unlock(KMC_BIT_REAPING, &skc->skc_flags); + smp_mb__after_atomic(); + wake_up_bit(&skc->skc_flags, KMC_BIT_REAPING); +out: + atomic_dec(&skc->skc_ref); +} +EXPORT_SYMBOL(spl_kmem_cache_reap_now); + +/* + * Reap all free slabs from all registered caches. + */ +void +spl_kmem_reap(void) +{ + struct shrink_control sc; + + sc.nr_to_scan = KMC_REAP_CHUNK; + sc.gfp_mask = GFP_KERNEL; + + (void) __spl_kmem_cache_generic_shrinker(NULL, &sc); +} +EXPORT_SYMBOL(spl_kmem_reap); + +int +spl_kmem_cache_init(void) +{ + init_rwsem(&spl_kmem_cache_sem); + INIT_LIST_HEAD(&spl_kmem_cache_list); + spl_kmem_cache_taskq = taskq_create("spl_kmem_cache", + spl_kmem_cache_kmem_threads, maxclsyspri, + spl_kmem_cache_kmem_threads * 8, INT_MAX, + TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + spl_register_shrinker(&spl_kmem_cache_shrinker); + + return (0); +} + +void +spl_kmem_cache_fini(void) +{ + spl_unregister_shrinker(&spl_kmem_cache_shrinker); + taskq_destroy(spl_kmem_cache_taskq); +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-kmem.c +++ linux-aws-4.15.0/spl/module/spl/spl-kmem.c @@ -0,0 +1,564 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +/* + * As a general rule kmem_alloc() allocations should be small, preferably + * just a few pages since they must by physically contiguous. Therefore, a + * rate limited warning will be printed to the console for any kmem_alloc() + * which exceeds a reasonable threshold. + * + * The default warning threshold is set to sixteen pages but capped at 64K to + * accommodate systems using large pages. This value was selected to be small + * enough to ensure the largest allocations are quickly noticed and fixed. + * But large enough to avoid logging any warnings when a allocation size is + * larger than optimal but not a serious concern. Since this value is tunable, + * developers are encouraged to set it lower when testing so any new largish + * allocations are quickly caught. These warnings may be disabled by setting + * the threshold to zero. + */ +unsigned int spl_kmem_alloc_warn = MIN(16 * PAGE_SIZE, 64 * 1024); +module_param(spl_kmem_alloc_warn, uint, 0644); +MODULE_PARM_DESC(spl_kmem_alloc_warn, + "Warning threshold in bytes for a kmem_alloc()"); +EXPORT_SYMBOL(spl_kmem_alloc_warn); + +/* + * Large kmem_alloc() allocations will fail if they exceed KMALLOC_MAX_SIZE. + * Allocations which are marginally smaller than this limit may succeed but + * should still be avoided due to the expense of locating a contiguous range + * of free pages. Therefore, a maximum kmem size with reasonable safely + * margin of 4x is set. Kmem_alloc() allocations larger than this maximum + * will quickly fail. Vmem_alloc() allocations less than or equal to this + * value will use kmalloc(), but shift to vmalloc() when exceeding this value. + */ +unsigned int spl_kmem_alloc_max = (KMALLOC_MAX_SIZE >> 2); +module_param(spl_kmem_alloc_max, uint, 0644); +MODULE_PARM_DESC(spl_kmem_alloc_max, + "Maximum size in bytes for a kmem_alloc()"); +EXPORT_SYMBOL(spl_kmem_alloc_max); + +int +kmem_debugging(void) +{ + return (0); +} +EXPORT_SYMBOL(kmem_debugging); + +char * +kmem_vasprintf(const char *fmt, va_list ap) +{ + va_list aq; + char *ptr; + + do { + va_copy(aq, ap); + ptr = kvasprintf(kmem_flags_convert(KM_SLEEP), fmt, aq); + va_end(aq); + } while (ptr == NULL); + + return (ptr); +} +EXPORT_SYMBOL(kmem_vasprintf); + +char * +kmem_asprintf(const char *fmt, ...) +{ + va_list ap; + char *ptr; + + do { + va_start(ap, fmt); + ptr = kvasprintf(kmem_flags_convert(KM_SLEEP), fmt, ap); + va_end(ap); + } while (ptr == NULL); + + return (ptr); +} +EXPORT_SYMBOL(kmem_asprintf); + +static char * +__strdup(const char *str, int flags) +{ + char *ptr; + int n; + + n = strlen(str); + ptr = kmalloc(n + 1, kmem_flags_convert(flags)); + if (ptr) + memcpy(ptr, str, n + 1); + + return (ptr); +} + +char * +strdup(const char *str) +{ + return (__strdup(str, KM_SLEEP)); +} +EXPORT_SYMBOL(strdup); + +void +strfree(char *str) +{ + kfree(str); +} +EXPORT_SYMBOL(strfree); + +/* + * Limit the number of large allocation stack traces dumped to not more than + * 5 every 60 seconds to prevent denial-of-service attacks from debug code. + */ +DEFINE_RATELIMIT_STATE(kmem_alloc_ratelimit_state, 60 * HZ, 5); + +/* + * General purpose unified implementation of kmem_alloc(). It is an + * amalgamation of Linux and Illumos allocator design. It should never be + * exported to ensure that code using kmem_alloc()/kmem_zalloc() remains + * relatively portable. Consumers may only access this function through + * wrappers that enforce the common flags to ensure portability. + */ +inline void * +spl_kmem_alloc_impl(size_t size, int flags, int node) +{ + gfp_t lflags = kmem_flags_convert(flags); + int use_vmem = 0; + void *ptr; + + /* + * Log abnormally large allocations and rate limit the console output. + * Allocations larger than spl_kmem_alloc_warn should be performed + * through the vmem_alloc()/vmem_zalloc() interfaces. + */ + if ((spl_kmem_alloc_warn > 0) && (size > spl_kmem_alloc_warn) && + !(flags & KM_VMEM) && __ratelimit(&kmem_alloc_ratelimit_state)) { + printk(KERN_WARNING + "Large kmem_alloc(%lu, 0x%x), please file an issue at:\n" + "https://github.com/zfsonlinux/zfs/issues/new\n", + (unsigned long)size, flags); + dump_stack(); + } + + /* + * Use a loop because kmalloc_node() can fail when GFP_KERNEL is used + * unlike kmem_alloc() with KM_SLEEP on Illumos. + */ + do { + /* + * Calling kmalloc_node() when the size >= spl_kmem_alloc_max + * is unsafe. This must fail for all for kmem_alloc() and + * kmem_zalloc() callers. + * + * For vmem_alloc() and vmem_zalloc() callers it is permissible + * to use __vmalloc(). However, in general use of __vmalloc() + * is strongly discouraged because a global lock must be + * acquired. Contention on this lock can significantly + * impact performance so frequently manipulating the virtual + * address space is strongly discouraged. + */ + if ((size > spl_kmem_alloc_max) || use_vmem) { + if (flags & KM_VMEM) { + ptr = __vmalloc(size, lflags, PAGE_KERNEL); + } else { + return (NULL); + } + } else { + ptr = kmalloc_node(size, lflags, node); + } + + if (likely(ptr) || (flags & KM_NOSLEEP)) + return (ptr); + + /* + * For vmem_alloc() and vmem_zalloc() callers retry immediately + * using __vmalloc() which is unlikely to fail. + */ + if ((flags & KM_VMEM) && (use_vmem == 0)) { + use_vmem = 1; + continue; + } + + if (unlikely(__ratelimit(&kmem_alloc_ratelimit_state))) { + printk(KERN_WARNING + "Possible memory allocation deadlock: " + "size=%lu lflags=0x%x", + (unsigned long)size, lflags); + dump_stack(); + } + + /* + * Use cond_resched() instead of congestion_wait() to avoid + * deadlocking systems where there are no block devices. + */ + cond_resched(); + } while (1); + + return (NULL); +} + +inline void +spl_kmem_free_impl(const void *buf, size_t size) +{ + if (is_vmalloc_addr(buf)) + vfree(buf); + else + kfree(buf); +} + +/* + * Memory allocation and accounting for kmem_* * style allocations. When + * DEBUG_KMEM is enabled the total memory allocated will be tracked and + * any memory leaked will be reported during module unload. + * + * ./configure --enable-debug-kmem + */ +#ifdef DEBUG_KMEM + +/* Shim layer memory accounting */ +#ifdef HAVE_ATOMIC64_T +atomic64_t kmem_alloc_used = ATOMIC64_INIT(0); +unsigned long long kmem_alloc_max = 0; +#else /* HAVE_ATOMIC64_T */ +atomic_t kmem_alloc_used = ATOMIC_INIT(0); +unsigned long long kmem_alloc_max = 0; +#endif /* HAVE_ATOMIC64_T */ + +EXPORT_SYMBOL(kmem_alloc_used); +EXPORT_SYMBOL(kmem_alloc_max); + +inline void * +spl_kmem_alloc_debug(size_t size, int flags, int node) +{ + void *ptr; + + ptr = spl_kmem_alloc_impl(size, flags, node); + if (ptr) { + kmem_alloc_used_add(size); + if (unlikely(kmem_alloc_used_read() > kmem_alloc_max)) + kmem_alloc_max = kmem_alloc_used_read(); + } + + return (ptr); +} + +inline void +spl_kmem_free_debug(const void *ptr, size_t size) +{ + kmem_alloc_used_sub(size); + spl_kmem_free_impl(ptr, size); +} + +/* + * When DEBUG_KMEM_TRACKING is enabled not only will total bytes be tracked + * but also the location of every alloc and free. When the SPL module is + * unloaded a list of all leaked addresses and where they were allocated + * will be dumped to the console. Enabling this feature has a significant + * impact on performance but it makes finding memory leaks straight forward. + * + * Not surprisingly with debugging enabled the xmem_locks are very highly + * contended particularly on xfree(). If we want to run with this detailed + * debugging enabled for anything other than debugging we need to minimize + * the contention by moving to a lock per xmem_table entry model. + * + * ./configure --enable-debug-kmem-tracking + */ +#ifdef DEBUG_KMEM_TRACKING + +#include +#include + +#define KMEM_HASH_BITS 10 +#define KMEM_TABLE_SIZE (1 << KMEM_HASH_BITS) + +typedef struct kmem_debug { + struct hlist_node kd_hlist; /* Hash node linkage */ + struct list_head kd_list; /* List of all allocations */ + void *kd_addr; /* Allocation pointer */ + size_t kd_size; /* Allocation size */ + const char *kd_func; /* Allocation function */ + int kd_line; /* Allocation line */ +} kmem_debug_t; + +static spinlock_t kmem_lock; +static struct hlist_head kmem_table[KMEM_TABLE_SIZE]; +static struct list_head kmem_list; + +static kmem_debug_t * +kmem_del_init(spinlock_t *lock, struct hlist_head *table, + int bits, const void *addr) +{ + struct hlist_head *head; + struct hlist_node *node; + struct kmem_debug *p; + unsigned long flags; + + spin_lock_irqsave(lock, flags); + + head = &table[hash_ptr((void *)addr, bits)]; + hlist_for_each(node, head) { + p = list_entry(node, struct kmem_debug, kd_hlist); + if (p->kd_addr == addr) { + hlist_del_init(&p->kd_hlist); + list_del_init(&p->kd_list); + spin_unlock_irqrestore(lock, flags); + return (p); + } + } + + spin_unlock_irqrestore(lock, flags); + + return (NULL); +} + +inline void * +spl_kmem_alloc_track(size_t size, int flags, + const char *func, int line, int node) +{ + void *ptr = NULL; + kmem_debug_t *dptr; + unsigned long irq_flags; + + dptr = kmalloc(sizeof (kmem_debug_t), kmem_flags_convert(flags)); + if (dptr == NULL) + return (NULL); + + dptr->kd_func = __strdup(func, flags); + if (dptr->kd_func == NULL) { + kfree(dptr); + return (NULL); + } + + ptr = spl_kmem_alloc_debug(size, flags, node); + if (ptr == NULL) { + kfree(dptr->kd_func); + kfree(dptr); + return (NULL); + } + + INIT_HLIST_NODE(&dptr->kd_hlist); + INIT_LIST_HEAD(&dptr->kd_list); + + dptr->kd_addr = ptr; + dptr->kd_size = size; + dptr->kd_line = line; + + spin_lock_irqsave(&kmem_lock, irq_flags); + hlist_add_head(&dptr->kd_hlist, + &kmem_table[hash_ptr(ptr, KMEM_HASH_BITS)]); + list_add_tail(&dptr->kd_list, &kmem_list); + spin_unlock_irqrestore(&kmem_lock, irq_flags); + + return (ptr); +} + +inline void +spl_kmem_free_track(const void *ptr, size_t size) +{ + kmem_debug_t *dptr; + + /* Ignore NULL pointer since we haven't tracked it at all*/ + if (ptr == NULL) + return; + + /* Must exist in hash due to kmem_alloc() */ + dptr = kmem_del_init(&kmem_lock, kmem_table, KMEM_HASH_BITS, ptr); + ASSERT3P(dptr, !=, NULL); + ASSERT3S(dptr->kd_size, ==, size); + + kfree(dptr->kd_func); + kfree(dptr); + + spl_kmem_free_debug(ptr, size); +} +#endif /* DEBUG_KMEM_TRACKING */ +#endif /* DEBUG_KMEM */ + +/* + * Public kmem_alloc(), kmem_zalloc() and kmem_free() interfaces. + */ +void * +spl_kmem_alloc(size_t size, int flags, const char *func, int line) +{ + ASSERT0(flags & ~KM_PUBLIC_MASK); + +#if !defined(DEBUG_KMEM) + return (spl_kmem_alloc_impl(size, flags, NUMA_NO_NODE)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_alloc_debug(size, flags, NUMA_NO_NODE)); +#else + return (spl_kmem_alloc_track(size, flags, func, line, NUMA_NO_NODE)); +#endif +} +EXPORT_SYMBOL(spl_kmem_alloc); + +void * +spl_kmem_zalloc(size_t size, int flags, const char *func, int line) +{ + ASSERT0(flags & ~KM_PUBLIC_MASK); + + flags |= KM_ZERO; + +#if !defined(DEBUG_KMEM) + return (spl_kmem_alloc_impl(size, flags, NUMA_NO_NODE)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_alloc_debug(size, flags, NUMA_NO_NODE)); +#else + return (spl_kmem_alloc_track(size, flags, func, line, NUMA_NO_NODE)); +#endif +} +EXPORT_SYMBOL(spl_kmem_zalloc); + +void +spl_kmem_free(const void *buf, size_t size) +{ +#if !defined(DEBUG_KMEM) + return (spl_kmem_free_impl(buf, size)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_free_debug(buf, size)); +#else + return (spl_kmem_free_track(buf, size)); +#endif +} +EXPORT_SYMBOL(spl_kmem_free); + +#if defined(DEBUG_KMEM) && defined(DEBUG_KMEM_TRACKING) +static char * +spl_sprintf_addr(kmem_debug_t *kd, char *str, int len, int min) +{ + int size = ((len - 1) < kd->kd_size) ? (len - 1) : kd->kd_size; + int i, flag = 1; + + ASSERT(str != NULL && len >= 17); + memset(str, 0, len); + + /* + * Check for a fully printable string, and while we are at + * it place the printable characters in the passed buffer. + */ + for (i = 0; i < size; i++) { + str[i] = ((char *)(kd->kd_addr))[i]; + if (isprint(str[i])) { + continue; + } else { + /* + * Minimum number of printable characters found + * to make it worthwhile to print this as ascii. + */ + if (i > min) + break; + + flag = 0; + break; + } + } + + if (!flag) { + sprintf(str, "%02x%02x%02x%02x%02x%02x%02x%02x", + *((uint8_t *)kd->kd_addr), + *((uint8_t *)kd->kd_addr + 2), + *((uint8_t *)kd->kd_addr + 4), + *((uint8_t *)kd->kd_addr + 6), + *((uint8_t *)kd->kd_addr + 8), + *((uint8_t *)kd->kd_addr + 10), + *((uint8_t *)kd->kd_addr + 12), + *((uint8_t *)kd->kd_addr + 14)); + } + + return (str); +} + +static int +spl_kmem_init_tracking(struct list_head *list, spinlock_t *lock, int size) +{ + int i; + + spin_lock_init(lock); + INIT_LIST_HEAD(list); + + for (i = 0; i < size; i++) + INIT_HLIST_HEAD(&kmem_table[i]); + + return (0); +} + +static void +spl_kmem_fini_tracking(struct list_head *list, spinlock_t *lock) +{ + unsigned long flags; + kmem_debug_t *kd; + char str[17]; + + spin_lock_irqsave(lock, flags); + if (!list_empty(list)) + printk(KERN_WARNING "%-16s %-5s %-16s %s:%s\n", "address", + "size", "data", "func", "line"); + + list_for_each_entry(kd, list, kd_list) + printk(KERN_WARNING "%p %-5d %-16s %s:%d\n", kd->kd_addr, + (int)kd->kd_size, spl_sprintf_addr(kd, str, 17, 8), + kd->kd_func, kd->kd_line); + + spin_unlock_irqrestore(lock, flags); +} +#endif /* DEBUG_KMEM && DEBUG_KMEM_TRACKING */ + +int +spl_kmem_init(void) +{ +#ifdef DEBUG_KMEM + kmem_alloc_used_set(0); + +#ifdef DEBUG_KMEM_TRACKING + spl_kmem_init_tracking(&kmem_list, &kmem_lock, KMEM_TABLE_SIZE); +#endif /* DEBUG_KMEM_TRACKING */ +#endif /* DEBUG_KMEM */ + + return (0); +} + +void +spl_kmem_fini(void) +{ +#ifdef DEBUG_KMEM + /* + * Display all unreclaimed memory addresses, including the + * allocation size and the first few bytes of what's located + * at that address to aid in debugging. Performance is not + * a serious concern here since it is module unload time. + */ + if (kmem_alloc_used_read() != 0) + printk(KERN_WARNING "kmem leaked %ld/%llu bytes\n", + (unsigned long)kmem_alloc_used_read(), kmem_alloc_max); + +#ifdef DEBUG_KMEM_TRACKING + spl_kmem_fini_tracking(&kmem_list, &kmem_lock); +#endif /* DEBUG_KMEM_TRACKING */ +#endif /* DEBUG_KMEM */ +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-kobj.c +++ linux-aws-4.15.0/spl/module/spl/spl-kobj.c @@ -0,0 +1,86 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Kobj Implementation. +\*****************************************************************************/ + +#include + +struct _buf * +kobj_open_file(const char *name) +{ + struct _buf *file; + vnode_t *vp; + int rc; + + file = kmalloc(sizeof(_buf_t), kmem_flags_convert(KM_SLEEP)); + if (file == NULL) + return ((_buf_t *)-1UL); + + if ((rc = vn_open(name, UIO_SYSSPACE, FREAD, 0644, &vp, 0, 0))) { + kfree(file); + return ((_buf_t *)-1UL); + } + + file->vp = vp; + + return (file); +} /* kobj_open_file() */ +EXPORT_SYMBOL(kobj_open_file); + +void +kobj_close_file(struct _buf *file) +{ + VOP_CLOSE(file->vp, 0, 0, 0, 0, 0); + kfree(file); +} /* kobj_close_file() */ +EXPORT_SYMBOL(kobj_close_file); + +int +kobj_read_file(struct _buf *file, char *buf, unsigned size, unsigned off) +{ + ssize_t resid; + + if (vn_rdwr(UIO_READ, file->vp, buf, size, (offset_t)off, + UIO_SYSSPACE, 0, 0, 0, &resid) != 0) + return (-1); + + return (size - resid); +} /* kobj_read_file() */ +EXPORT_SYMBOL(kobj_read_file); + +int +kobj_get_filesize(struct _buf *file, uint64_t *size) +{ + vattr_t vap; + int rc; + + rc = VOP_GETATTR(file->vp, &vap, 0, 0, NULL); + if (rc) + return (rc); + + *size = vap.va_size; + + return (rc); +} /* kobj_get_filesize() */ +EXPORT_SYMBOL(kobj_get_filesize); --- linux-aws-4.15.0.orig/spl/module/spl/spl-kstat.c +++ linux-aws-4.15.0/spl/module/spl/spl-kstat.c @@ -0,0 +1,725 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Kstat Implementation. +\*****************************************************************************/ + +#include +#include +#include +#include + +#ifndef HAVE_PDE_DATA +#define PDE_DATA(x) (PDE(x)->data) +#endif + +static kmutex_t kstat_module_lock; +static struct list_head kstat_module_list; +static kid_t kstat_id; + +static int +kstat_resize_raw(kstat_t *ksp) +{ + if (ksp->ks_raw_bufsize == KSTAT_RAW_MAX) + return ENOMEM; + + vmem_free(ksp->ks_raw_buf, ksp->ks_raw_bufsize); + ksp->ks_raw_bufsize = MIN(ksp->ks_raw_bufsize * 2, KSTAT_RAW_MAX); + ksp->ks_raw_buf = vmem_alloc(ksp->ks_raw_bufsize, KM_SLEEP); + + return 0; +} + +void +kstat_waitq_enter(kstat_io_t *kiop) +{ + hrtime_t new, delta; + ulong_t wcnt; + + new = gethrtime(); + delta = new - kiop->wlastupdate; + kiop->wlastupdate = new; + wcnt = kiop->wcnt++; + if (wcnt != 0) { + kiop->wlentime += delta * wcnt; + kiop->wtime += delta; + } +} +EXPORT_SYMBOL(kstat_waitq_enter); + +void +kstat_waitq_exit(kstat_io_t *kiop) +{ + hrtime_t new, delta; + ulong_t wcnt; + + new = gethrtime(); + delta = new - kiop->wlastupdate; + kiop->wlastupdate = new; + wcnt = kiop->wcnt--; + ASSERT((int)wcnt > 0); + kiop->wlentime += delta * wcnt; + kiop->wtime += delta; +} +EXPORT_SYMBOL(kstat_waitq_exit); + +void +kstat_runq_enter(kstat_io_t *kiop) +{ + hrtime_t new, delta; + ulong_t rcnt; + + new = gethrtime(); + delta = new - kiop->rlastupdate; + kiop->rlastupdate = new; + rcnt = kiop->rcnt++; + if (rcnt != 0) { + kiop->rlentime += delta * rcnt; + kiop->rtime += delta; + } +} +EXPORT_SYMBOL(kstat_runq_enter); + +void +kstat_runq_exit(kstat_io_t *kiop) +{ + hrtime_t new, delta; + ulong_t rcnt; + + new = gethrtime(); + delta = new - kiop->rlastupdate; + kiop->rlastupdate = new; + rcnt = kiop->rcnt--; + ASSERT((int)rcnt > 0); + kiop->rlentime += delta * rcnt; + kiop->rtime += delta; +} +EXPORT_SYMBOL(kstat_runq_exit); + +static int +kstat_seq_show_headers(struct seq_file *f) +{ + kstat_t *ksp = (kstat_t *)f->private; + int rc = 0; + + ASSERT(ksp->ks_magic == KS_MAGIC); + + seq_printf(f, "%d %d 0x%02x %d %d %lld %lld\n", + ksp->ks_kid, ksp->ks_type, ksp->ks_flags, + ksp->ks_ndata, (int)ksp->ks_data_size, + ksp->ks_crtime, ksp->ks_snaptime); + + switch (ksp->ks_type) { + case KSTAT_TYPE_RAW: +restart: + if (ksp->ks_raw_ops.headers) { + rc = ksp->ks_raw_ops.headers( + ksp->ks_raw_buf, ksp->ks_raw_bufsize); + if (rc == ENOMEM && !kstat_resize_raw(ksp)) + goto restart; + if (!rc) + seq_puts(f, ksp->ks_raw_buf); + } else { + seq_printf(f, "raw data\n"); + } + break; + case KSTAT_TYPE_NAMED: + seq_printf(f, "%-31s %-4s %s\n", + "name", "type", "data"); + break; + case KSTAT_TYPE_INTR: + seq_printf(f, "%-8s %-8s %-8s %-8s %-8s\n", + "hard", "soft", "watchdog", + "spurious", "multsvc"); + break; + case KSTAT_TYPE_IO: + seq_printf(f, + "%-8s %-8s %-8s %-8s %-8s %-8s " + "%-8s %-8s %-8s %-8s %-8s %-8s\n", + "nread", "nwritten", "reads", "writes", + "wtime", "wlentime", "wupdate", + "rtime", "rlentime", "rupdate", + "wcnt", "rcnt"); + break; + case KSTAT_TYPE_TIMER: + seq_printf(f, + "%-31s %-8s " + "%-8s %-8s %-8s %-8s %-8s\n", + "name", "events", "elapsed", + "min", "max", "start", "stop"); + break; + default: + PANIC("Undefined kstat type %d\n", ksp->ks_type); + } + + return -rc; +} + +static int +kstat_seq_show_raw(struct seq_file *f, unsigned char *p, int l) +{ + int i, j; + + for (i = 0; ; i++) { + seq_printf(f, "%03x:", i); + + for (j = 0; j < 16; j++) { + if (i * 16 + j >= l) { + seq_printf(f, "\n"); + goto out; + } + + seq_printf(f, " %02x", (unsigned char)p[i * 16 + j]); + } + seq_printf(f, "\n"); + } +out: + return 0; +} + +static int +kstat_seq_show_named(struct seq_file *f, kstat_named_t *knp) +{ + seq_printf(f, "%-31s %-4d ", knp->name, knp->data_type); + + switch (knp->data_type) { + case KSTAT_DATA_CHAR: + knp->value.c[15] = '\0'; /* NULL terminate */ + seq_printf(f, "%-16s", knp->value.c); + break; + /* XXX - We need to be more careful able what tokens are + * used for each arch, for now this is correct for x86_64. + */ + case KSTAT_DATA_INT32: + seq_printf(f, "%d", knp->value.i32); + break; + case KSTAT_DATA_UINT32: + seq_printf(f, "%u", knp->value.ui32); + break; + case KSTAT_DATA_INT64: + seq_printf(f, "%lld", (signed long long)knp->value.i64); + break; + case KSTAT_DATA_UINT64: + seq_printf(f, "%llu", (unsigned long long)knp->value.ui64); + break; + case KSTAT_DATA_LONG: + seq_printf(f, "%ld", knp->value.l); + break; + case KSTAT_DATA_ULONG: + seq_printf(f, "%lu", knp->value.ul); + break; + case KSTAT_DATA_STRING: + KSTAT_NAMED_STR_PTR(knp) + [KSTAT_NAMED_STR_BUFLEN(knp)-1] = '\0'; + seq_printf(f, "%s", KSTAT_NAMED_STR_PTR(knp)); + break; + default: + PANIC("Undefined kstat data type %d\n", knp->data_type); + } + + seq_printf(f, "\n"); + + return 0; +} + +static int +kstat_seq_show_intr(struct seq_file *f, kstat_intr_t *kip) +{ + seq_printf(f, "%-8u %-8u %-8u %-8u %-8u\n", + kip->intrs[KSTAT_INTR_HARD], + kip->intrs[KSTAT_INTR_SOFT], + kip->intrs[KSTAT_INTR_WATCHDOG], + kip->intrs[KSTAT_INTR_SPURIOUS], + kip->intrs[KSTAT_INTR_MULTSVC]); + + return 0; +} + +static int +kstat_seq_show_io(struct seq_file *f, kstat_io_t *kip) +{ + seq_printf(f, + "%-8llu %-8llu %-8u %-8u %-8lld %-8lld " + "%-8lld %-8lld %-8lld %-8lld %-8u %-8u\n", + kip->nread, kip->nwritten, + kip->reads, kip->writes, + kip->wtime, kip->wlentime, kip->wlastupdate, + kip->rtime, kip->rlentime, kip->rlastupdate, + kip->wcnt, kip->rcnt); + + return 0; +} + +static int +kstat_seq_show_timer(struct seq_file *f, kstat_timer_t *ktp) +{ + seq_printf(f, + "%-31s %-8llu %-8lld %-8lld %-8lld %-8lld %-8lld\n", + ktp->name, ktp->num_events, ktp->elapsed_time, + ktp->min_time, ktp->max_time, + ktp->start_time, ktp->stop_time); + + return 0; +} + +static int +kstat_seq_show(struct seq_file *f, void *p) +{ + kstat_t *ksp = (kstat_t *)f->private; + int rc = 0; + + ASSERT(ksp->ks_magic == KS_MAGIC); + + switch (ksp->ks_type) { + case KSTAT_TYPE_RAW: +restart: + if (ksp->ks_raw_ops.data) { + rc = ksp->ks_raw_ops.data( + ksp->ks_raw_buf, ksp->ks_raw_bufsize, p); + if (rc == ENOMEM && !kstat_resize_raw(ksp)) + goto restart; + if (!rc) + seq_puts(f, ksp->ks_raw_buf); + } else { + ASSERT(ksp->ks_ndata == 1); + rc = kstat_seq_show_raw(f, ksp->ks_data, + ksp->ks_data_size); + } + break; + case KSTAT_TYPE_NAMED: + rc = kstat_seq_show_named(f, (kstat_named_t *)p); + break; + case KSTAT_TYPE_INTR: + rc = kstat_seq_show_intr(f, (kstat_intr_t *)p); + break; + case KSTAT_TYPE_IO: + rc = kstat_seq_show_io(f, (kstat_io_t *)p); + break; + case KSTAT_TYPE_TIMER: + rc = kstat_seq_show_timer(f, (kstat_timer_t *)p); + break; + default: + PANIC("Undefined kstat type %d\n", ksp->ks_type); + } + + return -rc; +} + +int +kstat_default_update(kstat_t *ksp, int rw) +{ + ASSERT(ksp != NULL); + + if (rw == KSTAT_WRITE) + return (EACCES); + + return 0; +} + +static void * +kstat_seq_data_addr(kstat_t *ksp, loff_t n) +{ + void *rc = NULL; + + switch (ksp->ks_type) { + case KSTAT_TYPE_RAW: + if (ksp->ks_raw_ops.addr) + rc = ksp->ks_raw_ops.addr(ksp, n); + else + rc = ksp->ks_data; + break; + case KSTAT_TYPE_NAMED: + rc = ksp->ks_data + n * sizeof(kstat_named_t); + break; + case KSTAT_TYPE_INTR: + rc = ksp->ks_data + n * sizeof(kstat_intr_t); + break; + case KSTAT_TYPE_IO: + rc = ksp->ks_data + n * sizeof(kstat_io_t); + break; + case KSTAT_TYPE_TIMER: + rc = ksp->ks_data + n * sizeof(kstat_timer_t); + break; + default: + PANIC("Undefined kstat type %d\n", ksp->ks_type); + } + + return (rc); +} + +static void * +kstat_seq_start(struct seq_file *f, loff_t *pos) +{ + loff_t n = *pos; + kstat_t *ksp = (kstat_t *)f->private; + ASSERT(ksp->ks_magic == KS_MAGIC); + + mutex_enter(ksp->ks_lock); + + if (ksp->ks_type == KSTAT_TYPE_RAW) { + ksp->ks_raw_bufsize = PAGE_SIZE; + ksp->ks_raw_buf = vmem_alloc(ksp->ks_raw_bufsize, KM_SLEEP); + } + + /* Dynamically update kstat, on error existing kstats are used */ + (void) ksp->ks_update(ksp, KSTAT_READ); + + ksp->ks_snaptime = gethrtime(); + + if (!n && kstat_seq_show_headers(f)) + return (NULL); + + if (n >= ksp->ks_ndata) + return (NULL); + + return (kstat_seq_data_addr(ksp, n)); +} + +static void * +kstat_seq_next(struct seq_file *f, void *p, loff_t *pos) +{ + kstat_t *ksp = (kstat_t *)f->private; + ASSERT(ksp->ks_magic == KS_MAGIC); + + ++*pos; + if (*pos >= ksp->ks_ndata) + return (NULL); + + return (kstat_seq_data_addr(ksp, *pos)); +} + +static void +kstat_seq_stop(struct seq_file *f, void *v) +{ + kstat_t *ksp = (kstat_t *)f->private; + ASSERT(ksp->ks_magic == KS_MAGIC); + + if (ksp->ks_type == KSTAT_TYPE_RAW) + vmem_free(ksp->ks_raw_buf, ksp->ks_raw_bufsize); + + mutex_exit(ksp->ks_lock); +} + +static struct seq_operations kstat_seq_ops = { + .show = kstat_seq_show, + .start = kstat_seq_start, + .next = kstat_seq_next, + .stop = kstat_seq_stop, +}; + +static kstat_module_t * +kstat_find_module(char *name) +{ + kstat_module_t *module; + + list_for_each_entry(module, &kstat_module_list, ksm_module_list) + if (strncmp(name, module->ksm_name, KSTAT_STRLEN) == 0) + return (module); + + return (NULL); +} + +static kstat_module_t * +kstat_create_module(char *name) +{ + kstat_module_t *module; + struct proc_dir_entry *pde; + + pde = proc_mkdir(name, proc_spl_kstat); + if (pde == NULL) + return (NULL); + + module = kmem_alloc(sizeof (kstat_module_t), KM_SLEEP); + module->ksm_proc = pde; + strlcpy(module->ksm_name, name, KSTAT_STRLEN+1); + INIT_LIST_HEAD(&module->ksm_kstat_list); + list_add_tail(&module->ksm_module_list, &kstat_module_list); + + return (module); + +} + +static void +kstat_delete_module(kstat_module_t *module) +{ + ASSERT(list_empty(&module->ksm_kstat_list)); + remove_proc_entry(module->ksm_name, proc_spl_kstat); + list_del(&module->ksm_module_list); + kmem_free(module, sizeof(kstat_module_t)); +} + +static int +proc_kstat_open(struct inode *inode, struct file *filp) +{ + struct seq_file *f; + int rc; + + rc = seq_open(filp, &kstat_seq_ops); + if (rc) + return rc; + + f = filp->private_data; + f->private = PDE_DATA(inode); + + return rc; +} + +static ssize_t +proc_kstat_write(struct file *filp, const char __user *buf, + size_t len, loff_t *ppos) +{ + struct seq_file *f = filp->private_data; + kstat_t *ksp = f->private; + int rc; + + ASSERT(ksp->ks_magic == KS_MAGIC); + + mutex_enter(ksp->ks_lock); + rc = ksp->ks_update(ksp, KSTAT_WRITE); + mutex_exit(ksp->ks_lock); + + if (rc) + return (-rc); + + *ppos += len; + return (len); +} + +static struct file_operations proc_kstat_operations = { + .open = proc_kstat_open, + .write = proc_kstat_write, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +void +__kstat_set_raw_ops(kstat_t *ksp, + int (*headers)(char *buf, size_t size), + int (*data)(char *buf, size_t size, void *data), + void *(*addr)(kstat_t *ksp, loff_t index)) +{ + ksp->ks_raw_ops.headers = headers; + ksp->ks_raw_ops.data = data; + ksp->ks_raw_ops.addr = addr; +} +EXPORT_SYMBOL(__kstat_set_raw_ops); + +kstat_t * +__kstat_create(const char *ks_module, int ks_instance, const char *ks_name, + const char *ks_class, uchar_t ks_type, uint_t ks_ndata, + uchar_t ks_flags) +{ + kstat_t *ksp; + + ASSERT(ks_module); + ASSERT(ks_instance == 0); + ASSERT(ks_name); + ASSERT(!(ks_flags & KSTAT_FLAG_UNSUPPORTED)); + + if ((ks_type == KSTAT_TYPE_INTR) || (ks_type == KSTAT_TYPE_IO)) + ASSERT(ks_ndata == 1); + + ksp = kmem_zalloc(sizeof(*ksp), KM_SLEEP); + if (ksp == NULL) + return ksp; + + mutex_enter(&kstat_module_lock); + ksp->ks_kid = kstat_id; + kstat_id++; + mutex_exit(&kstat_module_lock); + + ksp->ks_magic = KS_MAGIC; + mutex_init(&ksp->ks_private_lock, NULL, MUTEX_DEFAULT, NULL); + ksp->ks_lock = &ksp->ks_private_lock; + INIT_LIST_HEAD(&ksp->ks_list); + + ksp->ks_crtime = gethrtime(); + ksp->ks_snaptime = ksp->ks_crtime; + strncpy(ksp->ks_module, ks_module, KSTAT_STRLEN); + ksp->ks_instance = ks_instance; + strncpy(ksp->ks_name, ks_name, KSTAT_STRLEN); + strncpy(ksp->ks_class, ks_class, KSTAT_STRLEN); + ksp->ks_type = ks_type; + ksp->ks_flags = ks_flags; + ksp->ks_update = kstat_default_update; + ksp->ks_private = NULL; + ksp->ks_raw_ops.headers = NULL; + ksp->ks_raw_ops.data = NULL; + ksp->ks_raw_ops.addr = NULL; + ksp->ks_raw_buf = NULL; + ksp->ks_raw_bufsize = 0; + + switch (ksp->ks_type) { + case KSTAT_TYPE_RAW: + ksp->ks_ndata = 1; + ksp->ks_data_size = ks_ndata; + break; + case KSTAT_TYPE_NAMED: + ksp->ks_ndata = ks_ndata; + ksp->ks_data_size = ks_ndata * sizeof(kstat_named_t); + break; + case KSTAT_TYPE_INTR: + ksp->ks_ndata = ks_ndata; + ksp->ks_data_size = ks_ndata * sizeof(kstat_intr_t); + break; + case KSTAT_TYPE_IO: + ksp->ks_ndata = ks_ndata; + ksp->ks_data_size = ks_ndata * sizeof(kstat_io_t); + break; + case KSTAT_TYPE_TIMER: + ksp->ks_ndata = ks_ndata; + ksp->ks_data_size = ks_ndata * sizeof(kstat_timer_t); + break; + default: + PANIC("Undefined kstat type %d\n", ksp->ks_type); + } + + if (ksp->ks_flags & KSTAT_FLAG_VIRTUAL) { + ksp->ks_data = NULL; + } else { + ksp->ks_data = kmem_zalloc(ksp->ks_data_size, KM_SLEEP); + if (ksp->ks_data == NULL) { + kmem_free(ksp, sizeof(*ksp)); + ksp = NULL; + } + } + + return ksp; +} +EXPORT_SYMBOL(__kstat_create); + +static int +kstat_detect_collision(kstat_t *ksp) +{ + kstat_module_t *module; + kstat_t *tmp; + char parent[KSTAT_STRLEN+1]; + char *cp; + + (void) strlcpy(parent, ksp->ks_module, sizeof(parent)); + + if ((cp = strrchr(parent, '/')) == NULL) + return (0); + + cp[0] = '\0'; + if ((module = kstat_find_module(parent)) != NULL) { + list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list) + if (strncmp(tmp->ks_name, cp+1, KSTAT_STRLEN) == 0) + return (EEXIST); + } + + return (0); +} + +void +__kstat_install(kstat_t *ksp) +{ + kstat_module_t *module; + kstat_t *tmp; + + ASSERT(ksp); + + mutex_enter(&kstat_module_lock); + + module = kstat_find_module(ksp->ks_module); + if (module == NULL) { + if (kstat_detect_collision(ksp) != 0) { + cmn_err(CE_WARN, "kstat_create('%s', '%s'): namespace" \ + " collision", ksp->ks_module, ksp->ks_name); + goto out; + } + module = kstat_create_module(ksp->ks_module); + if (module == NULL) + goto out; + } + + /* + * Only one entry by this name per-module, on failure the module + * shouldn't be deleted because we know it has at least one entry. + */ + list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list) + if (strncmp(tmp->ks_name, ksp->ks_name, KSTAT_STRLEN) == 0) + goto out; + + list_add_tail(&ksp->ks_list, &module->ksm_kstat_list); + + mutex_enter(ksp->ks_lock); + ksp->ks_owner = module; + ksp->ks_proc = proc_create_data(ksp->ks_name, 0644, + module->ksm_proc, &proc_kstat_operations, (void *)ksp); + if (ksp->ks_proc == NULL) { + list_del_init(&ksp->ks_list); + if (list_empty(&module->ksm_kstat_list)) + kstat_delete_module(module); + } + mutex_exit(ksp->ks_lock); +out: + mutex_exit(&kstat_module_lock); +} +EXPORT_SYMBOL(__kstat_install); + +void +__kstat_delete(kstat_t *ksp) +{ + kstat_module_t *module = ksp->ks_owner; + + mutex_enter(&kstat_module_lock); + list_del_init(&ksp->ks_list); + mutex_exit(&kstat_module_lock); + + if (ksp->ks_proc) { + remove_proc_entry(ksp->ks_name, module->ksm_proc); + + /* Remove top level module directory if it's empty */ + if (list_empty(&module->ksm_kstat_list)) + kstat_delete_module(module); + } + + if (!(ksp->ks_flags & KSTAT_FLAG_VIRTUAL)) + kmem_free(ksp->ks_data, ksp->ks_data_size); + + ksp->ks_lock = NULL; + mutex_destroy(&ksp->ks_private_lock); + kmem_free(ksp, sizeof(*ksp)); + + return; +} +EXPORT_SYMBOL(__kstat_delete); + +int +spl_kstat_init(void) +{ + mutex_init(&kstat_module_lock, NULL, MUTEX_DEFAULT, NULL); + INIT_LIST_HEAD(&kstat_module_list); + kstat_id = 0; + return (0); +} + +void +spl_kstat_fini(void) +{ + ASSERT(list_empty(&kstat_module_list)); + mutex_destroy(&kstat_module_lock); +} + --- linux-aws-4.15.0.orig/spl/module/spl/spl-mutex.c +++ linux-aws-4.15.0/spl/module/spl/spl-mutex.c @@ -0,0 +1,36 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Mutex Implementation. +\*****************************************************************************/ + +#include + +#ifdef DEBUG_SUBSYSTEM +#undef DEBUG_SUBSYSTEM +#endif + +#define DEBUG_SUBSYSTEM S_MUTEX + +int spl_mutex_init(void) { return 0; } +void spl_mutex_fini(void) { } --- linux-aws-4.15.0.orig/spl/module/spl/spl-proc.c +++ linux-aws-4.15.0/spl/module/spl/spl-proc.c @@ -0,0 +1,774 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Proc Implementation. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(CONSTIFY_PLUGIN) && LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) +typedef struct ctl_table __no_const spl_ctl_table; +#else +typedef struct ctl_table spl_ctl_table; +#endif + +static unsigned long table_min = 0; +static unsigned long table_max = ~0; + +static struct ctl_table_header *spl_header = NULL; +static struct proc_dir_entry *proc_spl = NULL; +static struct proc_dir_entry *proc_spl_kmem = NULL; +static struct proc_dir_entry *proc_spl_kmem_slab = NULL; +static struct proc_dir_entry *proc_spl_taskq_all = NULL; +static struct proc_dir_entry *proc_spl_taskq = NULL; +struct proc_dir_entry *proc_spl_kstat = NULL; + +static int +proc_copyin_string(char *kbuffer, int kbuffer_size, + const char *ubuffer, int ubuffer_size) +{ + int size; + + if (ubuffer_size > kbuffer_size) + return -EOVERFLOW; + + if (copy_from_user((void *)kbuffer, (void *)ubuffer, ubuffer_size)) + return -EFAULT; + + /* strip trailing whitespace */ + size = strnlen(kbuffer, ubuffer_size); + while (size-- >= 0) + if (!isspace(kbuffer[size])) + break; + + /* empty string */ + if (size < 0) + return -EINVAL; + + /* no space to terminate */ + if (size == kbuffer_size) + return -EOVERFLOW; + + kbuffer[size + 1] = 0; + return 0; +} + +static int +proc_copyout_string(char *ubuffer, int ubuffer_size, + const char *kbuffer, char *append) +{ + /* NB if 'append' != NULL, it's a single character to append to the + * copied out string - usually "\n", for /proc entries and + * (i.e. a terminating zero byte) for sysctl entries + */ + int size = MIN(strlen(kbuffer), ubuffer_size); + + if (copy_to_user(ubuffer, kbuffer, size)) + return -EFAULT; + + if (append != NULL && size < ubuffer_size) { + if (copy_to_user(ubuffer + size, append, 1)) + return -EFAULT; + + size++; + } + + return size; +} + +#ifdef DEBUG_KMEM +static int +proc_domemused(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int rc = 0; + unsigned long min = 0, max = ~0, val; + spl_ctl_table dummy = *table; + + dummy.data = &val; + dummy.proc_handler = &proc_dointvec; + dummy.extra1 = &min; + dummy.extra2 = &max; + + if (write) { + *ppos += *lenp; + } else { +# ifdef HAVE_ATOMIC64_T + val = atomic64_read((atomic64_t *)table->data); +# else + val = atomic_read((atomic_t *)table->data); +# endif /* HAVE_ATOMIC64_T */ + rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos); + } + + return (rc); +} +#endif /* DEBUG_KMEM */ + +static int +proc_doslab(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int rc = 0; + unsigned long min = 0, max = ~0, val = 0, mask; + spl_ctl_table dummy = *table; + spl_kmem_cache_t *skc; + + dummy.data = &val; + dummy.proc_handler = &proc_dointvec; + dummy.extra1 = &min; + dummy.extra2 = &max; + + if (write) { + *ppos += *lenp; + } else { + down_read(&spl_kmem_cache_sem); + mask = (unsigned long)table->data; + + list_for_each_entry(skc, &spl_kmem_cache_list, skc_list) { + + /* Only use slabs of the correct kmem/vmem type */ + if (!(skc->skc_flags & mask)) + continue; + + /* Sum the specified field for selected slabs */ + switch (mask & (KMC_TOTAL | KMC_ALLOC | KMC_MAX)) { + case KMC_TOTAL: + val += skc->skc_slab_size * skc->skc_slab_total; + break; + case KMC_ALLOC: + val += skc->skc_obj_size * skc->skc_obj_alloc; + break; + case KMC_MAX: + val += skc->skc_obj_size * skc->skc_obj_max; + break; + } + } + + up_read(&spl_kmem_cache_sem); + rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos); + } + + return (rc); +} + +static int +proc_dohostid(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int len, rc = 0; + char *end, str[32]; + + if (write) { + /* We can't use proc_doulongvec_minmax() in the write + * case here because hostid while a hex value has no + * leading 0x which confuses the helper function. */ + rc = proc_copyin_string(str, sizeof(str), buffer, *lenp); + if (rc < 0) + return (rc); + + spl_hostid = simple_strtoul(str, &end, 16); + if (str == end) + return (-EINVAL); + + } else { + len = snprintf(str, sizeof(str), "%lx", + (unsigned long) zone_get_hostid(NULL)); + if (*ppos >= len) + rc = 0; + else + rc = proc_copyout_string(buffer,*lenp,str+*ppos,"\n"); + + if (rc >= 0) { + *lenp = rc; + *ppos += rc; + } + } + + return (rc); +} + +static void +taskq_seq_show_headers(struct seq_file *f) +{ + seq_printf(f, "%-25s %5s %5s %5s %5s %5s %5s %12s %5s %10s\n", + "taskq", "act", "nthr", "spwn", "maxt", "pri", + "mina", "maxa", "cura", "flags"); +} + +/* indices into the lheads array below */ +#define LHEAD_PEND 0 +#define LHEAD_PRIO 1 +#define LHEAD_DELAY 2 +#define LHEAD_WAIT 3 +#define LHEAD_ACTIVE 4 +#define LHEAD_SIZE 5 + +static unsigned int spl_max_show_tasks = 512; +module_param(spl_max_show_tasks, uint, 0644); +MODULE_PARM_DESC(spl_max_show_tasks, "Max number of tasks shown in taskq proc"); + +static int +taskq_seq_show_impl(struct seq_file *f, void *p, boolean_t allflag) +{ + taskq_t *tq = p; + taskq_thread_t *tqt; + spl_wait_queue_entry_t *wq; + struct task_struct *tsk; + taskq_ent_t *tqe; + char name[100]; + struct list_head *lheads[LHEAD_SIZE], *lh; + static char *list_names[LHEAD_SIZE] = + {"pend", "prio", "delay", "wait", "active" }; + int i, j, have_lheads = 0; + unsigned long wflags, flags; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + spin_lock_irqsave(&tq->tq_wait_waitq.lock, wflags); + + /* get the various lists and check whether they're empty */ + lheads[LHEAD_PEND] = &tq->tq_pend_list; + lheads[LHEAD_PRIO] = &tq->tq_prio_list; + lheads[LHEAD_DELAY] = &tq->tq_delay_list; +#ifdef HAVE_WAIT_QUEUE_HEAD_ENTRY + lheads[LHEAD_WAIT] = &tq->tq_wait_waitq.head; +#else + lheads[LHEAD_WAIT] = &tq->tq_wait_waitq.task_list; +#endif + lheads[LHEAD_ACTIVE] = &tq->tq_active_list; + + for (i = 0; i < LHEAD_SIZE; ++i) { + if (list_empty(lheads[i])) + lheads[i] = NULL; + else + ++have_lheads; + } + + /* early return in non-"all" mode if lists are all empty */ + if (!allflag && !have_lheads) { + spin_unlock_irqrestore(&tq->tq_wait_waitq.lock, wflags); + spin_unlock_irqrestore(&tq->tq_lock, flags); + return (0); + } + + /* unlock the waitq quickly */ + if (!lheads[LHEAD_WAIT]) + spin_unlock_irqrestore(&tq->tq_wait_waitq.lock, wflags); + + /* show the base taskq contents */ + snprintf(name, sizeof(name), "%s/%d", tq->tq_name, tq->tq_instance); + seq_printf(f, "%-25s ", name); + seq_printf(f, "%5d %5d %5d %5d %5d %5d %12d %5d %10x\n", + tq->tq_nactive, tq->tq_nthreads, tq->tq_nspawn, + tq->tq_maxthreads, tq->tq_pri, tq->tq_minalloc, tq->tq_maxalloc, + tq->tq_nalloc, tq->tq_flags); + + /* show the active list */ + if (lheads[LHEAD_ACTIVE]) { + j = 0; + list_for_each_entry(tqt, &tq->tq_active_list, tqt_active_list) { + if (j == 0) + seq_printf(f, "\t%s:", list_names[LHEAD_ACTIVE]); + else if (j == 2) { + seq_printf(f, "\n\t "); + j = 0; + } + seq_printf(f, " [%d]%pf(%ps)", + tqt->tqt_thread->pid, + tqt->tqt_task->tqent_func, + tqt->tqt_task->tqent_arg); + ++j; + } + seq_printf(f, "\n"); + } + + for (i = LHEAD_PEND; i <= LHEAD_WAIT; ++i) + if (lheads[i]) { + j = 0; + list_for_each(lh, lheads[i]) { + if (spl_max_show_tasks != 0 && + j >= spl_max_show_tasks) { + seq_printf(f, "\n\t(truncated)"); + break; + } + /* show the wait waitq list */ + if (i == LHEAD_WAIT) { +#ifdef HAVE_WAIT_QUEUE_HEAD_ENTRY + wq = list_entry(lh, + spl_wait_queue_entry_t, entry); +#else + wq = list_entry(lh, + spl_wait_queue_entry_t, task_list); +#endif + if (j == 0) + seq_printf(f, "\t%s:", + list_names[i]); + else if (j % 8 == 0) + seq_printf(f, "\n\t "); + + tsk = wq->private; + seq_printf(f, " %d", tsk->pid); + /* pend, prio and delay lists */ + } else { + tqe = list_entry(lh, taskq_ent_t, + tqent_list); + if (j == 0) + seq_printf(f, "\t%s:", + list_names[i]); + else if (j % 2 == 0) + seq_printf(f, "\n\t "); + + seq_printf(f, " %pf(%ps)", + tqe->tqent_func, + tqe->tqent_arg); + } + ++j; + } + seq_printf(f, "\n"); + } + if (lheads[LHEAD_WAIT]) + spin_unlock_irqrestore(&tq->tq_wait_waitq.lock, wflags); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + return (0); +} + +static int +taskq_all_seq_show(struct seq_file *f, void *p) +{ + return (taskq_seq_show_impl(f, p, B_TRUE)); +} + +static int +taskq_seq_show(struct seq_file *f, void *p) +{ + return (taskq_seq_show_impl(f, p, B_FALSE)); +} + +static void * +taskq_seq_start(struct seq_file *f, loff_t *pos) +{ + struct list_head *p; + loff_t n = *pos; + + down_read(&tq_list_sem); + if (!n) + taskq_seq_show_headers(f); + + p = tq_list.next; + while (n--) { + p = p->next; + if (p == &tq_list) + return (NULL); + } + + return (list_entry(p, taskq_t, tq_taskqs)); +} + +static void * +taskq_seq_next(struct seq_file *f, void *p, loff_t *pos) +{ + taskq_t *tq = p; + + ++*pos; + return ((tq->tq_taskqs.next == &tq_list) ? + NULL : list_entry(tq->tq_taskqs.next, taskq_t, tq_taskqs)); +} + +static void +slab_seq_show_headers(struct seq_file *f) +{ + seq_printf(f, + "--------------------- cache ----------" + "--------------------------------------------- " + "----- slab ------ " + "---- object ----- " + "--- emergency ---\n"); + seq_printf(f, + "name " + " flags size alloc slabsize objsize " + "total alloc max " + "total alloc max " + "dlock alloc max\n"); +} + +static int +slab_seq_show(struct seq_file *f, void *p) +{ + spl_kmem_cache_t *skc = p; + + ASSERT(skc->skc_magic == SKC_MAGIC); + + /* + * Backed by Linux slab see /proc/slabinfo. + */ + if (skc->skc_flags & KMC_SLAB) + return (0); + + spin_lock(&skc->skc_lock); + seq_printf(f, "%-36s ", skc->skc_name); + seq_printf(f, "0x%05lx %9lu %9lu %8u %8u " + "%5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu %5lu\n", + (long unsigned)skc->skc_flags, + (long unsigned)(skc->skc_slab_size * skc->skc_slab_total), + (long unsigned)(skc->skc_obj_size * skc->skc_obj_alloc), + (unsigned)skc->skc_slab_size, + (unsigned)skc->skc_obj_size, + (long unsigned)skc->skc_slab_total, + (long unsigned)skc->skc_slab_alloc, + (long unsigned)skc->skc_slab_max, + (long unsigned)skc->skc_obj_total, + (long unsigned)skc->skc_obj_alloc, + (long unsigned)skc->skc_obj_max, + (long unsigned)skc->skc_obj_deadlock, + (long unsigned)skc->skc_obj_emergency, + (long unsigned)skc->skc_obj_emergency_max); + + spin_unlock(&skc->skc_lock); + + return 0; +} + +static void * +slab_seq_start(struct seq_file *f, loff_t *pos) +{ + struct list_head *p; + loff_t n = *pos; + + down_read(&spl_kmem_cache_sem); + if (!n) + slab_seq_show_headers(f); + + p = spl_kmem_cache_list.next; + while (n--) { + p = p->next; + if (p == &spl_kmem_cache_list) + return (NULL); + } + + return (list_entry(p, spl_kmem_cache_t, skc_list)); +} + +static void * +slab_seq_next(struct seq_file *f, void *p, loff_t *pos) +{ + spl_kmem_cache_t *skc = p; + + ++*pos; + return ((skc->skc_list.next == &spl_kmem_cache_list) ? + NULL : list_entry(skc->skc_list.next,spl_kmem_cache_t,skc_list)); +} + +static void +slab_seq_stop(struct seq_file *f, void *v) +{ + up_read(&spl_kmem_cache_sem); +} + +static struct seq_operations slab_seq_ops = { + .show = slab_seq_show, + .start = slab_seq_start, + .next = slab_seq_next, + .stop = slab_seq_stop, +}; + +static int +proc_slab_open(struct inode *inode, struct file *filp) +{ + return seq_open(filp, &slab_seq_ops); +} + +static struct file_operations proc_slab_operations = { + .open = proc_slab_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static void +taskq_seq_stop(struct seq_file *f, void *v) +{ + up_read(&tq_list_sem); +} + +static struct seq_operations taskq_all_seq_ops = { + .show = taskq_all_seq_show, + .start = taskq_seq_start, + .next = taskq_seq_next, + .stop = taskq_seq_stop, +}; + +static struct seq_operations taskq_seq_ops = { + .show = taskq_seq_show, + .start = taskq_seq_start, + .next = taskq_seq_next, + .stop = taskq_seq_stop, +}; + +static int +proc_taskq_all_open(struct inode *inode, struct file *filp) +{ + return seq_open(filp, &taskq_all_seq_ops); +} + +static int +proc_taskq_open(struct inode *inode, struct file *filp) +{ + return seq_open(filp, &taskq_seq_ops); +} + +static struct file_operations proc_taskq_all_operations = { + .open = proc_taskq_all_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct file_operations proc_taskq_operations = { + .open = proc_taskq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static struct ctl_table spl_kmem_table[] = { +#ifdef DEBUG_KMEM + { + .procname = "kmem_used", + .data = &kmem_alloc_used, +# ifdef HAVE_ATOMIC64_T + .maxlen = sizeof(atomic64_t), +# else + .maxlen = sizeof(atomic_t), +# endif /* HAVE_ATOMIC64_T */ + .mode = 0444, + .proc_handler = &proc_domemused, + }, + { + .procname = "kmem_max", + .data = &kmem_alloc_max, + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doulongvec_minmax, + }, +#endif /* DEBUG_KMEM */ + { + .procname = "slab_kmem_total", + .data = (void *)(KMC_KMEM | KMC_TOTAL), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + { + .procname = "slab_kmem_alloc", + .data = (void *)(KMC_KMEM | KMC_ALLOC), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + { + .procname = "slab_kmem_max", + .data = (void *)(KMC_KMEM | KMC_MAX), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + { + .procname = "slab_vmem_total", + .data = (void *)(KMC_VMEM | KMC_TOTAL), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + { + .procname = "slab_vmem_alloc", + .data = (void *)(KMC_VMEM | KMC_ALLOC), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + { + .procname = "slab_vmem_max", + .data = (void *)(KMC_VMEM | KMC_MAX), + .maxlen = sizeof(unsigned long), + .extra1 = &table_min, + .extra2 = &table_max, + .mode = 0444, + .proc_handler = &proc_doslab, + }, + {}, +}; + +static struct ctl_table spl_kstat_table[] = { + {}, +}; + +static struct ctl_table spl_table[] = { + /* NB No .strategy entries have been provided since + * sysctl(8) prefers to go via /proc for portability. + */ + { + .procname = "version", + .data = spl_version, + .maxlen = sizeof(spl_version), + .mode = 0444, + .proc_handler = &proc_dostring, + }, + { + .procname = "hostid", + .data = &spl_hostid, + .maxlen = sizeof(unsigned long), + .mode = 0644, + .proc_handler = &proc_dohostid, + }, + { + .procname = "kmem", + .mode = 0555, + .child = spl_kmem_table, + }, + { + .procname = "kstat", + .mode = 0555, + .child = spl_kstat_table, + }, + {}, +}; + +static struct ctl_table spl_dir[] = { + { + .procname = "spl", + .mode = 0555, + .child = spl_table, + }, + {} +}; + +static struct ctl_table spl_root[] = { + { +#ifdef HAVE_CTL_NAME + .ctl_name = CTL_KERN, +#endif + .procname = "kernel", + .mode = 0555, + .child = spl_dir, + }, + {} +}; + +int +spl_proc_init(void) +{ + int rc = 0; + + spl_header = register_sysctl_table(spl_root); + if (spl_header == NULL) + return (-EUNATCH); + + proc_spl = proc_mkdir("spl", NULL); + if (proc_spl == NULL) { + rc = -EUNATCH; + goto out; + } + + proc_spl_taskq_all = proc_create_data("taskq-all", 0444, + proc_spl, &proc_taskq_all_operations, NULL); + if (proc_spl_taskq_all == NULL) { + rc = -EUNATCH; + goto out; + } + + proc_spl_taskq = proc_create_data("taskq", 0444, + proc_spl, &proc_taskq_operations, NULL); + if (proc_spl_taskq == NULL) { + rc = -EUNATCH; + goto out; + } + + proc_spl_kmem = proc_mkdir("kmem", proc_spl); + if (proc_spl_kmem == NULL) { + rc = -EUNATCH; + goto out; + } + + proc_spl_kmem_slab = proc_create_data("slab", 0444, + proc_spl_kmem, &proc_slab_operations, NULL); + if (proc_spl_kmem_slab == NULL) { + rc = -EUNATCH; + goto out; + } + + proc_spl_kstat = proc_mkdir("kstat", proc_spl); + if (proc_spl_kstat == NULL) { + rc = -EUNATCH; + goto out; + } +out: + if (rc) { + remove_proc_entry("kstat", proc_spl); + remove_proc_entry("slab", proc_spl_kmem); + remove_proc_entry("kmem", proc_spl); + remove_proc_entry("taskq-all", proc_spl); + remove_proc_entry("taskq", proc_spl); + remove_proc_entry("spl", NULL); + unregister_sysctl_table(spl_header); + } + + return (rc); +} + +void +spl_proc_fini(void) +{ + remove_proc_entry("kstat", proc_spl); + remove_proc_entry("slab", proc_spl_kmem); + remove_proc_entry("kmem", proc_spl); + remove_proc_entry("taskq-all", proc_spl); + remove_proc_entry("taskq", proc_spl); + remove_proc_entry("spl", NULL); + + ASSERT(spl_header != NULL); + unregister_sysctl_table(spl_header); +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-rwlock.c +++ linux-aws-4.15.0/spl/module/spl/spl-rwlock.c @@ -0,0 +1,120 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Reader/Writer Lock Implementation. +\*****************************************************************************/ + +#include + +#ifdef DEBUG_SUBSYSTEM +#undef DEBUG_SUBSYSTEM +#endif + +#define DEBUG_SUBSYSTEM S_RWLOCK + +#if defined(CONFIG_PREEMPT_RT_FULL) + +#include +#define RT_MUTEX_OWNER_MASKALL 1UL + +static int +__rwsem_tryupgrade(struct rw_semaphore *rwsem) +{ + + ASSERT((struct task_struct *) + ((unsigned long)rwsem->lock.owner & ~RT_MUTEX_OWNER_MASKALL) == + current); + + /* + * Under the realtime patch series, rwsem is implemented as a + * single mutex held by readers and writers alike. However, + * this implementation would prevent a thread from taking a + * read lock twice, as the mutex would already be locked on + * the second attempt. Therefore the implementation allows a + * single thread to take a rwsem as read lock multiple times + * tracking that nesting as read_depth counter. + */ + if (rwsem->read_depth <= 1) { + /* + * In case, the current thread has not taken the lock + * more than once as read lock, we can allow an + * upgrade to a write lock. rwsem_rt.h implements + * write locks as read_depth == 0. + */ + rwsem->read_depth = 0; + return (1); + } + return (0); +} +#elif defined(CONFIG_RWSEM_GENERIC_SPINLOCK) +static int +__rwsem_tryupgrade(struct rw_semaphore *rwsem) +{ + int ret = 0; + unsigned long flags; + spl_rwsem_lock_irqsave(&rwsem->wait_lock, flags); + if (RWSEM_COUNT(rwsem) == SPL_RWSEM_SINGLE_READER_VALUE && + list_empty(&rwsem->wait_list)) { + ret = 1; + RWSEM_COUNT(rwsem) = SPL_RWSEM_SINGLE_WRITER_VALUE; + } + spl_rwsem_unlock_irqrestore(&rwsem->wait_lock, flags); + return (ret); +} +#elif defined(HAVE_RWSEM_ATOMIC_LONG_COUNT) +static int +__rwsem_tryupgrade(struct rw_semaphore *rwsem) +{ + long val; + val = atomic_long_cmpxchg(&rwsem->count, SPL_RWSEM_SINGLE_READER_VALUE, + SPL_RWSEM_SINGLE_WRITER_VALUE); + return (val == SPL_RWSEM_SINGLE_READER_VALUE); +} +#else +static int +__rwsem_tryupgrade(struct rw_semaphore *rwsem) +{ + typeof (rwsem->count) val; + val = cmpxchg(&rwsem->count, SPL_RWSEM_SINGLE_READER_VALUE, + SPL_RWSEM_SINGLE_WRITER_VALUE); + return (val == SPL_RWSEM_SINGLE_READER_VALUE); +} +#endif + +int +rwsem_tryupgrade(struct rw_semaphore *rwsem) +{ + if (__rwsem_tryupgrade(rwsem)) { + rwsem_release(&rwsem->dep_map, 1, _RET_IP_); + rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_); +#ifdef CONFIG_RWSEM_SPIN_ON_OWNER + rwsem->owner = current; +#endif + return (1); + } + return (0); +} +EXPORT_SYMBOL(rwsem_tryupgrade); + +int spl_rw_init(void) { return 0; } +void spl_rw_fini(void) { } --- linux-aws-4.15.0.orig/spl/module/spl/spl-taskq.c +++ linux-aws-4.15.0/spl/module/spl/spl-taskq.c @@ -0,0 +1,1311 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + * + * Solaris Porting Layer (SPL) Task Queue Implementation. + */ + +#include +#include +#include + +int spl_taskq_thread_bind = 0; +module_param(spl_taskq_thread_bind, int, 0644); +MODULE_PARM_DESC(spl_taskq_thread_bind, "Bind taskq thread to CPU by default"); + + +int spl_taskq_thread_dynamic = 1; +module_param(spl_taskq_thread_dynamic, int, 0644); +MODULE_PARM_DESC(spl_taskq_thread_dynamic, "Allow dynamic taskq threads"); + +int spl_taskq_thread_priority = 1; +module_param(spl_taskq_thread_priority, int, 0644); +MODULE_PARM_DESC(spl_taskq_thread_priority, + "Allow non-default priority for taskq threads"); + +int spl_taskq_thread_sequential = 4; +module_param(spl_taskq_thread_sequential, int, 0644); +MODULE_PARM_DESC(spl_taskq_thread_sequential, + "Create new taskq threads after N sequential tasks"); + +/* Global system-wide dynamic task queue available for all consumers */ +taskq_t *system_taskq; +EXPORT_SYMBOL(system_taskq); +/* Global dynamic task queue for long delay */ +taskq_t *system_delay_taskq; +EXPORT_SYMBOL(system_delay_taskq); + +/* Private dedicated taskq for creating new taskq threads on demand. */ +static taskq_t *dynamic_taskq; +static taskq_thread_t *taskq_thread_create(taskq_t *); + +/* List of all taskqs */ +LIST_HEAD(tq_list); +DECLARE_RWSEM(tq_list_sem); +static uint_t taskq_tsd; + +static int +task_km_flags(uint_t flags) +{ + if (flags & TQ_NOSLEEP) + return (KM_NOSLEEP); + + if (flags & TQ_PUSHPAGE) + return (KM_PUSHPAGE); + + return (KM_SLEEP); +} + +/* + * taskq_find_by_name - Find the largest instance number of a named taskq. + */ +static int +taskq_find_by_name(const char *name) +{ + struct list_head *tql; + taskq_t *tq; + + list_for_each_prev(tql, &tq_list) { + tq = list_entry(tql, taskq_t, tq_taskqs); + if (strcmp(name, tq->tq_name) == 0) + return tq->tq_instance; + } + return (-1); +} + +/* + * NOTE: Must be called with tq->tq_lock held, returns a list_t which + * is not attached to the free, work, or pending taskq lists. + */ +static taskq_ent_t * +task_alloc(taskq_t *tq, uint_t flags, unsigned long *irqflags) +{ + taskq_ent_t *t; + int count = 0; + + ASSERT(tq); + ASSERT(spin_is_locked(&tq->tq_lock)); +retry: + /* Acquire taskq_ent_t's from free list if available */ + if (!list_empty(&tq->tq_free_list) && !(flags & TQ_NEW)) { + t = list_entry(tq->tq_free_list.next, taskq_ent_t, tqent_list); + + ASSERT(!(t->tqent_flags & TQENT_FLAG_PREALLOC)); + ASSERT(!(t->tqent_flags & TQENT_FLAG_CANCEL)); + ASSERT(!timer_pending(&t->tqent_timer)); + + list_del_init(&t->tqent_list); + return (t); + } + + /* Free list is empty and memory allocations are prohibited */ + if (flags & TQ_NOALLOC) + return (NULL); + + /* Hit maximum taskq_ent_t pool size */ + if (tq->tq_nalloc >= tq->tq_maxalloc) { + if (flags & TQ_NOSLEEP) + return (NULL); + + /* + * Sleep periodically polling the free list for an available + * taskq_ent_t. Dispatching with TQ_SLEEP should always succeed + * but we cannot block forever waiting for an taskq_ent_t to + * show up in the free list, otherwise a deadlock can happen. + * + * Therefore, we need to allocate a new task even if the number + * of allocated tasks is above tq->tq_maxalloc, but we still + * end up delaying the task allocation by one second, thereby + * throttling the task dispatch rate. + */ + spin_unlock_irqrestore(&tq->tq_lock, *irqflags); + schedule_timeout(HZ / 100); + spin_lock_irqsave_nested(&tq->tq_lock, *irqflags, + tq->tq_lock_class); + if (count < 100) { + count++; + goto retry; + } + } + + spin_unlock_irqrestore(&tq->tq_lock, *irqflags); + t = kmem_alloc(sizeof (taskq_ent_t), task_km_flags(flags)); + spin_lock_irqsave_nested(&tq->tq_lock, *irqflags, tq->tq_lock_class); + + if (t) { + taskq_init_ent(t); + tq->tq_nalloc++; + } + + return (t); +} + +/* + * NOTE: Must be called with tq->tq_lock held, expects the taskq_ent_t + * to already be removed from the free, work, or pending taskq lists. + */ +static void +task_free(taskq_t *tq, taskq_ent_t *t) +{ + ASSERT(tq); + ASSERT(t); + ASSERT(spin_is_locked(&tq->tq_lock)); + ASSERT(list_empty(&t->tqent_list)); + ASSERT(!timer_pending(&t->tqent_timer)); + + kmem_free(t, sizeof (taskq_ent_t)); + tq->tq_nalloc--; +} + +/* + * NOTE: Must be called with tq->tq_lock held, either destroys the + * taskq_ent_t if too many exist or moves it to the free list for later use. + */ +static void +task_done(taskq_t *tq, taskq_ent_t *t) +{ + ASSERT(tq); + ASSERT(t); + ASSERT(spin_is_locked(&tq->tq_lock)); + + /* Wake tasks blocked in taskq_wait_id() */ + wake_up_all(&t->tqent_waitq); + + list_del_init(&t->tqent_list); + + if (tq->tq_nalloc <= tq->tq_minalloc) { + t->tqent_id = TASKQID_INVALID; + t->tqent_func = NULL; + t->tqent_arg = NULL; + t->tqent_flags = 0; + + list_add_tail(&t->tqent_list, &tq->tq_free_list); + } else { + task_free(tq, t); + } +} + +/* + * When a delayed task timer expires remove it from the delay list and + * add it to the priority list in order for immediate processing. + */ +static void +#ifdef HAVE_KERNEL_TIMER_SETUP +task_expire(struct timer_list *tl) +#else +task_expire(unsigned long data) +#endif +{ +#ifdef HAVE_KERNEL_TIMER_SETUP + taskq_ent_t *w, *t = (taskq_ent_t *)from_timer(t, tl, tqent_timer); +#else + taskq_ent_t *w, *t = (taskq_ent_t *)data; +#endif + taskq_t *tq = t->tqent_taskq; + struct list_head *l; + unsigned long flags; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + + if (t->tqent_flags & TQENT_FLAG_CANCEL) { + ASSERT(list_empty(&t->tqent_list)); + spin_unlock_irqrestore(&tq->tq_lock, flags); + return; + } + + t->tqent_birth = jiffies; + /* + * The priority list must be maintained in strict task id order + * from lowest to highest for lowest_id to be easily calculable. + */ + list_del(&t->tqent_list); + list_for_each_prev(l, &tq->tq_prio_list) { + w = list_entry(l, taskq_ent_t, tqent_list); + if (w->tqent_id < t->tqent_id) { + list_add(&t->tqent_list, l); + break; + } + } + if (l == &tq->tq_prio_list) + list_add(&t->tqent_list, &tq->tq_prio_list); + + spin_unlock_irqrestore(&tq->tq_lock, flags); + + wake_up(&tq->tq_work_waitq); +} + +/* + * Returns the lowest incomplete taskqid_t. The taskqid_t may + * be queued on the pending list, on the priority list, on the + * delay list, or on the work list currently being handled, but + * it is not 100% complete yet. + */ +static taskqid_t +taskq_lowest_id(taskq_t *tq) +{ + taskqid_t lowest_id = tq->tq_next_id; + taskq_ent_t *t; + taskq_thread_t *tqt; + + ASSERT(tq); + ASSERT(spin_is_locked(&tq->tq_lock)); + + if (!list_empty(&tq->tq_pend_list)) { + t = list_entry(tq->tq_pend_list.next, taskq_ent_t, tqent_list); + lowest_id = MIN(lowest_id, t->tqent_id); + } + + if (!list_empty(&tq->tq_prio_list)) { + t = list_entry(tq->tq_prio_list.next, taskq_ent_t, tqent_list); + lowest_id = MIN(lowest_id, t->tqent_id); + } + + if (!list_empty(&tq->tq_delay_list)) { + t = list_entry(tq->tq_delay_list.next, taskq_ent_t, tqent_list); + lowest_id = MIN(lowest_id, t->tqent_id); + } + + if (!list_empty(&tq->tq_active_list)) { + tqt = list_entry(tq->tq_active_list.next, taskq_thread_t, + tqt_active_list); + ASSERT(tqt->tqt_id != TASKQID_INVALID); + lowest_id = MIN(lowest_id, tqt->tqt_id); + } + + return (lowest_id); +} + +/* + * Insert a task into a list keeping the list sorted by increasing taskqid. + */ +static void +taskq_insert_in_order(taskq_t *tq, taskq_thread_t *tqt) +{ + taskq_thread_t *w; + struct list_head *l; + + ASSERT(tq); + ASSERT(tqt); + ASSERT(spin_is_locked(&tq->tq_lock)); + + list_for_each_prev(l, &tq->tq_active_list) { + w = list_entry(l, taskq_thread_t, tqt_active_list); + if (w->tqt_id < tqt->tqt_id) { + list_add(&tqt->tqt_active_list, l); + break; + } + } + if (l == &tq->tq_active_list) + list_add(&tqt->tqt_active_list, &tq->tq_active_list); +} + +/* + * Find and return a task from the given list if it exists. The list + * must be in lowest to highest task id order. + */ +static taskq_ent_t * +taskq_find_list(taskq_t *tq, struct list_head *lh, taskqid_t id) +{ + struct list_head *l; + taskq_ent_t *t; + + ASSERT(spin_is_locked(&tq->tq_lock)); + + list_for_each(l, lh) { + t = list_entry(l, taskq_ent_t, tqent_list); + + if (t->tqent_id == id) + return (t); + + if (t->tqent_id > id) + break; + } + + return (NULL); +} + +/* + * Find an already dispatched task given the task id regardless of what + * state it is in. If a task is still pending it will be returned. + * If a task is executing, then -EBUSY will be returned instead. + * If the task has already been run then NULL is returned. + */ +static taskq_ent_t * +taskq_find(taskq_t *tq, taskqid_t id) +{ + taskq_thread_t *tqt; + struct list_head *l; + taskq_ent_t *t; + + ASSERT(spin_is_locked(&tq->tq_lock)); + + t = taskq_find_list(tq, &tq->tq_delay_list, id); + if (t) + return (t); + + t = taskq_find_list(tq, &tq->tq_prio_list, id); + if (t) + return (t); + + t = taskq_find_list(tq, &tq->tq_pend_list, id); + if (t) + return (t); + + list_for_each(l, &tq->tq_active_list) { + tqt = list_entry(l, taskq_thread_t, tqt_active_list); + if (tqt->tqt_id == id) { + /* + * Instead of returning tqt_task, we just return a non + * NULL value to prevent misuse, since tqt_task only + * has two valid fields. + */ + return (ERR_PTR(-EBUSY)); + } + } + + return (NULL); +} + +/* + * Theory for the taskq_wait_id(), taskq_wait_outstanding(), and + * taskq_wait() functions below. + * + * Taskq waiting is accomplished by tracking the lowest outstanding task + * id and the next available task id. As tasks are dispatched they are + * added to the tail of the pending, priority, or delay lists. As worker + * threads become available the tasks are removed from the heads of these + * lists and linked to the worker threads. This ensures the lists are + * kept sorted by lowest to highest task id. + * + * Therefore the lowest outstanding task id can be quickly determined by + * checking the head item from all of these lists. This value is stored + * with the taskq as the lowest id. It only needs to be recalculated when + * either the task with the current lowest id completes or is canceled. + * + * By blocking until the lowest task id exceeds the passed task id the + * taskq_wait_outstanding() function can be easily implemented. Similarly, + * by blocking until the lowest task id matches the next task id taskq_wait() + * can be implemented. + * + * Callers should be aware that when there are multiple worked threads it + * is possible for larger task ids to complete before smaller ones. Also + * when the taskq contains delay tasks with small task ids callers may + * block for a considerable length of time waiting for them to expire and + * execute. + */ +static int +taskq_wait_id_check(taskq_t *tq, taskqid_t id) +{ + int rc; + unsigned long flags; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + rc = (taskq_find(tq, id) == NULL); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + return (rc); +} + +/* + * The taskq_wait_id() function blocks until the passed task id completes. + * This does not guarantee that all lower task ids have completed. + */ +void +taskq_wait_id(taskq_t *tq, taskqid_t id) +{ + wait_event(tq->tq_wait_waitq, taskq_wait_id_check(tq, id)); +} +EXPORT_SYMBOL(taskq_wait_id); + +static int +taskq_wait_outstanding_check(taskq_t *tq, taskqid_t id) +{ + int rc; + unsigned long flags; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + rc = (id < tq->tq_lowest_id); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + return (rc); +} + +/* + * The taskq_wait_outstanding() function will block until all tasks with a + * lower taskqid than the passed 'id' have been completed. Note that all + * task id's are assigned monotonically at dispatch time. Zero may be + * passed for the id to indicate all tasks dispatch up to this point, + * but not after, should be waited for. + */ +void +taskq_wait_outstanding(taskq_t *tq, taskqid_t id) +{ + id = id ? id : tq->tq_next_id - 1; + wait_event(tq->tq_wait_waitq, taskq_wait_outstanding_check(tq, id)); +} +EXPORT_SYMBOL(taskq_wait_outstanding); + +static int +taskq_wait_check(taskq_t *tq) +{ + int rc; + unsigned long flags; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + rc = (tq->tq_lowest_id == tq->tq_next_id); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + return (rc); +} + +/* + * The taskq_wait() function will block until the taskq is empty. + * This means that if a taskq re-dispatches work to itself taskq_wait() + * callers will block indefinitely. + */ +void +taskq_wait(taskq_t *tq) +{ + wait_event(tq->tq_wait_waitq, taskq_wait_check(tq)); +} +EXPORT_SYMBOL(taskq_wait); + +int +taskq_member(taskq_t *tq, kthread_t *t) +{ + return (tq == (taskq_t *)tsd_get_by_thread(taskq_tsd, t)); +} +EXPORT_SYMBOL(taskq_member); + +/* + * Cancel an already dispatched task given the task id. Still pending tasks + * will be immediately canceled, and if the task is active the function will + * block until it completes. Preallocated tasks which are canceled must be + * freed by the caller. + */ +int +taskq_cancel_id(taskq_t *tq, taskqid_t id) +{ + taskq_ent_t *t; + int rc = ENOENT; + unsigned long flags; + + ASSERT(tq); + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + t = taskq_find(tq, id); + if (t && t != ERR_PTR(-EBUSY)) { + list_del_init(&t->tqent_list); + t->tqent_flags |= TQENT_FLAG_CANCEL; + + /* + * When canceling the lowest outstanding task id we + * must recalculate the new lowest outstanding id. + */ + if (tq->tq_lowest_id == t->tqent_id) { + tq->tq_lowest_id = taskq_lowest_id(tq); + ASSERT3S(tq->tq_lowest_id, >, t->tqent_id); + } + + /* + * The task_expire() function takes the tq->tq_lock so drop + * drop the lock before synchronously cancelling the timer. + */ + if (timer_pending(&t->tqent_timer)) { + spin_unlock_irqrestore(&tq->tq_lock, flags); + del_timer_sync(&t->tqent_timer); + spin_lock_irqsave_nested(&tq->tq_lock, flags, + tq->tq_lock_class); + } + + if (!(t->tqent_flags & TQENT_FLAG_PREALLOC)) + task_done(tq, t); + + rc = 0; + } + spin_unlock_irqrestore(&tq->tq_lock, flags); + + if (t == ERR_PTR(-EBUSY)) { + taskq_wait_id(tq, id); + rc = EBUSY; + } + + return (rc); +} +EXPORT_SYMBOL(taskq_cancel_id); + +static int taskq_thread_spawn(taskq_t *tq); + +taskqid_t +taskq_dispatch(taskq_t *tq, task_func_t func, void *arg, uint_t flags) +{ + taskq_ent_t *t; + taskqid_t rc = TASKQID_INVALID; + unsigned long irqflags; + + ASSERT(tq); + ASSERT(func); + + spin_lock_irqsave_nested(&tq->tq_lock, irqflags, tq->tq_lock_class); + + /* Taskq being destroyed and all tasks drained */ + if (!(tq->tq_flags & TASKQ_ACTIVE)) + goto out; + + /* Do not queue the task unless there is idle thread for it */ + ASSERT(tq->tq_nactive <= tq->tq_nthreads); + if ((flags & TQ_NOQUEUE) && (tq->tq_nactive == tq->tq_nthreads)) { + /* Dynamic taskq may be able to spawn another thread */ + if (!(tq->tq_flags & TASKQ_DYNAMIC) || taskq_thread_spawn(tq) == 0) + goto out; + } + + if ((t = task_alloc(tq, flags, &irqflags)) == NULL) + goto out; + + spin_lock(&t->tqent_lock); + + /* Queue to the front of the list to enforce TQ_NOQUEUE semantics */ + if (flags & TQ_NOQUEUE) + list_add(&t->tqent_list, &tq->tq_prio_list); + /* Queue to the priority list instead of the pending list */ + else if (flags & TQ_FRONT) + list_add_tail(&t->tqent_list, &tq->tq_prio_list); + else + list_add_tail(&t->tqent_list, &tq->tq_pend_list); + + t->tqent_id = rc = tq->tq_next_id; + tq->tq_next_id++; + t->tqent_func = func; + t->tqent_arg = arg; + t->tqent_taskq = tq; +#ifdef HAVE_KERNEL_TIMER_SETUP + timer_setup(&t->tqent_timer, NULL, 0); +#else + t->tqent_timer.data = 0; + t->tqent_timer.function = NULL; +#endif + t->tqent_timer.expires = 0; + t->tqent_birth = jiffies; + + ASSERT(!(t->tqent_flags & TQENT_FLAG_PREALLOC)); + + spin_unlock(&t->tqent_lock); + + wake_up(&tq->tq_work_waitq); +out: + /* Spawn additional taskq threads if required. */ + if (!(flags & TQ_NOQUEUE) && tq->tq_nactive == tq->tq_nthreads) + (void) taskq_thread_spawn(tq); + + spin_unlock_irqrestore(&tq->tq_lock, irqflags); + return (rc); +} +EXPORT_SYMBOL(taskq_dispatch); + +taskqid_t +taskq_dispatch_delay(taskq_t *tq, task_func_t func, void *arg, + uint_t flags, clock_t expire_time) +{ + taskqid_t rc = TASKQID_INVALID; + taskq_ent_t *t; + unsigned long irqflags; + + ASSERT(tq); + ASSERT(func); + + spin_lock_irqsave_nested(&tq->tq_lock, irqflags, tq->tq_lock_class); + + /* Taskq being destroyed and all tasks drained */ + if (!(tq->tq_flags & TASKQ_ACTIVE)) + goto out; + + if ((t = task_alloc(tq, flags, &irqflags)) == NULL) + goto out; + + spin_lock(&t->tqent_lock); + + /* Queue to the delay list for subsequent execution */ + list_add_tail(&t->tqent_list, &tq->tq_delay_list); + + t->tqent_id = rc = tq->tq_next_id; + tq->tq_next_id++; + t->tqent_func = func; + t->tqent_arg = arg; + t->tqent_taskq = tq; +#ifdef HAVE_KERNEL_TIMER_SETUP + timer_setup(&t->tqent_timer, task_expire, 0); +#else + t->tqent_timer.data = (unsigned long)t; + t->tqent_timer.function = task_expire; +#endif + t->tqent_timer.expires = (unsigned long)expire_time; + add_timer(&t->tqent_timer); + + ASSERT(!(t->tqent_flags & TQENT_FLAG_PREALLOC)); + + spin_unlock(&t->tqent_lock); +out: + /* Spawn additional taskq threads if required. */ + if (tq->tq_nactive == tq->tq_nthreads) + (void) taskq_thread_spawn(tq); + spin_unlock_irqrestore(&tq->tq_lock, irqflags); + return (rc); +} +EXPORT_SYMBOL(taskq_dispatch_delay); + +void +taskq_dispatch_ent(taskq_t *tq, task_func_t func, void *arg, uint_t flags, + taskq_ent_t *t) +{ + unsigned long irqflags; + ASSERT(tq); + ASSERT(func); + + spin_lock_irqsave_nested(&tq->tq_lock, irqflags, + tq->tq_lock_class); + + /* Taskq being destroyed and all tasks drained */ + if (!(tq->tq_flags & TASKQ_ACTIVE)) { + t->tqent_id = TASKQID_INVALID; + goto out; + } + + if ((flags & TQ_NOQUEUE) && (tq->tq_nactive == tq->tq_nthreads)) { + /* Dynamic taskq may be able to spawn another thread */ + if (!(tq->tq_flags & TASKQ_DYNAMIC) || taskq_thread_spawn(tq) == 0) + goto out2; + flags |= TQ_FRONT; + } + + spin_lock(&t->tqent_lock); + + /* + * Make sure the entry is not on some other taskq; it is important to + * ASSERT() under lock + */ + ASSERT(taskq_empty_ent(t)); + + /* + * Mark it as a prealloc'd task. This is important + * to ensure that we don't free it later. + */ + t->tqent_flags |= TQENT_FLAG_PREALLOC; + + /* Queue to the priority list instead of the pending list */ + if (flags & TQ_FRONT) + list_add_tail(&t->tqent_list, &tq->tq_prio_list); + else + list_add_tail(&t->tqent_list, &tq->tq_pend_list); + + t->tqent_id = tq->tq_next_id; + tq->tq_next_id++; + t->tqent_func = func; + t->tqent_arg = arg; + t->tqent_taskq = tq; + t->tqent_birth = jiffies; + + spin_unlock(&t->tqent_lock); + + wake_up(&tq->tq_work_waitq); +out: + /* Spawn additional taskq threads if required. */ + if (tq->tq_nactive == tq->tq_nthreads) + (void) taskq_thread_spawn(tq); +out2: + spin_unlock_irqrestore(&tq->tq_lock, irqflags); +} +EXPORT_SYMBOL(taskq_dispatch_ent); + +int +taskq_empty_ent(taskq_ent_t *t) +{ + return (list_empty(&t->tqent_list)); +} +EXPORT_SYMBOL(taskq_empty_ent); + +void +taskq_init_ent(taskq_ent_t *t) +{ + spin_lock_init(&t->tqent_lock); + init_waitqueue_head(&t->tqent_waitq); +#ifdef HAVE_KERNEL_TIMER_SETUP + timer_setup(&t->tqent_timer, NULL, 0); +#else + init_timer(&t->tqent_timer); +#endif + INIT_LIST_HEAD(&t->tqent_list); + t->tqent_id = 0; + t->tqent_func = NULL; + t->tqent_arg = NULL; + t->tqent_flags = 0; + t->tqent_taskq = NULL; +} +EXPORT_SYMBOL(taskq_init_ent); + +/* + * Return the next pending task, preference is given to tasks on the + * priority list which were dispatched with TQ_FRONT. + */ +static taskq_ent_t * +taskq_next_ent(taskq_t *tq) +{ + struct list_head *list; + + ASSERT(spin_is_locked(&tq->tq_lock)); + + if (!list_empty(&tq->tq_prio_list)) + list = &tq->tq_prio_list; + else if (!list_empty(&tq->tq_pend_list)) + list = &tq->tq_pend_list; + else + return (NULL); + + return (list_entry(list->next, taskq_ent_t, tqent_list)); +} + +/* + * Spawns a new thread for the specified taskq. + */ +static void +taskq_thread_spawn_task(void *arg) +{ + taskq_t *tq = (taskq_t *)arg; + unsigned long flags; + + if (taskq_thread_create(tq) == NULL) { + /* restore spawning count if failed */ + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + tq->tq_nspawn--; + spin_unlock_irqrestore(&tq->tq_lock, flags); + } +} + +/* + * Spawn addition threads for dynamic taskqs (TASKQ_DYNAMIC) the current + * number of threads is insufficient to handle the pending tasks. These + * new threads must be created by the dedicated dynamic_taskq to avoid + * deadlocks between thread creation and memory reclaim. The system_taskq + * which is also a dynamic taskq cannot be safely used for this. + */ +static int +taskq_thread_spawn(taskq_t *tq) +{ + int spawning = 0; + + if (!(tq->tq_flags & TASKQ_DYNAMIC)) + return (0); + + if ((tq->tq_nthreads + tq->tq_nspawn < tq->tq_maxthreads) && + (tq->tq_flags & TASKQ_ACTIVE)) { + spawning = (++tq->tq_nspawn); + taskq_dispatch(dynamic_taskq, taskq_thread_spawn_task, + tq, TQ_NOSLEEP); + } + + return (spawning); +} + +/* + * Threads in a dynamic taskq should only exit once it has been completely + * drained and no other threads are actively servicing tasks. This prevents + * threads from being created and destroyed more than is required. + * + * The first thread is the thread list is treated as the primary thread. + * There is nothing special about the primary thread but in order to avoid + * all the taskq pids from changing we opt to make it long running. + */ +static int +taskq_thread_should_stop(taskq_t *tq, taskq_thread_t *tqt) +{ + ASSERT(spin_is_locked(&tq->tq_lock)); + + if (!(tq->tq_flags & TASKQ_DYNAMIC)) + return (0); + + if (list_first_entry(&(tq->tq_thread_list), taskq_thread_t, + tqt_thread_list) == tqt) + return (0); + + return + ((tq->tq_nspawn == 0) && /* No threads are being spawned */ + (tq->tq_nactive == 0) && /* No threads are handling tasks */ + (tq->tq_nthreads > 1) && /* More than 1 thread is running */ + (!taskq_next_ent(tq)) && /* There are no pending tasks */ + (spl_taskq_thread_dynamic)); /* Dynamic taskqs are allowed */ +} + +static int +taskq_thread(void *args) +{ + DECLARE_WAITQUEUE(wait, current); + sigset_t blocked; + taskq_thread_t *tqt = args; + taskq_t *tq; + taskq_ent_t *t; + int seq_tasks = 0; + unsigned long flags; + taskq_ent_t dup_task = {}; + + ASSERT(tqt); + ASSERT(tqt->tqt_tq); + tq = tqt->tqt_tq; + current->flags |= PF_NOFREEZE; + + (void) spl_fstrans_mark(); + + sigfillset(&blocked); + sigprocmask(SIG_BLOCK, &blocked, NULL); + flush_signals(current); + + tsd_set(taskq_tsd, tq); + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + /* + * If we are dynamically spawned, decrease spawning count. Note that + * we could be created during taskq_create, in which case we shouldn't + * do the decrement. But it's fine because taskq_create will reset + * tq_nspawn later. + */ + if (tq->tq_flags & TASKQ_DYNAMIC) + tq->tq_nspawn--; + + /* Immediately exit if more threads than allowed were created. */ + if (tq->tq_nthreads >= tq->tq_maxthreads) + goto error; + + tq->tq_nthreads++; + list_add_tail(&tqt->tqt_thread_list, &tq->tq_thread_list); + wake_up(&tq->tq_wait_waitq); + set_current_state(TASK_INTERRUPTIBLE); + + while (!kthread_should_stop()) { + + if (list_empty(&tq->tq_pend_list) && + list_empty(&tq->tq_prio_list)) { + + if (taskq_thread_should_stop(tq, tqt)) { + wake_up_all(&tq->tq_wait_waitq); + break; + } + + add_wait_queue_exclusive(&tq->tq_work_waitq, &wait); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + schedule(); + seq_tasks = 0; + + spin_lock_irqsave_nested(&tq->tq_lock, flags, + tq->tq_lock_class); + remove_wait_queue(&tq->tq_work_waitq, &wait); + } else { + __set_current_state(TASK_RUNNING); + } + + if ((t = taskq_next_ent(tq)) != NULL) { + list_del_init(&t->tqent_list); + + /* + * A TQENT_FLAG_PREALLOC task may be reused or freed + * during the task function call. Store tqent_id and + * tqent_flags here. + * + * Also use an on stack taskq_ent_t for tqt_task + * assignment in this case. We only populate the two + * fields used by the only user in taskq proc file. + */ + tqt->tqt_id = t->tqent_id; + tqt->tqt_flags = t->tqent_flags; + + if (t->tqent_flags & TQENT_FLAG_PREALLOC) { + dup_task.tqent_func = t->tqent_func; + dup_task.tqent_arg = t->tqent_arg; + t = &dup_task; + } + tqt->tqt_task = t; + + taskq_insert_in_order(tq, tqt); + tq->tq_nactive++; + spin_unlock_irqrestore(&tq->tq_lock, flags); + + /* Perform the requested task */ + t->tqent_func(t->tqent_arg); + + spin_lock_irqsave_nested(&tq->tq_lock, flags, + tq->tq_lock_class); + tq->tq_nactive--; + list_del_init(&tqt->tqt_active_list); + tqt->tqt_task = NULL; + + /* For prealloc'd tasks, we don't free anything. */ + if (!(tqt->tqt_flags & TQENT_FLAG_PREALLOC)) + task_done(tq, t); + + /* + * When the current lowest outstanding taskqid is + * done calculate the new lowest outstanding id + */ + if (tq->tq_lowest_id == tqt->tqt_id) { + tq->tq_lowest_id = taskq_lowest_id(tq); + ASSERT3S(tq->tq_lowest_id, >, tqt->tqt_id); + } + + /* Spawn additional taskq threads if required. */ + if ((++seq_tasks) > spl_taskq_thread_sequential && + taskq_thread_spawn(tq)) + seq_tasks = 0; + + tqt->tqt_id = TASKQID_INVALID; + tqt->tqt_flags = 0; + wake_up_all(&tq->tq_wait_waitq); + } else { + if (taskq_thread_should_stop(tq, tqt)) + break; + } + + set_current_state(TASK_INTERRUPTIBLE); + + } + + __set_current_state(TASK_RUNNING); + tq->tq_nthreads--; + list_del_init(&tqt->tqt_thread_list); +error: + kmem_free(tqt, sizeof (taskq_thread_t)); + spin_unlock_irqrestore(&tq->tq_lock, flags); + + tsd_set(taskq_tsd, NULL); + + return (0); +} + +static taskq_thread_t * +taskq_thread_create(taskq_t *tq) +{ + static int last_used_cpu = 0; + taskq_thread_t *tqt; + + tqt = kmem_alloc(sizeof (*tqt), KM_PUSHPAGE); + INIT_LIST_HEAD(&tqt->tqt_thread_list); + INIT_LIST_HEAD(&tqt->tqt_active_list); + tqt->tqt_tq = tq; + tqt->tqt_id = TASKQID_INVALID; + + tqt->tqt_thread = spl_kthread_create(taskq_thread, tqt, + "%s", tq->tq_name); + if (tqt->tqt_thread == NULL) { + kmem_free(tqt, sizeof (taskq_thread_t)); + return (NULL); + } + + if (spl_taskq_thread_bind) { + last_used_cpu = (last_used_cpu + 1) % num_online_cpus(); + kthread_bind(tqt->tqt_thread, last_used_cpu); + } + + if (spl_taskq_thread_priority) + set_user_nice(tqt->tqt_thread, PRIO_TO_NICE(tq->tq_pri)); + + wake_up_process(tqt->tqt_thread); + + return (tqt); +} + +taskq_t * +taskq_create(const char *name, int nthreads, pri_t pri, + int minalloc, int maxalloc, uint_t flags) +{ + taskq_t *tq; + taskq_thread_t *tqt; + int count = 0, rc = 0, i; + unsigned long irqflags; + + ASSERT(name != NULL); + ASSERT(minalloc >= 0); + ASSERT(maxalloc <= INT_MAX); + ASSERT(!(flags & (TASKQ_CPR_SAFE))); /* Unsupported */ + + /* Scale the number of threads using nthreads as a percentage */ + if (flags & TASKQ_THREADS_CPU_PCT) { + ASSERT(nthreads <= 100); + ASSERT(nthreads >= 0); + nthreads = MIN(nthreads, 100); + nthreads = MAX(nthreads, 0); + nthreads = MAX((num_online_cpus() * nthreads) / 100, 1); + } + + tq = kmem_alloc(sizeof (*tq), KM_PUSHPAGE); + if (tq == NULL) + return (NULL); + + spin_lock_init(&tq->tq_lock); + INIT_LIST_HEAD(&tq->tq_thread_list); + INIT_LIST_HEAD(&tq->tq_active_list); + tq->tq_name = strdup(name); + tq->tq_nactive = 0; + tq->tq_nthreads = 0; + tq->tq_nspawn = 0; + tq->tq_maxthreads = nthreads; + tq->tq_pri = pri; + tq->tq_minalloc = minalloc; + tq->tq_maxalloc = maxalloc; + tq->tq_nalloc = 0; + tq->tq_flags = (flags | TASKQ_ACTIVE); + tq->tq_next_id = TASKQID_INITIAL; + tq->tq_lowest_id = TASKQID_INITIAL; + INIT_LIST_HEAD(&tq->tq_free_list); + INIT_LIST_HEAD(&tq->tq_pend_list); + INIT_LIST_HEAD(&tq->tq_prio_list); + INIT_LIST_HEAD(&tq->tq_delay_list); + init_waitqueue_head(&tq->tq_work_waitq); + init_waitqueue_head(&tq->tq_wait_waitq); + tq->tq_lock_class = TQ_LOCK_GENERAL; + INIT_LIST_HEAD(&tq->tq_taskqs); + + if (flags & TASKQ_PREPOPULATE) { + spin_lock_irqsave_nested(&tq->tq_lock, irqflags, + tq->tq_lock_class); + + for (i = 0; i < minalloc; i++) + task_done(tq, task_alloc(tq, TQ_PUSHPAGE | TQ_NEW, + &irqflags)); + + spin_unlock_irqrestore(&tq->tq_lock, irqflags); + } + + if ((flags & TASKQ_DYNAMIC) && spl_taskq_thread_dynamic) + nthreads = 1; + + for (i = 0; i < nthreads; i++) { + tqt = taskq_thread_create(tq); + if (tqt == NULL) + rc = 1; + else + count++; + } + + /* Wait for all threads to be started before potential destroy */ + wait_event(tq->tq_wait_waitq, tq->tq_nthreads == count); + /* + * taskq_thread might have touched nspawn, but we don't want them to + * because they're not dynamically spawned. So we reset it to 0 + */ + tq->tq_nspawn = 0; + + if (rc) { + taskq_destroy(tq); + tq = NULL; + } else { + down_write(&tq_list_sem); + tq->tq_instance = taskq_find_by_name(name) + 1; + list_add_tail(&tq->tq_taskqs, &tq_list); + up_write(&tq_list_sem); + } + + return (tq); +} +EXPORT_SYMBOL(taskq_create); + +void +taskq_destroy(taskq_t *tq) +{ + struct task_struct *thread; + taskq_thread_t *tqt; + taskq_ent_t *t; + unsigned long flags; + + ASSERT(tq); + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + tq->tq_flags &= ~TASKQ_ACTIVE; + spin_unlock_irqrestore(&tq->tq_lock, flags); + + /* + * When TASKQ_ACTIVE is clear new tasks may not be added nor may + * new worker threads be spawned for dynamic taskq. + */ + if (dynamic_taskq != NULL) + taskq_wait_outstanding(dynamic_taskq, 0); + + taskq_wait(tq); + + /* remove taskq from global list used by the kstats */ + down_write(&tq_list_sem); + list_del(&tq->tq_taskqs); + up_write(&tq_list_sem); + + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + /* wait for spawning threads to insert themselves to the list */ + while (tq->tq_nspawn) { + spin_unlock_irqrestore(&tq->tq_lock, flags); + schedule_timeout_interruptible(1); + spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); + } + + /* + * Signal each thread to exit and block until it does. Each thread + * is responsible for removing itself from the list and freeing its + * taskq_thread_t. This allows for idle threads to opt to remove + * themselves from the taskq. They can be recreated as needed. + */ + while (!list_empty(&tq->tq_thread_list)) { + tqt = list_entry(tq->tq_thread_list.next, + taskq_thread_t, tqt_thread_list); + thread = tqt->tqt_thread; + spin_unlock_irqrestore(&tq->tq_lock, flags); + + kthread_stop(thread); + + spin_lock_irqsave_nested(&tq->tq_lock, flags, + tq->tq_lock_class); + } + + while (!list_empty(&tq->tq_free_list)) { + t = list_entry(tq->tq_free_list.next, taskq_ent_t, tqent_list); + + ASSERT(!(t->tqent_flags & TQENT_FLAG_PREALLOC)); + + list_del_init(&t->tqent_list); + task_free(tq, t); + } + + ASSERT0(tq->tq_nthreads); + ASSERT0(tq->tq_nalloc); + ASSERT0(tq->tq_nspawn); + ASSERT(list_empty(&tq->tq_thread_list)); + ASSERT(list_empty(&tq->tq_active_list)); + ASSERT(list_empty(&tq->tq_free_list)); + ASSERT(list_empty(&tq->tq_pend_list)); + ASSERT(list_empty(&tq->tq_prio_list)); + ASSERT(list_empty(&tq->tq_delay_list)); + + spin_unlock_irqrestore(&tq->tq_lock, flags); + + strfree(tq->tq_name); + kmem_free(tq, sizeof (taskq_t)); +} +EXPORT_SYMBOL(taskq_destroy); + + +static unsigned int spl_taskq_kick = 0; + +/* + * 2.6.36 API Change + * module_param_cb is introduced to take kernel_param_ops and + * module_param_call is marked as obsolete. Also set and get operations + * were changed to take a 'const struct kernel_param *'. + */ +static int +#ifdef module_param_cb +param_set_taskq_kick(const char *val, const struct kernel_param *kp) +#else +param_set_taskq_kick(const char *val, struct kernel_param *kp) +#endif +{ + int ret; + taskq_t *tq; + taskq_ent_t *t; + unsigned long flags; + + ret = param_set_uint(val, kp); + if (ret < 0 || !spl_taskq_kick) + return (ret); + /* reset value */ + spl_taskq_kick = 0; + + down_read(&tq_list_sem); + list_for_each_entry(tq, &tq_list, tq_taskqs) { + spin_lock_irqsave_nested(&tq->tq_lock, flags, + tq->tq_lock_class); + /* Check if the first pending is older than 5 seconds */ + t = taskq_next_ent(tq); + if (t && time_after(jiffies, t->tqent_birth + 5*HZ)) { + (void) taskq_thread_spawn(tq); + printk(KERN_INFO "spl: Kicked taskq %s/%d\n", + tq->tq_name, tq->tq_instance); + } + spin_unlock_irqrestore(&tq->tq_lock, flags); + } + up_read(&tq_list_sem); + return (ret); +} + +#ifdef module_param_cb +static const struct kernel_param_ops param_ops_taskq_kick = { + .set = param_set_taskq_kick, + .get = param_get_uint, +}; +module_param_cb(spl_taskq_kick, ¶m_ops_taskq_kick, &spl_taskq_kick, 0644); +#else +module_param_call(spl_taskq_kick, param_set_taskq_kick, param_get_uint, + &spl_taskq_kick, 0644); +#endif +MODULE_PARM_DESC(spl_taskq_kick, + "Write nonzero to kick stuck taskqs to spawn more threads"); + +int +spl_taskq_init(void) +{ + tsd_create(&taskq_tsd, NULL); + + system_taskq = taskq_create("spl_system_taskq", MAX(boot_ncpus, 64), + maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE|TASKQ_DYNAMIC); + if (system_taskq == NULL) + return (1); + + system_delay_taskq = taskq_create("spl_delay_taskq", MAX(boot_ncpus, 4), + maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE|TASKQ_DYNAMIC); + if (system_delay_taskq == NULL) { + taskq_destroy(system_taskq); + return (1); + } + + dynamic_taskq = taskq_create("spl_dynamic_taskq", 1, + maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE); + if (dynamic_taskq == NULL) { + taskq_destroy(system_taskq); + taskq_destroy(system_delay_taskq); + return (1); + } + + /* + * This is used to annotate tq_lock, so + * taskq_dispatch -> taskq_thread_spawn -> taskq_dispatch + * does not trigger a lockdep warning re: possible recursive locking + */ + dynamic_taskq->tq_lock_class = TQ_LOCK_DYNAMIC; + + return (0); +} + +void +spl_taskq_fini(void) +{ + taskq_destroy(dynamic_taskq); + dynamic_taskq = NULL; + + taskq_destroy(system_delay_taskq); + system_delay_taskq = NULL; + + taskq_destroy(system_taskq); + system_taskq = NULL; + + tsd_destroy(&taskq_tsd); +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-thread.c +++ linux-aws-4.15.0/spl/module/spl/spl-thread.c @@ -0,0 +1,158 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Thread Implementation. +\*****************************************************************************/ + +#include +#include +#include + +/* + * Thread interfaces + */ +typedef struct thread_priv_s { + unsigned long tp_magic; /* Magic */ + int tp_name_size; /* Name size */ + char *tp_name; /* Name (without _thread suffix) */ + void (*tp_func)(void *); /* Registered function */ + void *tp_args; /* Args to be passed to function */ + size_t tp_len; /* Len to be passed to function */ + int tp_state; /* State to start thread at */ + pri_t tp_pri; /* Priority to start threat at */ +} thread_priv_t; + +static int +thread_generic_wrapper(void *arg) +{ + thread_priv_t *tp = (thread_priv_t *)arg; + void (*func)(void *); + void *args; + + ASSERT(tp->tp_magic == TP_MAGIC); + func = tp->tp_func; + args = tp->tp_args; + set_current_state(tp->tp_state); + set_user_nice((kthread_t *)current, PRIO_TO_NICE(tp->tp_pri)); + kmem_free(tp->tp_name, tp->tp_name_size); + kmem_free(tp, sizeof(thread_priv_t)); + + if (func) + func(args); + + return 0; +} + +void +__thread_exit(void) +{ + tsd_exit(); + complete_and_exit(NULL, 0); + /* Unreachable */ +} +EXPORT_SYMBOL(__thread_exit); + +/* thread_create() may block forever if it cannot create a thread or + * allocate memory. This is preferable to returning a NULL which Solaris + * style callers likely never check for... since it can't fail. */ +kthread_t * +__thread_create(caddr_t stk, size_t stksize, thread_func_t func, + const char *name, void *args, size_t len, proc_t *pp, + int state, pri_t pri) +{ + thread_priv_t *tp; + struct task_struct *tsk; + char *p; + + /* Option pp is simply ignored */ + /* Variable stack size unsupported */ + ASSERT(stk == NULL); + + tp = kmem_alloc(sizeof(thread_priv_t), KM_PUSHPAGE); + if (tp == NULL) + return (NULL); + + tp->tp_magic = TP_MAGIC; + tp->tp_name_size = strlen(name) + 1; + + tp->tp_name = kmem_alloc(tp->tp_name_size, KM_PUSHPAGE); + if (tp->tp_name == NULL) { + kmem_free(tp, sizeof(thread_priv_t)); + return (NULL); + } + + strncpy(tp->tp_name, name, tp->tp_name_size); + + /* Strip trailing "_thread" from passed name which will be the func + * name since the exposed API has no parameter for passing a name. + */ + p = strstr(tp->tp_name, "_thread"); + if (p) + p[0] = '\0'; + + tp->tp_func = func; + tp->tp_args = args; + tp->tp_len = len; + tp->tp_state = state; + tp->tp_pri = pri; + + tsk = spl_kthread_create(thread_generic_wrapper, (void *)tp, + "%s", tp->tp_name); + if (IS_ERR(tsk)) + return (NULL); + + wake_up_process(tsk); + return ((kthread_t *)tsk); +} +EXPORT_SYMBOL(__thread_create); + +/* + * spl_kthread_create - Wrapper providing pre-3.13 semantics for + * kthread_create() in which it is not killable and less likely + * to return -ENOMEM. + */ +struct task_struct * +spl_kthread_create(int (*func)(void *), void *data, const char namefmt[], ...) +{ + struct task_struct *tsk; + va_list args; + char name[TASK_COMM_LEN]; + + va_start(args, namefmt); + vsnprintf(name, sizeof(name), namefmt, args); + va_end(args); + do { + tsk = kthread_create(func, data, "%s", name); + if (IS_ERR(tsk)) { + if (signal_pending(current)) { + clear_thread_flag(TIF_SIGPENDING); + continue; + } + if (PTR_ERR(tsk) == -ENOMEM) + continue; + return (NULL); + } else + return (tsk); + } while (1); +} +EXPORT_SYMBOL(spl_kthread_create); --- linux-aws-4.15.0.orig/spl/module/spl/spl-tsd.c +++ linux-aws-4.15.0/spl/module/spl/spl-tsd.c @@ -0,0 +1,721 @@ +/* + * Copyright (C) 2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + * + * + * Solaris Porting Layer (SPL) Thread Specific Data Implementation. + * + * Thread specific data has implemented using a hash table, this avoids + * the need to add a member to the task structure and allows maximum + * portability between kernels. This implementation has been optimized + * to keep the tsd_set() and tsd_get() times as small as possible. + * + * The majority of the entries in the hash table are for specific tsd + * entries. These entries are hashed by the product of their key and + * pid because by design the key and pid are guaranteed to be unique. + * Their product also has the desirable properly that it will be uniformly + * distributed over the hash bins providing neither the pid nor key is zero. + * Under linux the zero pid is always the init process and thus won't be + * used, and this implementation is careful to never to assign a zero key. + * By default the hash table is sized to 512 bins which is expected to + * be sufficient for light to moderate usage of thread specific data. + * + * The hash table contains two additional type of entries. They first + * type is entry is called a 'key' entry and it is added to the hash during + * tsd_create(). It is used to store the address of the destructor function + * and it is used as an anchor point. All tsd entries which use the same + * key will be linked to this entry. This is used during tsd_destory() to + * quickly call the destructor function for all tsd associated with the key. + * The 'key' entry may be looked up with tsd_hash_search() by passing the + * key you wish to lookup and DTOR_PID constant as the pid. + * + * The second type of entry is called a 'pid' entry and it is added to the + * hash the first time a process set a key. The 'pid' entry is also used + * as an anchor and all tsd for the process will be linked to it. This + * list is using during tsd_exit() to ensure all registered destructors + * are run for the process. The 'pid' entry may be looked up with + * tsd_hash_search() by passing the PID_KEY constant as the key, and + * the process pid. Note that tsd_exit() is called by thread_exit() + * so if your using the Solaris thread API you should not need to call + * tsd_exit() directly. + * + */ + +#include +#include +#include +#include + +typedef struct tsd_hash_bin { + spinlock_t hb_lock; + struct hlist_head hb_head; +} tsd_hash_bin_t; + +typedef struct tsd_hash_table { + spinlock_t ht_lock; + uint_t ht_bits; + uint_t ht_key; + tsd_hash_bin_t *ht_bins; +} tsd_hash_table_t; + +typedef struct tsd_hash_entry { + uint_t he_key; + pid_t he_pid; + dtor_func_t he_dtor; + void *he_value; + struct hlist_node he_list; + struct list_head he_key_list; + struct list_head he_pid_list; +} tsd_hash_entry_t; + +static tsd_hash_table_t *tsd_hash_table = NULL; + + +/* + * tsd_hash_search - searches hash table for tsd_hash_entry + * @table: hash table + * @key: search key + * @pid: search pid + */ +static tsd_hash_entry_t * +tsd_hash_search(tsd_hash_table_t *table, uint_t key, pid_t pid) +{ + struct hlist_node *node; + tsd_hash_entry_t *entry; + tsd_hash_bin_t *bin; + ulong_t hash; + + hash = hash_long((ulong_t)key * (ulong_t)pid, table->ht_bits); + bin = &table->ht_bins[hash]; + spin_lock(&bin->hb_lock); + hlist_for_each(node, &bin->hb_head) { + entry = list_entry(node, tsd_hash_entry_t, he_list); + if ((entry->he_key == key) && (entry->he_pid == pid)) { + spin_unlock(&bin->hb_lock); + return (entry); + } + } + + spin_unlock(&bin->hb_lock); + return (NULL); +} + +/* + * tsd_hash_dtor - call the destructor and free all entries on the list + * @work: list of hash entries + * + * For a list of entries which have all already been removed from the + * hash call their registered destructor then free the associated memory. + */ +static void +tsd_hash_dtor(struct hlist_head *work) +{ + tsd_hash_entry_t *entry; + + while (!hlist_empty(work)) { + entry = hlist_entry(work->first, tsd_hash_entry_t, he_list); + hlist_del(&entry->he_list); + + if (entry->he_dtor && entry->he_pid != DTOR_PID) + entry->he_dtor(entry->he_value); + + kmem_free(entry, sizeof (tsd_hash_entry_t)); + } +} + +/* + * tsd_hash_add - adds an entry to hash table + * @table: hash table + * @key: search key + * @pid: search pid + * + * The caller is responsible for ensuring the unique key/pid do not + * already exist in the hash table. This possible because all entries + * are thread specific thus a concurrent thread will never attempt to + * add this key/pid. Because multiple bins must be checked to add + * links to the dtor and pid entries the entire table is locked. + */ +static int +tsd_hash_add(tsd_hash_table_t *table, uint_t key, pid_t pid, void *value) +{ + tsd_hash_entry_t *entry, *dtor_entry, *pid_entry; + tsd_hash_bin_t *bin; + ulong_t hash; + int rc = 0; + + ASSERT3P(tsd_hash_search(table, key, pid), ==, NULL); + + /* New entry allocate structure, set value, and add to hash */ + entry = kmem_alloc(sizeof (tsd_hash_entry_t), KM_PUSHPAGE); + if (entry == NULL) + return (ENOMEM); + + entry->he_key = key; + entry->he_pid = pid; + entry->he_value = value; + INIT_HLIST_NODE(&entry->he_list); + INIT_LIST_HEAD(&entry->he_key_list); + INIT_LIST_HEAD(&entry->he_pid_list); + + spin_lock(&table->ht_lock); + + /* Destructor entry must exist for all valid keys */ + dtor_entry = tsd_hash_search(table, entry->he_key, DTOR_PID); + ASSERT3P(dtor_entry, !=, NULL); + entry->he_dtor = dtor_entry->he_dtor; + + /* Process entry must exist for all valid processes */ + pid_entry = tsd_hash_search(table, PID_KEY, entry->he_pid); + ASSERT3P(pid_entry, !=, NULL); + + hash = hash_long((ulong_t)key * (ulong_t)pid, table->ht_bits); + bin = &table->ht_bins[hash]; + spin_lock(&bin->hb_lock); + + /* Add to the hash, key, and pid lists */ + hlist_add_head(&entry->he_list, &bin->hb_head); + list_add(&entry->he_key_list, &dtor_entry->he_key_list); + list_add(&entry->he_pid_list, &pid_entry->he_pid_list); + + spin_unlock(&bin->hb_lock); + spin_unlock(&table->ht_lock); + + return (rc); +} + +/* + * tsd_hash_add_key - adds a destructor entry to the hash table + * @table: hash table + * @keyp: search key + * @dtor: key destructor + * + * For every unique key there is a single entry in the hash which is used + * as anchor. All other thread specific entries for this key are linked + * to this anchor via the 'he_key_list' list head. On return they keyp + * will be set to the next available key for the hash table. + */ +static int +tsd_hash_add_key(tsd_hash_table_t *table, uint_t *keyp, dtor_func_t dtor) +{ + tsd_hash_entry_t *tmp_entry, *entry; + tsd_hash_bin_t *bin; + ulong_t hash; + int keys_checked = 0; + + ASSERT3P(table, !=, NULL); + + /* Allocate entry to be used as a destructor for this key */ + entry = kmem_alloc(sizeof (tsd_hash_entry_t), KM_PUSHPAGE); + if (entry == NULL) + return (ENOMEM); + + /* Determine next available key value */ + spin_lock(&table->ht_lock); + do { + /* Limited to TSD_KEYS_MAX concurrent unique keys */ + if (table->ht_key++ > TSD_KEYS_MAX) + table->ht_key = 1; + + /* Ensure failure when all TSD_KEYS_MAX keys are in use */ + if (keys_checked++ >= TSD_KEYS_MAX) { + spin_unlock(&table->ht_lock); + return (ENOENT); + } + + tmp_entry = tsd_hash_search(table, table->ht_key, DTOR_PID); + } while (tmp_entry); + + /* Add destructor entry in to hash table */ + entry->he_key = *keyp = table->ht_key; + entry->he_pid = DTOR_PID; + entry->he_dtor = dtor; + entry->he_value = NULL; + INIT_HLIST_NODE(&entry->he_list); + INIT_LIST_HEAD(&entry->he_key_list); + INIT_LIST_HEAD(&entry->he_pid_list); + + hash = hash_long((ulong_t)*keyp * (ulong_t)DTOR_PID, table->ht_bits); + bin = &table->ht_bins[hash]; + spin_lock(&bin->hb_lock); + + hlist_add_head(&entry->he_list, &bin->hb_head); + + spin_unlock(&bin->hb_lock); + spin_unlock(&table->ht_lock); + + return (0); +} + +/* + * tsd_hash_add_pid - adds a process entry to the hash table + * @table: hash table + * @pid: search pid + * + * For every process these is a single entry in the hash which is used + * as anchor. All other thread specific entries for this process are + * linked to this anchor via the 'he_pid_list' list head. + */ +static int +tsd_hash_add_pid(tsd_hash_table_t *table, pid_t pid) +{ + tsd_hash_entry_t *entry; + tsd_hash_bin_t *bin; + ulong_t hash; + + /* Allocate entry to be used as the process reference */ + entry = kmem_alloc(sizeof (tsd_hash_entry_t), KM_PUSHPAGE); + if (entry == NULL) + return (ENOMEM); + + spin_lock(&table->ht_lock); + entry->he_key = PID_KEY; + entry->he_pid = pid; + entry->he_dtor = NULL; + entry->he_value = NULL; + INIT_HLIST_NODE(&entry->he_list); + INIT_LIST_HEAD(&entry->he_key_list); + INIT_LIST_HEAD(&entry->he_pid_list); + + hash = hash_long((ulong_t)PID_KEY * (ulong_t)pid, table->ht_bits); + bin = &table->ht_bins[hash]; + spin_lock(&bin->hb_lock); + + hlist_add_head(&entry->he_list, &bin->hb_head); + + spin_unlock(&bin->hb_lock); + spin_unlock(&table->ht_lock); + + return (0); +} + +/* + * tsd_hash_del - delete an entry from hash table, key, and pid lists + * @table: hash table + * @key: search key + * @pid: search pid + */ +static void +tsd_hash_del(tsd_hash_table_t *table, tsd_hash_entry_t *entry) +{ + ASSERT(spin_is_locked(&table->ht_lock)); + hlist_del(&entry->he_list); + list_del_init(&entry->he_key_list); + list_del_init(&entry->he_pid_list); +} + +/* + * tsd_hash_table_init - allocate a hash table + * @bits: hash table size + * + * A hash table with 2^bits bins will be created, it may not be resized + * after the fact and must be free'd with tsd_hash_table_fini(). + */ +static tsd_hash_table_t * +tsd_hash_table_init(uint_t bits) +{ + tsd_hash_table_t *table; + int hash, size = (1 << bits); + + table = kmem_zalloc(sizeof (tsd_hash_table_t), KM_SLEEP); + if (table == NULL) + return (NULL); + + table->ht_bins = kmem_zalloc(sizeof (tsd_hash_bin_t) * size, KM_SLEEP); + if (table->ht_bins == NULL) { + kmem_free(table, sizeof (tsd_hash_table_t)); + return (NULL); + } + + for (hash = 0; hash < size; hash++) { + spin_lock_init(&table->ht_bins[hash].hb_lock); + INIT_HLIST_HEAD(&table->ht_bins[hash].hb_head); + } + + spin_lock_init(&table->ht_lock); + table->ht_bits = bits; + table->ht_key = 1; + + return (table); +} + +/* + * tsd_hash_table_fini - free a hash table + * @table: hash table + * + * Free a hash table allocated by tsd_hash_table_init(). If the hash + * table is not empty this function will call the proper destructor for + * all remaining entries before freeing the memory used by those entries. + */ +static void +tsd_hash_table_fini(tsd_hash_table_t *table) +{ + HLIST_HEAD(work); + tsd_hash_bin_t *bin; + tsd_hash_entry_t *entry; + int size, i; + + ASSERT3P(table, !=, NULL); + spin_lock(&table->ht_lock); + for (i = 0, size = (1 << table->ht_bits); i < size; i++) { + bin = &table->ht_bins[i]; + spin_lock(&bin->hb_lock); + while (!hlist_empty(&bin->hb_head)) { + entry = hlist_entry(bin->hb_head.first, + tsd_hash_entry_t, he_list); + tsd_hash_del(table, entry); + hlist_add_head(&entry->he_list, &work); + } + spin_unlock(&bin->hb_lock); + } + spin_unlock(&table->ht_lock); + + tsd_hash_dtor(&work); + kmem_free(table->ht_bins, sizeof (tsd_hash_bin_t)*(1<ht_bits)); + kmem_free(table, sizeof (tsd_hash_table_t)); +} + +/* + * tsd_remove_entry - remove a tsd entry for this thread + * @entry: entry to remove + * + * Remove the thread specific data @entry for this thread. + * If this is the last entry for this thread, also remove the PID entry. + */ +static void +tsd_remove_entry(tsd_hash_entry_t *entry) +{ + HLIST_HEAD(work); + tsd_hash_table_t *table; + tsd_hash_entry_t *pid_entry; + tsd_hash_bin_t *pid_entry_bin, *entry_bin; + ulong_t hash; + + table = tsd_hash_table; + ASSERT3P(table, !=, NULL); + ASSERT3P(entry, !=, NULL); + + spin_lock(&table->ht_lock); + + hash = hash_long((ulong_t)entry->he_key * + (ulong_t)entry->he_pid, table->ht_bits); + entry_bin = &table->ht_bins[hash]; + + /* save the possible pid_entry */ + pid_entry = list_entry(entry->he_pid_list.next, tsd_hash_entry_t, + he_pid_list); + + /* remove entry */ + spin_lock(&entry_bin->hb_lock); + tsd_hash_del(table, entry); + hlist_add_head(&entry->he_list, &work); + spin_unlock(&entry_bin->hb_lock); + + /* if pid_entry is indeed pid_entry, then remove it if it's empty */ + if (pid_entry->he_key == PID_KEY && + list_empty(&pid_entry->he_pid_list)) { + hash = hash_long((ulong_t)pid_entry->he_key * + (ulong_t)pid_entry->he_pid, table->ht_bits); + pid_entry_bin = &table->ht_bins[hash]; + + spin_lock(&pid_entry_bin->hb_lock); + tsd_hash_del(table, pid_entry); + hlist_add_head(&pid_entry->he_list, &work); + spin_unlock(&pid_entry_bin->hb_lock); + } + + spin_unlock(&table->ht_lock); + + tsd_hash_dtor(&work); +} + +/* + * tsd_set - set thread specific data + * @key: lookup key + * @value: value to set + * + * Caller must prevent racing tsd_create() or tsd_destroy(), protected + * from racing tsd_get() or tsd_set() because it is thread specific. + * This function has been optimized to be fast for the update case. + * When setting the tsd initially it will be slower due to additional + * required locking and potential memory allocations. + */ +int +tsd_set(uint_t key, void *value) +{ + tsd_hash_table_t *table; + tsd_hash_entry_t *entry; + pid_t pid; + int rc; + /* mark remove if value is NULL */ + boolean_t remove = (value == NULL); + + table = tsd_hash_table; + pid = curthread->pid; + ASSERT3P(table, !=, NULL); + + if ((key == 0) || (key > TSD_KEYS_MAX)) + return (EINVAL); + + /* Entry already exists in hash table update value */ + entry = tsd_hash_search(table, key, pid); + if (entry) { + entry->he_value = value; + /* remove the entry */ + if (remove) + tsd_remove_entry(entry); + return (0); + } + + /* don't create entry if value is NULL */ + if (remove) + return (0); + + /* Add a process entry to the hash if not yet exists */ + entry = tsd_hash_search(table, PID_KEY, pid); + if (entry == NULL) { + rc = tsd_hash_add_pid(table, pid); + if (rc) + return (rc); + } + + rc = tsd_hash_add(table, key, pid, value); + return (rc); +} +EXPORT_SYMBOL(tsd_set); + +/* + * tsd_get - get thread specific data + * @key: lookup key + * + * Caller must prevent racing tsd_create() or tsd_destroy(). This + * implementation is designed to be fast and scalable, it does not + * lock the entire table only a single hash bin. + */ +void * +tsd_get(uint_t key) +{ + tsd_hash_entry_t *entry; + + ASSERT3P(tsd_hash_table, !=, NULL); + + if ((key == 0) || (key > TSD_KEYS_MAX)) + return (NULL); + + entry = tsd_hash_search(tsd_hash_table, key, curthread->pid); + if (entry == NULL) + return (NULL); + + return (entry->he_value); +} +EXPORT_SYMBOL(tsd_get); + +/* + * tsd_get_by_thread - get thread specific data for specified thread + * @key: lookup key + * @thread: thread to lookup + * + * Caller must prevent racing tsd_create() or tsd_destroy(). This + * implementation is designed to be fast and scalable, it does not + * lock the entire table only a single hash bin. + */ +void * +tsd_get_by_thread(uint_t key, kthread_t *thread) +{ + tsd_hash_entry_t *entry; + + ASSERT3P(tsd_hash_table, !=, NULL); + + if ((key == 0) || (key > TSD_KEYS_MAX)) + return (NULL); + + entry = tsd_hash_search(tsd_hash_table, key, thread->pid); + if (entry == NULL) + return (NULL); + + return (entry->he_value); +} +EXPORT_SYMBOL(tsd_get_by_thread); + +/* + * tsd_create - create thread specific data key + * @keyp: lookup key address + * @dtor: destructor called during tsd_destroy() or tsd_exit() + * + * Provided key must be set to 0 or it assumed to be already in use. + * The dtor is allowed to be NULL in which case no additional cleanup + * for the data is performed during tsd_destroy() or tsd_exit(). + * + * Caller must prevent racing tsd_set() or tsd_get(), this function is + * safe from racing tsd_create(), tsd_destroy(), and tsd_exit(). + */ +void +tsd_create(uint_t *keyp, dtor_func_t dtor) +{ + ASSERT3P(keyp, !=, NULL); + if (*keyp) + return; + + (void) tsd_hash_add_key(tsd_hash_table, keyp, dtor); +} +EXPORT_SYMBOL(tsd_create); + +/* + * tsd_destroy - destroy thread specific data + * @keyp: lookup key address + * + * Destroys the thread specific data on all threads which use this key. + * + * Caller must prevent racing tsd_set() or tsd_get(), this function is + * safe from racing tsd_create(), tsd_destroy(), and tsd_exit(). + */ +void +tsd_destroy(uint_t *keyp) +{ + HLIST_HEAD(work); + tsd_hash_table_t *table; + tsd_hash_entry_t *dtor_entry, *entry; + tsd_hash_bin_t *dtor_entry_bin, *entry_bin; + ulong_t hash; + + table = tsd_hash_table; + ASSERT3P(table, !=, NULL); + + spin_lock(&table->ht_lock); + dtor_entry = tsd_hash_search(table, *keyp, DTOR_PID); + if (dtor_entry == NULL) { + spin_unlock(&table->ht_lock); + return; + } + + /* + * All threads which use this key must be linked off of the + * DTOR_PID entry. They are removed from the hash table and + * linked in to a private working list to be destroyed. + */ + while (!list_empty(&dtor_entry->he_key_list)) { + entry = list_entry(dtor_entry->he_key_list.next, + tsd_hash_entry_t, he_key_list); + ASSERT3U(dtor_entry->he_key, ==, entry->he_key); + ASSERT3P(dtor_entry->he_dtor, ==, entry->he_dtor); + + hash = hash_long((ulong_t)entry->he_key * + (ulong_t)entry->he_pid, table->ht_bits); + entry_bin = &table->ht_bins[hash]; + + spin_lock(&entry_bin->hb_lock); + tsd_hash_del(table, entry); + hlist_add_head(&entry->he_list, &work); + spin_unlock(&entry_bin->hb_lock); + } + + hash = hash_long((ulong_t)dtor_entry->he_key * + (ulong_t)dtor_entry->he_pid, table->ht_bits); + dtor_entry_bin = &table->ht_bins[hash]; + + spin_lock(&dtor_entry_bin->hb_lock); + tsd_hash_del(table, dtor_entry); + hlist_add_head(&dtor_entry->he_list, &work); + spin_unlock(&dtor_entry_bin->hb_lock); + spin_unlock(&table->ht_lock); + + tsd_hash_dtor(&work); + *keyp = 0; +} +EXPORT_SYMBOL(tsd_destroy); + +/* + * tsd_exit - destroys all thread specific data for this thread + * + * Destroys all the thread specific data for this thread. + * + * Caller must prevent racing tsd_set() or tsd_get(), this function is + * safe from racing tsd_create(), tsd_destroy(), and tsd_exit(). + */ +void +tsd_exit(void) +{ + HLIST_HEAD(work); + tsd_hash_table_t *table; + tsd_hash_entry_t *pid_entry, *entry; + tsd_hash_bin_t *pid_entry_bin, *entry_bin; + ulong_t hash; + + table = tsd_hash_table; + ASSERT3P(table, !=, NULL); + + spin_lock(&table->ht_lock); + pid_entry = tsd_hash_search(table, PID_KEY, curthread->pid); + if (pid_entry == NULL) { + spin_unlock(&table->ht_lock); + return; + } + + /* + * All keys associated with this pid must be linked off of the + * PID_KEY entry. They are removed from the hash table and + * linked in to a private working list to be destroyed. + */ + + while (!list_empty(&pid_entry->he_pid_list)) { + entry = list_entry(pid_entry->he_pid_list.next, + tsd_hash_entry_t, he_pid_list); + ASSERT3U(pid_entry->he_pid, ==, entry->he_pid); + + hash = hash_long((ulong_t)entry->he_key * + (ulong_t)entry->he_pid, table->ht_bits); + entry_bin = &table->ht_bins[hash]; + + spin_lock(&entry_bin->hb_lock); + tsd_hash_del(table, entry); + hlist_add_head(&entry->he_list, &work); + spin_unlock(&entry_bin->hb_lock); + } + + hash = hash_long((ulong_t)pid_entry->he_key * + (ulong_t)pid_entry->he_pid, table->ht_bits); + pid_entry_bin = &table->ht_bins[hash]; + + spin_lock(&pid_entry_bin->hb_lock); + tsd_hash_del(table, pid_entry); + hlist_add_head(&pid_entry->he_list, &work); + spin_unlock(&pid_entry_bin->hb_lock); + spin_unlock(&table->ht_lock); + + tsd_hash_dtor(&work); +} +EXPORT_SYMBOL(tsd_exit); + +int +spl_tsd_init(void) +{ + tsd_hash_table = tsd_hash_table_init(TSD_HASH_TABLE_BITS_DEFAULT); + if (tsd_hash_table == NULL) + return (1); + + return (0); +} + +void +spl_tsd_fini(void) +{ + tsd_hash_table_fini(tsd_hash_table); + tsd_hash_table = NULL; +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-vmem.c +++ linux-aws-4.15.0/spl/module/spl/spl-vmem.c @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + */ + +#include +#include +#include +#include +#include + +vmem_t *heap_arena = NULL; +EXPORT_SYMBOL(heap_arena); + +vmem_t *zio_alloc_arena = NULL; +EXPORT_SYMBOL(zio_alloc_arena); + +vmem_t *zio_arena = NULL; +EXPORT_SYMBOL(zio_arena); + +#define VMEM_FLOOR_SIZE (4 * 1024 * 1024) /* 4MB floor */ + +/* + * Return approximate virtual memory usage based on these assumptions: + * + * 1) The major SPL consumer of virtual memory is the kmem cache. + * 2) Memory allocated with vmem_alloc() is short lived and can be ignored. + * 3) Allow a 4MB floor as a generous pad given normal consumption. + * 4) The spl_kmem_cache_sem only contends with cache create/destroy. + */ +size_t +vmem_size(vmem_t *vmp, int typemask) +{ + spl_kmem_cache_t *skc; + size_t alloc = VMEM_FLOOR_SIZE; + + if ((typemask & VMEM_ALLOC) && (typemask & VMEM_FREE)) + return (VMALLOC_TOTAL); + + + down_read(&spl_kmem_cache_sem); + list_for_each_entry(skc, &spl_kmem_cache_list, skc_list) { + if (skc->skc_flags & KMC_VMEM) + alloc += skc->skc_slab_size * skc->skc_slab_total; + } + up_read(&spl_kmem_cache_sem); + + if (typemask & VMEM_ALLOC) + return (MIN(alloc, VMALLOC_TOTAL)); + else if (typemask & VMEM_FREE) + return (MAX(VMALLOC_TOTAL - alloc, 0)); + else + return (0); +} +EXPORT_SYMBOL(vmem_size); + +/* + * Public vmem_alloc(), vmem_zalloc() and vmem_free() interfaces. + */ +void * +spl_vmem_alloc(size_t size, int flags, const char *func, int line) +{ + ASSERT0(flags & ~KM_PUBLIC_MASK); + + flags |= KM_VMEM; + +#if !defined(DEBUG_KMEM) + return (spl_kmem_alloc_impl(size, flags, NUMA_NO_NODE)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_alloc_debug(size, flags, NUMA_NO_NODE)); +#else + return (spl_kmem_alloc_track(size, flags, func, line, NUMA_NO_NODE)); +#endif +} +EXPORT_SYMBOL(spl_vmem_alloc); + +void * +spl_vmem_zalloc(size_t size, int flags, const char *func, int line) +{ + ASSERT0(flags & ~KM_PUBLIC_MASK); + + flags |= (KM_VMEM | KM_ZERO); + +#if !defined(DEBUG_KMEM) + return (spl_kmem_alloc_impl(size, flags, NUMA_NO_NODE)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_alloc_debug(size, flags, NUMA_NO_NODE)); +#else + return (spl_kmem_alloc_track(size, flags, func, line, NUMA_NO_NODE)); +#endif +} +EXPORT_SYMBOL(spl_vmem_zalloc); + +void +spl_vmem_free(const void *buf, size_t size) +{ +#if !defined(DEBUG_KMEM) + return (spl_kmem_free_impl(buf, size)); +#elif !defined(DEBUG_KMEM_TRACKING) + return (spl_kmem_free_debug(buf, size)); +#else + return (spl_kmem_free_track(buf, size)); +#endif +} +EXPORT_SYMBOL(spl_vmem_free); + +int +spl_vmem_init(void) +{ + return (0); +} + +void +spl_vmem_fini(void) +{ +} --- linux-aws-4.15.0.orig/spl/module/spl/spl-vnode.c +++ linux-aws-4.15.0/spl/module/spl/spl-vnode.c @@ -0,0 +1,927 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) Vnode Implementation. +\*****************************************************************************/ + +#include +#include +#include +#include +#include + +vnode_t *rootdir = (vnode_t *)0xabcd1234; +EXPORT_SYMBOL(rootdir); + +static spl_kmem_cache_t *vn_cache; +static spl_kmem_cache_t *vn_file_cache; + +static DEFINE_SPINLOCK(vn_file_lock); +static LIST_HEAD(vn_file_list); + +vtype_t +vn_mode_to_vtype(mode_t mode) +{ + if (S_ISREG(mode)) + return VREG; + + if (S_ISDIR(mode)) + return VDIR; + + if (S_ISCHR(mode)) + return VCHR; + + if (S_ISBLK(mode)) + return VBLK; + + if (S_ISFIFO(mode)) + return VFIFO; + + if (S_ISLNK(mode)) + return VLNK; + + if (S_ISSOCK(mode)) + return VSOCK; + + return VNON; +} /* vn_mode_to_vtype() */ +EXPORT_SYMBOL(vn_mode_to_vtype); + +mode_t +vn_vtype_to_mode(vtype_t vtype) +{ + if (vtype == VREG) + return S_IFREG; + + if (vtype == VDIR) + return S_IFDIR; + + if (vtype == VCHR) + return S_IFCHR; + + if (vtype == VBLK) + return S_IFBLK; + + if (vtype == VFIFO) + return S_IFIFO; + + if (vtype == VLNK) + return S_IFLNK; + + if (vtype == VSOCK) + return S_IFSOCK; + + return VNON; +} /* vn_vtype_to_mode() */ +EXPORT_SYMBOL(vn_vtype_to_mode); + +vnode_t * +vn_alloc(int flag) +{ + vnode_t *vp; + + vp = kmem_cache_alloc(vn_cache, flag); + if (vp != NULL) { + vp->v_file = NULL; + vp->v_type = 0; + } + + return (vp); +} /* vn_alloc() */ +EXPORT_SYMBOL(vn_alloc); + +void +vn_free(vnode_t *vp) +{ + kmem_cache_free(vn_cache, vp); +} /* vn_free() */ +EXPORT_SYMBOL(vn_free); + +int +vn_open(const char *path, uio_seg_t seg, int flags, int mode, + vnode_t **vpp, int x1, void *x2) +{ + struct file *fp; + struct kstat stat; + int rc, saved_umask = 0; + gfp_t saved_gfp; + vnode_t *vp; + + ASSERT(flags & (FWRITE | FREAD)); + ASSERT(seg == UIO_SYSSPACE); + ASSERT(vpp); + *vpp = NULL; + + if (!(flags & FCREAT) && (flags & FWRITE)) + flags |= FEXCL; + + /* Note for filp_open() the two low bits must be remapped to mean: + * 01 - read-only -> 00 read-only + * 10 - write-only -> 01 write-only + * 11 - read-write -> 10 read-write + */ + flags--; + + if (flags & FCREAT) + saved_umask = xchg(¤t->fs->umask, 0); + + fp = filp_open(path, flags, mode); + + if (flags & FCREAT) + (void)xchg(¤t->fs->umask, saved_umask); + + if (IS_ERR(fp)) + return (-PTR_ERR(fp)); + +#if defined(HAVE_4ARGS_VFS_GETATTR) + rc = vfs_getattr(&fp->f_path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT); +#elif defined(HAVE_2ARGS_VFS_GETATTR) + rc = vfs_getattr(&fp->f_path, &stat); +#else + rc = vfs_getattr(fp->f_path.mnt, fp->f_dentry, &stat); +#endif + if (rc) { + filp_close(fp, 0); + return (-rc); + } + + vp = vn_alloc(KM_SLEEP); + if (!vp) { + filp_close(fp, 0); + return (ENOMEM); + } + + saved_gfp = mapping_gfp_mask(fp->f_mapping); + mapping_set_gfp_mask(fp->f_mapping, saved_gfp & ~(__GFP_IO|__GFP_FS)); + + mutex_enter(&vp->v_lock); + vp->v_type = vn_mode_to_vtype(stat.mode); + vp->v_file = fp; + vp->v_gfp_mask = saved_gfp; + *vpp = vp; + mutex_exit(&vp->v_lock); + + return (0); +} /* vn_open() */ +EXPORT_SYMBOL(vn_open); + +int +vn_openat(const char *path, uio_seg_t seg, int flags, int mode, + vnode_t **vpp, int x1, void *x2, vnode_t *vp, int fd) +{ + char *realpath; + int len, rc; + + ASSERT(vp == rootdir); + + len = strlen(path) + 2; + realpath = kmalloc(len, kmem_flags_convert(KM_SLEEP)); + if (!realpath) + return (ENOMEM); + + (void)snprintf(realpath, len, "/%s", path); + rc = vn_open(realpath, seg, flags, mode, vpp, x1, x2); + kfree(realpath); + + return (rc); +} /* vn_openat() */ +EXPORT_SYMBOL(vn_openat); + +int +vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len, offset_t off, + uio_seg_t seg, int ioflag, rlim64_t x2, void *x3, ssize_t *residp) +{ + struct file *fp = vp->v_file; + loff_t offset = off; + int rc; + + ASSERT(uio == UIO_WRITE || uio == UIO_READ); + ASSERT(seg == UIO_SYSSPACE); + ASSERT((ioflag & ~FAPPEND) == 0); + + if (ioflag & FAPPEND) + offset = fp->f_pos; + + if (uio & UIO_WRITE) + rc = spl_kernel_write(fp, addr, len, &offset); + else + rc = spl_kernel_read(fp, addr, len, &offset); + + fp->f_pos = offset; + + if (rc < 0) + return (-rc); + + if (residp) { + *residp = len - rc; + } else { + if (rc != len) + return (EIO); + } + + return (0); +} /* vn_rdwr() */ +EXPORT_SYMBOL(vn_rdwr); + +int +vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4) +{ + int rc; + + ASSERT(vp); + ASSERT(vp->v_file); + + mapping_set_gfp_mask(vp->v_file->f_mapping, vp->v_gfp_mask); + rc = filp_close(vp->v_file, 0); + vn_free(vp); + + return (-rc); +} /* vn_close() */ +EXPORT_SYMBOL(vn_close); + +/* vn_seek() does not actually seek it only performs bounds checking on the + * proposed seek. We perform minimal checking and allow vn_rdwr() to catch + * anything more serious. */ +int +vn_seek(vnode_t *vp, offset_t ooff, offset_t *noffp, void *ct) +{ + return ((*noffp < 0 || *noffp > MAXOFFSET_T) ? EINVAL : 0); +} +EXPORT_SYMBOL(vn_seek); + +/* + * spl_basename() takes a NULL-terminated string s as input containing a path. + * It returns a char pointer to a string and a length that describe the + * basename of the path. If the basename is not "." or "/", it will be an index + * into the string. While the string should be NULL terminated, the section + * referring to the basename is not. spl_basename is dual-licensed GPLv2+ and + * CC0. Anyone wishing to reuse it in another codebase may pick either license. + */ +static void +spl_basename(const char *s, const char **str, int *len) +{ + size_t i, end; + + ASSERT(str); + ASSERT(len); + + if (!s || !*s) { + *str = "."; + *len = 1; + return; + } + + i = strlen(s) - 1; + + while (i && s[i--] == '/'); + + if (i == 0) { + *str = "/"; + *len = 1; + return; + } + + end = i; + + for (end = i; i; i--) { + if (s[i] == '/') { + *str = &s[i+1]; + *len = end - i + 1; + return; + } + } + + *str = s; + *len = end + 1; +} + +static struct dentry * +spl_kern_path_locked(const char *name, struct path *path) +{ + struct path parent; + struct dentry *dentry; + const char *basename; + int len; + int rc; + + ASSERT(name); + ASSERT(path); + + spl_basename(name, &basename, &len); + + /* We do not accept "." or ".." */ + if (len <= 2 && basename[0] == '.') + if (len == 1 || basename[1] == '.') + return (ERR_PTR(-EACCES)); + + rc = kern_path(name, LOOKUP_PARENT, &parent); + if (rc) + return (ERR_PTR(rc)); + + /* use I_MUTEX_PARENT because vfs_unlink needs it */ + spl_inode_lock_nested(parent.dentry->d_inode, I_MUTEX_PARENT); + + dentry = lookup_one_len(basename, parent.dentry, len); + if (IS_ERR(dentry)) { + spl_inode_unlock(parent.dentry->d_inode); + path_put(&parent); + } else { + *path = parent; + } + + return (dentry); +} + +/* Based on do_unlinkat() from linux/fs/namei.c */ +int +vn_remove(const char *path, uio_seg_t seg, int flags) +{ + struct dentry *dentry; + struct path parent; + struct inode *inode = NULL; + int rc = 0; + + ASSERT(seg == UIO_SYSSPACE); + ASSERT(flags == RMFILE); + + dentry = spl_kern_path_locked(path, &parent); + rc = PTR_ERR(dentry); + if (!IS_ERR(dentry)) { + if (parent.dentry->d_name.name[parent.dentry->d_name.len]) { + rc = 0; + goto slashes; + } + + inode = dentry->d_inode; + if (inode) { + atomic_inc(&inode->i_count); + } else { + rc = 0; + goto slashes; + } + +#ifdef HAVE_2ARGS_VFS_UNLINK + rc = vfs_unlink(parent.dentry->d_inode, dentry); +#else + rc = vfs_unlink(parent.dentry->d_inode, dentry, NULL); +#endif /* HAVE_2ARGS_VFS_UNLINK */ +exit1: + dput(dentry); + } else { + return (-rc); + } + + spl_inode_unlock(parent.dentry->d_inode); + if (inode) + iput(inode); /* truncate the inode here */ + + path_put(&parent); + return (-rc); + +slashes: + rc = !dentry->d_inode ? -ENOENT : + S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR; + goto exit1; +} /* vn_remove() */ +EXPORT_SYMBOL(vn_remove); + +/* Based on do_rename() from linux/fs/namei.c */ +int +vn_rename(const char *oldname, const char *newname, int x1) +{ + struct dentry *old_dir, *new_dir; + struct dentry *old_dentry, *new_dentry; + struct dentry *trap; + struct path old_parent, new_parent; + int rc = 0; + + old_dentry = spl_kern_path_locked(oldname, &old_parent); + if (IS_ERR(old_dentry)) { + rc = PTR_ERR(old_dentry); + goto exit; + } + + spl_inode_unlock(old_parent.dentry->d_inode); + + new_dentry = spl_kern_path_locked(newname, &new_parent); + if (IS_ERR(new_dentry)) { + rc = PTR_ERR(new_dentry); + goto exit2; + } + + spl_inode_unlock(new_parent.dentry->d_inode); + + rc = -EXDEV; + if (old_parent.mnt != new_parent.mnt) + goto exit3; + + old_dir = old_parent.dentry; + new_dir = new_parent.dentry; + trap = lock_rename(new_dir, old_dir); + + /* source should not be ancestor of target */ + rc = -EINVAL; + if (old_dentry == trap) + goto exit4; + + /* target should not be an ancestor of source */ + rc = -ENOTEMPTY; + if (new_dentry == trap) + goto exit4; + + /* source must exist */ + rc = -ENOENT; + if (!old_dentry->d_inode) + goto exit4; + + /* unless the source is a directory trailing slashes give -ENOTDIR */ + if (!S_ISDIR(old_dentry->d_inode->i_mode)) { + rc = -ENOTDIR; + if (old_dentry->d_name.name[old_dentry->d_name.len]) + goto exit4; + if (new_dentry->d_name.name[new_dentry->d_name.len]) + goto exit4; + } + +#if defined(HAVE_4ARGS_VFS_RENAME) + rc = vfs_rename(old_dir->d_inode, old_dentry, + new_dir->d_inode, new_dentry); +#elif defined(HAVE_5ARGS_VFS_RENAME) + rc = vfs_rename(old_dir->d_inode, old_dentry, + new_dir->d_inode, new_dentry, NULL); +#else + rc = vfs_rename(old_dir->d_inode, old_dentry, + new_dir->d_inode, new_dentry, NULL, 0); +#endif +exit4: + unlock_rename(new_dir, old_dir); +exit3: + dput(new_dentry); + path_put(&new_parent); +exit2: + dput(old_dentry); + path_put(&old_parent); +exit: + return (-rc); +} +EXPORT_SYMBOL(vn_rename); + +int +vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4) +{ + struct file *fp; + struct kstat stat; + int rc; + + ASSERT(vp); + ASSERT(vp->v_file); + ASSERT(vap); + + fp = vp->v_file; + +#if defined(HAVE_4ARGS_VFS_GETATTR) + rc = vfs_getattr(&fp->f_path, &stat, STATX_BASIC_STATS, + AT_STATX_SYNC_AS_STAT); +#elif defined(HAVE_2ARGS_VFS_GETATTR) + rc = vfs_getattr(&fp->f_path, &stat); +#else + rc = vfs_getattr(fp->f_path.mnt, fp->f_dentry, &stat); +#endif + if (rc) + return (-rc); + + vap->va_type = vn_mode_to_vtype(stat.mode); + vap->va_mode = stat.mode; + vap->va_uid = KUID_TO_SUID(stat.uid); + vap->va_gid = KGID_TO_SGID(stat.gid); + vap->va_fsid = 0; + vap->va_nodeid = stat.ino; + vap->va_nlink = stat.nlink; + vap->va_size = stat.size; + vap->va_blksize = stat.blksize; + vap->va_atime = stat.atime; + vap->va_mtime = stat.mtime; + vap->va_ctime = stat.ctime; + vap->va_rdev = stat.rdev; + vap->va_nblocks = stat.blocks; + + return (0); +} +EXPORT_SYMBOL(vn_getattr); + +int vn_fsync(vnode_t *vp, int flags, void *x3, void *x4) +{ + int datasync = 0; + int error; + int fstrans; + + ASSERT(vp); + ASSERT(vp->v_file); + + if (flags & FDSYNC) + datasync = 1; + + /* + * May enter XFS which generates a warning when PF_FSTRANS is set. + * To avoid this the flag is cleared over vfs_sync() and then reset. + */ + fstrans = __spl_pf_fstrans_check(); + if (fstrans) + current->flags &= ~(__SPL_PF_FSTRANS); + + error = -spl_filp_fsync(vp->v_file, datasync); + if (fstrans) + current->flags |= __SPL_PF_FSTRANS; + + return (error); +} /* vn_fsync() */ +EXPORT_SYMBOL(vn_fsync); + +int vn_space(vnode_t *vp, int cmd, struct flock *bfp, int flag, + offset_t offset, void *x6, void *x7) +{ + int error = EOPNOTSUPP; +#ifdef FALLOC_FL_PUNCH_HOLE + int fstrans; +#endif + + if (cmd != F_FREESP || bfp->l_whence != 0) + return (EOPNOTSUPP); + + ASSERT(vp); + ASSERT(vp->v_file); + ASSERT(bfp->l_start >= 0 && bfp->l_len > 0); + +#ifdef FALLOC_FL_PUNCH_HOLE + /* + * May enter XFS which generates a warning when PF_FSTRANS is set. + * To avoid this the flag is cleared over vfs_sync() and then reset. + */ + fstrans = __spl_pf_fstrans_check(); + if (fstrans) + current->flags &= ~(__SPL_PF_FSTRANS); + + /* + * When supported by the underlying file system preferentially + * use the fallocate() callback to preallocate the space. + */ + error = -spl_filp_fallocate(vp->v_file, + FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, + bfp->l_start, bfp->l_len); + + if (fstrans) + current->flags |= __SPL_PF_FSTRANS; + + if (error == 0) + return (0); +#endif + +#ifdef HAVE_INODE_TRUNCATE_RANGE + if (vp->v_file->f_dentry && vp->v_file->f_dentry->d_inode && + vp->v_file->f_dentry->d_inode->i_op && + vp->v_file->f_dentry->d_inode->i_op->truncate_range) { + off_t end = bfp->l_start + bfp->l_len; + /* + * Judging from the code in shmem_truncate_range(), + * it seems the kernel expects the end offset to be + * inclusive and aligned to the end of a page. + */ + if (end % PAGE_SIZE != 0) { + end &= ~(off_t)(PAGE_SIZE - 1); + if (end <= bfp->l_start) + return (0); + } + --end; + + vp->v_file->f_dentry->d_inode->i_op->truncate_range( + vp->v_file->f_dentry->d_inode, + bfp->l_start, end + ); + return (0); + } +#endif + + return (error); +} +EXPORT_SYMBOL(vn_space); + +/* Function must be called while holding the vn_file_lock */ +static file_t * +file_find(int fd, struct task_struct *task) +{ + file_t *fp; + + ASSERT(spin_is_locked(&vn_file_lock)); + + list_for_each_entry(fp, &vn_file_list, f_list) { + if (fd == fp->f_fd && fp->f_task == task) { + ASSERT(atomic_read(&fp->f_ref) != 0); + return fp; + } + } + + return NULL; +} /* file_find() */ + +file_t * +vn_getf(int fd) +{ + struct kstat stat; + struct file *lfp; + file_t *fp; + vnode_t *vp; + int rc = 0; + + if (fd < 0) + return (NULL); + + /* Already open just take an extra reference */ + spin_lock(&vn_file_lock); + + fp = file_find(fd, current); + if (fp) { + lfp = fget(fd); + fput(fp->f_file); + /* + * areleasef() can cause us to see a stale reference when + * userspace has reused a file descriptor before areleasef() + * has run. fput() the stale reference and replace it. We + * retain the original reference count such that the concurrent + * areleasef() will decrement its reference and terminate. + */ + if (lfp != fp->f_file) { + fp->f_file = lfp; + fp->f_vnode->v_file = lfp; + } + atomic_inc(&fp->f_ref); + spin_unlock(&vn_file_lock); + return (fp); + } + + spin_unlock(&vn_file_lock); + + /* File was not yet opened create the object and setup */ + fp = kmem_cache_alloc(vn_file_cache, KM_SLEEP); + if (fp == NULL) + goto out; + + mutex_enter(&fp->f_lock); + + fp->f_fd = fd; + fp->f_task = current; + fp->f_offset = 0; + atomic_inc(&fp->f_ref); + + lfp = fget(fd); + if (lfp == NULL) + goto out_mutex; + + vp = vn_alloc(KM_SLEEP); + if (vp == NULL) + goto out_fget; + +#if defined(HAVE_4ARGS_VFS_GETATTR) + rc = vfs_getattr(&lfp->f_path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT); +#elif defined(HAVE_2ARGS_VFS_GETATTR) + rc = vfs_getattr(&lfp->f_path, &stat); +#else + rc = vfs_getattr(lfp->f_path.mnt, lfp->f_dentry, &stat); +#endif + if (rc) + goto out_vnode; + + mutex_enter(&vp->v_lock); + vp->v_type = vn_mode_to_vtype(stat.mode); + vp->v_file = lfp; + mutex_exit(&vp->v_lock); + + fp->f_vnode = vp; + fp->f_file = lfp; + + /* Put it on the tracking list */ + spin_lock(&vn_file_lock); + list_add(&fp->f_list, &vn_file_list); + spin_unlock(&vn_file_lock); + + mutex_exit(&fp->f_lock); + return (fp); + +out_vnode: + vn_free(vp); +out_fget: + fput(lfp); +out_mutex: + mutex_exit(&fp->f_lock); + kmem_cache_free(vn_file_cache, fp); +out: + return (NULL); +} /* getf() */ +EXPORT_SYMBOL(getf); + +static void releasef_locked(file_t *fp) +{ + ASSERT(fp->f_file); + ASSERT(fp->f_vnode); + + /* Unlinked from list, no refs, safe to free outside mutex */ + fput(fp->f_file); + vn_free(fp->f_vnode); + + kmem_cache_free(vn_file_cache, fp); +} + +void +vn_releasef(int fd) +{ + areleasef(fd, P_FINFO(current)); +} +EXPORT_SYMBOL(releasef); + +void +vn_areleasef(int fd, uf_info_t *fip) +{ + file_t *fp; + struct task_struct *task = (struct task_struct *)fip; + + if (fd < 0) + return; + + spin_lock(&vn_file_lock); + fp = file_find(fd, task); + if (fp) { + atomic_dec(&fp->f_ref); + if (atomic_read(&fp->f_ref) > 0) { + spin_unlock(&vn_file_lock); + return; + } + + list_del(&fp->f_list); + releasef_locked(fp); + } + spin_unlock(&vn_file_lock); + + return; +} /* releasef() */ +EXPORT_SYMBOL(areleasef); + + +static void +#ifdef HAVE_SET_FS_PWD_WITH_CONST +vn_set_fs_pwd(struct fs_struct *fs, const struct path *path) +#else +vn_set_fs_pwd(struct fs_struct *fs, struct path *path) +#endif /* HAVE_SET_FS_PWD_WITH_CONST */ +{ + struct path old_pwd; + +#ifdef HAVE_FS_STRUCT_SPINLOCK + spin_lock(&fs->lock); + old_pwd = fs->pwd; + fs->pwd = *path; + path_get(path); + spin_unlock(&fs->lock); +#else + write_lock(&fs->lock); + old_pwd = fs->pwd; + fs->pwd = *path; + path_get(path); + write_unlock(&fs->lock); +#endif /* HAVE_FS_STRUCT_SPINLOCK */ + + if (old_pwd.dentry) + path_put(&old_pwd); +} + +int +vn_set_pwd(const char *filename) +{ + struct path path; + mm_segment_t saved_fs; + int rc; + + /* + * user_path_dir() and __user_walk() both expect 'filename' to be + * a user space address so we must briefly increase the data segment + * size to ensure strncpy_from_user() does not fail with -EFAULT. + */ + saved_fs = get_fs(); + set_fs(get_ds()); + + rc = user_path_dir(filename, &path); + if (rc) + goto out; + + rc = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS); + if (rc) + goto dput_and_out; + + vn_set_fs_pwd(current->fs, &path); + +dput_and_out: + path_put(&path); +out: + set_fs(saved_fs); + + return (-rc); +} /* vn_set_pwd() */ +EXPORT_SYMBOL(vn_set_pwd); + +static int +vn_cache_constructor(void *buf, void *cdrarg, int kmflags) +{ + struct vnode *vp = buf; + + mutex_init(&vp->v_lock, NULL, MUTEX_DEFAULT, NULL); + + return (0); +} /* vn_cache_constructor() */ + +static void +vn_cache_destructor(void *buf, void *cdrarg) +{ + struct vnode *vp = buf; + + mutex_destroy(&vp->v_lock); +} /* vn_cache_destructor() */ + +static int +vn_file_cache_constructor(void *buf, void *cdrarg, int kmflags) +{ + file_t *fp = buf; + + atomic_set(&fp->f_ref, 0); + mutex_init(&fp->f_lock, NULL, MUTEX_DEFAULT, NULL); + INIT_LIST_HEAD(&fp->f_list); + + return (0); +} /* file_cache_constructor() */ + +static void +vn_file_cache_destructor(void *buf, void *cdrarg) +{ + file_t *fp = buf; + + mutex_destroy(&fp->f_lock); +} /* vn_file_cache_destructor() */ + +int +spl_vn_init(void) +{ + vn_cache = kmem_cache_create("spl_vn_cache", + sizeof(struct vnode), 64, + vn_cache_constructor, + vn_cache_destructor, + NULL, NULL, NULL, 0); + + vn_file_cache = kmem_cache_create("spl_vn_file_cache", + sizeof(file_t), 64, + vn_file_cache_constructor, + vn_file_cache_destructor, + NULL, NULL, NULL, 0); + return (0); +} /* vn_init() */ + +void +spl_vn_fini(void) +{ + file_t *fp, *next_fp; + int leaked = 0; + + spin_lock(&vn_file_lock); + + list_for_each_entry_safe(fp, next_fp, &vn_file_list, f_list) { + list_del(&fp->f_list); + releasef_locked(fp); + leaked++; + } + + spin_unlock(&vn_file_lock); + + if (leaked > 0) + printk(KERN_WARNING "WARNING: %d vnode files leaked\n", leaked); + + kmem_cache_destroy(vn_file_cache); + kmem_cache_destroy(vn_cache); + + return; +} /* vn_fini() */ --- linux-aws-4.15.0.orig/spl/module/spl/spl-xdr.c +++ linux-aws-4.15.0/spl/module/spl/spl-xdr.c @@ -0,0 +1,514 @@ +/*****************************************************************************\ + * Copyright (c) 2008-2010 Sun Microsystems, Inc. + * Written by Ricardo Correia + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting Layer (SPL) XDR Implementation. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +/* + * SPL's XDR mem implementation. + * + * This is used by libnvpair to serialize/deserialize the name-value pair data + * structures into byte arrays in a well-defined and portable manner. + * + * These data structures are used by the DMU/ZFS to flexibly manipulate various + * information in memory and later serialize it/deserialize it to disk. + * Examples of usages include the pool configuration, lists of pool and dataset + * properties, etc. + * + * Reference documentation for the XDR representation and XDR operations can be + * found in RFC 1832 and xdr(3), respectively. + * + * === Implementation shortcomings === + * + * It is assumed that the following C types have the following sizes: + * + * char/unsigned char: 1 byte + * short/unsigned short: 2 bytes + * int/unsigned int: 4 bytes + * longlong_t/u_longlong_t: 8 bytes + * + * The C standard allows these types to be larger (and in the case of ints, + * shorter), so if that is the case on some compiler/architecture, the build + * will fail (on purpose). + * + * If someone wants to fix the code to work properly on such environments, then: + * + * 1) Preconditions should be added to xdrmem_enc functions to make sure the + * caller doesn't pass arguments which exceed the expected range. + * 2) Functions which take signed integers should be changed to properly do + * sign extension. + * 3) For ints with less than 32 bits, well.. I suspect you'll have bigger + * problems than this implementation. + * + * It is also assumed that: + * + * 1) Chars have 8 bits. + * 2) We can always do 32-bit-aligned int memory accesses and byte-aligned + * memcpy, memset and memcmp. + * 3) Arrays passed to xdr_array() are packed and the compiler/architecture + * supports element-sized-aligned memory accesses. + * 4) Negative integers are natively stored in two's complement binary + * representation. + * + * No checks are done for the 4 assumptions above, though. + * + * === Caller expectations === + * + * Existing documentation does not describe the semantics of XDR operations very + * well. Therefore, some assumptions about failure semantics will be made and + * will be described below: + * + * 1) If any encoding operation fails (e.g., due to lack of buffer space), the + * the stream should be considered valid only up to the encoding operation + * previous to the one that first failed. However, the stream size as returned + * by xdr_control() cannot be considered to be strictly correct (it may be + * bigger). + * + * Putting it another way, if there is an encoding failure it's undefined + * whether anything is added to the stream in that operation and therefore + * neither xdr_control() nor future encoding operations on the same stream can + * be relied upon to produce correct results. + * + * 2) If a decoding operation fails, it's undefined whether anything will be + * decoded into passed buffers/pointers during that operation, or what the + * values on those buffers will look like. + * + * Future decoding operations on the same stream will also have similar + * undefined behavior. + * + * 3) When the first decoding operation fails it is OK to trust the results of + * previous decoding operations on the same stream, as long as the caller + * expects a failure to be possible (e.g. due to end-of-stream). + * + * However, this is highly discouraged because the caller should know the + * stream size and should be coded to expect any decoding failure to be data + * corruption due to hardware, accidental or even malicious causes, which should + * be handled gracefully in all cases. + * + * In very rare situations where there are strong reasons to believe the data + * can be trusted to be valid and non-tampered with, then the caller may assume + * a decoding failure to be a bug (e.g. due to mismatched data types) and may + * fail non-gracefully. + * + * 4) Non-zero padding bytes will cause the decoding operation to fail. + * + * 5) Zero bytes on string types will also cause the decoding operation to fail. + * + * 6) It is assumed that either the pointer to the stream buffer given by the + * caller is 32-bit aligned or the architecture supports non-32-bit-aligned int + * memory accesses. + * + * 7) The stream buffer and encoding/decoding buffers/ptrs should not overlap. + * + * 8) If a caller passes pointers to non-kernel memory (e.g., pointers to user + * space or MMIO space), the computer may explode. + */ + +static struct xdr_ops xdrmem_encode_ops; +static struct xdr_ops xdrmem_decode_ops; + +void +xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size, + const enum xdr_op op) +{ + switch (op) { + case XDR_ENCODE: + xdrs->x_ops = &xdrmem_encode_ops; + break; + case XDR_DECODE: + xdrs->x_ops = &xdrmem_decode_ops; + break; + default: + xdrs->x_ops = NULL; /* Let the caller know we failed */ + return; + } + + xdrs->x_op = op; + xdrs->x_addr = addr; + xdrs->x_addr_end = addr + size; + + if (xdrs->x_addr_end < xdrs->x_addr) { + xdrs->x_ops = NULL; + } +} +EXPORT_SYMBOL(xdrmem_create); + +static bool_t +xdrmem_control(XDR *xdrs, int req, void *info) +{ + struct xdr_bytesrec *rec = (struct xdr_bytesrec *) info; + + if (req != XDR_GET_BYTES_AVAIL) + return FALSE; + + rec->xc_is_last_record = TRUE; /* always TRUE in xdrmem streams */ + rec->xc_num_avail = xdrs->x_addr_end - xdrs->x_addr; + + return TRUE; +} + +static bool_t +xdrmem_enc_bytes(XDR *xdrs, caddr_t cp, const uint_t cnt) +{ + uint_t size = roundup(cnt, 4); + uint_t pad; + + if (size < cnt) + return FALSE; /* Integer overflow */ + + if (xdrs->x_addr > xdrs->x_addr_end) + return FALSE; + + if (xdrs->x_addr_end - xdrs->x_addr < size) + return FALSE; + + memcpy(xdrs->x_addr, cp, cnt); + + xdrs->x_addr += cnt; + + pad = size - cnt; + if (pad > 0) { + memset(xdrs->x_addr, 0, pad); + xdrs->x_addr += pad; + } + + return TRUE; +} + +static bool_t +xdrmem_dec_bytes(XDR *xdrs, caddr_t cp, const uint_t cnt) +{ + static uint32_t zero = 0; + uint_t size = roundup(cnt, 4); + uint_t pad; + + if (size < cnt) + return FALSE; /* Integer overflow */ + + if (xdrs->x_addr > xdrs->x_addr_end) + return FALSE; + + if (xdrs->x_addr_end - xdrs->x_addr < size) + return FALSE; + + memcpy(cp, xdrs->x_addr, cnt); + xdrs->x_addr += cnt; + + pad = size - cnt; + if (pad > 0) { + /* An inverted memchr() would be useful here... */ + if (memcmp(&zero, xdrs->x_addr, pad) != 0) + return FALSE; + + xdrs->x_addr += pad; + } + + return TRUE; +} + +static bool_t +xdrmem_enc_uint32(XDR *xdrs, uint32_t val) +{ + if (xdrs->x_addr + sizeof(uint32_t) > xdrs->x_addr_end) + return FALSE; + + *((uint32_t *) xdrs->x_addr) = cpu_to_be32(val); + + xdrs->x_addr += sizeof(uint32_t); + + return TRUE; +} + +static bool_t +xdrmem_dec_uint32(XDR *xdrs, uint32_t *val) +{ + if (xdrs->x_addr + sizeof(uint32_t) > xdrs->x_addr_end) + return FALSE; + + *val = be32_to_cpu(*((uint32_t *) xdrs->x_addr)); + + xdrs->x_addr += sizeof(uint32_t); + + return TRUE; +} + +static bool_t +xdrmem_enc_char(XDR *xdrs, char *cp) +{ + uint32_t val; + + BUILD_BUG_ON(sizeof(char) != 1); + val = *((unsigned char *) cp); + + return xdrmem_enc_uint32(xdrs, val); +} + +static bool_t +xdrmem_dec_char(XDR *xdrs, char *cp) +{ + uint32_t val; + + BUILD_BUG_ON(sizeof(char) != 1); + + if (!xdrmem_dec_uint32(xdrs, &val)) + return FALSE; + + /* + * If any of the 3 other bytes are non-zero then val will be greater + * than 0xff and we fail because according to the RFC, this block does + * not have a char encoded in it. + */ + if (val > 0xff) + return FALSE; + + *((unsigned char *) cp) = val; + + return TRUE; +} + +static bool_t +xdrmem_enc_ushort(XDR *xdrs, unsigned short *usp) +{ + BUILD_BUG_ON(sizeof(unsigned short) != 2); + + return xdrmem_enc_uint32(xdrs, *usp); +} + +static bool_t +xdrmem_dec_ushort(XDR *xdrs, unsigned short *usp) +{ + uint32_t val; + + BUILD_BUG_ON(sizeof(unsigned short) != 2); + + if (!xdrmem_dec_uint32(xdrs, &val)) + return FALSE; + + /* + * Short ints are not in the RFC, but we assume similar logic as in + * xdrmem_dec_char(). + */ + if (val > 0xffff) + return FALSE; + + *usp = val; + + return TRUE; +} + +static bool_t +xdrmem_enc_uint(XDR *xdrs, unsigned *up) +{ + BUILD_BUG_ON(sizeof(unsigned) != 4); + + return xdrmem_enc_uint32(xdrs, *up); +} + +static bool_t +xdrmem_dec_uint(XDR *xdrs, unsigned *up) +{ + BUILD_BUG_ON(sizeof(unsigned) != 4); + + return xdrmem_dec_uint32(xdrs, (uint32_t *) up); +} + +static bool_t +xdrmem_enc_ulonglong(XDR *xdrs, u_longlong_t *ullp) +{ + BUILD_BUG_ON(sizeof(u_longlong_t) != 8); + + if (!xdrmem_enc_uint32(xdrs, *ullp >> 32)) + return FALSE; + + return xdrmem_enc_uint32(xdrs, *ullp & 0xffffffff); +} + +static bool_t +xdrmem_dec_ulonglong(XDR *xdrs, u_longlong_t *ullp) +{ + uint32_t low, high; + + BUILD_BUG_ON(sizeof(u_longlong_t) != 8); + + if (!xdrmem_dec_uint32(xdrs, &high)) + return FALSE; + if (!xdrmem_dec_uint32(xdrs, &low)) + return FALSE; + + *ullp = ((u_longlong_t) high << 32) | low; + + return TRUE; +} + +static bool_t +xdr_enc_array(XDR *xdrs, caddr_t *arrp, uint_t *sizep, const uint_t maxsize, + const uint_t elsize, const xdrproc_t elproc) +{ + uint_t i; + caddr_t addr = *arrp; + + if (*sizep > maxsize || *sizep > UINT_MAX / elsize) + return FALSE; + + if (!xdrmem_enc_uint(xdrs, sizep)) + return FALSE; + + for (i = 0; i < *sizep; i++) { + if (!elproc(xdrs, addr)) + return FALSE; + addr += elsize; + } + + return TRUE; +} + +static bool_t +xdr_dec_array(XDR *xdrs, caddr_t *arrp, uint_t *sizep, const uint_t maxsize, + const uint_t elsize, const xdrproc_t elproc) +{ + uint_t i, size; + bool_t alloc = FALSE; + caddr_t addr; + + if (!xdrmem_dec_uint(xdrs, sizep)) + return FALSE; + + size = *sizep; + + if (size > maxsize || size > UINT_MAX / elsize) + return FALSE; + + /* + * The Solaris man page says: "If *arrp is NULL when decoding, + * xdr_array() allocates memory and *arrp points to it". + */ + if (*arrp == NULL) { + BUILD_BUG_ON(sizeof(uint_t) > sizeof(size_t)); + + *arrp = kmem_alloc(size * elsize, KM_NOSLEEP); + if (*arrp == NULL) + return FALSE; + + alloc = TRUE; + } + + addr = *arrp; + + for (i = 0; i < size; i++) { + if (!elproc(xdrs, addr)) { + if (alloc) + kmem_free(*arrp, size * elsize); + return FALSE; + } + addr += elsize; + } + + return TRUE; +} + +static bool_t +xdr_enc_string(XDR *xdrs, char **sp, const uint_t maxsize) +{ + size_t slen = strlen(*sp); + uint_t len; + + if (slen > maxsize) + return FALSE; + + len = slen; + + if (!xdrmem_enc_uint(xdrs, &len)) + return FALSE; + + return xdrmem_enc_bytes(xdrs, *sp, len); +} + +static bool_t +xdr_dec_string(XDR *xdrs, char **sp, const uint_t maxsize) +{ + uint_t size; + bool_t alloc = FALSE; + + if (!xdrmem_dec_uint(xdrs, &size)) + return FALSE; + + if (size > maxsize || size > UINT_MAX - 1) + return FALSE; + + /* + * Solaris man page: "If *sp is NULL when decoding, xdr_string() + * allocates memory and *sp points to it". + */ + if (*sp == NULL) { + BUILD_BUG_ON(sizeof(uint_t) > sizeof(size_t)); + + *sp = kmem_alloc(size + 1, KM_NOSLEEP); + if (*sp == NULL) + return FALSE; + + alloc = TRUE; + } + + if (!xdrmem_dec_bytes(xdrs, *sp, size)) + goto fail; + + if (memchr(*sp, 0, size) != NULL) + goto fail; + + (*sp)[size] = '\0'; + + return TRUE; + +fail: + if (alloc) + kmem_free(*sp, size + 1); + + return FALSE; +} + +static struct xdr_ops xdrmem_encode_ops = { + .xdr_control = xdrmem_control, + .xdr_char = xdrmem_enc_char, + .xdr_u_short = xdrmem_enc_ushort, + .xdr_u_int = xdrmem_enc_uint, + .xdr_u_longlong_t = xdrmem_enc_ulonglong, + .xdr_opaque = xdrmem_enc_bytes, + .xdr_string = xdr_enc_string, + .xdr_array = xdr_enc_array +}; + +static struct xdr_ops xdrmem_decode_ops = { + .xdr_control = xdrmem_control, + .xdr_char = xdrmem_dec_char, + .xdr_u_short = xdrmem_dec_ushort, + .xdr_u_int = xdrmem_dec_uint, + .xdr_u_longlong_t = xdrmem_dec_ulonglong, + .xdr_opaque = xdrmem_dec_bytes, + .xdr_string = xdr_dec_string, + .xdr_array = xdr_dec_array +}; + --- linux-aws-4.15.0.orig/spl/module/spl/spl-zlib.c +++ linux-aws-4.15.0/spl/module/spl/spl-zlib.c @@ -0,0 +1,217 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * z_compress_level/z_uncompress are nearly identical copies of the + * compress2/uncompress functions provided by the official zlib package + * available at http://zlib.net/. The only changes made we to slightly + * adapt the functions called to match the linux kernel implementation + * of zlib. The full zlib license follows: + * + * zlib.h -- interface of the 'zlib' general purpose compression library + * version 1.2.5, April 19th, 2010 + * + * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Jean-loup Gailly + * Mark Adler +\*****************************************************************************/ + + +#include +#include +#include +#include + +static spl_kmem_cache_t *zlib_workspace_cache; + +/* + * A kmem_cache is used for the zlib workspaces to avoid having to vmalloc + * and vfree for every call. Using a kmem_cache also has the advantage + * that improves the odds that the memory used will be local to this cpu. + * To further improve things it might be wise to create a dedicated per-cpu + * workspace for use. This would take some additional care because we then + * must disable preemption around the critical section, and verify that + * zlib_deflate* and zlib_inflate* never internally call schedule(). + */ +static void * +zlib_workspace_alloc(int flags) +{ + return kmem_cache_alloc(zlib_workspace_cache, flags & ~(__GFP_FS)); +} + +static void +zlib_workspace_free(void *workspace) +{ + kmem_cache_free(zlib_workspace_cache, workspace); +} + +/* + * Compresses the source buffer into the destination buffer. The level + * parameter has the same meaning as in deflateInit. sourceLen is the byte + * length of the source buffer. Upon entry, destLen is the total size of the + * destination buffer, which must be at least 0.1% larger than sourceLen plus + * 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + * + * compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + * memory, Z_BUF_ERROR if there was not enough room in the output buffer, + * Z_STREAM_ERROR if the level parameter is invalid. + */ +int +z_compress_level(void *dest, size_t *destLen, const void *source, + size_t sourceLen, int level) +{ + z_stream stream; + int err; + + stream.next_in = (Byte *)source; + stream.avail_in = (uInt)sourceLen; + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + + if ((size_t)stream.avail_out != *destLen) + return Z_BUF_ERROR; + + stream.workspace = zlib_workspace_alloc(KM_SLEEP); + if (!stream.workspace) + return Z_MEM_ERROR; + + err = zlib_deflateInit(&stream, level); + if (err != Z_OK) { + zlib_workspace_free(stream.workspace); + return err; + } + + err = zlib_deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + zlib_deflateEnd(&stream); + zlib_workspace_free(stream.workspace); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = zlib_deflateEnd(&stream); + zlib_workspace_free(stream.workspace); + + return err; +} +EXPORT_SYMBOL(z_compress_level); + +/* + * Decompresses the source buffer into the destination buffer. sourceLen is + * the byte length of the source buffer. Upon entry, destLen is the total + * size of the destination buffer, which must be large enough to hold the + * entire uncompressed data. (The size of the uncompressed data must have + * been saved previously by the compressor and transmitted to the decompressor + * by some mechanism outside the scope of this compression library.) + * Upon exit, destLen is the actual size of the compressed buffer. + * This function can be used to decompress a whole file at once if the + * input file is mmap'ed. + * + * uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + * enough memory, Z_BUF_ERROR if there was not enough room in the output + * buffer, or Z_DATA_ERROR if the input data was corrupted. + */ +int +z_uncompress(void *dest, size_t *destLen, const void *source, size_t sourceLen) +{ + z_stream stream; + int err; + + stream.next_in = (Byte *)source; + stream.avail_in = (uInt)sourceLen; + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + + if ((size_t)stream.avail_out != *destLen) + return Z_BUF_ERROR; + + stream.workspace = zlib_workspace_alloc(KM_SLEEP); + if (!stream.workspace) + return Z_MEM_ERROR; + + err = zlib_inflateInit(&stream); + if (err != Z_OK) { + zlib_workspace_free(stream.workspace); + return err; + } + + err = zlib_inflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + zlib_inflateEnd(&stream); + zlib_workspace_free(stream.workspace); + + if (err == Z_NEED_DICT || + (err == Z_BUF_ERROR && stream.avail_in == 0)) + return Z_DATA_ERROR; + + return err; + } + *destLen = stream.total_out; + + err = zlib_inflateEnd(&stream); + zlib_workspace_free(stream.workspace); + + return err; +} +EXPORT_SYMBOL(z_uncompress); + +int +spl_zlib_init(void) +{ + int size; + + size = MAX(spl_zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL), + zlib_inflate_workspacesize()); + + zlib_workspace_cache = kmem_cache_create( + "spl_zlib_workspace_cache", + size, 0, NULL, NULL, NULL, NULL, NULL, + KMC_VMEM | KMC_NOEMERGENCY); + if (!zlib_workspace_cache) + return (1); + + return (0); +} + +void +spl_zlib_fini(void) +{ + kmem_cache_destroy(zlib_workspace_cache); + zlib_workspace_cache = NULL; +} --- linux-aws-4.15.0.orig/spl/module/splat/Makefile.in +++ linux-aws-4.15.0/spl/module/splat/Makefile.in @@ -0,0 +1,28 @@ +# Makefile.in for splat kernel module + +src = @abs_top_srcdir@/module/splat +obj = @abs_builddir@ + +MODULE := splat +EXTRA_CFLAGS = $(SPL_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +# Solaris Porting LAyer Tests +obj-$(CONFIG_SPL) := $(MODULE).o + +$(MODULE)-objs += splat-ctl.o +$(MODULE)-objs += splat-kmem.o +$(MODULE)-objs += splat-taskq.o +$(MODULE)-objs += splat-random.o +$(MODULE)-objs += splat-mutex.o +$(MODULE)-objs += splat-condvar.o +$(MODULE)-objs += splat-thread.o +$(MODULE)-objs += splat-rwlock.o +$(MODULE)-objs += splat-time.o +$(MODULE)-objs += splat-vnode.o +$(MODULE)-objs += splat-kobj.o +$(MODULE)-objs += splat-atomic.o +$(MODULE)-objs += splat-list.o +$(MODULE)-objs += splat-generic.o +$(MODULE)-objs += splat-cred.o +$(MODULE)-objs += splat-zlib.o +$(MODULE)-objs += splat-linux.o --- linux-aws-4.15.0.orig/spl/module/splat/splat-atomic.c +++ linux-aws-4.15.0/spl/module/splat/splat-atomic.c @@ -0,0 +1,233 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Atomic Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_ATOMIC_NAME "atomic" +#define SPLAT_ATOMIC_DESC "Kernel Atomic Tests" + +#define SPLAT_ATOMIC_TEST1_ID 0x0b01 +#define SPLAT_ATOMIC_TEST1_NAME "64-bit" +#define SPLAT_ATOMIC_TEST1_DESC "Validate 64-bit atomic ops" + +#define SPLAT_ATOMIC_TEST_MAGIC 0x43435454UL +#define SPLAT_ATOMIC_INIT_VALUE 10000000UL + +typedef enum { + SPLAT_ATOMIC_INC_64 = 0, + SPLAT_ATOMIC_DEC_64 = 1, + SPLAT_ATOMIC_ADD_64 = 2, + SPLAT_ATOMIC_SUB_64 = 3, + SPLAT_ATOMIC_ADD_64_NV = 4, + SPLAT_ATOMIC_SUB_64_NV = 5, + SPLAT_ATOMIC_COUNT_64 = 6 +} atomic_op_t; + +typedef struct atomic_priv { + unsigned long ap_magic; + struct file *ap_file; + kmutex_t ap_lock; + spl_wait_queue_head_t ap_waitq; + volatile uint64_t ap_atomic; + volatile uint64_t ap_atomic_exited; + atomic_op_t ap_op; + +} atomic_priv_t; + +static void +splat_atomic_work(void *priv) +{ + atomic_priv_t *ap; + atomic_op_t op; + int i; + + ap = (atomic_priv_t *)priv; + ASSERT(ap->ap_magic == SPLAT_ATOMIC_TEST_MAGIC); + + mutex_enter(&ap->ap_lock); + op = ap->ap_op; + wake_up(&ap->ap_waitq); + mutex_exit(&ap->ap_lock); + + splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME, + "Thread %d successfully started: %lu/%lu\n", op, + (long unsigned)ap->ap_atomic, + (long unsigned)ap->ap_atomic_exited); + + for (i = 0; i < SPLAT_ATOMIC_INIT_VALUE / 10; i++) { + + /* Periodically sleep to mix up the ordering */ + if ((i % (SPLAT_ATOMIC_INIT_VALUE / 100)) == 0) { + splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME, + "Thread %d sleeping: %lu/%lu\n", op, + (long unsigned)ap->ap_atomic, + (long unsigned)ap->ap_atomic_exited); + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ / 100); + } + + switch (op) { + case SPLAT_ATOMIC_INC_64: + atomic_inc_64(&ap->ap_atomic); + break; + case SPLAT_ATOMIC_DEC_64: + atomic_dec_64(&ap->ap_atomic); + break; + case SPLAT_ATOMIC_ADD_64: + atomic_add_64(&ap->ap_atomic, 3); + break; + case SPLAT_ATOMIC_SUB_64: + atomic_sub_64(&ap->ap_atomic, 3); + break; + case SPLAT_ATOMIC_ADD_64_NV: + atomic_add_64_nv(&ap->ap_atomic, 5); + break; + case SPLAT_ATOMIC_SUB_64_NV: + atomic_sub_64_nv(&ap->ap_atomic, 5); + break; + default: + PANIC("Undefined op %d\n", op); + } + } + + atomic_inc_64(&ap->ap_atomic_exited); + + splat_vprint(ap->ap_file, SPLAT_ATOMIC_TEST1_NAME, + "Thread %d successfully exited: %lu/%lu\n", op, + (long unsigned)ap->ap_atomic, + (long unsigned)ap->ap_atomic_exited); + + wake_up(&ap->ap_waitq); + thread_exit(); +} + +static int +splat_atomic_test1_cond(atomic_priv_t *ap, int started) +{ + return (ap->ap_atomic_exited == started); +} + +static int +splat_atomic_test1(struct file *file, void *arg) +{ + atomic_priv_t ap; + DEFINE_WAIT(wait); + kthread_t *thr; + int i, rc = 0; + + ap.ap_magic = SPLAT_ATOMIC_TEST_MAGIC; + ap.ap_file = file; + mutex_init(&ap.ap_lock, SPLAT_ATOMIC_TEST1_NAME, MUTEX_DEFAULT, NULL); + init_waitqueue_head(&ap.ap_waitq); + ap.ap_atomic = SPLAT_ATOMIC_INIT_VALUE; + ap.ap_atomic_exited = 0; + + for (i = 0; i < SPLAT_ATOMIC_COUNT_64; i++) { + mutex_enter(&ap.ap_lock); + ap.ap_op = i; + + thr = (kthread_t *)thread_create(NULL, 0, splat_atomic_work, + &ap, 0, &p0, TS_RUN, + defclsyspri); + if (thr == NULL) { + rc = -ESRCH; + mutex_exit(&ap.ap_lock); + break; + } + + /* Prepare to wait, the new thread will wake us once it + * has made a copy of the unique private passed data */ + prepare_to_wait(&ap.ap_waitq, &wait, TASK_UNINTERRUPTIBLE); + mutex_exit(&ap.ap_lock); + schedule(); + } + + wait_event(ap.ap_waitq, splat_atomic_test1_cond(&ap, i)); + + if (rc) { + splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME, "Only started " + "%d/%d test threads\n", i, SPLAT_ATOMIC_COUNT_64); + return rc; + } + + if (ap.ap_atomic != SPLAT_ATOMIC_INIT_VALUE) { + splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME, + "Final value %lu does not match initial value %lu\n", + (long unsigned)ap.ap_atomic, SPLAT_ATOMIC_INIT_VALUE); + return -EINVAL; + } + + splat_vprint(file, SPLAT_ATOMIC_TEST1_NAME, + "Success initial and final values match, %lu == %lu\n", + (long unsigned)ap.ap_atomic, SPLAT_ATOMIC_INIT_VALUE); + + mutex_destroy(&ap.ap_lock); + + return 0; +} + +splat_subsystem_t * +splat_atomic_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_ATOMIC_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_ATOMIC_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_ATOMIC; + + splat_test_init(sub, SPLAT_ATOMIC_TEST1_NAME, SPLAT_ATOMIC_TEST1_DESC, + SPLAT_ATOMIC_TEST1_ID, splat_atomic_test1); + + return sub; +} + +void +splat_atomic_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_ATOMIC_TEST1_ID); + + kfree(sub); +} + +int +splat_atomic_id(void) { + return SPLAT_SUBSYSTEM_ATOMIC; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-condvar.c +++ linux-aws-4.15.0/spl/module/splat/splat-condvar.c @@ -0,0 +1,511 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Condition Variable Tests. +\*****************************************************************************/ + +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_CONDVAR_NAME "condvar" +#define SPLAT_CONDVAR_DESC "Kernel Condition Variable Tests" + +#define SPLAT_CONDVAR_TEST1_ID 0x0501 +#define SPLAT_CONDVAR_TEST1_NAME "signal1" +#define SPLAT_CONDVAR_TEST1_DESC "Wake a single thread, cv_wait()/cv_signal()" + +#define SPLAT_CONDVAR_TEST2_ID 0x0502 +#define SPLAT_CONDVAR_TEST2_NAME "broadcast1" +#define SPLAT_CONDVAR_TEST2_DESC "Wake all threads, cv_wait()/cv_broadcast()" + +#define SPLAT_CONDVAR_TEST3_ID 0x0503 +#define SPLAT_CONDVAR_TEST3_NAME "signal2" +#define SPLAT_CONDVAR_TEST3_DESC "Wake a single thread, cv_wait_timeout()/cv_signal()" + +#define SPLAT_CONDVAR_TEST4_ID 0x0504 +#define SPLAT_CONDVAR_TEST4_NAME "broadcast2" +#define SPLAT_CONDVAR_TEST4_DESC "Wake all threads, cv_wait_timeout()/cv_broadcast()" + +#define SPLAT_CONDVAR_TEST5_ID 0x0505 +#define SPLAT_CONDVAR_TEST5_NAME "timeout" +#define SPLAT_CONDVAR_TEST5_DESC "Timeout thread, cv_wait_timeout()" + +#define SPLAT_CONDVAR_TEST_MAGIC 0x115599DDUL +#define SPLAT_CONDVAR_TEST_NAME "condvar" +#define SPLAT_CONDVAR_TEST_COUNT 8 + +typedef struct condvar_priv { + unsigned long cv_magic; + struct file *cv_file; + kcondvar_t cv_condvar; + kmutex_t cv_mtx; +} condvar_priv_t; + +typedef struct condvar_thr { + const char *ct_name; + condvar_priv_t *ct_cvp; + struct task_struct *ct_thread; + int ct_rc; +} condvar_thr_t; + +int +splat_condvar_test12_thread(void *arg) +{ + condvar_thr_t *ct = (condvar_thr_t *)arg; + condvar_priv_t *cv = ct->ct_cvp; + + ASSERT(cv->cv_magic == SPLAT_CONDVAR_TEST_MAGIC); + + mutex_enter(&cv->cv_mtx); + splat_vprint(cv->cv_file, ct->ct_name, + "%s thread sleeping with %d waiters\n", + ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters)); + cv_wait(&cv->cv_condvar, &cv->cv_mtx); + splat_vprint(cv->cv_file, ct->ct_name, + "%s thread woken %d waiters remain\n", + ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters)); + mutex_exit(&cv->cv_mtx); + + /* wait for main thread reap us */ + while (!kthread_should_stop()) + schedule(); + return 0; +} + +static int +splat_condvar_test1(struct file *file, void *arg) +{ + int i, count = 0, rc = 0; + condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT]; + condvar_priv_t cv; + + cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC; + cv.cv_file = file; + mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL); + cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL); + + /* Create some threads, the exact number isn't important just as + * long as we know how many we managed to create and should expect. */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + ct[i].ct_cvp = &cv; + ct[i].ct_name = SPLAT_CONDVAR_TEST1_NAME; + ct[i].ct_rc = 0; + ct[i].ct_thread = spl_kthread_create(splat_condvar_test12_thread, + &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i); + + if (!IS_ERR(ct[i].ct_thread)) { + wake_up_process(ct[i].ct_thread); + count++; + } + } + + /* Wait until all threads are waiting on the condition variable */ + while (atomic_read(&cv.cv_condvar.cv_waiters) != count) + schedule(); + + /* Wake a single thread at a time, wait until it exits */ + for (i = 1; i <= count; i++) { + cv_signal(&cv.cv_condvar); + + while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i)) + schedule(); + + /* Correct behavior 1 thread woken */ + if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i)) + continue; + + splat_vprint(file, SPLAT_CONDVAR_TEST1_NAME, "Attempted to " + "wake %d thread but work %d threads woke\n", + 1, count - atomic_read(&cv.cv_condvar.cv_waiters)); + rc = -EINVAL; + break; + } + + if (!rc) + splat_vprint(file, SPLAT_CONDVAR_TEST1_NAME, "Correctly woke " + "%d sleeping threads %d at a time\n", count, 1); + + /* Wait until that last nutex is dropped */ + while (mutex_owner(&cv.cv_mtx)) + schedule(); + + /* Wake everything for the failure case */ + cv_broadcast(&cv.cv_condvar); + cv_destroy(&cv.cv_condvar); + + /* wait for threads to exit */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + if (!IS_ERR(ct[i].ct_thread)) + kthread_stop(ct[i].ct_thread); + } + mutex_destroy(&cv.cv_mtx); + + return rc; +} + +static int +splat_condvar_test2(struct file *file, void *arg) +{ + int i, count = 0, rc = 0; + condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT]; + condvar_priv_t cv; + + cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC; + cv.cv_file = file; + mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL); + cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL); + + /* Create some threads, the exact number isn't important just as + * long as we know how many we managed to create and should expect. */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + ct[i].ct_cvp = &cv; + ct[i].ct_name = SPLAT_CONDVAR_TEST2_NAME; + ct[i].ct_rc = 0; + ct[i].ct_thread = spl_kthread_create(splat_condvar_test12_thread, + &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i); + + if (!IS_ERR(ct[i].ct_thread)) { + wake_up_process(ct[i].ct_thread); + count++; + } + } + + /* Wait until all threads are waiting on the condition variable */ + while (atomic_read(&cv.cv_condvar.cv_waiters) != count) + schedule(); + + /* Wake all threads waiting on the condition variable */ + cv_broadcast(&cv.cv_condvar); + + /* Wait until all threads have exited */ + while ((atomic_read(&cv.cv_condvar.cv_waiters) > 0) || mutex_owner(&cv.cv_mtx)) + schedule(); + + splat_vprint(file, SPLAT_CONDVAR_TEST2_NAME, "Correctly woke all " + "%d sleeping threads at once\n", count); + + /* Wake everything for the failure case */ + cv_destroy(&cv.cv_condvar); + + /* wait for threads to exit */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + if (!IS_ERR(ct[i].ct_thread)) + kthread_stop(ct[i].ct_thread); + } + mutex_destroy(&cv.cv_mtx); + + return rc; +} + +int +splat_condvar_test34_thread(void *arg) +{ + condvar_thr_t *ct = (condvar_thr_t *)arg; + condvar_priv_t *cv = ct->ct_cvp; + clock_t rc; + + ASSERT(cv->cv_magic == SPLAT_CONDVAR_TEST_MAGIC); + + mutex_enter(&cv->cv_mtx); + splat_vprint(cv->cv_file, ct->ct_name, + "%s thread sleeping with %d waiters\n", + ct->ct_thread->comm, atomic_read(&cv->cv_condvar.cv_waiters)); + + /* Sleep no longer than 3 seconds, for this test we should + * actually never sleep that long without being woken up. */ + rc = cv_timedwait(&cv->cv_condvar, &cv->cv_mtx, lbolt + HZ * 3); + if (rc == -1) { + ct->ct_rc = -ETIMEDOUT; + splat_vprint(cv->cv_file, ct->ct_name, "%s thread timed out, " + "should have been woken\n", ct->ct_thread->comm); + } else { + splat_vprint(cv->cv_file, ct->ct_name, + "%s thread woken %d waiters remain\n", + ct->ct_thread->comm, + atomic_read(&cv->cv_condvar.cv_waiters)); + } + + mutex_exit(&cv->cv_mtx); + + /* wait for main thread reap us */ + while (!kthread_should_stop()) + schedule(); + return 0; +} + +static int +splat_condvar_test3(struct file *file, void *arg) +{ + int i, count = 0, rc = 0; + condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT]; + condvar_priv_t cv; + + cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC; + cv.cv_file = file; + mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL); + cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL); + + /* Create some threads, the exact number isn't important just as + * long as we know how many we managed to create and should expect. */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + ct[i].ct_cvp = &cv; + ct[i].ct_name = SPLAT_CONDVAR_TEST3_NAME; + ct[i].ct_rc = 0; + ct[i].ct_thread = spl_kthread_create(splat_condvar_test34_thread, + &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i); + + if (!IS_ERR(ct[i].ct_thread)) { + wake_up_process(ct[i].ct_thread); + count++; + } + } + + /* Wait until all threads are waiting on the condition variable */ + while (atomic_read(&cv.cv_condvar.cv_waiters) != count) + schedule(); + + /* Wake a single thread at a time, wait until it exits */ + for (i = 1; i <= count; i++) { + cv_signal(&cv.cv_condvar); + + while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i)) + schedule(); + + /* Correct behavior 1 thread woken */ + if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i)) + continue; + + splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Attempted to " + "wake %d thread but work %d threads woke\n", + 1, count - atomic_read(&cv.cv_condvar.cv_waiters)); + rc = -EINVAL; + break; + } + + /* Validate no waiting thread timed out early */ + for (i = 0; i < count; i++) + if (ct[i].ct_rc) + rc = ct[i].ct_rc; + + if (!rc) + splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Correctly woke " + "%d sleeping threads %d at a time\n", count, 1); + + /* Wait until that last nutex is dropped */ + while (mutex_owner(&cv.cv_mtx)) + schedule(); + + /* Wake everything for the failure case */ + cv_broadcast(&cv.cv_condvar); + cv_destroy(&cv.cv_condvar); + + /* wait for threads to exit */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + if (!IS_ERR(ct[i].ct_thread)) + kthread_stop(ct[i].ct_thread); + } + mutex_destroy(&cv.cv_mtx); + + return rc; +} + +static int +splat_condvar_test4(struct file *file, void *arg) +{ + int i, count = 0, rc = 0; + condvar_thr_t ct[SPLAT_CONDVAR_TEST_COUNT]; + condvar_priv_t cv; + + cv.cv_magic = SPLAT_CONDVAR_TEST_MAGIC; + cv.cv_file = file; + mutex_init(&cv.cv_mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL); + cv_init(&cv.cv_condvar, NULL, CV_DEFAULT, NULL); + + /* Create some threads, the exact number isn't important just as + * long as we know how many we managed to create and should expect. */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + ct[i].ct_cvp = &cv; + ct[i].ct_name = SPLAT_CONDVAR_TEST3_NAME; + ct[i].ct_rc = 0; + ct[i].ct_thread = spl_kthread_create(splat_condvar_test34_thread, + &ct[i], "%s/%d", SPLAT_CONDVAR_TEST_NAME, i); + + if (!IS_ERR(ct[i].ct_thread)) { + wake_up_process(ct[i].ct_thread); + count++; + } + } + + /* Wait until all threads are waiting on the condition variable */ + while (atomic_read(&cv.cv_condvar.cv_waiters) != count) + schedule(); + + /* Wake a single thread at a time, wait until it exits */ + for (i = 1; i <= count; i++) { + cv_signal(&cv.cv_condvar); + + while (atomic_read(&cv.cv_condvar.cv_waiters) > (count - i)) + schedule(); + + /* Correct behavior 1 thread woken */ + if (atomic_read(&cv.cv_condvar.cv_waiters) == (count - i)) + continue; + + splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Attempted to " + "wake %d thread but work %d threads woke\n", + 1, count - atomic_read(&cv.cv_condvar.cv_waiters)); + rc = -EINVAL; + break; + } + + /* Validate no waiting thread timed out early */ + for (i = 0; i < count; i++) + if (ct[i].ct_rc) + rc = ct[i].ct_rc; + + if (!rc) + splat_vprint(file, SPLAT_CONDVAR_TEST3_NAME, "Correctly woke " + "%d sleeping threads %d at a time\n", count, 1); + + /* Wait until that last nutex is dropped */ + while (mutex_owner(&cv.cv_mtx)) + schedule(); + + /* Wake everything for the failure case */ + cv_broadcast(&cv.cv_condvar); + cv_destroy(&cv.cv_condvar); + + /* wait for threads to exit */ + for (i = 0; i < SPLAT_CONDVAR_TEST_COUNT; i++) { + if (!IS_ERR(ct[i].ct_thread)) + kthread_stop(ct[i].ct_thread); + } + mutex_destroy(&cv.cv_mtx); + + return rc; +} + +static int +splat_condvar_test5(struct file *file, void *arg) +{ + kcondvar_t condvar; + kmutex_t mtx; + clock_t time_left, time_before, time_after, time_delta; + uint64_t whole_delta; + uint32_t remain_delta; + int rc = 0; + + mutex_init(&mtx, SPLAT_CONDVAR_TEST_NAME, MUTEX_DEFAULT, NULL); + cv_init(&condvar, NULL, CV_DEFAULT, NULL); + + splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME, "Thread going to sleep for " + "%d second and expecting to be woken by timeout\n", 1); + + /* Allow a 1 second timeout, plenty long to validate correctness. */ + time_before = lbolt; + mutex_enter(&mtx); + time_left = cv_timedwait(&condvar, &mtx, lbolt + HZ); + mutex_exit(&mtx); + time_after = lbolt; + time_delta = time_after - time_before; /* XXX - Handle jiffie wrap */ + whole_delta = time_delta; + remain_delta = do_div(whole_delta, HZ); + + if (time_left == -1) { + if (time_delta >= HZ) { + splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME, + "Thread correctly timed out and was asleep " + "for %d.%d seconds (%d second min)\n", + (int)whole_delta, (int)remain_delta, 1); + } else { + splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME, + "Thread correctly timed out but was only " + "asleep for %d.%d seconds (%d second " + "min)\n", (int)whole_delta, + (int)remain_delta, 1); + rc = -ETIMEDOUT; + } + } else { + splat_vprint(file, SPLAT_CONDVAR_TEST5_NAME, + "Thread exited after only %d.%d seconds, it " + "did not hit the %d second timeout\n", + (int)whole_delta, (int)remain_delta, 1); + rc = -ETIMEDOUT; + } + + cv_destroy(&condvar); + mutex_destroy(&mtx); + + return rc; +} + +splat_subsystem_t * +splat_condvar_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_CONDVAR_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_CONDVAR_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_CONDVAR; + + splat_test_init(sub, SPLAT_CONDVAR_TEST1_NAME, SPLAT_CONDVAR_TEST1_DESC, + SPLAT_CONDVAR_TEST1_ID, splat_condvar_test1); + splat_test_init(sub, SPLAT_CONDVAR_TEST2_NAME, SPLAT_CONDVAR_TEST2_DESC, + SPLAT_CONDVAR_TEST2_ID, splat_condvar_test2); + splat_test_init(sub, SPLAT_CONDVAR_TEST3_NAME, SPLAT_CONDVAR_TEST3_DESC, + SPLAT_CONDVAR_TEST3_ID, splat_condvar_test3); + splat_test_init(sub, SPLAT_CONDVAR_TEST4_NAME, SPLAT_CONDVAR_TEST4_DESC, + SPLAT_CONDVAR_TEST4_ID, splat_condvar_test4); + splat_test_init(sub, SPLAT_CONDVAR_TEST5_NAME, SPLAT_CONDVAR_TEST5_DESC, + SPLAT_CONDVAR_TEST5_ID, splat_condvar_test5); + + return sub; +} + +void +splat_condvar_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_CONDVAR_TEST5_ID); + splat_test_fini(sub, SPLAT_CONDVAR_TEST4_ID); + splat_test_fini(sub, SPLAT_CONDVAR_TEST3_ID); + splat_test_fini(sub, SPLAT_CONDVAR_TEST2_ID); + splat_test_fini(sub, SPLAT_CONDVAR_TEST1_ID); + + kfree(sub); +} + +int +splat_condvar_id(void) { + return SPLAT_SUBSYSTEM_CONDVAR; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-cred.c +++ linux-aws-4.15.0/spl/module/splat/splat-cred.c @@ -0,0 +1,299 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Credential Tests. +\*****************************************************************************/ + +#include +#include +#include "splat-internal.h" + +#define SPLAT_CRED_NAME "cred" +#define SPLAT_CRED_DESC "Kernel Cred Tests" + +#define SPLAT_CRED_TEST1_ID 0x0e01 +#define SPLAT_CRED_TEST1_NAME "cred" +#define SPLAT_CRED_TEST1_DESC "Task Credential Test" + +#define SPLAT_CRED_TEST2_ID 0x0e02 +#define SPLAT_CRED_TEST2_NAME "kcred" +#define SPLAT_CRED_TEST2_DESC "Kernel Credential Test" + +#define SPLAT_CRED_TEST3_ID 0x0e03 +#define SPLAT_CRED_TEST3_NAME "groupmember" +#define SPLAT_CRED_TEST3_DESC "Group Member Test" + +#define GROUP_STR_SIZE 128 +#define GROUP_STR_REDZONE 16 + +static int +splat_cred_test1(struct file *file, void *arg) +{ + char str[GROUP_STR_SIZE]; + uid_t uid, ruid, suid; + gid_t gid, rgid, sgid, *groups; + int ngroups, i, count = 0; + cred_t *cr = CRED(); + + uid = crgetuid(cr); + ruid = crgetruid(cr); + suid = crgetsuid(cr); + + gid = crgetgid(cr); + rgid = crgetrgid(cr); + sgid = crgetsgid(cr); + + ngroups = crgetngroups(cr); + groups = crgetgroups(cr); + + memset(str, 0, GROUP_STR_SIZE); + for (i = 0; i < ngroups; i++) { + count += sprintf(str + count, "%d ", groups[i]); + + if (count > (GROUP_STR_SIZE - GROUP_STR_REDZONE)) { + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "Failed too many group entries for temp " + "buffer: %d, %s\n", ngroups, str); + return -ENOSPC; + } + } + + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "uid: %d ruid: %d suid: %d " + "gid: %d rgid: %d sgid: %d\n", + uid, ruid, suid, gid, rgid, sgid); + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "ngroups: %d groups: %s\n", ngroups, str); + + if (uid || ruid || suid || gid || rgid || sgid) { + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "Failed expected all uids+gids to be %d\n", 0); + return -EIDRM; + } + + if (ngroups > NGROUPS_MAX) { + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "Failed ngroups must not exceed NGROUPS_MAX: " + "%d > %d\n", ngroups, NGROUPS_MAX); + return -EIDRM; + } + + splat_vprint(file, SPLAT_CRED_TEST1_NAME, + "Success sane CRED(): %d\n", 0); + + return 0; +} /* splat_cred_test1() */ + +static int +splat_cred_test2(struct file *file, void *arg) +{ + char str[GROUP_STR_SIZE]; + uid_t uid, ruid, suid; + gid_t gid, rgid, sgid, *groups; + int ngroups, i, count = 0; + + crhold(kcred); + + uid = crgetuid(kcred); + ruid = crgetruid(kcred); + suid = crgetsuid(kcred); + + gid = crgetgid(kcred); + rgid = crgetrgid(kcred); + sgid = crgetsgid(kcred); + + ngroups = crgetngroups(kcred); + groups = crgetgroups(kcred); + + memset(str, 0, GROUP_STR_SIZE); + for (i = 0; i < ngroups; i++) { + count += sprintf(str + count, "%d ", groups[i]); + + if (count > (GROUP_STR_SIZE - GROUP_STR_REDZONE)) { + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "Failed too many group entries for temp " + "buffer: %d, %s\n", ngroups, str); + crfree(kcred); + return -ENOSPC; + } + } + + crfree(kcred); + + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "uid: %d ruid: %d suid: %d " + "gid: %d rgid: %d sgid: %d\n", + uid, ruid, suid, gid, rgid, sgid); + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "ngroups: %d groups: %s\n", ngroups, str); + + if (uid || ruid || suid || gid || rgid || sgid) { + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "Failed expected all uids+gids to be %d\n", 0); + return -EIDRM; + } + + if (ngroups > NGROUPS_MAX) { + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "Failed ngroups must not exceed NGROUPS_MAX: " + "%d > %d\n", ngroups, NGROUPS_MAX); + return -EIDRM; + } + + splat_vprint(file, SPLAT_CRED_TEST2_NAME, + "Success sane kcred: %d\n", 0); + + return 0; +} /* splat_cred_test2() */ + +#define SPLAT_NGROUPS 32 +/* + * Verify the groupmember() works correctly by constructing an interesting + * CRED() and checking that the expected gids are part of it. + */ +static int +splat_cred_test3(struct file *file, void *arg) +{ + gid_t known_gid, missing_gid, tmp_gid; + unsigned char rnd; + struct group_info *gi; + int i, rc; + + get_random_bytes((void *)&rnd, 1); + known_gid = (rnd > 0) ? rnd : 1; + missing_gid = 0; + + /* + * Create an interesting known set of gids for test purposes. The + * gids are pseudo randomly selected are will be in the range of + * 1:(NGROUPS_MAX-1). Gid 0 is explicitly avoided so we can reliably + * test for its absence in the test cases. + */ + gi = groups_alloc(SPLAT_NGROUPS); + if (gi == NULL) { + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed create " + "group_info for known gids: %d\n", -ENOMEM); + rc = -ENOMEM; + goto show_groups; + } + + for (i = 0, tmp_gid = known_gid; i < SPLAT_NGROUPS; i++) { + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Adding gid %d " + "to current CRED() (%d/%d)\n", tmp_gid, i, gi->ngroups); +#ifdef HAVE_KUIDGID_T + GROUP_AT(gi, i) = make_kgid(current_user_ns(), tmp_gid); +#else + GROUP_AT(gi, i) = tmp_gid; +#endif /* HAVE_KUIDGID_T */ + tmp_gid = ((tmp_gid * 17) % (NGROUPS_MAX - 1)) + 1; + } + + /* Set the new groups in the CRED() and release our reference. */ + rc = set_current_groups(gi); + put_group_info(gi); + + if (rc) { + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed to add " + "gid %d to current group: %d\n", known_gid, rc); + goto show_groups; + } + + /* Verify groupmember() finds the known_gid in the CRED() */ + rc = groupmember(known_gid, CRED()); + if (!rc) { + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed to find " + "known gid %d in CRED()'s groups.\n", known_gid); + rc = -EIDRM; + goto show_groups; + } + + /* Verify groupmember() does NOT finds the missing gid in the CRED() */ + rc = groupmember(missing_gid, CRED()); + if (rc) { + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Failed missing " + "gid %d was found in CRED()'s groups.\n", missing_gid); + rc = -EIDRM; + goto show_groups; + } + + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "Success groupmember() " + "correctly detects expected gids in CRED(): %d\n", rc); + +show_groups: + if (rc) { + int i, grps = crgetngroups(CRED()); + + splat_vprint(file, SPLAT_CRED_TEST3_NAME, "%d groups: ", grps); + for (i = 0; i < grps; i++) + splat_print(file, "%d ", crgetgroups(CRED())[i]); + splat_print(file, "%s", "\n"); + } + + + return (rc); +} /* splat_cred_test3() */ + +splat_subsystem_t * +splat_cred_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_CRED_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_CRED_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_CRED; + + splat_test_init(sub, SPLAT_CRED_TEST1_NAME, SPLAT_CRED_TEST1_DESC, + SPLAT_CRED_TEST1_ID, splat_cred_test1); + splat_test_init(sub, SPLAT_CRED_TEST2_NAME, SPLAT_CRED_TEST2_DESC, + SPLAT_CRED_TEST2_ID, splat_cred_test2); + splat_test_init(sub, SPLAT_CRED_TEST3_NAME, SPLAT_CRED_TEST3_DESC, + SPLAT_CRED_TEST3_ID, splat_cred_test3); + + return sub; +} /* splat_cred_init() */ + +void +splat_cred_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_CRED_TEST3_ID); + splat_test_fini(sub, SPLAT_CRED_TEST2_ID); + splat_test_fini(sub, SPLAT_CRED_TEST1_ID); + + kfree(sub); +} /* splat_cred_fini() */ + +int +splat_cred_id(void) +{ + return SPLAT_SUBSYSTEM_CRED; +} /* splat_cred_id() */ --- linux-aws-4.15.0.orig/spl/module/splat/splat-ctl.c +++ linux-aws-4.15.0/spl/module/splat/splat-ctl.c @@ -0,0 +1,753 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Test Control Interface. + * + * The 'splat' (Solaris Porting LAyer Tests) module is designed as a + * framework which runs various in kernel regression tests to validate + * the SPL primitives honor the Solaris ABI. + * + * The splat module is constructed of various splat_* source files each + * of which contain regression tests for a particular subsystem. For + * example, the splat_kmem.c file contains all the tests for validating + * the kmem interfaces have been implemented correctly. When the splat + * module is loaded splat_*_init() will be called for each subsystems + * tests. It is the responsibility of splat_*_init() to register all + * the tests for this subsystem using the splat_test_init(). + * Similarly splat_*_fini() is called when the splat module is removed + * and is responsible for unregistering its tests via the splat_test_fini. + * Once a test is registered it can then be run with an ioctl() + * call which specifies the subsystem and test to be run. The provided + * splat command line tool can be used to display all available + * subsystems and tests. It can also be used to run the full suite + * of regression tests or particular tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "splat-internal.h" + +static struct list_head splat_module_list; +static spinlock_t splat_module_lock; + +static int +splat_open(struct inode *inode, struct file *file) +{ + splat_info_t *info; + + info = (splat_info_t *)kmalloc(sizeof(*info), GFP_KERNEL); + if (info == NULL) + return -ENOMEM; + + mutex_init(&info->info_lock, SPLAT_NAME, MUTEX_DEFAULT, NULL); + info->info_size = SPLAT_INFO_BUFFER_SIZE; + info->info_buffer = (char *)vmalloc(SPLAT_INFO_BUFFER_SIZE); + if (info->info_buffer == NULL) { + kfree(info); + return -ENOMEM; + } + memset(info->info_buffer, 0, info->info_size); + + info->info_head = info->info_buffer; + file->private_data = (void *)info; + + splat_print(file, "%s\n", spl_version); + + return 0; +} + +static int +splat_release(struct inode *inode, struct file *file) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_destroy(&info->info_lock); + vfree(info->info_buffer); + kfree(info); + + return 0; +} + +static int +splat_buffer_clear(struct file *file, splat_cfg_t *kcfg, unsigned long arg) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_enter(&info->info_lock); + memset(info->info_buffer, 0, info->info_size); + info->info_head = info->info_buffer; + mutex_exit(&info->info_lock); + + return 0; +} + +static int +splat_buffer_size(struct file *file, splat_cfg_t *kcfg, unsigned long arg) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + char *buf; + int min, size, rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_enter(&info->info_lock); + if (kcfg->cfg_arg1 > 0) { + + size = kcfg->cfg_arg1; + buf = (char *)vmalloc(size); + if (buf == NULL) { + rc = -ENOMEM; + goto out; + } + + /* Zero fill and truncate contents when coping buffer */ + min = ((size < info->info_size) ? size : info->info_size); + memset(buf, 0, size); + memcpy(buf, info->info_buffer, min); + vfree(info->info_buffer); + info->info_size = size; + info->info_buffer = buf; + info->info_head = info->info_buffer; + } + + kcfg->cfg_rc1 = info->info_size; + + if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg))) + rc = -EFAULT; +out: + mutex_exit(&info->info_lock); + + return rc; +} + + +static splat_subsystem_t * +splat_subsystem_find(int id) { + splat_subsystem_t *sub; + + spin_lock(&splat_module_lock); + list_for_each_entry(sub, &splat_module_list, subsystem_list) { + if (id == sub->desc.id) { + spin_unlock(&splat_module_lock); + return sub; + } + } + spin_unlock(&splat_module_lock); + + return NULL; +} + +static int +splat_subsystem_count(splat_cfg_t *kcfg, unsigned long arg) +{ + splat_subsystem_t *sub; + int i = 0; + + spin_lock(&splat_module_lock); + list_for_each_entry(sub, &splat_module_list, subsystem_list) + i++; + + spin_unlock(&splat_module_lock); + kcfg->cfg_rc1 = i; + + if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg))) + return -EFAULT; + + return 0; +} + +static int +splat_subsystem_list(splat_cfg_t *kcfg, unsigned long arg) +{ + splat_subsystem_t *sub; + splat_cfg_t *tmp; + int size, i = 0; + + /* Structure will be sized large enough for N subsystem entries + * which is passed in by the caller. On exit the number of + * entries filled in with valid subsystems will be stored in + * cfg_rc1. If the caller does not provide enough entries + * for all subsystems we will truncate the list to avoid overrun. + */ + size = sizeof(*tmp) + kcfg->cfg_data.splat_subsystems.size * + sizeof(splat_user_t); + tmp = kmalloc(size, GFP_KERNEL); + if (tmp == NULL) + return -ENOMEM; + + /* Local 'tmp' is used as the structure copied back to user space */ + memset(tmp, 0, size); + memcpy(tmp, kcfg, sizeof(*kcfg)); + + spin_lock(&splat_module_lock); + list_for_each_entry(sub, &splat_module_list, subsystem_list) { + strncpy(tmp->cfg_data.splat_subsystems.descs[i].name, + sub->desc.name, SPLAT_NAME_SIZE); + strncpy(tmp->cfg_data.splat_subsystems.descs[i].desc, + sub->desc.desc, SPLAT_DESC_SIZE); + tmp->cfg_data.splat_subsystems.descs[i].id = sub->desc.id; + + /* Truncate list if we are about to overrun alloc'ed memory */ + if ((i++) == kcfg->cfg_data.splat_subsystems.size) + break; + } + spin_unlock(&splat_module_lock); + tmp->cfg_rc1 = i; + + if (copy_to_user((struct splat_cfg_t __user *)arg, tmp, size)) { + kfree(tmp); + return -EFAULT; + } + + kfree(tmp); + return 0; +} + +static int +splat_test_count(splat_cfg_t *kcfg, unsigned long arg) +{ + splat_subsystem_t *sub; + splat_test_t *test; + int i = 0; + + /* Subsystem ID passed as arg1 */ + sub = splat_subsystem_find(kcfg->cfg_arg1); + if (sub == NULL) + return -EINVAL; + + spin_lock(&(sub->test_lock)); + list_for_each_entry(test, &(sub->test_list), test_list) + i++; + + spin_unlock(&(sub->test_lock)); + kcfg->cfg_rc1 = i; + + if (copy_to_user((struct splat_cfg_t __user *)arg, kcfg, sizeof(*kcfg))) + return -EFAULT; + + return 0; +} + +static int +splat_test_list(splat_cfg_t *kcfg, unsigned long arg) +{ + splat_subsystem_t *sub; + splat_test_t *test; + splat_cfg_t *tmp; + int size, i = 0; + + /* Subsystem ID passed as arg1 */ + sub = splat_subsystem_find(kcfg->cfg_arg1); + if (sub == NULL) + return -EINVAL; + + /* Structure will be sized large enough for N test entries + * which is passed in by the caller. On exit the number of + * entries filled in with valid tests will be stored in + * cfg_rc1. If the caller does not provide enough entries + * for all tests we will truncate the list to avoid overrun. + */ + size = sizeof(*tmp)+kcfg->cfg_data.splat_tests.size*sizeof(splat_user_t); + tmp = kmalloc(size, GFP_KERNEL); + if (tmp == NULL) + return -ENOMEM; + + /* Local 'tmp' is used as the structure copied back to user space */ + memset(tmp, 0, size); + memcpy(tmp, kcfg, sizeof(*kcfg)); + + spin_lock(&(sub->test_lock)); + list_for_each_entry(test, &(sub->test_list), test_list) { + strncpy(tmp->cfg_data.splat_tests.descs[i].name, + test->desc.name, SPLAT_NAME_SIZE); + strncpy(tmp->cfg_data.splat_tests.descs[i].desc, + test->desc.desc, SPLAT_DESC_SIZE); + tmp->cfg_data.splat_tests.descs[i].id = test->desc.id; + + /* Truncate list if we are about to overrun alloc'ed memory */ + if ((i++) == kcfg->cfg_data.splat_tests.size) + break; + } + spin_unlock(&(sub->test_lock)); + tmp->cfg_rc1 = i; + + if (copy_to_user((struct splat_cfg_t __user *)arg, tmp, size)) { + kfree(tmp); + return -EFAULT; + } + + kfree(tmp); + return 0; +} + +static int +splat_validate(struct file *file, splat_subsystem_t *sub, int cmd, void *arg) +{ + splat_test_t *test; + + spin_lock(&(sub->test_lock)); + list_for_each_entry(test, &(sub->test_list), test_list) { + if (test->desc.id == cmd) { + spin_unlock(&(sub->test_lock)); + return test->test(file, arg); + } + } + spin_unlock(&(sub->test_lock)); + + return -EINVAL; +} + +static int +splat_ioctl_cfg(struct file *file, unsigned int cmd, unsigned long arg) +{ + splat_cfg_t kcfg; + int rc = 0; + + /* User and kernel space agree about arg size */ + if (_IOC_SIZE(cmd) != sizeof(kcfg)) + return -EBADMSG; + + if (copy_from_user(&kcfg, (splat_cfg_t *)arg, sizeof(kcfg))) + return -EFAULT; + + if (kcfg.cfg_magic != SPLAT_CFG_MAGIC) { + splat_print(file, "Bad config magic 0x%x != 0x%x\n", + kcfg.cfg_magic, SPLAT_CFG_MAGIC); + return -EINVAL; + } + + switch (kcfg.cfg_cmd) { + case SPLAT_CFG_BUFFER_CLEAR: + /* cfg_arg1 - Unused + * cfg_rc1 - Unused + */ + rc = splat_buffer_clear(file, &kcfg, arg); + break; + case SPLAT_CFG_BUFFER_SIZE: + /* cfg_arg1 - 0 - query size; >0 resize + * cfg_rc1 - Set to current buffer size + */ + rc = splat_buffer_size(file, &kcfg, arg); + break; + case SPLAT_CFG_SUBSYSTEM_COUNT: + /* cfg_arg1 - Unused + * cfg_rc1 - Set to number of subsystems + */ + rc = splat_subsystem_count(&kcfg, arg); + break; + case SPLAT_CFG_SUBSYSTEM_LIST: + /* cfg_arg1 - Unused + * cfg_rc1 - Set to number of subsystems + * cfg_data.splat_subsystems - Set with subsystems + */ + rc = splat_subsystem_list(&kcfg, arg); + break; + case SPLAT_CFG_TEST_COUNT: + /* cfg_arg1 - Set to a target subsystem + * cfg_rc1 - Set to number of tests + */ + rc = splat_test_count(&kcfg, arg); + break; + case SPLAT_CFG_TEST_LIST: + /* cfg_arg1 - Set to a target subsystem + * cfg_rc1 - Set to number of tests + * cfg_data.splat_subsystems - Populated with tests + */ + rc = splat_test_list(&kcfg, arg); + break; + default: + splat_print(file, "Bad config command %d\n", + kcfg.cfg_cmd); + rc = -EINVAL; + break; + } + + return rc; +} + +static int +splat_ioctl_cmd(struct file *file, unsigned int cmd, unsigned long arg) +{ + splat_subsystem_t *sub; + splat_cmd_t kcmd; + int rc = -EINVAL; + void *data = NULL; + + /* User and kernel space agree about arg size */ + if (_IOC_SIZE(cmd) != sizeof(kcmd)) + return -EBADMSG; + + if (copy_from_user(&kcmd, (splat_cfg_t *)arg, sizeof(kcmd))) + return -EFAULT; + + if (kcmd.cmd_magic != SPLAT_CMD_MAGIC) { + splat_print(file, "Bad command magic 0x%x != 0x%x\n", + kcmd.cmd_magic, SPLAT_CFG_MAGIC); + return -EINVAL; + } + + /* Allocate memory for any opaque data the caller needed to pass on */ + if (kcmd.cmd_data_size > 0) { + data = (void *)kmalloc(kcmd.cmd_data_size, GFP_KERNEL); + if (data == NULL) + return -ENOMEM; + + if (copy_from_user(data, (void *)(arg + offsetof(splat_cmd_t, + cmd_data_str)), kcmd.cmd_data_size)) { + kfree(data); + return -EFAULT; + } + } + + sub = splat_subsystem_find(kcmd.cmd_subsystem); + if (sub != NULL) + rc = splat_validate(file, sub, kcmd.cmd_test, data); + else + rc = -EINVAL; + + if (data != NULL) + kfree(data); + + return rc; +} + +static long +splat_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + int rc = 0; + + /* Ignore tty ioctls */ + if ((cmd & 0xffffff00) == ((int)'T') << 8) + return -ENOTTY; + + switch (cmd) { + case SPLAT_CFG: + rc = splat_ioctl_cfg(file, cmd, arg); + break; + case SPLAT_CMD: + rc = splat_ioctl_cmd(file, cmd, arg); + break; + default: + splat_print(file, "Bad ioctl command %d\n", cmd); + rc = -EINVAL; + break; + } + + return rc; +} + +#ifdef CONFIG_COMPAT +/* Compatibility handler for ioctls from 32-bit ELF binaries */ +static long +splat_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + return splat_unlocked_ioctl(file, cmd, arg); +} +#endif /* CONFIG_COMPAT */ + +/* I'm not sure why you would want to write in to this buffer from + * user space since its principle use is to pass test status info + * back to the user space, but I don't see any reason to prevent it. + */ +static ssize_t splat_write(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + int rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_enter(&info->info_lock); + + /* Write beyond EOF */ + if (*ppos >= info->info_size) { + rc = -EFBIG; + goto out; + } + + /* Resize count if beyond EOF */ + if (*ppos + count > info->info_size) + count = info->info_size - *ppos; + + if (copy_from_user(info->info_buffer, buf, count)) { + rc = -EFAULT; + goto out; + } + + *ppos += count; + rc = count; +out: + mutex_exit(&info->info_lock); + return rc; +} + +static ssize_t splat_read(struct file *file, char __user *buf, + size_t count, loff_t *ppos) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + int rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_enter(&info->info_lock); + + /* Read beyond EOF */ + if (*ppos >= info->info_size) + goto out; + + /* Resize count if beyond EOF */ + if (*ppos + count > info->info_size) + count = info->info_size - *ppos; + + if (copy_to_user(buf, info->info_buffer + *ppos, count)) { + rc = -EFAULT; + goto out; + } + + *ppos += count; + rc = count; +out: + mutex_exit(&info->info_lock); + return rc; +} + +static loff_t splat_seek(struct file *file, loff_t offset, int origin) +{ + splat_info_t *info = (splat_info_t *)file->private_data; + int rc = -EINVAL; + + ASSERT(info); + ASSERT(info->info_buffer); + + mutex_enter(&info->info_lock); + + switch (origin) { + case 0: /* SEEK_SET - No-op just do it */ + break; + case 1: /* SEEK_CUR - Seek from current */ + offset = file->f_pos + offset; + break; + case 2: /* SEEK_END - Seek from end */ + offset = info->info_size + offset; + break; + } + + if (offset >= 0) { + file->f_pos = offset; + file->f_version = 0; + rc = offset; + } + + mutex_exit(&info->info_lock); + + return rc; +} + +static struct file_operations splat_fops = { + .owner = THIS_MODULE, + .open = splat_open, + .release = splat_release, + .unlocked_ioctl = splat_unlocked_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = splat_compat_ioctl, +#endif + .read = splat_read, + .write = splat_write, + .llseek = splat_seek, +}; + +static struct miscdevice splat_misc = { + .minor = MISC_DYNAMIC_MINOR, + .name = SPLAT_NAME, + .fops = &splat_fops, +}; + +static void splat_subsystem_init(const char *name, + splat_subsystem_t *(*init)(void)) +{ + splat_subsystem_t *sub; + sub = init(); + if (sub == NULL) { + printk(KERN_ERR "splat: Error initializing: %s\n", name); + return; + } + spin_lock(&splat_module_lock); + list_add_tail(&sub->subsystem_list, &splat_module_list); + spin_unlock(&splat_module_lock); +} + +static void splat_subsystem_fini(const char *name, + int (*id_func)(void), void (*fini)(splat_subsystem_t *)) +{ + splat_subsystem_t *sub, *tmp; + int id, flag = 0; + + id = id_func(); + spin_lock(&splat_module_lock); + list_for_each_entry_safe(sub, tmp, &splat_module_list, subsystem_list) { + if (sub->desc.id == id) { + list_del_init(&sub->subsystem_list); + flag = 1; + break; + } + } + spin_unlock(&splat_module_lock); + if (flag == 0) + printk(KERN_ERR "splat: Error finalizing: %s\n", name); + else + fini(sub); +} + +#define SPLAT_SUBSYSTEM_INIT(type) \ + splat_subsystem_init(#type, splat_##type##_init) +#define SPLAT_SUBSYSTEM_FINI(type) \ + splat_subsystem_fini(#type, splat_##type##_id, splat_##type##_fini) + +void splat_test_init(splat_subsystem_t *sub, const char *name, + const char *desc, unsigned int tid, splat_test_func_t func) +{ + splat_test_t *test; + test = kmalloc(sizeof (splat_test_t), GFP_KERNEL); + if (test == NULL) { + printk(KERN_ERR "splat: Error initializing: %s/%u\n", + name, tid); + return; + } + memset(test, 0, sizeof (splat_test_t)); + strncpy(test->desc.name, name, SPLAT_NAME_SIZE-1); + strncpy(test->desc.desc, desc, SPLAT_DESC_SIZE-1); + test->desc.id = tid; + test->test = func; + INIT_LIST_HEAD(&test->test_list); + spin_lock(&sub->test_lock); + list_add_tail(&test->test_list, &sub->test_list); + spin_unlock(&sub->test_lock); +} + +void splat_test_fini(splat_subsystem_t *sub, unsigned int tid) +{ + splat_test_t *test, *tmp; + int flag = 0; + + spin_lock(&sub->test_lock); + list_for_each_entry_safe(test, tmp, &sub->test_list, test_list) { + if (test->desc.id == tid) { + list_del_init(&test->test_list); + kfree(test); + flag = 1; + break; + } + } + spin_unlock(&sub->test_lock); + + if (flag == 0) + printk(KERN_ERR "splat: Error finalizing: %u\n", tid); +} + +static int __init +splat_init(void) +{ + int error; + + spin_lock_init(&splat_module_lock); + INIT_LIST_HEAD(&splat_module_list); + + SPLAT_SUBSYSTEM_INIT(kmem); + SPLAT_SUBSYSTEM_INIT(taskq); + SPLAT_SUBSYSTEM_INIT(krng); + SPLAT_SUBSYSTEM_INIT(mutex); + SPLAT_SUBSYSTEM_INIT(condvar); + SPLAT_SUBSYSTEM_INIT(thread); + SPLAT_SUBSYSTEM_INIT(rwlock); + SPLAT_SUBSYSTEM_INIT(time); + SPLAT_SUBSYSTEM_INIT(vnode); + SPLAT_SUBSYSTEM_INIT(kobj); + SPLAT_SUBSYSTEM_INIT(atomic); + SPLAT_SUBSYSTEM_INIT(list); + SPLAT_SUBSYSTEM_INIT(generic); + SPLAT_SUBSYSTEM_INIT(cred); + SPLAT_SUBSYSTEM_INIT(zlib); + SPLAT_SUBSYSTEM_INIT(linux); + + error = misc_register(&splat_misc); + if (error) { + printk(KERN_INFO "SPLAT: misc_register() failed %d\n", error); + } else { + printk(KERN_INFO "SPLAT: Loaded module v%s-%s%s\n", + SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); + } + + return (error); +} + +static void __exit +splat_fini(void) +{ + misc_deregister(&splat_misc); + + SPLAT_SUBSYSTEM_FINI(linux); + SPLAT_SUBSYSTEM_FINI(zlib); + SPLAT_SUBSYSTEM_FINI(cred); + SPLAT_SUBSYSTEM_FINI(generic); + SPLAT_SUBSYSTEM_FINI(list); + SPLAT_SUBSYSTEM_FINI(atomic); + SPLAT_SUBSYSTEM_FINI(kobj); + SPLAT_SUBSYSTEM_FINI(vnode); + SPLAT_SUBSYSTEM_FINI(time); + SPLAT_SUBSYSTEM_FINI(rwlock); + SPLAT_SUBSYSTEM_FINI(thread); + SPLAT_SUBSYSTEM_FINI(condvar); + SPLAT_SUBSYSTEM_FINI(mutex); + SPLAT_SUBSYSTEM_FINI(krng); + SPLAT_SUBSYSTEM_FINI(taskq); + SPLAT_SUBSYSTEM_FINI(kmem); + + ASSERT(list_empty(&splat_module_list)); + printk(KERN_INFO "SPLAT: Unloaded module v%s-%s%s\n", + SPL_META_VERSION, SPL_META_RELEASE, SPL_DEBUG_STR); +} + +module_init(splat_init); +module_exit(splat_fini); + +MODULE_DESCRIPTION("Solaris Porting LAyer Tests"); +MODULE_AUTHOR(SPL_META_AUTHOR); +MODULE_LICENSE(SPL_META_LICENSE); +MODULE_VERSION(SPL_META_VERSION "-" SPL_META_RELEASE); --- linux-aws-4.15.0.orig/spl/module/splat/splat-generic.c +++ linux-aws-4.15.0/spl/module/splat/splat-generic.c @@ -0,0 +1,367 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Generic Tests. +\*****************************************************************************/ + +#include +#include +#include "splat-internal.h" + +#define SPLAT_GENERIC_NAME "generic" +#define SPLAT_GENERIC_DESC "Kernel Generic Tests" + +#define SPLAT_GENERIC_TEST1_ID 0x0d01 +#define SPLAT_GENERIC_TEST1_NAME "ddi_strtoul" +#define SPLAT_GENERIC_TEST1_DESC "ddi_strtoul Test" + +#define SPLAT_GENERIC_TEST2_ID 0x0d02 +#define SPLAT_GENERIC_TEST2_NAME "ddi_strtol" +#define SPLAT_GENERIC_TEST2_DESC "ddi_strtol Test" + +#define SPLAT_GENERIC_TEST3_ID 0x0d03 +#define SPLAT_GENERIC_TEST3_NAME "ddi_strtoull" +#define SPLAT_GENERIC_TEST3_DESC "ddi_strtoull Test" + +#define SPLAT_GENERIC_TEST4_ID 0x0d04 +#define SPLAT_GENERIC_TEST4_NAME "ddi_strtoll" +#define SPLAT_GENERIC_TEST4_DESC "ddi_strtoll Test" + +# define SPLAT_GENERIC_TEST5_ID 0x0d05 +# define SPLAT_GENERIC_TEST5_NAME "udivdi3" +# define SPLAT_GENERIC_TEST5_DESC "Unsigned Div-64 Test" + +# define SPLAT_GENERIC_TEST6_ID 0x0d06 +# define SPLAT_GENERIC_TEST6_NAME "divdi3" +# define SPLAT_GENERIC_TEST6_DESC "Signed Div-64 Test" + +#define STR_POS "123456789" +#define STR_NEG "-123456789" +#define STR_BASE "0xabcdef" +#define STR_RANGE_MAX "10000000000000000" +#define STR_RANGE_MIN "-10000000000000000" +#define STR_INVAL1 "12345U" +#define STR_INVAL2 "invald" + +#define VAL_POS 123456789 +#define VAL_NEG -123456789 +#define VAL_BASE 0xabcdef +#define VAL_INVAL1 12345U + +#define define_generic_msg_strtox(type, valtype) \ +static void \ +generic_msg_strto##type(struct file *file, char *msg, int rc, int *err, \ + const char *s, valtype d, char *endptr) \ +{ \ + splat_vprint(file, SPLAT_GENERIC_TEST1_NAME, \ + "%s (%d) %s: %s == %lld, 0x%p\n", \ + rc ? "Fail" : "Pass", *err, msg, s, \ + (unsigned long long)d, endptr); \ + *err = rc; \ +} + +define_generic_msg_strtox(ul, unsigned long); +define_generic_msg_strtox(l, long); +define_generic_msg_strtox(ull, unsigned long long); +define_generic_msg_strtox(ll, long long); + +#define define_splat_generic_test_strtox(type, valtype) \ +static int \ +splat_generic_test_strto##type(struct file *file, void *arg) \ +{ \ + int rc, rc1, rc2, rc3, rc4, rc5, rc6, rc7; \ + char str[20], *endptr; \ + valtype r; \ + \ + /* Positive value: expect success */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + rc1 = ddi_strto##type(STR_POS, &endptr, 10, &r); \ + if (rc1 == 0 && r == VAL_POS && endptr && *endptr == '\0') \ + rc = 0; \ + \ + generic_msg_strto##type(file, "positive", rc , &rc1, \ + STR_POS, r, endptr); \ + \ + /* Negative value: expect success */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + strcpy(str, STR_NEG); \ + rc2 = ddi_strto##type(str, &endptr, 10, &r); \ + if (#type[0] == 'u') { \ + if (rc2 == 0 && r == 0 && endptr == str) \ + rc = 0; \ + } else { \ + if (rc2 == 0 && r == VAL_NEG && \ + endptr && *endptr == '\0') \ + rc = 0; \ + } \ + \ + generic_msg_strto##type(file, "negative", rc, &rc2, \ + STR_NEG, r, endptr); \ + \ + /* Non decimal base: expect sucess */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + rc3 = ddi_strto##type(STR_BASE, &endptr, 0, &r); \ + if (rc3 == 0 && r == VAL_BASE && endptr && *endptr == '\0') \ + rc = 0; \ + \ + generic_msg_strto##type(file, "base", rc, &rc3, \ + STR_BASE, r, endptr); \ + \ + /* Max out of range: failure expected, r unchanged */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + rc4 = ddi_strto##type(STR_RANGE_MAX, &endptr, 16, &r); \ + if (rc4 == ERANGE && r == 0 && endptr == NULL) \ + rc = 0; \ + \ + generic_msg_strto##type(file, "max", rc, &rc4, \ + STR_RANGE_MAX, r, endptr); \ + \ + /* Min out of range: failure expected, r unchanged */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + strcpy(str, STR_RANGE_MIN); \ + rc5 = ddi_strto##type(str, &endptr, 16, &r); \ + if (#type[0] == 'u') { \ + if (rc5 == 0 && r == 0 && endptr == str) \ + rc = 0; \ + } else { \ + if (rc5 == ERANGE && r == 0 && endptr == NULL) \ + rc = 0; \ + } \ + \ + generic_msg_strto##type(file, "min", rc, &rc5, \ + STR_RANGE_MIN, r, endptr); \ + \ + /* Invalid string: success expected, endptr == 'U' */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + rc6 = ddi_strto##type(STR_INVAL1, &endptr, 10, &r); \ + if (rc6 == 0 && r == VAL_INVAL1 && endptr && *endptr == 'U') \ + rc = 0; \ + \ + generic_msg_strto##type(file, "invalid", rc, &rc6, \ + STR_INVAL1, r, endptr); \ + \ + /* Invalid string: failure expected, endptr == str */ \ + r = 0; \ + rc = 1; \ + endptr = NULL; \ + strcpy(str, STR_INVAL2); \ + rc7 = ddi_strto##type(str, &endptr, 10, &r); \ + if (rc7 == 0 && r == 0 && endptr == str) \ + rc = 0; \ + \ + generic_msg_strto##type(file, "invalid", rc, &rc7, \ + STR_INVAL2, r, endptr); \ + \ + return (rc1 || rc2 || rc3 || rc4 || rc5 || rc6 || rc7) ? \ + -EINVAL : 0; \ +} + +define_splat_generic_test_strtox(ul, unsigned long); +define_splat_generic_test_strtox(l, long); +define_splat_generic_test_strtox(ull, unsigned long long); +define_splat_generic_test_strtox(ll, long long); + +/* + * The entries in the table are used in all combinations and the + * return value is checked to ensure it is range. On 32-bit + * systems __udivdi3 will be invoked for the 64-bit division. + * On 64-bit system the native 64-bit divide will be used so + * __udivdi3 isn't used but we might as well stil run the test. + */ +static int +splat_generic_test_udivdi3(struct file *file, void *arg) +{ + const uint64_t tabu[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 1000, 2003, + 32765, 32766, 32767, 32768, 32769, 32760, + 65533, 65534, 65535, 65536, 65537, 65538, + 0x7ffffffeULL, 0x7fffffffULL, 0x80000000ULL, 0x80000001ULL, + 0x7000000000000000ULL, 0x7000000080000000ULL, 0x7000000080000001ULL, + 0x7fffffffffffffffULL, 0x7fffffff8fffffffULL, 0x7fffffff8ffffff1ULL, + 0x7fffffff00000000ULL, 0x7fffffff80000000ULL, 0x7fffffff00000001ULL, + 0x8000000000000000ULL, 0x8000000080000000ULL, 0x8000000080000001ULL, + 0xc000000000000000ULL, 0xc000000080000000ULL, 0xc000000080000001ULL, + 0xfffffffffffffffdULL, 0xfffffffffffffffeULL, 0xffffffffffffffffULL, + }; + uint64_t uu, vu, qu, ru; + int n, i, j, errors = 0; + + splat_vprint(file, SPLAT_GENERIC_TEST5_NAME, "%s", + "Testing unsigned 64-bit division.\n"); + n = sizeof(tabu) / sizeof(tabu[0]); + for (i = 0; i < n; i++) { + for (j = 1; j < n; j++) { + uu = tabu[i]; + vu = tabu[j]; + qu = uu / vu; /* __udivdi3 */ + ru = uu - qu * vu; + if (qu > uu || ru >= vu) { + splat_vprint(file, SPLAT_GENERIC_TEST5_NAME, + "%016llx/%016llx != %016llx rem %016llx\n", + uu, vu, qu, ru); + errors++; + } + } + } + + if (errors) { + splat_vprint(file, SPLAT_GENERIC_TEST5_NAME, + "Failed %d/%d tests\n", errors, n * (n - 1)); + return -ERANGE; + } + + splat_vprint(file, SPLAT_GENERIC_TEST5_NAME, + "Passed all %d tests\n", n * (n - 1)); + + return 0; +} + +/* + * The entries the table are used in all combinations, with + and - signs + * preceding them. The return value is checked to ensure it is range. + * On 32-bit systems __divdi3 will be invoked for the 64-bit division. + * On 64-bit system the native 64-bit divide will be used so __divdi3 + * isn't used but we might as well stil run the test. + */ +static int +splat_generic_test_divdi3(struct file *file, void *arg) +{ + const int64_t tabs[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 1000, 2003, + 32765, 32766, 32767, 32768, 32769, 32760, + 65533, 65534, 65535, 65536, 65537, 65538, + 0x7ffffffeLL, 0x7fffffffLL, 0x80000000LL, 0x80000001LL, + 0x7000000000000000LL, 0x7000000080000000LL, 0x7000000080000001LL, + 0x7fffffffffffffffLL, 0x7fffffff8fffffffLL, 0x7fffffff8ffffff1LL, + 0x7fffffff00000000LL, 0x7fffffff80000000LL, 0x7fffffff00000001LL, + 0x0123456789abcdefLL, 0x00000000abcdef01LL, 0x0000000012345678LL, +#if BITS_PER_LONG == 32 + 0x8000000000000000LL, 0x8000000080000000LL, 0x8000000080000001LL, +#endif + }; + int64_t u, v, q, r; + int n, i, j, k, errors = 0; + + splat_vprint(file, SPLAT_GENERIC_TEST6_NAME, "%s", + "Testing signed 64-bit division.\n"); + n = sizeof(tabs) / sizeof(tabs[0]); + for (i = 0; i < n; i++) { + for (j = 1; j < n; j++) { + for (k = 0; k <= 3; k++) { + u = (k & 1) ? -tabs[i] : tabs[i]; + v = (k >= 2) ? -tabs[j] : tabs[j]; + + q = u / v; /* __divdi3 */ + r = u - q * v; + if (abs64(q) > abs64(u) || + abs64(r) >= abs64(v) || + (r != 0 && (r ^ u) < 0)) { + splat_vprint(file, + SPLAT_GENERIC_TEST6_NAME, + "%016llx/%016llx != %016llx " + "rem %016llx\n", u, v, q, r); + errors++; + } + } + } + } + + if (errors) { + splat_vprint(file, SPLAT_GENERIC_TEST6_NAME, + "Failed %d/%d tests\n", errors, n * (n - 1)); + return -ERANGE; + } + + splat_vprint(file, SPLAT_GENERIC_TEST6_NAME, + "Passed all %d tests\n", n * (n - 1)); + + return 0; +} + +splat_subsystem_t * +splat_generic_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_GENERIC_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_GENERIC_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_GENERIC; + + splat_test_init(sub, SPLAT_GENERIC_TEST1_NAME, SPLAT_GENERIC_TEST1_DESC, + SPLAT_GENERIC_TEST1_ID, splat_generic_test_strtoul); + splat_test_init(sub, SPLAT_GENERIC_TEST2_NAME, SPLAT_GENERIC_TEST2_DESC, + SPLAT_GENERIC_TEST2_ID, splat_generic_test_strtol); + splat_test_init(sub, SPLAT_GENERIC_TEST3_NAME, SPLAT_GENERIC_TEST3_DESC, + SPLAT_GENERIC_TEST3_ID, splat_generic_test_strtoull); + splat_test_init(sub, SPLAT_GENERIC_TEST4_NAME, SPLAT_GENERIC_TEST4_DESC, + SPLAT_GENERIC_TEST4_ID, splat_generic_test_strtoll); + splat_test_init(sub, SPLAT_GENERIC_TEST5_NAME, SPLAT_GENERIC_TEST5_DESC, + SPLAT_GENERIC_TEST5_ID, splat_generic_test_udivdi3); + splat_test_init(sub, SPLAT_GENERIC_TEST6_NAME, SPLAT_GENERIC_TEST6_DESC, + SPLAT_GENERIC_TEST6_ID, splat_generic_test_divdi3); + + return sub; +} + +void +splat_generic_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_GENERIC_TEST6_ID); + splat_test_fini(sub, SPLAT_GENERIC_TEST5_ID); + splat_test_fini(sub, SPLAT_GENERIC_TEST4_ID); + splat_test_fini(sub, SPLAT_GENERIC_TEST3_ID); + splat_test_fini(sub, SPLAT_GENERIC_TEST2_ID); + splat_test_fini(sub, SPLAT_GENERIC_TEST1_ID); + + kfree(sub); +} + +int +splat_generic_id(void) +{ + return SPLAT_SUBSYSTEM_GENERIC; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-internal.h +++ linux-aws-4.15.0/spl/module/splat/splat-internal.h @@ -0,0 +1,150 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . +\*****************************************************************************/ + +#ifndef _SPLAT_INTERNAL_H +#define _SPLAT_INTERNAL_H + +#include "splat-ctl.h" +#include +#include +#include + +typedef int (*splat_test_func_t)(struct file *, void *); + +typedef struct splat_test { + struct list_head test_list; + splat_user_t desc; + splat_test_func_t test; +} splat_test_t; + +typedef struct splat_subsystem { + struct list_head subsystem_list;/* List had to chain entries */ + splat_user_t desc; + spinlock_t test_lock; + struct list_head test_list; +} splat_subsystem_t; + +void splat_test_init(splat_subsystem_t *sub, const char *name, + const char *desc, unsigned int tid, splat_test_func_t func); +void splat_test_fini(splat_subsystem_t *sub, unsigned int tid); + +#define SPLAT_INFO_BUFFER_SIZE 65536 +#define SPLAT_INFO_BUFFER_REDZONE 256 + +typedef struct splat_info { + kmutex_t info_lock; + int info_size; + char *info_buffer; + char *info_head; /* Internal kernel use only */ +} splat_info_t; + +#define sym2str(sym) (char *)(#sym) + +#define splat_print(file, format, args...) \ +({ splat_info_t *_info_ = (splat_info_t *)file->private_data; \ + int _rc_; \ + \ + ASSERT(_info_); \ + ASSERT(_info_->info_buffer); \ + \ + mutex_enter(&_info_->info_lock); \ + \ + /* Don't allow the kernel to start a write in the red zone */ \ + if ((int)(_info_->info_head - _info_->info_buffer) > \ + (SPLAT_INFO_BUFFER_SIZE - SPLAT_INFO_BUFFER_REDZONE)) { \ + _rc_ = -EOVERFLOW; \ + } else { \ + _rc_ = sprintf(_info_->info_head, format, args); \ + if (_rc_ >= 0) \ + _info_->info_head += _rc_; \ + } \ + \ + mutex_exit(&_info_->info_lock); \ + _rc_; \ +}) + +#define splat_vprint(file, test, format, args...) \ + splat_print(file, "%*s: " format, SPLAT_NAME_SIZE, test, args) + +#define splat_locked_test(lock, test) \ +({ \ + int _rc_; \ + spin_lock(lock); \ + _rc_ = (test) ? 1 : 0; \ + spin_unlock(lock); \ + _rc_; \ +}) + +splat_subsystem_t *splat_condvar_init(void); +splat_subsystem_t *splat_kmem_init(void); +splat_subsystem_t *splat_mutex_init(void); +splat_subsystem_t *splat_krng_init(void); +splat_subsystem_t *splat_rwlock_init(void); +splat_subsystem_t *splat_taskq_init(void); +splat_subsystem_t *splat_thread_init(void); +splat_subsystem_t *splat_time_init(void); +splat_subsystem_t *splat_vnode_init(void); +splat_subsystem_t *splat_kobj_init(void); +splat_subsystem_t *splat_atomic_init(void); +splat_subsystem_t *splat_list_init(void); +splat_subsystem_t *splat_generic_init(void); +splat_subsystem_t *splat_cred_init(void); +splat_subsystem_t *splat_zlib_init(void); +splat_subsystem_t *splat_linux_init(void); + +void splat_condvar_fini(splat_subsystem_t *); +void splat_kmem_fini(splat_subsystem_t *); +void splat_mutex_fini(splat_subsystem_t *); +void splat_krng_fini(splat_subsystem_t *); +void splat_rwlock_fini(splat_subsystem_t *); +void splat_taskq_fini(splat_subsystem_t *); +void splat_thread_fini(splat_subsystem_t *); +void splat_time_fini(splat_subsystem_t *); +void splat_vnode_fini(splat_subsystem_t *); +void splat_kobj_fini(splat_subsystem_t *); +void splat_atomic_fini(splat_subsystem_t *); +void splat_list_fini(splat_subsystem_t *); +void splat_generic_fini(splat_subsystem_t *); +void splat_cred_fini(splat_subsystem_t *); +void splat_zlib_fini(splat_subsystem_t *); +void splat_linux_fini(splat_subsystem_t *); + +int splat_condvar_id(void); +int splat_kmem_id(void); +int splat_mutex_id(void); +int splat_krng_id(void); +int splat_rwlock_id(void); +int splat_taskq_id(void); +int splat_thread_id(void); +int splat_time_id(void); +int splat_vnode_id(void); +int splat_kobj_id(void); +int splat_atomic_id(void); +int splat_list_id(void); +int splat_generic_id(void); +int splat_cred_id(void); +int splat_zlib_id(void); +int splat_linux_id(void); + +#endif /* _SPLAT_INTERNAL_H */ --- linux-aws-4.15.0.orig/spl/module/splat/splat-kmem.c +++ linux-aws-4.15.0/spl/module/splat/splat-kmem.c @@ -0,0 +1,1410 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Kmem Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_KMEM_NAME "kmem" +#define SPLAT_KMEM_DESC "Kernel Malloc/Slab Tests" + +#define SPLAT_KMEM_TEST1_ID 0x0101 +#define SPLAT_KMEM_TEST1_NAME "kmem_alloc" +#define SPLAT_KMEM_TEST1_DESC "Memory allocation test (kmem_alloc)" + +#define SPLAT_KMEM_TEST2_ID 0x0102 +#define SPLAT_KMEM_TEST2_NAME "kmem_zalloc" +#define SPLAT_KMEM_TEST2_DESC "Memory allocation test (kmem_zalloc)" + +#define SPLAT_KMEM_TEST3_ID 0x0103 +#define SPLAT_KMEM_TEST3_NAME "vmem_alloc" +#define SPLAT_KMEM_TEST3_DESC "Memory allocation test (vmem_alloc)" + +#define SPLAT_KMEM_TEST4_ID 0x0104 +#define SPLAT_KMEM_TEST4_NAME "vmem_zalloc" +#define SPLAT_KMEM_TEST4_DESC "Memory allocation test (vmem_zalloc)" + +#define SPLAT_KMEM_TEST5_ID 0x0105 +#define SPLAT_KMEM_TEST5_NAME "slab_small" +#define SPLAT_KMEM_TEST5_DESC "Slab ctor/dtor test (small)" + +#define SPLAT_KMEM_TEST6_ID 0x0106 +#define SPLAT_KMEM_TEST6_NAME "slab_large" +#define SPLAT_KMEM_TEST6_DESC "Slab ctor/dtor test (large)" + +#define SPLAT_KMEM_TEST7_ID 0x0107 +#define SPLAT_KMEM_TEST7_NAME "slab_align" +#define SPLAT_KMEM_TEST7_DESC "Slab alignment test" + +#define SPLAT_KMEM_TEST8_ID 0x0108 +#define SPLAT_KMEM_TEST8_NAME "slab_reap" +#define SPLAT_KMEM_TEST8_DESC "Slab reaping test" + +#define SPLAT_KMEM_TEST9_ID 0x0109 +#define SPLAT_KMEM_TEST9_NAME "slab_age" +#define SPLAT_KMEM_TEST9_DESC "Slab aging test" + +#define SPLAT_KMEM_TEST10_ID 0x010a +#define SPLAT_KMEM_TEST10_NAME "slab_lock" +#define SPLAT_KMEM_TEST10_DESC "Slab locking test" + +#if 0 +#define SPLAT_KMEM_TEST11_ID 0x010b +#define SPLAT_KMEM_TEST11_NAME "slab_overcommit" +#define SPLAT_KMEM_TEST11_DESC "Slab memory overcommit test" +#endif + +#define SPLAT_KMEM_TEST13_ID 0x010d +#define SPLAT_KMEM_TEST13_NAME "slab_reclaim" +#define SPLAT_KMEM_TEST13_DESC "Slab direct memory reclaim test" + +#define SPLAT_KMEM_ALLOC_COUNT 10 +#define SPLAT_VMEM_ALLOC_COUNT 10 + + +static int +splat_kmem_test1(struct file *file, void *arg) +{ + void *ptr[SPLAT_KMEM_ALLOC_COUNT]; + int size = PAGE_SIZE; + int i, count, rc = 0; + + while ((!rc) && (size <= spl_kmem_alloc_warn)) { + count = 0; + + for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) { + ptr[i] = kmem_alloc(size, KM_SLEEP); + if (ptr[i]) + count++; + } + + for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) + if (ptr[i]) + kmem_free(ptr[i], size); + + splat_vprint(file, SPLAT_KMEM_TEST1_NAME, + "%d byte allocations, %d/%d successful\n", + size, count, SPLAT_KMEM_ALLOC_COUNT); + if (count != SPLAT_KMEM_ALLOC_COUNT) + rc = -ENOMEM; + + size *= 2; + } + + return rc; +} + +static int +splat_kmem_test2(struct file *file, void *arg) +{ + void *ptr[SPLAT_KMEM_ALLOC_COUNT]; + int size = PAGE_SIZE; + int i, j, count, rc = 0; + + while ((!rc) && (size <= spl_kmem_alloc_warn)) { + count = 0; + + for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) { + ptr[i] = kmem_zalloc(size, KM_SLEEP); + if (ptr[i]) + count++; + } + + /* Ensure buffer has been zero filled */ + for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) { + for (j = 0; j < size; j++) { + if (((char *)ptr[i])[j] != '\0') { + splat_vprint(file,SPLAT_KMEM_TEST2_NAME, + "%d-byte allocation was " + "not zeroed\n", size); + rc = -EFAULT; + } + } + } + + for (i = 0; i < SPLAT_KMEM_ALLOC_COUNT; i++) + if (ptr[i]) + kmem_free(ptr[i], size); + + splat_vprint(file, SPLAT_KMEM_TEST2_NAME, + "%d byte allocations, %d/%d successful\n", + size, count, SPLAT_KMEM_ALLOC_COUNT); + if (count != SPLAT_KMEM_ALLOC_COUNT) + rc = -ENOMEM; + + size *= 2; + } + + return rc; +} + +static int +splat_kmem_test3(struct file *file, void *arg) +{ + void *ptr[SPLAT_VMEM_ALLOC_COUNT]; + int size = PAGE_SIZE; + int i, count, rc = 0; + + /* + * Test up to 4x the maximum kmem_alloc() size to ensure both + * the kmem_alloc() and vmem_alloc() call paths are used. + */ + while ((!rc) && (size <= (4 * spl_kmem_alloc_max))) { + count = 0; + + for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) { + ptr[i] = vmem_alloc(size, KM_SLEEP); + if (ptr[i]) + count++; + } + + for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) + if (ptr[i]) + vmem_free(ptr[i], size); + + splat_vprint(file, SPLAT_KMEM_TEST3_NAME, + "%d byte allocations, %d/%d successful\n", + size, count, SPLAT_VMEM_ALLOC_COUNT); + if (count != SPLAT_VMEM_ALLOC_COUNT) + rc = -ENOMEM; + + size *= 2; + } + + return rc; +} + +static int +splat_kmem_test4(struct file *file, void *arg) +{ + void *ptr[SPLAT_VMEM_ALLOC_COUNT]; + int size = PAGE_SIZE; + int i, j, count, rc = 0; + + /* + * Test up to 4x the maximum kmem_zalloc() size to ensure both + * the kmem_zalloc() and vmem_zalloc() call paths are used. + */ + while ((!rc) && (size <= (4 * spl_kmem_alloc_max))) { + count = 0; + + for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) { + ptr[i] = vmem_zalloc(size, KM_SLEEP); + if (ptr[i]) + count++; + } + + /* Ensure buffer has been zero filled */ + for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) { + for (j = 0; j < size; j++) { + if (((char *)ptr[i])[j] != '\0') { + splat_vprint(file, SPLAT_KMEM_TEST4_NAME, + "%d-byte allocation was " + "not zeroed\n", size); + rc = -EFAULT; + } + } + } + + for (i = 0; i < SPLAT_VMEM_ALLOC_COUNT; i++) + if (ptr[i]) + vmem_free(ptr[i], size); + + splat_vprint(file, SPLAT_KMEM_TEST4_NAME, + "%d byte allocations, %d/%d successful\n", + size, count, SPLAT_VMEM_ALLOC_COUNT); + if (count != SPLAT_VMEM_ALLOC_COUNT) + rc = -ENOMEM; + + size *= 2; + } + + return rc; +} + +#define SPLAT_KMEM_TEST_MAGIC 0x004488CCUL +#define SPLAT_KMEM_CACHE_NAME "kmem_test" +#define SPLAT_KMEM_OBJ_COUNT 1024 +#define SPLAT_KMEM_OBJ_RECLAIM 32 /* objects */ +#define SPLAT_KMEM_THREADS 32 + +#define KCP_FLAG_READY 0x01 + +typedef struct kmem_cache_data { + unsigned long kcd_magic; + struct list_head kcd_node; + int kcd_flag; + char kcd_buf[0]; +} kmem_cache_data_t; + +typedef struct kmem_cache_thread { + spinlock_t kct_lock; + int kct_id; + struct list_head kct_list; +} kmem_cache_thread_t; + +typedef struct kmem_cache_priv { + unsigned long kcp_magic; + struct file *kcp_file; + kmem_cache_t *kcp_cache; + spinlock_t kcp_lock; + spl_wait_queue_head_t kcp_ctl_waitq; + spl_wait_queue_head_t kcp_thr_waitq; + int kcp_flags; + int kcp_kct_count; + kmem_cache_thread_t *kcp_kct[SPLAT_KMEM_THREADS]; + int kcp_size; + int kcp_align; + int kcp_count; + int kcp_alloc; + int kcp_rc; +} kmem_cache_priv_t; + +static kmem_cache_priv_t * +splat_kmem_cache_test_kcp_alloc(struct file *file, char *name, + int size, int align, int alloc) +{ + kmem_cache_priv_t *kcp; + + kcp = kmem_zalloc(sizeof(kmem_cache_priv_t), KM_SLEEP); + if (!kcp) + return NULL; + + kcp->kcp_magic = SPLAT_KMEM_TEST_MAGIC; + kcp->kcp_file = file; + kcp->kcp_cache = NULL; + spin_lock_init(&kcp->kcp_lock); + init_waitqueue_head(&kcp->kcp_ctl_waitq); + init_waitqueue_head(&kcp->kcp_thr_waitq); + kcp->kcp_flags = 0; + kcp->kcp_kct_count = -1; + kcp->kcp_size = size; + kcp->kcp_align = align; + kcp->kcp_count = 0; + kcp->kcp_alloc = alloc; + kcp->kcp_rc = 0; + + return kcp; +} + +static void +splat_kmem_cache_test_kcp_free(kmem_cache_priv_t *kcp) +{ + kmem_free(kcp, sizeof(kmem_cache_priv_t)); +} + +static kmem_cache_thread_t * +splat_kmem_cache_test_kct_alloc(kmem_cache_priv_t *kcp, int id) +{ + kmem_cache_thread_t *kct; + + ASSERT3S(id, <, SPLAT_KMEM_THREADS); + ASSERT(kcp->kcp_kct[id] == NULL); + + kct = kmem_zalloc(sizeof(kmem_cache_thread_t), KM_SLEEP); + if (!kct) + return NULL; + + spin_lock_init(&kct->kct_lock); + kct->kct_id = id; + INIT_LIST_HEAD(&kct->kct_list); + + spin_lock(&kcp->kcp_lock); + kcp->kcp_kct[id] = kct; + spin_unlock(&kcp->kcp_lock); + + return kct; +} + +static void +splat_kmem_cache_test_kct_free(kmem_cache_priv_t *kcp, + kmem_cache_thread_t *kct) +{ + spin_lock(&kcp->kcp_lock); + kcp->kcp_kct[kct->kct_id] = NULL; + spin_unlock(&kcp->kcp_lock); + + kmem_free(kct, sizeof(kmem_cache_thread_t)); +} + +static void +splat_kmem_cache_test_kcd_free(kmem_cache_priv_t *kcp, + kmem_cache_thread_t *kct) +{ + kmem_cache_data_t *kcd; + + spin_lock(&kct->kct_lock); + while (!list_empty(&kct->kct_list)) { + kcd = list_entry(kct->kct_list.next, + kmem_cache_data_t, kcd_node); + list_del(&kcd->kcd_node); + spin_unlock(&kct->kct_lock); + + kmem_cache_free(kcp->kcp_cache, kcd); + + spin_lock(&kct->kct_lock); + } + spin_unlock(&kct->kct_lock); +} + +static int +splat_kmem_cache_test_kcd_alloc(kmem_cache_priv_t *kcp, + kmem_cache_thread_t *kct, int count) +{ + kmem_cache_data_t *kcd; + int i; + + for (i = 0; i < count; i++) { + kcd = kmem_cache_alloc(kcp->kcp_cache, KM_SLEEP); + if (kcd == NULL) { + splat_kmem_cache_test_kcd_free(kcp, kct); + return -ENOMEM; + } + + spin_lock(&kct->kct_lock); + list_add_tail(&kcd->kcd_node, &kct->kct_list); + spin_unlock(&kct->kct_lock); + } + + return 0; +} + +static void +splat_kmem_cache_test_debug(struct file *file, char *name, + kmem_cache_priv_t *kcp) +{ + int j; + + splat_vprint(file, name, "%s cache objects %d", + kcp->kcp_cache->skc_name, kcp->kcp_count); + + if (kcp->kcp_cache->skc_flags & (KMC_KMEM | KMC_VMEM)) { + splat_vprint(file, name, ", slabs %u/%u objs %u/%u", + (unsigned)kcp->kcp_cache->skc_slab_alloc, + (unsigned)kcp->kcp_cache->skc_slab_total, + (unsigned)kcp->kcp_cache->skc_obj_alloc, + (unsigned)kcp->kcp_cache->skc_obj_total); + + if (!(kcp->kcp_cache->skc_flags & KMC_NOMAGAZINE)) { + splat_vprint(file, name, "%s", "mags"); + + for_each_online_cpu(j) + splat_print(file, "%u/%u ", + kcp->kcp_cache->skc_mag[j]->skm_avail, + kcp->kcp_cache->skc_mag[j]->skm_size); + } + } + + splat_print(file, "%s\n", ""); +} + +static int +splat_kmem_cache_test_constructor(void *ptr, void *priv, int flags) +{ + kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv; + kmem_cache_data_t *kcd = (kmem_cache_data_t *)ptr; + + if (kcd && kcp) { + kcd->kcd_magic = kcp->kcp_magic; + INIT_LIST_HEAD(&kcd->kcd_node); + kcd->kcd_flag = 1; + memset(kcd->kcd_buf, 0xaa, kcp->kcp_size - (sizeof *kcd)); + kcp->kcp_count++; + } + + return 0; +} + +static void +splat_kmem_cache_test_destructor(void *ptr, void *priv) +{ + kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv; + kmem_cache_data_t *kcd = (kmem_cache_data_t *)ptr; + + if (kcd && kcp) { + kcd->kcd_magic = 0; + kcd->kcd_flag = 0; + memset(kcd->kcd_buf, 0xbb, kcp->kcp_size - (sizeof *kcd)); + kcp->kcp_count--; + } + + return; +} + +/* + * Generic reclaim function which assumes that all objects may + * be reclaimed at any time. We free a small percentage of the + * objects linked off the kcp or kct[] every time we are called. + */ +static void +splat_kmem_cache_test_reclaim(void *priv) +{ + kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)priv; + kmem_cache_thread_t *kct; + kmem_cache_data_t *kcd; + LIST_HEAD(reclaim); + int i, count; + + ASSERT(kcp->kcp_magic == SPLAT_KMEM_TEST_MAGIC); + + /* For each kct thread reclaim some objects */ + spin_lock(&kcp->kcp_lock); + for (i = 0; i < SPLAT_KMEM_THREADS; i++) { + kct = kcp->kcp_kct[i]; + if (!kct) + continue; + + spin_unlock(&kcp->kcp_lock); + spin_lock(&kct->kct_lock); + + count = SPLAT_KMEM_OBJ_RECLAIM; + while (count > 0 && !list_empty(&kct->kct_list)) { + kcd = list_entry(kct->kct_list.next, + kmem_cache_data_t, kcd_node); + list_del(&kcd->kcd_node); + list_add(&kcd->kcd_node, &reclaim); + count--; + } + + spin_unlock(&kct->kct_lock); + spin_lock(&kcp->kcp_lock); + } + spin_unlock(&kcp->kcp_lock); + + /* Freed outside the spin lock */ + while (!list_empty(&reclaim)) { + kcd = list_entry(reclaim.next, kmem_cache_data_t, kcd_node); + list_del(&kcd->kcd_node); + kmem_cache_free(kcp->kcp_cache, kcd); + } + + return; +} + +static int +splat_kmem_cache_test_threads(kmem_cache_priv_t *kcp, int threads) +{ + int rc; + + spin_lock(&kcp->kcp_lock); + rc = (kcp->kcp_kct_count == threads); + spin_unlock(&kcp->kcp_lock); + + return rc; +} + +static int +splat_kmem_cache_test_flags(kmem_cache_priv_t *kcp, int flags) +{ + int rc; + + spin_lock(&kcp->kcp_lock); + rc = (kcp->kcp_flags & flags); + spin_unlock(&kcp->kcp_lock); + + return rc; +} + +static void +splat_kmem_cache_test_thread(void *arg) +{ + kmem_cache_priv_t *kcp = (kmem_cache_priv_t *)arg; + kmem_cache_thread_t *kct; + int rc = 0, id; + + ASSERT(kcp->kcp_magic == SPLAT_KMEM_TEST_MAGIC); + + /* Assign thread ids */ + spin_lock(&kcp->kcp_lock); + if (kcp->kcp_kct_count == -1) + kcp->kcp_kct_count = 0; + + id = kcp->kcp_kct_count; + kcp->kcp_kct_count++; + spin_unlock(&kcp->kcp_lock); + + kct = splat_kmem_cache_test_kct_alloc(kcp, id); + if (!kct) { + rc = -ENOMEM; + goto out; + } + + /* Wait for all threads to have started and report they are ready */ + if (kcp->kcp_kct_count == SPLAT_KMEM_THREADS) + wake_up(&kcp->kcp_ctl_waitq); + + wait_event(kcp->kcp_thr_waitq, + splat_kmem_cache_test_flags(kcp, KCP_FLAG_READY)); + + /* Create and destroy objects */ + rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, kcp->kcp_alloc); + splat_kmem_cache_test_kcd_free(kcp, kct); +out: + if (kct) + splat_kmem_cache_test_kct_free(kcp, kct); + + spin_lock(&kcp->kcp_lock); + if (!kcp->kcp_rc) + kcp->kcp_rc = rc; + + if ((--kcp->kcp_kct_count) == 0) + wake_up(&kcp->kcp_ctl_waitq); + + spin_unlock(&kcp->kcp_lock); + + thread_exit(); +} + +static int +splat_kmem_cache_test(struct file *file, void *arg, char *name, + int size, int align, int flags) +{ + kmem_cache_priv_t *kcp = NULL; + kmem_cache_data_t **kcd = NULL; + int i, rc = 0, objs = 0; + + /* Limit size for low memory machines (1/128 of memory) */ + size = MIN(size, (physmem * PAGE_SIZE) >> 7); + + splat_vprint(file, name, + "Testing size=%d, align=%d, flags=0x%04x\n", + size, align, flags); + + kcp = splat_kmem_cache_test_kcp_alloc(file, name, size, align, 0); + if (!kcp) { + splat_vprint(file, name, "Unable to create '%s'\n", "kcp"); + return (-ENOMEM); + } + + kcp->kcp_cache = kmem_cache_create(SPLAT_KMEM_CACHE_NAME, + kcp->kcp_size, kcp->kcp_align, + splat_kmem_cache_test_constructor, + splat_kmem_cache_test_destructor, + NULL, kcp, NULL, flags); + if (kcp->kcp_cache == NULL) { + splat_vprint(file, name, "Unable to create " + "name='%s', size=%d, align=%d, flags=0x%x\n", + SPLAT_KMEM_CACHE_NAME, size, align, flags); + rc = -ENOMEM; + goto out_free; + } + + /* + * Allocate several slabs worth of objects to verify functionality. + * However, on 32-bit systems with limited address space constrain + * it to a single slab for the purposes of this test. + */ +#ifdef _LP64 + objs = kcp->kcp_cache->skc_slab_objs * 4; +#else + objs = 1; +#endif + kcd = kmem_zalloc(sizeof (kmem_cache_data_t *) * objs, KM_SLEEP); + if (kcd == NULL) { + splat_vprint(file, name, "Unable to allocate pointers " + "for %d objects\n", objs); + rc = -ENOMEM; + goto out_free; + } + + for (i = 0; i < objs; i++) { + kcd[i] = kmem_cache_alloc(kcp->kcp_cache, KM_SLEEP); + if (kcd[i] == NULL) { + splat_vprint(file, name, "Unable to allocate " + "from '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -EINVAL; + goto out_free; + } + + if (!kcd[i]->kcd_flag) { + splat_vprint(file, name, "Failed to run constructor " + "for '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -EINVAL; + goto out_free; + } + + if (kcd[i]->kcd_magic != kcp->kcp_magic) { + splat_vprint(file, name, + "Failed to pass private data to constructor " + "for '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -EINVAL; + goto out_free; + } + } + + for (i = 0; i < objs; i++) { + kmem_cache_free(kcp->kcp_cache, kcd[i]); + + /* Destructors are run for every kmem_cache_free() */ + if (kcd[i]->kcd_flag) { + splat_vprint(file, name, + "Failed to run destructor for '%s'\n", + SPLAT_KMEM_CACHE_NAME); + rc = -EINVAL; + goto out_free; + } + } + + if (kcp->kcp_count) { + splat_vprint(file, name, + "Failed to run destructor on all slab objects for '%s'\n", + SPLAT_KMEM_CACHE_NAME); + rc = -EINVAL; + } + + kmem_free(kcd, sizeof (kmem_cache_data_t *) * objs); + kmem_cache_destroy(kcp->kcp_cache); + + splat_kmem_cache_test_kcp_free(kcp); + splat_vprint(file, name, + "Success ran alloc'd/free'd %d objects of size %d\n", + objs, size); + + return (rc); + +out_free: + if (kcd) { + for (i = 0; i < objs; i++) { + if (kcd[i] != NULL) + kmem_cache_free(kcp->kcp_cache, kcd[i]); + } + + kmem_free(kcd, sizeof (kmem_cache_data_t *) * objs); + } + + if (kcp->kcp_cache) + kmem_cache_destroy(kcp->kcp_cache); + + splat_kmem_cache_test_kcp_free(kcp); + + return (rc); +} + +static int +splat_kmem_cache_thread_test(struct file *file, void *arg, char *name, + int size, int alloc, int max_time) +{ + kmem_cache_priv_t *kcp; + kthread_t *thr; + struct timespec start, stop, delta; + char cache_name[32]; + int i, rc = 0; + + kcp = splat_kmem_cache_test_kcp_alloc(file, name, size, 0, alloc); + if (!kcp) { + splat_vprint(file, name, "Unable to create '%s'\n", "kcp"); + return -ENOMEM; + } + + (void)snprintf(cache_name, 32, "%s-%d-%d", + SPLAT_KMEM_CACHE_NAME, size, alloc); + kcp->kcp_cache = + kmem_cache_create(cache_name, kcp->kcp_size, 0, + splat_kmem_cache_test_constructor, + splat_kmem_cache_test_destructor, + splat_kmem_cache_test_reclaim, + kcp, NULL, 0); + if (!kcp->kcp_cache) { + splat_vprint(file, name, "Unable to create '%s'\n", cache_name); + rc = -ENOMEM; + goto out_kcp; + } + + getnstimeofday(&start); + + for (i = 0; i < SPLAT_KMEM_THREADS; i++) { + thr = thread_create(NULL, 0, + splat_kmem_cache_test_thread, + kcp, 0, &p0, TS_RUN, defclsyspri); + if (thr == NULL) { + rc = -ESRCH; + goto out_cache; + } + } + + /* Sleep until all threads have started, then set the ready + * flag and wake them all up for maximum concurrency. */ + wait_event(kcp->kcp_ctl_waitq, + splat_kmem_cache_test_threads(kcp, SPLAT_KMEM_THREADS)); + + spin_lock(&kcp->kcp_lock); + kcp->kcp_flags |= KCP_FLAG_READY; + spin_unlock(&kcp->kcp_lock); + wake_up_all(&kcp->kcp_thr_waitq); + + /* Sleep until all thread have finished */ + wait_event(kcp->kcp_ctl_waitq, splat_kmem_cache_test_threads(kcp, 0)); + + getnstimeofday(&stop); + delta = timespec_sub(stop, start); + + splat_vprint(file, name, + "%-22s %2ld.%09ld\t" + "%lu/%lu/%lu\t%lu/%lu/%lu\n", + kcp->kcp_cache->skc_name, + delta.tv_sec, delta.tv_nsec, + (unsigned long)kcp->kcp_cache->skc_slab_total, + (unsigned long)kcp->kcp_cache->skc_slab_max, + (unsigned long)(kcp->kcp_alloc * + SPLAT_KMEM_THREADS / + SPL_KMEM_CACHE_OBJ_PER_SLAB), + (unsigned long)kcp->kcp_cache->skc_obj_total, + (unsigned long)kcp->kcp_cache->skc_obj_max, + (unsigned long)(kcp->kcp_alloc * + SPLAT_KMEM_THREADS)); + + if (delta.tv_sec >= max_time) + rc = -ETIME; + + if (!rc && kcp->kcp_rc) + rc = kcp->kcp_rc; + +out_cache: + kmem_cache_destroy(kcp->kcp_cache); +out_kcp: + splat_kmem_cache_test_kcp_free(kcp); + return rc; +} + +/* Validate small object cache behavior for dynamic/kmem/vmem caches */ +static int +splat_kmem_test5(struct file *file, void *arg) +{ + char *name = SPLAT_KMEM_TEST5_NAME; + int i, rc = 0; + + /* Randomly pick small object sizes and alignments. */ + for (i = 0; i < 100; i++) { + int size, align, flags = 0; + uint32_t rnd; + + /* Evenly distribute tests over all value cache types */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + switch (rnd & 0x03) { + default: + case 0x00: + flags = 0; + break; + case 0x01: + flags = KMC_KMEM; + break; + case 0x02: + flags = KMC_VMEM; + break; + case 0x03: + flags = KMC_SLAB; + break; + } + + /* The following flags are set with a 1/10 chance */ + flags |= ((((rnd >> 8) % 10) == 0) ? KMC_OFFSLAB : 0); + flags |= ((((rnd >> 16) % 10) == 0) ? KMC_NOEMERGENCY : 0); + + /* 32b - PAGE_SIZE */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + size = MAX(rnd % (PAGE_SIZE + 1), 32); + + /* 2^N where (3 <= N <= PAGE_SHIFT) */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + align = (1 << MAX(3, rnd % (PAGE_SHIFT + 1))); + + rc = splat_kmem_cache_test(file, arg, name, size, align, flags); + if (rc) + return (rc); + } + + return (rc); +} + +/* + * Validate large object cache behavior for dynamic/kmem/vmem caches + */ +static int +splat_kmem_test6(struct file *file, void *arg) +{ + char *name = SPLAT_KMEM_TEST6_NAME; + int i, max_size, rc = 0; + + /* Randomly pick large object sizes and alignments. */ + for (i = 0; i < 100; i++) { + int size, align, flags = 0; + uint32_t rnd; + + /* Evenly distribute tests over all value cache types */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + switch (rnd & 0x03) { + default: + case 0x00: + flags = 0; + max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2; + break; + case 0x01: + flags = KMC_KMEM; + max_size = (SPL_MAX_ORDER_NR_PAGES - 2) * PAGE_SIZE; + break; + case 0x02: + flags = KMC_VMEM; + max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2; + break; + case 0x03: + flags = KMC_SLAB; + max_size = SPL_MAX_KMEM_ORDER_NR_PAGES * PAGE_SIZE; + break; + } + + /* The following flags are set with a 1/10 chance */ + flags |= ((((rnd >> 8) % 10) == 0) ? KMC_OFFSLAB : 0); + flags |= ((((rnd >> 16) % 10) == 0) ? KMC_NOEMERGENCY : 0); + + /* PAGE_SIZE - max_size */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + size = MAX(rnd % (max_size + 1), PAGE_SIZE), + + /* 2^N where (3 <= N <= PAGE_SHIFT) */ + get_random_bytes((void *)&rnd, sizeof (uint32_t)); + align = (1 << MAX(3, rnd % (PAGE_SHIFT + 1))); + + rc = splat_kmem_cache_test(file, arg, name, size, align, flags); + if (rc) + return (rc); + } + + return (rc); +} + +/* + * Validate object alignment cache behavior for caches + */ +static int +splat_kmem_test7(struct file *file, void *arg) +{ + char *name = SPLAT_KMEM_TEST7_NAME; + int max_size = (SPL_KMEM_CACHE_MAX_SIZE * 1024 * 1024) / 2; + int i, rc; + + for (i = SPL_KMEM_CACHE_ALIGN; i <= PAGE_SIZE; i *= 2) { + uint32_t size; + + get_random_bytes((void *)&size, sizeof (uint32_t)); + size = MAX(size % (max_size + 1), 32); + + rc = splat_kmem_cache_test(file, arg, name, size, i, 0); + if (rc) + return rc; + + rc = splat_kmem_cache_test(file, arg, name, size, i, + KMC_OFFSLAB); + if (rc) + return rc; + } + + return rc; +} + +/* + * Validate kmem_cache_reap() by requesting the slab cache free any objects + * it can. For a few reasons this may not immediately result in more free + * memory even if objects are freed. First off, due to fragmentation we + * may not be able to reclaim any slabs. Secondly, even if we do we fully + * clear some slabs we will not want to immediately reclaim all of them + * because we may contend with cache allocations and thrash. What we want + * to see is the slab size decrease more gradually as it becomes clear they + * will not be needed. This should be achievable in less than a minute. + * If it takes longer than this something has gone wrong. + */ +static int +splat_kmem_test8(struct file *file, void *arg) +{ + kmem_cache_priv_t *kcp; + kmem_cache_thread_t *kct; + unsigned int spl_kmem_cache_expire_old; + int i, rc = 0; + + /* Enable cache aging just for this test if it is disabled */ + spl_kmem_cache_expire_old = spl_kmem_cache_expire; + spl_kmem_cache_expire = KMC_EXPIRE_AGE; + + kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST8_NAME, + 256, 0, 0); + if (!kcp) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Unable to create '%s'\n", "kcp"); + rc = -ENOMEM; + goto out; + } + + kcp->kcp_cache = + kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0, + splat_kmem_cache_test_constructor, + splat_kmem_cache_test_destructor, + splat_kmem_cache_test_reclaim, + kcp, NULL, 0); + if (!kcp->kcp_cache) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -ENOMEM; + goto out_kcp; + } + + kct = splat_kmem_cache_test_kct_alloc(kcp, 0); + if (!kct) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Unable to create '%s'\n", "kct"); + rc = -ENOMEM; + goto out_cache; + } + + rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, SPLAT_KMEM_OBJ_COUNT); + if (rc) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, "Unable to " + "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME); + goto out_kct; + } + + /* Force reclaim every 1/10 a second for 60 seconds. */ + for (i = 0; i < 600; i++) { + kmem_cache_reap_now(kcp->kcp_cache); + splat_kmem_cache_test_debug(file, SPLAT_KMEM_TEST8_NAME, kcp); + + if (kcp->kcp_count == 0) + break; + + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ / 10); + } + + if (kcp->kcp_count == 0) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Successfully created %d objects " + "in cache %s and reclaimed them\n", + SPLAT_KMEM_OBJ_COUNT, SPLAT_KMEM_CACHE_NAME); + } else { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Failed to reclaim %u/%d objects from cache %s\n", + (unsigned)kcp->kcp_count, + SPLAT_KMEM_OBJ_COUNT, SPLAT_KMEM_CACHE_NAME); + rc = -ENOMEM; + } + + /* Cleanup our mess (for failure case of time expiring) */ + splat_kmem_cache_test_kcd_free(kcp, kct); +out_kct: + splat_kmem_cache_test_kct_free(kcp, kct); +out_cache: + kmem_cache_destroy(kcp->kcp_cache); +out_kcp: + splat_kmem_cache_test_kcp_free(kcp); +out: + spl_kmem_cache_expire = spl_kmem_cache_expire_old; + + return rc; +} + +/* Test cache aging, we have allocated a large number of objects thus + * creating a large number of slabs and then free'd them all. However, + * since there should be little memory pressure at the moment those + * slabs have not been freed. What we want to see is the slab size + * decrease gradually as it becomes clear they will not be be needed. + * This should be achievable in less than minute. If it takes longer + * than this something has gone wrong. + */ +static int +splat_kmem_test9(struct file *file, void *arg) +{ + kmem_cache_priv_t *kcp; + kmem_cache_thread_t *kct; + unsigned int spl_kmem_cache_expire_old; + int i, rc = 0, count = SPLAT_KMEM_OBJ_COUNT * 128; + + /* Enable cache aging just for this test if it is disabled */ + spl_kmem_cache_expire_old = spl_kmem_cache_expire; + spl_kmem_cache_expire = KMC_EXPIRE_AGE; + + kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST9_NAME, + 256, 0, 0); + if (!kcp) { + splat_vprint(file, SPLAT_KMEM_TEST9_NAME, + "Unable to create '%s'\n", "kcp"); + rc = -ENOMEM; + goto out; + } + + kcp->kcp_cache = + kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0, + splat_kmem_cache_test_constructor, + splat_kmem_cache_test_destructor, + NULL, kcp, NULL, 0); + if (!kcp->kcp_cache) { + splat_vprint(file, SPLAT_KMEM_TEST9_NAME, + "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -ENOMEM; + goto out_kcp; + } + + kct = splat_kmem_cache_test_kct_alloc(kcp, 0); + if (!kct) { + splat_vprint(file, SPLAT_KMEM_TEST8_NAME, + "Unable to create '%s'\n", "kct"); + rc = -ENOMEM; + goto out_cache; + } + + rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, count); + if (rc) { + splat_vprint(file, SPLAT_KMEM_TEST9_NAME, "Unable to " + "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME); + goto out_kct; + } + + splat_kmem_cache_test_kcd_free(kcp, kct); + + for (i = 0; i < 60; i++) { + splat_kmem_cache_test_debug(file, SPLAT_KMEM_TEST9_NAME, kcp); + + if (kcp->kcp_count == 0) + break; + + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ); + } + + if (kcp->kcp_count == 0) { + splat_vprint(file, SPLAT_KMEM_TEST9_NAME, + "Successfully created %d objects " + "in cache %s and reclaimed them\n", + count, SPLAT_KMEM_CACHE_NAME); + } else { + splat_vprint(file, SPLAT_KMEM_TEST9_NAME, + "Failed to reclaim %u/%d objects from cache %s\n", + (unsigned)kcp->kcp_count, count, + SPLAT_KMEM_CACHE_NAME); + rc = -ENOMEM; + } + +out_kct: + splat_kmem_cache_test_kct_free(kcp, kct); +out_cache: + kmem_cache_destroy(kcp->kcp_cache); +out_kcp: + splat_kmem_cache_test_kcp_free(kcp); +out: + spl_kmem_cache_expire = spl_kmem_cache_expire_old; + + return rc; +} + +/* + * This test creates N threads with a shared kmem cache. They then all + * concurrently allocate and free from the cache to stress the locking and + * concurrent cache performance. If any one test takes longer than 5 + * seconds to complete it is treated as a failure and may indicate a + * performance regression. On my test system no one test takes more + * than 1 second to complete so a 5x slowdown likely a problem. + */ +static int +splat_kmem_test10(struct file *file, void *arg) +{ + uint64_t size, alloc, maxsize, limit, rc = 0; + +#if defined(CONFIG_64BIT) + maxsize = (1024 * 1024); +#else + maxsize = (128 * 1024); +#endif + + for (size = 32; size <= maxsize; size *= 2) { + + splat_vprint(file, SPLAT_KMEM_TEST10_NAME, "%-22s %s", "name", + "time (sec)\tslabs \tobjs \thash\n"); + splat_vprint(file, SPLAT_KMEM_TEST10_NAME, "%-22s %s", "", + " \ttot/max/calc\ttot/max/calc\n"); + + for (alloc = 1; alloc <= 1024; alloc *= 2) { + + /* Skip tests which exceed 1/2 of memory. */ + limit = MIN(physmem * PAGE_SIZE, + vmem_size(NULL, VMEM_ALLOC | VMEM_FREE)) / 2; + if (size * alloc * SPLAT_KMEM_THREADS > limit) + continue; + + rc = splat_kmem_cache_thread_test(file, arg, + SPLAT_KMEM_TEST10_NAME, size, alloc, 5); + if (rc) + break; + } + } + + return rc; +} + +#if 0 +/* + * This test creates N threads with a shared kmem cache which overcommits + * memory by 4x. This makes it impossible for the slab to satify the + * thread requirements without having its reclaim hook run which will + * free objects back for use. This behavior is triggered by the linum VM + * detecting a low memory condition on the node and invoking the shrinkers. + * This should allow all the threads to complete while avoiding deadlock + * and for the most part out of memory events. This is very tough on the + * system so it is possible the test app may get oom'ed. This particular + * test has proven troublesome on 32-bit archs with limited virtual + * address space so it only run on 64-bit systems. + */ +static int +splat_kmem_test11(struct file *file, void *arg) +{ + uint64_t size, alloc, rc; + + size = 8 * 1024; + alloc = ((4 * physmem * PAGE_SIZE) / size) / SPLAT_KMEM_THREADS; + + splat_vprint(file, SPLAT_KMEM_TEST11_NAME, "%-22s %s", "name", + "time (sec)\tslabs \tobjs \thash\n"); + splat_vprint(file, SPLAT_KMEM_TEST11_NAME, "%-22s %s", "", + " \ttot/max/calc\ttot/max/calc\n"); + + rc = splat_kmem_cache_thread_test(file, arg, + SPLAT_KMEM_TEST11_NAME, size, alloc, 60); + + return rc; +} +#endif + +typedef struct dummy_page { + struct list_head dp_list; + char dp_pad[PAGE_SIZE - sizeof(struct list_head)]; +} dummy_page_t; + +/* + * This test is designed to verify that direct reclaim is functioning as + * expected. We allocate a large number of objects thus creating a large + * number of slabs. We then apply memory pressure and expect that the + * direct reclaim path can easily recover those slabs. The registered + * reclaim function will free the objects and the slab shrinker will call + * it repeatedly until at least a single slab can be freed. + * + * Note it may not be possible to reclaim every last slab via direct reclaim + * without a failure because the shrinker_rwsem may be contended. For this + * reason, quickly reclaiming 3/4 of the slabs is considered a success. + * + * This should all be possible within 10 seconds. For reference, on a + * system with 2G of memory this test takes roughly 0.2 seconds to run. + * It may take longer on larger memory systems but should still easily + * complete in the alloted 10 seconds. + */ +static int +splat_kmem_test13(struct file *file, void *arg) +{ + kmem_cache_priv_t *kcp; + kmem_cache_thread_t *kct; + dummy_page_t *dp; + struct list_head list; + struct timespec start, stop, delta = { 0, 0 }; + int size, count, slabs, fails = 0; + int i, rc = 0, max_time = 10; + + size = 128 * 1024; + count = MIN(physmem * PAGE_SIZE, vmem_size(NULL, + VMEM_ALLOC | VMEM_FREE)) / 4 / size; + + kcp = splat_kmem_cache_test_kcp_alloc(file, SPLAT_KMEM_TEST13_NAME, + size, 0, 0); + if (!kcp) { + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Unable to create '%s'\n", "kcp"); + rc = -ENOMEM; + goto out; + } + + kcp->kcp_cache = + kmem_cache_create(SPLAT_KMEM_CACHE_NAME, kcp->kcp_size, 0, + splat_kmem_cache_test_constructor, + splat_kmem_cache_test_destructor, + splat_kmem_cache_test_reclaim, + kcp, NULL, 0); + if (!kcp->kcp_cache) { + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Unable to create '%s'\n", SPLAT_KMEM_CACHE_NAME); + rc = -ENOMEM; + goto out_kcp; + } + + kct = splat_kmem_cache_test_kct_alloc(kcp, 0); + if (!kct) { + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Unable to create '%s'\n", "kct"); + rc = -ENOMEM; + goto out_cache; + } + + rc = splat_kmem_cache_test_kcd_alloc(kcp, kct, count); + if (rc) { + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, "Unable to " + "allocate from '%s'\n", SPLAT_KMEM_CACHE_NAME); + goto out_kct; + } + + i = 0; + slabs = kcp->kcp_cache->skc_slab_total; + INIT_LIST_HEAD(&list); + getnstimeofday(&start); + + /* Apply memory pressure */ + while (kcp->kcp_cache->skc_slab_total > (slabs >> 2)) { + + if ((i % 10000) == 0) + splat_kmem_cache_test_debug( + file, SPLAT_KMEM_TEST13_NAME, kcp); + + getnstimeofday(&stop); + delta = timespec_sub(stop, start); + if (delta.tv_sec >= max_time) { + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Failed to reclaim 3/4 of cache in %ds, " + "%u/%u slabs remain\n", max_time, + (unsigned)kcp->kcp_cache->skc_slab_total, + slabs); + rc = -ETIME; + break; + } + + dp = (dummy_page_t *)__get_free_page(GFP_KERNEL); + if (!dp) { + fails++; + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Failed (%d) to allocate page with %u " + "slabs still in the cache\n", fails, + (unsigned)kcp->kcp_cache->skc_slab_total); + continue; + } + + list_add(&dp->dp_list, &list); + i++; + } + + if (rc == 0) + splat_vprint(file, SPLAT_KMEM_TEST13_NAME, + "Successfully created %u slabs and with %d alloc " + "failures reclaimed 3/4 of them in %d.%03ds\n", + slabs, fails, + (int)delta.tv_sec, (int)delta.tv_nsec / 1000000); + + /* Release memory pressure pages */ + while (!list_empty(&list)) { + dp = list_entry(list.next, dummy_page_t, dp_list); + list_del_init(&dp->dp_list); + free_page((unsigned long)dp); + } + + /* Release remaining kmem cache objects */ + splat_kmem_cache_test_kcd_free(kcp, kct); +out_kct: + splat_kmem_cache_test_kct_free(kcp, kct); +out_cache: + kmem_cache_destroy(kcp->kcp_cache); +out_kcp: + splat_kmem_cache_test_kcp_free(kcp); +out: + return rc; +} + +splat_subsystem_t * +splat_kmem_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_KMEM_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_KMEM_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_KMEM; + + splat_test_init(sub, SPLAT_KMEM_TEST1_NAME, SPLAT_KMEM_TEST1_DESC, + SPLAT_KMEM_TEST1_ID, splat_kmem_test1); + splat_test_init(sub, SPLAT_KMEM_TEST2_NAME, SPLAT_KMEM_TEST2_DESC, + SPLAT_KMEM_TEST2_ID, splat_kmem_test2); + splat_test_init(sub, SPLAT_KMEM_TEST3_NAME, SPLAT_KMEM_TEST3_DESC, + SPLAT_KMEM_TEST3_ID, splat_kmem_test3); + splat_test_init(sub, SPLAT_KMEM_TEST4_NAME, SPLAT_KMEM_TEST4_DESC, + SPLAT_KMEM_TEST4_ID, splat_kmem_test4); + splat_test_init(sub, SPLAT_KMEM_TEST5_NAME, SPLAT_KMEM_TEST5_DESC, + SPLAT_KMEM_TEST5_ID, splat_kmem_test5); + splat_test_init(sub, SPLAT_KMEM_TEST6_NAME, SPLAT_KMEM_TEST6_DESC, + SPLAT_KMEM_TEST6_ID, splat_kmem_test6); + splat_test_init(sub, SPLAT_KMEM_TEST7_NAME, SPLAT_KMEM_TEST7_DESC, + SPLAT_KMEM_TEST7_ID, splat_kmem_test7); + splat_test_init(sub, SPLAT_KMEM_TEST8_NAME, SPLAT_KMEM_TEST8_DESC, + SPLAT_KMEM_TEST8_ID, splat_kmem_test8); + splat_test_init(sub, SPLAT_KMEM_TEST9_NAME, SPLAT_KMEM_TEST9_DESC, + SPLAT_KMEM_TEST9_ID, splat_kmem_test9); + splat_test_init(sub, SPLAT_KMEM_TEST10_NAME, SPLAT_KMEM_TEST10_DESC, + SPLAT_KMEM_TEST10_ID, splat_kmem_test10); +#if 0 + splat_test_init(sub, SPLAT_KMEM_TEST11_NAME, SPLAT_KMEM_TEST11_DESC, + SPLAT_KMEM_TEST11_ID, splat_kmem_test11); +#endif + splat_test_init(sub, SPLAT_KMEM_TEST13_NAME, SPLAT_KMEM_TEST13_DESC, + SPLAT_KMEM_TEST13_ID, splat_kmem_test13); + + return sub; +} + +void +splat_kmem_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_KMEM_TEST13_ID); +#if 0 + splat_test_fini(sub, SPLAT_KMEM_TEST11_ID); +#endif + splat_test_fini(sub, SPLAT_KMEM_TEST10_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST9_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST8_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST7_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST6_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST5_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST4_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST3_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST2_ID); + splat_test_fini(sub, SPLAT_KMEM_TEST1_ID); + + kfree(sub); +} + +int +splat_kmem_id(void) { + return SPLAT_SUBSYSTEM_KMEM; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-kobj.c +++ linux-aws-4.15.0/spl/module/splat/splat-kobj.c @@ -0,0 +1,166 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Kobj Tests. +\*****************************************************************************/ + +#include +#include "splat-internal.h" + +#define SPLAT_KOBJ_NAME "kobj" +#define SPLAT_KOBJ_DESC "Kernel Kobj Tests" + +#define SPLAT_KOBJ_TEST1_ID 0x0a01 +#define SPLAT_KOBJ_TEST1_NAME "open" +#define SPLAT_KOBJ_TEST1_DESC "Kobj Open/Close Test" + +#define SPLAT_KOBJ_TEST2_ID 0x0a02 +#define SPLAT_KOBJ_TEST2_NAME "size/read" +#define SPLAT_KOBJ_TEST2_DESC "Kobj Size/Read Test" + +#define SPLAT_KOBJ_TEST_FILE "/etc/fstab" + +static int +splat_kobj_test1(struct file *file, void *arg) +{ + struct _buf *f; + + f = kobj_open_file(SPLAT_KOBJ_TEST_FILE); + if (f == (struct _buf *)-1) { + splat_vprint(file, SPLAT_KOBJ_TEST1_NAME, "Failed to open " + "test file: %s\n", SPLAT_KOBJ_TEST_FILE); + return -ENOENT; + } + + kobj_close_file(f); + splat_vprint(file, SPLAT_KOBJ_TEST1_NAME, "Successfully opened and " + "closed test file: %s\n", SPLAT_KOBJ_TEST_FILE); + + return 0; +} /* splat_kobj_test1() */ + +static int +splat_kobj_test2(struct file *file, void *arg) +{ + struct _buf *f; + char *buf; + uint64_t size; + int rc; + + f = kobj_open_file(SPLAT_KOBJ_TEST_FILE); + if (f == (struct _buf *)-1) { + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed to open " + "test file: %s\n", SPLAT_KOBJ_TEST_FILE); + return -ENOENT; + } + + rc = kobj_get_filesize(f, &size); + if (rc) { + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed stat of " + "test file: %s (%d)\n", SPLAT_KOBJ_TEST_FILE, rc); + goto out; + } + + buf = kmalloc(size + 1, GFP_KERNEL); + if (!buf) { + rc = -ENOMEM; + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed to alloc " + "%lld bytes for tmp buffer (%d)\n", + (long long)size, rc); + goto out; + } + + memset(buf, 0, size + 1); + rc = kobj_read_file(f, buf, size, 0); + if (rc < 0) { + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Failed read of " + "test file: %s (%d)\n", SPLAT_KOBJ_TEST_FILE, rc); + goto out2; + } + + /* Validate we read as many bytes as expected based on the stat. This + * isn't a perfect test since we didn't create the file however it is + * pretty unlikely there are garbage characters in your /etc/fstab */ + if (size != (uint64_t)strlen(buf)) { + rc = -EFBIG; + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Stat'ed size " + "(%lld) does not match number of bytes read " + "(%lld)\n", (long long)size, + (long long)strlen(buf)); + goto out2; + } + + rc = 0; + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "\n%s\n", buf); + splat_vprint(file, SPLAT_KOBJ_TEST2_NAME, "Successfully stat'ed " + "and read expected number of bytes (%lld) from test " + "file: %s\n", (long long)size, SPLAT_KOBJ_TEST_FILE); +out2: + kfree(buf); +out: + kobj_close_file(f); + + return rc; +} /* splat_kobj_test2() */ + +splat_subsystem_t * +splat_kobj_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_KOBJ_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_KOBJ_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_KOBJ; + + splat_test_init(sub, SPLAT_KOBJ_TEST1_NAME, SPLAT_KOBJ_TEST1_DESC, + SPLAT_KOBJ_TEST1_ID, splat_kobj_test1); + splat_test_init(sub, SPLAT_KOBJ_TEST2_NAME, SPLAT_KOBJ_TEST2_DESC, + SPLAT_KOBJ_TEST2_ID, splat_kobj_test2); + + return sub; +} /* splat_kobj_init() */ + +void +splat_kobj_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_KOBJ_TEST2_ID); + splat_test_fini(sub, SPLAT_KOBJ_TEST1_ID); + + kfree(sub); +} /* splat_kobj_fini() */ + +int +splat_kobj_id(void) +{ + return SPLAT_SUBSYSTEM_KOBJ; +} /* splat_kobj_id() */ --- linux-aws-4.15.0.orig/spl/module/splat/splat-linux.c +++ linux-aws-4.15.0/spl/module/splat/splat-linux.c @@ -0,0 +1,237 @@ +/*****************************************************************************\ + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Kernel Compatibility Tests. +\*****************************************************************************/ + +#include +#include +#include "splat-internal.h" + +#define SPLAT_LINUX_NAME "linux" +#define SPLAT_LINUX_DESC "Kernel Compatibility Tests" + +#define SPLAT_LINUX_TEST1_ID 0x1001 +#define SPLAT_LINUX_TEST1_NAME "shrinker" +#define SPLAT_LINUX_TEST1_DESC "Shrinker test" + +/* + * Wait queue used to eliminate race between dropping of slab + * and execution of the shrinker callback + */ +DECLARE_WAIT_QUEUE_HEAD(shrinker_wait); + +SPL_SHRINKER_CALLBACK_FWD_DECLARE(splat_linux_shrinker_fn); +SPL_SHRINKER_DECLARE(splat_linux_shrinker, splat_linux_shrinker_fn, 1); +static unsigned long splat_linux_shrinker_size = 0; +static struct file *splat_linux_shrinker_file = NULL; + +static spl_shrinker_t +__splat_linux_shrinker_fn(struct shrinker *shrink, struct shrink_control *sc) +{ + static int failsafe = 0; + static unsigned long last_splat_linux_shrinker_size = 0; + unsigned long size; + spl_shrinker_t count; + + /* + * shrinker_size can only decrease or stay the same between callbacks + * in the same run, so Reset failsafe whenever shrinker increases + * as this indicates a new run. + */ + if (last_splat_linux_shrinker_size < splat_linux_shrinker_size) + failsafe = 0; + + last_splat_linux_shrinker_size = splat_linux_shrinker_size; + + if (sc->nr_to_scan) { + size = MIN(sc->nr_to_scan, splat_linux_shrinker_size); + splat_linux_shrinker_size -= size; + + splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME, + "Reclaimed %lu objects, size now %lu\n", + size, splat_linux_shrinker_size); + +#ifdef HAVE_SPLIT_SHRINKER_CALLBACK + count = size; +#else + count = splat_linux_shrinker_size; +#endif /* HAVE_SPLIT_SHRINKER_CALLBACK */ + + } else { + count = splat_linux_shrinker_size; + splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME, + "Cache size is %lu\n", splat_linux_shrinker_size); + } + + /* Far more calls than expected abort drop_slab as a failsafe */ + if (failsafe > 100) { + splat_vprint(splat_linux_shrinker_file, SPLAT_LINUX_TEST1_NAME, + "Far more calls than expected (%d), size now %lu\n", + failsafe, splat_linux_shrinker_size); + return (SHRINK_STOP); + } else { + /* + * We only increment failsafe if it doesn't trigger. This + * makes any failsafe failure persistent until the next test. + */ + failsafe++; + } + + /* Shrinker has run, so signal back to test. */ + wake_up(&shrinker_wait); + + return (count); +} + +SPL_SHRINKER_CALLBACK_WRAPPER(splat_linux_shrinker_fn); + +#define DROP_SLAB_CMD \ + "exec 0/proc/sys/vm/drop_caches " \ + " 2>/dev/null; " \ + "echo 2" + +static int +splat_linux_drop_slab(struct file *file) +{ + char *argv[] = { "/bin/sh", + "-c", + DROP_SLAB_CMD, + NULL }; + char *envp[] = { "HOME=/", + "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", + NULL }; + int rc; + + rc = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); + if (rc) + splat_vprint(file, SPLAT_LINUX_TEST1_NAME, + "Failed user helper '%s %s %s', rc = %d\n", + argv[0], argv[1], argv[2], rc); + + return rc; +} + +/* + * Verify correct shrinker functionality by registering a shrinker + * with the required compatibility macros. We then use a simulated + * cache and force the systems caches to be dropped. The shrinker + * should be repeatedly called until it reports that the cache is + * empty. It is then cleanly unregistered and correct behavior is + * verified. There are now four slightly different supported shrinker + * API and this test ensures the compatibility code is correct. + */ +static int +splat_linux_test1(struct file *file, void *arg) +{ + int rc = -EINVAL; + + /* + * Globals used by the shrinker, it is not safe to run this + * test concurrently this is a safe assumption for SPLAT tests. + * Regardless we do some minimal checking a bail if concurrent + * use is detected. + */ + if (splat_linux_shrinker_size || splat_linux_shrinker_file) { + splat_vprint(file, SPLAT_LINUX_TEST1_NAME, + "Failed due to concurrent shrinker test, rc = %d\n", rc); + return (rc); + } + + splat_linux_shrinker_size = 1024; + splat_linux_shrinker_file = file; + + spl_register_shrinker(&splat_linux_shrinker); + rc = splat_linux_drop_slab(file); + if (rc) + goto out; + + /* + * By the time we get here, it is possible that the shrinker has not + * yet run. splat_linux_drop_slab sends a signal for it to run, but + * there is no guarantee of when it will actually run. We wait for it + * to run here, terminating when either the shrinker size is now 0 or + * we timeout after 1 second, which should be an eternity (error). + */ + rc = wait_event_timeout(shrinker_wait, !splat_linux_shrinker_size, HZ); + if (!rc) { + splat_vprint(file, SPLAT_LINUX_TEST1_NAME, + "Failed cache shrinking timed out, size now %lu", + splat_linux_shrinker_size); + rc = -ETIMEDOUT; + } else { + rc = 0; + } + + if (!rc && splat_linux_shrinker_size != 0) { + splat_vprint(file, SPLAT_LINUX_TEST1_NAME, + "Failed cache was not shrunk to 0, size now %lu", + splat_linux_shrinker_size); + rc = -EDOM; + } +out: + spl_unregister_shrinker(&splat_linux_shrinker); + + splat_linux_shrinker_size = 0; + splat_linux_shrinker_file = NULL; + + return rc; +} + +splat_subsystem_t * +splat_linux_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_LINUX_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_LINUX_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_LINUX; + + splat_test_init(sub, SPLAT_LINUX_TEST1_NAME, SPLAT_LINUX_TEST1_DESC, + SPLAT_LINUX_TEST1_ID, splat_linux_test1); + + return sub; +} + +void +splat_linux_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_LINUX_TEST1_ID); + + kfree(sub); +} + +int +splat_linux_id(void) { + return SPLAT_SUBSYSTEM_LINUX; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-list.c +++ linux-aws-4.15.0/spl/module/splat/splat-list.c @@ -0,0 +1,475 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) List Tests. +\*****************************************************************************/ + +#include +#include +#include "splat-internal.h" + +#define SPLAT_LIST_NAME "list" +#define SPLAT_LIST_DESC "Kernel List Tests" + +#define SPLAT_LIST_TEST1_ID 0x0c01 +#define SPLAT_LIST_TEST1_NAME "create/destroy" +#define SPLAT_LIST_TEST1_DESC "Create/destroy Test" + +#define SPLAT_LIST_TEST2_ID 0x0c02 +#define SPLAT_LIST_TEST2_NAME "ins/rm head" +#define SPLAT_LIST_TEST2_DESC "Insert/remove head Test" + +#define SPLAT_LIST_TEST3_ID 0x0c03 +#define SPLAT_LIST_TEST3_NAME "ins/rm tail" +#define SPLAT_LIST_TEST3_DESC "Insert/remove tail Test" + +#define SPLAT_LIST_TEST4_ID 0x0c04 +#define SPLAT_LIST_TEST4_NAME "insert_after" +#define SPLAT_LIST_TEST4_DESC "Insert_after Test" + +#define SPLAT_LIST_TEST5_ID 0x0c05 +#define SPLAT_LIST_TEST5_NAME "insert_before" +#define SPLAT_LIST_TEST5_DESC "Insert_before Test" + +#define SPLAT_LIST_TEST6_ID 0x0c06 +#define SPLAT_LIST_TEST6_NAME "remove" +#define SPLAT_LIST_TEST6_DESC "Remove Test" + +#define SPLAT_LIST_TEST7_ID 0x0c7 +#define SPLAT_LIST_TEST7_NAME "active" +#define SPLAT_LIST_TEST7_DESC "Active Test" + +/* It is important that li_node is not the first element, this + * ensures the list_d2l/list_object macros are working correctly. */ +typedef struct list_item { + int li_data; + list_node_t li_node; +} list_item_t; + +#define LIST_ORDER_STACK 0 +#define LIST_ORDER_QUEUE 1 + +static int +splat_list_test1(struct file *file, void *arg) +{ + list_t list; + + splat_vprint(file, SPLAT_LIST_TEST1_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + if (!list_is_empty(&list)) { + splat_vprint(file, SPLAT_LIST_TEST1_NAME, + "New list NOT empty%s\n", ""); + /* list_destroy() intentionally skipped to avoid assert */ + return -EEXIST; + } + + splat_vprint(file, SPLAT_LIST_TEST1_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + /* Validate the list has been destroyed */ + if (list_link_active(&list.list_head)) { + splat_vprint(file, SPLAT_LIST_TEST1_NAME, + "Destroyed list still active%s", ""); + return -EIO; + } + + return 0; +} + +static int +splat_list_validate(list_t *list, int size, int order, int mult) +{ + list_item_t *li; + int i; + + /* Walk all items in list from head to verify stack or queue + * ordering. We bound the for loop by size+1 to ensure that + * we still terminate if there is list corruption. We also + * intentionally make things a little more complex than they + * need to be by using list_head/list_next for queues, and + * list_tail/list_prev for stacks. This is simply done for + * coverage and to ensure these function are working right. + */ + for (i = 0, li = (order ? list_head(list) : list_tail(list)); + i < size + 1 && li != NULL; + i++, li = (order ? list_next(list, li) : list_prev(list, li))) + if (li->li_data != i * mult) + return -EIDRM; + + if (i != size) + return -E2BIG; + + return 0; +} + +static int +splat_list_test2(struct file *file, void *arg) +{ + list_t list; + list_item_t *li; + int i, list_size = 8, rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST2_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + /* Insert all items at the list head to form a stack */ + splat_vprint(file, SPLAT_LIST_TEST2_NAME, + "Adding %d items to list head\n", list_size); + for (i = 0; i < list_size; i++) { + li = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li == NULL) { + rc = -ENOMEM; + goto out; + } + + list_link_init(&li->li_node); + li->li_data = i; + list_insert_head(&list, li); + } + + splat_vprint(file, SPLAT_LIST_TEST2_NAME, + "Validating %d item list is a stack\n", list_size); + rc = splat_list_validate(&list, list_size, LIST_ORDER_STACK, 1); + if (rc) + splat_vprint(file, SPLAT_LIST_TEST2_NAME, + "List validation failed, %d\n", rc); +out: + /* Remove all items */ + splat_vprint(file, SPLAT_LIST_TEST2_NAME, + "Removing %d items from list head\n", list_size); + while ((li = list_remove_head(&list))) + kmem_free(li, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST2_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +static int +splat_list_test3(struct file *file, void *arg) +{ + list_t list; + list_item_t *li; + int i, list_size = 8, rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST3_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + /* Insert all items at the list tail to form a queue */ + splat_vprint(file, SPLAT_LIST_TEST3_NAME, + "Adding %d items to list tail\n", list_size); + for (i = 0; i < list_size; i++) { + li = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li == NULL) { + rc = -ENOMEM; + goto out; + } + + list_link_init(&li->li_node); + li->li_data = i; + list_insert_tail(&list, li); + } + + splat_vprint(file, SPLAT_LIST_TEST3_NAME, + "Validating %d item list is a queue\n", list_size); + rc = splat_list_validate(&list, list_size, LIST_ORDER_QUEUE, 1); + if (rc) + splat_vprint(file, SPLAT_LIST_TEST3_NAME, + "List validation failed, %d\n", rc); +out: + /* Remove all items */ + splat_vprint(file, SPLAT_LIST_TEST3_NAME, + "Removing %d items from list tail\n", list_size); + while ((li = list_remove_tail(&list))) + kmem_free(li, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST3_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +static int +splat_list_test4(struct file *file, void *arg) +{ + list_t list; + list_item_t *li_new, *li_last = NULL; + int i, list_size = 8, rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST4_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + /* Insert all items after the last item to form a queue */ + splat_vprint(file, SPLAT_LIST_TEST4_NAME, + "Adding %d items each after the last item\n", list_size); + for (i = 0; i < list_size; i++) { + li_new = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li_new == NULL) { + rc = -ENOMEM; + goto out; + } + + list_link_init(&li_new->li_node); + li_new->li_data = i; + list_insert_after(&list, li_last, li_new); + li_last = li_new; + } + + splat_vprint(file, SPLAT_LIST_TEST4_NAME, + "Validating %d item list is a queue\n", list_size); + rc = splat_list_validate(&list, list_size, LIST_ORDER_QUEUE, 1); + if (rc) + splat_vprint(file, SPLAT_LIST_TEST4_NAME, + "List validation failed, %d\n", rc); +out: + /* Remove all items */ + splat_vprint(file, SPLAT_LIST_TEST4_NAME, + "Removing %d items from list tail\n", list_size); + while ((li_new = list_remove_head(&list))) + kmem_free(li_new, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST4_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +static int +splat_list_test5(struct file *file, void *arg) +{ + list_t list; + list_item_t *li_new, *li_last = NULL; + int i, list_size = 8, rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST5_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + /* Insert all items before the last item to form a stack */ + splat_vprint(file, SPLAT_LIST_TEST5_NAME, + "Adding %d items each before the last item\n", list_size); + for (i = 0; i < list_size; i++) { + li_new = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li_new == NULL) { + rc = -ENOMEM; + goto out; + } + + list_link_init(&li_new->li_node); + li_new->li_data = i; + list_insert_before(&list, li_last, li_new); + li_last = li_new; + } + + splat_vprint(file, SPLAT_LIST_TEST5_NAME, + "Validating %d item list is a queue\n", list_size); + rc = splat_list_validate(&list, list_size, LIST_ORDER_STACK, 1); + if (rc) + splat_vprint(file, SPLAT_LIST_TEST5_NAME, + "List validation failed, %d\n", rc); +out: + /* Remove all items */ + splat_vprint(file, SPLAT_LIST_TEST5_NAME, + "Removing %d items from list tail\n", list_size); + while ((li_new = list_remove_tail(&list))) + kmem_free(li_new, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST5_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +static int +splat_list_test6(struct file *file, void *arg) +{ + list_t list; + list_item_t *li, *li_prev; + int i, list_size = 8, rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + /* Insert all items at the list tail to form a queue */ + splat_vprint(file, SPLAT_LIST_TEST6_NAME, + "Adding %d items to list tail\n", list_size); + for (i = 0; i < list_size; i++) { + li = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li == NULL) { + rc = -ENOMEM; + goto out; + } + + list_link_init(&li->li_node); + li->li_data = i; + list_insert_tail(&list, li); + } + + /* Remove all odd items from the queue */ + splat_vprint(file, SPLAT_LIST_TEST6_NAME, + "Removing %d odd items from the list\n", list_size >> 1); + for (li = list_head(&list); li != NULL; li = list_next(&list, li)) { + if (li->li_data % 2 == 1) { + li_prev = list_prev(&list, li); + list_remove(&list, li); + kmem_free(li, sizeof(list_item_t)); + li = li_prev; + } + } + + splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Validating %d item " + "list is a queue of only even elements\n", list_size / 2); + rc = splat_list_validate(&list, list_size / 2, LIST_ORDER_QUEUE, 2); + if (rc) + splat_vprint(file, SPLAT_LIST_TEST6_NAME, + "List validation failed, %d\n", rc); +out: + /* Remove all items */ + splat_vprint(file, SPLAT_LIST_TEST6_NAME, + "Removing %d items from list tail\n", list_size / 2); + while ((li = list_remove_tail(&list))) + kmem_free(li, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST6_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +static int +splat_list_test7(struct file *file, void *arg) +{ + list_t list; + list_item_t *li; + int rc = 0; + + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Creating list\n%s", ""); + list_create(&list, sizeof(list_item_t), offsetof(list_item_t, li_node)); + + li = kmem_alloc(sizeof(list_item_t), KM_SLEEP); + if (li == NULL) { + rc = -ENOMEM; + goto out; + } + + /* Validate newly initialized node is inactive */ + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Init list node\n%s", ""); + list_link_init(&li->li_node); + if (list_link_active(&li->li_node)) { + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Newly initialized " + "list node should inactive %p/%p\n", + li->li_node.prev, li->li_node.next); + rc = -EINVAL; + goto out_li; + } + + /* Validate node is active when linked in to a list */ + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Insert list node\n%s", ""); + list_insert_head(&list, li); + if (!list_link_active(&li->li_node)) { + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "List node " + "inserted in list should be active %p/%p\n", + li->li_node.prev, li->li_node.next); + rc = -EINVAL; + goto out; + } + + /* Validate node is inactive when removed from list */ + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Remove list node\n%s", ""); + list_remove(&list, li); + if (list_link_active(&li->li_node)) { + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "List node " + "removed from list should be inactive %p/%p\n", + li->li_node.prev, li->li_node.next); + rc = -EINVAL; + } +out_li: + kmem_free(li, sizeof(list_item_t)); +out: + /* Remove all items */ + while ((li = list_remove_head(&list))) + kmem_free(li, sizeof(list_item_t)); + + splat_vprint(file, SPLAT_LIST_TEST7_NAME, "Destroying list\n%s", ""); + list_destroy(&list); + + return rc; +} + +splat_subsystem_t * +splat_list_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_LIST_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_LIST_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_LIST; + + splat_test_init(sub, SPLAT_LIST_TEST1_NAME, SPLAT_LIST_TEST1_DESC, + SPLAT_LIST_TEST1_ID, splat_list_test1); + splat_test_init(sub, SPLAT_LIST_TEST2_NAME, SPLAT_LIST_TEST2_DESC, + SPLAT_LIST_TEST2_ID, splat_list_test2); + splat_test_init(sub, SPLAT_LIST_TEST3_NAME, SPLAT_LIST_TEST3_DESC, + SPLAT_LIST_TEST3_ID, splat_list_test3); + splat_test_init(sub, SPLAT_LIST_TEST4_NAME, SPLAT_LIST_TEST4_DESC, + SPLAT_LIST_TEST4_ID, splat_list_test4); + splat_test_init(sub, SPLAT_LIST_TEST5_NAME, SPLAT_LIST_TEST5_DESC, + SPLAT_LIST_TEST5_ID, splat_list_test5); + splat_test_init(sub, SPLAT_LIST_TEST6_NAME, SPLAT_LIST_TEST6_DESC, + SPLAT_LIST_TEST6_ID, splat_list_test6); + splat_test_init(sub, SPLAT_LIST_TEST7_NAME, SPLAT_LIST_TEST7_DESC, + SPLAT_LIST_TEST7_ID, splat_list_test7); + + return sub; +} + +void +splat_list_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_LIST_TEST7_ID); + splat_test_fini(sub, SPLAT_LIST_TEST6_ID); + splat_test_fini(sub, SPLAT_LIST_TEST5_ID); + splat_test_fini(sub, SPLAT_LIST_TEST4_ID); + splat_test_fini(sub, SPLAT_LIST_TEST3_ID); + splat_test_fini(sub, SPLAT_LIST_TEST2_ID); + splat_test_fini(sub, SPLAT_LIST_TEST1_ID); + + kfree(sub); +} + +int +splat_list_id(void) +{ + return SPLAT_SUBSYSTEM_LIST; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-mutex.c +++ linux-aws-4.15.0/spl/module/splat/splat-mutex.c @@ -0,0 +1,447 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Mutex Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_MUTEX_NAME "mutex" +#define SPLAT_MUTEX_DESC "Kernel Mutex Tests" + +#define SPLAT_MUTEX_TEST1_ID 0x0401 +#define SPLAT_MUTEX_TEST1_NAME "tryenter" +#define SPLAT_MUTEX_TEST1_DESC "Validate mutex_tryenter() correctness" + +#define SPLAT_MUTEX_TEST2_ID 0x0402 +#define SPLAT_MUTEX_TEST2_NAME "race" +#define SPLAT_MUTEX_TEST2_DESC "Many threads entering/exiting the mutex" + +#define SPLAT_MUTEX_TEST3_ID 0x0403 +#define SPLAT_MUTEX_TEST3_NAME "owned" +#define SPLAT_MUTEX_TEST3_DESC "Validate mutex_owned() correctness" + +#define SPLAT_MUTEX_TEST4_ID 0x0404 +#define SPLAT_MUTEX_TEST4_NAME "owner" +#define SPLAT_MUTEX_TEST4_DESC "Validate mutex_owner() correctness" + +#define SPLAT_MUTEX_TEST_MAGIC 0x115599DDUL +#define SPLAT_MUTEX_TEST_NAME "mutex_test" +#define SPLAT_MUTEX_TEST_TASKQ "mutex_taskq" +#define SPLAT_MUTEX_TEST_COUNT 128 + +typedef struct mutex_priv { + unsigned long mp_magic; + struct file *mp_file; + kmutex_t mp_mtx; + int mp_rc; + int mp_rc2; +} mutex_priv_t; + +static void +splat_mutex_test1_func(void *arg) +{ + mutex_priv_t *mp = (mutex_priv_t *)arg; + ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC); + + if (mutex_tryenter(&mp->mp_mtx)) { + mp->mp_rc = 0; + mutex_exit(&mp->mp_mtx); + } else { + mp->mp_rc = -EBUSY; + } +} + +static int +splat_mutex_test1(struct file *file, void *arg) +{ + mutex_priv_t *mp; + taskq_t *tq; + taskqid_t id; + int rc = 0; + + mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL); + if (mp == NULL) + return -ENOMEM; + + tq = taskq_create(SPLAT_MUTEX_TEST_TASKQ, 1, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE); + if (tq == NULL) { + rc = -ENOMEM; + goto out2; + } + + mp->mp_magic = SPLAT_MUTEX_TEST_MAGIC; + mp->mp_file = file; + mutex_init(&mp->mp_mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL); + mutex_enter(&mp->mp_mtx); + + /* + * Schedule a task function which will try and acquire the mutex via + * mutex_tryenter() while it's held. This should fail and the task + * function will indicate this status in the passed private data. + */ + mp->mp_rc = -EINVAL; + id = taskq_dispatch(tq, splat_mutex_test1_func, mp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + mutex_exit(&mp->mp_mtx); + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s", + "taskq_dispatch() failed\n"); + rc = -EINVAL; + goto out; + } + + taskq_wait_id(tq, id); + mutex_exit(&mp->mp_mtx); + + /* Task function successfully acquired mutex, very bad! */ + if (mp->mp_rc != -EBUSY) { + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, + "mutex_trylock() incorrectly succeeded when " + "the mutex was held, %d/%d\n", (int)id, mp->mp_rc); + rc = -EINVAL; + goto out; + } else { + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s", + "mutex_trylock() correctly failed when " + "the mutex was held\n"); + } + + /* + * Schedule a task function which will try and acquire the mutex via + * mutex_tryenter() while it is not held. This should succeed and + * can be verified by checking the private data. + */ + mp->mp_rc = -EINVAL; + id = taskq_dispatch(tq, splat_mutex_test1_func, mp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s", + "taskq_dispatch() failed\n"); + rc = -EINVAL; + goto out; + } + + taskq_wait_id(tq, id); + + /* Task function failed to acquire mutex, very bad! */ + if (mp->mp_rc != 0) { + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, + "mutex_trylock() incorrectly failed when the mutex " + "was not held, %d/%d\n", (int)id, mp->mp_rc); + rc = -EINVAL; + } else { + splat_vprint(file, SPLAT_MUTEX_TEST1_NAME, "%s", + "mutex_trylock() correctly succeeded " + "when the mutex was not held\n"); + } +out: + taskq_destroy(tq); + mutex_destroy(&(mp->mp_mtx)); +out2: + kfree(mp); + return rc; +} + +static void +splat_mutex_test2_func(void *arg) +{ + mutex_priv_t *mp = (mutex_priv_t *)arg; + int rc; + ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC); + + /* Read the value before sleeping and write it after we wake up to + * maximize the chance of a race if mutexs are not working properly */ + mutex_enter(&mp->mp_mtx); + rc = mp->mp_rc; + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ / 100); /* 1/100 of a second */ + VERIFY(mp->mp_rc == rc); + mp->mp_rc = rc + 1; + mutex_exit(&mp->mp_mtx); +} + +static int +splat_mutex_test2(struct file *file, void *arg) +{ + mutex_priv_t *mp; + taskq_t *tq; + taskqid_t id; + int i, rc = 0; + + mp = (mutex_priv_t *)kmalloc(sizeof(*mp), GFP_KERNEL); + if (mp == NULL) + return -ENOMEM; + + /* Create several threads allowing tasks to race with each other */ + tq = taskq_create(SPLAT_MUTEX_TEST_TASKQ, num_online_cpus(), + defclsyspri, 50, INT_MAX, TASKQ_PREPOPULATE); + if (tq == NULL) { + rc = -ENOMEM; + goto out; + } + + mp->mp_magic = SPLAT_MUTEX_TEST_MAGIC; + mp->mp_file = file; + mutex_init(&(mp->mp_mtx), SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL); + mp->mp_rc = 0; + + /* + * Schedule N work items to the work queue each of which enters the + * mutex, sleeps briefly, then exits the mutex. On a multiprocessor + * box these work items will be handled by all available CPUs. The + * task function checks to ensure the tracked shared variable is + * always only incremented by one. Additionally, the mutex itself + * is instrumented such that if any two processors are in the + * critical region at the same time the system will panic. If the + * mutex is implemented right this will never happy, that's a pass. + */ + for (i = 0; i < SPLAT_MUTEX_TEST_COUNT; i++) { + id = taskq_dispatch(tq, splat_mutex_test2_func, mp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_MUTEX_TEST2_NAME, + "Failed to queue task %d\n", i); + rc = -EINVAL; + } + } + + taskq_wait(tq); + + if (mp->mp_rc == SPLAT_MUTEX_TEST_COUNT) { + splat_vprint(file, SPLAT_MUTEX_TEST2_NAME, "%d racing threads " + "correctly entered/exited the mutex %d times\n", + num_online_cpus(), mp->mp_rc); + } else { + splat_vprint(file, SPLAT_MUTEX_TEST2_NAME, "%d racing threads " + "only processed %d/%d mutex work items\n", + num_online_cpus(),mp->mp_rc,SPLAT_MUTEX_TEST_COUNT); + rc = -EINVAL; + } + + taskq_destroy(tq); + mutex_destroy(&(mp->mp_mtx)); +out: + kfree(mp); + return rc; +} + +static void +splat_mutex_owned(void *priv) +{ + mutex_priv_t *mp = (mutex_priv_t *)priv; + + ASSERT(mp->mp_magic == SPLAT_MUTEX_TEST_MAGIC); + mp->mp_rc = mutex_owned(&mp->mp_mtx); + mp->mp_rc2 = MUTEX_HELD(&mp->mp_mtx); +} + +static int +splat_mutex_test3(struct file *file, void *arg) +{ + mutex_priv_t mp; + taskq_t *tq; + taskqid_t id; + int rc = 0; + + mp.mp_magic = SPLAT_MUTEX_TEST_MAGIC; + mp.mp_file = file; + mutex_init(&mp.mp_mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL); + + if ((tq = taskq_create(SPLAT_MUTEX_TEST_NAME, 1, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Taskq '%s' " + "create failed\n", SPLAT_MUTEX_TEST3_NAME); + return -EINVAL; + } + + mutex_enter(&mp.mp_mtx); + + /* Mutex should be owned by current */ + if (!mutex_owned(&mp.mp_mtx)) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Unowned mutex " + "should be owned by pid %d\n", current->pid); + rc = -EINVAL; + goto out_exit; + } + + id = taskq_dispatch(tq, splat_mutex_owned, &mp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Failed to " + "dispatch function '%s' to taskq\n", + sym2str(splat_mutex_owned)); + rc = -EINVAL; + goto out_exit; + } + taskq_wait(tq); + + /* Mutex should not be owned which checked from a different thread */ + if (mp.mp_rc || mp.mp_rc2) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by " + "pid %d not by taskq\n", current->pid); + rc = -EINVAL; + goto out_exit; + } + + mutex_exit(&mp.mp_mtx); + + /* Mutex should not be owned by current */ + if (mutex_owned(&mp.mp_mtx)) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by " + "pid %d it should be unowned\b", current->pid); + rc = -EINVAL; + goto out; + } + + id = taskq_dispatch(tq, splat_mutex_owned, &mp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Failed to " + "dispatch function '%s' to taskq\n", + sym2str(splat_mutex_owned)); + rc = -EINVAL; + goto out; + } + taskq_wait(tq); + + /* Mutex should be owned by no one */ + if (mp.mp_rc || mp.mp_rc2) { + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "Mutex owned by " + "no one, %d/%d disagrees\n", mp.mp_rc, mp.mp_rc2); + rc = -EINVAL; + goto out; + } + + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "%s", + "Correct mutex_owned() behavior\n"); + goto out; +out_exit: + mutex_exit(&mp.mp_mtx); +out: + mutex_destroy(&mp.mp_mtx); + taskq_destroy(tq); + + return rc; +} + +static int +splat_mutex_test4(struct file *file, void *arg) +{ + kmutex_t mtx; + kthread_t *owner; + int rc = 0; + + mutex_init(&mtx, SPLAT_MUTEX_TEST_NAME, MUTEX_DEFAULT, NULL); + + /* + * Verify mutex owner is cleared after being dropped. Depending + * on how you build your kernel this behavior changes, ensure the + * SPL mutex implementation is properly detecting this. + */ + mutex_enter(&mtx); + msleep(100); + mutex_exit(&mtx); + if (MUTEX_HELD(&mtx)) { + splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should " + "not be held, bit is by %p\n", mutex_owner(&mtx)); + rc = -EINVAL; + goto out; + } + + mutex_enter(&mtx); + + /* Mutex should be owned by current */ + owner = mutex_owner(&mtx); + if (current != owner) { + splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should " + "be owned by pid %d but is owned by pid %d\n", + current->pid, owner ? owner->pid : -1); + rc = -EINVAL; + goto out; + } + + mutex_exit(&mtx); + + /* Mutex should not be owned by any task */ + owner = mutex_owner(&mtx); + if (owner) { + splat_vprint(file, SPLAT_MUTEX_TEST4_NAME, "Mutex should not " + "be owned but is owned by pid %d\n", owner->pid); + rc = -EINVAL; + goto out; + } + + splat_vprint(file, SPLAT_MUTEX_TEST3_NAME, "%s", + "Correct mutex_owner() behavior\n"); +out: + mutex_destroy(&mtx); + + return rc; +} + +splat_subsystem_t * +splat_mutex_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_MUTEX_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_MUTEX_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_MUTEX; + + splat_test_init(sub, SPLAT_MUTEX_TEST1_NAME, SPLAT_MUTEX_TEST1_DESC, + SPLAT_MUTEX_TEST1_ID, splat_mutex_test1); + splat_test_init(sub, SPLAT_MUTEX_TEST2_NAME, SPLAT_MUTEX_TEST2_DESC, + SPLAT_MUTEX_TEST2_ID, splat_mutex_test2); + splat_test_init(sub, SPLAT_MUTEX_TEST3_NAME, SPLAT_MUTEX_TEST3_DESC, + SPLAT_MUTEX_TEST3_ID, splat_mutex_test3); + splat_test_init(sub, SPLAT_MUTEX_TEST4_NAME, SPLAT_MUTEX_TEST4_DESC, + SPLAT_MUTEX_TEST4_ID, splat_mutex_test4); + + return sub; +} + +void +splat_mutex_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_MUTEX_TEST4_ID); + splat_test_fini(sub, SPLAT_MUTEX_TEST3_ID); + splat_test_fini(sub, SPLAT_MUTEX_TEST2_ID); + splat_test_fini(sub, SPLAT_MUTEX_TEST1_ID); + + kfree(sub); +} + +int +splat_mutex_id(void) { + return SPLAT_SUBSYSTEM_MUTEX; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-random.c +++ linux-aws-4.15.0/spl/module/splat/splat-random.c @@ -0,0 +1,130 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Random Number Generator Tests. +\*****************************************************************************/ + +#include +#include +#include "splat-internal.h" + +#define SPLAT_KRNG_NAME "krng" +#define SPLAT_KRNG_DESC "Kernel Random Number Generator Tests" + +#define SPLAT_KRNG_TEST1_ID 0x0301 +#define SPLAT_KRNG_TEST1_NAME "freq" +#define SPLAT_KRNG_TEST1_DESC "Frequency Test" + +#define KRNG_NUM_BITS 1048576 +#define KRNG_NUM_BYTES (KRNG_NUM_BITS >> 3) +#define KRNG_NUM_BITS_DIV2 (KRNG_NUM_BITS >> 1) +#define KRNG_ERROR_RANGE 2097 + +/* Random Number Generator Tests + There can be meny more tests on quality of the + random number generator. For now we are only + testing the frequency of particular bits. + We could also test consecutive sequences, + randomness within a particular block, etc. + but is probably not necessary for our purposes */ + +static int +splat_krng_test1(struct file *file, void *arg) +{ + uint8_t *buf; + int i, j, diff, num = 0, rc = 0; + + buf = kmalloc(sizeof(*buf) * KRNG_NUM_BYTES, GFP_KERNEL); + if (buf == NULL) { + rc = -ENOMEM; + goto out; + } + + memset(buf, 0, sizeof(*buf) * KRNG_NUM_BYTES); + + /* Always succeeds */ + random_get_pseudo_bytes(buf, sizeof(uint8_t) * KRNG_NUM_BYTES); + + for (i = 0; i < KRNG_NUM_BYTES; i++) { + uint8_t tmp = buf[i]; + for (j = 0; j < 8; j++) { + uint8_t tmp2 = ((tmp >> j) & 0x01); + if (tmp2 == 1) { + num++; + } + } + } + + kfree(buf); + + diff = KRNG_NUM_BITS_DIV2 - num; + if (diff < 0) + diff *= -1; + + splat_print(file, "Test 1 Number of ones: %d\n", num); + splat_print(file, "Test 1 Difference from expected: %d Allowed: %d\n", + diff, KRNG_ERROR_RANGE); + + if (diff > KRNG_ERROR_RANGE) + rc = -ERANGE; +out: + return rc; +} + +splat_subsystem_t * +splat_krng_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_KRNG_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_KRNG_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_KRNG; + + splat_test_init(sub, SPLAT_KRNG_TEST1_NAME, SPLAT_KRNG_TEST1_DESC, + SPLAT_KRNG_TEST1_ID, splat_krng_test1); + + return sub; +} + +void +splat_krng_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_KRNG_TEST1_ID); + + kfree(sub); +} + +int +splat_krng_id(void) { + return SPLAT_SUBSYSTEM_KRNG; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-rwlock.c +++ linux-aws-4.15.0/spl/module/splat/splat-rwlock.c @@ -0,0 +1,747 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Read/Writer Lock Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_RWLOCK_NAME "rwlock" +#define SPLAT_RWLOCK_DESC "Kernel RW Lock Tests" + +#define SPLAT_RWLOCK_TEST1_ID 0x0701 +#define SPLAT_RWLOCK_TEST1_NAME "N-rd/1-wr" +#define SPLAT_RWLOCK_TEST1_DESC "Multiple readers one writer" + +#define SPLAT_RWLOCK_TEST2_ID 0x0702 +#define SPLAT_RWLOCK_TEST2_NAME "0-rd/N-wr" +#define SPLAT_RWLOCK_TEST2_DESC "Multiple writers" + +#define SPLAT_RWLOCK_TEST3_ID 0x0703 +#define SPLAT_RWLOCK_TEST3_NAME "held" +#define SPLAT_RWLOCK_TEST3_DESC "RW_{LOCK|READ|WRITE}_HELD" + +#define SPLAT_RWLOCK_TEST4_ID 0x0704 +#define SPLAT_RWLOCK_TEST4_NAME "tryenter" +#define SPLAT_RWLOCK_TEST4_DESC "Tryenter" + +#define SPLAT_RWLOCK_TEST5_ID 0x0705 +#define SPLAT_RWLOCK_TEST5_NAME "rw_downgrade" +#define SPLAT_RWLOCK_TEST5_DESC "Write downgrade" + +#define SPLAT_RWLOCK_TEST6_ID 0x0706 +#define SPLAT_RWLOCK_TEST6_NAME "rw_tryupgrade-1" +#define SPLAT_RWLOCK_TEST6_DESC "rwsem->count value" + +#define SPLAT_RWLOCK_TEST7_ID 0x0707 +#define SPLAT_RWLOCK_TEST7_NAME "rw_tryupgrade-2" +#define SPLAT_RWLOCK_TEST7_DESC "Read upgrade" + +#define SPLAT_RWLOCK_TEST_MAGIC 0x115599DDUL +#define SPLAT_RWLOCK_TEST_NAME "rwlock_test" +#define SPLAT_RWLOCK_TEST_TASKQ "rwlock_taskq" +#define SPLAT_RWLOCK_TEST_COUNT 8 + +#define SPLAT_RWLOCK_RELEASE_INIT 0 +#define SPLAT_RWLOCK_RELEASE_WR 1 +#define SPLAT_RWLOCK_RELEASE_RD 2 + +typedef struct rw_priv { + unsigned long rw_magic; + struct file *rw_file; + krwlock_t rw_rwlock; + spinlock_t rw_lock; + spl_wait_queue_head_t rw_waitq; + int rw_completed; + int rw_holders; + int rw_waiters; + int rw_release; + int rw_rc; + krw_t rw_type; +} rw_priv_t; + +typedef struct rw_thr { + const char *rwt_name; + rw_priv_t *rwt_rwp; + struct task_struct *rwt_thread; +} rw_thr_t; + +void splat_init_rw_priv(rw_priv_t *rwp, struct file *file) +{ + rwp->rw_magic = SPLAT_RWLOCK_TEST_MAGIC; + rwp->rw_file = file; + rw_init(&rwp->rw_rwlock, SPLAT_RWLOCK_TEST_NAME, RW_DEFAULT, NULL); + spin_lock_init(&rwp->rw_lock); + init_waitqueue_head(&rwp->rw_waitq); + rwp->rw_completed = 0; + rwp->rw_holders = 0; + rwp->rw_waiters = 0; + rwp->rw_release = SPLAT_RWLOCK_RELEASE_INIT; + rwp->rw_rc = 0; + rwp->rw_type = 0; +} + +#if defined(CONFIG_PREEMPT_RT_FULL) +static int +splat_rwlock_test1(struct file *file, void *arg) +{ + /* + * This test will never succeed on PREEMPT_RT_FULL because these + * kernels only allow a single thread to hold the lock. + */ + return 0; +} +#else +static int +splat_rwlock_wr_thr(void *arg) +{ + rw_thr_t *rwt = (rw_thr_t *)arg; + rw_priv_t *rwp = rwt->rwt_rwp; + uint8_t rnd; + + ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC); + + get_random_bytes((void *)&rnd, 1); + msleep((unsigned int)rnd); + + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s trying to acquire rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + spin_lock(&rwp->rw_lock); + rwp->rw_waiters++; + spin_unlock(&rwp->rw_lock); + rw_enter(&rwp->rw_rwlock, RW_WRITER); + + spin_lock(&rwp->rw_lock); + rwp->rw_waiters--; + rwp->rw_holders++; + spin_unlock(&rwp->rw_lock); + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s acquired rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + + /* Wait for control thread to signal we can release the write lock */ + wait_event_interruptible(rwp->rw_waitq, splat_locked_test(&rwp->rw_lock, + rwp->rw_release == SPLAT_RWLOCK_RELEASE_WR)); + + spin_lock(&rwp->rw_lock); + rwp->rw_completed++; + rwp->rw_holders--; + spin_unlock(&rwp->rw_lock); + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s dropped rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + + rw_exit(&rwp->rw_rwlock); + + return 0; +} + +static int +splat_rwlock_rd_thr(void *arg) +{ + rw_thr_t *rwt = (rw_thr_t *)arg; + rw_priv_t *rwp = rwt->rwt_rwp; + uint8_t rnd; + + ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC); + + get_random_bytes((void *)&rnd, 1); + msleep((unsigned int)rnd); + + /* Don't try and take the semaphore until after someone has it */ + wait_event_interruptible(rwp->rw_waitq, + splat_locked_test(&rwp->rw_lock, rwp->rw_holders > 0)); + + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s trying to acquire rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + spin_lock(&rwp->rw_lock); + rwp->rw_waiters++; + spin_unlock(&rwp->rw_lock); + rw_enter(&rwp->rw_rwlock, RW_READER); + + spin_lock(&rwp->rw_lock); + rwp->rw_waiters--; + rwp->rw_holders++; + spin_unlock(&rwp->rw_lock); + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s acquired rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + + /* Wait for control thread to signal we can release the read lock */ + wait_event_interruptible(rwp->rw_waitq, splat_locked_test(&rwp->rw_lock, + rwp->rw_release == SPLAT_RWLOCK_RELEASE_RD)); + + spin_lock(&rwp->rw_lock); + rwp->rw_completed++; + rwp->rw_holders--; + spin_unlock(&rwp->rw_lock); + splat_vprint(rwp->rw_file, rwt->rwt_name, + "%s dropped rwlock (%d holding/%d waiting)\n", + rwt->rwt_thread->comm, rwp->rw_holders, rwp->rw_waiters); + + rw_exit(&rwp->rw_rwlock); + + return 0; +} + +static int +splat_rwlock_test1(struct file *file, void *arg) +{ + int i, count = 0, rc = 0; + rw_thr_t rwt[SPLAT_RWLOCK_TEST_COUNT]; + rw_priv_t *rwp; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + /* Create some threads, the exact number isn't important just as + * long as we know how many we managed to create and should expect. */ + for (i = 0; i < SPLAT_RWLOCK_TEST_COUNT; i++) { + rwt[i].rwt_rwp = rwp; + rwt[i].rwt_name = SPLAT_RWLOCK_TEST1_NAME; + + /* The first thread will be the writer */ + if (i == 0) + rwt[i].rwt_thread = spl_kthread_create(splat_rwlock_wr_thr, + &rwt[i], "%s/%d", SPLAT_RWLOCK_TEST_NAME, i); + else + rwt[i].rwt_thread = spl_kthread_create(splat_rwlock_rd_thr, + &rwt[i], "%s/%d", SPLAT_RWLOCK_TEST_NAME, i); + + if (!IS_ERR(rwt[i].rwt_thread)) { + wake_up_process(rwt[i].rwt_thread); + count++; + } + } + + /* Wait for the writer */ + while (splat_locked_test(&rwp->rw_lock, rwp->rw_holders == 0)) { + wake_up_interruptible(&rwp->rw_waitq); + msleep(100); + } + + /* Wait for 'count-1' readers */ + while (splat_locked_test(&rwp->rw_lock, rwp->rw_waiters < count - 1)) { + wake_up_interruptible(&rwp->rw_waitq); + msleep(100); + } + + /* Verify there is only one lock holder */ + if (splat_locked_test(&rwp->rw_lock, rwp->rw_holders) != 1) { + splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only 1 holder " + "expected for rwlock (%d holding/%d waiting)\n", + rwp->rw_holders, rwp->rw_waiters); + rc = -EINVAL; + } + + /* Verify 'count-1' readers */ + if (splat_locked_test(&rwp->rw_lock, rwp->rw_waiters != count - 1)) { + splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only %d waiters " + "expected for rwlock (%d holding/%d waiting)\n", + count - 1, rwp->rw_holders, rwp->rw_waiters); + rc = -EINVAL; + } + + /* Signal the writer to release, allows readers to acquire */ + spin_lock(&rwp->rw_lock); + rwp->rw_release = SPLAT_RWLOCK_RELEASE_WR; + wake_up_interruptible(&rwp->rw_waitq); + spin_unlock(&rwp->rw_lock); + + /* Wait for 'count-1' readers to hold the lock */ + while (splat_locked_test(&rwp->rw_lock, rwp->rw_holders < count - 1)) { + wake_up_interruptible(&rwp->rw_waitq); + msleep(100); + } + + /* Verify there are 'count-1' readers */ + if (splat_locked_test(&rwp->rw_lock, rwp->rw_holders != count - 1)) { + splat_vprint(file, SPLAT_RWLOCK_TEST1_NAME, "Only %d holders " + "expected for rwlock (%d holding/%d waiting)\n", + count - 1, rwp->rw_holders, rwp->rw_waiters); + rc = -EINVAL; + } + + /* Release 'count-1' readers */ + spin_lock(&rwp->rw_lock); + rwp->rw_release = SPLAT_RWLOCK_RELEASE_RD; + wake_up_interruptible(&rwp->rw_waitq); + spin_unlock(&rwp->rw_lock); + + /* Wait for the test to complete */ + while (splat_locked_test(&rwp->rw_lock, + rwp->rw_holders>0 || rwp->rw_waiters>0)) + msleep(100); + + rw_destroy(&(rwp->rw_rwlock)); + kfree(rwp); + + return rc; +} +#endif + +static void +splat_rwlock_test2_func(void *arg) +{ + rw_priv_t *rwp = (rw_priv_t *)arg; + int rc; + ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC); + + /* Read the value before sleeping and write it after we wake up to + * maximize the chance of a race if rwlocks are not working properly */ + rw_enter(&rwp->rw_rwlock, RW_WRITER); + rc = rwp->rw_rc; + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(HZ / 100); /* 1/100 of a second */ + VERIFY(rwp->rw_rc == rc); + rwp->rw_rc = rc + 1; + rw_exit(&rwp->rw_rwlock); +} + +static int +splat_rwlock_test2(struct file *file, void *arg) +{ + rw_priv_t *rwp; + taskq_t *tq; + int i, rc = 0, tq_count = 256; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + /* Create several threads allowing tasks to race with each other */ + tq = taskq_create(SPLAT_RWLOCK_TEST_TASKQ, num_online_cpus(), + defclsyspri, 50, INT_MAX, TASKQ_PREPOPULATE); + if (tq == NULL) { + rc = -ENOMEM; + goto out; + } + + /* + * Schedule N work items to the work queue each of which enters the + * writer rwlock, sleeps briefly, then exits the writer rwlock. On a + * multiprocessor box these work items will be handled by all available + * CPUs. The task function checks to ensure the tracked shared variable + * is always only incremented by one. Additionally, the rwlock itself + * is instrumented such that if any two processors are in the + * critical region at the same time the system will panic. If the + * rwlock is implemented right this will never happy, that's a pass. + */ + for (i = 0; i < tq_count; i++) { + if (taskq_dispatch(tq, splat_rwlock_test2_func, rwp, + TQ_SLEEP) == TASKQID_INVALID) { + splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME, + "Failed to queue task %d\n", i); + rc = -EINVAL; + } + } + + taskq_wait(tq); + + if (rwp->rw_rc == tq_count) { + splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME, "%d racing threads " + "correctly entered/exited the rwlock %d times\n", + num_online_cpus(), rwp->rw_rc); + } else { + splat_vprint(file, SPLAT_RWLOCK_TEST2_NAME, "%d racing threads " + "only processed %d/%d w rwlock work items\n", + num_online_cpus(), rwp->rw_rc, tq_count); + rc = -EINVAL; + } + + taskq_destroy(tq); + rw_destroy(&(rwp->rw_rwlock)); +out: + kfree(rwp); + return rc; +} + +#define splat_rwlock_test3_helper(rwp,rex1,rex2,wex1,wex2,held_func,rc) \ +do { \ + int result, _rc1_, _rc2_, _rc3_, _rc4_; \ + \ + rc = 0; \ + rw_enter(&(rwp)->rw_rwlock, RW_READER); \ + _rc1_ = ((result = held_func(&(rwp)->rw_rwlock)) != rex1); \ + splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func \ + " returned %d (expected %d) when RW_READER\n", \ + _rc1_ ? "Fail " : "", result, rex1); \ + rw_exit(&(rwp)->rw_rwlock); \ + _rc2_ = ((result = held_func(&(rwp)->rw_rwlock)) != rex2); \ + splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func \ + " returned %d (expected %d) when !RW_READER\n", \ + _rc2_ ? "Fail " : "", result, rex2); \ + \ + rw_enter(&(rwp)->rw_rwlock, RW_WRITER); \ + _rc3_ = ((result = held_func(&(rwp)->rw_rwlock)) != wex1); \ + splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func \ + " returned %d (expected %d) when RW_WRITER\n", \ + _rc3_ ? "Fail " : "", result, wex1); \ + rw_exit(&(rwp)->rw_rwlock); \ + _rc4_ = ((result = held_func(&(rwp)->rw_rwlock)) != wex2); \ + splat_vprint(file, SPLAT_RWLOCK_TEST3_NAME, "%s" #held_func \ + " returned %d (expected %d) when !RW_WRITER\n", \ + _rc4_ ? "Fail " : "", result, wex2); \ + \ + rc = ((_rc1_ || _rc2_ || _rc3_ || _rc4_) ? -EINVAL : 0); \ +} while(0); + +static int +splat_rwlock_test3(struct file *file, void *arg) +{ + rw_priv_t *rwp; + int rc1, rc2, rc3; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + splat_rwlock_test3_helper(rwp, 1, 0, 1, 0, RW_LOCK_HELD, rc1); + splat_rwlock_test3_helper(rwp, 1, 0, 0, 0, RW_READ_HELD, rc2); + splat_rwlock_test3_helper(rwp, 0, 0, 1, 0, RW_WRITE_HELD, rc3); + + rw_destroy(&rwp->rw_rwlock); + kfree(rwp); + + return ((rc1 || rc2 || rc3) ? -EINVAL : 0); +} + +static void +splat_rwlock_test4_func(void *arg) +{ + rw_priv_t *rwp = (rw_priv_t *)arg; + ASSERT(rwp->rw_magic == SPLAT_RWLOCK_TEST_MAGIC); + + if (rw_tryenter(&rwp->rw_rwlock, rwp->rw_type)) { + rwp->rw_rc = 0; + rw_exit(&rwp->rw_rwlock); + } else { + rwp->rw_rc = -EBUSY; + } +} + +static char * +splat_rwlock_test4_name(krw_t type) +{ + switch (type) { + case RW_NONE: return "RW_NONE"; + case RW_WRITER: return "RW_WRITER"; + case RW_READER: return "RW_READER"; + } + + return NULL; +} + +static int +splat_rwlock_test4_type(taskq_t *tq, rw_priv_t *rwp, int expected_rc, + krw_t holder_type, krw_t try_type) +{ + int id, rc = 0; + + /* Schedule a task function which will try and acquire the rwlock + * using type try_type while the rwlock is being held as holder_type. + * The result must match expected_rc for the test to pass */ + rwp->rw_rc = -EINVAL; + rwp->rw_type = try_type; + + if (holder_type == RW_WRITER || holder_type == RW_READER) + rw_enter(&rwp->rw_rwlock, holder_type); + + id = taskq_dispatch(tq, splat_rwlock_test4_func, rwp, TQ_SLEEP); + if (id == TASKQID_INVALID) { + splat_vprint(rwp->rw_file, SPLAT_RWLOCK_TEST4_NAME, "%s", + "taskq_dispatch() failed\n"); + rc = -EINVAL; + goto out; + } + + taskq_wait_id(tq, id); + + if (rwp->rw_rc != expected_rc) + rc = -EINVAL; + + splat_vprint(rwp->rw_file, SPLAT_RWLOCK_TEST4_NAME, + "%srw_tryenter(%s) returned %d (expected %d) when %s\n", + rc ? "Fail " : "", splat_rwlock_test4_name(try_type), + rwp->rw_rc, expected_rc, + splat_rwlock_test4_name(holder_type)); +out: + if (holder_type == RW_WRITER || holder_type == RW_READER) + rw_exit(&rwp->rw_rwlock); + + return rc; +} + +static int +splat_rwlock_test4(struct file *file, void *arg) +{ + rw_priv_t *rwp; + taskq_t *tq; + int rc = 0, rc1, rc2, rc3, rc4, rc5, rc6; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + tq = taskq_create(SPLAT_RWLOCK_TEST_TASKQ, 1, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE); + if (tq == NULL) { + rc = -ENOMEM; + goto out; + } + + splat_init_rw_priv(rwp, file); + + /* + * Validate all combinations of rw_tryenter() contention. + * + * The concurrent reader test is modified for PREEMPT_RT_FULL + * kernels which do not permit concurrent read locks to be taken + * from different threads. The same thread is allowed to take + * the read lock multiple times. + */ + rc1 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_WRITER, RW_WRITER); + rc2 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_WRITER, RW_READER); + rc3 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_READER, RW_WRITER); +#if defined(CONFIG_PREEMPT_RT_FULL) + rc4 = splat_rwlock_test4_type(tq, rwp, -EBUSY, RW_READER, RW_READER); +#else + rc4 = splat_rwlock_test4_type(tq, rwp, 0, RW_READER, RW_READER); +#endif + rc5 = splat_rwlock_test4_type(tq, rwp, 0, RW_NONE, RW_WRITER); + rc6 = splat_rwlock_test4_type(tq, rwp, 0, RW_NONE, RW_READER); + + if (rc1 || rc2 || rc3 || rc4 || rc5 || rc6) + rc = -EINVAL; + + taskq_destroy(tq); +out: + rw_destroy(&(rwp->rw_rwlock)); + kfree(rwp); + + return rc; +} + +static int +splat_rwlock_test5(struct file *file, void *arg) +{ + rw_priv_t *rwp; + int rc = -EINVAL; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + rw_enter(&rwp->rw_rwlock, RW_WRITER); + if (!RW_WRITE_HELD(&rwp->rw_rwlock)) { + splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME, + "rwlock should be write lock: %d\n", + RW_WRITE_HELD(&rwp->rw_rwlock)); + goto out; + } + + rw_downgrade(&rwp->rw_rwlock); + if (!RW_READ_HELD(&rwp->rw_rwlock)) { + splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME, + "rwlock should be read lock: %d\n", + RW_READ_HELD(&rwp->rw_rwlock)); + goto out; + } + + rc = 0; + splat_vprint(file, SPLAT_RWLOCK_TEST5_NAME, "%s", + "rwlock properly downgraded\n"); +out: + rw_exit(&rwp->rw_rwlock); + rw_destroy(&rwp->rw_rwlock); + kfree(rwp); + + return rc; +} + +static int +splat_rwlock_test6(struct file *file, void *arg) +{ + rw_priv_t *rwp; + int rc; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + rw_enter(&rwp->rw_rwlock, RW_READER); + if (RWSEM_COUNT(SEM(&rwp->rw_rwlock)) != + SPL_RWSEM_SINGLE_READER_VALUE) { + splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME, + "We assumed single reader rwsem->count " + "should be %ld, but is %ld\n", + (long int)SPL_RWSEM_SINGLE_READER_VALUE, + (long int)RWSEM_COUNT(SEM(&rwp->rw_rwlock))); + rc = -ENOLCK; + goto out; + } + rw_exit(&rwp->rw_rwlock); + + rw_enter(&rwp->rw_rwlock, RW_WRITER); + if (RWSEM_COUNT(SEM(&rwp->rw_rwlock)) != + SPL_RWSEM_SINGLE_WRITER_VALUE) { + splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME, + "We assumed single writer rwsem->count " + "should be %ld, but is %ld\n", + (long int)SPL_RWSEM_SINGLE_WRITER_VALUE, + (long int)RWSEM_COUNT(SEM(&rwp->rw_rwlock))); + rc = -ENOLCK; + goto out; + } + rc = 0; + splat_vprint(file, SPLAT_RWLOCK_TEST6_NAME, "%s", + "rwsem->count same as we assumed\n"); +out: + rw_exit(&rwp->rw_rwlock); + rw_destroy(&rwp->rw_rwlock); + kfree(rwp); + + return rc; +} + +static int +splat_rwlock_test7(struct file *file, void *arg) +{ + rw_priv_t *rwp; + int rc; + + rwp = (rw_priv_t *)kmalloc(sizeof(*rwp), GFP_KERNEL); + if (rwp == NULL) + return -ENOMEM; + + splat_init_rw_priv(rwp, file); + + rw_enter(&rwp->rw_rwlock, RW_READER); + if (!RW_READ_HELD(&rwp->rw_rwlock)) { + splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, + "rwlock should be read lock: %d\n", + RW_READ_HELD(&rwp->rw_rwlock)); + rc = -ENOLCK; + goto out; + } + + /* With one reader upgrade should never fail. */ + rc = rw_tryupgrade(&rwp->rw_rwlock); + if (!rc) { + splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, + "rwlock failed upgrade from reader: %d\n", + RW_READ_HELD(&rwp->rw_rwlock)); + rc = -ENOLCK; + goto out; + } + + if (RW_READ_HELD(&rwp->rw_rwlock) || !RW_WRITE_HELD(&rwp->rw_rwlock)) { + splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, "rwlock should " + "have 0 (not %d) reader and 1 (not %d) writer\n", + RW_READ_HELD(&rwp->rw_rwlock), + RW_WRITE_HELD(&rwp->rw_rwlock)); + goto out; + } + + rc = 0; + splat_vprint(file, SPLAT_RWLOCK_TEST7_NAME, "%s", + "rwlock properly upgraded\n"); +out: + rw_exit(&rwp->rw_rwlock); + rw_destroy(&rwp->rw_rwlock); + kfree(rwp); + + return rc; +} + +splat_subsystem_t * +splat_rwlock_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_RWLOCK_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_RWLOCK_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_RWLOCK; + + splat_test_init(sub, SPLAT_RWLOCK_TEST1_NAME, SPLAT_RWLOCK_TEST1_DESC, + SPLAT_RWLOCK_TEST1_ID, splat_rwlock_test1); + splat_test_init(sub, SPLAT_RWLOCK_TEST2_NAME, SPLAT_RWLOCK_TEST2_DESC, + SPLAT_RWLOCK_TEST2_ID, splat_rwlock_test2); + splat_test_init(sub, SPLAT_RWLOCK_TEST3_NAME, SPLAT_RWLOCK_TEST3_DESC, + SPLAT_RWLOCK_TEST3_ID, splat_rwlock_test3); + splat_test_init(sub, SPLAT_RWLOCK_TEST4_NAME, SPLAT_RWLOCK_TEST4_DESC, + SPLAT_RWLOCK_TEST4_ID, splat_rwlock_test4); + splat_test_init(sub, SPLAT_RWLOCK_TEST5_NAME, SPLAT_RWLOCK_TEST5_DESC, + SPLAT_RWLOCK_TEST5_ID, splat_rwlock_test5); + splat_test_init(sub, SPLAT_RWLOCK_TEST6_NAME, SPLAT_RWLOCK_TEST6_DESC, + SPLAT_RWLOCK_TEST6_ID, splat_rwlock_test6); + splat_test_init(sub, SPLAT_RWLOCK_TEST7_NAME, SPLAT_RWLOCK_TEST7_DESC, + SPLAT_RWLOCK_TEST7_ID, splat_rwlock_test7); + + return sub; +} + +void +splat_rwlock_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_RWLOCK_TEST7_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST6_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST5_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST4_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST3_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST2_ID); + splat_test_fini(sub, SPLAT_RWLOCK_TEST1_ID); + kfree(sub); +} + +int +splat_rwlock_id(void) { + return SPLAT_SUBSYSTEM_RWLOCK; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-taskq.c +++ linux-aws-4.15.0/spl/module/splat/splat-taskq.c @@ -0,0 +1,1548 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Task Queue Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_TASKQ_NAME "taskq" +#define SPLAT_TASKQ_DESC "Kernel Task Queue Tests" + +#define SPLAT_TASKQ_TEST1_ID 0x0201 +#define SPLAT_TASKQ_TEST1_NAME "single" +#define SPLAT_TASKQ_TEST1_DESC "Single task queue, single task" + +#define SPLAT_TASKQ_TEST2_ID 0x0202 +#define SPLAT_TASKQ_TEST2_NAME "multiple" +#define SPLAT_TASKQ_TEST2_DESC "Multiple task queues, multiple tasks" + +#define SPLAT_TASKQ_TEST3_ID 0x0203 +#define SPLAT_TASKQ_TEST3_NAME "system" +#define SPLAT_TASKQ_TEST3_DESC "System task queue, multiple tasks" + +#define SPLAT_TASKQ_TEST4_ID 0x0204 +#define SPLAT_TASKQ_TEST4_NAME "wait" +#define SPLAT_TASKQ_TEST4_DESC "Multiple task waiting" + +#define SPLAT_TASKQ_TEST5_ID 0x0205 +#define SPLAT_TASKQ_TEST5_NAME "order" +#define SPLAT_TASKQ_TEST5_DESC "Correct task ordering" + +#define SPLAT_TASKQ_TEST6_ID 0x0206 +#define SPLAT_TASKQ_TEST6_NAME "front" +#define SPLAT_TASKQ_TEST6_DESC "Correct ordering with TQ_FRONT flag" + +#define SPLAT_TASKQ_TEST7_ID 0x0207 +#define SPLAT_TASKQ_TEST7_NAME "recurse" +#define SPLAT_TASKQ_TEST7_DESC "Single task queue, recursive dispatch" + +#define SPLAT_TASKQ_TEST8_ID 0x0208 +#define SPLAT_TASKQ_TEST8_NAME "contention" +#define SPLAT_TASKQ_TEST8_DESC "1 queue, 100 threads, 131072 tasks" + +#define SPLAT_TASKQ_TEST9_ID 0x0209 +#define SPLAT_TASKQ_TEST9_NAME "delay" +#define SPLAT_TASKQ_TEST9_DESC "Delayed task execution" + +#define SPLAT_TASKQ_TEST10_ID 0x020a +#define SPLAT_TASKQ_TEST10_NAME "cancel" +#define SPLAT_TASKQ_TEST10_DESC "Cancel task execution" + +#define SPLAT_TASKQ_TEST11_ID 0x020b +#define SPLAT_TASKQ_TEST11_NAME "dynamic" +#define SPLAT_TASKQ_TEST11_DESC "Dynamic task queue thread creation" + +#define SPLAT_TASKQ_ORDER_MAX 8 +#define SPLAT_TASKQ_DEPTH_MAX 16 + + +typedef struct splat_taskq_arg { + int flag; + int id; + atomic_t *count; + int order[SPLAT_TASKQ_ORDER_MAX]; + unsigned int depth; + clock_t expire; + taskq_t *tq; + taskq_ent_t *tqe; + spinlock_t lock; + struct file *file; + const char *name; +} splat_taskq_arg_t; + +typedef struct splat_taskq_id { + int id; + splat_taskq_arg_t *arg; +} splat_taskq_id_t; + +/* + * Create a taskq, queue a task, wait until task completes, ensure + * task ran properly, cleanup taskq. + */ +static void +splat_taskq_test13_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + + ASSERT(tq_arg); + splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST1_NAME, + "Taskq '%s' function '%s' setting flag\n", + tq_arg->name, sym2str(splat_taskq_test13_func)); + tq_arg->flag = 1; +} + +static int +splat_taskq_test1_impl(struct file *file, void *arg, boolean_t prealloc) +{ + taskq_t *tq; + taskqid_t id; + splat_taskq_arg_t tq_arg; + taskq_ent_t *tqe; + + tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP); + taskq_init_ent(tqe); + + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, + "Taskq '%s' creating (%s dispatch)\n", + SPLAT_TASKQ_TEST1_NAME, + prealloc ? "prealloc" : "dynamic"); + if ((tq = taskq_create(SPLAT_TASKQ_TEST1_NAME, 1, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, + "Taskq '%s' create failed\n", + SPLAT_TASKQ_TEST1_NAME); + kmem_free(tqe, sizeof (taskq_ent_t)); + return -EINVAL; + } + + tq_arg.flag = 0; + tq_arg.id = 0; + tq_arg.file = file; + tq_arg.name = SPLAT_TASKQ_TEST1_NAME; + + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, + "Taskq '%s' function '%s' dispatching\n", + tq_arg.name, sym2str(splat_taskq_test13_func)); + if (prealloc) { + taskq_dispatch_ent(tq, splat_taskq_test13_func, + &tq_arg, TQ_SLEEP, tqe); + id = tqe->tqent_id; + } else { + id = taskq_dispatch(tq, splat_taskq_test13_func, + &tq_arg, TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, + "Taskq '%s' function '%s' dispatch failed\n", + tq_arg.name, sym2str(splat_taskq_test13_func)); + kmem_free(tqe, sizeof (taskq_ent_t)); + taskq_destroy(tq); + return -EINVAL; + } + + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, "Taskq '%s' waiting\n", + tq_arg.name); + taskq_wait(tq); + splat_vprint(file, SPLAT_TASKQ_TEST1_NAME, "Taskq '%s' destroying\n", + tq_arg.name); + + kmem_free(tqe, sizeof (taskq_ent_t)); + taskq_destroy(tq); + + return (tq_arg.flag) ? 0 : -EINVAL; +} + +static int +splat_taskq_test1(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test1_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test1_impl(file, arg, B_TRUE); + + return rc; +} + +/* + * Create multiple taskq's, each with multiple tasks, wait until + * all tasks complete, ensure all tasks ran properly and in the + * correct order. Run order must be the same as the order submitted + * because we only have 1 thread per taskq. Finally cleanup the taskq. + */ +static void +splat_taskq_test2_func1(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + + ASSERT(tq_arg); + splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' function '%s' flag = %d = %d * 2\n", + tq_arg->name, tq_arg->id, + sym2str(splat_taskq_test2_func1), + tq_arg->flag * 2, tq_arg->flag); + tq_arg->flag *= 2; +} + +static void +splat_taskq_test2_func2(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + + ASSERT(tq_arg); + splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' function '%s' flag = %d = %d + 1\n", + tq_arg->name, tq_arg->id, + sym2str(splat_taskq_test2_func2), + tq_arg->flag + 1, tq_arg->flag); + tq_arg->flag += 1; +} + +#define TEST2_TASKQS 8 +#define TEST2_THREADS_PER_TASKQ 1 + +static int +splat_taskq_test2_impl(struct file *file, void *arg, boolean_t prealloc) { + taskq_t *tq[TEST2_TASKQS] = { NULL }; + taskqid_t id; + splat_taskq_arg_t *tq_args[TEST2_TASKQS] = { NULL }; + taskq_ent_t *func1_tqes = NULL; + taskq_ent_t *func2_tqes = NULL; + int i, rc = 0; + + func1_tqes = kmalloc(sizeof(*func1_tqes) * TEST2_TASKQS, GFP_KERNEL); + if (func1_tqes == NULL) { + rc = -ENOMEM; + goto out; + } + + func2_tqes = kmalloc(sizeof(*func2_tqes) * TEST2_TASKQS, GFP_KERNEL); + if (func2_tqes == NULL) { + rc = -ENOMEM; + goto out; + } + + for (i = 0; i < TEST2_TASKQS; i++) { + taskq_init_ent(&func1_tqes[i]); + taskq_init_ent(&func2_tqes[i]); + + tq_args[i] = kmalloc(sizeof (splat_taskq_arg_t), GFP_KERNEL); + if (tq_args[i] == NULL) { + rc = -ENOMEM; + break; + } + + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' creating (%s dispatch)\n", + SPLAT_TASKQ_TEST2_NAME, i, + prealloc ? "prealloc" : "dynamic"); + if ((tq[i] = taskq_create(SPLAT_TASKQ_TEST2_NAME, + TEST2_THREADS_PER_TASKQ, + defclsyspri, 50, INT_MAX, + TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' create failed\n", + SPLAT_TASKQ_TEST2_NAME, i); + rc = -EINVAL; + break; + } + + tq_args[i]->flag = i; + tq_args[i]->id = i; + tq_args[i]->file = file; + tq_args[i]->name = SPLAT_TASKQ_TEST2_NAME; + + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' function '%s' dispatching\n", + tq_args[i]->name, tq_args[i]->id, + sym2str(splat_taskq_test2_func1)); + if (prealloc) { + taskq_dispatch_ent(tq[i], splat_taskq_test2_func1, + tq_args[i], TQ_SLEEP, &func1_tqes[i]); + id = func1_tqes[i].tqent_id; + } else { + id = taskq_dispatch(tq[i], splat_taskq_test2_func1, + tq_args[i], TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' function '%s' dispatch " + "failed\n", tq_args[i]->name, tq_args[i]->id, + sym2str(splat_taskq_test2_func1)); + rc = -EINVAL; + break; + } + + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' function '%s' dispatching\n", + tq_args[i]->name, tq_args[i]->id, + sym2str(splat_taskq_test2_func2)); + if (prealloc) { + taskq_dispatch_ent(tq[i], splat_taskq_test2_func2, + tq_args[i], TQ_SLEEP, &func2_tqes[i]); + id = func2_tqes[i].tqent_id; + } else { + id = taskq_dispatch(tq[i], splat_taskq_test2_func2, + tq_args[i], TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, "Taskq " + "'%s/%d' function '%s' dispatch failed\n", + tq_args[i]->name, tq_args[i]->id, + sym2str(splat_taskq_test2_func2)); + rc = -EINVAL; + break; + } + } + + /* When rc is set we're effectively just doing cleanup here, so + * ignore new errors in that case. They just cause noise. */ + for (i = 0; i < TEST2_TASKQS; i++) { + if (tq_args[i] == NULL) + continue; + + if (tq[i] != NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' waiting\n", + tq_args[i]->name, tq_args[i]->id); + taskq_wait(tq[i]); + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d; destroying\n", + tq_args[i]->name, tq_args[i]->id); + + taskq_destroy(tq[i]); + + if (!rc && tq_args[i]->flag != ((i * 2) + 1)) { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' processed tasks " + "out of order; %d != %d\n", + tq_args[i]->name, tq_args[i]->id, + tq_args[i]->flag, i * 2 + 1); + rc = -EINVAL; + } else { + splat_vprint(file, SPLAT_TASKQ_TEST2_NAME, + "Taskq '%s/%d' processed tasks " + "in the correct order; %d == %d\n", + tq_args[i]->name, tq_args[i]->id, + tq_args[i]->flag, i * 2 + 1); + } + + kfree(tq_args[i]); + } + } +out: + if (func1_tqes) + kfree(func1_tqes); + + if (func2_tqes) + kfree(func2_tqes); + + return rc; +} + +static int +splat_taskq_test2(struct file *file, void *arg) { + int rc; + + rc = splat_taskq_test2_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test2_impl(file, arg, B_TRUE); + + return rc; +} + +/* + * Use the global system task queue with a single task, wait until task + * completes, ensure task ran properly. + */ +static int +splat_taskq_test3_impl(struct file *file, void *arg, boolean_t prealloc) +{ + taskqid_t id; + splat_taskq_arg_t *tq_arg; + taskq_ent_t *tqe; + int error; + + tq_arg = kmem_alloc(sizeof (splat_taskq_arg_t), KM_SLEEP); + tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP); + taskq_init_ent(tqe); + + tq_arg->flag = 0; + tq_arg->id = 0; + tq_arg->file = file; + tq_arg->name = SPLAT_TASKQ_TEST3_NAME; + + splat_vprint(file, SPLAT_TASKQ_TEST3_NAME, + "Taskq '%s' function '%s' %s dispatch\n", + tq_arg->name, sym2str(splat_taskq_test13_func), + prealloc ? "prealloc" : "dynamic"); + if (prealloc) { + taskq_dispatch_ent(system_taskq, splat_taskq_test13_func, + tq_arg, TQ_SLEEP, tqe); + id = tqe->tqent_id; + } else { + id = taskq_dispatch(system_taskq, splat_taskq_test13_func, + tq_arg, TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST3_NAME, + "Taskq '%s' function '%s' dispatch failed\n", + tq_arg->name, sym2str(splat_taskq_test13_func)); + kmem_free(tqe, sizeof (taskq_ent_t)); + kmem_free(tq_arg, sizeof (splat_taskq_arg_t)); + return -EINVAL; + } + + splat_vprint(file, SPLAT_TASKQ_TEST3_NAME, "Taskq '%s' waiting\n", + tq_arg->name); + taskq_wait(system_taskq); + + error = (tq_arg->flag) ? 0 : -EINVAL; + + kmem_free(tqe, sizeof (taskq_ent_t)); + kmem_free(tq_arg, sizeof (splat_taskq_arg_t)); + + return (error); +} + +static int +splat_taskq_test3(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test3_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test3_impl(file, arg, B_TRUE); + + return rc; +} + +/* + * Create a taskq and dispatch a large number of tasks to the queue. + * Then use taskq_wait() to block until all the tasks complete, then + * cross check that all the tasks ran by checking the shared atomic + * counter which is incremented in the task function. + * + * First we try with a large 'maxalloc' value, then we try with a small one. + * We should not drop tasks when TQ_SLEEP is used in taskq_dispatch(), even + * if the number of pending tasks is above maxalloc. + */ +static void +splat_taskq_test4_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + ASSERT(tq_arg); + + atomic_inc(tq_arg->count); +} + +static int +splat_taskq_test4_common(struct file *file, void *arg, int minalloc, + int maxalloc, int nr_tasks, boolean_t prealloc) +{ + taskq_t *tq; + taskqid_t id; + splat_taskq_arg_t tq_arg; + taskq_ent_t *tqes; + atomic_t count; + int i, j, rc = 0; + + tqes = kmalloc(sizeof(*tqes) * nr_tasks, GFP_KERNEL); + if (tqes == NULL) + return -ENOMEM; + + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, + "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n", + SPLAT_TASKQ_TEST4_NAME, + prealloc ? "prealloc" : "dynamic", + minalloc, maxalloc, nr_tasks); + if ((tq = taskq_create(SPLAT_TASKQ_TEST4_NAME, 1, defclsyspri, + minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, + "Taskq '%s' create failed\n", + SPLAT_TASKQ_TEST4_NAME); + rc = -EINVAL; + goto out_free; + } + + tq_arg.file = file; + tq_arg.name = SPLAT_TASKQ_TEST4_NAME; + tq_arg.count = &count; + + for (i = 1; i <= nr_tasks; i *= 2) { + atomic_set(tq_arg.count, 0); + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, + "Taskq '%s' function '%s' dispatched %d times\n", + tq_arg.name, sym2str(splat_taskq_test4_func), i); + + for (j = 0; j < i; j++) { + taskq_init_ent(&tqes[j]); + + if (prealloc) { + taskq_dispatch_ent(tq, splat_taskq_test4_func, + &tq_arg, TQ_SLEEP, &tqes[j]); + id = tqes[j].tqent_id; + } else { + id = taskq_dispatch(tq, splat_taskq_test4_func, + &tq_arg, TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, + "Taskq '%s' function '%s' dispatch " + "%d failed\n", tq_arg.name, + sym2str(splat_taskq_test4_func), j); + rc = -EINVAL; + goto out; + } + } + + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' " + "waiting for %d dispatches\n", tq_arg.name, i); + taskq_wait(tq); + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' " + "%d/%d dispatches finished\n", tq_arg.name, + atomic_read(&count), i); + if (atomic_read(&count) != i) { + rc = -ERANGE; + goto out; + + } + } +out: + splat_vprint(file, SPLAT_TASKQ_TEST4_NAME, "Taskq '%s' destroying\n", + tq_arg.name); + taskq_destroy(tq); + +out_free: + kfree(tqes); + + return rc; +} + +static int +splat_taskq_test4_impl(struct file *file, void *arg, boolean_t prealloc) +{ + int rc; + + rc = splat_taskq_test4_common(file, arg, 50, INT_MAX, 1024, prealloc); + if (rc) + return rc; + + rc = splat_taskq_test4_common(file, arg, 1, 1, 32, prealloc); + + return rc; +} + +static int +splat_taskq_test4(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test4_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test4_impl(file, arg, B_TRUE); + + return rc; +} + +/* + * Create a taskq and dispatch a specific sequence of tasks carefully + * crafted to validate the order in which tasks are processed. When + * there are multiple worker threads each thread will process the + * next pending task as soon as it completes its current task. This + * means that tasks do not strictly complete in order in which they + * were dispatched (increasing task id). This is fine but we need to + * verify taskq_wait_outstanding() blocks until the passed task id and + * all lower task ids complete. We do this by dispatching the following + * specific sequence of tasks each of which block for N time units. + * We then use taskq_wait_outstanding() to unblock at specific task id and + * verify the only the expected task ids have completed and in the + * correct order. The two cases of interest are: + * + * 1) Task ids larger than the waited for task id can run and + * complete as long as there is an available worker thread. + * 2) All task ids lower than the waited one must complete before + * unblocking even if the waited task id itself has completed. + * + * The following table shows each task id and how they will be + * scheduled. Each rows represent one time unit and each column + * one of the three worker threads. The places taskq_wait_outstanding() + * must unblock for a specific id are identified as well as the + * task ids which must have completed and their order. + * + * +-----+ <--- taskq_wait_outstanding(tq, 8) unblocks + * | | Required Completion Order: 1,2,4,5,3,8,6,7 + * +-----+ | + * | | | + * | | +-----+ + * | | | 8 | + * | | +-----+ <--- taskq_wait_outstanding(tq, 3) unblocks + * | | 7 | | Required Completion Order: 1,2,4,5,3 + * | +-----+ | + * | 6 | | | + * +-----+ | | + * | | 5 | | + * | +-----+ | + * | 4 | | | + * +-----+ | | + * | 1 | 2 | 3 | + * +-----+-----+-----+ + * + */ +static void +splat_taskq_test5_func(void *arg) +{ + splat_taskq_id_t *tq_id = (splat_taskq_id_t *)arg; + splat_taskq_arg_t *tq_arg = tq_id->arg; + int factor; + + /* Delays determined by above table */ + switch (tq_id->id) { + default: factor = 0; break; + case 1: case 8: factor = 1; break; + case 2: case 4: case 5: factor = 2; break; + case 6: case 7: factor = 4; break; + case 3: factor = 5; break; + } + + msleep(factor * 100); + splat_vprint(tq_arg->file, tq_arg->name, + "Taskqid %d complete for taskq '%s'\n", + tq_id->id, tq_arg->name); + + spin_lock(&tq_arg->lock); + tq_arg->order[tq_arg->flag] = tq_id->id; + tq_arg->flag++; + spin_unlock(&tq_arg->lock); +} + +static int +splat_taskq_test_order(splat_taskq_arg_t *tq_arg, int *order) +{ + int i, j; + + for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) { + if (tq_arg->order[i] != order[i]) { + splat_vprint(tq_arg->file, tq_arg->name, + "Taskq '%s' incorrect completion " + "order\n", tq_arg->name); + splat_vprint(tq_arg->file, tq_arg->name, + "%s", "Expected { "); + + for (j = 0; j < SPLAT_TASKQ_ORDER_MAX; j++) + splat_print(tq_arg->file, "%d ", order[j]); + + splat_print(tq_arg->file, "%s", "}\n"); + splat_vprint(tq_arg->file, tq_arg->name, + "%s", "Got { "); + + for (j = 0; j < SPLAT_TASKQ_ORDER_MAX; j++) + splat_print(tq_arg->file, "%d ", + tq_arg->order[j]); + + splat_print(tq_arg->file, "%s", "}\n"); + return -EILSEQ; + } + } + + splat_vprint(tq_arg->file, tq_arg->name, + "Taskq '%s' validated correct completion order\n", + tq_arg->name); + + return 0; +} + +static int +splat_taskq_test5_impl(struct file *file, void *arg, boolean_t prealloc) +{ + taskq_t *tq; + taskqid_t id; + splat_taskq_id_t tq_id[SPLAT_TASKQ_ORDER_MAX]; + splat_taskq_arg_t tq_arg; + int order1[SPLAT_TASKQ_ORDER_MAX] = { 1,2,4,5,3,0,0,0 }; + int order2[SPLAT_TASKQ_ORDER_MAX] = { 1,2,4,5,3,8,6,7 }; + taskq_ent_t *tqes; + int i, rc = 0; + + tqes = kmem_alloc(sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX, KM_SLEEP); + memset(tqes, 0, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX); + + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, + "Taskq '%s' creating (%s dispatch)\n", + SPLAT_TASKQ_TEST5_NAME, + prealloc ? "prealloc" : "dynamic"); + if ((tq = taskq_create(SPLAT_TASKQ_TEST5_NAME, 3, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, + "Taskq '%s' create failed\n", + SPLAT_TASKQ_TEST5_NAME); + return -EINVAL; + } + + tq_arg.flag = 0; + memset(&tq_arg.order, 0, sizeof(int) * SPLAT_TASKQ_ORDER_MAX); + spin_lock_init(&tq_arg.lock); + tq_arg.file = file; + tq_arg.name = SPLAT_TASKQ_TEST5_NAME; + + for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) { + taskq_init_ent(&tqes[i]); + + tq_id[i].id = i + 1; + tq_id[i].arg = &tq_arg; + + if (prealloc) { + taskq_dispatch_ent(tq, splat_taskq_test5_func, + &tq_id[i], TQ_SLEEP, &tqes[i]); + id = tqes[i].tqent_id; + } else { + id = taskq_dispatch(tq, splat_taskq_test5_func, + &tq_id[i], TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, + "Taskq '%s' function '%s' dispatch failed\n", + tq_arg.name, sym2str(splat_taskq_test5_func)); + rc = -EINVAL; + goto out; + } + + if (tq_id[i].id != id) { + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, + "Taskq '%s' expected taskqid %d got %d\n", + tq_arg.name, (int)tq_id[i].id, (int)id); + rc = -EINVAL; + goto out; + } + } + + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, "Taskq '%s' " + "waiting for taskqid %d completion\n", tq_arg.name, 3); + taskq_wait_outstanding(tq, 3); + if ((rc = splat_taskq_test_order(&tq_arg, order1))) + goto out; + + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, "Taskq '%s' " + "waiting for taskqid %d completion\n", tq_arg.name, 8); + taskq_wait_outstanding(tq, 8); + rc = splat_taskq_test_order(&tq_arg, order2); + +out: + splat_vprint(file, SPLAT_TASKQ_TEST5_NAME, + "Taskq '%s' destroying\n", tq_arg.name); + taskq_destroy(tq); + + kmem_free(tqes, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX); + + return rc; +} + +static int +splat_taskq_test5(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test5_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test5_impl(file, arg, B_TRUE); + + return rc; +} + +/* + * Create a single task queue with three threads. Dispatch 8 tasks, + * setting TQ_FRONT on only the last three. Sleep after + * dispatching tasks 1-3 to ensure they will run and hold the threads + * busy while we dispatch the remaining tasks. Verify that tasks 6-8 + * run before task 4-5. + * + * The following table shows each task id and how they will be + * scheduled. Each rows represent one time unit and each column + * one of the three worker threads. + * + * NB: The Horizontal Line is the LAST Time unit consumed by the Task, + * and must be included in the factor calculation. + * T + * 17-> +-----+ + * 16 | T6 | + * 15-> +-----+ | + * 14 | T6 | | + * 13-> | | 5 +-----+ + * 12 | | | T6 | + * 11-> | +-----| | + * 10 | 4 | T6 | | + * 9-> +-----+ | 8 | + * 8 | T5 | | | + * 7-> | | 7 +-----+ + * 6 | | | T7 | + * 5-> | +-----+ | + * 4 | 6 | T5 | | + * 3-> +-----+ | | + * 2 | T3 | | | + * 1 | 1 | 2 | 3 | + * 0 +-----+-----+-----+ + * + */ +static void +splat_taskq_test6_func(void *arg) +{ + /* Delays determined by above table */ + static const int factor[SPLAT_TASKQ_ORDER_MAX+1] = {0,3,5,7,6,6,5,6,6}; + + splat_taskq_id_t *tq_id = (splat_taskq_id_t *)arg; + splat_taskq_arg_t *tq_arg = tq_id->arg; + + splat_vprint(tq_arg->file, tq_arg->name, + "Taskqid %d starting for taskq '%s'\n", + tq_id->id, tq_arg->name); + + if (tq_id->id < SPLAT_TASKQ_ORDER_MAX+1) { + msleep(factor[tq_id->id] * 50); + } + + spin_lock(&tq_arg->lock); + tq_arg->order[tq_arg->flag] = tq_id->id; + tq_arg->flag++; + spin_unlock(&tq_arg->lock); + + splat_vprint(tq_arg->file, tq_arg->name, + "Taskqid %d complete for taskq '%s'\n", + tq_id->id, tq_arg->name); +} + +static int +splat_taskq_test6_impl(struct file *file, void *arg, boolean_t prealloc) +{ + taskq_t *tq; + taskqid_t id; + splat_taskq_id_t tq_id[SPLAT_TASKQ_ORDER_MAX]; + splat_taskq_arg_t tq_arg; + int order[SPLAT_TASKQ_ORDER_MAX] = { 1,2,3,6,7,8,4,5 }; + taskq_ent_t *tqes; + int i, rc = 0; + uint_t tflags; + + tqes = kmem_alloc(sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX, KM_SLEEP); + memset(tqes, 0, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX); + + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, + "Taskq '%s' creating (%s dispatch)\n", + SPLAT_TASKQ_TEST6_NAME, + prealloc ? "prealloc" : "dynamic"); + if ((tq = taskq_create(SPLAT_TASKQ_TEST6_NAME, 3, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, + "Taskq '%s' create failed\n", + SPLAT_TASKQ_TEST6_NAME); + return -EINVAL; + } + + tq_arg.flag = 0; + memset(&tq_arg.order, 0, sizeof(int) * SPLAT_TASKQ_ORDER_MAX); + spin_lock_init(&tq_arg.lock); + tq_arg.file = file; + tq_arg.name = SPLAT_TASKQ_TEST6_NAME; + + for (i = 0; i < SPLAT_TASKQ_ORDER_MAX; i++) { + taskq_init_ent(&tqes[i]); + + tq_id[i].id = i + 1; + tq_id[i].arg = &tq_arg; + tflags = TQ_SLEEP; + if (i > 4) + tflags |= TQ_FRONT; + + if (prealloc) { + taskq_dispatch_ent(tq, splat_taskq_test6_func, + &tq_id[i], tflags, &tqes[i]); + id = tqes[i].tqent_id; + } else { + id = taskq_dispatch(tq, splat_taskq_test6_func, + &tq_id[i], tflags); + } + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, + "Taskq '%s' function '%s' dispatch failed\n", + tq_arg.name, sym2str(splat_taskq_test6_func)); + rc = -EINVAL; + goto out; + } + + if (tq_id[i].id != id) { + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, + "Taskq '%s' expected taskqid %d got %d\n", + tq_arg.name, (int)tq_id[i].id, (int)id); + rc = -EINVAL; + goto out; + } + /* Sleep to let tasks 1-3 start executing. */ + if ( i == 2 ) + msleep(100); + } + + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, "Taskq '%s' " + "waiting for taskqid %d completion\n", tq_arg.name, + SPLAT_TASKQ_ORDER_MAX); + taskq_wait_outstanding(tq, SPLAT_TASKQ_ORDER_MAX); + rc = splat_taskq_test_order(&tq_arg, order); + +out: + splat_vprint(file, SPLAT_TASKQ_TEST6_NAME, + "Taskq '%s' destroying\n", tq_arg.name); + taskq_destroy(tq); + + kmem_free(tqes, sizeof(*tqes) * SPLAT_TASKQ_ORDER_MAX); + + return rc; +} + +static int +splat_taskq_test6(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test6_impl(file, arg, B_FALSE); + if (rc) + return rc; + + rc = splat_taskq_test6_impl(file, arg, B_TRUE); + + return rc; +} + +static void +splat_taskq_test7_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + taskqid_t id; + + ASSERT(tq_arg); + + if (tq_arg->depth >= SPLAT_TASKQ_DEPTH_MAX) + return; + + tq_arg->depth++; + + splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' function '%s' dispatching (depth = %u)\n", + tq_arg->name, sym2str(splat_taskq_test7_func), + tq_arg->depth); + + if (tq_arg->tqe) { + VERIFY(taskq_empty_ent(tq_arg->tqe)); + taskq_dispatch_ent(tq_arg->tq, splat_taskq_test7_func, + tq_arg, TQ_SLEEP, tq_arg->tqe); + id = tq_arg->tqe->tqent_id; + } else { + id = taskq_dispatch(tq_arg->tq, splat_taskq_test7_func, + tq_arg, TQ_SLEEP); + } + + if (id == TASKQID_INVALID) { + splat_vprint(tq_arg->file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' function '%s' dispatch failed " + "(depth = %u)\n", tq_arg->name, + sym2str(splat_taskq_test7_func), tq_arg->depth); + tq_arg->flag = -EINVAL; + return; + } +} + +static int +splat_taskq_test7_impl(struct file *file, void *arg, boolean_t prealloc) +{ + taskq_t *tq; + splat_taskq_arg_t *tq_arg; + taskq_ent_t *tqe; + int error; + + splat_vprint(file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' creating (%s dispatch)\n", + SPLAT_TASKQ_TEST7_NAME, + prealloc ? "prealloc" : "dynamic"); + if ((tq = taskq_create(SPLAT_TASKQ_TEST7_NAME, 1, defclsyspri, + 50, INT_MAX, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' create failed\n", + SPLAT_TASKQ_TEST7_NAME); + return -EINVAL; + } + + tq_arg = kmem_alloc(sizeof (splat_taskq_arg_t), KM_SLEEP); + tqe = kmem_alloc(sizeof (taskq_ent_t), KM_SLEEP); + + tq_arg->depth = 0; + tq_arg->flag = 0; + tq_arg->id = 0; + tq_arg->file = file; + tq_arg->name = SPLAT_TASKQ_TEST7_NAME; + tq_arg->tq = tq; + + if (prealloc) { + taskq_init_ent(tqe); + tq_arg->tqe = tqe; + } else { + tq_arg->tqe = NULL; + } + + splat_taskq_test7_func(tq_arg); + + if (tq_arg->flag == 0) { + splat_vprint(file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' waiting\n", tq_arg->name); + taskq_wait_outstanding(tq, SPLAT_TASKQ_DEPTH_MAX); + } + + error = (tq_arg->depth == SPLAT_TASKQ_DEPTH_MAX ? 0 : -EINVAL); + + splat_vprint(file, SPLAT_TASKQ_TEST7_NAME, + "Taskq '%s' destroying\n", tq_arg->name); + + kmem_free(tqe, sizeof (taskq_ent_t)); + kmem_free(tq_arg, sizeof (splat_taskq_arg_t)); + + taskq_destroy(tq); + + return (error); +} + +static int +splat_taskq_test7(struct file *file, void *arg) +{ + int rc; + + rc = splat_taskq_test7_impl(file, arg, B_FALSE); + if (rc) + return (rc); + + rc = splat_taskq_test7_impl(file, arg, B_TRUE); + + return (rc); +} + +static void +splat_taskq_throughput_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + ASSERT(tq_arg); + + atomic_inc(tq_arg->count); +} + +static int +splat_taskq_throughput(struct file *file, void *arg, const char *name, + int nthreads, int minalloc, int maxalloc, int flags, int tasks, + struct timespec *delta) +{ + taskq_t *tq; + taskqid_t id; + splat_taskq_arg_t tq_arg; + taskq_ent_t **tqes; + atomic_t count; + struct timespec start, stop; + int i, j, rc = 0; + + tqes = vmalloc(sizeof (*tqes) * tasks); + if (tqes == NULL) + return (-ENOMEM); + + memset(tqes, 0, sizeof (*tqes) * tasks); + + splat_vprint(file, name, "Taskq '%s' creating (%d/%d/%d/%d)\n", + name, nthreads, minalloc, maxalloc, tasks); + if ((tq = taskq_create(name, nthreads, defclsyspri, + minalloc, maxalloc, flags)) == NULL) { + splat_vprint(file, name, "Taskq '%s' create failed\n", name); + rc = -EINVAL; + goto out_free; + } + + tq_arg.file = file; + tq_arg.name = name; + tq_arg.count = &count; + atomic_set(tq_arg.count, 0); + + getnstimeofday(&start); + + for (i = 0; i < tasks; i++) { + tqes[i] = kmalloc(sizeof (taskq_ent_t), GFP_KERNEL); + if (tqes[i] == NULL) { + rc = -ENOMEM; + goto out; + } + + taskq_init_ent(tqes[i]); + taskq_dispatch_ent(tq, splat_taskq_throughput_func, + &tq_arg, TQ_SLEEP, tqes[i]); + id = tqes[i]->tqent_id; + + if (id == TASKQID_INVALID) { + splat_vprint(file, name, "Taskq '%s' function '%s' " + "dispatch %d failed\n", tq_arg.name, + sym2str(splat_taskq_throughput_func), i); + rc = -EINVAL; + goto out; + } + } + + splat_vprint(file, name, "Taskq '%s' waiting for %d dispatches\n", + tq_arg.name, tasks); + + taskq_wait(tq); + + if (delta != NULL) { + getnstimeofday(&stop); + *delta = timespec_sub(stop, start); + } + + splat_vprint(file, name, "Taskq '%s' %d/%d dispatches finished\n", + tq_arg.name, atomic_read(tq_arg.count), tasks); + + if (atomic_read(tq_arg.count) != tasks) + rc = -ERANGE; + +out: + splat_vprint(file, name, "Taskq '%s' destroying\n", tq_arg.name); + taskq_destroy(tq); +out_free: + for (j = 0; j < tasks && tqes[j] != NULL; j++) + kfree(tqes[j]); + + vfree(tqes); + + return (rc); +} + +/* + * Create a taskq with 100 threads and dispatch a huge number of trivial + * tasks to generate contention on tq->tq_lock. This test should always + * pass. The purpose is to provide a benchmark for measuring the + * effectiveness of taskq optimizations. + */ +#define TEST8_NUM_TASKS 0x20000 +#define TEST8_THREADS_PER_TASKQ 100 + +static int +splat_taskq_test8(struct file *file, void *arg) +{ + return (splat_taskq_throughput(file, arg, + SPLAT_TASKQ_TEST8_NAME, TEST8_THREADS_PER_TASKQ, + 1, INT_MAX, TASKQ_PREPOPULATE, TEST8_NUM_TASKS, NULL)); +} + +/* + * Create a taskq and dispatch a number of delayed tasks to the queue. + * For each task verify that it was run no early than requested. + */ +static void +splat_taskq_test9_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + ASSERT(tq_arg); + + if (ddi_time_after_eq(ddi_get_lbolt(), tq_arg->expire)) + atomic_inc(tq_arg->count); + + kmem_free(tq_arg, sizeof(splat_taskq_arg_t)); +} + +static int +splat_taskq_test9(struct file *file, void *arg) +{ + taskq_t *tq; + atomic_t count; + int i, rc = 0; + int minalloc = 1; + int maxalloc = 10; + int nr_tasks = 100; + + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, + "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n", + SPLAT_TASKQ_TEST9_NAME, "delay", minalloc, maxalloc, nr_tasks); + if ((tq = taskq_create(SPLAT_TASKQ_TEST9_NAME, 3, defclsyspri, + minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, + "Taskq '%s' create failed\n", SPLAT_TASKQ_TEST9_NAME); + return -EINVAL; + } + + atomic_set(&count, 0); + + for (i = 1; i <= nr_tasks; i++) { + splat_taskq_arg_t *tq_arg; + taskqid_t id; + uint32_t rnd; + + /* A random timeout in jiffies of at most 5 seconds */ + get_random_bytes((void *)&rnd, 4); + rnd = rnd % (5 * HZ); + + tq_arg = kmem_alloc(sizeof(splat_taskq_arg_t), KM_SLEEP); + tq_arg->file = file; + tq_arg->name = SPLAT_TASKQ_TEST9_NAME; + tq_arg->expire = ddi_get_lbolt() + rnd; + tq_arg->count = &count; + + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, + "Taskq '%s' delay dispatch %u jiffies\n", + SPLAT_TASKQ_TEST9_NAME, rnd); + + id = taskq_dispatch_delay(tq, splat_taskq_test9_func, + tq_arg, TQ_SLEEP, ddi_get_lbolt() + rnd); + + if (id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, + "Taskq '%s' delay dispatch failed\n", + SPLAT_TASKQ_TEST9_NAME); + kmem_free(tq_arg, sizeof(splat_taskq_arg_t)); + taskq_wait(tq); + rc = -EINVAL; + goto out; + } + } + + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' waiting for " + "%d delay dispatches\n", SPLAT_TASKQ_TEST9_NAME, nr_tasks); + + taskq_wait(tq); + if (atomic_read(&count) != nr_tasks) + rc = -ERANGE; + + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' %d/%d delay " + "dispatches finished on time\n", SPLAT_TASKQ_TEST9_NAME, + atomic_read(&count), nr_tasks); + splat_vprint(file, SPLAT_TASKQ_TEST9_NAME, "Taskq '%s' destroying\n", + SPLAT_TASKQ_TEST9_NAME); +out: + taskq_destroy(tq); + + return rc; +} + +/* + * Create a taskq and dispatch then cancel tasks in the queue. + */ +static void +splat_taskq_test10_func(void *arg) +{ + splat_taskq_arg_t *tq_arg = (splat_taskq_arg_t *)arg; + uint8_t rnd; + + if (ddi_time_after_eq(ddi_get_lbolt(), tq_arg->expire)) + atomic_inc(tq_arg->count); + + /* Randomly sleep to further perturb the system */ + get_random_bytes((void *)&rnd, 1); + msleep(1 + (rnd % 9)); +} + +static int +splat_taskq_test10(struct file *file, void *arg) +{ + taskq_t *tq; + splat_taskq_arg_t **tqas; + atomic_t count; + int i, j, rc = 0; + int minalloc = 1; + int maxalloc = 10; + int nr_tasks = 100; + int canceled = 0; + int completed = 0; + int blocked = 0; + clock_t start, cancel; + + tqas = vmalloc(sizeof(*tqas) * nr_tasks); + if (tqas == NULL) + return -ENOMEM; + memset(tqas, 0, sizeof(*tqas) * nr_tasks); + + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, + "Taskq '%s' creating (%s dispatch) (%d/%d/%d)\n", + SPLAT_TASKQ_TEST10_NAME, "delay", minalloc, maxalloc, nr_tasks); + if ((tq = taskq_create(SPLAT_TASKQ_TEST10_NAME, 3, defclsyspri, + minalloc, maxalloc, TASKQ_PREPOPULATE)) == NULL) { + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, + "Taskq '%s' create failed\n", SPLAT_TASKQ_TEST10_NAME); + rc = -EINVAL; + goto out_free; + } + + atomic_set(&count, 0); + + for (i = 0; i < nr_tasks; i++) { + splat_taskq_arg_t *tq_arg; + uint32_t rnd; + + /* A random timeout in jiffies of at most 5 seconds */ + get_random_bytes((void *)&rnd, 4); + rnd = rnd % (5 * HZ); + + tq_arg = kmem_alloc(sizeof(splat_taskq_arg_t), KM_SLEEP); + tq_arg->file = file; + tq_arg->name = SPLAT_TASKQ_TEST10_NAME; + tq_arg->count = &count; + tqas[i] = tq_arg; + + /* + * Dispatch every 1/3 one immediately to mix it up, the cancel + * code is inherently racy and we want to try and provoke any + * subtle concurrently issues. + */ + if ((i % 3) == 0) { + tq_arg->expire = ddi_get_lbolt(); + tq_arg->id = taskq_dispatch(tq, splat_taskq_test10_func, + tq_arg, TQ_SLEEP); + } else { + tq_arg->expire = ddi_get_lbolt() + rnd; + tq_arg->id = taskq_dispatch_delay(tq, + splat_taskq_test10_func, + tq_arg, TQ_SLEEP, ddi_get_lbolt() + rnd); + } + + if (tq_arg->id == TASKQID_INVALID) { + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, + "Taskq '%s' dispatch failed\n", + SPLAT_TASKQ_TEST10_NAME); + kmem_free(tq_arg, sizeof(splat_taskq_arg_t)); + taskq_wait(tq); + rc = -EINVAL; + goto out; + } else { + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, + "Taskq '%s' dispatch %lu in %lu jiffies\n", + SPLAT_TASKQ_TEST10_NAME, (unsigned long)tq_arg->id, + !(i % 3) ? 0 : tq_arg->expire - ddi_get_lbolt()); + } + } + + /* + * Start randomly canceling tasks for the duration of the test. We + * happen to know the valid task id's will be in the range 1..nr_tasks + * because the taskq is private and was just created. However, we + * have no idea of a particular task has already executed or not. + */ + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' randomly " + "canceling task ids\n", SPLAT_TASKQ_TEST10_NAME); + + start = ddi_get_lbolt(); + i = 0; + + while (ddi_time_before(ddi_get_lbolt(), start + 5 * HZ)) { + taskqid_t id; + uint32_t rnd; + + i++; + cancel = ddi_get_lbolt(); + get_random_bytes((void *)&rnd, 4); + id = 1 + (rnd % nr_tasks); + rc = taskq_cancel_id(tq, id); + + /* + * Keep track of the results of the random cancels. + */ + if (rc == 0) { + canceled++; + } else if (rc == ENOENT) { + completed++; + } else if (rc == EBUSY) { + blocked++; + } else { + rc = -EINVAL; + break; + } + + /* + * Verify we never get blocked to long in taskq_cancel_id(). + * The worst case is 10ms if we happen to cancel the task + * which is currently executing. We allow a factor of 2x. + */ + if (ddi_get_lbolt() - cancel > HZ / 50) { + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, + "Taskq '%s' cancel for %lu took %lu\n", + SPLAT_TASKQ_TEST10_NAME, (unsigned long)id, + ddi_get_lbolt() - cancel); + rc = -ETIMEDOUT; + break; + } + + get_random_bytes((void *)&rnd, 4); + msleep(1 + (rnd % 100)); + rc = 0; + } + + taskq_wait(tq); + + /* + * Cross check the results of taskq_cancel_id() with the number of + * times the dispatched function actually ran successfully. + */ + if ((rc == 0) && (nr_tasks - canceled != atomic_read(&count))) + rc = -EDOM; + + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' %d attempts, " + "%d canceled, %d completed, %d blocked, %d/%d tasks run\n", + SPLAT_TASKQ_TEST10_NAME, i, canceled, completed, blocked, + atomic_read(&count), nr_tasks); + splat_vprint(file, SPLAT_TASKQ_TEST10_NAME, "Taskq '%s' destroying %d\n", + SPLAT_TASKQ_TEST10_NAME, rc); +out: + taskq_destroy(tq); +out_free: + for (j = 0; j < nr_tasks && tqas[j] != NULL; j++) + kmem_free(tqas[j], sizeof(splat_taskq_arg_t)); + vfree(tqas); + + return rc; +} + +/* + * Create a dynamic taskq with 100 threads and dispatch a huge number of + * trivial tasks. This will cause the taskq to grow quickly to its max + * thread count. This test should always pass. The purpose is to provide + * a benchmark for measuring the performance of dynamic taskqs. + */ +#define TEST11_NUM_TASKS 100000 +#define TEST11_THREADS_PER_TASKQ 100 + +static int +splat_taskq_test11(struct file *file, void *arg) +{ + struct timespec normal, dynamic; + int error; + + error = splat_taskq_throughput(file, arg, SPLAT_TASKQ_TEST11_NAME, + TEST11_THREADS_PER_TASKQ, 1, INT_MAX, + TASKQ_PREPOPULATE, TEST11_NUM_TASKS, &normal); + if (error) + return (error); + + error = splat_taskq_throughput(file, arg, SPLAT_TASKQ_TEST11_NAME, + TEST11_THREADS_PER_TASKQ, 1, INT_MAX, + TASKQ_PREPOPULATE | TASKQ_DYNAMIC, TEST11_NUM_TASKS, &dynamic); + if (error) + return (error); + + splat_vprint(file, SPLAT_TASKQ_TEST11_NAME, + "Timing taskq_wait(): normal=%ld.%09lds, dynamic=%ld.%09lds\n", + normal.tv_sec, normal.tv_nsec, + dynamic.tv_sec, dynamic.tv_nsec); + + /* A 10x increase in runtime is used to indicate a core problem. */ + if (((int64_t)dynamic.tv_sec * NANOSEC + (int64_t)dynamic.tv_nsec) > + (((int64_t)normal.tv_sec * NANOSEC + (int64_t)normal.tv_nsec) * 10)) + error = -ETIME; + + return (error); +} + +splat_subsystem_t * +splat_taskq_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_TASKQ_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_TASKQ_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_TASKQ; + + splat_test_init(sub, SPLAT_TASKQ_TEST1_NAME, SPLAT_TASKQ_TEST1_DESC, + SPLAT_TASKQ_TEST1_ID, splat_taskq_test1); + splat_test_init(sub, SPLAT_TASKQ_TEST2_NAME, SPLAT_TASKQ_TEST2_DESC, + SPLAT_TASKQ_TEST2_ID, splat_taskq_test2); + splat_test_init(sub, SPLAT_TASKQ_TEST3_NAME, SPLAT_TASKQ_TEST3_DESC, + SPLAT_TASKQ_TEST3_ID, splat_taskq_test3); + splat_test_init(sub, SPLAT_TASKQ_TEST4_NAME, SPLAT_TASKQ_TEST4_DESC, + SPLAT_TASKQ_TEST4_ID, splat_taskq_test4); + splat_test_init(sub, SPLAT_TASKQ_TEST5_NAME, SPLAT_TASKQ_TEST5_DESC, + SPLAT_TASKQ_TEST5_ID, splat_taskq_test5); + splat_test_init(sub, SPLAT_TASKQ_TEST6_NAME, SPLAT_TASKQ_TEST6_DESC, + SPLAT_TASKQ_TEST6_ID, splat_taskq_test6); + splat_test_init(sub, SPLAT_TASKQ_TEST7_NAME, SPLAT_TASKQ_TEST7_DESC, + SPLAT_TASKQ_TEST7_ID, splat_taskq_test7); + splat_test_init(sub, SPLAT_TASKQ_TEST8_NAME, SPLAT_TASKQ_TEST8_DESC, + SPLAT_TASKQ_TEST8_ID, splat_taskq_test8); + splat_test_init(sub, SPLAT_TASKQ_TEST9_NAME, SPLAT_TASKQ_TEST9_DESC, + SPLAT_TASKQ_TEST9_ID, splat_taskq_test9); + splat_test_init(sub, SPLAT_TASKQ_TEST10_NAME, SPLAT_TASKQ_TEST10_DESC, + SPLAT_TASKQ_TEST10_ID, splat_taskq_test10); + splat_test_init(sub, SPLAT_TASKQ_TEST11_NAME, SPLAT_TASKQ_TEST11_DESC, + SPLAT_TASKQ_TEST11_ID, splat_taskq_test11); + + return sub; +} + +void +splat_taskq_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_TASKQ_TEST11_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST10_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST9_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST8_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST7_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST6_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST5_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST4_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST3_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST2_ID); + splat_test_fini(sub, SPLAT_TASKQ_TEST1_ID); + + kfree(sub); +} + +int +splat_taskq_id(void) { + return SPLAT_SUBSYSTEM_TASKQ; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-thread.c +++ linux-aws-4.15.0/spl/module/splat/splat-thread.c @@ -0,0 +1,390 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Thread Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_THREAD_NAME "thread" +#define SPLAT_THREAD_DESC "Kernel Thread Tests" + +#define SPLAT_THREAD_TEST1_ID 0x0601 +#define SPLAT_THREAD_TEST1_NAME "create" +#define SPLAT_THREAD_TEST1_DESC "Validate thread creation" + +#define SPLAT_THREAD_TEST2_ID 0x0602 +#define SPLAT_THREAD_TEST2_NAME "exit" +#define SPLAT_THREAD_TEST2_DESC "Validate thread exit" + +#define SPLAT_THREAD_TEST3_ID 0x6003 +#define SPLAT_THREAD_TEST3_NAME "tsd" +#define SPLAT_THREAD_TEST3_DESC "Validate thread specific data" + +#define SPLAT_THREAD_TEST_MAGIC 0x4488CC00UL +#define SPLAT_THREAD_TEST_KEYS 32 +#define SPLAT_THREAD_TEST_THREADS 16 + +typedef struct thread_priv { + unsigned long tp_magic; + struct file *tp_file; + spinlock_t tp_lock; + spl_wait_queue_head_t tp_waitq; + uint_t tp_keys[SPLAT_THREAD_TEST_KEYS]; + int tp_rc; + int tp_count; + int tp_dtor_count; +} thread_priv_t; + +static int +splat_thread_rc(thread_priv_t *tp, int rc) +{ + int ret; + + spin_lock(&tp->tp_lock); + ret = (tp->tp_rc == rc); + spin_unlock(&tp->tp_lock); + + return ret; +} + +static int +splat_thread_count(thread_priv_t *tp, int count) +{ + int ret; + + spin_lock(&tp->tp_lock); + ret = (tp->tp_count == count); + spin_unlock(&tp->tp_lock); + + return ret; +} + +static void +splat_thread_work1(void *priv) +{ + thread_priv_t *tp = (thread_priv_t *)priv; + + spin_lock(&tp->tp_lock); + ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC); + tp->tp_rc = 1; + wake_up(&tp->tp_waitq); + spin_unlock(&tp->tp_lock); + + thread_exit(); +} + +static int +splat_thread_test1(struct file *file, void *arg) +{ + thread_priv_t tp; + kthread_t *thr; + + tp.tp_magic = SPLAT_THREAD_TEST_MAGIC; + tp.tp_file = file; + spin_lock_init(&tp.tp_lock); + init_waitqueue_head(&tp.tp_waitq); + tp.tp_rc = 0; + + thr = (kthread_t *)thread_create(NULL, 0, splat_thread_work1, &tp, 0, + &p0, TS_RUN, defclsyspri); + /* Must never fail under Solaris, but we check anyway since this + * can happen in the linux SPL, we may want to change this behavior */ + if (thr == NULL) + return -ESRCH; + + /* Sleep until the thread sets tp.tp_rc == 1 */ + wait_event(tp.tp_waitq, splat_thread_rc(&tp, 1)); + + splat_vprint(file, SPLAT_THREAD_TEST1_NAME, "%s", + "Thread successfully started properly\n"); + return 0; +} + +static void +splat_thread_work2(void *priv) +{ + thread_priv_t *tp = (thread_priv_t *)priv; + + spin_lock(&tp->tp_lock); + ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC); + tp->tp_rc = 1; + wake_up(&tp->tp_waitq); + spin_unlock(&tp->tp_lock); + + thread_exit(); + + /* The following code is unreachable when thread_exit() is + * working properly, which is exactly what we're testing */ + spin_lock(&tp->tp_lock); + tp->tp_rc = 2; + wake_up(&tp->tp_waitq); + spin_unlock(&tp->tp_lock); +} + +static int +splat_thread_test2(struct file *file, void *arg) +{ + thread_priv_t tp; + kthread_t *thr; + int rc = 0; + + tp.tp_magic = SPLAT_THREAD_TEST_MAGIC; + tp.tp_file = file; + spin_lock_init(&tp.tp_lock); + init_waitqueue_head(&tp.tp_waitq); + tp.tp_rc = 0; + + thr = (kthread_t *)thread_create(NULL, 0, splat_thread_work2, &tp, 0, + &p0, TS_RUN, defclsyspri); + /* Must never fail under Solaris, but we check anyway since this + * can happen in the linux SPL, we may want to change this behavior */ + if (thr == NULL) + return -ESRCH; + + /* Sleep until the thread sets tp.tp_rc == 1 */ + wait_event(tp.tp_waitq, splat_thread_rc(&tp, 1)); + + /* Sleep until the thread sets tp.tp_rc == 2, or until we hit + * the timeout. If thread exit is working properly we should + * hit the timeout and never see to.tp_rc == 2. */ + rc = wait_event_timeout(tp.tp_waitq, splat_thread_rc(&tp, 2), HZ / 10); + if (rc > 0) { + rc = -EINVAL; + splat_vprint(file, SPLAT_THREAD_TEST2_NAME, "%s", + "Thread did not exit properly at thread_exit()\n"); + } else { + splat_vprint(file, SPLAT_THREAD_TEST2_NAME, "%s", + "Thread successfully exited at thread_exit()\n"); + } + + return rc; +} + +static void +splat_thread_work3_common(thread_priv_t *tp) +{ + ulong_t rnd; + int i, rc = 0; + + /* set a unique value for each key using a random value */ + get_random_bytes((void *)&rnd, 4); + for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) + tsd_set(tp->tp_keys[i], (void *)(i + rnd)); + + /* verify the unique value for each key */ + for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) + if (tsd_get(tp->tp_keys[i]) != (void *)(i + rnd)) + rc = -EINVAL; + + /* set the value to thread_priv_t for use by the destructor */ + for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) + tsd_set(tp->tp_keys[i], (void *)tp); + + spin_lock(&tp->tp_lock); + if (rc && !tp->tp_rc) + tp->tp_rc = rc; + + tp->tp_count++; + wake_up_all(&tp->tp_waitq); + spin_unlock(&tp->tp_lock); +} + +static void +splat_thread_work3_wait(void *priv) +{ + thread_priv_t *tp = (thread_priv_t *)priv; + + ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC); + splat_thread_work3_common(tp); + wait_event(tp->tp_waitq, splat_thread_count(tp, 0)); + thread_exit(); +} + +static void +splat_thread_work3_exit(void *priv) +{ + thread_priv_t *tp = (thread_priv_t *)priv; + + ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC); + splat_thread_work3_common(tp); + thread_exit(); +} + +static void +splat_thread_dtor3(void *priv) +{ + thread_priv_t *tp = (thread_priv_t *)priv; + + ASSERT(tp->tp_magic == SPLAT_THREAD_TEST_MAGIC); + spin_lock(&tp->tp_lock); + tp->tp_dtor_count++; + spin_unlock(&tp->tp_lock); +} + +/* + * Create threads which set and verify SPLAT_THREAD_TEST_KEYS number of + * keys. These threads may then exit by calling thread_exit() which calls + * tsd_exit() resulting in all their thread specific data being reclaimed. + * Alternately, the thread may block in which case the thread specific + * data will be reclaimed as part of tsd_destroy(). In either case all + * thread specific data must be reclaimed, this is verified by ensuring + * the registered destructor is called the correct number of times. + */ +static int +splat_thread_test3(struct file *file, void *arg) +{ + int i, rc = 0, expected, wait_count = 0, exit_count = 0; + thread_priv_t tp; + + tp.tp_magic = SPLAT_THREAD_TEST_MAGIC; + tp.tp_file = file; + spin_lock_init(&tp.tp_lock); + init_waitqueue_head(&tp.tp_waitq); + tp.tp_rc = 0; + tp.tp_count = 0; + tp.tp_dtor_count = 0; + + for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) { + tp.tp_keys[i] = 0; + tsd_create(&tp.tp_keys[i], splat_thread_dtor3); + } + + /* Start tsd wait threads */ + for (i = 0; i < SPLAT_THREAD_TEST_THREADS; i++) { + if (thread_create(NULL, 0, splat_thread_work3_wait, + &tp, 0, &p0, TS_RUN, defclsyspri)) + wait_count++; + } + + /* All wait threads have setup their tsd and are blocking. */ + wait_event(tp.tp_waitq, splat_thread_count(&tp, wait_count)); + + if (tp.tp_dtor_count != 0) { + splat_vprint(file, SPLAT_THREAD_TEST3_NAME, + "Prematurely ran %d tsd destructors\n", tp.tp_dtor_count); + if (!rc) + rc = -ERANGE; + } + + /* Start tsd exit threads */ + for (i = 0; i < SPLAT_THREAD_TEST_THREADS; i++) { + if (thread_create(NULL, 0, splat_thread_work3_exit, + &tp, 0, &p0, TS_RUN, defclsyspri)) + exit_count++; + } + + /* All exit threads verified tsd and are in the process of exiting */ + wait_event(tp.tp_waitq,splat_thread_count(&tp, wait_count+exit_count)); + msleep(500); + + expected = (SPLAT_THREAD_TEST_KEYS * exit_count); + if (tp.tp_dtor_count != expected) { + splat_vprint(file, SPLAT_THREAD_TEST3_NAME, + "Expected %d exit tsd destructors but saw %d\n", + expected, tp.tp_dtor_count); + if (!rc) + rc = -ERANGE; + } + + /* Destroy all keys and associated tsd in blocked threads */ + for (i = 0; i < SPLAT_THREAD_TEST_KEYS; i++) + tsd_destroy(&tp.tp_keys[i]); + + expected = (SPLAT_THREAD_TEST_KEYS * (exit_count + wait_count)); + if (tp.tp_dtor_count != expected) { + splat_vprint(file, SPLAT_THREAD_TEST3_NAME, + "Expected %d wait+exit tsd destructors but saw %d\n", + expected, tp.tp_dtor_count); + if (!rc) + rc = -ERANGE; + } + + /* Release the remaining wait threads, sleep briefly while they exit */ + spin_lock(&tp.tp_lock); + tp.tp_count = 0; + wake_up_all(&tp.tp_waitq); + spin_unlock(&tp.tp_lock); + msleep(500); + + if (tp.tp_rc) { + splat_vprint(file, SPLAT_THREAD_TEST3_NAME, + "Thread tsd_get()/tsd_set() error %d\n", tp.tp_rc); + if (!rc) + rc = tp.tp_rc; + } else if (!rc) { + splat_vprint(file, SPLAT_THREAD_TEST3_NAME, "%s", + "Thread specific data verified\n"); + } + + return rc; +} + +splat_subsystem_t * +splat_thread_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_THREAD_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_THREAD_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_THREAD; + + splat_test_init(sub, SPLAT_THREAD_TEST1_NAME, SPLAT_THREAD_TEST1_DESC, + SPLAT_THREAD_TEST1_ID, splat_thread_test1); + splat_test_init(sub, SPLAT_THREAD_TEST2_NAME, SPLAT_THREAD_TEST2_DESC, + SPLAT_THREAD_TEST2_ID, splat_thread_test2); + splat_test_init(sub, SPLAT_THREAD_TEST3_NAME, SPLAT_THREAD_TEST3_DESC, + SPLAT_THREAD_TEST3_ID, splat_thread_test3); + + return sub; +} + +void +splat_thread_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + splat_test_fini(sub, SPLAT_THREAD_TEST3_ID); + splat_test_fini(sub, SPLAT_THREAD_TEST2_ID); + splat_test_fini(sub, SPLAT_THREAD_TEST1_ID); + + kfree(sub); +} + +int +splat_thread_id(void) { + return SPLAT_SUBSYSTEM_THREAD; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-time.c +++ linux-aws-4.15.0/spl/module/splat/splat-time.c @@ -0,0 +1,119 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Time Tests. +\*****************************************************************************/ + +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_TIME_NAME "time" +#define SPLAT_TIME_DESC "Kernel Time Tests" + +#define SPLAT_TIME_TEST1_ID 0x0801 +#define SPLAT_TIME_TEST1_NAME "time1" +#define SPLAT_TIME_TEST1_DESC "HZ Test" + +#define SPLAT_TIME_TEST2_ID 0x0802 +#define SPLAT_TIME_TEST2_NAME "time2" +#define SPLAT_TIME_TEST2_DESC "Monotonic Test" + +static int +splat_time_test1(struct file *file, void *arg) +{ + int myhz = hz; + splat_vprint(file, SPLAT_TIME_TEST1_NAME, "hz is %d\n", myhz); + return 0; +} + +static int +splat_time_test2(struct file *file, void *arg) +{ + hrtime_t tm1, tm2; + int i; + + tm1 = gethrtime(); + splat_vprint(file, SPLAT_TIME_TEST2_NAME, "time is %lld\n", tm1); + + for(i = 0; i < 100; i++) { + tm2 = gethrtime(); + splat_vprint(file, SPLAT_TIME_TEST2_NAME, "time is %lld\n", tm2); + + if(tm1 > tm2) { + splat_print(file, "%s: gethrtime() is not giving " + "monotonically increasing values\n", + SPLAT_TIME_TEST2_NAME); + return 1; + } + tm1 = tm2; + + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(10); + } + + return 0; +} + +splat_subsystem_t * +splat_time_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_TIME_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_TIME_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_TIME; + + splat_test_init(sub, SPLAT_TIME_TEST1_NAME, SPLAT_TIME_TEST1_DESC, + SPLAT_TIME_TEST1_ID, splat_time_test1); + splat_test_init(sub, SPLAT_TIME_TEST2_NAME, SPLAT_TIME_TEST2_DESC, + SPLAT_TIME_TEST2_ID, splat_time_test2); + + return sub; +} + +void +splat_time_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_TIME_TEST2_ID); + splat_test_fini(sub, SPLAT_TIME_TEST1_ID); + + kfree(sub); +} + +int +splat_time_id(void) +{ + return SPLAT_SUBSYSTEM_TIME; +} --- linux-aws-4.15.0.orig/spl/module/splat/splat-vnode.c +++ linux-aws-4.15.0/spl/module/splat/splat-vnode.c @@ -0,0 +1,451 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Vnode Tests. +\*****************************************************************************/ + +#include +#include "splat-internal.h" + +#define SPLAT_VNODE_NAME "vnode" +#define SPLAT_VNODE_DESC "Kernel Vnode Tests" + +#define SPLAT_VNODE_TEST1_ID 0x0901 +#define SPLAT_VNODE_TEST1_NAME "vn_open" +#define SPLAT_VNODE_TEST1_DESC "Vn_open Test" + +#define SPLAT_VNODE_TEST2_ID 0x0902 +#define SPLAT_VNODE_TEST2_NAME "vn_openat" +#define SPLAT_VNODE_TEST2_DESC "Vn_openat Test" + +#define SPLAT_VNODE_TEST3_ID 0x0903 +#define SPLAT_VNODE_TEST3_NAME "vn_rdwr" +#define SPLAT_VNODE_TEST3_DESC "Vn_rdwrt Test" + +#define SPLAT_VNODE_TEST4_ID 0x0904 +#define SPLAT_VNODE_TEST4_NAME "vn_rename" +#define SPLAT_VNODE_TEST4_DESC "Vn_rename Test" + +#define SPLAT_VNODE_TEST5_ID 0x0905 +#define SPLAT_VNODE_TEST5_NAME "vn_getattr" +#define SPLAT_VNODE_TEST5_DESC "Vn_getattr Test" + +#define SPLAT_VNODE_TEST6_ID 0x0906 +#define SPLAT_VNODE_TEST6_NAME "vn_sync" +#define SPLAT_VNODE_TEST6_DESC "Vn_sync Test" + +#define SPLAT_VNODE_TEST_FILE "/etc/fstab" +#define SPLAT_VNODE_TEST_FILE_AT "etc/fstab" +#define SPLAT_VNODE_TEST_FILE_RW "/tmp/spl.vnode.tmp" +#define SPLAT_VNODE_TEST_FILE_RW1 "/tmp/spl.vnode.tmp.1" +#define SPLAT_VNODE_TEST_FILE_RW2 "/tmp/spl.vnode.tmp.2" + +static int +splat_vnode_user_cmd(struct file *file, void *arg, + char *name, char *cmd) +{ + char sh_path[] = "/bin/sh"; + char *argv[] = { sh_path, + "-c", + cmd, + NULL }; + char *envp[] = { "HOME=/", + "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", + NULL }; + int rc; + + rc = call_usermodehelper(sh_path, argv, envp, UMH_WAIT_PROC); + if (rc) { + splat_vprint(file, name, + "Failed command: %s %s %s (%d)\n", + argv[0], argv[1], cmd, rc); + return -EPERM; + } + + return 0; +} + +static int +splat_vnode_unlink_all(struct file *file, void *arg, char *name) +{ + char *cmds[] = { "rm -f " SPLAT_VNODE_TEST_FILE_RW, + "rm -f " SPLAT_VNODE_TEST_FILE_RW1, + "rm -f " SPLAT_VNODE_TEST_FILE_RW2, + NULL }; + int i = 0, rc = 0; + + while (cmds[i] != NULL) { + if ((rc = splat_vnode_user_cmd(file, arg, name, cmds[i]))) + return rc; + + i++; + } + + return rc; +} + +static int +splat_vnode_test1(struct file *file, void *arg) +{ + vnode_t *vp; + int rc; + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE, UIO_SYSSPACE, + FREAD, 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST1_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + return -rc; + } + + rc = VOP_CLOSE(vp, 0, 0, 0, 0, 0); + + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST1_NAME, + "Failed to vn_close test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + return -rc; + } + + splat_vprint(file, SPLAT_VNODE_TEST1_NAME, "Successfully vn_open'ed " + "and vn_closed test file: %s\n", SPLAT_VNODE_TEST_FILE); + + return -rc; +} /* splat_vnode_test1() */ + +static int +splat_vnode_test2(struct file *file, void *arg) +{ + vnode_t *vp; + int rc; + + if ((rc = vn_openat(SPLAT_VNODE_TEST_FILE_AT, UIO_SYSSPACE, + FREAD, 0644, &vp, 0, 0, rootdir, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST2_NAME, + "Failed to vn_openat test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + return -rc; + } + + rc = VOP_CLOSE(vp, 0, 0, 0, 0, 0); + + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST2_NAME, + "Failed to vn_close test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + return -rc; + } + + splat_vprint(file, SPLAT_VNODE_TEST2_NAME, "Successfully vn_openat'ed " + "and vn_closed test file: %s\n", SPLAT_VNODE_TEST_FILE); + + return -rc; +} /* splat_vnode_test2() */ + +static int +splat_vnode_test3(struct file *file, void *arg) +{ + vnode_t *vp; + char buf1[32] = "SPL VNode Interface Test File\n"; + char buf2[32] = ""; + int rc; + + if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST3_NAME))) + return rc; + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, + FWRITE | FREAD | FCREAT | FEXCL, + 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + return -rc; + } + + rc = vn_rdwr(UIO_WRITE, vp, buf1, strlen(buf1), 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, + "Failed vn_rdwr write of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + goto out; + } + + rc = vn_rdwr(UIO_READ, vp, buf2, strlen(buf1), 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, + "Failed vn_rdwr read of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + goto out; + } + + if (strncmp(buf1, buf2, strlen(buf1))) { + rc = EINVAL; + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, + "Failed strncmp data written does not match " + "data read\nWrote: %sRead: %s\n", buf1, buf2); + goto out; + } + + rc = 0; + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Wrote: %s", buf1); + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Read: %s", buf2); + splat_vprint(file, SPLAT_VNODE_TEST3_NAME, "Successfully wrote and " + "read expected data pattern to test file: %s\n", + SPLAT_VNODE_TEST_FILE_RW); + +out: + VOP_CLOSE(vp, 0, 0, 0, 0, 0); + vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE); + + return -rc; +} /* splat_vnode_test3() */ + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) +static int +splat_vnode_test4(struct file *file, void *arg) +{ + vnode_t *vp; + char buf1[32] = "SPL VNode Interface Test File\n"; + char buf2[32] = ""; + int rc; + + if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST4_NAME))) + return rc; + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE, + FWRITE | FREAD | FCREAT | FEXCL, 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW1, rc); + goto out; + } + + rc = vn_rdwr(UIO_WRITE, vp, buf1, strlen(buf1), 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, + "Failed vn_rdwr write of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW1, rc); + goto out2; + } + + VOP_CLOSE(vp, 0, 0, 0, 0, 0); + + rc = vn_rename(SPLAT_VNODE_TEST_FILE_RW1,SPLAT_VNODE_TEST_FILE_RW2,0); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Failed vn_rename " + "%s -> %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW1, + SPLAT_VNODE_TEST_FILE_RW2, rc); + goto out; + } + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE, + FREAD | FEXCL, 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW2, rc); + goto out; + } + + rc = vn_rdwr(UIO_READ, vp, buf2, strlen(buf1), 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, + "Failed vn_rdwr read of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW2, rc); + goto out2; + } + + if (strncmp(buf1, buf2, strlen(buf1))) { + rc = EINVAL; + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, + "Failed strncmp data written does not match " + "data read\nWrote: %sRead: %s\n", buf1, buf2); + goto out2; + } + + rc = 0; + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Wrote to %s: %s", + SPLAT_VNODE_TEST_FILE_RW1, buf1); + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Read from %s: %s", + SPLAT_VNODE_TEST_FILE_RW2, buf2); + splat_vprint(file, SPLAT_VNODE_TEST4_NAME, "Successfully renamed " + "test file %s -> %s and verified data pattern\n", + SPLAT_VNODE_TEST_FILE_RW1, SPLAT_VNODE_TEST_FILE_RW2); +out2: + VOP_CLOSE(vp, 0, 0, 0, 0, 0); +out: + vn_remove(SPLAT_VNODE_TEST_FILE_RW1, UIO_SYSSPACE, RMFILE); + vn_remove(SPLAT_VNODE_TEST_FILE_RW2, UIO_SYSSPACE, RMFILE); + + return -rc; +} /* splat_vnode_test4() */ +#endif + +static int +splat_vnode_test5(struct file *file, void *arg) +{ + vnode_t *vp; + vattr_t vap; + int rc; + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE, UIO_SYSSPACE, + FREAD, 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST5_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + return -rc; + } + + rc = VOP_GETATTR(vp, &vap, 0, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST5_NAME, + "Failed to vn_getattr test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE, rc); + goto out; + } + + if (vap.va_type != VREG) { + rc = EINVAL; + splat_vprint(file, SPLAT_VNODE_TEST5_NAME, + "Failed expected regular file type " + "(%d != VREG): %s (%d)\n", vap.va_type, + SPLAT_VNODE_TEST_FILE, rc); + goto out; + } + + splat_vprint(file, SPLAT_VNODE_TEST1_NAME, "Successfully " + "vn_getattr'ed test file: %s\n", SPLAT_VNODE_TEST_FILE); + +out: + VOP_CLOSE(vp, 0, 0, 0, 0, 0); + + return -rc; +} /* splat_vnode_test5() */ + +static int +splat_vnode_test6(struct file *file, void *arg) +{ + vnode_t *vp; + char buf[32] = "SPL VNode Interface Test File\n"; + int rc; + + if ((rc = splat_vnode_unlink_all(file, arg, SPLAT_VNODE_TEST6_NAME))) + return rc; + + if ((rc = vn_open(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, + FWRITE | FCREAT | FEXCL, 0644, &vp, 0, 0))) { + splat_vprint(file, SPLAT_VNODE_TEST6_NAME, + "Failed to vn_open test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + return -rc; + } + + rc = vn_rdwr(UIO_WRITE, vp, buf, strlen(buf), 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST6_NAME, + "Failed vn_rdwr write of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + goto out; + } + + rc = vn_fsync(vp, 0, 0, 0); + if (rc) { + splat_vprint(file, SPLAT_VNODE_TEST6_NAME, + "Failed vn_fsync of test file: %s (%d)\n", + SPLAT_VNODE_TEST_FILE_RW, rc); + goto out; + } + + rc = 0; + splat_vprint(file, SPLAT_VNODE_TEST6_NAME, "Successfully " + "fsync'ed test file %s\n", SPLAT_VNODE_TEST_FILE_RW); +out: + VOP_CLOSE(vp, 0, 0, 0, 0, 0); + vn_remove(SPLAT_VNODE_TEST_FILE_RW, UIO_SYSSPACE, RMFILE); + + return -rc; +} /* splat_vnode_test6() */ + +splat_subsystem_t * +splat_vnode_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_VNODE_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_VNODE_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_VNODE; + + splat_test_init(sub, SPLAT_VNODE_TEST1_NAME, SPLAT_VNODE_TEST1_DESC, + SPLAT_VNODE_TEST1_ID, splat_vnode_test1); + splat_test_init(sub, SPLAT_VNODE_TEST2_NAME, SPLAT_VNODE_TEST2_DESC, + SPLAT_VNODE_TEST2_ID, splat_vnode_test2); + splat_test_init(sub, SPLAT_VNODE_TEST3_NAME, SPLAT_VNODE_TEST3_DESC, + SPLAT_VNODE_TEST3_ID, splat_vnode_test3); +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) + splat_test_init(sub, SPLAT_VNODE_TEST4_NAME, SPLAT_VNODE_TEST4_DESC, + SPLAT_VNODE_TEST4_ID, splat_vnode_test4); +#endif + splat_test_init(sub, SPLAT_VNODE_TEST5_NAME, SPLAT_VNODE_TEST5_DESC, + SPLAT_VNODE_TEST5_ID, splat_vnode_test5); + splat_test_init(sub, SPLAT_VNODE_TEST6_NAME, SPLAT_VNODE_TEST6_DESC, + SPLAT_VNODE_TEST6_ID, splat_vnode_test6); + + return sub; +} /* splat_vnode_init() */ + +void +splat_vnode_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_VNODE_TEST6_ID); + splat_test_fini(sub, SPLAT_VNODE_TEST5_ID); +#if LINUX_VERSION_CODE <= KERNEL_VERSION(4,1,0) + splat_test_fini(sub, SPLAT_VNODE_TEST4_ID); +#endif + splat_test_fini(sub, SPLAT_VNODE_TEST3_ID); + splat_test_fini(sub, SPLAT_VNODE_TEST2_ID); + splat_test_fini(sub, SPLAT_VNODE_TEST1_ID); + + kfree(sub); +} /* splat_vnode_fini() */ + +int +splat_vnode_id(void) +{ + return SPLAT_SUBSYSTEM_VNODE; +} /* splat_vnode_id() */ --- linux-aws-4.15.0.orig/spl/module/splat/splat-zlib.c +++ linux-aws-4.15.0/spl/module/splat/splat-zlib.c @@ -0,0 +1,166 @@ +/*****************************************************************************\ + * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2007 The Regents of the University of California. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * UCRL-CODE-235197 + * + * This file is part of the SPL, Solaris Porting Layer. + * For details, see . + * + * The SPL 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. + * + * The SPL 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. + * + * You should have received a copy of the GNU General Public License along + * with the SPL. If not, see . + ***************************************************************************** + * Solaris Porting LAyer Tests (SPLAT) Zlib Compression Tests. +\*****************************************************************************/ + +#include +#include +#include +#include +#include "splat-internal.h" + +#define SPLAT_ZLIB_NAME "zlib" +#define SPLAT_ZLIB_DESC "Zlib Compression Tests" + +#define SPLAT_ZLIB_TEST1_ID 0x0f01 +#define SPLAT_ZLIB_TEST1_NAME "compress/uncompress" +#define SPLAT_ZLIB_TEST1_DESC "Compress/Uncompress Test" + +#define BUFFER_SIZE (128 * 1024) + +static int +splat_zlib_test1_check(struct file *file, void *src, void *dst, void *chk, + int level) +{ + size_t dst_len = BUFFER_SIZE; + size_t chk_len = BUFFER_SIZE; + int rc; + + memset(dst, 0, BUFFER_SIZE); + memset(chk, 0, BUFFER_SIZE); + + rc = z_compress_level(dst, &dst_len, src, BUFFER_SIZE, level); + if (rc != Z_OK) { + splat_vprint(file, SPLAT_ZLIB_TEST1_NAME, + "Failed level %d z_compress_level(), %d\n", level, rc); + return -EINVAL; + } + + rc = z_uncompress(chk, &chk_len, dst, dst_len); + if (rc != Z_OK) { + splat_vprint(file, SPLAT_ZLIB_TEST1_NAME, + "Failed level %d z_uncompress(), %d\n", level, rc); + return -EINVAL; + } + + rc = memcmp(src, chk, BUFFER_SIZE); + if (rc) { + splat_vprint(file, SPLAT_ZLIB_TEST1_NAME, + "Failed level %d memcmp()), %d\n", level, rc); + return -EINVAL; + } + + splat_vprint(file, SPLAT_ZLIB_TEST1_NAME, + "Passed level %d, compressed %d bytes to %d bytes\n", + level, BUFFER_SIZE, (int)dst_len); + + return 0; +} + +/* + * Compress a buffer, uncompress the newly compressed buffer, then + * compare it to the original. Do this for all 9 compression levels. + */ +static int +splat_zlib_test1(struct file *file, void *arg) +{ + void *src = NULL, *dst = NULL, *chk = NULL; + int i, rc, level; + + src = vmalloc(BUFFER_SIZE); + if (src == NULL) { + rc = -ENOMEM; + goto out; + } + + dst = vmalloc(BUFFER_SIZE); + if (dst == NULL) { + rc = -ENOMEM; + goto out; + } + + chk = vmalloc(BUFFER_SIZE); + if (chk == NULL) { + rc = -ENOMEM; + goto out; + } + + /* Source buffer is a repeating 1024 byte random pattern. */ + random_get_pseudo_bytes(src, sizeof(uint8_t) * 1024); + for (i = 1; i < 128; i++) + memcpy(src + (i * 1024), src, 1024); + + for (level = 1; level <= 9; level++) + if ((rc = splat_zlib_test1_check(file, src, dst, chk, level))) + break; +out: + if (src) + vfree(src); + + if (dst) + vfree(dst); + + if (chk) + vfree(chk); + + return rc; +} + +splat_subsystem_t * +splat_zlib_init(void) +{ + splat_subsystem_t *sub; + + sub = kmalloc(sizeof(*sub), GFP_KERNEL); + if (sub == NULL) + return NULL; + + memset(sub, 0, sizeof(*sub)); + strncpy(sub->desc.name, SPLAT_ZLIB_NAME, SPLAT_NAME_SIZE); + strncpy(sub->desc.desc, SPLAT_ZLIB_DESC, SPLAT_DESC_SIZE); + INIT_LIST_HEAD(&sub->subsystem_list); + INIT_LIST_HEAD(&sub->test_list); + spin_lock_init(&sub->test_lock); + sub->desc.id = SPLAT_SUBSYSTEM_ZLIB; + + splat_test_init(sub, SPLAT_ZLIB_TEST1_NAME, SPLAT_ZLIB_TEST1_DESC, + SPLAT_ZLIB_TEST1_ID, splat_zlib_test1); + + return sub; +} + +void +splat_zlib_fini(splat_subsystem_t *sub) +{ + ASSERT(sub); + + splat_test_fini(sub, SPLAT_ZLIB_TEST1_ID); + + kfree(sub); +} + +int +splat_zlib_id(void) { + return SPLAT_SUBSYSTEM_ZLIB; +} --- linux-aws-4.15.0.orig/spl/rpm/Makefile.am +++ linux-aws-4.15.0/spl/rpm/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = generic redhat --- linux-aws-4.15.0.orig/spl/rpm/Makefile.in +++ linux-aws-4.15.0/spl/rpm/Makefile.in @@ -0,0 +1,673 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = rpm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = generic redhat +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rpm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu rpm/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/rpm/generic/Makefile.am +++ linux-aws-4.15.0/spl/rpm/generic/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in --- linux-aws-4.15.0.orig/spl/rpm/generic/Makefile.in +++ linux-aws-4.15.0/spl/rpm/generic/Makefile.in @@ -0,0 +1,500 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = rpm/generic +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = spl.spec spl-kmod.spec spl-dkms.spec +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/spl-dkms.spec.in \ + $(srcdir)/spl-kmod.spec.in $(srcdir)/spl.spec.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rpm/generic/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu rpm/generic/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +spl.spec: $(top_builddir)/config.status $(srcdir)/spl.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +spl-kmod.spec: $(top_builddir)/config.status $(srcdir)/spl-kmod.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +spl-dkms.spec: $(top_builddir)/config.status $(srcdir)/spl-dkms.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/rpm/generic/spl-dkms.spec.in +++ linux-aws-4.15.0/spl/rpm/generic/spl-dkms.spec.in @@ -0,0 +1,84 @@ +%{?!packager: %define packager Brian Behlendorf } + +%if ! 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version} +%define not_rpm 1 +%endif + +%define module @PACKAGE@ +%define mkconf scripts/dkms.mkconf + +Name: %{module}-dkms + +Version: @VERSION@ +Release: @RELEASE@%{?dist} +Summary: Kernel module(s) (dkms) + +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +Source0: %{module}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch + +Requires: dkms >= 2.2.0.2 +Requires: gcc, make, perl +%if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version} +Requires: kernel-devel +%endif +Provides: %{module}-kmod = %{version} + +%description +This package contains the dkms kernel modules required to emulate +several interfaces provided by the Solaris kernel. + +%prep +%setup -q -n %{module}-%{version} + +%build +%{mkconf} -n %{module} -v %{version} -f dkms.conf + +%install +if [ "$RPM_BUILD_ROOT" != "/" ]; then + rm -rf $RPM_BUILD_ROOT +fi +mkdir -p $RPM_BUILD_ROOT/usr/src/ +cp -rf ${RPM_BUILD_DIR}/%{module}-%{version} $RPM_BUILD_ROOT/usr/src/ + +%clean +if [ "$RPM_BUILD_ROOT" != "/" ]; then + rm -rf $RPM_BUILD_ROOT +fi + +%files +%defattr(-,root,root) +/usr/src/%{module}-%{version} + +%post +for POSTINST in /usr/lib/dkms/common.postinst; do + if [ -f $POSTINST ]; then + $POSTINST %{module} %{version} + exit $? + fi + echo "WARNING: $POSTINST does not exist." +done +echo -e "ERROR: DKMS version is too old and %{module} was not" +echo -e "built with legacy DKMS support." +echo -e "You must either rebuild %{module} with legacy postinst" +echo -e "support or upgrade DKMS to a more current version." +exit 1 + +%preun +CONFIG_H="/var/lib/dkms/%{module}/%{version}/*/*/%{module}_config.h" +SPEC_META_ALIAS="@PACKAGE@-@VERSION@-@RELEASE@" +DKMS_META_ALIAS=`cat $CONFIG_H 2>/dev/null | + awk -F'"' '/META_ALIAS/ { print $2; exit 0 }'` +if [ "$SPEC_META_ALIAS" = "$DKMS_META_ALIAS" ]; then + echo -e + echo -e "Uninstall of %{module} module ($SPEC_META_ALIAS) beginning:" + dkms remove -m %{module} -v %{version} --all %{!?not_rpm:--rpm_safe_upgrade} +fi +exit 0 + +%changelog +* %(date "+%a %b %d %Y") %packager %{version}-%{release} +- Automatic build by DKMS --- linux-aws-4.15.0.orig/spl/rpm/generic/spl-kmod.spec.in +++ linux-aws-4.15.0/spl/rpm/generic/spl-kmod.spec.in @@ -0,0 +1,187 @@ +%define module @PACKAGE@ +#define repo rpmfusion +#define repo chaos + +# (un)define the next line to either build for the newest or all current kernels +%define buildforkernels newest +#define buildforkernels current +#define buildforkernels akmod + +%bcond_with debug +%bcond_with debug_log +%bcond_with debug_kmem +%bcond_with debug_kmem_tracking +%bcond_with atomic_spinlocks + + +Name: %{module}-kmod + +Version: @VERSION@ +Release: @RELEASE@%{?dist} +Summary: Kernel module(s) + +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +Source0: %{module}-%{version}.tar.gz +Source10: kmodtool +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n) + +# The developments headers will conflict with the dkms packages. +Conflicts: %{module}-dkms + +%if %{defined repo} + +# Building for a repository use the proper build-sysbuild package +# to determine which kernel-devel packages should be installed. +BuildRequires: %{_bindir}/kmodtool +%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}} + +%else + +# Building local packages attempt to to use the installed kernel. +%{?rhel:BuildRequires: kernel-devel} +%{?fedora:BuildRequires: kernel-devel} +%{?suse_version:BuildRequires: kernel-source} + +%if !%{defined kernels} && !%{defined build_src_rpm} + %if 0%{?rhel}%{?fedora}%{?suse_version} + %define kernels %(ls -1 /usr/src/kernels) + %else + %define kernels %(ls -1 /lib/modules) + %endif +%endif +%endif + +# LDFLAGS are not sanitized by arch/*/Makefile for these architectures. +%ifarch ppc ppc64 ppc64le aarch64 +%global __global_ldflags %{nil} +%endif + +%if 0%{?fedora} >= 17 +%define prefix /usr +%endif + +# Kmodtool does its magic here. A patched version of kmodtool is shipped +# because the latest versions may not be available for your distribution. +# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 +%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } + + +%description +This package contains the kernel modules required to emulate +several interfaces provided by the Solaris kernel. + +%prep +# Error out if there was something wrong with kmodtool. +%{?kmodtool_check} + +# Print kmodtool output for debugging purposes: +bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null + +%if %{with debug} + %define debug --enable-debug +%else + %define debug --disable-debug +%endif + +%if %{with debug_log} + %define debug_log --enable-debug-log +%else + %define debug_log --disable-debug-log +%endif + +%if %{with debug_kmem} + %define debug_kmem --enable-debug-kmem +%else + %define debug_kmem --disable-debug-kmem +%endif + +%if %{with debug_kmem_tracking} + %define debug_kmem_tracking --enable-debug-kmem-tracking +%else + %define debug_kmem_tracking --disable-debug-kmem-tracking +%endif + +%if %{with atomic_spinlocks} + %define atomic_spinlocks --enable-atomic-spinlocks +%else + %define atomic_spinlocks --disable-atomic-spinlocks +%endif + +# Leverage VPATH from configure to avoid making multiple copies. +%define _configure ../%{module}-%{version}/configure + +%setup -q -c -T -a 0 + +for kernel_version in %{?kernel_versions}; do + %{__mkdir} _kmod_build_${kernel_version%%___*} +done + +%build +for kernel_version in %{?kernel_versions}; do + cd _kmod_build_${kernel_version%%___*} + %configure \ + --with-config=kernel \ +%if 0%{?rhel}%{?fedora} + --with-linux="${kernel_version##*___}" \ + --with-linux-obj="${kernel_version##*___}" \ +%else + --with-linux="$( \ + if [ -e "/lib/modules/${kernel_version%%___*}/source" ]; then \ + echo "/lib/modules/${kernel_version%%___*}/source"; \ + else \ + echo "/lib/modules/${kernel_version%%___*}/build"; \ + fi)" \ + --with-linux-obj="/lib/modules/${kernel_version%%___*}/build" \ +%endif + %{debug} \ + %{debug_log} \ + %{debug_kmem} \ + %{debug_kmem_tracking} \ + %{atomic_spinlocks} + make %{?_smp_mflags} + cd .. +done + + +%install +rm -rf ${RPM_BUILD_ROOT} + +# Relies on the kernel 'modules_install' make target. +for kernel_version in %{?kernel_versions}; do + cd _kmod_build_${kernel_version%%___*} + make install \ + DESTDIR=${RPM_BUILD_ROOT} \ + %{?prefix:INSTALL_MOD_PATH=%{?prefix}} \ + INSTALL_MOD_DIR=%{kmodinstdir_postfix} + cd .. +done + +# find-debuginfo.sh only considers executables +chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/* +%{?akmod_install} + + +%clean +rm -rf $RPM_BUILD_ROOT + +%changelog +* Mon Dec 18 2017 Tony Hutter - 0.7.5-1 +- Released 0.7.5-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.5 +* Thu Dec 07 2017 Tony Hutter - 0.7.4-1 +- Released 0.7.4-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.4 +* Wed Oct 18 2017 Tony Hutter - 0.7.3-1 +- Released 0.7.3-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.3 +* Fri Sep 22 2017 Tony Hutter - 0.7.2-1 +- Released 0.7.2-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.2 +* Tue Aug 8 2017 Tony Hutter - 0.7.1-1 +- Released 0.7.1-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.1 +* Wed Jul 26 2017 Brian Behlendorf - 0.7.0-1 +- Released 0.7.0-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0 --- linux-aws-4.15.0.orig/spl/rpm/generic/spl.spec.in +++ linux-aws-4.15.0/spl/rpm/generic/spl.spec.in @@ -0,0 +1,54 @@ +Name: @PACKAGE@ +Version: @VERSION@ +Release: @RELEASE@%{?dist} +Summary: Commands to control the kernel modules + +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires: %{name}-kmod = %{version} +Provides: %{name}-kmod-common = %{version} + +%description +This package contains the commands to verify the SPL +kernel modules are functioning properly. + +%prep +%setup -q + +%build +%configure --with-config=user +make %{?_smp_mflags} + +%install +%{__rm} -rf $RPM_BUILD_ROOT +make install DESTDIR=%{?buildroot} + +%files +%doc AUTHORS COPYING DISCLAIMER +%{_bindir}/* +%{_sbindir}/* +%{_mandir}/man1/* +%{_mandir}/man5/* + +%changelog +* Mon Dec 18 2017 Tony Hutter - 0.7.5-1 +- Released 0.7.5-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.5 +* Thu Dec 07 2017 Tony Hutter - 0.7.4-1 +- Released 0.7.4-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.4 +* Wed Oct 18 2017 Tony Hutter - 0.7.3-1 +- Released 0.7.3-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.3 +* Fri Sep 22 2017 Tony Hutter - 0.7.2-1 +- Released 0.7.2-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.2 +* Tue Aug 8 2017 Tony Hutter - 0.7.1-1 +- Released 0.7.1-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.1 +* Wed Jul 26 2017 Brian Behlendorf - 0.7.0-1 +- Released 0.7.0-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0 --- linux-aws-4.15.0.orig/spl/rpm/redhat/Makefile.am +++ linux-aws-4.15.0/spl/rpm/redhat/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in --- linux-aws-4.15.0.orig/spl/rpm/redhat/Makefile.in +++ linux-aws-4.15.0/spl/rpm/redhat/Makefile.in @@ -0,0 +1,500 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = rpm/redhat +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = spl.spec spl-kmod.spec spl-dkms.spec +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/spl-dkms.spec.in \ + $(srcdir)/spl-kmod.spec.in $(srcdir)/spl.spec.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = spl.spec.in spl-kmod.spec.in spl-dkms.spec.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rpm/redhat/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu rpm/redhat/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +spl.spec: $(top_builddir)/config.status $(srcdir)/spl.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +spl-kmod.spec: $(top_builddir)/config.status $(srcdir)/spl-kmod.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +spl-dkms.spec: $(top_builddir)/config.status $(srcdir)/spl-dkms.spec.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/rpm/redhat/spl-dkms.spec.in +++ linux-aws-4.15.0/spl/rpm/redhat/spl-dkms.spec.in @@ -0,0 +1,84 @@ +%{?!packager: %define packager Brian Behlendorf } + +%if ! 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version} +%define not_rpm 1 +%endif + +%define module @PACKAGE@ +%define mkconf scripts/dkms.mkconf + +Name: %{module}-dkms + +Version: @VERSION@ +Release: @RELEASE@%{?dist} +Summary: Kernel module(s) (dkms) + +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +Source0: %{module}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch + +Requires: dkms >= 2.2.0.2 +Requires: gcc, make, perl +%if 0%{?rhel}%{?fedora}%{?mageia}%{?suse_version} +Requires: kernel-devel +%endif +Provides: %{module}-kmod = %{version} + +%description +This package contains the dkms kernel modules required to emulate +several interfaces provided by the Solaris kernel. + +%prep +%setup -q -n %{module}-%{version} + +%build +%{mkconf} -n %{module} -v %{version} -f dkms.conf + +%install +if [ "$RPM_BUILD_ROOT" != "/" ]; then + rm -rf $RPM_BUILD_ROOT +fi +mkdir -p $RPM_BUILD_ROOT/usr/src/ +cp -rf ${RPM_BUILD_DIR}/%{module}-%{version} $RPM_BUILD_ROOT/usr/src/ + +%clean +if [ "$RPM_BUILD_ROOT" != "/" ]; then + rm -rf $RPM_BUILD_ROOT +fi + +%files +%defattr(-,root,root) +/usr/src/%{module}-%{version} + +%post +for POSTINST in /usr/lib/dkms/common.postinst; do + if [ -f $POSTINST ]; then + $POSTINST %{module} %{version} + exit $? + fi + echo "WARNING: $POSTINST does not exist." +done +echo -e "ERROR: DKMS version is too old and %{module} was not" +echo -e "built with legacy DKMS support." +echo -e "You must either rebuild %{module} with legacy postinst" +echo -e "support or upgrade DKMS to a more current version." +exit 1 + +%preun +CONFIG_H="/var/lib/dkms/%{module}/%{version}/*/*/%{module}_config.h" +SPEC_META_ALIAS="@PACKAGE@-@VERSION@-@RELEASE@" +DKMS_META_ALIAS=`cat $CONFIG_H 2>/dev/null | + awk -F'"' '/META_ALIAS/ { print $2; exit 0 }'` +if [ "$SPEC_META_ALIAS" = "$DKMS_META_ALIAS" ]; then + echo -e + echo -e "Uninstall of %{module} module ($SPEC_META_ALIAS) beginning:" + dkms remove -m %{module} -v %{version} --all %{!?not_rpm:--rpm_safe_upgrade} +fi +exit 0 + +%changelog +* %(date "+%a %b %d %Y") %packager %{version}-%{release} +- Automatic build by DKMS --- linux-aws-4.15.0.orig/spl/rpm/redhat/spl-kmod.spec.in +++ linux-aws-4.15.0/spl/rpm/redhat/spl-kmod.spec.in @@ -0,0 +1,110 @@ +%bcond_with debug +%bcond_with debug_log +%bcond_with debug_kmem +%bcond_with debug_kmem_tracking +%bcond_with atomic_spinlocks + +Name: @PACKAGE@-kmod +Version: @VERSION@ +Release: @RELEASE@%{?dist} + +Summary: Kernel module(s) +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +BuildRequires: %kernel_module_package_buildreqs +Source0: @PACKAGE@-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Additional dependency information for the kmod sub-package must be specified +# by generating a preamble text file which kmodtool can append to the spec file. +%(/bin/echo -e "\ +Requires: @PACKAGE@ = %{version}\n\ +Conflicts: @PACKAGE@-dkms\n\n" > %{_sourcedir}/kmod-preamble) + +# LDFLAGS are not sanitized by arch/*/Makefile for these architectures. +%ifarch ppc ppc64 ppc64le aarch64 +%global __global_ldflags %{nil} +%endif + +%description +This package contains the kernel modules required to emulate +several interfaces provided by the Solaris kernel. + +%define kmod_name spl + +%kernel_module_package -n %{kmod_name} -p %{_sourcedir}/kmod-preamble + +%define ksrc %{_usrsrc}/kernels/%{kverrel} +%define kobj %{ksrc} + +%package -n kmod-%{kmod_name}-devel +Summary: SPL kernel module(s) devel common +Group: System Environment/Kernel + +%description -n kmod-%{kmod_name}-devel +This package provides the header files and objects to build kernel modules +which depend on the SPL kernel module. + +%prep +if ! [ -d "%{ksrc}" ]; then + echo "Kernel build directory isn't set properly, cannot continue" + exit 1 +fi + +%if %{with debug} +%define debug --enable-debug +%else +%define debug --disable-debug +%endif + +%if %{with debug_log} +%define debug_log --enable-debug-log +%else +%define debug_log --disable-debug-log +%endif + +%if %{with debug_kmem} +%define debug_kmem --enable-debug-kmem +%else +%define debug_kmem --disable-debug-kmem +%endif + +%if %{with debug_kmem_tracking} +%define debug_kmem_tracking --enable-debug-kmem-tracking +%else +%define debug_kmem_tracking --disable-debug-kmem-tracking +%endif + +%if %{with atomic_spinlocks} +%define atomic_spinlocks --enable-atomic-spinlocks +%else +%define atomic_spinlocks --disable-atomic-spinlocks +%endif + +%setup -n %{kmod_name}-%{version} +%build +%configure \ + --with-config=kernel \ + --with-linux=%{ksrc} \ + --with-linux-obj=%{kobj} \ + %{debug} \ + %{debug_log} \ + %{debug_kmem} \ + %{debug_kmem_tracking} \ + %{atomic_spinlocks} +make %{?_smp_mflags} + +%install +make install \ + DESTDIR=${RPM_BUILD_ROOT} \ + INSTALL_MOD_DIR=extra/%{kmod_name} +%{__rm} -f %{buildroot}/lib/modules/%{kverrel}/modules.* +# find-debuginfo.sh only considers executables +%{__chmod} u+x %{buildroot}/lib/modules/%{kverrel}/extra/*/*/* + +%clean +rm -rf $RPM_BUILD_ROOT + +%files -n kmod-%{kmod_name}-devel +%{_usrsrc}/%{kmod_name}-%{version} --- linux-aws-4.15.0.orig/spl/rpm/redhat/spl.spec.in +++ linux-aws-4.15.0/spl/rpm/redhat/spl.spec.in @@ -0,0 +1,54 @@ +Name: @PACKAGE@ +Version: @VERSION@ +Release: @RELEASE@%{?dist} +Summary: Commands to control the kernel modules + +Group: System Environment/Kernel +License: GPLv2+ +URL: http://zfsonlinux.org/ +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires: %{name}-kmod = %{version} +Provides: %{name}-kmod-common = %{version} + +%description +This package contains the commands to verify the SPL +kernel modules are functioning properly. + +%prep +%setup -q + +%build +%configure --with-config=user +make %{?_smp_mflags} + +%install +%{__rm} -rf $RPM_BUILD_ROOT +make install DESTDIR=%{?buildroot} + +%files +%doc AUTHORS COPYING DISCLAIMER +%{_bindir}/* +%{_sbindir}/* +%{_mandir}/man1/* +%{_mandir}/man5/* + +%changelog +* Mon Dec 18 2017 Tony Hutter - 0.7.5-1 +- Released 0.7.5-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.5 +* Thu Dec 07 2017 Tony Hutter - 0.7.4-1 +- Released 0.7.4-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.4 +* Wed Oct 18 2017 Tony Hutter - 0.7.3-1 +- Released 0.7.3-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.3 +* Fri Sep 22 2017 Tony Hutter - 0.7.2-1 +- Released 0.7.2-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.2 +* Tue Aug 8 2017 Tony Hutter - 0.7.1-1 +- Released 0.7.1-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.1 +* Wed Jul 26 2017 Brian Behlendorf - 0.7.0-1 +- Released 0.7.0-1, detailed release notes are available at: +- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0 --- linux-aws-4.15.0.orig/spl/scripts/Makefile.am +++ linux-aws-4.15.0/spl/scripts/Makefile.am @@ -0,0 +1,4 @@ +EXTRA_DIST = check.sh dkms.mkconf dkms.postbuild kmodtool + +check: + scripts/check.sh --- linux-aws-4.15.0.orig/spl/scripts/Makefile.in +++ linux-aws-4.15.0/spl/scripts/Makefile.in @@ -0,0 +1,496 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = scripts +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/spl-build.m4 \ + $(top_srcdir)/config/spl-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/spl_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_KMEM = @DEBUG_KMEM@ +DEBUG_KMEM_TRACKING = @DEBUG_KMEM_TRACKING@ +DEBUG_SPL = @DEBUG_SPL@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL_CONFIG = @SPL_CONFIG@ +SPL_META_ALIAS = @SPL_META_ALIAS@ +SPL_META_AUTHOR = @SPL_META_AUTHOR@ +SPL_META_DATA = @SPL_META_DATA@ +SPL_META_LICENSE = @SPL_META_LICENSE@ +SPL_META_LT_AGE = @SPL_META_LT_AGE@ +SPL_META_LT_CURRENT = @SPL_META_LT_CURRENT@ +SPL_META_LT_REVISION = @SPL_META_LT_REVISION@ +SPL_META_NAME = @SPL_META_NAME@ +SPL_META_RELEASE = @SPL_META_RELEASE@ +SPL_META_VERSION = @SPL_META_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = check.sh dkms.mkconf dkms.postbuild kmodtool +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu scripts/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +check: + scripts/check.sh + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/spl/scripts/check.sh +++ linux-aws-4.15.0/spl/scripts/check.sh @@ -0,0 +1,97 @@ +#!/bin/bash +############################################################################### +# Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). +# Written by Brian Behlendorf . +# UCRL-CODE-235197 +# +# This file is part of the SPL, Solaris Porting Layer. +# For details, see . +# +# The SPL 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. +# +# The SPL 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. +# +# You should have received a copy of the GNU General Public License along +# with the SPL. If not, see . +############################################################################### +# This script runs the full set of regression tests. +############################################################################### + +prog=check.sh +spl_module=../module/spl/spl.ko +splat_module=../module/splat/splat.ko +splat_cmd=../cmd/splat/splat +verbose= + +die() { + echo "${prog}: $1" >&2 + exit 1 +} + +warn() { + echo "${prog}: $1" >&2 +} + +if [ -n "$V" ]; then + verbose="-v" +fi + +if [ -n "$TESTS" ]; then + tests="$TESTS" +else + tests="-a" +fi + +if [ $(id -u) != 0 ]; then + die "Must run as root" +fi + +if /sbin/lsmod | egrep -q "^spl|^splat"; then + die "Must start with spl modules unloaded" +fi + +if [ ! -f ${spl_module} ] || [ ! -f ${splat_module} ]; then + die "Source tree must be built, run 'make'" +fi + +/sbin/modprobe zlib_inflate &>/dev/null +/sbin/modprobe zlib_deflate &>/dev/null + +echo "Loading ${spl_module}" +/sbin/insmod ${spl_module} || die "Failed to load ${spl_module}" + +echo "Loading ${splat_module}" +/sbin/insmod ${splat_module} || die "Unable to load ${splat_module}" + +# Wait a maximum of 3 seconds for udev to detect the new splatctl +# device, if we do not see the character device file created assume +# udev is not running and manually create the character device. +for i in `seq 1 50`; do + sleep 0.1 + + if [ -c /dev/splatctl ]; then + break + fi + + if [ $i -eq 50 ]; then + mknod /dev/splatctl c 229 0 + fi +done + +$splat_cmd $tests $verbose + +echo "Unloading ${splat_module}" +/sbin/rmmod ${splat_module} || die "Failed to unload ${splat_module}" + +echo "Unloading ${spl_module}" +/sbin/rmmod ${spl_module} || die "Unable to unload ${spl_module}" + +exit 0 --- linux-aws-4.15.0.orig/spl/scripts/dkms.mkconf +++ linux-aws-4.15.0/spl/scripts/dkms.mkconf @@ -0,0 +1,79 @@ +#!/bin/sh + +PROG=$0 + +pkgcfg=/etc/sysconfig/spl + +while getopts "n:v:c:f:" opt; do + case $opt in + n) pkgname=$OPTARG ;; + v) pkgver=$OPTARG ;; + c) pkgcfg=$OPTARG ;; + f) filename=$OPTARG ;; + esac +done + +if [ -z "${pkgname}" -o -z "${pkgver}" -o -z "${filename}" ]; then + echo "Usage: $PROG -n -v -c -f " + exit 1 +fi + +cat >${filename} < -k -n " \ + "-t -v " + exit 1 +fi + +cp ${tree}/${pkgname}/${pkgver}/build/spl_config.h \ + ${tree}/${pkgname}/${pkgver}/build/module/Module.symvers \ + ${tree}/${pkgname}/${pkgver}/${kver}/${arch}/ --- linux-aws-4.15.0.orig/spl/scripts/kmodtool +++ linux-aws-4.15.0/spl/scripts/kmodtool @@ -0,0 +1,592 @@ +#!/bin/bash + +# kmodtool - Helper script for building kernel module RPMs +# Copyright (c) 2003-2012 Ville Skyttä , +# Thorsten Leemhuis +# Nicolas Chauvet +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +shopt -s extglob + +myprog="kmodtool-${repo}" +myver="0.12.1" + +kmodname= +build_kernels="current" +kernels_known_variants= +kernel_versions= +kernel_versions_to_build_for= +prefix= +filterfile= +target= +buildroot= + +error_out() +{ + local errorlevel=${1} + shift + echo "Error: $@" >&2 + # the next line is not multi-line safe -- not needed *yet* + echo "%global kmodtool_check echo \"kmodtool error: $@\"; exit ${errorlevel};" + exit ${errorlevel} +} + +print_rpmtemplate_header() +{ + echo + echo '%global kmodinstdir_prefix '${prefix}/lib/modules/ + echo '%global kmodinstdir_postfix '/extra/${kmodname}/ + echo '%global kernel_versions '${kernel_versions} + echo +} + +print_akmodtemplate () +{ + echo + cat <= %{?epoch:%{epoch}:}%{version} +Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} +EOF + + if [[ ${obsolete_name} ]]; then + echo "Provides: akmod-${obsolete_name} = ${obsolete_version}" + echo "Obsoletes: akmod-${obsolete_name} < ${obsolete_version}" + fi + + cat < /dev/null & + +%files -n akmod-${kmodname} +%defattr(-,root,root,-) +%{_usrsrc}/akmods/* + +EOF +} + +print_akmodmeta () +{ + cat <= %{?epoch:%{epoch}:}%{version} +Requires(post): ${prefix}/sbin/depmod +Requires(postun): ${prefix}/sbin/depmod +EOF + + if [[ ${obsolete_name} ]]; then + echo "Provides: kmod-${obsolete_name}-${kernel_uname_r} = ${obsolete_version}" + echo "Obsoletes: kmod-${obsolete_name}-${kernel_uname_r} < ${obsolete_version}" + fi + + # second part + if [[ ! "${customkernel}" ]]; then + cat < /dev/null || : +%postun -n kmod-${kmodname}-${kernel_uname_r} +${prefix}/sbin/depmod -aF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} &> /dev/null || : + +EOF + else + cat < /dev/null || : +%postun -n kmod-${kmodname}-${kernel_uname_r} +[[ "$(uname -r)" == "${kernel_uname_r}" ]] && ${prefix}/sbin/depmod -a > /dev/null || : + +EOF + fi + + # third part + cat <= %{?epoch:%{epoch}:}%{version}-%{release}" + fi + + if [[ ${obsolete_name} ]]; then + echo "Provides: kmod-${obsolete_name}-devel = ${obsolete_version}" + echo "Obsoletes: kmod-${obsolete_name}-devel < ${obsolete_version}" + fi + + cat < objects for the newest kernel. + +%files -n kmod-${kmodname}-devel +%defattr(644,root,root,755) +%{_usrsrc}/${kmodname}-%{version} +EOF + + for kernel in ${1}; do + local kernel_uname_r=${kernel} + echo "%exclude %{_usrsrc}/${kmodname}-%{version}/${kernel_uname_r}" + done + + echo + echo +} + +print_rpmtemplate_per_kmoddevelpkg () +{ + if [[ "${1}" == "--custom" ]]; then + shift + local customkernel=true + elif [[ "${1}" == "--redhat" ]]; then + # this is needed for akmods + shift + local redhatkernel=true + fi + + local kernel_uname_r=${1} + local kernel_variant="${2:+-${2}}" + + # first part + cat <= %{?epoch:%{epoch}:}%{version}-%{release} +%{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}} +EOF + + if [[ ${obsolete_name} ]]; then + echo "Provides: kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}" + echo "Obsoletes: kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}" + fi + + cat < -- filter the results with grep --file " + echo " --for-kernels -- created templates only for these kernels" + echo " --kmodname -- name of the kmod (required)" + echo " --devel -- make kmod-devel package" + echo " --noakmod -- no akmod package" + echo " --repo -- use buildsys-build--kerneldevpkgs" + echo " --target -- target-arch (required)" + echo " --buildroot -- Build root (place to look for build files)" +} + +while [ "${1}" ] ; do + case "${1}" in + --filterfile) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide path to a filter-file together with --filterfile" >&2 + elif [[ ! -e "${1}" ]]; then + error_out 2 "Filterfile ${1} not found" >&2 + fi + filterfile="${1}" + shift + ;; + --kmodname) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide the name of the kmod together with --kmodname" >&2 + fi + # strip pending -kmod + kmodname="${1%%-kmod}" + shift + ;; + --devel) + shift + devel="true" + ;; + --prefix) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide a prefix with --prefix" >&2 + fi + prefix="${1}" + shift + ;; + --repo) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide the name of the repo together with --repo" >&2 + fi + repo=${1} + shift + ;; + --for-kernels) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide the name of the kmod together with --kmodname" >&2 + fi + for_kernels="${1}" + shift + ;; + --noakmod) + shift + noakmod="true" + ;; + --obsolete-name) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide the name of the kmod to obsolte together with --obsolete-name" >&2 + fi + obsolete_name="${1}" + shift + ;; + --obsolete-version) + shift + if [[ ! "${1}" ]] ; then + error_out 2 "Please provide the version of the kmod to obsolte together with --obsolete-version" >&2 + fi + obsolete_version="${1}" + shift + ;; + --target) + shift + target="${1}" + shift + ;; + --akmod) + shift + build_kernels="akmod" + ;; + --newest) + shift + build_kernels="newest" + ;; + --current) + shift + build_kernels="current" + ;; + --buildroot) + shift + buildroot="${1}" + shift + ;; + --help) + myprog_help + exit 0 + ;; + --version) + echo "${myprog} ${myver}" + exit 0 + ;; + *) + echo "Error: Unknown option '${1}'." >&2 + usage >&2 + exit 2 + ;; + esac +done + +if [[ -e ./kmodtool-kernel-variants ]]; then + kernels_known_variants="$(cat ./kmodtool-kernel-variants)" +elif [[ -e /usr/share/kmodtool/kernel-variants ]] ; then + kernels_known_variants="$(cat /usr/share/kmodtool/kernel-variants)" +else + kernels_known_variants="@(smp?(-debug)|PAE?(-debug)|debug|kdump|xen|kirkwood|highbank|imx|omap|tegra)" +fi + +# general sanity checks +if [[ ! "${target}" ]]; then + error_out 2 "please pass target arch with --target" +elif [[ ! "${kmodname}" ]]; then + error_out 2 "please pass kmodname with --kmodname" +elif [[ ! "${kernels_known_variants}" ]] ; then + error_out 2 "could not determine known variants" +elif ( [[ "${obsolete_name}" ]] && [[ ! "${obsolete_version}" ]] ) || ( [[ ! "${obsolete_name}" ]] && [[ "${obsolete_version}" ]] ) ; then + error_out 2 "you need to provide both --obsolete-name and --obsolete-version" +fi + +# go +if [[ "${for_kernels}" ]]; then + # this is easy: + print_customrpmtemplate "${for_kernels}" +elif [[ "${build_kernels}" == "akmod" ]]; then + # do only a akmod package + print_akmodtemplate + print_akmodmeta +else + # seems we are on out own to decide for which kernels to build + + # we need more sanity checks in this case + if [[ ! "${repo}" ]]; then + error_out 2 "please provide repo name with --repo" + elif ! $(which buildsys-build-${repo}-kerneldevpkgs &> /dev/null) ; then + error_out 2 "buildsys-build-${repo}-kerneldevpkgs not found" + fi + + # call buildsys-build-${repo}-kerneldevpkgs to get the list of kernels + cmdoptions="--target ${target}" + + # filterfile to filter list of kernels? + if [[ "${filterfile}" ]] ; then + cmdoptions="${cmdoptions} --filterfile ${filterfile}" + fi + + kernel_versions_to_build_for="$(buildsys-build-${repo}-kerneldevpkgs --${build_kernels} ${cmdoptions})" + returncode=$? + if (( ${returncode} != 0 )); then + error_out 2 "buildsys-build-${repo}-kerneldevpkgs failed: $(buildsys-build-${repo}-kerneldevpkgs --${build_kernels} ${cmdoptions})" + fi + + if [[ "${build_kernels}" == "current" ]] && [[ ! "${noakmod}" ]]; then + print_akmodtemplate + fi + + print_rpmtemplate +fi --- linux-aws-4.15.0.orig/spl/spl.release.in +++ linux-aws-4.15.0/spl/spl.release.in @@ -0,0 +1 @@ +@SPL_META_VERSION@-@SPL_META_RELEASE@ --- linux-aws-4.15.0.orig/spl/spl_config.h.in +++ linux-aws-4.15.0/spl/spl_config.h.in @@ -0,0 +1,226 @@ +/* spl_config.h.in. Generated from configure.ac by autoheader. */ + +/* Atomic types use spinlocks */ +#undef ATOMIC_SPINLOCK + +/* Define to 1 to enable basic kmem accounting */ +#undef DEBUG_KMEM + +/* Define to 1 to enable detailed kmem tracking */ +#undef DEBUG_KMEM_TRACKING + +/* new shrinker callback wants 2 args */ +#undef HAVE_2ARGS_NEW_SHRINKER_CALLBACK + +/* old shrinker callback wants 2 args */ +#undef HAVE_2ARGS_OLD_SHRINKER_CALLBACK + +/* vfs_fsync() wants 2 args */ +#undef HAVE_2ARGS_VFS_FSYNC + +/* vfs_getattr wants 2 args */ +#undef HAVE_2ARGS_VFS_GETATTR + +/* vfs_unlink() wants 2 args */ +#undef HAVE_2ARGS_VFS_UNLINK + +/* zlib_deflate_workspacesize() wants 2 args */ +#undef HAVE_2ARGS_ZLIB_DEFLATE_WORKSPACESIZE + +/* old shrinker callback wants 3 args */ +#undef HAVE_3ARGS_SHRINKER_CALLBACK + +/* vfs_getattr wants 3 args */ +#undef HAVE_3ARGS_VFS_GETATTR + +/* vfs_unlink() wants 3 args */ +#undef HAVE_3ARGS_VFS_UNLINK + +/* vfs_getattr wants 4 args */ +#undef HAVE_4ARGS_VFS_GETATTR + +/* vfs_rename() wants 4 args */ +#undef HAVE_4ARGS_VFS_RENAME + +/* vfs_rename() wants 5 args */ +#undef HAVE_5ARGS_VFS_RENAME + +/* vfs_rename() wants 6 args */ +#undef HAVE_6ARGS_VFS_RENAME + +/* kernel defines atomic64_t */ +#undef HAVE_ATOMIC64_T + +/* struct ctl_table has ctl_name */ +#undef HAVE_CTL_NAME + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* fops->fallocate() exists */ +#undef HAVE_FILE_FALLOCATE + +/* struct fs_struct uses spinlock_t */ +#undef HAVE_FS_STRUCT_SPINLOCK + +/* group_info->gid exists */ +#undef HAVE_GROUP_INFO_GID + +/* fops->fallocate() exists */ +#undef HAVE_INODE_FALLOCATE + +/* yes */ +#undef HAVE_INODE_LOCK_SHARED + +/* truncate_range() inode operation is available */ +#undef HAVE_INODE_TRUNCATE_RANGE + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* kernel_read() take loff_t pointer */ +#undef HAVE_KERNEL_READ_PPOS + +/* use timer_setup() for timer initialization */ +#undef HAVE_KERNEL_TIMER_SETUP + +/* kernel_write() take loff_t pointer */ +#undef HAVE_KERNEL_WRITE_PPOS + +/* struct kmem_cache has allocflags */ +#undef HAVE_KMEM_CACHE_ALLOCFLAGS + +/* kmem_cache_create_usercopy() exists */ +#undef HAVE_KMEM_CACHE_CREATE_USERCOPY + +/* struct kmem_cache has gfpflags */ +#undef HAVE_KMEM_CACHE_GFPFLAGS + +/* kuid_t/kgid_t in use */ +#undef HAVE_KUIDGID_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* yes */ +#undef HAVE_PDE_DATA + +/* struct rw_semaphore has member activity */ +#undef HAVE_RWSEM_ACTIVITY + +/* struct rw_semaphore has atomic_long_t member count */ +#undef HAVE_RWSEM_ATOMIC_LONG_COUNT + +/* linux/sched/rt.h exists */ +#undef HAVE_SCHED_RT_HEADER + +/* linux/sched/signal.h exists */ +#undef HAVE_SCHED_SIGNAL_HEADER + +/* set_fs_pwd() needs const path * */ +#undef HAVE_SET_FS_PWD_WITH_CONST + +/* struct shrink_control exists */ +#undef HAVE_SHRINK_CONTROL_STRUCT + +/* ->count_objects exists */ +#undef HAVE_SPLIT_SHRINKER_CALLBACK + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* usleep_range is available */ +#undef HAVE_USLEEP_RANGE + +/* yes */ +#undef HAVE_WAIT_ON_BIT_ACTION + +/* wait_queue_entry_t exists */ +#undef HAVE_WAIT_QUEUE_ENTRY_T + +/* wq_head->head and wq_entry->entry exist */ +#undef HAVE_WAIT_QUEUE_HEAD_ENTRY + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* struct rw_semaphore member wait_lock is raw_spinlock_t */ +#undef RWSEM_SPINLOCK_IS_RAW + +/* Define to 1 if GPL-only symbols can be used */ +#undef SPL_IS_GPL_COMPATIBLE + +/* Define the project alias string. */ +#undef SPL_META_ALIAS + +/* Define the project author. */ +#undef SPL_META_AUTHOR + +/* Define the project release date. */ +#undef SPL_META_DATA + +/* Define the project license. */ +#undef SPL_META_LICENSE + +/* Define the libtool library 'age' version information. */ +#undef SPL_META_LT_AGE + +/* Define the libtool library 'current' version information. */ +#undef SPL_META_LT_CURRENT + +/* Define the libtool library 'revision' version information. */ +#undef SPL_META_LT_REVISION + +/* Define the project name. */ +#undef SPL_META_NAME + +/* Define the project release. */ +#undef SPL_META_RELEASE + +/* Define the project version. */ +#undef SPL_META_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION --- linux-aws-4.15.0.orig/tools/gpio/gpio-event-mon.c +++ linux-aws-4.15.0/tools/gpio/gpio-event-mon.c @@ -23,6 +23,7 @@ #include #include #include +#include #include int monitor_device(const char *device_name, --- linux-aws-4.15.0.orig/tools/hv/hv_kvp_daemon.8 +++ linux-aws-4.15.0/tools/hv/hv_kvp_daemon.8 @@ -0,0 +1,26 @@ +.\" This page Copyright (C) 2012 Andy Whitcroft +.\" Distributed under the GPL v2 or later. +.TH HV_KVP_DAEMON 8 +.SH NAME +hv_kvp_daemon \- Hyper-V Key Value Pair daemon +.SH SYNOPSIS +.ft B +.B hv_kvp_daemon +.br +.SH DESCRIPTION +\fBhv_kvp_daemon\fP +is the userspace component of the Hyper-V key value pair functionality, +communicating via a netlink socket with the kernel HV-KVP driver. +This pairing allows the Hyper-V host to pass configuration information +(such as IP addresses) to the guest and allows the host to obtain guest +version information. + +.SH FILES +.ta +.nf +/var/opt/hyperv/.kvp_pool_* +.fi + +.SH AUTHORS +.nf +Written by K. Y. Srinivasan --- linux-aws-4.15.0.orig/tools/hv/lsvmbus +++ linux-aws-4.15.0/tools/hv/lsvmbus @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 import os @@ -17,7 +17,7 @@ vmbus_sys_path = '/sys/bus/vmbus/devices' if not os.path.isdir(vmbus_sys_path): - print "%s doesn't exist: exiting..." % vmbus_sys_path + print("%s doesn't exist: exiting..." % vmbus_sys_path) exit(-1) vmbus_dev_dict = { @@ -93,11 +93,11 @@ for d in vmbus_dev_list: if verbose == 0: - print ('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc) + print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc)) elif verbose == 1: - print ('VMBUS ID ' + format1) % \ - (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping) + print(('VMBUS ID ' + format1) % \ + (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping)) else: - print ('VMBUS ID ' + format2) % \ + print(('VMBUS ID ' + format2) % \ (d.vmbus_id, d.class_id, d.dev_desc, \ - d.device_id, d.sysfs_path, d.chn_vp_mapping) + d.device_id, d.sysfs_path, d.chn_vp_mapping)) --- linux-aws-4.15.0.orig/tools/hv/lsvmbus.8 +++ linux-aws-4.15.0/tools/hv/lsvmbus.8 @@ -0,0 +1,23 @@ +.\" This page Copyright (C) 2016 Andy Whitcroft +.\" Distributed under the GPL v2 or later. +.TH LSVMBUS 8 +.SH NAME +lsvmbus \- List Hyper-V VMBus devices +.SH SYNOPSIS +.ft B +.B lsvmbus [-vv] +.br +.SH DESCRIPTION +\fBlsvmbus\fP +displays devices attached to the Hyper-V VMBus. +.SH OPTIONS +.\" +.TP +.B -v +With -v more information is printed including the VMBus Rel_ID, class ID, +Rel_ID, and which channel is bound to which virtual processor. Use -vv +for additional detail including the Device_ID and the sysfs path. +.\" +.SH AUTHORS +.nf +Written by Dexuan Cui --- linux-aws-4.15.0.orig/tools/lib/bpf/Makefile +++ linux-aws-4.15.0/tools/lib/bpf/Makefile @@ -69,7 +69,7 @@ FEATURE_TESTS = libelf libelf-getphdrnum libelf-mmap bpf FEATURE_DISPLAY = libelf bpf -INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi +INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi -I$(srctree)/arch/$(ARCH)/include/uapi -I$(srctree)/arch/$(ARCH)/include/generated/uapi -I$(srctree)/include/uapi -I$(srctree)/include/generated/uapi FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES) check_feat := 1 --- linux-aws-4.15.0.orig/tools/objtool/check.c +++ linux-aws-4.15.0/tools/objtool/check.c @@ -543,18 +543,14 @@ dest_off = insn->offset + insn->len + insn->immediate; insn->call_dest = find_symbol_by_offset(insn->sec, dest_off); - /* - * FIXME: Thanks to retpolines, it's now considered - * normal for a function to call within itself. So - * disable this warning for now. - */ -#if 0 - if (!insn->call_dest) { - WARN_FUNC("can't find call dest symbol at offset 0x%lx", - insn->sec, insn->offset, dest_off); + + if (!insn->call_dest && !insn->ignore) { + WARN_FUNC("unsupported intra-function call", + insn->sec, insn->offset); + WARN("If this is a retpoline, please patch it in with alternatives and annotate it with ANNOTATE_NOSPEC_ALTERNATIVE."); return -1; } -#endif + } else if (rela->sym->type == STT_SECTION) { insn->call_dest = find_symbol_by_offset(rela->sym->sec, rela->addend+4); @@ -598,7 +594,7 @@ struct instruction *orig_insn, struct instruction **new_insn) { - struct instruction *last_orig_insn, *last_new_insn, *insn, *fake_jump; + struct instruction *last_orig_insn, *last_new_insn, *insn, *fake_jump = NULL; unsigned long dest_off; last_orig_insn = NULL; @@ -614,28 +610,30 @@ last_orig_insn = insn; } - if (!next_insn_same_sec(file, last_orig_insn)) { - WARN("%s: don't know how to handle alternatives at end of section", - special_alt->orig_sec->name); - return -1; - } - - fake_jump = malloc(sizeof(*fake_jump)); - if (!fake_jump) { - WARN("malloc failed"); - return -1; + if (next_insn_same_sec(file, last_orig_insn)) { + fake_jump = malloc(sizeof(*fake_jump)); + if (!fake_jump) { + WARN("malloc failed"); + return -1; + } + memset(fake_jump, 0, sizeof(*fake_jump)); + INIT_LIST_HEAD(&fake_jump->alts); + clear_insn_state(&fake_jump->state); + + fake_jump->sec = special_alt->new_sec; + fake_jump->offset = -1; + fake_jump->type = INSN_JUMP_UNCONDITIONAL; + fake_jump->jump_dest = list_next_entry(last_orig_insn, list); + fake_jump->ignore = true; } - memset(fake_jump, 0, sizeof(*fake_jump)); - INIT_LIST_HEAD(&fake_jump->alts); - clear_insn_state(&fake_jump->state); - - fake_jump->sec = special_alt->new_sec; - fake_jump->offset = -1; - fake_jump->type = INSN_JUMP_UNCONDITIONAL; - fake_jump->jump_dest = list_next_entry(last_orig_insn, list); - fake_jump->ignore = true; if (!special_alt->new_len) { + if (!fake_jump) { + WARN("%s: empty alternative at end of section", + special_alt->orig_sec->name); + return -1; + } + *new_insn = fake_jump; return 0; } @@ -648,6 +646,8 @@ last_new_insn = insn; + insn->ignore = orig_insn->ignore_alts; + if (insn->type != INSN_JUMP_CONDITIONAL && insn->type != INSN_JUMP_UNCONDITIONAL) continue; @@ -656,8 +656,14 @@ continue; dest_off = insn->offset + insn->len + insn->immediate; - if (dest_off == special_alt->new_off + special_alt->new_len) + if (dest_off == special_alt->new_off + special_alt->new_len) { + if (!fake_jump) { + WARN("%s: alternative jump to end of section", + special_alt->orig_sec->name); + return -1; + } insn->jump_dest = fake_jump; + } if (!insn->jump_dest) { WARN_FUNC("can't find alternative jump destination", @@ -672,7 +678,8 @@ return -1; } - list_add(&fake_jump->list, &last_new_insn->list); + if (fake_jump) + list_add(&fake_jump->list, &last_new_insn->list); return 0; } @@ -729,10 +736,6 @@ goto out; } - /* Ignore retpoline alternatives. */ - if (orig_insn->ignore_alts) - continue; - new_insn = NULL; if (!special_alt->group || special_alt->new_len) { new_insn = find_insn(file, special_alt->new_sec, @@ -1089,11 +1092,11 @@ if (ret) return ret; - ret = add_call_destinations(file); + ret = add_special_section_alts(file); if (ret) return ret; - ret = add_special_section_alts(file); + ret = add_call_destinations(file); if (ret) return ret; @@ -1720,10 +1723,12 @@ insn->visited = true; - list_for_each_entry(alt, &insn->alts, list) { - ret = validate_branch(file, alt->insn, state); - if (ret) - return 1; + if (!insn->ignore_alts) { + list_for_each_entry(alt, &insn->alts, list) { + ret = validate_branch(file, alt->insn, state); + if (ret) + return 1; + } } switch (insn->type) { --- linux-aws-4.15.0.orig/tools/objtool/orc_gen.c +++ linux-aws-4.15.0/tools/objtool/orc_gen.c @@ -98,6 +98,11 @@ struct orc_entry *orc; struct rela *rela; + if (!insn_sec->sym) { + WARN("missing symbol for section %s", insn_sec->name); + return -1; + } + /* populate ORC data */ orc = (struct orc_entry *)u_sec->data->d_buf + idx; memcpy(orc, o, sizeof(*orc)); --- linux-aws-4.15.0.orig/tools/perf/Makefile.config +++ linux-aws-4.15.0/tools/perf/Makefile.config @@ -649,6 +649,10 @@ endif endif +ifdef HAVE_NO_LIBBFD + feature-libbfd := 0 +endif + ifeq ($(feature-libbfd), 1) EXTLIBS += -lbfd --- linux-aws-4.15.0.orig/tools/perf/arch/arm64/util/Build +++ linux-aws-4.15.0/tools/perf/arch/arm64/util/Build @@ -1,3 +1,4 @@ +libperf-y += header.o libperf-$(CONFIG_DWARF) += dwarf-regs.o libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o --- linux-aws-4.15.0.orig/tools/perf/arch/arm64/util/header.c +++ linux-aws-4.15.0/tools/perf/arch/arm64/util/header.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include "header.h" + +#define MIDR "/regs/identification/midr_el1" +#define MIDR_SIZE 19 +#define MIDR_REVISION_MASK 0xf +#define MIDR_VARIANT_SHIFT 20 +#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) + +char *get_cpuid_str(struct perf_pmu *pmu) +{ + char *buf = NULL; + char path[PATH_MAX]; + const char *sysfs = sysfs__mountpoint(); + int cpu; + u64 midr = 0; + struct cpu_map *cpus; + FILE *file; + + if (!sysfs || !pmu || !pmu->cpus) + return NULL; + + buf = malloc(MIDR_SIZE); + if (!buf) + return NULL; + + /* read midr from list of cpus mapped to this pmu */ + cpus = cpu_map__get(pmu->cpus); + for (cpu = 0; cpu < cpus->nr; cpu++) { + scnprintf(path, PATH_MAX, "%s/devices/system/cpu/cpu%d"MIDR, + sysfs, cpus->map[cpu]); + + file = fopen(path, "r"); + if (!file) { + pr_debug("fopen failed for file %s\n", path); + continue; + } + + if (!fgets(buf, MIDR_SIZE, file)) { + fclose(file); + continue; + } + fclose(file); + + /* Ignore/clear Variant[23:20] and + * Revision[3:0] of MIDR + */ + midr = strtoul(buf, NULL, 16); + midr &= (~(MIDR_VARIANT_MASK | MIDR_REVISION_MASK)); + scnprintf(buf, MIDR_SIZE, "0x%016lx", midr); + /* got midr break loop */ + break; + } + + if (!midr) { + pr_err("failed to get cpuid string for PMU %s\n", pmu->name); + free(buf); + buf = NULL; + } + + cpu_map__put(cpus); + return buf; +} --- linux-aws-4.15.0.orig/tools/perf/arch/powerpc/util/header.c +++ linux-aws-4.15.0/tools/perf/arch/powerpc/util/header.c @@ -35,7 +35,7 @@ } char * -get_cpuid_str(void) +get_cpuid_str(struct perf_pmu *pmu __maybe_unused) { char *bufp; --- linux-aws-4.15.0.orig/tools/perf/arch/x86/util/header.c +++ linux-aws-4.15.0/tools/perf/arch/x86/util/header.c @@ -66,7 +66,7 @@ } char * -get_cpuid_str(void) +get_cpuid_str(struct perf_pmu *pmu __maybe_unused) { char *buf = malloc(128); --- linux-aws-4.15.0.orig/tools/perf/arch/x86/util/unwind-libunwind.c +++ linux-aws-4.15.0/tools/perf/arch/x86/util/unwind-libunwind.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 +#include #ifndef REMOTE_UNWIND_LIBUNWIND -#include #include #include "perf_regs.h" #include "../../util/unwind.h" --- linux-aws-4.15.0.orig/tools/perf/pmu-events/arch/arm64/cavium/thunderx2-imp-def.json +++ linux-aws-4.15.0/tools/perf/pmu-events/arch/arm64/cavium/thunderx2-imp-def.json @@ -0,0 +1,62 @@ +[ + { + "PublicDescription": "Attributable Level 1 data cache access, read", + "EventCode": "0x40", + "EventName": "l1d_cache_rd", + "BriefDescription": "L1D cache read", + }, + { + "PublicDescription": "Attributable Level 1 data cache access, write ", + "EventCode": "0x41", + "EventName": "l1d_cache_wr", + "BriefDescription": "L1D cache write", + }, + { + "PublicDescription": "Attributable Level 1 data cache refill, read", + "EventCode": "0x42", + "EventName": "l1d_cache_refill_rd", + "BriefDescription": "L1D cache refill read", + }, + { + "PublicDescription": "Attributable Level 1 data cache refill, write", + "EventCode": "0x43", + "EventName": "l1d_cache_refill_wr", + "BriefDescription": "L1D refill write", + }, + { + "PublicDescription": "Attributable Level 1 data TLB refill, read", + "EventCode": "0x4C", + "EventName": "l1d_tlb_refill_rd", + "BriefDescription": "L1D tlb refill read", + }, + { + "PublicDescription": "Attributable Level 1 data TLB refill, write", + "EventCode": "0x4D", + "EventName": "l1d_tlb_refill_wr", + "BriefDescription": "L1D tlb refill write", + }, + { + "PublicDescription": "Attributable Level 1 data or unified TLB access, read", + "EventCode": "0x4E", + "EventName": "l1d_tlb_rd", + "BriefDescription": "L1D tlb read", + }, + { + "PublicDescription": "Attributable Level 1 data or unified TLB access, write", + "EventCode": "0x4F", + "EventName": "l1d_tlb_wr", + "BriefDescription": "L1D tlb write", + }, + { + "PublicDescription": "Bus access read", + "EventCode": "0x60", + "EventName": "bus_access_rd", + "BriefDescription": "Bus access read", + }, + { + "PublicDescription": "Bus access write", + "EventCode": "0x61", + "EventName": "bus_access_wr", + "BriefDescription": "Bus access write", + } +] --- linux-aws-4.15.0.orig/tools/perf/pmu-events/arch/arm64/mapfile.csv +++ linux-aws-4.15.0/tools/perf/pmu-events/arch/arm64/mapfile.csv @@ -0,0 +1,15 @@ +# Format: +# MIDR,Version,JSON/file/pathname,Type +# +# where +# MIDR Processor version +# Variant[23:20] and Revision [3:0] should be zero. +# Version could be used to track version of of JSON file +# but currently unused. +# JSON/file/pathname is the path to JSON file, relative +# to tools/perf/pmu-events/arch/arm64/. +# Type is core, uncore etc +# +# +#Family-model,Version,Filename,EventType +0x00000000420f5160,v1,cavium,core --- linux-aws-4.15.0.orig/tools/perf/util/header.h +++ linux-aws-4.15.0/tools/perf/util/header.h @@ -9,6 +9,7 @@ #include #include "event.h" #include "env.h" +#include "pmu.h" enum { HEADER_RESERVED = 0, /* always cleared */ @@ -166,5 +167,5 @@ */ int get_cpuid(char *buffer, size_t sz); -char *get_cpuid_str(void); +char *get_cpuid_str(struct perf_pmu *pmu __maybe_unused); #endif /* __PERF_HEADER_H */ --- linux-aws-4.15.0.orig/tools/perf/util/metricgroup.c +++ linux-aws-4.15.0/tools/perf/util/metricgroup.c @@ -270,7 +270,7 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter, bool raw) { - struct pmu_events_map *map = perf_pmu__find_map(); + struct pmu_events_map *map = perf_pmu__find_map(NULL); struct pmu_event *pe; int i; struct rblist groups; @@ -368,7 +368,7 @@ static int metricgroup__add_metric(const char *metric, struct strbuf *events, struct list_head *group_list) { - struct pmu_events_map *map = perf_pmu__find_map(); + struct pmu_events_map *map = perf_pmu__find_map(NULL); struct pmu_event *pe; int ret = -EINVAL; int i, j; --- linux-aws-4.15.0.orig/tools/perf/util/pmu.c +++ linux-aws-4.15.0/tools/perf/util/pmu.c @@ -537,17 +537,45 @@ } /* + * PMU CORE devices have different name other than cpu in sysfs on some + * platforms. looking for possible sysfs files to identify as core device. + */ +static int is_pmu_core(const char *name) +{ + struct stat st; + char path[PATH_MAX]; + const char *sysfs = sysfs__mountpoint(); + + if (!sysfs) + return 0; + + /* Look for cpu sysfs (x86 and others) */ + scnprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu", sysfs); + if ((stat(path, &st) == 0) && + (strncmp(name, "cpu", strlen("cpu")) == 0)) + return 1; + + /* Look for cpu sysfs (specific to arm) */ + scnprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/cpus", + sysfs, name); + if (stat(path, &st) == 0) + return 1; + + return 0; +} + +/* * Return the CPU id as a raw string. * * Each architecture should provide a more precise id string that * can be use to match the architecture's "mapfile". */ -char * __weak get_cpuid_str(void) +char * __weak get_cpuid_str(struct perf_pmu *pmu __maybe_unused) { return NULL; } -static char *perf_pmu__getcpuid(void) +static char *perf_pmu__getcpuid(struct perf_pmu *pmu) { char *cpuid; static bool printed; @@ -556,7 +584,7 @@ if (cpuid) cpuid = strdup(cpuid); if (!cpuid) - cpuid = get_cpuid_str(); + cpuid = get_cpuid_str(pmu); if (!cpuid) return NULL; @@ -567,12 +595,18 @@ return cpuid; } -struct pmu_events_map *perf_pmu__find_map(void) +struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu) { struct pmu_events_map *map; - char *cpuid = perf_pmu__getcpuid(); + char *cpuid = perf_pmu__getcpuid(pmu); int i; + /* on some platforms which uses cpus map, cpuid can be NULL for + * PMUs other than CORE PMUs. + */ + if (!cpuid) + return NULL; + i = 0; for (;;) { map = &pmu_events_map[i++]; @@ -593,13 +627,14 @@ * to the current running CPU. Then, add all PMU events from that table * as aliases. */ -static void pmu_add_cpu_aliases(struct list_head *head, const char *name) +static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu) { int i; struct pmu_events_map *map; struct pmu_event *pe; + const char *name = pmu->name; - map = perf_pmu__find_map(); + map = perf_pmu__find_map(pmu); if (!map) return; @@ -608,7 +643,6 @@ */ i = 0; while (1) { - const char *pname; pe = &map->table[i++]; if (!pe->name) { @@ -617,9 +651,13 @@ break; } - pname = pe->pmu ? pe->pmu : "cpu"; - if (strncmp(pname, name, strlen(pname))) - continue; + if (!is_pmu_core(name)) { + /* check for uncore devices */ + if (pe->pmu == NULL) + continue; + if (strncmp(pe->pmu, name, strlen(pe->pmu))) + continue; + } /* need type casts to override 'const' */ __perf_pmu__new_alias(head, NULL, (char *)pe->name, @@ -661,21 +699,20 @@ if (pmu_aliases(name, &aliases)) return NULL; - pmu_add_cpu_aliases(&aliases, name); pmu = zalloc(sizeof(*pmu)); if (!pmu) return NULL; pmu->cpus = pmu_cpumask(name); - + pmu->name = strdup(name); + pmu->type = type; pmu->is_uncore = pmu_is_uncore(name); + pmu_add_cpu_aliases(&aliases, pmu); INIT_LIST_HEAD(&pmu->format); INIT_LIST_HEAD(&pmu->aliases); list_splice(&format, &pmu->format); list_splice(&aliases, &pmu->aliases); - pmu->name = strdup(name); - pmu->type = type; list_add_tail(&pmu->list, &pmus); pmu->default_config = perf_pmu__get_default_config(pmu); --- linux-aws-4.15.0.orig/tools/perf/util/pmu.h +++ linux-aws-4.15.0/tools/perf/util/pmu.h @@ -92,6 +92,6 @@ struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu); -struct pmu_events_map *perf_pmu__find_map(void); +struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu); #endif /* __PMU_H */ --- linux-aws-4.15.0.orig/tools/testing/selftests/powerpc/ptrace/Makefile +++ linux-aws-4.15.0/tools/testing/selftests/powerpc/ptrace/Makefile @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 TEST_PROGS := ptrace-gpr ptrace-tm-gpr ptrace-tm-spd-gpr \ - ptrace-tar ptrace-tm-tar ptrace-tm-spd-tar ptrace-vsx ptrace-tm-vsx \ - ptrace-tm-spd-vsx ptrace-tm-spr + ptrace-tar ptrace-tm-tar ptrace-tm-spd-tar ptrace-vsx include ../../lib.mk --- linux-aws-4.15.0.orig/tools/usb/usbip/src/usbip_bind.c +++ linux-aws-4.15.0/tools/usb/usbip/src/usbip_bind.c @@ -144,6 +144,7 @@ int rc; struct udev *udev; struct udev_device *dev; + const char *devpath; /* Check whether the device with this bus ID exists. */ udev = udev_new(); @@ -152,8 +153,16 @@ err("device with the specified bus ID does not exist"); return -1; } + devpath = udev_device_get_devpath(dev); udev_unref(udev); + /* If the device is already attached to vhci_hcd - bail out */ + if (strstr(devpath, USBIP_VHCI_DRV_NAME)) { + err("bind loop detected: device: %s is attached to %s\n", + devpath, USBIP_VHCI_DRV_NAME); + return -1; + } + rc = unbind_other(busid); if (rc == UNBIND_ST_FAILED) { err("could not unbind driver from device on busid %s", busid); --- linux-aws-4.15.0.orig/tools/usb/usbip/src/usbip_list.c +++ linux-aws-4.15.0/tools/usb/usbip/src/usbip_list.c @@ -187,6 +187,7 @@ const char *busid; char product_name[128]; int ret = -1; + const char *devpath; /* Create libudev context. */ udev = udev_new(); @@ -209,6 +210,14 @@ path = udev_list_entry_get_name(dev_list_entry); dev = udev_device_new_from_syspath(udev, path); + /* Ignore devices attached to vhci_hcd */ + devpath = udev_device_get_devpath(dev); + if (strstr(devpath, USBIP_VHCI_DRV_NAME)) { + dbg("Skip the device %s already attached to %s\n", + devpath, USBIP_VHCI_DRV_NAME); + continue; + } + /* Get device information. */ idVendor = udev_device_get_sysattr_value(dev, "idVendor"); idProduct = udev_device_get_sysattr_value(dev, "idProduct"); --- linux-aws-4.15.0.orig/ubuntu/Kconfig +++ linux-aws-4.15.0/ubuntu/Kconfig @@ -0,0 +1,21 @@ +menu "Ubuntu Supplied Third-Party Device Drivers" + +# +# NOTE: to allow drivers to be added and removed without causing merge +# collisions you should add new entries in the middle of the six lines +# of ## at the bottom of the list. Always add three lines of ## above +# your new entry and maintain the six lines below. +# + +## +## +## +source "ubuntu/hio/Kconfig" +## +## +## +## +## +## + +endmenu --- linux-aws-4.15.0.orig/ubuntu/Makefile +++ linux-aws-4.15.0/ubuntu/Makefile @@ -0,0 +1,39 @@ +# +# Makefile for the Linux kernel ubuntu supplied third-party device drivers. +# + +# +# NOTE: to allow drivers to be added and removed without causing merge +# collisions you should add new entries in the middle of the six lines +# of ## at the bottom of the list. Always add three lines of ## above +# your new entry and maintain the six lines below. +# + +## +## +## +## +## +## +ifeq ($(ARCH),x86) +obj-y += vbox/ +endif +## +## +## +obj-$(CONFIG_HIO) += hio/ +## +## +## +ifeq ($(ARCH),x86) +obj-y += xr-usb-serial/ +endif +## +## +## +## +## +## + +# This is a stupid trick to get kbuild to create ubuntu/built-in.o +obj- += foo.o --- linux-aws-4.15.0.orig/ubuntu/hio/Kconfig +++ linux-aws-4.15.0/ubuntu/hio/Kconfig @@ -0,0 +1,4 @@ +config HIO + tristate "ES3000 V2 High-Performance PCIe SSD" + ---help--- + Driver for ES3000 V2 High-Performance PCIe SSD. --- linux-aws-4.15.0.orig/ubuntu/hio/Makefile +++ linux-aws-4.15.0/ubuntu/hio/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_HIO) += hio.o --- linux-aws-4.15.0.orig/ubuntu/hio/hio.c +++ linux-aws-4.15.0/ubuntu/hio/hio.c @@ -0,0 +1,13249 @@ +/* +* Huawei SSD device driver +* Copyright (c) 2016, Huawei Technologies Co., Ltd. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms and conditions of the GNU General Public License, +* version 2, as published by the Free Software Foundation. +* +* This program is distributed in the hope 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_VERSION_CODE +#include +#endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* HDIO_GETGEO */ +#include +#include +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +#include +#endif +#include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) +#include +#include +#else +#include +#endif +#include +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,17)) +#include +#endif + +/* driver */ +#define MODULE_NAME "hio" +#define DRIVER_VERSION "2.1.0.40" +#define DRIVER_VERSION_LEN 16 + +#define SSD_FW_MIN 0x1 + +#define SSD_DEV_NAME MODULE_NAME +#define SSD_DEV_NAME_LEN 16 +#define SSD_CDEV_NAME "c"SSD_DEV_NAME +#define SSD_SDEV_NAME "s"SSD_DEV_NAME + + +#define SSD_CMAJOR 0 +#define SSD_MAJOR 0 +#define SSD_MAJOR_SL 0 +#define SSD_MINORS 16 + +#define SSD_MAX_DEV 702 +#define SSD_ALPHABET_NUM 26 + +#define hio_info(f, arg...) printk(KERN_INFO MODULE_NAME"info: " f , ## arg) +#define hio_note(f, arg...) printk(KERN_NOTICE MODULE_NAME"note: " f , ## arg) +#define hio_warn(f, arg...) printk(KERN_WARNING MODULE_NAME"warn: " f , ## arg) +#define hio_err(f, arg...) printk(KERN_ERR MODULE_NAME"err: " f , ## arg) + +/* slave port */ +#define SSD_SLAVE_PORT_DEVID 0x000a + +/* int mode */ + +/* 2.6.9 msi affinity bug, should turn msi & msi-x off */ +//#define SSD_MSI +#define SSD_ESCAPE_IRQ + +//#define SSD_MSIX +#ifndef MODULE +#define SSD_MSIX +#endif +#define SSD_MSIX_VEC 8 +#ifdef SSD_MSIX +#undef SSD_MSI +#undef SSD_ESCAPE_IRQ +#define SSD_MSIX_AFFINITY_FORCE +#endif + +#define SSD_TRIM + +/* Over temperature protect */ +#define SSD_OT_PROTECT + +#ifdef SSD_QUEUE_PBIO +#define BIO_SSD_PBIO 20 +#endif + +/* debug */ +//#define SSD_DEBUG_ERR + +/* cmd timer */ +#define SSD_CMD_TIMEOUT (60*HZ) + +/* i2c & smbus */ +#define SSD_SPI_TIMEOUT (5*HZ) +#define SSD_I2C_TIMEOUT (5*HZ) + +#define SSD_I2C_MAX_DATA (127) +#define SSD_SMBUS_BLOCK_MAX (32) +#define SSD_SMBUS_DATA_MAX (SSD_SMBUS_BLOCK_MAX + 2) + +/* wait for init */ +#define SSD_INIT_WAIT (1000) //1s +#define SSD_CONTROLLER_WAIT (20*1000/SSD_INIT_WAIT) //20s +#define SSD_INIT_MAX_WAIT (500*1000/SSD_INIT_WAIT) //500s +#define SSD_INIT_MAX_WAIT_V3_2 (1400*1000/SSD_INIT_WAIT) //1400s +#define SSD_RAM_INIT_MAX_WAIT (10*1000/SSD_INIT_WAIT) //10s +#define SSD_CH_INFO_MAX_WAIT (10*1000/SSD_INIT_WAIT) //10s + +/* blkdev busy wait */ +#define SSD_DEV_BUSY_WAIT 1000 //ms +#define SSD_DEV_BUSY_MAX_WAIT (8*1000/SSD_DEV_BUSY_WAIT) //8s + +/* smbus retry */ +#define SSD_SMBUS_RETRY_INTERVAL (5) //ms +#define SSD_SMBUS_RETRY_MAX (1000/SSD_SMBUS_RETRY_INTERVAL) + +#define SSD_BM_RETRY_MAX 7 + +/* bm routine interval */ +#define SSD_BM_CAP_LEARNING_DELAY (10*60*1000) + +/* routine interval */ +#define SSD_ROUTINE_INTERVAL (10*1000) //10s +#define SSD_HWMON_ROUTINE_TICK (60*1000/SSD_ROUTINE_INTERVAL) +#define SSD_CAPMON_ROUTINE_TICK ((3600*1000/SSD_ROUTINE_INTERVAL)*24*30) +#define SSD_CAPMON2_ROUTINE_TICK (10*60*1000/SSD_ROUTINE_INTERVAL) //fault recover + +/* dma align */ +#define SSD_DMA_ALIGN (16) + +/* some hw defalut */ +#define SSD_LOG_MAX_SZ 4096 + +#define SSD_NAND_OOB_SZ 1024 +#define SSD_NAND_ID_SZ 8 +#define SSD_NAND_ID_BUFF_SZ 1024 +#define SSD_NAND_MAX_CE 2 + +#define SSD_BBT_RESERVED 8 + +#define SSD_ECC_MAX_FLIP (64+1) + +#define SSD_RAM_ALIGN 16 + + +#define SSD_RELOAD_FLAG 0x3333CCCC +#define SSD_RELOAD_FW 0xAA5555AA +#define SSD_RESET_NOINIT 0xAA5555AA +#define SSD_RESET 0x55AAAA55 +#define SSD_RESET_FULL 0x5A +//#define SSD_RESET_WAIT 1000 //1s +//#define SSD_RESET_MAX_WAIT (200*1000/SSD_RESET_WAIT) //200s + + +/* reverion 1 */ +#define SSD_PROTOCOL_V1 0x0 + +#define SSD_ROM_SIZE (16*1024*1024) +#define SSD_ROM_BLK_SIZE (256*1024) +#define SSD_ROM_PAGE_SIZE (256) +#define SSD_ROM_NR_BRIDGE_FW 2 +#define SSD_ROM_NR_CTRL_FW 2 +#define SSD_ROM_BRIDGE_FW_BASE 0 +#define SSD_ROM_BRIDGE_FW_SIZE (2*1024*1024) +#define SSD_ROM_CTRL_FW_BASE (SSD_ROM_NR_BRIDGE_FW*SSD_ROM_BRIDGE_FW_SIZE) +#define SSD_ROM_CTRL_FW_SIZE (5*1024*1024) +#define SSD_ROM_LABEL_BASE (SSD_ROM_CTRL_FW_BASE+SSD_ROM_CTRL_FW_SIZE*SSD_ROM_NR_CTRL_FW) +#define SSD_ROM_VP_BASE (SSD_ROM_LABEL_BASE+SSD_ROM_BLK_SIZE) + +/* reverion 3 */ +#define SSD_PROTOCOL_V3 0x3000000 +#define SSD_PROTOCOL_V3_1_1 0x3010001 +#define SSD_PROTOCOL_V3_1_3 0x3010003 +#define SSD_PROTOCOL_V3_2 0x3020000 +#define SSD_PROTOCOL_V3_2_1 0x3020001 /* <4KB improved */ +#define SSD_PROTOCOL_V3_2_2 0x3020002 /* ot protect */ +#define SSD_PROTOCOL_V3_2_4 0x3020004 + + +#define SSD_PV3_ROM_NR_BM_FW 1 +#define SSD_PV3_ROM_BM_FW_SZ (64*1024*8) + +#define SSD_ROM_LOG_SZ (64*1024*4) + +#define SSD_ROM_NR_SMART_MAX 2 +#define SSD_PV3_ROM_NR_SMART SSD_ROM_NR_SMART_MAX +#define SSD_PV3_ROM_SMART_SZ (64*1024) + +/* reverion 3.2 */ +#define SSD_PV3_2_ROM_LOG_SZ (64*1024*80) /* 5MB */ +#define SSD_PV3_2_ROM_SEC_SZ (256*1024) /* 256KB */ + + +/* register */ +#define SSD_REQ_FIFO_REG 0x0000 +#define SSD_RESP_FIFO_REG 0x0008 //0x0010 +#define SSD_RESP_PTR_REG 0x0010 //0x0018 +#define SSD_INTR_INTERVAL_REG 0x0018 +#define SSD_READY_REG 0x001C +#define SSD_BRIDGE_TEST_REG 0x0020 +#define SSD_STRIPE_SIZE_REG 0x0028 +#define SSD_CTRL_VER_REG 0x0030 //controller +#define SSD_BRIDGE_VER_REG 0x0034 //bridge +#define SSD_PCB_VER_REG 0x0038 +#define SSD_BURN_FLAG_REG 0x0040 +#define SSD_BRIDGE_INFO_REG 0x0044 + +#define SSD_WL_VAL_REG 0x0048 //32-bit + +#define SSD_BB_INFO_REG 0x004C + +#define SSD_ECC_TEST_REG 0x0050 //test only +#define SSD_ERASE_TEST_REG 0x0058 //test only +#define SSD_WRITE_TEST_REG 0x0060 //test only + +#define SSD_RESET_REG 0x0068 +#define SSD_RELOAD_FW_REG 0x0070 + +#define SSD_RESERVED_BLKS_REG 0x0074 +#define SSD_VALID_PAGES_REG 0x0078 +#define SSD_CH_INFO_REG 0x007C + +#define SSD_CTRL_TEST_REG_SZ 0x8 +#define SSD_CTRL_TEST_REG0 0x0080 +#define SSD_CTRL_TEST_REG1 0x0088 +#define SSD_CTRL_TEST_REG2 0x0090 +#define SSD_CTRL_TEST_REG3 0x0098 +#define SSD_CTRL_TEST_REG4 0x00A0 +#define SSD_CTRL_TEST_REG5 0x00A8 +#define SSD_CTRL_TEST_REG6 0x00B0 +#define SSD_CTRL_TEST_REG7 0x00B8 + +#define SSD_FLASH_INFO_REG0 0x00C0 +#define SSD_FLASH_INFO_REG1 0x00C8 +#define SSD_FLASH_INFO_REG2 0x00D0 +#define SSD_FLASH_INFO_REG3 0x00D8 +#define SSD_FLASH_INFO_REG4 0x00E0 +#define SSD_FLASH_INFO_REG5 0x00E8 +#define SSD_FLASH_INFO_REG6 0x00F0 +#define SSD_FLASH_INFO_REG7 0x00F8 + +#define SSD_RESP_INFO_REG 0x01B8 +#define SSD_NAND_BUFF_BASE 0x01BC //for nand write + +#define SSD_CHIP_INFO_REG_SZ 0x10 +#define SSD_CHIP_INFO_REG0 0x0100 //128 bit +#define SSD_CHIP_INFO_REG1 0x0110 +#define SSD_CHIP_INFO_REG2 0x0120 +#define SSD_CHIP_INFO_REG3 0x0130 +#define SSD_CHIP_INFO_REG4 0x0140 +#define SSD_CHIP_INFO_REG5 0x0150 +#define SSD_CHIP_INFO_REG6 0x0160 +#define SSD_CHIP_INFO_REG7 0x0170 + +#define SSD_RAM_INFO_REG 0x01C4 + +#define SSD_BBT_BASE_REG 0x01C8 +#define SSD_ECT_BASE_REG 0x01CC + +#define SSD_CLEAR_INTR_REG 0x01F0 + +#define SSD_INIT_STATE_REG_SZ 0x8 +#define SSD_INIT_STATE_REG0 0x0200 +#define SSD_INIT_STATE_REG1 0x0208 +#define SSD_INIT_STATE_REG2 0x0210 +#define SSD_INIT_STATE_REG3 0x0218 +#define SSD_INIT_STATE_REG4 0x0220 +#define SSD_INIT_STATE_REG5 0x0228 +#define SSD_INIT_STATE_REG6 0x0230 +#define SSD_INIT_STATE_REG7 0x0238 + +#define SSD_ROM_INFO_REG 0x0600 +#define SSD_ROM_BRIDGE_FW_INFO_REG 0x0604 +#define SSD_ROM_CTRL_FW_INFO_REG 0x0608 +#define SSD_ROM_VP_INFO_REG 0x060C + +#define SSD_LOG_INFO_REG 0x0610 +#define SSD_LED_REG 0x0614 +#define SSD_MSG_BASE_REG 0x06F8 + +/*spi reg */ +#define SSD_SPI_REG_CMD 0x0180 +#define SSD_SPI_REG_CMD_HI 0x0184 +#define SSD_SPI_REG_WDATA 0x0188 +#define SSD_SPI_REG_ID 0x0190 +#define SSD_SPI_REG_STATUS 0x0198 +#define SSD_SPI_REG_RDATA 0x01A0 +#define SSD_SPI_REG_READY 0x01A8 + +/* i2c register */ +#define SSD_I2C_CTRL_REG 0x06F0 +#define SSD_I2C_RDATA_REG 0x06F4 + +/* temperature reg */ +#define SSD_BRIGE_TEMP_REG 0x0618 + +#define SSD_CTRL_TEMP_REG0 0x0700 +#define SSD_CTRL_TEMP_REG1 0x0708 +#define SSD_CTRL_TEMP_REG2 0x0710 +#define SSD_CTRL_TEMP_REG3 0x0718 +#define SSD_CTRL_TEMP_REG4 0x0720 +#define SSD_CTRL_TEMP_REG5 0x0728 +#define SSD_CTRL_TEMP_REG6 0x0730 +#define SSD_CTRL_TEMP_REG7 0x0738 + +/* reversion 3 reg */ +#define SSD_PROTOCOL_VER_REG 0x01B4 + +#define SSD_FLUSH_TIMEOUT_REG 0x02A4 +#define SSD_BM_FAULT_REG 0x0660 + +#define SSD_PV3_RAM_STATUS_REG_SZ 0x4 +#define SSD_PV3_RAM_STATUS_REG0 0x0260 +#define SSD_PV3_RAM_STATUS_REG1 0x0264 +#define SSD_PV3_RAM_STATUS_REG2 0x0268 +#define SSD_PV3_RAM_STATUS_REG3 0x026C +#define SSD_PV3_RAM_STATUS_REG4 0x0270 +#define SSD_PV3_RAM_STATUS_REG5 0x0274 +#define SSD_PV3_RAM_STATUS_REG6 0x0278 +#define SSD_PV3_RAM_STATUS_REG7 0x027C + +#define SSD_PV3_CHIP_INFO_REG_SZ 0x40 +#define SSD_PV3_CHIP_INFO_REG0 0x0300 +#define SSD_PV3_CHIP_INFO_REG1 0x0340 +#define SSD_PV3_CHIP_INFO_REG2 0x0380 +#define SSD_PV3_CHIP_INFO_REG3 0x03B0 +#define SSD_PV3_CHIP_INFO_REG4 0x0400 +#define SSD_PV3_CHIP_INFO_REG5 0x0440 +#define SSD_PV3_CHIP_INFO_REG6 0x0480 +#define SSD_PV3_CHIP_INFO_REG7 0x04B0 + +#define SSD_PV3_INIT_STATE_REG_SZ 0x20 +#define SSD_PV3_INIT_STATE_REG0 0x0500 +#define SSD_PV3_INIT_STATE_REG1 0x0520 +#define SSD_PV3_INIT_STATE_REG2 0x0540 +#define SSD_PV3_INIT_STATE_REG3 0x0560 +#define SSD_PV3_INIT_STATE_REG4 0x0580 +#define SSD_PV3_INIT_STATE_REG5 0x05A0 +#define SSD_PV3_INIT_STATE_REG6 0x05C0 +#define SSD_PV3_INIT_STATE_REG7 0x05E0 + +/* reversion 3.1.1 reg */ +#define SSD_FULL_RESET_REG 0x01B0 + +#define SSD_CTRL_REG_ZONE_SZ 0x800 + +#define SSD_BB_THRESHOLD_L1_REG 0x2C0 +#define SSD_BB_THRESHOLD_L2_REG 0x2C4 + +#define SSD_BB_ACC_REG_SZ 0x4 +#define SSD_BB_ACC_REG0 0x21C0 +#define SSD_BB_ACC_REG1 0x29C0 +#define SSD_BB_ACC_REG2 0x31C0 + +#define SSD_EC_THRESHOLD_L1_REG 0x2C8 +#define SSD_EC_THRESHOLD_L2_REG 0x2CC + +#define SSD_EC_ACC_REG_SZ 0x4 +#define SSD_EC_ACC_REG0 0x21E0 +#define SSD_EC_ACC_REG1 0x29E0 +#define SSD_EC_ACC_REG2 0x31E0 + +/* reversion 3.1.2 & 3.1.3 reg */ +#define SSD_HW_STATUS_REG 0x02AC + +#define SSD_PLP_INFO_REG 0x0664 + +/*reversion 3.2 reg*/ +#define SSD_POWER_ON_REG 0x01EC +#define SSD_PCIE_LINKSTATUS_REG 0x01F8 +#define SSD_PL_CAP_LEARN_REG 0x01FC + +#define SSD_FPGA_1V0_REG0 0x2070 +#define SSD_FPGA_1V8_REG0 0x2078 +#define SSD_FPGA_1V0_REG1 0x2870 +#define SSD_FPGA_1V8_REG1 0x2878 + +/*reversion 3.2 reg*/ +#define SSD_READ_OT_REG0 0x2260 +#define SSD_WRITE_OT_REG0 0x2264 +#define SSD_READ_OT_REG1 0x2A60 +#define SSD_WRITE_OT_REG1 0x2A64 + + +/* function */ +#define SSD_FUNC_READ 0x01 +#define SSD_FUNC_WRITE 0x02 +#define SSD_FUNC_NAND_READ_WOOB 0x03 +#define SSD_FUNC_NAND_READ 0x04 +#define SSD_FUNC_NAND_WRITE 0x05 +#define SSD_FUNC_NAND_ERASE 0x06 +#define SSD_FUNC_NAND_READ_ID 0x07 +#define SSD_FUNC_READ_LOG 0x08 +#define SSD_FUNC_TRIM 0x09 +#define SSD_FUNC_RAM_READ 0x10 +#define SSD_FUNC_RAM_WRITE 0x11 +#define SSD_FUNC_FLUSH 0x12 //cache / bbt + +/* spi function */ +#define SSD_SPI_CMD_PROGRAM 0x02 +#define SSD_SPI_CMD_READ 0x03 +#define SSD_SPI_CMD_W_DISABLE 0x04 +#define SSD_SPI_CMD_READ_STATUS 0x05 +#define SSD_SPI_CMD_W_ENABLE 0x06 +#define SSD_SPI_CMD_ERASE 0xd8 +#define SSD_SPI_CMD_CLSR 0x30 +#define SSD_SPI_CMD_READ_ID 0x9f + +/* i2c */ +#define SSD_I2C_CTRL_READ 0x00 +#define SSD_I2C_CTRL_WRITE 0x01 + +/* i2c internal register */ +#define SSD_I2C_CFG_REG 0x00 +#define SSD_I2C_DATA_REG 0x01 +#define SSD_I2C_CMD_REG 0x02 +#define SSD_I2C_STATUS_REG 0x03 +#define SSD_I2C_SADDR_REG 0x04 +#define SSD_I2C_LEN_REG 0x05 +#define SSD_I2C_RLEN_REG 0x06 +#define SSD_I2C_WLEN_REG 0x07 +#define SSD_I2C_RESET_REG 0x08 //write for reset +#define SSD_I2C_PRER_REG 0x09 + + +/* hw mon */ +/* FPGA volt = ADC_value / 4096 * 3v */ +#define SSD_FPGA_1V0_ADC_MIN 1228 // 0.9v +#define SSD_FPGA_1V0_ADC_MAX 1502 // 1.1v +#define SSD_FPGA_1V8_ADC_MIN 2211 // 1.62v +#define SSD_FPGA_1V8_ADC_MAX 2703 // 1.98 + +/* ADC value */ +#define SSD_FPGA_VOLT_MAX(val) (((val) & 0xffff) >> 4) +#define SSD_FPGA_VOLT_MIN(val) (((val >> 16) & 0xffff) >> 4) +#define SSD_FPGA_VOLT_CUR(val) (((val >> 32) & 0xffff) >> 4) +#define SSD_FPGA_VOLT(val) ((val * 3000) >> 12) + +#define SSD_VOLT_LOG_DATA(idx, ctrl, volt) (((uint32_t)idx << 24) | ((uint32_t)ctrl << 16) | ((uint32_t)volt)) + +enum ssd_fpga_volt +{ + SSD_FPGA_1V0 = 0, + SSD_FPGA_1V8, + SSD_FPGA_VOLT_NR +}; + +enum ssd_clock +{ + SSD_CLOCK_166M_LOST = 0, + SSD_CLOCK_166M_SKEW, + SSD_CLOCK_156M_LOST, + SSD_CLOCK_156M_SKEW, + SSD_CLOCK_NR +}; + +/* sensor */ +#define SSD_SENSOR_LM75_SADDRESS (0x49 << 1) +#define SSD_SENSOR_LM80_SADDRESS (0x28 << 1) + +#define SSD_SENSOR_CONVERT_TEMP(val) ((int)(val >> 8)) + +#define SSD_INLET_OT_TEMP (55) //55 DegC +#define SSD_INLET_OT_HYST (50) //50 DegC +#define SSD_FLASH_OT_TEMP (70) //70 DegC +#define SSD_FLASH_OT_HYST (65) //65 DegC + +enum ssd_sensor +{ + SSD_SENSOR_LM80 = 0, + SSD_SENSOR_LM75, + SSD_SENSOR_NR +}; + + +/* lm75 */ +enum ssd_lm75_reg +{ + SSD_LM75_REG_TEMP = 0, + SSD_LM75_REG_CONF, + SSD_LM75_REG_THYST, + SSD_LM75_REG_TOS +}; + +/* lm96080 */ +#define SSD_LM80_REG_IN_MAX(nr) (0x2a + (nr) * 2) +#define SSD_LM80_REG_IN_MIN(nr) (0x2b + (nr) * 2) +#define SSD_LM80_REG_IN(nr) (0x20 + (nr)) + +#define SSD_LM80_REG_FAN1 0x28 +#define SSD_LM80_REG_FAN2 0x29 +#define SSD_LM80_REG_FAN_MIN(nr) (0x3b + (nr)) + +#define SSD_LM80_REG_TEMP 0x27 +#define SSD_LM80_REG_TEMP_HOT_MAX 0x38 +#define SSD_LM80_REG_TEMP_HOT_HYST 0x39 +#define SSD_LM80_REG_TEMP_OS_MAX 0x3a +#define SSD_LM80_REG_TEMP_OS_HYST 0x3b + +#define SSD_LM80_REG_CONFIG 0x00 +#define SSD_LM80_REG_ALARM1 0x01 +#define SSD_LM80_REG_ALARM2 0x02 +#define SSD_LM80_REG_MASK1 0x03 +#define SSD_LM80_REG_MASK2 0x04 +#define SSD_LM80_REG_FANDIV 0x05 +#define SSD_LM80_REG_RES 0x06 + +#define SSD_LM80_CONVERT_VOLT(val) ((val * 10) >> 8) + +#define SSD_LM80_3V3_VOLT(val) ((val)*33/19) + +#define SSD_LM80_CONV_INTERVAL (1000) + +enum ssd_lm80_in +{ + SSD_LM80_IN_CAP = 0, + SSD_LM80_IN_1V2, + SSD_LM80_IN_1V2a, + SSD_LM80_IN_1V5, + SSD_LM80_IN_1V8, + SSD_LM80_IN_FPGA_3V3, + SSD_LM80_IN_3V3, + SSD_LM80_IN_NR +}; + +struct ssd_lm80_limit +{ + uint8_t low; + uint8_t high; +}; + +/* +/- 5% except cap in*/ +static struct ssd_lm80_limit ssd_lm80_limit[SSD_LM80_IN_NR] = { + {171, 217}, /* CAP in: 1710 ~ 2170 */ + {114, 126}, + {114, 126}, + {142, 158}, + {171, 189}, + {180, 200}, + {180, 200}, +}; + +/* temperature sensors */ +enum ssd_temp_sensor +{ + SSD_TEMP_INLET = 0, + SSD_TEMP_FLASH, + SSD_TEMP_CTRL, + SSD_TEMP_NR +}; + + +#ifdef SSD_OT_PROTECT +#define SSD_OT_DELAY (60) //ms + +#define SSD_OT_TEMP (90) //90 DegC + +#define SSD_OT_TEMP_HYST (85) //85 DegC +#endif + +/* fpga temperature */ +//#define CONVERT_TEMP(val) ((float)(val)*503.975f/4096.0f-273.15f) +#define CONVERT_TEMP(val) ((val)*504/4096-273) + +#define MAX_TEMP(val) CONVERT_TEMP(((val & 0xffff) >> 4)) +#define MIN_TEMP(val) CONVERT_TEMP((((val>>16) & 0xffff) >> 4)) +#define CUR_TEMP(val) CONVERT_TEMP((((val>>32) & 0xffff) >> 4)) + + +/* CAP monitor */ +#define SSD_PL_CAP_U1 SSD_LM80_REG_IN(SSD_LM80_IN_CAP) +#define SSD_PL_CAP_U2 SSD_LM80_REG_IN(SSD_LM80_IN_1V8) +#define SSD_PL_CAP_LEARN(u1, u2, t) ((t*(u1+u2))/(2*162*(u1-u2))) +#define SSD_PL_CAP_LEARN_WAIT (20) //20ms +#define SSD_PL_CAP_LEARN_MAX_WAIT (1000/SSD_PL_CAP_LEARN_WAIT) //1s + +#define SSD_PL_CAP_CHARGE_WAIT (1000) +#define SSD_PL_CAP_CHARGE_MAX_WAIT ((120*1000)/SSD_PL_CAP_CHARGE_WAIT) //120s + +#define SSD_PL_CAP_VOLT(val) (val*7) + +#define SSD_PL_CAP_VOLT_FULL (13700) +#define SSD_PL_CAP_VOLT_READY (12880) + +#define SSD_PL_CAP_THRESHOLD (8900) +#define SSD_PL_CAP_CP_THRESHOLD (5800) +#define SSD_PL_CAP_THRESHOLD_HYST (100) + +enum ssd_pl_cap_status +{ + SSD_PL_CAP = 0, + SSD_PL_CAP_NR +}; + +enum ssd_pl_cap_type +{ + SSD_PL_CAP_DEFAULT = 0, /* 4 cap */ + SSD_PL_CAP_CP /* 3 cap */ +}; + + +/* hwmon offset */ +#define SSD_HWMON_OFFS_TEMP (0) +#define SSD_HWMON_OFFS_SENSOR (SSD_HWMON_OFFS_TEMP + SSD_TEMP_NR) +#define SSD_HWMON_OFFS_PL_CAP (SSD_HWMON_OFFS_SENSOR + SSD_SENSOR_NR) +#define SSD_HWMON_OFFS_LM80 (SSD_HWMON_OFFS_PL_CAP + SSD_PL_CAP_NR) +#define SSD_HWMON_OFFS_CLOCK (SSD_HWMON_OFFS_LM80 + SSD_LM80_IN_NR) +#define SSD_HWMON_OFFS_FPGA (SSD_HWMON_OFFS_CLOCK + SSD_CLOCK_NR) + +#define SSD_HWMON_TEMP(idx) (SSD_HWMON_OFFS_TEMP + idx) +#define SSD_HWMON_SENSOR(idx) (SSD_HWMON_OFFS_SENSOR + idx) +#define SSD_HWMON_PL_CAP(idx) (SSD_HWMON_OFFS_PL_CAP + idx) +#define SSD_HWMON_LM80(idx) (SSD_HWMON_OFFS_LM80 + idx) +#define SSD_HWMON_CLOCK(idx) (SSD_HWMON_OFFS_CLOCK + idx) +#define SSD_HWMON_FPGA(ctrl, idx) (SSD_HWMON_OFFS_FPGA + (ctrl * SSD_FPGA_VOLT_NR) + idx) + + + +/* fifo */ +typedef struct sfifo +{ + uint32_t in; + uint32_t out; + uint32_t size; + uint32_t esize; + uint32_t mask; + spinlock_t lock; + void *data; +} sfifo_t; + +static int sfifo_alloc(struct sfifo *fifo, uint32_t size, uint32_t esize) +{ + uint32_t __size = 1; + + if (!fifo || size > INT_MAX || esize == 0) { + return -EINVAL; + } + + while (__size < size) __size <<= 1; + + if (__size < 2) { + return -EINVAL; + } + + fifo->data = vmalloc(esize * __size); + if (!fifo->data) { + return -ENOMEM; + } + + fifo->in = 0; + fifo->out = 0; + fifo->mask = __size - 1; + fifo->size = __size; + fifo->esize = esize; + spin_lock_init(&fifo->lock); + + return 0; +} + +static void sfifo_free(struct sfifo *fifo) +{ + if (!fifo) { + return; + } + + vfree(fifo->data); + fifo->data = NULL; + fifo->in = 0; + fifo->out = 0; + fifo->mask = 0; + fifo->size = 0; + fifo->esize = 0; +} + +static int __sfifo_put(struct sfifo *fifo, void *val) +{ + if (((fifo->in + 1) & fifo->mask) == fifo->out) { + return -1; + } + + memcpy((fifo->data + (fifo->in * fifo->esize)), val, fifo->esize); + fifo->in = (fifo->in + 1) & fifo->mask; + + return 0; +} + +static int sfifo_put(struct sfifo *fifo, void *val) +{ + int ret = 0; + + if (!fifo || !val) { + return -EINVAL; + } + + if (!in_interrupt()) { + spin_lock_irq(&fifo->lock); + ret = __sfifo_put(fifo, val); + spin_unlock_irq(&fifo->lock); + } else { + spin_lock(&fifo->lock); + ret = __sfifo_put(fifo, val); + spin_unlock(&fifo->lock); + } + + return ret; +} + +static int __sfifo_get(struct sfifo *fifo, void *val) +{ + if (fifo->out == fifo->in) { + return -1; + } + + memcpy(val, (fifo->data + (fifo->out * fifo->esize)), fifo->esize); + fifo->out = (fifo->out + 1) & fifo->mask; + + return 0; +} + +static int sfifo_get(struct sfifo *fifo, void *val) +{ + int ret = 0; + + if (!fifo || !val) { + return -EINVAL; + } + + if (!in_interrupt()) { + spin_lock_irq(&fifo->lock); + ret = __sfifo_get(fifo, val); + spin_unlock_irq(&fifo->lock); + } else { + spin_lock(&fifo->lock); + ret = __sfifo_get(fifo, val); + spin_unlock(&fifo->lock); + } + + return ret; +} + +/* bio list */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) +struct ssd_blist { + struct bio *prev; + struct bio *next; +}; + +static inline void ssd_blist_init(struct ssd_blist *ssd_bl) +{ + ssd_bl->prev = NULL; + ssd_bl->next = NULL; +} + +static inline struct bio *ssd_blist_get(struct ssd_blist *ssd_bl) +{ + struct bio *bio = ssd_bl->prev; + + ssd_bl->prev = NULL; + ssd_bl->next = NULL; + + return bio; +} + +static inline void ssd_blist_add(struct ssd_blist *ssd_bl, struct bio *bio) +{ + bio->bi_next = NULL; + + if (ssd_bl->next) { + ssd_bl->next->bi_next = bio; + } else { + ssd_bl->prev = bio; + } + + ssd_bl->next = bio; +} + +#else +#define ssd_blist bio_list +#define ssd_blist_init bio_list_init +#define ssd_blist_get bio_list_get +#define ssd_blist_add bio_list_add +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) +#define bio_start(bio) (bio->bi_sector) +#else +#define bio_start(bio) (bio->bi_iter.bi_sector) +#endif + +/* mutex */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)) +#define mutex_lock down +#define mutex_unlock up +#define mutex semaphore +#define mutex_init init_MUTEX +#endif + +/* i2c */ +typedef union ssd_i2c_ctrl { + uint32_t val; + struct { + uint8_t wdata; + uint8_t addr; + uint16_t rw:1; + uint16_t pad:15; + } bits; +}__attribute__((packed)) ssd_i2c_ctrl_t; + +typedef union ssd_i2c_data { + uint32_t val; + struct { + uint32_t rdata:8; + uint32_t valid:1; + uint32_t pad:23; + } bits; +}__attribute__((packed)) ssd_i2c_data_t; + +/* write mode */ +enum ssd_write_mode +{ + SSD_WMODE_BUFFER = 0, + SSD_WMODE_BUFFER_EX, + SSD_WMODE_FUA, + /* dummy */ + SSD_WMODE_AUTO, + SSD_WMODE_DEFAULT +}; + +/* reset type */ +enum ssd_reset_type +{ + SSD_RST_NOINIT = 0, + SSD_RST_NORMAL, + SSD_RST_FULL +}; + +/* ssd msg */ +typedef struct ssd_sg_entry +{ + uint64_t block:48; + uint64_t length:16; + uint64_t buf; +}__attribute__((packed))ssd_sg_entry_t; + +typedef struct ssd_rw_msg +{ + uint8_t tag; + uint8_t flag; + uint8_t nsegs; + uint8_t fun; + uint32_t reserved; //for 64-bit align + struct ssd_sg_entry sge[1]; //base +}__attribute__((packed))ssd_rw_msg_t; + +typedef struct ssd_resp_msg +{ + uint8_t tag; + uint8_t status:2; + uint8_t bitflip:6; + uint8_t log; + uint8_t fun; + uint32_t reserved; +}__attribute__((packed))ssd_resp_msg_t; + +typedef struct ssd_flush_msg +{ + uint8_t tag; + uint8_t flag:2; //flash cache 0 or bbt 1 + uint8_t flash:6; + uint8_t ctrl_idx; + uint8_t fun; + uint32_t reserved; //align +}__attribute__((packed))ssd_flush_msg_t; + +typedef struct ssd_nand_op_msg +{ + uint8_t tag; + uint8_t flag; + uint8_t ctrl_idx; + uint8_t fun; + uint32_t reserved; //align + uint16_t page_count; + uint8_t chip_ce; + uint8_t chip_no; + uint32_t page_no; + uint64_t buf; +}__attribute__((packed))ssd_nand_op_msg_t; + +typedef struct ssd_ram_op_msg +{ + uint8_t tag; + uint8_t flag; + uint8_t ctrl_idx; + uint8_t fun; + uint32_t reserved; //align + uint32_t start; + uint32_t length; + uint64_t buf; +}__attribute__((packed))ssd_ram_op_msg_t; + + +/* log msg */ +typedef struct ssd_log_msg +{ + uint8_t tag; + uint8_t flag; + uint8_t ctrl_idx; + uint8_t fun; + uint32_t reserved; //align + uint64_t buf; +}__attribute__((packed))ssd_log_msg_t; + +typedef struct ssd_log_op_msg +{ + uint8_t tag; + uint8_t flag; + uint8_t ctrl_idx; + uint8_t fun; + uint32_t reserved; //align + uint64_t reserved1; //align + uint64_t buf; +}__attribute__((packed))ssd_log_op_msg_t; + +typedef struct ssd_log_resp_msg +{ + uint8_t tag; + uint16_t status :2; + uint16_t reserved1 :2; //align with the normal resp msg + uint16_t nr_log :12; + uint8_t fun; + uint32_t reserved; +}__attribute__((packed))ssd_log_resp_msg_t; + + +/* resp msg */ +typedef union ssd_response_msq +{ + ssd_resp_msg_t resp_msg; + ssd_log_resp_msg_t log_resp_msg; + uint64_t u64_msg; + uint32_t u32_msg[2]; +} ssd_response_msq_t; + + +/* custom struct */ +typedef struct ssd_protocol_info +{ + uint32_t ver; + uint32_t init_state_reg; + uint32_t init_state_reg_sz; + uint32_t chip_info_reg; + uint32_t chip_info_reg_sz; +} ssd_protocol_info_t; + +typedef struct ssd_hw_info +{ + uint32_t bridge_ver; + uint32_t ctrl_ver; + + uint32_t cmd_fifo_sz; + uint32_t cmd_fifo_sz_mask; + uint32_t cmd_max_sg; + uint32_t sg_max_sec; + uint32_t resp_ptr_sz; + uint32_t resp_msg_sz; + + uint16_t nr_ctrl; + + uint16_t nr_data_ch; + uint16_t nr_ch; + uint16_t max_ch; + uint16_t nr_chip; + + uint8_t pcb_ver; + uint8_t upper_pcb_ver; + + uint8_t nand_vendor_id; + uint8_t nand_dev_id; + + uint8_t max_ce; + uint8_t id_size; + uint16_t oob_size; + + uint16_t bbf_pages; + uint16_t bbf_seek; // + + uint16_t page_count; //per block + uint32_t page_size; + uint32_t block_count; //per flash + + uint64_t ram_size; + uint32_t ram_align; + uint32_t ram_max_len; + + uint64_t bbt_base; + uint32_t bbt_size; + uint64_t md_base; //metadata + uint32_t md_size; + uint32_t md_entry_sz; + + uint32_t log_sz; + + uint64_t nand_wbuff_base; + + uint32_t md_reserved_blks; + uint32_t reserved_blks; + uint32_t valid_pages; + uint32_t max_valid_pages; + uint64_t size; +} ssd_hw_info_t; + +typedef struct ssd_hw_info_extend +{ + uint8_t board_type; + uint8_t cap_type; + uint8_t plp_type; + uint8_t work_mode; + uint8_t form_factor; + + uint8_t pad[59]; +}ssd_hw_info_extend_t; + +typedef struct ssd_rom_info +{ + uint32_t size; + uint32_t block_size; + uint16_t page_size; + uint8_t nr_bridge_fw; + uint8_t nr_ctrl_fw; + uint8_t nr_bm_fw; + uint8_t nr_smart; + uint32_t bridge_fw_base; + uint32_t bridge_fw_sz; + uint32_t ctrl_fw_base; + uint32_t ctrl_fw_sz; + uint32_t bm_fw_base; + uint32_t bm_fw_sz; + uint32_t log_base; + uint32_t log_sz; + uint32_t smart_base; + uint32_t smart_sz; + uint32_t vp_base; + uint32_t label_base; +} ssd_rom_info_t; + +/* debug info */ +enum ssd_debug_type +{ + SSD_DEBUG_NONE = 0, + SSD_DEBUG_READ_ERR, + SSD_DEBUG_WRITE_ERR, + SSD_DEBUG_RW_ERR, + SSD_DEBUG_READ_TO, + SSD_DEBUG_WRITE_TO, + SSD_DEBUG_RW_TO, + SSD_DEBUG_LOG, + SSD_DEBUG_OFFLINE, + SSD_DEBUG_NR +}; + +typedef struct ssd_debug_info +{ + int type; + union { + struct { + uint64_t off; + uint32_t len; + } loc; + struct { + int event; + uint32_t extra; + } log; + } data; +}ssd_debug_info_t; + +/* label */ +#define SSD_LABEL_FIELD_SZ 32 +#define SSD_SN_SZ 16 + +typedef struct ssd_label +{ + char date[SSD_LABEL_FIELD_SZ]; + char sn[SSD_LABEL_FIELD_SZ]; + char part[SSD_LABEL_FIELD_SZ]; + char desc[SSD_LABEL_FIELD_SZ]; + char other[SSD_LABEL_FIELD_SZ]; + char maf[SSD_LABEL_FIELD_SZ]; +} ssd_label_t; + +#define SSD_LABEL_DESC_SZ 256 + +typedef struct ssd_labelv3 +{ + char boardtype[SSD_LABEL_FIELD_SZ]; + char barcode[SSD_LABEL_FIELD_SZ]; + char item[SSD_LABEL_FIELD_SZ]; + char description[SSD_LABEL_DESC_SZ]; + char manufactured[SSD_LABEL_FIELD_SZ]; + char vendorname[SSD_LABEL_FIELD_SZ]; + char issuenumber[SSD_LABEL_FIELD_SZ]; + char cleicode[SSD_LABEL_FIELD_SZ]; + char bom[SSD_LABEL_FIELD_SZ]; +} ssd_labelv3_t; + +/* battery */ +typedef struct ssd_battery_info +{ + uint32_t fw_ver; +} ssd_battery_info_t; + +/* ssd power stat */ +typedef struct ssd_power_stat +{ + uint64_t nr_poweron; + uint64_t nr_powerloss; + uint64_t init_failed; +} ssd_power_stat_t; + +/* io stat */ +typedef struct ssd_io_stat +{ + uint64_t run_time; + uint64_t nr_to; + uint64_t nr_ioerr; + uint64_t nr_rwerr; + uint64_t nr_read; + uint64_t nr_write; + uint64_t rsectors; + uint64_t wsectors; +} ssd_io_stat_t; + +/* ecc */ +typedef struct ssd_ecc_info +{ + uint64_t bitflip[SSD_ECC_MAX_FLIP]; +} ssd_ecc_info_t; + +/* log */ +enum ssd_log_level +{ + SSD_LOG_LEVEL_INFO = 0, + SSD_LOG_LEVEL_NOTICE, + SSD_LOG_LEVEL_WARNING, + SSD_LOG_LEVEL_ERR, + SSD_LOG_NR_LEVEL +}; + +typedef struct ssd_log_info +{ + uint64_t nr_log; + uint64_t stat[SSD_LOG_NR_LEVEL]; +} ssd_log_info_t; + +/* S.M.A.R.T. */ +#define SSD_SMART_MAGIC (0x5452414D53445353ull) + +typedef struct ssd_smart +{ + struct ssd_power_stat pstat; + struct ssd_io_stat io_stat; + struct ssd_ecc_info ecc_info; + struct ssd_log_info log_info; + uint64_t version; + uint64_t magic; +} ssd_smart_t; + +/* internal log */ +typedef struct ssd_internal_log +{ + uint32_t nr_log; + void *log; +} ssd_internal_log_t; + +/* ssd cmd */ +typedef struct ssd_cmd +{ + struct bio *bio; + struct scatterlist *sgl; + struct list_head list; + void *dev; + int nsegs; + int flag; /*pbio(1) or bio(0)*/ + + int tag; + void *msg; + dma_addr_t msg_dma; + + unsigned long start_time; + + int errors; + unsigned int nr_log; + + struct timer_list cmd_timer; + struct completion *waiting; +} ssd_cmd_t; + +typedef void (*send_cmd_func)(struct ssd_cmd *); +typedef int (*ssd_event_call)(struct gendisk *, int, int); /* gendisk, event id, event level */ + +/* dcmd sz */ +#define SSD_DCMD_MAX_SZ 32 + +typedef struct ssd_dcmd +{ + struct list_head list; + void *dev; + uint8_t msg[SSD_DCMD_MAX_SZ]; +} ssd_dcmd_t; + + +enum ssd_state { + SSD_INIT_WORKQ, + SSD_INIT_BD, + SSD_ONLINE, + /* full reset */ + SSD_RESETING, + /* hw log */ + SSD_LOG_HW, + /* log err */ + SSD_LOG_ERR, +}; + +#define SSD_QUEUE_NAME_LEN 16 +typedef struct ssd_queue { + char name[SSD_QUEUE_NAME_LEN]; + void *dev; + + int idx; + + uint32_t resp_idx; + uint32_t resp_idx_mask; + uint32_t resp_msg_sz; + + void *resp_msg; + void *resp_ptr; + + struct ssd_cmd *cmd; + + struct ssd_io_stat io_stat; + struct ssd_ecc_info ecc_info; +} ssd_queue_t; + +typedef struct ssd_device { + char name[SSD_DEV_NAME_LEN]; + + int idx; + int major; + int readonly; + + int int_mode; +#ifdef SSD_ESCAPE_IRQ + int irq_cpu; +#endif + + int reload_fw; + + int ot_delay; //in ms + + atomic_t refcnt; + atomic_t tocnt; + atomic_t in_flight[2]; //r&w + + uint64_t uptime; + + struct list_head list; + struct pci_dev *pdev; + + unsigned long mmio_base; + unsigned long mmio_len; + void __iomem *ctrlp; + + struct mutex spi_mutex; + struct mutex i2c_mutex; + + struct ssd_protocol_info protocol_info; + struct ssd_hw_info hw_info; + struct ssd_rom_info rom_info; + struct ssd_label label; + + struct ssd_smart smart; + + atomic_t in_sendq; + spinlock_t sendq_lock; + struct ssd_blist sendq; + struct task_struct *send_thread; + wait_queue_head_t send_waitq; + + atomic_t in_doneq; + spinlock_t doneq_lock; + struct ssd_blist doneq; + struct task_struct *done_thread; + wait_queue_head_t done_waitq; + + struct ssd_dcmd *dcmd; + spinlock_t dcmd_lock; + struct list_head dcmd_list; /* direct cmd list */ + wait_queue_head_t dcmd_wq; + + unsigned long *tag_map; + wait_queue_head_t tag_wq; + + spinlock_t cmd_lock; + struct ssd_cmd *cmd; + send_cmd_func scmd; + + ssd_event_call event_call; + void *msg_base; + dma_addr_t msg_base_dma; + + uint32_t resp_idx; + void *resp_msg_base; + void *resp_ptr_base; + dma_addr_t resp_msg_base_dma; + dma_addr_t resp_ptr_base_dma; + + int nr_queue; + struct msix_entry entry[SSD_MSIX_VEC]; + struct ssd_queue queue[SSD_MSIX_VEC]; + + struct request_queue *rq; /* The device request queue */ + struct gendisk *gd; /* The gendisk structure */ + + struct mutex internal_log_mutex; + struct ssd_internal_log internal_log; + struct workqueue_struct *workq; + struct work_struct log_work; /* get log */ + void *log_buf; + + unsigned long state; /* device state, for example, block device inited */ + + struct module *owner; + + /* extend */ + + int slave; + int cmajor; + int save_md; + int ot_protect; + + struct kref kref; + + struct mutex gd_mutex; + struct ssd_log_info log_info; /* volatile */ + + atomic_t queue_depth; + struct mutex barrier_mutex; + struct mutex fw_mutex; + + struct ssd_hw_info_extend hw_info_ext; + struct ssd_labelv3 labelv3; + + int wmode; + int user_wmode; + struct mutex bm_mutex; + struct work_struct bm_work; /* check bm */ + struct timer_list bm_timer; + struct sfifo log_fifo; + + struct timer_list routine_timer; + unsigned long routine_tick; + unsigned long hwmon; + + struct work_struct hwmon_work; /* check hw */ + struct work_struct capmon_work; /* check battery */ + struct work_struct tempmon_work; /* check temp */ + + /* debug info */ + struct ssd_debug_info db_info; + uint64_t reset_time; + int has_non_0x98_reg_access; + spinlock_t in_flight_lock; + + uint64_t last_poweron_id; + +} ssd_device_t; + + +/* Ioctl struct */ +typedef struct ssd_acc_info { + uint32_t threshold_l1; + uint32_t threshold_l2; + uint32_t val; +} ssd_acc_info_t; + +typedef struct ssd_reg_op_info +{ + uint32_t offset; + uint32_t value; +} ssd_reg_op_info_t; + +typedef struct ssd_spi_op_info +{ + void __user *buf; + uint32_t off; + uint32_t len; +} ssd_spi_op_info_t; + +typedef struct ssd_i2c_op_info +{ + uint8_t saddr; + uint8_t wsize; + uint8_t rsize; + void __user *wbuf; + void __user *rbuf; +} ssd_i2c_op_info_t; + +typedef struct ssd_smbus_op_info +{ + uint8_t saddr; + uint8_t cmd; + uint8_t size; + void __user *buf; +} ssd_smbus_op_info_t; + +typedef struct ssd_ram_op_info { + uint8_t ctrl_idx; + uint32_t length; + uint64_t start; + uint8_t __user *buf; +} ssd_ram_op_info_t; + +typedef struct ssd_flash_op_info { + uint32_t page; + uint16_t flash; + uint8_t chip; + uint8_t ctrl_idx; + uint8_t __user *buf; +} ssd_flash_op_info_t; + +typedef struct ssd_sw_log_info { + uint16_t event; + uint16_t pad; + uint32_t data; +} ssd_sw_log_info_t; + +typedef struct ssd_version_info +{ + uint32_t bridge_ver; /* bridge fw version */ + uint32_t ctrl_ver; /* controller fw version */ + uint32_t bm_ver; /* battery manager fw version */ + uint8_t pcb_ver; /* main pcb version */ + uint8_t upper_pcb_ver; + uint8_t pad0; + uint8_t pad1; +} ssd_version_info_t; + +typedef struct pci_addr +{ + uint16_t domain; + uint8_t bus; + uint8_t slot; + uint8_t func; +} pci_addr_t; + +typedef struct ssd_drv_param_info { + int mode; + int status_mask; + int int_mode; + int threaded_irq; + int log_level; + int wmode; + int ot_protect; + int finject; + int pad[8]; +} ssd_drv_param_info_t; + + +/* form factor */ +enum ssd_form_factor +{ + SSD_FORM_FACTOR_HHHL = 0, + SSD_FORM_FACTOR_FHHL +}; + + +/* ssd power loss protect */ +enum ssd_plp_type +{ + SSD_PLP_SCAP = 0, + SSD_PLP_CAP, + SSD_PLP_NONE +}; + +/* ssd bm */ +#define SSD_BM_SLAVE_ADDRESS 0x16 +#define SSD_BM_CAP 5 + +/* SBS cmd */ +#define SSD_BM_SAFETYSTATUS 0x51 +#define SSD_BM_OPERATIONSTATUS 0x54 + +/* ManufacturerAccess */ +#define SSD_BM_MANUFACTURERACCESS 0x00 +#define SSD_BM_ENTER_CAP_LEARNING 0x0023 /* cap learning */ + +/* Data flash access */ +#define SSD_BM_DATA_FLASH_SUBCLASS_ID 0x77 +#define SSD_BM_DATA_FLASH_SUBCLASS_ID_PAGE1 0x78 +#define SSD_BM_SYSTEM_DATA_SUBCLASS_ID 56 +#define SSD_BM_CONFIGURATION_REGISTERS_ID 64 + +/* min cap voltage */ +#define SSD_BM_CAP_VOLT_MIN 500 + +/* +enum ssd_bm_cap +{ + SSD_BM_CAP_VINA = 1, + SSD_BM_CAP_JH = 3 +};*/ + +enum ssd_bmstatus +{ + SSD_BMSTATUS_OK = 0, + SSD_BMSTATUS_CHARGING, /* not fully charged */ + SSD_BMSTATUS_WARNING +}; + +enum sbs_unit { + SBS_UNIT_VALUE = 0, + SBS_UNIT_TEMPERATURE, + SBS_UNIT_VOLTAGE, + SBS_UNIT_CURRENT, + SBS_UNIT_ESR, + SBS_UNIT_PERCENT, + SBS_UNIT_CAPACITANCE +}; + +enum sbs_size { + SBS_SIZE_BYTE = 1, + SBS_SIZE_WORD, + SBS_SIZE_BLK, +}; + +struct sbs_cmd { + uint8_t cmd; + uint8_t size; + uint8_t unit; + uint8_t off; + uint16_t mask; + char *desc; +}; + +struct ssd_bm { + uint16_t temp; + uint16_t volt; + uint16_t curr; + uint16_t esr; + uint16_t rsoc; + uint16_t health; + uint16_t cap; + uint16_t chg_curr; + uint16_t chg_volt; + uint16_t cap_volt[SSD_BM_CAP]; + uint16_t sf_alert; + uint16_t sf_status; + uint16_t op_status; + uint16_t sys_volt; +}; + +struct ssd_bm_manufacturer_data +{ + uint16_t pack_lot_code; + uint16_t pcb_lot_code; + uint16_t firmware_ver; + uint16_t hardware_ver; +}; + +struct ssd_bm_configuration_registers +{ + struct { + uint16_t cc:3; + uint16_t rsvd:5; + uint16_t stack:1; + uint16_t rsvd1:2; + uint16_t temp:2; + uint16_t rsvd2:1; + uint16_t lt_en:1; + uint16_t rsvd3:1; + } operation_cfg; + uint16_t pad; + uint16_t fet_action; + uint16_t pad1; + uint16_t fault; +}; + +#define SBS_VALUE_MASK 0xffff + +#define bm_var_offset(var) ((size_t) &((struct ssd_bm *)0)->var) +#define bm_var(start, offset) ((void *) start + (offset)) + +static struct sbs_cmd ssd_bm_sbs[] = { + {0x08, SBS_SIZE_WORD, SBS_UNIT_TEMPERATURE, bm_var_offset(temp), SBS_VALUE_MASK, "Temperature"}, + {0x09, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, bm_var_offset(volt), SBS_VALUE_MASK, "Voltage"}, + {0x0a, SBS_SIZE_WORD, SBS_UNIT_CURRENT, bm_var_offset(curr), SBS_VALUE_MASK, "Current"}, + {0x0b, SBS_SIZE_WORD, SBS_UNIT_ESR, bm_var_offset(esr), SBS_VALUE_MASK, "ESR"}, + {0x0d, SBS_SIZE_BYTE, SBS_UNIT_PERCENT, bm_var_offset(rsoc), SBS_VALUE_MASK, "RelativeStateOfCharge"}, + {0x0e, SBS_SIZE_BYTE, SBS_UNIT_PERCENT, bm_var_offset(health), SBS_VALUE_MASK, "Health"}, + {0x10, SBS_SIZE_WORD, SBS_UNIT_CAPACITANCE, bm_var_offset(cap), SBS_VALUE_MASK, "Capacitance"}, + {0x14, SBS_SIZE_WORD, SBS_UNIT_CURRENT, bm_var_offset(chg_curr), SBS_VALUE_MASK, "ChargingCurrent"}, + {0x15, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, bm_var_offset(chg_volt), SBS_VALUE_MASK, "ChargingVoltage"}, + {0x3b, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, (uint8_t)bm_var_offset(cap_volt[4]), SBS_VALUE_MASK, "CapacitorVoltage5"}, + {0x3c, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, (uint8_t)bm_var_offset(cap_volt[3]), SBS_VALUE_MASK, "CapacitorVoltage4"}, + {0x3d, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, (uint8_t)bm_var_offset(cap_volt[2]), SBS_VALUE_MASK, "CapacitorVoltage3"}, + {0x3e, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, (uint8_t)bm_var_offset(cap_volt[1]), SBS_VALUE_MASK, "CapacitorVoltage2"}, + {0x3f, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, (uint8_t)bm_var_offset(cap_volt[0]), SBS_VALUE_MASK, "CapacitorVoltage1"}, + {0x50, SBS_SIZE_WORD, SBS_UNIT_VALUE, bm_var_offset(sf_alert), 0x870F, "SafetyAlert"}, + {0x51, SBS_SIZE_WORD, SBS_UNIT_VALUE, bm_var_offset(sf_status), 0xE7BF, "SafetyStatus"}, + {0x54, SBS_SIZE_WORD, SBS_UNIT_VALUE, bm_var_offset(op_status), 0x79F4, "OperationStatus"}, + {0x5a, SBS_SIZE_WORD, SBS_UNIT_VOLTAGE, bm_var_offset(sys_volt), SBS_VALUE_MASK, "SystemVoltage"}, + {0, 0, 0, 0, 0, NULL}, +}; + +/* ssd ioctl */ +#define SSD_CMD_GET_PROTOCOL_INFO _IOR('H', 100, struct ssd_protocol_info) +#define SSD_CMD_GET_HW_INFO _IOR('H', 101, struct ssd_hw_info) +#define SSD_CMD_GET_ROM_INFO _IOR('H', 102, struct ssd_rom_info) +#define SSD_CMD_GET_SMART _IOR('H', 103, struct ssd_smart) +#define SSD_CMD_GET_IDX _IOR('H', 105, int) +#define SSD_CMD_GET_AMOUNT _IOR('H', 106, int) +#define SSD_CMD_GET_TO_INFO _IOR('H', 107, int) +#define SSD_CMD_GET_DRV_VER _IOR('H', 108, char[DRIVER_VERSION_LEN]) + +#define SSD_CMD_GET_BBACC_INFO _IOR('H', 109, struct ssd_acc_info) +#define SSD_CMD_GET_ECACC_INFO _IOR('H', 110, struct ssd_acc_info) + +#define SSD_CMD_GET_HW_INFO_EXT _IOR('H', 111, struct ssd_hw_info_extend) + +#define SSD_CMD_REG_READ _IOWR('H', 120, struct ssd_reg_op_info) +#define SSD_CMD_REG_WRITE _IOWR('H', 121, struct ssd_reg_op_info) + +#define SSD_CMD_SPI_READ _IOWR('H', 125, struct ssd_spi_op_info) +#define SSD_CMD_SPI_WRITE _IOWR('H', 126, struct ssd_spi_op_info) +#define SSD_CMD_SPI_ERASE _IOWR('H', 127, struct ssd_spi_op_info) + +#define SSD_CMD_I2C_READ _IOWR('H', 128, struct ssd_i2c_op_info) +#define SSD_CMD_I2C_WRITE _IOWR('H', 129, struct ssd_i2c_op_info) +#define SSD_CMD_I2C_WRITE_READ _IOWR('H', 130, struct ssd_i2c_op_info) + +#define SSD_CMD_SMBUS_SEND_BYTE _IOWR('H', 131, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_RECEIVE_BYTE _IOWR('H', 132, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_WRITE_BYTE _IOWR('H', 133, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_READ_BYTE _IOWR('H', 135, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_WRITE_WORD _IOWR('H', 136, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_READ_WORD _IOWR('H', 137, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_WRITE_BLOCK _IOWR('H', 138, struct ssd_smbus_op_info) +#define SSD_CMD_SMBUS_READ_BLOCK _IOWR('H', 139, struct ssd_smbus_op_info) + +#define SSD_CMD_BM_GET_VER _IOR('H', 140, uint16_t) +#define SSD_CMD_BM_GET_NR_CAP _IOR('H', 141, int) +#define SSD_CMD_BM_CAP_LEARNING _IOW('H', 142, int) +#define SSD_CMD_CAP_LEARN _IOR('H', 143, uint32_t) +#define SSD_CMD_GET_CAP_STATUS _IOR('H', 144, int) + +#define SSD_CMD_RAM_READ _IOWR('H', 150, struct ssd_ram_op_info) +#define SSD_CMD_RAM_WRITE _IOWR('H', 151, struct ssd_ram_op_info) + +#define SSD_CMD_NAND_READ_ID _IOR('H', 160, struct ssd_flash_op_info) +#define SSD_CMD_NAND_READ _IOWR('H', 161, struct ssd_flash_op_info) //with oob +#define SSD_CMD_NAND_WRITE _IOWR('H', 162, struct ssd_flash_op_info) +#define SSD_CMD_NAND_ERASE _IOWR('H', 163, struct ssd_flash_op_info) +#define SSD_CMD_NAND_READ_EXT _IOWR('H', 164, struct ssd_flash_op_info) //ingore EIO + +#define SSD_CMD_UPDATE_BBT _IOW('H', 180, struct ssd_flash_op_info) + +#define SSD_CMD_CLEAR_ALARM _IOW('H', 190, int) +#define SSD_CMD_SET_ALARM _IOW('H', 191, int) + +#define SSD_CMD_RESET _IOW('H', 200, int) +#define SSD_CMD_RELOAD_FW _IOW('H', 201, int) +#define SSD_CMD_UNLOAD_DEV _IOW('H', 202, int) +#define SSD_CMD_LOAD_DEV _IOW('H', 203, int) +#define SSD_CMD_UPDATE_VP _IOWR('H', 205, uint32_t) +#define SSD_CMD_FULL_RESET _IOW('H', 206, int) + +#define SSD_CMD_GET_NR_LOG _IOR('H', 220, uint32_t) +#define SSD_CMD_GET_LOG _IOR('H', 221, void *) +#define SSD_CMD_LOG_LEVEL _IOW('H', 222, int) + +#define SSD_CMD_OT_PROTECT _IOW('H', 223, int) +#define SSD_CMD_GET_OT_STATUS _IOR('H', 224, int) + +#define SSD_CMD_CLEAR_LOG _IOW('H', 230, int) +#define SSD_CMD_CLEAR_SMART _IOW('H', 231, int) + +#define SSD_CMD_SW_LOG _IOW('H', 232, struct ssd_sw_log_info) + +#define SSD_CMD_GET_LABEL _IOR('H', 235, struct ssd_label) +#define SSD_CMD_GET_VERSION _IOR('H', 236, struct ssd_version_info) +#define SSD_CMD_GET_TEMPERATURE _IOR('H', 237, int) +#define SSD_CMD_GET_BMSTATUS _IOR('H', 238, int) +#define SSD_CMD_GET_LABEL2 _IOR('H', 239, void *) + + +#define SSD_CMD_FLUSH _IOW('H', 240, int) +#define SSD_CMD_SAVE_MD _IOW('H', 241, int) + +#define SSD_CMD_SET_WMODE _IOW('H', 242, int) +#define SSD_CMD_GET_WMODE _IOR('H', 243, int) +#define SSD_CMD_GET_USER_WMODE _IOR('H', 244, int) + +#define SSD_CMD_DEBUG _IOW('H', 250, struct ssd_debug_info) +#define SSD_CMD_DRV_PARAM_INFO _IOR('H', 251, struct ssd_drv_param_info) + +#define SSD_CMD_CLEAR_WARNING _IOW('H', 260, int) + + +/* log */ +#define SSD_LOG_MAX_SZ 4096 +#define SSD_LOG_LEVEL SSD_LOG_LEVEL_NOTICE +#define SSD_DIF_WITH_OLD_LOG 0x3f + +enum ssd_log_data +{ + SSD_LOG_DATA_NONE = 0, + SSD_LOG_DATA_LOC, + SSD_LOG_DATA_HEX +}; + +typedef struct ssd_log_entry +{ + union { + struct { + uint32_t page:10; + uint32_t block:14; + uint32_t flash:8; + } loc; + struct { + uint32_t page:12; + uint32_t block:12; + uint32_t flash:8; + } loc1; + uint32_t val; + } data; + uint16_t event:10; + uint16_t mod:6; + uint16_t idx; +}__attribute__((packed))ssd_log_entry_t; + +typedef struct ssd_log +{ + uint64_t time:56; + uint64_t ctrl_idx:8; + ssd_log_entry_t le; +} __attribute__((packed)) ssd_log_t; + +typedef struct ssd_log_desc +{ + uint16_t event; + uint8_t level; + uint8_t data; + uint8_t sblock; + uint8_t spage; + char *desc; +} __attribute__((packed)) ssd_log_desc_t; + +#define SSD_LOG_SW_IDX 0xF +#define SSD_UNKNOWN_EVENT ((uint16_t)-1) +static struct ssd_log_desc ssd_log_desc[] = { + /* event, level, show flash, show block, show page, desc */ + {0x0, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_LOC, 0, 0, "Create BBT failure"}, //g3 + {0x1, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_LOC, 0, 0, "Read BBT failure"}, //g3 + {0x2, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Mark bad block"}, + {0x3, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Flush BBT failure"}, + {0x4, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0x7, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "No available blocks"}, + {0x8, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Bad EC header"}, + {0x9, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_LOC, 1, 0, "Bad VID header"}, //g3 + {0xa, SSD_LOG_LEVEL_INFO, SSD_LOG_DATA_LOC, 1, 0, "Wear leveling"}, + {0xb, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "WL read back failure"}, + {0x11, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Data recovery failure"}, // err + {0x20, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Init: scan mapping table failure"}, // err g3 + {0x21, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0x22, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0x23, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0x24, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Merge: read mapping page failure"}, + {0x25, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Merge: read back failure"}, + {0x26, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0x27, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_LOC, 1, 1, "Data corrupted for abnormal power down"}, //g3 + {0x28, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Merge: mapping page corrupted"}, + {0x29, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Init: no mapping page"}, + {0x2a, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: mapping pages incomplete"}, + {0x2b, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Read back failure after programming failure"}, // err + {0xf1, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Read failure without recovery"}, // err + {0xf2, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 0, 0, "No available blocks"}, // maybe err g3 + {0xf3, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 0, "Init: RAID incomplete"}, // err g3 + {0xf4, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0xf5, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read failure in moving data"}, + {0xf6, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Program failure"}, + {0xf7, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_LOC, 1, 1, "Init: RAID not complete"}, + {0xf8, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Init: data moving interrupted"}, + {0xfe, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Data inspection failure"}, + {0xff, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "IO: ECC failed"}, + + /* new */ + {0x2e, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 0, 0, "No available reserved blocks" }, // err + {0x30, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Init: PMT membership not found"}, + {0x31, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Init: PMT corrupted"}, + {0x32, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Init: PBT membership not found"}, + {0x33, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Init: PBT not found"}, + {0x34, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Init: PBT corrupted"}, + {0x35, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PMT page read failure"}, + {0x36, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PBT page read failure"}, + {0x37, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PBT backup page read failure"}, + {0x38, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PBMT read failure"}, + {0x39, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Init: PBMT scan failure"}, // err + {0x3a, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: first page read failure"}, + {0x3b, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Init: first page scan failure"}, // err + {0x3c, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Init: scan unclosed block failure"}, // err + {0x3d, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: write pointer mismatch"}, + {0x3e, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PMT recovery: PBMT read failure"}, + {0x3f, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Init: PMT recovery: PBMT scan failure"}, + {0x40, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "Init: PMT recovery: data page read failure"}, //err + {0x41, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PBT write pointer mismatch"}, + {0x42, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: PBT latest version corrupted"}, + {0x43, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 0, "Init: too many unclosed blocks"}, + {0x44, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Init: PDW block found"}, + {0x45, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "Init: more than one PDW block found"}, //err + {0x46, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Init: first page is blank or read failure"}, + {0x47, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Init: PDW block not found"}, + + {0x50, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 0, "Cache: hit error data"}, // err + {0x51, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 0, "Cache: read back failure"}, // err + {0x52, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Cache: unknown command"}, //? + {0x53, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_LOC, 1, 1, "GC/WL read back failure"}, // err + + {0x60, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "Erase failure"}, + + {0x70, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "LPA not matched"}, + {0x71, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "PBN not matched"}, + {0x72, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read retry failure"}, + {0x73, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Need raid recovery"}, + {0x74, SSD_LOG_LEVEL_INFO, SSD_LOG_DATA_LOC, 1, 1, "Need read retry"}, + {0x75, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read invalid data page"}, + {0x76, SSD_LOG_LEVEL_INFO, SSD_LOG_DATA_LOC, 1, 1, "ECC error, data in cache, PBN matched"}, + {0x77, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "ECC error, data in cache, PBN not matched"}, + {0x78, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "ECC error, data in flash, PBN not matched"}, + {0x79, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "ECC ok, data in cache, LPA not matched"}, + {0x7a, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "ECC ok, data in flash, LPA not matched"}, + {0x7b, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID data in cache, LPA not matched"}, + {0x7c, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID data in flash, LPA not matched"}, + {0x7d, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read data page status error"}, + {0x7e, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read blank page"}, + {0x7f, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Access flash timeout"}, + + {0x80, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "EC overflow"}, + {0x81, SSD_LOG_LEVEL_INFO, SSD_LOG_DATA_NONE, 0, 0, "Scrubbing completed"}, + {0x82, SSD_LOG_LEVEL_INFO, SSD_LOG_DATA_LOC, 1, 0, "Unstable block(too much bit flip)"}, + {0x83, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "GC: ram error"}, //? + {0x84, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "GC: one PBMT read failure"}, + + {0x88, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "GC: mark bad block"}, + {0x89, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 0, "GC: invalid page count error"}, // maybe err + {0x8a, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_NONE, 0, 0, "Warning: Bad Block close to limit"}, + {0x8b, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "Error: Bad Block over limit"}, + {0x8c, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_NONE, 0, 0, "Warning: P/E cycles close to limit"}, + {0x8d, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "Error: P/E cycles over limit"}, + + {0x90, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Warning: Over temperature"}, //90 + {0x91, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Temperature is OK"}, //80 + {0x92, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_NONE, 0, 0, "Battery fault"}, + {0x93, SSD_LOG_LEVEL_WARNING, SSD_LOG_DATA_NONE, 0, 0, "SEU fault"}, //err + {0x94, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "DDR error"}, //err + {0x95, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "Controller serdes error"}, //err + {0x96, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "Bridge serdes 1 error"}, //err + {0x97, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_NONE, 0, 0, "Bridge serdes 2 error"}, //err + {0x98, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "SEU fault (corrected)"}, //err + {0x99, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Battery is OK"}, + {0x9a, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Temperature close to limit"}, //85 + + {0x9b, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "SEU fault address (low)"}, + {0x9c, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "SEU fault address (high)"}, + {0x9d, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "I2C fault" }, + {0x9e, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "DDR single bit error" }, + {0x9f, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Board voltage fault" }, + + {0xa0, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "LPA not matched"}, + {0xa1, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Re-read data in cache"}, + {0xa2, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read blank page"}, + {0xa3, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: Read blank page"}, + {0xa4, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: new data in cache"}, + {0xa5, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: PBN not matched"}, + {0xa6, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Read data with error flag"}, + {0xa7, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: recoverd data with error flag"}, + {0xa8, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Blank page in cache, PBN matched"}, + {0xa9, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: Blank page in cache, PBN matched"}, + {0xaa, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 0, 0, "Flash init failure"}, + {0xab, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "Mapping table recovery failure"}, + {0xac, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_LOC, 1, 1, "RAID recovery: ECC failed"}, + {0xb0, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Warning: Temperature is 95 degrees C"}, + {0xb1, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Warning: Temperature is 100 degrees C"}, + + {0x300, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "CMD timeout"}, + {0x301, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Power on"}, + {0x302, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Power off"}, + {0x303, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Clear log"}, + {0x304, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Set capacity"}, + {0x305, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Clear data"}, + {0x306, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "BM safety status"}, + {0x307, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "I/O error"}, + {0x308, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "CMD error"}, + {0x309, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Set wmode"}, + {0x30a, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "DDR init failed" }, + {0x30b, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "PCIe link status" }, + {0x30c, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "Controller reset sync error" }, + {0x30d, SSD_LOG_LEVEL_ERR, SSD_LOG_DATA_HEX, 0, 0, "Clock fault" }, + {0x30e, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "FPGA voltage fault status" }, + {0x30f, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Set capacity finished"}, + {0x310, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Clear data finished"}, + {0x311, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Reset"}, + {0x312, SSD_LOG_LEVEL_WARNING,SSD_LOG_DATA_HEX, 0, 0, "CAP: voltage fault"}, + {0x313, SSD_LOG_LEVEL_WARNING,SSD_LOG_DATA_NONE, 0, 0, "CAP: learn fault"}, + {0x314, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "CAP status"}, + {0x315, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Board voltage fault status"}, + {0x316, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Inlet temperature is 55 degrees C"}, //55 + {0x317, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Inlet temperature is 50 degrees C"}, //50 + {0x318, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Flash over temperature"}, //70 + {0x319, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Info: Flash temperature is OK"}, //65 + {0x31a, SSD_LOG_LEVEL_WARNING,SSD_LOG_DATA_NONE, 0, 0, "CAP: short circuit"}, + {0x31b, SSD_LOG_LEVEL_WARNING,SSD_LOG_DATA_HEX, 0, 0, "Sensor fault"}, + {0x31c, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Erase all data"}, + {0x31d, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Erase all data finished"}, + {0x320, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "Temperature sensor event"}, + + {0x350, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Clear smart"}, + {0x351, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_NONE, 0, 0, "Clear warning"}, + + {SSD_UNKNOWN_EVENT, SSD_LOG_LEVEL_NOTICE, SSD_LOG_DATA_HEX, 0, 0, "unknown event"}, +}; +/* */ +#define SSD_LOG_OVER_TEMP 0x90 +#define SSD_LOG_NORMAL_TEMP 0x91 +#define SSD_LOG_WARN_TEMP 0x9a +#define SSD_LOG_SEU_FAULT 0x93 +#define SSD_LOG_SEU_FAULT1 0x98 +#define SSD_LOG_BATTERY_FAULT 0x92 +#define SSD_LOG_BATTERY_OK 0x99 +#define SSD_LOG_BOARD_VOLT_FAULT 0x9f + +/* software log */ +#define SSD_LOG_TIMEOUT 0x300 +#define SSD_LOG_POWER_ON 0x301 +#define SSD_LOG_POWER_OFF 0x302 +#define SSD_LOG_CLEAR_LOG 0x303 +#define SSD_LOG_SET_CAPACITY 0x304 +#define SSD_LOG_CLEAR_DATA 0x305 +#define SSD_LOG_BM_SFSTATUS 0x306 +#define SSD_LOG_EIO 0x307 +#define SSD_LOG_ECMD 0x308 +#define SSD_LOG_SET_WMODE 0x309 +#define SSD_LOG_DDR_INIT_ERR 0x30a +#define SSD_LOG_PCIE_LINK_STATUS 0x30b +#define SSD_LOG_CTRL_RST_SYNC 0x30c +#define SSD_LOG_CLK_FAULT 0x30d +#define SSD_LOG_VOLT_FAULT 0x30e +#define SSD_LOG_SET_CAPACITY_END 0x30F +#define SSD_LOG_CLEAR_DATA_END 0x310 +#define SSD_LOG_RESET 0x311 +#define SSD_LOG_CAP_VOLT_FAULT 0x312 +#define SSD_LOG_CAP_LEARN_FAULT 0x313 +#define SSD_LOG_CAP_STATUS 0x314 +#define SSD_LOG_VOLT_STATUS 0x315 +#define SSD_LOG_INLET_OVER_TEMP 0x316 +#define SSD_LOG_INLET_NORMAL_TEMP 0x317 +#define SSD_LOG_FLASH_OVER_TEMP 0x318 +#define SSD_LOG_FLASH_NORMAL_TEMP 0x319 +#define SSD_LOG_CAP_SHORT_CIRCUIT 0x31a +#define SSD_LOG_SENSOR_FAULT 0x31b +#define SSD_LOG_ERASE_ALL 0x31c +#define SSD_LOG_ERASE_ALL_END 0x31d +#define SSD_LOG_TEMP_SENSOR_EVENT 0x320 +#define SSD_LOG_CLEAR_SMART 0x350 +#define SSD_LOG_CLEAR_WARNING 0x351 + + +/* sw log fifo depth */ +#define SSD_LOG_FIFO_SZ 1024 + + +/* done queue */ +static DEFINE_PER_CPU(struct list_head, ssd_doneq); +static DEFINE_PER_CPU(struct tasklet_struct, ssd_tasklet); + + +/* unloading driver */ +static volatile int ssd_exiting = 0; + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) +static struct class_simple *ssd_class; +#else +static struct class *ssd_class; +#endif + +static int ssd_cmajor = SSD_CMAJOR; + +/* ssd block device major, minors */ +static int ssd_major = SSD_MAJOR; +static int ssd_major_sl = SSD_MAJOR_SL; +static int ssd_minors = SSD_MINORS; + +/* ssd device list */ +static struct list_head ssd_list; +static unsigned long ssd_index_bits[SSD_MAX_DEV / BITS_PER_LONG + 1]; +static unsigned long ssd_index_bits_sl[SSD_MAX_DEV / BITS_PER_LONG + 1]; +static atomic_t ssd_nr; + +/* module param */ +enum ssd_drv_mode +{ + SSD_DRV_MODE_STANDARD = 0, /* full */ + SSD_DRV_MODE_DEBUG = 2, /* debug */ + SSD_DRV_MODE_BASE /* base only */ +}; + +enum ssd_int_mode +{ + SSD_INT_LEGACY = 0, + SSD_INT_MSI, + SSD_INT_MSIX +}; + +#if (defined SSD_MSIX) +#define SSD_INT_MODE_DEFAULT SSD_INT_MSIX +#elif (defined SSD_MSI) +#define SSD_INT_MODE_DEFAULT SSD_INT_MSI +#else +/* auto select the defaut int mode according to the kernel version*/ +/* suse 11 sp1 irqbalance bug: use msi instead*/ +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) || (defined RHEL_MAJOR && RHEL_MAJOR >= 6) || (defined RHEL_MAJOR && RHEL_MAJOR == 5 && RHEL_MINOR >= 5)) +#define SSD_INT_MODE_DEFAULT SSD_INT_MSIX +#else +#define SSD_INT_MODE_DEFAULT SSD_INT_MSI +#endif +#endif + +static int mode = SSD_DRV_MODE_STANDARD; +static int status_mask = 0xFF; +static int int_mode = SSD_INT_MODE_DEFAULT; +static int threaded_irq = 0; +static int log_level = SSD_LOG_LEVEL_WARNING; +static int ot_protect = 1; +static int wmode = SSD_WMODE_DEFAULT; +static int finject = 0; + +module_param(mode, int, 0); +module_param(status_mask, int, 0); +module_param(int_mode, int, 0); +module_param(threaded_irq, int, 0); +module_param(log_level, int, 0); +module_param(ot_protect, int, 0); +module_param(wmode, int, 0); +module_param(finject, int, 0); + + +MODULE_PARM_DESC(mode, "driver mode, 0 - standard, 1 - debug, 2 - debug without IO, 3 - basic debug mode"); +MODULE_PARM_DESC(status_mask, "command status mask, 0 - without command error, 0xff - with command error"); +MODULE_PARM_DESC(int_mode, "preferred interrupt mode, 0 - legacy, 1 - msi, 2 - msix"); +MODULE_PARM_DESC(threaded_irq, "threaded irq, 0 - normal irq, 1 - threaded irq"); +MODULE_PARM_DESC(log_level, "log level to display, 0 - info and above, 1 - notice and above, 2 - warning and above, 3 - error only"); +MODULE_PARM_DESC(ot_protect, "over temperature protect, 0 - disable, 1 - enable"); +MODULE_PARM_DESC(wmode, "write mode, 0 - write buffer (with risk for the 6xx firmware), 1 - write buffer ex, 2 - write through, 3 - auto, 4 - default"); +MODULE_PARM_DESC(finject, "enable fault simulation, 0 - off, 1 - on, for debug purpose only"); + +// API adaption layer +static inline void ssd_bio_endio(struct bio *bio, int error) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,13,0)) + bio->bi_error = error; +#else + bio->bi_status = errno_to_blk_status(error); +#endif + bio_endio(bio); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) + bio_endio(bio, error); +#else + bio_endio(bio, bio->bi_size, error); +#endif +} + +static inline int ssd_bio_has_discard(struct bio *bio) +{ +#ifndef SSD_TRIM + return 0; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + return bio_op(bio) == REQ_OP_DISCARD; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + return bio->bi_rw & REQ_DISCARD; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) + return bio_rw_flagged(bio, BIO_RW_DISCARD); +#else + return 0; +#endif +} + +static inline int ssd_bio_has_flush(struct bio *bio) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + return bio_op(bio) == REQ_OP_FLUSH; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + return bio->bi_rw & REQ_FLUSH; +#else + return 0; +#endif +} + +static inline int ssd_bio_has_barrier_or_fua(struct bio * bio) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + return bio->bi_opf & REQ_FUA; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) + return bio->bi_rw & REQ_FUA; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) + return bio->bi_rw & REQ_HARDBARRIER; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)) + return bio_rw_flagged(bio, BIO_RW_BARRIER); +#else + return bio_barrier(bio); +#endif +} + +#ifndef MODULE +static int __init ssd_drv_mode(char *str) +{ + mode = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_status_mask(char *str) +{ + status_mask = (int)simple_strtoul(str, NULL, 16); + + return 1; +} + +static int __init ssd_int_mode(char *str) +{ + int_mode = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_threaded_irq(char *str) +{ + threaded_irq = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_log_level(char *str) +{ + log_level = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_ot_protect(char *str) +{ + ot_protect = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_wmode(char *str) +{ + wmode = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +static int __init ssd_finject(char *str) +{ + finject = (int)simple_strtoul(str, NULL, 0); + + return 1; +} + +__setup(MODULE_NAME"_mode=", ssd_drv_mode); +__setup(MODULE_NAME"_status_mask=", ssd_status_mask); +__setup(MODULE_NAME"_int_mode=", ssd_int_mode); +__setup(MODULE_NAME"_threaded_irq=", ssd_threaded_irq); +__setup(MODULE_NAME"_log_level=", ssd_log_level); +__setup(MODULE_NAME"_ot_protect=", ssd_ot_protect); +__setup(MODULE_NAME"_wmode=", ssd_wmode); +__setup(MODULE_NAME"_finject=", ssd_finject); +#endif + + +#ifdef CONFIG_PROC_FS +#include +#include + +#define SSD_PROC_DIR MODULE_NAME +#define SSD_PROC_INFO "info" + +static struct proc_dir_entry *ssd_proc_dir = NULL; +static struct proc_dir_entry *ssd_proc_info = NULL; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)) +static int ssd_proc_read(char *page, char **start, + off_t off, int count, int *eof, void *data) +{ + struct ssd_device *dev = NULL; + struct ssd_device *n = NULL; + uint64_t size; + int idx; + int len = 0; + //char type; //xx + + if (ssd_exiting || off != 0) { + return 0; + } + + len += snprintf((page + len), (count - len), "Driver Version:\t%s\n", DRIVER_VERSION); + + list_for_each_entry_safe(dev, n, &ssd_list, list) { + idx = dev->idx + 1; + size = dev->hw_info.size ; + do_div(size, 1000000000); + + len += snprintf((page + len), (count - len), "\n"); + + len += snprintf((page + len), (count - len), "HIO %d Size:\t%uGB\n", idx, (uint32_t)size); + + len += snprintf((page + len), (count - len), "HIO %d Bridge FW VER:\t%03X\n", idx, dev->hw_info.bridge_ver); + if (dev->hw_info.ctrl_ver != 0) { + len += snprintf((page + len), (count - len), "HIO %d Controller FW VER:\t%03X\n", idx, dev->hw_info.ctrl_ver); + } + + len += snprintf((page + len), (count - len), "HIO %d PCB VER:\t.%c\n", idx, dev->hw_info.pcb_ver); + + if (dev->hw_info.upper_pcb_ver >= 'A') { + len += snprintf((page + len), (count - len), "HIO %d Upper PCB VER:\t.%c\n", idx, dev->hw_info.upper_pcb_ver); + } + + len += snprintf((page + len), (count - len), "HIO %d Device:\t%s\n", idx, dev->name); + } + + *eof = 1; + return len; +} + +#else + +static int ssd_proc_show(struct seq_file *m, void *v) +{ + struct ssd_device *dev = NULL; + struct ssd_device *n = NULL; + uint64_t size; + int idx; + + if (ssd_exiting) { + return 0; + } + + seq_printf(m, "Driver Version:\t%s\n", DRIVER_VERSION); + + list_for_each_entry_safe(dev, n, &ssd_list, list) { + idx = dev->idx + 1; + size = dev->hw_info.size ; + do_div(size, 1000000000); + + seq_printf(m, "\n"); + + seq_printf(m, "HIO %d Size:\t%uGB\n", idx, (uint32_t)size); + + seq_printf(m, "HIO %d Bridge FW VER:\t%03X\n", idx, dev->hw_info.bridge_ver); + if (dev->hw_info.ctrl_ver != 0) { + seq_printf(m, "HIO %d Controller FW VER:\t%03X\n", idx, dev->hw_info.ctrl_ver); + } + + seq_printf(m, "HIO %d PCB VER:\t.%c\n", idx, dev->hw_info.pcb_ver); + + if (dev->hw_info.upper_pcb_ver >= 'A') { + seq_printf(m, "HIO %d Upper PCB VER:\t.%c\n", idx, dev->hw_info.upper_pcb_ver); + } + + seq_printf(m, "HIO %d Device:\t%s\n", idx, dev->name); + } + + return 0; +} + +static int ssd_proc_open(struct inode *inode, struct file *file) +{ +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3,9,0)) + return single_open(file, ssd_proc_show, PDE(inode)->data); +#else + return single_open(file, ssd_proc_show, PDE_DATA(inode)); +#endif +} + +static const struct file_operations ssd_proc_fops = { + .open = ssd_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; +#endif + + +static void ssd_cleanup_proc(void) +{ + if (ssd_proc_info) { + remove_proc_entry(SSD_PROC_INFO, ssd_proc_dir); + ssd_proc_info = NULL; + } + if (ssd_proc_dir) { + remove_proc_entry(SSD_PROC_DIR, NULL); + ssd_proc_dir = NULL; + } +} +static int ssd_init_proc(void) +{ + ssd_proc_dir = proc_mkdir(SSD_PROC_DIR, NULL); + if (!ssd_proc_dir) + goto out_proc_mkdir; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)) + ssd_proc_info = create_proc_entry(SSD_PROC_INFO, S_IFREG | S_IRUGO | S_IWUSR, ssd_proc_dir); + if (!ssd_proc_info) + goto out_create_proc_entry; + + ssd_proc_info->read_proc = ssd_proc_read; + +/* kernel bug */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) + ssd_proc_info->owner = THIS_MODULE; +#endif +#else + ssd_proc_info = proc_create(SSD_PROC_INFO, 0600, ssd_proc_dir, &ssd_proc_fops); + if (!ssd_proc_info) + goto out_create_proc_entry; +#endif + + return 0; + +out_create_proc_entry: + remove_proc_entry(SSD_PROC_DIR, NULL); +out_proc_mkdir: + return -ENOMEM; +} + +#else +static void ssd_cleanup_proc(void) +{ + return; +} +static int ssd_init_proc(void) +{ + return 0; +} +#endif /* CONFIG_PROC_FS */ + +/* sysfs */ +static void ssd_unregister_sysfs(struct ssd_device *dev) +{ + return; +} + +static int ssd_register_sysfs(struct ssd_device *dev) +{ + return 0; +} + +static void ssd_cleanup_sysfs(void) +{ + return; +} + +static int ssd_init_sysfs(void) +{ + return 0; +} + +static inline void ssd_put_index(int slave, int index) +{ + unsigned long *index_bits = ssd_index_bits; + + if (slave) { + index_bits = ssd_index_bits_sl; + } + + if (test_and_clear_bit(index, index_bits)) { + atomic_dec(&ssd_nr); + } +} + +static inline int ssd_get_index(int slave) +{ + unsigned long *index_bits = ssd_index_bits; + int index; + + if (slave) { + index_bits = ssd_index_bits_sl; + } + +find_index: + if ((index = find_first_zero_bit(index_bits, SSD_MAX_DEV)) >= SSD_MAX_DEV) { + return -1; + } + + if (test_and_set_bit(index, index_bits)) { + goto find_index; + } + + atomic_inc(&ssd_nr); + + return index; +} + +static void ssd_cleanup_index(void) +{ + return; +} + +static int ssd_init_index(void) +{ + INIT_LIST_HEAD(&ssd_list); + atomic_set(&ssd_nr, 0); + memset(ssd_index_bits, 0, sizeof(ssd_index_bits)); + memset(ssd_index_bits_sl, 0, sizeof(ssd_index_bits_sl)); + + return 0; +} + +static void ssd_set_dev_name(char *name, size_t size, int idx) +{ + if(idx < SSD_ALPHABET_NUM) { + snprintf(name, size, "%c", 'a'+idx); + } else { + idx -= SSD_ALPHABET_NUM; + snprintf(name, size, "%c%c", 'a'+(idx/SSD_ALPHABET_NUM), 'a'+(idx%SSD_ALPHABET_NUM)); + } +} + +/* pci register r&w */ +static inline void ssd_reg_write(void *addr, uint64_t val) +{ + iowrite32((uint32_t)val, addr); + iowrite32((uint32_t)(val >> 32), addr + 4); + wmb(); +} + +static inline uint64_t ssd_reg_read(void *addr) +{ + uint64_t val; + uint32_t val_lo, val_hi; + + val_lo = ioread32(addr); + val_hi = ioread32(addr + 4); + + rmb(); + val = val_lo | ((uint64_t)val_hi << 32); + + return val; +} + + +#define ssd_reg32_write(addr, val) writel(val, addr) +#define ssd_reg32_read(addr) readl(addr) + +/* alarm led */ +static void ssd_clear_alarm(struct ssd_device *dev) +{ + uint32_t val; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_LED_REG); + + /* firmware control */ + val &= ~0x2; + + ssd_reg32_write(dev->ctrlp + SSD_LED_REG, val); +} + +static void ssd_set_alarm(struct ssd_device *dev) +{ + uint32_t val; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_LED_REG); + + /* light up */ + val &= ~0x1; + /* software control */ + val |= 0x2; + + ssd_reg32_write(dev->ctrlp + SSD_LED_REG, val); +} + +#define u32_swap(x) \ + ((uint32_t)( \ + (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \ + (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \ + (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \ + (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24))) + +#define u16_swap(x) \ + ((uint16_t)( \ + (((uint16_t)(x) & (uint16_t)0x00ff) << 8) | \ + (((uint16_t)(x) & (uint16_t)0xff00) >> 8) )) + + +#if 0 +/* No lock, for init only*/ +static int ssd_spi_read_id(struct ssd_device *dev, uint32_t *id) +{ + uint32_t val; + unsigned long st; + int ret = 0; + + if (!dev || !id) { + return -EINVAL; + } + + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_READ_ID); + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + + st = jiffies; + for (;;) { + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + if (val == 0x1000000) { + break; + } + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_ID); + *id = val; + +out: + return ret; +} +#endif + +/* spi access */ +static int ssd_init_spi(struct ssd_device *dev) +{ + uint32_t val; + unsigned long st; + int ret = 0; + + mutex_lock(&dev->spi_mutex); + st = jiffies; + for(;;) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_READ_STATUS); + + do { + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } while (val != 0x1000000); + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_STATUS); + if (!(val & 0x1)) { + break; + } + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + +out: + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (val & 0x1) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_CLSR); + } + } + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_DISABLE); + mutex_unlock(&dev->spi_mutex); + + ret = 0; + + return ret; +} + +static int ssd_spi_page_read(struct ssd_device *dev, void *buf, uint32_t off, uint32_t size) +{ + uint32_t val; + uint32_t rlen = 0; + unsigned long st; + int ret = 0; + + if (!dev || !buf) { + return -EINVAL; + } + + if ((off % sizeof(uint32_t)) != 0 || (size % sizeof(uint32_t)) != 0 || size == 0 || + ((uint64_t)off + (uint64_t)size) > dev->rom_info.size || size > dev->rom_info.page_size) { + return -EINVAL; + } + + mutex_lock(&dev->spi_mutex); + while (rlen < size) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD_HI, ((off + rlen) >> 24)); + wmb(); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, (((off + rlen) << 8) | SSD_SPI_CMD_READ)); + + (void)ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + (void)ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + (void)ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + (void)ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + + st = jiffies; + for (;;) { + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + if (val == 0x1000000) { + break; + } + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_RDATA); + *(uint32_t *)(buf + rlen)= u32_swap(val); + + rlen += sizeof(uint32_t); + } + +out: + mutex_unlock(&dev->spi_mutex); + return ret; +} + +static int ssd_spi_page_write(struct ssd_device *dev, void *buf, uint32_t off, uint32_t size) +{ + uint32_t val; + uint32_t wlen; + unsigned long st; + int i; + int ret = 0; + + if (!dev || !buf) { + return -EINVAL; + } + + if ((off % sizeof(uint32_t)) != 0 || (size % sizeof(uint32_t)) != 0 || size == 0 || + ((uint64_t)off + (uint64_t)size) > dev->rom_info.size || size > dev->rom_info.page_size || + (off / dev->rom_info.page_size) != ((off + size - 1) / dev->rom_info.page_size)) { + return -EINVAL; + } + + mutex_lock(&dev->spi_mutex); + + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_ENABLE); + + wlen = size / sizeof(uint32_t); + for (i=0; i<(int)wlen; i++) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_WDATA, u32_swap(*((uint32_t *)buf + i))); + } + + wmb(); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD_HI, (off >> 24)); + wmb(); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, ((off << 8) | SSD_SPI_CMD_PROGRAM)); + + udelay(1); + + st = jiffies; + for (;;) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_READ_STATUS); + do { + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } while (val != 0x1000000); + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_STATUS); + if (!(val & 0x1)) { + break; + } + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if ((val >> 6) & 0x1) { + ret = -EIO; + goto out; + } + } + +out: + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (val & 0x1) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_CLSR); + } + } + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_DISABLE); + + mutex_unlock(&dev->spi_mutex); + + return ret; +} + +static int ssd_spi_block_erase(struct ssd_device *dev, uint32_t off) +{ + uint32_t val; + unsigned long st; + int ret = 0; + + if (!dev) { + return -EINVAL; + } + + if ((off % dev->rom_info.block_size) != 0 || off >= dev->rom_info.size) { + return -EINVAL; + } + + mutex_lock(&dev->spi_mutex); + + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_ENABLE); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_ENABLE); + + wmb(); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD_HI, (off >> 24)); + wmb(); + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, ((off << 8) | SSD_SPI_CMD_ERASE)); + + st = jiffies; + for (;;) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_READ_STATUS); + + do { + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_READY); + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } while (val != 0x1000000); + + val = ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_STATUS); + if (!(val & 0x1)) { + break; + } + + if (time_after(jiffies, (st + SSD_SPI_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if ((val >> 5) & 0x1) { + ret = -EIO; + goto out; + } + } + +out: + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (val & 0x1) { + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_CLSR); + } + } + ssd_reg32_write(dev->ctrlp + SSD_SPI_REG_CMD, SSD_SPI_CMD_W_DISABLE); + + mutex_unlock(&dev->spi_mutex); + + return ret; +} + +static int ssd_spi_read(struct ssd_device *dev, void *buf, uint32_t off, uint32_t size) +{ + uint32_t len = 0; + uint32_t roff; + uint32_t rsize; + int ret = 0; + + if (!dev || !buf) { + return -EINVAL; + } + + if ((off % sizeof(uint32_t)) != 0 || (size % sizeof(uint32_t)) != 0 || size == 0 || + ((uint64_t)off + (uint64_t)size) > dev->rom_info.size) { + return -EINVAL; + } + + while (len < size) { + roff = (off + len) % dev->rom_info.page_size; + rsize = dev->rom_info.page_size - roff; + if ((size - len) < rsize) { + rsize = (size - len); + } + roff = off + len; + + ret = ssd_spi_page_read(dev, (buf + len), roff, rsize); + if (ret) { + goto out; + } + + len += rsize; + + cond_resched(); + } + +out: + return ret; +} + +static int ssd_spi_write(struct ssd_device *dev, void *buf, uint32_t off, uint32_t size) +{ + uint32_t len = 0; + uint32_t woff; + uint32_t wsize; + int ret = 0; + + if (!dev || !buf) { + return -EINVAL; + } + + if ((off % sizeof(uint32_t)) != 0 || (size % sizeof(uint32_t)) != 0 || size == 0 || + ((uint64_t)off + (uint64_t)size) > dev->rom_info.size) { + return -EINVAL; + } + + while (len < size) { + woff = (off + len) % dev->rom_info.page_size; + wsize = dev->rom_info.page_size - woff; + if ((size - len) < wsize) { + wsize = (size - len); + } + woff = off + len; + + ret = ssd_spi_page_write(dev, (buf + len), woff, wsize); + if (ret) { + goto out; + } + + len += wsize; + + cond_resched(); + } + +out: + return ret; +} + +static int ssd_spi_erase(struct ssd_device *dev, uint32_t off, uint32_t size) +{ + uint32_t len = 0; + uint32_t eoff; + int ret = 0; + + if (!dev) { + return -EINVAL; + } + + if (size == 0 || ((uint64_t)off + (uint64_t)size) > dev->rom_info.size || + (off % dev->rom_info.block_size) != 0 || (size % dev->rom_info.block_size) != 0) { + return -EINVAL; + } + + while (len < size) { + eoff = (off + len); + + ret = ssd_spi_block_erase(dev, eoff); + if (ret) { + goto out; + } + + len += dev->rom_info.block_size; + + cond_resched(); + } + +out: + return ret; +} + +/* i2c access */ +static uint32_t __ssd_i2c_reg32_read(void *addr) +{ + return ssd_reg32_read(addr); +} + +static void __ssd_i2c_reg32_write(void *addr, uint32_t val) +{ + ssd_reg32_write(addr, val); + ssd_reg32_read(addr); +} + +static int __ssd_i2c_clear(struct ssd_device *dev, uint8_t saddr) +{ + ssd_i2c_ctrl_t ctrl; + ssd_i2c_data_t data; + uint8_t status = 0; + int nr_data = 0; + unsigned long st; + int ret = 0; + +check_status: + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_STATUS_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + st = jiffies; + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + status = data.bits.rdata; + + if (!(status & 0x4)) { + /* clear read fifo data */ + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_DATA_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + st = jiffies; + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out; + } + cond_resched(); + } + + nr_data++; + if (nr_data <= SSD_I2C_MAX_DATA) { + goto check_status; + } else { + goto out_reset; + } + } + + if (status & 0x3) { + /* clear int */ + ctrl.bits.wdata = 0x04; + ctrl.bits.addr = SSD_I2C_CMD_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + } + + if (!(status & 0x8)) { +out_reset: + /* reset i2c controller */ + ctrl.bits.wdata = 0x0; + ctrl.bits.addr = SSD_I2C_RESET_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + } + +out: + return ret; +} + +static int ssd_i2c_write(struct ssd_device *dev, uint8_t saddr, uint8_t size, uint8_t *buf) +{ + ssd_i2c_ctrl_t ctrl; + ssd_i2c_data_t data; + uint8_t off = 0; + uint8_t status = 0; + unsigned long st; + int ret = 0; + + mutex_lock(&dev->i2c_mutex); + + ctrl.val = 0; + + /* slave addr */ + ctrl.bits.wdata = saddr; + ctrl.bits.addr = SSD_I2C_SADDR_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* data */ + while (off < size) { + ctrl.bits.wdata = buf[off]; + ctrl.bits.addr = SSD_I2C_DATA_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + off++; + } + + /* write */ + ctrl.bits.wdata = 0x01; + ctrl.bits.addr = SSD_I2C_CMD_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* wait */ + st = jiffies; + for (;;) { + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_STATUS_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + status = data.bits.rdata; + if (status & 0x1) { + break; + } + + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + if (!(status & 0x1)) { + ret = -1; + goto out_clear; + } + + /* busy ? */ + if (status & 0x20) { + ret = -2; + goto out_clear; + } + + /* ack ? */ + if (status & 0x10) { + ret = -3; + goto out_clear; + } + + /* clear */ +out_clear: + if (__ssd_i2c_clear(dev, saddr)) { + if (!ret) ret = -4; + } + + mutex_unlock(&dev->i2c_mutex); + + return ret; +} + +static int ssd_i2c_read(struct ssd_device *dev, uint8_t saddr, uint8_t size, uint8_t *buf) +{ + ssd_i2c_ctrl_t ctrl; + ssd_i2c_data_t data; + uint8_t off = 0; + uint8_t status = 0; + unsigned long st; + int ret = 0; + + mutex_lock(&dev->i2c_mutex); + + ctrl.val = 0; + + /* slave addr */ + ctrl.bits.wdata = saddr; + ctrl.bits.addr = SSD_I2C_SADDR_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* read len */ + ctrl.bits.wdata = size; + ctrl.bits.addr = SSD_I2C_LEN_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* read */ + ctrl.bits.wdata = 0x02; + ctrl.bits.addr = SSD_I2C_CMD_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* wait */ + st = jiffies; + for (;;) { + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_STATUS_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + status = data.bits.rdata; + if (status & 0x2) { + break; + } + + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + if (!(status & 0x2)) { + ret = -1; + goto out_clear; + } + + /* busy ? */ + if (status & 0x20) { + ret = -2; + goto out_clear; + } + + /* ack ? */ + if (status & 0x10) { + ret = -3; + goto out_clear; + } + + /* data */ + while (off < size) { + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_DATA_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + st = jiffies; + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + buf[off] = data.bits.rdata; + + off++; + } + + /* clear */ +out_clear: + if (__ssd_i2c_clear(dev, saddr)) { + if (!ret) ret = -4; + } + + mutex_unlock(&dev->i2c_mutex); + + return ret; +} + +static int ssd_i2c_write_read(struct ssd_device *dev, uint8_t saddr, uint8_t wsize, uint8_t *wbuf, uint8_t rsize, uint8_t *rbuf) +{ + ssd_i2c_ctrl_t ctrl; + ssd_i2c_data_t data; + uint8_t off = 0; + uint8_t status = 0; + unsigned long st; + int ret = 0; + + mutex_lock(&dev->i2c_mutex); + + ctrl.val = 0; + + /* slave addr */ + ctrl.bits.wdata = saddr; + ctrl.bits.addr = SSD_I2C_SADDR_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* data */ + off = 0; + while (off < wsize) { + ctrl.bits.wdata = wbuf[off]; + ctrl.bits.addr = SSD_I2C_DATA_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + off++; + } + + /* read len */ + ctrl.bits.wdata = rsize; + ctrl.bits.addr = SSD_I2C_LEN_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* write -> read */ + ctrl.bits.wdata = 0x03; + ctrl.bits.addr = SSD_I2C_CMD_REG; + ctrl.bits.rw = SSD_I2C_CTRL_WRITE; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + /* wait */ + st = jiffies; + for (;;) { + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_STATUS_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + status = data.bits.rdata; + if (status & 0x2) { + break; + } + + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + if (!(status & 0x2)) { + ret = -1; + goto out_clear; + } + + /* busy ? */ + if (status & 0x20) { + ret = -2; + goto out_clear; + } + + /* ack ? */ + if (status & 0x10) { + ret = -3; + goto out_clear; + } + + /* data */ + off = 0; + while (off < rsize) { + ctrl.bits.wdata = 0; + ctrl.bits.addr = SSD_I2C_DATA_REG; + ctrl.bits.rw = SSD_I2C_CTRL_READ; + __ssd_i2c_reg32_write(dev->ctrlp + SSD_I2C_CTRL_REG, ctrl.val); + + st = jiffies; + for (;;) { + data.val = __ssd_i2c_reg32_read(dev->ctrlp + SSD_I2C_RDATA_REG); + if (data.bits.valid == 0) { + break; + } + + /* retry */ + if (time_after(jiffies, (st + SSD_I2C_TIMEOUT))) { + ret = -ETIMEDOUT; + goto out_clear; + } + cond_resched(); + } + + rbuf[off] = data.bits.rdata; + + off++; + } + + /* clear */ +out_clear: + if (__ssd_i2c_clear(dev, saddr)) { + if (!ret) ret = -4; + } + mutex_unlock(&dev->i2c_mutex); + + return ret; +} + +static int ssd_smbus_send_byte(struct ssd_device *dev, uint8_t saddr, uint8_t *buf) +{ + int i = 0; + int ret = 0; + + for (;;) { + ret = ssd_i2c_write(dev, saddr, 1, buf); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_receive_byte(struct ssd_device *dev, uint8_t saddr, uint8_t *buf) +{ + int i = 0; + int ret = 0; + + for (;;) { + ret = ssd_i2c_read(dev, saddr, 1, buf); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_write_byte(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + memcpy((smb_data + 1), buf, 1); + + for (;;) { + ret = ssd_i2c_write(dev, saddr, 2, smb_data); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_read_byte(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + + for (;;) { + ret = ssd_i2c_write_read(dev, saddr, 1, smb_data, 1, buf); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_write_word(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + memcpy((smb_data + 1), buf, 2); + + for (;;) { + ret = ssd_i2c_write(dev, saddr, 3, smb_data); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_read_word(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + + for (;;) { + ret = ssd_i2c_write_read(dev, saddr, 1, smb_data, 2, buf); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_write_block(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t size, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + smb_data[1] = size; + memcpy((smb_data + 2), buf, size); + + for (;;) { + ret = ssd_i2c_write(dev, saddr, (2 + size), smb_data); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + + return ret; +} + +static int ssd_smbus_read_block(struct ssd_device *dev, uint8_t saddr, uint8_t cmd, uint8_t size, uint8_t *buf) +{ + uint8_t smb_data[SSD_SMBUS_DATA_MAX] = {0}; + uint8_t rsize; + int i = 0; + int ret = 0; + + smb_data[0] = cmd; + + for (;;) { + ret = ssd_i2c_write_read(dev, saddr, 1, smb_data, (SSD_SMBUS_BLOCK_MAX + 1), (smb_data + 1)); + if (!ret || -ETIMEDOUT == ret) { + break; + } + + i++; + if (i >= SSD_SMBUS_RETRY_MAX) { + break; + } + msleep(SSD_SMBUS_RETRY_INTERVAL); + } + if (ret) { + return ret; + } + + rsize = smb_data[1]; + + if (rsize > size ) { + rsize = size; + } + + memcpy(buf, (smb_data + 2), rsize); + + return 0; +} + + +static int ssd_gen_swlog(struct ssd_device *dev, uint16_t event, uint32_t data); + +/* sensor */ +static int ssd_init_lm75(struct ssd_device *dev, uint8_t saddr) +{ + uint8_t conf = 0; + int ret = 0; + + ret = ssd_smbus_read_byte(dev, saddr, SSD_LM75_REG_CONF, &conf); + if (ret) { + goto out; + } + + conf &= (uint8_t)(~1u); + + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM75_REG_CONF, &conf); + if (ret) { + goto out; + } + +out: + return ret; +} + +static int ssd_lm75_read(struct ssd_device *dev, uint8_t saddr, uint16_t *data) +{ + uint16_t val = 0; + int ret; + + ret = ssd_smbus_read_word(dev, saddr, SSD_LM75_REG_TEMP, (uint8_t *)&val); + if (ret) { + return ret; + } + + *data = u16_swap(val); + + return 0; +} + +static int ssd_init_lm80(struct ssd_device *dev, uint8_t saddr) +{ + uint8_t val; + uint8_t low, high; + int i; + int ret = 0; + + /* init */ + val = 0x80; + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_CONFIG, &val); + if (ret) { + goto out; + } + + /* 11-bit temp */ + val = 0x08; + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_RES, &val); + if (ret) { + goto out; + } + + /* set volt limit */ + for (i=0; ihw_info.nr_ctrl <= 1 && SSD_LM80_IN_1V2 == i) { + high = 0xFF; + low = 0; + } + + /* high limit */ + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_IN_MAX(i), &high); + if (ret) { + goto out; + } + + /* low limit*/ + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_IN_MIN(i), &low); + if (ret) { + goto out; + } + } + + /* set interrupt mask: allow volt in interrupt except cap in*/ + val = 0x81; + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_MASK1, &val); + if (ret) { + goto out; + } + + /* set interrupt mask: disable others */ + val = 0xFF; + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_MASK2, &val); + if (ret) { + goto out; + } + + /* start */ + val = 0x03; + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_CONFIG, &val); + if (ret) { + goto out; + } + +out: + return ret; +} + +static int ssd_lm80_enable_in(struct ssd_device *dev, uint8_t saddr, int idx) +{ + uint8_t val = 0; + int ret = 0; + + if (idx >= SSD_LM80_IN_NR || idx < 0) { + return -EINVAL; + } + + ret = ssd_smbus_read_byte(dev, saddr, SSD_LM80_REG_MASK1, &val); + if (ret) { + goto out; + } + + val &= ~(1UL << (uint32_t)idx); + + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_MASK1, &val); + if (ret) { + goto out; + } + +out: + return ret; +} + +static int ssd_lm80_disable_in(struct ssd_device *dev, uint8_t saddr, int idx) +{ + uint8_t val = 0; + int ret = 0; + + if (idx >= SSD_LM80_IN_NR || idx < 0) { + return -EINVAL; + } + + ret = ssd_smbus_read_byte(dev, saddr, SSD_LM80_REG_MASK1, &val); + if (ret) { + goto out; + } + + val |= (1UL << (uint32_t)idx); + + ret = ssd_smbus_write_byte(dev, saddr, SSD_LM80_REG_MASK1, &val); + if (ret) { + goto out; + } + +out: + return ret; +} + +static int ssd_lm80_read_temp(struct ssd_device *dev, uint8_t saddr, uint16_t *data) +{ + uint16_t val = 0; + int ret; + + ret = ssd_smbus_read_word(dev, saddr, SSD_LM80_REG_TEMP, (uint8_t *)&val); + if (ret) { + return ret; + } + + *data = u16_swap(val); + + return 0; +} +static int ssd_generate_sensor_fault_log(struct ssd_device *dev, uint16_t event, uint8_t addr,uint32_t ret) +{ + uint32_t data; + data = ((ret & 0xffff) << 16) | (addr << 8) | addr; + ssd_gen_swlog(dev,event,data); + return 0; +} +static int ssd_lm80_check_event(struct ssd_device *dev, uint8_t saddr) +{ + uint32_t volt; + uint16_t val = 0, status; + uint8_t alarm1 = 0, alarm2 = 0; + uint32_t low, high; + int i,j=0; + int ret = 0; + + /* read interrupt status to clear interrupt */ + ret = ssd_smbus_read_byte(dev, saddr, SSD_LM80_REG_ALARM1, &alarm1); + if (ret) { + goto out; + } + + ret = ssd_smbus_read_byte(dev, saddr, SSD_LM80_REG_ALARM2, &alarm2); + if (ret) { + goto out; + } + + status = (uint16_t)alarm1 | ((uint16_t)alarm2 << 8); + + /* parse inetrrupt status */ + for (i=0; i> (uint32_t)i) & 0x1)) { + if (test_and_clear_bit(SSD_HWMON_LM80(i), &dev->hwmon)) { + /* enable INx irq */ + ret = ssd_lm80_enable_in(dev, saddr, i); + if (ret) { + goto out; + } + } + + continue; + } + + /* disable INx irq */ + ret = ssd_lm80_disable_in(dev, saddr, i); + if (ret) { + goto out; + } + + if (test_and_set_bit(SSD_HWMON_LM80(i), &dev->hwmon)) { + continue; + } + + high = (uint32_t)ssd_lm80_limit[i].high * (uint32_t)10; + low = (uint32_t)ssd_lm80_limit[i].low * (uint32_t)10; + + for (j=0; j<3; j++) { + ret = ssd_smbus_read_word(dev, saddr, SSD_LM80_REG_IN(i), (uint8_t *)&val); + if (ret) { + goto out; + } + volt = SSD_LM80_CONVERT_VOLT(u16_swap(val)); + if ((volt>high) || (volt<=low)) { + if(j<2) { + msleep(SSD_LM80_CONV_INTERVAL); + } + } else { + break; + } + } + + if (j<3) { + continue; + } + + switch (i) { + case SSD_LM80_IN_CAP: { + if (0 == volt) { + ssd_gen_swlog(dev, SSD_LOG_CAP_SHORT_CIRCUIT, 0); + } else { + ssd_gen_swlog(dev, SSD_LOG_CAP_VOLT_FAULT, SSD_PL_CAP_VOLT(volt)); + } + break; + } + + case SSD_LM80_IN_1V2: + case SSD_LM80_IN_1V2a: + case SSD_LM80_IN_1V5: + case SSD_LM80_IN_1V8: { + ssd_gen_swlog(dev, SSD_LOG_VOLT_STATUS, SSD_VOLT_LOG_DATA(i, 0, volt)); + break; + } + case SSD_LM80_IN_FPGA_3V3: + case SSD_LM80_IN_3V3: { + ssd_gen_swlog(dev, SSD_LOG_VOLT_STATUS, SSD_VOLT_LOG_DATA(i, 0, SSD_LM80_3V3_VOLT(volt))); + break; + } + default: + break; + } + } + +out: + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, (uint32_t)saddr,ret); + } + } else { + test_and_clear_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon); + } + return ret; +} + + +static int ssd_init_sensor(struct ssd_device *dev) +{ + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + goto out; + } + + ret = ssd_init_lm75(dev, SSD_SENSOR_LM75_SADDRESS); + if (ret) { + hio_warn("%s: init lm75 failed\n", dev->name); + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM75), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM75_SADDRESS,ret); + } + goto out; + } + + if (dev->hw_info.pcb_ver >= 'B' || dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_HHHL) { + ret = ssd_init_lm80(dev, SSD_SENSOR_LM80_SADDRESS); + if (ret) { + hio_warn("%s: init lm80 failed\n", dev->name); + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +/* board volt */ +static int ssd_mon_boardvolt(struct ssd_device *dev) +{ + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + return 0; + } + + return ssd_lm80_check_event(dev, SSD_SENSOR_LM80_SADDRESS); +} + +/* temperature */ +static int ssd_mon_temp(struct ssd_device *dev) +{ + int cur; + uint16_t val = 0; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + return 0; + } + + /* inlet */ + ret = ssd_lm80_read_temp(dev, SSD_SENSOR_LM80_SADDRESS, &val); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_TEMP_SENSOR_EVENT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + test_and_clear_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon); + + cur = SSD_SENSOR_CONVERT_TEMP(val); + if (cur >= SSD_INLET_OT_TEMP) { + if (!test_and_set_bit(SSD_HWMON_TEMP(SSD_TEMP_INLET), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_INLET_OVER_TEMP, (uint32_t)cur); + } + } else if(cur < SSD_INLET_OT_HYST) { + if (test_and_clear_bit(SSD_HWMON_TEMP(SSD_TEMP_INLET), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_INLET_NORMAL_TEMP, (uint32_t)cur); + } + } + + /* flash */ + ret = ssd_lm75_read(dev, SSD_SENSOR_LM75_SADDRESS, &val); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM75), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_TEMP_SENSOR_EVENT, SSD_SENSOR_LM75_SADDRESS,ret); + } + goto out; + } + test_and_clear_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM75), &dev->hwmon); + + cur = SSD_SENSOR_CONVERT_TEMP(val); + if (cur >= SSD_FLASH_OT_TEMP) { + if (!test_and_set_bit(SSD_HWMON_TEMP(SSD_TEMP_FLASH), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_FLASH_OVER_TEMP, (uint32_t)cur); + } + } else if(cur < SSD_FLASH_OT_HYST) { + if (test_and_clear_bit(SSD_HWMON_TEMP(SSD_TEMP_FLASH), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_FLASH_NORMAL_TEMP, (uint32_t)cur); + } + } + +out: + return ret; +} + +/* cmd tag */ +static inline void ssd_put_tag(struct ssd_device *dev, int tag) +{ + test_and_clear_bit(tag, dev->tag_map); + wake_up(&dev->tag_wq); +} + +static inline int ssd_get_tag(struct ssd_device *dev, int wait) +{ + int tag; + +find_tag: + while ((tag = find_first_zero_bit(dev->tag_map, dev->hw_info.cmd_fifo_sz)) >= atomic_read(&dev->queue_depth)) { + DEFINE_WAIT(__wait); + + if (!wait) { + return -1; + } + + prepare_to_wait_exclusive(&dev->tag_wq, &__wait, TASK_UNINTERRUPTIBLE); + schedule(); + + finish_wait(&dev->tag_wq, &__wait); + } + + if (test_and_set_bit(tag, dev->tag_map)) { + goto find_tag; + } + + return tag; +} + +static void ssd_barrier_put_tag(struct ssd_device *dev, int tag) +{ + test_and_clear_bit(tag, dev->tag_map); +} + +static int ssd_barrier_get_tag(struct ssd_device *dev) +{ + int tag = 0; + + if (test_and_set_bit(tag, dev->tag_map)) { + return -1; + } + + return tag; +} + +static void ssd_barrier_end(struct ssd_device *dev) +{ + atomic_set(&dev->queue_depth, dev->hw_info.cmd_fifo_sz); + wake_up_all(&dev->tag_wq); + + mutex_unlock(&dev->barrier_mutex); +} + +static int ssd_barrier_start(struct ssd_device *dev) +{ + int i; + + mutex_lock(&dev->barrier_mutex); + + atomic_set(&dev->queue_depth, 0); + + for (i=0; itag_map, dev->hw_info.cmd_fifo_sz) >= dev->hw_info.cmd_fifo_sz) { + return 0; + } + + __set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(1); + } + + atomic_set(&dev->queue_depth, dev->hw_info.cmd_fifo_sz); + wake_up_all(&dev->tag_wq); + + mutex_unlock(&dev->barrier_mutex); + + return -EBUSY; +} + +static int ssd_busy(struct ssd_device *dev) +{ + if (find_first_bit(dev->tag_map, dev->hw_info.cmd_fifo_sz) >= dev->hw_info.cmd_fifo_sz) { + return 0; + } + + return 1; +} + +static int ssd_wait_io(struct ssd_device *dev) +{ + int i; + + for (i=0; itag_map, dev->hw_info.cmd_fifo_sz) >= dev->hw_info.cmd_fifo_sz) { + return 0; + } + + __set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(1); + } + + return -EBUSY; +} + +#if 0 +static int ssd_in_barrier(struct ssd_device *dev) +{ + return (0 == atomic_read(&dev->queue_depth)); +} +#endif + +static void ssd_cleanup_tag(struct ssd_device *dev) +{ + kfree(dev->tag_map); +} + +static int ssd_init_tag(struct ssd_device *dev) +{ + int nr_ulongs = ALIGN(dev->hw_info.cmd_fifo_sz, BITS_PER_LONG) / BITS_PER_LONG; + + mutex_init(&dev->barrier_mutex); + + atomic_set(&dev->queue_depth, dev->hw_info.cmd_fifo_sz); + + dev->tag_map = kmalloc(nr_ulongs * sizeof(unsigned long), GFP_ATOMIC); + if (!dev->tag_map) { + return -ENOMEM; + } + + memset(dev->tag_map, 0, nr_ulongs * sizeof(unsigned long)); + + init_waitqueue_head(&dev->tag_wq); + + return 0; +} + +/* io stat */ +static void ssd_end_io_acct(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = cmd->dev; + struct bio *bio = cmd->bio; + unsigned long dur = jiffies - cmd->start_time; + int rw = bio_data_dir(bio); +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7)) +#else + unsigned long flag; +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + struct hd_struct *part = disk_map_sector_rcu(dev->gd, bio_start(bio)); + generic_end_io_acct(dev->rq, rw, part, cmd->start_time); +#elif ((LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7)) + int cpu = part_stat_lock(); + struct hd_struct *part = disk_map_sector_rcu(dev->gd, bio_start(bio)); + part_round_stats(cpu, part); + part_stat_add(cpu, part, ticks[rw], dur); + part_dec_in_flight(part, rw); + part_stat_unlock(); +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) + int cpu = part_stat_lock(); + struct hd_struct *part = &dev->gd->part0; + part_round_stats(cpu, part); + part_stat_add(cpu, part, ticks[rw], dur); + + spin_lock_irqsave(&dev->in_flight_lock,flag); + part->in_flight[rw]--; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + part_stat_unlock(); + +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,14)) + preempt_disable(); + disk_round_stats(dev->gd); + disk_stat_add(dev->gd, ticks[rw], dur); + + spin_lock_irqsave(&dev->in_flight_lock,flag); + dev->gd->in_flight--; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + preempt_enable(); + +#else + preempt_disable(); + disk_round_stats(dev->gd); + if (rw == WRITE) { + disk_stat_add(dev->gd, write_ticks, dur); + } else { + disk_stat_add(dev->gd, read_ticks, dur); + } + spin_lock_irqsave(&dev->in_flight_lock,flag); + dev->gd->in_flight--; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + preempt_enable(); + +#endif +} + +static void ssd_start_io_acct(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = cmd->dev; + struct bio *bio = cmd->bio; + int rw = bio_data_dir(bio); +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7)) +#else + unsigned long flag; +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + struct hd_struct *part = disk_map_sector_rcu(dev->gd, bio_start(bio)); + generic_start_io_acct(dev->rq, rw, bio_sectors(bio), part); +#elif ((LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7)) + int cpu = part_stat_lock(); + struct hd_struct *part = disk_map_sector_rcu(dev->gd, bio_start(bio)); + part_round_stats(cpu, part); + part_stat_inc(cpu, part, ios[rw]); + part_stat_add(cpu, part, sectors[rw], bio_sectors(bio)); + part_inc_in_flight(part, rw); + part_stat_unlock(); +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) + int cpu = part_stat_lock(); + struct hd_struct *part = &dev->gd->part0; + part_round_stats(cpu, part); + part_stat_inc(cpu, part, ios[rw]); + part_stat_add(cpu, part, sectors[rw], bio_sectors(bio)); + + spin_lock_irqsave(&dev->in_flight_lock,flag); + part->in_flight[rw]++; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + part_stat_unlock(); + +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,14)) + preempt_disable(); + disk_round_stats(dev->gd); + disk_stat_inc(dev->gd, ios[rw]); + disk_stat_add(dev->gd, sectors[rw], bio_sectors(bio)); + + spin_lock_irqsave(&dev->in_flight_lock,flag); + dev->gd->in_flight++; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + preempt_enable(); +#else + preempt_disable(); + disk_round_stats(dev->gd); + if (rw == WRITE) { + disk_stat_inc(dev->gd, writes); + disk_stat_add(dev->gd, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(dev->gd, reads); + disk_stat_add(dev->gd, read_sectors, bio_sectors(bio)); + } + + spin_lock_irqsave(&dev->in_flight_lock,flag); + dev->gd->in_flight++; + spin_unlock_irqrestore(&dev->in_flight_lock,flag); + + preempt_enable(); + +#endif + + cmd->start_time = jiffies; +} + +/* io */ +static void ssd_queue_bio(struct ssd_device *dev, struct bio *bio) +{ + spin_lock(&dev->sendq_lock); + ssd_blist_add(&dev->sendq, bio); + spin_unlock(&dev->sendq_lock); + + atomic_inc(&dev->in_sendq); + wake_up(&dev->send_waitq); +} + +static inline void ssd_end_request(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = cmd->dev; + struct bio *bio = cmd->bio; + int errors = cmd->errors; + int tag = cmd->tag; + + if (bio) { + if (!ssd_bio_has_discard(bio)) { + ssd_end_io_acct(cmd); + if (!cmd->flag) { + pci_unmap_sg(dev->pdev, cmd->sgl, cmd->nsegs, + bio_data_dir(bio) == READ ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); + } + } + + cmd->bio = NULL; + ssd_put_tag(dev, tag); + + if (SSD_INT_MSIX == dev->int_mode || tag < 16 || errors) { + ssd_bio_endio(bio, errors); + } else /* if (bio->bi_idx >= bio->bi_vcnt)*/ { + spin_lock(&dev->doneq_lock); + ssd_blist_add(&dev->doneq, bio); + spin_unlock(&dev->doneq_lock); + + atomic_inc(&dev->in_doneq); + wake_up(&dev->done_waitq); + } + } else { + if (cmd->waiting) { + complete(cmd->waiting); + } + } +} + +static void ssd_end_timeout_request(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = cmd->dev; + struct ssd_rw_msg *msg = (struct ssd_rw_msg *)cmd->msg; + int i; + + for (i=0; inr_queue; i++) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + disable_irq(dev->entry[i].vector); +#else + disable_irq(pci_irq_vector(dev->pdev, i)); +#endif + } + + atomic_inc(&dev->tocnt); + //if (cmd->bio) { + hio_err("%s: cmd timeout: tag %d fun %#x\n", dev->name, msg->tag, msg->fun); + cmd->errors = -ETIMEDOUT; + ssd_end_request(cmd); + //} + + for (i=0; inr_queue; i++) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + enable_irq(dev->entry[i].vector); +#else + enable_irq(pci_irq_vector(dev->pdev, i)); +#endif + } + + /* alarm led */ + ssd_set_alarm(dev); +} + +/* cmd timer */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) +static void ssd_cmd_add_timer(struct ssd_cmd *cmd, int timeout, void (*complt)(struct ssd_cmd *)) +#else +static void ssd_cmd_add_timer(struct ssd_cmd *cmd, int timeout, void (*complt)(struct timer_list *)) +#endif +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) + init_timer(&cmd->cmd_timer); + + cmd->cmd_timer.data = (unsigned long)cmd; + cmd->cmd_timer.function = (void (*)(unsigned long)) complt; +#else + timer_setup(&cmd->cmd_timer, complt, 0); +#endif + + cmd->cmd_timer.expires = jiffies + timeout; + add_timer(&cmd->cmd_timer); +} + +static int ssd_cmd_del_timer(struct ssd_cmd *cmd) +{ + return del_timer(&cmd->cmd_timer); +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) +static void ssd_add_timer(struct timer_list *timer, int timeout, void (*complt)(void *), void *data) +#else +static void ssd_add_timer(struct timer_list *timer, int timeout, void (*complt)(struct timer_list *), void *data) +#endif +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) + init_timer(timer); + + timer->data = (unsigned long)data; + timer->function = (void (*)(unsigned long)) complt; +#else + timer_setup(timer, complt, 0); +#endif + + timer->expires = jiffies + timeout; + add_timer(timer); +} + +static int ssd_del_timer(struct timer_list *timer) +{ + return del_timer(timer); +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) +static void ssd_cmd_timeout(struct ssd_cmd *cmd) +#else +static void ssd_cmd_timeout(struct timer_list *t) +#endif +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0)) + struct ssd_cmd *cmd = from_timer(cmd, t, cmd_timer); +#endif + struct ssd_device *dev = cmd->dev; + uint32_t msg = *(uint32_t *)cmd->msg; + + ssd_end_timeout_request(cmd); + + ssd_gen_swlog(dev, SSD_LOG_TIMEOUT, msg); +} + + +static void __ssd_done(unsigned long data) +{ + struct ssd_cmd *cmd; + LIST_HEAD(localq); + + local_irq_disable(); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)) + list_splice_init(&__get_cpu_var(ssd_doneq), &localq); +#else + list_splice_init(this_cpu_ptr(&ssd_doneq), &localq); +#endif + local_irq_enable(); + + while (!list_empty(&localq)) { + cmd = list_entry(localq.next, struct ssd_cmd, list); + list_del_init(&cmd->list); + + ssd_end_request(cmd); + } +} + +static void __ssd_done_db(unsigned long data) +{ + struct ssd_cmd *cmd; + struct ssd_device *dev; + struct bio *bio; + LIST_HEAD(localq); + + local_irq_disable(); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)) + list_splice_init(&__get_cpu_var(ssd_doneq), &localq); +#else + list_splice_init(this_cpu_ptr(&ssd_doneq), &localq); +#endif + local_irq_enable(); + + while (!list_empty(&localq)) { + cmd = list_entry(localq.next, struct ssd_cmd, list); + list_del_init(&cmd->list); + + dev = (struct ssd_device *)cmd->dev; + bio = cmd->bio; + + if (bio) { + sector_t off = dev->db_info.data.loc.off; + uint32_t len = dev->db_info.data.loc.len; + + switch (dev->db_info.type) { + case SSD_DEBUG_READ_ERR: + if (bio_data_dir(bio) == READ && + !((off + len) <= bio_start(bio) || off >= (bio_start(bio) + bio_sectors(bio)))) { + cmd->errors = -EIO; + } + break; + case SSD_DEBUG_WRITE_ERR: + if (bio_data_dir(bio) == WRITE && + !((off + len) <= bio_start(bio) || off >= (bio_start(bio) + bio_sectors(bio)))) { + cmd->errors = -EROFS; + } + break; + case SSD_DEBUG_RW_ERR: + if (!((off + len) <= bio_start(bio) || off >= (bio_start(bio) + bio_sectors(bio)))) { + if (bio_data_dir(bio) == READ) { + cmd->errors = -EIO; + } else { + cmd->errors = -EROFS; + } + } + break; + default: + break; + } + } + + ssd_end_request(cmd); + } +} + +static inline void ssd_done_bh(struct ssd_cmd *cmd) +{ + unsigned long flags = 0; + + if (unlikely(!ssd_cmd_del_timer(cmd))) { + struct ssd_device *dev = cmd->dev; + struct ssd_rw_msg *msg = (struct ssd_rw_msg *)cmd->msg; + hio_err("%s: unknown cmd: tag %d fun %#x\n", dev->name, msg->tag, msg->fun); + + /* alarm led */ + ssd_set_alarm(dev); + return; + } + + local_irq_save(flags); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)) + list_add_tail(&cmd->list, &__get_cpu_var(ssd_doneq)); + tasklet_hi_schedule(&__get_cpu_var(ssd_tasklet)); +#else + list_add_tail(&cmd->list, this_cpu_ptr(&ssd_doneq)); + tasklet_hi_schedule(this_cpu_ptr(&ssd_tasklet)); +#endif + local_irq_restore(flags); + + return; +} + +static inline void ssd_done(struct ssd_cmd *cmd) +{ + if (unlikely(!ssd_cmd_del_timer(cmd))) { + struct ssd_device *dev = cmd->dev; + struct ssd_rw_msg *msg = (struct ssd_rw_msg *)cmd->msg; + hio_err("%s: unknown cmd: tag %d fun %#x\n", dev->name, msg->tag, msg->fun); + + /* alarm led */ + ssd_set_alarm(dev); + return; + } + + ssd_end_request(cmd); + + return; +} + +static inline void ssd_dispatch_cmd(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = (struct ssd_device *)cmd->dev; + + ssd_cmd_add_timer(cmd, SSD_CMD_TIMEOUT, ssd_cmd_timeout); + + spin_lock(&dev->cmd_lock); + ssd_reg_write(dev->ctrlp + SSD_REQ_FIFO_REG, cmd->msg_dma); + spin_unlock(&dev->cmd_lock); +} + +static inline void ssd_send_cmd(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = (struct ssd_device *)cmd->dev; + + ssd_cmd_add_timer(cmd, SSD_CMD_TIMEOUT, ssd_cmd_timeout); + + ssd_reg32_write(dev->ctrlp + SSD_REQ_FIFO_REG, ((uint32_t)cmd->tag | ((uint32_t)cmd->nsegs << 16))); +} + +static inline void ssd_send_cmd_db(struct ssd_cmd *cmd) +{ + struct ssd_device *dev = (struct ssd_device *)cmd->dev; + struct bio *bio = cmd->bio; + + ssd_cmd_add_timer(cmd, SSD_CMD_TIMEOUT, ssd_cmd_timeout); + + if (bio) { + switch (dev->db_info.type) { + case SSD_DEBUG_READ_TO: + if (bio_data_dir(bio) == READ) { + return; + } + break; + case SSD_DEBUG_WRITE_TO: + if (bio_data_dir(bio) == WRITE) { + return; + } + break; + case SSD_DEBUG_RW_TO: + return; + break; + default: + break; + } + } + + ssd_reg32_write(dev->ctrlp + SSD_REQ_FIFO_REG, ((uint32_t)cmd->tag | ((uint32_t)cmd->nsegs << 16))); +} + + +/* fixed for BIOVEC_PHYS_MERGEABLE */ +#ifdef SSD_BIOVEC_PHYS_MERGEABLE_FIXED +#include +#include +#include + +static bool xen_biovec_phys_mergeable_fixed(const struct bio_vec *vec1, + const struct bio_vec *vec2) +{ + unsigned long mfn1 = pfn_to_mfn(page_to_pfn(vec1->bv_page)); + unsigned long mfn2 = pfn_to_mfn(page_to_pfn(vec2->bv_page)); + + return __BIOVEC_PHYS_MERGEABLE(vec1, vec2) && + ((mfn1 == mfn2) || ((mfn1+1) == mfn2)); +} + +#ifdef BIOVEC_PHYS_MERGEABLE +#undef BIOVEC_PHYS_MERGEABLE +#endif +#define BIOVEC_PHYS_MERGEABLE(vec1, vec2) \ + (__BIOVEC_PHYS_MERGEABLE(vec1, vec2) && \ + (!xen_domain() || xen_biovec_phys_mergeable_fixed(vec1, vec2))) + +#endif + +static inline int ssd_bio_map_sg(struct ssd_device *dev, struct bio *bio, struct scatterlist *sgl) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) + struct bio_vec *bvec, *bvprv = NULL; + struct scatterlist *sg = NULL; + int i = 0, nsegs = 0; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)) + sg_init_table(sgl, dev->hw_info.cmd_max_sg); +#endif + + /* + * for each segment in bio + */ + bio_for_each_segment(bvec, bio, i) { + if (bvprv && BIOVEC_PHYS_MERGEABLE(bvprv, bvec)) { + sg->length += bvec->bv_len; + } else { + if (unlikely(nsegs >= (int)dev->hw_info.cmd_max_sg)) { + break; + } + + sg = sg ? (sg + 1) : sgl; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) + sg_set_page(sg, bvec->bv_page, bvec->bv_len, bvec->bv_offset); +#else + sg->page = bvec->bv_page; + sg->length = bvec->bv_len; + sg->offset = bvec->bv_offset; +#endif + nsegs++; + } + bvprv = bvec; + } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) + if (sg) { + sg_mark_end(sg); + } +#endif + + bio->bi_idx = i; + + return nsegs; +#else + struct bio_vec bvec, bvprv; + struct bvec_iter iter; + struct scatterlist *sg = NULL; + int nsegs = 0; + int first = 1; + + sg_init_table(sgl, dev->hw_info.cmd_max_sg); + + /* + * for each segment in bio + */ + bio_for_each_segment(bvec, bio, iter) { + if (!first && BIOVEC_PHYS_MERGEABLE(&bvprv, &bvec)) { + sg->length += bvec.bv_len; + } else { + if (unlikely(nsegs >= (int)dev->hw_info.cmd_max_sg)) { + break; + } + + sg = sg ? (sg + 1) : sgl; + + sg_set_page(sg, bvec.bv_page, bvec.bv_len, bvec.bv_offset); + + nsegs++; + first = 0; + } + bvprv = bvec; + } + + if (sg) { + sg_mark_end(sg); + } + + return nsegs; +#endif +} + + +static int __ssd_submit_pbio(struct ssd_device *dev, struct bio *bio, int wait) +{ + struct ssd_cmd *cmd; + struct ssd_rw_msg *msg; + struct ssd_sg_entry *sge; + sector_t block = bio_start(bio); + int tag; + int i; + + tag = ssd_get_tag(dev, wait); + if (tag < 0) { + return -EBUSY; + } + + cmd = &dev->cmd[tag]; + cmd->bio = bio; + cmd->flag = 1; + + msg = (struct ssd_rw_msg *)cmd->msg; + + if (ssd_bio_has_discard(bio)) { + unsigned int length = bio_sectors(bio); + + //printk(KERN_WARNING "%s: discard len %u, block %llu\n", dev->name, bio_sectors(bio), block); + msg->tag = tag; + msg->fun = SSD_FUNC_TRIM; + + sge = msg->sge; + for (i=0; i<(dev->hw_info.cmd_max_sg); i++) { + sge->block = block; + sge->length = (length >= dev->hw_info.sg_max_sec) ? dev->hw_info.sg_max_sec : length; + sge->buf = 0; + + block += sge->length; + length -= sge->length; + sge++; + + if (length <= 0) { + ++i; + break; + } + } + msg->nsegs = cmd->nsegs = i; + + dev->scmd(cmd); + return 0; + } + + //msg->nsegs = cmd->nsegs = ssd_bio_map_sg(dev, bio, sgl); + msg->nsegs = cmd->nsegs = bio->bi_vcnt; + + //xx + if (bio_data_dir(bio) == READ) { + msg->fun = SSD_FUNC_READ; + msg->flag = 0; + } else { + msg->fun = SSD_FUNC_WRITE; + msg->flag = dev->wmode; + } + + sge = msg->sge; + for (i=0; ibi_vcnt; i++) { + sge->block = block; + sge->length = bio->bi_io_vec[i].bv_len >> 9; + sge->buf = (uint64_t)((void *)bio->bi_io_vec[i].bv_page + bio->bi_io_vec[i].bv_offset); + + block += sge->length; + sge++; + } + + msg->tag = tag; + +#ifdef SSD_OT_PROTECT + if (unlikely(dev->ot_delay > 0 && dev->ot_protect != 0)) { + msleep_interruptible(dev->ot_delay); + } +#endif + + ssd_start_io_acct(cmd); + dev->scmd(cmd); + + return 0; +} + +static inline int ssd_submit_bio(struct ssd_device *dev, struct bio *bio, int wait) +{ + struct ssd_cmd *cmd; + struct ssd_rw_msg *msg; + struct ssd_sg_entry *sge; + struct scatterlist *sgl; + sector_t block = bio_start(bio); + int tag; + int i; + + tag = ssd_get_tag(dev, wait); + if (tag < 0) { + return -EBUSY; + } + + cmd = &dev->cmd[tag]; + cmd->bio = bio; + cmd->flag = 0; + + msg = (struct ssd_rw_msg *)cmd->msg; + + sgl = cmd->sgl; + + if (ssd_bio_has_discard(bio)) { + unsigned int length = bio_sectors(bio); + + //printk(KERN_WARNING "%s: discard len %u, block %llu\n", dev->name, bio_sectors(bio), block); + msg->tag = tag; + msg->fun = SSD_FUNC_TRIM; + + sge = msg->sge; + for (i=0; i<(dev->hw_info.cmd_max_sg); i++) { + sge->block = block; + sge->length = (length >= dev->hw_info.sg_max_sec) ? dev->hw_info.sg_max_sec : length; + sge->buf = 0; + + block += sge->length; + length -= sge->length; + sge++; + + if (length <= 0) { + ++i; + break; + } + } + msg->nsegs = cmd->nsegs = i; + + dev->scmd(cmd); + return 0; + } + + msg->nsegs = cmd->nsegs = ssd_bio_map_sg(dev, bio, sgl); + + //xx + if (bio_data_dir(bio) == READ) { + msg->fun = SSD_FUNC_READ; + msg->flag = 0; + pci_map_sg(dev->pdev, sgl, cmd->nsegs, PCI_DMA_FROMDEVICE); + } else { + msg->fun = SSD_FUNC_WRITE; + msg->flag = dev->wmode; + pci_map_sg(dev->pdev, sgl, cmd->nsegs, PCI_DMA_TODEVICE); + } + + sge = msg->sge; + for (i=0; insegs; i++) { + sge->block = block; + sge->length = sg_dma_len(sgl) >> 9; + sge->buf = sg_dma_address(sgl); + + block += sge->length; + sgl++; + sge++; + } + + msg->tag = tag; + +#ifdef SSD_OT_PROTECT + if (unlikely(dev->ot_delay > 0 && dev->ot_protect != 0)) { + msleep_interruptible(dev->ot_delay); + } +#endif + + ssd_start_io_acct(cmd); + dev->scmd(cmd); + + return 0; +} + +/* threads */ +static int ssd_done_thread(void *data) +{ + struct ssd_device *dev; + struct bio *bio; + struct bio *next; + + if (!data) { + return -EINVAL; + } + dev = data; + + current->flags |= PF_NOFREEZE; + //set_user_nice(current, -5); + + while (!kthread_should_stop()) { + wait_event_interruptible(dev->done_waitq, (atomic_read(&dev->in_doneq) || kthread_should_stop())); + + while (atomic_read(&dev->in_doneq)) { + if (threaded_irq) { + spin_lock(&dev->doneq_lock); + bio = ssd_blist_get(&dev->doneq); + spin_unlock(&dev->doneq_lock); + } else { + spin_lock_irq(&dev->doneq_lock); + bio = ssd_blist_get(&dev->doneq); + spin_unlock_irq(&dev->doneq_lock); + } + + while (bio) { + next = bio->bi_next; + bio->bi_next = NULL; + ssd_bio_endio(bio, 0); + atomic_dec(&dev->in_doneq); + bio = next; + } + + cond_resched(); + +#ifdef SSD_ESCAPE_IRQ + if (unlikely(smp_processor_id() == dev->irq_cpu)) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) + cpumask_var_t new_mask; + if (alloc_cpumask_var(&new_mask, GFP_ATOMIC)) { + cpumask_setall(new_mask); + cpumask_clear_cpu(dev->irq_cpu, new_mask); + set_cpus_allowed_ptr(current, new_mask); + free_cpumask_var(new_mask); + } +#else + cpumask_t new_mask; + cpus_setall(new_mask); + cpu_clear(dev->irq_cpu, new_mask); + set_cpus_allowed(current, new_mask); +#endif + } +#endif + } + } + return 0; +} + +static int ssd_send_thread(void *data) +{ + struct ssd_device *dev; + struct bio *bio; + struct bio *next; + + if (!data) { + return -EINVAL; + } + dev = data; + + current->flags |= PF_NOFREEZE; + //set_user_nice(current, -5); + + while (!kthread_should_stop()) { + wait_event_interruptible(dev->send_waitq, (atomic_read(&dev->in_sendq) || kthread_should_stop())); + + while (atomic_read(&dev->in_sendq)) { + spin_lock(&dev->sendq_lock); + bio = ssd_blist_get(&dev->sendq); + spin_unlock(&dev->sendq_lock); + + while (bio) { + next = bio->bi_next; + bio->bi_next = NULL; +#ifdef SSD_QUEUE_PBIO + if (test_and_clear_bit(BIO_SSD_PBIO, &bio->bi_flags)) { + __ssd_submit_pbio(dev, bio, 1); + } else { + ssd_submit_bio(dev, bio, 1); + } +#else + ssd_submit_bio(dev, bio, 1); +#endif + atomic_dec(&dev->in_sendq); + bio = next; + } + + cond_resched(); + +#ifdef SSD_ESCAPE_IRQ + if (unlikely(smp_processor_id() == dev->irq_cpu)) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) + cpumask_var_t new_mask; + if (alloc_cpumask_var(&new_mask, GFP_ATOMIC)) { + cpumask_setall(new_mask); + cpumask_clear_cpu(dev->irq_cpu, new_mask); + set_cpus_allowed_ptr(current, new_mask); + free_cpumask_var(new_mask); + } +#else + cpumask_t new_mask; + cpus_setall(new_mask); + cpu_clear(dev->irq_cpu, new_mask); + set_cpus_allowed(current, new_mask); +#endif + } +#endif + } + } + + return 0; +} + +static void ssd_cleanup_thread(struct ssd_device *dev) +{ + kthread_stop(dev->send_thread); + kthread_stop(dev->done_thread); +} + +static int ssd_init_thread(struct ssd_device *dev) +{ + int ret; + + atomic_set(&dev->in_doneq, 0); + atomic_set(&dev->in_sendq, 0); + + spin_lock_init(&dev->doneq_lock); + spin_lock_init(&dev->sendq_lock); + + ssd_blist_init(&dev->doneq); + ssd_blist_init(&dev->sendq); + + init_waitqueue_head(&dev->done_waitq); + init_waitqueue_head(&dev->send_waitq); + + dev->done_thread = kthread_run(ssd_done_thread, dev, "%s/d", dev->name); + if (IS_ERR(dev->done_thread)) { + ret = PTR_ERR(dev->done_thread); + goto out_done_thread; + } + + dev->send_thread = kthread_run(ssd_send_thread, dev, "%s/s", dev->name); + if (IS_ERR(dev->send_thread)) { + ret = PTR_ERR(dev->send_thread); + goto out_send_thread; + } + + return 0; + +out_send_thread: + kthread_stop(dev->done_thread); +out_done_thread: + return ret; +} + +/* dcmd pool */ +static void ssd_put_dcmd(struct ssd_dcmd *dcmd) +{ + struct ssd_device *dev = (struct ssd_device *)dcmd->dev; + + spin_lock(&dev->dcmd_lock); + list_add_tail(&dcmd->list, &dev->dcmd_list); + spin_unlock(&dev->dcmd_lock); +} + +static struct ssd_dcmd *ssd_get_dcmd(struct ssd_device *dev) +{ + struct ssd_dcmd *dcmd = NULL; + + spin_lock(&dev->dcmd_lock); + if (!list_empty(&dev->dcmd_list)) { + dcmd = list_entry(dev->dcmd_list.next, + struct ssd_dcmd, list); + list_del_init(&dcmd->list); + } + spin_unlock(&dev->dcmd_lock); + + return dcmd; +} + +static void ssd_cleanup_dcmd(struct ssd_device *dev) +{ + kfree(dev->dcmd); +} + +static int ssd_init_dcmd(struct ssd_device *dev) +{ + struct ssd_dcmd *dcmd; + int dcmd_sz = sizeof(struct ssd_dcmd)*dev->hw_info.cmd_fifo_sz; + int i; + + spin_lock_init(&dev->dcmd_lock); + INIT_LIST_HEAD(&dev->dcmd_list); + init_waitqueue_head(&dev->dcmd_wq); + + dev->dcmd = kmalloc(dcmd_sz, GFP_KERNEL); + if (!dev->dcmd) { + hio_warn("%s: can not alloc dcmd\n", dev->name); + goto out_alloc_dcmd; + } + memset(dev->dcmd, 0, dcmd_sz); + + for (i=0, dcmd=dev->dcmd; i<(int)dev->hw_info.cmd_fifo_sz; i++, dcmd++) { + dcmd->dev = dev; + INIT_LIST_HEAD(&dcmd->list); + list_add_tail(&dcmd->list, &dev->dcmd_list); + } + + return 0; + +out_alloc_dcmd: + return -ENOMEM; +} + +static void ssd_put_dmsg(void *msg) +{ + struct ssd_dcmd *dcmd = container_of(msg, struct ssd_dcmd, msg); + struct ssd_device *dev = (struct ssd_device *)dcmd->dev; + + memset(dcmd->msg, 0, SSD_DCMD_MAX_SZ); + ssd_put_dcmd(dcmd); + wake_up(&dev->dcmd_wq); +} + +static void *ssd_get_dmsg(struct ssd_device *dev) +{ + struct ssd_dcmd *dcmd = ssd_get_dcmd(dev); + + while (!dcmd) { + DEFINE_WAIT(wait); + prepare_to_wait_exclusive(&dev->dcmd_wq, &wait, TASK_UNINTERRUPTIBLE); + schedule(); + + dcmd = ssd_get_dcmd(dev); + + finish_wait(&dev->dcmd_wq, &wait); + } + return dcmd->msg; +} + +/* do direct cmd */ +static int ssd_do_request(struct ssd_device *dev, int rw, void *msg, int *done) +{ + DECLARE_COMPLETION(wait); + struct ssd_cmd *cmd; + int tag; + int ret = 0; + + tag = ssd_get_tag(dev, 1); + if (tag < 0) { + return -EBUSY; + } + + cmd = &dev->cmd[tag]; + cmd->nsegs = 1; + memcpy(cmd->msg, msg, SSD_DCMD_MAX_SZ); + ((struct ssd_rw_msg *)cmd->msg)->tag = tag; + + cmd->waiting = &wait; + + dev->scmd(cmd); + + wait_for_completion(cmd->waiting); + cmd->waiting = NULL; + + if (cmd->errors == -ETIMEDOUT) { + ret = cmd->errors; + } else if (cmd->errors) { + ret = -EIO; + } + + if (done != NULL) { + *done = cmd->nr_log; + } + ssd_put_tag(dev, cmd->tag); + + return ret; +} + +static int ssd_do_barrier_request(struct ssd_device *dev, int rw, void *msg, int *done) +{ + DECLARE_COMPLETION(wait); + struct ssd_cmd *cmd; + int tag; + int ret = 0; + + tag = ssd_barrier_get_tag(dev); + if (tag < 0) { + return -EBUSY; + } + + cmd = &dev->cmd[tag]; + cmd->nsegs = 1; + memcpy(cmd->msg, msg, SSD_DCMD_MAX_SZ); + ((struct ssd_rw_msg *)cmd->msg)->tag = tag; + + cmd->waiting = &wait; + + dev->scmd(cmd); + + wait_for_completion(cmd->waiting); + cmd->waiting = NULL; + + if (cmd->errors == -ETIMEDOUT) { + ret = cmd->errors; + } else if (cmd->errors) { + ret = -EIO; + } + + if (done != NULL) { + *done = cmd->nr_log; + } + ssd_barrier_put_tag(dev, cmd->tag); + + return ret; +} + +#ifdef SSD_OT_PROTECT +static void ssd_check_temperature(struct ssd_device *dev, int temp) +{ + uint64_t val; + uint32_t off; + int cur; + int i; + + if (mode != SSD_DRV_MODE_STANDARD) { + return; + } + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + } + + for (i=0; ihw_info.nr_ctrl; i++) { + off = SSD_CTRL_TEMP_REG0 + i * sizeof(uint64_t); + + val = ssd_reg_read(dev->ctrlp + off); + if (val == 0xffffffffffffffffull) { + continue; + } + + cur = (int)CUR_TEMP(val); + if (cur >= temp) { + if (!test_and_set_bit(SSD_HWMON_TEMP(SSD_TEMP_CTRL), &dev->hwmon)) { + if (dev->protocol_info.ver > SSD_PROTOCOL_V3 && dev->protocol_info.ver < SSD_PROTOCOL_V3_2_2) { + hio_warn("%s: Over temperature, please check the fans.\n", dev->name); + dev->ot_delay = SSD_OT_DELAY; + } + } + return; + } + } + + if (test_and_clear_bit(SSD_HWMON_TEMP(SSD_TEMP_CTRL), &dev->hwmon)) { + if (dev->protocol_info.ver > SSD_PROTOCOL_V3 && dev->protocol_info.ver < SSD_PROTOCOL_V3_2_2) { + hio_warn("%s: Temperature is OK.\n", dev->name); + dev->ot_delay = 0; + } + } +} +#endif + +static int ssd_get_ot_status(struct ssd_device *dev, int *status) +{ + uint32_t off; + uint32_t val; + int i; + + if (!dev || !status) { + return -EINVAL; + } + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2_2) { + for (i=0; ihw_info.nr_ctrl; i++) { + off = SSD_READ_OT_REG0 + (i * SSD_CTRL_REG_ZONE_SZ); + val = ssd_reg32_read(dev->ctrlp + off); + if ((val >> 22) & 0x1) { + *status = 1; + goto out; + } + + + off = SSD_WRITE_OT_REG0 + (i * SSD_CTRL_REG_ZONE_SZ); + val = ssd_reg32_read(dev->ctrlp + off); + if ((val >> 22) & 0x1) { + *status = 1; + goto out; + } + } + } else { + *status = !!dev->ot_delay; + } + +out: + return 0; +} + +static void ssd_set_ot_protect(struct ssd_device *dev, int protect) +{ + uint32_t off; + uint32_t val; + int i; + + mutex_lock(&dev->fw_mutex); + + dev->ot_protect = !!protect; + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2_2) { + for (i=0; ihw_info.nr_ctrl; i++) { + off = SSD_READ_OT_REG0 + (i * SSD_CTRL_REG_ZONE_SZ); + val = ssd_reg32_read(dev->ctrlp + off); + if (dev->ot_protect) { + val |= (1U << 21); + } else { + val &= ~(1U << 21); + } + ssd_reg32_write(dev->ctrlp + off, val); + + + off = SSD_WRITE_OT_REG0 + (i * SSD_CTRL_REG_ZONE_SZ); + val = ssd_reg32_read(dev->ctrlp + off); + if (dev->ot_protect) { + val |= (1U << 21); + } else { + val &= ~(1U << 21); + } + ssd_reg32_write(dev->ctrlp + off, val); + } + } + + mutex_unlock(&dev->fw_mutex); +} + +static int ssd_init_ot_protect(struct ssd_device *dev) +{ + ssd_set_ot_protect(dev, ot_protect); + +#ifdef SSD_OT_PROTECT + ssd_check_temperature(dev, SSD_OT_TEMP); +#endif + + return 0; +} + +/* log */ +static int ssd_read_log(struct ssd_device *dev, int ctrl_idx, void *buf, int *nr_log) +{ + struct ssd_log_op_msg *msg; + struct ssd_log_msg *lmsg; + dma_addr_t buf_dma; + size_t length = dev->hw_info.log_sz; + int ret = 0; + + if (ctrl_idx >= dev->hw_info.nr_ctrl) { + return -EINVAL; + } + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map read DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + msg = (struct ssd_log_op_msg *)ssd_get_dmsg(dev); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + lmsg = (struct ssd_log_msg *)msg; + lmsg->fun = SSD_FUNC_READ_LOG; + lmsg->ctrl_idx = ctrl_idx; + lmsg->buf = buf_dma; + } else { + msg->fun = SSD_FUNC_READ_LOG; + msg->ctrl_idx = ctrl_idx; + msg->buf = buf_dma; + } + + ret = ssd_do_request(dev, READ, msg, nr_log); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_FROMDEVICE); + +out_dma_mapping: + return ret; +} + +#define SSD_LOG_PRINT_BUF_SZ 256 +static int ssd_parse_log(struct ssd_device *dev, struct ssd_log *log, int print) +{ + struct ssd_log_desc *log_desc = ssd_log_desc; + struct ssd_log_entry *le; + char *sn = NULL; + char print_buf[SSD_LOG_PRINT_BUF_SZ]; + int print_len; + + le = &log->le; + + /* find desc */ + while (log_desc->event != SSD_UNKNOWN_EVENT) { + if (log_desc->event == le->event) { + break; + } + log_desc++; + } + + if (!print) { + goto out; + } + + if (log_desc->level < log_level) { + goto out; + } + + /* parse */ + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + sn = dev->label.sn; + } else { + sn = dev->labelv3.barcode; + } + + print_len = snprintf(print_buf, SSD_LOG_PRINT_BUF_SZ, "%s (%s): <%#x>", dev->name, sn, le->event); + + if (log->ctrl_idx != SSD_LOG_SW_IDX) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " controller %d", log->ctrl_idx); + } + + switch (log_desc->data) { + case SSD_LOG_DATA_NONE: + break; + case SSD_LOG_DATA_LOC: + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " flash %d", le->data.loc.flash); + if (log_desc->sblock) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " block %d", le->data.loc.block); + } + if (log_desc->spage) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " page %d", le->data.loc.page); + } + } else { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " flash %d", le->data.loc1.flash); + if (log_desc->sblock) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " block %d", le->data.loc1.block); + } + if (log_desc->spage) { + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " page %d", le->data.loc1.page); + } + } + break; + case SSD_LOG_DATA_HEX: + print_len += snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), " info %#x", le->data.val); + break; + default: + break; + } + /*print_len += */snprintf((print_buf + print_len), (SSD_LOG_PRINT_BUF_SZ - print_len), ": %s", log_desc->desc); + + switch (log_desc->level) { + case SSD_LOG_LEVEL_INFO: + hio_info("%s\n", print_buf); + break; + case SSD_LOG_LEVEL_NOTICE: + hio_note("%s\n", print_buf); + break; + case SSD_LOG_LEVEL_WARNING: + hio_warn("%s\n", print_buf); + break; + case SSD_LOG_LEVEL_ERR: + hio_err("%s\n", print_buf); + //printk(KERN_ERR MODULE_NAME": some exception occurred, please check the data or refer to FAQ."); + break; + default: + hio_warn("%s\n", print_buf); + break; + } + +out: + return log_desc->level; +} + +static int ssd_bm_get_sfstatus(struct ssd_device *dev, uint16_t *status); +static int ssd_switch_wmode(struct ssd_device *dev, int wmode); + + +static int ssd_handle_event(struct ssd_device *dev, uint16_t event, int level) +{ + int ret = 0; + + switch (event) { + case SSD_LOG_OVER_TEMP: { +#ifdef SSD_OT_PROTECT + if (!test_and_set_bit(SSD_HWMON_TEMP(SSD_TEMP_CTRL), &dev->hwmon)) { + if (dev->protocol_info.ver > SSD_PROTOCOL_V3 && dev->protocol_info.ver < SSD_PROTOCOL_V3_2_2) { + hio_warn("%s: Over temperature, please check the fans.\n", dev->name); + dev->ot_delay = SSD_OT_DELAY; + } + } +#endif + break; + } + + case SSD_LOG_NORMAL_TEMP: { +#ifdef SSD_OT_PROTECT + /* need to check all controller's temperature */ + ssd_check_temperature(dev, SSD_OT_TEMP_HYST); +#endif + break; + } + + case SSD_LOG_BATTERY_FAULT: { + uint16_t sfstatus; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + if (!ssd_bm_get_sfstatus(dev, &sfstatus)) { + ssd_gen_swlog(dev, SSD_LOG_BM_SFSTATUS, sfstatus); + } + } + + if (!test_and_set_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ssd_switch_wmode(dev, dev->user_wmode); + } + break; + } + + case SSD_LOG_BATTERY_OK: { + if (test_and_clear_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ssd_switch_wmode(dev, dev->user_wmode); + } + break; + } + + case SSD_LOG_BOARD_VOLT_FAULT: { + ssd_mon_boardvolt(dev); + break; + } + + case SSD_LOG_CLEAR_LOG: { + /* update smart */ + memset(&dev->smart.log_info, 0, sizeof(struct ssd_log_info)); + break; + } + + case SSD_LOG_CAP_VOLT_FAULT: + case SSD_LOG_CAP_LEARN_FAULT: + case SSD_LOG_CAP_SHORT_CIRCUIT: { + if (!test_and_set_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ssd_switch_wmode(dev, dev->user_wmode); + } + break; + } + + default: + break; + } + + /* ssd event call */ + if (dev->event_call) { + dev->event_call(dev->gd, event, level); + + /* FIXME */ + if (SSD_LOG_CAP_VOLT_FAULT == event || SSD_LOG_CAP_LEARN_FAULT == event || SSD_LOG_CAP_SHORT_CIRCUIT == event) { + dev->event_call(dev->gd, SSD_LOG_BATTERY_FAULT, level); + } + } + + return ret; +} + +static int ssd_save_log(struct ssd_device *dev, struct ssd_log *log) +{ + uint32_t off, size; + void *internal_log; + int ret = 0; + + mutex_lock(&dev->internal_log_mutex); + + size = sizeof(struct ssd_log); + off = dev->internal_log.nr_log * size; + + if (off == dev->rom_info.log_sz) { + if (dev->internal_log.nr_log == dev->smart.log_info.nr_log) { + hio_warn("%s: internal log is full\n", dev->name); + } + goto out; + } + + internal_log = dev->internal_log.log + off; + memcpy(internal_log, log, size); + + if (dev->protocol_info.ver > SSD_PROTOCOL_V3) { + off += dev->rom_info.log_base; + + ret = ssd_spi_write(dev, log, off, size); + if (ret) { + goto out; + } + } + + dev->internal_log.nr_log++; + +out: + mutex_unlock(&dev->internal_log_mutex); + return ret; +} + +/** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */ +static unsigned short const crc16_table[256] = { + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 +}; + +static unsigned short crc16_byte(unsigned short crc, const unsigned char data) +{ + return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff]; +} +/** + * crc16 - compute the CRC-16 for the data buffer + * @crc: previous CRC value + * @buffer: data pointer + * @len: number of bytes in the buffer + * + * Returns the updated CRC value. + */ +static unsigned short crc16(unsigned short crc, unsigned char const *buffer, int len) +{ + while (len--) + crc = crc16_byte(crc, *buffer++); + return crc; +} + +static int ssd_save_swlog(struct ssd_device *dev, uint16_t event, uint32_t data) +{ + struct ssd_log log; + struct timeval tv; + int level; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + memset(&log, 0, sizeof(struct ssd_log)); + + do_gettimeofday(&tv); + log.ctrl_idx = SSD_LOG_SW_IDX; + log.time = tv.tv_sec; + log.le.event = event; + log.le.data.val = data; + + log.le.mod = SSD_DIF_WITH_OLD_LOG; + log.le.idx = crc16(0,(const unsigned char *)&log,14); + level = ssd_parse_log(dev, &log, 0); + if (level >= SSD_LOG_LEVEL) { + ret = ssd_save_log(dev, &log); + } + + /* set alarm */ + if (SSD_LOG_LEVEL_ERR == level) { + ssd_set_alarm(dev); + } + + /* update smart */ + dev->smart.log_info.nr_log++; + dev->smart.log_info.stat[level]++; + + /* handle event */ + ssd_handle_event(dev, event, level); + + return ret; +} + +static int ssd_gen_swlog(struct ssd_device *dev, uint16_t event, uint32_t data) +{ + struct ssd_log_entry le; + int ret; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + /* slave port ? */ + if (dev->slave) { + return 0; + } + + memset(&le, 0, sizeof(struct ssd_log_entry)); + le.event = event; + le.data.val = data; + + ret = sfifo_put(&dev->log_fifo, &le); + if (ret) { + return ret; + } + + if (test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->log_work); + } + + return 0; +} + +static int ssd_do_swlog(struct ssd_device *dev) +{ + struct ssd_log_entry le; + int ret = 0; + + memset(&le, 0, sizeof(struct ssd_log_entry)); + while (!sfifo_get(&dev->log_fifo, &le)) { + ret = ssd_save_swlog(dev, le.event, le.data.val); + if (ret) { + break; + } + } + + return ret; +} + +static int __ssd_clear_log(struct ssd_device *dev) +{ + uint32_t off, length; + int ret; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + if (dev->internal_log.nr_log == 0) { + return 0; + } + + mutex_lock(&dev->internal_log_mutex); + + off = dev->rom_info.log_base; + length = dev->rom_info.log_sz; + + ret = ssd_spi_erase(dev, off, length); + if (ret) { + hio_warn("%s: log erase: failed\n", dev->name); + goto out; + } + + dev->internal_log.nr_log = 0; + +out: + mutex_unlock(&dev->internal_log_mutex); + return ret; +} + +static int ssd_clear_log(struct ssd_device *dev) +{ + int ret; + + ret = __ssd_clear_log(dev); + if(!ret) { + ssd_gen_swlog(dev, SSD_LOG_CLEAR_LOG, 0); + } + + return ret; +} + +static int ssd_do_log(struct ssd_device *dev, int ctrl_idx, void *buf) +{ + struct ssd_log_entry *le; + struct ssd_log log; + struct timeval tv; + int nr_log = 0; + int level; + int ret = 0; + + ret = ssd_read_log(dev, ctrl_idx, buf, &nr_log); + if (ret) { + return ret; + } + + do_gettimeofday(&tv); + + log.time = tv.tv_sec; + log.ctrl_idx = ctrl_idx; + + le = (ssd_log_entry_t *)buf; + while (nr_log > 0) { + memcpy(&log.le, le, sizeof(struct ssd_log_entry)); + + log.le.mod = SSD_DIF_WITH_OLD_LOG; + log.le.idx = crc16(0,(const unsigned char *)&log,14); + level = ssd_parse_log(dev, &log, 1); + if (level >= SSD_LOG_LEVEL) { + ssd_save_log(dev, &log); + } + + /* set alarm */ + if (SSD_LOG_LEVEL_ERR == level) { + ssd_set_alarm(dev); + } + + dev->smart.log_info.nr_log++; + if (SSD_LOG_SEU_FAULT != le->event && SSD_LOG_SEU_FAULT1 != le->event) { + dev->smart.log_info.stat[level]++; + } else { + /* SEU fault */ + + /* log to the volatile log info */ + dev->log_info.nr_log++; + dev->log_info.stat[level]++; + + /* do something */ + dev->reload_fw = 1; + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FLAG); + if (le->event != SSD_LOG_SEU_FAULT1) { + dev->has_non_0x98_reg_access = 1; + } + + /*dev->readonly = 1; + set_disk_ro(dev->gd, 1); + hio_warn("%s: switched to read-only mode.\n", dev->name);*/ + } + + /* handle event */ + ssd_handle_event(dev, le->event, level); + + le++; + nr_log--; + } + + return 0; +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static void ssd_log_worker(void *data) +{ + struct ssd_device *dev = (struct ssd_device *)data; +#else +static void ssd_log_worker(struct work_struct *work) +{ + struct ssd_device *dev = container_of(work, struct ssd_device, log_work); +#endif + int i; + int ret; + + if (!test_bit(SSD_LOG_ERR, &dev->state) && test_bit(SSD_ONLINE, &dev->state)) { + /* alloc log buf */ + if (!dev->log_buf) { + dev->log_buf = kmalloc(dev->hw_info.log_sz, GFP_KERNEL); + if (!dev->log_buf) { + hio_warn("%s: ssd_log_worker: no mem\n", dev->name); + return; + } + } + + /* get log */ + if (test_and_clear_bit(SSD_LOG_HW, &dev->state)) { + for (i=0; ihw_info.nr_ctrl; i++) { + ret = ssd_do_log(dev, i, dev->log_buf); + if (ret) { + (void)test_and_set_bit(SSD_LOG_ERR, &dev->state); + hio_warn("%s: do log fail\n", dev->name); + } + } + } + } + + ret = ssd_do_swlog(dev); + if (ret) { + hio_warn("%s: do swlog fail\n", dev->name); + } +} + +static void ssd_cleanup_log(struct ssd_device *dev) +{ + if (dev->log_buf) { + kfree(dev->log_buf); + dev->log_buf = NULL; + } + + sfifo_free(&dev->log_fifo); + + if (dev->internal_log.log) { + vfree(dev->internal_log.log); + dev->internal_log.nr_log = 0; + dev->internal_log.log = NULL; + } +} + +static int ssd_init_log(struct ssd_device *dev) +{ + struct ssd_log *log; + uint32_t off, size; + uint32_t len = 0; + int ret = 0; + + mutex_init(&dev->internal_log_mutex); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + INIT_WORK(&dev->log_work, ssd_log_worker, dev); +#else + INIT_WORK(&dev->log_work, ssd_log_worker); +#endif + + off = dev->rom_info.log_base; + size = dev->rom_info.log_sz; + + dev->internal_log.nr_log = 0; + dev->internal_log.log = vmalloc(size); + if (!dev->internal_log.log) { + ret = -ENOMEM; + goto out_alloc_log; + } + + ret = sfifo_alloc(&dev->log_fifo, SSD_LOG_FIFO_SZ, sizeof(struct ssd_log_entry)); + if (ret < 0) { + goto out_alloc_log_fifo; + } + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + log = (struct ssd_log *)dev->internal_log.log; + while (len < size) { + ret = ssd_spi_read(dev, log, off, sizeof(struct ssd_log)); + if (ret) { + goto out_read_log; + } + + if (log->ctrl_idx == 0xff) { + break; + } + + if (log->le.event == SSD_LOG_POWER_ON) { + if (dev->internal_log.nr_log > dev->last_poweron_id) { + dev->last_poweron_id = dev->internal_log.nr_log; + } + } + + dev->internal_log.nr_log++; + log++; + len += sizeof(struct ssd_log); + off += sizeof(struct ssd_log); + } + + return 0; + +out_read_log: + sfifo_free(&dev->log_fifo); +out_alloc_log_fifo: + vfree(dev->internal_log.log); + dev->internal_log.log = NULL; + dev->internal_log.nr_log = 0; +out_alloc_log: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +/* work queue */ +static void ssd_stop_workq(struct ssd_device *dev) +{ + test_and_clear_bit(SSD_INIT_WORKQ, &dev->state); + flush_workqueue(dev->workq); +} + +static void ssd_start_workq(struct ssd_device *dev) +{ + (void)test_and_set_bit(SSD_INIT_WORKQ, &dev->state); + + /* log ? */ + queue_work(dev->workq, &dev->log_work); +} + +static void ssd_cleanup_workq(struct ssd_device *dev) +{ + flush_workqueue(dev->workq); + destroy_workqueue(dev->workq); + dev->workq = NULL; +} + +static int ssd_init_workq(struct ssd_device *dev) +{ + int ret = 0; + + dev->workq = create_singlethread_workqueue(dev->name); + if (!dev->workq) { + ret = -ESRCH; + goto out; + } + +out: + return ret; +} + +/* rom */ +static int ssd_init_rom_info(struct ssd_device *dev) +{ + uint32_t val; + + mutex_init(&dev->spi_mutex); + mutex_init(&dev->i2c_mutex); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + /* fix bug: read data to clear status */ + (void)ssd_reg32_read(dev->ctrlp + SSD_SPI_REG_RDATA); + + dev->rom_info.size = SSD_ROM_SIZE; + dev->rom_info.block_size = SSD_ROM_BLK_SIZE; + dev->rom_info.page_size = SSD_ROM_PAGE_SIZE; + + dev->rom_info.bridge_fw_base = SSD_ROM_BRIDGE_FW_BASE; + dev->rom_info.bridge_fw_sz = SSD_ROM_BRIDGE_FW_SIZE; + dev->rom_info.nr_bridge_fw = SSD_ROM_NR_BRIDGE_FW; + + dev->rom_info.ctrl_fw_base = SSD_ROM_CTRL_FW_BASE; + dev->rom_info.ctrl_fw_sz = SSD_ROM_CTRL_FW_SIZE; + dev->rom_info.nr_ctrl_fw = SSD_ROM_NR_CTRL_FW; + + dev->rom_info.log_sz = SSD_ROM_LOG_SZ; + + dev->rom_info.vp_base = SSD_ROM_VP_BASE; + dev->rom_info.label_base = SSD_ROM_LABEL_BASE; + } else if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_INFO_REG); + dev->rom_info.size = 0x100000 * (1U << (val & 0xFF)); + dev->rom_info.block_size = 0x10000 * (1U << ((val>>8) & 0xFF)); + dev->rom_info.page_size = (val>>16) & 0xFFFF; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_BRIDGE_FW_INFO_REG); + dev->rom_info.bridge_fw_base = dev->rom_info.block_size * (val & 0xFFFF); + dev->rom_info.bridge_fw_sz = dev->rom_info.block_size * ((val>>16) & 0x3FFF); + dev->rom_info.nr_bridge_fw = ((val >> 30) & 0x3) + 1; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_CTRL_FW_INFO_REG); + dev->rom_info.ctrl_fw_base = dev->rom_info.block_size * (val & 0xFFFF); + dev->rom_info.ctrl_fw_sz = dev->rom_info.block_size * ((val>>16) & 0x3FFF); + dev->rom_info.nr_ctrl_fw = ((val >> 30) & 0x3) + 1; + + dev->rom_info.bm_fw_base = dev->rom_info.ctrl_fw_base + (dev->rom_info.nr_ctrl_fw * dev->rom_info.ctrl_fw_sz); + dev->rom_info.bm_fw_sz = SSD_PV3_ROM_BM_FW_SZ; + dev->rom_info.nr_bm_fw = SSD_PV3_ROM_NR_BM_FW; + + dev->rom_info.log_base = dev->rom_info.bm_fw_base + (dev->rom_info.nr_bm_fw * dev->rom_info.bm_fw_sz); + dev->rom_info.log_sz = SSD_ROM_LOG_SZ; + + dev->rom_info.smart_base = dev->rom_info.log_base + dev->rom_info.log_sz; + dev->rom_info.smart_sz = SSD_PV3_ROM_SMART_SZ; + dev->rom_info.nr_smart = SSD_PV3_ROM_NR_SMART; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_VP_INFO_REG); + dev->rom_info.vp_base = dev->rom_info.block_size * val; + dev->rom_info.label_base = dev->rom_info.vp_base + dev->rom_info.block_size; + if (dev->rom_info.label_base >= dev->rom_info.size) { + dev->rom_info.label_base = dev->rom_info.vp_base - dev->rom_info.block_size; + } + } else { + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_INFO_REG); + dev->rom_info.size = 0x100000 * (1U << (val & 0xFF)); + dev->rom_info.block_size = 0x10000 * (1U << ((val>>8) & 0xFF)); + dev->rom_info.page_size = (val>>16) & 0xFFFF; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_BRIDGE_FW_INFO_REG); + dev->rom_info.bridge_fw_base = dev->rom_info.block_size * (val & 0xFFFF); + dev->rom_info.bridge_fw_sz = dev->rom_info.block_size * ((val>>16) & 0x3FFF); + dev->rom_info.nr_bridge_fw = ((val >> 30) & 0x3) + 1; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_CTRL_FW_INFO_REG); + dev->rom_info.ctrl_fw_base = dev->rom_info.block_size * (val & 0xFFFF); + dev->rom_info.ctrl_fw_sz = dev->rom_info.block_size * ((val>>16) & 0x3FFF); + dev->rom_info.nr_ctrl_fw = ((val >> 30) & 0x3) + 1; + + val = ssd_reg32_read(dev->ctrlp + SSD_ROM_VP_INFO_REG); + dev->rom_info.vp_base = dev->rom_info.block_size * val; + dev->rom_info.label_base = dev->rom_info.vp_base - SSD_PV3_2_ROM_SEC_SZ; + + dev->rom_info.nr_smart = SSD_PV3_ROM_NR_SMART; + dev->rom_info.smart_sz = SSD_PV3_2_ROM_SEC_SZ; + dev->rom_info.smart_base = dev->rom_info.label_base - (dev->rom_info.smart_sz * dev->rom_info.nr_smart); + if (dev->rom_info.smart_sz > dev->rom_info.block_size) { + dev->rom_info.smart_sz = dev->rom_info.block_size; + } + + dev->rom_info.log_sz = SSD_PV3_2_ROM_LOG_SZ; + dev->rom_info.log_base = dev->rom_info.smart_base - dev->rom_info.log_sz; + } + + return ssd_init_spi(dev); +} + +/* smart */ +static int ssd_update_smart(struct ssd_device *dev, struct ssd_smart *smart) +{ + struct timeval tv; + uint64_t run_time; +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) + struct hd_struct *part; + int cpu; +#endif + int i, j; + int ret = 0; + + if (!test_bit(SSD_INIT_BD, &dev->state)) { + return 0; + } + + do_gettimeofday(&tv); + if ((uint64_t)tv.tv_sec < dev->uptime) { + run_time = 0; + } else { + run_time = tv.tv_sec - dev->uptime; + } + + /* avoid frequently update */ + if (run_time >= 60) { + ret = 1; + } + + /* io stat */ + smart->io_stat.run_time += run_time; + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) + cpu = part_stat_lock(); + part = &dev->gd->part0; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) + part_round_stats(dev->rq, cpu, part); +#else + part_round_stats(cpu, part); +#endif + part_stat_unlock(); + + smart->io_stat.nr_read += part_stat_read(part, ios[READ]); + smart->io_stat.nr_write += part_stat_read(part, ios[WRITE]); + smart->io_stat.rsectors += part_stat_read(part, sectors[READ]); + smart->io_stat.wsectors += part_stat_read(part, sectors[WRITE]); +#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,14)) + preempt_disable(); + disk_round_stats(dev->gd); + preempt_enable(); + + smart->io_stat.nr_read += disk_stat_read(dev->gd, ios[READ]); + smart->io_stat.nr_write += disk_stat_read(dev->gd, ios[WRITE]); + smart->io_stat.rsectors += disk_stat_read(dev->gd, sectors[READ]); + smart->io_stat.wsectors += disk_stat_read(dev->gd, sectors[WRITE]); +#else + preempt_disable(); + disk_round_stats(dev->gd); + preempt_enable(); + + smart->io_stat.nr_read += disk_stat_read(dev->gd, reads); + smart->io_stat.nr_write += disk_stat_read(dev->gd, writes); + smart->io_stat.rsectors += disk_stat_read(dev->gd, read_sectors); + smart->io_stat.wsectors += disk_stat_read(dev->gd, write_sectors); +#endif + + smart->io_stat.nr_to += atomic_read(&dev->tocnt); + + for (i=0; inr_queue; i++) { + smart->io_stat.nr_rwerr += dev->queue[i].io_stat.nr_rwerr; + smart->io_stat.nr_ioerr += dev->queue[i].io_stat.nr_ioerr; + } + + for (i=0; inr_queue; i++) { + for (j=0; jecc_info.bitflip[j] += dev->queue[i].ecc_info.bitflip[j]; + } + } + + //dev->uptime = tv.tv_sec; + + return ret; +} + +static int __ssd_clear_smart(struct ssd_device *dev) +{ + struct timeval tv; + uint64_t sversion; + uint32_t off, length; + int i; + int ret; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + /* clear smart */ + off = dev->rom_info.smart_base; + length = dev->rom_info.smart_sz * dev->rom_info.nr_smart; + + ret = ssd_spi_erase(dev, off, length); + if (ret) { + hio_warn("%s: info erase: failed\n", dev->name); + goto out; + } + + sversion = dev->smart.version; + + memset(&dev->smart, 0, sizeof(struct ssd_smart)); + dev->smart.version = sversion + 1; + dev->smart.magic = SSD_SMART_MAGIC; + + /* clear all tmp acc */ + for (i=0; inr_queue; i++) { + memset(&(dev->queue[i].io_stat), 0, sizeof(struct ssd_io_stat)); + memset(&(dev->queue[i].ecc_info), 0, sizeof(struct ssd_ecc_info)); + } + + atomic_set(&dev->tocnt, 0); + + /* clear tmp log info */ + memset(&dev->log_info, 0, sizeof(struct ssd_log_info)); + + do_gettimeofday(&tv); + dev->uptime = tv.tv_sec; + + /* clear alarm ? */ + //ssd_clear_alarm(dev); +out: + return ret; +} + +static int __ssd_clear_warning(struct ssd_device *dev) +{ + uint32_t off, size; + int i, ret = 0; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + /* clear log_info warning */ + memset(&dev->smart.log_info, 0, sizeof(dev->smart.log_info)); + + /* clear io_stat warning */ + dev->smart.io_stat.nr_to = 0; + dev->smart.io_stat.nr_rwerr = 0; + dev->smart.io_stat.nr_ioerr = 0; + + /* clear ecc_info warning */ + memset(&dev->smart.ecc_info, 0, sizeof(dev->smart.ecc_info)); + + /* clear queued warnings */ + for (i=0; inr_queue; i++) { + /* queued io_stat warning */ + dev->queue[i].io_stat.nr_to = 0; + dev->queue[i].io_stat.nr_rwerr = 0; + dev->queue[i].io_stat.nr_ioerr = 0; + + /* queued ecc_info warning */ + memset(&(dev->queue[i].ecc_info), 0, sizeof(dev->queue[i].ecc_info)); + } + + /* write smart back to nor */ + for (i = 0; i < dev->rom_info.nr_smart; i++) { + off = dev->rom_info.smart_base + (dev->rom_info.smart_sz * i); + size = dev->rom_info.smart_sz; + + ret = ssd_spi_erase(dev, off, size); + if (ret) { + hio_warn("%s: warning erase: failed with code 1\n", dev->name); + goto out; + } + + size = sizeof(struct ssd_smart); + + ret = ssd_spi_write(dev, &dev->smart, off, size); + if (ret) { + hio_warn("%s: warning erase: failed with code 2\n", dev->name); + goto out; + } + } + + dev->smart.version++; + + /* clear cmd timeout warning */ + atomic_set(&dev->tocnt, 0); + + /* clear tmp log info */ + memset(&dev->log_info, 0, sizeof(dev->log_info)); + +out: + return ret; +} + +static int ssd_clear_smart(struct ssd_device *dev) +{ + int ret; + + ret = __ssd_clear_smart(dev); + if(!ret) { + ssd_gen_swlog(dev, SSD_LOG_CLEAR_SMART, 0); + } + + return ret; +} + +static int ssd_clear_warning(struct ssd_device *dev) +{ + int ret; + + ret = __ssd_clear_warning(dev); + if(!ret) { + ssd_gen_swlog(dev, SSD_LOG_CLEAR_WARNING, 0); + } + + return ret; +} + +static int ssd_save_smart(struct ssd_device *dev) +{ + uint32_t off, size; + int i; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + if (!ssd_update_smart(dev, &dev->smart)) { + return 0; + } + + dev->smart.version++; + + for (i=0; irom_info.nr_smart; i++) { + off = dev->rom_info.smart_base + (dev->rom_info.smart_sz * i); + size = dev->rom_info.smart_sz; + + ret = ssd_spi_erase(dev, off, size); + if (ret) { + hio_warn("%s: info erase failed\n", dev->name); + goto out; + } + + size = sizeof(struct ssd_smart); + + ret = ssd_spi_write(dev, &dev->smart, off, size); + if (ret) { + hio_warn("%s: info write failed\n", dev->name); + goto out; + } + + //xx + } + +out: + return ret; +} + +static int ssd_init_smart(struct ssd_device *dev) +{ + struct ssd_smart *smart; + struct timeval tv; + uint32_t off, size, val; + int i; + int ret = 0; + int update_smart = 0; + + do_gettimeofday(&tv); + dev->uptime = tv.tv_sec; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + smart = kmalloc(sizeof(struct ssd_smart) * SSD_ROM_NR_SMART_MAX, GFP_KERNEL); + if (!smart) { + ret = -ENOMEM; + goto out_nomem; + } + + memset(&dev->smart, 0, sizeof(struct ssd_smart)); + + /* read smart */ + for (i=0; irom_info.nr_smart; i++) { + memset(&smart[i], 0, sizeof(struct ssd_smart)); + + off = dev->rom_info.smart_base + (dev->rom_info.smart_sz * i); + size = sizeof(struct ssd_smart); + + ret = ssd_spi_read(dev, &smart[i], off, size); + if (ret) { + hio_warn("%s: info read failed\n", dev->name); + goto out; + } + + if (smart[i].magic != SSD_SMART_MAGIC) { + smart[i].magic = 0; + smart[i].version = 0; + continue; + } + + if (smart[i].version > dev->smart.version) { + memcpy(&dev->smart, &smart[i], sizeof(struct ssd_smart)); + } + } + + if (dev->smart.magic != SSD_SMART_MAGIC) { + /* first time power up */ + dev->smart.magic = SSD_SMART_MAGIC; + dev->smart.version = 1; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_INTR_INTERVAL_REG); + if (!val) { + dev->last_poweron_id = ~0; + ssd_gen_swlog(dev, SSD_LOG_POWER_ON, dev->hw_info.bridge_ver); + if (dev->smart.io_stat.nr_to) { + dev->smart.io_stat.nr_to = 0; + update_smart = 1; + } + } + + /* check log info */ + { + struct ssd_log_info log_info; + struct ssd_log *log = (struct ssd_log *)dev->internal_log.log; + + memset(&log_info, 0, sizeof(struct ssd_log_info)); + + while (log_info.nr_log < dev->internal_log.nr_log) { + int skip = 0; + + switch (log->le.event) { + /* skip the volatile log info */ + case SSD_LOG_SEU_FAULT: + case SSD_LOG_SEU_FAULT1: + skip = 1; + break; + case SSD_LOG_TIMEOUT: + skip = (dev->last_poweron_id >= log_info.nr_log); + break; + } + + if (!skip) { + log_info.stat[ssd_parse_log(dev, log, 0)]++; + } + + log_info.nr_log++; + log++; + } + + /* check */ + for (i=(SSD_LOG_NR_LEVEL-1); i>=0; i--) { + if (log_info.stat[i] != dev->smart.log_info.stat[i]) { + /* unclean */ + memcpy(&dev->smart.log_info, &log_info, sizeof(struct ssd_log_info)); + update_smart = 1; + break; + } + } + + if (update_smart) { + ++dev->smart.version; + } + } + + for (i=0; irom_info.nr_smart; i++) { + if (smart[i].magic == SSD_SMART_MAGIC && smart[i].version == dev->smart.version) { + continue; + } + + off = dev->rom_info.smart_base + (dev->rom_info.smart_sz * i); + size = dev->rom_info.smart_sz; + + ret = ssd_spi_erase(dev, off, size); + if (ret) { + hio_warn("%s: info erase failed\n", dev->name); + goto out; + } + + size = sizeof(struct ssd_smart); + ret = ssd_spi_write(dev, &dev->smart, off, size); + if (ret) { + hio_warn("%s: info write failed\n", dev->name); + goto out; + } + + //xx + } + + /* sync smart with alarm led */ + if (dev->smart.io_stat.nr_to || dev->smart.io_stat.nr_rwerr || dev->smart.log_info.stat[SSD_LOG_LEVEL_ERR]) { + hio_warn("%s: some fault found in the history info\n", dev->name); + ssd_set_alarm(dev); + } + +out: + kfree(smart); +out_nomem: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +/* bm */ +static int __ssd_bm_get_version(struct ssd_device *dev, uint16_t *ver) +{ + struct ssd_bm_manufacturer_data bm_md = {0}; + uint16_t sc_id = SSD_BM_SYSTEM_DATA_SUBCLASS_ID; + uint8_t cmd; + int ret = 0; + + if (!dev || !ver) { + return -EINVAL; + } + + mutex_lock(&dev->bm_mutex); + + cmd = SSD_BM_DATA_FLASH_SUBCLASS_ID; + ret = ssd_smbus_write_word(dev, SSD_BM_SLAVE_ADDRESS, cmd, (uint8_t *)&sc_id); + if (ret) { + goto out; + } + + cmd = SSD_BM_DATA_FLASH_SUBCLASS_ID_PAGE1; + ret = ssd_smbus_read_block(dev, SSD_BM_SLAVE_ADDRESS, cmd, sizeof(struct ssd_bm_manufacturer_data), (uint8_t *)&bm_md); + if (ret) { + goto out; + } + + if (bm_md.firmware_ver & 0xF000) { + ret = -EIO; + goto out; + } + + *ver = bm_md.firmware_ver; + +out: + mutex_unlock(&dev->bm_mutex); + return ret; +} + +static int ssd_bm_get_version(struct ssd_device *dev, uint16_t *ver) +{ + uint16_t tmp = 0; + int i = SSD_BM_RETRY_MAX; + int ret = 0; + + while (i-- > 0) { + ret = __ssd_bm_get_version(dev, &tmp); + if (!ret) { + break; + } + } + if (ret) { + return ret; + } + + *ver = tmp; + + return 0; +} + +static int __ssd_bm_nr_cap(struct ssd_device *dev, int *nr_cap) +{ + struct ssd_bm_configuration_registers bm_cr; + uint16_t sc_id = SSD_BM_CONFIGURATION_REGISTERS_ID; + uint8_t cmd; + int ret; + + mutex_lock(&dev->bm_mutex); + + cmd = SSD_BM_DATA_FLASH_SUBCLASS_ID; + ret = ssd_smbus_write_word(dev, SSD_BM_SLAVE_ADDRESS, cmd, (uint8_t *)&sc_id); + if (ret) { + goto out; + } + + cmd = SSD_BM_DATA_FLASH_SUBCLASS_ID_PAGE1; + ret = ssd_smbus_read_block(dev, SSD_BM_SLAVE_ADDRESS, cmd, sizeof(struct ssd_bm_configuration_registers), (uint8_t *)&bm_cr); + if (ret) { + goto out; + } + + if (bm_cr.operation_cfg.cc == 0 || bm_cr.operation_cfg.cc > 4) { + ret = -EIO; + goto out; + } + + *nr_cap = bm_cr.operation_cfg.cc + 1; + +out: + mutex_unlock(&dev->bm_mutex); + return ret; +} + +static int ssd_bm_nr_cap(struct ssd_device *dev, int *nr_cap) +{ + int tmp = 0; + int i = SSD_BM_RETRY_MAX; + int ret = 0; + + while (i-- > 0) { + ret = __ssd_bm_nr_cap(dev, &tmp); + if (!ret) { + break; + } + } + if (ret) { + return ret; + } + + *nr_cap = tmp; + + return 0; +} + +static int ssd_bm_enter_cap_learning(struct ssd_device *dev) +{ + uint16_t buf = SSD_BM_ENTER_CAP_LEARNING; + uint8_t cmd = SSD_BM_MANUFACTURERACCESS; + int ret; + + ret = ssd_smbus_write_word(dev, SSD_BM_SLAVE_ADDRESS, cmd, (uint8_t *)&buf); + if (ret) { + goto out; + } + +out: + return ret; +} + +static int ssd_bm_get_sfstatus(struct ssd_device *dev, uint16_t *status) +{ + uint16_t val = 0; + uint8_t cmd = SSD_BM_SAFETYSTATUS; + int ret; + + ret = ssd_smbus_read_word(dev, SSD_BM_SLAVE_ADDRESS, cmd, (uint8_t *)&val); + if (ret) { + goto out; + } + + *status = val; +out: + return ret; +} + +static int ssd_bm_get_opstatus(struct ssd_device *dev, uint16_t *status) +{ + uint16_t val = 0; + uint8_t cmd = SSD_BM_OPERATIONSTATUS; + int ret; + + ret = ssd_smbus_read_word(dev, SSD_BM_SLAVE_ADDRESS, cmd, (uint8_t *)&val); + if (ret) { + goto out; + } + + *status = val; +out: + return ret; +} + +static int ssd_get_bmstruct(struct ssd_device *dev, struct ssd_bm *bm_status_out) +{ + struct sbs_cmd *bm_sbs = ssd_bm_sbs; + struct ssd_bm bm_status; + uint8_t buf[2] = {0, }; + uint16_t val = 0; + uint16_t cval; + int ret = 0; + + memset(&bm_status, 0, sizeof(struct ssd_bm)); + + while (bm_sbs->desc != NULL) { + switch (bm_sbs->size) { + case SBS_SIZE_BYTE: + ret = ssd_smbus_read_byte(dev, SSD_BM_SLAVE_ADDRESS, bm_sbs->cmd, buf); + if (ret) { + //printf("Error: smbus read byte %#x\n", bm_sbs->cmd); + goto out; + } + val = buf[0]; + break; + case SBS_SIZE_WORD: + ret = ssd_smbus_read_word(dev, SSD_BM_SLAVE_ADDRESS, bm_sbs->cmd, (uint8_t *)&val); + if (ret) { + //printf("Error: smbus read word %#x\n", bm_sbs->cmd); + goto out; + } + //val = *(uint16_t *)buf; + break; + default: + ret = -1; + goto out; + break; + } + + switch (bm_sbs->unit) { + case SBS_UNIT_VALUE: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val & bm_sbs->mask; + break; + case SBS_UNIT_TEMPERATURE: + cval = (uint16_t)(val - 2731) / 10; + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = cval; + break; + case SBS_UNIT_VOLTAGE: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val; + break; + case SBS_UNIT_CURRENT: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val; + break; + case SBS_UNIT_ESR: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val; + break; + case SBS_UNIT_PERCENT: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val; + break; + case SBS_UNIT_CAPACITANCE: + *(uint16_t *)bm_var(&bm_status, bm_sbs->off) = val; + break; + default: + ret = -1; + goto out; + break; + } + + bm_sbs++; + } + + memcpy(bm_status_out, &bm_status, sizeof(struct ssd_bm)); + +out: + return ret; +} + +static int __ssd_bm_status(struct ssd_device *dev, int *status) +{ + struct ssd_bm bm_status = {0}; + int nr_cap = 0; + int i; + int ret = 0; + + ret = ssd_get_bmstruct(dev, &bm_status); + if (ret) { + goto out; + } + + /* capacitor voltage */ + ret = ssd_bm_nr_cap(dev, &nr_cap); + if (ret) { + goto out; + } + + for (i=0; i> 12) & 0x1)) { + *status = SSD_BMSTATUS_CHARGING; + }else{ + *status = SSD_BMSTATUS_OK; + } + +out: + return ret; +} + +static void ssd_set_flush_timeout(struct ssd_device *dev, int mode); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static void ssd_bm_worker(void *data) +{ + struct ssd_device *dev = (struct ssd_device *)data; +#else +static void ssd_bm_worker(struct work_struct *work) +{ + struct ssd_device *dev = container_of(work, struct ssd_device, bm_work); +#endif + + uint16_t opstatus; + int ret = 0; + + if (mode != SSD_DRV_MODE_STANDARD) { + return; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_1) { + return; + } + + if (dev->hw_info_ext.plp_type != SSD_PLP_SCAP) { + return; + } + + ret = ssd_bm_get_opstatus(dev, &opstatus); + if (ret) { + hio_warn("%s: get bm operationstatus failed\n", dev->name); + return; + } + + /* need cap learning ? */ + if (!(opstatus & 0xF0)) { + ret = ssd_bm_enter_cap_learning(dev); + if (ret) { + hio_warn("%s: enter capacitance learning failed\n", dev->name); + return; + } + } +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) +static void ssd_bm_routine_start(void *data) +#else +static void ssd_bm_routine_start(struct timer_list *t) +#endif +{ + struct ssd_device *dev; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) + if (!data) { + return; + } + dev = data; +#else + dev = from_timer(dev, t, bm_timer); +#endif + + if (test_bit(SSD_INIT_WORKQ, &dev->state)) { + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + queue_work(dev->workq, &dev->bm_work); + } else { + queue_work(dev->workq, &dev->capmon_work); + } + } +} + +/* CAP */ +static int ssd_do_cap_learn(struct ssd_device *dev, uint32_t *cap) +{ + uint32_t u1, u2, t; + uint16_t val = 0; + int wait = 0; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + *cap = 0; + return 0; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + *cap = 0; + return 0; + } + + /* make sure the lm80 voltage value is updated */ + msleep(SSD_LM80_CONV_INTERVAL); + + /* check if full charged */ + wait = 0; + for (;;) { + ret = ssd_smbus_read_word(dev, SSD_SENSOR_LM80_SADDRESS, SSD_PL_CAP_U1, (uint8_t *)&val); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + u1 = SSD_LM80_CONVERT_VOLT(u16_swap(val)); + if (SSD_PL_CAP_VOLT(u1) >= SSD_PL_CAP_VOLT_FULL) { + break; + } + + wait++; + if (wait > SSD_PL_CAP_CHARGE_MAX_WAIT) { + ret = -ETIMEDOUT; + goto out; + } + msleep(SSD_PL_CAP_CHARGE_WAIT); + } + + ret = ssd_smbus_read_word(dev, SSD_SENSOR_LM80_SADDRESS, SSD_PL_CAP_U2, (uint8_t *)&val); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + u2 = SSD_LM80_CONVERT_VOLT(u16_swap(val)); + + if (u1 == u2) { + ret = -EINVAL; + goto out; + } + + /* enter cap learn */ + ssd_reg32_write(dev->ctrlp + SSD_PL_CAP_LEARN_REG, 0x1); + + wait = 0; + for (;;) { + msleep(SSD_PL_CAP_LEARN_WAIT); + + t = ssd_reg32_read(dev->ctrlp + SSD_PL_CAP_LEARN_REG); + if (!((t >> 1) & 0x1)) { + break; + } + + wait++; + if (wait > SSD_PL_CAP_LEARN_MAX_WAIT) { + ret = -ETIMEDOUT; + goto out; + } + } + + if ((t >> 4) & 0x1) { + ret = -ETIMEDOUT; + goto out; + } + + t = (t >> 8); + if (0 == t) { + ret = -EINVAL; + goto out; + } + + *cap = SSD_PL_CAP_LEARN(u1, u2, t); + +out: + return ret; +} + +static int ssd_cap_learn(struct ssd_device *dev, uint32_t *cap) +{ + int ret = 0; + + if (!dev || !cap) { + return -EINVAL; + } + + mutex_lock(&dev->bm_mutex); + + ssd_stop_workq(dev); + + ret = ssd_do_cap_learn(dev, cap); + if (ret) { + ssd_gen_swlog(dev, SSD_LOG_CAP_LEARN_FAULT, 0); + goto out; + } + + ssd_gen_swlog(dev, SSD_LOG_CAP_STATUS, *cap); + +out: + ssd_start_workq(dev); + mutex_unlock(&dev->bm_mutex); + + return ret; +} + +static int ssd_check_pl_cap(struct ssd_device *dev) +{ + uint32_t u1; + uint16_t val = 0; + uint8_t low = 0; + int wait = 0; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + return 0; + } + + /* cap ready ? */ + wait = 0; + for (;;) { + ret = ssd_smbus_read_word(dev, SSD_SENSOR_LM80_SADDRESS, SSD_PL_CAP_U1, (uint8_t *)&val); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + u1 = SSD_LM80_CONVERT_VOLT(u16_swap(val)); + if (SSD_PL_CAP_VOLT(u1) >= SSD_PL_CAP_VOLT_READY) { + break; + } + + wait++; + if (wait > SSD_PL_CAP_CHARGE_MAX_WAIT) { + ret = -ETIMEDOUT; + ssd_gen_swlog(dev, SSD_LOG_CAP_VOLT_FAULT, SSD_PL_CAP_VOLT(u1)); + goto out; + } + msleep(SSD_PL_CAP_CHARGE_WAIT); + } + + low = ssd_lm80_limit[SSD_LM80_IN_CAP].low; + ret = ssd_smbus_write_byte(dev, SSD_SENSOR_LM80_SADDRESS, SSD_LM80_REG_IN_MIN(SSD_LM80_IN_CAP), &low); + if (ret) { + goto out; + } + + /* enable cap INx */ + ret = ssd_lm80_enable_in(dev, SSD_SENSOR_LM80_SADDRESS, SSD_LM80_IN_CAP); + if (ret) { + if (!test_and_set_bit(SSD_HWMON_SENSOR(SSD_SENSOR_LM80), &dev->hwmon)) { + ssd_generate_sensor_fault_log(dev, SSD_LOG_SENSOR_FAULT, SSD_SENSOR_LM80_SADDRESS,ret); + } + goto out; + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +static int ssd_check_pl_cap_fast(struct ssd_device *dev) +{ + uint32_t u1; + uint16_t val = 0; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + return 0; + } + + /* cap ready ? */ + ret = ssd_smbus_read_word(dev, SSD_SENSOR_LM80_SADDRESS, SSD_PL_CAP_U1, (uint8_t *)&val); + if (ret) { + goto out; + } + u1 = SSD_LM80_CONVERT_VOLT(u16_swap(val)); + if (SSD_PL_CAP_VOLT(u1) < SSD_PL_CAP_VOLT_READY) { + ret = 1; + } + +out: + return ret; +} + +static int ssd_init_pl_cap(struct ssd_device *dev) +{ + int ret = 0; + + /* set here: user write mode */ + dev->user_wmode = wmode; + + mutex_init(&dev->bm_mutex); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + uint32_t val; + val = ssd_reg32_read(dev->ctrlp + SSD_BM_FAULT_REG); + if ((val >> 1) & 0x1) { + (void)test_and_set_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon); + } + } else { + ret = ssd_check_pl_cap(dev); + if (ret) { + (void)test_and_set_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon); + } + } + + return 0; +} + +/* label */ +static void __end_str(char *str, int len) +{ + int i; + + for(i=0; irom_info.label_base; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + size = sizeof(struct ssd_label); + + /* read label */ + ret = ssd_spi_read(dev, &dev->label, off, size); + if (ret) { + memset(&dev->label, 0, size); + goto out; + } + + __end_str(dev->label.date, SSD_LABEL_FIELD_SZ); + __end_str(dev->label.sn, SSD_LABEL_FIELD_SZ); + __end_str(dev->label.part, SSD_LABEL_FIELD_SZ); + __end_str(dev->label.desc, SSD_LABEL_FIELD_SZ); + __end_str(dev->label.other, SSD_LABEL_FIELD_SZ); + __end_str(dev->label.maf, SSD_LABEL_FIELD_SZ); + } else { + size = sizeof(struct ssd_labelv3); + + /* read label */ + ret = ssd_spi_read(dev, &dev->labelv3, off, size); + if (ret) { + memset(&dev->labelv3, 0, size); + goto out; + } + + __end_str(dev->labelv3.boardtype, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.barcode, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.item, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.description, SSD_LABEL_DESC_SZ); + __end_str(dev->labelv3.manufactured, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.vendorname, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.issuenumber, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.cleicode, SSD_LABEL_FIELD_SZ); + __end_str(dev->labelv3.bom, SSD_LABEL_FIELD_SZ); + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +int ssd_get_label(struct block_device *bdev, struct ssd_label *label) +{ + struct ssd_device *dev; + + if (!bdev || !label || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + memset(label, 0, sizeof(struct ssd_label)); + memcpy(label->date, dev->labelv3.manufactured, SSD_LABEL_FIELD_SZ); + memcpy(label->sn, dev->labelv3.barcode, SSD_LABEL_FIELD_SZ); + memcpy(label->desc, dev->labelv3.boardtype, SSD_LABEL_FIELD_SZ); + memcpy(label->maf, dev->labelv3.vendorname, SSD_LABEL_FIELD_SZ); + } else { + memcpy(label, &dev->label, sizeof(struct ssd_label)); + } + + return 0; +} + +static int __ssd_get_version(struct ssd_device *dev, struct ssd_version_info *ver) +{ + uint16_t bm_ver = 0; + int ret = 0; + + if (dev->protocol_info.ver > SSD_PROTOCOL_V3 && dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + ret = ssd_bm_get_version(dev, &bm_ver); + if(ret){ + goto out; + } + } + + ver->bridge_ver = dev->hw_info.bridge_ver; + ver->ctrl_ver = dev->hw_info.ctrl_ver; + ver->bm_ver = bm_ver; + ver->pcb_ver = dev->hw_info.pcb_ver; + ver->upper_pcb_ver = dev->hw_info.upper_pcb_ver; + +out: + return ret; + +} + +int ssd_get_version(struct block_device *bdev, struct ssd_version_info *ver) +{ + struct ssd_device *dev; + int ret; + + if (!bdev || !ver || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + mutex_lock(&dev->fw_mutex); + ret = __ssd_get_version(dev, ver); + mutex_unlock(&dev->fw_mutex); + + return ret; +} + +static int __ssd_get_temperature(struct ssd_device *dev, int *temp) +{ + uint64_t val; + uint32_t off; + int max = -300; + int cur; + int i; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + *temp = 0; + return 0; + } + + if (finject) { + if (dev->db_info.type == SSD_DEBUG_LOG && + (dev->db_info.data.log.event == SSD_LOG_OVER_TEMP || + dev->db_info.data.log.event == SSD_LOG_NORMAL_TEMP || + dev->db_info.data.log.event == SSD_LOG_WARN_TEMP)) { + *temp = (int)dev->db_info.data.log.extra; + return 0; + } + } + + for (i=0; ihw_info.nr_ctrl; i++) { + off = SSD_CTRL_TEMP_REG0 + i * sizeof(uint64_t); + + val = ssd_reg_read(dev->ctrlp + off); + if (val == 0xffffffffffffffffull) { + continue; + } + + cur = (int)CUR_TEMP(val); + if (cur >= max) { + max = cur; + } + } + + *temp = max; + + return 0; +} + +int ssd_get_temperature(struct block_device *bdev, int *temp) +{ + struct ssd_device *dev; + int ret; + + if (!bdev || !temp || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + + mutex_lock(&dev->fw_mutex); + ret = __ssd_get_temperature(dev, temp); + mutex_unlock(&dev->fw_mutex); + + return ret; +} + +int ssd_set_otprotect(struct block_device *bdev, int otprotect) + { + struct ssd_device *dev; + + if (!bdev || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + ssd_set_ot_protect(dev, !!otprotect); + + return 0; + } + +int ssd_bm_status(struct block_device *bdev, int *status) +{ + struct ssd_device *dev; + int ret = 0; + + if (!bdev || !status || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + mutex_lock(&dev->fw_mutex); + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + *status = SSD_BMSTATUS_WARNING; + } else { + *status = SSD_BMSTATUS_OK; + } + } else if(dev->protocol_info.ver > SSD_PROTOCOL_V3) { + ret = __ssd_bm_status(dev, status); + } else { + *status = SSD_BMSTATUS_OK; + } + mutex_unlock(&dev->fw_mutex); + + return ret; +} + +int ssd_get_pciaddr(struct block_device *bdev, struct pci_addr *paddr) +{ + struct ssd_device *dev; + + if (!bdev || !paddr || !bdev->bd_disk) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + paddr->domain = pci_domain_nr(dev->pdev->bus); + paddr->bus = dev->pdev->bus->number; + paddr->slot = PCI_SLOT(dev->pdev->devfn); + paddr->func= PCI_FUNC(dev->pdev->devfn); + + return 0; +} + +/* acc */ +static int ssd_bb_acc(struct ssd_device *dev, struct ssd_acc_info *acc) +{ + uint32_t val; + int ctrl, chip; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_1) { + return -EOPNOTSUPP; + } + + acc->threshold_l1 = ssd_reg32_read(dev->ctrlp + SSD_BB_THRESHOLD_L1_REG); + if (0xffffffffull == acc->threshold_l1) { + return -EIO; + } + acc->threshold_l2 = ssd_reg32_read(dev->ctrlp + SSD_BB_THRESHOLD_L2_REG); + if (0xffffffffull == acc->threshold_l2) { + return -EIO; + } + acc->val = 0; + + for (ctrl=0; ctrlhw_info.nr_ctrl; ctrl++) { + for (chip=0; chiphw_info.nr_chip; chip++) { + val = ssd_reg32_read(dev->ctrlp + SSD_BB_ACC_REG0 + (SSD_CTRL_REG_ZONE_SZ * ctrl) + (SSD_BB_ACC_REG_SZ * chip)); + if (0xffffffffull == acc->val) { + return -EIO; + } + if (val > acc->val) { + acc->val = val; + } + } + } + + return 0; +} + +static int ssd_ec_acc(struct ssd_device *dev, struct ssd_acc_info *acc) +{ + uint32_t val; + int ctrl, chip; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_1) { + return -EOPNOTSUPP; + } + + acc->threshold_l1 = ssd_reg32_read(dev->ctrlp + SSD_EC_THRESHOLD_L1_REG); + if (0xffffffffull == acc->threshold_l1) { + return -EIO; + } + acc->threshold_l2 = ssd_reg32_read(dev->ctrlp + SSD_EC_THRESHOLD_L2_REG); + if (0xffffffffull == acc->threshold_l2) { + return -EIO; + } + acc->val = 0; + + for (ctrl=0; ctrlhw_info.nr_ctrl; ctrl++) { + for (chip=0; chiphw_info.nr_chip; chip++) { + val = ssd_reg32_read(dev->ctrlp + SSD_EC_ACC_REG0 + (SSD_CTRL_REG_ZONE_SZ * ctrl) + (SSD_EC_ACC_REG_SZ * chip)); + if (0xffffffffull == acc->val) { + return -EIO; + } + + if (val > acc->val) { + acc->val = val; + } + } + } + + return 0; +} + + +/* ram r&w */ +static int ssd_ram_read_4k(struct ssd_device *dev, void *buf, size_t length, loff_t ofs, int ctrl_idx) +{ + struct ssd_ram_op_msg *msg; + dma_addr_t buf_dma; + size_t len = length; + loff_t ofs_w = ofs; + int ret = 0; + + if (ctrl_idx >= dev->hw_info.nr_ctrl || (uint64_t)(ofs + length) > dev->hw_info.ram_size + || !length || length > dev->hw_info.ram_max_len + || (length & (dev->hw_info.ram_align - 1)) != 0 || ((uint64_t)ofs & (dev->hw_info.ram_align - 1)) != 0) { + return -EINVAL; + } + + len /= dev->hw_info.ram_align; + do_div(ofs_w, dev->hw_info.ram_align); + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map read DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + msg = (struct ssd_ram_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_RAM_READ; + msg->ctrl_idx = ctrl_idx; + msg->start = (uint32_t)ofs_w; + msg->length = len; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, READ, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_FROMDEVICE); + +out_dma_mapping: + return ret; +} + +static int ssd_ram_write_4k(struct ssd_device *dev, void *buf, size_t length, loff_t ofs, int ctrl_idx) +{ + struct ssd_ram_op_msg *msg; + dma_addr_t buf_dma; + size_t len = length; + loff_t ofs_w = ofs; + int ret = 0; + + if (ctrl_idx >= dev->hw_info.nr_ctrl || (uint64_t)(ofs + length) > dev->hw_info.ram_size + || !length || length > dev->hw_info.ram_max_len + || (length & (dev->hw_info.ram_align - 1)) != 0 || ((uint64_t)ofs & (dev->hw_info.ram_align - 1)) != 0) { + return -EINVAL; + } + + len /= dev->hw_info.ram_align; + do_div(ofs_w, dev->hw_info.ram_align); + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_TODEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map write DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + msg = (struct ssd_ram_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_RAM_WRITE; + msg->ctrl_idx = ctrl_idx; + msg->start = (uint32_t)ofs_w; + msg->length = len; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_TODEVICE); + +out_dma_mapping: + return ret; + +} + +static int ssd_ram_read(struct ssd_device *dev, void *buf, size_t length, loff_t ofs, int ctrl_idx) +{ + int left = length; + size_t len; + loff_t off = ofs; + int ret = 0; + + if (ctrl_idx >= dev->hw_info.nr_ctrl || (uint64_t)(ofs + length) > dev->hw_info.ram_size || !length + || (length & (dev->hw_info.ram_align - 1)) != 0 || ((uint64_t)ofs & (dev->hw_info.ram_align - 1)) != 0) { + return -EINVAL; + } + + while (left > 0) { + len = dev->hw_info.ram_max_len; + if (left < (int)dev->hw_info.ram_max_len) { + len = left; + } + + ret = ssd_ram_read_4k(dev, buf, len, off, ctrl_idx); + if (ret) { + break; + } + + left -= len; + off += len; + buf += len; + } + + return ret; +} + +static int ssd_ram_write(struct ssd_device *dev, void *buf, size_t length, loff_t ofs, int ctrl_idx) +{ + int left = length; + size_t len; + loff_t off = ofs; + int ret = 0; + + if (ctrl_idx >= dev->hw_info.nr_ctrl || (uint64_t)(ofs + length) > dev->hw_info.ram_size || !length + || (length & (dev->hw_info.ram_align - 1)) != 0 || ((uint64_t)ofs & (dev->hw_info.ram_align - 1)) != 0) { + return -EINVAL; + } + + while (left > 0) { + len = dev->hw_info.ram_max_len; + if (left < (int)dev->hw_info.ram_max_len) { + len = left; + } + + ret = ssd_ram_write_4k(dev, buf, len, off, ctrl_idx); + if (ret) { + break; + } + + left -= len; + off += len; + buf += len; + } + + return ret; +} + + +/* flash op */ +static int ssd_check_flash(struct ssd_device *dev, int flash, int page, int ctrl_idx) +{ + int cur_ch = flash % dev->hw_info.max_ch; + int cur_chip = flash /dev->hw_info.max_ch; + + if (ctrl_idx >= dev->hw_info.nr_ctrl) { + return -EINVAL; + } + + if (cur_ch >= dev->hw_info.nr_ch || cur_chip >= dev->hw_info.nr_chip) { + return -EINVAL; + } + + if (page >= (int)(dev->hw_info.block_count * dev->hw_info.page_count)) { + return -EINVAL; + } + return 0; +} + +static int ssd_nand_read_id(struct ssd_device *dev, void *id, int flash, int chip, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + dma_addr_t buf_dma; + int ret = 0; + + if (unlikely(!id)) + return -EINVAL; + + buf_dma = pci_map_single(dev->pdev, id, SSD_NAND_ID_BUFF_SZ, PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map read DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + flash = ((uint32_t)flash << 1) | (uint32_t)chip; + chip = 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_NAND_READ_ID; + msg->chip_no = flash; + msg->chip_ce = chip; + msg->ctrl_idx = ctrl_idx; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, READ, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, SSD_NAND_ID_BUFF_SZ, PCI_DMA_FROMDEVICE); + +out_dma_mapping: + return ret; +} + +#if 0 +static int ssd_nand_read(struct ssd_device *dev, void *buf, + int flash, int chip, int page, int page_count, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + dma_addr_t buf_dma; + int length; + int ret = 0; + + if (!buf) { + return -EINVAL; + } + + if ((page + page_count) > dev->hw_info.block_count*dev->hw_info.page_count) { + return -EINVAL; + } + + ret = ssd_check_flash(dev, flash, page, ctrl_idx); + if (ret) { + return ret; + } + + length = page_count * dev->hw_info.page_size; + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map read DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + flash = (flash << 1) | chip; + chip = 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_NAND_READ; + msg->ctrl_idx = ctrl_idx; + msg->chip_no = flash; + msg->chip_ce = chip; + msg->page_no = page; + msg->page_count = page_count; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, READ, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_FROMDEVICE); + +out_dma_mapping: + return ret; +} +#endif + +static int ssd_nand_read_w_oob(struct ssd_device *dev, void *buf, + int flash, int chip, int page, int count, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + dma_addr_t buf_dma; + int length; + int ret = 0; + + if (!buf) { + return -EINVAL; + } + + if ((page + count) > (int)(dev->hw_info.block_count * dev->hw_info.page_count)) { + return -EINVAL; + } + + ret = ssd_check_flash(dev, flash, page, ctrl_idx); + if (ret) { + return ret; + } + + length = count * (dev->hw_info.page_size + dev->hw_info.oob_size); + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_FROMDEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map read DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + flash = ((uint32_t)flash << 1) | (uint32_t)chip; + chip = 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_NAND_READ_WOOB; + msg->ctrl_idx = ctrl_idx; + msg->chip_no = flash; + msg->chip_ce = chip; + msg->page_no = page; + msg->page_count = count; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, READ, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_FROMDEVICE); + +out_dma_mapping: + return ret; +} + +/* write 1 page */ +static int ssd_nand_write(struct ssd_device *dev, void *buf, + int flash, int chip, int page, int count, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + dma_addr_t buf_dma; + int length; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + return -EINVAL; + } + + if (!buf) { + return -EINVAL; + } + + if (count != 1) { + return -EINVAL; + } + + ret = ssd_check_flash(dev, flash, page, ctrl_idx); + if (ret) { + return ret; + } + + length = count * (dev->hw_info.page_size + dev->hw_info.oob_size); + + /* write data to ram */ + /*ret = ssd_ram_write(dev, buf, length, dev->hw_info.nand_wbuff_base, ctrl_idx); + if (ret) { + return ret; + }*/ + + buf_dma = pci_map_single(dev->pdev, buf, length, PCI_DMA_TODEVICE); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + ret = dma_mapping_error(buf_dma); +#else + ret = dma_mapping_error(&(dev->pdev->dev), buf_dma); +#endif + if (ret) { + hio_warn("%s: unable to map write DMA buffer\n", dev->name); + goto out_dma_mapping; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + flash = ((uint32_t)flash << 1) | (uint32_t)chip; + chip = 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_NAND_WRITE; + msg->ctrl_idx = ctrl_idx; + msg->chip_no = flash; + msg->chip_ce = chip; + + msg->page_no = page; + msg->page_count = count; + msg->buf = buf_dma; + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + pci_unmap_single(dev->pdev, buf_dma, length, PCI_DMA_TODEVICE); + +out_dma_mapping: + return ret; +} + +static int ssd_nand_erase(struct ssd_device *dev, int flash, int chip, int page, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + int ret = 0; + + ret = ssd_check_flash(dev, flash, page, ctrl_idx); + if (ret) { + return ret; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + flash = ((uint32_t)flash << 1) | (uint32_t)chip; + chip = 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_NAND_ERASE; + msg->ctrl_idx = ctrl_idx; + msg->chip_no = flash; + msg->chip_ce = chip; + msg->page_no = page; + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +static int ssd_update_bbt(struct ssd_device *dev, int flash, int ctrl_idx) +{ + struct ssd_nand_op_msg *msg; + struct ssd_flush_msg *fmsg; + int ret = 0; + + ret = ssd_check_flash(dev, flash, 0, ctrl_idx); + if (ret) { + return ret; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + fmsg = (struct ssd_flush_msg *)msg; + + fmsg->fun = SSD_FUNC_FLUSH; + fmsg->flag = 0x1; + fmsg->flash = flash; + fmsg->ctrl_idx = ctrl_idx; + } else { + msg->fun = SSD_FUNC_FLUSH; + msg->flag = 0x1; + msg->chip_no = flash; + msg->ctrl_idx = ctrl_idx; + } + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +/* flash controller init state */ +static int __ssd_check_init_state(struct ssd_device *dev) +{ + uint32_t *init_state = NULL; + int reg_base, reg_sz; + int max_wait = SSD_INIT_MAX_WAIT; + int init_wait = 0; + int i, j, k; + int ch_start = 0; + +/* + for (i=0; ihw_info.nr_ctrl; i++) { + ssd_reg32_write(dev->ctrlp + SSD_CTRL_TEST_REG0 + i * 8, test_data); + read_data = ssd_reg32_read(dev->ctrlp + SSD_CTRL_TEST_REG0 + i * 8); + if (read_data == ~test_data) { + //dev->hw_info.nr_ctrl++; + dev->hw_info.nr_ctrl_map |= 1<ctrlp + SSD_READY_REG); + j=0; + for (i=0; ihw_info.nr_ctrl; i++) { + if (((read_data>>i) & 0x1) == 0) { + j++; + } + } + + if (dev->hw_info.nr_ctrl != j) { + printk(KERN_WARNING "%s: nr_ctrl mismatch: %d %d\n", dev->name, dev->hw_info.nr_ctrl, j); + return -1; + } +*/ + +/* + init_state = ssd_reg_read(dev->ctrlp + SSD_FLASH_INFO_REG0); + for (j=1; jhw_info.nr_ctrl;j++) { + if (init_state != ssd_reg_read(dev->ctrlp + SSD_FLASH_INFO_REG0 + j*8)) { + printk(KERN_WARNING "SSD_FLASH_INFO_REG[%d], not match\n", j); + return -1; + } + } +*/ + +/* init_state = ssd_reg_read(dev->ctrlp + SSD_CHIP_INFO_REG0); + for (j=1; jhw_info.nr_ctrl; j++) { + if (init_state != ssd_reg_read(dev->ctrlp + SSD_CHIP_INFO_REG0 + j*16)) { + printk(KERN_WARNING "SSD_CHIP_INFO_REG Lo [%d], not match\n", j); + return -1; + } + } + + init_state = ssd_reg_read(dev->ctrlp + SSD_CHIP_INFO_REG0 + 8); + for (j=1; jhw_info.nr_ctrl; j++) { + if (init_state != ssd_reg_read(dev->ctrlp + SSD_CHIP_INFO_REG0 + 8 + j*16)) { + printk(KERN_WARNING "SSD_CHIP_INFO_REG Hi [%d], not match\n", j); + return -1; + } + } +*/ + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + max_wait = SSD_INIT_MAX_WAIT_V3_2; + } + + reg_base = dev->protocol_info.init_state_reg; + reg_sz = dev->protocol_info.init_state_reg_sz; + + init_state = (uint32_t *)kmalloc(reg_sz, GFP_KERNEL); + if (!init_state) { + return -ENOMEM; + } + + for (i=0; ihw_info.nr_ctrl; i++) { +check_init: + for (j=0, k=0; jctrlp + reg_base + j); + } + + if (dev->protocol_info.ver > SSD_PROTOCOL_V3) { + /* just check the last bit, no need to check all channel */ + ch_start = dev->hw_info.max_ch - 1; + } else { + ch_start = 0; + } + + for (j=0; jhw_info.nr_chip; j++) { + for (k=ch_start; khw_info.max_ch; k++) { + if (test_bit((j*dev->hw_info.max_ch + k), (void *)init_state)) { + continue; + } + + init_wait++; + if (init_wait <= max_wait) { + msleep(SSD_INIT_WAIT); + goto check_init; + } else { + if (k < dev->hw_info.nr_ch) { + hio_warn("%s: controller %d chip %d ch %d init failed\n", + dev->name, i, j, k); + } else { + hio_warn("%s: controller %d chip %d init failed\n", + dev->name, i, j); + } + + kfree(init_state); + return -1; + } + } + } + reg_base += reg_sz; + } + //printk(KERN_WARNING "%s: init wait %d\n", dev->name, init_wait); + + kfree(init_state); + return 0; +} + +static int ssd_check_init_state(struct ssd_device *dev) +{ + if (mode != SSD_DRV_MODE_STANDARD) { + return 0; + } + + return __ssd_check_init_state(dev); +} + +static void ssd_reset_resp_ptr(struct ssd_device *dev); + +/* reset flash controller etc */ +static int __ssd_reset(struct ssd_device *dev, int type) +{ + struct timeval tv; + if (type < SSD_RST_NOINIT || type > SSD_RST_FULL) { + return -EINVAL; + } + + mutex_lock(&dev->fw_mutex); + + if (type == SSD_RST_NOINIT) { //no init + ssd_reg32_write(dev->ctrlp + SSD_RESET_REG, SSD_RESET_NOINIT); + } else if (type == SSD_RST_NORMAL) { //reset & init + ssd_reg32_write(dev->ctrlp + SSD_RESET_REG, SSD_RESET); + } else { // full reset + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + mutex_unlock(&dev->fw_mutex); + return -EINVAL; + } + + ssd_reg32_write(dev->ctrlp + SSD_FULL_RESET_REG, SSD_RESET_FULL); + + /* ?? */ + ssd_reset_resp_ptr(dev); + } + +#ifdef SSD_OT_PROTECT + dev->ot_delay = 0; +#endif + + msleep(1000); + + /* xx */ + ssd_set_flush_timeout(dev, dev->wmode); + + mutex_unlock(&dev->fw_mutex); + ssd_gen_swlog(dev, SSD_LOG_RESET, (uint32_t)type); + do_gettimeofday(&tv); + dev->reset_time = tv.tv_sec; + + return __ssd_check_init_state(dev); +} + +static int ssd_save_md(struct ssd_device *dev) +{ + struct ssd_nand_op_msg *msg; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + if (!dev->save_md) { + return 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_FLUSH; + msg->flag = 0x2; + msg->ctrl_idx = 0; + msg->chip_no = 0; + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +static int ssd_barrier_save_md(struct ssd_device *dev) +{ + struct ssd_nand_op_msg *msg; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return 0; + } + + if (!dev->save_md) { + return 0; + } + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + msg->fun = SSD_FUNC_FLUSH; + msg->flag = 0x2; + msg->ctrl_idx = 0; + msg->chip_no = 0; + + ret = ssd_do_barrier_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +static int ssd_flush(struct ssd_device *dev) +{ + struct ssd_nand_op_msg *msg; + struct ssd_flush_msg *fmsg; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + fmsg = (struct ssd_flush_msg *)msg; + + fmsg->fun = SSD_FUNC_FLUSH; + fmsg->flag = 0; + fmsg->ctrl_idx = 0; + fmsg->flash = 0; + } else { + msg->fun = SSD_FUNC_FLUSH; + msg->flag = 0; + msg->ctrl_idx = 0; + msg->chip_no = 0; + } + + ret = ssd_do_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +static int ssd_barrier_flush(struct ssd_device *dev) +{ + struct ssd_nand_op_msg *msg; + struct ssd_flush_msg *fmsg; + int ret = 0; + + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + + msg = (struct ssd_nand_op_msg *)ssd_get_dmsg(dev); + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + fmsg = (struct ssd_flush_msg *)msg; + + fmsg->fun = SSD_FUNC_FLUSH; + fmsg->flag = 0; + fmsg->ctrl_idx = 0; + fmsg->flash = 0; + } else { + msg->fun = SSD_FUNC_FLUSH; + msg->flag = 0; + msg->ctrl_idx = 0; + msg->chip_no = 0; + } + + ret = ssd_do_barrier_request(dev, WRITE, msg, NULL); + ssd_put_dmsg(msg); + + return ret; +} + +#define SSD_WMODE_BUFFER_TIMEOUT 0x00c82710 +#define SSD_WMODE_BUFFER_EX_TIMEOUT 0x000500c8 +#define SSD_WMODE_FUA_TIMEOUT 0x000503E8 +static void ssd_set_flush_timeout(struct ssd_device *dev, int m) +{ + uint32_t to; + uint32_t val = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_1) { + return; + } + + switch(m) { + case SSD_WMODE_BUFFER: + to = SSD_WMODE_BUFFER_TIMEOUT; + break; + case SSD_WMODE_BUFFER_EX: + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2_1) { + to = SSD_WMODE_BUFFER_EX_TIMEOUT; + } else { + to = SSD_WMODE_BUFFER_TIMEOUT; + } + break; + case SSD_WMODE_FUA: + to = SSD_WMODE_FUA_TIMEOUT; + break; + default: + return; + } + + val = (((uint32_t)((uint32_t)m & 0x3) << 28) | to); + + ssd_reg32_write(dev->ctrlp + SSD_FLUSH_TIMEOUT_REG, val); +} + +static int ssd_do_switch_wmode(struct ssd_device *dev, int m) +{ + int ret = 0; + + ret = ssd_barrier_start(dev); + if (ret) { + goto out; + } + + ret = ssd_barrier_flush(dev); + if (ret) { + goto out_barrier_end; + } + + /* set contoller flush timeout */ + ssd_set_flush_timeout(dev, m); + + dev->wmode = m; + mb(); + +out_barrier_end: + ssd_barrier_end(dev); +out: + return ret; +} + +static int ssd_switch_wmode(struct ssd_device *dev, int m) +{ + int default_wmode; + int next_wmode; + int ret = 0; + + if (!test_bit(SSD_ONLINE, &dev->state)) { + return -ENODEV; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + default_wmode = SSD_WMODE_BUFFER; + } else { + default_wmode = SSD_WMODE_BUFFER_EX; + } + + if (SSD_WMODE_AUTO == m) { + /* battery fault ? */ + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + next_wmode = SSD_WMODE_FUA; + } else { + next_wmode = default_wmode; + } + } else if (SSD_WMODE_DEFAULT == m) { + next_wmode = default_wmode; + } else { + next_wmode = m; + } + + if (next_wmode != dev->wmode) { + hio_warn("%s: switch write mode (%d -> %d)\n", dev->name, dev->wmode, next_wmode); + ret = ssd_do_switch_wmode(dev, next_wmode); + if (ret) { + hio_err("%s: can not switch write mode (%d -> %d)\n", dev->name, dev->wmode, next_wmode); + } + } + + return ret; +} + +static int ssd_init_wmode(struct ssd_device *dev) +{ + int default_wmode; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + default_wmode = SSD_WMODE_BUFFER; + } else { + default_wmode = SSD_WMODE_BUFFER_EX; + } + + /* dummy mode */ + if (SSD_WMODE_AUTO == dev->user_wmode) { + /* battery fault ? */ + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + dev->wmode = SSD_WMODE_FUA; + } else { + dev->wmode = default_wmode; + } + } else if (SSD_WMODE_DEFAULT == dev->user_wmode) { + dev->wmode = default_wmode; + } else { + dev->wmode = dev->user_wmode; + } + ssd_set_flush_timeout(dev, dev->wmode); + + return ret; +} + +static int __ssd_set_wmode(struct ssd_device *dev, int m) +{ + int ret = 0; + + /* not support old fw*/ + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_1) { + ret = -EOPNOTSUPP; + goto out; + } + + if (m < SSD_WMODE_BUFFER || m > SSD_WMODE_DEFAULT) { + ret = -EINVAL; + goto out; + } + + ssd_gen_swlog(dev, SSD_LOG_SET_WMODE, m); + + dev->user_wmode = m; + + ret = ssd_switch_wmode(dev, dev->user_wmode); + if (ret) { + goto out; + } + +out: + return ret; +} + +int ssd_set_wmode(struct block_device *bdev, int m) +{ + struct ssd_device *dev; + + if (!bdev || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + return __ssd_set_wmode(dev, m); +} + +static int ssd_do_reset(struct ssd_device *dev) +{ + int ret = 0; + + if (test_and_set_bit(SSD_RESETING, &dev->state)) { + return 0; + } + + ssd_stop_workq(dev); + + ret = ssd_barrier_start(dev); + if (ret) { + goto out; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + /* old reset */ + ret = __ssd_reset(dev, SSD_RST_NORMAL); + } else { + /* full reset */ + //ret = __ssd_reset(dev, SSD_RST_FULL); + ret = __ssd_reset(dev, SSD_RST_NORMAL); + } + if (ret) { + goto out_barrier_end; + } + +out_barrier_end: + ssd_barrier_end(dev); +out: + ssd_start_workq(dev); + test_and_clear_bit(SSD_RESETING, &dev->state); + return ret; +} + +static int ssd_full_reset(struct ssd_device *dev) +{ + int ret = 0; + + if (test_and_set_bit(SSD_RESETING, &dev->state)) { + return 0; + } + + ssd_stop_workq(dev); + + ret = ssd_barrier_start(dev); + if (ret) { + goto out; + } + + ret = ssd_barrier_flush(dev); + if (ret) { + goto out_barrier_end; + } + + ret = ssd_barrier_save_md(dev); + if (ret) { + goto out_barrier_end; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + /* old reset */ + ret = __ssd_reset(dev, SSD_RST_NORMAL); + } else { + /* full reset */ + //ret = __ssd_reset(dev, SSD_RST_FULL); + ret = __ssd_reset(dev, SSD_RST_NORMAL); + } + if (ret) { + goto out_barrier_end; + } + +out_barrier_end: + ssd_barrier_end(dev); +out: + ssd_start_workq(dev); + test_and_clear_bit(SSD_RESETING, &dev->state); + return ret; +} + +int ssd_reset(struct block_device *bdev) +{ + int ret; + struct ssd_device *dev; + + if (!bdev || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + + ret = ssd_full_reset(dev); + if (!ret) { + if (!dev->has_non_0x98_reg_access) { + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, 0); + } + } + + return ret ; +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static int ssd_issue_flush_fn(struct request_queue *q, struct gendisk *disk, + sector_t *error_sector) +{ + struct ssd_device *dev = q->queuedata; + + return ssd_flush(dev); +} +#endif + +void ssd_submit_pbio(struct request_queue *q, struct bio *bio) +{ + struct ssd_device *dev = q->queuedata; +#ifdef SSD_QUEUE_PBIO + int ret = -EBUSY; +#endif + + if (!test_bit(SSD_ONLINE, &dev->state)) { + ssd_bio_endio(bio, -ENODEV); + goto out; + } + +#ifdef SSD_DEBUG_ERR + if (atomic_read(&dev->tocnt)) { + hio_warn("%s: IO rejected because of IO timeout!\n", dev->name); + ssd_bio_endio(bio, -EIO); + goto out; + } +#endif + + if (unlikely(ssd_bio_has_barrier_or_fua(bio))) { + ssd_bio_endio(bio, -EOPNOTSUPP); + goto out; + } + + if (unlikely(dev->readonly && bio_data_dir(bio) == WRITE)) { + ssd_bio_endio(bio, -EROFS); + goto out; + } + +#ifdef SSD_QUEUE_PBIO + if (0 == atomic_read(&dev->in_sendq)) { + ret = __ssd_submit_pbio(dev, bio, 0); + } + + if (ret) { + (void)test_and_set_bit(BIO_SSD_PBIO, &bio->bi_flags); + ssd_queue_bio(dev, bio); + } +#else + __ssd_submit_pbio(dev, bio, 1); +#endif + +out: + return; +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) +static blk_qc_t ssd_make_request(struct request_queue *q, struct bio *bio) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) +static void ssd_make_request(struct request_queue *q, struct bio *bio) +#else +static int ssd_make_request(struct request_queue *q, struct bio *bio) +#endif +{ + struct ssd_device *dev = q->queuedata; + int ret = -EBUSY; + + if (!test_bit(SSD_ONLINE, &dev->state)) { + ssd_bio_endio(bio, -ENODEV); + goto out; + } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,13,0)) + blk_queue_split(q, &bio); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)) + blk_queue_split(q, &bio, q->bio_split); +#endif + +#ifdef SSD_DEBUG_ERR + if (atomic_read(&dev->tocnt)) { + hio_warn("%s: IO rejected because of IO timeout!\n", dev->name); + ssd_bio_endio(bio, -EIO); + goto out; + } +#endif + + if (unlikely(ssd_bio_has_barrier_or_fua(bio))) { + ssd_bio_endio(bio, -EOPNOTSUPP); + goto out; + } + + /* writeback_cache_control.txt: REQ_FLUSH requests without data can be completed successfully without doing any work */ + if (unlikely(ssd_bio_has_flush(bio) && !bio_sectors(bio))) { + ssd_bio_endio(bio, 0); + goto out; + } + + if (0 == atomic_read(&dev->in_sendq)) { + ret = ssd_submit_bio(dev, bio, 0); + } + + if (ret) { + ssd_queue_bio(dev, bio); + } + +out: +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + return BLK_QC_T_NONE; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + return; +#else + return 0; +#endif +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)) +static int ssd_block_getgeo(struct block_device *bdev, struct hd_geometry *geo) +{ + struct ssd_device *dev; + + if (!bdev) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } + + geo->heads = 4; + geo->sectors = 16; + geo->cylinders = (dev->hw_info.size & ~0x3f) >> 6; + return 0; +} +#endif + +static int ssd_init_queue(struct ssd_device *dev); +static void ssd_cleanup_queue(struct ssd_device *dev); +static void ssd_cleanup_blkdev(struct ssd_device *dev); +static int ssd_init_blkdev(struct ssd_device *dev); +static int ssd_ioctl_common(struct ssd_device *dev, unsigned int cmd, unsigned long arg) +{ + void __user *argp = (void __user *)arg; + void __user *buf = NULL; + void *kbuf = NULL; + int ret = 0; + + switch (cmd) { + case SSD_CMD_GET_PROTOCOL_INFO: + if (copy_to_user(argp, &dev->protocol_info, sizeof(struct ssd_protocol_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_GET_HW_INFO: + if (copy_to_user(argp, &dev->hw_info, sizeof(struct ssd_hw_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_GET_ROM_INFO: + if (copy_to_user(argp, &dev->rom_info, sizeof(struct ssd_rom_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_GET_SMART: { + struct ssd_smart smart; + int i; + + memcpy(&smart, &dev->smart, sizeof(struct ssd_smart)); + + mutex_lock(&dev->gd_mutex); + ssd_update_smart(dev, &smart); + mutex_unlock(&dev->gd_mutex); + + /* combine the volatile log info */ + if (dev->log_info.nr_log) { + for (i=0; ilog_info.stat[i]; + } + } + + if (copy_to_user(argp, &smart, sizeof(struct ssd_smart))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_GET_IDX: + if (copy_to_user(argp, &dev->idx, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_GET_AMOUNT: { + int nr_ssd = atomic_read(&ssd_nr); + if (copy_to_user(argp, &nr_ssd, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_TO_INFO: { + int tocnt = atomic_read(&dev->tocnt); + + if (copy_to_user(argp, &tocnt, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_DRV_VER: { + char ver[] = DRIVER_VERSION; + int len = sizeof(ver); + + if (len > (DRIVER_VERSION_LEN - 1)) { + len = (DRIVER_VERSION_LEN - 1); + } + if (copy_to_user(argp, ver, len)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_BBACC_INFO: { + struct ssd_acc_info acc; + + mutex_lock(&dev->fw_mutex); + ret = ssd_bb_acc(dev, &acc); + mutex_unlock(&dev->fw_mutex); + if (ret) { + break; + } + + if (copy_to_user(argp, &acc, sizeof(struct ssd_acc_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_ECACC_INFO: { + struct ssd_acc_info acc; + + mutex_lock(&dev->fw_mutex); + ret = ssd_ec_acc(dev, &acc); + mutex_unlock(&dev->fw_mutex); + if (ret) { + break; + } + + if (copy_to_user(argp, &acc, sizeof(struct ssd_acc_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_HW_INFO_EXT: + if (copy_to_user(argp, &dev->hw_info_ext, sizeof(struct ssd_hw_info_extend))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_REG_READ: { + struct ssd_reg_op_info reg_info; + + if (copy_from_user(®_info, argp, sizeof(struct ssd_reg_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + if (reg_info.offset > dev->mmio_len-sizeof(uint32_t)) { + ret = -EINVAL; + break; + } + + reg_info.value = ssd_reg32_read(dev->ctrlp + reg_info.offset); + if (copy_to_user(argp, ®_info, sizeof(struct ssd_reg_op_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_REG_WRITE: { + struct ssd_reg_op_info reg_info; + + if (copy_from_user(®_info, argp, sizeof(struct ssd_reg_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + if (reg_info.offset > dev->mmio_len-sizeof(uint32_t)) { + ret = -EINVAL; + break; + } + + ssd_reg32_write(dev->ctrlp + reg_info.offset, reg_info.value); + + break; + } + + case SSD_CMD_SPI_READ: { + struct ssd_spi_op_info spi_info; + uint32_t off, size; + + if (copy_from_user(&spi_info, argp, sizeof(struct ssd_spi_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + off = spi_info.off; + size = spi_info.len; + buf = spi_info.buf; + + if (size > dev->rom_info.size || 0 == size || (off + size) > dev->rom_info.size) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(size, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + ret = ssd_spi_page_read(dev, kbuf, off, size); + if (ret) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, size)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_SPI_WRITE: { + struct ssd_spi_op_info spi_info; + uint32_t off, size; + + if (copy_from_user(&spi_info, argp, sizeof(struct ssd_spi_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + off = spi_info.off; + size = spi_info.len; + buf = spi_info.buf; + + if (size > dev->rom_info.size || 0 == size || (off + size) > dev->rom_info.size) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(size, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + if (copy_from_user(kbuf, buf, size)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + ret = ssd_spi_page_write(dev, kbuf, off, size); + if (ret) { + kfree(kbuf); + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_SPI_ERASE: { + struct ssd_spi_op_info spi_info; + uint32_t off; + + if (copy_from_user(&spi_info, argp, sizeof(struct ssd_spi_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + off = spi_info.off; + + if ((off + dev->rom_info.block_size) > dev->rom_info.size) { + ret = -EINVAL; + break; + } + + ret = ssd_spi_block_erase(dev, off); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_I2C_READ: { + struct ssd_i2c_op_info i2c_info; + uint8_t saddr; + uint8_t rsize; + + if (copy_from_user(&i2c_info, argp, sizeof(struct ssd_i2c_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = i2c_info.saddr; + rsize = i2c_info.rsize; + buf = i2c_info.rbuf; + + if (rsize <= 0 || rsize > SSD_I2C_MAX_DATA) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(rsize, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + ret = ssd_i2c_read(dev, saddr, rsize, kbuf); + if (ret) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, rsize)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_I2C_WRITE: { + struct ssd_i2c_op_info i2c_info; + uint8_t saddr; + uint8_t wsize; + + if (copy_from_user(&i2c_info, argp, sizeof(struct ssd_i2c_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = i2c_info.saddr; + wsize = i2c_info.wsize; + buf = i2c_info.wbuf; + + if (wsize <= 0 || wsize > SSD_I2C_MAX_DATA) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(wsize, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + if (copy_from_user(kbuf, buf, wsize)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + ret = ssd_i2c_write(dev, saddr, wsize, kbuf); + if (ret) { + kfree(kbuf); + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_I2C_WRITE_READ: { + struct ssd_i2c_op_info i2c_info; + uint8_t saddr; + uint8_t wsize; + uint8_t rsize; + uint8_t size; + + if (copy_from_user(&i2c_info, argp, sizeof(struct ssd_i2c_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = i2c_info.saddr; + wsize = i2c_info.wsize; + rsize = i2c_info.rsize; + buf = i2c_info.wbuf; + + if (wsize <= 0 || wsize > SSD_I2C_MAX_DATA) { + ret = -EINVAL; + break; + } + + if (rsize <= 0 || rsize > SSD_I2C_MAX_DATA) { + ret = -EINVAL; + break; + } + + size = wsize + rsize; + + kbuf = kmalloc(size, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + if (copy_from_user((kbuf + rsize), buf, wsize)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + buf = i2c_info.rbuf; + + ret = ssd_i2c_write_read(dev, saddr, wsize, (kbuf + rsize), rsize, kbuf); + if (ret) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, rsize)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + kfree(kbuf); + ret = -EFAULT; + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_SMBUS_SEND_BYTE: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + buf = smbus_info.buf; + size = 1; + + if (copy_from_user(smb_data, buf, size)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = ssd_smbus_send_byte(dev, saddr, smb_data); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_SMBUS_RECEIVE_BYTE: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + buf = smbus_info.buf; + size = 1; + + ret = ssd_smbus_receive_byte(dev, saddr, smb_data); + if (ret) { + break; + } + + if (copy_to_user(buf, smb_data, size)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_SMBUS_WRITE_BYTE: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = 1; + + if (copy_from_user(smb_data, buf, size)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = ssd_smbus_write_byte(dev, saddr, command, smb_data); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_SMBUS_READ_BYTE: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = 1; + + ret = ssd_smbus_read_byte(dev, saddr, command, smb_data); + if (ret) { + break; + } + + if (copy_to_user(buf, smb_data, size)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_SMBUS_WRITE_WORD: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = 2; + + if (copy_from_user(smb_data, buf, size)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = ssd_smbus_write_word(dev, saddr, command, smb_data); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_SMBUS_READ_WORD: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = 2; + + ret = ssd_smbus_read_word(dev, saddr, command, smb_data); + if (ret) { + break; + } + + if (copy_to_user(buf, smb_data, size)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_SMBUS_WRITE_BLOCK: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = smbus_info.size; + + if (size > SSD_SMBUS_BLOCK_MAX) { + ret = -EINVAL; + break; + } + + if (copy_from_user(smb_data, buf, size)) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = ssd_smbus_write_block(dev, saddr, command, size, smb_data); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_SMBUS_READ_BLOCK: { + struct ssd_smbus_op_info smbus_info; + uint8_t smb_data[SSD_SMBUS_BLOCK_MAX]; + uint8_t saddr; + uint8_t command; + uint8_t size; + + if (copy_from_user(&smbus_info, argp, sizeof(struct ssd_smbus_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + saddr = smbus_info.saddr; + command = smbus_info.cmd; + buf = smbus_info.buf; + size = smbus_info.size; + + if (size > SSD_SMBUS_BLOCK_MAX) { + ret = -EINVAL; + break; + } + + ret = ssd_smbus_read_block(dev, saddr, command, size, smb_data); + if (ret) { + break; + } + + if (copy_to_user(buf, smb_data, size)) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_BM_GET_VER: { + uint16_t ver; + + ret = ssd_bm_get_version(dev, &ver); + if (ret) { + break; + } + + if (copy_to_user(argp, &ver, sizeof(uint16_t))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_BM_GET_NR_CAP: { + int nr_cap; + + ret = ssd_bm_nr_cap(dev, &nr_cap); + if (ret) { + break; + } + + if (copy_to_user(argp, &nr_cap, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_BM_CAP_LEARNING: { + ret = ssd_bm_enter_cap_learning(dev); + + if (ret) { + break; + } + + break; + } + + case SSD_CMD_CAP_LEARN: { + uint32_t cap = 0; + + ret = ssd_cap_learn(dev, &cap); + if (ret) { + break; + } + + if (copy_to_user(argp, &cap, sizeof(uint32_t))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_GET_CAP_STATUS: { + int cap_status = 0; + + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + cap_status = 1; + } + + if (copy_to_user(argp, &cap_status, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_RAM_READ: { + struct ssd_ram_op_info ram_info; + uint64_t ofs; + uint32_t length; + size_t rlen, len = dev->hw_info.ram_max_len; + int ctrl_idx; + + if (copy_from_user(&ram_info, argp, sizeof(struct ssd_ram_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ofs = ram_info.start; + length = ram_info.length; + buf = ram_info.buf; + ctrl_idx = ram_info.ctrl_idx; + + if (ofs >= dev->hw_info.ram_size || length > dev->hw_info.ram_size || 0 == length || (ofs + length) > dev->hw_info.ram_size) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(len, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + for (rlen=0; rlenhw_info.ram_max_len; + int ctrl_idx; + + if (copy_from_user(&ram_info, argp, sizeof(struct ssd_ram_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + ofs = ram_info.start; + length = ram_info.length; + buf = ram_info.buf; + ctrl_idx = ram_info.ctrl_idx; + + if (ofs >= dev->hw_info.ram_size || length > dev->hw_info.ram_size || 0 == length || (ofs + length) > dev->hw_info.ram_size) { + ret = -EINVAL; + break; + } + + kbuf = kmalloc(len, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + for (wlen=0; wlenname); + ret = -EFAULT; + break; + } + + chip_no = flash_info.flash; + chip_ce = flash_info.chip; + ctrl_idx = flash_info.ctrl_idx; + buf = flash_info.buf; + length = dev->hw_info.id_size; + + //kbuf = kmalloc(length, GFP_KERNEL); + kbuf = kmalloc(SSD_NAND_ID_BUFF_SZ, GFP_KERNEL); //xx + if (!kbuf) { + ret = -ENOMEM; + break; + } + memset(kbuf, 0, length); + + ret = ssd_nand_read_id(dev, kbuf, chip_no, chip_ce, ctrl_idx); + if (ret) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, length)) { + kfree(kbuf); + ret = -EFAULT; + break; + } + + kfree(kbuf); + + break; + } + + case SSD_CMD_NAND_READ: { //with oob + struct ssd_flash_op_info flash_info; + uint32_t length; + int flash, chip, page, ctrl_idx; + int err = 0; + + if (copy_from_user(&flash_info, argp, sizeof(struct ssd_flash_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + flash = flash_info.flash; + chip = flash_info.chip; + page = flash_info.page; + buf = flash_info.buf; + ctrl_idx = flash_info.ctrl_idx; + + length = dev->hw_info.page_size + dev->hw_info.oob_size; + + kbuf = kmalloc(length, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + err = ret = ssd_nand_read_w_oob(dev, kbuf, flash, chip, page, 1, ctrl_idx); + if (ret && (-EIO != ret)) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, length)) { + kfree(kbuf); + ret = -EFAULT; + break; + } + + ret = err; + + kfree(kbuf); + break; + } + + case SSD_CMD_NAND_WRITE: { + struct ssd_flash_op_info flash_info; + int flash, chip, page, ctrl_idx; + uint32_t length; + + if (copy_from_user(&flash_info, argp, sizeof(struct ssd_flash_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + flash = flash_info.flash; + chip = flash_info.chip; + page = flash_info.page; + buf = flash_info.buf; + ctrl_idx = flash_info.ctrl_idx; + + length = dev->hw_info.page_size + dev->hw_info.oob_size; + + kbuf = kmalloc(length, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + if (copy_from_user(kbuf, buf, length)) { + kfree(kbuf); + ret = -EFAULT; + break; + } + + ret = ssd_nand_write(dev, kbuf, flash, chip, page, 1, ctrl_idx); + if (ret) { + kfree(kbuf); + break; + } + + kfree(kbuf); + break; + } + + case SSD_CMD_NAND_ERASE: { + struct ssd_flash_op_info flash_info; + int flash, chip, page, ctrl_idx; + + if (copy_from_user(&flash_info, argp, sizeof(struct ssd_flash_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + flash = flash_info.flash; + chip = flash_info.chip; + page = flash_info.page; + ctrl_idx = flash_info.ctrl_idx; + + if ((page % dev->hw_info.page_count) != 0) { + ret = -EINVAL; + break; + } + + //hio_warn("erase fs = %llx\n", ofs); + ret = ssd_nand_erase(dev, flash, chip, page, ctrl_idx); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_NAND_READ_EXT: { //ingore EIO + struct ssd_flash_op_info flash_info; + uint32_t length; + int flash, chip, page, ctrl_idx; + + if (copy_from_user(&flash_info, argp, sizeof(struct ssd_flash_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + flash = flash_info.flash; + chip = flash_info.chip; + page = flash_info.page; + buf = flash_info.buf; + ctrl_idx = flash_info.ctrl_idx; + + length = dev->hw_info.page_size + dev->hw_info.oob_size; + + kbuf = kmalloc(length, GFP_KERNEL); + if (!kbuf) { + ret = -ENOMEM; + break; + } + + ret = ssd_nand_read_w_oob(dev, kbuf, flash, chip, page, 1, ctrl_idx); + if (-EIO == ret) { //ingore EIO + ret = 0; + } + if (ret) { + kfree(kbuf); + break; + } + + if (copy_to_user(buf, kbuf, length)) { + kfree(kbuf); + ret = -EFAULT; + break; + } + + kfree(kbuf); + break; + } + + case SSD_CMD_UPDATE_BBT: { + struct ssd_flash_op_info flash_info; + int ctrl_idx, flash; + + if (copy_from_user(&flash_info, argp, sizeof(struct ssd_flash_op_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ctrl_idx = flash_info.ctrl_idx; + flash = flash_info.flash; + ret = ssd_update_bbt(dev, flash, ctrl_idx); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_CLEAR_ALARM: + ssd_clear_alarm(dev); + break; + + case SSD_CMD_SET_ALARM: + ssd_set_alarm(dev); + break; + + case SSD_CMD_RESET: + ret = ssd_do_reset(dev); + break; + + case SSD_CMD_RELOAD_FW: + dev->reload_fw = 1; + dev->has_non_0x98_reg_access = 1; + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FLAG); + } else if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_1_1) { + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FW); + + } + break; + + case SSD_CMD_UNLOAD_DEV: { + if (atomic_read(&dev->refcnt)) { + ret = -EBUSY; + break; + } + + /* save smart */ + ssd_save_smart(dev); + + ret = ssd_flush(dev); + if (ret) { + break; + } + + /* cleanup the block device */ + if (test_and_clear_bit(SSD_INIT_BD, &dev->state)) { + mutex_lock(&dev->gd_mutex); + ssd_cleanup_blkdev(dev); + ssd_cleanup_queue(dev); + mutex_unlock(&dev->gd_mutex); + } + + break; + } + + case SSD_CMD_LOAD_DEV: { + + if (test_bit(SSD_INIT_BD, &dev->state)) { + ret = -EINVAL; + break; + } + + ret = ssd_init_smart(dev); + if (ret) { + hio_warn("%s: init info: failed\n", dev->name); + break; + } + + ret = ssd_init_queue(dev); + if (ret) { + hio_warn("%s: init queue failed\n", dev->name); + break; + } + ret = ssd_init_blkdev(dev); + if (ret) { + hio_warn("%s: register block device: failed\n", dev->name); + break; + } + (void)test_and_set_bit(SSD_INIT_BD, &dev->state); + + break; + } + + case SSD_CMD_UPDATE_VP: { + uint32_t val; + uint32_t new_vp, new_vp1 = 0; + + if (test_bit(SSD_INIT_BD, &dev->state)) { + ret = -EINVAL; + break; + } + + if (copy_from_user(&new_vp, argp, sizeof(uint32_t))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + if (new_vp > dev->hw_info.max_valid_pages || new_vp <= 0) { + ret = -EINVAL; + break; + } + + while (new_vp <= dev->hw_info.max_valid_pages) { + ssd_reg32_write(dev->ctrlp + SSD_VALID_PAGES_REG, new_vp); + msleep(10); + val = ssd_reg32_read(dev->ctrlp + SSD_VALID_PAGES_REG); + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + new_vp1 = val & 0x3FF; + } else { + new_vp1 = val & 0x7FFF; + } + + if (new_vp1 == new_vp) { + break; + } + + new_vp++; + /*if (new_vp == dev->hw_info.valid_pages) { + new_vp++; + }*/ + } + + if (new_vp1 != new_vp || new_vp > dev->hw_info.max_valid_pages) { + /* restore */ + ssd_reg32_write(dev->ctrlp + SSD_VALID_PAGES_REG, dev->hw_info.valid_pages); + ret = -EINVAL; + break; + } + + if (copy_to_user(argp, &new_vp, sizeof(uint32_t))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ssd_reg32_write(dev->ctrlp + SSD_VALID_PAGES_REG, dev->hw_info.valid_pages); + ret = -EFAULT; + break; + } + + /* new */ + dev->hw_info.valid_pages = new_vp; + dev->hw_info.size = (uint64_t)dev->hw_info.valid_pages * dev->hw_info.page_size; + dev->hw_info.size *= (dev->hw_info.block_count - dev->hw_info.reserved_blks); + dev->hw_info.size *= ((uint64_t)dev->hw_info.nr_data_ch * (uint64_t)dev->hw_info.nr_chip * (uint64_t)dev->hw_info.nr_ctrl); + + break; + } + + case SSD_CMD_FULL_RESET: { + ret = ssd_full_reset(dev); + break; + } + + case SSD_CMD_GET_NR_LOG: { + if (copy_to_user(argp, &dev->internal_log.nr_log, sizeof(dev->internal_log.nr_log))) { + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_LOG: { + uint32_t length = dev->rom_info.log_sz; + + buf = argp; + + if (copy_to_user(buf, dev->internal_log.log, length)) { + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_LOG_LEVEL: { + int level = 0; + if (copy_from_user(&level, argp, sizeof(int))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + if (level >= SSD_LOG_NR_LEVEL || level < SSD_LOG_LEVEL_INFO) { + level = SSD_LOG_LEVEL_ERR; + } + + //just for showing log, no need to protect + log_level = level; + break; + } + + case SSD_CMD_OT_PROTECT: { + int protect = 0; + + if (copy_from_user(&protect, argp, sizeof(int))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ssd_set_ot_protect(dev, !!protect); + break; + } + + case SSD_CMD_GET_OT_STATUS: { + int status = ssd_get_ot_status(dev, &status); + + if (copy_to_user(argp, &status, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_CLEAR_LOG: { + ret = ssd_clear_log(dev); + break; + } + + case SSD_CMD_CLEAR_SMART: { + ret = ssd_clear_smart(dev); + break; + } + + case SSD_CMD_CLEAR_WARNING: { + ret = ssd_clear_warning(dev); + break; + } + + case SSD_CMD_SW_LOG: { + struct ssd_sw_log_info sw_log; + + if (copy_from_user(&sw_log, argp, sizeof(struct ssd_sw_log_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = ssd_gen_swlog(dev, sw_log.event, sw_log.data); + break; + } + + case SSD_CMD_GET_LABEL: { + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + ret = -EINVAL; + break; + } + + if (copy_to_user(argp, &dev->label, sizeof(struct ssd_label))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_VERSION: { + struct ssd_version_info ver; + + mutex_lock(&dev->fw_mutex); + ret = __ssd_get_version(dev, &ver); + mutex_unlock(&dev->fw_mutex); + if (ret) { + break; + } + + if (copy_to_user(argp, &ver, sizeof(struct ssd_version_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_TEMPERATURE: { + int temp; + + mutex_lock(&dev->fw_mutex); + ret = __ssd_get_temperature(dev, &temp); + mutex_unlock(&dev->fw_mutex); + if (ret) { + break; + } + + if (copy_to_user(argp, &temp, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_BMSTATUS: { + int status; + + mutex_lock(&dev->fw_mutex); + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + status = SSD_BMSTATUS_WARNING; + } else { + status = SSD_BMSTATUS_OK; + } + } else if(dev->protocol_info.ver > SSD_PROTOCOL_V3) { + ret = __ssd_bm_status(dev, &status); + } else { + status = SSD_BMSTATUS_OK; + } + mutex_unlock(&dev->fw_mutex); + if (ret) { + break; + } + + if (copy_to_user(argp, &status, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_GET_LABEL2: { + void *label; + int length; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + label = &dev->label; + length = sizeof(struct ssd_label); + } else { + label = &dev->labelv3; + length = sizeof(struct ssd_labelv3); + } + + if (copy_to_user(argp, label, length)) { + ret = -EFAULT; + break; + } + break; + } + + case SSD_CMD_FLUSH: + ret = ssd_flush(dev); + if (ret) { + hio_warn("%s: ssd_flush: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + case SSD_CMD_SAVE_MD: { + int save_md = 0; + + if (copy_from_user(&save_md, argp, sizeof(int))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + dev->save_md = !!save_md; + break; + } + + case SSD_CMD_SET_WMODE: { + int new_wmode = 0; + + if (copy_from_user(&new_wmode, argp, sizeof(int))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + ret = __ssd_set_wmode(dev, new_wmode); + if (ret) { + break; + } + + break; + } + + case SSD_CMD_GET_WMODE: { + if (copy_to_user(argp, &dev->wmode, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_GET_USER_WMODE: { + if (copy_to_user(argp, &dev->user_wmode, sizeof(int))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + break; + } + + case SSD_CMD_DEBUG: { + struct ssd_debug_info db_info; + + if (!finject) { + ret = -EOPNOTSUPP; + break; + } + + if (copy_from_user(&db_info, argp, sizeof(struct ssd_debug_info))) { + hio_warn("%s: copy_from_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + + if (db_info.type < SSD_DEBUG_NONE || db_info.type >= SSD_DEBUG_NR) { + ret = -EINVAL; + break; + } + + /* IO */ + if (db_info.type >= SSD_DEBUG_READ_ERR && db_info.type <= SSD_DEBUG_RW_ERR && + (db_info.data.loc.off + db_info.data.loc.len) > (dev->hw_info.size >> 9)) { + ret = -EINVAL; + break; + } + + memcpy(&dev->db_info, &db_info, sizeof(struct ssd_debug_info)); + +#ifdef SSD_OT_PROTECT + /* temperature */ + if (db_info.type == SSD_DEBUG_NONE) { + ssd_check_temperature(dev, SSD_OT_TEMP); + } else if (db_info.type == SSD_DEBUG_LOG) { + if (db_info.data.log.event == SSD_LOG_OVER_TEMP) { + dev->ot_delay = SSD_OT_DELAY; + } else if (db_info.data.log.event == SSD_LOG_NORMAL_TEMP) { + dev->ot_delay = 0; + } + } +#endif + + /* offline */ + if (db_info.type == SSD_DEBUG_OFFLINE) { + test_and_clear_bit(SSD_ONLINE, &dev->state); + } else if (db_info.type == SSD_DEBUG_NONE) { + (void)test_and_set_bit(SSD_ONLINE, &dev->state); + } + + /* log */ + if (db_info.type == SSD_DEBUG_LOG && dev->event_call && dev->gd) { + dev->event_call(dev->gd, db_info.data.log.event, 0); + } + + break; + } + + case SSD_CMD_DRV_PARAM_INFO: { + struct ssd_drv_param_info drv_param; + + memset(&drv_param, 0, sizeof(struct ssd_drv_param_info)); + + drv_param.mode = mode; + drv_param.status_mask = status_mask; + drv_param.int_mode = int_mode; + drv_param.threaded_irq = threaded_irq; + drv_param.log_level = log_level; + drv_param.wmode = wmode; + drv_param.ot_protect = ot_protect; + drv_param.finject = finject; + + if (copy_to_user(argp, &drv_param, sizeof(struct ssd_drv_param_info))) { + hio_warn("%s: copy_to_user: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + } + + default: + ret = -EINVAL; + break; + } + + return ret; +} + + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)) +static int ssd_block_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct ssd_device *dev; + void __user *argp = (void __user *)arg; + int ret = 0; + + if (!inode) { + return -EINVAL; + } + dev = inode->i_bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } +#else +static int ssd_block_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct ssd_device *dev; + void __user *argp = (void __user *)arg; + int ret = 0; + + if (!bdev) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } +#endif + + switch (cmd) { + case HDIO_GETGEO: { + struct hd_geometry geo; + geo.cylinders = (dev->hw_info.size & ~0x3f) >> 6; + geo.heads = 4; + geo.sectors = 16; +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)) + geo.start = get_start_sect(inode->i_bdev); +#else + geo.start = get_start_sect(bdev); +#endif + if (copy_to_user(argp, &geo, sizeof(geo))) { + ret = -EFAULT; + break; + } + + break; + } + + case BLKFLSBUF: + ret = ssd_flush(dev); + if (ret) { + hio_warn("%s: ssd_flush: failed\n", dev->name); + ret = -EFAULT; + break; + } + break; + + default: + if (!dev->slave) { + ret = ssd_ioctl_common(dev, cmd, arg); + } else { + ret = -EFAULT; + } + break; + } + + return ret; +} + + +static void ssd_free_dev(struct kref *kref) +{ + struct ssd_device *dev; + + if (!kref) { + return; + } + + dev = container_of(kref, struct ssd_device, kref); + + put_disk(dev->gd); + + ssd_put_index(dev->slave, dev->idx); + + kfree(dev); +} + +static void ssd_put(struct ssd_device *dev) +{ + kref_put(&dev->kref, ssd_free_dev); +} + +static int ssd_get(struct ssd_device *dev) +{ + kref_get(&dev->kref); + return 0; +} + +/* block device */ +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)) +static int ssd_block_open(struct inode *inode, struct file *filp) +{ + struct ssd_device *dev; + + if (!inode) { + return -EINVAL; + } + + dev = inode->i_bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } +#else +static int ssd_block_open(struct block_device *bdev, fmode_t mode) +{ + struct ssd_device *dev; + + if (!bdev) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } +#endif + + /*if (!try_module_get(dev->owner)) + return -ENODEV; + */ + + ssd_get(dev); + + atomic_inc(&dev->refcnt); + + return 0; +} + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)) +static int ssd_block_release(struct inode *inode, struct file *filp) +{ + struct ssd_device *dev; + + if (!inode) { + return -EINVAL; + } + + dev = inode->i_bdev->bd_disk->private_data; + if (!dev) { + return -EINVAL; + } +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(3,9,0)) +static int ssd_block_release(struct gendisk *disk, fmode_t mode) +{ + struct ssd_device *dev; + + if (!disk) { + return -EINVAL; + } + + dev = disk->private_data; + if (!dev) { + return -EINVAL; + } +#else +static void ssd_block_release(struct gendisk *disk, fmode_t mode) +{ + struct ssd_device *dev; + + if (!disk) { + return; + } + + dev = disk->private_data; + if (!dev) { + return; + } +#endif + + atomic_dec(&dev->refcnt); + + ssd_put(dev); + + //module_put(dev->owner); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3,9,0)) + return 0; +#endif +} + +static struct block_device_operations ssd_fops = { + .owner = THIS_MODULE, + .open = ssd_block_open, + .release = ssd_block_release, + .ioctl = ssd_block_ioctl, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)) + .getgeo = ssd_block_getgeo, +#endif +}; + +static void ssd_init_trim(ssd_device_t *dev) +{ +#if (defined SSD_TRIM && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32))) + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + return; + } + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, dev->rq); + +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)) || (defined RHEL_MAJOR && RHEL_MAJOR >= 6)) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)) + dev->rq->limits.discard_zeroes_data = 1; +#endif + dev->rq->limits.discard_alignment = 4096; + dev->rq->limits.discard_granularity = 4096; +#endif + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2_4) { + dev->rq->limits.max_discard_sectors = dev->hw_info.sg_max_sec; + } else { + dev->rq->limits.max_discard_sectors = (dev->hw_info.sg_max_sec) * (dev->hw_info.cmd_max_sg); + } +#endif +} + +static void ssd_cleanup_queue(struct ssd_device *dev) +{ + ssd_wait_io(dev); + + blk_cleanup_queue(dev->rq); + dev->rq = NULL; +} + +static int ssd_init_queue(struct ssd_device *dev) +{ + dev->rq = blk_alloc_queue(GFP_KERNEL); + if (dev->rq == NULL) { + hio_warn("%s: alloc queue: failed\n ", dev->name); + goto out_init_queue; + } + + /* must be first */ + blk_queue_make_request(dev->rq, ssd_make_request); + +#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) && !(defined RHEL_MAJOR && RHEL_MAJOR == 6)) + blk_queue_max_hw_segments(dev->rq, dev->hw_info.cmd_max_sg); + blk_queue_max_phys_segments(dev->rq, dev->hw_info.cmd_max_sg); + blk_queue_max_sectors(dev->rq, dev->hw_info.sg_max_sec); +#else + blk_queue_max_segments(dev->rq, dev->hw_info.cmd_max_sg); + blk_queue_max_hw_sectors(dev->rq, dev->hw_info.sg_max_sec); +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) + blk_queue_hardsect_size(dev->rq, 512); +#else + blk_queue_logical_block_size(dev->rq, 512); +#endif + /* not work for make_request based drivers(bio) */ + blk_queue_max_segment_size(dev->rq, dev->hw_info.sg_max_sec << 9); + + blk_queue_bounce_limit(dev->rq, BLK_BOUNCE_HIGH); + + dev->rq->queuedata = dev; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + blk_queue_issue_flush_fn(dev->rq, ssd_issue_flush_fn); +#endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, dev->rq); +#endif + + ssd_init_trim(dev); + + return 0; + +out_init_queue: + return -ENOMEM; +} + +static void ssd_cleanup_blkdev(struct ssd_device *dev) +{ + del_gendisk(dev->gd); +} + +static int ssd_init_blkdev(struct ssd_device *dev) +{ + if (dev->gd) { + put_disk(dev->gd); + } + + dev->gd = alloc_disk(ssd_minors); + if (!dev->gd) { + hio_warn("%s: alloc_disk fail\n", dev->name); + goto out_alloc_gd; + } + dev->gd->major = dev->major; + dev->gd->first_minor = dev->idx * ssd_minors; + dev->gd->fops = &ssd_fops; + dev->gd->queue = dev->rq; + dev->gd->private_data = dev; + + snprintf (dev->gd->disk_name, sizeof(dev->gd->disk_name), "%s", dev->name); + + set_capacity(dev->gd, dev->hw_info.size >> 9); + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0)) + device_add_disk(&dev->pdev->dev, dev->gd); +#else + dev->gd->driverfs_dev = &dev->pdev->dev; + add_disk(dev->gd); +#endif + + return 0; + +out_alloc_gd: + return -ENOMEM; +} + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,10)) +static int ssd_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +#else +static long ssd_ioctl(struct file *file, + unsigned int cmd, unsigned long arg) +#endif +{ + struct ssd_device *dev; + + if (!file) { + return -EINVAL; + } + + dev = file->private_data; + if (!dev) { + return -EINVAL; + } + + return (long)ssd_ioctl_common(dev, cmd, arg); +} + +static int ssd_open(struct inode *inode, struct file *file) +{ + struct ssd_device *dev = NULL; + struct ssd_device *n = NULL; + int idx; + int ret = -ENODEV; + + if (!inode || !file) { + return -EINVAL; + } + + idx = iminor(inode); + + list_for_each_entry_safe(dev, n, &ssd_list, list) { + if (dev->idx == idx) { + ret = 0; + break; + } + } + + if (ret) { + return ret; + } + + file->private_data = dev; + + ssd_get(dev); + + return 0; +} + +static int ssd_release(struct inode *inode, struct file *file) +{ + struct ssd_device *dev; + + if (!file) { + return -EINVAL; + } + + dev = file->private_data; + if (!dev) { + return -EINVAL; + } + + ssd_put(dev); + + file->private_data = NULL; + + return 0; +} + +static int ssd_reload_ssd_ptr(struct ssd_device *dev) +{ + ssd_reset_resp_ptr(dev); + + //update base reg address + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3) { + + ssd_reg_write(dev->ctrlp + SSD_MSG_BASE_REG, dev->msg_base_dma); + } + + //update response base reg address + ssd_reg_write(dev->ctrlp + SSD_RESP_FIFO_REG, dev->resp_msg_base_dma); + ssd_reg_write(dev->ctrlp + SSD_RESP_PTR_REG, dev->resp_ptr_base_dma); + + return 0; +} + +static struct file_operations ssd_cfops = { + .owner = THIS_MODULE, + .open = ssd_open, + .release = ssd_release, +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,10)) + .ioctl = ssd_ioctl, +#else + .unlocked_ioctl = ssd_ioctl, +#endif +}; + +static void ssd_cleanup_chardev(struct ssd_device *dev) +{ + if (dev->slave) { + return; + } + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) + class_simple_device_remove(MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx)); + devfs_remove("c%s", dev->name); +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,14)) + class_device_destroy(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx)); + devfs_remove("c%s", dev->name); +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,17)) + class_device_destroy(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx)); + devfs_remove("c%s", dev->name); +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) + class_device_destroy(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx)); +#else + device_destroy(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx)); +#endif +} + +static int ssd_init_chardev(struct ssd_device *dev) +{ + int ret = 0; + + if (dev->slave) { + return 0; + } + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) + ret = devfs_mk_cdev(MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), S_IFCHR|S_IRUSR|S_IWUSR, "c%s", dev->name); + if (ret) { + goto out; + } + class_simple_device_add(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +out: +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,14)) + ret = devfs_mk_cdev(MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), S_IFCHR|S_IRUSR|S_IWUSR, "c%s", dev->name); + if (ret) { + goto out; + } + class_device_create(ssd_class, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +out: +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,17)) + ret = devfs_mk_cdev(MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), S_IFCHR|S_IRUSR|S_IWUSR, "c%s", dev->name); + if (ret) { + goto out; + } + class_device_create(ssd_class, NULL, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +out: +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) + class_device_create(ssd_class, NULL, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)) + device_create(ssd_class, NULL, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), "c%s", dev->name); +#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)) + device_create_drvdata(ssd_class, NULL, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +#else + device_create(ssd_class, NULL, MKDEV((dev_t)dev->cmajor, (dev_t)dev->idx), NULL, "c%s", dev->name); +#endif + + return ret; +} + +static int ssd_check_hw(struct ssd_device *dev) +{ + uint32_t test_data = 0x55AA5AA5; + uint32_t read_data; + + ssd_reg32_write(dev->ctrlp + SSD_BRIDGE_TEST_REG, test_data); + read_data = ssd_reg32_read(dev->ctrlp + SSD_BRIDGE_TEST_REG); + if (read_data != ~(test_data)) { + //hio_warn("%s: check bridge error: %#x\n", dev->name, read_data); + return -1; + } + + return 0; +} + +static int ssd_check_fw(struct ssd_device *dev) +{ + uint32_t val = 0; + int i; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_3) { + return 0; + } + + for (i=0; ictrlp + SSD_HW_STATUS_REG); + if ((val & 0x1) && ((val >> 8) & 0x1)) { + break; + } + + msleep(SSD_INIT_WAIT); + } + + if (!(val & 0x1)) { + /* controller fw status */ + hio_warn("%s: controller firmware load failed: %#x\n", dev->name, val); + return -1; + } else if (!((val >> 8) & 0x1)) { + /* controller state */ + hio_warn("%s: controller state error: %#x\n", dev->name, val); + return -1; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_RELOAD_FW_REG); + if (val) { + dev->reload_fw = 1; + } + + return 0; +} + +static int ssd_init_fw_info(struct ssd_device *dev) +{ + uint32_t val; + int ret = 0; + + val = ssd_reg32_read(dev->ctrlp + SSD_BRIDGE_VER_REG); + dev->hw_info.bridge_ver = val & 0xFFF; + if (dev->hw_info.bridge_ver < SSD_FW_MIN) { + hio_warn("%s: bridge firmware version %03X is not supported\n", dev->name, dev->hw_info.bridge_ver); + return -EINVAL; + } + hio_info("%s: bridge firmware version: %03X\n", dev->name, dev->hw_info.bridge_ver); + + ret = ssd_check_fw(dev); + if (ret) { + goto out; + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +static int ssd_check_clock(struct ssd_device *dev) +{ + uint32_t val; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_3) { + return 0; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_HW_STATUS_REG); + + /* clock status */ + if (!((val >> 4 ) & 0x1)) { + if (!test_and_set_bit(SSD_HWMON_CLOCK(SSD_CLOCK_166M_LOST), &dev->hwmon)) { + hio_warn("%s: 166MHz clock losed: %#x\n", dev->name, val); + ssd_gen_swlog(dev, SSD_LOG_CLK_FAULT, val); + } + ret = -1; + } + + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + if (!((val >> 5 ) & 0x1)) { + if (!test_and_set_bit(SSD_HWMON_CLOCK(SSD_CLOCK_166M_SKEW), &dev->hwmon)) { + hio_warn("%s: 166MHz clock is skew: %#x\n", dev->name, val); + ssd_gen_swlog(dev, SSD_LOG_CLK_FAULT, val); + } + ret = -1; + } + if (!((val >> 6 ) & 0x1)) { + if (!test_and_set_bit(SSD_HWMON_CLOCK(SSD_CLOCK_156M_LOST), &dev->hwmon)) { + hio_warn("%s: 156.25MHz clock lost: %#x\n", dev->name, val); + ssd_gen_swlog(dev, SSD_LOG_CLK_FAULT, val); + } + ret = -1; + } + if (!((val >> 7 ) & 0x1)) { + if (!test_and_set_bit(SSD_HWMON_CLOCK(SSD_CLOCK_156M_SKEW), &dev->hwmon)) { + hio_warn("%s: 156.25MHz clock is skew: %#x\n", dev->name, val); + ssd_gen_swlog(dev, SSD_LOG_CLK_FAULT, val); + } + ret = -1; + } + } + + return ret; +} + +static int ssd_check_volt(struct ssd_device *dev) +{ + int i = 0; + uint64_t val; + uint32_t adc_val; + int ret =0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + for (i=0; ihw_info.nr_ctrl; i++) { + /* 1.0v */ + if (!test_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V0), &dev->hwmon)) { + val = ssd_reg_read(dev->ctrlp + SSD_FPGA_1V0_REG0 + i * SSD_CTRL_REG_ZONE_SZ); + adc_val = SSD_FPGA_VOLT_MAX(val); + if (adc_val < SSD_FPGA_1V0_ADC_MIN || adc_val > SSD_FPGA_1V0_ADC_MAX) { + (void)test_and_set_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V0), &dev->hwmon); + hio_warn("%s: controller %d 1.0V fault: %d mV.\n", dev->name, i, SSD_FPGA_VOLT(adc_val)); + ssd_gen_swlog(dev, SSD_LOG_VOLT_FAULT, SSD_VOLT_LOG_DATA(SSD_FPGA_1V0, i, adc_val)); + ret = -1; + } + + adc_val = SSD_FPGA_VOLT_MIN(val); + if (adc_val < SSD_FPGA_1V0_ADC_MIN || adc_val > SSD_FPGA_1V0_ADC_MAX) { + (void)test_and_set_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V0), &dev->hwmon); + hio_warn("%s: controller %d 1.0V fault: %d mV.\n", dev->name, i, SSD_FPGA_VOLT(adc_val)); + ssd_gen_swlog(dev, SSD_LOG_VOLT_FAULT, SSD_VOLT_LOG_DATA(SSD_FPGA_1V0, i, adc_val)); + ret = -2; + } + } + + /* 1.8v */ + if (!test_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V8), &dev->hwmon)) { + val = ssd_reg_read(dev->ctrlp + SSD_FPGA_1V8_REG0 + i * SSD_CTRL_REG_ZONE_SZ); + adc_val = SSD_FPGA_VOLT_MAX(val); + if (adc_val < SSD_FPGA_1V8_ADC_MIN || adc_val > SSD_FPGA_1V8_ADC_MAX) { + (void)test_and_set_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V8), &dev->hwmon); + hio_warn("%s: controller %d 1.8V fault: %d mV.\n", dev->name, i, SSD_FPGA_VOLT(adc_val)); + ssd_gen_swlog(dev, SSD_LOG_VOLT_FAULT, SSD_VOLT_LOG_DATA(SSD_FPGA_1V8, i, adc_val)); + ret = -3; + } + + adc_val = SSD_FPGA_VOLT_MIN(val); + if (adc_val < SSD_FPGA_1V8_ADC_MIN || adc_val > SSD_FPGA_1V8_ADC_MAX) { + (void)test_and_set_bit(SSD_HWMON_FPGA(i, SSD_FPGA_1V8), &dev->hwmon); + hio_warn("%s: controller %d 1.8V fault: %d mV.\n", dev->name, i, SSD_FPGA_VOLT(adc_val)); + ssd_gen_swlog(dev, SSD_LOG_VOLT_FAULT, SSD_VOLT_LOG_DATA(SSD_FPGA_1V8, i, adc_val)); + ret = -4; + } + } + } + + return ret; +} + +static int ssd_check_reset_sync(struct ssd_device *dev) +{ + uint32_t val; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_3) { + return 0; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_HW_STATUS_REG); + if (!((val >> 8) & 0x1)) { + /* controller state */ + hio_warn("%s: controller state error: %#x\n", dev->name, val); + return -1; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return 0; + } + + if (((val >> 9 ) & 0x1)) { + hio_warn("%s: controller reset asynchronously: %#x\n", dev->name, val); + ssd_gen_swlog(dev, SSD_LOG_CTRL_RST_SYNC, val); + return -1; + } + + return 0; +} + +static int ssd_check_hw_bh(struct ssd_device *dev) +{ + int ret; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_3) { + return 0; + } + + /* clock status */ + ret = ssd_check_clock(dev); + if (ret) { + goto out; + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +static int ssd_check_controller(struct ssd_device *dev) +{ + int ret; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_1_3) { + return 0; + } + + /* sync reset */ + ret = ssd_check_reset_sync(dev); + if (ret) { + goto out; + } + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +static int ssd_check_controller_bh(struct ssd_device *dev) +{ + uint32_t test_data = 0x55AA5AA5; + uint32_t val; + int reg_base, reg_sz; + int init_wait = 0; + int i; + int ret = 0; + + if (mode != SSD_DRV_MODE_STANDARD) { + return 0; + } + + /* controller */ + val = ssd_reg32_read(dev->ctrlp + SSD_READY_REG); + if (val & 0x1) { + hio_warn("%s: controller 0 not ready\n", dev->name); + return -1; + } + + for (i=0; ihw_info.nr_ctrl; i++) { + reg_base = SSD_CTRL_TEST_REG0 + i * SSD_CTRL_TEST_REG_SZ; + ssd_reg32_write(dev->ctrlp + reg_base, test_data); + val = ssd_reg32_read(dev->ctrlp + reg_base); + if (val != ~(test_data)) { + hio_warn("%s: check controller %d error: %#x\n", dev->name, i, val); + return -1; + } + } + + /* clock */ + ret = ssd_check_volt(dev); + if (ret) { + return ret; + } + + /* ddr */ + if (dev->protocol_info.ver > SSD_PROTOCOL_V3) { + reg_base = SSD_PV3_RAM_STATUS_REG0; + reg_sz = SSD_PV3_RAM_STATUS_REG_SZ; + + for (i=0; ihw_info.nr_ctrl; i++) { +check_ram_status: + val = ssd_reg32_read(dev->ctrlp + reg_base); + + if (!((val >> 1) & 0x1)) { + init_wait++; + if (init_wait <= SSD_RAM_INIT_MAX_WAIT) { + msleep(SSD_INIT_WAIT); + goto check_ram_status; + } else { + hio_warn("%s: controller %d ram init failed: %#x\n", dev->name, i, val); + ssd_gen_swlog(dev, SSD_LOG_DDR_INIT_ERR, i); + return -1; + } + } + + reg_base += reg_sz; + } + } + + /* ch info */ + for (i=0; ictrlp + SSD_CH_INFO_REG); + if (!((val >> 31) & 0x1)) { + break; + } + + msleep(SSD_INIT_WAIT); + } + if ((val >> 31) & 0x1) { + hio_warn("%s: channel info init failed: %#x\n", dev->name, val); + return -1; + } + + return 0; +} + +static int ssd_init_protocol_info(struct ssd_device *dev) +{ + uint32_t val; + + val = ssd_reg32_read(dev->ctrlp + SSD_PROTOCOL_VER_REG); + if (val == (uint32_t)-1) { + hio_warn("%s: protocol version error: %#x\n", dev->name, val); + return -EINVAL; + } + dev->protocol_info.ver = val; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + dev->protocol_info.init_state_reg = SSD_INIT_STATE_REG0; + dev->protocol_info.init_state_reg_sz = SSD_INIT_STATE_REG_SZ; + + dev->protocol_info.chip_info_reg = SSD_CHIP_INFO_REG0; + dev->protocol_info.chip_info_reg_sz = SSD_CHIP_INFO_REG_SZ; + } else { + dev->protocol_info.init_state_reg = SSD_PV3_INIT_STATE_REG0; + dev->protocol_info.init_state_reg_sz = SSD_PV3_INIT_STATE_REG_SZ; + + dev->protocol_info.chip_info_reg = SSD_PV3_CHIP_INFO_REG0; + dev->protocol_info.chip_info_reg_sz = SSD_PV3_CHIP_INFO_REG_SZ; + } + + return 0; +} + +static int ssd_init_hw_info(struct ssd_device *dev) +{ + uint64_t val64; + uint32_t val; + uint32_t nr_ctrl; + int ret = 0; + + /* base info */ + val = ssd_reg32_read(dev->ctrlp + SSD_RESP_INFO_REG); + dev->hw_info.resp_ptr_sz = 16 * (1U << (val & 0xFF)); + dev->hw_info.resp_msg_sz = 16 * (1U << ((val >> 8) & 0xFF)); + + if (0 == dev->hw_info.resp_ptr_sz || 0 == dev->hw_info.resp_msg_sz) { + hio_warn("%s: response info error\n", dev->name); + ret = -EINVAL; + goto out; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_BRIDGE_INFO_REG); + dev->hw_info.cmd_fifo_sz = 1U << ((val >> 4) & 0xF); + dev->hw_info.cmd_max_sg = 1U << ((val >> 8) & 0xF); + dev->hw_info.sg_max_sec = 1U << ((val >> 12) & 0xF); + dev->hw_info.cmd_fifo_sz_mask = dev->hw_info.cmd_fifo_sz - 1; + + if (0 == dev->hw_info.cmd_fifo_sz || 0 == dev->hw_info.cmd_max_sg || 0 == dev->hw_info.sg_max_sec) { + hio_warn("%s: cmd info error\n", dev->name); + ret = -EINVAL; + goto out; + } + + /* check hw */ + if (ssd_check_hw_bh(dev)) { + hio_warn("%s: check hardware status failed\n", dev->name); + ret = -EINVAL; + goto out; + } + + if (ssd_check_controller(dev)) { + hio_warn("%s: check controller state failed\n", dev->name); + ret = -EINVAL; + goto out; + } + + /* nr controller : read again*/ + val = ssd_reg32_read(dev->ctrlp + SSD_BRIDGE_INFO_REG); + dev->hw_info.nr_ctrl = (val >> 16) & 0xF; + + /* nr ctrl configured */ + nr_ctrl = (val >> 20) & 0xF; + if (0 == dev->hw_info.nr_ctrl) { + hio_warn("%s: nr controller error: %u\n", dev->name, dev->hw_info.nr_ctrl); + ret = -EINVAL; + goto out; + } else if (0 != nr_ctrl && nr_ctrl != dev->hw_info.nr_ctrl) { + hio_warn("%s: nr controller error: configured %u but found %u\n", dev->name, nr_ctrl, dev->hw_info.nr_ctrl); + if (mode <= SSD_DRV_MODE_STANDARD) { + ret = -EINVAL; + goto out; + } + } + + if (ssd_check_controller_bh(dev)) { + hio_warn("%s: check controller failed\n", dev->name); + ret = -EINVAL; + goto out; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_PCB_VER_REG); + dev->hw_info.pcb_ver = (uint8_t) ((val >> 4) & 0xF) + 'A' -1; + if ((val & 0xF) != 0xF) { + dev->hw_info.upper_pcb_ver = (uint8_t) (val & 0xF) + 'A' -1; + } + + if (dev->hw_info.pcb_ver < 'A' || (0 != dev->hw_info.upper_pcb_ver && dev->hw_info.upper_pcb_ver < 'A')) { + hio_warn("%s: PCB version error: %#x %#x\n", dev->name, dev->hw_info.pcb_ver, dev->hw_info.upper_pcb_ver); + ret = -EINVAL; + goto out; + } + + /* channel info */ + if (mode <= SSD_DRV_MODE_DEBUG) { + val = ssd_reg32_read(dev->ctrlp + SSD_CH_INFO_REG); + dev->hw_info.nr_data_ch = val & 0xFF; + dev->hw_info.nr_ch = dev->hw_info.nr_data_ch + ((val >> 8) & 0xFF); + dev->hw_info.nr_chip = (val >> 16) & 0xFF; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + dev->hw_info.max_ch = 1; + while (dev->hw_info.max_ch < dev->hw_info.nr_ch) dev->hw_info.max_ch <<= 1; + } else { + /* set max channel 32 */ + dev->hw_info.max_ch = 32; + } + + if (0 == dev->hw_info.nr_chip) { + //for debug mode + dev->hw_info.nr_chip = 1; + } + + //xx + dev->hw_info.id_size = SSD_NAND_ID_SZ; + dev->hw_info.max_ce = SSD_NAND_MAX_CE; + + if (0 == dev->hw_info.nr_data_ch || 0 == dev->hw_info.nr_ch || 0 == dev->hw_info.nr_chip) { + hio_warn("%s: channel info error: data_ch %u ch %u chip %u\n", dev->name, dev->hw_info.nr_data_ch, dev->hw_info.nr_ch, dev->hw_info.nr_chip); + ret = -EINVAL; + goto out; + } + } + + /* ram info */ + if (mode <= SSD_DRV_MODE_DEBUG) { + val = ssd_reg32_read(dev->ctrlp + SSD_RAM_INFO_REG); + dev->hw_info.ram_size = 0x4000000ull * (1ULL << (val & 0xF)); + dev->hw_info.ram_align = 1U << ((val >> 12) & 0xF); + if (dev->hw_info.ram_align < SSD_RAM_ALIGN) { + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + dev->hw_info.ram_align = SSD_RAM_ALIGN; + } else { + hio_warn("%s: ram align error: %u\n", dev->name, dev->hw_info.ram_align); + ret = -EINVAL; + goto out; + } + } + dev->hw_info.ram_max_len = 0x1000 * (1U << ((val >> 16) & 0xF)); + + if (0 == dev->hw_info.ram_size || 0 == dev->hw_info.ram_align || 0 == dev->hw_info.ram_max_len || dev->hw_info.ram_align > dev->hw_info.ram_max_len) { + hio_warn("%s: ram info error\n", dev->name); + ret = -EINVAL; + goto out; + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + dev->hw_info.log_sz = SSD_LOG_MAX_SZ; + } else { + val = ssd_reg32_read(dev->ctrlp + SSD_LOG_INFO_REG); + dev->hw_info.log_sz = 0x1000 * (1U << (val & 0xFF)); + } + if (0 == dev->hw_info.log_sz) { + hio_warn("%s: log size error\n", dev->name); + ret = -EINVAL; + goto out; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_BBT_BASE_REG); + dev->hw_info.bbt_base = 0x40000ull * (val & 0xFFFF); + dev->hw_info.bbt_size = 0x40000 * (((val >> 16) & 0xFFFF) + 1) / (dev->hw_info.max_ch * dev->hw_info.nr_chip); + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + if (dev->hw_info.bbt_base > dev->hw_info.ram_size || 0 == dev->hw_info.bbt_size) { + hio_warn("%s: bbt info error\n", dev->name); + ret = -EINVAL; + goto out; + } + } + + val = ssd_reg32_read(dev->ctrlp + SSD_ECT_BASE_REG); + dev->hw_info.md_base = 0x40000ull * (val & 0xFFFF); + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + dev->hw_info.md_size = 0x40000 * (((val >> 16) & 0xFFF) + 1) / (dev->hw_info.max_ch * dev->hw_info.nr_chip); + } else { + dev->hw_info.md_size = 0x40000 * (((val >> 16) & 0xFFF) + 1) / (dev->hw_info.nr_chip); + } + dev->hw_info.md_entry_sz = 8 * (1U << ((val >> 28) & 0xF)); + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3) { + if (dev->hw_info.md_base > dev->hw_info.ram_size || 0 == dev->hw_info.md_size || + 0 == dev->hw_info.md_entry_sz || dev->hw_info.md_entry_sz > dev->hw_info.md_size) { + hio_warn("%s: md info error\n", dev->name); + ret = -EINVAL; + goto out; + } + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + dev->hw_info.nand_wbuff_base = dev->hw_info.ram_size + 1; + } else { + val = ssd_reg32_read(dev->ctrlp + SSD_NAND_BUFF_BASE); + dev->hw_info.nand_wbuff_base = 0x8000ull * val; + } + } + + /* flash info */ + if (mode <= SSD_DRV_MODE_DEBUG) { + if (dev->hw_info.nr_ctrl > 1) { + val = ssd_reg32_read(dev->ctrlp + SSD_CTRL_VER_REG); + dev->hw_info.ctrl_ver = val & 0xFFF; + hio_info("%s: controller firmware version: %03X\n", dev->name, dev->hw_info.ctrl_ver); + } + + val64 = ssd_reg_read(dev->ctrlp + SSD_FLASH_INFO_REG0); + dev->hw_info.nand_vendor_id = ((val64 >> 56) & 0xFF); + dev->hw_info.nand_dev_id = ((val64 >> 48) & 0xFF); + + dev->hw_info.block_count = (((val64 >> 32) & 0xFFFF) + 1); + dev->hw_info.page_count = ((val64>>16) & 0xFFFF); + dev->hw_info.page_size = (val64 & 0xFFFF); + + val = ssd_reg32_read(dev->ctrlp + SSD_BB_INFO_REG); + dev->hw_info.bbf_pages = val & 0xFF; + dev->hw_info.bbf_seek = (val >> 8) & 0x1; + + if (0 == dev->hw_info.block_count || 0 == dev->hw_info.page_count || 0 == dev->hw_info.page_size || dev->hw_info.block_count > INT_MAX) { + hio_warn("%s: flash info error\n", dev->name); + ret = -EINVAL; + goto out; + } + + //xx + dev->hw_info.oob_size = SSD_NAND_OOB_SZ; //(dev->hw_info.page_size) >> 5; + + val = ssd_reg32_read(dev->ctrlp + SSD_VALID_PAGES_REG); + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + dev->hw_info.valid_pages = val & 0x3FF; + dev->hw_info.max_valid_pages = (val>>20) & 0x3FF; + } else { + dev->hw_info.valid_pages = val & 0x7FFF; + dev->hw_info.max_valid_pages = (val>>15) & 0x7FFF; + } + if (0 == dev->hw_info.valid_pages || 0 == dev->hw_info.max_valid_pages || + dev->hw_info.valid_pages > dev->hw_info.max_valid_pages || dev->hw_info.max_valid_pages > dev->hw_info.page_count) { + hio_warn("%s: valid page info error: valid_pages %d, max_valid_pages %d\n", dev->name, dev->hw_info.valid_pages, dev->hw_info.max_valid_pages); + ret = -EINVAL; + goto out; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_RESERVED_BLKS_REG); + dev->hw_info.reserved_blks = val & 0xFFFF; + dev->hw_info.md_reserved_blks = (val >> 16) & 0xFF; + if (dev->protocol_info.ver <= SSD_PROTOCOL_V3) { + dev->hw_info.md_reserved_blks = SSD_BBT_RESERVED; + } + if (dev->hw_info.reserved_blks > dev->hw_info.block_count || dev->hw_info.md_reserved_blks > dev->hw_info.block_count) { + hio_warn("%s: reserved blocks info error: reserved_blks %d, md_reserved_blks %d\n", dev->name, dev->hw_info.reserved_blks, dev->hw_info.md_reserved_blks); + ret = -EINVAL; + goto out; + } + } + + /* size */ + if (mode < SSD_DRV_MODE_DEBUG) { + dev->hw_info.size = (uint64_t)dev->hw_info.valid_pages * dev->hw_info.page_size; + dev->hw_info.size *= (dev->hw_info.block_count - dev->hw_info.reserved_blks); + dev->hw_info.size *= ((uint64_t)dev->hw_info.nr_data_ch * (uint64_t)dev->hw_info.nr_chip * (uint64_t)dev->hw_info.nr_ctrl); + } + + /* extend hardware info */ + val = ssd_reg32_read(dev->ctrlp + SSD_PCB_VER_REG); + dev->hw_info_ext.board_type = (val >> 24) & 0xF; + + dev->hw_info_ext.form_factor = SSD_FORM_FACTOR_FHHL; + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2_1) { + dev->hw_info_ext.form_factor = (val >> 31) & 0x1; + } + /* + dev->hw_info_ext.cap_type = (val >> 28) & 0x3; + if (SSD_BM_CAP_VINA != dev->hw_info_ext.cap_type && SSD_BM_CAP_JH != dev->hw_info_ext.cap_type) { + dev->hw_info_ext.cap_type = SSD_BM_CAP_VINA; + }*/ + + /* power loss protect */ + val = ssd_reg32_read(dev->ctrlp + SSD_PLP_INFO_REG); + dev->hw_info_ext.plp_type = (val & 0x3); + if (dev->protocol_info.ver >= SSD_PROTOCOL_V3_2) { + /* 3 or 4 cap */ + dev->hw_info_ext.cap_type = ((val >> 2)& 0x1); + } + + /* work mode */ + val = ssd_reg32_read(dev->ctrlp + SSD_CH_INFO_REG); + dev->hw_info_ext.work_mode = (val >> 25) & 0x1; + +out: + /* skip error if not in standard mode */ + if (mode != SSD_DRV_MODE_STANDARD) { + ret = 0; + } + return ret; +} + +static void ssd_cleanup_response(struct ssd_device *dev) +{ + int resp_msg_sz = dev->hw_info.resp_msg_sz * dev->hw_info.cmd_fifo_sz * SSD_MSIX_VEC; + int resp_ptr_sz = dev->hw_info.resp_ptr_sz * SSD_MSIX_VEC; + + pci_free_consistent(dev->pdev, resp_ptr_sz, dev->resp_ptr_base, dev->resp_ptr_base_dma); + pci_free_consistent(dev->pdev, resp_msg_sz, dev->resp_msg_base, dev->resp_msg_base_dma); +} + +static int ssd_init_response(struct ssd_device *dev) +{ + int resp_msg_sz = dev->hw_info.resp_msg_sz * dev->hw_info.cmd_fifo_sz * SSD_MSIX_VEC; + int resp_ptr_sz = dev->hw_info.resp_ptr_sz * SSD_MSIX_VEC; + + dev->resp_msg_base = pci_alloc_consistent(dev->pdev, resp_msg_sz, &(dev->resp_msg_base_dma)); + if (!dev->resp_msg_base) { + hio_warn("%s: unable to allocate resp msg DMA buffer\n", dev->name); + goto out_alloc_resp_msg; + } + memset(dev->resp_msg_base, 0xFF, resp_msg_sz); + + dev->resp_ptr_base = pci_alloc_consistent(dev->pdev, resp_ptr_sz, &(dev->resp_ptr_base_dma)); + if (!dev->resp_ptr_base){ + hio_warn("%s: unable to allocate resp ptr DMA buffer\n", dev->name); + goto out_alloc_resp_ptr; + } + memset(dev->resp_ptr_base, 0, resp_ptr_sz); + dev->resp_idx = *(uint32_t *)(dev->resp_ptr_base) = dev->hw_info.cmd_fifo_sz * 2 - 1; + + ssd_reg_write(dev->ctrlp + SSD_RESP_FIFO_REG, dev->resp_msg_base_dma); + ssd_reg_write(dev->ctrlp + SSD_RESP_PTR_REG, dev->resp_ptr_base_dma); + + return 0; + +out_alloc_resp_ptr: + pci_free_consistent(dev->pdev, resp_msg_sz, dev->resp_msg_base, dev->resp_msg_base_dma); +out_alloc_resp_msg: + return -ENOMEM; +} + +static int ssd_cleanup_cmd(struct ssd_device *dev) +{ + int msg_sz = ALIGN(sizeof(struct ssd_rw_msg) + (dev->hw_info.cmd_max_sg - 1) * sizeof(struct ssd_sg_entry), SSD_DMA_ALIGN); + int i; + + for (i=0; i<(int)dev->hw_info.cmd_fifo_sz; i++) { + kfree(dev->cmd[i].sgl); + } + kfree(dev->cmd); + pci_free_consistent(dev->pdev, (msg_sz * dev->hw_info.cmd_fifo_sz), dev->msg_base, dev->msg_base_dma); + return 0; +} + +static int ssd_init_cmd(struct ssd_device *dev) +{ + int sgl_sz = sizeof(struct scatterlist) * dev->hw_info.cmd_max_sg; + int cmd_sz = sizeof(struct ssd_cmd) * dev->hw_info.cmd_fifo_sz; + int msg_sz = ALIGN(sizeof(struct ssd_rw_msg) + (dev->hw_info.cmd_max_sg - 1) * sizeof(struct ssd_sg_entry), SSD_DMA_ALIGN); + int i; + + spin_lock_init(&dev->cmd_lock); + + dev->msg_base = pci_alloc_consistent(dev->pdev, (msg_sz * dev->hw_info.cmd_fifo_sz), &dev->msg_base_dma); + if (!dev->msg_base) { + hio_warn("%s: can not alloc cmd msg\n", dev->name); + goto out_alloc_msg; + } + + dev->cmd = kmalloc(cmd_sz, GFP_KERNEL); + if (!dev->cmd) { + hio_warn("%s: can not alloc cmd\n", dev->name); + goto out_alloc_cmd; + } + memset(dev->cmd, 0, cmd_sz); + + for (i=0; i<(int)dev->hw_info.cmd_fifo_sz; i++) { + dev->cmd[i].sgl = kmalloc(sgl_sz, GFP_KERNEL); + if (!dev->cmd[i].sgl) { + hio_warn("%s: can not alloc cmd sgl %d\n", dev->name, i); + goto out_alloc_sgl; + } + + dev->cmd[i].msg = dev->msg_base + (msg_sz * i); + dev->cmd[i].msg_dma = dev->msg_base_dma + ((dma_addr_t)msg_sz * i); + + dev->cmd[i].dev = dev; + dev->cmd[i].tag = i; + dev->cmd[i].flag = 0; + + INIT_LIST_HEAD(&dev->cmd[i].list); + } + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3) { + dev->scmd = ssd_dispatch_cmd; + } else { + ssd_reg_write(dev->ctrlp + SSD_MSG_BASE_REG, dev->msg_base_dma); + if (finject) { + dev->scmd = ssd_send_cmd_db; + } else { + dev->scmd = ssd_send_cmd; + } + } + + return 0; + +out_alloc_sgl: + for (i--; i>=0; i--) { + kfree(dev->cmd[i].sgl); + } + kfree(dev->cmd); +out_alloc_cmd: + pci_free_consistent(dev->pdev, (msg_sz * dev->hw_info.cmd_fifo_sz), dev->msg_base, dev->msg_base_dma); +out_alloc_msg: + return -ENOMEM; +} + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)) +static irqreturn_t ssd_interrupt_check(int irq, void *dev_id) +{ + struct ssd_queue *queue = (struct ssd_queue *)dev_id; + + if (*(uint32_t *)queue->resp_ptr == queue->resp_idx) { + return IRQ_NONE; + } + + return IRQ_WAKE_THREAD; +} + +static irqreturn_t ssd_interrupt_threaded(int irq, void *dev_id) +{ + struct ssd_queue *queue = (struct ssd_queue *)dev_id; + struct ssd_device *dev = (struct ssd_device *)queue->dev; + struct ssd_cmd *cmd; + union ssd_response_msq __msg; + union ssd_response_msq *msg = &__msg; + uint64_t *u64_msg; + uint32_t resp_idx = queue->resp_idx; + uint32_t new_resp_idx = *(uint32_t *)queue->resp_ptr; + uint32_t end_resp_idx; + + if (unlikely(resp_idx == new_resp_idx)) { + return IRQ_NONE; + } + + end_resp_idx = new_resp_idx & queue->resp_idx_mask; + + do { + resp_idx = (resp_idx + 1) & queue->resp_idx_mask; + + /* the resp msg */ + u64_msg = (uint64_t *)(queue->resp_msg + queue->resp_msg_sz * resp_idx); + msg->u64_msg = *u64_msg; + + if (unlikely(msg->u64_msg == (uint64_t)(-1))) { + hio_err("%s: empty resp msg: queue %d idx %u\n", dev->name, queue->idx, resp_idx); + continue; + } + /* clear the resp msg */ + *u64_msg = (uint64_t)(-1); + + cmd = &queue->cmd[msg->resp_msg.tag]; + /*if (unlikely(!cmd->bio)) { + printk(KERN_WARNING "%s: unknown tag %d fun %#x\n", + dev->name, msg->resp_msg.tag, msg->resp_msg.fun); + continue; + }*/ + + if(unlikely(msg->resp_msg.status & (uint32_t)status_mask)) { + cmd->errors = -EIO; + } else { + cmd->errors = 0; + } + cmd->nr_log = msg->log_resp_msg.nr_log; + + ssd_done(cmd); + + if (unlikely(msg->resp_msg.fun != SSD_FUNC_READ_LOG && msg->resp_msg.log > 0)) { + (void)test_and_set_bit(SSD_LOG_HW, &dev->state); + if (test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->log_work); + } + } + + if (unlikely(msg->resp_msg.status)) { + if (msg->resp_msg.fun == SSD_FUNC_READ || msg->resp_msg.fun == SSD_FUNC_WRITE) { + hio_err("%s: I/O error %d: tag %d fun %#x\n", + dev->name, msg->resp_msg.status, msg->resp_msg.tag, msg->resp_msg.fun); + + /* alarm led */ + ssd_set_alarm(dev); + queue->io_stat.nr_rwerr++; + ssd_gen_swlog(dev, SSD_LOG_EIO, msg->u32_msg[0]); + } else { + hio_info("%s: CMD error %d: tag %d fun %#x\n", + dev->name, msg->resp_msg.status, msg->resp_msg.tag, msg->resp_msg.fun); + + ssd_gen_swlog(dev, SSD_LOG_ECMD, msg->u32_msg[0]); + } + queue->io_stat.nr_ioerr++; + } + + if (msg->resp_msg.fun == SSD_FUNC_READ || + msg->resp_msg.fun == SSD_FUNC_NAND_READ_WOOB || + msg->resp_msg.fun == SSD_FUNC_NAND_READ) { + + queue->ecc_info.bitflip[msg->resp_msg.bitflip]++; + } + }while (resp_idx != end_resp_idx); + + queue->resp_idx = new_resp_idx; + + return IRQ_HANDLED; +} +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) +static irqreturn_t ssd_interrupt(int irq, void *dev_id, struct pt_regs *regs) +#else +static irqreturn_t ssd_interrupt(int irq, void *dev_id) +#endif +{ + struct ssd_queue *queue = (struct ssd_queue *)dev_id; + struct ssd_device *dev = (struct ssd_device *)queue->dev; + struct ssd_cmd *cmd; + union ssd_response_msq __msg; + union ssd_response_msq *msg = &__msg; + uint64_t *u64_msg; + uint32_t resp_idx = queue->resp_idx; + uint32_t new_resp_idx = *(uint32_t *)queue->resp_ptr; + uint32_t end_resp_idx; + + if (unlikely(resp_idx == new_resp_idx)) { + return IRQ_NONE; + } + +#if (defined SSD_ESCAPE_IRQ) + if (SSD_INT_MSIX != dev->int_mode) { + dev->irq_cpu = smp_processor_id(); + } +#endif + + end_resp_idx = new_resp_idx & queue->resp_idx_mask; + + do { + resp_idx = (resp_idx + 1) & queue->resp_idx_mask; + + /* the resp msg */ + u64_msg = (uint64_t *)(queue->resp_msg + queue->resp_msg_sz * resp_idx); + msg->u64_msg = *u64_msg; + + if (unlikely(msg->u64_msg == (uint64_t)(-1))) { + hio_err("%s: empty resp msg: queue %d idx %u\n", dev->name, queue->idx, resp_idx); + continue; + } + /* clear the resp msg */ + *u64_msg = (uint64_t)(-1); + + cmd = &queue->cmd[msg->resp_msg.tag]; + /*if (unlikely(!cmd->bio)) { + printk(KERN_WARNING "%s: unknown tag %d fun %#x\n", + dev->name, msg->resp_msg.tag, msg->resp_msg.fun); + continue; + }*/ + + if(unlikely(msg->resp_msg.status & (uint32_t)status_mask)) { + cmd->errors = -EIO; + } else { + cmd->errors = 0; + } + cmd->nr_log = msg->log_resp_msg.nr_log; + + ssd_done_bh(cmd); + + if (unlikely(msg->resp_msg.fun != SSD_FUNC_READ_LOG && msg->resp_msg.log > 0)) { + (void)test_and_set_bit(SSD_LOG_HW, &dev->state); + if (test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->log_work); + } + } + + if (unlikely(msg->resp_msg.status)) { + if (msg->resp_msg.fun == SSD_FUNC_READ || msg->resp_msg.fun == SSD_FUNC_WRITE) { + hio_err("%s: I/O error %d: tag %d fun %#x\n", + dev->name, msg->resp_msg.status, msg->resp_msg.tag, msg->resp_msg.fun); + + /* alarm led */ + ssd_set_alarm(dev); + queue->io_stat.nr_rwerr++; + ssd_gen_swlog(dev, SSD_LOG_EIO, msg->u32_msg[0]); + } else { + hio_info("%s: CMD error %d: tag %d fun %#x\n", + dev->name, msg->resp_msg.status, msg->resp_msg.tag, msg->resp_msg.fun); + + ssd_gen_swlog(dev, SSD_LOG_ECMD, msg->u32_msg[0]); + } + queue->io_stat.nr_ioerr++; + } + + if (msg->resp_msg.fun == SSD_FUNC_READ || + msg->resp_msg.fun == SSD_FUNC_NAND_READ_WOOB || + msg->resp_msg.fun == SSD_FUNC_NAND_READ) { + + queue->ecc_info.bitflip[msg->resp_msg.bitflip]++; + } + }while (resp_idx != end_resp_idx); + + queue->resp_idx = new_resp_idx; + + return IRQ_HANDLED; +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) +static irqreturn_t ssd_interrupt_legacy(int irq, void *dev_id, struct pt_regs *regs) +#else +static irqreturn_t ssd_interrupt_legacy(int irq, void *dev_id) +#endif +{ + irqreturn_t ret; + struct ssd_queue *queue = (struct ssd_queue *)dev_id; + struct ssd_device *dev = (struct ssd_device *)queue->dev; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) + ret = ssd_interrupt(irq, dev_id, regs); +#else + ret = ssd_interrupt(irq, dev_id); +#endif + + /* clear intr */ + if (IRQ_HANDLED == ret) { + ssd_reg32_write(dev->ctrlp + SSD_CLEAR_INTR_REG, 1); + } + + return ret; +} + +static void ssd_reset_resp_ptr(struct ssd_device *dev) +{ + int i; + + for (i=0; inr_queue; i++) { + *(uint32_t *)dev->queue[i].resp_ptr = dev->queue[i].resp_idx = (dev->hw_info.cmd_fifo_sz * 2) - 1; + } +} + +static void ssd_free_irq(struct ssd_device *dev) +{ + int i; + +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6)) && (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + if (SSD_INT_MSIX == dev->int_mode) { + for (i=0; inr_queue; i++) { + irq_set_affinity_hint(dev->entry[i].vector, NULL); + } + } +#endif + + for (i=0; inr_queue; i++) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + free_irq(dev->entry[i].vector, &dev->queue[i]); +#else + free_irq(pci_irq_vector(dev->pdev, i), &dev->queue[i]); +#endif + } + + if (SSD_INT_MSIX == dev->int_mode) { + pci_disable_msix(dev->pdev); + } else if (SSD_INT_MSI == dev->int_mode) { + pci_disable_msi(dev->pdev); + } + +} + +static int ssd_init_irq(struct ssd_device *dev) +{ +#if (!defined MODULE) && (defined SSD_MSIX_AFFINITY_FORCE) && (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + const struct cpumask *cpu_mask = NULL; + static int cpu_affinity = 0; +#endif +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6)) && (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + const struct cpumask *mask = NULL; + static int cpu = 0; + int j; +#endif + int i; + unsigned long flags = 0; + int ret = 0; + + ssd_reg32_write(dev->ctrlp + SSD_INTR_INTERVAL_REG, 0x800); + +#ifdef SSD_ESCAPE_IRQ + dev->irq_cpu = -1; +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + if (int_mode >= SSD_INT_MSIX && pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) { + dev->nr_queue = SSD_MSIX_VEC; + + for (i=0; inr_queue; i++) { + dev->entry[i].entry = i; + } + for (;;) { + ret = pci_enable_msix(dev->pdev, dev->entry, dev->nr_queue); + if (ret == 0) { + break; + } else if (ret > 0) { + dev->nr_queue = ret; + } else { + hio_warn("%s: can not enable msix\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out; + } + } + +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6)) + mask = (dev_to_node(&dev->pdev->dev) == -1) ? cpu_online_mask : cpumask_of_node(dev_to_node(&dev->pdev->dev)); + if ((0 == cpu) || (!cpumask_intersects(mask, cpumask_of(cpu)))) { + cpu = cpumask_first(mask); + } + for (i=0; inr_queue; i++) { + irq_set_affinity_hint(dev->entry[i].vector, cpumask_of(cpu)); + cpu = cpumask_next(cpu, mask); + if (cpu >= nr_cpu_ids) { + cpu = cpumask_first(mask); + } + } +#endif + + dev->int_mode = SSD_INT_MSIX; + } else if (int_mode >= SSD_INT_MSI && pci_find_capability(dev->pdev, PCI_CAP_ID_MSI)) { + ret = pci_enable_msi(dev->pdev); + if (ret) { + hio_warn("%s: can not enable msi\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out; + } + + dev->nr_queue = 1; + dev->entry[0].vector = dev->pdev->irq; + + dev->int_mode = SSD_INT_MSI; + } else { + dev->nr_queue = 1; + dev->entry[0].vector = dev->pdev->irq; + + dev->int_mode = SSD_INT_LEGACY; + } +#else + if (int_mode >= SSD_INT_MSIX && pci_find_capability(dev->pdev, PCI_CAP_ID_MSIX)) { + dev->nr_queue = SSD_MSIX_VEC; + + dev->nr_queue = pci_alloc_irq_vectors(dev->pdev, 1, dev->nr_queue, PCI_IRQ_MSIX | PCI_IRQ_AFFINITY); + if (dev->nr_queue <= 0) { + ret = -EIO; + hio_warn("%s: can not enable msix\n", dev->name); + ssd_set_alarm(dev); + goto out; + } + + dev->int_mode = SSD_INT_MSIX; + } else if (int_mode >= SSD_INT_MSI && pci_find_capability(dev->pdev, PCI_CAP_ID_MSI)) { + + ret = pci_alloc_irq_vectors(dev->pdev, 1, 1, PCI_IRQ_MSI | PCI_IRQ_AFFINITY); + if (ret <= 0) { + ret = -EIO; + hio_warn("%s: can not enable msi\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out; + } + dev->nr_queue = 1; + + dev->int_mode = SSD_INT_MSI; + } else { + ret = pci_alloc_irq_vectors(dev->pdev, 1, 1, PCI_IRQ_LEGACY); + + if (ret <= 0) { + ret = -EIO; + hio_warn("%s: can not enable msi\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out; + } + dev->nr_queue = 1; + + dev->int_mode = SSD_INT_LEGACY; + } +#endif + + for (i=0; inr_queue; i++) { + if (dev->nr_queue > 1) { + snprintf(dev->queue[i].name, SSD_QUEUE_NAME_LEN, "%s_e100-%d", dev->name, i); + } else { + snprintf(dev->queue[i].name, SSD_QUEUE_NAME_LEN, "%s_e100", dev->name); + } + + dev->queue[i].dev = dev; + dev->queue[i].idx = i; + + dev->queue[i].resp_idx = (dev->hw_info.cmd_fifo_sz * 2) - 1; + dev->queue[i].resp_idx_mask = dev->hw_info.cmd_fifo_sz - 1; + + dev->queue[i].resp_msg_sz = dev->hw_info.resp_msg_sz; + dev->queue[i].resp_msg = dev->resp_msg_base + dev->hw_info.resp_msg_sz * dev->hw_info.cmd_fifo_sz * i; + dev->queue[i].resp_ptr = dev->resp_ptr_base + dev->hw_info.resp_ptr_sz * i; + *(uint32_t *)dev->queue[i].resp_ptr = dev->queue[i].resp_idx; + + dev->queue[i].cmd = dev->cmd; + } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) + flags = IRQF_SHARED; +#else + flags = SA_SHIRQ; +#endif + + for (i=0; inr_queue; i++) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) + if (dev->int_mode == SSD_INT_LEGACY) { + ret = request_irq(dev->entry[i].vector, &ssd_interrupt_legacy, flags, dev->queue[i].name, &dev->queue[i]); + } else { + ret = request_irq(dev->entry[i].vector, &ssd_interrupt, flags, dev->queue[i].name, &dev->queue[i]); + } +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + if (threaded_irq) { + ret = request_threaded_irq(dev->entry[i].vector, ssd_interrupt_check, ssd_interrupt_threaded, flags, dev->queue[i].name, &dev->queue[i]); + } else if (dev->int_mode == SSD_INT_LEGACY) { + ret = request_irq(dev->entry[i].vector, &ssd_interrupt_legacy, flags, dev->queue[i].name, &dev->queue[i]); + } else { + ret = request_irq(dev->entry[i].vector, &ssd_interrupt, flags, dev->queue[i].name, &dev->queue[i]); + } +#else + if (threaded_irq) { + ret = request_threaded_irq(pci_irq_vector(dev->pdev, i), ssd_interrupt_check, ssd_interrupt_threaded, flags, dev->queue[i].name, &dev->queue[i]); + } else if (dev->int_mode == SSD_INT_LEGACY) { + ret = request_irq(pci_irq_vector(dev->pdev, i), &ssd_interrupt_legacy, flags, dev->queue[i].name, &dev->queue[i]); + } else { + ret = request_irq(pci_irq_vector(dev->pdev, i), &ssd_interrupt, flags, dev->queue[i].name, &dev->queue[i]); + } +#endif + if (ret) { + hio_warn("%s: request irq failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_request_irq; + } + +#if (!defined MODULE) && (defined SSD_MSIX_AFFINITY_FORCE) && (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + cpu_mask = (dev_to_node(&dev->pdev->dev) == -1) ? cpu_online_mask : cpumask_of_node(dev_to_node(&dev->pdev->dev)); + if (SSD_INT_MSIX == dev->int_mode) { + if ((0 == cpu_affinity) || (!cpumask_intersects(mask, cpumask_of(cpu_affinity)))) { + cpu_affinity = cpumask_first(cpu_mask); + } + + irq_set_affinity(dev->entry[i].vector, cpumask_of(cpu_affinity)); + cpu_affinity = cpumask_next(cpu_affinity, cpu_mask); + if (cpu_affinity >= nr_cpu_ids) { + cpu_affinity = cpumask_first(cpu_mask); + } + } +#endif + } + + return ret; + +out_request_irq: +#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) || (defined RHEL_MAJOR && RHEL_MAJOR == 6)) && (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + if (SSD_INT_MSIX == dev->int_mode) { + for (j=0; jnr_queue; j++) { + irq_set_affinity_hint(dev->entry[j].vector, NULL); + } + } +#endif + + for (i--; i>=0; i--) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0)) + free_irq(dev->entry[i].vector, &dev->queue[i]); +#else + free_irq(pci_irq_vector(dev->pdev, i), &dev->queue[i]); +#endif + } + + if (SSD_INT_MSIX == dev->int_mode) { + pci_disable_msix(dev->pdev); + } else if (SSD_INT_MSI == dev->int_mode) { + pci_disable_msi(dev->pdev); + } + +out: + return ret; +} + +static void ssd_initial_log(struct ssd_device *dev) +{ + uint32_t val; + uint32_t speed, width; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return; + } + + val = ssd_reg32_read(dev->ctrlp + SSD_POWER_ON_REG); + if (val) { + // Poweron detection switched to SSD_INTR_INTERVAL_REG in 'ssd_init_smart' + //ssd_gen_swlog(dev, SSD_LOG_POWER_ON, dev->hw_info.bridge_ver); + } + + val = ssd_reg32_read(dev->ctrlp + SSD_PCIE_LINKSTATUS_REG); + speed = val & 0xF; + width = (val >> 4)& 0x3F; + if (0x1 == speed) { + hio_info("%s: PCIe: 2.5GT/s, x%u\n", dev->name, width); + } else if (0x2 == speed) { + hio_info("%s: PCIe: 5GT/s, x%u\n", dev->name, width); + } else { + hio_info("%s: PCIe: unknown GT/s, x%u\n", dev->name, width); + } + ssd_gen_swlog(dev, SSD_LOG_PCIE_LINK_STATUS, val); + + return; +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static void ssd_hwmon_worker(void *data) +{ + struct ssd_device *dev = (struct ssd_device *)data; +#else +static void ssd_hwmon_worker(struct work_struct *work) +{ + struct ssd_device *dev = container_of(work, struct ssd_device, hwmon_work); +#endif + + if (ssd_check_hw(dev)) { + //hio_err("%s: check hardware failed\n", dev->name); + return; + } + + ssd_check_clock(dev); + ssd_check_volt(dev); + + ssd_mon_boardvolt(dev); +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static void ssd_tempmon_worker(void *data) +{ + struct ssd_device *dev = (struct ssd_device *)data; +#else +static void ssd_tempmon_worker(struct work_struct *work) +{ + struct ssd_device *dev = container_of(work, struct ssd_device, tempmon_work); +#endif + + if (ssd_check_hw(dev)) { + //hio_err("%s: check hardware failed\n", dev->name); + return; + } + + ssd_mon_temp(dev); +} + + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) +static void ssd_capmon_worker(void *data) +{ + struct ssd_device *dev = (struct ssd_device *)data; +#else +static void ssd_capmon_worker(struct work_struct *work) +{ + struct ssd_device *dev = container_of(work, struct ssd_device, capmon_work); +#endif + uint32_t cap = 0; + uint32_t cap_threshold = SSD_PL_CAP_THRESHOLD; + int ret = 0; + + if (dev->protocol_info.ver < SSD_PROTOCOL_V3_2) { + return; + } + + if (dev->hw_info_ext.form_factor == SSD_FORM_FACTOR_FHHL && dev->hw_info.pcb_ver < 'B') { + return; + } + + /* fault before? */ + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ret = ssd_check_pl_cap_fast(dev); + if (ret) { + return; + } + } + + /* learn */ + ret = ssd_do_cap_learn(dev, &cap); + if (ret) { + hio_err("%s: cap learn failed\n", dev->name); + ssd_gen_swlog(dev, SSD_LOG_CAP_LEARN_FAULT, 0); + return; + } + + ssd_gen_swlog(dev, SSD_LOG_CAP_STATUS, cap); + + if (SSD_PL_CAP_CP == dev->hw_info_ext.cap_type) { + cap_threshold = SSD_PL_CAP_CP_THRESHOLD; + } + + //use the fw event id? + if (cap < cap_threshold) { + if (!test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_BATTERY_FAULT, 0); + } + } else if (cap >= (cap_threshold + SSD_PL_CAP_THRESHOLD_HYST)) { + if (test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon)) { + ssd_gen_swlog(dev, SSD_LOG_BATTERY_OK, 0); + } + } +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) +static void ssd_routine_start(void *data) +#else +static void ssd_routine_start(struct timer_list *t) +#endif +{ + struct ssd_device *dev; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0)) + if (!data) { + return; + } + dev = data; +#else + dev = from_timer(dev, t, routine_timer); +#endif + + dev->routine_tick++; + + if (test_bit(SSD_INIT_WORKQ, &dev->state) && !ssd_busy(dev)) { + (void)test_and_set_bit(SSD_LOG_HW, &dev->state); + queue_work(dev->workq, &dev->log_work); + } + + if ((dev->routine_tick % SSD_HWMON_ROUTINE_TICK) == 0 && test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->hwmon_work); + } + + if ((dev->routine_tick % SSD_CAPMON_ROUTINE_TICK) == 0 && test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->capmon_work); + } + + if ((dev->routine_tick % SSD_CAPMON2_ROUTINE_TICK) == 0 && test_bit(SSD_HWMON_PL_CAP(SSD_PL_CAP), &dev->hwmon) && test_bit(SSD_INIT_WORKQ, &dev->state)) { + /* CAP fault? check again */ + queue_work(dev->workq, &dev->capmon_work); + } + + if (test_bit(SSD_INIT_WORKQ, &dev->state)) { + queue_work(dev->workq, &dev->tempmon_work); + } + + /* schedule routine */ + mod_timer(&dev->routine_timer, jiffies + msecs_to_jiffies(SSD_ROUTINE_INTERVAL)); +} + +static void ssd_cleanup_routine(struct ssd_device *dev) +{ + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return; + + (void)ssd_del_timer(&dev->routine_timer); + + (void)ssd_del_timer(&dev->bm_timer); +} + +static int ssd_init_routine(struct ssd_device *dev) +{ + if (unlikely(mode != SSD_DRV_MODE_STANDARD)) + return 0; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + INIT_WORK(&dev->bm_work, ssd_bm_worker, dev); + INIT_WORK(&dev->hwmon_work, ssd_hwmon_worker, dev); + INIT_WORK(&dev->capmon_work, ssd_capmon_worker, dev); + INIT_WORK(&dev->tempmon_work, ssd_tempmon_worker, dev); +#else + INIT_WORK(&dev->bm_work, ssd_bm_worker); + INIT_WORK(&dev->hwmon_work, ssd_hwmon_worker); + INIT_WORK(&dev->capmon_work, ssd_capmon_worker); + INIT_WORK(&dev->tempmon_work, ssd_tempmon_worker); +#endif + + /* initial log */ + ssd_initial_log(dev); + + /* schedule bm routine */ + ssd_add_timer(&dev->bm_timer, msecs_to_jiffies(SSD_BM_CAP_LEARNING_DELAY), ssd_bm_routine_start, dev); + + /* schedule routine */ + ssd_add_timer(&dev->routine_timer, msecs_to_jiffies(SSD_ROUTINE_INTERVAL), ssd_routine_start, dev); + + return 0; +} + +static void +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) +__devexit +#endif +ssd_remove_one (struct pci_dev *pdev) +{ + struct ssd_device *dev; + + if (!pdev) { + return; + } + + dev = pci_get_drvdata(pdev); + if (!dev) { + return; + } + + list_del_init(&dev->list); + + ssd_unregister_sysfs(dev); + + /* offline firstly */ + test_and_clear_bit(SSD_ONLINE, &dev->state); + + /* clean work queue first */ + if (!dev->slave) { + test_and_clear_bit(SSD_INIT_WORKQ, &dev->state); + ssd_cleanup_workq(dev); + } + + /* flush cache */ + (void)ssd_flush(dev); + (void)ssd_save_md(dev); + + /* save smart */ + if (!dev->slave) { + ssd_save_smart(dev); + } + + if (test_and_clear_bit(SSD_INIT_BD, &dev->state)) { + ssd_cleanup_blkdev(dev); + } + + if (!dev->slave) { + ssd_cleanup_chardev(dev); + } + + /* clean routine */ + if (!dev->slave) { + ssd_cleanup_routine(dev); + } + + ssd_cleanup_queue(dev); + + ssd_cleanup_tag(dev); + ssd_cleanup_thread(dev); + + ssd_free_irq(dev); + + ssd_cleanup_dcmd(dev); + ssd_cleanup_cmd(dev); + ssd_cleanup_response(dev); + + if (!dev->slave) { + ssd_cleanup_log(dev); + } + + if (dev->reload_fw) { //reload fw + dev->has_non_0x98_reg_access = 1; + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FW); + } + + /* unmap physical adress */ +#ifdef LINUX_SUSE_OS + iounmap(dev->ctrlp); +#else + pci_iounmap(pdev, dev->ctrlp); +#endif + + release_mem_region(dev->mmio_base, dev->mmio_len); + + pci_disable_device(pdev); + + pci_set_drvdata(pdev, NULL); + + ssd_put(dev); +} + +static int +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) +__devinit +#endif +ssd_init_one(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + struct ssd_device *dev; + struct timeval tv; + int ret = 0; + + if (!pdev || !ent) { + ret = -EINVAL; + goto out; + } + + dev = kmalloc(sizeof(struct ssd_device), GFP_KERNEL); + if (!dev) { + ret = -ENOMEM; + goto out_alloc_dev; + } + memset(dev, 0, sizeof(struct ssd_device)); + + dev->owner = THIS_MODULE; + + if (SSD_SLAVE_PORT_DEVID == ent->device) { + dev->slave = 1; + } + + dev->idx = ssd_get_index(dev->slave); + if (dev->idx < 0) { + ret = -ENOMEM; + goto out_get_index; + } + + if (!dev->slave) { + snprintf(dev->name, SSD_DEV_NAME_LEN, SSD_DEV_NAME); + ssd_set_dev_name(&dev->name[strlen(SSD_DEV_NAME)], SSD_DEV_NAME_LEN-strlen(SSD_DEV_NAME), dev->idx); + + dev->major = ssd_major; + dev->cmajor = ssd_cmajor; + } else { + snprintf(dev->name, SSD_DEV_NAME_LEN, SSD_SDEV_NAME); + ssd_set_dev_name(&dev->name[strlen(SSD_SDEV_NAME)], SSD_DEV_NAME_LEN-strlen(SSD_SDEV_NAME), dev->idx); + dev->major = ssd_major_sl; + dev->cmajor = 0; + } + + do_gettimeofday(&tv); + dev->reset_time = tv.tv_sec; + + atomic_set(&(dev->refcnt), 0); + atomic_set(&(dev->tocnt), 0); + + mutex_init(&dev->fw_mutex); + + //xx + mutex_init(&dev->gd_mutex); + dev->has_non_0x98_reg_access = 0; + + //init in_flight lock + spin_lock_init(&dev->in_flight_lock); + + dev->pdev = pdev; + pci_set_drvdata(pdev, dev); + + kref_init(&dev->kref); + + ret = pci_enable_device(pdev); + if (ret) { + hio_warn("%s: can not enable device\n", dev->name); + goto out_enable_device; + } + + pci_set_master(pdev); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) + ret = pci_set_dma_mask(pdev, DMA_64BIT_MASK); +#else + ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); +#endif + if (ret) { + hio_warn("%s: set dma mask: failed\n", dev->name); + goto out_set_dma_mask; + } + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) + ret = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); +#else + ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); +#endif + if (ret) { + hio_warn("%s: set consistent dma mask: failed\n", dev->name); + goto out_set_dma_mask; + } + + dev->mmio_base = pci_resource_start(pdev, 0); + dev->mmio_len = pci_resource_len(pdev, 0); + + if (!request_mem_region(dev->mmio_base, dev->mmio_len, SSD_DEV_NAME)) { + hio_warn("%s: can not reserve MMIO region 0\n", dev->name); + ret = -EBUSY; + goto out_request_mem_region; + } + + /* 2.6.9 kernel bug */ + dev->ctrlp = pci_iomap(pdev, 0, 0); + if (!dev->ctrlp) { + hio_warn("%s: can not remap IO region 0\n", dev->name); + ret = -ENOMEM; + goto out_pci_iomap; + } + + ret = ssd_check_hw(dev); + if (ret) { + hio_err("%s: check hardware failed\n", dev->name); + goto out_check_hw; + } + + ret = ssd_init_protocol_info(dev); + if (ret) { + hio_err("%s: init protocol info failed\n", dev->name); + goto out_init_protocol_info; + } + + /* alarm led ? */ + ssd_clear_alarm(dev); + + ret = ssd_init_fw_info(dev); + if (ret) { + hio_err("%s: init firmware info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_fw_info; + } + + /* slave port ? */ + if (dev->slave) { + goto init_next1; + } + + ret = ssd_init_rom_info(dev); + if (ret) { + hio_err("%s: init rom info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_rom_info; + } + + ret = ssd_init_label(dev); + if (ret) { + hio_err("%s: init label failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_label; + } + + ret = ssd_init_workq(dev); + if (ret) { + hio_warn("%s: init workq failed\n", dev->name); + goto out_init_workq; + } + (void)test_and_set_bit(SSD_INIT_WORKQ, &dev->state); + + ret = ssd_init_log(dev); + if (ret) { + hio_err("%s: init log failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_log; + } + + ret = ssd_init_smart(dev); + if (ret) { + hio_err("%s: init info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_smart; + } + +init_next1: + ret = ssd_init_hw_info(dev); + if (ret) { + hio_err("%s: init hardware info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_hw_info; + } + + /* slave port ? */ + if (dev->slave) { + goto init_next2; + } + + ret = ssd_init_sensor(dev); + if (ret) { + hio_err("%s: init sensor failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_sensor; + } + + ret = ssd_init_pl_cap(dev); + if (ret) { + hio_err("%s: int pl_cap failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_pl_cap; + } + +init_next2: + ret = ssd_check_init_state(dev); + if (ret) { + hio_err("%s: check init state failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_check_init_state; + } + + ret = ssd_init_response(dev); + if (ret) { + hio_warn("%s: init resp_msg failed\n", dev->name); + goto out_init_response; + } + + ret = ssd_init_cmd(dev); + if (ret) { + hio_warn("%s: init msg failed\n", dev->name); + goto out_init_cmd; + } + + ret = ssd_init_dcmd(dev); + if (ret) { + hio_warn("%s: init cmd failed\n", dev->name); + goto out_init_dcmd; + } + + ret = ssd_init_irq(dev); + if (ret) { + hio_warn("%s: init irq failed\n", dev->name); + goto out_init_irq; + } + + ret = ssd_init_thread(dev); + if (ret) { + hio_warn("%s: init thread failed\n", dev->name); + goto out_init_thread; + } + + ret = ssd_init_tag(dev); + if(ret) { + hio_warn("%s: init tags failed\n", dev->name); + goto out_init_tags; + } + + /* */ + (void)test_and_set_bit(SSD_ONLINE, &dev->state); + + ret = ssd_init_queue(dev); + if (ret) { + hio_warn("%s: init queue failed\n", dev->name); + goto out_init_queue; + } + + /* slave port ? */ + if (dev->slave) { + goto init_next3; + } + + ret = ssd_init_ot_protect(dev); + if (ret) { + hio_err("%s: int ot_protect failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_int_ot_protect; + } + + ret = ssd_init_wmode(dev); + if (ret) { + hio_warn("%s: init write mode\n", dev->name); + goto out_init_wmode; + } + + /* init routine after hw is ready */ + ret = ssd_init_routine(dev); + if (ret) { + hio_warn("%s: init routine\n", dev->name); + goto out_init_routine; + } + + ret = ssd_init_chardev(dev); + if (ret) { + hio_warn("%s: register char device failed\n", dev->name); + goto out_init_chardev; + } + +init_next3: + ret = ssd_init_blkdev(dev); + if (ret) { + hio_warn("%s: register block device failed\n", dev->name); + goto out_init_blkdev; + } + (void)test_and_set_bit(SSD_INIT_BD, &dev->state); + + ret = ssd_register_sysfs(dev); + if (ret) { + hio_warn("%s: register sysfs failed\n", dev->name); + goto out_register_sysfs; + } + + dev->save_md = 1; + + list_add_tail(&dev->list, &ssd_list); + + return 0; + +out_register_sysfs: + test_and_clear_bit(SSD_INIT_BD, &dev->state); + ssd_cleanup_blkdev(dev); +out_init_blkdev: + /* slave port ? */ + if (!dev->slave) { + ssd_cleanup_chardev(dev); + } +out_init_chardev: + /* slave port ? */ + if (!dev->slave) { + ssd_cleanup_routine(dev); + } +out_init_routine: +out_init_wmode: +out_int_ot_protect: + ssd_cleanup_queue(dev); +out_init_queue: + test_and_clear_bit(SSD_ONLINE, &dev->state); + ssd_cleanup_tag(dev); +out_init_tags: + ssd_cleanup_thread(dev); +out_init_thread: + ssd_free_irq(dev); +out_init_irq: + ssd_cleanup_dcmd(dev); +out_init_dcmd: + ssd_cleanup_cmd(dev); +out_init_cmd: + ssd_cleanup_response(dev); +out_init_response: +out_check_init_state: +out_init_pl_cap: +out_init_sensor: +out_init_hw_info: +out_init_smart: + /* slave port ? */ + if (!dev->slave) { + ssd_cleanup_log(dev); + } +out_init_log: + /* slave port ? */ + if (!dev->slave) { + test_and_clear_bit(SSD_INIT_WORKQ, &dev->state); + ssd_cleanup_workq(dev); + } +out_init_workq: +out_init_label: +out_init_rom_info: +out_init_fw_info: +out_init_protocol_info: +out_check_hw: +#ifdef LINUX_SUSE_OS + iounmap(dev->ctrlp); +#else + pci_iounmap(pdev, dev->ctrlp); +#endif +out_pci_iomap: + release_mem_region(dev->mmio_base, dev->mmio_len); +out_request_mem_region: +out_set_dma_mask: + pci_disable_device(pdev); +out_enable_device: + pci_set_drvdata(pdev, NULL); +out_get_index: + kfree(dev); +out_alloc_dev: +out: + return ret; +} + +static void ssd_cleanup_tasklet(void) +{ + int i; + for_each_online_cpu(i) { + tasklet_kill(&per_cpu(ssd_tasklet, i)); + } +} + +static int ssd_init_tasklet(void) +{ + int i; + + for_each_online_cpu(i) { + INIT_LIST_HEAD(&per_cpu(ssd_doneq, i)); + + if (finject) { + tasklet_init(&per_cpu(ssd_tasklet, i), __ssd_done_db, 0); + } else { + tasklet_init(&per_cpu(ssd_tasklet, i), __ssd_done, 0); + } + } + + return 0; +} + +static struct pci_device_id ssd_pci_tbl[] = { + { 0x10ee, 0x0007, PCI_ANY_ID, PCI_ANY_ID, }, /* g3 */ + { 0x19e5, 0x0007, PCI_ANY_ID, PCI_ANY_ID, }, /* v1 */ + //{ 0x19e5, 0x0008, PCI_ANY_ID, PCI_ANY_ID, }, /* v1 sp*/ + { 0x19e5, 0x0009, PCI_ANY_ID, PCI_ANY_ID, }, /* v2 */ + { 0x19e5, 0x000a, PCI_ANY_ID, PCI_ANY_ID, }, /* v2 dp slave*/ + { 0, } +}; + +/*driver power management handler for pm_ops*/ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) +static int ssd_hio_suspend(struct pci_dev *pdev, pm_message_t state) +{ +#else +static int ssd_hio_suspend(struct device *ddev) +{ + struct pci_dev *pdev = to_pci_dev(ddev); +#endif + struct ssd_device *dev; + + + if (!pdev) { + return -EINVAL; + } + + dev = pci_get_drvdata(pdev); + if (!dev) { + return -EINVAL; + } + + hio_warn("%s: suspend disk start.\n", dev->name); + ssd_unregister_sysfs(dev); + + /* offline firstly */ + test_and_clear_bit(SSD_ONLINE, &dev->state); + + /* clean work queue first */ + if (!dev->slave) { + test_and_clear_bit(SSD_INIT_WORKQ, &dev->state); + ssd_cleanup_workq(dev); + } + + /* flush cache */ + (void)ssd_flush(dev); + (void)ssd_save_md(dev); + + /* save smart */ + if (!dev->slave) { + ssd_save_smart(dev); + } + + /* clean routine */ + if (!dev->slave) { + ssd_cleanup_routine(dev); + } + + ssd_cleanup_thread(dev); + + ssd_free_irq(dev); + + if (!dev->slave) { + ssd_cleanup_log(dev); + } + + if (dev->reload_fw) { //reload fw + dev->has_non_0x98_reg_access = 1; + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FW); + } + + /* unmap physical adress */ + if (dev->ctrlp) { +#ifdef LINUX_SUSE_OS + iounmap(dev->ctrlp); +#else + pci_iounmap(pdev, dev->ctrlp); +#endif + dev->ctrlp = NULL; + } + + if (dev->mmio_base) { + release_mem_region(dev->mmio_base, dev->mmio_len); + dev->mmio_base = 0; + } + + pci_disable_device(pdev); + + hio_warn("%s: suspend disk finish.\n", dev->name); + + return 0; +} + + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) +static int ssd_hio_resume(struct pci_dev *pdev) +{ +#else +static int ssd_hio_resume(struct device *ddev) +{ + struct pci_dev *pdev = to_pci_dev(ddev); +#endif + struct ssd_device *dev = NULL; + int ret = 0; + + if (!pdev ) { + ret = -EINVAL; + goto out; + } + + dev = pci_get_drvdata(pdev); + if (!dev) { + ret = -ENOMEM; + goto out_alloc_dev; + } + + hio_warn("%s: resume disk start.\n", dev->name); + ret = pci_enable_device(pdev); + if (ret) { + hio_warn("%s: can not enable device\n", dev->name); + goto out_enable_device; + } + + pci_set_master(pdev); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) + ret = pci_set_dma_mask(pdev, DMA_64BIT_MASK); +#else + ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); +#endif + if (ret) { + hio_warn("%s: set dma mask: failed\n", dev->name); + goto out_set_dma_mask; + } + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) + ret = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); +#else + ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); +#endif + if (ret) { + hio_warn("%s: set consistent dma mask: failed\n", dev->name); + goto out_set_dma_mask; + } + + dev->mmio_base = pci_resource_start(pdev, 0); + dev->mmio_len = pci_resource_len(pdev, 0); + + if (!request_mem_region(dev->mmio_base, dev->mmio_len, SSD_DEV_NAME)) { + hio_warn("%s: can not reserve MMIO region 0\n", dev->name); + ret = -EBUSY; + goto out_request_mem_region; + } + + /* 2.6.9 kernel bug */ + dev->ctrlp = pci_iomap(pdev, 0, 0); + if (!dev->ctrlp) { + hio_warn("%s: can not remap IO region 0\n", dev->name); + ret = -ENOMEM; + goto out_pci_iomap; + } + + ret = ssd_check_hw(dev); + if (ret) { + hio_err("%s: check hardware failed\n", dev->name); + goto out_check_hw; + } + + /* alarm led ? */ + ssd_clear_alarm(dev); + + ret = ssd_init_fw_info(dev); + if (ret) { + hio_err("%s: init firmware info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_fw_info; + } + + /* slave port ? */ + if (dev->slave) { + goto init_next1; + } + + ret = ssd_init_rom_info(dev); + if (ret) { + hio_err("%s: init rom info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_rom_info; + } + + ret = ssd_init_label(dev); + if (ret) { + hio_err("%s: init label failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_label; + } + + ret = ssd_init_workq(dev); + if (ret) { + hio_warn("%s: init workq failed\n", dev->name); + goto out_init_workq; + } + (void)test_and_set_bit(SSD_INIT_WORKQ, &dev->state); + + ret = ssd_init_log(dev); + if (ret) { + hio_err("%s: init log failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_log; + } + + ret = ssd_init_smart(dev); + if (ret) { + hio_err("%s: init info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_smart; + } + +init_next1: + ret = ssd_init_hw_info(dev); + if (ret) { + hio_err("%s: init hardware info failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_hw_info; + } + + /* slave port ? */ + if (dev->slave) { + goto init_next2; + } + + ret = ssd_init_sensor(dev); + if (ret) { + hio_err("%s: init sensor failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_sensor; + } + + ret = ssd_init_pl_cap(dev); + if (ret) { + hio_err("%s: int pl_cap failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_init_pl_cap; + } + +init_next2: + ret = ssd_check_init_state(dev); + if (ret) { + hio_err("%s: check init state failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_check_init_state; + } + + //flush all base pointer to ssd + (void)ssd_reload_ssd_ptr(dev); + + ret = ssd_init_irq(dev); + if (ret) { + hio_warn("%s: init irq failed\n", dev->name); + goto out_init_irq; + } + + ret = ssd_init_thread(dev); + if (ret) { + hio_warn("%s: init thread failed\n", dev->name); + goto out_init_thread; + } + + /* */ + (void)test_and_set_bit(SSD_ONLINE, &dev->state); + + /* slave port ? */ + if (dev->slave) { + goto init_next3; + } + + ret = ssd_init_ot_protect(dev); + if (ret) { + hio_err("%s: int ot_protect failed\n", dev->name); + /* alarm led */ + ssd_set_alarm(dev); + goto out_int_ot_protect; + } + + ret = ssd_init_wmode(dev); + if (ret) { + hio_warn("%s: init write mode\n", dev->name); + goto out_init_wmode; + } + + /* init routine after hw is ready */ + ret = ssd_init_routine(dev); + if (ret) { + hio_warn("%s: init routine\n", dev->name); + goto out_init_routine; + } + +init_next3: + (void)test_and_set_bit(SSD_INIT_BD, &dev->state); + + dev->save_md = 1; + + hio_warn("%s: resume disk finish.\n", dev->name); + + return 0; + +out_init_routine: +out_init_wmode: +out_int_ot_protect: + ssd_cleanup_thread(dev); +out_init_thread: + ssd_free_irq(dev); +out_init_irq: +out_check_init_state: +out_init_pl_cap: +out_init_sensor: +out_init_hw_info: +out_init_smart: + /* slave port ? */ + if (!dev->slave) { + ssd_cleanup_log(dev); + } +out_init_log: + /* slave port ? */ + if (!dev->slave) { + test_and_clear_bit(SSD_INIT_WORKQ, &dev->state); + ssd_cleanup_workq(dev); + } +out_init_workq: +out_init_label: +out_init_rom_info: +out_init_fw_info: +out_check_hw: +#ifdef LINUX_SUSE_OS + iounmap(dev->ctrlp); +#else + pci_iounmap(pdev, dev->ctrlp); +#endif +out_pci_iomap: + release_mem_region(dev->mmio_base, dev->mmio_len); +out_request_mem_region: +out_set_dma_mask: + pci_disable_device(pdev); +out_enable_device: +out_alloc_dev: +out: + + hio_warn("%s: resume disk fail.\n", dev->name); + + return ret; +} + +MODULE_DEVICE_TABLE(pci, ssd_pci_tbl); + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) +#else +SIMPLE_DEV_PM_OPS(hio_pm_ops, ssd_hio_suspend, ssd_hio_resume); +#endif + +MODULE_DEVICE_TABLE(pci, ssd_pci_tbl); +struct pci_driver ssd_driver = { + .name = MODULE_NAME, + .id_table = ssd_pci_tbl, + .probe = ssd_init_one, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) + .remove = __devexit_p(ssd_remove_one), +#else + .remove = ssd_remove_one, +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) + .suspend = ssd_hio_suspend, + .resume = ssd_hio_resume, +#else + .driver = { + .pm = &hio_pm_ops, + }, +#endif +}; + +/* notifier block to get a notify on system shutdown/halt/reboot */ +static int ssd_notify_reboot(struct notifier_block *nb, unsigned long event, void *buf) +{ + struct ssd_device *dev = NULL; + struct ssd_device *n = NULL; + + list_for_each_entry_safe(dev, n, &ssd_list, list) { + ssd_gen_swlog(dev, SSD_LOG_POWER_OFF, 0); + + (void)ssd_flush(dev); + (void)ssd_save_md(dev); + + /* slave port ? */ + if (!dev->slave) { + ssd_save_smart(dev); + + ssd_stop_workq(dev); + + if (dev->reload_fw) { + dev->has_non_0x98_reg_access = 1; + ssd_reg32_write(dev->ctrlp + SSD_RELOAD_FW_REG, SSD_RELOAD_FW); + } + } + } + + return NOTIFY_OK; +} + +static struct notifier_block ssd_notifier = { + ssd_notify_reboot, NULL, 0 +}; + +static int __init ssd_init_module(void) +{ + int ret = 0; + + hio_info("driver version: %s\n", DRIVER_VERSION); + + ret = ssd_init_index(); + if (ret) { + hio_warn("init index failed\n"); + goto out_init_index; + } + + ret = ssd_init_proc(); + if (ret) { + hio_warn("init proc failed\n"); + goto out_init_proc; + } + + ret = ssd_init_sysfs(); + if (ret) { + hio_warn("init sysfs failed\n"); + goto out_init_sysfs; + } + + ret = ssd_init_tasklet(); + if (ret) { + hio_warn("init tasklet failed\n"); + goto out_init_tasklet; + } + +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) + ssd_class = class_simple_create(THIS_MODULE, SSD_DEV_NAME); +#else + ssd_class = class_create(THIS_MODULE, SSD_DEV_NAME); +#endif + if (IS_ERR(ssd_class)) { + ret = PTR_ERR(ssd_class); + goto out_class_create; + } + + if (ssd_cmajor > 0) { + ret = register_chrdev(ssd_cmajor, SSD_CDEV_NAME, &ssd_cfops); + } else { + ret = ssd_cmajor = register_chrdev(ssd_cmajor, SSD_CDEV_NAME, &ssd_cfops); + } + if (ret < 0) { + hio_warn("unable to register chardev major number\n"); + goto out_register_chardev; + } + + if (ssd_major > 0) { + ret = register_blkdev(ssd_major, SSD_DEV_NAME); + } else { + ret = ssd_major = register_blkdev(ssd_major, SSD_DEV_NAME); + } + if (ret < 0) { + hio_warn("unable to register major number\n"); + goto out_register_blkdev; + } + + if (ssd_major_sl > 0) { + ret = register_blkdev(ssd_major_sl, SSD_SDEV_NAME); + } else { + ret = ssd_major_sl = register_blkdev(ssd_major_sl, SSD_SDEV_NAME); + } + if (ret < 0) { + hio_warn("unable to register slave major number\n"); + goto out_register_blkdev_sl; + } + + if (mode < SSD_DRV_MODE_STANDARD || mode > SSD_DRV_MODE_BASE) { + mode = SSD_DRV_MODE_STANDARD; + } + + /* for debug */ + if (mode != SSD_DRV_MODE_STANDARD) { + ssd_minors = 1; + } + + if (int_mode < SSD_INT_LEGACY || int_mode > SSD_INT_MSIX) { + int_mode = SSD_INT_MODE_DEFAULT; + } + + if (threaded_irq) { + int_mode = SSD_INT_MSI; + } + + if (log_level >= SSD_LOG_NR_LEVEL || log_level < SSD_LOG_LEVEL_INFO) { + log_level = SSD_LOG_LEVEL_ERR; + } + + if (wmode < SSD_WMODE_BUFFER || wmode > SSD_WMODE_DEFAULT) { + wmode = SSD_WMODE_DEFAULT; + } + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + ret = pci_module_init(&ssd_driver); +#else + ret = pci_register_driver(&ssd_driver); +#endif + if (ret) { + hio_warn("pci init failed\n"); + goto out_pci_init; + } + + ret = register_reboot_notifier(&ssd_notifier); + if (ret) { + hio_warn("register reboot notifier failed\n"); + goto out_register_reboot_notifier; + } + + return 0; + +out_register_reboot_notifier: +out_pci_init: + pci_unregister_driver(&ssd_driver); + unregister_blkdev(ssd_major_sl, SSD_SDEV_NAME); +out_register_blkdev_sl: + unregister_blkdev(ssd_major, SSD_DEV_NAME); +out_register_blkdev: + unregister_chrdev(ssd_cmajor, SSD_CDEV_NAME); +out_register_chardev: +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) + class_simple_destroy(ssd_class); +#else + class_destroy(ssd_class); +#endif +out_class_create: + ssd_cleanup_tasklet(); +out_init_tasklet: + ssd_cleanup_sysfs(); +out_init_sysfs: + ssd_cleanup_proc(); +out_init_proc: + ssd_cleanup_index(); +out_init_index: + return ret; + +} + +static void __exit ssd_cleanup_module(void) +{ + + hio_info("unload driver: %s\n", DRIVER_VERSION); + /* exiting */ + ssd_exiting = 1; + + unregister_reboot_notifier(&ssd_notifier); + + pci_unregister_driver(&ssd_driver); + + unregister_blkdev(ssd_major_sl, SSD_SDEV_NAME); + unregister_blkdev(ssd_major, SSD_DEV_NAME); + unregister_chrdev(ssd_cmajor, SSD_CDEV_NAME); +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12)) + class_simple_destroy(ssd_class); +#else + class_destroy(ssd_class); +#endif + + ssd_cleanup_tasklet(); + ssd_cleanup_sysfs(); + ssd_cleanup_proc(); + ssd_cleanup_index(); +} + +int ssd_register_event_notifier(struct block_device *bdev, ssd_event_call event_call) +{ + struct ssd_device *dev; + struct timeval tv; + struct ssd_log *le, *temp_le = NULL; + uint64_t cur; + int temp = 0; + int log_nr; + + if (!bdev || !event_call || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + dev->event_call = event_call; + + do_gettimeofday(&tv); + cur = tv.tv_sec; + + le = (struct ssd_log *)(dev->internal_log.log); + log_nr = dev->internal_log.nr_log; + + while (log_nr--) { + if (le->time <= cur && le->time >= dev->uptime) { + if ((le->le.event == SSD_LOG_SEU_FAULT1) && (le->time < dev->reset_time)) { + le++; + continue; + } + if (le->le.event == SSD_LOG_OVER_TEMP || le->le.event == SSD_LOG_NORMAL_TEMP || le->le.event == SSD_LOG_WARN_TEMP) { + if (!temp_le || le->time >= temp_le->time) { + temp_le = le; + } + le++; + continue; + } + (void)dev->event_call(dev->gd, le->le.event, ssd_parse_log(dev, le, 0)); + } + le++; + } + + ssd_get_temperature(bdev, &temp); + if (temp_le && (temp >= SSD_OT_TEMP_HYST)) { + (void)dev->event_call(dev->gd, temp_le->le.event, ssd_parse_log(dev, temp_le, 0)); + } + + return 0; +} + +int ssd_unregister_event_notifier(struct block_device *bdev) +{ + struct ssd_device *dev; + + if (!bdev || !(bdev->bd_disk)) { + return -EINVAL; + } + + dev = bdev->bd_disk->private_data; + dev->event_call = NULL; + + return 0; +} + +EXPORT_SYMBOL(ssd_get_label); +EXPORT_SYMBOL(ssd_get_version); +EXPORT_SYMBOL(ssd_set_otprotect); +EXPORT_SYMBOL(ssd_bm_status); +EXPORT_SYMBOL(ssd_submit_pbio); +EXPORT_SYMBOL(ssd_get_pciaddr); +EXPORT_SYMBOL(ssd_get_temperature); +EXPORT_SYMBOL(ssd_register_event_notifier); +EXPORT_SYMBOL(ssd_unregister_event_notifier); +EXPORT_SYMBOL(ssd_reset); +EXPORT_SYMBOL(ssd_set_wmode); + + + +module_init(ssd_init_module); +module_exit(ssd_cleanup_module); +MODULE_VERSION(DRIVER_VERSION); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Huawei SSD DEV Team"); +MODULE_DESCRIPTION("Huawei SSD driver"); --- linux-aws-4.15.0.orig/ubuntu/hio/hio.h +++ linux-aws-4.15.0/ubuntu/hio/hio.h @@ -0,0 +1,104 @@ +/* +* Huawei SSD device driver +* Copyright (c) 2016, Huawei Technologies Co., Ltd. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms and conditions of the GNU General Public License, +* version 2, as published by the Free Software Foundation. +* +* This program is distributed in the hope 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 _HIO_H +#define _HIO_H + +#include +#include +#include +#include + + + +typedef int (*ssd_event_call)(struct gendisk *, int, int); /* gendisk, event id, event level */ +extern int ssd_register_event_notifier(struct block_device *bdev, ssd_event_call event_call); +/* unregister event notifier before module exit */ +extern int ssd_unregister_event_notifier(struct block_device *bdev); + + +/* label */ +#define SSD_LABEL_FIELD_SZ 32 +#define SSD_SN_SZ 16 + +typedef struct ssd_label +{ + char date[SSD_LABEL_FIELD_SZ]; + char sn[SSD_LABEL_FIELD_SZ]; + char part[SSD_LABEL_FIELD_SZ]; + char desc[SSD_LABEL_FIELD_SZ]; + char other[SSD_LABEL_FIELD_SZ]; + char maf[SSD_LABEL_FIELD_SZ]; +} ssd_label_t; + + +/* version */ +typedef struct ssd_version_info +{ + uint32_t bridge_ver; /* bridge fw version: hex */ + uint32_t ctrl_ver; /* controller fw version: hex */ + uint32_t bm_ver; /* battery manager fw version: hex */ + uint8_t pcb_ver; /* main pcb version: char */ + uint8_t upper_pcb_ver; + uint8_t pad0; + uint8_t pad1; +} ssd_version_info_t; + +extern int ssd_get_label(struct block_device *bdev, struct ssd_label *label); +extern int ssd_get_version(struct block_device *bdev, struct ssd_version_info *ver); +extern int ssd_get_temperature(struct block_device *bdev, int *temp); + + +enum ssd_bmstatus +{ + SSD_BMSTATUS_OK = 0, + SSD_BMSTATUS_CHARGING, + SSD_BMSTATUS_WARNING +}; +extern int ssd_bm_status(struct block_device *bdev, int *status); + +enum ssd_otprotect +{ + SSD_OTPROTECT_OFF = 0, + SSD_OTPROTECT_ON +}; +extern int ssd_set_otprotect(struct block_device *bdev, int otprotect); + +typedef struct pci_addr +{ + uint16_t domain; + uint8_t bus; + uint8_t slot; + uint8_t func; +} pci_addr_t; +extern int ssd_get_pciaddr(struct block_device *bdev, struct pci_addr *paddr); + +/* submit phys bio: phys addr in iovec */ +extern void ssd_submit_pbio(struct request_queue *q, struct bio *bio); + +extern int ssd_reset(struct block_device *bdev); + +enum ssd_write_mode +{ + SSD_WMODE_BUFFER = 0, + SSD_WMODE_BUFFER_EX, + SSD_WMODE_FUA, + /* dummy */ + SSD_WMODE_AUTO, + SSD_WMODE_DEFAULT +}; +extern int ssd_set_wmode(struct block_device *bdev, int wmode); + +#endif + --- linux-aws-4.15.0.orig/ubuntu/include/Kbuild +++ linux-aws-4.15.0/ubuntu/include/Kbuild @@ -0,0 +1,2 @@ + + --- linux-aws-4.15.0.orig/ubuntu/include/README +++ linux-aws-4.15.0/ubuntu/include/README @@ -0,0 +1,4 @@ +Only use this directory for things which need to share their headers with +other parts of the kernel or other modules in ubuntu/ + +Otherwise, keep them local to the module directory. --- linux-aws-4.15.0.orig/ubuntu/vbox-update +++ linux-aws-4.15.0/ubuntu/vbox-update @@ -0,0 +1,66 @@ +#!/bin/bash +# +# vbox-update + +# +# NOTE: update vbox/BOM if you get the source from anywhere other than +# the archive. +# +# To update: +# TMP=$HOME/tmp +# wget -O $TMP/virtualbox-guest-dkms.deb http://ports.ubuntu.com/pool/multiverse/v/virtualbox/virtualbox-guest-dkms_4.3.22-dfsg-1_all.deb +# dpkg-deb -R $TMP/virtualbox-guest-dkms.deb $TMP/virtualbox-guest-update +# vbox-update $TMP/virtualbox-guest-update +# +# To test build: +# fakeroot debian/rules prepare-generic +# make O=debian/build/build-generic/ ubuntu/vbox/vboxguest/vboxguest.ko ubuntu/vbox/vboxvideo/vboxvideo.ko ubuntu/vbox/vboxsf/vboxsf.ko +# + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi +vbox="$1" + +# Update vbox ... +git rm -rf vbox +mkdir vbox +cp -rp "$vbox/usr/src/"*/* vbox + +# Work out what version this represents. +ver=`awk '($1 == "Version:") { print $2 }' <"$vbox/DEBIAN/control"` + +# Fix up the KBUILD_EXTMOD as we are not building externally. +for make in vbox/*/Makefile +do + sed -i -e '1iKBUILD_EXTMOD=${srctree}/ubuntu/vbox' $make +done + +# Fix up KERN_DIR to point at the kernel source tree +for make in vbox/*/Makefile.include.header +do + sed -i -e 's/^KERN_DIR := .*$/KERN_DIR := $(srctree)/' $make +done + +# We're now using the vboxvideo module in drivers/staging, so disable +# the version that was imported. +sed -i -e 's: vboxvideo/::' vbox/Makefile + +# Reduce the version of the in-kernel module just slightly so it +# will not clash with the dkms package. +for version in vbox/*/version-generated.h +do + sed -i -e 's/_Ubuntu"/_KernelUbuntu"/' $version +done + +# Record the version number and nominal source. +{ + echo "Source: http://ports.ubuntu.com/pool/multiverse/v/virtualbox/virtualbox-guest-dkms_${ver}_all.deb" + echo "Version: $ver" +} >vbox/BOM + +git add vbox +{ + echo "UBUNTU: ubuntu: vbox -- update to $ver" +} | git commit -s -F - --- linux-aws-4.15.0.orig/ubuntu/vbox/BOM +++ linux-aws-4.15.0/ubuntu/vbox/BOM @@ -0,0 +1,2 @@ +Source: http://ports.ubuntu.com/pool/multiverse/v/virtualbox/virtualbox-guest-dkms_5.2.6-dfsg-2_all.deb +Version: 5.2.6-dfsg-2 --- linux-aws-4.15.0.orig/ubuntu/vbox/Makefile +++ linux-aws-4.15.0/ubuntu/vbox/Makefile @@ -0,0 +1,3 @@ +.NOTPARALLEL: + +obj-m = vboxguest/ vboxsf/ --- linux-aws-4.15.0.orig/ubuntu/vbox/dkms.conf +++ linux-aws-4.15.0/ubuntu/vbox/dkms.conf @@ -0,0 +1,13 @@ +PACKAGE_NAME="virtualbox-guest" +PACKAGE_VERSION="5.2.6" +CLEAN="rm -f *.*o" +BUILT_MODULE_NAME[0]="vboxguest" +BUILT_MODULE_LOCATION[0]="vboxguest" +DEST_MODULE_LOCATION[0]="/updates" +BUILT_MODULE_NAME[1]="vboxsf" +BUILT_MODULE_LOCATION[1]="vboxsf" +DEST_MODULE_LOCATION[1]="/updates" +BUILT_MODULE_NAME[2]="vboxvideo" +BUILT_MODULE_LOCATION[2]="vboxvideo" +DEST_MODULE_LOCATION[2]="/updates" +AUTOINSTALL="yes" --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/Makefile +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/Makefile @@ -0,0 +1,161 @@ +KBUILD_EXTMOD=${srctree}/ubuntu/vbox +# $Revision: 119168 $ +## @file +# VirtualBox Guest Additions Module Makefile. +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# +# The contents of this file may alternatively be used under the terms +# of the Common Development and Distribution License Version 1.0 +# (CDDL) only, as it comes in the "COPYING.CDDL" file of the +# VirtualBox OSE distribution, in which case the provisions of the +# CDDL are applicable instead of those of the GPL. +# +# You may elect to license modified versions of this file under the +# terms and conditions of either the GPL or the CDDL or both. +# + +# Linux kbuild sets this to our source directory if we are called from there +obj ?= $(CURDIR) +include $(obj)/Makefile.include.header + +MOD_NAME = vboxguest + +MOD_OBJS = \ + VBoxGuest-linux.o \ + VBoxGuest.o \ + VBoxGuestR0LibGenericRequest.o \ + VBoxGuestR0LibHGCMInternal.o \ + VBoxGuestR0LibInit.o \ + VBoxGuestR0LibPhysHeap.o \ + VBoxGuestR0LibVMMDev.o \ + r0drv/alloc-r0drv.o \ + r0drv/initterm-r0drv.o \ + r0drv/memobj-r0drv.o \ + r0drv/mpnotification-r0drv.o \ + r0drv/powernotification-r0drv.o \ + r0drv/linux/alloc-r0drv-linux.o \ + r0drv/linux/assert-r0drv-linux.o \ + r0drv/linux/initterm-r0drv-linux.o \ + r0drv/linux/memobj-r0drv-linux.o \ + r0drv/linux/memuserkernel-r0drv-linux.o \ + r0drv/linux/mp-r0drv-linux.o \ + r0drv/linux/mpnotification-r0drv-linux.o \ + r0drv/linux/process-r0drv-linux.o \ + r0drv/linux/semevent-r0drv-linux.o \ + r0drv/linux/semeventmulti-r0drv-linux.o \ + r0drv/linux/semfastmutex-r0drv-linux.o \ + r0drv/linux/semmutex-r0drv-linux.o \ + r0drv/linux/spinlock-r0drv-linux.o \ + r0drv/linux/thread-r0drv-linux.o \ + r0drv/linux/thread2-r0drv-linux.o \ + r0drv/linux/time-r0drv-linux.o \ + r0drv/linux/timer-r0drv-linux.o \ + r0drv/linux/RTLogWriteDebugger-r0drv-linux.o \ + r0drv/generic/semspinmutex-r0drv-generic.o \ + common/alloc/alloc.o \ + common/err/RTErrConvertFromErrno.o \ + common/err/RTErrConvertToErrno.o \ + common/err/errinfo.o \ + common/log/log.o \ + common/log/logellipsis.o \ + common/log/logrel.o \ + common/log/logrelellipsis.o \ + common/log/logcom.o \ + common/log/logformat.o \ + common/misc/RTAssertMsg1Weak.o \ + common/misc/RTAssertMsg2.o \ + common/misc/RTAssertMsg2Add.o \ + common/misc/RTAssertMsg2AddWeak.o \ + common/misc/RTAssertMsg2AddWeakV.o \ + common/misc/RTAssertMsg2Weak.o \ + common/misc/RTAssertMsg2WeakV.o \ + common/misc/assert.o \ + common/misc/thread.o \ + common/string/RTStrCat.o \ + common/string/RTStrCopy.o \ + common/string/RTStrCopyEx.o \ + common/string/RTStrCopyP.o \ + common/string/strformat.o \ + common/string/strformatrt.o \ + common/string/strformattype.o \ + common/string/strprintf.o \ + common/string/strtonum.o \ + common/table/avlpv.o \ + common/time/time.o \ + generic/RTAssertShouldPanic-generic.o \ + generic/RTLogWriteStdErr-stub-generic.o \ + generic/RTLogWriteStdOut-stub-generic.o \ + generic/RTMpGetCoreCount-generic.o \ + generic/RTSemEventWait-2-ex-generic.o \ + generic/RTSemEventWaitNoResume-2-ex-generic.o \ + generic/RTSemEventMultiWait-2-ex-generic.o \ + generic/RTSemEventMultiWaitNoResume-2-ex-generic.o \ + generic/rtStrFormatKernelAddress-generic.o \ + generic/errvars-generic.o \ + generic/mppresent-generic.o \ + VBox/log-vbox.o \ + VBox/logbackdoor.o +ifeq ($(BUILD_TARGET_ARCH),x86) +MOD_OBJS += \ + common/math/gcc/divdi3.o \ + common/math/gcc/moddi3.o \ + common/math/gcc/udivdi3.o \ + common/math/gcc/udivmoddi4.o \ + common/math/gcc/umoddi3.o \ + common/math/gcc/qdivrem.o +endif +ifeq ($(BUILD_TARGET_ARCH),amd64) +MOD_OBJS += common/alloc/heapsimple.o +endif + +MOD_DEFS = -DVBOX -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_GUEST \ + -DIN_GUEST_R0 -DIN_MODULE -DRT_WITH_VBOX -DVBGL_VBOXGUEST \ + -DVBOX_WITH_HGCM +ifeq ($(BUILD_TARGET_ARCH),amd64) + MOD_DEFS += -DRT_ARCH_AMD64 +else + MOD_DEFS += -DRT_ARCH_X86 +endif +ifeq ($(BUILD_TARGET_ARCH),amd64) + MOD_DEFS += -DVBOX_WITH_64_BITS_GUESTS +endif +MOD_INCL = $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux) +MOD_INCL += $(addprefix -I$(KBUILD_EXTMOD)/vboxguest,/ /include /r0drv/linux) + +ifneq ($(wildcard $(KBUILD_EXTMOD)/vboxguest),) + MANGLING := $(KBUILD_EXTMOD)/vboxguest/include/VBox/VBoxGuestMangling.h +else + MANGLING := $(KBUILD_EXTMOD)/include/VBox/VBoxGuestMangling.h +endif +ifeq ($(KERN_VERSION),24) + ## @todo move to MOD_DEFS when we have finished refactoring + MOD_CFLAGS = -DEXPORT_SYMTAB +else + MOD_CFLAGS = -Wno-declaration-after-statement -include $(MANGLING) -fno-pie +endif + +MOD_CLEAN = . linux r0drv generic r0drv/linux r0drv/generic VBox \ + common/alloc common/err common/log common/math/gcc common/misc \ + common/string common/table common/time + +include $(obj)/Makefile.include.footer + +check: $(MOD_NAME) + @if ! readelf -p __ksymtab_strings vboxguest.ko | grep -E "\[.*\] *(RT|g_..*RT.*)"; then \ + echo "All exported IPRT symbols are properly renamed!"; \ + else \ + echo "error: Some exported IPRT symbols was not properly renamed! See above." >&2; \ + false; \ + fi + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/Makefile.include.footer +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/Makefile.include.footer @@ -0,0 +1,112 @@ +# $Id: Makefile.include.footer $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# See Makefile.include.header for details of how to use this. +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# override is required by the Debian guys +override MODULE = $(MOD_NAME) +OBJS = $(MOD_OBJS) + +KBUILD_VERBOSE ?= 1 +LINUX_VERBOSE = $(if $(KBUILD_VERBOSE),1,) + +# +# Compiler options +# +ifndef INCL + INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL)) + ifndef KBUILD_EXTMOD + KBUILD_EXTMOD := $(shell pwd) + endif + INCL += $(MOD_INCL) + export INCL +endif +KFLAGS := -D__KERNEL__ -DMODULE $(MOD_DEFS) +ifeq ($(BUILD_TYPE),debug) + KFLAGS += -DDEBUG -DDEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) -DDEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME)) +endif + +ifeq ($(KERN_VERSION), 24) +# +# 2.4 +# + +# Note: while 2.4 kernels could also do "proper" builds from kbuild, the make +# script needed to support it was somewhat different from 2.6. Since this +# script works and 2.4 is not a moving target we will not try do do things the +# "proper" way. + +ifeq ($(BUILD_TARGET_ARCH),amd64) + KFLAGS += -mcmodel=kernel +endif + +CFLAGS := -O2 -DVBOX_LINUX_2_4 $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) +MODULE_EXT := o + +# 2.4 Module linking +$(MODULE).o: $(OBJS) + $(LD) -o $@ -r $(OBJS) + +.PHONY: $(MODULE) +all: $(MODULE) +$(MODULE): $(MODULE).o + +install: $(MODULE) + @mkdir -p $(MODULE_DIR); \ + install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \ + PATH="$(PATH):/bin:/sbin" depmod -a; + +clean: + for f in $(sort $(dir $(OBJS))); do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done + rm -rf .$(MOD_NAME)* .tmp_ver* $(MOD_NAME).* Modules.symvers modules.order + +else # ! $(KERN_VERSION), 24 +# +# 2.6 and later +# + +MODULE_EXT := ko + +$(MODULE)-y := $(OBJS) + +# build defs +EXTRA_CFLAGS += $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) + +.PHONY: $(MODULE) +all: $(MODULE) + +obj-m += $(MODULE).o + +JOBS := $(shell (getconf _NPROCESSORS_ONLN || grep -Ec '^processor|^CPU[0-9]' /proc/cpuinfo) 2>/dev/null) +ifeq ($(JOBS),0) + JOBS := 1 +endif + +# OL/UEK: disable module signing for external modules -- we don't have any private key +$(MODULE): + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) $(if $(JOBS),-j$(JOBS),) modules + +install: $(MODULE) + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) modules_install + +modules_install: install + +clean: + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) clean + +.PHONY: $(MODULE) install modules_install clean +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/Makefile.include.header +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/Makefile.include.header @@ -0,0 +1,158 @@ +# $Id: Makefile.include.header $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# (For 2.6.x, the main file must be called 'Makefile'!) +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# Testing: +# * Building with KERN_DIR set uses the value specified and +# the default value for the unspecified one if any. + +# +# These file should be included by the Makefiles for any kernel modules we +# build as part of the Guest Additions. The intended way of doing this is as +# follows: +# +# # Linux kbuild sets this to our source directory if we are called from +# # there +# obj ?= $(CURDIR) +# include $(obj)/Makefile.include.header +# MOD_NAME = +# MOD_OBJS = +# MOD_DEFS = +# MOD_INCL = +# MOD_CFLAGS = +# include $(obj)/Makefile.include.footer +# +# The kmk kBuild define KBUILD_TARGET_ARCH is available. +# + + +# +# First, figure out which architecture we're targeting and the build type. +# (We have to support basic cross building (ARCH=i386|x86_64).) +# While at it, warn about BUILD_* vars found to help with user problems. +# +ifeq ($(filter-out x86_64 amd64 AMD64,$(shell dpkg-architecture -qDEB_HOST_GNU_CPU)),) + BUILD_TARGET_ARCH_DEF := amd64 +else + BUILD_TARGET_ARCH_DEF := x86 +endif +ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),) + $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.) + BUILD_TARGET_ARCH := +endif +ifeq ($(BUILD_TARGET_ARCH),) + ifeq ($(ARCH),x86_64) + BUILD_TARGET_ARCH := amd64 + else + ifeq ($(ARCH),i386) + BUILD_TARGET_ARCH := x86 + else + BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF) + endif + endif +else + ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF)) + $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).) + endif +endif + +ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),) + $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.) + BUILD_TYPE := +endif +ifeq ($(BUILD_TYPE),) + BUILD_TYPE := release +else + ifneq ($(BUILD_TYPE),release) + $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).) + endif +endif +ifeq ($(USERNAME),) + USERNAME := noname +endif + +ifeq ($(KERNELRELEASE),) + + # + # building from this directory + # + + # kernel base directory + ifdef KERN_DIR + ifndef KERN_VER + ifeq ($(filter %/build,$(KERN_DIR)),) + $(error The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set) + endif + endif + endif + + ifndef KERN_VER + ifdef KERN_DIR + KERN_VER = $(notdir $(patsubst %/build,%,$(KERN_DIR))) + ifeq ($(shell expr $(KERN_VER) : '[0-9]*\.[0-9]*.[0-9]*'),0) + $(error The kernel build folder path must end in /build, or the variable KERN_VER must be set) + endif + endif + KERN_VER ?= $(shell uname -r) + endif + + # guess kernel major version (24 or later) + ifeq ($(shell if grep '"2\.4\.' /lib/modules/$(KERN_VER)/build/include/linux/version.h > /dev/null 2>&1; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + +else # neq($(KERNELRELEASE),) + + # + # building from kbuild (make -C M=`pwd`) + # + + # guess kernel version (24 or 26) + ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + + KERN_VER := $(KERNELRELEASE) + +endif # neq($(KERNELRELEASE),) + +# Kernel build folder +KERN_DIR := $(srctree) +ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes) + $(error Error: unable to find the headers of the Linux kernel to build against. \ + Specify KERN_VER= (currently $(KERN_VER)) and run Make again) +endif +# Kernel include folder +KERN_INCL := $(KERN_DIR)/include +# module install folder +INSTALL_MOD_DIR ?= misc +MODULE_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KERN_VER)/$(INSTALL_MOD_DIR) + +# debug - show guesses. +ifdef DEBUG +$(warning dbg: INSTALL_MOD_PATH = $(INSTALL_MOD_PATH)) +$(warning dbg: INSTALL_MOD_DIR = $(INSTALL_MOD_DIR)) +$(warning dbg: KERN_DIR = $(KERN_DIR)) +$(warning dbg: KERN_INCL = $(KERN_INCL)) +$(warning dbg: KERN_VERSION = $(KERN_VERSION)) +$(warning dbg: MODULE_DIR = $(MODULE_DIR)) +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBox/log-vbox.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBox/log-vbox.c @@ -0,0 +1,777 @@ +/* $Id: log-vbox.cpp $ */ +/** @file + * VirtualBox Runtime - Logging configuration. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +/** @page pg_rtlog Runtime - Logging + * + * VBox uses the IPRT logging system which supports group level flags and multiple + * destinations. The GC logging is making it even more interesting since GC logging will + * have to be buffered and written when back in host context. + * + * [more later] + * + * + * @section sec_logging_destination The Destination Specifier. + * + * The {logger-env-base}_DEST environment variable can be used to specify where + * the log output goes. The following specifiers are recognized: + * + * - file=\ + * This sets the logger output filename to \. Not formatting + * or anything is supported. Each logger specifies a default name if + * file logging should be enabled by default. + * + * - nofile + * This disables the file output. + * + * - stdout + * Enables logger output to stdout. + * + * - nostdout + * Disables logger output to stdout. + * + * - stderr + * Enables logger output to stderr. + * + * - nostderr + * Disables logger output to stderr. + * + * - debugger + * Enables logger output to native debugger. (Win32/64 only) + * + * - nodebugger + * Disables logger output to native debugger. (Win32/64 only) + * + * - user + * Enables logger output to special backdoor if in guest r0. + * + * - nodebugger + * Disables logger output to special user stream. + * + * + * + * @section sec_logging_group The Group Specifier. + * + * The {logger-env-base} environment variable can be used to specify which + * logger groups to enable and which to disable. By default all groups are + * disabled. For your convenience this specifier is case in-sensitive (ASCII). + * + * The specifier is evaluated from left to right. + * + * [more later] + * + * The groups settings can be reprogrammed during execution using the + * RTLogGroupSettings() command and a group specifier. + * + * + * + * @section sec_logging_default The Default Logger + * + * The default logger uses VBOX_LOG_DEST as destination specifier. File output is + * enabled by default and goes to a file "./VBox-\.log". + * + * The default logger have all groups turned off by default to force the developer + * to be careful with what log information to collect - logging everything is + * generally NOT a good idea. + * + * The log groups of the default logger can be found in the LOGGROUP in enum. The + * VBOX_LOG environment variable and the .log debugger command can be used to + * configure the groups. + * + * Each group have flags in addition to the enable/disable flag. These flags can + * be appended to the group name using dot separators. The flags correspond to + * RTLOGGRPFLAGS and have a short and a long version: + * + * - e - Enabled: Whether the group is enabled at all. + * - l - Level2: Level-2 logging. + * - f - Flow: Execution flow logging (entry messages) + * - s - Sander: Special Sander logging messages. + * - b - Bird: Special Bird logging messages. + * + * @todo Update this section... + * + * Example: + * + * VBOX_LOG=+all+pgm.e.s.b.z.l-qemu + * + * Space and ';' separators are allowed: + * + * VBOX_LOG=+all +pgm.e.s.b.z.l ; - qemu + * + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#ifdef IN_RING3 +# if defined(RT_OS_WINDOWS) +# include +# elif defined(RT_OS_LINUX) +# include +# elif defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD) +# include +# include +# if defined(RT_OS_FREEBSD) +# include +# endif +# include +# include +# elif defined(RT_OS_HAIKU) +# include +# elif defined(RT_OS_SOLARIS) +# define _STRUCTURED_PROC 1 +# undef _FILE_OFFSET_BITS /* procfs doesn't like this */ +# include +# include +# elif defined(RT_OS_OS2) +# include +# endif +#endif + +#include +#include +#include +#include +#ifdef IN_RING3 +# include +# include +# include +# include +# include +# include +# include +#endif +#if defined(IN_RING0) && defined(RT_OS_DARWIN) +# include +# include +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The default logger. */ +static PRTLOGGER g_pLogger = NULL; +/** The default logger groups. + * This must match LOGGROUP! */ +static const char *g_apszGroups[] = +VBOX_LOGGROUP_NAMES; + + +/** + * Creates the default logger instance for a VBox process. + * + * @returns Pointer to the logger instance. + */ +RTDECL(PRTLOGGER) RTLogDefaultInit(void) +{ + /* + * Initialize the default logger instance. + * Take care to do this once and not recursively. + */ + static volatile uint32_t fInitializing = 0; + PRTLOGGER pLogger; + int rc; + + if (g_pLogger || !ASMAtomicCmpXchgU32(&fInitializing, 1, 0)) + return g_pLogger; + +#ifdef IN_RING3 + /* + * Assert the group definitions. + */ +#define ASSERT_LOG_GROUP(grp) ASSERT_LOG_GROUP2(LOG_GROUP_##grp, #grp) +#define ASSERT_LOG_GROUP2(def, str) \ + do { if (strcmp(g_apszGroups[def], str)) {printf("%s='%s' expects '%s'\n", #def, g_apszGroups[def], str); RTAssertDoPanic(); } } while (0) + ASSERT_LOG_GROUP(DEFAULT); + ASSERT_LOG_GROUP(AUDIO_MIXER); + ASSERT_LOG_GROUP(AUDIO_MIXER_BUFFER); + ASSERT_LOG_GROUP(AUTOLOGON); + ASSERT_LOG_GROUP(CFGM); + ASSERT_LOG_GROUP(CPUM); + ASSERT_LOG_GROUP(CSAM); + ASSERT_LOG_GROUP(DBGC); + ASSERT_LOG_GROUP(DBGF); + ASSERT_LOG_GROUP(DBGF_INFO); + ASSERT_LOG_GROUP(DBGG); + ASSERT_LOG_GROUP(DEV); + ASSERT_LOG_GROUP(DEV_AC97); + ASSERT_LOG_GROUP(DEV_ACPI); + ASSERT_LOG_GROUP(DEV_APIC); + ASSERT_LOG_GROUP(DEV_BUSLOGIC); + ASSERT_LOG_GROUP(DEV_DMA); + ASSERT_LOG_GROUP(DEV_E1000); + ASSERT_LOG_GROUP(DEV_EFI); + ASSERT_LOG_GROUP(DEV_EHCI); + ASSERT_LOG_GROUP(DEV_FDC); + ASSERT_LOG_GROUP(DEV_GIM); + ASSERT_LOG_GROUP(DEV_HDA); + ASSERT_LOG_GROUP(DEV_HDA_CODEC); + ASSERT_LOG_GROUP(DEV_HPET); + ASSERT_LOG_GROUP(DEV_IDE); + ASSERT_LOG_GROUP(DEV_INIP); + ASSERT_LOG_GROUP(DEV_KBD); + ASSERT_LOG_GROUP(DEV_LPC); + ASSERT_LOG_GROUP(DEV_LSILOGICSCSI); + ASSERT_LOG_GROUP(DEV_NVME); + ASSERT_LOG_GROUP(DEV_OHCI); + ASSERT_LOG_GROUP(DEV_PARALLEL); + ASSERT_LOG_GROUP(DEV_PC); + ASSERT_LOG_GROUP(DEV_PC_ARCH); + ASSERT_LOG_GROUP(DEV_PC_BIOS); + ASSERT_LOG_GROUP(DEV_PCI); + ASSERT_LOG_GROUP(DEV_PCI_RAW); + ASSERT_LOG_GROUP(DEV_PCNET); + ASSERT_LOG_GROUP(DEV_PIC); + ASSERT_LOG_GROUP(DEV_PIT); + ASSERT_LOG_GROUP(DEV_RTC); + ASSERT_LOG_GROUP(DEV_SB16); + ASSERT_LOG_GROUP(DEV_SERIAL); + ASSERT_LOG_GROUP(DEV_SMC); + ASSERT_LOG_GROUP(DEV_VGA); + ASSERT_LOG_GROUP(DEV_VIRTIO); + ASSERT_LOG_GROUP(DEV_VIRTIO_NET); + ASSERT_LOG_GROUP(DEV_VMM); + ASSERT_LOG_GROUP(DEV_VMM_BACKDOOR); + ASSERT_LOG_GROUP(DEV_VMM_STDERR); + ASSERT_LOG_GROUP(DEV_VMSVGA); + ASSERT_LOG_GROUP(DEV_XHCI); + ASSERT_LOG_GROUP(DIS); + ASSERT_LOG_GROUP(DRV); + ASSERT_LOG_GROUP(DRV_ACPI); + ASSERT_LOG_GROUP(DRV_AUDIO); + ASSERT_LOG_GROUP(DRV_BLOCK); + ASSERT_LOG_GROUP(DRV_CHAR); + ASSERT_LOG_GROUP(DRV_DISK_INTEGRITY); + ASSERT_LOG_GROUP(DRV_DISPLAY); + ASSERT_LOG_GROUP(DRV_FLOPPY); + ASSERT_LOG_GROUP(DRV_HOST_AUDIO); + ASSERT_LOG_GROUP(DRV_HOST_BASE); + ASSERT_LOG_GROUP(DRV_HOST_DVD); + ASSERT_LOG_GROUP(DRV_HOST_FLOPPY); + ASSERT_LOG_GROUP(DRV_HOST_PARALLEL); + ASSERT_LOG_GROUP(DRV_HOST_SERIAL); + ASSERT_LOG_GROUP(DRV_INTNET); + ASSERT_LOG_GROUP(DRV_ISO); + ASSERT_LOG_GROUP(DRV_KBD_QUEUE); + ASSERT_LOG_GROUP(DRV_LWIP); + ASSERT_LOG_GROUP(DRV_MINIPORT); + ASSERT_LOG_GROUP(DRV_MOUSE_QUEUE); + ASSERT_LOG_GROUP(DRV_NAMEDPIPE); + ASSERT_LOG_GROUP(DRV_NAT); + ASSERT_LOG_GROUP(DRV_RAW_IMAGE); + ASSERT_LOG_GROUP(DRV_SCSI); + ASSERT_LOG_GROUP(DRV_SCSIHOST); + ASSERT_LOG_GROUP(DRV_TCP); + ASSERT_LOG_GROUP(DRV_TRANSPORT_ASYNC); + ASSERT_LOG_GROUP(DRV_TUN); + ASSERT_LOG_GROUP(DRV_UDPTUNNEL); + ASSERT_LOG_GROUP(DRV_USBPROXY); + ASSERT_LOG_GROUP(DRV_VBOXHDD); + ASSERT_LOG_GROUP(DRV_VD); + ASSERT_LOG_GROUP(DRV_VRDE_AUDIO); + ASSERT_LOG_GROUP(DRV_VSWITCH); + ASSERT_LOG_GROUP(DRV_VUSB); + ASSERT_LOG_GROUP(EM); + ASSERT_LOG_GROUP(FTM); + ASSERT_LOG_GROUP(GIM); + ASSERT_LOG_GROUP(GMM); + ASSERT_LOG_GROUP(GUEST_CONTROL); + ASSERT_LOG_GROUP(GUEST_DND); + ASSERT_LOG_GROUP(GUI); + ASSERT_LOG_GROUP(GVMM); + ASSERT_LOG_GROUP(HGCM); + ASSERT_LOG_GROUP(HGSMI); + ASSERT_LOG_GROUP(HM); + ASSERT_LOG_GROUP(IEM); + ASSERT_LOG_GROUP(IOM); + ASSERT_LOG_GROUP(IPC); + ASSERT_LOG_GROUP(LWIP); + ASSERT_LOG_GROUP(LWIP_API_LIB); + ASSERT_LOG_GROUP(LWIP_API_MSG); + ASSERT_LOG_GROUP(LWIP_ETHARP); + ASSERT_LOG_GROUP(LWIP_ICMP); + ASSERT_LOG_GROUP(LWIP_IGMP); + ASSERT_LOG_GROUP(LWIP_INET); + ASSERT_LOG_GROUP(LWIP_IP4); + ASSERT_LOG_GROUP(LWIP_IP4_REASS); + ASSERT_LOG_GROUP(LWIP_IP6); + ASSERT_LOG_GROUP(LWIP_MEM); + ASSERT_LOG_GROUP(LWIP_MEMP); + ASSERT_LOG_GROUP(LWIP_NETIF); + ASSERT_LOG_GROUP(LWIP_PBUF); + ASSERT_LOG_GROUP(LWIP_RAW); + ASSERT_LOG_GROUP(LWIP_SOCKETS); + ASSERT_LOG_GROUP(LWIP_SYS); + ASSERT_LOG_GROUP(LWIP_TCP); + ASSERT_LOG_GROUP(LWIP_TCPIP); + ASSERT_LOG_GROUP(LWIP_TCP_CWND); + ASSERT_LOG_GROUP(LWIP_TCP_FR); + ASSERT_LOG_GROUP(LWIP_TCP_INPUT); + ASSERT_LOG_GROUP(LWIP_TCP_OUTPUT); + ASSERT_LOG_GROUP(LWIP_TCP_QLEN); + ASSERT_LOG_GROUP(LWIP_TCP_RST); + ASSERT_LOG_GROUP(LWIP_TCP_RTO); + ASSERT_LOG_GROUP(LWIP_TCP_WND); + ASSERT_LOG_GROUP(LWIP_TIMERS); + ASSERT_LOG_GROUP(LWIP_UDP); + ASSERT_LOG_GROUP(MAIN); + ASSERT_LOG_GROUP(MAIN_ADDITIONSFACILITY); + ASSERT_LOG_GROUP(MAIN_ADDITIONSSTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_APPLIANCE); + ASSERT_LOG_GROUP(MAIN_AUDIOADAPTER); + ASSERT_LOG_GROUP(MAIN_BANDWIDTHCONTROL); + ASSERT_LOG_GROUP(MAIN_BANDWIDTHGROUP); + ASSERT_LOG_GROUP(MAIN_BANDWIDTHGROUPCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_BIOSSETTINGS); + ASSERT_LOG_GROUP(MAIN_CANSHOWWINDOWEVENT); + ASSERT_LOG_GROUP(MAIN_CLIPBOARDMODECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_CONSOLE); + ASSERT_LOG_GROUP(MAIN_CPUCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_CPUEXECUTIONCAPCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_DHCPSERVER); + ASSERT_LOG_GROUP(MAIN_DIRECTORY); + ASSERT_LOG_GROUP(MAIN_DISPLAY); + ASSERT_LOG_GROUP(MAIN_DISPLAYSOURCEBITMAP); + ASSERT_LOG_GROUP(MAIN_DNDBASE); + ASSERT_LOG_GROUP(MAIN_DNDMODECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_DNDSOURCE); + ASSERT_LOG_GROUP(MAIN_DNDTARGET); + ASSERT_LOG_GROUP(MAIN_EMULATEDUSB); + ASSERT_LOG_GROUP(MAIN_EVENT); + ASSERT_LOG_GROUP(MAIN_EVENTLISTENER); + ASSERT_LOG_GROUP(MAIN_EVENTSOURCE); + ASSERT_LOG_GROUP(MAIN_EVENTSOURCECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_EXTPACK); + ASSERT_LOG_GROUP(MAIN_EXTPACKBASE); + ASSERT_LOG_GROUP(MAIN_EXTPACKFILE); + ASSERT_LOG_GROUP(MAIN_EXTPACKMANAGER); + ASSERT_LOG_GROUP(MAIN_EXTPACKPLUGIN); + ASSERT_LOG_GROUP(MAIN_EXTRADATACANCHANGEEVENT); + ASSERT_LOG_GROUP(MAIN_EXTRADATACHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_FILE); + ASSERT_LOG_GROUP(MAIN_FRAMEBUFFER); + ASSERT_LOG_GROUP(MAIN_FRAMEBUFFEROVERLAY); + ASSERT_LOG_GROUP(MAIN_FSOBJINFO); + ASSERT_LOG_GROUP(MAIN_GUEST); + ASSERT_LOG_GROUP(MAIN_GUESTDIRECTORY); + ASSERT_LOG_GROUP(MAIN_GUESTDNDSOURCE); + ASSERT_LOG_GROUP(MAIN_GUESTDNDTARGET); + ASSERT_LOG_GROUP(MAIN_GUESTERRORINFO); + ASSERT_LOG_GROUP(MAIN_GUESTFILE); + ASSERT_LOG_GROUP(MAIN_GUESTFILEEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILEIOEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILEOFFSETCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILEREADEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILEREGISTEREDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILESTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFILEWRITEEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTFSOBJINFO); + ASSERT_LOG_GROUP(MAIN_GUESTKEYBOARDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTMONITORCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTMOUSEEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTMULTITOUCHEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTOSTYPE); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESS); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSINPUTNOTIFYEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSIOEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSOUTPUTEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSREGISTEREDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROCESSSTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTPROPERTYCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTSESSION); + ASSERT_LOG_GROUP(MAIN_GUESTSESSIONEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTSESSIONREGISTEREDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTSESSIONSTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_GUESTUSERSTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_HOST); + ASSERT_LOG_GROUP(MAIN_HOSTNAMERESOLUTIONCONFIGURATIONCHANGEEVENT); + ASSERT_LOG_GROUP(MAIN_HOSTNETWORKINTERFACE); + ASSERT_LOG_GROUP(MAIN_HOSTPCIDEVICEPLUGEVENT); + ASSERT_LOG_GROUP(MAIN_HOSTUSBDEVICE); + ASSERT_LOG_GROUP(MAIN_HOSTUSBDEVICEFILTER); + ASSERT_LOG_GROUP(MAIN_HOSTVIDEOINPUTDEVICE); + ASSERT_LOG_GROUP(MAIN_INTERNALMACHINECONTROL); + ASSERT_LOG_GROUP(MAIN_INTERNALSESSIONCONTROL); + ASSERT_LOG_GROUP(MAIN_KEYBOARD); + ASSERT_LOG_GROUP(MAIN_KEYBOARDLEDSCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MACHINE); + ASSERT_LOG_GROUP(MAIN_MACHINEDATACHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MACHINEDEBUGGER); + ASSERT_LOG_GROUP(MAIN_MACHINEEVENT); + ASSERT_LOG_GROUP(MAIN_MACHINEREGISTEREDEVENT); + ASSERT_LOG_GROUP(MAIN_MACHINESTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MEDIUM); + ASSERT_LOG_GROUP(MAIN_MEDIUMATTACHMENT); + ASSERT_LOG_GROUP(MAIN_MEDIUMCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MEDIUMCONFIGCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MEDIUMFORMAT); + ASSERT_LOG_GROUP(MAIN_MEDIUMREGISTEREDEVENT); + ASSERT_LOG_GROUP(MAIN_MOUSE); + ASSERT_LOG_GROUP(MAIN_MOUSECAPABILITYCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_MOUSEPOINTERSHAPE); + ASSERT_LOG_GROUP(MAIN_MOUSEPOINTERSHAPECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_NATENGINE); + ASSERT_LOG_GROUP(MAIN_NATNETWORK); + ASSERT_LOG_GROUP(MAIN_NATNETWORKALTEREVENT); + ASSERT_LOG_GROUP(MAIN_NATNETWORKCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_NATNETWORKCREATIONDELETIONEVENT); + ASSERT_LOG_GROUP(MAIN_NATNETWORKPORTFORWARDEVENT); + ASSERT_LOG_GROUP(MAIN_NATNETWORKSETTINGEVENT); + ASSERT_LOG_GROUP(MAIN_NATNETWORKSTARTSTOPEVENT); + ASSERT_LOG_GROUP(MAIN_NATREDIRECTEVENT); + ASSERT_LOG_GROUP(MAIN_NETWORKADAPTER); + ASSERT_LOG_GROUP(MAIN_NETWORKADAPTERCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_PARALLELPORT); + ASSERT_LOG_GROUP(MAIN_PARALLELPORTCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_PCIADDRESS); + ASSERT_LOG_GROUP(MAIN_PCIDEVICEATTACHMENT); + ASSERT_LOG_GROUP(MAIN_PERFORMANCECOLLECTOR); + ASSERT_LOG_GROUP(MAIN_PERFORMANCEMETRIC); + ASSERT_LOG_GROUP(MAIN_PROCESS); + ASSERT_LOG_GROUP(MAIN_PROGRESS); + ASSERT_LOG_GROUP(MAIN_REUSABLEEVENT); + ASSERT_LOG_GROUP(MAIN_RUNTIMEERROREVENT); + ASSERT_LOG_GROUP(MAIN_SERIALPORT); + ASSERT_LOG_GROUP(MAIN_SERIALPORTCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_SESSION); + ASSERT_LOG_GROUP(MAIN_SESSIONSTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_SHAREDFOLDER); + ASSERT_LOG_GROUP(MAIN_SHAREDFOLDERCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_SHOWWINDOWEVENT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOTCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOTDELETEDEVENT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOTEVENT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOTRESTOREDEVENT); + ASSERT_LOG_GROUP(MAIN_SNAPSHOTTAKENEVENT); + ASSERT_LOG_GROUP(MAIN_STATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_STORAGECONTROLLER); + ASSERT_LOG_GROUP(MAIN_STORAGECONTROLLERCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_STORAGEDEVICECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_SYSTEMPROPERTIES); + ASSERT_LOG_GROUP(MAIN_TOKEN); + ASSERT_LOG_GROUP(MAIN_USBCONTROLLER); + ASSERT_LOG_GROUP(MAIN_USBCONTROLLERCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_USBDEVICE); + ASSERT_LOG_GROUP(MAIN_USBDEVICEFILTERS); + ASSERT_LOG_GROUP(MAIN_USBDEVICESTATECHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_VIRTUALBOX); + ASSERT_LOG_GROUP(MAIN_VIRTUALBOXCLIENT); + ASSERT_LOG_GROUP(MAIN_VIRTUALBOXSDS); + ASSERT_LOG_GROUP(MAIN_VIRTUALSYSTEMDESCRIPTION); + ASSERT_LOG_GROUP(MAIN_VRDESERVER); + ASSERT_LOG_GROUP(MAIN_VRDESERVERCHANGEDEVENT); + ASSERT_LOG_GROUP(MAIN_VRDESERVERINFO); + ASSERT_LOG_GROUP(MAIN_VRDESERVERINFOCHANGEDEVENT); + ASSERT_LOG_GROUP(MISC); + ASSERT_LOG_GROUP(MM); + ASSERT_LOG_GROUP(MM_HEAP); + ASSERT_LOG_GROUP(MM_HYPER); + ASSERT_LOG_GROUP(MM_HYPER_HEAP); + ASSERT_LOG_GROUP(MM_PHYS); + ASSERT_LOG_GROUP(MM_POOL); + ASSERT_LOG_GROUP(NAT_SERVICE); + ASSERT_LOG_GROUP(NET_ADP_DRV); + ASSERT_LOG_GROUP(NET_FLT_DRV); + ASSERT_LOG_GROUP(NET_SERVICE); + ASSERT_LOG_GROUP(NET_SHAPER); + ASSERT_LOG_GROUP(PATM); + ASSERT_LOG_GROUP(PDM); + ASSERT_LOG_GROUP(PDM_ASYNC_COMPLETION); + ASSERT_LOG_GROUP(PDM_BLK_CACHE); + ASSERT_LOG_GROUP(PDM_DEVICE); + ASSERT_LOG_GROUP(PDM_DRIVER); + ASSERT_LOG_GROUP(PDM_LDR); + ASSERT_LOG_GROUP(PDM_QUEUE); + ASSERT_LOG_GROUP(PGM); + ASSERT_LOG_GROUP(PGM_DYNMAP); + ASSERT_LOG_GROUP(PGM_PHYS); + ASSERT_LOG_GROUP(PGM_PHYS_ACCESS); + ASSERT_LOG_GROUP(PGM_POOL); + ASSERT_LOG_GROUP(PGM_SHARED); + ASSERT_LOG_GROUP(REM); + ASSERT_LOG_GROUP(REM_DISAS); + ASSERT_LOG_GROUP(REM_HANDLER); + ASSERT_LOG_GROUP(REM_IOPORT); + ASSERT_LOG_GROUP(REM_MMIO); + ASSERT_LOG_GROUP(REM_PRINTF); + ASSERT_LOG_GROUP(REM_RUN); + ASSERT_LOG_GROUP(SELM); + ASSERT_LOG_GROUP(SHARED_CLIPBOARD); + ASSERT_LOG_GROUP(SHARED_CROPENGL); + ASSERT_LOG_GROUP(SHARED_FOLDERS); + ASSERT_LOG_GROUP(SHARED_OPENGL); + ASSERT_LOG_GROUP(SRV_INTNET); + ASSERT_LOG_GROUP(SSM); + ASSERT_LOG_GROUP(STAM); + ASSERT_LOG_GROUP(SUP); + ASSERT_LOG_GROUP(TM); + ASSERT_LOG_GROUP(TRPM); + ASSERT_LOG_GROUP(USB_CARDREADER); + ASSERT_LOG_GROUP(USB_DRV); + ASSERT_LOG_GROUP(USB_FILTER); + ASSERT_LOG_GROUP(USB_KBD); + ASSERT_LOG_GROUP(USB_MOUSE); + ASSERT_LOG_GROUP(USB_MSD); + ASSERT_LOG_GROUP(USB_REMOTE); + ASSERT_LOG_GROUP(USB_WEBCAM); + ASSERT_LOG_GROUP(VGDRV); + ASSERT_LOG_GROUP(VBGL); + ASSERT_LOG_GROUP(VD); + ASSERT_LOG_GROUP(VD_DMG); + ASSERT_LOG_GROUP(VD_ISCSI); + ASSERT_LOG_GROUP(VD_PARALLELS); + ASSERT_LOG_GROUP(VD_QCOW); + ASSERT_LOG_GROUP(VD_QED); + ASSERT_LOG_GROUP(VD_RAW); + ASSERT_LOG_GROUP(VD_VDI); + ASSERT_LOG_GROUP(VD_VHD); + ASSERT_LOG_GROUP(VD_VHDX); + ASSERT_LOG_GROUP(VD_VMDK); + ASSERT_LOG_GROUP(VM); + ASSERT_LOG_GROUP(VMM); + ASSERT_LOG_GROUP(VRDE); + ASSERT_LOG_GROUP(VRDP); + ASSERT_LOG_GROUP(VSCSI); + ASSERT_LOG_GROUP(WEBSERVICE); +#undef ASSERT_LOG_GROUP +#undef ASSERT_LOG_GROUP2 +#endif /* IN_RING3 */ + + /* + * Create the default logging instance. + */ +#ifdef IN_RING3 +# ifndef IN_GUEST + char szExecName[RTPATH_MAX]; + if (!RTProcGetExecutablePath(szExecName, sizeof(szExecName))) + strcpy(szExecName, "VBox"); + RTTIMESPEC TimeSpec; + RTTIME Time; + RTTimeExplode(&Time, RTTimeNow(&TimeSpec)); + rc = RTLogCreate(&pLogger, 0, NULL, "VBOX_LOG", RT_ELEMENTS(g_apszGroups), &g_apszGroups[0], RTLOGDEST_FILE, + "./%04d-%02d-%02d-%02d-%02d-%02d.%03d-%s-%d.log", + Time.i32Year, Time.u8Month, Time.u8MonthDay, Time.u8Hour, Time.u8Minute, Time.u8Second, Time.u32Nanosecond / 10000000, + RTPathFilename(szExecName), RTProcSelf()); + if (RT_SUCCESS(rc)) + { + /* + * Write a log header. + */ + char szBuf[RTPATH_MAX]; + RTTimeSpecToString(&TimeSpec, szBuf, sizeof(szBuf)); + RTLogLoggerEx(pLogger, 0, ~0U, "Log created: %s\n", szBuf); + RTLogLoggerEx(pLogger, 0, ~0U, "Executable: %s\n", szExecName); + + /* executable and arguments - tricky and all platform specific. */ +# if defined(RT_OS_WINDOWS) + RTLogLoggerEx(pLogger, 0, ~0U, "Commandline: %ls\n", GetCommandLineW()); + +# elif defined(RT_OS_SOLARIS) + psinfo_t psi; + char szArgFileBuf[80]; + RTStrPrintf(szArgFileBuf, sizeof(szArgFileBuf), "/proc/%ld/psinfo", (long)getpid()); + FILE* pFile = fopen(szArgFileBuf, "rb"); + if (pFile) + { + if (fread(&psi, sizeof(psi), 1, pFile) == 1) + { +# if 0 /* 100% safe:*/ + RTLogLoggerEx(pLogger, 0, ~0U, "Args: %s\n", psi.pr_psargs); +# else /* probably safe: */ + const char * const *argv = (const char * const *)psi.pr_argv; + for (int iArg = 0; iArg < psi.pr_argc; iArg++) + RTLogLoggerEx(pLogger, 0, ~0U, "Arg[%d]: %s\n", iArg, argv[iArg]); +# endif + + } + fclose(pFile); + } + +# elif defined(RT_OS_LINUX) + FILE *pFile = fopen("/proc/self/cmdline", "r"); + if (pFile) + { + /* braindead */ + unsigned iArg = 0; + int ch; + bool fNew = true; + while (!feof(pFile) && (ch = fgetc(pFile)) != EOF) + { + if (fNew) + { + RTLogLoggerEx(pLogger, 0, ~0U, "Arg[%u]: ", iArg++); + fNew = false; + } + if (ch) + RTLogLoggerEx(pLogger, 0, ~0U, "%c", ch); + else + { + RTLogLoggerEx(pLogger, 0, ~0U, "\n"); + fNew = true; + } + } + if (!fNew) + RTLogLoggerEx(pLogger, 0, ~0U, "\n"); + fclose(pFile); + } + +# elif defined(RT_OS_HAIKU) + team_info info; + if (get_team_info(0, &info) == B_OK) + { + /* there is an info.argc, but no way to know arg boundaries */ + RTLogLoggerEx(pLogger, 0, ~0U, "Commandline: %.64s\n", info.args); + } + +# elif defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD) + /* Retrieve the required length first */ + int aiName[4]; +# if defined(RT_OS_FREEBSD) + aiName[0] = CTL_KERN; + aiName[1] = KERN_PROC; + aiName[2] = KERN_PROC_ARGS; /* Introduced in FreeBSD 4.0 */ + aiName[3] = getpid(); +# elif defined(RT_OS_NETBSD) + aiName[0] = CTL_KERN; + aiName[1] = KERN_PROC_ARGS; + aiName[2] = getpid(); + aiName[3] = KERN_PROC_ARGV; +# endif + size_t cchArgs = 0; + int rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), NULL, &cchArgs, NULL, 0); + if (cchArgs > 0) + { + char *pszArgFileBuf = (char *)RTMemAllocZ(cchArgs + 1 /* Safety */); + if (pszArgFileBuf) + { + /* Retrieve the argument list */ + rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), pszArgFileBuf, &cchArgs, NULL, 0); + if (!rcBSD) + { + unsigned iArg = 0; + size_t off = 0; + while (off < cchArgs) + { + size_t cchArg = strlen(&pszArgFileBuf[off]); + RTLogLoggerEx(pLogger, 0, ~0U, "Arg[%u]: %s\n", iArg, &pszArgFileBuf[off]); + + /* advance */ + off += cchArg + 1; + iArg++; + } + } + RTMemFree(pszArgFileBuf); + } + } + +# elif defined(RT_OS_OS2) || defined(RT_OS_DARWIN) + /* commandline? */ +# else +# error needs porting. +# endif + } + +# else /* IN_GUEST */ + /* The user destination is backdoor logging. */ + rc = RTLogCreate(&pLogger, 0, NULL, "VBOX_LOG", RT_ELEMENTS(g_apszGroups), &g_apszGroups[0], RTLOGDEST_USER, "VBox.log"); +# endif /* IN_GUEST */ + +#else /* IN_RING0 */ + + /* Some platforms has trouble allocating memory with interrupts and/or + preemption disabled. Check and fail before we panic. */ +# if defined(RT_OS_DARWIN) + if ( !ASMIntAreEnabled() + || !RTThreadPreemptIsEnabled(NIL_RTTHREAD)) + return NULL; +# endif + +# ifndef IN_GUEST + rc = RTLogCreate(&pLogger, 0, NULL, "VBOX_LOG", RT_ELEMENTS(g_apszGroups), &g_apszGroups[0], RTLOGDEST_FILE, "VBox-ring0.log"); +# else /* IN_GUEST */ + rc = RTLogCreate(&pLogger, 0, NULL, "VBOX_LOG", RT_ELEMENTS(g_apszGroups), &g_apszGroups[0], RTLOGDEST_USER, "VBox-ring0.log"); +# endif /* IN_GUEST */ + if (RT_SUCCESS(rc)) + { + /* + * This is where you set your ring-0 logging preferences. + * + * On platforms which don't differ between debugger and kernel + * log printing, STDOUT is gonna be a stub and the DEBUGGER + * destination is the one doing all the work. On platforms + * that do differ (like Darwin), STDOUT is the kernel log. + */ +# if defined(DEBUG_bird) + /*RTLogGroupSettings(pLogger, "all=~0 -default.l6.l5.l4.l3");*/ + RTLogFlags(pLogger, "enabled unbuffered pid tid"); +# ifndef IN_GUEST + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT; +# else + RTLogGroupSettings(pLogger, "all=~0 -default.l6.l5.l4.l3"); +# endif +# endif +# if defined(DEBUG_sandervl) && !defined(IN_GUEST) + RTLogGroupSettings(pLogger, "+all"); + RTLogFlags(pLogger, "enabled unbuffered"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER; +# endif +# if defined(DEBUG_ramshankar) /* Guest ring-0 as well */ + RTLogGroupSettings(pLogger, "+all.e.l.f"); + RTLogFlags(pLogger, "enabled unbuffered"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER; +# endif +# if defined(DEBUG_aleksey) /* Guest ring-0 as well */ + RTLogGroupSettings(pLogger, "net_flt_drv.e.l.f.l3.l4.l5 +net_adp_drv.e.l.f.l3.l4.l5.l6"); + RTLogFlags(pLogger, "enabled unbuffered"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT; +# endif +# if defined(DEBUG_andy) /* Guest ring-0 as well */ + RTLogGroupSettings(pLogger, "+all.e.l.f"); + RTLogFlags(pLogger, "enabled unbuffered pid tid"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT; +# endif +# if defined(DEBUG_misha) /* Guest ring-0 as well */ + RTLogFlags(pLogger, "enabled unbuffered"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER; +# endif +# if defined(DEBUG_michael) && defined(IN_GUEST) + RTLogGroupSettings(pLogger, "+vga.e.l.f"); + RTLogFlags(pLogger, "enabled unbuffered"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT; +# endif +# if 0 /* vboxdrv logging - ATTENTION: this is what we're referring to guys! Change to '# if 1'. */ + RTLogGroupSettings(pLogger, "all=~0 -default.l6.l5.l4.l3"); + RTLogFlags(pLogger, "enabled unbuffered tid"); + pLogger->fDestFlags |= RTLOGDEST_DEBUGGER | RTLOGDEST_STDOUT; +# endif + } +#endif /* IN_RING0 */ + return g_pLogger = RT_SUCCESS(rc) ? pLogger : NULL; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBox/logbackdoor.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBox/logbackdoor.c @@ -0,0 +1,95 @@ +/* $Id: logbackdoor.cpp $ */ +/** @file + * VirtualBox Runtime - Guest Backdoor Logging. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" +#include +#include +#ifdef IN_GUEST_R3 +# include +#endif + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static DECLCALLBACK(size_t) rtLogBackdoorOutput(void *pv, const char *pachChars, size_t cbChars); + + +RTDECL(size_t) RTLogBackdoorPrintf(const char *pszFormat, ...) +{ + va_list args; + size_t cb; + + va_start(args, pszFormat); + cb = RTLogBackdoorPrintfV(pszFormat, args); + va_end(args); + + return cb; +} + +RT_EXPORT_SYMBOL(RTLogBackdoorPrintf); + + +RTDECL(size_t) RTLogBackdoorPrintfV(const char *pszFormat, va_list args) +{ + return RTLogFormatV(rtLogBackdoorOutput, NULL, pszFormat, args); +} + +RT_EXPORT_SYMBOL(RTLogBackdoorPrintfV); + + +/** + * Callback for RTLogFormatV which writes to the backdoor. + * See PFNRTSTROUTPUT() for details. + */ +static DECLCALLBACK(size_t) rtLogBackdoorOutput(void *pvArg, const char *pachChars, size_t cbChars) +{ + RT_NOREF_PV(pvArg); + RTLogWriteUser(pachChars, cbChars); + return cbChars; +} + + +RTDECL(void) RTLogWriteUser(const char *pch, size_t cb) +{ +#ifdef IN_GUEST_R3 + VbglR3WriteLog(pch, cb); +#else /* !IN_GUEST_R3 */ + const uint8_t *pau8 = (const uint8_t *)pch; + if (cb > 1) + ASMOutStrU8(RTLOG_DEBUG_PORT, pau8, cb); + else if (cb) + ASMOutU8(RTLOG_DEBUG_PORT, *pau8); +#endif /* !IN_GUEST_R3 */ +} + +RT_EXPORT_SYMBOL(RTLogWriteUser); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuest-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuest-linux.c @@ -0,0 +1,1219 @@ +/* $Rev: 118839 $ */ +/** @file + * VBoxGuest - Linux specifics. + * + * Note. Unfortunately, the difference between this and SUPDrv-linux.c is + * a little bit too big to be helpful. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP LOG_GROUP_SUP_DRV + +#include "the-linux-kernel.h" + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 15) +# define VBOXGUEST_WITH_INPUT_DRIVER +#endif + +#include "VBoxGuestInternal.h" +#ifdef VBOXGUEST_WITH_INPUT_DRIVER +# include +#endif +#include +#include +#include +#include "revision-generated.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/** The device name. */ +#define DEVICE_NAME "vboxguest" +/** The device name for the device node open to everyone. */ +#define DEVICE_NAME_USER "vboxuser" +/** The name of the PCI driver */ +#define DRIVER_NAME DEVICE_NAME + + +/* 2.4.x compatibility macros that may or may not be defined. */ +#ifndef IRQ_RETVAL +# define irqreturn_t void +# define IRQ_RETVAL(n) +#endif + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static void vgdrvLinuxTermPci(struct pci_dev *pPciDev); +static int vgdrvLinuxProbePci(struct pci_dev *pPciDev, const struct pci_device_id *id); +static int vgdrvLinuxModInit(void); +static void vgdrvLinuxModExit(void); +static int vgdrvLinuxOpen(struct inode *pInode, struct file *pFilp); +static int vgdrvLinuxRelease(struct inode *pInode, struct file *pFilp); +#ifdef HAVE_UNLOCKED_IOCTL +static long vgdrvLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg); +#else +static int vgdrvLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg); +#endif +static int vgdrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigned long ulArg, PVBOXGUESTSESSION pSession); +static int vgdrvLinuxFAsync(int fd, struct file *pFile, int fOn); +static unsigned int vgdrvLinuxPoll(struct file *pFile, poll_table *pPt); +static ssize_t vgdrvLinuxRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff); + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** + * Device extention & session data association structure. + */ +static VBOXGUESTDEVEXT g_DevExt; +/** The PCI device. */ +static struct pci_dev *g_pPciDev = NULL; +/** The base of the I/O port range. */ +static RTIOPORT g_IOPortBase; +/** The base of the MMIO range. */ +static RTHCPHYS g_MMIOPhysAddr = NIL_RTHCPHYS; +/** The size of the MMIO range as seen by PCI. */ +static uint32_t g_cbMMIO; +/** The pointer to the mapping of the MMIO range. */ +static void *g_pvMMIOBase; +/** Wait queue used by polling. */ +static wait_queue_head_t g_PollEventQueue; +/** Asynchronous notification stuff. */ +static struct fasync_struct *g_pFAsyncQueue; +#ifdef VBOXGUEST_WITH_INPUT_DRIVER +/** Pre-allocated mouse status VMMDev request for use in the IRQ + * handler. */ +static VMMDevReqMouseStatus *g_pMouseStatusReq; +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +/** Whether we've create the logger or not. */ +static volatile bool g_fLoggerCreated; +/** Release logger group settings. */ +static char g_szLogGrp[128]; +/** Release logger flags settings. */ +static char g_szLogFlags[128]; +/** Release logger destination settings. */ +static char g_szLogDst[128]; +# if 0 +/** Debug logger group settings. */ +static char g_szDbgLogGrp[128]; +/** Debug logger flags settings. */ +static char g_szDbgLogFlags[128]; +/** Debug logger destination settings. */ +static char g_szDbgLogDst[128]; +# endif +#endif + +/** The input device handle */ +#ifdef VBOXGUEST_WITH_INPUT_DRIVER +static struct input_dev *g_pInputDevice = NULL; +#endif + +/** The file_operations structure. */ +static struct file_operations g_FileOps = +{ + owner: THIS_MODULE, + open: vgdrvLinuxOpen, + release: vgdrvLinuxRelease, +#ifdef HAVE_UNLOCKED_IOCTL + unlocked_ioctl: vgdrvLinuxIOCtl, +#else + ioctl: vgdrvLinuxIOCtl, +#endif + fasync: vgdrvLinuxFAsync, + read: vgdrvLinuxRead, + poll: vgdrvLinuxPoll, + llseek: no_llseek, +}; + +/** The miscdevice structure. */ +static struct miscdevice g_MiscDevice = +{ + minor: MISC_DYNAMIC_MINOR, + name: DEVICE_NAME, + fops: &g_FileOps, +}; + +/** The file_operations structure for the user device. + * @remarks For the time being we'll be using the same implementation as + * /dev/vboxguest here. */ +static struct file_operations g_FileOpsUser = +{ + owner: THIS_MODULE, + open: vgdrvLinuxOpen, + release: vgdrvLinuxRelease, +#ifdef HAVE_UNLOCKED_IOCTL + unlocked_ioctl: vgdrvLinuxIOCtl, +#else + ioctl: vgdrvLinuxIOCtl, +#endif +}; + +/** The miscdevice structure for the user device. */ +static struct miscdevice g_MiscDeviceUser = +{ + minor: MISC_DYNAMIC_MINOR, + name: DEVICE_NAME_USER, + fops: &g_FileOpsUser, +}; + + +/** PCI hotplug structure. */ +static const struct pci_device_id +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) +__devinitdata +#endif +g_VBoxGuestPciId[] = +{ + { + vendor: VMMDEV_VENDORID, + device: VMMDEV_DEVICEID + }, + { + /* empty entry */ + } +}; + +MODULE_DEVICE_TABLE(pci, g_VBoxGuestPciId); + +/** Structure for registering the PCI driver. */ +static struct pci_driver g_PciDriver = +{ + name: DRIVER_NAME, + id_table: g_VBoxGuestPciId, + probe: vgdrvLinuxProbePci, + remove: vgdrvLinuxTermPci +}; + +static PVBOXGUESTSESSION g_pKernelSession = NULL; + + + +/** + * Converts a VBox status code to a linux error code. + * + * @returns corresponding negative linux error code. + * @param rc supdrv error code (SUPDRV_ERR_* defines). + */ +static int vgdrvLinuxConvertToNegErrno(int rc) +{ + if ( rc > -1000 + && rc < 1000) + return -RTErrConvertToErrno(rc); + switch (rc) + { + case VERR_HGCM_SERVICE_NOT_FOUND: return -ESRCH; + case VINF_HGCM_CLIENT_REJECTED: return 0; + case VERR_HGCM_INVALID_CMD_ADDRESS: return -EFAULT; + case VINF_HGCM_ASYNC_EXECUTE: return 0; + case VERR_HGCM_INTERNAL: return -EPROTO; + case VERR_HGCM_INVALID_CLIENT_ID: return -EINVAL; + case VINF_HGCM_SAVE_STATE: return 0; + /* No reason to return this to a guest */ + // case VERR_HGCM_SERVICE_EXISTS: return -EEXIST; + default: + AssertMsgFailed(("Unhandled error code %Rrc\n", rc)); + return -EPROTO; + } +} + + +/** + * Does the PCI detection and init of the device. + * + * @returns 0 on success, negated errno on failure. + */ +static int vgdrvLinuxProbePci(struct pci_dev *pPciDev, const struct pci_device_id *id) +{ + int rc; + + NOREF(id); + AssertReturn(!g_pPciDev, -EINVAL); + rc = pci_enable_device(pPciDev); + if (rc >= 0) + { + /* I/O Ports are mandatory, the MMIO bit is not. */ + g_IOPortBase = pci_resource_start(pPciDev, 0); + if (g_IOPortBase != 0) + { + /* + * Map the register address space. + */ + g_MMIOPhysAddr = pci_resource_start(pPciDev, 1); + g_cbMMIO = pci_resource_len(pPciDev, 1); + if (request_mem_region(g_MMIOPhysAddr, g_cbMMIO, DEVICE_NAME) != NULL) + { + g_pvMMIOBase = ioremap(g_MMIOPhysAddr, g_cbMMIO); + if (g_pvMMIOBase) + { + /** @todo why aren't we requesting ownership of the I/O ports as well? */ + g_pPciDev = pPciDev; + return 0; + } + + /* failure cleanup path */ + LogRel((DEVICE_NAME ": ioremap failed; MMIO Addr=%RHp cb=%#x\n", g_MMIOPhysAddr, g_cbMMIO)); + rc = -ENOMEM; + release_mem_region(g_MMIOPhysAddr, g_cbMMIO); + } + else + { + LogRel((DEVICE_NAME ": failed to obtain adapter memory\n")); + rc = -EBUSY; + } + g_MMIOPhysAddr = NIL_RTHCPHYS; + g_cbMMIO = 0; + g_IOPortBase = 0; + } + else + { + LogRel((DEVICE_NAME ": did not find expected hardware resources\n")); + rc = -ENXIO; + } + pci_disable_device(pPciDev); + } + else + LogRel((DEVICE_NAME ": could not enable device: %d\n", rc)); + return rc; +} + + +/** + * Clean up the usage of the PCI device. + */ +static void vgdrvLinuxTermPci(struct pci_dev *pPciDev) +{ + g_pPciDev = NULL; + if (pPciDev) + { + iounmap(g_pvMMIOBase); + g_pvMMIOBase = NULL; + + release_mem_region(g_MMIOPhysAddr, g_cbMMIO); + g_MMIOPhysAddr = NIL_RTHCPHYS; + g_cbMMIO = 0; + + pci_disable_device(pPciDev); + } +} + + +/** + * Interrupt service routine. + * + * @returns In 2.4 it returns void. + * In 2.6 we indicate whether we've handled the IRQ or not. + * + * @param iIrq The IRQ number. + * @param pvDevId The device ID, a pointer to g_DevExt. + * @param pRegs Register set. Removed in 2.6.19. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) && !defined(DOXYGEN_RUNNING) +static irqreturn_t vgdrvLinuxISR(int iIrq, void *pvDevId) +#else +static irqreturn_t vgdrvLinuxISR(int iIrq, void *pvDevId, struct pt_regs *pRegs) +#endif +{ + bool fTaken = VGDrvCommonISR(&g_DevExt); + return IRQ_RETVAL(fTaken); +} + + +/** + * Registers the ISR and initializes the poll wait queue. + */ +static int __init vgdrvLinuxInitISR(void) +{ + int rc; + + init_waitqueue_head(&g_PollEventQueue); + rc = request_irq(g_pPciDev->irq, + vgdrvLinuxISR, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) + IRQF_SHARED, +#else + SA_SHIRQ, +#endif + DEVICE_NAME, + &g_DevExt); + if (rc) + { + LogRel((DEVICE_NAME ": could not request IRQ %d: err=%d\n", g_pPciDev->irq, rc)); + return rc; + } + return 0; +} + + +/** + * Deregisters the ISR. + */ +static void vgdrvLinuxTermISR(void) +{ + free_irq(g_pPciDev->irq, &g_DevExt); +} + + +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + +/** + * Reports the mouse integration status to the host. + * + * Calls the kernel IOCtl to report mouse status to the host on behalf of + * our kernel session. + * + * @param fStatus The mouse status to report. + */ +static int vgdrvLinuxSetMouseStatus(uint32_t fStatus) +{ + int rc; + VBGLIOCSETMOUSESTATUS Req; + VBGLREQHDR_INIT(&Req.Hdr, SET_MOUSE_STATUS); + Req.u.In.fStatus = fStatus; + rc = VGDrvCommonIoCtl(VBGL_IOCTL_SET_MOUSE_STATUS, &g_DevExt, g_pKernelSession, &Req.Hdr, sizeof(Req)); + if (RT_SUCCESS(rc)) + rc = Req.Hdr.rc; + return rc; +} + + +/** + * Called when the input device is first opened. + * + * Sets up absolute mouse reporting. + */ +static int vboxguestOpenInputDevice(struct input_dev *pDev) +{ + int rc = vgdrvLinuxSetMouseStatus(VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE | VMMDEV_MOUSE_NEW_PROTOCOL); + if (RT_FAILURE(rc)) + return ENODEV; + NOREF(pDev); + return 0; +} + + +/** + * Called if all open handles to the input device are closed. + * + * Disables absolute reporting. + */ +static void vboxguestCloseInputDevice(struct input_dev *pDev) +{ + NOREF(pDev); + vgdrvLinuxSetMouseStatus(0); +} + + +/** + * Creates the kernel input device. + */ +static int __init vgdrvLinuxCreateInputDevice(void) +{ + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&g_pMouseStatusReq, sizeof(*g_pMouseStatusReq), VMMDevReq_GetMouseStatus); + if (RT_SUCCESS(rc)) + { + g_pInputDevice = input_allocate_device(); + if (g_pInputDevice) + { + g_pInputDevice->id.bustype = BUS_PCI; + g_pInputDevice->id.vendor = VMMDEV_VENDORID; + g_pInputDevice->id.product = VMMDEV_DEVICEID; + g_pInputDevice->id.version = VBOX_SHORT_VERSION; + g_pInputDevice->open = vboxguestOpenInputDevice; + g_pInputDevice->close = vboxguestCloseInputDevice; +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) + g_pInputDevice->cdev.dev = &g_pPciDev->dev; +# else + g_pInputDevice->dev.parent = &g_pPciDev->dev; +# endif + rc = input_register_device(g_pInputDevice); + if (rc == 0) + { + /* Do what one of our competitors apparently does as that works. */ + ASMBitSet(g_pInputDevice->evbit, EV_ABS); + ASMBitSet(g_pInputDevice->evbit, EV_KEY); +# ifdef EV_SYN + ASMBitSet(g_pInputDevice->evbit, EV_SYN); +# endif + input_set_abs_params(g_pInputDevice, ABS_X, VMMDEV_MOUSE_RANGE_MIN, VMMDEV_MOUSE_RANGE_MAX, 0, 0); + input_set_abs_params(g_pInputDevice, ABS_Y, VMMDEV_MOUSE_RANGE_MIN, VMMDEV_MOUSE_RANGE_MAX, 0, 0); + ASMBitSet(g_pInputDevice->keybit, BTN_MOUSE); + /** @todo this string should be in a header file somewhere. */ + g_pInputDevice->name = "VirtualBox mouse integration"; + return 0; + } + + input_free_device(g_pInputDevice); + } + else + rc = -ENOMEM; + VbglR0GRFree(&g_pMouseStatusReq->header); + g_pMouseStatusReq = NULL; + } + else + rc = -ENOMEM; + return rc; +} + + +/** + * Terminates the kernel input device. + */ +static void vgdrvLinuxTermInputDevice(void) +{ + VbglR0GRFree(&g_pMouseStatusReq->header); + g_pMouseStatusReq = NULL; + + /* See documentation of input_register_device(): input_free_device() + * should not be called after a device has been registered. */ + input_unregister_device(g_pInputDevice); +} + +#endif /* VBOXGUEST_WITH_INPUT_DRIVER */ + + +/** + * Creates the device nodes. + * + * @returns 0 on success, negated errno on failure. + */ +static int __init vgdrvLinuxInitDeviceNodes(void) +{ + /* + * The full feature device node. + */ + int rc = misc_register(&g_MiscDevice); + if (!rc) + { + /* + * The device node intended to be accessible by all users. + */ + rc = misc_register(&g_MiscDeviceUser); + if (!rc) + return 0; + LogRel((DEVICE_NAME ": misc_register failed for %s (rc=%d)\n", DEVICE_NAME_USER, rc)); + misc_deregister(&g_MiscDevice); + } + else + LogRel((DEVICE_NAME ": misc_register failed for %s (rc=%d)\n", DEVICE_NAME, rc)); + return rc; +} + + +/** + * Deregisters the device nodes. + */ +static void vgdrvLinuxTermDeviceNodes(void) +{ + misc_deregister(&g_MiscDevice); + misc_deregister(&g_MiscDeviceUser); +} + + +/** + * Initialize module. + * + * @returns appropriate status code. + */ +static int __init vgdrvLinuxModInit(void) +{ + static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES; + PRTLOGGER pRelLogger; + int rc; + + /* + * Initialize IPRT first. + */ + rc = RTR0Init(0); + if (RT_FAILURE(rc)) + { + printk(KERN_ERR DEVICE_NAME ": RTR0Init failed, rc=%d.\n", rc); + return -EINVAL; + } + + /* + * Create the release log. + * (We do that here instead of common code because we want to log + * early failures using the LogRel macro.) + */ + rc = RTLogCreate(&pRelLogger, 0 /* fFlags */, "all", + "VBOX_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, + RTLOGDEST_STDOUT | RTLOGDEST_DEBUGGER | RTLOGDEST_USER, NULL); + if (RT_SUCCESS(rc)) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + RTLogGroupSettings(pRelLogger, g_szLogGrp); + RTLogFlags(pRelLogger, g_szLogFlags); + RTLogDestinations(pRelLogger, g_szLogDst); +#endif + RTLogRelSetDefaultInstance(pRelLogger); + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + g_fLoggerCreated = true; +#endif + + /* + * Locate and initialize the PCI device. + */ + rc = pci_register_driver(&g_PciDriver); + if (rc >= 0 && g_pPciDev) + { + /* + * Register the interrupt service routine for it. + */ + rc = vgdrvLinuxInitISR(); + if (rc >= 0) + { + /* + * Call the common device extension initializer. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) + VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64) + VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86) + VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64) + VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64; +#else +# warning "huh? which arch + version is this?" + VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux; +#endif + rc = VGDrvCommonInitDevExt(&g_DevExt, + g_IOPortBase, + g_pvMMIOBase, + g_cbMMIO, + enmOSType, + VMMDEV_EVENT_MOUSE_POSITION_CHANGED); + if (RT_SUCCESS(rc)) + { + /* + * Create the kernel session for this driver. + */ + rc = VGDrvCommonCreateKernelSession(&g_DevExt, &g_pKernelSession); + if (RT_SUCCESS(rc)) + { + /* + * Create the kernel input device. + */ +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + rc = vgdrvLinuxCreateInputDevice(); + if (rc >= 0) + { +#endif + /* + * Finally, create the device nodes. + */ + rc = vgdrvLinuxInitDeviceNodes(); + if (rc >= 0) + { + /* some useful information for the user but don't show this on the console */ + LogRel((DEVICE_NAME ": misc device minor %d, IRQ %d, I/O port %RTiop, MMIO at %RHp (size 0x%x)\n", + g_MiscDevice.minor, g_pPciDev->irq, g_IOPortBase, g_MMIOPhysAddr, g_cbMMIO)); + printk(KERN_DEBUG DEVICE_NAME ": Successfully loaded version " + VBOX_VERSION_STRING " (interface " RT_XSTR(VMMDEV_VERSION) ")\n"); + return rc; + } + + /* bail out */ +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + vgdrvLinuxTermInputDevice(); + } + else + { + LogRel((DEVICE_NAME ": vboxguestCreateInputDevice failed with rc=%Rrc\n", rc)); + rc = RTErrConvertFromErrno(rc); + } +#endif + VGDrvCommonCloseSession(&g_DevExt, g_pKernelSession); + } + VGDrvCommonDeleteDevExt(&g_DevExt); + } + else + { + LogRel((DEVICE_NAME ": VGDrvCommonInitDevExt failed with rc=%Rrc\n", rc)); + rc = RTErrConvertFromErrno(rc); + } + vgdrvLinuxTermISR(); + } + } + else + { + LogRel((DEVICE_NAME ": PCI device not found, probably running on physical hardware.\n")); + rc = -ENODEV; + } + pci_unregister_driver(&g_PciDriver); + RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); + RTLogDestroy(RTLogSetDefaultInstance(NULL)); + RTR0Term(); + return rc; +} + + +/** + * Unload the module. + */ +static void __exit vgdrvLinuxModExit(void) +{ + /* + * Inverse order of init. + */ + vgdrvLinuxTermDeviceNodes(); +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + vgdrvLinuxTermInputDevice(); +#endif + VGDrvCommonCloseSession(&g_DevExt, g_pKernelSession); + VGDrvCommonDeleteDevExt(&g_DevExt); + vgdrvLinuxTermISR(); + pci_unregister_driver(&g_PciDriver); + RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); + RTLogDestroy(RTLogSetDefaultInstance(NULL)); + RTR0Term(); +} + + +/** + * Device open. Called on open /dev/vboxdrv + * + * @param pInode Pointer to inode info structure. + * @param pFilp Associated file pointer. + */ +static int vgdrvLinuxOpen(struct inode *pInode, struct file *pFilp) +{ + int rc; + PVBOXGUESTSESSION pSession; + Log((DEVICE_NAME ": pFilp=%p pid=%d/%d %s\n", pFilp, RTProcSelf(), current->pid, current->comm)); + + /* + * Call common code to create the user session. Associate it with + * the file so we can access it in the other methods. + */ + rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession); + if (RT_SUCCESS(rc)) + { + pFilp->private_data = pSession; + if (MINOR(pInode->i_rdev) == g_MiscDeviceUser.minor) + pSession->fUserSession = true; + } + + Log(("vgdrvLinuxOpen: g_DevExt=%p pSession=%p rc=%d/%d (pid=%d/%d %s)\n", + &g_DevExt, pSession, rc, vgdrvLinuxConvertToNegErrno(rc), RTProcSelf(), current->pid, current->comm)); + return vgdrvLinuxConvertToNegErrno(rc); +} + + +/** + * Close device. + * + * @param pInode Pointer to inode info structure. + * @param pFilp Associated file pointer. + */ +static int vgdrvLinuxRelease(struct inode *pInode, struct file *pFilp) +{ + Log(("vgdrvLinuxRelease: pFilp=%p pSession=%p pid=%d/%d %s\n", + pFilp, pFilp->private_data, RTProcSelf(), current->pid, current->comm)); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28) + /* This housekeeping was needed in older kernel versions to ensure that + * the file pointer didn't get left on the polling queue. */ + vgdrvLinuxFAsync(-1, pFilp, 0); +#endif + VGDrvCommonCloseSession(&g_DevExt, (PVBOXGUESTSESSION)pFilp->private_data); + pFilp->private_data = NULL; + return 0; +} + + +/** + * Device I/O Control entry point. + * + * @param pFilp Associated file pointer. + * @param uCmd The function specified to ioctl(). + * @param ulArg The argument specified to ioctl(). + */ +#if defined(HAVE_UNLOCKED_IOCTL) || defined(DOXYGEN_RUNNING) +static long vgdrvLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg) +#else +static int vgdrvLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg) +#endif +{ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pFilp->private_data; + int rc; +#ifndef HAVE_UNLOCKED_IOCTL + unlock_kernel(); +#endif + +#if 0 /* no fast I/O controls defined atm. */ + if (RT_LIKELY( ( uCmd == SUP_IOCTL_FAST_DO_RAW_RUN + || uCmd == SUP_IOCTL_FAST_DO_HM_RUN + || uCmd == SUP_IOCTL_FAST_DO_NOP) + && pSession->fUnrestricted == true)) + rc = VGDrvCommonIoCtlFast(uCmd, ulArg, &g_DevExt, pSession); + else +#endif + rc = vgdrvLinuxIOCtlSlow(pFilp, uCmd, ulArg, pSession); + +#ifndef HAVE_UNLOCKED_IOCTL + lock_kernel(); +#endif + return rc; +} + + +/** + * Device I/O Control entry point, slow variant. + * + * @param pFilp Associated file pointer. + * @param uCmd The function specified to ioctl(). + * @param ulArg The argument specified to ioctl(). + * @param pSession The session instance. + */ +static int vgdrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigned long ulArg, PVBOXGUESTSESSION pSession) +{ + int rc; + VBGLREQHDR Hdr; + PVBGLREQHDR pHdr; + uint32_t cbBuf; + + Log6(("vgdrvLinuxIOCtlSlow: pFilp=%p uCmd=%#x ulArg=%p pid=%d/%d\n", pFilp, uCmd, (void *)ulArg, RTProcSelf(), current->pid)); + + /* + * Read the header. + */ + if (RT_FAILURE(RTR0MemUserCopyFrom(&Hdr, ulArg, sizeof(Hdr)))) + { + Log(("vgdrvLinuxIOCtlSlow: copy_from_user(,%#lx,) failed; uCmd=%#x\n", ulArg, uCmd)); + return -EFAULT; + } + if (RT_UNLIKELY(Hdr.uVersion != VBGLREQHDR_VERSION)) + { + Log(("vgdrvLinuxIOCtlSlow: bad header version %#x; uCmd=%#x\n", Hdr.uVersion, uCmd)); + return -EINVAL; + } + + /* + * Buffer the request. + * Note! The header is revalidated by the common code. + */ + cbBuf = RT_MAX(Hdr.cbIn, Hdr.cbOut); + if (RT_UNLIKELY(cbBuf > _1M*16)) + { + Log(("vgdrvLinuxIOCtlSlow: too big cbBuf=%#x; uCmd=%#x\n", cbBuf, uCmd)); + return -E2BIG; + } + if (RT_UNLIKELY( Hdr.cbIn < sizeof(Hdr) + || (cbBuf != _IOC_SIZE(uCmd) && _IOC_SIZE(uCmd) != 0))) + { + Log(("vgdrvLinuxIOCtlSlow: bad ioctl cbBuf=%#x _IOC_SIZE=%#x; uCmd=%#x\n", cbBuf, _IOC_SIZE(uCmd), uCmd)); + return -EINVAL; + } + pHdr = RTMemAlloc(cbBuf); + if (RT_UNLIKELY(!pHdr)) + { + LogRel(("vgdrvLinuxIOCtlSlow: failed to allocate buffer of %d bytes for uCmd=%#x\n", cbBuf, uCmd)); + return -ENOMEM; + } + if (RT_FAILURE(RTR0MemUserCopyFrom(pHdr, ulArg, Hdr.cbIn))) + { + Log(("vgdrvLinuxIOCtlSlow: copy_from_user(,%#lx, %#x) failed; uCmd=%#x\n", ulArg, Hdr.cbIn, uCmd)); + RTMemFree(pHdr); + return -EFAULT; + } + if (Hdr.cbIn < cbBuf) + RT_BZERO((uint8_t *)pHdr + Hdr.cbIn, cbBuf - Hdr.cbIn); + + /* + * Process the IOCtl. + */ + rc = VGDrvCommonIoCtl(uCmd, &g_DevExt, pSession, pHdr, cbBuf); + + /* + * Copy ioctl data and output buffer back to user space. + */ + if (RT_SUCCESS(rc)) + { + uint32_t cbOut = pHdr->cbOut; + if (RT_UNLIKELY(cbOut > cbBuf)) + { + LogRel(("vgdrvLinuxIOCtlSlow: too much output! %#x > %#x; uCmd=%#x!\n", cbOut, cbBuf, uCmd)); + cbOut = cbBuf; + } + if (RT_FAILURE(RTR0MemUserCopyTo(ulArg, pHdr, cbOut))) + { + /* this is really bad! */ + LogRel(("vgdrvLinuxIOCtlSlow: copy_to_user(%#lx,,%#x); uCmd=%#x!\n", ulArg, cbOut, uCmd)); + rc = -EFAULT; + } + } + else + { + Log(("vgdrvLinuxIOCtlSlow: pFilp=%p uCmd=%#x ulArg=%p failed, rc=%d\n", pFilp, uCmd, (void *)ulArg, rc)); + rc = -EINVAL; + } + RTMemFree(pHdr); + + Log6(("vgdrvLinuxIOCtlSlow: returns %d (pid=%d/%d)\n", rc, RTProcSelf(), current->pid)); + return rc; +} + + +/** + * @note This code is duplicated on other platforms with variations, so please + * keep them all up to date when making changes! + */ +int VBOXCALL VBoxGuestIDC(void *pvSession, uintptr_t uReq, PVBGLREQHDR pReqHdr, size_t cbReq) +{ + /* + * Simple request validation (common code does the rest). + */ + int rc; + if ( RT_VALID_PTR(pReqHdr) + && cbReq >= sizeof(*pReqHdr)) + { + /* + * All requests except the connect one requires a valid session. + */ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pvSession; + if (pSession) + { + if ( RT_VALID_PTR(pSession) + && pSession->pDevExt == &g_DevExt) + rc = VGDrvCommonIoCtl(uReq, &g_DevExt, pSession, pReqHdr, cbReq); + else + rc = VERR_INVALID_HANDLE; + } + else if (uReq == VBGL_IOCTL_IDC_CONNECT) + { + rc = VGDrvCommonCreateKernelSession(&g_DevExt, &pSession); + if (RT_SUCCESS(rc)) + { + rc = VGDrvCommonIoCtl(uReq, &g_DevExt, pSession, pReqHdr, cbReq); + if (RT_FAILURE(rc)) + VGDrvCommonCloseSession(&g_DevExt, pSession); + } + } + else + rc = VERR_INVALID_HANDLE; + } + else + rc = VERR_INVALID_POINTER; + return rc; +} +EXPORT_SYMBOL(VBoxGuestIDC); + + +/** + * Asynchronous notification activation method. + * + * @returns 0 on success, negative errno on failure. + * + * @param fd The file descriptor. + * @param pFile The file structure. + * @param fOn On/off indicator. + */ +static int vgdrvLinuxFAsync(int fd, struct file *pFile, int fOn) +{ + return fasync_helper(fd, pFile, fOn, &g_pFAsyncQueue); +} + + +/** + * Poll function. + * + * This returns ready to read if the mouse pointer mode or the pointer position + * has changed since last call to read. + * + * @returns 0 if no changes, POLLIN | POLLRDNORM if there are unseen changes. + * + * @param pFile The file structure. + * @param pPt The poll table. + * + * @remarks This is probably not really used, X11 is said to use the fasync + * interface instead. + */ +static unsigned int vgdrvLinuxPoll(struct file *pFile, poll_table *pPt) +{ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pFile->private_data; + uint32_t u32CurSeq = ASMAtomicUoReadU32(&g_DevExt.u32MousePosChangedSeq); + unsigned int fMask = pSession->u32MousePosChangedSeq != u32CurSeq + ? POLLIN | POLLRDNORM + : 0; + poll_wait(pFile, &g_PollEventQueue, pPt); + return fMask; +} + + +/** + * Read to go with our poll/fasync response. + * + * @returns 1 or -EINVAL. + * + * @param pFile The file structure. + * @param pbBuf The buffer to read into. + * @param cbRead The max number of bytes to read. + * @param poff The current file position. + * + * @remarks This is probably not really used as X11 lets the driver do its own + * event reading. The poll condition is therefore also cleared when we + * see VMMDevReq_GetMouseStatus in vgdrvIoCtl_VMMRequest. + */ +static ssize_t vgdrvLinuxRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff) +{ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pFile->private_data; + uint32_t u32CurSeq = ASMAtomicUoReadU32(&g_DevExt.u32MousePosChangedSeq); + + if (*poff != 0) + return -EINVAL; + + /* + * Fake a single byte read if we're not up to date with the current mouse position. + */ + if ( pSession->u32MousePosChangedSeq != u32CurSeq + && cbRead > 0) + { + pSession->u32MousePosChangedSeq = u32CurSeq; + pbBuf[0] = 0; + return 1; + } + return 0; +} + + +void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt) +{ +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + int rc; +#endif + NOREF(pDevExt); + + /* + * Wake up everyone that's in a poll() and post anyone that has + * subscribed to async notifications. + */ + Log3(("VGDrvNativeISRMousePollEvent: wake_up_all\n")); + wake_up_all(&g_PollEventQueue); + Log3(("VGDrvNativeISRMousePollEvent: kill_fasync\n")); + kill_fasync(&g_pFAsyncQueue, SIGIO, POLL_IN); +#ifdef VBOXGUEST_WITH_INPUT_DRIVER + /* Report events to the kernel input device */ + g_pMouseStatusReq->mouseFeatures = 0; + g_pMouseStatusReq->pointerXPos = 0; + g_pMouseStatusReq->pointerYPos = 0; + rc = VbglR0GRPerform(&g_pMouseStatusReq->header); + if (RT_SUCCESS(rc)) + { + input_report_abs(g_pInputDevice, ABS_X, + g_pMouseStatusReq->pointerXPos); + input_report_abs(g_pInputDevice, ABS_Y, + g_pMouseStatusReq->pointerYPos); +# ifdef EV_SYN + input_sync(g_pInputDevice); +# endif + } +#endif + Log3(("VGDrvNativeISRMousePollEvent: done\n")); +} + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + +/** log and dbg_log parameter setter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogGrpSet(const char *pszValue, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogGrpSet(const char *pszValue, struct kernel_param *pParam) +#endif +{ + if (g_fLoggerCreated) + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + if (pLogger) + RTLogGroupSettings(pLogger, pszValue); + } + else if (pParam->name[0] != 'd') + strlcpy(&g_szLogGrp[0], pszValue, sizeof(g_szLogGrp)); + + return 0; +} + +/** log and dbg_log parameter getter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogGrpGet(char *pszBuf, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pParam) +#endif +{ + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; + if (pLogger) + RTLogGetGroupSettings(pLogger, pszBuf, _4K); + return strlen(pszBuf); +} + + +/** log and dbg_log_flags parameter setter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, struct kernel_param *pParam) +#endif +{ + if (g_fLoggerCreated) + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + if (pLogger) + RTLogFlags(pLogger, pszValue); + } + else if (pParam->name[0] != 'd') + strlcpy(&g_szLogFlags[0], pszValue, sizeof(g_szLogFlags)); + return 0; +} + +/** log and dbg_log_flags parameter getter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pParam) +#endif +{ + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; + if (pLogger) + RTLogGetFlags(pLogger, pszBuf, _4K); + return strlen(pszBuf); +} + + +/** log and dbg_log_dest parameter setter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogDstSet(const char *pszValue, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogDstSet(const char *pszValue, struct kernel_param *pParam) +#endif +{ + if (g_fLoggerCreated) + { + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + if (pLogger) + RTLogDestinations(pLogger, pszValue); + } + else if (pParam->name[0] != 'd') + strlcpy(&g_szLogDst[0], pszValue, sizeof(g_szLogDst)); + return 0; +} + +/** log and dbg_log_dest parameter getter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamLogDstGet(char *pszBuf, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pParam) +#endif +{ + PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance(); + *pszBuf = '\0'; + if (pLogger) + RTLogGetDestinations(pLogger, pszBuf, _4K); + return strlen(pszBuf); +} + + +/** r3_log_to_host parameter setter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, struct kernel_param *pParam) +#endif +{ + if ( pszValue == NULL + || *pszValue == '\0' + || *pszValue == 'n' + || *pszValue == 'N' + || *pszValue == 'd' + || *pszValue == 'D' + || ( (*pszValue == 'o' || *pszValue == 'O') + && (*pszValue == 'f' || *pszValue == 'F') ) + ) + g_DevExt.fLoggingEnabled = false; + else + g_DevExt.fLoggingEnabled = true; + return 0; +} + +/** r3_log_to_host parameter getter. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, const struct kernel_param *pParam) +#else +static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *pParam) +#endif +{ + strcpy(pszBuf, g_DevExt.fLoggingEnabled ? "enabled" : "disabled"); + return strlen(pszBuf); +} + + +/* + * Define module parameters. + */ +module_param_call(log, vgdrvLinuxParamLogGrpSet, vgdrvLinuxParamLogGrpGet, NULL, 0664); +module_param_call(log_flags, vgdrvLinuxParamLogFlagsSet, vgdrvLinuxParamLogFlagsGet, NULL, 0664); +module_param_call(log_dest, vgdrvLinuxParamLogDstSet, vgdrvLinuxParamLogDstGet, NULL, 0664); +# ifdef LOG_ENABLED +module_param_call(dbg_log, vgdrvLinuxParamLogGrpSet, vgdrvLinuxParamLogGrpGet, NULL, 0664); +module_param_call(dbg_log_flags, vgdrvLinuxParamLogFlagsSet, vgdrvLinuxParamLogFlagsGet, NULL, 0664); +module_param_call(dbg_log_dest, vgdrvLinuxParamLogDstSet, vgdrvLinuxParamLogDstGet, NULL, 0664); +# endif +module_param_call(r3_log_to_host, vgdrvLinuxParamR3LogToHostSet, vgdrvLinuxParamR3LogToHostGet, NULL, 0664); + +#endif /* 2.6.0 and later */ + + +module_init(vgdrvLinuxModInit); +module_exit(vgdrvLinuxModExit); + +MODULE_AUTHOR(VBOX_VENDOR); +MODULE_DESCRIPTION(VBOX_PRODUCT " Guest Additions for Linux Module"); +MODULE_LICENSE("GPL"); +#ifdef MODULE_VERSION +MODULE_VERSION(VBOX_VERSION_STRING " r" RT_XSTR(VBOX_SVN_REV)); +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuest.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuest.c @@ -0,0 +1,4014 @@ +/* $Id: VBoxGuest.cpp $ */ +/** @file + * VBoxGuest - Guest Additions Driver, Common Code. + */ + +/* + * Copyright (C) 2007-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +/** @page pg_vbdrv VBoxGuest + * + * VBoxGuest is the device driver for VMMDev. + * + * The device driver is shipped as part of the guest additions. It has roots in + * the host VMM support driver (usually known as VBoxDrv), so fixes in platform + * specific code may apply to both drivers. + * + * The common code lives in VBoxGuest.cpp and is compiled both as C++ and C. + * The VBoxGuest.cpp source file shall not contain platform specific code, + * though it must occationally do a few \#ifdef RT_OS_XXX tests to cater for + * platform differences. Though, in those cases, it is common that more than + * one platform needs special handling. + * + * On most platforms the device driver should create two device nodes, one for + * full (unrestricted) access to the feature set, and one which only provides a + * restrict set of functions. These are generally referred to as 'vboxguest' + * and 'vboxuser' respectively. Currently, this two device approach is only + * implemented on Linux! + * + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP LOG_GROUP_DEFAULT +#include "VBoxGuestInternal.h" +#include /* for VMMDEV_RAM_SIZE */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef VBOX_WITH_HGCM +# include +#endif +#include "version-generated.h" +#if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) +# include "revision-generated.h" +#endif +#if defined(RT_OS_SOLARIS) || defined(RT_OS_DARWIN) +# include +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#define VBOXGUEST_ACQUIRE_STYLE_EVENTS (VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST | VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST) + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +#ifdef VBOX_WITH_HGCM +static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdrNonVolatile, void *pvUser, uint32_t u32User); +#endif +static int vgdrvIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession); +static void vgdrvBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker); +static uint32_t vgdrvGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession); +static int vgdrvResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents); +static int vgdrvResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt); +static int vgdrvResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt); +static int vgdrvSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination); +static int vgdrvSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination); +static int vgdrvSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNoMask, + uint32_t *pfSessionCaps, uint32_t *pfGlobalCaps, bool fSessionTermination); +static int vgdrvAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, uint32_t fFlags, bool fSessionTermination); +static int vgdrvDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents); + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +static const uint32_t g_cbChangeMemBalloonReq = RT_OFFSETOF(VMMDevChangeMemBalloon, aPhysPage[VMMDEV_MEMORY_BALLOON_CHUNK_PAGES]); + +#if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) +/** + * Drag in the rest of IRPT since we share it with the + * rest of the kernel modules on Solaris. + */ +PFNRT g_apfnVBoxGuestIPRTDeps[] = +{ + /* VirtioNet */ + (PFNRT)RTRandBytes, + /* RTSemMutex* */ + (PFNRT)RTSemMutexCreate, + (PFNRT)RTSemMutexDestroy, + (PFNRT)RTSemMutexRequest, + (PFNRT)RTSemMutexRequestNoResume, + (PFNRT)RTSemMutexRequestDebug, + (PFNRT)RTSemMutexRequestNoResumeDebug, + (PFNRT)RTSemMutexRelease, + (PFNRT)RTSemMutexIsOwned, + NULL +}; +#endif /* RT_OS_DARWIN || RT_OS_SOLARIS */ + + +/** + * Reserves memory in which the VMM can relocate any guest mappings + * that are floating around. + * + * This operation is a little bit tricky since the VMM might not accept + * just any address because of address clashes between the three contexts + * it operates in, so use a small stack to perform this operation. + * + * @returns VBox status code (ignored). + * @param pDevExt The device extension. + */ +static int vgdrvInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt) +{ + /* + * Query the required space. + */ + VMMDevReqHypervisorInfo *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(VMMDevReqHypervisorInfo), VMMDevReq_GetHypervisorInfo); + if (RT_FAILURE(rc)) + return rc; + pReq->hypervisorStart = 0; + pReq->hypervisorSize = 0; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) /* this shouldn't happen! */ + { + VbglR0GRFree(&pReq->header); + return rc; + } + + /* + * The VMM will report back if there is nothing it wants to map, like for + * instance in VT-x and AMD-V mode. + */ + if (pReq->hypervisorSize == 0) + Log(("vgdrvInitFixateGuestMappings: nothing to do\n")); + else + { + /* + * We have to try several times since the host can be picky + * about certain addresses. + */ + RTR0MEMOBJ hFictive = NIL_RTR0MEMOBJ; + uint32_t cbHypervisor = pReq->hypervisorSize; + RTR0MEMOBJ ahTries[5]; + uint32_t iTry; + bool fBitched = false; + Log(("vgdrvInitFixateGuestMappings: cbHypervisor=%#x\n", cbHypervisor)); + for (iTry = 0; iTry < RT_ELEMENTS(ahTries); iTry++) + { + /* + * Reserve space, or if that isn't supported, create a object for + * some fictive physical memory and map that in to kernel space. + * + * To make the code a bit uglier, most systems cannot help with + * 4MB alignment, so we have to deal with that in addition to + * having two ways of getting the memory. + */ + uint32_t uAlignment = _4M; + RTR0MEMOBJ hObj; + rc = RTR0MemObjReserveKernel(&hObj, (void *)-1, RT_ALIGN_32(cbHypervisor, _4M), uAlignment); + if (rc == VERR_NOT_SUPPORTED) + { + uAlignment = PAGE_SIZE; + rc = RTR0MemObjReserveKernel(&hObj, (void *)-1, RT_ALIGN_32(cbHypervisor, _4M) + _4M, uAlignment); + } + /* + * If both RTR0MemObjReserveKernel calls above failed because either not supported or + * not implemented at all at the current platform, try to map the memory object into the + * virtual kernel space. + */ + if (rc == VERR_NOT_SUPPORTED) + { + if (hFictive == NIL_RTR0MEMOBJ) + { + rc = RTR0MemObjEnterPhys(&hObj, VBOXGUEST_HYPERVISOR_PHYSICAL_START, cbHypervisor + _4M, RTMEM_CACHE_POLICY_DONT_CARE); + if (RT_FAILURE(rc)) + break; + hFictive = hObj; + } + uAlignment = _4M; + rc = RTR0MemObjMapKernel(&hObj, hFictive, (void *)-1, uAlignment, RTMEM_PROT_READ | RTMEM_PROT_WRITE); + if (rc == VERR_NOT_SUPPORTED) + { + uAlignment = PAGE_SIZE; + rc = RTR0MemObjMapKernel(&hObj, hFictive, (void *)-1, uAlignment, RTMEM_PROT_READ | RTMEM_PROT_WRITE); + } + } + if (RT_FAILURE(rc)) + { + LogRel(("VBoxGuest: Failed to reserve memory for the hypervisor: rc=%Rrc (cbHypervisor=%#x uAlignment=%#x iTry=%u)\n", + rc, cbHypervisor, uAlignment, iTry)); + fBitched = true; + break; + } + + /* + * Try set it. + */ + pReq->header.requestType = VMMDevReq_SetHypervisorInfo; + pReq->header.rc = VERR_INTERNAL_ERROR; + pReq->hypervisorSize = cbHypervisor; + pReq->hypervisorStart = (RTGCPTR32)(uintptr_t)RTR0MemObjAddress(hObj); + if ( uAlignment == PAGE_SIZE + && pReq->hypervisorStart & (_4M - 1)) + pReq->hypervisorStart = RT_ALIGN_32(pReq->hypervisorStart, _4M); + AssertMsg(RT_ALIGN_32(pReq->hypervisorStart, _4M) == pReq->hypervisorStart, ("%#x\n", pReq->hypervisorStart)); + + rc = VbglR0GRPerform(&pReq->header); + if (RT_SUCCESS(rc)) + { + pDevExt->hGuestMappings = hFictive != NIL_RTR0MEMOBJ ? hFictive : hObj; + Log(("VBoxGuest: %p LB %#x; uAlignment=%#x iTry=%u hGuestMappings=%p (%s)\n", + RTR0MemObjAddress(pDevExt->hGuestMappings), + RTR0MemObjSize(pDevExt->hGuestMappings), + uAlignment, iTry, pDevExt->hGuestMappings, hFictive != NIL_RTR0PTR ? "fictive" : "reservation")); + break; + } + ahTries[iTry] = hObj; + } + + /* + * Cleanup failed attempts. + */ + while (iTry-- > 0) + RTR0MemObjFree(ahTries[iTry], false /* fFreeMappings */); + if ( RT_FAILURE(rc) + && hFictive != NIL_RTR0PTR) + RTR0MemObjFree(hFictive, false /* fFreeMappings */); + if (RT_FAILURE(rc) && !fBitched) + LogRel(("VBoxGuest: Warning: failed to reserve %#d of memory for guest mappings.\n", cbHypervisor)); + } + VbglR0GRFree(&pReq->header); + + /* + * We ignore failed attempts for now. + */ + return VINF_SUCCESS; +} + + +/** + * Undo what vgdrvInitFixateGuestMappings did. + * + * @param pDevExt The device extension. + */ +static void vgdrvTermUnfixGuestMappings(PVBOXGUESTDEVEXT pDevExt) +{ + if (pDevExt->hGuestMappings != NIL_RTR0PTR) + { + /* + * Tell the host that we're going to free the memory we reserved for + * it, the free it up. (Leak the memory if anything goes wrong here.) + */ + VMMDevReqHypervisorInfo *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(VMMDevReqHypervisorInfo), VMMDevReq_SetHypervisorInfo); + if (RT_SUCCESS(rc)) + { + pReq->hypervisorStart = 0; + pReq->hypervisorSize = 0; + rc = VbglR0GRPerform(&pReq->header); + VbglR0GRFree(&pReq->header); + } + if (RT_SUCCESS(rc)) + { + rc = RTR0MemObjFree(pDevExt->hGuestMappings, true /* fFreeMappings */); + AssertRC(rc); + } + else + LogRel(("vgdrvTermUnfixGuestMappings: Failed to unfix the guest mappings! rc=%Rrc\n", rc)); + + pDevExt->hGuestMappings = NIL_RTR0MEMOBJ; + } +} + + + +/** + * Report the guest information to the host. + * + * @returns IPRT status code. + * @param enmOSType The OS type to report. + */ +static int vgdrvReportGuestInfo(VBOXOSTYPE enmOSType) +{ + /* + * Allocate and fill in the two guest info reports. + */ + VMMDevReportGuestInfo2 *pReqInfo2 = NULL; + VMMDevReportGuestInfo *pReqInfo1 = NULL; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReqInfo2, sizeof (VMMDevReportGuestInfo2), VMMDevReq_ReportGuestInfo2); + Log(("vgdrvReportGuestInfo: VbglR0GRAlloc VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + pReqInfo2->guestInfo.additionsMajor = VBOX_VERSION_MAJOR; + pReqInfo2->guestInfo.additionsMinor = VBOX_VERSION_MINOR; + pReqInfo2->guestInfo.additionsBuild = VBOX_VERSION_BUILD; + pReqInfo2->guestInfo.additionsRevision = VBOX_SVN_REV; + pReqInfo2->guestInfo.additionsFeatures = 0; /* (no features defined yet) */ + RTStrCopy(pReqInfo2->guestInfo.szName, sizeof(pReqInfo2->guestInfo.szName), VBOX_VERSION_STRING); + + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReqInfo1, sizeof (VMMDevReportGuestInfo), VMMDevReq_ReportGuestInfo); + Log(("vgdrvReportGuestInfo: VbglR0GRAlloc VMMDevReportGuestInfo completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + pReqInfo1->guestInfo.interfaceVersion = VMMDEV_VERSION; + pReqInfo1->guestInfo.osType = enmOSType; + + /* + * There are two protocols here: + * 1. Info2 + Info1. Supported by >=3.2.51. + * 2. Info1 and optionally Info2. The old protocol. + * + * We try protocol 1 first. It will fail with VERR_NOT_SUPPORTED + * if not supported by the VMMDev (message ordering requirement). + */ + rc = VbglR0GRPerform(&pReqInfo2->header); + Log(("vgdrvReportGuestInfo: VbglR0GRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + rc = VbglR0GRPerform(&pReqInfo1->header); + Log(("vgdrvReportGuestInfo: VbglR0GRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc)); + } + else if ( rc == VERR_NOT_SUPPORTED + || rc == VERR_NOT_IMPLEMENTED) + { + rc = VbglR0GRPerform(&pReqInfo1->header); + Log(("vgdrvReportGuestInfo: VbglR0GRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + rc = VbglR0GRPerform(&pReqInfo2->header); + Log(("vgdrvReportGuestInfo: VbglR0GRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc)); + if (rc == VERR_NOT_IMPLEMENTED) + rc = VINF_SUCCESS; + } + } + VbglR0GRFree(&pReqInfo1->header); + } + VbglR0GRFree(&pReqInfo2->header); + } + + return rc; +} + + +/** + * Report the guest driver status to the host. + * + * @returns IPRT status code. + * @param fActive Flag whether the driver is now active or not. + */ +static int vgdrvReportDriverStatus(bool fActive) +{ + /* + * Report guest status of the VBox driver to the host. + */ + VMMDevReportGuestStatus *pReq2 = NULL; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq2, sizeof(*pReq2), VMMDevReq_ReportGuestStatus); + Log(("vgdrvReportDriverStatus: VbglR0GRAlloc VMMDevReportGuestStatus completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + pReq2->guestStatus.facility = VBoxGuestFacilityType_VBoxGuestDriver; + pReq2->guestStatus.status = fActive ? + VBoxGuestFacilityStatus_Active + : VBoxGuestFacilityStatus_Inactive; + pReq2->guestStatus.flags = 0; + rc = VbglR0GRPerform(&pReq2->header); + Log(("vgdrvReportDriverStatus: VbglR0GRPerform VMMDevReportGuestStatus completed with fActive=%d, rc=%Rrc\n", + fActive ? 1 : 0, rc)); + if (rc == VERR_NOT_IMPLEMENTED) /* Compatibility with older hosts. */ + rc = VINF_SUCCESS; + VbglR0GRFree(&pReq2->header); + } + + return rc; +} + + +/** @name Memory Ballooning + * @{ + */ + +/** + * Inflate the balloon by one chunk represented by an R0 memory object. + * + * The caller owns the balloon mutex. + * + * @returns IPRT status code. + * @param pMemObj Pointer to the R0 memory object. + * @param pReq The pre-allocated request for performing the VMMDev call. + */ +static int vgdrvBalloonInflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq) +{ + uint32_t iPage; + int rc; + + for (iPage = 0; iPage < VMMDEV_MEMORY_BALLOON_CHUNK_PAGES; iPage++) + { + RTHCPHYS phys = RTR0MemObjGetPagePhysAddr(*pMemObj, iPage); + pReq->aPhysPage[iPage] = phys; + } + + pReq->fInflate = true; + pReq->header.size = g_cbChangeMemBalloonReq; + pReq->cPages = VMMDEV_MEMORY_BALLOON_CHUNK_PAGES; + + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + LogRel(("vgdrvBalloonInflate: VbglR0GRPerform failed. rc=%Rrc\n", rc)); + return rc; +} + + +/** + * Deflate the balloon by one chunk - info the host and free the memory object. + * + * The caller owns the balloon mutex. + * + * @returns IPRT status code. + * @param pMemObj Pointer to the R0 memory object. + * The memory object will be freed afterwards. + * @param pReq The pre-allocated request for performing the VMMDev call. + */ +static int vgdrvBalloonDeflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq) +{ + uint32_t iPage; + int rc; + + for (iPage = 0; iPage < VMMDEV_MEMORY_BALLOON_CHUNK_PAGES; iPage++) + { + RTHCPHYS phys = RTR0MemObjGetPagePhysAddr(*pMemObj, iPage); + pReq->aPhysPage[iPage] = phys; + } + + pReq->fInflate = false; + pReq->header.size = g_cbChangeMemBalloonReq; + pReq->cPages = VMMDEV_MEMORY_BALLOON_CHUNK_PAGES; + + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + { + LogRel(("vgdrvBalloonDeflate: VbglR0GRPerform failed. rc=%Rrc\n", rc)); + return rc; + } + + rc = RTR0MemObjFree(*pMemObj, true); + if (RT_FAILURE(rc)) + { + LogRel(("vgdrvBalloonDeflate: RTR0MemObjFree(%p,true) -> %Rrc; this is *BAD*!\n", *pMemObj, rc)); + return rc; + } + + *pMemObj = NIL_RTR0MEMOBJ; + return VINF_SUCCESS; +} + + +/** + * Inflate/deflate the memory balloon and notify the host. + * + * This is a worker used by vgdrvIoCtl_CheckMemoryBalloon - it takes the mutex. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param cBalloonChunks The new size of the balloon in chunks of 1MB. + * @param pfHandleInR3 Where to return the handle-in-ring3 indicator + * (VINF_SUCCESS if set). + */ +static int vgdrvSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonChunks, bool *pfHandleInR3) +{ + int rc = VINF_SUCCESS; + + if (pDevExt->MemBalloon.fUseKernelAPI) + { + VMMDevChangeMemBalloon *pReq; + uint32_t i; + + if (cBalloonChunks > pDevExt->MemBalloon.cMaxChunks) + { + LogRel(("vgdrvSetBalloonSizeKernel: illegal balloon size %u (max=%u)\n", + cBalloonChunks, pDevExt->MemBalloon.cMaxChunks)); + return VERR_INVALID_PARAMETER; + } + + if (cBalloonChunks == pDevExt->MemBalloon.cMaxChunks) + return VINF_SUCCESS; /* nothing to do */ + + if ( cBalloonChunks > pDevExt->MemBalloon.cChunks + && !pDevExt->MemBalloon.paMemObj) + { + pDevExt->MemBalloon.paMemObj = (PRTR0MEMOBJ)RTMemAllocZ(sizeof(RTR0MEMOBJ) * pDevExt->MemBalloon.cMaxChunks); + if (!pDevExt->MemBalloon.paMemObj) + { + LogRel(("vgdrvSetBalloonSizeKernel: no memory for paMemObj!\n")); + return VERR_NO_MEMORY; + } + } + + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, g_cbChangeMemBalloonReq, VMMDevReq_ChangeMemBalloon); + if (RT_FAILURE(rc)) + return rc; + + if (cBalloonChunks > pDevExt->MemBalloon.cChunks) + { + /* inflate */ + for (i = pDevExt->MemBalloon.cChunks; i < cBalloonChunks; i++) + { + rc = RTR0MemObjAllocPhysNC(&pDevExt->MemBalloon.paMemObj[i], + VMMDEV_MEMORY_BALLOON_CHUNK_SIZE, NIL_RTHCPHYS); + if (RT_FAILURE(rc)) + { + if (rc == VERR_NOT_SUPPORTED) + { + /* not supported -- fall back to the R3-allocated memory. */ + rc = VINF_SUCCESS; + pDevExt->MemBalloon.fUseKernelAPI = false; + Assert(pDevExt->MemBalloon.cChunks == 0); + Log(("VBoxGuestSetBalloonSizeKernel: PhysNC allocs not supported, falling back to R3 allocs.\n")); + } + /* else if (rc == VERR_NO_MEMORY || rc == VERR_NO_PHYS_MEMORY): + * cannot allocate more memory => don't try further, just stop here */ + /* else: XXX what else can fail? VERR_MEMOBJ_INIT_FAILED for instance. just stop. */ + break; + } + + rc = vgdrvBalloonInflate(&pDevExt->MemBalloon.paMemObj[i], pReq); + if (RT_FAILURE(rc)) + { + Log(("vboxGuestSetBalloonSize(inflate): failed, rc=%Rrc!\n", rc)); + RTR0MemObjFree(pDevExt->MemBalloon.paMemObj[i], true); + pDevExt->MemBalloon.paMemObj[i] = NIL_RTR0MEMOBJ; + break; + } + pDevExt->MemBalloon.cChunks++; + } + } + else + { + /* deflate */ + for (i = pDevExt->MemBalloon.cChunks; i-- > cBalloonChunks;) + { + rc = vgdrvBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq); + if (RT_FAILURE(rc)) + { + Log(("vboxGuestSetBalloonSize(deflate): failed, rc=%Rrc!\n", rc)); + break; + } + pDevExt->MemBalloon.cChunks--; + } + } + + VbglR0GRFree(&pReq->header); + } + + /* + * Set the handle-in-ring3 indicator. When set Ring-3 will have to work + * the balloon changes via the other API. + */ + *pfHandleInR3 = pDevExt->MemBalloon.fUseKernelAPI ? false : true; + + return rc; +} + + +/** + * Inflate/deflate the balloon by one chunk. + * + * Worker for vgdrvIoCtl_ChangeMemoryBalloon - it takes the mutex. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param pvChunk The address of the chunk to add to / remove from the + * balloon. (user space address) + * @param fInflate Inflate if true, deflate if false. + */ +static int vgdrvSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, RTR3PTR pvChunk, bool fInflate) +{ + VMMDevChangeMemBalloon *pReq; + PRTR0MEMOBJ pMemObj = NULL; + int rc = VINF_SUCCESS; + uint32_t i; + RT_NOREF1(pSession); + + if (fInflate) + { + if ( pDevExt->MemBalloon.cChunks > pDevExt->MemBalloon.cMaxChunks - 1 + || pDevExt->MemBalloon.cMaxChunks == 0 /* If called without first querying. */) + { + LogRel(("vgdrvSetBalloonSizeFromUser: cannot inflate balloon, already have %u chunks (max=%u)\n", + pDevExt->MemBalloon.cChunks, pDevExt->MemBalloon.cMaxChunks)); + return VERR_INVALID_PARAMETER; + } + + if (!pDevExt->MemBalloon.paMemObj) + { + pDevExt->MemBalloon.paMemObj = (PRTR0MEMOBJ)RTMemAlloc(sizeof(RTR0MEMOBJ) * pDevExt->MemBalloon.cMaxChunks); + if (!pDevExt->MemBalloon.paMemObj) + { + LogRel(("vgdrvSetBalloonSizeFromUser: no memory for paMemObj!\n")); + return VERR_NO_MEMORY; + } + for (i = 0; i < pDevExt->MemBalloon.cMaxChunks; i++) + pDevExt->MemBalloon.paMemObj[i] = NIL_RTR0MEMOBJ; + } + } + else + { + if (pDevExt->MemBalloon.cChunks == 0) + { + AssertMsgFailed(("vgdrvSetBalloonSizeFromUser: cannot decrease balloon, already at size 0\n")); + return VERR_INVALID_PARAMETER; + } + } + + /* + * Enumerate all memory objects and check if the object is already registered. + */ + for (i = 0; i < pDevExt->MemBalloon.cMaxChunks; i++) + { + if ( fInflate + && !pMemObj + && pDevExt->MemBalloon.paMemObj[i] == NIL_RTR0MEMOBJ) + pMemObj = &pDevExt->MemBalloon.paMemObj[i]; /* found free object pointer */ + if (RTR0MemObjAddressR3(pDevExt->MemBalloon.paMemObj[i]) == pvChunk) + { + if (fInflate) + return VERR_ALREADY_EXISTS; /* don't provide the same memory twice */ + pMemObj = &pDevExt->MemBalloon.paMemObj[i]; + break; + } + } + if (!pMemObj) + { + if (fInflate) + { + /* no free object pointer found -- should not happen */ + return VERR_NO_MEMORY; + } + + /* cannot free this memory as it wasn't provided before */ + return VERR_NOT_FOUND; + } + + /* + * Try inflate / default the balloon as requested. + */ + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, g_cbChangeMemBalloonReq, VMMDevReq_ChangeMemBalloon); + if (RT_FAILURE(rc)) + return rc; + + if (fInflate) + { + rc = RTR0MemObjLockUser(pMemObj, pvChunk, VMMDEV_MEMORY_BALLOON_CHUNK_SIZE, + RTMEM_PROT_READ | RTMEM_PROT_WRITE, NIL_RTR0PROCESS); + if (RT_SUCCESS(rc)) + { + rc = vgdrvBalloonInflate(pMemObj, pReq); + if (RT_SUCCESS(rc)) + pDevExt->MemBalloon.cChunks++; + else + { + Log(("vgdrvSetBalloonSizeFromUser(inflate): failed, rc=%Rrc!\n", rc)); + RTR0MemObjFree(*pMemObj, true); + *pMemObj = NIL_RTR0MEMOBJ; + } + } + } + else + { + rc = vgdrvBalloonDeflate(pMemObj, pReq); + if (RT_SUCCESS(rc)) + pDevExt->MemBalloon.cChunks--; + else + Log(("vgdrvSetBalloonSizeFromUser(deflate): failed, rc=%Rrc!\n", rc)); + } + + VbglR0GRFree(&pReq->header); + return rc; +} + + +/** + * Cleanup the memory balloon of a session. + * + * Will request the balloon mutex, so it must be valid and the caller must not + * own it already. + * + * @param pDevExt The device extension. + * @param pSession The session. Can be NULL at unload. + */ +static void vgdrvCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ + RTSemFastMutexRequest(pDevExt->MemBalloon.hMtx); + if ( pDevExt->MemBalloon.pOwner == pSession + || pSession == NULL /*unload*/) + { + if (pDevExt->MemBalloon.paMemObj) + { + VMMDevChangeMemBalloon *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, g_cbChangeMemBalloonReq, VMMDevReq_ChangeMemBalloon); + if (RT_SUCCESS(rc)) + { + uint32_t i; + for (i = pDevExt->MemBalloon.cChunks; i-- > 0;) + { + rc = vgdrvBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq); + if (RT_FAILURE(rc)) + { + LogRel(("vgdrvCloseMemBalloon: Deflate failed with rc=%Rrc. Will leak %u chunks.\n", + rc, pDevExt->MemBalloon.cChunks)); + break; + } + pDevExt->MemBalloon.paMemObj[i] = NIL_RTR0MEMOBJ; + pDevExt->MemBalloon.cChunks--; + } + VbglR0GRFree(&pReq->header); + } + else + LogRel(("vgdrvCloseMemBalloon: Failed to allocate VMMDev request buffer (rc=%Rrc). Will leak %u chunks.\n", + rc, pDevExt->MemBalloon.cChunks)); + RTMemFree(pDevExt->MemBalloon.paMemObj); + pDevExt->MemBalloon.paMemObj = NULL; + } + + pDevExt->MemBalloon.pOwner = NULL; + } + RTSemFastMutexRelease(pDevExt->MemBalloon.hMtx); +} + +/** @} */ + + + +/** @name Heartbeat + * @{ + */ + +/** + * Sends heartbeat to host. + * + * @returns VBox status code. + */ +static int vgdrvHeartbeatSend(PVBOXGUESTDEVEXT pDevExt) +{ + int rc; + if (pDevExt->pReqGuestHeartbeat) + { + rc = VbglR0GRPerform(pDevExt->pReqGuestHeartbeat); + Log3(("vgdrvHeartbeatSend: VbglR0GRPerform vgdrvHeartbeatSend completed with rc=%Rrc\n", rc)); + } + else + rc = VERR_INVALID_STATE; + return rc; +} + + +/** + * Callback for heartbeat timer. + */ +static DECLCALLBACK(void) vgdrvHeartbeatTimerHandler(PRTTIMER hTimer, void *pvUser, uint64_t iTick) +{ + PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser; + int rc; + AssertReturnVoid(pDevExt); + + rc = vgdrvHeartbeatSend(pDevExt); + if (RT_FAILURE(rc)) + Log(("HB Timer: vgdrvHeartbeatSend failed: rc=%Rrc\n", rc)); + + NOREF(hTimer); NOREF(iTick); +} + + +/** + * Configure the host to check guest's heartbeat + * and get heartbeat interval from the host. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param fEnabled Set true to enable guest heartbeat checks on host. + */ +static int vgdrvHeartbeatHostConfigure(PVBOXGUESTDEVEXT pDevExt, bool fEnabled) +{ + VMMDevReqHeartbeat *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_HeartbeatConfigure); + Log(("vgdrvHeartbeatHostConfigure: VbglR0GRAlloc vgdrvHeartbeatHostConfigure completed with rc=%Rrc\n", rc)); + if (RT_SUCCESS(rc)) + { + pReq->fEnabled = fEnabled; + pReq->cNsInterval = 0; + rc = VbglR0GRPerform(&pReq->header); + Log(("vgdrvHeartbeatHostConfigure: VbglR0GRPerform vgdrvHeartbeatHostConfigure completed with rc=%Rrc\n", rc)); + pDevExt->cNsHeartbeatInterval = pReq->cNsInterval; + VbglR0GRFree(&pReq->header); + } + return rc; +} + + +/** + * Initializes the heartbeat timer. + * + * This feature may be disabled by the host. + * + * @returns VBox status (ignored). + * @param pDevExt The device extension. + */ +static int vgdrvHeartbeatInit(PVBOXGUESTDEVEXT pDevExt) +{ + /* + * Make sure that heartbeat checking is disabled. + */ + int rc = vgdrvHeartbeatHostConfigure(pDevExt, false); + if (RT_SUCCESS(rc)) + { + rc = vgdrvHeartbeatHostConfigure(pDevExt, true); + if (RT_SUCCESS(rc)) + { + /* + * Preallocate the request to use it from the timer callback because: + * 1) on Windows VbglR0GRAlloc must be called at IRQL <= APC_LEVEL + * and the timer callback runs at DISPATCH_LEVEL; + * 2) avoid repeated allocations. + */ + rc = VbglR0GRAlloc(&pDevExt->pReqGuestHeartbeat, sizeof(*pDevExt->pReqGuestHeartbeat), VMMDevReq_GuestHeartbeat); + if (RT_SUCCESS(rc)) + { + LogRel(("vgdrvHeartbeatInit: Setting up heartbeat to trigger every %RU64 milliseconds\n", + pDevExt->cNsHeartbeatInterval / RT_NS_1MS)); + rc = RTTimerCreateEx(&pDevExt->pHeartbeatTimer, pDevExt->cNsHeartbeatInterval, 0 /*fFlags*/, + (PFNRTTIMER)vgdrvHeartbeatTimerHandler, pDevExt); + if (RT_SUCCESS(rc)) + { + rc = RTTimerStart(pDevExt->pHeartbeatTimer, 0); + if (RT_SUCCESS(rc)) + return VINF_SUCCESS; + + LogRel(("vgdrvHeartbeatInit: Heartbeat timer failed to start, rc=%Rrc\n", rc)); + } + else + LogRel(("vgdrvHeartbeatInit: Failed to create heartbeat timer: %Rrc\n", rc)); + + VbglR0GRFree(pDevExt->pReqGuestHeartbeat); + pDevExt->pReqGuestHeartbeat = NULL; + } + else + LogRel(("vgdrvHeartbeatInit: VbglR0GRAlloc(VMMDevReq_GuestHeartbeat): %Rrc\n", rc)); + + LogRel(("vgdrvHeartbeatInit: Failed to set up the timer, guest heartbeat is disabled\n")); + vgdrvHeartbeatHostConfigure(pDevExt, false); + } + else + LogRel(("vgdrvHeartbeatInit: Failed to configure host for heartbeat checking: rc=%Rrc\n", rc)); + } + return rc; +} + +/** @} */ + + +/** + * Helper to reinit the VMMDev communication after hibernation. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param enmOSType The OS type. + * + * @todo Call this on all platforms, not just windows. + */ +int VGDrvCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType) +{ + int rc = vgdrvReportGuestInfo(enmOSType); + if (RT_SUCCESS(rc)) + { + rc = vgdrvReportDriverStatus(true /* Driver is active */); + if (RT_FAILURE(rc)) + Log(("VGDrvCommonReinitDevExtAfterHibernation: could not report guest driver status, rc=%Rrc\n", rc)); + } + else + Log(("VGDrvCommonReinitDevExtAfterHibernation: could not report guest information to host, rc=%Rrc\n", rc)); + LogFlow(("VGDrvCommonReinitDevExtAfterHibernation: returned with rc=%Rrc\n", rc)); + RT_NOREF1(pDevExt); + return rc; +} + + +/** + * Initializes the VBoxGuest device extension when the + * device driver is loaded. + * + * The native code locates the VMMDev on the PCI bus and retrieve + * the MMIO and I/O port ranges, this function will take care of + * mapping the MMIO memory (if present). Upon successful return + * the native code should set up the interrupt handler. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. Allocated by the native code. + * @param IOPortBase The base of the I/O port range. + * @param pvMMIOBase The base of the MMIO memory mapping. + * This is optional, pass NULL if not present. + * @param cbMMIO The size of the MMIO memory mapping. + * This is optional, pass 0 if not present. + * @param enmOSType The guest OS type to report to the VMMDev. + * @param fFixedEvents Events that will be enabled upon init and no client + * will ever be allowed to mask. + */ +int VGDrvCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase, + void *pvMMIOBase, uint32_t cbMMIO, VBOXOSTYPE enmOSType, uint32_t fFixedEvents) +{ + int rc, rc2; + +#ifdef VBOX_GUESTDRV_WITH_RELEASE_LOGGER + /* + * Create the release log. + */ + static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES; + PRTLOGGER pRelLogger; + rc = RTLogCreate(&pRelLogger, 0 /*fFlags*/, "all", "VBOXGUEST_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, + RTLOGDEST_STDOUT | RTLOGDEST_DEBUGGER, NULL); + if (RT_SUCCESS(rc)) + RTLogRelSetDefaultInstance(pRelLogger); + /** @todo Add native hook for getting logger config parameters and setting + * them. On linux we should use the module parameter stuff... */ +#endif + + /* + * Adjust fFixedEvents. + */ +#ifdef VBOX_WITH_HGCM + fFixedEvents |= VMMDEV_EVENT_HGCM; +#endif + + /* + * Initialize the data. + */ + pDevExt->IOPortBase = IOPortBase; + pDevExt->pVMMDevMemory = NULL; + pDevExt->hGuestMappings = NIL_RTR0MEMOBJ; + pDevExt->EventSpinlock = NIL_RTSPINLOCK; + pDevExt->pIrqAckEvents = NULL; + pDevExt->PhysIrqAckEvents = NIL_RTCCPHYS; + RTListInit(&pDevExt->WaitList); +#ifdef VBOX_WITH_HGCM + RTListInit(&pDevExt->HGCMWaitList); +#endif +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + RTListInit(&pDevExt->WakeUpList); +#endif + RTListInit(&pDevExt->WokenUpList); + RTListInit(&pDevExt->FreeList); + RTListInit(&pDevExt->SessionList); + pDevExt->cSessions = 0; + pDevExt->fLoggingEnabled = false; + pDevExt->f32PendingEvents = 0; + pDevExt->u32MousePosChangedSeq = 0; + pDevExt->SessionSpinlock = NIL_RTSPINLOCK; + pDevExt->MemBalloon.hMtx = NIL_RTSEMFASTMUTEX; + pDevExt->MemBalloon.cChunks = 0; + pDevExt->MemBalloon.cMaxChunks = 0; + pDevExt->MemBalloon.fUseKernelAPI = true; + pDevExt->MemBalloon.paMemObj = NULL; + pDevExt->MemBalloon.pOwner = NULL; + pDevExt->pfnMouseNotifyCallback = NULL; + pDevExt->pvMouseNotifyCallbackArg = NULL; + pDevExt->pReqGuestHeartbeat = NULL; + + pDevExt->fFixedEvents = fFixedEvents; + vgdrvBitUsageTrackerClear(&pDevExt->EventFilterTracker); + pDevExt->fEventFilterHost = UINT32_MAX; /* forces a report */ + + vgdrvBitUsageTrackerClear(&pDevExt->MouseStatusTracker); + pDevExt->fMouseStatusHost = UINT32_MAX; /* forces a report */ + + pDevExt->fAcquireModeGuestCaps = 0; + pDevExt->fSetModeGuestCaps = 0; + pDevExt->fAcquiredGuestCaps = 0; + vgdrvBitUsageTrackerClear(&pDevExt->SetGuestCapsTracker); + pDevExt->fGuestCapsHost = UINT32_MAX; /* forces a report */ + + /* + * If there is an MMIO region validate the version and size. + */ + if (pvMMIOBase) + { + VMMDevMemory *pVMMDev = (VMMDevMemory *)pvMMIOBase; + Assert(cbMMIO); + if ( pVMMDev->u32Version == VMMDEV_MEMORY_VERSION + && pVMMDev->u32Size >= 32 + && pVMMDev->u32Size <= cbMMIO) + { + pDevExt->pVMMDevMemory = pVMMDev; + Log(("VGDrvCommonInitDevExt: VMMDevMemory: mapping=%p size=%#RX32 (%#RX32) version=%#RX32\n", + pVMMDev, pVMMDev->u32Size, cbMMIO, pVMMDev->u32Version)); + } + else /* try live without it. */ + LogRel(("VGDrvCommonInitDevExt: Bogus VMMDev memory; u32Version=%RX32 (expected %RX32) u32Size=%RX32 (expected <= %RX32)\n", + pVMMDev->u32Version, VMMDEV_MEMORY_VERSION, pVMMDev->u32Size, cbMMIO)); + } + + /* + * Create the wait and session spinlocks as well as the ballooning mutex. + */ + rc = RTSpinlockCreate(&pDevExt->EventSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxGuestEvent"); + if (RT_SUCCESS(rc)) + rc = RTSpinlockCreate(&pDevExt->SessionSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxGuestSession"); + if (RT_FAILURE(rc)) + { + LogRel(("VGDrvCommonInitDevExt: failed to create spinlock, rc=%Rrc!\n", rc)); + if (pDevExt->EventSpinlock != NIL_RTSPINLOCK) + RTSpinlockDestroy(pDevExt->EventSpinlock); + return rc; + } + + rc = RTSemFastMutexCreate(&pDevExt->MemBalloon.hMtx); + if (RT_FAILURE(rc)) + { + LogRel(("VGDrvCommonInitDevExt: failed to create mutex, rc=%Rrc!\n", rc)); + RTSpinlockDestroy(pDevExt->SessionSpinlock); + RTSpinlockDestroy(pDevExt->EventSpinlock); + return rc; + } + + /* + * Initialize the guest library and report the guest info back to VMMDev, + * set the interrupt control filter mask, and fixate the guest mappings + * made by the VMM. + */ + rc = VbglR0InitPrimary(pDevExt->IOPortBase, (VMMDevMemory *)pDevExt->pVMMDevMemory); + if (RT_SUCCESS(rc)) + { + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pDevExt->pIrqAckEvents, sizeof(VMMDevEvents), VMMDevReq_AcknowledgeEvents); + if (RT_SUCCESS(rc)) + { + pDevExt->PhysIrqAckEvents = VbglR0PhysHeapGetPhysAddr(pDevExt->pIrqAckEvents); + Assert(pDevExt->PhysIrqAckEvents != 0); + + rc = vgdrvReportGuestInfo(enmOSType); + if (RT_SUCCESS(rc)) + { + /* + * Set the fixed event and make sure the host doesn't have any lingering + * the guest capabilities or mouse status bits set. + */ + rc = vgdrvResetEventFilterOnHost(pDevExt, pDevExt->fFixedEvents); + if (RT_SUCCESS(rc)) + { + rc = vgdrvResetCapabilitiesOnHost(pDevExt); + if (RT_SUCCESS(rc)) + { + rc = vgdrvResetMouseStatusOnHost(pDevExt); + if (RT_SUCCESS(rc)) + { + /* + * Initialize stuff which may fail without requiring the driver init to fail. + */ + vgdrvInitFixateGuestMappings(pDevExt); + vgdrvHeartbeatInit(pDevExt); + + /* + * Done! + */ + rc = vgdrvReportDriverStatus(true /* Driver is active */); + if (RT_FAILURE(rc)) + LogRel(("VGDrvCommonInitDevExt: VBoxReportGuestDriverStatus failed, rc=%Rrc\n", rc)); + + LogFlowFunc(("VGDrvCommonInitDevExt: returns success\n")); + return VINF_SUCCESS; + } + LogRel(("VGDrvCommonInitDevExt: failed to clear mouse status: rc=%Rrc\n", rc)); + } + else + LogRel(("VGDrvCommonInitDevExt: failed to clear guest capabilities: rc=%Rrc\n", rc)); + } + else + LogRel(("VGDrvCommonInitDevExt: failed to set fixed event filter: rc=%Rrc\n", rc)); + } + else + LogRel(("VGDrvCommonInitDevExt: vgdrvReportGuestInfo failed: rc=%Rrc\n", rc)); + VbglR0GRFree((VMMDevRequestHeader *)pDevExt->pIrqAckEvents); + } + else + LogRel(("VGDrvCommonInitDevExt: VbglR0GRAlloc failed: rc=%Rrc\n", rc)); + + VbglR0TerminatePrimary(); + } + else + LogRel(("VGDrvCommonInitDevExt: VbglR0InitPrimary failed: rc=%Rrc\n", rc)); + + rc2 = RTSemFastMutexDestroy(pDevExt->MemBalloon.hMtx); AssertRC(rc2); + rc2 = RTSpinlockDestroy(pDevExt->EventSpinlock); AssertRC(rc2); + rc2 = RTSpinlockDestroy(pDevExt->SessionSpinlock); AssertRC(rc2); + +#ifdef VBOX_GUESTDRV_WITH_RELEASE_LOGGER + RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); + RTLogDestroy(RTLogSetDefaultInstance(NULL)); +#endif + return rc; /* (failed) */ +} + + +/** + * Deletes all the items in a wait chain. + * @param pList The head of the chain. + */ +static void vgdrvDeleteWaitList(PRTLISTNODE pList) +{ + while (!RTListIsEmpty(pList)) + { + int rc2; + PVBOXGUESTWAIT pWait = RTListGetFirst(pList, VBOXGUESTWAIT, ListNode); + RTListNodeRemove(&pWait->ListNode); + + rc2 = RTSemEventMultiDestroy(pWait->Event); AssertRC(rc2); + pWait->Event = NIL_RTSEMEVENTMULTI; + pWait->pSession = NULL; + RTMemFree(pWait); + } +} + + +/** + * Destroys the VBoxGuest device extension. + * + * The native code should call this before the driver is loaded, + * but don't call this on shutdown. + * + * @param pDevExt The device extension. + */ +void VGDrvCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt) +{ + int rc2; + Log(("VGDrvCommonDeleteDevExt:\n")); + Log(("VBoxGuest: The additions driver is terminating.\n")); + + /* + * Stop and destroy HB timer and + * disable host heartbeat checking. + */ + if (pDevExt->pHeartbeatTimer) + { + RTTimerDestroy(pDevExt->pHeartbeatTimer); + vgdrvHeartbeatHostConfigure(pDevExt, false); + } + + VbglR0GRFree(pDevExt->pReqGuestHeartbeat); + pDevExt->pReqGuestHeartbeat = NULL; + + /* + * Clean up the bits that involves the host first. + */ + vgdrvTermUnfixGuestMappings(pDevExt); + if (!RTListIsEmpty(&pDevExt->SessionList)) + { + LogRelFunc(("session list not empty!\n")); + RTListInit(&pDevExt->SessionList); + } + /* Update the host flags (mouse status etc) not to reflect this session. */ + pDevExt->fFixedEvents = 0; + vgdrvResetEventFilterOnHost(pDevExt, 0 /*fFixedEvents*/); + vgdrvResetCapabilitiesOnHost(pDevExt); + vgdrvResetMouseStatusOnHost(pDevExt); + + vgdrvCloseMemBalloon(pDevExt, (PVBOXGUESTSESSION)NULL); + + /* + * Cleanup all the other resources. + */ + rc2 = RTSpinlockDestroy(pDevExt->EventSpinlock); AssertRC(rc2); + rc2 = RTSpinlockDestroy(pDevExt->SessionSpinlock); AssertRC(rc2); + rc2 = RTSemFastMutexDestroy(pDevExt->MemBalloon.hMtx); AssertRC(rc2); + + vgdrvDeleteWaitList(&pDevExt->WaitList); +#ifdef VBOX_WITH_HGCM + vgdrvDeleteWaitList(&pDevExt->HGCMWaitList); +#endif +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + vgdrvDeleteWaitList(&pDevExt->WakeUpList); +#endif + vgdrvDeleteWaitList(&pDevExt->WokenUpList); + vgdrvDeleteWaitList(&pDevExt->FreeList); + + VbglR0TerminatePrimary(); + + pDevExt->pVMMDevMemory = NULL; + + pDevExt->IOPortBase = 0; + pDevExt->pIrqAckEvents = NULL; + +#ifdef VBOX_GUESTDRV_WITH_RELEASE_LOGGER + RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); + RTLogDestroy(RTLogSetDefaultInstance(NULL)); +#endif + +} + + +/** + * Creates a VBoxGuest user session. + * + * The native code calls this when a ring-3 client opens the device. + * Use VGDrvCommonCreateKernelSession when a ring-0 client connects. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param ppSession Where to store the session on success. + */ +int VGDrvCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession) +{ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession)); + if (RT_UNLIKELY(!pSession)) + { + LogRel(("VGDrvCommonCreateUserSession: no memory!\n")); + return VERR_NO_MEMORY; + } + + pSession->Process = RTProcSelf(); + pSession->R0Process = RTR0ProcHandleSelf(); + pSession->pDevExt = pDevExt; + RTSpinlockAcquire(pDevExt->SessionSpinlock); + RTListAppend(&pDevExt->SessionList, &pSession->ListNode); + pDevExt->cSessions++; + RTSpinlockRelease(pDevExt->SessionSpinlock); + + *ppSession = pSession; + LogFlow(("VGDrvCommonCreateUserSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n", + pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */ + return VINF_SUCCESS; +} + + +/** + * Creates a VBoxGuest kernel session. + * + * The native code calls this when a ring-0 client connects to the device. + * Use VGDrvCommonCreateUserSession when a ring-3 client opens the device. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param ppSession Where to store the session on success. + */ +int VGDrvCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession) +{ + PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession)); + if (RT_UNLIKELY(!pSession)) + { + LogRel(("VGDrvCommonCreateKernelSession: no memory!\n")); + return VERR_NO_MEMORY; + } + + pSession->Process = NIL_RTPROCESS; + pSession->R0Process = NIL_RTR0PROCESS; + pSession->pDevExt = pDevExt; + RTSpinlockAcquire(pDevExt->SessionSpinlock); + RTListAppend(&pDevExt->SessionList, &pSession->ListNode); + pDevExt->cSessions++; + RTSpinlockRelease(pDevExt->SessionSpinlock); + + *ppSession = pSession; + LogFlow(("VGDrvCommonCreateKernelSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n", + pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */ + return VINF_SUCCESS; +} + + +/** + * Closes a VBoxGuest session. + * + * @param pDevExt The device extension. + * @param pSession The session to close (and free). + */ +void VGDrvCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ +#ifdef VBOX_WITH_HGCM + unsigned i; +#endif + LogFlow(("VGDrvCommonCloseSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n", + pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */ + + RTSpinlockAcquire(pDevExt->SessionSpinlock); + RTListNodeRemove(&pSession->ListNode); + pDevExt->cSessions--; + RTSpinlockRelease(pDevExt->SessionSpinlock); + vgdrvAcquireSessionCapabilities(pDevExt, pSession, 0, UINT32_MAX, VBGL_IOC_AGC_FLAGS_DEFAULT, true /*fSessionTermination*/); + vgdrvSetSessionCapabilities(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, + NULL /*pfSessionCaps*/, NULL /*pfGlobalCaps*/, true /*fSessionTermination*/); + vgdrvSetSessionEventFilter(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/); + vgdrvSetSessionMouseStatus(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/); + + vgdrvIoCtl_CancelAllWaitEvents(pDevExt, pSession); + +#ifdef VBOX_WITH_HGCM + for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++) + if (pSession->aHGCMClientIds[i]) + { + uint32_t idClient = pSession->aHGCMClientIds[i]; + pSession->aHGCMClientIds[i] = 0; + Log(("VGDrvCommonCloseSession: disconnecting client id %#RX32\n", idClient)); + VbglR0HGCMInternalDisconnect(idClient, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT); + } +#endif + + pSession->pDevExt = NULL; + pSession->Process = NIL_RTPROCESS; + pSession->R0Process = NIL_RTR0PROCESS; + vgdrvCloseMemBalloon(pDevExt, pSession); + RTMemFree(pSession); +} + + +/** + * Allocates a wait-for-event entry. + * + * @returns The wait-for-event entry. + * @param pDevExt The device extension. + * @param pSession The session that's allocating this. Can be NULL. + */ +static PVBOXGUESTWAIT vgdrvWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ + /* + * Allocate it one way or the other. + */ + PVBOXGUESTWAIT pWait = RTListGetFirst(&pDevExt->FreeList, VBOXGUESTWAIT, ListNode); + if (pWait) + { + RTSpinlockAcquire(pDevExt->EventSpinlock); + + pWait = RTListGetFirst(&pDevExt->FreeList, VBOXGUESTWAIT, ListNode); + if (pWait) + RTListNodeRemove(&pWait->ListNode); + + RTSpinlockRelease(pDevExt->EventSpinlock); + } + if (!pWait) + { + int rc; + + pWait = (PVBOXGUESTWAIT)RTMemAlloc(sizeof(*pWait)); + if (!pWait) + { + LogRelMax(32, ("vgdrvWaitAlloc: out-of-memory!\n")); + return NULL; + } + + rc = RTSemEventMultiCreate(&pWait->Event); + if (RT_FAILURE(rc)) + { + LogRelMax(32, ("vgdrvWaitAlloc: RTSemEventMultiCreate failed with rc=%Rrc!\n", rc)); + RTMemFree(pWait); + return NULL; + } + + pWait->ListNode.pNext = NULL; + pWait->ListNode.pPrev = NULL; + } + + /* + * Zero members just as an precaution. + */ + pWait->fReqEvents = 0; + pWait->fResEvents = 0; +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + pWait->fPendingWakeUp = false; + pWait->fFreeMe = false; +#endif + pWait->pSession = pSession; +#ifdef VBOX_WITH_HGCM + pWait->pHGCMReq = NULL; +#endif + RTSemEventMultiReset(pWait->Event); + return pWait; +} + + +/** + * Frees the wait-for-event entry. + * + * The caller must own the wait spinlock ! + * The entry must be in a list! + * + * @param pDevExt The device extension. + * @param pWait The wait-for-event entry to free. + */ +static void vgdrvWaitFreeLocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait) +{ + pWait->fReqEvents = 0; + pWait->fResEvents = 0; +#ifdef VBOX_WITH_HGCM + pWait->pHGCMReq = NULL; +#endif +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + Assert(!pWait->fFreeMe); + if (pWait->fPendingWakeUp) + pWait->fFreeMe = true; + else +#endif + { + RTListNodeRemove(&pWait->ListNode); + RTListAppend(&pDevExt->FreeList, &pWait->ListNode); + } +} + + +/** + * Frees the wait-for-event entry. + * + * @param pDevExt The device extension. + * @param pWait The wait-for-event entry to free. + */ +static void vgdrvWaitFreeUnlocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait) +{ + RTSpinlockAcquire(pDevExt->EventSpinlock); + vgdrvWaitFreeLocked(pDevExt, pWait); + RTSpinlockRelease(pDevExt->EventSpinlock); +} + + +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP +/** + * Processes the wake-up list. + * + * All entries in the wake-up list gets signalled and moved to the woken-up + * list. + * At least on Windows this function can be invoked concurrently from + * different VCPUs. So, be thread-safe. + * + * @param pDevExt The device extension. + */ +void VGDrvCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt) +{ + if (!RTListIsEmpty(&pDevExt->WakeUpList)) + { + RTSpinlockAcquire(pDevExt->EventSpinlock); + for (;;) + { + int rc; + PVBOXGUESTWAIT pWait = RTListGetFirst(&pDevExt->WakeUpList, VBOXGUESTWAIT, ListNode); + if (!pWait) + break; + /* Prevent other threads from accessing pWait when spinlock is released. */ + RTListNodeRemove(&pWait->ListNode); + + pWait->fPendingWakeUp = true; + RTSpinlockRelease(pDevExt->EventSpinlock); + + rc = RTSemEventMultiSignal(pWait->Event); + AssertRC(rc); + + RTSpinlockAcquire(pDevExt->EventSpinlock); + Assert(pWait->ListNode.pNext == NULL && pWait->ListNode.pPrev == NULL); + RTListAppend(&pDevExt->WokenUpList, &pWait->ListNode); + pWait->fPendingWakeUp = false; + if (RT_LIKELY(!pWait->fFreeMe)) + { /* likely */ } + else + { + pWait->fFreeMe = false; + vgdrvWaitFreeLocked(pDevExt, pWait); + } + } + RTSpinlockRelease(pDevExt->EventSpinlock); + } +} +#endif /* VBOXGUEST_USE_DEFERRED_WAKE_UP */ + + +/** + * Implements the fast (no input or output) type of IOCtls. + * + * This is currently just a placeholder stub inherited from the support driver code. + * + * @returns VBox status code. + * @param iFunction The IOCtl function number. + * @param pDevExt The device extension. + * @param pSession The session. + */ +int VGDrvCommonIoCtlFast(uintptr_t iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ + LogFlow(("VGDrvCommonIoCtlFast: iFunction=%#x pDevExt=%p pSession=%p\n", iFunction, pDevExt, pSession)); + + NOREF(iFunction); + NOREF(pDevExt); + NOREF(pSession); + return VERR_NOT_SUPPORTED; +} + + +/** + * Gets the driver I/O control interface version, maybe adjusting it for + * backwards compatibility. + * + * The adjusting is currently not implemented as we only have one major I/O + * control interface version out there to support. This is something we will + * implement as needed. + * + * returns IPRT status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param pReq The request info. + */ +static int vgdrvIoCtl_DriverVersionInfo(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCDRIVERVERSIONINFO pReq) +{ + int rc; + LogFlow(("VBGL_IOCTL_DRIVER_VERSION_INFO: uReqVersion=%#x uMinVersion=%#x uReserved1=%#x uReserved2=%#x\n", + pReq->u.In.uReqVersion, pReq->u.In.uMinVersion, pReq->u.In.uReserved1, pReq->u.In.uReserved2)); + RT_NOREF2(pDevExt, pSession); + + /* + * Input validation. + */ + if ( pReq->u.In.uMinVersion <= pReq->u.In.uReqVersion + && RT_HI_U16(pReq->u.In.uMinVersion) == RT_HI_U16(pReq->u.In.uReqVersion)) + { + /* + * Match the version. + * The current logic is very simple, match the major interface version. + */ + if ( pReq->u.In.uMinVersion <= VBGL_IOC_VERSION + && RT_HI_U16(pReq->u.In.uMinVersion) == RT_HI_U16(VBGL_IOC_VERSION)) + rc = VINF_SUCCESS; + else + { + LogRel(("VBGL_IOCTL_DRIVER_VERSION_INFO: Version mismatch. Requested: %#x Min: %#x Current: %#x\n", + pReq->u.In.uReqVersion, pReq->u.In.uMinVersion, VBGL_IOC_VERSION)); + rc = VERR_VERSION_MISMATCH; + } + } + else + { + LogRel(("VBGL_IOCTL_DRIVER_VERSION_INFO: uMinVersion=%#x uMaxVersion=%#x doesn't match!\n", + pReq->u.In.uMinVersion, pReq->u.In.uReqVersion)); + rc = VERR_INVALID_PARAMETER; + } + + pReq->u.Out.uSessionVersion = RT_SUCCESS(rc) ? VBGL_IOC_VERSION : UINT32_MAX; + pReq->u.Out.uDriverVersion = VBGL_IOC_VERSION; + pReq->u.Out.uDriverRevision = VBOX_SVN_REV; + pReq->u.Out.uReserved1 = 0; + pReq->u.Out.uReserved2 = 0; + return rc; +} + + +/** + * Similar to vgdrvIoCtl_DriverVersionInfo, except its for IDC. + * + * returns IPRT status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param pReq The request info. + */ +static int vgdrvIoCtl_IdcConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCIDCCONNECT pReq) +{ + int rc; + LogFlow(("VBGL_IOCTL_IDC_CONNECT: u32MagicCookie=%#x uReqVersion=%#x uMinVersion=%#x uReserved=%#x\n", + pReq->u.In.u32MagicCookie, pReq->u.In.uReqVersion, pReq->u.In.uMinVersion, pReq->u.In.uReserved)); + Assert(pSession != NULL); + RT_NOREF(pDevExt); + + /* + * Input validation. + */ + if (pReq->u.In.u32MagicCookie == VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE) + { + if ( pReq->u.In.uMinVersion <= pReq->u.In.uReqVersion + && RT_HI_U16(pReq->u.In.uMinVersion) == RT_HI_U16(pReq->u.In.uReqVersion)) + { + /* + * Match the version. + * The current logic is very simple, match the major interface version. + */ + if ( pReq->u.In.uMinVersion <= VBGL_IOC_VERSION + && RT_HI_U16(pReq->u.In.uMinVersion) == RT_HI_U16(VBGL_IOC_VERSION)) + { + pReq->u.Out.pvSession = pSession; + pReq->u.Out.uSessionVersion = VBGL_IOC_VERSION; + pReq->u.Out.uDriverVersion = VBGL_IOC_VERSION; + pReq->u.Out.uDriverRevision = VBOX_SVN_REV; + pReq->u.Out.uReserved1 = 0; + pReq->u.Out.pvReserved2 = NULL; + return VINF_SUCCESS; + + } + LogRel(("VBGL_IOCTL_IDC_CONNECT: Version mismatch. Requested: %#x Min: %#x Current: %#x\n", + pReq->u.In.uReqVersion, pReq->u.In.uMinVersion, VBGL_IOC_VERSION)); + rc = VERR_VERSION_MISMATCH; + } + else + { + LogRel(("VBGL_IOCTL_IDC_CONNECT: uMinVersion=%#x uMaxVersion=%#x doesn't match!\n", + pReq->u.In.uMinVersion, pReq->u.In.uReqVersion)); + rc = VERR_INVALID_PARAMETER; + } + + pReq->u.Out.pvSession = NULL; + pReq->u.Out.uSessionVersion = UINT32_MAX; + pReq->u.Out.uDriverVersion = VBGL_IOC_VERSION; + pReq->u.Out.uDriverRevision = VBOX_SVN_REV; + pReq->u.Out.uReserved1 = 0; + pReq->u.Out.pvReserved2 = NULL; + } + else + { + LogRel(("VBGL_IOCTL_IDC_CONNECT: u32MagicCookie=%#x expected %#x!\n", + pReq->u.In.u32MagicCookie, VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE)); + rc = VERR_INVALID_PARAMETER; + } + return rc; +} + + +/** + * Counterpart to vgdrvIoCtl_IdcConnect, destroys the session. + * + * returns IPRT status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param pReq The request info. + */ +static int vgdrvIoCtl_IdcDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCIDCDISCONNECT pReq) +{ + LogFlow(("VBGL_IOCTL_IDC_DISCONNECT: pvSession=%p vs pSession=%p\n", pReq->u.In.pvSession, pSession)); + RT_NOREF(pDevExt); + Assert(pSession != NULL); + + if (pReq->u.In.pvSession == pSession) + { + VGDrvCommonCloseSession(pDevExt, pSession); + return VINF_SUCCESS; + } + LogRel(("VBGL_IOCTL_IDC_DISCONNECT: In.pvSession=%p is not equal to pSession=%p!\n", pReq->u.In.pvSession, pSession)); + return VERR_INVALID_PARAMETER; +} + + +/** + * Return the VMM device I/O info. + * + * returns IPRT status code. + * @param pDevExt The device extension. + * @param pInfo The request info. + * @note Ring-0 only, caller checked. + */ +static int vgdrvIoCtl_GetVMMDevIoInfo(PVBOXGUESTDEVEXT pDevExt, PVBGLIOCGETVMMDEVIOINFO pInfo) +{ + LogFlow(("VBGL_IOCTL_GET_VMMDEV_IO_INFO\n")); + + pInfo->u.Out.IoPort = pDevExt->IOPortBase; + pInfo->u.Out.pvVmmDevMapping = pDevExt->pVMMDevMemory; + pInfo->u.Out.auPadding[0] = 0; +#if HC_ARCH_BITS != 32 + pInfo->u.Out.auPadding[1] = 0; + pInfo->u.Out.auPadding[2] = 0; +#endif + return VINF_SUCCESS; +} + + +/** + * Set the callback for the kernel mouse handler. + * + * returns IPRT status code. + * @param pDevExt The device extension. + * @param pNotify The new callback information. + */ +int vgdrvIoCtl_SetMouseNotifyCallback(PVBOXGUESTDEVEXT pDevExt, PVBGLIOCSETMOUSENOTIFYCALLBACK pNotify) +{ + LogFlow(("VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: pfnNotify=%p pvUser=%p\n", pNotify->u.In.pfnNotify, pNotify->u.In.pvUser)); + +#ifdef VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT + VGDrvNativeSetMouseNotifyCallback(pDevExt, pNotify); +#else + RTSpinlockAcquire(pDevExt->EventSpinlock); + pDevExt->pfnMouseNotifyCallback = pNotify->u.In.pfnNotify; + pDevExt->pvMouseNotifyCallbackArg = pNotify->u.In.pvUser; + RTSpinlockRelease(pDevExt->EventSpinlock); +#endif + return VINF_SUCCESS; +} + + +/** + * Worker vgdrvIoCtl_WaitEvent. + * + * The caller enters the spinlock, we leave it. + * + * @returns VINF_SUCCESS if we've left the spinlock and can return immediately. + */ +DECLINLINE(int) vbdgCheckWaitEventCondition(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + PVBGLIOCWAITFOREVENTS pInfo, int iEvent, const uint32_t fReqEvents) +{ + uint32_t fMatches = pDevExt->f32PendingEvents & fReqEvents; + if (fMatches & VBOXGUEST_ACQUIRE_STYLE_EVENTS) + fMatches &= vgdrvGetAllowedEventMaskForSession(pDevExt, pSession); + if (fMatches || pSession->fPendingCancelWaitEvents) + { + ASMAtomicAndU32(&pDevExt->f32PendingEvents, ~fMatches); + RTSpinlockRelease(pDevExt->EventSpinlock); + + pInfo->u.Out.fEvents = fMatches; + if (fReqEvents & ~((uint32_t)1 << iEvent)) + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns %#x\n", pInfo->u.Out.fEvents)); + else + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns %#x/%d\n", pInfo->u.Out.fEvents, iEvent)); + pSession->fPendingCancelWaitEvents = false; + return VINF_SUCCESS; + } + + RTSpinlockRelease(pDevExt->EventSpinlock); + return VERR_TIMEOUT; +} + + +static int vgdrvIoCtl_WaitForEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + PVBGLIOCWAITFOREVENTS pInfo, bool fInterruptible) +{ + uint32_t const cMsTimeout = pInfo->u.In.cMsTimeOut; + const uint32_t fReqEvents = pInfo->u.In.fEvents; + uint32_t fResEvents; + int iEvent; + PVBOXGUESTWAIT pWait; + int rc; + + pInfo->u.Out.fEvents = 0; /* Note! This overwrites pInfo->u.In.* fields! */ + + /* + * Copy and verify the input mask. + */ + iEvent = ASMBitFirstSetU32(fReqEvents) - 1; + if (RT_UNLIKELY(iEvent < 0)) + { + LogRel(("VBOXGUEST_IOCTL_WAITEVENT: Invalid input mask %#x!!\n", fReqEvents)); + return VERR_INVALID_PARAMETER; + } + + /* + * Check the condition up front, before doing the wait-for-event allocations. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + rc = vbdgCheckWaitEventCondition(pDevExt, pSession, pInfo, iEvent, fReqEvents); + if (rc == VINF_SUCCESS) + return rc; + + if (!cMsTimeout) + { + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns VERR_TIMEOUT\n")); + return VERR_TIMEOUT; + } + + pWait = vgdrvWaitAlloc(pDevExt, pSession); + if (!pWait) + return VERR_NO_MEMORY; + pWait->fReqEvents = fReqEvents; + + /* + * We've got the wait entry now, re-enter the spinlock and check for the condition. + * If the wait condition is met, return. + * Otherwise enter into the list and go to sleep waiting for the ISR to signal us. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + RTListAppend(&pDevExt->WaitList, &pWait->ListNode); + rc = vbdgCheckWaitEventCondition(pDevExt, pSession, pInfo, iEvent, fReqEvents); + if (rc == VINF_SUCCESS) + { + vgdrvWaitFreeUnlocked(pDevExt, pWait); + return rc; + } + + if (fInterruptible) + rc = RTSemEventMultiWaitNoResume(pWait->Event, cMsTimeout == UINT32_MAX ? RT_INDEFINITE_WAIT : cMsTimeout); + else + rc = RTSemEventMultiWait(pWait->Event, cMsTimeout == UINT32_MAX ? RT_INDEFINITE_WAIT : cMsTimeout); + + /* + * There is one special case here and that's when the semaphore is + * destroyed upon device driver unload. This shouldn't happen of course, + * but in case it does, just get out of here ASAP. + */ + if (rc == VERR_SEM_DESTROYED) + return rc; + + /* + * Unlink the wait item and dispose of it. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + fResEvents = pWait->fResEvents; + vgdrvWaitFreeLocked(pDevExt, pWait); + RTSpinlockRelease(pDevExt->EventSpinlock); + + /* + * Now deal with the return code. + */ + if ( fResEvents + && fResEvents != UINT32_MAX) + { + pInfo->u.Out.fEvents = fResEvents; + if (fReqEvents & ~((uint32_t)1 << iEvent)) + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns %#x\n", pInfo->u.Out.fEvents)); + else + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns %#x/%d\n", pInfo->u.Out.fEvents, iEvent)); + rc = VINF_SUCCESS; + } + else if ( fResEvents == UINT32_MAX + || rc == VERR_INTERRUPTED) + { + rc = VERR_INTERRUPTED; + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns VERR_INTERRUPTED\n")); + } + else if (rc == VERR_TIMEOUT) + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns VERR_TIMEOUT (2)\n")); + else + { + if (RT_SUCCESS(rc)) + { + LogRelMax(32, ("VBOXGUEST_IOCTL_WAITEVENT: returns %Rrc but no events!\n", rc)); + rc = VERR_INTERNAL_ERROR; + } + LogFlow(("VBOXGUEST_IOCTL_WAITEVENT: returns %Rrc\n", rc)); + } + + return rc; +} + + +/** @todo the semantics of this IoCtl have been tightened, so that no calls to + * VBOXGUEST_IOCTL_WAITEVENT are allowed in a session after it has been + * called. Change the code to make calls to VBOXGUEST_IOCTL_WAITEVENT made + * after that to return VERR_INTERRUPTED or something appropriate. */ +static int vgdrvIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ + PVBOXGUESTWAIT pWait; + PVBOXGUESTWAIT pSafe; + int rc = 0; + /* Was as least one WAITEVENT in process for this session? If not we + * set a flag that the next call should be interrupted immediately. This + * is needed so that a user thread can reliably interrupt another one in a + * WAITEVENT loop. */ + bool fCancelledOne = false; + + LogFlow(("VBOXGUEST_IOCTL_CANCEL_ALL_WAITEVENTS\n")); + + /* + * Walk the event list and wake up anyone with a matching session. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + RTListForEachSafe(&pDevExt->WaitList, pWait, pSafe, VBOXGUESTWAIT, ListNode) + { + if (pWait->pSession == pSession) + { + fCancelledOne = true; + pWait->fResEvents = UINT32_MAX; + RTListNodeRemove(&pWait->ListNode); +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + RTListAppend(&pDevExt->WakeUpList, &pWait->ListNode); +#else + rc |= RTSemEventMultiSignal(pWait->Event); + RTListAppend(&pDevExt->WokenUpList, &pWait->ListNode); +#endif + } + } + if (!fCancelledOne) + pSession->fPendingCancelWaitEvents = true; + RTSpinlockRelease(pDevExt->EventSpinlock); + Assert(rc == 0); + NOREF(rc); + +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + VGDrvCommonWaitDoWakeUps(pDevExt); +#endif + + return VINF_SUCCESS; +} + + +/** + * Checks if the VMM request is allowed in the context of the given session. + * + * @returns VINF_SUCCESS or VERR_PERMISSION_DENIED. + * @param pDevExt The device extension. + * @param pSession The calling session. + * @param enmType The request type. + * @param pReqHdr The request. + */ +static int vgdrvCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VMMDevRequestType enmType, + VMMDevRequestHeader const *pReqHdr) +{ + /* + * Categorize the request being made. + */ + /** @todo This need quite some more work! */ + enum + { + kLevel_Invalid, kLevel_NoOne, kLevel_OnlyVBoxGuest, kLevel_OnlyKernel, kLevel_TrustedUsers, kLevel_AllUsers + } enmRequired; + RT_NOREF1(pDevExt); + + switch (enmType) + { + /* + * Deny access to anything we don't know or provide specialized I/O controls for. + */ +#ifdef VBOX_WITH_HGCM + case VMMDevReq_HGCMConnect: + case VMMDevReq_HGCMDisconnect: +# ifdef VBOX_WITH_64_BITS_GUESTS + case VMMDevReq_HGCMCall32: + case VMMDevReq_HGCMCall64: +# else + case VMMDevReq_HGCMCall: +# endif /* VBOX_WITH_64_BITS_GUESTS */ + case VMMDevReq_HGCMCancel: + case VMMDevReq_HGCMCancel2: +#endif /* VBOX_WITH_HGCM */ + case VMMDevReq_SetGuestCapabilities: + default: + enmRequired = kLevel_NoOne; + break; + + /* + * There are a few things only this driver can do (and it doesn't use + * the VMMRequst I/O control route anyway, but whatever). + */ + case VMMDevReq_ReportGuestInfo: + case VMMDevReq_ReportGuestInfo2: + case VMMDevReq_GetHypervisorInfo: + case VMMDevReq_SetHypervisorInfo: + case VMMDevReq_RegisterPatchMemory: + case VMMDevReq_DeregisterPatchMemory: + case VMMDevReq_GetMemBalloonChangeRequest: + enmRequired = kLevel_OnlyVBoxGuest; + break; + + /* + * Trusted users apps only. + */ + case VMMDevReq_QueryCredentials: + case VMMDevReq_ReportCredentialsJudgement: + case VMMDevReq_RegisterSharedModule: + case VMMDevReq_UnregisterSharedModule: + case VMMDevReq_WriteCoreDump: + case VMMDevReq_GetCpuHotPlugRequest: + case VMMDevReq_SetCpuHotPlugStatus: + case VMMDevReq_CheckSharedModules: + case VMMDevReq_GetPageSharingStatus: + case VMMDevReq_DebugIsPageShared: + case VMMDevReq_ReportGuestStats: + case VMMDevReq_ReportGuestUserState: + case VMMDevReq_GetStatisticsChangeRequest: + case VMMDevReq_ChangeMemBalloon: + enmRequired = kLevel_TrustedUsers; + break; + + /* + * Anyone. + */ + case VMMDevReq_GetMouseStatus: + case VMMDevReq_SetMouseStatus: + case VMMDevReq_SetPointerShape: + case VMMDevReq_GetHostVersion: + case VMMDevReq_Idle: + case VMMDevReq_GetHostTime: + case VMMDevReq_SetPowerStatus: + case VMMDevReq_AcknowledgeEvents: + case VMMDevReq_CtlGuestFilterMask: + case VMMDevReq_ReportGuestStatus: + case VMMDevReq_GetDisplayChangeRequest: + case VMMDevReq_VideoModeSupported: + case VMMDevReq_GetHeightReduction: + case VMMDevReq_GetDisplayChangeRequest2: + case VMMDevReq_VideoModeSupported2: + case VMMDevReq_VideoAccelEnable: + case VMMDevReq_VideoAccelFlush: + case VMMDevReq_VideoSetVisibleRegion: + case VMMDevReq_GetDisplayChangeRequestEx: + case VMMDevReq_GetSeamlessChangeRequest: + case VMMDevReq_GetVRDPChangeRequest: + case VMMDevReq_LogString: + case VMMDevReq_GetSessionId: + enmRequired = kLevel_AllUsers; + break; + + /* + * Depends on the request parameters... + */ + /** @todo this have to be changed into an I/O control and the facilities + * tracked in the session so they can automatically be failed when the + * session terminates without reporting the new status. + * + * The information presented by IGuest is not reliable without this! */ + case VMMDevReq_ReportGuestCapabilities: + switch (((VMMDevReportGuestStatus const *)pReqHdr)->guestStatus.facility) + { + case VBoxGuestFacilityType_All: + case VBoxGuestFacilityType_VBoxGuestDriver: + enmRequired = kLevel_OnlyVBoxGuest; + break; + case VBoxGuestFacilityType_VBoxService: + enmRequired = kLevel_TrustedUsers; + break; + case VBoxGuestFacilityType_VBoxTrayClient: + case VBoxGuestFacilityType_Seamless: + case VBoxGuestFacilityType_Graphics: + default: + enmRequired = kLevel_AllUsers; + break; + } + break; + } + + /* + * Check against the session. + */ + switch (enmRequired) + { + default: + case kLevel_NoOne: + break; + case kLevel_OnlyVBoxGuest: + case kLevel_OnlyKernel: + if (pSession->R0Process == NIL_RTR0PROCESS) + return VINF_SUCCESS; + break; + case kLevel_TrustedUsers: + if (pSession->fUserSession) + break; + case kLevel_AllUsers: + return VINF_SUCCESS; + } + + return VERR_PERMISSION_DENIED; +} + +static int vgdrvIoCtl_VMMDevRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + VMMDevRequestHeader *pReqHdr, size_t cbData) +{ + int rc; + VMMDevRequestHeader *pReqCopy; + + /* + * Validate the header and request size. + */ + const VMMDevRequestType enmType = pReqHdr->requestType; + const uint32_t cbReq = pReqHdr->size; + const uint32_t cbMinSize = (uint32_t)vmmdevGetRequestSize(enmType); + + LogFlow(("VBOXGUEST_IOCTL_VMMREQUEST: type %d\n", pReqHdr->requestType)); + + if (cbReq < cbMinSize) + { + LogRel(("VBOXGUEST_IOCTL_VMMREQUEST: invalid hdr size %#x, expected >= %#x; type=%#x!!\n", + cbReq, cbMinSize, enmType)); + return VERR_INVALID_PARAMETER; + } + if (cbReq > cbData) + { + LogRel(("VBOXGUEST_IOCTL_VMMREQUEST: invalid size %#x, expected >= %#x (hdr); type=%#x!!\n", + cbData, cbReq, enmType)); + return VERR_INVALID_PARAMETER; + } + rc = VbglGR0Verify(pReqHdr, cbData); + if (RT_FAILURE(rc)) + { + Log(("VBOXGUEST_IOCTL_VMMREQUEST: invalid header: size %#x, expected >= %#x (hdr); type=%#x; rc=%Rrc!!\n", + cbData, cbReq, enmType, rc)); + return rc; + } + + rc = vgdrvCheckIfVmmReqIsAllowed(pDevExt, pSession, enmType, pReqHdr); + if (RT_FAILURE(rc)) + { + Log(("VBOXGUEST_IOCTL_VMMREQUEST: Operation not allowed! type=%#x rc=%Rrc\n", enmType, rc)); + return rc; + } + + /* + * Make a copy of the request in the physical memory heap so + * the VBoxGuestLibrary can more easily deal with the request. + * (This is really a waste of time since the OS or the OS specific + * code has already buffered or locked the input/output buffer, but + * it does makes things a bit simpler wrt to phys address.) + */ + rc = VbglR0GRAlloc(&pReqCopy, cbReq, enmType); + if (RT_FAILURE(rc)) + { + Log(("VBOXGUEST_IOCTL_VMMREQUEST: failed to allocate %u (%#x) bytes to cache the request. rc=%Rrc!!\n", + cbReq, cbReq, rc)); + return rc; + } + memcpy(pReqCopy, pReqHdr, cbReq); + Assert(pReqCopy->reserved1 == cbReq); + pReqCopy->reserved1 = 0; /* VGDrvCommonIoCtl or caller sets cbOut, so clear it. */ + + if (enmType == VMMDevReq_GetMouseStatus) /* clear poll condition. */ + pSession->u32MousePosChangedSeq = ASMAtomicUoReadU32(&pDevExt->u32MousePosChangedSeq); + + rc = VbglR0GRPerform(pReqCopy); + if ( RT_SUCCESS(rc) + && RT_SUCCESS(pReqCopy->rc)) + { + Assert(rc != VINF_HGCM_ASYNC_EXECUTE); + Assert(pReqCopy->rc != VINF_HGCM_ASYNC_EXECUTE); + + memcpy(pReqHdr, pReqCopy, cbReq); + pReqHdr->reserved1 = cbReq; /* preserve cbOut */ + } + else if (RT_FAILURE(rc)) + Log(("VBOXGUEST_IOCTL_VMMREQUEST: VbglR0GRPerform - rc=%Rrc!\n", rc)); + else + { + Log(("VBOXGUEST_IOCTL_VMMREQUEST: request execution failed; VMMDev rc=%Rrc!\n", pReqCopy->rc)); + rc = pReqCopy->rc; + } + + VbglR0GRFree(pReqCopy); + return rc; +} + + +#ifdef VBOX_WITH_HGCM + +AssertCompile(RT_INDEFINITE_WAIT == (uint32_t)RT_INDEFINITE_WAIT); /* assumed by code below */ + +/** Worker for vgdrvHgcmAsyncWaitCallback*. */ +static int vgdrvHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHdr, PVBOXGUESTDEVEXT pDevExt, + bool fInterruptible, uint32_t cMillies) +{ + int rc; + + /* + * Check to see if the condition was met by the time we got here. + * + * We create a simple poll loop here for dealing with out-of-memory + * conditions since the caller isn't necessarily able to deal with + * us returning too early. + */ + PVBOXGUESTWAIT pWait; + for (;;) + { + RTSpinlockAcquire(pDevExt->EventSpinlock); + if ((pHdr->fu32Flags & VBOX_HGCM_REQ_DONE) != 0) + { + RTSpinlockRelease(pDevExt->EventSpinlock); + return VINF_SUCCESS; + } + RTSpinlockRelease(pDevExt->EventSpinlock); + + pWait = vgdrvWaitAlloc(pDevExt, NULL); + if (pWait) + break; + if (fInterruptible) + return VERR_INTERRUPTED; + RTThreadSleep(1); + } + pWait->fReqEvents = VMMDEV_EVENT_HGCM; + pWait->pHGCMReq = pHdr; + + /* + * Re-enter the spinlock and re-check for the condition. + * If the condition is met, return. + * Otherwise link us into the HGCM wait list and go to sleep. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + RTListAppend(&pDevExt->HGCMWaitList, &pWait->ListNode); + if ((pHdr->fu32Flags & VBOX_HGCM_REQ_DONE) != 0) + { + vgdrvWaitFreeLocked(pDevExt, pWait); + RTSpinlockRelease(pDevExt->EventSpinlock); + return VINF_SUCCESS; + } + RTSpinlockRelease(pDevExt->EventSpinlock); + + if (fInterruptible) + rc = RTSemEventMultiWaitNoResume(pWait->Event, cMillies); + else + rc = RTSemEventMultiWait(pWait->Event, cMillies); + if (rc == VERR_SEM_DESTROYED) + return rc; + + /* + * Unlink, free and return. + */ + if ( RT_FAILURE(rc) + && rc != VERR_TIMEOUT + && ( !fInterruptible + || rc != VERR_INTERRUPTED)) + LogRel(("vgdrvHgcmAsyncWaitCallback: wait failed! %Rrc\n", rc)); + + vgdrvWaitFreeUnlocked(pDevExt, pWait); + return rc; +} + + +/** + * This is a callback for dealing with async waits. + * + * It operates in a manner similar to vgdrvIoCtl_WaitEvent. + */ +static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User) +{ + PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser; + LogFlow(("vgdrvHgcmAsyncWaitCallback: requestType=%d\n", pHdr->header.requestType)); + return vgdrvHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt, + false /* fInterruptible */, u32User /* cMillies */); +} + + +/** + * This is a callback for dealing with async waits with a timeout. + * + * It operates in a manner similar to vgdrvIoCtl_WaitEvent. + */ +static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallbackInterruptible(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User) +{ + PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser; + LogFlow(("vgdrvHgcmAsyncWaitCallbackInterruptible: requestType=%d\n", pHdr->header.requestType)); + return vgdrvHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt, + true /* fInterruptible */, u32User /* cMillies */); +} + + +static int vgdrvIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCHGCMCONNECT pInfo) +{ + int rc; + HGCMCLIENTID idClient = 0; + + /* + * The VbglHGCMConnect call will invoke the callback if the HGCM + * call is performed in an ASYNC fashion. The function is not able + * to deal with cancelled requests. + */ + Log(("VBOXGUEST_IOCTL_HGCM_CONNECT: %.128s\n", + pInfo->u.In.Loc.type == VMMDevHGCMLoc_LocalHost || pInfo->u.In.Loc.type == VMMDevHGCMLoc_LocalHost_Existing + ? pInfo->u.In.Loc.u.host.achName : "")); + + rc = VbglR0HGCMInternalConnect(&pInfo->u.In.Loc, &idClient, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT); + Log(("VBOXGUEST_IOCTL_HGCM_CONNECT: idClient=%RX32 (rc=%Rrc)\n", idClient, rc)); + if (RT_SUCCESS(rc)) + { + /* + * Append the client id to the client id table. + * If the table has somehow become filled up, we'll disconnect the session. + */ + unsigned i; + RTSpinlockAcquire(pDevExt->SessionSpinlock); + for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++) + if (!pSession->aHGCMClientIds[i]) + { + pSession->aHGCMClientIds[i] = idClient; + break; + } + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (i >= RT_ELEMENTS(pSession->aHGCMClientIds)) + { + LogRelMax(32, ("VBOXGUEST_IOCTL_HGCM_CONNECT: too many HGCMConnect calls for one session!\n")); + VbglR0HGCMInternalDisconnect(idClient, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT); + + pInfo->u.Out.idClient = 0; + return VERR_TOO_MANY_OPEN_FILES; + } + } + pInfo->u.Out.idClient = idClient; + return rc; +} + + +static int vgdrvIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCHGCMDISCONNECT pInfo) +{ + /* + * Validate the client id and invalidate its entry while we're in the call. + */ + int rc; + const uint32_t idClient = pInfo->u.In.idClient; + unsigned i; + RTSpinlockAcquire(pDevExt->SessionSpinlock); + for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++) + if (pSession->aHGCMClientIds[i] == idClient) + { + pSession->aHGCMClientIds[i] = UINT32_MAX; + break; + } + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (i >= RT_ELEMENTS(pSession->aHGCMClientIds)) + { + LogRelMax(32, ("VBOXGUEST_IOCTL_HGCM_DISCONNECT: idClient=%RX32\n", idClient)); + return VERR_INVALID_HANDLE; + } + + /* + * The VbglHGCMConnect call will invoke the callback if the HGCM + * call is performed in an ASYNC fashion. The function is not able + * to deal with cancelled requests. + */ + Log(("VBOXGUEST_IOCTL_HGCM_DISCONNECT: idClient=%RX32\n", idClient)); + rc = VbglR0HGCMInternalDisconnect(idClient, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT); + LogFlow(("VBOXGUEST_IOCTL_HGCM_DISCONNECT: rc=%Rrc\n", rc)); + + /* Update the client id array according to the result. */ + RTSpinlockAcquire(pDevExt->SessionSpinlock); + if (pSession->aHGCMClientIds[i] == UINT32_MAX) + pSession->aHGCMClientIds[i] = RT_SUCCESS(rc) ? 0 : idClient; + RTSpinlockRelease(pDevExt->SessionSpinlock); + + return rc; +} + + +static int vgdrvIoCtl_HGCMCallInner(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCHGCMCALL pInfo, + uint32_t cMillies, bool fInterruptible, bool f32bit, bool fUserData, + size_t cbExtra, size_t cbData) +{ + const uint32_t u32ClientId = pInfo->u32ClientID; + uint32_t fFlags; + size_t cbActual; + unsigned i; + int rc; + + /* + * Some more validations. + */ + if (pInfo->cParms > 4096) /* (Just make sure it doesn't overflow the next check.) */ + { + LogRel(("VBOXGUEST_IOCTL_HGCM_CALL: cParm=%RX32 is not sane\n", pInfo->cParms)); + return VERR_INVALID_PARAMETER; + } + + cbActual = cbExtra + sizeof(*pInfo); +#ifdef RT_ARCH_AMD64 + if (f32bit) + cbActual += pInfo->cParms * sizeof(HGCMFunctionParameter32); + else +#endif + cbActual += pInfo->cParms * sizeof(HGCMFunctionParameter); + if (cbData < cbActual) + { + LogRel(("VBOXGUEST_IOCTL_HGCM_CALL: cbData=%#zx (%zu) required size is %#zx (%zu)\n", + cbData, cbData, cbActual, cbActual)); + return VERR_INVALID_PARAMETER; + } + pInfo->Hdr.cbOut = (uint32_t)cbActual; + + /* + * Validate the client id. + */ + RTSpinlockAcquire(pDevExt->SessionSpinlock); + for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++) + if (pSession->aHGCMClientIds[i] == u32ClientId) + break; + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (RT_UNLIKELY(i >= RT_ELEMENTS(pSession->aHGCMClientIds))) + { + LogRelMax(32, ("VBOXGUEST_IOCTL_HGCM_CALL: Invalid handle. u32Client=%RX32\n", u32ClientId)); + return VERR_INVALID_HANDLE; + } + + /* + * The VbglHGCMCall call will invoke the callback if the HGCM + * call is performed in an ASYNC fashion. This function can + * deal with cancelled requests, so we let user more requests + * be interruptible (should add a flag for this later I guess). + */ + LogFlow(("VBOXGUEST_IOCTL_HGCM_CALL: u32Client=%RX32\n", pInfo->u32ClientID)); + fFlags = !fUserData && pSession->R0Process == NIL_RTR0PROCESS ? VBGLR0_HGCMCALL_F_KERNEL : VBGLR0_HGCMCALL_F_USER; + uint32_t cbInfo = (uint32_t)(cbData - cbExtra); +#ifdef RT_ARCH_AMD64 + if (f32bit) + { + if (fInterruptible) + rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies); + else + rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallback, pDevExt, cMillies); + } + else +#endif + { + if (fInterruptible) + rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies); + else + rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallback, pDevExt, cMillies); + } + if (RT_SUCCESS(rc)) + { + rc = pInfo->Hdr.rc; + LogFlow(("VBOXGUEST_IOCTL_HGCM_CALL: result=%Rrc\n", rc)); + } + else + { + if ( rc != VERR_INTERRUPTED + && rc != VERR_TIMEOUT) + LogRelMax(32, ("VBOXGUEST_IOCTL_HGCM_CALL: %s Failed. rc=%Rrc (Hdr.rc=%Rrc).\n", f32bit ? "32" : "64", rc, pInfo->Hdr.rc)); + else + Log(("VBOXGUEST_IOCTL_HGCM_CALL: %s Failed. rc=%Rrc (Hdr.rc=%Rrc).\n", f32bit ? "32" : "64", rc, pInfo->Hdr.rc)); + } + return rc; +} + + +static int vgdrvIoCtl_HGCMCallWrapper(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCHGCMCALL pInfo, + bool f32bit, bool fUserData, size_t cbData) +{ + return vgdrvIoCtl_HGCMCallInner(pDevExt, pSession, pInfo, pInfo->cMsTimeout, + pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS, + f32bit, fUserData, 0 /*cbExtra*/, cbData); +} + + +#endif /* VBOX_WITH_HGCM */ + +/** + * Handle VBGL_IOCTL_CHECK_BALLOON from R3. + * + * Ask the host for the size of the balloon and try to set it accordingly. If + * this approach fails because it's not supported, return with fHandleInR3 set + * and let the user land supply memory we can lock via the other ioctl. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pSession The session. + * @param pInfo The output buffer. + */ +static int vgdrvIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCCHECKBALLOON pInfo) +{ + VMMDevGetMemBalloonChangeRequest *pReq; + int rc; + + LogFlow(("VBGL_IOCTL_CHECK_BALLOON:\n")); + rc = RTSemFastMutexRequest(pDevExt->MemBalloon.hMtx); + AssertRCReturn(rc, rc); + + /* + * The first user trying to query/change the balloon becomes the + * owner and owns it until the session is closed (vgdrvCloseMemBalloon). + */ + if ( pDevExt->MemBalloon.pOwner != pSession + && pDevExt->MemBalloon.pOwner == NULL) + pDevExt->MemBalloon.pOwner = pSession; + + if (pDevExt->MemBalloon.pOwner == pSession) + { + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(VMMDevGetMemBalloonChangeRequest), VMMDevReq_GetMemBalloonChangeRequest); + if (RT_SUCCESS(rc)) + { + /* + * This is a response to that event. Setting this bit means that + * we request the value from the host and change the guest memory + * balloon according to this value. + */ + pReq->eventAck = VMMDEV_EVENT_BALLOON_CHANGE_REQUEST; + rc = VbglR0GRPerform(&pReq->header); + if (RT_SUCCESS(rc)) + { + Assert(pDevExt->MemBalloon.cMaxChunks == pReq->cPhysMemChunks || pDevExt->MemBalloon.cMaxChunks == 0); + pDevExt->MemBalloon.cMaxChunks = pReq->cPhysMemChunks; + + pInfo->u.Out.cBalloonChunks = pReq->cBalloonChunks; + pInfo->u.Out.fHandleInR3 = false; + pInfo->u.Out.afPadding[0] = false; + pInfo->u.Out.afPadding[1] = false; + pInfo->u.Out.afPadding[2] = false; + + rc = vgdrvSetBalloonSizeKernel(pDevExt, pReq->cBalloonChunks, &pInfo->u.Out.fHandleInR3); + /* Ignore various out of memory failures. */ + if ( rc == VERR_NO_MEMORY + || rc == VERR_NO_PHYS_MEMORY + || rc == VERR_NO_CONT_MEMORY) + rc = VINF_SUCCESS; + } + else + LogRel(("VBGL_IOCTL_CHECK_BALLOON: VbglR0GRPerform failed. rc=%Rrc\n", rc)); + VbglR0GRFree(&pReq->header); + } + } + else + rc = VERR_PERMISSION_DENIED; + + RTSemFastMutexRelease(pDevExt->MemBalloon.hMtx); + LogFlow(("VBGL_IOCTL_CHECK_BALLOON returns %Rrc\n", rc)); + return rc; +} + + +/** + * Handle a request for changing the memory balloon. + * + * @returns VBox status code. + * + * @param pDevExt The device extention. + * @param pSession The session. + * @param pInfo The change request structure (input). + */ +static int vgdrvIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCCHANGEBALLOON pInfo) +{ + int rc; + LogFlow(("VBGL_IOCTL_CHANGE_BALLOON: fInflate=%RTbool u64ChunkAddr=%p\n", pInfo->u.In.fInflate, pInfo->u.In.pvChunk)); + if ( pInfo->u.In.abPadding[0] + || pInfo->u.In.abPadding[1] + || pInfo->u.In.abPadding[2] + || pInfo->u.In.abPadding[3] + || pInfo->u.In.abPadding[4] + || pInfo->u.In.abPadding[5] + || pInfo->u.In.abPadding[6] +#if ARCH_BITS == 32 + || pInfo->u.In.abPadding[7] + || pInfo->u.In.abPadding[8] + || pInfo->u.In.abPadding[9] +#endif + ) + { + Log(("VBGL_IOCTL_CHANGE_BALLOON: Padding isn't all zero: %.*Rhxs\n", sizeof(pInfo->u.In.abPadding), pInfo->u.In.abPadding)); + return VERR_INVALID_PARAMETER; + } + + rc = RTSemFastMutexRequest(pDevExt->MemBalloon.hMtx); + AssertRCReturn(rc, rc); + + if (!pDevExt->MemBalloon.fUseKernelAPI) + { + /* + * The first user trying to query/change the balloon becomes the + * owner and owns it until the session is closed (vgdrvCloseMemBalloon). + */ + if ( pDevExt->MemBalloon.pOwner != pSession + && pDevExt->MemBalloon.pOwner == NULL) + pDevExt->MemBalloon.pOwner = pSession; + + if (pDevExt->MemBalloon.pOwner == pSession) + rc = vgdrvSetBalloonSizeFromUser(pDevExt, pSession, pInfo->u.In.pvChunk, pInfo->u.In.fInflate != false); + else + rc = VERR_PERMISSION_DENIED; + } + else + rc = VERR_PERMISSION_DENIED; + + RTSemFastMutexRelease(pDevExt->MemBalloon.hMtx); + return rc; +} + + +/** + * Handle a request for writing a core dump of the guest on the host. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pInfo The output buffer. + */ +static int vgdrvIoCtl_WriteCoreDump(PVBOXGUESTDEVEXT pDevExt, PVBGLIOCWRITECOREDUMP pInfo) +{ + VMMDevReqWriteCoreDump *pReq = NULL; + int rc; + LogFlow(("VBOXGUEST_IOCTL_WRITE_CORE_DUMP\n")); + RT_NOREF1(pDevExt); + + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_WriteCoreDump); + if (RT_SUCCESS(rc)) + { + pReq->fFlags = pInfo->u.In.fFlags; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + Log(("VBOXGUEST_IOCTL_WRITE_CORE_DUMP: VbglR0GRPerform failed, rc=%Rrc!\n", rc)); + + VbglR0GRFree(&pReq->header); + } + else + Log(("VBOXGUEST_IOCTL_WRITE_CORE_DUMP: failed to allocate %u (%#x) bytes to cache the request. rc=%Rrc!!\n", + sizeof(*pReq), sizeof(*pReq), rc)); + return rc; +} + + +/** + * Guest backdoor logging. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pch The log message (need not be NULL terminated). + * @param cbData Size of the buffer. + * @param fUserSession Copy of VBOXGUESTSESSION::fUserSession for the + * call. True normal user, false root user. + */ +static int vgdrvIoCtl_Log(PVBOXGUESTDEVEXT pDevExt, const char *pch, size_t cbData, bool fUserSession) +{ + if (pDevExt->fLoggingEnabled) + RTLogBackdoorPrintf("%.*s", cbData, pch); + else if (!fUserSession) + LogRel(("%.*s", cbData, pch)); + else + Log(("%.*s", cbData, pch)); + return VINF_SUCCESS; +} + + +/** @name Guest Capabilities, Mouse Status and Event Filter + * @{ + */ + +/** + * Clears a bit usage tracker (init time). + * + * @param pTracker The tracker to clear. + */ +static void vgdrvBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker) +{ + uint32_t iBit; + AssertCompile(sizeof(pTracker->acPerBitUsage) == 32 * sizeof(uint32_t)); + + for (iBit = 0; iBit < 32; iBit++) + pTracker->acPerBitUsage[iBit] = 0; + pTracker->fMask = 0; +} + + +#ifdef VBOX_STRICT +/** + * Checks that pTracker->fMask is correct and that the usage values are within + * the valid range. + * + * @param pTracker The tracker. + * @param cMax Max valid usage value. + * @param pszWhat Identifies the tracker in assertions. + */ +static void vgdrvBitUsageTrackerCheckMask(PCVBOXGUESTBITUSAGETRACER pTracker, uint32_t cMax, const char *pszWhat) +{ + uint32_t fMask = 0; + uint32_t iBit; + AssertCompile(sizeof(pTracker->acPerBitUsage) == 32 * sizeof(uint32_t)); + + for (iBit = 0; iBit < 32; iBit++) + if (pTracker->acPerBitUsage[iBit]) + { + fMask |= RT_BIT_32(iBit); + AssertMsg(pTracker->acPerBitUsage[iBit] <= cMax, + ("%s: acPerBitUsage[%u]=%#x cMax=%#x\n", pszWhat, iBit, pTracker->acPerBitUsage[iBit], cMax)); + } + + AssertMsg(fMask == pTracker->fMask, ("%s: %#x vs %#x\n", pszWhat, fMask, pTracker->fMask)); +} +#endif + + +/** + * Applies a change to the bit usage tracker. + * + * + * @returns true if the mask changed, false if not. + * @param pTracker The bit usage tracker. + * @param fChanged The bits to change. + * @param fPrevious The previous value of the bits. + * @param cMax The max valid usage value for assertions. + * @param pszWhat Identifies the tracker in assertions. + */ +static bool vgdrvBitUsageTrackerChange(PVBOXGUESTBITUSAGETRACER pTracker, uint32_t fChanged, uint32_t fPrevious, + uint32_t cMax, const char *pszWhat) +{ + bool fGlobalChange = false; + AssertCompile(sizeof(pTracker->acPerBitUsage) == 32 * sizeof(uint32_t)); + + while (fChanged) + { + uint32_t const iBit = ASMBitFirstSetU32(fChanged) - 1; + uint32_t const fBitMask = RT_BIT_32(iBit); + Assert(iBit < 32); Assert(fBitMask & fChanged); + + if (fBitMask & fPrevious) + { + pTracker->acPerBitUsage[iBit] -= 1; + AssertMsg(pTracker->acPerBitUsage[iBit] <= cMax, + ("%s: acPerBitUsage[%u]=%#x cMax=%#x\n", pszWhat, iBit, pTracker->acPerBitUsage[iBit], cMax)); + if (pTracker->acPerBitUsage[iBit] == 0) + { + fGlobalChange = true; + pTracker->fMask &= ~fBitMask; + } + } + else + { + pTracker->acPerBitUsage[iBit] += 1; + AssertMsg(pTracker->acPerBitUsage[iBit] > 0 && pTracker->acPerBitUsage[iBit] <= cMax, + ("pTracker->acPerBitUsage[%u]=%#x cMax=%#x\n", pszWhat, iBit, pTracker->acPerBitUsage[iBit], cMax)); + if (pTracker->acPerBitUsage[iBit] == 1) + { + fGlobalChange = true; + pTracker->fMask |= fBitMask; + } + } + + fChanged &= ~fBitMask; + } + +#ifdef VBOX_STRICT + vgdrvBitUsageTrackerCheckMask(pTracker, cMax, pszWhat); +#endif + NOREF(pszWhat); NOREF(cMax); + return fGlobalChange; +} + + +/** + * Init and termination worker for resetting the (host) event filter on the host + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param fFixedEvents Fixed events (init time). + */ +static int vgdrvResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents) +{ + VMMDevCtlGuestFilterMask *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_CtlGuestFilterMask); + if (RT_SUCCESS(rc)) + { + pReq->u32NotMask = UINT32_MAX & ~fFixedEvents; + pReq->u32OrMask = fFixedEvents; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + LogRelFunc(("failed with rc=%Rrc\n", rc)); + VbglR0GRFree(&pReq->header); + } + RT_NOREF1(pDevExt); + return rc; +} + + +/** + * Changes the event filter mask for the given session. + * + * This is called in response to VBGL_IOCTL_CHANGE_FILTER_MASK as well as to do + * session cleanup. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param fOrMask The events to add. + * @param fNotMask The events to remove. + * @param fSessionTermination Set if we're called by the session cleanup code. + * This tweaks the error handling so we perform + * proper session cleanup even if the host + * misbehaves. + * + * @remarks Takes the session spinlock. + */ +static int vgdrvSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination) +{ + VMMDevCtlGuestFilterMask *pReq; + uint32_t fChanged; + uint32_t fPrevious; + int rc; + + /* + * Preallocate a request buffer so we can do all in one go without leaving the spinlock. + */ + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_CtlGuestFilterMask); + if (RT_SUCCESS(rc)) + { /* nothing */ } + else if (!fSessionTermination) + { + LogRel(("vgdrvSetSessionFilterMask: VbglR0GRAlloc failure: %Rrc\n", rc)); + return rc; + } + else + pReq = NULL; /* Ignore failure, we must do session cleanup. */ + + + RTSpinlockAcquire(pDevExt->SessionSpinlock); + + /* + * Apply the changes to the session mask. + */ + fPrevious = pSession->fEventFilter; + pSession->fEventFilter |= fOrMask; + pSession->fEventFilter &= ~fNotMask; + + /* + * If anything actually changed, update the global usage counters. + */ + fChanged = fPrevious ^ pSession->fEventFilter; + LogFlow(("vgdrvSetSessionEventFilter: Session->fEventFilter: %#x -> %#x (changed %#x)\n", + fPrevious, pSession->fEventFilter, fChanged)); + if (fChanged) + { + bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, fPrevious, + pDevExt->cSessions, "EventFilterTracker"); + + /* + * If there are global changes, update the event filter on the host. + */ + if (fGlobalChange || pDevExt->fEventFilterHost == UINT32_MAX) + { + Assert(pReq || fSessionTermination); + if (pReq) + { + pReq->u32OrMask = pDevExt->fFixedEvents | pDevExt->EventFilterTracker.fMask; + if (pReq->u32OrMask == pDevExt->fEventFilterHost) + rc = VINF_SUCCESS; + else + { + pDevExt->fEventFilterHost = pReq->u32OrMask; + pReq->u32NotMask = ~pReq->u32OrMask; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + { + /* + * Failed, roll back (unless it's session termination time). + */ + pDevExt->fEventFilterHost = UINT32_MAX; + if (!fSessionTermination) + { + vgdrvBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, pSession->fEventFilter, + pDevExt->cSessions, "EventFilterTracker"); + pSession->fEventFilter = fPrevious; + } + } + } + } + else + rc = VINF_SUCCESS; + } + } + + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (pReq) + VbglR0GRFree(&pReq->header); + return rc; +} + + +/** + * Handle VBGL_IOCTL_CHANGE_FILTER_MASK. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pSession The session. + * @param pInfo The request. + */ +static int vgdrvIoCtl_ChangeFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCCHANGEFILTERMASK pInfo) +{ + LogFlow(("VBGL_IOCTL_CHANGE_FILTER_MASK: or=%#x not=%#x\n", pInfo->u.In.fOrMask, pInfo->u.In.fNotMask)); + + if ((pInfo->u.In.fOrMask | pInfo->u.In.fNotMask) & ~VMMDEV_EVENT_VALID_EVENT_MASK) + { + Log(("VBGL_IOCTL_CHANGE_FILTER_MASK: or=%#x not=%#x: Invalid masks!\n", pInfo->u.In.fOrMask, pInfo->u.In.fNotMask)); + return VERR_INVALID_PARAMETER; + } + + return vgdrvSetSessionEventFilter(pDevExt, pSession, pInfo->u.In.fOrMask, pInfo->u.In.fNotMask, false /*fSessionTermination*/); +} + + +/** + * Init and termination worker for set mouse feature status to zero on the host. + * + * @returns VBox status code. + * @param pDevExt The device extension. + */ +static int vgdrvResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt) +{ + VMMDevReqMouseStatus *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetMouseStatus); + if (RT_SUCCESS(rc)) + { + pReq->mouseFeatures = 0; + pReq->pointerXPos = 0; + pReq->pointerYPos = 0; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + LogRelFunc(("failed with rc=%Rrc\n", rc)); + VbglR0GRFree(&pReq->header); + } + RT_NOREF1(pDevExt); + return rc; +} + + +/** + * Changes the mouse status mask for the given session. + * + * This is called in response to VBOXGUEST_IOCTL_SET_MOUSE_STATUS as well as to + * do session cleanup. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param fOrMask The status flags to add. + * @param fNotMask The status flags to remove. + * @param fSessionTermination Set if we're called by the session cleanup code. + * This tweaks the error handling so we perform + * proper session cleanup even if the host + * misbehaves. + * + * @remarks Takes the session spinlock. + */ +static int vgdrvSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination) +{ + VMMDevReqMouseStatus *pReq; + uint32_t fChanged; + uint32_t fPrevious; + int rc; + + /* + * Preallocate a request buffer so we can do all in one go without leaving the spinlock. + */ + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetMouseStatus); + if (RT_SUCCESS(rc)) + { /* nothing */ } + else if (!fSessionTermination) + { + LogRel(("vgdrvSetSessionMouseStatus: VbglR0GRAlloc failure: %Rrc\n", rc)); + return rc; + } + else + pReq = NULL; /* Ignore failure, we must do session cleanup. */ + + + RTSpinlockAcquire(pDevExt->SessionSpinlock); + + /* + * Apply the changes to the session mask. + */ + fPrevious = pSession->fMouseStatus; + pSession->fMouseStatus |= fOrMask; + pSession->fMouseStatus &= ~fNotMask; + + /* + * If anything actually changed, update the global usage counters. + */ + fChanged = fPrevious ^ pSession->fMouseStatus; + if (fChanged) + { + bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, fPrevious, + pDevExt->cSessions, "MouseStatusTracker"); + + /* + * If there are global changes, update the event filter on the host. + */ + if (fGlobalChange || pDevExt->fMouseStatusHost == UINT32_MAX) + { + Assert(pReq || fSessionTermination); + if (pReq) + { + pReq->mouseFeatures = pDevExt->MouseStatusTracker.fMask; + if (pReq->mouseFeatures == pDevExt->fMouseStatusHost) + rc = VINF_SUCCESS; + else + { + pDevExt->fMouseStatusHost = pReq->mouseFeatures; + pReq->pointerXPos = 0; + pReq->pointerYPos = 0; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + { + /* + * Failed, roll back (unless it's session termination time). + */ + pDevExt->fMouseStatusHost = UINT32_MAX; + if (!fSessionTermination) + { + vgdrvBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, pSession->fMouseStatus, + pDevExt->cSessions, "MouseStatusTracker"); + pSession->fMouseStatus = fPrevious; + } + } + } + } + else + rc = VINF_SUCCESS; + } + } + + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (pReq) + VbglR0GRFree(&pReq->header); + return rc; +} + + +/** + * Sets the mouse status features for this session and updates them globally. + * + * @returns VBox status code. + * + * @param pDevExt The device extention. + * @param pSession The session. + * @param fFeatures New bitmap of enabled features. + */ +static int vgdrvIoCtl_SetMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fFeatures) +{ + LogFlow(("VBGL_IOCTL_SET_MOUSE_STATUS: features=%#x\n", fFeatures)); + + if (fFeatures & ~VMMDEV_MOUSE_GUEST_MASK) + return VERR_INVALID_PARAMETER; + + return vgdrvSetSessionMouseStatus(pDevExt, pSession, fFeatures, ~fFeatures, false /*fSessionTermination*/); +} + + +/** + * Return the mask of VMM device events that this session is allowed to see (wrt + * to "acquire" mode guest capabilities). + * + * The events associated with guest capabilities in "acquire" mode will be + * restricted to sessions which has acquired the respective capabilities. + * If someone else tries to wait for acquired events, they won't be woken up + * when the event becomes pending. Should some other thread in the session + * acquire the capability while the corresponding event is pending, the waiting + * thread will woken up. + * + * @returns Mask of events valid for the given session. + * @param pDevExt The device extension. + * @param pSession The session. + * + * @remarks Needs only be called when dispatching events in the + * VBOXGUEST_ACQUIRE_STYLE_EVENTS mask. + */ +static uint32_t vgdrvGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession) +{ + uint32_t fAcquireModeGuestCaps; + uint32_t fAcquiredGuestCaps; + uint32_t fAllowedEvents; + + /* + * Note! Reads pSession->fAcquiredGuestCaps and pDevExt->fAcquireModeGuestCaps + * WITHOUT holding VBOXGUESTDEVEXT::SessionSpinlock. + */ + fAcquireModeGuestCaps = ASMAtomicUoReadU32(&pDevExt->fAcquireModeGuestCaps); + if (fAcquireModeGuestCaps == 0) + return VMMDEV_EVENT_VALID_EVENT_MASK; + fAcquiredGuestCaps = ASMAtomicUoReadU32(&pSession->fAcquiredGuestCaps); + + /* + * Calculate which events to allow according to the cap config and caps + * acquired by the session. + */ + fAllowedEvents = VMMDEV_EVENT_VALID_EVENT_MASK; + if ( !(fAcquiredGuestCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS) + && (fAcquireModeGuestCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS)) + fAllowedEvents &= ~VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST; + + if ( !(fAcquiredGuestCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS) + && (fAcquireModeGuestCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS)) + fAllowedEvents &= ~VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST; + + return fAllowedEvents; +} + + +/** + * Init and termination worker for set guest capabilities to zero on the host. + * + * @returns VBox status code. + * @param pDevExt The device extension. + */ +static int vgdrvResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt) +{ + VMMDevReqGuestCapabilities2 *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetGuestCapabilities); + if (RT_SUCCESS(rc)) + { + pReq->u32NotMask = UINT32_MAX; + pReq->u32OrMask = 0; + rc = VbglR0GRPerform(&pReq->header); + + if (RT_FAILURE(rc)) + LogRelFunc(("failed with rc=%Rrc\n", rc)); + VbglR0GRFree(&pReq->header); + } + RT_NOREF1(pDevExt); + return rc; +} + + +/** + * Sets the guest capabilities to the host while holding the lock. + * + * This will ASSUME that we're the ones in charge of the mask, so + * we'll simply clear all bits we don't set. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pReq The request. + */ +static int vgdrvUpdateCapabilitiesOnHostWithReqAndLock(PVBOXGUESTDEVEXT pDevExt, VMMDevReqGuestCapabilities2 *pReq) +{ + int rc; + + pReq->u32OrMask = pDevExt->fAcquiredGuestCaps | pDevExt->SetGuestCapsTracker.fMask; + if (pReq->u32OrMask == pDevExt->fGuestCapsHost) + rc = VINF_SUCCESS; + else + { + pDevExt->fGuestCapsHost = pReq->u32OrMask; + pReq->u32NotMask = ~pReq->u32OrMask; + rc = VbglR0GRPerform(&pReq->header); + if (RT_FAILURE(rc)) + pDevExt->fGuestCapsHost = UINT32_MAX; + } + + return rc; +} + + +/** + * Switch a set of capabilities into "acquire" mode and (maybe) acquire them for + * the given session. + * + * This is called in response to VBOXGUEST_IOCTL_GUEST_CAPS_ACQUIRE as well as + * to do session cleanup. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param fOrMask The capabilities to add . + * @param fNotMask The capabilities to remove. Ignored in + * VBOXGUESTCAPSACQUIRE_FLAGS_CONFIG_ACQUIRE_MODE. + * @param fFlags Confusing operation modifier. + * VBOXGUESTCAPSACQUIRE_FLAGS_NONE means to both + * configure and acquire/release the capabilities. + * VBOXGUESTCAPSACQUIRE_FLAGS_CONFIG_ACQUIRE_MODE + * means only configure capabilities in the + * @a fOrMask capabilities for "acquire" mode. + * @param fSessionTermination Set if we're called by the session cleanup code. + * This tweaks the error handling so we perform + * proper session cleanup even if the host + * misbehaves. + * + * @remarks Takes both the session and event spinlocks. + */ +static int vgdrvAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, uint32_t fFlags, + bool fSessionTermination) +{ + uint32_t fCurrentOwnedCaps; + uint32_t fSessionRemovedCaps; + uint32_t fSessionAddedCaps; + uint32_t fOtherConflictingCaps; + VMMDevReqGuestCapabilities2 *pReq = NULL; + int rc; + + + /* + * Validate and adjust input. + */ + if (fOrMask & ~( VMMDEV_GUEST_SUPPORTS_SEAMLESS + | VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING + | VMMDEV_GUEST_SUPPORTS_GRAPHICS ) ) + { + LogRel(("vgdrvAcquireSessionCapabilities: invalid fOrMask=%#x (pSession=%p fNotMask=%#x fFlags=%#x)\n", + fOrMask, pSession, fNotMask, fFlags)); + return VERR_INVALID_PARAMETER; + } + + if ((fFlags & ~VBGL_IOC_AGC_FLAGS_VALID_MASK) != 0) + { + LogRel(("vgdrvAcquireSessionCapabilities: invalid fFlags=%#x (pSession=%p fOrMask=%#x fNotMask=%#x)\n", + fFlags, pSession, fOrMask, fNotMask)); + return VERR_INVALID_PARAMETER; + } + Assert(!fOrMask || !fSessionTermination); + + /* The fNotMask no need to have all values valid, invalid ones will simply be ignored. */ + fNotMask &= ~fOrMask; + + /* + * Preallocate a update request if we're about to do more than just configure + * the capability mode. + */ + if (!(fFlags & VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE)) + { + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetGuestCapabilities); + if (RT_SUCCESS(rc)) + { /* do nothing */ } + else if (!fSessionTermination) + { + LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x fFlags=%#x: VbglR0GRAlloc failure: %Rrc\n", + pSession, fOrMask, fNotMask, fFlags, rc)); + return rc; + } + else + pReq = NULL; /* Ignore failure, we must do session cleanup. */ + } + + /* + * Try switch the capabilities in the OR mask into "acquire" mode. + * + * Note! We currently ignore anyone which may already have "set" the capabilities + * in fOrMask. Perhaps not the best way to handle it, but it's simple... + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + + if (!(pDevExt->fSetModeGuestCaps & fOrMask)) + pDevExt->fAcquireModeGuestCaps |= fOrMask; + else + { + RTSpinlockRelease(pDevExt->EventSpinlock); + + if (pReq) + VbglR0GRFree(&pReq->header); + AssertMsgFailed(("Trying to change caps mode: %#x\n", fOrMask)); + LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x fFlags=%#x: calling caps acquire for set caps\n", + pSession, fOrMask, fNotMask, fFlags)); + return VERR_INVALID_STATE; + } + + /* + * If we only wanted to switch the capabilities into "acquire" mode, we're done now. + */ + if (fFlags & VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE) + { + RTSpinlockRelease(pDevExt->EventSpinlock); + + Assert(!pReq); + Log(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x fFlags=%#x: configured acquire caps: 0x%x\n", + pSession, fOrMask, fNotMask, fFlags)); + return VINF_SUCCESS; + } + Assert(pReq || fSessionTermination); + + /* + * Caller wants to acquire/release the capabilities too. + * + * Note! The mode change of the capabilities above won't be reverted on + * failure, this is intentional. + */ + fCurrentOwnedCaps = pSession->fAcquiredGuestCaps; + fSessionRemovedCaps = fCurrentOwnedCaps & fNotMask; + fSessionAddedCaps = fOrMask & ~fCurrentOwnedCaps; + fOtherConflictingCaps = pDevExt->fAcquiredGuestCaps & ~fCurrentOwnedCaps; + fOtherConflictingCaps &= fSessionAddedCaps; + + if (!fOtherConflictingCaps) + { + if (fSessionAddedCaps) + { + pSession->fAcquiredGuestCaps |= fSessionAddedCaps; + pDevExt->fAcquiredGuestCaps |= fSessionAddedCaps; + } + + if (fSessionRemovedCaps) + { + pSession->fAcquiredGuestCaps &= ~fSessionRemovedCaps; + pDevExt->fAcquiredGuestCaps &= ~fSessionRemovedCaps; + } + + /* + * If something changes (which is very likely), tell the host. + */ + if (fSessionAddedCaps || fSessionRemovedCaps || pDevExt->fGuestCapsHost == UINT32_MAX) + { + Assert(pReq || fSessionTermination); + if (pReq) + { + rc = vgdrvUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq); + if (RT_FAILURE(rc) && !fSessionTermination) + { + /* Failed, roll back. */ + if (fSessionAddedCaps) + { + pSession->fAcquiredGuestCaps &= ~fSessionAddedCaps; + pDevExt->fAcquiredGuestCaps &= ~fSessionAddedCaps; + } + if (fSessionRemovedCaps) + { + pSession->fAcquiredGuestCaps |= fSessionRemovedCaps; + pDevExt->fAcquiredGuestCaps |= fSessionRemovedCaps; + } + + RTSpinlockRelease(pDevExt->EventSpinlock); + LogRel(("vgdrvAcquireSessionCapabilities: vgdrvUpdateCapabilitiesOnHostWithReqAndLock failed: rc=%Rrc\n", rc)); + VbglR0GRFree(&pReq->header); + return rc; + } + } + } + } + else + { + RTSpinlockRelease(pDevExt->EventSpinlock); + + Log(("vgdrvAcquireSessionCapabilities: Caps %#x were busy\n", fOtherConflictingCaps)); + VbglR0GRFree(&pReq->header); + return VERR_RESOURCE_BUSY; + } + + RTSpinlockRelease(pDevExt->EventSpinlock); + if (pReq) + VbglR0GRFree(&pReq->header); + + /* + * If we added a capability, check if that means some other thread in our + * session should be unblocked because there are events pending. + * + * HACK ALERT! When the seamless support capability is added we generate a + * seamless change event so that the ring-3 client can sync with + * the seamless state. Although this introduces a spurious + * wakeups of the ring-3 client, it solves the problem of client + * state inconsistency in multiuser environment (on Windows). + */ + if (fSessionAddedCaps) + { + uint32_t fGenFakeEvents = 0; + if (fSessionAddedCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS) + fGenFakeEvents |= VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST; + + RTSpinlockAcquire(pDevExt->EventSpinlock); + if (fGenFakeEvents || pDevExt->f32PendingEvents) + vgdrvDispatchEventsLocked(pDevExt, fGenFakeEvents); + RTSpinlockRelease(pDevExt->EventSpinlock); + +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + VGDrvCommonWaitDoWakeUps(pDevExt); +#endif + } + + return VINF_SUCCESS; +} + + +/** + * Handle VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pSession The session. + * @param pAcquire The request. + */ +static int vgdrvIoCtl_GuestCapsAcquire(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCACQUIREGUESTCAPS pAcquire) +{ + int rc; + LogFlow(("VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES: or=%#x not=%#x flags=%#x\n", + pAcquire->u.In.fOrMask, pAcquire->u.In.fNotMask, pAcquire->u.In.fFlags)); + + rc = vgdrvAcquireSessionCapabilities(pDevExt, pSession, pAcquire->u.In.fOrMask, pAcquire->u.In.fNotMask, + pAcquire->u.In.fFlags, false /*fSessionTermination*/); + if (RT_FAILURE(rc)) + LogRel(("VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES failed rc=%Rrc\n", rc)); + return rc; +} + + +/** + * Sets the guest capabilities for a session. + * + * @returns VBox status code. + * @param pDevExt The device extension. + * @param pSession The session. + * @param fOrMask The capabilities to add. + * @param fNotMask The capabilities to remove. + * @param pfSessionCaps Where to return the guest capabilities reported + * for this session. Optional. + * @param pfGlobalCaps Where to return the guest capabilities reported + * for all the sessions. Optional. + * + * @param fSessionTermination Set if we're called by the session cleanup code. + * This tweaks the error handling so we perform + * proper session cleanup even if the host + * misbehaves. + * + * @remarks Takes the session spinlock. + */ +static int vgdrvSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + uint32_t fOrMask, uint32_t fNotMask, uint32_t *pfSessionCaps, uint32_t *pfGlobalCaps, + bool fSessionTermination) +{ + /* + * Preallocate a request buffer so we can do all in one go without leaving the spinlock. + */ + VMMDevReqGuestCapabilities2 *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetGuestCapabilities); + if (RT_SUCCESS(rc)) + { /* nothing */ } + else if (!fSessionTermination) + { + if (pfSessionCaps) + *pfSessionCaps = UINT32_MAX; + if (pfGlobalCaps) + *pfGlobalCaps = UINT32_MAX; + LogRel(("vgdrvSetSessionCapabilities: VbglR0GRAlloc failure: %Rrc\n", rc)); + return rc; + } + else + pReq = NULL; /* Ignore failure, we must do session cleanup. */ + + + RTSpinlockAcquire(pDevExt->SessionSpinlock); + +#ifndef VBOXGUEST_DISREGARD_ACQUIRE_MODE_GUEST_CAPS + /* + * Capabilities in "acquire" mode cannot be set via this API. + * (Acquire mode is only used on windows at the time of writing.) + */ + if (!(fOrMask & pDevExt->fAcquireModeGuestCaps)) +#endif + { + /* + * Apply the changes to the session mask. + */ + uint32_t fChanged; + uint32_t fPrevious = pSession->fCapabilities; + pSession->fCapabilities |= fOrMask; + pSession->fCapabilities &= ~fNotMask; + + /* + * If anything actually changed, update the global usage counters. + */ + fChanged = fPrevious ^ pSession->fCapabilities; + if (fChanged) + { + bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, fPrevious, + pDevExt->cSessions, "SetGuestCapsTracker"); + + /* + * If there are global changes, update the capabilities on the host. + */ + if (fGlobalChange || pDevExt->fGuestCapsHost == UINT32_MAX) + { + Assert(pReq || fSessionTermination); + if (pReq) + { + rc = vgdrvUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq); + + /* On failure, roll back (unless it's session termination time). */ + if (RT_FAILURE(rc) && !fSessionTermination) + { + vgdrvBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, pSession->fCapabilities, + pDevExt->cSessions, "SetGuestCapsTracker"); + pSession->fCapabilities = fPrevious; + } + } + } + } + } +#ifndef VBOXGUEST_DISREGARD_ACQUIRE_MODE_GUEST_CAPS + else + rc = VERR_RESOURCE_BUSY; +#endif + + if (pfSessionCaps) + *pfSessionCaps = pSession->fCapabilities; + if (pfGlobalCaps) + *pfGlobalCaps = pDevExt->fAcquiredGuestCaps | pDevExt->SetGuestCapsTracker.fMask; + + RTSpinlockRelease(pDevExt->SessionSpinlock); + if (pReq) + VbglR0GRFree(&pReq->header); + return rc; +} + + +/** + * Handle VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES. + * + * @returns VBox status code. + * + * @param pDevExt The device extension. + * @param pSession The session. + * @param pInfo The request. + */ +static int vgdrvIoCtl_SetCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLIOCSETGUESTCAPS pInfo) +{ + int rc; + LogFlow(("VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES: or=%#x not=%#x\n", pInfo->u.In.fOrMask, pInfo->u.In.fNotMask)); + + if (!((pInfo->u.In.fOrMask | pInfo->u.In.fNotMask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)) + rc = vgdrvSetSessionCapabilities(pDevExt, pSession, pInfo->u.In.fOrMask, pInfo->u.In.fNotMask, + &pInfo->u.Out.fSessionCaps, &pInfo->u.Out.fGlobalCaps, false /*fSessionTermination*/); + else + rc = VERR_INVALID_PARAMETER; + + return rc; +} + +/** @} */ + + +/** + * Common IOCtl for user to kernel and kernel to kernel communication. + * + * This function only does the basic validation and then invokes + * worker functions that takes care of each specific function. + * + * @returns VBox status code. + * + * @param iFunction The requested function. + * @param pDevExt The device extension. + * @param pSession The client session. + * @param pReqHdr Pointer to the request. This always starts with + * a request common header. + * @param cbReq The max size of the request buffer. + */ +int VGDrvCommonIoCtl(uintptr_t iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, PVBGLREQHDR pReqHdr, size_t cbReq) +{ + uintptr_t const iFunctionStripped = VBGL_IOCTL_CODE_STRIPPED(iFunction); + int rc; + + LogFlow(("VGDrvCommonIoCtl: iFunction=%#x pDevExt=%p pSession=%p pReqHdr=%p cbReq=%zu\n", + iFunction, pDevExt, pSession, pReqHdr, cbReq)); + + /* + * Define some helper macros to simplify validation. + */ +#define REQ_CHECK_SIZES_EX(Name, cbInExpect, cbOutExpect) \ + do { \ + if (RT_LIKELY( pReqHdr->cbIn == (cbInExpect) \ + && ( pReqHdr->cbOut == (cbOutExpect) \ + || ((cbInExpect) == (cbOutExpect) && pReqHdr->cbOut == 0) ) )) \ + { /* likely */ } \ + else \ + { \ + Log(( #Name ": Invalid input/output sizes. cbIn=%ld expected %ld. cbOut=%ld expected %ld.\n", \ + (long)pReqHdr->cbIn, (long)(cbInExpect), (long)pReqHdr->cbOut, (long)(cbOutExpect))); \ + return pReqHdr->rc = VERR_INVALID_PARAMETER; \ + } \ + } while (0) + +#define REQ_CHECK_SIZES(Name) REQ_CHECK_SIZES_EX(Name, Name ## _SIZE_IN, Name ## _SIZE_OUT) + +#define REQ_CHECK_SIZE_IN(Name, cbInExpect) \ + do { \ + if (RT_LIKELY(pReqHdr->cbIn == (cbInExpect))) \ + { /* likely */ } \ + else \ + { \ + Log(( #Name ": Invalid input/output sizes. cbIn=%ld expected %ld.\n", \ + (long)pReqHdr->cbIn, (long)(cbInExpect))); \ + return pReqHdr->rc = VERR_INVALID_PARAMETER; \ + } \ + } while (0) + +#define REQ_CHECK_SIZE_OUT(Name, cbOutExpect) \ + do { \ + if (RT_LIKELY( pReqHdr->cbOut == (cbOutExpect) \ + || (pReqHdr->cbOut == 0 && pReqHdr->cbIn == (cbOutExpect)))) \ + { /* likely */ } \ + else \ + { \ + Log(( #Name ": Invalid input/output sizes. cbOut=%ld (%ld) expected %ld.\n", \ + (long)pReqHdr->cbOut, (long)pReqHdr->cbIn, (long)(cbOutExpect))); \ + return pReqHdr->rc = VERR_INVALID_PARAMETER; \ + } \ + } while (0) + +#define REQ_CHECK_EXPR(Name, expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + Log(( #Name ": %s\n", #expr)); \ + return pReqHdr->rc = VERR_INVALID_PARAMETER; \ + } \ + } while (0) + +#define REQ_CHECK_EXPR_FMT(expr, fmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + Log( fmt ); \ + return pReqHdr->rc = VERR_INVALID_PARAMETER; \ + } \ + } while (0) + +#define REQ_CHECK_RING0(mnemonic) \ + do { \ + if (pSession->R0Process != NIL_RTR0PROCESS) \ + { \ + LogFunc((mnemonic ": Ring-0 only, caller is %RTproc/%p\n", \ + pSession->Process, (uintptr_t)pSession->R0Process)); \ + return pReqHdr->rc = VERR_PERMISSION_DENIED; \ + } \ + } while (0) + + + /* + * Validate the request. + */ + if (RT_LIKELY(cbReq >= sizeof(*pReqHdr))) + { /* likely */ } + else + { + Log(("VGDrvCommonIoCtl: Bad ioctl request size; cbReq=%#lx\n", (long)cbReq)); + return VERR_INVALID_PARAMETER; + } + + if (pReqHdr->cbOut == 0) + pReqHdr->cbOut = pReqHdr->cbIn; + + if (RT_LIKELY( pReqHdr->uVersion == VBGLREQHDR_VERSION + && pReqHdr->cbIn >= sizeof(*pReqHdr) + && pReqHdr->cbIn <= cbReq + && pReqHdr->cbOut >= sizeof(*pReqHdr) + && pReqHdr->cbOut <= cbReq)) + { /* likely */ } + else + { + Log(("VGDrvCommonIoCtl: Bad ioctl request header; cbIn=%#lx cbOut=%#lx version=%#lx\n", + (long)pReqHdr->cbIn, (long)pReqHdr->cbOut, (long)pReqHdr->uVersion)); + return VERR_INVALID_PARAMETER; + } + + if (RT_LIKELY(RT_VALID_PTR(pSession))) + { /* likely */ } + else + { + Log(("VGDrvCommonIoCtl: Invalid pSession value %p (ioctl=%#x)\n", pSession, iFunction)); + return VERR_INVALID_PARAMETER; + } + + + /* + * Deal with variably sized requests first. + */ + rc = VINF_SUCCESS; + if ( iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_VMMDEV_REQUEST(0)) + || iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_VMMDEV_REQUEST_BIG) ) + { + REQ_CHECK_EXPR(VBGL_IOCTL_VMMDEV_REQUEST, pReqHdr->uType != VBGLREQHDR_TYPE_DEFAULT); + REQ_CHECK_EXPR_FMT(pReqHdr->cbIn == pReqHdr->cbOut, + ("VBGL_IOCTL_VMMDEV_REQUEST: cbIn=%ld != cbOut=%ld\n", (long)pReqHdr->cbIn, (long)pReqHdr->cbOut)); + pReqHdr->rc = vgdrvIoCtl_VMMDevRequest(pDevExt, pSession, (VMMDevRequestHeader *)pReqHdr, cbReq); + } + else if (RT_LIKELY(pReqHdr->uType == VBGLREQHDR_TYPE_DEFAULT)) + { + if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_LOG(0))) + { + REQ_CHECK_SIZE_OUT(VBGL_IOCTL_LOG, VBGL_IOCTL_LOG_SIZE_OUT); + pReqHdr->rc = vgdrvIoCtl_Log(pDevExt, &((PVBGLIOCLOG)pReqHdr)->u.In.szMsg[0], pReqHdr->cbIn - sizeof(VBGLREQHDR), + pSession->fUserSession); + } +#ifdef VBOX_WITH_HGCM + else if ( iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL(0)) +# if ARCH_BITS == 64 + || iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0)) +# endif + ) + { + REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn >= sizeof(VBGLIOCHGCMCALL)); + REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut); + pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr, + iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0)), + false /*fUserData*/, cbReq); + } + else if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(0))) + { + REQ_CHECK_RING0("VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA"); + REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn >= sizeof(VBGLIOCHGCMCALL)); + REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut); + pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr, + ARCH_BITS == 32, true /*fUserData*/, cbReq); + } +#endif /* VBOX_WITH_HGCM */ + else + { + switch (iFunction) + { + /* + * Ring-0 only: + */ + case VBGL_IOCTL_IDC_CONNECT: + REQ_CHECK_RING0("VBGL_IOCL_IDC_CONNECT"); + REQ_CHECK_SIZES(VBGL_IOCTL_IDC_CONNECT); + pReqHdr->rc = vgdrvIoCtl_IdcConnect(pDevExt, pSession, (PVBGLIOCIDCCONNECT)pReqHdr); + break; + + case VBGL_IOCTL_IDC_DISCONNECT: + REQ_CHECK_RING0("VBGL_IOCTL_IDC_DISCONNECT"); + REQ_CHECK_SIZES(VBGL_IOCTL_IDC_DISCONNECT); + pReqHdr->rc = vgdrvIoCtl_IdcDisconnect(pDevExt, pSession, (PVBGLIOCIDCDISCONNECT)pReqHdr); + break; + + case VBGL_IOCTL_GET_VMMDEV_IO_INFO: + REQ_CHECK_RING0("GET_VMMDEV_IO_INFO"); + REQ_CHECK_SIZES(VBGL_IOCTL_GET_VMMDEV_IO_INFO); + pReqHdr->rc = vgdrvIoCtl_GetVMMDevIoInfo(pDevExt, (PVBGLIOCGETVMMDEVIOINFO)pReqHdr); + break; + + case VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: + REQ_CHECK_RING0("SET_MOUSE_NOTIFY_CALLBACK"); + REQ_CHECK_SIZES(VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK); + pReqHdr->rc = vgdrvIoCtl_SetMouseNotifyCallback(pDevExt, (PVBGLIOCSETMOUSENOTIFYCALLBACK)pReqHdr); + break; + + /* + * Ring-3 only: + */ + case VBGL_IOCTL_DRIVER_VERSION_INFO: + REQ_CHECK_SIZES(VBGL_IOCTL_DRIVER_VERSION_INFO); + pReqHdr->rc = vgdrvIoCtl_DriverVersionInfo(pDevExt, pSession, (PVBGLIOCDRIVERVERSIONINFO)pReqHdr); + break; + + /* + * Both ring-3 and ring-0: + */ + case VBGL_IOCTL_WAIT_FOR_EVENTS: + REQ_CHECK_SIZES(VBGL_IOCTL_WAIT_FOR_EVENTS); + pReqHdr->rc = vgdrvIoCtl_WaitForEvents(pDevExt, pSession, (VBGLIOCWAITFOREVENTS *)pReqHdr, + pSession->R0Process != NIL_RTR0PROCESS); + break; + + case VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS: + REQ_CHECK_SIZES(VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS); + pReqHdr->rc = vgdrvIoCtl_CancelAllWaitEvents(pDevExt, pSession); + break; + + case VBGL_IOCTL_CHANGE_FILTER_MASK: + REQ_CHECK_SIZES(VBGL_IOCTL_CHANGE_FILTER_MASK); + pReqHdr->rc = vgdrvIoCtl_ChangeFilterMask(pDevExt, pSession, (PVBGLIOCCHANGEFILTERMASK)pReqHdr); + break; + +#ifdef VBOX_WITH_HGCM + case VBGL_IOCTL_HGCM_CONNECT: + REQ_CHECK_SIZES(VBGL_IOCTL_HGCM_CONNECT); + pReqHdr->rc = vgdrvIoCtl_HGCMConnect(pDevExt, pSession, (PVBGLIOCHGCMCONNECT)pReqHdr); + break; + + case VBGL_IOCTL_HGCM_DISCONNECT: + REQ_CHECK_SIZES(VBGL_IOCTL_HGCM_DISCONNECT); + pReqHdr->rc = vgdrvIoCtl_HGCMDisconnect(pDevExt, pSession, (PVBGLIOCHGCMDISCONNECT)pReqHdr); + break; +#endif + + case VBGL_IOCTL_CHECK_BALLOON: + REQ_CHECK_SIZES(VBGL_IOCTL_CHECK_BALLOON); + pReqHdr->rc = vgdrvIoCtl_CheckMemoryBalloon(pDevExt, pSession, (PVBGLIOCCHECKBALLOON)pReqHdr); + break; + + case VBGL_IOCTL_CHANGE_BALLOON: + REQ_CHECK_SIZES(VBGL_IOCTL_CHANGE_BALLOON); + pReqHdr->rc = vgdrvIoCtl_ChangeMemoryBalloon(pDevExt, pSession, (PVBGLIOCCHANGEBALLOON)pReqHdr); + break; + + case VBGL_IOCTL_WRITE_CORE_DUMP: + REQ_CHECK_SIZES(VBGL_IOCTL_WRITE_CORE_DUMP); + pReqHdr->rc = vgdrvIoCtl_WriteCoreDump(pDevExt, (PVBGLIOCWRITECOREDUMP)pReqHdr); + break; + + case VBGL_IOCTL_SET_MOUSE_STATUS: + REQ_CHECK_SIZES(VBGL_IOCTL_SET_MOUSE_STATUS); + pReqHdr->rc = vgdrvIoCtl_SetMouseStatus(pDevExt, pSession, ((PVBGLIOCSETMOUSESTATUS)pReqHdr)->u.In.fStatus); + break; + + case VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES: + REQ_CHECK_SIZES(VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES); + pReqHdr->rc = vgdrvIoCtl_GuestCapsAcquire(pDevExt, pSession, (PVBGLIOCACQUIREGUESTCAPS)pReqHdr); + break; + + case VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES: + REQ_CHECK_SIZES(VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES); + pReqHdr->rc = vgdrvIoCtl_SetCapabilities(pDevExt, pSession, (PVBGLIOCSETGUESTCAPS)pReqHdr); + break; + +#ifdef VBOX_WITH_DPC_LATENCY_CHECKER + case VBGL_IOCTL_DPC_LATENCY_CHECKER: + REQ_CHECK_SIZES(VBGL_IOCTL_DPC_LATENCY_CHECKER); + pReqHdr->rc = VGDrvNtIOCtl_DpcLatencyChecker(); + break; +#endif + + default: + { + LogRel(("VGDrvCommonIoCtl: Unknown request iFunction=%#x (stripped %#x) cbReq=%#x\n", + iFunction, iFunctionStripped, cbReq)); + pReqHdr->rc = rc = VERR_NOT_SUPPORTED; + break; + } + } + } + } + else + { + Log(("VGDrvCommonIoCtl: uType=%#x, expected default (ioctl=%#x)\n", pReqHdr->uType, iFunction)); + return VERR_INVALID_PARAMETER; + } + + LogFlow(("VGDrvCommonIoCtl: returns %Rrc (req: rc=%Rrc cbOut=%#x)\n", rc, pReqHdr->rc, pReqHdr->cbOut)); + return rc; +} + + +/** + * Used by VGDrvCommonISR as well as the acquire guest capability code. + * + * @returns VINF_SUCCESS on success. On failure, ORed together + * RTSemEventMultiSignal errors (completes processing despite errors). + * @param pDevExt The VBoxGuest device extension. + * @param fEvents The events to dispatch. + */ +static int vgdrvDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents) +{ + PVBOXGUESTWAIT pWait; + PVBOXGUESTWAIT pSafe; + int rc = VINF_SUCCESS; + + fEvents |= pDevExt->f32PendingEvents; + + RTListForEachSafe(&pDevExt->WaitList, pWait, pSafe, VBOXGUESTWAIT, ListNode) + { + uint32_t fHandledEvents = pWait->fReqEvents & fEvents; + if ( fHandledEvents != 0 + && !pWait->fResEvents) + { + /* Does this one wait on any of the events we're dispatching? We do a quick + check first, then deal with VBOXGUEST_ACQUIRE_STYLE_EVENTS as applicable. */ + if (fHandledEvents & VBOXGUEST_ACQUIRE_STYLE_EVENTS) + fHandledEvents &= vgdrvGetAllowedEventMaskForSession(pDevExt, pWait->pSession); + if (fHandledEvents) + { + pWait->fResEvents = pWait->fReqEvents & fEvents & fHandledEvents; + fEvents &= ~pWait->fResEvents; + RTListNodeRemove(&pWait->ListNode); +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + RTListAppend(&pDevExt->WakeUpList, &pWait->ListNode); +#else + RTListAppend(&pDevExt->WokenUpList, &pWait->ListNode); + rc |= RTSemEventMultiSignal(pWait->Event); +#endif + if (!fEvents) + break; + } + } + } + + ASMAtomicWriteU32(&pDevExt->f32PendingEvents, fEvents); + return rc; +} + + +/** + * Simply checks whether the IRQ is ours or not, does not do any interrupt + * procesing. + * + * @returns true if it was our interrupt, false if it wasn't. + * @param pDevExt The VBoxGuest device extension. + */ +bool VGDrvCommonIsOurIRQ(PVBOXGUESTDEVEXT pDevExt) +{ + RTSpinlockAcquire(pDevExt->EventSpinlock); + bool const fOurIrq = pDevExt->pVMMDevMemory->V.V1_04.fHaveEvents; + RTSpinlockRelease(pDevExt->EventSpinlock); + + return fOurIrq; +} + + +/** + * Common interrupt service routine. + * + * This deals with events and with waking up thread waiting for those events. + * + * @returns true if it was our interrupt, false if it wasn't. + * @param pDevExt The VBoxGuest device extension. + */ +bool VGDrvCommonISR(PVBOXGUESTDEVEXT pDevExt) +{ + VMMDevEvents volatile *pReq = pDevExt->pIrqAckEvents; + bool fMousePositionChanged = false; + int rc = 0; + bool fOurIrq; + + /* + * Make sure we've initialized the device extension. + */ + if (RT_UNLIKELY(!pReq)) + return false; + + /* + * Enter the spinlock and check if it's our IRQ or not. + */ + RTSpinlockAcquire(pDevExt->EventSpinlock); + fOurIrq = pDevExt->pVMMDevMemory->V.V1_04.fHaveEvents; + if (fOurIrq) + { + /* + * Acknowlegde events. + * We don't use VbglR0GRPerform here as it may take another spinlocks. + */ + pReq->header.rc = VERR_INTERNAL_ERROR; + pReq->events = 0; + ASMCompilerBarrier(); + ASMOutU32(pDevExt->IOPortBase + VMMDEV_PORT_OFF_REQUEST, (uint32_t)pDevExt->PhysIrqAckEvents); + ASMCompilerBarrier(); /* paranoia */ + if (RT_SUCCESS(pReq->header.rc)) + { + uint32_t fEvents = pReq->events; + + Log3(("VGDrvCommonISR: acknowledge events succeeded %#RX32\n", fEvents)); + + /* + * VMMDEV_EVENT_MOUSE_POSITION_CHANGED can only be polled for. + */ + if (fEvents & VMMDEV_EVENT_MOUSE_POSITION_CHANGED) + { + fMousePositionChanged = true; + fEvents &= ~VMMDEV_EVENT_MOUSE_POSITION_CHANGED; +#if !defined(VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT) + if (pDevExt->pfnMouseNotifyCallback) + pDevExt->pfnMouseNotifyCallback(pDevExt->pvMouseNotifyCallbackArg); +#endif + } + +#ifdef VBOX_WITH_HGCM + /* + * The HGCM event/list is kind of different in that we evaluate all entries. + */ + if (fEvents & VMMDEV_EVENT_HGCM) + { + PVBOXGUESTWAIT pWait; + PVBOXGUESTWAIT pSafe; + RTListForEachSafe(&pDevExt->HGCMWaitList, pWait, pSafe, VBOXGUESTWAIT, ListNode) + { + if (pWait->pHGCMReq->fu32Flags & VBOX_HGCM_REQ_DONE) + { + pWait->fResEvents = VMMDEV_EVENT_HGCM; + RTListNodeRemove(&pWait->ListNode); +# ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + RTListAppend(&pDevExt->WakeUpList, &pWait->ListNode); +# else + RTListAppend(&pDevExt->WokenUpList, &pWait->ListNode); + rc |= RTSemEventMultiSignal(pWait->Event); +# endif + } + } + fEvents &= ~VMMDEV_EVENT_HGCM; + } +#endif + + /* + * Normal FIFO waiter evaluation. + */ + rc |= vgdrvDispatchEventsLocked(pDevExt, fEvents); + } + else /* something is serious wrong... */ + Log(("VGDrvCommonISR: acknowledge events failed rc=%Rrc (events=%#x)!!\n", + pReq->header.rc, pReq->events)); + } + else + Log3(("VGDrvCommonISR: not ours\n")); + + RTSpinlockRelease(pDevExt->EventSpinlock); + + /* + * Execute the mouse notification callback here if it cannot be executed while + * holding the interrupt safe spinlock, see @bugref{8639}. + */ +#if defined(VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT) && !defined(RT_OS_WINDOWS) /* (Windows does this in the Dpc callback) */ + if ( fMousePositionChanged + && pDevExt->pfnMouseNotifyCallback) + pDevExt->pfnMouseNotifyCallback(pDevExt->pvMouseNotifyCallbackArg); +#endif + +#if defined(VBOXGUEST_USE_DEFERRED_WAKE_UP) && !defined(RT_OS_DARWIN) && !defined(RT_OS_WINDOWS) + /* + * Do wake-ups. + * Note. On Windows this isn't possible at this IRQL, so a DPC will take + * care of it. Same on darwin, doing it in the work loop callback. + */ + VGDrvCommonWaitDoWakeUps(pDevExt); +#endif + + /* + * Work the poll and async notification queues on OSes that implements that. + * (Do this outside the spinlock to prevent some recursive spinlocking.) + */ + if (fMousePositionChanged) + { + ASMAtomicIncU32(&pDevExt->u32MousePosChangedSeq); + VGDrvNativeISRMousePollEvent(pDevExt); + } + + Assert(rc == 0); + NOREF(rc); + return fOurIrq; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestInternal.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestInternal.h @@ -0,0 +1,365 @@ +/* $Id: VBoxGuestInternal.h $ */ +/** @file + * VBoxGuest - Guest Additions Driver, Internal Header. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBoxGuestInternal_h +#define ___VBoxGuestInternal_h + +#include +#include +#include +#include +#include +#include +#include +#include + +/** @def VBOXGUEST_USE_DEFERRED_WAKE_UP + * Defer wake-up of waiting thread when defined. */ +#if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS) || defined(DOXYGEN_RUNNING) +# define VBOXGUEST_USE_DEFERRED_WAKE_UP +#endif + +/** @def VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT + * The mouse notification callback can cause preemption and must not be invoked + * while holding a high-level spinlock. + */ +#if defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS) || defined(DOXYGEN_RUNNING) +# define VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT +#endif + +/** Pointer to the VBoxGuest per session data. */ +typedef struct VBOXGUESTSESSION *PVBOXGUESTSESSION; + +/** Pointer to a wait-for-event entry. */ +typedef struct VBOXGUESTWAIT *PVBOXGUESTWAIT; + +/** + * VBox guest wait for event entry. + * + * Each waiting thread allocates one of these items and adds + * it to the wait list before going to sleep on the event sem. + */ +typedef struct VBOXGUESTWAIT +{ + /** The list node. */ + RTLISTNODE ListNode; + /** The events we are waiting on. */ + uint32_t fReqEvents; + /** The events we received. */ + uint32_t volatile fResEvents; +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + /** Set by VGDrvCommonWaitDoWakeUps before leaving the spinlock to call + * RTSemEventMultiSignal. */ + bool volatile fPendingWakeUp; + /** Set by the requestor thread if it got the spinlock before the + * signaller. Deals with the race in VGDrvCommonWaitDoWakeUps. */ + bool volatile fFreeMe; +#endif + /** The event semaphore. */ + RTSEMEVENTMULTI Event; + /** The session that's waiting. */ + PVBOXGUESTSESSION pSession; +#ifdef VBOX_WITH_HGCM + /** The HGCM request we're waiting for to complete. */ + VMMDevHGCMRequestHeader volatile *pHGCMReq; +#endif +} VBOXGUESTWAIT; + + +/** + * VBox guest memory balloon. + */ +typedef struct VBOXGUESTMEMBALLOON +{ + /** Mutex protecting the members below from concurrent access. */ + RTSEMFASTMUTEX hMtx; + /** The current number of chunks in the balloon. */ + uint32_t cChunks; + /** The maximum number of chunks in the balloon (typically the amount of guest + * memory / chunksize). */ + uint32_t cMaxChunks; + /** This is true if we are using RTR0MemObjAllocPhysNC() / RTR0MemObjGetPagePhysAddr() + * and false otherwise. */ + bool fUseKernelAPI; + /** The current owner of the balloon. + * This is automatically assigned to the first session using the ballooning + * API and first released when the session closes. */ + PVBOXGUESTSESSION pOwner; + /** The pointer to the array of memory objects holding the chunks of the + * balloon. This array is cMaxChunks in size when present. */ + PRTR0MEMOBJ paMemObj; +} VBOXGUESTMEMBALLOON; +/** Pointer to a memory balloon. */ +typedef VBOXGUESTMEMBALLOON *PVBOXGUESTMEMBALLOON; + + +/** + * Per bit usage tracker for a uint32_t mask. + * + * Used for optimal handling of guest properties, mouse status and event filter. + */ +typedef struct VBOXGUESTBITUSAGETRACER +{ + /** Per bit usage counters. */ + uint32_t acPerBitUsage[32]; + /** The current mask according to acPerBitUsage. */ + uint32_t fMask; +} VBOXGUESTBITUSAGETRACER; +/** Pointer to a per bit usage tracker. */ +typedef VBOXGUESTBITUSAGETRACER *PVBOXGUESTBITUSAGETRACER; +/** Pointer to a const per bit usage tracker. */ +typedef VBOXGUESTBITUSAGETRACER const *PCVBOXGUESTBITUSAGETRACER; + + +/** + * VBox guest device (data) extension. + */ +typedef struct VBOXGUESTDEVEXT +{ + /** The base of the adapter I/O ports. */ + RTIOPORT IOPortBase; + /** Pointer to the mapping of the VMMDev adapter memory. */ + VMMDevMemory volatile *pVMMDevMemory; + /** The memory object reserving space for the guest mappings. */ + RTR0MEMOBJ hGuestMappings; + /** Spinlock protecting the signaling and resetting of the wait-for-event + * semaphores as well as the event acking in the ISR. */ + RTSPINLOCK EventSpinlock; + /** Preallocated VMMDevEvents for the IRQ handler. */ + VMMDevEvents *pIrqAckEvents; + /** The physical address of pIrqAckEvents. */ + RTCCPHYS PhysIrqAckEvents; + /** Wait-for-event list for threads waiting for multiple events + * (VBOXGUESTWAIT). */ + RTLISTANCHOR WaitList; +#ifdef VBOX_WITH_HGCM + /** Wait-for-event list for threads waiting on HGCM async completion + * (VBOXGUESTWAIT). + * + * The entire list is evaluated upon the arrival of an HGCM event, unlike + * the other lists which are only evaluated till the first thread has + * been woken up. */ + RTLISTANCHOR HGCMWaitList; +#endif +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP + /** List of wait-for-event entries that needs waking up + * (VBOXGUESTWAIT). */ + RTLISTANCHOR WakeUpList; +#endif + /** List of wait-for-event entries that has been woken up + * (VBOXGUESTWAIT). */ + RTLISTANCHOR WokenUpList; + /** List of free wait-for-event entries (VBOXGUESTWAIT). */ + RTLISTANCHOR FreeList; + /** Mask of pending events. */ + uint32_t volatile f32PendingEvents; + /** Current VMMDEV_EVENT_MOUSE_POSITION_CHANGED sequence number. + * Used to implement polling. */ + uint32_t volatile u32MousePosChangedSeq; + + /** Spinlock various items in the VBOXGUESTSESSION. */ + RTSPINLOCK SessionSpinlock; + /** List of guest sessions (VBOXGUESTSESSION). We currently traverse this + * but do not search it, so a list data type should be fine. Use under the + * #SessionSpinlock lock. */ + RTLISTANCHOR SessionList; + /** Number of session. */ + uint32_t cSessions; + /** Flag indicating whether logging to the release log + * is enabled. */ + bool fLoggingEnabled; + /** Memory balloon information for RTR0MemObjAllocPhysNC(). */ + VBOXGUESTMEMBALLOON MemBalloon; + /** Mouse notification callback function. */ + PFNVBOXGUESTMOUSENOTIFY pfnMouseNotifyCallback; + /** The callback argument for the mouse ntofication callback. */ + void *pvMouseNotifyCallbackArg; + + /** @name Host Event Filtering + * @{ */ + /** Events we won't permit anyone to filter out. */ + uint32_t fFixedEvents; + /** Usage counters for the host events. (Fixed events are not included.) */ + VBOXGUESTBITUSAGETRACER EventFilterTracker; + /** The event filter last reported to the host (UINT32_MAX on failure). */ + uint32_t fEventFilterHost; + /** @} */ + + /** @name Mouse Status + * @{ */ + /** Usage counters for the mouse statuses (VMMDEV_MOUSE_XXX). */ + VBOXGUESTBITUSAGETRACER MouseStatusTracker; + /** The mouse status last reported to the host (UINT32_MAX on failure). */ + uint32_t fMouseStatusHost; + /** @} */ + + /** @name Guest Capabilities + * @{ */ + /** Guest capabilities which have been set to "acquire" mode. This means + * that only one session can use them at a time, and that they will be + * automatically cleaned up if that session exits without doing so. + * + * Protected by VBOXGUESTDEVEXT::SessionSpinlock, but is unfortunately read + * without holding the lock in a couple of places. */ + uint32_t volatile fAcquireModeGuestCaps; + /** Guest capabilities which have been set to "set" mode. This just means + * that they have been blocked from ever being set to "acquire" mode. */ + uint32_t fSetModeGuestCaps; + /** Mask of all capabilities which are currently acquired by some session + * and as such reported to the host. */ + uint32_t fAcquiredGuestCaps; + /** Usage counters for guest capabilities in "set" mode. Indexed by + * capability bit number, one count per session using a capability. */ + VBOXGUESTBITUSAGETRACER SetGuestCapsTracker; + /** The guest capabilities last reported to the host (UINT32_MAX on failure). */ + uint32_t fGuestCapsHost; + /** @} */ + + /** Heartbeat timer which fires with interval + * cNsHearbeatInterval and its handler sends + * VMMDevReq_GuestHeartbeat to VMMDev. */ + PRTTIMER pHeartbeatTimer; + /** Heartbeat timer interval in nanoseconds. */ + uint64_t cNsHeartbeatInterval; + /** Preallocated VMMDevReq_GuestHeartbeat request. */ + VMMDevRequestHeader *pReqGuestHeartbeat; +} VBOXGUESTDEVEXT; +/** Pointer to the VBoxGuest driver data. */ +typedef VBOXGUESTDEVEXT *PVBOXGUESTDEVEXT; + + +/** + * The VBoxGuest per session data. + */ +typedef struct VBOXGUESTSESSION +{ + /** The list node. */ + RTLISTNODE ListNode; +#if defined(RT_OS_DARWIN) || defined(RT_OS_FREEBSD) || defined(RT_OS_OS2) || defined(RT_OS_SOLARIS) + /** Pointer to the next session with the same hash. */ + PVBOXGUESTSESSION pNextHash; +#endif +#if defined(RT_OS_OS2) + /** The system file number of this session. */ + uint16_t sfn; + uint16_t Alignment; /**< Alignment */ +#endif + /** The process (id) of the session. + * This is NIL if it's a kernel session. */ + RTPROCESS Process; + /** Which process this session is associated with. + * This is NIL if it's a kernel session. */ + RTR0PROCESS R0Process; + /** Pointer to the device extension. */ + PVBOXGUESTDEVEXT pDevExt; + +#ifdef VBOX_WITH_HGCM + /** Array containing HGCM client IDs associated with this session. + * This will be automatically disconnected when the session is closed. */ + uint32_t volatile aHGCMClientIds[64]; +#endif + /** The last consumed VMMDEV_EVENT_MOUSE_POSITION_CHANGED sequence number. + * Used to implement polling. */ + uint32_t volatile u32MousePosChangedSeq; + /** Host events requested by the session. + * An event type requested in any guest session will be added to the host + * filter. Protected by VBOXGUESTDEVEXT::SessionSpinlock. */ + uint32_t fEventFilter; + /** Guest capabilities held in "acquired" by this session. + * Protected by VBOXGUESTDEVEXT::SessionSpinlock, but is unfortunately read + * without holding the lock in a couple of places. */ + uint32_t volatile fAcquiredGuestCaps; + /** Guest capabilities in "set" mode for this session. + * These accumulated for sessions via VBOXGUESTDEVEXT::acGuestCapsSet and + * reported to the host. Protected by VBOXGUESTDEVEXT::SessionSpinlock. */ + uint32_t fCapabilities; + /** Mouse features supported. A feature enabled in any guest session will + * be enabled for the host. + * @note We invert the VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR feature in this + * bitmap. The logic of this is that the real feature is when the host + * cursor is not needed, and we tell the host it is not needed if any + * session explicitly fails to assert it. Storing it inverted simplifies + * the checks. + * Use under the VBOXGUESTDEVEXT#SessionSpinlock lock. */ + uint32_t fMouseStatus; +#ifdef RT_OS_DARWIN + /** Pointer to the associated org_virtualbox_VBoxGuestClient object. */ + void *pvVBoxGuestClient; + /** Whether this session has been opened or not. */ + bool fOpened; +#endif + /** Whether a CANCEL_ALL_WAITEVENTS is pending. This happens when + * CANCEL_ALL_WAITEVENTS is called, but no call to WAITEVENT is in process + * in the current session. In that case the next call will be interrupted + * at once. */ + bool volatile fPendingCancelWaitEvents; + /** Does this session belong to a root process or a user one? */ + bool fUserSession; +} VBOXGUESTSESSION; + +RT_C_DECLS_BEGIN + +int VGDrvCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase, void *pvMMIOBase, uint32_t cbMMIO, + VBOXOSTYPE enmOSType, uint32_t fEvents); +bool VGDrvCommonIsOurIRQ(PVBOXGUESTDEVEXT pDevExt); +bool VGDrvCommonISR(PVBOXGUESTDEVEXT pDevExt); +void VGDrvCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt); +int VGDrvCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType); +#ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP +void VGDrvCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt); +#endif + +int VGDrvCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession); +int VGDrvCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession); +void VGDrvCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession); + +int VGDrvCommonIoCtlFast(uintptr_t iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession); +int VGDrvCommonIoCtl(uintptr_t iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, + PVBGLREQHDR pReqHdr, size_t cbReq); + +/** + * ISR callback for notifying threads polling for mouse events. + * + * This is called at the end of the ISR, after leaving the event spinlock, if + * VMMDEV_EVENT_MOUSE_POSITION_CHANGED was raised by the host. + * + * @param pDevExt The device extension. + */ +void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt); + + +#ifdef VBOX_WITH_DPC_LATENCY_CHECKER +int VGDrvNtIOCtl_DpcLatencyChecker(void); +#endif + +#ifdef VBOXGUEST_MOUSE_NOTIFY_CAN_PREEMPT +int VGDrvNativeSetMouseNotifyCallback(PVBOXGUESTDEVEXT pDevExt, PVBGLIOCSETMOUSENOTIFYCALLBACK pNotify); +#endif + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibGenericRequest.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibGenericRequest.c @@ -0,0 +1,174 @@ +/* $Id: VBoxGuestR0LibGenericRequest.cpp $ */ +/** @file + * VBoxGuestLibR0 - Generic VMMDev request management. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" +#include +#include +#include +#include + + +DECLR0VBGL(int) VbglGR0Verify(const VMMDevRequestHeader *pReq, size_t cbReq) +{ + size_t cbReqExpected; + + if (RT_UNLIKELY(!pReq || cbReq < sizeof(VMMDevRequestHeader))) + { + dprintf(("VbglGR0Verify: Invalid parameter: pReq = %p, cbReq = %zu\n", pReq, cbReq)); + return VERR_INVALID_PARAMETER; + } + + if (RT_UNLIKELY(pReq->size > cbReq)) + { + dprintf(("VbglGR0Verify: request size %u > buffer size %zu\n", pReq->size, cbReq)); + return VERR_INVALID_PARAMETER; + } + + /* The request size must correspond to the request type. */ + cbReqExpected = vmmdevGetRequestSize(pReq->requestType); + if (RT_UNLIKELY(cbReq < cbReqExpected)) + { + dprintf(("VbglGR0Verify: buffer size %zu < expected size %zu\n", cbReq, cbReqExpected)); + return VERR_INVALID_PARAMETER; + } + + if (cbReqExpected == cbReq) + { + /* + * This is most likely a fixed size request, and in this case the + * request size must be also equal to the expected size. + */ + if (RT_UNLIKELY(pReq->size != cbReqExpected)) + { + dprintf(("VbglGR0Verify: request size %u != expected size %zu\n", pReq->size, cbReqExpected)); + return VERR_INVALID_PARAMETER; + } + + return VINF_SUCCESS; + } + + /* + * This can be a variable size request. Check the request type and limit the size + * to VMMDEV_MAX_VMMDEVREQ_SIZE, which is max size supported by the host. + * + * Note: Keep this list sorted for easier human lookup! + */ + if ( pReq->requestType == VMMDevReq_ChangeMemBalloon +#ifdef VBOX_WITH_64_BITS_GUESTS + || pReq->requestType == VMMDevReq_HGCMCall32 + || pReq->requestType == VMMDevReq_HGCMCall64 +#else + || pReq->requestType == VMMDevReq_HGCMCall +#endif + || pReq->requestType == VMMDevReq_RegisterSharedModule + || pReq->requestType == VMMDevReq_ReportGuestUserState + || pReq->requestType == VMMDevReq_LogString + || pReq->requestType == VMMDevReq_SetPointerShape + || pReq->requestType == VMMDevReq_VideoSetVisibleRegion) + { + if (RT_UNLIKELY(cbReq > VMMDEV_MAX_VMMDEVREQ_SIZE)) + { + dprintf(("VbglGR0Verify: VMMDevReq_LogString: buffer size %zu too big\n", cbReq)); + return VERR_BUFFER_OVERFLOW; /** @todo is this error code ok? */ + } + } + else + { + dprintf(("VbglGR0Verify: request size %u > buffer size %zu\n", pReq->size, cbReq)); + return VERR_IO_BAD_LENGTH; /** @todo is this error code ok? */ + } + + return VINF_SUCCESS; +} + +DECLR0VBGL(int) VbglR0GRAlloc(VMMDevRequestHeader **ppReq, size_t cbReq, VMMDevRequestType enmReqType) +{ + int rc = vbglR0Enter(); + if (RT_SUCCESS(rc)) + { + if ( ppReq + && cbReq >= sizeof(VMMDevRequestHeader) + && cbReq == (uint32_t)cbReq) + { + VMMDevRequestHeader *pReq = (VMMDevRequestHeader *)VbglR0PhysHeapAlloc((uint32_t)cbReq); + AssertMsgReturn(pReq, ("VbglR0GRAlloc: no memory (cbReq=%u)\n", cbReq), VERR_NO_MEMORY); + memset(pReq, 0xAA, cbReq); + + pReq->size = (uint32_t)cbReq; + pReq->version = VMMDEV_REQUEST_HEADER_VERSION; + pReq->requestType = enmReqType; + pReq->rc = VERR_GENERAL_FAILURE; + pReq->reserved1 = 0; + pReq->reserved2 = 0; + + *ppReq = pReq; + rc = VINF_SUCCESS; + } + else + { + dprintf(("VbglR0GRAlloc: Invalid parameter: ppReq=%p cbReq=%u\n", ppReq, cbReq)); + rc = VERR_INVALID_PARAMETER; + } + } + return rc; +} + +DECLR0VBGL(int) VbglR0GRPerform(VMMDevRequestHeader *pReq) +{ + int rc = vbglR0Enter(); + if (RT_SUCCESS(rc)) + { + if (pReq) + { + RTCCPHYS PhysAddr = VbglR0PhysHeapGetPhysAddr(pReq); + if ( PhysAddr != 0 + && PhysAddr < _4G) /* Port IO is 32 bit. */ + { + ASMOutU32(g_vbgldata.portVMMDev + VMMDEV_PORT_OFF_REQUEST, (uint32_t)PhysAddr); + /* Make the compiler aware that the host has changed memory. */ + ASMCompilerBarrier(); + rc = pReq->rc; + } + else + rc = VERR_VBGL_INVALID_ADDR; + } + else + rc = VERR_INVALID_PARAMETER; + } + return rc; +} + +DECLR0VBGL(void) VbglR0GRFree(VMMDevRequestHeader *pReq) +{ + int rc = vbglR0Enter(); + if (RT_SUCCESS(rc)) + VbglR0PhysHeapFree(pReq); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibHGCMInternal.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibHGCMInternal.c @@ -0,0 +1,1074 @@ +/* $Id: VBoxGuestR0LibHGCMInternal.cpp $ */ +/** @file + * VBoxGuestLib - Host-Guest Communication Manager internal functions, implemented by VBoxGuest + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP LOG_GROUP_HGCM + +#include "VBoxGuestR0LibInternal.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef VBGL_VBOXGUEST +# error "This file should only be part of the VBoxGuestR0LibBase library that is linked into VBoxGuest." +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/** The max parameter buffer size for a user request. */ +#define VBGLR0_MAX_HGCM_USER_PARM (24*_1M) +/** The max parameter buffer size for a kernel request. */ +#define VBGLR0_MAX_HGCM_KERNEL_PARM (16*_1M) +#if defined(RT_OS_LINUX) || defined(RT_OS_DARWIN) +/** Linux needs to use bounce buffers since RTR0MemObjLockUser has unwanted + * side effects. + * Darwin 32bit & 64bit also needs this because of 4GB/4GB user/kernel space. */ +# define USE_BOUNCE_BUFFERS +#endif + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Lock info structure used by VbglR0HGCMInternalCall and its helpers. + */ +struct VbglR0ParmInfo +{ + uint32_t cLockBufs; + struct + { + uint32_t iParm; + RTR0MEMOBJ hObj; +#ifdef USE_BOUNCE_BUFFERS + void *pvSmallBuf; +#endif + } aLockBufs[10]; +}; + + + +/* These functions can be only used by VBoxGuest. */ + +DECLR0VBGL(int) VbglR0HGCMInternalConnect(HGCMServiceLocation const *pLoc, HGCMCLIENTID *pidClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData) +{ + int rc; + if ( RT_VALID_PTR(pLoc) + && RT_VALID_PTR(pidClient) + && RT_VALID_PTR(pfnAsyncCallback)) + { + /* Allocate request */ + VMMDevHGCMConnect *pHGCMConnect = NULL; + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pHGCMConnect, sizeof(VMMDevHGCMConnect), VMMDevReq_HGCMConnect); + if (RT_SUCCESS(rc)) + { + /* Initialize request memory */ + pHGCMConnect->header.fu32Flags = 0; + + memcpy(&pHGCMConnect->loc, pLoc, sizeof(pHGCMConnect->loc)); + pHGCMConnect->u32ClientID = 0; + + /* Issue request */ + rc = VbglR0GRPerform (&pHGCMConnect->header.header); + if (RT_SUCCESS(rc)) + { + /* Check if host decides to process the request asynchronously. */ + if (rc == VINF_HGCM_ASYNC_EXECUTE) + { + /* Wait for request completion interrupt notification from host */ + pfnAsyncCallback(&pHGCMConnect->header, pvAsyncData, u32AsyncData); + } + + rc = pHGCMConnect->header.result; + if (RT_SUCCESS(rc)) + *pidClient = pHGCMConnect->u32ClientID; + } + VbglR0GRFree(&pHGCMConnect->header.header); + } + } + else + rc = VERR_INVALID_PARAMETER; + return rc; +} + + +DECLR0VBGL(int) VbglR0HGCMInternalDisconnect(HGCMCLIENTID idClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData) +{ + int rc; + if ( idClient != 0 + && pfnAsyncCallback) + { + /* Allocate request */ + VMMDevHGCMDisconnect *pHGCMDisconnect = NULL; + rc = VbglR0GRAlloc ((VMMDevRequestHeader **)&pHGCMDisconnect, sizeof (VMMDevHGCMDisconnect), VMMDevReq_HGCMDisconnect); + if (RT_SUCCESS(rc)) + { + /* Initialize request memory */ + pHGCMDisconnect->header.fu32Flags = 0; + + pHGCMDisconnect->u32ClientID = idClient; + + /* Issue request */ + rc = VbglR0GRPerform(&pHGCMDisconnect->header.header); + if (RT_SUCCESS(rc)) + { + /* Check if host decides to process the request asynchronously. */ + if (rc == VINF_HGCM_ASYNC_EXECUTE) + { + /* Wait for request completion interrupt notification from host */ + pfnAsyncCallback(&pHGCMDisconnect->header, pvAsyncData, u32AsyncData); + } + + rc = pHGCMDisconnect->header.result; + } + + VbglR0GRFree(&pHGCMDisconnect->header.header); + } + } + else + rc = VERR_INVALID_PARAMETER; + return rc; +} + + +/** + * Preprocesses the HGCM call, validating and locking/buffering parameters. + * + * @returns VBox status code. + * + * @param pCallInfo The call info. + * @param cbCallInfo The size of the call info structure. + * @param fIsUser Is it a user request or kernel request. + * @param pcbExtra Where to return the extra request space needed for + * physical page lists. + */ +static int vbglR0HGCMInternalPreprocessCall(PCVBGLIOCHGCMCALL pCallInfo, uint32_t cbCallInfo, + bool fIsUser, struct VbglR0ParmInfo *pParmInfo, size_t *pcbExtra) +{ + HGCMFunctionParameter const *pSrcParm = VBGL_HGCM_GET_CALL_PARMS(pCallInfo); + uint32_t const cParms = pCallInfo->cParms; + uint32_t iParm; + uint32_t cb; + + /* + * Lock down the any linear buffers so we can get their addresses + * and figure out how much extra storage we need for page lists. + * + * Note! With kernel mode users we can be assertive. For user mode users + * we should just (debug) log it and fail without any fanfare. + */ + *pcbExtra = 0; + pParmInfo->cLockBufs = 0; + for (iParm = 0; iParm < cParms; iParm++, pSrcParm++) + { + switch (pSrcParm->type) + { + case VMMDevHGCMParmType_32bit: + Log4(("GstHGCMCall: parm=%u type=32bit: %#010x\n", iParm, pSrcParm->u.value32)); + break; + + case VMMDevHGCMParmType_64bit: + Log4(("GstHGCMCall: parm=%u type=64bit: %#018RX64\n", iParm, pSrcParm->u.value64)); + break; + + case VMMDevHGCMParmType_PageList: + if (fIsUser) + return VERR_INVALID_PARAMETER; + cb = pSrcParm->u.PageList.size; + if (cb) + { + uint32_t off = pSrcParm->u.PageList.offset; + HGCMPageListInfo *pPgLst; + uint32_t cPages; + uint32_t u32; + + AssertMsgReturn(cb <= VBGLR0_MAX_HGCM_KERNEL_PARM, ("%#x > %#x\n", cb, VBGLR0_MAX_HGCM_KERNEL_PARM), + VERR_OUT_OF_RANGE); + AssertMsgReturn( off >= cParms * sizeof(HGCMFunctionParameter) + && off <= cbCallInfo - sizeof(HGCMPageListInfo), + ("offset=%#x cParms=%#x cbCallInfo=%#x\n", off, cParms, cbCallInfo), + VERR_INVALID_PARAMETER); + + pPgLst = (HGCMPageListInfo *)((uint8_t *)pCallInfo + off); + cPages = pPgLst->cPages; + u32 = RT_OFFSETOF(HGCMPageListInfo, aPages[cPages]) + off; + AssertMsgReturn(u32 <= cbCallInfo, + ("u32=%#x (cPages=%#x offset=%#x) cbCallInfo=%#x\n", u32, cPages, off, cbCallInfo), + VERR_INVALID_PARAMETER); + AssertMsgReturn(pPgLst->offFirstPage < PAGE_SIZE, ("#x\n", pPgLst->offFirstPage), VERR_INVALID_PARAMETER); + u32 = RT_ALIGN_32(pPgLst->offFirstPage + cb, PAGE_SIZE) >> PAGE_SHIFT; + AssertMsgReturn(cPages == u32, ("cPages=%#x u32=%#x\n", cPages, u32), VERR_INVALID_PARAMETER); + AssertMsgReturn(VBOX_HGCM_F_PARM_ARE_VALID(pPgLst->flags), ("%#x\n", pPgLst->flags), VERR_INVALID_PARAMETER); + Log4(("GstHGCMCall: parm=%u type=pglst: cb=%#010x cPgs=%u offPg0=%#x flags=%#x\n", + iParm, cb, cPages, pPgLst->offFirstPage, pPgLst->flags)); + u32 = cPages; + while (u32-- > 0) + { + Log4(("GstHGCMCall: pg#%u=%RHp\n", u32, pPgLst->aPages[u32])); + AssertMsgReturn(!(pPgLst->aPages[u32] & (PAGE_OFFSET_MASK | UINT64_C(0xfff0000000000000))), + ("pg#%u=%RHp\n", u32, pPgLst->aPages[u32]), + VERR_INVALID_PARAMETER); + } + + *pcbExtra += RT_OFFSETOF(HGCMPageListInfo, aPages[pPgLst->cPages]); + } + else + Log4(("GstHGCMCall: parm=%u type=pglst: cb=0\n", iParm)); + break; + + case VMMDevHGCMParmType_LinAddr_Locked_In: + case VMMDevHGCMParmType_LinAddr_Locked_Out: + case VMMDevHGCMParmType_LinAddr_Locked: + if (fIsUser) + return VERR_INVALID_PARAMETER; + if (!VBGLR0_CAN_USE_PHYS_PAGE_LIST(/*a_fLocked =*/ true)) + { + cb = pSrcParm->u.Pointer.size; + AssertMsgReturn(cb <= VBGLR0_MAX_HGCM_KERNEL_PARM, ("%#x > %#x\n", cb, VBGLR0_MAX_HGCM_KERNEL_PARM), + VERR_OUT_OF_RANGE); + if (cb != 0) + Log4(("GstHGCMCall: parm=%u type=%#x: cb=%#010x pv=%p\n", + iParm, pSrcParm->type, cb, pSrcParm->u.Pointer.u.linearAddr)); + else + Log4(("GstHGCMCall: parm=%u type=%#x: cb=0\n", iParm, pSrcParm->type)); + break; + } + RT_FALL_THRU(); + + case VMMDevHGCMParmType_LinAddr_In: + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + cb = pSrcParm->u.Pointer.size; + if (cb != 0) + { +#ifdef USE_BOUNCE_BUFFERS + void *pvSmallBuf = NULL; +#endif + uint32_t iLockBuf = pParmInfo->cLockBufs; + RTR0MEMOBJ hObj; + int rc; + uint32_t fAccess = pSrcParm->type == VMMDevHGCMParmType_LinAddr_In + || pSrcParm->type == VMMDevHGCMParmType_LinAddr_Locked_In + ? RTMEM_PROT_READ + : RTMEM_PROT_READ | RTMEM_PROT_WRITE; + + AssertReturn(iLockBuf < RT_ELEMENTS(pParmInfo->aLockBufs), VERR_INVALID_PARAMETER); + if (!fIsUser) + { + AssertMsgReturn(cb <= VBGLR0_MAX_HGCM_KERNEL_PARM, ("%#x > %#x\n", cb, VBGLR0_MAX_HGCM_KERNEL_PARM), + VERR_OUT_OF_RANGE); + rc = RTR0MemObjLockKernel(&hObj, (void *)pSrcParm->u.Pointer.u.linearAddr, cb, fAccess); + if (RT_FAILURE(rc)) + { + Log(("GstHGCMCall: id=%#x fn=%u parm=%u RTR0MemObjLockKernel(,%p,%#x) -> %Rrc\n", + pCallInfo->u32ClientID, pCallInfo->u32Function, iParm, pSrcParm->u.Pointer.u.linearAddr, cb, rc)); + return rc; + } + Log3(("GstHGCMCall: parm=%u type=%#x: cb=%#010x pv=%p locked kernel -> %p\n", + iParm, pSrcParm->type, cb, pSrcParm->u.Pointer.u.linearAddr, hObj)); + } + else if (cb > VBGLR0_MAX_HGCM_USER_PARM) + { + Log(("GstHGCMCall: id=%#x fn=%u parm=%u pv=%p cb=%#x > %#x -> out of range\n", + pCallInfo->u32ClientID, pCallInfo->u32Function, iParm, pSrcParm->u.Pointer.u.linearAddr, + cb, VBGLR0_MAX_HGCM_USER_PARM)); + return VERR_OUT_OF_RANGE; + } + else + { +#ifndef USE_BOUNCE_BUFFERS + rc = RTR0MemObjLockUser(&hObj, (RTR3PTR)pSrcParm->u.Pointer.u.linearAddr, cb, fAccess, NIL_RTR0PROCESS); + if (RT_FAILURE(rc)) + { + Log(("GstHGCMCall: id=%#x fn=%u parm=%u RTR0MemObjLockUser(,%p,%#x,nil) -> %Rrc\n", + pCallInfo->u32ClientID, pCallInfo->u32Function, iParm, pSrcParm->u.Pointer.u.linearAddr, cb, rc)); + return rc; + } + Log3(("GstHGCMCall: parm=%u type=%#x: cb=%#010x pv=%p locked user -> %p\n", + iParm, pSrcParm->type, cb, pSrcParm->u.Pointer.u.linearAddr, hObj)); + +#else /* USE_BOUNCE_BUFFERS */ + /* + * This is a bit massive, but we don't want to waste a + * whole page for a 3 byte string buffer (guest props). + * + * The threshold is ASSUMING sizeof(RTMEMHDR) == 16 and + * the system is using some power of two allocator. + */ + /** @todo A more efficient strategy would be to combine buffers. However it + * is probably going to be more massive than the current code, so + * it can wait till later. */ + bool fCopyIn = pSrcParm->type != VMMDevHGCMParmType_LinAddr_Out + && pSrcParm->type != VMMDevHGCMParmType_LinAddr_Locked_Out; + if (cb <= PAGE_SIZE / 2 - 16) + { + pvSmallBuf = fCopyIn ? RTMemTmpAlloc(cb) : RTMemTmpAllocZ(cb); + if (RT_UNLIKELY(!pvSmallBuf)) + return VERR_NO_MEMORY; + if (fCopyIn) + { + rc = RTR0MemUserCopyFrom(pvSmallBuf, pSrcParm->u.Pointer.u.linearAddr, cb); + if (RT_FAILURE(rc)) + { + RTMemTmpFree(pvSmallBuf); + Log(("GstHGCMCall: id=%#x fn=%u parm=%u RTR0MemUserCopyFrom(,%p,%#x) -> %Rrc\n", + pCallInfo->u32ClientID, pCallInfo->u32Function, iParm, + pSrcParm->u.Pointer.u.linearAddr, cb, rc)); + return rc; + } + } + rc = RTR0MemObjLockKernel(&hObj, pvSmallBuf, cb, fAccess); + if (RT_FAILURE(rc)) + { + RTMemTmpFree(pvSmallBuf); + Log(("GstHGCMCall: RTR0MemObjLockKernel failed for small buffer: rc=%Rrc pvSmallBuf=%p cb=%#x\n", + rc, pvSmallBuf, cb)); + return rc; + } + Log3(("GstHGCMCall: parm=%u type=%#x: cb=%#010x pv=%p small buffer %p -> %p\n", + iParm, pSrcParm->type, cb, pSrcParm->u.Pointer.u.linearAddr, pvSmallBuf, hObj)); + } + else + { + rc = RTR0MemObjAllocPage(&hObj, cb, false /*fExecutable*/); + if (RT_FAILURE(rc)) + return rc; + if (!fCopyIn) + memset(RTR0MemObjAddress(hObj), '\0', cb); + else + { + rc = RTR0MemUserCopyFrom(RTR0MemObjAddress(hObj), pSrcParm->u.Pointer.u.linearAddr, cb); + if (RT_FAILURE(rc)) + { + RTR0MemObjFree(hObj, false /*fFreeMappings*/); + Log(("GstHGCMCall: id=%#x fn=%u parm=%u RTR0MemUserCopyFrom(,%p,%#x) -> %Rrc\n", + pCallInfo->u32ClientID, pCallInfo->u32Function, iParm, + pSrcParm->u.Pointer.u.linearAddr, cb, rc)); + return rc; + } + } + Log3(("GstHGCMCall: parm=%u type=%#x: cb=%#010x pv=%p big buffer -> %p\n", + iParm, pSrcParm->type, cb, pSrcParm->u.Pointer.u.linearAddr, hObj)); + } +#endif /* USE_BOUNCE_BUFFERS */ + } + + pParmInfo->aLockBufs[iLockBuf].iParm = iParm; + pParmInfo->aLockBufs[iLockBuf].hObj = hObj; +#ifdef USE_BOUNCE_BUFFERS + pParmInfo->aLockBufs[iLockBuf].pvSmallBuf = pvSmallBuf; +#endif + pParmInfo->cLockBufs = iLockBuf + 1; + + if (VBGLR0_CAN_USE_PHYS_PAGE_LIST(/*a_fLocked =*/ false)) + { + size_t const cPages = RTR0MemObjSize(hObj) >> PAGE_SHIFT; + *pcbExtra += RT_OFFSETOF(HGCMPageListInfo, aPages[cPages]); + } + } + else + Log4(("GstHGCMCall: parm=%u type=%#x: cb=0\n", iParm, pSrcParm->type)); + break; + + default: + return VERR_INVALID_PARAMETER; + } + } + + return VINF_SUCCESS; +} + + +/** + * Translates locked linear address to the normal type. + * The locked types are only for the guest side and not handled by the host. + * + * @returns normal linear address type. + * @param enmType The type. + */ +static HGCMFunctionParameterType vbglR0HGCMInternalConvertLinAddrType(HGCMFunctionParameterType enmType) +{ + switch (enmType) + { + case VMMDevHGCMParmType_LinAddr_Locked_In: + return VMMDevHGCMParmType_LinAddr_In; + case VMMDevHGCMParmType_LinAddr_Locked_Out: + return VMMDevHGCMParmType_LinAddr_Out; + case VMMDevHGCMParmType_LinAddr_Locked: + return VMMDevHGCMParmType_LinAddr; + default: + return enmType; + } +} + + +/** + * Translates linear address types to page list direction flags. + * + * @returns page list flags. + * @param enmType The type. + */ +static uint32_t vbglR0HGCMInternalLinAddrTypeToPageListFlags(HGCMFunctionParameterType enmType) +{ + switch (enmType) + { + case VMMDevHGCMParmType_LinAddr_In: + case VMMDevHGCMParmType_LinAddr_Locked_In: + return VBOX_HGCM_F_PARM_DIRECTION_TO_HOST; + + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr_Locked_Out: + return VBOX_HGCM_F_PARM_DIRECTION_FROM_HOST; + + default: AssertFailed(); + case VMMDevHGCMParmType_LinAddr: + case VMMDevHGCMParmType_LinAddr_Locked: + return VBOX_HGCM_F_PARM_DIRECTION_BOTH; + } +} + + +/** + * Initializes the call request that we're sending to the host. + * + * @returns VBox status code. + * + * @param pCallInfo The call info. + * @param cbCallInfo The size of the call info structure. + * @param fIsUser Is it a user request or kernel request. + * @param pcbExtra Where to return the extra request space needed for + * physical page lists. + */ +static void vbglR0HGCMInternalInitCall(VMMDevHGCMCall *pHGCMCall, PCVBGLIOCHGCMCALL pCallInfo, + uint32_t cbCallInfo, bool fIsUser, struct VbglR0ParmInfo *pParmInfo) +{ + HGCMFunctionParameter const *pSrcParm = VBGL_HGCM_GET_CALL_PARMS(pCallInfo); + HGCMFunctionParameter *pDstParm = VMMDEV_HGCM_CALL_PARMS(pHGCMCall); + uint32_t const cParms = pCallInfo->cParms; + uint32_t offExtra = (uint32_t)((uintptr_t)(pDstParm + cParms) - (uintptr_t)pHGCMCall); + uint32_t iLockBuf = 0; + uint32_t iParm; + RT_NOREF1(cbCallInfo); +#ifndef USE_BOUNCE_BUFFERS + RT_NOREF1(fIsUser); +#endif + + /* + * The call request headers. + */ + pHGCMCall->header.fu32Flags = 0; + pHGCMCall->header.result = VINF_SUCCESS; + + pHGCMCall->u32ClientID = pCallInfo->u32ClientID; + pHGCMCall->u32Function = pCallInfo->u32Function; + pHGCMCall->cParms = cParms; + + /* + * The parameters. + */ + for (iParm = 0; iParm < cParms; iParm++, pSrcParm++, pDstParm++) + { + switch (pSrcParm->type) + { + case VMMDevHGCMParmType_32bit: + case VMMDevHGCMParmType_64bit: + *pDstParm = *pSrcParm; + break; + + case VMMDevHGCMParmType_PageList: + pDstParm->type = VMMDevHGCMParmType_PageList; + pDstParm->u.PageList.size = pSrcParm->u.PageList.size; + if (pSrcParm->u.PageList.size) + { + HGCMPageListInfo const *pSrcPgLst = (HGCMPageListInfo *)((uint8_t *)pCallInfo + pSrcParm->u.PageList.offset); + HGCMPageListInfo *pDstPgLst = (HGCMPageListInfo *)((uint8_t *)pHGCMCall + offExtra); + uint32_t const cPages = pSrcPgLst->cPages; + uint32_t iPage; + + pDstParm->u.PageList.offset = offExtra; + pDstPgLst->flags = pSrcPgLst->flags; + pDstPgLst->offFirstPage = pSrcPgLst->offFirstPage; + pDstPgLst->cPages = cPages; + for (iPage = 0; iPage < cPages; iPage++) + pDstPgLst->aPages[iPage] = pSrcPgLst->aPages[iPage]; + + offExtra += RT_OFFSETOF(HGCMPageListInfo, aPages[cPages]); + } + else + pDstParm->u.PageList.offset = 0; + break; + + case VMMDevHGCMParmType_LinAddr_Locked_In: + case VMMDevHGCMParmType_LinAddr_Locked_Out: + case VMMDevHGCMParmType_LinAddr_Locked: + if (!VBGLR0_CAN_USE_PHYS_PAGE_LIST(/*a_fLocked =*/ true)) + { + *pDstParm = *pSrcParm; + pDstParm->type = vbglR0HGCMInternalConvertLinAddrType(pSrcParm->type); + break; + } + RT_FALL_THRU(); + + case VMMDevHGCMParmType_LinAddr_In: + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + if (pSrcParm->u.Pointer.size != 0) + { +#ifdef USE_BOUNCE_BUFFERS + void *pvSmallBuf = pParmInfo->aLockBufs[iLockBuf].pvSmallBuf; +#endif + RTR0MEMOBJ hObj = pParmInfo->aLockBufs[iLockBuf].hObj; + Assert(iParm == pParmInfo->aLockBufs[iLockBuf].iParm); + + if (VBGLR0_CAN_USE_PHYS_PAGE_LIST(/*a_fLocked =*/ false)) + { + HGCMPageListInfo *pDstPgLst = (HGCMPageListInfo *)((uint8_t *)pHGCMCall + offExtra); + size_t const cPages = RTR0MemObjSize(hObj) >> PAGE_SHIFT; + size_t iPage; + + pDstParm->type = VMMDevHGCMParmType_PageList; + pDstParm->u.PageList.size = pSrcParm->u.Pointer.size; + pDstParm->u.PageList.offset = offExtra; + pDstPgLst->flags = vbglR0HGCMInternalLinAddrTypeToPageListFlags(pSrcParm->type); +#ifdef USE_BOUNCE_BUFFERS + if (fIsUser) + pDstPgLst->offFirstPage = (uintptr_t)pvSmallBuf & PAGE_OFFSET_MASK; + else +#endif + pDstPgLst->offFirstPage = pSrcParm->u.Pointer.u.linearAddr & PAGE_OFFSET_MASK; + pDstPgLst->cPages = (uint32_t)cPages; Assert(pDstPgLst->cPages == cPages); + for (iPage = 0; iPage < cPages; iPage++) + { + pDstPgLst->aPages[iPage] = RTR0MemObjGetPagePhysAddr(hObj, iPage); + Assert(pDstPgLst->aPages[iPage] != NIL_RTHCPHYS); + } + + offExtra += RT_OFFSETOF(HGCMPageListInfo, aPages[cPages]); + } + else + { + pDstParm->type = vbglR0HGCMInternalConvertLinAddrType(pSrcParm->type); + pDstParm->u.Pointer.size = pSrcParm->u.Pointer.size; +#ifdef USE_BOUNCE_BUFFERS + if (fIsUser) + pDstParm->u.Pointer.u.linearAddr = pvSmallBuf + ? (uintptr_t)pvSmallBuf + : (uintptr_t)RTR0MemObjAddress(hObj); + else +#endif + pDstParm->u.Pointer.u.linearAddr = pSrcParm->u.Pointer.u.linearAddr; + } + iLockBuf++; + } + else + { + pDstParm->type = vbglR0HGCMInternalConvertLinAddrType(pSrcParm->type); + pDstParm->u.Pointer.size = 0; + pDstParm->u.Pointer.u.linearAddr = 0; + } + break; + + default: + AssertFailed(); + pDstParm->type = VMMDevHGCMParmType_Invalid; + break; + } + } +} + + +/** + * Performs the call and completion wait. + * + * @returns VBox status code of this operation, not necessarily the call. + * + * @param pHGCMCall The HGCM call info. + * @param pfnAsyncCallback The async callback that will wait for the call + * to complete. + * @param pvAsyncData Argument for the callback. + * @param u32AsyncData Argument for the callback. + * @param pfLeakIt Where to return the leak it / free it, + * indicator. Cancellation fun. + */ +static int vbglR0HGCMInternalDoCall(VMMDevHGCMCall *pHGCMCall, PFNVBGLHGCMCALLBACK pfnAsyncCallback, + void *pvAsyncData, uint32_t u32AsyncData, bool *pfLeakIt) +{ + int rc; + + Log(("calling VbglR0GRPerform\n")); + rc = VbglR0GRPerform(&pHGCMCall->header.header); + Log(("VbglR0GRPerform rc = %Rrc (header rc=%d)\n", rc, pHGCMCall->header.result)); + + /* + * If the call failed, but as a result of the request itself, then pretend + * success. Upper layers will interpret the result code in the packet. + */ + if ( RT_FAILURE(rc) + && rc == pHGCMCall->header.result) + { + Assert(pHGCMCall->header.fu32Flags & VBOX_HGCM_REQ_DONE); + rc = VINF_SUCCESS; + } + + /* + * Check if host decides to process the request asynchronously, + * if so, we wait for it to complete using the caller supplied callback. + */ + *pfLeakIt = false; + if (rc == VINF_HGCM_ASYNC_EXECUTE) + { + Log(("Processing HGCM call asynchronously\n")); + rc = pfnAsyncCallback(&pHGCMCall->header, pvAsyncData, u32AsyncData); + if (pHGCMCall->header.fu32Flags & VBOX_HGCM_REQ_DONE) + { + Assert(!(pHGCMCall->header.fu32Flags & VBOX_HGCM_REQ_CANCELLED)); + rc = VINF_SUCCESS; + } + else + { + /* + * The request didn't complete in time or the call was interrupted, + * the RC from the callback indicates which. Try cancel the request. + * + * This is a bit messy because we're racing request completion. Sorry. + */ + /** @todo It would be nice if we could use the waiter callback to do further + * waiting in case of a completion race. If it wasn't for WINNT having its own + * version of all that stuff, I would've done it already. */ + VMMDevHGCMCancel2 *pCancelReq; + int rc2 = VbglR0GRAlloc((VMMDevRequestHeader **)&pCancelReq, sizeof(*pCancelReq), VMMDevReq_HGCMCancel2); + if (RT_SUCCESS(rc2)) + { + pCancelReq->physReqToCancel = VbglR0PhysHeapGetPhysAddr(pHGCMCall); + rc2 = VbglR0GRPerform(&pCancelReq->header); + VbglR0GRFree(&pCancelReq->header); + } +#if 1 /** @todo ADDVER: Remove this on next minor version change. */ + if (rc2 == VERR_NOT_IMPLEMENTED) + { + /* host is too old, or we're out of heap. */ + pHGCMCall->header.fu32Flags |= VBOX_HGCM_REQ_CANCELLED; + pHGCMCall->header.header.requestType = VMMDevReq_HGCMCancel; + rc2 = VbglR0GRPerform(&pHGCMCall->header.header); + if (rc2 == VERR_INVALID_PARAMETER) + rc2 = VERR_NOT_FOUND; + else if (RT_SUCCESS(rc)) + RTThreadSleep(1); + } +#endif + if (RT_SUCCESS(rc)) rc = VERR_INTERRUPTED; /** @todo weed this out from the WINNT VBoxGuest code. */ + if (RT_SUCCESS(rc2)) + { + Log(("vbglR0HGCMInternalDoCall: successfully cancelled\n")); + pHGCMCall->header.fu32Flags |= VBOX_HGCM_REQ_CANCELLED; + } + else + { + /* + * Wait for a bit while the host (hopefully) completes it. + */ + uint64_t u64Start = RTTimeSystemMilliTS(); + uint32_t cMilliesToWait = rc2 == VERR_NOT_FOUND || rc2 == VERR_SEM_DESTROYED ? 500 : 2000; + uint64_t cElapsed = 0; + if (rc2 != VERR_NOT_FOUND) + { + static unsigned s_cErrors = 0; + if (s_cErrors++ < 32) + LogRel(("vbglR0HGCMInternalDoCall: Failed to cancel the HGCM call on %Rrc: rc2=%Rrc\n", rc, rc2)); + } + else + Log(("vbglR0HGCMInternalDoCall: Cancel race rc=%Rrc rc2=%Rrc\n", rc, rc2)); + + do + { + ASMCompilerBarrier(); /* paranoia */ + if (pHGCMCall->header.fu32Flags & VBOX_HGCM_REQ_DONE) + break; + RTThreadSleep(1); + cElapsed = RTTimeSystemMilliTS() - u64Start; + } while (cElapsed < cMilliesToWait); + + ASMCompilerBarrier(); /* paranoia^2 */ + if (pHGCMCall->header.fu32Flags & VBOX_HGCM_REQ_DONE) + rc = VINF_SUCCESS; + else + { + LogRel(("vbglR0HGCMInternalDoCall: Leaking %u bytes. Pending call to %u with %u parms. (rc2=%Rrc)\n", + pHGCMCall->header.header.size, pHGCMCall->u32Function, pHGCMCall->cParms, rc2)); + *pfLeakIt = true; + } + Log(("vbglR0HGCMInternalDoCall: Cancel race ended with rc=%Rrc (rc2=%Rrc) after %llu ms\n", rc, rc2, cElapsed)); + } + } + } + + Log(("GstHGCMCall: rc=%Rrc result=%Rrc fu32Flags=%#x fLeakIt=%d\n", + rc, pHGCMCall->header.result, pHGCMCall->header.fu32Flags, *pfLeakIt)); + return rc; +} + + +/** + * Copies the result of the call back to the caller info structure and user + * buffers (if using bounce buffers). + * + * @returns rc, unless RTR0MemUserCopyTo fails. + * @param pCallInfo Call info structure to update. + * @param pHGCMCall HGCM call request. + * @param pParmInfo Parameter locking/buffering info. + * @param fIsUser Is it a user (true) or kernel request. + * @param rc The current result code. Passed along to + * preserve informational status codes. + */ +static int vbglR0HGCMInternalCopyBackResult(PVBGLIOCHGCMCALL pCallInfo, VMMDevHGCMCall const *pHGCMCall, + struct VbglR0ParmInfo *pParmInfo, bool fIsUser, int rc) +{ + HGCMFunctionParameter const *pSrcParm = VMMDEV_HGCM_CALL_PARMS(pHGCMCall); + HGCMFunctionParameter *pDstParm = VBGL_HGCM_GET_CALL_PARMS(pCallInfo); + uint32_t const cParms = pCallInfo->cParms; +#ifdef USE_BOUNCE_BUFFERS + uint32_t iLockBuf = 0; +#endif + uint32_t iParm; + RT_NOREF1(pParmInfo); +#ifndef USE_BOUNCE_BUFFERS + RT_NOREF1(fIsUser); +#endif + + /* + * The call result. + */ + pCallInfo->Hdr.rc = pHGCMCall->header.result; + + /* + * Copy back parameters. + */ + for (iParm = 0; iParm < cParms; iParm++, pSrcParm++, pDstParm++) + { + switch (pDstParm->type) + { + case VMMDevHGCMParmType_32bit: + case VMMDevHGCMParmType_64bit: + *pDstParm = *pSrcParm; + break; + + case VMMDevHGCMParmType_PageList: + pDstParm->u.PageList.size = pSrcParm->u.PageList.size; + break; + + case VMMDevHGCMParmType_LinAddr_Locked_In: + case VMMDevHGCMParmType_LinAddr_In: +#ifdef USE_BOUNCE_BUFFERS + if ( fIsUser + && iLockBuf < pParmInfo->cLockBufs + && iParm == pParmInfo->aLockBufs[iLockBuf].iParm) + iLockBuf++; +#endif + pDstParm->u.Pointer.size = pSrcParm->u.Pointer.size; + break; + + case VMMDevHGCMParmType_LinAddr_Locked_Out: + case VMMDevHGCMParmType_LinAddr_Locked: + if (!VBGLR0_CAN_USE_PHYS_PAGE_LIST(/*a_fLocked =*/ true)) + { + pDstParm->u.Pointer.size = pSrcParm->u.Pointer.size; + break; + } + RT_FALL_THRU(); + + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + { +#ifdef USE_BOUNCE_BUFFERS + if (fIsUser) + { + size_t cbOut = RT_MIN(pSrcParm->u.Pointer.size, pDstParm->u.Pointer.size); + if (cbOut) + { + int rc2; + Assert(pParmInfo->aLockBufs[iLockBuf].iParm == iParm); + rc2 = RTR0MemUserCopyTo((RTR3PTR)pDstParm->u.Pointer.u.linearAddr, + pParmInfo->aLockBufs[iLockBuf].pvSmallBuf + ? pParmInfo->aLockBufs[iLockBuf].pvSmallBuf + : RTR0MemObjAddress(pParmInfo->aLockBufs[iLockBuf].hObj), + cbOut); + if (RT_FAILURE(rc2)) + return rc2; + iLockBuf++; + } + else if ( iLockBuf < pParmInfo->cLockBufs + && iParm == pParmInfo->aLockBufs[iLockBuf].iParm) + iLockBuf++; + } +#endif + pDstParm->u.Pointer.size = pSrcParm->u.Pointer.size; + break; + } + + default: + AssertFailed(); + rc = VERR_INTERNAL_ERROR_4; + break; + } + } + +#ifdef USE_BOUNCE_BUFFERS + Assert(!fIsUser || pParmInfo->cLockBufs == iLockBuf); +#endif + return rc; +} + + +DECLR0VBGL(int) VbglR0HGCMInternalCall(PVBGLIOCHGCMCALL pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData) +{ + bool fIsUser = (fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_USER; + struct VbglR0ParmInfo ParmInfo; + size_t cbExtra; + int rc; + + /* + * Basic validation. + */ + AssertMsgReturn( !pCallInfo + || !pfnAsyncCallback + || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS + || !(fFlags & ~VBGLR0_HGCMCALL_F_MODE_MASK), + ("pCallInfo=%p pfnAsyncCallback=%p fFlags=%#x\n", pCallInfo, pfnAsyncCallback, fFlags), + VERR_INVALID_PARAMETER); + AssertReturn( cbCallInfo >= sizeof(VBGLIOCHGCMCALL) + || cbCallInfo >= pCallInfo->cParms * sizeof(HGCMFunctionParameter), + VERR_INVALID_PARAMETER); + + Log(("GstHGCMCall: u32ClientID=%#x u32Function=%u cParms=%u cbCallInfo=%#x fFlags=%#x\n", + pCallInfo->u32ClientID, pCallInfo->u32ClientID, pCallInfo->u32Function, pCallInfo->cParms, cbCallInfo, fFlags)); + + /* + * Validate, lock and buffer the parameters for the call. + * This will calculate the amount of extra space for physical page list. + */ + rc = vbglR0HGCMInternalPreprocessCall(pCallInfo, cbCallInfo, fIsUser, &ParmInfo, &cbExtra); + if (RT_SUCCESS(rc)) + { + /* + * Allocate the request buffer and recreate the call request. + */ + VMMDevHGCMCall *pHGCMCall; + rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pHGCMCall, + sizeof(VMMDevHGCMCall) + pCallInfo->cParms * sizeof(HGCMFunctionParameter) + cbExtra, + VMMDevReq_HGCMCall); + if (RT_SUCCESS(rc)) + { + bool fLeakIt; + vbglR0HGCMInternalInitCall(pHGCMCall, pCallInfo, cbCallInfo, fIsUser, &ParmInfo); + + /* + * Perform the call. + */ + rc = vbglR0HGCMInternalDoCall(pHGCMCall, pfnAsyncCallback, pvAsyncData, u32AsyncData, &fLeakIt); + if (RT_SUCCESS(rc)) + { + /* + * Copy back the result (parameters and buffers that changed). + */ + rc = vbglR0HGCMInternalCopyBackResult(pCallInfo, pHGCMCall, &ParmInfo, fIsUser, rc); + } + else + { + if ( rc != VERR_INTERRUPTED + && rc != VERR_TIMEOUT) + { + static unsigned s_cErrors = 0; + if (s_cErrors++ < 32) + LogRel(("VbglR0HGCMInternalCall: vbglR0HGCMInternalDoCall failed. rc=%Rrc\n", rc)); + } + } + + if (!fLeakIt) + VbglR0GRFree(&pHGCMCall->header.header); + } + } + else + LogRel(("VbglR0HGCMInternalCall: vbglR0HGCMInternalPreprocessCall failed. rc=%Rrc\n", rc)); + + /* + * Release locks and free bounce buffers. + */ + if (ParmInfo.cLockBufs) + while (ParmInfo.cLockBufs-- > 0) + { + RTR0MemObjFree(ParmInfo.aLockBufs[ParmInfo.cLockBufs].hObj, false /*fFreeMappings*/); +#ifdef USE_BOUNCE_BUFFERS + RTMemTmpFree(ParmInfo.aLockBufs[ParmInfo.cLockBufs].pvSmallBuf); +#endif + } + + return rc; +} + + +#if ARCH_BITS == 64 +DECLR0VBGL(int) VbglR0HGCMInternalCall32(PVBGLIOCHGCMCALL pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData) +{ + PVBGLIOCHGCMCALL pCallInfo64 = NULL; + HGCMFunctionParameter *pParm64 = NULL; + HGCMFunctionParameter32 *pParm32 = NULL; + uint32_t cParms = 0; + uint32_t iParm = 0; + int rc = VINF_SUCCESS; + + /* + * Input validation. + */ + AssertMsgReturn( !pCallInfo + || !pfnAsyncCallback + || pCallInfo->cParms > VBOX_HGCM_MAX_PARMS + || !(fFlags & ~VBGLR0_HGCMCALL_F_MODE_MASK), + ("pCallInfo=%p pfnAsyncCallback=%p fFlags=%#x\n", pCallInfo, pfnAsyncCallback, fFlags), + VERR_INVALID_PARAMETER); + AssertReturn( cbCallInfo >= sizeof(VBGLIOCHGCMCALL) + || cbCallInfo >= pCallInfo->cParms * sizeof(HGCMFunctionParameter32), + VERR_INVALID_PARAMETER); + + /* This Assert does not work on Solaris/Windows 64/32 mixed mode, not sure why, skipping for now */ +#if !defined(RT_OS_SOLARIS) && !defined(RT_OS_WINDOWS) + AssertReturn((fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_KERNEL, VERR_WRONG_ORDER); +#endif + + cParms = pCallInfo->cParms; + Log(("VbglR0HGCMInternalCall32: cParms=%d, u32Function=%d, fFlags=%#x\n", cParms, pCallInfo->u32Function, fFlags)); + + /* + * The simple approach, allocate a temporary request and convert the parameters. + */ + pCallInfo64 = (PVBGLIOCHGCMCALL)RTMemTmpAllocZ(sizeof(*pCallInfo64) + cParms * sizeof(HGCMFunctionParameter)); + if (!pCallInfo64) + return VERR_NO_TMP_MEMORY; + + *pCallInfo64 = *pCallInfo; + pParm32 = VBGL_HGCM_GET_CALL_PARMS32(pCallInfo); + pParm64 = VBGL_HGCM_GET_CALL_PARMS(pCallInfo64); + for (iParm = 0; iParm < cParms; iParm++, pParm32++, pParm64++) + { + switch (pParm32->type) + { + case VMMDevHGCMParmType_32bit: + pParm64->type = VMMDevHGCMParmType_32bit; + pParm64->u.value32 = pParm32->u.value32; + break; + + case VMMDevHGCMParmType_64bit: + pParm64->type = VMMDevHGCMParmType_64bit; + pParm64->u.value64 = pParm32->u.value64; + break; + + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + case VMMDevHGCMParmType_LinAddr_In: + pParm64->type = pParm32->type; + pParm64->u.Pointer.size = pParm32->u.Pointer.size; + pParm64->u.Pointer.u.linearAddr = pParm32->u.Pointer.u.linearAddr; + break; + + default: + rc = VERR_INVALID_PARAMETER; + LogRel(("VbglR0HGCMInternalCall32: pParm32 type %#x invalid.\n", pParm32->type)); + break; + } + if (RT_FAILURE(rc)) + break; + } + if (RT_SUCCESS(rc)) + { + rc = VbglR0HGCMInternalCall(pCallInfo64, sizeof(*pCallInfo64) + cParms * sizeof(HGCMFunctionParameter), fFlags, + pfnAsyncCallback, pvAsyncData, u32AsyncData); + + if (RT_SUCCESS(rc)) + { + *pCallInfo = *pCallInfo64; + + /* + * Copy back. + */ + pParm32 = VBGL_HGCM_GET_CALL_PARMS32(pCallInfo); + pParm64 = VBGL_HGCM_GET_CALL_PARMS(pCallInfo64); + for (iParm = 0; iParm < cParms; iParm++, pParm32++, pParm64++) + { + switch (pParm64->type) + { + case VMMDevHGCMParmType_32bit: + pParm32->u.value32 = pParm64->u.value32; + break; + + case VMMDevHGCMParmType_64bit: + pParm32->u.value64 = pParm64->u.value64; + break; + + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + case VMMDevHGCMParmType_LinAddr_In: + pParm32->u.Pointer.size = pParm64->u.Pointer.size; + break; + + default: + LogRel(("VbglR0HGCMInternalCall32: failed invalid pParm32 type %d\n", pParm32->type)); + rc = VERR_INTERNAL_ERROR_3; + break; + } + } + } + else + { + static unsigned s_cErrors = 0; + if (s_cErrors++ < 32) + LogRel(("VbglR0HGCMInternalCall32: VbglR0HGCMInternalCall failed. rc=%Rrc\n", rc)); + } + } + else + { + static unsigned s_cErrors = 0; + if (s_cErrors++ < 32) + LogRel(("VbglR0HGCMInternalCall32: failed. rc=%Rrc\n", rc)); + } + + RTMemTmpFree(pCallInfo64); + return rc; +} +#endif /* ARCH_BITS == 64 */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibInit.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibInit.c @@ -0,0 +1,310 @@ +/* $Id: VBoxGuestR0LibInit.cpp $ */ +/** @file + * VBoxGuestLibR0 - Library initialization. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" + +#include +#include +#include + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The global VBGL instance data. */ +VBGLDATA g_vbgldata; + + +/** + * Used by vbglR0QueryDriverInfo and VbglInit to try get the host feature mask + * and version information (g_vbgldata::hostVersion). + * + * This was first implemented by the host in 3.1 and we quietly ignore failures + * for that reason. + */ +static void vbglR0QueryHostVersion(void) +{ + VMMDevReqHostVersion *pReq; + int rc = VbglR0GRAlloc((VMMDevRequestHeader **) &pReq, sizeof (*pReq), VMMDevReq_GetHostVersion); + if (RT_SUCCESS(rc)) + { + rc = VbglR0GRPerform(&pReq->header); + if (RT_SUCCESS(rc)) + { + g_vbgldata.hostVersion = *pReq; + Log(("vbglR0QueryHostVersion: %u.%u.%ur%u %#x\n", + pReq->major, pReq->minor, pReq->build, pReq->revision, pReq->features)); + } + + VbglR0GRFree(&pReq->header); + } +} + + +#ifndef VBGL_VBOXGUEST +/** + * The guest library uses lazy initialization for VMMDev port and memory, + * because these values are provided by the VBoxGuest driver and it might + * be loaded later than other drivers. + * + * The VbglEnter checks the current library status, tries to retrieve these + * values and fails if they are unavailable. + */ +static void vbglR0QueryDriverInfo(void) +{ +# ifdef VBGLDATA_USE_FAST_MUTEX + int rc = RTSemFastMutexRequest(g_vbgldata.hMtxIdcSetup); +# else + int rc = RTSemMutexRequest(g_vbgldata.hMtxIdcSetup, RT_INDEFINITE_WAIT); +# endif + if (RT_SUCCESS(rc)) + { + if (g_vbgldata.status == VbglStatusReady) + { /* likely */ } + else + { + rc = VbglR0IdcOpen(&g_vbgldata.IdcHandle, + VBGL_IOC_VERSION /*uReqVersion*/, + VBGL_IOC_VERSION & UINT32_C(0xffff0000) /*uMinVersion*/, + NULL /*puSessionVersion*/, NULL /*puDriverVersion*/, NULL /*puDriverRevision*/); + if (RT_SUCCESS(rc)) + { + /* + * Try query the port info. + */ + VBGLIOCGETVMMDEVIOINFO PortInfo; + RT_ZERO(PortInfo); + VBGLREQHDR_INIT(&PortInfo.Hdr, GET_VMMDEV_IO_INFO); + rc = VbglR0IdcCall(&g_vbgldata.IdcHandle, VBGL_IOCTL_GET_VMMDEV_IO_INFO, &PortInfo.Hdr, sizeof(PortInfo)); + if (RT_SUCCESS(rc)) + { + dprintf(("Port I/O = 0x%04x, MMIO = %p\n", PortInfo.u.Out.IoPort, PortInfo.u.Out.pvVmmDevMapping)); + + g_vbgldata.portVMMDev = PortInfo.u.Out.IoPort; + g_vbgldata.pVMMDevMemory = (VMMDevMemory *)PortInfo.u.Out.pvVmmDevMapping; + g_vbgldata.status = VbglStatusReady; + + vbglR0QueryHostVersion(); + } + } + + dprintf(("vbglQueryDriverInfo rc = %Rrc\n", rc)); + } + +# ifdef VBGLDATA_USE_FAST_MUTEX + RTSemFastMutexRelease(g_vbgldata.hMtxIdcSetup); +# else + RTSemMutexRelease(g_vbgldata.hMtxIdcSetup); +# endif + } +} +#endif /* !VBGL_VBOXGUEST */ + +/** + * Checks if VBGL has been initialized. + * + * The client library, this will lazily complete the initialization. + * + * @return VINF_SUCCESS or VERR_VBGL_NOT_INITIALIZED. + */ +int vbglR0Enter(void) +{ + if (g_vbgldata.status == VbglStatusReady) + return VINF_SUCCESS; + +#ifndef VBGL_VBOXGUEST + if (g_vbgldata.status == VbglStatusInitializing) + { + vbglR0QueryDriverInfo(); + if (g_vbgldata.status == VbglStatusReady) + return VINF_SUCCESS; + } +#endif + return VERR_VBGL_NOT_INITIALIZED; +} + + +static int vbglR0InitCommon(void) +{ + int rc; + + RT_ZERO(g_vbgldata); + g_vbgldata.status = VbglStatusInitializing; + + rc = VbglR0PhysHeapInit(); + if (RT_SUCCESS(rc)) + { + dprintf(("vbglR0InitCommon: returns rc = %d\n", rc)); + return rc; + } + + LogRel(("vbglR0InitCommon: VbglR0PhysHeapInit failed: rc=%Rrc\n", rc)); + g_vbgldata.status = VbglStatusNotInitialized; + return rc; +} + + +static void vbglR0TerminateCommon(void) +{ + VbglR0PhysHeapTerminate(); + g_vbgldata.status = VbglStatusNotInitialized; +} + +#ifdef VBGL_VBOXGUEST + +DECLVBGL(int) VbglR0InitPrimary(RTIOPORT portVMMDev, VMMDevMemory *pVMMDevMemory) +{ + int rc; + +# ifdef RT_OS_WINDOWS /** @todo r=bird: this doesn't make sense. Is there something special going on on windows? */ + dprintf(("vbglInit: starts g_vbgldata.status %d\n", g_vbgldata.status)); + + if ( g_vbgldata.status == VbglStatusInitializing + || g_vbgldata.status == VbglStatusReady) + { + /* Initialization is already in process. */ + return VINF_SUCCESS; + } +# else + dprintf(("vbglInit: starts\n")); +# endif + + rc = vbglR0InitCommon(); + if (RT_SUCCESS(rc)) + { + g_vbgldata.portVMMDev = portVMMDev; + g_vbgldata.pVMMDevMemory = pVMMDevMemory; + g_vbgldata.status = VbglStatusReady; + + vbglR0QueryHostVersion(); + return VINF_SUCCESS; + } + + g_vbgldata.status = VbglStatusNotInitialized; + return rc; +} + +DECLVBGL(void) VbglR0TerminatePrimary(void) +{ + vbglR0TerminateCommon(); +} + + +#else /* !VBGL_VBOXGUEST */ + +DECLVBGL(int) VbglR0InitClient(void) +{ + int rc; + + /** @todo r=bird: explain why we need to be doing this, please... */ + if ( g_vbgldata.status == VbglStatusInitializing + || g_vbgldata.status == VbglStatusReady) + { + /* Initialization is already in process. */ + return VINF_SUCCESS; + } + + rc = vbglR0InitCommon(); + if (RT_SUCCESS(rc)) + { +# ifdef VBGLDATA_USE_FAST_MUTEX + rc = RTSemFastMutexCreate(&g_vbgldata.hMtxIdcSetup); +# else + rc = RTSemMutexCreate(&g_vbgldata.hMtxIdcSetup); +# endif + if (RT_SUCCESS(rc)) + { + /* Try to obtain VMMDev port via IOCTL to VBoxGuest main driver. */ + vbglR0QueryDriverInfo(); + +# ifdef VBOX_WITH_HGCM + rc = VbglR0HGCMInit(); +# endif + if (RT_SUCCESS(rc)) + return VINF_SUCCESS; + +# ifdef VBGLDATA_USE_FAST_MUTEX + RTSemFastMutexDestroy(g_vbgldata.hMtxIdcSetup); + g_vbgldata.hMtxIdcSetup = NIL_RTSEMFASTMUTEX; +# else + RTSemMutexDestroy(g_vbgldata.hMtxIdcSetup); + g_vbgldata.hMtxIdcSetup = NIL_RTSEMMUTEX; +# endif + } + vbglR0TerminateCommon(); + } + + return rc; +} + +DECLVBGL(void) VbglR0TerminateClient(void) +{ +# ifdef VBOX_WITH_HGCM + VbglR0HGCMTerminate(); +# endif + + /* driver open could fail, which does not prevent VbglInit from succeeding, + * close the driver only if it is opened */ + VbglR0IdcClose(&g_vbgldata.IdcHandle); +# ifdef VBGLDATA_USE_FAST_MUTEX + RTSemFastMutexDestroy(g_vbgldata.hMtxIdcSetup); + g_vbgldata.hMtxIdcSetup = NIL_RTSEMFASTMUTEX; +# else + RTSemMutexDestroy(g_vbgldata.hMtxIdcSetup); + g_vbgldata.hMtxIdcSetup = NIL_RTSEMMUTEX; +# endif + + /* note: do vbglR0TerminateCommon as a last step since it zeroez up the g_vbgldata + * conceptually, doing vbglR0TerminateCommon last is correct + * since this is the reverse order to how init is done */ + vbglR0TerminateCommon(); +} + + +int VBOXCALL vbglR0QueryIdcHandle(PVBGLIDCHANDLE *ppIdcHandle) +{ + if (g_vbgldata.status == VbglStatusReady) + { /* likely */ } + else + { + vbglR0QueryDriverInfo(); + if (g_vbgldata.status != VbglStatusReady) + { + *ppIdcHandle = NULL; + return VERR_TRY_AGAIN; + } + } + + *ppIdcHandle = &g_vbgldata.IdcHandle; + return VINF_SUCCESS; +} + +#endif /* !VBGL_VBOXGUEST */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibInternal.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibInternal.h @@ -0,0 +1,203 @@ +/* $Id: VBoxGuestR0LibInternal.h $ */ +/** @file + * VBoxGuestLibR0 - Internal header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBoxGuestLib_VBoxGuestR0LibInternal_h +#define ___VBoxGuestLib_VBoxGuestR0LibInternal_h + +/* + * Define the private IDC handle structure before we include the VBoxGuestLib.h header. + */ +#include +#include +RT_C_DECLS_BEGIN + +# ifndef VBGL_VBOXGUEST +/** + * The hidden part of VBGLIDCHANDLE. + */ +struct VBGLIDCHANDLEPRIVATE +{ + /** Pointer to the session handle. */ + void *pvSession; +# if defined(RT_OS_WINDOWS) && (defined(___iprt_nt_ntddk_h___) || defined(___iprt_nt_nt_h___)) + /** Pointer to the NT device object. */ + PDEVICE_OBJECT pDeviceObject; + /** Pointer to the NT file object. */ + PFILE_OBJECT pFileObject; +# elif defined(RT_OS_SOLARIS) && defined(_SYS_SUNLDI_H) + /** LDI device handle to keep the device attached. */ + ldi_handle_t hDev; +# endif +}; +/** Indicate that the VBGLIDCHANDLEPRIVATE structure is present. */ +# define VBGLIDCHANDLEPRIVATE_DECLARED 1 +#endif + +#include +#include +#include + +#ifdef VBGLIDCHANDLEPRIVATE_DECLARED +AssertCompile(RT_SIZEOFMEMB(VBGLIDCHANDLE, apvPadding) >= sizeof(struct VBGLIDCHANDLEPRIVATE)); +#endif + + +/* + * Native IDC functions. + */ +int VBOXCALL vbglR0IdcNativeOpen(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCCONNECT pReq); +int VBOXCALL vbglR0IdcNativeClose(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCDISCONNECT pReq); + + +/* + * Deprecated logging macro + */ +#include +#ifdef RT_OS_WINDOWS /** @todo dprintf() -> Log() */ +# if (defined(DEBUG) && !defined(NO_LOGGING)) || defined(LOG_ENABLED) +# define dprintf(a) RTLogBackdoorPrintf a +# else +# define dprintf(a) do {} while (0) +# endif +#else +# define dprintf(a) Log(a) +#endif + +/* + * Lazy bird: OS/2 doesn't currently implement the RTSemMutex API in ring-0, so + * use a fast mutex instead. Unlike Windows, the OS/2 implementation + * doesn't have any nasty side effects on IRQL-like context properties, so the + * fast mutexes on OS/2 are identical to normal mutexes except for the missing + * timeout aspec. Fortunately we don't need timeouts here. + */ +#ifdef RT_OS_OS2 +# define VBGLDATA_USE_FAST_MUTEX +#endif + +struct _VBGLPHYSHEAPBLOCK; +typedef struct _VBGLPHYSHEAPBLOCK VBGLPHYSHEAPBLOCK; +struct _VBGLPHYSHEAPCHUNK; +typedef struct _VBGLPHYSHEAPCHUNK VBGLPHYSHEAPCHUNK; + +#ifndef VBGL_VBOXGUEST +struct VBGLHGCMHANDLEDATA +{ + uint32_t fAllocated; + VBGLIDCHANDLE IdcHandle; +}; +#endif + +enum VbglLibStatus +{ + VbglStatusNotInitialized = 0, + VbglStatusInitializing, + VbglStatusReady +}; + +/** + * Global VBGL ring-0 data. + * Lives in VbglR0Init.cpp. + */ +typedef struct VBGLDATA +{ + enum VbglLibStatus status; + + RTIOPORT portVMMDev; + + VMMDevMemory *pVMMDevMemory; + + /** + * Physical memory heap data. + * @{ + */ + + VBGLPHYSHEAPBLOCK *pFreeBlocksHead; + VBGLPHYSHEAPBLOCK *pAllocBlocksHead; + VBGLPHYSHEAPCHUNK *pChunkHead; + + RTSEMFASTMUTEX mutexHeap; + /** @} */ + + /** + * The host version data. + */ + VMMDevReqHostVersion hostVersion; + + +#ifndef VBGL_VBOXGUEST + /** The IDC handle. This is used for talking to the main driver. */ + VBGLIDCHANDLE IdcHandle; + /** Mutex used to serialize IDC setup. */ +# ifdef VBGLDATA_USE_FAST_MUTEX + RTSEMFASTMUTEX hMtxIdcSetup; +# else + RTSEMMUTEX hMtxIdcSetup; +# endif +#endif +} VBGLDATA; + + +extern VBGLDATA g_vbgldata; + +/** + * Internal macro for checking whether we can pass physical page lists to the + * host. + * + * ASSUMES that vbglR0Enter has been called already. + * + * @param a_fLocked For the windows shared folders workarounds. + * + * @remarks Disabled the PageList feature for locked memory on Windows, + * because a new MDL is created by VBGL to get the page addresses + * and the pages from the MDL are marked as dirty when they should not. + */ +#if defined(RT_OS_WINDOWS) +# define VBGLR0_CAN_USE_PHYS_PAGE_LIST(a_fLocked) \ + ( !(a_fLocked) && (g_vbgldata.hostVersion.features & VMMDEV_HVF_HGCM_PHYS_PAGE_LIST) ) +#else +# define VBGLR0_CAN_USE_PHYS_PAGE_LIST(a_fLocked) \ + ( !!(g_vbgldata.hostVersion.features & VMMDEV_HVF_HGCM_PHYS_PAGE_LIST) ) +#endif + +int vbglR0Enter (void); + +#ifdef VBOX_WITH_HGCM +struct VBGLHGCMHANDLEDATA *vbglR0HGCMHandleAlloc(void); +void vbglR0HGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle); +#endif /* VBOX_WITH_HGCM */ + +#ifndef VBGL_VBOXGUEST +/** + * Get the IDC handle to the main VBoxGuest driver. + * @returns VERR_TRY_AGAIN if the main driver has not yet been loaded. + */ +int VBOXCALL vbglR0QueryIdcHandle(PVBGLIDCHANDLE *ppIdcHandle); +#endif + +RT_C_DECLS_END + +#endif /* !___VBoxGuestLib_VBoxGuestR0LibInternal_h */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibPhysHeap.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibPhysHeap.c @@ -0,0 +1,640 @@ +/* $Id: VBoxGuestR0LibPhysHeap.cpp $ */ +/** @file + * VBoxGuestLibR0 - Physical memory heap. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" + +#include +#include +#include + +/* Physical memory heap consists of double linked list + * of chunks. Memory blocks are allocated inside these chunks + * and are members of Allocated and Free double linked lists. + * + * When allocating a block, we search in Free linked + * list for a suitable free block. If there is no such block, + * a new chunk is allocated and the new block is taken from + * the new chunk as the only chunk-sized free block. + * Allocated block is excluded from the Free list and goes to + * Alloc list. + * + * When freeing block, we check the pointer and then + * exclude block from Alloc list and move it to free list. + * + * For each chunk we maintain the allocated blocks counter. + * if 2 (or more) entire chunks are free they are immediately + * deallocated, so we always have at most 1 free chunk. + * + * When freeing blocks, two subsequent free blocks are always + * merged together. Current implementation merges blocks only + * when there is a block after the just freed one. + * + */ + +#define VBGL_PH_ASSERT Assert +#define VBGL_PH_ASSERTMsg AssertMsg + +// #define DUMPHEAP + +#ifdef DUMPHEAP +# define VBGL_PH_dprintf(a) RTAssertMsg2Weak a +#else +# define VBGL_PH_dprintf(a) +#endif + +/* Heap block signature */ +#define VBGL_PH_BLOCKSIGNATURE (0xADDBBBBB) + + +/* Heap chunk signature */ +#define VBGL_PH_CHUNKSIGNATURE (0xADDCCCCC) +/* Heap chunk allocation unit */ +#define VBGL_PH_CHUNKSIZE (0x10000) + +/* Heap block bit flags */ +#define VBGL_PH_BF_ALLOCATED (0x1) + +struct _VBGLPHYSHEAPBLOCK +{ + uint32_t u32Signature; + + /* Size of user data in the block. Does not include the block header. */ + uint32_t cbDataSize; + + uint32_t fu32Flags; + + struct _VBGLPHYSHEAPBLOCK *pNext; + struct _VBGLPHYSHEAPBLOCK *pPrev; + + struct _VBGLPHYSHEAPCHUNK *pChunk; +}; + +struct _VBGLPHYSHEAPCHUNK +{ + uint32_t u32Signature; + + /* Size of the chunk. Includes the chunk header. */ + uint32_t cbSize; + + /* Physical address of the chunk */ + uint32_t physAddr; + + /* Number of allocated blocks in the chunk */ + int32_t cAllocatedBlocks; + + struct _VBGLPHYSHEAPCHUNK *pNext; + struct _VBGLPHYSHEAPCHUNK *pPrev; +}; + + +#ifndef DUMPHEAP +#define dumpheap(a) +#else +void dumpheap (char *point) +{ + VBGL_PH_dprintf(("VBGL_PH dump at '%s'\n", point)); + + VBGL_PH_dprintf(("Chunks:\n")); + + VBGLPHYSHEAPCHUNK *pChunk = g_vbgldata.pChunkHead; + + while (pChunk) + { + VBGL_PH_dprintf(("%p: pNext = %p, pPrev = %p, sign = %08X, size = %8d, allocated = %8d, phys = %08X\n", + pChunk, pChunk->pNext, pChunk->pPrev, pChunk->u32Signature, pChunk->cbSize, pChunk->cAllocatedBlocks, pChunk->physAddr)); + + pChunk = pChunk->pNext; + } + + VBGL_PH_dprintf(("Allocated blocks:\n")); + + VBGLPHYSHEAPBLOCK *pBlock = g_vbgldata.pAllocBlocksHead; + + while (pBlock) + { + VBGL_PH_dprintf(("%p: pNext = %p, pPrev = %p, sign = %08X, size = %8d, flags = %08X, pChunk = %p\n", + pBlock, pBlock->pNext, pBlock->pPrev, pBlock->u32Signature, pBlock->cbDataSize, pBlock->fu32Flags, pBlock->pChunk)); + + pBlock = pBlock->pNext; + } + + VBGL_PH_dprintf(("Free blocks:\n")); + + pBlock = g_vbgldata.pFreeBlocksHead; + + while (pBlock) + { + VBGL_PH_dprintf(("%p: pNext = %p, pPrev = %p, sign = %08X, size = %8d, flags = %08X, pChunk = %p\n", + pBlock, pBlock->pNext, pBlock->pPrev, pBlock->u32Signature, pBlock->cbDataSize, pBlock->fu32Flags, pBlock->pChunk)); + + pBlock = pBlock->pNext; + } + + VBGL_PH_dprintf(("VBGL_PH dump at '%s' done\n", point)); +} +#endif + + +DECLINLINE(void *) vbglPhysHeapBlock2Data (VBGLPHYSHEAPBLOCK *pBlock) +{ + return (void *)(pBlock? (char *)pBlock + sizeof (VBGLPHYSHEAPBLOCK): NULL); +} + +DECLINLINE(VBGLPHYSHEAPBLOCK *) vbglPhysHeapData2Block (void *p) +{ + VBGLPHYSHEAPBLOCK *pBlock = (VBGLPHYSHEAPBLOCK *)(p? (char *)p - sizeof (VBGLPHYSHEAPBLOCK): NULL); + + VBGL_PH_ASSERTMsg(pBlock == NULL || pBlock->u32Signature == VBGL_PH_BLOCKSIGNATURE, + ("pBlock->u32Signature = %08X\n", pBlock->u32Signature)); + + return pBlock; +} + +DECLINLINE(int) vbglPhysHeapEnter (void) +{ + int rc = RTSemFastMutexRequest(g_vbgldata.mutexHeap); + + VBGL_PH_ASSERTMsg(RT_SUCCESS(rc), + ("Failed to request heap mutex, rc = %Rrc\n", rc)); + + return rc; +} + +DECLINLINE(void) vbglPhysHeapLeave (void) +{ + RTSemFastMutexRelease(g_vbgldata.mutexHeap); +} + + +static void vbglPhysHeapInitBlock (VBGLPHYSHEAPBLOCK *pBlock, VBGLPHYSHEAPCHUNK *pChunk, uint32_t cbDataSize) +{ + VBGL_PH_ASSERT(pBlock != NULL); + VBGL_PH_ASSERT(pChunk != NULL); + + pBlock->u32Signature = VBGL_PH_BLOCKSIGNATURE; + pBlock->cbDataSize = cbDataSize; + pBlock->fu32Flags = 0; + pBlock->pNext = NULL; + pBlock->pPrev = NULL; + pBlock->pChunk = pChunk; +} + + +static void vbglPhysHeapInsertBlock (VBGLPHYSHEAPBLOCK *pInsertAfter, VBGLPHYSHEAPBLOCK *pBlock) +{ + VBGL_PH_ASSERTMsg(pBlock->pNext == NULL, + ("pBlock->pNext = %p\n", pBlock->pNext)); + VBGL_PH_ASSERTMsg(pBlock->pPrev == NULL, + ("pBlock->pPrev = %p\n", pBlock->pPrev)); + + if (pInsertAfter) + { + pBlock->pNext = pInsertAfter->pNext; + pBlock->pPrev = pInsertAfter; + + if (pInsertAfter->pNext) + { + pInsertAfter->pNext->pPrev = pBlock; + } + + pInsertAfter->pNext = pBlock; + } + else + { + /* inserting to head of list */ + pBlock->pPrev = NULL; + + if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) + { + pBlock->pNext = g_vbgldata.pAllocBlocksHead; + + if (g_vbgldata.pAllocBlocksHead) + { + g_vbgldata.pAllocBlocksHead->pPrev = pBlock; + } + + g_vbgldata.pAllocBlocksHead = pBlock; + } + else + { + pBlock->pNext = g_vbgldata.pFreeBlocksHead; + + if (g_vbgldata.pFreeBlocksHead) + { + g_vbgldata.pFreeBlocksHead->pPrev = pBlock; + } + + g_vbgldata.pFreeBlocksHead = pBlock; + } + } +} + +static void vbglPhysHeapExcludeBlock (VBGLPHYSHEAPBLOCK *pBlock) +{ + if (pBlock->pNext) + { + pBlock->pNext->pPrev = pBlock->pPrev; + } + else + { + /* this is tail of list but we do not maintain tails of block lists. + * so do nothing. + */ + ; + } + + if (pBlock->pPrev) + { + pBlock->pPrev->pNext = pBlock->pNext; + } + else + { + /* this is head of list but we do not maintain tails of block lists. */ + if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) + { + g_vbgldata.pAllocBlocksHead = pBlock->pNext; + } + else + { + g_vbgldata.pFreeBlocksHead = pBlock->pNext; + } + } + + pBlock->pNext = NULL; + pBlock->pPrev = NULL; +} + +static VBGLPHYSHEAPBLOCK *vbglPhysHeapChunkAlloc (uint32_t cbSize) +{ + RTCCPHYS physAddr; + VBGLPHYSHEAPCHUNK *pChunk; + VBGLPHYSHEAPBLOCK *pBlock; + VBGL_PH_dprintf(("Allocating new chunk of size %d\n", cbSize)); + + /* Compute chunk size to allocate */ + if (cbSize < VBGL_PH_CHUNKSIZE) + { + /* Includes case of block size 0 during initialization */ + cbSize = VBGL_PH_CHUNKSIZE; + } + else + { + /* Round up to next chunk size, which must be power of 2 */ + cbSize = (cbSize + (VBGL_PH_CHUNKSIZE - 1)) & ~(VBGL_PH_CHUNKSIZE - 1); + } + + physAddr = 0; + /* This function allocates physical contiguous memory (below 4GB) according to the IPRT docs. + * Address < 4G is required for the port IO. + */ + pChunk = (VBGLPHYSHEAPCHUNK *)RTMemContAlloc (&physAddr, cbSize); + + if (!pChunk) + { + LogRel(("vbglPhysHeapChunkAlloc: failed to alloc %u contiguous bytes.\n", cbSize)); + return NULL; + } + + AssertRelease(physAddr < _4G && physAddr + cbSize <= _4G); + + pChunk->u32Signature = VBGL_PH_CHUNKSIGNATURE; + pChunk->cbSize = cbSize; + pChunk->physAddr = (uint32_t)physAddr; + pChunk->cAllocatedBlocks = 0; + pChunk->pNext = g_vbgldata.pChunkHead; + pChunk->pPrev = NULL; + + /* Initialize the free block, which now occupies entire chunk. */ + pBlock = (VBGLPHYSHEAPBLOCK *)((char *)pChunk + sizeof (VBGLPHYSHEAPCHUNK)); + + vbglPhysHeapInitBlock (pBlock, pChunk, cbSize - sizeof (VBGLPHYSHEAPCHUNK) - sizeof (VBGLPHYSHEAPBLOCK)); + + vbglPhysHeapInsertBlock (NULL, pBlock); + + g_vbgldata.pChunkHead = pChunk; + + VBGL_PH_dprintf(("Allocated chunk %p, block = %p size=%x\n", pChunk, pBlock, cbSize)); + + return pBlock; +} + + +void vbglPhysHeapChunkDelete (VBGLPHYSHEAPCHUNK *pChunk) +{ + char *p; + VBGL_PH_ASSERT(pChunk != NULL); + VBGL_PH_ASSERTMsg(pChunk->u32Signature == VBGL_PH_CHUNKSIGNATURE, + ("pChunk->u32Signature = %08X\n", pChunk->u32Signature)); + + VBGL_PH_dprintf(("Deleting chunk %p size %x\n", pChunk, pChunk->cbSize)); + + /* first scan the chunk and exclude all blocks from lists */ + + p = (char *)pChunk + sizeof (VBGLPHYSHEAPCHUNK); + + while (p < (char *)pChunk + pChunk->cbSize) + { + VBGLPHYSHEAPBLOCK *pBlock = (VBGLPHYSHEAPBLOCK *)p; + + p += pBlock->cbDataSize + sizeof (VBGLPHYSHEAPBLOCK); + + vbglPhysHeapExcludeBlock (pBlock); + } + + VBGL_PH_ASSERTMsg(p == (char *)pChunk + pChunk->cbSize, + ("p = %p, (char *)pChunk + pChunk->cbSize = %p, pChunk->cbSize = %08X\n", + p, (char *)pChunk + pChunk->cbSize, pChunk->cbSize)); + + /* Exclude chunk from the chunk list */ + if (pChunk->pNext) + { + pChunk->pNext->pPrev = pChunk->pPrev; + } + else + { + /* we do not maintain tail */ + ; + } + + if (pChunk->pPrev) + { + pChunk->pPrev->pNext = pChunk->pNext; + } + else + { + /* the chunk was head */ + g_vbgldata.pChunkHead = pChunk->pNext; + } + + RTMemContFree (pChunk, pChunk->cbSize); +} + + +DECLR0VBGL(void *) VbglR0PhysHeapAlloc (uint32_t cbSize) +{ + VBGLPHYSHEAPBLOCK *pBlock, *iter; + int rc = vbglPhysHeapEnter (); + + if (RT_FAILURE(rc)) + return NULL; + + dumpheap ("pre alloc"); + + pBlock = NULL; + + /* If there are free blocks in the heap, look at them. */ + iter = g_vbgldata.pFreeBlocksHead; + + /* There will be not many blocks in the heap, so + * linear search would be fast enough. + */ + + while (iter) + { + if (iter->cbDataSize == cbSize) + { + /* exact match */ + pBlock = iter; + break; + } + + /* Looking for a free block with nearest size */ + if (iter->cbDataSize > cbSize) + { + if (pBlock) + { + if (iter->cbDataSize < pBlock->cbDataSize) + { + pBlock = iter; + } + } + else + { + pBlock = iter; + } + } + + iter = iter->pNext; + } + + if (!pBlock) + { + /* No free blocks, allocate a new chunk, + * the only free block of the chunk will + * be returned. + */ + pBlock = vbglPhysHeapChunkAlloc (cbSize); + } + + if (pBlock) + { + VBGL_PH_ASSERTMsg(pBlock->u32Signature == VBGL_PH_BLOCKSIGNATURE, + ("pBlock = %p, pBlock->u32Signature = %08X\n", pBlock, pBlock->u32Signature)); + VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) == 0, + ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags)); + + /* We have a free block, either found or allocated. */ + + if (pBlock->cbDataSize > 2*(cbSize + sizeof (VBGLPHYSHEAPBLOCK))) + { + /* Data will occupy less than a half of the block, + * the block should be split. + */ + iter = (VBGLPHYSHEAPBLOCK *)((char *)pBlock + sizeof (VBGLPHYSHEAPBLOCK) + cbSize); + + /* Init the new 'iter' block, initialized blocks are always marked as free. */ + vbglPhysHeapInitBlock (iter, pBlock->pChunk, pBlock->cbDataSize - cbSize - sizeof (VBGLPHYSHEAPBLOCK)); + + pBlock->cbDataSize = cbSize; + + /* Insert the new 'iter' block after the 'pBlock' in the free list */ + vbglPhysHeapInsertBlock (pBlock, iter); + } + + /* Exclude pBlock from free list */ + vbglPhysHeapExcludeBlock (pBlock); + + /* Mark as allocated */ + pBlock->fu32Flags |= VBGL_PH_BF_ALLOCATED; + + /* Insert to allocated list */ + vbglPhysHeapInsertBlock (NULL, pBlock); + + /* Adjust the chunk allocated blocks counter */ + pBlock->pChunk->cAllocatedBlocks++; + } + + dumpheap ("post alloc"); + + vbglPhysHeapLeave (); + VBGL_PH_dprintf(("VbglR0PhysHeapAlloc %x size %x\n", vbglPhysHeapBlock2Data (pBlock), pBlock->cbDataSize)); + + return vbglPhysHeapBlock2Data (pBlock); +} + +DECLR0VBGL(uint32_t) VbglR0PhysHeapGetPhysAddr (void *p) +{ + uint32_t physAddr = 0; + VBGLPHYSHEAPBLOCK *pBlock = vbglPhysHeapData2Block (p); + + if (pBlock) + { + VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) != 0, + ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags)); + + if (pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) + physAddr = pBlock->pChunk->physAddr + (uint32_t)((uintptr_t)p - (uintptr_t)pBlock->pChunk); + } + + return physAddr; +} + +DECLR0VBGL(void) VbglR0PhysHeapFree(void *p) +{ + VBGLPHYSHEAPBLOCK *pBlock; + VBGLPHYSHEAPBLOCK *pNeighbour; + + int rc = vbglPhysHeapEnter (); + if (RT_FAILURE(rc)) + return; + + dumpheap ("pre free"); + + pBlock = vbglPhysHeapData2Block (p); + + if (!pBlock) + { + vbglPhysHeapLeave (); + return; + } + + VBGL_PH_ASSERTMsg((pBlock->fu32Flags & VBGL_PH_BF_ALLOCATED) != 0, + ("pBlock = %p, pBlock->fu32Flags = %08X\n", pBlock, pBlock->fu32Flags)); + + /* Exclude from allocated list */ + vbglPhysHeapExcludeBlock (pBlock); + + dumpheap ("post exclude"); + + VBGL_PH_dprintf(("VbglR0PhysHeapFree %x size %x\n", p, pBlock->cbDataSize)); + + /* Mark as free */ + pBlock->fu32Flags &= ~VBGL_PH_BF_ALLOCATED; + + /* Insert to free list */ + vbglPhysHeapInsertBlock (NULL, pBlock); + + dumpheap ("post insert"); + + /* Adjust the chunk allocated blocks counter */ + pBlock->pChunk->cAllocatedBlocks--; + + VBGL_PH_ASSERT(pBlock->pChunk->cAllocatedBlocks >= 0); + + /* Check if we can merge 2 free blocks. To simplify heap maintenance, + * we will look at block after the just freed one. + * This will not prevent us from detecting free memory chunks. + * Also in most cases blocks are deallocated in reverse allocation order + * and in that case the merging will work. + */ + + pNeighbour = (VBGLPHYSHEAPBLOCK *)((char *)p + pBlock->cbDataSize); + + if ((char *)pNeighbour < (char *)pBlock->pChunk + pBlock->pChunk->cbSize + && (pNeighbour->fu32Flags & VBGL_PH_BF_ALLOCATED) == 0) + { + /* The next block is free as well. */ + + /* Adjust size of current memory block */ + pBlock->cbDataSize += pNeighbour->cbDataSize + sizeof (VBGLPHYSHEAPBLOCK); + + /* Exclude the next neighbour */ + vbglPhysHeapExcludeBlock (pNeighbour); + } + + dumpheap ("post merge"); + + /* now check if there are 2 or more free chunks */ + if (pBlock->pChunk->cAllocatedBlocks == 0) + { + VBGLPHYSHEAPCHUNK *pChunk = g_vbgldata.pChunkHead; + + uint32_t u32FreeChunks = 0; + + while (pChunk) + { + if (pChunk->cAllocatedBlocks == 0) + { + u32FreeChunks++; + } + + pChunk = pChunk->pNext; + } + + if (u32FreeChunks > 1) + { + /* Delete current chunk, it will also exclude all free blocks + * remaining in the chunk from the free list, so the pBlock + * will also be invalid after this. + */ + vbglPhysHeapChunkDelete (pBlock->pChunk); + } + } + + dumpheap ("post free"); + + vbglPhysHeapLeave (); +} + +DECLR0VBGL(int) VbglR0PhysHeapInit (void) +{ + int rc = VINF_SUCCESS; + + /* Allocate the first chunk of the heap. */ + VBGLPHYSHEAPBLOCK *pBlock = vbglPhysHeapChunkAlloc (0); + + if (!pBlock) + rc = VERR_NO_MEMORY; + + RTSemFastMutexCreate(&g_vbgldata.mutexHeap); + + return rc; +} + +DECLR0VBGL(void) VbglR0PhysHeapTerminate (void) +{ + while (g_vbgldata.pChunkHead) + { + vbglPhysHeapChunkDelete (g_vbgldata.pChunkHead); + } + + RTSemFastMutexDestroy(g_vbgldata.mutexHeap); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/VBoxGuestR0LibVMMDev.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/VBoxGuestR0LibVMMDev.c @@ -0,0 +1,47 @@ +/* $Id: VBoxGuestR0LibVMMDev.cpp $ */ +/** @file + * VBoxGuestLibR0 - VMMDev device related functions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" + + +DECLVBGL(int) VbglR0QueryVMMDevMemory(VMMDevMemory **ppVMMDevMemory) +{ + int rc = vbglR0Enter(); + if (RT_FAILURE(rc)) + return rc; + + /* If the memory was not found, return an error. */ + if (!g_vbgldata.pVMMDevMemory) + return VERR_NOT_SUPPORTED; + + *ppVMMDevMemory = g_vbgldata.pVMMDevMemory; + return rc; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/alloc/alloc.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/alloc/alloc.c @@ -0,0 +1,63 @@ +/* $Id: alloc.cpp $ */ +/** @file + * IPRT - Memory Allocation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#ifndef RTMEM_NO_WRAP_TO_EF_APIS +# define RTMEM_NO_WRAP_TO_EF_APIS +#endif +#include +#include "internal/iprt.h" + +#include +#include + + + +RTDECL(void *) RTMemDupTag(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + void *pvDst = RTMemAllocTag(cb, pszTag); + if (pvDst) + memcpy(pvDst, pvSrc, cb); + return pvDst; +} +RT_EXPORT_SYMBOL(RTMemDupTag); + + +RTDECL(void *) RTMemDupExTag(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag) RT_NO_THROW_DEF +{ + void *pvDst = RTMemAllocTag(cbSrc + cbExtra, pszTag); + if (pvDst) + { + memcpy(pvDst, pvSrc, cbSrc); + memset((uint8_t *)pvDst + cbSrc, 0, cbExtra); + } + return pvDst; +} +RT_EXPORT_SYMBOL(RTMemDupExTag); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/alloc/heapsimple.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/alloc/heapsimple.c @@ -0,0 +1,920 @@ +/* $Id: heapsimple.cpp $ */ +/** @file + * IPRT - A Simple Heap. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_DEFAULT +#include +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include + +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** Pointer to the heap anchor block. */ +typedef struct RTHEAPSIMPLEINTERNAL *PRTHEAPSIMPLEINTERNAL; +/** Pointer to a heap block. */ +typedef struct RTHEAPSIMPLEBLOCK *PRTHEAPSIMPLEBLOCK; +/** Pointer to a free heap block. */ +typedef struct RTHEAPSIMPLEFREE *PRTHEAPSIMPLEFREE; + +/** + * Structure describing a simple heap block. + * If this block is allocated, it is followed by the user data. + * If this block is free, see RTHEAPSIMPLEFREE. + */ +typedef struct RTHEAPSIMPLEBLOCK +{ + /** The next block in the global block list. */ + PRTHEAPSIMPLEBLOCK pNext; + /** The previous block in the global block list. */ + PRTHEAPSIMPLEBLOCK pPrev; + /** Pointer to the heap anchor block. */ + PRTHEAPSIMPLEINTERNAL pHeap; + /** Flags + magic. */ + uintptr_t fFlags; +} RTHEAPSIMPLEBLOCK; +AssertCompileSizeAlignment(RTHEAPSIMPLEBLOCK, 16); + +/** The block is free if this flag is set. When cleared it's allocated. */ +#define RTHEAPSIMPLEBLOCK_FLAGS_FREE ((uintptr_t)RT_BIT(0)) +/** The magic value. */ +#define RTHEAPSIMPLEBLOCK_FLAGS_MAGIC ((uintptr_t)0xabcdef00) +/** The mask that needs to be applied to RTHEAPSIMPLEBLOCK::fFlags to obtain the magic value. */ +#define RTHEAPSIMPLEBLOCK_FLAGS_MAGIC_MASK (~(uintptr_t)RT_BIT(0)) + +/** + * Checks if the specified block is valid or not. + * @returns boolean answer. + * @param pBlock Pointer to a RTHEAPSIMPLEBLOCK structure. + */ +#define RTHEAPSIMPLEBLOCK_IS_VALID(pBlock) \ + ( ((pBlock)->fFlags & RTHEAPSIMPLEBLOCK_FLAGS_MAGIC_MASK) == RTHEAPSIMPLEBLOCK_FLAGS_MAGIC ) + +/** + * Checks if the specified block is valid and in use. + * @returns boolean answer. + * @param pBlock Pointer to a RTHEAPSIMPLEBLOCK structure. + */ +#define RTHEAPSIMPLEBLOCK_IS_VALID_USED(pBlock) \ + ( ((pBlock)->fFlags & (RTHEAPSIMPLEBLOCK_FLAGS_MAGIC_MASK | RTHEAPSIMPLEBLOCK_FLAGS_FREE)) \ + == RTHEAPSIMPLEBLOCK_FLAGS_MAGIC ) + +/** + * Checks if the specified block is valid and free. + * @returns boolean answer. + * @param pBlock Pointer to a RTHEAPSIMPLEBLOCK structure. + */ +#define RTHEAPSIMPLEBLOCK_IS_VALID_FREE(pBlock) \ + ( ((pBlock)->fFlags & (RTHEAPSIMPLEBLOCK_FLAGS_MAGIC_MASK | RTHEAPSIMPLEBLOCK_FLAGS_FREE)) \ + == (RTHEAPSIMPLEBLOCK_FLAGS_MAGIC | RTHEAPSIMPLEBLOCK_FLAGS_FREE) ) + +/** + * Checks if the specified block is free or not. + * @returns boolean answer. + * @param pBlock Pointer to a valid RTHEAPSIMPLEBLOCK structure. + */ +#define RTHEAPSIMPLEBLOCK_IS_FREE(pBlock) (!!((pBlock)->fFlags & RTHEAPSIMPLEBLOCK_FLAGS_FREE)) + +/** + * A free heap block. + * This is an extended version of RTHEAPSIMPLEBLOCK that takes the unused + * user data to store free list pointers and a cached size value. + */ +typedef struct RTHEAPSIMPLEFREE +{ + /** Core stuff. */ + RTHEAPSIMPLEBLOCK Core; + /** Pointer to the next free block. */ + PRTHEAPSIMPLEFREE pNext; + /** Pointer to the previous free block. */ + PRTHEAPSIMPLEFREE pPrev; + /** The size of the block (excluding the RTHEAPSIMPLEBLOCK part). */ + size_t cb; + /** An alignment filler to make it a multiple of (sizeof(void *) * 2). */ + size_t Alignment; +} RTHEAPSIMPLEFREE; + + +/** + * The heap anchor block. + * This structure is placed at the head of the memory block specified to RTHeapSimpleInit(), + * which means that the first RTHEAPSIMPLEBLOCK appears immediately after this structure. + */ +typedef struct RTHEAPSIMPLEINTERNAL +{ + /** The typical magic (RTHEAPSIMPLE_MAGIC). */ + size_t uMagic; + /** The heap size. (This structure is included!) */ + size_t cbHeap; + /** Pointer to the end of the heap. */ + void *pvEnd; + /** The amount of free memory in the heap. */ + size_t cbFree; + /** Free head pointer. */ + PRTHEAPSIMPLEFREE pFreeHead; + /** Free tail pointer. */ + PRTHEAPSIMPLEFREE pFreeTail; + /** Make the size of this structure is a multiple of 32. */ + size_t auAlignment[2]; +} RTHEAPSIMPLEINTERNAL; +AssertCompileSizeAlignment(RTHEAPSIMPLEINTERNAL, 32); + + +/** The minimum allocation size. */ +#define RTHEAPSIMPLE_MIN_BLOCK (sizeof(RTHEAPSIMPLEBLOCK)) +AssertCompile(RTHEAPSIMPLE_MIN_BLOCK >= sizeof(RTHEAPSIMPLEBLOCK)); +AssertCompile(RTHEAPSIMPLE_MIN_BLOCK >= sizeof(RTHEAPSIMPLEFREE) - sizeof(RTHEAPSIMPLEBLOCK)); + +/** The minimum and default alignment. */ +#define RTHEAPSIMPLE_ALIGNMENT (sizeof(RTHEAPSIMPLEBLOCK)) + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#ifdef RT_STRICT +# define RTHEAPSIMPLE_STRICT 1 +#endif + +#define ASSERT_L(a, b) AssertMsg((uintptr_t)(a) < (uintptr_t)(b), ("a=%p b=%p\n", (uintptr_t)(a), (uintptr_t)(b))) +#define ASSERT_LE(a, b) AssertMsg((uintptr_t)(a) <= (uintptr_t)(b), ("a=%p b=%p\n", (uintptr_t)(a), (uintptr_t)(b))) +#define ASSERT_G(a, b) AssertMsg((uintptr_t)(a) > (uintptr_t)(b), ("a=%p b=%p\n", (uintptr_t)(a), (uintptr_t)(b))) +#define ASSERT_GE(a, b) AssertMsg((uintptr_t)(a) >= (uintptr_t)(b), ("a=%p b=%p\n", (uintptr_t)(a), (uintptr_t)(b))) +#define ASSERT_ALIGN(a) AssertMsg(!((uintptr_t)(a) & (RTHEAPSIMPLE_ALIGNMENT - 1)), ("a=%p\n", (uintptr_t)(a))) + +#define ASSERT_PREV(pHeapInt, pBlock) \ + do { ASSERT_ALIGN((pBlock)->pPrev); \ + if ((pBlock)->pPrev) \ + { \ + ASSERT_L((pBlock)->pPrev, (pBlock)); \ + ASSERT_GE((pBlock)->pPrev, (pHeapInt) + 1); \ + } \ + else \ + Assert((pBlock) == (PRTHEAPSIMPLEBLOCK)((pHeapInt) + 1)); \ + } while (0) + +#define ASSERT_NEXT(pHeap, pBlock) \ + do { ASSERT_ALIGN((pBlock)->pNext); \ + if ((pBlock)->pNext) \ + { \ + ASSERT_L((pBlock)->pNext, (pHeapInt)->pvEnd); \ + ASSERT_G((pBlock)->pNext, (pBlock)); \ + } \ + } while (0) + +#define ASSERT_BLOCK(pHeapInt, pBlock) \ + do { AssertMsg(RTHEAPSIMPLEBLOCK_IS_VALID(pBlock), ("%#x\n", (pBlock)->fFlags)); \ + AssertMsg((pBlock)->pHeap == (pHeapInt), ("%p != %p\n", (pBlock)->pHeap, (pHeapInt))); \ + ASSERT_GE((pBlock), (pHeapInt) + 1); \ + ASSERT_L((pBlock), (pHeapInt)->pvEnd); \ + ASSERT_NEXT(pHeapInt, pBlock); \ + ASSERT_PREV(pHeapInt, pBlock); \ + } while (0) + +#define ASSERT_BLOCK_USED(pHeapInt, pBlock) \ + do { AssertMsg(RTHEAPSIMPLEBLOCK_IS_VALID_USED((pBlock)), ("%#x\n", (pBlock)->fFlags)); \ + AssertMsg((pBlock)->pHeap == (pHeapInt), ("%p != %p\n", (pBlock)->pHeap, (pHeapInt))); \ + ASSERT_GE((pBlock), (pHeapInt) + 1); \ + ASSERT_L((pBlock), (pHeapInt)->pvEnd); \ + ASSERT_NEXT(pHeapInt, pBlock); \ + ASSERT_PREV(pHeapInt, pBlock); \ + } while (0) + +#define ASSERT_FREE_PREV(pHeapInt, pBlock) \ + do { ASSERT_ALIGN((pBlock)->pPrev); \ + if ((pBlock)->pPrev) \ + { \ + ASSERT_GE((pBlock)->pPrev, (pHeapInt)->pFreeHead); \ + ASSERT_L((pBlock)->pPrev, (pBlock)); \ + ASSERT_LE((pBlock)->pPrev, (pBlock)->Core.pPrev); \ + } \ + else \ + Assert((pBlock) == (pHeapInt)->pFreeHead); \ + } while (0) + +#define ASSERT_FREE_NEXT(pHeapInt, pBlock) \ + do { ASSERT_ALIGN((pBlock)->pNext); \ + if ((pBlock)->pNext) \ + { \ + ASSERT_LE((pBlock)->pNext, (pHeapInt)->pFreeTail); \ + ASSERT_G((pBlock)->pNext, (pBlock)); \ + ASSERT_GE((pBlock)->pNext, (pBlock)->Core.pNext); \ + } \ + else \ + Assert((pBlock) == (pHeapInt)->pFreeTail); \ + } while (0) + +#ifdef RTHEAPSIMPLE_STRICT +# define ASSERT_FREE_CB(pHeapInt, pBlock) \ + do { size_t cbCalc = ((pBlock)->Core.pNext ? (uintptr_t)(pBlock)->Core.pNext : (uintptr_t)(pHeapInt)->pvEnd) \ + - (uintptr_t)(pBlock) - sizeof(RTHEAPSIMPLEBLOCK); \ + AssertMsg((pBlock)->cb == cbCalc, ("cb=%#zx cbCalc=%#zx\n", (pBlock)->cb, cbCalc)); \ + } while (0) +#else +# define ASSERT_FREE_CB(pHeapInt, pBlock) do {} while (0) +#endif + +/** Asserts that a free block is valid. */ +#define ASSERT_BLOCK_FREE(pHeapInt, pBlock) \ + do { ASSERT_BLOCK(pHeapInt, &(pBlock)->Core); \ + Assert(RTHEAPSIMPLEBLOCK_IS_VALID_FREE(&(pBlock)->Core)); \ + ASSERT_GE((pBlock), (pHeapInt)->pFreeHead); \ + ASSERT_LE((pBlock), (pHeapInt)->pFreeTail); \ + ASSERT_FREE_NEXT(pHeapInt, pBlock); \ + ASSERT_FREE_PREV(pHeapInt, pBlock); \ + ASSERT_FREE_CB(pHeapInt, pBlock); \ + } while (0) + +/** Asserts that the heap anchor block is ok. */ +#define ASSERT_ANCHOR(pHeapInt) \ + do { AssertPtr(pHeapInt);\ + Assert((pHeapInt)->uMagic == RTHEAPSIMPLE_MAGIC); \ + } while (0) + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +#ifdef RTHEAPSIMPLE_STRICT +static void rtHeapSimpleAssertAll(PRTHEAPSIMPLEINTERNAL pHeapInt); +#endif +static PRTHEAPSIMPLEBLOCK rtHeapSimpleAllocBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, size_t cb, size_t uAlignment); +static void rtHeapSimpleFreeBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, PRTHEAPSIMPLEBLOCK pBlock); + + +RTDECL(int) RTHeapSimpleInit(PRTHEAPSIMPLE phHeap, void *pvMemory, size_t cbMemory) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt; + PRTHEAPSIMPLEFREE pFree; + unsigned i; + + /* + * Validate input. The imposed minimum heap size is just a convenient value. + */ + AssertReturn(cbMemory >= PAGE_SIZE, VERR_INVALID_PARAMETER); + AssertPtrReturn(pvMemory, VERR_INVALID_POINTER); + AssertReturn((uintptr_t)pvMemory + (cbMemory - 1) > (uintptr_t)cbMemory, VERR_INVALID_PARAMETER); + + /* + * Place the heap anchor block at the start of the heap memory, + * enforce 32 byte alignment of it. Also align the heap size correctly. + */ + pHeapInt = (PRTHEAPSIMPLEINTERNAL)pvMemory; + if ((uintptr_t)pvMemory & 31) + { + const uintptr_t off = 32 - ((uintptr_t)pvMemory & 31); + cbMemory -= off; + pHeapInt = (PRTHEAPSIMPLEINTERNAL)((uintptr_t)pvMemory + off); + } + cbMemory &= ~(RTHEAPSIMPLE_ALIGNMENT - 1); + + + /* Init the heap anchor block. */ + pHeapInt->uMagic = RTHEAPSIMPLE_MAGIC; + pHeapInt->pvEnd = (uint8_t *)pHeapInt + cbMemory; + pHeapInt->cbHeap = cbMemory; + pHeapInt->cbFree = cbMemory + - sizeof(RTHEAPSIMPLEBLOCK) + - sizeof(RTHEAPSIMPLEINTERNAL); + pHeapInt->pFreeTail = pHeapInt->pFreeHead = (PRTHEAPSIMPLEFREE)(pHeapInt + 1); + for (i = 0; i < RT_ELEMENTS(pHeapInt->auAlignment); i++) + pHeapInt->auAlignment[i] = ~(size_t)0; + + /* Init the single free block. */ + pFree = pHeapInt->pFreeHead; + pFree->Core.pNext = NULL; + pFree->Core.pPrev = NULL; + pFree->Core.pHeap = pHeapInt; + pFree->Core.fFlags = RTHEAPSIMPLEBLOCK_FLAGS_MAGIC | RTHEAPSIMPLEBLOCK_FLAGS_FREE; + pFree->pNext = NULL; + pFree->pPrev = NULL; + pFree->cb = pHeapInt->cbFree; + + *phHeap = pHeapInt; + +#ifdef RTHEAPSIMPLE_STRICT + rtHeapSimpleAssertAll(pHeapInt); +#endif + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTHeapSimpleInit); + + +RTDECL(int) RTHeapSimpleRelocate(RTHEAPSIMPLE hHeap, uintptr_t offDelta) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap; + PRTHEAPSIMPLEFREE pCur; + + /* + * Validate input. + */ + AssertPtrReturn(pHeapInt, VERR_INVALID_HANDLE); + AssertReturn(pHeapInt->uMagic == RTHEAPSIMPLE_MAGIC, VERR_INVALID_HANDLE); + AssertMsgReturn((uintptr_t)pHeapInt - (uintptr_t)pHeapInt->pvEnd + pHeapInt->cbHeap == offDelta, + ("offDelta=%p, expected=%p\n", offDelta, (uintptr_t)pHeapInt->pvEnd - pHeapInt->cbHeap - (uintptr_t)pHeapInt), + VERR_INVALID_PARAMETER); + + /* + * Relocate the heap anchor block. + */ +#define RELOCATE_IT(var, type, offDelta) do { if (RT_UNLIKELY((var) != NULL)) { (var) = (type)((uintptr_t)(var) + offDelta); } } while (0) + RELOCATE_IT(pHeapInt->pvEnd, void *, offDelta); + RELOCATE_IT(pHeapInt->pFreeHead, PRTHEAPSIMPLEFREE, offDelta); + RELOCATE_IT(pHeapInt->pFreeTail, PRTHEAPSIMPLEFREE, offDelta); + + /* + * Walk the heap blocks. + */ + for (pCur = (PRTHEAPSIMPLEFREE)(pHeapInt + 1); + pCur && (uintptr_t)pCur < (uintptr_t)pHeapInt->pvEnd; + pCur = (PRTHEAPSIMPLEFREE)pCur->Core.pNext) + { + RELOCATE_IT(pCur->Core.pNext, PRTHEAPSIMPLEBLOCK, offDelta); + RELOCATE_IT(pCur->Core.pPrev, PRTHEAPSIMPLEBLOCK, offDelta); + RELOCATE_IT(pCur->Core.pHeap, PRTHEAPSIMPLEINTERNAL, offDelta); + if (RTHEAPSIMPLEBLOCK_IS_FREE(&pCur->Core)) + { + RELOCATE_IT(pCur->pNext, PRTHEAPSIMPLEFREE, offDelta); + RELOCATE_IT(pCur->pPrev, PRTHEAPSIMPLEFREE, offDelta); + } + } +#undef RELOCATE_IT + +#ifdef RTHEAPSIMPLE_STRICT + /* + * Give it a once over before we return. + */ + rtHeapSimpleAssertAll(pHeapInt); +#endif + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTHeapSimpleRelocate); + + +RTDECL(void *) RTHeapSimpleAlloc(RTHEAPSIMPLE hHeap, size_t cb, size_t cbAlignment) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap; + PRTHEAPSIMPLEBLOCK pBlock; + + /* + * Validate and adjust the input. + */ + AssertPtrReturn(pHeapInt, NULL); + if (cb < RTHEAPSIMPLE_MIN_BLOCK) + cb = RTHEAPSIMPLE_MIN_BLOCK; + else + cb = RT_ALIGN_Z(cb, RTHEAPSIMPLE_ALIGNMENT); + if (!cbAlignment) + cbAlignment = RTHEAPSIMPLE_ALIGNMENT; + else + { + Assert(!(cbAlignment & (cbAlignment - 1))); + Assert((cbAlignment & ~(cbAlignment - 1)) == cbAlignment); + if (cbAlignment < RTHEAPSIMPLE_ALIGNMENT) + cbAlignment = RTHEAPSIMPLE_ALIGNMENT; + } + + /* + * Do the allocation. + */ + pBlock = rtHeapSimpleAllocBlock(pHeapInt, cb, cbAlignment); + if (RT_LIKELY(pBlock)) + { + void *pv = pBlock + 1; + return pv; + } + return NULL; +} +RT_EXPORT_SYMBOL(RTHeapSimpleAlloc); + + +RTDECL(void *) RTHeapSimpleAllocZ(RTHEAPSIMPLE hHeap, size_t cb, size_t cbAlignment) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt = hHeap; + PRTHEAPSIMPLEBLOCK pBlock; + + /* + * Validate and adjust the input. + */ + AssertPtrReturn(pHeapInt, NULL); + if (cb < RTHEAPSIMPLE_MIN_BLOCK) + cb = RTHEAPSIMPLE_MIN_BLOCK; + else + cb = RT_ALIGN_Z(cb, RTHEAPSIMPLE_ALIGNMENT); + if (!cbAlignment) + cbAlignment = RTHEAPSIMPLE_ALIGNMENT; + else + { + Assert(!(cbAlignment & (cbAlignment - 1))); + Assert((cbAlignment & ~(cbAlignment - 1)) == cbAlignment); + if (cbAlignment < RTHEAPSIMPLE_ALIGNMENT) + cbAlignment = RTHEAPSIMPLE_ALIGNMENT; + } + + /* + * Do the allocation. + */ + pBlock = rtHeapSimpleAllocBlock(pHeapInt, cb, cbAlignment); + if (RT_LIKELY(pBlock)) + { + void *pv = pBlock + 1; + memset(pv, 0, cb); + return pv; + } + return NULL; +} +RT_EXPORT_SYMBOL(RTHeapSimpleAllocZ); + + +/** + * Allocates a block of memory from the specified heap. + * + * No parameter validation or adjustment is performed. + * + * @returns Pointer to the allocated block. + * @returns NULL on failure. + * + * @param pHeapInt The heap. + * @param cb Size of the memory block to allocate. + * @param uAlignment The alignment specifications for the allocated block. + */ +static PRTHEAPSIMPLEBLOCK rtHeapSimpleAllocBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, size_t cb, size_t uAlignment) +{ + PRTHEAPSIMPLEBLOCK pRet = NULL; + PRTHEAPSIMPLEFREE pFree; + +#ifdef RTHEAPSIMPLE_STRICT + rtHeapSimpleAssertAll(pHeapInt); +#endif + + /* + * Search for a fitting block from the lower end of the heap. + */ + for (pFree = pHeapInt->pFreeHead; + pFree; + pFree = pFree->pNext) + { + uintptr_t offAlign; + ASSERT_BLOCK_FREE(pHeapInt, pFree); + + /* + * Match for size and alignment. + */ + if (pFree->cb < cb) + continue; + offAlign = (uintptr_t)(&pFree->Core + 1) & (uAlignment - 1); + if (offAlign) + { + RTHEAPSIMPLEFREE Free; + PRTHEAPSIMPLEBLOCK pPrev; + + offAlign = uAlignment - offAlign; + if (pFree->cb - offAlign < cb) + continue; + + /* + * Make a stack copy of the free block header and adjust the pointer. + */ + Free = *pFree; + pFree = (PRTHEAPSIMPLEFREE)((uintptr_t)pFree + offAlign); + + /* + * Donate offAlign bytes to the node in front of us. + * If we're the head node, we'll have to create a fake node. We'll + * mark it USED for simplicity. + * + * (Should this policy of donating memory to the guy in front of us + * cause big 'leaks', we could create a new free node if there is room + * for that.) + */ + pPrev = Free.Core.pPrev; + if (pPrev) + { + AssertMsg(!RTHEAPSIMPLEBLOCK_IS_FREE(pPrev), ("Impossible!\n")); + pPrev->pNext = &pFree->Core; + } + else + { + pPrev = (PRTHEAPSIMPLEBLOCK)(pHeapInt + 1); + Assert(pPrev == &pFree->Core); + pPrev->pPrev = NULL; + pPrev->pNext = &pFree->Core; + pPrev->pHeap = pHeapInt; + pPrev->fFlags = RTHEAPSIMPLEBLOCK_FLAGS_MAGIC; + } + pHeapInt->cbFree -= offAlign; + + /* + * Recreate pFree in the new position and adjust the neighbors. + */ + *pFree = Free; + + /* the core */ + if (pFree->Core.pNext) + pFree->Core.pNext->pPrev = &pFree->Core; + pFree->Core.pPrev = pPrev; + + /* the free part */ + pFree->cb -= offAlign; + if (pFree->pNext) + pFree->pNext->pPrev = pFree; + else + pHeapInt->pFreeTail = pFree; + if (pFree->pPrev) + pFree->pPrev->pNext = pFree; + else + pHeapInt->pFreeHead = pFree; + ASSERT_BLOCK_FREE(pHeapInt, pFree); + ASSERT_BLOCK_USED(pHeapInt, pPrev); + } + + /* + * Split off a new FREE block? + */ + if (pFree->cb >= cb + RT_ALIGN_Z(sizeof(RTHEAPSIMPLEFREE), RTHEAPSIMPLE_ALIGNMENT)) + { + /* + * Move the FREE block up to make room for the new USED block. + */ + PRTHEAPSIMPLEFREE pNew = (PRTHEAPSIMPLEFREE)((uintptr_t)&pFree->Core + cb + sizeof(RTHEAPSIMPLEBLOCK)); + + pNew->Core.pNext = pFree->Core.pNext; + if (pFree->Core.pNext) + pFree->Core.pNext->pPrev = &pNew->Core; + pNew->Core.pPrev = &pFree->Core; + pNew->Core.pHeap = pHeapInt; + pNew->Core.fFlags = RTHEAPSIMPLEBLOCK_FLAGS_MAGIC | RTHEAPSIMPLEBLOCK_FLAGS_FREE; + + pNew->pNext = pFree->pNext; + if (pNew->pNext) + pNew->pNext->pPrev = pNew; + else + pHeapInt->pFreeTail = pNew; + pNew->pPrev = pFree->pPrev; + if (pNew->pPrev) + pNew->pPrev->pNext = pNew; + else + pHeapInt->pFreeHead = pNew; + pNew->cb = (pNew->Core.pNext ? (uintptr_t)pNew->Core.pNext : (uintptr_t)pHeapInt->pvEnd) \ + - (uintptr_t)pNew - sizeof(RTHEAPSIMPLEBLOCK); + ASSERT_BLOCK_FREE(pHeapInt, pNew); + + /* + * Update the old FREE node making it a USED node. + */ + pFree->Core.fFlags &= ~RTHEAPSIMPLEBLOCK_FLAGS_FREE; + pFree->Core.pNext = &pNew->Core; + pHeapInt->cbFree -= pFree->cb; + pHeapInt->cbFree += pNew->cb; + pRet = &pFree->Core; + ASSERT_BLOCK_USED(pHeapInt, pRet); + } + else + { + /* + * Link it out of the free list. + */ + if (pFree->pNext) + pFree->pNext->pPrev = pFree->pPrev; + else + pHeapInt->pFreeTail = pFree->pPrev; + if (pFree->pPrev) + pFree->pPrev->pNext = pFree->pNext; + else + pHeapInt->pFreeHead = pFree->pNext; + + /* + * Convert it to a used block. + */ + pHeapInt->cbFree -= pFree->cb; + pFree->Core.fFlags &= ~RTHEAPSIMPLEBLOCK_FLAGS_FREE; + pRet = &pFree->Core; + ASSERT_BLOCK_USED(pHeapInt, pRet); + } + break; + } + +#ifdef RTHEAPSIMPLE_STRICT + rtHeapSimpleAssertAll(pHeapInt); +#endif + return pRet; +} + + +RTDECL(void) RTHeapSimpleFree(RTHEAPSIMPLE hHeap, void *pv) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt; + PRTHEAPSIMPLEBLOCK pBlock; + + /* + * Validate input. + */ + if (!pv) + return; + AssertPtr(pv); + Assert(RT_ALIGN_P(pv, RTHEAPSIMPLE_ALIGNMENT) == pv); + + /* + * Get the block and heap. If in strict mode, validate these. + */ + pBlock = (PRTHEAPSIMPLEBLOCK)pv - 1; + pHeapInt = pBlock->pHeap; + ASSERT_BLOCK_USED(pHeapInt, pBlock); + ASSERT_ANCHOR(pHeapInt); + Assert(pHeapInt == (PRTHEAPSIMPLEINTERNAL)hHeap || !hHeap); RT_NOREF_PV(hHeap); + +#ifdef RTHEAPSIMPLE_FREE_POISON + /* + * Poison the block. + */ + const size_t cbBlock = (pBlock->pNext ? (uintptr_t)pBlock->pNext : (uintptr_t)pHeapInt->pvEnd) + - (uintptr_t)pBlock - sizeof(RTHEAPSIMPLEBLOCK); + memset(pBlock + 1, RTHEAPSIMPLE_FREE_POISON, cbBlock); +#endif + + /* + * Call worker which does the actual job. + */ + rtHeapSimpleFreeBlock(pHeapInt, pBlock); +} +RT_EXPORT_SYMBOL(RTHeapSimpleFree); + + +/** + * Free a memory block. + * + * @param pHeapInt The heap. + * @param pBlock The memory block to free. + */ +static void rtHeapSimpleFreeBlock(PRTHEAPSIMPLEINTERNAL pHeapInt, PRTHEAPSIMPLEBLOCK pBlock) +{ + PRTHEAPSIMPLEFREE pFree = (PRTHEAPSIMPLEFREE)pBlock; + PRTHEAPSIMPLEFREE pLeft; + PRTHEAPSIMPLEFREE pRight; + +#ifdef RTHEAPSIMPLE_STRICT + rtHeapSimpleAssertAll(pHeapInt); +#endif + + /* + * Look for the closest free list blocks by walking the blocks right + * of us (both lists are sorted by address). + */ + pLeft = NULL; + pRight = NULL; + if (pHeapInt->pFreeTail) + { + pRight = (PRTHEAPSIMPLEFREE)pFree->Core.pNext; + while (pRight && !RTHEAPSIMPLEBLOCK_IS_FREE(&pRight->Core)) + { + ASSERT_BLOCK(pHeapInt, &pRight->Core); + pRight = (PRTHEAPSIMPLEFREE)pRight->Core.pNext; + } + if (!pRight) + pLeft = pHeapInt->pFreeTail; + else + { + ASSERT_BLOCK_FREE(pHeapInt, pRight); + pLeft = pRight->pPrev; + } + if (pLeft) + ASSERT_BLOCK_FREE(pHeapInt, pLeft); + } + AssertMsgReturnVoid(pLeft != pFree, ("Freed twice! pv=%p (pBlock=%p)\n", pBlock + 1, pBlock)); + ASSERT_L(pLeft, pFree); + Assert(!pRight || (uintptr_t)pRight > (uintptr_t)pFree); + Assert(!pLeft || pLeft->pNext == pRight); + + /* + * Insert at the head of the free block list? + */ + if (!pLeft) + { + Assert(pRight == pHeapInt->pFreeHead); + pFree->Core.fFlags |= RTHEAPSIMPLEBLOCK_FLAGS_FREE; + pFree->pPrev = NULL; + pFree->pNext = pRight; + if (pRight) + pRight->pPrev = pFree; + else + pHeapInt->pFreeTail = pFree; + pHeapInt->pFreeHead = pFree; + } + else + { + /* + * Can we merge with left hand free block? + */ + if (pLeft->Core.pNext == &pFree->Core) + { + pLeft->Core.pNext = pFree->Core.pNext; + if (pFree->Core.pNext) + pFree->Core.pNext->pPrev = &pLeft->Core; + pHeapInt->cbFree -= pLeft->cb; + pFree = pLeft; + } + /* + * No, just link it into the free list then. + */ + else + { + pFree->Core.fFlags |= RTHEAPSIMPLEBLOCK_FLAGS_FREE; + pFree->pNext = pRight; + pFree->pPrev = pLeft; + pLeft->pNext = pFree; + if (pRight) + pRight->pPrev = pFree; + else + pHeapInt->pFreeTail = pFree; + } + } + + /* + * Can we merge with right hand free block? + */ + if ( pRight + && pRight->Core.pPrev == &pFree->Core) + { + /* core */ + pFree->Core.pNext = pRight->Core.pNext; + if (pRight->Core.pNext) + pRight->Core.pNext->pPrev = &pFree->Core; + + /* free */ + pFree->pNext = pRight->pNext; + if (pRight->pNext) + pRight->pNext->pPrev = pFree; + else + pHeapInt->pFreeTail = pFree; + pHeapInt->cbFree -= pRight->cb; + } + + /* + * Calculate the size and update free stats. + */ + pFree->cb = (pFree->Core.pNext ? (uintptr_t)pFree->Core.pNext : (uintptr_t)pHeapInt->pvEnd) + - (uintptr_t)pFree - sizeof(RTHEAPSIMPLEBLOCK); + pHeapInt->cbFree += pFree->cb; + ASSERT_BLOCK_FREE(pHeapInt, pFree); + +#ifdef RTHEAPSIMPLE_STRICT + rtHeapSimpleAssertAll(pHeapInt); +#endif +} + + +#ifdef RTHEAPSIMPLE_STRICT +/** + * Internal consistency check (relying on assertions). + * @param pHeapInt + */ +static void rtHeapSimpleAssertAll(PRTHEAPSIMPLEINTERNAL pHeapInt) +{ + PRTHEAPSIMPLEFREE pPrev = NULL; + PRTHEAPSIMPLEFREE pPrevFree = NULL; + PRTHEAPSIMPLEFREE pBlock; + for (pBlock = (PRTHEAPSIMPLEFREE)(pHeapInt + 1); + pBlock; + pBlock = (PRTHEAPSIMPLEFREE)pBlock->Core.pNext) + { + if (RTHEAPSIMPLEBLOCK_IS_FREE(&pBlock->Core)) + { + ASSERT_BLOCK_FREE(pHeapInt, pBlock); + Assert(pBlock->pPrev == pPrevFree); + Assert(pPrevFree || pHeapInt->pFreeHead == pBlock); + pPrevFree = pBlock; + } + else + ASSERT_BLOCK_USED(pHeapInt, &pBlock->Core); + Assert(!pPrev || pPrev == (PRTHEAPSIMPLEFREE)pBlock->Core.pPrev); + pPrev = pBlock; + } + Assert(pHeapInt->pFreeTail == pPrevFree); +} +#endif + + +RTDECL(size_t) RTHeapSimpleSize(RTHEAPSIMPLE hHeap, void *pv) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt; + PRTHEAPSIMPLEBLOCK pBlock; + size_t cbBlock; + + /* + * Validate input. + */ + if (!pv) + return 0; + AssertPtrReturn(pv, 0); + AssertReturn(RT_ALIGN_P(pv, RTHEAPSIMPLE_ALIGNMENT) == pv, 0); + + /* + * Get the block and heap. If in strict mode, validate these. + */ + pBlock = (PRTHEAPSIMPLEBLOCK)pv - 1; + pHeapInt = pBlock->pHeap; + ASSERT_BLOCK_USED(pHeapInt, pBlock); + ASSERT_ANCHOR(pHeapInt); + Assert(pHeapInt == (PRTHEAPSIMPLEINTERNAL)hHeap || !hHeap); RT_NOREF_PV(hHeap); + + /* + * Calculate the block size. + */ + cbBlock = (pBlock->pNext ? (uintptr_t)pBlock->pNext : (uintptr_t)pHeapInt->pvEnd) + - (uintptr_t)pBlock- sizeof(RTHEAPSIMPLEBLOCK); + return cbBlock; +} +RT_EXPORT_SYMBOL(RTHeapSimpleSize); + + +RTDECL(size_t) RTHeapSimpleGetHeapSize(RTHEAPSIMPLE hHeap) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt; + + if (hHeap == NIL_RTHEAPSIMPLE) + return 0; + + pHeapInt = hHeap; + AssertPtrReturn(pHeapInt, 0); + ASSERT_ANCHOR(pHeapInt); + return pHeapInt->cbHeap; +} +RT_EXPORT_SYMBOL(RTHeapSimpleGetHeapSize); + + +RTDECL(size_t) RTHeapSimpleGetFreeSize(RTHEAPSIMPLE hHeap) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt; + + if (hHeap == NIL_RTHEAPSIMPLE) + return 0; + + pHeapInt = hHeap; + AssertPtrReturn(pHeapInt, 0); + ASSERT_ANCHOR(pHeapInt); + return pHeapInt->cbFree; +} +RT_EXPORT_SYMBOL(RTHeapSimpleGetFreeSize); + + +RTDECL(void) RTHeapSimpleDump(RTHEAPSIMPLE hHeap, PFNRTHEAPSIMPLEPRINTF pfnPrintf) +{ + PRTHEAPSIMPLEINTERNAL pHeapInt = (PRTHEAPSIMPLEINTERNAL)hHeap; + PRTHEAPSIMPLEFREE pBlock; + + pfnPrintf("**** Dumping Heap %p - cbHeap=%zx cbFree=%zx ****\n", + hHeap, pHeapInt->cbHeap, pHeapInt->cbFree); + + for (pBlock = (PRTHEAPSIMPLEFREE)(pHeapInt + 1); + pBlock; + pBlock = (PRTHEAPSIMPLEFREE)pBlock->Core.pNext) + { + size_t cb = (pBlock->pNext ? (uintptr_t)pBlock->Core.pNext : (uintptr_t)pHeapInt->pvEnd) + - (uintptr_t)pBlock - sizeof(RTHEAPSIMPLEBLOCK); + if (RTHEAPSIMPLEBLOCK_IS_FREE(&pBlock->Core)) + pfnPrintf("%p %06x FREE pNext=%p pPrev=%p fFlags=%#x cb=%#06x : cb=%#06x pNext=%p pPrev=%p\n", + pBlock, (uintptr_t)pBlock - (uintptr_t)(pHeapInt + 1), pBlock->Core.pNext, pBlock->Core.pPrev, pBlock->Core.fFlags, cb, + pBlock->cb, pBlock->pNext, pBlock->pPrev); + else + pfnPrintf("%p %06x USED pNext=%p pPrev=%p fFlags=%#x cb=%#06x\n", + pBlock, (uintptr_t)pBlock - (uintptr_t)(pHeapInt + 1), pBlock->Core.pNext, pBlock->Core.pPrev, pBlock->Core.fFlags, cb); + } + pfnPrintf("**** Done dumping Heap %p ****\n", hHeap); +} +RT_EXPORT_SYMBOL(RTHeapSimpleDump); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/err/RTErrConvertFromErrno.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/err/RTErrConvertFromErrno.c @@ -0,0 +1,453 @@ +/* $Id: RTErrConvertFromErrno.cpp $ */ +/** @file + * IPRT - Convert errno to iprt status codes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include +#include + + +RTDECL(int) RTErrConvertFromErrno(unsigned uNativeCode) +{ + /* very fast check for no error. */ + if (uNativeCode == 0) + return VINF_SUCCESS; + + /* + * Process error codes. + * + * (Use a switch and not a table since the numbers vary among compilers + * and OSes. So we let the compiler switch optimizer handle speed issues.) + * + * This switch is arranged like the Linux i386 errno.h! This switch is mirrored + * by RTErrConvertToErrno. + */ + switch (uNativeCode) + { /* Linux number */ +#ifdef EPERM + case EPERM: return VERR_ACCESS_DENIED; /* 1 */ +#endif +#ifdef ENOENT + case ENOENT: return VERR_FILE_NOT_FOUND; +#endif +#ifdef ESRCH + case ESRCH: return VERR_PROCESS_NOT_FOUND; +#endif +#ifdef EINTR + case EINTR: return VERR_INTERRUPTED; +#endif +#ifdef EIO + case EIO: return VERR_DEV_IO_ERROR; +#endif +#ifdef ENXIO + case ENXIO: return VERR_DEV_IO_ERROR; /** @todo fix this duplicate error */ +#endif +#ifdef E2BIG + case E2BIG: return VERR_TOO_MUCH_DATA; +#endif +#ifdef ENOEXEC + case ENOEXEC: return VERR_BAD_EXE_FORMAT; +#endif +#ifdef EBADF + case EBADF: return VERR_INVALID_HANDLE; +#endif +#ifdef ECHILD + case ECHILD: return VERR_PROCESS_NOT_FOUND; /* 10 */ /** @todo fix duplicate error */ +#endif +#ifdef EAGAIN + case EAGAIN: return VERR_TRY_AGAIN; +#endif +#ifdef ENOMEM + case ENOMEM: return VERR_NO_MEMORY; +#endif +#ifdef EACCES + case EACCES: return VERR_ACCESS_DENIED; /** @todo fix duplicate error */ +#endif +#ifdef EFAULT + case EFAULT: return VERR_INVALID_POINTER; +#endif +#ifdef ENOTBLK + //case ENOTBLK: return VERR_; +#endif +#ifdef EBUSY + case EBUSY: return VERR_RESOURCE_BUSY; +#endif +#ifdef EEXIST + case EEXIST: return VERR_ALREADY_EXISTS; +#endif +#ifdef EXDEV + case EXDEV: return VERR_NOT_SAME_DEVICE; +#endif +#ifdef ENODEV + case ENODEV: return VERR_NOT_SUPPORTED; /** @todo fix duplicate error */ +#endif +#ifdef ENOTDIR + case ENOTDIR: return VERR_PATH_NOT_FOUND; /* 20 */ +#endif +#ifdef EISDIR + case EISDIR: return VERR_IS_A_DIRECTORY; +#endif +#ifdef EINVAL + case EINVAL: return VERR_INVALID_PARAMETER; +#endif +#ifdef ENFILE + case ENFILE: return VERR_TOO_MANY_OPEN_FILES; /** @todo fix duplicate error */ +#endif +#ifdef EMFILE + case EMFILE: return VERR_TOO_MANY_OPEN_FILES; +#endif +#ifdef ENOTTY + case ENOTTY: return VERR_INVALID_FUNCTION; +#endif +#ifdef ETXTBSY + case ETXTBSY: return VERR_SHARING_VIOLATION; +#endif +#ifdef EFBIG + case EFBIG: return VERR_FILE_TOO_BIG; +#endif +#ifdef ENOSPC + case ENOSPC: return VERR_DISK_FULL; +#endif +#ifdef ESPIPE + case ESPIPE: return VERR_SEEK_ON_DEVICE; +#endif +#ifdef EROFS + case EROFS: return VERR_WRITE_PROTECT; /* 30 */ +#endif +#ifdef EMLINK + //case EMLINK: +#endif +#ifdef EPIPE + case EPIPE: return VERR_BROKEN_PIPE; +#endif +#ifdef EDOM + case EDOM: return VERR_INVALID_PARAMETER; /** @todo fix duplicate error */ +#endif +#ifdef ERANGE + case ERANGE: return VERR_INVALID_PARAMETER; /** @todo fix duplicate error */ +#endif +#ifdef EDEADLK + case EDEADLK: return VERR_DEADLOCK; +#endif +#ifdef ENAMETOOLONG + case ENAMETOOLONG: return VERR_FILENAME_TOO_LONG; +#endif +#ifdef ENOLCK + case ENOLCK: return VERR_FILE_LOCK_FAILED; +#endif +#ifdef ENOSYS /** @todo map this differently on solaris. */ + case ENOSYS: return VERR_NOT_SUPPORTED; +#endif +#ifdef ENOTEMPTY + case ENOTEMPTY: return VERR_DIR_NOT_EMPTY; +#endif +#ifdef ELOOP + case ELOOP: return VERR_TOO_MANY_SYMLINKS; /* 40 */ +#endif + //41?? +#ifdef ENOMSG + //case ENOMSG 42 /* No message of desired type */ +#endif +#ifdef EIDRM + //case EIDRM 43 /* Identifier removed */ +#endif +#ifdef ECHRNG + //case ECHRNG 44 /* Channel number out of range */ +#endif +#ifdef EL2NSYNC + //case EL2NSYNC 45 /* Level 2 not synchronized */ +#endif +#ifdef EL3HLT + //case EL3HLT 46 /* Level 3 halted */ +#endif +#ifdef EL3RST + //case EL3RST 47 /* Level 3 reset */ +#endif +#ifdef ELNRNG + //case ELNRNG 48 /* Link number out of range */ +#endif +#ifdef EUNATCH + //case EUNATCH 49 /* Protocol driver not attached */ +#endif +#ifdef ENOCSI + //case ENOCSI 50 /* No CSI structure available */ +#endif +#ifdef EL2HLT + //case EL2HLT 51 /* Level 2 halted */ +#endif +#ifdef EBADE + //case EBADE 52 /* Invalid exchange */ +#endif +#ifdef EBADR + //case EBADR 53 /* Invalid request descriptor */ +#endif +#ifdef EXFULL + //case EXFULL 54 /* Exchange full */ +#endif +#ifdef ENOANO + //case ENOANO 55 /* No anode */ +#endif +#ifdef EBADRQC + //case EBADRQC 56 /* Invalid request code */ +#endif +#ifdef EBADSLT + //case EBADSLT 57 /* Invalid slot */ +#endif + //case 58: +#ifdef EBFONT + //case EBFONT 59 /* Bad font file format */ +#endif +#ifdef ENOSTR + //case ENOSTR 60 /* Device not a stream */ +#endif +#ifdef ENODATA + case ENODATA: return VERR_NO_DATA; +#endif +#ifdef ETIME + //case ETIME 62 /* Timer expired */ +#endif +#ifdef ENOSR + //case ENOSR 63 /* Out of streams resources */ +#endif +#ifdef ENONET + case ENONET: return VERR_NET_NO_NETWORK; +#endif +#ifdef ENOPKG + //case ENOPKG 65 /* Package not installed */ +#endif +#ifdef EREMOTE + //case EREMOTE 66 /* Object is remote */ +#endif +#ifdef ENOLINK + //case ENOLINK 67 /* Link has been severed */ +#endif +#ifdef EADV + //case EADV 68 /* Advertise error */ +#endif +#ifdef ESRMNT + //case ESRMNT 69 /* Srmount error */ +#endif +#ifdef ECOMM + //case ECOMM 70 /* Communication error on send */ +#endif +#ifdef EPROTO + case EPROTO: return VERR_NET_PROTOCOL_ERROR; +#endif +#ifdef EMULTIHOP + //case EMULTIHOP 72 /* Multihop attempted */ +#endif +#ifdef EDOTDOT + //case EDOTDOT 73 /* RFS specific error */ +#endif +#ifdef EBADMSG + //case EBADMSG 74 /* Not a data message */ +#endif +#ifdef EOVERFLOW + case EOVERFLOW: return VERR_TOO_MUCH_DATA; /** @todo fix duplicate error */ +#endif +#ifdef ENOTUNIQ + case ENOTUNIQ: return VERR_NET_NOT_UNIQUE_NAME; +#endif +#ifdef EBADFD + case EBADFD: return VERR_INVALID_HANDLE; /** @todo fix duplicate error? */ +#endif +#ifdef EREMCHG + //case EREMCHG 78 /* Remote address changed */ +#endif +#ifdef ELIBACC + //case ELIBACC 79 /* Can not access a needed shared library */ +#endif +#ifdef ELIBBAD + //case ELIBBAD 80 /* Accessing a corrupted shared library */ +#endif +#ifdef ELIBSCN + //case ELIBSCN 81 /* .lib section in a.out corrupted */ +#endif +#ifdef ELIBMAX + //case ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#endif +#ifdef ELIBEXEC + //case ELIBEXEC 83 /* Cannot exec a shared library directly */ +#endif +#ifdef EILSEQ + case EILSEQ: return VERR_NO_TRANSLATION; +#endif +#ifdef ERESTART + case ERESTART: return VERR_INTERRUPTED;/** @todo fix duplicate error?*/ +#endif +#ifdef ESTRPIPE + //case ESTRPIPE 86 /* Streams pipe error */ +#endif +#ifdef EUSERS + //case EUSERS 87 /* Too many users */ +#endif +#ifdef ENOTSOCK + case ENOTSOCK: return VERR_NET_NOT_SOCKET; +#endif +#ifdef EDESTADDRREQ + case EDESTADDRREQ: return VERR_NET_DEST_ADDRESS_REQUIRED; +#endif +#ifdef EMSGSIZE + case EMSGSIZE: return VERR_NET_MSG_SIZE; +#endif +#ifdef EPROTOTYPE + case EPROTOTYPE: return VERR_NET_PROTOCOL_TYPE; +#endif +#ifdef ENOPROTOOPT + case ENOPROTOOPT: return VERR_NET_PROTOCOL_NOT_AVAILABLE; +#endif +#ifdef EPROTONOSUPPORT + case EPROTONOSUPPORT: return VERR_NET_PROTOCOL_NOT_SUPPORTED; +#endif +#ifdef ESOCKTNOSUPPORT + case ESOCKTNOSUPPORT: return VERR_NET_SOCKET_TYPE_NOT_SUPPORTED; +#endif +#ifdef EOPNOTSUPP /** @todo map this differently on solaris. */ + case EOPNOTSUPP: return VERR_NET_OPERATION_NOT_SUPPORTED; +#endif +#ifdef EPFNOSUPPORT + case EPFNOSUPPORT: return VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED; +#endif +#ifdef EAFNOSUPPORT + case EAFNOSUPPORT: return VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED; +#endif +#ifdef EADDRINUSE + case EADDRINUSE: return VERR_NET_ADDRESS_IN_USE; +#endif +#ifdef EADDRNOTAVAIL + case EADDRNOTAVAIL: return VERR_NET_ADDRESS_NOT_AVAILABLE; +#endif +#ifdef ENETDOWN + case ENETDOWN: return VERR_NET_DOWN; +#endif +#ifdef ENETUNREACH + case ENETUNREACH: return VERR_NET_UNREACHABLE; +#endif +#ifdef ENETRESET + case ENETRESET: return VERR_NET_CONNECTION_RESET; +#endif +#ifdef ECONNABORTED + case ECONNABORTED: return VERR_NET_CONNECTION_ABORTED; +#endif +#ifdef ECONNRESET + case ECONNRESET: return VERR_NET_CONNECTION_RESET_BY_PEER; +#endif +#ifdef ENOBUFS + case ENOBUFS: return VERR_NET_NO_BUFFER_SPACE; +#endif +#ifdef EISCONN + case EISCONN: return VERR_NET_ALREADY_CONNECTED; +#endif +#ifdef ENOTCONN + case ENOTCONN: return VERR_NET_NOT_CONNECTED; +#endif +#ifdef ESHUTDOWN + case ESHUTDOWN: return VERR_NET_SHUTDOWN; +#endif +#ifdef ETOOMANYREFS + case ETOOMANYREFS: return VERR_NET_TOO_MANY_REFERENCES; +#endif +#ifdef ETIMEDOUT + case ETIMEDOUT: return VERR_TIMEOUT; +#endif +#ifdef ECONNREFUSED + case ECONNREFUSED: return VERR_NET_CONNECTION_REFUSED; +#endif +#ifdef EHOSTDOWN + case EHOSTDOWN: return VERR_NET_HOST_DOWN; +#endif +#ifdef EHOSTUNREACH + case EHOSTUNREACH: return VERR_NET_HOST_UNREACHABLE; +#endif +#ifdef EALREADY + case EALREADY: return VERR_NET_ALREADY_IN_PROGRESS; +#endif +#ifdef EINPROGRESS + case EINPROGRESS: return VERR_NET_IN_PROGRESS; +#endif +#ifdef ESTALE + //case ESTALE 116 /* Stale NFS file handle */ +#endif +#ifdef EUCLEAN + //case EUCLEAN 117 /* Structure needs cleaning */ +#endif +#ifdef ENOTNAM + //case ENOTNAM 118 /* Not a XENIX named type file */ +#endif +#ifdef ENAVAIL + //case ENAVAIL 119 /* No XENIX semaphores available */ +#endif +#ifdef EISNAM + //case EISNAM 120 /* Is a named type file */ +#endif +#ifdef EREMOTEIO + //case EREMOTEIO 121 /* Remote I/O error */ +#endif +#ifdef EDQUOT + case EDQUOT: return VERR_DISK_FULL; /** @todo fix duplicate error */ +#endif +#ifdef ENOMEDIUM + case ENOMEDIUM: return VERR_MEDIA_NOT_PRESENT; +#endif +#ifdef EMEDIUMTYPE + case EMEDIUMTYPE: return VERR_MEDIA_NOT_RECOGNIZED; +#endif +#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) + case EWOULDBLOCK: return VERR_TRY_AGAIN; +#endif + + /* Non-linux */ + +#ifdef EPROCLIM + case EPROCLIM: return VERR_MAX_PROCS_REACHED; +#endif +#ifdef EDOOFUS +# if EDOOFUS != EINVAL + case EDOOFUS: return VERR_INTERNAL_ERROR; +# endif +#endif +#ifdef ENOTSUP +# ifndef EOPNOTSUPP + case ENOTSUP: return VERR_NOT_SUPPORTED; +# else +# if ENOTSUP != EOPNOTSUPP + case ENOTSUP: return VERR_NOT_SUPPORTED; +# endif +# endif +#endif + default: + AssertLogRelMsgFailed(("Unhandled error code %d\n", uNativeCode)); + return VERR_UNRESOLVED_ERROR; + } +} +RT_EXPORT_SYMBOL(RTErrConvertFromErrno); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/err/RTErrConvertToErrno.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/err/RTErrConvertToErrno.c @@ -0,0 +1,451 @@ +/* $Id: RTErrConvertToErrno.cpp $ */ +/** @file + * IPRT - Convert iprt status codes to errno. + */ + +/* + * Copyright (C) 2007-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include +#include + + +RTDECL(int) RTErrConvertToErrno(int iErr) +{ + /* very fast check for no error. */ + if (RT_SUCCESS(iErr)) + return 0; + + /* + * Process error codes. + * + * (Use a switch and not a table since the numbers vary among compilers + * and OSes. So we let the compiler switch optimizer handle speed issues.) + * + * This switch is arranged like the Linux i386 errno.h! It also mirrors the + * conversions performed by RTErrConvertFromErrno with a few extra case since + * there are far more IPRT status codes than Unix ones. + */ + switch (iErr) + { +#ifdef EPERM + case VERR_ACCESS_DENIED: return EPERM; +#endif +#ifdef ENOENT + case VERR_FILE_NOT_FOUND: return ENOENT; +#endif +#ifdef ESRCH + case VERR_PROCESS_NOT_FOUND: return ESRCH; +#endif +#ifdef EINTR + case VERR_INTERRUPTED: return EINTR; +#endif +#ifdef EIO + case VERR_DEV_IO_ERROR: return EIO; +#endif +#ifdef ENXIO + //case VERR_DEV_IO_ERROR: return ENXIO; +#endif +#ifdef E2BIG + case VERR_TOO_MUCH_DATA: return E2BIG; +#endif +#ifdef ENOEXEC + case VERR_BAD_EXE_FORMAT: return ENOEXEC; +#endif +#ifdef EBADF + case VERR_INVALID_HANDLE: return EBADF; +#endif +#ifdef ECHILD + //case VERR_PROCESS_NOT_FOUND: return ECHILD; +#endif +#ifdef EAGAIN + case VERR_TRY_AGAIN: return EAGAIN; +#endif +#ifdef ENOMEM + case VERR_NO_MEMORY: return ENOMEM; +#endif +#ifdef EACCES + //case VERR_ACCESS_DENIED: return EACCES; +#endif +#ifdef EFAULT + case VERR_INVALID_POINTER: return EFAULT; +#endif +#ifdef ENOTBLK + //case ENOTBLK: return VERR_; +#endif +#ifdef EBUSY + case VERR_RESOURCE_BUSY: return EBUSY; +#endif +#ifdef EEXIST + case VERR_ALREADY_EXISTS: return EEXIST; +#endif +#ifdef EXDEV + case VERR_NOT_SAME_DEVICE: return EXDEV; +#endif +#ifdef ENODEV + //case VERR_NOT_SUPPORTED: return ENODEV; +#endif +#ifdef ENOTDIR + case VERR_NOT_A_DIRECTORY: + case VERR_PATH_NOT_FOUND: return ENOTDIR; +#endif +#ifdef EISDIR + case VERR_IS_A_DIRECTORY: return EISDIR; +#endif +#ifdef EINVAL + case VERR_INVALID_PARAMETER: return EINVAL; +#endif +#ifdef ENFILE + case VERR_TOO_MANY_OPEN_FILES: return ENFILE; +#endif +#ifdef EMFILE + //case VERR_TOO_MANY_OPEN_FILES: return EMFILE; +#endif +#ifdef ENOTTY + case VERR_INVALID_FUNCTION: return ENOTTY; +#endif +#ifdef ETXTBSY + case VERR_SHARING_VIOLATION: return ETXTBSY; +#endif +#ifdef EFBIG + case VERR_FILE_TOO_BIG: return EFBIG; +#endif +#ifdef ENOSPC + case VERR_DISK_FULL: return ENOSPC; +#endif +#ifdef ESPIPE + case VERR_SEEK_ON_DEVICE: return ESPIPE; +#endif +#ifdef EROFS + case VERR_WRITE_PROTECT: return EROFS; +#endif +#ifdef EMLINK + //case EMLINK: +#endif +#ifdef EPIPE + case VERR_BROKEN_PIPE: return EPIPE; +#endif +#ifdef EDOM + //case VERR_INVALID_PARAMETER: return EDOM; +#endif +#ifdef ERANGE + //case VERR_INVALID_PARAMETER: return ERANGE; +#endif +#ifdef EDEADLK + case VERR_DEADLOCK: return EDEADLK; +#endif +#ifdef ENAMETOOLONG + case VERR_FILENAME_TOO_LONG: return ENAMETOOLONG; +#endif +#ifdef ENOLCK + case VERR_FILE_LOCK_FAILED: return ENOLCK; +#endif +#ifdef ENOSYS + case VERR_NOT_IMPLEMENTED: + case VERR_NOT_SUPPORTED: return ENOSYS; +#endif +#ifdef ENOTEMPTY + case VERR_DIR_NOT_EMPTY: return ENOTEMPTY; +#endif +#ifdef ELOOP + case VERR_TOO_MANY_SYMLINKS: return ELOOP; +#endif + //41?? +#ifdef ENOMSG + //case ENOMSG 42 /* No message of desired type */ +#endif +#ifdef EIDRM + //case EIDRM 43 /* Identifier removed */ +#endif +#ifdef ECHRNG + //case ECHRNG 44 /* Channel number out of range */ +#endif +#ifdef EL2NSYNC + //case EL2NSYNC 45 /* Level 2 not synchronized */ +#endif +#ifdef EL3HLT + //case EL3HLT 46 /* Level 3 halted */ +#endif +#ifdef EL3RST + //case EL3RST 47 /* Level 3 reset */ +#endif +#ifdef ELNRNG + //case ELNRNG 48 /* Link number out of range */ +#endif +#ifdef EUNATCH + //case EUNATCH 49 /* Protocol driver not attached */ +#endif +#ifdef ENOCSI + //case ENOCSI 50 /* No CSI structure available */ +#endif +#ifdef EL2HLT + //case EL2HLT 51 /* Level 2 halted */ +#endif +#ifdef EBADE + //case EBADE 52 /* Invalid exchange */ +#endif +#ifdef EBADR + //case EBADR 53 /* Invalid request descriptor */ +#endif +#ifdef EXFULL + //case EXFULL 54 /* Exchange full */ +#endif +#ifdef ENOANO + //case ENOANO 55 /* No anode */ +#endif +#ifdef EBADRQC + //case EBADRQC 56 /* Invalid request code */ +#endif +#ifdef EBADSLT + //case EBADSLT 57 /* Invalid slot */ +#endif + //case 58: +#ifdef EBFONT + //case EBFONT 59 /* Bad font file format */ +#endif +#ifdef ENOSTR + //case ENOSTR 60 /* Device not a stream */ +#endif +#ifdef ENODATA + case VERR_NO_DATA: return ENODATA; +#endif +#ifdef ETIME + //case ETIME 62 /* Timer expired */ +#endif +#ifdef ENOSR + //case ENOSR 63 /* Out of streams resources */ +#endif +#ifdef ENONET + case VERR_NET_NO_NETWORK: return ENONET; +#endif +#ifdef ENOPKG + //case ENOPKG 65 /* Package not installed */ +#endif +#ifdef EREMOTE + //case EREMOTE 66 /* Object is remote */ +#endif +#ifdef ENOLINK + //case ENOLINK 67 /* Link has been severed */ +#endif +#ifdef EADV + //case EADV 68 /* Advertise error */ +#endif +#ifdef ESRMNT + //case ESRMNT 69 /* Srmount error */ +#endif +#ifdef ECOMM + //case ECOMM 70 /* Communication error on send */ +#endif +#ifdef EPROTO + //case EPROTO 71 /* Protocol error */ +#endif +#ifdef EMULTIHOP + //case EMULTIHOP 72 /* Multihop attempted */ +#endif +#ifdef EDOTDOT + //case EDOTDOT 73 /* RFS specific error */ +#endif +#ifdef EBADMSG + //case EBADMSG 74 /* Not a data message */ +#endif +#ifdef EOVERFLOW + //case VERR_TOO_MUCH_DATA: return EOVERFLOW; +#endif +#ifdef ENOTUNIQ + case VERR_NET_NOT_UNIQUE_NAME: return ENOTUNIQ; +#endif +#ifdef EBADFD + //case VERR_INVALID_HANDLE: return EBADFD; +#endif +#ifdef EREMCHG + //case EREMCHG 78 /* Remote address changed */ +#endif +#ifdef ELIBACC + //case ELIBACC 79 /* Can not access a needed shared library */ +#endif +#ifdef ELIBBAD + //case ELIBBAD 80 /* Accessing a corrupted shared library */ +#endif +#ifdef ELIBSCN + //case ELIBSCN 81 /* .lib section in a.out corrupted */ +#endif +#ifdef ELIBMAX + //case ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#endif +#ifdef ELIBEXEC + //case ELIBEXEC 83 /* Cannot exec a shared library directly */ +#endif +#ifdef EILSEQ + case VERR_NO_TRANSLATION: return EILSEQ; +#endif +#ifdef ERESTART + //case VERR_INTERRUPTED: return ERESTART; +#endif +#ifdef ESTRPIPE + //case ESTRPIPE 86 /* Streams pipe error */ +#endif +#ifdef EUSERS + //case EUSERS 87 /* Too many users */ +#endif +#ifdef ENOTSOCK + case VERR_NET_NOT_SOCKET: return ENOTSOCK; +#endif +#ifdef EDESTADDRREQ + case VERR_NET_DEST_ADDRESS_REQUIRED: return EDESTADDRREQ; +#endif +#ifdef EMSGSIZE + case VERR_NET_MSG_SIZE: return EMSGSIZE; +#endif +#ifdef EPROTOTYPE + case VERR_NET_PROTOCOL_TYPE: return EPROTOTYPE; +#endif +#ifdef ENOPROTOOPT + case VERR_NET_PROTOCOL_NOT_AVAILABLE: return ENOPROTOOPT; +#endif +#ifdef EPROTONOSUPPORT + case VERR_NET_PROTOCOL_NOT_SUPPORTED: return EPROTONOSUPPORT; +#endif +#ifdef ESOCKTNOSUPPORT + case VERR_NET_SOCKET_TYPE_NOT_SUPPORTED: return ESOCKTNOSUPPORT; +#endif +#ifdef EOPNOTSUPP + case VERR_NET_OPERATION_NOT_SUPPORTED: return EOPNOTSUPP; +#endif +#ifdef EPFNOSUPPORT + case VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED: return EPFNOSUPPORT; +#endif +#ifdef EAFNOSUPPORT + case VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED: return EAFNOSUPPORT; +#endif +#ifdef EADDRINUSE + case VERR_NET_ADDRESS_IN_USE: return EADDRINUSE; +#endif +#ifdef EADDRNOTAVAIL + case VERR_NET_ADDRESS_NOT_AVAILABLE: return EADDRNOTAVAIL; +#endif +#ifdef ENETDOWN + case VERR_NET_DOWN: return ENETDOWN; +#endif +#ifdef ENETUNREACH + case VERR_NET_UNREACHABLE: return ENETUNREACH; +#endif +#ifdef ENETRESET + case VERR_NET_CONNECTION_RESET: return ENETRESET; +#endif +#ifdef ECONNABORTED + case VERR_NET_CONNECTION_ABORTED: return ECONNABORTED; +#endif +#ifdef ECONNRESET + case VERR_NET_CONNECTION_RESET_BY_PEER: return ECONNRESET; +#endif +#ifdef ENOBUFS + case VERR_NET_NO_BUFFER_SPACE: return ENOBUFS; +#endif +#ifdef EISCONN + case VERR_NET_ALREADY_CONNECTED: return EISCONN; +#endif +#ifdef ENOTCONN + case VERR_NET_NOT_CONNECTED: return ENOTCONN; +#endif +#ifdef ESHUTDOWN + case VERR_NET_SHUTDOWN: return ESHUTDOWN; +#endif +#ifdef ETOOMANYREFS + case VERR_NET_TOO_MANY_REFERENCES: return ETOOMANYREFS; +#endif +#ifdef ETIMEDOUT + case VERR_TIMEOUT: return ETIMEDOUT; +#endif +#ifdef ECONNREFUSED + case VERR_NET_CONNECTION_REFUSED: return ECONNREFUSED; +#endif +#ifdef EHOSTDOWN + case VERR_NET_HOST_DOWN: return EHOSTDOWN; +#endif +#ifdef EHOSTUNREACH + case VERR_NET_HOST_UNREACHABLE: return EHOSTUNREACH; +#endif +#ifdef EALREADY + case VERR_NET_ALREADY_IN_PROGRESS: return EALREADY; +#endif +#ifdef EINPROGRESS + case VERR_NET_IN_PROGRESS: return EINPROGRESS; +#endif +#ifdef ESTALE + //case ESTALE 116 /* Stale NFS file handle */ +#endif +#ifdef EUCLEAN + //case EUCLEAN 117 /* Structure needs cleaning */ +#endif +#ifdef ENOTNAM + //case ENOTNAM 118 /* Not a XENIX named type file */ +#endif +#ifdef ENAVAIL + //case ENAVAIL 119 /* No XENIX semaphores available */ +#endif +#ifdef EISNAM + //case EISNAM 120 /* Is a named type file */ +#endif +#ifdef EREMOTEIO + //case EREMOTEIO 121 /* Remote I/O error */ +#endif +#ifdef EDQUOT + //case VERR_DISK_FULL: return EDQUOT; +#endif +#ifdef ENOMEDIUM + case VERR_MEDIA_NOT_PRESENT: return ENOMEDIUM; +#endif +#ifdef EMEDIUMTYPE + case VERR_MEDIA_NOT_RECOGNIZED: return EMEDIUMTYPE; +#endif + + /* Non-linux */ + +#ifdef EPROCLIM + case VERR_MAX_PROCS_REACHED: return EPROCLIM; +#endif +#ifdef EDOOFUS + case VERR_INTERNAL_ERROR: + case VERR_INTERNAL_ERROR_2: + case VERR_INTERNAL_ERROR_3: return EDOOFUS; +#endif + + default: + /* The idea here is that if you hit this, you will have to + translate the status code yourself. */ + AssertMsgFailed(("Unhandled error code %Rrc\n", iErr)); +#ifdef EPROTO + return EPROTO; +#else + return EINVAL; +#endif + } +} +RT_EXPORT_SYMBOL(RTErrConvertToErrno); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/err/errinfo.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/err/errinfo.c @@ -0,0 +1,127 @@ +/* $Id: errinfo.cpp $ */ +/** @file + * IPRT - Error Info, Setters. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "internal/iprt.h" +#include + +#include +#include + + +RTDECL(int) RTErrInfoSet(PRTERRINFO pErrInfo, int rc, const char *pszMsg) +{ + if (pErrInfo) + { + AssertPtr(pErrInfo); + Assert((pErrInfo->fFlags & RTERRINFO_FLAGS_MAGIC_MASK) == RTERRINFO_FLAGS_MAGIC); + + RTStrCopy(pErrInfo->pszMsg, pErrInfo->cbMsg, pszMsg); + pErrInfo->rc = rc; + pErrInfo->fFlags |= RTERRINFO_FLAGS_SET; + } + return rc; +} + + +RTDECL(int) RTErrInfoSetF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTErrInfoSetV(pErrInfo, rc, pszFormat, va); + va_end(va); + return rc; +} + + +RTDECL(int) RTErrInfoSetV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) +{ + if (pErrInfo) + { + AssertPtr(pErrInfo); + Assert((pErrInfo->fFlags & RTERRINFO_FLAGS_MAGIC_MASK) == RTERRINFO_FLAGS_MAGIC); + + RTStrPrintfV(pErrInfo->pszMsg, pErrInfo->cbMsg, pszFormat, va); + pErrInfo->rc = rc; + pErrInfo->fFlags |= RTERRINFO_FLAGS_SET; + } + return rc; +} + + +RTDECL(int) RTErrInfoAdd(PRTERRINFO pErrInfo, int rc, const char *pszMsg) +{ + if (pErrInfo) + { + AssertPtr(pErrInfo); + if (pErrInfo->fFlags & RTERRINFO_FLAGS_SET) + RTStrCat(pErrInfo->pszMsg, pErrInfo->cbMsg, pszMsg); + else + { + while (*pszMsg == ' ') + pszMsg++; + return RTErrInfoSet(pErrInfo, rc, pszMsg); + } + } + return rc; +} + + +RTDECL(int) RTErrInfoAddF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTErrInfoAddV(pErrInfo, rc, pszFormat, va); + va_end(va); + return rc; +} + + +RTDECL(int) RTErrInfoAddV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) +{ + if (pErrInfo) + { + AssertPtr(pErrInfo); + Assert((pErrInfo->fFlags & RTERRINFO_FLAGS_MAGIC_MASK) == RTERRINFO_FLAGS_MAGIC); + if (pErrInfo->fFlags & RTERRINFO_FLAGS_SET) + { + char *pszOut = (char *)memchr(pErrInfo->pszMsg, '\0', pErrInfo->cbMsg - 2); + if (pszOut) + RTStrPrintfV(pszOut, &pErrInfo->pszMsg[pErrInfo->cbMsg] - pszOut, pszFormat, va); + } + else + { + while (*pszFormat == ' ') + pszFormat++; + return RTErrInfoSetV(pErrInfo, rc, pszFormat, va); + } + } + return rc; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/log.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/log.c @@ -0,0 +1,4072 @@ +/* $Id: log.cpp $ */ +/** @file + * Runtime VBox - Logger. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#ifndef IN_RC +# include +# include +# include +# include +# include +#endif +#ifdef IN_RING3 +# include +# include +# include +# include +#endif +#include +#include +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# include +#endif +#include +#include +#include + +#include +#include +#include +#ifdef IN_RING3 +# include +# include +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/** @def RTLOG_RINGBUF_DEFAULT_SIZE + * The default ring buffer size. */ +/** @def RTLOG_RINGBUF_MAX_SIZE + * The max ring buffer size. */ +/** @def RTLOG_RINGBUF_MIN_SIZE + * The min ring buffer size. */ +#ifdef IN_RING0 +# define RTLOG_RINGBUF_DEFAULT_SIZE _64K +# define RTLOG_RINGBUF_MAX_SIZE _4M +# define RTLOG_RINGBUF_MIN_SIZE _1K +#elif defined(IN_RING3) || defined(DOXYGEN_RUNNING) +# define RTLOG_RINGBUF_DEFAULT_SIZE _512K +# define RTLOG_RINGBUF_MAX_SIZE _1G +# define RTLOG_RINGBUF_MIN_SIZE _4K +#endif +/** The start of ring buffer eye catcher (16 bytes). */ +#define RTLOG_RINGBUF_EYE_CATCHER "START RING BUF\0" +AssertCompile(sizeof(RTLOG_RINGBUF_EYE_CATCHER) == 16); +/** The end of ring buffer eye catcher (16 bytes). This also ensures that the ring buffer + * forms are properly terminated C string (leading zero chars). */ +#define RTLOG_RINGBUF_EYE_CATCHER_END "\0\0\0END RING BUF" +AssertCompile(sizeof(RTLOG_RINGBUF_EYE_CATCHER_END) == 16); + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Arguments passed to the output function. + */ +typedef struct RTLOGOUTPUTPREFIXEDARGS +{ + /** The logger instance. */ + PRTLOGGER pLogger; + /** The flags. (used for prefixing.) */ + unsigned fFlags; + /** The group. (used for prefixing.) */ + unsigned iGroup; +} RTLOGOUTPUTPREFIXEDARGS, *PRTLOGOUTPUTPREFIXEDARGS; + +#ifndef IN_RC + +/** + * Internal logger data. + * + * @remarks Don't make casual changes to this structure. + */ +typedef struct RTLOGGERINTERNAL +{ + /** The structure revision (RTLOGGERINTERNAL_REV). */ + uint32_t uRevision; + /** The size of the internal logger structure. */ + uint32_t cbSelf; + + /** Spinning mutex semaphore. Can be NIL. */ + RTSEMSPINMUTEX hSpinMtx; + /** Pointer to the flush function. */ + PFNRTLOGFLUSH pfnFlush; + + /** Custom prefix callback. */ + PFNRTLOGPREFIX pfnPrefix; + /** Prefix callback argument. */ + void *pvPrefixUserArg; + /** This is set if a prefix is pending. */ + bool fPendingPrefix; + /** Alignment padding. */ + bool afPadding1[2]; + /** Set if fully created. Used to avoid confusing in a few functions used to + * parse logger settings from environment variables. */ + bool fCreated; + + /** The max number of groups that there is room for in afGroups and papszGroups. + * Used by RTLogCopyGroupAndFlags(). */ + uint32_t cMaxGroups; + /** Pointer to the group name array. + * (The data is readonly and provided by the user.) */ + const char * const *papszGroups; + + /** The number of log entries per group. NULL if + * RTLOGFLAGS_RESTRICT_GROUPS is not specified. */ + uint32_t *pacEntriesPerGroup; + /** The max number of entries per group. */ + uint32_t cMaxEntriesPerGroup; + + /** @name Ring buffer logging + * The ring buffer records the last cbRingBuf - 1 of log output. The + * other configured log destinations are not touched until someone calls + * RTLogFlush(), when the ring buffer content is written to them all. + * + * The aim here is a fast logging destination, that avoids wasting storage + * space saving disk space when dealing with huge log volumes where the + * interesting bits usually are found near the end of the log. This is + * typically the case for scenarios that crashes or hits assertions. + * + * RTLogFlush() is called implicitly when hitting an assertion. While on a + * crash the most debuggers are able to make calls these days, it's usually + * possible to view the ring buffer memory. + * + * @{ */ + /** Ring buffer size (including both eye catchers). */ + uint32_t cbRingBuf; + /** Number of bytes passing thru the ring buffer since last RTLogFlush call. + * (This is used to avoid writing out the same bytes twice.) */ + uint64_t volatile cbRingBufUnflushed; + /** Ring buffer pointer (points at RTLOG_RINGBUF_EYE_CATCHER). */ + char *pszRingBuf; + /** Current ring buffer position (where to write the next char). */ + char * volatile pchRingBufCur; + /** @} */ + +# ifdef IN_RING3 /* Note! Must be at the end! */ + /** @name File logging bits for the logger. + * @{ */ + /** Pointer to the function called when starting logging, and when + * ending or starting a new log file as part of history rotation. + * This can be NULL. */ + PFNRTLOGPHASE pfnPhase; + + /** Handle to log file (if open). */ + RTFILE hFile; + /** Log file history settings: maximum amount of data to put in a file. */ + uint64_t cbHistoryFileMax; + /** Log file history settings: current amount of data in a file. */ + uint64_t cbHistoryFileWritten; + /** Log file history settings: maximum time to use a file (in seconds). */ + uint32_t cSecsHistoryTimeSlot; + /** Log file history settings: in what time slot was the file created. */ + uint32_t uHistoryTimeSlotStart; + /** Log file history settings: number of older files to keep. + * 0 means no history. */ + uint32_t cHistory; + /** Pointer to filename. */ + char szFilename[RTPATH_MAX]; + /** @} */ +# endif /* IN_RING3 */ +} RTLOGGERINTERNAL; + +/** The revision of the internal logger structure. */ +# define RTLOGGERINTERNAL_REV UINT32_C(10) + +# ifdef IN_RING3 +/** The size of the RTLOGGERINTERNAL structure in ring-0. */ +# define RTLOGGERINTERNAL_R0_SIZE RT_OFFSETOF(RTLOGGERINTERNAL, pfnPhase) +AssertCompileMemberAlignment(RTLOGGERINTERNAL, hFile, sizeof(void *)); +AssertCompileMemberAlignment(RTLOGGERINTERNAL, cbHistoryFileMax, sizeof(uint64_t)); +# endif +AssertCompileMemberAlignment(RTLOGGERINTERNAL, cbRingBufUnflushed, sizeof(uint64_t)); + +#endif /* !IN_RC */ + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +#ifndef IN_RC +static unsigned rtlogGroupFlags(const char *psz); +#endif +#ifdef IN_RING0 +static void rtR0LogLoggerExFallback(uint32_t fDestFlags, uint32_t fFlags, PRTLOGGERINTERNAL pInt, + const char *pszFormat, va_list va); +#endif +#ifdef IN_RING3 +static int rtR3LogOpenFileDestination(PRTLOGGER pLogger, PRTERRINFO pErrInfo); +#endif +#ifndef IN_RC +static void rtLogRingBufFlush(PRTLOGGER pLogger); +#endif +static void rtlogFlush(PRTLOGGER pLogger, bool fNeedSpace); +static DECLCALLBACK(size_t) rtLogOutput(void *pv, const char *pachChars, size_t cbChars); +static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars, size_t cbChars); +static void rtlogLoggerExVLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, va_list args); +#ifndef IN_RC +static void rtlogLoggerExFLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...); +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#ifdef IN_RC +/** Default logger instance. Make it weak because our RC module loader does not + * necessarily resolve this symbol and the compiler _must_ check if this is + * the case or not. That doesn't work for Darwin (``incompatible feature used: + * .weak_reference (must specify "-dynamic" to be used'') */ +# ifdef RT_OS_DARWIN +extern "C" DECLIMPORT(RTLOGGERRC) g_Logger; +# else +extern "C" DECLWEAK(DECLIMPORT(RTLOGGERRC)) g_Logger; +# endif +#else /* !IN_RC */ +/** Default logger instance. */ +static PRTLOGGER g_pLogger; +#endif /* !IN_RC */ +#ifdef IN_RING3 +/** The RTThreadGetWriteLockCount() change caused by the logger mutex semaphore. */ +static uint32_t volatile g_cLoggerLockCount; +#endif + +#ifdef IN_RING0 +/** Number of per-thread loggers. */ +static int32_t volatile g_cPerThreadLoggers; +/** Per-thread loggers. + * This is just a quick TLS hack suitable for debug logging only. + * If we run out of entries, just unload and reload the driver. */ +static struct RTLOGGERPERTHREAD +{ + /** The thread. */ + RTNATIVETHREAD volatile NativeThread; + /** The (process / session) key. */ + uintptr_t volatile uKey; + /** The logger instance.*/ + PRTLOGGER volatile pLogger; +} g_aPerThreadLoggers[8] = +{ + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0}, + { NIL_RTNATIVETHREAD, 0, 0} +}; +#endif /* IN_RING0 */ + +/** + * Logger flags instructions. + */ +static struct +{ + const char *pszInstr; /**< The name */ + size_t cchInstr; /**< The size of the name. */ + uint32_t fFlag; /**< The flag value. */ + bool fInverted; /**< Inverse meaning? */ +} const g_aLogFlags[] = +{ + { "disabled", sizeof("disabled" ) - 1, RTLOGFLAGS_DISABLED, false }, + { "enabled", sizeof("enabled" ) - 1, RTLOGFLAGS_DISABLED, true }, + { "buffered", sizeof("buffered" ) - 1, RTLOGFLAGS_BUFFERED, false }, + { "unbuffered", sizeof("unbuffered" ) - 1, RTLOGFLAGS_BUFFERED, true }, + { "usecrlf", sizeof("usecrlf" ) - 1, RTLOGFLAGS_USECRLF, false }, + { "uself", sizeof("uself" ) - 1, RTLOGFLAGS_USECRLF, true }, + { "append", sizeof("append" ) - 1, RTLOGFLAGS_APPEND, false }, + { "overwrite", sizeof("overwrite" ) - 1, RTLOGFLAGS_APPEND, true }, + { "rel", sizeof("rel" ) - 1, RTLOGFLAGS_REL_TS, false }, + { "abs", sizeof("abs" ) - 1, RTLOGFLAGS_REL_TS, true }, + { "dec", sizeof("dec" ) - 1, RTLOGFLAGS_DECIMAL_TS, false }, + { "hex", sizeof("hex" ) - 1, RTLOGFLAGS_DECIMAL_TS, true }, + { "writethru", sizeof("writethru" ) - 1, RTLOGFLAGS_WRITE_THROUGH, false }, + { "writethrough", sizeof("writethrough") - 1, RTLOGFLAGS_WRITE_THROUGH, false }, + { "flush", sizeof("flush" ) - 1, RTLOGFLAGS_FLUSH, false }, + { "lockcnts", sizeof("lockcnts" ) - 1, RTLOGFLAGS_PREFIX_LOCK_COUNTS, false }, + { "cpuid", sizeof("cpuid" ) - 1, RTLOGFLAGS_PREFIX_CPUID, false }, + { "pid", sizeof("pid" ) - 1, RTLOGFLAGS_PREFIX_PID, false }, + { "flagno", sizeof("flagno" ) - 1, RTLOGFLAGS_PREFIX_FLAG_NO, false }, + { "flag", sizeof("flag" ) - 1, RTLOGFLAGS_PREFIX_FLAG, false }, + { "groupno", sizeof("groupno" ) - 1, RTLOGFLAGS_PREFIX_GROUP_NO, false }, + { "group", sizeof("group" ) - 1, RTLOGFLAGS_PREFIX_GROUP, false }, + { "tid", sizeof("tid" ) - 1, RTLOGFLAGS_PREFIX_TID, false }, + { "thread", sizeof("thread" ) - 1, RTLOGFLAGS_PREFIX_THREAD, false }, + { "custom", sizeof("custom" ) - 1, RTLOGFLAGS_PREFIX_CUSTOM, false }, + { "timeprog", sizeof("timeprog" ) - 1, RTLOGFLAGS_PREFIX_TIME_PROG, false }, + { "time", sizeof("time" ) - 1, RTLOGFLAGS_PREFIX_TIME, false }, + { "msprog", sizeof("msprog" ) - 1, RTLOGFLAGS_PREFIX_MS_PROG, false }, + { "tsc", sizeof("tsc" ) - 1, RTLOGFLAGS_PREFIX_TSC, false }, /* before ts! */ + { "ts", sizeof("ts" ) - 1, RTLOGFLAGS_PREFIX_TS, false }, + /* We intentionally omit RTLOGFLAGS_RESTRICT_GROUPS. */ +}; + +/** + * Logger destination instructions. + */ +static struct +{ + const char *pszInstr; /**< The name. */ + size_t cchInstr; /**< The size of the name. */ + uint32_t fFlag; /**< The corresponding destination flag. */ +} const g_aLogDst[] = +{ + { RT_STR_TUPLE("file"), RTLOGDEST_FILE }, /* Must be 1st! */ + { RT_STR_TUPLE("dir"), RTLOGDEST_FILE }, /* Must be 2nd! */ + { RT_STR_TUPLE("history"), 0 }, /* Must be 3rd! */ + { RT_STR_TUPLE("histsize"), 0 }, /* Must be 4th! */ + { RT_STR_TUPLE("histtime"), 0 }, /* Must be 5th! */ + { RT_STR_TUPLE("ringbuf"), RTLOGDEST_RINGBUF }, /* Must be 6th! */ + { RT_STR_TUPLE("stdout"), RTLOGDEST_STDOUT }, + { RT_STR_TUPLE("stderr"), RTLOGDEST_STDERR }, + { RT_STR_TUPLE("debugger"), RTLOGDEST_DEBUGGER }, + { RT_STR_TUPLE("com"), RTLOGDEST_COM }, + { RT_STR_TUPLE("nodeny"), RTLOGDEST_F_NO_DENY }, + { RT_STR_TUPLE("user"), RTLOGDEST_USER }, +}; + +#ifdef IN_RING3 +/** Log rotation backoff table - millisecond sleep intervals. + * Important on Windows host, especially for VBoxSVC release logging. Only a + * medium term solution, until a proper fix for log file handling is available. + * 10 seconds total. + */ +static const uint32_t g_acMsLogBackoff[] = +{ 10, 10, 10, 20, 50, 100, 200, 200, 200, 200, 500, 500, 500, 500, 1000, 1000, 1000, 1000, 1000, 1000, 1000 }; +#endif + + +/** + * Locks the logger instance. + * + * @returns See RTSemSpinMutexRequest(). + * @param pLogger The logger instance. + */ +DECLINLINE(int) rtlogLock(PRTLOGGER pLogger) +{ +#ifndef IN_RC + PRTLOGGERINTERNAL pInt = pLogger->pInt; + AssertMsgReturn(pInt->uRevision == RTLOGGERINTERNAL_REV, ("%#x != %#x\n", pInt->uRevision, RTLOGGERINTERNAL_REV), + VERR_LOG_REVISION_MISMATCH); + AssertMsgReturn(pInt->cbSelf == sizeof(*pInt), ("%#x != %#x\n", pInt->cbSelf, sizeof(*pInt)), + VERR_LOG_REVISION_MISMATCH); + if (pInt->hSpinMtx != NIL_RTSEMSPINMUTEX) + { + int rc = RTSemSpinMutexRequest(pInt->hSpinMtx); + if (RT_FAILURE(rc)) + return rc; + } +#else + NOREF(pLogger); +#endif + return VINF_SUCCESS; +} + + +/** + * Unlocks the logger instance. + * @param pLogger The logger instance. + */ +DECLINLINE(void) rtlogUnlock(PRTLOGGER pLogger) +{ +#ifndef IN_RC + if (pLogger->pInt->hSpinMtx != NIL_RTSEMSPINMUTEX) + RTSemSpinMutexRelease(pLogger->pInt->hSpinMtx); +#else + NOREF(pLogger); +#endif + return; +} + +#ifndef IN_RC +# ifdef IN_RING3 + +# ifdef SOME_UNUSED_FUNCTION +/** + * Logging to file, output callback. + * + * @param pvArg User argument. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +static DECLCALLBACK(size_t) rtlogPhaseWrite(void *pvArg, const char *pachChars, size_t cbChars) +{ + PRTLOGGER pLogger = (PRTLOGGER)pvArg; + RTFileWrite(pLogger->pInt->hFile, pachChars, cbChars, NULL); + return cbChars; +} + + +/** + * Callback to format VBox formatting extentions. + * See @ref pg_rt_str_format for a reference on the format types. + * + * @returns The number of bytes formatted. + * @param pvArg Formatter argument. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +static DECLCALLBACK(size_t) rtlogPhaseFormatStr(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char **ppszFormat, va_list *pArgs, int cchWidth, + int cchPrecision, unsigned fFlags, char chArgSize) +{ + char ch = *(*ppszFormat)++; + + AssertMsgFailed(("Invalid logger phase format type '%%%c%.10s'!\n", ch, *ppszFormat)); NOREF(ch); + + return 0; +} + +# endif /* SOME_UNUSED_FUNCTION */ + + +/** + * Log phase callback function, assumes the lock is already held + * + * @param pLogger The logger instance. + * @param pszFormat Format string. + * @param ... Optional arguments as specified in the format string. + */ +static DECLCALLBACK(void) rtlogPhaseMsgLocked(PRTLOGGER pLogger, const char *pszFormat, ...) +{ + va_list args; + AssertPtrReturnVoid(pLogger); + AssertPtrReturnVoid(pLogger->pInt); + Assert(pLogger->pInt->hSpinMtx != NIL_RTSEMSPINMUTEX); + + va_start(args, pszFormat); + rtlogLoggerExVLocked(pLogger, 0, ~0U, pszFormat, args); + va_end(args); +} + + +/** + * Log phase callback function, assumes the lock is not held. + * + * @param pLogger The logger instance. + * @param pszFormat Format string. + * @param ... Optional arguments as specified in the format string. + */ +static DECLCALLBACK(void) rtlogPhaseMsgNormal(PRTLOGGER pLogger, const char *pszFormat, ...) +{ + va_list args; + AssertPtrReturnVoid(pLogger); + AssertPtrReturnVoid(pLogger->pInt); + Assert(pLogger->pInt->hSpinMtx != NIL_RTSEMSPINMUTEX); + + va_start(args, pszFormat); + RTLogLoggerExV(pLogger, 0, ~0U, pszFormat, args); + va_end(args); +} + +# endif /* IN_RING3 */ + +/** + * Adjusts the ring buffer. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param cbNewSize The new ring buffer size (0 == default). + * @param fForce Whether to do this even if the logger instance hasn't + * really been fully created yet (i.e. during RTLogCreate). + */ +static int rtLogRingBufAdjust(PRTLOGGER pLogger, uint32_t cbNewSize, bool fForce) +{ + /* + * If this is early logger init, don't do anything. + */ + if (!pLogger->pInt->fCreated && !fForce) + return VINF_SUCCESS; + + /* + * Lock the logger and make the necessary changes. + */ + int rc = rtlogLock(pLogger); + if (RT_SUCCESS(rc)) + { + if (cbNewSize == 0) + cbNewSize = RTLOG_RINGBUF_DEFAULT_SIZE; + if ( pLogger->pInt->cbRingBuf != cbNewSize + || !pLogger->pInt->pchRingBufCur) + { + uintptr_t offOld = pLogger->pInt->pchRingBufCur - pLogger->pInt->pszRingBuf; + if (offOld < sizeof(RTLOG_RINGBUF_EYE_CATCHER)) + offOld = sizeof(RTLOG_RINGBUF_EYE_CATCHER); + else if (offOld >= cbNewSize) + { + memmove(pLogger->pInt->pszRingBuf, &pLogger->pInt->pszRingBuf[offOld - cbNewSize], cbNewSize); + offOld = sizeof(RTLOG_RINGBUF_EYE_CATCHER); + } + + void *pvNew = RTMemRealloc(pLogger->pInt->pchRingBufCur, cbNewSize); + if (pvNew) + { + pLogger->pInt->pszRingBuf = (char *)pvNew; + pLogger->pInt->pchRingBufCur = (char *)pvNew + offOld; + pLogger->pInt->cbRingBuf = cbNewSize; + memcpy(pvNew, RTLOG_RINGBUF_EYE_CATCHER, sizeof(RTLOG_RINGBUF_EYE_CATCHER)); + memcpy((char *)pvNew + cbNewSize - sizeof(RTLOG_RINGBUF_EYE_CATCHER_END), + RTLOG_RINGBUF_EYE_CATCHER_END, sizeof(RTLOG_RINGBUF_EYE_CATCHER_END)); + rc = VINF_SUCCESS; + } + else + rc = VERR_NO_MEMORY; + } + rtlogUnlock(pLogger); + } + + return rc; +} + + +/** + * Writes text to the ring buffer. + * + * @param pInt The internal logger data structure. + * @param pachText The text to write. + * @param cchText The number of chars (bytes) to write. + */ +static void rtLogRingBufWrite(PRTLOGGERINTERNAL pInt, const char *pachText, size_t cchText) +{ + /* + * Get the ring buffer data, adjusting it to only describe the writable + * part of the buffer. + */ + char * const pchStart = &pInt->pszRingBuf[sizeof(RTLOG_RINGBUF_EYE_CATCHER)]; + size_t const cchBuf = pInt->cbRingBuf - sizeof(RTLOG_RINGBUF_EYE_CATCHER) - sizeof(RTLOG_RINGBUF_EYE_CATCHER_END); + char *pchCur = pInt->pchRingBufCur; + size_t cchLeft = pchCur - pchStart; + if (RT_LIKELY(cchLeft < cchBuf)) + cchLeft = cchBuf - cchLeft; + else + { + /* May happen in ring-0 where a thread or two went ahead without getting the lock. */ + pchCur = pchStart; + cchLeft = cchBuf; + } + Assert(cchBuf < pInt->cbRingBuf); + + if (cchText < cchLeft) + { + /* + * The text fits in the remaining space. + */ + memcpy(pchCur, pachText, cchText); + pchCur[cchText] = '\0'; + pInt->pchRingBufCur = &pchCur[cchText]; + pInt->cbRingBufUnflushed += cchText; + } + else + { + /* + * The text wraps around. Taking the simple but inefficient approach + * to input texts that are longer than the ring buffer since that + * is unlikely to the be a frequent case. + */ + /* Fill to the end of the buffer. */ + memcpy(pchCur, pachText, cchLeft); + pachText += cchLeft; + cchText -= cchLeft; + pInt->cbRingBufUnflushed += cchLeft; + pInt->pchRingBufCur = pchStart; + + /* Ring buffer overflows (the plainly inefficient bit). */ + while (cchText >= cchBuf) + { + memcpy(pchStart, pachText, cchBuf); + pachText += cchBuf; + cchText -= cchBuf; + pInt->cbRingBufUnflushed += cchBuf; + } + + /* The final bit, if any. */ + if (cchText > 0) + { + memcpy(pchStart, pachText, cchText); + pInt->cbRingBufUnflushed += cchText; + } + pchStart[cchText] = '\0'; + pInt->pchRingBufCur = &pchStart[cchText]; + } +} + + +/** + * Flushes the ring buffer to all the other log destinations. + * + * @param pLogger The logger instance which ring buffer should be flushed. + */ +static void rtLogRingBufFlush(PRTLOGGER pLogger) +{ + const char *pszPreamble; + size_t cchPreamble; + const char *pszFirst; + size_t cchFirst; + const char *pszSecond; + size_t cchSecond; + + /* + * Get the ring buffer data, adjusting it to only describe the writable + * part of the buffer. + */ + uint64_t cchUnflushed = pLogger->pInt->cbRingBufUnflushed; + char * const pszBuf = &pLogger->pInt->pszRingBuf[sizeof(RTLOG_RINGBUF_EYE_CATCHER)]; + size_t const cchBuf = pLogger->pInt->cbRingBuf - sizeof(RTLOG_RINGBUF_EYE_CATCHER) - sizeof(RTLOG_RINGBUF_EYE_CATCHER_END); + size_t offCur = pLogger->pInt->pchRingBufCur - pszBuf; + size_t cchAfter; + if (RT_LIKELY(offCur < cchBuf)) + cchAfter = cchBuf - offCur; + else /* May happen in ring-0 where a thread or two went ahead without getting the lock. */ + { + offCur = 0; + cchAfter = cchBuf; + } + + pLogger->pInt->cbRingBufUnflushed = 0; + + /* + * Figure out whether there are one or two segments that needs writing, + * making the last segment is terminated. (The first is always + * terminated because of the eye-catcher at the end of the buffer.) + */ + if (cchUnflushed == 0) + return; + pszBuf[offCur] = '\0'; + if (cchUnflushed >= cchBuf) + { + pszFirst = &pszBuf[offCur + 1]; + cchFirst = cchAfter ? cchAfter - 1 : 0; + pszSecond = pszBuf; + cchSecond = offCur; + pszPreamble = "\n*FLUSH RING BUF*\n"; + cchPreamble = sizeof("\n*FLUSH RING BUF*\n") - 1; + } + else if ((size_t)cchUnflushed <= offCur) + { + cchFirst = (size_t)cchUnflushed; + pszFirst = &pszBuf[offCur - cchFirst]; + pszSecond = ""; + cchSecond = 0; + pszPreamble = ""; + cchPreamble = 0; + } + else + { + cchFirst = (size_t)cchUnflushed - offCur; + pszFirst = &pszBuf[cchBuf - cchFirst]; + pszSecond = pszBuf; + cchSecond = offCur; + pszPreamble = ""; + cchPreamble = 0; + } + + /* + * Write the ring buffer to all other destiations. + */ + if (pLogger->fDestFlags & RTLOGDEST_USER) + { + if (cchPreamble) + RTLogWriteUser(pszPreamble, cchPreamble); + if (cchFirst) + RTLogWriteUser(pszFirst, cchFirst); + if (cchSecond) + RTLogWriteUser(pszSecond, cchSecond); + } + + if (pLogger->fDestFlags & RTLOGDEST_DEBUGGER) + { + if (cchPreamble) + RTLogWriteDebugger(pszPreamble, cchPreamble); + if (cchFirst) + RTLogWriteDebugger(pszFirst, cchFirst); + if (cchSecond) + RTLogWriteDebugger(pszSecond, cchSecond); + } + +# ifdef IN_RING3 + if (pLogger->fDestFlags & RTLOGDEST_FILE) + { + if (pLogger->pInt->hFile != NIL_RTFILE) + { + if (cchPreamble) + RTFileWrite(pLogger->pInt->hFile, pszPreamble, cchPreamble, NULL); + if (cchFirst) + RTFileWrite(pLogger->pInt->hFile, pszFirst, cchFirst, NULL); + if (cchSecond) + RTFileWrite(pLogger->pInt->hFile, pszSecond, cchSecond, NULL); + if (pLogger->fFlags & RTLOGFLAGS_FLUSH) + RTFileFlush(pLogger->pInt->hFile); + } + if (pLogger->pInt->cHistory) + pLogger->pInt->cbHistoryFileWritten += cchFirst + cchSecond; + } +# endif + + if (pLogger->fDestFlags & RTLOGDEST_STDOUT) + { + if (cchPreamble) + RTLogWriteStdOut(pszPreamble, cchPreamble); + if (cchFirst) + RTLogWriteStdOut(pszFirst, cchFirst); + if (cchSecond) + RTLogWriteStdOut(pszSecond, cchSecond); + } + + if (pLogger->fDestFlags & RTLOGDEST_STDERR) + { + if (cchPreamble) + RTLogWriteStdErr(pszPreamble, cchPreamble); + if (cchFirst) + RTLogWriteStdErr(pszFirst, cchFirst); + if (cchSecond) + RTLogWriteStdErr(pszSecond, cchSecond); + } + +# if defined(IN_RING0) && !defined(LOG_NO_COM) + if (pLogger->fDestFlags & RTLOGDEST_COM) + { + if (cchPreamble) + RTLogWriteCom(pszPreamble, cchPreamble); + if (cchFirst) + RTLogWriteCom(pszFirst, cchFirst); + if (cchSecond) + RTLogWriteCom(pszSecond, cchSecond); + } +# endif +} + + +RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const *papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, + PRTERRINFO pErrInfo, const char *pszFilenameFmt, va_list args) +{ + int rc; + size_t offInternal; + size_t cbLogger; + PRTLOGGER pLogger; + + /* + * Validate input. + */ + if ( (cGroups && !papszGroups) + || !VALID_PTR(ppLogger) ) + { + AssertMsgFailed(("Invalid parameters!\n")); + return VERR_INVALID_PARAMETER; + } + *ppLogger = NULL; + + AssertMsgReturn(cHistory < _1M, ("%#x", cHistory), VERR_OUT_OF_RANGE); + + /* + * Allocate a logger instance. + */ + offInternal = RT_OFFSETOF(RTLOGGER, afGroups[cGroups]); + offInternal = RT_ALIGN_Z(offInternal, sizeof(uint64_t)); + cbLogger = offInternal + sizeof(RTLOGGERINTERNAL); + if (fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + cbLogger += cGroups * sizeof(uint32_t); + pLogger = (PRTLOGGER)RTMemAllocZVar(cbLogger); + if (pLogger) + { +# if defined(RT_ARCH_X86) && (!defined(LOG_USE_C99) || !defined(RT_WITHOUT_EXEC_ALLOC)) + uint8_t *pu8Code; +# endif + pLogger->u32Magic = RTLOGGER_MAGIC; + pLogger->cGroups = cGroups; + pLogger->fFlags = fFlags; + pLogger->fDestFlags = fDestFlags; + pLogger->pInt = (PRTLOGGERINTERNAL)((uintptr_t)pLogger + offInternal); + pLogger->pInt->uRevision = RTLOGGERINTERNAL_REV; + pLogger->pInt->cbSelf = sizeof(RTLOGGERINTERNAL); + pLogger->pInt->hSpinMtx = NIL_RTSEMSPINMUTEX; + pLogger->pInt->pfnFlush = NULL; + pLogger->pInt->pfnPrefix = NULL; + pLogger->pInt->pvPrefixUserArg = NULL; + pLogger->pInt->afPadding1[0] = false; + pLogger->pInt->afPadding1[1] = false; + pLogger->pInt->fCreated = false; + pLogger->pInt->cMaxGroups = cGroups; + pLogger->pInt->papszGroups = papszGroups; + if (fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + pLogger->pInt->pacEntriesPerGroup = (uint32_t *)(pLogger->pInt + 1); + else + pLogger->pInt->pacEntriesPerGroup = NULL; + pLogger->pInt->cMaxEntriesPerGroup = UINT32_MAX; +# ifdef IN_RING3 + pLogger->pInt->pfnPhase = pfnPhase; + pLogger->pInt->hFile = NIL_RTFILE; + pLogger->pInt->cHistory = cHistory; + if (cbHistoryFileMax == 0) + pLogger->pInt->cbHistoryFileMax = UINT64_MAX; + else + pLogger->pInt->cbHistoryFileMax = cbHistoryFileMax; + if (cSecsHistoryTimeSlot == 0) + pLogger->pInt->cSecsHistoryTimeSlot = UINT32_MAX; + else + pLogger->pInt->cSecsHistoryTimeSlot = cSecsHistoryTimeSlot; +# else /* !IN_RING3 */ + RT_NOREF_PV(pfnPhase); RT_NOREF_PV(cHistory); RT_NOREF_PV(cbHistoryFileMax); RT_NOREF_PV(cSecsHistoryTimeSlot); +# endif /* !IN_RING3 */ + if (pszGroupSettings) + RTLogGroupSettings(pLogger, pszGroupSettings); + +# if defined(RT_ARCH_X86) && (!defined(LOG_USE_C99) || !defined(RT_WITHOUT_EXEC_ALLOC)) + /* + * Emit wrapper code. + */ + pu8Code = (uint8_t *)RTMemExecAlloc(64); + if (pu8Code) + { + pLogger->pfnLogger = *(PFNRTLOGGER*)&pu8Code; + *pu8Code++ = 0x68; /* push imm32 */ + *(void **)pu8Code = pLogger; + pu8Code += sizeof(void *); + *pu8Code++ = 0xe8; /* call rel32 */ + *(uint32_t *)pu8Code = (uintptr_t)RTLogLogger - ((uintptr_t)pu8Code + sizeof(uint32_t)); + pu8Code += sizeof(uint32_t); + *pu8Code++ = 0x8d; /* lea esp, [esp + 4] */ + *pu8Code++ = 0x64; + *pu8Code++ = 0x24; + *pu8Code++ = 0x04; + *pu8Code++ = 0xc3; /* ret near */ + AssertMsg((uintptr_t)pu8Code - (uintptr_t)pLogger->pfnLogger <= 64, + ("Wrapper assembly is too big! %d bytes\n", (uintptr_t)pu8Code - (uintptr_t)pLogger->pfnLogger)); + rc = VINF_SUCCESS; + } + else + { + rc = VERR_NO_MEMORY; +# ifdef RT_OS_LINUX + /* Most probably SELinux causing trouble since the larger RTMemAlloc succeeded. */ + RTErrInfoSet(pErrInfo, rc, N_("mmap(PROT_WRITE | PROT_EXEC) failed -- SELinux?")); +# endif + } + if (RT_SUCCESS(rc)) +# endif /* X86 wrapper code*/ + { +# ifdef IN_RING3 /* files and env.vars. are only accessible when in R3 at the present time. */ + /* + * Format the filename. + */ + if (pszFilenameFmt) + { + /** @todo validate the length, fail on overflow. */ + RTStrPrintfV(pLogger->pInt->szFilename, sizeof(pLogger->pInt->szFilename), pszFilenameFmt, args); + if (pLogger->pInt->szFilename[0]) + pLogger->fDestFlags |= RTLOGDEST_FILE; + } + + /* + * Parse the environment variables. + */ + if (pszEnvVarBase) + { + /* make temp copy of environment variable base. */ + size_t cchEnvVarBase = strlen(pszEnvVarBase); + char *pszEnvVar = (char *)alloca(cchEnvVarBase + 16); + memcpy(pszEnvVar, pszEnvVarBase, cchEnvVarBase); + + /* + * Destination. + */ + strcpy(pszEnvVar + cchEnvVarBase, "_DEST"); + const char *pszValue = RTEnvGet(pszEnvVar); + if (pszValue) + RTLogDestinations(pLogger, pszValue); + + /* + * The flags. + */ + strcpy(pszEnvVar + cchEnvVarBase, "_FLAGS"); + pszValue = RTEnvGet(pszEnvVar); + if (pszValue) + RTLogFlags(pLogger, pszValue); + + /* + * The group settings. + */ + pszEnvVar[cchEnvVarBase] = '\0'; + pszValue = RTEnvGet(pszEnvVar); + if (pszValue) + RTLogGroupSettings(pLogger, pszValue); + } +# else /* !IN_RING3 */ + RT_NOREF_PV(pszEnvVarBase); RT_NOREF_PV(pszFilenameFmt); RT_NOREF_PV(args); +# endif /* !IN_RING3 */ + + /* + * Open the destination(s). + */ + rc = VINF_SUCCESS; + if ((pLogger->fDestFlags & (RTLOGDEST_F_DELAY_FILE | RTLOGDEST_FILE)) == RTLOGDEST_F_DELAY_FILE) + pLogger->fDestFlags &= ~RTLOGDEST_F_DELAY_FILE; +# ifdef IN_RING3 + if ((pLogger->fDestFlags & (RTLOGDEST_FILE | RTLOGDEST_F_DELAY_FILE)) == RTLOGDEST_FILE) + rc = rtR3LogOpenFileDestination(pLogger, pErrInfo); +# endif + + if ((pLogger->fDestFlags & RTLOGDEST_RINGBUF) && RT_SUCCESS(rc)) + rc = rtLogRingBufAdjust(pLogger, pLogger->pInt->cbRingBuf, true /*fForce*/); + + /* + * Create mutex and check how much it counts when entering the lock + * so that we can report the values for RTLOGFLAGS_PREFIX_LOCK_COUNTS. + */ + if (RT_SUCCESS(rc)) + { + rc = RTSemSpinMutexCreate(&pLogger->pInt->hSpinMtx, RTSEMSPINMUTEX_FLAGS_IRQ_SAFE); + if (RT_SUCCESS(rc)) + { +# ifdef IN_RING3 /** @todo do counters in ring-0 too? */ + RTTHREAD Thread = RTThreadSelf(); + if (Thread != NIL_RTTHREAD) + { + int32_t c = RTLockValidatorWriteLockGetCount(Thread); + RTSemSpinMutexRequest(pLogger->pInt->hSpinMtx); + c = RTLockValidatorWriteLockGetCount(Thread) - c; + RTSemSpinMutexRelease(pLogger->pInt->hSpinMtx); + ASMAtomicWriteU32(&g_cLoggerLockCount, c); + } + + /* Use the callback to generate some initial log contents. */ + Assert(VALID_PTR(pLogger->pInt->pfnPhase) || pLogger->pInt->pfnPhase == NULL); + if (pLogger->pInt->pfnPhase) + pLogger->pInt->pfnPhase(pLogger, RTLOGPHASE_BEGIN, rtlogPhaseMsgNormal); +# endif + pLogger->pInt->fCreated = true; + *ppLogger = pLogger; + return VINF_SUCCESS; + } + + RTErrInfoSet(pErrInfo, rc, N_("failed to create semaphore")); + } +# ifdef IN_RING3 + RTFileClose(pLogger->pInt->hFile); +# endif +# if defined(LOG_USE_C99) && defined(RT_WITHOUT_EXEC_ALLOC) + RTMemFree(*(void **)&pLogger->pfnLogger); +# else + RTMemExecFree(*(void **)&pLogger->pfnLogger, 64); +# endif + } + RTMemFree(pLogger); + } + else + rc = VERR_NO_MEMORY; + + return rc; +} +RT_EXPORT_SYMBOL(RTLogCreateExV); + + +RTDECL(int) RTLogCreate(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, const char *pszFilenameFmt, ...) +{ + va_list args; + int rc; + + va_start(args, pszFilenameFmt); + rc = RTLogCreateExV(ppLogger, fFlags, pszGroupSettings, pszEnvVarBase, cGroups, papszGroups, + fDestFlags, NULL /*pfnPhase*/, 0 /*cHistory*/, 0 /*cbHistoryFileMax*/, 0 /*cSecsHistoryTimeSlot*/, + NULL /*pErrInfo*/, pszFilenameFmt, args); + va_end(args); + return rc; +} +RT_EXPORT_SYMBOL(RTLogCreate); + + +RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, + PRTERRINFO pErrInfo, const char *pszFilenameFmt, ...) +{ + va_list args; + int rc; + + va_start(args, pszFilenameFmt); + rc = RTLogCreateExV(ppLogger, fFlags, pszGroupSettings, pszEnvVarBase, cGroups, papszGroups, + fDestFlags, pfnPhase, cHistory, cbHistoryFileMax, cSecsHistoryTimeSlot, + pErrInfo, pszFilenameFmt, args); + va_end(args); + return rc; +} +RT_EXPORT_SYMBOL(RTLogCreateEx); + + +/** + * Destroys a logger instance. + * + * The instance is flushed and all output destinations closed (where applicable). + * + * @returns iprt status code. + * @param pLogger The logger instance which close destroyed. NULL is fine. + */ +RTDECL(int) RTLogDestroy(PRTLOGGER pLogger) +{ + int rc; + uint32_t iGroup; + RTSEMSPINMUTEX hSpinMtx; + + /* + * Validate input. + */ + if (!pLogger) + return VINF_SUCCESS; + AssertPtrReturn(pLogger, VERR_INVALID_POINTER); + AssertReturn(pLogger->u32Magic == RTLOGGER_MAGIC, VERR_INVALID_MAGIC); + AssertPtrReturn(pLogger->pInt, VERR_INVALID_POINTER); + + /* + * Acquire logger instance sem and disable all logging. (paranoia) + */ + rc = rtlogLock(pLogger); + AssertMsgRCReturn(rc, ("%Rrc\n", rc), rc); + + pLogger->fFlags |= RTLOGFLAGS_DISABLED; + iGroup = pLogger->cGroups; + while (iGroup-- > 0) + pLogger->afGroups[iGroup] = 0; + + /* + * Flush it. + */ + rtlogFlush(pLogger, false /*fNeedSpace*/); + +# ifdef IN_RING3 + /* + * Add end of logging message. + */ + if ( (pLogger->fDestFlags & RTLOGDEST_FILE) + && pLogger->pInt->hFile != NIL_RTFILE) + pLogger->pInt->pfnPhase(pLogger, RTLOGPHASE_END, rtlogPhaseMsgLocked); + + /* + * Close output stuffs. + */ + if (pLogger->pInt->hFile != NIL_RTFILE) + { + int rc2 = RTFileClose(pLogger->pInt->hFile); + AssertRC(rc2); + if (RT_FAILURE(rc2) && RT_SUCCESS(rc)) + rc = rc2; + pLogger->pInt->hFile = NIL_RTFILE; + } +# endif + + /* + * Free the mutex, the wrapper and the instance memory. + */ + hSpinMtx = pLogger->pInt->hSpinMtx; + pLogger->pInt->hSpinMtx = NIL_RTSEMSPINMUTEX; + if (hSpinMtx != NIL_RTSEMSPINMUTEX) + { + int rc2; + RTSemSpinMutexRelease(hSpinMtx); + rc2 = RTSemSpinMutexDestroy(hSpinMtx); + AssertRC(rc2); + if (RT_FAILURE(rc2) && RT_SUCCESS(rc)) + rc = rc2; + } + + if (pLogger->pfnLogger) + { +# if defined(LOG_USE_C99) && defined(RT_WITHOUT_EXEC_ALLOC) + RTMemFree(*(void **)&pLogger->pfnLogger); +# else + RTMemExecFree(*(void **)&pLogger->pfnLogger, 64); +# endif + pLogger->pfnLogger = NULL; + } + RTMemFree(pLogger); + + return rc; +} +RT_EXPORT_SYMBOL(RTLogDestroy); + + +/** + * Create a logger instance clone for RC usage. + * + * @returns iprt status code. + * + * @param pLogger The logger instance to be cloned. + * @param pLoggerRC Where to create the RC logger instance. + * @param cbLoggerRC Amount of memory allocated to for the RC logger + * instance clone. + * @param pfnLoggerRCPtr Pointer to logger wrapper function for this + * instance (RC Ptr). + * @param pfnFlushRCPtr Pointer to flush function (RC Ptr). + * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. + */ +RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC, size_t cbLoggerRC, + RTRCPTR pfnLoggerRCPtr, RTRCPTR pfnFlushRCPtr, uint32_t fFlags) +{ + /* + * Validate input. + */ + if ( !pLoggerRC + || !pfnFlushRCPtr + || !pfnLoggerRCPtr) + { + AssertMsgFailed(("Invalid parameters!\n")); + return VERR_INVALID_PARAMETER; + } + if (cbLoggerRC < sizeof(*pLoggerRC)) + { + AssertMsgFailed(("%d min=%d\n", cbLoggerRC, sizeof(*pLoggerRC))); + return VERR_INVALID_PARAMETER; + } + + /* + * Initialize GC instance. + */ + pLoggerRC->offScratch = 0; + pLoggerRC->fPendingPrefix = false; + pLoggerRC->pfnLogger = pfnLoggerRCPtr; + pLoggerRC->pfnFlush = pfnFlushRCPtr; + pLoggerRC->u32Magic = RTLOGGERRC_MAGIC; + pLoggerRC->fFlags = fFlags | RTLOGFLAGS_DISABLED; + pLoggerRC->cGroups = 1; + pLoggerRC->afGroups[0] = 0; + + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Check if there's enough space for the groups. + */ + if (cbLoggerRC < (size_t)RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups])) + { + AssertMsgFailed(("%d req=%d cGroups=%d\n", cbLoggerRC, RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]), pLogger->cGroups)); + return VERR_BUFFER_OVERFLOW; + } + memcpy(&pLoggerRC->afGroups[0], &pLogger->afGroups[0], pLogger->cGroups * sizeof(pLoggerRC->afGroups[0])); + pLoggerRC->cGroups = pLogger->cGroups; + + /* + * Copy bits from the HC instance. + */ + pLoggerRC->fPendingPrefix = pLogger->pInt->fPendingPrefix; + pLoggerRC->fFlags |= pLogger->fFlags; + + /* + * Check if we can remove the disabled flag. + */ + if ( pLogger->fDestFlags + && !((pLogger->fFlags | fFlags) & RTLOGFLAGS_DISABLED)) + pLoggerRC->fFlags &= ~RTLOGFLAGS_DISABLED; + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogCloneRC); + + +/** + * Flushes a RC logger instance to a R3 logger. + * + * + * @returns iprt status code. + * @param pLogger The R3 logger instance to flush pLoggerRC to. If NULL + * the default logger is used. + * @param pLoggerRC The RC logger instance to flush. + */ +RTDECL(void) RTLogFlushRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + { + pLoggerRC->offScratch = 0; + return; + } + } + + /* + * Any thing to flush? + */ + if ( pLogger->offScratch + || pLoggerRC->offScratch) + { + /* + * Acquire logger instance sem. + */ + int rc = rtlogLock(pLogger); + if (RT_FAILURE(rc)) + return; + + /* + * Write whatever the GC instance contains to the HC one, and then + * flush the HC instance. + */ + if (pLoggerRC->offScratch) + { + rtLogOutput(pLogger, pLoggerRC->achScratch, pLoggerRC->offScratch); + rtLogOutput(pLogger, NULL, 0); + pLoggerRC->offScratch = 0; + } + + /* + * Release the semaphore. + */ + rtlogUnlock(pLogger); + } +} +RT_EXPORT_SYMBOL(RTLogFlushRC); + +# ifdef IN_RING3 + +RTDECL(int) RTLogCreateForR0(PRTLOGGER pLogger, size_t cbLogger, + RTR0PTR pLoggerR0Ptr, RTR0PTR pfnLoggerR0Ptr, RTR0PTR pfnFlushR0Ptr, + uint32_t fFlags, uint32_t fDestFlags) +{ + /* + * Validate input. + */ + AssertPtrReturn(pLogger, VERR_INVALID_PARAMETER); + size_t const cbRequired = sizeof(*pLogger) + RTLOGGERINTERNAL_R0_SIZE; + AssertReturn(cbLogger >= cbRequired, VERR_BUFFER_OVERFLOW); + AssertReturn(pLoggerR0Ptr != NIL_RTR0PTR, VERR_INVALID_PARAMETER); + AssertReturn(pfnLoggerR0Ptr != NIL_RTR0PTR, VERR_INVALID_PARAMETER); + + /* + * Initialize the ring-0 instance. + */ + pLogger->achScratch[0] = 0; + pLogger->offScratch = 0; + pLogger->pfnLogger = (PFNRTLOGGER)pfnLoggerR0Ptr; + pLogger->fFlags = fFlags; + pLogger->fDestFlags = fDestFlags & ~RTLOGDEST_FILE; + pLogger->pInt = NULL; + pLogger->cGroups = 1; + pLogger->afGroups[0] = 0; + + uint32_t cMaxGroups = (uint32_t)((cbLogger - cbRequired) / sizeof(pLogger->afGroups[0])); + if (fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + cMaxGroups /= 2; + PRTLOGGERINTERNAL pInt; + for (;;) + { + AssertReturn(cMaxGroups > 0, VERR_BUFFER_OVERFLOW); + pInt = (PRTLOGGERINTERNAL)&pLogger->afGroups[cMaxGroups]; + if (!((uintptr_t)pInt & (sizeof(uint64_t) - 1))) + break; + cMaxGroups--; + } + pLogger->pInt = (PRTLOGGERINTERNAL)(pLoggerR0Ptr + (uintptr_t)pInt - (uintptr_t)pLogger); + pInt->uRevision = RTLOGGERINTERNAL_REV; + pInt->cbSelf = RTLOGGERINTERNAL_R0_SIZE; + pInt->hSpinMtx = NIL_RTSEMSPINMUTEX; /* Not serialized. */ + pInt->pfnFlush = (PFNRTLOGFLUSH)pfnFlushR0Ptr; + pInt->pfnPrefix = NULL; + pInt->pvPrefixUserArg = NULL; + pInt->fPendingPrefix = false; + pInt->cMaxGroups = cMaxGroups; + pInt->papszGroups = NULL; + pInt->cMaxEntriesPerGroup = UINT32_MAX; + if (fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + { + memset(pInt + 1, 0, sizeof(uint32_t) * cMaxGroups); + pInt->pacEntriesPerGroup= (uint32_t *)(pLogger->pInt + 1); + } + else + pInt->pacEntriesPerGroup= NULL; + + pInt->fCreated = true; + pLogger->u32Magic = RTLOGGER_MAGIC; + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogCreateForR0); + + +RTDECL(size_t) RTLogCalcSizeForR0(uint32_t cGroups, uint32_t fFlags) +{ + size_t cb = RT_OFFSETOF(RTLOGGER, afGroups[cGroups]); + cb = RT_ALIGN_Z(cb, sizeof(uint64_t)); + cb += sizeof(RTLOGGERINTERNAL); + if (fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + cb += sizeof(uint32_t) * cGroups; + return cb; +} +RT_EXPORT_SYMBOL(RTLogCalcSizeForR0); + + +RTDECL(int) RTLogCopyGroupsAndFlagsForR0(PRTLOGGER pDstLogger, RTR0PTR pDstLoggerR0Ptr, + PCRTLOGGER pSrcLogger, uint32_t fFlagsOr, uint32_t fFlagsAnd) +{ + /* + * Validate input. + */ + AssertPtrReturn(pDstLogger, VERR_INVALID_PARAMETER); + AssertPtrNullReturn(pSrcLogger, VERR_INVALID_PARAMETER); + + /* + * Resolve defaults. + */ + if (!pSrcLogger) + { + pSrcLogger = RTLogDefaultInstance(); + if (!pSrcLogger) + { + pDstLogger->fFlags |= RTLOGFLAGS_DISABLED | fFlagsOr; + pDstLogger->cGroups = 1; + pDstLogger->afGroups[0] = 0; + return VINF_SUCCESS; + } + } + + /* + * Copy flags and group settings. + */ + pDstLogger->fFlags = (pSrcLogger->fFlags & fFlagsAnd & ~RTLOGFLAGS_RESTRICT_GROUPS) | fFlagsOr; + + PRTLOGGERINTERNAL pDstInt = (PRTLOGGERINTERNAL)((uintptr_t)pDstLogger->pInt - pDstLoggerR0Ptr + (uintptr_t)pDstLogger); + int rc = VINF_SUCCESS; + uint32_t cGroups = pSrcLogger->cGroups; + if (cGroups > pDstInt->cMaxGroups) + { + AssertMsgFailed(("cMaxGroups=%zd cGroups=%zd (min size %d)\n", pDstInt->cMaxGroups, + pSrcLogger->cGroups, RT_OFFSETOF(RTLOGGER, afGroups[pSrcLogger->cGroups]) + RTLOGGERINTERNAL_R0_SIZE)); + rc = VERR_INVALID_PARAMETER; + cGroups = pDstInt->cMaxGroups; + } + memcpy(&pDstLogger->afGroups[0], &pSrcLogger->afGroups[0], cGroups * sizeof(pDstLogger->afGroups[0])); + pDstLogger->cGroups = cGroups; + + return rc; +} +RT_EXPORT_SYMBOL(RTLogCopyGroupsAndFlagsForR0); + + +RTDECL(int) RTLogSetCustomPrefixCallbackForR0(PRTLOGGER pLogger, RTR0PTR pLoggerR0Ptr, + RTR0PTR pfnCallbackR0Ptr, RTR0PTR pvUserR0Ptr) +{ + AssertPtrReturn(pLogger, VERR_INVALID_POINTER); + AssertReturn(pLogger->u32Magic == RTLOGGER_MAGIC, VERR_INVALID_MAGIC); + + /* + * Do the work. + */ + PRTLOGGERINTERNAL pInt = (PRTLOGGERINTERNAL)((uintptr_t)pLogger->pInt - pLoggerR0Ptr + (uintptr_t)pLogger); + AssertReturn(pInt->uRevision == RTLOGGERINTERNAL_REV, VERR_LOG_REVISION_MISMATCH); + pInt->pvPrefixUserArg = (void *)pvUserR0Ptr; + pInt->pfnPrefix = (PFNRTLOGPREFIX)pfnCallbackR0Ptr; + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogSetCustomPrefixCallbackForR0); + +RTDECL(void) RTLogFlushR0(PRTLOGGER pLogger, PRTLOGGER pLoggerR0) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + { + /* flushing to "/dev/null". */ + if (pLoggerR0->offScratch) + pLoggerR0->offScratch = 0; + return; + } + } + + /* + * Anything to flush? + */ + if ( pLoggerR0->offScratch + || pLogger->offScratch) + { + /* + * Acquire logger semaphores. + */ + int rc = rtlogLock(pLogger); + if (RT_FAILURE(rc)) + return; + if (RT_SUCCESS(rc)) + { + /* + * Write whatever the GC instance contains to the HC one, and then + * flush the HC instance. + */ + if (pLoggerR0->offScratch) + { + rtLogOutput(pLogger, pLoggerR0->achScratch, pLoggerR0->offScratch); + rtLogOutput(pLogger, NULL, 0); + pLoggerR0->offScratch = 0; + } + } + rtlogUnlock(pLogger); + } +} +RT_EXPORT_SYMBOL(RTLogFlushR0); + +# endif /* IN_RING3 */ + + +/** + * Flushes the buffer in one logger instance onto another logger. + * + * @returns iprt status code. + * + * @param pSrcLogger The logger instance to flush. + * @param pDstLogger The logger instance to flush onto. + * If NULL the default logger will be used. + */ +RTDECL(void) RTLogFlushToLogger(PRTLOGGER pSrcLogger, PRTLOGGER pDstLogger) +{ + /* + * Resolve defaults. + */ + if (!pDstLogger) + { + pDstLogger = RTLogDefaultInstance(); + if (!pDstLogger) + { + /* flushing to "/dev/null". */ + if (pSrcLogger->offScratch) + { + int rc = rtlogLock(pSrcLogger); + if (RT_SUCCESS(rc)) + { + pSrcLogger->offScratch = 0; + rtlogUnlock(pSrcLogger); + } + } + return; + } + } + + /* + * Any thing to flush? + */ + if ( pSrcLogger->offScratch + || pDstLogger->offScratch) + { + /* + * Acquire logger semaphores. + */ + int rc = rtlogLock(pDstLogger); + if (RT_FAILURE(rc)) + return; + rc = rtlogLock(pSrcLogger); + if (RT_SUCCESS(rc)) + { + /* + * Write whatever the GC instance contains to the HC one, and then + * flush the HC instance. + */ + if (pSrcLogger->offScratch) + { + rtLogOutput(pDstLogger, pSrcLogger->achScratch, pSrcLogger->offScratch); + rtLogOutput(pDstLogger, NULL, 0); + pSrcLogger->offScratch = 0; + } + + /* + * Release the semaphores. + */ + rtlogUnlock(pSrcLogger); + } + rtlogUnlock(pDstLogger); + } +} +RT_EXPORT_SYMBOL(RTLogFlushToLogger); + + +/** + * Sets the custom prefix callback. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param pfnCallback The callback. + * @param pvUser The user argument for the callback. + * */ +RTDECL(int) RTLogSetCustomPrefixCallback(PRTLOGGER pLogger, PFNRTLOGPREFIX pfnCallback, void *pvUser) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + AssertReturn(pLogger->u32Magic == RTLOGGER_MAGIC, VERR_INVALID_MAGIC); + + /* + * Do the work. + */ + rtlogLock(pLogger); + pLogger->pInt->pvPrefixUserArg = pvUser; + pLogger->pInt->pfnPrefix = pfnCallback; + rtlogUnlock(pLogger); + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogSetCustomPrefixCallback); + + +/** + * Matches a group name with a pattern mask in an case insensitive manner (ASCII). + * + * @returns true if matching and *ppachMask set to the end of the pattern. + * @returns false if no match. + * @param pszGrp The group name. + * @param ppachMask Pointer to the pointer to the mask. Only wildcard supported is '*'. + * @param cchMask The length of the mask, including modifiers. The modifiers is why + * we update *ppachMask on match. + */ +static bool rtlogIsGroupMatching(const char *pszGrp, const char **ppachMask, size_t cchMask) +{ + const char *pachMask; + + if (!pszGrp || !*pszGrp) + return false; + pachMask = *ppachMask; + for (;;) + { + if (RT_C_TO_LOWER(*pszGrp) != RT_C_TO_LOWER(*pachMask)) + { + const char *pszTmp; + + /* + * Check for wildcard and do a minimal match if found. + */ + if (*pachMask != '*') + return false; + + /* eat '*'s. */ + do pachMask++; + while (--cchMask && *pachMask == '*'); + + /* is there more to match? */ + if ( !cchMask + || *pachMask == '.' + || *pachMask == '=') + break; /* we're good */ + + /* do extremely minimal matching (fixme) */ + pszTmp = strchr(pszGrp, RT_C_TO_LOWER(*pachMask)); + if (!pszTmp) + pszTmp = strchr(pszGrp, RT_C_TO_UPPER(*pachMask)); + if (!pszTmp) + return false; + pszGrp = pszTmp; + continue; + } + + /* done? */ + if (!*++pszGrp) + { + /* trailing wildcard is ok. */ + do + { + pachMask++; + cchMask--; + } while (cchMask && *pachMask == '*'); + if ( !cchMask + || *pachMask == '.' + || *pachMask == '=') + break; /* we're good */ + return false; + } + + if (!--cchMask) + return false; + pachMask++; + } + + /* match */ + *ppachMask = pachMask; + return true; +} + + +/** + * Updates the group settings for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance. + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogGroupSettings(PRTLOGGER pLogger, const char *pszValue) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Iterate the string. + */ + while (*pszValue) + { + /* + * Skip prefixes (blanks, ;, + and -). + */ + bool fEnabled = true; + char ch; + const char *pszStart; + unsigned i; + size_t cch; + + while ((ch = *pszValue) == '+' || ch == '-' || ch == ' ' || ch == '\t' || ch == '\n' || ch == ';') + { + if (ch == '+' || ch == '-' || ch == ';') + fEnabled = ch != '-'; + pszValue++; + } + if (!*pszValue) + break; + + /* + * Find end. + */ + pszStart = pszValue; + while ((ch = *pszValue) != '\0' && ch != '+' && ch != '-' && ch != ' ' && ch != '\t') + pszValue++; + + /* + * Find the group (ascii case insensitive search). + * Special group 'all'. + */ + cch = pszValue - pszStart; + if ( cch >= 3 + && (pszStart[0] == 'a' || pszStart[0] == 'A') + && (pszStart[1] == 'l' || pszStart[1] == 'L') + && (pszStart[2] == 'l' || pszStart[2] == 'L') + && (cch == 3 || pszStart[3] == '.' || pszStart[3] == '=')) + { + /* + * All. + */ + unsigned fFlags = cch == 3 + ? RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1 + : rtlogGroupFlags(&pszStart[3]); + for (i = 0; i < pLogger->cGroups; i++) + { + if (fEnabled) + pLogger->afGroups[i] |= fFlags; + else + pLogger->afGroups[i] &= ~fFlags; + } + } + else + { + /* + * Specific group(s). + */ + for (i = 0; i < pLogger->cGroups; i++) + { + const char *psz2 = (const char*)pszStart; + if (rtlogIsGroupMatching(pLogger->pInt->papszGroups[i], &psz2, cch)) + { + unsigned fFlags = RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1; + if (*psz2 == '.' || *psz2 == '=') + fFlags = rtlogGroupFlags(psz2); + if (fEnabled) + pLogger->afGroups[i] |= fFlags; + else + pLogger->afGroups[i] &= ~fFlags; + } + } /* for each group */ + } + + } /* parse specification */ + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogGroupSettings); + + +/** + * Interprets the group flags suffix. + * + * @returns Flags specified. (0 is possible!) + * @param psz Start of Suffix. (Either dot or equal sign.) + */ +static unsigned rtlogGroupFlags(const char *psz) +{ + unsigned fFlags = 0; + + /* + * Literal flags. + */ + while (*psz == '.') + { + static struct + { + const char *pszFlag; /* lowercase!! */ + unsigned fFlag; + } aFlags[] = + { + { "eo", RTLOGGRPFLAGS_ENABLED }, + { "enabledonly",RTLOGGRPFLAGS_ENABLED }, + { "e", RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1 | RTLOGGRPFLAGS_WARN }, + { "enabled", RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1 | RTLOGGRPFLAGS_WARN }, + { "l1", RTLOGGRPFLAGS_LEVEL_1 }, + { "level1", RTLOGGRPFLAGS_LEVEL_1 }, + { "l", RTLOGGRPFLAGS_LEVEL_2 }, + { "l2", RTLOGGRPFLAGS_LEVEL_2 }, + { "level2", RTLOGGRPFLAGS_LEVEL_2 }, + { "l3", RTLOGGRPFLAGS_LEVEL_3 }, + { "level3", RTLOGGRPFLAGS_LEVEL_3 }, + { "l4", RTLOGGRPFLAGS_LEVEL_4 }, + { "level4", RTLOGGRPFLAGS_LEVEL_4 }, + { "l5", RTLOGGRPFLAGS_LEVEL_5 }, + { "level5", RTLOGGRPFLAGS_LEVEL_5 }, + { "l6", RTLOGGRPFLAGS_LEVEL_6 }, + { "level6", RTLOGGRPFLAGS_LEVEL_6 }, + { "l7", RTLOGGRPFLAGS_LEVEL_7 }, + { "level7", RTLOGGRPFLAGS_LEVEL_7 }, + { "l8", RTLOGGRPFLAGS_LEVEL_8 }, + { "level8", RTLOGGRPFLAGS_LEVEL_8 }, + { "l9", RTLOGGRPFLAGS_LEVEL_9 }, + { "level9", RTLOGGRPFLAGS_LEVEL_9 }, + { "l10", RTLOGGRPFLAGS_LEVEL_10 }, + { "level10", RTLOGGRPFLAGS_LEVEL_10 }, + { "l11", RTLOGGRPFLAGS_LEVEL_11 }, + { "level11", RTLOGGRPFLAGS_LEVEL_11 }, + { "l12", RTLOGGRPFLAGS_LEVEL_12 }, + { "level12", RTLOGGRPFLAGS_LEVEL_12 }, + { "f", RTLOGGRPFLAGS_FLOW }, + { "flow", RTLOGGRPFLAGS_FLOW }, + { "w", RTLOGGRPFLAGS_WARN }, + { "warn", RTLOGGRPFLAGS_WARN }, + { "warning", RTLOGGRPFLAGS_WARN }, + { "restrict", RTLOGGRPFLAGS_RESTRICT }, + + }; + unsigned i; + bool fFound = false; + psz++; + for (i = 0; i < RT_ELEMENTS(aFlags) && !fFound; i++) + { + const char *psz1 = aFlags[i].pszFlag; + const char *psz2 = psz; + while (*psz1 == RT_C_TO_LOWER(*psz2)) + { + psz1++; + psz2++; + if (!*psz1) + { + if ( (*psz2 >= 'a' && *psz2 <= 'z') + || (*psz2 >= 'A' && *psz2 <= 'Z') + || (*psz2 >= '0' && *psz2 <= '9') ) + break; + fFlags |= aFlags[i].fFlag; + fFound = true; + psz = psz2; + break; + } + } /* strincmp */ + } /* for each flags */ + AssertMsg(fFound, ("%.15s...", psz)); + } + + /* + * Flag value. + */ + if (*psz == '=') + { + psz++; + if (*psz == '~') + fFlags = ~RTStrToInt32(psz + 1); + else + fFlags = RTStrToInt32(psz); + } + + return fFlags; +} + +/** + * Helper for RTLogGetGroupSettings. + */ +static int rtLogGetGroupSettingsAddOne(const char *pszName, uint32_t fGroup, char **ppszBuf, size_t *pcchBuf, bool *pfNotFirst) +{ +# define APPEND_PSZ(psz,cch) do { memcpy(*ppszBuf, (psz), (cch)); *ppszBuf += (cch); *pcchBuf -= (cch); } while (0) +# define APPEND_SZ(sz) APPEND_PSZ(sz, sizeof(sz) - 1) +# define APPEND_CH(ch) do { **ppszBuf = (ch); *ppszBuf += 1; *pcchBuf -= 1; } while (0) + + /* + * Add the name. + */ + size_t cchName = strlen(pszName); + if (cchName + 1 + *pfNotFirst > *pcchBuf) + return VERR_BUFFER_OVERFLOW; + if (*pfNotFirst) + APPEND_CH(' '); + else + *pfNotFirst = true; + APPEND_PSZ(pszName, cchName); + + /* + * Only generate mnemonics for the simple+common bits. + */ + if (fGroup == (RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1)) + /* nothing */; + else if ( fGroup == (RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1 | RTLOGGRPFLAGS_LEVEL_2 | RTLOGGRPFLAGS_FLOW) + && *pcchBuf >= sizeof(".e.l.f")) + APPEND_SZ(".e.l.f"); + else if ( fGroup == (RTLOGGRPFLAGS_ENABLED | RTLOGGRPFLAGS_LEVEL_1 | RTLOGGRPFLAGS_FLOW) + && *pcchBuf >= sizeof(".e.f")) + APPEND_SZ(".e.f"); + else if (*pcchBuf >= 1 + 10 + 1) + { + size_t cch; + APPEND_CH('='); + cch = RTStrFormatNumber(*ppszBuf, fGroup, 16, 0, 0, RTSTR_F_SPECIAL | RTSTR_F_32BIT); + *ppszBuf += cch; + *pcchBuf -= cch; + } + else + return VERR_BUFFER_OVERFLOW; + +# undef APPEND_PSZ +# undef APPEND_SZ +# undef APPEND_CH + return VINF_SUCCESS; +} + + +/** + * Get the current log group settings as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetGroupSettings(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf) +{ + bool fNotFirst = false; + int rc = VINF_SUCCESS; + uint32_t cGroups; + uint32_t fGroup; + uint32_t i; + + Assert(cchBuf); + + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + { + *pszBuf = '\0'; + return VINF_SUCCESS; + } + } + + cGroups = pLogger->cGroups; + + /* + * Check if all are the same. + */ + fGroup = pLogger->afGroups[0]; + for (i = 1; i < cGroups; i++) + if (pLogger->afGroups[i] != fGroup) + break; + if (i >= cGroups) + rc = rtLogGetGroupSettingsAddOne("all", fGroup, &pszBuf, &cchBuf, &fNotFirst); + else + { + + /* + * Iterate all the groups and print all that are enabled. + */ + for (i = 0; i < cGroups; i++) + { + fGroup = pLogger->afGroups[i]; + if (fGroup) + { + const char *pszName = pLogger->pInt->papszGroups[i]; + if (pszName) + { + rc = rtLogGetGroupSettingsAddOne(pszName, fGroup, &pszBuf, &cchBuf, &fNotFirst); + if (rc) + break; + } + } + } + } + + *pszBuf = '\0'; + return rc; +} +RT_EXPORT_SYMBOL(RTLogGetGroupSettings); + +#endif /* !IN_RC */ + +/** + * Updates the flags for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogFlags(PRTLOGGER pLogger, const char *pszValue) +{ + int rc = VINF_SUCCESS; + + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Iterate the string. + */ + while (*pszValue) + { + /* check no prefix. */ + bool fNo = false; + char ch; + unsigned i; + + /* skip blanks. */ + while (RT_C_IS_SPACE(*pszValue)) + pszValue++; + if (!*pszValue) + return rc; + + while ((ch = *pszValue) != '\0') + { + if (ch == 'n' && pszValue[1] == 'o') + { + pszValue += 2; + fNo = !fNo; + } + else if (ch == '+') + { + pszValue++; + fNo = true; + } + else if (ch == '-' || ch == '!' || ch == '~') + { + pszValue++; + fNo = !fNo; + } + else + break; + } + + /* instruction. */ + for (i = 0; i < RT_ELEMENTS(g_aLogFlags); i++) + { + if (!strncmp(pszValue, g_aLogFlags[i].pszInstr, g_aLogFlags[i].cchInstr)) + { + if (fNo == g_aLogFlags[i].fInverted) + pLogger->fFlags |= g_aLogFlags[i].fFlag; + else + pLogger->fFlags &= ~g_aLogFlags[i].fFlag; + pszValue += g_aLogFlags[i].cchInstr; + break; + } + } + + /* unknown instruction? */ + if (i >= RT_ELEMENTS(g_aLogFlags)) + { + AssertMsgFailed(("Invalid flags! unknown instruction %.20s\n", pszValue)); + pszValue++; + } + + /* skip blanks and delimiters. */ + while (RT_C_IS_SPACE(*pszValue) || *pszValue == ';') + pszValue++; + } /* while more environment variable value left */ + + return rc; +} +RT_EXPORT_SYMBOL(RTLogFlags); + + +/** + * Changes the buffering setting of the specified logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param pLogger The logger instance (NULL is an alias for the + * default logger). + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogSetBuffering(PRTLOGGER pLogger, bool fBuffered) +{ + bool fOld; + + /* + * Resolve the logger instance. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return false; + } + + rtlogLock(pLogger); + fOld = !!(pLogger->fFlags & RTLOGFLAGS_BUFFERED); + if (fBuffered) + pLogger->fFlags |= RTLOGFLAGS_BUFFERED; + else + pLogger->fFlags &= ~RTLOGFLAGS_BUFFERED; + rtlogUnlock(pLogger); + + return fOld; +} +RT_EXPORT_SYMBOL(RTLogSetBuffering); + + +#ifdef IN_RING3 +RTDECL(uint32_t) RTLogSetGroupLimit(PRTLOGGER pLogger, uint32_t cMaxEntriesPerGroup) +{ + /* + * Resolve the logger instance. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return UINT32_MAX; + } + + rtlogLock(pLogger); + uint32_t cOld = pLogger->pInt->cMaxEntriesPerGroup; + pLogger->pInt->cMaxEntriesPerGroup = cMaxEntriesPerGroup; + rtlogUnlock(pLogger); + + return cOld; +} +#endif + +#ifndef IN_RC + +/** + * Get the current log flags as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetFlags(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf) +{ + bool fNotFirst = false; + int rc = VINF_SUCCESS; + uint32_t fFlags; + unsigned i; + + Assert(cchBuf); + + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + { + *pszBuf = '\0'; + return VINF_SUCCESS; + } + } + + /* + * Add the flags in the list. + */ + fFlags = pLogger->fFlags; + for (i = 0; i < RT_ELEMENTS(g_aLogFlags); i++) + if ( !g_aLogFlags[i].fInverted + ? (g_aLogFlags[i].fFlag & fFlags) + : !(g_aLogFlags[i].fFlag & fFlags)) + { + size_t cchInstr = g_aLogFlags[i].cchInstr; + if (cchInstr + fNotFirst + 1 > cchBuf) + { + rc = VERR_BUFFER_OVERFLOW; + break; + } + if (fNotFirst) + { + *pszBuf++ = ' '; + cchBuf--; + } + memcpy(pszBuf, g_aLogFlags[i].pszInstr, cchInstr); + pszBuf += cchInstr; + cchBuf -= cchInstr; + fNotFirst = true; + } + *pszBuf = '\0'; + return rc; +} +RT_EXPORT_SYMBOL(RTLogGetFlags); + + +/** + * Finds the end of a destination value. + * + * The value ends when we counter a ';' or a free standing word (space on both + * from the g_aLogDst table. (If this is problematic for someone, we could + * always do quoting and escaping.) + * + * @returns Value length in chars. + * @param pszValue The first char after '=' or ':'. + */ +static size_t rtLogDestFindValueLength(const char *pszValue) +{ + size_t off = 0; + char ch; + while ((ch = pszValue[off]) != '\0' && ch != ';') + { + if (!RT_C_IS_SPACE(ch)) + off++; + else + { + unsigned i; + size_t cchThusFar = off; + do + off++; + while ((ch = pszValue[off]) != '\0' && RT_C_IS_SPACE(ch)); + if (ch == ';') + return cchThusFar; + + if (ch == 'n' && pszValue[off + 1] == 'o') + off += 2; + for (i = 0; i < RT_ELEMENTS(g_aLogDst); i++) + if (!strncmp(&pszValue[off], g_aLogDst[i].pszInstr, g_aLogDst[i].cchInstr)) + { + ch = pszValue[off + g_aLogDst[i].cchInstr]; + if (ch == '\0' || RT_C_IS_SPACE(ch) || ch == '=' || ch == ':' || ch == ';') + return cchThusFar; + } + } + } + return off; +} + + +/** + * Updates the logger destination using the specified string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + */ +RTDECL(int) RTLogDestinations(PRTLOGGER pLogger, char const *pszValue) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Do the parsing. + */ + while (*pszValue) + { + bool fNo; + unsigned i; + + /* skip blanks. */ + while (RT_C_IS_SPACE(*pszValue)) + pszValue++; + if (!*pszValue) + break; + + /* check no prefix. */ + fNo = false; + if ( pszValue[0] == 'n' + && pszValue[1] == 'o' + && ( pszValue[2] != 'd' + || pszValue[3] != 'e' + || pszValue[4] != 'n' + || pszValue[5] != 'y')) + { + fNo = true; + pszValue += 2; + } + + /* instruction. */ + for (i = 0; i < RT_ELEMENTS(g_aLogDst); i++) + { + size_t cchInstr = strlen(g_aLogDst[i].pszInstr); + if (!strncmp(pszValue, g_aLogDst[i].pszInstr, cchInstr)) + { + if (!fNo) + pLogger->fDestFlags |= g_aLogDst[i].fFlag; + else + pLogger->fDestFlags &= ~g_aLogDst[i].fFlag; + pszValue += cchInstr; + + /* check for value. */ + while (RT_C_IS_SPACE(*pszValue)) + pszValue++; + if (*pszValue == '=' || *pszValue == ':') + { + pszValue++; + size_t cch = rtLogDestFindValueLength(pszValue); + const char *pszEnd = pszValue + cch; + +# ifdef IN_RING3 + char szTmp[sizeof(pLogger->pInt->szFilename)]; +# else + char szTmp[32]; +# endif + if (0) + { /* nothing */ } +#ifdef IN_RING3 + + /* log file name */ + else if (i == 0 /* file */ && !fNo) + { + AssertReturn(cch < sizeof(pLogger->pInt->szFilename), VERR_OUT_OF_RANGE); + memcpy(pLogger->pInt->szFilename, pszValue, cch); + pLogger->pInt->szFilename[cch] = '\0'; + /** @todo reopen log file if pLogger->pInt->fCreated is true ... */ + } + /* log directory */ + else if (i == 1 /* dir */ && !fNo) + { + const char *pszFile = RTPathFilename(pLogger->pInt->szFilename); + size_t cchFile = pszFile ? strlen(pszFile) : 0; + AssertReturn(cchFile + cch + 1 < sizeof(pLogger->pInt->szFilename), VERR_OUT_OF_RANGE); + memcpy(szTmp, cchFile ? pszFile : "", cchFile + 1); + + memcpy(pLogger->pInt->szFilename, pszValue, cch); + pLogger->pInt->szFilename[cch] = '\0'; + RTPathStripTrailingSlash(pLogger->pInt->szFilename); + + cch = strlen(pLogger->pInt->szFilename); + pLogger->pInt->szFilename[cch++] = '/'; + memcpy(&pLogger->pInt->szFilename[cch], szTmp, cchFile); + pLogger->pInt->szFilename[cch + cchFile] = '\0'; + /** @todo reopen log file if pLogger->pInt->fCreated is true ... */ + } + else if (i == 2 /* history */) + { + if (!fNo) + { + uint32_t cHistory = 0; + int rc = RTStrCopyEx(szTmp, sizeof(szTmp), pszValue, cch); + if (RT_SUCCESS(rc)) + rc = RTStrToUInt32Full(szTmp, 0, &cHistory); + AssertMsgReturn(RT_SUCCESS(rc) && cHistory < _1M, ("Invalid history value %s (%Rrc)!\n", szTmp, rc), rc); + pLogger->pInt->cHistory = cHistory; + } + else + pLogger->pInt->cHistory = 0; + } + else if (i == 3 /* histsize */) + { + if (!fNo) + { + int rc = RTStrCopyEx(szTmp, sizeof(szTmp), pszValue, cch); + if (RT_SUCCESS(rc)) + rc = RTStrToUInt64Full(szTmp, 0, &pLogger->pInt->cbHistoryFileMax); + AssertMsgRCReturn(rc, ("Invalid history file size value %s (%Rrc)!\n", szTmp, rc), rc); + if (pLogger->pInt->cbHistoryFileMax == 0) + pLogger->pInt->cbHistoryFileMax = UINT64_MAX; + } + else + pLogger->pInt->cbHistoryFileMax = UINT64_MAX; + } + else if (i == 4 /* histtime */) + { + if (!fNo) + { + int rc = RTStrCopyEx(szTmp, sizeof(szTmp), pszValue, cch); + if (RT_SUCCESS(rc)) + rc = RTStrToUInt32Full(szTmp, 0, &pLogger->pInt->cSecsHistoryTimeSlot); + AssertMsgRCReturn(rc, ("Invalid history time slot value %s (%Rrc)!\n", szTmp, rc), rc); + if (pLogger->pInt->cSecsHistoryTimeSlot == 0) + pLogger->pInt->cSecsHistoryTimeSlot = UINT32_MAX; + } + else + pLogger->pInt->cSecsHistoryTimeSlot = UINT32_MAX; + } +# endif /* IN_RING3 */ + else if (i == 5 /* ringbuf */ && !fNo) + { + int rc = RTStrCopyEx(szTmp, sizeof(szTmp), pszValue, cch); + uint32_t cbRingBuf = 0; + if (RT_SUCCESS(rc)) + rc = RTStrToUInt32Full(szTmp, 0, &cbRingBuf); + AssertMsgRCReturn(rc, ("Invalid ring buffer size value '%s' (%Rrc)!\n", szTmp, rc), rc); + + if (cbRingBuf == 0) + cbRingBuf = RTLOG_RINGBUF_DEFAULT_SIZE; + else if (cbRingBuf < RTLOG_RINGBUF_MIN_SIZE) + cbRingBuf = RTLOG_RINGBUF_MIN_SIZE; + else if (cbRingBuf > RTLOG_RINGBUF_MAX_SIZE) + cbRingBuf = RTLOG_RINGBUF_MAX_SIZE; + else + cbRingBuf = RT_ALIGN_32(cbRingBuf, 64); + rc = rtLogRingBufAdjust(pLogger, cbRingBuf, false /*fForce*/); + if (RT_FAILURE(rc)) + return rc; + } + else + AssertMsgFailedReturn(("Invalid destination value! %s%s doesn't take a value!\n", + fNo ? "no" : "", g_aLogDst[i].pszInstr), + VERR_INVALID_PARAMETER); + + pszValue = pszEnd + (*pszEnd != '\0'); + } + else if (i == 5 /* ringbuf */ && !fNo && !pLogger->pInt->pszRingBuf) + { + int rc = rtLogRingBufAdjust(pLogger, pLogger->pInt->cbRingBuf, false /*fForce*/); + if (RT_FAILURE(rc)) + return rc; + } + break; + } + } + + /* assert known instruction */ + AssertMsgReturn(i < RT_ELEMENTS(g_aLogDst), + ("Invalid destination value! unknown instruction %.20s\n", pszValue), + VERR_INVALID_PARAMETER); + + /* skip blanks and delimiters. */ + while (RT_C_IS_SPACE(*pszValue) || *pszValue == ';') + pszValue++; + } /* while more environment variable value left */ + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogDestinations); + + +/** + * Clear the file delay flag if set, opening the destination and flushing. + * + * @returns IPRT status code. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + * @param pErrInfo Where to return extended error info. Optional. + */ +RTDECL(int) RTLogClearFileDelayFlag(PRTLOGGER pLogger, PRTERRINFO pErrInfo) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Do the work. + */ + int rc = rtlogLock(pLogger); + if (RT_SUCCESS(rc)) + { + if (pLogger->fDestFlags & RTLOGDEST_F_DELAY_FILE) + { + pLogger->fDestFlags &= ~RTLOGDEST_F_DELAY_FILE; +# ifdef IN_RING3 + if ( pLogger->fDestFlags & RTLOGDEST_FILE + && pLogger->pInt->hFile == NIL_RTFILE) + { + rc = rtR3LogOpenFileDestination(pLogger, pErrInfo); + if (RT_SUCCESS(rc)) + rtlogFlush(pLogger, false /*fNeedSpace*/); + } +# endif + RT_NOREF(pErrInfo); /** @todo fix create API to use RTErrInfo */ + } + rtlogUnlock(pLogger); + } + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogClearFileDelayFlag); + + +/** + * Get the current log destinations as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than 0. + */ +RTDECL(int) RTLogGetDestinations(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf) +{ + bool fNotFirst = false; + int rc = VINF_SUCCESS; + uint32_t fDestFlags; + unsigned i; + + AssertReturn(cchBuf, VERR_INVALID_PARAMETER); + *pszBuf = '\0'; + + /* + * Resolve defaults. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return VINF_SUCCESS; + } + + /* + * Add the flags in the list. + */ + fDestFlags = pLogger->fDestFlags; + for (i = 6; i < RT_ELEMENTS(g_aLogDst); i++) + if (g_aLogDst[i].fFlag & fDestFlags) + { + if (fNotFirst) + { + rc = RTStrCopyP(&pszBuf, &cchBuf, " "); + if (RT_FAILURE(rc)) + return rc; + } + rc = RTStrCopyP(&pszBuf, &cchBuf, g_aLogDst[i].pszInstr); + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + } + + char szNum[32]; + +# ifdef IN_RING3 + /* + * Add the filename. + */ + if (fDestFlags & RTLOGDEST_FILE) + { + rc = RTStrCopyP(&pszBuf, &cchBuf, fNotFirst ? " file=" : "file="); + if (RT_FAILURE(rc)) + return rc; + rc = RTStrCopyP(&pszBuf, &cchBuf, pLogger->pInt->szFilename); + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + + if (pLogger->pInt->cHistory) + { + RTStrPrintf(szNum, sizeof(szNum), fNotFirst ? " history=%u" : "history=%u", pLogger->pInt->cHistory); + rc = RTStrCopyP(&pszBuf, &cchBuf, szNum); + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + } + if (pLogger->pInt->cbHistoryFileMax != UINT64_MAX) + { + RTStrPrintf(szNum, sizeof(szNum), fNotFirst ? " histsize=%llu" : "histsize=%llu", pLogger->pInt->cbHistoryFileMax); + rc = RTStrCopyP(&pszBuf, &cchBuf, szNum); + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + } + if (pLogger->pInt->cSecsHistoryTimeSlot != UINT32_MAX) + { + RTStrPrintf(szNum, sizeof(szNum), fNotFirst ? " histtime=%llu" : "histtime=%llu", pLogger->pInt->cSecsHistoryTimeSlot); + rc = RTStrCopyP(&pszBuf, &cchBuf, szNum); + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + } + } +# endif /* IN_RING3 */ + + /* + * Add the ring buffer. + */ + if (fDestFlags & RTLOGDEST_RINGBUF) + { + if (pLogger->pInt->cbRingBuf == RTLOG_RINGBUF_DEFAULT_SIZE) + rc = RTStrCopyP(&pszBuf, &cchBuf, fNotFirst ? " ringbuf" : "ringbuf"); + else + { + RTStrPrintf(szNum, sizeof(szNum), fNotFirst ? " ringbuf=%#x" : "ringbuf=%#x", pLogger->pInt->cbRingBuf); + rc = RTStrCopyP(&pszBuf, &cchBuf, szNum); + } + if (RT_FAILURE(rc)) + return rc; + fNotFirst = true; + } + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTLogGetDestinations); + +#endif /* !IN_RC */ + +/** + * Flushes the specified logger. + * + * @param pLogger The logger instance to flush. + * If NULL the default instance is used. The default instance + * will not be initialized by this call. + */ +RTDECL(void) RTLogFlush(PRTLOGGER pLogger) +{ + /* + * Resolve defaults. + */ + if (!pLogger) + { +#ifdef IN_RC + pLogger = &g_Logger; +#else + pLogger = g_pLogger; +#endif + if (!pLogger) + return; + } + + /* + * Any thing to flush? + */ + if ( pLogger->offScratch +#ifndef IN_RC + || (pLogger->fDestFlags & RTLOGDEST_RINGBUF) +#endif + ) + { +#ifndef IN_RC + /* + * Acquire logger instance sem. + */ + int rc = rtlogLock(pLogger); + if (RT_FAILURE(rc)) + return; +#endif + /* + * Call worker. + */ + rtlogFlush(pLogger, false /*fNeedSpace*/); + +#ifndef IN_RC + /* + * Since this is an explicit flush call, the ring buffer content should + * be flushed to the other destinations if active. + */ + if ( (pLogger->fDestFlags & RTLOGDEST_RINGBUF) + && pLogger->pInt->pszRingBuf /* paranoia */) + rtLogRingBufFlush(pLogger); + + /* + * Release the semaphore. + */ + rtlogUnlock(pLogger); +#endif + } +} +RT_EXPORT_SYMBOL(RTLogFlush); + + +/** + * Common worker for RTLogDefaultInstance and RTLogDefaultInstanceEx. + */ +DECL_FORCE_INLINE(PRTLOGGER) rtLogDefaultInstanceCommon(void) +{ +#ifdef IN_RC + return &g_Logger; + +#else /* !IN_RC */ +# ifdef IN_RING0 + /* + * Check per thread loggers first. + */ + if (g_cPerThreadLoggers) + { + const RTNATIVETHREAD Self = RTThreadNativeSelf(); + int32_t i = RT_ELEMENTS(g_aPerThreadLoggers); + while (i-- > 0) + if (g_aPerThreadLoggers[i].NativeThread == Self) + return g_aPerThreadLoggers[i].pLogger; + } +# endif /* IN_RING0 */ + + /* + * If no per thread logger, use the default one. + */ + if (!g_pLogger) + g_pLogger = RTLogDefaultInit(); + return g_pLogger; +#endif /* !IN_RC */ +} + + +RTDECL(PRTLOGGER) RTLogDefaultInstance(void) +{ + return rtLogDefaultInstanceCommon(); +} +RT_EXPORT_SYMBOL(RTLogDefaultInstance); + + +RTDECL(PRTLOGGER) RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup) +{ + PRTLOGGER pLogger = rtLogDefaultInstanceCommon(); + if (pLogger) + { + if (pLogger->fFlags & RTLOGFLAGS_DISABLED) + pLogger = NULL; + else + { + uint16_t const fFlags = RT_LO_U16(fFlagsAndGroup); + uint16_t const iGroup = RT_HI_U16(fFlagsAndGroup); + if ( iGroup != UINT16_MAX + && ( (pLogger->afGroups[iGroup < pLogger->cGroups ? iGroup : 0] & (fFlags | (uint32_t)RTLOGGRPFLAGS_ENABLED)) + != (fFlags | (uint32_t)RTLOGGRPFLAGS_ENABLED))) + pLogger = NULL; + } + } + return pLogger; +} +RT_EXPORT_SYMBOL(RTLogDefaultInstanceEx); + + +/** + * Common worker for RTLogGetDefaultInstance and RTLogGetDefaultInstanceEx. + */ +DECL_FORCE_INLINE(PRTLOGGER) rtLogGetDefaultInstanceCommon(void) +{ +#ifdef IN_RC + return &g_Logger; +#else +# ifdef IN_RING0 + /* + * Check per thread loggers first. + */ + if (g_cPerThreadLoggers) + { + const RTNATIVETHREAD Self = RTThreadNativeSelf(); + int32_t i = RT_ELEMENTS(g_aPerThreadLoggers); + while (i-- > 0) + if (g_aPerThreadLoggers[i].NativeThread == Self) + return g_aPerThreadLoggers[i].pLogger; + } +# endif /* IN_RING0 */ + + return g_pLogger; +#endif +} + + +RTDECL(PRTLOGGER) RTLogGetDefaultInstance(void) +{ + return rtLogGetDefaultInstanceCommon(); +} +RT_EXPORT_SYMBOL(RTLogGetDefaultInstance); + + +RTDECL(PRTLOGGER) RTLogGetDefaultInstanceEx(uint32_t fFlagsAndGroup) +{ + PRTLOGGER pLogger = rtLogGetDefaultInstanceCommon(); + if (pLogger) + { + if (pLogger->fFlags & RTLOGFLAGS_DISABLED) + pLogger = NULL; + else + { + uint32_t const fFlags = RT_LO_U16(fFlagsAndGroup); + uint16_t const iGroup = RT_HI_U16(fFlagsAndGroup); + if ( iGroup != UINT16_MAX + && ( (pLogger->afGroups[iGroup < pLogger->cGroups ? iGroup : 0] & (fFlags | RTLOGGRPFLAGS_ENABLED)) + != (fFlags | RTLOGGRPFLAGS_ENABLED))) + pLogger = NULL; + } + } + return pLogger; +} +RT_EXPORT_SYMBOL(RTLogGetDefaultInstanceEx); + + +#ifndef IN_RC +/** + * Sets the default logger instance. + * + * @returns iprt status code. + * @param pLogger The new default logger instance. + */ +RTDECL(PRTLOGGER) RTLogSetDefaultInstance(PRTLOGGER pLogger) +{ + return ASMAtomicXchgPtrT(&g_pLogger, pLogger, PRTLOGGER); +} +RT_EXPORT_SYMBOL(RTLogSetDefaultInstance); +#endif /* !IN_RC */ + + +#ifdef IN_RING0 +/** + * Changes the default logger instance for the current thread. + * + * @returns IPRT status code. + * @param pLogger The logger instance. Pass NULL for deregistration. + * @param uKey Associated key for cleanup purposes. If pLogger is NULL, + * all instances with this key will be deregistered. So in + * order to only deregister the instance associated with the + * current thread use 0. + */ +RTDECL(int) RTLogSetDefaultInstanceThread(PRTLOGGER pLogger, uintptr_t uKey) +{ + int rc; + RTNATIVETHREAD Self = RTThreadNativeSelf(); + if (pLogger) + { + int32_t i; + unsigned j; + + AssertReturn(pLogger->u32Magic == RTLOGGER_MAGIC, VERR_INVALID_MAGIC); + + /* + * Iterate the table to see if there is already an entry for this thread. + */ + i = RT_ELEMENTS(g_aPerThreadLoggers); + while (i-- > 0) + if (g_aPerThreadLoggers[i].NativeThread == Self) + { + ASMAtomicWritePtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey); + g_aPerThreadLoggers[i].pLogger = pLogger; + return VINF_SUCCESS; + } + + /* + * Allocate a new table entry. + */ + i = ASMAtomicIncS32(&g_cPerThreadLoggers); + if (i > (int32_t)RT_ELEMENTS(g_aPerThreadLoggers)) + { + ASMAtomicDecS32(&g_cPerThreadLoggers); + return VERR_BUFFER_OVERFLOW; /* horrible error code! */ + } + + for (j = 0; j < 10; j++) + { + i = RT_ELEMENTS(g_aPerThreadLoggers); + while (i-- > 0) + { + AssertCompile(sizeof(RTNATIVETHREAD) == sizeof(void*)); + if ( g_aPerThreadLoggers[i].NativeThread == NIL_RTNATIVETHREAD + && ASMAtomicCmpXchgPtr((void * volatile *)&g_aPerThreadLoggers[i].NativeThread, (void *)Self, (void *)NIL_RTNATIVETHREAD)) + { + ASMAtomicWritePtr((void * volatile *)&g_aPerThreadLoggers[i].uKey, (void *)uKey); + ASMAtomicWritePtr(&g_aPerThreadLoggers[i].pLogger, pLogger); + return VINF_SUCCESS; + } + } + } + + ASMAtomicDecS32(&g_cPerThreadLoggers); + rc = VERR_INTERNAL_ERROR; + } + else + { + /* + * Search the array for the current thread. + */ + int32_t i = RT_ELEMENTS(g_aPerThreadLoggers); + while (i-- > 0) + if ( g_aPerThreadLoggers[i].NativeThread == Self + || g_aPerThreadLoggers[i].uKey == uKey) + { + ASMAtomicWriteNullPtr((void * volatile *)&g_aPerThreadLoggers[i].uKey); + ASMAtomicWriteNullPtr(&g_aPerThreadLoggers[i].pLogger); + ASMAtomicWriteHandle(&g_aPerThreadLoggers[i].NativeThread, NIL_RTNATIVETHREAD); + ASMAtomicDecS32(&g_cPerThreadLoggers); + } + + rc = VINF_SUCCESS; + } + return rc; +} +RT_EXPORT_SYMBOL(RTLogSetDefaultInstanceThread); +#endif /* IN_RING0 */ + + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerV(PRTLOGGER pLogger, const char *pszFormat, va_list args) +{ + RTLogLoggerExV(pLogger, 0, ~0U, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTLogLoggerV); + + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerExV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, va_list args) +{ + int rc; + + /* + * A NULL logger means default instance. + */ + if (!pLogger) + { + pLogger = RTLogDefaultInstance(); + if (!pLogger) + return; + } + + /* + * Validate and correct iGroup. + */ + if (iGroup != ~0U && iGroup >= pLogger->cGroups) + iGroup = 0; + + /* + * If no output, then just skip it. + */ + if ( (pLogger->fFlags & RTLOGFLAGS_DISABLED) +#ifndef IN_RC + || !pLogger->fDestFlags +#endif + || !pszFormat || !*pszFormat) + return; + if ( iGroup != ~0U + && (pLogger->afGroups[iGroup] & (fFlags | RTLOGGRPFLAGS_ENABLED)) != (fFlags | RTLOGGRPFLAGS_ENABLED)) + return; + + /* + * Acquire logger instance sem. + */ + rc = rtlogLock(pLogger); + if (RT_FAILURE(rc)) + { +#ifdef IN_RING0 + if (pLogger->fDestFlags & ~RTLOGDEST_FILE) + rtR0LogLoggerExFallback(pLogger->fDestFlags, pLogger->fFlags, pLogger->pInt, pszFormat, args); +#endif + return; + } + + /* + * Check restrictions and call worker. + */ +#ifndef IN_RC + if (RT_UNLIKELY( (pLogger->fFlags & RTLOGFLAGS_RESTRICT_GROUPS) + && iGroup < pLogger->cGroups + && (pLogger->afGroups[iGroup] & RTLOGGRPFLAGS_RESTRICT) + && ++pLogger->pInt->pacEntriesPerGroup[iGroup] >= pLogger->pInt->cMaxEntriesPerGroup )) + { + uint32_t cEntries = pLogger->pInt->pacEntriesPerGroup[iGroup]; + if (cEntries > pLogger->pInt->cMaxEntriesPerGroup) + pLogger->pInt->pacEntriesPerGroup[iGroup] = cEntries - 1; + else + { + rtlogLoggerExVLocked(pLogger, fFlags, iGroup, pszFormat, args); + if ( pLogger->pInt->papszGroups + && pLogger->pInt->papszGroups[iGroup]) + rtlogLoggerExFLocked(pLogger, fFlags, iGroup, "%u messages from group %s (#%u), muting it.\n", + cEntries, pLogger->pInt->papszGroups[iGroup], iGroup); + else + rtlogLoggerExFLocked(pLogger, fFlags, iGroup, "%u messages from group #%u, muting it.\n", + cEntries, iGroup); + } + } + else +#endif + rtlogLoggerExVLocked(pLogger, fFlags, iGroup, pszFormat, args); + + /* + * Release the semaphore. + */ + rtlogUnlock(pLogger); +} +RT_EXPORT_SYMBOL(RTLogLoggerExV); + + +#ifdef IN_RING0 +/** + * For rtR0LogLoggerExFallbackOutput and rtR0LogLoggerExFallbackFlush. + */ +typedef struct RTR0LOGLOGGERFALLBACK +{ + /** The current scratch buffer offset. */ + uint32_t offScratch; + /** The destination flags. */ + uint32_t fDestFlags; + /** For ring buffer output. */ + PRTLOGGERINTERNAL pInt; + /** The scratch buffer. */ + char achScratch[80]; +} RTR0LOGLOGGERFALLBACK; +/** Pointer to RTR0LOGLOGGERFALLBACK which is used by + * rtR0LogLoggerExFallbackOutput. */ +typedef RTR0LOGLOGGERFALLBACK *PRTR0LOGLOGGERFALLBACK; + + +/** + * Flushes the fallback buffer. + * + * @param pThis The scratch buffer. + */ +static void rtR0LogLoggerExFallbackFlush(PRTR0LOGLOGGERFALLBACK pThis) +{ + if (!pThis->offScratch) + return; + + if ( (pThis->fDestFlags & RTLOGDEST_RINGBUF) + && pThis->pInt + && pThis->pInt->pszRingBuf /* paranoia */) + rtLogRingBufWrite(pThis->pInt, pThis->achScratch, pThis->offScratch); + else + { + if (pThis->fDestFlags & RTLOGDEST_USER) + RTLogWriteUser(pThis->achScratch, pThis->offScratch); + + if (pThis->fDestFlags & RTLOGDEST_DEBUGGER) + RTLogWriteDebugger(pThis->achScratch, pThis->offScratch); + + if (pThis->fDestFlags & RTLOGDEST_STDOUT) + RTLogWriteStdOut(pThis->achScratch, pThis->offScratch); + + if (pThis->fDestFlags & RTLOGDEST_STDERR) + RTLogWriteStdErr(pThis->achScratch, pThis->offScratch); + +# ifndef LOG_NO_COM + if (pThis->fDestFlags & RTLOGDEST_COM) + RTLogWriteCom(pThis->achScratch, pThis->offScratch); +# endif + } + + /* empty the buffer. */ + pThis->offScratch = 0; +} + + +/** + * Callback for RTLogFormatV used by rtR0LogLoggerExFallback. + * See PFNLOGOUTPUT() for details. + */ +static DECLCALLBACK(size_t) rtR0LogLoggerExFallbackOutput(void *pv, const char *pachChars, size_t cbChars) +{ + PRTR0LOGLOGGERFALLBACK pThis = (PRTR0LOGLOGGERFALLBACK)pv; + if (cbChars) + { + size_t cbRet = 0; + for (;;) + { + /* how much */ + uint32_t cb = sizeof(pThis->achScratch) - pThis->offScratch - 1; /* minus 1 - for the string terminator. */ + if (cb > cbChars) + cb = (uint32_t)cbChars; + + /* copy */ + memcpy(&pThis->achScratch[pThis->offScratch], pachChars, cb); + + /* advance */ + pThis->offScratch += cb; + cbRet += cb; + cbChars -= cb; + + /* done? */ + if (cbChars <= 0) + return cbRet; + + pachChars += cb; + + /* flush */ + pThis->achScratch[pThis->offScratch] = '\0'; + rtR0LogLoggerExFallbackFlush(pThis); + } + + /* won't ever get here! */ + } + else + { + /* + * Termination call, flush the log. + */ + pThis->achScratch[pThis->offScratch] = '\0'; + rtR0LogLoggerExFallbackFlush(pThis); + return 0; + } +} + + +/** + * Ring-0 fallback for cases where we're unable to grab the lock. + * + * This will happen when we're at a too high IRQL on Windows for instance and + * needs to be dealt with or we'll drop a lot of log output. This fallback will + * only output to some of the log destinations as a few of them may be doing + * dangerous things. We won't be doing any prefixing here either, at least not + * for the present, because it's too much hassle. + * + * @param fDestFlags The destination flags. + * @param fFlags The logger flags. + * @param pInt The internal logger data, for ring buffer output. + * @param pszFormat The format string. + * @param va The format arguments. + */ +static void rtR0LogLoggerExFallback(uint32_t fDestFlags, uint32_t fFlags, PRTLOGGERINTERNAL pInt, + const char *pszFormat, va_list va) +{ + RTR0LOGLOGGERFALLBACK This; + This.fDestFlags = fDestFlags; + This.pInt = pInt; + + /* fallback indicator. */ + This.offScratch = 2; + This.achScratch[0] = '['; + This.achScratch[1] = 'F'; + + /* selected prefixes */ + if (fFlags & RTLOGFLAGS_PREFIX_PID) + { + RTPROCESS Process = RTProcSelf(); + This.achScratch[This.offScratch++] = ' '; + This.offScratch += RTStrFormatNumber(&This.achScratch[This.offScratch], Process, 16, sizeof(RTPROCESS) * 2, 0, RTSTR_F_ZEROPAD); + } + if (fFlags & RTLOGFLAGS_PREFIX_TID) + { + RTNATIVETHREAD Thread = RTThreadNativeSelf(); + This.achScratch[This.offScratch++] = ' '; + This.offScratch += RTStrFormatNumber(&This.achScratch[This.offScratch], Thread, 16, sizeof(RTNATIVETHREAD) * 2, 0, RTSTR_F_ZEROPAD); + } + + This.achScratch[This.offScratch++] = ']'; + This.achScratch[This.offScratch++] = ' '; + + RTLogFormatV(rtR0LogLoggerExFallbackOutput, &This, pszFormat, va); +} +#endif /* IN_RING0 */ + + +/** + * vprintf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param va Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va) +{ + RTLogLoggerV(NULL, pszFormat, va); +} +RT_EXPORT_SYMBOL(RTLogPrintfV); + + +/** + * Dumper vprintf-like function outputting to a logger. + * + * @param pvUser Pointer to the logger instance to use, NULL for + * default instance. + * @param pszFormat Format string. + * @param va Format arguments. + */ +RTDECL(void) RTLogDumpPrintfV(void *pvUser, const char *pszFormat, va_list va) +{ + RTLogLoggerV((PRTLOGGER)pvUser, pszFormat, va); +} +RT_EXPORT_SYMBOL(RTLogDumpPrintfV); + + +#ifdef IN_RING3 + +/** + * Opens/creates the log file. + * + * @param pLogger The logger instance to update. NULL is not allowed! + * @param pErrInfo Where to return extended error information. + * Optional. + */ +static int rtlogFileOpen(PRTLOGGER pLogger, PRTERRINFO pErrInfo) +{ + uint32_t fOpen = RTFILE_O_WRITE | RTFILE_O_DENY_NONE; + if (pLogger->fFlags & RTLOGFLAGS_APPEND) + fOpen |= RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND; + else + fOpen |= RTFILE_O_CREATE_REPLACE; + if (pLogger->fFlags & RTLOGFLAGS_WRITE_THROUGH) + fOpen |= RTFILE_O_WRITE_THROUGH; + if (pLogger->fDestFlags & RTLOGDEST_F_NO_DENY) + fOpen = (fOpen & ~RTFILE_O_DENY_NONE) | RTFILE_O_DENY_NOT_DELETE; + + unsigned cBackoff = 0; + int rc = RTFileOpen(&pLogger->pInt->hFile, pLogger->pInt->szFilename, fOpen); + while ( rc == VERR_SHARING_VIOLATION + && cBackoff < RT_ELEMENTS(g_acMsLogBackoff)) + { + RTThreadSleep(g_acMsLogBackoff[cBackoff++]); + rc = RTFileOpen(&pLogger->pInt->hFile, pLogger->pInt->szFilename, fOpen); + } + if (RT_SUCCESS(rc)) + { + rc = RTFileGetSize(pLogger->pInt->hFile, &pLogger->pInt->cbHistoryFileWritten); + if (RT_FAILURE(rc)) + { + /* Don't complain if this fails, assume the file is empty. */ + pLogger->pInt->cbHistoryFileWritten = 0; + rc = VINF_SUCCESS; + } + } + else + { + pLogger->pInt->hFile = NIL_RTFILE; + RTErrInfoSetF(pErrInfo, rc, N_("could not open file '%s' (fOpen=%#x)"), pLogger->pInt->szFilename, fOpen); + } + return rc; +} + + +/** + * Closes, rotates and opens the log files if necessary. + * + * Used by the rtlogFlush() function as well as RTLogCreateExV. + * + * @param pLogger The logger instance to update. NULL is not allowed! + * @param uTimeSlot Current time slot (for tikme based rotation). + * @param fFirst Flag whether this is the beginning of logging, i.e. + * called from RTLogCreateExV. Prevents pfnPhase from + * being called. + * @param pErrInfo Where to return extended error information. Optional. + */ +static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst, PRTERRINFO pErrInfo) +{ + /* Suppress rotating empty log files simply because the time elapsed. */ + if (RT_UNLIKELY(!pLogger->pInt->cbHistoryFileWritten)) + pLogger->pInt->uHistoryTimeSlotStart = uTimeSlot; + + /* Check rotation condition: file still small enough and not too old? */ + if (RT_LIKELY( pLogger->pInt->cbHistoryFileWritten < pLogger->pInt->cbHistoryFileMax + && uTimeSlot == pLogger->pInt->uHistoryTimeSlotStart)) + return; + + /* + * Save "disabled" log flag and make sure logging is disabled. + * The logging in the functions called during log file history + * rotation would cause severe trouble otherwise. + */ + uint32_t const fSavedFlags = pLogger->fFlags; + pLogger->fFlags |= RTLOGFLAGS_DISABLED; + + /* + * Disable log rotation temporarily, otherwise with extreme settings and + * chatty phase logging we could run into endless rotation. + */ + uint32_t const cSavedHistory = pLogger->pInt->cHistory; + pLogger->pInt->cHistory = 0; + + /* + * Close the old log file. + */ + if (pLogger->pInt->hFile != NIL_RTFILE) + { + /* Use the callback to generate some final log contents, but only if + * this is a rotation with a fully set up logger. Leave the other case + * to the RTLogCreateExV function. */ + if (pLogger->pInt->pfnPhase && !fFirst) + { + uint32_t fODestFlags = pLogger->fDestFlags; + pLogger->fDestFlags &= RTLOGDEST_FILE; + pLogger->pInt->pfnPhase(pLogger, RTLOGPHASE_PREROTATE, rtlogPhaseMsgLocked); + pLogger->fDestFlags = fODestFlags; + } + RTFileClose(pLogger->pInt->hFile); + pLogger->pInt->hFile = NIL_RTFILE; + } + + if (cSavedHistory) + { + /* + * Rotate the log files. + */ + for (uint32_t i = cSavedHistory - 1; i + 1 > 0; i--) + { + char szOldName[sizeof(pLogger->pInt->szFilename) + 32]; + if (i > 0) + RTStrPrintf(szOldName, sizeof(szOldName), "%s.%u", pLogger->pInt->szFilename, i); + else + RTStrCopy(szOldName, sizeof(szOldName), pLogger->pInt->szFilename); + + char szNewName[sizeof(pLogger->pInt->szFilename) + 32]; + RTStrPrintf(szNewName, sizeof(szNewName), "%s.%u", pLogger->pInt->szFilename, i + 1); + + unsigned cBackoff = 0; + int rc = RTFileRename(szOldName, szNewName, RTFILEMOVE_FLAGS_REPLACE); + while ( rc == VERR_SHARING_VIOLATION + && cBackoff < RT_ELEMENTS(g_acMsLogBackoff)) + { + RTThreadSleep(g_acMsLogBackoff[cBackoff++]); + rc = RTFileRename(szOldName, szNewName, RTFILEMOVE_FLAGS_REPLACE); + } + + if (rc == VERR_FILE_NOT_FOUND) + RTFileDelete(szNewName); + } + + /* + * Delete excess log files. + */ + for (uint32_t i = cSavedHistory + 1; ; i++) + { + char szExcessName[sizeof(pLogger->pInt->szFilename) + 32]; + RTStrPrintf(szExcessName, sizeof(szExcessName), "%s.%u", pLogger->pInt->szFilename, i); + int rc = RTFileDelete(szExcessName); + if (RT_FAILURE(rc)) + break; + } + } + + /* + * Update logger state and create new log file. + */ + pLogger->pInt->cbHistoryFileWritten = 0; + pLogger->pInt->uHistoryTimeSlotStart = uTimeSlot; + rtlogFileOpen(pLogger, pErrInfo); + + /* + * Use the callback to generate some initial log contents, but only if this + * is a rotation with a fully set up logger. Leave the other case to the + * RTLogCreateExV function. + */ + if (pLogger->pInt->pfnPhase && !fFirst) + { + uint32_t const fSavedDestFlags = pLogger->fDestFlags; + pLogger->fDestFlags &= RTLOGDEST_FILE; + pLogger->pInt->pfnPhase(pLogger, RTLOGPHASE_POSTROTATE, rtlogPhaseMsgLocked); + pLogger->fDestFlags = fSavedDestFlags; + } + + /* Restore saved values. */ + pLogger->pInt->cHistory = cSavedHistory; + pLogger->fFlags = fSavedFlags; +} + + +/** + * Worker for RTLogCreateExV and RTLogClearFileDelayFlag. + * + * This will later be used to reopen the file by RTLogDestinations. + * + * @returns IPRT status code. + * @param pLogger The logger. + * @param pErrInfo Where to return extended error information. + * Optional. + */ +static int rtR3LogOpenFileDestination(PRTLOGGER pLogger, PRTERRINFO pErrInfo) +{ + int rc; + if (pLogger->fFlags & RTLOGFLAGS_APPEND) + { + rc = rtlogFileOpen(pLogger, pErrInfo); + + /* Rotate in case of appending to a too big log file, + otherwise this simply doesn't do anything. */ + rtlogRotate(pLogger, 0, true /* fFirst */, pErrInfo); + } + else + { + /* Force rotation if it is configured. */ + pLogger->pInt->cbHistoryFileWritten = UINT64_MAX; + rtlogRotate(pLogger, 0, true /* fFirst */, pErrInfo); + + /* If the file is not open then rotation is not set up. */ + if (pLogger->pInt->hFile == NIL_RTFILE) + { + pLogger->pInt->cbHistoryFileWritten = 0; + rc = rtlogFileOpen(pLogger, pErrInfo); + } + else + rc = VINF_SUCCESS; + } + return rc; +} + +#endif /* IN_RING3 */ + + +/** + * Writes the buffer to the given log device without checking for buffered + * data or anything. + * + * Used by the RTLogFlush() function. + * + * @param pLogger The logger instance to write to. NULL is not allowed! + * @param fNeedSpace Set if the caller assumes space will be made available. + */ +static void rtlogFlush(PRTLOGGER pLogger, bool fNeedSpace) +{ + uint32_t const cchScratch = pLogger->offScratch; + if (cchScratch == 0) + return; /* nothing to flush. */ + NOREF(fNeedSpace); + +#ifndef IN_RC + /* + * If the ring buffer is active, the other destinations are only written + * to when the ring buffer is flushed by RTLogFlush(). + */ + if ( (pLogger->fDestFlags & RTLOGDEST_RINGBUF) + && pLogger->pInt + && pLogger->pInt->pszRingBuf /* paraoia */) + { + rtLogRingBufWrite(pLogger->pInt, pLogger->achScratch, pLogger->offScratch); + pLogger->offScratch = 0; /* empty the buffer. */ + } + /* + * In file delay mode, we ignore flush requests except when we're full + * and the caller really needs some scratch space to get work done. + */ + else +# ifdef IN_RING3 + if (!(pLogger->fDestFlags & RTLOGDEST_F_DELAY_FILE)) +# endif +#endif + { + /* Make sure the string is terminated. On Windows, RTLogWriteDebugger + will get upset if it isn't. */ + if (RT_LIKELY(cchScratch < sizeof(pLogger->achScratch))) + pLogger->achScratch[cchScratch] = '\0'; + else + AssertFailed(); + +#ifndef IN_RC + if (pLogger->fDestFlags & RTLOGDEST_USER) + RTLogWriteUser(pLogger->achScratch, cchScratch); + + if (pLogger->fDestFlags & RTLOGDEST_DEBUGGER) + RTLogWriteDebugger(pLogger->achScratch, cchScratch); + +# ifdef IN_RING3 + if ((pLogger->fDestFlags & (RTLOGDEST_FILE | RTLOGDEST_RINGBUF)) == RTLOGDEST_FILE) + { + if (pLogger->pInt->hFile != NIL_RTFILE) + { + RTFileWrite(pLogger->pInt->hFile, pLogger->achScratch, cchScratch, NULL); + if (pLogger->fFlags & RTLOGFLAGS_FLUSH) + RTFileFlush(pLogger->pInt->hFile); + } + if (pLogger->pInt->cHistory) + pLogger->pInt->cbHistoryFileWritten += cchScratch; + } +# endif + + if (pLogger->fDestFlags & RTLOGDEST_STDOUT) + RTLogWriteStdOut(pLogger->achScratch, cchScratch); + + if (pLogger->fDestFlags & RTLOGDEST_STDERR) + RTLogWriteStdErr(pLogger->achScratch, cchScratch); + +# if (defined(IN_RING0) || defined(IN_RC)) && !defined(LOG_NO_COM) + if (pLogger->fDestFlags & RTLOGDEST_COM) + RTLogWriteCom(pLogger->achScratch, cchScratch); +# endif +#endif /* !IN_RC */ + +#ifdef IN_RC + if (pLogger->pfnFlush) + pLogger->pfnFlush(pLogger); +#else + if (pLogger->pInt->pfnFlush) + pLogger->pInt->pfnFlush(pLogger); +#endif + + /* empty the buffer. */ + pLogger->offScratch = 0; + +#ifdef IN_RING3 + /* + * Rotate the log file if configured. Must be done after everything is + * flushed, since this will also use logging/flushing to write the header + * and footer messages. + */ + if ( (pLogger->fDestFlags & RTLOGDEST_FILE) + && pLogger->pInt->cHistory) + rtlogRotate(pLogger, RTTimeProgramSecTS() / pLogger->pInt->cSecsHistoryTimeSlot, false /*fFirst*/, NULL /*pErrInfo*/); +#endif + } +#ifdef IN_RING3 + else + { + /* + * Delay file open but the caller really need some space. So, give him half a + * buffer and insert a message indicating that we've dropped output. + */ + uint32_t offHalf = sizeof(pLogger->achScratch) / 2; + if (cchScratch > offHalf) + { + if (pLogger->fFlags & RTLOGFLAGS_USECRLF) + pLogger->achScratch[offHalf++] = '\r'; + static const char s_szDropMsg[] = "\n[DROP DROP DROP]"; + memcpy(&pLogger->achScratch[offHalf], RT_STR_TUPLE(s_szDropMsg)); + offHalf += sizeof(s_szDropMsg) - 1; + if (pLogger->fFlags & RTLOGFLAGS_USECRLF) + pLogger->achScratch[offHalf++] = '\r'; + pLogger->achScratch[offHalf++] = '\n'; + + pLogger->offScratch = offHalf; + } + } +#endif +} + + +/** + * Callback for RTLogFormatV which writes to the com port. + * See PFNLOGOUTPUT() for details. + */ +static DECLCALLBACK(size_t) rtLogOutput(void *pv, const char *pachChars, size_t cbChars) +{ + PRTLOGGER pLogger = (PRTLOGGER)pv; + if (cbChars) + { + size_t cbRet = 0; + for (;;) + { +#if defined(DEBUG) && defined(IN_RING3) + /* sanity */ + if (pLogger->offScratch >= sizeof(pLogger->achScratch)) + { + fprintf(stderr, "pLogger->offScratch >= sizeof(pLogger->achScratch) (%#x >= %#x)\n", + pLogger->offScratch, (unsigned)sizeof(pLogger->achScratch)); + AssertBreakpoint(); AssertBreakpoint(); + } +#endif + + /* how much */ + size_t cb = sizeof(pLogger->achScratch) - pLogger->offScratch - 1; + if (cb > cbChars) + cb = cbChars; + + /* copy */ + memcpy(&pLogger->achScratch[pLogger->offScratch], pachChars, cb); + + /* advance */ + pLogger->offScratch += (uint32_t)cb; + cbRet += cb; + cbChars -= cb; + + /* done? */ + if (cbChars <= 0) + return cbRet; + + pachChars += cb; + + /* flush */ + rtlogFlush(pLogger, true /*fNeedSpace*/); + } + + /* won't ever get here! */ + } + else + { + /* + * Termination call. + * There's always space for a terminator, and it's not counted. + */ + pLogger->achScratch[pLogger->offScratch] = '\0'; + return 0; + } +} + + +/** + * stpncpy implementation for use in rtLogOutputPrefixed w/ padding. + * + * @returns Pointer to the destination buffer byte following the copied string. + * @param pszDst The destination buffer. + * @param pszSrc The source string. + * @param cchSrcMax The maximum number of characters to copy from + * the string. + * @param cchMinWidth The minimum field with, padd with spaces to + * reach this. + */ +DECLINLINE(char *) rtLogStPNCpyPad(char *pszDst, const char *pszSrc, size_t cchSrcMax, size_t cchMinWidth) +{ + size_t cchSrc = 0; + if (pszSrc) + { + cchSrc = strlen(pszSrc); + if (cchSrc > cchSrcMax) + cchSrc = cchSrcMax; + + memcpy(pszDst, pszSrc, cchSrc); + pszDst += cchSrc; + } + do + *pszDst++ = ' '; + while (cchSrc++ < cchMinWidth); + + return pszDst; +} + + + +/** + * Callback for RTLogFormatV which writes to the logger instance. + * This version supports prefixes. + * + * See PFNLOGOUTPUT() for details. + */ +static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars, size_t cbChars) +{ + PRTLOGOUTPUTPREFIXEDARGS pArgs = (PRTLOGOUTPUTPREFIXEDARGS)pv; + PRTLOGGER pLogger = pArgs->pLogger; + if (cbChars) + { + size_t cbRet = 0; + for (;;) + { + uint32_t offScratch = pLogger->offScratch; + size_t cb = sizeof(pLogger->achScratch) - offScratch - 1; + const char *pszNewLine; + char *psz; +#ifdef IN_RC + bool *pfPendingPrefix = &pLogger->fPendingPrefix; +#else + bool *pfPendingPrefix = &pLogger->pInt->fPendingPrefix; +#endif + + /* + * Pending prefix? + */ + if (*pfPendingPrefix) + { + *pfPendingPrefix = false; + +#if defined(DEBUG) && defined(IN_RING3) + /* sanity */ + if (offScratch >= sizeof(pLogger->achScratch)) + { + fprintf(stderr, "offScratch >= sizeof(pLogger->achScratch) (%#x >= %#x)\n", + offScratch, (unsigned)sizeof(pLogger->achScratch)); + AssertBreakpoint(); AssertBreakpoint(); + } +#endif + + /* + * Flush the buffer if there isn't enough room for the maximum prefix config. + * Max is 256, add a couple of extra bytes. See CCH_PREFIX check way below. + */ + if (cb < 256 + 16) + { + rtlogFlush(pLogger, true /*fNeedSpace*/); + offScratch = pLogger->offScratch; + cb = sizeof(pLogger->achScratch) - offScratch - 1; + } + + /* + * Write the prefixes. + * psz is pointing to the current position. + */ + psz = &pLogger->achScratch[offScratch]; + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_TS) + { + uint64_t u64 = RTTimeNanoTS(); + int iBase = 16; + unsigned int fFlags = RTSTR_F_ZEROPAD; + if (pLogger->fFlags & RTLOGFLAGS_DECIMAL_TS) + { + iBase = 10; + fFlags = 0; + } + if (pLogger->fFlags & RTLOGFLAGS_REL_TS) + { + static volatile uint64_t s_u64LastTs; + uint64_t u64DiffTs = u64 - s_u64LastTs; + s_u64LastTs = u64; + /* We could have been preempted just before reading of s_u64LastTs by + * another thread which wrote s_u64LastTs. In that case the difference + * is negative which we simply ignore. */ + u64 = (int64_t)u64DiffTs < 0 ? 0 : u64DiffTs; + } + /* 1E15 nanoseconds = 11 days */ + psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, fFlags); + *psz++ = ' '; + } +#define CCH_PREFIX_01 0 + 17 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_TSC) + { +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + uint64_t u64 = ASMReadTSC(); +#else + uint64_t u64 = RTTimeNanoTS(); +#endif + int iBase = 16; + unsigned int fFlags = RTSTR_F_ZEROPAD; + if (pLogger->fFlags & RTLOGFLAGS_DECIMAL_TS) + { + iBase = 10; + fFlags = 0; + } + if (pLogger->fFlags & RTLOGFLAGS_REL_TS) + { + static volatile uint64_t s_u64LastTsc; + int64_t i64DiffTsc = u64 - s_u64LastTsc; + s_u64LastTsc = u64; + /* We could have been preempted just before reading of s_u64LastTsc by + * another thread which wrote s_u64LastTsc. In that case the difference + * is negative which we simply ignore. */ + u64 = i64DiffTsc < 0 ? 0 : i64DiffTsc; + } + /* 1E15 ticks at 4GHz = 69 hours */ + psz += RTStrFormatNumber(psz, u64, iBase, 16, 0, fFlags); + *psz++ = ' '; + } +#define CCH_PREFIX_02 CCH_PREFIX_01 + 17 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_MS_PROG) + { +#if defined(IN_RING3) || defined(IN_RC) + uint64_t u64 = RTTimeProgramMilliTS(); +#else + uint64_t u64 = 0; +#endif + /* 1E8 milliseconds = 27 hours */ + psz += RTStrFormatNumber(psz, u64, 10, 9, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } +#define CCH_PREFIX_03 CCH_PREFIX_02 + 21 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_TIME) + { +#if defined(IN_RING3) || defined(IN_RING0) + RTTIMESPEC TimeSpec; + RTTIME Time; + RTTimeExplode(&Time, RTTimeNow(&TimeSpec)); + psz += RTStrFormatNumber(psz, Time.u8Hour, 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ':'; + psz += RTStrFormatNumber(psz, Time.u8Minute, 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ':'; + psz += RTStrFormatNumber(psz, Time.u8Second, 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = '.'; + psz += RTStrFormatNumber(psz, Time.u32Nanosecond / 1000, 10, 6, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; +#else + memset(psz, ' ', 16); + psz += 16; +#endif + } +#define CCH_PREFIX_04 CCH_PREFIX_03 + (3+1+3+1+3+1+7+1) + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_TIME_PROG) + { + +#if defined(IN_RING3) || defined(IN_RC) + uint64_t u64 = RTTimeProgramMicroTS(); + psz += RTStrFormatNumber(psz, (uint32_t)(u64 / RT_US_1HOUR), 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ':'; + uint32_t u32 = (uint32_t)(u64 % RT_US_1HOUR); + psz += RTStrFormatNumber(psz, u32 / RT_US_1MIN, 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ':'; + u32 %= RT_US_1MIN; + + psz += RTStrFormatNumber(psz, u32 / RT_US_1SEC, 10, 2, 0, RTSTR_F_ZEROPAD); + *psz++ = '.'; + psz += RTStrFormatNumber(psz, u32 % RT_US_1SEC, 10, 6, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; +#else + memset(psz, ' ', 16); + psz += 16; +#endif + } +#define CCH_PREFIX_05 CCH_PREFIX_04 + (9+1+2+1+2+1+6+1) + +# if 0 + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_DATETIME) + { + char szDate[32]; + RTTIMESPEC Time; + RTTimeSpecToString(RTTimeNow(&Time), szDate, sizeof(szDate)); + size_t cch = strlen(szDate); + memcpy(psz, szDate, cch); + psz += cch; + *psz++ = ' '; + } +# define CCH_PREFIX_06 CCH_PREFIX_05 + 32 +# else +# define CCH_PREFIX_06 CCH_PREFIX_05 + 0 +# endif + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_PID) + { +#ifndef IN_RC + RTPROCESS Process = RTProcSelf(); +#else + RTPROCESS Process = NIL_RTPROCESS; +#endif + psz += RTStrFormatNumber(psz, Process, 16, sizeof(RTPROCESS) * 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } +#define CCH_PREFIX_07 CCH_PREFIX_06 + 9 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_TID) + { +#ifndef IN_RC + RTNATIVETHREAD Thread = RTThreadNativeSelf(); +#else + RTNATIVETHREAD Thread = NIL_RTNATIVETHREAD; +#endif + psz += RTStrFormatNumber(psz, Thread, 16, sizeof(RTNATIVETHREAD) * 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } +#define CCH_PREFIX_08 CCH_PREFIX_07 + 17 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_THREAD) + { +#ifdef IN_RING3 + const char *pszName = RTThreadSelfName(); +#elif defined IN_RC + const char *pszName = "EMT-RC"; +#else + const char *pszName = "R0"; +#endif + psz = rtLogStPNCpyPad(psz, pszName, 16, 8); + } +#define CCH_PREFIX_09 CCH_PREFIX_08 + 17 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_CPUID) + { +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + const uint8_t idCpu = ASMGetApicId(); +#else + const RTCPUID idCpu = RTMpCpuId(); +#endif + psz += RTStrFormatNumber(psz, idCpu, 16, sizeof(idCpu) * 2, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } +#define CCH_PREFIX_10 CCH_PREFIX_09 + 17 + +#ifndef IN_RC + if ( (pLogger->fFlags & RTLOGFLAGS_PREFIX_CUSTOM) + && pLogger->pInt->pfnPrefix) + { + psz += pLogger->pInt->pfnPrefix(pLogger, psz, 31, pLogger->pInt->pvPrefixUserArg); + *psz++ = ' '; /* +32 */ + } +#endif +#define CCH_PREFIX_11 CCH_PREFIX_10 + 32 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_LOCK_COUNTS) + { +#ifdef IN_RING3 /** @todo implement these counters in ring-0 too? */ + RTTHREAD Thread = RTThreadSelf(); + if (Thread != NIL_RTTHREAD) + { + uint32_t cReadLocks = RTLockValidatorReadLockGetCount(Thread); + uint32_t cWriteLocks = RTLockValidatorWriteLockGetCount(Thread) - g_cLoggerLockCount; + cReadLocks = RT_MIN(0xfff, cReadLocks); + cWriteLocks = RT_MIN(0xfff, cWriteLocks); + psz += RTStrFormatNumber(psz, cReadLocks, 16, 1, 0, RTSTR_F_ZEROPAD); + *psz++ = '/'; + psz += RTStrFormatNumber(psz, cWriteLocks, 16, 1, 0, RTSTR_F_ZEROPAD); + } + else +#endif + { + *psz++ = '?'; + *psz++ = '/'; + *psz++ = '?'; + } + *psz++ = ' '; + } +#define CCH_PREFIX_12 CCH_PREFIX_11 + 8 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_FLAG_NO) + { + psz += RTStrFormatNumber(psz, pArgs->fFlags, 16, 8, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } +#define CCH_PREFIX_13 CCH_PREFIX_12 + 9 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_FLAG) + { +#ifdef IN_RING3 + const char *pszGroup = pArgs->iGroup != ~0U ? pLogger->pInt->papszGroups[pArgs->iGroup] : NULL; +#else + const char *pszGroup = NULL; +#endif + psz = rtLogStPNCpyPad(psz, pszGroup, 16, 8); + } +#define CCH_PREFIX_14 CCH_PREFIX_13 + 17 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_GROUP_NO) + { + if (pArgs->iGroup != ~0U) + { + psz += RTStrFormatNumber(psz, pArgs->iGroup, 16, 3, 0, RTSTR_F_ZEROPAD); + *psz++ = ' '; + } + else + { + memcpy(psz, "-1 ", sizeof("-1 ") - 1); + psz += sizeof("-1 ") - 1; + } /* +9 */ + } +#define CCH_PREFIX_15 CCH_PREFIX_14 + 9 + + if (pLogger->fFlags & RTLOGFLAGS_PREFIX_GROUP) + { + const unsigned fGrp = pLogger->afGroups[pArgs->iGroup != ~0U ? pArgs->iGroup : 0]; + const char *pszGroup; + size_t cch; + switch (pArgs->fFlags & fGrp) + { + case 0: pszGroup = "--------"; cch = sizeof("--------") - 1; break; + case RTLOGGRPFLAGS_ENABLED: pszGroup = "enabled" ; cch = sizeof("enabled" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_1: pszGroup = "level 1" ; cch = sizeof("level 1" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_2: pszGroup = "level 2" ; cch = sizeof("level 2" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_3: pszGroup = "level 3" ; cch = sizeof("level 3" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_4: pszGroup = "level 4" ; cch = sizeof("level 4" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_5: pszGroup = "level 5" ; cch = sizeof("level 5" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_6: pszGroup = "level 6" ; cch = sizeof("level 6" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_7: pszGroup = "level 7" ; cch = sizeof("level 7" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_8: pszGroup = "level 8" ; cch = sizeof("level 8" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_9: pszGroup = "level 9" ; cch = sizeof("level 9" ) - 1; break; + case RTLOGGRPFLAGS_LEVEL_10: pszGroup = "level 10"; cch = sizeof("level 10") - 1; break; + case RTLOGGRPFLAGS_LEVEL_11: pszGroup = "level 11"; cch = sizeof("level 11") - 1; break; + case RTLOGGRPFLAGS_LEVEL_12: pszGroup = "level 12"; cch = sizeof("level 12") - 1; break; + case RTLOGGRPFLAGS_FLOW: pszGroup = "flow" ; cch = sizeof("flow" ) - 1; break; + case RTLOGGRPFLAGS_WARN: pszGroup = "warn" ; cch = sizeof("warn" ) - 1; break; + default: pszGroup = "????????"; cch = sizeof("????????") - 1; break; + } + psz = rtLogStPNCpyPad(psz, pszGroup, 16, 8); + } +#define CCH_PREFIX_16 CCH_PREFIX_15 + 17 + +#define CCH_PREFIX ( CCH_PREFIX_16 ) + { AssertCompile(CCH_PREFIX < 256); } + + /* + * Done, figure what we've used and advance the buffer and free size. + */ + cb = psz - &pLogger->achScratch[offScratch]; + AssertMsg(cb <= 223, ("%#zx (%zd) - fFlags=%#x\n", cb, cb, pLogger->fFlags)); + pLogger->offScratch = offScratch += (uint32_t)cb; + cb = sizeof(pLogger->achScratch) - offScratch - 1; + } + else if (cb <= 0) + { + rtlogFlush(pLogger, true /*fNeedSpace*/); + offScratch = pLogger->offScratch; + cb = sizeof(pLogger->achScratch) - offScratch - 1; + } + +#if defined(DEBUG) && defined(IN_RING3) + /* sanity */ + if (offScratch >= sizeof(pLogger->achScratch)) + { + fprintf(stderr, "offScratch >= sizeof(pLogger->achScratch) (%#x >= %#x)\n", + offScratch, (unsigned)sizeof(pLogger->achScratch)); + AssertBreakpoint(); AssertBreakpoint(); + } +#endif + + /* how much */ + if (cb > cbChars) + cb = cbChars; + + /* have newline? */ + pszNewLine = (const char *)memchr(pachChars, '\n', cb); + if (pszNewLine) + { + if (pLogger->fFlags & RTLOGFLAGS_USECRLF) + cb = pszNewLine - pachChars; + else + { + cb = pszNewLine - pachChars + 1; + *pfPendingPrefix = true; + } + } + + /* copy */ + memcpy(&pLogger->achScratch[offScratch], pachChars, cb); + + /* advance */ + pLogger->offScratch = offScratch += (uint32_t)cb; + cbRet += cb; + cbChars -= cb; + + if ( pszNewLine + && (pLogger->fFlags & RTLOGFLAGS_USECRLF) + && offScratch + 2 < sizeof(pLogger->achScratch)) + { + memcpy(&pLogger->achScratch[offScratch], "\r\n", 2); + pLogger->offScratch = offScratch += 2; + cbRet++; + cbChars--; + cb++; + *pfPendingPrefix = true; + } + + /* done? */ + if (cbChars <= 0) + return cbRet; + pachChars += cb; + } + + /* won't ever get here! */ + } + else + { + /* + * Termination call. + * There's always space for a terminator, and it's not counted. + */ + pLogger->achScratch[pLogger->offScratch] = '\0'; + return 0; + } +} + + +/** + * Write to a logger instance (worker function). + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. Must be non-NULL. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +static void rtlogLoggerExVLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, va_list args) +{ + /* + * Format the message and perhaps flush it. + */ + if (pLogger->fFlags & (RTLOGFLAGS_PREFIX_MASK | RTLOGFLAGS_USECRLF)) + { + RTLOGOUTPUTPREFIXEDARGS OutputArgs; + OutputArgs.pLogger = pLogger; + OutputArgs.iGroup = iGroup; + OutputArgs.fFlags = fFlags; + RTLogFormatV(rtLogOutputPrefixed, &OutputArgs, pszFormat, args); + } + else + RTLogFormatV(rtLogOutput, pLogger, pszFormat, args); + if ( !(pLogger->fFlags & RTLOGFLAGS_BUFFERED) + && pLogger->offScratch) + rtlogFlush(pLogger, false /*fNeedSpace*/); +} + + +#ifndef IN_RC +/** + * For calling rtlogLoggerExVLocked. + * + * @param pLogger The logger. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + */ +static void rtlogLoggerExFLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + rtlogLoggerExVLocked(pLogger, fFlags, iGroup, pszFormat, va); + va_end(va); +} +#endif /* !IN_RC */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/logcom.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/logcom.c @@ -0,0 +1,146 @@ +/* $Id: logcom.cpp $ */ +/** @file + * IPRT - Logging to Serial Port. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#ifndef IPRT_UART_BASE +/** The port address of the COM port to log to. + * + * To override the default (COM1) append IPRT_UART_BASE=0xWXYZ to DEFS in your + * LocalConfig.kmk. Alternatively you can edit this file, but the don't forget + * to also update the default found in VBox/asmdefs.h. + * + * Standard port assignments are: COM1=0x3f8, COM2=0x2f8, COM3=0x3e8, COM4=0x2e8. + */ +# define IPRT_UART_BASE 0x3f8 +#endif + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) /** @todo consider fixing the config instead. */ +# include +#endif +#include +#include + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static DECLCALLBACK(size_t) rtLogComOutput(void *pv, const char *pachChars, size_t cbChars); + + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintf(const char *pszFormat, ...) +{ + va_list args; + size_t cb; + va_start(args, pszFormat); + cb = RTLogComPrintfV(pszFormat, args); + va_end(args); + + return cb; +} +RT_EXPORT_SYMBOL(RTLogComPrintf); + + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param args Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintfV(const char *pszFormat, va_list args) +{ + return RTLogFormatV(rtLogComOutput, NULL, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTLogComPrintfV); + + +/** + * Callback for RTLogFormatV which writes to the com port. + * See PFNLOGOUTPUT() for details. + */ +static DECLCALLBACK(size_t) rtLogComOutput(void *pv, const char *pachChars, size_t cbChars) +{ + NOREF(pv); + if (cbChars) + RTLogWriteCom(pachChars, cbChars); + return cbChars; +} + + +/** + * Write log buffer to COM port. + * + * @param pach Pointer to the buffer to write. + * @param cb Number of bytes to write. + */ +RTDECL(void) RTLogWriteCom(const char *pach, size_t cb) +{ +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + const uint8_t *pu8; + for (pu8 = (const uint8_t *)pach; cb-- > 0; pu8++) + { + register unsigned cMaxWait; + register uint8_t u8; + + /* expand \n -> \r\n */ + if (*pu8 == '\n') + RTLogWriteCom("\r", 1); + + /* Check if port is ready. */ + cMaxWait = ~0U; + do + { + u8 = ASMInU8(IPRT_UART_BASE + 5); + cMaxWait--; + } while (!(u8 & 0x20) && u8 != 0xff && cMaxWait); + + /* write */ + ASMOutU8(IPRT_UART_BASE, *pu8); + } +#else + /* PORTME? */ +#endif +} +RT_EXPORT_SYMBOL(RTLogWriteCom); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/logellipsis.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/logellipsis.c @@ -0,0 +1,105 @@ +/* $Id: logellipsis.cpp $ */ +/** @file + * Runtime VBox - Logger, the ellipsis variants. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include + + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pvCallerRet Ignored. + * @param pszFormat Format string. + * @param ... Format arguments. + */ +RTDECL(void) RTLogLogger(PRTLOGGER pLogger, void *pvCallerRet, const char *pszFormat, ...) +{ + va_list args; + va_start(args, pszFormat); +#if defined(RT_OS_DARWIN) && defined(RT_ARCH_X86) && defined(IN_RING3) + /* manually align the stack before doing the call. + * We boldly assume that there is a stack frame here! */ + __asm__ __volatile__("andl $-32, %%esp\t\n" ::: "%esp"); + RTLogLoggerExV(pLogger, 0, ~0U, pszFormat, args); +#else + RTLogLoggerExV(pLogger, 0, ~0U, pszFormat, args); +#endif + va_end(args); + NOREF(pvCallerRet); +} +RT_EXPORT_SYMBOL(RTLogLogger); + + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function of LogIt. + */ +RTDECL(void) RTLogLoggerEx(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...) +{ + va_list args; + va_start(args, pszFormat); + RTLogLoggerExV(pLogger, fFlags, iGroup, pszFormat, args); + va_end(args); +} +RT_EXPORT_SYMBOL(RTLogLoggerEx); + + +/** + * printf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintf(const char *pszFormat, ...) +{ + va_list args; + va_start(args, pszFormat); + RTLogPrintfV(pszFormat, args); + va_end(args); +} +RT_EXPORT_SYMBOL(RTLogPrintf); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/logformat.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/logformat.c @@ -0,0 +1,100 @@ +/* $Id: logformat.cpp $ */ +/** @file + * IPRT - Log Formatter. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include +#ifdef IN_RING3 +# include +# include +#endif + +#include +#include + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static DECLCALLBACK(size_t) rtlogFormatStr(void *pvArg, PFNRTSTROUTPUT pfnOutput, + void *pvArgOutput, const char **ppszFormat, + va_list *pArgs, int cchWidth, int cchPrecision, + unsigned fFlags, char chArgSize); + + +/** + * Partial vsprintf worker implementation. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string an it's length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArg Argument to output worker. + * @param pszFormat Format string. + * @param args Argument list. + */ +RTDECL(size_t) RTLogFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArg, const char *pszFormat, va_list args) +{ + return RTStrFormatV(pfnOutput, pvArg, rtlogFormatStr, NULL, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTLogFormatV); + + +/** + * Callback to format VBox formatting extentions. + * See @ref pg_rt_str_format for a reference on the format types. + * + * @returns The number of bytes formatted. + * @param pvArg Formatter argument. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +static DECLCALLBACK(size_t) rtlogFormatStr(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char **ppszFormat, va_list *pArgs, int cchWidth, + int cchPrecision, unsigned fFlags, char chArgSize) +{ + char ch = *(*ppszFormat)++; + + AssertMsgFailed(("Invalid logger format type '%%%c%.10s'!\n", ch, *ppszFormat)); NOREF(ch); + + NOREF(pvArg); NOREF(pfnOutput); NOREF(pvArgOutput); NOREF(pArgs); NOREF(cchWidth); + NOREF(cchPrecision); NOREF(fFlags); NOREF(chArgSize); + return 0; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/logrel.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/logrel.c @@ -0,0 +1,185 @@ +/* $Id: logrel.cpp $ */ +/** @file + * Runtime VBox - Release Logger. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#ifndef IN_RC +# include +# include +# include +# include +# include +#endif +#ifdef IN_RING3 +# include +# include +#endif +#include +#include +#include +#include +#include + +#include +#include +#include +#ifdef IN_RING3 +# include +# include +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#ifdef IN_RC +/** Default release logger instance. */ +extern "C" DECLIMPORT(RTLOGGERRC) g_RelLogger; +#else /* !IN_RC */ +/** Default release logger instance. */ +static PRTLOGGER g_pRelLogger; +#endif /* !IN_RC */ + + +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstance(void) +{ +#ifdef IN_RC + return &g_RelLogger; +#else /* !IN_RC */ + return g_pRelLogger; +#endif /* !IN_RC */ +} +RT_EXPORT_SYMBOL(RTLogRelGetDefaultInstance); + + +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstanceEx(uint32_t fFlagsAndGroup) +{ +#ifdef IN_RC + PRTLOGGER pLogger = &g_RelLogger; +#else /* !IN_RC */ + PRTLOGGER pLogger = g_pRelLogger; +#endif /* !IN_RC */ + if (pLogger) + { + if (pLogger->fFlags & RTLOGFLAGS_DISABLED) + pLogger = NULL; + else + { + uint16_t const fFlags = RT_LO_U16(fFlagsAndGroup); + uint16_t const iGroup = RT_HI_U16(fFlagsAndGroup); + if ( iGroup != UINT16_MAX + && ( (pLogger->afGroups[iGroup < pLogger->cGroups ? iGroup : 0] & (fFlags | (uint32_t)RTLOGGRPFLAGS_ENABLED)) + != (fFlags | (uint32_t)RTLOGGRPFLAGS_ENABLED))) + pLogger = NULL; + } + } + return pLogger; +} +RT_EXPORT_SYMBOL(RTLogRelGetDefaultInstanceEx); + + +#ifndef IN_RC +/** + * Sets the default logger instance. + * + * @returns iprt status code. + * @param pLogger The new default release logger instance. + */ +RTDECL(PRTLOGGER) RTLogRelSetDefaultInstance(PRTLOGGER pLogger) +{ + return ASMAtomicXchgPtrT(&g_pRelLogger, pLogger, PRTLOGGER); +} +RT_EXPORT_SYMBOL(RTLogRelSetDefaultInstance); +#endif /* !IN_RC */ + + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default release instance is attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogRelLoggerV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, va_list args) +{ + /* + * A NULL logger means default instance. + */ + if (!pLogger) + { + pLogger = RTLogRelGetDefaultInstance(); + if (!pLogger) + return; + } + RTLogLoggerExV(pLogger, fFlags, iGroup, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTLogRelLoggerV); + + +/** + * vprintf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param args Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintfV(const char *pszFormat, va_list args) +{ + RTLogRelLoggerV(NULL, 0, ~0U, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTLogRelPrintfV); + + +/** + * Changes the buffering setting of the default release logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogRelSetBuffering(bool fBuffered) +{ + PRTLOGGER pLogger = RTLogRelGetDefaultInstance(); + if (pLogger) + return RTLogSetBuffering(pLogger, fBuffered); + return false; +} +RT_EXPORT_SYMBOL(RTLogRelSetBuffering); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/log/logrelellipsis.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/log/logrelellipsis.c @@ -0,0 +1,78 @@ +/* $Id: logrelellipsis.cpp $ */ +/** @file + * Runtime VBox - Logger, the release ellipsis variants. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function for LogRelIt. + */ +RTDECL(void) RTLogRelLogger(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...) +{ + va_list args; + va_start(args, pszFormat); + RTLogRelLoggerV(pLogger, fFlags, iGroup, pszFormat, args); + va_end(args); +} +RT_EXPORT_SYMBOL(RTLogRelLogger); + + +/** + * printf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintf(const char *pszFormat, ...) +{ + va_list args; + va_start(args, pszFormat); + RTLogRelPrintfV(pszFormat, args); + va_end(args); +} +RT_EXPORT_SYMBOL(RTLogRelPrintf); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/divdi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/divdi3.c @@ -0,0 +1,70 @@ +/* $NetBSD: divdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)divdi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: divdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Divide two signed quads. + * ??? if -1/2 should produce -1 on this machine, this code is wrong + */ +quad_t +__divdi3(a, b) + quad_t a, b; +{ + u_quad_t ua, ub, uq; + int neg = 0; + + ua = a; + ub = b; + + if (a < 0) + ua = -ua, neg ^= 1; + if (b < 0) + ub = -ub, neg ^= 1; + + uq = __qdivrem(ua, ub, (u_quad_t *)0); + if (neg) + uq = - uq; + return uq; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/moddi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/moddi3.c @@ -0,0 +1,70 @@ +/* $NetBSD: moddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)moddi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: moddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Return remainder after dividing two signed quads. + * + * XXX we assume a % b < 0 iff a < 0, but this is actually machine-dependent. + */ +quad_t +__moddi3(a, b) + quad_t a, b; +{ + u_quad_t ua, ub, ur; + int neg = 0; + + ua = a; + ub = b; + + if (a < 0) + ua = -ua, neg ^= 1; + if (b < 0) + ub = -ub; + (void)__qdivrem(ua, ub, &ur); + if (neg) + ur = -ur; + return (ur); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/qdivrem.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/qdivrem.c @@ -0,0 +1,285 @@ +/* $NetBSD: qdivrem.c,v 1.12 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)qdivrem.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: qdivrem.c,v 1.12 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +/* + * Multiprecision divide. This algorithm is from Knuth vol. 2 (2nd ed), + * section 4.3.1, pp. 257--259. + */ + +#include "quad.h" + +#define B ((int)1 << HALF_BITS) /* digit base */ + +/* Combine two `digits' to make a single two-digit number. */ +#define COMBINE(a, b) (((u_int)(a) << HALF_BITS) | (b)) + +/* select a type for digits in base B: use unsigned short if they fit */ +#if UINT_MAX == 0xffffffffU && USHRT_MAX >= 0xffff +typedef unsigned short digit; +#else +typedef u_int digit; +#endif + +static void shl __P((digit *p, int len, int sh)); + +/* + * __qdivrem(u, v, rem) returns u/v and, optionally, sets *rem to u%v. + * + * We do this in base 2-sup-HALF_BITS, so that all intermediate products + * fit within u_int. As a consequence, the maximum length dividend and + * divisor are 4 `digits' in this base (they are shorter if they have + * leading zeros). + */ +u_quad_t +__qdivrem(uq, vq, arq) + u_quad_t uq, vq, *arq; +{ + union uu tmp; + digit *u, *v, *q; + digit v1, v2; + u_int qhat, rhat, t; + int m, n, d, j, i; + digit uspace[5], vspace[5], qspace[5]; + + /* + * Take care of special cases: divide by zero, and u < v. + */ + if (vq == 0) { + /* divide by zero. */ + static volatile const unsigned int zero = 0; + + tmp.ul[H] = tmp.ul[L] = 1 / zero; + if (arq) + *arq = uq; + return (tmp.q); + } + if (uq < vq) { + if (arq) + *arq = uq; + return (0); + } + u = &uspace[0]; + v = &vspace[0]; + q = &qspace[0]; + + /* + * Break dividend and divisor into digits in base B, then + * count leading zeros to determine m and n. When done, we + * will have: + * u = (u[1]u[2]...u[m+n]) sub B + * v = (v[1]v[2]...v[n]) sub B + * v[1] != 0 + * 1 < n <= 4 (if n = 1, we use a different division algorithm) + * m >= 0 (otherwise u < v, which we already checked) + * m + n = 4 + * and thus + * m = 4 - n <= 2 + */ + tmp.uq = uq; + u[0] = 0; + u[1] = (digit)HHALF(tmp.ul[H]); + u[2] = (digit)LHALF(tmp.ul[H]); + u[3] = (digit)HHALF(tmp.ul[L]); + u[4] = (digit)LHALF(tmp.ul[L]); + tmp.uq = vq; + v[1] = (digit)HHALF(tmp.ul[H]); + v[2] = (digit)LHALF(tmp.ul[H]); + v[3] = (digit)HHALF(tmp.ul[L]); + v[4] = (digit)LHALF(tmp.ul[L]); + for (n = 4; v[1] == 0; v++) { + if (--n == 1) { + u_int rbj; /* r*B+u[j] (not root boy jim) */ + digit q1, q2, q3, q4; + + /* + * Change of plan, per exercise 16. + * r = 0; + * for j = 1..4: + * q[j] = floor((r*B + u[j]) / v), + * r = (r*B + u[j]) % v; + * We unroll this completely here. + */ + t = v[2]; /* nonzero, by definition */ + q1 = (digit)(u[1] / t); + rbj = COMBINE(u[1] % t, u[2]); + q2 = (digit)(rbj / t); + rbj = COMBINE(rbj % t, u[3]); + q3 = (digit)(rbj / t); + rbj = COMBINE(rbj % t, u[4]); + q4 = (digit)(rbj / t); + if (arq) + *arq = rbj % t; + tmp.ul[H] = COMBINE(q1, q2); + tmp.ul[L] = COMBINE(q3, q4); + return (tmp.q); + } + } + + /* + * By adjusting q once we determine m, we can guarantee that + * there is a complete four-digit quotient at &qspace[1] when + * we finally stop. + */ + for (m = 4 - n; u[1] == 0; u++) + m--; + for (i = 4 - m; --i >= 0;) + q[i] = 0; + q += 4 - m; + + /* + * Here we run Program D, translated from MIX to C and acquiring + * a few minor changes. + * + * D1: choose multiplier 1 << d to ensure v[1] >= B/2. + */ + d = 0; + for (t = v[1]; t < B / 2; t <<= 1) + d++; + if (d > 0) { + shl(&u[0], m + n, d); /* u <<= d */ + shl(&v[1], n - 1, d); /* v <<= d */ + } + /* + * D2: j = 0. + */ + j = 0; + v1 = v[1]; /* for D3 -- note that v[1..n] are constant */ + v2 = v[2]; /* for D3 */ + do { + digit uj0, uj1, uj2; + + /* + * D3: Calculate qhat (\^q, in TeX notation). + * Let qhat = min((u[j]*B + u[j+1])/v[1], B-1), and + * let rhat = (u[j]*B + u[j+1]) mod v[1]. + * While rhat < B and v[2]*qhat > rhat*B+u[j+2], + * decrement qhat and increase rhat correspondingly. + * Note that if rhat >= B, v[2]*qhat < rhat*B. + */ + uj0 = u[j + 0]; /* for D3 only -- note that u[j+...] change */ + uj1 = u[j + 1]; /* for D3 only */ + uj2 = u[j + 2]; /* for D3 only */ + if (uj0 == v1) { + qhat = B; + rhat = uj1; + goto qhat_too_big; + } else { + u_int nn = COMBINE(uj0, uj1); + qhat = nn / v1; + rhat = nn % v1; + } + while (v2 * qhat > COMBINE(rhat, uj2)) { + qhat_too_big: + qhat--; + if ((rhat += v1) >= B) + break; + } + /* + * D4: Multiply and subtract. + * The variable `t' holds any borrows across the loop. + * We split this up so that we do not require v[0] = 0, + * and to eliminate a final special case. + */ + for (t = 0, i = n; i > 0; i--) { + t = u[i + j] - v[i] * qhat - t; + u[i + j] = (digit)LHALF(t); + t = (B - HHALF(t)) & (B - 1); + } + t = u[j] - t; + u[j] = (digit)LHALF(t); + /* + * D5: test remainder. + * There is a borrow if and only if HHALF(t) is nonzero; + * in that (rare) case, qhat was too large (by exactly 1). + * Fix it by adding v[1..n] to u[j..j+n]. + */ + if (HHALF(t)) { + qhat--; + for (t = 0, i = n; i > 0; i--) { /* D6: add back. */ + t += u[i + j] + v[i]; + u[i + j] = (digit)LHALF(t); + t = HHALF(t); + } + u[j] = (digit)LHALF(u[j] + t); + } + q[j] = (digit)qhat; + } while (++j <= m); /* D7: loop on j. */ + + /* + * If caller wants the remainder, we have to calculate it as + * u[m..m+n] >> d (this is at most n digits and thus fits in + * u[m+1..m+n], but we may need more source digits). + */ + if (arq) { + if (d) { + for (i = m + n; i > m; --i) + u[i] = (digit)(((u_int)u[i] >> d) | + LHALF((u_int)u[i - 1] << (HALF_BITS - d))); + u[i] = 0; + } + tmp.ul[H] = COMBINE(uspace[1], uspace[2]); + tmp.ul[L] = COMBINE(uspace[3], uspace[4]); + *arq = tmp.q; + } + + tmp.ul[H] = COMBINE(qspace[1], qspace[2]); + tmp.ul[L] = COMBINE(qspace[3], qspace[4]); + return (tmp.q); +} + +/* + * Shift p[0]..p[len] left `sh' bits, ignoring any bits that + * `fall out' the left (there never will be any such anyway). + * We may assume len >= 0. NOTE THAT THIS WRITES len+1 DIGITS. + */ +static void +shl(digit *p, int len, int sh) +{ + int i; + + for (i = 0; i < len; i++) + p[i] = (digit)(LHALF((u_int)p[i] << sh) | + ((u_int)p[i + 1] >> (HALF_BITS - sh))); + p[i] = (digit)(LHALF((u_int)p[i] << sh)); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/quad.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/quad.h @@ -0,0 +1,165 @@ +/* $NetBSD: quad.h,v 1.17 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)quad.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * Quad arithmetic. + * + * This library makes the following assumptions: + * + * - The type long long (aka quad_t) exists. + * + * - A quad variable is exactly twice as long as `int'. + * + * - The machine's arithmetic is two's complement. + * + * This library can provide 128-bit arithmetic on a machine with 128-bit + * quads and 64-bit ints, for instance, or 96-bit arithmetic on machines + * with 48-bit ints. + */ + +#if 0 /* iprt */ +#include +#if !defined(_KERNEL) && !defined(_STANDALONE) +#include +#else +#include +#endif +#else /* iprt */ +# include +# include +# undef __P +# define __P(a) a +# undef __GNUC_PREREQ__ +# define __GNUC_PREREQ__(m1,m2) 1 +# if 1 /* ASSUMES: little endian */ +# define _QUAD_HIGHWORD 1 +# define _QUAD_LOWWORD 0 +# else +# define _QUAD_HIGHWORD 0 +# define _QUAD_LOWWORD 1 +# endif +# if !defined(RT_OS_LINUX) || !defined(__KERNEL__) /* (linux/types.h defines u_int) */ + typedef unsigned int u_int; +# endif +# if !defined(RT_OS_SOLARIS) + typedef int64_t quad_t; +# else +# define quad_t int64_t +# endif + typedef uint64_t u_quad_t; + typedef quad_t *qaddr_t; +#endif /* iprt */ + +/* + * Depending on the desired operation, we view a `long long' (aka quad_t) in + * one or more of the following formats. + */ +union uu { + quad_t q; /* as a (signed) quad */ + u_quad_t uq; /* as an unsigned quad */ + int sl[2]; /* as two signed ints */ + u_int ul[2]; /* as two unsigned ints */ +}; + +/* + * Define high and low parts of a quad_t. + */ +#define H _QUAD_HIGHWORD +#define L _QUAD_LOWWORD + +/* + * Total number of bits in a quad_t and in the pieces that make it up. + * These are used for shifting, and also below for halfword extraction + * and assembly. + */ +#define QUAD_BITS (sizeof(quad_t) * CHAR_BIT) +#define INT_BITS (sizeof(int) * CHAR_BIT) +#define HALF_BITS (sizeof(int) * CHAR_BIT / 2) + +/* + * Extract high and low shortwords from longword, and move low shortword of + * longword to upper half of long, i.e., produce the upper longword of + * ((quad_t)(x) << (number_of_bits_in_int/2)). (`x' must actually be u_int.) + * + * These are used in the multiply code, to split a longword into upper + * and lower halves, and to reassemble a product as a quad_t, shifted left + * (sizeof(int)*CHAR_BIT/2). + */ +#define HHALF(x) ((u_int)(x) >> HALF_BITS) +#define LHALF(x) ((u_int)(x) & (((int)1 << HALF_BITS) - 1)) +#define LHUP(x) ((u_int)(x) << HALF_BITS) + +/* + * XXX + * Compensate for gcc 1 vs gcc 2. Gcc 1 defines ?sh?di3's second argument + * as u_quad_t, while gcc 2 correctly uses int. Unfortunately, we still use + * both compilers. + */ +#if __GNUC_PREREQ__(2, 0) || defined(lint) +typedef unsigned int qshift_t; +#else +typedef u_quad_t qshift_t; +#endif + +RT_C_DECLS_BEGIN +quad_t __adddi3 __P((quad_t, quad_t)); +quad_t __anddi3 __P((quad_t, quad_t)); +quad_t __ashldi3 __P((quad_t, qshift_t)); +quad_t __ashrdi3 __P((quad_t, qshift_t)); +int __cmpdi2 __P((quad_t, quad_t )); +quad_t __divdi3 __P((quad_t, quad_t)); +quad_t __fixdfdi __P((double)); +quad_t __fixsfdi __P((float)); +u_quad_t __fixunsdfdi __P((double)); +u_quad_t __fixunssfdi __P((float)); +double __floatdidf __P((quad_t)); +float __floatdisf __P((quad_t)); +double __floatunsdidf __P((u_quad_t)); +quad_t __iordi3 __P((quad_t, quad_t)); +quad_t __lshldi3 __P((quad_t, qshift_t)); +quad_t __lshrdi3 __P((quad_t, qshift_t)); +quad_t __moddi3 __P((quad_t, quad_t)); +quad_t __muldi3 __P((quad_t, quad_t)); +quad_t __negdi2 __P((quad_t)); +quad_t __one_cmpldi2 __P((quad_t)); +u_quad_t __qdivrem __P((u_quad_t, u_quad_t, u_quad_t *)); +quad_t __subdi3 __P((quad_t, quad_t)); +int __ucmpdi2 __P((u_quad_t, u_quad_t)); +u_quad_t __udivdi3 __P((u_quad_t, u_quad_t )); +u_quad_t __umoddi3 __P((u_quad_t, u_quad_t )); +quad_t __xordi3 __P((quad_t, quad_t)); +RT_C_DECLS_END --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/udivdi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/udivdi3.c @@ -0,0 +1,56 @@ +/* $NetBSD: udivdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)udivdi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: udivdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Divide two unsigned quads. + */ +u_quad_t +__udivdi3(a, b) + u_quad_t a, b; +{ + + return (__qdivrem(a, b, (u_quad_t *)0)); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/udivmoddi4.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/udivmoddi4.c @@ -0,0 +1,53 @@ +/* $Id: udivmoddi4.c $ */ +/** @file + * IPRT - __udivmoddi4 implementation + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#include +#include + +uint64_t __udivmoddi4(uint64_t u64A, uint64_t u64B, uint64_t *pu64R); + +/** + * __udivmoddi4() implementation to satisfy external references from 32-bit + * code generated by gcc-7 or later. + * + * @param u64A The divident value. + * @param u64B The divisor value. + * @param pu64R A pointer to the reminder. May be NULL. + * @returns u64A / u64B + */ +uint64_t __udivmoddi4(uint64_t u64A, uint64_t u64B, uint64_t *pu64R) +{ + RTUINT64U Divident; + RTUINT64U Divisor; + RTUINT64U Quotient; + RTUINT64U Reminder; + Divident.u = u64A; + Divisor.u = u64B; + RTUInt64DivRem(&Quotient, &Reminder, &Divident, &Divisor); + if (pu64R) + *pu64R = Reminder.u; + return Quotient.u; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/math/gcc/umoddi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/math/gcc/umoddi3.c @@ -0,0 +1,58 @@ +/* $NetBSD: umoddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)umoddi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: umoddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Return remainder after dividing two unsigned quads. + */ +u_quad_t +__umoddi3(a, b) + u_quad_t a, b; +{ + u_quad_t r; + + (void)__qdivrem(a, b, &r); + return (r); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg1Weak.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg1Weak.c @@ -0,0 +1,42 @@ +/* $Id: RTAssertMsg1Weak.cpp $ */ +/** @file + * IPRT - RTAssertMsg1Weak. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +RTDECL(void) RTAssertMsg1Weak(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction) +{ + RTAssertMsg1(pszExpr, uLine, pszFile, pszFunction); +} +RT_EXPORT_SYMBOL(RTAssertMsg1Weak); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2.c @@ -0,0 +1,45 @@ +/* $Id: RTAssertMsg2.cpp $ */ +/** @file + * IPRT - RTAssertMsg2. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +RTDECL(void) RTAssertMsg2(const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTAssertMsg2V(pszFormat, va); + va_end(va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2Add.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2Add.c @@ -0,0 +1,45 @@ +/* $Id: RTAssertMsg2Add.cpp $ */ +/** @file + * IPRT - RTAssertMsg2Add. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +RTDECL(void) RTAssertMsg2Add(const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTAssertMsg2AddV(pszFormat, va); + va_end(va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2Add); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2AddWeak.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2AddWeak.c @@ -0,0 +1,45 @@ +/* $Id: RTAssertMsg2AddWeak.cpp $ */ +/** @file + * IPRT - RTAssertMsg2AddWeak. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +RTDECL(void) RTAssertMsg2AddWeak(const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTAssertMsg2AddWeakV(pszFormat, va); + va_end(va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2AddWeak); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2AddWeakV.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2AddWeakV.c @@ -0,0 +1,40 @@ +/* $Id: RTAssertMsg2AddWeakV.cpp $ */ +/** @file + * IPRT - RTAssertMsg2AddWeakV. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(void) RTAssertMsg2AddWeakV(const char *pszFormat, va_list va) +{ + RTAssertMsg2AddV(pszFormat, va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2AddWeakV); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2Weak.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2Weak.c @@ -0,0 +1,45 @@ +/* $Id: RTAssertMsg2Weak.cpp $ */ +/** @file + * IPRT - RTAssertMsg2Weak. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +RTDECL(void) RTAssertMsg2Weak(const char *pszFormat, ...) +{ + va_list va; + va_start(va, pszFormat); + RTAssertMsg2WeakV(pszFormat, va); + va_end(va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2Weak); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2WeakV.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/RTAssertMsg2WeakV.c @@ -0,0 +1,40 @@ +/* $Id: RTAssertMsg2WeakV.cpp $ */ +/** @file + * IPRT - RTAssertMsg2WeakV. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(void) RTAssertMsg2WeakV(const char *pszFormat, va_list va) +{ + RTAssertMsg2V(pszFormat, va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2WeakV); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/assert.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/assert.c @@ -0,0 +1,307 @@ +/* $Id: assert.cpp $ */ +/** @file + * IPRT - Assertions, common code. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#ifdef IN_RING3 +# include +#endif +#include "internal/assert.h" + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The last assert message, 1st part. */ +RTDATADECL(char) g_szRTAssertMsg1[1024]; +RT_EXPORT_SYMBOL(g_szRTAssertMsg1); +/** The last assert message, 2nd part. */ +RTDATADECL(char) g_szRTAssertMsg2[4096]; +RT_EXPORT_SYMBOL(g_szRTAssertMsg2); +/** The length of the g_szRTAssertMsg2 content. + * @remarks Race. */ +static uint32_t volatile g_cchRTAssertMsg2; +/** The last assert message, expression. */ +RTDATADECL(const char * volatile) g_pszRTAssertExpr; +RT_EXPORT_SYMBOL(g_pszRTAssertExpr); +/** The last assert message, function name. */ +RTDATADECL(const char * volatile) g_pszRTAssertFunction; +RT_EXPORT_SYMBOL(g_pszRTAssertFunction); +/** The last assert message, file name. */ +RTDATADECL(const char * volatile) g_pszRTAssertFile; +RT_EXPORT_SYMBOL(g_pszRTAssertFile); +/** The last assert message, line number. */ +RTDATADECL(uint32_t volatile) g_u32RTAssertLine; +RT_EXPORT_SYMBOL(g_u32RTAssertLine); + + +/** Set if assertions are quiet. */ +static bool volatile g_fQuiet = false; +/** Set if assertions may panic. */ +static bool volatile g_fMayPanic = true; + + +RTDECL(bool) RTAssertSetQuiet(bool fQuiet) +{ + return ASMAtomicXchgBool(&g_fQuiet, fQuiet); +} +RT_EXPORT_SYMBOL(RTAssertSetQuiet); + + +RTDECL(bool) RTAssertAreQuiet(void) +{ + return ASMAtomicUoReadBool(&g_fQuiet); +} +RT_EXPORT_SYMBOL(RTAssertAreQuiet); + + +RTDECL(bool) RTAssertSetMayPanic(bool fMayPanic) +{ + return ASMAtomicXchgBool(&g_fMayPanic, fMayPanic); +} +RT_EXPORT_SYMBOL(RTAssertSetMayPanic); + + +RTDECL(bool) RTAssertMayPanic(void) +{ + return ASMAtomicUoReadBool(&g_fMayPanic); +} +RT_EXPORT_SYMBOL(RTAssertMayPanic); + + +RTDECL(void) RTAssertMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction) +{ + /* + * Fill in the globals. + */ + ASMAtomicUoWritePtr(&g_pszRTAssertExpr, pszExpr); + ASMAtomicUoWritePtr(&g_pszRTAssertFile, pszFile); + ASMAtomicUoWritePtr(&g_pszRTAssertFunction, pszFunction); + ASMAtomicUoWriteU32(&g_u32RTAssertLine, uLine); + RTStrPrintf(g_szRTAssertMsg1, sizeof(g_szRTAssertMsg1), + "\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + pszExpr, pszFile, uLine, pszFunction); + + /* + * If not quiet, make noise. + */ + if (!RTAssertAreQuiet()) + { + RTERRVARS SavedErrVars; + RTErrVarsSave(&SavedErrVars); + +#ifdef IN_RING0 +# ifdef IN_GUEST_R0 + RTLogBackdoorPrintf("\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + pszExpr, pszFile, uLine, pszFunction); +# endif + /** @todo fully integrate this with the logger... play safe a bit for now. */ + rtR0AssertNativeMsg1(pszExpr, uLine, pszFile, pszFunction); + +#else /* !IN_RING0 */ +# if !defined(IN_RING3) && !defined(LOG_NO_COM) +# if 0 /* Enable this iff you have a COM port and really want this debug info. */ + RTLogComPrintf("\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + pszExpr, pszFile, uLine, pszFunction); +# endif +# endif + + PRTLOGGER pLog = RTLogRelGetDefaultInstance(); + if (pLog) + { + RTLogRelPrintf("\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + pszExpr, pszFile, uLine, pszFunction); +# ifndef IN_RC /* flushing is done automatically in RC */ + RTLogFlush(pLog); +# endif + } + +# ifndef LOG_ENABLED + if (!pLog) +# endif + { + pLog = RTLogDefaultInstance(); + if (pLog) + { + RTLogPrintf("\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + pszExpr, pszFile, uLine, pszFunction); +# ifndef IN_RC /* flushing is done automatically in RC */ + RTLogFlush(pLog); +# endif + } + } + +# ifdef IN_RING3 + /* print to stderr, helps user and gdb debugging. */ + fprintf(stderr, + "\n!!Assertion Failed!!\n" + "Expression: %s\n" + "Location : %s(%d) %s\n", + VALID_PTR(pszExpr) ? pszExpr : "", + VALID_PTR(pszFile) ? pszFile : "", + uLine, + VALID_PTR(pszFunction) ? pszFunction : ""); + fflush(stderr); +# endif +#endif /* !IN_RING0 */ + + RTErrVarsRestore(&SavedErrVars); + } +} +RT_EXPORT_SYMBOL(RTAssertMsg1); + + +/** + * Worker for RTAssertMsg2V and RTAssertMsg2AddV + * + * @param fInitial True if it's RTAssertMsg2V, otherwise false. + * @param pszFormat The message format string. + * @param va The format arguments. + */ +static void rtAssertMsg2Worker(bool fInitial, const char *pszFormat, va_list va) +{ + va_list vaCopy; + size_t cch; + + /* + * The global first. + */ + if (fInitial) + { + va_copy(vaCopy, va); + cch = RTStrPrintfV(g_szRTAssertMsg2, sizeof(g_szRTAssertMsg2), pszFormat, vaCopy); + ASMAtomicWriteU32(&g_cchRTAssertMsg2, (uint32_t)cch); + va_end(vaCopy); + } + else + { + cch = ASMAtomicReadU32(&g_cchRTAssertMsg2); + if (cch < sizeof(g_szRTAssertMsg2) - 4) + { + va_copy(vaCopy, va); + cch += RTStrPrintfV(&g_szRTAssertMsg2[cch], sizeof(g_szRTAssertMsg2) - cch, pszFormat, vaCopy); + ASMAtomicWriteU32(&g_cchRTAssertMsg2, (uint32_t)cch); + va_end(vaCopy); + } + } + + /* + * If not quiet, make some noise. + */ + if (!RTAssertAreQuiet()) + { + RTERRVARS SavedErrVars; + RTErrVarsSave(&SavedErrVars); + +#ifdef IN_RING0 +# ifdef IN_GUEST_R0 + va_copy(vaCopy, va); + RTLogBackdoorPrintfV(pszFormat, vaCopy); + va_end(vaCopy); +# endif + /** @todo fully integrate this with the logger... play safe a bit for now. */ + rtR0AssertNativeMsg2V(fInitial, pszFormat, va); + +#else /* !IN_RING0 */ +# if !defined(IN_RING3) && !defined(LOG_NO_COM) +# if 0 /* Enable this iff you have a COM port and really want this debug info. */ + va_copy(vaCopy, va); + RTLogComPrintfV(pszFormat, vaCopy); + va_end(vaCopy); +# endif +# endif + + PRTLOGGER pLog = RTLogRelGetDefaultInstance(); + if (pLog) + { + va_copy(vaCopy, va); + RTLogRelPrintfV(pszFormat, vaCopy); + va_end(vaCopy); +# ifndef IN_RC /* flushing is done automatically in RC */ + RTLogFlush(pLog); +# endif + } + + pLog = RTLogDefaultInstance(); + if (pLog) + { + va_copy(vaCopy, va); + RTLogPrintfV(pszFormat, vaCopy); + va_end(vaCopy); +# ifndef IN_RC /* flushing is done automatically in RC */ + RTLogFlush(pLog); +#endif + } + +# ifdef IN_RING3 + /* print to stderr, helps user and gdb debugging. */ + char szMsg[sizeof(g_szRTAssertMsg2)]; + va_copy(vaCopy, va); + RTStrPrintfV(szMsg, sizeof(szMsg), pszFormat, vaCopy); + va_end(vaCopy); + fprintf(stderr, "%s", szMsg); + fflush(stderr); +# endif +#endif /* !IN_RING0 */ + + RTErrVarsRestore(&SavedErrVars); + } +} + + +RTDECL(void) RTAssertMsg2V(const char *pszFormat, va_list va) +{ + rtAssertMsg2Worker(true /*fInitial*/, pszFormat, va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2V); + + +RTDECL(void) RTAssertMsg2AddV(const char *pszFormat, va_list va) +{ + rtAssertMsg2Worker(false /*fInitial*/, pszFormat, va); +} +RT_EXPORT_SYMBOL(RTAssertMsg2AddV); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/misc/thread.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/misc/thread.c @@ -0,0 +1,1602 @@ +/* $Id: thread.cpp $ */ +/** @file + * IPRT - Threads, common routines. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_THREAD +#include +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include +#ifdef IN_RING0 +# include +#endif +#include +#include +#include +#include "internal/magics.h" +#include "internal/thread.h" +#include "internal/sched.h" +#include "internal/process.h" +#ifdef RT_WITH_ICONV_CACHE +# include "internal/string.h" +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#ifdef IN_RING0 +# define RT_THREAD_LOCK_RW() RTSpinlockAcquire(g_ThreadSpinlock) +# define RT_THREAD_UNLOCK_RW() RTSpinlockRelease(g_ThreadSpinlock) +# define RT_THREAD_LOCK_RD() RTSpinlockAcquire(g_ThreadSpinlock) +# define RT_THREAD_UNLOCK_RD() RTSpinlockRelease(g_ThreadSpinlock) +#else +# define RT_THREAD_LOCK_RW() rtThreadLockRW() +# define RT_THREAD_UNLOCK_RW() rtThreadUnLockRW() +# define RT_THREAD_LOCK_RD() rtThreadLockRD() +# define RT_THREAD_UNLOCK_RD() rtThreadUnLockRD() +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The AVL thread containing the threads. */ +static PAVLPVNODECORE g_ThreadTree; +/** The number of threads in the tree (for ring-0 termination kludge). */ +static uint32_t volatile g_cThreadInTree; +#ifdef IN_RING3 +/** The RW lock protecting the tree. */ +static RTSEMRW g_ThreadRWSem = NIL_RTSEMRW; +#else +/** The spinlocks protecting the tree. */ +static RTSPINLOCK g_ThreadSpinlock = NIL_RTSPINLOCK; +#endif +/** Indicates whether we've been initialized or not. */ +static bool g_frtThreadInitialized; + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static void rtThreadDestroy(PRTTHREADINT pThread); +#ifdef IN_RING3 +static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName); +#endif +static void rtThreadRemoveLocked(PRTTHREADINT pThread); +static PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName); + + +/** @page pg_rt_thread IPRT Thread Internals + * + * IPRT provides interface to whatever native threading that the host provides, + * preferably using a CRT level interface to better integrate with other libraries. + * + * Internally IPRT keeps track of threads by means of the RTTHREADINT structure. + * All the RTTHREADINT structures are kept in a AVL tree which is protected by a + * read/write lock for efficient access. A thread is inserted into the tree in + * three places in the code. The main thread is 'adopted' by IPRT on rtR3Init() + * by rtThreadAdopt(). When creating a new thread there the child and the parent + * race inserting the thread, this is rtThreadMain() and RTThreadCreate. + * + * RTTHREADINT objects are using reference counting as a mean of sticking around + * till no-one needs them any longer. Waitable threads is created with one extra + * reference so they won't go away until they are waited on. This introduces a + * major problem if we use the host thread identifier as key in the AVL tree - the + * host may reuse the thread identifier before the thread was waited on. So, on + * most platforms we are using the RTTHREADINT pointer as key and not the + * thread id. RTThreadSelf() then have to be implemented using a pointer stored + * in thread local storage (TLS). + * + * In Ring-0 we only try keep track of kernel threads created by RTThreadCreate + * at the moment. There we really only need the 'join' feature, but doing things + * the same way allow us to name threads and similar stuff. + */ + + +/** + * Initializes the thread database. + * + * @returns iprt status code. + */ +DECLHIDDEN(int) rtThreadInit(void) +{ +#ifdef IN_RING3 + int rc = VINF_ALREADY_INITIALIZED; + if (g_ThreadRWSem == NIL_RTSEMRW) + { + /* + * We assume the caller is the 1st thread, which we'll call 'main'. + * But first, we'll create the semaphore. + */ + rc = RTSemRWCreateEx(&g_ThreadRWSem, RTSEMRW_FLAGS_NO_LOCK_VAL, NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_NONE, NULL); + if (RT_SUCCESS(rc)) + { + rc = rtThreadNativeInit(); + if (RT_SUCCESS(rc)) + rc = rtThreadAdopt(RTTHREADTYPE_DEFAULT, 0, RTTHREADINT_FLAGS_MAIN, "main"); + if (RT_SUCCESS(rc)) + rc = rtSchedNativeCalcDefaultPriority(RTTHREADTYPE_DEFAULT); + if (RT_SUCCESS(rc)) + { + g_frtThreadInitialized = true; + return VINF_SUCCESS; + } + + /* failed, clear out */ + RTSemRWDestroy(g_ThreadRWSem); + g_ThreadRWSem = NIL_RTSEMRW; + } + } + +#elif defined(IN_RING0) + int rc; + /* + * Create the spinlock and to native init. + */ + Assert(g_ThreadSpinlock == NIL_RTSPINLOCK); + rc = RTSpinlockCreate(&g_ThreadSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "RTThread"); + if (RT_SUCCESS(rc)) + { + rc = rtThreadNativeInit(); + if (RT_SUCCESS(rc)) + { + g_frtThreadInitialized = true; + return VINF_SUCCESS; + } + + /* failed, clear out */ + RTSpinlockDestroy(g_ThreadSpinlock); + g_ThreadSpinlock = NIL_RTSPINLOCK; + } +#else +# error "!IN_RING0 && !IN_RING3" +#endif + return rc; +} + + +#ifdef IN_RING3 +/** + * Called when IPRT was first initialized in unobtrusive mode and later changed + * to obtrustive. + * + * This is only applicable in ring-3. + */ +DECLHIDDEN(void) rtThreadReInitObtrusive(void) +{ + rtThreadNativeReInitObtrusive(); +} +#endif + + +/** + * Terminates the thread database. + */ +DECLHIDDEN(void) rtThreadTerm(void) +{ +#ifdef IN_RING3 + /* we don't cleanup here yet */ + +#elif defined(IN_RING0) + /* just destroy the spinlock and assume the thread is fine... */ + RTSpinlockDestroy(g_ThreadSpinlock); + g_ThreadSpinlock = NIL_RTSPINLOCK; + if (g_ThreadTree != NULL) + RTAssertMsg2Weak("WARNING: g_ThreadTree=%p\n", g_ThreadTree); +#endif +} + + +#ifdef IN_RING3 + +DECLINLINE(void) rtThreadLockRW(void) +{ + if (g_ThreadRWSem == NIL_RTSEMRW) + rtThreadInit(); + int rc = RTSemRWRequestWrite(g_ThreadRWSem, RT_INDEFINITE_WAIT); + AssertReleaseRC(rc); +} + + +DECLINLINE(void) rtThreadLockRD(void) +{ + if (g_ThreadRWSem == NIL_RTSEMRW) + rtThreadInit(); + int rc = RTSemRWRequestRead(g_ThreadRWSem, RT_INDEFINITE_WAIT); + AssertReleaseRC(rc); +} + + +DECLINLINE(void) rtThreadUnLockRW(void) +{ + int rc = RTSemRWReleaseWrite(g_ThreadRWSem); + AssertReleaseRC(rc); +} + + +DECLINLINE(void) rtThreadUnLockRD(void) +{ + int rc = RTSemRWReleaseRead(g_ThreadRWSem); + AssertReleaseRC(rc); +} + + +/** + * Adopts the calling thread. + * No locks are taken or released by this function. + */ +static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName) +{ + int rc; + PRTTHREADINT pThread; + Assert(!(fFlags & RTTHREADFLAGS_WAITABLE)); + fFlags &= ~RTTHREADFLAGS_WAITABLE; + + /* + * Allocate and insert the thread. + * (It is vital that rtThreadNativeAdopt updates the TLS before + * we try inserting the thread because of locking.) + */ + rc = VERR_NO_MEMORY; + pThread = rtThreadAlloc(enmType, fFlags, RTTHREADINT_FLAGS_ALIEN | fIntFlags, pszName); + if (pThread) + { + RTNATIVETHREAD NativeThread = RTThreadNativeSelf(); + rc = rtThreadNativeAdopt(pThread); + if (RT_SUCCESS(rc)) + { + rtThreadInsert(pThread, NativeThread); + rtThreadSetState(pThread, RTTHREADSTATE_RUNNING); + rtThreadRelease(pThread); + } + else + rtThreadDestroy(pThread); + } + return rc; +} + +/** + * Adopts a non-IPRT thread. + * + * @returns IPRT status code. + * @param enmType The thread type. + * @param fFlags The thread flags. RTTHREADFLAGS_WAITABLE is not currently allowed. + * @param pszName The thread name. Optional. + * @param pThread Where to store the thread handle. Optional. + */ +RTDECL(int) RTThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, const char *pszName, PRTTHREAD pThread) +{ + int rc; + RTTHREAD Thread; + + AssertReturn(!(fFlags & RTTHREADFLAGS_WAITABLE), VERR_INVALID_PARAMETER); + AssertReturn(!pszName || VALID_PTR(pszName), VERR_INVALID_POINTER); + AssertReturn(!pThread || VALID_PTR(pThread), VERR_INVALID_POINTER); + + rc = VINF_SUCCESS; + Thread = RTThreadSelf(); + if (Thread == NIL_RTTHREAD) + { + /* generate a name if none was given. */ + char szName[RTTHREAD_NAME_LEN]; + if (!pszName || !*pszName) + { + static uint32_t s_i32AlienId = 0; + uint32_t i32Id = ASMAtomicIncU32(&s_i32AlienId); + RTStrPrintf(szName, sizeof(szName), "ALIEN-%RX32", i32Id); + pszName = szName; + } + + /* try adopt it */ + rc = rtThreadAdopt(enmType, fFlags, 0, pszName); + Thread = RTThreadSelf(); + Log(("RTThreadAdopt: %RTthrd %RTnthrd '%s' enmType=%d fFlags=%#x rc=%Rrc\n", + Thread, RTThreadNativeSelf(), pszName, enmType, fFlags, rc)); + } + else + Log(("RTThreadAdopt: %RTthrd %RTnthrd '%s' enmType=%d fFlags=%#x - already adopted!\n", + Thread, RTThreadNativeSelf(), pszName, enmType, fFlags)); + + if (pThread) + *pThread = Thread; + return rc; +} +RT_EXPORT_SYMBOL(RTThreadAdopt); + + +/** + * Get the thread handle of the current thread, automatically adopting alien + * threads. + * + * @returns Thread handle. + */ +RTDECL(RTTHREAD) RTThreadSelfAutoAdopt(void) +{ + RTTHREAD hSelf = RTThreadSelf(); + if (RT_UNLIKELY(hSelf == NIL_RTTHREAD)) + RTThreadAdopt(RTTHREADTYPE_DEFAULT, 0, NULL, &hSelf); + return hSelf; +} +RT_EXPORT_SYMBOL(RTThreadSelfAutoAdopt); + +#endif /* IN_RING3 */ + +/** + * Allocates a per thread data structure and initializes the basic fields. + * + * @returns Pointer to per thread data structure. + * This is reference once. + * @returns NULL on failure. + * @param enmType The thread type. + * @param fFlags The thread flags. + * @param fIntFlags The internal thread flags. + * @param pszName Pointer to the thread name. + */ +PRTTHREADINT rtThreadAlloc(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFlags, const char *pszName) +{ + PRTTHREADINT pThread = (PRTTHREADINT)RTMemAllocZ(sizeof(RTTHREADINT)); + if (pThread) + { + size_t cchName; + int rc; + + pThread->Core.Key = (void*)NIL_RTTHREAD; + pThread->u32Magic = RTTHREADINT_MAGIC; + cchName = strlen(pszName); + if (cchName >= RTTHREAD_NAME_LEN) + cchName = RTTHREAD_NAME_LEN - 1; + memcpy(pThread->szName, pszName, cchName); + pThread->szName[cchName] = '\0'; + pThread->cRefs = 2 + !!(fFlags & RTTHREADFLAGS_WAITABLE); /* And extra reference if waitable. */ + pThread->rc = VERR_PROCESS_RUNNING; /** @todo get a better error code! */ + pThread->enmType = enmType; + pThread->fFlags = fFlags; + pThread->fIntFlags = fIntFlags; + pThread->enmState = RTTHREADSTATE_INITIALIZING; + pThread->fReallySleeping = false; +#ifdef IN_RING3 + rtLockValidatorInitPerThread(&pThread->LockValidator); +#endif +#ifdef RT_WITH_ICONV_CACHE + rtStrIconvCacheInit(pThread); +#endif + rc = RTSemEventMultiCreate(&pThread->EventUser); + if (RT_SUCCESS(rc)) + { + rc = RTSemEventMultiCreate(&pThread->EventTerminated); + if (RT_SUCCESS(rc)) + return pThread; + RTSemEventMultiDestroy(pThread->EventUser); + } + RTMemFree(pThread); + } + return NULL; +} + + +/** + * Insert the per thread data structure into the tree. + * + * This can be called from both the thread it self and the parent, + * thus it must handle insertion failures in a nice manner. + * + * @param pThread Pointer to thread structure allocated by rtThreadAlloc(). + * @param NativeThread The native thread id. + */ +DECLHIDDEN(void) rtThreadInsert(PRTTHREADINT pThread, RTNATIVETHREAD NativeThread) +{ + Assert(pThread); + Assert(pThread->u32Magic == RTTHREADINT_MAGIC); + + { + RT_THREAD_LOCK_RW(); + + /* + * Do not insert a terminated thread. + * + * This may happen if the thread finishes before the RTThreadCreate call + * gets this far. Since the OS may quickly reuse the native thread ID + * it should not be reinserted at this point. + */ + if (rtThreadGetState(pThread) != RTTHREADSTATE_TERMINATED) + { + /* + * Before inserting we must check if there is a thread with this id + * in the tree already. We're racing parent and child on insert here + * so that the handle is valid in both ends when they return / start. + * + * If it's not ourself we find, it's a dead alien thread and we will + * unlink it from the tree. Alien threads will be released at this point. + */ + PRTTHREADINT pThreadOther = (PRTTHREADINT)RTAvlPVGet(&g_ThreadTree, (void *)NativeThread); + if (pThreadOther != pThread) + { + bool fRc; + /* remove dead alien if any */ + if (pThreadOther) + { + AssertMsg(pThreadOther->fIntFlags & RTTHREADINT_FLAGS_ALIEN, ("%p:%s; %p:%s\n", pThread, pThread->szName, pThreadOther, pThreadOther->szName)); + ASMAtomicBitClear(&pThread->fIntFlags, RTTHREADINT_FLAG_IN_TREE_BIT); + rtThreadRemoveLocked(pThreadOther); + if (pThreadOther->fIntFlags & RTTHREADINT_FLAGS_ALIEN) + rtThreadRelease(pThreadOther); + } + + /* insert the thread */ + ASMAtomicWritePtr(&pThread->Core.Key, (void *)NativeThread); + fRc = RTAvlPVInsert(&g_ThreadTree, &pThread->Core); + ASMAtomicOrU32(&pThread->fIntFlags, RTTHREADINT_FLAG_IN_TREE); + if (fRc) + ASMAtomicIncU32(&g_cThreadInTree); + + AssertReleaseMsg(fRc, ("Lock problem? %p (%RTnthrd) %s\n", pThread, NativeThread, pThread->szName)); + NOREF(fRc); + } + } + + RT_THREAD_UNLOCK_RW(); + } +} + + +/** + * Removes the thread from the AVL tree, call owns the tree lock + * and has cleared the RTTHREADINT_FLAG_IN_TREE bit. + * + * @param pThread The thread to remove. + */ +static void rtThreadRemoveLocked(PRTTHREADINT pThread) +{ + PRTTHREADINT pThread2 = (PRTTHREADINT)RTAvlPVRemove(&g_ThreadTree, pThread->Core.Key); +#if !defined(RT_OS_OS2) /** @todo this asserts for threads created by NSPR */ + AssertMsg(pThread2 == pThread, ("%p(%s) != %p (%p/%s)\n", pThread2, pThread2 ? pThread2->szName : "", + pThread, pThread->Core.Key, pThread->szName)); +#endif + if (pThread2) + ASMAtomicDecU32(&g_cThreadInTree); +} + + +/** + * Removes the thread from the AVL tree. + * + * @param pThread The thread to remove. + */ +static void rtThreadRemove(PRTTHREADINT pThread) +{ + RT_THREAD_LOCK_RW(); + if (ASMAtomicBitTestAndClear(&pThread->fIntFlags, RTTHREADINT_FLAG_IN_TREE_BIT)) + rtThreadRemoveLocked(pThread); + RT_THREAD_UNLOCK_RW(); +} + + +/** + * Checks if a thread is alive or not. + * + * @returns true if the thread is alive (or we don't really know). + * @returns false if the thread has surely terminate. + */ +DECLINLINE(bool) rtThreadIsAlive(PRTTHREADINT pThread) +{ + return !(pThread->fIntFlags & RTTHREADINT_FLAGS_TERMINATED); +} + + +/** + * Gets a thread by it's native ID. + * + * @returns pointer to the thread structure. + * @returns NULL if not a thread IPRT knows. + * @param NativeThread The native thread id. + */ +DECLHIDDEN(PRTTHREADINT) rtThreadGetByNative(RTNATIVETHREAD NativeThread) +{ + PRTTHREADINT pThread; + /* + * Simple tree lookup. + */ + RT_THREAD_LOCK_RD(); + pThread = (PRTTHREADINT)RTAvlPVGet(&g_ThreadTree, (void *)NativeThread); + RT_THREAD_UNLOCK_RD(); + return pThread; +} + + +/** + * Gets the per thread data structure for a thread handle. + * + * @returns Pointer to the per thread data structure for Thread. + * The caller must release the thread using rtThreadRelease(). + * @returns NULL if Thread was not found. + * @param Thread Thread id which structure is to be returned. + */ +DECLHIDDEN(PRTTHREADINT) rtThreadGet(RTTHREAD Thread) +{ + if ( Thread != NIL_RTTHREAD + && VALID_PTR(Thread)) + { + PRTTHREADINT pThread = (PRTTHREADINT)Thread; + if ( pThread->u32Magic == RTTHREADINT_MAGIC + && pThread->cRefs > 0) + { + ASMAtomicIncU32(&pThread->cRefs); + return pThread; + } + } + + AssertMsgFailed(("Thread=%RTthrd\n", Thread)); + return NULL; +} + +/** + * Release a per thread data structure. + * + * @returns New reference count. + * @param pThread The thread structure to release. + */ +DECLHIDDEN(uint32_t) rtThreadRelease(PRTTHREADINT pThread) +{ + uint32_t cRefs; + + Assert(pThread); + if (pThread->cRefs >= 1) + { + cRefs = ASMAtomicDecU32(&pThread->cRefs); + if (!cRefs) + rtThreadDestroy(pThread); + } + else + { + cRefs = 0; + AssertFailed(); + } + return cRefs; +} + + +/** + * Destroys the per thread data. + * + * @param pThread The thread to destroy. + */ +static void rtThreadDestroy(PRTTHREADINT pThread) +{ + RTSEMEVENTMULTI hEvt1, hEvt2; + /* + * Remove it from the tree and mark it as dead. + * + * Threads that has seen rtThreadTerminate and should already have been + * removed from the tree. There is probably no thread that should + * require removing here. However, be careful making sure that cRefs + * isn't 0 if we do or we'll blow up because the strict locking code + * will be calling us back. + */ + if (ASMBitTest(&pThread->fIntFlags, RTTHREADINT_FLAG_IN_TREE_BIT)) + { + ASMAtomicIncU32(&pThread->cRefs); + rtThreadRemove(pThread); + ASMAtomicDecU32(&pThread->cRefs); + } + + /* + * Invalidate the thread structure. + */ +#ifdef IN_RING3 + rtLockValidatorSerializeDestructEnter(); + + rtLockValidatorDeletePerThread(&pThread->LockValidator); +#endif +#ifdef RT_WITH_ICONV_CACHE + rtStrIconvCacheDestroy(pThread); +#endif + ASMAtomicXchgU32(&pThread->u32Magic, RTTHREADINT_MAGIC_DEAD); + ASMAtomicWritePtr(&pThread->Core.Key, (void *)NIL_RTTHREAD); + pThread->enmType = RTTHREADTYPE_INVALID; + hEvt1 = pThread->EventUser; + pThread->EventUser = NIL_RTSEMEVENTMULTI; + hEvt2 = pThread->EventTerminated; + pThread->EventTerminated = NIL_RTSEMEVENTMULTI; + +#ifdef IN_RING3 + rtLockValidatorSerializeDestructLeave(); +#endif + + /* + * Destroy semaphore resources and free the bugger. + */ + RTSemEventMultiDestroy(hEvt1); + if (hEvt2 != NIL_RTSEMEVENTMULTI) + RTSemEventMultiDestroy(hEvt2); + + rtThreadNativeDestroy(pThread); + RTMemFree(pThread); +} + + +/** + * Terminates the thread. + * Called by the thread wrapper function when the thread terminates. + * + * @param pThread The thread structure. + * @param rc The thread result code. + */ +DECLHIDDEN(void) rtThreadTerminate(PRTTHREADINT pThread, int rc) +{ + Assert(pThread->cRefs >= 1); + +#ifdef IPRT_WITH_GENERIC_TLS + /* + * Destroy TLS entries. + */ + rtThreadTlsDestruction(pThread); +#endif /* IPRT_WITH_GENERIC_TLS */ + + /* + * Set the rc, mark it terminated and signal anyone waiting. + */ + pThread->rc = rc; + rtThreadSetState(pThread, RTTHREADSTATE_TERMINATED); + ASMAtomicOrU32(&pThread->fIntFlags, RTTHREADINT_FLAGS_TERMINATED); + if (pThread->EventTerminated != NIL_RTSEMEVENTMULTI) + RTSemEventMultiSignal(pThread->EventTerminated); + + /* + * Remove the thread from the tree so that there will be no + * key clashes in the AVL tree and release our reference to ourself. + */ + rtThreadRemove(pThread); + rtThreadRelease(pThread); +} + + +/** + * The common thread main function. + * This is called by rtThreadNativeMain(). + * + * @returns The status code of the thread. + * pThread is dereference by the thread before returning! + * @param pThread The thread structure. + * @param NativeThread The native thread id. + * @param pszThreadName The name of the thread (purely a dummy for backtrace). + */ +DECLCALLBACK(DECLHIDDEN(int)) rtThreadMain(PRTTHREADINT pThread, RTNATIVETHREAD NativeThread, const char *pszThreadName) +{ + int rc; + NOREF(pszThreadName); + rtThreadInsert(pThread, NativeThread); + Log(("rtThreadMain: Starting: pThread=%p NativeThread=%RTnthrd Name=%s pfnThread=%p pvUser=%p\n", + pThread, NativeThread, pThread->szName, pThread->pfnThread, pThread->pvUser)); + + /* + * Change the priority. + */ + rc = rtThreadNativeSetPriority(pThread, pThread->enmType); +#ifdef IN_RING3 + AssertMsgRC(rc, ("Failed to set priority of thread %p (%RTnthrd / %s) to enmType=%d enmPriority=%d rc=%Rrc\n", + pThread, NativeThread, pThread->szName, pThread->enmType, g_enmProcessPriority, rc)); +#else + AssertMsgRC(rc, ("Failed to set priority of thread %p (%RTnthrd / %s) to enmType=%d rc=%Rrc\n", + pThread, NativeThread, pThread->szName, pThread->enmType, rc)); +#endif + + /* + * Call thread function and terminate when it returns. + */ + rtThreadSetState(pThread, RTTHREADSTATE_RUNNING); + rc = pThread->pfnThread(pThread, pThread->pvUser); + + /* + * Paranoia checks for leftover resources. + */ +#ifdef RTSEMRW_STRICT + int32_t cWrite = ASMAtomicReadS32(&pThread->cWriteLocks); + Assert(!cWrite); + int32_t cRead = ASMAtomicReadS32(&pThread->cReadLocks); + Assert(!cRead); +#endif + + Log(("rtThreadMain: Terminating: rc=%d pThread=%p NativeThread=%RTnthrd Name=%s pfnThread=%p pvUser=%p\n", + rc, pThread, NativeThread, pThread->szName, pThread->pfnThread, pThread->pvUser)); + rtThreadTerminate(pThread, rc); + return rc; +} + + +/** + * Create a new thread. + * + * @returns iprt status code. + * @param pThread Where to store the thread handle to the new thread. (optional) + * @param pfnThread The thread function. + * @param pvUser User argument. + * @param cbStack The size of the stack for the new thread. + * Use 0 for the default stack size. + * @param enmType The thread type. Used for deciding scheduling attributes + * of the thread. + * @param fFlags Flags of the RTTHREADFLAGS type (ORed together). + * @param pszName Thread name. + */ +RTDECL(int) RTThreadCreate(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, unsigned fFlags, const char *pszName) +{ + int rc; + PRTTHREADINT pThreadInt; + + LogFlow(("RTThreadCreate: pThread=%p pfnThread=%p pvUser=%p cbStack=%#x enmType=%d fFlags=%#x pszName=%p:{%s}\n", + pThread, pfnThread, pvUser, cbStack, enmType, fFlags, pszName, pszName)); + + /* + * Validate input. + */ + if (!VALID_PTR(pThread) && pThread) + { + Assert(VALID_PTR(pThread)); + return VERR_INVALID_PARAMETER; + } + if (!VALID_PTR(pfnThread)) + { + Assert(VALID_PTR(pfnThread)); + return VERR_INVALID_PARAMETER; + } + if (!pszName || !*pszName || strlen(pszName) >= RTTHREAD_NAME_LEN) + { + AssertMsgFailed(("pszName=%s (max len is %d because of logging)\n", pszName, RTTHREAD_NAME_LEN - 1)); + return VERR_INVALID_PARAMETER; + } + if (fFlags & ~RTTHREADFLAGS_MASK) + { + AssertMsgFailed(("fFlags=%#x\n", fFlags)); + return VERR_INVALID_PARAMETER; + } + + /* + * Allocate thread argument. + */ + pThreadInt = rtThreadAlloc(enmType, fFlags, 0, pszName); + if (pThreadInt) + { + RTNATIVETHREAD NativeThread; + + pThreadInt->pfnThread = pfnThread; + pThreadInt->pvUser = pvUser; + pThreadInt->cbStack = cbStack; + + rc = rtThreadNativeCreate(pThreadInt, &NativeThread); + if (RT_SUCCESS(rc)) + { + rtThreadInsert(pThreadInt, NativeThread); + rtThreadRelease(pThreadInt); + Log(("RTThreadCreate: Created thread %p (%p) %s\n", pThreadInt, NativeThread, pszName)); + if (pThread) + *pThread = pThreadInt; + return VINF_SUCCESS; + } + + pThreadInt->cRefs = 1; + rtThreadRelease(pThreadInt); + } + else + rc = VERR_NO_TMP_MEMORY; + LogFlow(("RTThreadCreate: Failed to create thread, rc=%Rrc\n", rc)); + AssertReleaseRC(rc); + return rc; +} +RT_EXPORT_SYMBOL(RTThreadCreate); + + +/** + * Create a new thread. + * + * Same as RTThreadCreate except the name is given in the RTStrPrintfV form. + * + * @returns iprt status code. + * @param pThread See RTThreadCreate. + * @param pfnThread See RTThreadCreate. + * @param pvUser See RTThreadCreate. + * @param cbStack See RTThreadCreate. + * @param enmType See RTThreadCreate. + * @param fFlags See RTThreadCreate. + * @param pszNameFmt Thread name format. + * @param va Format arguments. + */ +RTDECL(int) RTThreadCreateV(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, uint32_t fFlags, const char *pszNameFmt, va_list va) +{ + char szName[RTTHREAD_NAME_LEN * 2]; + RTStrPrintfV(szName, sizeof(szName), pszNameFmt, va); + return RTThreadCreate(pThread, pfnThread, pvUser, cbStack, enmType, fFlags, szName); +} +RT_EXPORT_SYMBOL(RTThreadCreateV); + + +/** + * Create a new thread. + * + * Same as RTThreadCreate except the name is given in the RTStrPrintf form. + * + * @returns iprt status code. + * @param pThread See RTThreadCreate. + * @param pfnThread See RTThreadCreate. + * @param pvUser See RTThreadCreate. + * @param cbStack See RTThreadCreate. + * @param enmType See RTThreadCreate. + * @param fFlags See RTThreadCreate. + * @param pszNameFmt Thread name format. + * @param ... Format arguments. + */ +RTDECL(int) RTThreadCreateF(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, uint32_t fFlags, const char *pszNameFmt, ...) +{ + va_list va; + int rc; + va_start(va, pszNameFmt); + rc = RTThreadCreateV(pThread, pfnThread, pvUser, cbStack, enmType, fFlags, pszNameFmt, va); + va_end(va); + return rc; +} +RT_EXPORT_SYMBOL(RTThreadCreateF); + + +/** + * Gets the native thread id of a IPRT thread. + * + * @returns The native thread id. + * @param Thread The IPRT thread. + */ +RTDECL(RTNATIVETHREAD) RTThreadGetNative(RTTHREAD Thread) +{ + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + RTNATIVETHREAD NativeThread = (RTNATIVETHREAD)pThread->Core.Key; + rtThreadRelease(pThread); + return NativeThread; + } + return NIL_RTNATIVETHREAD; +} +RT_EXPORT_SYMBOL(RTThreadGetNative); + + +/** + * Gets the IPRT thread of a native thread. + * + * @returns The IPRT thread handle + * @returns NIL_RTTHREAD if not a thread known to IPRT. + * @param NativeThread The native thread handle/id. + */ +RTDECL(RTTHREAD) RTThreadFromNative(RTNATIVETHREAD NativeThread) +{ + PRTTHREADINT pThread = rtThreadGetByNative(NativeThread); + if (pThread) + return pThread; + return NIL_RTTHREAD; +} +RT_EXPORT_SYMBOL(RTThreadFromNative); + + +/** + * Gets the name of the current thread thread. + * + * @returns Pointer to readonly name string. + * @returns NULL on failure. + */ +RTDECL(const char *) RTThreadSelfName(void) +{ + RTTHREAD Thread = RTThreadSelf(); + if (Thread != NIL_RTTHREAD) + { + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + const char *szName = pThread->szName; + rtThreadRelease(pThread); + return szName; + } + } + return NULL; +} +RT_EXPORT_SYMBOL(RTThreadSelfName); + + +/** + * Gets the name of a thread. + * + * @returns Pointer to readonly name string. + * @returns NULL on failure. + * @param Thread Thread handle of the thread to query the name of. + */ +RTDECL(const char *) RTThreadGetName(RTTHREAD Thread) +{ + PRTTHREADINT pThread; + if (Thread == NIL_RTTHREAD) + return NULL; + pThread = rtThreadGet(Thread); + if (pThread) + { + const char *szName = pThread->szName; + rtThreadRelease(pThread); + return szName; + } + return NULL; +} +RT_EXPORT_SYMBOL(RTThreadGetName); + + +/** + * Sets the name of a thread. + * + * @returns iprt status code. + * @param Thread Thread handle of the thread to query the name of. + * @param pszName The thread name. + */ +RTDECL(int) RTThreadSetName(RTTHREAD Thread, const char *pszName) +{ + /* + * Validate input. + */ + PRTTHREADINT pThread; + size_t cchName = strlen(pszName); + if (cchName >= RTTHREAD_NAME_LEN) + { + AssertMsgFailed(("pszName=%s is too long, max is %d\n", pszName, RTTHREAD_NAME_LEN - 1)); + return VERR_INVALID_PARAMETER; + } + pThread = rtThreadGet(Thread); + if (!pThread) + return VERR_INVALID_HANDLE; + + /* + * Update the name. + */ + pThread->szName[cchName] = '\0'; /* paranoia */ + memcpy(pThread->szName, pszName, cchName); + rtThreadRelease(pThread); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTThreadSetName); + + +/** + * Checks if the specified thread is the main thread. + * + * @returns true if it is, false if it isn't. + * + * @param hThread The thread handle. + * + * @remarks This function may not return the correct value when rtR3Init was + * called on a thread of the than the main one. This could for + * instance happen when the DLL/DYLIB/SO containing IPRT is dynamically + * loaded at run time by a different thread. + */ +RTDECL(bool) RTThreadIsMain(RTTHREAD hThread) +{ + PRTTHREADINT pThread = rtThreadGet(hThread); + if (pThread) + { + bool fRc = !!(pThread->fIntFlags & RTTHREADINT_FLAGS_MAIN); + rtThreadRelease(pThread); + return fRc; + } + return false; +} +RT_EXPORT_SYMBOL(RTThreadIsMain); + + +RTDECL(bool) RTThreadIsSelfAlive(void) +{ + if (g_frtThreadInitialized) + { + RTTHREAD hSelf = RTThreadSelf(); + if (hSelf != NIL_RTTHREAD) + { + /* + * Inspect the thread state. ASSUMES thread state order. + */ + RTTHREADSTATE enmState = rtThreadGetState(hSelf); + if ( enmState >= RTTHREADSTATE_RUNNING + && enmState <= RTTHREADSTATE_END) + return true; + } + } + return false; +} +RT_EXPORT_SYMBOL(RTThreadIsSelfAlive); + + +RTDECL(bool) RTThreadIsSelfKnown(void) +{ + if (g_frtThreadInitialized) + { + RTTHREAD hSelf = RTThreadSelf(); + if (hSelf != NIL_RTTHREAD) + return true; + } + return false; +} +RT_EXPORT_SYMBOL(RTThreadIsSelfKnown); + + +RTDECL(bool) RTThreadIsInitialized(void) +{ + return g_frtThreadInitialized; +} +RT_EXPORT_SYMBOL(RTThreadIsInitialized); + + +/** + * Signal the user event. + * + * @returns iprt status code. + */ +RTDECL(int) RTThreadUserSignal(RTTHREAD Thread) +{ + int rc; + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + rc = RTSemEventMultiSignal(pThread->EventUser); + rtThreadRelease(pThread); + } + else + rc = VERR_INVALID_HANDLE; + return rc; +} +RT_EXPORT_SYMBOL(RTThreadUserSignal); + + +/** + * Wait for the user event, resume on interruption. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + */ +RTDECL(int) RTThreadUserWait(RTTHREAD Thread, RTMSINTERVAL cMillies) +{ + int rc; + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + rc = RTSemEventMultiWait(pThread->EventUser, cMillies); + rtThreadRelease(pThread); + } + else + rc = VERR_INVALID_HANDLE; + return rc; +} +RT_EXPORT_SYMBOL(RTThreadUserWait); + + +/** + * Wait for the user event, return on interruption. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + */ +RTDECL(int) RTThreadUserWaitNoResume(RTTHREAD Thread, RTMSINTERVAL cMillies) +{ + int rc; + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + rc = RTSemEventMultiWaitNoResume(pThread->EventUser, cMillies); + rtThreadRelease(pThread); + } + else + rc = VERR_INVALID_HANDLE; + return rc; +} +RT_EXPORT_SYMBOL(RTThreadUserWaitNoResume); + + +/** + * Reset the user event. + * + * @returns iprt status code. + * @param Thread The thread to reset. + */ +RTDECL(int) RTThreadUserReset(RTTHREAD Thread) +{ + int rc; + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + rc = RTSemEventMultiReset(pThread->EventUser); + rtThreadRelease(pThread); + } + else + rc = VERR_INVALID_HANDLE; + return rc; +} +RT_EXPORT_SYMBOL(RTThreadUserReset); + + +/** + * Wait for the thread to terminate. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + * @param prc Where to store the return code of the thread. Optional. + * @param fAutoResume Whether or not to resume the wait on VERR_INTERRUPTED. + */ +static int rtThreadWait(RTTHREAD Thread, RTMSINTERVAL cMillies, int *prc, bool fAutoResume) +{ + int rc = VERR_INVALID_HANDLE; + if (Thread != NIL_RTTHREAD) + { + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + if (pThread->fFlags & RTTHREADFLAGS_WAITABLE) + { +#if defined(IN_RING3) && defined(RT_OS_WINDOWS) + if (RT_LIKELY(rtThreadNativeIsAliveKludge(pThread))) +#endif + { + if (fAutoResume) + rc = RTSemEventMultiWait(pThread->EventTerminated, cMillies); + else + rc = RTSemEventMultiWaitNoResume(pThread->EventTerminated, cMillies); + } +#if defined(IN_RING3) && defined(RT_OS_WINDOWS) + else + { + rc = VINF_SUCCESS; + if (pThread->rc == VERR_PROCESS_RUNNING) + pThread->rc = VERR_THREAD_IS_DEAD; + } +#endif + if (RT_SUCCESS(rc)) + { + if (prc) + *prc = pThread->rc; + + /* + * If the thread is marked as waitable, we'll do one additional + * release in order to free up the thread structure (see how we + * init cRef in rtThreadAlloc()). + */ + if (ASMAtomicBitTestAndClear(&pThread->fFlags, RTTHREADFLAGS_WAITABLE_BIT)) + { + rtThreadRelease(pThread); +#ifdef IN_RING0 + /* + * IPRT termination kludge. Call native code to make sure + * the last thread is really out of IPRT to prevent it from + * crashing after we destroyed the spinlock in rtThreadTerm. + */ + if ( ASMAtomicReadU32(&g_cThreadInTree) == 1 + && ASMAtomicReadU32(&pThread->cRefs) > 1) + rtThreadNativeWaitKludge(pThread); +#endif + } + } + } + else + { + rc = VERR_THREAD_NOT_WAITABLE; + AssertRC(rc); + } + rtThreadRelease(pThread); + } + } + return rc; +} + + +/** + * Wait for the thread to terminate, resume on interruption. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + * @param prc Where to store the return code of the thread. Optional. + */ +RTDECL(int) RTThreadWait(RTTHREAD Thread, RTMSINTERVAL cMillies, int *prc) +{ + int rc = rtThreadWait(Thread, cMillies, prc, true); + Assert(rc != VERR_INTERRUPTED); + return rc; +} +RT_EXPORT_SYMBOL(RTThreadWait); + + +/** + * Wait for the thread to terminate, return on interruption. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + * @param prc Where to store the return code of the thread. Optional. + */ +RTDECL(int) RTThreadWaitNoResume(RTTHREAD Thread, RTMSINTERVAL cMillies, int *prc) +{ + return rtThreadWait(Thread, cMillies, prc, false); +} +RT_EXPORT_SYMBOL(RTThreadWaitNoResume); + + +/** + * Changes the type of the specified thread. + * + * @returns iprt status code. + * @param Thread The thread which type should be changed. + * @param enmType The new thread type. + */ +RTDECL(int) RTThreadSetType(RTTHREAD Thread, RTTHREADTYPE enmType) +{ + /* + * Validate input. + */ + int rc; + if ( enmType > RTTHREADTYPE_INVALID + && enmType < RTTHREADTYPE_END) + { + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + if (rtThreadIsAlive(pThread)) + { + /* + * Do the job. + */ + RT_THREAD_LOCK_RW(); + rc = rtThreadNativeSetPriority(pThread, enmType); + if (RT_SUCCESS(rc)) + ASMAtomicXchgSize(&pThread->enmType, enmType); + RT_THREAD_UNLOCK_RW(); + if (RT_FAILURE(rc)) + Log(("RTThreadSetType: failed on thread %p (%s), rc=%Rrc!!!\n", Thread, pThread->szName, rc)); + } + else + rc = VERR_THREAD_IS_DEAD; + rtThreadRelease(pThread); + } + else + rc = VERR_INVALID_HANDLE; + } + else + { + AssertMsgFailed(("enmType=%d\n", enmType)); + rc = VERR_INVALID_PARAMETER; + } + return rc; +} +RT_EXPORT_SYMBOL(RTThreadSetType); + + +/** + * Gets the type of the specified thread. + * + * @returns The thread type. + * @returns RTTHREADTYPE_INVALID if the thread handle is invalid. + * @param Thread The thread in question. + */ +RTDECL(RTTHREADTYPE) RTThreadGetType(RTTHREAD Thread) +{ + RTTHREADTYPE enmType = RTTHREADTYPE_INVALID; + PRTTHREADINT pThread = rtThreadGet(Thread); + if (pThread) + { + enmType = pThread->enmType; + rtThreadRelease(pThread); + } + return enmType; +} +RT_EXPORT_SYMBOL(RTThreadGetType); + +#ifdef IN_RING3 + +/** + * Recalculates scheduling attributes for the default process + * priority using the specified priority type for the calling thread. + * + * The scheduling attributes are targeted at threads and they are protected + * by the thread read-write semaphore, that's why RTProc is forwarding the + * operation to RTThread. + * + * @returns iprt status code. + * @remarks Will only work for strict builds. + */ +int rtThreadDoCalcDefaultPriority(RTTHREADTYPE enmType) +{ + RT_THREAD_LOCK_RW(); + int rc = rtSchedNativeCalcDefaultPriority(enmType); + RT_THREAD_UNLOCK_RW(); + return rc; +} + + +/** + * Thread enumerator - sets the priority of one thread. + * + * @returns 0 to continue. + * @returns !0 to stop. In our case a VERR_ code. + * @param pNode The thread node. + * @param pvUser The new priority. + */ +static DECLCALLBACK(int) rtThreadSetPriorityOne(PAVLPVNODECORE pNode, void *pvUser) +{ + PRTTHREADINT pThread = (PRTTHREADINT)pNode; + if (!rtThreadIsAlive(pThread)) + return VINF_SUCCESS; + int rc = rtThreadNativeSetPriority(pThread, pThread->enmType); + if (RT_SUCCESS(rc)) /* hide any warnings */ + return VINF_SUCCESS; + NOREF(pvUser); + return rc; +} + + +/** + * Attempts to alter the priority of the current process. + * + * The scheduling attributes are targeted at threads and they are protected + * by the thread read-write semaphore, that's why RTProc is forwarding the + * operation to RTThread. This operation also involves updating all thread + * which is much faster done from RTThread. + * + * @returns iprt status code. + * @param enmPriority The new priority. + */ +DECLHIDDEN(int) rtThreadDoSetProcPriority(RTPROCPRIORITY enmPriority) +{ + LogFlow(("rtThreadDoSetProcPriority: enmPriority=%d\n", enmPriority)); + + /* + * First validate that we're allowed by the OS to use all the + * scheduling attributes defined by the specified process priority. + */ + RT_THREAD_LOCK_RW(); + int rc = rtProcNativeSetPriority(enmPriority); + if (RT_SUCCESS(rc)) + { + /* + * Update the priority of existing thread. + */ + rc = RTAvlPVDoWithAll(&g_ThreadTree, true, rtThreadSetPriorityOne, NULL); + if (RT_SUCCESS(rc)) + ASMAtomicXchgSize(&g_enmProcessPriority, enmPriority); + else + { + /* + * Failed, restore the priority. + */ + rtProcNativeSetPriority(g_enmProcessPriority); + RTAvlPVDoWithAll(&g_ThreadTree, true, rtThreadSetPriorityOne, NULL); + } + } + RT_THREAD_UNLOCK_RW(); + LogFlow(("rtThreadDoSetProcPriority: returns %Rrc\n", rc)); + return rc; +} + + +/** + * Change the thread state to blocking. + * + * @param hThread The current thread. + * @param enmState The sleep state. + * @param fReallySleeping Really going to sleep now. + */ +RTDECL(void) RTThreadBlocking(RTTHREAD hThread, RTTHREADSTATE enmState, bool fReallySleeping) +{ + Assert(RTTHREAD_IS_SLEEPING(enmState)); + PRTTHREADINT pThread = hThread; + if (pThread != NIL_RTTHREAD) + { + Assert(pThread == RTThreadSelf()); + if (rtThreadGetState(pThread) == RTTHREADSTATE_RUNNING) + rtThreadSetState(pThread, enmState); + ASMAtomicWriteBool(&pThread->fReallySleeping, fReallySleeping); + } +} +RT_EXPORT_SYMBOL(RTThreadBlocking); + + +/** + * Unblocks a thread. + * + * This function is paired with rtThreadBlocking. + * + * @param hThread The current thread. + * @param enmCurState The current state, used to check for nested blocking. + * The new state will be running. + */ +RTDECL(void) RTThreadUnblocked(RTTHREAD hThread, RTTHREADSTATE enmCurState) +{ + PRTTHREADINT pThread = hThread; + if (pThread != NIL_RTTHREAD) + { + Assert(pThread == RTThreadSelf()); + ASMAtomicWriteBool(&pThread->fReallySleeping, false); + + RTTHREADSTATE enmActualState = rtThreadGetState(pThread); + if (enmActualState == enmCurState) + { + rtThreadSetState(pThread, RTTHREADSTATE_RUNNING); + if ( pThread->LockValidator.pRec + && pThread->LockValidator.enmRecState == enmCurState) + ASMAtomicWriteNullPtr(&pThread->LockValidator.pRec); + } + /* This is a bit ugly... :-/ */ + else if ( ( enmActualState == RTTHREADSTATE_TERMINATED + || enmActualState == RTTHREADSTATE_INITIALIZING) + && pThread->LockValidator.pRec) + ASMAtomicWriteNullPtr(&pThread->LockValidator.pRec); + Assert( pThread->LockValidator.pRec == NULL + || RTTHREAD_IS_SLEEPING(enmActualState)); + } +} +RT_EXPORT_SYMBOL(RTThreadUnblocked); + + +/** + * Get the current thread state. + * + * @returns The thread state. + * @param hThread The thread. + */ +RTDECL(RTTHREADSTATE) RTThreadGetState(RTTHREAD hThread) +{ + RTTHREADSTATE enmState = RTTHREADSTATE_INVALID; + PRTTHREADINT pThread = rtThreadGet(hThread); + if (pThread) + { + enmState = rtThreadGetState(pThread); + rtThreadRelease(pThread); + } + return enmState; +} +RT_EXPORT_SYMBOL(RTThreadGetState); + + +RTDECL(RTTHREADSTATE) RTThreadGetReallySleeping(RTTHREAD hThread) +{ + RTTHREADSTATE enmState = RTTHREADSTATE_INVALID; + PRTTHREADINT pThread = rtThreadGet(hThread); + if (pThread) + { + enmState = rtThreadGetState(pThread); + if (!ASMAtomicUoReadBool(&pThread->fReallySleeping)) + enmState = RTTHREADSTATE_RUNNING; + rtThreadRelease(pThread); + } + return enmState; +} +RT_EXPORT_SYMBOL(RTThreadGetReallySleeping); + + +/** + * Translate a thread state into a string. + * + * @returns Pointer to a read-only string containing the state name. + * @param enmState The state. + */ +RTDECL(const char *) RTThreadStateName(RTTHREADSTATE enmState) +{ + switch (enmState) + { + case RTTHREADSTATE_INVALID: return "INVALID"; + case RTTHREADSTATE_INITIALIZING: return "INITIALIZING"; + case RTTHREADSTATE_TERMINATED: return "TERMINATED"; + case RTTHREADSTATE_RUNNING: return "RUNNING"; + case RTTHREADSTATE_CRITSECT: return "CRITSECT"; + case RTTHREADSTATE_EVENT: return "EVENT"; + case RTTHREADSTATE_EVENT_MULTI: return "EVENT_MULTI"; + case RTTHREADSTATE_FAST_MUTEX: return "FAST_MUTEX"; + case RTTHREADSTATE_MUTEX: return "MUTEX"; + case RTTHREADSTATE_RW_READ: return "RW_READ"; + case RTTHREADSTATE_RW_WRITE: return "RW_WRITE"; + case RTTHREADSTATE_SLEEP: return "SLEEP"; + case RTTHREADSTATE_SPIN_MUTEX: return "SPIN_MUTEX"; + default: return "UnknownThreadState"; + } +} +RT_EXPORT_SYMBOL(RTThreadStateName); + +#endif /* IN_RING3 */ +#ifdef IPRT_WITH_GENERIC_TLS + +/** + * Thread enumerator - clears a TLS entry. + * + * @returns 0. + * @param pNode The thread node. + * @param pvUser The TLS index. + */ +static DECLCALLBACK(int) rtThreadClearTlsEntryCallback(PAVLPVNODECORE pNode, void *pvUser) +{ + PRTTHREADINT pThread = (PRTTHREADINT)pNode; + RTTLS iTls = (RTTLS)(uintptr_t)pvUser; + ASMAtomicWriteNullPtr(&pThread->apvTlsEntries[iTls]); + return 0; +} + + +/** + * Helper for the generic TLS implementation that clears a given TLS + * entry on all threads. + * + * @param iTls The TLS entry. (valid) + */ +DECLHIDDEN(void) rtThreadClearTlsEntry(RTTLS iTls) +{ + RT_THREAD_LOCK_RD(); + RTAvlPVDoWithAll(&g_ThreadTree, true /* fFromLeft*/, rtThreadClearTlsEntryCallback, (void *)(uintptr_t)iTls); + RT_THREAD_UNLOCK_RD(); +} + +#endif /* IPRT_WITH_GENERIC_TLS */ + + +#if defined(RT_OS_WINDOWS) && defined(IN_RING3) + +/** + * Thread enumeration callback for RTThreadNameThreads + */ +static DECLCALLBACK(int) rtThreadNameThreadCallback(PAVLPVNODECORE pNode, void *pvUser) +{ + PRTTHREADINT pThread = (PRTTHREADINT)pNode; + rtThreadNativeInformDebugger(pThread); + RT_NOREF_PV(pvUser); + return 0; +} + +/** + * A function that can be called from the windows debugger to get the names of + * all threads when attaching to a process. + * + * Usage: .call VBoxRT!RTThreadNameThreads() + * + * @returns 0 + * @remarks Do not call from source code as it skips locks. + */ +extern "C" RTDECL(int) RTThreadNameThreads(void); +RTDECL(int) RTThreadNameThreads(void) +{ + return RTAvlPVDoWithAll(&g_ThreadTree, true /* fFromLeft*/, rtThreadNameThreadCallback, NULL); +} + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/RTStrCat.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/RTStrCat.c @@ -0,0 +1,56 @@ +/* $Id: RTStrCat.cpp $ */ +/** @file + * IPRT - RTStrCat. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(int) RTStrCat(char *pszDst, size_t cbDst, const char *pszSrc) +{ + char *pszDst2 = RTStrEnd(pszDst, cbDst); + AssertReturn(pszDst2, VERR_INVALID_PARAMETER); + cbDst -= pszDst2 - pszDst; + + size_t cchSrc = strlen(pszSrc); + if (RT_LIKELY(cchSrc < cbDst)) + { + memcpy(pszDst2, pszSrc, cchSrc + 1); + return VINF_SUCCESS; + } + + if (cbDst != 0) + { + memcpy(pszDst2, pszSrc, cbDst - 1); + pszDst2[cbDst - 1] = '\0'; + } + return VERR_BUFFER_OVERFLOW; +} +RT_EXPORT_SYMBOL(RTStrCat); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/RTStrCopy.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/RTStrCopy.c @@ -0,0 +1,52 @@ +/* $Id: RTStrCopy.cpp $ */ +/** @file + * IPRT - RTStrCopy. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(int) RTStrCopy(char *pszDst, size_t cbDst, const char *pszSrc) +{ + size_t cchSrc = strlen(pszSrc); + if (RT_LIKELY(cchSrc < cbDst)) + { + memcpy(pszDst, pszSrc, cchSrc + 1); + return VINF_SUCCESS; + } + + if (cbDst != 0) + { + memcpy(pszDst, pszSrc, cbDst - 1); + pszDst[cbDst - 1] = '\0'; + } + return VERR_BUFFER_OVERFLOW; +} +RT_EXPORT_SYMBOL(RTStrCopy); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/RTStrCopyEx.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/RTStrCopyEx.c @@ -0,0 +1,54 @@ +/* $Id: RTStrCopyEx.cpp $ */ +/** @file + * IPRT - RTStrCopyEx. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(int) RTStrCopyEx(char *pszDst, size_t cbDst, const char *pszSrc, size_t cchMaxSrc) +{ + const char *pszSrcEol = RTStrEnd(pszSrc, cchMaxSrc); + size_t cchSrc = pszSrcEol ? (size_t)(pszSrcEol - pszSrc) : cchMaxSrc; + if (RT_LIKELY(cchSrc < cbDst)) + { + memcpy(pszDst, pszSrc, cchSrc); + pszDst[cchSrc] = '\0'; + return VINF_SUCCESS; + } + + if (cbDst != 0) + { + memcpy(pszDst, pszSrc, cbDst - 1); + pszDst[cbDst - 1] = '\0'; + } + return VERR_BUFFER_OVERFLOW; +} +RT_EXPORT_SYMBOL(RTStrCopyEx); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/RTStrCopyP.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/RTStrCopyP.c @@ -0,0 +1,58 @@ +/* $Id: RTStrCopyP.cpp $ */ +/** @file + * IPRT - RTStrCopyP. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(int) RTStrCopyP(char **ppszDst, size_t *pcbDst, const char *pszSrc) +{ + size_t const cchSrc = strlen(pszSrc); + size_t const cbDst = *pcbDst; + char *pszDst = *ppszDst; + if (RT_LIKELY(cchSrc < cbDst)) + { + memcpy(pszDst, pszSrc, cchSrc + 1); + *ppszDst = pszDst += cchSrc; + *pcbDst -= cchSrc; + return VINF_SUCCESS; + } + + if (cbDst != 0) + { + memcpy(*ppszDst, pszSrc, cbDst - 1); + *ppszDst = pszDst += cbDst - 1; + *pszDst = '\0'; + *pcbDst = 1; + } + return VERR_BUFFER_OVERFLOW; +} +RT_EXPORT_SYMBOL(RTStrCopyP); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/strformat.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/strformat.c @@ -0,0 +1,857 @@ +/* $Id: strformat.cpp $ */ +/** @file + * IPRT - String Formatter. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Defined Constants * +*********************************************************************************************************************************/ +#define ISDIGIT(c) ((c) >= '0' && (c) <= '9') +/*#define MAX(a, b) ((a) >= (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_STRING +#include +#include "internal/iprt.h" + +#include +#ifdef IN_RING3 +# include +# include +# include +#endif +#include +#include +#include "internal/string.h" + +/* Wrappers for converting to iprt facilities. */ +#define SSToDS(ptr) ptr +#define kASSERT Assert +#define KENDIAN_LITTLE 1 +#define KENDIAN KENDIAN_LITTLE +#define KSIZE size_t +typedef struct +{ + uint32_t ulLo; + uint32_t ulHi; +} KSIZE64; + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static unsigned _strnlen(const char *psz, unsigned cchMax); +static unsigned _strnlenUtf16(PCRTUTF16 pwsz, unsigned cchMax); +static int rtStrFormatNumber(char *psz, KSIZE64 ullValue, unsigned int uiBase, signed int cchWidth, signed int cchPrecision, unsigned int fFlags); + + +/** + * Finds the length of a string up to cchMax. + * @returns Length. + * @param psz Pointer to string. + * @param cchMax Max length. + */ +static unsigned _strnlen(const char *psz, unsigned cchMax) +{ + const char *pszC = psz; + + while (cchMax-- > 0 && *psz != '\0') + psz++; + + return (unsigned)(psz - pszC); +} + + +/** + * Finds the length of a string up to cchMax. + * @returns Length. + * @param pwsz Pointer to string. + * @param cchMax Max length. + */ +static unsigned _strnlenUtf16(PCRTUTF16 pwsz, unsigned cchMax) +{ +#ifdef IN_RING3 + unsigned cwc = 0; + while (cchMax-- > 0) + { + RTUNICP cp; + int rc = RTUtf16GetCpEx(&pwsz, &cp); + AssertRC(rc); + if (RT_FAILURE(rc) || !cp) + break; + cwc++; + } + return cwc; +#else /* !IN_RING3 */ + PCRTUTF16 pwszC = pwsz; + + while (cchMax-- > 0 && *pwsz != '\0') + pwsz++; + + return (unsigned)(pwsz - pwszC); +#endif /* !IN_RING3 */ +} + + +/** + * Finds the length of a string up to cchMax. + * @returns Length. + * @param pusz Pointer to string. + * @param cchMax Max length. + */ +static unsigned _strnlenUni(PCRTUNICP pusz, unsigned cchMax) +{ + PCRTUNICP puszC = pusz; + + while (cchMax-- > 0 && *pusz != '\0') + pusz++; + + return (unsigned)(pusz - puszC); +} + + +/** + * Formats an integer number according to the parameters. + * + * @returns Length of the formatted number. + * @param psz Pointer to output string buffer of sufficient size. + * @param u64Value Value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags (NTFS_*). + */ +RTDECL(int) RTStrFormatNumber(char *psz, uint64_t u64Value, unsigned int uiBase, signed int cchWidth, signed int cchPrecision, + unsigned int fFlags) +{ + return rtStrFormatNumber(psz, *(KSIZE64 *)(void *)&u64Value, uiBase, cchWidth, cchPrecision, fFlags); +} +RT_EXPORT_SYMBOL(RTStrFormatNumber); + + + +/** + * Formats an integer number according to the parameters. + * + * @returns Length of the number. + * @param psz Pointer to output string. + * @param ullValue Value. Using the high part is optional. + * @param uiBase Number representation base. + * @param cchWidth Width + * @param cchPrecision Precision. + * @param fFlags Flags (NTFS_*). + */ +static int rtStrFormatNumber(char *psz, KSIZE64 ullValue, unsigned int uiBase, signed int cchWidth, signed int cchPrecision, + unsigned int fFlags) +{ + const char *pachDigits = "0123456789abcdef"; + char *pszStart = psz; + int cchMax; + int cchValue; + unsigned long ul; + int i; + int j; + + /* + * Validate and adjust input... + */ + Assert(uiBase >= 2 && uiBase <= 16); + if (fFlags & RTSTR_F_CAPITAL) + pachDigits = "0123456789ABCDEF"; + if (fFlags & RTSTR_F_LEFT) + fFlags &= ~RTSTR_F_ZEROPAD; + if ( (fFlags & RTSTR_F_THOUSAND_SEP) + && ( uiBase != 10 + || (fFlags & RTSTR_F_ZEROPAD))) /** @todo implement RTSTR_F_ZEROPAD + RTSTR_F_THOUSAND_SEP. */ + fFlags &= ~RTSTR_F_THOUSAND_SEP; + + /* + * Determine value length + */ + cchValue = 0; + if (ullValue.ulHi || (fFlags & RTSTR_F_64BIT)) + { + uint64_t u64 = *(uint64_t *)(void *)&ullValue; + if ((fFlags & RTSTR_F_VALSIGNED) && (ullValue.ulHi & 0x80000000)) + u64 = -(int64_t)u64; + do + { + cchValue++; + u64 /= uiBase; + } while (u64); + } + else + { + ul = (fFlags & RTSTR_F_VALSIGNED) && (ullValue.ulLo & 0x80000000) ? -(int32_t)ullValue.ulLo : ullValue.ulLo; + do + { + cchValue++; + ul /= uiBase; + } while (ul); + } + if (fFlags & RTSTR_F_THOUSAND_SEP) + { + if (cchValue <= 3) + fFlags &= ~RTSTR_F_THOUSAND_SEP; + else + cchValue += cchValue / 3 - (cchValue % 3 == 0); + } + + /* + * Sign (+/-). + */ + i = 0; + if (fFlags & RTSTR_F_VALSIGNED) + { + if ((ullValue.ulHi || (fFlags & RTSTR_F_64BIT) ? ullValue.ulHi : ullValue.ulLo) & 0x80000000) + { + ullValue.ulLo = -(int32_t)ullValue.ulLo; + if (ullValue.ulHi) + ullValue.ulHi = ~ullValue.ulHi; + psz[i++] = '-'; + } + else if (fFlags & (RTSTR_F_PLUS | RTSTR_F_BLANK)) + psz[i++] = (char)(fFlags & RTSTR_F_PLUS ? '+' : ' '); + } + + /* + * Special (0/0x). + */ + if ((fFlags & RTSTR_F_SPECIAL) && (uiBase % 8) == 0) + { + psz[i++] = '0'; + if (uiBase == 16) + psz[i++] = (char)(fFlags & RTSTR_F_CAPITAL ? 'X' : 'x'); + } + + /* + * width - only if ZEROPAD + */ + cchMax = 64 - (cchValue + i + 1); /* HACK! 64 bytes seems to be the usual buffer size... */ + cchWidth -= i + cchValue; + if (fFlags & RTSTR_F_ZEROPAD) + while (--cchWidth >= 0 && i < cchMax) + { + AssertBreak(i < cchMax); + psz[i++] = '0'; + cchPrecision--; + } + else if (!(fFlags & RTSTR_F_LEFT) && cchWidth > 0) + { + AssertStmt(cchWidth < cchMax, cchWidth = cchMax - 1); + for (j = i - 1; j >= 0; j--) + psz[cchWidth + j] = psz[j]; + for (j = 0; j < cchWidth; j++) + psz[j] = ' '; + i += cchWidth; + } + + /* + * precision + */ + while (--cchPrecision >= cchValue) + { + AssertBreak(i < cchMax); + psz[i++] = '0'; + } + + psz += i; + + /* + * write number - not good enough but it works + */ + psz += cchValue; + i = -1; + if (ullValue.ulHi || (fFlags & RTSTR_F_64BIT)) + { + uint64_t u64 = *(uint64_t *)(void *)&ullValue; + if (fFlags & RTSTR_F_THOUSAND_SEP) + { + do + { + if ((-i - 1) % 4 == 3) + psz[i--] = ' '; + psz[i--] = pachDigits[u64 % uiBase]; + u64 /= uiBase; + } while (u64); + } + else + { + do + { + psz[i--] = pachDigits[u64 % uiBase]; + u64 /= uiBase; + } while (u64); + } + } + else + { + ul = (fFlags & RTSTR_F_VALSIGNED) && (ullValue.ulLo & 0x80000000) ? -(int32_t)ullValue.ulLo : ullValue.ulLo; + if (fFlags & RTSTR_F_THOUSAND_SEP) + { + do + { + if ((-i - 1) % 4 == 3) + psz[i--] = ' '; + psz[i--] = pachDigits[ul % uiBase]; + ul /= uiBase; + } while (ul); + } + else + { + do + { + psz[i--] = pachDigits[ul % uiBase]; + ul /= uiBase; + } while (ul); + } + } + + /* + * width if RTSTR_F_LEFT + */ + if (fFlags & RTSTR_F_LEFT) + while (--cchWidth >= 0) + *psz++ = ' '; + + *psz = '\0'; + return (unsigned)(psz - pszStart); +} + + +/** + * Partial implementation of a printf like formatter. + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string an it's length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Format string. + * @param InArgs Argument list. + */ +RTDECL(size_t) RTStrFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, + const char *pszFormat, va_list InArgs) +{ + char szTmp[64]; /* Worker functions assumes 64 byte buffer! Ugly but faster. */ + va_list args; + KSIZE cch = 0; + const char *pszStartOutput = pszFormat; + + va_copy(args, InArgs); /* make a copy so we can reference it (AMD64 / gcc). */ + + while (*pszFormat != '\0') + { + if (*pszFormat == '%') + { + /* output pending string. */ + if (pszStartOutput != pszFormat) + cch += pfnOutput(pvArgOutput, pszStartOutput, pszFormat - pszStartOutput); + + /* skip '%' */ + pszFormat++; + if (*pszFormat == '%') /* '%%'-> '%' */ + pszStartOutput = pszFormat++; + else + { + unsigned int fFlags = 0; + int cchWidth = -1; + int cchPrecision = -1; + unsigned int uBase = 10; + char chArgSize; + + /* flags */ + for (;;) + { + switch (*pszFormat++) + { + case '#': fFlags |= RTSTR_F_SPECIAL; continue; + case '-': fFlags |= RTSTR_F_LEFT; continue; + case '+': fFlags |= RTSTR_F_PLUS; continue; + case ' ': fFlags |= RTSTR_F_BLANK; continue; + case '0': fFlags |= RTSTR_F_ZEROPAD; continue; + case '\'': fFlags |= RTSTR_F_THOUSAND_SEP; continue; + } + pszFormat--; + break; + } + + /* width */ + if (ISDIGIT(*pszFormat)) + { + for (cchWidth = 0; ISDIGIT(*pszFormat); pszFormat++) + { + cchWidth *= 10; + cchWidth += *pszFormat - '0'; + } + fFlags |= RTSTR_F_WIDTH; + } + else if (*pszFormat == '*') + { + pszFormat++; + cchWidth = va_arg(args, int); + if (cchWidth < 0) + { + cchWidth = -cchWidth; + fFlags |= RTSTR_F_LEFT; + } + fFlags |= RTSTR_F_WIDTH; + } + + /* precision */ + if (*pszFormat == '.') + { + pszFormat++; + if (ISDIGIT(*pszFormat)) + { + for (cchPrecision = 0; ISDIGIT(*pszFormat); pszFormat++) + { + cchPrecision *= 10; + cchPrecision += *pszFormat - '0'; + } + + } + else if (*pszFormat == '*') + { + pszFormat++; + cchPrecision = va_arg(args, int); + } + if (cchPrecision < 0) + cchPrecision = 0; + fFlags |= RTSTR_F_PRECISION; + } + + /* + * Argument size. + */ + chArgSize = *pszFormat; + switch (chArgSize) + { + default: + chArgSize = 0; + break; + + case 'z': + case 'L': + case 'j': + case 't': + pszFormat++; + break; + + case 'l': + pszFormat++; + if (*pszFormat == 'l') + { + chArgSize = 'L'; + pszFormat++; + } + break; + + case 'h': + pszFormat++; + if (*pszFormat == 'h') + { + chArgSize = 'H'; + pszFormat++; + } + break; + + case 'I': /* Used by Win32/64 compilers. */ + if ( pszFormat[1] == '6' + && pszFormat[2] == '4') + { + pszFormat += 3; + chArgSize = 'L'; + } + else if ( pszFormat[1] == '3' + && pszFormat[2] == '2') + { + pszFormat += 3; + chArgSize = 0; + } + else + { + pszFormat += 1; + chArgSize = 'j'; + } + break; + + case 'q': /* Used on BSD platforms. */ + pszFormat++; + chArgSize = 'L'; + break; + } + + /* + * The type. + */ + switch (*pszFormat++) + { + /* char */ + case 'c': + { + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth > 0) + cch += pfnOutput(pvArgOutput, " ", 1); + + szTmp[0] = (char)va_arg(args, int); + szTmp[1] = '\0'; /* Some output functions wants terminated strings. */ + cch += pfnOutput(pvArgOutput, SSToDS(&szTmp[0]), 1); + + while (--cchWidth > 0) + cch += pfnOutput(pvArgOutput, " ", 1); + break; + } + + case 'S': /* Legacy, conversion done by streams now. */ + case 's': + { + if (chArgSize == 'l') + { + /* utf-16 -> utf-8 */ + int cchStr; + PCRTUTF16 pwszStr = va_arg(args, PRTUTF16); + + if (!VALID_PTR(pwszStr)) + { + static RTUTF16 s_wszNull[] = {'<', 'N', 'U', 'L', 'L', '>', '\0' }; + pwszStr = s_wszNull; + } + cchStr = _strnlenUtf16(pwszStr, (unsigned)cchPrecision); + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth >= cchStr) + cch += pfnOutput(pvArgOutput, " ", 1); + cchWidth -= cchStr; + while (cchStr-- > 0) + { +/** @todo \#ifndef IN_RC*/ +#ifdef IN_RING3 + RTUNICP Cp; + RTUtf16GetCpEx(&pwszStr, &Cp); + char *pszEnd = RTStrPutCp(szTmp, Cp); + *pszEnd = '\0'; + cch += pfnOutput(pvArgOutput, szTmp, pszEnd - szTmp); +#else + char ch = (char)*pwszStr++; + cch += pfnOutput(pvArgOutput, &ch, 1); +#endif + } + while (--cchWidth >= 0) + cch += pfnOutput(pvArgOutput, " ", 1); + } + else if (chArgSize == 'L') + { + /* unicp -> utf8 */ + int cchStr; + PCRTUNICP puszStr = va_arg(args, PCRTUNICP); + + if (!VALID_PTR(puszStr)) + { + static RTUNICP s_uszNull[] = {'<', 'N', 'U', 'L', 'L', '>', '\0' }; + puszStr = s_uszNull; + } + cchStr = _strnlenUni(puszStr, (unsigned)cchPrecision); + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth >= cchStr) + cch += pfnOutput(pvArgOutput, " ", 1); + + cchWidth -= cchStr; + while (cchStr-- > 0) + { +/** @todo \#ifndef IN_RC*/ +#ifdef IN_RING3 + char *pszEnd = RTStrPutCp(szTmp, *puszStr++); + cch += pfnOutput(pvArgOutput, szTmp, pszEnd - szTmp); +#else + char ch = (char)*puszStr++; + cch += pfnOutput(pvArgOutput, &ch, 1); +#endif + } + while (--cchWidth >= 0) + cch += pfnOutput(pvArgOutput, " ", 1); + } + else + { + int cchStr; + const char *pszStr = va_arg(args, char*); + + if (!VALID_PTR(pszStr)) + pszStr = ""; + cchStr = _strnlen(pszStr, (unsigned)cchPrecision); + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth >= cchStr) + cch += pfnOutput(pvArgOutput, " ", 1); + + cch += pfnOutput(pvArgOutput, pszStr, cchStr); + + while (--cchWidth >= cchStr) + cch += pfnOutput(pvArgOutput, " ", 1); + } + break; + } + + /*-----------------*/ + /* integer/pointer */ + /*-----------------*/ + case 'd': + case 'i': + case 'o': + case 'p': + case 'u': + case 'x': + case 'X': + { + int cchNum; + uint64_t u64Value; + + switch (pszFormat[-1]) + { + case 'd': /* signed decimal integer */ + case 'i': + fFlags |= RTSTR_F_VALSIGNED; + break; + + case 'o': + uBase = 8; + break; + + case 'p': + fFlags |= RTSTR_F_ZEROPAD; /* Note not standard behaviour (but I like it this way!) */ + uBase = 16; + if (cchWidth < 0) + cchWidth = sizeof(char *) * 2; + break; + + case 'u': + uBase = 10; + break; + + case 'X': + fFlags |= RTSTR_F_CAPITAL; + RT_FALL_THRU(); + case 'x': + uBase = 16; + break; + } + + if (pszFormat[-1] == 'p') + u64Value = va_arg(args, uintptr_t); + else if (fFlags & RTSTR_F_VALSIGNED) + { + if (chArgSize == 'L') + { + u64Value = va_arg(args, int64_t); + fFlags |= RTSTR_F_64BIT; + } + else if (chArgSize == 'l') + { + u64Value = va_arg(args, signed long); + fFlags |= RTSTR_GET_BIT_FLAG(unsigned long); + } + else if (chArgSize == 'h') + { + u64Value = va_arg(args, /* signed short */ int); + fFlags |= RTSTR_GET_BIT_FLAG(signed short); + } + else if (chArgSize == 'H') + { + u64Value = va_arg(args, /* int8_t */ int); + fFlags |= RTSTR_GET_BIT_FLAG(int8_t); + } + else if (chArgSize == 'j') + { + u64Value = va_arg(args, /*intmax_t*/ int64_t); + fFlags |= RTSTR_F_64BIT; + } + else if (chArgSize == 'z') + { + u64Value = va_arg(args, size_t); + fFlags |= RTSTR_GET_BIT_FLAG(size_t); + } + else if (chArgSize == 't') + { + u64Value = va_arg(args, ptrdiff_t); + fFlags |= RTSTR_GET_BIT_FLAG(ptrdiff_t); + } + else + { + u64Value = va_arg(args, signed int); + fFlags |= RTSTR_GET_BIT_FLAG(signed int); + } + } + else + { + if (chArgSize == 'L') + { + u64Value = va_arg(args, uint64_t); + fFlags |= RTSTR_F_64BIT; + } + else if (chArgSize == 'l') + { + u64Value = va_arg(args, unsigned long); + fFlags |= RTSTR_GET_BIT_FLAG(unsigned long); + } + else if (chArgSize == 'h') + { + u64Value = va_arg(args, /* unsigned short */ int); + fFlags |= RTSTR_GET_BIT_FLAG(unsigned short); + } + else if (chArgSize == 'H') + { + u64Value = va_arg(args, /* uint8_t */ int); + fFlags |= RTSTR_GET_BIT_FLAG(uint8_t); + } + else if (chArgSize == 'j') + { + u64Value = va_arg(args, /*uintmax_t*/ int64_t); + fFlags |= RTSTR_F_64BIT; + } + else if (chArgSize == 'z') + { + u64Value = va_arg(args, size_t); + fFlags |= RTSTR_GET_BIT_FLAG(size_t); + } + else if (chArgSize == 't') + { + u64Value = va_arg(args, ptrdiff_t); + fFlags |= RTSTR_GET_BIT_FLAG(ptrdiff_t); + } + else + { + u64Value = va_arg(args, unsigned int); + fFlags |= RTSTR_GET_BIT_FLAG(unsigned int); + } + } + cchNum = RTStrFormatNumber((char *)SSToDS(&szTmp), u64Value, uBase, cchWidth, cchPrecision, fFlags); + cch += pfnOutput(pvArgOutput, (char *)SSToDS(&szTmp), cchNum); + break; + } + + /* + * Nested extensions. + */ + case 'M': /* replace the format string (not stacked yet). */ + { + pszStartOutput = pszFormat = va_arg(args, const char *); + AssertPtr(pszStartOutput); + break; + } + + case 'N': /* real nesting. */ + { + const char *pszFormatNested = va_arg(args, const char *); + va_list *pArgsNested = va_arg(args, va_list *); + va_list ArgsNested; + va_copy(ArgsNested, *pArgsNested); + Assert(pszFormatNested); + cch += RTStrFormatV(pfnOutput, pvArgOutput, pfnFormat, pvArgFormat, pszFormatNested, ArgsNested); + va_end(ArgsNested); + break; + } + + /* + * IPRT Extensions. + */ + case 'R': + { + if (*pszFormat != '[') + { + pszFormat--; + cch += rtstrFormatRt(pfnOutput, pvArgOutput, &pszFormat, &args, cchWidth, cchPrecision, fFlags, chArgSize); + } + else + { + pszFormat--; + cch += rtstrFormatType(pfnOutput, pvArgOutput, &pszFormat, &args, cchWidth, cchPrecision, fFlags, chArgSize); + } + break; + } + + /* + * Custom format. + */ + default: + { + if (pfnFormat) + { + pszFormat--; + cch += pfnFormat(pvArgFormat, pfnOutput, pvArgOutput, &pszFormat, &args, cchWidth, cchPrecision, fFlags, chArgSize); + } + break; + } + } + pszStartOutput = pszFormat; + } + } + else + pszFormat++; + } + + /* output pending string. */ + if (pszStartOutput != pszFormat) + cch += pfnOutput(pvArgOutput, pszStartOutput, pszFormat - pszStartOutput); + + /* terminate the output */ + pfnOutput(pvArgOutput, NULL, 0); + + return cch; +} +RT_EXPORT_SYMBOL(RTStrFormatV); + + +/** + * Partial implementation of a printf like formatter. + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string an it's length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Format string. + * @param ... Argument list. + */ +RTDECL(size_t) RTStrFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, const char *pszFormat, ...) +{ + size_t cch; + va_list args; + va_start(args, pszFormat); + cch = RTStrFormatV(pfnOutput, pvArgOutput, pfnFormat, pvArgFormat, pszFormat, args); + va_end(args); + return cch; +} +RT_EXPORT_SYMBOL(RTStrFormat); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/strformatrt.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/strformatrt.c @@ -0,0 +1,1377 @@ +/* $Id: strformatrt.cpp $ */ +/** @file + * IPRT - IPRT String Formatter Extensions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_STRING +#include +#ifndef RT_NO_EXPORT_SYMBOL +# define RT_NO_EXPORT_SYMBOL /* don't slurp which then again + slurps arch-specific headers defining symbols */ +#endif +#include "internal/iprt.h" + +#include +#include +#include +#include +#ifdef IN_RING3 +# include +# include +#endif +#include +#include +#include +#include +#include +#define STRFORMAT_WITH_X86 +#ifdef STRFORMAT_WITH_X86 +# include +#endif +#include "internal/string.h" + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +static char g_szHexDigits[17] = "0123456789abcdef"; + + +/** + * Helper that formats a 16-bit hex word in a IPv6 address. + * + * @returns Length in chars. + * @param pszDst The output buffer. Written from the start. + * @param uWord The word to format as hex. + */ +static size_t rtstrFormatIPv6HexWord(char *pszDst, uint16_t uWord) +{ + size_t off; + uint16_t cDigits; + + if (uWord & UINT16_C(0xff00)) + cDigits = uWord & UINT16_C(0xf000) ? 4 : 3; + else + cDigits = uWord & UINT16_C(0x00f0) ? 2 : 1; + + off = 0; + switch (cDigits) + { + case 4: pszDst[off++] = g_szHexDigits[(uWord >> 12) & 0xf]; RT_FALL_THRU(); + case 3: pszDst[off++] = g_szHexDigits[(uWord >> 8) & 0xf]; RT_FALL_THRU(); + case 2: pszDst[off++] = g_szHexDigits[(uWord >> 4) & 0xf]; RT_FALL_THRU(); + case 1: pszDst[off++] = g_szHexDigits[(uWord >> 0) & 0xf]; + break; + } + pszDst[off] = '\0'; + return off; +} + + +/** + * Helper function to format IPv6 address according to RFC 5952. + * + * @returns The number of bytes formatted. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param pIpv6Addr IPv6 address + */ +static size_t rtstrFormatIPv6(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PCRTNETADDRIPV6 pIpv6Addr) +{ + size_t cch; /* result */ + bool fEmbeddedIpv4; + size_t cwHexPart; + size_t cwLongestZeroRun; + size_t iLongestZeroStart; + size_t idx; + char szHexWord[8]; + + Assert(pIpv6Addr != NULL); + + /* + * Check for embedded IPv4 address. + * + * IPv4-compatible - ::11.22.33.44 (obsolete) + * IPv4-mapped - ::ffff:11.22.33.44 + * IPv4-translated - ::ffff:0:11.22.33.44 (RFC 2765) + */ + fEmbeddedIpv4 = false; + cwHexPart = RT_ELEMENTS(pIpv6Addr->au16); + if ( pIpv6Addr->au64[0] == 0 + && ( ( pIpv6Addr->au32[2] == 0 + && pIpv6Addr->au32[3] != 0 + && pIpv6Addr->au32[3] != RT_H2BE_U32_C(1) ) + || pIpv6Addr->au32[2] == RT_H2BE_U32_C(0x0000ffff) + || pIpv6Addr->au32[2] == RT_H2BE_U32_C(0xffff0000) ) ) + { + fEmbeddedIpv4 = true; + cwHexPart -= 2; + } + + /* + * Find the longest sequences of two or more zero words. + */ + cwLongestZeroRun = 0; + iLongestZeroStart = 0; + for (idx = 0; idx < cwHexPart; idx++) + if (pIpv6Addr->au16[idx] == 0) + { + size_t iZeroStart = idx; + size_t cwZeroRun; + do + idx++; + while (idx < cwHexPart && pIpv6Addr->au16[idx] == 0); + cwZeroRun = idx - iZeroStart; + if (cwZeroRun > 1 && cwZeroRun > cwLongestZeroRun) + { + cwLongestZeroRun = cwZeroRun; + iLongestZeroStart = iZeroStart; + if (cwZeroRun >= cwHexPart - idx) + break; + } + } + + /* + * Do the formatting. + */ + cch = 0; + if (cwLongestZeroRun == 0) + { + for (idx = 0; idx < cwHexPart; ++idx) + { + if (idx > 0) + cch += pfnOutput(pvArgOutput, ":", 1); + cch += pfnOutput(pvArgOutput, szHexWord, rtstrFormatIPv6HexWord(szHexWord, RT_BE2H_U16(pIpv6Addr->au16[idx]))); + } + + if (fEmbeddedIpv4) + cch += pfnOutput(pvArgOutput, ":", 1); + } + else + { + const size_t iLongestZeroEnd = iLongestZeroStart + cwLongestZeroRun; + + if (iLongestZeroStart == 0) + cch += pfnOutput(pvArgOutput, ":", 1); + else + for (idx = 0; idx < iLongestZeroStart; ++idx) + { + cch += pfnOutput(pvArgOutput, szHexWord, rtstrFormatIPv6HexWord(szHexWord, RT_BE2H_U16(pIpv6Addr->au16[idx]))); + cch += pfnOutput(pvArgOutput, ":", 1); + } + + if (iLongestZeroEnd == cwHexPart) + cch += pfnOutput(pvArgOutput, ":", 1); + else + { + for (idx = iLongestZeroEnd; idx < cwHexPart; ++idx) + { + cch += pfnOutput(pvArgOutput, ":", 1); + cch += pfnOutput(pvArgOutput, szHexWord, rtstrFormatIPv6HexWord(szHexWord, RT_BE2H_U16(pIpv6Addr->au16[idx]))); + } + + if (fEmbeddedIpv4) + cch += pfnOutput(pvArgOutput, ":", 1); + } + } + + if (fEmbeddedIpv4) + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%u.%u.%u.%u", + pIpv6Addr->au8[12], + pIpv6Addr->au8[13], + pIpv6Addr->au8[14], + pIpv6Addr->au8[15]); + + return cch; +} + + +/** + * Callback to format iprt formatting extentions. + * See @ref pg_rt_str_format for a reference on the format types. + * + * @returns The number of bytes formatted. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +DECLHIDDEN(size_t) rtstrFormatRt(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char **ppszFormat, va_list *pArgs, + int cchWidth, int cchPrecision, unsigned fFlags, char chArgSize) +{ + const char *pszFormatOrg = *ppszFormat; + char ch = *(*ppszFormat)++; + size_t cch; + char szBuf[80]; + + if (ch == 'R') + { + ch = *(*ppszFormat)++; + switch (ch) + { + /* + * Groups 1 and 2. + */ + case 'T': + case 'G': + case 'H': + case 'R': + case 'C': + case 'I': + case 'X': + case 'U': + case 'K': + { + /* + * Interpret the type. + */ + typedef enum + { + RTSF_INT, + RTSF_INTW, + RTSF_BOOL, + RTSF_FP16, + RTSF_FP32, + RTSF_FP64, + RTSF_IPV4, + RTSF_IPV6, + RTSF_MAC, + RTSF_NETADDR, + RTSF_UUID + } RTSF; + static const struct + { + uint8_t cch; /**< the length of the string. */ + char sz[10]; /**< the part following 'R'. */ + uint8_t cb; /**< the size of the type. */ + uint8_t u8Base; /**< the size of the type. */ + RTSF enmFormat; /**< The way to format it. */ + uint16_t fFlags; /**< additional RTSTR_F_* flags. */ + } + /** Sorted array of types, looked up using binary search! */ + s_aTypes[] = + { +#define STRMEM(str) sizeof(str) - 1, str + { STRMEM("Ci"), sizeof(RTINT), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Cp"), sizeof(RTCCPHYS), 16, RTSF_INTW, 0 }, + { STRMEM("Cr"), sizeof(RTCCUINTREG), 16, RTSF_INTW, 0 }, + { STRMEM("Cu"), sizeof(RTUINT), 10, RTSF_INT, 0 }, + { STRMEM("Cv"), sizeof(void *), 16, RTSF_INTW, 0 }, + { STRMEM("Cx"), sizeof(RTUINT), 16, RTSF_INT, 0 }, + { STRMEM("Gi"), sizeof(RTGCINT), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Gp"), sizeof(RTGCPHYS), 16, RTSF_INTW, 0 }, + { STRMEM("Gr"), sizeof(RTGCUINTREG), 16, RTSF_INTW, 0 }, + { STRMEM("Gu"), sizeof(RTGCUINT), 10, RTSF_INT, 0 }, + { STRMEM("Gv"), sizeof(RTGCPTR), 16, RTSF_INTW, 0 }, + { STRMEM("Gx"), sizeof(RTGCUINT), 16, RTSF_INT, 0 }, + { STRMEM("Hi"), sizeof(RTHCINT), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Hp"), sizeof(RTHCPHYS), 16, RTSF_INTW, 0 }, + { STRMEM("Hr"), sizeof(RTHCUINTREG), 16, RTSF_INTW, 0 }, + { STRMEM("Hu"), sizeof(RTHCUINT), 10, RTSF_INT, 0 }, + { STRMEM("Hv"), sizeof(RTHCPTR), 16, RTSF_INTW, 0 }, + { STRMEM("Hx"), sizeof(RTHCUINT), 16, RTSF_INT, 0 }, + { STRMEM("I16"), sizeof(int16_t), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("I32"), sizeof(int32_t), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("I64"), sizeof(int64_t), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("I8"), sizeof(int8_t), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Kv"), sizeof(RTHCPTR), 16, RTSF_INT, RTSTR_F_OBFUSCATE_PTR }, + { STRMEM("Rv"), sizeof(RTRCPTR), 16, RTSF_INTW, 0 }, + { STRMEM("Tbool"), sizeof(bool), 10, RTSF_BOOL, 0 }, + { STRMEM("Tfile"), sizeof(RTFILE), 10, RTSF_INT, 0 }, + { STRMEM("Tfmode"), sizeof(RTFMODE), 16, RTSF_INTW, 0 }, + { STRMEM("Tfoff"), sizeof(RTFOFF), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Tfp16"), sizeof(RTFAR16), 16, RTSF_FP16, RTSTR_F_ZEROPAD }, + { STRMEM("Tfp32"), sizeof(RTFAR32), 16, RTSF_FP32, RTSTR_F_ZEROPAD }, + { STRMEM("Tfp64"), sizeof(RTFAR64), 16, RTSF_FP64, RTSTR_F_ZEROPAD }, + { STRMEM("Tgid"), sizeof(RTGID), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Tino"), sizeof(RTINODE), 16, RTSF_INTW, 0 }, + { STRMEM("Tint"), sizeof(RTINT), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Tiop"), sizeof(RTIOPORT), 16, RTSF_INTW, 0 }, + { STRMEM("Tldrm"), sizeof(RTLDRMOD), 16, RTSF_INTW, 0 }, + { STRMEM("Tmac"), sizeof(PCRTMAC), 16, RTSF_MAC, 0 }, + { STRMEM("Tnaddr"), sizeof(PCRTNETADDR), 10, RTSF_NETADDR,0 }, + { STRMEM("Tnaipv4"), sizeof(RTNETADDRIPV4), 10, RTSF_IPV4, 0 }, + { STRMEM("Tnaipv6"), sizeof(PCRTNETADDRIPV6),16, RTSF_IPV6, 0 }, + { STRMEM("Tnthrd"), sizeof(RTNATIVETHREAD), 16, RTSF_INTW, 0 }, + { STRMEM("Tproc"), sizeof(RTPROCESS), 16, RTSF_INTW, 0 }, + { STRMEM("Tptr"), sizeof(RTUINTPTR), 16, RTSF_INTW, 0 }, + { STRMEM("Treg"), sizeof(RTCCUINTREG), 16, RTSF_INTW, 0 }, + { STRMEM("Tsel"), sizeof(RTSEL), 16, RTSF_INTW, 0 }, + { STRMEM("Tsem"), sizeof(RTSEMEVENT), 16, RTSF_INTW, 0 }, + { STRMEM("Tsock"), sizeof(RTSOCKET), 10, RTSF_INT, 0 }, + { STRMEM("Tthrd"), sizeof(RTTHREAD), 16, RTSF_INTW, 0 }, + { STRMEM("Tuid"), sizeof(RTUID), 10, RTSF_INT, RTSTR_F_VALSIGNED }, + { STRMEM("Tuint"), sizeof(RTUINT), 10, RTSF_INT, 0 }, + { STRMEM("Tunicp"), sizeof(RTUNICP), 16, RTSF_INTW, RTSTR_F_ZEROPAD }, + { STRMEM("Tutf16"), sizeof(RTUTF16), 16, RTSF_INTW, RTSTR_F_ZEROPAD }, + { STRMEM("Tuuid"), sizeof(PCRTUUID), 16, RTSF_UUID, 0 }, + { STRMEM("Txint"), sizeof(RTUINT), 16, RTSF_INT, 0 }, + { STRMEM("U16"), sizeof(uint16_t), 10, RTSF_INT, 0 }, + { STRMEM("U32"), sizeof(uint32_t), 10, RTSF_INT, 0 }, + { STRMEM("U64"), sizeof(uint64_t), 10, RTSF_INT, 0 }, + { STRMEM("U8"), sizeof(uint8_t), 10, RTSF_INT, 0 }, + { STRMEM("X16"), sizeof(uint16_t), 16, RTSF_INT, 0 }, + { STRMEM("X32"), sizeof(uint32_t), 16, RTSF_INT, 0 }, + { STRMEM("X64"), sizeof(uint64_t), 16, RTSF_INT, 0 }, + { STRMEM("X8"), sizeof(uint8_t), 16, RTSF_INT, 0 }, +#undef STRMEM + }; + static const char s_szNull[] = ""; + + const char *pszType = *ppszFormat - 1; + int iStart = 0; + int iEnd = RT_ELEMENTS(s_aTypes) - 1; + int i = RT_ELEMENTS(s_aTypes) / 2; + + union + { + uint8_t u8; + uint16_t u16; + uint32_t u32; + uint64_t u64; + int8_t i8; + int16_t i16; + int32_t i32; + int64_t i64; + RTR0INTPTR uR0Ptr; + RTFAR16 fp16; + RTFAR32 fp32; + RTFAR64 fp64; + bool fBool; + PCRTMAC pMac; + RTNETADDRIPV4 Ipv4Addr; + PCRTNETADDRIPV6 pIpv6Addr; + PCRTNETADDR pNetAddr; + PCRTUUID pUuid; + } u; + + AssertMsg(!chArgSize, ("Not argument size '%c' for RT types! '%.10s'\n", chArgSize, pszFormatOrg)); + RT_NOREF_PV(chArgSize); + + /* + * Lookup the type - binary search. + */ + for (;;) + { + int iDiff = strncmp(pszType, s_aTypes[i].sz, s_aTypes[i].cch); + if (!iDiff) + break; + if (iEnd == iStart) + { + AssertMsgFailed(("Invalid format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + if (iDiff < 0) + iEnd = i - 1; + else + iStart = i + 1; + if (iEnd < iStart) + { + AssertMsgFailed(("Invalid format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + i = iStart + (iEnd - iStart) / 2; + } + + /* + * Advance the format string and merge flags. + */ + *ppszFormat += s_aTypes[i].cch - 1; + fFlags |= s_aTypes[i].fFlags; + + /* + * Fetch the argument. + * It's important that a signed value gets sign-extended up to 64-bit. + */ + RT_ZERO(u); + if (fFlags & RTSTR_F_VALSIGNED) + { + switch (s_aTypes[i].cb) + { + case sizeof(int8_t): + u.i64 = va_arg(*pArgs, /*int8_t*/int); + fFlags |= RTSTR_F_8BIT; + break; + case sizeof(int16_t): + u.i64 = va_arg(*pArgs, /*int16_t*/int); + fFlags |= RTSTR_F_16BIT; + break; + case sizeof(int32_t): + u.i64 = va_arg(*pArgs, int32_t); + fFlags |= RTSTR_F_32BIT; + break; + case sizeof(int64_t): + u.i64 = va_arg(*pArgs, int64_t); + fFlags |= RTSTR_F_64BIT; + break; + default: + AssertMsgFailed(("Invalid format error, size %d'!\n", s_aTypes[i].cb)); + break; + } + } + else + { + switch (s_aTypes[i].cb) + { + case sizeof(uint8_t): + u.u8 = va_arg(*pArgs, /*uint8_t*/unsigned); + fFlags |= RTSTR_F_8BIT; + break; + case sizeof(uint16_t): + u.u16 = va_arg(*pArgs, /*uint16_t*/unsigned); + fFlags |= RTSTR_F_16BIT; + break; + case sizeof(uint32_t): + u.u32 = va_arg(*pArgs, uint32_t); + fFlags |= RTSTR_F_32BIT; + break; + case sizeof(uint64_t): + u.u64 = va_arg(*pArgs, uint64_t); + fFlags |= RTSTR_F_64BIT; + break; + case sizeof(RTFAR32): + u.fp32 = va_arg(*pArgs, RTFAR32); + break; + case sizeof(RTFAR64): + u.fp64 = va_arg(*pArgs, RTFAR64); + break; + default: + AssertMsgFailed(("Invalid format error, size %d'!\n", s_aTypes[i].cb)); + break; + } + } + +#ifndef DEBUG + /* + * For now don't show the address. + */ + if (fFlags & RTSTR_F_OBFUSCATE_PTR) + { + cch = rtStrFormatKernelAddress(szBuf, sizeof(szBuf), u.uR0Ptr, cchWidth, cchPrecision, fFlags); + return pfnOutput(pvArgOutput, szBuf, cch); + } +#endif + + /* + * Format the output. + */ + switch (s_aTypes[i].enmFormat) + { + case RTSF_INT: + { + cch = RTStrFormatNumber(szBuf, u.u64, s_aTypes[i].u8Base, cchWidth, cchPrecision, fFlags); + break; + } + + /* hex which defaults to max width. */ + case RTSF_INTW: + { + Assert(s_aTypes[i].u8Base == 16); + if (cchWidth < 0) + { + cchWidth = s_aTypes[i].cb * 2 + (fFlags & RTSTR_F_SPECIAL ? 2 : 0); + fFlags |= RTSTR_F_ZEROPAD; + } + cch = RTStrFormatNumber(szBuf, u.u64, s_aTypes[i].u8Base, cchWidth, cchPrecision, fFlags); + break; + } + + case RTSF_BOOL: + { + static const char s_szTrue[] = "true "; + static const char s_szFalse[] = "false"; + if (u.u64 == 1) + return pfnOutput(pvArgOutput, s_szTrue, sizeof(s_szTrue) - 1); + if (u.u64 == 0) + return pfnOutput(pvArgOutput, s_szFalse, sizeof(s_szFalse) - 1); + /* invalid boolean value */ + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "!%lld!", u.u64); + } + + case RTSF_FP16: + { + fFlags &= ~(RTSTR_F_VALSIGNED | RTSTR_F_BIT_MASK | RTSTR_F_WIDTH | RTSTR_F_PRECISION | RTSTR_F_THOUSAND_SEP); + cch = RTStrFormatNumber(&szBuf[0], u.fp16.sel, 16, 4, -1, fFlags | RTSTR_F_16BIT); + Assert(cch == 4); + szBuf[4] = ':'; + cch = RTStrFormatNumber(&szBuf[5], u.fp16.off, 16, 4, -1, fFlags | RTSTR_F_16BIT); + Assert(cch == 4); + cch = 4 + 1 + 4; + break; + } + case RTSF_FP32: + { + fFlags &= ~(RTSTR_F_VALSIGNED | RTSTR_F_BIT_MASK | RTSTR_F_WIDTH | RTSTR_F_PRECISION | RTSTR_F_THOUSAND_SEP); + cch = RTStrFormatNumber(&szBuf[0], u.fp32.sel, 16, 4, -1, fFlags | RTSTR_F_16BIT); + Assert(cch == 4); + szBuf[4] = ':'; + cch = RTStrFormatNumber(&szBuf[5], u.fp32.off, 16, 8, -1, fFlags | RTSTR_F_32BIT); + Assert(cch == 8); + cch = 4 + 1 + 8; + break; + } + case RTSF_FP64: + { + fFlags &= ~(RTSTR_F_VALSIGNED | RTSTR_F_BIT_MASK | RTSTR_F_WIDTH | RTSTR_F_PRECISION | RTSTR_F_THOUSAND_SEP); + cch = RTStrFormatNumber(&szBuf[0], u.fp64.sel, 16, 4, -1, fFlags | RTSTR_F_16BIT); + Assert(cch == 4); + szBuf[4] = ':'; + cch = RTStrFormatNumber(&szBuf[5], u.fp64.off, 16, 16, -1, fFlags | RTSTR_F_64BIT); + Assert(cch == 16); + cch = 4 + 1 + 16; + break; + } + + case RTSF_IPV4: + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%u.%u.%u.%u", + u.Ipv4Addr.au8[0], + u.Ipv4Addr.au8[1], + u.Ipv4Addr.au8[2], + u.Ipv4Addr.au8[3]); + + case RTSF_IPV6: + { + if (VALID_PTR(u.pIpv6Addr)) + return rtstrFormatIPv6(pfnOutput, pvArgOutput, u.pIpv6Addr); + return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1); + } + + case RTSF_MAC: + { + if (VALID_PTR(u.pMac)) + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%02x:%02x:%02x:%02x:%02x:%02x", + u.pMac->au8[0], + u.pMac->au8[1], + u.pMac->au8[2], + u.pMac->au8[3], + u.pMac->au8[4], + u.pMac->au8[5]); + return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1); + } + + case RTSF_NETADDR: + { + if (VALID_PTR(u.pNetAddr)) + { + switch (u.pNetAddr->enmType) + { + case RTNETADDRTYPE_IPV4: + if (u.pNetAddr->uPort == RTNETADDR_PORT_NA) + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%u.%u.%u.%u", + u.pNetAddr->uAddr.IPv4.au8[0], + u.pNetAddr->uAddr.IPv4.au8[1], + u.pNetAddr->uAddr.IPv4.au8[2], + u.pNetAddr->uAddr.IPv4.au8[3]); + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%u.%u.%u.%u:%u", + u.pNetAddr->uAddr.IPv4.au8[0], + u.pNetAddr->uAddr.IPv4.au8[1], + u.pNetAddr->uAddr.IPv4.au8[2], + u.pNetAddr->uAddr.IPv4.au8[3], + u.pNetAddr->uPort); + + case RTNETADDRTYPE_IPV6: + if (u.pNetAddr->uPort == RTNETADDR_PORT_NA) + return rtstrFormatIPv6(pfnOutput, pvArgOutput, &u.pNetAddr->uAddr.IPv6); + + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "[%RTnaipv6]:%u", + &u.pNetAddr->uAddr.IPv6, + u.pNetAddr->uPort); + + case RTNETADDRTYPE_MAC: + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%02x:%02x:%02x:%02x:%02x:%02x", + u.pNetAddr->uAddr.Mac.au8[0], + u.pNetAddr->uAddr.Mac.au8[1], + u.pNetAddr->uAddr.Mac.au8[2], + u.pNetAddr->uAddr.Mac.au8[3], + u.pNetAddr->uAddr.Mac.au8[4], + u.pNetAddr->uAddr.Mac.au8[5]); + + default: + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "unsupported-netaddr-type=%u", u.pNetAddr->enmType); + + } + } + return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1); + } + + case RTSF_UUID: + { + if (VALID_PTR(u.pUuid)) + { + /* cannot call RTUuidToStr because of GC/R0. */ + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + RT_H2LE_U32(u.pUuid->Gen.u32TimeLow), + RT_H2LE_U16(u.pUuid->Gen.u16TimeMid), + RT_H2LE_U16(u.pUuid->Gen.u16TimeHiAndVersion), + u.pUuid->Gen.u8ClockSeqHiAndReserved, + u.pUuid->Gen.u8ClockSeqLow, + u.pUuid->Gen.au8Node[0], + u.pUuid->Gen.au8Node[1], + u.pUuid->Gen.au8Node[2], + u.pUuid->Gen.au8Node[3], + u.pUuid->Gen.au8Node[4], + u.pUuid->Gen.au8Node[5]); + } + return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1); + } + + default: + AssertMsgFailed(("Internal error %d\n", s_aTypes[i].enmFormat)); + return 0; + } + + /* + * Finally, output the formatted string and return. + */ + return pfnOutput(pvArgOutput, szBuf, cch); + } + + + /* Group 3 */ + + /* + * Base name printing, big endian UTF-16. + */ + case 'b': + { + switch (*(*ppszFormat)++) + { + case 'n': + { + const char *pszLastSep; + const char *psz = pszLastSep = va_arg(*pArgs, const char *); + if (!VALID_PTR(psz)) + return pfnOutput(pvArgOutput, RT_STR_TUPLE("")); + + while ((ch = *psz) != '\0') + { + if (RTPATH_IS_SEP(ch)) + { + do + psz++; + while ((ch = *psz) != '\0' && RTPATH_IS_SEP(ch)); + if (!ch) + break; + pszLastSep = psz; + } + psz++; + } + + return pfnOutput(pvArgOutput, pszLastSep, psz - pszLastSep); + } + + /* %lRbs */ + case 's': + if (chArgSize == 'l') + { + /* utf-16BE -> utf-8 */ + int cchStr; + PCRTUTF16 pwszStr = va_arg(*pArgs, PRTUTF16); + + if (RT_VALID_PTR(pwszStr)) + { + cchStr = 0; + while (cchStr < cchPrecision && pwszStr[cchStr] != '\0') + cchStr++; + } + else + { + static RTUTF16 s_wszBigNull[] = + { + RT_H2BE_U16_C((uint16_t)'<'), RT_H2BE_U16_C((uint16_t)'N'), RT_H2BE_U16_C((uint16_t)'U'), + RT_H2BE_U16_C((uint16_t)'L'), RT_H2BE_U16_C((uint16_t)'L'), RT_H2BE_U16_C((uint16_t)'>'), '\0' + }; + pwszStr = s_wszBigNull; + cchStr = RT_ELEMENTS(s_wszBigNull) - 1; + } + + cch = 0; + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth >= cchStr) + cch += pfnOutput(pvArgOutput, " ", 1); + cchWidth -= cchStr; + while (cchStr-- > 0) + { +/** @todo \#ifndef IN_RC*/ +#ifdef IN_RING3 + RTUNICP Cp = 0; + RTUtf16BigGetCpEx(&pwszStr, &Cp); + char *pszEnd = RTStrPutCp(szBuf, Cp); + *pszEnd = '\0'; + cch += pfnOutput(pvArgOutput, szBuf, pszEnd - szBuf); +#else + szBuf[0] = (char)(*pwszStr++ >> 8); + cch += pfnOutput(pvArgOutput, szBuf, 1); +#endif + } + while (--cchWidth >= 0) + cch += pfnOutput(pvArgOutput, " ", 1); + return cch; + } + RT_FALL_THRU(); + + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + break; + } + break; + } + + + /* + * Pretty function / method name printing. + */ + case 'f': + { + switch (*(*ppszFormat)++) + { + /* + * Pretty function / method name printing. + * This isn't 100% right (see classic signal prototype) and it assumes + * standardized names, but it'll do for today. + */ + case 'n': + { + const char *pszStart; + const char *psz = pszStart = va_arg(*pArgs, const char *); + int cAngle = 0; + + if (!VALID_PTR(psz)) + return pfnOutput(pvArgOutput, RT_STR_TUPLE("")); + + while ((ch = *psz) != '\0' && ch != '(') + { + if (RT_C_IS_BLANK(ch)) + { + psz++; + while ((ch = *psz) != '\0' && (RT_C_IS_BLANK(ch) || ch == '(')) + psz++; + if (ch && cAngle == 0) + pszStart = psz; + } + else if (ch == '(') + break; + else if (ch == '<') + { + cAngle++; + psz++; + } + else if (ch == '>') + { + cAngle--; + psz++; + } + else + psz++; + } + + return pfnOutput(pvArgOutput, pszStart, psz - pszStart); + } + + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + break; + } + break; + } + + + /* + * hex dumping and COM/XPCOM. + */ + case 'h': + { + switch (*(*ppszFormat)++) + { + /* + * Hex stuff. + */ + case 'x': + { + uint8_t *pu8 = va_arg(*pArgs, uint8_t *); + if (cchPrecision < 0) + cchPrecision = 16; + if (pu8) + { + switch (*(*ppszFormat)++) + { + /* + * Regular hex dump. + */ + case 'd': + { + int off = 0; + cch = 0; + + if (cchWidth <= 0) + cchWidth = 16; + + while (off < cchPrecision) + { + int i; + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%s%0*p %04x:", off ? "\n" : "", sizeof(pu8) * 2, (uintptr_t)pu8, off); + for (i = 0; i < cchWidth && off + i < cchPrecision ; i++) + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + off + i < cchPrecision ? !(i & 7) && i ? "-%02x" : " %02x" : " ", + pu8[i]); + while (i++ < cchWidth) + cch += pfnOutput(pvArgOutput, " ", 3); + + cch += pfnOutput(pvArgOutput, " ", 1); + + for (i = 0; i < cchWidth && off + i < cchPrecision; i++) + { + uint8_t u8 = pu8[i]; + cch += pfnOutput(pvArgOutput, u8 < 127 && u8 >= 32 ? (const char *)&u8 : ".", 1); + } + + /* next */ + pu8 += cchWidth; + off += cchWidth; + } + return cch; + } + + /* + * Regular hex dump with dittoing. + */ + case 'D': + { + int offEndDupCheck; + int cDuplicates = 0; + int off = 0; + cch = 0; + + if (cchWidth <= 0) + cchWidth = 16; + offEndDupCheck = cchPrecision - cchWidth; + + while (off < cchPrecision) + { + int i; + if ( off >= offEndDupCheck + || off <= 0 + || memcmp(pu8, pu8 - cchWidth, cchWidth) != 0 + || ( cDuplicates == 0 + && ( off + cchWidth >= offEndDupCheck + || memcmp(pu8 + cchWidth, pu8, cchWidth) != 0)) ) + { + if (cDuplicates > 0) + { + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "\n%.*s **** ", + sizeof(pu8) * 2, "****************", cDuplicates); + cDuplicates = 0; + } + + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + "%s%0*p %04x:", off ? "\n" : "", sizeof(pu8) * 2, (uintptr_t)pu8, off); + for (i = 0; i < cchWidth && off + i < cchPrecision ; i++) + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, + off + i < cchPrecision ? !(i & 7) && i + ? "-%02x" : " %02x" : " ", + pu8[i]); + while (i++ < cchWidth) + cch += pfnOutput(pvArgOutput, " ", 3); + + cch += pfnOutput(pvArgOutput, " ", 1); + + for (i = 0; i < cchWidth && off + i < cchPrecision; i++) + { + uint8_t u8 = pu8[i]; + cch += pfnOutput(pvArgOutput, u8 < 127 && u8 >= 32 ? (const char *)&u8 : ".", 1); + } + } + else + cDuplicates++; + + /* next */ + pu8 += cchWidth; + off += cchWidth; + } + return cch; + } + + /* + * Hex string. + */ + case 's': + { + if (cchPrecision-- > 0) + { + cch = RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%02x", *pu8++); + for (; cchPrecision > 0; cchPrecision--, pu8++) + cch += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, " %02x", *pu8); + return cch; + } + break; + } + + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + break; + } + } + else + return pfnOutput(pvArgOutput, RT_STR_TUPLE("")); + break; + } + + +#ifdef IN_RING3 + /* + * XPCOM / COM status code: %Rhrc, %Rhrf, %Rhra + * ASSUMES: If Windows Then COM else XPCOM. + */ + case 'r': + { + uint32_t hrc = va_arg(*pArgs, uint32_t); + PCRTCOMERRMSG pMsg = RTErrCOMGet(hrc); + switch (*(*ppszFormat)++) + { + case 'c': + return pfnOutput(pvArgOutput, pMsg->pszDefine, strlen(pMsg->pszDefine)); + case 'f': + return pfnOutput(pvArgOutput, pMsg->pszMsgFull,strlen(pMsg->pszMsgFull)); + case 'a': + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%s (0x%08X) - %s", pMsg->pszDefine, hrc, pMsg->pszMsgFull); + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + break; + } +#endif /* IN_RING3 */ + + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + return 0; + + } + break; + } + + /* + * iprt status code: %Rrc, %Rrs, %Rrf, %Rra. + */ + case 'r': + { + int rc = va_arg(*pArgs, int); +#ifdef IN_RING3 /* we don't want this anywhere else yet. */ + PCRTSTATUSMSG pMsg = RTErrGet(rc); + switch (*(*ppszFormat)++) + { + case 'c': + return pfnOutput(pvArgOutput, pMsg->pszDefine, strlen(pMsg->pszDefine)); + case 's': + return pfnOutput(pvArgOutput, pMsg->pszMsgShort, strlen(pMsg->pszMsgShort)); + case 'f': + return pfnOutput(pvArgOutput, pMsg->pszMsgFull, strlen(pMsg->pszMsgFull)); + case 'a': + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%s (%d) - %s", pMsg->pszDefine, rc, pMsg->pszMsgFull); + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + return 0; + } +#else /* !IN_RING3 */ + switch (*(*ppszFormat)++) + { + case 'c': + case 's': + case 'f': + case 'a': + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%d", rc); + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + return 0; + } +#endif /* !IN_RING3 */ + break; + } + +#if defined(IN_RING3) + /* + * Windows status code: %Rwc, %Rwf, %Rwa + */ + case 'w': + { + long rc = va_arg(*pArgs, long); +# if defined(RT_OS_WINDOWS) + PCRTWINERRMSG pMsg = RTErrWinGet(rc); +# endif + switch (*(*ppszFormat)++) + { +# if defined(RT_OS_WINDOWS) + case 'c': + return pfnOutput(pvArgOutput, pMsg->pszDefine, strlen(pMsg->pszDefine)); + case 'f': + return pfnOutput(pvArgOutput, pMsg->pszMsgFull,strlen(pMsg->pszMsgFull)); + case 'a': + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%s (0x%08X) - %s", pMsg->pszDefine, rc, pMsg->pszMsgFull); +# else + case 'c': + case 'f': + case 'a': + return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "0x%08X", rc); +# endif + default: + AssertMsgFailed(("Invalid status code format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + break; + } +#endif /* IN_RING3 */ + + /* + * Group 4, structure dumpers. + */ + case 'D': + { + /* + * Interpret the type. + */ + typedef enum + { + RTST_TIMESPEC + } RTST; +/** Set if it's a pointer */ +#define RTST_FLAGS_POINTER RT_BIT(0) + static const struct + { + uint8_t cch; /**< the length of the string. */ + char sz[16-2]; /**< the part following 'R'. */ + uint8_t cb; /**< the size of the argument. */ + uint8_t fFlags; /**< RTST_FLAGS_* */ + RTST enmType; /**< The structure type. */ + } + /** Sorted array of types, looked up using binary search! */ + s_aTypes[] = + { +#define STRMEM(str) sizeof(str) - 1, str + { STRMEM("Dtimespec"), sizeof(PCRTTIMESPEC), RTST_FLAGS_POINTER, RTST_TIMESPEC}, +#undef STRMEM + }; + const char *pszType = *ppszFormat - 1; + int iStart = 0; + int iEnd = RT_ELEMENTS(s_aTypes) - 1; + int i = RT_ELEMENTS(s_aTypes) / 2; + + union + { + const void *pv; + uint64_t u64; + PCRTTIMESPEC pTimeSpec; + } u; + + AssertMsg(!chArgSize, ("Not argument size '%c' for RT types! '%.10s'\n", chArgSize, pszFormatOrg)); + + /* + * Lookup the type - binary search. + */ + for (;;) + { + int iDiff = strncmp(pszType, s_aTypes[i].sz, s_aTypes[i].cch); + if (!iDiff) + break; + if (iEnd == iStart) + { + AssertMsgFailed(("Invalid format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + if (iDiff < 0) + iEnd = i - 1; + else + iStart = i + 1; + if (iEnd < iStart) + { + AssertMsgFailed(("Invalid format type '%.10s'!\n", pszFormatOrg)); + return 0; + } + i = iStart + (iEnd - iStart) / 2; + } + *ppszFormat += s_aTypes[i].cch - 1; + + /* + * Fetch the argument. + */ + u.u64 = 0; + switch (s_aTypes[i].cb) + { + case sizeof(const void *): + u.pv = va_arg(*pArgs, const void *); + break; + default: + AssertMsgFailed(("Invalid format error, size %d'!\n", s_aTypes[i].cb)); + break; + } + + /* + * If it's a pointer, we'll check if it's valid before going on. + */ + if ((s_aTypes[i].fFlags & RTST_FLAGS_POINTER) && !VALID_PTR(u.pv)) + return pfnOutput(pvArgOutput, RT_STR_TUPLE("")); + + /* + * Format the output. + */ + switch (s_aTypes[i].enmType) + { + case RTST_TIMESPEC: + return RTStrFormat(pfnOutput, pvArgOutput, NULL, NULL, "%'lld ns", RTTimeSpecGetNano(u.pTimeSpec)); + + default: + AssertMsgFailed(("Invalid/unhandled enmType=%d\n", s_aTypes[i].enmType)); + break; + } + break; + } + +#ifdef IN_RING3 + /* + * Group 5, XML / HTML escapers. + */ + case 'M': + { + char chWhat = (*ppszFormat)[0]; + bool fAttr = chWhat == 'a'; + char chType = (*ppszFormat)[1]; + AssertMsgBreak(chWhat == 'a' || chWhat == 'e', ("Invalid IPRT format type '%.10s'!\n", pszFormatOrg)); + *ppszFormat += 2; + switch (chType) + { + case 's': + { + static const char s_szElemEscape[] = "<>&\"'"; + static const char s_szAttrEscape[] = "<>&\"\n\r"; /* more? */ + const char * const pszEscape = fAttr ? s_szAttrEscape : s_szElemEscape; + size_t const cchEscape = (fAttr ? RT_ELEMENTS(s_szAttrEscape) : RT_ELEMENTS(s_szElemEscape)) - 1; + size_t cchOutput = 0; + const char *pszStr = va_arg(*pArgs, char *); + ssize_t cchStr; + ssize_t offCur; + ssize_t offLast; + + if (!VALID_PTR(pszStr)) + pszStr = ""; + cchStr = RTStrNLen(pszStr, (unsigned)cchPrecision); + + if (fAttr) + cchOutput += pfnOutput(pvArgOutput, "\"", 1); + if (!(fFlags & RTSTR_F_LEFT)) + while (--cchWidth >= cchStr) + cchOutput += pfnOutput(pvArgOutput, " ", 1); + + offLast = offCur = 0; + while (offCur < cchStr) + { + if (memchr(pszEscape, pszStr[offCur], cchEscape)) + { + if (offLast < offCur) + cchOutput += pfnOutput(pvArgOutput, &pszStr[offLast], offCur - offLast); + switch (pszStr[offCur]) + { + case '<': cchOutput += pfnOutput(pvArgOutput, "<", 4); break; + case '>': cchOutput += pfnOutput(pvArgOutput, ">", 4); break; + case '&': cchOutput += pfnOutput(pvArgOutput, "&", 5); break; + case '\'': cchOutput += pfnOutput(pvArgOutput, "'", 6); break; + case '"': cchOutput += pfnOutput(pvArgOutput, """, 6); break; + case '\n': cchOutput += pfnOutput(pvArgOutput, " ", 5); break; + case '\r': cchOutput += pfnOutput(pvArgOutput, " ", 5); break; + default: + AssertFailed(); + } + offLast = offCur + 1; + } + offCur++; + } + if (offLast < offCur) + cchOutput += pfnOutput(pvArgOutput, &pszStr[offLast], offCur - offLast); + + while (--cchWidth >= cchStr) + cchOutput += pfnOutput(pvArgOutput, " ", 1); + if (fAttr) + cchOutput += pfnOutput(pvArgOutput, "\"", 1); + return cchOutput; + } + + default: + AssertMsgFailed(("Invalid IPRT format type '%.10s'!\n", pszFormatOrg)); + } + break; + } +#endif /* IN_RING3 */ + + + /* + * Groups 6 - CPU Architecture Register Formatters. + * "%RAarch[reg]" + */ + case 'A': + { + char const * const pszArch = *ppszFormat; + const char *pszReg = pszArch; + size_t cchOutput = 0; + int cPrinted = 0; + size_t cchReg; + + /* Parse out the */ + while ((ch = *pszReg++) && ch != '[') + { /* nothing */ } + AssertMsgBreak(ch == '[', ("Malformed IPRT architecture register format type '%.10s'!\n", pszFormatOrg)); + + cchReg = 0; + while ((ch = pszReg[cchReg]) && ch != ']') + cchReg++; + AssertMsgBreak(ch == ']', ("Malformed IPRT architecture register format type '%.10s'!\n", pszFormatOrg)); + + *ppszFormat = &pszReg[cchReg + 1]; + + +#define REG_EQUALS(a_szReg) (sizeof(a_szReg) - 1 == cchReg && !strncmp(a_szReg, pszReg, sizeof(a_szReg) - 1)) +#define REG_OUT_BIT(a_uVal, a_fBitMask, a_szName) \ + do { \ + if ((a_uVal) & (a_fBitMask)) \ + { \ + if (!cPrinted++) \ + cchOutput += pfnOutput(pvArgOutput, "{" a_szName, sizeof(a_szName)); \ + else \ + cchOutput += pfnOutput(pvArgOutput, "," a_szName, sizeof(a_szName)); \ + (a_uVal) &= ~(a_fBitMask); \ + } \ + } while (0) +#define REG_OUT_CLOSE(a_uVal) \ + do { \ + if ((a_uVal)) \ + { \ + cchOutput += pfnOutput(pvArgOutput, !cPrinted ? "{unkn=" : ",unkn=", 6); \ + cch = RTStrFormatNumber(&szBuf[0], (a_uVal), 16, 1, -1, fFlags); \ + cchOutput += pfnOutput(pvArgOutput, szBuf, cch); \ + cPrinted++; \ + } \ + if (cPrinted) \ + cchOutput += pfnOutput(pvArgOutput, "}", 1); \ + } while (0) + + + if (0) + { /* dummy */ } +#ifdef STRFORMAT_WITH_X86 + /* + * X86 & AMD64. + */ + else if ( pszReg - pszArch == 3 + 1 + && pszArch[0] == 'x' + && pszArch[1] == '8' + && pszArch[2] == '6') + { + if (REG_EQUALS("cr0")) + { + uint64_t cr0 = va_arg(*pArgs, uint64_t); + fFlags |= RTSTR_F_64BIT; + cch = RTStrFormatNumber(&szBuf[0], cr0, 16, 8, -1, fFlags | RTSTR_F_ZEROPAD); + cchOutput += pfnOutput(pvArgOutput, szBuf, cch); + REG_OUT_BIT(cr0, X86_CR0_PE, "PE"); + REG_OUT_BIT(cr0, X86_CR0_MP, "MP"); + REG_OUT_BIT(cr0, X86_CR0_EM, "EM"); + REG_OUT_BIT(cr0, X86_CR0_TS, "DE"); + REG_OUT_BIT(cr0, X86_CR0_ET, "ET"); + REG_OUT_BIT(cr0, X86_CR0_NE, "NE"); + REG_OUT_BIT(cr0, X86_CR0_WP, "WP"); + REG_OUT_BIT(cr0, X86_CR0_AM, "AM"); + REG_OUT_BIT(cr0, X86_CR0_NW, "NW"); + REG_OUT_BIT(cr0, X86_CR0_CD, "CD"); + REG_OUT_BIT(cr0, X86_CR0_PG, "PG"); + REG_OUT_CLOSE(cr0); + } + else if (REG_EQUALS("cr4")) + { + uint64_t cr4 = va_arg(*pArgs, uint64_t); + fFlags |= RTSTR_F_64BIT; + cch = RTStrFormatNumber(&szBuf[0], cr4, 16, 8, -1, fFlags | RTSTR_F_ZEROPAD); + cchOutput += pfnOutput(pvArgOutput, szBuf, cch); + REG_OUT_BIT(cr4, X86_CR4_VME, "VME"); + REG_OUT_BIT(cr4, X86_CR4_PVI, "PVI"); + REG_OUT_BIT(cr4, X86_CR4_TSD, "TSD"); + REG_OUT_BIT(cr4, X86_CR4_DE, "DE"); + REG_OUT_BIT(cr4, X86_CR4_PSE, "PSE"); + REG_OUT_BIT(cr4, X86_CR4_PAE, "PAE"); + REG_OUT_BIT(cr4, X86_CR4_MCE, "MCE"); + REG_OUT_BIT(cr4, X86_CR4_PGE, "PGE"); + REG_OUT_BIT(cr4, X86_CR4_PCE, "PCE"); + REG_OUT_BIT(cr4, X86_CR4_OSFXSR, "OSFXSR"); + REG_OUT_BIT(cr4, X86_CR4_OSXMMEEXCPT, "OSXMMEEXCPT"); + REG_OUT_BIT(cr4, X86_CR4_VMXE, "VMXE"); + REG_OUT_BIT(cr4, X86_CR4_SMXE, "SMXE"); + REG_OUT_BIT(cr4, X86_CR4_PCIDE, "PCIDE"); + REG_OUT_BIT(cr4, X86_CR4_OSXSAVE, "OSXSAVE"); + REG_OUT_BIT(cr4, X86_CR4_SMEP, "SMEP"); + REG_OUT_BIT(cr4, X86_CR4_SMAP, "SMAP"); + REG_OUT_CLOSE(cr4); + } + else + AssertMsgFailed(("Unknown x86 register specified in '%.10s'!\n", pszFormatOrg)); + } +#endif + else + AssertMsgFailed(("Unknown architecture specified in '%.10s'!\n", pszFormatOrg)); +#undef REG_OUT_BIT +#undef REG_OUT_CLOSE +#undef REG_EQUALS + return cchOutput; + } + + /* + * Invalid/Unknown. Bitch about it. + */ + default: + AssertMsgFailed(("Invalid IPRT format type '%.10s'!\n", pszFormatOrg)); + break; + } + } + else + AssertMsgFailed(("Invalid IPRT format type '%.10s'!\n", pszFormatOrg)); + + NOREF(pszFormatOrg); + return 0; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/strformattype.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/strformattype.c @@ -0,0 +1,476 @@ +/* $Id: strformattype.cpp $ */ +/** @file + * IPRT - IPRT String Formatter Extensions, Dynamic Types. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_STRING +#include +#include "internal/iprt.h" + +#include +#include +#include +#include "internal/string.h" + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#ifdef RT_STRICT +# define RTSTRFORMATTYPE_WITH_LOCKING +#endif +#ifdef RTSTRFORMATTYPE_WITH_LOCKING +# define RTSTRFORMATTYPE_LOCK_OFFSET 0x7fff0000 +#endif + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Description of a registered formatting type. + * + * In GC we'll be using offsets instead of pointers just to try avoid having to + * do the bothersome relocating. This of course assumes that all the relevant + * code stays within the same mapping. + */ +typedef struct RTSTRDYNFMT +{ + /** The length of the type. */ + uint8_t cchType; + /** The type name. */ + char szType[47]; + /** The handler function. + * In GC the offset is relative to g_aTypes[0], so that &g_aTypes[0] + offHandler + * gives the actual address. */ +#ifdef IN_RC + int32_t offHandler; +#else + PFNRTSTRFORMATTYPE pfnHandler; +#endif + /** Callback argument. */ + void * volatile pvUser; +#if ARCH_BITS == 32 + /** Size alignment padding. */ + char abPadding[8]; +#endif +} RTSTRDYNFMT; +AssertCompileSizeAlignment(RTSTRDYNFMT, 32); +typedef RTSTRDYNFMT *PRTSTRDYNFMT; +typedef RTSTRDYNFMT const *PCRTSTRDYNFMT; + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The registered types, sorted for binary lookup. + * We use a static array here because it avoids RTMemAlloc dependencies+leaks. */ +static RTSTRDYNFMT g_aTypes[64]; +/** The number of registered types. */ +static uint32_t g_cTypes = 0; +#ifdef RTSTRFORMATTYPE_WITH_LOCKING +/** This is just a thing we assert/spin on. + * Zero == unlocked, negative == write locked, positive == read locked. + * + * The user should do all the serialization and we'll smack his fingers in + * strict builds if he doesn't. */ +static int32_t volatile g_i32Spinlock = 0; +#endif + + +/** + * Locks the stuff for updating. + * + * Mostly for check that the caller is doing his job. + */ +DECLINLINE(void) rtstrFormatTypeWriteLock(void) +{ +#if defined(RTSTRFORMATTYPE_WITH_LOCKING) + if (RT_UNLIKELY(!ASMAtomicCmpXchgS32(&g_i32Spinlock, -RTSTRFORMATTYPE_LOCK_OFFSET, 0))) + { + unsigned volatile i; + + AssertFailed(); + for (i = 0;; i++) + if ( !g_i32Spinlock + && ASMAtomicCmpXchgS32(&g_i32Spinlock, -RTSTRFORMATTYPE_LOCK_OFFSET, 0)) + break; + } +#endif +} + + +/** + * Undoing rtstrFormatTypeWriteLock. + */ +DECLINLINE(void) rtstrFormatTypeWriteUnlock(void) +{ +#if defined(RTSTRFORMATTYPE_WITH_LOCKING) + Assert(g_i32Spinlock < 0); + ASMAtomicAddS32(&g_i32Spinlock, RTSTRFORMATTYPE_LOCK_OFFSET); +#endif +} + + +/** + * Locks the stuff for reading. + * + * This is just cheap stuff to make sure the caller is doing the right thing. + */ +DECLINLINE(void) rtstrFormatTypeReadLock(void) +{ +#if defined(RTSTRFORMATTYPE_WITH_LOCKING) + if (RT_UNLIKELY(ASMAtomicIncS32(&g_i32Spinlock) < 0)) + { + unsigned volatile i; + + AssertFailed(); + for (i = 0;; i++) + if (ASMAtomicUoReadS32(&g_i32Spinlock) > 0) + break; + } +#endif +} + + +/** + * Undoing rtstrFormatTypeReadLock. + */ +DECLINLINE(void) rtstrFormatTypeReadUnlock(void) +{ +#if defined(RTSTRFORMATTYPE_WITH_LOCKING) + Assert(g_i32Spinlock > 0); + ASMAtomicDecS32(&g_i32Spinlock); +#endif +} + + +/** + * Compares a type string with a type entry, the string doesn't need to be terminated. + * + * @returns Same as memcmp. + * @param pszType The type string, doesn't need to be terminated. + * @param cchType The number of chars in @a pszType to compare. + * @param pType The type entry to compare with. + */ +DECLINLINE(int) rtstrFormatTypeCompare(const char *pszType, size_t cchType, PCRTSTRDYNFMT pType) +{ + size_t cch = RT_MIN(cchType, pType->cchType); + int iDiff = memcmp(pszType, pType->szType, cch); + if (!iDiff) + { + if (cchType == pType->cchType) + return 0; + iDiff = cchType < pType->cchType ? -1 : 1; + } + return iDiff; +} + + +/** + * Looks up a type entry. + * + * @returns The type index, -1 on failure. + * @param pszType The type to look up. This doesn't have to be terminated. + * @param cchType The length of the type. + */ +DECLINLINE(int32_t) rtstrFormatTypeLookup(const char *pszType, size_t cchType) +{ + /* + * Lookup the type - binary search. + */ + int32_t iStart = 0; + int32_t iEnd = g_cTypes - 1; + int32_t i = iEnd / 2; + for (;;) + { + int iDiff = rtstrFormatTypeCompare(pszType, cchType, &g_aTypes[i]); + if (!iDiff) + return i; + if (iEnd == iStart) + break; + if (iDiff < 0) + iEnd = i - 1; + else + iStart = i + 1; + if (iEnd < iStart) + break; + i = iStart + (iEnd - iStart) / 2; + } + return -1; +} + + +/** + * Register a format handler for a type. + * + * The format handler is used to handle '%R[type]' format types, where the argument + * in the vector is a pointer value (a bit restrictive, but keeps it simple). + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_ALREADY_EXISTS if the type has already been registered. + * @retval VERR_TOO_MANY_OPEN_FILES if all the type slots has been allocated already. + * + * @param pszType The type name. + * @param pfnHandler The handler address. See FNRTSTRFORMATTYPE for details. + * @param pvUser The user argument to pass to the handler. See RTStrFormatTypeSetUser + * for how to update this later. + */ +RTDECL(int) RTStrFormatTypeRegister(const char *pszType, PFNRTSTRFORMATTYPE pfnHandler, void *pvUser) +{ + int rc; + size_t cchType; + uint32_t cTypes; + + /* + * Validate input. + */ + AssertPtr(pfnHandler); + AssertPtr(pszType); + cchType = strlen(pszType); + AssertReturn(cchType < RT_SIZEOFMEMB(RTSTRDYNFMT, szType), VERR_INVALID_PARAMETER); + + /* + * Try add it. + */ + rtstrFormatTypeWriteLock(); + + /* check that there are empty slots. */ + cTypes = g_cTypes; + if (cTypes < RT_ELEMENTS(g_aTypes)) + { + /* find where to insert it. */ + uint32_t i = 0; + rc = VINF_SUCCESS; + while (i < cTypes) + { + int iDiff = rtstrFormatTypeCompare(pszType, cchType, &g_aTypes[i]); + if (!iDiff) + { + rc = VERR_ALREADY_EXISTS; + break; + } + if (iDiff < 0) + break; + i++; + } + if (RT_SUCCESS(rc)) + { + /* make room. */ + uint32_t cToMove = cTypes - i; + if (cToMove) + memmove(&g_aTypes[i + 1], &g_aTypes[i], cToMove * sizeof(g_aTypes[i])); + + /* insert the new entry. */ + memset(&g_aTypes[i], 0, sizeof(g_aTypes[i])); + memcpy(&g_aTypes[i].szType[0], pszType, cchType + 1); + g_aTypes[i].cchType = (uint8_t)cchType; + g_aTypes[i].pvUser = pvUser; +#ifdef IN_RC + g_aTypes[i].offHandler = (intptr_t)pfnHandler - (intptr_t)&g_aTypes[0]; +#else + g_aTypes[i].pfnHandler = pfnHandler; +#endif + ASMAtomicIncU32(&g_cTypes); + rc = VINF_SUCCESS; + } + } + else + rc = VERR_TOO_MANY_OPEN_FILES; /** @todo fix error code */ + + rtstrFormatTypeWriteUnlock(); + + return rc; +} +RT_EXPORT_SYMBOL(RTStrFormatTypeRegister); + + +/** + * Deregisters a format type. + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to deregister. + */ +RTDECL(int) RTStrFormatTypeDeregister(const char *pszType) +{ + int32_t i; + + /* + * Validate input. + */ + AssertPtr(pszType); + + /* + * Locate the entry and remove it. + */ + rtstrFormatTypeWriteLock(); + i = rtstrFormatTypeLookup(pszType, strlen(pszType)); + if (i >= 0) + { + const uint32_t cTypes = g_cTypes; + int32_t cToMove = cTypes - i - 1; + if (cToMove > 0) + memmove(&g_aTypes[i], &g_aTypes[i + 1], cToMove * sizeof(g_aTypes[i])); + memset(&g_aTypes[cTypes - 1], 0, sizeof(g_aTypes[0])); + ASMAtomicDecU32(&g_cTypes); + } + rtstrFormatTypeWriteUnlock(); + + Assert(i >= 0); + return i >= 0 + ? VINF_SUCCESS + : VERR_FILE_NOT_FOUND; /** @todo fix status code */ +} +RT_EXPORT_SYMBOL(RTStrFormatTypeDeregister); + + +/** + * Sets the user argument for a type. + * + * This can be used if a user argument needs relocating in GC. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to update. + * @param pvUser The new user argument value. + */ +RTDECL(int) RTStrFormatTypeSetUser(const char *pszType, void *pvUser) +{ + int32_t i; + + /* + * Validate input. + */ + AssertPtr(pszType); + + /* + * Locate the entry and update it. + */ + rtstrFormatTypeReadLock(); + + i = rtstrFormatTypeLookup(pszType, strlen(pszType)); + if (i >= 0) + ASMAtomicWritePtr(&g_aTypes[i].pvUser, pvUser); + + rtstrFormatTypeReadUnlock(); + + Assert(i >= 0); + return i >= 0 + ? VINF_SUCCESS + : VERR_FILE_NOT_FOUND; /** @todo fix status code */ +} +RT_EXPORT_SYMBOL(RTStrFormatTypeSetUser); + + +/** + * Formats a type using a registered callback handler. + * + * This will handle %R[type]. + * + * @returns The number of bytes formatted. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +DECLHIDDEN(size_t) rtstrFormatType(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char **ppszFormat, + va_list *pArgs, int cchWidth, int cchPrecision, unsigned fFlags, char chArgSize) +{ + size_t cch; + int32_t i; + char const *pszTypeEnd; + char const *pszType; + char ch; + void *pvValue = va_arg(*pArgs, void *); + NOREF(chArgSize); + + /* + * Parse out the type. + */ + pszType = *ppszFormat + 2; + *ppszFormat = pszType; + Assert(pszType[-1] == '['); + Assert(pszType[-2] == 'R'); + pszTypeEnd = pszType; + while ((ch = *pszTypeEnd) != ']') + { + AssertReturn(ch != '\0', 0); + AssertReturn(ch != '%', 0); + AssertReturn(ch != '[', 0); + pszTypeEnd++; + } + *ppszFormat = pszTypeEnd + 1; + + /* + * Locate the entry and call the handler. + */ + rtstrFormatTypeReadLock(); + + i = rtstrFormatTypeLookup(pszType, pszTypeEnd - pszType); + if (RT_LIKELY(i >= 0)) + { +#ifdef IN_RC + PFNRTSTRFORMATTYPE pfnHandler = (PFNRTSTRFORMATTYPE)((intptr_t)&g_aTypes[0] + g_aTypes[i].offHandler); +#else + PFNRTSTRFORMATTYPE pfnHandler = g_aTypes[i].pfnHandler; +#endif + void *pvUser = ASMAtomicReadPtr(&g_aTypes[i].pvUser); + + rtstrFormatTypeReadUnlock(); + + cch = pfnHandler(pfnOutput, pvArgOutput, g_aTypes[i].szType, pvValue, cchWidth, cchPrecision, fFlags, pvUser); + } + else + { + rtstrFormatTypeReadUnlock(); + + cch = pfnOutput(pvArgOutput, RT_STR_TUPLE("")); + } + + return cch; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/strprintf.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/strprintf.c @@ -0,0 +1,149 @@ +/* $Id: strprintf.cpp $ */ +/** @file + * IPRT - String Formatters. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** strbufoutput() argument structure. */ +typedef struct STRBUFARG +{ + /** Pointer to current buffer position. */ + char *psz; + /** Number of bytes left in the buffer - not including the trailing zero. */ + size_t cch; +} STRBUFARG; +/** Pointer to a strbufoutput() argument structure. */ +typedef STRBUFARG *PSTRBUFARG; + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +static DECLCALLBACK(size_t) strbufoutput(void *pvArg, const char *pachChars, size_t cbChars); + + +/** + * Output callback. + * + * @returns number of bytes written. + * @param pvArg Pointer to a STRBUFARG structure. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +static DECLCALLBACK(size_t) strbufoutput(void *pvArg, const char *pachChars, size_t cbChars) +{ + PSTRBUFARG pArg = (PSTRBUFARG)pvArg; + char *pszCur = pArg->psz; /* We actually have to spell this out for VS2010, or it will load for each case. */ + + cbChars = RT_MIN(pArg->cch, cbChars); + if (cbChars) + { + pArg->cch -= cbChars; + + /* Note! For VS2010/64 we need at least 7 case statements before it generates a jump table. */ + switch (cbChars) + { + default: + memcpy(pszCur, pachChars, cbChars); + break; + case 8: pszCur[7] = pachChars[7]; RT_FALL_THRU(); + case 7: pszCur[6] = pachChars[6]; RT_FALL_THRU(); + case 6: pszCur[5] = pachChars[5]; RT_FALL_THRU(); + case 5: pszCur[4] = pachChars[4]; RT_FALL_THRU(); + case 4: pszCur[3] = pachChars[3]; RT_FALL_THRU(); + case 3: pszCur[2] = pachChars[2]; RT_FALL_THRU(); + case 2: pszCur[1] = pachChars[1]; RT_FALL_THRU(); + case 1: pszCur[0] = pachChars[0]; RT_FALL_THRU(); + case 0: + break; + } + pArg->psz = pszCur += cbChars; + } + *pszCur = '\0'; + + return cbChars; +} + + +RTDECL(size_t) RTStrPrintf(char *pszBuffer, size_t cchBuffer, const char *pszFormat, ...) +{ + /* Explicitly inline RTStrPrintfV + RTStrPrintfExV here because this is a frequently use API. */ + STRBUFARG Arg; + va_list args; + size_t cbRet; + + AssertMsgReturn(cchBuffer, ("Excellent idea! Format a string with no space for the output!\n"), 0); + Arg.psz = pszBuffer; + Arg.cch = cchBuffer - 1; + + va_start(args, pszFormat); + cbRet = RTStrFormatV(strbufoutput, &Arg, NULL, NULL, pszFormat, args); + va_end(args); + + return cbRet; +} +RT_EXPORT_SYMBOL(RTStrPrintf); + + +RTDECL(size_t) RTStrPrintfExV(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, const char *pszFormat, va_list args) +{ + STRBUFARG Arg; + AssertMsgReturn(cchBuffer, ("Excellent idea! Format a string with no space for the output!\n"), 0); + Arg.psz = pszBuffer; + Arg.cch = cchBuffer - 1; + return RTStrFormatV(strbufoutput, &Arg, pfnFormat, pvArg, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTStrPrintfExV); + + +RTDECL(size_t) RTStrPrintfV(char *pszBuffer, size_t cchBuffer, const char *pszFormat, va_list args) +{ + return RTStrPrintfExV(NULL, NULL, pszBuffer, cchBuffer, pszFormat, args); +} +RT_EXPORT_SYMBOL(RTStrPrintfV); + + +RTDECL(size_t) RTStrPrintfEx(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, const char *pszFormat, ...) +{ + va_list args; + size_t cbRet; + va_start(args, pszFormat); + cbRet = RTStrPrintfExV(pfnFormat, pvArg, pszBuffer, cchBuffer, pszFormat, args); + va_end(args); + return cbRet; +} +RT_EXPORT_SYMBOL(RTStrPrintfEx); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/string/strtonum.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/string/strtonum.c @@ -0,0 +1,1013 @@ +/* $Id: strtonum.cpp $ */ +/** @file + * IPRT - String To Number Conversion. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include /* needed for RT_C_IS_DIGIT */ +#include + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** 8-bit char -> digit. */ +static const unsigned char g_auchDigits[256] = +{ + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,255,255,255,255,255,255, + 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,255,255,255,255,255, + 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +}; +/** Approximated overflow shift checks. */ +static const char g_auchShift[36] = +{ + /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 */ + 64, 64, 63, 63, 62, 62, 62, 62, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59 +}; + +/* +#include +int main() +{ + int i; + printf("static const unsigned char g_auchDigits[256] =\n" + "{"); + for (i = 0; i < 256; i++) + { + int ch = 255; + if (i >= '0' && i <= '9') + ch = i - '0'; + else if (i >= 'a' && i <= 'z') + ch = i - 'a' + 10; + else if (i >= 'A' && i <= 'Z') + ch = i - 'A' + 10; + if (i == 0) + printf("\n %3d", ch); + else if ((i % 32) == 0) + printf(",\n %3d", ch); + else + printf(",%3d", ch); + } + printf("\n" + "};\n"); + return 0; +} +*/ + + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint64_t *pu64) +{ + const char *psz = pszValue; + int iShift; + int rc; + uint64_t u64; + unsigned char uch; + + /* + * Positive/Negative stuff. + */ + bool fPositive = true; + for (;; psz++) + { + if (*psz == '+') + fPositive = true; + else if (*psz == '-') + fPositive = !fPositive; + else + break; + } + + /* + * Check for hex prefix. + */ + if (!uBase) + { + if ( psz[0] == '0' + && (psz[1] == 'x' || psz[1] == 'X') + && g_auchDigits[(unsigned char)psz[2]] < 16) + { + uBase = 16; + psz += 2; + } + else if ( psz[0] == '0' + && g_auchDigits[(unsigned char)psz[1]] < 8) + { + uBase = 8; + psz++; + } + else + uBase = 10; + } + else if ( uBase == 16 + && psz[0] == '0' + && (psz[1] == 'x' || psz[1] == 'X') + && g_auchDigits[(unsigned char)psz[2]] < 16) + psz += 2; + + /* + * Interpret the value. + * Note: We only support ascii digits at this time... :-) + */ + iShift = g_auchShift[uBase]; + pszValue = psz; /* (Prefix and sign doesn't count in the digit counting.) */ + rc = VINF_SUCCESS; + u64 = 0; + while ((uch = (unsigned char)*psz) != 0) + { + unsigned char chDigit = g_auchDigits[uch]; + uint64_t u64Prev; + + if (chDigit >= uBase) + break; + + u64Prev = u64; + u64 *= uBase; + u64 += chDigit; + if (u64Prev > u64 || (u64Prev >> iShift)) + rc = VWRN_NUMBER_TOO_BIG; + psz++; + } + + if (!fPositive) + { + if (rc == VINF_SUCCESS) + rc = VWRN_NEGATIVE_UNSIGNED; + u64 = -(int64_t)u64; + } + + if (pu64) + *pu64 = u64; + + if (psz == pszValue) + rc = VERR_NO_DIGITS; + + if (ppszNext) + *ppszNext = (char *)psz; + + /* + * Warn about trailing chars/spaces. + */ + if ( rc == VINF_SUCCESS + && *psz) + { + while (*psz == ' ' || *psz == '\t') + psz++; + rc = *psz ? VWRN_TRAILING_CHARS : VWRN_TRAILING_SPACES; + } + + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt64Ex); + + +/** + * Converts a string representation of a number to a 64-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Full(const char *pszValue, unsigned uBase, uint64_t *pu64) +{ + char *psz; + int rc = RTStrToUInt64Ex(pszValue, &psz, uBase, pu64); + if (RT_SUCCESS(rc) && *psz) + { + if (rc == VWRN_TRAILING_CHARS || rc == VWRN_TRAILING_SPACES) + rc = -rc; + else + { + while (*psz == ' ' || *psz == '\t') + psz++; + rc = *psz ? VERR_TRAILING_CHARS : VERR_TRAILING_SPACES; + } + } + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt64Full); + + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 64-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint64_t) RTStrToUInt64(const char *pszValue) +{ + uint64_t u64; + int rc = RTStrToUInt64Ex(pszValue, NULL, 0, &u64); + if (RT_SUCCESS(rc)) + return u64; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToUInt64); + + +/** + * Converts a string representation of a number to a 32-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint32_t *pu32) +{ + uint64_t u64; + int rc = RTStrToUInt64Ex(pszValue, ppszNext, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffffffffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu32) + *pu32 = (uint32_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt32Ex); + + +/** + * Converts a string representation of a number to a 32-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Full(const char *pszValue, unsigned uBase, uint32_t *pu32) +{ + uint64_t u64; + int rc = RTStrToUInt64Full(pszValue, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffffffffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu32) + *pu32 = (uint32_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt32Full); + + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 32-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint32_t) RTStrToUInt32(const char *pszValue) +{ + uint32_t u32; + int rc = RTStrToUInt32Ex(pszValue, NULL, 0, &u32); + if (RT_SUCCESS(rc)) + return u32; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToUInt32); + + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint16_t *pu16) +{ + uint64_t u64; + int rc = RTStrToUInt64Ex(pszValue, ppszNext, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu16) + *pu16 = (uint16_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt16Ex); + + +/** + * Converts a string representation of a number to a 16-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Full(const char *pszValue, unsigned uBase, uint16_t *pu16) +{ + uint64_t u64; + int rc = RTStrToUInt64Full(pszValue, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu16) + *pu16 = (uint16_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt16Full); + + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * The base is guessed. + * + * @returns 16-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint16_t) RTStrToUInt16(const char *pszValue) +{ + uint16_t u16; + int rc = RTStrToUInt16Ex(pszValue, NULL, 0, &u16); + if (RT_SUCCESS(rc)) + return u16; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToUInt16); + + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint8_t *pu8) +{ + uint64_t u64; + int rc = RTStrToUInt64Ex(pszValue, ppszNext, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu8) + *pu8 = (uint8_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt8Ex); + + +/** + * Converts a string representation of a number to a 8-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Full(const char *pszValue, unsigned uBase, uint8_t *pu8) +{ + uint64_t u64; + int rc = RTStrToUInt64Full(pszValue, uBase, &u64); + if (RT_SUCCESS(rc)) + { + if (u64 & ~0xffULL) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pu8) + *pu8 = (uint8_t)u64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToUInt8Full); + + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * The base is guessed. + * + * @returns 8-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint8_t) RTStrToUInt8(const char *pszValue) +{ + uint8_t u8; + int rc = RTStrToUInt8Ex(pszValue, NULL, 0, &u8); + if (RT_SUCCESS(rc)) + return u8; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToUInt8); + + + + + + + +/** + * Converts a string representation of a number to a 64-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, int64_t *pi64) +{ + const char *psz = pszValue; + int iShift; + int rc; + int64_t i64; + unsigned char uch; + + /* + * Positive/Negative stuff. + */ + bool fPositive = true; + for (;; psz++) + { + if (*psz == '+') + fPositive = true; + else if (*psz == '-') + fPositive = !fPositive; + else + break; + } + + /* + * Check for hex prefix. + */ + if (!uBase) + { + if ( *psz == '0' + && (psz[1] == 'x' || psz[1] == 'X') + && g_auchDigits[(unsigned char)psz[2]] < 16) + { + uBase = 16; + psz += 2; + } + else if ( *psz == '0' + && g_auchDigits[(unsigned char)psz[1]] < 8) + { + uBase = 8; + psz++; + } + else + uBase = 10; + } + else if ( uBase == 16 + && *psz == '0' + && (psz[1] == 'x' || psz[1] == 'X') + && g_auchDigits[(unsigned char)psz[2]] < 16) + psz += 2; + + /* + * Interpret the value. + * Note: We only support ascii digits at this time... :-) + */ + iShift = g_auchShift[uBase]; /** @todo test this, it's probably not 100% right yet. */ + pszValue = psz; /* (Prefix and sign doesn't count in the digit counting.) */ + rc = VINF_SUCCESS; + i64 = 0; + while ((uch = (unsigned char)*psz) != 0) + { + unsigned char chDigit = g_auchDigits[uch]; + int64_t i64Prev; + + if (chDigit >= uBase) + break; + + i64Prev = i64; + i64 *= uBase; + i64 += chDigit; + if (i64Prev > i64 || (i64Prev >> iShift)) + rc = VWRN_NUMBER_TOO_BIG; + psz++; + } + + if (!fPositive) + i64 = -i64; + + if (pi64) + *pi64 = i64; + + if (psz == pszValue) + rc = VERR_NO_DIGITS; + + if (ppszNext) + *ppszNext = (char *)psz; + + /* + * Warn about trailing chars/spaces. + */ + if ( rc == VINF_SUCCESS + && *psz) + { + while (*psz == ' ' || *psz == '\t') + psz++; + rc = *psz ? VWRN_TRAILING_CHARS : VWRN_TRAILING_SPACES; + } + + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt64Ex); + + +/** + * Converts a string representation of a number to a 64-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Full(const char *pszValue, unsigned uBase, int64_t *pi64) +{ + char *psz; + int rc = RTStrToInt64Ex(pszValue, &psz, uBase, pi64); + if (RT_SUCCESS(rc) && *psz) + { + if (rc == VWRN_TRAILING_CHARS || rc == VWRN_TRAILING_SPACES) + rc = -rc; + else + { + while (*psz == ' ' || *psz == '\t') + psz++; + rc = *psz ? VERR_TRAILING_CHARS : VERR_TRAILING_SPACES; + } + } + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt64Full); + + +/** + * Converts a string representation of a number to a 64-bit signed number. + * The base is guessed. + * + * @returns 64-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int64_t) RTStrToInt64(const char *pszValue) +{ + int64_t i64; + int rc = RTStrToInt64Ex(pszValue, NULL, 0, &i64); + if (RT_SUCCESS(rc)) + return i64; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToInt64); + + +/** + * Converts a string representation of a number to a 32-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, int32_t *pi32) +{ + int64_t i64; + int rc = RTStrToInt64Ex(pszValue, ppszNext, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int32_t i32 = (int32_t)i64; + if (i64 != (int64_t)i32) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi32) + *pi32 = (int32_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt32Ex); + + +/** + * Converts a string representation of a number to a 32-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Full(const char *pszValue, unsigned uBase, int32_t *pi32) +{ + int64_t i64; + int rc = RTStrToInt64Full(pszValue, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int32_t i32 = (int32_t)i64; + if (i64 != (int64_t)i32) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi32) + *pi32 = (int32_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt32Full); + + +/** + * Converts a string representation of a number to a 32-bit signed number. + * The base is guessed. + * + * @returns 32-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int32_t) RTStrToInt32(const char *pszValue) +{ + int32_t i32; + int rc = RTStrToInt32Ex(pszValue, NULL, 0, &i32); + if (RT_SUCCESS(rc)) + return i32; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToInt32); + + +/** + * Converts a string representation of a number to a 16-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, int16_t *pi16) +{ + int64_t i64; + int rc = RTStrToInt64Ex(pszValue, ppszNext, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int16_t i16 = (int16_t)i64; + if (i64 != (int64_t)i16) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi16) + *pi16 = (int16_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt16Ex); + + +/** + * Converts a string representation of a number to a 16-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Full(const char *pszValue, unsigned uBase, int16_t *pi16) +{ + int64_t i64; + int rc = RTStrToInt64Full(pszValue, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int16_t i16 = (int16_t)i64; + if (i64 != (int64_t)i16) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi16) + *pi16 = (int16_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt16Full); + + +/** + * Converts a string representation of a number to a 16-bit signed number. + * The base is guessed. + * + * @returns 16-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int16_t) RTStrToInt16(const char *pszValue) +{ + int16_t i16; + int rc = RTStrToInt16Ex(pszValue, NULL, 0, &i16); + if (RT_SUCCESS(rc)) + return i16; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToInt16); + + +/** + * Converts a string representation of a number to a 8-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, int8_t *pi8) +{ + int64_t i64; + int rc = RTStrToInt64Ex(pszValue, ppszNext, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int8_t i8 = (int8_t)i64; + if (i64 != (int64_t)i8) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi8) + *pi8 = (int8_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt8Ex); + + +/** + * Converts a string representation of a number to a 8-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Full(const char *pszValue, unsigned uBase, int8_t *pi8) +{ + int64_t i64; + int rc = RTStrToInt64Full(pszValue, uBase, &i64); + if (RT_SUCCESS(rc)) + { + int8_t i8 = (int8_t)i64; + if (i64 != (int64_t)i8) + rc = VWRN_NUMBER_TOO_BIG; + } + if (pi8) + *pi8 = (int8_t)i64; + return rc; +} +RT_EXPORT_SYMBOL(RTStrToInt8Full); + + +/** + * Converts a string representation of a number to a 8-bit signed number. + * The base is guessed. + * + * @returns 8-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int8_t) RTStrToInt8(const char *pszValue) +{ + int8_t i8; + int rc = RTStrToInt8Ex(pszValue, NULL, 0, &i8); + if (RT_SUCCESS(rc)) + return i8; + return 0; +} +RT_EXPORT_SYMBOL(RTStrToInt8); + + +RTDECL(int) RTStrConvertHexBytes(char const *pszHex, void *pv, size_t cb, uint32_t fFlags) +{ + size_t cbDst; + uint8_t *pbDst; + const char *pszSrc; + + AssertPtrReturn(pszHex, VERR_INVALID_POINTER); + AssertReturn(!fFlags, VERR_INVALID_PARAMETER); + + cbDst = cb; + pbDst = (uint8_t *)pv; + pszSrc = pszHex; + for (;;) + { + /* Pick the next two digit from the string. */ + char ch = *pszSrc++; + unsigned char uchDigit1 = g_auchDigits[(unsigned char)ch]; + unsigned char uchDigit2; + if (uchDigit1 >= 16) + { + if (!ch) + return cbDst == 0 ? VINF_SUCCESS : VERR_BUFFER_UNDERFLOW; + + while (ch == ' ' || ch == '\t') + ch = *pszSrc++; + return ch ? VWRN_TRAILING_CHARS : VWRN_TRAILING_SPACES; + } + + ch = *pszSrc++; + uchDigit2 = g_auchDigits[(unsigned char)ch]; + if (uchDigit2 >= 16) + return VERR_UNEVEN_INPUT; + + /* Add the byte to the output buffer. */ + if (!cbDst) + return VERR_BUFFER_OVERFLOW; + cbDst--; + *pbDst++ = (uchDigit1 << 4) | uchDigit2; + } +} +RT_EXPORT_SYMBOL(RTStrConvertHexBytes); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_Base.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_Base.cpp.h @@ -0,0 +1,460 @@ +/* $Id: avl_Base.cpp.h $ */ +/** @file + * kAVLBase - basic routines for all AVL trees. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLBase_h_ +#define _kAVLBase_h_ + + +/** @page pg_rt_kAVL kAVL Template configuration. + * @internal + * + * This is a template made to implement multiple AVL trees. The differences + * among the implementations are related to the key used. + * + * \#define KAVL_FN + * Use this to alter the names of the AVL functions. + * Must be defined. + * + * \#define KAVL_EQUAL_ALLOWED + * Define this to tell us that equal keys are allowed. + * Then Equal keys will be put in a list pointed to by pList in the KAVLNODECORE. + * This is by default not defined. + * + * \#define KAVL_CHECK_FOR_EQUAL_INSERT + * Define this to enable insert check for equal nodes. + * This is by default not defined. + * + * \#define KAVL_MAX_STACK + * Use this to specify the number of stack entries the stack will use when inserting + * and removing nodes from the tree. I think the size should be about + * log2() + 3 + * Must be defined. + * + */ + +/******************************************************************************* +* Defined Constants And Macros * +*******************************************************************************/ +#define AVL_HEIGHTOF(pNode) ((unsigned char)((pNode) != NULL ? pNode->uchHeight : 0)) + +/** @def KAVL_GET_POINTER + * Reads a 'pointer' value. + * + * @returns The native pointer. + * @param pp Pointer to the pointer to read. + */ + +/** @def KAVL_GET_POINTER_NULL + * Reads a 'pointer' value which can be KAVL_NULL. + * + * @returns The native pointer. + * @returns NULL pointer if KAVL_NULL. + * @param pp Pointer to the pointer to read. + */ + +/** @def KAVL_SET_POINTER + * Writes a 'pointer' value. + * For offset-based schemes offset relative to pp is calculated and assigned to *pp. + * + * @returns stored pointer. + * @param pp Pointer to where to store the pointer. + * @param p Native pointer to assign to *pp. + */ + +/** @def KAVL_SET_POINTER_NULL + * Writes a 'pointer' value which can be KAVL_NULL. + * + * For offset-based schemes offset relative to pp is calculated and assigned to *pp, + * if p is not KAVL_NULL of course. + * + * @returns stored pointer. + * @param pp Pointer to where to store the pointer. + * @param pp2 Pointer to where to pointer to assign to pp. This can be KAVL_NULL + */ + +#ifndef KAVL_GET_POINTER +# ifdef KAVL_OFFSET +# define KAVL_GET_POINTER(pp) ( (PKAVLNODECORE)((intptr_t)(pp) + *(pp)) ) +# define KAVL_GET_POINTER_NULL(pp) ( *(pp) != KAVL_NULL ? KAVL_GET_POINTER(pp) : NULL ) +# define KAVL_SET_POINTER(pp, p) ( (*(pp)) = ((intptr_t)(p) - (intptr_t)(pp)) ) +# define KAVL_SET_POINTER_NULL(pp, pp2) ( (*(pp)) = *(pp2) != KAVL_NULL ? (intptr_t)KAVL_GET_POINTER(pp2) - (intptr_t)(pp) : KAVL_NULL ) +# else +# define KAVL_GET_POINTER(pp) ( *(pp) ) +# define KAVL_GET_POINTER_NULL(pp) ( *(pp) ) +# define KAVL_SET_POINTER(pp, p) ( (*(pp)) = (p) ) +# define KAVL_SET_POINTER_NULL(pp, pp2) ( (*(pp)) = *(pp2) ) +# endif +#endif + + +/** @def KAVL_NULL + * The NULL 'pointer' equivalent. + */ +#ifndef KAVL_NULL +# ifdef KAVL_OFFSET +# define KAVL_NULL 0 +# else +# define KAVL_NULL NULL +# endif +#endif + +#ifndef KAVL_RANGE +# define KAVL_R_IS_INTERSECTING(key1B, key2B, key1E, key2E) KAVL_E(key1B, key2B) +# define KAVL_R_IS_IDENTICAL(key1B, key2B, key1E, key2E) KAVL_E(key1B, key2B) +#endif + +/** @def KAVL_DECL + * Function declation macro in the RTDECL tradition. + * @param a_Type The function return type. */ +#ifndef KAVL_DECL +# define KAVL_DECL(a_Type) RTDECL(a_Type) +#endif + + +/******************************************************************************* +* Structures and Typedefs * +*******************************************************************************/ +/* + * A stack used to avoid recursive calls... + */ +typedef struct _kAvlStack +{ + unsigned cEntries; + PPKAVLNODECORE aEntries[KAVL_MAX_STACK]; +} KAVLSTACK, *PKAVLSTACK; + +typedef struct _kAvlStack2 +{ + unsigned cEntries; + PKAVLNODECORE aEntries[KAVL_MAX_STACK]; + char achFlags[KAVL_MAX_STACK]; +} KAVLSTACK2, *PLAVLSTACK2; + + + +/** + * Rewinds a stack of pointers to pointers to nodes, rebalancing the tree. + * @param pStack Pointer to stack to rewind. + * @sketch LOOP thru all stack entries + * BEGIN + * Get pointer to pointer to node (and pointer to node) from the stack. + * IF 2 higher left subtree than in right subtree THEN + * BEGIN + * IF higher (or equal) left-sub-subtree than right-sub-subtree THEN + * * n+2|n+3 + * / \ / \ + * n+2 n ==> n+1 n+1|n+2 + * / \ / \ + * n+1 n|n+1 n|n+1 n + * + * Or with keys: + * + * 4 2 + * / \ / \ + * 2 5 ==> 1 4 + * / \ / \ + * 1 3 3 5 + * + * ELSE + * * n+2 + * / \ / \ + * n+2 n n+1 n+1 + * / \ ==> / \ / \ + * n n+1 n L R n + * / \ + * L R + * + * Or with keys: + * 6 4 + * / \ / \ + * 2 7 ==> 2 6 + * / \ / \ / \ + * 1 4 1 3 5 7 + * / \ + * 3 5 + * END + * ELSE IF 2 higher in right subtree than in left subtree THEN + * BEGIN + * Same as above but left <==> right. (invert the picture) + * ELSE + * IF correct height THEN break + * ELSE correct height. + * END + */ +DECLINLINE(void) KAVL_FN(Rebalance)(PKAVLSTACK pStack) +{ + while (pStack->cEntries > 0) + { + /** @todo Perhaps some of these KAVL_SET_POINTER_NULL() cases could be optimized away.. */ + PPKAVLNODECORE ppNode = pStack->aEntries[--pStack->cEntries]; + PKAVLNODECORE pNode = KAVL_GET_POINTER(ppNode); + PKAVLNODECORE pLeftNode = KAVL_GET_POINTER_NULL(&pNode->pLeft); + unsigned char uchLeftHeight = AVL_HEIGHTOF(pLeftNode); + PKAVLNODECORE pRightNode = KAVL_GET_POINTER_NULL(&pNode->pRight); + unsigned char uchRightHeight = AVL_HEIGHTOF(pRightNode); + + if (uchRightHeight + 1 < uchLeftHeight) + { + PKAVLNODECORE pLeftLeftNode = KAVL_GET_POINTER_NULL(&pLeftNode->pLeft); + PKAVLNODECORE pLeftRightNode = KAVL_GET_POINTER_NULL(&pLeftNode->pRight); + unsigned char uchLeftRightHeight = AVL_HEIGHTOF(pLeftRightNode); + + if (AVL_HEIGHTOF(pLeftLeftNode) >= uchLeftRightHeight) + { + KAVL_SET_POINTER_NULL(&pNode->pLeft, &pLeftNode->pRight); + KAVL_SET_POINTER(&pLeftNode->pRight, pNode); + pLeftNode->uchHeight = (unsigned char)(1 + (pNode->uchHeight = (unsigned char)(1 + uchLeftRightHeight))); + KAVL_SET_POINTER(ppNode, pLeftNode); + } + else + { + KAVL_SET_POINTER_NULL(&pLeftNode->pRight, &pLeftRightNode->pLeft); + KAVL_SET_POINTER_NULL(&pNode->pLeft, &pLeftRightNode->pRight); + KAVL_SET_POINTER(&pLeftRightNode->pLeft, pLeftNode); + KAVL_SET_POINTER(&pLeftRightNode->pRight, pNode); + pLeftNode->uchHeight = pNode->uchHeight = uchLeftRightHeight; + pLeftRightNode->uchHeight = uchLeftHeight; + KAVL_SET_POINTER(ppNode, pLeftRightNode); + } + } + else if (uchLeftHeight + 1 < uchRightHeight) + { + PKAVLNODECORE pRightLeftNode = KAVL_GET_POINTER_NULL(&pRightNode->pLeft); + unsigned char uchRightLeftHeight = AVL_HEIGHTOF(pRightLeftNode); + PKAVLNODECORE pRightRightNode = KAVL_GET_POINTER_NULL(&pRightNode->pRight); + + if (AVL_HEIGHTOF(pRightRightNode) >= uchRightLeftHeight) + { + KAVL_SET_POINTER_NULL(&pNode->pRight, &pRightNode->pLeft); + KAVL_SET_POINTER(&pRightNode->pLeft, pNode); + pRightNode->uchHeight = (unsigned char)(1 + (pNode->uchHeight = (unsigned char)(1 + uchRightLeftHeight))); + KAVL_SET_POINTER(ppNode, pRightNode); + } + else + { + KAVL_SET_POINTER_NULL(&pRightNode->pLeft, &pRightLeftNode->pRight); + KAVL_SET_POINTER_NULL(&pNode->pRight, &pRightLeftNode->pLeft); + KAVL_SET_POINTER(&pRightLeftNode->pRight, pRightNode); + KAVL_SET_POINTER(&pRightLeftNode->pLeft, pNode); + pRightNode->uchHeight = pNode->uchHeight = uchRightLeftHeight; + pRightLeftNode->uchHeight = uchRightHeight; + KAVL_SET_POINTER(ppNode, pRightLeftNode); + } + } + else + { + register unsigned char uchHeight = (unsigned char)(KMAX(uchLeftHeight, uchRightHeight) + 1); + if (uchHeight == pNode->uchHeight) + break; + pNode->uchHeight = uchHeight; + } + } + +} + + + + +/** + * Inserts a node into the AVL-tree. + * @returns TRUE if inserted. + * FALSE if node exists in tree. + * @param ppTree Pointer to the AVL-tree root node pointer. + * @param pNode Pointer to the node which is to be added. + * @sketch Find the location of the node (using binary tree algorithm.): + * LOOP until KAVL_NULL leaf pointer + * BEGIN + * Add node pointer pointer to the AVL-stack. + * IF new-node-key < node key THEN + * left + * ELSE + * right + * END + * Fill in leaf node and insert it. + * Rebalance the tree. + */ +KAVL_DECL(bool) KAVL_FN(Insert)(PPKAVLNODECORE ppTree, PKAVLNODECORE pNode) +{ + KAVLSTACK AVLStack; + PPKAVLNODECORE ppCurNode = ppTree; + register PKAVLNODECORE pCurNode; + register KAVLKEY Key = pNode->Key; NOREF(Key); +#ifdef KAVL_RANGE + register KAVLKEY KeyLast = pNode->KeyLast; NOREF(KeyLast); +#endif + + AVLStack.cEntries = 0; + +#ifdef KAVL_RANGE + if (Key > KeyLast) + return false; +#endif + + for (;;) + { + if (*ppCurNode != KAVL_NULL) + pCurNode = KAVL_GET_POINTER(ppCurNode); + else + break; + + kASSERT(AVLStack.cEntries < KAVL_MAX_STACK); + AVLStack.aEntries[AVLStack.cEntries++] = ppCurNode; +#ifdef KAVL_EQUAL_ALLOWED + if (KAVL_R_IS_IDENTICAL(pCurNode->Key, Key, pCurNode->KeyLast, KeyLast)) + { + /* + * If equal then we'll use a list of equal nodes. + */ + pNode->pLeft = pNode->pRight = KAVL_NULL; + pNode->uchHeight = 0; + KAVL_SET_POINTER_NULL(&pNode->pList, &pCurNode->pList); + KAVL_SET_POINTER(&pCurNode->pList, pNode); + return true; + } +#endif +#ifdef KAVL_CHECK_FOR_EQUAL_INSERT + if (KAVL_R_IS_INTERSECTING(pCurNode->Key, Key, pCurNode->KeyLast, KeyLast)) + return false; +#endif + if (KAVL_G(pCurNode->Key, Key)) + ppCurNode = &pCurNode->pLeft; + else + ppCurNode = &pCurNode->pRight; + } + + pNode->pLeft = pNode->pRight = KAVL_NULL; +#ifdef KAVL_EQUAL_ALLOWED + pNode->pList = KAVL_NULL; +#endif + pNode->uchHeight = 1; + KAVL_SET_POINTER(ppCurNode, pNode); + + KAVL_FN(Rebalance)(SSToDS(&AVLStack)); + return true; +} + + +/** + * Removes a node from the AVL-tree. + * @returns Pointer to the node. + * @param ppTree Pointer to the AVL-tree root node pointer. + * @param Key Key value of the node which is to be removed. + * @sketch Find the node which is to be removed: + * LOOP until not found + * BEGIN + * Add node pointer pointer to the AVL-stack. + * IF the keys matches THEN break! + * IF remove key < node key THEN + * left + * ELSE + * right + * END + * IF found THEN + * BEGIN + * IF left node not empty THEN + * BEGIN + * Find the right most node in the left tree while adding the pointer to the pointer to it's parent to the stack: + * Start at left node. + * LOOP until right node is empty + * BEGIN + * Add to stack. + * go right. + * END + * Link out the found node. + * Replace the node which is to be removed with the found node. + * Correct the stack entry for the pointer to the left tree. + * END + * ELSE + * BEGIN + * Move up right node. + * Remove last stack entry. + * END + * Balance tree using stack. + * END + * return pointer to the removed node (if found). + */ +KAVL_DECL(PKAVLNODECORE) KAVL_FN(Remove)(PPKAVLNODECORE ppTree, KAVLKEY Key) +{ + KAVLSTACK AVLStack; + PPKAVLNODECORE ppDeleteNode = ppTree; + register PKAVLNODECORE pDeleteNode; + + AVLStack.cEntries = 0; + + for (;;) + { + if (*ppDeleteNode != KAVL_NULL) + pDeleteNode = KAVL_GET_POINTER(ppDeleteNode); + else + return NULL; + + kASSERT(AVLStack.cEntries < KAVL_MAX_STACK); + AVLStack.aEntries[AVLStack.cEntries++] = ppDeleteNode; + if (KAVL_E(pDeleteNode->Key, Key)) + break; + + if (KAVL_G(pDeleteNode->Key, Key)) + ppDeleteNode = &pDeleteNode->pLeft; + else + ppDeleteNode = &pDeleteNode->pRight; + } + + if (pDeleteNode->pLeft != KAVL_NULL) + { + /* find the rightmost node in the left tree. */ + const unsigned iStackEntry = AVLStack.cEntries; + PPKAVLNODECORE ppLeftLeast = &pDeleteNode->pLeft; + register PKAVLNODECORE pLeftLeast = KAVL_GET_POINTER(ppLeftLeast); + + while (pLeftLeast->pRight != KAVL_NULL) + { + kASSERT(AVLStack.cEntries < KAVL_MAX_STACK); + AVLStack.aEntries[AVLStack.cEntries++] = ppLeftLeast; + ppLeftLeast = &pLeftLeast->pRight; + pLeftLeast = KAVL_GET_POINTER(ppLeftLeast); + } + + /* link out pLeftLeast */ + KAVL_SET_POINTER_NULL(ppLeftLeast, &pLeftLeast->pLeft); + + /* link it in place of the delete node. */ + KAVL_SET_POINTER_NULL(&pLeftLeast->pLeft, &pDeleteNode->pLeft); + KAVL_SET_POINTER_NULL(&pLeftLeast->pRight, &pDeleteNode->pRight); + pLeftLeast->uchHeight = pDeleteNode->uchHeight; + KAVL_SET_POINTER(ppDeleteNode, pLeftLeast); + AVLStack.aEntries[iStackEntry] = &pLeftLeast->pLeft; + } + else + { + KAVL_SET_POINTER_NULL(ppDeleteNode, &pDeleteNode->pRight); + AVLStack.cEntries--; + } + + KAVL_FN(Rebalance)(SSToDS(&AVLStack)); + return pDeleteNode; +} + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_Destroy.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_Destroy.cpp.h @@ -0,0 +1,110 @@ +/* $Id: avl_Destroy.cpp.h $ */ +/** @file + * kAVLDestroy - Walk the tree calling a callback to destroy all the nodes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLDestroy_h_ +#define _kAVLDestroy_h_ + + +/** + * Destroys the specified tree, starting with the root node and working our way down. + * + * @returns 0 on success. + * @returns Return value from callback on failure. On failure, the tree will be in + * an unbalanced condition and only further calls to the Destroy should be + * made on it. Note that the node we fail on will be considered dead and + * no action is taken to link it back into the tree. + * @param ppTree Pointer to the AVL-tree root node pointer. + * @param pfnCallBack Pointer to callback function. + * @param pvUser User parameter passed on to the callback function. + */ +KAVL_DECL(int) KAVL_FN(Destroy)(PPKAVLNODECORE ppTree, PKAVLCALLBACK pfnCallBack, void *pvUser) +{ + unsigned cEntries; + PKAVLNODECORE apEntries[KAVL_MAX_STACK]; + int rc; + + if (*ppTree == KAVL_NULL) + return VINF_SUCCESS; + + cEntries = 1; + apEntries[0] = KAVL_GET_POINTER(ppTree); + while (cEntries > 0) + { + /* + * Process the subtrees first. + */ + PKAVLNODECORE pNode = apEntries[cEntries - 1]; + if (pNode->pLeft != KAVL_NULL) + apEntries[cEntries++] = KAVL_GET_POINTER(&pNode->pLeft); + else if (pNode->pRight != KAVL_NULL) + apEntries[cEntries++] = KAVL_GET_POINTER(&pNode->pRight); + else + { +#ifdef KAVL_EQUAL_ALLOWED + /* + * Process nodes with the same key. + */ + while (pNode->pList != KAVL_NULL) + { + PKAVLNODECORE pEqual = KAVL_GET_POINTER(&pNode->pList); + KAVL_SET_POINTER(&pNode->pList, KAVL_GET_POINTER_NULL(&pEqual->pList)); + pEqual->pList = KAVL_NULL; + + rc = pfnCallBack(pEqual, pvUser); + if (rc != VINF_SUCCESS) + return rc; + } +#endif + + /* + * Unlink the node. + */ + if (--cEntries > 0) + { + PKAVLNODECORE pParent = apEntries[cEntries - 1]; + if (KAVL_GET_POINTER(&pParent->pLeft) == pNode) + pParent->pLeft = KAVL_NULL; + else + pParent->pRight = KAVL_NULL; + } + else + *ppTree = KAVL_NULL; + + kASSERT(pNode->pLeft == KAVL_NULL); + kASSERT(pNode->pRight == KAVL_NULL); + rc = pfnCallBack(pNode, pvUser); + if (rc != VINF_SUCCESS) + return rc; + } + } /* while */ + + kASSERT(*ppTree == KAVL_NULL); + + return VINF_SUCCESS; +} + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_DoWithAll.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_DoWithAll.cpp.h @@ -0,0 +1,142 @@ +/* $Id: avl_DoWithAll.cpp.h $ */ +/** @file + * kAVLDoWithAll - Do with all nodes routine for AVL trees. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLDoWithAll_h_ +#define _kAVLDoWithAll_h_ + + +/** + * Iterates thru all nodes in the given tree. + * @returns 0 on success. Return from callback on failure. + * @param ppTree Pointer to the AVL-tree root node pointer. + * @param fFromLeft TRUE: Left to right. + * FALSE: Right to left. + * @param pfnCallBack Pointer to callback function. + * @param pvParam Userparameter passed on to the callback function. + */ +KAVL_DECL(int) KAVL_FN(DoWithAll)(PPKAVLNODECORE ppTree, int fFromLeft, PKAVLCALLBACK pfnCallBack, void * pvParam) +{ + KAVLSTACK2 AVLStack; + PKAVLNODECORE pNode; +#ifdef KAVL_EQUAL_ALLOWED + PKAVLNODECORE pEqual; +#endif + int rc; + + if (*ppTree == KAVL_NULL) + return VINF_SUCCESS; + + AVLStack.cEntries = 1; + AVLStack.achFlags[0] = 0; + AVLStack.aEntries[0] = KAVL_GET_POINTER(ppTree); + + if (fFromLeft) + { /* from left */ + while (AVLStack.cEntries > 0) + { + pNode = AVLStack.aEntries[AVLStack.cEntries - 1]; + + /* left */ + if (!AVLStack.achFlags[AVLStack.cEntries - 1]++) + { + if (pNode->pLeft != KAVL_NULL) + { + AVLStack.achFlags[AVLStack.cEntries] = 0; /* 0 first, 1 last */ + AVLStack.aEntries[AVLStack.cEntries++] = KAVL_GET_POINTER(&pNode->pLeft); + continue; + } + } + + /* center */ + rc = pfnCallBack(pNode, pvParam); + if (rc != VINF_SUCCESS) + return rc; +#ifdef KAVL_EQUAL_ALLOWED + if (pNode->pList != KAVL_NULL) + for (pEqual = KAVL_GET_POINTER(&pNode->pList); pEqual; pEqual = KAVL_GET_POINTER_NULL(&pEqual->pList)) + { + rc = pfnCallBack(pEqual, pvParam); + if (rc != VINF_SUCCESS) + return rc; + } +#endif + + /* right */ + AVLStack.cEntries--; + if (pNode->pRight != KAVL_NULL) + { + AVLStack.achFlags[AVLStack.cEntries] = 0; + AVLStack.aEntries[AVLStack.cEntries++] = KAVL_GET_POINTER(&pNode->pRight); + } + } /* while */ + } + else + { /* from right */ + while (AVLStack.cEntries > 0) + { + pNode = AVLStack.aEntries[AVLStack.cEntries - 1]; + + /* right */ + if (!AVLStack.achFlags[AVLStack.cEntries - 1]++) + { + if (pNode->pRight != KAVL_NULL) + { + AVLStack.achFlags[AVLStack.cEntries] = 0; /* 0 first, 1 last */ + AVLStack.aEntries[AVLStack.cEntries++] = KAVL_GET_POINTER(&pNode->pRight); + continue; + } + } + + /* center */ + rc = pfnCallBack(pNode, pvParam); + if (rc != VINF_SUCCESS) + return rc; +#ifdef KAVL_EQUAL_ALLOWED + if (pNode->pList != KAVL_NULL) + for (pEqual = KAVL_GET_POINTER(&pNode->pList); pEqual; pEqual = KAVL_GET_POINTER_NULL(&pEqual->pList)) + { + rc = pfnCallBack(pEqual, pvParam); + if (rc != VINF_SUCCESS) + return rc; + } +#endif + + /* left */ + AVLStack.cEntries--; + if (pNode->pLeft != KAVL_NULL) + { + AVLStack.achFlags[AVLStack.cEntries] = 0; + AVLStack.aEntries[AVLStack.cEntries++] = KAVL_GET_POINTER(&pNode->pLeft); + } + } /* while */ + } + + return VINF_SUCCESS; +} + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_Get.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_Get.cpp.h @@ -0,0 +1,67 @@ +/* $Id: avl_Get.cpp.h $ */ +/** @file + * kAVLGet - get routine for AVL trees. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLGet_h_ +#define _kAVLGet_h_ + + +/** + * Gets a node from the tree (does not remove it!) + * @returns Pointer to the node holding the given key. + * @param ppTree Pointer to the AVL-tree root node pointer. + * @param Key Key value of the node which is to be found. + * @author knut st. osmundsen + */ +KAVL_DECL(PKAVLNODECORE) KAVL_FN(Get)(PPKAVLNODECORE ppTree, KAVLKEY Key) +{ + register PKAVLNODECORE pNode = KAVL_GET_POINTER_NULL(ppTree); + + if (pNode) + { + while (KAVL_NE(pNode->Key, Key)) + { + if (KAVL_G(pNode->Key, Key)) + { + if (pNode->pLeft != KAVL_NULL) + pNode = KAVL_GET_POINTER(&pNode->pLeft); + else + return NULL; + } + else + { + if (pNode->pRight != KAVL_NULL) + pNode = KAVL_GET_POINTER(&pNode->pRight); + else + return NULL; + } + } + } + + return pNode; +} + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_GetBestFit.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_GetBestFit.cpp.h @@ -0,0 +1,103 @@ +/* $Id: avl_GetBestFit.cpp.h $ */ +/** @file + * kAVLGetBestFit - Get Best Fit routine for AVL trees. + * Intended specially on heaps. The tree should allow duplicate keys. + * + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLGetBestFit_h_ +#define _kAVLGetBestFit_h_ + + +/** + * Finds the best fitting node in the tree for the given Key value. + * @returns Pointer to the best fitting node found. + * @param ppTree Pointer to Pointer to the tree root node. + * @param Key The Key of which is to be found a best fitting match for.. + * @param fAbove TRUE: Returned node is have the closest key to Key from above. + * FALSE: Returned node is have the closest key to Key from below. + * @sketch The best fitting node is always located in the searchpath above you. + * >= (above): The node where you last turned left. + * <= (below): the node where you last turned right. + */ +KAVL_DECL(PKAVLNODECORE) KAVL_FN(GetBestFit)(PPKAVLNODECORE ppTree, KAVLKEY Key, bool fAbove) +{ + register PKAVLNODECORE pNode = KAVL_GET_POINTER_NULL(ppTree); + if (pNode) + { + PKAVLNODECORE pNodeLast = NULL; + if (fAbove) + { /* pNode->Key >= Key */ + while (KAVL_NE(pNode->Key, Key)) + { + if (KAVL_G(pNode->Key, Key)) + { + if (pNode->pLeft != KAVL_NULL) + { + pNodeLast = pNode; + pNode = KAVL_GET_POINTER(&pNode->pLeft); + } + else + return pNode; + } + else + { + if (pNode->pRight != KAVL_NULL) + pNode = KAVL_GET_POINTER(&pNode->pRight); + else + return pNodeLast; + } + } + } + else + { /* pNode->Key <= Key */ + while (KAVL_NE(pNode->Key, Key)) + { + if (KAVL_G(pNode->Key, Key)) + { + if (pNode->pLeft != KAVL_NULL) + pNode = KAVL_GET_POINTER(&pNode->pLeft); + else + return pNodeLast; + } + else + { + if (pNode->pRight != KAVL_NULL) + { + pNodeLast = pNode; + pNode = KAVL_GET_POINTER(&pNode->pRight); + } + else + return pNode; + } + } + } + } + + /* perfect match or nothing. */ + return pNode; +} + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avl_RemoveBestFit.cpp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avl_RemoveBestFit.cpp.h @@ -0,0 +1,70 @@ +/* $Id: avl_RemoveBestFit.cpp.h $ */ +/** @file + * kAVLRemoveBestFit - Remove Best Fit routine for AVL trees. + * Intended specially on heaps. The tree should allow duplicate keys. + * + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef _kAVLRemoveBestFit_h_ +#define _kAVLRemoveBestFit_h_ + + +/** + * Finds the best fitting node in the tree for the given Key value. + * And removes it. + * @returns Pointer to the best fitting node found. + * @param ppTree Pointer to Pointer to the tree root node. + * @param Key The Key of which is to be found a best fitting match for.. + * @param fAbove TRUE: Returned node is have the closest key to Key from above. + * FALSE: Returned node is have the closest key to Key from below. + * @sketch The best fitting node is always located in the searchpath above you. + * >= (above): The node where you last turned left. + * <= (below): the node where you last turned right. + * @remark This implementation should be speeded up slightly! + */ +KAVL_DECL(PKAVLNODECORE) KAVL_FN(RemoveBestFit)(PPKAVLNODECORE ppTree, KAVLKEY Key, bool fAbove) +{ + /* + * If we find anything we'll have to remove the node and return it. + * But, if duplicate keys are allowed we'll have to check for multiple + * nodes first and return one of them before doing an expensive remove+insert. + */ + PKAVLNODECORE pNode = KAVL_FN(GetBestFit)(ppTree, Key, fAbove); + if (pNode != NULL) + { +#ifdef KAVL_EQUAL_ALLOWED + if (pNode->pList != KAVL_NULL) + { + PKAVLNODECORE pRet = KAVL_GET_POINTER(&pNode->pList); + KAVL_SET_POINTER_NULL(&pNode->pList, &pRet->pList); + return pRet; + } +#endif + pNode = KAVL_FN(Remove)(ppTree, pNode->Key); + } + return pNode; +} + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/table/avlpv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/table/avlpv.c @@ -0,0 +1,78 @@ +/* $Id: avlpv.cpp $ */ +/** @file + * IPRT - AVL tree, void *, unique keys. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef NOFILEID +static const char szFileId[] = "Id: kAVLPVInt.c,v 1.5 2003/02/13 02:02:35 bird Exp $"; +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/* + * AVL configuration. + */ +#define KAVL_FN(a) RTAvlPV##a +#define KAVL_MAX_STACK 27 /* Up to 2^24 nodes. */ +#define KAVL_CHECK_FOR_EQUAL_INSERT 1 /* No duplicate keys! */ +#define KAVLNODECORE AVLPVNODECORE +#define PKAVLNODECORE PAVLPVNODECORE +#define PPKAVLNODECORE PPAVLPVNODECORE +#define KAVLKEY AVLPVKEY +#define PKAVLKEY PAVLPVKEY +#define KAVLENUMDATA AVLPVENUMDATA +#define PKAVLENUMDATA PAVLPVENUMDATA +#define PKAVLCALLBACK PAVLPVCALLBACK + + +/* + * AVL Compare macros + */ +#define KAVL_G(key1, key2) ( (const char*)(key1) > (const char*)(key2) ) +#define KAVL_E(key1, key2) ( (const char*)(key1) == (const char*)(key2) ) +#define KAVL_NE(key1, key2) ( (const char*)(key1) != (const char*)(key2) ) + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include +#include + +/* + * Include the code. + */ +#define SSToDS(ptr) ptr +#define KMAX RT_MAX +#define kASSERT Assert +#include "avl_Base.cpp.h" +#include "avl_Get.cpp.h" +#include "avl_GetBestFit.cpp.h" +#include "avl_RemoveBestFit.cpp.h" +#include "avl_DoWithAll.cpp.h" +#include "avl_Destroy.cpp.h" + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/common/time/time.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/common/time/time.c @@ -0,0 +1,907 @@ +/* $Id: time.cpp $ */ +/** @file + * IPRT - Time. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_TIME +#include +#include "internal/iprt.h" + +#include +#include +#include +#include "internal/time.h" + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/** The max year we possibly could implode. */ +#define RTTIME_MAX_YEAR (292 + 1970) +/** The min year we possibly could implode. */ +#define RTTIME_MIN_YEAR (-293 + 1970) + +/** The max day supported by our time representation. (2262-04-11T23-47-16.854775807) */ +#define RTTIME_MAX_DAY (365*292+71 + 101-1) +/** The min day supported by our time representation. (1677-09-21T00-12-43.145224192) */ +#define RTTIME_MIN_DAY (365*-293-70 + 264-1) + +/** The max nano second into the max day. (2262-04-11T23-47-16.854775807) */ +#define RTTIME_MAX_DAY_NANO ( INT64_C(1000000000) * (23*3600 + 47*60 + 16) + 854775807 ) +/** The min nano second into the min day. (1677-09-21T00-12-43.145224192) */ +#define RTTIME_MIN_DAY_NANO ( INT64_C(1000000000) * (00*3600 + 12*60 + 43) + 145224192 ) + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** + * Days per month in a common year. + */ +static const uint8_t g_acDaysInMonths[12] = +{ + /*Jan Feb Mar Arp May Jun Jul Aug Sep Oct Nov Dec */ + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; + +/** + * Days per month in a leap year. + */ +static const uint8_t g_acDaysInMonthsLeap[12] = +{ + /*Jan Feb Mar Arp May Jun Jul Aug Sep Oct Nov Dec */ + 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; + +/** + * The day of year for each month in a common year. + */ +static const uint16_t g_aiDayOfYear[12 + 1] = +{ + 1, /* Jan */ + 1+31, /* Feb */ + 1+31+28, /* Mar */ + 1+31+28+31, /* Apr */ + 1+31+28+31+30, /* May */ + 1+31+28+31+30+31, /* Jun */ + 1+31+28+31+30+31+30, /* Jul */ + 1+31+28+31+30+31+30+31, /* Aug */ + 1+31+28+31+30+31+30+31+31, /* Sep */ + 1+31+28+31+30+31+30+31+31+30, /* Oct */ + 1+31+28+31+30+31+30+31+31+30+31, /* Nov */ + 1+31+28+31+30+31+30+31+31+30+31+30, /* Dec */ + 1+31+28+31+30+31+30+31+31+30+31+30+31 +}; + +/** + * The day of year for each month in a leap year. + */ +static const uint16_t g_aiDayOfYearLeap[12 + 1] = +{ + 1, /* Jan */ + 1+31, /* Feb */ + 1+31+29, /* Mar */ + 1+31+29+31, /* Apr */ + 1+31+29+31+30, /* May */ + 1+31+29+31+30+31, /* Jun */ + 1+31+29+31+30+31+30, /* Jul */ + 1+31+29+31+30+31+30+31, /* Aug */ + 1+31+29+31+30+31+30+31+31, /* Sep */ + 1+31+29+31+30+31+30+31+31+30, /* Oct */ + 1+31+29+31+30+31+30+31+31+30+31, /* Nov */ + 1+31+29+31+30+31+30+31+31+30+31+30, /* Dec */ + 1+31+29+31+30+31+30+31+31+30+31+30+31 +}; + +/** The index of 1970 in g_aoffYear */ +#define OFF_YEAR_IDX_EPOCH 300 +/** The year of the first index. */ +#define OFF_YEAR_IDX_0_YEAR 1670 + +/** + * The number of days the 1st of January a year is offseted from 1970-01-01. + */ +static const int32_t g_aoffYear[] = +{ +/*1670:*/ 365*-300+-72, 365*-299+-72, 365*-298+-72, 365*-297+-71, 365*-296+-71, 365*-295+-71, 365*-294+-71, 365*-293+-70, 365*-292+-70, 365*-291+-70, +/*1680:*/ 365*-290+-70, 365*-289+-69, 365*-288+-69, 365*-287+-69, 365*-286+-69, 365*-285+-68, 365*-284+-68, 365*-283+-68, 365*-282+-68, 365*-281+-67, +/*1690:*/ 365*-280+-67, 365*-279+-67, 365*-278+-67, 365*-277+-66, 365*-276+-66, 365*-275+-66, 365*-274+-66, 365*-273+-65, 365*-272+-65, 365*-271+-65, +/*1700:*/ 365*-270+-65, 365*-269+-65, 365*-268+-65, 365*-267+-65, 365*-266+-65, 365*-265+-64, 365*-264+-64, 365*-263+-64, 365*-262+-64, 365*-261+-63, +/*1710:*/ 365*-260+-63, 365*-259+-63, 365*-258+-63, 365*-257+-62, 365*-256+-62, 365*-255+-62, 365*-254+-62, 365*-253+-61, 365*-252+-61, 365*-251+-61, +/*1720:*/ 365*-250+-61, 365*-249+-60, 365*-248+-60, 365*-247+-60, 365*-246+-60, 365*-245+-59, 365*-244+-59, 365*-243+-59, 365*-242+-59, 365*-241+-58, +/*1730:*/ 365*-240+-58, 365*-239+-58, 365*-238+-58, 365*-237+-57, 365*-236+-57, 365*-235+-57, 365*-234+-57, 365*-233+-56, 365*-232+-56, 365*-231+-56, +/*1740:*/ 365*-230+-56, 365*-229+-55, 365*-228+-55, 365*-227+-55, 365*-226+-55, 365*-225+-54, 365*-224+-54, 365*-223+-54, 365*-222+-54, 365*-221+-53, +/*1750:*/ 365*-220+-53, 365*-219+-53, 365*-218+-53, 365*-217+-52, 365*-216+-52, 365*-215+-52, 365*-214+-52, 365*-213+-51, 365*-212+-51, 365*-211+-51, +/*1760:*/ 365*-210+-51, 365*-209+-50, 365*-208+-50, 365*-207+-50, 365*-206+-50, 365*-205+-49, 365*-204+-49, 365*-203+-49, 365*-202+-49, 365*-201+-48, +/*1770:*/ 365*-200+-48, 365*-199+-48, 365*-198+-48, 365*-197+-47, 365*-196+-47, 365*-195+-47, 365*-194+-47, 365*-193+-46, 365*-192+-46, 365*-191+-46, +/*1780:*/ 365*-190+-46, 365*-189+-45, 365*-188+-45, 365*-187+-45, 365*-186+-45, 365*-185+-44, 365*-184+-44, 365*-183+-44, 365*-182+-44, 365*-181+-43, +/*1790:*/ 365*-180+-43, 365*-179+-43, 365*-178+-43, 365*-177+-42, 365*-176+-42, 365*-175+-42, 365*-174+-42, 365*-173+-41, 365*-172+-41, 365*-171+-41, +/*1800:*/ 365*-170+-41, 365*-169+-41, 365*-168+-41, 365*-167+-41, 365*-166+-41, 365*-165+-40, 365*-164+-40, 365*-163+-40, 365*-162+-40, 365*-161+-39, +/*1810:*/ 365*-160+-39, 365*-159+-39, 365*-158+-39, 365*-157+-38, 365*-156+-38, 365*-155+-38, 365*-154+-38, 365*-153+-37, 365*-152+-37, 365*-151+-37, +/*1820:*/ 365*-150+-37, 365*-149+-36, 365*-148+-36, 365*-147+-36, 365*-146+-36, 365*-145+-35, 365*-144+-35, 365*-143+-35, 365*-142+-35, 365*-141+-34, +/*1830:*/ 365*-140+-34, 365*-139+-34, 365*-138+-34, 365*-137+-33, 365*-136+-33, 365*-135+-33, 365*-134+-33, 365*-133+-32, 365*-132+-32, 365*-131+-32, +/*1840:*/ 365*-130+-32, 365*-129+-31, 365*-128+-31, 365*-127+-31, 365*-126+-31, 365*-125+-30, 365*-124+-30, 365*-123+-30, 365*-122+-30, 365*-121+-29, +/*1850:*/ 365*-120+-29, 365*-119+-29, 365*-118+-29, 365*-117+-28, 365*-116+-28, 365*-115+-28, 365*-114+-28, 365*-113+-27, 365*-112+-27, 365*-111+-27, +/*1860:*/ 365*-110+-27, 365*-109+-26, 365*-108+-26, 365*-107+-26, 365*-106+-26, 365*-105+-25, 365*-104+-25, 365*-103+-25, 365*-102+-25, 365*-101+-24, +/*1870:*/ 365*-100+-24, 365* -99+-24, 365* -98+-24, 365* -97+-23, 365* -96+-23, 365* -95+-23, 365* -94+-23, 365* -93+-22, 365* -92+-22, 365* -91+-22, +/*1880:*/ 365* -90+-22, 365* -89+-21, 365* -88+-21, 365* -87+-21, 365* -86+-21, 365* -85+-20, 365* -84+-20, 365* -83+-20, 365* -82+-20, 365* -81+-19, +/*1890:*/ 365* -80+-19, 365* -79+-19, 365* -78+-19, 365* -77+-18, 365* -76+-18, 365* -75+-18, 365* -74+-18, 365* -73+-17, 365* -72+-17, 365* -71+-17, +/*1900:*/ 365* -70+-17, 365* -69+-17, 365* -68+-17, 365* -67+-17, 365* -66+-17, 365* -65+-16, 365* -64+-16, 365* -63+-16, 365* -62+-16, 365* -61+-15, +/*1910:*/ 365* -60+-15, 365* -59+-15, 365* -58+-15, 365* -57+-14, 365* -56+-14, 365* -55+-14, 365* -54+-14, 365* -53+-13, 365* -52+-13, 365* -51+-13, +/*1920:*/ 365* -50+-13, 365* -49+-12, 365* -48+-12, 365* -47+-12, 365* -46+-12, 365* -45+-11, 365* -44+-11, 365* -43+-11, 365* -42+-11, 365* -41+-10, +/*1930:*/ 365* -40+-10, 365* -39+-10, 365* -38+-10, 365* -37+-9 , 365* -36+-9 , 365* -35+-9 , 365* -34+-9 , 365* -33+-8 , 365* -32+-8 , 365* -31+-8 , +/*1940:*/ 365* -30+-8 , 365* -29+-7 , 365* -28+-7 , 365* -27+-7 , 365* -26+-7 , 365* -25+-6 , 365* -24+-6 , 365* -23+-6 , 365* -22+-6 , 365* -21+-5 , +/*1950:*/ 365* -20+-5 , 365* -19+-5 , 365* -18+-5 , 365* -17+-4 , 365* -16+-4 , 365* -15+-4 , 365* -14+-4 , 365* -13+-3 , 365* -12+-3 , 365* -11+-3 , +/*1960:*/ 365* -10+-3 , 365* -9+-2 , 365* -8+-2 , 365* -7+-2 , 365* -6+-2 , 365* -5+-1 , 365* -4+-1 , 365* -3+-1 , 365* -2+-1 , 365* -1+0 , +/*1970:*/ 365* 0+0 , 365* 1+0 , 365* 2+0 , 365* 3+1 , 365* 4+1 , 365* 5+1 , 365* 6+1 , 365* 7+2 , 365* 8+2 , 365* 9+2 , +/*1980:*/ 365* 10+2 , 365* 11+3 , 365* 12+3 , 365* 13+3 , 365* 14+3 , 365* 15+4 , 365* 16+4 , 365* 17+4 , 365* 18+4 , 365* 19+5 , +/*1990:*/ 365* 20+5 , 365* 21+5 , 365* 22+5 , 365* 23+6 , 365* 24+6 , 365* 25+6 , 365* 26+6 , 365* 27+7 , 365* 28+7 , 365* 29+7 , +/*2000:*/ 365* 30+7 , 365* 31+8 , 365* 32+8 , 365* 33+8 , 365* 34+8 , 365* 35+9 , 365* 36+9 , 365* 37+9 , 365* 38+9 , 365* 39+10 , +/*2010:*/ 365* 40+10 , 365* 41+10 , 365* 42+10 , 365* 43+11 , 365* 44+11 , 365* 45+11 , 365* 46+11 , 365* 47+12 , 365* 48+12 , 365* 49+12 , +/*2020:*/ 365* 50+12 , 365* 51+13 , 365* 52+13 , 365* 53+13 , 365* 54+13 , 365* 55+14 , 365* 56+14 , 365* 57+14 , 365* 58+14 , 365* 59+15 , +/*2030:*/ 365* 60+15 , 365* 61+15 , 365* 62+15 , 365* 63+16 , 365* 64+16 , 365* 65+16 , 365* 66+16 , 365* 67+17 , 365* 68+17 , 365* 69+17 , +/*2040:*/ 365* 70+17 , 365* 71+18 , 365* 72+18 , 365* 73+18 , 365* 74+18 , 365* 75+19 , 365* 76+19 , 365* 77+19 , 365* 78+19 , 365* 79+20 , +/*2050:*/ 365* 80+20 , 365* 81+20 , 365* 82+20 , 365* 83+21 , 365* 84+21 , 365* 85+21 , 365* 86+21 , 365* 87+22 , 365* 88+22 , 365* 89+22 , +/*2060:*/ 365* 90+22 , 365* 91+23 , 365* 92+23 , 365* 93+23 , 365* 94+23 , 365* 95+24 , 365* 96+24 , 365* 97+24 , 365* 98+24 , 365* 99+25 , +/*2070:*/ 365* 100+25 , 365* 101+25 , 365* 102+25 , 365* 103+26 , 365* 104+26 , 365* 105+26 , 365* 106+26 , 365* 107+27 , 365* 108+27 , 365* 109+27 , +/*2080:*/ 365* 110+27 , 365* 111+28 , 365* 112+28 , 365* 113+28 , 365* 114+28 , 365* 115+29 , 365* 116+29 , 365* 117+29 , 365* 118+29 , 365* 119+30 , +/*2090:*/ 365* 120+30 , 365* 121+30 , 365* 122+30 , 365* 123+31 , 365* 124+31 , 365* 125+31 , 365* 126+31 , 365* 127+32 , 365* 128+32 , 365* 129+32 , +/*2100:*/ 365* 130+32 , 365* 131+32 , 365* 132+32 , 365* 133+32 , 365* 134+32 , 365* 135+33 , 365* 136+33 , 365* 137+33 , 365* 138+33 , 365* 139+34 , +/*2110:*/ 365* 140+34 , 365* 141+34 , 365* 142+34 , 365* 143+35 , 365* 144+35 , 365* 145+35 , 365* 146+35 , 365* 147+36 , 365* 148+36 , 365* 149+36 , +/*2120:*/ 365* 150+36 , 365* 151+37 , 365* 152+37 , 365* 153+37 , 365* 154+37 , 365* 155+38 , 365* 156+38 , 365* 157+38 , 365* 158+38 , 365* 159+39 , +/*2130:*/ 365* 160+39 , 365* 161+39 , 365* 162+39 , 365* 163+40 , 365* 164+40 , 365* 165+40 , 365* 166+40 , 365* 167+41 , 365* 168+41 , 365* 169+41 , +/*2140:*/ 365* 170+41 , 365* 171+42 , 365* 172+42 , 365* 173+42 , 365* 174+42 , 365* 175+43 , 365* 176+43 , 365* 177+43 , 365* 178+43 , 365* 179+44 , +/*2150:*/ 365* 180+44 , 365* 181+44 , 365* 182+44 , 365* 183+45 , 365* 184+45 , 365* 185+45 , 365* 186+45 , 365* 187+46 , 365* 188+46 , 365* 189+46 , +/*2160:*/ 365* 190+46 , 365* 191+47 , 365* 192+47 , 365* 193+47 , 365* 194+47 , 365* 195+48 , 365* 196+48 , 365* 197+48 , 365* 198+48 , 365* 199+49 , +/*2170:*/ 365* 200+49 , 365* 201+49 , 365* 202+49 , 365* 203+50 , 365* 204+50 , 365* 205+50 , 365* 206+50 , 365* 207+51 , 365* 208+51 , 365* 209+51 , +/*2180:*/ 365* 210+51 , 365* 211+52 , 365* 212+52 , 365* 213+52 , 365* 214+52 , 365* 215+53 , 365* 216+53 , 365* 217+53 , 365* 218+53 , 365* 219+54 , +/*2190:*/ 365* 220+54 , 365* 221+54 , 365* 222+54 , 365* 223+55 , 365* 224+55 , 365* 225+55 , 365* 226+55 , 365* 227+56 , 365* 228+56 , 365* 229+56 , +/*2200:*/ 365* 230+56 , 365* 231+56 , 365* 232+56 , 365* 233+56 , 365* 234+56 , 365* 235+57 , 365* 236+57 , 365* 237+57 , 365* 238+57 , 365* 239+58 , +/*2210:*/ 365* 240+58 , 365* 241+58 , 365* 242+58 , 365* 243+59 , 365* 244+59 , 365* 245+59 , 365* 246+59 , 365* 247+60 , 365* 248+60 , 365* 249+60 , +/*2220:*/ 365* 250+60 , 365* 251+61 , 365* 252+61 , 365* 253+61 , 365* 254+61 , 365* 255+62 , 365* 256+62 , 365* 257+62 , 365* 258+62 , 365* 259+63 , +/*2230:*/ 365* 260+63 , 365* 261+63 , 365* 262+63 , 365* 263+64 , 365* 264+64 , 365* 265+64 , 365* 266+64 , 365* 267+65 , 365* 268+65 , 365* 269+65 , +/*2240:*/ 365* 270+65 , 365* 271+66 , 365* 272+66 , 365* 273+66 , 365* 274+66 , 365* 275+67 , 365* 276+67 , 365* 277+67 , 365* 278+67 , 365* 279+68 , +/*2250:*/ 365* 280+68 , 365* 281+68 , 365* 282+68 , 365* 283+69 , 365* 284+69 , 365* 285+69 , 365* 286+69 , 365* 287+70 , 365* 288+70 , 365* 289+70 , +/*2260:*/ 365* 290+70 , 365* 291+71 , 365* 292+71 , 365* 293+71 , 365* 294+71 , 365* 295+72 , 365* 296+72 , 365* 297+72 , 365* 298+72 , 365* 299+73 +}; + +/* generator code: +#include +bool isLeapYear(int iYear) +{ + return iYear % 4 == 0 && (iYear % 100 != 0 || iYear % 400 == 0); +} +void printYear(int iYear, int iLeap) +{ + if (!(iYear % 10)) + printf("\n/" "*%d:*" "/", iYear + 1970); + printf(" 365*%4d+%-3d,", iYear, iLeap); +} +int main() +{ + int iYear = 0; + int iLeap = 0; + while (iYear > -300) + iLeap -= isLeapYear(1970 + --iYear); + while (iYear < 300) + { + printYear(iYear, iLeap); + iLeap += isLeapYear(1970 + iYear++); + } + printf("\n"); + return 0; +} +*/ + + +/** + * Checks if a year is a leap year or not. + * + * @returns true if it's a leap year. + * @returns false if it's a common year. + * @param i32Year The year in question. + */ +DECLINLINE(bool) rtTimeIsLeapYear(int32_t i32Year) +{ + return i32Year % 4 == 0 + && ( i32Year % 100 != 0 + || i32Year % 400 == 0); +} + + +/** + * Checks if a year is a leap year or not. + * + * @returns true if it's a leap year. + * @returns false if it's a common year. + * @param i32Year The year in question. + */ +RTDECL(bool) RTTimeIsLeapYear(int32_t i32Year) +{ + return rtTimeIsLeapYear(i32Year); +} +RT_EXPORT_SYMBOL(RTTimeIsLeapYear); + + +/** + * Explodes a time spec (UTC). + * + * @returns pTime. + * @param pTime Where to store the exploded time. + * @param pTimeSpec The time spec to exploded. + */ +RTDECL(PRTTIME) RTTimeExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec) +{ + int64_t i64Div; + int32_t i32Div; + int32_t i32Rem; + unsigned iYear; + const uint16_t *paiDayOfYear; + int iMonth; + + AssertMsg(VALID_PTR(pTime), ("%p\n", pTime)); + AssertMsg(VALID_PTR(pTimeSpec), ("%p\n", pTime)); + + /* + * The simple stuff first. + */ + pTime->fFlags = RTTIME_FLAGS_TYPE_UTC; + i64Div = pTimeSpec->i64NanosecondsRelativeToUnixEpoch; + i32Rem = (int32_t)(i64Div % 1000000000); + i64Div /= 1000000000; + if (i32Rem < 0) + { + i32Rem += 1000000000; + i64Div--; + } + pTime->u32Nanosecond = i32Rem; + + /* second */ + i32Rem = (int32_t)(i64Div % 60); + i64Div /= 60; + if (i32Rem < 0) + { + i32Rem += 60; + i64Div--; + } + pTime->u8Second = i32Rem; + + /* minute */ + i32Div = (int32_t)i64Div; /* 60,000,000,000 > 33bit, so 31bit suffices. */ + i32Rem = i32Div % 60; + i32Div /= 60; + if (i32Rem < 0) + { + i32Rem += 60; + i32Div--; + } + pTime->u8Minute = i32Rem; + + /* hour */ + i32Rem = i32Div % 24; + i32Div /= 24; /* days relative to 1970-01-01 */ + if (i32Rem < 0) + { + i32Rem += 24; + i32Div--; + } + pTime->u8Hour = i32Rem; + + /* weekday - 1970-01-01 was a Thursday (3) */ + pTime->u8WeekDay = ((int)(i32Div % 7) + 3 + 7) % 7; + + /* + * We've now got a number of days relative to 1970-01-01. + * To get the correct year number we have to mess with leap years. Fortunately, + * the representation we've got only supports a few hundred years, so we can + * generate a table and perform a simple two way search from the modulus 365 derived. + */ + iYear = OFF_YEAR_IDX_EPOCH + i32Div / 365; + while (g_aoffYear[iYear + 1] <= i32Div) + iYear++; + while (g_aoffYear[iYear] > i32Div) + iYear--; + pTime->i32Year = iYear + OFF_YEAR_IDX_0_YEAR; + i32Div -= g_aoffYear[iYear]; + pTime->u16YearDay = i32Div + 1; + + /* + * Figuring out the month is done in a manner similar to the year, only here we + * ensure that the index is matching or too small. + */ + if (rtTimeIsLeapYear(pTime->i32Year)) + { + pTime->fFlags |= RTTIME_FLAGS_LEAP_YEAR; + paiDayOfYear = &g_aiDayOfYearLeap[0]; + } + else + { + pTime->fFlags |= RTTIME_FLAGS_COMMON_YEAR; + paiDayOfYear = &g_aiDayOfYear[0]; + } + iMonth = i32Div / 32; + i32Div++; + while (paiDayOfYear[iMonth + 1] <= i32Div) + iMonth++; + pTime->u8Month = iMonth + 1; + i32Div -= paiDayOfYear[iMonth]; + pTime->u8MonthDay = i32Div + 1; + + /* This is for UTC timespecs, so, no offset. */ + pTime->offUTC = 0; + + return pTime; +} +RT_EXPORT_SYMBOL(RTTimeExplode); + + +/** + * Implodes exploded time to a time spec (UTC). + * + * @returns pTime on success. + * @returns NULL if the pTime data is invalid. + * @param pTimeSpec Where to store the imploded UTC time. + * If pTime specifies a time which outside the range, maximum or + * minimum values will be returned. + * @param pTime Pointer to the exploded time to implode. + * The fields u8Month, u8WeekDay and u8MonthDay are not used, + * and all the other fields are expected to be within their + * bounds. Use RTTimeNormalize() to calculate u16YearDay and + * normalize the ranges of the fields. + */ +RTDECL(PRTTIMESPEC) RTTimeImplode(PRTTIMESPEC pTimeSpec, PCRTTIME pTime) +{ + int32_t i32Days; + uint32_t u32Secs; + int64_t i64Nanos; + + /* + * Validate input. + */ + AssertReturn(VALID_PTR(pTimeSpec), NULL); + AssertReturn(VALID_PTR(pTime), NULL); + AssertReturn(pTime->u32Nanosecond < 1000000000, NULL); + AssertReturn(pTime->u8Second < 60, NULL); + AssertReturn(pTime->u8Minute < 60, NULL); + AssertReturn(pTime->u8Hour < 24, NULL); + AssertReturn(pTime->u16YearDay >= 1, NULL); + AssertReturn(pTime->u16YearDay <= (rtTimeIsLeapYear(pTime->i32Year) ? 366 : 365), NULL); + AssertMsgReturn(pTime->i32Year <= RTTIME_MAX_YEAR && pTime->i32Year >= RTTIME_MIN_YEAR, ("%RI32\n", pTime->i32Year), NULL); + + /* + * Do the conversion to nanoseconds. + */ + i32Days = g_aoffYear[pTime->i32Year - OFF_YEAR_IDX_0_YEAR] + + pTime->u16YearDay - 1; + AssertMsgReturn(i32Days <= RTTIME_MAX_DAY && i32Days >= RTTIME_MIN_DAY, ("%RI32\n", i32Days), NULL); + + u32Secs = pTime->u8Second + + pTime->u8Minute * 60 + + pTime->u8Hour * 3600; + i64Nanos = (uint64_t)pTime->u32Nanosecond + + u32Secs * UINT64_C(1000000000); + AssertMsgReturn(i32Days != RTTIME_MAX_DAY || i64Nanos <= RTTIME_MAX_DAY_NANO, ("%RI64\n", i64Nanos), NULL); + AssertMsgReturn(i32Days != RTTIME_MIN_DAY || i64Nanos >= RTTIME_MIN_DAY_NANO, ("%RI64\n", i64Nanos), NULL); + + i64Nanos += i32Days * UINT64_C(86400000000000); + + pTimeSpec->i64NanosecondsRelativeToUnixEpoch = i64Nanos; + return pTimeSpec; +} +RT_EXPORT_SYMBOL(RTTimeImplode); + + +/** + * Internal worker for RTTimeNormalize and RTTimeLocalNormalize. + * It doesn't adjust the UCT offset but leaves that for RTTimeLocalNormalize. + */ +static PRTTIME rtTimeNormalizeInternal(PRTTIME pTime) +{ + unsigned uSecond; + unsigned uMinute; + unsigned uHour; + bool fLeapYear; + + /* + * Fix the YearDay and Month/MonthDay. + */ + fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + if (!pTime->u16YearDay) + { + /* + * The Month+MonthDay must present, overflow adjust them and calc the year day. + */ + AssertMsgReturn( pTime->u8Month + && pTime->u8MonthDay, + ("date=%d-%d-%d\n", pTime->i32Year, pTime->u8Month, pTime->u8MonthDay), + NULL); + while (pTime->u8Month > 12) + { + pTime->u8Month -= 12; + pTime->i32Year++; + fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + pTime->fFlags &= ~(RTTIME_FLAGS_COMMON_YEAR | RTTIME_FLAGS_LEAP_YEAR); + } + + for (;;) + { + unsigned cDaysInMonth = fLeapYear + ? g_acDaysInMonthsLeap[pTime->u8Month - 1] + : g_acDaysInMonths[pTime->u8Month - 1]; + if (pTime->u8MonthDay <= cDaysInMonth) + break; + pTime->u8MonthDay -= cDaysInMonth; + if (pTime->u8Month != 12) + pTime->u8Month++; + else + { + pTime->u8Month = 1; + pTime->i32Year++; + fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + pTime->fFlags &= ~(RTTIME_FLAGS_COMMON_YEAR | RTTIME_FLAGS_LEAP_YEAR); + } + } + + pTime->u16YearDay = pTime->u8MonthDay - 1 + + (fLeapYear + ? g_aiDayOfYearLeap[pTime->u8Month - 1] + : g_aiDayOfYear[pTime->u8Month - 1]); + } + else + { + /* + * Are both YearDay and Month/MonthDay valid? + * Check that they don't overflow and match, if not use YearDay (simpler). + */ + bool fRecalc = true; + if ( pTime->u8Month + && pTime->u8MonthDay) + { + do + { + uint16_t u16YearDay; + + /* If you change one, zero the other to make clear what you mean. */ + AssertBreak(pTime->u8Month <= 12); + AssertBreak(pTime->u8MonthDay <= (fLeapYear + ? g_acDaysInMonthsLeap[pTime->u8Month - 1] + : g_acDaysInMonths[pTime->u8Month - 1])); + u16YearDay = pTime->u8MonthDay - 1 + + (fLeapYear + ? g_aiDayOfYearLeap[pTime->u8Month - 1] + : g_aiDayOfYear[pTime->u8Month - 1]); + AssertBreak(u16YearDay == pTime->u16YearDay); + fRecalc = false; + } while (0); + } + if (fRecalc) + { + const uint16_t *paiDayOfYear; + + /* overflow adjust YearDay */ + while (pTime->u16YearDay > (fLeapYear ? 366 : 365)) + { + pTime->u16YearDay -= fLeapYear ? 366 : 365; + pTime->i32Year++; + fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + pTime->fFlags &= ~(RTTIME_FLAGS_COMMON_YEAR | RTTIME_FLAGS_LEAP_YEAR); + } + + /* calc Month and MonthDay */ + paiDayOfYear = fLeapYear + ? &g_aiDayOfYearLeap[0] + : &g_aiDayOfYear[0]; + pTime->u8Month = 1; + while (pTime->u16YearDay > paiDayOfYear[pTime->u8Month]) + pTime->u8Month++; + Assert(pTime->u8Month >= 1 && pTime->u8Month <= 12); + pTime->u8MonthDay = pTime->u16YearDay - paiDayOfYear[pTime->u8Month - 1] + 1; + } + } + + /* + * Fixup time overflows. + * Use unsigned int values internally to avoid overflows. + */ + uSecond = pTime->u8Second; + uMinute = pTime->u8Minute; + uHour = pTime->u8Hour; + + while (pTime->u32Nanosecond >= 1000000000) + { + pTime->u32Nanosecond -= 1000000000; + uSecond++; + } + + while (uSecond >= 60) + { + uSecond -= 60; + uMinute++; + } + + while (uMinute >= 60) + { + uMinute -= 60; + uHour++; + } + + while (uHour >= 24) + { + uHour -= 24; + + /* This is really a RTTimeIncDay kind of thing... */ + if (pTime->u16YearDay + 1 != (fLeapYear ? g_aiDayOfYearLeap[pTime->u8Month] : g_aiDayOfYear[pTime->u8Month])) + { + pTime->u16YearDay++; + pTime->u8MonthDay++; + } + else if (pTime->u8Month != 12) + { + pTime->u16YearDay++; + pTime->u8Month++; + pTime->u8MonthDay = 1; + } + else + { + pTime->i32Year++; + fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + pTime->fFlags &= ~(RTTIME_FLAGS_COMMON_YEAR | RTTIME_FLAGS_LEAP_YEAR); + pTime->u16YearDay = 1; + pTime->u8Month = 1; + pTime->u8MonthDay = 1; + } + } + + pTime->u8Second = uSecond; + pTime->u8Minute = uMinute; + pTime->u8Hour = uHour; + + /* + * Correct the leap year flag. + * Assert if it's wrong, but ignore if unset. + */ + if (fLeapYear) + { + Assert(!(pTime->fFlags & RTTIME_FLAGS_COMMON_YEAR)); + pTime->fFlags &= ~RTTIME_FLAGS_COMMON_YEAR; + pTime->fFlags |= RTTIME_FLAGS_LEAP_YEAR; + } + else + { + Assert(!(pTime->fFlags & RTTIME_FLAGS_LEAP_YEAR)); + pTime->fFlags &= ~RTTIME_FLAGS_LEAP_YEAR; + pTime->fFlags |= RTTIME_FLAGS_COMMON_YEAR; + } + + + /* + * Calc week day. + * + * 1970-01-01 was a Thursday (3), so find the number of days relative to + * that point. We use the table when possible and a slow+stupid+brute-force + * algorithm for points outside it. Feel free to optimize the latter by + * using some clever formula. + */ + if ( pTime->i32Year >= OFF_YEAR_IDX_0_YEAR + && pTime->i32Year < OFF_YEAR_IDX_0_YEAR + (int32_t)RT_ELEMENTS(g_aoffYear)) + { + int32_t offDays = g_aoffYear[pTime->i32Year - OFF_YEAR_IDX_0_YEAR] + + pTime->u16YearDay -1; + pTime->u8WeekDay = ((offDays % 7) + 3 + 7) % 7; + } + else + { + int32_t i32Year = pTime->i32Year; + if (i32Year >= 1970) + { + uint64_t offDays = pTime->u16YearDay - 1; + while (--i32Year >= 1970) + offDays += rtTimeIsLeapYear(i32Year) ? 366 : 365; + pTime->u8WeekDay = (uint8_t)((offDays + 3) % 7); + } + else + { + int64_t offDays = (fLeapYear ? -366 - 1 : -365 - 1) + pTime->u16YearDay; + while (++i32Year < 1970) + offDays -= rtTimeIsLeapYear(i32Year) ? 366 : 365; + pTime->u8WeekDay = ((int)(offDays % 7) + 3 + 7) % 7; + } + } + return pTime; +} + + +/** + * Normalizes the fields of a time structure. + * + * It is possible to calculate year-day from month/day and vice + * versa. If you adjust any of these, make sure to zero the + * other so you make it clear which of the fields to use. If + * it's ambiguous, the year-day field is used (and you get + * assertions in debug builds). + * + * All the time fields and the year-day or month/day fields will + * be adjusted for overflows. (Since all fields are unsigned, there + * is no underflows.) It is possible to exploit this for simple + * date math, though the recommended way of doing that to implode + * the time into a timespec and do the math on that. + * + * @returns pTime on success. + * @returns NULL if the data is invalid. + * + * @param pTime The time structure to normalize. + * + * @remarks This function doesn't work with local time, only with UTC time. + */ +RTDECL(PRTTIME) RTTimeNormalize(PRTTIME pTime) +{ + /* + * Validate that we've got the minimum of stuff handy. + */ + AssertReturn(VALID_PTR(pTime), NULL); + AssertMsgReturn(!(pTime->fFlags & ~RTTIME_FLAGS_MASK), ("%#x\n", pTime->fFlags), NULL); + AssertMsgReturn((pTime->fFlags & RTTIME_FLAGS_TYPE_MASK) != RTTIME_FLAGS_TYPE_LOCAL, ("Use RTTimeLocalNormalize!\n"), NULL); + AssertMsgReturn(pTime->offUTC == 0, ("%d; Use RTTimeLocalNormalize!\n", pTime->offUTC), NULL); + + pTime = rtTimeNormalizeInternal(pTime); + if (pTime) + pTime->fFlags |= RTTIME_FLAGS_TYPE_UTC; + return pTime; +} +RT_EXPORT_SYMBOL(RTTimeNormalize); + + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time. Caller should've normalized this. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeToString(PCRTTIME pTime, char *psz, size_t cb) +{ + size_t cch; + + /* (Default to UTC if not specified) */ + if ( (pTime->fFlags & RTTIME_FLAGS_TYPE_MASK) == RTTIME_FLAGS_TYPE_LOCAL + && pTime->offUTC) + { + int32_t offUTCHour = pTime->offUTC / 60; + int32_t offUTCMinute = pTime->offUTC % 60; + char chSign; + Assert(pTime->offUTC <= 840 && pTime->offUTC >= -840); + if (pTime->offUTC >= 0) + chSign = '+'; + else + { + chSign = '-'; + offUTCMinute = -offUTCMinute; + offUTCHour = -offUTCHour; + } + cch = RTStrPrintf(psz, cb, + "%RI32-%02u-%02uT%02u:%02u:%02u.%09RU32%c%02d%02d", + pTime->i32Year, pTime->u8Month, pTime->u8MonthDay, + pTime->u8Hour, pTime->u8Minute, pTime->u8Second, pTime->u32Nanosecond, + chSign, offUTCHour, offUTCMinute); + if ( cch <= 15 + || psz[cch - 5] != chSign) + return NULL; + } + else + { + cch = RTStrPrintf(psz, cb, "%RI32-%02u-%02uT%02u:%02u:%02u.%09RU32Z", + pTime->i32Year, pTime->u8Month, pTime->u8MonthDay, + pTime->u8Hour, pTime->u8Minute, pTime->u8Second, pTime->u32Nanosecond); + if ( cch <= 15 + || psz[cch - 1] != 'Z') + return NULL; + } + return psz; +} +RT_EXPORT_SYMBOL(RTTimeToString); + + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time spec. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeSpecToString(PCRTTIMESPEC pTime, char *psz, size_t cb) +{ + RTTIME Time; + return RTTimeToString(RTTimeExplode(&Time, pTime), psz, cb); +} +RT_EXPORT_SYMBOL(RTTimeSpecToString); + + + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime Where to store the time on success. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIME) RTTimeFromString(PRTTIME pTime, const char *pszString) +{ + /* Ignore leading spaces. */ + while (RT_C_IS_SPACE(*pszString)) + pszString++; + + /* + * Init non date & time parts. + */ + pTime->fFlags = RTTIME_FLAGS_TYPE_LOCAL; + pTime->offUTC = 0; + + /* + * The day part. + */ + + /* Year */ + int rc = RTStrToInt32Ex(pszString, (char **)&pszString, 10, &pTime->i32Year); + if (rc != VWRN_TRAILING_CHARS) + return NULL; + + bool const fLeapYear = rtTimeIsLeapYear(pTime->i32Year); + if (fLeapYear) + pTime->fFlags |= RTTIME_FLAGS_LEAP_YEAR; + + if (*pszString++ != '-') + return NULL; + + /* Month of the year. */ + rc = RTStrToUInt8Ex(pszString, (char **)&pszString, 10, &pTime->u8Month); + if (rc != VWRN_TRAILING_CHARS) + return NULL; + if (pTime->u8Month == 0 || pTime->u8Month > 12) + return NULL; + if (*pszString++ != '-') + return NULL; + + /* Day of month.*/ + rc = RTStrToUInt8Ex(pszString, (char **)&pszString, 10, &pTime->u8MonthDay); + if (rc != VWRN_TRAILING_CHARS && rc != VINF_SUCCESS) + return NULL; + unsigned const cDaysInMonth = fLeapYear + ? g_acDaysInMonthsLeap[pTime->u8Month - 1] + : g_acDaysInMonths[pTime->u8Month - 1]; + if (pTime->u8MonthDay == 0 || pTime->u8MonthDay > cDaysInMonth) + return NULL; + + /* Calculate year day. */ + pTime->u16YearDay = pTime->u8MonthDay - 1 + + (fLeapYear + ? g_aiDayOfYearLeap[pTime->u8Month - 1] + : g_aiDayOfYear[pTime->u8Month - 1]); + + /* + * The time part. + */ + if (*pszString++ != 'T') + return NULL; + + /* Hour. */ + rc = RTStrToUInt8Ex(pszString, (char **)&pszString, 10, &pTime->u8Hour); + if (rc != VWRN_TRAILING_CHARS) + return NULL; + if (pTime->u8Hour > 23) + return NULL; + if (*pszString++ != ':') + return NULL; + + /* Minute. */ + rc = RTStrToUInt8Ex(pszString, (char **)&pszString, 10, &pTime->u8Minute); + if (rc != VWRN_TRAILING_CHARS) + return NULL; + if (pTime->u8Minute > 59) + return NULL; + if (*pszString++ != ':') + return NULL; + + /* Second. */ + rc = RTStrToUInt8Ex(pszString, (char **)&pszString, 10, &pTime->u8Minute); + if (rc != VINF_SUCCESS && rc != VWRN_TRAILING_CHARS && rc != VWRN_TRAILING_SPACES) + return NULL; + if (pTime->u8Second > 59) + return NULL; + + /* Nanoseconds is optional and probably non-standard. */ + if (*pszString == '.') + { + rc = RTStrToUInt32Ex(pszString + 1, (char **)&pszString, 10, &pTime->u32Nanosecond); + if (rc != VINF_SUCCESS && rc != VWRN_TRAILING_CHARS && rc != VWRN_TRAILING_SPACES) + return NULL; + if (pTime->u32Nanosecond >= 1000000000) + return NULL; + } + else + pTime->u32Nanosecond = 0; + + /* + * Time zone. + */ + if (*pszString == 'Z') + { + pszString++; + pTime->fFlags &= ~RTTIME_FLAGS_TYPE_MASK; + pTime->fFlags |= ~RTTIME_FLAGS_TYPE_UTC; + pTime->offUTC = 0; + } + else if ( *pszString == '+' + || *pszString == '-') + { + rc = RTStrToInt32Ex(pszString, (char **)&pszString, 10, &pTime->offUTC); + if (rc != VINF_SUCCESS && rc != VWRN_TRAILING_CHARS && rc != VWRN_TRAILING_SPACES) + return NULL; + } + /* else: No time zone given, local with offUTC = 0. */ + + /* + * The rest of the string should be blanks. + */ + char ch; + while ((ch = *pszString++) != '\0') + if (!RT_C_IS_BLANK(ch)) + return NULL; + + return pTime; +} +RT_EXPORT_SYMBOL(RTTimeFromString); + + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime The time spec. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIMESPEC) RTTimeSpecFromString(PRTTIMESPEC pTime, const char *pszString) +{ + RTTIME Time; + if (RTTimeFromString(&Time, pszString)) + return RTTimeImplode(pTime, &Time); + return NULL; +} +RT_EXPORT_SYMBOL(RTTimeSpecFromString); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTAssertShouldPanic-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTAssertShouldPanic-generic.c @@ -0,0 +1,44 @@ +/* $Id: RTAssertShouldPanic-generic.cpp $ */ +/** @file + * IPRT - Assertions, generic RTAssertShouldPanic. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(bool) RTAssertShouldPanic(void) +{ +#if 0 /* Enable this to not panic on assertions. (Make sure this code is used!) */ + return false; +#else + return RTAssertMayPanic(); +#endif +} +RT_EXPORT_SYMBOL(RTAssertShouldPanic); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTLogWriteStdErr-stub-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTLogWriteStdErr-stub-generic.c @@ -0,0 +1,42 @@ +/* $Id: RTLogWriteStdErr-stub-generic.cpp $ */ +/** @file + * IPRT - Log To StdErr, Generic Dummy. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(void) RTLogWriteStdErr(const char *pch, size_t cb) +{ + NOREF(pch); + NOREF(cb); + return; +} +RT_EXPORT_SYMBOL(RTLogWriteStdErr); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTLogWriteStdOut-stub-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTLogWriteStdOut-stub-generic.c @@ -0,0 +1,42 @@ +/* $Id: RTLogWriteStdOut-stub-generic.cpp $ */ +/** @file + * IPRT - Log To StdOut, Generic Dummy. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(void) RTLogWriteStdOut(const char *pch, size_t cb) +{ + NOREF(pch); + NOREF(cb); + return; +} +RT_EXPORT_SYMBOL(RTLogWriteStdOut); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTMpGetCoreCount-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTMpGetCoreCount-generic.c @@ -0,0 +1,40 @@ +/* $Id: RTMpGetCoreCount-generic.cpp $ */ +/** @file + * IPRT - Multiprocessor, Generic RTMpGetCoreCount. + */ + +/* + * Copyright (C) 2013-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(RTCPUID) RTMpGetCoreCount(void) +{ + return RTMpGetCount(); +} +RT_EXPORT_SYMBOL(RTMpGetCoreCount); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTSemEventMultiWait-2-ex-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTSemEventMultiWait-2-ex-generic.c @@ -0,0 +1,53 @@ +/* $Id: RTSemEventMultiWait-2-ex-generic.cpp $ */ +/** @file + * IPRT - RTSemEventMultiWait, implementation based on RTSemEventMultiWaitEx. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_SEM +#define RTSEMEVENTMULTI_WITHOUT_REMAPPING +#include +#include "internal/iprt.h" + +#include +#include + + +RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies) +{ + int rc; + if (cMillies == RT_INDEFINITE_WAIT) + rc = RTSemEventMultiWaitEx(hEventMultiSem, RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_INDEFINITE, 0); + else + rc = RTSemEventMultiWaitEx(hEventMultiSem, + RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_MILLISECS, + cMillies); + Assert(rc != VERR_INTERRUPTED); + return rc; +} +RT_EXPORT_SYMBOL(RTSemEventMultiWait); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTSemEventMultiWaitNoResume-2-ex-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTSemEventMultiWaitNoResume-2-ex-generic.c @@ -0,0 +1,53 @@ +/* $Id: RTSemEventMultiWaitNoResume-2-ex-generic.cpp $ */ +/** @file + * IPRT - RTSemEventMultiWaitNoResume, generic implementation based + * on RTSemEventMultiWaitEx. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_SEM +#define RTSEMEVENTMULTI_WITHOUT_REMAPPING +#include +#include "internal/iprt.h" + +#include +#include + + +RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies) +{ + int rc; + if (cMillies == RT_INDEFINITE_WAIT) + rc = RTSemEventMultiWaitEx(hEventMultiSem, RTSEMWAIT_FLAGS_NORESUME | RTSEMWAIT_FLAGS_INDEFINITE, 0); + else + rc = RTSemEventMultiWaitEx(hEventMultiSem, + RTSEMWAIT_FLAGS_NORESUME | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_MILLISECS, + cMillies); + return rc; +} +RT_EXPORT_SYMBOL(RTSemEventMultiWaitNoResume); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTSemEventWait-2-ex-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTSemEventWait-2-ex-generic.c @@ -0,0 +1,53 @@ +/* $Id: RTSemEventWait-2-ex-generic.cpp $ */ +/** @file + * IPRT - RTSemEventWait, implementation based on RTSemEventWaitEx. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_SEM +#define RTSEMEVENT_WITHOUT_REMAPPING +#include +#include "internal/iprt.h" + +#include +#include + + +RTDECL(int) RTSemEventWait(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies) +{ + int rc; + if (cMillies == RT_INDEFINITE_WAIT) + rc = RTSemEventWaitEx(hEventSem, RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_INDEFINITE, 0); + else + rc = RTSemEventWaitEx(hEventSem, + RTSEMWAIT_FLAGS_RESUME | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_MILLISECS, + cMillies); + Assert(rc != VERR_INTERRUPTED); + return rc; +} +RT_EXPORT_SYMBOL(RTSemEventWait); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/RTSemEventWaitNoResume-2-ex-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/RTSemEventWaitNoResume-2-ex-generic.c @@ -0,0 +1,53 @@ +/* $Id: RTSemEventWaitNoResume-2-ex-generic.cpp $ */ +/** @file + * IPRT - RTSemEventWaitNoResume, generic implementation based + * on RTSemEventWaitEx. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_SEM +#define RTSEMEVENT_WITHOUT_REMAPPING +#include +#include "internal/iprt.h" + +#include +#include + + +RTDECL(int) RTSemEventWaitNoResume(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies) +{ + int rc; + if (cMillies == RT_INDEFINITE_WAIT) + rc = RTSemEventWaitEx(hEventSem, RTSEMWAIT_FLAGS_NORESUME | RTSEMWAIT_FLAGS_INDEFINITE, 0); + else + rc = RTSemEventWaitEx(hEventSem, + RTSEMWAIT_FLAGS_NORESUME | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_MILLISECS, + cMillies); + return rc; +} +RT_EXPORT_SYMBOL(RTSemEventWaitNoResume); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/errvars-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/errvars-generic.c @@ -0,0 +1,68 @@ +/* $Id: errvars-generic.cpp $ */ +/** @file + * IPRT - Save and Restore Error Variables, generic stub implementation. + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include "internal/magics.h" + + + +RTDECL(PRTERRVARS) RTErrVarsSave(PRTERRVARS pVars) +{ + pVars->ai32Vars[0] = RTERRVARS_MAGIC; + return pVars; +} + + +RTDECL(void) RTErrVarsRestore(PCRTERRVARS pVars) +{ + Assert(pVars->ai32Vars[0] == RTERRVARS_MAGIC); + RT_NOREF_PV(pVars); +} + + +RTDECL(bool) RTErrVarsAreEqual(PCRTERRVARS pVars1, PCRTERRVARS pVars2) +{ + Assert(pVars1->ai32Vars[0] == RTERRVARS_MAGIC); + Assert(pVars2->ai32Vars[0] == RTERRVARS_MAGIC); + + return pVars1->ai32Vars[0] == pVars2->ai32Vars[0]; +} + + +RTDECL(bool) RTErrVarsHaveChanged(PCRTERRVARS pVars) +{ + Assert(pVars->ai32Vars[0] == RTERRVARS_MAGIC); + RT_NOREF_PV(pVars); + return false; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/mppresent-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/mppresent-generic.c @@ -0,0 +1,61 @@ +/* $Id: mppresent-generic.cpp $ */ +/** @file + * IPRT - Multiprocessor, Stubs for the RTMp*Present* API. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + + +RTDECL(PRTCPUSET) RTMpGetPresentSet(PRTCPUSET pSet) +{ + return RTMpGetSet(pSet); +} +RT_EXPORT_SYMBOL(RTMpGetPresentSet); + + +RTDECL(RTCPUID) RTMpGetPresentCount(void) +{ + return RTMpGetCount(); +} +RT_EXPORT_SYMBOL(RTMpGetPresentCount); + + +RTDECL(RTCPUID) RTMpGetPresentCoreCount(void) +{ + return RTMpGetCoreCount(); +} +RT_EXPORT_SYMBOL(RTMpGetPresentCoreCount); + + +RTDECL(bool) RTMpIsCpuPresent(RTCPUID idCpu) +{ + return RTMpIsCpuPossible(idCpu); +} +RT_EXPORT_SYMBOL(RTMpIsCpuPresent); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/generic/rtStrFormatKernelAddress-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/generic/rtStrFormatKernelAddress-generic.c @@ -0,0 +1,74 @@ +/* $Id: rtStrFormatKernelAddress-generic.cpp $ */ +/** @file + * IPRT - IPRT String Formatter, ring-0 addresses. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_STRING +#include +#include "internal/iprt.h" + +#include +#include + +#include "internal/string.h" + + + +DECLHIDDEN(size_t) rtStrFormatKernelAddress(char *pszBuf, size_t cbBuf, RTR0INTPTR uPtr, signed int cchWidth, + signed int cchPrecision, unsigned int fFlags) +{ +#ifndef DEBUG + RT_NOREF(uPtr, cchWidth, cchPrecision); +# if R0_ARCH_BITS == 64 + static const char s_szObfuscated[] = "0xXXXXXXXXXXXXXXXX"; +# else + static const char s_szObfuscated[] = "0xXXXXXXXX"; +# endif + size_t cbSrc = sizeof(s_szObfuscated); + const char *pszSrc = s_szObfuscated; + if (!(fFlags & RTSTR_F_SPECIAL)) + { + pszSrc += 2; + cbSrc -= 2; + } + if (cbSrc <= cbBuf) + { + memcpy(pszBuf, pszSrc, cbSrc); + return cbSrc - 1; + } + AssertFailed(); + memcpy(pszBuf, pszSrc, cbBuf); + pszBuf[cbBuf - 1] = '\0'; + return cbBuf - 1; + +#else /* DEBUG */ + Assert(cbBuf >= 64); + return RTStrFormatNumber(pszBuf, uPtr, 16, cchWidth, cchPrecision, fFlags); +#endif /* DEBUG */ +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VBoxGuest.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VBoxGuest.h @@ -0,0 +1,927 @@ +/** @file + * VBoxGuest - VirtualBox Guest Additions Driver Interface. (ADD,DEV) + * + * @note This file is used by 16-bit compilers too (OpenWatcom). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VBoxGuest_h +#define ___VBox_VBoxGuest_h + +#include +#include +#include +#include + + + +/** @defgroup grp_vboxguest VirtualBox Guest Additions Device Driver + * + * Also know as VBoxGuest. + * + * @{ + */ + +/** @defgroup grp_vboxguest_ioc VirtualBox Guest Additions Driver Interface + * + * @note This is considered internal in ring-3, please use the VbglR3 functions. + * + * - I/O controls for user and/or kernel mode starts at 0. + * - IDC specific requests descends from 127. + * - Bits 7 and 6 are currently reserved for future hacks. + * + * @remarks When creating new IOCtl interfaces keep in mind that not all OSes supports + * reporting back the output size. (This got messed up a little bit in VBoxDrv.) + * + * The request size is also a little bit tricky as it's passed as part of the + * request code on unix. The size field is 14 bits on Linux, 12 bits on *BSD, + * 13 bits Darwin, and 8-bits on Solaris. All the BSDs and Darwin kernels + * will make use of the size field, while Linux and Solaris will not. We're of + * course using the size to validate and/or map/lock the request, so it has + * to be valid. + * + * For Solaris we will have to do something special though, 255 isn't + * sufficient for all we need. A 4KB restriction (BSD) is probably not + * too problematic (yet) as a general one. + * + * More info can be found in SUPDRVIOC.h and related sources. + * + * @remarks If adding interfaces that only has input or only has output, some new macros + * needs to be created so the most efficient IOCtl data buffering method can be + * used. + * + * @{ + */ +#if !defined(IN_RC) && !defined(IN_RING0_AGNOSTIC) && !defined(IPRT_NO_CRT) + +/** Fictive start address of the hypervisor physical memory for MmMapIoSpace. */ +#define VBOXGUEST_HYPERVISOR_PHYSICAL_START UINT32_C(0xf8000000) + +#ifdef RT_OS_DARWIN +/** Cookie used to fend off some unwanted clients to the IOService. */ +# define VBOXGUEST_DARWIN_IOSERVICE_COOKIE UINT32_C(0x56426f78) /* 'VBox' */ +#endif + + +#if defined(RT_OS_WINDOWS) +# ifndef CTL_CODE +# include +# endif + /* Automatic buffering, size not encoded. */ +# define VBGL_IOCTL_CODE_SIZE(Function, Size) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_BIG(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_FAST(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_NEITHER, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "\\\\.\\VBoxGuest" +/** The support service name. */ +# define VBOXGUEST_SERVICE_NAME "VBoxGuest" +/** Global name for Win2k+ */ +# define VBOXGUEST_DEVICE_NAME_GLOBAL "\\\\.\\Global\\VBoxGuest" +/** Win32 driver name */ +# define VBOXGUEST_DEVICE_NAME_NT L"\\Device\\VBoxGuest" +/** Device name. */ +# define VBOXGUEST_DEVICE_NAME_DOS L"\\DosDevices\\VBoxGuest" + +#elif defined(RT_OS_OS2) + /* No automatic buffering, size not encoded. */ +# define VBGL_IOCTL_CATEGORY 0xc2 +# define VBGL_IOCTL_CODE_SIZE(Function, Size) ((unsigned char)(Function)) +# define VBGL_IOCTL_CODE_BIG(Function) ((unsigned char)(Function)) +# define VBGL_IOCTL_CATEGORY_FAST 0xc3 /**< Also defined in VBoxGuestA-os2.asm. */ +# define VBGL_IOCTL_CODE_FAST(Function) ((unsigned char)(Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "\\Dev\\VBoxGst$" +/** Short device name for AttachDD. + * @note Case sensitive. Must match what VBoxGuestA-os2.asm says! */ +# define VBOXGUEST_DEVICE_NAME_SHORT "vboxgst$" + +#elif defined(RT_OS_SOLARIS) + /* No automatic buffering, size limited to 255 bytes => use VBGLBIGREQ for everything. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOWRN('V', (Function), sizeof(VBGLREQHDR)) +# define VBGL_IOCTL_CODE_BIG(Function) _IOWRN('V', (Function), sizeof(VBGLREQHDR)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO( 'F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( ((a_uIOCtl) & 0x0000ff00) == ('F' << 8) ) + +#elif defined(RT_OS_LINUX) + /* No automatic buffering, size limited to 16KB. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOC(_IOC_READ | _IOC_WRITE, 'V', (Function), (Size)) +# define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) _IOC_NR((a_uIOCtl)) +# define VBOXGUEST_USER_DEVICE_NAME "/dev/vboxuser" + +#elif defined(RT_OS_HAIKU) + /* No automatic buffering, size not encoded. */ + /** @todo do something better */ +# define VBGL_IOCTL_CODE_SIZE(Function, Size) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_BIG(Function) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "/dev/misc/vboxguest" + +#else /* BSD Like */ + /* Automatic buffering, size limited to 4KB on *BSD and 8KB on Darwin - commands the limit, 4KB. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOC(IOC_INOUT, 'V', (Function), (Size)) +# define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK))) +# define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( IOCGROUP(a_uIOCtl) == 'F' ) +#endif + + +/** @todo It would be nice if we could have two defines without paths. */ + +/** @def VBOXGUEST_DEVICE_NAME + * The support device name. */ +#ifndef VBOXGUEST_DEVICE_NAME /* PORTME */ +# define VBOXGUEST_DEVICE_NAME "/dev/vboxguest" +#endif + +/** @def VBOXGUEST_USER_DEVICE_NAME + * The support device name of the user accessible device node. */ +#ifndef VBOXGUEST_USER_DEVICE_NAME +# define VBOXGUEST_USER_DEVICE_NAME VBOXGUEST_DEVICE_NAME +#endif + + +/** + * The VBoxGuest I/O control version. + * + * As usual, the high word contains the major version and changes to it + * signifies incompatible changes. + * + * The lower word is the minor version number, it is increased when new + * functions are added or existing changed in a backwards compatible manner. + */ +#define VBGL_IOC_VERSION UINT32_C(0x00010000) + + + +/** @name VBGL_IOCTL_DRIVER_INFO + * Adjust and get driver information. + * + * @note May switch the session to a backwards compatible interface version if + * uClientVersion indicates older client code. + * + * @{ + */ +#define VBGL_IOCTL_DRIVER_VERSION_INFO VBGL_IOCTL_CODE_SIZE(0, VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE sizeof(VBGLIOCDRIVERVERSIONINFO) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_IN RT_UOFFSET_AFTER(VBGLIOCDRIVERVERSIONINFO, u.In) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_OUT sizeof(VBGLIOCDRIVERVERSIONINFO) +typedef struct VBGLIOCDRIVERVERSIONINFO +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The requested interface version number (VBGL_IOC_VERSION). */ + uint32_t uReqVersion; + /** The minimum interface version number + * (typically the major version part of VBGL_IOC_VERSION). */ + uint32_t uMinVersion; + /** Reserved, MBZ. */ + uint32_t uReserved1; + /** Reserved, MBZ. */ + uint32_t uReserved2; + } In; + struct + { + /** Interface version for this session (typically VBGL_IOC_VERSION). */ + uint32_t uSessionVersion; + /** The version of the IDC interface (VBGL_IOC_VERSION). */ + uint32_t uDriverVersion; + /** The SVN revision of the driver. + * This will be set to 0 if not compiled into the driver. */ + uint32_t uDriverRevision; + /** Reserved \#1 (will be returned as zero until defined). */ + uint32_t uReserved1; + /** Reserved \#2 (will be returned as zero until defined). */ + uint32_t uReserved2; + } Out; + } u; +} VBGLIOCDRIVERVERSIONINFO, RT_FAR *PVBGLIOCDRIVERVERSIONINFO; +AssertCompileSize(VBGLIOCDRIVERVERSIONINFO, 24 + 20); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_IN == 24 + 16); +#endif +/** @} */ + + +/** @name VBGL_IOCTL_GET_PORT_INFO + * Query VMMDev I/O port region and MMIO mapping address. + * @remarks Ring-0 only. + * @{ + */ +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO VBGL_IOCTL_CODE_SIZE(1, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE sizeof(VBGLIOCGETVMMDEVIOINFO) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_OUT sizeof(VBGLIOCGETVMMDEVIOINFO) +typedef struct VBGLIOCGETVMMDEVIOINFO +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The MMIO mapping. NULL if no MMIO region. */ + struct VMMDevMemory volatile RT_FAR *pvVmmDevMapping; + /** The I/O port address. */ + RTIOPORT IoPort; + /** Padding, ignore. */ + RTIOPORT auPadding[HC_ARCH_BITS == 64 ? 3 : 1]; + } Out; + } u; +} VBGLIOCGETVMMDEVIOINFO, RT_FAR *PVBGLIOCGETVMMDEVIOINFO; +AssertCompileSize(VBGLIOCGETVMMDEVIOINFO, 24 + (HC_ARCH_BITS == 64 ? 16 : 8)); +/** @} */ + + +/** @name VBGL_IOCTL_VMMDEV_REQUEST + * IOCTL to VBoxGuest to perform a VMM Device request less than 1KB in size. + * @{ + */ +#define VBGL_IOCTL_VMMDEV_REQUEST(a_cb) VBGL_IOCTL_CODE_SIZE(2, (a_cb)) +/** @} */ + + +/** @name VBGL_IOCTL_VMMDEV_REQUEST_BIG + * IOCTL to VBoxGuest to perform a VMM Device request that can 1KB or larger. + * @{ + */ +#define VBGL_IOCTL_VMMDEV_REQUEST_BIG VBGL_IOCTL_CODE_BIG(3) +/** @} */ + + +#ifdef VBOX_WITH_HGCM +/** @name VBGL_IOCTL_HGCM_CONNECT + * Connect to a HGCM service. + * @{ */ +# define VBGL_IOCTL_HGCM_CONNECT VBGL_IOCTL_CODE_SIZE(4, VBGL_IOCTL_HGCM_CONNECT_SIZE) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE sizeof(VBGLIOCHGCMCONNECT) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE_IN sizeof(VBGLIOCHGCMCONNECT) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE_OUT RT_UOFFSET_AFTER(VBGLIOCHGCMCONNECT, u.Out) +typedef struct VBGLIOCHGCMCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + HGCMServiceLocation Loc; + } In; + struct + { + uint32_t idClient; + } Out; + } u; +} VBGLIOCHGCMCONNECT, RT_FAR *PVBGLIOCHGCMCONNECT; +AssertCompileSize(VBGLIOCHGCMCONNECT, 24 + 132); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_HGCM_CONNECT_SIZE_OUT == 24 + 4); +#endif +/** @} */ + + +/** @name VBGL_IOCTL_HGCM_DISCONNECT + * Disconnect from a HGCM service. + * @{ */ +# define VBGL_IOCTL_HGCM_DISCONNECT VBGL_IOCTL_CODE_SIZE(5, VBGL_IOCTL_HGCM_DISCONNECT_SIZE) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE sizeof(VBGLIOCHGCMDISCONNECT) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE_IN sizeof(VBGLIOCHGCMDISCONNECT) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE_OUT sizeof(VBGLREQHDR) +/** @note This is also used by a VbglR0 API. */ +typedef struct VBGLIOCHGCMDISCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + uint32_t idClient; + } In; + } u; +} VBGLIOCHGCMDISCONNECT, RT_FAR *PVBGLIOCHGCMDISCONNECT; +AssertCompileSize(VBGLIOCHGCMDISCONNECT, 24 + 4); +/** @} */ + + +/** @name VBGL_IOCTL_HGCM_CALL, VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA + * + * Make a call to a HGCM servicesure. There are several variations here. + * + * The VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA variation is for other drivers (like + * the graphics ones) passing on requests from user land that contains user + * data. These calls are always interruptible. + * + * @{ */ +# define VBGL_IOCTL_HGCM_CALL_32(a_cb) VBGL_IOCTL_CODE_SIZE(6, (a_cb)) +# define VBGL_IOCTL_HGCM_CALL_64(a_cb) VBGL_IOCTL_CODE_SIZE(7, (a_cb)) +# if ARCH_BITS == 64 +# define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_64(a_cb) +# else +# define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_32(a_cb) +# endif +# define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb) VBGL_IOCTL_CODE_SIZE(8, (a_cb)) +/** @} */ +#endif /* VBOX_WITH_HGCM */ + + +/** @name VBGL_IOCTL_LOG + * IOCTL to VBoxGuest to perform backdoor logging. + * @{ */ +#define VBOXGUEST_IOCTL_LOG(Size) +#define VBGL_IOCTL_LOG(a_cchMsg) VBGL_IOCTL_CODE_BIG(9) +#define VBGL_IOCTL_LOG_SIZE(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) +#define VBGL_IOCTL_LOG_SIZE_IN(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) +#define VBGL_IOCTL_LOG_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCLOG +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The log message. + * The length is determined from the input size and zero termination. */ + char szMsg[RT_FLEXIBLE_ARRAY_IN_NESTED_UNION]; + } In; + } u; +} VBGLIOCLOG, RT_FAR *PVBGLIOCLOG; +/** @} */ + + +/** @name VBGL_IOCTL_WAIT_FOR_EVENTS + * Wait for a VMMDev host event notification. + * @{ + */ +#define VBGL_IOCTL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(10, VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLIOCWAITFOREVENTS) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLIOCWAITFOREVENTS) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_OUT RT_UOFFSET_AFTER(VBGLIOCWAITFOREVENTS, u.Out) +typedef struct VBGLIOCWAITFOREVENTS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Timeout in milliseconds. */ + uint32_t cMsTimeOut; + /** Events to wait for. */ + uint32_t fEvents; + } In; + struct + { + /** Events that occurred. */ + uint32_t fEvents; + } Out; + } u; +} VBGLIOCWAITFOREVENTS, RT_FAR *PVBGLIOCWAITFOREVENTS; +AssertCompileSize(VBGLIOCWAITFOREVENTS, 24 + 8); +/** @} */ + + +/** @name VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS + * IOCTL to VBoxGuest to interrupt (cancel) any pending + * VBGL_IOCTL_WAIT_FOR_EVENTS and return. + * + * Handled inside the guest additions and not seen by the host at all. + * After calling this, VBGL_IOCTL_WAIT_FOR_EVENTS should no longer be called in + * the same session. At the time of writing this is not enforced; at the time + * of reading it may be. + * @see VBGL_IOCTL_WAIT_FOR_EVENTS + * + * @{ + */ +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(11, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLREQHDR) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_OUT sizeof(VBGLREQHDR) +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_FILTER_MASK + * IOCTL to VBoxGuest to control the event filter mask. + * @{ */ +#define VBGL_IOCTL_CHANGE_FILTER_MASK VBGL_IOCTL_CODE_SIZE(12, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE sizeof(VBGLIOCCHANGEFILTERMASK) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_IN sizeof(VBGLIOCCHANGEFILTERMASK) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCCHANGEFILTERMASK +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Flags to set. */ + uint32_t fOrMask; + /** Flags to remove. */ + uint32_t fNotMask; + } In; + } u; +} VBGLIOCCHANGEFILTERMASK, RT_FAR *PVBGLIOCCHANGEFILTERMASK; +AssertCompileSize(VBGLIOCCHANGEFILTERMASK, 24 + 8); +/** @} */ + + +/** @name VBGL_IOCTL_GUEST_CAPS_ACQUIRE + * IOCTL to for acquiring and releasing guest capabilities. + * + * This is used for multiple purposes: + * 1. By doing @a acquire r3 client application (e.g. VBoxTray) claims it will + * use the given session for performing operations like @a seamless or + * @a auto-resize, thus, if the application terminates, the driver will + * automatically cleanup the caps reported to host, so that host knows guest + * does not support them anymore + * 2. In a multy-user environment this will not allow r3 applications (like + * VBoxTray) running in different user sessions simultaneously to interfere + * with each other. An r3 client application (like VBoxTray) is responsible + * for Acquiring/Releasing caps properly as needed. + * + * + * VERR_RESOURCE_BUSY is returned if any capabilities in the fOrMask are + * currently acquired by some other VBoxGuest session. + * + * @{ + */ +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(13, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCACQUIREGUESTCAPS) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCACQUIREGUESTCAPS) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_OUT sizeof(VBGLREQHDR) + +/** Default operation (full acquire/release). */ +#define VBGL_IOC_AGC_FLAGS_DEFAULT UINT32_C(0x00000000) +/** Configures VBoxGuest to use the specified caps in Acquire mode, w/o making + * any caps acquisition/release. This is only possible to set acquire mode for + * caps, but not clear it, so fNotMask is ignored when this flag is set. */ +#define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE UINT32_C(0x00000001) +/** Valid flag mask. */ +#define VBGL_IOC_AGC_FLAGS_VALID_MASK UINT32_C(0x00000001) + +typedef struct VBGLIOCACQUIREGUESTCAPS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Acquire flags (VBGL_IOC_AGC_FLAGS_XXX). */ + uint32_t fFlags; + /** Guest capabilities to acquire (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fOrMask; + /** Guest capabilities to release (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fNotMask; + } In; + } u; +} VBGLIOCACQUIREGUESTCAPS, RT_FAR *PVBGLIOCACQUIREGUESTCAPS; +AssertCompileSize(VBGLIOCACQUIREGUESTCAPS, 24 + 12); +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES + * IOCTL to VBoxGuest to set guest capabilities. + * @{ */ +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(14, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCSETGUESTCAPS) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCSETGUESTCAPS) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_OUT sizeof(VBGLIOCSETGUESTCAPS) +typedef struct VBGLIOCSETGUESTCAPS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fOrMask; + /** The capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fNotMask; + } In; + struct + { + /** The capabilities held by the session after the call (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fSessionCaps; + /** The capabilities for all the sessions after the call (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fGlobalCaps; + } Out; + } u; +} VBGLIOCSETGUESTCAPS, RT_FAR *PVBGLIOCSETGUESTCAPS; +AssertCompileSize(VBGLIOCSETGUESTCAPS, 24 + 8); +typedef VBGLIOCSETGUESTCAPS VBoxGuestSetCapabilitiesInfo; +/** @} */ + + +/** @name VBGL_IOCTL_SET_MOUSE_STATUS + * IOCTL to VBoxGuest to update the mouse status features. + * @{ */ +#define VBGL_IOCTL_SET_MOUSE_STATUS VBGL_IOCTL_CODE_SIZE(15, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE sizeof(VBGLIOCSETMOUSESTATUS) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_IN sizeof(VBGLIOCSETMOUSESTATUS) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCSETMOUSESTATUS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Mouse status flags (VMMDEV_MOUSE_XXX). */ + uint32_t fStatus; + } In; + } u; +} VBGLIOCSETMOUSESTATUS, RT_FAR *PVBGLIOCSETMOUSESTATUS; +/** @} */ + + +/** @name VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK + * + * IOCTL to for setting the mouse driver callback. + * @note The callback will be called in interrupt context with the VBoxGuest + * device event spinlock held. + * @note ring-0 only. + * + * @{ */ +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK VBGL_IOCTL_CODE_SIZE(16, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_IN sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCSETMOUSENOTIFYCALLBACK +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Mouse notification callback function. */ + PFNVBOXGUESTMOUSENOTIFY pfnNotify; + /** The callback argument. */ + void RT_FAR *pvUser; + } In; + } u; +} VBGLIOCSETMOUSENOTIFYCALLBACK, RT_FAR *PVBGLIOCSETMOUSENOTIFYCALLBACK; +/** @} */ + + +/** @name VBGL_IOCTL_CHECK_BALLOON + * IOCTL to VBoxGuest to check memory ballooning. + * + * The guest kernel module / device driver will ask the host for the current size of + * the balloon and adjust the size. Or it will set fHandledInR0 = false and R3 is + * responsible for allocating memory and calling R0 (VBGL_IOCTL_CHANGE_BALLOON). + * @{ */ +#define VBGL_IOCTL_CHECK_BALLOON VBGL_IOCTL_CODE_SIZE(17, VBGL_IOCTL_CHECK_BALLOON_SIZE) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE sizeof(VBGLIOCCHECKBALLOON) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE_OUT sizeof(VBGLIOCCHECKBALLOON) +typedef struct VBGLIOCCHECKBALLOON +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The size of the balloon in chunks of 1MB. */ + uint32_t cBalloonChunks; + /** false = handled in R0, no further action required. + * true = allocate balloon memory in R3. */ + bool fHandleInR3; + /** Explicit padding, please ignore. */ + bool afPadding[3]; + } Out; + } u; +} VBGLIOCCHECKBALLOON, RT_FAR *PVBGLIOCCHECKBALLOON; +AssertCompileSize(VBGLIOCCHECKBALLOON, 24 + 8); +typedef VBGLIOCCHECKBALLOON VBoxGuestCheckBalloonInfo; +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_BALLOON + * IOCTL to VBoxGuest to supply or revoke one chunk for ballooning. + * + * The guest kernel module / device driver will lock down supplied memory or + * unlock reclaimed memory and then forward the physical addresses of the + * changed balloon chunk to the host. + * + * @{ */ +#define VBGL_IOCTL_CHANGE_BALLOON VBGL_IOCTL_CODE_SIZE(18, VBGL_IOCTL_CHANGE_BALLOON_SIZE) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE sizeof(VBGLIOCCHANGEBALLOON) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE_IN sizeof(VBGLIOCCHANGEBALLOON) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCCHANGEBALLOON +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Address of the chunk (user space address). */ + RTR3PTR pvChunk; + /** Explicit alignment padding, MBZ. */ + uint8_t abPadding[ARCH_BITS == 64 ? 0 + 7 : 4 + 7]; + /** true = inflate, false = deflate. */ + bool fInflate; + } In; + } u; +} VBGLIOCCHANGEBALLOON, RT_FAR *PVBGLIOCCHANGEBALLOON; +AssertCompileSize(VBGLIOCCHANGEBALLOON, 24+16); +/** @} */ + + +/** @name VBGL_IOCTL_WRITE_CORE_DUMP + * IOCTL to VBoxGuest to write guest core. + * @{ */ +#define VBGL_IOCTL_WRITE_CORE_DUMP VBGL_IOCTL_CODE_SIZE(19, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE sizeof(VBGLIOCWRITECOREDUMP) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_IN sizeof(VBGLIOCWRITECOREDUMP) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCWRITECOREDUMP +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Flags (reserved, MBZ). */ + uint32_t fFlags; + } In; + } u; +} VBGLIOCWRITECOREDUMP, RT_FAR *PVBGLIOCWRITECOREDUMP; +AssertCompileSize(VBGLIOCWRITECOREDUMP, 24 + 4); +typedef VBGLIOCWRITECOREDUMP VBoxGuestWriteCoreDump; +/** @} */ + + +#ifdef VBOX_WITH_DPC_LATENCY_CHECKER +/** @name VBGL_IOCTL_DPC_LATENCY_CHECKER + * IOCTL to VBoxGuest to perform DPC latency tests, printing the result in + * the release log on the host. Takes no data, returns no data. + * @{ */ +# define VBGL_IOCTL_DPC_LATENCY_CHECKER VBGL_IOCTL_CODE_SIZE(20, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE sizeof(VBGLREQHDR) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_IN sizeof(VBGLREQHDR) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_OUT sizeof(VBGLREQHDR) +/** @} */ +#endif + + +#ifdef RT_OS_OS2 +/** + * The data buffer layout for the IDC entry point (AttachDD). + * + * @remark This is defined in multiple 16-bit headers / sources. + * Some places it's called VBGOS2IDC to short things a bit. + */ +typedef struct VBGLOS2ATTACHDD +{ + /** VBGL_IOC_VERSION. */ + uint32_t u32Version; + /** Opaque session handle. */ + uint32_t u32Session; + + /** + * The 32-bit service entry point. + * + * @returns VBox status code. + * @param u32Session The session handle (PVBOXGUESTSESSION). + * @param iFunction The requested function. + * @param pReqHdr The input/output data buffer. The caller + * ensures that this cannot be swapped out, or that + * it's acceptable to take a page in fault in the + * current context. If the request doesn't take + * input or produces output, apssing NULL is okay. + * @param cbReq The size of the data buffer. + */ +# if ARCH_BITS == 32 || defined(DOXYGEN_RUNNING) + DECLCALLBACKMEMBER(int, pfnServiceEP)(uint32_t u32Session, unsigned iFunction, PVBGLREQHDR pReqHdr, size_t cbReq); +# else + uint32_t pfnServiceEP; +#endif + + /** The 16-bit service entry point for C code (cdecl). + * + * It's the same as the 32-bit entry point, but the types has + * changed to 16-bit equivalents. + * + * @code + * int far cdecl + * VBoxGuestOs2IDCService16(uint32_t u32Session, uint16_t iFunction, + * PVBGLREQHDR fpvData, uint16_t cbData); + * @endcode + */ +# if ARCH_BITS == 16 || defined(DOXYGEN_RUNNING) + DECLCALLBACKMEMBER(int, fpfnServiceEP)(uint32_t u32Session, uint16_t iFunction, PVBGLREQHDR fpvData, uint16_t cbData); +# else + RTFAR16 fpfnServiceEP; +# endif + + /** The 16-bit service entry point for Assembly code (register). + * + * This is just a wrapper around fpfnServiceEP to simplify calls + * from 16-bit assembly code. + * + * @returns (e)ax: VBox status code; cx: The amount of data returned. + * + * @param u32Session eax - The above session handle. + * @param iFunction dl - The requested function. + * @param pvData es:bx - The input/output data buffer. + * @param cbData cx - The size of the data buffer. + */ + RTFAR16 fpfnServiceAsmEP; +} VBGLOS2ATTACHDD; +/** Pointer to VBOXGUESTOS2IDCCONNECT buffer. */ +typedef VBGLOS2ATTACHDD RT_FAR *PVBGLOS2ATTACHDD; + +/** + * Prototype for the 16-bit callback returned by AttachDD on OS/2. + * @param pAttachInfo Pointer to structure to fill in. + */ +# if defined(__IBMC__) || defined(__IBMCPP__) +typedef void (* __cdecl RT_FAR_CODE PFNVBGLOS2ATTACHDD)(PVBGLOS2ATTACHDD pAttachInfo); +# else +typedef void (__cdecl RT_FAR_CODE *PFNVBGLOS2ATTACHDD)(PVBGLOS2ATTACHDD pAttachInfo); +# endif +#endif /* RT_OS_OS2 */ + + +/** @name VBGL_IOCL_IDC_CONNECT + * IDC client connect request. + * + * On platforms other than Windows and OS/2, this will also create a kernel + * session for the caller. + * + * @note ring-0 only. + */ +#define VBGL_IOCTL_IDC_CONNECT VBGL_IOCTL_CODE_SIZE(63, VBGL_IOCTL_IDC_CONNECT_SIZE) +#define VBGL_IOCTL_IDC_CONNECT_SIZE sizeof(VBGLIOCIDCCONNECT) +#define VBGL_IOCTL_IDC_CONNECT_SIZE_IN RT_UOFFSET_AFTER(VBGLIOCIDCCONNECT, u.In) +#define VBGL_IOCTL_IDC_CONNECT_SIZE_OUT sizeof(VBGLIOCIDCCONNECT) +typedef struct VBGLIOCIDCCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + /** The payload union. */ + union + { + struct + { + /** VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE. */ + uint32_t u32MagicCookie; + /** The desired version of the I/O control interface (VBGL_IOC_VERSION). */ + uint32_t uReqVersion; + /** The minimum version of the I/O control interface (VBGL_IOC_VERSION). */ + uint32_t uMinVersion; + /** Reserved, MBZ. */ + uint32_t uReserved; + } In; + struct + { + /** The session handle (opaque). */ +#if ARCH_BITS >= 32 + void RT_FAR *pvSession; +#else + uint32_t pvSession; +#endif + /** The version of the I/O control interface for this session + * (typically VBGL_IOC_VERSION). */ + uint32_t uSessionVersion; + /** The I/O control interface version for of the driver (VBGL_IOC_VERSION). */ + uint32_t uDriverVersion; + /** The SVN revision of the driver. + * This will be set to 0 if not compiled into the driver. */ + uint32_t uDriverRevision; + /** Reserved \#1 (will be returned as zero until defined). */ + uint32_t uReserved1; + /** Reserved \#2 (will be returned as NULL until defined). */ + void RT_FAR *pvReserved2; + } Out; + } u; +} VBGLIOCIDCCONNECT, RT_FAR *PVBGLIOCIDCCONNECT; +AssertCompileSize(VBGLIOCIDCCONNECT, 24 + 16 + (ARCH_BITS == 64 ? 8 : 4) * 2); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_IDC_CONNECT_SIZE_IN == 24 + 16); +#endif +#define VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE UINT32_C(0x55aa4d5a) /**< Magic value for doing an IDC connect. */ +/** @} */ + + +/** @name VBGL_IOCL_IDC_DISCONNECT + * IDC client disconnect request. + * + * This will destroy the kernel session associated with the IDC connection. + * + * @note ring-0 only. + */ +#define VBGL_IOCTL_IDC_DISCONNECT VBGL_IOCTL_CODE_SIZE(62, VBGL_IOCTL_IDC_DISCONNECT_SIZE) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE sizeof(VBGLIOCIDCDISCONNECT) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE_IN sizeof(VBGLIOCIDCDISCONNECT) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCIDCDISCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The session handle for platforms where this is needed. */ +#if ARCH_BITS >= 32 + void RT_FAR *pvSession; +#else + uint32_t pvSession; +#endif + } In; + } u; +} VBGLIOCIDCDISCONNECT, RT_FAR *PVBGLIOCIDCDISCONNECT; +AssertCompileSize(VBGLIOCIDCDISCONNECT, 24 + (ARCH_BITS == 64 ? 8 : 4)); +/** @} */ + + +#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2) +RT_C_DECLS_BEGIN +/** + * The VBoxGuest IDC entry point. + * + * @returns VBox status code. + * @param pvSession The session. + * @param uReq The request code. + * @param pReqHdr The request. + * @param cbReq The request size. + */ +int VBOXCALL VBoxGuestIDC(void RT_FAR *pvSession, uintptr_t uReq, PVBGLREQHDR pReqHdr, size_t cbReq); +RT_C_DECLS_END +#endif + + +#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_FREEBSD) + +/* Private IOCtls between user space and the kernel video driver. DRM private + * IOCtls always have the type 'd' and a number between 0x40 and 0x99 (0x9F?) */ + +# define VBOX_DRM_IOCTL(a) (0x40 + DRM_VBOX_ ## a) + +/** Stop using HGSMI in the kernel driver until it is re-enabled, so that a + * user-space driver can use it. It must be re-enabled before the kernel + * driver can be used again in a sensible way. */ +/** @note These IOCtls was removed from the code, but are left here as + * templates as we may need similar ones in future. */ +# define DRM_VBOX_DISABLE_HGSMI 0 +# define DRM_IOCTL_VBOX_DISABLE_HGSMI VBOX_DRM_IOCTL(DISABLE_HGSMI) +# define VBOXVIDEO_IOCTL_DISABLE_HGSMI _IO('d', DRM_IOCTL_VBOX_DISABLE_HGSMI) +/** Enable HGSMI in the kernel driver after it was previously disabled. */ +# define DRM_VBOX_ENABLE_HGSMI 1 +# define DRM_IOCTL_VBOX_ENABLE_HGSMI VBOX_DRM_IOCTL(ENABLE_HGSMI) +# define VBOXVIDEO_IOCTL_ENABLE_HGSMI _IO('d', DRM_IOCTL_VBOX_ENABLE_HGSMI) + +#endif /* RT_OS_LINUX || RT_OS_SOLARIS || RT_OS_FREEBSD */ + +#endif /* !defined(IN_RC) && !defined(IN_RING0_AGNOSTIC) && !defined(IPRT_NO_CRT) */ + +/** @} */ + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestCoreTypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestCoreTypes.h @@ -0,0 +1,228 @@ +/** @file + * VBoxGuest - VirtualBox Guest Additions, Core Types. + * + * This contains types that are used both in the VBoxGuest I/O control interface + * and the VBoxGuestLib. The goal is to avoid having to include VBoxGuest.h + * everwhere VBoxGuestLib.h is used. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#ifndef ___VBoxGuestCoreTypes_h +#define ___VBoxGuestCoreTypes_h + +#include +#include + +/** @addtogroup grp_vboxguest + * @{ */ + +/** + * Common in/out header. + * + * This is a copy/mirror of VMMDevRequestHeader to prevent duplicating data and + * needing to verify things multiple times. For that reason this differs a bit + * from SUPREQHDR. + * + * @sa VMMDevRequestHeader + */ +typedef struct VBGLREQHDR +{ + /** IN: The request input size, and output size if cbOut is zero. + * @sa VMMDevRequestHeader::size */ + uint32_t cbIn; + /** IN: Structure version (VBGLREQHDR_VERSION) + * @sa VMMDevRequestHeader::version */ + uint32_t uVersion; + /** IN: The VMMDev request type, set to VBGLREQHDR_TYPE_DEFAULT unless this is a + * kind of VMMDev request. + * @sa VMMDevRequestType, VMMDevRequestHeader::requestType */ + uint32_t uType; + /** OUT: The VBox status code of the operation, out direction only. */ + int32_t rc; + /** IN: The output size. This is optional - set to zero to use cbIn as the + * output size. */ + uint32_t cbOut; + /** Reserved, MBZ. */ + uint32_t uReserved; +} VBGLREQHDR; +AssertCompileSize(VBGLREQHDR, 24); +/** Pointer to a IOC header. */ +typedef VBGLREQHDR RT_FAR *PVBGLREQHDR; + +/** Version of VMMDevRequestHeader structure. */ +#define VBGLREQHDR_VERSION UINT32_C(0x10001) +/** Default request type. Use this for non-VMMDev requests. */ +#define VBGLREQHDR_TYPE_DEFAULT UINT32_C(0) + +/** Initialize a VBGLREQHDR structure for a fixed size I/O control call. + * @param a_pHdr Pointer to the header to initialize. + * @param a_IOCtl The base I/O control name, no VBGL_IOCTL_ prefix. We + * have to skip the prefix to avoid it getting expanded + * before we append _SIZE_IN and _SIZE_OUT to it. + */ +#define VBGLREQHDR_INIT(a_pHdr, a_IOCtl) \ + VBGLREQHDR_INIT_EX(a_pHdr, RT_CONCAT3(VBGL_IOCTL_,a_IOCtl,_SIZE_IN), RT_CONCAT3(VBGL_IOCTL_,a_IOCtl,_SIZE_OUT)) +/** Initialize a VBGLREQHDR structure, extended version. */ +#define VBGLREQHDR_INIT_EX(a_pHdr, a_cbIn, a_cbOut) \ + do { \ + (a_pHdr)->cbIn = (uint32_t)(a_cbIn); \ + (a_pHdr)->uVersion = VBGLREQHDR_VERSION; \ + (a_pHdr)->uType = VBGLREQHDR_TYPE_DEFAULT; \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->cbOut = (uint32_t)(a_cbOut); \ + (a_pHdr)->uReserved = 0; \ + } while (0) +/** Initialize a VBGLREQHDR structure for a VMMDev request. + * Same as VMMDEV_REQ_HDR_INIT(). */ +#define VBGLREQHDR_INIT_VMMDEV(a_pHdr, a_cb, a_enmType) \ + do { \ + (a_pHdr)->cbIn = (a_cb); \ + (a_pHdr)->uVersion = VBGLREQHDR_VERSION; \ + (a_pHdr)->uType = (a_enmType); \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->cbOut = 0; \ + (a_pHdr)->uReserved = 0; \ + } while (0) + + +/** + * For VBGL_IOCTL_HGCM_CALL and VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA. + * + * @note This is used by alot of HGCM call structures. + */ +typedef struct VBGLIOCHGCMCALL +{ + /** Common header. */ + VBGLREQHDR Hdr; + /** Input: The id of the caller. */ + uint32_t u32ClientID; + /** Input: Function number. */ + uint32_t u32Function; + /** Input: How long to wait (milliseconds) for completion before cancelling the + * call. This is ignored if not a VBGL_IOCTL_HGCM_CALL_TIMED or + * VBGL_IOCTL_HGCM_CALL_TIMED_32 request. */ + uint32_t cMsTimeout; + /** Input: Whether a timed call is interruptible (ring-0 only). This is ignored + * if not a VBGL_IOCTL_HGCM_CALL_TIMED or VBGL_IOCTL_HGCM_CALL_TIMED_32 + * request, or if made from user land. */ + bool fInterruptible; + /** Explicit padding, MBZ. */ + uint8_t bReserved; + /** Input: How many parameters following this structure. + * + * The parameters are either HGCMFunctionParameter64 or HGCMFunctionParameter32, + * depending on whether we're receiving a 64-bit or 32-bit request. + * + * The current maximum is 61 parameters (given a 1KB max request size, + * and a 64-bit parameter size of 16 bytes). + * + * @note This information is duplicated by Hdr.cbIn, but it's currently too much + * work to eliminate this. */ + uint16_t cParms; + /* Parameters follow in form HGCMFunctionParameter aParms[cParms] */ +} VBGLIOCHGCMCALL, RT_FAR *PVBGLIOCHGCMCALL; +AssertCompileSize(VBGLIOCHGCMCALL, 24 + 16); +typedef VBGLIOCHGCMCALL const RT_FAR *PCVBGLIOCHGCMCALL; + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL) for a non-timed call. + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + */ +# define VBGL_HGCM_HDR_INIT(a_pHdr, a_idClient, a_idFunction, a_cParameters) \ + do { \ + VBGLREQHDR_INIT_EX(&(a_pHdr)->Hdr, \ + sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter), \ + sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter)); \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = RT_INDEFINITE_WAIT; \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL) for a non-timed call, custom size. + * + * This is usually only needed when appending page lists to the call. + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + * @param a_cbReq The request size. + */ +# define VBGL_HGCM_HDR_INIT_EX(a_pHdr, a_idClient, a_idFunction, a_cParameters, a_cbReq) \ + do { \ + Assert((a_cbReq) >= sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter)); \ + VBGLREQHDR_INIT_EX(&(a_pHdr)->Hdr, (a_cbReq), (a_cbReq)); \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = RT_INDEFINITE_WAIT; \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL), with timeout (interruptible). + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + * @param a_cMsTimeout The timeout in milliseconds. + */ +# define VBGL_HGCM_HDR_INIT_TIMED(a_pHdr, a_idClient, a_idFunction, a_cParameters, a_cMsTimeout) \ + do { \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = (a_cMsTimeout); \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** Get the pointer to the first HGCM parameter. */ +# define VBGL_HGCM_GET_CALL_PARMS(a_pInfo) ( (HGCMFunctionParameter *)((uint8_t *)(a_pInfo) + sizeof(VBGLIOCHGCMCALL)) ) +/** Get the pointer to the first HGCM parameter in a 32-bit request. */ +# define VBGL_HGCM_GET_CALL_PARMS32(a_pInfo) ( (HGCMFunctionParameter32 *)((uint8_t *)(a_pInfo) + sizeof(VBGLIOCHGCMCALL)) ) + + +/** + * Mouse event noticification callback function. + * @param pvUser Argument given when setting the callback. + */ +typedef DECLCALLBACK(void) FNVBOXGUESTMOUSENOTIFY(void *pvUser); +/** Pointer to a mouse event notification callback function. */ +typedef FNVBOXGUESTMOUSENOTIFY *PFNVBOXGUESTMOUSENOTIFY; /**< @todo fix type prefix */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestLib.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestLib.h @@ -0,0 +1,926 @@ +/** @file + * VBoxGuestLib - VirtualBox Guest Additions Library. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VBoxGuestLib_h +#define ___VBox_VBoxGuestLib_h + +#include +#include +#include + +/** @defgroup grp_vboxguest_lib VirtualBox Guest Additions Library + * @ingroup grp_vboxguest + * @{ + */ + +/** @page pg_guest_lib VirtualBox Guest Library + * + * This is a library for abstracting the additions driver interface. There are + * multiple versions of the library depending on the context. The main + * distinction is between kernel and user mode where the interfaces are very + * different. + * + * + * @section sec_guest_lib_ring0 Ring-0 + * + * In ring-0 there are two version: + * - VBOX_LIB_VBGL_R0_BASE / VBoxGuestR0LibBase for the VBoxGuest main driver, + * who is responsible for managing the VMMDev virtual hardware. + * - VBOX_LIB_VBGL_R0 / VBoxGuestR0Lib for other (client) guest drivers. + * + * + * The library source code and the header have a define VBGL_VBOXGUEST, which is + * defined for VBoxGuest and undefined for other drivers. Drivers must choose + * right library in their makefiles and set VBGL_VBOXGUEST accordingly. + * + * The libraries consists of: + * - common code to be used by both VBoxGuest and other drivers; + * - VBoxGuest specific code; + * - code for other drivers which communicate with VBoxGuest via an IOCTL. + * + * + * @section sec_guest_lib_ring3 Ring-3 + * + * There are more variants of the library here: + * - VBOX_LIB_VBGL_R3 / VBoxGuestR3Lib for programs. + * - VBOX_LIB_VBGL_R3_XFREE86 / VBoxGuestR3LibXFree86 for old style XFree + * drivers which uses special loader and or symbol resolving strategy. + * - VBOX_LIB_VBGL_R3_SHARED / VBoxGuestR3LibShared for shared objects / DLLs / + * Dylibs. + * + */ + +RT_C_DECLS_BEGIN + +/** HGCM client ID. + * @todo Promote to VBox/types.h */ +typedef uint32_t HGCMCLIENTID; + + +/** @defgroup grp_vboxguest_lib_r0 Ring-0 interface. + * @{ + */ +#ifdef IN_RING0 +/** @def DECLR0VBGL + * Declare a VBGL ring-0 API with the right calling convention and visibilitiy. + * @param type Return type. */ +# ifdef RT_OS_DARWIN /** @todo probably apply to all, but don't want a forest fire on our hands right now. */ +# define DECLR0VBGL(type) DECLHIDDEN(type) VBOXCALL +# else +# define DECLR0VBGL(type) type VBOXCALL +# endif +# define DECLVBGL(type) DECLR0VBGL(type) + + +/** + * The library initialization function to be used by the main VBoxGuest driver. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0InitPrimary(RTIOPORT portVMMDev, struct VMMDevMemory *pVMMDevMemory); + +/** + * The library termination function to be used by the main VBoxGuest driver. + * + * @author bird (2017-08-23) + */ +DECLR0VBGL(void) VbglR0TerminatePrimary(void); + +/** + * The library initialization function to be used by all drivers + * other than the main VBoxGuest system driver. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0InitClient(void); + +/** + * The library termination function. + */ +DECLR0VBGL(void) VbglR0TerminateClient(void); + + +/** @name The IDC Client Interface + * @{ + */ + +/** + * Inter-Driver Communication Handle. + */ +typedef union VBGLIDCHANDLE +{ + /** Padding for opaque usage. + * Must be greater or equal in size than the private struct. */ + void *apvPadding[4]; +#ifdef VBGLIDCHANDLEPRIVATE_DECLARED + /** The private view. */ + struct VBGLIDCHANDLEPRIVATE s; +#endif +} VBGLIDCHANDLE; +/** Pointer to a handle. */ +typedef VBGLIDCHANDLE *PVBGLIDCHANDLE; + +DECLR0VBGL(int) VbglR0IdcOpen(PVBGLIDCHANDLE pHandle, uint32_t uReqVersion, uint32_t uMinVersion, + uint32_t *puSessionVersion, uint32_t *puDriverVersion, uint32_t *puDriverRevision); +struct VBGLREQHDR; +DECLR0VBGL(int) VbglR0IdcCallRaw(PVBGLIDCHANDLE pHandle, uintptr_t uReq, struct VBGLREQHDR *pReqHdr, uint32_t cbReq); +DECLR0VBGL(int) VbglR0IdcCall(PVBGLIDCHANDLE pHandle, uintptr_t uReq, struct VBGLREQHDR *pReqHdr, uint32_t cbReq); +DECLR0VBGL(int) VbglR0IdcClose(PVBGLIDCHANDLE pHandle); + +/** @} */ + + +/** @name Generic request functions. + * @{ + */ + +/** + * Allocate memory for generic request and initialize the request header. + * + * @returns VBox status code. + * @param ppReq Where to return the pointer to the allocated memory. + * @param cbReq Size of memory block required for the request. + * @param enmReqType the generic request type. + */ +# if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING) +DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader **ppReq, size_t cbReq, VMMDevRequestType enmReqType); +# else +DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader **ppReq, size_t cbReq, int32_t enmReqType); +# endif + +/** + * Perform the generic request. + * + * @param pReq pointer the request structure. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0GRPerform(struct VMMDevRequestHeader *pReq); + +/** + * Free the generic request memory. + * + * @param pReq pointer the request structure. + * + * @return VBox status code. + */ +DECLR0VBGL(void) VbglR0GRFree(struct VMMDevRequestHeader *pReq); + +/** + * Verify the generic request header. + * + * @param pReq pointer the request header structure. + * @param cbReq size of the request memory block. It should be equal to the request size + * for fixed size requests. It can be greater than the request size for + * variable size requests. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglGR0Verify(const struct VMMDevRequestHeader *pReq, size_t cbReq); + +/** @} */ + +# ifdef VBOX_WITH_HGCM +struct VBGLIOCHGCMCALL; + +# ifdef VBGL_VBOXGUEST + +/** + * Callback function called from HGCM helpers when a wait for request + * completion IRQ is required. + * + * @returns VINF_SUCCESS, VERR_INTERRUPT or VERR_TIMEOUT. + * @param pvData VBoxGuest pointer to be passed to callback. + * @param u32Data VBoxGuest 32 bit value to be passed to callback. + */ +typedef DECLCALLBACK(int) FNVBGLHGCMCALLBACK(VMMDevHGCMRequestHeader *pHeader, void *pvData, uint32_t u32Data); +/** Pointer to a FNVBGLHGCMCALLBACK. */ +typedef FNVBGLHGCMCALLBACK *PFNVBGLHGCMCALLBACK; + +/** + * Perform a connect request. + * + * That is locate required service and obtain a client identifier for future + * access. + * + * @note This function can NOT handle cancelled requests! + * + * @param pLoc The service to connect to. + * @param pidClient Where to return the client ID on success. + * @param pfnAsyncCallback Required pointer to function that is calledwhen + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalConnect(HGCMServiceLocation const *pLoc, HGCMCLIENTID *pidClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + + +/** + * Perform a disconnect request. + * + * That is tell the host that the client will not call the service anymore. + * + * @note This function can NOT handle cancelled requests! + * + * @param idClient The client ID to disconnect. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to + * callback. + * + * @return VBox status code. + */ + +DECLR0VBGL(int) VbglR0HGCMInternalDisconnect(HGCMCLIENTID idClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** Call a HGCM service. + * + * @note This function can deal with cancelled requests. + * + * @param pCallInfo The request data. + * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalCall(struct VBGLIOCHGCMCALL *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** Call a HGCM service. (32 bits packet structure in a 64 bits guest) + * + * @note This function can deal with cancelled requests. + * + * @param pCallInfo The request data. + * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalCall32(struct VBGLIOCHGCMCALL *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** @name VbglR0HGCMInternalCall flags + * @{ */ +/** User mode request. + * Indicates that only user mode addresses are permitted as parameters. */ +#define VBGLR0_HGCMCALL_F_USER UINT32_C(0) +/** Kernel mode request. + * Indicates that kernel mode addresses are permitted as parameters. Whether or + * not user mode addresses are permitted is, unfortunately, OS specific. The + * following OSes allows user mode addresses: Windows, TODO. + */ +#define VBGLR0_HGCMCALL_F_KERNEL UINT32_C(1) +/** Mode mask. */ +#define VBGLR0_HGCMCALL_F_MODE_MASK UINT32_C(1) +/** @} */ + +# else /* !VBGL_VBOXGUEST */ + +struct VBGLHGCMHANDLEDATA; +typedef struct VBGLHGCMHANDLEDATA *VBGLHGCMHANDLE; + +/** @name HGCM functions + * @{ + */ + +/** + * Initializes HGCM in the R0 guest library. Must be called before any HGCM + * connections are made. Is called by VbglInitClient(). + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInit(void); + +/** + * Terminates HGCM in the R0 guest library. Is called by VbglTerminate(). + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMTerminate(void); + +/** + * Connect to a service. + * + * @param pHandle Pointer to variable that will hold a handle to be used + * further in VbglHGCMCall and VbglHGCMClose. + * @param pszServiceName The service to connect to. + * @param pidClient Where to return the client ID for the connection. + * + * @return VBox status code. + * + * @todo consider baking the client Id into the handle. + */ +DECLR0VBGL(int) VbglR0HGCMConnect(VBGLHGCMHANDLE *pHandle, const char *pszServiceName, HGCMCLIENTID *pidClient); + +/** + * Connect to a service. + * + * @param handle Handle of the connection. + * @param idClient The ID of the client connection. + * + * @return VBox status code. + * + * @todo consider baking the client Id into the handle. + */ +DECLR0VBGL(int) VbglR0HGCMDisconnect(VBGLHGCMHANDLE handle, HGCMCLIENTID idClient); + +/** + * Call to a service, returning only the I/O control status code. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMCallRaw(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** + * Call to a service, returning the HGCM status code. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. Either the I/O control status code if that failed, + * or the HGCM status code (pData->Hdr.rc). + */ +DECLR0VBGL(int) VbglR0HGCMCall(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** + * Call to a service with user-mode data received by the calling driver from the User-Mode process. + * The call must be done in the context of a calling process. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMCallUserDataRaw(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** @} */ + +/** @name Undocumented helpers for talking to the Chromium OpenGL Host Service + * @{ */ +typedef VBGLHGCMHANDLE VBGLCRCTLHANDLE; +DECLR0VBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE *phCtl); +DECLR0VBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl); +DECLR0VBGL(int) VbglR0CrCtlConConnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID *pidClient); +DECLR0VBGL(int) VbglR0CrCtlConDisconnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID idClient); +struct VBGLIOCHGCMCALL; +DECLR0VBGL(int) VbglR0CrCtlConCallRaw(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +DECLR0VBGL(int) VbglR0CrCtlConCall(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +DECLR0VBGL(int) VbglR0CrCtlConCallUserDataRaw(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +/** @} */ + +# endif /* !VBGL_VBOXGUEST */ + +# endif /* VBOX_WITH_HGCM */ + + +/** + * Initialize the heap. + * + * @returns VBox status code. + */ +DECLR0VBGL(int) VbglR0PhysHeapInit(void); + +/** + * Shutdown the heap. + */ +DECLR0VBGL(void) VbglR0PhysHeapTerminate(void); + +/** + * Allocate a memory block. + * + * @returns Virtual address of the allocated memory block. + * @param cbSize Size of block to be allocated. + */ +DECLR0VBGL(void *) VbglR0PhysHeapAlloc(uint32_t cbSize); + +/** + * Get physical address of memory block pointed by the virtual address. + * + * @note WARNING! + * The function does not acquire the Heap mutex! + * When calling the function make sure that the pointer is a valid one and + * is not being deallocated. This function can NOT be used for verifying + * if the given pointer is a valid one allocated from the heap. + * + * @param pv Virtual address of memory block. + * @returns Physical address of the memory block. + */ +DECLR0VBGL(uint32_t) VbglR0PhysHeapGetPhysAddr(void *pv); + +/** + * Free a memory block. + * + * @param pv Virtual address of memory block. + */ +DECLR0VBGL(void) VbglR0PhysHeapFree(void *pv); + +DECLR0VBGL(int) VbglR0QueryVMMDevMemory(struct VMMDevMemory **ppVMMDevMemory); +DECLR0VBGL(bool) VbglR0CanUsePhysPageList(void); + +# ifndef VBOX_GUEST +/** @name Mouse + * @{ */ +DECLR0VBGL(int) VbglR0SetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify, void *pvUser); +DECLR0VBGL(int) VbglR0GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py); +DECLR0VBGL(int) VbglR0SetMouseStatus(uint32_t fFeatures); +/** @} */ +# endif /* VBOX_GUEST */ + +#endif /* IN_RING0 */ + +/** @} */ + + +/** @defgroup grp_vboxguest_lib_r3 Ring-3 interface. + * @{ + */ +#ifdef IN_RING3 + +/** @def VBGLR3DECL + * Ring 3 VBGL declaration. + * @param type The return type of the function declaration. + */ +# define VBGLR3DECL(type) DECLHIDDEN(type) VBOXCALL + +/** @name General-purpose functions + * @{ */ +VBGLR3DECL(int) VbglR3Init(void); +VBGLR3DECL(int) VbglR3InitUser(void); +VBGLR3DECL(void) VbglR3Term(void); +# ifdef ___iprt_time_h +VBGLR3DECL(int) VbglR3GetHostTime(PRTTIMESPEC pTime); +# endif +VBGLR3DECL(int) VbglR3InterruptEventWaits(void); +VBGLR3DECL(int) VbglR3WriteLog(const char *pch, size_t cch); +VBGLR3DECL(int) VbglR3CtlFilterMask(uint32_t fOr, uint32_t fNot); +VBGLR3DECL(int) VbglR3Daemonize(bool fNoChDir, bool fNoClose, bool fRespawn, unsigned *pcRespawn); +VBGLR3DECL(int) VbglR3PidFile(const char *pszPath, PRTFILE phFile); +VBGLR3DECL(void) VbglR3ClosePidFile(const char *pszPath, RTFILE hFile); +VBGLR3DECL(int) VbglR3SetGuestCaps(uint32_t fOr, uint32_t fNot); +VBGLR3DECL(int) VbglR3AcquireGuestCaps(uint32_t fOr, uint32_t fNot, bool fConfig); +VBGLR3DECL(int) VbglR3WaitEvent(uint32_t fMask, uint32_t cMillies, uint32_t *pfEvents); + +VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent, + uint32_t fFlags); +VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerEx, char **ppszRev); +VBGLR3DECL(int) VbglR3GetAdditionsInstallationPath(char **ppszPath); +VBGLR3DECL(int) VbglR3GetSessionId(uint64_t *pu64IdSession); + +/** @} */ + +/** @name Shared clipboard + * @{ */ +VBGLR3DECL(int) VbglR3ClipboardConnect(HGCMCLIENTID *pidClient); +VBGLR3DECL(int) VbglR3ClipboardDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient, uint32_t *pMsg, uint32_t *pfFormats); +VBGLR3DECL(int) VbglR3ClipboardReadData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb); +VBGLR3DECL(int) VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats); +VBGLR3DECL(int) VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb); +/** @} */ + +/** @name Seamless mode + * @{ */ +VBGLR3DECL(int) VbglR3SeamlessSetCap(bool fState); +VBGLR3DECL(int) VbglR3SeamlessWaitEvent(VMMDevSeamlessMode *pMode); +VBGLR3DECL(int) VbglR3SeamlessSendRects(uint32_t cRects, PRTRECT pRects); +VBGLR3DECL(int) VbglR3SeamlessGetLastEvent(VMMDevSeamlessMode *pMode); + +/** @} */ + +/** @name Mouse + * @{ */ +VBGLR3DECL(int) VbglR3GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py); +VBGLR3DECL(int) VbglR3SetMouseStatus(uint32_t fFeatures); +/** @} */ + +/** @name Video + * @{ */ +VBGLR3DECL(int) VbglR3VideoAccelEnable(bool fEnable); +VBGLR3DECL(int) VbglR3VideoAccelFlush(void); +VBGLR3DECL(int) VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy, + const void *pvImg, size_t cbImg); +VBGLR3DECL(int) VbglR3SetPointerShapeReq(struct VMMDevReqMousePointer *pReq); +/** @} */ + +/** @name Display + * @{ */ +/** The folder for the video mode hint unix domain socket on Unix-like guests. + * @note This can be safely changed as all users are rebuilt in lock-step. */ +#define VBGLR3HOSTDISPSOCKETPATH "/tmp/.VBoxService" +/** The path to the video mode hint unix domain socket on Unix-like guests. */ +#define VBGLR3HOSTDISPSOCKET VBGLR3VIDEOMODEHINTSOCKETPATH "/VideoModeHint" + +/** The folder for saving video mode hints to between sessions. */ +#define VBGLR3HOSTDISPSAVEDMODEPATH "/var/lib/VBoxGuestAdditions" +/** The path to the file for saving video mode hints to between sessions. */ +#define VBGLR3HOSTDISPSAVEDMODE VBGLR3HOSTDISPSAVEDMODEPATH "/SavedVideoModes" + +VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy, uint32_t *pcBits, uint32_t *piDisplay, + uint32_t *pdx, uint32_t *pdy, bool *pfEnabled, bool *pfChangeOrigin, bool fAck); +VBGLR3DECL(bool) VbglR3HostLikesVideoMode(uint32_t cx, uint32_t cy, uint32_t cBits); +VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen); +VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy, unsigned cBits, + unsigned x, unsigned y, bool fEnabled); +VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen, unsigned *pcx, unsigned *pcy, unsigned *pcBits, + unsigned *px, unsigned *py, bool *pfEnabled); +/** @} */ + +/** @name VRDP + * @{ */ +VBGLR3DECL(int) VbglR3VrdpGetChangeRequest(bool *pfActive, uint32_t *puExperienceLevel); +/** @} */ + +/** @name VM Statistics + * @{ */ +VBGLR3DECL(int) VbglR3StatQueryInterval(uint32_t *pu32Interval); +# if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING) +VBGLR3DECL(int) VbglR3StatReport(VMMDevReportGuestStats *pReq); +# endif +/** @} */ + +/** @name Memory ballooning + * @{ */ +VBGLR3DECL(int) VbglR3MemBalloonRefresh(uint32_t *pcChunks, bool *pfHandleInR3); +VBGLR3DECL(int) VbglR3MemBalloonChange(void *pv, bool fInflate); +/** @} */ + +/** @name Core Dump + * @{ */ +VBGLR3DECL(int) VbglR3WriteCoreDump(void); + +/** @} */ + +# ifdef VBOX_WITH_GUEST_PROPS +/** @name Guest properties + * @{ */ +/** @todo Docs. */ +typedef struct VBGLR3GUESTPROPENUM VBGLR3GUESTPROPENUM; +/** @todo Docs. */ +typedef VBGLR3GUESTPROPENUM *PVBGLR3GUESTPROPENUM; +VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3GuestPropDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(int) VbglR3GuestPropWrite(HGCMCLIENTID idClient, const char *pszName, const char *pszValue, const char *pszFlags); +VBGLR3DECL(int) VbglR3GuestPropWriteValue(HGCMCLIENTID idClient, const char *pszName, const char *pszValue); +VBGLR3DECL(int) VbglR3GuestPropWriteValueV(HGCMCLIENTID idClient, const char *pszName, + const char *pszValueFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); +VBGLR3DECL(int) VbglR3GuestPropWriteValueF(HGCMCLIENTID idClient, const char *pszName, + const char *pszValueFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); +VBGLR3DECL(int) VbglR3GuestPropRead(HGCMCLIENTID idClient, const char *pszName, void *pvBuf, uint32_t cbBuf, char **ppszValue, + uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual); +VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t ClientId, const char *pszName, char *pszValue, uint32_t cchValue, + uint32_t *pcchValueActual); +VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(HGCMCLIENTID idClient, const char *pszName, char **ppszValue); +VBGLR3DECL(void) VbglR3GuestPropReadValueFree(char *pszValue); +VBGLR3DECL(int) VbglR3GuestPropEnumRaw(HGCMCLIENTID idClient, const char *paszPatterns, char *pcBuf, uint32_t cbBuf, + uint32_t *pcbBufActual); +VBGLR3DECL(int) VbglR3GuestPropEnum(HGCMCLIENTID idClient, char const * const *ppaszPatterns, uint32_t cPatterns, + PVBGLR3GUESTPROPENUM *ppHandle, char const **ppszName, char const **ppszValue, + uint64_t *pu64Timestamp, char const **ppszFlags); +VBGLR3DECL(int) VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle, char const **ppszName, char const **ppszValue, + uint64_t *pu64Timestamp, char const **ppszFlags); +VBGLR3DECL(void) VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle); +VBGLR3DECL(int) VbglR3GuestPropDelete(HGCMCLIENTID idClient, const char *pszName); +VBGLR3DECL(int) VbglR3GuestPropDelSet(HGCMCLIENTID idClient, char const * const *papszPatterns, uint32_t cPatterns); +VBGLR3DECL(int) VbglR3GuestPropWait(HGCMCLIENTID idClient, const char *pszPatterns, void *pvBuf, uint32_t cbBuf, + uint64_t u64Timestamp, uint32_t cMillies, char ** ppszName, char **ppszValue, + uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual); +/** @} */ + +/** @name Guest user handling / reporting. + * @{ */ +VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser, const char *pszDomain, VBoxGuestUserState enmState, + uint8_t *pbDetails, uint32_t cbDetails); +/** @} */ + +/** @name Host version handling + * @{ */ +VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(HGCMCLIENTID idClient, bool *pfUpdate, char **ppszHostVersion, + char **ppszGuestVersion); +VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(HGCMCLIENTID idClient, char **ppszVer); +VBGLR3DECL(int) VbglR3HostVersionLastCheckedStore(HGCMCLIENTID idClient, const char *pszVer); +/** @} */ +# endif /* VBOX_WITH_GUEST_PROPS defined */ + +# ifdef VBOX_WITH_SHARED_FOLDERS +/** @name Shared folders + * @{ */ +/** + * Structure containing mapping information for a shared folder. + */ +typedef struct VBGLR3SHAREDFOLDERMAPPING +{ + /** Mapping status. */ + uint32_t u32Status; + /** Root handle. */ + uint32_t u32Root; +} VBGLR3SHAREDFOLDERMAPPING; +/** Pointer to a shared folder mapping information structure. */ +typedef VBGLR3SHAREDFOLDERMAPPING *PVBGLR3SHAREDFOLDERMAPPING; +/** Pointer to a const shared folder mapping information structure. */ +typedef VBGLR3SHAREDFOLDERMAPPING const *PCVBGLR3SHAREDFOLDERMAPPING; + +VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3SharedFolderDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(bool) VbglR3SharedFolderExists(HGCMCLIENTID idClient, const char *pszShareName); +VBGLR3DECL(int) VbglR3SharedFolderGetMappings(HGCMCLIENTID idClient, bool fAutoMountOnly, + PVBGLR3SHAREDFOLDERMAPPING *ppaMappings, uint32_t *pcMappings); +VBGLR3DECL(void) VbglR3SharedFolderFreeMappings(PVBGLR3SHAREDFOLDERMAPPING paMappings); +VBGLR3DECL(int) VbglR3SharedFolderGetName(HGCMCLIENTID idClient,uint32_t u32Root, char **ppszName); +VBGLR3DECL(int) VbglR3SharedFolderGetMountPrefix(char **ppszPrefix); +VBGLR3DECL(int) VbglR3SharedFolderGetMountDir(char **ppszDir); +/** @} */ +# endif /* VBOX_WITH_SHARED_FOLDERS defined */ + +# ifdef VBOX_WITH_GUEST_CONTROL +/** @name Guest control + * @{ */ + +/** + * Structure containing the context required for + * either retrieving or sending a HGCM guest control + * commands from or to the host. + * + * Note: Do not change parameter order without also + * adapting all structure initializers. + */ +typedef struct VBGLR3GUESTCTRLCMDCTX +{ + /** @todo This struct could be handy if we want to implement + * a second communication channel, e.g. via TCP/IP. + * Use a union for the HGCM stuff then. */ + + /** IN: HGCM client ID to use for + * communication. */ + uint32_t uClientID; + /** IN/OUT: Context ID to retrieve + * or to use. */ + uint32_t uContextID; + /** IN: Protocol version to use. */ + uint32_t uProtocol; + /** OUT: Number of parameters retrieved. */ + uint32_t uNumParms; +} VBGLR3GUESTCTRLCMDCTX, *PVBGLR3GUESTCTRLCMDCTX; + +/* General message handling on the guest. */ +VBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t idClient); +VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId, uint32_t uValue, uint32_t uMaskAdd, uint32_t uMaskRemove); +VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId); +VBGLR3DECL(int) VbglR3GuestCtrlMsgReply(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc); +VBGLR3DECL(int) VbglR3GuestCtrlMsgReplyEx(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc, uint32_t uType, + void *pvPayload, uint32_t cbPayload); +VBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId); +VBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId, uint32_t *puMsg, uint32_t *puNumParms); +VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(HGCMCLIENTID idClient); +/* Guest session handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t fFlags); +VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uType, uint32_t uResult); +VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puProtocol, char *pszUser, uint32_t cbUser, + char *pszPassword, uint32_t cbPassword, char *pszDomain, uint32_t cbDomain, + uint32_t *pfFlags, uint32_t *pidSession); +VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *pfFlags, uint32_t *pidSession); +/* Guest path handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszSource, uint32_t cbSource, char *pszDest, + uint32_t cbDest, uint32_t *pfFlags); +/* Guest process execution. */ +VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszCmd, uint32_t cbCmd, uint32_t *pfFlags, + char *pszArgs, uint32_t cbArgs, uint32_t *puNumArgs, char *pszEnv, uint32_t *pcbEnv, + uint32_t *puNumEnvVars, char *pszUser, uint32_t cbUser, char *pszPassword, + uint32_t cbPassword, uint32_t *puTimeoutMS, uint32_t *puPriority, + uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *pfFlags, void *pvData, + uint32_t cbData, uint32_t *pcbSize); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puHandle, uint32_t *pfFlags); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puWaitFlags, + uint32_t *puTimeoutMS); +/* Guest native directory handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszPath, uint32_t cbPath, uint32_t *pfFlags); +/* Guest native file handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszFileName, uint32_t cbFileName, char *pszOpenMode, + uint32_t cbOpenMode, char *pszDisposition, uint32_t cbDisposition, char *pszSharing, + uint32_t cbSharing, uint32_t *puCreationMode, uint64_t *puOffset); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, uint32_t *puToRead); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + uint32_t *puToRead, uint64_t *poffRead); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + void *pvData, uint32_t cbData, uint32_t *pcbActual); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, void *pvData, uint32_t cbData, + uint32_t *pcbActual, uint64_t *poffWrite); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + uint32_t *puSeekMethod, uint64_t *poffSeek); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle); +/* Guest -> Host. */ +VBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uFileHandle); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbError(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uWritten); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uStatus, uint32_t fFlags, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uHandle, uint32_t fFlags, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t u32PID, uint32_t uStatus, + uint32_t fFlags, uint32_t cbWritten); + +/** @} */ +# endif /* VBOX_WITH_GUEST_CONTROL defined */ + +/** @name Auto-logon handling + * @{ */ +VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus); +VBGLR3DECL(bool) VbglR3AutoLogonIsRemoteSession(void); +/** @} */ + +/** @name User credentials handling + * @{ */ +VBGLR3DECL(int) VbglR3CredentialsQueryAvailability(void); +VBGLR3DECL(int) VbglR3CredentialsRetrieve(char **ppszUser, char **ppszPassword, char **ppszDomain); +VBGLR3DECL(int) VbglR3CredentialsRetrieveUtf16(PRTUTF16 *ppwszUser, PRTUTF16 *ppwszPassword, PRTUTF16 *ppwszDomain); +VBGLR3DECL(void) VbglR3CredentialsDestroy(char *pszUser, char *pszPassword, char *pszDomain, uint32_t cPasses); +VBGLR3DECL(void) VbglR3CredentialsDestroyUtf16(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16 pwszDomain, + uint32_t cPasses); +/** @} */ + +/** @name CPU hotplug monitor + * @{ */ +VBGLR3DECL(int) VbglR3CpuHotPlugInit(void); +VBGLR3DECL(int) VbglR3CpuHotPlugTerm(void); +VBGLR3DECL(int) VbglR3CpuHotPlugWaitForEvent(VMMDevCpuEventType *penmEventType, uint32_t *pidCpuCore, uint32_t *pidCpuPackage); +/** @} */ + +/** @name Page sharing + * @{ */ +struct VMMDEVSHAREDREGIONDESC; +VBGLR3DECL(int) VbglR3RegisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64 GCBaseAddr, uint32_t cbModule, + unsigned cRegions, struct VMMDEVSHAREDREGIONDESC *pRegions); +VBGLR3DECL(int) VbglR3UnregisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64 GCBaseAddr, uint32_t cbModule); +VBGLR3DECL(int) VbglR3CheckSharedModules(void); +VBGLR3DECL(bool) VbglR3PageSharingIsEnabled(void); +VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, uint64_t *puPageFlags); +/** @} */ + +# ifdef VBOX_WITH_DRAG_AND_DROP +/** @name Drag and Drop + * @{ */ +/** + * Structure containing the context required for + * either retrieving or sending a HGCM guest drag'n drop + * commands from or to the host. + * + * Note: Do not change parameter order without also + * adapting all structure initializers. + */ +typedef struct VBGLR3GUESTDNDCMDCTX +{ + /** @todo This struct could be handy if we want to implement + * a second communication channel, e.g. via TCP/IP. + * Use a union for the HGCM stuff then. */ + + /** HGCM client ID to use for communication. */ + uint32_t uClientID; + /** The VM's current session ID. */ + uint64_t uSessionID; + /** Protocol version to use. */ + uint32_t uProtocol; + /** Number of parameters retrieved for the current command. */ + uint32_t uNumParms; + /** Max chunk size (in bytes) for data transfers. */ + uint32_t cbMaxChunkSize; +} VBGLR3GUESTDNDCMDCTX, *PVBGLR3GUESTDNDCMDCTX; + +typedef struct VBGLR3DNDHGCMEVENT +{ + uint32_t uType; /** The event type this struct contains. */ + uint32_t uScreenId; /** Screen ID this request belongs to. */ + char *pszFormats; /** Format list (\r\n separated). */ + uint32_t cbFormats; /** Size (in bytes) of pszFormats (\0 included). */ + union + { + struct + { + uint32_t uXpos; /** X position of guest screen. */ + uint32_t uYpos; /** Y position of guest screen. */ + uint32_t uDefAction; /** Proposed DnD action. */ + uint32_t uAllActions; /** Allowed DnD actions. */ + } a; /** Values used in init, move and drop event type. */ + struct + { + void *pvData; /** Data request. */ + uint32_t cbData; /** Size (in bytes) of pvData. */ + } b; /** Values used in drop data event type. */ + } u; +} VBGLR3DNDHGCMEVENT; +typedef VBGLR3DNDHGCMEVENT *PVBGLR3DNDHGCMEVENT; +typedef const PVBGLR3DNDHGCMEVENT CPVBGLR3DNDHGCMEVENT; +VBGLR3DECL(int) VbglR3DnDConnect(PVBGLR3GUESTDNDCMDCTX pCtx); +VBGLR3DECL(int) VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx); + +VBGLR3DECL(int) VbglR3DnDRecvNextMsg(PVBGLR3GUESTDNDCMDCTX pCtx, CPVBGLR3DNDHGCMEVENT pEvent); + +VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction); +VBGLR3DECL(int) VbglR3DnDHGSendReqData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pcszFormat); +VBGLR3DECL(int) VbglR3DnDHGSendProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr); +# ifdef VBOX_WITH_DRAG_AND_DROP_GH +VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats, uint32_t cbFormats); +VBGLR3DECL(int) VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp); +# endif /* VBOX_WITH_DRAG_AND_DROP_GH */ +/** @} */ +# endif /* VBOX_WITH_DRAG_AND_DROP */ + +/* Generic Host Channel Service. */ +VBGLR3DECL(int) VbglR3HostChannelInit(uint32_t *pidClient); +VBGLR3DECL(void) VbglR3HostChannelTerm(uint32_t idClient); +VBGLR3DECL(int) VbglR3HostChannelAttach(uint32_t *pu32ChannelHandle, uint32_t u32HGCMClientId, + const char *pszName, uint32_t u32Flags); +VBGLR3DECL(void) VbglR3HostChannelDetach(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId); +VBGLR3DECL(int) VbglR3HostChannelSend(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3HostChannelRecv(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + void *pvData, uint32_t cbData, + uint32_t *pu32SizeReceived, uint32_t *pu32SizeRemaining); +VBGLR3DECL(int) VbglR3HostChannelControl(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + uint32_t u32Code, void *pvParm, uint32_t cbParm, + void *pvData, uint32_t cbData, uint32_t *pu32SizeDataReturned); +VBGLR3DECL(int) VbglR3HostChannelEventWait(uint32_t *pu32ChannelHandle, uint32_t u32HGCMClientId, + uint32_t *pu32EventId, void *pvParm, uint32_t cbParm, + uint32_t *pu32SizeReturned); +VBGLR3DECL(int) VbglR3HostChannelEventCancel(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId); +VBGLR3DECL(int) VbglR3HostChannelQuery(const char *pszName, uint32_t u32HGCMClientId, uint32_t u32Code, + void *pvParm, uint32_t cbParm, void *pvData, uint32_t cbData, + uint32_t *pu32SizeDataReturned); + +/** @name Mode hint storage + * @{ */ +VBGLR3DECL(int) VbglR3ReadVideoMode(unsigned cDisplay, unsigned *cx, + unsigned *cy, unsigned *cBPP, unsigned *x, + unsigned *y, unsigned *fEnabled); +VBGLR3DECL(int) VbglR3WriteVideoMode(unsigned cDisplay, unsigned cx, + unsigned cy, unsigned cBPP, unsigned x, + unsigned y, unsigned fEnabled); +/** @} */ + +/** @name Generic HGCM + * @{ */ +VBGLR3DECL(int) VbglR3HGCMConnect(const char *pszServiceName, HGCMCLIENTID *pidClient); +VBGLR3DECL(int) VbglR3HGCMDisconnect(HGCMCLIENTID idClient); +struct VBGLIOCHGCMCALL; +VBGLR3DECL(int) VbglR3HGCMCall(struct VBGLIOCHGCMCALL *pInfo, size_t cbInfo); +/** @} */ + +#endif /* IN_RING3 */ +/** @} */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestMangling.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VBoxGuestMangling.h @@ -0,0 +1,32 @@ +/** @file + * VBoxGuest - Mangling of IPRT symbols for guest drivers. + * + * This is included via a compiler directive on platforms with a global kernel + * symbol name space (i.e. not Windows, OS/2 and Mac OS X (?)). + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#define RT_MANGLER(symbol) VBoxGuest_##symbol +#include + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VMMDev.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VMMDev.h @@ -0,0 +1,1823 @@ +/** @file + * Virtual Device for Guest <-> VMM/Host communication (ADD,DEV). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VMMDev_h +#define ___VBox_VMMDev_h + +#include +#include /* for the PCI IDs. */ +#include +#include +#include +#include +#include + + +#pragma pack(4) /* force structure dword packing here. */ +RT_C_DECLS_BEGIN + + +/** @defgroup grp_vmmdev VMM Device + * + * @note This interface cannot be changed, it can only be extended! + * + * @{ + */ + + +/** Size of VMMDev RAM region accessible by guest. + * Must be big enough to contain VMMDevMemory structure (see further down). + * For now: 4 megabyte. + */ +#define VMMDEV_RAM_SIZE (4 * 256 * PAGE_SIZE) + +/** Size of VMMDev heap region accessible by guest. + * (Must be a power of two (pci range).) + */ +#define VMMDEV_HEAP_SIZE (4 * PAGE_SIZE) + +/** Port for generic request interface (relative offset). */ +#define VMMDEV_PORT_OFF_REQUEST 0 + + +/** @defgroup grp_vmmdev_req VMMDev Generic Request Interface + * @{ + */ + +/** @name Current version of the VMMDev interface. + * + * Additions are allowed to work only if + * additions_major == vmmdev_current && additions_minor <= vmmdev_current. + * Additions version is reported to host (VMMDev) by VMMDevReq_ReportGuestInfo. + * + * @remarks These defines also live in the 16-bit and assembly versions of this + * header. + */ +#define VMMDEV_VERSION 0x00010004 +#define VMMDEV_VERSION_MAJOR (VMMDEV_VERSION >> 16) +#define VMMDEV_VERSION_MINOR (VMMDEV_VERSION & 0xffff) +/** @} */ + +/** Maximum request packet size. */ +#define VMMDEV_MAX_VMMDEVREQ_SIZE _1M +/** Maximum number of HGCM parameters. + * @todo r=bird: This is wrong wrt user land calls. For them it iss 61. + * See comments on VBGLIOCHGCMCALL::cParms. */ +#define VMMDEV_MAX_HGCM_PARMS 1024 +/** Maximum total size of hgcm buffers in one call. */ +#define VMMDEV_MAX_HGCM_DATA_SIZE UINT32_C(0x7FFFFFFF) + +/** + * VMMDev request types. + * @note when updating this, adjust vmmdevGetRequestSize() as well + */ +typedef enum VMMDevRequestType +{ + VMMDevReq_InvalidRequest = 0, + VMMDevReq_GetMouseStatus = 1, + VMMDevReq_SetMouseStatus = 2, + VMMDevReq_SetPointerShape = 3, + VMMDevReq_GetHostVersion = 4, + VMMDevReq_Idle = 5, + VMMDevReq_GetHostTime = 10, + VMMDevReq_GetHypervisorInfo = 20, + VMMDevReq_SetHypervisorInfo = 21, + VMMDevReq_RegisterPatchMemory = 22, /**< @since version 3.0.6 */ + VMMDevReq_DeregisterPatchMemory = 23, /**< @since version 3.0.6 */ + VMMDevReq_SetPowerStatus = 30, + VMMDevReq_AcknowledgeEvents = 41, + VMMDevReq_CtlGuestFilterMask = 42, + VMMDevReq_ReportGuestInfo = 50, + VMMDevReq_ReportGuestInfo2 = 58, /**< @since version 3.2.0 */ + VMMDevReq_ReportGuestStatus = 59, /**< @since version 3.2.8 */ + VMMDevReq_ReportGuestUserState = 74, /**< @since version 4.3 */ + /** + * Retrieve a display resize request sent by the host using + * @a IDisplay:setVideoModeHint. Deprecated. + * + * Similar to @a VMMDevReq_GetDisplayChangeRequest2, except that it only + * considers host requests sent for the first virtual display. This guest + * request should not be used in new guest code, and the results are + * undefined if a guest mixes calls to this and + * @a VMMDevReq_GetDisplayChangeRequest2. + */ + VMMDevReq_GetDisplayChangeRequest = 51, + VMMDevReq_VideoModeSupported = 52, + VMMDevReq_GetHeightReduction = 53, + /** + * Retrieve a display resize request sent by the host using + * @a IDisplay:setVideoModeHint. + * + * Queries a display resize request sent from the host. If the + * @a eventAck member is sent to true and there is an unqueried + * request available for one of the virtual display then that request will + * be returned. If several displays have unqueried requests the lowest + * numbered display will be chosen first. Only the most recent unseen + * request for each display is remembered. + * If @a eventAck is set to false, the last host request queried with + * @a eventAck set is resent, or failing that the most recent received from + * the host. If no host request was ever received then all zeros are + * returned. + */ + VMMDevReq_GetDisplayChangeRequest2 = 54, + VMMDevReq_ReportGuestCapabilities = 55, + VMMDevReq_SetGuestCapabilities = 56, + VMMDevReq_VideoModeSupported2 = 57, /**< @since version 3.2.0 */ + VMMDevReq_GetDisplayChangeRequestEx = 80, /**< @since version 4.2.4 */ +#ifdef VBOX_WITH_HGCM + VMMDevReq_HGCMConnect = 60, + VMMDevReq_HGCMDisconnect = 61, +#ifdef VBOX_WITH_64_BITS_GUESTS + VMMDevReq_HGCMCall32 = 62, + VMMDevReq_HGCMCall64 = 63, +#else + VMMDevReq_HGCMCall = 62, +#endif /* VBOX_WITH_64_BITS_GUESTS */ + VMMDevReq_HGCMCancel = 64, + VMMDevReq_HGCMCancel2 = 65, +#endif + VMMDevReq_VideoAccelEnable = 70, + VMMDevReq_VideoAccelFlush = 71, + VMMDevReq_VideoSetVisibleRegion = 72, + VMMDevReq_GetSeamlessChangeRequest = 73, + VMMDevReq_QueryCredentials = 100, + VMMDevReq_ReportCredentialsJudgement = 101, + VMMDevReq_ReportGuestStats = 110, + VMMDevReq_GetMemBalloonChangeRequest = 111, + VMMDevReq_GetStatisticsChangeRequest = 112, + VMMDevReq_ChangeMemBalloon = 113, + VMMDevReq_GetVRDPChangeRequest = 150, + VMMDevReq_LogString = 200, + VMMDevReq_GetCpuHotPlugRequest = 210, + VMMDevReq_SetCpuHotPlugStatus = 211, + VMMDevReq_RegisterSharedModule = 212, + VMMDevReq_UnregisterSharedModule = 213, + VMMDevReq_CheckSharedModules = 214, + VMMDevReq_GetPageSharingStatus = 215, + VMMDevReq_DebugIsPageShared = 216, + VMMDevReq_GetSessionId = 217, /**< @since version 3.2.8 */ + VMMDevReq_WriteCoreDump = 218, + VMMDevReq_GuestHeartbeat = 219, + VMMDevReq_HeartbeatConfigure = 220, + VMMDevReq_SizeHack = 0x7fffffff +} VMMDevRequestType; + +#ifdef VBOX_WITH_64_BITS_GUESTS +/* + * Constants and structures are redefined for the guest. + * + * Host code MUST always use either *32 or *64 variant explicitely. + * Host source code will use VBOX_HGCM_HOST_CODE define to catch undefined + * data types and constants. + * + * This redefinition means that the new additions builds will use + * the *64 or *32 variants depending on the current architecture bit count (ARCH_BITS). + */ +# ifndef VBOX_HGCM_HOST_CODE +# if ARCH_BITS == 64 +# define VMMDevReq_HGCMCall VMMDevReq_HGCMCall64 +# elif ARCH_BITS == 32 || ARCH_BITS == 16 +# define VMMDevReq_HGCMCall VMMDevReq_HGCMCall32 +# else +# error "Unsupported ARCH_BITS" +# endif +# endif /* !VBOX_HGCM_HOST_CODE */ +#endif /* VBOX_WITH_64_BITS_GUESTS */ + +/** Version of VMMDevRequestHeader structure. */ +#define VMMDEV_REQUEST_HEADER_VERSION (0x10001) + + +/** + * Generic VMMDev request header. + * + * This structure is copied/mirrored by VBGLREQHDR in the VBoxGuest I/O control + * interface. Changes there needs to be mirrored in it. + * + * @sa VBGLREQHDR + */ +typedef struct VMMDevRequestHeader +{ + /** IN: Size of the structure in bytes (including body). + * (VBGLREQHDR uses this for input size and output if reserved1 is zero). */ + uint32_t size; + /** IN: Version of the structure. */ + uint32_t version; + /** IN: Type of the request. + * @note VBGLREQHDR uses this for optional output size. */ + VMMDevRequestType requestType; + /** OUT: VBox status code. */ + int32_t rc; + /** Reserved field no.1. MBZ. + * @note VBGLREQHDR uses this for optional output size, however never for a + * real VMMDev request, only in the I/O control interface. */ + uint32_t reserved1; + /** Reserved field no.2. MBZ. */ + uint32_t reserved2; +} VMMDevRequestHeader; +AssertCompileSize(VMMDevRequestHeader, 24); + +/** Initialize a VMMDevRequestHeader structure. + * Same as VBGLREQHDR_INIT_VMMDEV(). */ +#define VMMDEV_REQ_HDR_INIT(a_pHdr, a_cb, a_enmType) \ + do { \ + (a_pHdr)->size = (a_cb); \ + (a_pHdr)->version = VMMDEV_REQUEST_HEADER_VERSION; \ + (a_pHdr)->requestType = (a_enmType); \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->reserved1 = 0; \ + (a_pHdr)->reserved2 = 0; \ + } while (0) + + +/** + * Mouse status request structure. + * + * Used by VMMDevReq_GetMouseStatus and VMMDevReq_SetMouseStatus. + */ +typedef struct +{ + /** header */ + VMMDevRequestHeader header; + /** Mouse feature mask. See VMMDEV_MOUSE_*. */ + uint32_t mouseFeatures; + /** Mouse x position. */ + int32_t pointerXPos; + /** Mouse y position. */ + int32_t pointerYPos; +} VMMDevReqMouseStatus; +AssertCompileSize(VMMDevReqMouseStatus, 24+12); + +/** @name Mouse capability bits (VMMDevReqMouseStatus::mouseFeatures). + * @{ */ +/** The guest can (== wants to) handle absolute coordinates. */ +#define VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE RT_BIT(0) +/** The host can (== wants to) send absolute coordinates. + * (Input not captured.) */ +#define VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE RT_BIT(1) +/** The guest can *NOT* switch to software cursor and therefore depends on the + * host cursor. + * + * When guest additions are installed and the host has promised to display the + * cursor itself, the guest installs a hardware mouse driver. Don't ask the + * guest to switch to a software cursor then. */ +#define VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR RT_BIT(2) +/** The host does NOT provide support for drawing the cursor itself. */ +#define VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER RT_BIT(3) +/** The guest can read VMMDev events to find out about pointer movement */ +#define VMMDEV_MOUSE_NEW_PROTOCOL RT_BIT(4) +/** If the guest changes the status of the + * VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR bit, the host will honour this */ +#define VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR RT_BIT(5) +/** The host supplies an absolute pointing device. The Guest Additions may + * wish to use this to decide whether to install their own driver */ +#define VMMDEV_MOUSE_HOST_HAS_ABS_DEV RT_BIT(6) +/** The mask of all VMMDEV_MOUSE_* flags */ +#define VMMDEV_MOUSE_MASK UINT32_C(0x0000007f) +/** The mask of guest capability changes for which notification events should + * be sent */ +#define VMMDEV_MOUSE_NOTIFY_HOST_MASK \ + (VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE | VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR) +/** The mask of all capabilities which the guest can legitimately change */ +#define VMMDEV_MOUSE_GUEST_MASK \ + (VMMDEV_MOUSE_NOTIFY_HOST_MASK | VMMDEV_MOUSE_NEW_PROTOCOL) +/** The mask of host capability changes for which notification events should + * be sent */ +#define VMMDEV_MOUSE_NOTIFY_GUEST_MASK \ + VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE +/** The mask of all capabilities which the host can legitimately change */ +#define VMMDEV_MOUSE_HOST_MASK \ + ( VMMDEV_MOUSE_NOTIFY_GUEST_MASK \ + | VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER \ + | VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR \ + | VMMDEV_MOUSE_HOST_HAS_ABS_DEV) +/** @} */ + +/** @name Absolute mouse reporting range + * @{ */ +/** @todo Should these be here? They are needed by both host and guest. */ +/** The minumum value our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE_MIN 0 +/** The maximum value our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE_MAX 0xFFFF +/** The full range our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE (VMMDEV_MOUSE_RANGE_MAX - VMMDEV_MOUSE_RANGE_MIN) +/** @} */ + + +/** + * Mouse pointer shape/visibility change request. + * + * Used by VMMDevReq_SetPointerShape. The size is variable. + */ +typedef struct VMMDevReqMousePointer +{ + /** Header. */ + VMMDevRequestHeader header; + /** VBOX_MOUSE_POINTER_* bit flags from VBox/Graphics/VBoxVideo.h. */ + uint32_t fFlags; + /** x coordinate of hot spot. */ + uint32_t xHot; + /** y coordinate of hot spot. */ + uint32_t yHot; + /** Width of the pointer in pixels. */ + uint32_t width; + /** Height of the pointer in scanlines. */ + uint32_t height; + /** Pointer data. + * + **** + * The data consists of 1 bpp AND mask followed by 32 bpp XOR (color) mask. + * + * For pointers without alpha channel the XOR mask pixels are 32 bit values: (lsb)BGR0(msb). + * For pointers with alpha channel the XOR mask consists of (lsb)BGRA(msb) 32 bit values. + * + * Guest driver must create the AND mask for pointers with alpha channel, so if host does not + * support alpha, the pointer could be displayed as a normal color pointer. The AND mask can + * be constructed from alpha values. For example alpha value >= 0xf0 means bit 0 in the AND mask. + * + * The AND mask is 1 bpp bitmap with byte aligned scanlines. Size of AND mask, + * therefore, is cbAnd = (width + 7) / 8 * height. The padding bits at the + * end of any scanline are undefined. + * + * The XOR mask follows the AND mask on the next 4 bytes aligned offset: + * uint8_t *pXor = pAnd + (cbAnd + 3) & ~3 + * Bytes in the gap between the AND and the XOR mask are undefined. + * XOR mask scanlines have no gap between them and size of XOR mask is: + * cXor = width * 4 * height. + **** + * + * Preallocate 4 bytes for accessing actual data as p->pointerData. + */ + char pointerData[4]; +} VMMDevReqMousePointer; +AssertCompileSize(VMMDevReqMousePointer, 24+24); + +/** + * Get the size that a VMMDevReqMousePointer request should have for a given + * size of cursor, including the trailing cursor image and mask data. + * @note an "empty" request still has the four preallocated bytes of data + * + * @returns the size + * @param width the cursor width + * @param height the cursor height + */ +DECLINLINE(size_t) vmmdevGetMousePointerReqSize(uint32_t width, uint32_t height) +{ + size_t cbBase = RT_OFFSETOF(VMMDevReqMousePointer, pointerData[0]); + size_t cbMask = (width + 7) / 8 * height; + size_t cbArgb = width * height * 4; + return RT_MAX(cbBase + ((cbMask + 3) & ~3) + cbArgb, + sizeof(VMMDevReqMousePointer)); +} + + +/** + * String log request structure. + * + * Used by VMMDevReq_LogString. + * @deprecated Use the IPRT logger or VbglR3WriteLog instead. + */ +typedef struct +{ + /** header */ + VMMDevRequestHeader header; + /** variable length string data */ + char szString[1]; +} VMMDevReqLogString; +AssertCompileSize(VMMDevReqLogString, 24+4); + + +/** + * VirtualBox host version request structure. + * + * Used by VMMDevReq_GetHostVersion. + * + * @remarks VBGL uses this to detect the precense of new features in the + * interface. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Major version. */ + uint16_t major; + /** Minor version. */ + uint16_t minor; + /** Build number. */ + uint32_t build; + /** SVN revision. */ + uint32_t revision; + /** Feature mask. */ + uint32_t features; +} VMMDevReqHostVersion; +AssertCompileSize(VMMDevReqHostVersion, 24+16); + +/** @name VMMDevReqHostVersion::features + * @{ */ +/** Physical page lists are supported by HGCM. */ +#define VMMDEV_HVF_HGCM_PHYS_PAGE_LIST RT_BIT(0) +/** @} */ + + +/** + * Guest capabilities structure. + * + * Used by VMMDevReq_ReportGuestCapabilities. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Capabilities (VMMDEV_GUEST_*). */ + uint32_t caps; +} VMMDevReqGuestCapabilities; +AssertCompileSize(VMMDevReqGuestCapabilities, 24+4); + + +/** + * Guest capabilities structure, version 2. + * + * Used by VMMDevReq_SetGuestCapabilities. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Mask of capabilities to be added. */ + uint32_t u32OrMask; + /** Mask of capabilities to be removed. */ + uint32_t u32NotMask; +} VMMDevReqGuestCapabilities2; +AssertCompileSize(VMMDevReqGuestCapabilities2, 24+8); + + +/** + * Idle request structure. + * + * Used by VMMDevReq_Idle. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevReqIdle; +AssertCompileSize(VMMDevReqIdle, 24); + + +/** + * Host time request structure. + * + * Used by VMMDevReq_GetHostTime. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** OUT: Time in milliseconds since unix epoch. */ + uint64_t time; +} VMMDevReqHostTime; +AssertCompileSize(VMMDevReqHostTime, 24+8); + + +/** + * Hypervisor info structure. + * + * Used by VMMDevReq_GetHypervisorInfo and VMMDevReq_SetHypervisorInfo. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest virtual address of proposed hypervisor start. + * Not used by VMMDevReq_GetHypervisorInfo. + * @todo Make this 64-bit compatible? */ + RTGCPTR32 hypervisorStart; + /** Hypervisor size in bytes. */ + uint32_t hypervisorSize; +} VMMDevReqHypervisorInfo; +AssertCompileSize(VMMDevReqHypervisorInfo, 24+8); + +/** @name Default patch memory size . + * Used by VMMDevReq_RegisterPatchMemory and VMMDevReq_DeregisterPatchMemory. + * @{ */ +#define VMMDEV_GUEST_DEFAULT_PATCHMEM_SIZE 8192 +/** @} */ + +/** + * Patching memory structure. (locked executable & read-only page from the guest's perspective) + * + * Used by VMMDevReq_RegisterPatchMemory and VMMDevReq_DeregisterPatchMemory + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest virtual address of the patching page(s). */ + RTGCPTR64 pPatchMem; + /** Patch page size in bytes. */ + uint32_t cbPatchMem; +} VMMDevReqPatchMemory; +AssertCompileSize(VMMDevReqPatchMemory, 24+12); + + +/** + * Guest power requests. + * + * See VMMDevReq_SetPowerStatus and VMMDevPowerStateRequest. + */ +typedef enum +{ + VMMDevPowerState_Invalid = 0, + VMMDevPowerState_Pause = 1, + VMMDevPowerState_PowerOff = 2, + VMMDevPowerState_SaveState = 3, + VMMDevPowerState_SizeHack = 0x7fffffff +} VMMDevPowerState; +AssertCompileSize(VMMDevPowerState, 4); + +/** + * VM power status structure. + * + * Used by VMMDevReq_SetPowerStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Power state request. */ + VMMDevPowerState powerState; +} VMMDevPowerStateRequest; +AssertCompileSize(VMMDevPowerStateRequest, 24+4); + + +/** + * Pending events structure. + * + * Used by VMMDevReq_AcknowledgeEvents. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Pending event mask. */ + uint32_t events; +} VMMDevEvents; +AssertCompileSize(VMMDevEvents, 24+4); + + +/** + * Guest event filter mask control. + * + * Used by VMMDevReq_CtlGuestFilterMask. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Mask of events to be added to the filter. */ + uint32_t u32OrMask; + /** Mask of events to be removed from the filter. */ + uint32_t u32NotMask; +} VMMDevCtlGuestFilterMask; +AssertCompileSize(VMMDevCtlGuestFilterMask, 24+8); + + +/** + * Guest information structure. + * + * Used by VMMDevReportGuestInfo and PDMIVMMDEVCONNECTOR::pfnUpdateGuestVersion. + */ +typedef struct VBoxGuestInfo +{ + /** The VMMDev interface version expected by additions. + * *Deprecated*, do not use anymore! Will be removed. */ + uint32_t interfaceVersion; + /** Guest OS type. */ + VBOXOSTYPE osType; +} VBoxGuestInfo; +AssertCompileSize(VBoxGuestInfo, 8); + +/** + * Guest information report. + * + * Used by VMMDevReq_ReportGuestInfo. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestInfo guestInfo; +} VMMDevReportGuestInfo; +AssertCompileSize(VMMDevReportGuestInfo, 24+8); + + +/** + * Guest information structure, version 2. + * + * Used by VMMDevReportGuestInfo2 and PDMIVMMDEVCONNECTOR::pfnUpdateGuestVersion2. + */ +typedef struct VBoxGuestInfo2 +{ + /** Major version. */ + uint16_t additionsMajor; + /** Minor version. */ + uint16_t additionsMinor; + /** Build number. */ + uint32_t additionsBuild; + /** SVN revision. */ + uint32_t additionsRevision; + /** Feature mask, currently unused. */ + uint32_t additionsFeatures; + /** The intentional meaning of this field was: + * Some additional information, for example 'Beta 1' or something like that. + * + * The way it was implemented was implemented: VBOX_VERSION_STRING. + * + * This means the first three members are duplicated in this field (if the guest + * build config is sane). So, the user must check this and chop it off before + * usage. There is, because of the Main code's blind trust in the field's + * content, no way back. */ + char szName[128]; +} VBoxGuestInfo2; +AssertCompileSize(VBoxGuestInfo2, 144); + +/** + * Guest information report, version 2. + * + * Used by VMMDevReq_ReportGuestInfo2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestInfo2 guestInfo; +} VMMDevReportGuestInfo2; +AssertCompileSize(VMMDevReportGuestInfo2, 24+144); + + +/** + * The facility class. + * + * This needs to be kept in sync with AdditionsFacilityClass of the Main API! + */ +typedef enum +{ + VBoxGuestFacilityClass_None = 0, + VBoxGuestFacilityClass_Driver = 10, + VBoxGuestFacilityClass_Service = 30, + VBoxGuestFacilityClass_Program = 50, + VBoxGuestFacilityClass_Feature = 100, + VBoxGuestFacilityClass_ThirdParty = 999, + VBoxGuestFacilityClass_All = 0x7ffffffe, + VBoxGuestFacilityClass_SizeHack = 0x7fffffff +} VBoxGuestFacilityClass; +AssertCompileSize(VBoxGuestFacilityClass, 4); + +/** + * Guest status structure. + * + * Used by VMMDevReqGuestStatus. + */ +typedef struct VBoxGuestStatus +{ + /** Facility the status is indicated for. */ + VBoxGuestFacilityType facility; + /** Current guest status. */ + VBoxGuestFacilityStatus status; + /** Flags, not used at the moment. */ + uint32_t flags; +} VBoxGuestStatus; +AssertCompileSize(VBoxGuestStatus, 12); + +/** + * Guest Additions status structure. + * + * Used by VMMDevReq_ReportGuestStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestStatus guestStatus; +} VMMDevReportGuestStatus; +AssertCompileSize(VMMDevReportGuestStatus, 24+12); + + +/** + * Guest user status updates. + */ +typedef struct VBoxGuestUserStatus +{ + /** The guest user state to send. */ + VBoxGuestUserState state; + /** Size (in bytes) of szUser. */ + uint32_t cbUser; + /** Size (in bytes) of szDomain. */ + uint32_t cbDomain; + /** Size (in bytes) of aDetails. */ + uint32_t cbDetails; + /** Note: Here begins the dynamically + * allocated region. */ + /** Guest user to report state for. */ + char szUser[1]; + /** Domain the guest user is bound to. */ + char szDomain[1]; + /** Optional details of the state. */ + uint8_t aDetails[1]; +} VBoxGuestUserStatus; +AssertCompileSize(VBoxGuestUserStatus, 20); + + +/** + * Guest user status structure. + * + * Used by VMMDevReq_ReportGuestUserStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest user status. */ + VBoxGuestUserStatus status; +} VMMDevReportGuestUserState; +AssertCompileSize(VMMDevReportGuestUserState, 24+20); + + +/** + * Guest statistics structure. + * + * Used by VMMDevReportGuestStats and PDMIVMMDEVCONNECTOR::pfnReportStatistics. + */ +typedef struct VBoxGuestStatistics +{ + /** Virtual CPU ID. */ + uint32_t u32CpuId; + /** Reported statistics. */ + uint32_t u32StatCaps; + /** Idle CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_Idle; + /** Kernel CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_Kernel; + /** User CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_User; + /** Nr of threads. */ + uint32_t u32Threads; + /** Nr of processes. */ + uint32_t u32Processes; + /** Nr of handles. */ + uint32_t u32Handles; + /** Memory load (0-100). */ + uint32_t u32MemoryLoad; + /** Page size of guest system. */ + uint32_t u32PageSize; + /** Total physical memory (in 4KB pages). */ + uint32_t u32PhysMemTotal; + /** Available physical memory (in 4KB pages). */ + uint32_t u32PhysMemAvail; + /** Ballooned physical memory (in 4KB pages). */ + uint32_t u32PhysMemBalloon; + /** Total number of committed memory (which is not necessarily in-use) (in 4KB pages). */ + uint32_t u32MemCommitTotal; + /** Total amount of memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelTotal; + /** Total amount of paged memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelPaged; + /** Total amount of nonpaged memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelNonPaged; + /** Total amount of memory used for the system cache (in 4KB pages). */ + uint32_t u32MemSystemCache; + /** Pagefile size (in 4KB pages). */ + uint32_t u32PageFileSize; +} VBoxGuestStatistics; +AssertCompileSize(VBoxGuestStatistics, 19*4); + +/** @name Guest statistics values (VBoxGuestStatistics::u32StatCaps). + * @{ */ +#define VBOX_GUEST_STAT_CPU_LOAD_IDLE RT_BIT(0) +#define VBOX_GUEST_STAT_CPU_LOAD_KERNEL RT_BIT(1) +#define VBOX_GUEST_STAT_CPU_LOAD_USER RT_BIT(2) +#define VBOX_GUEST_STAT_THREADS RT_BIT(3) +#define VBOX_GUEST_STAT_PROCESSES RT_BIT(4) +#define VBOX_GUEST_STAT_HANDLES RT_BIT(5) +#define VBOX_GUEST_STAT_MEMORY_LOAD RT_BIT(6) +#define VBOX_GUEST_STAT_PHYS_MEM_TOTAL RT_BIT(7) +#define VBOX_GUEST_STAT_PHYS_MEM_AVAIL RT_BIT(8) +#define VBOX_GUEST_STAT_PHYS_MEM_BALLOON RT_BIT(9) +#define VBOX_GUEST_STAT_MEM_COMMIT_TOTAL RT_BIT(10) +#define VBOX_GUEST_STAT_MEM_KERNEL_TOTAL RT_BIT(11) +#define VBOX_GUEST_STAT_MEM_KERNEL_PAGED RT_BIT(12) +#define VBOX_GUEST_STAT_MEM_KERNEL_NONPAGED RT_BIT(13) +#define VBOX_GUEST_STAT_MEM_SYSTEM_CACHE RT_BIT(14) +#define VBOX_GUEST_STAT_PAGE_FILE_SIZE RT_BIT(15) +/** @} */ + +/** + * Guest statistics command structure. + * + * Used by VMMDevReq_ReportGuestStats. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestStatistics guestStats; +} VMMDevReportGuestStats; +AssertCompileSize(VMMDevReportGuestStats, 24+19*4); + + +/** Memory balloon change request structure. */ +#define VMMDEV_MAX_MEMORY_BALLOON(PhysMemTotal) ( (9 * (PhysMemTotal)) / 10 ) + +/** + * Poll for ballooning change request. + * + * Used by VMMDevReq_GetMemBalloonChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Balloon size in megabytes. */ + uint32_t cBalloonChunks; + /** Guest ram size in megabytes. */ + uint32_t cPhysMemChunks; + /** Setting this to VMMDEV_EVENT_BALLOON_CHANGE_REQUEST indicates that the + * request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevGetMemBalloonChangeRequest; +AssertCompileSize(VMMDevGetMemBalloonChangeRequest, 24+12); + + +/** + * Change the size of the balloon. + * + * Used by VMMDevReq_ChangeMemBalloon. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The number of pages in the array. */ + uint32_t cPages; + /** true = inflate, false = deflate. */ + uint32_t fInflate; + /** Physical address (RTGCPHYS) of each page, variable size. */ + RTGCPHYS aPhysPage[1]; +} VMMDevChangeMemBalloon; +AssertCompileSize(VMMDevChangeMemBalloon, 24+16); + + +/** + * Guest statistics interval change request structure. + * + * Used by VMMDevReq_GetStatisticsChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The interval in seconds. */ + uint32_t u32StatInterval; + /** Setting this to VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevGetStatisticsChangeRequest; +AssertCompileSize(VMMDevGetStatisticsChangeRequest, 24+8); + + +/** The size of a string field in the credentials request (including '\\0'). + * @see VMMDevCredentials */ +#define VMMDEV_CREDENTIALS_SZ_SIZE 128 + +/** + * Credentials request structure. + * + * Used by VMMDevReq_QueryCredentials. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN/OUT: Request flags. */ + uint32_t u32Flags; + /** OUT: User name (UTF-8). */ + char szUserName[VMMDEV_CREDENTIALS_SZ_SIZE]; + /** OUT: Password (UTF-8). */ + char szPassword[VMMDEV_CREDENTIALS_SZ_SIZE]; + /** OUT: Domain name (UTF-8). */ + char szDomain[VMMDEV_CREDENTIALS_SZ_SIZE]; +} VMMDevCredentials; +AssertCompileSize(VMMDevCredentials, 24+4+3*128); + +/** @name Credentials request flag (VMMDevCredentials::u32Flags) + * @{ */ +/** query from host whether credentials are present */ +#define VMMDEV_CREDENTIALS_QUERYPRESENCE RT_BIT(1) +/** read credentials from host (can be combined with clear) */ +#define VMMDEV_CREDENTIALS_READ RT_BIT(2) +/** clear credentials on host (can be combined with read) */ +#define VMMDEV_CREDENTIALS_CLEAR RT_BIT(3) +/** read credentials for judgement in the guest */ +#define VMMDEV_CREDENTIALS_READJUDGE RT_BIT(8) +/** clear credentials for judegement on the host */ +#define VMMDEV_CREDENTIALS_CLEARJUDGE RT_BIT(9) +/** report credentials acceptance by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_OK RT_BIT(10) +/** report credentials denial by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_DENY RT_BIT(11) +/** report that no judgement could be made by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_NOJUDGEMENT RT_BIT(12) + +/** flag telling the guest that credentials are present */ +#define VMMDEV_CREDENTIALS_PRESENT RT_BIT(16) +/** flag telling guest that local logons should be prohibited */ +#define VMMDEV_CREDENTIALS_NOLOCALLOGON RT_BIT(17) +/** @} */ + + +/** + * Seamless mode change request structure. + * + * Used by VMMDevReq_GetSeamlessChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + + /** New seamless mode. */ + VMMDevSeamlessMode mode; + /** Setting this to VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevSeamlessChangeRequest; +AssertCompileSize(VMMDevSeamlessChangeRequest, 24+8); +AssertCompileMemberOffset(VMMDevSeamlessChangeRequest, eventAck, 24+4); + + +/** + * Display change request structure. + * + * Used by VMMDevReq_GetDisplayChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevDisplayChangeRequest; +AssertCompileSize(VMMDevDisplayChangeRequest, 24+16); + + +/** + * Display change request structure, version 2. + * + * Used by VMMDevReq_GetDisplayChangeRequest2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; + /** 0 for primary display, 1 for the first secondary, etc. */ + uint32_t display; +} VMMDevDisplayChangeRequest2; +AssertCompileSize(VMMDevDisplayChangeRequest2, 24+20); + + +/** + * Display change request structure, version Extended. + * + * Used by VMMDevReq_GetDisplayChangeRequestEx. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; + /** 0 for primary display, 1 for the first secondary, etc. */ + uint32_t display; + /** New OriginX of secondary virtual screen */ + uint32_t cxOrigin; + /** New OriginY of secondary virtual screen */ + uint32_t cyOrigin; + /** Change in origin of the secondary virtaul scree is + * required */ + bool fChangeOrigin; + /** secondary virtual screen enabled or disabled */ + bool fEnabled; +} VMMDevDisplayChangeRequestEx; +AssertCompileSize(VMMDevDisplayChangeRequestEx, 24+32); + + +/** + * Video mode supported request structure. + * + * Used by VMMDevReq_VideoModeSupported. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN: Horizontal pixel resolution. */ + uint32_t width; + /** IN: Vertical pixel resolution. */ + uint32_t height; + /** IN: Bits per pixel. */ + uint32_t bpp; + /** OUT: Support indicator. */ + bool fSupported; +} VMMDevVideoModeSupportedRequest; +AssertCompileSize(VMMDevVideoModeSupportedRequest, 24+16); + +/** + * Video mode supported request structure for a specific display. + * + * Used by VMMDevReq_VideoModeSupported2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN: The guest display number. */ + uint32_t display; + /** IN: Horizontal pixel resolution. */ + uint32_t width; + /** IN: Vertical pixel resolution. */ + uint32_t height; + /** IN: Bits per pixel. */ + uint32_t bpp; + /** OUT: Support indicator. */ + bool fSupported; +} VMMDevVideoModeSupportedRequest2; +AssertCompileSize(VMMDevVideoModeSupportedRequest2, 24+20); + +/** + * Video modes height reduction request structure. + * + * Used by VMMDevReq_GetHeightReduction. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Height reduction in pixels. */ + uint32_t heightReduction; +} VMMDevGetHeightReductionRequest; +AssertCompileSize(VMMDevGetHeightReductionRequest, 24+4); + + +/** + * VRDP change request structure. + * + * Used by VMMDevReq_GetVRDPChangeRequest. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** Whether VRDP is active or not. */ + uint8_t u8VRDPActive; + /** The configured experience level for active VRDP. */ + uint32_t u32VRDPExperienceLevel; +} VMMDevVRDPChangeRequest; +AssertCompileSize(VMMDevVRDPChangeRequest, 24+8); +AssertCompileMemberOffset(VMMDevVRDPChangeRequest, u8VRDPActive, 24); +AssertCompileMemberOffset(VMMDevVRDPChangeRequest, u32VRDPExperienceLevel, 24+4); + +/** @name VRDP Experience level (VMMDevVRDPChangeRequest::u32VRDPExperienceLevel) + * @{ */ +#define VRDP_EXPERIENCE_LEVEL_ZERO 0 /**< Theming disabled. */ +#define VRDP_EXPERIENCE_LEVEL_LOW 1 /**< Full window dragging and desktop wallpaper disabled. */ +#define VRDP_EXPERIENCE_LEVEL_MEDIUM 2 /**< Font smoothing, gradients. */ +#define VRDP_EXPERIENCE_LEVEL_HIGH 3 /**< Animation effects disabled. */ +#define VRDP_EXPERIENCE_LEVEL_FULL 4 /**< Everything enabled. */ +/** @} */ + + +/** + * VBVA enable request structure. + * + * Used by VMMDevReq_VideoAccelEnable. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** 0 - disable, !0 - enable. */ + uint32_t u32Enable; + /** The size of VBVAMEMORY::au8RingBuffer expected by driver. + * The host will refuse to enable VBVA if the size is not equal to + * VBVA_RING_BUFFER_SIZE. + */ + uint32_t cbRingBuffer; + /** Guest initializes the status to 0. Host sets appropriate VBVA_F_STATUS_ flags. */ + uint32_t fu32Status; +} VMMDevVideoAccelEnable; +AssertCompileSize(VMMDevVideoAccelEnable, 24+12); + +/** @name VMMDevVideoAccelEnable::fu32Status. + * @{ */ +#define VBVA_F_STATUS_ACCEPTED (0x01) +#define VBVA_F_STATUS_ENABLED (0x02) +/** @} */ + + +/** + * VBVA flush request structure. + * + * Used by VMMDevReq_VideoAccelFlush. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevVideoAccelFlush; +AssertCompileSize(VMMDevVideoAccelFlush, 24); + + +/** + * VBVA set visible region request structure. + * + * Used by VMMDevReq_VideoSetVisibleRegion. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Number of rectangles */ + uint32_t cRect; + /** Rectangle array. + * @todo array is spelled aRects[1]. */ + RTRECT Rect; +} VMMDevVideoSetVisibleRegion; +AssertCompileSize(RTRECT, 16); +AssertCompileSize(VMMDevVideoSetVisibleRegion, 24+4+16); + +/** + * CPU event types. + */ +typedef enum +{ + VMMDevCpuStatusType_Invalid = 0, + VMMDevCpuStatusType_Disable = 1, + VMMDevCpuStatusType_Enable = 2, + VMMDevCpuStatusType_SizeHack = 0x7fffffff +} VMMDevCpuStatusType; + +/** + * CPU hotplug event status request. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Status type */ + VMMDevCpuStatusType enmStatusType; +} VMMDevCpuHotPlugStatusRequest; +AssertCompileSize(VMMDevCpuHotPlugStatusRequest, 24+4); + +/** + * Get the ID of the changed CPU and event type. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Event type */ + VMMDevCpuEventType enmEventType; + /** core id of the CPU changed */ + uint32_t idCpuCore; + /** package id of the CPU changed */ + uint32_t idCpuPackage; +} VMMDevGetCpuHotPlugRequest; +AssertCompileSize(VMMDevGetCpuHotPlugRequest, 24+4+4+4); + + +/** + * Shared region description + */ +typedef struct VMMDEVSHAREDREGIONDESC +{ + RTGCPTR64 GCRegionAddr; + uint32_t cbRegion; + uint32_t u32Alignment; +} VMMDEVSHAREDREGIONDESC; +AssertCompileSize(VMMDEVSHAREDREGIONDESC, 16); + +#define VMMDEVSHAREDREGIONDESC_MAX 32 + +/** + * Shared module registration + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Shared module size. */ + uint32_t cbModule; + /** Number of included region descriptors */ + uint32_t cRegions; + /** Base address of the shared module. */ + RTGCPTR64 GCBaseAddr; + /** Guest OS type. */ + VBOXOSFAMILY enmGuestOS; + /** Alignment. */ + uint32_t u32Align; + /** Module name */ + char szName[128]; + /** Module version */ + char szVersion[16]; + /** Shared region descriptor(s). */ + VMMDEVSHAREDREGIONDESC aRegions[1]; +} VMMDevSharedModuleRegistrationRequest; +AssertCompileSize(VMMDevSharedModuleRegistrationRequest, 24+4+4+8+4+4+128+16+16); + + +/** + * Shared module unregistration + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Shared module size. */ + uint32_t cbModule; + /** Align at 8 byte boundary. */ + uint32_t u32Alignment; + /** Base address of the shared module. */ + RTGCPTR64 GCBaseAddr; + /** Module name */ + char szName[128]; + /** Module version */ + char szVersion[16]; +} VMMDevSharedModuleUnregistrationRequest; +AssertCompileSize(VMMDevSharedModuleUnregistrationRequest, 24+4+4+8+128+16); + + +/** + * Shared module periodic check + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevSharedModuleCheckRequest; +AssertCompileSize(VMMDevSharedModuleCheckRequest, 24); + +/** + * Paging sharing enabled query + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Enabled flag (out) */ + bool fEnabled; + /** Alignment */ + bool fAlignment[3]; +} VMMDevPageSharingStatusRequest; +AssertCompileSize(VMMDevPageSharingStatusRequest, 24+4); + + +/** + * Page sharing status query (debug build only) + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Page address. */ + RTGCPTR GCPtrPage; + /** Page flags. */ + uint64_t uPageFlags; + /** Shared flag (out) */ + bool fShared; + /** Alignment */ + bool fAlignment[3]; +} VMMDevPageIsSharedRequest; + +/** + * Session id request structure. + * + * Used by VMMDevReq_GetSessionId. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** OUT: unique session id; the id will be different after each start, reset or restore of the VM */ + uint64_t idSession; +} VMMDevReqSessionId; +AssertCompileSize(VMMDevReqSessionId, 24+8); + + +/** + * Write Core Dump request. + * + * Used by VMMDevReq_WriteCoreDump. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Flags (reserved, MBZ). */ + uint32_t fFlags; +} VMMDevReqWriteCoreDump; +AssertCompileSize(VMMDevReqWriteCoreDump, 24+4); + +/** Heart beat check state structure. + * Used by VMMDevReq_HeartbeatConfigure. */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Guest heartbeat interval in nanosec. */ + uint64_t cNsInterval; + /** Heartbeat check flag. */ + bool fEnabled; +} VMMDevReqHeartbeat; +AssertCompileSize(VMMDevReqHeartbeat, 24+12); + + + +#ifdef VBOX_WITH_HGCM + +/** @name HGCM flags. + * @{ + */ +# define VBOX_HGCM_REQ_DONE RT_BIT_32(VBOX_HGCM_REQ_DONE_BIT) +# define VBOX_HGCM_REQ_DONE_BIT 0 +# define VBOX_HGCM_REQ_CANCELLED (0x2) +/** @} */ + +/** + * HGCM request header. + */ +typedef struct VMMDevHGCMRequestHeader +{ + /** Request header. */ + VMMDevRequestHeader header; + + /** HGCM flags. */ + uint32_t fu32Flags; + + /** Result code. */ + int32_t result; +} VMMDevHGCMRequestHeader; +AssertCompileSize(VMMDevHGCMRequestHeader, 24+8); + +/** + * HGCM connect request structure. + * + * Used by VMMDevReq_HGCMConnect. + */ +typedef struct +{ + /** HGCM request header. */ + VMMDevHGCMRequestHeader header; + + /** IN: Description of service to connect to. */ + HGCMServiceLocation loc; + + /** OUT: Client identifier assigned by local instance of HGCM. */ + uint32_t u32ClientID; +} VMMDevHGCMConnect; +AssertCompileSize(VMMDevHGCMConnect, 32+132+4); + + +/** + * HGCM disconnect request structure. + * + * Used by VMMDevReq_HGCMDisconnect. + */ +typedef struct +{ + /** HGCM request header. */ + VMMDevHGCMRequestHeader header; + + /** IN: Client identifier. */ + uint32_t u32ClientID; +} VMMDevHGCMDisconnect; +AssertCompileSize(VMMDevHGCMDisconnect, 32+4); + +/** + * HGCM call request structure. + * + * Used by VMMDevReq_HGCMCall, VMMDevReq_HGCMCall32 and VMMDevReq_HGCMCall64. + */ +typedef struct +{ + /* request header */ + VMMDevHGCMRequestHeader header; + + /** IN: Client identifier. */ + uint32_t u32ClientID; + /** IN: Service function number. */ + uint32_t u32Function; + /** IN: Number of parameters. */ + uint32_t cParms; + /** Parameters follow in form: HGCMFunctionParameter aParms[X]; */ +} VMMDevHGCMCall; +AssertCompileSize(VMMDevHGCMCall, 32+12); + +/** @name Direction of data transfer (HGCMPageListInfo::flags). Bit flags. + * @{ */ +#define VBOX_HGCM_F_PARM_DIRECTION_NONE UINT32_C(0x00000000) +#define VBOX_HGCM_F_PARM_DIRECTION_TO_HOST UINT32_C(0x00000001) +#define VBOX_HGCM_F_PARM_DIRECTION_FROM_HOST UINT32_C(0x00000002) +#define VBOX_HGCM_F_PARM_DIRECTION_BOTH UINT32_C(0x00000003) +/** Macro for validating that the specified flags are valid. */ +#define VBOX_HGCM_F_PARM_ARE_VALID(fFlags) \ + ( (fFlags) > VBOX_HGCM_F_PARM_DIRECTION_NONE \ + && (fFlags) < VBOX_HGCM_F_PARM_DIRECTION_BOTH ) +/** @} */ + +/** + * VMMDevHGCMParmType_PageList points to this structure to actually describe the + * buffer. + */ +typedef struct +{ + uint32_t flags; /**< VBOX_HGCM_F_PARM_*. */ + uint16_t offFirstPage; /**< Offset in the first page where data begins. */ + uint16_t cPages; /**< Number of pages. */ + RTGCPHYS64 aPages[1]; /**< Page addresses. */ +} HGCMPageListInfo; +AssertCompileSize(HGCMPageListInfo, 4+2+2+8); + + +/** Get the pointer to the first parmater of a HGCM call request. */ +# define VMMDEV_HGCM_CALL_PARMS(a) ((HGCMFunctionParameter *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +/** Get the pointer to the first parmater of a 32-bit HGCM call request. */ +# define VMMDEV_HGCM_CALL_PARMS32(a) ((HGCMFunctionParameter32 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) + +# ifdef VBOX_WITH_64_BITS_GUESTS +/* Explicit defines for the host code. */ +# ifdef VBOX_HGCM_HOST_CODE +# define VMMDEV_HGCM_CALL_PARMS32(a) ((HGCMFunctionParameter32 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +# define VMMDEV_HGCM_CALL_PARMS64(a) ((HGCMFunctionParameter64 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +# endif /* VBOX_HGCM_HOST_CODE */ +# endif /* VBOX_WITH_64_BITS_GUESTS */ + +# define VBOX_HGCM_MAX_PARMS 32 + +/** + * HGCM cancel request structure. + * + * The Cancel request is issued using the same physical memory address as was + * used for the corresponding initial HGCMCall. + * + * Used by VMMDevReq_HGCMCancel. + */ +typedef struct +{ + /** Header. */ + VMMDevHGCMRequestHeader header; +} VMMDevHGCMCancel; +AssertCompileSize(VMMDevHGCMCancel, 32); + +/** + * HGCM cancel request structure, version 2. + * + * Used by VMMDevReq_HGCMCancel2. + * + * VINF_SUCCESS when cancelled. + * VERR_NOT_FOUND if the specified request cannot be found. + * VERR_INVALID_PARAMETER if the address is invalid valid. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The physical address of the request to cancel. */ + RTGCPHYS32 physReqToCancel; +} VMMDevHGCMCancel2; +AssertCompileSize(VMMDevHGCMCancel2, 24+4); + +#endif /* VBOX_WITH_HGCM */ + + +/** + * Inline helper to determine the request size for the given operation. + * Returns 0 if the given operation is not handled and/or supported. + * + * @returns Size. + * @param requestType The VMMDev request type. + */ +DECLINLINE(size_t) vmmdevGetRequestSize(VMMDevRequestType requestType) +{ + switch (requestType) + { + case VMMDevReq_GetMouseStatus: + case VMMDevReq_SetMouseStatus: + return sizeof(VMMDevReqMouseStatus); + case VMMDevReq_SetPointerShape: + return sizeof(VMMDevReqMousePointer); + case VMMDevReq_GetHostVersion: + return sizeof(VMMDevReqHostVersion); + case VMMDevReq_Idle: + return sizeof(VMMDevReqIdle); + case VMMDevReq_GetHostTime: + return sizeof(VMMDevReqHostTime); + case VMMDevReq_GetHypervisorInfo: + case VMMDevReq_SetHypervisorInfo: + return sizeof(VMMDevReqHypervisorInfo); + case VMMDevReq_RegisterPatchMemory: + case VMMDevReq_DeregisterPatchMemory: + return sizeof(VMMDevReqPatchMemory); + case VMMDevReq_SetPowerStatus: + return sizeof(VMMDevPowerStateRequest); + case VMMDevReq_AcknowledgeEvents: + return sizeof(VMMDevEvents); + case VMMDevReq_ReportGuestInfo: + return sizeof(VMMDevReportGuestInfo); + case VMMDevReq_ReportGuestInfo2: + return sizeof(VMMDevReportGuestInfo2); + case VMMDevReq_ReportGuestStatus: + return sizeof(VMMDevReportGuestStatus); + case VMMDevReq_ReportGuestUserState: + return sizeof(VMMDevReportGuestUserState); + case VMMDevReq_GetDisplayChangeRequest: + return sizeof(VMMDevDisplayChangeRequest); + case VMMDevReq_GetDisplayChangeRequest2: + return sizeof(VMMDevDisplayChangeRequest2); + case VMMDevReq_GetDisplayChangeRequestEx: + return sizeof(VMMDevDisplayChangeRequestEx); + case VMMDevReq_VideoModeSupported: + return sizeof(VMMDevVideoModeSupportedRequest); + case VMMDevReq_GetHeightReduction: + return sizeof(VMMDevGetHeightReductionRequest); + case VMMDevReq_ReportGuestCapabilities: + return sizeof(VMMDevReqGuestCapabilities); + case VMMDevReq_SetGuestCapabilities: + return sizeof(VMMDevReqGuestCapabilities2); +#ifdef VBOX_WITH_HGCM + case VMMDevReq_HGCMConnect: + return sizeof(VMMDevHGCMConnect); + case VMMDevReq_HGCMDisconnect: + return sizeof(VMMDevHGCMDisconnect); +#ifdef VBOX_WITH_64_BITS_GUESTS + case VMMDevReq_HGCMCall32: + return sizeof(VMMDevHGCMCall); + case VMMDevReq_HGCMCall64: + return sizeof(VMMDevHGCMCall); +#else + case VMMDevReq_HGCMCall: + return sizeof(VMMDevHGCMCall); +#endif /* VBOX_WITH_64_BITS_GUESTS */ + case VMMDevReq_HGCMCancel: + return sizeof(VMMDevHGCMCancel); +#endif /* VBOX_WITH_HGCM */ + case VMMDevReq_VideoAccelEnable: + return sizeof(VMMDevVideoAccelEnable); + case VMMDevReq_VideoAccelFlush: + return sizeof(VMMDevVideoAccelFlush); + case VMMDevReq_VideoSetVisibleRegion: + /* The original protocol didn't consider a guest with NO visible + * windows */ + return sizeof(VMMDevVideoSetVisibleRegion) - sizeof(RTRECT); + case VMMDevReq_GetSeamlessChangeRequest: + return sizeof(VMMDevSeamlessChangeRequest); + case VMMDevReq_QueryCredentials: + return sizeof(VMMDevCredentials); + case VMMDevReq_ReportGuestStats: + return sizeof(VMMDevReportGuestStats); + case VMMDevReq_GetMemBalloonChangeRequest: + return sizeof(VMMDevGetMemBalloonChangeRequest); + case VMMDevReq_GetStatisticsChangeRequest: + return sizeof(VMMDevGetStatisticsChangeRequest); + case VMMDevReq_ChangeMemBalloon: + return sizeof(VMMDevChangeMemBalloon); + case VMMDevReq_GetVRDPChangeRequest: + return sizeof(VMMDevVRDPChangeRequest); + case VMMDevReq_LogString: + return sizeof(VMMDevReqLogString); + case VMMDevReq_CtlGuestFilterMask: + return sizeof(VMMDevCtlGuestFilterMask); + case VMMDevReq_GetCpuHotPlugRequest: + return sizeof(VMMDevGetCpuHotPlugRequest); + case VMMDevReq_SetCpuHotPlugStatus: + return sizeof(VMMDevCpuHotPlugStatusRequest); + case VMMDevReq_RegisterSharedModule: + return sizeof(VMMDevSharedModuleRegistrationRequest); + case VMMDevReq_UnregisterSharedModule: + return sizeof(VMMDevSharedModuleUnregistrationRequest); + case VMMDevReq_CheckSharedModules: + return sizeof(VMMDevSharedModuleCheckRequest); + case VMMDevReq_GetPageSharingStatus: + return sizeof(VMMDevPageSharingStatusRequest); + case VMMDevReq_DebugIsPageShared: + return sizeof(VMMDevPageIsSharedRequest); + case VMMDevReq_GetSessionId: + return sizeof(VMMDevReqSessionId); + case VMMDevReq_HeartbeatConfigure: + return sizeof(VMMDevReqHeartbeat); + case VMMDevReq_GuestHeartbeat: + return sizeof(VMMDevRequestHeader); + default: + break; + } + + return 0; +} + + +/** + * Initializes a request structure. + * + * @returns VBox status code. + * @param req The request structure to initialize. + * @param type The request type. + */ +DECLINLINE(int) vmmdevInitRequest(VMMDevRequestHeader *req, VMMDevRequestType type) +{ + uint32_t requestSize; + if (!req) + return VERR_INVALID_PARAMETER; + requestSize = (uint32_t)vmmdevGetRequestSize(type); + if (!requestSize) + return VERR_INVALID_PARAMETER; + req->size = requestSize; + req->version = VMMDEV_REQUEST_HEADER_VERSION; + req->requestType = type; + req->rc = VERR_GENERAL_FAILURE; + req->reserved1 = 0; + req->reserved2 = 0; + return VINF_SUCCESS; +} + +/** @} */ + +/** @name VBVA ring defines. + * + * The VBVA ring buffer is suitable for transferring large (< 2GB) amount of + * data. For example big bitmaps which do not fit to the buffer. + * + * Guest starts writing to the buffer by initializing a record entry in the + * aRecords queue. VBVA_F_RECORD_PARTIAL indicates that the record is being + * written. As data is written to the ring buffer, the guest increases off32End + * for the record. + * + * The host reads the aRecords on flushes and processes all completed records. + * When host encounters situation when only a partial record presents and + * cbRecord & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE - + * VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates + * off32Head. After that on each flush the host continues fetching the data + * until the record is completed. + * + */ +#define VMMDEV_VBVA_RING_BUFFER_SIZE (_4M - _1K) +#define VMMDEV_VBVA_RING_BUFFER_THRESHOLD (4 * _1K) + +#define VMMDEV_VBVA_MAX_RECORDS (64) +/** @} */ + +/** + * VBVA record. + */ +typedef struct VMMDEVVBVARECORD +{ + /** The length of the record. Changed by guest. */ + uint32_t cbRecord; +} VMMDEVVBVARECORD; +AssertCompileSize(VMMDEVVBVARECORD, 4); + +#if ARCH_BITS >= 32 + +/** + * VBVA memory layout. + * + * This is a subsection of the VMMDevMemory structure. + */ +typedef struct VBVAMEMORY +{ + /** VBVA_F_MODE_*. */ + uint32_t fu32ModeFlags; + + /** The offset where the data start in the buffer. */ + uint32_t off32Data; + /** The offset where next data must be placed in the buffer. */ + uint32_t off32Free; + + /** The ring buffer for data. */ + uint8_t au8RingBuffer[VMMDEV_VBVA_RING_BUFFER_SIZE]; + + /** The queue of record descriptions. */ + VMMDEVVBVARECORD aRecords[VMMDEV_VBVA_MAX_RECORDS]; + uint32_t indexRecordFirst; + uint32_t indexRecordFree; + + /** RDP orders supported by the client. The guest reports only them + * and falls back to DIRTY rects for not supported ones. + * + * (1 << VBVA_VRDP_*) + */ + uint32_t fu32SupportedOrders; + +} VBVAMEMORY; +AssertCompileSize(VBVAMEMORY, 12 + (_4M-_1K) + 4*64 + 12); + + +/** + * The layout of VMMDEV RAM region that contains information for guest. + */ +typedef struct VMMDevMemory +{ + /** The size of this structure. */ + uint32_t u32Size; + /** The structure version. (VMMDEV_MEMORY_VERSION) */ + uint32_t u32Version; + + union + { + struct + { + /** Flag telling that VMMDev set the IRQ and acknowlegment is required */ + bool fHaveEvents; + } V1_04; + + struct + { + /** Pending events flags, set by host. */ + uint32_t u32HostEvents; + /** Mask of events the guest wants to see, set by guest. */ + uint32_t u32GuestEventMask; + } V1_03; + } V; + + VBVAMEMORY vbvaMemory; + +} VMMDevMemory; +AssertCompileSize(VMMDevMemory, 8+8 + (12 + (_4M-_1K) + 4*64 + 12) ); +AssertCompileMemberOffset(VMMDevMemory, vbvaMemory, 16); + +/** Version of VMMDevMemory structure (VMMDevMemory::u32Version). */ +# define VMMDEV_MEMORY_VERSION (1) + +#endif /* ARCH_BITS >= 32 */ + +/** @} */ + +RT_C_DECLS_END +#pragma pack() + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/VMMDevCoreTypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/VMMDevCoreTypes.h @@ -0,0 +1,516 @@ +/** @file + * Virtual Device for Guest <-> VMM/Host communication, Core Types. (ADD,DEV) + * + * These types are needed by several headers VBoxGuestLib.h and are kept + * separate to avoid having to include the whole VMMDev.h fun. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VMMDevCoreTypes_h +#define ___VBox_VMMDevCoreTypes_h + +#include +#include +#ifdef __cplusplus +# include +#endif + + +/** @addtogroup grp_vmmdev + * @{ + */ + +/* Helpful forward declarations: */ +struct VMMDevRequestHeader; +struct VMMDevReqMousePointer; +struct VMMDevMemory; + + +/** @name VMMDev events. + * + * Used mainly by VMMDevReq_AcknowledgeEvents/VMMDevEvents and version 1.3 of + * VMMDevMemory. + * + * @{ + */ +/** Host mouse capabilities has been changed. */ +#define VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED RT_BIT(0) +/** HGCM event. */ +#define VMMDEV_EVENT_HGCM RT_BIT(1) +/** A display change request has been issued. */ +#define VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST RT_BIT(2) +/** Credentials are available for judgement. */ +#define VMMDEV_EVENT_JUDGE_CREDENTIALS RT_BIT(3) +/** The guest has been restored. */ +#define VMMDEV_EVENT_RESTORED RT_BIT(4) +/** Seamless mode state changed. */ +#define VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST RT_BIT(5) +/** Memory balloon size changed. */ +#define VMMDEV_EVENT_BALLOON_CHANGE_REQUEST RT_BIT(6) +/** Statistics interval changed. */ +#define VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST RT_BIT(7) +/** VRDP status changed. */ +#define VMMDEV_EVENT_VRDP RT_BIT(8) +/** New mouse position data available. */ +#define VMMDEV_EVENT_MOUSE_POSITION_CHANGED RT_BIT(9) +/** CPU hotplug event occurred. */ +#define VMMDEV_EVENT_CPU_HOTPLUG RT_BIT(10) +/** The mask of valid events, for sanity checking. */ +#define VMMDEV_EVENT_VALID_EVENT_MASK UINT32_C(0x000007ff) +/** @} */ + + +/** @name The ballooning chunk size which VMMDev works at. + * @{ */ +#define VMMDEV_MEMORY_BALLOON_CHUNK_PAGES (_1M/4096) +#define VMMDEV_MEMORY_BALLOON_CHUNK_SIZE (VMMDEV_MEMORY_BALLOON_CHUNK_PAGES*4096) +/** @} */ + + +/** + * Seamless mode. + * + * Used by VbglR3SeamlessWaitEvent + * + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDev_Seamless_Disabled = 0, /**< normal mode; entire guest desktop displayed. */ + VMMDev_Seamless_Visible_Region = 1, /**< visible region mode; only top-level guest windows displayed. */ + VMMDev_Seamless_Host_Window = 2, /**< windowed mode; each top-level guest window is represented in a host window. */ + VMMDev_Seamless_SizeHack = 0x7fffffff +} VMMDevSeamlessMode; +AssertCompileSize(VMMDevSeamlessMode, 4); + + +/** + * CPU event types. + * + * Used by VbglR3CpuHotplugWaitForEvent + * + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDevCpuEventType_Invalid = 0, + VMMDevCpuEventType_None = 1, + VMMDevCpuEventType_Plug = 2, + VMMDevCpuEventType_Unplug = 3, + VMMDevCpuEventType_SizeHack = 0x7fffffff +} VMMDevCpuEventType; +AssertCompileSize(VMMDevCpuEventType, 4); + + +/** @name Guest capability bits. + * Used by VMMDevReq_ReportGuestCapabilities and VMMDevReq_SetGuestCapabilities. + * @{ */ +/** The guest supports seamless display rendering. */ +#define VMMDEV_GUEST_SUPPORTS_SEAMLESS RT_BIT_32(0) +/** The guest supports mapping guest to host windows. */ +#define VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING RT_BIT_32(1) +/** The guest graphical additions are active. + * Used for fast activation and deactivation of certain graphical operations + * (e.g. resizing & seamless). The legacy VMMDevReq_ReportGuestCapabilities + * request sets this automatically, but VMMDevReq_SetGuestCapabilities does + * not. */ +#define VMMDEV_GUEST_SUPPORTS_GRAPHICS RT_BIT_32(2) +/** The mask of valid events, for sanity checking. */ +#define VMMDEV_GUEST_CAPABILITIES_MASK UINT32_C(0x00000007) +/** @} */ + + +/** + * The guest facility. + * This needs to be kept in sync with AdditionsFacilityType of the Main API! + */ +typedef enum +{ + VBoxGuestFacilityType_Unknown = 0, + VBoxGuestFacilityType_VBoxGuestDriver = 20, + VBoxGuestFacilityType_AutoLogon = 90, /* VBoxGINA / VBoxCredProv / pam_vbox. */ + VBoxGuestFacilityType_VBoxService = 100, + VBoxGuestFacilityType_VBoxTrayClient = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */ + VBoxGuestFacilityType_Seamless = 1000, + VBoxGuestFacilityType_Graphics = 1100, + VBoxGuestFacilityType_MonitorAttach = 1101, + VBoxGuestFacilityType_All = 0x7ffffffe, + VBoxGuestFacilityType_SizeHack = 0x7fffffff +} VBoxGuestFacilityType; +AssertCompileSize(VBoxGuestFacilityType, 4); + + +/** + * The current guest status of a facility. + * This needs to be kept in sync with AdditionsFacilityStatus of the Main API! + * + * @remarks r=bird: Pretty please, for future types like this, simply do a + * linear allocation without any gaps. This stuff is impossible work + * efficiently with, let alone validate. Applies to the other facility + * enums too. + */ +typedef enum +{ + VBoxGuestFacilityStatus_Inactive = 0, + VBoxGuestFacilityStatus_Paused = 1, + VBoxGuestFacilityStatus_PreInit = 20, + VBoxGuestFacilityStatus_Init = 30, + VBoxGuestFacilityStatus_Active = 50, + VBoxGuestFacilityStatus_Terminating = 100, + VBoxGuestFacilityStatus_Terminated = 101, + VBoxGuestFacilityStatus_Failed = 800, + VBoxGuestFacilityStatus_Unknown = 999, + VBoxGuestFacilityStatus_SizeHack = 0x7fffffff +} VBoxGuestFacilityStatus; +AssertCompileSize(VBoxGuestFacilityStatus, 4); + + +/** + * The current status of specific guest user. + * This needs to be kept in sync with GuestUserState of the Main API! + */ +typedef enum VBoxGuestUserState +{ + VBoxGuestUserState_Unknown = 0, + VBoxGuestUserState_LoggedIn = 1, + VBoxGuestUserState_LoggedOut = 2, + VBoxGuestUserState_Locked = 3, + VBoxGuestUserState_Unlocked = 4, + VBoxGuestUserState_Disabled = 5, + VBoxGuestUserState_Idle = 6, + VBoxGuestUserState_InUse = 7, + VBoxGuestUserState_Created = 8, + VBoxGuestUserState_Deleted = 9, + VBoxGuestUserState_SessionChanged = 10, + VBoxGuestUserState_CredentialsChanged = 11, + VBoxGuestUserState_RoleChanged = 12, + VBoxGuestUserState_GroupAdded = 13, + VBoxGuestUserState_GroupRemoved = 14, + VBoxGuestUserState_Elevated = 15, + VBoxGuestUserState_SizeHack = 0x7fffffff +} VBoxGuestUserState; +AssertCompileSize(VBoxGuestUserState, 4); + + + +/** + * HGCM service location types. + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDevHGCMLoc_Invalid = 0, + VMMDevHGCMLoc_LocalHost = 1, + VMMDevHGCMLoc_LocalHost_Existing = 2, + VMMDevHGCMLoc_SizeHack = 0x7fffffff +} HGCMServiceLocationType; +AssertCompileSize(HGCMServiceLocationType, 4); + +/** + * HGCM host service location. + * @ingroup grp_vmmdev_req + */ +typedef struct +{ + char achName[128]; /**< This is really szName. */ +} HGCMServiceLocationHost; +AssertCompileSize(HGCMServiceLocationHost, 128); + +/** + * HGCM service location. + * @ingroup grp_vmmdev_req + */ +typedef struct HGCMSERVICELOCATION +{ + /** Type of the location. */ + HGCMServiceLocationType type; + + union + { + HGCMServiceLocationHost host; + } u; +} HGCMServiceLocation; +AssertCompileSize(HGCMServiceLocation, 128+4); + + +/** + * HGCM parameter type. + */ +typedef enum +{ + VMMDevHGCMParmType_Invalid = 0, + VMMDevHGCMParmType_32bit = 1, + VMMDevHGCMParmType_64bit = 2, + VMMDevHGCMParmType_PhysAddr = 3, /**< @deprecated Doesn't work, use PageList. */ + VMMDevHGCMParmType_LinAddr = 4, /**< In and Out */ + VMMDevHGCMParmType_LinAddr_In = 5, /**< In (read; host<-guest) */ + VMMDevHGCMParmType_LinAddr_Out = 6, /**< Out (write; host->guest) */ + VMMDevHGCMParmType_LinAddr_Locked = 7, /**< Locked In and Out */ + VMMDevHGCMParmType_LinAddr_Locked_In = 8, /**< Locked In (read; host<-guest) */ + VMMDevHGCMParmType_LinAddr_Locked_Out = 9, /**< Locked Out (write; host->guest) */ + VMMDevHGCMParmType_PageList = 10, /**< Physical addresses of locked pages for a buffer. */ + VMMDevHGCMParmType_SizeHack = 0x7fffffff +} HGCMFunctionParameterType; +AssertCompileSize(HGCMFunctionParameterType, 4); + + +# ifdef VBOX_WITH_64_BITS_GUESTS +/** + * HGCM function parameter, 32-bit client. + */ +# pragma pack(4) /* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64 member of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS32 physAddr; + RTGCPTR32 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t RT_FAR *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t RT_FAR *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void RT_FAR *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (RTGCPTR32)(uintptr_t)pv; + } +# endif /* __cplusplus */ +} HGCMFunctionParameter32; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter32, 4+8); + +/** + * HGCM function parameter, 64-bit client. + */ +# pragma pack(4)/* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64, physAddr and linearAddr members of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS64 physAddr; + RTGCPTR64 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t RT_FAR *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t RT_FAR *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void RT_FAR *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (uintptr_t)pv; + } +# endif /** __cplusplus */ +} HGCMFunctionParameter64; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter64, 4+12); + +/* Redefine the structure type for the guest code. */ +# ifndef VBOX_HGCM_HOST_CODE +# if ARCH_BITS == 64 +# define HGCMFunctionParameter HGCMFunctionParameter64 +# elif ARCH_BITS == 32 || ARCH_BITS == 16 +# define HGCMFunctionParameter HGCMFunctionParameter32 +# else +# error "Unsupported sizeof (void *)" +# endif +# endif /* !VBOX_HGCM_HOST_CODE */ + +# else /* !VBOX_WITH_64_BITS_GUESTS */ + +/** + * HGCM function parameter, 32-bit client. + * + * @todo If this is the same as HGCMFunctionParameter32, why the duplication? + */ +# pragma pack(4) /* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64 member of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS32 physAddr; + RTGCPTR32 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (uintptr_t)pv; + } +# endif /* __cplusplus */ +} HGCMFunctionParameter; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter, 4+8); +# endif /* !VBOX_WITH_64_BITS_GUESTS */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/cdefs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/cdefs.h @@ -0,0 +1,461 @@ +/** @file + * VirtualBox - Common C and C++ definition. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_cdefs_h +#define ___VBox_cdefs_h + +#include + + +/** @defgroup VBox Common Defintions and Macros + * @{ + */ + +/** @def VBOX_WITH_STATISTICS + * When defined all statistics will be included in the build. + * This is enabled by default in all debug builds. + */ +#ifndef VBOX_WITH_STATISTICS +# ifdef DEBUG +# define VBOX_WITH_STATISTICS +# endif +#endif + +/** @def VBOX_STRICT + * Alias for RT_STRICT. + */ +#ifdef RT_STRICT +# ifndef VBOX_STRICT +# define VBOX_STRICT +# endif +#endif + + +/* + * Shut up DOXYGEN warnings and guide it properly thru the code. + */ +#ifdef DOXYGEN_RUNNING +#define VBOX_WITH_STATISTICS +#define VBOX_STRICT +#define IN_DBG +#define IN_DIS +#define IN_INTNET_R0 +#define IN_INTNET_R3 +#define IN_PCIRAW_R0 +#define IN_PCIRAW_R3 +#define IN_REM_R3 +#define IN_SUP_R0 +#define IN_SUP_R3 +#define IN_SUP_RC +#define IN_SUP_STATIC +#define IN_USBLIB +#define IN_VBOXDDU +#define IN_VMM_RC +#define IN_VMM_R0 +#define IN_VMM_R3 +#define IN_VMM_STATIC +#endif + + + + +/** @def VBOXCALL + * The standard calling convention for VBOX interfaces. + */ +#define VBOXCALL RTCALL + + + +/** @def IN_DIS + * Used to indicate whether we're inside the same link module as the + * disassembler. + */ +/** @def DISDECL(type) + * Disassembly export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_DIS) +# ifdef IN_DIS_STATIC +# define DISDECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define DISDECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# define DISDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_DBG + * Used to indicate whether we're inside the same link module as the debugger + * console, gui, and related things (ring-3). + */ +/** @def DBGDECL(type) + * Debugger module export or import declaration. + * Functions declared using this exists only in R3 since the + * debugger modules is R3 only. + * @param type The return type of the function declaration. + */ +#if defined(IN_DBG_R3) || defined(IN_DBG) +# define DBGDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define DBGDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_INTNET_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * Internal Networking Service. + */ +/** @def INTNETR3DECL(type) + * Internal Networking Service export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_INTNET_R3 +# define INTNETR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define INTNETR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_INTNET_R0 + * Used to indicate whether we're inside the same link module as the R0 + * Internal Network Service. + */ +/** @def INTNETR0DECL(type) + * Internal Networking Service export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_INTNET_R0 +# define INTNETR0DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define INTNETR0DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_PCIRAW_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * PCI passthrough support. + */ +/** @def PCIRAWR3DECL(type) + * PCI passthrough export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_PCIRAW_R3 +# define PCIRAWR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define PCIRAWR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_PCIRAW_R0 + * Used to indicate whether we're inside the same link module as the R0 + * PCI passthrough support. + */ +/** @def PCIRAWR0DECL(type) + * PCI passthroug export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_PCIRAW_R0 +# define PCIRAWR0DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define PCIRAWR0DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_REM_R3 + * Used to indicate whether we're inside the same link module as + * the HC Ring-3 Recompiled Execution Manager. + */ +/** @def REMR3DECL(type) + * Recompiled Execution Manager HC Ring-3 export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_REM_R3 +# define REMR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define REMR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_SUP_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * Support Library or not. + */ +/** @def SUPR3DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_R3 +# ifdef IN_SUP_STATIC +# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR3DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# ifdef IN_SUP_STATIC +# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR3DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#endif + +/** @def IN_SUP_R0 + * Used to indicate whether we're inside the same link module as the Ring-0 + * Support Library or not. + */ +/** @def IN_SUP_STATIC + * Used to indicate that the Support Library is built or used as a static + * library. + */ +/** @def SUPR0DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_R0 +# ifdef IN_SUP_STATIC +# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR0DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# ifdef IN_SUP_STATIC +# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR0DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#endif + +/** @def IN_SUP_RC + * Used to indicate whether we're inside the same link module as the RC Support + * Library or not. + */ +/** @def SUPRCDECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_RC +# define SUPRCDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define SUPRCDECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_SUP_R0 + * Used to indicate whether we're inside the same link module as the Ring-0 + * Support Library or not. + */ +/** @def SUPR0DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC) +# define SUPDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define SUPDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_USBLIB + * Used to indicate whether we're inside the same link module as the USBLib. + */ +/** @def USBLIB_DECL + * USBLIB export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_RING0 +# define USBLIB_DECL(type) type VBOXCALL +#elif defined(IN_USBLIB) +# define USBLIB_DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define USBLIB_DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_VMM_STATIC + * Used to indicate that the virtual machine monitor is built or used as a + * static library. + */ +/** @def IN_VMM_R3 + * Used to indicate whether we're inside the same link module as the ring 3 part of the + * virtual machine monitor or not. + */ +/** @def VMMR3DECL + * Ring-3 VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R3 +# ifdef IN_VMM_STATIC +# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define VMMR3DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#elif defined(IN_RING3) +# ifdef IN_VMM_STATIC +# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define VMMR3DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#else +# define VMMR3DECL(type) DECL_INVALID(type) +#endif + +/** @def IN_VMM_R0 + * Used to indicate whether we're inside the same link module as the ring-0 part + * of the virtual machine monitor or not. + */ +/** @def VMMR0DECL + * Ring-0 VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R0 +# define VMMR0DECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RING0) +# define VMMR0DECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMR0DECL(type) DECL_INVALID(type) +#endif + +/** @def IN_VMM_RC + * Used to indicate whether we're inside the same link module as the raw-mode + * context part of the virtual machine monitor or not. + */ +/** @def VMMRCDECL + * Raw-mode context VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_RC +# define VMMRCDECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RC) +# define VMMRCDECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMRCDECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRZDECL + * Ring-0 and Raw-mode context VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMMRZDECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RING0) || defined(IN_RZ) +# define VMMRZDECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMRZDECL(type) DECL_INVALID(type) +#endif + +/** @def VMMDECL + * VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_STATIC +# define VMMDECL(type) DECLHIDDEN(type) VBOXCALL +#elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMMDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define VMMDECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def VMM_INT_DECL + * VMM internal function. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMM_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMM_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMR3_INT_DECL + * VMM internal function, ring-3. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R3 +# define VMMR3_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMR3_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMR0_INT_DECL + * VMM internal function, ring-0. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R0 +# define VMMR0_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMR0_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRC_INT_DECL + * VMM internal function, raw-mode context. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_RC +# define VMMRC_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMRC_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRZ_INT_DECL + * VMM internal function, ring-0 + raw-mode context. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_RC) || defined(IN_VMM_R0) +# define VMMRZ_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMRZ_INT_DECL(type) DECL_INVALID(type) +#endif + + + +/** @def IN_VBOXDDU + * Used to indicate whether we're inside the VBoxDDU shared object. + */ +/** @def VBOXDDU_DECL(type) + * VBoxDDU export or import (ring-3). + * @param type The return type of the function declaration. + */ +#ifdef IN_VBOXDDU +# ifdef IN_VBOXDDU_STATIC +# define VBOXDDU_DECL(type) type +# else +# define VBOXDDU_DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @} */ + + +/** @defgroup grp_devdrv Device Emulations and Drivers + * @{ */ +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/err.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/err.h @@ -0,0 +1,2809 @@ +/** @file + * VirtualBox Status Codes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_err_h +#define ___VBox_err_h + +#include +#include + + +/** @defgroup grp_err VBox Error Codes + * @{ + */ + +/* SED-START */ + +/** @name Misc. Status Codes + * @{ + */ +/** Failed to allocate VM memory. */ +#define VERR_NO_VM_MEMORY (-1000) +/** RC is toasted and the VMM should be terminated at once, but no need to + * panic about it :-) */ +#define VERR_DONT_PANIC (-1001) +/** Unsupported CPU. */ +#define VERR_UNSUPPORTED_CPU (-1002) +/** Unsupported CPU mode. */ +#define VERR_UNSUPPORTED_CPU_MODE (-1003) +/** Page not present. */ +#define VERR_PAGE_NOT_PRESENT (-1004) +/** Invalid/Corrupted configuration file. */ +#define VERR_CFG_INVALID_FORMAT (-1005) +/** No configuration value exists. */ +#define VERR_CFG_NO_VALUE (-1006) +/** Selector not present. */ +#define VERR_SELECTOR_NOT_PRESENT (-1007) +/** Not code selector. */ +#define VERR_NOT_CODE_SELECTOR (-1008) +/** Not data selector. */ +#define VERR_NOT_DATA_SELECTOR (-1009) +/** Out of selector bounds. */ +#define VERR_OUT_OF_SELECTOR_BOUNDS (-1010) +/** Invalid selector. Usually beyond table limits. */ +#define VERR_INVALID_SELECTOR (-1011) +/** Invalid requested privilege level. */ +#define VERR_INVALID_RPL (-1012) +/** PML4 entry not present. */ +#define VERR_PAGE_MAP_LEVEL4_NOT_PRESENT (-1013) +/** Page directory pointer not present. */ +#define VERR_PAGE_DIRECTORY_PTR_NOT_PRESENT (-1014) +/** Raw mode doesn't support SMP. */ +#define VERR_RAW_MODE_INVALID_SMP (-1015) +/** Invalid VM handle. */ +#define VERR_INVALID_VM_HANDLE (-1016) +/** Invalid VM handle. */ +#define VERR_INVALID_VMCPU_HANDLE (-1017) +/** Invalid Virtual CPU ID. */ +#define VERR_INVALID_CPU_ID (-1018) +/** Too many VCPUs. */ +#define VERR_TOO_MANY_CPUS (-1019) +/** The service was disabled on the host. + * Returned by pfnInit in VBoxService to indicated a non-fatal error that + * should results in the particular service being disabled. */ +#define VERR_SERVICE_DISABLED (-1020) +/** The requested feature is not supported in raw-mode. */ +#define VERR_NOT_SUP_IN_RAW_MODE (-1021) +/** Invalid CPU index. */ +#define VERR_INVALID_CPU_INDEX (-1022) +/** This VirtualBox build does not support raw-mode. */ +#define VERR_RAW_MODE_NOT_SUPPORTED (-1023) +/** Essential fields in the shared VM structure doesn't match the global one. */ +#define VERR_INCONSISTENT_VM_HANDLE (-1024) +/** @} */ + + +/** @name Execution Monitor/Manager (EM) Status Codes + * + * The order of the status codes between VINF_EM_FIRST and VINF_EM_LAST + * are of vital importance. The lower the number the higher importance + * as a scheduling instruction. + * @{ + */ +/** First scheduling related status code. */ +#define VINF_EM_FIRST 1100 +/** Indicating that the VM is being terminated and that the execution + * shall stop. */ +#define VINF_EM_TERMINATE 1100 +/** Hypervisor code was stepped. + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_STEPPED 1101 +/** Hit a breakpoint in the hypervisor code, + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_BREAKPOINT 1102 +/** Hit a possible assertion in the hypervisor code, + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_ASSERTION 1103 +/** Generic debug event, suspend the VM for debugging. */ +#define VINF_EM_DBG_EVENT 1104 +/** Indicating that the VM should be suspended for debugging because + * the developer wants to inspect the VM state. */ +#define VINF_EM_DBG_STOP 1105 +/** Indicating success single stepping and that EM should report that + * event to the debugger. */ +#define VINF_EM_DBG_STEPPED 1106 +/** Indicating that a breakpoint was hit and that EM should notify the debugger + * and in the event there is no debugger fail fatally. */ +#define VINF_EM_DBG_BREAKPOINT 1107 +/** Indicating that EM should single step an instruction. + * The instruction is stepped in the current execution mode (RAW/REM). */ +#define VINF_EM_DBG_STEP 1108 +/** Indicating that the VM is being turned off and that the EM should + * exit to the VM awaiting the destruction request. */ +#define VINF_EM_OFF 1109 +/** Indicating that the VM has been suspended and that the thread + * should wait for request telling it what to do next. */ +#define VINF_EM_SUSPEND 1110 +/** Indicating that the VM has been reset and that scheduling goes + * back to startup defaults. */ +#define VINF_EM_RESET 1111 +/** Indicating that the VM has executed a halt instruction and that + * the emulation thread should wait for an interrupt before resuming + * execution. */ +#define VINF_EM_HALT 1112 +/** Indicating that the VM has been resumed and that the thread should + * start executing. */ +#define VINF_EM_RESUME 1113 +/** Indicating that we've got an out-of-memory condition and that we need + * to take the appropriate actions to deal with this. + * @remarks It might seem odd at first that this has lower priority than VINF_EM_HALT, + * VINF_EM_SUSPEND, and VINF_EM_RESUME. The reason is that these events are + * vital to correctly operating the VM. Also, they can't normally occur together + * with an out-of-memory condition, and even if that should happen the condition + * will be rediscovered before executing any more code. */ +#define VINF_EM_NO_MEMORY 1114 +/** The fatal variant of VINF_EM_NO_MEMORY. */ +#define VERR_EM_NO_MEMORY (-1114) +/** Indicating that a rescheduling to recompiled execution. + * Typically caused by raw-mode executing code which is difficult/slow + * to virtualize rawly. + * @remarks Important to have a higher priority (lower number) than the other rescheduling status codes. */ +#define VINF_EM_RESCHEDULE_REM 1115 +/** Indicating that a rescheduling to vmx-mode execution. + * Typically caused by REM detecting that hardware-accelerated raw-mode execution is possible. */ +#define VINF_EM_RESCHEDULE_HM 1116 +/** Indicating that a rescheduling to raw-mode execution. + * Typically caused by REM detecting that raw-mode execution is possible. + * @remarks Important to have a higher priority (lower number) than VINF_EM_RESCHEDULE. */ +#define VINF_EM_RESCHEDULE_RAW 1117 +/** Indicating that a rescheduling now is required. Typically caused by + * interrupts having changed the EIP. */ +#define VINF_EM_RESCHEDULE 1118 +/** PARAV call */ +#define VINF_EM_RESCHEDULE_PARAV 1119 +/** Go back into wait for SIPI mode */ +#define VINF_EM_WAIT_SIPI 1120 +/** Last scheduling related status code. (inclusive) */ +#define VINF_EM_LAST 1120 + +/** Reason for leaving RC: Guest trap which couldn't be handled in RC. + * The trap is generally forwarded to the REM and executed there. */ +#define VINF_EM_RAW_GUEST_TRAP 1121 +/** Reason for leaving RC: Interrupted by external interrupt. + * The interrupt needed to be handled by the host OS. */ +#define VINF_EM_RAW_INTERRUPT 1122 +/** Reason for leaving RC: Interrupted by external interrupt while in hypervisor + * code. The interrupt needed to be handled by the host OS and hypervisor + * execution must be resumed. VM state is not complete at this point. */ +#define VINF_EM_RAW_INTERRUPT_HYPER 1123 +/** Reason for leaving RC: A Ring switch was attempted. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_RING_SWITCH 1124 +/** Reason for leaving RC: A Ring switch was attempted using software interrupt. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_RING_SWITCH_INT 1125 +/** Reason for leaving RC: A privileged instruction was attempted executed. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_EXCEPTION_PRIVILEGED 1126 + +/** Reason for leaving RZ: Emulate instruction. */ +#define VINF_EM_RAW_EMULATE_INSTR 1127 +/** Reason for leaving RC: Unhandled TSS write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_TSS_FAULT 1128 +/** Reason for leaving RC: Unhandled LDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_LDT_FAULT 1129 +/** Reason for leaving RC: Unhandled IDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_IDT_FAULT 1130 +/** Reason for leaving RC: Partly handled GDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_GDT_FAULT 1131 +/** Reason for leaving RC: jump inside generated patch jump. + * Fatal error. */ +#define VERR_EM_RAW_PATCH_CONFLICT (-1133) +/** Reason for leaving RZ: Ring-3 operation pending. */ +#define VINF_EM_RAW_TO_R3 1135 +/** Reason for leaving RZ: Timer pending. */ +#define VINF_EM_RAW_TIMER_PENDING 1136 +/** Reason for leaving RC: Interrupt pending (guest). */ +#define VINF_EM_RAW_INTERRUPT_PENDING 1137 +/** Reason for leaving RC: Encountered a stale selector. */ +#define VINF_EM_RAW_STALE_SELECTOR 1138 +/** Reason for leaving RC: The IRET resuming guest code trapped. */ +#define VINF_EM_RAW_IRET_TRAP 1139 +/** Reason for leaving RC: Emulate (MM)IO intensive code in the recompiler. */ +#define VINF_EM_RAW_EMULATE_IO_BLOCK 1140 +/** The interpreter was unable to deal with the instruction at hand. */ +#define VERR_EM_INTERPRETER (-1148) +/** Internal EM error caused by an unknown warning or informational status code. */ +#define VERR_EM_INTERNAL_ERROR (-1149) +/** Pending VM request packet. */ +#define VINF_EM_PENDING_REQUEST 1150 +/** Start instruction stepping (debug only). */ +#define VINF_EM_RAW_EMULATE_DBG_STEP 1151 +/** Patch TPR access instruction. */ +#define VINF_EM_HM_PATCH_TPR_INSTR 1152 +/** Unexpected guest mapping conflict detected. */ +#define VERR_EM_UNEXPECTED_MAPPING_CONFLICT (-1154) +/** Reason for leaving RC: A triple-fault condition. Currently, causes + * a guru meditation. */ +#define VINF_EM_TRIPLE_FAULT 1155 +/** The specified execution engine cannot execute guest code in the current + * state. */ +#define VERR_EM_CANNOT_EXEC_GUEST (-1156) +/** Reason for leaving RC: Inject a TRPM event. */ +#define VINF_EM_RAW_INJECT_TRPM_EVENT 1157 +/** Guest tried to trigger a CPU hang. The guest is probably up to no good. */ +#define VERR_EM_GUEST_CPU_HANG (-1158) +/** @} */ + + +/** @name Debugging Facility (DBGF) DBGF Status Codes + * @{ + */ +/** The function called requires the caller to be attached as a + * debugger to the VM. */ +#define VERR_DBGF_NOT_ATTACHED (-1200) +/** Someone (including the caller) was already attached as + * debugger to the VM. */ +#define VERR_DBGF_ALREADY_ATTACHED (-1201) +/** Tried to halt a debugger which was already halted. + * (This is a warning and not an error.) */ +#define VWRN_DBGF_ALREADY_HALTED 1202 +/** The DBGF has no more free breakpoint slots. */ +#define VERR_DBGF_NO_MORE_BP_SLOTS (-1203) +/** The DBGF couldn't find the specified breakpoint. */ +#define VERR_DBGF_BP_NOT_FOUND (-1204) +/** Attempted to enabled a breakpoint which was already enabled. */ +#define VINF_DBGF_BP_ALREADY_ENABLED 1205 +/** Attempted to disabled a breakpoint which was already disabled. */ +#define VINF_DBGF_BP_ALREADY_DISABLED 1206 +/** The breakpoint already exists. */ +#define VINF_DBGF_BP_ALREADY_EXIST 1207 +/** The byte string was not found. */ +#define VERR_DBGF_MEM_NOT_FOUND (-1208) +/** The OS was not detected. */ +#define VERR_DBGF_OS_NOT_DETCTED (-1209) +/** The OS was not detected. */ +#define VINF_DBGF_OS_NOT_DETCTED 1209 +/** The specified register was not found. */ +#define VERR_DBGF_REGISTER_NOT_FOUND (-1210) +/** The value was truncated to fit. + * For queries this means that the register is wider than the queried value. + * For setters this means that the value is wider than the register. */ +#define VINF_DBGF_TRUNCATED_REGISTER 1211 +/** The value was zero extended to fit. + * For queries this means that the register is narrower than the queried value. + * For setters this means that the value is narrower than the register. */ +#define VINF_DBGF_ZERO_EXTENDED_REGISTER 1212 +/** The requested type conversion was not supported. */ +#define VERR_DBGF_UNSUPPORTED_CAST (-1213) +/** The register is read-only and cannot be modified. */ +#define VERR_DBGF_READ_ONLY_REGISTER (-1214) +/** Internal processing error \#1 in the DBGF register code. */ +#define VERR_DBGF_REG_IPE_1 (-1215) +/** Internal processing error \#2 in the DBGF register code. */ +#define VERR_DBGF_REG_IPE_2 (-1216) +/** Unhandled \#DB in hypervisor code. */ +#define VERR_DBGF_HYPER_DB_XCPT (-1217) +/** Internal processing error \#1 in the DBGF stack code. */ +#define VERR_DBGF_STACK_IPE_1 (-1218) +/** Internal processing error \#2 in the DBGF stack code. */ +#define VERR_DBGF_STACK_IPE_2 (-1219) +/** No trace buffer available, please change the VM config. */ +#define VERR_DBGF_NO_TRACE_BUFFER (-1220) +/** @} */ + + +/** @name Patch Manager (PATM) Status Codes + * @{ + */ +/** Non fatal Patch Manager analysis phase warning */ +#define VWRN_CONTINUE_ANALYSIS 1400 +/** Non fatal Patch Manager recompile phase warning (mapped to VWRN_CONTINUE_ANALYSIS). */ +#define VWRN_CONTINUE_RECOMPILE VWRN_CONTINUE_ANALYSIS +/** Continue search (mapped to VWRN_CONTINUE_ANALYSIS). */ +#define VWRN_PATM_CONTINUE_SEARCH VWRN_CONTINUE_ANALYSIS +/** Patch installation refused (patch too complex or unsupported instructions ) */ +#define VERR_PATCHING_REFUSED (-1401) +/** Unable to find patch */ +#define VERR_PATCH_NOT_FOUND (-1402) +/** Patch disabled */ +#define VERR_PATCH_DISABLED (-1403) +/** Patch enabled */ +#define VWRN_PATCH_ENABLED 1404 +/** Patch was already disabled */ +#define VERR_PATCH_ALREADY_DISABLED (-1405) +/** Patch was already enabled */ +#define VERR_PATCH_ALREADY_ENABLED (-1406) +/** Patch was removed. */ +#define VWRN_PATCH_REMOVED 1407 + +/** Reason for leaving RC: \#GP with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_TRAP_GP 1408 +/** First leave RC code. */ +#define VINF_PATM_LEAVE_RC_FIRST VINF_PATM_PATCH_TRAP_GP +/** Reason for leaving RC: \#PF with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_TRAP_PF 1409 +/** Reason for leaving RC: int3 with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_INT3 1410 +/** Reason for leaving RC: \#PF for monitored patch page. */ +#define VINF_PATM_CHECK_PATCH_PAGE 1411 +/** Reason for leaving RC: duplicate instruction called at current eip. */ +#define VINF_PATM_DUPLICATE_FUNCTION 1412 +/** Execute one instruction with the recompiler */ +#define VINF_PATCH_EMULATE_INSTR 1413 +/** Reason for leaving RC: attempt to patch MMIO write. */ +#define VINF_PATM_HC_MMIO_PATCH_WRITE 1414 +/** Reason for leaving RC: attempt to patch MMIO read. */ +#define VINF_PATM_HC_MMIO_PATCH_READ 1415 +/** Reason for leaving RC: pending irq after iret that sets IF. */ +#define VINF_PATM_PENDING_IRQ_AFTER_IRET 1416 +/** Last leave RC code. */ +#define VINF_PATM_LEAVE_RC_LAST VINF_PATM_PENDING_IRQ_AFTER_IRET + +/** No conflicts to resolve */ +#define VERR_PATCH_NO_CONFLICT (-1425) +/** Detected unsafe code for patching */ +#define VERR_PATM_UNSAFE_CODE (-1426) +/** Terminate search branch */ +#define VWRN_PATCH_END_BRANCH 1427 +/** Already patched */ +#define VERR_PATM_ALREADY_PATCHED (-1428) +/** Spinlock detection failed. */ +#define VINF_PATM_SPINLOCK_FAILED (1429) +/** Continue execution after patch trap. */ +#define VINF_PATCH_CONTINUE (1430) +/** The patch manager is not used because we're using HM and VT-x/AMD-V. */ +#define VERR_PATM_HM_IPE (-1431) +/** Unexpected trap in patch code. */ +#define VERR_PATM_IPE_TRAP_IN_PATCH_CODE (-1432) + +/** @} */ + + +/** @name Code Scanning and Analysis Manager (CSAM) Status Codes + * @{ + */ +/** Trap not handled */ +#define VWRN_CSAM_TRAP_NOT_HANDLED 1500 +/** Patch installed */ +#define VWRN_CSAM_INSTRUCTION_PATCHED 1501 +/** Page record not found */ +#define VWRN_CSAM_PAGE_NOT_FOUND 1502 +/** Reason for leaving RC: CSAM wants perform a task in ring-3. */ +#define VINF_CSAM_PENDING_ACTION 1503 +/** The CSAM is not used because we're using HM and VT-x/AMD-V. */ +#define VERR_CSAM_HM_IPE (-1504) +/** @} */ + + +/** @name Page Monitor/Manager (PGM) Status Codes + * @{ + */ +/** Attempt to create a GC mapping which conflicts with an existing mapping. */ +#define VERR_PGM_MAPPING_CONFLICT (-1600) +/** The physical handler range has no corresponding RAM range. + * If this is MMIO, see todo above the return. If not MMIO, then it's + * someone else's fault... */ +#define VERR_PGM_HANDLER_PHYSICAL_NO_RAM_RANGE (-1601) +/** Attempt to register an access handler for a virtual range of which a part + * was already handled. */ +#define VERR_PGM_HANDLER_VIRTUAL_CONFLICT (-1602) +/** Attempt to register an access handler for a physical range of which a part + * was already handled. */ +#define VERR_PGM_HANDLER_PHYSICAL_CONFLICT (-1603) +/** Invalid page directory specified to PGM. */ +#define VERR_PGM_INVALID_PAGE_DIRECTORY (-1604) +/** Invalid GC physical address. */ +#define VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS (-1605) +/** Invalid GC physical range. Usually used when a specified range crosses + * a RAM region boundary. */ +#define VERR_PGM_INVALID_GC_PHYSICAL_RANGE (-1606) +/** Specified access handler was not found. */ +#define VERR_PGM_HANDLER_NOT_FOUND (-1607) +/** Attempt to register a RAM range of which parts are already + * covered by existing RAM ranges. */ +#define VERR_PGM_RAM_CONFLICT (-1608) +/** Failed to add new mappings because the current mappings are fixed + * in guest os memory. */ +#define VERR_PGM_MAPPINGS_FIXED (-1609) +/** Failed to fix mappings because of a conflict with the intermediate code. */ +#define VERR_PGM_MAPPINGS_FIX_CONFLICT (-1610) +/** Failed to fix mappings because a mapping rejected the address. */ +#define VERR_PGM_MAPPINGS_FIX_REJECTED (-1611) +/** Failed to fix mappings because the proposed memory area was to small. */ +#define VERR_PGM_MAPPINGS_FIX_TOO_SMALL (-1612) +/** Reason for leaving RZ: The urge to syncing CR3. */ +#define VINF_PGM_SYNC_CR3 1613 +/** Page not marked for dirty bit tracking */ +#define VINF_PGM_NO_DIRTY_BIT_TRACKING 1614 +/** Page fault caused by dirty bit tracking; corrected */ +#define VINF_PGM_HANDLED_DIRTY_BIT_FAULT 1615 +/** Go ahead with the default Read/Write operation. + * This is returned by a R3 physical or virtual handler when it wants the + * PGMPhys[Read|Write] routine do the reading/writing. */ +#define VINF_PGM_HANDLER_DO_DEFAULT 1616 +/** The paging mode of the host is not supported yet. */ +#define VERR_PGM_UNSUPPORTED_HOST_PAGING_MODE (-1617) +/** The physical guest page is a reserved/MMIO page and does not have any HC + * address. */ +#define VERR_PGM_PHYS_PAGE_RESERVED (-1618) +/** No page directory available for the hypervisor. */ +#define VERR_PGM_NO_HYPERVISOR_ADDRESS (-1619) +/** The shadow page pool was flushed. + * This means that a global CR3 sync was flagged. Anyone receiving this kind of status + * will have to get down to a SyncCR3 ASAP. See also VINF_PGM_SYNC_CR3. */ +#define VERR_PGM_POOL_FLUSHED (-1620) +/** The shadow page pool was cleared. + * This is a error code internal to the shadow page pool, it will be + * converted to a VERR_PGM_POOL_FLUSHED before leaving the pool code. */ +#define VERR_PGM_POOL_CLEARED (-1621) +/** The returned shadow page is cached. */ +#define VINF_PGM_CACHED_PAGE 1622 +/** Returned by handler registration, modification and deregistration + * when the shadow PTs could be updated because the guest page + * aliased or/and mapped by multiple PTs. */ +#define VINF_PGM_GCPHYS_ALIASED 1623 +/** Reason for leaving RC: Paging mode changed. + * PGMChangeMode() uses this to force a switch to R3 so it can safely deal with + * a mode switch. */ +#define VINF_PGM_CHANGE_MODE 1624 +/** SyncPage modified the PDE. + * This is an internal status code used to communicate back to the \#PF handler + * that the PDE was (probably) marked not-present and it should restart the instruction. */ +#define VINF_PGM_SYNCPAGE_MODIFIED_PDE 1625 +/** Physical range crosses dynamic ram chunk boundary; translation to HC ptr not safe. */ +#define VERR_PGM_GCPHYS_RANGE_CROSSES_BOUNDARY (-1626) +/** Conflict between the core memory and the intermediate paging context, try again. + * There are some very special conditions applying to the intermediate paging context + * (used during the world switches), and some times we continuously run into these + * when asking the host kernel for memory during VM init. Let us know if you run into + * this and we'll adjust the code so it tries harder to avoid it. + */ +#define VERR_PGM_INTERMEDIATE_PAGING_CONFLICT (-1627) +/** The shadow paging mode is not supported yet. */ +#define VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE (-1628) +/** The dynamic mapping cache for physical memory failed. */ +#define VERR_PGM_DYNMAP_FAILED (-1629) +/** The auto usage cache for the dynamic mapping set is full. */ +#define VERR_PGM_DYNMAP_FULL_SET (-1630) +/** The initialization of the dynamic mapping cache failed. */ +#define VERR_PGM_DYNMAP_SETUP_ERROR (-1631) +/** The expanding of the dynamic mapping cache failed. */ +#define VERR_PGM_DYNMAP_EXPAND_ERROR (-1632) +/** The page is unassigned (akin to VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS). */ +#define VERR_PGM_PHYS_TLB_UNASSIGNED (-1633) +/** Catch any access and route it thru PGM. */ +#define VERR_PGM_PHYS_TLB_CATCH_ALL (-1634) +/** Catch write access and route it thru PGM. */ +#define VINF_PGM_PHYS_TLB_CATCH_WRITE 1635 +/** Catch write access and route it thru PGM. */ +#define VERR_PGM_PHYS_TLB_CATCH_WRITE (-1635) +/** No CR3 root shadow page table. */ +#define VERR_PGM_NO_CR3_SHADOW_ROOT (-1636) +/** Trying to free a page with an invalid Page ID. */ +#define VERR_PGM_PHYS_INVALID_PAGE_ID (-1637) +/** PGMPhysWrite/Read hit a handler in Ring-0 or raw-mode context. */ +#define VERR_PGM_PHYS_WR_HIT_HANDLER (-1638) +/** Trying to free a page that isn't RAM. */ +#define VERR_PGM_PHYS_NOT_RAM (-1639) +/** Not ROM page. */ +#define VERR_PGM_PHYS_NOT_ROM (-1640) +/** Not MMIO page. */ +#define VERR_PGM_PHYS_NOT_MMIO (-1641) +/** Not MMIO2 page. */ +#define VERR_PGM_PHYS_NOT_MMIO2 (-1642) +/** Already aliased to a different page. */ +#define VERR_PGM_HANDLER_ALREADY_ALIASED (-1643) +/** Already aliased to the same page. */ +#define VINF_PGM_HANDLER_ALREADY_ALIASED (1643) +/** PGM pool flush pending - return to ring 3. */ +#define VINF_PGM_POOL_FLUSH_PENDING (1644) +/** Unable to use the range for a large page. */ +#define VERR_PGM_INVALID_LARGE_PAGE_RANGE (-1645) +/** Don't mess around with ballooned pages. */ +#define VERR_PGM_PHYS_PAGE_BALLOONED (-1646) +/** Internal processing error \#1 in page access handler code. */ +#define VERR_PGM_HANDLER_IPE_1 (-1647) + + +/** pgmPhysPageMapCommon encountered PGMPAGETYPE_MMIO2_ALIAS_MMIO. */ +#define VERR_PGM_MAP_MMIO2_ALIAS_MMIO (-1651) +/** Guest mappings are disabled. */ +#define VERR_PGM_MAPPINGS_DISABLED (-1652) +/** No guest mappings when SMP is enabled. */ +#define VERR_PGM_MAPPINGS_SMP (-1653) +/** Invalid saved page state. */ +#define VERR_PGM_INVALID_SAVED_PAGE_STATE (-1654) +/** Encountered an unexpected page type in the saved state. */ +#define VERR_PGM_LOAD_UNEXPECTED_PAGE_TYPE (-1655) +/** Encountered an unexpected page state in the saved state. */ +#define VERR_PGM_UNEXPECTED_PAGE_STATE (-1656) +/** Couldn't find MMIO2 range from saved state. */ +#define VERR_PGM_SAVED_MMIO2_RANGE_NOT_FOUND (-1657) +/** Couldn't find MMIO2 page from saved state. */ +#define VERR_PGM_SAVED_MMIO2_PAGE_NOT_FOUND (-1658) +/** Couldn't find ROM range from saved state. */ +#define VERR_PGM_SAVED_ROM_RANGE_NOT_FOUND (-1659) +/** Couldn't find ROM page from saved state. */ +#define VERR_PGM_SAVED_ROM_PAGE_NOT_FOUND (-1660) +/** ROM page mismatch between saved state and the VM. */ +#define VERR_PGM_SAVED_ROM_PAGE_PROT (-1661) +/** Unknown saved state record. */ +#define VERR_PGM_SAVED_REC_TYPE (-1662) +/** Internal processing error in the PGM dynmap (r0/rc). */ +#define VERR_PGM_DYNMAP_IPE (-1663) +/** Internal processing error in the PGM handy page allocator. */ +#define VERR_PGM_HANDY_PAGE_IPE (-1664) +/** Failed to map the guest PML4. */ +#define VERR_PGM_PML4_MAPPING (-1665) +/** Failed to obtain a pool page. */ +#define VERR_PGM_POOL_GET_PAGE_FAILED (-1666) +/** A PGM function was called in a mode where it isn't supposed to be used. */ +#define VERR_PGM_NOT_USED_IN_MODE (-1667) +/** The CR3 address specified memory we don't know about. */ +#define VERR_PGM_INVALID_CR3_ADDR (-1668) +/** One or the PDPEs specified memory we don't know about. */ +#define VERR_PGM_INVALID_PDPE_ADDR (-1669) +/** Internal processing error in the PGM physical handler code. */ +#define VERR_PGM_PHYS_HANDLER_IPE (-1670) +/** Internal processing error \#1 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_1 (-1671) +/** Internal processing error \#2 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_2 (-1672) +/** Internal processing error \#3 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_3 (-1673) +/** Internal processing error \#4 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_4 (-1674) +/** Too many loops looking for a page to reuse. */ +#define VERR_PGM_POOL_TOO_MANY_LOOPS (-1675) +/** Internal processing error related to guest mappings. */ +#define VERR_PGM_MAPPING_IPE (-1676) +/** An attempt was made to grow an already maxed out page pool. */ +#define VERR_PGM_POOL_MAXED_OUT_ALREADY (-1677) +/** Internal processing error in the page pool code. */ +#define VERR_PGM_POOL_IPE (-1678) +/** The write monitor is already engaged. */ +#define VERR_PGM_WRITE_MONITOR_ENGAGED (-1679) +/** Failed to get a guest page which is expected to be present. */ +#define VERR_PGM_PHYS_PAGE_GET_IPE (-1680) +/** We were given a NULL pPage parameter. */ +#define VERR_PGM_PHYS_NULL_PAGE_PARAM (-1681) +/** PCI passthru is not supported by this build. */ +#define VERR_PGM_PCI_PASSTHRU_MISCONFIG (-1682) +/** Too many MMIO2 ranges. */ +#define VERR_PGM_TOO_MANY_MMIO2_RANGES (-1683) +/** Internal processing error in the PGM physical page mapping code dealing + * with MMIO2 pages. */ +#define VERR_PGM_PHYS_PAGE_MAP_MMIO2_IPE (-1684) +/** Internal processing error in the PGM physcal page handling code related to + * MMIO/MMIO2. */ +#define VERR_PGM_PHYS_MMIO_EX_IPE (-1685) +/** @} */ + + +/** @name Memory Monitor (MM) Status Codes + * @{ + */ +/** Attempt to register a RAM range of which parts are already + * covered by existing RAM ranges. */ +#define VERR_MM_RAM_CONFLICT (-1700) +/** Hypervisor memory allocation failed. */ +#define VERR_MM_HYPER_NO_MEMORY (-1701) +/** A bad trap type ended up in mmGCRamTrap0eHandler. */ +#define VERR_MM_BAD_TRAP_TYPE_IPE (-1702) +/** @} */ + + +/** @name CPU Monitor (CPUM) Status Codes + * @{ + */ +/** The caller shall raise an \#GP(0) exception. */ +#define VERR_CPUM_RAISE_GP_0 (-1750) +/** Incompatible CPUM configuration. */ +#define VERR_CPUM_INCOMPATIBLE_CONFIG (-1751) +/** CPUMR3DisasmInstrCPU unexpectedly failed to determine the hidden + * parts of the CS register. */ +#define VERR_CPUM_HIDDEN_CS_LOAD_ERROR (-1752) +/** Couldn't find the end of CPUID sub-leaves. */ +#define VERR_CPUM_TOO_MANY_CPUID_SUBLEAVES (-1753) +/** CPUM internal processing error \#1. */ +#define VERR_CPUM_IPE_1 (-1754) +/** CPUM internal processing error \#2. */ +#define VERR_CPUM_IPE_2 (-1755) +/** The specified CPU cannot be found in the CPU database. */ +#define VERR_CPUM_DB_CPU_NOT_FOUND (-1756) +/** Invalid CPUMCPU offset in MSR range. */ +#define VERR_CPUM_MSR_BAD_CPUMCPU_OFFSET (-1757) +/** Return to ring-3 to read the MSR there. */ +#define VINF_CPUM_R3_MSR_READ (1758) +/** Return to ring-3 to write the MSR there. */ +#define VINF_CPUM_R3_MSR_WRITE (1759) +/** Too many CPUID leaves. */ +#define VERR_TOO_MANY_CPUID_LEAVES (-1760) +/** Invalid config value. */ +#define VERR_CPUM_INVALID_CONFIG_VALUE (-1761) +/** The loaded XSAVE component mask is not compatible with the host CPU + * or/and VM config. */ +#define VERR_CPUM_INCOMPATIBLE_XSAVE_COMP_MASK (-1762) +/** The loaded XSAVE component mask is not valid. */ +#define VERR_CPUM_INVALID_XSAVE_COMP_MASK (-1763) +/** The loaded XSAVE header is not valid. */ +#define VERR_CPUM_INVALID_XSAVE_HDR (-1764) +/** The loaded XCR0 register value is not valid. */ +#define VERR_CPUM_INVALID_XCR0 (-1765) +/** Indicates that we modified the host CR0 (FPU related). */ +#define VINF_CPUM_HOST_CR0_MODIFIED (1766) +/** @} */ + + +/** @name Save State Manager (SSM) Status Codes + * @{ + */ +/** The specified data unit already exist. */ +#define VERR_SSM_UNIT_EXISTS (-1800) +/** The specified data unit wasn't found. */ +#define VERR_SSM_UNIT_NOT_FOUND (-1801) +/** The specified data unit wasn't owned by caller. */ +#define VERR_SSM_UNIT_NOT_OWNER (-1802) + +/** General saved state file integrity error. */ +#define VERR_SSM_INTEGRITY (-1810) +/** The saved state file magic was not recognized. */ +#define VERR_SSM_INTEGRITY_MAGIC (-1811) +/** The saved state file version is not supported. */ +#define VERR_SSM_INTEGRITY_VERSION (-1812) +/** The saved state file size didn't match the one in the header. */ +#define VERR_SSM_INTEGRITY_SIZE (-1813) +/** The CRC of the saved state file did not match. */ +#define VERR_SSM_INTEGRITY_CRC (-1814) +/** The machine uuid field wasn't null. */ +#define VERR_SMM_INTEGRITY_MACHINE (-1815) +/** Saved state header integrity error. */ +#define VERR_SSM_INTEGRITY_HEADER (-1816) +/** Unit header integrity error. */ +#define VERR_SSM_INTEGRITY_UNIT (-1817) +/** Invalid unit magic (internal data tag). */ +#define VERR_SSM_INTEGRITY_UNIT_MAGIC (-1818) +/** The file contained a data unit which no-one wants. */ +#define VERR_SSM_INTEGRITY_UNIT_NOT_FOUND (-1819) +/** Incorrect version numbers in the header. */ +#define VERR_SSM_INTEGRITY_VBOX_VERSION (-1820) +/** Footer integrity error. */ +#define VERR_SSM_INTEGRITY_FOOTER (-1821) +/** Record header integrity error. */ +#define VERR_SSM_INTEGRITY_REC_HDR (-1822) +/** Termination record integrity error. */ +#define VERR_SSM_INTEGRITY_REC_TERM (-1823) +/** Termination record CRC mismatch. */ +#define VERR_SSM_INTEGRITY_REC_TERM_CRC (-1824) +/** Decompression integrity error. */ +#define VERR_SSM_INTEGRITY_DECOMPRESSION (-1825) +/** Saved state directory wintertides error. */ +#define VERR_SSM_INTEGRITY_DIR (-1826) +/** The saved state directory magic is wrong. */ +#define VERR_SSM_INTEGRITY_DIR_MAGIC (-1827) + +/** A data unit in the saved state file was defined but didn't any + * routine for processing it. */ +#define VERR_SSM_NO_LOAD_EXEC (-1830) +/** A restore routine attempted to load more data then the unit contained. */ +#define VERR_SSM_LOADED_TOO_MUCH (-1831) +/** Not in the correct state for the attempted operation. */ +#define VERR_SSM_INVALID_STATE (-1832) +/** Not in the correct state for the attempted operation. */ +#define VERR_SSM_LOADED_TOO_LITTLE (-1833) + +/** Unsupported data unit version. + * A SSM user returns this if it doesn't know the u32Version. */ +#define VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION (-1840) +/** The format of a data unit has changed. + * A SSM user returns this if it's not able to read the format for + * other reasons than u32Version. */ +#define VERR_SSM_DATA_UNIT_FORMAT_CHANGED (-1841) +/** The CPUID instruction returns different information when loading than when saved. + * Normally caused by hardware changes on the host, but could also be caused by + * changes in the BIOS setup. */ +#define VERR_SSM_LOAD_CPUID_MISMATCH (-1842) +/** The RAM size differs between the saved state and the VM config. */ +#define VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH (-1843) +/** The state doesn't match the VM configuration in one or another way. + * (There are certain PCI reconfiguration which the OS could potentially + * do which can cause this problem. Check this out when it happens.) */ +#define VERR_SSM_LOAD_CONFIG_MISMATCH (-1844) +/** The virtual clock frequency differs too much. + * The clock source for the virtual time isn't reliable or the code have changed. */ +#define VERR_SSM_VIRTUAL_CLOCK_HZ (-1845) +/** A timeout occurred while waiting for async IDE operations to finish. */ +#define VERR_SSM_IDE_ASYNC_TIMEOUT (-1846) +/** One of the structure magics was wrong. */ +#define VERR_SSM_STRUCTURE_MAGIC (-1847) +/** The data in the saved state doesn't conform to expectations. */ +#define VERR_SSM_UNEXPECTED_DATA (-1848) +/** Trying to read a 64-bit guest physical address into a 32-bit variable. */ +#define VERR_SSM_GCPHYS_OVERFLOW (-1849) +/** Trying to read a 64-bit guest virtual address into a 32-bit variable. */ +#define VERR_SSM_GCPTR_OVERFLOW (-1850) +/** Vote for another pass. */ +#define VINF_SSM_VOTE_FOR_ANOTHER_PASS 1851 +/** Vote for done tell SSM not to call again until the final pass. */ +#define VINF_SSM_VOTE_DONE_DONT_CALL_AGAIN 1852 +/** Vote for giving up. */ +#define VERR_SSM_VOTE_FOR_GIVING_UP (-1853) +/** Don't call again until the final pass. */ +#define VINF_SSM_DONT_CALL_AGAIN 1854 +/** Giving up a live snapshot/teleportation attempt because of too many + * passes. */ +#define VERR_SSM_TOO_MANY_PASSES (-1855) +/** Giving up a live snapshot/teleportation attempt because the state grew to + * big. */ +#define VERR_SSM_STATE_GREW_TOO_BIG (-1856) +/** Giving up a live snapshot attempt because we're low on disk space. */ +#define VERR_SSM_LOW_ON_DISK_SPACE (-1857) +/** The operation was cancelled. */ +#define VERR_SSM_CANCELLED (-1858) +/** Nothing that can be cancelled. */ +#define VERR_SSM_NO_PENDING_OPERATION (-1859) +/** The operation has already been cancelled. */ +#define VERR_SSM_ALREADY_CANCELLED (-1860) +/** The machine was powered off while saving. */ +#define VERR_SSM_LIVE_POWERED_OFF (-1861) +/** The live snapshot/teleportation operation was aborted because of a guru + * meditation. */ +#define VERR_SSM_LIVE_GURU_MEDITATION (-1862) +/** The live snapshot/teleportation operation was aborted because of a fatal + * runtime error. */ +#define VERR_SSM_LIVE_FATAL_ERROR (-1863) +/** The VM was suspended before or while saving, don't resume execution. */ +#define VINF_SSM_LIVE_SUSPENDED 1864 +/** Complex SSM field fed to SSMR3PutStruct or SSMR3GetStruct. Use the + * extended API. */ +#define VERR_SSM_FIELD_COMPLEX (-1864) +/** Invalid size of a SSM field with the specified transformation. */ +#define VERR_SSM_FIELD_INVALID_SIZE (-1865) +/** The specified field is outside the structure. */ +#define VERR_SSM_FIELD_OUT_OF_BOUNDS (-1866) +/** The field does not follow immediately the previous one. */ +#define VERR_SSM_FIELD_NOT_CONSECUTIVE (-1867) +/** The field contains an invalid callback or transformation index. */ +#define VERR_SSM_FIELD_INVALID_CALLBACK (-1868) +/** The field contains an invalid padding size. */ +#define VERR_SSM_FIELD_INVALID_PADDING_SIZE (-1869) +/** The field contains a value that is out of range. */ +#define VERR_SSM_FIELD_INVALID_VALUE (-1870) +/** Generic stream error. */ +#define VERR_SSM_STREAM_ERROR (-1871) +/** SSM did a callback for a pass we didn't expect. */ +#define VERR_SSM_UNEXPECTED_PASS (-1872) +/** Someone is trying to skip backwards in the stream... */ +#define VERR_SSM_SKIP_BACKWARDS (-1873) +/** Someone is trying to write a memory block which is too big to encode. */ +#define VERR_SSM_MEM_TOO_BIG (-1874) +/** Encountered an bad (/unknown) record type. */ +#define VERR_SSM_BAD_REC_TYPE (-1875) +/** Internal processing error \#1 in SSM code. */ +#define VERR_SSM_IPE_1 (-1876) +/** Internal processing error \#2 in SSM code. */ +#define VERR_SSM_IPE_2 (-1877) +/** Internal processing error \#3 in SSM code. */ +#define VERR_SSM_IPE_3 (-1878) +/** A field contained an transformation that should only be used when loading + * old states. */ +#define VERR_SSM_FIELD_LOAD_ONLY_TRANSFORMATION (-1879) +/** @} */ + + +/** @name Virtual Machine (VM) Status Codes + * @{ + */ +/** The specified at reset handler wasn't found. */ +#define VERR_VM_ATRESET_NOT_FOUND (-1900) +/** Invalid VM request type. + * For the VMR3ReqAlloc() case, the caller just specified an illegal enmType. For + * all the other occurrences it means indicates corruption, broken logic, or stupid + * interface user. */ +#define VERR_VM_REQUEST_INVALID_TYPE (-1901) +/** Invalid VM request state. + * The state of the request packet was not the expected and accepted one(s). Either + * the interface user screwed up, or we've got corruption/broken logic. */ +#define VERR_VM_REQUEST_STATE (-1902) +/** Invalid VM request packet. + * One or more of the VM controlled packet members didn't contain the correct + * values. Some thing's broken. */ +#define VERR_VM_REQUEST_INVALID_PACKAGE (-1903) +/** The status field has not been updated yet as the request is still + * pending completion. Someone queried the iStatus field before the request + * has been fully processed. */ +#define VERR_VM_REQUEST_STATUS_STILL_PENDING (-1904) +/** The request has been freed, don't read the status now. + * Someone is reading the iStatus field of a freed request packet. */ +#define VERR_VM_REQUEST_STATUS_FREED (-1905) +/** A VM api requiring EMT was called from another thread. + * Use the VMR3ReqCall() apis to call it! */ +#define VERR_VM_THREAD_NOT_EMT (-1906) +/** The VM state was invalid for the requested operation. + * Go check the 'VM Statechart Diagram.gif'. */ +#define VERR_VM_INVALID_VM_STATE (-1907) +/** The support driver is not installed. + * On linux, open returned ENOENT. */ +#define VERR_VM_DRIVER_NOT_INSTALLED (-1908) +/** The support driver is not accessible. + * On linux, open returned EPERM. */ +#define VERR_VM_DRIVER_NOT_ACCESSIBLE (-1909) +/** Was not able to load the support driver. + * On linux, open returned ENODEV. */ +#define VERR_VM_DRIVER_LOAD_ERROR (-1910) +/** Was not able to open the support driver. + * Generic open error used when none of the other ones fit. */ +#define VERR_VM_DRIVER_OPEN_ERROR (-1911) +/** The installed support driver doesn't match the version of the user. */ +#define VERR_VM_DRIVER_VERSION_MISMATCH (-1912) +/** Saving the VM state is temporarily not allowed. Try again later. */ +#define VERR_VM_SAVE_STATE_NOT_ALLOWED (-1913) +/** An EMT called an API which cannot be called on such a thread. */ +#define VERR_VM_THREAD_IS_EMT (-1914) +/** Encountered an unexpected VM state. */ +#define VERR_VM_UNEXPECTED_VM_STATE (-1915) +/** Unexpected unstable VM state. */ +#define VERR_VM_UNEXPECTED_UNSTABLE_STATE (-1916) +/** Too many arguments passed to a VM request / request corruption. */ +#define VERR_VM_REQUEST_TOO_MANY_ARGS_IPE (-1917) +/** Fatal EMT wait error. */ +#define VERR_VM_FATAL_WAIT_ERROR (-1918) +/** The VM request was killed at VM termination. */ +#define VERR_VM_REQUEST_KILLED (-1919) +/** @} */ + + +/** @name VBox Remote Desktop Protocol (VRDP) Status Codes + * @{ + */ +/** Successful completion of operation (mapped to generic iprt status code). */ +#define VINF_VRDP_SUCCESS VINF_SUCCESS +/** VRDP transport operation timed out (mapped to generic iprt status code). */ +#define VERR_VRDP_TIMEOUT VERR_TIMEOUT + +/** Unsupported ISO protocol feature */ +#define VERR_VRDP_ISO_UNSUPPORTED (-2000) +/** Security (en/decryption) engine error */ +#define VERR_VRDP_SEC_ENGINE_FAIL (-2001) +/** VRDP protocol violation */ +#define VERR_VRDP_PROTOCOL_ERROR (-2002) +/** Unsupported VRDP protocol feature */ +#define VERR_VRDP_NOT_SUPPORTED (-2003) +/** VRDP protocol violation, client sends less data than expected */ +#define VERR_VRDP_INSUFFICIENT_DATA (-2004) +/** Internal error, VRDP packet is in wrong operation mode */ +#define VERR_VRDP_INVALID_MODE (-2005) +/** Memory allocation failed */ +#define VERR_VRDP_NO_MEMORY (-2006) +/** Client has been rejected */ +#define VERR_VRDP_ACCESS_DENIED (-2007) +/** VRPD receives a packet that is not supported */ +#define VWRN_VRDP_PDU_NOT_SUPPORTED 2008 +/** VRDP script allowed the packet to be processed further */ +#define VINF_VRDP_PROCESS_PDU 2009 +/** VRDP script has completed its task */ +#define VINF_VRDP_OPERATION_COMPLETED 2010 +/** VRDP thread has started OK and will run */ +#define VINF_VRDP_THREAD_STARTED 2011 +/** Framebuffer is resized, terminate send bitmap procedure */ +#define VINF_VRDP_RESIZE_REQUESTED 2012 +/** Output can be enabled for the client. */ +#define VINF_VRDP_OUTPUT_ENABLE 2013 +/** @} */ + + +/** @name Configuration Manager (CFGM) Status Codes + * @{ + */ +/** The integer value was too big for the requested representation. */ +#define VERR_CFGM_INTEGER_TOO_BIG (-2100) +/** Child node was not found. */ +#define VERR_CFGM_CHILD_NOT_FOUND (-2101) +/** Path to child node was invalid (i.e. empty). */ +#define VERR_CFGM_INVALID_CHILD_PATH (-2102) +/** Value not found. */ +#define VERR_CFGM_VALUE_NOT_FOUND (-2103) +/** No parent node specified. */ +#define VERR_CFGM_NO_PARENT (-2104) +/** No node was specified. */ +#define VERR_CFGM_NO_NODE (-2105) +/** The value is not an integer. */ +#define VERR_CFGM_NOT_INTEGER (-2106) +/** The value is not a zero terminated character string. */ +#define VERR_CFGM_NOT_STRING (-2107) +/** The value is not a byte string. */ +#define VERR_CFGM_NOT_BYTES (-2108) +/** The specified string / bytes buffer was to small. Specify a larger one and retry. */ +#define VERR_CFGM_NOT_ENOUGH_SPACE (-2109) +/** The path of a new node contained slashes or was empty. */ +#define VERR_CFGM_INVALID_NODE_PATH (-2160) +/** A new node couldn't be inserted because one with the same name exists. */ +#define VERR_CFGM_NODE_EXISTS (-2161) +/** A new leaf couldn't be inserted because one with the same name exists. */ +#define VERR_CFGM_LEAF_EXISTS (-2162) +/** An unknown config value was encountered. */ +#define VERR_CFGM_CONFIG_UNKNOWN_VALUE (-2163) +/** An unknown config node (key) was encountered. */ +#define VERR_CFGM_CONFIG_UNKNOWN_NODE (-2164) +/** Internal processing error \#1 in CFGM. */ +#define VERR_CFGM_IPE_1 (-2165) +/** @} */ + + +/** @name Time Manager (TM) Status Codes + * @{ + */ +/** The loaded timer state was incorrect. */ +#define VERR_TM_LOAD_STATE (-2200) +/** The timer was not in the correct state for the request operation. */ +#define VERR_TM_INVALID_STATE (-2201) +/** The timer was in a unknown state. Corruption or stupid coding error. */ +#define VERR_TM_UNKNOWN_STATE (-2202) +/** The timer was stuck in an unstable state until we grew impatient and returned. */ +#define VERR_TM_UNSTABLE_STATE (-2203) +/** TM requires GIP. */ +#define VERR_TM_GIP_REQUIRED (-2204) +/** TM does not support the GIP version. */ +#define VERR_TM_GIP_VERSION (-2205) +/** The GIP update interval is too large. */ +#define VERR_TM_GIP_UPDATE_INTERVAL_TOO_BIG (-2206) +/** The timer has a bad clock enum value, probably corruption. */ +#define VERR_TM_TIMER_BAD_CLOCK (-2207) +/** The timer failed to reach a stable state. */ +#define VERR_TM_TIMER_UNSTABLE_STATE (-2208) +/** Attempt to resume a running TSC. */ +#define VERR_TM_TSC_ALREADY_TICKING (-2209) +/** Attempt to pause a paused TSC. */ +#define VERR_TM_TSC_ALREADY_PAUSED (-2210) +/** Invalid value for cVirtualTicking. */ +#define VERR_TM_VIRTUAL_TICKING_IPE (-2211) +/** @} */ + + +/** @name Recompiled Execution Manager (REM) Status Codes + * @{ + */ +/** Fatal error in virtual hardware. */ +#define VERR_REM_VIRTUAL_HARDWARE_ERROR (-2300) +/** Fatal error in the recompiler cpu. */ +#define VERR_REM_VIRTUAL_CPU_ERROR (-2301) +/** Recompiler execution was interrupted by forced action. */ +#define VINF_REM_INTERRUPED_FF 2302 +/** Too many similar traps. This is a very useful debug only + * check (we don't do double/triple faults in REM). */ +#define VERR_REM_TOO_MANY_TRAPS (-2304) +/** The REM is out of breakpoint slots. */ +#define VERR_REM_NO_MORE_BP_SLOTS (-2305) +/** The REM could not find any breakpoint on the specified address. */ +#define VERR_REM_BP_NOT_FOUND (-2306) +/** @} */ + + +/** @name Trap Manager / Monitor (TRPM) Status Codes + * @{ + */ +/** No active trap. Cannot query or reset a non-existing trap. */ +#define VERR_TRPM_NO_ACTIVE_TRAP (-2400) +/** Active trap. Cannot assert a new trap when one is already active. */ +#define VERR_TRPM_ACTIVE_TRAP (-2401) +/** Reason for leaving RC: Guest tried to write to our IDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the idtr register. */ +#define VERR_TRPM_SHADOW_IDT_WRITE (-2402) +/** Reason for leaving RC: Fatal trap in hypervisor. */ +#define VERR_TRPM_DONT_PANIC (-2403) +/** Reason for leaving RC: Double Fault. */ +#define VERR_TRPM_PANIC (-2404) +/** The exception was dispatched for raw-mode execution. */ +#define VINF_TRPM_XCPT_DISPATCHED 2405 +/** Bad TRPM_TRAP_IN_OP. */ +#define VERR_TRPM_BAD_TRAP_IN_OP (-2406) +/** Internal processing error \#1 in TRPM. */ +#define VERR_TRPM_IPE_1 (-2407) +/** Internal processing error \#2 in TRPM. */ +#define VERR_TRPM_IPE_2 (-2408) +/** Internal processing error \#3 in TRPM. */ +#define VERR_TRPM_IPE_3 (-2409) +/** Got into a part of TRPM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_TRPM_HM_IPE (-2410) +/** @} */ + + +/** @name Selector Manager / Monitor (SELM) Status Code + * @{ + */ +/** Reason for leaving RC: Guest tried to write to our GDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the gdtr register. */ +#define VERR_SELM_SHADOW_GDT_WRITE (-2500) +/** Reason for leaving RC: Guest tried to write to our LDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the ldtr register. */ +#define VERR_SELM_SHADOW_LDT_WRITE (-2501) +/** Reason for leaving RC: Guest tried to write to our TSS - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the ltr register. */ +#define VERR_SELM_SHADOW_TSS_WRITE (-2502) +/** Reason for leaving RC: Sync the GDT table to solve a conflict. */ +#define VINF_SELM_SYNC_GDT 2503 +/** No valid TSS present. */ +#define VERR_SELM_NO_TSS (-2504) +/** Invalid guest LDT selector. */ +#define VERR_SELM_INVALID_LDT (-2505) +/** The guest LDT selector is out of bounds. */ +#define VERR_SELM_LDT_OUT_OF_BOUNDS (-2506) +/** Unknown error while reading the guest GDT during shadow table updating. */ +#define VERR_SELM_GDT_READ_ERROR (-2507) +/** The guest GDT so full that we cannot find free space for our own + * selectors. */ +#define VERR_SELM_GDT_TOO_FULL (-2508) +/** Got into a part of SELM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_SELM_HM_IPE (-2509) +/** @} */ + + +/** @name I/O Manager / Monitor (IOM) Status Code + * @{ + */ +/** The specified I/O port range was invalid. + * It was either empty or it was out of bounds. */ +#define VERR_IOM_INVALID_IOPORT_RANGE (-2600) +/** The specified R0 or RC I/O port range didn't have a corresponding R3 range. + * IOMR3IOPortRegisterR3() must be called first. */ +#define VERR_IOM_NO_R3_IOPORT_RANGE (-2601) +/** The specified I/O port range intruded on an existing range. There is + * a I/O port conflict between two device, or a device tried to register + * the same range twice. */ +#define VERR_IOM_IOPORT_RANGE_CONFLICT (-2602) +/** The I/O port range specified for removal wasn't found or it wasn't contiguous. */ +#define VERR_IOM_IOPORT_RANGE_NOT_FOUND (-2603) +/** The specified I/O port range was owned by some other device(s). Both registration + * and deregistration, but in the first case only RC and R0 ranges. */ +#define VERR_IOM_NOT_IOPORT_RANGE_OWNER (-2604) + +/** The specified MMIO range was invalid. + * It was either empty or it was out of bounds. */ +#define VERR_IOM_INVALID_MMIO_RANGE (-2605) +/** The specified R0 or RC MMIO range didn't have a corresponding R3 range. + * IOMR3MMIORegisterR3() must be called first. */ +#define VERR_IOM_NO_R3_MMIO_RANGE (-2606) +/** The specified MMIO range was owned by some other device(s). Both registration + * and deregistration, but in the first case only RC and R0 ranges. */ +#define VERR_IOM_NOT_MMIO_RANGE_OWNER (-2607) +/** The specified MMIO range intruded on an existing range. There is + * a MMIO conflict between two device, or a device tried to register + * the same range twice. */ +#define VERR_IOM_MMIO_RANGE_CONFLICT (-2608) +/** The MMIO range specified for removal was not found. */ +#define VERR_IOM_MMIO_RANGE_NOT_FOUND (-2609) +/** The MMIO range specified for removal was invalid. The range didn't match + * quite match a set of existing ranges. It's not possible to remove parts of + * a MMIO range, only one or more full ranges. */ +#define VERR_IOM_INCOMPLETE_MMIO_RANGE (-2610) +/** An invalid I/O port size was specified for a read or write operation. */ +#define VERR_IOM_INVALID_IOPORT_SIZE (-2611) +/** The MMIO handler was called for a bogus address! Internal error! */ +#define VERR_IOM_MMIO_HANDLER_BOGUS_CALL (-2612) +/** The MMIO handler experienced a problem with the disassembler. */ +#define VERR_IOM_MMIO_HANDLER_DISASM_ERROR (-2613) +/** The port being read was not present(/unused) and IOM shall return ~0 according to size. */ +#define VERR_IOM_IOPORT_UNUSED (-2614) +/** Unused MMIO register read, fill with 00. */ +#define VINF_IOM_MMIO_UNUSED_00 2615 +/** Unused MMIO register read, fill with FF. */ +#define VINF_IOM_MMIO_UNUSED_FF 2616 + +/** Reason for leaving RZ: I/O port read. */ +#define VINF_IOM_R3_IOPORT_READ 2620 +/** Reason for leaving RZ: I/O port write. */ +#define VINF_IOM_R3_IOPORT_WRITE 2621 +/** Reason for leaving RZ: Pending I/O port write. Since there is also + * VMCPU_FF_IOM for this condition, it's ok to drop this status code for + * some other VINF_EM_XXX statuses. */ +#define VINF_IOM_R3_IOPORT_COMMIT_WRITE 2622 +/** Reason for leaving RZ: MMIO read. */ +#define VINF_IOM_R3_MMIO_READ 2623 +/** Reason for leaving RZ: MMIO write. */ +#define VINF_IOM_R3_MMIO_WRITE 2624 +/** Reason for leaving RZ: MMIO read/write. */ +#define VINF_IOM_R3_MMIO_READ_WRITE 2625 +/** Reason for leaving RZ: Pending MMIO write. Since there is also + * VMCPU_FF_IOM for this condition, it's ok to drop this status code for + * some other VINF_EM_XXX statuses. */ +#define VINF_IOM_R3_MMIO_COMMIT_WRITE 2626 + +/** IOMGCIOPortHandler was given an unexpected opcode. */ +#define VERR_IOM_IOPORT_UNKNOWN_OPCODE (-2630) +/** Internal processing error \#1 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_1 (-2631) +/** Internal processing error \#2 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_2 (-2632) +/** Internal processing error \#3 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_3 (-2633) +/** Internal processing error \#1 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_1 (-2634) +/** Internal processing error \#2 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_2 (-2635) +/** Internal processing error \#3 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_3 (-2636) +/** Got into a part of IOM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_IOM_HM_IPE (-2637) +/** Internal processing error while merging status codes. */ +#define VERR_IOM_FF_STATUS_IPE (-2638) +/** @} */ + + +/** @name Virtual Machine Monitor (VMM) Status Codes + * @{ + */ +/** Reason for leaving RZ: Calling host function. */ +#define VINF_VMM_CALL_HOST 2700 +/** Reason for leaving R0: Hit a ring-0 assertion on EMT. */ +#define VERR_VMM_RING0_ASSERTION (-2701) +/** The hyper CR3 differs between PGM and CPUM. */ +#define VERR_VMM_HYPER_CR3_MISMATCH (-2702) +/** Reason for leaving RZ: Illegal call to ring-3. */ +#define VERR_VMM_RING3_CALL_DISABLED (-2703) +/** The VMMR0.r0 module version does not match VBoxVMM.dll/so/dylib. + * If you just upgraded VirtualBox, please terminate all VMs and make sure + * that neither VBoxNetDHCP nor VBoxNetNAT is running. Then try again. + * If this error persists, try re-installing VirtualBox. */ +#define VERR_VMM_R0_VERSION_MISMATCH (-2704) +/** The VMMRC.rc module version does not match VBoxVMM.dll/so/dylib. + * Re-install if you are a user. Developers should make sure the build is + * complete or try with a clean build. */ +#define VERR_VMM_RC_VERSION_MISMATCH (-2705) +/** VMM set jump error. */ +#define VERR_VMM_SET_JMP_ERROR (-2706) +/** VMM set jump stack overflow error. */ +#define VERR_VMM_SET_JMP_STACK_OVERFLOW (-2707) +/** VMM set jump resume error. */ +#define VERR_VMM_SET_JMP_ABORTED_RESUME (-2708) +/** VMM long jump error. */ +#define VERR_VMM_LONG_JMP_ERROR (-2709) +/** Unknown ring-3 call attempted. */ +#define VERR_VMM_UNKNOWN_RING3_CALL (-2710) +/** The ring-3 call didn't set an RC. */ +#define VERR_VMM_RING3_CALL_NO_RC (-2711) +/** Reason for leaving RC: Caller the tracer in ring-0. */ +#define VINF_VMM_CALL_TRACER (2712) +/** Internal processing error \#1 in the switcher code. */ +#define VERR_VMM_SWITCHER_IPE_1 (-2713) +/** Reason for leaving RZ: Unknown call to ring-3. */ +#define VINF_VMM_UNKNOWN_RING3_CALL (2714) +/** Attempted to use stub switcher. */ +#define VERR_VMM_SWITCHER_STUB (-2715) +/** HM returned in the wrong state. */ +#define VERR_VMM_WRONG_HM_VMCPU_STATE (-2716) +/** SMAP enabled, but the AC flag was found to be clear - check the kernel + * log for details. */ +#define VERR_VMM_SMAP_BUT_AC_CLEAR (-2717) +/** @} */ + + +/** @name Pluggable Device and Driver Manager (PDM) Status Codes + * @{ + */ +/** An invalid LUN specification was given. */ +#define VERR_PDM_NO_SUCH_LUN (-2800) +/** A device encountered an unknown configuration value. + * This means that the device is potentially misconfigured and the device + * construction or unit attachment failed because of this. */ +#define VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES (-2801) +/** The above driver doesn't export a interface required by a driver being + * attached to it. Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE_ABOVE (-2802) +/** The below driver doesn't export a interface required by the drive + * having attached it. Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE_BELOW (-2803) +/** A device didn't find a required interface with an attached driver. + * Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE (-2804) +/** A driver encountered an unknown configuration value. + * This means that the driver is potentially misconfigured and the driver + * construction failed because of this. */ +#define VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES (-2805) +/** The PCI bus assigned to a device didn't have room for it. + * Either too many devices are configured on the same PCI bus, or there are + * some internal problem where PDM/PCI doesn't free up slots when unplugging devices. */ +#define VERR_PDM_TOO_PCI_MANY_DEVICES (-2806) +/** A queue is out of free items, the queueing operation failed. */ +#define VERR_PDM_NO_QUEUE_ITEMS (-2807) +/** Not possible to attach further drivers to the driver. + * A driver which doesn't support attachments (below of course) will + * return this status code if it found that further drivers were configured + * to be attached to it. */ +#define VERR_PDM_DRVINS_NO_ATTACH (-2808) +/** Not possible to attach drivers to the device. + * A device which doesn't support attachments (below of course) will + * return this status code if it found that drivers were configured + * to be attached to it. */ +#define VERR_PDM_DEVINS_NO_ATTACH (-2809) +/** No attached driver. + * The PDMDRVHLP::pfnAttach and PDMDEVHLP::pfnDriverAttach will return + * this error when no driver was configured to be attached. */ +#define VERR_PDM_NO_ATTACHED_DRIVER (-2810) +/** The media geometry hasn't been set yet, so it cannot be obtained. + * The caller should then calculate the geometry from the media size. */ +#define VERR_PDM_GEOMETRY_NOT_SET (-2811) +/** The media translation hasn't been set yet, so it cannot be obtained. + * The caller should then guess the translation. */ +#define VERR_PDM_TRANSLATION_NOT_SET (-2812) +/** The media is not mounted, operation requires a mounted media. */ +#define VERR_PDM_MEDIA_NOT_MOUNTED (-2813) +/** Mount failed because a media was already mounted. Unmount the media + * and retry the mount. */ +#define VERR_PDM_MEDIA_MOUNTED (-2814) +/** The media is locked and cannot be unmounted. */ +#define VERR_PDM_MEDIA_LOCKED (-2815) +/** No 'Type' attribute in the DrvBlock configuration. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_NO_TYPE (-2816) +/** The 'Type' attribute in the DrvBlock configuration had an unknown value. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_UNKNOWN_TYPE (-2817) +/** The 'Translation' attribute in the DrvBlock configuration had an unknown value. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_UNKNOWN_TRANSLATION (-2818) +/** The block driver type wasn't supported. + * Misconfiguration of the kind you get when attaching a floppy to an IDE controller. */ +#define VERR_PDM_UNSUPPORTED_BLOCK_TYPE (-2819) +/** A attach or prepare mount call failed because the driver already + * had a driver attached. */ +#define VERR_PDM_DRIVER_ALREADY_ATTACHED (-2820) +/** An attempt on detaching a driver without anyone actually being attached, or + * performing any other operation on an attached driver. */ +#define VERR_PDM_NO_DRIVER_ATTACHED (-2821) +/** The attached driver configuration is missing the 'Driver' attribute. */ +#define VERR_PDM_CFG_MISSING_DRIVER_NAME (-2822) +/** The configured driver wasn't found. + * Either the necessary driver modules wasn't loaded, the name was + * misspelled, or it was a misconfiguration. */ +#define VERR_PDM_DRIVER_NOT_FOUND (-2823) +/** The Ring-3 module was already loaded. */ +#define VINF_PDM_ALREADY_LOADED (2824) +/** The name of the module clashed with an existing module. */ +#define VERR_PDM_MODULE_NAME_CLASH (-2825) +/** Couldn't find any export for registration of drivers/devices. */ +#define VERR_PDM_NO_REGISTRATION_EXPORT (-2826) +/** A module name is too long. */ +#define VERR_PDM_MODULE_NAME_TOO_LONG (-2827) +/** Driver name clash. Another driver with the same name as the + * one being registered exists. */ +#define VERR_PDM_DRIVER_NAME_CLASH (-2828) +/** The version of the driver registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_DRVREG_VERSION (-2829) +/** Invalid entry in the driver registration structure. */ +#define VERR_PDM_INVALID_DRIVER_REGISTRATION (-2830) +/** Invalid host bit mask. */ +#define VERR_PDM_INVALID_DRIVER_HOST_BITS (-2831) +/** Not possible to detach a driver because the above driver/device + * doesn't support it. The above entity doesn't implement the pfnDetach call. */ +#define VERR_PDM_DRIVER_DETACH_NOT_POSSIBLE (-2832) +/** No PCI Bus is available to register the device with. This is usually a + * misconfiguration or in rare cases a buggy pci device. */ +#define VERR_PDM_NO_PCI_BUS (-2833) +/** The device is not a registered PCI device and thus cannot + * perform any PCI operations. The device forgot to register it self. */ +#define VERR_PDM_NOT_PCI_DEVICE (-2834) + +/** The version of the device registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_DEVREG_VERSION (-2835) +/** Invalid entry in the device registration structure. */ +#define VERR_PDM_INVALID_DEVICE_REGISTRATION (-2836) +/** Invalid host bit mask. */ +#define VERR_PDM_INVALID_DEVICE_GUEST_BITS (-2837) +/** The guest bit mask didn't match the guest being loaded. */ +#define VERR_PDM_INVALID_DEVICE_HOST_BITS (-2838) +/** Device name clash. Another device with the same name as the + * one being registered exists. */ +#define VERR_PDM_DEVICE_NAME_CLASH (-2839) +/** The device wasn't found. There was no registered device + * by that name. */ +#define VERR_PDM_DEVICE_NOT_FOUND (-2840) +/** The device instance was not found. */ +#define VERR_PDM_DEVICE_INSTANCE_NOT_FOUND (-2841) +/** The device instance have no base interface. */ +#define VERR_PDM_DEVICE_INSTANCE_NO_IBASE (-2842) +/** The device instance have no such logical unit. */ +#define VERR_PDM_DEVICE_INSTANCE_LUN_NOT_FOUND (-2843) +/** The driver instance could not be found. */ +#define VERR_PDM_DRIVER_INSTANCE_NOT_FOUND (-2844) +/** Logical Unit was not found. */ +#define VERR_PDM_LUN_NOT_FOUND (-2845) +/** The Logical Unit was found, but it had no driver attached to it. */ +#define VERR_PDM_NO_DRIVER_ATTACHED_TO_LUN (-2846) +/** The Logical Unit was found, but it had no driver attached to it. */ +#define VINF_PDM_NO_DRIVER_ATTACHED_TO_LUN 2846 +/** No PIC device instance is registered with the current VM and thus + * the PIC operation cannot be performed. */ +#define VERR_PDM_NO_PIC_INSTANCE (-2847) +/** No APIC device instance is registered with the current VM and thus + * the APIC operation cannot be performed. */ +#define VERR_PDM_NO_APIC_INSTANCE (-2848) +/** No DMAC device instance is registered with the current VM and thus + * the DMA operation cannot be performed. */ +#define VERR_PDM_NO_DMAC_INSTANCE (-2849) +/** No RTC device instance is registered with the current VM and thus + * the RTC or CMOS operation cannot be performed. */ +#define VERR_PDM_NO_RTC_INSTANCE (-2850) +/** Unable to open the host interface due to a sharing violation . */ +#define VERR_PDM_HIF_SHARING_VIOLATION (-2851) +/** Unable to open the host interface. */ +#define VERR_PDM_HIF_OPEN_FAILED (-2852) +/** The device doesn't support runtime driver attaching. + * The PDMDEVREG::pfnAttach callback function is NULL. */ +#define VERR_PDM_DEVICE_NO_RT_ATTACH (-2853) +/** The driver doesn't support runtime driver attaching. + * The PDMDRVREG::pfnAttach callback function is NULL. */ +#define VERR_PDM_DRIVER_NO_RT_ATTACH (-2854) +/** Invalid host interface version. */ +#define VERR_PDM_HIF_INVALID_VERSION (-2855) + +/** The version of the USB device registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_USBREG_VERSION (-2856) +/** Invalid entry in the device registration structure. */ +#define VERR_PDM_INVALID_USB_REGISTRATION (-2857) +/** Driver name clash. Another driver with the same name as the + * one being registered exists. */ +#define VERR_PDM_USB_NAME_CLASH (-2858) +/** The USB hub is already registered. */ +#define VERR_PDM_USB_HUB_EXISTS (-2859) +/** Couldn't find any USB hubs to attach the device to. */ +#define VERR_PDM_NO_USB_HUBS (-2860) +/** Couldn't find any free USB ports to attach the device to. */ +#define VERR_PDM_NO_USB_PORTS (-2861) +/** Couldn't find the USB Proxy device. Using OSE? */ +#define VERR_PDM_NO_USBPROXY (-2862) +/** The async completion template is still used. */ +#define VERR_PDM_ASYNC_TEMPLATE_BUSY (-2863) +/** The async completion task is already suspended. */ +#define VERR_PDM_ASYNC_COMPLETION_ALREADY_SUSPENDED (-2864) +/** The async completion task is not suspended. */ +#define VERR_PDM_ASYNC_COMPLETION_NOT_SUSPENDED (-2865) +/** The driver properties were invalid, and as a consequence construction + * failed. Caused my unusable media or similar problems. */ +#define VERR_PDM_DRIVER_INVALID_PROPERTIES (-2866) +/** Too many instances of a device. */ +#define VERR_PDM_TOO_MANY_DEVICE_INSTANCES (-2867) +/** Too many instances of a driver. */ +#define VERR_PDM_TOO_MANY_DRIVER_INSTANCES (-2868) +/** Too many instances of a usb device. */ +#define VERR_PDM_TOO_MANY_USB_DEVICE_INSTANCES (-2869) +/** The device instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVINS_VERSION_MISMATCH (-2870) +/** The device helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVHLPR3_VERSION_MISMATCH (-2871) +/** The USB device instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBINS_VERSION_MISMATCH (-2872) +/** The USB device helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBHLPR3_VERSION_MISMATCH (-2873) +/** The driver instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRVINS_VERSION_MISMATCH (-2874) +/** The driver helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRVHLPR3_VERSION_MISMATCH (-2875) +/** Generic device structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVICE_VERSION_MISMATCH (-2876) +/** Generic USB device structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBDEV_VERSION_MISMATCH (-2877) +/** Generic driver structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRIVER_VERSION_MISMATCH (-2878) +/** PDMVMMDevHeapR3ToGCPhys failure. */ +#define VERR_PDM_DEV_HEAP_R3_TO_GCPHYS (-2879) +/** A legacy device isn't implementing the HPET notification interface. */ +#define VERR_PDM_HPET_LEGACY_NOTIFY_MISSING (-2880) +/** Internal processing error in the critical section code. */ +#define VERR_PDM_CRITSECT_IPE (-2881) +/** The critical section being deleted was not found. */ +#define VERR_PDM_CRITSECT_NOT_FOUND (-2882) +/** A PDMThread API was called by the wrong thread. */ +#define VERR_PDM_THREAD_INVALID_CALLER (-2883) +/** Internal processing error \#1 in the PDM Thread code. */ +#define VERR_PDM_THREAD_IPE_1 (-2884) +/** Internal processing error \#2 in the PDM Thread code. */ +#define VERR_PDM_THREAD_IPE_2 (-2885) +/** Only one PCI function is supported per PDM device. */ +#define VERR_PDM_ONE_PCI_FUNCTION_PER_DEVICE (-2886) +/** Bad PCI configuration. */ +#define VERR_PDM_BAD_PCI_CONFIG (-2887) +/** Internal processing error # in the PDM device code. */ +#define VERR_PDM_DEV_IPE_1 (-2888) +/** Misconfigured driver chain transformation. */ +#define VERR_PDM_MISCONFIGURED_DRV_TRANSFORMATION (-2889) +/** The driver is already removed, not more transformations possible (at + * present). */ +#define VERR_PDM_CANNOT_TRANSFORM_REMOVED_DRIVER (-2890) +/** The PCI device isn't configured as a busmaster, physical memory access + * rejected. */ +#define VERR_PDM_NOT_PCI_BUS_MASTER (-2891) +/** Got into a part of PDM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_PDM_HM_IPE (-2892) +/** The I/O request was canceled. */ +#define VERR_PDM_MEDIAEX_IOREQ_CANCELED (-2893) +/** There is not enough room to store the data. */ +#define VERR_PDM_MEDIAEX_IOBUF_OVERFLOW (-2894) +/** There is not enough data to satisfy the request. */ +#define VERR_PDM_MEDIAEX_IOBUF_UNDERRUN (-2895) +/** The I/O request ID is already existing. */ +#define VERR_PDM_MEDIAEX_IOREQID_CONFLICT (-2896) +/** The I/O request ID was not found. */ +#define VERR_PDM_MEDIAEX_IOREQID_NOT_FOUND (-2897) +/** The I/O request is in progress. */ +#define VINF_PDM_MEDIAEX_IOREQ_IN_PROGRESS 2898 +/** The I/O request is in an invalid state for this operation. */ +#define VERR_PDM_MEDIAEX_IOREQ_INVALID_STATE (-2899) +/** @} */ + + +/** @name Host-Guest Communication Manager (HGCM) Status Codes + * @{ + */ +/** Requested service does not exist. */ +#define VERR_HGCM_SERVICE_NOT_FOUND (-2900) +/** Service rejected client connection */ +#define VINF_HGCM_CLIENT_REJECTED 2901 +/** Command address is invalid. */ +#define VERR_HGCM_INVALID_CMD_ADDRESS (-2902) +/** Service will execute the command in background. */ +#define VINF_HGCM_ASYNC_EXECUTE 2903 +/** HGCM could not perform requested operation because of an internal error. */ +#define VERR_HGCM_INTERNAL (-2904) +/** Invalid HGCM client id. */ +#define VERR_HGCM_INVALID_CLIENT_ID (-2905) +/** The HGCM is saving state. */ +#define VINF_HGCM_SAVE_STATE (2906) +/** Requested service already exists. */ +#define VERR_HGCM_SERVICE_EXISTS (-2907) + +/** @} */ + + +/** @name Network Address Translation Driver (DrvNAT) Status Codes + * @{ + */ +/** Failed to find the DNS configured for this machine. */ +#define VINF_NAT_DNS 3000 +/** Failed to convert the specified Guest IP to a binary IP address. + * Malformed input. */ +#define VERR_NAT_REDIR_GUEST_IP (-3001) +/** Failed while setting up a redirector rule. + * There probably is a conflict between the rule and some existing + * service on the computer. */ +#define VERR_NAT_REDIR_SETUP (-3002) +/** @} */ + + +/** @name HostIF Driver (DrvTUN) Status Codes + * @{ + */ +/** The Host Interface Networking init program failed. */ +#define VERR_HOSTIF_INIT_FAILED (-3100) +/** The Host Interface Networking device name is too long. */ +#define VERR_HOSTIF_DEVICE_NAME_TOO_LONG (-3101) +/** The Host Interface Networking name config IOCTL call failed. */ +#define VERR_HOSTIF_IOCTL (-3102) +/** Failed to make the Host Interface Networking handle non-blocking. */ +#define VERR_HOSTIF_BLOCKING (-3103) +/** If a Host Interface Networking filehandle was specified it's not allowed to + * have any init or term programs. */ +#define VERR_HOSTIF_FD_AND_INIT_TERM (-3104) +/** The Host Interface Networking terminate program failed. */ +#define VERR_HOSTIF_TERM_FAILED (-3105) +/** @} */ + + +/** @name VBox HDD Container (VD) Status Codes + * @{ + */ +/** Invalid image type. */ +#define VERR_VD_INVALID_TYPE (-3200) +/** Operation can't be done in current HDD container state. */ +#define VERR_VD_INVALID_STATE (-3201) +/** Configuration value not found. */ +#define VERR_VD_VALUE_NOT_FOUND (-3202) +/** Virtual HDD is not opened. */ +#define VERR_VD_NOT_OPENED (-3203) +/** Requested image is not opened. */ +#define VERR_VD_IMAGE_NOT_FOUND (-3204) +/** Image is read-only. */ +#define VERR_VD_IMAGE_READ_ONLY (-3205) +/** Geometry hasn't been set. */ +#define VERR_VD_GEOMETRY_NOT_SET (-3206) +/** No data for this block in image. */ +#define VERR_VD_BLOCK_FREE (-3207) +/** Differencing and parent images can't be used together due to UUID. */ +#define VERR_VD_UUID_MISMATCH (-3208) +/** Asynchronous I/O request finished. */ +#define VINF_VD_ASYNC_IO_FINISHED 3209 +/** Asynchronous I/O is not finished yet. */ +#define VERR_VD_ASYNC_IO_IN_PROGRESS (-3210) +/** The image is too small or too large for this format. */ +#define VERR_VD_INVALID_SIZE (-3211) +/** Configuration value is unknown. This indicates misconfiguration. */ +#define VERR_VD_UNKNOWN_CFG_VALUES (-3212) +/** Interface is unknown. This indicates misconfiguration. */ +#define VERR_VD_UNKNOWN_INTERFACE (-3213) +/** The DEK for disk encryption is missing. */ +#define VERR_VD_DEK_MISSING (-3214) +/** The provided password to decrypt the DEK was incorrect. */ +#define VERR_VD_PASSWORD_INCORRECT (-3215) +/** Generic: Invalid image file header. Use this for plugins. */ +#define VERR_VD_GEN_INVALID_HEADER (-3220) +/** VDI: Invalid image file header. */ +#define VERR_VD_VDI_INVALID_HEADER (-3230) +/** VDI: Invalid image file header: invalid signature. */ +#define VERR_VD_VDI_INVALID_SIGNATURE (-3231) +/** VDI: Invalid image file header: invalid version. */ +#define VERR_VD_VDI_UNSUPPORTED_VERSION (-3232) +/** Comment string is too long. */ +#define VERR_VD_VDI_COMMENT_TOO_LONG (-3233) +/** VMDK: Invalid image file header. */ +#define VERR_VD_VMDK_INVALID_HEADER (-3240) +/** VMDK: Invalid image file header: invalid version. */ +#define VERR_VD_VMDK_UNSUPPORTED_VERSION (-3241) +/** VMDK: Image property not found. */ +#define VERR_VD_VMDK_VALUE_NOT_FOUND (-3242) +/** VMDK: Operation can't be done in current image state. */ +#define VERR_VD_VMDK_INVALID_STATE (-3243) +/** VMDK: Format is invalid/inconsistent. */ +#define VERR_VD_VMDK_INVALID_FORMAT (-3244) +/** VMDK: Invalid write position. */ +#define VERR_VD_VMDK_INVALID_WRITE (-3245) +/** iSCSI: Invalid header, i.e. dummy for validity check. */ +#define VERR_VD_ISCSI_INVALID_HEADER (-3250) +/** iSCSI: Operation can't be done in current image state. */ +#define VERR_VD_ISCSI_INVALID_STATE (-3251) +/** iSCSI: Invalid device type (not a disk). */ +#define VERR_VD_ISCSI_INVALID_TYPE (-3252) +/** iSCSI: Initiator secret not decrypted */ +#define VERR_VD_ISCSI_SECRET_ENCRYPTED (-3253) +/** VHD: Invalid image file header. */ +#define VERR_VD_VHD_INVALID_HEADER (-3260) +/** Parallels HDD: Invalid image file header. */ +#define VERR_VD_PARALLELS_INVALID_HEADER (-3265) +/** DMG: Invalid image file header. */ +#define VERR_VD_DMG_INVALID_HEADER (-3267) +/** Raw: Invalid image file header. */ +#define VERR_VD_RAW_INVALID_HEADER (-3270) +/** Raw: Invalid image file type. */ +#define VERR_VD_RAW_INVALID_TYPE (-3271) +/** The backend needs more metadata before it can continue. */ +#define VERR_VD_NOT_ENOUGH_METADATA (-3272) +/** Halt the current I/O context until further notification from the backend. */ +#define VERR_VD_IOCTX_HALT (-3273) +/** The disk has a cache attached already. */ +#define VERR_VD_CACHE_ALREADY_EXISTS (-3274) +/** There is no cache attached to the disk. */ +#define VERR_VD_CACHE_NOT_FOUND (-3275) +/** The cache is not up to date with the image. */ +#define VERR_VD_CACHE_NOT_UP_TO_DATE (-3276) +/** The given range does not meet the required alignment. */ +#define VERR_VD_DISCARD_ALIGNMENT_NOT_MET (-3277) +/** The discard operation is not supported for this image. */ +#define VERR_VD_DISCARD_NOT_SUPPORTED (-3278) +/** The image is the correct format but is corrupted. */ +#define VERR_VD_IMAGE_CORRUPTED (-3279) +/** Repairing the image is not supported. */ +#define VERR_VD_IMAGE_REPAIR_NOT_SUPPORTED (-3280) +/** Repairing the image is not possible because the corruption is to severe. */ +#define VERR_VD_IMAGE_REPAIR_IMPOSSIBLE (-3281) +/** Reading from the image was not possible because the offset is out of the image range. + * This usually indicates that there is a minor corruption in the image meta data. */ +#define VERR_VD_READ_OUT_OF_RANGE (-3282) +/** Block read was marked as free in the image and returned as a zero block. */ +#define VINF_VD_NEW_ZEROED_BLOCK 3283 +/** Unable to parse the XML in DMG file. */ +#define VERR_VD_DMG_XML_PARSE_ERROR (-3284) +/** Unable to locate a usable DMG file within the XAR archive. */ +#define VERR_VD_DMG_NOT_FOUND_INSIDE_XAR (-3285) +/** The size of the raw image is not dividable by 512 */ +#define VERR_VD_RAW_SIZE_MODULO_512 (-3286) +/** The size of the raw image is not dividable by 2048 */ +#define VERR_VD_RAW_SIZE_MODULO_2048 (-3287) +/** The size of the raw optical image is too small (<= 32K) */ +#define VERR_VD_RAW_SIZE_OPTICAL_TOO_SMALL (-3288) +/** The size of the raw floppy image is too big (>2.88MB) */ +#define VERR_VD_RAW_SIZE_FLOPPY_TOO_BIG (-3289) + +/** @} */ + + +/** @name VBox Guest Library (VBGL) Status Codes + * @{ + */ +/** Library was not initialized. */ +#define VERR_VBGL_NOT_INITIALIZED (-3300) +/** Virtual address was not allocated by the library. */ +#define VERR_VBGL_INVALID_ADDR (-3301) +/** IOCtl to VBoxGuest driver failed. */ +#define VERR_VBGL_IOCTL_FAILED (-3302) +/** @} */ + + +/** @name VBox USB (VUSB) Status Codes + * @{ + */ +/** No available ports on the hub. + * This error is returned when a device is attempted created and/or attached + * to a hub which is out of ports. */ +#define VERR_VUSB_NO_PORTS (-3400) +/** The requested operation cannot be performed on a detached USB device. */ +#define VERR_VUSB_DEVICE_NOT_ATTACHED (-3401) +/** Failed to allocate memory for a URB. */ +#define VERR_VUSB_NO_URB_MEMORY (-3402) +/** General failure during URB queuing. + * This will go away when the queueing gets proper status code handling. */ +#define VERR_VUSB_FAILED_TO_QUEUE_URB (-3403) +/** Device creation failed because the USB device name was not found. */ +#define VERR_VUSB_DEVICE_NAME_NOT_FOUND (-3404) +/** Not permitted to open the USB device. + * The user doesn't have access to the device in the usbfs, check the mount options. */ +#define VERR_VUSB_USBFS_PERMISSION (-3405) +/** The requested operation cannot be performed because the device + * is currently being reset. */ +#define VERR_VUSB_DEVICE_IS_RESETTING (-3406) +/** The requested operation cannot be performed because the device + * is currently suspended. */ +#define VERR_VUSB_DEVICE_IS_SUSPENDED (-3407) +/** Not permitted to open the USB device. + * The user doesn't have access to the device node, check group memberships. */ +#define VERR_VUSB_USB_DEVICE_PERMISSION (-3408) +/** @} */ + + +/** @name VBox VGA Status Codes + * @{ + */ +/** One of the custom modes was incorrect. + * The format or bit count of the custom mode value is invalid. */ +#define VERR_VGA_INVALID_CUSTOM_MODE (-3500) +/** The display connector is resizing. */ +#define VINF_VGA_RESIZE_IN_PROGRESS (3501) +/** Unexpected PCI region change during VGA saved state loading. */ +#define VERR_VGA_UNEXPECTED_PCI_REGION_LOAD_CHANGE (-3502) +/** @} */ + + +/** @name Internal Networking Status Codes + * @{ + */ +/** The networking interface to filter was not found. */ +#define VERR_INTNET_FLT_IF_NOT_FOUND (-3600) +/** The networking interface to filter was busy (used by someone). */ +#define VERR_INTNET_FLT_IF_BUSY (-3601) +/** Failed to create or connect to a networking interface filter. */ +#define VERR_INTNET_FLT_IF_FAILED (-3602) +/** The network already exists with a different trunk configuration. */ +#define VERR_INTNET_INCOMPATIBLE_TRUNK (-3603) +/** The network already exists with a different security profile (restricted / public). */ +#define VERR_INTNET_INCOMPATIBLE_FLAGS (-3604) +/** Failed to create a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_CREATE_FAILED (-3605) +/** Failed to retrieve a virtual network interface link ID. */ +#define VERR_INTNET_FLT_VNIC_LINK_ID_NOT_FOUND (-3606) +/** Failed to initialize a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_INIT_FAILED (-3607) +/** Failed to open a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_OPEN_FAILED (-3608) +/** Failed to retrieve underlying (lower mac) link. */ +#define VERR_INTNET_FLT_LOWER_LINK_INFO_NOT_FOUND (-3609) +/** Failed to open underlying link instance. */ +#define VERR_INTNET_FLT_LOWER_LINK_OPEN_FAILED (-3610) +/** Failed to get underlying link ID. */ +#define VERR_INTNET_FLT_LOWER_LINK_ID_NOT_FOUND (-3611) +/** @} */ + + +/** @name Support Driver Status Codes + * @{ + */ +/** The component factory was not found. */ +#define VERR_SUPDRV_COMPONENT_NOT_FOUND (-3700) +/** The component factories do not support the requested interface. */ +#define VERR_SUPDRV_INTERFACE_NOT_SUPPORTED (-3701) +/** The service module was not found. */ +#define VERR_SUPDRV_SERVICE_NOT_FOUND (-3702) +/** The host kernel is too old. */ +#define VERR_SUPDRV_KERNEL_TOO_OLD_FOR_VTX (-3703) +/** Bad VTG magic value. */ +#define VERR_SUPDRV_VTG_MAGIC (-3704) +/** Bad VTG bit count value. */ +#define VERR_SUPDRV_VTG_BITS (-3705) +/** Bad VTG header - misc. */ +#define VERR_SUPDRV_VTG_BAD_HDR_MISC (-3706) +/** Bad VTG header - offset. */ +#define VERR_SUPDRV_VTG_BAD_HDR_OFF (-3707) +/** Bad VTG header - offset. */ +#define VERR_SUPDRV_VTG_BAD_HDR_PTR (-3708) +/** Bad VTG header - to low value. */ +#define VERR_SUPDRV_VTG_BAD_HDR_TOO_FEW (-3709) +/** Bad VTG header - to high value. */ +#define VERR_SUPDRV_VTG_BAD_HDR_TOO_MUCH (-3710) +/** Bad VTG header - size value is not a multiple of the structure size. */ +#define VERR_SUPDRV_VTG_BAD_HDR_NOT_MULTIPLE (-3711) +/** Bad VTG string table offset. */ +#define VERR_SUPDRV_VTG_STRTAB_OFF (-3712) +/** Bad VTG string. */ +#define VERR_SUPDRV_VTG_BAD_STRING (-3713) +/** VTG string is too long. */ +#define VERR_SUPDRV_VTG_STRING_TOO_LONG (-3714) +/** Bad VTG attribute value. */ +#define VERR_SUPDRV_VTG_BAD_ATTR (-3715) +/** Bad VTG provider descriptor. */ +#define VERR_SUPDRV_VTG_BAD_PROVIDER (-3716) +/** Bad VTG probe descriptor. */ +#define VERR_SUPDRV_VTG_BAD_PROBE (-3717) +/** Bad VTG argument list descriptor. */ +#define VERR_SUPDRV_VTG_BAD_ARGLIST (-3718) +/** Bad VTG probe enabled data. */ +#define VERR_SUPDRV_VTG_BAD_PROBE_ENABLED (-3719) +/** Bad VTG probe location record. */ +#define VERR_SUPDRV_VTG_BAD_PROBE_LOC (-3720) +/** The VTG object for the session or image has already been registered. */ +#define VERR_SUPDRV_VTG_ALREADY_REGISTERED (-3721) +/** A driver may only register one VTG object per session. */ +#define VERR_SUPDRV_VTG_ONLY_ONCE_PER_SESSION (-3722) +/** A tracer has already been registered. */ +#define VERR_SUPDRV_TRACER_ALREADY_REGISTERED (-3723) +/** The session has no tracer associated with it. */ +#define VERR_SUPDRV_TRACER_NOT_REGISTERED (-3724) +/** The tracer has already been opened in this sesssion. */ +#define VERR_SUPDRV_TRACER_ALREADY_OPENED (-3725) +/** The tracer has not been opened. */ +#define VERR_SUPDRV_TRACER_NOT_OPENED (-3726) +/** There is no tracer present. */ +#define VERR_SUPDRV_TRACER_NOT_PRESENT (-3727) +/** The tracer is unloading. */ +#define VERR_SUPDRV_TRACER_UNLOADING (-3728) +/** Another thread in the session is talking to the tracer. */ +#define VERR_SUPDRV_TRACER_SESSION_BUSY (-3729) +/** The tracer cannot open it self in the same session. */ +#define VERR_SUPDRV_TRACER_CANNOT_OPEN_SELF (-3730) +/** Bad argument flags. */ +#define VERR_SUPDRV_TRACER_BAD_ARG_FLAGS (-3731) +/** The session has reached the max number of (user mode) providers. */ +#define VERR_SUPDRV_TRACER_TOO_MANY_PROVIDERS (-3732) +/** The tracepoint provider object is too large. */ +#define VERR_SUPDRV_TRACER_TOO_LARGE (-3733) +/** The probe location array isn't adjacent to the probe enable array. */ +#define VERR_SUPDRV_TRACER_UMOD_NOT_ADJACENT (-3734) +/** The user mode tracepoint provider has too many probe locations and + * probes. */ +#define VERR_SUPDRV_TRACER_UMOD_TOO_MANY_PROBES (-3735) +/** The user mode tracepoint provider string table is too large. */ +#define VERR_SUPDRV_TRACER_UMOD_STRTAB_TOO_BIG (-3736) +/** The user mode tracepoint provider string table offset is bad. */ +#define VERR_SUPDRV_TRACER_UMOD_STRTAB_OFF_BAD (-3737) +/** The VM process was denied access to vboxdrv because someone have managed to + * open the process or its main thread with too broad access rights. */ +#define VERR_SUPDRV_HARDENING_EVIL_HANDLE (-3738) +/** Error opening the ApiPort LPC object. */ +#define VERR_SUPDRV_APIPORT_OPEN_ERROR (-3739) +/** Error enumerating all processes in the session. */ +#define VERR_SUPDRV_SESSION_PROCESS_ENUM_ERROR (-3740) +/** The CSRSS instance associated with the client process could not be + * located. */ +#define VERR_SUPDRV_CSRSS_NOT_FOUND (-3741) +/** Type error opening the ApiPort LPC object. */ +#define VERR_SUPDRV_APIPORT_OPEN_ERROR_TYPE (-3742) +/** Failed to measure the TSC delta between two CPUs. */ +#define VERR_SUPDRV_TSC_DELTA_MEASUREMENT_FAILED (-3743) +/** Failed to calculate the TSC frequency. */ +#define VERR_SUPDRV_TSC_FREQ_MEASUREMENT_FAILED (-3744) +/** Failed to get the delta-adjusted TSC value. */ +#define VERR_SUPDRV_TSC_READ_FAILED (-3745) +/** Failed to measure the TSC delta between two CPUs, continue without any + * TSC-delta. */ +#define VWRN_SUPDRV_TSC_DELTA_MEASUREMENT_FAILED 3746 +/** A TSC-delta measurement request is currently being serviced. */ +#define VERR_SUPDRV_TSC_DELTA_MEASUREMENT_BUSY (-3747) +/** The process trying to open VBoxDrv is not a budding VM process (1). */ +#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1 (-3748) +/** The process trying to open VBoxDrv is not a budding VM process (2). */ +#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2 (-3749) +/** @} */ + + +/** @name Support Library Status Codes + * @{ + */ +/** The specified path was not absolute (hardening). */ +#define VERR_SUPLIB_PATH_NOT_ABSOLUTE (-3750) +/** The specified path was not clean (hardening). */ +#define VERR_SUPLIB_PATH_NOT_CLEAN (-3751) +/** The specified path is too long (hardening). */ +#define VERR_SUPLIB_PATH_TOO_LONG (-3752) +/** The specified path is too short (hardening). */ +#define VERR_SUPLIB_PATH_TOO_SHORT (-3753) +/** The specified path has too many components (hardening). */ +#define VERR_SUPLIB_PATH_TOO_MANY_COMPONENTS (-3754) +/** The specified path is a root path (hardening). */ +#define VERR_SUPLIB_PATH_IS_ROOT (-3755) +/** Failed to enumerate directory (hardening). */ +#define VERR_SUPLIB_DIR_ENUM_FAILED (-3756) +/** Failed to stat a file/dir during enumeration (hardening). */ +#define VERR_SUPLIB_STAT_ENUM_FAILED (-3757) +/** Failed to stat a file/dir (hardening). */ +#define VERR_SUPLIB_STAT_FAILED (-3758) +/** Failed to fstat a native handle (hardening). */ +#define VERR_SUPLIB_FSTAT_FAILED (-3759) +/** Found an illegal symbolic link (hardening). */ +#define VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED (-3760) +/** Found something which isn't a file nor a directory (hardening). */ +#define VERR_SUPLIB_NOT_DIR_NOT_FILE (-3761) +/** The specified path is a directory and not a file (hardening). */ +#define VERR_SUPLIB_IS_DIRECTORY (-3762) +/** The specified path is a file and not a directory (hardening). */ +#define VERR_SUPLIB_IS_FILE (-3763) +/** The path is not the same object as the native handle (hardening). */ +#define VERR_SUPLIB_NOT_SAME_OBJECT (-3764) +/** The owner is not root (hardening). */ +#define VERR_SUPLIB_OWNER_NOT_ROOT (-3765) +/** The group is a non-system group and it has write access (hardening). */ +#define VERR_SUPLIB_WRITE_NON_SYS_GROUP (-3766) +/** The file or directory is world writable (hardening). */ +#define VERR_SUPLIB_WORLD_WRITABLE (-3767) +/** The argv[0] of an internal application does not match the executable image + * path (hardening). */ +#define VERR_SUPLIB_INVALID_ARGV0_INTERNAL (-3768) +/** The internal application does not reside in the correct place (hardening). */ +#define VERR_SUPLIB_INVALID_INTERNAL_APP_DIR (-3769) +/** Unable to establish trusted of VM process (0). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_0 (-3770) +/** Unable to establish trusted of VM process (1). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_1 (-3771) +/** Unable to establish trusted of VM process (2). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_2 (-3772) +/** Unable to establish trusted of VM process (3). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_3 (-3773) +/** Unable to establish trusted of VM process (4). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_4 (-3774) +/** Unable to establish trusted of VM process (5). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_5 (-3775) +/** Unable to make text memory writeable (hardening). */ +#define VERR_SUPLIB_TEXT_NOT_WRITEABLE (-3776) +/** Unable to seal text memory again to protect against write access (hardening). */ +#define VERR_SUPLIB_TEXT_NOT_SEALED (-3777) +/** Unexpected instruction encountered for which there is no patch strategy + * implemented (hardening). */ +#define VERR_SUPLIB_UNEXPECTED_INSTRUCTION (-3778) +/** @} */ + + +/** @name VBox GMM Status Codes + * @{ + */ +/** The GMM is out of pages and needs to be give another chunk of user memory that + * it can lock down and borrow pages from. */ +#define VERR_GMM_SEED_ME (-3800) +/** Unable to allocate more pages from the host system. */ +#define VERR_GMM_OUT_OF_MEMORY (-3801) +/** Hit the global allocation limit. + * If you know there is still sufficient memory available, try raising the limit. */ +#define VERR_GMM_HIT_GLOBAL_LIMIT (-3802) +/** Hit the a VM account limit. */ +#define VERR_GMM_HIT_VM_ACCOUNT_LIMIT (-3803) +/** Attempt to free more memory than what was previously allocated. */ +#define VERR_GMM_ATTEMPT_TO_FREE_TOO_MUCH (-3804) +/** Attempted to report too many pages as deflated. */ +#define VERR_GMM_ATTEMPT_TO_DEFLATE_TOO_MUCH (-3805) +/** The page to be freed or updated was not found. */ +#define VERR_GMM_PAGE_NOT_FOUND (-3806) +/** The specified shared page was not actually private. */ +#define VERR_GMM_PAGE_NOT_PRIVATE (-3807) +/** The specified shared page was not actually shared. */ +#define VERR_GMM_PAGE_NOT_SHARED (-3808) +/** The page to be freed was already freed. */ +#define VERR_GMM_PAGE_ALREADY_FREE (-3809) +/** The page to be updated or freed was noted owned by the caller. */ +#define VERR_GMM_NOT_PAGE_OWNER (-3810) +/** The specified chunk was not found. */ +#define VERR_GMM_CHUNK_NOT_FOUND (-3811) +/** The chunk has already been mapped into the process. */ +#define VERR_GMM_CHUNK_ALREADY_MAPPED (-3812) +/** The chunk to be unmapped isn't actually mapped into the process. */ +#define VERR_GMM_CHUNK_NOT_MAPPED (-3813) +/** The chunk has been mapped too many times already (impossible). */ +#define VERR_GMM_TOO_MANY_CHUNK_MAPPINGS (-3814) +/** The reservation or reservation update was declined - too many VMs, too + * little memory, and/or too low GMM configuration. */ +#define VERR_GMM_MEMORY_RESERVATION_DECLINED (-3815) +/** A GMM sanity check failed. */ +#define VERR_GMM_IS_NOT_SANE (-3816) +/** Inserting a new chunk failed. */ +#define VERR_GMM_CHUNK_INSERT (-3817) +/** Failed to obtain the GMM instance. */ +#define VERR_GMM_INSTANCE (-3818) +/** Bad mutex semaphore flags. */ +#define VERR_GMM_MTX_FLAGS (-3819) +/** Internal processing error in the page allocator. */ +#define VERR_GMM_ALLOC_PAGES_IPE (-3820) +/** Invalid page count given to GMMR3FreePagesPerform. */ +#define VERR_GMM_ACTUAL_PAGES_IPE (-3821) +/** The shared module name is too long. */ +#define VERR_GMM_MODULE_NAME_TOO_LONG (-3822) +/** The shared module version string is too long. */ +#define VERR_GMM_MODULE_VERSION_TOO_LONG (-3823) +/** The shared module has too many regions. */ +#define VERR_GMM_TOO_MANY_REGIONS (-3824) +/** The guest has reported too many modules. */ +#define VERR_GMM_TOO_MANY_PER_VM_MODULES (-3825) +/** The guest has reported too many modules. */ +#define VERR_GMM_TOO_MANY_GLOBAL_MODULES (-3826) +/** The shared module is already registered. */ +#define VINF_GMM_SHARED_MODULE_ALREADY_REGISTERED (3827) +/** The shared module clashed address wise with a previously registered + * module. */ +#define VERR_GMM_SHARED_MODULE_ADDRESS_CLASH (-3828) +/** The shared module was not found. */ +#define VERR_GMM_SHARED_MODULE_NOT_FOUND (-3829) +/** The size of the shared module was out of range. */ +#define VERR_GMM_BAD_SHARED_MODULE_SIZE (-3830) +/** The size of the one or more regions in the shared module was out of + * range. */ +#define VERR_GMM_SHARED_MODULE_BAD_REGIONS_SIZE (-3831) +/** @} */ + + +/** @name VBox GVM Status Codes + * @{ + */ +/** The GVM is out of VM handle space. */ +#define VERR_GVM_TOO_MANY_VMS (-3900) +/** The EMT was not blocked at the time of the call. */ +#define VINF_GVM_NOT_BLOCKED 3901 +/** The EMT was not busy running guest code at the time of the call. */ +#define VINF_GVM_NOT_BUSY_IN_GC 3902 +/** RTThreadYield was called during a GVMMR0SchedPoll call. */ +#define VINF_GVM_YIELDED 3903 +/** @} */ + + +/** @name VBox VMX Status Codes + * @{ + */ +/** VMXON failed; possibly because it was already run before. */ +#define VERR_VMX_VMXON_FAILED (-4000) +/** Invalid VMCS pointer. + * (Can be OR'ed with VERR_VMX_INVALID_VMCS_FIELD.) */ +#define VERR_VMX_INVALID_VMCS_PTR (-4001) +/** Invalid VMCS index or write to read-only element. */ +#define VERR_VMX_INVALID_VMCS_FIELD (-4002) +/** Reserved for future status code that we wish to OR with + * VERR_VMX_INVALID_VMCS_PTR and VERR_VMX_INVALID_VMCS_FIELD. */ +#define VERR_VMX_RESERVED (-4003) +/** Invalid VMXON pointer. */ +#define VERR_VMX_INVALID_VMXON_PTR (-4004) +/** Unable to start VM execution. */ +#define VERR_VMX_UNABLE_TO_START_VM (-4005) +/** Unable to switch due to invalid host state. */ +#define VERR_VMX_INVALID_HOST_STATE (-4006) +/** IA32_FEATURE_CONTROL MSR not setup correcty (turn on VMX in the host system BIOS) */ +#define VERR_VMX_ILLEGAL_FEATURE_CONTROL_MSR (-4007) +/** Invalid CPU mode for VMX execution. */ +#define VERR_VMX_UNSUPPORTED_MODE (-4008) +/** VMX CPU extension not available */ +#define VERR_VMX_NO_VMX (-4009) +/** CPU was incorrectly left in VMX root mode; incompatible with VirtualBox */ +#define VERR_VMX_IN_VMX_ROOT_MODE (-4011) +/** Somebody cleared X86_CR4_VMXE in the CR4 register. */ +#define VERR_VMX_X86_CR4_VMXE_CLEARED (-4012) +/** Failed to enable and lock VT-x features. */ +#define VERR_VMX_MSR_LOCKING_FAILED (-4013) +/** Unable to switch due to invalid guest state. */ +#define VERR_VMX_INVALID_GUEST_STATE (-4014) +/** Unexpected VM exit. */ +#define VERR_VMX_UNEXPECTED_EXIT (-4015) +/** Unexpected VM exception. */ +#define VERR_VMX_UNEXPECTED_EXCEPTION (-4016) +/** Unexpected interruption exit type. */ +#define VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE (-4017) +/** CPU is not in VMX root mode; unexpected when leaving VMX root mode. */ +#define VERR_VMX_NOT_IN_VMX_ROOT_MODE (-4018) +/** Undefined VM exit code. */ +#define VERR_VMX_UNDEFINED_EXIT_CODE (-4019) +/** VMPTRLD failed; possibly because of invalid VMCS launch-state. */ +#define VERR_VMX_VMPTRLD_FAILED (-4021) +/** Invalid VMCS pointer passed to VMLAUNCH/VMRESUME. */ +#define VERR_VMX_INVALID_VMCS_PTR_TO_START_VM (-4022) +/** Internal VMX processing error no 1. */ +#define VERR_VMX_IPE_1 (-4023) +/** Internal VMX processing error no 2. */ +#define VERR_VMX_IPE_2 (-4024) +/** Internal VMX processing error no 3. */ +#define VERR_VMX_IPE_3 (-4025) +/** Internal VMX processing error no 4. */ +#define VERR_VMX_IPE_4 (-4026) +/** Internal VMX processing error no 5. */ +#define VERR_VMX_IPE_5 (-4027) +/** VT-x features for all modes (SMX and non-SMX) disabled by the BIOS. */ +#define VERR_VMX_MSR_ALL_VMX_DISABLED (-4028) +/** VT-x features disabled by the BIOS. */ +#define VERR_VMX_MSR_VMX_DISABLED (-4029) +/** VM-Entry Controls internal cache invalid. */ +#define VERR_VMX_ENTRY_CTLS_CACHE_INVALID (-4030) +/** VM-Exit Controls internal cache invalid. */ +#define VERR_VMX_EXIT_CTLS_CACHE_INVALID (-4031) +/** VM-Execution Pin-based Controls internal cache invalid. */ +#define VERR_VMX_PIN_EXEC_CTLS_CACHE_INVALID (-4032) +/** VM-Execution Primary Processor-based Controls internal cache + * invalid. */ +#define VERR_VMX_PROC_EXEC_CTLS_CACHE_INVALID (-4033) +/** VM-Execution Secondary Processor-based Controls internal + * cache invalid. */ +#define VERR_VMX_PROC_EXEC2_CTLS_CACHE_INVALID (-4034) +/** Failed to set VMXON enable bit while enabling VT-x through the MSR. */ +#define VERR_VMX_MSR_VMX_ENABLE_FAILED (-4035) +/** Failed to enable VMXON-in-SMX bit while enabling VT-x through the MSR. */ +#define VERR_VMX_MSR_SMX_VMX_ENABLE_FAILED (-4036) +/** @} */ + + +/** @name VBox SVM Status Codes + * @{ + */ +/** Unable to start VM execution. */ +#define VERR_SVM_UNABLE_TO_START_VM (-4050) +/** AMD-V bit not set in K6_EFER MSR */ +#define VERR_SVM_ILLEGAL_EFER_MSR (-4051) +/** AMD-V CPU extension not available. */ +#define VERR_SVM_NO_SVM (-4052) +/** AMD-V CPU extension disabled (by BIOS). */ +#define VERR_SVM_DISABLED (-4053) +/** AMD-V CPU extension in-use. */ +#define VERR_SVM_IN_USE (-4054) +/** Invalid pVMCB. */ +#define VERR_SVM_INVALID_PVMCB (-4055) +/** Unexpected SVM exit. */ +#define VERR_SVM_UNEXPECTED_EXIT (-4056) +/** Unexpected SVM exception exit. */ +#define VERR_SVM_UNEXPECTED_XCPT_EXIT (-4057) +/** Unexpected SVM patch type. */ +#define VERR_SVM_UNEXPECTED_PATCH_TYPE (-4058) +/** Unable to start VM execution due to an invalid guest state. */ +#define VERR_SVM_INVALID_GUEST_STATE (-4059) +/** Unknown or unrecognized SVM exit. */ +#define VERR_SVM_UNKNOWN_EXIT (-4060) +/** Internal SVM processing error no 1. */ +#define VERR_SVM_IPE_1 (-4061) +/** Internal SVM processing error no 2. */ +#define VERR_SVM_IPE_2 (-4062) +/** Internal SVM processing error no 3. */ +#define VERR_SVM_IPE_3 (-4063) +/** Internal SVM processing error no 4. */ +#define VERR_SVM_IPE_4 (-4064) +/** Internal SVM processing error no 5. */ +#define VERR_SVM_IPE_5 (-4065) +/** The nested-guest \#VMEXIT processing failed, initiate shutdown. */ +#define VERR_SVM_VMEXIT_FAILED (-4066) +/** An operation caused a nested-guest SVM \#VMEXIT. */ +#define VINF_SVM_VMEXIT 4067 +/** VMRUN emulation succeeded, ready to immediately enter the nested-guest. */ +#define VINF_SVM_VMRUN 4068 +/** @} */ + + +/** @name VBox HM Status Codes + * @{ + */ +/** Unable to start VM execution. */ +#define VERR_HM_UNKNOWN_CPU (-4100) +/** No CPUID support. */ +#define VERR_HM_NO_CPUID (-4101) +/** Host is about to go into suspend mode. */ +#define VERR_HM_SUSPEND_PENDING (-4102) +/** Conflicting CFGM values. */ +#define VERR_HM_CONFIG_MISMATCH (-4103) +/** Internal processing error in the HM init code. */ +#define VERR_HM_ALREADY_ENABLED_IPE (-4104) +/** Unexpected MSR in the auto-load/store area. */ +#define VERR_HM_UNEXPECTED_LD_ST_MSR (-4105) +/** No 32-bit to 64-bit switcher in place. */ +#define VERR_HM_NO_32_TO_64_SWITCHER (-4106) +/** HMR0Leave was called on the wrong CPU. */ +#define VERR_HM_WRONG_CPU (-4107) +/** Internal processing error \#1 in the HM code. */ +#define VERR_HM_IPE_1 (-4108) +/** Internal processing error \#2 in the HM code. */ +#define VERR_HM_IPE_2 (-4109) +/** Wrong 32/64-bit switcher. */ +#define VERR_HM_WRONG_SWITCHER (-4110) +/** Unknown I/O instruction. */ +#define VERR_HM_UNKNOWN_IO_INSTRUCTION (-4111) +/** Unsupported CPU feature combination. */ +#define VERR_HM_UNSUPPORTED_CPU_FEATURE_COMBO (-4112) +/** Internal processing error \#3 in the HM code. */ +#define VERR_HM_IPE_3 (-4113) +/** Internal processing error \#4 in the HM code. */ +#define VERR_HM_IPE_4 (-4114) +/** Internal processing error \#5 in the HM code. */ +#define VERR_HM_IPE_5 (-4115) +/** Invalid HM64ON32OP value. */ +#define VERR_HM_INVALID_HM64ON32OP (-4116) +/** Resume guest execution after injecting a double-fault. */ +#define VINF_HM_DOUBLE_FAULT 4117 +/** The requested nested-guest VM-exit intercept is not active or not in + * nested-guest execution mode. */ +#define VINF_HM_INTERCEPT_NOT_ACTIVE 4118 +/** @} */ + + +/** @name VBox Disassembler Status Codes + * @{ + */ +/** Invalid opcode byte(s) */ +#define VERR_DIS_INVALID_OPCODE (-4200) +/** Generic failure during disassembly. */ +#define VERR_DIS_GEN_FAILURE (-4201) +/** No read callback. */ +#define VERR_DIS_NO_READ_CALLBACK (-4202) +/** Invalid Mod/RM. */ +#define VERR_DIS_INVALID_MODRM (-4203) +/** Invalid parameter index. */ +#define VERR_DIS_INVALID_PARAMETER (-4204) +/** The instruction is too long. */ +#define VERR_DIS_TOO_LONG_INSTR (-4206) +/** @} */ + + +/** @name VBox Webservice Status Codes + * @{ + */ +/** Authentication failed (ISessionManager::logon()) */ +#define VERR_WEB_NOT_AUTHENTICATED (-4300) +/** Invalid format of managed object reference */ +#define VERR_WEB_INVALID_MANAGED_OBJECT_REFERENCE (-4301) +/** Invalid session ID in managed object reference */ +#define VERR_WEB_INVALID_SESSION_ID (-4302) +/** Invalid object ID in managed object reference */ +#define VERR_WEB_INVALID_OBJECT_ID (-4303) +/** Unsupported interface for managed object reference */ +#define VERR_WEB_UNSUPPORTED_INTERFACE (-4304) +/** @} */ + + +/** @name VBox PARAV Status Codes + * @{ + */ +/** Switch back to host */ +#define VINF_PARAV_SWITCH_TO_HOST 4400 + +/** @} */ + +/** @name VBox Video HW Acceleration command status + * @{ + */ +/** command processing is pending, a completion handler will be called */ +#define VINF_VHWA_CMD_PENDING 4500 + +/** @} */ + + +/** @name VBox COM error codes + * + * @remarks Global::vboxStatusCodeToCOM and Global::vboxStatusCodeFromCOM uses + * these for conversion that is lossless with respect to important COM + * status codes. These methods should be moved to the glue library. + * @{ */ +/** Unexpected turn of events. */ +#define VERR_COM_UNEXPECTED (-4600) +/** The base of the VirtualBox COM status codes (the lower value) + * corresponding 1:1 to VBOX_E_XXX. This is the lowest value. */ +#define VERR_COM_VBOX_LOWEST (-4699) +/** Object corresponding to the supplied arguments does not exist. */ +#define VERR_COM_OBJECT_NOT_FOUND (VERR_COM_VBOX_LOWEST + 1) +/** Current virtual machine state prevents the operation. */ +#define VERR_COM_INVALID_VM_STATE (VERR_COM_VBOX_LOWEST + 2) +/** Virtual machine error occurred attempting the operation. */ +#define VERR_COM_VM_ERROR (VERR_COM_VBOX_LOWEST + 3) +/** File not accessible or erroneous file contents. */ +#define VERR_COM_FILE_ERROR (VERR_COM_VBOX_LOWEST + 4) +/** IPRT error. */ +#define VERR_COM_IPRT_ERROR (VERR_COM_VBOX_LOWEST + 5) +/** Pluggable Device Manager error. */ +#define VERR_COM_PDM_ERROR (VERR_COM_VBOX_LOWEST + 6) +/** Current object state prohibits operation. */ +#define VERR_COM_INVALID_OBJECT_STATE (VERR_COM_VBOX_LOWEST + 7) +/** Host operating system related error. */ +#define VERR_COM_HOST_ERROR (VERR_COM_VBOX_LOWEST + 8) +/** Requested operation is not supported. */ +#define VERR_COM_NOT_SUPPORTED (VERR_COM_VBOX_LOWEST + 9) +/** Invalid XML found. */ +#define VERR_COM_XML_ERROR (VERR_COM_VBOX_LOWEST + 10) +/** Current session state prohibits operation. */ +#define VERR_COM_INVALID_SESSION_STATE (VERR_COM_VBOX_LOWEST + 11) +/** Object being in use prohibits operation. */ +#define VERR_COM_OBJECT_IN_USE (VERR_COM_VBOX_LOWEST + 12) +/** Returned by callback methods which does not need to be called + * again because the client does not actually make use of them. */ +#define VERR_COM_DONT_CALL_AGAIN (VERR_COM_VBOX_LOWEST + 13) +/** @} */ + +/** @name VBox VMMDev Status codes + * @{ + */ +/** CPU hotplug events from VMMDev are not monitored by the guest. */ +#define VERR_VMMDEV_CPU_HOTPLUG_NOT_MONITORED_BY_GUEST (-4700) +/** @} */ + +/** @name VBox async I/O manager Status Codes + * @{ + */ +/** Async I/O task is pending, a completion handler will be called. */ +#define VINF_AIO_TASK_PENDING 4800 +/** @} */ + +/** @name VBox Virtual SCSI Status Codes + * @{ + */ +/** LUN type is not supported. */ +#define VERR_VSCSI_LUN_TYPE_NOT_SUPPORTED (-4900) +/** LUN is already/still attached to a device. */ +#define VERR_VSCSI_LUN_ATTACHED_TO_DEVICE (-4901) +/** The specified LUN is invalid. */ +#define VERR_VSCSI_LUN_INVALID (-4902) +/** The LUN is not attached to the device. */ +#define VERR_VSCSI_LUN_NOT_ATTACHED (-4903) +/** The LUN is still busy. */ +#define VERR_VSCSI_LUN_BUSY (-4904) +/** @} */ + +/** @name VBox FAM Status Codes + * @{ + */ +/** FAM failed to open a connection. */ +#define VERR_FAM_OPEN_FAILED (-5000) +/** FAM failed to add a file to the list to be monitored. */ +#define VERR_FAM_MONITOR_FILE_FAILED (-5001) +/** FAM failed to add a directory to the list to be monitored. */ +#define VERR_FAM_MONITOR_DIRECTORY_FAILED (-5002) +/** The connection to the FAM daemon was lost. */ +#define VERR_FAM_CONNECTION_LOST (-5003) +/** @} */ + + +/** @name PCI Passtrhough Status Codes + * @{ + */ +/** RamPreAlloc not set. + * RAM pre-allocation is currently a requirement for PCI passthrough. */ +#define VERR_PCI_PASSTHROUGH_NO_RAM_PREALLOC (-5100) +/** VT-x/AMD-V not active. + * PCI passthrough currently works only if VT-x/AMD-V is active. */ +#define VERR_PCI_PASSTHROUGH_NO_HM (-5101) +/** Nested paging not active. + * PCI passthrough currently works only if nested paging is active. */ +#define VERR_PCI_PASSTHROUGH_NO_NESTED_PAGING (-5102) +/** @} */ + + +/** @name GVMM Status Codes + * @{ + */ +/** Internal error obtaining the GVMM instance. */ +#define VERR_GVMM_INSTANCE (-5200) +/** GVMM does not support the range of CPUs present/possible on the host. */ +#define VERR_GVMM_HOST_CPU_RANGE (-5201) +/** GVMM ran into some broken IPRT code. */ +#define VERR_GVMM_BROKEN_IPRT (-5202) +/** Internal processing error \#1 in the GVMM code. */ +#define VERR_GVMM_IPE_1 (-5203) +/** Internal processing error \#2 in the GVMM code. */ +#define VERR_GVMM_IPE_2 (-5204) +/** Cannot destroy VM because not all other EMTs have deregistered. */ +#define VERR_GVMM_NOT_ALL_EMTS_DEREGISTERED (-5205) +/** @} */ + + +/** @name IEM Status Codes + * @{ */ +/** The instruction is not yet implemented by IEM. */ +#define VERR_IEM_INSTR_NOT_IMPLEMENTED (-5300) +/** Invalid operand size passed to an IEM function. */ +#define VERR_IEM_INVALID_OPERAND_SIZE (-5301) +/** Invalid address mode passed to an IEM function. */ +#define VERR_IEM_INVALID_ADDRESS_MODE (-5302) +/** Invalid effective segment register number passed to an IEM function. */ +#define VERR_IEM_INVALID_EFF_SEG (-5303) +/** Invalid instruction length passed to an IEM function. */ +#define VERR_IEM_INVALID_INSTR_LENGTH (-5304) +/** Internal status code for indicating that a selector isn't valid (LAR, LSL, + * VERR, VERW). This is not used outside the instruction implementations. */ +#define VINF_IEM_SELECTOR_NOT_OK (5305) +/** Restart the current instruction. For testing only. */ +#define VERR_IEM_RESTART_INSTRUCTION (-5389) +/** This particular aspect of the instruction is not yet implemented by IEM. */ +#define VERR_IEM_ASPECT_NOT_IMPLEMENTED (-5390) +/** Internal processing error \#1 in the IEM code. */ +#define VERR_IEM_IPE_1 (-5391) +/** Internal processing error \#2 in the IEM code. */ +#define VERR_IEM_IPE_2 (-5392) +/** Internal processing error \#3 in the IEM code. */ +#define VERR_IEM_IPE_3 (-5393) +/** Internal processing error \#4 in the IEM code. */ +#define VERR_IEM_IPE_4 (-5394) +/** Internal processing error \#5 in the IEM code. */ +#define VERR_IEM_IPE_5 (-5395) +/** Internal processing error \#6 in the IEM code. */ +#define VERR_IEM_IPE_6 (-5396) +/** Internal processing error \#7 in the IEM code. */ +#define VERR_IEM_IPE_7 (-5397) +/** Internal processing error \#8 in the IEM code. */ +#define VERR_IEM_IPE_8 (-5398) +/** Internal processing error \#9 in the IEM code. */ +#define VERR_IEM_IPE_9 (-5399) +/** @} */ + + +/** @name DBGC Status Codes + * @{ */ +/** Status that causes DBGC to quit. */ +#define VERR_DBGC_QUIT (-5400) +/** Async command pending. */ +#define VWRN_DBGC_CMD_PENDING 5401 +/** The command has already been registered. */ +#define VWRN_DBGC_ALREADY_REGISTERED 5402 +/** The command cannot be deregistered because has not been registered. */ +#define VERR_DBGC_COMMANDS_NOT_REGISTERED (-5403) +/** Unknown breakpoint. */ +#define VERR_DBGC_BP_NOT_FOUND (-5404) +/** The breakpoint already exists. */ +#define VERR_DBGC_BP_EXISTS (-5405) +/** The breakpoint has no command. */ +#define VINF_DBGC_BP_NO_COMMAND 5406 +/** Generic debugger command failure. */ +#define VERR_DBGC_COMMAND_FAILED (-5407) +/** Logic bug in the DBGC code. */ +#define VERR_DBGC_IPE (-5408) + +/** The lowest parse status code. */ +#define VERR_DBGC_PARSE_LOWEST (-5499) +/** Syntax error - too few arguments. */ +#define VERR_DBGC_PARSE_TOO_FEW_ARGUMENTS (VERR_DBGC_PARSE_LOWEST + 0) +/** Syntax error - too many arguments. */ +#define VERR_DBGC_PARSE_TOO_MANY_ARGUMENTS (VERR_DBGC_PARSE_LOWEST + 1) +/** Syntax error - too many arguments for static storage. */ +#define VERR_DBGC_PARSE_ARGUMENT_OVERFLOW (VERR_DBGC_PARSE_LOWEST + 2) +/** Syntax error - expected binary operator. */ +#define VERR_DBGC_PARSE_EXPECTED_BINARY_OP (VERR_DBGC_PARSE_LOWEST + 3) + +/** Syntax error - the argument does not allow a range to be specified. */ +#define VERR_DBGC_PARSE_NO_RANGE_ALLOWED (VERR_DBGC_PARSE_LOWEST + 5) +/** Syntax error - unbalanced quotes. */ +#define VERR_DBGC_PARSE_UNBALANCED_QUOTE (VERR_DBGC_PARSE_LOWEST + 6) +/** Syntax error - unbalanced parenthesis. */ +#define VERR_DBGC_PARSE_UNBALANCED_PARENTHESIS (VERR_DBGC_PARSE_LOWEST + 7) +/** Syntax error - an argument or subargument contains nothing useful. */ +#define VERR_DBGC_PARSE_EMPTY_ARGUMENT (VERR_DBGC_PARSE_LOWEST + 8) +/** Syntax error - invalid operator usage. */ +#define VERR_DBGC_PARSE_UNEXPECTED_OPERATOR (VERR_DBGC_PARSE_LOWEST + 9) +/** Syntax error - invalid numeric value. */ +#define VERR_DBGC_PARSE_INVALID_NUMBER (VERR_DBGC_PARSE_LOWEST + 10) +/** Syntax error - numeric overflow. */ +#define VERR_DBGC_PARSE_NUMBER_TOO_BIG (VERR_DBGC_PARSE_LOWEST + 11) +/** Syntax error - invalid operation attempted. */ +#define VERR_DBGC_PARSE_INVALID_OPERATION (VERR_DBGC_PARSE_LOWEST + 12) +/** Syntax error - function not found. */ +#define VERR_DBGC_PARSE_FUNCTION_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 13) +/** Syntax error - the specified function is not a function. */ +#define VERR_DBGC_PARSE_NOT_A_FUNCTION (VERR_DBGC_PARSE_LOWEST + 14) +/** Syntax error - out of scratch memory. */ +#define VERR_DBGC_PARSE_NO_SCRATCH (VERR_DBGC_PARSE_LOWEST + 15) +/** Syntax error - out of regular heap memory. */ +#define VERR_DBGC_PARSE_NO_MEMORY (VERR_DBGC_PARSE_LOWEST + 16) +/** Syntax error - incorrect argument type. */ +#define VERR_DBGC_PARSE_INCORRECT_ARG_TYPE (VERR_DBGC_PARSE_LOWEST + 17) +/** Syntax error - an undefined variable was referenced. */ +#define VERR_DBGC_PARSE_VARIABLE_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 18) +/** Syntax error - a type conversion failed. */ +#define VERR_DBGC_PARSE_CONVERSION_FAILED (VERR_DBGC_PARSE_LOWEST + 19) +/** Syntax error - you hit a debugger feature which isn't implemented yet. + * (Feel free to help implement it.) */ +#define VERR_DBGC_PARSE_NOT_IMPLEMENTED (VERR_DBGC_PARSE_LOWEST + 20) +/** Syntax error - Couldn't satisfy a request for a specific result type. */ +#define VERR_DBGC_PARSE_BAD_RESULT_TYPE (VERR_DBGC_PARSE_LOWEST + 21) +/** Syntax error - Cannot read symbol value, it is a set-only symbol. */ +#define VERR_DBGC_PARSE_WRITEONLY_SYMBOL (VERR_DBGC_PARSE_LOWEST + 22) +/** Syntax error - Invalid command name. */ +#define VERR_DBGC_PARSE_INVALD_COMMAND_NAME (VERR_DBGC_PARSE_LOWEST + 23) +/** Syntax error - Command not found. */ +#define VERR_DBGC_PARSE_COMMAND_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 24) +/** Syntax error - buggy parser. */ +#define VERR_DBGC_PARSE_BUG (VERR_DBGC_PARSE_LOWEST + 25) +/** @} */ + + +/** @name Support driver/library shared verification status codes. + * @{ */ +/** Process Verification Failure: The memory content does not match the image + * file. */ +#define VERR_SUP_VP_MEMORY_VS_FILE_MISMATCH (-5600) +/** Process Verification Failure: The memory protection of a image file section + * does not match what the section header prescribes. */ +#define VERR_SUP_VP_SECTION_PROTECTION_MISMATCH (-5601) +/** Process Verification Failure: One of the section in the image file is not + * mapped into memory. */ +#define VERR_SUP_VP_SECTION_NOT_MAPPED (-5602) +/** Process Verification Failure: One of the section in the image file is not + * fully mapped into memory. */ +#define VERR_SUP_VP_SECTION_NOT_FULLY_MAPPED (-5603) +/** Process Verification Failure: Bad file alignment value in image header. */ +#define VERR_SUP_VP_BAD_FILE_ALIGNMENT_VALUE (-5604) +/** Process Verification Failure: Bad image base in header. */ +#define VERR_SUP_VP_BAD_IMAGE_BASE (-5605) +/** Process Verification Failure: Bad image signature. */ +#define VERR_SUP_VP_BAD_IMAGE_SIGNATURE (-5606) +/** Process Verification Failure: Bad image size. */ +#define VERR_SUP_VP_BAD_IMAGE_SIZE (-5607) +/** Process Verification Failure: Bad new-header offset in the MZ header. */ +#define VERR_SUP_VP_BAD_MZ_OFFSET (-5608) +/** Process Verification Failure: Bad optional header field. */ +#define VERR_SUP_VP_BAD_OPTIONAL_HEADER (-5609) +/** Process Verification Failure: Bad section alignment value in image + * header. */ +#define VERR_SUP_VP_BAD_SECTION_ALIGNMENT_VALUE (-5610) +/** Process Verification Failure: Bad section raw data size. */ +#define VERR_SUP_VP_BAD_SECTION_FILE_SIZE (-5611) +/** Process Verification Failure: Bad virtual section address. */ +#define VERR_SUP_VP_BAD_SECTION_RVA (-5612) +/** Process Verification Failure: Bad virtual section size. */ +#define VERR_SUP_VP_BAD_SECTION_VIRTUAL_SIZE (-5613) +/** Process Verification Failure: Bad size of image header. */ +#define VERR_SUP_VP_BAD_SIZE_OF_HEADERS (-5614) +/** Process Verification Failure: The process is being debugged. */ +#define VERR_SUP_VP_DEBUGGED (-5615) +/** Process Verification Failure: A DLL was found more than once. */ +#define VERR_SUP_VP_DUPLICATE_DLL_MAPPING (-5616) +/** Process Verification Failure: Image section region is too large. */ +#define VERR_SUP_VP_EMPTY_REGION_TOO_LARGE (-5617) +/** Process Verification Failure: Executable file name and process image name + * does not match up. */ +#define VERR_SUP_VP_EXE_VS_PROC_NAME_MISMATCH (-5618) +/** Process Verification Failure: Found executable memory allocated in the + * process. There is only supposed be executable memory associated with + * image file mappings (DLLs & EXE). */ +#define VERR_SUP_VP_FOUND_EXEC_MEMORY (-5619) +/** Process Verification Failure: There is more than one known executable mapped + * into the process. */ +#define VERR_SUP_VP_FOUND_MORE_THAN_ONE_EXE_MAPPING (-5620) +/** Process Verification Failure: Error closing image file handle. */ +#define VERR_SUP_VP_IMAGE_FILE_CLOSE_ERROR (-5621) +/** Process Verification Failure: Error opening image file. */ +#define VERR_SUP_VP_IMAGE_FILE_OPEN_ERROR (-5622) +/** Process Verification Failure: Error reading image file header. */ +#define VERR_SUP_VP_IMAGE_HDR_READ_ERROR (-5623) +/** Process Verification Failure: Image mapping is bogus as the first region + * has different AllocationBase and BaseAddress values, indicating that a + * section was unmapped or otherwise tampered with. */ +#define VERR_SUP_VP_IMAGE_MAPPING_BASE_ERROR (-5624) +/** Process Verification Failure: Error reading process memory for comparing + * with disk data. */ +#define VERR_SUP_VP_MEMORY_READ_ERROR (-5625) +/** Process Verification Failure: Found no executable mapped into the process + * address space. */ +#define VERR_SUP_VP_NO_FOUND_NO_EXE_MAPPING (-5626) +/** Process Verification Failure: An image mapping failed to report a name. */ +#define VERR_SUP_VP_NO_IMAGE_MAPPING_NAME (-5627) +/** Process Verification Failure: No KERNE32.DLL mapping found. This is + * impossible. */ +#define VERR_SUP_VP_NO_KERNEL32_MAPPING (-5628) +/** Process Verification Failure: Error allocating memory. */ +#define VERR_SUP_VP_NO_MEMORY (-5629) +/** Process Verification Failure: Error allocating state memory or querying + * the system32 path. */ +#define VERR_SUP_VP_NO_MEMORY_STATE (-5630) +/** Process Verification Failure: No NTDLL.DLL mapping found. This is + * impossible. */ +#define VERR_SUP_VP_NO_NTDLL_MAPPING (-5631) +/** Process Verification Failure: A DLL residing outside System32 was found + * in the process. */ +#define VERR_SUP_VP_NON_SYSTEM32_DLL (-5632) +/** Process Verification Failure: An unknown and unwanted DLL was found loaded + * into the process. */ +#define VERR_SUP_VP_NOT_KNOWN_DLL_OR_EXE (-5633) +/** Process Verification Failure: The name of an image file changes between + * mapping regions. */ +#define VERR_SUP_VP_NT_MAPPING_NAME_CHANGED (-5634) +/** Process Verification Failure: Error querying process name. */ +#define VERR_SUP_VP_NT_QI_PROCESS_NM_ERROR (-5635) +/** Process Verification Failure: Error querying thread information. */ +#define VERR_SUP_VP_NT_QI_THREAD_ERROR (-5636) +/** Process Verification Failure: Error query virtual memory information. */ +#define VERR_SUP_VP_NT_QI_VIRTUAL_MEMORY_ERROR (-5637) +/** Process Verification Failure: Error query virtual memory mapping name. */ +#define VERR_SUP_VP_NT_QI_VIRTUAL_MEMORY_NM_ERROR (-5638) +/** Process Verification Failure: Error determining the full path of + * System32. */ +#define VERR_SUP_VP_SYSTEM32_PATH (-5639) +/** Process Verification Failure: The process has more than one thread. */ +#define VERR_SUP_VP_THREAD_NOT_ALONE (-5640) +/** Process Verification Failure: The image mapping is too large (>= 2GB). */ +#define VERR_SUP_VP_TOO_HIGH_REGION_RVA (-5641) +/** Process Verification Failure: The memory region is too large (>= 2GB). */ +#define VERR_SUP_VP_TOO_LARGE_REGION (-5642) +/** Process Verification Failure: There are too many DLLs loaded. */ +#define VERR_SUP_VP_TOO_MANY_DLLS_LOADED (-5643) +/** Process Verification Failure: An image has too many regions. */ +#define VERR_SUP_VP_TOO_MANY_IMAGE_REGIONS (-5644) +/** Process Verification Failure: The process has too many virtual memory + * regions. */ +#define VERR_SUP_VP_TOO_MANY_MEMORY_REGIONS (-5645) +/** Process Verification Failure: An image has too many sections. */ +#define VERR_SUP_VP_TOO_MANY_SECTIONS (-5646) +/** Process Verification Failure: An image is targeting an unexpected + * machine/CPU. */ +#define VERR_SUP_VP_UNEXPECTED_IMAGE_MACHINE (-5647) +/** Process Verification Failure: Unexpected section protection flag + * combination. */ +#define VERR_SUP_VP_UNEXPECTED_SECTION_FLAGS (-5648) +/** Process Verification Failure: Expected the process and exe to have forced + * integrity checking enabled (verifying signatures). */ +#define VERR_SUP_VP_EXE_MISSING_FORCE_INTEGRITY (-5649) +/** Process Verification Failure: Expected the process and exe to have dynamic + * base enabled. */ +#define VERR_SUP_VP_EXE_MISSING_DYNAMIC_BASE (-5650) +/** Process Verification Failure: Expected the process and exe to advertise + * NX compatibility. */ +#define VERR_SUP_VP_EXE_MISSING_NX_COMPAT (-5651) +/** Process Verification Failure: The DllCharacteristics of the process + * does not match the value in the optional header in the exe file. */ +#define VERR_SUP_VP_DLL_CHARECTERISTICS_MISMATCH (-5652) +/** Process Verification Failure: The ImageCharacteristics of the process + * does not match the value in the file header in the exe file. */ +#define VERR_SUP_VP_IMAGE_CHARECTERISTICS_MISMATCH (-5653) +/** Process Verification Failure: Error querying image information. */ +#define VERR_SUP_VP_NT_QI_PROCESS_IMG_INFO_ERROR (-5654) +/** Process Verification Failure: Error querying debug port. */ +#define VERR_SUP_VP_NT_QI_PROCESS_DBG_PORT_ERROR (-5655) +/** WinVerifyTrust failed with an unexpected status code when using the + * catalog-file approach. */ +#define VERR_SUP_VP_WINTRUST_CAT_FAILURE (-5656) +/** The image is required to be signed with the same certificate as the rest + * of VirtualBox. */ +#define VERR_SUP_VP_NOT_SIGNED_WITH_BUILD_CERT (-5657) +/** Internal processing error: Not build certificate. */ +#define VERR_SUP_VP_NOT_BUILD_CERT_IPE (-5658) +/** The image requires to be signed using the kernel-code signing process. */ +#define VERR_SUP_VP_NOT_VALID_KERNEL_CODE_SIGNATURE (-5659) +/** Unexpected number of valid paths. */ +#define VERR_SUP_VP_UNEXPECTED_VALID_PATH_COUNT (-5660) +/** The image is required to force integrity checks. */ +#define VERR_SUP_VP_SIGNATURE_CHECKS_NOT_ENFORCED (-5661) +/** Process Verification Failure: Symantec Endpoint Protection must be + * disabled for the VirtualBox VM processes. + * http://www.symantec.com/connect/articles/creating-application-control-exclusions-symantec-endpoint-protection-121 */ +#define VERR_SUP_VP_SYSFER_DLL (-5662) +/** Process Purification Failure: KERNE32.DLL already mapped into the initial + * process (suspended). */ +#define VERR_SUP_VP_KERNEL32_ALREADY_MAPPED (-5663) +/** Process Purification Failure: NtFreeVirtualMemory failed on a chunk of + * executable memory which shouldn't be present in the process. */ +#define VERR_SUP_VP_FREE_VIRTUAL_MEMORY_FAILED (-5664) +/** Process Purification Failure: Both NtUnmapViewOfSetion and + * NtProtectVirtualMemory failed to get rid of or passify an non-image + * executable mapping. */ +#define VERR_SUP_VP_UNMAP_AND_PROTECT_FAILED (-5665) +/** Process Purification Failure: Unknown memory type of executable memory. */ +#define VERR_SUP_VP_UNKOWN_MEM_TYPE (-5666) +/** The image file is not owned by TrustedInstaller is it should be. */ +#define VERR_SUP_VP_NOT_OWNED_BY_TRUSTED_INSTALLER (-5667) +/** The image is outside the expected range. */ +#define VERR_SUP_VP_IMAGE_TOO_BIG (-5668) +/** Stub process not found so it cannot be revalidated when vboxdrv is opened + * by the VM process. */ +#define VERR_SUP_VP_STUB_NOT_FOUND (-5669) +/** Error opening the stub process for revalidation when vboxdrv is opened by + * the VM process. */ +#define VERR_SUP_VP_STUB_OPEN_ERROR (-5670) +/** Stub process thread not found during revalidation upon vboxdrv opening by + * the VM process. */ +#define VERR_SUP_VP_STUB_THREAD_NOT_FOUND (-5671) +/** Error opening the stub process thread for revalidation when vboxdrv is + * opened by the VM process. */ +#define VERR_SUP_VP_STUB_THREAD_OPEN_ERROR (-5672) +/** Process Purification Failure: NtAllocateVirtualMemory failed to get us + * suitable replacement memory for a chunk of executable memory that + * shouldn't be present in our process. (You will only see this message if you + * got potentially fatally buggy anti-virus software installed.) */ +#define VERR_SUP_VP_REPLACE_VIRTUAL_MEMORY_FAILED (-5673) +/** Error getting the file mode. */ +#define VERR_SUP_VP_FILE_MODE_ERROR (-5674) +/** Error creating an event semaphore for used with asynchronous reads. */ +#define VERR_SUP_VP_CREATE_READ_EVT_SEM_FAILED (-5675) +/** Undesirable module. */ +#define VERR_SUP_VP_UNDESIRABLE_MODULE (-5676) + +/** @} */ + +/** @name VBox Extension Pack Status Codes + * @{ + */ +/** The host is not supported. Uninstall the extension pack. + * Returned by the VBOXEXTPACKREG::pfnInstalled. */ +#define VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL (-6000) +/** The VirtualBox version is not supported by one of the extension packs. + * + * You have probably upgraded VirtualBox recently. Please upgrade the + * extension packs to versions compatible with this VirtualBox release. + */ +#define VERR_EXTPACK_VBOX_VERSION_MISMATCH (-6001) +/** @} */ + + +/** @name VBox Guest Control Status Codes + * @{ + */ +/** Guest side reported an error. */ +#define VERR_GSTCTL_GUEST_ERROR (-6200) +/** A guest control object has changed its overall status. */ +#define VWRN_GSTCTL_OBJECTSTATE_CHANGED 6220 +/** Guest process is in a wrong state. */ +#define VERR_GSTCTL_PROCESS_WRONG_STATE (-6221) +/** Started guest process terminated with an exit code <> 0. */ +#define VWRN_GSTCTL_PROCESS_EXIT_CODE 6221 +/** @} */ + + +/** @name GIM Status Codes + * @{ + */ +/** No GIM provider is configured for this VM. */ +#define VERR_GIM_NOT_ENABLED (-6300) +/** GIM internal processing error \#1. */ +#define VERR_GIM_IPE_1 (-6301) +/** GIM internal processing error \#2. */ +#define VERR_GIM_IPE_2 (-6302) +/** GIM internal processing error \#3. */ +#define VERR_GIM_IPE_3 (-6303) +/** The GIM provider does not support any paravirtualized TSC. */ +#define VERR_GIM_PVTSC_NOT_AVAILABLE (-6304) +/** The guest has not setup use of the paravirtualized TSC. */ +#define VERR_GIM_PVTSC_NOT_ENABLED (-6305) +/** Unknown or invalid GIM provider. */ +#define VERR_GIM_INVALID_PROVIDER (-6306) +/** GIM generic operation failed. */ +#define VERR_GIM_OPERATION_FAILED (-6307) +/** The GIM provider does not support any hypercalls. */ +#define VERR_GIM_HYPERCALLS_NOT_AVAILABLE (-6308) +/** The guest has not setup use of the hypercalls. */ +#define VERR_GIM_HYPERCALLS_NOT_ENABLED (-6309) +/** The GIM device is not registered with GIM when it ought to be. */ +#define VERR_GIM_DEVICE_NOT_REGISTERED (-6310) +/** Hypercall cannot be enabled/performed due to access/permissions/CPL. */ +#define VERR_GIM_HYPERCALL_ACCESS_DENIED (-6311) +/** Failed to read to a memory region while performing a hypercall. */ +#define VERR_GIM_HYPERCALL_MEMORY_READ_FAILED (-6312) +/** Failed to write to a memory region while performing a hypercall. */ +#define VERR_GIM_HYPERCALL_MEMORY_WRITE_FAILED (-6313) +/** Generic hypercall operation failure. */ +#define VERR_GIM_HYPERCALL_FAILED (-6314) +/** No debug connection configured. */ +#define VERR_GIM_NO_DEBUG_CONNECTION (-6315) +/** Return to ring-3 to perform the hypercall there. */ +#define VINF_GIM_R3_HYPERCALL 6316 +/** Continuing hypercall at the same RIP, continue guest execution. */ +#define VINF_GIM_HYPERCALL_CONTINUING 6317 +/** Instruction that triggers the hypercall is invalid/unrecognized. */ +#define VERR_GIM_INVALID_HYPERCALL_INSTR (-6318) +/** @} */ + + +/** @name Main API Status Codes + * @{ + */ +/** The configuration constructor in main failed due to a COM error. Check + * the release log of the VM for further details. */ +#define VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR (-6400) +/** The configuration constructor in main failed due to an internal consistency + * error. Consult the release log of the VM for further details. */ +#define VERR_MAIN_CONFIG_CONSTRUCTOR_IPE (-6401) +/** @} */ + + +/** @name VBox Drag and Drop Status Codes + * @{ + */ +/** Guest side reported an error. */ +#define VERR_GSTDND_GUEST_ERROR (-6500) +/** @} */ + + +/** @name Audio Status Codes + * @{ + */ +/** Host backend couldn't be initialized. Happen if the audio server is not + * reachable, audio hardware is not available or similar. We should use the + * NULL audio driver. */ +#define VERR_AUDIO_BACKEND_INIT_FAILED (-6600) +/** No free input streams. */ +#define VERR_AUDIO_NO_FREE_INPUT_STREAMS (-6601) +/** No free output streams. */ +#define VERR_AUDIO_NO_FREE_OUTPUT_STREAMS (-6602) +/** Pending stream disable operation in progress. */ +#define VERR_AUDIO_STREAM_PENDING_DISABLE (-6603) +/** There is more data available. + * This can happen due to a buffer wraparound of a buffer read/write operation. */ +#define VINF_AUDIO_MORE_DATA_AVAILABLE (6604) +/** @} */ + + +/** @name APIC Status Codes + * @{ + */ +/** No pending interrupt. */ +#define VERR_APIC_INTR_NOT_PENDING (-6700) +/** Pending interrupt is masked by TPR. */ +#define VERR_APIC_INTR_MASKED_BY_TPR (-6701) +/** APIC did not accept the interrupt. */ +#define VERR_APIC_INTR_DISCARDED (-6702) +/** @} */ + +/* SED-END */ + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/log.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/log.h @@ -0,0 +1,1208 @@ +/** @file + * VirtualBox - Logging. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_log_h +#define ___VBox_log_h + +/* + * Set the default loggroup. + */ +#ifndef LOG_GROUP +# define LOG_GROUP LOG_GROUP_DEFAULT +#endif + +#include + + +/** @defgroup grp_rt_vbox_log VBox Logging + * @ingroup grp_rt_vbox + * @{ + */ + +/** PC port for debug output */ +#define RTLOG_DEBUG_PORT 0x504 + +/** + * VirtualBox Logging Groups. + * (Remember to update LOGGROUP_NAMES!) + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ + */ +typedef enum LOGGROUP +{ + /** The default VBox group. */ + LOG_GROUP_DEFAULT = RTLOGGROUP_FIRST_USER, + /** Audio mixer group. */ + LOG_GROUP_AUDIO_MIXER, + /** Audio mixer buffer group. */ + LOG_GROUP_AUDIO_MIXER_BUFFER, + /** Auto-logon group. */ + LOG_GROUP_AUTOLOGON, + /** CFGM group. */ + LOG_GROUP_CFGM, + /** CPUM group. */ + LOG_GROUP_CPUM, + /** CSAM group. */ + LOG_GROUP_CSAM, + /** Debug Console group. */ + LOG_GROUP_DBGC, + /** DBGF group. */ + LOG_GROUP_DBGF, + /** DBGF info group. */ + LOG_GROUP_DBGF_INFO, + /** The debugger gui. */ + LOG_GROUP_DBGG, + /** Generic Device group. */ + LOG_GROUP_DEV, + /** AC97 Device group. */ + LOG_GROUP_DEV_AC97, + /** ACPI Device group. */ + LOG_GROUP_DEV_ACPI, + /** AHCI Device group. */ + LOG_GROUP_DEV_AHCI, + /** APIC Device group. */ + LOG_GROUP_DEV_APIC, + /** BusLogic SCSI host adapter group. */ + LOG_GROUP_DEV_BUSLOGIC, + /** DMA Controller group. */ + LOG_GROUP_DEV_DMA, + /** Gigabit Ethernet Device group. */ + LOG_GROUP_DEV_E1000, + /** Extensible Firmware Interface Device group. */ + LOG_GROUP_DEV_EFI, + /** USB EHCI Device group. */ + LOG_GROUP_DEV_EHCI, + /** Floppy Controller Device group. */ + LOG_GROUP_DEV_FDC, + /** Guest Interface Manager Device group. */ + LOG_GROUP_DEV_GIM, + /** HDA Device group. */ + LOG_GROUP_DEV_HDA, + /** HDA Codec Device group. */ + LOG_GROUP_DEV_HDA_CODEC, + /** High Precision Event Timer Device group. */ + LOG_GROUP_DEV_HPET, + /** IDE Device group. */ + LOG_GROUP_DEV_IDE, + /** I/O APIC Device group. */ + LOG_GROUP_DEV_IOAPIC, + /** The internal networking IP stack Device group. */ + LOG_GROUP_DEV_INIP, + /** KeyBoard Controller Device group. */ + LOG_GROUP_DEV_KBD, + /** Low Pin Count Device group. */ + LOG_GROUP_DEV_LPC, + /** LsiLogic SCSI controller Device group. */ + LOG_GROUP_DEV_LSILOGICSCSI, + /** NVMe Device group. */ + LOG_GROUP_DEV_NVME, + /** USB OHCI Device group. */ + LOG_GROUP_DEV_OHCI, + /** Parallel Device group */ + LOG_GROUP_DEV_PARALLEL, + /** PC Device group. */ + LOG_GROUP_DEV_PC, + /** PC Architecture Device group. */ + LOG_GROUP_DEV_PC_ARCH, + /** PC BIOS Device group. */ + LOG_GROUP_DEV_PC_BIOS, + /** PCI Device group. */ + LOG_GROUP_DEV_PCI, + /** PCI Raw Device group. */ + LOG_GROUP_DEV_PCI_RAW, + /** PCNet Device group. */ + LOG_GROUP_DEV_PCNET, + /** PIC Device group. */ + LOG_GROUP_DEV_PIC, + /** PIT Device group. */ + LOG_GROUP_DEV_PIT, + /** RTC Device group. */ + LOG_GROUP_DEV_RTC, + /** SB16 Device group. */ + LOG_GROUP_DEV_SB16, + /** Serial Device group */ + LOG_GROUP_DEV_SERIAL, + /** System Management Controller Device group. */ + LOG_GROUP_DEV_SMC, + /** VGA Device group. */ + LOG_GROUP_DEV_VGA, + /** Virtio PCI Device group. */ + LOG_GROUP_DEV_VIRTIO, + /** Virtio Network Device group. */ + LOG_GROUP_DEV_VIRTIO_NET, + /** VMM Device group. */ + LOG_GROUP_DEV_VMM, + /** VMM Device group for backdoor logging. */ + LOG_GROUP_DEV_VMM_BACKDOOR, + /** VMM Device group for logging guest backdoor logging to stderr. */ + LOG_GROUP_DEV_VMM_STDERR, + /** VMSVGA Device group. */ + LOG_GROUP_DEV_VMSVGA, + /** USB xHCI Device group. */ + LOG_GROUP_DEV_XHCI, + /** Disassembler group. */ + LOG_GROUP_DIS, + /** Generic driver group. */ + LOG_GROUP_DRV, + /** ACPI driver group */ + LOG_GROUP_DRV_ACPI, + /** Audio driver group */ + LOG_GROUP_DRV_AUDIO, + /** Block driver group. */ + LOG_GROUP_DRV_BLOCK, + /** Char driver group. */ + LOG_GROUP_DRV_CHAR, + /** Disk integrity driver group. */ + LOG_GROUP_DRV_DISK_INTEGRITY, + /** Video Display driver group. */ + LOG_GROUP_DRV_DISPLAY, + /** Floppy media driver group. */ + LOG_GROUP_DRV_FLOPPY, + /** Host Audio driver group. */ + LOG_GROUP_DRV_HOST_AUDIO, + /** Host Base block driver group. */ + LOG_GROUP_DRV_HOST_BASE, + /** Host DVD block driver group. */ + LOG_GROUP_DRV_HOST_DVD, + /** Host floppy block driver group. */ + LOG_GROUP_DRV_HOST_FLOPPY, + /** Host Parallel Driver group */ + LOG_GROUP_DRV_HOST_PARALLEL, + /** Host Serial Driver Group */ + LOG_GROUP_DRV_HOST_SERIAL, + /** The internal networking transport driver group. */ + LOG_GROUP_DRV_INTNET, + /** ISO (CD/DVD) media driver group. */ + LOG_GROUP_DRV_ISO, + /** Keyboard Queue driver group. */ + LOG_GROUP_DRV_KBD_QUEUE, + /** lwIP IP stack driver group. */ + LOG_GROUP_DRV_LWIP, + /** Video Miniport driver group. */ + LOG_GROUP_DRV_MINIPORT, + /** Mouse driver group. */ + LOG_GROUP_DRV_MOUSE, + /** Mouse Queue driver group. */ + LOG_GROUP_DRV_MOUSE_QUEUE, + /** Named Pipe stream driver group. */ + LOG_GROUP_DRV_NAMEDPIPE, + /** NAT network transport driver group */ + LOG_GROUP_DRV_NAT, + /** Raw image driver group */ + LOG_GROUP_DRV_RAW_IMAGE, + /** SCSI driver group. */ + LOG_GROUP_DRV_SCSI, + /** Host SCSI driver group. */ + LOG_GROUP_DRV_SCSIHOST, + /** TCP socket stream driver group. */ + LOG_GROUP_DRV_TCP, + /** Async transport driver group */ + LOG_GROUP_DRV_TRANSPORT_ASYNC, + /** TUN network transport driver group */ + LOG_GROUP_DRV_TUN, + /** UDP socket stream driver group. */ + LOG_GROUP_DRV_UDP, + /** UDP tunnet network transport driver group. */ + LOG_GROUP_DRV_UDPTUNNEL, + /** USB Proxy driver group. */ + LOG_GROUP_DRV_USBPROXY, + /** VBoxHDD media driver group. */ + LOG_GROUP_DRV_VBOXHDD, + /** VBox HDD container media driver group. */ + LOG_GROUP_DRV_VD, + /** VRDE audio driver group. */ + LOG_GROUP_DRV_VRDE_AUDIO, + /** Virtual Switch transport driver group */ + LOG_GROUP_DRV_VSWITCH, + /** VUSB driver group */ + LOG_GROUP_DRV_VUSB, + /** EM group. */ + LOG_GROUP_EM, + /** FTM group. */ + LOG_GROUP_FTM, + /** GIM group. */ + LOG_GROUP_GIM, + /** GMM group. */ + LOG_GROUP_GMM, + /** Guest control. */ + LOG_GROUP_GUEST_CONTROL, + /** Guest drag'n drop. */ + LOG_GROUP_GUEST_DND, + /** GUI group. */ + LOG_GROUP_GUI, + /** GVMM group. */ + LOG_GROUP_GVMM, + /** HGCM group */ + LOG_GROUP_HGCM, + /** HGSMI group */ + LOG_GROUP_HGSMI, + /** HM group. */ + LOG_GROUP_HM, + /** IEM group. */ + LOG_GROUP_IEM, + /** I/O buffer management group. */ + LOG_GROUP_IOBUFMGMT, + /** IOM group. */ + LOG_GROUP_IOM, + /** XPCOM IPC group. */ + LOG_GROUP_IPC, + /** lwIP group. */ + LOG_GROUP_LWIP, + /** lwIP group, api_lib.c API_LIB_DEBUG */ + LOG_GROUP_LWIP_API_LIB, + /** lwIP group, api_msg.c API_MSG_DEBUG */ + LOG_GROUP_LWIP_API_MSG, + /** lwIP group, etharp.c ETHARP_DEBUG */ + LOG_GROUP_LWIP_ETHARP, + /** lwIP group, icmp.c ICMP_DEBUG */ + LOG_GROUP_LWIP_ICMP, + /** lwIP group, igmp.c IGMP_DEBUG */ + LOG_GROUP_LWIP_IGMP, + /** lwIP group, inet.c INET_DEBUG */ + LOG_GROUP_LWIP_INET, + /** lwIP group, IP_DEBUG (sic!) */ + LOG_GROUP_LWIP_IP4, + /** lwIP group, ip_frag.c IP_REASS_DEBUG (sic!) */ + LOG_GROUP_LWIP_IP4_REASS, + /** lwIP group, IP6_DEBUG */ + LOG_GROUP_LWIP_IP6, + /** lwIP group, mem.c MEM_DEBUG */ + LOG_GROUP_LWIP_MEM, + /** lwIP group, memp.c MEMP_DEBUG */ + LOG_GROUP_LWIP_MEMP, + /** lwIP group, netif.c NETIF_DEBUG */ + LOG_GROUP_LWIP_NETIF, + /** lwIP group, pbuf.c PBUF_DEBUG */ + LOG_GROUP_LWIP_PBUF, + /** lwIP group, raw.c RAW_DEBUG */ + LOG_GROUP_LWIP_RAW, + /** lwIP group, sockets.c SOCKETS_DEBUG */ + LOG_GROUP_LWIP_SOCKETS, + /** lwIP group, SYS_DEBUG */ + LOG_GROUP_LWIP_SYS, + /** lwIP group, TCP_DEBUG */ + LOG_GROUP_LWIP_TCP, + /** lwIP group, tcpip.c TCPIP_DEBUG */ + LOG_GROUP_LWIP_TCPIP, + /** lwIP group, TCP_CWND_DEBUG (congestion window) */ + LOG_GROUP_LWIP_TCP_CWND, + /** lwIP group, tcp_in.c TCP_FR_DEBUG (fast retransmit) */ + LOG_GROUP_LWIP_TCP_FR, + /** lwIP group, tcp_in.c TCP_INPUT_DEBUG */ + LOG_GROUP_LWIP_TCP_INPUT, + /** lwIP group, tcp_out.c TCP_OUTPUT_DEBUG */ + LOG_GROUP_LWIP_TCP_OUTPUT, + /** lwIP group, TCP_QLEN_DEBUG */ + LOG_GROUP_LWIP_TCP_QLEN, + /** lwIP group, TCP_RST_DEBUG */ + LOG_GROUP_LWIP_TCP_RST, + /** lwIP group, TCP_RTO_DEBUG (retransmit) */ + LOG_GROUP_LWIP_TCP_RTO, + /** lwIP group, tcp_in.c TCP_WND_DEBUG (window updates) */ + LOG_GROUP_LWIP_TCP_WND, + /** lwIP group, timers.c TIMERS_DEBUG */ + LOG_GROUP_LWIP_TIMERS, + /** lwIP group, udp.c UDP_DEBUG */ + LOG_GROUP_LWIP_UDP, + /** Main group. */ + LOG_GROUP_MAIN, + /** Main group, IAdditionsFacility. */ + LOG_GROUP_MAIN_ADDITIONSFACILITY, + /** Main group, IAdditionsStateChangedEvent. */ + LOG_GROUP_MAIN_ADDITIONSSTATECHANGEDEVENT, + /** Main group, IAppliance. */ + LOG_GROUP_MAIN_APPLIANCE, + /** Main group, IAudioAdapter. */ + LOG_GROUP_MAIN_AUDIOADAPTER, + /** Main group, IAudioAdapterChangedEvent. */ + LOG_GROUP_MAIN_AUDIOADAPTERCHANGEDEVENT, + /** Main group, IBandwidthControl. */ + LOG_GROUP_MAIN_BANDWIDTHCONTROL, + /** Main group, IBandwidthGroup. */ + LOG_GROUP_MAIN_BANDWIDTHGROUP, + /** Main group, IBandwidthGroupChangedEvent. */ + LOG_GROUP_MAIN_BANDWIDTHGROUPCHANGEDEVENT, + /** Main group, IBIOSSettings. */ + LOG_GROUP_MAIN_BIOSSETTINGS, + /** Main group, ICanShowWindowEvent. */ + LOG_GROUP_MAIN_CANSHOWWINDOWEVENT, + /** Main group, ICertificate. */ + LOG_GROUP_MAIN_CERTIFICATE, + /** Main group, IClipboardModeChangedEvent. */ + LOG_GROUP_MAIN_CLIPBOARDMODECHANGEDEVENT, + /** Main group, IConsole. */ + LOG_GROUP_MAIN_CONSOLE, + /** Main group, ICPUChangedEvent. */ + LOG_GROUP_MAIN_CPUCHANGEDEVENT, + /** Main group, ICPUExecutionCapChangedEvent. */ + LOG_GROUP_MAIN_CPUEXECUTIONCAPCHANGEDEVENT, + /** Main group, IDHCPServer. */ + LOG_GROUP_MAIN_DHCPSERVER, + /** Main group, IDirectory. */ + LOG_GROUP_MAIN_DIRECTORY, + /** Main group, IDisplay. */ + LOG_GROUP_MAIN_DISPLAY, + /** Main group, IDisplaySourceBitmap. */ + LOG_GROUP_MAIN_DISPLAYSOURCEBITMAP, + /** Main group, IDnDBase. */ + LOG_GROUP_MAIN_DNDBASE, + /** Main group, IDnDModeChangedEvent. */ + LOG_GROUP_MAIN_DNDMODECHANGEDEVENT, + /** Main group, IDnDSource. */ + LOG_GROUP_MAIN_DNDSOURCE, + /** Main group, IDnDTarget. */ + LOG_GROUP_MAIN_DNDTARGET, + /** Main group, IEmulatedUSB. */ + LOG_GROUP_MAIN_EMULATEDUSB, + /** Main group, IEvent. */ + LOG_GROUP_MAIN_EVENT, + /** Main group, IEventListener. */ + LOG_GROUP_MAIN_EVENTLISTENER, + /** Main group, IEventSource. */ + LOG_GROUP_MAIN_EVENTSOURCE, + /** Main group, IEventSourceChangedEvent. */ + LOG_GROUP_MAIN_EVENTSOURCECHANGEDEVENT, + /** Main group, IExtPack. */ + LOG_GROUP_MAIN_EXTPACK, + /** Main group, IExtPackBase. */ + LOG_GROUP_MAIN_EXTPACKBASE, + /** Main group, IExtPackFile. */ + LOG_GROUP_MAIN_EXTPACKFILE, + /** Main group, IExtPackManager. */ + LOG_GROUP_MAIN_EXTPACKMANAGER, + /** Main group, IExtPackPlugIn. */ + LOG_GROUP_MAIN_EXTPACKPLUGIN, + /** Main group, IExtraDataCanChangeEvent. */ + LOG_GROUP_MAIN_EXTRADATACANCHANGEEVENT, + /** Main group, IExtraDataChangedEvent. */ + LOG_GROUP_MAIN_EXTRADATACHANGEDEVENT, + /** Main group, IFile. */ + LOG_GROUP_MAIN_FILE, + /** Main group, IFramebuffer. */ + LOG_GROUP_MAIN_FRAMEBUFFER, + /** Main group, IFramebufferOverlay. */ + LOG_GROUP_MAIN_FRAMEBUFFEROVERLAY, + /** Main group, IFsObjInfo. */ + LOG_GROUP_MAIN_FSOBJINFO, + /** Main group, IGuest. */ + LOG_GROUP_MAIN_GUEST, + /** Main group, IGuestDirectory. */ + LOG_GROUP_MAIN_GUESTDIRECTORY, + /** Main group, IGuestDnDSource. */ + LOG_GROUP_MAIN_GUESTDNDSOURCE, + /** Main group, IGuestDnDTarget. */ + LOG_GROUP_MAIN_GUESTDNDTARGET, + /** Main group, IGuestErrorInfo. */ + LOG_GROUP_MAIN_GUESTERRORINFO, + /** Main group, IGuestFile. */ + LOG_GROUP_MAIN_GUESTFILE, + /** Main group, IGuestFileEvent. */ + LOG_GROUP_MAIN_GUESTFILEEVENT, + /** Main group, IGuestFileIOEvent. */ + LOG_GROUP_MAIN_GUESTFILEIOEVENT, + /** Main group, IGuestFileOffsetChangedEvent. */ + LOG_GROUP_MAIN_GUESTFILEOFFSETCHANGEDEVENT, + /** Main group, IGuestFileReadEvent. */ + LOG_GROUP_MAIN_GUESTFILEREADEVENT, + /** Main group, IGuestFileRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTFILEREGISTEREDEVENT, + /** Main group, IGuestFileStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTFILESTATECHANGEDEVENT, + /** Main group, IGuestFileWriteEvent. */ + LOG_GROUP_MAIN_GUESTFILEWRITEEVENT, + /** Main group, IGuestFsObjInfo. */ + LOG_GROUP_MAIN_GUESTFSOBJINFO, + /** Main group, IGuestKeyboardEvent. */ + LOG_GROUP_MAIN_GUESTKEYBOARDEVENT, + /** Main group, IGuestMonitorChangedEvent. */ + LOG_GROUP_MAIN_GUESTMONITORCHANGEDEVENT, + /** Main group, IGuestMouseEvent. */ + LOG_GROUP_MAIN_GUESTMOUSEEVENT, + /** Main group, IGuestMultiTouchEvent. */ + LOG_GROUP_MAIN_GUESTMULTITOUCHEVENT, + /** Main group, IGuestOSType. */ + LOG_GROUP_MAIN_GUESTOSTYPE, + /** Main group, IGuestProcess. */ + LOG_GROUP_MAIN_GUESTPROCESS, + /** Main group, IGuestProcessEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSEVENT, + /** Main group, IGuestProcessInputNotifyEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSINPUTNOTIFYEVENT, + /** Main group, IGuestProcessIOEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSIOEVENT, + /** Main group, IGuestProcessOutputEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSOUTPUTEVENT, + /** Main group, IGuestProcessRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSREGISTEREDEVENT, + /** Main group, IGuestProcessStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSSTATECHANGEDEVENT, + /** Main group, IGuestPropertyChangedEvent. */ + LOG_GROUP_MAIN_GUESTPROPERTYCHANGEDEVENT, + /** Main group, IGuestScreenInfo. */ + LOG_GROUP_MAIN_GUESTSCREENINFO, + /** Main group, IGuestSession. */ + LOG_GROUP_MAIN_GUESTSESSION, + /** Main group, IGuestSessionEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONEVENT, + /** Main group, IGuestSessionRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONREGISTEREDEVENT, + /** Main group, IGuestSessionStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONSTATECHANGEDEVENT, + /** Main group, IGuestUserStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTUSERSTATECHANGEDEVENT, + /** Main group, IHost. */ + LOG_GROUP_MAIN_HOST, + /** Main group, IHostNameResolutionConfigurationChangeEvent. */ + LOG_GROUP_MAIN_HOSTNAMERESOLUTIONCONFIGURATIONCHANGEEVENT, + /** Main group, IHostNetworkInterface. */ + LOG_GROUP_MAIN_HOSTNETWORKINTERFACE, + /** Main group, IHostPCIDevicePlugEvent. */ + LOG_GROUP_MAIN_HOSTPCIDEVICEPLUGEVENT, + /** Main group, IHostUSBDevice. */ + LOG_GROUP_MAIN_HOSTUSBDEVICE, + /** Main group, IHostUSBDeviceFilter. */ + LOG_GROUP_MAIN_HOSTUSBDEVICEFILTER, + /** Main group, IHostVideoInputDevice. */ + LOG_GROUP_MAIN_HOSTVIDEOINPUTDEVICE, + /** Main group, IInternalMachineControl. */ + LOG_GROUP_MAIN_INTERNALMACHINECONTROL, + /** Main group, IInternalSessionControl. */ + LOG_GROUP_MAIN_INTERNALSESSIONCONTROL, + /** Main group, IKeyboard. */ + LOG_GROUP_MAIN_KEYBOARD, + /** Main group, IKeyboardLedsChangedEvent. */ + LOG_GROUP_MAIN_KEYBOARDLEDSCHANGEDEVENT, + /** Main group, IMachine. */ + LOG_GROUP_MAIN_MACHINE, + /** Main group, IMachineDataChangedEvent. */ + LOG_GROUP_MAIN_MACHINEDATACHANGEDEVENT, + /** Main group, IMachineDebugger. */ + LOG_GROUP_MAIN_MACHINEDEBUGGER, + /** Main group, IMachineEvent. */ + LOG_GROUP_MAIN_MACHINEEVENT, + /** Main group, IMachineRegisteredEvent. */ + LOG_GROUP_MAIN_MACHINEREGISTEREDEVENT, + /** Main group, IMachineStateChangedEvent. */ + LOG_GROUP_MAIN_MACHINESTATECHANGEDEVENT, + /** Main group, IMedium. */ + LOG_GROUP_MAIN_MEDIUM, + /** Main group, IMediumAttachment. */ + LOG_GROUP_MAIN_MEDIUMATTACHMENT, + /** Main group, IMediumChangedEvent. */ + LOG_GROUP_MAIN_MEDIUMCHANGEDEVENT, + /** Main group, IMediumConfigChangedEvent. */ + LOG_GROUP_MAIN_MEDIUMCONFIGCHANGEDEVENT, + /** Main group, IMediumFormat. */ + LOG_GROUP_MAIN_MEDIUMFORMAT, + /** Main group, IMediumRegisteredEvent. */ + LOG_GROUP_MAIN_MEDIUMREGISTEREDEVENT, + /** Main group, IMouse. */ + LOG_GROUP_MAIN_MOUSE, + /** Main group, IMouseCapabilityChangedEvent. */ + LOG_GROUP_MAIN_MOUSECAPABILITYCHANGEDEVENT, + /** Main group, IMousePointerShape. */ + LOG_GROUP_MAIN_MOUSEPOINTERSHAPE, + /** Main group, IMousePointerShapeChangedEvent. */ + LOG_GROUP_MAIN_MOUSEPOINTERSHAPECHANGEDEVENT, + /** Main group, INATEngine. */ + LOG_GROUP_MAIN_NATENGINE, + /** Main group, INATNetwork. */ + LOG_GROUP_MAIN_NATNETWORK, + /** Main group, INATNetworkAlterEvent. */ + LOG_GROUP_MAIN_NATNETWORKALTEREVENT, + /** Main group, INATNetworkChangedEvent. */ + LOG_GROUP_MAIN_NATNETWORKCHANGEDEVENT, + /** Main group, INATNetworkCreationDeletionEvent. */ + LOG_GROUP_MAIN_NATNETWORKCREATIONDELETIONEVENT, + /** Main group, INATNetworkPortForwardEvent. */ + LOG_GROUP_MAIN_NATNETWORKPORTFORWARDEVENT, + /** Main group, INATNetworkSettingEvent. */ + LOG_GROUP_MAIN_NATNETWORKSETTINGEVENT, + /** Main group, INATNetworkStartStopEvent. */ + LOG_GROUP_MAIN_NATNETWORKSTARTSTOPEVENT, + /** Main group, INATRedirectEvent. */ + LOG_GROUP_MAIN_NATREDIRECTEVENT, + /** Main group, INetworkAdapter. */ + LOG_GROUP_MAIN_NETWORKADAPTER, + /** Main group, INetworkAdapterChangedEvent. */ + LOG_GROUP_MAIN_NETWORKADAPTERCHANGEDEVENT, + /** Main group, IParallelPort. */ + LOG_GROUP_MAIN_PARALLELPORT, + /** Main group, IParallelPortChangedEvent. */ + LOG_GROUP_MAIN_PARALLELPORTCHANGEDEVENT, + /** Main group, IPCIAddress. */ + LOG_GROUP_MAIN_PCIADDRESS, + /** Main group, IPCIDeviceAttachment. */ + LOG_GROUP_MAIN_PCIDEVICEATTACHMENT, + /** Main group, IPerformanceCollector. */ + LOG_GROUP_MAIN_PERFORMANCECOLLECTOR, + /** Main group, IPerformanceMetric. */ + LOG_GROUP_MAIN_PERFORMANCEMETRIC, + /** Main group, IProcess. */ + LOG_GROUP_MAIN_PROCESS, + /** Main group, IProgress. */ + LOG_GROUP_MAIN_PROGRESS, + /** Main group, IProgressEvent. */ + LOG_GROUP_MAIN_PROGRESSEVENT, + /** Main group, IProgressPercentageChangedEvent. */ + LOG_GROUP_MAIN_PROGRESSPERCENTAGECHANGEDEVENT, + /** Main group, IProgressTaskCompletedEvent. */ + LOG_GROUP_MAIN_PROGRESSTASKCOMPLETEDEVENT, + /** Main group, IReusableEvent. */ + LOG_GROUP_MAIN_REUSABLEEVENT, + /** Main group, IRuntimeErrorEvent. */ + LOG_GROUP_MAIN_RUNTIMEERROREVENT, + /** Main group, ISerialPort. */ + LOG_GROUP_MAIN_SERIALPORT, + /** Main group, ISerialPortChangedEvent. */ + LOG_GROUP_MAIN_SERIALPORTCHANGEDEVENT, + /** Main group, ISession. */ + LOG_GROUP_MAIN_SESSION, + /** Main group, ISessionStateChangedEvent. */ + LOG_GROUP_MAIN_SESSIONSTATECHANGEDEVENT, + /** Main group, ISharedFolder. */ + LOG_GROUP_MAIN_SHAREDFOLDER, + /** Main group, ISharedFolderChangedEvent. */ + LOG_GROUP_MAIN_SHAREDFOLDERCHANGEDEVENT, + /** Main group, IShowWindowEvent. */ + LOG_GROUP_MAIN_SHOWWINDOWEVENT, + /** Main group, ISnapshot. */ + LOG_GROUP_MAIN_SNAPSHOT, + /** Main group, ISnapshotChangedEvent. */ + LOG_GROUP_MAIN_SNAPSHOTCHANGEDEVENT, + /** Main group, ISnapshotDeletedEvent. */ + LOG_GROUP_MAIN_SNAPSHOTDELETEDEVENT, + /** Main group, ISnapshotEvent. */ + LOG_GROUP_MAIN_SNAPSHOTEVENT, + /** Main group, ISnapshotTakenEvent. */ + LOG_GROUP_MAIN_SNAPSHOTRESTOREDEVENT, + /** Main group, ISnapshotRestoredEvent. */ + LOG_GROUP_MAIN_SNAPSHOTTAKENEVENT, + /** Main group, IStateChangedEvent. */ + LOG_GROUP_MAIN_STATECHANGEDEVENT, + /** Main group, IStorageController. */ + LOG_GROUP_MAIN_STORAGECONTROLLER, + /** Main group, IStorageControllerChangedEvent. */ + LOG_GROUP_MAIN_STORAGECONTROLLERCHANGEDEVENT, + /** Main group, IStorageDeviceChangedEvent. */ + LOG_GROUP_MAIN_STORAGEDEVICECHANGEDEVENT, + /** Main group, ISystemProperties. */ + LOG_GROUP_MAIN_SYSTEMPROPERTIES, + /** Main group, IToken. */ + LOG_GROUP_MAIN_TOKEN, + /** Main group, IUnattended. */ + LOG_GROUP_MAIN_UNATTENDED, + /** Main group, IUSBController. */ + LOG_GROUP_MAIN_USBCONTROLLER, + /** Main group, IUSBControllerChangedEvent. */ + LOG_GROUP_MAIN_USBCONTROLLERCHANGEDEVENT, + /** Main group, IUSBDevice. */ + LOG_GROUP_MAIN_USBDEVICE, + /** Main group, IUSBDeviceFilter. */ + LOG_GROUP_MAIN_USBDEVICEFILTER, + /** Main group, IUSBDeviceFilters. */ + LOG_GROUP_MAIN_USBDEVICEFILTERS, + /** Main group, IUSBDeviceStateChangedEvent. */ + LOG_GROUP_MAIN_USBDEVICESTATECHANGEDEVENT, + /** Main group, IUSBProxyBackend. */ + LOG_GROUP_MAIN_USBPROXYBACKEND, + /** Main group, IVBoxSVC. */ + LOG_GROUP_MAIN_VBOXSVC, + /** Main group, IVBoxSVCAvailabilityChangedEvent. */ + LOG_GROUP_MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT, + /** Main group, IVetoEvent. */ + LOG_GROUP_MAIN_VETOEVENT, + /** Main group, IVFSExplorer. */ + LOG_GROUP_MAIN_VFSEXPLORER, + /** Main group, IVideoCaptureChangedEvent. */ + LOG_GROUP_MAIN_VIDEOCAPTURECHANGEDEVENT, + /** Main group, IVirtualBox. */ + LOG_GROUP_MAIN_VIRTUALBOX, + /** Main group, IVirtualBoxClient. */ + LOG_GROUP_MAIN_VIRTUALBOXCLIENT, + /** Main group, IVirtualBoxSDS. */ + LOG_GROUP_MAIN_VIRTUALBOXSDS, + /** Main group, IVirtualSystemDescription. */ + LOG_GROUP_MAIN_VIRTUALSYSTEMDESCRIPTION, + /** Main group, VMM device interfaces. */ + LOG_GROUP_MAIN_VMMDEVINTERFACES, + /** Main group, IVRDEServer. */ + LOG_GROUP_MAIN_VRDESERVER, + /** Main group, IVRDEServerChangedEvent. */ + LOG_GROUP_MAIN_VRDESERVERCHANGEDEVENT, + /** Main group, IVRDEServerInfo. */ + LOG_GROUP_MAIN_VRDESERVERINFO, + /** Main group, IVRDEServerInfoChangedEvent. */ + LOG_GROUP_MAIN_VRDESERVERINFOCHANGEDEVENT, + /** Misc. group intended for external use only. */ + LOG_GROUP_MISC, + /** MM group. */ + LOG_GROUP_MM, + /** MM group. */ + LOG_GROUP_MM_HEAP, + /** MM group. */ + LOG_GROUP_MM_HYPER, + /** MM Hypervisor Heap group. */ + LOG_GROUP_MM_HYPER_HEAP, + /** MM Physical/Ram group. */ + LOG_GROUP_MM_PHYS, + /** MM Page pool group. */ + LOG_GROUP_MM_POOL, + /** The NAT service group */ + LOG_GROUP_NAT_SERVICE, + /** The network adaptor driver group. */ + LOG_GROUP_NET_ADP_DRV, + /** The network filter driver group. */ + LOG_GROUP_NET_FLT_DRV, + /** The common network service group */ + LOG_GROUP_NET_SERVICE, + /** Network traffic shaper driver group. */ + LOG_GROUP_NET_SHAPER, + /** PATM group. */ + LOG_GROUP_PATM, + /** PDM group. */ + LOG_GROUP_PDM, + /** PDM Async completion group. */ + LOG_GROUP_PDM_ASYNC_COMPLETION, + /** PDM Block cache group. */ + LOG_GROUP_PDM_BLK_CACHE, + /** PDM Device group. */ + LOG_GROUP_PDM_DEVICE, + /** PDM Driver group. */ + LOG_GROUP_PDM_DRIVER, + /** PDM Loader group. */ + LOG_GROUP_PDM_LDR, + /** PDM Loader group. */ + LOG_GROUP_PDM_QUEUE, + /** PGM group. */ + LOG_GROUP_PGM, + /** PGM dynamic mapping group. */ + LOG_GROUP_PGM_DYNMAP, + /** PGM physical group. */ + LOG_GROUP_PGM_PHYS, + /** PGM physical access group. */ + LOG_GROUP_PGM_PHYS_ACCESS, + /** PGM shadow page pool group. */ + LOG_GROUP_PGM_POOL, + /** PGM shared paging group. */ + LOG_GROUP_PGM_SHARED, + /** REM group. */ + LOG_GROUP_REM, + /** REM disassembly handler group. */ + LOG_GROUP_REM_DISAS, + /** REM access handler group. */ + LOG_GROUP_REM_HANDLER, + /** REM I/O port access group. */ + LOG_GROUP_REM_IOPORT, + /** REM MMIO access group. */ + LOG_GROUP_REM_MMIO, + /** REM Printf. */ + LOG_GROUP_REM_PRINTF, + /** REM running group. */ + LOG_GROUP_REM_RUN, + /** SELM group. */ + LOG_GROUP_SELM, + /** Shared clipboard host service group. */ + LOG_GROUP_SHARED_CLIPBOARD, + /** Chromium OpenGL host service group. */ + LOG_GROUP_SHARED_CROPENGL, + /** Shared folders host service group. */ + LOG_GROUP_SHARED_FOLDERS, + /** OpenGL host service group. */ + LOG_GROUP_SHARED_OPENGL, + /** The internal networking service group. */ + LOG_GROUP_SRV_INTNET, + /** SSM group. */ + LOG_GROUP_SSM, + /** STAM group. */ + LOG_GROUP_STAM, + /** SUP group. */ + LOG_GROUP_SUP, + /** SUPport driver group. */ + LOG_GROUP_SUP_DRV, + /** TM group. */ + LOG_GROUP_TM, + /** TRPM group. */ + LOG_GROUP_TRPM, + /** USB cardreader group. */ + LOG_GROUP_USB_CARDREADER, + /** USB driver group. */ + LOG_GROUP_USB_DRV, + /** USBFilter group. */ + LOG_GROUP_USB_FILTER, + /** USB keyboard device group. */ + LOG_GROUP_USB_KBD, + /** USB mouse/tablet device group. */ + LOG_GROUP_USB_MOUSE, + /** MSD USB device group. */ + LOG_GROUP_USB_MSD, + /** USB remote support. */ + LOG_GROUP_USB_REMOTE, + /** USB webcam. */ + LOG_GROUP_USB_WEBCAM, + /** VBox Guest Additions Driver (VBoxGuest). */ + LOG_GROUP_VGDRV, + /** VBox Guest Additions Library. */ + LOG_GROUP_VBGL, + /** Generic virtual disk layer. */ + LOG_GROUP_VD, + /** CUE/BIN virtual disk backend. */ + LOG_GROUP_VD_CUE, + /** DMG virtual disk backend. */ + LOG_GROUP_VD_DMG, + /** iSCSI virtual disk backend. */ + LOG_GROUP_VD_ISCSI, + /** Parallels HDD virtual disk backend. */ + LOG_GROUP_VD_PARALLELS, + /** QCOW virtual disk backend. */ + LOG_GROUP_VD_QCOW, + /** QED virtual disk backend. */ + LOG_GROUP_VD_QED, + /** Raw virtual disk backend. */ + LOG_GROUP_VD_RAW, + /** VDI virtual disk backend. */ + LOG_GROUP_VD_VDI, + /** VHD virtual disk backend. */ + LOG_GROUP_VD_VHD, + /** VHDX virtual disk backend. */ + LOG_GROUP_VD_VHDX, + /** VMDK virtual disk backend. */ + LOG_GROUP_VD_VMDK, + /** VM group. */ + LOG_GROUP_VM, + /** VMM group. */ + LOG_GROUP_VMM, + /** VRDE group */ + LOG_GROUP_VRDE, + /** VRDP group */ + LOG_GROUP_VRDP, + /** VSCSI group */ + LOG_GROUP_VSCSI, + /** Webservice group. */ + LOG_GROUP_WEBSERVICE + /* !!!ALPHABETICALLY!!! */ +} VBOX_LOGGROUP; + + +/** @def VBOX_LOGGROUP_NAMES + * VirtualBox Logging group names. + * + * Must correspond 100% to LOGGROUP! + * Don't forget commas! + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +#define VBOX_LOGGROUP_NAMES \ +{ \ + RT_LOGGROUP_NAMES, \ + "DEFAULT", \ + "AUDIO_MIXER", \ + "AUDIO_MIXER_BUFFER", \ + "AUTOLOGON", \ + "CFGM", \ + "CPUM", \ + "CSAM", \ + "DBGC", \ + "DBGF", \ + "DBGF_INFO", \ + "DBGG", \ + "DEV", \ + "DEV_AC97", \ + "DEV_ACPI", \ + "DEV_AHCI", \ + "DEV_APIC", \ + "DEV_BUSLOGIC", \ + "DEV_DMA", \ + "DEV_E1000", \ + "DEV_EFI", \ + "DEV_EHCI", \ + "DEV_FDC", \ + "DEV_GIM", \ + "DEV_HDA", \ + "DEV_HDA_CODEC", \ + "DEV_HPET", \ + "DEV_IDE", \ + "DEV_IOAPIC", \ + "DEV_INIP", \ + "DEV_KBD", \ + "DEV_LPC", \ + "DEV_LSILOGICSCSI", \ + "DEV_NVME", \ + "DEV_OHCI", \ + "DEV_PARALLEL", \ + "DEV_PC", \ + "DEV_PC_ARCH", \ + "DEV_PC_BIOS", \ + "DEV_PCI", \ + "DEV_PCI_RAW", \ + "DEV_PCNET", \ + "DEV_PIC", \ + "DEV_PIT", \ + "DEV_RTC", \ + "DEV_SB16", \ + "DEV_SERIAL", \ + "DEV_SMC", \ + "DEV_VGA", \ + "DEV_VIRTIO", \ + "DEV_VIRTIO_NET", \ + "DEV_VMM", \ + "DEV_VMM_BACKDOOR", \ + "DEV_VMM_STDERR", \ + "DEV_VMSVGA", \ + "DEV_XHCI", \ + "DIS", \ + "DRV", \ + "DRV_ACPI", \ + "DRV_AUDIO", \ + "DRV_BLOCK", \ + "DRV_CHAR", \ + "DRV_DISK_INTEGRITY", \ + "DRV_DISPLAY", \ + "DRV_FLOPPY", \ + "DRV_HOST_AUDIO", \ + "DRV_HOST_BASE", \ + "DRV_HOST_DVD", \ + "DRV_HOST_FLOPPY", \ + "DRV_HOST_PARALLEL", \ + "DRV_HOST_SERIAL", \ + "DRV_INTNET", \ + "DRV_ISO", \ + "DRV_KBD_QUEUE", \ + "DRV_LWIP", \ + "DRV_MINIPORT", \ + "DRV_MOUSE", \ + "DRV_MOUSE_QUEUE", \ + "DRV_NAMEDPIPE", \ + "DRV_NAT", \ + "DRV_RAW_IMAGE", \ + "DRV_SCSI", \ + "DRV_SCSIHOST", \ + "DRV_TCP", \ + "DRV_TRANSPORT_ASYNC", \ + "DRV_TUN", \ + "DRV_UDP", \ + "DRV_UDPTUNNEL", \ + "DRV_USBPROXY", \ + "DRV_VBOXHDD", \ + "DRV_VD", \ + "DRV_VRDE_AUDIO", \ + "DRV_VSWITCH", \ + "DRV_VUSB", \ + "EM", \ + "FTM", \ + "GIM", \ + "GMM", \ + "GUEST_CONTROL", \ + "GUEST_DND", \ + "GUI", \ + "GVMM", \ + "HGCM", \ + "HGSMI", \ + "HM", \ + "IEM", \ + "IOBUFMGMT", \ + "IOM", \ + "IPC", \ + "LWIP", \ + "LWIP_API_LIB", \ + "LWIP_API_MSG", \ + "LWIP_ETHARP", \ + "LWIP_ICMP", \ + "LWIP_IGMP", \ + "LWIP_INET", \ + "LWIP_IP4", \ + "LWIP_IP4_REASS", \ + "LWIP_IP6", \ + "LWIP_MEM", \ + "LWIP_MEMP", \ + "LWIP_NETIF", \ + "LWIP_PBUF", \ + "LWIP_RAW", \ + "LWIP_SOCKETS", \ + "LWIP_SYS", \ + "LWIP_TCP", \ + "LWIP_TCPIP", \ + "LWIP_TCP_CWND", \ + "LWIP_TCP_FR", \ + "LWIP_TCP_INPUT", \ + "LWIP_TCP_OUTPUT", \ + "LWIP_TCP_QLEN", \ + "LWIP_TCP_RST", \ + "LWIP_TCP_RTO", \ + "LWIP_TCP_WND", \ + "LWIP_TIMERS", \ + "LWIP_UDP", \ + "MAIN", \ + "MAIN_ADDITIONSFACILITY", \ + "MAIN_ADDITIONSSTATECHANGEDEVENT", \ + "MAIN_APPLIANCE", \ + "MAIN_AUDIOADAPTER", \ + "MAIN_AUDIOADAPTERCHANGEDEVENT", \ + "MAIN_BANDWIDTHCONTROL", \ + "MAIN_BANDWIDTHGROUP", \ + "MAIN_BANDWIDTHGROUPCHANGEDEVENT", \ + "MAIN_BIOSSETTINGS", \ + "MAIN_CANSHOWWINDOWEVENT", \ + "MAIN_CERTIFICATE", \ + "MAIN_CLIPBOARDMODECHANGEDEVENT", \ + "MAIN_CONSOLE", \ + "MAIN_CPUCHANGEDEVENT", \ + "MAIN_CPUEXECUTIONCAPCHANGEDEVENT", \ + "MAIN_DHCPSERVER", \ + "MAIN_DIRECTORY", \ + "MAIN_DISPLAY", \ + "MAIN_DISPLAYSOURCEBITMAP", \ + "MAIN_DNDBASE", \ + "MAIN_DNDMODECHANGEDEVENT", \ + "MAIN_DNDSOURCE", \ + "MAIN_DNDTARGET", \ + "MAIN_EMULATEDUSB", \ + "MAIN_EVENT", \ + "MAIN_EVENTLISTENER", \ + "MAIN_EVENTSOURCE", \ + "MAIN_EVENTSOURCECHANGEDEVENT", \ + "MAIN_EXTPACK", \ + "MAIN_EXTPACKBASE", \ + "MAIN_EXTPACKFILE", \ + "MAIN_EXTPACKMANAGER", \ + "MAIN_EXTPACKPLUGIN", \ + "MAIN_EXTRADATACANCHANGEEVENT", \ + "MAIN_EXTRADATACHANGEDEVENT", \ + "MAIN_FILE", \ + "MAIN_FRAMEBUFFER", \ + "MAIN_FRAMEBUFFEROVERLAY", \ + "MAIN_FSOBJINFO", \ + "MAIN_GUEST", \ + "MAIN_GUESTDIRECTORY", \ + "MAIN_GUESTDNDSOURCE", \ + "MAIN_GUESTDNDTARGET", \ + "MAIN_GUESTERRORINFO", \ + "MAIN_GUESTFILE", \ + "MAIN_GUESTFILEEVENT", \ + "MAIN_GUESTFILEIOEVENT", \ + "MAIN_GUESTFILEOFFSETCHANGEDEVENT", \ + "MAIN_GUESTFILEREADEVENT", \ + "MAIN_GUESTFILEREGISTEREDEVENT", \ + "MAIN_GUESTFILESTATECHANGEDEVENT", \ + "MAIN_GUESTFILEWRITEEVENT", \ + "MAIN_GUESTFSOBJINFO", \ + "MAIN_GUESTKEYBOARDEVENT", \ + "MAIN_GUESTMONITORCHANGEDEVENT", \ + "MAIN_GUESTMOUSEEVENT", \ + "MAIN_GUESTMULTITOUCHEVENT", \ + "MAIN_GUESTOSTYPE", \ + "MAIN_GUESTPROCESS", \ + "MAIN_GUESTPROCESSEVENT", \ + "MAIN_GUESTPROCESSINPUTNOTIFYEVENT", \ + "MAIN_GUESTPROCESSIOEVENT", \ + "MAIN_GUESTPROCESSOUTPUTEVENT", \ + "MAIN_GUESTPROCESSREGISTEREDEVENT", \ + "MAIN_GUESTPROCESSSTATECHANGEDEVENT", \ + "MAIN_GUESTPROPERTYCHANGEDEVENT", \ + "MAIN_GUESTSCREENINFO", \ + "MAIN_GUESTSESSION", \ + "MAIN_GUESTSESSIONEVENT", \ + "MAIN_GUESTSESSIONREGISTEREDEVENT", \ + "MAIN_GUESTSESSIONSTATECHANGEDEVENT", \ + "MAIN_GUESTUSERSTATECHANGEDEVENT", \ + "MAIN_HOST", \ + "MAIN_HOSTNAMERESOLUTIONCONFIGURATIONCHANGEEVENT", \ + "MAIN_HOSTNETWORKINTERFACE", \ + "MAIN_HOSTPCIDEVICEPLUGEVENT", \ + "MAIN_HOSTUSBDEVICE", \ + "MAIN_HOSTUSBDEVICEFILTER", \ + "MAIN_HOSTVIDEOINPUTDEVICE", \ + "MAIN_INTERNALMACHINECONTROL", \ + "MAIN_INTERNALSESSIONCONTROL", \ + "MAIN_KEYBOARD", \ + "MAIN_KEYBOARDLEDSCHANGEDEVENT", \ + "MAIN_MACHINE", \ + "MAIN_MACHINEDATACHANGEDEVENT", \ + "MAIN_MACHINEDEBUGGER", \ + "MAIN_MACHINEEVENT", \ + "MAIN_MACHINEREGISTEREDEVENT", \ + "MAIN_MACHINESTATECHANGEDEVENT", \ + "MAIN_MEDIUM", \ + "MAIN_MEDIUMATTACHMENT", \ + "MAIN_MEDIUMCHANGEDEVENT", \ + "MAIN_MEDIUMCONFIGCHANGEDEVENT", \ + "MAIN_MEDIUMFORMAT", \ + "MAIN_MEDIUMREGISTEREDEVENT", \ + "MAIN_MOUSE", \ + "MAIN_MOUSECAPABILITYCHANGEDEVENT", \ + "MAIN_MOUSEPOINTERSHAPE", \ + "MAIN_MOUSEPOINTERSHAPECHANGEDEVENT", \ + "MAIN_NATENGINE", \ + "MAIN_NATNETWORK", \ + "MAIN_NATNETWORKALTEREVENT", \ + "MAIN_NATNETWORKCHANGEDEVENT", \ + "MAIN_NATNETWORKCREATIONDELETIONEVENT", \ + "MAIN_NATNETWORKPORTFORWARDEVENT", \ + "MAIN_NATNETWORKSETTINGEVENT", \ + "MAIN_NATNETWORKSTARTSTOPEVENT", \ + "MAIN_NATREDIRECTEVENT", \ + "MAIN_NETWORKADAPTER", \ + "MAIN_NETWORKADAPTERCHANGEDEVENT", \ + "MAIN_PARALLELPORT", \ + "MAIN_PARALLELPORTCHANGEDEVENT", \ + "MAIN_PCIADDRESS", \ + "MAIN_PCIDEVICEATTACHMENT", \ + "MAIN_PERFORMANCECOLLECTOR", \ + "MAIN_PERFORMANCEMETRIC", \ + "MAIN_PROCESS", \ + "MAIN_PROGRESS", \ + "MAIN_PROGRESSEVENT", \ + "MAIN_PROGRESSPERCENTAGECHANGEDEVENT", \ + "MAIN_PROGRESSTASKCOMPLETEDEVENT", \ + "MAIN_REUSABLEEVENT", \ + "MAIN_RUNTIMEERROREVENT", \ + "MAIN_SERIALPORT", \ + "MAIN_SERIALPORTCHANGEDEVENT", \ + "MAIN_SESSION", \ + "MAIN_SESSIONSTATECHANGEDEVENT", \ + "MAIN_SHAREDFOLDER", \ + "MAIN_SHAREDFOLDERCHANGEDEVENT", \ + "MAIN_SHOWWINDOWEVENT", \ + "MAIN_SNAPSHOT", \ + "MAIN_SNAPSHOTCHANGEDEVENT", \ + "MAIN_SNAPSHOTDELETEDEVENT", \ + "MAIN_SNAPSHOTEVENT", \ + "MAIN_SNAPSHOTRESTOREDEVENT", \ + "MAIN_SNAPSHOTTAKENEVENT", \ + "MAIN_STATECHANGEDEVENT", \ + "MAIN_STORAGECONTROLLER", \ + "MAIN_STORAGECONTROLLERCHANGEDEVENT", \ + "MAIN_STORAGEDEVICECHANGEDEVENT", \ + "MAIN_SYSTEMPROPERTIES", \ + "MAIN_TOKEN", \ + "MAIN_UNATTENDED", \ + "MAIN_USBCONTROLLER", \ + "MAIN_USBCONTROLLERCHANGEDEVENT", \ + "MAIN_USBDEVICE", \ + "MAIN_USBDEVICEFILTER", \ + "MAIN_USBDEVICEFILTERS", \ + "MAIN_USBDEVICESTATECHANGEDEVENT", \ + "MAIN_USBPROXYBACKEND", \ + "MAIN_VBOXSVC", \ + "MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT", \ + "MAIN_VETOEVENT", \ + "MAIN_VFSEXPLORER", \ + "MAIN_VIDEOCAPTURECHANGEDEVENT", \ + "MAIN_VIRTUALBOX", \ + "MAIN_VIRTUALBOXCLIENT", \ + "MAIN_VIRTUALBOXSDS", \ + "MAIN_VIRTUALSYSTEMDESCRIPTION", \ + "MAIN_VMMDEVINTERFACES", \ + "MAIN_VRDESERVER", \ + "MAIN_VRDESERVERCHANGEDEVENT", \ + "MAIN_VRDESERVERINFO", \ + "MAIN_VRDESERVERINFOCHANGEDEVENT", \ + "MISC", \ + "MM", \ + "MM_HEAP", \ + "MM_HYPER", \ + "MM_HYPER_HEAP",\ + "MM_PHYS", \ + "MM_POOL", \ + "NAT_SERVICE", \ + "NET_ADP_DRV", \ + "NET_FLT_DRV", \ + "NET_SERVICE", \ + "NET_SHAPER", \ + "PATM", \ + "PDM", \ + "PDM_ASYNC_COMPLETION", \ + "PDM_BLK_CACHE", \ + "PDM_DEVICE", \ + "PDM_DRIVER", \ + "PDM_LDR", \ + "PDM_QUEUE", \ + "PGM", \ + "PGM_DYNMAP", \ + "PGM_PHYS", \ + "PGM_PHYS_ACCESS",\ + "PGM_POOL", \ + "PGM_SHARED", \ + "REM", \ + "REM_DISAS", \ + "REM_HANDLER", \ + "REM_IOPORT", \ + "REM_MMIO", \ + "REM_PRINTF", \ + "REM_RUN", \ + "SELM", \ + "SHARED_CLIPBOARD",\ + "SHARED_CROPENGL",\ + "SHARED_FOLDERS",\ + "SHARED_OPENGL",\ + "SRV_INTNET", \ + "SSM", \ + "STAM", \ + "SUP", \ + "SUP_DRV", \ + "TM", \ + "TRPM", \ + "USB_CARDREADER",\ + "USB_DRV", \ + "USB_FILTER", \ + "USB_KBD", \ + "USB_MOUSE", \ + "USB_MSD", \ + "USB_REMOTE", \ + "USB_WEBCAM", \ + "VGDRV", \ + "VBGL", \ + "VD", \ + "VD_CUE", \ + "VD_DMG", \ + "VD_ISCSI", \ + "VD_PARALLELS", \ + "VD_QCOW", \ + "VD_QED", \ + "VD_RAW", \ + "VD_VDI", \ + "VD_VHD", \ + "VD_VHDX", \ + "VD_VMDK", \ + "VM", \ + "VMM", \ + "VRDE", \ + "VRDP", \ + "VSCSI", \ + "WEBSERVICE", \ +} + +/** @} */ +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/ostypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/ostypes.h @@ -0,0 +1,170 @@ +/** @file + * VirtualBox - Global Guest Operating System definition. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_ostypes_h +#define ___VBox_ostypes_h + +#include + +RT_C_DECLS_BEGIN + +/** + * Global list of guest operating system types. + * + * They are grouped into families. A family identifer is always has + * mod 0x10000 == 0. New entries can be added, however other components + * depend on the values (e.g. the Qt GUI and guest additions) so the + * existing values MUST stay the same. + * + * Note: distinguish between 32 & 64 bits guest OSes by checking bit 8 (mod 0x100) + */ +typedef enum VBOXOSTYPE +{ + VBOXOSTYPE_Unknown = 0, + VBOXOSTYPE_Unknown_x64 = 0x00100, + VBOXOSTYPE_DOS = 0x10000, + VBOXOSTYPE_Win31 = 0x15000, + VBOXOSTYPE_Win9x = 0x20000, + VBOXOSTYPE_Win95 = 0x21000, + VBOXOSTYPE_Win98 = 0x22000, + VBOXOSTYPE_WinMe = 0x23000, + VBOXOSTYPE_WinNT = 0x30000, + VBOXOSTYPE_WinNT_x64 = 0x30100, + VBOXOSTYPE_WinNT4 = 0x31000, + VBOXOSTYPE_Win2k = 0x32000, + VBOXOSTYPE_WinXP = 0x33000, + VBOXOSTYPE_WinXP_x64 = 0x33100, + VBOXOSTYPE_Win2k3 = 0x34000, + VBOXOSTYPE_Win2k3_x64 = 0x34100, + VBOXOSTYPE_WinVista = 0x35000, + VBOXOSTYPE_WinVista_x64 = 0x35100, + VBOXOSTYPE_Win2k8 = 0x36000, + VBOXOSTYPE_Win2k8_x64 = 0x36100, + VBOXOSTYPE_Win7 = 0x37000, + VBOXOSTYPE_Win7_x64 = 0x37100, + VBOXOSTYPE_Win8 = 0x38000, + VBOXOSTYPE_Win8_x64 = 0x38100, + VBOXOSTYPE_Win2k12_x64 = 0x39100, + VBOXOSTYPE_Win81 = 0x3A000, + VBOXOSTYPE_Win81_x64 = 0x3A100, + VBOXOSTYPE_Win10 = 0x3B000, + VBOXOSTYPE_Win10_x64 = 0x3B100, + VBOXOSTYPE_Win2k16_x64 = 0x3C100, + VBOXOSTYPE_OS2 = 0x40000, + VBOXOSTYPE_OS2Warp3 = 0x41000, + VBOXOSTYPE_OS2Warp4 = 0x42000, + VBOXOSTYPE_OS2Warp45 = 0x43000, + VBOXOSTYPE_ECS = 0x44000, + VBOXOSTYPE_OS21x = 0x48000, + VBOXOSTYPE_Linux = 0x50000, + VBOXOSTYPE_Linux_x64 = 0x50100, + VBOXOSTYPE_Linux22 = 0x51000, + VBOXOSTYPE_Linux24 = 0x52000, + VBOXOSTYPE_Linux24_x64 = 0x52100, + VBOXOSTYPE_Linux26 = 0x53000, + VBOXOSTYPE_Linux26_x64 = 0x53100, + VBOXOSTYPE_ArchLinux = 0x54000, + VBOXOSTYPE_ArchLinux_x64 = 0x54100, + VBOXOSTYPE_Debian = 0x55000, + VBOXOSTYPE_Debian_x64 = 0x55100, + VBOXOSTYPE_OpenSUSE = 0x56000, + VBOXOSTYPE_OpenSUSE_x64 = 0x56100, + VBOXOSTYPE_FedoraCore = 0x57000, + VBOXOSTYPE_FedoraCore_x64 = 0x57100, + VBOXOSTYPE_Gentoo = 0x58000, + VBOXOSTYPE_Gentoo_x64 = 0x58100, + VBOXOSTYPE_Mandriva = 0x59000, + VBOXOSTYPE_Mandriva_x64 = 0x59100, + VBOXOSTYPE_RedHat = 0x5A000, + VBOXOSTYPE_RedHat_x64 = 0x5A100, + VBOXOSTYPE_Turbolinux = 0x5B000, + VBOXOSTYPE_Turbolinux_x64 = 0x5B100, + VBOXOSTYPE_Ubuntu = 0x5C000, + VBOXOSTYPE_Ubuntu_x64 = 0x5C100, + VBOXOSTYPE_Xandros = 0x5D000, + VBOXOSTYPE_Xandros_x64 = 0x5D100, + VBOXOSTYPE_Oracle = 0x5E000, + VBOXOSTYPE_Oracle_x64 = 0x5E100, + VBOXOSTYPE_FreeBSD = 0x60000, + VBOXOSTYPE_FreeBSD_x64 = 0x60100, + VBOXOSTYPE_OpenBSD = 0x61000, + VBOXOSTYPE_OpenBSD_x64 = 0x61100, + VBOXOSTYPE_NetBSD = 0x62000, + VBOXOSTYPE_NetBSD_x64 = 0x62100, + VBOXOSTYPE_Netware = 0x70000, + VBOXOSTYPE_Solaris = 0x80000, + VBOXOSTYPE_Solaris_x64 = 0x80100, + VBOXOSTYPE_OpenSolaris = 0x81000, + VBOXOSTYPE_OpenSolaris_x64 = 0x81100, + VBOXOSTYPE_Solaris11_x64 = 0x82100, + VBOXOSTYPE_L4 = 0x90000, + VBOXOSTYPE_QNX = 0xA0000, + VBOXOSTYPE_MacOS = 0xB0000, + VBOXOSTYPE_MacOS_x64 = 0xB0100, + VBOXOSTYPE_MacOS106 = 0xB2000, + VBOXOSTYPE_MacOS106_x64 = 0xB2100, + VBOXOSTYPE_MacOS107_x64 = 0xB3100, + VBOXOSTYPE_MacOS108_x64 = 0xB4100, + VBOXOSTYPE_MacOS109_x64 = 0xB5100, + VBOXOSTYPE_MacOS1010_x64 = 0xB6100, + VBOXOSTYPE_MacOS1011_x64 = 0xB7100, + VBOXOSTYPE_MacOS1012_x64 = 0xB8100, + VBOXOSTYPE_MacOS1013_x64 = 0xB9100, + VBOXOSTYPE_JRockitVE = 0xC0000, + VBOXOSTYPE_Haiku = 0xD0000, + VBOXOSTYPE_Haiku_x64 = 0xD0100, + VBOXOSTYPE_VBoxBS_x64 = 0xE0100, +/** The bit number which indicates 64-bit or 32-bit. */ +#define VBOXOSTYPE_x64_BIT 8 + /** The mask which indicates 64-bit. */ + VBOXOSTYPE_x64 = 1 << VBOXOSTYPE_x64_BIT, + /** The usual 32-bit hack. */ + VBOXOSTYPE_32BIT_HACK = 0x7fffffff +} VBOXOSTYPE; + + +/** + * Global list of guest OS families. + */ +typedef enum VBOXOSFAMILY +{ + VBOXOSFAMILY_Unknown = 0, + VBOXOSFAMILY_Windows32 = 1, + VBOXOSFAMILY_Windows64 = 2, + VBOXOSFAMILY_Linux32 = 3, + VBOXOSFAMILY_Linux64 = 4, + VBOXOSFAMILY_FreeBSD32 = 5, + VBOXOSFAMILY_FreeBSD64 = 6, + VBOXOSFAMILY_Solaris32 = 7, + VBOXOSFAMILY_Solaris64 = 8, + VBOXOSFAMILY_MacOSX32 = 9, + VBOXOSFAMILY_MacOSX64 = 10, + /** The usual 32-bit hack. */ + VBOXOSFAMILY_32BIT_HACK = 0x7fffffff +} VBOXOSFAMILY; + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/param.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/param.h @@ -0,0 +1,190 @@ +/** @file + * VirtualBox Parameter Definitions. (VMM,+) + * + * param.mac is generated from this file by running 'kmk incs' in the root. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_param_h +#define ___VBox_param_h + +#include +#include + + +/** @defgroup grp_vbox_param VBox Parameter Definition + * @{ + */ + +/** The maximum number of pages that can be allocated and mapped + * by various MM, PGM and SUP APIs. */ +#if ARCH_BITS == 64 +# define VBOX_MAX_ALLOC_PAGE_COUNT (_512M / PAGE_SIZE) +#else +# define VBOX_MAX_ALLOC_PAGE_COUNT (_256M / PAGE_SIZE) +#endif + +/** @def VBOX_WITH_PAGE_SHARING + * Enables the page sharing code. + * @remarks This must match GMMR0Init; currently we only support page fusion on + * all 64-bit hosts except Mac OS X */ +#if ( HC_ARCH_BITS == 64 /* ASM-NOINC */ \ + && (defined(RT_OS_FREEBSD) || defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)) ) /* ASM-NOINC */ \ + || defined(DOXYGEN_RUNNING) /* ASM-NOINC */ +# define VBOX_WITH_PAGE_SHARING /* ASM-NOINC */ +#endif /* ASM-NOINC */ + + +/** @defgroup grp_vbox_param_mm Memory Monitor Parameters + * @{ + */ +/** Initial address of Hypervisor Memory Area. + * MUST BE PAGE TABLE ALIGNED! */ +#define MM_HYPER_AREA_ADDRESS UINT32_C(0xa0000000) + +/** The max size of the hypervisor memory area. */ +#define MM_HYPER_AREA_MAX_SIZE (40U * _1M) /**< @todo Readjust when floating RAMRANGEs have been implemented. Used to be 20 * _1MB */ + +/** Maximum number of bytes we can dynamically map into the hypervisor region. + * This must be a power of 2 number of pages! + */ +#define MM_HYPER_DYNAMIC_SIZE (16U * PAGE_SIZE) + +/** The minimum guest RAM size in bytes. */ +#define MM_RAM_MIN UINT32_C(0x00400000) +/** The maximum guest RAM size in bytes. */ +#if HC_ARCH_BITS == 64 +# define MM_RAM_MAX UINT64_C(0x20000000000) +#else +# define MM_RAM_MAX UINT64_C(0x000E0000000) +#endif +/** The minimum guest RAM size in MBs. */ +#define MM_RAM_MIN_IN_MB UINT32_C(4) +/** The maximum guest RAM size in MBs. */ +#if HC_ARCH_BITS == 64 +# define MM_RAM_MAX_IN_MB UINT32_C(2097152) +#else +# define MM_RAM_MAX_IN_MB UINT32_C(3584) +#endif +/** The default size of the below 4GB RAM hole. */ +#define MM_RAM_HOLE_SIZE_DEFAULT (512U * _1M) +/** The maximum 64-bit MMIO BAR size. + * @remarks There isn't really any limit here other than the size of the + * tracking structures we need (around 1/256 of the size). */ +#if HC_ARCH_BITS == 64 +# define MM_MMIO_64_MAX _1T +#else +# define MM_MMIO_64_MAX (_1G64 * 16) +#endif +/** The maximum 32-bit MMIO BAR size. */ +#define MM_MMIO_32_MAX _2G + +/** @} */ + + +/** @defgroup grp_vbox_param_pgm Page Manager Parameters + * @{ + */ +/** The number of handy pages. + * This should be a power of two. */ +#define PGM_HANDY_PAGES 128 +/** The threshold at which allocation of more handy pages is flagged. */ +#define PGM_HANDY_PAGES_SET_FF 32 +/** The threshold at which we will allocate more when in ring-3. + * This is must be smaller than both PGM_HANDY_PAGES_SET_FF and + * PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_R3_ALLOC 8 +/** The threshold at which we will allocate more when in ring-0 or raw mode. + * The idea is that we should never go below this threshold while in ring-0 or + * raw mode because of PGM_HANDY_PAGES_RZ_TO_R3. However, should this happen and + * we are actually out of memory, we will have 8 page to get out of whatever + * code we're executing. + * + * This is must be smaller than both PGM_HANDY_PAGES_SET_FF and + * PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_RZ_ALLOC 8 +/** The threshold at which we force return to R3 ASAP. + * The idea is that this should be large enough to get out of any code and up to + * the main EM loop when we are out of memory. + * This must be less or equal to PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_RZ_TO_R3 24 +/** The minimum number of handy pages (after allocation). + * This must be greater or equal to PGM_HANDY_PAGES_SET_FF. + * Another name would be PGM_HANDY_PAGES_EXTRA_RESERVATION or _PARANOIA. :-) */ +#define PGM_HANDY_PAGES_MIN 32 +/** @} */ + + +/** @defgroup grp_vbox_param_vmm VMM Parameters + * @{ + */ +/** VMM stack size. */ +#ifdef RT_OS_DARWIN +# define VMM_STACK_SIZE 16384U +#else +# define VMM_STACK_SIZE 8192U +#endif +/** Min number of Virtual CPUs. */ +#define VMM_MIN_CPU_COUNT 1 +/** Max number of Virtual CPUs. */ +#define VMM_MAX_CPU_COUNT 64 + +/** @} */ + + +/** @defgroup grp_vbox_pci PCI Identifiers + * @{ */ +/** VirtualBox PCI vendor ID. */ +#define VBOX_PCI_VENDORID (0x80ee) + +/** @name VirtualBox graphics card identifiers + * @{ */ +#define VBOX_VENDORID VBOX_PCI_VENDORID /**< @todo wonderful choice of name! Please squeeze a _VGA_ or something in there, please. */ +#define VBOX_DEVICEID (0xbeef) /**< @todo ditto. */ +#define VBOX_VESA_VENDORID VBOX_PCI_VENDORID +#define VBOX_VESA_DEVICEID (0xbeef) +/** @} */ + +/** @name VMMDev PCI card identifiers + * @{ */ +#define VMMDEV_VENDORID VBOX_PCI_VENDORID +#define VMMDEV_DEVICEID (0xcafe) +/** @} */ + +/** @} */ + + +/** @defgroup grp_vbox_param_misc Misc + * @{ */ + +/** The maximum size of a generic segment offload (GSO) frame. This limit is + * imposed by the 16-bit frame size in internal networking header. */ +#define VBOX_MAX_GSO_SIZE 0xfff0 + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/types.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/types.h @@ -0,0 +1,1082 @@ +/** @file + * VirtualBox - Types. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_types_h +#define ___VBox_types_h + +#include +#include + + +/** @defgroup grp_types VBox Basic Types + * @{ + */ + + +/** @defgroup grp_types_both Common Guest and Host Context Basic Types + * @{ + */ + + +/** @defgroup grp_types_hc Host Context Basic Types + * @{ + */ + +/** @} */ + + +/** @defgroup grp_types_gc Guest Context Basic Types + * @{ + */ + +/** @} */ + + +/** Pointer to per support driver session data. + * (The data is a R0 entity and private to the the R0 SUP part. All + * other should consider this a sort of handle.) */ +typedef R0PTRTYPE(struct SUPDRVSESSION *) PSUPDRVSESSION; + +/** Event semaphore handle. Ring-0 / ring-3. */ +typedef R0PTRTYPE(struct SUPSEMEVENTHANDLE *) SUPSEMEVENT; +/** Pointer to an event semaphore handle. */ +typedef SUPSEMEVENT *PSUPSEMEVENT; +/** Nil event semaphore handle. */ +#define NIL_SUPSEMEVENT ((SUPSEMEVENT)0) + +/** Multiple release event semaphore handle. Ring-0 / ring-3. */ +typedef R0PTRTYPE(struct SUPSEMEVENTMULTIHANDLE *) SUPSEMEVENTMULTI; +/** Pointer to an multiple release event semaphore handle. */ +typedef SUPSEMEVENTMULTI *PSUPSEMEVENTMULTI; +/** Nil multiple release event semaphore handle. */ +#define NIL_SUPSEMEVENTMULTI ((SUPSEMEVENTMULTI)0) + + +/** Pointer to a VM. */ +typedef struct VM *PVM; +/** Pointer to a VM - Ring-0 Ptr. */ +typedef R0PTRTYPE(struct VM *) PVMR0; +/** Pointer to a VM - Ring-3 Ptr. */ +typedef R3PTRTYPE(struct VM *) PVMR3; +/** Pointer to a VM - RC Ptr. */ +typedef RCPTRTYPE(struct VM *) PVMRC; + +/** Pointer to a virtual CPU structure. */ +typedef struct VMCPU * PVMCPU; +/** Pointer to a const virtual CPU structure. */ +typedef const struct VMCPU * PCVMCPU; +/** Pointer to a virtual CPU structure - Ring-3 Ptr. */ +typedef R3PTRTYPE(struct VMCPU *) PVMCPUR3; +/** Pointer to a virtual CPU structure - Ring-0 Ptr. */ +typedef R0PTRTYPE(struct VMCPU *) PVMCPUR0; +/** Pointer to a virtual CPU structure - RC Ptr. */ +typedef RCPTRTYPE(struct VMCPU *) PVMCPURC; + +/** Pointer to a ring-0 (global) VM structure. */ +typedef R0PTRTYPE(struct GVM *) PGVM; + +/** Pointer to a ring-3 (user mode) VM structure. */ +typedef R3PTRTYPE(struct UVM *) PUVM; + +/** Pointer to a ring-3 (user mode) VMCPU structure. */ +typedef R3PTRTYPE(struct UVMCPU *) PUVMCPU; + +/** Virtual CPU ID. */ +typedef uint32_t VMCPUID; +/** Pointer to a virtual CPU ID. */ +typedef VMCPUID *PVMCPUID; +/** @name Special CPU ID values. + * Most of these are for request scheduling. + * + * @{ */ +/** All virtual CPUs. */ +#define VMCPUID_ALL UINT32_C(0xfffffff2) +/** All virtual CPUs, descending order. */ +#define VMCPUID_ALL_REVERSE UINT32_C(0xfffffff3) +/** Any virtual CPU. + * Intended for scheduling a VM request or some other task. */ +#define VMCPUID_ANY UINT32_C(0xfffffff4) +/** Any virtual CPU; always queue for future execution. + * Intended for scheduling a VM request or some other task. */ +#define VMCPUID_ANY_QUEUE UINT32_C(0xfffffff5) +/** The NIL value. */ +#define NIL_VMCPUID UINT32_C(0xfffffffd) +/** @} */ + +/** + * Virtual CPU set. + */ +typedef struct VMCPUSET +{ + /** The bitmap data. */ + uint32_t au32Bitmap[8 /*256/32*/]; +} VMCPUSET; +/** Pointer to a Virtual CPU set. */ +typedef VMCPUSET *PVMCPUSET; +/** Pointer to a const Virtual CPU set. */ +typedef VMCPUSET const *PCVMCPUSET; + + +/** + * VM State + */ +typedef enum VMSTATE +{ + /** The VM is being created. */ + VMSTATE_CREATING = 0, + /** The VM is created. */ + VMSTATE_CREATED, + /** The VM state is being loaded from file. */ + VMSTATE_LOADING, + /** The VM is being powered on */ + VMSTATE_POWERING_ON, + /** The VM is being resumed. */ + VMSTATE_RESUMING, + /** The VM is runnning. */ + VMSTATE_RUNNING, + /** Live save: The VM is running and the state is being saved. */ + VMSTATE_RUNNING_LS, + /** Fault Tolerance: The VM is running and the state is being synced. */ + VMSTATE_RUNNING_FT, + /** The VM is being reset. */ + VMSTATE_RESETTING, + /** Live save: The VM is being reset and immediately suspended. */ + VMSTATE_RESETTING_LS, + /** The VM is being soft/warm reset. */ + VMSTATE_SOFT_RESETTING, + /** Live save: The VM is being soft/warm reset (not suspended afterwards). */ + VMSTATE_SOFT_RESETTING_LS, + /** The VM is being suspended. */ + VMSTATE_SUSPENDING, + /** Live save: The VM is being suspended during a live save operation, either as + * part of the normal flow or VMR3Reset. */ + VMSTATE_SUSPENDING_LS, + /** Live save: The VM is being suspended by VMR3Suspend during live save. */ + VMSTATE_SUSPENDING_EXT_LS, + /** The VM is suspended. */ + VMSTATE_SUSPENDED, + /** Live save: The VM has been suspended and is waiting for the live save + * operation to move on. */ + VMSTATE_SUSPENDED_LS, + /** Live save: The VM has been suspended by VMR3Suspend during a live save. */ + VMSTATE_SUSPENDED_EXT_LS, + /** The VM is suspended and its state is being saved by EMT(0). (See SSM) */ + VMSTATE_SAVING, + /** The VM is being debugged. (See DBGF.) */ + VMSTATE_DEBUGGING, + /** Live save: The VM is being debugged while the live phase is going on. */ + VMSTATE_DEBUGGING_LS, + /** The VM is being powered off. */ + VMSTATE_POWERING_OFF, + /** Live save: The VM is being powered off and the save cancelled. */ + VMSTATE_POWERING_OFF_LS, + /** The VM is switched off, awaiting destruction. */ + VMSTATE_OFF, + /** Live save: Waiting for cancellation and transition to VMSTATE_OFF. */ + VMSTATE_OFF_LS, + /** The VM is powered off because of a fatal error. */ + VMSTATE_FATAL_ERROR, + /** Live save: Waiting for cancellation and transition to FatalError. */ + VMSTATE_FATAL_ERROR_LS, + /** The VM is in guru meditation over a fatal failure. */ + VMSTATE_GURU_MEDITATION, + /** Live save: Waiting for cancellation and transition to GuruMeditation. */ + VMSTATE_GURU_MEDITATION_LS, + /** The VM is screwed because of a failed state loading. */ + VMSTATE_LOAD_FAILURE, + /** The VM is being destroyed. */ + VMSTATE_DESTROYING, + /** Terminated. */ + VMSTATE_TERMINATED, + /** hack forcing the size of the enum to 32-bits. */ + VMSTATE_MAKE_32BIT_HACK = 0x7fffffff +} VMSTATE; + +/** @def VBOXSTRICTRC_STRICT_ENABLED + * Indicates that VBOXSTRICTRC is in strict mode. + */ +#if defined(__cplusplus) \ + && ARCH_BITS == 64 /* cdecl requires classes and structs as hidden params. */ \ + && !defined(_MSC_VER) /* trouble similar to 32-bit gcc. */ \ + && ( defined(RT_STRICT) \ + || defined(VBOX_STRICT) \ + || defined(DEBUG) \ + || defined(DOXYGEN_RUNNING) ) +# define VBOXSTRICTRC_STRICT_ENABLED 1 +#endif + +/** We need RTERR_STRICT_RC. */ +#if defined(VBOXSTRICTRC_STRICT_ENABLED) && !defined(RTERR_STRICT_RC) +# define RTERR_STRICT_RC 1 +#endif + +/** + * Strict VirtualBox status code. + * + * This is normally an 32-bit integer and the only purpose of the type is to + * highlight the special handling that is required. But in strict build it is a + * class that causes compilation and runtime errors for some of the incorrect + * handling. + */ +#ifdef VBOXSTRICTRC_STRICT_ENABLED +struct VBOXSTRICTRC +{ +protected: + /** The status code. */ + int32_t m_rc; + +public: + /** Default constructor setting the status to VERR_IPE_UNINITIALIZED_STATUS. */ + VBOXSTRICTRC() +#ifdef VERR_IPE_UNINITIALIZED_STATUS + : m_rc(VERR_IPE_UNINITIALIZED_STATUS) +#else + : m_rc(-233 /*VERR_IPE_UNINITIALIZED_STATUS*/) +#endif + { + } + + /** Constructor for normal integer status codes. */ + VBOXSTRICTRC(int32_t const rc) + : m_rc(rc) + { + } + + /** Getter that VBOXSTRICTRC_VAL can use. */ + int32_t getValue() const { return m_rc; } + + /** @name Comparison operators + * @{ */ + bool operator==(int32_t rc) const { return m_rc == rc; } + bool operator!=(int32_t rc) const { return m_rc != rc; } + bool operator<=(int32_t rc) const { return m_rc <= rc; } + bool operator>=(int32_t rc) const { return m_rc >= rc; } + bool operator<(int32_t rc) const { return m_rc < rc; } + bool operator>(int32_t rc) const { return m_rc > rc; } + + bool operator==(const VBOXSTRICTRC &rRc) const { return m_rc == rRc.m_rc; } + bool operator!=(const VBOXSTRICTRC &rRc) const { return m_rc != rRc.m_rc; } + bool operator<=(const VBOXSTRICTRC &rRc) const { return m_rc <= rRc.m_rc; } + bool operator>=(const VBOXSTRICTRC &rRc) const { return m_rc >= rRc.m_rc; } + bool operator<(const VBOXSTRICTRC &rRc) const { return m_rc < rRc.m_rc; } + bool operator>(const VBOXSTRICTRC &rRc) const { return m_rc > rRc.m_rc; } + /** @} */ + + /** Special automatic cast for RT_SUCCESS_NP. */ + operator RTErrStrictType2() const { return RTErrStrictType2(m_rc); } + +private: + /** @name Constructors that will prevent some of the bad types. + * @{ */ + VBOXSTRICTRC(uint8_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint16_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint32_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint64_t rc) : m_rc(-999) { NOREF(rc); } + + VBOXSTRICTRC(int8_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(int16_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(int64_t rc) : m_rc(-999) { NOREF(rc); } + /** @} */ +}; +# ifdef _MSC_VER +# pragma warning(disable:4190) +# endif +#else +typedef int32_t VBOXSTRICTRC; +#endif + +/** @def VBOXSTRICTRC_VAL + * Explicit getter. + * @param rcStrict The strict VirtualBox status code. + */ +#ifdef VBOXSTRICTRC_STRICT_ENABLED +# define VBOXSTRICTRC_VAL(rcStrict) ( (rcStrict).getValue() ) +#else +# define VBOXSTRICTRC_VAL(rcStrict) (rcStrict) +#endif + +/** @def VBOXSTRICTRC_TODO + * Returns that needs dealing with. + * @param rcStrict The strict VirtualBox status code. + */ +#define VBOXSTRICTRC_TODO(rcStrict) VBOXSTRICTRC_VAL(rcStrict) + + +/** Pointer to a PDM Base Interface. */ +typedef struct PDMIBASE *PPDMIBASE; +/** Pointer to a pointer to a PDM Base Interface. */ +typedef PPDMIBASE *PPPDMIBASE; + +/** Pointer to a PDM Device Instance. */ +typedef struct PDMDEVINS *PPDMDEVINS; +/** Pointer to a pointer to a PDM Device Instance. */ +typedef PPDMDEVINS *PPPDMDEVINS; +/** R3 pointer to a PDM Device Instance. */ +typedef R3PTRTYPE(PPDMDEVINS) PPDMDEVINSR3; +/** R0 pointer to a PDM Device Instance. */ +typedef R0PTRTYPE(PPDMDEVINS) PPDMDEVINSR0; +/** RC pointer to a PDM Device Instance. */ +typedef RCPTRTYPE(PPDMDEVINS) PPDMDEVINSRC; + +/** Pointer to a PDM PCI device structure. */ +typedef struct PDMPCIDEV *PPDMPCIDEV; + +/** Pointer to a PDM USB Device Instance. */ +typedef struct PDMUSBINS *PPDMUSBINS; +/** Pointer to a pointer to a PDM USB Device Instance. */ +typedef PPDMUSBINS *PPPDMUSBINS; + +/** Pointer to a PDM Driver Instance. */ +typedef struct PDMDRVINS *PPDMDRVINS; +/** Pointer to a pointer to a PDM Driver Instance. */ +typedef PPDMDRVINS *PPPDMDRVINS; +/** R3 pointer to a PDM Driver Instance. */ +typedef R3PTRTYPE(PPDMDRVINS) PPDMDRVINSR3; +/** R0 pointer to a PDM Driver Instance. */ +typedef R0PTRTYPE(PPDMDRVINS) PPDMDRVINSR0; +/** RC pointer to a PDM Driver Instance. */ +typedef RCPTRTYPE(PPDMDRVINS) PPDMDRVINSRC; + +/** Pointer to a PDM Service Instance. */ +typedef struct PDMSRVINS *PPDMSRVINS; +/** Pointer to a pointer to a PDM Service Instance. */ +typedef PPDMSRVINS *PPPDMSRVINS; + +/** Pointer to a PDM critical section. */ +typedef union PDMCRITSECT *PPDMCRITSECT; +/** Pointer to a const PDM critical section. */ +typedef const union PDMCRITSECT *PCPDMCRITSECT; + +/** Pointer to a PDM read/write critical section. */ +typedef union PDMCRITSECTRW *PPDMCRITSECTRW; +/** Pointer to a const PDM read/write critical section. */ +typedef union PDMCRITSECTRW const *PCPDMCRITSECTRW; + +/** R3 pointer to a timer. */ +typedef R3PTRTYPE(struct TMTIMER *) PTMTIMERR3; +/** Pointer to a R3 pointer to a timer. */ +typedef PTMTIMERR3 *PPTMTIMERR3; + +/** R0 pointer to a timer. */ +typedef R0PTRTYPE(struct TMTIMER *) PTMTIMERR0; +/** Pointer to a R3 pointer to a timer. */ +typedef PTMTIMERR0 *PPTMTIMERR0; + +/** RC pointer to a timer. */ +typedef RCPTRTYPE(struct TMTIMER *) PTMTIMERRC; +/** Pointer to a RC pointer to a timer. */ +typedef PTMTIMERRC *PPTMTIMERRC; + +/** Pointer to a timer. */ +typedef CTX_SUFF(PTMTIMER) PTMTIMER; +/** Pointer to a pointer to a timer. */ +typedef PTMTIMER *PPTMTIMER; + +/** SSM Operation handle. */ +typedef struct SSMHANDLE *PSSMHANDLE; +/** Pointer to a const SSM stream method table. */ +typedef struct SSMSTRMOPS const *PCSSMSTRMOPS; + +/** Pointer to a CPUMCTX. */ +typedef struct CPUMCTX *PCPUMCTX; +/** Pointer to a const CPUMCTX. */ +typedef const struct CPUMCTX *PCCPUMCTX; + +/** Pointer to a CPU context core. */ +typedef struct CPUMCTXCORE *PCPUMCTXCORE; +/** Pointer to a const CPU context core. */ +typedef const struct CPUMCTXCORE *PCCPUMCTXCORE; + +/** Pointer to a selector register. */ +typedef struct CPUMSELREG *PCPUMSELREG; +/** Pointer to a const selector register. */ +typedef const struct CPUMSELREG *PCCPUMSELREG; + +/** Pointer to selector hidden registers. + * @deprecated Replaced by PCPUMSELREG */ +typedef struct CPUMSELREG *PCPUMSELREGHID; +/** Pointer to const selector hidden registers. + * @deprecated Replaced by PCCPUMSELREG */ +typedef const struct CPUMSELREG *PCCPUMSELREGHID; + +/** @} */ + + +/** @defgroup grp_types_idt Interrupt Descriptor Table Entry. + * @todo This all belongs in x86.h! + * @{ */ + +/** @todo VBOXIDT -> VBOXDESCIDT, skip the complex variations. We'll never use them. */ + +/** IDT Entry, Task Gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_TASKGATE +{ + /** Reserved. */ + unsigned u16Reserved1 : 16; + /** Task Segment Selector. */ + unsigned u16TSS : 16; + /** More reserved. */ + unsigned u8Reserved2 : 8; + /** Fixed value bit 0 - Set to 1. */ + unsigned u1Fixed0 : 1; + /** Busy bit. */ + unsigned u1Busy : 1; + /** Fixed value bit 2 - Set to 1. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** Reserved. */ + unsigned u16Reserved3 : 16; +} VBOXIDTE_TASKGATE; +#pragma pack() +/** Pointer to IDT Entry, Task gate view. */ +typedef VBOXIDTE_TASKGATE *PVBOXIDTE_TASKGATE; + + +/** IDT Entry, Intertupt gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_INTERRUPTGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved2 : 5; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 1. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed6 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_INTERRUPTGATE; +#pragma pack() +/** Pointer to IDT Entry, Interrupt gate view. */ +typedef VBOXIDTE_INTERRUPTGATE *PVBOXIDTE_INTERRUPTGATE; + +/** IDT Entry, Trap Gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_TRAPGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved2 : 5; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 1. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 1. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed6 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_TRAPGATE; +#pragma pack() +/** Pointer to IDT Entry, Trap Gate view. */ +typedef VBOXIDTE_TRAPGATE *PVBOXIDTE_TRAPGATE; + +/** IDT Entry Generic view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_GENERIC +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved : 5; + /** IDT Type part one (not used for task gate). */ + unsigned u3Type1 : 3; + /** IDT Type part two. */ + unsigned u5Type2 : 5; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_GENERIC; +#pragma pack() +/** Pointer to IDT Entry Generic view. */ +typedef VBOXIDTE_GENERIC *PVBOXIDTE_GENERIC; + +/** IDT Type1 value. (Reserved for task gate!) */ +#define VBOX_IDTE_TYPE1 0 +/** IDT Type2 value - Task gate. */ +#define VBOX_IDTE_TYPE2_TASK 0x5 +/** IDT Type2 value - 16 bit interrupt gate. */ +#define VBOX_IDTE_TYPE2_INT_16 0x6 +/** IDT Type2 value - 32 bit interrupt gate. */ +#define VBOX_IDTE_TYPE2_INT_32 0xe +/** IDT Type2 value - 16 bit trap gate. */ +#define VBOX_IDTE_TYPE2_TRAP_16 0x7 +/** IDT Type2 value - 32 bit trap gate. */ +#define VBOX_IDTE_TYPE2_TRAP_32 0xf + +/** IDT Entry. */ +#pragma pack(1) /* paranoia */ +typedef union VBOXIDTE +{ + /** Task gate view. */ + VBOXIDTE_TASKGATE Task; + /** Trap gate view. */ + VBOXIDTE_TRAPGATE Trap; + /** Interrupt gate view. */ + VBOXIDTE_INTERRUPTGATE Int; + /** Generic IDT view. */ + VBOXIDTE_GENERIC Gen; + + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; + /** 64 bit unsigned integer view. */ + uint64_t au64; +} VBOXIDTE; +#pragma pack() +/** Pointer to IDT Entry. */ +typedef VBOXIDTE *PVBOXIDTE; +/** Pointer to IDT Entry. */ +typedef VBOXIDTE const *PCVBOXIDTE; + +/** IDT Entry, 64-bit mode, Intertupt gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_INTERRUPTGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Interrupt Stack Table Index. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed5 : 1; + /** Fixed value bit 6 - Set to 1. */ + unsigned u1Fixed6 : 1; + /** Fixed value bit 7 - Set to 1. */ + unsigned u1Fixed7 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed8 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_INTERRUPTGATE; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Interrupt gate view. */ +typedef VBOXIDTE64_INTERRUPTGATE *PVBOXIDTE64_INTERRUPTGATE; + +/** IDT Entry, 64-bit mode, Trap gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_TRAPGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Interrupt Stack Table Index. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Fixed value bit 6 - Set to 1. */ + unsigned u1Fixed6 : 1; + /** Fixed value bit 7 - Set to 1. */ + unsigned u1Fixed7 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed8 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_TRAPGATE; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Trap gate view. */ +typedef VBOXIDTE64_TRAPGATE *PVBOXIDTE64_TRAPGATE; + +/** IDT Entry, 64-bit mode, Generic view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_GENERIC +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** IDT Type part one (not used for task gate). */ + unsigned u3Type1 : 3; + /** IDT Type part two. */ + unsigned u5Type2 : 5; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_GENERIC; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Generic view. */ +typedef VBOXIDTE64_GENERIC *PVBOXIDTE64_GENERIC; + +/** IDT Entry, 64-bit mode. */ +#pragma pack(1) /* paranoia */ +typedef union VBOXIDTE64 +{ + /** Trap gate view. */ + VBOXIDTE64_TRAPGATE Trap; + /** Interrupt gate view. */ + VBOXIDTE64_INTERRUPTGATE Int; + /** Generic IDT view. */ + VBOXIDTE64_GENERIC Gen; + + /** 8 bit unsigned integer view. */ + uint8_t au8[16]; + /** 16 bit unsigned integer view. */ + uint16_t au16[8]; + /** 32 bit unsigned integer view. */ + uint32_t au32[4]; + /** 64 bit unsigned integer view. */ + uint64_t au64[2]; +} VBOXIDTE64; +#pragma pack() +/** Pointer to IDT Entry. */ +typedef VBOXIDTE64 *PVBOXIDTE64; +/** Pointer to IDT Entry. */ +typedef VBOXIDTE64 const *PCVBOXIDTE64; + +#pragma pack(1) +/** IDTR */ +typedef struct VBOXIDTR +{ + /** Size of the IDT. */ + uint16_t cbIdt; + /** Address of the IDT. */ + uint64_t pIdt; +} VBOXIDTR, *PVBOXIDTR; +#pragma pack() + +/** @} */ + + +/** @def VBOXIDTE_OFFSET + * Return the offset of an IDT entry. + */ +#define VBOXIDTE_OFFSET(desc) \ + ( ((uint32_t)((desc).Gen.u16OffsetHigh) << 16) \ + | ( (desc).Gen.u16OffsetLow ) ) + +/** @def VBOXIDTE64_OFFSET + * Return the offset of an IDT entry. + */ +#define VBOXIDTE64_OFFSET(desc) \ + ( ((uint64_t)((desc).Gen.u32OffsetHigh64) << 32) \ + | ((uint32_t)((desc).Gen.u16OffsetHigh) << 16) \ + | ( (desc).Gen.u16OffsetLow ) ) + +#pragma pack(1) +/** GDTR */ +typedef struct VBOXGDTR +{ + /** Size of the GDT. */ + uint16_t cbGdt; + /** Address of the GDT. */ + uint64_t pGdt; +} VBOXGDTR; +#pragma pack() +/** Pointer to GDTR. */ +typedef VBOXGDTR *PVBOXGDTR; + +/** @} */ + + +/** + * 32-bit Task Segment used in raw mode. + * @todo Move this to SELM! Use X86TSS32 instead. + */ +#pragma pack(1) +typedef struct VBOXTSS +{ + /** 0x00 - Back link to previous task. (static) */ + RTSEL selPrev; + uint16_t padding1; + /** 0x04 - Ring-0 stack pointer. (static) */ + uint32_t esp0; + /** 0x08 - Ring-0 stack segment. (static) */ + RTSEL ss0; + uint16_t padding_ss0; + /** 0x0c - Ring-1 stack pointer. (static) */ + uint32_t esp1; + /** 0x10 - Ring-1 stack segment. (static) */ + RTSEL ss1; + uint16_t padding_ss1; + /** 0x14 - Ring-2 stack pointer. (static) */ + uint32_t esp2; + /** 0x18 - Ring-2 stack segment. (static) */ + RTSEL ss2; + uint16_t padding_ss2; + /** 0x1c - Page directory for the task. (static) */ + uint32_t cr3; + /** 0x20 - EIP before task switch. */ + uint32_t eip; + /** 0x24 - EFLAGS before task switch. */ + uint32_t eflags; + /** 0x28 - EAX before task switch. */ + uint32_t eax; + /** 0x2c - ECX before task switch. */ + uint32_t ecx; + /** 0x30 - EDX before task switch. */ + uint32_t edx; + /** 0x34 - EBX before task switch. */ + uint32_t ebx; + /** 0x38 - ESP before task switch. */ + uint32_t esp; + /** 0x3c - EBP before task switch. */ + uint32_t ebp; + /** 0x40 - ESI before task switch. */ + uint32_t esi; + /** 0x44 - EDI before task switch. */ + uint32_t edi; + /** 0x48 - ES before task switch. */ + RTSEL es; + uint16_t padding_es; + /** 0x4c - CS before task switch. */ + RTSEL cs; + uint16_t padding_cs; + /** 0x50 - SS before task switch. */ + RTSEL ss; + uint16_t padding_ss; + /** 0x54 - DS before task switch. */ + RTSEL ds; + uint16_t padding_ds; + /** 0x58 - FS before task switch. */ + RTSEL fs; + uint16_t padding_fs; + /** 0x5c - GS before task switch. */ + RTSEL gs; + uint16_t padding_gs; + /** 0x60 - LDTR before task switch. */ + RTSEL selLdt; + uint16_t padding_ldt; + /** 0x64 - Debug trap flag */ + uint16_t fDebugTrap; + /** 0x66 - Offset relative to the TSS of the start of the I/O Bitmap + * and the end of the interrupt redirection bitmap. */ + uint16_t offIoBitmap; + /** 0x68 - 32 bytes for the virtual interrupt redirection bitmap. (VME) */ + uint8_t IntRedirBitmap[32]; +} VBOXTSS; +#pragma pack() +/** Pointer to task segment. */ +typedef VBOXTSS *PVBOXTSS; +/** Pointer to const task segment. */ +typedef const VBOXTSS *PCVBOXTSS; + + +/** Pointer to a callback method table provided by the VM API user. */ +typedef struct VMM2USERMETHODS const *PCVMM2USERMETHODS; + + +/** + * Data transport buffer (scatter/gather) + */ +typedef struct PDMDATASEG +{ + /** Length of buffer in entry. */ + size_t cbSeg; + /** Pointer to the start of the buffer. */ + void *pvSeg; +} PDMDATASEG; +/** Pointer to a data transport segment. */ +typedef PDMDATASEG *PPDMDATASEG; +/** Pointer to a const data transport segment. */ +typedef PDMDATASEG const *PCPDMDATASEG; + + +/** + * Forms of generic segment offloading. + */ +typedef enum PDMNETWORKGSOTYPE +{ + /** Invalid zero value. */ + PDMNETWORKGSOTYPE_INVALID = 0, + /** TCP/IPv4 - no CWR/ECE encoding. */ + PDMNETWORKGSOTYPE_IPV4_TCP, + /** TCP/IPv6 - no CWR/ECE encoding. */ + PDMNETWORKGSOTYPE_IPV6_TCP, + /** UDP/IPv4. */ + PDMNETWORKGSOTYPE_IPV4_UDP, + /** UDP/IPv6. */ + PDMNETWORKGSOTYPE_IPV6_UDP, + /** TCP/IPv6 over IPv4 tunneling - no CWR/ECE encoding. + * The header offsets and sizes relates to IPv4 and TCP, the IPv6 header is + * figured out as needed. + * @todo Needs checking against facts, this is just an outline of the idea. */ + PDMNETWORKGSOTYPE_IPV4_IPV6_TCP, + /** UDP/IPv6 over IPv4 tunneling. + * The header offsets and sizes relates to IPv4 and UDP, the IPv6 header is + * figured out as needed. + * @todo Needs checking against facts, this is just an outline of the idea. */ + PDMNETWORKGSOTYPE_IPV4_IPV6_UDP, + /** The end of valid GSO types. */ + PDMNETWORKGSOTYPE_END +} PDMNETWORKGSOTYPE; + + +/** + * Generic segment offloading context. + * + * We generally follow the E1000 specs wrt to which header fields we change. + * However the GSO type implies where the checksum fields are and that they are + * always updated from scratch (no half done pseudo checksums). + * + * @remarks This is part of the internal network GSO packets. Take great care + * when making changes. The size is expected to be exactly 8 bytes. + */ +typedef struct PDMNETWORKGSO +{ + /** The type of segmentation offloading we're performing (PDMNETWORKGSOTYPE). */ + uint8_t u8Type; + /** The total header size. */ + uint8_t cbHdrsTotal; + /** The max segment size (MSS) to apply. */ + uint16_t cbMaxSeg; + + /** Offset of the first header (IPv4 / IPv6). 0 if not not needed. */ + uint8_t offHdr1; + /** Offset of the second header (TCP / UDP). 0 if not not needed. */ + uint8_t offHdr2; + /** The header size used for segmentation (equal to offHdr2 in UFO). */ + uint8_t cbHdrsSeg; + /** Unused. */ + uint8_t u8Unused; +} PDMNETWORKGSO; +/** Pointer to a GSO context. */ +typedef PDMNETWORKGSO *PPDMNETWORKGSO; +/** Pointer to a const GSO context. */ +typedef PDMNETWORKGSO const *PCPDMNETWORKGSO; + + +/** + * The current ROM page protection. + * + * @remarks This is part of the saved state. + */ +typedef enum PGMROMPROT +{ + /** The customary invalid value. */ + PGMROMPROT_INVALID = 0, + /** Read from the virgin ROM page, ignore writes. + * Map the virgin page, use write access handler to ignore writes. */ + PGMROMPROT_READ_ROM_WRITE_IGNORE, + /** Read from the virgin ROM page, write to the shadow RAM. + * Map the virgin page, use write access handler to change the shadow RAM. */ + PGMROMPROT_READ_ROM_WRITE_RAM, + /** Read from the shadow ROM page, ignore writes. + * Map the shadow page read-only, use write access handler to ignore writes. */ + PGMROMPROT_READ_RAM_WRITE_IGNORE, + /** Read from the shadow ROM page, ignore writes. + * Map the shadow page read-write, disabled write access handler. */ + PGMROMPROT_READ_RAM_WRITE_RAM, + /** The end of valid values. */ + PGMROMPROT_END, + /** The usual 32-bit type size hack. */ + PGMROMPROT_32BIT_HACK = 0x7fffffff +} PGMROMPROT; + + +/** + * Page mapping lock. + */ +typedef struct PGMPAGEMAPLOCK +{ +#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) + /** The locked page. */ + void *pvPage; + /** Pointer to the CPU that made the mapping. + * In ring-0 and raw-mode context we don't intend to ever allow long term + * locking and this is a way of making sure we're still on the same CPU. */ + PVMCPU pVCpu; +#else + /** Pointer to the PGMPAGE and lock type. + * bit-0 abuse: set=write, clear=read. */ + uintptr_t uPageAndType; +/** Read lock type value. */ +# define PGMPAGEMAPLOCK_TYPE_READ ((uintptr_t)0) +/** Write lock type value. */ +# define PGMPAGEMAPLOCK_TYPE_WRITE ((uintptr_t)1) +/** Lock type mask. */ +# define PGMPAGEMAPLOCK_TYPE_MASK ((uintptr_t)1) + /** Pointer to the PGMCHUNKR3MAP. */ + void *pvMap; +#endif +} PGMPAGEMAPLOCK; +/** Pointer to a page mapping lock. */ +typedef PGMPAGEMAPLOCK *PPGMPAGEMAPLOCK; + + +/** Pointer to a info helper callback structure. */ +typedef struct DBGFINFOHLP *PDBGFINFOHLP; +/** Pointer to a const info helper callback structure. */ +typedef const struct DBGFINFOHLP *PCDBGFINFOHLP; + +/** Pointer to a const register descriptor. */ +typedef struct DBGFREGDESC const *PCDBGFREGDESC; + + +/** Configuration manager tree node - A key. */ +typedef struct CFGMNODE *PCFGMNODE; + +/** Configuration manager tree leaf - A value. */ +typedef struct CFGMLEAF *PCFGMLEAF; + + +/** + * CPU modes. + */ +typedef enum CPUMMODE +{ + /** The usual invalid zero entry. */ + CPUMMODE_INVALID = 0, + /** Real mode. */ + CPUMMODE_REAL, + /** Protected mode (32-bit). */ + CPUMMODE_PROTECTED, + /** Long mode (64-bit). */ + CPUMMODE_LONG +} CPUMMODE; + + +/** + * CPU mode flags (DISSTATE::mode). + */ +typedef enum DISCPUMODE +{ + DISCPUMODE_INVALID = 0, + DISCPUMODE_16BIT, + DISCPUMODE_32BIT, + DISCPUMODE_64BIT, + /** hack forcing the size of the enum to 32-bits. */ + DISCPUMODE_MAKE_32BIT_HACK = 0x7fffffff +} DISCPUMODE; + +/** Pointer to the disassembler state. */ +typedef struct DISSTATE *PDISSTATE; +/** Pointer to a const disassembler state. */ +typedef struct DISSTATE const *PCDISSTATE; + +/** @deprecated PDISSTATE and change pCpu and pDisState to pDis. */ +typedef PDISSTATE PDISCPUSTATE; +/** @deprecated PCDISSTATE and change pCpu and pDisState to pDis. */ +typedef PCDISSTATE PCDISCPUSTATE; + + +/** @} */ + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/VBox/version.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/VBox/version.h @@ -0,0 +1,153 @@ +/** @file + * VBox Version Management. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_version_h +#define ___VBox_version_h + +/* Product info. */ +#include +#include + +#ifdef RC_INVOKED +/* Some versions of RC has trouble with cdefs.h, so we duplicate these two here. */ +# define RT_STR(str) #str +# define RT_XSTR(str) RT_STR(str) +#else /* !RC_INVOKED */ + +/** Combined version number. */ +# define VBOX_VERSION (VBOX_VERSION_MAJOR << 16 | VBOX_VERSION_MINOR) +/** Get minor version from combined version. */ +# define VBOX_GET_VERSION_MINOR(uVer) ((uVer) & 0xffff) +/** Get major version from combined version. */ +# define VBOX_GET_VERSION_MAJOR(uVer) ((uVer) >> 16) + +/** + * Make a full version number. + * + * The returned number can be used in normal integer comparsions and will yield + * the expected results. + * + * @param uMajor The major version number. + * @param uMinor The minor version number. + * @param uBuild The build number. + * @returns Full version number. + */ +# define VBOX_FULL_VERSION_MAKE(uMajor, uMinor, uBuild) \ + ( (uint32_t)((uMajor) & 0xff) << 24 \ + | (uint32_t)((uMinor) & 0xff) << 16 \ + | (uint32_t)((uBuild) & 0xffff) \ + ) + +/** Combined version number. */ +# define VBOX_FULL_VERSION \ + VBOX_FULL_VERSION_MAKE(VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD) +/** Get the major version number from a VBOX_FULL_VERSION style number. */ +# define VBOX_FULL_VERSION_GET_MAJOR(uFullVer) ( ((uFullVer) >> 24) & 0xffU ) +/** Get the minor version number from a VBOX_FULL_VERSION style number. */ +# define VBOX_FULL_VERSION_GET_MINOR(uFullVer) ( ((uFullVer) >> 16) & 0xffU ) +/** Get the build version number from a VBOX_FULL_VERSION style number. */ +# define VBOX_FULL_VERSION_GET_BUILD(uFullVer) ( ((uFullVer) ) & 0xffffU ) + +/** + * Make a short version number for use in 16 bit version fields. + * + * The returned number can be used in normal integer comparsions and will yield + * the expected results. + * + * @param uMajor The major version number. + * @param uMinor The minor version number. + * @returns Short version number. + */ +# define VBOX_SHORT_VERSION_MAKE(uMajor, uMinor) \ + ( (uint16_t)((uMajor) & 0xff) << 8 \ + | (uint16_t)((uMinor) & 0xff) \ + ) + +/** Combined short version number. */ +# define VBOX_SHORT_VERSION \ + VBOX_SHORT_VERSION_MAKE(VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR) +/** Get the major version number from a VBOX_SHORT_VERSION style number. */ +# define VBOX_SHORT_VERSION_GET_MAJOR(uShortVer) ( ((uShortVer) >> 8) & 0xffU ) +/** Get the minor version number from a VBOX_SHORT_VERSION style number. */ +# define VBOX_SHORT_VERSION_GET_MINOR(uShortVer) ( (uShortVer) & 0xffU ) + +#endif /* !RC_INVOKED */ + +/** @name Prefined strings for Windows resource files + * @{ */ +#define VBOX_RC_COMPANY_NAME VBOX_VENDOR +#define VBOX_RC_LEGAL_COPYRIGHT "Copyright (C) 2009-" VBOX_C_YEAR " Oracle Corporation\0" +#define VBOX_RC_PRODUCT_NAME VBOX_PRODUCT +#define VBOX_RC_PRODUCT_NAME_GA VBOX_PRODUCT " Guest Additions" +#define VBOX_RC_PRODUCT_NAME_PUEL_EXTPACK VBOX_PRODUCT " Extension Pack" +#define VBOX_RC_PRODUCT_NAME_DTRACE_EXTPACK VBOX_PRODUCT " VBoxDTrace Extension Pack" +#define VBOX_RC_PRODUCT_NAME_STR VBOX_RC_PRODUCT_NAME "\0" +#define VBOX_RC_PRODUCT_NAME_GA_STR VBOX_RC_PRODUCT_NAME_GA "\0" +#define VBOX_RC_PRODUCT_NAME_PUEL_EXTPACK_STR VBOX_RC_PRODUCT_NAME_PUEL_EXTPACK "\0" +#define VBOX_RC_PRODUCT_NAME_DTRACE_EXTPACK_STR VBOX_RC_PRODUCT_NAME_DTRACE_EXTPACK "\0" +#define VBOX_RC_PRODUCT_VERSION VBOX_VERSION_MAJOR , VBOX_VERSION_MINOR , VBOX_VERSION_BUILD , VBOX_SVN_REV_MOD_5K +#define VBOX_RC_FILE_VERSION VBOX_VERSION_MAJOR , VBOX_VERSION_MINOR , VBOX_VERSION_BUILD , VBOX_SVN_REV_MOD_5K +#ifndef VBOX_VERSION_PRERELEASE +# define VBOX_RC_PRODUCT_VERSION_STR RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "." RT_XSTR(VBOX_SVN_REV) "\0" +# define VBOX_RC_FILE_VERSION_STR RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "." RT_XSTR(VBOX_SVN_REV) "\0" +#else +# define VBOX_RC_PRODUCT_VERSION_STR RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "." RT_XSTR(VBOX_SVN_REV) " (" VBOX_VERSION_PRERELEASE ")\0" +# define VBOX_RC_FILE_VERSION_STR RT_XSTR(VBOX_VERSION_MAJOR) "." RT_XSTR(VBOX_VERSION_MINOR) "." RT_XSTR(VBOX_VERSION_BUILD) "." RT_XSTR(VBOX_SVN_REV) " (" VBOX_VERSION_PRERELEASE ")\0" +#endif +#define VBOX_RC_FILE_OS VOS_NT_WINDOWS32 +#define VBOX_RC_TYPE_DLL VFT_DLL +#define VBOX_RC_TYPE_APP VFT_APP +#define VBOX_RC_TYPE_DRV VFT_DRV +/* Flags and extra strings depending on the build type and who's building. */ +#if defined(DEBUG) || defined(LOG_ENABLED) || defined(RT_STRICT) || defined(VBOX_STRICT) || defined(VBOX_WITH_STATISTICS) +# define VBOX_RC_FILE_FLAGS_DEBUG VS_FF_DEBUG +#else +# define VBOX_RC_FILE_FLAGS_DEBUG 0 +#endif +#if VBOX_VERSION_MINOR >= 51 || defined(VBOX_VERSION_PRERELEASE) +# define VBOX_RC_FILE_FLAGS_PRERELEASE VS_FF_PRERELEASE +#else +# define VBOX_RC_FILE_FLAGS_PRERELEASE 0 +#endif +#if defined(VBOX_BUILD_SERVER_BUILD) && (VBOX_VERSION_MINOR & 1) == 0 +# define VBOX_RC_FILE_FLAGS_BUILD 0 +# define VBOX_RC_MORE_STRINGS +#elif defined(VBOX_BUILD_SERVER_BUILD) +# define VBOX_RC_FILE_FLAGS_BUILD VS_FF_SPECIALBUILD +# define VBOX_RC_MORE_STRINGS VALUE "SpecialBuild", "r" RT_XSTR(VBOX_SVN_REV) "\0" +#else +# define VBOX_RC_FILE_FLAGS_BUILD VS_FF_PRIVATEBUILD +# ifdef VBOX_PRIVATE_BUILD_DESC +# define VBOX_RC_MORE_STRINGS VALUE "PrivateBuild", VBOX_PRIVATE_BUILD_DESC "\0" +# else +# define VBOX_RC_MORE_STRINGS VALUE "PrivateBuild", "r" RT_XSTR(VBOX_SVN_REV) "\0" +# error +# endif +#endif +#define VBOX_RC_FILE_FLAGS (VBOX_RC_FILE_FLAGS_DEBUG | VBOX_RC_FILE_FLAGS_PRERELEASE | VBOX_RC_FILE_FLAGS_BUILD) +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/assert.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/assert.h @@ -0,0 +1,63 @@ +/* $Id: assert.h $ */ +/** @file + * IPRT - Internal RTAssert header + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_assert_h +#define ___internal_assert_h + +#include + +RT_C_DECLS_BEGIN + +#ifdef IN_RING0 + +/** + * Print the 1st part of an assert message to whatever native facility is best + * fitting. + * + * @param pszExpr Expression. Can be NULL. + * @param uLine Location line number. + * @param pszFile Location file name. + * @param pszFunction Location function name. + */ +DECLHIDDEN(void) rtR0AssertNativeMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction); + +/** + * Print the 2nd (optional) part of an assert message to whatever native + * facility is best fitting. + * + * @param fInitial Whether it's the initial (true) or an additional (false) + * message. + * @param pszFormat Printf like format string. + * @param va Arguments to that string. + */ +DECLHIDDEN(void) rtR0AssertNativeMsg2V(bool fInitial, const char *pszFormat, va_list va); + +#endif + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/initterm.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/initterm.h @@ -0,0 +1,53 @@ +/* $Id: initterm.h $ */ +/** @file + * IPRT - Initialization & Termination. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_initterm_h +#define ___internal_initterm_h + +#include + +RT_C_DECLS_BEGIN + +#ifdef IN_RING0 + +/** + * Platform specific initialization. + * + * @returns IPRT status code. + */ +DECLHIDDEN(int) rtR0InitNative(void); + +/** + * Platform specific termination. + */ +DECLHIDDEN(void) rtR0TermNative(void); + +#endif /* IN_RING0 */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/iprt.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/iprt.h @@ -0,0 +1,204 @@ +/* $Id: iprt.h $ */ +/** @file + * IPRT - Internal header for miscellaneous global defs and types. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_iprt_h +#define ___internal_iprt_h + +#include +#include + +/** @def RT_EXPORT_SYMBOL + * This define is really here just for the linux kernel. + * @param Name The symbol name. + */ +#if defined(RT_OS_LINUX) \ + && defined(IN_RING0) \ + && defined(MODULE) \ + && !defined(RT_NO_EXPORT_SYMBOL) +# define bool linux_bool /* see r0drv/linux/the-linux-kernel.h */ +# include +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 33) +# include +# else +# ifndef AUTOCONF_INCLUDED +# include +# endif +# endif +# if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 71) +# include +# endif +# endif +# include +# undef bool +# define RT_EXPORT_SYMBOL(Name) EXPORT_SYMBOL(Name) +#else +# define RT_EXPORT_SYMBOL(Name) extern int g_rtExportSymbolDummyVariable +#endif + + +/** @def RT_MORE_STRICT + * Enables more assertions in IPRT. */ +#if !defined(RT_MORE_STRICT) && (defined(DEBUG) || defined(RT_STRICT) || defined(DOXYGEN_RUNNING)) && !defined(RT_OS_WINDOWS) /** @todo enable on windows after testing */ +# define RT_MORE_STRICT +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_VAR + * Partner to RT_ASSERT_PREEMPT_CPUID_VAR. Declares and initializes a variable + * idAssertCpu to NIL_RTCPUID if preemption is enabled and to RTMpCpuId if + * disabled. When RT_MORE_STRICT isn't defined it declares an uninitialized + * dummy variable. + * + * Requires iprt/mp.h and iprt/asm.h. + */ +/** @def RT_ASSERT_PREEMPT_CPUID + * Asserts that we didn't change CPU since RT_ASSERT_PREEMPT_CPUID_VAR if + * preemption is disabled. Will also detect changes in preemption + * disable/enable status. This is a noop when RT_MORE_STRICT isn't defined. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_VAR() \ + RTCPUID const idAssertCpu = RTThreadPreemptIsEnabled(NIL_RTTHREAD) ? NIL_RTCPUID : RTMpCpuId() +# define RT_ASSERT_PREEMPT_CPUID() \ + do \ + { \ + RTCPUID const idAssertCpuNow = RTThreadPreemptIsEnabled(NIL_RTTHREAD) ? NIL_RTCPUID : RTMpCpuId(); \ + AssertMsg(idAssertCpu == idAssertCpuNow, ("%#x, %#x\n", idAssertCpu, idAssertCpuNow)); \ + } while (0) + +#else +# define RT_ASSERT_PREEMPT_CPUID_VAR() RTCPUID idAssertCpuDummy +# define RT_ASSERT_PREEMPT_CPUID() NOREF(idAssertCpuDummy) +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_SPIN_ACQUIRED + * Extended version of RT_ASSERT_PREEMPT_CPUID for use before + * RTSpinlockAcquired* returns. This macro works the idCpuOwner and idAssertCpu + * members of the spinlock instance data. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_SPIN_ACQUIRED(pThis) \ + do \ + { \ + RTCPUID const idAssertCpuNow = RTMpCpuId(); \ + AssertMsg(idAssertCpu == idAssertCpuNow || idAssertCpu == NIL_RTCPUID, ("%#x, %#x\n", idAssertCpu, idAssertCpuNow)); \ + (pThis)->idAssertCpu = idAssertCpu; \ + (pThis)->idCpuOwner = idAssertCpuNow; \ + } while (0) +#else +# define RT_ASSERT_PREEMPT_CPUID_SPIN_ACQUIRED(pThis) NOREF(idAssertCpuDummy) +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE_VARS + * Extended version of RT_ASSERT_PREEMPT_CPUID_VAR for use with + * RTSpinlockRelease* returns. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE_VARS() RTCPUID idAssertCpu +#else +# define RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE_VARS() RTCPUID idAssertCpuDummy +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE + * Extended version of RT_ASSERT_PREEMPT_CPUID for use in RTSpinlockRelease* + * before calling the native API for releasing the spinlock. It must be + * teamed up with RT_ASSERT_PREEMPT_CPUID_SPIN_ACQUIRED. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE(pThis) \ + do \ + { \ + RTCPUID const idCpuOwner = (pThis)->idCpuOwner; \ + RTCPUID const idAssertCpuNow = RTMpCpuId(); \ + AssertMsg(idCpuOwner == idAssertCpuNow, ("%#x, %#x\n", idCpuOwner, idAssertCpuNow)); \ + (pThis)->idCpuOwner = NIL_RTCPUID; \ + idAssertCpu = (pThis)->idAssertCpu; \ + (pThis)->idAssertCpu = NIL_RTCPUID; \ + } while (0) +#else +# define RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE(pThis) NOREF(idAssertCpuDummy) +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_DISABLE + * For use in RTThreadPreemptDisable implementations after having disabled + * preemption. Requires iprt/mp.h. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_DISABLE(pStat) \ + do \ + { \ + Assert((pStat)->idCpu == NIL_RTCPUID); \ + (pStat)->idCpu = RTMpCpuId(); \ + } while (0) +#else +# define RT_ASSERT_PREEMPT_CPUID_DISABLE(pStat) \ + Assert((pStat)->idCpu == NIL_RTCPUID) +#endif + +/** @def RT_ASSERT_PREEMPT_CPUID_RESTORE + * For use in RTThreadPreemptRestore implementations before restoring + * preemption. Requires iprt/mp.h. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPT_CPUID_RESTORE(pStat) \ + do \ + { \ + RTCPUID const idAssertCpuNow = RTMpCpuId(); \ + AssertMsg((pStat)->idCpu == idAssertCpuNow, ("%#x, %#x\n", (pStat)->idCpu, idAssertCpuNow)); \ + (pStat)->idCpu = NIL_RTCPUID; \ + } while (0) +#else +# define RT_ASSERT_PREEMPT_CPUID_RESTORE(pStat) do { } while (0) +#endif + + +/** @def RT_ASSERT_INTS_ON + * Asserts that interrupts are disabled when RT_MORE_STRICT is defined. */ +#ifdef RT_MORE_STRICT +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# define RT_ASSERT_INTS_ON() Assert(ASMIntAreEnabled()) +# else /* PORTME: Add architecture/platform specific test. */ +# define RT_ASSERT_INTS_ON() Assert(RTThreadPreemptIsEnabled(NIL_RTTHREAD)) +# endif +#else +# define RT_ASSERT_INTS_ON() do { } while (0) +#endif + +/** @def RT_ASSERT_PREEMPTIBLE + * Asserts that preemption hasn't been disabled (using + * RTThreadPreemptDisable) when RT_MORE_STRICT is defined. */ +#ifdef RT_MORE_STRICT +# define RT_ASSERT_PREEMPTIBLE() Assert(RTThreadPreemptIsEnabled(NIL_RTTHREAD)) +#else +# define RT_ASSERT_PREEMPTIBLE() do { } while (0) +#endif + + +RT_C_DECLS_BEGIN + +#ifdef RT_OS_OS2 +uint32_t rtR0SemWaitOs2ConvertTimeout(uint32_t fFlags, uint64_t uTimeout); +#endif + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/lockvalidator.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/lockvalidator.h @@ -0,0 +1,116 @@ +/* $Id: lockvalidator.h $ */ +/** @file + * IPRT - Internal RTLockValidator header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_internal_lockvalidator_h +#define ___iprt_internal_lockvalidator_h + +#include +#include + +RT_C_DECLS_BEGIN + + +/** + * Record used only on the lock stack for recording the stack and source + * position of a recursive lock acquisition. + */ +typedef struct RTLOCKVALRECNEST +{ + RTLOCKVALRECCORE Core; + /** The recursion level at this point in the stack. */ + uint32_t cRecursion; + /** Pointer to the next record on the stack. */ + PRTLOCKVALRECUNION volatile pDown; + /** Pointer to the first recursion. */ + PRTLOCKVALRECUNION volatile pRec; + /** Pointer to the next free record when in the + * RTLOCKVALPERTHREAD::pFreeNestRecs list. */ + struct RTLOCKVALRECNEST *pNextFree; + /** The source position. */ + RTLOCKVALSRCPOS SrcPos; +} RTLOCKVALRECNEST; +/** Pointer to a recursion record. */ +typedef RTLOCKVALRECNEST *PRTLOCKVALRECNEST; + + +/** + * Record union for simplifying internal processing. + */ +typedef union RTLOCKVALRECUNION +{ + RTLOCKVALRECCORE Core; + RTLOCKVALRECEXCL Excl; + RTLOCKVALRECSHRD Shared; + RTLOCKVALRECSHRDOWN ShrdOwner; + RTLOCKVALRECNEST Nest; +} RTLOCKVALRECUNION; + + +/** + * Per thread data for the lock validator. + * + * This is part of the RTTHREADINT structure. + */ +typedef struct RTLOCKVALPERTHREAD +{ + /** Where we are blocking. */ + RTLOCKVALSRCPOS SrcPos; + /** Top of the lock stack. */ + PRTLOCKVALRECUNION volatile pStackTop; + /** List of free recursion (nesting) record. */ + PRTLOCKVALRECNEST pFreeNestRecs; + /** What we're blocking on. + * The lock validator sets this, RTThreadUnblock clears it. */ + PRTLOCKVALRECUNION volatile pRec; + /** The state in which pRec that goes with pRec. + * RTThreadUnblocking uses this to figure out when to clear pRec. */ + RTTHREADSTATE volatile enmRecState; + /** The thread is running inside the lock validator. */ + bool volatile fInValidator; + /** Reserved for alignment purposes. */ + bool afReserved[3]; + /** Number of registered write locks, mutexes and critsects that this thread owns. */ + int32_t volatile cWriteLocks; + /** Number of registered read locks that this thread owns, nesting included. */ + int32_t volatile cReadLocks; + /** Bitmap indicating which entires are free (set) and allocated (clear). */ + uint32_t volatile bmFreeShrdOwners; + /** Reserved for alignment purposes. */ + uint32_t u32Reserved; + /** Statically allocated shared owner records */ + RTLOCKVALRECSHRDOWN aShrdOwners[32]; +} RTLOCKVALPERTHREAD; + + +DECLHIDDEN(void) rtLockValidatorInitPerThread(RTLOCKVALPERTHREAD *pPerThread); +DECLHIDDEN(void) rtLockValidatorDeletePerThread(RTLOCKVALPERTHREAD *pPerThread); +DECLHIDDEN(void) rtLockValidatorSerializeDestructEnter(void); +DECLHIDDEN(void) rtLockValidatorSerializeDestructLeave(void); + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/magics.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/magics.h @@ -0,0 +1,247 @@ +/* $Id: magics.h $ */ +/** @file + * IPRT - Internal header defining The Magic Numbers. + */ + +/* + * Copyright (C) 2007-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_magics_h +#define ___internal_magics_h + +/** @name Magic Numbers. + * @{ */ + +/** Magic number for RTAIOMGRINT::u32Magic. (Emil Erich Kaestner) */ +#define RTAIOMGR_MAGIC UINT32_C(0x18990223) +/** Magic number for RTAIOMGRINTFILE::u32Magic. (Ephraim Kishon) */ +#define RTAIOMGRFILE_MAGIC UINT32_C(0x19240823) +/** Magic number for RTDBGMODINT::u32Magic. (Charles Lloyd) */ +#define RTDBGAS_MAGIC UINT32_C(0x19380315) +/** Magic number for RTDBGCFGINT::u32Magic. (McCoy Tyner) */ +#define RTDBGCFG_MAGIC UINT32_C(0x19381211) +/** Magic number for RTDBGMODINT::u32Magic. (Keith Jarrett) */ +#define RTDBGMOD_MAGIC UINT32_C(0x19450508) +/** Magic number for RTDBGMODVTIMG::u32Magic. (Jack DeJohnette) */ +#define RTDBGMODVTDBG_MAGIC UINT32_C(0x19420809) +/** Magic number for RTDBGMODVTIMG::u32Magic. (Cecil McBee) */ +#define RTDBGMODVTIMG_MAGIC UINT32_C(0x19350419) +/** Magic value for RTDBGKRNLINFOINT::u32Magic. (John Carmack) */ +#define RTDBGKRNLINFO_MAGIC UINT32_C(0x19700820) +/** The value of RTDIRINTERNAL::u32Magic. (Michael Ende) */ +#define RTDIR_MAGIC UINT32_C(0x19291112) +/** The value of RTDIRINTERNAL::u32Magic after RTDirClose(). */ +#define RTDIR_MAGIC_DEAD UINT32_C(0x19950829) +/** The value of RTDVMINTERNAL::u32Magic. (Dan Brown) */ +#define RTDVM_MAGIC UINT32_C(0x19640622) +/** The value of RTDVMINTERNAL::u32Magic after close. */ +#define RTDVM_MAGIC_DEAD (~RTDVM_MAGIC) +/** The value of RTDVMVOLUMEINTERNAL::u32Magic. (Daniel Defoe) */ +#define RTDVMVOLUME_MAGIC UINT32_C(0x16591961) +/** The value of RTDVMVOLUMEINTERNAL::u32Magic after close. */ +#define RTDVMVOLUME_MAGIC_DEAD UINT32_C(0x17310424) +/** The value of RTFILEAIOCTXINT::u32Magic. (Howard Phillips Lovecraft) */ +#define RTFILEAIOCTX_MAGIC UINT32_C(0x18900820) +/** The value of RTFILEAIOCTXINT::u32Magic after RTFileAioCtxDestroy(). */ +#define RTFILEAIOCTX_MAGIC_DEAD UINT32_C(0x19370315) +/** The value of RTFILEAIOREQINT::u32Magic. (Stephen Edwin King) */ +#define RTFILEAIOREQ_MAGIC UINT32_C(0x19470921) +/** The value of RTENVINTERNAL::u32Magic. (Rumiko Takahashi) */ +#define RTENV_MAGIC UINT32_C(0x19571010) +/** The value of RTERRVARS::ai32Vars[0]. (Ryuichi Sakamoto) */ +#define RTERRVARS_MAGIC UINT32_C(0x19520117) +/** The value of RTFSISOMAKERINT::uMagic. (Brian Blade) */ +#define RTFSISOMAKERINT_MAGIC UINT32_C(0x19700725) +/** Magic number for RTHANDLETABLEINT::u32Magic. (Hitomi Kanehara) */ +#define RTHANDLETABLE_MAGIC UINT32_C(0x19830808) +/** Magic number for RTHEAPOFFSETINTERNAL::u32Magic. (Neal Town Stephenson) */ +#define RTHEAPOFFSET_MAGIC UINT32_C(0x19591031) +/** Magic number for RTHEAPSIMPLEINTERNAL::uMagic. (Kyoichi Katayama) */ +#define RTHEAPSIMPLE_MAGIC UINT32_C(0x19590105) +/** The magic value for RTHTTPINTERNAL::u32Magic. (Karl May) */ +#define RTHTTP_MAGIC UINT32_C(0x18420225) +/** The value of RTHTTPINTERNAL::u32Magic after close. */ +#define RTHTTP_MAGIC_DEAD UINT32_C(0x19120330) +/** The value of RTINIFILEINT::u32Magic. (Jane Austen) */ +#define RTINIFILE_MAGIC UINT32_C(0x17751216) +/** The value of RTINIFILEINT::u32Magic after close. */ +#define RTINIFILE_MAGIC_DEAD UINT32_C(0x18170718) +/** The magic value for RTLDRMODINTERNAL::u32Magic. (Alan Moore) */ +#define RTLDRMOD_MAGIC UINT32_C(0x19531118) +/** The magic value for RTLOCALIPCSERVER::u32Magic. (Naoki Yamamoto) */ +#define RTLOCALIPCSERVER_MAGIC UINT32_C(0x19600201) +/** The magic value for RTLOCALIPCSERVER::u32Magic. (Katsuhiro Otomo) */ +#define RTLOCALIPCSESSION_MAGIC UINT32_C(0x19530414) +/** The magic value for RTLOCKVALCLASSINT::u32Magic. (Thomas Mann) */ +#define RTLOCKVALCLASS_MAGIC UINT32_C(0x18750605) +/** The magic value for RTLOCKVALCLASSINT::u32Magic after destruction. */ +#define RTLOCKVALCLASS_MAGIC_DEAD UINT32_C(0x19550812) +/** The magic value for RTLOCKVALRECEXCL::u32Magic. (Vladimir Vladimirovich Nabokov) */ +#define RTLOCKVALRECEXCL_MAGIC UINT32_C(0x18990422) +/** The dead magic value for RTLOCKVALRECEXCL::u32Magic. */ +#define RTLOCKVALRECEXCL_MAGIC_DEAD UINT32_C(0x19770702) +/** The magic value for RTLOCKVALRECSHRD::u32Magic. (Agnar Mykle) */ +#define RTLOCKVALRECSHRD_MAGIC UINT32_C(0x19150808) +/** The magic value for RTLOCKVALRECSHRD::u32Magic after deletion. */ +#define RTLOCKVALRECSHRD_MAGIC_DEAD UINT32_C(0x19940115) +/** The magic value for RTLOCKVALRECSHRDOWN::u32Magic. (Jens Ingvald Bjoerneboe) */ +#define RTLOCKVALRECSHRDOWN_MAGIC UINT32_C(0x19201009) +/** The magic value for RTLOCKVALRECSHRDOWN::u32Magic after deletion. */ +#define RTLOCKVALRECSHRDOWN_MAGIC_DEAD UINT32_C(0x19760509) +/** The magic value for RTLOCKVALRECNEST::u32Magic. (Anne Desclos) */ +#define RTLOCKVALRECNEST_MAGIC UINT32_C(0x19071123) +/** The magic value for RTLOCKVALRECNEST::u32Magic after deletion. */ +#define RTLOCKVALRECNEST_MAGIC_DEAD UINT32_C(0x19980427) +/** Magic number for RTMEMCACHEINT::u32Magic. (Joseph Weizenbaum) */ +#define RTMEMCACHE_MAGIC UINT32_C(0x19230108) +/** Dead magic number for RTMEMCACHEINT::u32Magic. */ +#define RTMEMCACHE_MAGIC_DEAD UINT32_C(0x20080305) +/** The magic value for RTMEMPOOL::u32Magic. (Jane Austin) */ +#define RTMEMPOOL_MAGIC UINT32_C(0x17751216) +/** The magic value for RTMEMPOOL::u32Magic after RTMemPoolDestroy. */ +#define RTMEMPOOL_MAGIC_DEAD UINT32_C(0x18170718) +/** The magic value for heap blocks. (Edgar Allan Poe) */ +#define RTMEMHDR_MAGIC UINT32_C(0x18090119) +/** The magic value for heap blocks after freeing. */ +#define RTMEMHDR_MAGIC_DEAD UINT32_C(0x18491007) +/** The value of RTPIPEINTERNAL::u32Magic. (Frank Schaetzing) */ +#define RTPIPE_MAGIC UINT32_C(0x19570528) +/** The value of RTPOLLSETINTERNAL::u32Magic. (Ai Yazawa) */ +#define RTPOLLSET_MAGIC UINT32_C(0x19670307) +/** RTR0MEMOBJ::u32Magic. (Masakazu Katsura) */ +#define RTR0MEMOBJ_MAGIC UINT32_C(0x19611210) +/** RTRANDINT::u32Magic. (Alan Moore) */ +#define RTRANDINT_MAGIC UINT32_C(0x19531118) +/** The value of RTREQ::u32Magic. */ +#define RTREQ_MAGIC UINT32_C(0xfeed0001) /**< @todo find a value */ +/** The value of RTREQ::u32Magic of a freed request. */ +#define RTREQ_MAGIC_DEAD (~RTREQ_MAGIC) +/** The value of RTREQPOOLINT::u32Magic. */ +#define RTREQPOOL_MAGIC UINT32_C(0xfeed0002)/**< @todo find a value */ +/** The value of RTREQPOOLINT::u32Magic after destruction. */ +#define RTREQPOOL_MAGIC_DEAD (~RTREQPOOL_MAGIC) +/** The value of RTREQQUEUEINT::u32Magic. */ +#define RTREQQUEUE_MAGIC UINT32_C(0xfeed0003)/**< @todo find a value */ +/** The value of RTREQQUEUEINT::u32Magic after destruction. */ +#define RTREQQUEUE_MAGIC_DEAD (~RTREQQUEUE_MAGIC) +/** The value of RTS3::u32Magic. (Edgar Wallace) */ +#define RTS3_MAGIC UINT32_C(0x18750401) +/** The value of RTS3::u32Magic after RTS3Destroy(). */ +#define RTS3_MAGIC_DEAD UINT32_C(0x19320210) +/** Magic for the event semaphore structure. (Neil Gaiman) */ +#define RTSEMEVENT_MAGIC UINT32_C(0x19601110) +/** Magic for the multiple release event semaphore structure. (Isaac Asimov) */ +#define RTSEMEVENTMULTI_MAGIC UINT32_C(0x19200102) +/** Dead magic value for multiple release event semaphore structures. */ +#define RTSEMEVENTMULTI_MAGIC_DEAD UINT32_C(0x19920406) +/** Magic value for RTSEMFASTMUTEXINTERNAL::u32Magic. (John Ronald Reuel Tolkien) */ +#define RTSEMFASTMUTEX_MAGIC UINT32_C(0x18920103) +/** Dead magic value for RTSEMFASTMUTEXINTERNAL::u32Magic. */ +#define RTSEMFASTMUTEX_MAGIC_DEAD UINT32_C(0x19730902) +/** Magic for the mutex semaphore structure. (Douglas Adams) */ +#define RTSEMMUTEX_MAGIC UINT32_C(0x19520311) +/** Dead magic for the mutex semaphore structure. */ +#define RTSEMMUTEX_MAGIC_DEAD UINT32_C(0x20010511) +/** Magic for the spinning mutex semaphore structure. (Natsume Soseki) */ +#define RTSEMSPINMUTEX_MAGIC UINT32_C(0x18670209) +/** Dead magic value for RTSEMSPINMUTEXINTERNAL::u32Magic. */ +#define RTSEMSPINMUTEX_MAGIC_DEAD UINT32_C(0x19161209) +/** RTSEMRWINTERNAL::u32Magic value. (Kosuke Fujishima) */ +#define RTSEMRW_MAGIC UINT32_C(0x19640707) +/** RTSEMXROADSINTERNAL::u32Magic value. (Kenneth Elton "Ken" Kesey) */ +#define RTSEMXROADS_MAGIC UINT32_C(0x19350917) +/** RTSEMXROADSINTERNAL::u32Magic value after RTSemXRoadsDestroy. */ +#define RTSEMXROADS_MAGIC_DEAD UINT32_C(0x20011110) +/** The magic value for RTSOCKETINT::u32Magic. (Stanislaw Lem) */ +#define RTSOCKET_MAGIC UINT32_C(0x19210912) +/** The magic value for RTSOCKETINT::u32Magic after destruction. */ +#define RTSOCKET_MAGIC_DEAD UINT32_C(0x20060326) +/** Magic value for RTSPINLOCKINTERNAL::u32Magic. (Terry Pratchett) */ +#define RTSPINLOCK_MAGIC UINT32_C(0x19480428) +/** Magic value for generic RTSPINLOCKINTERNAL::u32Magic (Georges Prosper Remi). */ +#define RTSPINLOCK_GEN_MAGIC UINT32_C(0x10970522) +/** Magic value for RTSTRCACHE::u32Magic. (Sir Arthur Charles Clarke) */ +#define RTSTRCACHE_MAGIC UINT32_C(0x19171216) +/** Magic value for RTSTRCACHE::u32Magic after RTStrCacheDestroy. */ +#define RTSTRCACHE_MAGIC_DEAD UINT32_C(0x20080319) +/** The value of RTSTREAM::u32Magic for a valid stream. */ +#define RTSTREAM_MAGIC UINT32_C(0xe44e44ee) +/** Magic value for RTTCPSERVER::u32Magic. (Jan Garbarek) */ +#define RTTCPSERVER_MAGIC UINT32_C(0x19470304) +/** Magic value for RTTCPSERVER::u32Magic. (Harlan Ellison) */ +#define RTUDPSERVER_MAGIC UINT32_C(0x19340527) +/** The value of RTTAR::u32Magic. (Donald Ervin Knuth) */ +#define RTTAR_MAGIC UINT32_C(0x19380110) +/** The value of RTTAR::u32Magic after RTTarClose(). */ +#define RTTAR_MAGIC_DEAD ~RTTAR_MAGIC +/** The value of RTTARFILE::u32Magic. (Abraham Stoker) */ +#define RTTARFILE_MAGIC UINT32_C(0x18471108) +/** The value of RTTARFILE::u32Magic after RTTarFileClose(). */ +#define RTTARFILE_MAGIC_DEAD UINT32_C(0x19120420) +/** RTTESTINT::u32Magic value. (Daniel Kehlmann) */ +#define RTTESTINT_MAGIC UINT32_C(0x19750113) +/** RTTHREADCTXHOOKINT::u32Magic value. (Dennis MacAlistair Ritchie) */ +#define RTTHREADCTXHOOKINT_MAGIC UINT32_C(0x19410909) +/** RTTHREADINT::u32Magic value. (Gilbert Keith Chesterton) */ +#define RTTHREADINT_MAGIC UINT32_C(0x18740529) +/** RTTHREADINT::u32Magic value for a dead thread. */ +#define RTTHREADINT_MAGIC_DEAD UINT32_C(0x19360614) +/** Magic number for timer handles. (Jared Mason Diamond) */ +#define RTTIMER_MAGIC UINT32_C(0x19370910) +/** Magic number for timer low resolution handles. (Saki Hiwatari) */ +#define RTTIMERLR_MAGIC UINT32_C(0x19610715) +/** Magic value of RTTRACEBUFINT::u32Magic. (George Orwell) */ +#define RTTRACEBUF_MAGIC UINT32_C(0x19030625) +/** Magic value of RTTRACEBUFINT::u32Magic after the final release. */ +#define RTTRACEBUF_MAGIC_DEAD UINT32_C(0x19500121) +/** The value of RTVFSOBJINTERNAL::u32Magic. (Yasunari Kawabata) */ +#define RTVFSOBJ_MAGIC UINT32_C(0x18990614) +/** The value of RTVFSOBJINTERNAL::u32Magic after close. */ +#define RTVFSOBJ_MAGIC_DEAD UINT32_C(0x19720416) +/** The value of RTVFSINTERNAL::u32Magic. (Sir Kingsley William Amis) */ +#define RTVFS_MAGIC UINT32_C(0x19220416) +/** The value of RTVFSINTERNAL::u32Magic after close. */ +#define RTVFS_MAGIC_DEAD UINT32_C(0x19951022) +/** The value of RTVFSFSSTREAMINTERNAL::u32Magic. (William McGuire "Bill" Bryson) */ +#define RTVFSFSSTREAM_MAGIC UINT32_C(0x19511208) +/** The value of RTVFSFSSTREAMINTERNAL::u32Magic after close */ +#define RTVFSFSSTREAM_MAGIC_DEAD (~RTVFSFSSTREAM_MAGIC) +/** The value of RTVFSDIRINTERNAL::u32Magic. (Franklin Patrick Herbert, Jr.) */ +#define RTVFSDIR_MAGIC UINT32_C(0x19201008) +/** The value of RTVFSDIRINTERNAL::u32Magic after close. */ +#define RTVFSDIR_MAGIC_DEAD UINT32_C(0x19860211) +/** The value of RTVFSFILEINTERNAL::u32Magic. (Charles John Huffam Dickens) */ +#define RTVFSFILE_MAGIC UINT32_C(0x18120207) +/** The value of RTVFSFILEINTERNAL::u32Magic after close. */ +#define RTVFSFILE_MAGIC_DEAD UINT32_C(0x18700609) +/** The value of RTVFSIOSTREAMINTERNAL::u32Magic. (Ernest Miller Hemingway) */ +#define RTVFSIOSTREAM_MAGIC UINT32_C(0x18990721) +/** The value of RTVFSIOSTREAMINTERNAL::u32Magic after close. */ +#define RTVFSIOSTREAM_MAGIC_DEAD UINT32_C(0x19610702) +/** The value of RTVFSSYMLINKINTERNAL::u32Magic. (Francis Scott Key Fitzgerald) */ +#define RTVFSSYMLINK_MAGIC UINT32_C(0x18960924) +/** The value of RTVFSSYMLINKINTERNAL::u32Magic after close. */ +#define RTVFSSYMLINK_MAGIC_DEAD UINT32_C(0x19401221) + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/mem.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/mem.h @@ -0,0 +1,74 @@ +/* $Id: mem.h $ */ +/** @file + * IPRT - Memory Management. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_mem_h +#define ___internal_mem_h + +#include + +RT_C_DECLS_BEGIN + +/** + * Special allocation method that does not have any IPRT dependencies. + * + * This is suitable for allocating memory for IPRT heaps, pools, caches, memory + * trackers, semaphores and similar that end up in bootstrap depencency hell + * otherwise. + * + * @returns Pointer to the allocated memory, NULL on failure. Must be freed by + * calling rtMemBaseFree(). + * @param cb The number of bytes to allocate. + */ +DECLHIDDEN(void *) rtMemBaseAlloc(size_t cb); + +/** + * Frees memory allocated by rtInitAlloc(). + * + * @param pv What rtInitAlloc() returned. + */ +DECLHIDDEN(void) rtMemBaseFree(void *pv); + + +#ifdef IN_RING0 +/** @def RTR0MEM_WITH_EF_APIS + * Enables the electrict fence APIs. + * + * Requires working rtR0MemObjNativeProtect implementation, thus the current + * OS restrictions. + */ +# if defined(RT_OS_DARWIN) || defined(RT_OS_FREEBSD) || defined(DOXYGEN_RUNNING) +# define RTR0MEM_WITH_EF_APIS +# endif +# ifdef RTR0MEM_WITH_EF_APIS +DECLHIDDEN(void) rtR0MemEfInit(void); +DECLHIDDEN(void) rtR0MemEfTerm(void); +# endif +#endif + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/memobj.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/memobj.h @@ -0,0 +1,483 @@ +/* $Id: memobj.h $ */ +/** @file + * IPRT - Ring-0 Memory Objects. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_memobj_h +#define ___internal_memobj_h + +#include +#include +#include "internal/magics.h" + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_memobj_int Internals. + * @ingroup grp_rt_memobj + * @internal + * @{ + */ + +/** + * Ring-0 memory object type. + */ +typedef enum RTR0MEMOBJTYPE +{ + /** The traditional invalid value. */ + RTR0MEMOBJTYPE_INVALID = 0, + + /** @name Primary types (parents) + * @{ */ + /** RTR0MemObjAllocPage. + * This memory is page aligned and fixed. */ + RTR0MEMOBJTYPE_PAGE, + /** RTR0MemObjAllocLow. + * This memory is page aligned, fixed and is backed by physical memory below 4GB. */ + RTR0MEMOBJTYPE_LOW, + /** RTR0MemObjAllocCont. + * This memory is page aligned, fixed and is backed by contiguous physical memory below 4GB. */ + RTR0MEMOBJTYPE_CONT, + /** RTR0MemObjLockKernel, RTR0MemObjLockUser. + * This memory is page aligned and fixed. It was locked/pinned/wired down by the API call. */ + RTR0MEMOBJTYPE_LOCK, + /** RTR0MemObjAllocPhys, RTR0MemObjEnterPhys. + * This memory is physical memory, page aligned, contiguous and doesn't need to have a mapping. */ + RTR0MEMOBJTYPE_PHYS, + /** RTR0MemObjAllocPhysNC. + * This memory is physical memory, page aligned and doesn't need to have a mapping. */ + RTR0MEMOBJTYPE_PHYS_NC, + /** RTR0MemObjReserveKernel, RTR0MemObjReserveUser. + * This memory is page aligned and has no backing. */ + RTR0MEMOBJTYPE_RES_VIRT, + /** @} */ + + /** @name Secondary types (children) + * @{ + */ + /** RTR0MemObjMapUser, RTR0MemObjMapKernel. + * This is a user or kernel context mapping of another ring-0 memory object. */ + RTR0MEMOBJTYPE_MAPPING, + /** @} */ + + /** The end of the valid types. Used for sanity checking. */ + RTR0MEMOBJTYPE_END +} RTR0MEMOBJTYPE; + + +/** @name RTR0MEMOBJINTERNAL::fFlags + * @{ */ +/** Page level protection was changed. */ +#define RTR0MEMOBJ_FLAGS_PROT_CHANGED RT_BIT_32(0) +/** @} */ + + +typedef struct RTR0MEMOBJINTERNAL *PRTR0MEMOBJINTERNAL; +typedef struct RTR0MEMOBJINTERNAL **PPRTR0MEMOBJINTERNAL; + +/** + * Ring-0 memory object. + * + * When using the PRTR0MEMOBJINTERNAL and PPRTR0MEMOBJINTERNAL types + * we get pMem and ppMem variable names. + * + * When using the RTR0MEMOBJ and PRTR0MEMOBJ types we get MemObj and + * pMemObj variable names. We never dereference variables of the RTR0MEMOBJ + * type, we always convert it to a PRTR0MEMOBJECTINTERNAL variable first. + */ +typedef struct RTR0MEMOBJINTERNAL +{ + /** Magic number (RTR0MEMOBJ_MAGIC). */ + uint32_t u32Magic; + /** The size of this structure. */ + uint32_t cbSelf; + /** The type of allocation. */ + RTR0MEMOBJTYPE enmType; + /** Flags, RTR0MEMOBJ_FLAGS_*. */ + uint32_t fFlags; + /** The size of the memory allocated, pinned down, or mapped. */ + size_t cb; + /** The memory address. + * What this really is varies with the type. + * For PAGE, CONT, LOW, RES_VIRT/R0, LOCK/R0 and MAP/R0 it's the ring-0 mapping. + * For LOCK/R3, RES_VIRT/R3 and MAP/R3 it is the ring-3 mapping. + * For PHYS this might actually be NULL if there isn't any mapping. + */ + void *pv; + + /** Object relations. */ + union + { + /** This is for tracking child memory handles mapping the + * memory described by the primary handle. */ + struct + { + /** Number of mappings. */ + uint32_t cMappingsAllocated; + /** Number of mappings in the array. */ + uint32_t cMappings; + /** Pointers to child handles mapping this memory. */ + PPRTR0MEMOBJINTERNAL papMappings; + } Parent; + + /** Pointer to the primary handle. */ + struct + { + /** Pointer to the parent. */ + PRTR0MEMOBJINTERNAL pParent; + } Child; + } uRel; + + /** Type specific data for the memory types that requires that. */ + union + { + /** RTR0MEMTYPE_PAGE. */ + struct + { + unsigned iDummy; + } Page; + + /** RTR0MEMTYPE_LOW. */ + struct + { + unsigned iDummy; + } Low; + + /** RTR0MEMTYPE_CONT. */ + struct + { + /** The physical address of the first page. */ + RTHCPHYS Phys; + } Cont; + + /** RTR0MEMTYPE_LOCK_USER. */ + struct + { + /** The process that owns the locked memory. + * This is NIL_RTR0PROCESS if it's kernel memory. */ + RTR0PROCESS R0Process; + } Lock; + + /** RTR0MEMTYPE_PHYS. */ + struct + { + /** The base address of the physical memory. */ + RTHCPHYS PhysBase; + /** If set this object was created by RTR0MemPhysAlloc, otherwise it was + * created by RTR0MemPhysEnter. */ + bool fAllocated; + /** See RTMEM_CACHE_POLICY_XXX constants */ + uint32_t uCachePolicy; + } Phys; + + /** RTR0MEMTYPE_PHYS_NC. */ + struct + { + unsigned iDummy; + } PhysNC; + + /** RTR0MEMOBJTYPE_RES_VIRT */ + struct + { + /** The process that owns the reserved memory. + * This is NIL_RTR0PROCESS if it's kernel memory. */ + RTR0PROCESS R0Process; + } ResVirt; + + /** RTR0MEMOBJTYPE_MAPPING */ + struct + { + /** The process that owns the reserved memory. + * This is NIL_RTR0PROCESS if it's kernel memory. */ + RTR0PROCESS R0Process; + } Mapping; + } u; + +} RTR0MEMOBJINTERNAL; + + +/** + * Checks if this is mapping or not. + * + * @returns true if it's a mapping, otherwise false. + * @param pMem The ring-0 memory object handle. + * @see RTR0MemObjIsMapping + */ +DECLINLINE(bool) rtR0MemObjIsMapping(PRTR0MEMOBJINTERNAL pMem) +{ + switch (pMem->enmType) + { + case RTR0MEMOBJTYPE_MAPPING: + return true; + + default: + return false; + } +} + + +/** + * Checks page level protection can be changed on this object. + * + * @returns true / false. + * @param pMem The ring-0 memory object handle. + */ +DECLINLINE(bool) rtR0MemObjIsProtectable(PRTR0MEMOBJINTERNAL pMem) +{ + switch (pMem->enmType) + { + case RTR0MEMOBJTYPE_MAPPING: + case RTR0MEMOBJTYPE_PAGE: + case RTR0MEMOBJTYPE_LOW: + case RTR0MEMOBJTYPE_CONT: + return true; + + default: + return false; + } +} + + +/** + * Checks if RTR0MEMOBJ::pv is a ring-3 pointer or not. + * + * @returns true if it's a object with a ring-3 address, otherwise false. + * @param pMem The ring-0 memory object handle. + */ +DECLINLINE(bool) rtR0MemObjIsRing3(PRTR0MEMOBJINTERNAL pMem) +{ + switch (pMem->enmType) + { + case RTR0MEMOBJTYPE_RES_VIRT: + return pMem->u.ResVirt.R0Process != NIL_RTR0PROCESS; + case RTR0MEMOBJTYPE_LOCK: + return pMem->u.Lock.R0Process != NIL_RTR0PROCESS; + case RTR0MEMOBJTYPE_MAPPING: + return pMem->u.Mapping.R0Process != NIL_RTR0PROCESS; + default: + return false; + } +} + + +/** + * Frees the memory object (but not the handle). + * Any OS specific handle resources will be freed by this call. + * + * @returns IPRT status code. On failure it is assumed that the object remains valid. + * @param pMem The ring-0 memory object handle to the memory which should be freed. + */ +DECLHIDDEN(int) rtR0MemObjNativeFree(PRTR0MEMOBJINTERNAL pMem); + +/** + * Allocates page aligned virtual kernel memory. + * + * The memory is taken from a non paged (= fixed physical memory backing) pool. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate, page aligned. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable); + +/** + * Allocates page aligned virtual kernel memory with physical backing below 4GB. + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate, page aligned. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable); + +/** + * Allocates page aligned virtual kernel memory with contiguous physical backing below 4GB. + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate, page aligned. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable); + +/** + * Locks a range of user virtual memory. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param R3Ptr User virtual address, page aligned. + * @param cb Number of bytes to lock, page aligned. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + * @param R0Process The process to lock pages in. + */ +DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3Ptr, size_t cb, uint32_t fAccess, RTR0PROCESS R0Process); + +/** + * Locks a range of kernel virtual memory. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param pv Kernel virtual address, page aligned. + * @param cb Number of bytes to lock, page aligned. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + */ +DECLHIDDEN(int) rtR0MemObjNativeLockKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pv, size_t cb, uint32_t fAccess); + +/** + * Allocates contiguous page aligned physical memory without (necessarily) any + * kernel mapping. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate, page aligned. + * @param PhysHighest The highest permitable address (inclusive). + * NIL_RTHCPHYS if any address is acceptable. + * @param uAlignment The alignment of the reserved memory. + * Supported values are PAGE_SIZE, _2M, _4M and _1G. + */ +DECLHIDDEN(int) rtR0MemObjNativeAllocPhys(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment); + +/** + * Allocates non-contiguous page aligned physical memory without (necessarily) any kernel mapping. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if it's not possible to allocated unmapped + * physical memory on this platform. + * @param ppMem Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate, page aligned. + * @param PhysHighest The highest permitable address (inclusive). + * NIL_RTHCPHYS if any address is acceptable. + */ +DECLHIDDEN(int) rtR0MemObjNativeAllocPhysNC(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest); + +/** + * Creates a page aligned, contiguous, physical memory object. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param Phys The physical address to start at, page aligned. + * @param cb The size of the object in bytes, page aligned. + * @param uCachePolicy One of the RTMEM_CACHE_XXX modes. + */ +DECLHIDDEN(int) rtR0MemObjNativeEnterPhys(PPRTR0MEMOBJINTERNAL ppMem, RTHCPHYS Phys, size_t cb, uint32_t uCachePolicy); + +/** + * Reserves kernel virtual address space. + * + * @returns IPRT status code. + * Return VERR_NOT_SUPPORTED to indicate that the user should employ fallback strategies. + * @param ppMem Where to store the ring-0 memory object handle. + * @param pvFixed Requested address. (void *)-1 means any address. This matches uAlignment if specified. + * @param cb The number of bytes to reserve, page aligned. + * @param uAlignment The alignment of the reserved memory; PAGE_SIZE, _2M or _4M. + */ +DECLHIDDEN(int) rtR0MemObjNativeReserveKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pvFixed, size_t cb, size_t uAlignment); + +/** + * Reserves user virtual address space in the current process. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This matches uAlignment if specified. + * @param cb The number of bytes to reserve, page aligned. + * @param uAlignment The alignment of the reserved memory; PAGE_SIZE, _2M or _4M. + * @param R0Process The process to reserve the memory in. + */ +DECLHIDDEN(int) rtR0MemObjNativeReserveUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3PtrFixed, size_t cb, size_t uAlignment, RTR0PROCESS R0Process); + +/** + * Maps a memory object into user virtual address space in the current process. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED see RTR0MemObjMapKernelEx. + * + * @param ppMem Where to store the ring-0 memory object handle of the mapping object. + * @param pMemToMap The object to be map. + * @param pvFixed Requested address. (void *)-1 means any address. This matches uAlignment if specified. + * @param uAlignment The alignment of the reserved memory; PAGE_SIZE, _2M or _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param offSub Where in the object to start mapping. If non-zero + * the value must be page aligned and cbSub must be + * non-zero as well. + * @param cbSub The size of the part of the object to be mapped. If + * zero the entire object is mapped. The value must be + * page aligned. + */ +DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, void *pvFixed, size_t uAlignment, + unsigned fProt, size_t offSub, size_t cbSub); + +/** + * Maps a memory object into user virtual address space in the current process. + * + * @returns IPRT status code. + * @param ppMem Where to store the ring-0 memory object handle of the mapping object. + * @param pMemToMap The object to be map. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This matches uAlignment if specified. + * @param uAlignment The alignment of the reserved memory; PAGE_SIZE, _2M or _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param R0Process The process to map the memory into. + */ +DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, PRTR0MEMOBJINTERNAL pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process); + +/** + * Change the page level protection of one or more pages in a memory object. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED see RTR0MemObjProtect. + * + * @param pMem The memory object. + * @param offSub Offset into the memory object. Page aligned. + * @param cbSub Number of bytes to change the protection of. Page + * aligned. + * @param fProt Combination of RTMEM_PROT_* flags. + */ +DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt); + +/** + * Get the physical address of an page in the memory object. + * + * @returns The physical address. + * @returns NIL_RTHCPHYS if the object doesn't contain fixed physical pages. + * @returns NIL_RTHCPHYS if the iPage is out of range. + * @returns NIL_RTHCPHYS if the object handle isn't valid. + * @param pMem The ring-0 memory object handle. + * @param iPage The page number within the object (valid). + */ +DECLHIDDEN(RTHCPHYS) rtR0MemObjNativeGetPagePhysAddr(PRTR0MEMOBJINTERNAL pMem, size_t iPage); + +DECLHIDDEN(PRTR0MEMOBJINTERNAL) rtR0MemObjNew(size_t cbSelf, RTR0MEMOBJTYPE enmType, void *pv, size_t cb); +DECLHIDDEN(void) rtR0MemObjDelete(PRTR0MEMOBJINTERNAL pMem); + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/process.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/process.h @@ -0,0 +1,69 @@ +/* $Id: process.h $ */ +/** @file + * IPRT - Internal RTProc header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_process_h +#define ___internal_process_h + +#include +#include + +RT_C_DECLS_BEGIN + +extern DECLHIDDEN(RTPROCESS) g_ProcessSelf; +extern DECLHIDDEN(RTPROCPRIORITY) g_enmProcessPriority; +extern DECLHIDDEN(char) g_szrtProcExePath[RTPATH_MAX]; +extern DECLHIDDEN(size_t) g_cchrtProcExePath; +extern DECLHIDDEN(size_t) g_cchrtProcDir; +extern DECLHIDDEN(size_t) g_offrtProcName; +extern DECLHIDDEN(bool volatile) g_frtAtExitCalled; + +/** + * Validates and sets the process priority. + * This will check that all rtThreadNativeSetPriority() will success for all the + * thread types when applied to the current thread. + * + * @returns iprt status code. + * @param enmPriority The priority to validate and set. + * @remark Located in sched. + */ +DECLHIDDEN(int) rtProcNativeSetPriority(RTPROCPRIORITY enmPriority); + +/** + * Determines the full path to the executable image. + * + * This is called by rtR3Init. + * + * @returns IPRT status code. + * + * @param pszPath Pointer to the g_szrtProcExePath buffer. + * @param cchPath The size of the buffer. + */ +DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath); + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/sched.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/sched.h @@ -0,0 +1,47 @@ +/* $Id: sched.h $ */ +/** @file + * IPRT - Internal RTSched header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_sched_h +#define ___internal_sched_h + +#include +#include "internal/process.h" +#include "internal/thread.h" + +RT_C_DECLS_BEGIN + +/** + * Calculate the scheduling properties for all the threads in the default + * process priority, assuming the current thread have the type enmType. + * + * @returns iprt status code. + * @param enmType The thread type to be assumed for the current thread. + */ +DECLHIDDEN(int) rtSchedNativeCalcDefaultPriority(RTTHREADTYPE enmType); + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/string.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/string.h @@ -0,0 +1,102 @@ +/* $Id: string.h $ */ +/** @file + * IPRT - Internal RTStr header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_string_h +#define ___internal_string_h + +#include + +RT_C_DECLS_BEGIN + +/** @def RTSTR_STRICT + * Enables strict assertions on bad string encodings. + */ +#ifdef DOXYGEN_RUNNING +# define RTSTR_STRICT +#endif +/*#define RTSTR_STRICT*/ + +#ifdef RTSTR_STRICT +# define RTStrAssertMsgFailed(msg) AssertMsgFailed(msg) +# define RTStrAssertMsgReturn(expr, msg, rc) AssertMsgReturn(expr, msg, rc) +#else +# define RTStrAssertMsgFailed(msg) do { } while (0) +# define RTStrAssertMsgReturn(expr, msg, rc) do { if (!(expr)) return rc; } while (0) +#endif + +DECLHIDDEN(size_t) rtstrFormatRt(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char **ppszFormat, va_list *pArgs, + int cchWidth, int cchPrecision, unsigned fFlags, char chArgSize); +DECLHIDDEN(size_t) rtstrFormatType(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, const char **ppszFormat, va_list *pArgs, + int cchWidth, int cchPrecision, unsigned fFlags, char chArgSize); + +/** + * Format kernel address into @a pszBuf. + * + * @returns Number of bytes returned. + * @param pszBuf The return buffer. + * @param cbBuf The buffer size. + * @param uPtr The ring-0 pointer value. + * @param cchWidth The specified width, -1 if not given. + * @param cchPrecision The specified precision. + * @param fFlags Format flags, RTSTR_F_XXX. + */ +DECLHIDDEN(size_t) rtStrFormatKernelAddress(char *pszBuf, size_t cbBuf, RTR0INTPTR uPtr, signed int cchWidth, + signed int cchPrecision, unsigned int fFlags); + +#ifdef RT_WITH_ICONV_CACHE +DECLHIDDEN(void) rtStrIconvCacheInit(struct RTTHREADINT *pThread); +DECLHIDDEN(void) rtStrIconvCacheDestroy(struct RTTHREADINT *pThread); +#endif + +/** + * Indexes into RTTHREADINT::ahIconvs + */ +typedef enum RTSTRICONV +{ + /** UTF-8 to the locale codeset (LC_CTYPE). */ + RTSTRICONV_UTF8_TO_LOCALE = 0, + /** The locale codeset (LC_CTYPE) to UTF-8. */ + RTSTRICONV_LOCALE_TO_UTF8, + /** UTF-8 to the filesystem codeset - if different from the locale codeset. */ + RTSTRICONV_UTF8_TO_FS, + /** The filesystem codeset to UTF-8. */ + RTSTRICONV_FS_TO_UTF8, + /** The end of the valid indexes. */ + RTSTRICONV_END +} RTSTRICONV; + +DECLHIDDEN(int) rtStrConvert(const char *pchInput, size_t cchInput, const char *pszInputCS, + char **ppszOutput, size_t cbOutput, const char *pszOutputCS, + unsigned cFactor, RTSTRICONV enmCacheIdx); +DECLHIDDEN(const char *) rtStrGetLocaleCodeset(void); +DECLHIDDEN(int) rtUtf8Length(const char *psz, size_t cch, size_t *pcuc, size_t *pcchActual); + +DECLHIDDEN(int) rtStrToIpAddr6Str(const char *psz, char *pszAddrOut, size_t addrOutSize, char *pszPortOut, size_t portOutSize, bool followRfc); + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/thread.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/thread.h @@ -0,0 +1,290 @@ +/* $Id: thread.h $ */ +/** @file + * IPRT - Internal RTThread header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___thread_h +#define ___thread_h + +#include +#include +#include +#ifdef IN_RING3 +# include +# include +#endif +#include "internal/lockvalidator.h" +#include "internal/magics.h" +#ifdef RT_WITH_ICONV_CACHE +# include "internal/string.h" +#endif + +RT_C_DECLS_BEGIN + + +/** Max thread name length. */ +#define RTTHREAD_NAME_LEN 16 +#ifdef IPRT_WITH_GENERIC_TLS +/** The number of TLS entries for the generic implementation. */ +# define RTTHREAD_TLS_ENTRIES 64 +#endif + +/** + * Internal representation of a thread. + */ +typedef struct RTTHREADINT +{ + /** Avl node core - the key is the native thread id. */ + AVLPVNODECORE Core; + /** Magic value (RTTHREADINT_MAGIC). */ + uint32_t u32Magic; + /** Reference counter. */ + uint32_t volatile cRefs; + /** The current thread state. */ + RTTHREADSTATE volatile enmState; + /** Set when really sleeping. */ + bool volatile fReallySleeping; +#if defined(RT_OS_WINDOWS) && defined(IN_RING3) + /** The thread handle + * This is not valid until the create function has returned! */ + uintptr_t hThread; +#endif +#if defined(RT_OS_LINUX) && defined(IN_RING3) + /** The thread ID. + * This is not valid before rtThreadMain has been called by the new thread. */ + pid_t tid; +#endif +#if defined(RT_OS_SOLARIS) && defined(IN_RING0) + /** Debug thread ID needed for thread_join. */ + uint64_t tid; +#endif + /** The user event semaphore. */ + RTSEMEVENTMULTI EventUser; + /** The terminated event semaphore. */ + RTSEMEVENTMULTI EventTerminated; + /** The thread type. */ + RTTHREADTYPE enmType; + /** The thread creation flags. (RTTHREADFLAGS) */ + unsigned fFlags; + /** Internal flags. (RTTHREADINT_FLAGS_ *) */ + uint32_t fIntFlags; + /** The result code. */ + int rc; + /** Thread function. */ + PFNRTTHREAD pfnThread; + /** Thread function argument. */ + void *pvUser; + /** Actual stack size. */ + size_t cbStack; +#ifdef IN_RING3 + /** The lock validator data. */ + RTLOCKVALPERTHREAD LockValidator; +#endif /* IN_RING3 */ +#ifdef RT_WITH_ICONV_CACHE + /** Handle cache for iconv. + * @remarks ASSUMES sizeof(void *) >= sizeof(iconv_t). */ + void *ahIconvs[RTSTRICONV_END]; +#endif +#ifdef IPRT_WITH_GENERIC_TLS + /** The TLS entries for this thread. */ + void *apvTlsEntries[RTTHREAD_TLS_ENTRIES]; +#endif + /** Thread name. */ + char szName[RTTHREAD_NAME_LEN]; +} RTTHREADINT; +/** Pointer to the internal representation of a thread. */ +typedef RTTHREADINT *PRTTHREADINT; + + +/** @name RTTHREADINT::fIntFlags Masks and Bits. + * @{ */ +/** Set if the thread is an alien thread. + * Clear if the thread was created by IPRT. */ +#define RTTHREADINT_FLAGS_ALIEN RT_BIT(0) +/** Set if the thread has terminated. + * Clear if the thread is running. */ +#define RTTHREADINT_FLAGS_TERMINATED RT_BIT(1) +/** This bit is set if the thread is in the AVL tree. */ +#define RTTHREADINT_FLAG_IN_TREE_BIT 2 +/** @copydoc RTTHREADINT_FLAG_IN_TREE_BIT */ +#define RTTHREADINT_FLAG_IN_TREE RT_BIT(RTTHREADINT_FLAG_IN_TREE_BIT) +/** Set if it's the main thread. */ +#define RTTHREADINT_FLAGS_MAIN RT_BIT(3) +/** @} */ + + +/** + * Initialize the native part of the thread management. + * + * Generally a TLS entry will be allocated at this point (Ring-3). + * + * @returns iprt status code. + */ +DECLHIDDEN(int) rtThreadNativeInit(void); + +#ifdef IN_RING3 +/** + * Called when IPRT was first initialized in unobtrusive mode and later changed + * to obtrustive. + * + * This is only applicable in ring-3. + */ +DECLHIDDEN(void) rtThreadNativeReInitObtrusive(void); +#endif + +/** + * Create a native thread. + * This creates the thread as described in pThreadInt and stores the thread id in *pThread. + * + * @returns iprt status code. + * @param pThreadInt The thread data structure for the thread. + * @param pNativeThread Where to store the native thread identifier. + */ +DECLHIDDEN(int) rtThreadNativeCreate(PRTTHREADINT pThreadInt, PRTNATIVETHREAD pNativeThread); + +/** + * Adopts a thread, this is called immediately after allocating the + * thread structure. + * + * @param pThread Pointer to the thread structure. + */ +DECLHIDDEN(int) rtThreadNativeAdopt(PRTTHREADINT pThread); + +/** + * Called from rtThreadDestroy so that the TLS entry and any native data in the + * thread structure can be cleared. + * + * @param pThread The thread structure. + */ +DECLHIDDEN(void) rtThreadNativeDestroy(PRTTHREADINT pThread); + +#ifdef IN_RING3 +/** + * Called to check whether the thread is still alive or not before we start + * waiting. + * + * This is a kludge to deal with windows threads being killed wholesale in + * certain process termination scenarios and we don't want to hang the last + * thread because it's waiting on the semaphore of a dead thread. + * + * @returns true if alive, false if not. + * @param pThread The thread structure. + */ +DECLHIDDEN(bool) rtThreadNativeIsAliveKludge(PRTTHREADINT pThread); +#endif + +#ifdef IN_RING0 +/** + * Called from rtThreadWait when the last thread has completed in order to make + * sure it's all the way out of IPRT before RTR0Term is called. + * + * @param pThread The thread structure. + */ +DECLHIDDEN(void) rtThreadNativeWaitKludge(PRTTHREADINT pThread); +#endif + + +/** + * Sets the priority of the thread according to the thread type + * and current process priority. + * + * The RTTHREADINT::enmType member has not yet been updated and will be updated by + * the caller on a successful return. + * + * @returns iprt status code. + * @param pThread The thread in question. + * @param enmType The thread type. + * @remark Located in sched. + */ +DECLHIDDEN(int) rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType); + +#ifdef IN_RING3 +# ifdef RT_OS_WINDOWS +/** + * Callback for when a native thread is detaching. + * + * It give the Win32/64 backend a chance to terminate alien + * threads properly. + */ +DECLHIDDEN(void) rtThreadNativeDetach(void); + +/** + * Internal function for informing the debugger about a thread. + * @param pThread The thread. May differ from the calling thread. + */ +DECLHIDDEN(void) rtThreadNativeInformDebugger(PRTTHREADINT pThread); +# endif +#endif /* IN_RING3 */ + + +/* thread.cpp */ +DECLCALLBACK(DECLHIDDEN(int)) rtThreadMain(PRTTHREADINT pThread, RTNATIVETHREAD NativeThread, const char *pszThreadName); +DECLHIDDEN(uint32_t) rtThreadRelease(PRTTHREADINT pThread); +DECLHIDDEN(void) rtThreadTerminate(PRTTHREADINT pThread, int rc); +DECLHIDDEN(PRTTHREADINT) rtThreadGetByNative(RTNATIVETHREAD NativeThread); +DECLHIDDEN(PRTTHREADINT) rtThreadGet(RTTHREAD Thread); +DECLHIDDEN(int) rtThreadInit(void); +#ifdef IN_RING3 +DECLHIDDEN(void) rtThreadReInitObtrusive(void); +#endif +DECLHIDDEN(void) rtThreadTerm(void); +DECLHIDDEN(void) rtThreadInsert(PRTTHREADINT pThread, RTNATIVETHREAD NativeThread); +#ifdef IN_RING3 +DECLHIDDEN(int) rtThreadDoSetProcPriority(RTPROCPRIORITY enmPriority); +#endif /* !IN_RING0 */ +#ifdef IPRT_WITH_GENERIC_TLS +DECLHIDDEN(void) rtThreadClearTlsEntry(RTTLS iTls); +DECLHIDDEN(void) rtThreadTlsDestruction(PRTTHREADINT pThread); /* in tls-generic.cpp */ +#endif + +#ifdef ___iprt_asm_h + +/** + * Gets the thread state. + * + * @returns The thread state. + * @param pThread The thread. + */ +DECLINLINE(RTTHREADSTATE) rtThreadGetState(PRTTHREADINT pThread) +{ + return pThread->enmState; +} + +/** + * Sets the thread state. + * + * @param pThread The thread. + * @param enmNewState The new thread state. + */ +DECLINLINE(void) rtThreadSetState(PRTTHREADINT pThread, RTTHREADSTATE enmNewState) +{ + AssertCompile(sizeof(pThread->enmState) == sizeof(uint32_t)); + ASMAtomicWriteU32((uint32_t volatile *)&pThread->enmState, enmNewState); +} + +#endif + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/internal/time.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/internal/time.h @@ -0,0 +1,44 @@ +/* $Id: time.h $ */ +/** @file + * IPRT - Internal RTTime header + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___internal_time_h +#define ___internal_time_h + +#include + +RT_C_DECLS_BEGIN + +#if defined(IN_RING3) || defined(IN_RC) + +extern DECLHIDDEN(uint64_t) g_u64ProgramStartNanoTS; +extern DECLHIDDEN(uint64_t) g_u64ProgramStartMicroTS; +extern DECLHIDDEN(uint64_t) g_u64ProgramStartMilliTS; + +#endif + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/alloc.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/alloc.h @@ -0,0 +1,33 @@ +/** @file + * IPRT - Memory Allocation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_alloc_h +#define ___iprt_alloc_h + +/* Forwarding to the canonical header. */ +#include + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/alloca.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/alloca.h @@ -0,0 +1,60 @@ +/** @file + * IPRT - alloca(). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_alloca_h +#define ___iprt_alloca_h + +#if defined(IN_RC) || defined(IN_RING0_AGNOSTIC) +# error "No alloca() in raw-mode and agnostic ring-0 context as it may have external dependencies like libgcc." +#endif + +/* + * If there are more difficult platforms out there, we'll do OS + * specific #ifdefs. But for now we'll just include the headers + * which normally contains the alloca() prototype. + * When we're in kernel territory it starts getting a bit more + * interesting of course... + */ +#if defined(IN_RING0) \ + && ( defined(RT_OS_DARWIN) \ + || defined(RT_OS_FREEBSD) \ + || defined(RT_OS_LINUX) \ + || defined(RT_OS_NETBSD) \ + || defined(RT_OS_SOLARIS)) +/* ASSUMES GNU C */ +# define alloca(cb) __builtin_alloca(cb) + +#else +# include +# if !defined(RT_OS_DARWIN) && !defined(RT_OS_FREEBSD) && !defined(RT_OS_NETBSD) +# include +# endif +# if defined(RT_OS_SOLARIS) || defined(RT_OS_LINUX) +# include +# endif +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/asm-amd64-x86.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/asm-amd64-x86.h @@ -0,0 +1,3362 @@ +/** @file + * IPRT - AMD64 and x86 Specific Assembly Functions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_amd64_x86_h +#define ___iprt_asm_amd64_x86_h + +#include +#include +#if !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) +# error "Not on AMD64 or x86" +#endif + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(_ReadWriteBarrier) +# pragma intrinsic(__cpuid) +# pragma intrinsic(_enable) +# pragma intrinsic(_disable) +# pragma intrinsic(__rdtsc) +# pragma intrinsic(__readmsr) +# pragma intrinsic(__writemsr) +# pragma intrinsic(__outbyte) +# pragma intrinsic(__outbytestring) +# pragma intrinsic(__outword) +# pragma intrinsic(__outwordstring) +# pragma intrinsic(__outdword) +# pragma intrinsic(__outdwordstring) +# pragma intrinsic(__inbyte) +# pragma intrinsic(__inbytestring) +# pragma intrinsic(__inword) +# pragma intrinsic(__inwordstring) +# pragma intrinsic(__indword) +# pragma intrinsic(__indwordstring) +# pragma intrinsic(__invlpg) +# pragma intrinsic(__wbinvd) +# pragma intrinsic(__readcr0) +# pragma intrinsic(__readcr2) +# pragma intrinsic(__readcr3) +# pragma intrinsic(__readcr4) +# pragma intrinsic(__writecr0) +# pragma intrinsic(__writecr3) +# pragma intrinsic(__writecr4) +# pragma intrinsic(__readdr) +# pragma intrinsic(__writedr) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(__readcr8) +# pragma intrinsic(__writecr8) +# endif +# if RT_INLINE_ASM_USES_INTRIN >= 14 +# pragma intrinsic(__halt) +# endif +# if RT_INLINE_ASM_USES_INTRIN >= 15 +# pragma intrinsic(__readeflags) +# pragma intrinsic(__writeeflags) +# pragma intrinsic(__rdtscp) +# endif +#endif + + +/* + * Include #pragma aux definitions for Watcom C/C++. + */ +#if defined(__WATCOMC__) && ARCH_BITS == 16 +# include "asm-amd64-x86-watcom-16.h" +#elif defined(__WATCOMC__) && ARCH_BITS == 32 +# include "asm-amd64-x86-watcom-32.h" +#endif + + +/** @defgroup grp_rt_asm_amd64_x86 AMD64 and x86 Specific ASM Routines + * @ingroup grp_rt_asm + * @{ + */ + +/** @todo find a more proper place for these structures? */ + +#pragma pack(1) +/** IDTR */ +typedef struct RTIDTR +{ + /** Size of the IDT. */ + uint16_t cbIdt; + /** Address of the IDT. */ +#if ARCH_BITS != 64 + uint32_t pIdt; +#else + uint64_t pIdt; +#endif +} RTIDTR, RT_FAR *PRTIDTR; +#pragma pack() + +#pragma pack(1) +/** @internal */ +typedef struct RTIDTRALIGNEDINT +{ + /** Alignment padding. */ + uint16_t au16Padding[ARCH_BITS == 64 ? 3 : 1]; + /** The IDTR structure. */ + RTIDTR Idtr; +} RTIDTRALIGNEDINT; +#pragma pack() + +/** Wrapped RTIDTR for preventing misalignment exceptions. */ +typedef union RTIDTRALIGNED +{ + /** Try make sure this structure has optimal alignment. */ + uint64_t auAlignmentHack[ARCH_BITS == 64 ? 2 : 1]; + /** Aligned structure. */ + RTIDTRALIGNEDINT s; +} RTIDTRALIGNED; +AssertCompileSize(RTIDTRALIGNED, ((ARCH_BITS == 64) + 1) * 8); +/** Pointer to a an RTIDTR alignment wrapper. */ +typedef RTIDTRALIGNED RT_FAR *PRIDTRALIGNED; + + +#pragma pack(1) +/** GDTR */ +typedef struct RTGDTR +{ + /** Size of the GDT. */ + uint16_t cbGdt; + /** Address of the GDT. */ +#if ARCH_BITS != 64 + uint32_t pGdt; +#else + uint64_t pGdt; +#endif +} RTGDTR, RT_FAR *PRTGDTR; +#pragma pack() + +#pragma pack(1) +/** @internal */ +typedef struct RTGDTRALIGNEDINT +{ + /** Alignment padding. */ + uint16_t au16Padding[ARCH_BITS == 64 ? 3 : 1]; + /** The GDTR structure. */ + RTGDTR Gdtr; +} RTGDTRALIGNEDINT; +#pragma pack() + +/** Wrapped RTGDTR for preventing misalignment exceptions. */ +typedef union RTGDTRALIGNED +{ + /** Try make sure this structure has optimal alignment. */ + uint64_t auAlignmentHack[ARCH_BITS == 64 ? 2 : 1]; + /** Aligned structure. */ + RTGDTRALIGNEDINT s; +} RTGDTRALIGNED; +AssertCompileSize(RTIDTRALIGNED, ((ARCH_BITS == 64) + 1) * 8); +/** Pointer to a an RTGDTR alignment wrapper. */ +typedef RTGDTRALIGNED RT_FAR *PRGDTRALIGNED; + + +/** + * Gets the content of the IDTR CPU register. + * @param pIdtr Where to store the IDTR contents. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMGetIDTR(PRTIDTR pIdtr); +#else +DECLINLINE(void) ASMGetIDTR(PRTIDTR pIdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sidt %0" : "=m" (*pIdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pIdtr] + sidt [rax] +# else + mov eax, [pIdtr] + sidt [eax] +# endif + } +# endif +} +#endif + + +/** + * Gets the content of the IDTR.LIMIT CPU register. + * @returns IDTR limit. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint16_t) ASMGetIdtrLimit(void); +#else +DECLINLINE(uint16_t) ASMGetIdtrLimit(void) +{ + RTIDTRALIGNED TmpIdtr; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sidt %0" : "=m" (TmpIdtr.s.Idtr)); +# else + __asm + { + sidt [TmpIdtr.s.Idtr] + } +# endif + return TmpIdtr.s.Idtr.cbIdt; +} +#endif + + +/** + * Sets the content of the IDTR CPU register. + * @param pIdtr Where to load the IDTR contents from + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetIDTR(const RTIDTR RT_FAR *pIdtr); +#else +DECLINLINE(void) ASMSetIDTR(const RTIDTR RT_FAR *pIdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lidt %0" : : "m" (*pIdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pIdtr] + lidt [rax] +# else + mov eax, [pIdtr] + lidt [eax] +# endif + } +# endif +} +#endif + + +/** + * Gets the content of the GDTR CPU register. + * @param pGdtr Where to store the GDTR contents. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMGetGDTR(PRTGDTR pGdtr); +#else +DECLINLINE(void) ASMGetGDTR(PRTGDTR pGdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sgdt %0" : "=m" (*pGdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pGdtr] + sgdt [rax] +# else + mov eax, [pGdtr] + sgdt [eax] +# endif + } +# endif +} +#endif + + +/** + * Sets the content of the GDTR CPU register. + * @param pGdtr Where to load the GDTR contents from + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetGDTR(const RTGDTR RT_FAR *pGdtr); +#else +DECLINLINE(void) ASMSetGDTR(const RTGDTR RT_FAR *pGdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lgdt %0" : : "m" (*pGdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pGdtr] + lgdt [rax] +# else + mov eax, [pGdtr] + lgdt [eax] +# endif + } +# endif +} +#endif + + + +/** + * Get the cs register. + * @returns cs. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetCS(void); +#else +DECLINLINE(RTSEL) ASMGetCS(void) +{ + RTSEL SelCS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%cs, %0\n\t" : "=r" (SelCS)); +# else + __asm + { + mov ax, cs + mov [SelCS], ax + } +# endif + return SelCS; +} +#endif + + +/** + * Get the DS register. + * @returns DS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetDS(void); +#else +DECLINLINE(RTSEL) ASMGetDS(void) +{ + RTSEL SelDS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%ds, %0\n\t" : "=r" (SelDS)); +# else + __asm + { + mov ax, ds + mov [SelDS], ax + } +# endif + return SelDS; +} +#endif + + +/** + * Get the ES register. + * @returns ES. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetES(void); +#else +DECLINLINE(RTSEL) ASMGetES(void) +{ + RTSEL SelES; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%es, %0\n\t" : "=r" (SelES)); +# else + __asm + { + mov ax, es + mov [SelES], ax + } +# endif + return SelES; +} +#endif + + +/** + * Get the FS register. + * @returns FS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetFS(void); +#else +DECLINLINE(RTSEL) ASMGetFS(void) +{ + RTSEL SelFS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%fs, %0\n\t" : "=r" (SelFS)); +# else + __asm + { + mov ax, fs + mov [SelFS], ax + } +# endif + return SelFS; +} +# endif + + +/** + * Get the GS register. + * @returns GS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetGS(void); +#else +DECLINLINE(RTSEL) ASMGetGS(void) +{ + RTSEL SelGS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%gs, %0\n\t" : "=r" (SelGS)); +# else + __asm + { + mov ax, gs + mov [SelGS], ax + } +# endif + return SelGS; +} +#endif + + +/** + * Get the SS register. + * @returns SS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetSS(void); +#else +DECLINLINE(RTSEL) ASMGetSS(void) +{ + RTSEL SelSS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%ss, %0\n\t" : "=r" (SelSS)); +# else + __asm + { + mov ax, ss + mov [SelSS], ax + } +# endif + return SelSS; +} +#endif + + +/** + * Get the TR register. + * @returns TR. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetTR(void); +#else +DECLINLINE(RTSEL) ASMGetTR(void) +{ + RTSEL SelTR; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("str %w0\n\t" : "=r" (SelTR)); +# else + __asm + { + str ax + mov [SelTR], ax + } +# endif + return SelTR; +} +#endif + + +/** + * Get the LDTR register. + * @returns LDTR. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetLDTR(void); +#else +DECLINLINE(RTSEL) ASMGetLDTR(void) +{ + RTSEL SelLDTR; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sldt %w0\n\t" : "=r" (SelLDTR)); +# else + __asm + { + sldt ax + mov [SelLDTR], ax + } +# endif + return SelLDTR; +} +#endif + + +/** + * Get the access rights for the segment selector. + * + * @returns The access rights on success or UINT32_MAX on failure. + * @param uSel The selector value. + * + * @remarks Using UINT32_MAX for failure is chosen because valid access rights + * always have bits 0:7 as 0 (on both Intel & AMD). + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMGetSegAttr(uint32_t uSel); +#else +DECLINLINE(uint32_t) ASMGetSegAttr(uint32_t uSel) +{ + uint32_t uAttr; + /* LAR only accesses 16-bit of the source operand, but eax for the + destination operand is required for getting the full 32-bit access rights. */ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lar %1, %%eax\n\t" + "jz done%=\n\t" + "movl $0xffffffff, %%eax\n\t" + "done%=:\n\t" + "movl %%eax, %0\n\t" + : "=r" (uAttr) + : "r" (uSel) + : "cc", "%eax"); +# else + __asm + { + lar eax, [uSel] + jz done + mov eax, 0ffffffffh + done: + mov [uAttr], eax + } +# endif + return uAttr; +} +#endif + + +/** + * Get the [RE]FLAGS register. + * @returns [RE]FLAGS. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMGetFlags(void); +#else +DECLINLINE(RTCCUINTREG) ASMGetFlags(void) +{ + RTCCUINTREG uFlags; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "popq %0\n\t" + : "=r" (uFlags)); +# else + __asm__ __volatile__("pushfl\n\t" + "popl %0\n\t" + : "=r" (uFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + uFlags = __readeflags(); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + pushfq + pop [uFlags] +# else + pushfd + pop [uFlags] +# endif + } +# endif + return uFlags; +} +#endif + + +/** + * Set the [RE]FLAGS register. + * @param uFlags The new [RE]FLAGS value. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(void) ASMSetFlags(RTCCUINTREG uFlags); +#else +DECLINLINE(void) ASMSetFlags(RTCCUINTREG uFlags) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushq %0\n\t" + "popfq\n\t" + : : "g" (uFlags)); +# else + __asm__ __volatile__("pushl %0\n\t" + "popfl\n\t" + : : "g" (uFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + __writeeflags(uFlags); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + push [uFlags] + popfq +# else + push [uFlags] + popfd +# endif + } +# endif +} +#endif + + +/** + * Modifies the [RE]FLAGS register. + * @returns Original value. + * @param fAndEfl Flags to keep (applied first). + * @param fOrEfl Flags to be set. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMChangeFlags(RTCCUINTREG fAndEfl, RTCCUINTREG fOrEfl); +#else +DECLINLINE(RTCCUINTREG) ASMChangeFlags(RTCCUINTREG fAndEfl, RTCCUINTREG fOrEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "andq %0, %1\n\t" + "orq %3, %1\n\t" + "mov %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl), + "=r" (fAndEfl) + : "1" (fAndEfl), + "rn" (fOrEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "andl %1, (%%esp)\n\t" + "orl %2, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl), + "rn" (fOrEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags((fOldEfl & fAndEfl) | fOrEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [fAndEfl] + mov rcx, [fOrEfl] + pushfq + mov rax, [rsp] + and rdx, rax + or rdx, rcx + mov [rsp], rdx + popfq + mov [fOldEfl], rax +# else + mov edx, [fAndEfl] + mov ecx, [fOrEfl] + pushfd + mov eax, [esp] + and edx, eax + or edx, ecx + mov [esp], edx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Modifies the [RE]FLAGS register by ORing in one or more flags. + * @returns Original value. + * @param fOrEfl The flags to be set (ORed in). + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMAddFlags(RTCCUINTREG fOrEfl); +#else +DECLINLINE(RTCCUINTREG) ASMAddFlags(RTCCUINTREG fOrEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "orq %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl) + : "rn" (fOrEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "orl %1, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fOrEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags(fOldEfl | fOrEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rcx, [fOrEfl] + pushfq + mov rdx, [rsp] + or [rsp], rcx + popfq + mov [fOldEfl], rax +# else + mov ecx, [fOrEfl] + pushfd + mov edx, [esp] + or [esp], ecx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Modifies the [RE]FLAGS register by AND'ing out one or more flags. + * @returns Original value. + * @param fAndEfl The flags to keep. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMClearFlags(RTCCUINTREG fAndEfl); +#else +DECLINLINE(RTCCUINTREG) ASMClearFlags(RTCCUINTREG fAndEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "andq %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "andl %1, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags(fOldEfl & fAndEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [fAndEfl] + pushfq + mov rdx, [rsp] + and [rsp], rdx + popfq + mov [fOldEfl], rax +# else + mov edx, [fAndEfl] + pushfd + mov edx, [esp] + and [esp], edx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Gets the content of the CPU timestamp counter register. + * + * @returns TSC. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMReadTSC(void); +#else +DECLINLINE(uint64_t) ASMReadTSC(void) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdtsc\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi)); +# else +# if RT_INLINE_ASM_USES_INTRIN + u.u = __rdtsc(); +# else + __asm + { + rdtsc + mov [u.s.Lo], eax + mov [u.s.Hi], edx + } +# endif +# endif + return u.u; +} +#endif + + +/** + * Gets the content of the CPU timestamp counter register and the + * assoicated AUX value. + * + * @returns TSC. + * @param puAux Where to store the AUX value. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(uint64_t) ASMReadTscWithAux(uint32_t RT_FAR *puAux); +#else +DECLINLINE(uint64_t) ASMReadTscWithAux(uint32_t RT_FAR *puAux) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + /* rdtscp is not supported by ancient linux build VM of course :-( */ + /*__asm__ __volatile__("rdtscp\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi), "=c" (*puAux)); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi), "=c" (*puAux)); +# else +# if RT_INLINE_ASM_USES_INTRIN >= 15 + u.u = __rdtscp(puAux); +# else + __asm + { + rdtscp + mov [u.s.Lo], eax + mov [u.s.Hi], edx + mov eax, [puAux] + mov [eax], ecx + } +# endif +# endif + return u.u; +} +#endif + + +/** + * Performs the cpuid instruction returning all registers. + * + * @param uOperator CPUID operation (eax). + * @param pvEAX Where to store eax. + * @param pvEBX Where to store ebx. + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId(uint32_t uOperator, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId(uint32_t uOperator, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uRAX, uRBX, uRCX, uRDX; + __asm__ __volatile__ ("cpuid\n\t" + : "=a" (uRAX), + "=b" (uRBX), + "=c" (uRCX), + "=d" (uRDX) + : "0" (uOperator), "2" (0)); + *(uint32_t RT_FAR *)pvEAX = (uint32_t)uRAX; + *(uint32_t RT_FAR *)pvEBX = (uint32_t)uRBX; + *(uint32_t RT_FAR *)pvECX = (uint32_t)uRCX; + *(uint32_t RT_FAR *)pvEDX = (uint32_t)uRDX; +# else + __asm__ __volatile__ ("xchgl %%ebx, %1\n\t" + "cpuid\n\t" + "xchgl %%ebx, %1\n\t" + : "=a" (*(uint32_t *)pvEAX), + "=r" (*(uint32_t *)pvEBX), + "=c" (*(uint32_t *)pvECX), + "=d" (*(uint32_t *)pvEDX) + : "0" (uOperator), "2" (0)); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + *(uint32_t RT_FAR *)pvEAX = aInfo[0]; + *(uint32_t RT_FAR *)pvEBX = aInfo[1]; + *(uint32_t RT_FAR *)pvECX = aInfo[2]; + *(uint32_t RT_FAR *)pvEDX = aInfo[3]; + +# else + uint32_t uEAX; + uint32_t uEBX; + uint32_t uECX; + uint32_t uEDX; + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [uEAX], eax + mov [uEBX], ebx + mov [uECX], ecx + mov [uEDX], edx + pop ebx + } + *(uint32_t RT_FAR *)pvEAX = uEAX; + *(uint32_t RT_FAR *)pvEBX = uEBX; + *(uint32_t RT_FAR *)pvECX = uECX; + *(uint32_t RT_FAR *)pvEDX = uEDX; +# endif +} +#endif + + +/** + * Performs the CPUID instruction with EAX and ECX input returning ALL output + * registers. + * + * @param uOperator CPUID operation (eax). + * @param uIdxECX ecx index + * @param pvEAX Where to store eax. + * @param pvEBX Where to store ebx. + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL || RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId_Idx_ECX(uint32_t uOperator, uint32_t uIdxECX, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId_Idx_ECX(uint32_t uOperator, uint32_t uIdxECX, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uRAX, uRBX, uRCX, uRDX; + __asm__ ("cpuid\n\t" + : "=a" (uRAX), + "=b" (uRBX), + "=c" (uRCX), + "=d" (uRDX) + : "0" (uOperator), + "2" (uIdxECX)); + *(uint32_t RT_FAR *)pvEAX = (uint32_t)uRAX; + *(uint32_t RT_FAR *)pvEBX = (uint32_t)uRBX; + *(uint32_t RT_FAR *)pvECX = (uint32_t)uRCX; + *(uint32_t RT_FAR *)pvEDX = (uint32_t)uRDX; +# else + __asm__ ("xchgl %%ebx, %1\n\t" + "cpuid\n\t" + "xchgl %%ebx, %1\n\t" + : "=a" (*(uint32_t *)pvEAX), + "=r" (*(uint32_t *)pvEBX), + "=c" (*(uint32_t *)pvECX), + "=d" (*(uint32_t *)pvEDX) + : "0" (uOperator), + "2" (uIdxECX)); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuidex(aInfo, uOperator, uIdxECX); + *(uint32_t RT_FAR *)pvEAX = aInfo[0]; + *(uint32_t RT_FAR *)pvEBX = aInfo[1]; + *(uint32_t RT_FAR *)pvECX = aInfo[2]; + *(uint32_t RT_FAR *)pvEDX = aInfo[3]; + +# else + uint32_t uEAX; + uint32_t uEBX; + uint32_t uECX; + uint32_t uEDX; + __asm + { + push ebx + mov eax, [uOperator] + mov ecx, [uIdxECX] + cpuid + mov [uEAX], eax + mov [uEBX], ebx + mov [uECX], ecx + mov [uEDX], edx + pop ebx + } + *(uint32_t RT_FAR *)pvEAX = uEAX; + *(uint32_t RT_FAR *)pvEBX = uEBX; + *(uint32_t RT_FAR *)pvECX = uECX; + *(uint32_t RT_FAR *)pvEDX = uEDX; +# endif +} +#endif + + +/** + * CPUID variant that initializes all 4 registers before the CPUID instruction. + * + * @returns The EAX result value. + * @param uOperator CPUID operation (eax). + * @param uInitEBX The value to assign EBX prior to the CPUID instruction. + * @param uInitECX The value to assign ECX prior to the CPUID instruction. + * @param uInitEDX The value to assign EDX prior to the CPUID instruction. + * @param pvEAX Where to store eax. Optional. + * @param pvEBX Where to store ebx. Optional. + * @param pvECX Where to store ecx. Optional. + * @param pvEDX Where to store edx. Optional. + */ +DECLASM(uint32_t) ASMCpuIdExSlow(uint32_t uOperator, uint32_t uInitEBX, uint32_t uInitECX, uint32_t uInitEDX, + void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); + + +/** + * Performs the cpuid instruction returning ecx and edx. + * + * @param uOperator CPUID operation (eax). + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId_ECX_EDX(uint32_t uOperator, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId_ECX_EDX(uint32_t uOperator, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ + uint32_t uEBX; + ASMCpuId(uOperator, &uOperator, &uEBX, pvECX, pvEDX); +} +#endif + + +/** + * Performs the cpuid instruction returning eax. + * + * @param uOperator CPUID operation (eax). + * @returns EAX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EAX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EAX(uint32_t uOperator) +{ + RTCCUINTREG xAX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ ("cpuid" + : "=a" (xAX) + : "0" (uOperator) + : "rbx", "rcx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (xAX) + : "0" (uOperator) + : "ecx", "edx"); +# else + __asm__ ("cpuid" + : "=a" (xAX) + : "0" (uOperator) + : "edx", "ecx", "ebx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xAX = aInfo[0]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xAX], eax + pop ebx + } +# endif + return (uint32_t)xAX; +} +#endif + + +/** + * Performs the cpuid instruction returning ebx. + * + * @param uOperator CPUID operation (eax). + * @returns EBX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EBX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EBX(uint32_t uOperator) +{ + RTCCUINTREG xBX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (uOperator) + : "rdx", "rcx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "mov %%ebx, %%edx\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=d" (xBX) + : "0" (uOperator) + : "ecx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=b" (xBX) + : "0" (uOperator) + : "edx", "ecx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xBX = aInfo[1]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xBX], ebx + pop ebx + } +# endif + return (uint32_t)xBX; +} +#endif + + +/** + * Performs the cpuid instruction returning ecx. + * + * @param uOperator CPUID operation (eax). + * @returns ECX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_ECX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_ECX(uint32_t uOperator) +{ + RTCCUINTREG xCX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=c" (xCX) + : "0" (uOperator) + : "rbx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=c" (xCX) + : "0" (uOperator) + : "edx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=c" (xCX) + : "0" (uOperator) + : "ebx", "edx"); + +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xCX = aInfo[2]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xCX], ecx + pop ebx + } +# endif + return (uint32_t)xCX; +} +#endif + + +/** + * Performs the cpuid instruction returning edx. + * + * @param uOperator CPUID operation (eax). + * @returns EDX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EDX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EDX(uint32_t uOperator) +{ + RTCCUINTREG xDX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=d" (xDX) + : "0" (uOperator) + : "rbx", "rcx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=d" (xDX) + : "0" (uOperator) + : "ecx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=d" (xDX) + : "0" (uOperator) + : "ebx", "ecx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xDX = aInfo[3]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xDX], edx + pop ebx + } +# endif + return (uint32_t)xDX; +} +#endif + + +/** + * Checks if the current CPU supports CPUID. + * + * @returns true if CPUID is supported. + */ +#ifdef __WATCOMC__ +DECLASM(bool) ASMHasCpuId(void); +#else +DECLINLINE(bool) ASMHasCpuId(void) +{ +# ifdef RT_ARCH_AMD64 + return true; /* ASSUME that all amd64 compatible CPUs have cpuid. */ +# else /* !RT_ARCH_AMD64 */ + bool fRet = false; +# if RT_INLINE_ASM_GNU_STYLE + uint32_t u1; + uint32_t u2; + __asm__ ("pushf\n\t" + "pop %1\n\t" + "mov %1, %2\n\t" + "xorl $0x200000, %1\n\t" + "push %1\n\t" + "popf\n\t" + "pushf\n\t" + "pop %1\n\t" + "cmpl %1, %2\n\t" + "setne %0\n\t" + "push %2\n\t" + "popf\n\t" + : "=m" (fRet), "=r" (u1), "=r" (u2)); +# else + __asm + { + pushfd + pop eax + mov ebx, eax + xor eax, 0200000h + push eax + popfd + pushfd + pop eax + cmp eax, ebx + setne fRet + push ebx + popfd + } +# endif + return fRet; +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Gets the APIC ID of the current CPU. + * + * @returns the APIC ID. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint8_t) ASMGetApicId(void); +#else +DECLINLINE(uint8_t) ASMGetApicId(void) +{ + RTCCUINTREG xBX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ __volatile__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (1) + : "rcx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + RTCCUINTREG uSpill; + __asm__ __volatile__ ("mov %%ebx,%1\n\t" + "cpuid\n\t" + "xchgl %%ebx,%1\n\t" + : "=a" (uSpill), + "=rm" (xBX) + : "0" (1) + : "ecx", "edx"); +# else + RTCCUINTREG uSpill; + __asm__ __volatile__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (1) + : "ecx", "edx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, 1); + xBX = aInfo[1]; + +# else + __asm + { + push ebx + mov eax, 1 + cpuid + mov [xBX], ebx + pop ebx + } +# endif + return (uint8_t)(xBX >> 24); +} +#endif + + +/** + * Tests if it a genuine Intel CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0) + * @param uECX ECX return from ASMCpuId(0) + * @param uEDX EDX return from ASMCpuId(0) + */ +DECLINLINE(bool) ASMIsIntelCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x756e6547) + && uECX == UINT32_C(0x6c65746e) + && uEDX == UINT32_C(0x49656e69); +} + + +/** + * Tests if this is a genuine Intel CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsIntelCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsIntelCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Tests if it an authentic AMD CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0) + * @param uECX ECX return from ASMCpuId(0) + * @param uEDX EDX return from ASMCpuId(0) + */ +DECLINLINE(bool) ASMIsAmdCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x68747541) + && uECX == UINT32_C(0x444d4163) + && uEDX == UINT32_C(0x69746e65); +} + + +/** + * Tests if this is an authentic AMD CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsAmdCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsAmdCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Tests if it a centaur hauling VIA CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0). + * @param uECX ECX return from ASMCpuId(0). + * @param uEDX EDX return from ASMCpuId(0). + */ +DECLINLINE(bool) ASMIsViaCentaurCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x746e6543) + && uECX == UINT32_C(0x736c7561) + && uEDX == UINT32_C(0x48727561); +} + + +/** + * Tests if this is a centaur hauling VIA CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsViaCentaurCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsViaCentaurCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Checks whether ASMCpuId_EAX(0x00000000) indicates a valid range. + * + * + * @returns true/false. + * @param uEAX The EAX value of CPUID leaf 0x00000000. + * + * @note This only succeeds if there are at least two leaves in the range. + * @remarks The upper range limit is just some half reasonable value we've + * picked out of thin air. + */ +DECLINLINE(bool) ASMIsValidStdRange(uint32_t uEAX) +{ + return uEAX >= UINT32_C(0x00000001) && uEAX <= UINT32_C(0x000fffff); +} + + +/** + * Checks whether ASMCpuId_EAX(0x80000000) indicates a valid range. + * + * This only succeeds if there are at least two leaves in the range. + * + * @returns true/false. + * @param uEAX The EAX value of CPUID leaf 0x80000000. + * + * @note This only succeeds if there are at least two leaves in the range. + * @remarks The upper range limit is just some half reasonable value we've + * picked out of thin air. + */ +DECLINLINE(bool) ASMIsValidExtRange(uint32_t uEAX) +{ + return uEAX >= UINT32_C(0x80000001) && uEAX <= UINT32_C(0x800fffff); +} + + +/** + * Extracts the CPU family from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Family. + * @param uEAX EAX return from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuFamily(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf + ? ((uEAX >> 20) & 0x7f) + 0xf + : ((uEAX >> 8) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001), Intel variant. + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuModelIntel(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf || (((uEAX >> 8) & 0xf) == 0x6) /* family! */ + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001), AMD variant. + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuModelAMD(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + * @param fIntel Whether it's an intel CPU. Use ASMIsIntelCpuEx() or ASMIsIntelCpu(). + */ +DECLINLINE(uint32_t) ASMGetCpuModel(uint32_t uEAX, bool fIntel) +{ + return ((uEAX >> 8) & 0xf) == 0xf || (((uEAX >> 8) & 0xf) == 0x6 && fIntel) /* family! */ + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU stepping from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuStepping(uint32_t uEAX) +{ + return uEAX & 0xf; +} + + +/** + * Get cr0. + * @returns cr0. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR0(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR0(void) +{ + RTCCUINTXREG uCR0; +# if RT_INLINE_ASM_USES_INTRIN + uCR0 = __readcr0(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr0, %0\t\n" : "=r" (uCR0)); +# else + __asm__ __volatile__("movl %%cr0, %0\t\n" : "=r" (uCR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr0 + mov [uCR0], rax +# else + mov eax, cr0 + mov [uCR0], eax +# endif + } +# endif + return uCR0; +} +#endif + + +/** + * Sets the CR0 register. + * @param uCR0 The new CR0 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR0(RTCCUINTXREG uCR0); +#else +DECLINLINE(void) ASMSetCR0(RTCCUINTXREG uCR0) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr0(uCR0); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr0\n\t" :: "r" (uCR0)); +# else + __asm__ __volatile__("movl %0, %%cr0\n\t" :: "r" (uCR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR0] + mov cr0, rax +# else + mov eax, [uCR0] + mov cr0, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr2. + * @returns cr2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR2(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR2(void) +{ + RTCCUINTXREG uCR2; +# if RT_INLINE_ASM_USES_INTRIN + uCR2 = __readcr2(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr2, %0\t\n" : "=r" (uCR2)); +# else + __asm__ __volatile__("movl %%cr2, %0\t\n" : "=r" (uCR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr2 + mov [uCR2], rax +# else + mov eax, cr2 + mov [uCR2], eax +# endif + } +# endif + return uCR2; +} +#endif + + +/** + * Sets the CR2 register. + * @param uCR2 The new CR0 value. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetCR2(RTCCUINTXREG uCR2); +#else +DECLINLINE(void) ASMSetCR2(RTCCUINTXREG uCR2) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr2\n\t" :: "r" (uCR2)); +# else + __asm__ __volatile__("movl %0, %%cr2\n\t" :: "r" (uCR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR2] + mov cr2, rax +# else + mov eax, [uCR2] + mov cr2, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr3. + * @returns cr3. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR3(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR3(void) +{ + RTCCUINTXREG uCR3; +# if RT_INLINE_ASM_USES_INTRIN + uCR3 = __readcr3(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr3, %0\t\n" : "=r" (uCR3)); +# else + __asm__ __volatile__("movl %%cr3, %0\t\n" : "=r" (uCR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr3 + mov [uCR3], rax +# else + mov eax, cr3 + mov [uCR3], eax +# endif + } +# endif + return uCR3; +} +#endif + + +/** + * Sets the CR3 register. + * + * @param uCR3 New CR3 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR3(RTCCUINTXREG uCR3); +#else +DECLINLINE(void) ASMSetCR3(RTCCUINTXREG uCR3) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr3(uCR3); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr3\n\t" : : "r" (uCR3)); +# else + __asm__ __volatile__("movl %0, %%cr3\n\t" : : "r" (uCR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR3] + mov cr3, rax +# else + mov eax, [uCR3] + mov cr3, eax +# endif + } +# endif +} +#endif + + +/** + * Reloads the CR3 register. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMReloadCR3(void); +#else +DECLINLINE(void) ASMReloadCR3(void) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr3(__readcr3()); + +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTXREG u; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr3, %0\n\t" + "movq %0, %%cr3\n\t" + : "=r" (u)); +# else + __asm__ __volatile__("movl %%cr3, %0\n\t" + "movl %0, %%cr3\n\t" + : "=r" (u)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr3 + mov cr3, rax +# else + mov eax, cr3 + mov cr3, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr4. + * @returns cr4. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR4(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR4(void) +{ + RTCCUINTXREG uCR4; +# if RT_INLINE_ASM_USES_INTRIN + uCR4 = __readcr4(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr4, %0\t\n" : "=r" (uCR4)); +# else + __asm__ __volatile__("movl %%cr4, %0\t\n" : "=r" (uCR4)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr4 + mov [uCR4], rax +# else + push eax /* just in case */ + /*mov eax, cr4*/ + _emit 0x0f + _emit 0x20 + _emit 0xe0 + mov [uCR4], eax + pop eax +# endif + } +# endif + return uCR4; +} +#endif + + +/** + * Sets the CR4 register. + * + * @param uCR4 New CR4 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR4(RTCCUINTXREG uCR4); +#else +DECLINLINE(void) ASMSetCR4(RTCCUINTXREG uCR4) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr4(uCR4); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr4\n\t" : : "r" (uCR4)); +# else + __asm__ __volatile__("movl %0, %%cr4\n\t" : : "r" (uCR4)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR4] + mov cr4, rax +# else + mov eax, [uCR4] + _emit 0x0F + _emit 0x22 + _emit 0xE0 /* mov cr4, eax */ +# endif + } +# endif +} +#endif + + +/** + * Get cr8. + * @returns cr8. + * @remark The lock prefix hack for access from non-64-bit modes is NOT used and 0 is returned. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR8(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR8(void) +{ +# ifdef RT_ARCH_AMD64 + RTCCUINTXREG uCR8; +# if RT_INLINE_ASM_USES_INTRIN + uCR8 = __readcr8(); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movq %%cr8, %0\t\n" : "=r" (uCR8)); +# else + __asm + { + mov rax, cr8 + mov [uCR8], rax + } +# endif + return uCR8; +# else /* !RT_ARCH_AMD64 */ + return 0; +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Get XCR0 (eXtended feature Control Register 0). + * @returns xcr0. + */ +DECLASM(uint64_t) ASMGetXcr0(void); + +/** + * Sets the XCR0 register. + * @param uXcr0 The new XCR0 value. + */ +DECLASM(void) ASMSetXcr0(uint64_t uXcr0); + +struct X86XSAVEAREA; +/** + * Save extended CPU state. + * @param pXStateArea Where to save the state. + * @param fComponents Which state components to save. + */ +DECLASM(void) ASMXSave(struct X86XSAVEAREA RT_FAR *pXStateArea, uint64_t fComponents); + +/** + * Loads extended CPU state. + * @param pXStateArea Where to load the state from. + * @param fComponents Which state components to load. + */ +DECLASM(void) ASMXRstor(struct X86XSAVEAREA const RT_FAR *pXStateArea, uint64_t fComponents); + + +struct X86FXSTATE; +/** + * Save FPU and SSE CPU state. + * @param pXStateArea Where to save the state. + */ +DECLASM(void) ASMFxSave(struct X86FXSTATE RT_FAR *pXStateArea); + +/** + * Load FPU and SSE CPU state. + * @param pXStateArea Where to load the state from. + */ +DECLASM(void) ASMFxRstor(struct X86FXSTATE const RT_FAR *pXStateArea); + + +/** + * Enables interrupts (EFLAGS.IF). + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMIntEnable(void); +#else +DECLINLINE(void) ASMIntEnable(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm("sti\n"); +# elif RT_INLINE_ASM_USES_INTRIN + _enable(); +# else + __asm sti +# endif +} +#endif + + +/** + * Disables interrupts (!EFLAGS.IF). + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMIntDisable(void); +#else +DECLINLINE(void) ASMIntDisable(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm("cli\n"); +# elif RT_INLINE_ASM_USES_INTRIN + _disable(); +# else + __asm cli +# endif +} +#endif + + +/** + * Disables interrupts and returns previous xFLAGS. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTREG) ASMIntDisableFlags(void); +#else +DECLINLINE(RTCCUINTREG) ASMIntDisableFlags(void) +{ + RTCCUINTREG xFlags; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "cli\n\t" + "popq %0\n\t" + : "=r" (xFlags)); +# else + __asm__ __volatile__("pushfl\n\t" + "cli\n\t" + "popl %0\n\t" + : "=r" (xFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN && !defined(RT_ARCH_X86) + xFlags = ASMGetFlags(); + _disable(); +# else + __asm { + pushfd + cli + pop [xFlags] + } +# endif + return xFlags; +} +#endif + + +/** + * Are interrupts enabled? + * + * @returns true / false. + */ +DECLINLINE(bool) ASMIntAreEnabled(void) +{ + RTCCUINTREG uFlags = ASMGetFlags(); + return uFlags & 0x200 /* X86_EFL_IF */ ? true : false; +} + + +/** + * Halts the CPU until interrupted. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 14 +DECLASM(void) ASMHalt(void); +#else +DECLINLINE(void) ASMHalt(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("hlt\n\t"); +# elif RT_INLINE_ASM_USES_INTRIN + __halt(); +# else + __asm { + hlt + } +# endif +} +#endif + + +/** + * Reads a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMRdMsr(uint32_t uRegister); +#else +DECLINLINE(uint64_t) ASMRdMsr(uint32_t uRegister) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u.s.Lo), + "=d" (u.s.Hi) + : "c" (uRegister)); + +# elif RT_INLINE_ASM_USES_INTRIN + u.u = __readmsr(uRegister); + +# else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u.s.Lo], eax + mov [u.s.Hi], edx + } +# endif + + return u.u; +} +#endif + + +/** + * Writes a machine specific register. + * + * @returns Register content. + * @param uRegister Register to write to. + * @param u64Val Value to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMWrMsr(uint32_t uRegister, uint64_t u64Val); +#else +DECLINLINE(void) ASMWrMsr(uint32_t uRegister, uint64_t u64Val) +{ + RTUINT64U u; + + u.u = u64Val; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wrmsr\n\t" + ::"a" (u.s.Lo), + "d" (u.s.Hi), + "c" (uRegister)); + +# elif RT_INLINE_ASM_USES_INTRIN + __writemsr(uRegister, u.u); + +# else + __asm + { + mov ecx, [uRegister] + mov edx, [u.s.Hi] + mov eax, [u.s.Lo] + wrmsr + } +# endif +} +#endif + + +/** + * Reads a machine specific register, extended version (for AMD). + * + * @returns Register content. + * @param uRegister Register to read. + * @param uXDI RDI/EDI value. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint64_t) ASMRdMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI); +#else +DECLINLINE(uint64_t) ASMRdMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u.s.Lo), + "=d" (u.s.Hi) + : "c" (uRegister), + "D" (uXDI)); + +# else + __asm + { + mov ecx, [uRegister] + xchg edi, [uXDI] + rdmsr + mov [u.s.Lo], eax + mov [u.s.Hi], edx + xchg edi, [uXDI] + } +# endif + + return u.u; +} +#endif + + +/** + * Writes a machine specific register, extended version (for AMD). + * + * @returns Register content. + * @param uRegister Register to write to. + * @param uXDI RDI/EDI value. + * @param u64Val Value to write. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMWrMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI, uint64_t u64Val); +#else +DECLINLINE(void) ASMWrMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI, uint64_t u64Val) +{ + RTUINT64U u; + + u.u = u64Val; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wrmsr\n\t" + ::"a" (u.s.Lo), + "d" (u.s.Hi), + "c" (uRegister), + "D" (uXDI)); + +# else + __asm + { + mov ecx, [uRegister] + xchg edi, [uXDI] + mov edx, [u.s.Hi] + mov eax, [u.s.Lo] + wrmsr + xchg edi, [uXDI] + } +# endif +} +#endif + + + +/** + * Reads low part of a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMRdMsr_Low(uint32_t uRegister); +#else +DECLINLINE(uint32_t) ASMRdMsr_Low(uint32_t uRegister) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u32) + : "c" (uRegister) + : "edx"); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = (uint32_t)__readmsr(uRegister); + +#else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u32], eax + } +# endif + + return u32; +} +#endif + + +/** + * Reads high part of a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMRdMsr_High(uint32_t uRegister); +#else +DECLINLINE(uint32_t) ASMRdMsr_High(uint32_t uRegister) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=d" (u32) + : "c" (uRegister) + : "eax"); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = (uint32_t)(__readmsr(uRegister) >> 32); + +# else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u32], edx + } +# endif + + return u32; +} +#endif + + +/** + * Gets dr0. + * + * @returns dr0. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR0(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR0(void) +{ + RTCCUINTXREG uDR0; +# if RT_INLINE_ASM_USES_INTRIN + uDR0 = __readdr(0); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr0, %0\n\t" : "=r" (uDR0)); +# else + __asm__ __volatile__("movl %%dr0, %0\n\t" : "=r" (uDR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr0 + mov [uDR0], rax +# else + mov eax, dr0 + mov [uDR0], eax +# endif + } +# endif + return uDR0; +} +#endif + + +/** + * Gets dr1. + * + * @returns dr1. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR1(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR1(void) +{ + RTCCUINTXREG uDR1; +# if RT_INLINE_ASM_USES_INTRIN + uDR1 = __readdr(1); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr1, %0\n\t" : "=r" (uDR1)); +# else + __asm__ __volatile__("movl %%dr1, %0\n\t" : "=r" (uDR1)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr1 + mov [uDR1], rax +# else + mov eax, dr1 + mov [uDR1], eax +# endif + } +# endif + return uDR1; +} +#endif + + +/** + * Gets dr2. + * + * @returns dr2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR2(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR2(void) +{ + RTCCUINTXREG uDR2; +# if RT_INLINE_ASM_USES_INTRIN + uDR2 = __readdr(2); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr2, %0\n\t" : "=r" (uDR2)); +# else + __asm__ __volatile__("movl %%dr2, %0\n\t" : "=r" (uDR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr2 + mov [uDR2], rax +# else + mov eax, dr2 + mov [uDR2], eax +# endif + } +# endif + return uDR2; +} +#endif + + +/** + * Gets dr3. + * + * @returns dr3. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR3(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR3(void) +{ + RTCCUINTXREG uDR3; +# if RT_INLINE_ASM_USES_INTRIN + uDR3 = __readdr(3); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr3, %0\n\t" : "=r" (uDR3)); +# else + __asm__ __volatile__("movl %%dr3, %0\n\t" : "=r" (uDR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr3 + mov [uDR3], rax +# else + mov eax, dr3 + mov [uDR3], eax +# endif + } +# endif + return uDR3; +} +#endif + + +/** + * Gets dr6. + * + * @returns dr6. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR6(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR6(void) +{ + RTCCUINTXREG uDR6; +# if RT_INLINE_ASM_USES_INTRIN + uDR6 = __readdr(6); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr6, %0\n\t" : "=r" (uDR6)); +# else + __asm__ __volatile__("movl %%dr6, %0\n\t" : "=r" (uDR6)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr6 + mov [uDR6], rax +# else + mov eax, dr6 + mov [uDR6], eax +# endif + } +# endif + return uDR6; +} +#endif + + +/** + * Reads and clears DR6. + * + * @returns DR6. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetAndClearDR6(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetAndClearDR6(void) +{ + RTCCUINTXREG uDR6; +# if RT_INLINE_ASM_USES_INTRIN + uDR6 = __readdr(6); + __writedr(6, 0xffff0ff0U); /* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTXREG uNewValue = 0xffff0ff0U;/* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr6, %0\n\t" + "movq %1, %%dr6\n\t" + : "=r" (uDR6) + : "r" (uNewValue)); +# else + __asm__ __volatile__("movl %%dr6, %0\n\t" + "movl %1, %%dr6\n\t" + : "=r" (uDR6) + : "r" (uNewValue)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr6 + mov [uDR6], rax + mov rcx, rax + mov ecx, 0ffff0ff0h; /* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ + mov dr6, rcx +# else + mov eax, dr6 + mov [uDR6], eax + mov ecx, 0ffff0ff0h; /* 31-16 and 4-11 are 1's, 12 is zero. */ + mov dr6, ecx +# endif + } +# endif + return uDR6; +} +#endif + + +/** + * Gets dr7. + * + * @returns dr7. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR7(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR7(void) +{ + RTCCUINTXREG uDR7; +# if RT_INLINE_ASM_USES_INTRIN + uDR7 = __readdr(7); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr7, %0\n\t" : "=r" (uDR7)); +# else + __asm__ __volatile__("movl %%dr7, %0\n\t" : "=r" (uDR7)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr7 + mov [uDR7], rax +# else + mov eax, dr7 + mov [uDR7], eax +# endif + } +# endif + return uDR7; +} +#endif + + +/** + * Sets dr0. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR0(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR0(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(0, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr0\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr0\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr0, rax +# else + mov eax, [uDRVal] + mov dr0, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr1. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR1(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR1(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(1, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr1\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr1\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr1, rax +# else + mov eax, [uDRVal] + mov dr1, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr2. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR2(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR2(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(2, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr2\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr2\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr2, rax +# else + mov eax, [uDRVal] + mov dr2, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr3. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR3(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR3(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(3, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr3\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr3\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr3, rax +# else + mov eax, [uDRVal] + mov dr3, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr6. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR6(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR6(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(6, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr6\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr6\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr6, rax +# else + mov eax, [uDRVal] + mov dr6, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr7. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR7(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR7(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(7, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr7\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr7\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr7, rax +# else + mov eax, [uDRVal] + mov dr7, eax +# endif + } +# endif +} +#endif + + +/** + * Writes a 8-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u8 8-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU8(RTIOPORT Port, uint8_t u8); +#else +DECLINLINE(void) ASMOutU8(RTIOPORT Port, uint8_t u8) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outb %b1, %w0\n\t" + :: "Nd" (Port), + "a" (u8)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outbyte(Port, u8); + +# else + __asm + { + mov dx, [Port] + mov al, [u8] + out dx, al + } +# endif +} +#endif + + +/** + * Reads a 8-bit unsigned integer from an I/O port, ordered. + * + * @returns 8-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint8_t) ASMInU8(RTIOPORT Port); +#else +DECLINLINE(uint8_t) ASMInU8(RTIOPORT Port) +{ + uint8_t u8; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inb %w1, %b0\n\t" + : "=a" (u8) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u8 = __inbyte(Port); + +# else + __asm + { + mov dx, [Port] + in al, dx + mov [u8], al + } +# endif + return u8; +} +#endif + + +/** + * Writes a 16-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u16 16-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU16(RTIOPORT Port, uint16_t u16); +#else +DECLINLINE(void) ASMOutU16(RTIOPORT Port, uint16_t u16) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outw %w1, %w0\n\t" + :: "Nd" (Port), + "a" (u16)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outword(Port, u16); + +# else + __asm + { + mov dx, [Port] + mov ax, [u16] + out dx, ax + } +# endif +} +#endif + + +/** + * Reads a 16-bit unsigned integer from an I/O port, ordered. + * + * @returns 16-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint16_t) ASMInU16(RTIOPORT Port); +#else +DECLINLINE(uint16_t) ASMInU16(RTIOPORT Port) +{ + uint16_t u16; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inw %w1, %w0\n\t" + : "=a" (u16) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u16 = __inword(Port); + +# else + __asm + { + mov dx, [Port] + in ax, dx + mov [u16], ax + } +# endif + return u16; +} +#endif + + +/** + * Writes a 32-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u32 32-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU32(RTIOPORT Port, uint32_t u32); +#else +DECLINLINE(void) ASMOutU32(RTIOPORT Port, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outl %1, %w0\n\t" + :: "Nd" (Port), + "a" (u32)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outdword(Port, u32); + +# else + __asm + { + mov dx, [Port] + mov eax, [u32] + out dx, eax + } +# endif +} +#endif + + +/** + * Reads a 32-bit unsigned integer from an I/O port, ordered. + * + * @returns 32-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMInU32(RTIOPORT Port); +#else +DECLINLINE(uint32_t) ASMInU32(RTIOPORT Port) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inl %w1, %0\n\t" + : "=a" (u32) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = __indword(Port); + +# else + __asm + { + mov dx, [Port] + in eax, dx + mov [u32], eax + } +# endif + return u32; +} +#endif + + +/** + * Writes a string of 8-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau8 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU8(RTIOPORT Port, uint8_t const RT_FAR *pau8, size_t c); +#else +DECLINLINE(void) ASMOutStrU8(RTIOPORT Port, uint8_t const RT_FAR *pau8, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsb\n\t" + : "+S" (pau8), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outbytestring(Port, (unsigned char RT_FAR *)pau8, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau8] + xchg esi, eax + rep outsb + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 8-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau8 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU8(RTIOPORT Port, uint8_t RT_FAR *pau8, size_t c); +#else +DECLINLINE(void) ASMInStrU8(RTIOPORT Port, uint8_t RT_FAR *pau8, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insb\n\t" + : "+D" (pau8), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __inbytestring(Port, pau8, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau8] + xchg edi, eax + rep insb + xchg edi, eax + } +# endif +} +#endif + + +/** + * Writes a string of 16-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau16 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU16(RTIOPORT Port, uint16_t const RT_FAR *pau16, size_t c); +#else +DECLINLINE(void) ASMOutStrU16(RTIOPORT Port, uint16_t const RT_FAR *pau16, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsw\n\t" + : "+S" (pau16), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outwordstring(Port, (unsigned short RT_FAR *)pau16, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau16] + xchg esi, eax + rep outsw + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 16-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau16 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU16(RTIOPORT Port, uint16_t RT_FAR *pau16, size_t c); +#else +DECLINLINE(void) ASMInStrU16(RTIOPORT Port, uint16_t RT_FAR *pau16, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insw\n\t" + : "+D" (pau16), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __inwordstring(Port, pau16, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau16] + xchg edi, eax + rep insw + xchg edi, eax + } +# endif +} +#endif + + +/** + * Writes a string of 32-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau32 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU32(RTIOPORT Port, uint32_t const RT_FAR *pau32, size_t c); +#else +DECLINLINE(void) ASMOutStrU32(RTIOPORT Port, uint32_t const RT_FAR *pau32, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsl\n\t" + : "+S" (pau32), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outdwordstring(Port, (unsigned long RT_FAR *)pau32, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau32] + xchg esi, eax + rep outsd + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 32-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau32 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU32(RTIOPORT Port, uint32_t RT_FAR *pau32, size_t c); +#else +DECLINLINE(void) ASMInStrU32(RTIOPORT Port, uint32_t RT_FAR *pau32, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insl\n\t" + : "+D" (pau32), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __indwordstring(Port, (unsigned long RT_FAR *)pau32, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau32] + xchg edi, eax + rep insd + xchg edi, eax + } +# endif +} +#endif + + +/** + * Invalidate page. + * + * @param uPtr Address of the page to invalidate. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInvalidatePage(RTCCUINTXREG uPtr); +#else +DECLINLINE(void) ASMInvalidatePage(RTCCUINTXREG uPtr) +{ +# if RT_INLINE_ASM_USES_INTRIN + __invlpg((void RT_FAR *)uPtr); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("invlpg %0\n\t" + : : "m" (*(uint8_t RT_FAR *)(uintptr_t)uPtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uPtr] + invlpg [rax] +# else + mov eax, [uPtr] + invlpg [eax] +# endif + } +# endif +} +#endif + + +/** + * Write back the internal caches and invalidate them. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMWriteBackAndInvalidateCaches(void); +#else +DECLINLINE(void) ASMWriteBackAndInvalidateCaches(void) +{ +# if RT_INLINE_ASM_USES_INTRIN + __wbinvd(); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wbinvd"); +# else + __asm + { + wbinvd + } +# endif +} +#endif + + +/** + * Invalidate internal and (perhaps) external caches without first + * flushing dirty cache lines. Use with extreme care. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMInvalidateInternalCaches(void); +#else +DECLINLINE(void) ASMInvalidateInternalCaches(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("invd"); +# else + __asm + { + invd + } +# endif +} +#endif + + +/** + * Memory load/store fence, waits for any pending writes and reads to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE2 CPUID bit set. + */ +DECLINLINE(void) ASMMemoryFenceSSE2(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xf0\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_mfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xf0 + } +#endif +} + + +/** + * Memory store fence, waits for any writes to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE CPUID bit set. + */ +DECLINLINE(void) ASMWriteFenceSSE(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xf8\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_sfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xf8 + } +#endif +} + + +/** + * Memory load fence, waits for any pending reads to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE2 CPUID bit set. + */ +DECLINLINE(void) ASMReadFenceSSE2(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xe8\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_lfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xe8 + } +#endif +} + +#if !defined(_MSC_VER) || !defined(RT_ARCH_AMD64) + +/* + * Clear the AC bit in the EFLAGS register. + * Requires the X86_CPUID_STEXT_FEATURE_EBX_SMAP CPUID bit set. + * Requires to be executed in R0. + */ +DECLINLINE(void) ASMClearAC(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0x01,0xca\n\t"); +#else + __asm + { + _emit 0x0f + _emit 0x01 + _emit 0xca + } +#endif +} + + +/* + * Set the AC bit in the EFLAGS register. + * Requires the X86_CPUID_STEXT_FEATURE_EBX_SMAP CPUID bit set. + * Requires to be executed in R0. + */ +DECLINLINE(void) ASMSetAC(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0x01,0xcb\n\t"); +#else + __asm + { + _emit 0x0f + _emit 0x01 + _emit 0xcb + } +#endif +} + +#endif /* !_MSC_VER) || !RT_ARCH_AMD64 */ + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/asm-math.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/asm-math.h @@ -0,0 +1,438 @@ +/** @file + * IPRT - Assembly Routines for Optimizing some Integers Math Operations. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_math_h +#define ___iprt_asm_math_h + +#include + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(__emul) +# pragma intrinsic(__emulu) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(_mul128) +# pragma intrinsic(_umul128) +# endif +#endif + + +/** @defgroup grp_rt_asm_math Interger Math Optimizations + * @ingroup grp_rt_asm + * @{ */ + +/** + * Multiplies two unsigned 32-bit values returning an unsigned 64-bit result. + * + * @returns u32F1 * u32F2. + */ + +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_X86) +DECLASM(uint64_t) ASMMult2xU32RetU64(uint32_t u32F1, uint32_t u32F2); +#else +DECLINLINE(uint64_t) ASMMult2xU32RetU64(uint32_t u32F1, uint32_t u32F2) +{ +# ifdef RT_ARCH_X86 + uint64_t u64; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("mull %%edx" + : "=A" (u64) + : "a" (u32F2), "d" (u32F1)); +# elif RT_INLINE_ASM_USES_INTRIN + u64 = __emulu(u32F1, u32F2); +# else + __asm + { + mov edx, [u32F1] + mov eax, [u32F2] + mul edx + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif + return u64; +# else /* generic: */ + return (uint64_t)u32F1 * u32F2; +# endif +} +#endif + + +/** + * Multiplies two signed 32-bit values returning a signed 64-bit result. + * + * @returns u32F1 * u32F2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_X86) +DECLASM(int64_t) ASMMult2xS32RetS64(int32_t i32F1, int32_t i32F2); +#else +DECLINLINE(int64_t) ASMMult2xS32RetS64(int32_t i32F1, int32_t i32F2) +{ +# ifdef RT_ARCH_X86 + int64_t i64; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("imull %%edx" + : "=A" (i64) + : "a" (i32F2), "d" (i32F1)); +# elif RT_INLINE_ASM_USES_INTRIN + i64 = __emul(i32F1, i32F2); +# else + __asm + { + mov edx, [i32F1] + mov eax, [i32F2] + imul edx + mov dword ptr [i64], eax + mov dword ptr [i64 + 4], edx + } +# endif + return i64; +# else /* generic: */ + return (int64_t)i32F1 * i32F2; +# endif +} +#endif + + +#if ARCH_BITS == 64 +DECLINLINE(uint64_t) ASMMult2xU64Ret2xU64(uint64_t u64F1, uint64_t u64F2, uint64_t *pu64ProdHi) +{ +# if defined(RT_ARCH_AMD64) && (RT_INLINE_ASM_GNU_STYLE || RT_INLINE_ASM_USES_INTRIN) +# if RT_INLINE_ASM_GNU_STYLE + uint64_t u64Low, u64High; + __asm__ __volatile__("mulq %%rdx" + : "=a" (u64Low), "=d" (u64High) + : "0" (u64F1), "1" (u64F2)); + *pu64ProdHi = u64High; + return u64Low; +# elif RT_INLINE_ASM_USES_INTRIN + return _umul128(u64F1, u64F2, pu64ProdHi); +# else +# error "hmm" +# endif +# else /* generic: */ + /* + * F1 * F2 = Prod + * -- -- + * ab * cd = b*d + a*d*10 + b*c*10 + a*c*100 + * + * Where a, b, c and d are 'digits', and 10 is max digit + 1. + * + * Our digits are 32-bit wide, so instead of 10 we multiply by 4G. + * Prod = F1.s.Lo*F2.s.Lo + F1.s.Hi*F2.s.Lo*4G + * + F1.s.Lo*F2.s.Hi*4G + F1.s.Hi*F2.s.Hi*4G*4G + */ + RTUINT128U Prod; + RTUINT64U Tmp1; + uint64_t u64Tmp; + RTUINT64U F1, F2; + F1.u = u64F1; + F2.u = u64F2; + + Prod.s.Lo = ASMMult2xU32RetU64(F1.s.Lo, F2.s.Lo); + + Tmp1.u = ASMMult2xU32RetU64(F1.s.Hi, F2.s.Lo); + u64Tmp = (uint64_t)Prod.DWords.dw1 + Tmp1.s.Lo; + Prod.DWords.dw1 = (uint32_t)u64Tmp; + Prod.s.Hi = Tmp1.s.Hi; + Prod.s.Hi += u64Tmp >> 32; /* carry */ + + Tmp1.u = ASMMult2xU32RetU64(F1.s.Lo, F2.s.Hi); + u64Tmp = (uint64_t)Prod.DWords.dw1 + Tmp1.s.Lo; + Prod.DWords.dw1 = (uint32_t)u64Tmp; + u64Tmp >>= 32; /* carry */ + u64Tmp += Prod.DWords.dw2; + u64Tmp += Tmp1.s.Hi; + Prod.DWords.dw2 = (uint32_t)u64Tmp; + Prod.DWords.dw3 += u64Tmp >> 32; /* carry */ + + Prod.s.Hi += ASMMult2xU32RetU64(F1.s.Hi, F2.s.Hi); + *pu64ProdHi = Prod.s.Hi; + return Prod.s.Lo; +# endif +} +#endif + + + +/** + * Divides a 64-bit unsigned by a 32-bit unsigned returning an unsigned 32-bit result. + * + * @returns u64 / u32. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(uint32_t) ASMDivU64ByU32RetU32(uint64_t u64, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMDivU64ByU32RetU32(uint64_t u64, uint32_t u32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; + __asm__ __volatile__("divl %3" + : "=a" (u32), "=d"(uDummy) + : "A" (u64), "r" (u32)); +# else + __asm + { + mov eax, dword ptr [u64] + mov edx, dword ptr [u64 + 4] + mov ecx, [u32] + div ecx + mov [u32], eax + } +# endif + return u32; +# else /* generic: */ + return (uint32_t)(u64 / u32); +# endif +} +#endif + + +/** + * Divides a 64-bit signed by a 32-bit signed returning a signed 32-bit result. + * + * @returns u64 / u32. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(int32_t) ASMDivS64ByS32RetS32(int64_t i64, int32_t i32); +#else +DECLINLINE(int32_t) ASMDivS64ByS32RetS32(int64_t i64, int32_t i32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG iDummy; + __asm__ __volatile__("idivl %3" + : "=a" (i32), "=d"(iDummy) + : "A" (i64), "r" (i32)); +# else + __asm + { + mov eax, dword ptr [i64] + mov edx, dword ptr [i64 + 4] + mov ecx, [i32] + idiv ecx + mov [i32], eax + } +# endif + return i32; +# else /* generic: */ + return (int32_t)(i64 / i32); +# endif +} +#endif + + +/** + * Performs 64-bit unsigned by a 32-bit unsigned division with a 32-bit unsigned result, + * returning the rest. + * + * @returns u64 % u32. + * + * @remarks It is important that the result is <= UINT32_MAX or we'll overflow and crash. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(uint32_t) ASMModU64ByU32RetU32(uint64_t u64, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMModU64ByU32RetU32(uint64_t u64, uint32_t u32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; + __asm__ __volatile__("divl %3" + : "=a" (uDummy), "=d"(u32) + : "A" (u64), "r" (u32)); +# else + __asm + { + mov eax, dword ptr [u64] + mov edx, dword ptr [u64 + 4] + mov ecx, [u32] + div ecx + mov [u32], edx + } +# endif + return u32; +# else /* generic: */ + return (uint32_t)(u64 % u32); +# endif +} +#endif + + +/** + * Performs 64-bit signed by a 32-bit signed division with a 32-bit signed result, + * returning the rest. + * + * @returns u64 % u32. + * + * @remarks It is important that the result is <= UINT32_MAX or we'll overflow and crash. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(int32_t) ASMModS64ByS32RetS32(int64_t i64, int32_t i32); +#else +DECLINLINE(int32_t) ASMModS64ByS32RetS32(int64_t i64, int32_t i32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG iDummy; + __asm__ __volatile__("idivl %3" + : "=a" (iDummy), "=d"(i32) + : "A" (i64), "r" (i32)); +# else + __asm + { + mov eax, dword ptr [i64] + mov edx, dword ptr [i64 + 4] + mov ecx, [i32] + idiv ecx + mov [i32], edx + } +# endif + return i32; +# else /* generic: */ + return (int32_t)(i64 % i32); +# endif +} +#endif + + +/** + * Multiple a 32-bit by a 32-bit integer and divide the result by a 32-bit integer + * using a 64 bit intermediate result. + * + * @returns (u32A * u32B) / u32C. + * @param u32A The 32-bit value (A). + * @param u32B The 32-bit value to multiple by A. + * @param u32C The 32-bit value to divide A*B by. + * + * @remarks Architecture specific. + * @remarks Make sure the result won't ever exceed 32-bit, because hardware + * exception may be raised if it does. + * @remarks On x86 this may be used to avoid dragging in 64-bit builtin + * arithmetics functions. + */ +#if RT_INLINE_ASM_EXTERNAL && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +DECLASM(uint32_t) ASMMultU32ByU32DivByU32(uint32_t u32A, uint32_t u32B, uint32_t u32C); +#else +DECLINLINE(uint32_t) ASMMultU32ByU32DivByU32(uint32_t u32A, uint32_t u32B, uint32_t u32C) +{ +# if RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + uint32_t u32Result, u32Spill; + __asm__ __volatile__("mull %2\n\t" + "divl %3\n\t" + : "=&a" (u32Result), + "=&d" (u32Spill) + : "r" (u32B), + "r" (u32C), + "0" (u32A)); + return u32Result; +# else + return (uint32_t)(((uint64_t)u32A * u32B) / u32C); +# endif +} +#endif + + +/** + * Multiple a 64-bit by a 32-bit integer and divide the result by a 32-bit integer + * using a 96 bit intermediate result. + * + * @returns (u64A * u32B) / u32C. + * @param u64A The 64-bit value. + * @param u32B The 32-bit value to multiple by A. + * @param u32C The 32-bit value to divide A*B by. + * + * @remarks Architecture specific. + * @remarks Make sure the result won't ever exceed 64-bit, because hardware + * exception may be raised if it does. + * @remarks On x86 this may be used to avoid dragging in 64-bit builtin + * arithmetics function. + */ +#if RT_INLINE_ASM_EXTERNAL || !defined(__GNUC__) || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86)) +DECLASM(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C); +#else +DECLINLINE(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + uint64_t u64Result, u64Spill; + __asm__ __volatile__("mulq %2\n\t" + "divq %3\n\t" + : "=&a" (u64Result), + "=&d" (u64Spill) + : "r" ((uint64_t)u32B), + "r" ((uint64_t)u32C), + "0" (u64A)); + return u64Result; +# else + uint32_t u32Dummy; + uint64_t u64Result; + __asm__ __volatile__("mull %%ecx \n\t" /* eax = u64Lo.lo = (u64A.lo * u32B).lo + edx = u64Lo.hi = (u64A.lo * u32B).hi */ + "xchg %%eax,%%esi \n\t" /* esi = u64Lo.lo + eax = u64A.hi */ + "xchg %%edx,%%edi \n\t" /* edi = u64Low.hi + edx = u32C */ + "xchg %%edx,%%ecx \n\t" /* ecx = u32C + edx = u32B */ + "mull %%edx \n\t" /* eax = u64Hi.lo = (u64A.hi * u32B).lo + edx = u64Hi.hi = (u64A.hi * u32B).hi */ + "addl %%edi,%%eax \n\t" /* u64Hi.lo += u64Lo.hi */ + "adcl $0,%%edx \n\t" /* u64Hi.hi += carry */ + "divl %%ecx \n\t" /* eax = u64Hi / u32C + edx = u64Hi % u32C */ + "movl %%eax,%%edi \n\t" /* edi = u64Result.hi = u64Hi / u32C */ + "movl %%esi,%%eax \n\t" /* eax = u64Lo.lo */ + "divl %%ecx \n\t" /* u64Result.lo */ + "movl %%edi,%%edx \n\t" /* u64Result.hi */ + : "=A"(u64Result), "=c"(u32Dummy), + "=S"(u32Dummy), "=D"(u32Dummy) + : "a"((uint32_t)u64A), + "S"((uint32_t)(u64A >> 32)), + "c"(u32B), + "D"(u32C)); + return u64Result; +# endif +# else + RTUINT64U u; + uint64_t u64Lo = (uint64_t)(u64A & 0xffffffff) * u32B; + uint64_t u64Hi = (uint64_t)(u64A >> 32) * u32B; + u64Hi += (u64Lo >> 32); + u.s.Hi = (uint32_t)(u64Hi / u32C); + u.s.Lo = (uint32_t)((((u64Hi % u32C) << 32) + (u64Lo & 0xffffffff)) / u32C); + return u.u; +# endif +} +#endif + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/asm.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/asm.h @@ -0,0 +1,5621 @@ +/** @file + * IPRT - Assembly Functions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_h +#define ___iprt_asm_h + +#include +#include +#include +/** @def RT_INLINE_ASM_USES_INTRIN + * Defined as 1 if we're using a _MSC_VER 1400. + * Otherwise defined as 0. + */ + +/* Solaris 10 header ugliness */ +#ifdef u +# undef u +#endif + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(_ReadWriteBarrier) +# pragma intrinsic(__cpuid) +# pragma intrinsic(__stosd) +# pragma intrinsic(__stosw) +# pragma intrinsic(__stosb) +# pragma intrinsic(_BitScanForward) +# pragma intrinsic(_BitScanReverse) +# pragma intrinsic(_bittest) +# pragma intrinsic(_bittestandset) +# pragma intrinsic(_bittestandreset) +# pragma intrinsic(_bittestandcomplement) +# pragma intrinsic(_byteswap_ushort) +# pragma intrinsic(_byteswap_ulong) +# pragma intrinsic(_interlockedbittestandset) +# pragma intrinsic(_interlockedbittestandreset) +# pragma intrinsic(_InterlockedAnd) +# pragma intrinsic(_InterlockedOr) +# pragma intrinsic(_InterlockedIncrement) +# pragma intrinsic(_InterlockedDecrement) +# pragma intrinsic(_InterlockedExchange) +# pragma intrinsic(_InterlockedExchangeAdd) +# pragma intrinsic(_InterlockedCompareExchange) +# pragma intrinsic(_InterlockedCompareExchange64) +# pragma intrinsic(_rotl) +# pragma intrinsic(_rotr) +# pragma intrinsic(_rotl64) +# pragma intrinsic(_rotr64) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(__stosq) +# pragma intrinsic(_byteswap_uint64) +# pragma intrinsic(_InterlockedExchange64) +# pragma intrinsic(_InterlockedExchangeAdd64) +# pragma intrinsic(_InterlockedAnd64) +# pragma intrinsic(_InterlockedOr64) +# pragma intrinsic(_InterlockedIncrement64) +# pragma intrinsic(_InterlockedDecrement64) +# endif +#endif + +/* + * Include #pragma aux definitions for Watcom C/C++. + */ +#if defined(__WATCOMC__) && ARCH_BITS == 16 && defined(RT_ARCH_X86) +# include "asm-watcom-x86-16.h" +#elif defined(__WATCOMC__) && ARCH_BITS == 32 && defined(RT_ARCH_X86) +# include "asm-watcom-x86-32.h" +#endif + + + +/** @defgroup grp_rt_asm ASM - Assembly Routines + * @ingroup grp_rt + * + * @remarks The difference between ordered and unordered atomic operations are that + * the former will complete outstanding reads and writes before continuing + * while the latter doesn't make any promises about the order. Ordered + * operations doesn't, it seems, make any 100% promise wrt to whether + * the operation will complete before any subsequent memory access. + * (please, correct if wrong.) + * + * ASMAtomicSomething operations are all ordered, while ASMAtomicUoSomething + * are unordered (note the Uo). + * + * @remarks Some remarks about __volatile__: Without this keyword gcc is allowed to reorder + * or even optimize assembler instructions away. For instance, in the following code + * the second rdmsr instruction is optimized away because gcc treats that instruction + * as deterministic: + * + * @code + * static inline uint64_t rdmsr_low(int idx) + * { + * uint32_t low; + * __asm__ ("rdmsr" : "=a"(low) : "c"(idx) : "edx"); + * } + * ... + * uint32_t msr1 = rdmsr_low(1); + * foo(msr1); + * msr1 = rdmsr_low(1); + * bar(msr1); + * @endcode + * + * The input parameter of rdmsr_low is the same for both calls and therefore gcc will + * use the result of the first call as input parameter for bar() as well. For rdmsr this + * is not acceptable as this instruction is _not_ deterministic. This applies to reading + * machine status information in general. + * + * @{ + */ + + +/** @def RT_INLINE_ASM_GCC_4_3_X_X86 + * Used to work around some 4.3.x register allocation issues in this version of + * the compiler. So far this workaround is still required for 4.4 and 4.5 but + * definitely not for 5.x */ +#if (RT_GNUC_PREREQ(4, 3) && !RT_GNUC_PREREQ(5, 0) && defined(__i386__)) +# define RT_INLINE_ASM_GCC_4_3_X_X86 1 +#else +# define RT_INLINE_ASM_GCC_4_3_X_X86 0 +#endif + +/** @def RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC + * i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493) screws up + * RTSemRWRequestWrite semsemrw-lockless-generic.cpp in release builds. PIC + * mode, x86. + * + * Some gcc 4.3.x versions may have register allocation issues with cmpxchg8b + * when in PIC mode on x86. + */ +#ifndef RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +# if defined(DOXYGEN_RUNNING) || defined(__WATCOMC__) /* Watcom has trouble with the expression below */ +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 1 +# elif defined(_MSC_VER) /* Visual C++ has trouble too, but it'll only tell us when C4688 is enabled. */ +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 0 +# elif ( (defined(PIC) || defined(__PIC__)) \ + && defined(RT_ARCH_X86) \ + && ( RT_INLINE_ASM_GCC_4_3_X_X86 \ + || defined(RT_OS_DARWIN)) ) +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 1 +# else +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 0 +# endif +#endif + + +/** @def ASMReturnAddress + * Gets the return address of the current (or calling if you like) function or method. + */ +#ifdef _MSC_VER +# ifdef __cplusplus +extern "C" +# endif +void * _ReturnAddress(void); +# pragma intrinsic(_ReturnAddress) +# define ASMReturnAddress() _ReturnAddress() +#elif defined(__GNUC__) || defined(DOXYGEN_RUNNING) +# define ASMReturnAddress() __builtin_return_address(0) +#elif defined(__WATCOMC__) +# define ASMReturnAddress() Watcom_does_not_appear_to_have_intrinsic_return_address_function() +#else +# error "Unsupported compiler." +#endif + + +/** + * Compiler memory barrier. + * + * Ensure that the compiler does not use any cached (register/tmp stack) memory + * values or any outstanding writes when returning from this function. + * + * This function must be used if non-volatile data is modified by a + * device or the VMM. Typical cases are port access, MMIO access, + * trapping instruction, etc. + */ +#if RT_INLINE_ASM_GNU_STYLE +# define ASMCompilerBarrier() do { __asm__ __volatile__("" : : : "memory"); } while (0) +#elif RT_INLINE_ASM_USES_INTRIN +# define ASMCompilerBarrier() do { _ReadWriteBarrier(); } while (0) +#elif defined(__WATCOMC__) +void ASMCompilerBarrier(void); +#else /* 2003 should have _ReadWriteBarrier() but I guess we're at 2002 level then... */ +DECLINLINE(void) ASMCompilerBarrier(void) +{ + __asm + { + } +} +#endif + + +/** @def ASMBreakpoint + * Debugger Breakpoint. + * @deprecated Use RT_BREAKPOINT instead. + * @internal + */ +#define ASMBreakpoint() RT_BREAKPOINT() + + +/** + * Spinloop hint for platforms that have these, empty function on the other + * platforms. + * + * x86 & AMD64: The PAUSE variant of NOP for helping hyperthreaded CPUs detecting + * spin locks. + */ +#if RT_INLINE_ASM_EXTERNAL && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +DECLASM(void) ASMNopPause(void); +#else +DECLINLINE(void) ASMNopPause(void) +{ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__(".byte 0xf3,0x90\n\t"); +# else + __asm { + _emit 0f3h + _emit 090h + } +# endif +# else + /* dummy */ +# endif +} +#endif + + +/** + * Atomically Exchange an unsigned 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to update. + * @param u8 The 8-bit value to assign to *pu8. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint8_t) ASMAtomicXchgU8(volatile uint8_t RT_FAR *pu8, uint8_t u8); +#else +DECLINLINE(uint8_t) ASMAtomicXchgU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgb %0, %1\n\t" + : "=m" (*pu8), + "=q" (u8) /* =r - busted on g++ (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) */ + : "1" (u8), + "m" (*pu8)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu8] + mov al, [u8] + xchg [rdx], al + mov [u8], al +# else + mov edx, [pu8] + mov al, [u8] + xchg [edx], al + mov [u8], al +# endif + } +# endif + return u8; +} +#endif + + +/** + * Atomically Exchange a signed 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pi8 Pointer to the 8-bit variable to update. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(int8_t) ASMAtomicXchgS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + return (int8_t)ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pi8, (uint8_t)i8); +} + + +/** + * Atomically Exchange a bool value, ordered. + * + * @returns Current *pf value + * @param pf Pointer to the 8-bit variable to update. + * @param f The 8-bit value to assign to *pi8. + */ +DECLINLINE(bool) ASMAtomicXchgBool(volatile bool RT_FAR *pf, bool f) +{ +#ifdef _MSC_VER + return !!ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pf, (uint8_t)f); +#else + return (bool)ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pf, (uint8_t)f); +#endif +} + + +/** + * Atomically Exchange an unsigned 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to update. + * @param u16 The 16-bit value to assign to *pu16. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint16_t) ASMAtomicXchgU16(volatile uint16_t RT_FAR *pu16, uint16_t u16); +#else +DECLINLINE(uint16_t) ASMAtomicXchgU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgw %0, %1\n\t" + : "=m" (*pu16), + "=r" (u16) + : "1" (u16), + "m" (*pu16)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu16] + mov ax, [u16] + xchg [rdx], ax + mov [u16], ax +# else + mov edx, [pu16] + mov ax, [u16] + xchg [edx], ax + mov [u16], ax +# endif + } +# endif + return u16; +} +#endif + + +/** + * Atomically Exchange a signed 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pi16 Pointer to the 16-bit variable to update. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(int16_t) ASMAtomicXchgS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + return (int16_t)ASMAtomicXchgU16((volatile uint16_t RT_FAR *)pi16, (uint16_t)i16); +} + + +/** + * Atomically Exchange an unsigned 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to update. + * @param u32 The 32-bit value to assign to *pu32. + * + * @remarks Does not work on 286 and earlier. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicXchgU32(volatile uint32_t RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMAtomicXchgU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgl %0, %1\n\t" + : "=m" (*pu32), + "=r" (u32) + : "1" (u32), + "m" (*pu32)); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedExchange((long RT_FAR *)pu32, u32); + +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + mov eax, u32 + xchg [rdx], eax + mov [u32], eax +# else + mov edx, [pu32] + mov eax, u32 + xchg [edx], eax + mov [u32], eax +# endif + } +# endif + return u32; +} +#endif + + +/** + * Atomically Exchange a signed 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pi32 Pointer to the 32-bit variable to update. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(int32_t) ASMAtomicXchgS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically Exchange an unsigned 64-bit value, ordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64 The 64-bit value to assign to *pu64. + * + * @remarks Works on 32-bit x86 CPUs starting with Pentium. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(uint64_t) ASMAtomicXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(uint64_t) ASMAtomicXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ +# if defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_USES_INTRIN + u64 = _InterlockedExchange64((__int64 *)pu64, u64); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgq %0, %1\n\t" + : "=m" (*pu64), + "=r" (u64) + : "1" (u64), + "m" (*pu64)); +# else + __asm + { + mov rdx, [pu64] + mov rax, [u64] + xchg [rdx], rax + mov [u64], rax + } +# endif +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = (uint32_t)u64; + __asm__ __volatile__(/*"xchgl %%esi, %5\n\t"*/ + "xchgl %%ebx, %3\n\t" + "1:\n\t" + "lock; cmpxchg8b (%5)\n\t" + "jnz 1b\n\t" + "movl %3, %%ebx\n\t" + /*"xchgl %%esi, %5\n\t"*/ + : "=A" (u64), + "=m" (*pu64) + : "0" (*pu64), + "m" ( u32EBX ), + "c" ( (uint32_t)(u64 >> 32) ), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("1:\n\t" + "lock; cmpxchg8b %1\n\t" + "jnz 1b\n\t" + : "=A" (u64), + "=m" (*pu64) + : "0" (*pu64), + "b" ( (uint32_t)u64 ), + "c" ( (uint32_t)(u64 >> 32) )); +# endif +# else + __asm + { + mov ebx, dword ptr [u64] + mov ecx, dword ptr [u64 + 4] + mov edi, pu64 + mov eax, dword ptr [edi] + mov edx, dword ptr [edi + 4] + retry: + lock cmpxchg8b [edi] + jnz retry + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically Exchange an signed 64-bit value, ordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(int64_t) ASMAtomicXchgS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically Exchange a pointer value, ordered. + * + * @returns Current *ppv value + * @param ppv Pointer to the pointer variable to update. + * @param pv The pointer value to assign to *ppv. + */ +DECLINLINE(void RT_FAR *) ASMAtomicXchgPtr(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicXchgPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to update. + * @param pv The pointer value to assign to *ppv. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicXchgPtrT(ppv, pv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + Type const pvTypeChecked = (pv); \ + Type pvTypeCheckedRet = (__typeof__(*(ppv))) ASMAtomicXchgPtr((void * volatile *)ppvTypeChecked, (void *)pvTypeChecked); \ + pvTypeCheckedRet; \ + }) +#else +# define ASMAtomicXchgPtrT(ppv, pv, Type) \ + (Type)ASMAtomicXchgPtr((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pv)) +#endif + + +/** + * Atomically Exchange a raw-mode context pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvRC Pointer to the pointer variable to update. + * @param pvRC The pointer value to assign to *ppv. + */ +DECLINLINE(RTRCPTR) ASMAtomicXchgRCPtr(RTRCPTR volatile RT_FAR *ppvRC, RTRCPTR pvRC) +{ + return (RTRCPTR)ASMAtomicXchgU32((uint32_t volatile RT_FAR *)(void RT_FAR *)ppvRC, (uint32_t)pvRC); +} + + +/** + * Atomically Exchange a ring-0 pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvR0 Pointer to the pointer variable to update. + * @param pvR0 The pointer value to assign to *ppv. + */ +DECLINLINE(RTR0PTR) ASMAtomicXchgR0Ptr(RTR0PTR volatile RT_FAR *ppvR0, RTR0PTR pvR0) +{ +#if R0_ARCH_BITS == 32 || ARCH_BITS == 16 + return (RTR0PTR)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppvR0, (uint32_t)pvR0); +#elif R0_ARCH_BITS == 64 + return (RTR0PTR)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppvR0, (uint64_t)pvR0); +#else +# error "R0_ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Exchange a ring-3 pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvR3 Pointer to the pointer variable to update. + * @param pvR3 The pointer value to assign to *ppv. + */ +DECLINLINE(RTR3PTR) ASMAtomicXchgR3Ptr(RTR3PTR volatile RT_FAR *ppvR3, RTR3PTR pvR3) +{ +#if R3_ARCH_BITS == 32 || ARCH_BITS == 16 + return (RTR3PTR)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppvR3, (uint32_t)pvR3); +#elif R3_ARCH_BITS == 64 + return (RTR3PTR)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppvR3, (uint64_t)pvR3); +#else +# error "R3_ARCH_BITS is bogus" +#endif +} + + +/** @def ASMAtomicXchgHandle + * Atomically Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param phRes Where to store the current *ph value. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicXchgHandle(ph, hNew, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicXchgU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicXchgHandle(ph, hNew, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicXchgU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + * @todo This is busted as its missing the result argument. + */ +#define ASMAtomicXchgSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicXchgU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t)(uNew)); break; \ + case 2: ASMAtomicXchgU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + +/** + * Atomically Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + * @param puRes Where to store the current *pu value. + */ +#define ASMAtomicXchgSizeCorrect(pu, uNew, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicXchgU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t)(uNew)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicXchgU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically Compare and Exchange an unsigned 8-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu8 Pointer to the value to update. + * @param u8New The new value to assigned to *pu8. + * @param u8Old The old value to *pu8 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL || !RT_INLINE_ASM_GNU_STYLE +DECLASM(bool) ASMAtomicCmpXchgU8(volatile uint8_t RT_FAR *pu8, const uint8_t u8New, const uint8_t u8Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU8(volatile uint8_t RT_FAR *pu8, const uint8_t u8New, uint8_t u8Old) +{ + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgb %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu8), + "=qm" (u8Ret), + "=a" (u8Old) + : "q" (u8New), + "2" (u8Old), + "m" (*pu8)); + return (bool)u8Ret; +} +#endif + + +/** + * Atomically Compare and Exchange a signed 8-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi8 Pointer to the value to update. + * @param i8New The new value to assigned to *pi8. + * @param i8Old The old value to *pi8 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS8(volatile int8_t RT_FAR *pi8, const int8_t i8New, const int8_t i8Old) +{ + return ASMAtomicCmpXchgU8((volatile uint8_t RT_FAR *)pi8, (const uint8_t)i8New, (const uint8_t)i8Old); +} + + +/** + * Atomically Compare and Exchange a bool value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pf Pointer to the value to update. + * @param fNew The new value to assigned to *pf. + * @param fOld The old value to *pf compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgBool(volatile bool RT_FAR *pf, const bool fNew, const bool fOld) +{ + return ASMAtomicCmpXchgU8((volatile uint8_t RT_FAR *)pf, (const uint8_t)fNew, (const uint8_t)fOld); +} + + +/** + * Atomically Compare and Exchange an unsigned 32-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu32 Pointer to the value to update. + * @param u32New The new value to assigned to *pu32. + * @param u32Old The old value to *pu32 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicCmpXchgU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, uint32_t u32Old) +{ +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgl %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu32), + "=qm" (u8Ret), + "=a" (u32Old) + : "r" (u32New), + "2" (u32Old), + "m" (*pu32)); + return (bool)u8Ret; + +# elif RT_INLINE_ASM_USES_INTRIN + return (uint32_t)_InterlockedCompareExchange((long RT_FAR *)pu32, u32New, u32Old) == u32Old; + +# else + uint32_t u32Ret; + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] +# else + mov edx, [pu32] +# endif + mov eax, [u32Old] + mov ecx, [u32New] +# ifdef RT_ARCH_AMD64 + lock cmpxchg [rdx], ecx +# else + lock cmpxchg [edx], ecx +# endif + setz al + movzx eax, al + mov [u32Ret], eax + } + return !!u32Ret; +# endif +} +#endif + + +/** + * Atomically Compare and Exchange a signed 32-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi32 Pointer to the value to update. + * @param i32New The new value to assigned to *pi32. + * @param i32Old The old value to *pi32 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS32(volatile int32_t RT_FAR *pi32, const int32_t i32New, const int32_t i32Old) +{ + return ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32New, (uint32_t)i32Old); +} + + +/** + * Atomically Compare and exchange an unsigned 64-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64New The 64-bit value to assign to *pu64. + * @param u64Old The value to compare with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(bool) ASMAtomicCmpXchgU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64New, uint64_t u64Old) +{ +# if RT_INLINE_ASM_USES_INTRIN + return (uint64_t)_InterlockedCompareExchange64((__int64 RT_FAR *)pu64, u64New, u64Old) == u64Old; + +# elif defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgq %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu64), + "=qm" (u8Ret), + "=a" (u64Old) + : "r" (u64New), + "2" (u64Old), + "m" (*pu64)); + return (bool)u8Ret; +# else + bool fRet; + __asm + { + mov rdx, [pu32] + mov rax, [u64Old] + mov rcx, [u64New] + lock cmpxchg [rdx], rcx + setz al + mov [fRet], al + } + return fRet; +# endif +# else /* !RT_ARCH_AMD64 */ + uint32_t u32Ret; +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = (uint32_t)u64New; + uint32_t u32Spill; + __asm__ __volatile__("xchgl %%ebx, %4\n\t" + "lock; cmpxchg8b (%6)\n\t" + "setz %%al\n\t" + "movl %4, %%ebx\n\t" + "movzbl %%al, %%eax\n\t" + : "=a" (u32Ret), + "=d" (u32Spill), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64) +# else + "=m" (*pu64) +# endif + : "A" (u64Old), + "m" ( u32EBX ), + "c" ( (uint32_t)(u64New >> 32) ), + "S" (pu64)); +# else /* !PIC */ + uint32_t u32Spill; + __asm__ __volatile__("lock; cmpxchg8b %2\n\t" + "setz %%al\n\t" + "movzbl %%al, %%eax\n\t" + : "=a" (u32Ret), + "=d" (u32Spill), + "+m" (*pu64) + : "A" (u64Old), + "b" ( (uint32_t)u64New ), + "c" ( (uint32_t)(u64New >> 32) )); +# endif + return (bool)u32Ret; +# else + __asm + { + mov ebx, dword ptr [u64New] + mov ecx, dword ptr [u64New + 4] + mov edi, [pu64] + mov eax, dword ptr [u64Old] + mov edx, dword ptr [u64Old + 4] + lock cmpxchg8b [edi] + setz al + movzx eax, al + mov dword ptr [u32Ret], eax + } + return !!u32Ret; +# endif +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Atomically Compare and exchange a signed 64-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pu64. + * @param i64Old The value to compare with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS64(volatile int64_t RT_FAR *pi64, const int64_t i64, const int64_t i64Old) +{ + return ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64, (uint64_t)i64Old); +} + + +/** + * Atomically Compare and Exchange a pointer value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgPtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pvNew, const void RT_FAR *pvOld) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pvNew, (uint32_t)pvOld); +#elif ARCH_BITS == 64 + return ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pvNew, (uint64_t)pvOld); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Compare and Exchange a pointer value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * + * @remarks This is relatively type safe on GCC platforms. + * @remarks x86: Requires a 486 or later. + */ +#ifdef __GNUC__ +# define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ + __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ + bool fMacroRet = ASMAtomicCmpXchgPtrVoid((void * volatile *)ppvTypeChecked, \ + (void *)pvNewTypeChecked, (void *)pvOldTypeChecked); \ + fMacroRet; \ + }) +#else +# define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ + ASMAtomicCmpXchgPtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pvNew), (void RT_FAR *)(pvOld)) +#endif + + +/** @def ASMAtomicCmpXchgHandle + * Atomically Compare and Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param hOld The old value to *pu compare with. + * @param fRc Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + * @remarks x86: Requires a 486 or later. + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicCmpXchgHandle(ph, hNew, hOld, fRc) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + (fRc) = ASMAtomicCmpXchgU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew), (const uint32_t)(hOld)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicCmpXchgHandle(ph, hNew, hOld, fRc) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + (fRc) = ASMAtomicCmpXchgU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew), (const uint64_t)(hOld)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** @def ASMAtomicCmpXchgSize + * Atomically Compare and Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the value to update. + * @param uNew The new value to assigned to *pu. + * @param uOld The old value to *pu compare with. + * @param fRc Where to store the result. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicCmpXchgSize(pu, uNew, uOld, fRc) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: (fRc) = ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld)); \ + break; \ + case 8: (fRc) = ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld)); \ + break; \ + default: AssertMsgFailed(("ASMAtomicCmpXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + (fRc) = false; \ + break; \ + } \ + } while (0) + + +/** + * Atomically Compare and Exchange an unsigned 32-bit value, additionally + * passes back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu32 Pointer to the value to update. + * @param u32New The new value to assigned to *pu32. + * @param u32Old The old value to *pu32 compare with. + * @param pu32Old Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicCmpXchgExU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old, uint32_t RT_FAR *pu32Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgExU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old, uint32_t RT_FAR *pu32Old) +{ +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgl %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu32), + "=qm" (u8Ret), + "=a" (*pu32Old) + : "r" (u32New), + "a" (u32Old), + "m" (*pu32)); + return (bool)u8Ret; + +# elif RT_INLINE_ASM_USES_INTRIN + return (*pu32Old =_InterlockedCompareExchange((long RT_FAR *)pu32, u32New, u32Old)) == u32Old; + +# else + uint32_t u32Ret; + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] +# else + mov edx, [pu32] +# endif + mov eax, [u32Old] + mov ecx, [u32New] +# ifdef RT_ARCH_AMD64 + lock cmpxchg [rdx], ecx + mov rdx, [pu32Old] + mov [rdx], eax +# else + lock cmpxchg [edx], ecx + mov edx, [pu32Old] + mov [edx], eax +# endif + setz al + movzx eax, al + mov [u32Ret], eax + } + return !!u32Ret; +# endif +} +#endif + + +/** + * Atomically Compare and Exchange a signed 32-bit value, additionally + * passes back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi32 Pointer to the value to update. + * @param i32New The new value to assigned to *pi32. + * @param i32Old The old value to *pi32 compare with. + * @param pi32Old Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExS32(volatile int32_t RT_FAR *pi32, const int32_t i32New, const int32_t i32Old, int32_t RT_FAR *pi32Old) +{ + return ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32New, (uint32_t)i32Old, (uint32_t RT_FAR *)pi32Old); +} + + +/** + * Atomically Compare and exchange an unsigned 64-bit value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64New The 64-bit value to assign to *pu64. + * @param u64Old The value to compare with. + * @param pu64Old Pointer store the old value at. + * + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(bool) ASMAtomicCmpXchgExU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t RT_FAR *pu64Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgExU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t RT_FAR *pu64Old) +{ +# if RT_INLINE_ASM_USES_INTRIN + return (*pu64Old =_InterlockedCompareExchange64((__int64 RT_FAR *)pu64, u64New, u64Old)) == u64Old; + +# elif defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgq %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu64), + "=qm" (u8Ret), + "=a" (*pu64Old) + : "r" (u64New), + "a" (u64Old), + "m" (*pu64)); + return (bool)u8Ret; +# else + bool fRet; + __asm + { + mov rdx, [pu32] + mov rax, [u64Old] + mov rcx, [u64New] + lock cmpxchg [rdx], rcx + mov rdx, [pu64Old] + mov [rdx], rax + setz al + mov [fRet], al + } + return fRet; +# endif +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE + uint64_t u64Ret; +# if defined(PIC) || defined(__PIC__) + /* NB: this code uses a memory clobber description, because the clean + * solution with an output value for *pu64 makes gcc run out of registers. + * This will cause suboptimal code, and anyone with a better solution is + * welcome to improve this. */ + __asm__ __volatile__("xchgl %%ebx, %1\n\t" + "lock; cmpxchg8b %3\n\t" + "xchgl %%ebx, %1\n\t" + : "=A" (u64Ret) + : "DS" ((uint32_t)u64New), + "c" ((uint32_t)(u64New >> 32)), + "m" (*pu64), + "0" (u64Old) + : "memory" ); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %4\n\t" + : "=A" (u64Ret), + "=m" (*pu64) + : "b" ((uint32_t)u64New), + "c" ((uint32_t)(u64New >> 32)), + "m" (*pu64), + "0" (u64Old)); +# endif + *pu64Old = u64Ret; + return u64Ret == u64Old; +# else + uint32_t u32Ret; + __asm + { + mov ebx, dword ptr [u64New] + mov ecx, dword ptr [u64New + 4] + mov edi, [pu64] + mov eax, dword ptr [u64Old] + mov edx, dword ptr [u64Old + 4] + lock cmpxchg8b [edi] + mov ebx, [pu64Old] + mov [ebx], eax + setz al + movzx eax, al + add ebx, 4 + mov [ebx], edx + mov dword ptr [u32Ret], eax + } + return !!u32Ret; +# endif +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Atomically Compare and exchange a signed 64-bit value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pu64. + * @param i64Old The value to compare with. + * @param pi64Old Pointer store the old value at. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExS64(volatile int64_t RT_FAR *pi64, const int64_t i64, const int64_t i64Old, int64_t RT_FAR *pi64Old) +{ + return ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64, (uint64_t)i64Old, (uint64_t RT_FAR *)pi64Old); +} + +/** @def ASMAtomicCmpXchgExHandle + * Atomically Compare and Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param hOld The old value to *pu compare with. + * @param fRc Where to store the result. + * @param phOldVal Pointer to where to store the old value. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicCmpXchgExHandle(ph, hNew, hOld, fRc, phOldVal) \ + do { \ + AssertCompile(sizeof(*ph) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*phOldVal) == sizeof(uint32_t)); \ + (fRc) = ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld), (uint32_t RT_FAR *)(puOldVal)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicCmpXchgExHandle(ph, hNew, hOld, fRc, phOldVal) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phOldVal)) == sizeof(uint64_t)); \ + (fRc) = ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld), (uint64_t RT_FAR *)(puOldVal)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** @def ASMAtomicCmpXchgExSize + * Atomically Compare and Exchange a value which size might differ + * between platforms or compilers. Additionally passes back old value. + * + * @param pu Pointer to the value to update. + * @param uNew The new value to assigned to *pu. + * @param uOld The old value to *pu compare with. + * @param fRc Where to store the result. + * @param puOldVal Pointer to where to store the old value. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicCmpXchgExSize(pu, uNew, uOld, fRc, puOldVal) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: (fRc) = ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld), (uint32_t RT_FAR *)(uOldVal)); \ + break; \ + case 8: (fRc) = ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld), (uint64_t RT_FAR *)(uOldVal)); \ + break; \ + default: AssertMsgFailed(("ASMAtomicCmpXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + (fRc) = false; \ + (uOldVal) = 0; \ + break; \ + } \ + } while (0) + + +/** + * Atomically Compare and Exchange a pointer value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * @param ppvOld Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExPtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pvNew, const void RT_FAR *pvOld, + void RT_FAR * RT_FAR *ppvOld) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pvNew, (uint32_t)pvOld, (uint32_t RT_FAR *)ppvOld); +#elif ARCH_BITS == 64 + return ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pvNew, (uint64_t)pvOld, (uint64_t RT_FAR *)ppvOld); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Compare and Exchange a pointer value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * @param ppvOld Pointer store the old value at. + * + * @remarks This is relatively type safe on GCC platforms. + * @remarks x86: Requires a 486 or later. + */ +#ifdef __GNUC__ +# define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ + __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ + __typeof__(*(ppv)) * const ppvOldTypeChecked = (ppvOld); \ + bool fMacroRet = ASMAtomicCmpXchgExPtrVoid((void * volatile *)ppvTypeChecked, \ + (void *)pvNewTypeChecked, (void *)pvOldTypeChecked, \ + (void **)ppvOldTypeChecked); \ + fMacroRet; \ + }) +#else +# define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ + ASMAtomicCmpXchgExPtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pvNew), (void RT_FAR *)(pvOld), (void RT_FAR * RT_FAR *)(ppvOld)) +#endif + + +/** + * Virtualization unfriendly serializing instruction, always exits. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSerializeInstructionCpuId(void); +#else +DECLINLINE(void) ASMSerializeInstructionCpuId(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG xAX = 0; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__ ("cpuid" + : "=a" (xAX) + : "0" (xAX) + : "rbx", "rcx", "rdx", "memory"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ __volatile__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (xAX) + : "0" (xAX) + : "ecx", "edx", "memory"); +# else + __asm__ __volatile__ ("cpuid" + : "=a" (xAX) + : "0" (xAX) + : "ebx", "ecx", "edx", "memory"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + _ReadWriteBarrier(); + __cpuid(aInfo, 0); + +# else + __asm + { + push ebx + xor eax, eax + cpuid + pop ebx + } +# endif +} +#endif + +/** + * Virtualization friendly serializing instruction, though more expensive. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSerializeInstructionIRet(void); +#else +DECLINLINE(void) ASMSerializeInstructionIRet(void) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__ ("movq %%rsp,%%r10\n\t" + "subq $128, %%rsp\n\t" /*redzone*/ + "mov %%ss, %%eax\n\t" + "pushq %%rax\n\t" + "pushq %%r10\n\t" + "pushfq\n\t" + "movl %%cs, %%eax\n\t" + "pushq %%rax\n\t" + "leaq 1f(%%rip), %%rax\n\t" + "pushq %%rax\n\t" + "iretq\n\t" + "1:\n\t" + ::: "rax", "r10", "memory"); +# else + __asm__ __volatile__ ("pushfl\n\t" + "pushl %%cs\n\t" + "pushl $1f\n\t" + "iretl\n\t" + "1:\n\t" + ::: "memory"); +# endif + +# else + __asm + { + pushfd + push cs + push la_ret + iretd + la_ret: + } +# endif +} +#endif + +/** + * Virtualization friendlier serializing instruction, may still cause exits. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(void) ASMSerializeInstructionRdTscp(void); +#else +DECLINLINE(void) ASMSerializeInstructionRdTscp(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + /* rdtscp is not supported by ancient linux build VM of course :-( */ +# ifdef RT_ARCH_AMD64 + /*__asm__ __volatile__("rdtscp\n\t" ::: "rax", "rdx, "rcx"); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" ::: "rax", "rdx", "rcx", "memory"); +# else + /*__asm__ __volatile__("rdtscp\n\t" ::: "eax", "edx, "ecx"); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" ::: "eax", "edx", "ecx", "memory"); +# endif +# else +# if RT_INLINE_ASM_USES_INTRIN >= 15 + uint32_t uIgnore; + _ReadWriteBarrier(); + (void)__rdtscp(&uIgnore); + (void)uIgnore; +# else + __asm + { + rdtscp + } +# endif +# endif +} +#endif + + +/** + * Serialize Instruction. + */ +#if (defined(RT_ARCH_X86) && ARCH_BITS == 16) || defined(IN_GUEST) +# define ASMSerializeInstruction() ASMSerializeInstructionIRet() +#else +# define ASMSerializeInstruction() ASMSerializeInstructionCpuId() +#endif + + +/** + * Memory fence, waits for any pending writes and reads to complete. + */ +DECLINLINE(void) ASMMemoryFence(void) +{ + /** @todo use mfence? check if all cpus we care for support it. */ +#if ARCH_BITS == 16 + uint16_t volatile u16; + ASMAtomicXchgU16(&u16, 0); +#else + uint32_t volatile u32; + ASMAtomicXchgU32(&u32, 0); +#endif +} + + +/** + * Write fence, waits for any pending writes to complete. + */ +DECLINLINE(void) ASMWriteFence(void) +{ + /** @todo use sfence? check if all cpus we care for support it. */ + ASMMemoryFence(); +} + + +/** + * Read fence, waits for any pending reads to complete. + */ +DECLINLINE(void) ASMReadFence(void) +{ + /** @todo use lfence? check if all cpus we care for support it. */ + ASMMemoryFence(); +} + + +/** + * Atomically reads an unsigned 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(uint8_t) ASMAtomicReadU8(volatile uint8_t RT_FAR *pu8) +{ + ASMMemoryFence(); + return *pu8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads an unsigned 8-bit value, unordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(uint8_t) ASMAtomicUoReadU8(volatile uint8_t RT_FAR *pu8) +{ + return *pu8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a signed 8-bit value, ordered. + * + * @returns Current *pi8 value + * @param pi8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(int8_t) ASMAtomicReadS8(volatile int8_t RT_FAR *pi8) +{ + ASMMemoryFence(); + return *pi8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a signed 8-bit value, unordered. + * + * @returns Current *pi8 value + * @param pi8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(int8_t) ASMAtomicUoReadS8(volatile int8_t RT_FAR *pi8) +{ + return *pi8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads an unsigned 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(uint16_t) ASMAtomicReadU16(volatile uint16_t RT_FAR *pu16) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pu16 & 1)); + return *pu16; +} + + +/** + * Atomically reads an unsigned 16-bit value, unordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(uint16_t) ASMAtomicUoReadU16(volatile uint16_t RT_FAR *pu16) +{ + Assert(!((uintptr_t)pu16 & 1)); + return *pu16; +} + + +/** + * Atomically reads a signed 16-bit value, ordered. + * + * @returns Current *pi16 value + * @param pi16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(int16_t) ASMAtomicReadS16(volatile int16_t RT_FAR *pi16) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pi16 & 1)); + return *pi16; +} + + +/** + * Atomically reads a signed 16-bit value, unordered. + * + * @returns Current *pi16 value + * @param pi16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(int16_t) ASMAtomicUoReadS16(volatile int16_t RT_FAR *pi16) +{ + Assert(!((uintptr_t)pi16 & 1)); + return *pi16; +} + + +/** + * Atomically reads an unsigned 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(uint32_t) ASMAtomicReadU32(volatile uint32_t RT_FAR *pu32) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pu32; +} + + +/** + * Atomically reads an unsigned 32-bit value, unordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(uint32_t) ASMAtomicUoReadU32(volatile uint32_t RT_FAR *pu32) +{ + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pu32; +} + + +/** + * Atomically reads a signed 32-bit value, ordered. + * + * @returns Current *pi32 value + * @param pi32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(int32_t) ASMAtomicReadS32(volatile int32_t RT_FAR *pi32) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pi32; +} + + +/** + * Atomically reads a signed 32-bit value, unordered. + * + * @returns Current *pi32 value + * @param pi32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(int32_t) ASMAtomicUoReadS32(volatile int32_t RT_FAR *pi32) +{ + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pi32; +} + + +/** + * Atomically reads an unsigned 64-bit value, ordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !defined(RT_ARCH_AMD64)) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(uint64_t) ASMAtomicReadU64(volatile uint64_t RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicReadU64(volatile uint64_t RT_FAR *pu64) +{ + uint64_t u64; +# ifdef RT_ARCH_AMD64 + Assert(!((uintptr_t)pu64 & 7)); +/*# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__( "mfence\n\t" + "movq %1, %0\n\t" + : "=r" (u64) + : "m" (*pu64)); +# else + __asm + { + mfence + mov rdx, [pu64] + mov rax, [rdx] + mov [u64], rax + } +# endif*/ + ASMMemoryFence(); + u64 = *pu64; +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = 0; + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("xchgl %%ebx, %3\n\t" + "lock; cmpxchg8b (%5)\n\t" + "movl %3, %%ebx\n\t" + : "=A" (u64), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64) +# else + "=m" (*pu64) +# endif + : "0" (0ULL), + "m" (u32EBX), + "c" (0), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %1\n\t" + : "=A" (u64), + "+m" (*pu64) + : "0" (0ULL), + "b" (0), + "c" (0)); +# endif +# else + Assert(!((uintptr_t)pu64 & 7)); + __asm + { + xor eax, eax + xor edx, edx + mov edi, pu64 + xor ecx, ecx + xor ebx, ebx + lock cmpxchg8b [edi] + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically reads an unsigned 64-bit value, unordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +#if !defined(RT_ARCH_AMD64) \ + && ( (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC) +DECLASM(uint64_t) ASMAtomicUoReadU64(volatile uint64_t RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicUoReadU64(volatile uint64_t RT_FAR *pu64) +{ + uint64_t u64; +# ifdef RT_ARCH_AMD64 + Assert(!((uintptr_t)pu64 & 7)); +/*# if RT_INLINE_ASM_GNU_STYLE + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("movq %1, %0\n\t" + : "=r" (u64) + : "m" (*pu64)); +# else + __asm + { + mov rdx, [pu64] + mov rax, [rdx] + mov [u64], rax + } +# endif */ + u64 = *pu64; +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = 0; + uint32_t u32Spill; + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("xor %%eax,%%eax\n\t" + "xor %%ecx,%%ecx\n\t" + "xor %%edx,%%edx\n\t" + "xchgl %%ebx, %3\n\t" + "lock; cmpxchg8b (%4)\n\t" + "movl %3, %%ebx\n\t" + : "=A" (u64), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64), +# else + "=m" (*pu64), +# endif + "=c" (u32Spill) + : "m" (u32EBX), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %1\n\t" + : "=A" (u64), + "+m" (*pu64) + : "0" (0ULL), + "b" (0), + "c" (0)); +# endif +# else + Assert(!((uintptr_t)pu64 & 7)); + __asm + { + xor eax, eax + xor edx, edx + mov edi, pu64 + xor ecx, ecx + xor ebx, ebx + lock cmpxchg8b [edi] + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically reads a signed 64-bit value, ordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicReadS64(volatile int64_t RT_FAR *pi64) +{ + return (int64_t)ASMAtomicReadU64((volatile uint64_t RT_FAR *)pi64); +} + + +/** + * Atomically reads a signed 64-bit value, unordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This will fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicUoReadS64(volatile int64_t RT_FAR *pi64) +{ + return (int64_t)ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)pi64); +} + + +/** + * Atomically reads a size_t value, ordered. + * + * @returns Current *pcb value + * @param pcb Pointer to the size_t variable to read. + */ +DECLINLINE(size_t) ASMAtomicReadZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicReadU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicReadU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicReadU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically reads a size_t value, unordered. + * + * @returns Current *pcb value + * @param pcb Pointer to the size_t variable to read. + */ +DECLINLINE(size_t) ASMAtomicUoReadZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 || ARCH_BITS == 16 + return ASMAtomicUoReadU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicUoReadU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicUoReadU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically reads a pointer value, ordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * + * @remarks Please use ASMAtomicReadPtrT, it provides better type safety and + * requires less typing (no casts). + */ +DECLINLINE(void RT_FAR *) ASMAtomicReadPtr(void RT_FAR * volatile RT_FAR *ppv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv); +#else +# error "ARCH_BITS is bogus" +#endif +} + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicReadPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicReadPtrT(ppv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile *ppvTypeChecked = (ppv); \ + Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicReadPtr((void * volatile *)ppvTypeChecked); \ + pvTypeChecked; \ + }) +#else +# define ASMAtomicReadPtrT(ppv, Type) \ + (Type)ASMAtomicReadPtr((void RT_FAR * volatile RT_FAR *)(ppv)) +#endif + + +/** + * Atomically reads a pointer value, unordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * + * @remarks Please use ASMAtomicUoReadPtrT, it provides better type safety and + * requires less typing (no casts). + */ +DECLINLINE(void RT_FAR *) ASMAtomicUoReadPtr(void RT_FAR * volatile RT_FAR *ppv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicUoReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicUoReadPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicUoReadPtrT(ppv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicUoReadPtr((void * volatile *)ppvTypeChecked); \ + pvTypeChecked; \ + }) +#else +# define ASMAtomicUoReadPtrT(ppv, Type) \ + (Type)ASMAtomicUoReadPtr((void RT_FAR * volatile RT_FAR *)(ppv)) +#endif + + +/** + * Atomically reads a boolean value, ordered. + * + * @returns Current *pf value + * @param pf Pointer to the boolean variable to read. + */ +DECLINLINE(bool) ASMAtomicReadBool(volatile bool RT_FAR *pf) +{ + ASMMemoryFence(); + return *pf; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a boolean value, unordered. + * + * @returns Current *pf value + * @param pf Pointer to the boolean variable to read. + */ +DECLINLINE(bool) ASMAtomicUoReadBool(volatile bool RT_FAR *pf) +{ + return *pf; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically read a typical IPRT handle value, ordered. + * + * @param ph Pointer to the handle variable to read. + * @param phRes Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicReadU32((uint32_t volatile RT_FAR *)(ph)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicReadU64((uint64_t volatile RT_FAR *)(ph)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically read a typical IPRT handle value, unordered. + * + * @param ph Pointer to the handle variable to read. + * @param phRes Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicUoReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicUoReadU32((uint32_t volatile RT_FAR *)(ph)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicUoReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicUoReadU64((uint64_t volatile RT_FAR *)(ph)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically read a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to read. + * @param puRes Where to store the result. + */ +#define ASMAtomicReadSize(pu, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicReadU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicReadU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + +/** + * Atomically read a value which size might differ + * between platforms or compilers, unordered. + * + * @param pu Pointer to the variable to read. + * @param puRes Where to store the result. + */ +#define ASMAtomicUoReadSize(pu, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicUoReadU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicUoReadU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicUoReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + +/** + * Atomically writes an unsigned 8-bit value, ordered. + * + * @param pu8 Pointer to the 8-bit variable. + * @param u8 The 8-bit value to assign to *pu8. + */ +DECLINLINE(void) ASMAtomicWriteU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ + ASMAtomicXchgU8(pu8, u8); +} + + +/** + * Atomically writes an unsigned 8-bit value, unordered. + * + * @param pu8 Pointer to the 8-bit variable. + * @param u8 The 8-bit value to assign to *pu8. + */ +DECLINLINE(void) ASMAtomicUoWriteU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ + *pu8 = u8; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes a signed 8-bit value, ordered. + * + * @param pi8 Pointer to the 8-bit variable to read. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(void) ASMAtomicWriteS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + ASMAtomicXchgS8(pi8, i8); +} + + +/** + * Atomically writes a signed 8-bit value, unordered. + * + * @param pi8 Pointer to the 8-bit variable to write. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(void) ASMAtomicUoWriteS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + *pi8 = i8; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes an unsigned 16-bit value, ordered. + * + * @param pu16 Pointer to the 16-bit variable to write. + * @param u16 The 16-bit value to assign to *pu16. + */ +DECLINLINE(void) ASMAtomicWriteU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ + ASMAtomicXchgU16(pu16, u16); +} + + +/** + * Atomically writes an unsigned 16-bit value, unordered. + * + * @param pu16 Pointer to the 16-bit variable to write. + * @param u16 The 16-bit value to assign to *pu16. + */ +DECLINLINE(void) ASMAtomicUoWriteU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ + Assert(!((uintptr_t)pu16 & 1)); + *pu16 = u16; +} + + +/** + * Atomically writes a signed 16-bit value, ordered. + * + * @param pi16 Pointer to the 16-bit variable to write. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(void) ASMAtomicWriteS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + ASMAtomicXchgS16(pi16, i16); +} + + +/** + * Atomically writes a signed 16-bit value, unordered. + * + * @param pi16 Pointer to the 16-bit variable to write. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(void) ASMAtomicUoWriteS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + Assert(!((uintptr_t)pi16 & 1)); + *pi16 = i16; +} + + +/** + * Atomically writes an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the 32-bit variable to write. + * @param u32 The 32-bit value to assign to *pu32. + */ +DECLINLINE(void) ASMAtomicWriteU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ + ASMAtomicXchgU32(pu32, u32); +} + + +/** + * Atomically writes an unsigned 32-bit value, unordered. + * + * @param pu32 Pointer to the 32-bit variable to write. + * @param u32 The 32-bit value to assign to *pu32. + */ +DECLINLINE(void) ASMAtomicUoWriteU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS >= 32 + *pu32 = u32; +#else + ASMAtomicXchgU32(pu32, u32); +#endif +} + + +/** + * Atomically writes a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the 32-bit variable to write. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(void) ASMAtomicWriteS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + ASMAtomicXchgS32(pi32, i32); +} + + +/** + * Atomically writes a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the 32-bit variable to write. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(void) ASMAtomicUoWriteS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS >= 32 + *pi32 = i32; +#else + ASMAtomicXchgS32(pi32, i32); +#endif +} + + +/** + * Atomically writes an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the 64-bit variable to write. + * @param u64 The 64-bit value to assign to *pu64. + */ +DECLINLINE(void) ASMAtomicWriteU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ + ASMAtomicXchgU64(pu64, u64); +} + + +/** + * Atomically writes an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the 64-bit variable to write. + * @param u64 The 64-bit value to assign to *pu64. + */ +DECLINLINE(void) ASMAtomicUoWriteU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ + Assert(!((uintptr_t)pu64 & 7)); +#if ARCH_BITS == 64 + *pu64 = u64; +#else + ASMAtomicXchgU64(pu64, u64); +#endif +} + + +/** + * Atomically writes a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the 64-bit variable to write. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(void) ASMAtomicWriteS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + ASMAtomicXchgS64(pi64, i64); +} + + +/** + * Atomically writes a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the 64-bit variable to write. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(void) ASMAtomicUoWriteS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + Assert(!((uintptr_t)pi64 & 7)); +#if ARCH_BITS == 64 + *pi64 = i64; +#else + ASMAtomicXchgS64(pi64, i64); +#endif +} + + +/** + * Atomically writes a size_t value, ordered. + * + * @returns nothing. + * @param pcb Pointer to the size_t variable to write. + * @param cb The value to assign to *pcb. + */ +DECLINLINE(void) ASMAtomicWriteZ(volatile size_t RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + ASMAtomicWriteU64((uint64_t volatile *)pcb, cb); +#elif ARCH_BITS == 32 + ASMAtomicWriteU32((uint32_t volatile *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + ASMAtomicWriteU16((uint16_t volatile *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically writes a boolean value, unordered. + * + * @param pf Pointer to the boolean variable to write. + * @param f The boolean value to assign to *pf. + */ +DECLINLINE(void) ASMAtomicWriteBool(volatile bool RT_FAR *pf, bool f) +{ + ASMAtomicWriteU8((uint8_t volatile RT_FAR *)pf, f); +} + + +/** + * Atomically writes a boolean value, unordered. + * + * @param pf Pointer to the boolean variable to write. + * @param f The boolean value to assign to *pf. + */ +DECLINLINE(void) ASMAtomicUoWriteBool(volatile bool RT_FAR *pf, bool f) +{ + *pf = f; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes a pointer value, ordered. + * + * @param ppv Pointer to the pointer variable to write. + * @param pv The pointer value to assign to *ppv. + */ +DECLINLINE(void) ASMAtomicWritePtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void *pv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + ASMAtomicWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pv); +#elif ARCH_BITS == 64 + ASMAtomicWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically writes a pointer value, ordered. + * + * @param ppv Pointer to the pointer variable to write. + * @param pv The pointer value to assign to *ppv. If NULL use + * ASMAtomicWriteNullPtr or you'll land in trouble. + * + * @remarks This is relatively type safe on GCC platforms when @a pv isn't + * NULL. + */ +#ifdef __GNUC__ +# define ASMAtomicWritePtr(ppv, pv) \ + do \ + { \ + __typeof__(*(ppv)) volatile RT_FAR * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvTypeChecked = (pv); \ + \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppvTypeChecked), (void RT_FAR *)(pvTypeChecked)); \ + } while (0) +#else +# define ASMAtomicWritePtr(ppv, pv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pv)); \ + } while (0) +#endif + + +/** + * Atomically sets a pointer to NULL, ordered. + * + * @param ppv Pointer to the pointer variable that should be set to NULL. + * + * @remarks This is relatively type safe on GCC platforms. + */ +#ifdef __GNUC__ +# define ASMAtomicWriteNullPtr(ppv) \ + do \ + { \ + __typeof__(*(ppv)) * const ppvTypeChecked = (ppv); \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppvTypeChecked), NULL); \ + } while (0) +#else +# define ASMAtomicWriteNullPtr(ppv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), NULL); \ + } while (0) +#endif + + +/** + * Atomically writes a pointer value, unordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable. + * @param pv The pointer value to assign to *ppv. If NULL use + * ASMAtomicUoWriteNullPtr or you'll land in trouble. + * + * @remarks This is relatively type safe on GCC platforms when @a pv isn't + * NULL. + */ +#ifdef __GNUC__ +# define ASMAtomicUoWritePtr(ppv, pv) \ + do \ + { \ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvTypeChecked = (pv); \ + \ + AssertCompile(sizeof(*ppv) == sizeof(void *)); \ + AssertCompile(sizeof(pv) == sizeof(void *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + *(ppvTypeChecked) = pvTypeChecked; \ + } while (0) +#else +# define ASMAtomicUoWritePtr(ppv, pv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppv) = pv; \ + } while (0) +#endif + + +/** + * Atomically sets a pointer to NULL, unordered. + * + * @param ppv Pointer to the pointer variable that should be set to NULL. + * + * @remarks This is relatively type safe on GCC platforms. + */ +#ifdef __GNUC__ +# define ASMAtomicUoWriteNullPtr(ppv) \ + do \ + { \ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + AssertCompile(sizeof(*ppv) == sizeof(void *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppvTypeChecked) = NULL; \ + } while (0) +#else +# define ASMAtomicUoWriteNullPtr(ppv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppv) = NULL; \ + } while (0) +#endif + + +/** + * Atomically write a typical IPRT handle value, ordered. + * + * @param ph Pointer to the variable to update. + * @param hNew The value to assign to *ph. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + ASMAtomicWriteU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + ASMAtomicWriteU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically write a typical IPRT handle value, unordered. + * + * @param ph Pointer to the variable to update. + * @param hNew The value to assign to *ph. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicUoWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + ASMAtomicUoWriteU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)hNew); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicUoWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + ASMAtomicUoWriteU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)hNew); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically write a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + */ +#define ASMAtomicWriteSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicWriteU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t )(uNew)); break; \ + case 2: ASMAtomicWriteU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicWriteSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + +/** + * Atomically write a value which size might differ + * between platforms or compilers, unordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + */ +#define ASMAtomicUoWriteSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicUoWriteU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t )(uNew)); break; \ + case 2: ASMAtomicUoWriteU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicUoWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicUoWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicWriteSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically exchanges and adds to a 16-bit value, ordered. + * + * @returns The old value. + * @param pu16 Pointer to the value. + * @param u16 Number to add. + * + * @remarks Currently not implemented, just to make 16-bit code happy. + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint16_t) ASMAtomicAddU16(uint16_t volatile RT_FAR *pu16, uint32_t u16); + + +/** + * Atomically exchanges and adds to a 32-bit value, ordered. + * + * @returns The old value. + * @param pu32 Pointer to the value. + * @param u32 Number to add. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicAddU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMAtomicAddU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedExchangeAdd((long RT_FAR *)pu32, u32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (u32), + "m" (*pu32) + : "memory"); + return u32; +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov [u32], eax + } + return u32; +# endif +} +#endif + + +/** + * Atomically exchanges and adds to a signed 32-bit value, ordered. + * + * @returns The old value. + * @param pi32 Pointer to the value. + * @param i32 Number to add. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicAddS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicAddU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically exchanges and adds to a 64-bit value, ordered. + * + * @returns The old value. + * @param pu64 Pointer to the value. + * @param u64 Number to add. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicAddU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(uint64_t) ASMAtomicAddU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + u64 = _InterlockedExchangeAdd64((__int64 RT_FAR *)pu64, u64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; xaddq %0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (u64), + "m" (*pu64) + : "memory"); + return u64; +# else + uint64_t u64Old; + for (;;) + { + uint64_t u64New; + u64Old = ASMAtomicUoReadU64(pu64); + u64New = u64Old + u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } + return u64Old; +# endif +} +#endif + + +/** + * Atomically exchanges and adds to a signed 64-bit value, ordered. + * + * @returns The old value. + * @param pi64 Pointer to the value. + * @param i64 Number to add. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicAddS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicAddU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically exchanges and adds to a size_t value, ordered. + * + * @returns The old value. + * @param pcb Pointer to the size_t value. + * @param cb Number to add. + */ +DECLINLINE(size_t) ASMAtomicAddZ(size_t volatile RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + AssertCompileSize(size_t, 8); + return ASMAtomicAddU64((uint64_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 32 + AssertCompileSize(size_t, 4); + return ASMAtomicAddU32((uint32_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicAddU16((uint16_t volatile RT_FAR *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically exchanges and adds a value which size might differ between + * platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to add to *pu. + * @param puOld Where to store the old value. + */ +#define ASMAtomicAddSize(pu, uNew, puOld) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: *(uint32_t *)(puOld) = ASMAtomicAddU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t *)(puOld) = ASMAtomicAddU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicAddSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically exchanges and subtracts to an unsigned 16-bit value, ordered. + * + * @returns The old value. + * @param pu16 Pointer to the value. + * @param u16 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(uint16_t) ASMAtomicSubU16(uint16_t volatile RT_FAR *pu16, uint32_t u16) +{ + return ASMAtomicAddU16(pu16, (uint16_t)-(int16_t)u16); +} + + +/** + * Atomically exchanges and subtracts to a signed 16-bit value, ordered. + * + * @returns The old value. + * @param pi16 Pointer to the value. + * @param i16 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int16_t) ASMAtomicSubS16(int16_t volatile RT_FAR *pi16, int16_t i16) +{ + return (int16_t)ASMAtomicAddU16((uint16_t volatile RT_FAR *)pi16, (uint16_t)-i16); +} + + +/** + * Atomically exchanges and subtracts to an unsigned 32-bit value, ordered. + * + * @returns The old value. + * @param pu32 Pointer to the value. + * @param u32 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(uint32_t) ASMAtomicSubU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ + return ASMAtomicAddU32(pu32, (uint32_t)-(int32_t)u32); +} + + +/** + * Atomically exchanges and subtracts to a signed 32-bit value, ordered. + * + * @returns The old value. + * @param pi32 Pointer to the value. + * @param i32 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicSubS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicAddU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)-i32); +} + + +/** + * Atomically exchanges and subtracts to an unsigned 64-bit value, ordered. + * + * @returns The old value. + * @param pu64 Pointer to the value. + * @param u64 Number to subtract. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(uint64_t) ASMAtomicSubU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ + return ASMAtomicAddU64(pu64, (uint64_t)-(int64_t)u64); +} + + +/** + * Atomically exchanges and subtracts to a signed 64-bit value, ordered. + * + * @returns The old value. + * @param pi64 Pointer to the value. + * @param i64 Number to subtract. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicSubS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicAddU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)-i64); +} + + +/** + * Atomically exchanges and subtracts to a size_t value, ordered. + * + * @returns The old value. + * @param pcb Pointer to the size_t value. + * @param cb Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(size_t) ASMAtomicSubZ(size_t volatile RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + return ASMAtomicSubU64((uint64_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 32 + return ASMAtomicSubU32((uint32_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicSubU16((uint16_t volatile RT_FAR *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically exchanges and subtracts a value which size might differ between + * platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to subtract to *pu. + * @param puOld Where to store the old value. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicSubSize(pu, uNew, puOld) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: *(uint32_t RT_FAR *)(puOld) = ASMAtomicSubU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t RT_FAR *)(puOld) = ASMAtomicSubU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicSubSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically increment a 16-bit value, ordered. + * + * @returns The new value. + * @param pu16 Pointer to the value to increment. + * @remarks Not implemented. Just to make 16-bit code happy. + * + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint16_t) ASMAtomicIncU16(uint16_t volatile RT_FAR *pu16); + + +/** + * Atomically increment a 32-bit value, ordered. + * + * @returns The new value. + * @param pu32 Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicIncU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicIncU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedIncrement((long RT_FAR *)pu32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (1), + "m" (*pu32) + : "memory"); + return u32+1; +# else + __asm + { + mov eax, 1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov u32, eax + } + return u32+1; +# endif +} +#endif + + +/** + * Atomically increment a signed 32-bit value, ordered. + * + * @returns The new value. + * @param pi32 Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicIncS32(int32_t volatile RT_FAR *pi32) +{ + return (int32_t)ASMAtomicIncU32((uint32_t volatile RT_FAR *)pi32); +} + + +/** + * Atomically increment a 64-bit value, ordered. + * + * @returns The new value. + * @param pu64 Pointer to the value to increment. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicIncU64(uint64_t volatile RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicIncU64(uint64_t volatile RT_FAR *pu64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + uint64_t u64; + u64 = _InterlockedIncrement64((__int64 RT_FAR *)pu64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + uint64_t u64; + __asm__ __volatile__("lock; xaddq %0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (1), + "m" (*pu64) + : "memory"); + return u64 + 1; +# else + return ASMAtomicAddU64(pu64, 1) + 1; +# endif +} +#endif + + +/** + * Atomically increment a signed 64-bit value, ordered. + * + * @returns The new value. + * @param pi64 Pointer to the value to increment. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicIncS64(int64_t volatile RT_FAR *pi64) +{ + return (int64_t)ASMAtomicIncU64((uint64_t volatile RT_FAR *)pi64); +} + + +/** + * Atomically increment a size_t value, ordered. + * + * @returns The new value. + * @param pcb Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int64_t) ASMAtomicIncZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicIncU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicIncU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + return ASMAtomicIncU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + + +/** + * Atomically decrement an unsigned 32-bit value, ordered. + * + * @returns The new value. + * @param pu16 Pointer to the value to decrement. + * @remarks Not implemented. Just to make 16-bit code happy. + * + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint32_t) ASMAtomicDecU16(uint16_t volatile RT_FAR *pu16); + + +/** + * Atomically decrement an unsigned 32-bit value, ordered. + * + * @returns The new value. + * @param pu32 Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicDecU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicDecU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedDecrement((long RT_FAR *)pu32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (-1), + "m" (*pu32) + : "memory"); + return u32-1; +# else + __asm + { + mov eax, -1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov u32, eax + } + return u32-1; +# endif +} +#endif + + +/** + * Atomically decrement a signed 32-bit value, ordered. + * + * @returns The new value. + * @param pi32 Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicDecS32(int32_t volatile RT_FAR *pi32) +{ + return (int32_t)ASMAtomicDecU32((uint32_t volatile RT_FAR *)pi32); +} + + +/** + * Atomically decrement an unsigned 64-bit value, ordered. + * + * @returns The new value. + * @param pu64 Pointer to the value to decrement. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicDecU64(uint64_t volatile RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicDecU64(uint64_t volatile RT_FAR *pu64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + uint64_t u64 = _InterlockedDecrement64((__int64 volatile RT_FAR *)pu64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + uint64_t u64; + __asm__ __volatile__("lock; xaddq %q0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (~(uint64_t)0), + "m" (*pu64) + : "memory"); + return u64-1; +# else + return ASMAtomicAddU64(pu64, UINT64_MAX) - 1; +# endif +} +#endif + + +/** + * Atomically decrement a signed 64-bit value, ordered. + * + * @returns The new value. + * @param pi64 Pointer to the value to decrement. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicDecS64(int64_t volatile RT_FAR *pi64) +{ + return (int64_t)ASMAtomicDecU64((uint64_t volatile RT_FAR *)pi64); +} + + +/** + * Atomically decrement a size_t value, ordered. + * + * @returns The new value. + * @param pcb Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int64_t) ASMAtomicDecZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicDecU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicDecU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + return ASMAtomicDecU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically Or an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the pointer variable to OR u32 with. + * @param u32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + _InterlockedOr((long volatile RT_FAR *)pu32, (long)u32); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; orl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock or [rdx], eax +# else + mov edx, [pu32] + lock or [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically Or a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the pointer variable to OR u32 with. + * @param i32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicOrS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicOrU32((uint32_t volatile RT_FAR *)pi32, i32); +} + + +/** + * Atomically Or an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the pointer variable to OR u64 with. + * @param u64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + _InterlockedOr64((__int64 volatile RT_FAR *)pu64, (__int64)u64); + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; orq %1, %q0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old | u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically Or a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the pointer variable to OR u64 with. + * @param i64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicOrS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicOrU64((uint64_t volatile RT_FAR *)pi64, i64); +} + + +/** + * Atomically And an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the pointer variable to AND u32 with. + * @param u32 The value to AND *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + _InterlockedAnd((long volatile RT_FAR *)pu32, u32); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; andl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock and [rdx], eax +# else + mov edx, [pu32] + lock and [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically And a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the pointer variable to AND i32 with. + * @param i32 The value to AND *pi32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicAndS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicAndU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically And an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the pointer variable to AND u64 with. + * @param u64 The value to AND *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + _InterlockedAnd64((__int64 volatile RT_FAR *)pu64, u64); + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; andq %1, %0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old & u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically And a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the pointer variable to AND i64 with. + * @param i64 The value to AND *pi64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicAndS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicAndU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically OR an unsigned 32-bit value, unordered but interrupt safe. + * + * @param pu32 Pointer to the pointer variable to OR u32 with. + * @param u32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicUoOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("orl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + or [rdx], eax +# else + mov edx, [pu32] + or [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically OR a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the pointer variable to OR u32 with. + * @param i32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicUoOrS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicUoOrU32((uint32_t volatile RT_FAR *)pi32, i32); +} + + +/** + * Atomically OR an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the pointer variable to OR u64 with. + * @param u64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicUoOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("orq %1, %q0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old | u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically Or a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the pointer variable to OR u64 with. + * @param i64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicUoOrS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicUoOrU64((uint64_t volatile RT_FAR *)pi64, i64); +} + + +/** + * Atomically And an unsigned 32-bit value, unordered. + * + * @param pu32 Pointer to the pointer variable to AND u32 with. + * @param u32 The value to AND *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicUoAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("andl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + and [rdx], eax +# else + mov edx, [pu32] + and [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically And a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the pointer variable to AND i32 with. + * @param i32 The value to AND *pi32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicUoAndS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicUoAndU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically And an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the pointer variable to AND u64 with. + * @param u64 The value to AND *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicUoAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("andq %1, %0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old & u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically And a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the pointer variable to AND i64 with. + * @param i64 The value to AND *pi64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicUoAndS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicUoAndU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically increment an unsigned 32-bit value, unordered. + * + * @returns the new value. + * @param pu32 Pointer to the variable to increment. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMAtomicUoIncU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicUoIncU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (1), + "m" (*pu32) + : "memory"); + return u32 + 1; +# else + __asm + { + mov eax, 1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + xadd [rdx], eax +# else + mov edx, [pu32] + xadd [edx], eax +# endif + mov u32, eax + } + return u32 + 1; +# endif +} +#endif + + +/** + * Atomically decrement an unsigned 32-bit value, unordered. + * + * @returns the new value. + * @param pu32 Pointer to the variable to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMAtomicUoDecU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicUoDecU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (-1), + "m" (*pu32) + : "memory"); + return u32 - 1; +# else + __asm + { + mov eax, -1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + xadd [rdx], eax +# else + mov edx, [pu32] + xadd [edx], eax +# endif + mov u32, eax + } + return u32 - 1; +# endif +} +#endif + + +/** @def RT_ASM_PAGE_SIZE + * We try avoid dragging in iprt/param.h here. + * @internal + */ +#if defined(RT_ARCH_SPARC64) +# define RT_ASM_PAGE_SIZE 0x2000 +# if defined(PAGE_SIZE) && !defined(NT_INCLUDED) +# if PAGE_SIZE != 0x2000 +# error "PAGE_SIZE is not 0x2000!" +# endif +# endif +#else +# define RT_ASM_PAGE_SIZE 0x1000 +# if defined(PAGE_SIZE) && !defined(NT_INCLUDED) +# if PAGE_SIZE != 0x1000 +# error "PAGE_SIZE is not 0x1000!" +# endif +# endif +#endif + +/** + * Zeros a 4K memory page. + * + * @param pv Pointer to the memory block. This must be page aligned. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemZeroPage(volatile void RT_FAR *pv); +# else +DECLINLINE(void) ASMMemZeroPage(volatile void RT_FAR *pv) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + __stosq((unsigned __int64 *)pv, 0, RT_ASM_PAGE_SIZE / 8); +# else + __stosd((unsigned long *)pv, 0, RT_ASM_PAGE_SIZE / 4); +# endif + +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("rep stosq" + : "=D" (pv), + "=c" (uDummy) + : "0" (pv), + "c" (RT_ASM_PAGE_SIZE >> 3), + "a" (0) + : "memory"); +# else + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (uDummy) + : "0" (pv), + "c" (RT_ASM_PAGE_SIZE >> 2), + "a" (0) + : "memory"); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + xor rax, rax + mov ecx, 0200h + mov rdi, [pv] + rep stosq +# else + xor eax, eax + mov ecx, 0400h + mov edi, [pv] + rep stosd +# endif + } +# endif +} +# endif + + +/** + * Zeros a memory block with a 32-bit aligned size. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb); +#else +DECLINLINE(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + if (!(cb & 7)) + __stosq((unsigned __int64 RT_FAR *)pv, 0, cb / 8); + else +# endif + __stosd((unsigned long RT_FAR *)pv, 0, cb / 4); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (cb) + : "0" (pv), + "1" (cb >> 2), + "a" (0) + : "memory"); +# else + __asm + { + xor eax, eax +# ifdef RT_ARCH_AMD64 + mov rcx, [cb] + shr rcx, 2 + mov rdi, [pv] +# else + mov ecx, [cb] + shr ecx, 2 + mov edi, [pv] +# endif + rep stosd + } +# endif +} +#endif + + +/** + * Fills a memory block with a 32-bit aligned size. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + * @param u32 The value to fill with. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32); +#else +DECLINLINE(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + if (!(cb & 7)) + __stosq((unsigned __int64 RT_FAR *)pv, RT_MAKE_U64(u32, u32), cb / 8); + else +# endif + __stosd((unsigned long RT_FAR *)pv, u32, cb / 4); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (cb) + : "0" (pv), + "1" (cb >> 2), + "a" (u32) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rcx, [cb] + shr rcx, 2 + mov rdi, [pv] +# else + mov ecx, [cb] + shr ecx, 2 + mov edi, [pv] +# endif + mov eax, [u32] + rep stosd + } +# endif +} +#endif + + +/** + * Checks if a memory block is all zeros. + * + * @returns Pointer to the first non-zero byte. + * @returns NULL if all zero. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * + * @todo Fix name, it is a predicate function but it's not returning boolean! + */ +#if !defined(RDESKTOP) && (!defined(RT_OS_LINUX) || !defined(__KERNEL__)) +DECLASM(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb); +#else +DECLINLINE(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) +{ + uint8_t const *pb = (uint8_t const RT_FAR *)pv; + for (; cb; cb--, pb++) + if (RT_LIKELY(*pb == 0)) + { /* likely */ } + else + return (void RT_FAR *)pb; + return NULL; +} +#endif + + +/** + * Checks if a memory block is all zeros. + * + * @returns true if zero, false if not. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * + * @sa ASMMemFirstNonZero + */ +DECLINLINE(bool) ASMMemIsZero(void const RT_FAR *pv, size_t cb) +{ + return ASMMemFirstNonZero(pv, cb) == NULL; +} + + +/** + * Checks if a memory page is all zeros. + * + * @returns true / false. + * + * @param pvPage Pointer to the page. Must be aligned on 16 byte + * boundary + */ +DECLINLINE(bool) ASMMemIsZeroPage(void const RT_FAR *pvPage) +{ +# if 0 /*RT_INLINE_ASM_GNU_STYLE - this is actually slower... */ + union { RTCCUINTREG r; bool f; } uAX; + RTCCUINTREG xCX, xDI; + Assert(!((uintptr_t)pvPage & 15)); + __asm__ __volatile__("repe; " +# ifdef RT_ARCH_AMD64 + "scasq\n\t" +# else + "scasl\n\t" +# endif + "setnc %%al\n\t" + : "=&c" (xCX), + "=&D" (xDI), + "=&a" (uAX.r) + : "mr" (pvPage), +# ifdef RT_ARCH_AMD64 + "0" (RT_ASM_PAGE_SIZE/8), +# else + "0" (RT_ASM_PAGE_SIZE/4), +# endif + "1" (pvPage), + "2" (0)); + return uAX.f; +# else + uintptr_t const RT_FAR *puPtr = (uintptr_t const RT_FAR *)pvPage; + size_t cLeft = RT_ASM_PAGE_SIZE / sizeof(uintptr_t) / 8; + Assert(!((uintptr_t)pvPage & 15)); + for (;;) + { + if (puPtr[0]) return false; + if (puPtr[4]) return false; + + if (puPtr[2]) return false; + if (puPtr[6]) return false; + + if (puPtr[1]) return false; + if (puPtr[5]) return false; + + if (puPtr[3]) return false; + if (puPtr[7]) return false; + + if (!--cLeft) + return true; + puPtr += 8; + } +# endif +} + + +/** + * Checks if a memory block is filled with the specified byte, returning the + * first mismatch. + * + * This is sort of an inverted memchr. + * + * @returns Pointer to the byte which doesn't equal u8. + * @returns NULL if all equal to u8. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * @param u8 The value it's supposed to be filled with. + * + * @remarks No alignment requirements. + */ +#if (!defined(RT_OS_LINUX) || !defined(__KERNEL__)) \ + && (!defined(RT_OS_FREEBSD) || !defined(_KERNEL)) +DECLASM(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8); +#else +DECLINLINE(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) +{ + uint8_t const *pb = (uint8_t const RT_FAR *)pv; + for (; cb; cb--, pb++) + if (RT_LIKELY(*pb == u8)) + { /* likely */ } + else + return (void *)pb; + return NULL; +} +#endif + + +/** + * Checks if a memory block is filled with the specified byte. + * + * @returns true if all matching, false if not. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * @param u8 The value it's supposed to be filled with. + * + * @remarks No alignment requirements. + */ +DECLINLINE(bool) ASMMemIsAllU8(void const RT_FAR *pv, size_t cb, uint8_t u8) +{ + return ASMMemFirstMismatchingU8(pv, cb, u8) == NULL; +} + + +/** + * Checks if a memory block is filled with the specified 32-bit value. + * + * This is a sort of inverted memchr. + * + * @returns Pointer to the first value which doesn't equal u32. + * @returns NULL if all equal to u32. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + * @param u32 The value it's supposed to be filled with. + */ +DECLINLINE(uint32_t RT_FAR *) ASMMemFirstMismatchingU32(void const RT_FAR *pv, size_t cb, uint32_t u32) +{ +/** @todo rewrite this in inline assembly? */ + uint32_t const RT_FAR *pu32 = (uint32_t const RT_FAR *)pv; + for (; cb; cb -= 4, pu32++) + if (RT_LIKELY(*pu32 == u32)) + { /* likely */ } + else + return (uint32_t RT_FAR *)pu32; + return NULL; +} + + +/** + * Probes a byte pointer for read access. + * + * While the function will not fault if the byte is not read accessible, + * the idea is to do this in a safe place like before acquiring locks + * and such like. + * + * Also, this functions guarantees that an eager compiler is not going + * to optimize the probing away. + * + * @param pvByte Pointer to the byte. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint8_t) ASMProbeReadByte(const void RT_FAR *pvByte); +#else +DECLINLINE(uint8_t) ASMProbeReadByte(const void RT_FAR *pvByte) +{ + /** @todo verify that the compiler actually doesn't optimize this away. (intel & gcc) */ + uint8_t u8; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movb (%1), %0\n\t" + : "=r" (u8) + : "r" (pvByte)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvByte] + mov al, [rax] +# else + mov eax, [pvByte] + mov al, [eax] +# endif + mov [u8], al + } +# endif + return u8; +} +#endif + +/** + * Probes a buffer for read access page by page. + * + * While the function will fault if the buffer is not fully read + * accessible, the idea is to do this in a safe place like before + * acquiring locks and such like. + * + * Also, this functions guarantees that an eager compiler is not going + * to optimize the probing away. + * + * @param pvBuf Pointer to the buffer. + * @param cbBuf The size of the buffer in bytes. Must be >= 1. + */ +DECLINLINE(void) ASMProbeReadBuffer(const void RT_FAR *pvBuf, size_t cbBuf) +{ + /** @todo verify that the compiler actually doesn't optimize this away. (intel & gcc) */ + /* the first byte */ + const uint8_t RT_FAR *pu8 = (const uint8_t RT_FAR *)pvBuf; + ASMProbeReadByte(pu8); + + /* the pages in between pages. */ + while (cbBuf > RT_ASM_PAGE_SIZE) + { + ASMProbeReadByte(pu8); + cbBuf -= RT_ASM_PAGE_SIZE; + pu8 += RT_ASM_PAGE_SIZE; + } + + /* the last byte */ + ASMProbeReadByte(pu8 + cbBuf - 1); +} + + + +/** @defgroup grp_inline_bits Bit Operations + * @{ + */ + + +/** + * Sets a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. This should be 32-bit aligned. + * @param iBit The bit to set. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btsl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + bts [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + bts [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically sets a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + _interlockedbittestandset((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btsl %1, %0" + : "=m" (*(volatile long *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock bts [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock bts [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Clears a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to clear. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btrl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + btr [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + btr [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically clears a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to toggle set. + * + * @remarks No memory barrier, take care on smp. + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btrl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock btr [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock btr [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Toggles a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to toggle. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandcomplement((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btcl %1, %0" + : "=m" (*(volatile long *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + btc [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + btc [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically toggles a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btcl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock btc [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock btc [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Tests and sets a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and set. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btsl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + bts [rax], edx +# else + mov eax, [pvBitmap] + bts [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and sets a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _interlockedbittestandset((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btsl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock bts [rax], edx +# else + mov eax, [pvBitmap] + lock bts [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests and clears a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and clear. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btrl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + btr [rax], edx +# else + mov eax, [pvBitmap] + btr [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and clears a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and clear. + * + * @remarks No memory barrier, take care on smp. + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _interlockedbittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btrl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock btr [rax], edx +# else + mov eax, [pvBitmap] + lock btr [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests and toggles a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and toggle. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandcomplement((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btcl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + btc [rax], edx +# else + mov eax, [pvBitmap] + btc [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and toggles a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and toggle. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(bool) ASMAtomicBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btcl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock btc [rax], edx +# else + mov eax, [pvBitmap] + lock btc [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests if a bit in a bitmap is set. + * + * @returns true if the bit is set. + * @returns false if the bit is clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTest(const volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTest(const volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u32 = _bittest((long *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + + __asm__ __volatile__("btl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32) + : "m" (*(const volatile long RT_FAR *)pvBitmap), + "Ir" (iBit) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + bt [rax], edx +# else + mov eax, [pvBitmap] + bt [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Clears a bit range within a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBitStart The First bit to clear. + * @param iBitEnd The first bit not to clear. + */ +DECLINLINE(void) ASMBitClearRange(volatile void RT_FAR *pvBitmap, int32_t iBitStart, int32_t iBitEnd) +{ + if (iBitStart < iBitEnd) + { + volatile uint32_t RT_FAR *pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitStart >> 5); + int32_t iStart = iBitStart & ~31; + int32_t iEnd = iBitEnd & ~31; + if (iStart == iEnd) + *pu32 &= ((UINT32_C(1) << (iBitStart & 31)) - 1) | ~((UINT32_C(1) << (iBitEnd & 31)) - 1); + else + { + /* bits in first dword. */ + if (iBitStart & 31) + { + *pu32 &= (UINT32_C(1) << (iBitStart & 31)) - 1; + pu32++; + iBitStart = iStart + 32; + } + + /* whole dword. */ + if (iBitStart != iEnd) + ASMMemZero32(pu32, (iEnd - iBitStart) >> 3); + + /* bits in last dword. */ + if (iBitEnd & 31) + { + pu32 = (volatile uint32_t *)pvBitmap + (iBitEnd >> 5); + *pu32 &= ~((UINT32_C(1) << (iBitEnd & 31)) - 1); + } + } + } +} + + +/** + * Sets a bit range within a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBitStart The First bit to set. + * @param iBitEnd The first bit not to set. + */ +DECLINLINE(void) ASMBitSetRange(volatile void RT_FAR *pvBitmap, int32_t iBitStart, int32_t iBitEnd) +{ + if (iBitStart < iBitEnd) + { + volatile uint32_t RT_FAR *pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitStart >> 5); + int32_t iStart = iBitStart & ~31; + int32_t iEnd = iBitEnd & ~31; + if (iStart == iEnd) + *pu32 |= ((UINT32_C(1) << (iBitEnd - iBitStart)) - 1) << (iBitStart & 31); + else + { + /* bits in first dword. */ + if (iBitStart & 31) + { + *pu32 |= ~((UINT32_C(1) << (iBitStart & 31)) - 1); + pu32++; + iBitStart = iStart + 32; + } + + /* whole dword. */ + if (iBitStart != iEnd) + ASMMemFill32(pu32, (iEnd - iBitStart) >> 3, ~UINT32_C(0)); + + /* bits in last dword. */ + if (iBitEnd & 31) + { + pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitEnd >> 5); + *pu32 |= (UINT32_C(1) << (iBitEnd & 31)) - 1; + } + } + } +} + + +/** + * Finds the first clear bit in a bitmap. + * + * @returns Index of the first zero bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits); +#else +DECLINLINE(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) +{ + if (cBits) + { + int32_t iBit; +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uEAX, uECX, uEDI; + cBits = RT_ALIGN_32(cBits, 32); + __asm__ __volatile__("repe; scasl\n\t" + "je 1f\n\t" +# ifdef RT_ARCH_AMD64 + "lea -4(%%rdi), %%rdi\n\t" + "xorl (%%rdi), %%eax\n\t" + "subq %5, %%rdi\n\t" +# else + "lea -4(%%edi), %%edi\n\t" + "xorl (%%edi), %%eax\n\t" + "subl %5, %%edi\n\t" +# endif + "shll $3, %%edi\n\t" + "bsfl %%eax, %%edx\n\t" + "addl %%edi, %%edx\n\t" + "1:\t\n" + : "=d" (iBit), + "=&c" (uECX), + "=&D" (uEDI), + "=&a" (uEAX) + : "0" (0xffffffff), + "mr" (pvBitmap), + "1" (cBits >> 5), + "2" (pvBitmap), + "3" (0xffffffff)); +# else + cBits = RT_ALIGN_32(cBits, 32); + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdi, [pvBitmap] + mov rbx, rdi +# else + mov edi, [pvBitmap] + mov ebx, edi +# endif + mov edx, 0ffffffffh + mov eax, edx + mov ecx, [cBits] + shr ecx, 5 + repe scasd + je done + +# ifdef RT_ARCH_AMD64 + lea rdi, [rdi - 4] + xor eax, [rdi] + sub rdi, rbx +# else + lea edi, [edi - 4] + xor eax, [edi] + sub edi, ebx +# endif + shl edi, 3 + bsf edx, eax + add edx, edi + done: + mov [iBit], edx + } +# endif + return iBit; + } + return -1; +} +#endif + + +/** + * Finds the next clear bit in a bitmap. + * + * @returns Index of the first zero bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + * @param iBitPrev The bit returned from the last search. + * The search will start at iBitPrev + 1. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev); +#else +DECLINLINE(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) +{ + const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap; + int iBit = ++iBitPrev & 31; + if (iBit) + { + /* + * Inspect the 32-bit word containing the unaligned bit. + */ + uint32_t u32 = ~pau32Bitmap[iBitPrev / 32] >> iBit; + +# if RT_INLINE_ASM_USES_INTRIN + unsigned long ulBit = 0; + if (_BitScanForward(&ulBit, u32)) + return ulBit + iBitPrev; +# else +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "movl $-1, %0\n\t" + "1:\n\t" + : "=r" (iBit) + : "r" (u32)); +# else + __asm + { + mov edx, [u32] + bsf eax, edx + jnz done + mov eax, 0ffffffffh + done: + mov [iBit], eax + } +# endif + if (iBit >= 0) + return iBit + iBitPrev; +# endif + + /* + * Skip ahead and see if there is anything left to search. + */ + iBitPrev |= 31; + iBitPrev++; + if (cBits <= (uint32_t)iBitPrev) + return -1; + } + + /* + * 32-bit aligned search, let ASMBitFirstClear do the dirty work. + */ + iBit = ASMBitFirstClear(&pau32Bitmap[iBitPrev / 32], cBits - iBitPrev); + if (iBit >= 0) + iBit += iBitPrev; + return iBit; +} +#endif + + +/** + * Finds the first set bit in a bitmap. + * + * @returns Index of the first set bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits); +#else +DECLINLINE(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) +{ + if (cBits) + { + int32_t iBit; +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uEAX, uECX, uEDI; + cBits = RT_ALIGN_32(cBits, 32); + __asm__ __volatile__("repe; scasl\n\t" + "je 1f\n\t" +# ifdef RT_ARCH_AMD64 + "lea -4(%%rdi), %%rdi\n\t" + "movl (%%rdi), %%eax\n\t" + "subq %5, %%rdi\n\t" +# else + "lea -4(%%edi), %%edi\n\t" + "movl (%%edi), %%eax\n\t" + "subl %5, %%edi\n\t" +# endif + "shll $3, %%edi\n\t" + "bsfl %%eax, %%edx\n\t" + "addl %%edi, %%edx\n\t" + "1:\t\n" + : "=d" (iBit), + "=&c" (uECX), + "=&D" (uEDI), + "=&a" (uEAX) + : "0" (0xffffffff), + "mr" (pvBitmap), + "1" (cBits >> 5), + "2" (pvBitmap), + "3" (0)); +# else + cBits = RT_ALIGN_32(cBits, 32); + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdi, [pvBitmap] + mov rbx, rdi +# else + mov edi, [pvBitmap] + mov ebx, edi +# endif + mov edx, 0ffffffffh + xor eax, eax + mov ecx, [cBits] + shr ecx, 5 + repe scasd + je done +# ifdef RT_ARCH_AMD64 + lea rdi, [rdi - 4] + mov eax, [rdi] + sub rdi, rbx +# else + lea edi, [edi - 4] + mov eax, [edi] + sub edi, ebx +# endif + shl edi, 3 + bsf edx, eax + add edx, edi + done: + mov [iBit], edx + } +# endif + return iBit; + } + return -1; +} +#endif + + +/** + * Finds the next set bit in a bitmap. + * + * @returns Index of the next set bit. + * @returns -1 if no set bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + * @param iBitPrev The bit returned from the last search. + * The search will start at iBitPrev + 1. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev); +#else +DECLINLINE(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) +{ + const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap; + int iBit = ++iBitPrev & 31; + if (iBit) + { + /* + * Inspect the 32-bit word containing the unaligned bit. + */ + uint32_t u32 = pau32Bitmap[iBitPrev / 32] >> iBit; + +# if RT_INLINE_ASM_USES_INTRIN + unsigned long ulBit = 0; + if (_BitScanForward(&ulBit, u32)) + return ulBit + iBitPrev; +# else +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "movl $-1, %0\n\t" + "1:\n\t" + : "=r" (iBit) + : "r" (u32)); +# else + __asm + { + mov edx, [u32] + bsf eax, edx + jnz done + mov eax, 0ffffffffh + done: + mov [iBit], eax + } +# endif + if (iBit >= 0) + return iBit + iBitPrev; +# endif + + /* + * Skip ahead and see if there is anything left to search. + */ + iBitPrev |= 31; + iBitPrev++; + if (cBits <= (uint32_t)iBitPrev) + return -1; + } + + /* + * 32-bit aligned search, let ASMBitFirstClear do the dirty work. + */ + iBit = ASMBitFirstSet(&pau32Bitmap[iBitPrev / 32], cBits - iBitPrev); + if (iBit >= 0) + iBit += iBitPrev; + return iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u32 Integer to search for set bits. + * @remarks Similar to ffs() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU32(uint32_t u32); +#else +DECLINLINE(unsigned) ASMBitFirstSetU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; + if (_BitScanForward(&iBit, u32)) + iBit++; + else + iBit = 0; +# elif RT_INLINE_ASM_GNU_STYLE + uint32_t iBit; + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "xorl %0, %0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u32)); +# else + uint32_t iBit; + _asm + { + bsf eax, [u32] + jnz found + xor eax, eax + jmp done + found: + inc eax + done: + mov [iBit], eax + } +# endif + return iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the first set bit. + * @returns 0 if all bits are cleared. + * @param i32 Integer to search for set bits. + * @remark Similar to ffs() in BSD. + */ +DECLINLINE(unsigned) ASMBitFirstSetS32(int32_t i32) +{ + return ASMBitFirstSetU32((uint32_t)i32); +} + + +/** + * Finds the first bit which is set in the given 64-bit integer. + * + * Bits are numbered from 1 (least significant) to 64. + * + * @returns index [1..64] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u64 Integer to search for set bits. + * @remarks Similar to ffs() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU64(uint64_t u64); +#else +DECLINLINE(unsigned) ASMBitFirstSetU64(uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; +# if ARCH_BITS == 64 + if (_BitScanForward64(&iBit, u64)) + iBit++; + else + iBit = 0; +# else + if (_BitScanForward(&iBit, (uint32_t)u64)) + iBit++; + else if (_BitScanForward(&iBit, (uint32_t)(u64 >> 32))) + iBit += 33; + else + iBit = 0; +# endif +# elif RT_INLINE_ASM_GNU_STYLE && ARCH_BITS == 64 + uint64_t iBit; + __asm__ __volatile__("bsfq %1, %0\n\t" + "jnz 1f\n\t" + "xorl %k0, %k0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %k0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u64)); +# else + unsigned iBit = ASMBitFirstSetU32((uint32_t)u64); + if (!iBit) + { + iBit = ASMBitFirstSetU32((uint32_t)(u64 >> 32)); + if (iBit) + iBit += 32; + } +# endif + return (unsigned)iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 16-bit integer. + * + * Bits are numbered from 1 (least significant) to 16. + * + * @returns index [1..16] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u16 Integer to search for set bits. + * @remarks For 16-bit bs3kit code. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU16(uint16_t u16); +#else +DECLINLINE(unsigned) ASMBitFirstSetU16(uint16_t u16) +{ + return ASMBitFirstSetU32((uint32_t)u16); +} +#endif + + +/** + * Finds the last bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u32 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU32(uint32_t u32); +#else +DECLINLINE(unsigned) ASMBitLastSetU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; + if (_BitScanReverse(&iBit, u32)) + iBit++; + else + iBit = 0; +# elif RT_INLINE_ASM_GNU_STYLE + uint32_t iBit; + __asm__ __volatile__("bsrl %1, %0\n\t" + "jnz 1f\n\t" + "xorl %0, %0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u32)); +# else + uint32_t iBit; + _asm + { + bsr eax, [u32] + jnz found + xor eax, eax + jmp done + found: + inc eax + done: + mov [iBit], eax + } +# endif + return iBit; +} +#endif + + +/** + * Finds the last bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the last set bit. + * @returns 0 if all bits are cleared. + * @param i32 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +DECLINLINE(unsigned) ASMBitLastSetS32(int32_t i32) +{ + return ASMBitLastSetU32((uint32_t)i32); +} + + +/** + * Finds the last bit which is set in the given 64-bit integer. + * + * Bits are numbered from 1 (least significant) to 64. + * + * @returns index [1..64] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u64 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU64(uint64_t u64); +#else +DECLINLINE(unsigned) ASMBitLastSetU64(uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; +# if ARCH_BITS == 64 + if (_BitScanReverse64(&iBit, u64)) + iBit++; + else + iBit = 0; +# else + if (_BitScanReverse(&iBit, (uint32_t)(u64 >> 32))) + iBit += 33; + else if (_BitScanReverse(&iBit, (uint32_t)u64)) + iBit++; + else + iBit = 0; +# endif +# elif RT_INLINE_ASM_GNU_STYLE && ARCH_BITS == 64 + uint64_t iBit; + __asm__ __volatile__("bsrq %1, %0\n\t" + "jnz 1f\n\t" + "xorl %k0, %k0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %k0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u64)); +# else + unsigned iBit = ASMBitLastSetU32((uint32_t)(u64 >> 32)); + if (iBit) + iBit += 32; + else + iBit = ASMBitLastSetU32((uint32_t)u64); +#endif + return (unsigned)iBit; +} +#endif + + +/** + * Finds the last bit which is set in the given 16-bit integer. + * + * Bits are numbered from 1 (least significant) to 16. + * + * @returns index [1..16] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u16 Integer to search for set bits. + * @remarks For 16-bit bs3kit code. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU16(uint16_t u16); +#else +DECLINLINE(unsigned) ASMBitLastSetU16(uint16_t u16) +{ + return ASMBitLastSetU32((uint32_t)u16); +} +#endif + + +/** + * Reverse the byte order of the given 16-bit integer. + * + * @returns Revert + * @param u16 16-bit integer value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint16_t) ASMByteSwapU16(uint16_t u16); +#else +DECLINLINE(uint16_t) ASMByteSwapU16(uint16_t u16) +{ +# if RT_INLINE_ASM_USES_INTRIN + u16 = _byteswap_ushort(u16); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ ("rorw $8, %0" : "=r" (u16) : "0" (u16)); +# else + _asm + { + mov ax, [u16] + ror ax, 8 + mov [u16], ax + } +# endif + return u16; +} +#endif + + +/** + * Reverse the byte order of the given 32-bit integer. + * + * @returns Revert + * @param u32 32-bit integer value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMByteSwapU32(uint32_t u32); +#else +DECLINLINE(uint32_t) ASMByteSwapU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + u32 = _byteswap_ulong(u32); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ ("bswapl %0" : "=r" (u32) : "0" (u32)); +# else + _asm + { + mov eax, [u32] + bswap eax + mov [u32], eax + } +# endif + return u32; +} +#endif + + +/** + * Reverse the byte order of the given 64-bit integer. + * + * @returns Revert + * @param u64 64-bit integer value. + */ +DECLINLINE(uint64_t) ASMByteSwapU64(uint64_t u64) +{ +#if defined(RT_ARCH_AMD64) && RT_INLINE_ASM_USES_INTRIN + u64 = _byteswap_uint64(u64); +#else + u64 = (uint64_t)ASMByteSwapU32((uint32_t)u64) << 32 + | (uint64_t)ASMByteSwapU32((uint32_t)(u64 >> 32)); +#endif + return u64; +} + + +/** + * Rotate 32-bit unsigned value to the left by @a cShift. + * + * @returns Rotated value. + * @param u32 The value to rotate. + * @param cShift How many bits to rotate by. + */ +#ifdef __WATCOMC__ +DECLASM(uint32_t) ASMRotateLeftU32(uint32_t u32, unsigned cShift); +#else +DECLINLINE(uint32_t) ASMRotateLeftU32(uint32_t u32, uint32_t cShift) +{ +# if RT_INLINE_ASM_USES_INTRIN + return _rotl(u32, cShift); +# elif RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + __asm__ __volatile__("roll %b1, %0" : "=g" (u32) : "Ic" (cShift), "0" (u32)); + return u32; +# else + cShift &= 31; + return (u32 << cShift) | (u32 >> (32 - cShift)); +# endif +} +#endif + + +/** + * Rotate 32-bit unsigned value to the right by @a cShift. + * + * @returns Rotated value. + * @param u32 The value to rotate. + * @param cShift How many bits to rotate by. + */ +#ifdef __WATCOMC__ +DECLASM(uint32_t) ASMRotateRightU32(uint32_t u32, unsigned cShift); +#else +DECLINLINE(uint32_t) ASMRotateRightU32(uint32_t u32, uint32_t cShift) +{ +# if RT_INLINE_ASM_USES_INTRIN + return _rotr(u32, cShift); +# elif RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + __asm__ __volatile__("rorl %b1, %0" : "=g" (u32) : "Ic" (cShift), "0" (u32)); + return u32; +# else + cShift &= 31; + return (u32 >> cShift) | (u32 << (32 - cShift)); +# endif +} +#endif + + +/** + * Rotate 64-bit unsigned value to the left by @a cShift. + * + * @returns Rotated value. + * @param u64 The value to rotate. + * @param cShift How many bits to rotate by. + */ +DECLINLINE(uint64_t) ASMRotateLeftU64(uint64_t u64, uint32_t cShift) +{ +#if RT_INLINE_ASM_USES_INTRIN + return _rotl64(u64, cShift); +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("rolq %b1, %0" : "=g" (u64) : "Jc" (cShift), "0" (u64)); + return u64; +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_X86) + uint32_t uSpill; + __asm__ __volatile__("testb $0x20, %%cl\n\t" /* if (cShift >= 0x20) { swap(u64.hi, u64lo); cShift -= 0x20; } */ + "jz 1f\n\t" + "xchgl %%eax, %%edx\n\t" + "1:\n\t" + "andb $0x1f, %%cl\n\t" /* if (cShift & 0x1f) { */ + "jz 2f\n\t" + "movl %%edx, %2\n\t" /* save the hi value in %3. */ + "shldl %%cl,%%eax,%%edx\n\t" /* shift the hi value left, feeding MSBits from the low value. */ + "shldl %%cl,%2,%%eax\n\t" /* shift the lo value left, feeding MSBits from the saved hi value. */ + "2:\n\t" /* } */ + : "=A" (u64), "=c" (cShift), "=r" (uSpill) + : "0" (u64), + "1" (cShift)); + return u64; +#else + cShift &= 63; + return (u64 << cShift) | (u64 >> (64 - cShift)); +#endif +} + + +/** + * Rotate 64-bit unsigned value to the right by @a cShift. + * + * @returns Rotated value. + * @param u64 The value to rotate. + * @param cShift How many bits to rotate by. + */ +DECLINLINE(uint64_t) ASMRotateRightU64(uint64_t u64, uint32_t cShift) +{ +#if RT_INLINE_ASM_USES_INTRIN + return _rotr64(u64, cShift); +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("rorq %b1, %0" : "=g" (u64) : "Jc" (cShift), "0" (u64)); + return u64; +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_X86) + uint32_t uSpill; + __asm__ __volatile__("testb $0x20, %%cl\n\t" /* if (cShift >= 0x20) { swap(u64.hi, u64lo); cShift -= 0x20; } */ + "jz 1f\n\t" + "xchgl %%eax, %%edx\n\t" + "1:\n\t" + "andb $0x1f, %%cl\n\t" /* if (cShift & 0x1f) { */ + "jz 2f\n\t" + "movl %%edx, %2\n\t" /* save the hi value in %3. */ + "shrdl %%cl,%%eax,%%edx\n\t" /* shift the hi value right, feeding LSBits from the low value. */ + "shrdl %%cl,%2,%%eax\n\t" /* shift the lo value right, feeding LSBits from the saved hi value. */ + "2:\n\t" /* } */ + : "=A" (u64), "=c" (cShift), "=r" (uSpill) + : "0" (u64), + "1" (cShift)); + return u64; +#else + cShift &= 63; + return (u64 >> cShift) | (u64 << (64 - cShift)); +#endif +} + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/assert.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/assert.h @@ -0,0 +1,2671 @@ +/** @file + * IPRT - Assertions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_assert_h +#define ___iprt_assert_h + +#include +#include +#include +#include + +/** @defgroup grp_rt_assert Assert - Assertions + * @ingroup grp_rt + * + * Assertions are generally used to check preconditions and other + * assumptions. Sometimes it is also used to catch odd errors or errors + * that one would like to inspect in the debugger. They should not be + * used for errors that happen frequently. + * + * IPRT provides a host of assertion macros, so many that it can be a bit + * overwhelming at first. Don't despair, there is a system (surprise). + * + * First there are four families of assertions: + * - Assert - The normal strict build only assertions. + * - AssertLogRel - Calls LogRel() in non-strict builds, otherwise like Assert. + * - AssertRelease - Triggers in all builds. + * - AssertFatal - Triggers in all builds and cannot be continued. + * + * Then there are variations wrt to argument list and behavior on failure: + * - Msg - Custom RTStrPrintf-like message with the assertion message. + * - Return - Return the specific rc on failure. + * - ReturnVoid - Return (void) on failure. + * - Break - Break (out of switch/loop) on failure. + * - Stmt - Execute the specified statement(s) on failure. + * - RC - Assert RT_SUCCESS. + * - RCSuccess - Assert VINF_SUCCESS. + * + * @remarks As you might have noticed, the macros don't follow the + * coding guidelines wrt to macros supposedly being all uppercase + * and underscored. For various reasons they don't, and nobody + * has complained yet. Wonder why... :-) + * + * @remarks Each project has its own specific guidelines on how to use + * assertions, so the above is just trying to give you the general idea + * from the IPRT point of view. + * + * @{ + */ + +RT_C_DECLS_BEGIN + +/** + * The 1st part of an assert message. + * + * @param pszExpr Expression. Can be NULL. + * @param uLine Location line number. + * @param pszFile Location file name. + * @param pszFunction Location function name. + */ +RTDECL(void) RTAssertMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction); +/** + * Weak version of RTAssertMsg1 that can be overridden locally in a module to + * modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg1 + */ +RTDECL(void) RTAssertMsg1Weak(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction); + +/** + * The 2nd (optional) part of an assert message. + * + * @param pszFormat Printf like format string. + * @param ... Arguments to that string. + */ +RTDECL(void) RTAssertMsg2(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** + * Weak version of RTAssertMsg2 that forwards to RTAssertMsg2WeakV. + * + * There is not need to override this, check out RTAssertMsg2WeakV instead! + * + * @copydoc RTAssertMsg2 + */ +RTDECL(void) RTAssertMsg2Weak(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * The 2nd (optional) part of an assert message. + * + * @param pszFormat Printf like format string. + * @param va Arguments to that string. + */ +RTDECL(void) RTAssertMsg2V(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); +/** + * Weak version of RTAssertMsg2V that can be overridden locally in a module to + * modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg2V + */ +RTDECL(void) RTAssertMsg2WeakV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Additional information which should be appended to the 2nd part of an + * assertion message. + * + * @param pszFormat Printf like format string. + * @param ... Arguments to that string. + */ +RTDECL(void) RTAssertMsg2Add(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** + * Weak version of RTAssertMsg2Add that forwards to RTAssertMsg2AddWeakV. + * + * There is not need to override this, check out RTAssertMsg2AddWeakV instead! + * + * @copydoc RTAssertMsg2Add + */ +RTDECL(void) RTAssertMsg2AddWeak(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Additional information which should be appended to the 2nd part of an + * assertion message. + * + * @param pszFormat Printf like format string. + * @param va Arguments to that string. + */ +RTDECL(void) RTAssertMsg2AddV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); +/** + * Weak version of RTAssertMsg2AddV that can be overridden locally in a module + * to modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg2AddV + */ +RTDECL(void) RTAssertMsg2AddWeakV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +#ifdef IN_RING0 +/** + * Panics the system as the result of a fail assertion. + */ +RTR0DECL(void) RTR0AssertPanicSystem(void); +#endif /* IN_RING0 */ + +/** + * Overridable function that decides whether assertions executes the panic + * (breakpoint) or not. + * + * The generic implementation will return true. + * + * @returns true if the breakpoint should be hit, false if it should be ignored. + * + * @remark The RTDECL() makes this a bit difficult to override on Windows. So, + * you'll have to use RTASSERT_HAVE_SHOULD_PANIC or + * RTASSERT_HAVE_SHOULD_PANIC_PRIVATE there to control the kind of + * prototype. + */ +#if !defined(RTASSERT_HAVE_SHOULD_PANIC) && !defined(RTASSERT_HAVE_SHOULD_PANIC_PRIVATE) +RTDECL(bool) RTAssertShouldPanic(void); +#elif defined(RTASSERT_HAVE_SHOULD_PANIC_PRIVATE) +bool RTAssertShouldPanic(void); +#else +DECLEXPORT(bool) RTCALL RTAssertShouldPanic(void); +#endif + +/** + * Controls whether the assertions should be quiet or noisy (default). + * + * @returns The old setting. + * @param fQuiet The new setting. + */ +RTDECL(bool) RTAssertSetQuiet(bool fQuiet); + +/** + * Are assertions quiet or noisy? + * + * @returns True if they are quiet, false if noisy. + */ +RTDECL(bool) RTAssertAreQuiet(void); + +/** + * Makes the assertions panic (default) or not. + * + * @returns The old setting. + * @param fPanic The new setting. + */ +RTDECL(bool) RTAssertSetMayPanic(bool fPanic); + +/** + * Can assertion panic. + * + * @returns True if they can, false if not. + */ +RTDECL(bool) RTAssertMayPanic(void); + + +/** @name Globals for crash analysis + * @remarks This is the full potential set, it + * @{ + */ +/** The last assert message, 1st part. */ +extern RTDATADECL(char) g_szRTAssertMsg1[1024]; +/** The last assert message, 2nd part. */ +extern RTDATADECL(char) g_szRTAssertMsg2[4096]; +/** The last assert message, expression. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertExpr; +/** The last assert message, file name. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertFile; +/** The last assert message, line number. */ +extern RTDATADECL(uint32_t volatile) g_u32RTAssertLine; +/** The last assert message, function name. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertFunction; +/** @} */ + +RT_C_DECLS_END + +/** @def RTAssertDebugBreak() + * Debugger breakpoint instruction. + * + * @remarks This macro does not depend on RT_STRICT. + */ +#define RTAssertDebugBreak() do { RT_BREAKPOINT(); } while (0) + + + +/** @name Assertions + * + * These assertions will only trigger when RT_STRICT is defined. When it is + * undefined they will all be no-ops and generate no code. + * + * @{ + */ + + +/** @def RTASSERT_QUIET + * This can be defined to shut up the messages for a file where this would be + * problematic because the message printing code path passes thru it. + * @internal */ +#ifdef DOXYGEN_RUNNING +# define RTASSERT_QUIET +#endif +#if defined(RTASSERT_QUIET) && !defined(DOXYGEN_RUNNING) +# define RTAssertMsg1Weak(pszExpr, uLine, pszfile, pszFunction) \ + do { } while (0) +# define RTAssertMsg2Weak if (1) {} else RTAssertMsg2Weak +#endif + +/** @def RTAssertDoPanic + * Raises an assertion panic appropriate to the current context. + * @remarks This macro does not depend on RT_STRICT. + */ +#if defined(IN_RING0) \ + && (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU) || defined(RT_OS_SOLARIS)) +# define RTAssertDoPanic() RTR0AssertPanicSystem() +#else +# define RTAssertDoPanic() RTAssertDebugBreak() +#endif + +/** @def AssertBreakpoint() + * Assertion Breakpoint. + * @deprecated Use RTAssertPanic or RTAssertDebugBreak instead. + */ +#ifdef RT_STRICT +# define AssertBreakpoint() RTAssertDebugBreak() +#else +# define AssertBreakpoint() do { } while (0) +#endif + +/** @def RTAssertPanic() + * If RT_STRICT is defined this macro will invoke RTAssertDoPanic if + * RTAssertShouldPanic returns true. If RT_STRICT isn't defined it won't do any + * thing. + */ +#if defined(RT_STRICT) && !defined(RTASSERT_DONT_PANIC) +# define RTAssertPanic() do { if (RTAssertShouldPanic()) RTAssertDoPanic(); } while (0) +#else +# define RTAssertPanic() do { } while (0) +#endif + +/** @def Assert + * Assert that an expression is true. If false, hit breakpoint. + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define Assert(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } \ + } while (0) +#else +# define Assert(expr) do { } while (0) +#endif + + +/** @def AssertStmt + * Assert that an expression is true. If false, hit breakpoint and execute the + * statement. + * @param expr Expression which should be true. + * @param stmt Statement to execute on failure. + */ +#ifdef RT_STRICT +# define AssertStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) +#else +# define AssertStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + } \ + } while (0) +#endif + + +/** @def AssertReturn + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) +#else +# define AssertReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return (rc); \ + } while (0) +#endif + +/** @def AssertReturnStmt + * Assert that an expression is true, if it isn't execute the given statement + * and return rc. + * + * In RT_STRICT mode it will hit a breakpoint before executing the statement and + * returning. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before returning on failure. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertReturnStmt(expr, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } \ + } while (0) +#else +# define AssertReturnStmt(expr, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return (rc); \ + } \ + } while (0) +#endif + +/** @def AssertReturnVoid + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) +#else +# define AssertReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return; \ + } while (0) +#endif + +/** @def AssertReturnVoidStmt + * Assert that an expression is true, if it isn't execute the given statement + * and return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before returning on failure. + */ +#ifdef RT_STRICT +# define AssertReturnVoidStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } \ + } while (0) +#else +# define AssertReturnVoidStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return; \ + } \ + } while (0) +#endif + + +/** @def AssertBreak + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before breaking. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + break +#endif + +/** @def AssertContinue + * Assert that an expression is true and continue if it isn't. + * In RT_STRICT mode it will hit a breakpoint before continuing. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertContinue(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + continue; \ + } else do {} while (0) +#else +# define AssertContinue(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + continue +#endif + +/** @def AssertBreakStmt + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before doing break. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else do {} while (0) +#else +# define AssertBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + stmt; \ + break; \ + } else do {} while (0) +#endif + + +/** @def AssertMsg + * Assert that an expression is true. If it's not print message and hit breakpoint. + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + } \ + } while (0) +#else +# define AssertMsg(expr, a) do { } while (0) +#endif + +/** @def AssertMsgStmt + * Assert that an expression is true. If it's not print message and hit + * breakpoint and execute the statement. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute in case of a failed assertion. + * + * @remarks The expression and statement will be evaluated in all build types. + */ +#ifdef RT_STRICT +# define AssertMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) +#else +# define AssertMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + } \ + } while (0) +#endif + +/** @def AssertMsgReturn + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) +#else +# define AssertMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return (rc); \ + } while (0) +#endif + +/** @def AssertMsgReturnStmt + * Assert that an expression is true, if it isn't execute the statement and + * return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgReturnStmt(expr, a, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } \ + } while (0) +#else +# define AssertMsgReturnStmt(expr, a, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return (rc); \ + } \ + } while (0) +#endif + +/** @def AssertMsgReturnVoid + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) +#else +# define AssertMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return; \ + } while (0) +#endif + +/** @def AssertMsgReturnVoidStmt + * Assert that an expression is true, if it isn't execute the statement and + * return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before return in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertMsgReturnVoidStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + return; \ + } \ + } while (0) +#else +# define AssertMsgReturnVoidStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return; \ + } \ + } while (0) +#endif + + +/** @def AssertMsgBreak + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + break +#endif + +/** @def AssertMsgBreakStmt + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before doing break. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + stmt; \ + break; \ + } else \ + break +#endif + +/** @def AssertFailed + * An assertion failed, hit breakpoint. + */ +#ifdef RT_STRICT +# define AssertFailed() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } while (0) +#else +# define AssertFailed() do { } while (0) +#endif + +/** @def AssertFailedStmt + * An assertion failed, hit breakpoint and execute statement. + */ +#ifdef RT_STRICT +# define AssertFailedStmt(stmt) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + } while (0) +#else +# define AssertFailedStmt(stmt) do { stmt; } while (0) +#endif + +/** @def AssertFailedReturn + * An assertion failed, hit breakpoint (RT_STRICT mode only) and return. + * + * @param rc The rc to return. + */ +#ifdef RT_STRICT +# define AssertFailedReturn(rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) +#else +# define AssertFailedReturn(rc) \ + do { \ + return (rc); \ + } while (0) +#endif + +/** @def AssertFailedReturnStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute a + * statement and return a value. + * + * @param stmt The statement to execute before returning. + * @param rc The value to return. + */ +#ifdef RT_STRICT +# define AssertFailedReturnStmt(stmt, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } while (0) +#else +# define AssertFailedReturnStmt(stmt, rc) \ + do { \ + stmt; \ + return (rc); \ + } while (0) +#endif + +/** @def AssertFailedReturnVoid + * An assertion failed, hit breakpoint (RT_STRICT mode only) and return. + */ +#ifdef RT_STRICT +# define AssertFailedReturnVoid() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } while (0) +#else +# define AssertFailedReturnVoid() \ + do { \ + return; \ + } while (0) +#endif + +/** @def AssertFailedReturnVoidStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute a + * statement and return. + * + * @param stmt The statement to execute before returning. + */ +#ifdef RT_STRICT +# define AssertFailedReturnVoidStmt(stmt) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } while (0) +#else +# define AssertFailedReturnVoidStmt(stmt) \ + do { \ + stmt; \ + return; \ + } while (0) +#endif + + +/** @def AssertFailedBreak + * An assertion failed, hit breakpoint (RT_STRICT mode only) and break. + */ +#ifdef RT_STRICT +# define AssertFailedBreak() \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertFailedBreak() \ + if (1) \ + break; \ + else \ + break +#endif + +/** @def AssertFailedBreakStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute + * the given statement and break. + * + * @param stmt Statement to execute before break. + */ +#ifdef RT_STRICT +# define AssertFailedBreakStmt(stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertFailedBreakStmt(stmt) \ + if (1) { \ + stmt; \ + break; \ + } else \ + break +#endif + + +/** @def AssertMsgFailed + * An assertion failed print a message and a hit breakpoint. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailed(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + } while (0) +#else +# define AssertMsgFailed(a) do { } while (0) +#endif + +/** @def AssertMsgFailedReturn + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and return. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgFailedReturn(a, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return (rc); \ + } while (0) +#else +# define AssertMsgFailedReturn(a, rc) \ + do { \ + return (rc); \ + } while (0) +#endif + +/** @def AssertMsgFailedReturnVoid + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and return. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailedReturnVoid(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return; \ + } while (0) +#else +# define AssertMsgFailedReturnVoid(a) \ + do { \ + return; \ + } while (0) +#endif + + +/** @def AssertMsgFailedBreak + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and break. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailedBreak(a) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertMsgFailedBreak(a) \ + if (1) \ + break; \ + else \ + break +#endif + +/** @def AssertMsgFailedBreakStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute + * the given statement and break. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#ifdef RT_STRICT +# define AssertMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + stmt; \ + break; \ + } else \ + break +#endif + +/** @} */ + + + +/** @name Release Log Assertions + * + * These assertions will work like normal strict assertion when RT_STRICT is + * defined and LogRel statements when RT_STRICT is undefined. Typically used for + * things which shouldn't go wrong, but when it does you'd like to know one way + * or the other. + * + * @{ + */ + +/** @def RTAssertLogRelMsg1 + * RTAssertMsg1Weak (strict builds) / LogRel wrapper (non-strict). + */ +#ifdef RT_STRICT +# define RTAssertLogRelMsg1(pszExpr, iLine, pszFile, pszFunction) \ + RTAssertMsg1Weak(pszExpr, iLine, pszFile, pszFunction) +#else +# define RTAssertLogRelMsg1(pszExpr, iLine, pszFile, pszFunction) \ + LogRel(("AssertLogRel %s(%d) %s: %s\n",\ + (pszFile), (iLine), (pszFunction), (pszExpr) )) +#endif + +/** @def RTAssertLogRelMsg2 + * RTAssertMsg2Weak (strict builds) / LogRel wrapper (non-strict). + */ +#ifdef RT_STRICT +# define RTAssertLogRelMsg2(a) RTAssertMsg2Weak a +#else +# define RTAssertLogRelMsg2(a) LogRel(a) +#endif + +/** @def AssertLogRel + * Assert that an expression is true. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRel(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } \ + } while (0) + +/** @def AssertLogRelReturn + * Assert that an expression is true, return \a rc if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#define AssertLogRelReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertLogRelReturnVoid + * Assert that an expression is true, return void if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRelReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) + +/** @def AssertLogRelBreak + * Assert that an expression is true, break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRelBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } \ + else \ + break + +/** @def AssertLogRelBreakStmt + * Assert that an expression is true, execute \a stmt and break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertLogRelBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelMsg + * Assert that an expression is true. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + } \ + } while (0) + +/** @def AssertLogRelMsgStmt + * Assert that an expression is true, execute \a stmt and break if it isn't + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute in case of a failed assertion. + */ +#define AssertLogRelMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturn + * Assert that an expression is true, return \a rc if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturnStmt + * Assert that an expression is true, execute @a stmt and return @a rcRet if it + * isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + */ +#define AssertLogRelMsgReturnStmt(expr, a, stmt, rcRet) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return (rcRet); \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturnVoid + * Assert that an expression is true, return (void) if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) + +/** @def AssertLogRelMsgBreak + * Assert that an expression is true, break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + break; \ + } \ + else \ + break + +/** @def AssertLogRelMsgBreakStmt + * Assert that an expression is true, execute \a stmt and break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertLogRelMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelFailed + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailed() \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } while (0) + +/** @def AssertLogRelFailedReturn + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param rc What is to be presented to return. + */ +#define AssertLogRelFailedReturn(rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) + +/** @def AssertLogRelFailedReturnVoid + * An assertion failed, hit a breakpoint and return. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailedReturnVoid() \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } while (0) + +/** @def AssertLogRelFailedBreak + * An assertion failed, break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailedBreak() \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break + +/** @def AssertLogRelFailedBreakStmt + * An assertion failed, execute \a stmt and break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param stmt Statement to execute before break. + */ +#define AssertLogRelFailedBreakStmt(stmt) \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelMsgFailed + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailed(a) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + } while (0) + +/** @def AssertLogRelMsgFailedStmt + * An assertion failed, execute @a stmt. + * + * Strict builds will hit a breakpoint, non-strict will only do LogRel. The + * statement will be executed in regardless of build type. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute after raising/logging the assertion. + */ +#define AssertLogRelMsgFailedStmt(a, stmt) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + } while (0) + +/** @def AssertLogRelMsgFailedReturn + * An assertion failed, return \a rc. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgFailedReturn(a, rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnStmt + * An assertion failed, execute @a stmt and return @a rc. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgFailedReturnStmt(a, stmt, rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnVoid + * An assertion failed, return void. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailedReturnVoid(a) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return; \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnVoidStmt + * An assertion failed, execute @a stmt and return void. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + */ +#define AssertLogRelMsgFailedReturnVoidStmt(a, stmt) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } while (0) + +/** @def AssertLogRelMsgFailedBreak + * An assertion failed, break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailedBreak(a) \ + if (1)\ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + break; \ + } else \ + break + +/** @def AssertLogRelMsgFailedBreakStmt + * An assertion failed, execute \a stmt and break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#define AssertLogRelMsgFailedBreakStmt(a, stmt) \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @} */ + + + +/** @name Release Assertions + * + * These assertions are always enabled. + * @{ + */ + +/** @def RTAssertReleasePanic() + * Invokes RTAssertShouldPanic and RTAssertDoPanic. + * + * It might seem odd that RTAssertShouldPanic is necessary when its result isn't + * checked, but it's done since RTAssertShouldPanic is overrideable and might be + * used to bail out before taking down the system (the VMMR0 case). + */ +#define RTAssertReleasePanic() do { RTAssertShouldPanic(); RTAssertDoPanic(); } while (0) + + +/** @def AssertRelease + * Assert that an expression is true. If it's not hit a breakpoint. + * + * @param expr Expression which should be true. + */ +#define AssertRelease(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertReleaseReturn + * Assert that an expression is true, hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#define AssertReleaseReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertReleaseReturnVoid + * Assert that an expression is true, hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + */ +#define AssertReleaseReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return; \ + } \ + } while (0) + + +/** @def AssertReleaseBreak + * Assert that an expression is true, hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + */ +#define AssertReleaseBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseBreakStmt + * Assert that an expression is true, hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertReleaseBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseMsg + * Assert that an expression is true, print the message and hit a breakpoint if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertReleaseMsgReturn + * Assert that an expression is true, print the message and hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertReleaseMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertReleaseMsgReturnVoid + * Assert that an expression is true, print the message and hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return; \ + } \ + } while (0) + + +/** @def AssertReleaseMsgBreak + * Assert that an expression is true, print the message and hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseMsgBreakStmt + * Assert that an expression is true, print the message and hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertReleaseMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseFailed + * An assertion failed, hit a breakpoint. + */ +#define AssertReleaseFailed() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } while (0) + +/** @def AssertReleaseFailedReturn + * An assertion failed, hit a breakpoint and return. + * + * @param rc What is to be presented to return. + */ +#define AssertReleaseFailedReturn(rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return (rc); \ + } while (0) + +/** @def AssertReleaseFailedReturnVoid + * An assertion failed, hit a breakpoint and return. + */ +#define AssertReleaseFailedReturnVoid() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return; \ + } while (0) + + +/** @def AssertReleaseFailedBreak + * An assertion failed, hit a breakpoint and break. + */ +#define AssertReleaseFailedBreak() \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseFailedBreakStmt + * An assertion failed, hit a breakpoint and break. + * + * @param stmt Statement to execute before break. + */ +#define AssertReleaseFailedBreakStmt(stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseMsgFailed + * An assertion failed, print a message and hit a breakpoint. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailed(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } while (0) + +/** @def AssertReleaseMsgFailedReturn + * An assertion failed, print a message, hit a breakpoint and return. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertReleaseMsgFailedReturn(a, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return (rc); \ + } while (0) + +/** @def AssertReleaseMsgFailedReturnVoid + * An assertion failed, print a message, hit a breakpoint and return. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailedReturnVoid(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return; \ + } while (0) + + +/** @def AssertReleaseMsgFailedBreak + * An assertion failed, print a message, hit a breakpoint and break. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailedBreak(a) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseMsgFailedBreakStmt + * An assertion failed, print a message, hit a breakpoint and break. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#define AssertReleaseMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @} */ + + + +/** @name Fatal Assertions + * These are similar to release assertions except that you cannot ignore them in + * any way, they will loop for ever if RTAssertDoPanic returns. + * + * @{ + */ + +/** @def AssertFatal + * Assert that an expression is true. If it's not hit a breakpoint (for ever). + * + * @param expr Expression which should be true. + */ +#define AssertFatal(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + for (;;) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalMsg + * Assert that an expression is true, print the message and hit a breakpoint (for ever) if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertFatalMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + for (;;) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalFailed + * An assertion failed, hit a breakpoint (for ever). + */ +#define AssertFatalFailed() \ + do { \ + for (;;) \ + { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalMsgFailed + * An assertion failed, print a message and hit a breakpoint (for ever). + * + * @param a printf argument list (in parenthesis). + */ +#define AssertFatalMsgFailed(a) \ + do { \ + for (;;) \ + { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @} */ + + + +/** @name Convenience Assertions Macros + * @{ + */ + +/** @def AssertRC + * Asserts a iprt status code successful. + * + * On failure it will print info about the rc and hit a breakpoint. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRC(rc) AssertMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertRCStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and execute + * @a stmt if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCStmt(rc, stmt) AssertMsgRCStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertRCReturn + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturn(rc, rcRet) AssertMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertRCReturnStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and returns @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnStmt(rc, stmt, rcRet) AssertMsgRCReturnStmt(rc, ("%Rra\n", (rc)), stmt, rcRet) + +/** @def AssertRCReturnVoid + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnVoid(rc) AssertMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertRCReturnVoidStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), and + * execute the given statement/return if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning on failure. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnVoidStmt(rc, stmt) AssertMsgRCReturnVoidStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertRCBreak + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCBreak(rc) AssertMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertRCBreakStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCBreakStmt(rc, stmt) AssertMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertMsgRC + * Asserts a iprt status code successful. + * + * It prints a custom message and hits a breakpoint on FAILURE. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRC(rc, msg) \ + do { AssertMsg(RT_SUCCESS_NP(rc), msg); NOREF(rc); } while (0) + +/** @def AssertMsgRCStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and + * execute @a stmt if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCStmt(rc, msg, stmt) \ + do { AssertMsgStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturn + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return + * @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturn(rc, msg, rcRet) \ + do { AssertMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and return @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnStmt(rc, msg, stmt, rcRet) \ + do { AssertMsgReturnStmt(RT_SUCCESS_NP(rc), msg, stmt, rcRet); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnVoid + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return + * void if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnVoid(rc, msg) \ + do { AssertMsgReturnVoid(RT_SUCCESS_NP(rc), msg); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnVoidStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and return void if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnVoidStmt(rc, msg, stmt) \ + do { AssertMsgReturnVoidStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } while (0) + +/** @def AssertMsgRCBreak + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break + * if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCBreak(rc, msg) \ + if (1) { AssertMsgBreak(RT_SUCCESS(rc), msg); NOREF(rc); } else do {} while (0) + +/** @def AssertMsgRCBreakStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and break if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCBreakStmt(rc, msg, stmt) \ + if (1) { AssertMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } else do {} while (0) + +/** @def AssertRCSuccess + * Asserts an iprt status code equals VINF_SUCCESS. + * + * On failure it will print info about the rc and hit a breakpoint. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccess(rc) do { AssertMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))); NOREF(rc); } while (0) + +/** @def AssertRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessReturn(rc, rcRet) AssertMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessReturnVoid(rc) AssertMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessBreak(rc) AssertMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessBreakStmt(rc, stmt) AssertMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertLogRelRC + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRC(rc) AssertLogRelMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCReturn + * Asserts a iprt status code successful, returning \a rc if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturn(rc, rcRet) AssertLogRelMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertLogRelRCReturnStmt + * Asserts a iprt status code successful, executing \a stmt and returning \a rc + * if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturnStmt(rc, stmt, rcRet) AssertLogRelMsgRCReturnStmt(rc, ("%Rra\n", (rc)), stmt, rcRet) + +/** @def AssertLogRelRCReturnVoid + * Asserts a iprt status code successful, returning (void) if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturnVoid(rc) AssertLogRelMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCBreak + * Asserts a iprt status code successful, breaking if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCBreak(rc) AssertLogRelMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCBreakStmt + * Asserts a iprt status code successful, execute \a statement and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCBreakStmt(rc, stmt) AssertLogRelMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertLogRelMsgRC + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRC(rc, msg) AssertLogRelMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertLogRelMsgRCReturn + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturn(rc, msg, rcRet) AssertLogRelMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet) + +/** @def AssertLogRelMsgRCReturnStmt + * Asserts a iprt status code successful, execute \a stmt and return on + * failure. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturnStmt(rc, msg, stmt, rcRet) AssertLogRelMsgReturnStmt(RT_SUCCESS_NP(rc), msg, stmt, rcRet) + +/** @def AssertLogRelMsgRCReturnVoid + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturnVoid(rc, msg) AssertLogRelMsgReturnVoid(RT_SUCCESS_NP(rc), msg) + +/** @def AssertLogRelMsgRCBreak + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCBreak(rc, msg) AssertLogRelMsgBreak(RT_SUCCESS(rc), msg) + +/** @def AssertLogRelMsgRCBreakStmt + * Asserts a iprt status code successful, execute \a stmt and break if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCBreakStmt(rc, msg, stmt) AssertLogRelMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt) + +/** @def AssertLogRelRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccess(rc) AssertLogRelMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessReturn(rc, rcRet) AssertLogRelMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertLogRelRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessReturnVoid(rc) AssertLogRelMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessBreak(rc) AssertLogRelMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessBreakStmt(rc, stmt) AssertLogRelMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertReleaseRC + * Asserts a iprt status code successful. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRC(rc) AssertReleaseMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCReturn + * Asserts a iprt status code successful, returning if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCReturn(rc, rcRet) AssertReleaseMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertReleaseRCReturnVoid + * Asserts a iprt status code successful, returning if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCReturnVoid(rc) AssertReleaseMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCBreak + * Asserts a iprt status code successful, breaking if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally breaking the current statement if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCBreak(rc) AssertReleaseMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCBreakStmt + * Asserts a iprt status code successful, break if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally the break statement will be issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCBreakStmt(rc, stmt) AssertReleaseMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertReleaseMsgRC + * Asserts a iprt status code successful. + * + * On failure a custom message is printed and a breakpoint is hit. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRC(rc, msg) AssertReleaseMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertReleaseMsgRCReturn + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCReturn(rc, msg, rcRet) AssertReleaseMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet) + +/** @def AssertReleaseMsgRCReturnVoid + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCReturnVoid(rc, msg) AssertReleaseMsgReturnVoid(RT_SUCCESS_NP(rc), msg) + +/** @def AssertReleaseMsgRCBreak + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * breaking the current status if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCBreak(rc, msg) AssertReleaseMsgBreak(RT_SUCCESS(rc), msg) + +/** @def AssertReleaseMsgRCBreakStmt + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * the break statement is issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCBreakStmt(rc, msg, stmt) AssertReleaseMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt) + +/** @def AssertReleaseRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccess(rc) AssertReleaseMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessReturn(rc, rcRet) AssertReleaseMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertReleaseRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessReturnVoid(rc) AssertReleaseMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally breaking the current statement if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessBreak(rc) AssertReleaseMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally the break statement will be issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessBreakStmt(rc, stmt) AssertReleaseMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertFatalRC + * Asserts a iprt status code successful. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertFatalRC(rc) AssertFatalMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseMsgRC + * Asserts a iprt status code successful. + * + * On failure a custom message is printed and a breakpoint is hit. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertFatalMsgRC(rc, msg) AssertFatalMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertFatalRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertFatalRCSuccess(rc) AssertFatalMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + + +/** @def AssertPtr + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtr(pv) AssertMsg(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrReturn + * Asserts that a pointer is valid. + * + * @param pv The pointer. + * @param rcRet What is to be presented to return. + */ +#define AssertPtrReturn(pv, rcRet) AssertMsgReturn(VALID_PTR(pv), ("%p\n", (pv)), rcRet) + +/** @def AssertPtrReturnVoid + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtrReturnVoid(pv) AssertMsgReturnVoid(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrBreak + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtrBreak(pv) AssertMsgBreak(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrBreakStmt + * Asserts that a pointer is valid. + * + * @param pv The pointer. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertPtrBreakStmt(pv, stmt) AssertMsgBreakStmt(VALID_PTR(pv), ("%p\n", (pv)), stmt) + +/** @def AssertPtrNull + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNull(pv) AssertMsg(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullReturn + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + * @param rcRet What is to be presented to return. + */ +#define AssertPtrNullReturn(pv, rcRet) AssertMsgReturn(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv)), rcRet) + +/** @def AssertPtrNullReturnVoid + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNullReturnVoid(pv) AssertMsgReturnVoid(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullBreak + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNullBreak(pv) AssertMsgBreak(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullBreakStmt + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertPtrNullBreakStmt(pv, stmt) AssertMsgBreakStmt(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv)), stmt) + +/** @def AssertGCPhys32 + * Asserts that the high dword of a physical address is zero + * + * @param GCPhys The address (RTGCPHYS). + */ +#define AssertGCPhys32(GCPhys) AssertMsg(VALID_PHYS32(GCPhys), ("%RGp\n", (RTGCPHYS)(GCPhys))) + +/** @def AssertGCPtr32 + * Asserts that the high dword of a physical address is zero + * + * @param GCPtr The address (RTGCPTR). + */ +#if GC_ARCH_BITS == 32 +# define AssertGCPtr32(GCPtr) do { } while (0) +#else +# define AssertGCPtr32(GCPtr) AssertMsg(!((GCPtr) & UINT64_C(0xffffffff00000000)), ("%RGv\n", GCPtr)) +#endif + +/** @def AssertForEach + * Equivalent to Assert for each value of the variable from the starting + * value to the finishing one. + * + * @param var Name of the counter variable. + * @param vartype Type of the counter variable. + * @param first Lowest inclusive value of the counter variable. + * This must be free from side effects. + * @param end Highest exclusive value of the counter variable. + * This must be free from side effects. + * @param expr Expression which should be true for each value of @a var. + */ +#define AssertForEach(var, vartype, first, end, expr) \ + do { \ + vartype var; \ + Assert((first) == (first) && (end) == (end)); /* partial check for side effects */ \ + for (var = (first); var < (end); var++) \ + AssertMsg(expr, ("%s = %#RX64 (%RI64)", #var, (uint64_t)var, (int64_t)var)); \ + } while (0) + +#ifdef RT_OS_WINDOWS + +/** @def AssertNtStatus + * Asserts that the NT_SUCCESS() returns true for the given NTSTATUS value. + * + * @param a_rcNt The NTSTATUS to check. Will be evaluated twice and + * subjected to NOREF(). + * @sa AssertRC() + */ +# define AssertNtStatus(a_rcNt) \ + do { AssertMsg(NT_SUCCESS(a_rcNt), ("%#x\n", (a_rcNt))); NOREF(a_rcNt); } while (0) + +/** @def AssertNtStatusSuccess + * Asserts that the given NTSTATUS value equals STATUS_SUCCESS. + * + * @param a_rcNt The NTSTATUS to check. Will be evaluated twice and + * subjected to NOREF(). + * @sa AssertRCSuccess() + */ +# define AssertNtStatusSuccess(a_rcNt) \ + do { AssertMsg((a_rcNt) == STATUS_SUCCESS, ("%#x\n", (a_rcNt))); NOREF(a_rcNt); } while (0) + +#endif /* RT_OS_WINDOWS */ + +/** @} */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/assertcompile.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/assertcompile.h @@ -0,0 +1,236 @@ +/** @file + * IPRT - Compile Time Assertions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_assertcompile_h +#define ___iprt_assertcompile_h + +#include + +/** @defgroup grp_rt_assert_compile Compile time assertions + * @ingroup grp_rt + * + * These assertions are used to check structure sizes, member/size alignments + * and similar compile time expressions. + * + * @remarks As you might have noticed, the AssertCompile macros don't follow the + * coding guidelines wrt to macros supposedly being all uppercase and + * underscored. For various reasons they don't, and nobody has + * complained yet. + * + * @{ + */ + +/** + * RTASSERTTYPE is the type the AssertCompile() macro redefines. + * It has no other function and shouldn't be used. + * Visual C++ uses this. + */ +typedef int RTASSERTTYPE[1]; + +/** + * RTASSERTVAR is the type the AssertCompile() macro redefines. + * It has no other function and shouldn't be used. + * GCC uses this. + */ +#ifdef __GNUC__ +RT_C_DECLS_BEGIN +#endif +extern int RTASSERTVAR[1]; +#ifdef __GNUC__ +RT_C_DECLS_END +#endif + +/** @def RTASSERT_HAVE_STATIC_ASSERT + * Indicates that the compiler implements static_assert(expr, msg). + */ +#ifdef _MSC_VER +# if _MSC_VER >= 1600 && defined(__cplusplus) +# define RTASSERT_HAVE_STATIC_ASSERT +# endif +#endif +#if defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define RTASSERT_HAVE_STATIC_ASSERT +#endif +#if RT_CLANG_PREREQ(6, 0) +# if __has_feature(cxx_static_assert) || __has_feature(c_static_assert) +# define RTASSERT_HAVE_STATIC_ASSERT +# endif +#endif +#ifdef DOXYGEN_RUNNING +# define RTASSERT_HAVE_STATIC_ASSERT +#endif + +/** @def AssertCompileNS + * Asserts that a compile-time expression is true. If it's not break the build. + * + * This differs from AssertCompile in that it accepts some more expressions + * than what C++0x allows - NS = Non-standard. + * + * @param expr Expression which should be true. + */ +#ifdef __GNUC__ +# define AssertCompileNS(expr) extern int RTASSERTVAR[1] __attribute__((__unused__)), RTASSERTVAR[(expr) ? 1 : 0] __attribute__((__unused__)) +#elif defined(__IBMC__) || defined(__IBMCPP__) +# define AssertCompileNS(expr) extern int RTASSERTVAR[(expr) ? 1 : 0] +#else +# define AssertCompileNS(expr) typedef int RTASSERTTYPE[(expr) ? 1 : 0] +#endif + +/** @def AssertCompile + * Asserts that a C++0x compile-time expression is true. If it's not break the + * build. + * @param expr Expression which should be true. + */ +#ifdef RTASSERT_HAVE_STATIC_ASSERT +# define AssertCompile(expr) static_assert(!!(expr), #expr) +#else +# define AssertCompile(expr) AssertCompileNS(expr) +#endif + +/** @def RTASSERT_OFFSET_OF() + * A offsetof() macro suitable for compile time assertions. + * Both GCC v4 and VisualAge for C++ v3.08 has trouble using RT_OFFSETOF. + */ +#if defined(__GNUC__) +# if __GNUC__ >= 4 +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __builtin_offsetof(a_Type, a_Member) +# else +# define RTASSERT_OFFSET_OF(a_Type, a_Member) RT_OFFSETOF(a_Type, a_Member) +# endif +#elif (defined(__IBMC__) || defined(__IBMCPP__)) && defined(RT_OS_OS2) +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __offsetof(a_Type, a_Member) +#elif (defined(__WATCOMC__) && defined(__cplusplus)) +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __offsetof(a_Type, a_Member) +#else +# define RTASSERT_OFFSET_OF(a_Type, a_Member) RT_OFFSETOF(a_Type, a_Member) +#endif + + +/** @def AssertCompileSize + * Asserts a size at compile. + * @param type The type. + * @param size The expected type size. + */ +#define AssertCompileSize(type, size) \ + AssertCompile(sizeof(type) == (size)) + +/** @def AssertCompileSizeAlignment + * Asserts a size alignment at compile. + * @param type The type. + * @param align The size alignment to assert. + */ +#define AssertCompileSizeAlignment(type, align) \ + AssertCompile(!(sizeof(type) & ((align) - 1))) + +/** @def AssertCompileMemberSize + * Asserts a member offset alignment at compile. + * @param type The type. + * @param member The member. + * @param size The member size to assert. + */ +#define AssertCompileMemberSize(type, member, size) \ + AssertCompile(RT_SIZEOFMEMB(type, member) == (size)) + +/** @def AssertCompileMemberSizeAlignment + * Asserts a member size alignment at compile. + * @param type The type. + * @param member The member. + * @param align The member size alignment to assert. + */ +#define AssertCompileMemberSizeAlignment(type, member, align) \ + AssertCompile(!(RT_SIZEOFMEMB(type, member) & ((align) - 1))) + +/** @def AssertCompileMemberAlignment + * Asserts a member offset alignment at compile. + * @param type The type. + * @param member The member. + * @param align The member offset alignment to assert. + */ +#define AssertCompileMemberAlignment(type, member, align) \ + AssertCompile(!(RTASSERT_OFFSET_OF(type, member) & ((align) - 1))) + +/** @def AssertCompileMemberOffset + * Asserts an offset of a structure member at compile. + * @param type The type. + * @param member The member. + * @param off The expected offset. + */ +#define AssertCompileMemberOffset(type, member, off) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member) == (off)) + +/** @def AssertCompile2MemberOffsets + * Asserts that two (sub-structure) members in union have the same offset. + * @param type The type. + * @param member1 The first member. + * @param member2 The second member. + */ +#define AssertCompile2MemberOffsets(type, member1, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member1) == RTASSERT_OFFSET_OF(type, member2)) + +/** @def AssertCompileAdjacentMembers + * Asserts that two structure members are adjacent. + * @param type The type. + * @param member1 The first member. + * @param member2 The second member. + */ +#define AssertCompileAdjacentMembers(type, member1, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member1) + RT_SIZEOFMEMB(type, member1) == RTASSERT_OFFSET_OF(type, member2)) + +/** @def AssertCompileMembersAtSameOffset + * Asserts that members of two different structures are at the same offset. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersAtSameOffset(type1, member1, type2, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type1, member1) == RTASSERT_OFFSET_OF(type2, member2)) + +/** @def AssertCompileMembersSameSize + * Asserts that members of two different structures have the same size. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersSameSize(type1, member1, type2, member2) \ + AssertCompile(RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) + +/** @def AssertCompileMembersSameSizeAndOffset + * Asserts that members of two different structures have the same size and are + * at the same offset. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersSameSizeAndOffset(type1, member1, type2, member2) \ + AssertCompile( RTASSERT_OFFSET_OF(type1, member1) == RTASSERT_OFFSET_OF(type2, member2) \ + && RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/avl.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/avl.h @@ -0,0 +1,1136 @@ +/** @file + * IPRT - AVL Trees. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_avl_h +#define ___iprt_avl_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_avl RTAvl - AVL Trees + * @ingroup grp_rt + * @{ + */ + + +/** AVL tree of void pointers. + * @{ + */ + +/** + * AVL key type + */ +typedef void * AVLPVKEY; + +/** + * AVL Core node. + */ +typedef struct _AVLPVNodeCore +{ + AVLPVKEY Key; /** Key value. */ + struct _AVLPVNodeCore *pLeft; /** Pointer to left leaf node. */ + struct _AVLPVNodeCore *pRight; /** Pointer to right leaf node. */ + unsigned char uchHeight; /** Height of this tree: max(height(left), height(right)) + 1 */ +} AVLPVNODECORE, *PAVLPVNODECORE, **PPAVLPVNODECORE; + +/** A tree with void pointer keys. */ +typedef PAVLPVNODECORE AVLPVTREE; +/** Pointer to a tree with void pointer keys. */ +typedef PPAVLPVNODECORE PAVLPVTREE; + +/** Callback function for AVLPVDoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLPVCALLBACK(PAVLPVNODECORE, void *); +/** Pointer to callback function for AVLPVDoWithAll(). */ +typedef AVLPVCALLBACK *PAVLPVCALLBACK; + +/* + * Functions. + */ +RTDECL(bool) RTAvlPVInsert(PAVLPVTREE ppTree, PAVLPVNODECORE pNode); +RTDECL(PAVLPVNODECORE) RTAvlPVRemove(PAVLPVTREE ppTree, AVLPVKEY Key); +RTDECL(PAVLPVNODECORE) RTAvlPVGet(PAVLPVTREE ppTree, AVLPVKEY Key); +RTDECL(PAVLPVNODECORE) RTAvlPVGetBestFit(PAVLPVTREE ppTree, AVLPVKEY Key, bool fAbove); +RTDECL(PAVLPVNODECORE) RTAvlPVRemoveBestFit(PAVLPVTREE ppTree, AVLPVKEY Key, bool fAbove); +RTDECL(int) RTAvlPVDoWithAll(PAVLPVTREE ppTree, int fFromLeft, PAVLPVCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlPVDestroy(PAVLPVTREE ppTree, PAVLPVCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of unsigned long. + * @{ + */ + +/** + * AVL key type + */ +typedef unsigned long AVLULKEY; + +/** + * AVL Core node. + */ +typedef struct _AVLULNodeCore +{ + AVLULKEY Key; /** Key value. */ + struct _AVLULNodeCore *pLeft; /** Pointer to left leaf node. */ + struct _AVLULNodeCore *pRight; /** Pointer to right leaf node. */ + unsigned char uchHeight; /** Height of this tree: max(height(left), height(right)) + 1 */ +} AVLULNODECORE, *PAVLULNODECORE, **PPAVLULNODECORE; + + +/** Callback function for AVLULDoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLULCALLBACK(PAVLULNODECORE, void*); +/** Pointer to callback function for AVLULDoWithAll(). */ +typedef AVLULCALLBACK *PAVLULCALLBACK; + + +/* + * Functions. + */ +RTDECL(bool) RTAvlULInsert(PPAVLULNODECORE ppTree, PAVLULNODECORE pNode); +RTDECL(PAVLULNODECORE) RTAvlULRemove(PPAVLULNODECORE ppTree, AVLULKEY Key); +RTDECL(PAVLULNODECORE) RTAvlULGet(PPAVLULNODECORE ppTree, AVLULKEY Key); +RTDECL(PAVLULNODECORE) RTAvlULGetBestFit(PPAVLULNODECORE ppTree, AVLULKEY Key, bool fAbove); +RTDECL(PAVLULNODECORE) RTAvlULRemoveBestFit(PPAVLULNODECORE ppTree, AVLULKEY Key, bool fAbove); +RTDECL(int) RTAvlULDoWithAll(PPAVLULNODECORE ppTree, int fFromLeft, PAVLULCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlULDestroy(PPAVLULNODECORE pTree, PAVLULCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + + +/** AVL tree of void pointer ranges. + * @{ + */ + +/** + * AVL key type + */ +typedef void *AVLRPVKEY; + +/** + * AVL Core node. + */ +typedef struct AVLRPVNodeCore +{ + AVLRPVKEY Key; /**< First key value in the range (inclusive). */ + AVLRPVKEY KeyLast; /**< Last key value in the range (inclusive). */ + struct AVLRPVNodeCore *pLeft; /**< Pointer to left leaf node. */ + struct AVLRPVNodeCore *pRight; /**< Pointer to right leaf node. */ + unsigned char uchHeight; /**< Height of this tree: max(height(left), height(right)) + 1 */ +} AVLRPVNODECORE, *PAVLRPVNODECORE, **PPAVLRPVNODECORE; + +/** A tree with void pointer keys. */ +typedef PAVLRPVNODECORE AVLRPVTREE; +/** Pointer to a tree with void pointer keys. */ +typedef PPAVLRPVNODECORE PAVLRPVTREE; + +/** Callback function for AVLPVDoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLRPVCALLBACK(PAVLRPVNODECORE, void *); +/** Pointer to callback function for AVLPVDoWithAll(). */ +typedef AVLRPVCALLBACK *PAVLRPVCALLBACK; + +/* + * Functions. + */ +RTDECL(bool) RTAvlrPVInsert(PAVLRPVTREE ppTree, PAVLRPVNODECORE pNode); +RTDECL(PAVLRPVNODECORE) RTAvlrPVRemove(PAVLRPVTREE ppTree, AVLRPVKEY Key); +RTDECL(PAVLRPVNODECORE) RTAvlrPVGet(PAVLRPVTREE ppTree, AVLRPVKEY Key); +RTDECL(PAVLRPVNODECORE) RTAvlrPVRangeGet(PAVLRPVTREE ppTree, AVLRPVKEY Key); +RTDECL(PAVLRPVNODECORE) RTAvlrPVRangeRemove(PAVLRPVTREE ppTree, AVLRPVKEY Key); +RTDECL(PAVLRPVNODECORE) RTAvlrPVGetBestFit(PAVLRPVTREE ppTree, AVLRPVKEY Key, bool fAbove); +RTDECL(PAVLRPVNODECORE) RTAvlrPVRemoveBestFit(PAVLRPVTREE ppTree, AVLRPVKEY Key, bool fAbove); +RTDECL(int) RTAvlrPVDoWithAll(PAVLRPVTREE ppTree, int fFromLeft, PAVLRPVCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrPVDestroy(PAVLRPVTREE ppTree, PAVLRPVCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + + +/** AVL tree of uint32_t + * @{ + */ + +/** AVL key type. */ +typedef uint32_t AVLU32KEY; + +/** AVL Core node. */ +typedef struct _AVLU32NodeCore +{ + struct _AVLU32NodeCore *pLeft; /**< Pointer to left leaf node. */ + struct _AVLU32NodeCore *pRight; /**< Pointer to right leaf node. */ + AVLU32KEY Key; /**< Key value. */ + unsigned char uchHeight; /**< Height of this tree: max(height(left), height(right)) + 1 */ +} AVLU32NODECORE, *PAVLU32NODECORE, **PPAVLU32NODECORE; + +/** A tree with void pointer keys. */ +typedef PAVLU32NODECORE AVLU32TREE; +/** Pointer to a tree with void pointer keys. */ +typedef PPAVLU32NODECORE PAVLU32TREE; + +/** Callback function for AVLU32DoWithAll() & AVLU32Destroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLU32CALLBACK(PAVLU32NODECORE, void*); +/** Pointer to callback function for AVLU32DoWithAll() & AVLU32Destroy(). */ +typedef AVLU32CALLBACK *PAVLU32CALLBACK; + + +/* + * Functions. + */ +RTDECL(bool) RTAvlU32Insert(PAVLU32TREE pTree, PAVLU32NODECORE pNode); +RTDECL(PAVLU32NODECORE) RTAvlU32Remove(PAVLU32TREE pTree, AVLU32KEY Key); +RTDECL(PAVLU32NODECORE) RTAvlU32Get(PAVLU32TREE pTree, AVLU32KEY Key); +RTDECL(PAVLU32NODECORE) RTAvlU32GetBestFit(PAVLU32TREE pTree, AVLU32KEY Key, bool fAbove); +RTDECL(PAVLU32NODECORE) RTAvlU32RemoveBestFit(PAVLU32TREE pTree, AVLU32KEY Key, bool fAbove); +RTDECL(int) RTAvlU32DoWithAll(PAVLU32TREE pTree, int fFromLeft, PAVLU32CALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlU32Destroy(PAVLU32TREE pTree, PAVLU32CALLBACK pfnCallBack, void *pvParam); + +/** @} */ + +/** + * AVL uint32_t type for the relative offset pointer scheme. + */ +typedef int32_t AVLOU32; + +typedef uint32_t AVLOU32KEY; + +/** + * AVL Core node. + */ +typedef struct _AVLOU32NodeCore +{ + /** Key value. */ + AVLOU32KEY Key; + /** Offset to the left leaf node, relative to this field. */ + AVLOU32 pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLOU32 pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLOU32NODECORE, *PAVLOU32NODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLOU32 AVLOU32TREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLOU32TREE *PAVLOU32TREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLOU32TREE *PPAVLOU32NODECORE; + +/** Callback function for RTAvloU32DoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLOU32CALLBACK(PAVLOU32NODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvloU32DoWithAll(). */ +typedef AVLOU32CALLBACK *PAVLOU32CALLBACK; + +RTDECL(bool) RTAvloU32Insert(PAVLOU32TREE pTree, PAVLOU32NODECORE pNode); +RTDECL(PAVLOU32NODECORE) RTAvloU32Remove(PAVLOU32TREE pTree, AVLOU32KEY Key); +RTDECL(PAVLOU32NODECORE) RTAvloU32Get(PAVLOU32TREE pTree, AVLOU32KEY Key); +RTDECL(int) RTAvloU32DoWithAll(PAVLOU32TREE pTree, int fFromLeft, PAVLOU32CALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLOU32NODECORE) RTAvloU32GetBestFit(PAVLOU32TREE ppTree, AVLOU32KEY Key, bool fAbove); +RTDECL(PAVLOU32NODECORE) RTAvloU32RemoveBestFit(PAVLOU32TREE ppTree, AVLOU32KEY Key, bool fAbove); +RTDECL(int) RTAvloU32Destroy(PAVLOU32TREE pTree, PAVLOU32CALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of uint32_t, list duplicates. + * @{ + */ + +/** AVL key type. */ +typedef uint32_t AVLLU32KEY; + +/** AVL Core node. */ +typedef struct _AVLLU32NodeCore +{ + AVLLU32KEY Key; /**< Key value. */ + unsigned char uchHeight; /**< Height of this tree: max(height(left), height(right)) + 1 */ + struct _AVLLU32NodeCore *pLeft; /**< Pointer to left leaf node. */ + struct _AVLLU32NodeCore *pRight; /**< Pointer to right leaf node. */ + struct _AVLLU32NodeCore *pList; /**< Pointer to next node with the same key. */ +} AVLLU32NODECORE, *PAVLLU32NODECORE, **PPAVLLU32NODECORE; + +/** Callback function for RTAvllU32DoWithAll() & RTAvllU32Destroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLLU32CALLBACK(PAVLLU32NODECORE, void*); +/** Pointer to callback function for RTAvllU32DoWithAll() & RTAvllU32Destroy(). */ +typedef AVLLU32CALLBACK *PAVLLU32CALLBACK; + + +/* + * Functions. + */ +RTDECL(bool) RTAvllU32Insert(PPAVLLU32NODECORE ppTree, PAVLLU32NODECORE pNode); +RTDECL(PAVLLU32NODECORE) RTAvllU32Remove(PPAVLLU32NODECORE ppTree, AVLLU32KEY Key); +RTDECL(PAVLLU32NODECORE) RTAvllU32RemoveNode(PPAVLLU32NODECORE ppTree, PAVLLU32NODECORE pNode); +RTDECL(PAVLLU32NODECORE) RTAvllU32Get(PPAVLLU32NODECORE ppTree, AVLLU32KEY Key); +RTDECL(PAVLLU32NODECORE) RTAvllU32GetBestFit(PPAVLLU32NODECORE ppTree, AVLLU32KEY Key, bool fAbove); +RTDECL(PAVLLU32NODECORE) RTAvllU32RemoveBestFit(PPAVLLU32NODECORE ppTree, AVLLU32KEY Key, bool fAbove); +RTDECL(int) RTAvllU32DoWithAll(PPAVLLU32NODECORE ppTree, int fFromLeft, PAVLLU32CALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvllU32Destroy(PPAVLLU32NODECORE pTree, PAVLLU32CALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + + +/** AVL tree of uint64_t ranges. + * @{ + */ + +/** + * AVL key type + */ +typedef uint64_t AVLRU64KEY; + +/** + * AVL Core node. + */ +typedef struct AVLRU64NodeCore +{ + AVLRU64KEY Key; /**< First key value in the range (inclusive). */ + AVLRU64KEY KeyLast; /**< Last key value in the range (inclusive). */ + struct AVLRU64NodeCore *pLeft; /**< Pointer to left leaf node. */ + struct AVLRU64NodeCore *pRight; /**< Pointer to right leaf node. */ + unsigned char uchHeight; /**< Height of this tree: max(height(left), height(right)) + 1 */ +} AVLRU64NODECORE, *PAVLRU64NODECORE, **PPAVLRU64NODECORE; + +/** A tree with void pointer keys. */ +typedef PAVLRU64NODECORE AVLRU64TREE; +/** Pointer to a tree with void pointer keys. */ +typedef PPAVLRU64NODECORE PAVLRU64TREE; + +/** Callback function for AVLRU64DoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLRU64CALLBACK(PAVLRU64NODECORE, void *); +/** Pointer to callback function for AVLU64DoWithAll(). */ +typedef AVLRU64CALLBACK *PAVLRU64CALLBACK; + +/* + * Functions. + */ +RTDECL(bool) RTAvlrU64Insert(PAVLRU64TREE ppTree, PAVLRU64NODECORE pNode); +RTDECL(PAVLRU64NODECORE) RTAvlrU64Remove(PAVLRU64TREE ppTree, AVLRU64KEY Key); +RTDECL(PAVLRU64NODECORE) RTAvlrU64Get(PAVLRU64TREE ppTree, AVLRU64KEY Key); +RTDECL(PAVLRU64NODECORE) RTAvlrU64RangeGet(PAVLRU64TREE ppTree, AVLRU64KEY Key); +RTDECL(PAVLRU64NODECORE) RTAvlrU64RangeRemove(PAVLRU64TREE ppTree, AVLRU64KEY Key); +RTDECL(PAVLRU64NODECORE) RTAvlrU64GetBestFit(PAVLRU64TREE ppTree, AVLRU64KEY Key, bool fAbove); +RTDECL(PAVLRU64NODECORE) RTAvlrU64RemoveBestFit(PAVLRU64TREE ppTree, AVLRU64KEY Key, bool fAbove); +RTDECL(int) RTAvlrU64DoWithAll(PAVLRU64TREE ppTree, int fFromLeft, PAVLRU64CALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrU64Destroy(PAVLRU64TREE ppTree, PAVLRU64CALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + + +/** AVL tree of RTGCPHYSes - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLOGCPHYS; + +/** + * AVL Core node. + */ +typedef struct _AVLOGCPhysNodeCore +{ + /** Key value. */ + RTGCPHYS Key; + /** Offset to the left leaf node, relative to this field. */ + AVLOGCPHYS pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLOGCPHYS pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; + /** Padding */ + unsigned char Padding[7]; +} AVLOGCPHYSNODECORE, *PAVLOGCPHYSNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLOGCPHYS AVLOGCPHYSTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLOGCPHYSTREE *PAVLOGCPHYSTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLOGCPHYSTREE *PPAVLOGCPHYSNODECORE; + +/** Callback function for RTAvloGCPhysDoWithAll() and RTAvloGCPhysDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLOGCPHYSCALLBACK(PAVLOGCPHYSNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvloGCPhysDoWithAll() and RTAvloGCPhysDestroy(). */ +typedef AVLOGCPHYSCALLBACK *PAVLOGCPHYSCALLBACK; + +RTDECL(bool) RTAvloGCPhysInsert(PAVLOGCPHYSTREE pTree, PAVLOGCPHYSNODECORE pNode); +RTDECL(PAVLOGCPHYSNODECORE) RTAvloGCPhysRemove(PAVLOGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLOGCPHYSNODECORE) RTAvloGCPhysGet(PAVLOGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(int) RTAvloGCPhysDoWithAll(PAVLOGCPHYSTREE pTree, int fFromLeft, PAVLOGCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLOGCPHYSNODECORE) RTAvloGCPhysGetBestFit(PAVLOGCPHYSTREE ppTree, RTGCPHYS Key, bool fAbove); +RTDECL(PAVLOGCPHYSNODECORE) RTAvloGCPhysRemoveBestFit(PAVLOGCPHYSTREE ppTree, RTGCPHYS Key, bool fAbove); +RTDECL(int) RTAvloGCPhysDestroy(PAVLOGCPHYSTREE pTree, PAVLOGCPHYSCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTGCPHYS ranges - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLROGCPHYS; + +/** + * AVL Core node. + */ +typedef struct _AVLROGCPhysNodeCore +{ + /** First key value in the range (inclusive). */ + RTGCPHYS Key; + /** Last key value in the range (inclusive). */ + RTGCPHYS KeyLast; + /** Offset to the left leaf node, relative to this field. */ + AVLROGCPHYS pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLROGCPHYS pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; + /** Padding */ + unsigned char Padding[7]; +} AVLROGCPHYSNODECORE, *PAVLROGCPHYSNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLROGCPHYS AVLROGCPHYSTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLROGCPHYSTREE *PAVLROGCPHYSTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLROGCPHYSTREE *PPAVLROGCPHYSNODECORE; + +/** Callback function for RTAvlroGCPhysDoWithAll() and RTAvlroGCPhysDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLROGCPHYSCALLBACK(PAVLROGCPHYSNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlroGCPhysDoWithAll() and RTAvlroGCPhysDestroy(). */ +typedef AVLROGCPHYSCALLBACK *PAVLROGCPHYSCALLBACK; + +RTDECL(bool) RTAvlroGCPhysInsert(PAVLROGCPHYSTREE pTree, PAVLROGCPHYSNODECORE pNode); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysRemove(PAVLROGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysGet(PAVLROGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysRangeGet(PAVLROGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysRangeRemove(PAVLROGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysGetBestFit(PAVLROGCPHYSTREE ppTree, RTGCPHYS Key, bool fAbove); +RTDECL(int) RTAvlroGCPhysDoWithAll(PAVLROGCPHYSTREE pTree, int fFromLeft, PAVLROGCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlroGCPhysDestroy(PAVLROGCPHYSTREE pTree, PAVLROGCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysGetRoot(PAVLROGCPHYSTREE pTree); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysGetLeft(PAVLROGCPHYSNODECORE pNode); +RTDECL(PAVLROGCPHYSNODECORE) RTAvlroGCPhysGetRight(PAVLROGCPHYSNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTGCPTRs. + * @{ + */ + +/** + * AVL Core node. + */ +typedef struct _AVLGCPtrNodeCore +{ + /** Key value. */ + RTGCPTR Key; + /** Pointer to the left node. */ + struct _AVLGCPtrNodeCore *pLeft; + /** Pointer to the right node. */ + struct _AVLGCPtrNodeCore *pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLGCPTRNODECORE, *PAVLGCPTRNODECORE, **PPAVLGCPTRNODECORE; + +/** A tree of RTGCPTR keys. */ +typedef PAVLGCPTRNODECORE AVLGCPTRTREE; +/** Pointer to a tree of RTGCPTR keys. */ +typedef PPAVLGCPTRNODECORE PAVLGCPTRTREE; + +/** Callback function for RTAvlGCPtrDoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLGCPTRCALLBACK(PAVLGCPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlGCPtrDoWithAll(). */ +typedef AVLGCPTRCALLBACK *PAVLGCPTRCALLBACK; + +RTDECL(bool) RTAvlGCPtrInsert(PAVLGCPTRTREE pTree, PAVLGCPTRNODECORE pNode); +RTDECL(PAVLGCPTRNODECORE) RTAvlGCPtrRemove(PAVLGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLGCPTRNODECORE) RTAvlGCPtrGet(PAVLGCPTRTREE pTree, RTGCPTR Key); +RTDECL(int) RTAvlGCPtrDoWithAll(PAVLGCPTRTREE pTree, int fFromLeft, PAVLGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLGCPTRNODECORE) RTAvlGCPtrGetBestFit(PAVLGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(PAVLGCPTRNODECORE) RTAvlGCPtrRemoveBestFit(PAVLGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(int) RTAvlGCPtrDestroy(PAVLGCPTRTREE pTree, PAVLGCPTRCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTGCPTRs - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLOGCPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLOGCPtrNodeCore +{ + /** Key value. */ + RTGCPTR Key; + /** Offset to the left leaf node, relative to this field. */ + AVLOGCPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLOGCPTR pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; + unsigned char padding[GC_ARCH_BITS == 64 ? 7 : 3]; +} AVLOGCPTRNODECORE, *PAVLOGCPTRNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLOGCPTR AVLOGCPTRTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLOGCPTRTREE *PAVLOGCPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLOGCPTRTREE *PPAVLOGCPTRNODECORE; + +/** Callback function for RTAvloGCPtrDoWithAll(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLOGCPTRCALLBACK(PAVLOGCPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvloGCPtrDoWithAll(). */ +typedef AVLOGCPTRCALLBACK *PAVLOGCPTRCALLBACK; + +RTDECL(bool) RTAvloGCPtrInsert(PAVLOGCPTRTREE pTree, PAVLOGCPTRNODECORE pNode); +RTDECL(PAVLOGCPTRNODECORE) RTAvloGCPtrRemove(PAVLOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLOGCPTRNODECORE) RTAvloGCPtrGet(PAVLOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(int) RTAvloGCPtrDoWithAll(PAVLOGCPTRTREE pTree, int fFromLeft, PAVLOGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLOGCPTRNODECORE) RTAvloGCPtrGetBestFit(PAVLOGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(PAVLOGCPTRNODECORE) RTAvloGCPtrRemoveBestFit(PAVLOGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(int) RTAvloGCPtrDestroy(PAVLOGCPTRTREE pTree, PAVLOGCPTRCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTGCPTR ranges. + * @{ + */ + +/** + * AVL Core node. + */ +typedef struct _AVLRGCPtrNodeCore +{ + /** First key value in the range (inclusive). */ + RTGCPTR Key; + /** Last key value in the range (inclusive). */ + RTGCPTR KeyLast; + /** Offset to the left leaf node, relative to this field. */ + struct _AVLRGCPtrNodeCore *pLeft; + /** Offset to the right leaf node, relative to this field. */ + struct _AVLRGCPtrNodeCore *pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLRGCPTRNODECORE, *PAVLRGCPTRNODECORE; + +/** A offset base tree with RTGCPTR keys. */ +typedef PAVLRGCPTRNODECORE AVLRGCPTRTREE; +/** Pointer to an offset base tree with RTGCPTR keys. */ +typedef AVLRGCPTRTREE *PAVLRGCPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLRGCPTRTREE *PPAVLRGCPTRNODECORE; + +/** Callback function for RTAvlrGCPtrDoWithAll() and RTAvlrGCPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLRGCPTRCALLBACK(PAVLRGCPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlrGCPtrDoWithAll() and RTAvlrGCPtrDestroy(). */ +typedef AVLRGCPTRCALLBACK *PAVLRGCPTRCALLBACK; + +RTDECL(bool) RTAvlrGCPtrInsert( PAVLRGCPTRTREE pTree, PAVLRGCPTRNODECORE pNode); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrRemove( PAVLRGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrGet( PAVLRGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrGetBestFit( PAVLRGCPTRTREE pTree, RTGCPTR Key, bool fAbove); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrRangeGet( PAVLRGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrRangeRemove( PAVLRGCPTRTREE pTree, RTGCPTR Key); +RTDECL(int) RTAvlrGCPtrDoWithAll( PAVLRGCPTRTREE pTree, int fFromLeft, PAVLRGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrGCPtrDestroy( PAVLRGCPTRTREE pTree, PAVLRGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrGetRoot( PAVLRGCPTRTREE pTree); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrGetLeft( PAVLRGCPTRNODECORE pNode); +RTDECL(PAVLRGCPTRNODECORE) RTAvlrGCPtrGetRight( PAVLRGCPTRNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTGCPTR ranges - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLROGCPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLROGCPtrNodeCore +{ + /** First key value in the range (inclusive). */ + RTGCPTR Key; + /** Last key value in the range (inclusive). */ + RTGCPTR KeyLast; + /** Offset to the left leaf node, relative to this field. */ + AVLROGCPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLROGCPTR pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; + unsigned char padding[GC_ARCH_BITS == 64 ? 7 : 7]; +} AVLROGCPTRNODECORE, *PAVLROGCPTRNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLROGCPTR AVLROGCPTRTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLROGCPTRTREE *PAVLROGCPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLROGCPTRTREE *PPAVLROGCPTRNODECORE; + +/** Callback function for RTAvlroGCPtrDoWithAll() and RTAvlroGCPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLROGCPTRCALLBACK(PAVLROGCPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlroGCPtrDoWithAll() and RTAvlroGCPtrDestroy(). */ +typedef AVLROGCPTRCALLBACK *PAVLROGCPTRCALLBACK; + +RTDECL(bool) RTAvlroGCPtrInsert(PAVLROGCPTRTREE pTree, PAVLROGCPTRNODECORE pNode); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrRemove(PAVLROGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrGet(PAVLROGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrGetBestFit(PAVLROGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrRangeGet(PAVLROGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrRangeRemove(PAVLROGCPTRTREE pTree, RTGCPTR Key); +RTDECL(int) RTAvlroGCPtrDoWithAll(PAVLROGCPTRTREE pTree, int fFromLeft, PAVLROGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlroGCPtrDestroy(PAVLROGCPTRTREE pTree, PAVLROGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrGetRoot(PAVLROGCPTRTREE pTree); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrGetLeft(PAVLROGCPTRNODECORE pNode); +RTDECL(PAVLROGCPTRNODECORE) RTAvlroGCPtrGetRight(PAVLROGCPTRNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTGCPTR ranges (overlapping supported) - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLROOGCPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLROOGCPtrNodeCore +{ + /** First key value in the range (inclusive). */ + RTGCPTR Key; + /** Last key value in the range (inclusive). */ + RTGCPTR KeyLast; + /** Offset to the left leaf node, relative to this field. */ + AVLROOGCPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLROOGCPTR pRight; + /** Pointer to the list of string with the same key. Don't touch. */ + AVLROOGCPTR pList; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLROOGCPTRNODECORE, *PAVLROOGCPTRNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLROOGCPTR AVLROOGCPTRTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLROOGCPTRTREE *PAVLROOGCPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLROOGCPTRTREE *PPAVLROOGCPTRNODECORE; + +/** Callback function for RTAvlrooGCPtrDoWithAll() and RTAvlrooGCPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLROOGCPTRCALLBACK(PAVLROOGCPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlrooGCPtrDoWithAll() and RTAvlrooGCPtrDestroy(). */ +typedef AVLROOGCPTRCALLBACK *PAVLROOGCPTRCALLBACK; + +RTDECL(bool) RTAvlrooGCPtrInsert(PAVLROOGCPTRTREE pTree, PAVLROOGCPTRNODECORE pNode); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrRemove(PAVLROOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGet(PAVLROOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGetBestFit(PAVLROOGCPTRTREE ppTree, RTGCPTR Key, bool fAbove); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrRangeGet(PAVLROOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrRangeRemove(PAVLROOGCPTRTREE pTree, RTGCPTR Key); +RTDECL(int) RTAvlrooGCPtrDoWithAll(PAVLROOGCPTRTREE pTree, int fFromLeft, PAVLROOGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrooGCPtrDestroy(PAVLROOGCPTRTREE pTree, PAVLROOGCPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGetRoot(PAVLROOGCPTRTREE pTree); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGetLeft(PAVLROOGCPTRNODECORE pNode); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGetRight(PAVLROOGCPTRNODECORE pNode); +RTDECL(PAVLROOGCPTRNODECORE) RTAvlrooGCPtrGetNextEqual(PAVLROOGCPTRNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTUINTPTR. + * @{ + */ + +/** + * AVL RTUINTPTR node core. + */ +typedef struct _AVLUIntPtrNodeCore +{ + /** Key value. */ + RTUINTPTR Key; + /** Offset to the left leaf node, relative to this field. */ + struct _AVLUIntPtrNodeCore *pLeft; + /** Offset to the right leaf node, relative to this field. */ + struct _AVLUIntPtrNodeCore *pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLUINTPTRNODECORE; +/** Pointer to a RTUINTPTR AVL node core.*/ +typedef AVLUINTPTRNODECORE *PAVLUINTPTRNODECORE; + +/** A pointer based tree with RTUINTPTR keys. */ +typedef PAVLUINTPTRNODECORE AVLUINTPTRTREE; +/** Pointer to an offset base tree with RTUINTPTR keys. */ +typedef AVLUINTPTRTREE *PAVLUINTPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a pointer. */ +typedef AVLUINTPTRTREE *PPAVLUINTPTRNODECORE; + +/** Callback function for RTAvlUIntPtrDoWithAll() and RTAvlUIntPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLUINTPTRCALLBACK(PAVLUINTPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlUIntPtrDoWithAll() and RTAvlUIntPtrDestroy(). */ +typedef AVLUINTPTRCALLBACK *PAVLUINTPTRCALLBACK; + +RTDECL(bool) RTAvlUIntPtrInsert( PAVLUINTPTRTREE pTree, PAVLUINTPTRNODECORE pNode); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrRemove( PAVLUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrGet( PAVLUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrGetBestFit(PAVLUINTPTRTREE pTree, RTUINTPTR Key, bool fAbove); +RTDECL(int) RTAvlUIntPtrDoWithAll( PAVLUINTPTRTREE pTree, int fFromLeft, PAVLUINTPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlUIntPtrDestroy( PAVLUINTPTRTREE pTree, PAVLUINTPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrGetRoot( PAVLUINTPTRTREE pTree); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrGetLeft( PAVLUINTPTRNODECORE pNode); +RTDECL(PAVLUINTPTRNODECORE) RTAvlUIntPtrGetRight( PAVLUINTPTRNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTUINTPTR ranges. + * @{ + */ + +/** + * AVL RTUINTPTR range node core. + */ +typedef struct _AVLRUIntPtrNodeCore +{ + /** First key value in the range (inclusive). */ + RTUINTPTR Key; + /** Last key value in the range (inclusive). */ + RTUINTPTR KeyLast; + /** Offset to the left leaf node, relative to this field. */ + struct _AVLRUIntPtrNodeCore *pLeft; + /** Offset to the right leaf node, relative to this field. */ + struct _AVLRUIntPtrNodeCore *pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLRUINTPTRNODECORE; +/** Pointer to an AVL RTUINTPTR range node code. */ +typedef AVLRUINTPTRNODECORE *PAVLRUINTPTRNODECORE; + +/** A pointer based tree with RTUINTPTR ranges. */ +typedef PAVLRUINTPTRNODECORE AVLRUINTPTRTREE; +/** Pointer to a pointer based tree with RTUINTPTR ranges. */ +typedef AVLRUINTPTRTREE *PAVLRUINTPTRTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a pointer. */ +typedef AVLRUINTPTRTREE *PPAVLRUINTPTRNODECORE; + +/** Callback function for RTAvlrUIntPtrDoWithAll() and RTAvlrUIntPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLRUINTPTRCALLBACK(PAVLRUINTPTRNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlrUIntPtrDoWithAll() and RTAvlrUIntPtrDestroy(). */ +typedef AVLRUINTPTRCALLBACK *PAVLRUINTPTRCALLBACK; + +RTDECL(bool) RTAvlrUIntPtrInsert( PAVLRUINTPTRTREE pTree, PAVLRUINTPTRNODECORE pNode); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrRemove( PAVLRUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrGet( PAVLRUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrGetBestFit( PAVLRUINTPTRTREE pTree, RTUINTPTR Key, bool fAbove); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrRangeGet( PAVLRUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrRangeRemove(PAVLRUINTPTRTREE pTree, RTUINTPTR Key); +RTDECL(int) RTAvlrUIntPtrDoWithAll( PAVLRUINTPTRTREE pTree, int fFromLeft, PAVLRUINTPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrUIntPtrDestroy( PAVLRUINTPTRTREE pTree, PAVLRUINTPTRCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrGetRoot( PAVLRUINTPTRTREE pTree); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrGetLeft( PAVLRUINTPTRNODECORE pNode); +RTDECL(PAVLRUINTPTRNODECORE) RTAvlrUIntPtrGetRight( PAVLRUINTPTRNODECORE pNode); + +/** @} */ + + +/** AVL tree of RTHCPHYSes - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLOHCPHYS; + +/** + * AVL Core node. + */ +typedef struct _AVLOHCPhysNodeCore +{ + /** Key value. */ + RTHCPHYS Key; + /** Offset to the left leaf node, relative to this field. */ + AVLOHCPHYS pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLOHCPHYS pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +#if HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64 + unsigned char Padding[7]; /**< Alignment padding. */ +#endif +} AVLOHCPHYSNODECORE, *PAVLOHCPHYSNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLOHCPHYS AVLOHCPHYSTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLOHCPHYSTREE *PAVLOHCPHYSTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLOHCPHYSTREE *PPAVLOHCPHYSNODECORE; + +/** Callback function for RTAvloHCPhysDoWithAll() and RTAvloHCPhysDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLOHCPHYSCALLBACK(PAVLOHCPHYSNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvloHCPhysDoWithAll() and RTAvloHCPhysDestroy(). */ +typedef AVLOHCPHYSCALLBACK *PAVLOHCPHYSCALLBACK; + +RTDECL(bool) RTAvloHCPhysInsert(PAVLOHCPHYSTREE pTree, PAVLOHCPHYSNODECORE pNode); +RTDECL(PAVLOHCPHYSNODECORE) RTAvloHCPhysRemove(PAVLOHCPHYSTREE pTree, RTHCPHYS Key); +RTDECL(PAVLOHCPHYSNODECORE) RTAvloHCPhysGet(PAVLOHCPHYSTREE pTree, RTHCPHYS Key); +RTDECL(int) RTAvloHCPhysDoWithAll(PAVLOHCPHYSTREE pTree, int fFromLeft, PAVLOHCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLOHCPHYSNODECORE) RTAvloHCPhysGetBestFit(PAVLOHCPHYSTREE ppTree, RTHCPHYS Key, bool fAbove); +RTDECL(PAVLOHCPHYSNODECORE) RTAvloHCPhysRemoveBestFit(PAVLOHCPHYSTREE ppTree, RTHCPHYS Key, bool fAbove); +RTDECL(int) RTAvloHCPhysDestroy(PAVLOHCPHYSTREE pTree, PAVLOHCPHYSCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + + +/** AVL tree of RTIOPORTs - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLOIOPORTPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLOIOPortNodeCore +{ + /** Offset to the left leaf node, relative to this field. */ + AVLOIOPORTPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLOIOPORTPTR pRight; + /** Key value. */ + RTIOPORT Key; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLOIOPORTNODECORE, *PAVLOIOPORTNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLOIOPORTPTR AVLOIOPORTTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLOIOPORTTREE *PAVLOIOPORTTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLOIOPORTTREE *PPAVLOIOPORTNODECORE; + +/** Callback function for RTAvloIOPortDoWithAll() and RTAvloIOPortDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLOIOPORTCALLBACK(PAVLOIOPORTNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvloIOPortDoWithAll() and RTAvloIOPortDestroy(). */ +typedef AVLOIOPORTCALLBACK *PAVLOIOPORTCALLBACK; + +RTDECL(bool) RTAvloIOPortInsert(PAVLOIOPORTTREE pTree, PAVLOIOPORTNODECORE pNode); +RTDECL(PAVLOIOPORTNODECORE) RTAvloIOPortRemove(PAVLOIOPORTTREE pTree, RTIOPORT Key); +RTDECL(PAVLOIOPORTNODECORE) RTAvloIOPortGet(PAVLOIOPORTTREE pTree, RTIOPORT Key); +RTDECL(int) RTAvloIOPortDoWithAll(PAVLOIOPORTTREE pTree, int fFromLeft, PAVLOIOPORTCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLOIOPORTNODECORE) RTAvloIOPortGetBestFit(PAVLOIOPORTTREE ppTree, RTIOPORT Key, bool fAbove); +RTDECL(PAVLOIOPORTNODECORE) RTAvloIOPortRemoveBestFit(PAVLOIOPORTTREE ppTree, RTIOPORT Key, bool fAbove); +RTDECL(int) RTAvloIOPortDestroy(PAVLOIOPORTTREE pTree, PAVLOIOPORTCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTIOPORT ranges - using relative offsets internally. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef int32_t AVLROIOPORTPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLROIOPortNodeCore +{ + /** First key value in the range (inclusive). */ + RTIOPORT Key; + /** Last key value in the range (inclusive). */ + RTIOPORT KeyLast; + /** Offset to the left leaf node, relative to this field. */ + AVLROIOPORTPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLROIOPORTPTR pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLROIOPORTNODECORE, *PAVLROIOPORTNODECORE; + +/** A offset base tree with uint32_t keys. */ +typedef AVLROIOPORTPTR AVLROIOPORTTREE; +/** Pointer to an offset base tree with uint32_t keys. */ +typedef AVLROIOPORTTREE *PAVLROIOPORTTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLROIOPORTTREE *PPAVLROIOPORTNODECORE; + +/** Callback function for RTAvlroIOPortDoWithAll() and RTAvlroIOPortDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLROIOPORTCALLBACK(PAVLROIOPORTNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlroIOPortDoWithAll() and RTAvlroIOPortDestroy(). */ +typedef AVLROIOPORTCALLBACK *PAVLROIOPORTCALLBACK; + +RTDECL(bool) RTAvlroIOPortInsert(PAVLROIOPORTTREE pTree, PAVLROIOPORTNODECORE pNode); +RTDECL(PAVLROIOPORTNODECORE) RTAvlroIOPortRemove(PAVLROIOPORTTREE pTree, RTIOPORT Key); +RTDECL(PAVLROIOPORTNODECORE) RTAvlroIOPortGet(PAVLROIOPORTTREE pTree, RTIOPORT Key); +RTDECL(PAVLROIOPORTNODECORE) RTAvlroIOPortRangeGet(PAVLROIOPORTTREE pTree, RTIOPORT Key); +RTDECL(PAVLROIOPORTNODECORE) RTAvlroIOPortRangeRemove(PAVLROIOPORTTREE pTree, RTIOPORT Key); +RTDECL(int) RTAvlroIOPortDoWithAll(PAVLROIOPORTTREE pTree, int fFromLeft, PAVLROIOPORTCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlroIOPortDestroy(PAVLROIOPORTTREE pTree, PAVLROIOPORTCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTHCPHYSes. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef struct _AVLHCPhysNodeCore *AVLHCPHYSPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLHCPhysNodeCore +{ + /** Offset to the left leaf node, relative to this field. */ + AVLHCPHYSPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLHCPHYSPTR pRight; + /** Key value. */ + RTHCPHYS Key; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLHCPHYSNODECORE, *PAVLHCPHYSNODECORE; + +/** A offset base tree with RTHCPHYS keys. */ +typedef AVLHCPHYSPTR AVLHCPHYSTREE; +/** Pointer to an offset base tree with RTHCPHYS keys. */ +typedef AVLHCPHYSTREE *PAVLHCPHYSTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLHCPHYSTREE *PPAVLHCPHYSNODECORE; + +/** Callback function for RTAvlHCPhysDoWithAll() and RTAvlHCPhysDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLHCPHYSCALLBACK(PAVLHCPHYSNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlHCPhysDoWithAll() and RTAvlHCPhysDestroy(). */ +typedef AVLHCPHYSCALLBACK *PAVLHCPHYSCALLBACK; + +RTDECL(bool) RTAvlHCPhysInsert(PAVLHCPHYSTREE pTree, PAVLHCPHYSNODECORE pNode); +RTDECL(PAVLHCPHYSNODECORE) RTAvlHCPhysRemove(PAVLHCPHYSTREE pTree, RTHCPHYS Key); +RTDECL(PAVLHCPHYSNODECORE) RTAvlHCPhysGet(PAVLHCPHYSTREE pTree, RTHCPHYS Key); +RTDECL(int) RTAvlHCPhysDoWithAll(PAVLHCPHYSTREE pTree, int fFromLeft, PAVLHCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLHCPHYSNODECORE) RTAvlHCPhysGetBestFit(PAVLHCPHYSTREE ppTree, RTHCPHYS Key, bool fAbove); +RTDECL(PAVLHCPHYSNODECORE) RTAvlHCPhysRemoveBestFit(PAVLHCPHYSTREE ppTree, RTHCPHYS Key, bool fAbove); +RTDECL(int) RTAvlHCPhysDestroy(PAVLHCPHYSTREE pTree, PAVLHCPHYSCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + +/** AVL tree of RTGCPHYSes. + * @{ + */ + +/** + * AVL 'pointer' type for the relative offset pointer scheme. + */ +typedef struct _AVLGCPhysNodeCore *AVLGCPHYSPTR; + +/** + * AVL Core node. + */ +typedef struct _AVLGCPhysNodeCore +{ + /** Offset to the left leaf node, relative to this field. */ + AVLGCPHYSPTR pLeft; + /** Offset to the right leaf node, relative to this field. */ + AVLGCPHYSPTR pRight; + /** Key value. */ + RTGCPHYS Key; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLGCPHYSNODECORE, *PAVLGCPHYSNODECORE; + +/** A offset base tree with RTGCPHYS keys. */ +typedef AVLGCPHYSPTR AVLGCPHYSTREE; +/** Pointer to an offset base tree with RTGCPHYS keys. */ +typedef AVLGCPHYSTREE *PAVLGCPHYSTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLGCPHYSTREE *PPAVLGCPHYSNODECORE; + +/** Callback function for RTAvlGCPhysDoWithAll() and RTAvlGCPhysDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLGCPHYSCALLBACK(PAVLGCPHYSNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlGCPhysDoWithAll() and RTAvlGCPhysDestroy(). */ +typedef AVLGCPHYSCALLBACK *PAVLGCPHYSCALLBACK; + +RTDECL(bool) RTAvlGCPhysInsert(PAVLGCPHYSTREE pTree, PAVLGCPHYSNODECORE pNode); +RTDECL(PAVLGCPHYSNODECORE) RTAvlGCPhysRemove(PAVLGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(PAVLGCPHYSNODECORE) RTAvlGCPhysGet(PAVLGCPHYSTREE pTree, RTGCPHYS Key); +RTDECL(int) RTAvlGCPhysDoWithAll(PAVLGCPHYSTREE pTree, int fFromLeft, PAVLGCPHYSCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLGCPHYSNODECORE) RTAvlGCPhysGetBestFit(PAVLGCPHYSTREE ppTree, RTGCPHYS Key, bool fAbove); +RTDECL(PAVLGCPHYSNODECORE) RTAvlGCPhysRemoveBestFit(PAVLGCPHYSTREE ppTree, RTGCPHYS Key, bool fAbove); +RTDECL(int) RTAvlGCPhysDestroy(PAVLGCPHYSTREE pTree, PAVLGCPHYSCALLBACK pfnCallBack, void *pvParam); + +/** @} */ + + +/** AVL tree of RTFOFF ranges. + * @{ + */ + +/** + * AVL Core node. + */ +typedef struct _AVLRFOFFNodeCore +{ + /** First key value in the range (inclusive). */ + RTFOFF Key; + /** Last key value in the range (inclusive). */ + RTFOFF KeyLast; + /** Offset to the left leaf node, relative to this field. */ + struct _AVLRFOFFNodeCore *pLeft; + /** Offset to the right leaf node, relative to this field. */ + struct _AVLRFOFFNodeCore *pRight; + /** Height of this tree: max(height(left), height(right)) + 1 */ + unsigned char uchHeight; +} AVLRFOFFNODECORE, *PAVLRFOFFNODECORE; + +/** A pointer based tree with RTFOFF ranges. */ +typedef PAVLRFOFFNODECORE AVLRFOFFTREE; +/** Pointer to a pointer based tree with RTFOFF ranges. */ +typedef AVLRFOFFTREE *PAVLRFOFFTREE; + +/** Pointer to an internal tree pointer. + * In this case it's a pointer to a relative offset. */ +typedef AVLRFOFFTREE *PPAVLRFOFFNODECORE; + +/** Callback function for RTAvlrGCPtrDoWithAll() and RTAvlrGCPtrDestroy(). + * @returns IPRT status codes. */ +typedef DECLCALLBACK(int) AVLRFOFFCALLBACK(PAVLRFOFFNODECORE pNode, void *pvUser); +/** Pointer to callback function for RTAvlrGCPtrDoWithAll() and RTAvlrGCPtrDestroy(). */ +typedef AVLRFOFFCALLBACK *PAVLRFOFFCALLBACK; + +RTDECL(bool) RTAvlrFileOffsetInsert( PAVLRFOFFTREE pTree, PAVLRFOFFNODECORE pNode); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetRemove( PAVLRFOFFTREE pTree, RTFOFF Key); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetGet( PAVLRFOFFTREE pTree, RTFOFF Key); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetGetBestFit( PAVLRFOFFTREE pTree, RTFOFF Key, bool fAbove); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetRangeGet( PAVLRFOFFTREE pTree, RTFOFF Key); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetRangeRemove( PAVLRFOFFTREE pTree, RTFOFF Key); +RTDECL(int) RTAvlrFileOffsetDoWithAll( PAVLRFOFFTREE pTree, int fFromLeft, PAVLRFOFFCALLBACK pfnCallBack, void *pvParam); +RTDECL(int) RTAvlrFileOffsetDestroy( PAVLRFOFFTREE pTree, PAVLRFOFFCALLBACK pfnCallBack, void *pvParam); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetGetRoot( PAVLRFOFFTREE pTree); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetGetLeft( PAVLRFOFFNODECORE pNode); +RTDECL(PAVLRFOFFNODECORE) RTAvlrFileOffsetGetRight( PAVLRFOFFNODECORE pNode); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/cdefs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/cdefs.h @@ -0,0 +1,3867 @@ +/** @file + * IPRT - Common C and C++ definitions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_cdefs_h +#define ___iprt_cdefs_h + + +/** @defgroup grp_rt_cdefs IPRT Common Definitions and Macros + * @{ + */ + +/** @def RT_C_DECLS_BEGIN + * Used to start a block of function declarations which are shared + * between C and C++ program. + */ + +/** @def RT_C_DECLS_END + * Used to end a block of function declarations which are shared + * between C and C++ program. + */ + +#if defined(__cplusplus) +# define RT_C_DECLS_BEGIN extern "C" { +# define RT_C_DECLS_END } +#else +# define RT_C_DECLS_BEGIN +# define RT_C_DECLS_END +#endif + + +/* + * Shut up DOXYGEN warnings and guide it properly thru the code. + */ +#ifdef DOXYGEN_RUNNING +# define __AMD64__ +# define __X86__ +# define RT_ARCH_AMD64 +# define RT_ARCH_X86 +# define RT_ARCH_SPARC +# define RT_ARCH_SPARC64 +# define IN_RING0 +# define IN_RING3 +# define IN_RC +# define IN_RC +# define IN_RT_RC +# define IN_RT_R0 +# define IN_RT_R3 +# define IN_RT_STATIC +# define RT_STRICT +# define RT_NO_STRICT +# define RT_LOCK_STRICT +# define RT_LOCK_NO_STRICT +# define RT_LOCK_STRICT_ORDER +# define RT_LOCK_NO_STRICT_ORDER +# define RT_BREAKPOINT +# define RT_NO_DEPRECATED_MACROS +# define RT_EXCEPTIONS_ENABLED +# define RT_BIG_ENDIAN +# define RT_LITTLE_ENDIAN +# define RT_COMPILER_GROKS_64BIT_BITFIELDS +# define RT_COMPILER_WITH_80BIT_LONG_DOUBLE +# define RT_NO_VISIBILITY_HIDDEN +# define RT_GCC_SUPPORTS_VISIBILITY_HIDDEN +# define RT_COMPILER_SUPPORTS_VA_ARGS +# define RT_COMPILER_SUPPORTS_LAMBDA +#endif /* DOXYGEN_RUNNING */ + +/** @def RT_ARCH_X86 + * Indicates that we're compiling for the X86 architecture. + */ + +/** @def RT_ARCH_AMD64 + * Indicates that we're compiling for the AMD64 architecture. + */ + +/** @def RT_ARCH_SPARC + * Indicates that we're compiling for the SPARC V8 architecture (32-bit). + */ + +/** @def RT_ARCH_SPARC64 + * Indicates that we're compiling for the SPARC V9 architecture (64-bit). + */ +#if !defined(RT_ARCH_X86) \ + && !defined(RT_ARCH_AMD64) \ + && !defined(RT_ARCH_SPARC) \ + && !defined(RT_ARCH_SPARC64) \ + && !defined(RT_ARCH_ARM) +# if defined(__amd64__) || defined(__x86_64__) || defined(_M_X64) || defined(__AMD64__) +# define RT_ARCH_AMD64 +# elif defined(__i386__) || defined(_M_IX86) || defined(__X86__) +# define RT_ARCH_X86 +# elif defined(__sparcv9) +# define RT_ARCH_SPARC64 +# elif defined(__sparc__) +# define RT_ARCH_SPARC +# elif defined(__arm__) || defined(__arm32__) +# define RT_ARCH_ARM +# else /* PORTME: append test for new archs. */ +# error "Check what predefined macros your compiler uses to indicate architecture." +# endif +/* PORTME: append new archs checks. */ +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_AMD64) +# error "Both RT_ARCH_X86 and RT_ARCH_AMD64 cannot be defined at the same time!" +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_X86 and RT_ARCH_SPARC cannot be defined at the same time!" +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_X86 and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_AMD64) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_AMD64 and RT_ARCH_SPARC cannot be defined at the same time!" +#elif defined(RT_ARCH_AMD64) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_AMD64 and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_SPARC) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_SPARC and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_AMD64) +# error "Both RT_ARCH_ARM and RT_ARCH_AMD64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_X86) +# error "Both RT_ARCH_ARM and RT_ARCH_X86 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_ARM and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_ARM and RT_ARCH_SPARC cannot be defined at the same time!" +#endif + +/* Final check (PORTME). */ +#if (defined(RT_ARCH_X86) != 0) \ + + (defined(RT_ARCH_AMD64) != 0) \ + + (defined(RT_ARCH_SPARC) != 0) \ + + (defined(RT_ARCH_SPARC64) != 0) \ + + (defined(RT_ARCH_ARM) != 0) \ + != 1 +# error "Exactly one RT_ARCH_XXX macro shall be defined" +#endif + +/** @def RT_GNUC_PREREQ + * Shorter than fiddling with __GNUC__ and __GNUC_MINOR__. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + */ +#define RT_GNUC_PREREQ(a_MinMajor, a_MinMinor) RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, 0) +/** @def RT_GNUC_PREREQ_EX + * Simplified way of checking __GNUC__ and __GNUC_MINOR__ regardless of actual + * compiler used, returns @a a_OtherRet for other compilers. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + * @param a_OtherRet What to return for non-GCC compilers. + */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((a_MinMajor) << 16) + (a_MinMinor)) +#else +# define RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) (a_OtherRet) +#endif + +/** @def RT_MSC_PREREQ + * Convenient way of checking _MSC_VER regardless of actual compiler used + * (returns false if not MSC). + * + * @param a_MinVer Preferably a RT_MSC_VER_XXX value. + */ +#define RT_MSC_PREREQ(a_MinVer) RT_MSC_PREREQ_EX(a_MinVer, 0) +/** @def RT_MSC_PREREQ_EX + * Convenient way of checking _MSC_VER regardless of actual compiler used, + * returns @a a_OtherRet for other compilers. + * + * @param a_MinVer Preferably a RT_MSC_VER_XXX value. + * @param a_OtherRet What to return for non-MSC compilers. + */ +#if defined(_MSC_VER) +# define RT_MSC_PREREQ_EX(a_MinVer, a_OtherRet) ( (_MSC_VER) >= (a_MinVer) ) +#else +# define RT_MSC_PREREQ_EX(a_MinVer, a_OtherRet) (a_OtherRet) +#endif +/** @name RT_MSC_VER_XXX - _MSC_VER values to use with RT_MSC_PREREQ. + * @remarks The VCxxx values are derived from the CRT DLLs shipping with the + * compilers. + * @{ */ +#define RT_MSC_VER_VC50 (1100) /**< Visual C++ 5.0. */ +#define RT_MSC_VER_VC60 (1200) /**< Visual C++ 6.0. */ +#define RT_MSC_VER_VC70 (1300) /**< Visual C++ 7.0. */ +#define RT_MSC_VER_VC70 (1300) /**< Visual C++ 7.0. */ +#define RT_MSC_VER_VS2003 (1310) /**< Visual Studio 2003, aka Visual C++ 7.1. */ +#define RT_MSC_VER_VC71 RT_MSC_VER_VS2003 /**< Visual C++ 7.1, aka Visual Studio 2003. */ +#define RT_MSC_VER_VS2005 (1400) /**< Visual Studio 2005. */ +#define RT_MSC_VER_VC80 RT_MSC_VER_VS2005 /**< Visual C++ 8.0, aka Visual Studio 2008. */ +#define RT_MSC_VER_VS2008 (1500) /**< Visual Studio 2008. */ +#define RT_MSC_VER_VC90 RT_MSC_VER_VS2008 /**< Visual C++ 9.0, aka Visual Studio 2008. */ +#define RT_MSC_VER_VS2010 (1600) /**< Visual Studio 2010. */ +#define RT_MSC_VER_VC100 RT_MSC_VER_VS2010 /**< Visual C++ 10.0, aka Visual Studio 2010. */ +#define RT_MSC_VER_VS2012 (1700) /**< Visual Studio 2012. */ +#define RT_MSC_VER_VC110 RT_MSC_VER_VS2012 /**< Visual C++ 11.0, aka Visual Studio 2012. */ +#define RT_MSC_VER_VS2013 (1800) /**< Visual Studio 2013. */ +#define RT_MSC_VER_VC120 RT_MSC_VER_VS2013 /**< Visual C++ 12.0, aka Visual Studio 2013. */ +#define RT_MSC_VER_VS2015 (1900) /**< Visual Studio 2015. */ +#define RT_MSC_VER_VC140 RT_MSC_VER_VS2015 /**< Visual C++ 14.0, aka Visual Studio 2015. */ +/** @} */ + +/** @def RT_CLANG_PREREQ + * Shorter than fiddling with __clang_major__ and __clang_minor__. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + */ +#define RT_CLANG_PREREQ(a_MinMajor, a_MinMinor) RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, 0) +/** @def RT_CLANG_PREREQ_EX + * Simplified way of checking __clang_major__ and __clang_minor__ regardless of + * actual compiler used, returns @a a_OtherRet for other compilers. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + * @param a_OtherRet What to return for non-GCC compilers. + */ +#if defined(__clang_major__) && defined(__clang_minor__) +# define RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) \ + ((__clang_major__ << 16) + __clang_minor__ >= ((a_MinMajor) << 16) + (a_MinMinor)) +#else +# define RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) (a_OtherRet) +#endif + + +/** @def __X86__ + * Indicates that we're compiling for the X86 architecture. + * @deprecated + */ + +/** @def __AMD64__ + * Indicates that we're compiling for the AMD64 architecture. + * @deprecated + */ +#if !defined(__X86__) && !defined(__AMD64__) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +# if defined(RT_ARCH_AMD64) +# define __AMD64__ +# elif defined(RT_ARCH_X86) +# define __X86__ +# else +# error "Check what predefined macros your compiler uses to indicate architecture." +# endif +#elif defined(__X86__) && defined(__AMD64__) +# error "Both __X86__ and __AMD64__ cannot be defined at the same time!" +#elif defined(__X86__) && !defined(RT_ARCH_X86) +# error "__X86__ without RT_ARCH_X86!" +#elif defined(__AMD64__) && !defined(RT_ARCH_AMD64) +# error "__AMD64__ without RT_ARCH_AMD64!" +#endif + +/** @def RT_BIG_ENDIAN + * Defined if the architecture is big endian. */ +/** @def RT_LITTLE_ENDIAN + * Defined if the architecture is little endian. */ +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM) +# define RT_LITTLE_ENDIAN +#elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define RT_BIG_ENDIAN +#else +# error "PORTME: architecture endianess" +#endif +#if defined(RT_BIG_ENDIAN) && defined(RT_LITTLE_ENDIAN) +# error "Both RT_BIG_ENDIAN and RT_LITTLE_ENDIAN are defined" +#endif + + +/** @def IN_RING0 + * Used to indicate that we're compiling code which is running + * in Ring-0 Host Context. + */ + +/** @def IN_RING3 + * Used to indicate that we're compiling code which is running + * in Ring-3 Host Context. + */ + +/** @def IN_RC + * Used to indicate that we're compiling code which is running + * in the Raw-mode Context (implies R0). + */ +#if !defined(IN_RING3) && !defined(IN_RING0) && !defined(IN_RC) && !defined(IN_RC) +# error "You must define which context the compiled code should run in; IN_RING3, IN_RING0 or IN_RC" +#endif +#if (defined(IN_RING3) && (defined(IN_RING0) || defined(IN_RC)) ) \ + || (defined(IN_RING0) && (defined(IN_RING3) || defined(IN_RC)) ) \ + || (defined(IN_RC) && (defined(IN_RING3) || defined(IN_RING0)) ) +# error "Only one of the IN_RING3, IN_RING0, IN_RC defines should be defined." +#endif + + +/** @def ARCH_BITS + * Defines the bit count of the current context. + */ +#if !defined(ARCH_BITS) || defined(DOXYGEN_RUNNING) +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) +# define ARCH_BITS 64 +# elif !defined(__I86__) || !defined(__WATCOMC__) +# define ARCH_BITS 32 +# else +# define ARCH_BITS 16 +# endif +#endif + +/* ARCH_BITS validation (PORTME). */ +#if ARCH_BITS == 64 + #if defined(RT_ARCH_X86) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_ARM) + # error "ARCH_BITS=64 but non-64-bit RT_ARCH_XXX defined." + #endif + #if !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_SPARC64) + # error "ARCH_BITS=64 but no 64-bit RT_ARCH_XXX defined." + #endif + +#elif ARCH_BITS == 32 + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) + # error "ARCH_BITS=32 but non-32-bit RT_ARCH_XXX defined." + #endif + #if !defined(RT_ARCH_X86) && !defined(RT_ARCH_SPARC) && !defined(RT_ARCH_ARM) + # error "ARCH_BITS=32 but no 32-bit RT_ARCH_XXX defined." + #endif + +#elif ARCH_BITS == 16 + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) || defined(RT_ARCH_ARM) + # error "ARCH_BITS=16 but non-16-bit RT_ARCH_XX defined." + #endif + #if !defined(RT_ARCH_X86) + # error "ARCH_BITS=16 but RT_ARCH_X86 isn't defined." + #endif + +#else +# error "Unsupported ARCH_BITS value!" +#endif + +/** @def HC_ARCH_BITS + * Defines the host architecture bit count. + */ +#if !defined(HC_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifndef IN_RC +# define HC_ARCH_BITS ARCH_BITS +# else +# define HC_ARCH_BITS 32 +# endif +#endif + +/** @def GC_ARCH_BITS + * Defines the guest architecture bit count. + */ +#if !defined(GC_ARCH_BITS) && !defined(DOXYGEN_RUNNING) +# ifdef VBOX_WITH_64_BITS_GUESTS +# define GC_ARCH_BITS 64 +# else +# define GC_ARCH_BITS 32 +# endif +#endif + +/** @def R3_ARCH_BITS + * Defines the host ring-3 architecture bit count. + */ +#if !defined(R3_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RING3 +# define R3_ARCH_BITS ARCH_BITS +# else +# define R3_ARCH_BITS HC_ARCH_BITS +# endif +#endif + +/** @def R0_ARCH_BITS + * Defines the host ring-0 architecture bit count. + */ +#if !defined(R0_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RING0 +# define R0_ARCH_BITS ARCH_BITS +# else +# define R0_ARCH_BITS HC_ARCH_BITS +# endif +#endif + +/** @def GC_ARCH_BITS + * Defines the guest architecture bit count. + */ +#if !defined(GC_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RC +# define GC_ARCH_BITS ARCH_BITS +# else +# define GC_ARCH_BITS 32 +# endif +#endif + + + +/** @name RT_OPSYS_XXX - Operative System Identifiers. + * These are the value that the RT_OPSYS \#define can take. @{ + */ +/** Unknown OS. */ +#define RT_OPSYS_UNKNOWN 0 +/** OS Agnostic. */ +#define RT_OPSYS_AGNOSTIC 1 +/** Darwin - aka Mac OS X. */ +#define RT_OPSYS_DARWIN 2 +/** DragonFly BSD. */ +#define RT_OPSYS_DRAGONFLY 3 +/** DOS. */ +#define RT_OPSYS_DOS 4 +/** FreeBSD. */ +#define RT_OPSYS_FREEBSD 5 +/** Haiku. */ +#define RT_OPSYS_HAIKU 6 +/** Linux. */ +#define RT_OPSYS_LINUX 7 +/** L4. */ +#define RT_OPSYS_L4 8 +/** Minix. */ +#define RT_OPSYS_MINIX 9 +/** NetBSD. */ +#define RT_OPSYS_NETBSD 11 +/** Netware. */ +#define RT_OPSYS_NETWARE 12 +/** NT (native). */ +#define RT_OPSYS_NT 13 +/** OpenBSD. */ +#define RT_OPSYS_OPENBSD 14 +/** OS/2. */ +#define RT_OPSYS_OS2 15 +/** Plan 9. */ +#define RT_OPSYS_PLAN9 16 +/** QNX. */ +#define RT_OPSYS_QNX 17 +/** Solaris. */ +#define RT_OPSYS_SOLARIS 18 +/** UEFI. */ +#define RT_OPSYS_UEFI 19 +/** Windows. */ +#define RT_OPSYS_WINDOWS 20 +/** The max RT_OPSYS_XXX value (exclusive). */ +#define RT_OPSYS_MAX 21 +/** @} */ + +/** @def RT_OPSYS + * Indicates which OS we're targeting. It's a \#define with is + * assigned one of the RT_OPSYS_XXX defines above. + * + * So to test if we're on FreeBSD do the following: + * @code + * #if RT_OPSYS == RT_OPSYS_FREEBSD + * some_funky_freebsd_specific_stuff(); + * #endif + * @endcode + */ + +/* + * Set RT_OPSYS_XXX according to RT_OS_XXX. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: # elif defined(RT_OS_\1)\n# define RT_OPSYS RT_OPSYS_\1 + */ +#ifndef RT_OPSYS +# if defined(RT_OS_UNKNOWN) || defined(DOXYGEN_RUNNING) +# define RT_OPSYS RT_OPSYS_UNKNOWN +# elif defined(RT_OS_AGNOSTIC) +# define RT_OPSYS RT_OPSYS_AGNOSTIC +# elif defined(RT_OS_DARWIN) +# define RT_OPSYS RT_OPSYS_DARWIN +# elif defined(RT_OS_DRAGONFLY) +# define RT_OPSYS RT_OPSYS_DRAGONFLY +# elif defined(RT_OS_DOS) +# define RT_OPSYS RT_OPSYS_DOS +# elif defined(RT_OS_FREEBSD) +# define RT_OPSYS RT_OPSYS_FREEBSD +# elif defined(RT_OS_HAIKU) +# define RT_OPSYS RT_OPSYS_HAIKU +# elif defined(RT_OS_LINUX) +# define RT_OPSYS RT_OPSYS_LINUX +# elif defined(RT_OS_L4) +# define RT_OPSYS RT_OPSYS_L4 +# elif defined(RT_OS_MINIX) +# define RT_OPSYS RT_OPSYS_MINIX +# elif defined(RT_OS_NETBSD) +# define RT_OPSYS RT_OPSYS_NETBSD +# elif defined(RT_OS_NETWARE) +# define RT_OPSYS RT_OPSYS_NETWARE +# elif defined(RT_OS_NT) +# define RT_OPSYS RT_OPSYS_NT +# elif defined(RT_OS_OPENBSD) +# define RT_OPSYS RT_OPSYS_OPENBSD +# elif defined(RT_OS_OS2) +# define RT_OPSYS RT_OPSYS_OS2 +# elif defined(RT_OS_PLAN9) +# define RT_OPSYS RT_OPSYS_PLAN9 +# elif defined(RT_OS_QNX) +# define RT_OPSYS RT_OPSYS_QNX +# elif defined(RT_OS_SOLARIS) +# define RT_OPSYS RT_OPSYS_SOLARIS +# elif defined(RT_OS_UEFI) +# define RT_OPSYS RT_OPSYS_UEFI +# elif defined(RT_OS_WINDOWS) +# define RT_OPSYS RT_OPSYS_WINDOWS +# endif +#endif + +/* + * Guess RT_OPSYS based on compiler predefined macros. + */ +#ifndef RT_OPSYS +# if defined(__APPLE__) +# define RT_OPSYS RT_OPSYS_DARWIN +# elif defined(__DragonFly__) +# define RT_OPSYS RT_OPSYS_DRAGONFLY +# elif defined(__FreeBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_FREEBSD +# elif defined(__gnu_linux__) +# define RT_OPSYS RT_OPSYS_LINUX +# elif defined(__NetBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_NETBSD +# elif defined(__OpenBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_OPENBSD +# elif defined(__OS2__) +# define RT_OPSYS RT_OPSYS_OS2 +# elif defined(__sun__) || defined(__SunOS__) || defined(__sun) || defined(__SunOS) +# define RT_OPSYS RT_OPSYS_SOLARIS +# elif defined(_WIN32) || defined(_WIN64) +# define RT_OPSYS RT_OPSYS_WINDOWS +# elif defined(MSDOS) || defined(_MSDOS) || defined(DOS16RM) /* OW+MSC || MSC || DMC */ +# define RT_OPSYS RT_OPSYS_DOS +# else +# error "Port Me" +# endif +#endif + +#if RT_OPSYS < RT_OPSYS_UNKNOWN || RT_OPSYS >= RT_OPSYS_MAX +# error "Invalid RT_OPSYS value." +#endif + +/* + * Do some consistency checks. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: #if defined(RT_OS_\1) && RT_OPSYS != RT_OPSYS_\1\n# error RT_OPSYS vs RT_OS_\1\n#endif + */ +#if defined(RT_OS_UNKNOWN) && RT_OPSYS != RT_OPSYS_UNKNOWN +# error RT_OPSYS vs RT_OS_UNKNOWN +#endif +#if defined(RT_OS_AGNOSTIC) && RT_OPSYS != RT_OPSYS_AGNOSTIC +# error RT_OPSYS vs RT_OS_AGNOSTIC +#endif +#if defined(RT_OS_DARWIN) && RT_OPSYS != RT_OPSYS_DARWIN +# error RT_OPSYS vs RT_OS_DARWIN +#endif +#if defined(RT_OS_DRAGONFLY) && RT_OPSYS != RT_OPSYS_DRAGONFLY +# error RT_OPSYS vs RT_OS_DRAGONFLY +#endif +#if defined(RT_OS_DOS) && RT_OPSYS != RT_OPSYS_DOS +# error RT_OPSYS vs RT_OS_DOS +#endif +#if defined(RT_OS_FREEBSD) && RT_OPSYS != RT_OPSYS_FREEBSD +# error RT_OPSYS vs RT_OS_FREEBSD +#endif +#if defined(RT_OS_HAIKU) && RT_OPSYS != RT_OPSYS_HAIKU +# error RT_OPSYS vs RT_OS_HAIKU +#endif +#if defined(RT_OS_LINUX) && RT_OPSYS != RT_OPSYS_LINUX +# error RT_OPSYS vs RT_OS_LINUX +#endif +#if defined(RT_OS_L4) && RT_OPSYS != RT_OPSYS_L4 +# error RT_OPSYS vs RT_OS_L4 +#endif +#if defined(RT_OS_MINIX) && RT_OPSYS != RT_OPSYS_MINIX +# error RT_OPSYS vs RT_OS_MINIX +#endif +#if defined(RT_OS_NETBSD) && RT_OPSYS != RT_OPSYS_NETBSD +# error RT_OPSYS vs RT_OS_NETBSD +#endif +#if defined(RT_OS_NETWARE) && RT_OPSYS != RT_OPSYS_NETWARE +# error RT_OPSYS vs RT_OS_NETWARE +#endif +#if defined(RT_OS_NT) && RT_OPSYS != RT_OPSYS_NT +# error RT_OPSYS vs RT_OS_NT +#endif +#if defined(RT_OS_OPENBSD) && RT_OPSYS != RT_OPSYS_OPENBSD +# error RT_OPSYS vs RT_OS_OPENBSD +#endif +#if defined(RT_OS_OS2) && RT_OPSYS != RT_OPSYS_OS2 +# error RT_OPSYS vs RT_OS_OS2 +#endif +#if defined(RT_OS_PLAN9) && RT_OPSYS != RT_OPSYS_PLAN9 +# error RT_OPSYS vs RT_OS_PLAN9 +#endif +#if defined(RT_OS_QNX) && RT_OPSYS != RT_OPSYS_QNX +# error RT_OPSYS vs RT_OS_QNX +#endif +#if defined(RT_OS_SOLARIS) && RT_OPSYS != RT_OPSYS_SOLARIS +# error RT_OPSYS vs RT_OS_SOLARIS +#endif +#if defined(RT_OS_UEFI) && RT_OPSYS != RT_OPSYS_UEFI +# error RT_OPSYS vs RT_OS_UEFI +#endif +#if defined(RT_OS_WINDOWS) && RT_OPSYS != RT_OPSYS_WINDOWS +# error RT_OPSYS vs RT_OS_WINDOWS +#endif + +/* + * Make sure the RT_OS_XXX macro is defined. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: #elif RT_OPSYS == RT_OPSYS_\1\n# ifndef RT_OS_\1\n# define RT_OS_\1\n# endif + */ +#if RT_OPSYS == RT_OPSYS_UNKNOWN +# ifndef RT_OS_UNKNOWN +# define RT_OS_UNKNOWN +# endif +#elif RT_OPSYS == RT_OPSYS_AGNOSTIC +# ifndef RT_OS_AGNOSTIC +# define RT_OS_AGNOSTIC +# endif +#elif RT_OPSYS == RT_OPSYS_DARWIN +# ifndef RT_OS_DARWIN +# define RT_OS_DARWIN +# endif +#elif RT_OPSYS == RT_OPSYS_DRAGONFLY +# ifndef RT_OS_DRAGONFLY +# define RT_OS_DRAGONFLY +# endif +#elif RT_OPSYS == RT_OPSYS_DOS +# ifndef RT_OS_DOS +# define RT_OS_DOS +# endif +#elif RT_OPSYS == RT_OPSYS_FREEBSD +# ifndef RT_OS_FREEBSD +# define RT_OS_FREEBSD +# endif +#elif RT_OPSYS == RT_OPSYS_HAIKU +# ifndef RT_OS_HAIKU +# define RT_OS_HAIKU +# endif +#elif RT_OPSYS == RT_OPSYS_LINUX +# ifndef RT_OS_LINUX +# define RT_OS_LINUX +# endif +#elif RT_OPSYS == RT_OPSYS_L4 +# ifndef RT_OS_L4 +# define RT_OS_L4 +# endif +#elif RT_OPSYS == RT_OPSYS_MINIX +# ifndef RT_OS_MINIX +# define RT_OS_MINIX +# endif +#elif RT_OPSYS == RT_OPSYS_NETBSD +# ifndef RT_OS_NETBSD +# define RT_OS_NETBSD +# endif +#elif RT_OPSYS == RT_OPSYS_NETWARE +# ifndef RT_OS_NETWARE +# define RT_OS_NETWARE +# endif +#elif RT_OPSYS == RT_OPSYS_NT +# ifndef RT_OS_NT +# define RT_OS_NT +# endif +#elif RT_OPSYS == RT_OPSYS_OPENBSD +# ifndef RT_OS_OPENBSD +# define RT_OS_OPENBSD +# endif +#elif RT_OPSYS == RT_OPSYS_OS2 +# ifndef RT_OS_OS2 +# define RT_OS_OS2 +# endif +#elif RT_OPSYS == RT_OPSYS_PLAN9 +# ifndef RT_OS_PLAN9 +# define RT_OS_PLAN9 +# endif +#elif RT_OPSYS == RT_OPSYS_QNX +# ifndef RT_OS_QNX +# define RT_OS_QNX +# endif +#elif RT_OPSYS == RT_OPSYS_SOLARIS +# ifndef RT_OS_SOLARIS +# define RT_OS_SOLARIS +# endif +#elif RT_OPSYS == RT_OPSYS_UEFI +# ifndef RT_OS_UEFI +# define RT_OS_UEFI +# endif +#elif RT_OPSYS == RT_OPSYS_WINDOWS +# ifndef RT_OS_WINDOWS +# define RT_OS_WINDOWS +# endif +#else +# error "Bad RT_OPSYS value." +#endif + + +/** + * Checks whether the given OpSys uses DOS-style paths or not. + * + * By DOS-style paths we include drive lettering and UNC paths. + * + * @returns true / false + * @param a_OpSys The RT_OPSYS_XXX value to check, will be reference + * multiple times. + */ +#define RT_OPSYS_USES_DOS_PATHS(a_OpSys) \ + ( (a_OpSys) == RT_OPSYS_WINDOWS \ + || (a_OpSys) == RT_OPSYS_OS2 \ + || (a_OpSys) == RT_OPSYS_DOS ) + + + +/** @def CTXTYPE + * Declare a type differently in GC, R3 and R0. + * + * @param GCType The GC type. + * @param R3Type The R3 type. + * @param R0Type The R0 type. + * @remark For pointers used only in one context use RCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE(). + */ +#ifdef IN_RC +# define CTXTYPE(GCType, R3Type, R0Type) GCType +#elif defined(IN_RING3) +# define CTXTYPE(GCType, R3Type, R0Type) R3Type +#else +# define CTXTYPE(GCType, R3Type, R0Type) R0Type +#endif + +/** @def RCPTRTYPE + * Declare a pointer which is used in the raw mode context but appears in structure(s) used by + * both HC and RC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param RCType The RC type. + */ +#define RCPTRTYPE(RCType) CTXTYPE(RCType, RTRCPTR, RTRCPTR) + +/** @def R3R0PTRTYPE + * Declare a pointer which is used in HC, is explicitly valid in ring 3 and 0, + * but appears in structure(s) used by both HC and GC. The main purpose is to + * make sure structures have the same size when built for different architectures. + * + * @param R3R0Type The R3R0 type. + * @remarks This used to be called HCPTRTYPE. + */ +#define R3R0PTRTYPE(R3R0Type) CTXTYPE(RTHCPTR, R3R0Type, R3R0Type) + +/** @def R3PTRTYPE + * Declare a pointer which is used in R3 but appears in structure(s) used by + * both HC and GC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param R3Type The R3 type. + */ +#define R3PTRTYPE(R3Type) CTXTYPE(RTHCUINTPTR, R3Type, RTHCUINTPTR) + +/** @def R0PTRTYPE + * Declare a pointer which is used in R0 but appears in structure(s) used by + * both HC and GC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param R0Type The R0 type. + */ +#define R0PTRTYPE(R0Type) CTXTYPE(RTHCUINTPTR, RTHCUINTPTR, R0Type) + +/** @def CTXSUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +/** @def OTHERCTXSUFF + * Adds the suffix of the other context to the passed in + * identifier name. The suffix is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +#ifdef IN_RC +# define CTXSUFF(var) var##GC +# define OTHERCTXSUFF(var) var##HC +#else +# define CTXSUFF(var) var##HC +# define OTHERCTXSUFF(var) var##GC +#endif + +/** @def CTXALLSUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is R3, R0 or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +#ifdef IN_RC +# define CTXALLSUFF(var) var##GC +#elif defined(IN_RING0) +# define CTXALLSUFF(var) var##R0 +#else +# define CTXALLSUFF(var) var##R3 +#endif + +/** @def CTX_SUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is R3, R0 or RC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * + * @remark This will replace CTXALLSUFF and CTXSUFF before long. + */ +#ifdef IN_RC +# define CTX_SUFF(var) var##RC +#elif defined(IN_RING0) +# define CTX_SUFF(var) var##R0 +#else +# define CTX_SUFF(var) var##R3 +#endif + +/** @def CTX_SUFF_Z + * Adds the suffix of the current context to the passed in + * identifier name, combining RC and R0 into RZ. + * The suffix thus is R3 or RZ. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * + * @remark This will replace CTXALLSUFF and CTXSUFF before long. + */ +#ifdef IN_RING3 +# define CTX_SUFF_Z(var) var##R3 +#else +# define CTX_SUFF_Z(var) var##RZ +#endif + + +/** @def CTXMID + * Adds the current context as a middle name of an identifier name + * The middle name is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +/** @def OTHERCTXMID + * Adds the other context as a middle name of an identifier name + * The middle name is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + * @deprecated use CTX_MID or CTX_MID_Z + */ +#ifdef IN_RC +# define CTXMID(first, last) first##GC##last +# define OTHERCTXMID(first, last) first##HC##last +#else +# define CTXMID(first, last) first##HC##last +# define OTHERCTXMID(first, last) first##GC##last +#endif + +/** @def CTXALLMID + * Adds the current context as a middle name of an identifier name. + * The middle name is R3, R0 or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + * @deprecated use CTX_MID or CTX_MID_Z + */ +#ifdef IN_RC +# define CTXALLMID(first, last) first##GC##last +#elif defined(IN_RING0) +# define CTXALLMID(first, last) first##R0##last +#else +# define CTXALLMID(first, last) first##R3##last +#endif + +/** @def CTX_MID + * Adds the current context as a middle name of an identifier name. + * The middle name is R3, R0 or RC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +#ifdef IN_RC +# define CTX_MID(first, last) first##RC##last +#elif defined(IN_RING0) +# define CTX_MID(first, last) first##R0##last +#else +# define CTX_MID(first, last) first##R3##last +#endif + +/** @def CTX_MID_Z + * Adds the current context as a middle name of an identifier name, combining RC + * and R0 into RZ. + * The middle name thus is either R3 or RZ. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +#ifdef IN_RING3 +# define CTX_MID_Z(first, last) first##R3##last +#else +# define CTX_MID_Z(first, last) first##RZ##last +#endif + + +/** @def R3STRING + * A macro which in GC and R0 will return a dummy string while in R3 it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or GC. The intention is to avoid the \#ifdef IN_RING3 mess. + * + * @param pR3String The R3 string. Only referenced in R3. + * @see R0STRING and GCSTRING + */ +#ifdef IN_RING3 +# define R3STRING(pR3String) (pR3String) +#else +# define R3STRING(pR3String) ("") +#endif + +/** @def R0STRING + * A macro which in GC and R3 will return a dummy string while in R0 it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or GC. The intention is to avoid the \#ifdef IN_RING0 mess. + * + * @param pR0String The R0 string. Only referenced in R0. + * @see R3STRING and GCSTRING + */ +#ifdef IN_RING0 +# define R0STRING(pR0String) (pR0String) +#else +# define R0STRING(pR0String) ("") +#endif + +/** @def RCSTRING + * A macro which in R3 and R0 will return a dummy string while in RC it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or RC. The intention is to avoid the \#ifdef IN_RC mess. + * + * @param pRCString The RC string. Only referenced in RC. + * @see R3STRING, R0STRING + */ +#ifdef IN_RC +# define RCSTRING(pRCString) (pRCString) +#else +# define RCSTRING(pRCString) ("") +#endif + + +/** @def RT_NOTHING + * A macro that expands to nothing. + * This is primarily intended as a dummy argument for macros to avoid the + * undefined behavior passing empty arguments to an macro (ISO C90 and C++98, + * gcc v4.4 warns about it). + */ +#define RT_NOTHING + +/** @def RT_GCC_EXTENSION + * Macro for shutting up GCC warnings about using language extensions. */ +#ifdef __GNUC__ +# define RT_GCC_EXTENSION __extension__ +#else +# define RT_GCC_EXTENSION +#endif + +/** @def RT_GCC_NO_WARN_DEPRECATED_BEGIN + * Used to start a block of code where GCC should not warn about deprecated + * declarations. */ +#if RT_GNUC_PREREQ(4, 6) +# define RT_GCC_NO_WARN_DEPRECATED_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +/** @def RT_GCC_NO_WARN_DEPRECATED_END + * Used to end a block of code where GCC should not warn about deprecated + * declarations. */ +# define RT_GCC_NO_WARN_DEPRECATED_END \ + _Pragma("GCC diagnostic pop") +#else +# define RT_GCC_NO_WARN_DEPRECATED_BEGIN +# define RT_GCC_NO_WARN_DEPRECATED_END +#endif + +/** @def RT_GCC_NO_WARN_CONVERSION_BEGIN + * Used to start a block of code where GCC should not warn about implicit + * conversions that may alter a value. */ +#if RT_GNUC_PREREQ(4, 6) +# define RT_GCC_NO_WARN_CONVERSION_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wconversion\"") +/** @def RT_GCC_NO_WARN_CONVERSION_END + * Used to end a block of code where GCC should not warn about implicit + * conversions that may alter a value. */ +# define RT_GCC_NO_WARN_CONVERSION_END \ + _Pragma("GCC diagnostic pop") +#else +# define RT_GCC_NO_WARN_CONVERSION_BEGIN +# define RT_GCC_NO_WARN_CONVERSION_END +#endif + +/** @def RT_COMPILER_GROKS_64BIT_BITFIELDS + * Macro that is defined if the compiler understands 64-bit bitfields. */ +#if !defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__)) +# if !defined(__WATCOMC__) /* watcom compiler doesn't grok it either. */ +# define RT_COMPILER_GROKS_64BIT_BITFIELDS +# endif +#endif + +/** @def RT_COMPILER_WITH_80BIT_LONG_DOUBLE + * Macro that is defined if the compiler implements long double as the + * IEEE extended precision floating. */ +#if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) && !defined(RT_OS_WINDOWS) +# define RT_COMPILER_WITH_80BIT_LONG_DOUBLE +#endif + + +/** @def RT_EXCEPTIONS_ENABLED + * Defined when C++ exceptions are enabled. + */ +#if !defined(RT_EXCEPTIONS_ENABLED) \ + && defined(__cplusplus) \ + && ( (defined(_MSC_VER) && defined(_CPPUNWIND)) \ + || (defined(__GNUC__) && defined(__EXCEPTIONS))) +# define RT_EXCEPTIONS_ENABLED +#endif + +/** @def RT_NO_THROW_PROTO + * How to express that a function doesn't throw C++ exceptions + * and the compiler can thus save itself the bother of trying + * to catch any of them. Put this between the closing parenthesis + * and the semicolon in function prototypes (and implementation if C++). + * + * @remarks May not work on C++ methods, mainly intented for C-style APIs. + * + * @remarks The use of the nothrow attribute with GCC is because old compilers + * (4.1.1, 32-bit) leaking the nothrow into global space or something + * when used with RTDECL or similar. Using this forces use to have two + * macros, as the nothrow attribute is not for the function definition. + */ +#ifdef RT_EXCEPTIONS_ENABLED +# ifdef __GNUC__ +# if RT_GNUC_PREREQ(3, 3) +# define RT_NO_THROW_PROTO __attribute__((__nothrow__)) +# else +# define RT_NO_THROW_PROTO +# endif +# else +# define RT_NO_THROW_PROTO throw() +# endif +#else +# define RT_NO_THROW_PROTO +#endif + +/** @def RT_NO_THROW_DEF + * The counter part to RT_NO_THROW_PROTO that is added to the function + * definition. + */ +#if defined(RT_EXCEPTIONS_ENABLED) && !defined(__GNUC__) +# define RT_NO_THROW_DEF RT_NO_THROW_PROTO +#else +# define RT_NO_THROW_DEF +#endif + +/** @def RT_THROW + * How to express that a method or function throws a type of exceptions. Some + * compilers does not want this kind of information and will warning about it. + * + * @param type The type exception. + * + * @remarks If the actual throwing is done from the header, enclose it by + * \#ifdef RT_EXCEPTIONS_ENABLED ... \#else ... \#endif so the header + * compiles cleanly without exceptions enabled. + * + * Do NOT use this for the actual throwing of exceptions! + */ +#ifdef RT_EXCEPTIONS_ENABLED +# if RT_MSC_PREREQ_EX(RT_MSC_VER_VC71, 0) +# define RT_THROW(type) +# elif RT_GNUC_PREREQ(7, 0) +# define RT_THROW(type) +# else +# define RT_THROW(type) throw(type) +# endif +#else +# define RT_THROW(type) +#endif + + +/** @def RT_FALL_THROUGH + * Tell the compiler that we're falling through to the next case in a switch. + * @sa RT_FALL_THRU */ +#if RT_GNUC_PREREQ(7, 0) +# define RT_FALL_THROUGH() __attribute__((fallthrough)) +#else +# define RT_FALL_THROUGH() (void)0 +#endif +/** @def RT_FALL_THRU + * Tell the compiler that we're falling thru to the next case in a switch. + * @sa RT_FALL_THROUGH */ +#define RT_FALL_THRU() RT_FALL_THROUGH() + + +/** @def RT_IPRT_FORMAT_ATTR + * Identifies a function taking an IPRT format string. + * @param a_iFmt The index (1-based) of the format string argument. + * @param a_iArgs The index (1-based) of the first format argument, use 0 for + * va_list. + */ +#if defined(__GNUC__) && defined(WITH_IPRT_FORMAT_ATTRIBUTE) +# define RT_IPRT_FORMAT_ATTR(a_iFmt, a_iArgs) __attribute__((__iprt_format__(a_iFmt, a_iArgs))) +#else +# define RT_IPRT_FORMAT_ATTR(a_iFmt, a_iArgs) +#endif + +/** @def RT_IPRT_FORMAT_ATTR_MAYBE_NULL + * Identifies a function taking an IPRT format string, NULL is allowed. + * @param a_iFmt The index (1-based) of the format string argument. + * @param a_iArgs The index (1-based) of the first format argument, use 0 for + * va_list. + */ +#if defined(__GNUC__) && defined(WITH_IPRT_FORMAT_ATTRIBUTE) +# define RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a_iFmt, a_iArgs) __attribute__((__iprt_format_maybe_null__(a_iFmt, a_iArgs))) +#else +# define RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a_iFmt, a_iArgs) +#endif + + +/** @def RT_GCC_SUPPORTS_VISIBILITY_HIDDEN + * Indicates that the "hidden" visibility attribute can be used (GCC) */ +#if defined(__GNUC__) +# if __GNUC__ >= 4 && !defined(RT_OS_OS2) && !defined(RT_OS_WINDOWS) +# define RT_GCC_SUPPORTS_VISIBILITY_HIDDEN +# endif +#endif + +/** @def RT_COMPILER_SUPPORTS_VA_ARGS + * If the defined, the compiler supports the variadic macro feature (..., __VA_ARGS__). */ +#if defined(_MSC_VER) +# if _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_COMPILER_SUPPORTS_VA_ARGS +# endif +#elif defined(__GNUC__) +# if __GNUC__ >= 3 /* not entirely sure when this was added */ +# define RT_COMPILER_SUPPORTS_VA_ARGS +# endif +#endif + + + +/** @def RTCALL + * The standard calling convention for the Runtime interfaces. + * + * @remarks The regparm(0) in the X86/GNUC variant deals with -mregparm=x use in + * the linux kernel and potentially elsewhere (3rd party). + */ +#if defined(_MSC_VER) || defined(__WATCOMC__) +# define RTCALL __cdecl +#elif defined(RT_OS_OS2) +# define RTCALL __cdecl +#elif defined(__GNUC__) && defined(RT_ARCH_X86) +# define RTCALL __attribute__((__cdecl__,__regparm__(0))) +#else +# define RTCALL +#endif + +/** @def DECLEXPORT + * How to declare an exported function. + * @param type The return type of the function declaration. + */ +#if defined(_MSC_VER) || defined(RT_OS_OS2) +# define DECLEXPORT(type) __declspec(dllexport) type +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLEXPORT(type) __attribute__((visibility("default"))) type +#else +# define DECLEXPORT(type) type +#endif + +/** @def DECLIMPORT + * How to declare an imported function. + * @param type The return type of the function declaration. + */ +#if defined(_MSC_VER) || (defined(RT_OS_OS2) && !defined(__IBMC__) && !defined(__IBMCPP__)) +# define DECLIMPORT(type) __declspec(dllimport) type +#else +# define DECLIMPORT(type) type +#endif + +/** @def DECLHIDDEN + * How to declare a non-exported function or variable. + * @param type The return type of the function or the data type of the variable. + */ +#if !defined(RT_GCC_SUPPORTS_VISIBILITY_HIDDEN) || defined(RT_NO_VISIBILITY_HIDDEN) +# define DECLHIDDEN(type) type +#else +# define DECLHIDDEN(type) __attribute__((visibility("hidden"))) type +#endif + +/** @def DECL_HIDDEN_CONST + * Workaround for g++ warnings when applying the hidden attribute to a const + * definition. Use DECLHIDDEN for the declaration. + * @param a_Type The return type of the function or the data type of + * the variable. + */ +#if defined(__cplusplus) && defined(__GNUC__) +# define DECL_HIDDEN_CONST(a_Type) a_Type +#else +# define DECL_HIDDEN_CONST(a_Type) DECLHIDDEN(a_Type) +#endif + +/** @def DECL_INVALID + * How to declare a function not available for linking in the current context. + * The purpose is to create compile or like time errors when used. This isn't + * possible on all platforms. + * @param type The return type of the function. + */ +#if defined(_MSC_VER) +# define DECL_INVALID(type) __declspec(dllimport) type __stdcall +#elif defined(__GNUC__) && defined(__cplusplus) +# define DECL_INVALID(type) extern "C++" type +#else +# define DECL_INVALID(type) type +#endif + +/** @def DECLASM + * How to declare an internal assembly function. + * @param type The return type of the function declaration. + */ +#ifdef __cplusplus +# define DECLASM(type) extern "C" type RTCALL +#else +# define DECLASM(type) type RTCALL +#endif + +/** @def DECLASMTYPE + * How to declare an internal assembly function type. + * @param type The return type of the function. + */ +#define DECLASMTYPE(type) type RTCALL + +/** @def DECL_NO_RETURN + * How to declare a function which does not return. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECL_NO_RETURN(void)) foo(void); + * @endcode + */ +#ifdef _MSC_VER +# define DECL_NO_RETURN(type) __declspec(noreturn) type +#elif defined(__GNUC__) +# define DECL_NO_RETURN(type) __attribute__((noreturn)) type +#else +# define DECL_NO_RETURN(type) type +#endif +/** @deprecated Use DECL_NO_RETURN instead. */ +#define DECLNORETURN(type) DECL_NO_RETURN(type) + +/** @def DECL_RETURNS_TWICE + * How to declare a function which may return more than once. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECL_RETURNS_TWICE(void)) MySetJmp(void); + * @endcode + */ +#if RT_GNUC_PREREQ(4, 1) +# define DECL_RETURNS_TWICE(type) __attribute__((returns_twice)) type +# else +# define DECL_RETURNS_TWICE(type) type +#endif + +/** @def DECLWEAK + * How to declare a variable which is not necessarily resolved at + * runtime. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECLWEAK(int)) foo; + * @endcode + */ +#if defined(__GNUC__) +# define DECLWEAK(type) type __attribute__((weak)) +#else +# define DECLWEAK(type) type +#endif + +/** @def DECLCALLBACK + * How to declare an call back function type. + * @param type The return type of the function declaration. + */ +#define DECLCALLBACK(type) type RT_FAR_CODE RTCALL + +/** @def DECLCALLBACKPTR + * How to declare an call back function pointer. + * @param type The return type of the function declaration. + * @param name The name of the variable member. + */ +#if defined(__IBMC__) || defined(__IBMCPP__) +# define DECLCALLBACKPTR(type, name) type (* RTCALL name) +#else +# define DECLCALLBACKPTR(type, name) type (RT_FAR_CODE RTCALL * name) +#endif + +/** @def DECLCALLBACKMEMBER + * How to declare an call back function pointer member. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + */ +#if defined(__IBMC__) || defined(__IBMCPP__) +# define DECLCALLBACKMEMBER(type, name) type (* RTCALL name) +#else +# define DECLCALLBACKMEMBER(type, name) type (RT_FAR_CODE RTCALL * name) +#endif + +/** @def DECLR3CALLBACKMEMBER + * How to declare an call back function pointer member - R3 Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RING3 +# define DECLR3CALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLR3CALLBACKMEMBER(type, name, args) RTR3PTR name +#endif + +/** @def DECLRCCALLBACKMEMBER + * How to declare an call back function pointer member - RC Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RC +# define DECLRCCALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLRCCALLBACKMEMBER(type, name, args) RTRCPTR name +#endif + +/** @def DECLR0CALLBACKMEMBER + * How to declare an call back function pointer member - R0 Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RING0 +# define DECLR0CALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLR0CALLBACKMEMBER(type, name, args) RTR0PTR name +#endif + +/** @def DECLINLINE + * How to declare a function as inline. + * @param type The return type of the function declaration. + * @remarks Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECLINLINE(type) static __inline__ type +#elif defined(__cplusplus) +# define DECLINLINE(type) static inline type +#elif defined(_MSC_VER) +# define DECLINLINE(type) static _inline type +#elif defined(__IBMC__) +# define DECLINLINE(type) _Inline type +#else +# define DECLINLINE(type) inline type +#endif + + +/** @def DECL_FORCE_INLINE + * How to declare a function as inline and try convince the compiler to always + * inline it regardless of optimization switches. + * @param type The return type of the function declaration. + * @remarks Use sparsely and with care. Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECL_FORCE_INLINE(type) __attribute__((__always_inline__)) DECLINLINE(type) +#elif defined(_MSC_VER) +# define DECL_FORCE_INLINE(type) __forceinline type +#else +# define DECL_FORCE_INLINE(type) DECLINLINE(type) +#endif + + +/** @def DECL_NO_INLINE + * How to declare a function telling the compiler not to inline it. + * @param scope The function scope, static or RT_NOTHING. + * @param type The return type of the function declaration. + * @remarks Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECL_NO_INLINE(scope,type) __attribute__((__noinline__)) scope type +#elif defined(_MSC_VER) +# define DECL_NO_INLINE(scope,type) __declspec(noinline) scope type +#else +# define DECL_NO_INLINE(scope,type) scope type +#endif + + +/** @def IN_RT_STATIC + * Used to indicate whether we're linking against a static IPRT + * or not. + * + * The IPRT symbols will be declared as hidden (if supported). Note that this + * define has no effect without also setting one of the IN_RT_R0, IN_RT_R3 or + * IN_RT_RC indicators. + */ + +/** @def IN_RT_R0 + * Used to indicate whether we're inside the same link module as the host + * context ring-0 Runtime Library. + */ +/** @def RTR0DECL(type) + * Runtime Library host context ring-0 export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_R0 +# ifdef IN_RT_STATIC +# define RTR0DECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTR0DECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTR0DECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def IN_RT_R3 + * Used to indicate whether we're inside the same link module as the host + * context ring-3 Runtime Library. + */ +/** @def RTR3DECL(type) + * Runtime Library host context ring-3 export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_R3 +# ifdef IN_RT_STATIC +# define RTR3DECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTR3DECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTR3DECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def IN_RT_RC + * Used to indicate whether we're inside the same link module as the raw-mode + * context (RC) runtime library. + */ +/** @def RTRCDECL(type) + * Runtime Library raw-mode context export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_RC +# ifdef IN_RT_STATIC +# define RTRCDECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTRCDECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTRCDECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def RTDECL(type) + * Runtime Library export or import declaration. + * Functions declared using this macro exists in all contexts. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RTDECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTDECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTDECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def RTDATADECL(type) + * Runtime Library export or import declaration. + * Data declared using this macro exists in all contexts. + * @param type The data type. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +/** @def RT_DECL_DATA_CONST(type) + * Definition of a const variable. See DECL_HIDDEN_CONST. + * @param type The const data type. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RTDATADECL(type) DECLHIDDEN(type) +# define RT_DECL_DATA_CONST(type) DECL_HIDDEN_CONST(type) +# else +# define RTDATADECL(type) DECLEXPORT(type) +# if defined(__cplusplus) && defined(__GNUC__) +# define RT_DECL_DATA_CONST(type) type +# else +# define RT_DECL_DATA_CONST(type) DECLEXPORT(type) +# endif +# endif +#else +# define RTDATADECL(type) DECLIMPORT(type) +# define RT_DECL_DATA_CONST(type) DECLIMPORT(type) +#endif + +/** @def RT_DECL_CLASS + * Declares an class living in the runtime. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RT_DECL_CLASS +# else +# define RT_DECL_CLASS DECLEXPORT_CLASS +# endif +#else +# define RT_DECL_CLASS DECLIMPORT_CLASS +#endif + + +/** @def RT_NOCRT + * Symbol name wrapper for the No-CRT bits. + * + * In order to coexist in the same process as other CRTs, we need to + * decorate the symbols such that they don't conflict the ones in the + * other CRTs. The result of such conflicts / duplicate symbols can + * confuse the dynamic loader on Unix like systems. + * + * Define RT_WITHOUT_NOCRT_WRAPPERS to drop the wrapping. + * Define RT_WITHOUT_NOCRT_WRAPPER_ALIASES to drop the aliases to the + * wrapped names. + */ +/** @def RT_NOCRT_STR + * Same as RT_NOCRT only it'll return a double quoted string of the result. + */ +#ifndef RT_WITHOUT_NOCRT_WRAPPERS +# define RT_NOCRT(name) nocrt_ ## name +# define RT_NOCRT_STR(name) "nocrt_" # name +#else +# define RT_NOCRT(name) name +# define RT_NOCRT_STR(name) #name +#endif + + + +/** @def RT_LIKELY + * Give the compiler a hint that an expression is very likely to hold true. + * + * Some compilers support explicit branch prediction so that the CPU backend + * can hint the processor and also so that code blocks can be reordered such + * that the predicted path sees a more linear flow, thus improving cache + * behaviour, etc. + * + * IPRT provides the macros RT_LIKELY() and RT_UNLIKELY() as a way to utilize + * this compiler feature when present. + * + * A few notes about the usage: + * + * - Generally, order your code use RT_LIKELY() instead of RT_UNLIKELY(). + * + * - Generally, use RT_UNLIKELY() with error condition checks (unless you + * have some _strong_ reason to do otherwise, in which case document it), + * and/or RT_LIKELY() with success condition checks, assuming you want + * to optimize for the success path. + * + * - Other than that, if you don't know the likelihood of a test succeeding + * from empirical or other 'hard' evidence, don't make predictions unless + * you happen to be a Dirk Gently character. + * + * - These macros are meant to be used in places that get executed a lot. It + * is wasteful to make predictions in code that is executed rarely (e.g. + * at subsystem initialization time) as the basic block reordering that this + * affects can often generate larger code. + * + * - Note that RT_SUCCESS() and RT_FAILURE() already makes use of RT_LIKELY() + * and RT_UNLIKELY(). Should you wish for prediction free status checks, + * use the RT_SUCCESS_NP() and RT_FAILURE_NP() macros instead. + * + * + * @returns the boolean result of the expression. + * @param expr The expression that's very likely to be true. + * @see RT_UNLIKELY + */ +/** @def RT_UNLIKELY + * Give the compiler a hint that an expression is highly unlikely to hold true. + * + * See the usage instructions give in the RT_LIKELY() docs. + * + * @returns the boolean result of the expression. + * @param expr The expression that's very unlikely to be true. + * @see RT_LIKELY + * + * @deprecated Please use RT_LIKELY() instead wherever possible! That gives us + * a better chance of the windows compilers to generate favorable code + * too. The belief is that the compiler will by default assume the + * if-case is more likely than the else-case. + */ +#if defined(__GNUC__) +# if __GNUC__ >= 3 && !defined(FORTIFY_RUNNING) +# define RT_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define RT_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +# else +# define RT_LIKELY(expr) (expr) +# define RT_UNLIKELY(expr) (expr) +# endif +#else +# define RT_LIKELY(expr) (expr) +# define RT_UNLIKELY(expr) (expr) +#endif + +/** @def RT_EXPAND_2 + * Helper for RT_EXPAND. */ +#define RT_EXPAND_2(a_Expr) a_Expr +/** @def RT_EXPAND + * Returns the expanded expression. + * @param a_Expr The expression to expand. */ +#define RT_EXPAND(a_Expr) RT_EXPAND_2(a_Expr) + +/** @def RT_STR + * Returns the argument as a string constant. + * @param str Argument to stringify. */ +#define RT_STR(str) #str +/** @def RT_XSTR + * Returns the expanded argument as a string. + * @param str Argument to expand and stringify. */ +#define RT_XSTR(str) RT_STR(str) + +/** @def RT_LSTR_2 + * Helper for RT_WSTR that gets the expanded @a str. + * @param str String litteral to prefix with 'L'. */ +#define RT_LSTR_2(str) L##str +/** @def RT_LSTR + * Returns the expanded argument with a L string prefix. + * + * Intended for converting ASCII string \#defines into wide char string + * litterals on Windows. + * + * @param str String litteral to . */ +#define RT_LSTR(str) RT_LSTR_2(str) + +/** @def RT_UNPACK_CALL + * Unpacks the an argument list inside an extra set of parenthesis and turns it + * into a call to @a a_Fn. + * + * @param a_Fn Function/macro to call. + * @param a_Args Parameter list in parenthesis. + */ +#define RT_UNPACK_CALL(a_Fn, a_Args) a_Fn a_Args + +#if defined(RT_COMPILER_SUPPORTS_VA_ARGS) || defined(DOXYGEN_RUNNING) + +/** @def RT_UNPACK_ARGS + * Returns the arguments without parenthesis. + * + * @param ... Parameter list in parenthesis. + * @remarks Requires RT_COMPILER_SUPPORTS_VA_ARGS. + */ +# define RT_UNPACK_ARGS(...) __VA_ARGS__ + +/** @def RT_COUNT_VA_ARGS_HLP + * Helper for RT_COUNT_VA_ARGS that picks out the argument count from + * RT_COUNT_VA_ARGS_REV_SEQ. */ +# define RT_COUNT_VA_ARGS_HLP( \ + c69, c68, c67, c66, c65, c64, c63, c62, c61, c60, \ + c59, c58, c57, c56, c55, c54, c53, c52, c51, c50, \ + c49, c48, c47, c46, c45, c44, c43, c42, c41, c40, \ + c39, c38, c37, c36, c35, c34, c33, c32, c31, c30, \ + c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, \ + c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, \ + c9, c8, c7, c6, c5, c4, c3, c2, c1, cArgs, ...) cArgs +/** Argument count sequence. */ +# define RT_COUNT_VA_ARGS_REV_SEQ \ + 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \ + 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \ + 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ + 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \ + 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \ + 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \ + 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +/** This is for zero arguments. At least Visual C++ requires it. */ +# define RT_COUNT_VA_ARGS_PREFIX_RT_NOTHING RT_COUNT_VA_ARGS_REV_SEQ +/** + * Counts the number of arguments given to the variadic macro. + * + * Max is 69. + * + * @returns Number of arguments in the ellipsis + * @param ... Arguments to count. + * @remarks Requires RT_COMPILER_SUPPORTS_VA_ARGS. + */ +# define RT_COUNT_VA_ARGS(...) \ + RT_UNPACK_CALL(RT_COUNT_VA_ARGS_HLP, (RT_COUNT_VA_ARGS_PREFIX_ ## __VA_ARGS__ ## RT_NOTHING, \ + RT_COUNT_VA_ARGS_REV_SEQ)) + +#endif /* RT_COMPILER_SUPPORTS_VA_ARGS */ + + +/** @def RT_CONCAT + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The first part. + * @param b The second part. + */ +#define RT_CONCAT(a,b) RT_CONCAT_HLP(a,b) +/** RT_CONCAT helper, don't use. */ +#define RT_CONCAT_HLP(a,b) a##b + +/** @def RT_CONCAT3 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + */ +#define RT_CONCAT3(a,b,c) RT_CONCAT3_HLP(a,b,c) +/** RT_CONCAT3 helper, don't use. */ +#define RT_CONCAT3_HLP(a,b,c) a##b##c + +/** @def RT_CONCAT4 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + */ +#define RT_CONCAT4(a,b,c,d) RT_CONCAT4_HLP(a,b,c,d) +/** RT_CONCAT4 helper, don't use. */ +#define RT_CONCAT4_HLP(a,b,c,d) a##b##c##d + +/** @def RT_CONCAT5 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + */ +#define RT_CONCAT5(a,b,c,d,e) RT_CONCAT5_HLP(a,b,c,d,e) +/** RT_CONCAT5 helper, don't use. */ +#define RT_CONCAT5_HLP(a,b,c,d,e) a##b##c##d##e + +/** @def RT_CONCAT6 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + */ +#define RT_CONCAT6(a,b,c,d,e,f) RT_CONCAT6_HLP(a,b,c,d,e,f) +/** RT_CONCAT6 helper, don't use. */ +#define RT_CONCAT6_HLP(a,b,c,d,e,f) a##b##c##d##e##f + +/** @def RT_CONCAT7 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + */ +#define RT_CONCAT7(a,b,c,d,e,f,g) RT_CONCAT7_HLP(a,b,c,d,e,f,g) +/** RT_CONCAT7 helper, don't use. */ +#define RT_CONCAT7_HLP(a,b,c,d,e,f,g) a##b##c##d##e##f##g + +/** @def RT_CONCAT8 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + * @param h The 8th part. + */ +#define RT_CONCAT8(a,b,c,d,e,f,g,h) RT_CONCAT8_HLP(a,b,c,d,e,f,g,h) +/** RT_CONCAT8 helper, don't use. */ +#define RT_CONCAT8_HLP(a,b,c,d,e,f,g,h) a##b##c##d##e##f##g##h + +/** @def RT_CONCAT9 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + * @param h The 8th part. + * @param i The 9th part. + */ +#define RT_CONCAT9(a,b,c,d,e,f,g,h,i) RT_CONCAT9_HLP(a,b,c,d,e,f,g,h,i) +/** RT_CONCAT9 helper, don't use. */ +#define RT_CONCAT9_HLP(a,b,c,d,e,f,g,h,i) a##b##c##d##e##f##g##h##i + +/** + * String constant tuple - string constant, strlen(string constant). + * + * @param a_szConst String constant. + * @sa RTSTRTUPLE + */ +#define RT_STR_TUPLE(a_szConst) a_szConst, (sizeof(a_szConst) - 1) + + +/** + * Macro for using in switch statements that turns constants into strings. + * + * @param a_Const The constant (not string). + */ +#define RT_CASE_RET_STR(a_Const) case a_Const: return #a_Const + + +/** @def RT_BIT + * Convert a bit number into an integer bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT(bit) ( 1U << (bit) ) + +/** @def RT_BIT_32 + * Convert a bit number into a 32-bit bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT_32(bit) ( UINT32_C(1) << (bit) ) + +/** @def RT_BIT_64 + * Convert a bit number into a 64-bit bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT_64(bit) ( UINT64_C(1) << (bit) ) + + +/** @def RT_BF_GET + * Gets the value of a bit field in an integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. + * + * @returns The bit field value. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_CLEAR, #RT_BF_SET, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_GET(a_uValue, a_FieldNm) ( ((a_uValue) >> RT_CONCAT(a_FieldNm,_SHIFT)) & RT_BF_ZMASK(a_FieldNm) ) + +/** @def RT_BF_SET + * Sets the given bit field in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. Must have the same type as the + * integer value!! + * + * @returns Integer value with bit field set to @a a_uFieldValue. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @param a_uFieldValue The new field value. + * @sa #RT_BF_GET, #RT_BF_CLEAR, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_SET(a_uValue, a_FieldNm, a_uFieldValue) ( RT_BF_CLEAR(a_uValue, a_FieldNm) | RT_BF_MAKE(a_FieldNm, a_uFieldValue) ) + +/** @def RT_BF_CLEAR + * Clears the given bit field in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. Must have the same type as the + * integer value!! + * + * @returns Integer value with bit field set to zero. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_CLEAR(a_uValue, a_FieldNm) ( (a_uValue) & ~RT_CONCAT(a_FieldNm,_MASK) ) + +/** @def RT_BF_MAKE + * Shifts and masks a bit field value into position in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. + * + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @param a_uFieldValue The field value that should be masked and shifted + * into position. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_CLEAR, #RT_BF_ZMASK + */ +#define RT_BF_MAKE(a_FieldNm, a_uFieldValue) ( ((a_uFieldValue) & RT_BF_ZMASK(a_FieldNm) ) << RT_CONCAT(a_FieldNm,_SHIFT) ) + +/** @def RT_BF_ZMASK + * Helper for getting the field mask shifted to bit position zero. + * + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_CLEAR, #RT_BF_MAKE + */ +#define RT_BF_ZMASK(a_FieldNm) ( RT_CONCAT(a_FieldNm,_MASK) >> RT_CONCAT(a_FieldNm,_SHIFT) ) + +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_XOR_MASK(a_uLeft, a_RightPrefix, a_FieldNm) ((a_uLeft) ^ RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_OR_MASK(a_uLeft, a_RightPrefix, a_FieldNm) ((a_uLeft) | RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_1ST_MASK_BIT(a_uLeft, a_RightPrefix, a_FieldNm) \ + ((a_uLeft) && ( (RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK) >> RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) & 1U ) ) +/** Used to check that a bit field mask does not start too early. + * @internal */ +#define RT_BF_CHECK_DO_MASK_START(a_uLeft, a_RightPrefix, a_FieldNm) \ + ( (a_uLeft) \ + && ( RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT) == 0 \ + || ( ( ( ((RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK) >> RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) & 1U) \ + << RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) /* => single bit mask, correct type */ \ + - 1U) /* => mask of all bits below the field */ \ + & RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) == 0 ) ) +/** @name Bit field compile time check recursion workers. + * @internal + * @{ */ +#define RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix, f1) \ + a_DoThis(a_uLeft, a_RightPrefix, f1) +#define RT_BF_CHECK_DO_2(a_DoThis, a_uLeft, a_RightPrefix, f1, f2) \ + RT_BF_CHECK_DO_1(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2) +#define RT_BF_CHECK_DO_3(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3) \ + RT_BF_CHECK_DO_2(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3) +#define RT_BF_CHECK_DO_4(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4) \ + RT_BF_CHECK_DO_3(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4) +#define RT_BF_CHECK_DO_5(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5) \ + RT_BF_CHECK_DO_4(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5) +#define RT_BF_CHECK_DO_6(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6) \ + RT_BF_CHECK_DO_5(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6) +#define RT_BF_CHECK_DO_7(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7) \ + RT_BF_CHECK_DO_6(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7) +#define RT_BF_CHECK_DO_8(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8) \ + RT_BF_CHECK_DO_7(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8) +#define RT_BF_CHECK_DO_9(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9) \ + RT_BF_CHECK_DO_8(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9) +#define RT_BF_CHECK_DO_10(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10) \ + RT_BF_CHECK_DO_9(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10) +#define RT_BF_CHECK_DO_11(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) \ + RT_BF_CHECK_DO_10(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) +#define RT_BF_CHECK_DO_12(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) \ + RT_BF_CHECK_DO_11(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) +#define RT_BF_CHECK_DO_13(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13) \ + RT_BF_CHECK_DO_12(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13) +#define RT_BF_CHECK_DO_14(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \ + RT_BF_CHECK_DO_13(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) +#define RT_BF_CHECK_DO_15(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15) \ + RT_BF_CHECK_DO_14(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15) +#define RT_BF_CHECK_DO_16(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) \ + RT_BF_CHECK_DO_15(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) +#define RT_BF_CHECK_DO_17(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) \ + RT_BF_CHECK_DO_16(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) +#define RT_BF_CHECK_DO_18(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18) \ + RT_BF_CHECK_DO_17(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18) +#define RT_BF_CHECK_DO_19(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) \ + RT_BF_CHECK_DO_18(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) +#define RT_BF_CHECK_DO_20(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20) \ + RT_BF_CHECK_DO_19(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20) +#define RT_BF_CHECK_DO_21(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21) \ + RT_BF_CHECK_DO_20(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21) +#define RT_BF_CHECK_DO_22(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22) \ + RT_BF_CHECK_DO_21(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22) +#define RT_BF_CHECK_DO_23(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23) \ + RT_BF_CHECK_DO_22(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23) +#define RT_BF_CHECK_DO_24(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24) \ + RT_BF_CHECK_DO_23(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24) +#define RT_BF_CHECK_DO_25(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25) \ + RT_BF_CHECK_DO_24(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25) +#define RT_BF_CHECK_DO_26(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26) \ + RT_BF_CHECK_DO_25(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26) +#define RT_BF_CHECK_DO_27(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27) \ + RT_BF_CHECK_DO_26(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27) +#define RT_BF_CHECK_DO_28(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28) \ + RT_BF_CHECK_DO_27(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28) +#define RT_BF_CHECK_DO_29(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29) \ + RT_BF_CHECK_DO_28(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29) +#define RT_BF_CHECK_DO_30(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30) \ + RT_BF_CHECK_DO_29(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30) +#define RT_BF_CHECK_DO_31(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31) \ + RT_BF_CHECK_DO_30(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31) +#define RT_BF_CHECK_DO_32(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32) \ + RT_BF_CHECK_DO_31(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32) +#define RT_BF_CHECK_DO_33(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33) \ + RT_BF_CHECK_DO_32(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33) +#define RT_BF_CHECK_DO_34(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34) \ + RT_BF_CHECK_DO_33(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34) +#define RT_BF_CHECK_DO_35(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35) \ + RT_BF_CHECK_DO_34(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35) +#define RT_BF_CHECK_DO_36(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36) \ + RT_BF_CHECK_DO_35(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36) +#define RT_BF_CHECK_DO_37(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37) \ + RT_BF_CHECK_DO_36(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37) +#define RT_BF_CHECK_DO_38(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38) \ + RT_BF_CHECK_DO_37(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38) +#define RT_BF_CHECK_DO_39(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39) \ + RT_BF_CHECK_DO_38(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39) +#define RT_BF_CHECK_DO_40(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40) \ + RT_BF_CHECK_DO_39(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40) +#define RT_BF_CHECK_DO_41(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41) \ + RT_BF_CHECK_DO_40(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41) +#define RT_BF_CHECK_DO_42(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42) \ + RT_BF_CHECK_DO_41(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42) +#define RT_BF_CHECK_DO_43(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43) \ + RT_BF_CHECK_DO_42(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43) +#define RT_BF_CHECK_DO_44(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44) \ + RT_BF_CHECK_DO_43(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44) +#define RT_BF_CHECK_DO_45(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45) \ + RT_BF_CHECK_DO_44(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45) +#define RT_BF_CHECK_DO_46(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46) \ + RT_BF_CHECK_DO_45(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46) +#define RT_BF_CHECK_DO_47(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47) \ + RT_BF_CHECK_DO_46(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47) +#define RT_BF_CHECK_DO_48(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48) \ + RT_BF_CHECK_DO_47(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48) +#define RT_BF_CHECK_DO_49(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49) \ + RT_BF_CHECK_DO_48(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49) +#define RT_BF_CHECK_DO_50(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50) \ + RT_BF_CHECK_DO_49(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50) +#define RT_BF_CHECK_DO_51(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51) \ + RT_BF_CHECK_DO_40(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51) +#define RT_BF_CHECK_DO_52(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52) \ + RT_BF_CHECK_DO_51(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52) +#define RT_BF_CHECK_DO_53(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53) \ + RT_BF_CHECK_DO_52(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53) +#define RT_BF_CHECK_DO_54(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54) \ + RT_BF_CHECK_DO_53(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54) +#define RT_BF_CHECK_DO_55(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55) \ + RT_BF_CHECK_DO_54(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55) +#define RT_BF_CHECK_DO_56(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56) \ + RT_BF_CHECK_DO_55(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56) +#define RT_BF_CHECK_DO_57(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57) \ + RT_BF_CHECK_DO_56(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57) +#define RT_BF_CHECK_DO_58(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58) \ + RT_BF_CHECK_DO_57(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58) +#define RT_BF_CHECK_DO_59(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59) \ + RT_BF_CHECK_DO_58(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59) +#define RT_BF_CHECK_DO_60(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60) \ + RT_BF_CHECK_DO_59(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60) +#define RT_BF_CHECK_DO_61(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61) \ + RT_BF_CHECK_DO_60(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61) +#define RT_BF_CHECK_DO_62(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62) \ + RT_BF_CHECK_DO_61(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62) +#define RT_BF_CHECK_DO_63(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63) \ + RT_BF_CHECK_DO_62(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63) +#define RT_BF_CHECK_DO_64(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63, f64) \ + RT_BF_CHECK_DO_63(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63, f64) +/** @} */ + +/** @def RT_BF_ASSERT_COMPILE_CHECKS + * Emits a series of AssertCompile statements checking that the bit-field + * declarations doesn't overlap, has holes, and generally makes some sense. + * + * This requires variadic macros because its too much to type otherwise. + */ +#if defined(RT_COMPILER_SUPPORTS_VA_ARGS) || defined(DOXYGEN_RUNNING) +# define RT_BF_ASSERT_COMPILE_CHECKS(a_Prefix, a_uZero, a_uCovered, a_Fields) \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_OR_MASK, a_uZero, a_Prefix, RT_UNPACK_ARGS a_Fields ) == a_uCovered); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_XOR_MASK, a_uCovered, a_Prefix, RT_UNPACK_ARGS a_Fields ) == 0); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_1ST_MASK_BIT, true, a_Prefix, RT_UNPACK_ARGS a_Fields ) == true); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_MASK_START, true, a_Prefix, RT_UNPACK_ARGS a_Fields ) == true) +/** Bit field compile time check helper + * @internal */ +# define RT_BF_CHECK_DO_N(a_DoThis, a_uLeft, a_RightPrefix, ...) \ + RT_UNPACK_CALL(RT_CONCAT(RT_BF_CHECK_DO_, RT_EXPAND(RT_COUNT_VA_ARGS(__VA_ARGS__))), (a_DoThis, a_uLeft, a_RightPrefix, __VA_ARGS__)) +#else +# define RT_BF_ASSERT_COMPILE_CHECKS(a_Prefix, a_uZero, a_uCovered, a_Fields) AssertCompile(true) +#endif + + +/** @def RT_ALIGN + * Align macro. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * + * @remark Be extremely careful when using this macro with type which sizeof != sizeof int. + * When possible use any of the other RT_ALIGN_* macros. And when that's not + * possible, make 101% sure that uAlignment is specified with a right sized type. + * + * Specifying an unsigned 32-bit alignment constant with a 64-bit value will give + * you a 32-bit return value! + * + * In short: Don't use this macro. Use RT_ALIGN_T() instead. + */ +#define RT_ALIGN(u, uAlignment) ( ((u) + ((uAlignment) - 1)) & ~((uAlignment) - 1) ) + +/** @def RT_ALIGN_T + * Align macro. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param type Integer type to use while aligning. + * @remark This macro is the preferred alignment macro, it doesn't have any of the pitfalls RT_ALIGN has. + */ +#define RT_ALIGN_T(u, uAlignment, type) ( ((type)(u) + ((uAlignment) - 1)) & ~(type)((uAlignment) - 1) ) + +/** @def RT_ALIGN_32 + * Align macro for a 32-bit value. + * @param u32 Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_32(u32, uAlignment) RT_ALIGN_T(u32, uAlignment, uint32_t) + +/** @def RT_ALIGN_64 + * Align macro for a 64-bit value. + * @param u64 Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_64(u64, uAlignment) RT_ALIGN_T(u64, uAlignment, uint64_t) + +/** @def RT_ALIGN_Z + * Align macro for size_t. + * @param cb Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_Z(cb, uAlignment) RT_ALIGN_T(cb, uAlignment, size_t) + +/** @def RT_ALIGN_P + * Align macro for pointers. + * @param pv Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_P(pv, uAlignment) RT_ALIGN_PT(pv, uAlignment, void *) + +/** @def RT_ALIGN_PT + * Align macro for pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, uintptr_t) ) + +/** @def RT_ALIGN_R3PT + * Align macro for ring-3 pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_R3PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTR3UINTPTR) ) + +/** @def RT_ALIGN_R0PT + * Align macro for ring-0 pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_R0PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTR0UINTPTR) ) + +/** @def RT_ALIGN_GCPT + * Align macro for GC pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_GCPT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTGCUINTPTR) ) + + +/** @def RT_OFFSETOF + * Our own special offsetof() variant, returns a signed result. + * + * This differs from the usual offsetof() in that it's not relying on builtin + * compiler stuff and thus can use variables in arrays the structure may + * contain. This is useful to determine the sizes of structures ending + * with a variable length field. For gcc >= 4.4 see @bugref{7775}. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + */ +#if defined(__cplusplus) && RT_GNUC_PREREQ(4, 4) +# define RT_OFFSETOF(type, member) ( (int)(uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 ) +#else +# define RT_OFFSETOF(type, member) ( (int)(uintptr_t)&( ((type *)(void *)0)->member) ) +#endif + +/** @def RT_UOFFSETOF + * Our own special offsetof() variant, returns an unsigned result. + * + * This differs from the usual offsetof() in that it's not relying on builtin + * compiler stuff and thus can use variables in arrays the structure may + * contain. This is useful to determine the sizes of structures ending + * with a variable length field. For gcc >= 4.4 see @bugref{7775}. + * + * @returns offset into the structure of the specified member. unsigned. + * @param type Structure type. + * @param member Member. + */ +#if defined(__cplusplus) && RT_GNUC_PREREQ(4, 4) +# define RT_UOFFSETOF(type, member) ( (uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 ) +#else +# define RT_UOFFSETOF(type, member) ( (uintptr_t)&( ((type *)(void *)0)->member) ) +#endif + +/** @def RT_OFFSETOF_ADD + * RT_OFFSETOF with an addend. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + * @param addend The addend to add to the offset. + */ +#define RT_OFFSETOF_ADD(type, member, addend) ( (int)RT_UOFFSETOF_ADD(type, member, addend) ) + +/** @def RT_UOFFSETOF_ADD + * RT_UOFFSETOF with an addend. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + * @param addend The addend to add to the offset. + */ +#define RT_UOFFSETOF_ADD(type, member, addend) ( (uintptr_t)&( ((type *)(void *)(uintptr_t)(addend))->member) ) + +/** @def RT_SIZEOFMEMB + * Get the size of a structure member. + * + * @returns size of the structure member. + * @param type Structure type. + * @param member Member. + */ +#define RT_SIZEOFMEMB(type, member) ( sizeof(((type *)(void *)0)->member) ) + +/** @def RT_UOFFSET_AFTER + * Returns the offset of the first byte following a structure/union member. + * + * @return byte offset into the struct. + * @param a_Type Structure type. + * @param a_Member The member name. + */ +#define RT_UOFFSET_AFTER(a_Type, a_Member) ( RT_UOFFSETOF(a_Type, a_Member) + RT_SIZEOFMEMB(a_Type, a_Member) ) + +/** @def RT_FROM_MEMBER + * Convert a pointer to a structure member into a pointer to the structure. + * + * @returns pointer to the structure. + * @param pMem Pointer to the member. + * @param Type Structure type. + * @param Member Member name. + */ +#define RT_FROM_MEMBER(pMem, Type, Member) ( (Type *) ((uint8_t *)(void *)(pMem) - RT_UOFFSETOF(Type, Member)) ) + +/** @def RT_FROM_CPP_MEMBER + * Same as RT_FROM_MEMBER except it avoids the annoying g++ warnings about + * invalid access to non-static data member of NULL object. + * + * @returns pointer to the structure. + * @param pMem Pointer to the member. + * @param Type Structure type. + * @param Member Member name. + * + * @remarks Using the __builtin_offsetof does not shut up the compiler. + */ +#if defined(__GNUC__) && defined(__cplusplus) +# define RT_FROM_CPP_MEMBER(pMem, Type, Member) \ + ( (Type *) ((uintptr_t)(pMem) - (uintptr_t)&((Type *)0x1000)->Member + 0x1000U) ) +#else +# define RT_FROM_CPP_MEMBER(pMem, Type, Member) RT_FROM_MEMBER(pMem, Type, Member) +#endif + +/** @def RT_ELEMENTS + * Calculates the number of elements in a statically sized array. + * @returns Element count. + * @param aArray Array in question. + */ +#define RT_ELEMENTS(aArray) ( sizeof(aArray) / sizeof((aArray)[0]) ) + +/** @def RT_FLEXIBLE_ARRAY + * What to up inside the square brackets when declaring a structure member + * with a flexible size. + * + * @note Use RT_UOFFSETOF() to calculate the structure size. + * + * @note Never to a sizeof() on the structure or member! + * + * @note The member must be the last one. + * + * @note GCC does not permit using this in a union. So, for unions you must + * use RT_FLEXIBLE_ARRAY_IN_UNION instead. + * + * @note GCC does not permit using this in nested structures, where as MSC + * does. So, use RT_FLEXIBLE_ARRAY_NESTED for that. + * + * @sa RT_FLEXIBLE_ARRAY_NESTED, RT_FLEXIBLE_ARRAY_IN_UNION + */ +#if RT_MSC_PREREQ(RT_MSC_VER_VS2005) /** @todo Probably much much earlier. */ \ + || (defined(__cplusplus) && RT_GNUC_PREREQ(6, 1) && !RT_GNUC_PREREQ(7, 0)) /* gcc-7 warns again */\ + || defined(__WATCOMC__) /* openwatcom 1.9 supports it, we don't care about older atm. */ \ + || RT_CLANG_PREREQ_EX(3, 4, 0) /* Only tested clang v3.4, support is probably older. */ +# define RT_FLEXIBLE_ARRAY +# if defined(__cplusplus) && defined(_MSC_VER) +# pragma warning(disable:4200) /* -wd4200 does not work with VS2010 */ +# endif +#elif defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 1999901L +# define RT_FLEXIBLE_ARRAY +# else +# define RT_FLEXIBLE_ARRAY 1 +# endif +#else +# define RT_FLEXIBLE_ARRAY 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_NESTED + * Variant of RT_FLEXIBLE_ARRAY for use in structures that are nested. + * + * GCC only allow the use of flexible array member in the top structure, whereas + * MSC is less strict and let you do struct { struct { char szName[]; } s; }; + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @note GCC does not permit using this in a union. So, for unions you must + * use RT_FLEXIBLE_ARRAY_IN_NESTED_UNION instead. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_NESTED RT_FLEXIBLE_ARRAY +#else +# define RT_FLEXIBLE_ARRAY_NESTED 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_IN_UNION + * The union version of RT_FLEXIBLE_ARRAY. + * + * @remarks GCC does not support flexible array members in unions, 6.1.x + * actively checks for this. Visual C++ 2010 seems happy with it. + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_IN_UNION RT_FLEXIBLE_ARRAY +#else +# define RT_FLEXIBLE_ARRAY_IN_UNION 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + * The union version of RT_FLEXIBLE_ARRAY_NESTED. + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_IN_NESTED_UNION RT_FLEXIBLE_ARRAY_NESTED +#else +# define RT_FLEXIBLE_ARRAY_IN_NESTED_UNION 1 +#endif + +/** @def RT_UNION_NM + * For compilers (like DTrace) that does not grok nameless unions, we have a + * little hack to make them palatable. + */ +/** @def RT_STRUCT_NM + * For compilers (like DTrace) that does not grok nameless structs (it is + * non-standard C++), we have a little hack to make them palatable. + */ +#ifdef IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS +# define RT_UNION_NM(a_Nm) a_Nm +# define RT_STRUCT_NM(a_Nm) a_Nm +#else +# define RT_UNION_NM(a_Nm) +# define RT_STRUCT_NM(a_Nm) +#endif + +/** + * Checks if the value is a power of two. + * + * @returns true if power of two, false if not. + * @param uVal The value to test. + * @remarks 0 is a power of two. + * @see VERR_NOT_POWER_OF_TWO + */ +#define RT_IS_POWER_OF_TWO(uVal) ( ((uVal) & ((uVal) - 1)) == 0) + +#ifdef RT_OS_OS2 +/* Undefine RT_MAX since there is an unfortunate clash with the max + resource type define in os2.h. */ +# undef RT_MAX +#endif + +/** @def RT_MAX + * Finds the maximum value. + * @returns The higher of the two. + * @param Value1 Value 1 + * @param Value2 Value 2 + */ +#define RT_MAX(Value1, Value2) ( (Value1) >= (Value2) ? (Value1) : (Value2) ) + +/** @def RT_MIN + * Finds the minimum value. + * @returns The lower of the two. + * @param Value1 Value 1 + * @param Value2 Value 2 + */ +#define RT_MIN(Value1, Value2) ( (Value1) <= (Value2) ? (Value1) : (Value2) ) + +/** @def RT_CLAMP + * Clamps the value to minimum and maximum values. + * @returns The clamped value. + * @param Value The value to check. + * @param Min Minimum value. + * @param Max Maximum value. + */ +#define RT_CLAMP(Value, Min, Max) ( (Value) > (Max) ? (Max) : (Value) < (Min) ? (Min) : (Value) ) + +/** @def RT_ABS + * Get the absolute (non-negative) value. + * @returns The absolute value of Value. + * @param Value The value. + */ +#define RT_ABS(Value) ( (Value) >= 0 ? (Value) : -(Value) ) + +/** @def RT_BOOL + * Turn non-zero/zero into true/false + * @returns The resulting boolean value. + * @param Value The value. + */ +#define RT_BOOL(Value) ( !!(Value) ) + +/** @def RT_LO_U8 + * Gets the low uint8_t of a uint16_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U8(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint16_t)); (uint8_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U8(a) ( (uint8_t)(UINT8_MAX & (a)) ) +#else +# define RT_LO_U8(a) ( (uint8_t)(a) ) +#endif +/** @def RT_HI_U8 + * Gets the high uint8_t of a uint16_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U8(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint16_t)); (uint8_t)((a) >> 8); }) +#else +# define RT_HI_U8(a) ( (uint8_t)((a) >> 8) ) +#endif + +/** @def RT_LO_U16 + * Gets the low uint16_t of a uint32_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U16(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint32_t)); (uint16_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U16(a) ( (uint16_t)(UINT16_MAX & (a)) ) +#else +# define RT_LO_U16(a) ( (uint16_t)(a) ) +#endif +/** @def RT_HI_U16 + * Gets the high uint16_t of a uint32_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U16(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint32_t)); (uint16_t)((a) >> 16); }) +#else +# define RT_HI_U16(a) ( (uint16_t)((a) >> 16) ) +#endif + +/** @def RT_LO_U32 + * Gets the low uint32_t of a uint64_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U32(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint64_t)); (uint32_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U32(a) ( (uint32_t)(UINT32_MAX & (a)) ) +#else +# define RT_LO_U32(a) ( (uint32_t)(a) ) +#endif +/** @def RT_HI_U32 + * Gets the high uint32_t of a uint64_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U32(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint64_t)); (uint32_t)((a) >> 32); }) +#else +# define RT_HI_U32(a) ( (uint32_t)((a) >> 32) ) +#endif + +/** @def RT_BYTE1 + * Gets the first byte of something. */ +#define RT_BYTE1(a) ( (a) & 0xff ) +/** @def RT_BYTE2 + * Gets the second byte of something. */ +#define RT_BYTE2(a) ( ((a) >> 8) & 0xff ) +/** @def RT_BYTE3 + * Gets the second byte of something. */ +#define RT_BYTE3(a) ( ((a) >> 16) & 0xff ) +/** @def RT_BYTE4 + * Gets the fourth byte of something. */ +#define RT_BYTE4(a) ( ((a) >> 24) & 0xff ) +/** @def RT_BYTE5 + * Gets the fifth byte of something. */ +#define RT_BYTE5(a) ( ((a) >> 32) & 0xff ) +/** @def RT_BYTE6 + * Gets the sixth byte of something. */ +#define RT_BYTE6(a) ( ((a) >> 40) & 0xff ) +/** @def RT_BYTE7 + * Gets the seventh byte of something. */ +#define RT_BYTE7(a) ( ((a) >> 48) & 0xff ) +/** @def RT_BYTE8 + * Gets the eight byte of something. */ +#define RT_BYTE8(a) ( ((a) >> 56) & 0xff ) + + +/** @def RT_LODWORD + * Gets the low dword (=uint32_t) of something. + * @deprecated Use RT_LO_U32. */ +#define RT_LODWORD(a) ( (uint32_t)(a) ) +/** @def RT_HIDWORD + * Gets the high dword (=uint32_t) of a 64-bit of something. + * @deprecated Use RT_HI_U32. */ +#define RT_HIDWORD(a) ( (uint32_t)((a) >> 32) ) + +/** @def RT_LOWORD + * Gets the low word (=uint16_t) of something. + * @deprecated Use RT_LO_U16. */ +#define RT_LOWORD(a) ( (a) & 0xffff ) +/** @def RT_HIWORD + * Gets the high word (=uint16_t) of a 32-bit something. + * @deprecated Use RT_HI_U16. */ +#define RT_HIWORD(a) ( (a) >> 16 ) + +/** @def RT_LOBYTE + * Gets the low byte of something. + * @deprecated Use RT_LO_U8. */ +#define RT_LOBYTE(a) ( (a) & 0xff ) +/** @def RT_HIBYTE + * Gets the high byte of a 16-bit something. + * @deprecated Use RT_HI_U8. */ +#define RT_HIBYTE(a) ( (a) >> 8 ) + + +/** @def RT_MAKE_U64 + * Constructs a uint64_t value from two uint32_t values. + */ +#define RT_MAKE_U64(Lo, Hi) ( (uint64_t)((uint32_t)(Hi)) << 32 | (uint32_t)(Lo) ) + +/** @def RT_MAKE_U64_FROM_U16 + * Constructs a uint64_t value from four uint16_t values. + */ +#define RT_MAKE_U64_FROM_U16(w0, w1, w2, w3) \ + ((uint64_t)( (uint64_t)((uint16_t)(w3)) << 48 \ + | (uint64_t)((uint16_t)(w2)) << 32 \ + | (uint32_t)((uint16_t)(w1)) << 16 \ + | (uint16_t)(w0) )) + +/** @def RT_MAKE_U64_FROM_U8 + * Constructs a uint64_t value from eight uint8_t values. + */ +#define RT_MAKE_U64_FROM_U8(b0, b1, b2, b3, b4, b5, b6, b7) \ + ((uint64_t)( (uint64_t)((uint8_t)(b7)) << 56 \ + | (uint64_t)((uint8_t)(b6)) << 48 \ + | (uint64_t)((uint8_t)(b5)) << 40 \ + | (uint64_t)((uint8_t)(b4)) << 32 \ + | (uint32_t)((uint8_t)(b3)) << 24 \ + | (uint32_t)((uint8_t)(b2)) << 16 \ + | (uint16_t)((uint8_t)(b1)) << 8 \ + | (uint8_t)(b0) )) + +/** @def RT_MAKE_U32 + * Constructs a uint32_t value from two uint16_t values. + */ +#define RT_MAKE_U32(Lo, Hi) \ + ((uint32_t)( (uint32_t)((uint16_t)(Hi)) << 16 \ + | (uint16_t)(Lo) )) + +/** @def RT_MAKE_U32_FROM_U8 + * Constructs a uint32_t value from four uint8_t values. + */ +#define RT_MAKE_U32_FROM_U8(b0, b1, b2, b3) \ + ((uint32_t)( (uint32_t)((uint8_t)(b3)) << 24 \ + | (uint32_t)((uint8_t)(b2)) << 16 \ + | (uint16_t)((uint8_t)(b1)) << 8 \ + | (uint8_t)(b0) )) + +/** @def RT_MAKE_U16 + * Constructs a uint16_t value from two uint8_t values. + */ +#define RT_MAKE_U16(Lo, Hi) \ + ((uint16_t)( (uint16_t)((uint8_t)(Hi)) << 8 \ + | (uint8_t)(Lo) )) + + +/** @def RT_BSWAP_U64 + * Reverses the byte order of an uint64_t value. */ +#if 0 +# define RT_BSWAP_U64(u64) RT_BSWAP_U64_C(u64) +#elif defined(__GNUC__) +# define RT_BSWAP_U64(u64) (__builtin_constant_p((u64)) \ + ? RT_BSWAP_U64_C(u64) : ASMByteSwapU64(u64)) +#else +# define RT_BSWAP_U64(u64) ASMByteSwapU64(u64) +#endif + +/** @def RT_BSWAP_U32 + * Reverses the byte order of an uint32_t value. */ +#if 0 +# define RT_BSWAP_U32(u32) RT_BSWAP_U32_C(u32) +#elif defined(__GNUC__) +# define RT_BSWAP_U32(u32) (__builtin_constant_p((u32)) \ + ? RT_BSWAP_U32_C(u32) : ASMByteSwapU32(u32)) +#else +# define RT_BSWAP_U32(u32) ASMByteSwapU32(u32) +#endif + +/** @def RT_BSWAP_U16 + * Reverses the byte order of an uint16_t value. */ +#if 0 +# define RT_BSWAP_U16(u16) RT_BSWAP_U16_C(u16) +#elif defined(__GNUC__) +# define RT_BSWAP_U16(u16) (__builtin_constant_p((u16)) \ + ? RT_BSWAP_U16_C(u16) : ASMByteSwapU16(u16)) +#else +# define RT_BSWAP_U16(u16) ASMByteSwapU16(u16) +#endif + + +/** @def RT_BSWAP_U64_C + * Reverses the byte order of an uint64_t constant. */ +#define RT_BSWAP_U64_C(u64) RT_MAKE_U64(RT_BSWAP_U32_C((u64) >> 32), RT_BSWAP_U32_C((u64) & 0xffffffff)) + +/** @def RT_BSWAP_U32_C + * Reverses the byte order of an uint32_t constant. */ +#define RT_BSWAP_U32_C(u32) RT_MAKE_U32_FROM_U8(RT_BYTE4(u32), RT_BYTE3(u32), RT_BYTE2(u32), RT_BYTE1(u32)) + +/** @def RT_BSWAP_U16_C + * Reverses the byte order of an uint16_t constant. */ +#define RT_BSWAP_U16_C(u16) RT_MAKE_U16(RT_HIBYTE(u16), RT_LOBYTE(u16)) + + +/** @def RT_H2LE_U64 + * Converts an uint64_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U64(u64) RT_BSWAP_U64(u64) +#else +# define RT_H2LE_U64(u64) (u64) +#endif + +/** @def RT_H2LE_U64_C + * Converts an uint64_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U64_C(u64) RT_BSWAP_U64_C(u64) +#else +# define RT_H2LE_U64_C(u64) (u64) +#endif + +/** @def RT_H2LE_U32 + * Converts an uint32_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U32(u32) RT_BSWAP_U32(u32) +#else +# define RT_H2LE_U32(u32) (u32) +#endif + +/** @def RT_H2LE_U32_C + * Converts an uint32_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U32_C(u32) RT_BSWAP_U32_C(u32) +#else +# define RT_H2LE_U32_C(u32) (u32) +#endif + +/** @def RT_H2LE_U16 + * Converts an uint16_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U16(u16) RT_BSWAP_U16(u16) +#else +# define RT_H2LE_U16(u16) (u16) +#endif + +/** @def RT_H2LE_U16_C + * Converts an uint16_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U16_C(u16) RT_BSWAP_U16_C(u16) +#else +# define RT_H2LE_U16_C(u16) (u16) +#endif + + +/** @def RT_LE2H_U64 + * Converts an uint64_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U64(u64) RT_BSWAP_U64(u64) +#else +# define RT_LE2H_U64(u64) (u64) +#endif + +/** @def RT_LE2H_U64_C + * Converts an uint64_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U64_C(u64) RT_BSWAP_U64_C(u64) +#else +# define RT_LE2H_U64_C(u64) (u64) +#endif + +/** @def RT_LE2H_U32 + * Converts an uint32_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U32(u32) RT_BSWAP_U32(u32) +#else +# define RT_LE2H_U32(u32) (u32) +#endif + +/** @def RT_LE2H_U32_C + * Converts an uint32_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U32_C(u32) RT_BSWAP_U32_C(u32) +#else +# define RT_LE2H_U32_C(u32) (u32) +#endif + +/** @def RT_LE2H_U16 + * Converts an uint16_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U16(u16) RT_BSWAP_U16(u16) +#else +# define RT_LE2H_U16(u16) (u16) +#endif + +/** @def RT_LE2H_U16_C + * Converts an uint16_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U16_C(u16) RT_BSWAP_U16_C(u16) +#else +# define RT_LE2H_U16_C(u16) (u16) +#endif + + +/** @def RT_H2BE_U64 + * Converts an uint64_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U64(u64) (u64) +#else +# define RT_H2BE_U64(u64) RT_BSWAP_U64(u64) +#endif + +/** @def RT_H2BE_U64_C + * Converts an uint64_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U64_C(u64) (u64) +#else +# define RT_H2BE_U64_C(u64) RT_BSWAP_U64_C(u64) +#endif + +/** @def RT_H2BE_U32 + * Converts an uint32_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U32(u32) (u32) +#else +# define RT_H2BE_U32(u32) RT_BSWAP_U32(u32) +#endif + +/** @def RT_H2BE_U32_C + * Converts an uint32_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U32_C(u32) (u32) +#else +# define RT_H2BE_U32_C(u32) RT_BSWAP_U32_C(u32) +#endif + +/** @def RT_H2BE_U16 + * Converts an uint16_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U16(u16) (u16) +#else +# define RT_H2BE_U16(u16) RT_BSWAP_U16(u16) +#endif + +/** @def RT_H2BE_U16_C + * Converts an uint16_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U16_C(u16) (u16) +#else +# define RT_H2BE_U16_C(u16) RT_BSWAP_U16_C(u16) +#endif + +/** @def RT_BE2H_U64 + * Converts an uint64_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U64(u64) (u64) +#else +# define RT_BE2H_U64(u64) RT_BSWAP_U64(u64) +#endif + +/** @def RT_BE2H_U64 + * Converts an uint64_t constant from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U64_C(u64) (u64) +#else +# define RT_BE2H_U64_C(u64) RT_BSWAP_U64_C(u64) +#endif + +/** @def RT_BE2H_U32 + * Converts an uint32_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U32(u32) (u32) +#else +# define RT_BE2H_U32(u32) RT_BSWAP_U32(u32) +#endif + +/** @def RT_BE2H_U32_C + * Converts an uint32_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U32_C(u32) (u32) +#else +# define RT_BE2H_U32_C(u32) RT_BSWAP_U32_C(u32) +#endif + +/** @def RT_BE2H_U16 + * Converts an uint16_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U16(u16) (u16) +#else +# define RT_BE2H_U16(u16) RT_BSWAP_U16(u16) +#endif + +/** @def RT_BE2H_U16_C + * Converts an uint16_t constant from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U16_C(u16) (u16) +#else +# define RT_BE2H_U16_C(u16) RT_BSWAP_U16_C(u16) +#endif + + +/** @def RT_H2N_U64 + * Converts an uint64_t value from host to network byte order. */ +#define RT_H2N_U64(u64) RT_H2BE_U64(u64) + +/** @def RT_H2N_U64_C + * Converts an uint64_t constant from host to network byte order. */ +#define RT_H2N_U64_C(u64) RT_H2BE_U64_C(u64) + +/** @def RT_H2N_U32 + * Converts an uint32_t value from host to network byte order. */ +#define RT_H2N_U32(u32) RT_H2BE_U32(u32) + +/** @def RT_H2N_U32_C + * Converts an uint32_t constant from host to network byte order. */ +#define RT_H2N_U32_C(u32) RT_H2BE_U32_C(u32) + +/** @def RT_H2N_U16 + * Converts an uint16_t value from host to network byte order. */ +#define RT_H2N_U16(u16) RT_H2BE_U16(u16) + +/** @def RT_H2N_U16_C + * Converts an uint16_t constant from host to network byte order. */ +#define RT_H2N_U16_C(u16) RT_H2BE_U16_C(u16) + +/** @def RT_N2H_U64 + * Converts an uint64_t value from network to host byte order. */ +#define RT_N2H_U64(u64) RT_BE2H_U64(u64) + +/** @def RT_N2H_U64_C + * Converts an uint64_t constant from network to host byte order. */ +#define RT_N2H_U64_C(u64) RT_BE2H_U64_C(u64) + +/** @def RT_N2H_U32 + * Converts an uint32_t value from network to host byte order. */ +#define RT_N2H_U32(u32) RT_BE2H_U32(u32) + +/** @def RT_N2H_U32_C + * Converts an uint32_t constant from network to host byte order. */ +#define RT_N2H_U32_C(u32) RT_BE2H_U32_C(u32) + +/** @def RT_N2H_U16 + * Converts an uint16_t value from network to host byte order. */ +#define RT_N2H_U16(u16) RT_BE2H_U16(u16) + +/** @def RT_N2H_U16_C + * Converts an uint16_t value from network to host byte order. */ +#define RT_N2H_U16_C(u16) RT_BE2H_U16_C(u16) + + +/* + * The BSD sys/param.h + machine/param.h file is a major source of + * namespace pollution. Kill off some of the worse ones unless we're + * compiling kernel code. + */ +#if defined(RT_OS_DARWIN) \ + && !defined(KERNEL) \ + && !defined(RT_NO_BSD_PARAM_H_UNDEFING) \ + && ( defined(_SYS_PARAM_H_) || defined(_I386_PARAM_H_) ) +/* sys/param.h: */ +# undef PSWP +# undef PVM +# undef PINOD +# undef PRIBO +# undef PVFS +# undef PZERO +# undef PSOCK +# undef PWAIT +# undef PLOCK +# undef PPAUSE +# undef PUSER +# undef PRIMASK +# undef MINBUCKET +# undef MAXALLOCSAVE +# undef FSHIFT +# undef FSCALE + +/* i386/machine.h: */ +# undef ALIGN +# undef ALIGNBYTES +# undef DELAY +# undef STATUS_WORD +# undef USERMODE +# undef BASEPRI +# undef MSIZE +# undef CLSIZE +# undef CLSIZELOG2 +#endif + +/** @def NIL_OFFSET + * NIL offset. + * Whenever we use offsets instead of pointers to save space and relocation effort + * NIL_OFFSET shall be used as the equivalent to NULL. + */ +#define NIL_OFFSET (~0U) + + +/** @def NOREF + * Keeps the compiler from bitching about an unused parameter, local variable, + * or other stuff, will never use _Pragma are is thus more flexible. + */ +#define NOREF(var) (void)(var) + +/** @def RT_NOREF_PV + * Keeps the compiler from bitching about an unused parameter or local variable. + * This one cannot be used with structure members and such, like for instance + * AssertRC may end up doing due to its generic nature. + */ +#if defined(__cplusplus) && RT_CLANG_PREREQ(6, 0) +# define RT_NOREF_PV(var) _Pragma(RT_STR(unused(var))) +#else +# define RT_NOREF_PV(var) (void)(var) +#endif + +/** @def RT_NOREF1 + * RT_NOREF_PV shorthand taking on parameter. */ +#define RT_NOREF1(var1) RT_NOREF_PV(var1) +/** @def RT_NOREF2 + * RT_NOREF_PV shorthand taking two parameters. */ +#define RT_NOREF2(var1, var2) RT_NOREF_PV(var1); RT_NOREF1(var2) +/** @def RT_NOREF3 + * RT_NOREF_PV shorthand taking three parameters. */ +#define RT_NOREF3(var1, var2, var3) RT_NOREF_PV(var1); RT_NOREF2(var2, var3) +/** @def RT_NOREF4 + * RT_NOREF_PV shorthand taking four parameters. */ +#define RT_NOREF4(var1, var2, var3, var4) RT_NOREF_PV(var1); RT_NOREF3(var2, var3, var4) +/** @def RT_NOREF5 + * RT_NOREF_PV shorthand taking five parameters. */ +#define RT_NOREF5(var1, var2, var3, var4, var5) RT_NOREF_PV(var1); RT_NOREF4(var2, var3, var4, var5) +/** @def RT_NOREF6 + * RT_NOREF_PV shorthand taking six parameters. */ +#define RT_NOREF6(var1, var2, var3, var4, var5, var6) RT_NOREF_PV(var1); RT_NOREF5(var2, var3, var4, var5, var6) +/** @def RT_NOREF7 + * RT_NOREF_PV shorthand taking seven parameters. */ +#define RT_NOREF7(var1, var2, var3, var4, var5, var6, var7) \ + RT_NOREF_PV(var1); RT_NOREF6(var2, var3, var4, var5, var6, var7) +/** @def RT_NOREF8 + * RT_NOREF_PV shorthand taking eight parameters. */ +#define RT_NOREF8(var1, var2, var3, var4, var5, var6, var7, var8) \ + RT_NOREF_PV(var1); RT_NOREF7(var2, var3, var4, var5, var6, var7, var8) +/** @def RT_NOREF9 + * RT_NOREF_PV shorthand taking nine parameters. */ +#define RT_NOREF9(var1, var2, var3, var4, var5, var6, var7, var8, var9) \ + RT_NOREF_PV(var1); RT_NOREF8(var2, var3, var4, var5, var6, var7, var8, var9) +/** @def RT_NOREF10 + * RT_NOREF_PV shorthand taking ten parameters. */ +#define RT_NOREF10(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10) \ + RT_NOREF_PV(var1); RT_NOREF_PV(var2); RT_NOREF_PV(var3); RT_NOREF_PV(var4); RT_NOREF_PV(var5); RT_NOREF_PV(var6); \ + RT_NOREF_PV(var7); RT_NOREF_PV(var8); RT_NOREF_PV(var9); RT_NOREF_PV(var10) +/** @def RT_NOREF11 + * RT_NOREF_PV shorthand taking eleven parameters. */ +#define RT_NOREF11(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11) \ + RT_NOREF_PV(var1); RT_NOREF10(var2, var3, var4, var5, var6, var7, var8, var9, var10) +/** @def RT_NOREF12 + * RT_NOREF_PV shorthand taking twelve parameters. */ +#define RT_NOREF12(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) \ + RT_NOREF_PV(var1); RT_NOREF11(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) +/** @def RT_NOREF13 + * RT_NOREF_PV shorthand taking thirteen parameters. */ +#define RT_NOREF13(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13) \ + RT_NOREF_PV(var1); RT_NOREF12(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13) +/** @def RT_NOREF14 + * RT_NOREF_PV shorthand taking fourteen parameters. */ +#define RT_NOREF14(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14) \ + RT_NOREF_PV(var1); RT_NOREF13(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14) +/** @def RT_NOREF15 + * RT_NOREF_PV shorthand taking fifteen parameters. */ +#define RT_NOREF15(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15) \ + RT_NOREF_PV(var1); RT_NOREF14(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15) +/** @def RT_NOREF16 + * RT_NOREF_PV shorthand taking fifteen parameters. */ +#define RT_NOREF16(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16) \ + RT_NOREF_PV(var1); RT_NOREF15(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16) +/** @def RT_NOREF17 + * RT_NOREF_PV shorthand taking seventeen parameters. */ +#define RT_NOREF17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) \ + RT_NOREF_PV(v1); RT_NOREF16(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +/** @def RT_NOREF18 + * RT_NOREF_PV shorthand taking eighteen parameters. */ +#define RT_NOREF18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) \ + RT_NOREF_PV(v1); RT_NOREF17(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +/** @def RT_NOREF19 + * RT_NOREF_PV shorthand taking nineteen parameters. */ +#define RT_NOREF19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) \ + RT_NOREF_PV(v1); RT_NOREF18(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +/** @def RT_NOREF20 + * RT_NOREF_PV shorthand taking twenty parameters. */ +#define RT_NOREF20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) \ + RT_NOREF_PV(v1); RT_NOREF19(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +/** @def RT_NOREF21 + * RT_NOREF_PV shorthand taking twentyone parameters. */ +#define RT_NOREF21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) \ + RT_NOREF_PV(v1); RT_NOREF20(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +/** @def RT_NOREF22 + * RT_NOREF_PV shorthand taking twentytwo parameters. */ +#define RT_NOREF22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) \ + RT_NOREF_PV(v1); RT_NOREF21(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) + +/** @def RT_NOREF + * RT_NOREF_PV variant using the variadic macro feature of C99. + * @remarks Only use this in sources */ +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RT_NOREF(...) \ + RT_UNPACK_CALL(RT_CONCAT(RT_NOREF, RT_EXPAND(RT_COUNT_VA_ARGS(__VA_ARGS__))),(__VA_ARGS__)) +#endif + + +/** @def RT_BREAKPOINT + * Emit a debug breakpoint instruction. + * + * @remarks In the x86/amd64 gnu world we add a nop instruction after the int3 + * to force gdb to remain at the int3 source line. + * @remarks The L4 kernel will try make sense of the breakpoint, thus the jmp on + * x86/amd64. + */ +#ifdef __GNUC__ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# if !defined(__L4ENV__) +# define RT_BREAKPOINT() __asm__ __volatile__("int $3\n\tnop\n\t") +# else +# define RT_BREAKPOINT() __asm__ __volatile__("int3; jmp 1f; 1:\n\t") +# endif +# elif defined(RT_ARCH_SPARC64) +# define RT_BREAKPOINT() __asm__ __volatile__("illtrap 0\n\t") /** @todo Sparc64: this is just a wild guess. */ +# elif defined(RT_ARCH_SPARC) +# define RT_BREAKPOINT() __asm__ __volatile__("unimp 0\n\t") /** @todo Sparc: this is just a wild guess (same as Sparc64, just different name). */ +# endif +#endif +#ifdef _MSC_VER +# define RT_BREAKPOINT() __debugbreak() +#endif +#if defined(__IBMC__) || defined(__IBMCPP__) +# define RT_BREAKPOINT() __interrupt(3) +#endif +#if defined(__WATCOMC__) +# define RT_BREAKPOINT() _asm { int 3 } +#endif +#ifndef RT_BREAKPOINT +# error "This compiler/arch is not supported!" +#endif + + +/** @defgroup grp_rt_cdefs_size Size Constants + * (Of course, these are binary computer terms, not SI.) + * @{ + */ +/** 1 K (Kilo) (1 024). */ +#define _1K 0x00000400 +/** 2 K (Kilo) (2 048). */ +#define _2K 0x00000800 +/** 4 K (Kilo) (4 096). */ +#define _4K 0x00001000 +/** 8 K (Kilo) (8 192). */ +#define _8K 0x00002000 +/** 16 K (Kilo) (16 384). */ +#define _16K 0x00004000 +/** 32 K (Kilo) (32 768). */ +#define _32K 0x00008000 +/** 64 K (Kilo) (65 536). */ +#if ARCH_BITS != 16 +# define _64K 0x00010000 +#else +# define _64K UINT32_C(0x00010000) +#endif +/** 128 K (Kilo) (131 072). */ +#if ARCH_BITS != 16 +# define _128K 0x00020000 +#else +# define _128K UINT32_C(0x00020000) +#endif +/** 256 K (Kilo) (262 144). */ +#if ARCH_BITS != 16 +# define _256K 0x00040000 +#else +# define _256K UINT32_C(0x00040000) +#endif +/** 512 K (Kilo) (524 288). */ +#if ARCH_BITS != 16 +# define _512K 0x00080000 +#else +# define _512K UINT32_C(0x00080000) +#endif +/** 1 M (Mega) (1 048 576). */ +#if ARCH_BITS != 16 +# define _1M 0x00100000 +#else +# define _1M UINT32_C(0x00100000) +#endif +/** 2 M (Mega) (2 097 152). */ +#if ARCH_BITS != 16 +# define _2M 0x00200000 +#else +# define _2M UINT32_C(0x00200000) +#endif +/** 4 M (Mega) (4 194 304). */ +#if ARCH_BITS != 16 +# define _4M 0x00400000 +#else +# define _4M UINT32_C(0x00400000) +#endif +/** 8 M (Mega) (8 388 608). */ +#define _8M UINT32_C(0x00800000) +/** 16 M (Mega) (16 777 216). */ +#define _16M UINT32_C(0x01000000) +/** 32 M (Mega) (33 554 432). */ +#define _32M UINT32_C(0x02000000) +/** 64 M (Mega) (67 108 864). */ +#define _64M UINT32_C(0x04000000) +/** 128 M (Mega) (134 217 728). */ +#define _128M UINT32_C(0x08000000) +/** 256 M (Mega) (268 435 456). */ +#define _256M UINT32_C(0x10000000) +/** 512 M (Mega) (536 870 912). */ +#define _512M UINT32_C(0x20000000) +/** 1 G (Giga) (1 073 741 824). (32-bit) */ +#if ARCH_BITS != 16 +# define _1G 0x40000000 +#else +# define _1G UINT32_C(0x40000000) +#endif +/** 1 G (Giga) (1 073 741 824). (64-bit) */ +#if ARCH_BITS != 16 +# define _1G64 0x40000000LL +#else +# define _1G64 UINT64_C(0x40000000) +#endif +/** 2 G (Giga) (2 147 483 648). (32-bit) */ +#define _2G32 UINT32_C(0x80000000) +/** 2 G (Giga) (2 147 483 648). (64-bit) */ +#if ARCH_BITS != 16 +# define _2G 0x0000000080000000LL +#else +# define _2G UINT64_C(0x0000000080000000) +#endif +/** 4 G (Giga) (4 294 967 296). */ +#if ARCH_BITS != 16 +# define _4G 0x0000000100000000LL +#else +# define _4G UINT64_C(0x0000000100000000) +#endif +/** 1 T (Tera) (1 099 511 627 776). */ +#if ARCH_BITS != 16 +# define _1T 0x0000010000000000LL +#else +# define _1T UINT64_C(0x0000010000000000) +#endif +/** 1 P (Peta) (1 125 899 906 842 624). */ +#if ARCH_BITS != 16 +# define _1P 0x0004000000000000LL +#else +# define _1P UINT64_C(0x0004000000000000) +#endif +/** 1 E (Exa) (1 152 921 504 606 846 976). */ +#if ARCH_BITS != 16 +# define _1E 0x1000000000000000LL +#else +# define _1E UINT64_C(0x1000000000000000) +#endif +/** 2 E (Exa) (2 305 843 009 213 693 952). */ +#if ARCH_BITS != 16 +# define _2E 0x2000000000000000ULL +#else +# define _2E UINT64_C(0x2000000000000000) +#endif +/** @} */ + +/** @defgroup grp_rt_cdefs_decimal_grouping Decimal Constant Grouping Macros + * @{ */ +#define RT_D1(g1) g1 +#define RT_D2(g1, g2) g1#g2 +#define RT_D3(g1, g2, g3) g1#g2#g3 +#define RT_D4(g1, g2, g3, g4) g1#g2#g3#g4 +#define RT_D5(g1, g2, g3, g4, g5) g1#g2#g3#g4#g5 +#define RT_D6(g1, g2, g3, g4, g5, g6) g1#g2#g3#g4#g5#g6 +#define RT_D7(g1, g2, g3, g4, g5, g6, g7) g1#g2#g3#g4#g5#g6#g7 + +#define RT_D1_U(g1) UINT32_C(g1) +#define RT_D2_U(g1, g2) UINT32_C(g1#g2) +#define RT_D3_U(g1, g2, g3) UINT32_C(g1#g2#g3) +#define RT_D4_U(g1, g2, g3, g4) UINT64_C(g1#g2#g3#g4) +#define RT_D5_U(g1, g2, g3, g4, g5) UINT64_C(g1#g2#g3#g4#g5) +#define RT_D6_U(g1, g2, g3, g4, g5, g6) UINT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_U(g1, g2, g3, g4, g5, g6, g7) UINT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_S(g1) INT32_C(g1) +#define RT_D2_S(g1, g2) INT32_C(g1#g2) +#define RT_D3_S(g1, g2, g3) INT32_C(g1#g2#g3) +#define RT_D4_S(g1, g2, g3, g4) INT64_C(g1#g2#g3#g4) +#define RT_D5_S(g1, g2, g3, g4, g5) INT64_C(g1#g2#g3#g4#g5) +#define RT_D6_S(g1, g2, g3, g4, g5, g6) INT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_S(g1, g2, g3, g4, g5, g6, g7) INT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_U32(g1) UINT32_C(g1) +#define RT_D2_U32(g1, g2) UINT32_C(g1#g2) +#define RT_D3_U32(g1, g2, g3) UINT32_C(g1#g2#g3) +#define RT_D4_U32(g1, g2, g3, g4) UINT32_C(g1#g2#g3#g4) + +#define RT_D1_S32(g1) INT32_C(g1) +#define RT_D2_S32(g1, g2) INT32_C(g1#g2) +#define RT_D3_S32(g1, g2, g3) INT32_C(g1#g2#g3) +#define RT_D4_S32(g1, g2, g3, g4) INT32_C(g1#g2#g3#g4) + +#define RT_D1_U64(g1) UINT64_C(g1) +#define RT_D2_U64(g1, g2) UINT64_C(g1#g2) +#define RT_D3_U64(g1, g2, g3) UINT64_C(g1#g2#g3) +#define RT_D4_U64(g1, g2, g3, g4) UINT64_C(g1#g2#g3#g4) +#define RT_D5_U64(g1, g2, g3, g4, g5) UINT64_C(g1#g2#g3#g4#g5) +#define RT_D6_U64(g1, g2, g3, g4, g5, g6) UINT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_U64(g1, g2, g3, g4, g5, g6, g7) UINT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_S64(g1) INT64_C(g1) +#define RT_D2_S64(g1, g2) INT64_C(g1#g2) +#define RT_D3_S64(g1, g2, g3) INT64_C(g1#g2#g3) +#define RT_D4_S64(g1, g2, g3, g4) INT64_C(g1#g2#g3#g4) +#define RT_D5_S64(g1, g2, g3, g4, g5) INT64_C(g1#g2#g3#g4#g5) +#define RT_D6_S64(g1, g2, g3, g4, g5, g6) INT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_S64(g1, g2, g3, g4, g5, g6, g7) INT64_C(g1#g2#g3#g4#g5#g6#g7) +/** @} */ + + +/** @defgroup grp_rt_cdefs_time Time Constants + * @{ + */ +/** 1 hour expressed in nanoseconds (64-bit). */ +#define RT_NS_1HOUR UINT64_C(3600000000000) +/** 1 minute expressed in nanoseconds (64-bit). */ +#define RT_NS_1MIN UINT64_C(60000000000) +/** 45 second expressed in nanoseconds. */ +#define RT_NS_45SEC UINT64_C(45000000000) +/** 30 second expressed in nanoseconds. */ +#define RT_NS_30SEC UINT64_C(30000000000) +/** 20 second expressed in nanoseconds. */ +#define RT_NS_20SEC UINT64_C(20000000000) +/** 15 second expressed in nanoseconds. */ +#define RT_NS_15SEC UINT64_C(15000000000) +/** 10 second expressed in nanoseconds. */ +#define RT_NS_10SEC UINT64_C(10000000000) +/** 1 second expressed in nanoseconds. */ +#define RT_NS_1SEC UINT32_C(1000000000) +/** 100 millsecond expressed in nanoseconds. */ +#define RT_NS_100MS UINT32_C(100000000) +/** 10 millsecond expressed in nanoseconds. */ +#define RT_NS_10MS UINT32_C(10000000) +/** 1 millsecond expressed in nanoseconds. */ +#define RT_NS_1MS UINT32_C(1000000) +/** 100 microseconds expressed in nanoseconds. */ +#define RT_NS_100US UINT32_C(100000) +/** 10 microseconds expressed in nanoseconds. */ +#define RT_NS_10US UINT32_C(10000) +/** 1 microsecond expressed in nanoseconds. */ +#define RT_NS_1US UINT32_C(1000) + +/** 1 second expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1SEC_64 UINT64_C(1000000000) +/** 100 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_100MS_64 UINT64_C(100000000) +/** 10 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_10MS_64 UINT64_C(10000000) +/** 1 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1MS_64 UINT64_C(1000000) +/** 100 microseconds expressed in nanoseconds - 64-bit type. */ +#define RT_NS_100US_64 UINT64_C(100000) +/** 10 microseconds expressed in nanoseconds - 64-bit type. */ +#define RT_NS_10US_64 UINT64_C(10000) +/** 1 microsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1US_64 UINT64_C(1000) + +/** 1 hour expressed in microseconds. */ +#define RT_US_1HOUR UINT32_C(3600000000) +/** 1 minute expressed in microseconds. */ +#define RT_US_1MIN UINT32_C(60000000) +/** 1 second expressed in microseconds. */ +#define RT_US_1SEC UINT32_C(1000000) +/** 100 millsecond expressed in microseconds. */ +#define RT_US_100MS UINT32_C(100000) +/** 10 millsecond expressed in microseconds. */ +#define RT_US_10MS UINT32_C(10000) +/** 1 millsecond expressed in microseconds. */ +#define RT_US_1MS UINT32_C(1000) + +/** 1 hour expressed in microseconds - 64-bit type. */ +#define RT_US_1HOUR_64 UINT64_C(3600000000) +/** 1 minute expressed in microseconds - 64-bit type. */ +#define RT_US_1MIN_64 UINT64_C(60000000) +/** 1 second expressed in microseconds - 64-bit type. */ +#define RT_US_1SEC_64 UINT64_C(1000000) +/** 100 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_100MS_64 UINT64_C(100000) +/** 10 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_10MS_64 UINT64_C(10000) +/** 1 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_1MS_64 UINT64_C(1000) + +/** 1 hour expressed in milliseconds. */ +#define RT_MS_1HOUR UINT32_C(3600000) +/** 1 minute expressed in milliseconds. */ +#define RT_MS_1MIN UINT32_C(60000) +/** 1 second expressed in milliseconds. */ +#define RT_MS_1SEC UINT32_C(1000) + +/** 1 hour expressed in milliseconds - 64-bit type. */ +#define RT_MS_1HOUR_64 UINT64_C(3600000) +/** 1 minute expressed in milliseconds - 64-bit type. */ +#define RT_MS_1MIN_64 UINT64_C(60000) +/** 1 second expressed in milliseconds - 64-bit type. */ +#define RT_MS_1SEC_64 UINT64_C(1000) + +/** The number of seconds per week. */ +#define RT_SEC_1WEEK UINT32_C(604800) +/** The number of seconds per day. */ +#define RT_SEC_1DAY UINT32_C(86400) +/** The number of seconds per hour. */ +#define RT_SEC_1HOUR UINT32_C(3600) + +/** The number of seconds per week - 64-bit type. */ +#define RT_SEC_1WEEK_64 UINT64_C(604800) +/** The number of seconds per day - 64-bit type. */ +#define RT_SEC_1DAY_64 UINT64_C(86400) +/** The number of seconds per hour - 64-bit type. */ +#define RT_SEC_1HOUR_64 UINT64_C(3600) +/** @} */ + + +/** @defgroup grp_rt_cdefs_dbgtype Debug Info Types + * @{ */ +/** Other format. */ +#define RT_DBGTYPE_OTHER RT_BIT_32(0) +/** Stabs. */ +#define RT_DBGTYPE_STABS RT_BIT_32(1) +/** Debug With Arbitrary Record Format (DWARF). */ +#define RT_DBGTYPE_DWARF RT_BIT_32(2) +/** Microsoft Codeview debug info. */ +#define RT_DBGTYPE_CODEVIEW RT_BIT_32(3) +/** Watcom debug info. */ +#define RT_DBGTYPE_WATCOM RT_BIT_32(4) +/** IBM High Level Language debug info. */ +#define RT_DBGTYPE_HLL RT_BIT_32(5) +/** Old OS/2 and Windows symbol file. */ +#define RT_DBGTYPE_SYM RT_BIT_32(6) +/** Map file. */ +#define RT_DBGTYPE_MAP RT_BIT_32(7) +/** @} */ + + +/** @defgroup grp_rt_cdefs_exetype Executable Image Types + * @{ */ +/** Some other format. */ +#define RT_EXETYPE_OTHER RT_BIT_32(0) +/** Portable Executable. */ +#define RT_EXETYPE_PE RT_BIT_32(1) +/** Linear eXecutable. */ +#define RT_EXETYPE_LX RT_BIT_32(2) +/** Linear Executable. */ +#define RT_EXETYPE_LE RT_BIT_32(3) +/** New Executable. */ +#define RT_EXETYPE_NE RT_BIT_32(4) +/** DOS Executable (Mark Zbikowski). */ +#define RT_EXETYPE_MZ RT_BIT_32(5) +/** COM Executable. */ +#define RT_EXETYPE_COM RT_BIT_32(6) +/** a.out Executable. */ +#define RT_EXETYPE_AOUT RT_BIT_32(7) +/** Executable and Linkable Format. */ +#define RT_EXETYPE_ELF RT_BIT_32(8) +/** Mach-O Executable (including FAT ones). */ +#define RT_EXETYPE_MACHO RT_BIT_32(9) +/** TE from UEFI. */ +#define RT_EXETYPE_TE RT_BIT_32(9) +/** @} */ + + +/** @def VALID_PTR + * Pointer validation macro. + * @param ptr The pointer. + */ +#if defined(RT_ARCH_AMD64) +# ifdef IN_RING3 +# if defined(RT_OS_DARWIN) /* first 4GB is reserved for legacy kernel. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) >= _4G \ + && !((uintptr_t)(ptr) & 0xffff800000000000ULL) ) +# elif defined(RT_OS_SOLARIS) /* The kernel only used the top 2TB, but keep it simple. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && ( ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0xffff800000000000ULL \ + || ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0) ) +# else +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && !((uintptr_t)(ptr) & 0xffff800000000000ULL) ) +# endif +# else /* !IN_RING3 */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && ( ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0xffff800000000000ULL \ + || ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0) ) +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_X86) +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) + +#elif defined(RT_ARCH_SPARC64) +# ifdef IN_RING3 +# if defined(RT_OS_SOLARIS) +/** Sparc64 user mode: According to Figure 9.4 in solaris internals */ +/** @todo # define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x80004000U >= 0x80004000U + 0x100000000ULL ) - figure this. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x80000000U >= 0x80000000U + 0x100000000ULL ) +# else +# error "Port me" +# endif +# else /* !IN_RING3 */ +# if defined(RT_OS_SOLARIS) +/** @todo Sparc64 kernel mode: This is according to Figure 11.1 in solaris + * internals. Verify in sources. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) >= 0x01000000U ) +# else +# error "Port me" +# endif +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_SPARC) +# ifdef IN_RING3 +# ifdef RT_OS_SOLARIS +/** Sparc user mode: According to + * http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/sun4/os/startup.c#510 */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x400000U >= 0x400000U + 0x2000U ) + +# else +# error "Port me" +# endif +# else /* !IN_RING3 */ +# ifdef RT_OS_SOLARIS +/** @todo Sparc kernel mode: Check the sources! */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) +# else +# error "Port me" +# endif +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_ARM) +/* ASSUMES that at least the last and first 4K are out of bounds. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) + +#else +# error "Architecture identifier missing / not implemented." +#endif + +/** Old name for RT_VALID_PTR. */ +#define VALID_PTR(ptr) RT_VALID_PTR(ptr) + +/** @def RT_VALID_ALIGNED_PTR + * Pointer validation macro that also checks the alignment. + * @param ptr The pointer. + * @param align The alignment, must be a power of two. + */ +#define RT_VALID_ALIGNED_PTR(ptr, align) \ + ( !((uintptr_t)(ptr) & (uintptr_t)((align) - 1)) \ + && VALID_PTR(ptr) ) + + +/** @def VALID_PHYS32 + * 32 bits physical address validation macro. + * @param Phys The RTGCPHYS address. + */ +#define VALID_PHYS32(Phys) ( (uint64_t)(Phys) < (uint64_t)_4G ) + +/** @def N_ + * The \#define N_ is used to mark a string for translation. This is usable in + * any part of the code, as it is only used by the tools that create message + * catalogs. This macro is a no-op as far as the compiler and code generation + * is concerned. + * + * If you want to both mark a string for translation and translate it, use _(). + */ +#define N_(s) (s) + +/** @def _ + * The \#define _ is used to mark a string for translation and to translate it + * in one step. + * + * If you want to only mark a string for translation, use N_(). + */ +#define _(s) gettext(s) + + +/** @def __PRETTY_FUNCTION__ + * With GNU C we'd like to use the builtin __PRETTY_FUNCTION__, so define that + * for the other compilers. + */ +#if !defined(__GNUC__) && !defined(__PRETTY_FUNCTION__) +# ifdef _MSC_VER +# define __PRETTY_FUNCTION__ __FUNCSIG__ +# else +# define __PRETTY_FUNCTION__ __FUNCTION__ +# endif +#endif + + +/** @def RT_STRICT + * The \#define RT_STRICT controls whether or not assertions and other runtime + * checks should be compiled in or not. This is defined when DEBUG is defined. + * If RT_NO_STRICT is defined, it will unconditionally be undefined. + * + * If you want assertions which are not subject to compile time options use + * the AssertRelease*() flavors. + */ +#if !defined(RT_STRICT) && defined(DEBUG) +# define RT_STRICT +#endif +#ifdef RT_NO_STRICT +# undef RT_STRICT +#endif + +/** @todo remove this: */ +#if !defined(RT_LOCK_STRICT) && !defined(DEBUG_bird) +# define RT_LOCK_NO_STRICT +#endif +#if !defined(RT_LOCK_STRICT_ORDER) && !defined(DEBUG_bird) +# define RT_LOCK_NO_STRICT_ORDER +#endif + +/** @def RT_LOCK_STRICT + * The \#define RT_LOCK_STRICT controls whether deadlock detection and related + * checks are done in the lock and semaphore code. It is by default enabled in + * RT_STRICT builds, but this behavior can be overridden by defining + * RT_LOCK_NO_STRICT. */ +#if !defined(RT_LOCK_STRICT) && !defined(RT_LOCK_NO_STRICT) && defined(RT_STRICT) +# define RT_LOCK_STRICT +#endif +/** @def RT_LOCK_NO_STRICT + * The \#define RT_LOCK_NO_STRICT disables RT_LOCK_STRICT. */ +#if defined(RT_LOCK_NO_STRICT) && defined(RT_LOCK_STRICT) +# undef RT_LOCK_STRICT +#endif + +/** @def RT_LOCK_STRICT_ORDER + * The \#define RT_LOCK_STRICT_ORDER controls whether locking order is checked + * by the lock and semaphore code. It is by default enabled in RT_STRICT + * builds, but this behavior can be overridden by defining + * RT_LOCK_NO_STRICT_ORDER. */ +#if !defined(RT_LOCK_STRICT_ORDER) && !defined(RT_LOCK_NO_STRICT_ORDER) && defined(RT_STRICT) +# define RT_LOCK_STRICT_ORDER +#endif +/** @def RT_LOCK_NO_STRICT_ORDER + * The \#define RT_LOCK_NO_STRICT_ORDER disables RT_LOCK_STRICT_ORDER. */ +#if defined(RT_LOCK_NO_STRICT_ORDER) && defined(RT_LOCK_STRICT_ORDER) +# undef RT_LOCK_STRICT_ORDER +#endif + + +/** Source position. */ +#define RT_SRC_POS __FILE__, __LINE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__ + +/** Source position declaration. */ +#define RT_SRC_POS_DECL const char *pszFile, unsigned iLine, const char *pszFunction + +/** Source position arguments. */ +#define RT_SRC_POS_ARGS pszFile, iLine, pszFunction + +/** Applies NOREF() to the source position arguments. */ +#define RT_SRC_POS_NOREF() do { NOREF(pszFile); NOREF(iLine); NOREF(pszFunction); } while (0) + + +/** @def RT_INLINE_ASM_EXTERNAL + * Defined as 1 if the compiler does not support inline assembly. + * The ASM* functions will then be implemented in external .asm files. + */ +#if (defined(_MSC_VER) && defined(RT_ARCH_AMD64)) \ + || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86)) \ + || defined(__WATCOMC__) +# define RT_INLINE_ASM_EXTERNAL 1 +#else +# define RT_INLINE_ASM_EXTERNAL 0 +#endif + +/** @def RT_INLINE_ASM_GNU_STYLE + * Defined as 1 if the compiler understands GNU style inline assembly. + */ +#if defined(_MSC_VER) || defined(__WATCOMC__) +# define RT_INLINE_ASM_GNU_STYLE 0 +#else +# define RT_INLINE_ASM_GNU_STYLE 1 +#endif + +/** @def RT_INLINE_ASM_USES_INTRIN + * Defined as the major MSC version if the compiler have and uses intrin.h. + * Otherwise it is 0. */ +#ifdef _MSC_VER +# if _MSC_VER >= 1700 /* Visual C++ v11.0 / 2012 */ +# define RT_INLINE_ASM_USES_INTRIN 17 +# elif _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_INLINE_ASM_USES_INTRIN 16 +# elif _MSC_VER >= 1500 /* Visual C++ v9.0 / 2008 */ +# define RT_INLINE_ASM_USES_INTRIN 15 +# elif _MSC_VER >= 1400 /* Visual C++ v8.0 / 2005 */ +# define RT_INLINE_ASM_USES_INTRIN 14 +# endif +#endif +#ifndef RT_INLINE_ASM_USES_INTRIN +# define RT_INLINE_ASM_USES_INTRIN 0 +#endif + +/** @def RT_COMPILER_SUPPORTS_LAMBDA + * If the defined, the compiler supports lambda expressions. These expressions + * are useful for embedding assertions and type checks into macros. */ +#if defined(_MSC_VER) && defined(__cplusplus) +# if _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_COMPILER_SUPPORTS_LAMBDA +# endif +#elif defined(__GNUC__) && defined(__cplusplus) +/* 4.5 or later, I think, if in ++11 mode... */ +#endif + +/** @def RT_DATA_IS_FAR + * Set to 1 if we're in 16-bit mode and use far pointers. + */ +#if ARCH_BITS == 16 && defined(__WATCOMC__) \ + && (defined(__COMPACT__) || defined(__LARGE__)) +# define RT_DATA_IS_FAR 1 +#else +# define RT_DATA_IS_FAR 0 +#endif + +/** @def RT_FAR + * For indicating far pointers in 16-bit code. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_NEAR + * For indicating near pointers in 16-bit code. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_FAR_CODE + * For indicating far 16-bit functions. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_NEAR_CODE + * For indicating near 16-bit functions. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_FAR_DATA + * For indicating far 16-bit external data, i.e. in a segment other than DATA16. + * Does nothing in 32-bit and 64-bit code. */ +#if ARCH_BITS == 16 +# define RT_FAR __far +# define RT_NEAR __near +# define RT_FAR_CODE __far +# define RT_NEAR_CODE __near +# define RT_FAR_DATA __far +#else +# define RT_FAR +# define RT_NEAR +# define RT_FAR_CODE +# define RT_NEAR_CODE +# define RT_FAR_DATA +#endif + + +/** @} */ + + +/** @defgroup grp_rt_cdefs_cpp Special Macros for C++ + * @ingroup grp_rt_cdefs + * @{ + */ + +#ifdef __cplusplus + +/** @def DECLEXPORT_CLASS + * How to declare an exported class. Place this macro after the 'class' + * keyword in the declaration of every class you want to export. + * + * @note It is necessary to use this macro even for inner classes declared + * inside the already exported classes. This is a GCC specific requirement, + * but it seems not to harm other compilers. + */ +#if defined(_MSC_VER) || defined(RT_OS_OS2) +# define DECLEXPORT_CLASS __declspec(dllexport) +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLEXPORT_CLASS __attribute__((visibility("default"))) +#else +# define DECLEXPORT_CLASS +#endif + +/** @def DECLIMPORT_CLASS + * How to declare an imported class Place this macro after the 'class' + * keyword in the declaration of every class you want to export. + * + * @note It is necessary to use this macro even for inner classes declared + * inside the already exported classes. This is a GCC specific requirement, + * but it seems not to harm other compilers. + */ +#if defined(_MSC_VER) || (defined(RT_OS_OS2) && !defined(__IBMC__) && !defined(__IBMCPP__)) +# define DECLIMPORT_CLASS __declspec(dllimport) +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLIMPORT_CLASS __attribute__((visibility("default"))) +#else +# define DECLIMPORT_CLASS +#endif + +/** @def WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP + * Macro to work around error C2593 of the not-so-smart MSVC 7.x ambiguity + * resolver. The following snippet clearly demonstrates the code causing this + * error: + * @code + * class A + * { + * public: + * operator bool() const { return false; } + * operator int*() const { return NULL; } + * }; + * int main() + * { + * A a; + * if (!a); + * if (a && 0); + * return 0; + * } + * @endcode + * The code itself seems pretty valid to me and GCC thinks the same. + * + * This macro fixes the compiler error by explicitly overloading implicit + * global operators !, && and || that take the given class instance as one of + * their arguments. + * + * The best is to use this macro right after the class declaration. + * + * @note The macro expands to nothing for compilers other than MSVC. + * + * @param Cls Class to apply the workaround to + */ +#if defined(_MSC_VER) +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP(Cls) \ + inline bool operator! (const Cls &that) { return !bool (that); } \ + inline bool operator&& (const Cls &that, bool b) { return bool (that) && b; } \ + inline bool operator|| (const Cls &that, bool b) { return bool (that) || b; } \ + inline bool operator&& (bool b, const Cls &that) { return b && bool (that); } \ + inline bool operator|| (bool b, const Cls &that) { return b || bool (that); } +#else +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP(Cls) +#endif + +/** @def WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL + * Version of WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP for template classes. + * + * @param Tpl Name of the template class to apply the workaround to + * @param ArgsDecl arguments of the template, as declared in |<>| after the + * |template| keyword, including |<>| + * @param Args arguments of the template, as specified in |<>| after the + * template class name when using the, including |<>| + * + * Example: + * @code + * // template class declaration + * template + * class Foo { ... }; + * // applied workaround + * WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL (Foo, , ) + * @endcode + */ +#if defined(_MSC_VER) +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL(Tpl, ArgsDecl, Args) \ + template ArgsDecl \ + inline bool operator! (const Tpl Args &that) { return !bool (that); } \ + template ArgsDecl \ + inline bool operator&& (const Tpl Args &that, bool b) { return bool (that) && b; } \ + template ArgsDecl \ + inline bool operator|| (const Tpl Args &that, bool b) { return bool (that) || b; } \ + template ArgsDecl \ + inline bool operator&& (bool b, const Tpl Args &that) { return b && bool (that); } \ + template ArgsDecl \ + inline bool operator|| (bool b, const Tpl Args &that) { return b || bool (that); } +#else +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL(Tpl, ArgsDecl, Args) +#endif + + +/** @def DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP + * Declares the copy constructor and the assignment operation as inlined no-ops + * (non-existent functions) for the given class. Use this macro inside the + * private section if you want to effectively disable these operations for your + * class. + * + * @param Cls class name to declare for + */ +#define DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(Cls) \ + inline Cls(const Cls &); \ + inline Cls &operator= (const Cls &) + + +/** @def DECLARE_CLS_NEW_DELETE_NOOP + * Declares the new and delete operations as no-ops (non-existent functions) + * for the given class. Use this macro inside the private section if you want + * to effectively limit creating class instances on the stack only. + * + * @note The destructor of the given class must not be virtual, otherwise a + * compile time error will occur. Note that this is not a drawback: having + * the virtual destructor for a stack-based class is absolutely useless + * (the real class of the stack-based instance is always known to the compiler + * at compile time, so it will always call the correct destructor). + * + * @param Cls class name to declare for + */ +#define DECLARE_CLS_NEW_DELETE_NOOP(Cls) \ + inline static void *operator new (size_t); \ + inline static void operator delete (void *) + +#endif /* __cplusplus */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/cpuset.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/cpuset.h @@ -0,0 +1,340 @@ +/** @file + * IPRT - CPU Set. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_cpuset_h +#define ___iprt_cpuset_h + +#include +#include /* RTMpCpuIdToSetIndex */ +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_cpuset RTCpuSet - CPU Set + * @ingroup grp_rt + * @{ + */ + + +/** + * Clear all CPUs. + * + * @returns pSet. + * @param pSet Pointer to the set. + */ +DECLINLINE(PRTCPUSET) RTCpuSetEmpty(PRTCPUSET pSet) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pSet->bmSet); i++) + pSet->bmSet[i] = 0; + return pSet; +} + + +/** + * Set all CPUs. + * + * @returns pSet. + * @param pSet Pointer to the set. + */ +DECLINLINE(PRTCPUSET) RTCpuSetFill(PRTCPUSET pSet) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pSet->bmSet); i++) + pSet->bmSet[i] = UINT64_MAX; + return pSet; +} + + +/** + * Copies one set to another. + * + * @param pDst Pointer to the destination set. + * @param pSrc Pointer to the source set. + */ +DECLINLINE(void) RTCpuSetCopy(PRTCPUSET pDst, PRTCPUSET pSrc) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pDst->bmSet); i++) + pDst->bmSet[i] = pSrc->bmSet[i]; +} + + +/** + * ANDs the given CPU set with another. + * + * @returns pSet. + * @param pSet Pointer to the set. + * @param pAndMaskSet Pointer to the AND-mask set. + */ +DECLINLINE(PRTCPUSET) RTCpuSetAnd(PRTCPUSET pSet, PRTCPUSET pAndMaskSet) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pSet->bmSet); i++) + ASMAtomicAndU64((volatile uint64_t *)&pSet->bmSet[i], pAndMaskSet->bmSet[i]); + return pSet; +} + + +/** + * Adds a CPU given by its identifier to the set. + * + * @returns 0 on success, -1 if idCpu isn't valid. + * @param pSet Pointer to the set. + * @param idCpu The identifier of the CPU to add. + * @remarks The modification is atomic. + */ +DECLINLINE(int) RTCpuSetAdd(PRTCPUSET pSet, RTCPUID idCpu) +{ + int iCpu = RTMpCpuIdToSetIndex(idCpu); + if (RT_LIKELY(iCpu >= 0)) + { + ASMAtomicBitSet(pSet, iCpu); + return 0; + } + return -1; +} + + +/** + * Adds a CPU given by its identifier to the set. + * + * @returns 0 on success, -1 if iCpu isn't valid. + * @param pSet Pointer to the set. + * @param iCpu The index of the CPU to add. + * @remarks The modification is atomic. + */ +DECLINLINE(int) RTCpuSetAddByIndex(PRTCPUSET pSet, int iCpu) +{ + if (RT_LIKELY((unsigned)iCpu < RTCPUSET_MAX_CPUS)) + { + ASMAtomicBitSet(pSet, iCpu); + return 0; + } + return -1; +} + + +/** + * Removes a CPU given by its identifier from the set. + * + * @returns 0 on success, -1 if idCpu isn't valid. + * @param pSet Pointer to the set. + * @param idCpu The identifier of the CPU to delete. + * @remarks The modification is atomic. + */ +DECLINLINE(int) RTCpuSetDel(PRTCPUSET pSet, RTCPUID idCpu) +{ + int iCpu = RTMpCpuIdToSetIndex(idCpu); + if (RT_LIKELY(iCpu >= 0)) + { + ASMAtomicBitClear(pSet, iCpu); + return 0; + } + return -1; +} + + +/** + * Removes a CPU given by its index from the set. + * + * @returns 0 on success, -1 if iCpu isn't valid. + * @param pSet Pointer to the set. + * @param iCpu The index of the CPU to delete. + * @remarks The modification is atomic. + */ +DECLINLINE(int) RTCpuSetDelByIndex(PRTCPUSET pSet, int iCpu) +{ + if (RT_LIKELY((unsigned)iCpu < RTCPUSET_MAX_CPUS)) + { + ASMAtomicBitClear(pSet, iCpu); + return 0; + } + return -1; +} + + +/** + * Checks if a CPU given by its identifier is a member of the set. + * + * @returns true / false accordingly. + * @param pSet Pointer to the set. + * @param idCpu The identifier of the CPU to look for. + * @remarks The test is atomic. + */ +DECLINLINE(bool) RTCpuSetIsMember(PCRTCPUSET pSet, RTCPUID idCpu) +{ + int iCpu = RTMpCpuIdToSetIndex(idCpu); + if (RT_LIKELY(iCpu >= 0)) + return ASMBitTest((volatile void *)pSet, iCpu); + return false; +} + + +/** + * Checks if a CPU given by its index is a member of the set. + * + * @returns true / false accordingly. + * @param pSet Pointer to the set. + * @param iCpu The index of the CPU in the set. + * @remarks The test is atomic. + */ +DECLINLINE(bool) RTCpuSetIsMemberByIndex(PCRTCPUSET pSet, int iCpu) +{ + if (RT_LIKELY((unsigned)iCpu < RTCPUSET_MAX_CPUS)) + return ASMBitTest((volatile void *)pSet, iCpu); + return false; +} + + +/** + * Checks if the two sets match or not. + * + * @returns true / false accordingly. + * @param pSet1 The first set. + * @param pSet2 The second set. + */ +DECLINLINE(bool) RTCpuSetIsEqual(PCRTCPUSET pSet1, PCRTCPUSET pSet2) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pSet1->bmSet); i++) + if (pSet1->bmSet[i] != pSet2->bmSet[i]) + return false; + return true; +} + + +/** + * Checks if the CPU set is empty or not. + * + * @returns true / false accordingly. + * @param pSet Pointer to the set. + */ +DECLINLINE(bool) RTCpuSetIsEmpty(PRTCPUSET pSet) +{ + size_t i; + for (i = 0; i < RT_ELEMENTS(pSet->bmSet); i++) + if (pSet->bmSet[i]) + return false; + return true; +} + + +/** + * Converts the CPU set to a 64-bit mask. + * + * @returns The mask. + * @param pSet Pointer to the set. + * @remarks Use with extreme care as it may lose information! + */ +DECLINLINE(uint64_t) RTCpuSetToU64(PCRTCPUSET pSet) +{ + return pSet->bmSet[0]; +} + + +/** + * Initializes the CPU set from a 64-bit mask. + * + * @param pSet Pointer to the set. + * @param fMask The mask. + */ +DECLINLINE(PRTCPUSET) RTCpuSetFromU64(PRTCPUSET pSet, uint64_t fMask) +{ + size_t i; + + pSet->bmSet[0] = fMask; + for (i = 1; i < RT_ELEMENTS(pSet->bmSet); i++) + pSet->bmSet[i] = 0; + + return pSet; +} + + +/** + * Count the CPUs in the set. + * + * @returns CPU count. + * @param pSet Pointer to the set. + */ +DECLINLINE(int) RTCpuSetCount(PCRTCPUSET pSet) +{ + int cCpus = 0; + size_t i; + + for (i = 0; i < RT_ELEMENTS(pSet->bmSet); i++) + { + uint64_t u64 = pSet->bmSet[i]; + if (u64 != 0) + { + unsigned iCpu = 64; + while (iCpu-- > 0) + { + if (u64 & 1) + cCpus++; + u64 >>= 1; + } + } + } + return cCpus; +} + + +/** + * Get the highest set index. + * + * @returns The higest set index, -1 if all bits are clear. + * @param pSet Pointer to the set. + */ +DECLINLINE(int) RTCpuLastIndex(PCRTCPUSET pSet) +{ + size_t i = RT_ELEMENTS(pSet->bmSet); + while (i-- > 0) + { + uint64_t u64 = pSet->bmSet[i]; + if (u64) + { + /* There are more efficient ways to do this in asm.h... */ + unsigned iBit; + for (iBit = 63; iBit > 0; iBit--) + { + if (u64 & RT_BIT_64(63)) + break; + u64 <<= 1; + } + return (int)i * 64 + iBit; + } + } + return 0; +} + + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/ctype.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/ctype.h @@ -0,0 +1,240 @@ +/** @file + * IPRT - Simple character type classiciation and conversion. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_ctype_h +#define ___iprt_ctype_h + +#include + +/** @name C locale predicates and conversions. + * + * For most practical purposes, this can safely be used when parsing UTF-8 + * strings. Just keep in mind that we only deal with the first 127 chars and + * that full correctness is only archived using the non-existing RTLocIs* API. + * + * @remarks Use the marcros, not the inlined functions. + * + * @remarks ASSUMES the source code includes the basic ASCII chars. This is a + * general IPRT assumption. + * @{ */ +#define RT_C_IS_BLANK(ch) RTLocCIsBlank((ch)) +#define RT_C_IS_ALNUM(ch) RTLocCIsAlNum((ch)) +#define RT_C_IS_ALPHA(ch) RTLocCIsAlpha((ch)) +#define RT_C_IS_CNTRL(ch) RTLocCIsCntrl((ch)) +#define RT_C_IS_DIGIT(ch) RTLocCIsDigit((ch)) +#define RT_C_IS_LOWER(ch) RTLocCIsLower((ch)) +#define RT_C_IS_GRAPH(ch) RTLocCIsGraph((ch)) +#define RT_C_IS_ODIGIT(ch) RTLocCIsODigit((ch)) +#define RT_C_IS_PRINT(ch) RTLocCIsPrint((ch)) +#define RT_C_IS_PUNCT(ch) RTLocCIsPunct((ch)) +#define RT_C_IS_SPACE(ch) RTLocCIsSpace((ch)) +#define RT_C_IS_UPPER(ch) RTLocCIsUpper((ch)) +#define RT_C_IS_XDIGIT(ch) RTLocCIsXDigit((ch)) + +#define RT_C_TO_LOWER(ch) RTLocCToLower((ch)) +#define RT_C_TO_UPPER(ch) RTLocCToUpper((ch)) + +/** + * Checks for a blank character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsBlank(int ch) +{ + return ch == 0x20 /* space */ + || ch == 0x09; /* horizontal tab */ +} + +/** + * Checks for a control character. + * + * @returns true / false. + * @param ch The character to test. + * + * @note Will return true of ch is '\0'! + */ +DECL_FORCE_INLINE(bool) RTLocCIsCntrl(int ch) +{ + return (unsigned)ch < 32U /* 0..2f */ + || ch == 0x7f; +} + +/** + * Checks for a decimal digit. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsDigit(int ch) +{ + return (unsigned)ch - 0x30 < 10U; /* 30..39 */ +} + +/** + * Checks for a lower case character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsLower(int ch) +{ + return (unsigned)ch - 0x61U < 26U; /* 61..7a */ +} + +/** + * Checks for an octal digit. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsODigit(int ch) +{ + return (unsigned)ch - 0x30 < 8U; /* 30..37 */ +} + +/** + * Checks for a printable character (whitespace included). + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsPrint(int ch) +{ + return (unsigned)ch - 0x20U < 95U; /* 20..7e */ +} + +/** + * Checks for punctuation (?). + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsPunct(int ch) +{ + return (unsigned)ch - 0x21U < 15U /* 21..2f */ + || (unsigned)ch - 0x2aU < 6U /* 2a..2f */ + || (unsigned)ch - 0x3aU < 7U /* 3a..40 */ + || (unsigned)ch - 0x5bU < 6U /* 5a..60 */ + || (unsigned)ch - 0x7bU < 4U /* 7b..7e */; +} + +/** + * Checks for a white-space character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsSpace(int ch) +{ + return ch == 0x20 /* 20 (space) */ + || (unsigned)ch - 0x09U < 5U; /* 09..0d */ +} + +/** + * Checks for an upper case character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsUpper(int ch) +{ + return (unsigned)ch - 0x41 < 26U; /* 41..5a */ +} + +/** + * Checks for a hexadecimal digit. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsXDigit(int ch) +{ + return (unsigned)ch - 0x30 < 10U /* 30..39 (0-9) */ + || (unsigned)ch - 0x41 < 6 /* 41..46 (A-F) */ + || (unsigned)ch - 0x61 < 6; /* 61..66 (a-f) */ +} + +/** + * Checks for an alphabetic character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsAlpha(int ch) +{ + return RTLocCIsLower(ch) || RTLocCIsUpper(ch); +} + +/** + * Checks for an alphanumerical character. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsAlNum(int ch) +{ + return RTLocCIsDigit(ch) || RTLocCIsAlpha(ch); +} + +/** + * Checks for a printable character whitespace excluded. + * + * @returns true / false. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(bool) RTLocCIsGraph(int ch) +{ + return RTLocCIsPrint(ch) && !RTLocCIsBlank(ch); +} + + +/** + * Converts the character to lower case if applictable. + * + * @returns lower cased character or ch. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(int) RTLocCToLower(int ch) +{ + return RTLocCIsUpper(ch) ? (ch) + 0x20 : (ch); +} + +/** + * Converts the character to upper case if applictable. + * + * @returns upper cased character or ch. + * @param ch The character to test. + */ +DECL_FORCE_INLINE(int) RTLocCToUpper(int ch) +{ + return RTLocCIsLower(ch) ? (ch) - 0x20 : (ch); +} + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/err.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/err.h @@ -0,0 +1,3099 @@ +/** @file + * IPRT - Status Codes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_err_h +#define ___iprt_err_h + +#include +#include +#include + + +/** @defgroup grp_rt_err RTErr - Status Codes + * @ingroup grp_rt + * + * The IPRT status codes are in two ranges: {0..999} and {22000..32766}. The + * IPRT users are free to use the range {1000..21999}. See RTERR_RANGE1_FIRST, + * RTERR_RANGE1_LAST, RTERR_RANGE2_FIRST, RTERR_RANGE2_LAST, RTERR_USER_FIRST + * and RTERR_USER_LAST. + * + * @{ + */ + +/** @defgroup grp_rt_err_hlp Status Code Helpers + * @{ + */ + +#ifdef __cplusplus +/** + * Strict type validation class. + * + * This is only really useful for type checking the arguments to RT_SUCCESS, + * RT_SUCCESS_NP, RT_FAILURE and RT_FAILURE_NP. The RTErrStrictType2 + * constructor is for integration with external status code strictness regimes. + */ +class RTErrStrictType +{ +protected: + int32_t m_rc; + +public: + /** + * Constructor for interaction with external status code strictness regimes. + * + * This is a special constructor for helping external return code validator + * classes interact cleanly with RT_SUCCESS, RT_SUCCESS_NP, RT_FAILURE and + * RT_FAILURE_NP while barring automatic cast to integer. + * + * @param rcObj IPRT status code object from an automatic cast. + */ + RTErrStrictType(RTErrStrictType2 const rcObj) + : m_rc(rcObj.getValue()) + { + } + + /** + * Integer constructor used by RT_SUCCESS_NP. + * + * @param rc IPRT style status code. + */ + RTErrStrictType(int32_t rc) + : m_rc(rc) + { + } + +#if 0 /** @todo figure where int32_t is long instead of int. */ + /** + * Integer constructor used by RT_SUCCESS_NP. + * + * @param rc IPRT style status code. + */ + RTErrStrictType(signed int rc) + : m_rc(rc) + { + } +#endif + + /** + * Test for success. + */ + bool success() const + { + return m_rc >= 0; + } + +private: + /** @name Try ban a number of wrong types. + * @{ */ + RTErrStrictType(uint8_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint16_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint32_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint64_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int8_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int16_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int64_t rc) : m_rc(-999) { NOREF(rc); } + /** @todo fight long here - clashes with int32_t/int64_t on some platforms. */ + /** @} */ +}; +#endif /* __cplusplus */ + + +/** @def RTERR_STRICT_RC + * Indicates that RT_SUCCESS_NP, RT_SUCCESS, RT_FAILURE_NP and RT_FAILURE should + * make type enforcing at compile time. + * + * @remarks Only define this for C++ code. + */ +#if defined(__cplusplus) \ + && !defined(RTERR_STRICT_RC) \ + && ( defined(DOXYGEN_RUNNING) \ + || defined(DEBUG) \ + || defined(RT_STRICT) ) +# define RTERR_STRICT_RC 1 +#endif + + +/** @def RT_SUCCESS + * Check for success. We expect success in normal cases, that is the code path depending on + * this check is normally taken. To prevent any prediction use RT_SUCCESS_NP instead. + * + * @returns true if rc indicates success. + * @returns false if rc indicates failure. + * + * @param rc The iprt status code to test. + */ +#define RT_SUCCESS(rc) ( RT_LIKELY(RT_SUCCESS_NP(rc)) ) + +/** @def RT_SUCCESS_NP + * Check for success. Don't predict the result. + * + * @returns true if rc indicates success. + * @returns false if rc indicates failure. + * + * @param rc The iprt status code to test. + */ +#ifdef RTERR_STRICT_RC +# define RT_SUCCESS_NP(rc) ( RTErrStrictType(rc).success() ) +#else +# define RT_SUCCESS_NP(rc) ( (int)(rc) >= VINF_SUCCESS ) +#endif + +/** @def RT_FAILURE + * Check for failure, predicting unlikely. + * + * We don't expect in normal cases, that is the code path depending on this + * check is normally NOT taken. To prevent any prediction use RT_FAILURE_NP + * instead. + * + * @returns true if rc indicates failure. + * @returns false if rc indicates success. + * + * @param rc The iprt status code to test. + * + * @remarks Please structure your code to use the RT_SUCCESS() macro instead of + * RT_FAILURE() where possible, as that gives us a better shot at good + * code with the windows compilers. + */ +#define RT_FAILURE(rc) ( RT_UNLIKELY(!RT_SUCCESS_NP(rc)) ) + +/** @def RT_FAILURE_NP + * Check for failure, no prediction. + * + * @returns true if rc indicates failure. + * @returns false if rc indicates success. + * + * @param rc The iprt status code to test. + */ +#define RT_FAILURE_NP(rc) ( !RT_SUCCESS_NP(rc) ) + +RT_C_DECLS_BEGIN + +/** + * Converts a Darwin HRESULT error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode HRESULT error code. + * @remark Darwin ring-3 only. + */ +RTDECL(int) RTErrConvertFromDarwinCOM(int32_t iNativeCode); + +/** + * Converts a Darwin IOReturn error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode IOReturn error code. + * @remark Darwin only. + */ +RTDECL(int) RTErrConvertFromDarwinIO(int iNativeCode); + +/** + * Converts a Darwin kern_return_t error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode kern_return_t error code. + * @remark Darwin only. + */ +RTDECL(int) RTErrConvertFromDarwinKern(int iNativeCode); + +/** + * Converts a Darwin error to an iprt status code. + * + * This will consult RTErrConvertFromDarwinKern, RTErrConvertFromDarwinIO + * and RTErrConvertFromDarwinCOM in this order. The latter is ring-3 only as it + * doesn't apply elsewhere. + * + * @returns iprt status code. + * @param iNativeCode Darwin error code. + * @remarks Darwin only. + * @remarks This is recommended over RTErrConvertFromDarwinKern and RTErrConvertFromDarwinIO + * since these are really just subsets of the same error space. + */ +RTDECL(int) RTErrConvertFromDarwin(int iNativeCode); + +/** + * Converts errno to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode errno code. + */ +RTDECL(int) RTErrConvertFromErrno(unsigned uNativeCode); + +/** + * Converts a L4 errno to a iprt status code. + * + * @returns iprt status code. + * @param uNativeCode l4 errno. + * @remark L4 only. + */ +RTDECL(int) RTErrConvertFromL4Errno(unsigned uNativeCode); + +/** + * Converts NT status code to iprt status code. + * + * Needless to say, this is only available on NT and winXX targets. + * + * @returns iprt status code. + * @param lNativeCode NT status code. + * @remark Windows only. + */ +RTDECL(int) RTErrConvertFromNtStatus(long lNativeCode); + +/** + * Converts OS/2 error code to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode OS/2 error code. + * @remark OS/2 only. + */ +RTDECL(int) RTErrConvertFromOS2(unsigned uNativeCode); + +/** + * Converts Win32 error code to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode Win32 error code. + * @remark Windows only. + */ +RTDECL(int) RTErrConvertFromWin32(unsigned uNativeCode); + +/** + * Converts an iprt status code to a errno status code. + * + * @returns errno status code. + * @param iErr iprt status code. + */ +RTDECL(int) RTErrConvertToErrno(int iErr); + +#ifdef IN_RING3 + +/** + * iprt status code message. + */ +typedef struct RTSTATUSMSG +{ + /** Pointer to the short message string. */ + const char *pszMsgShort; + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Status code number. */ + int iCode; +} RTSTATUSMSG; +/** Pointer to iprt status code message. */ +typedef RTSTATUSMSG *PRTSTATUSMSG; +/** Pointer to const iprt status code message. */ +typedef const RTSTATUSMSG *PCRTSTATUSMSG; + +/** + * Get the message structure corresponding to a given iprt status code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTSTATUSMSG) RTErrGet(int rc); + +/** + * Get the define corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the \#define identifier. + * @param rc The status code. + */ +#define RTErrGetDefine(rc) (RTErrGet(rc)->pszDefine) + +/** + * Get the short description corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the description. + * @param rc The status code. + */ +#define RTErrGetShort(rc) (RTErrGet(rc)->pszMsgShort) + +/** + * Get the full description corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the description. + * @param rc The status code. + */ +#define RTErrGetFull(rc) (RTErrGet(rc)->pszMsgFull) + +#ifdef RT_OS_WINDOWS +/** + * Windows error code message. + */ +typedef struct RTWINERRMSG +{ + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Error code number. */ + long iCode; +} RTWINERRMSG; +/** Pointer to Windows error code message. */ +typedef RTWINERRMSG *PRTWINERRMSG; +/** Pointer to const Windows error code message. */ +typedef const RTWINERRMSG *PCRTWINERRMSG; + +/** + * Get the message structure corresponding to a given Windows error code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTWINERRMSG) RTErrWinGet(long rc); + +/** On windows COM errors are part of the Windows error database. */ +typedef RTWINERRMSG RTCOMERRMSG; + +#else /* !RT_OS_WINDOWS */ + +/** + * COM/XPCOM error code message. + */ +typedef struct RTCOMERRMSG +{ + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Error code number. */ + uint32_t iCode; +} RTCOMERRMSG; +#endif /* !RT_OS_WINDOWS */ +/** Pointer to a XPCOM/COM error code message. */ +typedef RTCOMERRMSG *PRTCOMERRMSG; +/** Pointer to const a XPCOM/COM error code message. */ +typedef const RTCOMERRMSG *PCRTCOMERRMSG; + +/** + * Get the message structure corresponding to a given COM/XPCOM error code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTCOMERRMSG) RTErrCOMGet(uint32_t rc); + +#endif /* IN_RING3 */ + +/** @defgroup RTERRINFO_FLAGS_XXX RTERRINFO::fFlags + * @{ */ +/** Custom structure (the default). */ +#define RTERRINFO_FLAGS_T_CUSTOM UINT32_C(0) +/** Static structure (RTERRINFOSTATIC). */ +#define RTERRINFO_FLAGS_T_STATIC UINT32_C(1) +/** Allocated structure (RTErrInfoAlloc). */ +#define RTERRINFO_FLAGS_T_ALLOC UINT32_C(2) +/** Reserved type. */ +#define RTERRINFO_FLAGS_T_RESERVED UINT32_C(3) +/** Type mask. */ +#define RTERRINFO_FLAGS_T_MASK UINT32_C(3) +/** Error info is set. */ +#define RTERRINFO_FLAGS_SET RT_BIT_32(2) +/** Fixed flags (magic). */ +#define RTERRINFO_FLAGS_MAGIC UINT32_C(0xbabe0000) +/** The bit mask for the magic value. */ +#define RTERRINFO_FLAGS_MAGIC_MASK UINT32_C(0xffff0000) +/** @} */ + +/** + * Initializes an error info structure. + * + * @returns @a pErrInfo. + * @param pErrInfo The error info structure to init. + * @param pszMsg The message buffer. Must be at least one byte. + * @param cbMsg The size of the message buffer. + */ +DECLINLINE(PRTERRINFO) RTErrInfoInit(PRTERRINFO pErrInfo, char *pszMsg, size_t cbMsg) +{ + *pszMsg = '\0'; + + pErrInfo->fFlags = RTERRINFO_FLAGS_T_CUSTOM | RTERRINFO_FLAGS_MAGIC; + pErrInfo->rc = /*VINF_SUCCESS*/ 0; + pErrInfo->pszMsg = pszMsg; + pErrInfo->cbMsg = cbMsg; + pErrInfo->apvReserved[0] = NULL; + pErrInfo->apvReserved[1] = NULL; + + return pErrInfo; +} + +/** + * Initialize a static error info structure. + * + * @returns Pointer to the core error info structure. + * @param pStaticErrInfo The static error info structure to init. + */ +DECLINLINE(PRTERRINFO) RTErrInfoInitStatic(PRTERRINFOSTATIC pStaticErrInfo) +{ + RTErrInfoInit(&pStaticErrInfo->Core, pStaticErrInfo->szMsg, sizeof(pStaticErrInfo->szMsg)); + pStaticErrInfo->Core.fFlags = RTERRINFO_FLAGS_T_STATIC | RTERRINFO_FLAGS_MAGIC; + return &pStaticErrInfo->Core; +} + +/** + * Allocates a error info structure with a buffer at least the given size. + * + * @returns Pointer to an error info structure on success, NULL on failure. + * + * @param cbMsg The minimum message buffer size. Use 0 to get + * the default buffer size. + */ +RTDECL(PRTERRINFO) RTErrInfoAlloc(size_t cbMsg); + +/** + * Same as RTErrInfoAlloc, except that an IPRT status code is returned. + * + * @returns IPRT status code. + * + * @param cbMsg The minimum message buffer size. Use 0 to get + * the default buffer size. + * @param ppErrInfo Where to store the pointer to the allocated + * error info structure on success. This is + * always set to NULL. + */ +RTDECL(int) RTErrInfoAllocEx(size_t cbMsg, PRTERRINFO *ppErrInfo); + +/** + * Frees an error info structure allocated by RTErrInfoAlloc or + * RTErrInfoAllocEx. + * + * @param pErrInfo The error info structure. + */ +RTDECL(void) RTErrInfoFree(PRTERRINFO pErrInfo); + +/** + * Fills in the error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszMsg The error message string. + */ +RTDECL(int) RTErrInfoSet(PRTERRINFO pErrInfo, int rc, const char *pszMsg); + +/** + * Fills in the error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoSetF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Fills in the error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoSetV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Adds more error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszMsg The error message string to add. + */ +RTDECL(int) RTErrInfoAdd(PRTERRINFO pErrInfo, int rc, const char *pszMsg); + +/** + * Adds more error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string to add. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoAddF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Adds more error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string to add. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoAddV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); + +/** @name RTERRINFO_LOG_F_XXX + * @{ */ +/** Both debug and release log. */ +#define RTERRINFO_LOG_F_RELEASE RT_BIT_32(0) +/** @} */ + +/** + * Fills in the error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszMsg The error message string. + */ +RTDECL(int) RTErrInfoLogAndSet(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg); + +/** + * Fills in the error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoLogAndSetF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Fills in the error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoLogAndSetV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * Adds more error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszMsg The error message string to add. + */ +RTDECL(int) RTErrInfoLogAndAdd(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg); + +/** + * Adds more error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string to add. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoLogAndAddF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Adds more error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string to add. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoLogAndAddV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0); + +/** @name Macros wrapping the RTErrInfoLog* functions. + * @{ */ +#define RTERRINFO_LOG_SET( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg) +#define RTERRINFO_LOG_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va) +#define RTERRINFO_LOG_ADD( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg) +#define RTERRINFO_LOG_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va) +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RTERRINFO_LOG_ADD_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__) +# define RTERRINFO_LOG_SET_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__) +#endif + +#define RTERRINFO_LOG_REL_SET( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg) +#define RTERRINFO_LOG_REL_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va) +#define RTERRINFO_LOG_REL_ADD( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg) +#define RTERRINFO_LOG_REL_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va) +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RTERRINFO_LOG_REL_ADD_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__) +# define RTERRINFO_LOG_REL_SET_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__) +#else +# define RTERRINFO_LOG_REL_ADD_F RTErrInfoSetF +# define RTERRINFO_LOG_REL_SET_F RTErrInfoAddF +#endif +/** @} */ + + +/** + * Checks if the error info is set. + * + * @returns true if set, false if not. + * @param pErrInfo The error info structure. NULL is OK. + */ +DECLINLINE(bool) RTErrInfoIsSet(PCRTERRINFO pErrInfo) +{ + if (!pErrInfo) + return false; + return (pErrInfo->fFlags & (RTERRINFO_FLAGS_MAGIC_MASK | RTERRINFO_FLAGS_SET)) + == (RTERRINFO_FLAGS_MAGIC | RTERRINFO_FLAGS_SET); +} + +/** + * Clears the error info structure. + * + * @param pErrInfo The error info structure. NULL is OK. + */ +DECLINLINE(void) RTErrInfoClear(PRTERRINFO pErrInfo) +{ + if (pErrInfo) + { + pErrInfo->fFlags &= ~RTERRINFO_FLAGS_SET; + pErrInfo->rc = /*VINF_SUCCESS*/0; + *pErrInfo->pszMsg = '\0'; + } +} + +/** + * Storage for error variables. + * + * @remarks Do NOT touch the members! They are platform specific and what's + * where may change at any time! + */ +typedef union RTERRVARS +{ + int8_t ai8Vars[32]; + int16_t ai16Vars[16]; + int32_t ai32Vars[8]; + int64_t ai64Vars[4]; +} RTERRVARS; +/** Pointer to an error variable storage union. */ +typedef RTERRVARS *PRTERRVARS; +/** Pointer to a const error variable storage union. */ +typedef RTERRVARS const *PCRTERRVARS; + +/** + * Saves the error variables. + * + * @returns @a pVars. + * @param pVars The variable storage union. + */ +RTDECL(PRTERRVARS) RTErrVarsSave(PRTERRVARS pVars); + +/** + * Restores the error variables. + * + * @param pVars The variable storage union. + */ +RTDECL(void) RTErrVarsRestore(PCRTERRVARS pVars); + +/** + * Checks if the first variable set equals the second. + * + * @returns true if they are equal, false if not. + * @param pVars1 The first variable storage union. + * @param pVars2 The second variable storage union. + */ +RTDECL(bool) RTErrVarsAreEqual(PCRTERRVARS pVars1, PCRTERRVARS pVars2); + +/** + * Checks if the (live) error variables have changed since we saved them. + * + * @returns @c true if they have changed, @c false if not. + * @param pVars The saved variables to compare the current state + * against. + */ +RTDECL(bool) RTErrVarsHaveChanged(PCRTERRVARS pVars); + +RT_C_DECLS_END + +/** @} */ + +/** @name Status Code Ranges + * @{ */ +/** The first status code in the primary IPRT range. */ +#define RTERR_RANGE1_FIRST 0 +/** The last status code in the primary IPRT range. */ +#define RTERR_RANGE1_LAST 999 + +/** The first status code in the secondary IPRT range. */ +#define RTERR_RANGE2_FIRST 22000 +/** The last status code in the secondary IPRT range. */ +#define RTERR_RANGE2_LAST 32766 + +/** The first status code in the user range. */ +#define RTERR_USER_FIRST 1000 +/** The last status code in the user range. */ +#define RTERR_USER_LAST 21999 +/** @} */ + + +/* SED-START */ + +/** @name Misc. Status Codes + * @{ + */ +/** Success. */ +#define VINF_SUCCESS 0 + +/** General failure - DON'T USE THIS!!! */ +#define VERR_GENERAL_FAILURE (-1) +/** Invalid parameter. */ +#define VERR_INVALID_PARAMETER (-2) +/** Invalid parameter. */ +#define VWRN_INVALID_PARAMETER 2 +/** Invalid magic or cookie. */ +#define VERR_INVALID_MAGIC (-3) +/** Invalid magic or cookie. */ +#define VWRN_INVALID_MAGIC 3 +/** Invalid loader handle. */ +#define VERR_INVALID_HANDLE (-4) +/** Invalid loader handle. */ +#define VWRN_INVALID_HANDLE 4 +/** Failed to lock the address range. */ +#define VERR_LOCK_FAILED (-5) +/** Invalid memory pointer. */ +#define VERR_INVALID_POINTER (-6) +/** Failed to patch the IDT. */ +#define VERR_IDT_FAILED (-7) +/** Memory allocation failed. */ +#define VERR_NO_MEMORY (-8) +/** Already loaded. */ +#define VERR_ALREADY_LOADED (-9) +/** Permission denied. */ +#define VERR_PERMISSION_DENIED (-10) +/** Permission denied. */ +#define VINF_PERMISSION_DENIED 10 +/** Version mismatch. */ +#define VERR_VERSION_MISMATCH (-11) +/** The request function is not implemented. */ +#define VERR_NOT_IMPLEMENTED (-12) +/** Invalid flags was given. */ +#define VERR_INVALID_FLAGS (-13) + +/** Not equal. */ +#define VERR_NOT_EQUAL (-18) +/** The specified path does not point at a symbolic link. */ +#define VERR_NOT_SYMLINK (-19) +/** Failed to allocate temporary memory. */ +#define VERR_NO_TMP_MEMORY (-20) +/** Invalid file mode mask (RTFMODE). */ +#define VERR_INVALID_FMODE (-21) +/** Incorrect call order. */ +#define VERR_WRONG_ORDER (-22) +/** There is no TLS (thread local storage) available for storing the current thread. */ +#define VERR_NO_TLS_FOR_SELF (-23) +/** Failed to set the TLS (thread local storage) entry which points to our thread structure. */ +#define VERR_FAILED_TO_SET_SELF_TLS (-24) +/** Not able to allocate contiguous memory. */ +#define VERR_NO_CONT_MEMORY (-26) +/** No memory available for page table or page directory. */ +#define VERR_NO_PAGE_MEMORY (-27) +/** Already initialized. */ +#define VINF_ALREADY_INITIALIZED 28 +/** The specified thread is dead. */ +#define VERR_THREAD_IS_DEAD (-29) +/** The specified thread is not waitable. */ +#define VERR_THREAD_NOT_WAITABLE (-30) +/** Pagetable not present. */ +#define VERR_PAGE_TABLE_NOT_PRESENT (-31) +/** Invalid context. + * Typically an API was used by the wrong thread. */ +#define VERR_INVALID_CONTEXT (-32) +/** The per process timer is busy. */ +#define VERR_TIMER_BUSY (-33) +/** Address conflict. */ +#define VERR_ADDRESS_CONFLICT (-34) +/** Unresolved (unknown) host platform error. */ +#define VERR_UNRESOLVED_ERROR (-35) +/** Invalid function. */ +#define VERR_INVALID_FUNCTION (-36) +/** Not supported. */ +#define VERR_NOT_SUPPORTED (-37) +/** Not supported. */ +#define VINF_NOT_SUPPORTED 37 +/** Access denied. */ +#define VERR_ACCESS_DENIED (-38) +/** Call interrupted. */ +#define VERR_INTERRUPTED (-39) +/** Call interrupted. */ +#define VINF_INTERRUPTED 39 +/** Timeout. */ +#define VERR_TIMEOUT (-40) +/** Timeout. */ +#define VINF_TIMEOUT 40 +/** Buffer too small to save result. */ +#define VERR_BUFFER_OVERFLOW (-41) +/** Buffer too small to save result. */ +#define VINF_BUFFER_OVERFLOW 41 +/** Data size overflow. */ +#define VERR_TOO_MUCH_DATA (-42) +/** Max threads number reached. */ +#define VERR_MAX_THRDS_REACHED (-43) +/** Max process number reached. */ +#define VERR_MAX_PROCS_REACHED (-44) +/** The recipient process has refused the signal. */ +#define VERR_SIGNAL_REFUSED (-45) +/** A signal is already pending. */ +#define VERR_SIGNAL_PENDING (-46) +/** The signal being posted is not correct. */ +#define VERR_SIGNAL_INVALID (-47) +/** The state changed. + * This is a generic error message and needs a context to make sense. */ +#define VERR_STATE_CHANGED (-48) +/** Warning, the state changed. + * This is a generic error message and needs a context to make sense. */ +#define VWRN_STATE_CHANGED 48 +/** Error while parsing UUID string */ +#define VERR_INVALID_UUID_FORMAT (-49) +/** The specified process was not found. */ +#define VERR_PROCESS_NOT_FOUND (-50) +/** The process specified to a non-block wait had not exited. */ +#define VERR_PROCESS_RUNNING (-51) +/** Retry the operation. */ +#define VERR_TRY_AGAIN (-52) +/** Retry the operation. */ +#define VINF_TRY_AGAIN 52 +/** Generic parse error. */ +#define VERR_PARSE_ERROR (-53) +/** Value out of range. */ +#define VERR_OUT_OF_RANGE (-54) +/** A numeric conversion encountered a value which was too big for the target. */ +#define VERR_NUMBER_TOO_BIG (-55) +/** A numeric conversion encountered a value which was too big for the target. */ +#define VWRN_NUMBER_TOO_BIG 55 +/** The number begin converted (string) contained no digits. */ +#define VERR_NO_DIGITS (-56) +/** The number begin converted (string) contained no digits. */ +#define VWRN_NO_DIGITS 56 +/** Encountered a '-' during conversion to an unsigned value. */ +#define VERR_NEGATIVE_UNSIGNED (-57) +/** Encountered a '-' during conversion to an unsigned value. */ +#define VWRN_NEGATIVE_UNSIGNED 57 +/** Error while characters translation (unicode and so). */ +#define VERR_NO_TRANSLATION (-58) +/** Error while characters translation (unicode and so). */ +#define VWRN_NO_TRANSLATION 58 +/** Encountered unicode code point which is reserved for use as endian indicator (0xffff or 0xfffe). */ +#define VERR_CODE_POINT_ENDIAN_INDICATOR (-59) +/** Encountered unicode code point in the surrogate range (0xd800 to 0xdfff). */ +#define VERR_CODE_POINT_SURROGATE (-60) +/** A string claiming to be UTF-8 is incorrectly encoded. */ +#define VERR_INVALID_UTF8_ENCODING (-61) +/** A string claiming to be in UTF-16 is incorrectly encoded. */ +#define VERR_INVALID_UTF16_ENCODING (-62) +/** Encountered a unicode code point which cannot be represented as UTF-16. */ +#define VERR_CANT_RECODE_AS_UTF16 (-63) +/** Got an out of memory condition trying to allocate a string. */ +#define VERR_NO_STR_MEMORY (-64) +/** Got an out of memory condition trying to allocate a UTF-16 (/UCS-2) string. */ +#define VERR_NO_UTF16_MEMORY (-65) +/** Get an out of memory condition trying to allocate a code point array. */ +#define VERR_NO_CODE_POINT_MEMORY (-66) +/** Can't free the memory because it's used in mapping. */ +#define VERR_MEMORY_BUSY (-67) +/** The timer can't be started because it's already active. */ +#define VERR_TIMER_ACTIVE (-68) +/** The timer can't be stopped because it's already suspended. */ +#define VERR_TIMER_SUSPENDED (-69) +/** The operation was cancelled by the user (copy) or another thread (local ipc). */ +#define VERR_CANCELLED (-70) +/** Failed to initialize a memory object. + * Exactly what this means is OS specific. */ +#define VERR_MEMOBJ_INIT_FAILED (-71) +/** Out of memory condition when allocating memory with low physical backing. */ +#define VERR_NO_LOW_MEMORY (-72) +/** Out of memory condition when allocating physical memory (without mapping). */ +#define VERR_NO_PHYS_MEMORY (-73) +/** The address (virtual or physical) is too big. */ +#define VERR_ADDRESS_TOO_BIG (-74) +/** Failed to map a memory object. */ +#define VERR_MAP_FAILED (-75) +/** Trailing characters. */ +#define VERR_TRAILING_CHARS (-76) +/** Trailing characters. */ +#define VWRN_TRAILING_CHARS 76 +/** Trailing spaces. */ +#define VERR_TRAILING_SPACES (-77) +/** Trailing spaces. */ +#define VWRN_TRAILING_SPACES 77 +/** Generic not found error. */ +#define VERR_NOT_FOUND (-78) +/** Generic not found warning. */ +#define VWRN_NOT_FOUND 78 +/** Generic invalid state error. */ +#define VERR_INVALID_STATE (-79) +/** Generic invalid state warning. */ +#define VWRN_INVALID_STATE 79 +/** Generic out of resources error. */ +#define VERR_OUT_OF_RESOURCES (-80) +/** Generic out of resources warning. */ +#define VWRN_OUT_OF_RESOURCES 80 +/** No more handles available, too many open handles. */ +#define VERR_NO_MORE_HANDLES (-81) +/** Preemption is disabled. + * The requested operation can only be performed when preemption is enabled. */ +#define VERR_PREEMPT_DISABLED (-82) +/** End of string. */ +#define VERR_END_OF_STRING (-83) +/** End of string. */ +#define VINF_END_OF_STRING 83 +/** A page count is out of range. */ +#define VERR_PAGE_COUNT_OUT_OF_RANGE (-84) +/** Generic object destroyed status. */ +#define VERR_OBJECT_DESTROYED (-85) +/** Generic object was destroyed by the call status. */ +#define VINF_OBJECT_DESTROYED 85 +/** Generic dangling objects status. */ +#define VERR_DANGLING_OBJECTS (-86) +/** Generic dangling objects status. */ +#define VWRN_DANGLING_OBJECTS 86 +/** Invalid Base64 encoding. */ +#define VERR_INVALID_BASE64_ENCODING (-87) +/** Return instigated by a callback or similar. */ +#define VERR_CALLBACK_RETURN (-88) +/** Return instigated by a callback or similar. */ +#define VINF_CALLBACK_RETURN 88 +/** Authentication failure. */ +#define VERR_AUTHENTICATION_FAILURE (-89) +/** Not a power of two. */ +#define VERR_NOT_POWER_OF_TWO (-90) +/** Status code, typically given as a parameter, that isn't supposed to be used. */ +#define VERR_IGNORED (-91) +/** Concurrent access to the object is not allowed. */ +#define VERR_CONCURRENT_ACCESS (-92) +/** The caller does not have a reference to the object. + * This status is used when two threads is caught sharing the same object + * reference. */ +#define VERR_CALLER_NO_REFERENCE (-93) +/** Generic no change error. */ +#define VERR_NO_CHANGE (-95) +/** Generic no change info. */ +#define VINF_NO_CHANGE 95 +/** Out of memory condition when allocating executable memory. */ +#define VERR_NO_EXEC_MEMORY (-96) +/** The alignment is not supported. */ +#define VERR_UNSUPPORTED_ALIGNMENT (-97) +/** The alignment is not really supported, however we got lucky with this + * allocation. */ +#define VINF_UNSUPPORTED_ALIGNMENT 97 +/** Duplicate something. */ +#define VERR_DUPLICATE (-98) +/** Something is missing. */ +#define VERR_MISSING (-99) +/** An unexpected (/unknown) exception was caught. */ +#define VERR_UNEXPECTED_EXCEPTION (-22400) +/** Buffer underflow. */ +#define VERR_BUFFER_UNDERFLOW (-22401) +/** Buffer underflow. */ +#define VINF_BUFFER_UNDERFLOW 22401 +/** Uneven input. */ +#define VERR_UNEVEN_INPUT (-22402) +/** Something is not available or not working properly. */ +#define VERR_NOT_AVAILABLE (-22403) +/** The RTPROC_FLAGS_DETACHED flag isn't supported. */ +#define VERR_PROC_DETACH_NOT_SUPPORTED (-22404) +/** An account is restricted in a certain way. */ +#define VERR_ACCOUNT_RESTRICTED (-22405) +/** An account is restricted in a certain way. */ +#define VINF_ACCOUNT_RESTRICTED 22405 +/** Not able satisfy all the requirements of the request. */ +#define VERR_UNABLE_TO_SATISFY_REQUIREMENTS (-22406) +/** Not able satisfy all the requirements of the request. */ +#define VWRN_UNABLE_TO_SATISFY_REQUIREMENTS 22406 +/** The requested allocation is too big. */ +#define VERR_ALLOCATION_TOO_BIG (-22407) +/** Mismatch. */ +#define VERR_MISMATCH (-22408) +/** Wrong type. */ +#define VERR_WRONG_TYPE (-22409) +/** This indicates that the process does not have sufficient privileges to + * perform the operation. */ +#define VERR_PRIVILEGE_NOT_HELD (-22410) +/** Process does not have the trusted code base (TCB) privilege needed for user + * authentication or/and process creation as a given user. TCB is also called + * 'Act as part of the operating system'. */ +#define VERR_PROC_TCB_PRIV_NOT_HELD (-22411) +/** Process does not have the assign primary token (APT) privilege needed + * for creating process as a given user. APT is also called 'Replace a process + * level token'. */ +#define VERR_PROC_APT_PRIV_NOT_HELD (-22412) +/** Process does not have the increase quota (IQ) privilege needed for + * creating a process as a given user. IQ is also called 'Increase quotas'. */ +#define VERR_PROC_IQ_PRIV_NOT_HELD (-22413) +/** The system has too many CPUs. */ +#define VERR_MP_TOO_MANY_CPUS (-22414) +/** @} */ + + +/** @name Common File/Disk/Pipe/etc Status Codes + * @{ + */ +/** Unresolved (unknown) file i/o error. */ +#define VERR_FILE_IO_ERROR (-100) +/** File/Device open failed. */ +#define VERR_OPEN_FAILED (-101) +/** File not found. */ +#define VERR_FILE_NOT_FOUND (-102) +/** Path not found. */ +#define VERR_PATH_NOT_FOUND (-103) +/** Invalid (malformed) file/path name. */ +#define VERR_INVALID_NAME (-104) +/** The object in question already exists. */ +#define VERR_ALREADY_EXISTS (-105) +/** The object in question already exists. */ +#define VWRN_ALREADY_EXISTS 105 +/** Too many open files. */ +#define VERR_TOO_MANY_OPEN_FILES (-106) +/** Seek error. */ +#define VERR_SEEK (-107) +/** Seek below file start. */ +#define VERR_NEGATIVE_SEEK (-108) +/** Trying to seek on device. */ +#define VERR_SEEK_ON_DEVICE (-109) +/** Reached the end of the file. */ +#define VERR_EOF (-110) +/** Reached the end of the file. */ +#define VINF_EOF 110 +/** Generic file read error. */ +#define VERR_READ_ERROR (-111) +/** Generic file write error. */ +#define VERR_WRITE_ERROR (-112) +/** Write protect error. */ +#define VERR_WRITE_PROTECT (-113) +/** Sharing violation, file is being used by another process. */ +#define VERR_SHARING_VIOLATION (-114) +/** Unable to lock a region of a file. */ +#define VERR_FILE_LOCK_FAILED (-115) +/** File access error, another process has locked a portion of the file. */ +#define VERR_FILE_LOCK_VIOLATION (-116) +/** File or directory can't be created. */ +#define VERR_CANT_CREATE (-117) +/** Directory can't be deleted. */ +#define VERR_CANT_DELETE_DIRECTORY (-118) +/** Can't move file to another disk. */ +#define VERR_NOT_SAME_DEVICE (-119) +/** The filename or extension is too long. */ +#define VERR_FILENAME_TOO_LONG (-120) +/** Media not present in drive. */ +#define VERR_MEDIA_NOT_PRESENT (-121) +/** The type of media was not recognized. Not formatted? */ +#define VERR_MEDIA_NOT_RECOGNIZED (-122) +/** Can't unlock - region was not locked. */ +#define VERR_FILE_NOT_LOCKED (-123) +/** Unrecoverable error: lock was lost. */ +#define VERR_FILE_LOCK_LOST (-124) +/** Can't delete directory with files. */ +#define VERR_DIR_NOT_EMPTY (-125) +/** A directory operation was attempted on a non-directory object. */ +#define VERR_NOT_A_DIRECTORY (-126) +/** A non-directory operation was attempted on a directory object. */ +#define VERR_IS_A_DIRECTORY (-127) +/** Tried to grow a file beyond the limit imposed by the process or the filesystem. */ +#define VERR_FILE_TOO_BIG (-128) +/** No pending request the aio context has to wait for completion. */ +#define VERR_FILE_AIO_NO_REQUEST (-129) +/** The request could not be canceled or prepared for another transfer + * because it is still in progress. */ +#define VERR_FILE_AIO_IN_PROGRESS (-130) +/** The request could not be canceled because it already completed. */ +#define VERR_FILE_AIO_COMPLETED (-131) +/** The I/O context couldn't be destroyed because there are still pending requests. */ +#define VERR_FILE_AIO_BUSY (-132) +/** The requests couldn't be submitted because that would exceed the capacity of the context. */ +#define VERR_FILE_AIO_LIMIT_EXCEEDED (-133) +/** The request was canceled. */ +#define VERR_FILE_AIO_CANCELED (-134) +/** The request wasn't submitted so it can't be canceled. */ +#define VERR_FILE_AIO_NOT_SUBMITTED (-135) +/** A request was not prepared and thus could not be submitted. */ +#define VERR_FILE_AIO_NOT_PREPARED (-136) +/** Not all requests could be submitted due to resource shortage. */ +#define VERR_FILE_AIO_INSUFFICIENT_RESSOURCES (-137) +/** Device or resource is busy. */ +#define VERR_RESOURCE_BUSY (-138) +/** A file operation was attempted on a non-file object. */ +#define VERR_NOT_A_FILE (-139) +/** A non-file operation was attempted on a file object. */ +#define VERR_IS_A_FILE (-140) +/** Unexpected filesystem object type. */ +#define VERR_UNEXPECTED_FS_OBJ_TYPE (-141) +/** A path does not start with a root specification. */ +#define VERR_PATH_DOES_NOT_START_WITH_ROOT (-142) +/** A path is relative, expected an absolute path. */ +#define VERR_PATH_IS_RELATIVE (-143) +/** A path is not relative (start with root), expected an relative path. */ +#define VERR_PATH_IS_NOT_RELATIVE (-144) +/** Zero length path. */ +#define VERR_PATH_ZERO_LENGTH (-145) +/** There are not enough events available on the host to create the I/O context. + * This exact meaning is host platform dependent. */ +#define VERR_FILE_AIO_INSUFFICIENT_EVENTS (-146) +/** @} */ + + +/** @name Generic Filesystem I/O Status Codes + * @{ + */ +/** Unresolved (unknown) disk i/o error. */ +#define VERR_DISK_IO_ERROR (-150) +/** Invalid drive number. */ +#define VERR_INVALID_DRIVE (-151) +/** Disk is full. */ +#define VERR_DISK_FULL (-152) +/** Disk was changed. */ +#define VERR_DISK_CHANGE (-153) +/** Drive is locked. */ +#define VERR_DRIVE_LOCKED (-154) +/** The specified disk or diskette cannot be accessed. */ +#define VERR_DISK_INVALID_FORMAT (-155) +/** Too many symbolic links. */ +#define VERR_TOO_MANY_SYMLINKS (-156) +/** The OS does not support setting the time stamps on a symbolic link. */ +#define VERR_NS_SYMLINK_SET_TIME (-157) +/** The OS does not support changing the owner of a symbolic link. */ +#define VERR_NS_SYMLINK_CHANGE_OWNER (-158) +/** Symbolic link not allowed. */ +#define VERR_SYMLINK_NOT_ALLOWED (-159) +/** @} */ + + +/** @name Generic Directory Enumeration Status Codes + * @{ + */ +/** Unresolved (unknown) search error. */ +#define VERR_SEARCH_ERROR (-200) +/** No more files found. */ +#define VERR_NO_MORE_FILES (-201) +/** No more search handles available. */ +#define VERR_NO_MORE_SEARCH_HANDLES (-202) +/** RTDirReadEx() failed to retrieve the extra data which was requested. */ +#define VWRN_NO_DIRENT_INFO 203 +/** @} */ + + +/** @name Internal Processing Errors + * @{ + */ +/** Internal error - this should never happen. */ +#define VERR_INTERNAL_ERROR (-225) +/** Internal error no. 2. */ +#define VERR_INTERNAL_ERROR_2 (-226) +/** Internal error no. 3. */ +#define VERR_INTERNAL_ERROR_3 (-227) +/** Internal error no. 4. */ +#define VERR_INTERNAL_ERROR_4 (-228) +/** Internal error no. 5. */ +#define VERR_INTERNAL_ERROR_5 (-229) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_STATUS (-230) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_INFO_STATUS (-231) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_ERROR_STATUS (-232) +/** Internal error: Uninitialized status code. + * @remarks This is used by value elsewhere. */ +#define VERR_IPE_UNINITIALIZED_STATUS (-233) +/** Internal error: Supposedly unreachable default case in a switch. */ +#define VERR_IPE_NOT_REACHED_DEFAULT_CASE (-234) +/** @} */ + + +/** @name Generic Device I/O Status Codes + * @{ + */ +/** Unresolved (unknown) device i/o error. */ +#define VERR_DEV_IO_ERROR (-250) +/** Device i/o: Bad unit. */ +#define VERR_IO_BAD_UNIT (-251) +/** Device i/o: Not ready. */ +#define VERR_IO_NOT_READY (-252) +/** Device i/o: Bad command. */ +#define VERR_IO_BAD_COMMAND (-253) +/** Device i/o: CRC error. */ +#define VERR_IO_CRC (-254) +/** Device i/o: Bad length. */ +#define VERR_IO_BAD_LENGTH (-255) +/** Device i/o: Sector not found. */ +#define VERR_IO_SECTOR_NOT_FOUND (-256) +/** Device i/o: General failure. */ +#define VERR_IO_GEN_FAILURE (-257) +/** @} */ + + +/** @name Generic Pipe I/O Status Codes + * @{ + */ +/** Unresolved (unknown) pipe i/o error. */ +#define VERR_PIPE_IO_ERROR (-300) +/** Broken pipe. */ +#define VERR_BROKEN_PIPE (-301) +/** Bad pipe. */ +#define VERR_BAD_PIPE (-302) +/** Pipe is busy. */ +#define VERR_PIPE_BUSY (-303) +/** No data in pipe. */ +#define VERR_NO_DATA (-304) +/** Pipe is not connected. */ +#define VERR_PIPE_NOT_CONNECTED (-305) +/** More data available in pipe. */ +#define VERR_MORE_DATA (-306) +/** Expected read pipe, got a write pipe instead. */ +#define VERR_PIPE_NOT_READ (-307) +/** Expected write pipe, got a read pipe instead. */ +#define VERR_PIPE_NOT_WRITE (-308) +/** @} */ + + +/** @name Generic Semaphores Status Codes + * @{ + */ +/** Unresolved (unknown) semaphore error. */ +#define VERR_SEM_ERROR (-350) +/** Too many semaphores. */ +#define VERR_TOO_MANY_SEMAPHORES (-351) +/** Exclusive semaphore is owned by another process. */ +#define VERR_EXCL_SEM_ALREADY_OWNED (-352) +/** The semaphore is set and cannot be closed. */ +#define VERR_SEM_IS_SET (-353) +/** The semaphore cannot be set again. */ +#define VERR_TOO_MANY_SEM_REQUESTS (-354) +/** Attempt to release mutex not owned by caller. */ +#define VERR_NOT_OWNER (-355) +/** The semaphore has been opened too many times. */ +#define VERR_TOO_MANY_OPENS (-356) +/** The maximum posts for the event semaphore has been reached. */ +#define VERR_TOO_MANY_POSTS (-357) +/** The event semaphore has already been posted. */ +#define VERR_ALREADY_POSTED (-358) +/** The event semaphore has already been reset. */ +#define VERR_ALREADY_RESET (-359) +/** The semaphore is in use. */ +#define VERR_SEM_BUSY (-360) +/** The previous ownership of this semaphore has ended. */ +#define VERR_SEM_OWNER_DIED (-361) +/** Failed to open semaphore by name - not found. */ +#define VERR_SEM_NOT_FOUND (-362) +/** Semaphore destroyed while waiting. */ +#define VERR_SEM_DESTROYED (-363) +/** Nested ownership requests are not permitted for this semaphore type. */ +#define VERR_SEM_NESTED (-364) +/** The release call only release a semaphore nesting, i.e. the caller is still + * holding the semaphore. */ +#define VINF_SEM_NESTED (364) +/** Deadlock detected. */ +#define VERR_DEADLOCK (-365) +/** Ping-Pong listen or speak out of turn error. */ +#define VERR_SEM_OUT_OF_TURN (-366) +/** Tried to take a semaphore in a bad context. */ +#define VERR_SEM_BAD_CONTEXT (-367) +/** Don't spin for the semaphore, but it is safe to try grab it. */ +#define VINF_SEM_BAD_CONTEXT (367) +/** Wrong locking order detected. */ +#define VERR_SEM_LV_WRONG_ORDER (-368) +/** Wrong release order detected. */ +#define VERR_SEM_LV_WRONG_RELEASE_ORDER (-369) +/** Attempt to recursively enter a non-recursive lock. */ +#define VERR_SEM_LV_NESTED (-370) +/** Invalid parameters passed to the lock validator. */ +#define VERR_SEM_LV_INVALID_PARAMETER (-371) +/** The lock validator detected a deadlock. */ +#define VERR_SEM_LV_DEADLOCK (-372) +/** The lock validator detected an existing deadlock. + * The deadlock was not caused by the current operation, but existed already. */ +#define VERR_SEM_LV_EXISTING_DEADLOCK (-373) +/** Not the lock owner according our records. */ +#define VERR_SEM_LV_NOT_OWNER (-374) +/** An illegal lock upgrade was attempted. */ +#define VERR_SEM_LV_ILLEGAL_UPGRADE (-375) +/** The thread is not a valid signaller of the event. */ +#define VERR_SEM_LV_NOT_SIGNALLER (-376) +/** Internal error in the lock validator or related components. */ +#define VERR_SEM_LV_INTERNAL_ERROR (-377) +/** @} */ + + +/** @name Generic Network I/O Status Codes + * @{ + */ +/** Unresolved (unknown) network error. */ +#define VERR_NET_IO_ERROR (-400) +/** The network is busy or is out of resources. */ +#define VERR_NET_OUT_OF_RESOURCES (-401) +/** Net host name not found. */ +#define VERR_NET_HOST_NOT_FOUND (-402) +/** Network path not found. */ +#define VERR_NET_PATH_NOT_FOUND (-403) +/** General network printing error. */ +#define VERR_NET_PRINT_ERROR (-404) +/** The machine is not on the network. */ +#define VERR_NET_NO_NETWORK (-405) +/** Name is not unique on the network. */ +#define VERR_NET_NOT_UNIQUE_NAME (-406) + +/* These are BSD networking error codes - numbers correspond, don't mess! */ +/** Operation in progress. */ +#define VERR_NET_IN_PROGRESS (-436) +/** Operation already in progress. */ +#define VERR_NET_ALREADY_IN_PROGRESS (-437) +/** Attempted socket operation with a non-socket handle. + * (This includes closed handles.) */ +#define VERR_NET_NOT_SOCKET (-438) +/** Destination address required. */ +#define VERR_NET_DEST_ADDRESS_REQUIRED (-439) +/** Message too long. */ +#define VERR_NET_MSG_SIZE (-440) +/** Protocol wrong type for socket. */ +#define VERR_NET_PROTOCOL_TYPE (-441) +/** Protocol not available. */ +#define VERR_NET_PROTOCOL_NOT_AVAILABLE (-442) +/** Protocol not supported. */ +#define VERR_NET_PROTOCOL_NOT_SUPPORTED (-443) +/** Socket type not supported. */ +#define VERR_NET_SOCKET_TYPE_NOT_SUPPORTED (-444) +/** Operation not supported. */ +#define VERR_NET_OPERATION_NOT_SUPPORTED (-445) +/** Protocol family not supported. */ +#define VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED (-446) +/** Address family not supported by protocol family. */ +#define VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED (-447) +/** Address already in use. */ +#define VERR_NET_ADDRESS_IN_USE (-448) +/** Can't assign requested address. */ +#define VERR_NET_ADDRESS_NOT_AVAILABLE (-449) +/** Network is down. */ +#define VERR_NET_DOWN (-450) +/** Network is unreachable. */ +#define VERR_NET_UNREACHABLE (-451) +/** Network dropped connection on reset. */ +#define VERR_NET_CONNECTION_RESET (-452) +/** Software caused connection abort. */ +#define VERR_NET_CONNECTION_ABORTED (-453) +/** Connection reset by peer. */ +#define VERR_NET_CONNECTION_RESET_BY_PEER (-454) +/** No buffer space available. */ +#define VERR_NET_NO_BUFFER_SPACE (-455) +/** Socket is already connected. */ +#define VERR_NET_ALREADY_CONNECTED (-456) +/** Socket is not connected. */ +#define VERR_NET_NOT_CONNECTED (-457) +/** Can't send after socket shutdown. */ +#define VERR_NET_SHUTDOWN (-458) +/** Too many references: can't splice. */ +#define VERR_NET_TOO_MANY_REFERENCES (-459) +/** Too many references: can't splice. */ +#define VERR_NET_CONNECTION_TIMED_OUT (-460) +/** Connection refused. */ +#define VERR_NET_CONNECTION_REFUSED (-461) +/* ELOOP is not net. */ +/* ENAMETOOLONG is not net. */ +/** Host is down. */ +#define VERR_NET_HOST_DOWN (-464) +/** No route to host. */ +#define VERR_NET_HOST_UNREACHABLE (-465) +/** Protocol error. */ +#define VERR_NET_PROTOCOL_ERROR (-466) +/** Incomplete packet was submitted by guest. */ +#define VERR_NET_INCOMPLETE_TX_PACKET (-467) +/** @} */ + + +/** @name TCP Status Codes + * @{ + */ +/** Stop the TCP server. */ +#define VERR_TCP_SERVER_STOP (-500) +/** The server was stopped. */ +#define VINF_TCP_SERVER_STOP 500 +/** The TCP server was shut down using RTTcpServerShutdown. */ +#define VERR_TCP_SERVER_SHUTDOWN (-501) +/** The TCP server was destroyed. */ +#define VERR_TCP_SERVER_DESTROYED (-502) +/** The TCP server has no client associated with it. */ +#define VINF_TCP_SERVER_NO_CLIENT 503 +/** @} */ + + +/** @name UDP Status Codes + * @{ + */ +/** Stop the UDP server. */ +#define VERR_UDP_SERVER_STOP (-520) +/** The server was stopped. */ +#define VINF_UDP_SERVER_STOP 520 +/** The UDP server was shut down using RTUdpServerShutdown. */ +#define VERR_UDP_SERVER_SHUTDOWN (-521) +/** The UDP server was destroyed. */ +#define VERR_UDP_SERVER_DESTROYED (-522) +/** The UDP server has no client associated with it. */ +#define VINF_UDP_SERVER_NO_CLIENT 523 +/** @} */ + + +/** @name L4 Specific Status Codes + * @{ + */ +/** Invalid offset in an L4 dataspace */ +#define VERR_L4_INVALID_DS_OFFSET (-550) +/** IPC error */ +#define VERR_IPC (-551) +/** Item already used */ +#define VERR_RESOURCE_IN_USE (-552) +/** Source/destination not found */ +#define VERR_IPC_PROCESS_NOT_FOUND (-553) +/** Receive timeout */ +#define VERR_IPC_RECEIVE_TIMEOUT (-554) +/** Send timeout */ +#define VERR_IPC_SEND_TIMEOUT (-555) +/** Receive cancelled */ +#define VERR_IPC_RECEIVE_CANCELLED (-556) +/** Send cancelled */ +#define VERR_IPC_SEND_CANCELLED (-557) +/** Receive aborted */ +#define VERR_IPC_RECEIVE_ABORTED (-558) +/** Send aborted */ +#define VERR_IPC_SEND_ABORTED (-559) +/** Couldn't map pages during receive */ +#define VERR_IPC_RECEIVE_MAP_FAILED (-560) +/** Couldn't map pages during send */ +#define VERR_IPC_SEND_MAP_FAILED (-561) +/** Send pagefault timeout in receive */ +#define VERR_IPC_RECEIVE_SEND_PF_TIMEOUT (-562) +/** Send pagefault timeout in send */ +#define VERR_IPC_SEND_SEND_PF_TIMEOUT (-563) +/** (One) receive buffer was too small, or too few buffers */ +#define VINF_IPC_RECEIVE_MSG_CUT 564 +/** (One) send buffer was too small, or too few buffers */ +#define VINF_IPC_SEND_MSG_CUT 565 +/** Dataspace manager server not found */ +#define VERR_L4_DS_MANAGER_NOT_FOUND (-566) +/** @} */ + + +/** @name Loader Status Codes. + * @{ + */ +/** Invalid executable signature. */ +#define VERR_INVALID_EXE_SIGNATURE (-600) +/** The iprt loader recognized a ELF image, but doesn't support loading it. */ +#define VERR_ELF_EXE_NOT_SUPPORTED (-601) +/** The iprt loader recognized a PE image, but doesn't support loading it. */ +#define VERR_PE_EXE_NOT_SUPPORTED (-602) +/** The iprt loader recognized a LX image, but doesn't support loading it. */ +#define VERR_LX_EXE_NOT_SUPPORTED (-603) +/** The iprt loader recognized a LE image, but doesn't support loading it. */ +#define VERR_LE_EXE_NOT_SUPPORTED (-604) +/** The iprt loader recognized a NE image, but doesn't support loading it. */ +#define VERR_NE_EXE_NOT_SUPPORTED (-605) +/** The iprt loader recognized a MZ image, but doesn't support loading it. */ +#define VERR_MZ_EXE_NOT_SUPPORTED (-606) +/** The iprt loader recognized an a.out image, but doesn't support loading it. */ +#define VERR_AOUT_EXE_NOT_SUPPORTED (-607) +/** Bad executable. */ +#define VERR_BAD_EXE_FORMAT (-608) +/** Symbol (export) not found. */ +#define VERR_SYMBOL_NOT_FOUND (-609) +/** Module not found. */ +#define VERR_MODULE_NOT_FOUND (-610) +/** The loader resolved an external symbol to an address to big for the image format. */ +#define VERR_SYMBOL_VALUE_TOO_BIG (-611) +/** The image is too big. */ +#define VERR_IMAGE_TOO_BIG (-612) +/** The image base address is to high for this image type. */ +#define VERR_IMAGE_BASE_TOO_HIGH (-614) +/** Mismatching architecture. */ +#define VERR_LDR_ARCH_MISMATCH (-615) +/** Mismatch between IPRT and native loader. */ +#define VERR_LDR_MISMATCH_NATIVE (-616) +/** Failed to resolve an imported (external) symbol. */ +#define VERR_LDR_IMPORTED_SYMBOL_NOT_FOUND (-617) +/** Generic loader failure. */ +#define VERR_LDR_GENERAL_FAILURE (-618) +/** Code signing error. */ +#define VERR_LDR_IMAGE_HASH (-619) +/** The PE loader encountered delayed imports, a feature which hasn't been implemented yet. */ +#define VERR_LDRPE_DELAY_IMPORT (-620) +/** The PE loader encountered a malformed certificate. */ +#define VERR_LDRPE_CERT_MALFORMED (-621) +/** The PE loader encountered a certificate with an unsupported type or structure revision. */ +#define VERR_LDRPE_CERT_UNSUPPORTED (-622) +/** The PE loader doesn't know how to deal with the global pointer data directory entry yet. */ +#define VERR_LDRPE_GLOBALPTR (-623) +/** The PE loader doesn't support the TLS data directory yet. */ +#define VERR_LDRPE_TLS (-624) +/** The PE loader doesn't grok the COM descriptor data directory entry. */ +#define VERR_LDRPE_COM_DESCRIPTOR (-625) +/** The PE loader encountered an unknown load config directory/header size. */ +#define VERR_LDRPE_LOAD_CONFIG_SIZE (-626) +/** The PE loader encountered a lock prefix table, a feature which hasn't been implemented yet. */ +#define VERR_LDRPE_LOCK_PREFIX_TABLE (-627) +/** The PE loader encountered some Guard CF stuff in the load config. */ +#define VERR_LDRPE_GUARD_CF_STUFF (-628) +/** The ELF loader doesn't handle foreign endianness. */ +#define VERR_LDRELF_ODD_ENDIAN (-630) +/** The ELF image is 'dynamic', the ELF loader can only deal with 'relocatable' images at present. */ +#define VERR_LDRELF_DYN (-631) +/** The ELF image is 'executable', the ELF loader can only deal with 'relocatable' images at present. */ +#define VERR_LDRELF_EXEC (-632) +/** The ELF image was created for an unsupported target machine type. */ +#define VERR_LDRELF_MACHINE (-633) +/** The ELF version is not supported. */ +#define VERR_LDRELF_VERSION (-634) +/** The ELF loader cannot handle multiple SYMTAB sections. */ +#define VERR_LDRELF_MULTIPLE_SYMTABS (-635) +/** The ELF loader encountered a relocation type which is not implemented. */ +#define VERR_LDRELF_RELOCATION_NOT_SUPPORTED (-636) +/** The ELF loader encountered a bad symbol index. */ +#define VERR_LDRELF_INVALID_SYMBOL_INDEX (-637) +/** The ELF loader encountered an invalid symbol name offset. */ +#define VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET (-638) +/** The ELF loader encountered an invalid relocation offset. */ +#define VERR_LDRELF_INVALID_RELOCATION_OFFSET (-639) +/** The ELF loader didn't find the symbol/string table for the image. */ +#define VERR_LDRELF_NO_SYMBOL_OR_NO_STRING_TABS (-640) +/** Invalid link address. */ +#define VERR_LDR_INVALID_LINK_ADDRESS (-647) +/** Invalid image relative virtual address. */ +#define VERR_LDR_INVALID_RVA (-648) +/** Invalid segment:offset address. */ +#define VERR_LDR_INVALID_SEG_OFFSET (-649) +/** @}*/ + +/** @name Debug Info Reader Status Codes. + * @{ + */ +/** The module contains no line number information. */ +#define VERR_DBG_NO_LINE_NUMBERS (-650) +/** The module contains no symbol information. */ +#define VERR_DBG_NO_SYMBOLS (-651) +/** The specified segment:offset address was invalid. Typically an attempt at + * addressing outside the segment boundary. */ +#define VERR_DBG_INVALID_ADDRESS (-652) +/** Invalid segment index. */ +#define VERR_DBG_INVALID_SEGMENT_INDEX (-653) +/** Invalid segment offset. */ +#define VERR_DBG_INVALID_SEGMENT_OFFSET (-654) +/** Invalid image relative virtual address. */ +#define VERR_DBG_INVALID_RVA (-655) +/** Invalid image relative virtual address. */ +#define VERR_DBG_SPECIAL_SEGMENT (-656) +/** Address conflict within a module/segment. + * Attempted to add a segment, symbol or line number that fully or partially + * overlaps with an existing one. */ +#define VERR_DBG_ADDRESS_CONFLICT (-657) +/** Duplicate symbol within the module. + * Attempted to add a symbol which name already exists within the module. */ +#define VERR_DBG_DUPLICATE_SYMBOL (-658) +/** The segment index specified when adding a new segment is already in use. */ +#define VERR_DBG_SEGMENT_INDEX_CONFLICT (-659) +/** No line number was found for the specified address/ordinal/whatever. */ +#define VERR_DBG_LINE_NOT_FOUND (-660) +/** The length of the symbol name is out of range. + * This means it is an empty string or that it's greater or equal to + * RTDBG_SYMBOL_NAME_LENGTH. */ +#define VERR_DBG_SYMBOL_NAME_OUT_OF_RANGE (-661) +/** The length of the file name is out of range. + * This means it is an empty string or that it's greater or equal to + * RTDBG_FILE_NAME_LENGTH. */ +#define VERR_DBG_FILE_NAME_OUT_OF_RANGE (-662) +/** The length of the segment name is out of range. + * This means it is an empty string or that it is greater or equal to + * RTDBG_SEGMENT_NAME_LENGTH. */ +#define VERR_DBG_SEGMENT_NAME_OUT_OF_RANGE (-663) +/** The specified address range wraps around. */ +#define VERR_DBG_ADDRESS_WRAP (-664) +/** The file is not a valid NM map file. */ +#define VERR_DBG_NOT_NM_MAP_FILE (-665) +/** The file is not a valid /proc/kallsyms file. */ +#define VERR_DBG_NOT_LINUX_KALLSYMS (-666) +/** No debug module interpreter matching the debug info. */ +#define VERR_DBG_NO_MATCHING_INTERPRETER (-667) +/** Bad DWARF line number header. */ +#define VERR_DWARF_BAD_LINE_NUMBER_HEADER (-668) +/** Unexpected end of DWARF unit. */ +#define VERR_DWARF_UNEXPECTED_END (-669) +/** DWARF LEB value overflows the decoder type. */ +#define VERR_DWARF_LEB_OVERFLOW (-670) +/** Bad DWARF extended line number opcode. */ +#define VERR_DWARF_BAD_LNE (-671) +/** Bad DWARF string. */ +#define VERR_DWARF_BAD_STRING (-672) +/** Bad DWARF position. */ +#define VERR_DWARF_BAD_POS (-673) +/** Bad DWARF info. */ +#define VERR_DWARF_BAD_INFO (-674) +/** Bad DWARF abbreviation data. */ +#define VERR_DWARF_BAD_ABBREV (-675) +/** A DWARF abbreviation was not found. */ +#define VERR_DWARF_ABBREV_NOT_FOUND (-676) +/** Encountered an unknown attribute form. */ +#define VERR_DWARF_UNKNOWN_FORM (-677) +/** Encountered an unexpected attribute form. */ +#define VERR_DWARF_UNEXPECTED_FORM (-678) +/** Unfinished code. */ +#define VERR_DWARF_TODO (-679) +/** Unknown location opcode. */ +#define VERR_DWARF_UNKNOWN_LOC_OPCODE (-680) +/** Expression stack overflow. */ +#define VERR_DWARF_STACK_OVERFLOW (-681) +/** Expression stack underflow. */ +#define VERR_DWARF_STACK_UNDERFLOW (-682) +/** Internal processing error in the DWARF code. */ +#define VERR_DWARF_IPE (-683) +/** Invalid configuration property value. */ +#define VERR_DBG_CFG_INVALID_VALUE (-684) +/** Not an integer property. */ +#define VERR_DBG_CFG_NOT_UINT_PROP (-685) +/** Deferred loading of information failed. */ +#define VERR_DBG_DEFERRED_LOAD_FAILED (-686) +/** Unfinished debug info reader code. */ +#define VERR_DBG_TODO (-687) +/** Found file, but it didn't match the search criteria. */ +#define VERR_DBG_FILE_MISMATCH (-688) +/** Internal processing error in the debug module reader code. */ +#define VERR_DBG_MOD_IPE (-689) +/** The symbol size was adjusted while adding it. */ +#define VINF_DBG_ADJUSTED_SYM_SIZE 690 +/** Unable to parse the CodeView debug information. */ +#define VERR_CV_BAD_FORMAT (-691) +/** Unfinished CodeView debug information feature. */ +#define VERR_CV_TODO (-692) +/** Internal processing error the CodeView debug information reader. */ +#define VERR_CV_IPE (-693) +/** @} */ + +/** @name Request Packet Status Codes. + * @{ + */ +/** Invalid RT request type. + * For the RTReqAlloc() case, the caller just specified an illegal enmType. For + * all the other occurrences it means indicates corruption, broken logic, or stupid + * interface user. */ +#define VERR_RT_REQUEST_INVALID_TYPE (-700) +/** Invalid RT request state. + * The state of the request packet was not the expected and accepted one(s). Either + * the interface user screwed up, or we've got corruption/broken logic. */ +#define VERR_RT_REQUEST_STATE (-701) +/** Invalid RT request packet. + * One or more of the RT controlled packet members didn't contain the correct + * values. Some thing's broken. */ +#define VERR_RT_REQUEST_INVALID_PACKAGE (-702) +/** The status field has not been updated yet as the request is still + * pending completion. Someone queried the iStatus field before the request + * has been fully processed. */ +#define VERR_RT_REQUEST_STATUS_STILL_PENDING (-703) +/** The request has been freed, don't read the status now. + * Someone is reading the iStatus field of a freed request packet. */ +#define VERR_RT_REQUEST_STATUS_FREED (-704) +/** @} */ + +/** @name Environment Status Code + * @{ + */ +/** The specified environment variable was not found. (RTEnvGetEx) */ +#define VERR_ENV_VAR_NOT_FOUND (-750) +/** The specified environment variable was not found. (RTEnvUnsetEx) */ +#define VINF_ENV_VAR_NOT_FOUND (750) +/** Unable to translate all the variables in the default environment due to + * codeset issues (LANG / LC_ALL / LC_CTYPE). */ +#define VWRN_ENV_NOT_FULLY_TRANSLATED (751) +/** Invalid environment variable name. */ +#define VERR_ENV_INVALID_VAR_NAME (-752) +/** The environment variable is an unset record. */ +#define VINF_ENV_VAR_UNSET (753) +/** The environment variable has been recorded as being unset. */ +#define VERR_ENV_VAR_UNSET (-753) +/** @} */ + +/** @name Multiprocessor Status Codes. + * @{ + */ +/** The specified cpu is offline. */ +#define VERR_CPU_OFFLINE (-800) +/** The specified cpu was not found. */ +#define VERR_CPU_NOT_FOUND (-801) +/** Not all of the requested CPUs showed up in the PFNRTMPWORKER. */ +#define VERR_NOT_ALL_CPUS_SHOWED (-802) +/** Internal processing error in the RTMp code.*/ +#define VERR_CPU_IPE_1 (-803) +/** @} */ + +/** @name RTGetOpt status codes + * @{ */ +/** RTGetOpt: Command line option not recognized. */ +#define VERR_GETOPT_UNKNOWN_OPTION (-825) +/** RTGetOpt: Command line option needs argument. */ +#define VERR_GETOPT_REQUIRED_ARGUMENT_MISSING (-826) +/** RTGetOpt: Command line option has argument with bad format. */ +#define VERR_GETOPT_INVALID_ARGUMENT_FORMAT (-827) +/** RTGetOpt: Not an option. */ +#define VINF_GETOPT_NOT_OPTION 828 +/** RTGetOpt: Command line option needs an index. */ +#define VERR_GETOPT_INDEX_MISSING (-829) +/** @} */ + +/** @name RTCache status codes + * @{ */ +/** RTCache: cache is full. */ +#define VERR_CACHE_FULL (-850) +/** RTCache: cache is empty. */ +#define VERR_CACHE_EMPTY (-851) +/** @} */ + +/** @name RTMemCache status codes + * @{ */ +/** Reached the max cache size. */ +#define VERR_MEM_CACHE_MAX_SIZE (-855) +/** @} */ + +/** @name RTS3 status codes + * @{ */ +/** Access denied error. */ +#define VERR_S3_ACCESS_DENIED (-875) +/** The bucket/key wasn't found. */ +#define VERR_S3_NOT_FOUND (-876) +/** Bucket already exists. */ +#define VERR_S3_BUCKET_ALREADY_EXISTS (-877) +/** Can't delete bucket with keys. */ +#define VERR_S3_BUCKET_NOT_EMPTY (-878) +/** The current operation was canceled. */ +#define VERR_S3_CANCELED (-879) +/** @} */ + +/** @name HTTP status codes + * @{ */ +/** HTTP initialization failed. */ +#define VERR_HTTP_INIT_FAILED (-885) +/** The server has not found anything matching the URI given. */ +#define VERR_HTTP_NOT_FOUND (-886) +/** The request is for something forbidden. Authorization will not help. */ +#define VERR_HTTP_ACCESS_DENIED (-887) +/** The server did not understand the request due to bad syntax. */ +#define VERR_HTTP_BAD_REQUEST (-888) +/** Couldn't connect to the server (proxy?). */ +#define VERR_HTTP_COULDNT_CONNECT (-889) +/** SSL connection error. */ +#define VERR_HTTP_SSL_CONNECT_ERROR (-890) +/** CAcert is missing or has the wrong format. */ +#define VERR_HTTP_CACERT_WRONG_FORMAT (-891) +/** Certificate cannot be authenticated with the given CA certificates. */ +#define VERR_HTTP_CACERT_CANNOT_AUTHENTICATE (-892) +/** The current HTTP request was forcefully aborted */ +#define VERR_HTTP_ABORTED (-893) +/** Request was redirected. */ +#define VERR_HTTP_REDIRECTED (-894) +/** Proxy couldn't be resolved. */ +#define VERR_HTTP_PROXY_NOT_FOUND (-895) +/** The remote host couldn't be resolved. */ +#define VERR_HTTP_HOST_NOT_FOUND (-896) +/** Unexpected cURL error configure the proxy. */ +#define VERR_HTTP_CURL_PROXY_CONFIG (-897) +/** Generic CURL error. */ +#define VERR_HTTP_CURL_ERROR (-899) +/** @} */ + +/** @name RTManifest status codes + * @{ */ +/** A digest type used in the manifest file isn't supported. */ +#define VERR_MANIFEST_UNSUPPORTED_DIGEST_TYPE (-900) +/** An entry in the manifest file couldn't be interpreted correctly. */ +#define VERR_MANIFEST_WRONG_FILE_FORMAT (-901) +/** A digest doesn't match the corresponding file. */ +#define VERR_MANIFEST_DIGEST_MISMATCH (-902) +/** The file list doesn't match to the content of the manifest file. */ +#define VERR_MANIFEST_FILE_MISMATCH (-903) +/** The specified attribute (name) was not found in the manifest. */ +#define VERR_MANIFEST_ATTR_NOT_FOUND (-904) +/** The attribute type did not match. */ +#define VERR_MANIFEST_ATTR_TYPE_MISMATCH (-905) +/** No attribute of the specified types was found. */ +#define VERR_MANIFEST_ATTR_TYPE_NOT_FOUND (-906) +/** @} */ + +/** @name RTTar status codes + * @{ */ +/** The checksum of a tar header record doesn't match. */ +#define VERR_TAR_CHKSUM_MISMATCH (-925) +/** The tar end of file record was read. */ +#define VERR_TAR_END_OF_FILE (-926) +/** The tar file ended unexpectedly. */ +#define VERR_TAR_UNEXPECTED_EOS (-927) +/** The tar termination records was encountered without reaching the end of + * the input stream. */ +#define VERR_TAR_EOS_MORE_INPUT (-928) +/** A number tar header field was malformed. */ +#define VERR_TAR_BAD_NUM_FIELD (-929) +/** A numeric tar header field was not terminated correctly. */ +#define VERR_TAR_BAD_NUM_FIELD_TERM (-930) +/** A number tar header field was encoded using base-256 which this + * tar implementation currently does not support. */ +#define VERR_TAR_BASE_256_NOT_SUPPORTED (-931) +/** A number tar header field yielded a value too large for the internal + * variable of the tar interpreter. */ +#define VERR_TAR_NUM_VALUE_TOO_LARGE (-932) +/** The combined minor and major device number type is too small to hold the + * value stored in the tar header. */ +#define VERR_TAR_DEV_VALUE_TOO_LARGE (-933) +/** The mode field in a tar header is bad. */ +#define VERR_TAR_BAD_MODE_FIELD (-934) +/** The mode field should not include the type. */ +#define VERR_TAR_MODE_WITH_TYPE (-935) +/** The size field should be zero for links and symlinks. */ +#define VERR_TAR_SIZE_NOT_ZERO (-936) +/** Encountered an unknown type flag. */ +#define VERR_TAR_UNKNOWN_TYPE_FLAG (-937) +/** The tar header is all zeros. */ +#define VERR_TAR_ZERO_HEADER (-938) +/** Not a uniform standard tape v0.0 archive header. */ +#define VERR_TAR_NOT_USTAR_V00 (-939) +/** The name is empty. */ +#define VERR_TAR_EMPTY_NAME (-940) +/** A non-directory entry has a name ending with a slash. */ +#define VERR_TAR_NON_DIR_ENDS_WITH_SLASH (-941) +/** Encountered an unsupported portable archive exchange (pax) header. */ +#define VERR_TAR_UNSUPPORTED_PAX_TYPE (-942) +/** Encountered an unsupported Solaris Tar extension. */ +#define VERR_TAR_UNSUPPORTED_SOLARIS_HDR_TYPE (-943) +/** Encountered an unsupported GNU Tar extension. */ +#define VERR_TAR_UNSUPPORTED_GNU_HDR_TYPE (-944) +/** Malformed checksum field in the tar header. */ +#define VERR_TAR_BAD_CHKSUM_FIELD (-945) +/** Malformed checksum field in the tar header. */ +#define VERR_TAR_MALFORMED_GNU_LONGXXXX (-946) +/** Too long name or link string. */ +#define VERR_TAR_NAME_TOO_LONG (-947) +/** A directory entry in the archive. */ +#define VINF_TAR_DIR_PATH (948) +/** @} */ + +/** @name RTPoll status codes + * @{ */ +/** The handle is not pollable. */ +#define VERR_POLL_HANDLE_NOT_POLLABLE (-950) +/** The handle ID is already present in the poll set. */ +#define VERR_POLL_HANDLE_ID_EXISTS (-951) +/** The handle ID was not found in the set. */ +#define VERR_POLL_HANDLE_ID_NOT_FOUND (-952) +/** The poll set is full. */ +#define VERR_POLL_SET_IS_FULL (-953) +/** @} */ + +/** @name Pkzip status codes + * @{ */ +/** No end of central directory record found. */ +#define VERR_PKZIP_NO_EOCB (-960) +/** Too long name string. */ +#define VERR_PKZIP_NAME_TOO_LONG (-961) +/** Local file header corrupt. */ +#define VERR_PKZIP_BAD_LF_HEADER (-962) +/** Central directory file header corrupt. */ +#define VERR_PKZIP_BAD_CDF_HEADER (-963) +/** Encountered an unknown type flag. */ +#define VERR_PKZIP_UNKNOWN_TYPE_FLAG (-964) +/** Found a ZIP64 Extra Information Field in a ZIP32 file. */ +#define VERR_PKZIP_ZIP64EX_IN_ZIP32 (-965) + + +/** @name RTZip status codes + * @{ */ +/** Generic zip error. */ +#define VERR_ZIP_ERROR (-22000) +/** The compressed data was corrupted. */ +#define VERR_ZIP_CORRUPTED (-22001) +/** Ran out of memory while compressing or uncompressing. */ +#define VERR_ZIP_NO_MEMORY (-22002) +/** The compression format version is unsupported. */ +#define VERR_ZIP_UNSUPPORTED_VERSION (-22003) +/** The compression method is unsupported. */ +#define VERR_ZIP_UNSUPPORTED_METHOD (-22004) +/** The compressed data started with a bad header. */ +#define VERR_ZIP_BAD_HEADER (-22005) +/** @} */ + +/** @name RTVfs status codes + * @{ */ +/** The VFS chain specification does not have a valid prefix. */ +#define VERR_VFS_CHAIN_NO_PREFIX (-22100) +/** The VFS chain specification is empty. */ +#define VERR_VFS_CHAIN_EMPTY (-22101) +/** Expected an element. */ +#define VERR_VFS_CHAIN_EXPECTED_ELEMENT (-22102) +/** The VFS object type is not known. */ +#define VERR_VFS_CHAIN_UNKNOWN_TYPE (-22103) +/** Expected a left parentheses. */ +#define VERR_VFS_CHAIN_EXPECTED_LEFT_PARENTHESES (-22104) +/** Expected a right parentheses. */ +#define VERR_VFS_CHAIN_EXPECTED_RIGHT_PARENTHESES (-22105) +/** Expected a provider name. */ +#define VERR_VFS_CHAIN_EXPECTED_PROVIDER_NAME (-22106) +/** Expected an element separator (| or :). */ +#define VERR_VFS_CHAIN_EXPECTED_SEPARATOR (-22107) +/** Leading element separator not permitted. */ +#define VERR_VFS_CHAIN_LEADING_SEPARATOR (-22108) +/** Trailing element separator not permitted. */ +#define VERR_VFS_CHAIN_TRAILING_SEPARATOR (-22109) +/** The provider is only allowed as the first element. */ +#define VERR_VFS_CHAIN_MUST_BE_FIRST_ELEMENT (-22110) +/** The provider cannot be the first element. */ +#define VERR_VFS_CHAIN_CANNOT_BE_FIRST_ELEMENT (-22111) +/** VFS object cast failed. */ +#define VERR_VFS_CHAIN_CAST_FAILED (-22112) +/** Internal error in the VFS chain code. */ +#define VERR_VFS_CHAIN_IPE (-22113) +/** VFS chain element provider not found. */ +#define VERR_VFS_CHAIN_PROVIDER_NOT_FOUND (-22114) +/** VFS chain does not terminate with the desired object type. */ +#define VERR_VFS_CHAIN_FINAL_TYPE_MISMATCH (-22115) +/** VFS chain element takes no arguments. */ +#define VERR_VFS_CHAIN_NO_ARGS (-22116) +/** VFS chain element takes exactly one argument. */ +#define VERR_VFS_CHAIN_ONE_ARG (-22117) +/** VFS chain element expected at most one argument. */ +#define VERR_VFS_CHAIN_AT_MOST_ONE_ARG (-22118) +/** VFS chain element expected at least one argument. */ +#define VERR_VFS_CHAIN_AT_LEAST_ONE_ARG (-22119) +/** VFS chain element takes exactly two arguments. */ +#define VERR_VFS_CHAIN_TWO_ARGS (-22120) +/** VFS chain element expected at least two arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_TWO_ARGS (-22121) +/** VFS chain element expected at most two arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_TWO_ARGS (-22122) +/** VFS chain element takes exactly three arguments. */ +#define VERR_VFS_CHAIN_THREE_ARGS (-22123) +/** VFS chain element expected at least three arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_THREE_ARGS (-22124) +/** VFS chain element expected at most three arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_THREE_ARGS (-22125) +/** VFS chain element takes exactly four arguments. */ +#define VERR_VFS_CHAIN_FOUR_ARGS (-22126) +/** VFS chain element expected at least four arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_FOUR_ARGS (-22127) +/** VFS chain element expected at most four arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_FOUR_ARGS (-22128) +/** VFS chain element takes exactly five arguments. */ +#define VERR_VFS_CHAIN_FIVE_ARGS (-22129) +/** VFS chain element expected at least five arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_FIVE_ARGS (-22130) +/** VFS chain element expected at most five arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_FIVE_ARGS (-22131) +/** VFS chain element takes exactly six arguments. */ +#define VERR_VFS_CHAIN_SIX_ARGS (-22132) +/** VFS chain element expected at least six arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_SIX_ARGS (-22133) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_SIX_ARGS (-22134) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_TOO_FEW_ARGS (-22135) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_TOO_MANY_ARGS (-22136) +/** VFS chain element expected non-empty argument. */ +#define VERR_VFS_CHAIN_EMPTY_ARG (-22137) +/** Invalid argument to VFS chain element. */ +#define VERR_VFS_CHAIN_INVALID_ARGUMENT (-22138) +/** VFS chain element only provides file and I/O stream (ios) objects. */ +#define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS (-22139) +/** VFS chain element only provides I/O stream (ios) objects. */ +#define VERR_VFS_CHAIN_ONLY_IOS (-22140) +/** VFS chain element only provides directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_DIR (-22141) +/** VFS chain element only provides file system stream (fss) objects. */ +#define VERR_VFS_CHAIN_ONLY_FSS (-22142) +/** VFS chain element only provides file system (vfs) objects. */ +#define VERR_VFS_CHAIN_ONLY_VFS (-22143) +/** VFS chain element only provides file, I/O stream (ios), or + * directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS_OR_DIR (-22144) +/** VFS chain element only provides file, I/O stream (ios), or + * directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_DIR_OR_VFS (-22145) +/** VFS chain element takes a file object as input. */ +#define VERR_VFS_CHAIN_TAKES_FILE (-22146) +/** VFS chain element takes a file or I/O stream (ios) object as input. */ +#define VERR_VFS_CHAIN_TAKES_FILE_OR_IOS (-22147) +/** VFS chain element takes a directory (dir) object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR (-22148) +/** VFS chain element takes a file system stream (fss) object as input. */ +#define VERR_VFS_CHAIN_TAKES_FSS (-22149) +/** VFS chain element takes a file system (vfs) object as input. */ +#define VERR_VFS_CHAIN_TAKES_VFS (-22150) +/** VFS chain element takes a directory (dir) or file system (vfs) + * object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR_OR_VFS (-22151) +/** VFS chain element takes a directory (dir), file system stream (fss), + * or file system (vfs) object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR_OR_FSS_OR_VFS (-22152) +/** VFS chain element only provides a read-only I/O stream, while the chain + * requires write access. */ +#define VERR_VFS_CHAIN_READ_ONLY_IOS (-22153) +/** VFS chain element only provides a read-only I/O stream, while the chain + * read access. */ +#define VERR_VFS_CHAIN_WRITE_ONLY_IOS (-22154) +/** VFS chain only has a single element and it is just a path, need to be + * treated as a normal file system request. */ +#define VERR_VFS_CHAIN_PATH_ONLY (-22155) +/** VFS chain element preceding the final path needs to be a directory, file + * system or file system stream. */ +#define VERR_VFS_CHAIN_TYPE_MISMATCH_PATH_ONLY (-22156) +/** VFS chain doesn't end with a path only element. */ +#define VERR_VFS_CHAIN_NOT_PATH_ONLY (-22157) +/** The path only element at the end of the VFS chain is too short to make out + * the parent directory. */ +#define VERR_VFS_CHAIN_TOO_SHORT_FOR_PARENT (-22158) +/** @} */ + +/** @name RTDvm status codes + * @{ */ +/** The volume map doesn't contain any valid volume. */ +#define VERR_DVM_MAP_EMPTY (-22200) +/** There is no volume behind the current one. */ +#define VERR_DVM_MAP_NO_VOLUME (-22201) +/** @} */ + +/** @name Logger status codes + * @{ */ +/** The internal logger revision did not match. */ +#define VERR_LOG_REVISION_MISMATCH (-22300) +/** @} */ + +/* see above, 22400..22499 is used for misc codes! */ + +/** @name Logger status codes + * @{ */ +/** Power off is not supported by the hardware or the OS. */ +#define VERR_SYS_CANNOT_POWER_OFF (-22500) +/** The halt action was requested, but the OS may actually power + * off the machine. */ +#define VINF_SYS_MAY_POWER_OFF (22501) +/** Shutdown failed. */ +#define VERR_SYS_SHUTDOWN_FAILED (-22502) +/** @} */ + +/** @name Filesystem status codes + * @{ */ +/** Filesystem can't be opened because it is corrupt. */ +#define VERR_FILESYSTEM_CORRUPT (-22600) +/** @} */ + +/** @name RTZipXar status codes. + * @{ */ +/** Wrong magic value. */ +#define VERR_XAR_WRONG_MAGIC (-22700) +/** Bad header size. */ +#define VERR_XAR_BAD_HDR_SIZE (-22701) +/** Unsupported version. */ +#define VERR_XAR_UNSUPPORTED_VERSION (-22702) +/** Unsupported hashing function. */ +#define VERR_XAR_UNSUPPORTED_HASH_FUNCTION (-22703) +/** The table of content (TOC) is too small and therefore can't be valid. */ +#define VERR_XAR_TOC_TOO_SMALL (-22704) +/** The table of content (TOC) is too big. */ +#define VERR_XAR_TOC_TOO_BIG (-22705) +/** The compressed table of content is too big. */ +#define VERR_XAR_TOC_TOO_BIG_COMPRESSED (-22706) +/** The uncompressed table of content size in the header didn't match what + * ZLib returned. */ +#define VERR_XAR_TOC_UNCOMP_SIZE_MISMATCH (-22707) +/** The table of content string length didn't match the size specified in the + * header. */ +#define VERR_XAR_TOC_STRLEN_MISMATCH (-22708) +/** The table of content isn't valid UTF-8. */ +#define VERR_XAR_TOC_UTF8_ENCODING (-22709) +/** XML error while parsing the table of content. */ +#define VERR_XAR_TOC_XML_PARSE_ERROR (-22710) +/** The table of content XML document does not have a toc element. */ +#define VERR_XML_TOC_ELEMENT_MISSING (-22711) +/** The table of content XML element (toc) has siblings, we expected it to be + * an only child or the root element (xar). */ +#define VERR_XML_TOC_ELEMENT_HAS_SIBLINGS (-22712) +/** The XAR table of content digest doesn't match. */ +#define VERR_XAR_TOC_DIGEST_MISMATCH (-22713) +/** Bad or missing XAR checksum element. */ +#define VERR_XAR_BAD_CHECKSUM_ELEMENT (-22714) +/** The hash function in the header doesn't match the one in the table of + * content. */ +#define VERR_XAR_HASH_FUNCTION_MISMATCH (-22715) +/** Bad digest length encountered in the table of content. */ +#define VERR_XAR_BAD_DIGEST_LENGTH (-22716) +/** The order of elements in the XAR file does not lend it self to expansion + * from via an I/O stream. */ +#define VERR_XAR_NOT_STREAMBLE_ELEMENT_ORDER (-22717) +/** Missing offset element in table of content sub-element. */ +#define VERR_XAR_MISSING_OFFSET_ELEMENT (-22718) +/** Bad offset element in table of content sub-element. */ +#define VERR_XAR_BAD_OFFSET_ELEMENT (-22719) +/** Missing size element in table of content sub-element. */ +#define VERR_XAR_MISSING_SIZE_ELEMENT (-22720) +/** Bad size element in table of content sub-element. */ +#define VERR_XAR_BAD_SIZE_ELEMENT (-22721) +/** Missing length element in table of content sub-element. */ +#define VERR_XAR_MISSING_LENGTH_ELEMENT (-22722) +/** Bad length element in table of content sub-element. */ +#define VERR_XAR_BAD_LENGTH_ELEMENT (-22723) +/** Bad file element in XAR table of content. */ +#define VERR_XAR_BAD_FILE_ELEMENT (-22724) +/** Missing data element for XAR file. */ +#define VERR_XAR_MISSING_DATA_ELEMENT (-22725) +/** Unknown XAR file type value. */ +#define VERR_XAR_UNKNOWN_FILE_TYPE (-22726) +/** Missing encoding element for XAR data stream. */ +#define VERR_XAR_NO_ENCODING (-22727) +/** Bad timestamp for XAR file. */ +#define VERR_XAR_BAD_FILE_TIMESTAMP (-22728) +/** Bad file mode for XAR file. */ +#define VERR_XAR_BAD_FILE_MODE (-22729) +/** Bad file user id for XAR file. */ +#define VERR_XAR_BAD_FILE_UID (-22730) +/** Bad file group id for XAR file. */ +#define VERR_XAR_BAD_FILE_GID (-22731) +/** Bad file inode device number for XAR file. */ +#define VERR_XAR_BAD_FILE_DEVICE_NO (-22732) +/** Bad file inode number for XAR file. */ +#define VERR_XAR_BAD_FILE_INODE (-22733) +/** Invalid name for XAR file. */ +#define VERR_XAR_INVALID_FILE_NAME (-22734) +/** The message digest of the extracted data does not match the one supplied. */ +#define VERR_XAR_EXTRACTED_HASH_MISMATCH (-22735) +/** The extracted data has exceeded the expected size. */ +#define VERR_XAR_EXTRACTED_SIZE_EXCEEDED (-22736) +/** The message digest of the archived data does not match the one supplied. */ +#define VERR_XAR_ARCHIVED_HASH_MISMATCH (-22737) +/** The decompressor completed without using all the input data. */ +#define VERR_XAR_UNUSED_ARCHIVED_DATA (-22738) +/** Expected the archived and extracted XAR data sizes to be the same for + * uncompressed data. */ +#define VERR_XAR_ARCHIVED_AND_EXTRACTED_SIZES_MISMATCH (-22739) +/** @} */ + +/** @name RTX509 status codes + * @{ */ +/** Error reading a certificate in PEM format from BIO. */ +#define VERR_X509_READING_CERT_FROM_BIO (-23100) +/** Error extracting a public key from the certificate. */ +#define VERR_X509_EXTRACT_PUBKEY_FROM_CERT (-23101) +/** Error extracting RSA from the public key. */ +#define VERR_X509_EXTRACT_RSA_FROM_PUBLIC_KEY (-23102) +/** Signature verification failed. */ +#define VERR_X509_RSA_VERIFICATION_FUILURE (-23103) +/** Basic constraints were not found. */ +#define VERR_X509_NO_BASIC_CONSTARAINTS (-23104) +/** Error getting extensions from the certificate. */ +#define VERR_X509_GETTING_EXTENSION_FROM_CERT (-23105) +/** Error getting a data from the extension. */ +#define VERR_X509_GETTING_DATA_FROM_EXTENSION (-23106) +/** Error formatting an extension. */ +#define VERR_X509_PRINT_EXTENSION_TO_BIO (-23107) +/** X509 certificate verification error. */ +#define VERR_X509_CERTIFICATE_VERIFICATION_FAILURE (-23108) +/** X509 certificate isn't self signed. */ +#define VERR_X509_NOT_SELFSIGNED_CERTIFICATE (-23109) +/** Warning X509 certificate isn't self signed. */ +#define VINF_X509_NOT_SELFSIGNED_CERTIFICATE 23109 +/** @} */ + +/** @name RTAsn1 status codes + * @{ */ +/** Temporary place holder. */ +#define VERR_ASN1_ERROR (-22800) +/** Encountered an ASN.1 string type that is not supported. */ +#define VERR_ASN1_STRING_TYPE_NOT_IMPLEMENTED (-22801) +/** Invalid ASN.1 UTF-8 STRING encoding. */ +#define VERR_ASN1_INVALID_UTF8_STRING_ENCODING (-22802) +/** Invalid ASN.1 NUMERIC STRING encoding. */ +#define VERR_ASN1_INVALID_NUMERIC_STRING_ENCODING (-22803) +/** Invalid ASN.1 PRINTABLE STRING encoding. */ +#define VERR_ASN1_INVALID_PRINTABLE_STRING_ENCODING (-22804) +/** Invalid ASN.1 T61/TELETEX STRING encoding. */ +#define VERR_ASN1_INVALID_T61_STRING_ENCODING (-22805) +/** Invalid ASN.1 VIDEOTEX STRING encoding. */ +#define VERR_ASN1_INVALID_VIDEOTEX_STRING_ENCODING (-22806) +/** Invalid ASN.1 IA5 STRING encoding. */ +#define VERR_ASN1_INVALID_IA5_STRING_ENCODING (-22807) +/** Invalid ASN.1 GRAPHIC STRING encoding. */ +#define VERR_ASN1_INVALID_GRAPHIC_STRING_ENCODING (-22808) +/** Invalid ASN.1 ISO-646/VISIBLE STRING encoding. */ +#define VERR_ASN1_INVALID_VISIBLE_STRING_ENCODING (-22809) +/** Invalid ASN.1 GENERAL STRING encoding. */ +#define VERR_ASN1_INVALID_GENERAL_STRING_ENCODING (-22810) +/** Invalid ASN.1 UNIVERSAL STRING encoding. */ +#define VERR_ASN1_INVALID_UNIVERSAL_STRING_ENCODING (-22811) +/** Invalid ASN.1 BMP STRING encoding. */ +#define VERR_ASN1_INVALID_BMP_STRING_ENCODING (-22812) +/** Invalid ASN.1 OBJECT IDENTIFIER encoding. */ +#define VERR_ASN1_INVALID_OBJID_ENCODING (-22813) +/** A component value of an ASN.1 OBJECT IDENTIFIER is too big for our + * internal representation (32-bits). */ +#define VERR_ASN1_OBJID_COMPONENT_TOO_BIG (-22814) +/** Too many components in an ASN.1 OBJECT IDENTIFIER for our internal + * representation. */ +#define VERR_ASN1_OBJID_TOO_MANY_COMPONENTS (-22815) +/** The dotted-string representation of an ASN.1 OBJECT IDENTIFIER would be too + * long for our internal representation. */ +#define VERR_ASN1_OBJID_TOO_LONG_STRING_FORM (-22816) +/** Invalid dotted string. */ +#define VERR_ASN1_OBJID_INVALID_DOTTED_STRING (-22817) +/** Constructed string type not implemented. */ +#define VERR_ASN1_CONSTRUCTED_STRING_NOT_IMPL (-22818) +/** Expected a different string tag. */ +#define VERR_ASN1_STRING_TAG_MISMATCH (-22819) +/** Expected a different time tag. */ +#define VERR_ASN1_TIME_TAG_MISMATCH (-22820) +/** More unconsumed data available. */ +#define VINF_ASN1_MORE_DATA (22821) +/** RTAsnEncodeWriteHeader return code indicating that nothing was written + * and the content should be skipped as well. */ +#define VINF_ASN1_NOT_ENCODED (22822) +/** Unknown escape sequence encountered in TeletexString. */ +#define VERR_ASN1_TELETEX_UNKNOWN_ESC_SEQ (-22823) +/** Unsupported escape sequence encountered in TeletexString. */ +#define VERR_ASN1_TELETEX_UNSUPPORTED_ESC_SEQ (-22824) +/** Unsupported character set. */ +#define VERR_ASN1_TELETEX_UNSUPPORTED_CHARSET (-22825) +/** ASN.1 object has no virtual method table. */ +#define VERR_ASN1_NO_VTABLE (-22826) +/** ASN.1 object has no pfnCheckSanity method. */ +#define VERR_ASN1_NO_CHECK_SANITY_METHOD (-22827) +/** ASN.1 object is not present */ +#define VERR_ASN1_NOT_PRESENT (-22828) +/** There are unconsumed bytes after decoding an ASN.1 object. */ +#define VERR_ASN1_CURSOR_NOT_AT_END (-22829) +/** Long ASN.1 tag form is not implemented. */ +#define VERR_ASN1_CURSOR_LONG_TAG (-22830) +/** Bad ASN.1 object length encoding. */ +#define VERR_ASN1_CURSOR_BAD_LENGTH_ENCODING (-22831) +/** Indefinite length form is against the rules. */ +#define VERR_ASN1_CURSOR_ILLEGAL_IDEFINITE_LENGTH (-22832) +/** Indefinite length form is not implemented. */ +#define VERR_ASN1_CURSOR_IDEFINITE_LENGTH_NOT_SUP (-22833) +/** ASN.1 object length goes beyond the end of the byte stream being decoded. */ +#define VERR_ASN1_CURSOR_BAD_LENGTH (-22834) +/** Not more data in ASN.1 byte stream. */ +#define VERR_ASN1_CURSOR_NO_MORE_DATA (-22835) +/** Too little data in ASN.1 byte stream. */ +#define VERR_ASN1_CURSOR_TOO_LITTLE_DATA_LEFT (-22836) +/** Constructed string is not according to the encoding rules. */ +#define VERR_ASN1_CURSOR_ILLEGAL_CONSTRUCTED_STRING (-22837) +/** Unexpected ASN.1 tag encountered while decoding. */ +#define VERR_ASN1_CURSOR_TAG_MISMATCH (-22838) +/** Unexpected ASN.1 tag class/flag encountered while decoding. */ +#define VERR_ASN1_CURSOR_TAG_FLAG_CLASS_MISMATCH (-22839) +/** ASN.1 bit string object is out of bounds. */ +#define VERR_ASN1_BITSTRING_OUT_OF_BOUNDS (-22840) +/** Bad ASN.1 time object. */ +#define VERR_ASN1_TIME_BAD_NORMALIZE_INPUT (-22841) +/** Failed to normalize ASN.1 time object. */ +#define VERR_ASN1_TIME_NORMALIZE_ERROR (-22842) +/** Normalization of ASN.1 time object didn't work out. */ +#define VERR_ASN1_TIME_NORMALIZE_MISMATCH (-22843) +/** Invalid ASN.1 UTC TIME encoding. */ +#define VERR_ASN1_INVALID_UTC_TIME_ENCODING (-22844) +/** Invalid ASN.1 GENERALIZED TIME encoding. */ +#define VERR_ASN1_INVALID_GENERALIZED_TIME_ENCODING (-22845) +/** Invalid ASN.1 BOOLEAN encoding. */ +#define VERR_ASN1_INVALID_BOOLEAN_ENCODING (-22846) +/** Invalid ASN.1 NULL encoding. */ +#define VERR_ASN1_INVALID_NULL_ENCODING (-22847) +/** Invalid ASN.1 BIT STRING encoding. */ +#define VERR_ASN1_INVALID_BITSTRING_ENCODING (-22848) +/** Unimplemented ASN.1 tag reached the RTAsn1DynType code. */ +#define VERR_ASN1_DYNTYPE_TAG_NOT_IMPL (-22849) +/** ASN.1 tag and flags/class mismatch in RTAsn1DynType code. */ +#define VERR_ASN1_DYNTYPE_BAD_TAG (-22850) +/** Unexpected ASN.1 fake/dummy object. */ +#define VERR_ASN1_DUMMY_OBJECT (-22851) +/** ASN.1 object is too long. */ +#define VERR_ASN1_TOO_LONG (-22852) +/** Expected primitive ASN.1 object. */ +#define VERR_ASN1_EXPECTED_PRIMITIVE (-22853) +/** Expected valid data pointer for ASN.1 object. */ +#define VERR_ASN1_INVALID_DATA_POINTER (-22854) +/** The ASN.1 encoding is too deeply nested for the decoder. */ +#define VERR_ASN1_TOO_DEEPLY_NESTED (-22855) +/** Generic unexpected object ID error. */ +#define VERR_ASN1_UNEXPECTED_OBJ_ID (-22856) + +/** ANS.1 internal error 1. */ +#define VERR_ASN1_INTERNAL_ERROR_1 (-22895) +/** ANS.1 internal error 2. */ +#define VERR_ASN1_INTERNAL_ERROR_2 (-22896) +/** ANS.1 internal error 3. */ +#define VERR_ASN1_INTERNAL_ERROR_3 (-22897) +/** ANS.1 internal error 4. */ +#define VERR_ASN1_INTERNAL_ERROR_4 (-22898) +/** ANS.1 internal error 5. */ +#define VERR_ASN1_INTERNAL_ERROR_5 (-22899) +/** @} */ + +/** @name More RTLdr status codes. + * @{ */ +/** Image Verification Failure: No Authenticode Signature. */ +#define VERR_LDRVI_NOT_SIGNED (-22900) +/** Image Verification Warning: No Authenticode Signature, but on whitelist. */ +#define VINF_LDRVI_NOT_SIGNED (22900) +/** Image Verification Failure: Error reading image headers. */ +#define VERR_LDRVI_READ_ERROR_HDR (-22901) +/** Image Verification Failure: Error reading section headers. */ +#define VERR_LDRVI_READ_ERROR_SHDRS (-22902) +/** Image Verification Failure: Error reading authenticode signature data. */ +#define VERR_LDRVI_READ_ERROR_SIGNATURE (-22903) +/** Image Verification Failure: Error reading file for hashing. */ +#define VERR_LDRVI_READ_ERROR_HASH (-22904) +/** Image Verification Failure: Error determining the file length. */ +#define VERR_LDRVI_FILE_LENGTH_ERROR (-22905) +/** Image Verification Failure: Error allocating memory for state data. */ +#define VERR_LDRVI_NO_MEMORY_STATE (-22906) +/** Image Verification Failure: Error allocating memory for authenticode + * signature data. */ +#define VERR_LDRVI_NO_MEMORY_SIGNATURE (-22907) +/** Image Verification Failure: Error allocating memory for section headers. */ +#define VERR_LDRVI_NO_MEMORY_SHDRS (-22908) +/** Image Verification Failure: Authenticode parsing output. */ +#define VERR_LDRVI_NO_MEMORY_PARSE_OUTPUT (-22909) +/** Image Verification Failure: Invalid security directory entry. */ +#define VERR_LDRVI_INVALID_SECURITY_DIR_ENTRY (-22910) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_LENGTH (-22911) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_REVISION (-22912) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_TYPE (-22913) +/** Image Verification Failure: More than one certificate table entry. */ +#define VERR_LDRVI_BAD_CERT_MULTIPLE (-22914) + +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_MZ_OFFSET (-22915) +/** Image Verification Failure: Invalid section count. */ +#define VERR_LDRVI_INVALID_SECTION_COUNT (-22916) +/** Image Verification Failure: Raw data offsets and sizes are out of range. */ +#define VERR_LDRVI_SECTION_RAW_DATA_VALUES (-22917) +/** Optional header magic and target machine does not match. */ +#define VERR_LDRVI_MACHINE_OPT_HDR_MAGIC_MISMATCH (-22918) +/** Unsupported image target architecture. */ +#define VERR_LDRVI_UNSUPPORTED_ARCH (-22919) + +/** Image Verification Failure: Internal error in signature parser. */ +#define VERR_LDRVI_PARSE_IPE (-22921) +/** Generic BER parse error. Will be refined later. */ +#define VERR_LDRVI_PARSE_BER_ERROR (-22922) + +/** Expected the signed data content to be the object ID of + * SpcIndirectDataContent, found something else instead. */ +#define VERR_LDRVI_EXPECTED_INDIRECT_DATA_CONTENT_OID (-22923) +/** Page hash table size overflow. */ +#define VERR_LDRVI_PAGE_HASH_TAB_SIZE_OVERFLOW (-22924) +/** Page hash table is too long (covers signature data, i.e. itself). */ +#define VERR_LDRVI_PAGE_HASH_TAB_TOO_LONG (-22925) +/** The page hash table is not strictly ordered by offset. */ +#define VERR_LDRVI_PAGE_HASH_TAB_NOT_STRICTLY_SORTED (-22926) +/** The page hash table hashes data outside the defined and implicit sections. */ +#define VERR_PAGE_HASH_TAB_HASHES_NON_SECTION_DATA (-22927) +/** Page hash mismatch. */ +#define VERR_LDRVI_PAGE_HASH_MISMATCH (-22928) +/** Image hash mismatch. */ +#define VERR_LDRVI_IMAGE_HASH_MISMATCH (-22929) + +/** Cannot resolve symbol because it's a forwarder. */ +#define VERR_LDR_FORWARDER (-22950) +/** The symbol is not a forwarder. */ +#define VERR_LDR_NOT_FORWARDER (-22951) +/** Malformed forwarder entry. */ +#define VERR_LDR_BAD_FORWARDER (-22952) +/** Too long forwarder chain or there is a loop. */ +#define VERR_LDR_FORWARDER_CHAIN_TOO_LONG (-22953) +/** Support for forwarders has not been implemented. */ +#define VERR_LDR_FORWARDERS_NOT_SUPPORTED (-22954) +/** @} */ + +/** @name RTCrX509 status codes. + * @{ */ +/** Generic X.509 error. */ +#define VERR_CR_X509_GENERIC_ERROR (-23000) +/** Internal error in the X.509 code. */ +#define VERR_CR_X509_INTERNAL_ERROR (-23001) +/** Internal error in the X.509 certificate path building and verification + * code. */ +#define VERR_CR_X509_CERTPATHS_INTERNAL_ERROR (-23002) +/** Path not verified yet. */ +#define VERR_CR_X509_NOT_VERIFIED (-23003) +/** The certificate path has no trust anchor. */ +#define VERR_CR_X509_NO_TRUST_ANCHOR (-23004) +/** Unknown X.509 certificate signature algorithm. */ +#define VERR_CR_X509_UNKNOWN_CERT_SIGN_ALGO (-23005) +/** Certificate signature algorithm mismatch. */ +#define VERR_CR_X509_CERT_SIGN_ALGO_MISMATCH (-23006) +/** The signature algorithm in the to-be-signed certificate part does not match + * the one associated with the signature. */ +#define VERR_CR_X509_CERT_TBS_SIGN_ALGO_MISMATCH (-23007) +/** Certificate extensions requires certificate version 3 or later. */ +#define VERR_CR_X509_TBSCERT_EXTS_REQ_V3 (-23008) +/** Unique issuer and subject IDs require version certificate 2. */ +#define VERR_CR_X509_TBSCERT_UNIQUE_IDS_REQ_V2 (-23009) +/** Certificate serial number length is out of bounds. */ +#define VERR_CR_X509_TBSCERT_SERIAL_NUMBER_OUT_OF_BOUNDS (-23010) +/** Unsupported X.509 certificate version. */ +#define VERR_CR_X509_TBSCERT_UNSUPPORTED_VERSION (-23011) +/** Public key is too small. */ +#define VERR_CR_X509_PUBLIC_KEY_TOO_SMALL (-23012) +/** Invalid string tag for a X.509 name object. */ +#define VERR_CR_X509_INVALID_NAME_STRING_TAG (-23013) +/** Empty string in X.509 name object. */ +#define VERR_CR_X509_NAME_EMPTY_STRING (-23014) +/** Non-string object inside X.509 name object. */ +#define VERR_CR_X509_NAME_NOT_STRING (-23015) +/** Empty set inside X.509 name. */ +#define VERR_CR_X509_NAME_EMPTY_SET (-23016) +/** Empty sub-string set inside X.509 name. */ +#define VERR_CR_X509_NAME_EMPTY_SUB_SET (-23017) +/** The NotBefore and NotAfter values of an X.509 Validity object seems to + * have been swapped around. */ +#define VERR_CR_X509_VALIDITY_SWAPPED (-23018) +/** Duplicate certificate extension. */ +#define VERR_CR_X509_TBSCERT_DUPLICATE_EXTENSION (-23019) +/** Missing relative distinguished name map entry. */ +#define VERR_CR_X509_NAME_MISSING_RDN_MAP_ENTRY (-23020) +/** Certificate path validator: No trusted certificate paths. */ +#define VERR_CR_X509_CPV_NO_TRUSTED_PATHS (-23021) +/** Certificate path validator: No valid certificate policy. */ +#define VERR_CR_X509_CPV_NO_VALID_POLICY (-23022) +/** Certificate path validator: Unknown critical certificate extension. */ +#define VERR_CR_X509_CPV_UNKNOWN_CRITICAL_EXTENSION (-23023) +/** Certificate path validator: Intermediate certificate is missing the + * KeyCertSign usage flag. */ +#define VERR_CR_X509_CPV_MISSING_KEY_CERT_SIGN (-23024) +/** Certificate path validator: Hit the max certificate path length before + * reaching trust anchor. */ +#define VERR_CR_X509_CPV_MAX_PATH_LENGTH (-23025) +/** Certificate path validator: Intermediate certificate is not marked as a + * certificate authority (CA). */ +#define VERR_CR_X509_CPV_NOT_CA_CERT (-23026) +/** Certificate path validator: Intermediate certificate is not a version 3 + * certificate. */ +#define VERR_CR_X509_CPV_NOT_V3_CERT (-23027) +/** Certificate path validator: Invalid policy mapping (to/from anyPolicy). */ +#define VERR_CR_X509_CPV_INVALID_POLICY_MAPPING (-23028) +/** Certificate path validator: Name constraints permits no names. */ +#define VERR_CR_X509_CPV_NO_PERMITTED_NAMES (-23029) +/** Certificate path validator: Name constraints does not permits the + * certificate name. */ +#define VERR_CR_X509_CPV_NAME_NOT_PERMITTED (-23030) +/** Certificate path validator: Name constraints does not permits the + * alternative certificate name. */ +#define VERR_CR_X509_CPV_ALT_NAME_NOT_PERMITTED (-23031) +/** Certificate path validator: Intermediate certificate subject does not + * match child issuer property. */ +#define VERR_CR_X509_CPV_ISSUER_MISMATCH (-23032) +/** Certificate path validator: The certificate is not valid at the + * specified time. */ +#define VERR_CR_X509_CPV_NOT_VALID_AT_TIME (-23033) +/** Certificate path validator: Unexpected choice found in general subtree + * object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_CHOICE (-23034) +/** Certificate path validator: Unexpected minimum value found in general + * subtree object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_MIN (-23035) +/** Certificate path validator: Unexpected maximum value found in + * general subtree object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_MAX (-23036) +/** Certificate path builder: Encountered bad certificate context. */ +#define VERR_CR_X509_CPB_BAD_CERT_CTX (-23037) +/** OpenSSL d2i_X509 failed. */ +#define VERR_CR_X509_OSSL_D2I_FAILED (-23090) +/** @} */ + +/** @name RTCrPkcs7 status codes. + * @{ */ +/** Generic PKCS \#7 error. */ +#define VERR_CR_PKCS7_GENERIC_ERROR (-23300) +/** Signed data verification failed because there are zero signer infos. */ +#define VERR_CR_PKCS7_NO_SIGNER_INFOS (-23301) +/** Signed data certificate not found. */ +#define VERR_CR_PKCS7_SIGNED_DATA_CERT_NOT_FOUND (-23302) +/** Signed data verification failed due to key usage issues. */ +#define VERR_CR_PKCS7_KEY_USAGE_MISMATCH (-23303) +/** Signed data verification failed because of missing (or duplicate) + * authenticated content-type attribute. */ +#define VERR_CR_PKCS7_MISSING_CONTENT_TYPE_ATTRIB (-23304) +/** Signed data verification failed because of the authenticated content-type + * attribute did not match. */ +#define VERR_CR_PKCS7_CONTENT_TYPE_ATTRIB_MISMATCH (-23305) +/** Signed data verification failed because of a malformed authenticated + * content-type attribute. */ +#define VERR_CR_PKCS7_BAD_CONTENT_TYPE_ATTRIB (-23306) +/** Signed data verification failed because of missing (or duplicate) + * authenticated message-digest attribute. */ +#define VERR_CR_PKCS7_MISSING_MESSAGE_DIGEST_ATTRIB (-23307) +/** Signed data verification failed because the authenticated message-digest + * attribute did not match. */ +#define VERR_CR_PKCS7_MESSAGE_DIGEST_ATTRIB_MISMATCH (-23308) +/** Signed data verification failed because of a malformed authenticated + * message-digest attribute. */ +#define VERR_CR_PKCS7_BAD_MESSAGE_DIGEST_ATTRIB (-23309) +/** Signature verification failed. */ +#define VERR_CR_PKCS7_SIGNATURE_VERIFICATION_FAILED (-23310) +/** Internal PKCS \#7 error. */ +#define VERR_CR_PKCS7_INTERNAL_ERROR (-22311) +/** OpenSSL d2i_PKCS7 failed. */ +#define VERR_CR_PKCS7_OSSL_D2I_FAILED (-22312) +/** OpenSSL PKCS \#7 verification failed. */ +#define VERR_CR_PKCS7_OSSL_VERIFY_FAILED (-22313) +/** Digest algorithm parameters are not supported by the PKCS \#7 code. */ +#define VERR_CR_PKCS7_DIGEST_PARAMS_NOT_IMPL (-22314) +/** The digest algorithm of a signer info entry was not found in the list of + * digest algorithms in the signed data. */ +#define VERR_CR_PKCS7_DIGEST_ALGO_NOT_FOUND_IN_LIST (-22315) +/** The PKCS \#7 content is not signed data. */ +#define VERR_CR_PKCS7_NOT_SIGNED_DATA (-22316) +/** No digest algorithms listed in PKCS \#7 signed data. */ +#define VERR_CR_PKCS7_NO_DIGEST_ALGORITHMS (-22317) +/** Too many digest algorithms used by PKCS \#7 signed data. This is an + * internal limitation of the code that aims at saving kernel stack space. */ +#define VERR_CR_PKCS7_TOO_MANY_DIGEST_ALGORITHMS (-22318) +/** Error creating digest algorithm calculator. */ +#define VERR_CR_PKCS7_DIGEST_CREATE_ERROR (-22319) +/** Error while calculating a digest for a PKCS \#7 verification operation. */ +#define VERR_CR_PKCS7_DIGEST_CALC_ERROR (-22320) +/** Unsupported PKCS \#7 signed data version. */ +#define VERR_CR_PKCS7_SIGNED_DATA_VERSION (-22350) +/** PKCS \#7 signed data has no digest algorithms listed. */ +#define VERR_CR_PKCS7_SIGNED_DATA_NO_DIGEST_ALGOS (-22351) +/** Unknown digest algorithm used by PKCS \#7 object. */ +#define VERR_CR_PKCS7_UNKNOWN_DIGEST_ALGORITHM (-22352) +/** Expected PKCS \#7 object to ship at least one certificate. */ +#define VERR_CR_PKCS7_NO_CERTIFICATES (-22353) +/** Expected PKCS \#7 object to not contain any CRLs. */ +#define VERR_CR_PKCS7_EXPECTED_NO_CRLS (-22354) +/** Expected PKCS \#7 object to contain exactly on signer info entry. */ +#define VERR_CR_PKCS7_EXPECTED_ONE_SIGNER_INFO (-22355) +/** Unsupported PKCS \#7 signer info version. */ +#define VERR_CR_PKCS7_SIGNER_INFO_VERSION (-22356) +/** PKCS \#7 singer info contains no issuer serial number. */ +#define VERR_CR_PKCS7_SIGNER_INFO_NO_ISSUER_SERIAL_NO (-22357) +/** Expected PKCS \#7 object to ship the signer certificate(s). */ +#define VERR_CR_PKCS7_SIGNER_CERT_NOT_SHIPPED (-22358) +/** The encrypted digest algorithm does not match the one in the certificate. */ +#define VERR_CR_PKCS7_SIGNER_INFO_DIGEST_ENCRYPT_MISMATCH (-22359) +/** @} */ + +/** @name RTCrSpc status codes. + * @{ */ +/** Generic SPC error. */ +#define VERR_CR_SPC_GENERIC_ERROR (-23400) +/** SPC requires there to be exactly one SignerInfo entry. */ +#define VERR_CR_SPC_NOT_EXACTLY_ONE_SIGNER_INFOS (-23401) +/** There shall be exactly one digest algorithm to go with the single + * SingerInfo entry required by SPC. */ +#define VERR_CR_SPC_NOT_EXACTLY_ONE_DIGEST_ALGO (-23402) +/** The digest algorithm in the SignerInfo does not match the one in the + * indirect data. */ +#define VERR_CR_SPC_SIGNED_IND_DATA_DIGEST_ALGO_MISMATCH (-23403) +/** The digest algorithm in the indirect data was not found in the list of + * digest algorithms in the signed data structure. */ +#define VERR_CR_SPC_IND_DATA_DIGEST_ALGO_NOT_IN_DIGEST_ALGOS (-23404) +/** The digest algorithm is not known to us. */ +#define VERR_CR_SPC_UNKNOWN_DIGEST_ALGO (-23405) +/** The indirect data digest size does not match the digest algorithm. */ +#define VERR_CR_SPC_IND_DATA_DIGEST_SIZE_MISMATCH (-23406) +/** Expected PE image data inside indirect data object. */ +#define VERR_CR_SPC_EXPECTED_PE_IMAGE_DATA (-23407) +/** Internal SPC error: The PE image data is missing. */ +#define VERR_CR_SPC_PEIMAGE_DATA_NOT_PRESENT (-23408) +/** Bad SPC object moniker UUID field. */ +#define VERR_CR_SPC_BAD_MONIKER_UUID (-23409) +/** Unknown SPC object moniker UUID. */ +#define VERR_CR_SPC_UNKNOWN_MONIKER_UUID (-23410) +/** Internal SPC error: Bad object moniker choice value. */ +#define VERR_CR_SPC_BAD_MONIKER_CHOICE (-23411) +/** Internal SPC error: Bad object moniker data pointer. */ +#define VERR_CR_SPC_MONIKER_BAD_DATA (-23412) +/** Multiple PE image page hash tables. */ +#define VERR_CR_SPC_PEIMAGE_MULTIPLE_HASH_TABS (-23413) +/** Unknown SPC PE image attribute. */ +#define VERR_CR_SPC_PEIMAGE_UNKNOWN_ATTRIBUTE (-23414) +/** URL not expected in SPC PE image data. */ +#define VERR_CR_SPC_PEIMAGE_URL_UNEXPECTED (-23415) +/** PE image data without any valid content was not expected. */ +#define VERR_CR_SPC_PEIMAGE_NO_CONTENT (-23416) +/** @} */ + +/** @name RTCrPkix status codes. + * @{ */ +/** Generic PKCS \#7 error. */ +#define VERR_CR_PKIX_GENERIC_ERROR (-23500) +/** Parameters was presented to a signature schema that does not take any. */ +#define VERR_CR_PKIX_SIGNATURE_TAKES_NO_PARAMETERS (-23501) +/** Unknown hash digest type. */ +#define VERR_CR_PKIX_UNKNOWN_DIGEST_TYPE (-23502) +/** Internal error. */ +#define VERR_CR_PKIX_INTERNAL_ERROR (-23503) +/** The hash is too long for the key used when signing/verifying. */ +#define VERR_CR_PKIX_HASH_TOO_LONG_FOR_KEY (-23504) +/** The signature is too long for the scratch buffer. */ +#define VERR_CR_PKIX_SIGNATURE_TOO_LONG (-23505) +/** The signature is greater than or equal to the key. */ +#define VERR_CR_PKIX_SIGNATURE_GE_KEY (-23506) +/** The signature is negative. */ +#define VERR_CR_PKIX_SIGNATURE_NEGATIVE (-23507) +/** Invalid signature length. */ +#define VERR_CR_PKIX_INVALID_SIGNATURE_LENGTH (-23508) +/** PKIX signature no does not match up to the current data. */ +#define VERR_CR_PKIX_SIGNATURE_MISMATCH (-23509) +/** PKIX cipher algorithm parameters are not implemented. */ +#define VERR_CR_PKIX_CIPHER_ALGO_PARAMS_NOT_IMPL (-23510) +/** Cipher algorithm is not known to us. */ +#define VERR_CR_PKIX_CIPHER_ALGO_NOT_KNOWN (-23511) +/** PKIX cipher algorithm is not known to OpenSSL. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALGO_NOT_KNOWN (-23512) +/** PKIX cipher algorithm is not known to OpenSSL EVP API. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALGO_NOT_KNOWN_EVP (-23513) +/** OpenSSL failed to init PKIX cipher algorithm context. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALOG_INIT_FAILED (-23514) +/** Final OpenSSL PKIX verification failed. */ +#define VERR_CR_PKIX_OSSL_VERIFY_FINAL_FAILED (-23515) +/** OpenSSL failed to decode the public key. */ +#define VERR_CR_PKIX_OSSL_D2I_PUBLIC_KEY_FAILED (-23516) +/** The EVP_PKEY_type API in OpenSSL failed. */ +#define VERR_CR_PKIX_OSSL_EVP_PKEY_TYPE_ERROR (-23517) +/** @} */ + +/** @name RTCrStore status codes. + * @{ */ +/** Generic store error. */ +#define VERR_CR_STORE_GENERIC_ERROR (-23700) +/** @} */ + +/** @name RTCrRsa status codes. + * @{ */ +/** Generic RSA error. */ +#define VERR_CR_RSA_GENERIC_ERROR (-23900) +/** @} */ + +/** @name RTBigNum status codes. + * @{ */ +/** Sensitive input requires the result(s) to be initialized as sensitive. */ +#define VERR_BIGNUM_SENSITIVE_INPUT (-24000) +/** Attempt to divide by zero. */ +#define VERR_BIGNUM_DIV_BY_ZERO (-24001) +/** Negative exponent makes no sense to integer math. */ +#define VERR_BIGNUM_NEGATIVE_EXPONENT (-24002) + +/** @} */ + +/** @name RTCrDigest status codes. + * @{ */ +/** OpenSSL failed to initialize the digest algorithm context. */ +#define VERR_CR_DIGEST_OSSL_DIGEST_INIT_ERROR (-24200) +/** OpenSSL failed to clone the digest algorithm context. */ +#define VERR_CR_DIGEST_OSSL_DIGEST_CTX_COPY_ERROR (-24201) +/** @} */ + +/** @name RTPath status codes. + * @{ */ +/** Unknown glob variable. */ +#define VERR_PATH_MATCH_UNKNOWN_VARIABLE (-24400) +/** The specified glob variable must be first in the pattern. */ +#define VERR_PATH_MATCH_VARIABLE_MUST_BE_FIRST (-24401) +/** Hit unimplemented glob pattern matching feature. */ +#define VERR_PATH_MATCH_FEATURE_NOT_IMPLEMENTED (-24402) +/** Unknown character class in glob pattern. */ +#define VERR_PATH_GLOB_UNKNOWN_CHAR_CLASS (-24403) +/** @} */ + +/** @name RTUri status codes. + * @{ */ +/** The URI is empty */ +#define VERR_URI_EMPTY (-24600) +/** The URI is too short to be a valid URI. */ +#define VERR_URI_TOO_SHORT (-24601) +/** Invalid scheme. */ +#define VERR_URI_INVALID_SCHEME (-24602) +/** Invalid port number. */ +#define VERR_URI_INVALID_PORT_NUMBER (-24603) +/** Invalid escape sequence. */ +#define VERR_URI_INVALID_ESCAPE_SEQ (-24604) +/** Escape URI char decodes as zero (the C string terminator). */ +#define VERR_URI_ESCAPED_ZERO (-24605) +/** Escaped URI characters does not decode to valid UTF-8. */ +#define VERR_URI_ESCAPED_CHARS_NOT_VALID_UTF8 (-24606) +/** Escaped URI character is not a valid UTF-8 lead byte. */ +#define VERR_URI_INVALID_ESCAPED_UTF8_LEAD_BYTE (-24607) +/** Escaped URI character sequence with invalid UTF-8 continutation byte. */ +#define VERR_URI_INVALID_ESCAPED_UTF8_CONTINUATION_BYTE (-24608) +/** Missing UTF-8 continutation in escaped URI character sequence. */ +#define VERR_URI_MISSING_UTF8_CONTINUATION_BYTE (-24609) +/** Expected URI using the 'file:' scheme. */ +#define VERR_URI_NOT_FILE_SCHEME (-24610) +/** @} */ + +/** @name RTJson status codes. + * @{ */ +/** The called method does not work with the value type of the given JSON value. */ +#define VERR_JSON_VALUE_INVALID_TYPE (-24700) +/** The iterator reached the end. */ +#define VERR_JSON_ITERATOR_END (-24701) +/** The JSON document is malformed. */ +#define VERR_JSON_MALFORMED (-24702) +/** @} */ + +/** @name RTVfs status codes. + * @{ */ +/** Unknown file system format. */ +#define VERR_VFS_UNKNOWN_FORMAT (-24800) +/** Found bogus values in the file system. */ +#define VERR_VFS_BOGUS_FORMAT (-24801) +/** Found bogus offset in the file system. */ +#define VERR_VFS_BOGUS_OFFSET (-24802) +/** Unsupported file system format. */ +#define VERR_VFS_UNSUPPORTED_FORMAT (-24803) +/** @} */ + +/** @name RTFsIsoMaker status codes. + * @{ */ +/** No validation entry in the boot catalog. */ +#define VERR_ISOMK_BOOT_CAT_NO_VALIDATION_ENTRY (-25000) +/** No default entry in the boot catalog. */ +#define VERR_ISOMK_BOOT_CAT_NO_DEFAULT_ENTRY (-25001) +/** Expected section header. */ +#define VERR_ISOMK_BOOT_CAT_EXPECTED_SECTION_HEADER (-25002) +/** Entry in a boot catalog section is empty. */ +#define VERR_ISOMK_BOOT_CAT_EMPTY_ENTRY (-25003) +/** Entry in a boot catalog section is another section. */ +#define VERR_ISOMK_BOOT_CAT_INVALID_SECTION_SIZE (-25004) +/** Unsectioned boot catalog entry. */ +#define VERR_ISOMK_BOOT_CAT_ERRATIC_ENTRY (-25005) +/** The file is too big for the current ISO level (4GB+ sized files + * requires ISO level 3). */ +#define VERR_ISOMK_FILE_TOO_BIG_REQ_ISO_LEVEL_3 (-25006) +/** Cannot add symbolic link to namespace which isn't configured to support it. */ +#define VERR_ISOMK_SYMLINK_REQ_ROCK_RIDGE (-25007) +/** Cannot add symbolic link to one of the selected namespaces. */ +#define VINF_ISOMK_SYMLINK_REQ_ROCK_RIDGE (25007) +/** Cannot add symbolic link because no namespace is configured to support it. */ +#define VERR_ISOMK_SYMLINK_SUPPORT_DISABLED (-25008) +/** No space for rock ridge 'CE' entry in directory record. */ +#define VERR_ISOMK_RR_NO_SPACE_FOR_CE (-25009) +/** Internal ISO maker error: Rock ridge read problem. */ +#define VERR_ISOMK_IPE_RR_READ (-25010) +/** Internal ISO maker error: Buggy namespace table. */ +#define VERR_ISOMK_IPE_TABLE (-25011) +/** Internal ISO maker error: Namespace problem \#1. */ +#define VERR_ISOMK_IPE_NAMESPACE_1 (-25012) +/** Internal ISO maker error: Namespace problem \#2. */ +#define VERR_ISOMK_IPE_NAMESPACE_2 (-25013) +/** Internal ISO maker error: Namespace problem \#3. */ +#define VERR_ISOMK_IPE_NAMESPACE_3 (-25014) +/** Internal ISO maker error: Namespace problem \#4. */ +#define VERR_ISOMK_IPE_NAMESPACE_4 (-25015) +/** Internal ISO maker error: Namespace problem \#5. */ +#define VERR_ISOMK_IPE_NAMESPACE_5 (-25016) +/** Internal ISO maker error: Namespace problem \#6. */ +#define VERR_ISOMK_IPE_NAMESPACE_6 (-25017) +/** Internal ISO maker error: Empty path. */ +#define VERR_ISOMK_IPE_EMPTY_PATH (-25018) +/** Internal ISO maker error: Unexpected empty component. */ +#define VERR_ISOMK_IPE_EMPTY_COMPONENT (-25019) +/** Internal ISO maker error: Expected path to start with root slash. */ +#define VERR_ISOMK_IPE_ROOT_SLASH (-25020) +/** Internal ISO maker error: Descriptor miscounting. */ +#define VERR_ISOMK_IPE_DESC_COUNT (-25021) +/** Internal ISO maker error: Buffer size. */ +#define VERR_ISOMK_IPE_BUFFER_SIZE (-25022) +/** Internal ISO maker error: Boot catalog file handle problem. */ +#define VERR_ISOMK_IPE_BOOT_CAT_FILE (-25023) +/** Internal ISO maker error: Inconsistency produing trans.tbl file. */ +#define VERR_ISOMK_IPE_PRODUCE_TRANS_TBL (-25024) +/** Internal ISO maker error: Read file data probem \#1. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_1 (-25025) +/** Internal ISO maker error: Read file data probem \#2. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_2 (-25026) +/** Internal ISO maker error: Read file data probem \#3. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_3 (-25027) +/** Internal ISO maker error: Finalization problem \#1. */ +#define VERR_ISOMK_IPE_FINALIZE_1 (-25028) +/** The spill file grew larger than 4GB. */ +#define VERR_ISOMK_RR_SPILL_FILE_FULL (-25029) + +/** Requested to import an unknown ISO format. */ +#define VERR_ISOMK_IMPORT_UNKNOWN_FORMAT (-25100) +/** Too many volume descriptors in the import ISO. */ +#define VERR_ISOMK_IMPORT_TOO_MANY_VOL_DESCS (-25101) +/** Import ISO contains a bad volume descriptor header. */ +#define VERR_ISOMK_IMPORT_INVALID_VOL_DESC_HDR (-25102) +/** Import ISO contains more than one primary volume descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_PRIMARY_VOL_DESCS (-25103) +/** Import ISO contains more than one el torito descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_EL_TORITO_DESCS (-25104) +/** Import ISO contains more than one joliet volume descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_JOLIET_VOL_DESCS (-25105) +/** Import ISO starts with supplementary volume descriptor before any + * primary ones. */ +#define VERR_ISOMK_IMPORT_SUPPLEMENTARY_BEFORE_PRIMARY (-25106) +/** Import ISO contains an unsupported primary volume descriptor version. */ +#define VERR_IOSMK_IMPORT_PRIMARY_VOL_DESC_VER (-25107) +/** Import ISO contains a bad primary volume descriptor. */ +#define VERR_ISOMK_IMPORT_BAD_PRIMARY_VOL_DESC (-25108) +/** Import ISO contains an unsupported supplementary volume descriptor + * version. */ +#define VERR_IOSMK_IMPORT_SUP_VOL_DESC_VER (-25109) +/** Import ISO contains a bad supplementary volume descriptor. */ +#define VERR_ISOMK_IMPORT_BAD_SUP_VOL_DESC (-25110) +/** Import ISO uses a logical block size other than 2KB. */ +#define VERR_ISOMK_IMPORT_LOGICAL_BLOCK_SIZE_NOT_2KB (-25111) +/** Import ISO contains more than volume. */ +#define VERR_ISOMK_IMPORT_MORE_THAN_ONE_VOLUME_IN_SET (-25112) +/** Import ISO uses invalid volume sequence number. */ +#define VERR_ISOMK_IMPORT_INVALID_VOLUMNE_SEQ_NO (-25113) +/** Import ISO has different volume space sizes of primary and supplementary + * volume descriptors. */ +#define VERR_ISOMK_IMPORT_VOLUME_SPACE_SIZE_MISMATCH (-25114) +/** Import ISO has different volume set sizes of primary and supplementary + * volume descriptors. */ +#define VERR_ISOMK_IMPORT_VOLUME_IN_SET_MISMATCH (-25115) +/** Import ISO contains a bad root directory record. */ +#define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC (-25116) +/** Import ISO contains a zero sized root directory. */ +#define VERR_ISOMK_IMPORT_ZERO_SIZED_ROOT_DIR (-25117) +/** Import ISO contains a root directory with a mismatching volume sequence + * number. */ +#define VERR_ISOMK_IMPORT_ROOT_VOLUME_SEQ_NO (-25118) +/** Import ISO contains a root directory with an out of bounds data extent. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_EXTENT_OUT_OF_BOUNDS (-25119) +/** Import ISO contains a root directory with a bad record length. */ +#define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC_LENGTH (-25120) +/** Import ISO contains a root directory without the directory flag set. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_WITHOUT_DIR_FLAG (-25121) +/** Import ISO contains a root directory with multiple extents. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_IS_MULTI_EXTENT (-25122) +/** Import ISO contains a too deep directory subtree. */ +#define VERR_ISOMK_IMPORT_TOO_DEEP_DIR_TREE (-25123) +/** Import ISO contains a bad directory record. */ +#define VERR_ISOMK_IMPORT_BAD_DIR_REC (-25124) +/** Import ISO contains a directory record with a mismatching volume sequence + * number. */ +#define VERR_ISOMK_IMPORT_DIR_REC_VOLUME_SEQ_NO (-25125) +/** Import ISO contains a directory with an extent that is out of bounds. */ +#define VERR_ISOMK_IMPORT_DIR_REC_EXTENT_OUT_OF_BOUNDS (-25126) +/** Import ISO contains a directory with a bad record length. */ +#define VERR_ISOMK_IMPORT_BAD_DIR_REC_LENGTH (-25127) +/** Import ISO contains a '.' or '..' directory record with a bad name + * length. */ +#define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME_LENGTH (-25128) +/** Import ISO contains a '.' or '..' directory record with a bad name. */ +#define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME (-25129) +/** Import ISO contains a directory with a more than one extent, that's + * currently not supported. */ +#define VERR_ISOMK_IMPORT_DIR_WITH_MORE_EXTENTS (-25130) +/** Import ISO contains a multi-extent directory record that differs + * significantly from first record. */ +#define VERR_ISOMK_IMPORT_MISMATCHING_MULTI_EXTENT_REC (-25131) +/** Import ISO contains a non-final multi-extent directory record with a + * size that isn't block aligned. */ +#define VERR_ISOMK_IMPORT_MISALIGNED_MULTI_EXTENT (-25132) +/** Import ISO contains a non-contigiuous multi-extent data, this is + * currently not supported. */ +#define VERR_ISOMK_IMPORT_NON_CONTIGUOUS_MULTI_EXTENT (-25133) + +/** The boot catalog block in the import ISO is out of bounds. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_OUT_OF_BOUNDS (-25140) +/** The boot catalog block in the import ISO has an incorrect validation + * header ID. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_HEADER_ID (-25141) +/** The boot catalog validation entry in the import ISO has incorrect keys. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_KEYS (-25142) +/** The boot catalog validation entry in the import ISO has an incorrect checksum. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_CHECKSUM (-25143) +/** A boot catalog entry in the import ISO has an unknown type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_UNKNOWN_HEADER_ID (-25144) +/** A boot catalog entry in the import ISO has an invalid boot media type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_INVALID_BOOT_MEDIA_TYPE (-25145) +/** The default boot catalog entry in the import ISO has invalid flags set. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_FLAGS (-25146) +/** A boot catalog entry in the import ISO has reserved flag set. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_RESERVED_FLAG (-25147) +/** A boot catalog entry in the import ISO is using the unused field. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_USES_UNUSED_FIELD (-25148) +/** A boot catalog entry in the import ISO points to a block after the end of + * the image input file. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_IMAGE_OUT_OF_BOUNDS (-25149) +/** A boot catalog entry in the import ISO has an image with an + * indeterminate size. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_UNKNOWN_IMAGE_SIZE (-25150) +/** The boot catalog in the import ISO is larger than a sector or it is + * missing the final section header entry. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_MISSING_FINAL_OR_TOO_BIG (-25151) +/** The default boot catalog entry in the import ISO an invalid boot + * indicator value. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_BOOT_IND (-25152) +/** A boot catalog extension entry in the import ISO was either flagged + * incorrectly in the previous entry or has an invalid header ID. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_INVALID_ID (-25153) +/** A boot catalog extension entry in the import ISO uses undefined flags + * which will be lost. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_UNDEFINED_FLAGS (-25154) +/** A boot catalog extension entry in the import ISO indicates more entries when + * we reached the end of the boot catalog sector. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_END_OF_SECTOR (-25155) +/** A boot catalog entry in the import ISO sets the continuation flag when using + * NONE as the selection criteria type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_WITH_NONE (-25156) +/** A boot catalog entry in the import ISO sets the continuation flag when + * we reached the ned of the boot catalog secotr. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_EOS (-25157) + +/** @} */ + + +/** @name RTFsIsoVol status codes + * @{ */ +/** Descriptor tag is all zeros. */ +#define VERR_ISOFS_TAG_IS_ALL_ZEROS (-25300) +/** Unsupported descriptor tag version. */ +#define VERR_ISOFS_UNSUPPORTED_TAG_VERSION (-25301) +/** Bad descriptor tag checksum. */ +#define VERR_ISOFS_BAD_TAG_CHECKSUM (-25302) +/** Descriptor tag sector number mismatch. */ +#define VERR_ISOFS_TAG_SECTOR_MISMATCH (-25303) +/** Descriptor CRC mismatch. */ +#define VERR_ISOFS_DESC_CRC_MISMATCH (-25304) +/** Insufficient data to check descriptor CRC. */ +#define VERR_ISOFS_INSUFFICIENT_DATA_FOR_DESC_CRC (-25305) +/** Unexpected/unknown/bad descriptor in volume descriptor sequence. */ +#define VERR_ISOFS_UNEXPECTED_VDS_DESC (-25306) +/** Too many primary volume descriptors. */ +#define VERR_ISOFS_TOO_MANY_PVDS (-25307) +/** Too many logical volume descriptors. */ +#define VERR_ISOFS_TOO_MANY_LVDS (-25308) +/** Too many partition descriptors. */ +#define VERR_ISOFS_TOO_MANY_PDS (-25309) +/** The logical volume descriptor has a too big partition map. */ +#define VERR_ISOFS_TOO_BIT_PARTMAP_IN_LVD (-25310) +/** No primary volume descriptors found. */ +#define VERR_ISOFS_NO_PVD (-25311) +/** No logical volume descriptors found. */ +#define VERR_ISOFS_NO_LVD (-25312) +/** No partition descriptors found. */ +#define VERR_ISOFS_NO_PD (-25313) +/** Multiple primary volume descriptors found, we can only deal with one. */ +#define VERR_ISOFS_MULTIPLE_PVDS (-25314) +/** Multiple logical volume descriptors found, we can only deal with one. */ +#define VERR_ISOFS_MULTIPLE_LVDS (-25315) +/** Too many partition maps in the logical volume descriptor. */ +#define VERR_ISOFS_TOO_MANY_PART_MAPS (-25316) +/** Malformed partition map table in the logical volume descriptor. */ +#define VERR_ISOFS_MALFORMED_PART_MAP_TABLE (-25317) +/** Unable to find partition descriptor for a partition map table entry. */ +#define VERR_ISOFS_PARTITION_NOT_FOUND (-25318) +/** Partition mapping table is shorted than described. */ +#define VERR_ISOFS_INCOMPLETE_PART_MAP_TABLE (-25319) +/** Unknown partition map entry type. */ +#define VERR_ISOFS_UNKNOWN_PART_MAP_ENTRY_TYPE (-25320) +/** Unkonwn paritition ID found in the partition map table. */ +#define VERR_ISOFS_UNKNOWN_PART_MAP_TYPE_ID (-25321) +/** Support for virtual partitions as not yet been implemented. */ +#define VERR_ISOFS_VPM_NOT_SUPPORTED (-25322) +/** Support for sparable partitions as not yet been implemented. */ +#define VERR_ISOFS_SPM_NOT_SUPPORTED (-25323) +/** Support for metadata partitions as not yet been implemented. */ +#define VERR_ISOFS_MPM_NOT_SUPPORTED (-25324) +/** Invalid or unsupported logical block size. */ +#define VERR_ISOFS_UNSUPPORTED_LOGICAL_BLOCK_SIZE (-25325) +/** Unsupported domain ID in logical volume descriptor. */ +#define VERR_ISOFS_BAD_LVD_DOMAIN_ID (-25326) +/** Malformed or invalid file set descriptor location. */ +#define VERR_ISOFS_BAD_LVD_FILE_SET_DESC_LOCATION (-25327) +/** Non-standard descriptor character set in the logical volume descriptor. */ +#define VERR_ISOFS_BAD_LVD_DESC_CHAR_SET (-25329) +/** Invalid partition index in a location. */ +#define VERR_ISOFS_INVALID_PARTITION_INDEX (-25330) +/** Unsupported file system charset. */ +#define VERR_ISOFS_FSD_UNSUPPORTED_CHAR_SET (-25331) +/** File set descriptor has an zero length or invalid root dir extent. */ +#define VERR_ISOFS_FSD_ZERO_ROOT_DIR (-25332) +/** File set descriptor has a next extent member. */ +#define VERR_ISOFS_FSD_NEXT_EXTENT (-25333) +/** The ICB for is too big. */ +#define VERR_ISOFS_ICB_TOO_BIG (-25334) +/** The ICB for is too small. */ +#define VERR_ISOFS_ICB_TOO_SMALL (-25335) +/** No direct ICB entries found. */ +#define VERR_ISOFS_NO_DIRECT_ICB_ENTRIES (-25336) +/** Too many ICB indirections, possibly a loop. */ +#define VERR_ISOFS_TOO_MANY_ICB_INDIRECTIONS (-25337) +/** Too deep ICB recursion. */ +#define VERR_ISOFS_TOO_DEEP_ICB_RECURSION (-25338) +/** ICB is too small to contain anything useful. */ +#define VERR_ISOFS_ICB_ENTRY_TOO_SMALL (-25339) +/** Unsupported tag encountered in ICB. */ +#define VERR_ISOFS_UNSUPPORTED_ICB (-25340) +/** Bad file entry (ICB). */ +#define VERR_ISOFS_BAD_FILE_ENTRY (-25341) +/** Unknown allocation descriptor type. */ +#define VERR_ISO_FS_UNKNOWN_AD_TYPE (-25342) +/** Malformed extended allocation descriptor. */ +#define VERR_ISOFS_BAD_EXTAD (-25343) +/** Wrong file type. */ +#define VERR_ISOFS_WRONG_FILE_TYPE (-25344) +/** Unknow file type. */ +#define VERR_ISOFS_UNKNOWN_FILE_TYPE (-25345) + +/** Not implemented for UDF. */ +#define VERR_ISOFS_UDF_NOT_IMPLEMENTED (-25390) +/** Internal processing error \#1. */ +#define VERR_ISOFS_IPE_1 (-25391) +/** Internal processing error \#2. */ +#define VERR_ISOFS_IPE_2 (-25392) +/** Internal processing error \#3. */ +#define VERR_ISOFS_IPE_3 (-25393) +/** Internal processing error \#4. */ +#define VERR_ISOFS_IPE_4 (-25394) +/** Internal processing error \#5. */ +#define VERR_ISOFS_IPE_5 (-25395) + +/** @} */ + +/* SED-END */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/errno.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/errno.h @@ -0,0 +1,320 @@ +/** @file + * IPRT - errno.h wrapper. + */ + +/* + * Copyright (C) 2012-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#ifndef ___iprt_errno_h___ +#define ___iprt_errno_h___ + +#ifndef IPRT_NO_CRT +# if defined(RT_OS_DARWIN) && defined(KERNEL) +# include +# elif defined(RT_OS_LINUX) && defined(__KERNEL__) +# include +# elif defined(RT_OS_FREEBSD) && defined(_KERNEL) +# include +# elif defined(RT_OS_NETBSD) && defined(_KERNEL) +# include +# else +# include +# endif +#endif + + +/* + * Supply missing errno values according to the current RT_OS_XXX definition. + * + * Note! These supplements are for making no-CRT mode, as well as making UNIXy + * code that makes used of odd errno defines internally, work smoothly. + * + * When adding more error codes, always check the following errno.h sources: + * - RT_OS_DARWIN: http://fxr.watson.org/fxr/source/bsd/sys/errno.h?v=xnu-1699.24.8 + * - RT_OS_FREEBSD: http://fxr.watson.org/fxr/source/sys/errno.h?v=DFBSD + * - RT_OS_NETBSD: http://fxr.watson.org/fxr/source/sys/errno.h?v=NETBSD + * - RT_OS_OPENBSD: http://fxr.watson.org/fxr/source/sys/errno.h?v=OPENBSD + * - RT_OS_OS2: http://svn.netlabs.org/libc/browser/trunk/libc/include/sys/errno.h + * - RT_OS_LINUX: http://fxr.watson.org/fxr/source/include/asm-generic/errno.h?v=linux-2.6 + * - RT_OS_SOLARIS: http://fxr.watson.org/fxr/source/common/sys/errno.h?v=OPENSOLARIS + * - RT_OS_WINDOWS: tools/win.x86/vcc/v8sp1/include/errno.h + */ + +#if defined(RT_OS_DARWIN) \ + || defined(RT_OS_FREEBSD) \ + || defined(RT_OS_NETBSD) \ + || defined(RT_OS_OPENBSD) \ + || defined(RT_OS_OS2) +# define RT_ERRNO_OS_BSD +#endif +#ifdef RT_OS_SOLARIS +# define RT_ERRNO_OS_SYSV_HARDCORE /* ?? */ +#endif + +/* The relatively similar part. */ +#ifndef EPERM +# define EPERM (1) +#endif +#ifndef ENOENT +# define ENOENT (2) +#endif +#ifndef ESRCH +# define ESRCH (3) +#endif +#ifndef EINTR +# define EINTR (4) +#endif +#ifndef EIO +# define EIO (5) +#endif +#ifndef ENXIO +# define ENXIO (6) +#endif +#ifndef E2BIG +# define E2BIG (7) +#endif +#ifndef ENOEXEC +# define ENOEXEC (8) +#endif +#ifndef EBADF +# define EBADF (9) +#endif +#ifndef ECHILD +# define ECHILD (10) +#endif +#ifndef EAGAIN +# if defined(RT_ERRNO_OS_BSD) +# define EAGAIN (35) +# else +# define EAGAIN (11) +# endif +#endif +#ifndef EWOULDBLOCK +# define EWOULDBLOCK EAGAIN +#endif +#ifndef EDEADLK +# if defined(RT_ERRNO_OS_BSD) +# define EDEADLK (11) +# elif defined(RT_OS_LINUX) +# define EDEADLK (35) +# elif defined(RT_OS_WINDOWS) +# define EDEADLK (36) +# else +# define EDEADLK (45) +# endif +#endif +#ifndef EDEADLOCK +# define EDEADLOCK EDEADLK +#endif +#ifndef ENOMEM +# define ENOMEM (12) +#endif +#ifndef EACCES +# define EACCES (13) +#endif +#ifndef EFAULT +# define EFAULT (14) +#endif +#ifndef ENOTBLK +# define ENOTBLK (15) +#endif +#ifndef EBUSY +# define EBUSY (16) +#endif +#ifndef EEXIST +# define EEXIST (17) +#endif +#ifndef EXDEV +# define EXDEV (18) +#endif +#ifndef ENODEV +# define ENODEV (19) +#endif +#ifndef ENOTDIR +# define ENOTDIR (20) +#endif +#ifndef EISDIR +# define EISDIR (21) +#endif +#ifndef EINVAL +# define EINVAL (22) +#endif +#ifndef ENFILE +# define ENFILE (23) +#endif +#ifndef EMFILE +# define EMFILE (24) +#endif +#ifndef ENOTTY +# define ENOTTY (25) +#endif +#ifndef ETXTBSY +# define ETXTBSY (26) +#endif +#ifndef EFBIG +# define EFBIG (27) +#endif +#ifndef ENOSPC +# define ENOSPC (28) +#endif +#ifndef ESPIPE +# define ESPIPE (29) +#endif +#ifndef EROFS +# define EROFS (30) +#endif +#ifndef EMLINK +# define EMLINK (31) +#endif +#ifndef EPIPE +# define EPIPE (32) +#endif +#ifndef EDOM +# define EDOM (33) +#endif +#ifndef ERANGE +# define ERANGE (34) +#endif + +/* 35 - also EAGAIN on BSD and EDEADLK on Linux. */ +#ifndef ENOMSG +# if defined(RT_OS_DARWIN) +# define ENOMSG (91) +# elif defined(RT_OS_FREEBSD) +# define ENOMSG (83) +# elif defined(RT_OS_LINUX) +# define ENOMSG (42) +# else +# define ENOMSG (35) +# endif +#endif + +/* 36 - Also EDEADLK on Windows. */ +#ifndef EIDRM +# if defined(RT_OS_DARWIN) +# define EIDRM (90) +# elif defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD) +# define EIDRM (82) +# elif defined(RT_OS_OPENBSD) +# define EIDRM (89) +# elif defined(RT_OS_LINUX) +# define EIDRM (43) +# elif defined(RT_OS_WINDOWS) +# define EIDRM (600) +# else +# define EIDRM (36) +# endif +#endif +#ifndef EINPROGRESS +# if defined(RT_ERRNO_OS_BSD) +# define EINPROGRESS (36) +# elif defined(RT_OS_LINUX) +# define EINPROGRESS (115) +# else +# define EINPROGRESS (150) +# endif +#endif +#ifndef ENAMETOOLONG +# if defined(RT_ERRNO_OS_BSD) +# define ENAMETOOLONG (63) +# elif defined(RT_OS_LINUX) +# define ENAMETOOLONG (36) +# else +# define ENAMETOOLONG (78) +# endif +#endif + +/* 37 */ +#ifndef ECHRNG +# if defined(RT_ERRNO_OS_SYSV_HARDCORE) +# define ECHRNG (37) +# else +# define ECHRNG (599) +# endif +#endif +#ifndef ENOLCK +# if defined(RT_ERRNO_OS_BSD) +# define ENOLCK (77) +# elif defined(RT_OS_LINUX) +# define ENOLCK (37) +# else +# define ENOLCK (46) +# endif +#endif +#ifndef EALREADY +# if defined(RT_ERRNO_OS_BSD) +# define EALREADY (37) +# elif defined(RT_OS_LINUX) +# define EALREADY (114) +# else +# define EALREADY (149) +# endif +#endif + +/** @todo errno constants {37..44}. */ + +/* 45 - also EDEADLK on Solaris, EL2NSYNC on Linux. */ +#ifndef ENOTSUP +# if defined(RT_ERRNO_OS_BSD) +# define ENOTSUP (45) +# elif defined(RT_OS_LINUX) +# define ENOTSUP (95) +# else +# define ENOTSUP (48) +# endif +#endif +#ifndef EOPNOTSUPP +# if defined(RT_ERRNO_OS_BSD) +# define EOPNOTSUPP ENOTSUP +# elif defined(RT_OS_LINUX) +# define EOPNOTSUPP ENOTSUP +# else +# define EOPNOTSUPP (122) +# endif +#endif + +/** @todo errno constants {46..74}. */ + +/* 75 - note that Solaris has constant with value 75. */ +#ifndef EOVERFLOW +# if defined(RT_OS_OPENBSD) +# define EOVERFLOW (87) +# elif defined(RT_ERRNO_OS_BSD) +# define EOVERFLOW (84) +# elif defined(RT_OS_LINUX) +# define EOVERFLOW (75) +# else +# define EOVERFLOW (79) +# endif +#endif +#ifndef EPROGMISMATCH +# if defined(RT_ERRNO_OS_BSD) +# define EPROGMISMATCH (75) +# else +# define EPROGMISMATCH (598) +# endif +#endif + +/** @todo errno constants {76..}. */ + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/heap.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/heap.h @@ -0,0 +1,356 @@ +/** @file + * IPRT - Heap Implementations + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_heap_h +#define ___iprt_heap_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_heap RTHeap - Heap Implementations + * @ingroup grp_rt + * @{ + */ + + +/** @defgroup grp_rt_heap_simple RTHeapSimple - Simple Heap + * @{ + */ + +/** + * Initializes the heap. + * + * @returns IPRT status code. + * @param pHeap Where to store the heap anchor block on success. + * @param pvMemory Pointer to the heap memory. + * @param cbMemory The size of the heap memory. + */ +RTDECL(int) RTHeapSimpleInit(PRTHEAPSIMPLE pHeap, void *pvMemory, size_t cbMemory); + +/** + * Merge two simple heaps into one. + * + * The requirement is of course that they next two each other memory wise. + * + * @returns IPRT status code. + * @param pHeap Where to store the handle to the merged heap on success. + * @param Heap1 Handle to the first heap. + * @param Heap2 Handle to the second heap. + * @remark This API isn't implemented yet. + */ +RTDECL(int) RTHeapSimpleMerge(PRTHEAPSIMPLE pHeap, RTHEAPSIMPLE Heap1, RTHEAPSIMPLE Heap2); + +/** + * Relocater the heap internal structures after copying it to a new location. + * + * This can be used when loading a saved heap. + * + * @returns IPRT status code. + * @param hHeap Heap handle that has already been adjusted by to the new + * location. That is to say, when calling + * RTHeapSimpleInit, the caller must note the offset of the + * returned heap handle into the heap memory. This offset + * must be used when calcuating the handle value for the + * new location. The offset may in some cases not be zero! + * @param offDelta The delta between the new and old location, i.e. what + * should be added to the internal pointers. + */ +RTDECL(int) RTHeapSimpleRelocate(RTHEAPSIMPLE hHeap, uintptr_t offDelta); + +/** + * Allocates memory from the specified simple heap. + * + * @returns Pointer to the allocated memory block on success. + * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.) + * + * @param Heap The heap to allocate the memory on. + * @param cb The requested heap block size. + * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment. + * Must be a power of 2. + */ +RTDECL(void *) RTHeapSimpleAlloc(RTHEAPSIMPLE Heap, size_t cb, size_t cbAlignment); + +/** + * Allocates zeroed memory from the specified simple heap. + * + * @returns Pointer to the allocated memory block on success. + * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.) + * + * @param Heap The heap to allocate the memory on. + * @param cb The requested heap block size. + * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment. + * Must be a power of 2. + */ +RTDECL(void *) RTHeapSimpleAllocZ(RTHEAPSIMPLE Heap, size_t cb, size_t cbAlignment); + +/** + * Reallocates / Allocates / Frees a heap block. + * + * @param Heap The heap. This is optional and will only be used for strict assertions. + * @param pv The heap block returned by RTHeapSimple. If NULL it behaves like RTHeapSimpleAlloc(). + * @param cbNew The new size of the heap block. If NULL it behaves like RTHeapSimpleFree(). + * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment. + * Must be a power of 2. + * @remark This API isn't implemented yet. + */ +RTDECL(void *) RTHeapSimpleRealloc(RTHEAPSIMPLE Heap, void *pv, size_t cbNew, size_t cbAlignment); + +/** + * Reallocates / Allocates / Frees a heap block, zeroing any new bits. + * + * @param Heap The heap. This is optional and will only be used for strict assertions. + * @param pv The heap block returned by RTHeapSimple. If NULL it behaves like RTHeapSimpleAllocZ(). + * @param cbNew The new size of the heap block. If NULL it behaves like RTHeapSimpleFree(). + * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment. + * Must be a power of 2. + * @remark This API isn't implemented yet. + */ +RTDECL(void *) RTHeapSimpleReallocZ(RTHEAPSIMPLE Heap, void *pv, size_t cbNew, size_t cbAlignment); + +/** + * Frees memory allocated from a simple heap. + * + * @param Heap The heap. This is optional and will only be used for strict assertions. + * @param pv The heap block returned by RTHeapSimple + */ +RTDECL(void) RTHeapSimpleFree(RTHEAPSIMPLE Heap, void *pv); + +/** + * Gets the size of the specified heap block. + * + * @returns The actual size of the heap block. + * @returns 0 if \a pv is NULL or it doesn't point to a valid heap block. An invalid \a pv + * can also cause traps or trigger assertions. + * @param Heap The heap. This is optional and will only be used for strict assertions. + * @param pv The heap block returned by RTHeapSimple + */ +RTDECL(size_t) RTHeapSimpleSize(RTHEAPSIMPLE Heap, void *pv); + +/** + * Gets the size of the heap. + * + * This size includes all the internal heap structures. So, even if the heap is + * empty the RTHeapSimpleGetFreeSize() will never reach the heap size returned + * by this function. + * + * @returns The heap size. + * @returns 0 if heap was safely detected as being bad. + * @param Heap The heap. + */ +RTDECL(size_t) RTHeapSimpleGetHeapSize(RTHEAPSIMPLE Heap); + +/** + * Returns the sum of all free heap blocks. + * + * This is the amount of memory you can theoretically allocate + * if you do allocations exactly matching the free blocks. + * + * @returns The size of the free blocks. + * @returns 0 if heap was safely detected as being bad. + * @param Heap The heap. + */ +RTDECL(size_t) RTHeapSimpleGetFreeSize(RTHEAPSIMPLE Heap); + +/** + * Printf like callbaclk function for RTHeapSimpleDump. + * @param pszFormat IPRT format string. + * @param ... Format arguments. + */ +typedef DECLCALLBACK(void) FNRTHEAPSIMPLEPRINTF(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** Pointer to a FNRTHEAPSIMPLEPRINTF function. */ +typedef FNRTHEAPSIMPLEPRINTF *PFNRTHEAPSIMPLEPRINTF; + +/** + * Dumps the hypervisor heap. + * + * @param Heap The heap handle. + * @param pfnPrintf Printf like function that groks IPRT formatting. + */ +RTDECL(void) RTHeapSimpleDump(RTHEAPSIMPLE Heap, PFNRTHEAPSIMPLEPRINTF pfnPrintf); + +/** @} */ + + + +/** @defgroup grp_rt_heap_offset RTHeapOffset - Offset Based Heap + * + * This is a variation on the simple heap that doesn't use pointers internally + * and therefore can be saved and restored without any extra effort. + * + * @{ + */ + +/** + * Initializes the heap. + * + * @returns IPRT status code. + * @param phHeap Where to store the heap anchor block on success. + * @param pvMemory Pointer to the heap memory. + * @param cbMemory The size of the heap memory. + */ +RTDECL(int) RTHeapOffsetInit(PRTHEAPOFFSET phHeap, void *pvMemory, size_t cbMemory); + +/** + * Merge two simple heaps into one. + * + * The requirement is of course that they next two each other memory wise. + * + * @returns IPRT status code. + * @param phHeap Where to store the handle to the merged heap on success. + * @param hHeap1 Handle to the first heap. + * @param hHeap2 Handle to the second heap. + * @remark This API isn't implemented yet. + */ +RTDECL(int) RTHeapOffsetMerge(PRTHEAPOFFSET phHeap, RTHEAPOFFSET hHeap1, RTHEAPOFFSET hHeap2); + +/** + * Allocates memory from the specified simple heap. + * + * @returns Pointer to the allocated memory block on success. + * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.) + * + * @param hHeap The heap to allocate the memory on. + * @param cb The requested heap block size. + * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment. + * Must be a power of 2. + */ +RTDECL(void *) RTHeapOffsetAlloc(RTHEAPOFFSET hHeap, size_t cb, size_t cbAlignment); + +/** + * Allocates zeroed memory from the specified simple heap. + * + * @returns Pointer to the allocated memory block on success. + * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.) + * + * @param hHeap The heap to allocate the memory on. + * @param cb The requested heap block size. + * @param cbAlignment The requested heap block alignment. Pass 0 for default + * alignment. Must be a power of 2. + */ +RTDECL(void *) RTHeapOffsetAllocZ(RTHEAPOFFSET hHeap, size_t cb, size_t cbAlignment); + +/** + * Reallocates / Allocates / Frees a heap block. + * + * @param hHeap The heap handle. This is optional and will only be used + * for strict assertions. + * @param pv The heap block returned by RTHeapOffset. If NULL it + * behaves like RTHeapOffsetAlloc(). + * @param cbNew The new size of the heap block. If NULL it behaves like + * RTHeapOffsetFree(). + * @param cbAlignment The requested heap block alignment. Pass 0 for default + * alignment. Must be a power of 2. + * @remark This API isn't implemented yet. + */ +RTDECL(void *) RTHeapOffsetRealloc(RTHEAPOFFSET hHeap, void *pv, size_t cbNew, size_t cbAlignment); + +/** + * Reallocates / Allocates / Frees a heap block, zeroing any new bits. + * + * @param hHeap The heap handle. This is optional and will only be used + * for strict assertions. + * @param pv The heap block returned by RTHeapOffset. If NULL it + * behaves like RTHeapOffsetAllocZ(). + * @param cbNew The new size of the heap block. If NULL it behaves like + * RTHeapOffsetFree(). + * @param cbAlignment The requested heap block alignment. Pass 0 for default + * alignment. Must be a power of 2. + * @remark This API isn't implemented yet. + */ +RTDECL(void *) RTHeapOffsetReallocZ(RTHEAPOFFSET hHeap, void *pv, size_t cbNew, size_t cbAlignment); + +/** + * Frees memory allocated from a simple heap. + * + * @param hHeap The heap handle. This is optional and will only be used + * for strict assertions. + * @param pv The heap block returned by RTHeapOffset + */ +RTDECL(void) RTHeapOffsetFree(RTHEAPOFFSET hHeap, void *pv); + +/** + * Gets the size of the specified heap block. + * + * @returns The actual size of the heap block. + * @returns 0 if \a pv is NULL or it doesn't point to a valid heap block. An + * invalid \a pv can also cause traps or trigger assertions. + * + * @param hHeap The heap handle. This is optional and will only be used + * for strict assertions. + * @param pv The heap block returned by RTHeapOffset + */ +RTDECL(size_t) RTHeapOffsetSize(RTHEAPOFFSET hHeap, void *pv); + +/** + * Gets the size of the heap. + * + * This size includes all the internal heap structures. So, even if the heap is + * empty the RTHeapOffsetGetFreeSize() will never reach the heap size returned + * by this function. + * + * @returns The heap size. + * @returns 0 if heap was safely detected as being bad. + * @param hHeap The heap handle. + */ +RTDECL(size_t) RTHeapOffsetGetHeapSize(RTHEAPOFFSET hHeap); + +/** + * Returns the sum of all free heap blocks. + * + * This is the amount of memory you can theoretically allocate + * if you do allocations exactly matching the free blocks. + * + * @returns The size of the free blocks. + * @returns 0 if heap was safely detected as being bad. + * @param hHeap The heap handle. + */ +RTDECL(size_t) RTHeapOffsetGetFreeSize(RTHEAPOFFSET hHeap); + +/** + * Printf like callbaclk function for RTHeapOffsetDump. + * @param pszFormat IPRT format string. + * @param ... Format arguments. + */ +typedef DECLCALLBACK(void) FNRTHEAPOFFSETPRINTF(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** Pointer to a FNRTHEAPOFFSETPRINTF function. */ +typedef FNRTHEAPOFFSETPRINTF *PFNRTHEAPOFFSETPRINTF; + +/** + * Dumps the hypervisor heap. + * + * @param hHeap The heap handle. + * @param pfnPrintf Printf like function that groks IPRT formatting. + */ +RTDECL(void) RTHeapOffsetDump(RTHEAPOFFSET hHeap, PFNRTHEAPOFFSETPRINTF pfnPrintf); + +/** @} */ + +/** @} */ +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/initterm.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/initterm.h @@ -0,0 +1,263 @@ +/** @file + * IPRT - Runtime Init/Term. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_initterm_h +#define ___iprt_initterm_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt IPRT C/C++ APIs + * @{ + */ + +/** @defgroup grp_rt_initterm RTInit/RTTerm - Initialization and Termination + * + * APIs for initializing and terminating the IPRT, optionally it can also + * convert input arguments to UTF-8 (in ring-3). + * + * @sa RTOnce, RTOnceEx. + * + * @{ + */ + +#ifdef IN_RING3 +/** @name RTR3Init flags (RTR3INIT_XXX). + * @{ */ +/** Try initialize SUPLib. */ +#define RTR3INIT_FLAGS_SUPLIB RT_BIT(0) +/** Initializing IPRT from a DLL. */ +#define RTR3INIT_FLAGS_DLL RT_BIT(1) +/** We are sharing a process space, so we need to behave. */ +#define RTR3INIT_FLAGS_UNOBTRUSIVE RT_BIT(2) +/** The caller ensures that the argument bector is UTF-8. */ +#define RTR3INIT_FLAGS_UTF8_ARGV RT_BIT(3) +/** Indicates that this is a standalone application without any additional + * shared libraries in the application directory. Mainly windows loader mess. */ +#define RTR3INIT_FLAGS_STANDALONE_APP RT_BIT(4) +/** @} */ + +/** @name RTR3InitEx version + * @{ */ +/** Version 1. */ +#define RTR3INIT_VER_1 UINT32_C(1) +/** The current version. */ +#define RTR3INIT_VER_CUR RTR3INIT_VER_1 +/** @} */ + +/** + * Initializes the runtime library. + * + * @returns iprt status code. + * @param fFlags Flags, see RTR3INIT_XXX. + */ +RTR3DECL(int) RTR3InitExeNoArguments(uint32_t fFlags); + +/** + * Initializes the runtime library. + * + * @returns iprt status code. + * @param cArgs Pointer to the argument count. + * @param ppapszArgs Pointer to the argument vector pointer. + * @param fFlags Flags, see RTR3INIT_XXX. + */ +RTR3DECL(int) RTR3InitExe(int cArgs, char ***ppapszArgs, uint32_t fFlags); + +/** + * Initializes the runtime library. + * + * @returns iprt status code. + * @param fFlags Flags, see RTR3INIT_XXX. + */ +RTR3DECL(int) RTR3InitDll(uint32_t fFlags); + +/** + * Initializes the runtime library and possibly also SUPLib too. + * + * Avoid this interface, it's not considered stable. + * + * @returns IPRT status code. + * @param iVersion The interface version. Must be 0 atm. + * @param fFlags Flags, see RTR3INIT_XXX. + * @param cArgs Pointer to the argument count. + * @param ppapszArgs Pointer to the argument vector pointer. NULL + * allowed if @a cArgs is 0. + * @param pszProgramPath The program path. Pass NULL if we're to figure it + * out ourselves. + */ +RTR3DECL(int) RTR3InitEx(uint32_t iVersion, uint32_t fFlags, int cArgs, char ***ppapszArgs, const char *pszProgramPath); + +/** + * Terminates the runtime library. + */ +RTR3DECL(void) RTR3Term(void); + +/** + * Is IPRT succesfully initialized? + * + * @returns true/false. + */ +RTR3DECL(bool) RTR3InitIsInitialized(void); + +/** + * Are we running in unobtrusive mode? + * @returns true/false. + */ +RTR3DECL(bool) RTR3InitIsUnobtrusive(void); +#endif /* IN_RING3 */ + + +#ifdef IN_RING0 +/** + * Initializes the ring-0 driver runtime library. + * + * @returns iprt status code. + * @param fReserved Flags reserved for the future. + */ +RTR0DECL(int) RTR0Init(unsigned fReserved); + +/** + * Terminates the ring-0 driver runtime library. + */ +RTR0DECL(void) RTR0Term(void); + +/** + * Forcibily terminates the ring-0 driver runtime library. + * + * This should be used when statically linking the IPRT. Module using dynamic + * linking shall use RTR0Term. If you're not sure, use RTR0Term! + */ +RTR0DECL(void) RTR0TermForced(void); +#endif + +#ifdef IN_RC +/** + * Initializes the raw-mode context runtime library. + * + * @returns iprt status code. + * + * @param u64ProgramStartNanoTS The startup timestamp. + */ +RTRCDECL(int) RTRCInit(uint64_t u64ProgramStartNanoTS); + +/** + * Terminates the raw-mode context runtime library. + */ +RTRCDECL(void) RTRCTerm(void); +#endif + + +/** + * Termination reason. + */ +typedef enum RTTERMREASON +{ + /** Normal exit. iStatus contains the exit code. */ + RTTERMREASON_EXIT = 1, + /** Any abnormal exit. iStatus is 0 and has no meaning. */ + RTTERMREASON_ABEND, + /** Killed by a signal. The iStatus contains the signal number. */ + RTTERMREASON_SIGNAL, + /** The IPRT module is being unloaded. iStatus is 0 and has no meaning. */ + RTTERMREASON_UNLOAD +} RTTERMREASON; + +/** Whether lazy clean up is Okay or not. + * When the process is exiting, it is a waste of time to for instance free heap + * memory or close open files. OTOH, when the runtime is unloaded from the + * process, it is important to release absolutely all resources to prevent + * resource leaks. */ +#define RTTERMREASON_IS_LAZY_CLEANUP_OK(enmReason) ((enmReason) != RTTERMREASON_UNLOAD) + + +/** + * IPRT termination callback function. + * + * @param enmReason The cause of the termination. + * @param iStatus The meaning of this depends on enmReason. + * @param pvUser User argument passed to RTTermRegisterCallback. + */ +typedef DECLCALLBACK(void) FNRTTERMCALLBACK(RTTERMREASON enmReason, int32_t iStatus, void *pvUser); +/** Pointer to an IPRT termination callback function. */ +typedef FNRTTERMCALLBACK *PFNRTTERMCALLBACK; + + +/** + * Registers a termination callback. + * + * This is intended for performing clean up during IPRT termination. Frequently + * paired with lazy initialization thru RTOnce. + * + * The callbacks are called in LIFO order. + * + * @returns IPRT status code. + * + * @param pfnCallback The callback function. + * @param pvUser The user argument for the callback. + * + * @remarks May need to acquire a fast mutex or critical section, so use with + * some care in ring-0 context. + * + * @remarks Be very careful using this from code that may be unloaded before + * IPRT terminates. Unlike some atexit and on_exit implementations, + * IPRT will not automatically unregister callbacks when a module gets + * unloaded. + */ +RTDECL(int) RTTermRegisterCallback(PFNRTTERMCALLBACK pfnCallback, void *pvUser); + +/** + * Deregister a termination callback. + * + * @returns VINF_SUCCESS if found, VERR_NOT_FOUND if the callback/pvUser pair + * wasn't found. + * + * @param pfnCallback The callback function. + * @param pvUser The user argument for the callback. + */ +RTDECL(int) RTTermDeregisterCallback(PFNRTTERMCALLBACK pfnCallback, void *pvUser); + +/** + * Runs the termination callback queue. + * + * Normally called by an internal IPRT termination function, but may also be + * called by external code immediately prior to terminating IPRT if it is in a + * better position to state the termination reason and/or status. + * + * @param enmReason The reason why it's called. + * @param iStatus The associated exit status or signal number. + */ +RTDECL(void) RTTermRunCallbacks(RTTERMREASON enmReason, int32_t iStatus); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/latin1.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/latin1.h @@ -0,0 +1,392 @@ +/** @file + * IPRT - String Manipulation, Latin-1 (ISO-8859-1) encoding. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_latin1_h +#define ___iprt_latin1_h + +#include + +RT_C_DECLS_BEGIN + + +/** @defgroup rt_str_latin1 Latin-1 (ISO-8859-1) String Manipulation + * @ingroup grp_rt_str + * + * Deals with Latin-1 encoded strings. + * + * @warning Make sure to name all variables dealing with Latin-1 strings + * suchthat there is no way to mistake them for normal UTF-8 strings. + * There may be severe security issues resulting from mistaking Latin-1 + * for UTF-8! + * + * @{ + */ + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pszLatin1 The Latin-1 string. + */ +DECLINLINE(RTUNICP) RTLatin1GetCp(const char *pszLatin1) +{ + return *(const unsigned char *)pszLatin1; +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppszLatin1 Pointer to the string pointer. This will be updated to + * point to the char following the current code point. This + * is advanced one character forward on failure. + * @param pCp Where to store the code point. RTUNICP_INVALID is stored + * here on failure. + */ +DECLINLINE(int) RTLatin1GetCpEx(const char **ppszLatin1, PRTUNICP pCp) +{ + const unsigned char uch = **(const unsigned char **)ppszLatin1; + (*ppszLatin1)++; + *pCp = uch; + return VINF_SUCCESS; +} + +/** + * Get the unicode code point at the given string position for a string of a + * given maximum length. + * + * @returns iprt status code. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppszLatin1 Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pcchLatin1 Pointer to the maximum string length. This will be + * decremented by the size of the code point found. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + */ +DECLINLINE(int) RTLatin1GetCpNEx(const char **ppszLatin1, size_t *pcchLatin1, PRTUNICP pCp) +{ + if (RT_LIKELY(*pcchLatin1 != 0)) + { + const unsigned char uch = **(const unsigned char **)ppszLatin1; + (*ppszLatin1)++; + (*pcchLatin1)--; + *pCp = uch; + return VINF_SUCCESS; + } + *pCp = RTUNICP_INVALID; + return VERR_END_OF_STRING; +} + +/** + * Get the Latin-1 size in characters of a given Unicode code point. + * + * The code point is expected to be a valid Unicode one, but not necessarily in + * the range supported by Latin-1. + * + * @returns the size in characters, or zero if there is no Latin-1 encoding + */ +DECLINLINE(size_t) RTLatin1CpSize(RTUNICP CodePoint) +{ + if (CodePoint < 0x100) + return 1; + return 0; +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pszLatin1 The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the Latin-1 range. + */ +DECLINLINE(char *) RTLatin1PutCp(char *pszLatin1, RTUNICP CodePoint) +{ + AssertReturn(CodePoint < 0x100, NULL); + *pszLatin1++ = (unsigned char)CodePoint; + return pszLatin1; +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param pszLatin1 Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(char *) RTLatin1NextCp(const char *pszLatin1) +{ + pszLatin1++; + return (char *)pszLatin1; +} + +/** + * Skips back to the previous code point. + * + * @returns Pointer to the char before the current code point. + * @returns pszLatin1Start on failure. + * @param pszLatin1Start Pointer to the start of the string. + * @param pszLatin1 Pointer to the current code point. + */ +DECLINLINE(char *) RTLatin1PrevCp(const char *pszLatin1Start, const char *pszLatin1) +{ + if ((uintptr_t)pszLatin1 > (uintptr_t)pszLatin1Start) + { + pszLatin1--; + return (char *)pszLatin1; + } + return (char *)pszLatin1Start; +} + +/** + * Translate a Latin1 string into a UTF-8 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszLatin1 Latin1 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTLatin1ToUtf8(pszLatin1, ppszString) RTLatin1ToUtf8Tag((pszLatin1), (ppszString), RTSTR_TAG) + +/** + * Translate a Latin-1 string into a UTF-8 allocating the result buffer. + * + * @returns iprt status code. + * @param pszLatin1 Latin-1 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf8Tag(const char *pszLatin1, char **ppszString, const char *pszTag); + +/** + * Translates Latin-1 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The number of Latin-1 characters to translate from + * pszLatin1. The translation will stop when reaching + * cchLatin1 or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz If @a cch is non-zero, this must either be pointing + * to a pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or + * @a cch is zero a buffer of at least @a cch chars + * will be allocated to hold the translated string. If + * a buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTLatin1ToUtf8Ex(pszLatin1, cchLatin1, ppsz, cch, pcch) \ + RTLatin1ToUtf8ExTag((pszLatin1), (cchLatin1), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates Latin1 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin1 string to convert. + * @param cchLatin1 The number of Latin1 characters to translate from + * pwszString. The translation will stop when + * reaching cchLatin1 or the terminator ('\\0'). Use + * RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * a pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch chars will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf8ExTag(const char *pszLatin1, size_t cchLatin1, char **ppsz, size_t cch, size_t *pcch, + const char *pszTag); + +/** + * Calculates the length of the Latin-1 string in UTF-8 chars (bytes). + * + * The primary purpose of this function is to help allocate buffers for + * RTLatin1ToUtf8() of the correct size. For most other purposes + * RTLatin1ToUtf8Ex() should be used. + * + * @returns Number of chars (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pszLatin1 The Latin-1 string. + */ +RTDECL(size_t) RTLatin1CalcUtf8Len(const char *pszLatin1); + +/** + * Calculates the length of the Latin-1 string in UTF-8 chars (bytes). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string. + * @param cchLatin1 The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTLatin1CalcUtf8LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcch); + +/** + * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items. + * + * @returns Number of RTUTF16 items. + * @param pszLatin1 The Latin-1 string. + */ +RTDECL(size_t) RTLatin1CalcUtf16Len(const char *pszLatin1); + +/** + * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items. + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string. + * @param cchLatin1 The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcwc Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTLatin1CalcUtf16LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcwc); + +/** + * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result + * buffer (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. The + * returned string must be freed using RTUtf16Free(). + */ +#define RTLatin1ToUtf16(pszLatin1, ppwszString) RTLatin1ToUtf16Tag((pszLatin1), (ppwszString), RTSTR_TAG) + +/** + * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result + * buffer (custom tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. The + * returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf16Tag(const char *pszLatin1, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the + * result buffer if requested (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The maximum size in chars (the type) to convert. The + * conversion stops when it reaches cchLatin1 or the + * string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing + * to pointer to a buffer of the specified size, or + * pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at + * least cwc items will be allocated to hold the + * translated string. If a buffer was requested it + * must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the + * terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTLatin1ToUtf16Ex(pszLatin1, cchLatin1, ppwsz, cwc, pcwc) \ + RTLatin1ToUtf16ExTag((pszLatin1), (cchLatin1), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the + * result buffer if requested. + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The maximum size in chars (the type) to convert. The + * conversion stops when it reaches cchLatin1 or the + * string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing + * to pointer to a buffer of the specified size, or + * pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at + * least cwc items will be allocated to hold the + * translated string. If a buffer was requested it + * must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the + * terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf16ExTag(const char *pszLatin1, size_t cchLatin1, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + +/** @} */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/list.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/list.h @@ -0,0 +1,534 @@ +/** @file + * IPRT - Generic Doubly Linked List. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_list_h +#define ___iprt_list_h + +#include + +/** @defgroup grp_rt_list RTList - Generic Doubly Linked List + * @ingroup grp_rt + * + * The list implementation is circular without any type wise distintion between + * the list and its nodes. This can be confusing since the list head usually + * resides in a different structure than the nodes, so care must be taken when + * walking the list. + * + * @{ + */ + +RT_C_DECLS_BEGIN + +/** + * A list node of a doubly linked list. + */ +typedef struct RTLISTNODE +{ + /** Pointer to the next list node. */ + struct RTLISTNODE *pNext; + /** Pointer to the previous list node. */ + struct RTLISTNODE *pPrev; +} RTLISTNODE; +/** Pointer to a list node. */ +typedef RTLISTNODE *PRTLISTNODE; +/** Pointer to a const list node. */ +typedef RTLISTNODE const *PCRTLISTNODE; +/** Pointer to a list node pointer. */ +typedef PRTLISTNODE *PPRTLISTNODE; + +/** The anchor (head/tail) of a doubly linked list. + * + * @remarks Please use this instead of RTLISTNODE to indicate a list + * head/tail. It makes the code so much easier to read. Also, + * always mention the actual list node type(s) in the comment. */ +typedef RTLISTNODE RTLISTANCHOR; +/** Pointer to a doubly linked list anchor. */ +typedef RTLISTANCHOR *PRTLISTANCHOR; +/** Pointer to a const doubly linked list anchor. */ +typedef RTLISTANCHOR const *PCRTLISTANCHOR; + +/** Version of RTLISTNODE for holding a ring-3 only list in data which gets + * shared between multiple contexts */ +#if defined(IN_RING3) +typedef RTLISTNODE RTLISTNODER3; +#else +typedef struct { RTR3PTR aOffLimits[2]; } RTLISTNODER3; +#endif +/** Version of RTLISTANCHOR for holding a ring-3 only list in data which gets + * shared between multiple contexts */ +typedef RTLISTNODER3 RTLISTANCHORR3; + + +/** + * Initialize a list. + * + * @param pList Pointer to an unitialised list. + */ +DECLINLINE(void) RTListInit(PRTLISTNODE pList) +{ + pList->pNext = pList; + pList->pPrev = pList; +} + +/** + * Append a node to the end of the list. + * + * @param pList The list to append the node to. + * @param pNode The node to append. + */ +DECLINLINE(void) RTListAppend(PRTLISTNODE pList, PRTLISTNODE pNode) +{ + pList->pPrev->pNext = pNode; + pNode->pPrev = pList->pPrev; + pNode->pNext = pList; + pList->pPrev = pNode; +} + +/** + * Add a node as the first element of the list. + * + * @param pList The list to prepend the node to. + * @param pNode The node to prepend. + */ +DECLINLINE(void) RTListPrepend(PRTLISTNODE pList, PRTLISTNODE pNode) +{ + pList->pNext->pPrev = pNode; + pNode->pNext = pList->pNext; + pNode->pPrev = pList; + pList->pNext = pNode; +} + +/** + * Inserts a node after the specified one. + * + * @param pCurNode The current node. + * @param pNewNode The node to insert. + */ +DECLINLINE(void) RTListNodeInsertAfter(PRTLISTNODE pCurNode, PRTLISTNODE pNewNode) +{ + RTListPrepend(pCurNode, pNewNode); +} + +/** + * Inserts a node before the specified one. + * + * @param pCurNode The current node. + * @param pNewNode The node to insert. + */ +DECLINLINE(void) RTListNodeInsertBefore(PRTLISTNODE pCurNode, PRTLISTNODE pNewNode) +{ + RTListAppend(pCurNode, pNewNode); +} + +/** + * Remove a node from a list. + * + * @param pNode The node to remove. + */ +DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode) +{ + PRTLISTNODE pPrev = pNode->pPrev; + PRTLISTNODE pNext = pNode->pNext; + + pPrev->pNext = pNext; + pNext->pPrev = pPrev; + + /* poison */ + pNode->pNext = NULL; + pNode->pPrev = NULL; +} + + +/** + * Remove a node from a list, returns value. + * + * @returns pNode + * @param pNode The node to remove. + */ +DECLINLINE(PRTLISTNODE) RTListNodeRemoveRet(PRTLISTNODE pNode) +{ + PRTLISTNODE pPrev = pNode->pPrev; + PRTLISTNODE pNext = pNode->pNext; + + pPrev->pNext = pNext; + pNext->pPrev = pPrev; + + /* poison */ + pNode->pNext = NULL; + pNode->pPrev = NULL; + + return pNode; +} + +/** + * Checks if a node is the last element in the list. + * + * @retval true if the node is the last element in the list. + * @retval false otherwise + * + * @param pList The list. + * @param pNode The node to check. + */ +#define RTListNodeIsLast(pList, pNode) ((pNode)->pNext == (pList)) + +/** + * Checks if a node is the first element in the list. + * + * @retval true if the node is the first element in the list. + * @retval false otherwise. + * + * @param pList The list. + * @param pNode The node to check. + */ +#define RTListNodeIsFirst(pList, pNode) ((pNode)->pPrev == (pList)) + +/** + * Checks if a type converted node is actually the dummy element (@a pList). + * + * @retval true if the node is the dummy element in the list. + * @retval false otherwise. + * + * @param pList The list. + * @param pNode The node structure to check. Typically + * something obtained from RTListNodeGetNext() or + * RTListNodeGetPrev(). This is NOT a PRTLISTNODE + * but something that contains a RTLISTNODE member! + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListNodeIsDummy(pList, pNode, Type, Member) \ + ( (pNode) == RT_FROM_MEMBER((pList), Type, Member) ) +/** @copydoc RTListNodeIsDummy */ +#define RTListNodeIsDummyCpp(pList, pNode, Type, Member) \ + ( (pNode) == RT_FROM_CPP_MEMBER((pList), Type, Member) ) + +/** + * Checks if a list is empty. + * + * @retval true if the list is empty. + * @retval false otherwise. + * + * @param pList The list to check. + */ +#define RTListIsEmpty(pList) ((pList)->pPrev == (pList)) + +/** + * Returns the next node in the list. + * + * @returns The next node. + * + * @param pCurNode The current node. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListNodeGetNext(pCurNode, Type, Member) \ + RT_FROM_MEMBER((pCurNode)->pNext, Type, Member) +/** @copydoc RTListNodeGetNext */ +#define RTListNodeGetNextCpp(pCurNode, Type, Member) \ + RT_FROM_CPP_MEMBER((pCurNode)->pNext, Type, Member) + +/** + * Returns the previous node in the list. + * + * @returns The previous node. + * + * @param pCurNode The current node. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListNodeGetPrev(pCurNode, Type, Member) \ + RT_FROM_MEMBER((pCurNode)->pPrev, Type, Member) +/** @copydoc RTListNodeGetPrev */ +#define RTListNodeGetPrevCpp(pCurNode, Type, Member) \ + RT_FROM_CPP_MEMBER((pCurNode)->pPrev, Type, Member) + +/** + * Returns the first element in the list (checks for empty list). + * + * @returns Pointer to the first list element, or NULL if empty list. + * + * @param pList List to get the first element from. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListGetFirst(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RTListNodeGetNext(pList, Type, Member) : NULL) +/** @copydoc RTListGetFirst */ +#define RTListGetFirstCpp(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RTListNodeGetNextCpp(pList, Type, Member) : NULL) + +/** + * Returns the last element in the list (checks for empty list). + * + * @returns Pointer to the last list element, or NULL if empty list. + * + * @param pList List to get the last element from. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListGetLast(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RTListNodeGetPrev(pList, Type, Member) : NULL) +/** @copydoc RTListGetLast */ +#define RTListGetLastCpp(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RTListNodeGetPrevCpp(pList, Type, Member) : NULL) + +/** + * Returns the next node in the list or NULL if the end has been reached. + * + * @returns The next node, or NULL if end of list. + * + * @param pList The list @a pCurNode is linked on. + * @param pCurNode The current node, of type @a Type. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListGetNext(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_MEMBER((pCurNode)->Member.pNext, Type, Member) : NULL ) +/** @copydoc RTListGetNext */ +#define RTListGetNextCpp(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_CPP_MEMBER((pCurNode)->Member.pNext, Type, Member) : NULL ) + +/** + * Returns the previous node in the list or NULL if the start has been reached. + * + * @returns The previous node, or NULL if end of list. + * + * @param pList The list @a pCurNode is linked on. + * @param pCurNode The current node, of type @a Type. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListGetPrev(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pPrev != (pList) ? RT_FROM_MEMBER((pCurNode)->Member.pPrev, Type, Member) : NULL ) +/** @copydoc RTListGetPrev */ +#define RTListGetPrevCpp(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pPrev != (pList) ? RT_FROM_CPP_MEMBER((pCurNode)->Member.pPrev, Type, Member) : NULL ) + + +/** + * Removes and returns the first element in the list (checks for empty list). + * + * @returns Pointer to the first list element, or NULL if empty list. + * + * @param pList List to get the first element from. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListRemoveFirst(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RT_FROM_MEMBER(RTListNodeRemoveRet((pList)->pNext), Type, Member) : NULL) +/** @copydoc RTListRemoveFirst */ +#define RTListRemoveFirstCpp(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RT_FROM_CPP_MEMBER(RTListNodeRemoveRet((pList)->pNext), Type, Member) : NULL) + +/** + * Removes and returns the last element in the list (checks for empty list). + * + * @returns Pointer to the last list element, or NULL if empty list. + * + * @param pList List to get the last element from. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListRemoveLast(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RT_FROM_MEMBER(RTListNodeRemoveRet((pList)->pPrev), Type, Member) : NULL) +/** @copydoc RTListRemoveLast */ +#define RTListRemoveLastCpp(pList, Type, Member) \ + (!RTListIsEmpty(pList) ? RT_FROM_CPP_MEMBER(RTListNodeRemoveRet((pList)->pPrev), Type, Member) : NULL) + +/** + * Removes and returns the next node in the list or NULL if the end has been + * reached. + * + * @returns The next node, or NULL if end of list. + * + * @param pList The list @a pCurNode is linked on. + * @param pCurNode The current node, of type @a Type. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListRemoveNext(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_MEMBER(RTListNodeRemoveRet((pCurNode)->Member.pNext), Type, Member) : NULL ) +/** @copydoc RTListRemoveNext */ +#define RTListRemoveNextCpp(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_CPP_MEMBER(RTListNodeRemoveRet((pCurNode)->Member.pNext), Type, Member) : NULL ) + +/** + * Removes and returns the previous node in the list or NULL if the start has + * been reached. + * + * @returns The previous node, or NULL if end of list. + * + * @param pList The list @a pCurNode is linked on. + * @param pCurNode The current node, of type @a Type. + * @param Type Structure the list node is a member of. + * @param Member The list node member. + */ +#define RTListRemovePrev(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_MEMBER(RTListNodeRemoveRet((pCurNode)->Member.pPrev), Type, Member) : NULL ) +/** @copydoc RTListRemovePrev */ +#define RTListRemovePrevCpp(pList, pCurNode, Type, Member) \ + ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_CPP_MEMBER(RTListNodeRemoveRet((pCurNode)->Member.pPrev), Type, Member) : NULL ) + + +/** + * Enumerate the list in head to tail order. + * + * @param pList List to enumerate. + * @param pIterator The iterator variable name. + * @param Type Structure the list node is a member of. + * @param Member The list node member name. + */ +#define RTListForEach(pList, pIterator, Type, Member) \ + for (pIterator = RTListNodeGetNext(pList, Type, Member); \ + !RTListNodeIsDummy(pList, pIterator, Type, Member); \ + pIterator = RT_FROM_MEMBER((pIterator)->Member.pNext, Type, Member) ) +/** @copydoc RTListForEach */ +#define RTListForEachCpp(pList, pIterator, Type, Member) \ + for (pIterator = RTListNodeGetNextCpp(pList, Type, Member); \ + !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \ + pIterator = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member) ) + + +/** + * Enumerate the list in head to tail order, safe against removal of the + * current node. + * + * @param pList List to enumerate. + * @param pIterator The iterator variable name. + * @param pIterNext The name of the variable saving the pointer to + * the next element. + * @param Type Structure the list node is a member of. + * @param Member The list node member name. + */ +#define RTListForEachSafe(pList, pIterator, pIterNext, Type, Member) \ + for (pIterator = RTListNodeGetNext(pList, Type, Member), \ + pIterNext = RT_FROM_MEMBER((pIterator)->Member.pNext, Type, Member); \ + !RTListNodeIsDummy(pList, pIterator, Type, Member); \ + pIterator = pIterNext, \ + pIterNext = RT_FROM_MEMBER((pIterator)->Member.pNext, Type, Member) ) +/** @copydoc RTListForEachSafe */ +#define RTListForEachSafeCpp(pList, pIterator, pIterNext, Type, Member) \ + for (pIterator = RTListNodeGetNextCpp(pList, Type, Member), \ + pIterNext = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member); \ + !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \ + pIterator = pIterNext, \ + pIterNext = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member) ) + + +/** + * Enumerate the list in reverse order (tail to head). + * + * @param pList List to enumerate. + * @param pIterator The iterator variable name. + * @param Type Structure the list node is a member of. + * @param Member The list node member name. + */ +#define RTListForEachReverse(pList, pIterator, Type, Member) \ + for (pIterator = RTListNodeGetPrev(pList, Type, Member); \ + !RTListNodeIsDummy(pList, pIterator, Type, Member); \ + pIterator = RT_FROM_MEMBER((pIterator)->Member.pPrev, Type, Member) ) +/** @copydoc RTListForEachReverse */ +#define RTListForEachReverseCpp(pList, pIterator, Type, Member) \ + for (pIterator = RTListNodeGetPrevCpp(pList, Type, Member); \ + !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \ + pIterator = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member) ) + + +/** + * Enumerate the list in reverse order (tail to head). + * + * @param pList List to enumerate. + * @param pIterator The iterator variable name. + * @param pIterPrev The name of the variable saving the pointer to + * the previous element. + * @param Type Structure the list node is a member of. + * @param Member The list node member name. + */ +#define RTListForEachReverseSafe(pList, pIterator, pIterPrev, Type, Member) \ + for (pIterator = RTListNodeGetPrev(pList, Type, Member), \ + pIterPrev = RT_FROM_MEMBER((pIterator)->Member.pPrev, Type, Member); \ + !RTListNodeIsDummy(pList, pIterator, Type, Member); \ + pIterator = pIterPrev, \ + pIterPrev = RT_FROM_MEMBER((pIterator)->Member.pPrev, Type, Member) ) +/** @copydoc RTListForEachReverseSafe */ +#define RTListForEachReverseSafeCpp(pList, pIterator, pIterPrev, Type, Member) \ + for (pIterator = RTListNodeGetPrevCpp(pList, Type, Member), \ + pIterPrev = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member); \ + !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \ + pIterator = pIterPrev, \ + pIterPrev = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member) ) + + +/** + * Move the given list to a new list header. + * + * @param pListDst The new list. + * @param pListSrc The list to move. + */ +DECLINLINE(void) RTListMove(PRTLISTNODE pListDst, PRTLISTNODE pListSrc) +{ + if (!RTListIsEmpty(pListSrc)) + { + pListDst->pNext = pListSrc->pNext; + pListDst->pPrev = pListSrc->pPrev; + + /* Adjust the first and last element links */ + pListDst->pNext->pPrev = pListDst; + pListDst->pPrev->pNext = pListDst; + + /* Finally remove the elements from the source list */ + RTListInit(pListSrc); + } +} + +/** + * List concatenation. + * + * @returns nothing. + * @param pListDst The destination list. + * @param pListSrc The source list to concatenate. + */ +DECLINLINE(void) RTListConcatenate(PRTLISTANCHOR pListDst, PRTLISTANCHOR pListSrc) +{ + if (!RTListIsEmpty(pListSrc)) + { + PRTLISTNODE pFirst = pListSrc->pNext; + PRTLISTNODE pLast = pListSrc->pPrev; + + pListDst->pPrev->pNext = pFirst; + pFirst->pPrev = pListDst->pPrev; + pLast->pNext = pListDst; + pListDst->pPrev = pLast; + + /* Finally remove the elements from the source list */ + RTListInit(pListSrc); + } +} + +RT_C_DECLS_END + +/** @} */ + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/lockvalidator.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/lockvalidator.h @@ -0,0 +1,1130 @@ +/** @file + * IPRT - Lock Validator. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_lockvalidator_h +#define ___iprt_lockvalidator_h + +#include +#include +#include +#include +#include + + +/** @defgroup grp_rtlockval RTLockValidator - Lock Validator + * @ingroup grp_rt + * @{ + */ + +RT_C_DECLS_BEGIN + +/** Pointer to a record union. + * @internal */ +typedef union RTLOCKVALRECUNION *PRTLOCKVALRECUNION; + +/** + * Source position. + */ +typedef struct RTLOCKVALSRCPOS +{ + /** The file where the lock was taken. */ + R3R0PTRTYPE(const char * volatile) pszFile; + /** The function where the lock was taken. */ + R3R0PTRTYPE(const char * volatile) pszFunction; + /** Some ID indicating where the lock was taken, typically an address. */ + RTHCUINTPTR volatile uId; + /** The line number in the file. */ + uint32_t volatile uLine; +#if HC_ARCH_BITS == 64 + uint32_t u32Padding; /**< Alignment padding. */ +#endif +} RTLOCKVALSRCPOS; +AssertCompileSize(RTLOCKVALSRCPOS, HC_ARCH_BITS == 32 ? 16 : 32); +/* The pointer types are defined in iprt/types.h. */ + +/** @def RTLOCKVALSRCPOS_INIT + * Initializer for a RTLOCKVALSRCPOS variable. + * + * @param pszFile The file name. Optional (NULL). + * @param uLine The line number in that file. Optional (0). + * @param pszFunction The function. Optional (NULL). + * @param uId Some location ID, normally the return address. + * Optional (NULL). + */ +#if HC_ARCH_BITS == 64 +# define RTLOCKVALSRCPOS_INIT(pszFile, uLine, pszFunction, uId) \ + { (pszFile), (pszFunction), (uId), (uLine), 0 } +#else +# define RTLOCKVALSRCPOS_INIT(pszFile, uLine, pszFunction, uId) \ + { (pszFile), (pszFunction), (uId), (uLine) } +#endif + +/** @def RTLOCKVALSRCPOS_INIT_DEBUG_API + * Initializer for a RTLOCKVALSRCPOS variable in a typicial debug API + * variant. Assumes RT_SRC_POS_DECL and RTHCUINTPTR uId as arguments. + */ +#define RTLOCKVALSRCPOS_INIT_DEBUG_API() \ + RTLOCKVALSRCPOS_INIT(pszFile, iLine, pszFunction, uId) + +/** @def RTLOCKVALSRCPOS_INIT_NORMAL_API + * Initializer for a RTLOCKVALSRCPOS variable in a normal API + * variant. Assumes iprt/asm.h is included. + */ +#define RTLOCKVALSRCPOS_INIT_NORMAL_API() \ + RTLOCKVALSRCPOS_INIT(__FILE__, __LINE__, __PRETTY_FUNCTION__, (uintptr_t)ASMReturnAddress()) + +/** @def RTLOCKVALSRCPOS_INIT_POS_NO_ID + * Initializer for a RTLOCKVALSRCPOS variable when no @c uId is present. + * Assumes iprt/asm.h is included. + */ +#define RTLOCKVALSRCPOS_INIT_POS_NO_ID() \ + RTLOCKVALSRCPOS_INIT(pszFile, iLine, pszFunction, (uintptr_t)ASMReturnAddress()) + + +/** + * Lock validator record core. + */ +typedef struct RTLOCKVALRECORE +{ + /** The magic value indicating the record type. */ + uint32_t volatile u32Magic; +} RTLOCKVALRECCORE; +/** Pointer to a lock validator record core. */ +typedef RTLOCKVALRECCORE *PRTLOCKVALRECCORE; +/** Pointer to a const lock validator record core. */ +typedef RTLOCKVALRECCORE const *PCRTLOCKVALRECCORE; + + +/** + * Record recording the exclusive ownership of a lock. + * + * This is typically part of the per-lock data structure when compiling with + * the lock validator. + */ +typedef struct RTLOCKVALRECEXCL +{ + /** Record core with RTLOCKVALRECEXCL_MAGIC as the magic value. */ + RTLOCKVALRECCORE Core; + /** Whether it's enabled or not. */ + bool fEnabled; + /** Reserved. */ + bool afReserved[3]; + /** Source position where the lock was taken. */ + RTLOCKVALSRCPOS SrcPos; + /** The current owner thread. */ + RTTHREAD volatile hThread; + /** Pointer to the lock record below us. Only accessed by the owner. */ + R3R0PTRTYPE(PRTLOCKVALRECUNION) pDown; + /** Recursion count */ + uint32_t cRecursion; + /** The lock sub-class. */ + uint32_t volatile uSubClass; + /** The lock class. */ + RTLOCKVALCLASS hClass; + /** Pointer to the lock. */ + RTHCPTR hLock; + /** Pointer to the next sibling record. + * This is used to find the read side of a read-write lock. */ + R3R0PTRTYPE(PRTLOCKVALRECUNION) pSibling; + /** The lock name. + * @remarks The bytes beyond 32 are for better size alignment and can be + * taken and used for other purposes if it becomes necessary. */ + char szName[32 + (HC_ARCH_BITS == 32 ? 12 : 8)]; +} RTLOCKVALRECEXCL; +AssertCompileSize(RTLOCKVALRECEXCL, HC_ARCH_BITS == 32 ? 0x60 : 0x80); +/* The pointer type is defined in iprt/types.h. */ + +/** + * For recording the one ownership share. + */ +typedef struct RTLOCKVALRECSHRDOWN +{ + /** Record core with RTLOCKVALRECSHRDOWN_MAGIC as the magic value. */ + RTLOCKVALRECCORE Core; + /** Recursion count */ + uint16_t cRecursion; + /** Static (true) or dynamic (false) allocated record. */ + bool fStaticAlloc; + /** Reserved. */ + bool fReserved; + /** The current owner thread. */ + RTTHREAD volatile hThread; + /** Pointer to the lock record below us. Only accessed by the owner. */ + R3R0PTRTYPE(PRTLOCKVALRECUNION) pDown; + /** Pointer back to the shared record. */ + R3R0PTRTYPE(PRTLOCKVALRECSHRD) pSharedRec; +#if HC_ARCH_BITS == 32 + /** Reserved. */ + RTHCPTR pvReserved; +#endif + /** Source position where the lock was taken. */ + RTLOCKVALSRCPOS SrcPos; +} RTLOCKVALRECSHRDOWN; +AssertCompileSize(RTLOCKVALRECSHRDOWN, HC_ARCH_BITS == 32 ? 24 + 16 : 32 + 32); +/** Pointer to a RTLOCKVALRECSHRDOWN. */ +typedef RTLOCKVALRECSHRDOWN *PRTLOCKVALRECSHRDOWN; + +/** + * Record recording the shared ownership of a lock. + * + * This is typically part of the per-lock data structure when compiling with + * the lock validator. + */ +typedef struct RTLOCKVALRECSHRD +{ + /** Record core with RTLOCKVALRECSHRD_MAGIC as the magic value. */ + RTLOCKVALRECCORE Core; + /** The lock sub-class. */ + uint32_t volatile uSubClass; + /** The lock class. */ + RTLOCKVALCLASS hClass; + /** Pointer to the lock. */ + RTHCPTR hLock; + /** Pointer to the next sibling record. + * This is used to find the write side of a read-write lock. */ + R3R0PTRTYPE(PRTLOCKVALRECUNION) pSibling; + + /** The number of entries in the table. + * Updated before inserting and after removal. */ + uint32_t volatile cEntries; + /** The index of the last entry (approximately). */ + uint32_t volatile iLastEntry; + /** The max table size. */ + uint32_t volatile cAllocated; + /** Set if the table is being reallocated, clear if not. + * This is used together with rtLockValidatorSerializeDetectionEnter to make + * sure there is exactly one thread doing the reallocation and that nobody is + * using the table at that point. */ + bool volatile fReallocating; + /** Whether it's enabled or not. */ + bool fEnabled; + /** Set if event semaphore signaller, clear if read-write semaphore. */ + bool fSignaller; + /** Alignment padding. */ + bool fPadding; + /** Pointer to a table containing pointers to records of all the owners. */ + R3R0PTRTYPE(PRTLOCKVALRECSHRDOWN volatile *) papOwners; + + /** The lock name. + * @remarks The bytes beyond 32 are for better size alignment and can be + * taken and used for other purposes if it becomes necessary. */ + char szName[32 + (HC_ARCH_BITS == 32 ? 8 : 8)]; +} RTLOCKVALRECSHRD; +AssertCompileSize(RTLOCKVALRECSHRD, HC_ARCH_BITS == 32 ? 0x50 : 0x60); + + +/** + * Makes the two records siblings. + * + * @returns VINF_SUCCESS on success, VERR_SEM_LV_INVALID_PARAMETER if either of + * the records are invalid. + * @param pRec1 Record 1. + * @param pRec2 Record 2. + */ +RTDECL(int) RTLockValidatorRecMakeSiblings(PRTLOCKVALRECCORE pRec1, PRTLOCKVALRECCORE pRec2); + +/** + * Initialize a lock validator record. + * + * Use RTLockValidatorRecExclDelete to deinitialize it. + * + * @param pRec The record. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(void) RTLockValidatorRecExclInit(PRTLOCKVALRECEXCL pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, void *hLock, + bool fEnabled, const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(6, 7); +/** + * Initialize a lock validator record. + * + * Use RTLockValidatorRecExclDelete to deinitialize it. + * + * @param pRec The record. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param va Format string arguments. + */ +RTDECL(void) RTLockValidatorRecExclInitV(PRTLOCKVALRECEXCL pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, void *hLock, + bool fEnabled, const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(6, 0); +/** + * Uninitialize a lock validator record previously initialized by + * RTLockRecValidatorInit. + * + * @param pRec The record. Must be valid. + */ +RTDECL(void) RTLockValidatorRecExclDelete(PRTLOCKVALRECEXCL pRec); + +/** + * Create and initialize a lock validator record. + * + * Use RTLockValidatorRecExclDestroy to deinitialize and destroy the returned + * record. + * + * @return VINF_SUCCESS or VERR_NO_MEMORY. + * @param ppRec Where to return the record pointer. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTLockValidatorRecExclCreate(PRTLOCKVALRECEXCL *ppRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, void *hLock, + bool fEnabled, const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(6, 7); + +/** + * Create and initialize a lock validator record. + * + * Use RTLockValidatorRecExclDestroy to deinitialize and destroy the returned + * record. + * + * @return VINF_SUCCESS or VERR_NO_MEMORY. + * @param ppRec Where to return the record pointer. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param va Format string arguments. + */ +RTDECL(int) RTLockValidatorRecExclCreateV(PRTLOCKVALRECEXCL *ppRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, void *hLock, + bool fEnabled, const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(6, 0); + +/** + * Deinitialize and destroy a record created by RTLockValidatorRecExclCreate. + * + * @param ppRec Pointer to the record pointer. Will be set to + * NULL. + */ +RTDECL(void) RTLockValidatorRecExclDestroy(PRTLOCKVALRECEXCL *ppRec); + +/** + * Sets the sub-class of the record. + * + * It is recommended to try make sure that nobody is using this class while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param pRec The validator record. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTLockValidatorRecExclSetSubClass(PRTLOCKVALRECEXCL pRec, uint32_t uSubClass); + +/** + * Record the specified thread as lock owner and increment the write lock count. + * + * This function is typically called after acquiring the lock. It accounts for + * recursions so it can be used instead of RTLockValidatorRecExclRecursion. Use + * RTLockValidatorRecExclReleaseOwner to reverse the effect. + * + * @param pRec The validator record. + * @param hThreadSelf The handle of the calling thread. If not known, + * pass NIL_RTTHREAD and we'll figure it out. + * @param pSrcPos The source position of the lock operation. + * @param fFirstRecursion Set if it is the first recursion, clear if not + * sure. + */ +RTDECL(void) RTLockValidatorRecExclSetOwner(PRTLOCKVALRECEXCL pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, bool fFirstRecursion); + +/** + * Check the exit order and release (unset) the ownership. + * + * This is called by routines implementing releasing an exclusive lock, + * typically before getting down to the final lock releasing. Can be used for + * recursive releasing instead of RTLockValidatorRecExclUnwind. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_RELEASE_ORDER if the order is wrong. Will have + * done all necessary whining and breakpointing before returning. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param fFinalRecursion Set if it's the final recursion, clear if not + * sure. + */ +RTDECL(int) RTLockValidatorRecExclReleaseOwner(PRTLOCKVALRECEXCL pRec, bool fFinalRecursion); + +/** + * Clear the lock ownership and decrement the write lock count. + * + * This is only for special cases where we wish to drop lock validation + * recording. See RTLockValidatorRecExclCheckAndRelease. + * + * @param pRec The validator record. + */ +RTDECL(void) RTLockValidatorRecExclReleaseOwnerUnchecked(PRTLOCKVALRECEXCL pRec); + +/** + * Checks and records a lock recursion. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_NESTED if the semaphore class forbids recursion. Gone + * thru the motions. + * @retval VERR_SEM_LV_WRONG_ORDER if the locking order is wrong. Gone thru + * the motions. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param pSrcPos The source position of the lock operation. + */ +RTDECL(int) RTLockValidatorRecExclRecursion(PRTLOCKVALRECEXCL pRec, PCRTLOCKVALSRCPOS pSrcPos); + +/** + * Checks and records a lock unwind (releasing one recursion). + * + * This should be coupled with called to RTLockValidatorRecExclRecursion. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_RELEASE_ORDER if the release order is wrong. Gone + * thru the motions. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + */ +RTDECL(int) RTLockValidatorRecExclUnwind(PRTLOCKVALRECEXCL pRec); + +/** + * Checks and records a mixed recursion. + * + * An example of a mixed recursion is a writer requesting read access to a + * SemRW. + * + * This should be coupled with called to RTLockValidatorRecExclUnwindMixed. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_NESTED if the semaphore class forbids recursion. Gone + * thru the motions. + * @retval VERR_SEM_LV_WRONG_ORDER if the locking order is wrong. Gone thru + * the motions. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record it to accounted it to. + * @param pRecMixed The validator record it came in on. + * @param pSrcPos The source position of the lock operation. + */ +RTDECL(int) RTLockValidatorRecExclRecursionMixed(PRTLOCKVALRECEXCL pRec, PRTLOCKVALRECCORE pRecMixed, PCRTLOCKVALSRCPOS pSrcPos); + +/** + * Checks and records the unwinding of a mixed recursion. + * + * This should be coupled with called to RTLockValidatorRecExclRecursionMixed. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_RELEASE_ORDER if the release order is wrong. Gone + * thru the motions. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record it was accounted to. + * @param pRecMixed The validator record it came in on. + */ +RTDECL(int) RTLockValidatorRecExclUnwindMixed(PRTLOCKVALRECEXCL pRec, PRTLOCKVALRECCORE pRecMixed); + +/** + * Check the exclusive locking order. + * + * This is called by routines implementing exclusive lock acquisition. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_ORDER if the order is wrong. Will have done all + * necessary whining and breakpointing before returning. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param hThreadSelf The handle of the calling thread. If not known, + * pass NIL_RTTHREAD and we'll figure it out. + * @param pSrcPos The source position of the lock operation. + * @param cMillies The timeout, in milliseconds. + */ +RTDECL(int) RTLockValidatorRecExclCheckOrder(PRTLOCKVALRECEXCL pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, RTMSINTERVAL cMillies); + +/** + * Do deadlock detection before blocking on exclusive access to a lock and + * change the thread state. + * + * @retval VINF_SUCCESS - thread is in the specified sleep state. + * @retval VERR_SEM_LV_DEADLOCK if blocking would deadlock. Gone thru the + * motions. + * @retval VERR_SEM_LV_NESTED if the semaphore isn't recursive and hThread is + * already the owner. Gone thru the motions. + * @retval VERR_SEM_LV_ILLEGAL_UPGRADE if it's a deadlock on the same lock. + * The caller must handle any legal upgrades without invoking this + * function (for now). + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record we're blocking on. + * @param hThreadSelf The current thread. Shall not be NIL_RTTHREAD! + * @param pSrcPos The source position of the lock operation. + * @param fRecursiveOk Whether it's ok to recurse. + * @param cMillies The timeout, in milliseconds. + * @param enmSleepState The sleep state to enter on successful return. + * @param fReallySleeping Is it really going to sleep now or not. Use + * false before calls to other IPRT synchronization + * methods. + */ +RTDECL(int) RTLockValidatorRecExclCheckBlocking(PRTLOCKVALRECEXCL pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, bool fRecursiveOk, RTMSINTERVAL cMillies, + RTTHREADSTATE enmSleepState, bool fReallySleeping); + +/** + * RTLockValidatorRecExclCheckOrder and RTLockValidatorRecExclCheckBlocking + * baked into one call. + * + * @returns Any of the statuses returned by the two APIs. + * @param pRec The validator record. + * @param hThreadSelf The current thread. Shall not be NIL_RTTHREAD! + * @param pSrcPos The source position of the lock operation. + * @param fRecursiveOk Whether it's ok to recurse. + * @param cMillies The timeout, in milliseconds. + * @param enmSleepState The sleep state to enter on successful return. + * @param fReallySleeping Is it really going to sleep now or not. Use + * false before calls to other IPRT synchronization + * methods. + */ +RTDECL(int) RTLockValidatorRecExclCheckOrderAndBlocking(PRTLOCKVALRECEXCL pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, bool fRecursiveOk, RTMSINTERVAL cMillies, + RTTHREADSTATE enmSleepState, bool fReallySleeping); + +/** + * Initialize a lock validator record for a shared lock. + * + * Use RTLockValidatorRecSharedDelete to deinitialize it. + * + * @param pRec The shared lock record. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fSignaller Set if event semaphore signaller logic should be + * applied to this record, clear if read-write + * semaphore logic should be used. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(void) RTLockValidatorRecSharedInit(PRTLOCKVALRECSHRD pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, + void *hLock, bool fSignaller, bool fEnabled, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(7, 8); + +/** + * Initialize a lock validator record for a shared lock. + * + * Use RTLockValidatorRecSharedDelete to deinitialize it. + * + * @param pRec The shared lock record. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param hLock The lock handle. + * @param fSignaller Set if event semaphore signaller logic should be + * applied to this record, clear if read-write + * semaphore logic should be used. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param va Format string arguments. + */ +RTDECL(void) RTLockValidatorRecSharedInitV(PRTLOCKVALRECSHRD pRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, + void *hLock, bool fSignaller, bool fEnabled, + const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(7, 0); + +/** + * Uninitialize a lock validator record previously initialized by + * RTLockValidatorRecSharedInit. + * + * @param pRec The shared lock record. Must be valid. + */ +RTDECL(void) RTLockValidatorRecSharedDelete(PRTLOCKVALRECSHRD pRec); + +/** + * Create and initialize a lock validator record for a shared lock. + * + * Use RTLockValidatorRecSharedDestroy to deinitialize and destroy the returned + * record. + * + * @returns IPRT status code. + * @param ppRec Where to return the record pointer. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param pvLock The lock handle or address. + * @param fSignaller Set if event semaphore signaller logic should be + * applied to this record, clear if read-write + * semaphore logic should be used. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTLockValidatorRecSharedCreate(PRTLOCKVALRECSHRD *ppRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, + void *pvLock, bool fSignaller, bool fEnabled, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(7, 8); + +/** + * Create and initialize a lock validator record for a shared lock. + * + * Use RTLockValidatorRecSharedDestroy to deinitialize and destroy the returned + * record. + * + * @returns IPRT status code. + * @param ppRec Where to return the record pointer. + * @param hClass The class (no reference consumed). If NIL, the + * no lock order validation will be performed on + * this lock. + * @param uSubClass The sub-class. This is used to define lock + * order inside the same class. If you don't know, + * then pass RTLOCKVAL_SUB_CLASS_NONE. + * @param pvLock The lock handle or address. + * @param fSignaller Set if event semaphore signaller logic should be + * applied to this record, clear if read-write + * semaphore logic should be used. + * @param fEnabled Pass @c false to explicitly disable lock + * validation, otherwise @c true. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param va Format string arguments. + */ +RTDECL(int) RTLockValidatorRecSharedCreateV(PRTLOCKVALRECSHRD *ppRec, RTLOCKVALCLASS hClass, uint32_t uSubClass, + void *pvLock, bool fSignaller, bool fEnabled, + const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(7, 0); + +/** + * Deinitialize and destroy a record created by RTLockValidatorRecSharedCreate. + * + * @param ppRec Pointer to the record pointer. Will be set to + * NULL. + */ +RTDECL(void) RTLockValidatorRecSharedDestroy(PRTLOCKVALRECSHRD *ppRec); + +/** + * Sets the sub-class of the record. + * + * It is recommended to try make sure that nobody is using this class while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param pRec The validator record. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTLockValidatorRecSharedSetSubClass(PRTLOCKVALRECSHRD pRec, uint32_t uSubClass); + +/** + * Check the shared locking order. + * + * This is called by routines implementing shared lock acquisition. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_ORDER if the order is wrong. Will have done all + * necessary whining and breakpointing before returning. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param hThreadSelf The handle of the calling thread. If not known, + * pass NIL_RTTHREAD and we'll figure it out. + * @param pSrcPos The source position of the lock operation. + * @param cMillies Intended sleep time in milliseconds. + */ +RTDECL(int) RTLockValidatorRecSharedCheckOrder(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, RTMSINTERVAL cMillies); + +/** + * Do deadlock detection before blocking on shared access to a lock and change + * the thread state. + * + * @retval VINF_SUCCESS - thread is in the specified sleep state. + * @retval VERR_SEM_LV_DEADLOCK if blocking would deadlock. Gone thru the + * motions. + * @retval VERR_SEM_LV_NESTED if the semaphore isn't recursive and hThread is + * already the owner. Gone thru the motions. + * @retval VERR_SEM_LV_ILLEGAL_UPGRADE if it's a deadlock on the same lock. + * The caller must handle any legal upgrades without invoking this + * function (for now). + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record we're blocking on. + * @param hThreadSelf The current thread. Shall not be NIL_RTTHREAD! + * @param pSrcPos The source position of the lock operation. + * @param fRecursiveOk Whether it's ok to recurse. + * @param cMillies Intended sleep time in milliseconds. + * @param enmSleepState The sleep state to enter on successful return. + * @param fReallySleeping Is it really going to sleep now or not. Use + * false before calls to other IPRT synchronization + * methods. + */ +RTDECL(int) RTLockValidatorRecSharedCheckBlocking(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, bool fRecursiveOk, RTMSINTERVAL cMillies, + RTTHREADSTATE enmSleepState, bool fReallySleeping); + +/** + * RTLockValidatorRecSharedCheckOrder and RTLockValidatorRecSharedCheckBlocking + * baked into one call. + * + * @returns Any of the statuses returned by the two APIs. + * @param pRec The validator record. + * @param hThreadSelf The current thread. Shall not be NIL_RTTHREAD! + * @param pSrcPos The source position of the lock operation. + * @param fRecursiveOk Whether it's ok to recurse. + * @param cMillies Intended sleep time in milliseconds. + * @param enmSleepState The sleep state to enter on successful return. + * @param fReallySleeping Is it really going to sleep now or not. Use + * false before calls to other IPRT synchronization + * methods. + */ +RTDECL(int) RTLockValidatorRecSharedCheckOrderAndBlocking(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf, + PCRTLOCKVALSRCPOS pSrcPos, bool fRecursiveOk, RTMSINTERVAL cMillies, + RTTHREADSTATE enmSleepState, bool fReallySleeping); + +/** + * Removes all current owners and makes hThread the only owner. + * + * @param pRec The validator record. + * @param hThread The thread handle of the owner. NIL_RTTHREAD is + * an alias for the current thread. + * @param pSrcPos The source position of the lock operation. + */ +RTDECL(void) RTLockValidatorRecSharedResetOwner(PRTLOCKVALRECSHRD pRec, RTTHREAD hThread, PCRTLOCKVALSRCPOS pSrcPos); + +/** + * Adds an owner to a shared locking record. + * + * Takes recursion into account. This function is typically called after + * acquiring the lock in shared mode. + * + * @param pRec The validator record. + * @param hThread The thread handle of the owner. NIL_RTTHREAD is + * an alias for the current thread. + * @param pSrcPos The source position of the lock operation. + */ +RTDECL(void) RTLockValidatorRecSharedAddOwner(PRTLOCKVALRECSHRD pRec, RTTHREAD hThread, PCRTLOCKVALSRCPOS pSrcPos); + +/** + * Removes an owner from a shared locking record. + * + * Takes recursion into account. This function is typically called before + * releasing the lock. + * + * @param pRec The validator record. + * @param hThread The thread handle of the owner. NIL_RTTHREAD is + * an alias for the current thread. + */ +RTDECL(void) RTLockValidatorRecSharedRemoveOwner(PRTLOCKVALRECSHRD pRec, RTTHREAD hThread); + +/** + * Checks if the specified thread is one of the owners. + * + * @returns true if it is, false if not. + * + * @param pRec The validator record. + * @param hThread The thread handle of the owner. NIL_RTTHREAD is + * an alias for the current thread. + */ +RTDECL(bool) RTLockValidatorRecSharedIsOwner(PRTLOCKVALRECSHRD pRec, RTTHREAD hThread); + +/** + * Check the exit order and release (unset) the shared ownership. + * + * This is called by routines implementing releasing the read/write lock. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_WRONG_RELEASE_ORDER if the order is wrong. Will have + * done all necessary whining and breakpointing before returning. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param hThreadSelf The handle of the calling thread. NIL_RTTHREAD + * is an alias for the current thread. + */ +RTDECL(int) RTLockValidatorRecSharedCheckAndRelease(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf); + +/** + * Check the signaller of an event. + * + * This is called by routines implementing releasing the event semaphore (both + * kinds). + * + * @retval VINF_SUCCESS on success. + * @retval VERR_SEM_LV_NOT_SIGNALLER if the thread is not in the record. Will + * have done all necessary whining and breakpointing before returning. + * @retval VERR_SEM_LV_INVALID_PARAMETER if the input is invalid. + * + * @param pRec The validator record. + * @param hThreadSelf The handle of the calling thread. NIL_RTTHREAD + * is an alias for the current thread. + */ +RTDECL(int) RTLockValidatorRecSharedCheckSignaller(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf); + +/** + * Gets the number of write locks and critical sections the specified + * thread owns. + * + * This number does not include any nested lock/critect entries. + * + * Note that it probably will return 0 for non-strict builds since + * release builds doesn't do unnecessary diagnostic counting like this. + * + * @returns Number of locks on success (0+) and VERR_INVALID_HANDLER on failure + * @param Thread The thread we're inquiring about. + * @remarks Will only work for strict builds. + */ +RTDECL(int32_t) RTLockValidatorWriteLockGetCount(RTTHREAD Thread); + +/** + * Works the THREADINT::cWriteLocks member, mostly internal. + * + * @param Thread The current thread. + */ +RTDECL(void) RTLockValidatorWriteLockInc(RTTHREAD Thread); + +/** + * Works the THREADINT::cWriteLocks member, mostly internal. + * + * @param Thread The current thread. + */ +RTDECL(void) RTLockValidatorWriteLockDec(RTTHREAD Thread); + +/** + * Gets the number of read locks the specified thread owns. + * + * Note that nesting read lock entry will be included in the + * total sum. And that it probably will return 0 for non-strict + * builds since release builds doesn't do unnecessary diagnostic + * counting like this. + * + * @returns Number of read locks on success (0+) and VERR_INVALID_HANDLER on failure + * @param Thread The thread we're inquiring about. + */ +RTDECL(int32_t) RTLockValidatorReadLockGetCount(RTTHREAD Thread); + +/** + * Works the THREADINT::cReadLocks member. + * + * @param Thread The current thread. + */ +RTDECL(void) RTLockValidatorReadLockInc(RTTHREAD Thread); + +/** + * Works the THREADINT::cReadLocks member. + * + * @param Thread The current thread. + */ +RTDECL(void) RTLockValidatorReadLockDec(RTTHREAD Thread); + +/** + * Query which lock the specified thread is waiting on. + * + * @returns The lock handle value or NULL. + * @param hThread The thread in question. + */ +RTDECL(void *) RTLockValidatorQueryBlocking(RTTHREAD hThread); + +/** + * Checks if the thread is running in the lock validator after it has entered a + * block state. + * + * @returns true if it is, false if it isn't. + * @param hThread The thread in question. + */ +RTDECL(bool) RTLockValidatorIsBlockedThreadInValidator(RTTHREAD hThread); + +/** + * Checks if the calling thread is holding a lock in the specified class. + * + * @returns true if it holds a lock in the specific class, false if it + * doesn't. + * + * @param hCurrentThread The current thread. Pass NIL_RTTHREAD if you're + * lazy. + * @param hClass The class. + */ +RTDECL(bool) RTLockValidatorHoldsLocksInClass(RTTHREAD hCurrentThread, RTLOCKVALCLASS hClass); + +/** + * Checks if the calling thread is holding a lock in the specified sub-class. + * + * @returns true if it holds a lock in the specific sub-class, false if it + * doesn't. + * + * @param hCurrentThread The current thread. Pass NIL_RTTHREAD if you're + * lazy. + * @param hClass The class. + * @param uSubClass The new sub-class value. + */ +RTDECL(bool) RTLockValidatorHoldsLocksInSubClass(RTTHREAD hCurrentThread, RTLOCKVALCLASS hClass, uint32_t uSubClass); + + + +/** + * Creates a new lock validator class, all properties specified. + * + * @returns IPRT status code + * @param phClass Where to return the class handle. + * @param pSrcPos The source position of the create call. + * @param fAutodidact Whether the class should be allowed to teach + * itself new locking order rules (true), or if the + * user will teach it all it needs to know (false). + * @param fRecursionOk Whether to allow lock recursion or not. + * @param fStrictReleaseOrder Enforce strict lock release order or not. + * @param cMsMinDeadlock Used to raise the sleep interval at which + * deadlock detection kicks in. Minimum is 1 ms, + * while RT_INDEFINITE_WAIT will disable it. + * @param cMsMinOrder Used to raise the sleep interval at which lock + * order validation kicks in. Minimum is 1 ms, + * while RT_INDEFINITE_WAIT will disable it. + * @param pszNameFmt Class name format string, optional (NULL). Max + * length is 32 bytes. + * @param ... Format string arguments. + * + * @remarks The properties can be modified after creation by the + * RTLockValidatorClassSet* methods. + */ +RTDECL(int) RTLockValidatorClassCreateEx(PRTLOCKVALCLASS phClass, PCRTLOCKVALSRCPOS pSrcPos, + bool fAutodidact, bool fRecursionOk, bool fStrictReleaseOrder, + RTMSINTERVAL cMsMinDeadlock, RTMSINTERVAL cMsMinOrder, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(8, 9); + +/** + * Creates a new lock validator class, all properties specified. + * + * @returns IPRT status code + * @param phClass Where to return the class handle. + * @param pSrcPos The source position of the create call. + * @param fAutodidact Whether the class should be allowed to teach + * itself new locking order rules (true), or if the + * user will teach it all it needs to know (false). + * @param fRecursionOk Whether to allow lock recursion or not. + * @param fStrictReleaseOrder Enforce strict lock release order or not. + * @param cMsMinDeadlock Used to raise the sleep interval at which + * deadlock detection kicks in. Minimum is 1 ms, + * while RT_INDEFINITE_WAIT will disable it. + * @param cMsMinOrder Used to raise the sleep interval at which lock + * order validation kicks in. Minimum is 1 ms, + * while RT_INDEFINITE_WAIT will disable it. + * @param pszNameFmt Class name format string, optional (NULL). Max + * length is 32 bytes. + * @param va Format string arguments. + * + * @remarks The properties can be modified after creation by the + * RTLockValidatorClassSet* methods. + */ +RTDECL(int) RTLockValidatorClassCreateExV(PRTLOCKVALCLASS phClass, PCRTLOCKVALSRCPOS pSrcPos, + bool fAutodidact, bool fRecursionOk, bool fStrictReleaseOrder, + RTMSINTERVAL cMsMinDeadlock, RTMSINTERVAL cMsMinOrder, + const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(8, 0); + +/** + * Creates a new lock validator class. + * + * @returns IPRT status code + * @param phClass Where to return the class handle. + * @param fAutodidact Whether the class should be allowed to teach + * itself new locking order rules (true), or if the + * user will teach it all it needs to know (false). + * @param SRC_POS The source position where call is being made from. + * Use RT_SRC_POS when possible. Optional. + * @param pszNameFmt Class name format string, optional (NULL). Max + * length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTLockValidatorClassCreate(PRTLOCKVALCLASS phClass, bool fAutodidact, RT_SRC_POS_DECL, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(6, 7); + +/** + * Creates a new lock validator class with a reference that is consumed by the + * first call to RTLockValidatorClassRetain. + * + * This is tailored for use in the parameter list of a semaphore constructor. + * + * @returns Class handle with a reference that is automatically consumed by the + * first retainer. NIL_RTLOCKVALCLASS if we run into trouble. + * + * @param SRC_POS The source position where call is being made from. + * Use RT_SRC_POS when possible. Optional. + * @param pszNameFmt Class name format string, optional (NULL). Max + * length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(RTLOCKVALCLASS) RTLockValidatorClassCreateUnique(RT_SRC_POS_DECL, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** + * Finds a class for the specified source position. + * + * @returns A handle to the class (not retained!) or NIL_RTLOCKVALCLASS. + * @param pSrcPos The source position. + */ +RTDECL(RTLOCKVALCLASS) RTLockValidatorClassFindForSrcPos(PRTLOCKVALSRCPOS pSrcPos); + +/** + * Finds or creates a class given the source position. + * + * @returns Class handle (not retained!) or NIL_RTLOCKVALCLASS. + * @param SRC_POS The source position where call is being made from. + * Use RT_SRC_POS when possible. Optional. + * @param pszNameFmt Class name format string, optional (NULL). Max + * length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(RTLOCKVALCLASS) RTLockValidatorClassForSrcPos(RT_SRC_POS_DECL, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** + * Retains a reference to a lock validator class. + * + * @returns New reference count; UINT32_MAX if the handle is invalid. + * @param hClass Handle to the class. + */ +RTDECL(uint32_t) RTLockValidatorClassRetain(RTLOCKVALCLASS hClass); + +/** + * Releases a reference to a lock validator class. + * + * @returns New reference count. 0 if hClass is NIL_RTLOCKVALCLASS. UINT32_MAX + * if the handle is invalid. + * @param hClass Handle to the class. + */ +RTDECL(uint32_t) RTLockValidatorClassRelease(RTLOCKVALCLASS hClass); + +/** + * Teaches the class @a hClass that locks in the class @a hPriorClass can be + * held when taking a lock of class @a hClass + * + * @returns IPRT status. + * @param hClass Handle to the pupil class. + * @param hPriorClass Handle to the class that can be held prior to + * taking a lock in the pupil class. (No reference + * is consumed.) + */ +RTDECL(int) RTLockValidatorClassAddPriorClass(RTLOCKVALCLASS hClass, RTLOCKVALCLASS hPriorClass); + +/** + * Enables or disables the strict release order enforcing. + * + * @returns IPRT status. + * @param hClass Handle to the class to change. + * @param fEnabled Enable it (true) or disable it (false). + */ +RTDECL(int) RTLockValidatorClassEnforceStrictReleaseOrder(RTLOCKVALCLASS hClass, bool fEnabled); + +/** + * Enables / disables the lock validator for new locks. + * + * @returns The old setting. + * @param fEnabled The new setting. + */ +RTDECL(bool) RTLockValidatorSetEnabled(bool fEnabled); + +/** + * Is the lock validator enabled? + * + * @returns True if enabled, false if not. + */ +RTDECL(bool) RTLockValidatorIsEnabled(void); + +/** + * Controls whether the lock validator should be quiet or noisy (default). + * + * @returns The old setting. + * @param fQuiet The new setting. + */ +RTDECL(bool) RTLockValidatorSetQuiet(bool fQuiet); + +/** + * Is the lock validator quiet or noisy? + * + * @returns True if it is quiet, false if noisy. + */ +RTDECL(bool) RTLockValidatorIsQuiet(void); + +/** + * Makes the lock validator panic (default) or not. + * + * @returns The old setting. + * @param fPanic The new setting. + */ +RTDECL(bool) RTLockValidatorSetMayPanic(bool fPanic); + +/** + * Can the lock validator cause panic. + * + * @returns True if it can, false if not. + */ +RTDECL(bool) RTLockValidatorMayPanic(void); + + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/log.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/log.h @@ -0,0 +1,2568 @@ +/** @file + * IPRT - Logging. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_log_h +#define ___iprt_log_h + +#include +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_log RTLog - Logging + * @ingroup grp_rt + * @{ + */ + +/** + * IPRT Logging Groups. + * (Remember to update RT_LOGGROUP_NAMES!) + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +typedef enum RTLOGGROUP +{ + /** Default logging group. */ + RTLOGGROUP_DEFAULT, + RTLOGGROUP_CRYPTO, + RTLOGGROUP_DBG, + RTLOGGROUP_DBG_DWARF, + RTLOGGROUP_DIR, + RTLOGGROUP_FILE, + RTLOGGROUP_FS, + RTLOGGROUP_HTTP, + RTLOGGROUP_LDR, + RTLOGGROUP_PATH, + RTLOGGROUP_PROCESS, + RTLOGGROUP_SYMLINK, + RTLOGGROUP_THREAD, + RTLOGGROUP_TIME, + RTLOGGROUP_TIMER, + RTLOGGROUP_LOCALIPC, + RTLOGGROUP_VFS, + RTLOGGROUP_ZIP = 31, + RTLOGGROUP_FIRST_USER = 32 +} RTLOGGROUP; + +/** @def RT_LOGGROUP_NAMES + * IPRT Logging group names. + * + * Must correspond 100% to RTLOGGROUP! + * Don't forget commas! + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +#define RT_LOGGROUP_NAMES \ + "DEFAULT", \ + "RT_CRYPTO", \ + "RT_DBG", \ + "RT_DBG_DWARF", \ + "RT_DIR", \ + "RT_FILE", \ + "RT_FS", \ + "RT_HTTP", \ + "RT_LDR", \ + "RT_PATH", \ + "RT_PROCESS", \ + "RT_SYMLINK", \ + "RT_THREAD", \ + "RT_TIME", \ + "RT_TIMER", \ + "RT_LOCALIPC", \ + "RT_VFS", \ + "RT_17", \ + "RT_18", \ + "RT_19", \ + "RT_20", \ + "RT_21", \ + "RT_22", \ + "RT_23", \ + "RT_24", \ + "RT_25", \ + "RT_26", \ + "RT_27", \ + "RT_28", \ + "RT_29", \ + "RT_30", \ + "RT_ZIP" \ + + +/** @def LOG_GROUP + * Active logging group. + */ +#ifndef LOG_GROUP +# define LOG_GROUP RTLOGGROUP_DEFAULT +#endif + +/** @def LOG_FN_FMT + * You can use this to specify you desired way of printing __PRETTY_FUNCTION__ + * if you dislike the default one. + */ +#ifndef LOG_FN_FMT +# define LOG_FN_FMT "%Rfn" +#endif + +#ifdef LOG_INSTANCE +# error "LOG_INSTANCE is no longer supported." +#endif +#ifdef LOG_REL_INSTANCE +# error "LOG_REL_INSTANCE is no longer supported." +#endif + +/** Logger structure. */ +#ifdef IN_RC +typedef struct RTLOGGERRC RTLOGGER; +#else +typedef struct RTLOGGER RTLOGGER; +#endif +/** Pointer to logger structure. */ +typedef RTLOGGER *PRTLOGGER; +/** Pointer to const logger structure. */ +typedef const RTLOGGER *PCRTLOGGER; + + +/** Guest context logger structure. */ +typedef struct RTLOGGERRC RTLOGGERRC; +/** Pointer to guest context logger structure. */ +typedef RTLOGGERRC *PRTLOGGERRC; +/** Pointer to const guest context logger structure. */ +typedef const RTLOGGERRC *PCRTLOGGERRC; + + +/** + * Logger phase. + * + * Used for signalling the log header/footer callback what to do. + */ +typedef enum RTLOGPHASE +{ + /** Begin of the logging. */ + RTLOGPHASE_BEGIN = 0, + /** End of the logging. */ + RTLOGPHASE_END, + /** Before rotating the log file. */ + RTLOGPHASE_PREROTATE, + /** After rotating the log file. */ + RTLOGPHASE_POSTROTATE, + /** 32-bit type blow up hack. */ + RTLOGPHASE_32BIT_HACK = 0x7fffffff +} RTLOGPHASE; + + +/** + * Logger function. + * + * @param pszFormat Format string. + * @param ... Optional arguments as specified in the format string. + */ +typedef DECLCALLBACK(void) FNRTLOGGER(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** Pointer to logger function. */ +typedef FNRTLOGGER *PFNRTLOGGER; + +/** + * Flush function. + * + * @param pLogger Pointer to the logger instance which is to be flushed. + */ +typedef DECLCALLBACK(void) FNRTLOGFLUSH(PRTLOGGER pLogger); +/** Pointer to flush function. */ +typedef FNRTLOGFLUSH *PFNRTLOGFLUSH; + +/** + * Flush function. + * + * @param pLogger Pointer to the logger instance which is to be flushed. + */ +typedef DECLCALLBACK(void) FNRTLOGFLUSHGC(PRTLOGGERRC pLogger); +/** Pointer to logger function. */ +typedef RCPTRTYPE(FNRTLOGFLUSHGC *) PFNRTLOGFLUSHGC; + +/** + * Header/footer message callback. + * + * @param pLogger Pointer to the logger instance. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +typedef DECLCALLBACK(void) FNRTLOGPHASEMSG(PRTLOGGER pLogger, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3); +/** Pointer to header/footer message callback function. */ +typedef FNRTLOGPHASEMSG *PFNRTLOGPHASEMSG; + +/** + * Log file header/footer callback. + * + * @param pLogger Pointer to the logger instance. + * @param enmLogPhase Indicates at what time the callback is invoked. + * @param pfnLogPhaseMsg Callback for writing the header/footer (RTLogPrintf + * and others are out of bounds). + */ +typedef DECLCALLBACK(void) FNRTLOGPHASE(PRTLOGGER pLogger, RTLOGPHASE enmLogPhase, PFNRTLOGPHASEMSG pfnLogPhaseMsg); +/** Pointer to log header/footer callback function. */ +typedef FNRTLOGPHASE *PFNRTLOGPHASE; + +/** + * Custom log prefix callback. + * + * + * @returns The number of chars written. + * + * @param pLogger Pointer to the logger instance. + * @param pchBuf Output buffer pointer. + * No need to terminate the output. + * @param cchBuf The size of the output buffer. + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(size_t) FNRTLOGPREFIX(PRTLOGGER pLogger, char *pchBuf, size_t cchBuf, void *pvUser); +/** Pointer to prefix callback function. */ +typedef FNRTLOGPREFIX *PFNRTLOGPREFIX; + + + +/** + * Logger instance structure for raw-mode context (RC). + */ +struct RTLOGGERRC +{ + /** Pointer to temporary scratch buffer. + * This is used to format the log messages. */ + char achScratch[32768]; + /** Current scratch buffer position. */ + uint32_t offScratch; + /** This is set if a prefix is pending. */ + bool fPendingPrefix; + bool afAlignment[3]; + /** Pointer to the logger function. + * This is actually pointer to a wrapper which will push a pointer to the + * instance pointer onto the stack before jumping to the real logger function. + * A very unfortunate hack to work around the missing variadic macro support in C++. */ + RCPTRTYPE(PFNRTLOGGER) pfnLogger; + /** Pointer to the flush function. */ + PFNRTLOGFLUSHGC pfnFlush; + /** Magic number (RTLOGGERRC_MAGIC). */ + uint32_t u32Magic; + /** Logger instance flags - RTLOGFLAGS. */ + uint32_t fFlags; + /** Number of groups in the afGroups member. */ + uint32_t cGroups; + /** Group flags array - RTLOGGRPFLAGS. + * This member have variable length and may extend way beyond + * the declared size of 1 entry. */ + uint32_t afGroups[1]; +}; + +/** RTLOGGERRC::u32Magic value. (John Rogers Searle) */ +#define RTLOGGERRC_MAGIC 0x19320731 + + + +#ifndef IN_RC + +/** Pointer to internal logger bits. */ +typedef struct RTLOGGERINTERNAL *PRTLOGGERINTERNAL; + +/** + * Logger instance structure. + */ +struct RTLOGGER +{ + /** Pointer to temporary scratch buffer. + * This is used to format the log messages. */ + char achScratch[49152]; + /** Current scratch buffer position. */ + uint32_t offScratch; + /** Magic number. */ + uint32_t u32Magic; + /** Logger instance flags - RTLOGFLAGS. */ + uint32_t fFlags; + /** Destination flags - RTLOGDEST. */ + uint32_t fDestFlags; + /** Pointer to the internal bits of the logger. + * (The memory is allocated in the same block as RTLOGGER.) */ + PRTLOGGERINTERNAL pInt; + /** Pointer to the logger function (used in non-C99 mode only). + * + * This is actually pointer to a wrapper which will push a pointer to the + * instance pointer onto the stack before jumping to the real logger function. + * A very unfortunate hack to work around the missing variadic macro + * support in older C++/C standards. (The memory is allocated using + * RTMemExecAlloc(), except for agnostic R0 code.) */ + PFNRTLOGGER pfnLogger; + /** Number of groups in the afGroups and papszGroups members. */ + uint32_t cGroups; + /** Group flags array - RTLOGGRPFLAGS. + * This member have variable length and may extend way beyond + * the declared size of 1 entry. */ + uint32_t afGroups[1]; +}; + +/** RTLOGGER::u32Magic value. (Avram Noam Chomsky) */ +# define RTLOGGER_MAGIC UINT32_C(0x19281207) + +#endif /* !IN_RC */ + + +/** + * Logger flags. + */ +typedef enum RTLOGFLAGS +{ + /** The logger instance is disabled for normal output. */ + RTLOGFLAGS_DISABLED = 0x00000001, + /** The logger instance is using buffered output. */ + RTLOGFLAGS_BUFFERED = 0x00000002, + /** The logger instance expands LF to CR/LF. */ + RTLOGFLAGS_USECRLF = 0x00000010, + /** Append to the log destination where applicable. */ + RTLOGFLAGS_APPEND = 0x00000020, + /** Show relative timestamps with PREFIX_TSC and PREFIX_TS */ + RTLOGFLAGS_REL_TS = 0x00000040, + /** Show decimal timestamps with PREFIX_TSC and PREFIX_TS */ + RTLOGFLAGS_DECIMAL_TS = 0x00000080, + /** Open the file in write through mode. */ + RTLOGFLAGS_WRITE_THROUGH = 0x00000100, + /** Flush the file to disk when flushing the buffer. */ + RTLOGFLAGS_FLUSH = 0x00000200, + /** Restrict the number of log entries per group. */ + RTLOGFLAGS_RESTRICT_GROUPS = 0x00000400, + /** New lines should be prefixed with the write and read lock counts. */ + RTLOGFLAGS_PREFIX_LOCK_COUNTS = 0x00008000, + /** New lines should be prefixed with the CPU id (ApicID on intel/amd). */ + RTLOGFLAGS_PREFIX_CPUID = 0x00010000, + /** New lines should be prefixed with the native process id. */ + RTLOGFLAGS_PREFIX_PID = 0x00020000, + /** New lines should be prefixed with group flag number causing the output. */ + RTLOGFLAGS_PREFIX_FLAG_NO = 0x00040000, + /** New lines should be prefixed with group flag name causing the output. */ + RTLOGFLAGS_PREFIX_FLAG = 0x00080000, + /** New lines should be prefixed with group number. */ + RTLOGFLAGS_PREFIX_GROUP_NO = 0x00100000, + /** New lines should be prefixed with group name. */ + RTLOGFLAGS_PREFIX_GROUP = 0x00200000, + /** New lines should be prefixed with the native thread id. */ + RTLOGFLAGS_PREFIX_TID = 0x00400000, + /** New lines should be prefixed with thread name. */ + RTLOGFLAGS_PREFIX_THREAD = 0x00800000, + /** New lines should be prefixed with data from a custom callback. */ + RTLOGFLAGS_PREFIX_CUSTOM = 0x01000000, + /** New lines should be prefixed with formatted timestamp since program start. */ + RTLOGFLAGS_PREFIX_TIME_PROG = 0x04000000, + /** New lines should be prefixed with formatted timestamp (UCT). */ + RTLOGFLAGS_PREFIX_TIME = 0x08000000, + /** New lines should be prefixed with milliseconds since program start. */ + RTLOGFLAGS_PREFIX_MS_PROG = 0x10000000, + /** New lines should be prefixed with timestamp. */ + RTLOGFLAGS_PREFIX_TSC = 0x20000000, + /** New lines should be prefixed with timestamp. */ + RTLOGFLAGS_PREFIX_TS = 0x40000000, + /** The prefix mask. */ + RTLOGFLAGS_PREFIX_MASK = 0x7dff8000 +} RTLOGFLAGS; + +/** + * Logger per group flags. + * + * @remarks We only use the lower 16 bits here. We'll be combining it with the + * group number in a few places. + */ +typedef enum RTLOGGRPFLAGS +{ + /** Enabled. */ + RTLOGGRPFLAGS_ENABLED = 0x0001, + /** Flow logging. */ + RTLOGGRPFLAGS_FLOW = 0x0002, + /** Warnings logging. */ + RTLOGGRPFLAGS_WARN = 0x0004, + /* 0x0008 for later. */ + /** Level 1 logging. */ + RTLOGGRPFLAGS_LEVEL_1 = 0x0010, + /** Level 2 logging. */ + RTLOGGRPFLAGS_LEVEL_2 = 0x0020, + /** Level 3 logging. */ + RTLOGGRPFLAGS_LEVEL_3 = 0x0040, + /** Level 4 logging. */ + RTLOGGRPFLAGS_LEVEL_4 = 0x0080, + /** Level 5 logging. */ + RTLOGGRPFLAGS_LEVEL_5 = 0x0100, + /** Level 6 logging. */ + RTLOGGRPFLAGS_LEVEL_6 = 0x0200, + /** Level 7 logging. */ + RTLOGGRPFLAGS_LEVEL_7 = 0x0400, + /** Level 8 logging. */ + RTLOGGRPFLAGS_LEVEL_8 = 0x0800, + /** Level 9 logging. */ + RTLOGGRPFLAGS_LEVEL_9 = 0x1000, + /** Level 10 logging. */ + RTLOGGRPFLAGS_LEVEL_10 = 0x2000, + /** Level 11 logging. */ + RTLOGGRPFLAGS_LEVEL_11 = 0x4000, + /** Level 12 logging. */ + RTLOGGRPFLAGS_LEVEL_12 = 0x8000, + + /** Restrict the number of log entries. */ + RTLOGGRPFLAGS_RESTRICT = 0x40000000, + /** Blow up the type. */ + RTLOGGRPFLAGS_32BIT_HACK = 0x7fffffff +} RTLOGGRPFLAGS; + +/** + * Logger destination types and flags. + */ +typedef enum RTLOGDEST +{ + /** Log to file. */ + RTLOGDEST_FILE = 0x00000001, + /** Log to stdout. */ + RTLOGDEST_STDOUT = 0x00000002, + /** Log to stderr. */ + RTLOGDEST_STDERR = 0x00000004, + /** Log to debugger (win32 only). */ + RTLOGDEST_DEBUGGER = 0x00000008, + /** Log to com port. */ + RTLOGDEST_COM = 0x00000010, + /** Log a memory ring buffer. */ + RTLOGDEST_RINGBUF = 0x00000020, + /** Open files with no deny (share read, write, delete) on Windows. */ + RTLOGDEST_F_NO_DENY = 0x00010000, + /** Delay opening the log file, logging to the buffer untill + * RTLogClearFileDelayFlag is called. */ + RTLOGDEST_F_DELAY_FILE = 0x00020000, + /** Just a dummy flag to be used when no other flag applies. */ + RTLOGDEST_DUMMY = 0x20000000, + /** Log to a user defined output stream. */ + RTLOGDEST_USER = 0x40000000 +} RTLOGDEST; + + +RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + + +#ifdef DOXYGEN_RUNNING +# define LOG_DISABLED +# define LOG_ENABLED +# define LOG_ENABLE_FLOW +#endif + +/** @def LOG_DISABLED + * Use this compile time define to disable all logging macros. It can + * be overridden for each of the logging macros by the LOG_ENABLE* + * compile time defines. + */ + +/** @def LOG_ENABLED + * Use this compile time define to enable logging when not in debug mode + * or LOG_DISABLED is set. + * This will enabled Log() only. + */ + +/** @def LOG_ENABLE_FLOW + * Use this compile time define to enable flow logging when not in + * debug mode or LOG_DISABLED is defined. + * This will enable LogFlow() only. + */ + +/* + * Determine whether logging is enabled and forcefully normalize the indicators. + */ +#if (defined(DEBUG) || defined(LOG_ENABLED)) && !defined(LOG_DISABLED) +# undef LOG_DISABLED +# undef LOG_ENABLED +# define LOG_ENABLED +#else +# undef LOG_ENABLED +# undef LOG_DISABLED +# define LOG_DISABLED +#endif + + +/** @def LOG_USE_C99 + * Governs the use of variadic macros. + */ +#ifndef LOG_USE_C99 +# if defined(RT_ARCH_AMD64) || defined(RT_OS_DARWIN) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define LOG_USE_C99 +# endif +#endif + + +/** @name Macros for checking whether a log level is enabled. + * @{ */ +/** @def LogIsItEnabled + * Checks whether the specified logging group is enabled or not. + */ +#ifdef LOG_ENABLED +# define LogIsItEnabled(a_fFlags, a_iGroup) ( RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)) != NULL ) +#else +# define LogIsItEnabled(a_fFlags, a_iGroup) (false) +#endif + +/** @def LogIsEnabled + * Checks whether level 1 logging is enabled. + */ +#define LogIsEnabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP) + +/** @def LogIs2Enabled + * Checks whether level 2 logging is enabled. + */ +#define LogIs2Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP) + +/** @def LogIs3Enabled + * Checks whether level 3 logging is enabled. + */ +#define LogIs3Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP) + +/** @def LogIs4Enabled + * Checks whether level 4 logging is enabled. + */ +#define LogIs4Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP) + +/** @def LogIs5Enabled + * Checks whether level 5 logging is enabled. + */ +#define LogIs5Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP) + +/** @def LogIs6Enabled + * Checks whether level 6 logging is enabled. + */ +#define LogIs6Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP) + +/** @def LogIs7Enabled + * Checks whether level 7 logging is enabled. + */ +#define LogIs7Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP) + +/** @def LogIs8Enabled + * Checks whether level 8 logging is enabled. + */ +#define LogIs8Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP) + +/** @def LogIs9Enabled + * Checks whether level 9 logging is enabled. + */ +#define LogIs9Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP) + +/** @def LogIs10Enabled + * Checks whether level 10 logging is enabled. + */ +#define LogIs10Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP) + +/** @def LogIs11Enabled + * Checks whether level 11 logging is enabled. + */ +#define LogIs11Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP) + +/** @def LogIs12Enabled + * Checks whether level 12 logging is enabled. + */ +#define LogIs12Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP) + +/** @def LogIsFlowEnabled + * Checks whether execution flow logging is enabled. + */ +#define LogIsFlowEnabled() LogIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) + +/** @def LogIsWarnEnabled + * Checks whether execution flow logging is enabled. + */ +#define LogIsWarnEnabled() LogIsItEnabled(RTLOGGRPFLAGS_WARN, LOG_GROUP) +/** @} */ + + +/** @def LogIt + * Write to specific logger if group enabled. + */ +#ifdef LOG_ENABLED +# if defined(LOG_USE_C99) +# define _LogRemoveParentheseis(...) __VA_ARGS__ +# define _LogIt(a_fFlags, a_iGroup, ...) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogIt_pLogger)) \ + { /* likely */ } \ + else \ + RTLogLoggerEx(LogIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogIt(a_fFlags, a_iGroup, fmtargs) _LogIt(a_fFlags, a_iGroup, _LogRemoveParentheseis fmtargs) +# define _LogItAlways(a_fFlags, a_iGroup, ...) RTLogLoggerEx(NULL, a_fFlags, UINT32_MAX, __VA_ARGS__) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) _LogItAlways(a_fFlags, a_iGroup, _LogRemoveParentheseis fmtargs) + /** @todo invent a flag or something for skipping the group check so we can pass iGroup. LogItAlways. */ +# else +# define LogIt(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogIt_pLogger)) \ + { /* likely */ } \ + else \ + { \ + LogIt_pLogger->pfnLogger fmtargs; \ + } \ + } while (0) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(0, UINT16_MAX)); \ + if (LogIt_pLogger) \ + LogIt_pLogger->pfnLogger fmtargs; \ + } while (0) +# endif +#else +# define LogIt(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# if defined(LOG_USE_C99) +# define _LogRemoveParentheseis(...) __VA_ARGS__ +# define _LogIt(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogItAlways(a_fFlags, a_iGroup, ...) do { } while (0) +# endif +#endif + + +/** @name Basic logging macros + * @{ */ +/** @def Log + * Level 1 logging that works regardless of the group settings. + */ +#define LogAlways(a) LogItAlways(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def Log + * Level 1 logging. + */ +#define Log(a) LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def Log2 + * Level 2 logging. + */ +#define Log2(a) LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def Log3 + * Level 3 logging. + */ +#define Log3(a) LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def Log4 + * Level 4 logging. + */ +#define Log4(a) LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def Log5 + * Level 5 logging. + */ +#define Log5(a) LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def Log6 + * Level 6 logging. + */ +#define Log6(a) LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def Log7 + * Level 7 logging. + */ +#define Log7(a) LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def Log8 + * Level 8 logging. + */ +#define Log8(a) LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def Log9 + * Level 9 logging. + */ +#define Log9(a) LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def Log10 + * Level 10 logging. + */ +#define Log10(a) LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def Log11 + * Level 11 logging. + */ +#define Log11(a) LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def Log12 + * Level 12 logging. + */ +#define Log12(a) LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogFlow + * Logging of execution flow. + */ +#define LogFlow(a) LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) + +/** @def LogWarn + * Logging of warnings. + */ +#define LogWarn(a) LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, a) +/** @} */ + + +/** @name Logging macros prefixing the current function name. + * @{ */ +/** @def LogFunc + * Level 1 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFunc(a) _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFunc(a) do { Log((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log2Func + * Level 2 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log2Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log2Func(a) do { Log2((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log2(a); } while (0) +#endif + +/** @def Log3Func + * Level 3 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log3Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log3Func(a) do { Log3((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log3(a); } while (0) +#endif + +/** @def Log4Func + * Level 4 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log4Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log4Func(a) do { Log4((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log4(a); } while (0) +#endif + +/** @def Log5Func + * Level 5 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log5Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log5Func(a) do { Log5((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log5(a); } while (0) +#endif + +/** @def Log6Func + * Level 6 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log6Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log6Func(a) do { Log6((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log6(a); } while (0) +#endif + +/** @def Log7Func + * Level 7 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log7Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log7Func(a) do { Log7((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log7(a); } while (0) +#endif + +/** @def Log8Func + * Level 8 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log8Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log8Func(a) do { Log8((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log8(a); } while (0) +#endif + +/** @def Log9Func + * Level 9 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log9Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log9Func(a) do { Log9((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log9(a); } while (0) +#endif + +/** @def Log10Func + * Level 10 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log10Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log10Func(a) do { Log10((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log10(a); } while (0) +#endif + +/** @def Log11Func + * Level 11 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log11Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log11Func(a) do { Log11((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log11(a); } while (0) +#endif + +/** @def Log12Func + * Level 12 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log12Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log12Func(a) do { Log12((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log12(a); } while (0) +#endif + +/** @def LogFlowFunc + * Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFlowFunc(a) \ + _LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFlowFunc(a) \ + do { LogFlow((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif + +/** @def LogWarnFunc + * Macro to log a warning inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogWarnFunc(a) \ + _LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogWarnFunc(a) \ + do { LogFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif +/** @} */ + + +/** @name Logging macros prefixing the this pointer value and method name. + * @{ */ + +/** @def LogThisFunc + * Level 1 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogThisFunc(a) do { Log(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log2ThisFunc + * Level 2 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log2ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log2ThisFunc(a) do { Log2(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log2(a); } while (0) +#endif + +/** @def Log3ThisFunc + * Level 3 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log3ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log3ThisFunc(a) do { Log3(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log3(a); } while (0) +#endif + +/** @def Log4ThisFunc + * Level 4 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log4ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log4ThisFunc(a) do { Log4(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log4(a); } while (0) +#endif + +/** @def Log5ThisFunc + * Level 5 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log5ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log5ThisFunc(a) do { Log5(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log5(a); } while (0) +#endif + +/** @def Log6ThisFunc + * Level 6 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log6ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log6ThisFunc(a) do { Log6(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log6(a); } while (0) +#endif + +/** @def Log7ThisFunc + * Level 7 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log7ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log7ThisFunc(a) do { Log7(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log7(a); } while (0) +#endif + +/** @def Log8ThisFunc + * Level 8 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log8ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log8ThisFunc(a) do { Log8(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log8(a); } while (0) +#endif + +/** @def Log9ThisFunc + * Level 9 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log9ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log9ThisFunc(a) do { Log9(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log9(a); } while (0) +#endif + +/** @def Log10ThisFunc + * Level 10 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log10ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log10ThisFunc(a) do { Log10(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log10(a); } while (0) +#endif + +/** @def Log11ThisFunc + * Level 11 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log11ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log11ThisFunc(a) do { Log11(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log11(a); } while (0) +#endif + +/** @def Log12ThisFunc + * Level 12 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log12ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log12ThisFunc(a) do { Log12(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log12(a); } while (0) +#endif + +/** @def LogFlowThisFunc + * Flow level logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFlowThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFlowThisFunc(a) do { LogFlow(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif + +/** @def LogWarnThisFunc + * Warning level logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogWarnThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogWarnThisFunc(a) do { LogWarn(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogWarn(a); } while (0) +#endif +/** @} */ + + +/** @name Misc Logging Macros + * @{ */ + +/** @def Log1Warning + * The same as Log(), but prepents a "WARNING! " string to the message. + * + * @param a Custom log message in format ("string\n" [, args]). + */ +#if defined(LOG_USE_C99) +# define Log1Warning(a) _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "WARNING! %M", _LogRemoveParentheseis a ) +#else +# define Log1Warning(a) do { Log(("WARNING! ")); Log(a); } while (0) +#endif + +/** @def Log1WarningFunc + * The same as LogWarning(), but prepents the log message with the function name. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log1WarningFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": WARNING! %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log1WarningFunc(a) \ + do { Log((LOG_FN_FMT ": WARNING! ", __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log1WarningThisFunc + * The same as LogWarningFunc() but for class functions (methods): the resulting + * log line is additionally prepended with a hex value of |this| pointer. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log1WarningThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": WARNING! %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log1WarningThisFunc(a) \ + do { Log(("{%p} " LOG_FN_FMT ": WARNING! ", this, __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + + +/** Shortcut to |LogFlowFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogFlowFuncEnter() LogFlowFunc(("ENTER\n")) + +/** Shortcut to |LogFlowFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogFlowFuncLeave() LogFlowFunc(("LEAVE\n")) + +/** Shortcut to |LogFlowFunc ("LEAVE: %Rrc\n")|, marks the end of the function. */ +#define LogFlowFuncLeaveRC(rc) LogFlowFunc(("LEAVE: %Rrc\n", (rc))) + +/** Shortcut to |LogFlowThisFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogFlowThisFuncEnter() LogFlowThisFunc(("ENTER\n")) + +/** Shortcut to |LogFlowThisFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogFlowThisFuncLeave() LogFlowThisFunc(("LEAVE\n")) + + +/** @def LogObjRefCnt + * Helper macro to print the current reference count of the given COM object + * to the log file. + * + * @param pObj Pointer to the object in question (must be a pointer to an + * IUnknown subclass or simply define COM-style AddRef() and + * Release() methods) + */ +#define LogObjRefCnt(pObj) \ + do { \ + if (LogIsFlowEnabled()) \ + { \ + int cRefsForLog = (pObj)->AddRef(); \ + LogFlow((#pObj "{%p}.refCnt=%d\n", (pObj), cRefsForLog - 1)); \ + (pObj)->Release(); \ + } \ + } while (0) +/** @} */ + + + +/** @name Passing Function Call Position When Logging. + * + * This is a little bit ugly as we have to omit the comma before the + * position parameters so that we don't inccur any overhead in non-logging + * builds (!defined(LOG_ENABLED). + * + * @{ */ +/** Source position for passing to a function call. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS , __FILE__, __LINE__, __PRETTY_FUNCTION__ +#else +# define RTLOG_COMMA_SRC_POS RT_NOTHING +#endif +/** Source position declaration. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS_DECL , const char *pszFile, unsigned iLine, const char *pszFunction +#else +# define RTLOG_COMMA_SRC_POS_DECL RT_NOTHING +#endif +/** Source position arguments. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS_ARGS , pszFile, iLine, pszFunction +#else +# define RTLOG_COMMA_SRC_POS_ARGS RT_NOTHING +#endif +/** Applies NOREF() to the source position arguments. */ +#ifdef LOG_ENABLED +# define RTLOG_SRC_POS_NOREF() do { NOREF(pszFile); NOREF(iLine); NOREF(pszFunction); } while (0) +#else +# define RTLOG_SRC_POS_NOREF() do { } while (0) +#endif +/** @} */ + + + +/** @name Release Logging + * @{ + */ + +#ifdef DOXYGEN_RUNNING +# define RTLOG_REL_DISABLED +# define RTLOG_REL_ENABLED +#endif + +/** @def RTLOG_REL_DISABLED + * Use this compile time define to disable all release logging + * macros. + */ + +/** @def RTLOG_REL_ENABLED + * Use this compile time define to override RTLOG_REL_DISABLE. + */ + +/* + * Determine whether release logging is enabled and forcefully normalize the indicators. + */ +#if !defined(RTLOG_REL_DISABLED) || defined(RTLOG_REL_ENABLED) +# undef RTLOG_REL_DISABLED +# undef RTLOG_REL_ENABLED +# define RTLOG_REL_ENABLED +#else +# undef RTLOG_REL_ENABLED +# undef RTLOG_REL_DISABLED +# define RTLOG_REL_DISABLED +#endif + +/** @name Macros for checking whether a release log level is enabled. + * @{ */ +/** @def LogRelIsItEnabled + * Checks whether the specified release logging group is enabled or not. + */ +#define LogRelIsItEnabled(a_fFlags, a_iGroup) ( RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)) != NULL ) + +/** @def LogRelIsEnabled + * Checks whether level 1 release logging is enabled. + */ +#define LogRelIsEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP) + +/** @def LogRelIs2Enabled + * Checks whether level 2 release logging is enabled. + */ +#define LogRelIs2Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP) + +/** @def LogRelIs3Enabled + * Checks whether level 3 release logging is enabled. + */ +#define LogRelIs3Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP) + +/** @def LogRelIs4Enabled + * Checks whether level 4 release logging is enabled. + */ +#define LogRelIs4Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP) + +/** @def LogRelIs5Enabled + * Checks whether level 5 release logging is enabled. + */ +#define LogRelIs5Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP) + +/** @def LogRelIs6Enabled + * Checks whether level 6 release logging is enabled. + */ +#define LogRelIs6Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP) + +/** @def LogRelIs7Enabled + * Checks whether level 7 release logging is enabled. + */ +#define LogRelIs7Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP) + +/** @def LogRelIs8Enabled + * Checks whether level 8 release logging is enabled. + */ +#define LogRelIs8Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP) + +/** @def LogRelIs2Enabled + * Checks whether level 9 release logging is enabled. + */ +#define LogRelIs9Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP) + +/** @def LogRelIs10Enabled + * Checks whether level 10 release logging is enabled. + */ +#define LogRelIs10Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP) + +/** @def LogRelIs11Enabled + * Checks whether level 10 release logging is enabled. + */ +#define LogRelIs11Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP) + +/** @def LogRelIs12Enabled + * Checks whether level 12 release logging is enabled. + */ +#define LogRelIs12Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP) + +/** @def LogRelIsFlowEnabled + * Checks whether execution flow release logging is enabled. + */ +#define LogRelIsFlowEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) + +/** @def LogRelIsWarnEnabled + * Checks whether warning level release logging is enabled. + */ +#define LogRelIsWarnEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) +/** @} */ + + +/** @def LogRelIt + * Write to specific logger if group enabled. + */ +/** @def LogRelItLikely + * Write to specific logger if group enabled, assuming it likely it is enabled. + */ +/** @def LogRelMaxIt + * Write to specific logger if group enabled and at less than a_cMax messages + * have hit the log. Uses a static variable to count. + */ +#ifdef RTLOG_REL_ENABLED +# if defined(LOG_USE_C99) +# define _LogRelRemoveParentheseis(...) __VA_ARGS__ +# define _LogRelIt(a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogRelIt_pLogger)) \ + { /* likely */ } \ + else \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) \ + _LogRelIt(a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# define _LogRelItLikely(a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) \ + _LogRelItLikely(a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# define _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + static uint32_t s_LogRelMaxIt_cLogged = 0; \ + if (s_LogRelMaxIt_cLogged < (a_cMax)) \ + { \ + s_LogRelMaxIt_cLogged++; \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + } \ + } \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) \ + _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# else +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogRelIt_pLogger)) \ + { /* likely */ } \ + else \ + { \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + static uint32_t s_LogRelMaxIt_cLogged = 0; \ + if (s_LogRelMaxIt_cLogged < (a_cMax)) \ + { \ + s_LogRelMaxIt_cLogged++; \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# endif +#else /* !RTLOG_REL_ENABLED */ +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) do { } while (0) +# if defined(LOG_USE_C99) +# define _LogRelRemoveParentheseis(...) __VA_ARGS__ +# define _LogRelIt(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogRelItLikely(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, ...) do { } while (0) +# endif +#endif /* !RTLOG_REL_ENABLED */ + + +/** @name Basic release logging macros + * @{ */ +/** @def LogRel + * Level 1 release logging. + */ +#define LogRel(a) LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def LogRel2 + * Level 2 release logging. + */ +#define LogRel2(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def LogRel3 + * Level 3 release logging. + */ +#define LogRel3(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def LogRel4 + * Level 4 release logging. + */ +#define LogRel4(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def LogRel5 + * Level 5 release logging. + */ +#define LogRel5(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def LogRel6 + * Level 6 release logging. + */ +#define LogRel6(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def LogRel7 + * Level 7 release logging. + */ +#define LogRel7(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def LogRel8 + * Level 8 release logging. + */ +#define LogRel8(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def LogRel9 + * Level 9 release logging. + */ +#define LogRel9(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def LogRel10 + * Level 10 release logging. + */ +#define LogRel10(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def LogRel11 + * Level 11 release logging. + */ +#define LogRel11(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def LogRel12 + * Level 12 release logging. + */ +#define LogRel12(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogRelFlow + * Logging of execution flow. + */ +#define LogRelFlow(a) LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) + +/** @def LogRelWarn + * Warning level release logging. + */ +#define LogRelWarn(a) LogRelIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, a) +/** @} */ + + + +/** @name Basic release logging macros with local max + * @{ */ +/** @def LogRelMax + * Level 1 release logging with a max number of log entries. + */ +#define LogRelMax(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def LogRelMax2 + * Level 2 release logging with a max number of log entries. + */ +#define LogRelMax2(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def LogRelMax3 + * Level 3 release logging with a max number of log entries. + */ +#define LogRelMax3(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def LogRelMax4 + * Level 4 release logging with a max number of log entries. + */ +#define LogRelMax4(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def LogRelMax5 + * Level 5 release logging with a max number of log entries. + */ +#define LogRelMax5(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def LogRelMax6 + * Level 6 release logging with a max number of log entries. + */ +#define LogRelMax6(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def LogRelMax7 + * Level 7 release logging with a max number of log entries. + */ +#define LogRelMax7(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def LogRelMax8 + * Level 8 release logging with a max number of log entries. + */ +#define LogRelMax8(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def LogRelMax9 + * Level 9 release logging with a max number of log entries. + */ +#define LogRelMax9(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def LogRelMax10 + * Level 10 release logging with a max number of log entries. + */ +#define LogRelMax10(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def LogRelMax11 + * Level 11 release logging with a max number of log entries. + */ +#define LogRelMax11(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def LogRelMax12 + * Level 12 release logging with a max number of log entries. + */ +#define LogRelMax12(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogRelMaxFlow + * Logging of execution flow with a max number of log entries. + */ +#define LogRelMaxFlow(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) +/** @} */ + + +/** @name Release logging macros prefixing the current function name. + * @{ */ + +/** @def LogRelFunc + * Release logging. Prepends the given log message with the function name + * followed by a semicolon and space. + */ +#ifdef LOG_USE_C99 +# define LogRelFunc(a) \ + _LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFunc(a) do { LogRel((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogRel(a); } while (0) +#endif + +/** @def LogRelFlowFunc + * Release logging. Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelFlowFunc(a) _LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFlowFunc(a) do { LogRelFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelFlow(a); } while (0) +#endif + +/** @def LogRelMaxFunc + * Release logging. Prepends the given log message with the function name + * followed by a semicolon and space. + */ +#ifdef LOG_USE_C99 +# define LogRelMaxFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxFunc(a_cMax, a) \ + do { LogRelMax(a_cMax, (LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelMax(a_cMax, a); } while (0) +#endif + +/** @def LogRelMaxFlowFunc + * Release logging. Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a_cMax Max number of times this should hit the log. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelMaxFlowFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxFlowFunc(a_cMax, a) \ + do { LogRelMaxFlow(a_cMax, (LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelFlow(a_cMax, a); } while (0) +#endif + +/** @} */ + + +/** @name Release Logging macros prefixing the this pointer value and method name. + * @{ */ + +/** @def LogRelThisFunc + * The same as LogRelFunc but for class functions (methods): the resulting log + * line is additionally prepended with a hex value of |this| pointer. + */ +#ifdef LOG_USE_C99 +# define LogRelThisFunc(a) \ + _LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelThisFunc(a) \ + do { LogRel(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRel(a); } while (0) +#endif + +/** @def LogRelMaxThisFunc + * The same as LogRelFunc but for class functions (methods): the resulting log + * line is additionally prepended with a hex value of |this| pointer. + * @param a_cMax Max number of times this should hit the log. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelMaxThisFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxThisFunc(a_cMax, a) \ + do { LogRelMax(a_cMax, ("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRelMax(a_cMax, a); } while (0) +#endif + +/** @def LogRelFlowThisFunc + * The same as LogRelFlowFunc but for class functions (methods): the resulting + * log line is additionally prepended with a hex value of |this| pointer. + */ +#ifdef LOG_USE_C99 +# define LogRelFlowThisFunc(a) \ + _LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFlowThisFunc(a) do { LogRelFlow(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRelFlow(a); } while (0) +#endif + + +/** Shortcut to |LogRelFlowFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogRelFlowFuncEnter() LogRelFlowFunc(("ENTER\n")) + +/** Shortcut to |LogRelFlowFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogRelFlowFuncLeave() LogRelFlowFunc(("LEAVE\n")) + +/** Shortcut to |LogRelFlowFunc ("LEAVE: %Rrc\n")|, marks the end of the function. */ +#define LogRelFlowFuncLeaveRC(rc) LogRelFlowFunc(("LEAVE: %Rrc\n", (rc))) + +/** Shortcut to |LogRelFlowThisFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogRelFlowThisFuncEnter() LogRelFlowThisFunc(("ENTER\n")) + +/** Shortcut to |LogRelFlowThisFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogRelFlowThisFuncLeave() LogRelFlowThisFunc(("LEAVE\n")) + +/** @} */ + + +#ifndef IN_RC +/** + * Sets the default release logger instance. + * + * @returns The old default instance. + * @param pLogger The new default release logger instance. + */ +RTDECL(PRTLOGGER) RTLogRelSetDefaultInstance(PRTLOGGER pLogger); +#endif /* !IN_RC */ + +/** + * Gets the default release logger instance. + * + * @returns Pointer to default release logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstance(void); + +/** + * Gets the default release logger instance. + * + * @returns Pointer to default release logger instance if availble, otherwise NULL. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstanceEx(uint32_t fFlagsAndGroup); + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function for LogRelIt. + */ +RTDECL(void) RTLogRelLogger(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default release instance is attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogRelLoggerV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(4, 0); + +/** + * printf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * vprintf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param args Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Changes the buffering setting of the default release logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogRelSetBuffering(bool fBuffered); + +/** @} */ + + + +/** @name COM port logging + * { + */ + +#ifdef DOXYGEN_RUNNING +# define LOG_TO_COM +# define LOG_NO_COM +#endif + +/** @def LOG_TO_COM + * Redirects the normal logging macros to the serial versions. + */ + +/** @def LOG_NO_COM + * Disables all LogCom* macros. + */ + +/** @def LogCom + * Generic logging to serial port. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_COM) +# define LogCom(a) RTLogComPrintf a +#else +# define LogCom(a) do { } while (0) +#endif + +/** @def LogComFlow + * Logging to serial port of execution flow. + */ +#if defined(LOG_ENABLED) && defined(LOG_ENABLE_FLOW) && !defined(LOG_NO_COM) +# define LogComFlow(a) RTLogComPrintf a +#else +# define LogComFlow(a) do { } while (0) +#endif + +#ifdef LOG_TO_COM +# undef Log +# define Log(a) LogCom(a) +# undef LogFlow +# define LogFlow(a) LogComFlow(a) +#endif + +/** @} */ + + +/** @name Backdoor Logging + * @{ + */ + +#ifdef DOXYGEN_RUNNING +# define LOG_TO_BACKDOOR +# define LOG_NO_BACKDOOR +#endif + +/** @def LOG_TO_BACKDOOR + * Redirects the normal logging macros to the backdoor versions. + */ + +/** @def LOG_NO_BACKDOOR + * Disables all LogBackdoor* macros. + */ + +/** @def LogBackdoor + * Generic logging to the VBox backdoor via port I/O. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_BACKDOOR) +# define LogBackdoor(a) RTLogBackdoorPrintf a +#else +# define LogBackdoor(a) do { } while (0) +#endif + +/** @def LogBackdoorFlow + * Logging of execution flow messages to the backdoor I/O port. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_BACKDOOR) +# define LogBackdoorFlow(a) RTLogBackdoorPrintf a +#else +# define LogBackdoorFlow(a) do { } while (0) +#endif + +/** @def LogRelBackdoor + * Release logging to the VBox backdoor via port I/O. + */ +#if !defined(LOG_NO_BACKDOOR) +# define LogRelBackdoor(a) RTLogBackdoorPrintf a +#else +# define LogRelBackdoor(a) do { } while (0) +#endif + +#ifdef LOG_TO_BACKDOOR +# undef Log +# define Log(a) LogBackdoor(a) +# undef LogFlow +# define LogFlow(a) LogBackdoorFlow(a) +# undef LogRel +# define LogRel(a) LogRelBackdoor(a) +# if defined(LOG_USE_C99) +# undef _LogIt +# define _LogIt(a_fFlags, a_iGroup, ...) LogBackdoor((__VA_ARGS__)) +# endif +#endif + +/** @} */ + + + +/** + * Gets the default logger instance, creating it if necessary. + * + * @returns Pointer to default logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogDefaultInstance(void); + +/** + * Gets the logger instance if enabled, creating it if necessary. + * + * @returns Pointer to default logger instance, if group has the specified + * flags enabled. Otherwise NULL is returned. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup); + +/** + * Gets the default logger instance. + * + * @returns Pointer to default logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogGetDefaultInstance(void); + +/** + * Gets the default logger instance if enabled. + * + * @returns Pointer to default logger instance, if group has the specified + * flags enabled. Otherwise NULL is returned. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogGetDefaultInstanceEx(uint32_t fFlagsAndGroup); + +#ifndef IN_RC +/** + * Sets the default logger instance. + * + * @returns The old default instance. + * @param pLogger The new default logger instance. + */ +RTDECL(PRTLOGGER) RTLogSetDefaultInstance(PRTLOGGER pLogger); +#endif /* !IN_RC */ + +#ifdef IN_RING0 +/** + * Changes the default logger instance for the current thread. + * + * @returns IPRT status code. + * @param pLogger The logger instance. Pass NULL for deregistration. + * @param uKey Associated key for cleanup purposes. If pLogger is NULL, + * all instances with this key will be deregistered. So in + * order to only deregister the instance associated with the + * current thread use 0. + */ +RTDECL(int) RTLogSetDefaultInstanceThread(PRTLOGGER pLogger, uintptr_t uKey); +#endif /* IN_RING0 */ + + +#ifndef IN_RC +/** + * Creates the default logger instance for a iprt users. + * + * Any user of the logging features will need to implement + * this or use the generic dummy. + * + * @returns Pointer to the logger instance. + */ +RTDECL(PRTLOGGER) RTLogDefaultInit(void); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pszFilenameFmt Log filename format string. Standard + * RTStrFormat(). + * @param ... Format arguments. + */ +RTDECL(int) RTLogCreate(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(8, 9); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pfnPhase Callback function for starting logging and for + * ending or starting a new file for log history + * rotation. NULL is OK. + * @param cHistory Number of old log files to keep when performing + * log history rotation. 0 means no history. + * @param cbHistoryFileMax Maximum size of log file when performing + * history rotation. 0 means no size limit. + * @param cSecsHistoryTimeSlot Maximum time interval per log file when + * performing history rotation, in seconds. + * 0 means time limit. + * @param pErrInfo Where to return extended error information. + * Optional. + * @param pszFilenameFmt Log filename format string. Standard RTStrFormat(). + * @param ... Format arguments. + */ +RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo, + const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 14); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pfnPhase Callback function for starting logging and for + * ending or starting a new file for log history + * rotation. + * @param cHistory Number of old log files to keep when performing + * log history rotation. 0 means no history. + * @param cbHistoryFileMax Maximum size of log file when performing + * history rotation. 0 means no size limit. + * @param cSecsHistoryTimeSlot Maximum time interval per log file when + * performing history rotation, in seconds. + * 0 means no time limit. + * @param pErrInfo Where to return extended error information. + * Optional. + * @param pszFilenameFmt Log filename format string. Standard + * RTStrFormat(). + * @param args Format arguments. + */ +RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo, + const char *pszFilenameFmt, va_list args) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 0); + +/** + * Create a logger instance for singled threaded ring-0 usage. + * + * @returns iprt status code. + * + * @param pLogger Where to create the logger instance. + * @param cbLogger The amount of memory available for the logger instance. + * @param pLoggerR0Ptr The ring-0 address corresponding to @a pLogger. + * @param pfnLoggerR0Ptr Pointer to logger wrapper function. + * @param pfnFlushR0Ptr Pointer to flush function. + * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. + * @param fDestFlags The destination flags. + */ +RTDECL(int) RTLogCreateForR0(PRTLOGGER pLogger, size_t cbLogger, + RTR0PTR pLoggerR0Ptr, RTR0PTR pfnLoggerR0Ptr, RTR0PTR pfnFlushR0Ptr, + uint32_t fFlags, uint32_t fDestFlags); + +/** + * Calculates the minimum size of a ring-0 logger instance. + * + * @returns The minimum size. + * @param cGroups The number of groups. + * @param fFlags Relevant flags. + */ +RTDECL(size_t) RTLogCalcSizeForR0(uint32_t cGroups, uint32_t fFlags); + +/** + * Destroys a logger instance. + * + * The instance is flushed and all output destinations closed (where applicable). + * + * @returns iprt status code. + * @param pLogger The logger instance which close destroyed. NULL is fine. + */ +RTDECL(int) RTLogDestroy(PRTLOGGER pLogger); + +/** + * Create a logger instance clone for RC usage. + * + * @returns iprt status code. + * + * @param pLogger The logger instance to be cloned. + * @param pLoggerRC Where to create the RC logger instance. + * @param cbLoggerRC Amount of memory allocated to for the RC logger + * instance clone. + * @param pfnLoggerRCPtr Pointer to logger wrapper function for this + * instance (RC Ptr). + * @param pfnFlushRCPtr Pointer to flush function (RC Ptr). + * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. + */ +RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC, size_t cbLoggerRC, + RTRCPTR pfnLoggerRCPtr, RTRCPTR pfnFlushRCPtr, uint32_t fFlags); + +/** + * Flushes a RC logger instance to a R3 logger. + * + * @returns iprt status code. + * @param pLogger The R3 logger instance to flush pLoggerRC to. If NULL + * the default logger is used. + * @param pLoggerRC The RC logger instance to flush. + */ +RTDECL(void) RTLogFlushRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC); + +/** + * Flushes the buffer in one logger instance onto another logger. + * + * @returns iprt status code. + * + * @param pSrcLogger The logger instance to flush. + * @param pDstLogger The logger instance to flush onto. + * If NULL the default logger will be used. + */ +RTDECL(void) RTLogFlushToLogger(PRTLOGGER pSrcLogger, PRTLOGGER pDstLogger); + +/** + * Flushes a R0 logger instance to a R3 logger. + * + * @returns iprt status code. + * @param pLogger The R3 logger instance to flush pLoggerR0 to. If NULL + * the default logger is used. + * @param pLoggerR0 The R0 logger instance to flush. + */ +RTDECL(void) RTLogFlushR0(PRTLOGGER pLogger, PRTLOGGER pLoggerR0); + +/** + * Sets the custom prefix callback. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param pfnCallback The callback. + * @param pvUser The user argument for the callback. + * */ +RTDECL(int) RTLogSetCustomPrefixCallback(PRTLOGGER pLogger, PFNRTLOGPREFIX pfnCallback, void *pvUser); + +/** + * Same as RTLogSetCustomPrefixCallback for loggers created by + * RTLogCreateForR0. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param pLoggerR0Ptr The ring-0 address corresponding to @a pLogger. + * @param pfnCallbackR0Ptr The callback. + * @param pvUserR0Ptr The user argument for the callback. + * */ +RTDECL(int) RTLogSetCustomPrefixCallbackForR0(PRTLOGGER pLogger, RTR0PTR pLoggerR0Ptr, + RTR0PTR pfnCallbackR0Ptr, RTR0PTR pvUserR0Ptr); + +/** + * Copies the group settings and flags from logger instance to another. + * + * @returns IPRT status code. + * @param pDstLogger The destination logger instance. + * @param pDstLoggerR0Ptr The ring-0 address corresponding to @a pDstLogger. + * @param pSrcLogger The source logger instance. If NULL the default one is used. + * @param fFlagsOr OR mask for the flags. + * @param fFlagsAnd AND mask for the flags. + */ +RTDECL(int) RTLogCopyGroupsAndFlagsForR0(PRTLOGGER pDstLogger, RTR0PTR pDstLoggerR0Ptr, + PCRTLOGGER pSrcLogger, uint32_t fFlagsOr, uint32_t fFlagsAnd); + +/** + * Get the current log group settings as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetGroupSettings(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); + +/** + * Updates the group settings for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogGroupSettings(PRTLOGGER pLogger, const char *pszValue); +#endif /* !IN_RC */ + +/** + * Updates the flags for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogFlags(PRTLOGGER pLogger, const char *pszValue); + +/** + * Changes the buffering setting of the specified logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param pLogger The logger instance (NULL is an alias for the + * default logger). + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogSetBuffering(PRTLOGGER pLogger, bool fBuffered); + +/** + * Sets the max number of entries per group. + * + * @returns Old restriction. + * + * @param pLogger The logger instance (NULL is an alias for the + * default logger). + * @param cMaxEntriesPerGroup The max number of entries per group. + * + * @remarks Lowering the limit of an active logger may quietly mute groups. + * Raising it may reactive already muted groups. + */ +RTDECL(uint32_t) RTLogSetGroupLimit(PRTLOGGER pLogger, uint32_t cMaxEntriesPerGroup); + +#ifndef IN_RC +/** + * Get the current log flags as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetFlags(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); + +/** + * Updates the logger destination using the specified string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + */ +RTDECL(int) RTLogDestinations(PRTLOGGER pLogger, char const *pszValue); + +/** + * Clear the file delay flag if set, opening the destination and flushing. + * + * @returns IPRT status code. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + * @param pErrInfo Where to return extended error info. Optional. + */ +RTDECL(int) RTLogClearFileDelayFlag(PRTLOGGER pLogger, PRTERRINFO pErrInfo); + +/** + * Get the current log destinations as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than 0. + */ +RTDECL(int) RTLogGetDestinations(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); +#endif /* !IN_RC */ + +/** + * Flushes the specified logger. + * + * @param pLogger The logger instance to flush. + * If NULL the default instance is used. The default instance + * will not be initialized by this call. + */ +RTDECL(void) RTLogFlush(PRTLOGGER pLogger); + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pvCallerRet Ignored. + * @param pszFormat Format string. + * @param ... Format arguments. + */ +RTDECL(void) RTLogLogger(PRTLOGGER pLogger, void *pvCallerRet, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerV(PRTLOGGER pLogger, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function of LogIt. + */ +RTDECL(void) RTLogLoggerEx(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerExV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(4, 0); + +/** + * printf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * vprintf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param va Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Dumper vprintf-like function outputting to a logger. + * + * @param pvUser Pointer to the logger instance to use, NULL for + * default instance. + * @param pszFormat Format string. + * @param va Format arguments. + */ +RTDECL(void) RTLogDumpPrintfV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); + + +#ifndef DECLARED_FNRTSTROUTPUT /* duplicated in iprt/string.h */ +#define DECLARED_FNRTSTROUTPUT +/** + * Output callback. + * + * @returns number of bytes written. + * @param pvArg User argument. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +typedef DECLCALLBACK(size_t) FNRTSTROUTPUT(void *pvArg, const char *pachChars, size_t cbChars); +/** Pointer to callback function. */ +typedef FNRTSTROUTPUT *PFNRTSTROUTPUT; +#endif + +/** + * Partial vsprintf worker implementation. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string an it's length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArg Argument to output worker. + * @param pszFormat Format string. + * @param args Argument list. + */ +RTDECL(size_t) RTLogFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArg, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Write log buffer to COM port. + * + * @param pach Pointer to the buffer to write. + * @param cb Number of bytes to write. + */ +RTDECL(void) RTLogWriteCom(const char *pach, size_t cb); + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param args Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + + +#if 0 /* not implemented yet */ + +/** Indicates that the semaphores shall be used to notify the other + * part about buffer changes. */ +#define LOGHOOKBUFFER_FLAGS_SEMAPHORED 1 + +/** + * Log Hook Buffer. + * Use to communicate between the logger and a log consumer. + */ +typedef struct RTLOGHOOKBUFFER +{ + /** Write pointer. */ + volatile void *pvWrite; + /** Read pointer. */ + volatile void *pvRead; + /** Buffer start. */ + void *pvStart; + /** Buffer end (exclusive). */ + void *pvEnd; + /** Signaling semaphore used by the writer to wait on a full buffer. + * Only used when indicated in flags. */ + void *pvSemWriter; + /** Signaling semaphore used by the read to wait on an empty buffer. + * Only used when indicated in flags. */ + void *pvSemReader; + /** Buffer flags. Current reserved and set to zero. */ + volatile unsigned fFlags; +} RTLOGHOOKBUFFER; +/** Pointer to a log hook buffer. */ +typedef RTLOGHOOKBUFFER *PRTLOGHOOKBUFFER; + + +/** + * Register a logging hook. + * + * This type of logging hooks are expecting different threads acting + * producer and consumer. They share a circular buffer which have two + * pointers one for each end. When the buffer is full there are two + * alternatives (indicated by a buffer flag), either wait for the + * consumer to get it's job done, or to write a generic message saying + * buffer overflow. + * + * Since the waiting would need a signal semaphore, we'll skip that for now. + * + * @returns iprt status code. + * @param pBuffer Pointer to a logger hook buffer. + */ +RTDECL(int) RTLogRegisterHook(PRTLOGGER pLogger, PRTLOGHOOKBUFFER pBuffer); + +/** + * Deregister a logging hook registered with RTLogRegisterHook(). + * + * @returns iprt status code. + * @param pBuffer Pointer to a logger hook buffer. + */ +RTDECL(int) RTLogDeregisterHook(PRTLOGGER pLogger, PRTLOGHOOKBUFFER pBuffer); + +#endif /* not implemented yet */ + + + +/** + * Write log buffer to a debugger (RTLOGDEST_DEBUGGER). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteDebugger(const char *pach, size_t cb); + +/** + * Write log buffer to a user defined output stream (RTLOGDEST_USER). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteUser(const char *pach, size_t cb); + +/** + * Write log buffer to stdout (RTLOGDEST_STDOUT). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteStdOut(const char *pach, size_t cb); + +/** + * Write log buffer to stdout (RTLOGDEST_STDERR). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteStdErr(const char *pach, size_t cb); + +#ifdef VBOX + +/** + * Prints a formatted string to the backdoor port. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogBackdoorPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Prints a formatted string to the backdoor port. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param args Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogBackdoorPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + +#endif /* VBOX */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/mangling.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/mangling.h @@ -0,0 +1,3708 @@ +/** @file + * IPRT - Symbol Mangling. + * + * This header is used to mangle public IPRT symbol to make it possible to have + * several IPRT version loaded into one symbol space at the same time. To + * enable symbol mangling you create a header which the compiler includes for + * every compilation unit (check out the -include option of gcc). Your header + * will define RT_MANGLER(name) and then include this header to set up the + * actual mappings. + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_mangling_h +#define ___iprt_mangling_h + +#ifndef RT_MANGLER +# error "RT_MANGLER is not defined." +#endif + +#ifndef DOXYGEN_RUNNING + +/** @def RT_WITH_MANGLING + * Indicates that we're mangling symbols. */ +# define RT_WITH_MANGLING + + +/* + * Stable functions (alphabetical order): + */ +/* ASM*: + grep -h DECLASM include/iprt/asm.h include/iprt/asm-amd64-x86.h \ + | kmk_sed -e 's/^DECLASM.[^)]*. *\(ASM[^(]*\)[(].*$/# define \1 :RT_MANGLER(\1)\n# define \1_EndProc :RT_MANGLER(\1_EndProc)/' \ + | sort \ + | awk -F: '{ printf("%-55s %s\n", $1, $2);' */ +# define ASMAddFlags RT_MANGLER(ASMAddFlags) +# define ASMAddFlags_EndProc RT_MANGLER(ASMAddFlags_EndProc) +# define ASMAtomicAddU16 RT_MANGLER(ASMAtomicAddU16) +# define ASMAtomicAddU16_EndProc RT_MANGLER(ASMAtomicAddU16_EndProc) +# define ASMAtomicAddU32 RT_MANGLER(ASMAtomicAddU32) +# define ASMAtomicAddU32_EndProc RT_MANGLER(ASMAtomicAddU32_EndProc) +# define ASMAtomicAddU64 RT_MANGLER(ASMAtomicAddU64) +# define ASMAtomicAddU64_EndProc RT_MANGLER(ASMAtomicAddU64_EndProc) +# define ASMAtomicAndU32 RT_MANGLER(ASMAtomicAndU32) +# define ASMAtomicAndU32_EndProc RT_MANGLER(ASMAtomicAndU32_EndProc) +# define ASMAtomicAndU64 RT_MANGLER(ASMAtomicAndU64) +# define ASMAtomicAndU64_EndProc RT_MANGLER(ASMAtomicAndU64_EndProc) +# define ASMAtomicBitClear RT_MANGLER(ASMAtomicBitClear) +# define ASMAtomicBitClear_EndProc RT_MANGLER(ASMAtomicBitClear_EndProc) +# define ASMAtomicBitSet RT_MANGLER(ASMAtomicBitSet) +# define ASMAtomicBitSet_EndProc RT_MANGLER(ASMAtomicBitSet_EndProc) +# define ASMAtomicBitTestAndClear RT_MANGLER(ASMAtomicBitTestAndClear) +# define ASMAtomicBitTestAndClear_EndProc RT_MANGLER(ASMAtomicBitTestAndClear_EndProc) +# define ASMAtomicBitTestAndSet RT_MANGLER(ASMAtomicBitTestAndSet) +# define ASMAtomicBitTestAndSet_EndProc RT_MANGLER(ASMAtomicBitTestAndSet_EndProc) +# define ASMAtomicBitTestAndToggle RT_MANGLER(ASMAtomicBitTestAndToggle) +# define ASMAtomicBitTestAndToggle_EndProc RT_MANGLER(ASMAtomicBitTestAndToggle_EndProc) +# define ASMAtomicBitToggle RT_MANGLER(ASMAtomicBitToggle) +# define ASMAtomicBitToggle_EndProc RT_MANGLER(ASMAtomicBitToggle_EndProc) +# define ASMAtomicCmpXchgExU32 RT_MANGLER(ASMAtomicCmpXchgExU32) +# define ASMAtomicCmpXchgExU32_EndProc RT_MANGLER(ASMAtomicCmpXchgExU32_EndProc) +# define ASMAtomicCmpXchgExU64 RT_MANGLER(ASMAtomicCmpXchgExU64) +# define ASMAtomicCmpXchgExU64_EndProc RT_MANGLER(ASMAtomicCmpXchgExU64_EndProc) +# define ASMAtomicCmpXchgU32 RT_MANGLER(ASMAtomicCmpXchgU32) +# define ASMAtomicCmpXchgU32_EndProc RT_MANGLER(ASMAtomicCmpXchgU32_EndProc) +# define ASMAtomicCmpXchgU64 RT_MANGLER(ASMAtomicCmpXchgU64) +# define ASMAtomicCmpXchgU64_EndProc RT_MANGLER(ASMAtomicCmpXchgU64_EndProc) +# define ASMAtomicCmpXchgU8 RT_MANGLER(ASMAtomicCmpXchgU8) +# define ASMAtomicCmpXchgU8_EndProc RT_MANGLER(ASMAtomicCmpXchgU8_EndProc) +# define ASMAtomicDecU16 RT_MANGLER(ASMAtomicDecU16) +# define ASMAtomicDecU16_EndProc RT_MANGLER(ASMAtomicDecU16_EndProc) +# define ASMAtomicDecU32 RT_MANGLER(ASMAtomicDecU32) +# define ASMAtomicDecU32_EndProc RT_MANGLER(ASMAtomicDecU32_EndProc) +# define ASMAtomicDecU64 RT_MANGLER(ASMAtomicDecU64) +# define ASMAtomicDecU64_EndProc RT_MANGLER(ASMAtomicDecU64_EndProc) +# define ASMAtomicIncU16 RT_MANGLER(ASMAtomicIncU16) +# define ASMAtomicIncU16_EndProc RT_MANGLER(ASMAtomicIncU16_EndProc) +# define ASMAtomicIncU32 RT_MANGLER(ASMAtomicIncU32) +# define ASMAtomicIncU32_EndProc RT_MANGLER(ASMAtomicIncU32_EndProc) +# define ASMAtomicIncU64 RT_MANGLER(ASMAtomicIncU64) +# define ASMAtomicIncU64_EndProc RT_MANGLER(ASMAtomicIncU64_EndProc) +# define ASMAtomicOrU32 RT_MANGLER(ASMAtomicOrU32) +# define ASMAtomicOrU32_EndProc RT_MANGLER(ASMAtomicOrU32_EndProc) +# define ASMAtomicOrU64 RT_MANGLER(ASMAtomicOrU64) +# define ASMAtomicOrU64_EndProc RT_MANGLER(ASMAtomicOrU64_EndProc) +# define ASMAtomicReadU64 RT_MANGLER(ASMAtomicReadU64) +# define ASMAtomicReadU64_EndProc RT_MANGLER(ASMAtomicReadU64_EndProc) +# define ASMAtomicUoAndU32 RT_MANGLER(ASMAtomicUoAndU32) +# define ASMAtomicUoAndU32_EndProc RT_MANGLER(ASMAtomicUoAndU32_EndProc) +# define ASMAtomicUoAndU64 RT_MANGLER(ASMAtomicUoAndU64) +# define ASMAtomicUoAndU64_EndProc RT_MANGLER(ASMAtomicUoAndU64_EndProc) +# define ASMAtomicUoDecU32 RT_MANGLER(ASMAtomicUoDecU32) +# define ASMAtomicUoDecU32_EndProc RT_MANGLER(ASMAtomicUoDecU32_EndProc) +# define ASMAtomicUoIncU32 RT_MANGLER(ASMAtomicUoIncU32) +# define ASMAtomicUoIncU32_EndProc RT_MANGLER(ASMAtomicUoIncU32_EndProc) +# define ASMAtomicUoOrU32 RT_MANGLER(ASMAtomicUoOrU32) +# define ASMAtomicUoOrU32_EndProc RT_MANGLER(ASMAtomicUoOrU32_EndProc) +# define ASMAtomicUoOrU64 RT_MANGLER(ASMAtomicUoOrU64) +# define ASMAtomicUoOrU64_EndProc RT_MANGLER(ASMAtomicUoOrU64_EndProc) +# define ASMAtomicUoReadU64 RT_MANGLER(ASMAtomicUoReadU64) +# define ASMAtomicUoReadU64_EndProc RT_MANGLER(ASMAtomicUoReadU64_EndProc) +# define ASMAtomicXchgU16 RT_MANGLER(ASMAtomicXchgU16) +# define ASMAtomicXchgU16_EndProc RT_MANGLER(ASMAtomicXchgU16_EndProc) +# define ASMAtomicXchgU32 RT_MANGLER(ASMAtomicXchgU32) +# define ASMAtomicXchgU32_EndProc RT_MANGLER(ASMAtomicXchgU32_EndProc) +# define ASMAtomicXchgU64 RT_MANGLER(ASMAtomicXchgU64) +# define ASMAtomicXchgU64_EndProc RT_MANGLER(ASMAtomicXchgU64_EndProc) +# define ASMAtomicXchgU8 RT_MANGLER(ASMAtomicXchgU8) +# define ASMAtomicXchgU8_EndProc RT_MANGLER(ASMAtomicXchgU8_EndProc) +# define ASMBitClear RT_MANGLER(ASMBitClear) +# define ASMBitClear_EndProc RT_MANGLER(ASMBitClear_EndProc) +# define ASMBitFirstClear RT_MANGLER(ASMBitFirstClear) +# define ASMBitFirstClear_EndProc RT_MANGLER(ASMBitFirstClear_EndProc) +# define ASMBitFirstSet RT_MANGLER(ASMBitFirstSet) +# define ASMBitFirstSet_EndProc RT_MANGLER(ASMBitFirstSet_EndProc) +# define ASMBitFirstSetU16 RT_MANGLER(ASMBitFirstSetU16) +# define ASMBitFirstSetU16_EndProc RT_MANGLER(ASMBitFirstSetU16_EndProc) +# define ASMBitFirstSetU32 RT_MANGLER(ASMBitFirstSetU32) +# define ASMBitFirstSetU32_EndProc RT_MANGLER(ASMBitFirstSetU32_EndProc) +# define ASMBitFirstSetU64 RT_MANGLER(ASMBitFirstSetU64) +# define ASMBitFirstSetU64_EndProc RT_MANGLER(ASMBitFirstSetU64_EndProc) +# define ASMBitLastSetU16 RT_MANGLER(ASMBitLastSetU16) +# define ASMBitLastSetU16_EndProc RT_MANGLER(ASMBitLastSetU16_EndProc) +# define ASMBitLastSetU32 RT_MANGLER(ASMBitLastSetU32) +# define ASMBitLastSetU32_EndProc RT_MANGLER(ASMBitLastSetU32_EndProc) +# define ASMBitLastSetU64 RT_MANGLER(ASMBitLastSetU64) +# define ASMBitLastSetU64_EndProc RT_MANGLER(ASMBitLastSetU64_EndProc) +# define ASMBitNextClear RT_MANGLER(ASMBitNextClear) +# define ASMBitNextClear_EndProc RT_MANGLER(ASMBitNextClear_EndProc) +# define ASMBitNextSet RT_MANGLER(ASMBitNextSet) +# define ASMBitNextSet_EndProc RT_MANGLER(ASMBitNextSet_EndProc) +# define ASMBitSet RT_MANGLER(ASMBitSet) +# define ASMBitSet_EndProc RT_MANGLER(ASMBitSet_EndProc) +# define ASMBitTest RT_MANGLER(ASMBitTest) +# define ASMBitTest_EndProc RT_MANGLER(ASMBitTest_EndProc) +# define ASMBitTestAndClear RT_MANGLER(ASMBitTestAndClear) +# define ASMBitTestAndClear_EndProc RT_MANGLER(ASMBitTestAndClear_EndProc) +# define ASMBitTestAndSet RT_MANGLER(ASMBitTestAndSet) +# define ASMBitTestAndSet_EndProc RT_MANGLER(ASMBitTestAndSet_EndProc) +# define ASMBitTestAndToggle RT_MANGLER(ASMBitTestAndToggle) +# define ASMBitTestAndToggle_EndProc RT_MANGLER(ASMBitTestAndToggle_EndProc) +# define ASMBitToggle RT_MANGLER(ASMBitToggle) +# define ASMBitToggle_EndProc RT_MANGLER(ASMBitToggle_EndProc) +# define ASMByteSwapU16 RT_MANGLER(ASMByteSwapU16) +# define ASMByteSwapU16_EndProc RT_MANGLER(ASMByteSwapU16_EndProc) +# define ASMByteSwapU32 RT_MANGLER(ASMByteSwapU32) +# define ASMByteSwapU32_EndProc RT_MANGLER(ASMByteSwapU32_EndProc) +# define ASMChangeFlags RT_MANGLER(ASMChangeFlags) +# define ASMChangeFlags_EndProc RT_MANGLER(ASMChangeFlags_EndProc) +# define ASMClearFlags RT_MANGLER(ASMClearFlags) +# define ASMClearFlags_EndProc RT_MANGLER(ASMClearFlags_EndProc) +# define ASMCpuId RT_MANGLER(ASMCpuId) +# define ASMCpuId_EAX RT_MANGLER(ASMCpuId_EAX) +# define ASMCpuId_EAX_EndProc RT_MANGLER(ASMCpuId_EAX_EndProc) +# define ASMCpuId_EBX RT_MANGLER(ASMCpuId_EBX) +# define ASMCpuId_EBX_EndProc RT_MANGLER(ASMCpuId_EBX_EndProc) +# define ASMCpuId_ECX RT_MANGLER(ASMCpuId_ECX) +# define ASMCpuId_ECX_EDX RT_MANGLER(ASMCpuId_ECX_EDX) +# define ASMCpuId_ECX_EDX_EndProc RT_MANGLER(ASMCpuId_ECX_EDX_EndProc) +# define ASMCpuId_ECX_EndProc RT_MANGLER(ASMCpuId_ECX_EndProc) +# define ASMCpuId_EDX RT_MANGLER(ASMCpuId_EDX) +# define ASMCpuId_EDX_EndProc RT_MANGLER(ASMCpuId_EDX_EndProc) +# define ASMCpuId_EndProc RT_MANGLER(ASMCpuId_EndProc) +# define ASMCpuId_Idx_ECX RT_MANGLER(ASMCpuId_Idx_ECX) +# define ASMCpuId_Idx_ECX_EndProc RT_MANGLER(ASMCpuId_Idx_ECX_EndProc) +# define ASMCpuIdExSlow RT_MANGLER(ASMCpuIdExSlow) +# define ASMCpuIdExSlow_EndProc RT_MANGLER(ASMCpuIdExSlow_EndProc) +# define ASMGetAndClearDR6 RT_MANGLER(ASMGetAndClearDR6) +# define ASMGetAndClearDR6_EndProc RT_MANGLER(ASMGetAndClearDR6_EndProc) +# define ASMGetApicId RT_MANGLER(ASMGetApicId) +# define ASMGetApicId_EndProc RT_MANGLER(ASMGetApicId_EndProc) +# define ASMGetCR0 RT_MANGLER(ASMGetCR0) +# define ASMGetCR0_EndProc RT_MANGLER(ASMGetCR0_EndProc) +# define ASMGetCR2 RT_MANGLER(ASMGetCR2) +# define ASMGetCR2_EndProc RT_MANGLER(ASMGetCR2_EndProc) +# define ASMGetCR3 RT_MANGLER(ASMGetCR3) +# define ASMGetCR3_EndProc RT_MANGLER(ASMGetCR3_EndProc) +# define ASMGetCR4 RT_MANGLER(ASMGetCR4) +# define ASMGetCR4_EndProc RT_MANGLER(ASMGetCR4_EndProc) +# define ASMGetCR8 RT_MANGLER(ASMGetCR8) +# define ASMGetCR8_EndProc RT_MANGLER(ASMGetCR8_EndProc) +# define ASMGetCS RT_MANGLER(ASMGetCS) +# define ASMGetCS_EndProc RT_MANGLER(ASMGetCS_EndProc) +# define ASMGetDR0 RT_MANGLER(ASMGetDR0) +# define ASMGetDR0_EndProc RT_MANGLER(ASMGetDR0_EndProc) +# define ASMGetDR1 RT_MANGLER(ASMGetDR1) +# define ASMGetDR1_EndProc RT_MANGLER(ASMGetDR1_EndProc) +# define ASMGetDR2 RT_MANGLER(ASMGetDR2) +# define ASMGetDR2_EndProc RT_MANGLER(ASMGetDR2_EndProc) +# define ASMGetDR3 RT_MANGLER(ASMGetDR3) +# define ASMGetDR3_EndProc RT_MANGLER(ASMGetDR3_EndProc) +# define ASMGetDR6 RT_MANGLER(ASMGetDR6) +# define ASMGetDR6_EndProc RT_MANGLER(ASMGetDR6_EndProc) +# define ASMGetDR7 RT_MANGLER(ASMGetDR7) +# define ASMGetDR7_EndProc RT_MANGLER(ASMGetDR7_EndProc) +# define ASMGetDS RT_MANGLER(ASMGetDS) +# define ASMGetDS_EndProc RT_MANGLER(ASMGetDS_EndProc) +# define ASMGetES RT_MANGLER(ASMGetES) +# define ASMGetES_EndProc RT_MANGLER(ASMGetES_EndProc) +# define ASMGetFlags RT_MANGLER(ASMGetFlags) +# define ASMGetFlags_EndProc RT_MANGLER(ASMGetFlags_EndProc) +# define ASMGetFS RT_MANGLER(ASMGetFS) +# define ASMGetFS_EndProc RT_MANGLER(ASMGetFS_EndProc) +# define ASMGetGDTR RT_MANGLER(ASMGetGDTR) +# define ASMGetGDTR_EndProc RT_MANGLER(ASMGetGDTR_EndProc) +# define ASMGetGS RT_MANGLER(ASMGetGS) +# define ASMGetGS_EndProc RT_MANGLER(ASMGetGS_EndProc) +# define ASMGetIDTR RT_MANGLER(ASMGetIDTR) +# define ASMGetIDTR_EndProc RT_MANGLER(ASMGetIDTR_EndProc) +# define ASMGetIdtrLimit RT_MANGLER(ASMGetIdtrLimit) +# define ASMGetIdtrLimit_EndProc RT_MANGLER(ASMGetIdtrLimit_EndProc) +# define ASMGetLDTR RT_MANGLER(ASMGetLDTR) +# define ASMGetLDTR_EndProc RT_MANGLER(ASMGetLDTR_EndProc) +# define ASMGetSegAttr RT_MANGLER(ASMGetSegAttr) +# define ASMGetSegAttr_EndProc RT_MANGLER(ASMGetSegAttr_EndProc) +# define ASMGetSS RT_MANGLER(ASMGetSS) +# define ASMGetSS_EndProc RT_MANGLER(ASMGetSS_EndProc) +# define ASMGetTR RT_MANGLER(ASMGetTR) +# define ASMGetTR_EndProc RT_MANGLER(ASMGetTR_EndProc) +# define ASMGetXcr0 RT_MANGLER(ASMGetXcr0) +# define ASMGetXcr0_EndProc RT_MANGLER(ASMGetXcr0_EndProc) +# define ASMHalt RT_MANGLER(ASMHalt) +# define ASMHalt_EndProc RT_MANGLER(ASMHalt_EndProc) +# define ASMInStrU16 RT_MANGLER(ASMInStrU16) +# define ASMInStrU16_EndProc RT_MANGLER(ASMInStrU16_EndProc) +# define ASMInStrU32 RT_MANGLER(ASMInStrU32) +# define ASMInStrU32_EndProc RT_MANGLER(ASMInStrU32_EndProc) +# define ASMInStrU8 RT_MANGLER(ASMInStrU8) +# define ASMInStrU8_EndProc RT_MANGLER(ASMInStrU8_EndProc) +# define ASMIntDisable RT_MANGLER(ASMIntDisable) +# define ASMIntDisable_EndProc RT_MANGLER(ASMIntDisable_EndProc) +# define ASMIntDisableFlags RT_MANGLER(ASMIntDisableFlags) +# define ASMIntDisableFlags_EndProc RT_MANGLER(ASMIntDisableFlags_EndProc) +# define ASMIntEnable RT_MANGLER(ASMIntEnable) +# define ASMIntEnable_EndProc RT_MANGLER(ASMIntEnable_EndProc) +# define ASMInU16 RT_MANGLER(ASMInU16) +# define ASMInU16_EndProc RT_MANGLER(ASMInU16_EndProc) +# define ASMInU32 RT_MANGLER(ASMInU32) +# define ASMInU32_EndProc RT_MANGLER(ASMInU32_EndProc) +# define ASMInU8 RT_MANGLER(ASMInU8) +# define ASMInU8_EndProc RT_MANGLER(ASMInU8_EndProc) +# define ASMInvalidateInternalCaches RT_MANGLER(ASMInvalidateInternalCaches) +# define ASMInvalidateInternalCaches_EndProc RT_MANGLER(ASMInvalidateInternalCaches_EndProc) +# define ASMInvalidatePage RT_MANGLER(ASMInvalidatePage) +# define ASMInvalidatePage_EndProc RT_MANGLER(ASMInvalidatePage_EndProc) +# define ASMMemFill32 RT_MANGLER(ASMMemFill32) +# define ASMMemFill32_EndProc RT_MANGLER(ASMMemFill32_EndProc) +# define ASMMemFirstNonZero RT_MANGLER(ASMMemFirstNonZero) +# define ASMMemFirstNonZero_EndProc RT_MANGLER(ASMMemFirstNonZero_EndProc) +# define ASMMemFirstMismatchingU8 RT_MANGLER(ASMMemFirstMismatchingU8) +# define ASMMemFirstMismatchingU8_EndProc RT_MANGLER(ASMMemFirstMismatchingU8_EndProc) +# define ASMMemFirstMismatchingU32 RT_MANGLER(ASMMemFirstMismatchingU32) +# define ASMMemFirstMismatchingU32_EndProc RT_MANGLER(ASMMemFirstMismatchingU32_EndProc) +# define ASMMemIsZero RT_MANGLER(ASMMemIsZero) +# define ASMMemIsZero_EndProc RT_MANGLER(ASMMemIsZero_EndProc) +# define ASMMemIsAllU8 RT_MANGLER(ASMMemIsAllU8) +# define ASMMemIsAllU8_EndProc RT_MANGLER(ASMMemIsAllU8_EndProc) +# define ASMMemZero32 RT_MANGLER(ASMMemZero32) +# define ASMMemZero32_EndProc RT_MANGLER(ASMMemZero32_EndProc) +# define ASMMemZeroPage RT_MANGLER(ASMMemZeroPage) +# define ASMMemZeroPage_EndProc RT_MANGLER(ASMMemZeroPage_EndProc) +# define ASMNopPause RT_MANGLER(ASMNopPause) +# define ASMNopPause_EndProc RT_MANGLER(ASMNopPause_EndProc) +# define ASMOutStrU16 RT_MANGLER(ASMOutStrU16) +# define ASMOutStrU16_EndProc RT_MANGLER(ASMOutStrU16_EndProc) +# define ASMOutStrU32 RT_MANGLER(ASMOutStrU32) +# define ASMOutStrU32_EndProc RT_MANGLER(ASMOutStrU32_EndProc) +# define ASMOutStrU8 RT_MANGLER(ASMOutStrU8) +# define ASMOutStrU8_EndProc RT_MANGLER(ASMOutStrU8_EndProc) +# define ASMOutU16 RT_MANGLER(ASMOutU16) +# define ASMOutU16_EndProc RT_MANGLER(ASMOutU16_EndProc) +# define ASMOutU32 RT_MANGLER(ASMOutU32) +# define ASMOutU32_EndProc RT_MANGLER(ASMOutU32_EndProc) +# define ASMOutU8 RT_MANGLER(ASMOutU8) +# define ASMOutU8_EndProc RT_MANGLER(ASMOutU8_EndProc) +# define ASMProbeReadByte RT_MANGLER(ASMProbeReadByte) +# define ASMProbeReadByte_EndProc RT_MANGLER(ASMProbeReadByte_EndProc) +# define ASMRdMsr RT_MANGLER(ASMRdMsr) +# define ASMRdMsr_EndProc RT_MANGLER(ASMRdMsr_EndProc) +# define ASMRdMsr_High RT_MANGLER(ASMRdMsr_High) +# define ASMRdMsr_High_EndProc RT_MANGLER(ASMRdMsr_High_EndProc) +# define ASMRdMsr_Low RT_MANGLER(ASMRdMsr_Low) +# define ASMRdMsr_Low_EndProc RT_MANGLER(ASMRdMsr_Low_EndProc) +# define ASMRdMsrEx RT_MANGLER(ASMRdMsrEx) +# define ASMRdMsrEx_EndProc RT_MANGLER(ASMRdMsrEx_EndProc) +# define ASMReadTSC RT_MANGLER(ASMReadTSC) +# define ASMReadTSC_EndProc RT_MANGLER(ASMReadTSC_EndProc) +# define ASMReadTscWithAux RT_MANGLER(ASMReadTscWithAux) +# define ASMReadTscWithAux_EndProc RT_MANGLER(ASMReadTscWithAux_EndProc) +# define ASMReloadCR3 RT_MANGLER(ASMReloadCR3) +# define ASMReloadCR3_EndProc RT_MANGLER(ASMReloadCR3_EndProc) +# define ASMRotateLeftU32 RT_MANGLER(ASMRotateLeftU32) +# define ASMRotateLeftU32_EndProc RT_MANGLER(ASMRotateLeftU32_EndProc) +# define ASMRotateRightU32 RT_MANGLER(ASMRotateRightU32) +# define ASMRotateRightU32_EndProc RT_MANGLER(ASMRotateRightU32_EndProc) +# define ASMSerializeInstructionCpuId RT_MANGLER(ASMSerializeInstructionCpuId) +# define ASMSerializeInstructionCpuId_EndProc RT_MANGLER(ASMSerializeInstructionCpuId_EndProc) +# define ASMSerializeInstructionIRet RT_MANGLER(ASMSerializeInstructionIRet) +# define ASMSerializeInstructionIRet_EndProc RT_MANGLER(ASMSerializeInstructionIRet_EndProc) +# define ASMSerializeInstructionRdTscp RT_MANGLER(ASMSerializeInstructionRdTscp) +# define ASMSerializeInstructionRdTscp_EndProc RT_MANGLER(ASMSerializeInstructionRdTscp_EndProc) +# define ASMSetCR0 RT_MANGLER(ASMSetCR0) +# define ASMSetCR0_EndProc RT_MANGLER(ASMSetCR0_EndProc) +# define ASMSetCR2 RT_MANGLER(ASMSetCR2) +# define ASMSetCR2_EndProc RT_MANGLER(ASMSetCR2_EndProc) +# define ASMSetCR3 RT_MANGLER(ASMSetCR3) +# define ASMSetCR3_EndProc RT_MANGLER(ASMSetCR3_EndProc) +# define ASMSetCR4 RT_MANGLER(ASMSetCR4) +# define ASMSetCR4_EndProc RT_MANGLER(ASMSetCR4_EndProc) +# define ASMSetDR0 RT_MANGLER(ASMSetDR0) +# define ASMSetDR0_EndProc RT_MANGLER(ASMSetDR0_EndProc) +# define ASMSetDR1 RT_MANGLER(ASMSetDR1) +# define ASMSetDR1_EndProc RT_MANGLER(ASMSetDR1_EndProc) +# define ASMSetDR2 RT_MANGLER(ASMSetDR2) +# define ASMSetDR2_EndProc RT_MANGLER(ASMSetDR2_EndProc) +# define ASMSetDR3 RT_MANGLER(ASMSetDR3) +# define ASMSetDR3_EndProc RT_MANGLER(ASMSetDR3_EndProc) +# define ASMSetDR6 RT_MANGLER(ASMSetDR6) +# define ASMSetDR6_EndProc RT_MANGLER(ASMSetDR6_EndProc) +# define ASMSetDR7 RT_MANGLER(ASMSetDR7) +# define ASMSetDR7_EndProc RT_MANGLER(ASMSetDR7_EndProc) +# define ASMSetFlags RT_MANGLER(ASMSetFlags) +# define ASMSetFlags_EndProc RT_MANGLER(ASMSetFlags_EndProc) +# define ASMSetGDTR RT_MANGLER(ASMSetGDTR) +# define ASMSetGDTR_EndProc RT_MANGLER(ASMSetGDTR_EndProc) +# define ASMSetIDTR RT_MANGLER(ASMSetIDTR) +# define ASMSetIDTR_EndProc RT_MANGLER(ASMSetIDTR_EndProc) +# define ASMSetXcr0 RT_MANGLER(ASMSetXcr0) +# define ASMSetXcr0_EndProc RT_MANGLER(ASMSetXcr0_EndProc) +# define ASMWriteBackAndInvalidateCaches RT_MANGLER(ASMWriteBackAndInvalidateCaches) +# define ASMWriteBackAndInvalidateCaches_EndProc RT_MANGLER(ASMWriteBackAndInvalidateCaches_EndProc) +# define ASMWrMsr RT_MANGLER(ASMWrMsr) +# define ASMWrMsr_EndProc RT_MANGLER(ASMWrMsr_EndProc) +# define ASMWrMsrEx RT_MANGLER(ASMWrMsrEx) +# define ASMWrMsrEx_EndProc RT_MANGLER(ASMWrMsrEx_EndProc) +# define ASMXRstor RT_MANGLER(ASMXRstor) +# define ASMXRstor_EndProc RT_MANGLER(ASMXRstor_EndProc) +# define ASMXSave RT_MANGLER(ASMXSave) +# define ASMXSave_EndProc RT_MANGLER(ASMXSave_EndProc) +# define ASMFxRstor RT_MANGLER(ASMFxRstor) +# define ASMFxRstor_EndProc RT_MANGLER(ASMFxRstor_EndProc) +# define ASMFxSave RT_MANGLER(ASMFxSave) +# define ASMFxSave_EndProc RT_MANGLER(ASMFxSave_EndProc) + +# define RTAssertAreQuiet RT_MANGLER(RTAssertAreQuiet) +# define RTAssertMayPanic RT_MANGLER(RTAssertMayPanic) +# define RTAssertMsg1 RT_MANGLER(RTAssertMsg1) +# define RTAssertMsg1Weak RT_MANGLER(RTAssertMsg1Weak) +# define RTAssertMsg2 RT_MANGLER(RTAssertMsg2) +# define RTAssertMsg2Add RT_MANGLER(RTAssertMsg2Add) +# define RTAssertMsg2AddV RT_MANGLER(RTAssertMsg2AddV) +# define RTAssertMsg2AddWeak RT_MANGLER(RTAssertMsg2AddWeak) +# define RTAssertMsg2AddWeakV RT_MANGLER(RTAssertMsg2AddWeakV) +# define RTAssertMsg2V RT_MANGLER(RTAssertMsg2V) +# define RTAssertMsg2Weak RT_MANGLER(RTAssertMsg2Weak) +# define RTAssertMsg2WeakV RT_MANGLER(RTAssertMsg2WeakV) +# define RTAssertSetMayPanic RT_MANGLER(RTAssertSetMayPanic) +# define RTAssertSetQuiet RT_MANGLER(RTAssertSetQuiet) +# define RTAssertShouldPanic RT_MANGLER(RTAssertShouldPanic) +# define RTAvlGCPhysDestroy RT_MANGLER(RTAvlGCPhysDestroy) +# define RTAvlGCPhysDoWithAll RT_MANGLER(RTAvlGCPhysDoWithAll) +# define RTAvlGCPhysGet RT_MANGLER(RTAvlGCPhysGet) +# define RTAvlGCPhysGetBestFit RT_MANGLER(RTAvlGCPhysGetBestFit) +# define RTAvlGCPhysInsert RT_MANGLER(RTAvlGCPhysInsert) +# define RTAvlGCPhysRemove RT_MANGLER(RTAvlGCPhysRemove) +# define RTAvlGCPhysRemoveBestFit RT_MANGLER(RTAvlGCPhysRemoveBestFit) +# define RTAvlGCPtrDestroy RT_MANGLER(RTAvlGCPtrDestroy) +# define RTAvlGCPtrDoWithAll RT_MANGLER(RTAvlGCPtrDoWithAll) +# define RTAvlGCPtrGet RT_MANGLER(RTAvlGCPtrGet) +# define RTAvlGCPtrGetBestFit RT_MANGLER(RTAvlGCPtrGetBestFit) +# define RTAvlGCPtrInsert RT_MANGLER(RTAvlGCPtrInsert) +# define RTAvlGCPtrRemove RT_MANGLER(RTAvlGCPtrRemove) +# define RTAvlGCPtrRemoveBestFit RT_MANGLER(RTAvlGCPtrRemoveBestFit) +# define RTAvlHCPhysDestroy RT_MANGLER(RTAvlHCPhysDestroy) +# define RTAvlHCPhysDoWithAll RT_MANGLER(RTAvlHCPhysDoWithAll) +# define RTAvlHCPhysGet RT_MANGLER(RTAvlHCPhysGet) +# define RTAvlHCPhysGetBestFit RT_MANGLER(RTAvlHCPhysGetBestFit) +# define RTAvlHCPhysInsert RT_MANGLER(RTAvlHCPhysInsert) +# define RTAvlHCPhysRemove RT_MANGLER(RTAvlHCPhysRemove) +# define RTAvlHCPhysRemoveBestFit RT_MANGLER(RTAvlHCPhysRemoveBestFit) +# define RTAvllU32Destroy RT_MANGLER(RTAvllU32Destroy) +# define RTAvllU32DoWithAll RT_MANGLER(RTAvllU32DoWithAll) +# define RTAvllU32Get RT_MANGLER(RTAvllU32Get) +# define RTAvllU32GetBestFit RT_MANGLER(RTAvllU32GetBestFit) +# define RTAvllU32Insert RT_MANGLER(RTAvllU32Insert) +# define RTAvllU32Remove RT_MANGLER(RTAvllU32Remove) +# define RTAvllU32RemoveBestFit RT_MANGLER(RTAvllU32RemoveBestFit) +# define RTAvllU32RemoveNode RT_MANGLER(RTAvllU32RemoveNode) +# define RTAvloGCPhysDestroy RT_MANGLER(RTAvloGCPhysDestroy) +# define RTAvloGCPhysDoWithAll RT_MANGLER(RTAvloGCPhysDoWithAll) +# define RTAvloGCPhysGet RT_MANGLER(RTAvloGCPhysGet) +# define RTAvloGCPhysGetBestFit RT_MANGLER(RTAvloGCPhysGetBestFit) +# define RTAvloGCPhysInsert RT_MANGLER(RTAvloGCPhysInsert) +# define RTAvloGCPhysRemove RT_MANGLER(RTAvloGCPhysRemove) +# define RTAvloGCPhysRemoveBestFit RT_MANGLER(RTAvloGCPhysRemoveBestFit) +# define RTAvloGCPtrDestroy RT_MANGLER(RTAvloGCPtrDestroy) +# define RTAvloGCPtrDoWithAll RT_MANGLER(RTAvloGCPtrDoWithAll) +# define RTAvloGCPtrGet RT_MANGLER(RTAvloGCPtrGet) +# define RTAvloGCPtrGetBestFit RT_MANGLER(RTAvloGCPtrGetBestFit) +# define RTAvloGCPtrInsert RT_MANGLER(RTAvloGCPtrInsert) +# define RTAvloGCPtrRemove RT_MANGLER(RTAvloGCPtrRemove) +# define RTAvloGCPtrRemoveBestFit RT_MANGLER(RTAvloGCPtrRemoveBestFit) +# define RTAvloHCPhysDestroy RT_MANGLER(RTAvloHCPhysDestroy) +# define RTAvloHCPhysDoWithAll RT_MANGLER(RTAvloHCPhysDoWithAll) +# define RTAvloHCPhysGet RT_MANGLER(RTAvloHCPhysGet) +# define RTAvloHCPhysGetBestFit RT_MANGLER(RTAvloHCPhysGetBestFit) +# define RTAvloHCPhysInsert RT_MANGLER(RTAvloHCPhysInsert) +# define RTAvloHCPhysRemove RT_MANGLER(RTAvloHCPhysRemove) +# define RTAvloHCPhysRemoveBestFit RT_MANGLER(RTAvloHCPhysRemoveBestFit) +# define RTAvloIOPortDestroy RT_MANGLER(RTAvloIOPortDestroy) +# define RTAvloIOPortDoWithAll RT_MANGLER(RTAvloIOPortDoWithAll) +# define RTAvloIOPortGet RT_MANGLER(RTAvloIOPortGet) +# define RTAvloIOPortGetBestFit RT_MANGLER(RTAvloIOPortGetBestFit) +# define RTAvloIOPortInsert RT_MANGLER(RTAvloIOPortInsert) +# define RTAvloIOPortRemove RT_MANGLER(RTAvloIOPortRemove) +# define RTAvloIOPortRemoveBestFit RT_MANGLER(RTAvloIOPortRemoveBestFit) +# define RTAvloU32Destroy RT_MANGLER(RTAvloU32Destroy) +# define RTAvloU32DoWithAll RT_MANGLER(RTAvloU32DoWithAll) +# define RTAvloU32Get RT_MANGLER(RTAvloU32Get) +# define RTAvloU32GetBestFit RT_MANGLER(RTAvloU32GetBestFit) +# define RTAvloU32Insert RT_MANGLER(RTAvloU32Insert) +# define RTAvloU32Remove RT_MANGLER(RTAvloU32Remove) +# define RTAvloU32RemoveBestFit RT_MANGLER(RTAvloU32RemoveBestFit) +# define RTAvlPVDestroy RT_MANGLER(RTAvlPVDestroy) +# define RTAvlPVDoWithAll RT_MANGLER(RTAvlPVDoWithAll) +# define RTAvlPVGet RT_MANGLER(RTAvlPVGet) +# define RTAvlPVGetBestFit RT_MANGLER(RTAvlPVGetBestFit) +# define RTAvlPVInsert RT_MANGLER(RTAvlPVInsert) +# define RTAvlPVRemove RT_MANGLER(RTAvlPVRemove) +# define RTAvlPVRemoveBestFit RT_MANGLER(RTAvlPVRemoveBestFit) +# define RTAvlrFileOffsetDestroy RT_MANGLER(RTAvlrFileOffsetDestroy) +# define RTAvlrFileOffsetDoWithAll RT_MANGLER(RTAvlrFileOffsetDoWithAll) +# define RTAvlrFileOffsetGet RT_MANGLER(RTAvlrFileOffsetGet) +# define RTAvlrFileOffsetGetBestFit RT_MANGLER(RTAvlrFileOffsetGetBestFit) +# define RTAvlrFileOffsetGetLeft RT_MANGLER(RTAvlrFileOffsetGetLeft) +# define RTAvlrFileOffsetGetRight RT_MANGLER(RTAvlrFileOffsetGetRight) +# define RTAvlrFileOffsetGetRoot RT_MANGLER(RTAvlrFileOffsetGetRoot) +# define RTAvlrFileOffsetInsert RT_MANGLER(RTAvlrFileOffsetInsert) +# define RTAvlrFileOffsetRangeGet RT_MANGLER(RTAvlrFileOffsetRangeGet) +# define RTAvlrFileOffsetRangeRemove RT_MANGLER(RTAvlrFileOffsetRangeRemove) +# define RTAvlrFileOffsetRemove RT_MANGLER(RTAvlrFileOffsetRemove) +# define RTAvlrGCPtrDestroy RT_MANGLER(RTAvlrGCPtrDestroy) +# define RTAvlrGCPtrDoWithAll RT_MANGLER(RTAvlrGCPtrDoWithAll) +# define RTAvlrGCPtrGet RT_MANGLER(RTAvlrGCPtrGet) +# define RTAvlrGCPtrGetBestFit RT_MANGLER(RTAvlrGCPtrGetBestFit) +# define RTAvlrGCPtrGetLeft RT_MANGLER(RTAvlrGCPtrGetLeft) +# define RTAvlrGCPtrGetRight RT_MANGLER(RTAvlrGCPtrGetRight) +# define RTAvlrGCPtrGetRoot RT_MANGLER(RTAvlrGCPtrGetRoot) +# define RTAvlrGCPtrInsert RT_MANGLER(RTAvlrGCPtrInsert) +# define RTAvlrGCPtrRangeGet RT_MANGLER(RTAvlrGCPtrRangeGet) +# define RTAvlrGCPtrRangeRemove RT_MANGLER(RTAvlrGCPtrRangeRemove) +# define RTAvlrGCPtrRemove RT_MANGLER(RTAvlrGCPtrRemove) +# define RTAvlroGCPhysDestroy RT_MANGLER(RTAvlroGCPhysDestroy) +# define RTAvlroGCPhysDoWithAll RT_MANGLER(RTAvlroGCPhysDoWithAll) +# define RTAvlroGCPhysGet RT_MANGLER(RTAvlroGCPhysGet) +# define RTAvlroGCPhysGetBestFit RT_MANGLER(RTAvlroGCPhysGetBestFit) +# define RTAvlroGCPhysGetLeft RT_MANGLER(RTAvlroGCPhysGetLeft) +# define RTAvlroGCPhysGetRight RT_MANGLER(RTAvlroGCPhysGetRight) +# define RTAvlroGCPhysGetRoot RT_MANGLER(RTAvlroGCPhysGetRoot) +# define RTAvlroGCPhysInsert RT_MANGLER(RTAvlroGCPhysInsert) +# define RTAvlroGCPhysRangeGet RT_MANGLER(RTAvlroGCPhysRangeGet) +# define RTAvlroGCPhysRangeRemove RT_MANGLER(RTAvlroGCPhysRangeRemove) +# define RTAvlroGCPhysRemove RT_MANGLER(RTAvlroGCPhysRemove) +# define RTAvlroGCPtrDestroy RT_MANGLER(RTAvlroGCPtrDestroy) +# define RTAvlroGCPtrDoWithAll RT_MANGLER(RTAvlroGCPtrDoWithAll) +# define RTAvlroGCPtrGet RT_MANGLER(RTAvlroGCPtrGet) +# define RTAvlroGCPtrGetBestFit RT_MANGLER(RTAvlroGCPtrGetBestFit) +# define RTAvlroGCPtrGetLeft RT_MANGLER(RTAvlroGCPtrGetLeft) +# define RTAvlroGCPtrGetRight RT_MANGLER(RTAvlroGCPtrGetRight) +# define RTAvlroGCPtrGetRoot RT_MANGLER(RTAvlroGCPtrGetRoot) +# define RTAvlroGCPtrInsert RT_MANGLER(RTAvlroGCPtrInsert) +# define RTAvlroGCPtrRangeGet RT_MANGLER(RTAvlroGCPtrRangeGet) +# define RTAvlroGCPtrRangeRemove RT_MANGLER(RTAvlroGCPtrRangeRemove) +# define RTAvlroGCPtrRemove RT_MANGLER(RTAvlroGCPtrRemove) +# define RTAvlroIOPortDestroy RT_MANGLER(RTAvlroIOPortDestroy) +# define RTAvlroIOPortDoWithAll RT_MANGLER(RTAvlroIOPortDoWithAll) +# define RTAvlroIOPortGet RT_MANGLER(RTAvlroIOPortGet) +# define RTAvlroIOPortInsert RT_MANGLER(RTAvlroIOPortInsert) +# define RTAvlroIOPortRangeGet RT_MANGLER(RTAvlroIOPortRangeGet) +# define RTAvlroIOPortRangeRemove RT_MANGLER(RTAvlroIOPortRangeRemove) +# define RTAvlroIOPortRemove RT_MANGLER(RTAvlroIOPortRemove) +# define RTAvlrooGCPtrDestroy RT_MANGLER(RTAvlrooGCPtrDestroy) +# define RTAvlrooGCPtrDoWithAll RT_MANGLER(RTAvlrooGCPtrDoWithAll) +# define RTAvlrooGCPtrGet RT_MANGLER(RTAvlrooGCPtrGet) +# define RTAvlrooGCPtrGetBestFit RT_MANGLER(RTAvlrooGCPtrGetBestFit) +# define RTAvlrooGCPtrGetLeft RT_MANGLER(RTAvlrooGCPtrGetLeft) +# define RTAvlrooGCPtrGetNextEqual RT_MANGLER(RTAvlrooGCPtrGetNextEqual) +# define RTAvlrooGCPtrGetRight RT_MANGLER(RTAvlrooGCPtrGetRight) +# define RTAvlrooGCPtrGetRoot RT_MANGLER(RTAvlrooGCPtrGetRoot) +# define RTAvlrooGCPtrInsert RT_MANGLER(RTAvlrooGCPtrInsert) +# define RTAvlrooGCPtrRangeGet RT_MANGLER(RTAvlrooGCPtrRangeGet) +# define RTAvlrooGCPtrRangeRemove RT_MANGLER(RTAvlrooGCPtrRangeRemove) +# define RTAvlrooGCPtrRemove RT_MANGLER(RTAvlrooGCPtrRemove) +# define RTAvlrPVDestroy RT_MANGLER(RTAvlrPVDestroy) +# define RTAvlrPVDoWithAll RT_MANGLER(RTAvlrPVDoWithAll) +# define RTAvlrPVGet RT_MANGLER(RTAvlrPVGet) +# define RTAvlrPVGetBestFit RT_MANGLER(RTAvlrPVGetBestFit) +# define RTAvlrPVInsert RT_MANGLER(RTAvlrPVInsert) +# define RTAvlrPVRangeGet RT_MANGLER(RTAvlrPVRangeGet) +# define RTAvlrPVRangeRemove RT_MANGLER(RTAvlrPVRangeRemove) +# define RTAvlrPVRemove RT_MANGLER(RTAvlrPVRemove) +# define RTAvlrPVRemoveBestFit RT_MANGLER(RTAvlrPVRemoveBestFit) +# define RTAvlrU64Destroy RT_MANGLER(RTAvlrU64Destroy) +# define RTAvlrU64DoWithAll RT_MANGLER(RTAvlrU64DoWithAll) +# define RTAvlrU64Get RT_MANGLER(RTAvlrU64Get) +# define RTAvlrU64GetBestFit RT_MANGLER(RTAvlrU64GetBestFit) +# define RTAvlrU64Insert RT_MANGLER(RTAvlrU64Insert) +# define RTAvlrU64RangeGet RT_MANGLER(RTAvlrU64RangeGet) +# define RTAvlrU64RangeRemove RT_MANGLER(RTAvlrU64RangeRemove) +# define RTAvlrU64Remove RT_MANGLER(RTAvlrU64Remove) +# define RTAvlrU64RemoveBestFit RT_MANGLER(RTAvlrU64RemoveBestFit) +# define RTAvlrUIntPtrDestroy RT_MANGLER(RTAvlrUIntPtrDestroy) +# define RTAvlrUIntPtrDoWithAll RT_MANGLER(RTAvlrUIntPtrDoWithAll) +# define RTAvlrUIntPtrGet RT_MANGLER(RTAvlrUIntPtrGet) +# define RTAvlrUIntPtrGetBestFit RT_MANGLER(RTAvlrUIntPtrGetBestFit) +# define RTAvlrUIntPtrGetLeft RT_MANGLER(RTAvlrUIntPtrGetLeft) +# define RTAvlrUIntPtrGetRight RT_MANGLER(RTAvlrUIntPtrGetRight) +# define RTAvlrUIntPtrGetRoot RT_MANGLER(RTAvlrUIntPtrGetRoot) +# define RTAvlrUIntPtrInsert RT_MANGLER(RTAvlrUIntPtrInsert) +# define RTAvlrUIntPtrRangeGet RT_MANGLER(RTAvlrUIntPtrRangeGet) +# define RTAvlrUIntPtrRangeRemove RT_MANGLER(RTAvlrUIntPtrRangeRemove) +# define RTAvlrUIntPtrRemove RT_MANGLER(RTAvlrUIntPtrRemove) +# define RTAvlU32Destroy RT_MANGLER(RTAvlU32Destroy) +# define RTAvlU32DoWithAll RT_MANGLER(RTAvlU32DoWithAll) +# define RTAvlU32Get RT_MANGLER(RTAvlU32Get) +# define RTAvlU32GetBestFit RT_MANGLER(RTAvlU32GetBestFit) +# define RTAvlU32Insert RT_MANGLER(RTAvlU32Insert) +# define RTAvlU32Remove RT_MANGLER(RTAvlU32Remove) +# define RTAvlU32RemoveBestFit RT_MANGLER(RTAvlU32RemoveBestFit) +# define RTAvlUIntPtrDestroy RT_MANGLER(RTAvlUIntPtrDestroy) +# define RTAvlUIntPtrDoWithAll RT_MANGLER(RTAvlUIntPtrDoWithAll) +# define RTAvlUIntPtrGet RT_MANGLER(RTAvlUIntPtrGet) +# define RTAvlUIntPtrGetBestFit RT_MANGLER(RTAvlUIntPtrGetBestFit) +# define RTAvlUIntPtrGetLeft RT_MANGLER(RTAvlUIntPtrGetLeft) +# define RTAvlUIntPtrGetRight RT_MANGLER(RTAvlUIntPtrGetRight) +# define RTAvlUIntPtrGetRoot RT_MANGLER(RTAvlUIntPtrGetRoot) +# define RTAvlUIntPtrInsert RT_MANGLER(RTAvlUIntPtrInsert) +# define RTAvlUIntPtrRemove RT_MANGLER(RTAvlUIntPtrRemove) +# define RTAvlULDestroy RT_MANGLER(RTAvlULDestroy) +# define RTAvlULDoWithAll RT_MANGLER(RTAvlULDoWithAll) +# define RTAvlULGet RT_MANGLER(RTAvlULGet) +# define RTAvlULGetBestFit RT_MANGLER(RTAvlULGetBestFit) +# define RTAvlULInsert RT_MANGLER(RTAvlULInsert) +# define RTAvlULRemove RT_MANGLER(RTAvlULRemove) +# define RTAvlULRemoveBestFit RT_MANGLER(RTAvlULRemoveBestFit) +# define RTBase64Decode RT_MANGLER(RTBase64Decode) +# define RTBase64DecodeEx RT_MANGLER(RTBase64DecodeEx) +# define RTBase64DecodedSize RT_MANGLER(RTBase64DecodedSize) +# define RTBase64DecodedSizeEx RT_MANGLER(RTBase64DecodedSizeEx) +# define RTBase64Encode RT_MANGLER(RTBase64Encode) +# define RTBase64EncodedLength RT_MANGLER(RTBase64EncodedLength) +# define RTBldCfgCompiler RT_MANGLER(RTBldCfgCompiler) +# define RTBldCfgRevision RT_MANGLER(RTBldCfgRevision) +# define RTBldCfgRevisionStr RT_MANGLER(RTBldCfgRevisionStr) +# define RTBldCfgTarget RT_MANGLER(RTBldCfgTarget) +# define RTBldCfgTargetArch RT_MANGLER(RTBldCfgTargetArch) +# define RTBldCfgTargetDotArch RT_MANGLER(RTBldCfgTargetDotArch) +# define RTBldCfgType RT_MANGLER(RTBldCfgType) +# define RTBldCfgVersion RT_MANGLER(RTBldCfgVersion) +# define RTBldCfgVersionBuild RT_MANGLER(RTBldCfgVersionBuild) +# define RTBldCfgVersionMajor RT_MANGLER(RTBldCfgVersionMajor) +# define RTBldCfgVersionMinor RT_MANGLER(RTBldCfgVersionMinor) +# define RTCdromOpen RT_MANGLER(RTCdromOpen) +# define RTCdromRetain RT_MANGLER(RTCdromRetain) +# define RTCdromRelease RT_MANGLER(RTCdromRelease) +# define RTCdromQueryMountPoint RT_MANGLER(RTCdromQueryMountPoint) +# define RTCdromUnmount RT_MANGLER(RTCdromUnmount) +# define RTCdromEject RT_MANGLER(RTCdromEject) +# define RTCdromLock RT_MANGLER(RTCdromLock) +# define RTCdromUnlock RT_MANGLER(RTCdromUnlock) +# define RTCdromCount RT_MANGLER(RTCdromCount) +# define RTCdromOrdinalToName RT_MANGLER(RTCdromOrdinalToName) +# define RTCdromOpenByOrdinal RT_MANGLER(RTCdromOpenByOrdinal) +# define RTCidrStrToIPv4 RT_MANGLER(RTCidrStrToIPv4) +# define RTCircBufAcquireReadBlock RT_MANGLER(RTCircBufAcquireReadBlock) +# define RTCircBufAcquireWriteBlock RT_MANGLER(RTCircBufAcquireWriteBlock) +# define RTCircBufCreate RT_MANGLER(RTCircBufCreate) +# define RTCircBufDestroy RT_MANGLER(RTCircBufDestroy) +# define RTCircBufFree RT_MANGLER(RTCircBufFree) +# define RTCircBufIsReading RT_MANGLER(RTCircBufIsReading) +# define RTCircBufIsWriting RT_MANGLER(RTCircBufIsWriting) +# define RTCircBufOffsetRead RT_MANGLER(RTCircBufOffsetRead) +# define RTCircBufOffsetWrite RT_MANGLER(RTCircBufOffsetWrite) +# define RTCircBufReleaseReadBlock RT_MANGLER(RTCircBufReleaseReadBlock) +# define RTCircBufReleaseWriteBlock RT_MANGLER(RTCircBufReleaseWriteBlock) +# define RTCircBufReset RT_MANGLER(RTCircBufReset) +# define RTCircBufSize RT_MANGLER(RTCircBufSize) +# define RTCircBufUsed RT_MANGLER(RTCircBufUsed) +# define RTCoreDumperDisable RT_MANGLER(RTCoreDumperDisable) /* solaris */ +# define RTCoreDumperSetup RT_MANGLER(RTCoreDumperSetup) /* solaris */ +# define RTCoreDumperTakeDump RT_MANGLER(RTCoreDumperTakeDump) /* solaris */ +# define RTCrc16Ccitt RT_MANGLER(RTCrc16Ccitt) +# define RTCrc16CcittProcess RT_MANGLER(RTCrc16CcittProcess) +# define RTCrc16CcittFinish RT_MANGLER(RTCrc16CcittFinish) +# define RTCrc16CcittStart RT_MANGLER(RTCrc16CcittStart) +# define RTCrc32 RT_MANGLER(RTCrc32) +# define RTCrc32Finish RT_MANGLER(RTCrc32Finish) +# define RTCrc32Process RT_MANGLER(RTCrc32Process) +# define RTCrc32Start RT_MANGLER(RTCrc32Start) +# define RTCrc32C RT_MANGLER(RTCrc32C) +# define RTCrc32CFinish RT_MANGLER(RTCrc32CFinish) +# define RTCrc32CProcess RT_MANGLER(RTCrc32CProcess) +# define RTCrc32CStart RT_MANGLER(RTCrc32CStart) +# define RTCrc64 RT_MANGLER(RTCrc64) +# define RTCrc64Finish RT_MANGLER(RTCrc64Finish) +# define RTCrc64Process RT_MANGLER(RTCrc64Process) +# define RTCrc64Start RT_MANGLER(RTCrc64Start) +# define RTCrcAdler32 RT_MANGLER(RTCrcAdler32) +# define RTCrcAdler32Finish RT_MANGLER(RTCrcAdler32Finish) +# define RTCrcAdler32Process RT_MANGLER(RTCrcAdler32Process) +# define RTCrcAdler32Start RT_MANGLER(RTCrcAdler32Start) +# define RTCritSectDelete RT_MANGLER(RTCritSectDelete) +# define RTCritSectEnter RT_MANGLER(RTCritSectEnter) +# define RTCritSectEnterDebug RT_MANGLER(RTCritSectEnterDebug) +# define RTCritSectEnterMultiple RT_MANGLER(RTCritSectEnterMultiple) +# define RTCritSectEnterMultipleDebug RT_MANGLER(RTCritSectEnterMultipleDebug) +# define RTCritSectInit RT_MANGLER(RTCritSectInit) +# define RTCritSectInitEx RT_MANGLER(RTCritSectInitEx) +# define RTCritSectLeave RT_MANGLER(RTCritSectLeave) +# define RTCritSectLeaveMultiple RT_MANGLER(RTCritSectLeaveMultiple) +# define RTCritSectSetSubClass RT_MANGLER(RTCritSectSetSubClass) +# define RTCritSectTryEnter RT_MANGLER(RTCritSectTryEnter) +# define RTCritSectTryEnterDebug RT_MANGLER(RTCritSectTryEnterDebug) +# define RTCritSectRwDelete RT_MANGLER(RTCritSectRwDelete) +# define RTCritSectRwEnterExcl RT_MANGLER(RTCritSectRwEnterExcl) +# define RTCritSectRwEnterExclDebug RT_MANGLER(RTCritSectRwEnterExclDebug) +# define RTCritSectRwEnterShared RT_MANGLER(RTCritSectRwEnterShared) +# define RTCritSectRwEnterSharedDebug RT_MANGLER(RTCritSectRwEnterSharedDebug) +# define RTCritSectRwGetReadCount RT_MANGLER(RTCritSectRwGetReadCount) +# define RTCritSectRwGetWriteRecursion RT_MANGLER(RTCritSectRwGetWriteRecursion) +# define RTCritSectRwGetWriterReadRecursion RT_MANGLER(RTCritSectRwGetWriterReadRecursion) +# define RTCritSectRwInit RT_MANGLER(RTCritSectRwInit) +# define RTCritSectRwInitEx RT_MANGLER(RTCritSectRwInitEx) +# define RTCritSectRwIsReadOwner RT_MANGLER(RTCritSectRwIsReadOwner) +# define RTCritSectRwIsWriteOwner RT_MANGLER(RTCritSectRwIsWriteOwner) +# define RTCritSectRwLeaveExcl RT_MANGLER(RTCritSectRwLeaveExcl) +# define RTCritSectRwLeaveShared RT_MANGLER(RTCritSectRwLeaveShared) +# define RTCritSectRwSetSubClass RT_MANGLER(RTCritSectRwSetSubClass) +# define RTCritSectRwTryEnterExcl RT_MANGLER(RTCritSectRwTryEnterExcl) +# define RTCritSectRwTryEnterExclDebug RT_MANGLER(RTCritSectRwTryEnterExclDebug) +# define RTCritSectRwTryEnterShared RT_MANGLER(RTCritSectRwTryEnterShared) +# define RTCritSectRwTryEnterSharedDebug RT_MANGLER(RTCritSectRwTryEnterSharedDebug) +# define RTDbgAsCreate RT_MANGLER(RTDbgAsCreate) +# define RTDbgAsCreateF RT_MANGLER(RTDbgAsCreateF) +# define RTDbgAsCreateV RT_MANGLER(RTDbgAsCreateV) +# define RTDbgAsFirstAddr RT_MANGLER(RTDbgAsFirstAddr) +# define RTDbgAsLastAddr RT_MANGLER(RTDbgAsLastAddr) +# define RTDbgAsLineAdd RT_MANGLER(RTDbgAsLineAdd) +# define RTDbgAsLineByAddr RT_MANGLER(RTDbgAsLineByAddr) +# define RTDbgAsLineByAddrA RT_MANGLER(RTDbgAsLineByAddrA) +# define RTDbgAsLockExcl RT_MANGLER(RTDbgAsLockExcl) +# define RTDbgAsModuleByAddr RT_MANGLER(RTDbgAsModuleByAddr) +# define RTDbgAsModuleByIndex RT_MANGLER(RTDbgAsModuleByIndex) +# define RTDbgAsModuleByName RT_MANGLER(RTDbgAsModuleByName) +# define RTDbgAsModuleCount RT_MANGLER(RTDbgAsModuleCount) +# define RTDbgAsModuleLink RT_MANGLER(RTDbgAsModuleLink) +# define RTDbgAsModuleLinkSeg RT_MANGLER(RTDbgAsModuleLinkSeg) +# define RTDbgAsModuleQueryMapByIndex RT_MANGLER(RTDbgAsModuleQueryMapByIndex) +# define RTDbgAsModuleUnlink RT_MANGLER(RTDbgAsModuleUnlink) +# define RTDbgAsModuleUnlinkByAddr RT_MANGLER(RTDbgAsModuleUnlinkByAddr) +# define RTDbgAsName RT_MANGLER(RTDbgAsName) +# define RTDbgAsRelease RT_MANGLER(RTDbgAsRelease) +# define RTDbgAsRetain RT_MANGLER(RTDbgAsRetain) +# define RTDbgAsSymbolAdd RT_MANGLER(RTDbgAsSymbolAdd) +# define RTDbgAsSymbolByAddr RT_MANGLER(RTDbgAsSymbolByAddr) +# define RTDbgAsSymbolByAddrA RT_MANGLER(RTDbgAsSymbolByAddrA) +# define RTDbgAsSymbolByName RT_MANGLER(RTDbgAsSymbolByName) +# define RTDbgAsSymbolByNameA RT_MANGLER(RTDbgAsSymbolByNameA) +# define RTDbgAsUnlockExcl RT_MANGLER(RTDbgAsUnlockExcl) +# define RTDbgCfgCreate RT_MANGLER(RTDbgCfgCreate) +# define RTDbgCfgRetain RT_MANGLER(RTDbgCfgRetain) +# define RTDbgCfgRelease RT_MANGLER(RTDbgCfgRelease) +# define RTDbgCfgChangeString RT_MANGLER(RTDbgCfgChangeString) +# define RTDbgCfgChangeUInt RT_MANGLER(RTDbgCfgChangeUInt) +# define RTDbgCfgQueryString RT_MANGLER(RTDbgCfgQueryString) +# define RTDbgCfgQueryUInt RT_MANGLER(RTDbgCfgQueryUInt) +# define RTDbgCfgOpenDbg RT_MANGLER(RTDbgCfgOpenDbg) +# define RTDbgCfgOpenDsymBundle RT_MANGLER(RTDbgCfgOpenDsymBundle) +# define RTDbgCfgOpenMachOImage RT_MANGLER(RTDbgCfgOpenMachOImage) +# define RTDbgCfgOpenDwo RT_MANGLER(RTDbgCfgOpenDwo) +# define RTDbgCfgOpenPdb70 RT_MANGLER(RTDbgCfgOpenPdb70) +# define RTDbgCfgOpenPdb20 RT_MANGLER(RTDbgCfgOpenPdb20) +# define RTDbgCfgOpenPeImage RT_MANGLER(RTDbgCfgOpenPeImage) +# define RTDbgCfgSetLogCallback RT_MANGLER(RTDbgCfgSetLogCallback) +# define RTDbgLineAlloc RT_MANGLER(RTDbgLineAlloc) +# define RTDbgLineDup RT_MANGLER(RTDbgLineDup) +# define RTDbgLineFree RT_MANGLER(RTDbgLineFree) +# define RTDbgModCreate RT_MANGLER(RTDbgModCreate) +# define RTDbgModCreateFromDbg RT_MANGLER(RTDbgModCreateFromDbg) +# define RTDbgModCreateFromDwo RT_MANGLER(RTDbgModCreateFromDwo) +# define RTDbgModCreateFromImage RT_MANGLER(RTDbgModCreateFromImage) +# define RTDbgModCreateFromMap RT_MANGLER(RTDbgModCreateFromMap) +# define RTDbgModCreateFromPdb RT_MANGLER(RTDbgModCreateFromPdb) +# define RTDbgModCreateFromPeImage RT_MANGLER(RTDbgModCreateFromPeImage) +# define RTDbgModCreateFromMachOImage RT_MANGLER(RTDbgModCreateFromMachOImage) +# define RTDbgModGetTag RT_MANGLER(RTDbgModGetTag) +# define RTDbgModImageSize RT_MANGLER(RTDbgModImageSize) +# define RTDbgModIsDeferred RT_MANGLER(RTDbgModIsDeferred) +# define RTDbgModIsExports RT_MANGLER(RTDbgModIsExports) +# define RTDbgModLineAdd RT_MANGLER(RTDbgModLineAdd) +# define RTDbgModLineByAddr RT_MANGLER(RTDbgModLineByAddr) +# define RTDbgModLineByAddrA RT_MANGLER(RTDbgModLineByAddrA) +# define RTDbgModLineByOrdinal RT_MANGLER(RTDbgModLineByOrdinal) +# define RTDbgModLineByOrdinalA RT_MANGLER(RTDbgModLineByOrdinalA) +# define RTDbgModLineCount RT_MANGLER(RTDbgModLineCount) +# define RTDbgModName RT_MANGLER(RTDbgModName) +# define RTDbgModDebugFile RT_MANGLER(RTDbgModDebugFile) +# define RTDbgModImageFile RT_MANGLER(RTDbgModImageFile) +# define RTDbgModImageFileUsed RT_MANGLER(RTDbgModImageFileUsed) +# define RTDbgModRelease RT_MANGLER(RTDbgModRelease) +# define RTDbgModRemoveAll RT_MANGLER(RTDbgModRemoveAll) +# define RTDbgModRetain RT_MANGLER(RTDbgModRetain) +# define RTDbgModRvaToSegOff RT_MANGLER(RTDbgModRvaToSegOff) +# define RTDbgModSegmentAdd RT_MANGLER(RTDbgModSegmentAdd) +# define RTDbgModSegmentByIndex RT_MANGLER(RTDbgModSegmentByIndex) +# define RTDbgModSegmentCount RT_MANGLER(RTDbgModSegmentCount) +# define RTDbgModSegmentRva RT_MANGLER(RTDbgModSegmentRva) +# define RTDbgModSegmentSize RT_MANGLER(RTDbgModSegmentSize) +# define RTDbgModSetTag RT_MANGLER(RTDbgModSetTag) +# define RTDbgModSymbolAdd RT_MANGLER(RTDbgModSymbolAdd) +# define RTDbgModSymbolByAddr RT_MANGLER(RTDbgModSymbolByAddr) +# define RTDbgModSymbolByAddrA RT_MANGLER(RTDbgModSymbolByAddrA) +# define RTDbgModSymbolByName RT_MANGLER(RTDbgModSymbolByName) +# define RTDbgModSymbolByNameA RT_MANGLER(RTDbgModSymbolByNameA) +# define RTDbgModSymbolByOrdinal RT_MANGLER(RTDbgModSymbolByOrdinal) +# define RTDbgModSymbolByOrdinalA RT_MANGLER(RTDbgModSymbolByOrdinalA) +# define RTDbgModSymbolCount RT_MANGLER(RTDbgModSymbolCount) +# define RTDbgSymbolAlloc RT_MANGLER(RTDbgSymbolAlloc) +# define RTDbgSymbolDup RT_MANGLER(RTDbgSymbolDup) +# define RTDbgSymbolFree RT_MANGLER(RTDbgSymbolFree) +# define RTDirClose RT_MANGLER(RTDirClose) +# define RTDirCreate RT_MANGLER(RTDirCreate) +# define RTDirCreateFullPath RT_MANGLER(RTDirCreateFullPath) +# define RTDirCreateTemp RT_MANGLER(RTDirCreateTemp) +# define RTDirCreateTempSecure RT_MANGLER(RTDirCreateTempSecure) +# define RTDirCreateUniqueNumbered RT_MANGLER(RTDirCreateUniqueNumbered) +# define RTDirEntryIsStdDotLink RT_MANGLER(RTDirEntryIsStdDotLink) +# define RTDirEntryExIsStdDotLink RT_MANGLER(RTDirEntryExIsStdDotLink) +# define RTDirExists RT_MANGLER(RTDirExists) +# define RTDirFlush RT_MANGLER(RTDirFlush) +# define RTDirFlushParent RT_MANGLER(RTDirFlushParent) +# define RTDirIsValid RT_MANGLER(RTDirIsValid) +# define RTDirOpen RT_MANGLER(RTDirOpen) +# define RTDirOpenFiltered RT_MANGLER(RTDirOpenFiltered) +# define RTDirQueryInfo RT_MANGLER(RTDirQueryInfo) +# define RTDirQueryUnknownType RT_MANGLER(RTDirQueryUnknownType) +# define RTDirQueryUnknownTypeEx RT_MANGLER(RTDirQueryUnknownTypeEx) +# define RTDirRead RT_MANGLER(RTDirRead) +# define RTDirReadEx RT_MANGLER(RTDirReadEx) +# define RTDirReadExA RT_MANGLER(RTDirReadExA) +# define RTDirReadExAFree RT_MANGLER(RTDirReadExAFree) +# define RTDirRemove RT_MANGLER(RTDirRemove) +# define RTDirRemoveRecursive RT_MANGLER(RTDirRemoveRecursive) +# define RTDirRename RT_MANGLER(RTDirRename) +# define RTDirSetTimes RT_MANGLER(RTDirSetTimes) +# define RTDirRelFileOpen RT_MANGLER(RTDirRelFileOpen) +# define RTDirRelDirOpen RT_MANGLER(RTDirRelDirOpen) +# define RTDirRelDirOpenFiltered RT_MANGLER(RTDirRelDirOpenFiltered) +# define RTDirRelDirCreate RT_MANGLER(RTDirRelDirCreate) +# define RTDirRelDirRemove RT_MANGLER(RTDirRelDirRemove) +# define RTDirRelPathQueryInfo RT_MANGLER(RTDirRelPathQueryInfo) +# define RTDirRelPathSetMode RT_MANGLER(RTDirRelPathSetMode) +# define RTDirRelPathSetTimes RT_MANGLER(RTDirRelPathSetTimes) +# define RTDirRelPathSetOwner RT_MANGLER(RTDirRelPathSetOwner) +# define RTDirRelPathRename RT_MANGLER(RTDirRelPathRename) +# define RTDirRelPathUnlink RT_MANGLER(RTDirRelPathUnlink) +# define RTDirRelSymlinkCreate RT_MANGLER(RTDirRelSymlinkCreate) +# define RTDirRelSymlinkRead RT_MANGLER(RTDirRelSymlinkRead) +# define RTVfsDirOpenDir RT_MANGLER(RTVfsDirOpenDir) +# define RTVfsDirFromRTDir RT_MANGLER(RTVfsDirFromRTDir) +# define RTVfsDirOpenNormal RT_MANGLER(RTVfsDirOpenNormal) +# define RTDvmCreate RT_MANGLER(RTDvmCreate) +# define RTDvmCreateFromVfsFile RT_MANGLER(RTDvmCreateFromVfsFile) +# define RTDvmRetain RT_MANGLER(RTDvmRetain) +# define RTDvmRelease RT_MANGLER(RTDvmRelease) +# define RTDvmMapOpen RT_MANGLER(RTDvmMapOpen) +# define RTDvmMapInitialize RT_MANGLER(RTDvmMapInitialize) +# define RTDvmMapGetFormatName RT_MANGLER(RTDvmMapGetFormatName) +# define RTDvmMapGetFormatType RT_MANGLER(RTDvmMapGetFormatType) +# define RTDvmMapGetValidVolumes RT_MANGLER(RTDvmMapGetValidVolumes) +# define RTDvmMapGetMaxVolumes RT_MANGLER(RTDvmMapGetMaxVolumes) +# define RTDvmMapQueryBlockStatus RT_MANGLER(RTDvmMapQueryBlockStatus) +# define RTDvmMapQueryFirstVolume RT_MANGLER(RTDvmMapQueryFirstVolume) +# define RTDvmMapQueryNextVolume RT_MANGLER(RTDvmMapQueryNextVolume) +# define RTDvmVolumeRetain RT_MANGLER(RTDvmVolumeRetain) +# define RTDvmVolumeRelease RT_MANGLER(RTDvmVolumeRelease) +# define RTDvmVolumeGetSize RT_MANGLER(RTDvmVolumeGetSize) +# define RTDvmVolumeQueryName RT_MANGLER(RTDvmVolumeQueryName) +# define RTDvmVolumeGetType RT_MANGLER(RTDvmVolumeGetType) +# define RTDvmVolumeGetFlags RT_MANGLER(RTDvmVolumeGetFlags) +# define RTDvmVolumeRead RT_MANGLER(RTDvmVolumeRead) +# define RTDvmVolumeWrite RT_MANGLER(RTDvmVolumeWrite) +# define RTDvmVolumeSetQueryBlockStatusCallback RT_MANGLER(RTDvmVolumeSetQueryBlockStatusCallback) +# define RTDvmVolumeTypeGetDescr RT_MANGLER(RTDvmVolumeTypeGetDescr) +# define RTDvmVolumeCreateVfsFile RT_MANGLER(RTDvmVolumeCreateVfsFile) +# define RTEnvApplyChanges RT_MANGLER(RTEnvApplyChanges) +# define RTEnvClone RT_MANGLER(RTEnvClone) +# define RTEnvCloneUtf16Block RT_MANGLER(RTEnvCloneUtf16Block) +# define RTEnvCountEx RT_MANGLER(RTEnvCountEx) +# define RTEnvCreate RT_MANGLER(RTEnvCreate) +# define RTEnvCreateChangeRecord RT_MANGLER(RTEnvCreateChangeRecord) +# define RTEnvDestroy RT_MANGLER(RTEnvDestroy) +# define RTEnvDupEx RT_MANGLER(RTEnvDupEx) +# define RTEnvExist RT_MANGLER(RTEnvExist) +# define RTEnvExistsBad RT_MANGLER(RTEnvExistsBad) +# define RTEnvExistsUtf8 RT_MANGLER(RTEnvExistsUtf8) +# define RTEnvExistEx RT_MANGLER(RTEnvExistEx) +# define RTEnvFreeUtf8Block RT_MANGLER(RTEnvFreeUtf8Block) +# define RTEnvFreeUtf16Block RT_MANGLER(RTEnvFreeUtf16Block) +# define RTEnvGet RT_MANGLER(RTEnvGet) +# define RTEnvGetBad RT_MANGLER(RTEnvGetBad) +# define RTEnvGetByIndexEx RT_MANGLER(RTEnvGetByIndexEx) +# define RTEnvGetByIndexRawEx RT_MANGLER(RTEnvGetByIndexRawEx) +# define RTEnvGetUtf8 RT_MANGLER(RTEnvGetUtf8) +# define RTEnvGetEx RT_MANGLER(RTEnvGetEx) +# define RTEnvGetExecEnvP RT_MANGLER(RTEnvGetExecEnvP) +# define RTEnvIsChangeRecord RT_MANGLER(RTEnvIsChangeRecord) +# define RTEnvPut RT_MANGLER(RTEnvPut) +# define RTEnvPutBad RT_MANGLER(RTEnvPutBad) +# define RTEnvPutUtf8 RT_MANGLER(RTEnvPutUtf8) +# define RTEnvPutEx RT_MANGLER(RTEnvPutEx) +# define RTEnvQueryUtf16Block RT_MANGLER(RTEnvQueryUtf16Block) +# define RTEnvQueryUtf8Block RT_MANGLER(RTEnvQueryUtf8Block) +# define RTEnvReset RT_MANGLER(RTEnvReset) +# define RTEnvSet RT_MANGLER(RTEnvSet) +# define RTEnvSetBad RT_MANGLER(RTEnvSetBad) +# define RTEnvSetUtf8 RT_MANGLER(RTEnvSetUtf8) +# define RTEnvSetEx RT_MANGLER(RTEnvSetEx) +# define RTEnvUnset RT_MANGLER(RTEnvUnset) +# define RTEnvUnsetBad RT_MANGLER(RTEnvUnsetBad) +# define RTEnvUnsetUtf8 RT_MANGLER(RTEnvUnsetUtf8) +# define RTEnvUnsetEx RT_MANGLER(RTEnvUnsetEx) +# define RTErrCOMGet RT_MANGLER(RTErrCOMGet) +# define RTErrConvertFromErrno RT_MANGLER(RTErrConvertFromErrno) +# define RTErrConvertToErrno RT_MANGLER(RTErrConvertToErrno) +# define RTErrGet RT_MANGLER(RTErrGet) +# define RTErrInfoAlloc RT_MANGLER(RTErrInfoAlloc) +# define RTErrInfoAllocEx RT_MANGLER(RTErrInfoAllocEx) +# define RTErrInfoFree RT_MANGLER(RTErrInfoFree) +# define RTErrInfoSet RT_MANGLER(RTErrInfoSet) +# define RTErrInfoSetF RT_MANGLER(RTErrInfoSetF) +# define RTErrInfoSetV RT_MANGLER(RTErrInfoSetV) +# define RTErrInfoLogAndSet RT_MANGLER(RTErrInfoLogAndSet) +# define RTErrInfoLogAndSetF RT_MANGLER(RTErrInfoLogAndSetF) +# define RTErrInfoLogAndSetV RT_MANGLER(RTErrInfoLogAndSetV) +# define RTErrInfoLogAndAdd RT_MANGLER(RTErrInfoLogAndAdd) +# define RTErrInfoLogAndAddF RT_MANGLER(RTErrInfoLogAndAddF) +# define RTErrInfoLogAndAddV RT_MANGLER(RTErrInfoLogAndAddV) +# define RTErrVarsAreEqual RT_MANGLER(RTErrVarsAreEqual) +# define RTErrVarsHaveChanged RT_MANGLER(RTErrVarsHaveChanged) +# define RTErrVarsRestore RT_MANGLER(RTErrVarsRestore) +# define RTErrVarsSave RT_MANGLER(RTErrVarsSave) +# define RTFileAioCtxAssociateWithFile RT_MANGLER(RTFileAioCtxAssociateWithFile) +# define RTFileAioCtxCreate RT_MANGLER(RTFileAioCtxCreate) +# define RTFileAioCtxDestroy RT_MANGLER(RTFileAioCtxDestroy) +# define RTFileAioCtxGetMaxReqCount RT_MANGLER(RTFileAioCtxGetMaxReqCount) +# define RTFileAioCtxSubmit RT_MANGLER(RTFileAioCtxSubmit) +# define RTFileAioCtxWait RT_MANGLER(RTFileAioCtxWait) +# define RTFileAioCtxWakeup RT_MANGLER(RTFileAioCtxWakeup) +# define RTFileAioGetLimits RT_MANGLER(RTFileAioGetLimits) +# define RTFileAioReqCancel RT_MANGLER(RTFileAioReqCancel) +# define RTFileAioReqCreate RT_MANGLER(RTFileAioReqCreate) +# define RTFileAioReqDestroy RT_MANGLER(RTFileAioReqDestroy) +# define RTFileAioReqGetRC RT_MANGLER(RTFileAioReqGetRC) +# define RTFileAioReqGetUser RT_MANGLER(RTFileAioReqGetUser) +# define RTFileAioReqPrepareFlush RT_MANGLER(RTFileAioReqPrepareFlush) +# define RTFileAioReqPrepareRead RT_MANGLER(RTFileAioReqPrepareRead) +# define RTFileAioReqPrepareWrite RT_MANGLER(RTFileAioReqPrepareWrite) +# define RTFileChangeLock RT_MANGLER(RTFileChangeLock) +# define RTFileClose RT_MANGLER(RTFileClose) +# define RTFileCompare RT_MANGLER(RTFileCompare) +# define RTFileCompareByHandles RT_MANGLER(RTFileCompareByHandles) +# define RTFileCompareByHandlesEx RT_MANGLER(RTFileCompareByHandlesEx) +# define RTFileCompareEx RT_MANGLER(RTFileCompareEx) +# define RTFileCopy RT_MANGLER(RTFileCopy) +# define RTFileCopyByHandles RT_MANGLER(RTFileCopyByHandles) +# define RTFileCopyByHandlesEx RT_MANGLER(RTFileCopyByHandlesEx) +# define RTFileCopyEx RT_MANGLER(RTFileCopyEx) +# define RTFileCreateTemp RT_MANGLER(RTFileCreateTemp) +# define RTFileCreateTempSecure RT_MANGLER(RTFileCreateTempSecure) +# define RTFileDelete RT_MANGLER(RTFileDelete) +# define RTFileExists RT_MANGLER(RTFileExists) +# define RTFileFlush RT_MANGLER(RTFileFlush) +# define RTFileFromNative RT_MANGLER(RTFileFromNative) +# define RTFileGetMaxSize RT_MANGLER(RTFileGetMaxSize) +# define RTFileGetMaxSizeEx RT_MANGLER(RTFileGetMaxSizeEx) +# define RTFileGetSize RT_MANGLER(RTFileGetSize) +# define RTFileIoCtl RT_MANGLER(RTFileIoCtl) +# define RTFileIsValid RT_MANGLER(RTFileIsValid) +# define RTFileLock RT_MANGLER(RTFileLock) +# define RTFileModeToFlags RT_MANGLER(RTFileModeToFlags) +# define RTFileModeToFlagsEx RT_MANGLER(RTFileModeToFlagsEx) +# define RTFileMove RT_MANGLER(RTFileMove) +# define RTFileOpen RT_MANGLER(RTFileOpen) +# define RTFileOpenBitBucket RT_MANGLER(RTFileOpenBitBucket) +# define RTFileOpenF RT_MANGLER(RTFileOpenF) +# define RTFileOpenV RT_MANGLER(RTFileOpenV) +# define RTFileOpenTemp RT_MANGLER(RTFileOpenTemp) +# define RTFileQueryFsSizes RT_MANGLER(RTFileQueryFsSizes) +# define RTFileQueryInfo RT_MANGLER(RTFileQueryInfo) +# define RTFileQuerySize RT_MANGLER(RTFileQuerySize) +# define RTFileRead RT_MANGLER(RTFileRead) +# define RTFileReadAll RT_MANGLER(RTFileReadAll) +# define RTFileReadAllByHandle RT_MANGLER(RTFileReadAllByHandle) +# define RTFileReadAllByHandleEx RT_MANGLER(RTFileReadAllByHandleEx) +# define RTFileReadAllEx RT_MANGLER(RTFileReadAllEx) +# define RTFileReadAllFree RT_MANGLER(RTFileReadAllFree) +# define RTFileReadAt RT_MANGLER(RTFileReadAt) +# define RTFileRename RT_MANGLER(RTFileRename) +# define RTFileSeek RT_MANGLER(RTFileSeek) +# define RTFileSetAllocationSize RT_MANGLER(RTFileSetAllocationSize) +# define RTFileSetForceFlags RT_MANGLER(RTFileSetForceFlags) +# define RTFileSetMode RT_MANGLER(RTFileSetMode) +# define RTFileSetOwner RT_MANGLER(RTFileSetOwner) +# define RTFileSetSize RT_MANGLER(RTFileSetSize) +# define RTFileSetTimes RT_MANGLER(RTFileSetTimes) +# define RTFileSgReadAt RT_MANGLER(RTFileSgReadAt) +# define RTFileSgWriteAt RT_MANGLER(RTFileSgWriteAt) +# define RTFileTell RT_MANGLER(RTFileTell) +# define RTFileToNative RT_MANGLER(RTFileToNative) +# define RTFileUnlock RT_MANGLER(RTFileUnlock) +# define RTFileWrite RT_MANGLER(RTFileWrite) +# define RTFileWriteAt RT_MANGLER(RTFileWriteAt) +# define RTFilesystemVfsFromFile RT_MANGLER(RTFilesystemVfsFromFile) +# define RTFsIsCaseSensitive RT_MANGLER(RTFsIsCaseSensitive) +# define RTFsQueryProperties RT_MANGLER(RTFsQueryProperties) +# define RTFsQuerySerial RT_MANGLER(RTFsQuerySerial) +# define RTFsQuerySizes RT_MANGLER(RTFsQuerySizes) +# define RTFsQueryType RT_MANGLER(RTFsQueryType) +# define RTFsTypeName RT_MANGLER(RTFsTypeName) +# define RTFsFatVolOpen RT_MANGLER(RTFsFatVolOpen) +# define RTFsFatVolFormat RT_MANGLER(RTFsFatVolFormat) +# define RTFsFatVolFormat144 RT_MANGLER(RTFsFatVolFormat144) +# define RTFsIso9660VolOpen RT_MANGLER(RTFsIso9660VolOpen) +# define RTFsIsoMakerCreate RT_MANGLER(RTFsIsoMakerCreate) +# define RTFsIsoMakerRetain RT_MANGLER(RTFsIsoMakerRetain) +# define RTFsIsoMakerRelease RT_MANGLER(RTFsIsoMakerRelease) +# define RTFsIsoMakerBootCatSetFile RT_MANGLER(RTFsIsoMakerBootCatSetFile) +# define RTFsIsoMakerBootCatSetValidationEntry RT_MANGLER(RTFsIsoMakerBootCatSetValidationEntry) +# define RTFsIsoMakerBootCatSetSectionEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionEntry) +# define RTFsIsoMakerBootCatSetSectionHeaderEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionHeaderEntry) +# define RTFsIsoMakerQueryObjIdxForBootCatalog RT_MANGLER(RTFsIsoMakerQueryObjIdxForBootCatalog) +# define RTFsIsoMakerGetIso9660Level RT_MANGLER(RTFsIsoMakerGetIso9660Level) +# define RTFsIsoMakerSetImagePadding RT_MANGLER(RTFsIsoMakerSetImagePadding) +# define RTFsIsoMakerSetIso9660Level RT_MANGLER(RTFsIsoMakerSetIso9660Level) +# define RTFsIsoMakerSetJolietUcs2Level RT_MANGLER(RTFsIsoMakerSetJolietUcs2Level) +# define RTFsIsoMakerSetRockRidgeLevel RT_MANGLER(RTFsIsoMakerSetRockRidgeLevel) +# define RTFsIsoMakerSetJolietRockRidgeLevel RT_MANGLER(RTFsIsoMakerSetJolietRockRidgeLevel) +# define RTFsIsoMakerSetAttribInheritStyle RT_MANGLER(RTFsIsoMakerSetAttribInheritStyle) +# define RTFsIsoMakerSetDefaultDirMode RT_MANGLER(RTFsIsoMakerSetDefaultDirMode) +# define RTFsIsoMakerSetDefaultFileMode RT_MANGLER(RTFsIsoMakerSetDefaultFileMode) +# define RTFsIsoMakerSetForcedDirMode RT_MANGLER(RTFsIsoMakerSetForcedDirMode) +# define RTFsIsoMakerSetForcedFileMode RT_MANGLER(RTFsIsoMakerSetForcedFileMode) +# define RTFsIsoMakerSetPathGroupId RT_MANGLER(RTFsIsoMakerSetPathGroupId) +# define RTFsIsoMakerSetPathMode RT_MANGLER(RTFsIsoMakerSetPathMode) +# define RTFsIsoMakerSetPathOwnerId RT_MANGLER(RTFsIsoMakerSetPathOwnerId) +# define RTFsIsoMakerSetSysAreaContent RT_MANGLER(RTFsIsoMakerSetSysAreaContent) +# define RTFsIsoMakerSetStringProp RT_MANGLER(RTFsIsoMakerSetStringProp) +# define RTFsIsoMakerGetObjIdxForPath RT_MANGLER(RTFsIsoMakerGetObjIdxForPath) +# define RTFsIsoMakerObjEnableBootInfoTablePatching RT_MANGLER(RTFsIsoMakerObjEnableBootInfoTablePatching) +# define RTFsIsoMakerObjQueryDataSize RT_MANGLER(RTFsIsoMakerObjQueryDataSize) +# define RTFsIsoMakerObjRemove RT_MANGLER(RTFsIsoMakerObjRemove) +# define RTFsIsoMakerObjSetPath RT_MANGLER(RTFsIsoMakerObjSetPath) +# define RTFsIsoMakerObjSetNameAndParent RT_MANGLER(RTFsIsoMakerObjSetNameAndParent) +# define RTFsIsoMakerObjSetRockName RT_MANGLER(RTFsIsoMakerObjSetRockName) +# define RTFsIsoMakerAddUnnamedDir RT_MANGLER(RTFsIsoMakerAddUnnamedDir) +# define RTFsIsoMakerAddDir RT_MANGLER(RTFsIsoMakerAddDir) +# define RTFsIsoMakerAddFileWithSrcPath RT_MANGLER(RTFsIsoMakerAddFileWithSrcPath) +# define RTFsIsoMakerAddFileWithVfsFile RT_MANGLER(RTFsIsoMakerAddFileWithVfsFile) +# define RTFsIsoMakerAddUnnamedFileWithSrcPath RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithSrcPath) +# define RTFsIsoMakerAddUnnamedFileWithVfsFile RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithVfsFile) +# define RTFsIsoMakerAddUnnamedFileWithCommonSrc RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithCommonSrc) +# define RTFsIsoMakerAddSymlink RT_MANGLER(RTFsIsoMakerAddSymlink) +# define RTFsIsoMakerAddUnnamedSymlink RT_MANGLER(RTFsIsoMakerAddUnnamedSymlink) +# define RTFsIsoMakerAddCommonSourceFile RT_MANGLER(RTFsIsoMakerAddCommonSourceFile) +# define RTFsIsoMakerImport RT_MANGLER(RTFsIsoMakerImport) +# define RTFsIsoMakerFinalize RT_MANGLER(RTFsIsoMakerFinalize) +# define RTFsIsoMakerCreateVfsOutputFile RT_MANGLER(RTFsIsoMakerCreateVfsOutputFile) +# define RTFsIsoMakerCmd RT_MANGLER(RTFsIsoMakerCmd) +# define RTFsIsoMakerCmdEx RT_MANGLER(RTFsIsoMakerCmdEx) +# define RTGetOpt RT_MANGLER(RTGetOpt) +# define RTGetOptArgvFree RT_MANGLER(RTGetOptArgvFree) +# define RTGetOptArgvFreeEx RT_MANGLER(RTGetOptArgvFreeEx) +# define RTGetOptArgvFromString RT_MANGLER(RTGetOptArgvFromString) +# define RTGetOptArgvToString RT_MANGLER(RTGetOptArgvToString) +# define RTGetOptArgvToUtf16String RT_MANGLER(RTGetOptArgvToUtf16String) +# define RTGetOptFetchValue RT_MANGLER(RTGetOptFetchValue) +# define RTGetOptInit RT_MANGLER(RTGetOptInit) +# define RTGetOptNonOptionArrayPtr RT_MANGLER(RTGetOptNonOptionArrayPtr) +# define RTGetOptFormatError RT_MANGLER(RTGetOptFormatError) +# define RTGetOptPrintError RT_MANGLER(RTGetOptPrintError) +# define RTHandleClose RT_MANGLER(RTHandleClose) +# define RTHandleGetStandard RT_MANGLER(RTHandleGetStandard) +# define RTHandleTableAlloc RT_MANGLER(RTHandleTableAlloc) +# define RTHandleTableAllocWithCtx RT_MANGLER(RTHandleTableAllocWithCtx) +# define RTHandleTableCreate RT_MANGLER(RTHandleTableCreate) +# define RTHandleTableCreateEx RT_MANGLER(RTHandleTableCreateEx) +# define RTHandleTableDestroy RT_MANGLER(RTHandleTableDestroy) +# define RTHandleTableFree RT_MANGLER(RTHandleTableFree) +# define RTHandleTableFreeWithCtx RT_MANGLER(RTHandleTableFreeWithCtx) +# define RTHandleTableLookup RT_MANGLER(RTHandleTableLookup) +# define RTHandleTableLookupWithCtx RT_MANGLER(RTHandleTableLookupWithCtx) +# define RTHeapOffsetAlloc RT_MANGLER(RTHeapOffsetAlloc) +# define RTHeapOffsetAllocZ RT_MANGLER(RTHeapOffsetAllocZ) +# define RTHeapOffsetDump RT_MANGLER(RTHeapOffsetDump) +# define RTHeapOffsetFree RT_MANGLER(RTHeapOffsetFree) +# define RTHeapOffsetGetFreeSize RT_MANGLER(RTHeapOffsetGetFreeSize) +# define RTHeapOffsetGetHeapSize RT_MANGLER(RTHeapOffsetGetHeapSize) +# define RTHeapOffsetInit RT_MANGLER(RTHeapOffsetInit) +# define RTHeapOffsetSize RT_MANGLER(RTHeapOffsetSize) +# define RTHeapSimpleAlloc RT_MANGLER(RTHeapSimpleAlloc) +# define RTHeapSimpleAllocZ RT_MANGLER(RTHeapSimpleAllocZ) +# define RTHeapSimpleDump RT_MANGLER(RTHeapSimpleDump) +# define RTHeapSimpleFree RT_MANGLER(RTHeapSimpleFree) +# define RTHeapSimpleGetFreeSize RT_MANGLER(RTHeapSimpleGetFreeSize) +# define RTHeapSimpleGetHeapSize RT_MANGLER(RTHeapSimpleGetHeapSize) +# define RTHeapSimpleInit RT_MANGLER(RTHeapSimpleInit) +# define RTHeapSimpleRelocate RT_MANGLER(RTHeapSimpleRelocate) +# define RTHeapSimpleSize RT_MANGLER(RTHeapSimpleSize) +# define RTHttpGetFile RT_MANGLER(RTHttpGetFile) +# define RTHttpUseSystemProxySettings RT_MANGLER(RTHttpUseSystemProxySettings) +# define RTIniFileCreateFromVfsFile RT_MANGLER(RTIniFileCreateFromVfsFile) +# define RTIniFileRetain RT_MANGLER(RTIniFileRetain) +# define RTIniFileRelease RT_MANGLER(RTIniFileRelease) +# define RTIniFileQueryPair RT_MANGLER(RTIniFileQueryPair) +# define RTIniFileQueryValue RT_MANGLER(RTIniFileQueryValue) +# define RTIsoFsClose RT_MANGLER(RTIsoFsClose) +# define RTIsoFsExtractFile RT_MANGLER(RTIsoFsExtractFile) +# define RTIsoFsGetFileInfo RT_MANGLER(RTIsoFsGetFileInfo) +# define RTIsoFsOpen RT_MANGLER(RTIsoFsOpen) +# define RTJsonIteratorBegin RT_MANGLER(RTJsonIteratorBegin) +# define RTJsonIteratorFree RT_MANGLER(RTJsonIteratorFree) +# define RTJsonIteratorNext RT_MANGLER(RTJsonIteratorNext) +# define RTJsonIteratorQueryValue RT_MANGLER(RTJsonIteratorQueryValue) +# define RTJsonParseFromBuf RT_MANGLER(RTJsonParseFromBuf) +# define RTJsonParseFromFile RT_MANGLER(RTJsonParseFromFile) +# define RTJsonParseFromString RT_MANGLER(RTJsonParseFromString) +# define RTJsonValueGetArraySize RT_MANGLER(RTJsonValueGetArraySize) +# define RTJsonValueGetString RT_MANGLER(RTJsonValueGetString) +# define RTJsonValueGetType RT_MANGLER(RTJsonValueGetType) +# define RTJsonValueQueryArraySizeEx RT_MANGLER(RTJsonValueQueryArraySize) +# define RTJsonValueQueryBooleanByName RT_MANGLER(RTJsonValueQueryBooleanByName) +# define RTJsonValueQueryByIndex RT_MANGLER(RTJsonValueQueryByIndex) +# define RTJsonValueQueryByName RT_MANGLER(RTJsonValueQueryByName) +# define RTJsonValueQueryInteger RT_MANGLER(RTJsonValueQueryInteger) +# define RTJsonValueQueryIntegerByName RT_MANGLER(RTJsonValueQueryIntegerByName) +# define RTJsonValueQueryString RT_MANGLER(RTJsonValueQueryString) +# define RTJsonValueQueryStringByName RT_MANGLER(RTJsonValueQueryStringByName) +# define RTJsonValueRelease RT_MANGLER(RTJsonValueRelease) +# define RTJsonValueRetain RT_MANGLER(RTJsonValueRetain) +# define RTKrnlModInfoGetFilePath RT_MANGLER(RTKrnlModInfoGetFilePath) +# define RTKrnlModInfoGetLoadAddr RT_MANGLER(RTKrnlModInfoGetLoadAddr) +# define RTKrnlModInfoGetName RT_MANGLER(RTKrnlModInfoGetName) +# define RTKrnlModInfoGetRefCnt RT_MANGLER(RTKrnlModInfoGetRefCnt) +# define RTKrnlModInfoGetSize RT_MANGLER(RTKrnlModInfoGetSize) +# define RTKrnlModInfoQueryRefModInfo RT_MANGLER(RTKrnlModInfoQueryRefModInfo) +# define RTKrnlModInfoRetain RT_MANGLER(RTKrnlModInfoRetain) +# define RTKrnlModInfoRelease RT_MANGLER(RTKrnlModInfoRelease) +# define RTKrnlModLoadedGetCount RT_MANGLER(RTKrnlModLoadedGetCount) +# define RTKrnlModLoadedQueryInfo RT_MANGLER(RTKrnlModLoadedQueryInfo) +# define RTKrnlModLoadedQueryInfoAll RT_MANGLER(RTKrnlModLoadedQueryInfoAll) +# define RTKrnlModQueryLoaded RT_MANGLER(RTKrnlModQueryLoaded) +# define RTLatin1CalcUtf16Len RT_MANGLER(RTLatin1CalcUtf16Len) +# define RTLatin1CalcUtf16LenEx RT_MANGLER(RTLatin1CalcUtf16LenEx) +# define RTLatin1CalcUtf8Len RT_MANGLER(RTLatin1CalcUtf8Len) +# define RTLatin1CalcUtf8LenEx RT_MANGLER(RTLatin1CalcUtf8LenEx) +# define RTLatin1ToUtf16ExTag RT_MANGLER(RTLatin1ToUtf16ExTag) +# define RTLatin1ToUtf16Tag RT_MANGLER(RTLatin1ToUtf16Tag) +# define RTLatin1ToUtf8ExTag RT_MANGLER(RTLatin1ToUtf8ExTag) +# define RTLatin1ToUtf8Tag RT_MANGLER(RTLatin1ToUtf8Tag) +# define RTLdrClose RT_MANGLER(RTLdrClose) +# define RTLdrEnumDbgInfo RT_MANGLER(RTLdrEnumDbgInfo) +# define RTLdrEnumSegments RT_MANGLER(RTLdrEnumSegments) +# define RTLdrEnumSymbols RT_MANGLER(RTLdrEnumSymbols) +# define RTLdrGetArch RT_MANGLER(RTLdrGetArch) +# define RTLdrGetBits RT_MANGLER(RTLdrGetBits) +# define RTLdrGetEndian RT_MANGLER(RTLdrGetEndian) +# define RTLdrGetFormat RT_MANGLER(RTLdrGetFormat) +# define RTLdrGetFunction RT_MANGLER(RTLdrGetFunction) +# define RTLdrGetNativeHandle RT_MANGLER(RTLdrGetNativeHandle) +# define RTLdrGetSuff RT_MANGLER(RTLdrGetSuff) +# define RTLdrGetSymbol RT_MANGLER(RTLdrGetSymbol) +# define RTLdrGetSymbolEx RT_MANGLER(RTLdrGetSymbolEx) +# define RTLdrGetSystemSymbol RT_MANGLER(RTLdrGetSystemSymbol) +# define RTLdrGetType RT_MANGLER(RTLdrGetType) +# define RTLdrIsLoadable RT_MANGLER(RTLdrIsLoadable) +# define RTLdrLinkAddressToRva RT_MANGLER(RTLdrLinkAddressToRva) +# define RTLdrLinkAddressToSegOffset RT_MANGLER(RTLdrLinkAddressToSegOffset) +# define RTLdrLoad RT_MANGLER(RTLdrLoad) +# define RTLdrLoadAppPriv RT_MANGLER(RTLdrLoadAppPriv) +# define RTLdrLoadEx RT_MANGLER(RTLdrLoadEx) +# define RTLdrLoadSystem RT_MANGLER(RTLdrLoadSystem) +# define RTLdrOpen RT_MANGLER(RTLdrOpen) +# define RTLdrOpenEx RT_MANGLER(RTLdrOpenEx) +# define RTLdrOpenInMemory RT_MANGLER(RTLdrOpenInMemory) +# define RTLdrOpenkLdr RT_MANGLER(RTLdrOpenkLdr) +# define RTLdrRelocate RT_MANGLER(RTLdrRelocate) +# define RTLdrRvaToSegOffset RT_MANGLER(RTLdrRvaToSegOffset) +# define RTLdrQueryForwarderInfo RT_MANGLER(RTLdrQueryForwarderInfo) +# define RTLdrQueryProp RT_MANGLER(RTLdrQueryProp) +# define RTLdrSegOffsetToRva RT_MANGLER(RTLdrSegOffsetToRva) +# define RTLdrSize RT_MANGLER(RTLdrSize) +# define RTLinuxCheckDevicePath RT_MANGLER(RTLinuxCheckDevicePath) +# define RTLinuxCheckDevicePathV RT_MANGLER(RTLinuxCheckDevicePathV) +# define RTLinuxSysFsClose RT_MANGLER(RTLinuxSysFsClose) +# define RTLinuxSysFsExists RT_MANGLER(RTLinuxSysFsExists) +# define RTLinuxSysFsExistsEx RT_MANGLER(RTLinuxSysFsExistsEx) +# define RTLinuxSysFsExistsExV RT_MANGLER(RTLinuxSysFsExistsExV) +# define RTLinuxSysFsExistsV RT_MANGLER(RTLinuxSysFsExistsV) +# define RTLinuxSysFsGetLinkDest RT_MANGLER(RTLinuxSysFsGetLinkDest) +# define RTLinuxSysFsGetLinkDestV RT_MANGLER(RTLinuxSysFsGetLinkDestV) +# define RTLinuxSysFsOpen RT_MANGLER(RTLinuxSysFsOpen) +# define RTLinuxSysFsOpenEx RT_MANGLER(RTLinuxSysFsOpenEx) +# define RTLinuxSysFsOpenExV RT_MANGLER(RTLinuxSysFsOpenExV) +# define RTLinuxSysFsOpenV RT_MANGLER(RTLinuxSysFsOpenV) +# define RTLinuxSysFsReadDevNumFile RT_MANGLER(RTLinuxSysFsReadDevNumFile) +# define RTLinuxSysFsReadDevNumFileV RT_MANGLER(RTLinuxSysFsReadDevNumFileV) +# define RTLinuxSysFsReadFile RT_MANGLER(RTLinuxSysFsReadFile) +# define RTLinuxSysFsReadIntFile RT_MANGLER(RTLinuxSysFsReadIntFile) +# define RTLinuxSysFsReadIntFileV RT_MANGLER(RTLinuxSysFsReadIntFileV) +# define RTLinuxSysFsReadStr RT_MANGLER(RTLinuxSysFsReadStr) +# define RTLinuxSysFsReadStrFile RT_MANGLER(RTLinuxSysFsReadStrFile) +# define RTLinuxSysFsReadStrFileV RT_MANGLER(RTLinuxSysFsReadStrFileV) +# define RTLinuxSysFsWriteFile RT_MANGLER(RTLinuxSysFsWriteFile) +# define RTLinuxSysFsWriteStr RT_MANGLER(RTLinuxSysFsWriteStr) +# define RTLinuxSysFsWriteStrFile RT_MANGLER(RTLinuxSysFsWriteStrFile) +# define RTLinuxSysFsWriteStrFileV RT_MANGLER(RTLinuxSysFsWriteStrFileV) +# define RTLinuxSysFsWriteU8File RT_MANGLER(RTLinuxSysFsWriteU8File) +# define RTLinuxSysFsWriteU8FileV RT_MANGLER(RTLinuxSysFsWriteU8FileV) +# define RTLinuxSysFsWriteU16File RT_MANGLER(RTLinuxSysFsWriteU16File) +# define RTLinuxSysFsWriteU16FileV RT_MANGLER(RTLinuxSysFsWriteU16FileV) +# define RTLinuxSysFsWriteU32File RT_MANGLER(RTLinuxSysFsWriteU32File) +# define RTLinuxSysFsWriteU32FileV RT_MANGLER(RTLinuxSysFsWriteU32FileV) +# define RTLinuxSysFsWriteU64File RT_MANGLER(RTLinuxSysFsWriteU64File) +# define RTLinuxSysFsWriteU64FileV RT_MANGLER(RTLinuxSysFsWriteU64FileV) +# define RTLocalIpcServerCreate RT_MANGLER(RTLocalIpcServerCreate) +# define RTLocalIpcServerDestroy RT_MANGLER(RTLocalIpcServerDestroy) +# define RTLocalIpcServerCancel RT_MANGLER(RTLocalIpcServerCancel) +# define RTLocalIpcServerListen RT_MANGLER(RTLocalIpcServerListen) +# define RTLocalIpcSessionConnect RT_MANGLER(RTLocalIpcSessionConnect) +# define RTLocalIpcSessionClose RT_MANGLER(RTLocalIpcSessionClose) +# define RTLocalIpcSessionCancel RT_MANGLER(RTLocalIpcSessionCancel) +# define RTLocalIpcSessionRead RT_MANGLER(RTLocalIpcSessionRead) +# define RTLocalIpcSessionReadNB RT_MANGLER(RTLocalIpcSessionReadNB) +# define RTLocalIpcSessionRetain RT_MANGLER(RTLocalIpcSessionRetain) +# define RTLocalIpcSessionRelease RT_MANGLER(RTLocalIpcSessionRelease) +# define RTLocalIpcSessionWrite RT_MANGLER(RTLocalIpcSessionWrite) +# define RTLocalIpcSessionFlush RT_MANGLER(RTLocalIpcSessionFlush) +# define RTLocalIpcSessionWaitForData RT_MANGLER(RTLocalIpcSessionWaitForData) +# define RTLocalIpcSessionQueryProcess RT_MANGLER(RTLocalIpcSessionQueryProcess) +# define RTLocalIpcSessionQueryUserId RT_MANGLER(RTLocalIpcSessionQueryUserId) +# define RTLocalIpcSessionQueryGroupId RT_MANGLER(RTLocalIpcSessionQueryGroupId) +# define RTLocaleQueryLocaleName RT_MANGLER(RTLocaleQueryLocaleName) +# define RTLocaleQueryNormalizedBaseLocaleName RT_MANGLER(RTLocaleQueryNormalizedBaseLocaleName) +# define RTLocaleQueryUserCountryCode RT_MANGLER(RTLocaleQueryUserCountryCode) +# define RTLockValidatorClassAddPriorClass RT_MANGLER(RTLockValidatorClassAddPriorClass) +# define RTLockValidatorClassCreate RT_MANGLER(RTLockValidatorClassCreate) +# define RTLockValidatorClassCreateEx RT_MANGLER(RTLockValidatorClassCreateEx) +# define RTLockValidatorClassCreateExV RT_MANGLER(RTLockValidatorClassCreateExV) +# define RTLockValidatorClassCreateUnique RT_MANGLER(RTLockValidatorClassCreateUnique) +# define RTLockValidatorClassEnforceStrictReleaseOrder RT_MANGLER(RTLockValidatorClassEnforceStrictReleaseOrder) +# define RTLockValidatorClassFindForSrcPos RT_MANGLER(RTLockValidatorClassFindForSrcPos) +# define RTLockValidatorClassForSrcPos RT_MANGLER(RTLockValidatorClassForSrcPos) +# define RTLockValidatorClassRelease RT_MANGLER(RTLockValidatorClassRelease) +# define RTLockValidatorClassRetain RT_MANGLER(RTLockValidatorClassRetain) +# define RTLockValidatorHoldsLocksInClass RT_MANGLER(RTLockValidatorHoldsLocksInClass) +# define RTLockValidatorHoldsLocksInSubClass RT_MANGLER(RTLockValidatorHoldsLocksInSubClass) +# define RTLockValidatorIsBlockedThreadInValidator RT_MANGLER(RTLockValidatorIsBlockedThreadInValidator) +# define RTLockValidatorIsEnabled RT_MANGLER(RTLockValidatorIsEnabled) +# define RTLockValidatorIsQuiet RT_MANGLER(RTLockValidatorIsQuiet) +# define RTLockValidatorMayPanic RT_MANGLER(RTLockValidatorMayPanic) +# define RTLockValidatorQueryBlocking RT_MANGLER(RTLockValidatorQueryBlocking) +# define RTLockValidatorReadLockDec RT_MANGLER(RTLockValidatorReadLockDec) +# define RTLockValidatorReadLockGetCount RT_MANGLER(RTLockValidatorReadLockGetCount) +# define RTLockValidatorReadLockInc RT_MANGLER(RTLockValidatorReadLockInc) +# define RTLockValidatorRecExclCheckBlocking RT_MANGLER(RTLockValidatorRecExclCheckBlocking) +# define RTLockValidatorRecExclCheckOrder RT_MANGLER(RTLockValidatorRecExclCheckOrder) +# define RTLockValidatorRecExclCheckOrderAndBlocking RT_MANGLER(RTLockValidatorRecExclCheckOrderAndBlocking) +# define RTLockValidatorRecExclCreate RT_MANGLER(RTLockValidatorRecExclCreate) +# define RTLockValidatorRecExclCreateV RT_MANGLER(RTLockValidatorRecExclCreateV) +# define RTLockValidatorRecExclDelete RT_MANGLER(RTLockValidatorRecExclDelete) +# define RTLockValidatorRecExclDestroy RT_MANGLER(RTLockValidatorRecExclDestroy) +# define RTLockValidatorRecExclInit RT_MANGLER(RTLockValidatorRecExclInit) +# define RTLockValidatorRecExclInitV RT_MANGLER(RTLockValidatorRecExclInitV) +# define RTLockValidatorRecExclRecursion RT_MANGLER(RTLockValidatorRecExclRecursion) +# define RTLockValidatorRecExclRecursionMixed RT_MANGLER(RTLockValidatorRecExclRecursionMixed) +# define RTLockValidatorRecExclReleaseOwner RT_MANGLER(RTLockValidatorRecExclReleaseOwner) +# define RTLockValidatorRecExclReleaseOwnerUnchecked RT_MANGLER(RTLockValidatorRecExclReleaseOwnerUnchecked) +# define RTLockValidatorRecExclSetOwner RT_MANGLER(RTLockValidatorRecExclSetOwner) +# define RTLockValidatorRecExclSetSubClass RT_MANGLER(RTLockValidatorRecExclSetSubClass) +# define RTLockValidatorRecExclUnwind RT_MANGLER(RTLockValidatorRecExclUnwind) +# define RTLockValidatorRecExclUnwindMixed RT_MANGLER(RTLockValidatorRecExclUnwindMixed) +# define RTLockValidatorRecMakeSiblings RT_MANGLER(RTLockValidatorRecMakeSiblings) +# define RTLockValidatorRecSharedAddOwner RT_MANGLER(RTLockValidatorRecSharedAddOwner) +# define RTLockValidatorRecSharedCheckAndRelease RT_MANGLER(RTLockValidatorRecSharedCheckAndRelease) +# define RTLockValidatorRecSharedCheckBlocking RT_MANGLER(RTLockValidatorRecSharedCheckBlocking) +# define RTLockValidatorRecSharedCheckOrder RT_MANGLER(RTLockValidatorRecSharedCheckOrder) +# define RTLockValidatorRecSharedCheckOrderAndBlocking RT_MANGLER(RTLockValidatorRecSharedCheckOrderAndBlocking) +# define RTLockValidatorRecSharedCheckSignaller RT_MANGLER(RTLockValidatorRecSharedCheckSignaller) +# define RTLockValidatorRecSharedCreate RT_MANGLER(RTLockValidatorRecSharedCreate) +# define RTLockValidatorRecSharedCreateV RT_MANGLER(RTLockValidatorRecSharedCreateV) +# define RTLockValidatorRecSharedDelete RT_MANGLER(RTLockValidatorRecSharedDelete) +# define RTLockValidatorRecSharedDestroy RT_MANGLER(RTLockValidatorRecSharedDestroy) +# define RTLockValidatorRecSharedInit RT_MANGLER(RTLockValidatorRecSharedInit) +# define RTLockValidatorRecSharedInitV RT_MANGLER(RTLockValidatorRecSharedInitV) +# define RTLockValidatorRecSharedIsOwner RT_MANGLER(RTLockValidatorRecSharedIsOwner) +# define RTLockValidatorRecSharedRemoveOwner RT_MANGLER(RTLockValidatorRecSharedRemoveOwner) +# define RTLockValidatorRecSharedResetOwner RT_MANGLER(RTLockValidatorRecSharedResetOwner) +# define RTLockValidatorRecSharedSetSubClass RT_MANGLER(RTLockValidatorRecSharedSetSubClass) +# define RTLockValidatorSetEnabled RT_MANGLER(RTLockValidatorSetEnabled) +# define RTLockValidatorSetMayPanic RT_MANGLER(RTLockValidatorSetMayPanic) +# define RTLockValidatorSetQuiet RT_MANGLER(RTLockValidatorSetQuiet) +# define RTLockValidatorWriteLockDec RT_MANGLER(RTLockValidatorWriteLockDec) +# define RTLockValidatorWriteLockGetCount RT_MANGLER(RTLockValidatorWriteLockGetCount) +# define RTLockValidatorWriteLockInc RT_MANGLER(RTLockValidatorWriteLockInc) +# define RTLogBackdoorPrintf RT_MANGLER(RTLogBackdoorPrintf) /* r0drv-guest */ +# define RTLogBackdoorPrintfV RT_MANGLER(RTLogBackdoorPrintfV) /* r0drv-guest */ +# define RTLogCalcSizeForR0 RT_MANGLER(RTLogCalcSizeForR0) +# define RTLogClearFileDelayFlag RT_MANGLER(RTLogClearFileDelayFlag) +# define RTLogCloneRC RT_MANGLER(RTLogCloneRC) +# define RTLogComPrintf RT_MANGLER(RTLogComPrintf) +# define RTLogComPrintfV RT_MANGLER(RTLogComPrintfV) +# define RTLogCopyGroupsAndFlagsForR0 RT_MANGLER(RTLogCopyGroupsAndFlagsForR0) +# define RTLogCreate RT_MANGLER(RTLogCreate) +# define RTLogCreateEx RT_MANGLER(RTLogCreateEx) +# define RTLogCreateExV RT_MANGLER(RTLogCreateExV) +# define RTLogCreateForR0 RT_MANGLER(RTLogCreateForR0) +# define RTLogDefaultInit RT_MANGLER(RTLogDefaultInit) +# define RTLogDefaultInstance RT_MANGLER(RTLogDefaultInstance) +# define RTLogDefaultInstanceEx RT_MANGLER(RTLogDefaultInstanceEx) +# define RTLogDestinations RT_MANGLER(RTLogDestinations) +# define RTLogDestroy RT_MANGLER(RTLogDestroy) +# define RTLogFlags RT_MANGLER(RTLogFlags) +# define RTLogFlush RT_MANGLER(RTLogFlush) +# define RTLogFlushRC RT_MANGLER(RTLogFlushRC) +# define RTLogFlushR0 RT_MANGLER(RTLogFlushR0) +# define RTLogFlushToLogger RT_MANGLER(RTLogFlushToLogger) +# define RTLogFormatV RT_MANGLER(RTLogFormatV) +# define RTLogGetDefaultInstance RT_MANGLER(RTLogGetDefaultInstance) +# define RTLogGetDefaultInstanceEx RT_MANGLER(RTLogGetDefaultInstanceEx) +# define RTLogGetDestinations RT_MANGLER(RTLogGetDestinations) +# define RTLogGetFlags RT_MANGLER(RTLogGetFlags) +# define RTLogGetGroupSettings RT_MANGLER(RTLogGetGroupSettings) +# define RTLogGroupSettings RT_MANGLER(RTLogGroupSettings) +# define RTLogLogger RT_MANGLER(RTLogLogger) +# define RTLogLoggerEx RT_MANGLER(RTLogLoggerEx) +# define RTLogLoggerExV RT_MANGLER(RTLogLoggerExV) +# define RTLogLoggerV RT_MANGLER(RTLogLoggerV) +# define RTLogPrintf RT_MANGLER(RTLogPrintf) +# define RTLogPrintfV RT_MANGLER(RTLogPrintfV) +# define RTLogDumpPrintfV RT_MANGLER(RTLogDumpPrintfV) +# define RTLogRelGetDefaultInstance RT_MANGLER(RTLogRelGetDefaultInstance) +# define RTLogRelGetDefaultInstanceEx RT_MANGLER(RTLogRelGetDefaultInstanceEx) +# define RTLogRelLogger RT_MANGLER(RTLogRelLogger) +# define RTLogRelLoggerV RT_MANGLER(RTLogRelLoggerV) +# define RTLogRelPrintf RT_MANGLER(RTLogRelPrintf) +# define RTLogRelPrintfV RT_MANGLER(RTLogRelPrintfV) +# define RTLogRelSetBuffering RT_MANGLER(RTLogRelSetBuffering) +# define RTLogRelSetDefaultInstance RT_MANGLER(RTLogRelSetDefaultInstance) +# define RTLogSetBuffering RT_MANGLER(RTLogSetBuffering) +# define RTLogSetCustomPrefixCallback RT_MANGLER(RTLogSetCustomPrefixCallback) +# define RTLogSetCustomPrefixCallbackForR0 RT_MANGLER(RTLogSetCustomPrefixCallbackForR0) +# define RTLogSetDefaultInstance RT_MANGLER(RTLogSetDefaultInstance) +# define RTLogSetDefaultInstanceThread RT_MANGLER(RTLogSetDefaultInstanceThread) /* r0drv */ +# define RTLogSetGroupLimit RT_MANGLER(RTLogSetGroupLimit) +# define RTLogWriteCom RT_MANGLER(RTLogWriteCom) +# define RTLogWriteCom RT_MANGLER(RTLogWriteCom) +# define RTLogWriteDebugger RT_MANGLER(RTLogWriteDebugger) +# define RTLogWriteStdErr RT_MANGLER(RTLogWriteStdErr) +# define RTLogWriteStdOut RT_MANGLER(RTLogWriteStdOut) +# define RTLogWriteUser RT_MANGLER(RTLogWriteUser) +# define RTManifestCreate RT_MANGLER(RTManifestCreate) +# define RTManifestDup RT_MANGLER(RTManifestDup) +# define RTManifestEntryAdd RT_MANGLER(RTManifestEntryAdd) +# define RTManifestEntryAddIoStream RT_MANGLER(RTManifestEntryAddIoStream) +# define RTManifestEntryAddPassthruIoStream RT_MANGLER(RTManifestEntryAddPassthruIoStream) +# define RTManifestEntryExists RT_MANGLER(RTManifestEntryExists) +# define RTManifestEntryRemove RT_MANGLER(RTManifestEntryRemove) +# define RTManifestEntryQueryAttr RT_MANGLER(RTManifestEntryQueryAttr) +# define RTManifestEntrySetAttr RT_MANGLER(RTManifestEntrySetAttr) +# define RTManifestEntryUnsetAttr RT_MANGLER(RTManifestEntryUnsetAttr) +# define RTManifestEquals RT_MANGLER(RTManifestEquals) +# define RTManifestEqualsEx RT_MANGLER(RTManifestEqualsEx) +# define RTManifestPtIosAddEntryNow RT_MANGLER(RTManifestPtIosAddEntryNow) +# define RTManifestPtIosIsInstanceOf RT_MANGLER(RTManifestPtIosIsInstanceOf) +# define RTManifestQueryAllAttrTypes RT_MANGLER(RTManifestQueryAllAttrTypes) +# define RTManifestQueryAttr RT_MANGLER(RTManifestQueryAttr) +# define RTManifestReadStandard RT_MANGLER(RTManifestReadStandard) +# define RTManifestReadStandardEx RT_MANGLER(RTManifestReadStandardEx) +# define RTManifestReadStandardFromFile RT_MANGLER(RTManifestReadStandardFromFile) +# define RTManifestRelease RT_MANGLER(RTManifestRelease) +# define RTManifestRetain RT_MANGLER(RTManifestRetain) +# define RTManifestSetAttr RT_MANGLER(RTManifestSetAttr) +# define RTManifestUnsetAttr RT_MANGLER(RTManifestUnsetAttr) +# define RTManifestVerify RT_MANGLER(RTManifestVerify) +# define RTManifestVerifyDigestType RT_MANGLER(RTManifestVerifyDigestType) +# define RTManifestVerifyFiles RT_MANGLER(RTManifestVerifyFiles) +# define RTManifestVerifyFilesBuf RT_MANGLER(RTManifestVerifyFilesBuf) +# define RTManifestWriteFiles RT_MANGLER(RTManifestWriteFiles) +# define RTManifestWriteFilesBuf RT_MANGLER(RTManifestWriteFilesBuf) +# define RTManifestWriteStandard RT_MANGLER(RTManifestWriteStandard) +# define RTManifestWriteStandardToFile RT_MANGLER(RTManifestWriteStandardToFile) +# define RTMd5 RT_MANGLER(RTMd5) +# define RTMd5Final RT_MANGLER(RTMd5Final) +# define RTMd5FromString RT_MANGLER(RTMd5FromString) +# define RTMd5Init RT_MANGLER(RTMd5Init) +# define RTMd5ToString RT_MANGLER(RTMd5ToString) +# define RTMd5Update RT_MANGLER(RTMd5Update) +# define RTMemAllocExTag RT_MANGLER(RTMemAllocExTag) +# define RTMemAllocTag RT_MANGLER(RTMemAllocTag) +# define RTMemAllocVarTag RT_MANGLER(RTMemAllocVarTag) +# define RTMemAllocZTag RT_MANGLER(RTMemAllocZTag) +# define RTMemAllocZVarTag RT_MANGLER(RTMemAllocZVarTag) +# define RTMemCacheAlloc RT_MANGLER(RTMemCacheAlloc) +# define RTMemCacheAllocEx RT_MANGLER(RTMemCacheAllocEx) +# define RTMemCacheCreate RT_MANGLER(RTMemCacheCreate) +# define RTMemCacheDestroy RT_MANGLER(RTMemCacheDestroy) +# define RTMemCacheFree RT_MANGLER(RTMemCacheFree) +# define RTMemContAlloc RT_MANGLER(RTMemContAlloc) /* r0drv */ +# define RTMemContFree RT_MANGLER(RTMemContFree) /* r0drv */ +# define RTMemDump RT_MANGLER(RTMemDump) +# define RTMemDupExTag RT_MANGLER(RTMemDupExTag) +# define RTMemDupTag RT_MANGLER(RTMemDupTag) +# define RTMemEfAlloc RT_MANGLER(RTMemEfAlloc) +# define RTMemEfAllocNP RT_MANGLER(RTMemEfAllocNP) +# define RTMemEfAllocVar RT_MANGLER(RTMemEfAllocVar) +# define RTMemEfAllocVarNP RT_MANGLER(RTMemEfAllocVarNP) +# define RTMemEfAllocZ RT_MANGLER(RTMemEfAllocZ) +# define RTMemEfAllocZNP RT_MANGLER(RTMemEfAllocZNP) +# define RTMemEfAllocZVar RT_MANGLER(RTMemEfAllocZVar) +# define RTMemEfAllocZVarNP RT_MANGLER(RTMemEfAllocZVarNP) +# define RTMemEfDup RT_MANGLER(RTMemEfDup) +# define RTMemEfDupEx RT_MANGLER(RTMemEfDupEx) +# define RTMemEfDupExNP RT_MANGLER(RTMemEfDupExNP) +# define RTMemEfDupNP RT_MANGLER(RTMemEfDupNP) +# define RTMemEfFree RT_MANGLER(RTMemEfFree) +# define RTMemEfFreeNP RT_MANGLER(RTMemEfFreeNP) +# define RTMemEfRealloc RT_MANGLER(RTMemEfRealloc) +# define RTMemEfReallocNP RT_MANGLER(RTMemEfReallocNP) +# define RTMemEfTmpAlloc RT_MANGLER(RTMemEfTmpAlloc) +# define RTMemEfTmpAllocNP RT_MANGLER(RTMemEfTmpAllocNP) +# define RTMemEfTmpAllocZ RT_MANGLER(RTMemEfTmpAllocZ) +# define RTMemEfTmpAllocZNP RT_MANGLER(RTMemEfTmpAllocZNP) +# define RTMemEfTmpFree RT_MANGLER(RTMemEfTmpFree) +# define RTMemEfTmpFreeNP RT_MANGLER(RTMemEfTmpFreeNP) +# define RTMemExecAllocTag RT_MANGLER(RTMemExecAllocTag) +# define RTMemExecFree RT_MANGLER(RTMemExecFree) +# define RTMemFree RT_MANGLER(RTMemFree) +# define RTMemFreeEx RT_MANGLER(RTMemFreeEx) +# define RTMemLockedAllocExTag RT_MANGLER(RTMemLockedAllocExTag) +# define RTMemLockedAllocZExTag RT_MANGLER(RTMemLockedAllocZExTag) +# define RTMemLockedAllocTag RT_MANGLER(RTMemLockedAllocTag) +# define RTMemLockedAllocZTag RT_MANGLER(RTMemLockedAllocZTag) +# define RTMemLockedFree RT_MANGLER(RTMemLockedFree) +# define RTMemPageAllocTag RT_MANGLER(RTMemPageAllocTag) +# define RTMemPageAllocZTag RT_MANGLER(RTMemPageAllocZTag) +# define RTMemPageFree RT_MANGLER(RTMemPageFree) +# define RTMemPoolAlloc RT_MANGLER(RTMemPoolAlloc) +# define RTMemPoolAllocZ RT_MANGLER(RTMemPoolAllocZ) +# define RTMemPoolCreate RT_MANGLER(RTMemPoolCreate) +# define RTMemPoolDestroy RT_MANGLER(RTMemPoolDestroy) +# define RTMemPoolDup RT_MANGLER(RTMemPoolDup) +# define RTMemPoolDupEx RT_MANGLER(RTMemPoolDupEx) +# define RTMemPoolFree RT_MANGLER(RTMemPoolFree) +# define RTMemPoolRealloc RT_MANGLER(RTMemPoolRealloc) +# define RTMemPoolRefCount RT_MANGLER(RTMemPoolRefCount) +# define RTMemPoolRelease RT_MANGLER(RTMemPoolRelease) +# define RTMemPoolRetain RT_MANGLER(RTMemPoolRetain) +# define RTMemProtect RT_MANGLER(RTMemProtect) +# define RTMemReallocTag RT_MANGLER(RTMemReallocTag) +# define RTMemTmpAllocTag RT_MANGLER(RTMemTmpAllocTag) +# define RTMemTmpAllocZTag RT_MANGLER(RTMemTmpAllocZTag) +# define RTMemTmpFree RT_MANGLER(RTMemTmpFree) +# define RTMemTrackerDumpAllToFile RT_MANGLER(RTMemTrackerDumpAllToFile) +# define RTMemTrackerDumpAllToLog RT_MANGLER(RTMemTrackerDumpAllToLog) +# define RTMemTrackerDumpAllToLogRel RT_MANGLER(RTMemTrackerDumpAllToLogRel) +# define RTMemTrackerDumpAllToStdErr RT_MANGLER(RTMemTrackerDumpAllToStdErr) +# define RTMemTrackerDumpAllToStdOut RT_MANGLER(RTMemTrackerDumpAllToStdOut) +# define RTMemTrackerDumpStatsToFile RT_MANGLER(RTMemTrackerDumpStatsToFile) +# define RTMemTrackerDumpStatsToLog RT_MANGLER(RTMemTrackerDumpStatsToLog) +# define RTMemTrackerDumpStatsToLogRel RT_MANGLER(RTMemTrackerDumpStatsToLogRel) +# define RTMemTrackerDumpStatsToStdErr RT_MANGLER(RTMemTrackerDumpStatsToStdErr) +# define RTMemTrackerDumpStatsToStdOut RT_MANGLER(RTMemTrackerDumpStatsToStdOut) +# define RTMemTrackerHdrAlloc RT_MANGLER(RTMemTrackerHdrAlloc) +# define RTMemTrackerHdrFree RT_MANGLER(RTMemTrackerHdrFree) +# define RTMemTrackerHdrReallocDone RT_MANGLER(RTMemTrackerHdrReallocDone) +# define RTMemTrackerHdrReallocPrep RT_MANGLER(RTMemTrackerHdrReallocPrep) +# define RTMemWipeThoroughly RT_MANGLER(RTMemWipeThoroughly) +# define RTMpCpuId RT_MANGLER(RTMpCpuId) +# define RTMpCpuIdFromSetIndex RT_MANGLER(RTMpCpuIdFromSetIndex) +# define RTMpCpuIdToSetIndex RT_MANGLER(RTMpCpuIdToSetIndex) +# define RTMpCurSetIndex RT_MANGLER(RTMpCurSetIndex) +# define RTMpCurSetIndexAndId RT_MANGLER(RTMpCurSetIndexAndId) +# define RTMpGetArraySize RT_MANGLER(RTMpGetArraySize) +# define RTMpGetCount RT_MANGLER(RTMpGetCount) +# define RTMpGetCurFrequency RT_MANGLER(RTMpGetCurFrequency) +# define RTMpGetDescription RT_MANGLER(RTMpGetDescription) +# define RTMpGetCpuGroupCounts RT_MANGLER(RTMpGetCpuGroupCounts) +# define RTMpGetMaxCpuGroupCount RT_MANGLER(RTMpGetMaxCpuGroupCount) +# define RTMpGetMaxCpuId RT_MANGLER(RTMpGetMaxCpuId) +# define RTMpGetMaxFrequency RT_MANGLER(RTMpGetMaxFrequency) +# define RTMpGetOnlineCount RT_MANGLER(RTMpGetOnlineCount) +# define RTMpGetOnlineCoreCount RT_MANGLER(RTMpGetOnlineCoreCount) +# define RTMpGetOnlineSet RT_MANGLER(RTMpGetOnlineSet) +# define RTMpGetPresentCount RT_MANGLER(RTMpGetPresentCount) +# define RTMpGetPresentCoreCount RT_MANGLER(RTMpGetPresentCoreCount) +# define RTMpGetPresentSet RT_MANGLER(RTMpGetPresentSet) +# define RTMpGetSet RT_MANGLER(RTMpGetSet) +# define RTMpGetCoreCount RT_MANGLER(RTMpGetCoreCount) +# define RTMpIsCpuOnline RT_MANGLER(RTMpIsCpuOnline) +# define RTMpIsCpuPossible RT_MANGLER(RTMpIsCpuPossible) /* r0drv */ +# define RTMpIsCpuPresent RT_MANGLER(RTMpIsCpuPresent) +# define RTMpIsCpuWorkPending RT_MANGLER(RTMpIsCpuWorkPending) +# define RTMpNotificationDeregister RT_MANGLER(RTMpNotificationDeregister) /* r0drv */ +# define RTMpNotificationRegister RT_MANGLER(RTMpNotificationRegister) /* r0drv */ +# define RTMpOnAll RT_MANGLER(RTMpOnAll) /* r0drv */ +# define RTMpOnAllIsConcurrentSafe RT_MANGLER(RTMpOnAllIsConcurrentSafe) /* r0drv */ +# define RTMpOnOthers RT_MANGLER(RTMpOnOthers) /* r0drv */ +# define RTMpOnPair RT_MANGLER(RTMpOnPair) /* r0drv */ +# define RTMpOnPairIsConcurrentExecSupported RT_MANGLER(RTMpOnPairIsConcurrentExecSupported) /* r0drv */ +# define RTMpOnSpecific RT_MANGLER(RTMpOnSpecific) /* r0drv */ +# define RTMpPokeCpu RT_MANGLER(RTMpPokeCpu) /* r0drv */ +# define RTMpSetIndexFromCpuGroupMember RT_MANGLER(RTMpSetIndexFromCpuGroupMember) +# define RTMsgError RT_MANGLER(RTMsgError) +# define RTMsgErrorExit RT_MANGLER(RTMsgErrorExit) +# define RTMsgErrorExitV RT_MANGLER(RTMsgErrorExitV) +# define RTMsgErrorExitFailure RT_MANGLER(RTMsgErrorExitFailure) +# define RTMsgErrorExitFailureV RT_MANGLER(RTMsgErrorExitFailureV) +# define RTMsgErrorRc RT_MANGLER(RTMsgErrorRc) +# define RTMsgErrorRcV RT_MANGLER(RTMsgErrorRcV) +# define RTMsgErrorV RT_MANGLER(RTMsgErrorV) +# define RTMsgInfo RT_MANGLER(RTMsgInfo) +# define RTMsgInfoV RT_MANGLER(RTMsgInfoV) +# define RTMsgInitFailure RT_MANGLER(RTMsgInitFailure) +# define RTMsgSetProgName RT_MANGLER(RTMsgSetProgName) +# define RTMsgWarning RT_MANGLER(RTMsgWarning) +# define RTMsgWarningV RT_MANGLER(RTMsgWarningV) +# define RTMsgRefEntryPrintStringTable RT_MANGLER(RTMsgRefEntryPrintStringTable) +# define RTMsgRefEntrySynopsisEx RT_MANGLER(RTMsgRefEntrySynopsisEx) +# define RTMsgRefEntrySynopsis RT_MANGLER(RTMsgRefEntrySynopsis) +# define RTMsgRefEntryHelpEx RT_MANGLER(RTMsgRefEntryHelpEx) +# define RTMsgRefEntryHelp RT_MANGLER(RTMsgRefEntryHelp) +# define RTNetIPv4AddDataChecksum RT_MANGLER(RTNetIPv4AddDataChecksum) +# define RTNetIPv4AddTCPChecksum RT_MANGLER(RTNetIPv4AddTCPChecksum) +# define RTNetIPv4AddUDPChecksum RT_MANGLER(RTNetIPv4AddUDPChecksum) +# define RTNetIPv4FinalizeChecksum RT_MANGLER(RTNetIPv4FinalizeChecksum) +# define RTNetIPv4HdrChecksum RT_MANGLER(RTNetIPv4HdrChecksum) +# define RTNetIPv4IsDHCPValid RT_MANGLER(RTNetIPv4IsDHCPValid) +# define RTNetIPv4IsHdrValid RT_MANGLER(RTNetIPv4IsHdrValid) +# define RTNetIPv4IsTCPSizeValid RT_MANGLER(RTNetIPv4IsTCPSizeValid) +# define RTNetIPv4IsTCPValid RT_MANGLER(RTNetIPv4IsTCPValid) +# define RTNetIPv4IsUDPSizeValid RT_MANGLER(RTNetIPv4IsUDPSizeValid) +# define RTNetIPv4IsUDPValid RT_MANGLER(RTNetIPv4IsUDPValid) +# define RTNetIPv4PseudoChecksum RT_MANGLER(RTNetIPv4PseudoChecksum) +# define RTNetIPv4PseudoChecksumBits RT_MANGLER(RTNetIPv4PseudoChecksumBits) +# define RTNetIPv4TCPChecksum RT_MANGLER(RTNetIPv4TCPChecksum) +# define RTNetIPv4UDPChecksum RT_MANGLER(RTNetIPv4UDPChecksum) +# define RTNetIPv6PseudoChecksum RT_MANGLER(RTNetIPv6PseudoChecksum) +# define RTNetIPv6PseudoChecksumBits RT_MANGLER(RTNetIPv6PseudoChecksumBits) +# define RTNetIPv6PseudoChecksumEx RT_MANGLER(RTNetIPv6PseudoChecksumEx) +# define RTNetMaskToPrefixIPv4 RT_MANGLER(RTNetMaskToPrefixIPv4) +# define RTNetPrefixToMaskIPv4 RT_MANGLER(RTNetPrefixToMaskIPv4) +# define RTNetTCPChecksum RT_MANGLER(RTNetTCPChecksum) +# define RTNetUDPChecksum RT_MANGLER(RTNetUDPChecksum) +# define RTNetStrToMacAddr RT_MANGLER(RTNetStrToMacAddr) +# define RTNetIsIPv4AddrStr RT_MANGLER(RTNetIsIPv4AddrStr) +# define RTNetStrIsIPv4AddrAny RT_MANGLER(RTNetStrIsIPv4AddrAny) +# define RTNetStrToIPv4AddrEx RT_MANGLER(RTNetStrToIPv4AddrEx) +# define RTNetStrToIPv4Addr RT_MANGLER(RTNetStrToIPv4Addr) +# define RTNetIsIPv6AddrStr RT_MANGLER(RTNetIsIPv6AddrStr) +# define RTNetStrIsIPv6AddrAny RT_MANGLER(RTNetStrIsIPv6AddrAny) +# define RTNetStrToIPv6AddrEx RT_MANGLER(RTNetStrToIPv6AddrEx) +# define RTNetStrToIPv6Addr RT_MANGLER(RTNetStrToIPv6Addr) +# define RTNetMaskToPrefixIPv6 RT_MANGLER(RTNetMaskToPrefixIPv6) +# define RTNetPrefixToMaskIPv6 RT_MANGLER(RTNetPrefixToMaskIPv6) +# define RTOnceSlow RT_MANGLER(RTOnceSlow) +# define RTOnceReset RT_MANGLER(RTOnceReset) +# define RTPathAbs RT_MANGLER(RTPathAbs) +# define RTPathAbsDup RT_MANGLER(RTPathAbsDup) +# define RTPathAbsEx RT_MANGLER(RTPathAbsEx) +# define RTPathAbsExDup RT_MANGLER(RTPathAbsExDup) +# define RTPathAppDocs RT_MANGLER(RTPathAppDocs) +# define RTPathAppend RT_MANGLER(RTPathAppend) +# define RTPathAppendEx RT_MANGLER(RTPathAppendEx) +# define RTPathAppPrivateArch RT_MANGLER(RTPathAppPrivateArch) +# define RTPathAppPrivateArchTop RT_MANGLER(RTPathAppPrivateArchTop) +# define RTPathAppPrivateNoArch RT_MANGLER(RTPathAppPrivateNoArch) +# define RTPathCalcRelative RT_MANGLER(RTPathCalcRelative) +# define RTPathChangeToDosSlashes RT_MANGLER(RTPathChangeToDosSlashes) +# define RTPathChangeToUnixSlashes RT_MANGLER(RTPathChangeToUnixSlashes) +# define RTPathCompare RT_MANGLER(RTPathCompare) +# define RTPathCopyComponents RT_MANGLER(RTPathCopyComponents) +# define RTPathCountComponents RT_MANGLER(RTPathCountComponents) +# define RTPathEnsureTrailingSeparator RT_MANGLER(RTPathEnsureTrailingSeparator) +# define RTPathExecDir RT_MANGLER(RTPathExecDir) +# define RTPathExists RT_MANGLER(RTPathExists) +# define RTPathExistsEx RT_MANGLER(RTPathExistsEx) +# define RTPathSuffix RT_MANGLER(RTPathSuffix) +# define RTPathFilename RT_MANGLER(RTPathFilename) +# define RTPathFilenameEx RT_MANGLER(RTPathFilenameEx) +# define RTPathGetCurrent RT_MANGLER(RTPathGetCurrent) +# define RTPathGetCurrentDrive RT_MANGLER(RTPathGetCurrentDrive) +# define RTPathGetCurrentOnDrive RT_MANGLER(RTPathGetCurrentOnDrive) +# define RTPathGetMode RT_MANGLER(RTPathGetMode) +# define RTPathGlob RT_MANGLER(RTPathGlob) +# define RTPathGlobFree RT_MANGLER(RTPathGlobFree) +# define RTPathHasSuffix RT_MANGLER(RTPathHasSuffix) +# define RTPathHasPath RT_MANGLER(RTPathHasPath) +# define RTPathIsSame RT_MANGLER(RTPathIsSame) +# define RTPathJoin RT_MANGLER(RTPathJoin) +# define RTPathJoinA RT_MANGLER(RTPathJoinA) +# define RTPathJoinEx RT_MANGLER(RTPathJoinEx) +# define RTPathParse RT_MANGLER(RTPathParse) +# define RTPathParsedReassemble RT_MANGLER(RTPathParsedReassemble) +# define RTPathParseSimple RT_MANGLER(RTPathParseSimple) +# define RTPathQueryInfo RT_MANGLER(RTPathQueryInfo) +# define RTPathQueryInfoEx RT_MANGLER(RTPathQueryInfoEx) +# define RTPathReal RT_MANGLER(RTPathReal) +# define RTPathRealDup RT_MANGLER(RTPathRealDup) +# define RTPathRename RT_MANGLER(RTPathRename) +# define RTPathRmCmd RT_MANGLER(RTPathRmCmd) +# define RTPathSetCurrent RT_MANGLER(RTPathSetCurrent) +# define RTPathSetMode RT_MANGLER(RTPathSetMode) /* not-win */ +# define RTPathSetOwner RT_MANGLER(RTPathSetOwner) /* not-win */ +# define RTPathSetOwnerEx RT_MANGLER(RTPathSetOwnerEx) /* not-win */ +# define RTPathSetTimes RT_MANGLER(RTPathSetTimes) +# define RTPathSetTimesEx RT_MANGLER(RTPathSetTimesEx) +# define RTPathSharedLibs RT_MANGLER(RTPathSharedLibs) +# define RTPathSkipRootSpec RT_MANGLER(RTPathSkipRootSpec) +# define RTPathSplit RT_MANGLER(RTPathSplit) +# define RTPathSplitATag RT_MANGLER(RTPathSplitATag) +# define RTPathSplitFree RT_MANGLER(RTPathSplitFree) +# define RTPathSplitReassemble RT_MANGLER(RTPathSplitReassemble) +# define RTPathStartsWith RT_MANGLER(RTPathStartsWith) +# define RTPathStartsWithRoot RT_MANGLER(RTPathStartsWithRoot) +# define RTPathStripSuffix RT_MANGLER(RTPathStripSuffix) +# define RTPathStripFilename RT_MANGLER(RTPathStripFilename) +# define RTPathStripTrailingSlash RT_MANGLER(RTPathStripTrailingSlash) +# define RTPathTemp RT_MANGLER(RTPathTemp) +# define RTPathTraverseList RT_MANGLER(RTPathTraverseList) +# define RTPathUnlink RT_MANGLER(RTPathUnlink) +# define RTPathUserDocuments RT_MANGLER(RTPathUserDocuments) +# define RTPathUserHome RT_MANGLER(RTPathUserHome) +# define RTPipeClose RT_MANGLER(RTPipeClose) +# define RTPipeCreate RT_MANGLER(RTPipeCreate) +# define RTPipeFlush RT_MANGLER(RTPipeFlush) +# define RTPipeFromNative RT_MANGLER(RTPipeFromNative) +# define RTPipeQueryInfo RT_MANGLER(RTPipeQueryInfo) +# define RTPipeQueryReadable RT_MANGLER(RTPipeQueryReadable) +# define RTPipeRead RT_MANGLER(RTPipeRead) +# define RTPipeReadBlocking RT_MANGLER(RTPipeReadBlocking) +# define RTPipeSelectOne RT_MANGLER(RTPipeSelectOne) +# define RTPipeToNative RT_MANGLER(RTPipeToNative) +# define RTPipeWrite RT_MANGLER(RTPipeWrite) +# define RTPipeWriteBlocking RT_MANGLER(RTPipeWriteBlocking) +# define RTPoll RT_MANGLER(RTPoll) +# define RTPollNoResume RT_MANGLER(RTPollNoResume) +# define RTPollSetAdd RT_MANGLER(RTPollSetAdd) +# define RTPollSetCreate RT_MANGLER(RTPollSetCreate) +# define RTPollSetDestroy RT_MANGLER(RTPollSetDestroy) +# define RTPollSetEventsChange RT_MANGLER(RTPollSetEventsChange) +# define RTPollSetGetCount RT_MANGLER(RTPollSetGetCount) +# define RTPollSetQueryHandle RT_MANGLER(RTPollSetQueryHandle) +# define RTPollSetRemove RT_MANGLER(RTPollSetRemove) +# define RTPowerNotificationDeregister RT_MANGLER(RTPowerNotificationDeregister) /* r0drv */ +# define RTPowerNotificationRegister RT_MANGLER(RTPowerNotificationRegister) /* r0drv */ +# define RTPowerSignalEvent RT_MANGLER(RTPowerSignalEvent) /* r0drv */ +# define RTPrintf RT_MANGLER(RTPrintf) +# define RTPrintfV RT_MANGLER(RTPrintfV) +# define RTProcCreate RT_MANGLER(RTProcCreate) +# define RTProcCreateEx RT_MANGLER(RTProcCreateEx) +# define RTProcDaemonize RT_MANGLER(RTProcDaemonize) +# define RTProcDaemonizeUsingFork RT_MANGLER(RTProcDaemonizeUsingFork) +# define RTProcGetAffinityMask RT_MANGLER(RTProcGetAffinityMask) +# define RTProcGetExecutablePath RT_MANGLER(RTProcGetExecutablePath) +# define RTProcGetPriority RT_MANGLER(RTProcGetPriority) +# define RTProcIsRunningByName RT_MANGLER(RTProcIsRunningByName) +# define RTProcQueryParent RT_MANGLER(RTProcQueryParent) +# define RTProcQueryUsername RT_MANGLER(RTProcQueryUsername) +# define RTProcQueryUsernameA RT_MANGLER(RTProcQueryUsernameA) +# define RTProcSelf RT_MANGLER(RTProcSelf) +# define RTProcSetPriority RT_MANGLER(RTProcSetPriority) +# define RTProcShortName RT_MANGLER(RTProcShortName) +# define RTProcTerminate RT_MANGLER(RTProcTerminate) +# define RTProcWait RT_MANGLER(RTProcWait) +# define RTProcWaitNoResume RT_MANGLER(RTProcWaitNoResume) +# define RTR0AssertPanicSystem RT_MANGLER(RTR0AssertPanicSystem) /* r0drv */ +# define RTR0DbgKrnlInfoOpen RT_MANGLER(RTR0DbgKrnlInfoOpen) /* r0drv */ +# define RTR0DbgKrnlInfoQueryMember RT_MANGLER(RTR0DbgKrnlInfoQueryMember) /* r0drv */ +# define RTR0DbgKrnlInfoQuerySize RT_MANGLER(RTR0DbgKrnlInfoQuerySize) /* r0drv */ +# define RTR0DbgKrnlInfoQuerySymbol RT_MANGLER(RTR0DbgKrnlInfoQuerySymbol) /* r0drv */ +# define RTR0DbgKrnlInfoRelease RT_MANGLER(RTR0DbgKrnlInfoRelease) /* r0drv */ +# define RTR0DbgKrnlInfoRetain RT_MANGLER(RTR0DbgKrnlInfoRetain) /* r0drv */ +# define RTR0Init RT_MANGLER(RTR0Init) /* r0drv */ +# define RTR0MemAreKrnlAndUsrDifferent RT_MANGLER(RTR0MemAreKrnlAndUsrDifferent) /* r0drv */ +# define RTR0MemExecDonate RT_MANGLER(RTR0MemExecDonate) /* r0drv */ +# define RTR0MemKernelIsValidAddr RT_MANGLER(RTR0MemKernelIsValidAddr) /* r0drv */ +# define RTR0MemObjAddress RT_MANGLER(RTR0MemObjAddress) /* r0drv */ +# define RTR0MemObjAddressR3 RT_MANGLER(RTR0MemObjAddressR3) /* r0drv */ +# define RTR0MemKernelCopyFrom RT_MANGLER(RTR0MemKernelCopyFrom) /* r0drv */ +# define RTR0MemKernelCopyTo RT_MANGLER(RTR0MemKernelCopyTo) /* r0drv */ +# define RTR0MemObjAllocContTag RT_MANGLER(RTR0MemObjAllocContTag) /* r0drv */ +# define RTR0MemObjAllocLowTag RT_MANGLER(RTR0MemObjAllocLowTag) /* r0drv */ +# define RTR0MemObjAllocPageTag RT_MANGLER(RTR0MemObjAllocPageTag) /* r0drv */ +# define RTR0MemObjAllocPhysExTag RT_MANGLER(RTR0MemObjAllocPhysExTag) /* r0drv */ +# define RTR0MemObjAllocPhysNCTag RT_MANGLER(RTR0MemObjAllocPhysNCTag) /* r0drv */ +# define RTR0MemObjAllocPhysTag RT_MANGLER(RTR0MemObjAllocPhysTag) /* r0drv */ +# define RTR0MemObjEnterPhysTag RT_MANGLER(RTR0MemObjEnterPhysTag) /* r0drv */ +# define RTR0MemObjFree RT_MANGLER(RTR0MemObjFree) /* r0drv */ +# define RTR0MemObjGetPagePhysAddr RT_MANGLER(RTR0MemObjGetPagePhysAddr) /* r0drv */ +# define RTR0MemObjIsMapping RT_MANGLER(RTR0MemObjIsMapping) /* r0drv */ +# define RTR0MemObjLockKernelTag RT_MANGLER(RTR0MemObjLockKernelTag) /* r0drv */ +# define RTR0MemObjLockUserTag RT_MANGLER(RTR0MemObjLockUserTag) /* r0drv */ +# define RTR0MemObjMapKernelExTag RT_MANGLER(RTR0MemObjMapKernelExTag) /* r0drv */ +# define RTR0MemObjMapKernelTag RT_MANGLER(RTR0MemObjMapKernelTag) /* r0drv */ +# define RTR0MemObjMapUserTag RT_MANGLER(RTR0MemObjMapUserTag) /* r0drv */ +# define RTR0MemObjProtect RT_MANGLER(RTR0MemObjProtect) /* r0drv */ +# define RTR0MemObjReserveKernelTag RT_MANGLER(RTR0MemObjReserveKernelTag) /* r0drv */ +# define RTR0MemObjReserveUserTag RT_MANGLER(RTR0MemObjReserveUserTag) /* r0drv */ +# define RTR0MemObjSize RT_MANGLER(RTR0MemObjSize) /* r0drv */ +# define RTR0MemUserCopyFrom RT_MANGLER(RTR0MemUserCopyFrom) /* r0drv */ +# define RTR0MemUserCopyTo RT_MANGLER(RTR0MemUserCopyTo) /* r0drv */ +# define RTR0MemUserIsValidAddr RT_MANGLER(RTR0MemUserIsValidAddr) /* r0drv */ +# define RTR0ProcHandleSelf RT_MANGLER(RTR0ProcHandleSelf) /* r0drv */ +# define RTR0Term RT_MANGLER(RTR0Term) /* r0drv */ +# define RTR0TermForced RT_MANGLER(RTR0TermForced) /* r0drv */ +# define RTR3InitDll RT_MANGLER(RTR3InitDll) +# define RTR3InitExe RT_MANGLER(RTR3InitExe) +# define RTR3InitExeNoArguments RT_MANGLER(RTR3InitExeNoArguments) +# define RTR3InitEx RT_MANGLER(RTR3InitEx) +# define RTR3InitIsInitialized RT_MANGLER(RTR3InitIsInitialized) +# define RTR3InitIsUnobtrusive RT_MANGLER(RTR3InitIsUnobtrusive) +# define rtR3MemAlloc RT_MANGLER(rtR3MemAlloc) +# define rtR3MemFree RT_MANGLER(rtR3MemFree) +# define rtR3MemRealloc RT_MANGLER(rtR3MemRealloc) +# define RTRCInit RT_MANGLER(RTRCInit) +# define RTRCTerm RT_MANGLER(RTRCTerm) +# define RTRandAdvBytes RT_MANGLER(RTRandAdvBytes) +# define RTRandAdvCreateParkMiller RT_MANGLER(RTRandAdvCreateParkMiller) +# define RTRandAdvCreateSystemFaster RT_MANGLER(RTRandAdvCreateSystemFaster) +# define RTRandAdvCreateSystemTruer RT_MANGLER(RTRandAdvCreateSystemTruer) +# define RTRandAdvDestroy RT_MANGLER(RTRandAdvDestroy) +# define RTRandAdvRestoreState RT_MANGLER(RTRandAdvRestoreState) +# define RTRandAdvS32 RT_MANGLER(RTRandAdvS32) +# define RTRandAdvS32Ex RT_MANGLER(RTRandAdvS32Ex) +# define RTRandAdvS64 RT_MANGLER(RTRandAdvS64) +# define RTRandAdvS64Ex RT_MANGLER(RTRandAdvS64Ex) +# define RTRandAdvSaveState RT_MANGLER(RTRandAdvSaveState) +# define RTRandAdvSeed RT_MANGLER(RTRandAdvSeed) +# define RTRandAdvU32 RT_MANGLER(RTRandAdvU32) +# define RTRandAdvU32Ex RT_MANGLER(RTRandAdvU32Ex) +# define RTRandAdvU64 RT_MANGLER(RTRandAdvU64) +# define RTRandAdvU64Ex RT_MANGLER(RTRandAdvU64Ex) +# define RTRandBytes RT_MANGLER(RTRandBytes) +# define RTRandS32 RT_MANGLER(RTRandS32) +# define RTRandS32Ex RT_MANGLER(RTRandS32Ex) +# define RTRandS64 RT_MANGLER(RTRandS64) +# define RTRandS64Ex RT_MANGLER(RTRandS64Ex) +# define RTRandU32 RT_MANGLER(RTRandU32) +# define RTRandU32Ex RT_MANGLER(RTRandU32Ex) +# define RTRandU64 RT_MANGLER(RTRandU64) +# define RTRandU64Ex RT_MANGLER(RTRandU64Ex) +# define RTReqPoolAlloc RT_MANGLER(RTReqPoolAlloc) +# define RTReqPoolCallEx RT_MANGLER(RTReqPoolCallEx) +# define RTReqPoolCallExV RT_MANGLER(RTReqPoolCallExV) +# define RTReqPoolCallWait RT_MANGLER(RTReqPoolCallWait) +# define RTReqPoolCallNoWait RT_MANGLER(RTReqPoolCallNoWait) +# define RTReqPoolCallVoidWait RT_MANGLER(RTReqPoolCallVoidWait) +# define RTReqPoolCallVoidNoWait RT_MANGLER(RTReqPoolCallVoidNoWait) +# define RTReqPoolCreate RT_MANGLER(RTReqPoolCreate) +# define RTReqPoolGetCfgVar RT_MANGLER(RTReqPoolGetCfgVar) +# define RTReqPoolGetStat RT_MANGLER(RTReqPoolGetStat) +# define RTReqPoolRetain RT_MANGLER(RTReqPoolRetain) +# define RTReqPoolRelease RT_MANGLER(RTReqPoolRelease) +# define RTReqPoolSetCfgVar RT_MANGLER(RTReqPoolSetCfgVar) +# define RTReqQueueAlloc RT_MANGLER(RTReqQueueAlloc) +# define RTReqQueueCall RT_MANGLER(RTReqQueueCall) +# define RTReqQueueCallEx RT_MANGLER(RTReqQueueCallEx) +# define RTReqQueueCallV RT_MANGLER(RTReqQueueCallV) +# define RTReqQueueCallVoid RT_MANGLER(RTReqQueueCallVoid) +# define RTReqQueueCreate RT_MANGLER(RTReqQueueCreate) +# define RTReqQueueDestroy RT_MANGLER(RTReqQueueDestroy) +# define RTReqQueueIsBusy RT_MANGLER(RTReqQueueIsBusy) +# define RTReqQueueProcess RT_MANGLER(RTReqQueueProcess) +# define RTReqSubmit RT_MANGLER(RTReqSubmit) +# define RTReqRelease RT_MANGLER(RTReqRelease) +# define RTReqRetain RT_MANGLER(RTReqRetain) +# define RTReqWait RT_MANGLER(RTReqWait) +# define RTReqGetStatus RT_MANGLER(RTReqGetStatus) +# define RTS3BucketsDestroy RT_MANGLER(RTS3BucketsDestroy) +# define RTS3Create RT_MANGLER(RTS3Create) +# define RTS3CreateBucket RT_MANGLER(RTS3CreateBucket) +# define RTS3DeleteBucket RT_MANGLER(RTS3DeleteBucket) +# define RTS3DeleteKey RT_MANGLER(RTS3DeleteKey) +# define RTS3Destroy RT_MANGLER(RTS3Destroy) +# define RTS3GetBucketKeys RT_MANGLER(RTS3GetBucketKeys) +# define RTS3GetBuckets RT_MANGLER(RTS3GetBuckets) +# define RTS3GetKey RT_MANGLER(RTS3GetKey) +# define RTS3KeysDestroy RT_MANGLER(RTS3KeysDestroy) +# define RTS3PutKey RT_MANGLER(RTS3PutKey) +# define RTS3SetProgressCallback RT_MANGLER(RTS3SetProgressCallback) +# define RTSemEventAddSignaller RT_MANGLER(RTSemEventAddSignaller) +# define RTSemEventCreate RT_MANGLER(RTSemEventCreate) +# define RTSemEventCreateEx RT_MANGLER(RTSemEventCreateEx) +# define RTSemEventDestroy RT_MANGLER(RTSemEventDestroy) +# define RTSemEventGetResolution RT_MANGLER(RTSemEventGetResolution) /* r0drv */ +# define RTSemEventMultiAddSignaller RT_MANGLER(RTSemEventMultiAddSignaller) +# define RTSemEventMultiCreate RT_MANGLER(RTSemEventMultiCreate) +# define RTSemEventMultiCreateEx RT_MANGLER(RTSemEventMultiCreateEx) +# define RTSemEventMultiDestroy RT_MANGLER(RTSemEventMultiDestroy) +# define RTSemEventMultiGetResolution RT_MANGLER(RTSemEventMultiGetResolution) /* r0drv */ +# define RTSemEventMultiRemoveSignaller RT_MANGLER(RTSemEventMultiRemoveSignaller) +# define RTSemEventMultiReset RT_MANGLER(RTSemEventMultiReset) +# define RTSemEventMultiSetSignaller RT_MANGLER(RTSemEventMultiSetSignaller) +# define RTSemEventMultiSignal RT_MANGLER(RTSemEventMultiSignal) +# define RTSemEventMultiWait RT_MANGLER(RTSemEventMultiWait) +# define RTSemEventMultiWaitEx RT_MANGLER(RTSemEventMultiWaitEx) +# define RTSemEventMultiWaitEx RT_MANGLER(RTSemEventMultiWaitEx) /* r0drv */ +# define RTSemEventMultiWaitExDebug RT_MANGLER(RTSemEventMultiWaitExDebug) +# define RTSemEventMultiWaitExDebug RT_MANGLER(RTSemEventMultiWaitExDebug) /* r0drv */ +# define RTSemEventMultiWaitNoResume RT_MANGLER(RTSemEventMultiWaitNoResume) +# define RTSemEventRemoveSignaller RT_MANGLER(RTSemEventRemoveSignaller) +# define RTSemEventSetSignaller RT_MANGLER(RTSemEventSetSignaller) +# define RTSemEventSignal RT_MANGLER(RTSemEventSignal) +# define RTSemEventWait RT_MANGLER(RTSemEventWait) +# define RTSemEventWaitEx RT_MANGLER(RTSemEventWaitEx) /* r0drv */ +# define RTSemEventWaitExDebug RT_MANGLER(RTSemEventWaitExDebug) /* r0drv */ +# define RTSemEventWaitNoResume RT_MANGLER(RTSemEventWaitNoResume) +# define RTSemFastMutexCreate RT_MANGLER(RTSemFastMutexCreate) +# define RTSemFastMutexDestroy RT_MANGLER(RTSemFastMutexDestroy) +# define RTSemFastMutexRelease RT_MANGLER(RTSemFastMutexRelease) +# define RTSemFastMutexRequest RT_MANGLER(RTSemFastMutexRequest) +# define RTSemMutexCreate RT_MANGLER(RTSemMutexCreate) +# define RTSemMutexCreateEx RT_MANGLER(RTSemMutexCreateEx) +# define RTSemMutexDestroy RT_MANGLER(RTSemMutexDestroy) +# define RTSemMutexIsOwned RT_MANGLER(RTSemMutexIsOwned) +# define RTSemMutexRelease RT_MANGLER(RTSemMutexRelease) +# define RTSemMutexRequest RT_MANGLER(RTSemMutexRequest) +# define RTSemMutexRequestDebug RT_MANGLER(RTSemMutexRequestDebug) +# define RTSemMutexRequestNoResume RT_MANGLER(RTSemMutexRequestNoResume) +# define RTSemMutexRequestNoResumeDebug RT_MANGLER(RTSemMutexRequestNoResumeDebug) +# define RTSemMutexSetSubClass RT_MANGLER(RTSemMutexSetSubClass) +# define RTSemPing RT_MANGLER(RTSemPing) +# define RTSemPingPongDelete RT_MANGLER(RTSemPingPongDelete) +# define RTSemPingPongInit RT_MANGLER(RTSemPingPongInit) +# define RTSemPingWait RT_MANGLER(RTSemPingWait) +# define RTSemPong RT_MANGLER(RTSemPong) +# define RTSemPongWait RT_MANGLER(RTSemPongWait) +# define RTSemRWCreate RT_MANGLER(RTSemRWCreate) +# define RTSemRWCreateEx RT_MANGLER(RTSemRWCreateEx) +# define RTSemRWDestroy RT_MANGLER(RTSemRWDestroy) +# define RTSemRWGetReadCount RT_MANGLER(RTSemRWGetReadCount) +# define RTSemRWGetWriteRecursion RT_MANGLER(RTSemRWGetWriteRecursion) +# define RTSemRWGetWriterReadRecursion RT_MANGLER(RTSemRWGetWriterReadRecursion) +# define RTSemRWIsReadOwner RT_MANGLER(RTSemRWIsReadOwner) +# define RTSemRWIsWriteOwner RT_MANGLER(RTSemRWIsWriteOwner) +# define RTSemRWReleaseRead RT_MANGLER(RTSemRWReleaseRead) +# define RTSemRWReleaseWrite RT_MANGLER(RTSemRWReleaseWrite) +# define RTSemRWRequestRead RT_MANGLER(RTSemRWRequestRead) +# define RTSemRWRequestReadDebug RT_MANGLER(RTSemRWRequestReadDebug) +# define RTSemRWRequestReadNoResume RT_MANGLER(RTSemRWRequestReadNoResume) +# define RTSemRWRequestReadNoResumeDebug RT_MANGLER(RTSemRWRequestReadNoResumeDebug) +# define RTSemRWRequestWrite RT_MANGLER(RTSemRWRequestWrite) +# define RTSemRWRequestWriteDebug RT_MANGLER(RTSemRWRequestWriteDebug) +# define RTSemRWRequestWriteNoResume RT_MANGLER(RTSemRWRequestWriteNoResume) +# define RTSemRWRequestWriteNoResumeDebug RT_MANGLER(RTSemRWRequestWriteNoResumeDebug) +# define RTSemRWSetSubClass RT_MANGLER(RTSemRWSetSubClass) +# define RTSemSpinMutexCreate RT_MANGLER(RTSemSpinMutexCreate) +# define RTSemSpinMutexDestroy RT_MANGLER(RTSemSpinMutexDestroy) +# define RTSemSpinMutexRelease RT_MANGLER(RTSemSpinMutexRelease) +# define RTSemSpinMutexRequest RT_MANGLER(RTSemSpinMutexRequest) +# define RTSemSpinMutexTryRequest RT_MANGLER(RTSemSpinMutexTryRequest) +# define RTSemXRoadsCreate RT_MANGLER(RTSemXRoadsCreate) +# define RTSemXRoadsDestroy RT_MANGLER(RTSemXRoadsDestroy) +# define RTSemXRoadsEWEnter RT_MANGLER(RTSemXRoadsEWEnter) +# define RTSemXRoadsEWLeave RT_MANGLER(RTSemXRoadsEWLeave) +# define RTSemXRoadsNSEnter RT_MANGLER(RTSemXRoadsNSEnter) +# define RTSemXRoadsNSLeave RT_MANGLER(RTSemXRoadsNSLeave) +# define RTSgBufAdvance RT_MANGLER(RTSgBufAdvance) +# define RTSgBufClone RT_MANGLER(RTSgBufClone) +# define RTSgBufCmp RT_MANGLER(RTSgBufCmp) +# define RTSgBufCmpEx RT_MANGLER(RTSgBufCmpEx) +# define RTSgBufCopy RT_MANGLER(RTSgBufCopy) +# define RTSgBufCopyFromBuf RT_MANGLER(RTSgBufCopyFromBuf) +# define RTSgBufCopyToBuf RT_MANGLER(RTSgBufCopyToBuf) +# define RTSgBufInit RT_MANGLER(RTSgBufInit) +# define RTSgBufIsZero RT_MANGLER(RTSgBufIsZero) +# define RTSgBufReset RT_MANGLER(RTSgBufReset) +# define RTSgBufSegArrayCreate RT_MANGLER(RTSgBufSegArrayCreate) +# define RTSgBufSet RT_MANGLER(RTSgBufSet) +# define RTSgBufGetNextSegment RT_MANGLER(RTSgBufGetNextSegment) +# define RTSha1 RT_MANGLER(RTSha1) +# define RTSha1Check RT_MANGLER(RTSha1Check) +# define RTSha1Digest RT_MANGLER(RTSha1Digest) +# define RTSha1DigestFromFile RT_MANGLER(RTSha1DigestFromFile) +# define RTSha1Final RT_MANGLER(RTSha1Final) +# define RTSha1FromString RT_MANGLER(RTSha1FromString) +# define RTSha1Init RT_MANGLER(RTSha1Init) +# define RTSha1ToString RT_MANGLER(RTSha1ToString) +# define RTSha1Update RT_MANGLER(RTSha1Update) +# define RTSha224 RT_MANGLER(RTSha224) +# define RTSha224Check RT_MANGLER(RTSha224Check) +# define RTSha224Final RT_MANGLER(RTSha224Final) +# define RTSha224FromString RT_MANGLER(RTSha224FromString) +# define RTSha224Init RT_MANGLER(RTSha224Init) +# define RTSha224ToString RT_MANGLER(RTSha224ToString) +# define RTSha224Update RT_MANGLER(RTSha224Update) +# define RTSha224Digest RT_MANGLER(RTSha224Digest) +# define RTSha224DigestFromFile RT_MANGLER(RTSha224DigestFromFile) +# define RTSha256 RT_MANGLER(RTSha256) +# define RTSha256Check RT_MANGLER(RTSha256Check) +# define RTSha256Final RT_MANGLER(RTSha256Final) +# define RTSha256FromString RT_MANGLER(RTSha256FromString) +# define RTSha256Init RT_MANGLER(RTSha256Init) +# define RTSha256ToString RT_MANGLER(RTSha256ToString) +# define RTSha256Update RT_MANGLER(RTSha256Update) +# define RTSha256Digest RT_MANGLER(RTSha256Digest) +# define RTSha256DigestFromFile RT_MANGLER(RTSha256DigestFromFile) +# define RTSha384 RT_MANGLER(RTSha384) +# define RTSha384Check RT_MANGLER(RTSha384Check) +# define RTSha384Final RT_MANGLER(RTSha384Final) +# define RTSha384FromString RT_MANGLER(RTSha384FromString) +# define RTSha384Init RT_MANGLER(RTSha384Init) +# define RTSha384ToString RT_MANGLER(RTSha384ToString) +# define RTSha384Update RT_MANGLER(RTSha384Update) +# define RTSha512 RT_MANGLER(RTSha512) +# define RTSha512Check RT_MANGLER(RTSha512Check) +# define RTSha512Final RT_MANGLER(RTSha512Final) +# define RTSha512FromString RT_MANGLER(RTSha512FromString) +# define RTSha512Init RT_MANGLER(RTSha512Init) +# define RTSha512ToString RT_MANGLER(RTSha512ToString) +# define RTSha512Update RT_MANGLER(RTSha512Update) +# define RTSha512t224 RT_MANGLER(RTSha512t224) +# define RTSha512t224Check RT_MANGLER(RTSha512t224Check) +# define RTSha512t224Final RT_MANGLER(RTSha512t224Final) +# define RTSha512t224FromString RT_MANGLER(RTSha512t224FromString) +# define RTSha512t224Init RT_MANGLER(RTSha512t224Init) +# define RTSha512t224ToString RT_MANGLER(RTSha512t224ToString) +# define RTSha512t224Update RT_MANGLER(RTSha512t224Update) +# define RTSha512t256 RT_MANGLER(RTSha512t256) +# define RTSha512t256Check RT_MANGLER(RTSha512t256Check) +# define RTSha512t256Final RT_MANGLER(RTSha512t256Final) +# define RTSha512t256FromString RT_MANGLER(RTSha512t256FromString) +# define RTSha512t256Init RT_MANGLER(RTSha512t256Init) +# define RTSha512t256ToString RT_MANGLER(RTSha512t256ToString) +# define RTSha512t256Update RT_MANGLER(RTSha512t256Update) +# define RTSocketClose RT_MANGLER(RTSocketClose) +# define RTSocketFromNative RT_MANGLER(RTSocketFromNative) +# define RTSocketQueryAddressStr RT_MANGLER(RTSocketQueryAddressStr) +# define RTSocketGetLocalAddress RT_MANGLER(RTSocketGetLocalAddress) +# define RTSocketGetPeerAddress RT_MANGLER(RTSocketGetPeerAddress) +# define RTSocketParseInetAddress RT_MANGLER(RTSocketParseInetAddress) +# define RTSocketRead RT_MANGLER(RTSocketRead) +# define RTSocketReadFrom RT_MANGLER(RTSocketReadFrom) +# define RTSocketReadNB RT_MANGLER(RTSocketReadNB) +# define RTSocketRelease RT_MANGLER(RTSocketRelease) +# define RTSocketRetain RT_MANGLER(RTSocketRetain) +# define RTSocketSelectOne RT_MANGLER(RTSocketSelectOne) +# define RTSocketSelectOneEx RT_MANGLER(RTSocketSelectOneEx) +# define RTSocketSetInheritance RT_MANGLER(RTSocketSetInheritance) +# define RTSocketSgWrite RT_MANGLER(RTSocketSgWrite) +# define RTSocketSgWriteL RT_MANGLER(RTSocketSgWriteL) +# define RTSocketSgWriteLNB RT_MANGLER(RTSocketSgWriteLNB) +# define RTSocketSgWriteLV RT_MANGLER(RTSocketSgWriteLV) +# define RTSocketSgWriteLVNB RT_MANGLER(RTSocketSgWriteLVNB) +# define RTSocketSgWriteNB RT_MANGLER(RTSocketSgWriteNB) +# define RTSocketShutdown RT_MANGLER(RTSocketShutdown) +# define RTSocketToNative RT_MANGLER(RTSocketToNative) +# define RTSocketWrite RT_MANGLER(RTSocketWrite) +# define RTSocketWriteNB RT_MANGLER(RTSocketWriteNB) +# define RTSocketWriteTo RT_MANGLER(RTSocketWriteTo) +# define RTSocketWriteToNB RT_MANGLER(RTSocketWriteToNB) +# define RTSortApvIsSorted RT_MANGLER(RTSortApvIsSorted) +# define RTSortApvShell RT_MANGLER(RTSortApvShell) +# define RTSortIsSorted RT_MANGLER(RTSortIsSorted) +# define RTSortShell RT_MANGLER(RTSortShell) +# define RTSpinlockAcquire RT_MANGLER(RTSpinlockAcquire) +# define RTSpinlockAcquireNoInts RT_MANGLER(RTSpinlockAcquireNoInts) +# define RTSpinlockCreate RT_MANGLER(RTSpinlockCreate) +# define RTSpinlockDestroy RT_MANGLER(RTSpinlockDestroy) +# define RTSpinlockRelease RT_MANGLER(RTSpinlockRelease) +# define RTStrAAppendExNVTag RT_MANGLER(RTStrAAppendExNVTag) +# define RTStrAAppendNTag RT_MANGLER(RTStrAAppendNTag) +# define RTStrAAppendTag RT_MANGLER(RTStrAAppendTag) +# define RTStrAllocExTag RT_MANGLER(RTStrAllocExTag) +# define RTStrAllocTag RT_MANGLER(RTStrAllocTag) +# define RTStrAPrintf2VTag RT_MANGLER(RTStrAPrintf2VTag) +# define RTStrAPrintfVTag RT_MANGLER(RTStrAPrintfVTag) +# define RTStrATruncateTag RT_MANGLER(RTStrATruncateTag) +# define RTStrCacheCreate RT_MANGLER(RTStrCacheCreate) +# define RTStrCacheDestroy RT_MANGLER(RTStrCacheDestroy) +# define RTStrCacheEnter RT_MANGLER(RTStrCacheEnter) +# define RTStrCacheEnterLower RT_MANGLER(RTStrCacheEnterLower) +# define RTStrCacheEnterLowerN RT_MANGLER(RTStrCacheEnterLowerN) +# define RTStrCacheEnterN RT_MANGLER(RTStrCacheEnterN) +# define RTStrCacheGetStats RT_MANGLER(RTStrCacheGetStats) +# define RTStrCacheIsRealImpl RT_MANGLER(RTStrCacheIsRealImpl) +# define RTStrCacheLength RT_MANGLER(RTStrCacheLength) +# define RTStrCacheRelease RT_MANGLER(RTStrCacheRelease) +# define RTStrCacheRetain RT_MANGLER(RTStrCacheRetain) +# define RTStrCalcLatin1Len RT_MANGLER(RTStrCalcLatin1Len) +# define RTStrCalcLatin1LenEx RT_MANGLER(RTStrCalcLatin1LenEx) +# define RTStrCalcUtf16Len RT_MANGLER(RTStrCalcUtf16Len) +# define RTStrCalcUtf16LenEx RT_MANGLER(RTStrCalcUtf16LenEx) +# define RTStrCat RT_MANGLER(RTStrCat) +# define RTStrCatEx RT_MANGLER(RTStrCatEx) +# define RTStrCatP RT_MANGLER(RTStrCatP) +# define RTStrCatPEx RT_MANGLER(RTStrCatPEx) +# define RTStrCmp RT_MANGLER(RTStrCmp) +# define RTStrConvertHexBytes RT_MANGLER(RTStrConvertHexBytes) +# define RTStrCopy RT_MANGLER(RTStrCopy) +# define RTStrCopyEx RT_MANGLER(RTStrCopyEx) +# define RTStrCopyP RT_MANGLER(RTStrCopyP) +# define RTStrCopyPEx RT_MANGLER(RTStrCopyPEx) +# define RTStrCurrentCPToUtf8Tag RT_MANGLER(RTStrCurrentCPToUtf8Tag) +# define RTStrDupExTag RT_MANGLER(RTStrDupExTag) +# define RTStrDupNTag RT_MANGLER(RTStrDupNTag) +# define RTStrDupTag RT_MANGLER(RTStrDupTag) +# define RTStrFormat RT_MANGLER(RTStrFormat) +# define RTStrFormatNumber RT_MANGLER(RTStrFormatNumber) +# define RTStrFormatR80 RT_MANGLER(RTStrFormatR80) +# define RTStrFormatR80u2 RT_MANGLER(RTStrFormatR80u2) +# define RTStrFormatTypeDeregister RT_MANGLER(RTStrFormatTypeDeregister) +# define RTStrFormatTypeRegister RT_MANGLER(RTStrFormatTypeRegister) +# define RTStrFormatTypeSetUser RT_MANGLER(RTStrFormatTypeSetUser) +# define RTStrFormatU128 RT_MANGLER(RTStrFormatU128) +# define RTStrFormatU256 RT_MANGLER(RTStrFormatU256) +# define RTStrFormatU512 RT_MANGLER(RTStrFormatU512) +# define RTStrFormatU16 RT_MANGLER(RTStrFormatU16) +# define RTStrFormatU32 RT_MANGLER(RTStrFormatU32) +# define RTStrFormatU64 RT_MANGLER(RTStrFormatU64) +# define RTStrFormatU8 RT_MANGLER(RTStrFormatU8) +# define RTStrFormatV RT_MANGLER(RTStrFormatV) +# define RTStrFree RT_MANGLER(RTStrFree) +# define RTStrGetCpExInternal RT_MANGLER(RTStrGetCpExInternal) +# define RTStrGetCpInternal RT_MANGLER(RTStrGetCpInternal) +# define RTStrGetCpNExInternal RT_MANGLER(RTStrGetCpNExInternal) +# define RTStrHash1 RT_MANGLER(RTStrHash1) +# define RTStrHash1ExN RT_MANGLER(RTStrHash1ExN) +# define RTStrHash1ExNV RT_MANGLER(RTStrHash1ExNV) +# define RTStrHash1N RT_MANGLER(RTStrHash1N) +# define RTStrICmp RT_MANGLER(RTStrICmp) +# define RTStrICmpAscii RT_MANGLER(RTStrICmpAscii) +# define RTStrIStartsWith RT_MANGLER(RTStrIStartsWith) +# define RTStrIStr RT_MANGLER(RTStrIStr) +# define RTStrIsCaseFoldable RT_MANGLER(RTStrIsCaseFoldable) +# define RTStrIsLowerCased RT_MANGLER(RTStrIsLowerCased) +# define RTStrIsUpperCased RT_MANGLER(RTStrIsUpperCased) +# define RTStrIsValidEncoding RT_MANGLER(RTStrIsValidEncoding) +# define RTStrmClearError RT_MANGLER(RTStrmClearError) +# define RTStrmClose RT_MANGLER(RTStrmClose) +# define RTStrmError RT_MANGLER(RTStrmError) +# define RTStrmFlush RT_MANGLER(RTStrmFlush) +# define RTStrmGetCh RT_MANGLER(RTStrmGetCh) +# define RTStrmGetLine RT_MANGLER(RTStrmGetLine) +# define RTStrmOpen RT_MANGLER(RTStrmOpen) +# define RTStrmOpenF RT_MANGLER(RTStrmOpenF) +# define RTStrmOpenFV RT_MANGLER(RTStrmOpenFV) +# define RTStrmPrintf RT_MANGLER(RTStrmPrintf) +# define RTStrmPrintfV RT_MANGLER(RTStrmPrintfV) +# define RTStrmDumpPrintfV RT_MANGLER(RTStrmDumpPrintfV) +# define RTStrmPutCh RT_MANGLER(RTStrmPutCh) +# define RTStrmPutStr RT_MANGLER(RTStrmPutStr) +# define RTStrmReadEx RT_MANGLER(RTStrmReadEx) +# define RTStrmRewind RT_MANGLER(RTStrmRewind) +# define RTStrmSetMode RT_MANGLER(RTStrmSetMode) +# define RTStrmWriteEx RT_MANGLER(RTStrmWriteEx) +# define RTStrmIsTerminal RT_MANGLER(RTStrmIsTerminal) +# define RTStrmInputGetEchoChars RT_MANGLER(RTStrmInputGetEchoChars) +# define RTStrmInputSetEchoChars RT_MANGLER(RTStrmInputSetEchoChars) +# define RTStrmQueryTerminalWidth RT_MANGLER(RTStrmQueryTerminalWidth) +# define RTStrNCmp RT_MANGLER(RTStrNCmp) +# define RTStrNICmp RT_MANGLER(RTStrNICmp) +# define RTStrNLen RT_MANGLER(RTStrNLen) +# define RTStrNLenEx RT_MANGLER(RTStrNLenEx) +# define RTStrPrevCp RT_MANGLER(RTStrPrevCp) +# define RTStrPrintf RT_MANGLER(RTStrPrintf) +# define RTStrPrintfEx RT_MANGLER(RTStrPrintfEx) +# define RTStrPrintfExV RT_MANGLER(RTStrPrintfExV) +# define RTStrPrintfV RT_MANGLER(RTStrPrintfV) +# define RTStrPrintf2 RT_MANGLER(RTStrPrintf2) +# define RTStrPrintf2Ex RT_MANGLER(RTStrPrintf2Ex) +# define RTStrPrintf2ExV RT_MANGLER(RTStrPrintf2ExV) +# define RTStrPrintf2V RT_MANGLER(RTStrPrintf2V) +# define RTStrPrintHexBytes RT_MANGLER(RTStrPrintHexBytes) +# define RTStrPurgeEncoding RT_MANGLER(RTStrPurgeEncoding) +# define RTStrPurgeComplementSet RT_MANGLER(RTStrPurgeComplementSet) +# define RTStrPutCpInternal RT_MANGLER(RTStrPutCpInternal) +# define RTStrReallocTag RT_MANGLER(RTStrReallocTag) +# define RTStrSimplePatternMatch RT_MANGLER(RTStrSimplePatternMatch) +# define RTStrSimplePatternMultiMatch RT_MANGLER(RTStrSimplePatternMultiMatch) +# define RTStrSimplePatternNMatch RT_MANGLER(RTStrSimplePatternNMatch) +# define RTStrSpaceDestroy RT_MANGLER(RTStrSpaceDestroy) +# define RTStrSpaceEnumerate RT_MANGLER(RTStrSpaceEnumerate) +# define RTStrSpaceGet RT_MANGLER(RTStrSpaceGet) +# define RTStrSpaceGetN RT_MANGLER(RTStrSpaceGetN) +# define RTStrSpaceInsert RT_MANGLER(RTStrSpaceInsert) +# define RTStrSpaceRemove RT_MANGLER(RTStrSpaceRemove) +# define RTStrStartsWith RT_MANGLER(RTStrStartsWith) +# define RTStrStr RT_MANGLER(RTStrStr) +# define RTStrStrip RT_MANGLER(RTStrStrip) +# define RTStrStripL RT_MANGLER(RTStrStripL) +# define RTStrStripR RT_MANGLER(RTStrStripR) +# define RTStrToInt16 RT_MANGLER(RTStrToInt16) +# define RTStrToInt16Ex RT_MANGLER(RTStrToInt16Ex) +# define RTStrToInt16Full RT_MANGLER(RTStrToInt16Full) +# define RTStrToInt32 RT_MANGLER(RTStrToInt32) +# define RTStrToInt32Ex RT_MANGLER(RTStrToInt32Ex) +# define RTStrToInt32Full RT_MANGLER(RTStrToInt32Full) +# define RTStrToInt64 RT_MANGLER(RTStrToInt64) +# define RTStrToInt64Ex RT_MANGLER(RTStrToInt64Ex) +# define RTStrToInt64Full RT_MANGLER(RTStrToInt64Full) +# define RTStrToInt8 RT_MANGLER(RTStrToInt8) +# define RTStrToInt8Ex RT_MANGLER(RTStrToInt8Ex) +# define RTStrToInt8Full RT_MANGLER(RTStrToInt8Full) +# define RTStrToLatin1ExTag RT_MANGLER(RTStrToLatin1ExTag) +# define RTStrToLatin1Tag RT_MANGLER(RTStrToLatin1Tag) +# define RTStrToLower RT_MANGLER(RTStrToLower) +# define RTStrToUInt16 RT_MANGLER(RTStrToUInt16) +# define RTStrToUInt16Ex RT_MANGLER(RTStrToUInt16Ex) +# define RTStrToUInt16Full RT_MANGLER(RTStrToUInt16Full) +# define RTStrToUInt32 RT_MANGLER(RTStrToUInt32) +# define RTStrToUInt32Ex RT_MANGLER(RTStrToUInt32Ex) +# define RTStrToUInt32Full RT_MANGLER(RTStrToUInt32Full) +# define RTStrToUInt64 RT_MANGLER(RTStrToUInt64) +# define RTStrToUInt64Ex RT_MANGLER(RTStrToUInt64Ex) +# define RTStrToUInt64Full RT_MANGLER(RTStrToUInt64Full) +# define RTStrToUInt8 RT_MANGLER(RTStrToUInt8) +# define RTStrToUInt8Ex RT_MANGLER(RTStrToUInt8Ex) +# define RTStrToUInt8Full RT_MANGLER(RTStrToUInt8Full) +# define RTStrToUni RT_MANGLER(RTStrToUni) +# define RTStrToUniEx RT_MANGLER(RTStrToUniEx) +# define RTStrToUpper RT_MANGLER(RTStrToUpper) +# define RTStrToUtf16BigExTag RT_MANGLER(RTStrToUtf16BigExTag) +# define RTStrToUtf16BigTag RT_MANGLER(RTStrToUtf16BigTag) +# define RTStrToUtf16ExTag RT_MANGLER(RTStrToUtf16ExTag) +# define RTStrToUtf16Tag RT_MANGLER(RTStrToUtf16Tag) +# define RTStrUniLen RT_MANGLER(RTStrUniLen) +# define RTStrUniLenEx RT_MANGLER(RTStrUniLenEx) +# define RTStrUtf8ToCurrentCPTag RT_MANGLER(RTStrUtf8ToCurrentCPTag) +# define RTStrValidateEncoding RT_MANGLER(RTStrValidateEncoding) +# define RTStrValidateEncodingEx RT_MANGLER(RTStrValidateEncodingEx) +# define RTStrVersionCompare RT_MANGLER(RTStrVersionCompare) +# define RTSymlinkCreate RT_MANGLER(RTSymlinkCreate) +# define RTSymlinkDelete RT_MANGLER(RTSymlinkDelete) +# define RTSymlinkExists RT_MANGLER(RTSymlinkExists) +# define RTSymlinkIsDangling RT_MANGLER(RTSymlinkIsDangling) +# define RTSymlinkRead RT_MANGLER(RTSymlinkRead) +# define RTSymlinkReadA RT_MANGLER(RTSymlinkReadA) +# define RTSystemIsInsideVM RT_MANGLER(RTSystemIsInsideVM) +# define RTSystemQueryAvailableRam RT_MANGLER(RTSystemQueryAvailableRam) +# define RTSystemQueryDmiString RT_MANGLER(RTSystemQueryDmiString) +# define RTSystemQueryOSInfo RT_MANGLER(RTSystemQueryOSInfo) +# define RTSystemQueryTotalRam RT_MANGLER(RTSystemQueryTotalRam) +# define RTSystemShutdown RT_MANGLER(RTSystemShutdown) +# define RTTarClose RT_MANGLER(RTTarClose) +# define RTTarFileClose RT_MANGLER(RTTarFileClose) +# define RTTarFileGetSize RT_MANGLER(RTTarFileGetSize) +# define RTTarFileOpen RT_MANGLER(RTTarFileOpen) +# define RTTarFileReadAt RT_MANGLER(RTTarFileReadAt) +# define RTTarFileSetSize RT_MANGLER(RTTarFileSetSize) +# define RTTarFileWriteAt RT_MANGLER(RTTarFileWriteAt) +# define RTTarOpen RT_MANGLER(RTTarOpen) +# define RTTcpClientCancelConnect RT_MANGLER(RTTcpClientCancelConnect) +# define RTTcpClientClose RT_MANGLER(RTTcpClientClose) +# define RTTcpClientCloseEx RT_MANGLER(RTTcpClientCloseEx) +# define RTTcpClientConnect RT_MANGLER(RTTcpClientConnect) +# define RTTcpClientConnectEx RT_MANGLER(RTTcpClientConnectEx) +# define RTTcpFlush RT_MANGLER(RTTcpFlush) +# define RTTcpGetLocalAddress RT_MANGLER(RTTcpGetLocalAddress) +# define RTTcpGetPeerAddress RT_MANGLER(RTTcpGetPeerAddress) +# define RTTcpRead RT_MANGLER(RTTcpRead) +# define RTTcpReadNB RT_MANGLER(RTTcpReadNB) +# define RTTcpSelectOne RT_MANGLER(RTTcpSelectOne) +# define RTTcpSelectOneEx RT_MANGLER(RTTcpSelectOneEx) +# define RTTcpServerCreate RT_MANGLER(RTTcpServerCreate) +# define RTTcpServerCreateEx RT_MANGLER(RTTcpServerCreateEx) +# define RTTcpServerDestroy RT_MANGLER(RTTcpServerDestroy) +# define RTTcpServerDisconnectClient RT_MANGLER(RTTcpServerDisconnectClient) +# define RTTcpServerDisconnectClient2 RT_MANGLER(RTTcpServerDisconnectClient2) +# define RTTcpServerListen RT_MANGLER(RTTcpServerListen) +# define RTTcpServerListen2 RT_MANGLER(RTTcpServerListen2) +# define RTTcpServerShutdown RT_MANGLER(RTTcpServerShutdown) +# define RTTcpSetSendCoalescing RT_MANGLER(RTTcpSetSendCoalescing) +# define RTTcpSgWrite RT_MANGLER(RTTcpSgWrite) +# define RTTcpSgWriteL RT_MANGLER(RTTcpSgWriteL) +# define RTTcpSgWriteLNB RT_MANGLER(RTTcpSgWriteLNB) +# define RTTcpSgWriteLV RT_MANGLER(RTTcpSgWriteLV) +# define RTTcpSgWriteLVNB RT_MANGLER(RTTcpSgWriteLVNB) +# define RTTcpSgWriteNB RT_MANGLER(RTTcpSgWriteNB) +# define RTTcpWrite RT_MANGLER(RTTcpWrite) +# define RTTcpWriteNB RT_MANGLER(RTTcpWriteNB) +# define RTTermDeregisterCallback RT_MANGLER(RTTermDeregisterCallback) +# define RTTermRegisterCallback RT_MANGLER(RTTermRegisterCallback) +# define RTTermRunCallbacks RT_MANGLER(RTTermRunCallbacks) +# define RTTestBanner RT_MANGLER(RTTestBanner) +# define RTTestChangeName RT_MANGLER(RTTestChangeName) +# define RTTestCreate RT_MANGLER(RTTestCreate) +# define RTTestCreateChild RT_MANGLER(RTTestCreateChild) +# define RTTestCreateEx RT_MANGLER(RTTestCreateEx) +# define RTTestDestroy RT_MANGLER(RTTestDestroy) +# define RTTestDisableAssertions RT_MANGLER(RTTestDisableAssertions) +# define RTTestErrorCount RT_MANGLER(RTTestErrorCount) +# define RTTestErrorInc RT_MANGLER(RTTestErrorInc) +# define RTTestFailed RT_MANGLER(RTTestFailed) +# define RTTestFailedV RT_MANGLER(RTTestFailedV) +# define RTTestFailureDetails RT_MANGLER(RTTestFailureDetails) +# define RTTestFailureDetailsV RT_MANGLER(RTTestFailureDetailsV) +# define RTTestGuardedAlloc RT_MANGLER(RTTestGuardedAlloc) +# define RTTestGuardedAllocHead RT_MANGLER(RTTestGuardedAllocHead) +# define RTTestGuardedAllocTail RT_MANGLER(RTTestGuardedAllocTail) +# define RTTestGuardedFree RT_MANGLER(RTTestGuardedFree) +# define RTTestIDisableAssertions RT_MANGLER(RTTestIDisableAssertions) +# define RTTestIErrorCount RT_MANGLER(RTTestIErrorCount) +# define RTTestIErrorInc RT_MANGLER(RTTestIErrorInc) +# define RTTestIFailed RT_MANGLER(RTTestIFailed) +# define RTTestIFailedRc RT_MANGLER(RTTestIFailedRc) +# define RTTestIFailedRcV RT_MANGLER(RTTestIFailedRcV) +# define RTTestIFailedV RT_MANGLER(RTTestIFailedV) +# define RTTestIFailureDetails RT_MANGLER(RTTestIFailureDetails) +# define RTTestIFailureDetailsV RT_MANGLER(RTTestIFailureDetailsV) +# define RTTestInitAndCreate RT_MANGLER(RTTestInitAndCreate) +# define RTTestInitExAndCreate RT_MANGLER(RTTestInitExAndCreate) +# define RTTestIPassed RT_MANGLER(RTTestIPassed) +# define RTTestIPassedV RT_MANGLER(RTTestIPassedV) +# define RTTestIPrintf RT_MANGLER(RTTestIPrintf) +# define RTTestIPrintfV RT_MANGLER(RTTestIPrintfV) +# define RTTestIRestoreAssertions RT_MANGLER(RTTestIRestoreAssertions) +# define RTTestISub RT_MANGLER(RTTestISub) +# define RTTestISubDone RT_MANGLER(RTTestISubDone) +# define RTTestISubF RT_MANGLER(RTTestISubF) +# define RTTestISubV RT_MANGLER(RTTestISubV) +# define RTTestIValue RT_MANGLER(RTTestIValue) +# define RTTestIValueF RT_MANGLER(RTTestIValueF) +# define RTTestIValueV RT_MANGLER(RTTestIValueV) +# define RTTestPassed RT_MANGLER(RTTestPassed) +# define RTTestPassedV RT_MANGLER(RTTestPassedV) +# define RTTestPrintf RT_MANGLER(RTTestPrintf) +# define RTTestPrintfNl RT_MANGLER(RTTestPrintfNl) +# define RTTestPrintfNlV RT_MANGLER(RTTestPrintfNlV) +# define RTTestPrintfV RT_MANGLER(RTTestPrintfV) +# define RTTestRestoreAssertions RT_MANGLER(RTTestRestoreAssertions) +# define RTTestSetDefault RT_MANGLER(RTTestSetDefault) +# define RTTestSkipAndDestroy RT_MANGLER(RTTestSkipAndDestroy) +# define RTTestSkipAndDestroyV RT_MANGLER(RTTestSkipAndDestroyV) +# define RTTestSkipped RT_MANGLER(RTTestSkipped) +# define RTTestSkippedV RT_MANGLER(RTTestSkippedV) +# define RTTestSub RT_MANGLER(RTTestSub) +# define RTTestSubDone RT_MANGLER(RTTestSubDone) +# define RTTestSubErrorCount RT_MANGLER(RTTestSubErrorCount) +# define RTTestSubF RT_MANGLER(RTTestSubF) +# define RTTestSubV RT_MANGLER(RTTestSubV) +# define RTTestSummaryAndDestroy RT_MANGLER(RTTestSummaryAndDestroy) +# define RTTestValue RT_MANGLER(RTTestValue) +# define RTTestValueF RT_MANGLER(RTTestValueF) +# define RTTestValueV RT_MANGLER(RTTestValueV) +# define RTThreadAdopt RT_MANGLER(RTThreadAdopt) +# define RTThreadBlocking RT_MANGLER(RTThreadBlocking) +# define RTThreadCreate RT_MANGLER(RTThreadCreate) +# define RTThreadCreateF RT_MANGLER(RTThreadCreateF) +# define RTThreadCreateV RT_MANGLER(RTThreadCreateV) +# define RTThreadCtxHookIsEnabled RT_MANGLER(RTThreadCtxHookIsEnabled) /* r0drv */ +# define RTThreadCtxHookCreate RT_MANGLER(RTThreadCtxHookCreate) /* r0drv */ +# define RTThreadCtxHookDestroy RT_MANGLER(RTThreadCtxHookDestroy) /* r0drv */ +# define RTThreadCtxHookDisable RT_MANGLER(RTThreadCtxHookDisable) /* r0drv */ +# define RTThreadCtxHookEnable RT_MANGLER(RTThreadCtxHookEnable) /* r0drv */ +# define RTThreadFromNative RT_MANGLER(RTThreadFromNative) +# define RTThreadGetAffinity RT_MANGLER(RTThreadGetAffinity) +# define RTThreadGetExecutionTimeMilli RT_MANGLER(RTThreadGetExecutionTimeMilli) +# define RTThreadGetName RT_MANGLER(RTThreadGetName) +# define RTThreadGetNative RT_MANGLER(RTThreadGetNative) +# define RTThreadGetNativeState RT_MANGLER(RTThreadGetNativeState) +# define RTThreadGetReallySleeping RT_MANGLER(RTThreadGetReallySleeping) +# define RTThreadGetState RT_MANGLER(RTThreadGetState) +# define RTThreadGetType RT_MANGLER(RTThreadGetType) +# define RTThreadIsInInterrupt RT_MANGLER(RTThreadIsInInterrupt) /* r0drv */ +# define RTThreadIsInitialized RT_MANGLER(RTThreadIsInitialized) +# define RTThreadIsMain RT_MANGLER(RTThreadIsMain) +# define RTThreadIsSelfAlive RT_MANGLER(RTThreadIsSelfAlive) +# define RTThreadIsSelfKnown RT_MANGLER(RTThreadIsSelfKnown) +# define RTThreadNativeSelf RT_MANGLER(RTThreadNativeSelf) +# define RTThreadPoke RT_MANGLER(RTThreadPoke) /* not-win not-os2 */ +# define RTThreadPreemptDisable RT_MANGLER(RTThreadPreemptDisable) /* r0drv */ +# define RTThreadPreemptIsEnabled RT_MANGLER(RTThreadPreemptIsEnabled) /* r0drv */ +# define RTThreadPreemptIsPending RT_MANGLER(RTThreadPreemptIsPending) /* r0drv */ +# define RTThreadPreemptIsPendingTrusty RT_MANGLER(RTThreadPreemptIsPendingTrusty) /* r0drv */ +# define RTThreadPreemptIsPossible RT_MANGLER(RTThreadPreemptIsPossible) /* r0drv */ +# define RTThreadPreemptRestore RT_MANGLER(RTThreadPreemptRestore) /* r0drv */ +# define RTThreadSelf RT_MANGLER(RTThreadSelf) +# define RTThreadSelfAutoAdopt RT_MANGLER(RTThreadSelfAutoAdopt) +# define RTThreadSelfName RT_MANGLER(RTThreadSelfName) +# define RTThreadSetAffinity RT_MANGLER(RTThreadSetAffinity) +# define RTThreadSetAffinityToCpu RT_MANGLER(RTThreadSetAffinityToCpu) +# define RTThreadSetName RT_MANGLER(RTThreadSetName) +# define RTThreadSetType RT_MANGLER(RTThreadSetType) +# define RTThreadSleep RT_MANGLER(RTThreadSleep) +# define RTThreadSleepNoLog RT_MANGLER(RTThreadSleepNoLog) +# define RTThreadStateName RT_MANGLER(RTThreadStateName) +# define RTThreadUnblocked RT_MANGLER(RTThreadUnblocked) +# define RTThreadUserReset RT_MANGLER(RTThreadUserReset) +# define RTThreadUserSignal RT_MANGLER(RTThreadUserSignal) +# define RTThreadUserWait RT_MANGLER(RTThreadUserWait) +# define RTThreadUserWaitNoResume RT_MANGLER(RTThreadUserWaitNoResume) +# define RTThreadWait RT_MANGLER(RTThreadWait) +# define RTThreadWaitNoResume RT_MANGLER(RTThreadWaitNoResume) +# define RTThreadYield RT_MANGLER(RTThreadYield) +# define RTTimeDbgBad RT_MANGLER(RTTimeDbgBad) +# define RTTimeDbgExpired RT_MANGLER(RTTimeDbgExpired) +# define RTTimeDbgRaces RT_MANGLER(RTTimeDbgRaces) +# define RTTimeDbgSteps RT_MANGLER(RTTimeDbgSteps) +# define RTTimeExplode RT_MANGLER(RTTimeExplode) +# define RTTimeImplode RT_MANGLER(RTTimeImplode) +# define RTTimeIsLeapYear RT_MANGLER(RTTimeIsLeapYear) +# define RTTimeLocalDeltaNano RT_MANGLER(RTTimeLocalDeltaNano) +# define RTTimeLocalExplode RT_MANGLER(RTTimeLocalExplode) +# define RTTimeLocalNow RT_MANGLER(RTTimeLocalNow) +# define RTTimeMilliTS RT_MANGLER(RTTimeMilliTS) +# define RTTimeNanoTS RT_MANGLER(RTTimeNanoTS) +# define RTTimeNanoTSLegacyAsync RT_MANGLER(RTTimeNanoTSLegacyAsync) +# define RTTimeNanoTSLegacyAsync_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsync_EndProc) +# define RTTimeNanoTSLegacyAsyncUseApicId RT_MANGLER(RTTimeNanoTSLegacyAsyncUseApicId) +# define RTTimeNanoTSLegacyAsyncUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseApicId_EndProc) +# define RTTimeNanoTSLegacyAsyncUseRdtscp RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscp) +# define RTTimeNanoTSLegacyAsyncUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscp_EndProc) +# define RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl) +# define RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl_EndProc) +# define RTTimeNanoTSLegacyAsyncUseIdtrLim RT_MANGLER(RTTimeNanoTSLegacyAsyncUseIdtrLim) +# define RTTimeNanoTSLegacyAsyncUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseIdtrLim_EndProc) +# define RTTimeNanoTSLegacySyncInvarNoDelta RT_MANGLER(RTTimeNanoTSLegacySyncInvarNoDelta) +# define RTTimeNanoTSLegacySyncInvarNoDelta_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarNoDelta_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDelta RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDelta) +# define RTTimeNanoTSLegacySyncInvarWithDelta_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDelta_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim_EndProc) +# define RTTimeNanoTSLFenceAsync RT_MANGLER(RTTimeNanoTSLFenceAsync) +# define RTTimeNanoTSLFenceAsync_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsync_EndProc) +# define RTTimeNanoTSLFenceAsyncUseApicId RT_MANGLER(RTTimeNanoTSLFenceAsyncUseApicId) +# define RTTimeNanoTSLFenceAsyncUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseApicId_EndProc) +# define RTTimeNanoTSLFenceAsyncUseRdtscp RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscp) +# define RTTimeNanoTSLFenceAsyncUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscp_EndProc) +# define RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl) +# define RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl_EndProc) +# define RTTimeNanoTSLFenceAsyncUseIdtrLim RT_MANGLER(RTTimeNanoTSLFenceAsyncUseIdtrLim) +# define RTTimeNanoTSLFenceAsyncUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseIdtrLim_EndProc) +# define RTTimeNanoTSLFenceSyncInvarNoDelta RT_MANGLER(RTTimeNanoTSLFenceSyncInvarNoDelta) +# define RTTimeNanoTSLFenceSyncInvarNoDelta_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarNoDelta_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDelta RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDelta) +# define RTTimeNanoTSLFenceSyncInvarWithDelta_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDelta_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim_EndProc) +# define RTTimeNormalize RT_MANGLER(RTTimeNormalize) +# define RTTimeNow RT_MANGLER(RTTimeNow) +# define RTTimeProgramMicroTS RT_MANGLER(RTTimeProgramMicroTS) +# define RTTimeProgramMilliTS RT_MANGLER(RTTimeProgramMilliTS) +# define RTTimeProgramNanoTS RT_MANGLER(RTTimeProgramNanoTS) +# define RTTimeProgramSecTS RT_MANGLER(RTTimeProgramSecTS) +# define RTTimeProgramStartNanoTS RT_MANGLER(RTTimeProgramStartNanoTS) +# define RTTimerCanDoHighResolution RT_MANGLER(RTTimerCanDoHighResolution) +# define RTTimerChangeInterval RT_MANGLER(RTTimerChangeInterval) +# define RTTimerCreate RT_MANGLER(RTTimerCreate) +# define RTTimerCreateEx RT_MANGLER(RTTimerCreateEx) +# define RTTimerDestroy RT_MANGLER(RTTimerDestroy) +# define RTTimerGetSystemGranularity RT_MANGLER(RTTimerGetSystemGranularity) /* r0drv */ +# define RTTimerLRCreate RT_MANGLER(RTTimerLRCreate) +# define RTTimerLRCreateEx RT_MANGLER(RTTimerLRCreateEx) +# define RTTimerLRDestroy RT_MANGLER(RTTimerLRDestroy) +# define RTTimerLRStart RT_MANGLER(RTTimerLRStart) +# define RTTimerLRStop RT_MANGLER(RTTimerLRStop) +# define RTTimerLRChangeInterval RT_MANGLER(RTTimerLRChangeInterval) +# define RTTimerReleaseSystemGranularity RT_MANGLER(RTTimerReleaseSystemGranularity) /* r0drv */ +# define RTTimerRequestSystemGranularity RT_MANGLER(RTTimerRequestSystemGranularity) /* r0drv */ +# define RTTimerStart RT_MANGLER(RTTimerStart) +# define RTTimerStop RT_MANGLER(RTTimerStop) +# define RTTimeSet RT_MANGLER(RTTimeSet) +# define RTTimeSpecFromString RT_MANGLER(RTTimeSpecFromString) +# define RTTimeSpecToString RT_MANGLER(RTTimeSpecToString) +# define RTTimeSystemMilliTS RT_MANGLER(RTTimeSystemMilliTS) +# define RTTimeSystemNanoTS RT_MANGLER(RTTimeSystemNanoTS) +# define RTTimeFromString RT_MANGLER(RTTimeFromString) +# define RTTimeToString RT_MANGLER(RTTimeToString) +# define RTTimeZoneGetInfoByUnixName RT_MANGLER(RTTimeZoneGetInfoByUnixName) +# define RTTimeZoneGetInfoByWindowsName RT_MANGLER(RTTimeZoneGetInfoByWindowsName) +# define RTTimeZoneGetInfoByWindowsIndex RT_MANGLER(RTTimeZoneGetInfoByWindowsIndex) +# define RTTimeZoneGetCurrent RT_MANGLER(RTTimeZoneGetCurrent) +# define RTTlsAlloc RT_MANGLER(RTTlsAlloc) +# define RTTlsAllocEx RT_MANGLER(RTTlsAllocEx) +# define RTTlsFree RT_MANGLER(RTTlsFree) +# define RTTlsGet RT_MANGLER(RTTlsGet) +# define RTTlsGetEx RT_MANGLER(RTTlsGetEx) +# define RTTlsSet RT_MANGLER(RTTlsSet) +# define RTTraceBufAddMsg RT_MANGLER(RTTraceBufAddMsg) +# define RTTraceBufAddMsgEx RT_MANGLER(RTTraceBufAddMsgEx) +# define RTTraceBufAddMsgF RT_MANGLER(RTTraceBufAddMsgF) +# define RTTraceBufAddMsgV RT_MANGLER(RTTraceBufAddMsgV) +# define RTTraceBufAddPos RT_MANGLER(RTTraceBufAddPos) +# define RTTraceBufAddPosMsg RT_MANGLER(RTTraceBufAddPosMsg) +# define RTTraceBufAddPosMsgEx RT_MANGLER(RTTraceBufAddPosMsgEx) +# define RTTraceBufAddPosMsgF RT_MANGLER(RTTraceBufAddPosMsgF) +# define RTTraceBufAddPosMsgV RT_MANGLER(RTTraceBufAddPosMsgV) +# define RTTraceBufCarve RT_MANGLER(RTTraceBufCarve) +# define RTTraceBufCreate RT_MANGLER(RTTraceBufCreate) +# define RTTraceBufDisable RT_MANGLER(RTTraceBufDisable) +# define RTTraceBufDumpToAssert RT_MANGLER(RTTraceBufDumpToAssert) +# define RTTraceBufDumpToLog RT_MANGLER(RTTraceBufDumpToLog) +# define RTTraceBufEnable RT_MANGLER(RTTraceBufEnable) +# define RTTraceBufEnumEntries RT_MANGLER(RTTraceBufEnumEntries) +# define RTTraceBufGetEntryCount RT_MANGLER(RTTraceBufGetEntryCount) +# define RTTraceBufGetEntrySize RT_MANGLER(RTTraceBufGetEntrySize) +# define RTTraceBufRelease RT_MANGLER(RTTraceBufRelease) +# define RTTraceBufRetain RT_MANGLER(RTTraceBufRetain) +# define RTTraceGetDefaultBuf RT_MANGLER(RTTraceGetDefaultBuf) +# define RTTraceSetDefaultBuf RT_MANGLER(RTTraceSetDefaultBuf) +# define RTUdpCreateClientSocket RT_MANGLER(RTUdpCreateClientSocket) +# define RTUdpRead RT_MANGLER(RTUdpRead) +# define RTUdpServerCreate RT_MANGLER(RTUdpServerCreate) +# define RTUdpServerCreateEx RT_MANGLER(RTUdpServerCreateEx) +# define RTUdpServerDestroy RT_MANGLER(RTUdpServerDestroy) +# define RTUdpServerListen RT_MANGLER(RTUdpServerListen) +# define RTUdpServerShutdown RT_MANGLER(RTUdpServerShutdown) +# define RTUdpWrite RT_MANGLER(RTUdpWrite) +# define RTUniFree RT_MANGLER(RTUniFree) +# define RTUriCreate RT_MANGLER(RTUriCreate) +# define RTUriFileCreate RT_MANGLER(RTUriFileCreate) +# define RTUriFileCreateEx RT_MANGLER(RTUriFileCreateEx) +# define RTUriFilePath RT_MANGLER(RTUriFilePath) +# define RTUriFilePathEx RT_MANGLER(RTUriFilePathEx) +# define RTUriParse RT_MANGLER(RTUriParse) +# define RTUriParsedAuthority RT_MANGLER(RTUriParsedAuthority) +# define RTUriParsedAuthorityHost RT_MANGLER(RTUriParsedAuthorityHost) +# define RTUriParsedAuthorityPassword RT_MANGLER(RTUriParsedAuthorityPassword) +# define RTUriParsedAuthorityPort RT_MANGLER(RTUriParsedAuthorityPort) +# define RTUriParsedAuthorityUsername RT_MANGLER(RTUriParsedAuthorityUsername) +# define RTUriParsedFragment RT_MANGLER(RTUriParsedFragment) +# define RTUriParsedPath RT_MANGLER(RTUriParsedPath) +# define RTUriParsedScheme RT_MANGLER(RTUriParsedScheme) +# define RTUriParsedQuery RT_MANGLER(RTUriParsedQuery) +# define RTUriIsSchemeMatch RT_MANGLER(RTUriIsSchemeMatch) +# define RTUtf16AllocTag RT_MANGLER(RTUtf16AllocTag) +# define RTUtf16ReallocTag RT_MANGLER(RTUtf16ReallocTag) +# define RTUtf16CalcLatin1Len RT_MANGLER(RTUtf16CalcLatin1Len) +# define RTUtf16CalcLatin1LenEx RT_MANGLER(RTUtf16CalcLatin1LenEx) +# define RTUtf16CalcUtf8Len RT_MANGLER(RTUtf16CalcUtf8Len) +# define RTUtf16CalcUtf8LenEx RT_MANGLER(RTUtf16CalcUtf8LenEx) +# define RTUtf16BigCalcUtf8Len RT_MANGLER(RTUtf16BigCalcUtf8Len) +# define RTUtf16BigCalcUtf8LenEx RT_MANGLER(RTUtf16BigCalcUtf8LenEx) +# define RTUtf16LittleCalcUtf8Len RT_MANGLER(RTUtf16LittleCalcUtf8Len) +# define RTUtf16LittleCalcUtf8LenEx RT_MANGLER(RTUtf16LittleCalcUtf8LenEx) +# define RTUtf16Cmp RT_MANGLER(RTUtf16Cmp) +# define RTUtf16CmpAscii RT_MANGLER(RTUtf16CmpAscii) +# define RTUtf16CmpUtf8 RT_MANGLER(RTUtf16CmpUtf8) +# define RTUtf16DupExTag RT_MANGLER(RTUtf16DupExTag) +# define RTUtf16DupTag RT_MANGLER(RTUtf16DupTag) +# define RTUtf16Free RT_MANGLER(RTUtf16Free) +# define RTUtf16GetCpExInternal RT_MANGLER(RTUtf16GetCpExInternal) +# define RTUtf16BigGetCpExInternal RT_MANGLER(RTUtf16BigGetCpExInternal) +# define RTUtf16GetCpInternal RT_MANGLER(RTUtf16GetCpInternal) +# define RTUtf16BigGetCpInternal RT_MANGLER(RTUtf16BigGetCpInternal) +# define RTUtf16ICmp RT_MANGLER(RTUtf16ICmp) +# define RTUtf16BigICmp RT_MANGLER(RTUtf16BigICmp) +# define RTUtf16ICmpUtf8 RT_MANGLER(RTUtf16ICmpUtf8) +# define RTUtf16NICmp RT_MANGLER(RTUtf16NICmp) +# define RTUtf16BigNICmp RT_MANGLER(RTUtf16BigNICmp) +# define RTUtf16IsValidEncoding RT_MANGLER(RTUtf16IsValidEncoding) +# define RTUtf16Len RT_MANGLER(RTUtf16Len) +# define RTUtf16LocaleICmp RT_MANGLER(RTUtf16LocaleICmp) +# define RTUtf16PutCpInternal RT_MANGLER(RTUtf16PutCpInternal) +# define RTUtf16BigPutCpInternal RT_MANGLER(RTUtf16BigPutCpInternal) +# define RTUtf16ToLatin1ExTag RT_MANGLER(RTUtf16ToLatin1ExTag) +# define RTUtf16ToLatin1Tag RT_MANGLER(RTUtf16ToLatin1Tag) +# define RTUtf16ToLower RT_MANGLER(RTUtf16ToLower) +# define RTUtf16ToUpper RT_MANGLER(RTUtf16ToUpper) +# define RTUtf16PurgeComplementSet RT_MANGLER(RTUtf16PurgeComplementSet) +# define RTUtf16ToUtf8ExTag RT_MANGLER(RTUtf16ToUtf8ExTag) +# define RTUtf16BigToUtf8ExTag RT_MANGLER(RTUtf16BigToUtf8ExTag) +# define RTUtf16LittleToUtf8ExTag RT_MANGLER(RTUtf16LittleToUtf8ExTag) +# define RTUtf16ToUtf8Tag RT_MANGLER(RTUtf16ToUtf8Tag) +# define RTUtf16BigToUtf8Tag RT_MANGLER(RTUtf16BigToUtf8Tag) +# define RTUtf16LittleToUtf8Tag RT_MANGLER(RTUtf16LittleToUtf8Tag) +# define RTUtf16ValidateEncoding RT_MANGLER(RTUtf16ValidateEncoding) +# define RTUtf16ValidateEncodingEx RT_MANGLER(RTUtf16ValidateEncodingEx) +# define RTUuidClear RT_MANGLER(RTUuidClear) +# define RTUuidCompare RT_MANGLER(RTUuidCompare) +# define RTUuidCompare2Strs RT_MANGLER(RTUuidCompare2Strs) +# define RTUuidCompareStr RT_MANGLER(RTUuidCompareStr) +# define RTUuidCreate RT_MANGLER(RTUuidCreate) +# define RTUuidFromStr RT_MANGLER(RTUuidFromStr) +# define RTUuidFromUtf16 RT_MANGLER(RTUuidFromUtf16) +# define RTUuidIsNull RT_MANGLER(RTUuidIsNull) +# define RTUuidToStr RT_MANGLER(RTUuidToStr) +# define RTUuidToUtf16 RT_MANGLER(RTUuidToUtf16) +# define RTVfsChainElementDeregisterProvider RT_MANGLER(RTVfsChainElementDeregisterProvider) +# define RTVfsChainElementRegisterProvider RT_MANGLER(RTVfsChainElementRegisterProvider) +# define RTVfsChainIsSpec RT_MANGLER(RTVfsChainIsSpec) +# define RTVfsChainMsgError RT_MANGLER(RTVfsChainMsgError) +# define RTVfsChainMsgErrorExitFailure RT_MANGLER(RTVfsChainMsgErrorExitFailure) +# define RTVfsChainOpenDir RT_MANGLER(RTVfsChainOpenDir) +# define RTVfsChainOpenParentDir RT_MANGLER(RTVfsChainOpenParentDir) +# define RTVfsChainOpenFile RT_MANGLER(RTVfsChainOpenFile) +# define RTVfsChainOpenIoStream RT_MANGLER(RTVfsChainOpenIoStream) +# define RTVfsChainQueryFinalPath RT_MANGLER(RTVfsChainQueryFinalPath) +# define RTVfsChainQueryInfo RT_MANGLER(RTVfsChainQueryInfo) +# define RTVfsChainSpecCheckAndSetup RT_MANGLER(RTVfsChainSpecCheckAndSetup) +# define RTVfsChainSpecFree RT_MANGLER(RTVfsChainSpecFree) +# define RTVfsChainSpecParse RT_MANGLER(RTVfsChainSpecParse) +# define RTVfsChainSplitOffFinalPath RT_MANGLER(RTVfsChainSplitOffFinalPath) +# define RTVfsChainValidateOpenFileOrIoStream RT_MANGLER(RTVfsChainValidateOpenFileOrIoStream) +# define RTVfsDirRelease RT_MANGLER(RTVfsDirRelease) +# define RTVfsDirRetain RT_MANGLER(RTVfsDirRetain) +# define RTVfsDirRetainDebug RT_MANGLER(RTVfsDirRetainDebug) +# define RTVfsDirOpen RT_MANGLER(RTVfsDirOpen) +# define RTVfsDirOpenDir RT_MANGLER(RTVfsDirOpenDir) +# define RTVfsDirCreateDir RT_MANGLER(RTVfsDirCreateDir) +# define RTVfsDirOpenFile RT_MANGLER(RTVfsDirOpenFile) +# define RTVfsDirOpenFileAsIoStream RT_MANGLER(RTVfsDirOpenFileAsIoStream) +# define RTVfsDirQueryPathInfo RT_MANGLER(RTVfsDirQueryPathInfo) +# define RTVfsDirReadEx RT_MANGLER(RTVfsDirReadEx) +# define RTVfsDirRemoveDir RT_MANGLER(RTVfsDirRemoveDir) +# define RTVfsFileFlush RT_MANGLER(RTVfsFileFlush) +# define RTVfsFileFromBuffer RT_MANGLER(RTVfsFileFromBuffer) +# define RTVfsFileFromRTFile RT_MANGLER(RTVfsFileFromRTFile) +# define RTVfsFileGetOpenFlags RT_MANGLER(RTVfsFileGetOpenFlags) +# define RTVfsFileGetSize RT_MANGLER(RTVfsFileGetSize) +# define RTVfsFileOpen RT_MANGLER(RTVfsFileOpen) +# define RTVfsFileOpenNormal RT_MANGLER(RTVfsFileOpenNormal) +# define RTVfsFilePoll RT_MANGLER(RTVfsFilePoll) +# define RTVfsFileQueryInfo RT_MANGLER(RTVfsFileQueryInfo) +# define RTVfsFileRead RT_MANGLER(RTVfsFileRead) +# define RTVfsFileReadAt RT_MANGLER(RTVfsFileReadAt) +# define RTVfsFileRelease RT_MANGLER(RTVfsFileRelease) +# define RTVfsFileRetain RT_MANGLER(RTVfsFileRetain) +# define RTVfsFileRetainDebug RT_MANGLER(RTVfsFileRetainDebug) +# define RTVfsFileSeek RT_MANGLER(RTVfsFileSeek) +# define RTVfsFileSgRead RT_MANGLER(RTVfsFileSgRead) +# define RTVfsFileSgWrite RT_MANGLER(RTVfsFileSgWrite) +# define RTVfsFileTell RT_MANGLER(RTVfsFileTell) +# define RTVfsFileToIoStream RT_MANGLER(RTVfsFileToIoStream) +# define RTVfsFileWrite RT_MANGLER(RTVfsFileWrite) +# define RTVfsFileWriteAt RT_MANGLER(RTVfsFileWriteAt) +# define RTVfsFsStreamToPrivate RT_MANGLER(RTVfsFsStreamToPrivate) +# define RTVfsFsStrmAdd RT_MANGLER(RTVfsFsStrmAdd) +# define RTVfsFsStrmEnd RT_MANGLER(RTVfsFsStrmEnd) +# define RTVfsFsStrmNext RT_MANGLER(RTVfsFsStrmNext) +# define RTVfsFsStrmPushFile RT_MANGLER(RTVfsFsStrmPushFile) +# define RTVfsFsStrmQueryInfo RT_MANGLER(RTVfsFsStrmQueryInfo) +# define RTVfsFsStrmRelease RT_MANGLER(RTVfsFsStrmRelease) +# define RTVfsFsStrmRetain RT_MANGLER(RTVfsFsStrmRetain) +# define RTVfsFsStrmRetainDebug RT_MANGLER(RTVfsFsStrmRetainDebug) +# define RTVfsFsStrmToDir RT_MANGLER(RTVfsFsStrmToDir) +# define RTVfsFsStrmToNormalDir RT_MANGLER(RTVfsFsStrmToNormalDir) +# define RTVfsFsStrmToDirUndo RT_MANGLER(RTVfsFsStrmToDirUndo) +# define RTVfsIoStreamToPrivate RT_MANGLER(RTVfsIoStreamToPrivate) +# define RTVfsIoStrmFlush RT_MANGLER(RTVfsIoStrmFlush) +# define RTVfsIoStrmFromBuffer RT_MANGLER(RTVfsIoStrmFromBuffer) +# define RTVfsIoStrmFromRTFile RT_MANGLER(RTVfsIoStrmFromRTFile) +# define RTVfsIoStrmFromRTPipe RT_MANGLER(RTVfsIoStrmFromRTPipe) +# define RTVfsIoStrmFromStdHandle RT_MANGLER(RTVfsIoStrmFromStdHandle) +# define RTVfsIoStrmGetOpenFlags RT_MANGLER(RTVfsIoStrmGetOpenFlags) +# define RTVfsIoStrmIsAtEnd RT_MANGLER(RTVfsIoStrmIsAtEnd) +# define RTVfsIoStrmOpenNormal RT_MANGLER(RTVfsIoStrmOpenNormal) +# define RTVfsIoStrmPoll RT_MANGLER(RTVfsIoStrmPoll) +# define RTVfsIoStrmQueryInfo RT_MANGLER(RTVfsIoStrmQueryInfo) +# define RTVfsIoStrmRead RT_MANGLER(RTVfsIoStrmRead) +# define RTVfsIoStrmReadAt RT_MANGLER(RTVfsIoStrmReadAt) +# define RTVfsIoStrmReadAll RT_MANGLER(RTVfsIoStrmReadAll) +# define RTVfsIoStrmReadAllFree RT_MANGLER(RTVfsIoStrmReadAllFree) +# define RTVfsIoStrmRelease RT_MANGLER(RTVfsIoStrmRelease) +# define RTVfsIoStrmRetain RT_MANGLER(RTVfsIoStrmRetain) +# define RTVfsIoStrmRetainDebug RT_MANGLER(RTVfsIoStrmRetainDebug) +# define RTVfsIoStrmSgRead RT_MANGLER(RTVfsIoStrmSgRead) +# define RTVfsIoStrmSgWrite RT_MANGLER(RTVfsIoStrmSgWrite) +# define RTVfsIoStrmSkip RT_MANGLER(RTVfsIoStrmSkip) +# define RTVfsIoStrmTell RT_MANGLER(RTVfsIoStrmTell) +# define RTVfsIoStrmToFile RT_MANGLER(RTVfsIoStrmToFile) +# define RTVfsIoStrmValidateUtf8Encoding RT_MANGLER(RTVfsIoStrmValidateUtf8Encoding) +# define RTVfsIoStrmWrite RT_MANGLER(RTVfsIoStrmWrite) +# define RTVfsIoStrmWriteAt RT_MANGLER(RTVfsIoStrmWriteAt) +# define RTVfsIoStrmZeroFill RT_MANGLER(RTVfsIoStrmZeroFill) +# define RTVfsIsRangeInUse RT_MANGLER(RTVfsIsRangeInUse) +# define RTVfsLockAcquireReadSlow RT_MANGLER(RTVfsLockAcquireReadSlow) +# define RTVfsLockAcquireWriteSlow RT_MANGLER(RTVfsLockAcquireWriteSlow) +# define RTVfsLockRelease RT_MANGLER(RTVfsLockRelease) +# define RTVfsLockReleaseReadSlow RT_MANGLER(RTVfsLockReleaseReadSlow) +# define RTVfsLockReleaseWriteSlow RT_MANGLER(RTVfsLockReleaseWriteSlow) +# define RTVfsLockRetain RT_MANGLER(RTVfsLockRetain) +# define RTVfsLockRetainDebug RT_MANGLER(RTVfsLockRetainDebug) +# define RTVfsMemFileCreate RT_MANGLER(RTVfsMemFileCreate) +# define RTVfsMemIoStrmCreate RT_MANGLER(RTVfsMemIoStrmCreate) +# define RTVfsMemorizeIoStreamAsFile RT_MANGLER(RTVfsMemorizeIoStreamAsFile) +# define RTVfsNew RT_MANGLER(RTVfsNew) +# define RTVfsNewBaseObj RT_MANGLER(RTVfsNewBaseObj) +# define RTVfsNewDir RT_MANGLER(RTVfsNewDir) +# define RTVfsNewFile RT_MANGLER(RTVfsNewFile) +# define RTVfsNewFsStream RT_MANGLER(RTVfsNewFsStream) +# define RTVfsNewIoStream RT_MANGLER(RTVfsNewIoStream) +# define RTVfsNewSymlink RT_MANGLER(RTVfsNewSymlink) +# define RTVfsObjFromDir RT_MANGLER(RTVfsObjFromDir) +# define RTVfsObjFromFile RT_MANGLER(RTVfsObjFromFile) +# define RTVfsObjFromFsStream RT_MANGLER(RTVfsObjFromFsStream) +# define RTVfsObjFromIoStream RT_MANGLER(RTVfsObjFromIoStream) +# define RTVfsObjFromSymlink RT_MANGLER(RTVfsObjFromSymlink) +# define RTVfsObjFromVfs RT_MANGLER(RTVfsObjFromVfs) +# define RTVfsObjQueryInfo RT_MANGLER(RTVfsObjQueryInfo) +# define RTVfsObjRelease RT_MANGLER(RTVfsObjRelease) +# define RTVfsObjRetain RT_MANGLER(RTVfsObjRetain) +# define RTVfsObjRetainDebug RT_MANGLER(RTVfsObjRetainDebug) +# define RTVfsObjToDir RT_MANGLER(RTVfsObjToDir) +# define RTVfsObjToFile RT_MANGLER(RTVfsObjToFile) +# define RTVfsObjToFsStream RT_MANGLER(RTVfsObjToFsStream) +# define RTVfsObjToIoStream RT_MANGLER(RTVfsObjToIoStream) +# define RTVfsObjToSymlink RT_MANGLER(RTVfsObjToSymlink) +# define RTVfsObjToVfs RT_MANGLER(RTVfsObjToVfs) +# define RTVfsParsePath RT_MANGLER(RTVfsParsePath) +# define RTVfsParsePathA RT_MANGLER(RTVfsParsePathA) +# define RTVfsParsePathAppend RT_MANGLER(RTVfsParsePathAppend) +# define RTVfsParsePathFree RT_MANGLER(RTVfsParsePathFree) +# define RTVfsRelease RT_MANGLER(RTVfsRelease) +# define RTVfsOpenRoot RT_MANGLER(RTVfsOpenRoot) +# define RTVfsQuerPathInfo RT_MANGLER(RTVfsQueryPathInfo) +# define RTVfsRetain RT_MANGLER(RTVfsRetain) +# define RTVfsRetainDebug RT_MANGLER(RTVfsRetainDebug) +# define RTVfsSymlinkQueryInfo RT_MANGLER(RTVfsSymlinkQueryInfo) +# define RTVfsSymlinkRead RT_MANGLER(RTVfsSymlinkRead) +# define RTVfsSymlinkRelease RT_MANGLER(RTVfsSymlinkRelease) +# define RTVfsSymlinkRetain RT_MANGLER(RTVfsSymlinkRetain) +# define RTVfsSymlinkRetainDebug RT_MANGLER(RTVfsSymlinkRetainDebug) +# define RTVfsSymlinkSetMode RT_MANGLER(RTVfsSymlinkSetMode) +# define RTVfsSymlinkSetOwner RT_MANGLER(RTVfsSymlinkSetOwner) +# define RTVfsSymlinkSetTimes RT_MANGLER(RTVfsSymlinkSetTimes) +# define RTVfsUtilDummyPollOne RT_MANGLER(RTVfsUtilDummyPollOne) +# define RTVfsUtilPumpIoStreams RT_MANGLER(RTVfsUtilPumpIoStreams) +# define RTVfsCreateProgressForFile RT_MANGLER(RTVfsCreateProgressForFile) +# define RTVfsCreateProgressForIoStream RT_MANGLER(RTVfsCreateProgressForIoStream) +# define RTVfsCreateReadAheadForFile RT_MANGLER(RTVfsCreateReadAheadForFile) +# define RTVfsCreateReadAheadForIoStream RT_MANGLER(RTVfsCreateReadAheadForIoStream) +# define RTZipBlockCompress RT_MANGLER(RTZipBlockCompress) +# define RTZipBlockDecompress RT_MANGLER(RTZipBlockDecompress) +# define RTZipCompCreate RT_MANGLER(RTZipCompCreate) +# define RTZipCompDestroy RT_MANGLER(RTZipCompDestroy) +# define RTZipCompFinish RT_MANGLER(RTZipCompFinish) +# define RTZipCompress RT_MANGLER(RTZipCompress) +# define RTZipDecompCreate RT_MANGLER(RTZipDecompCreate) +# define RTZipDecompDestroy RT_MANGLER(RTZipDecompDestroy) +# define RTZipDecompress RT_MANGLER(RTZipDecompress) +# define RTZipGzipCompressIoStream RT_MANGLER(RTZipGzipCompressIoStream) +# define RTZipGzipDecompressIoStream RT_MANGLER(RTZipGzipDecompressIoStream) +# define RTZipPkzipFsStreamFromIoStream RT_MANGLER(RTZipPkzipFsStreamFromIoStream) +# define RTZipPkzipMemDecompress RT_MANGLER(RTZipPkzipMemDecompress) +# define RTZipTarCmd RT_MANGLER(RTZipTarCmd) +# define RTZipUnzipCmd RT_MANGLER(RTZipUnzipCmd) +# define RTZipTarFsStreamFromIoStream RT_MANGLER(RTZipTarFsStreamFromIoStream) +# define RTZipTarFsStreamToIoStream RT_MANGLER(RTZipTarFsStreamToIoStream) +# define RTZipTarFsStreamSetOwner RT_MANGLER(RTZipTarFsStreamSetOwner) +# define RTZipTarFsStreamSetGroup RT_MANGLER(RTZipTarFsStreamSetGroup) +# define RTZipTarFsStreamSetPrefix RT_MANGLER(RTZipTarFsStreamSetPrefix) +# define RTZipTarFsStreamSetFileMode RT_MANGLER(RTZipTarFsStreamSetFileMode) +# define RTZipTarFsStreamSetDirMode RT_MANGLER(RTZipTarFsStreamSetDirMode) +# define RTZipTarFsStreamSetModTime RT_MANGLER(RTZipTarFsStreamSetModTime) +# define RTZipXarFsStreamFromIoStream RT_MANGLER(RTZipXarFsStreamFromIoStream) + +/* sort/merge into the above later: */ +# define RTAsn1ContentAllocZ RT_MANGLER(RTAsn1ContentAllocZ) +# define RTAsn1ContentDup RT_MANGLER(RTAsn1ContentDup) +# define RTAsn1ContentFree RT_MANGLER(RTAsn1ContentFree) +# define RTAsn1ContentReallocZ RT_MANGLER(RTAsn1ContentReallocZ) +# define RTAsn1ContextTagN_Clone RT_MANGLER(RTAsn1ContextTagN_Clone) +# define RTAsn1ContextTagN_Init RT_MANGLER(RTAsn1ContextTagN_Init) +# define RTAsn1Dummy_InitEx RT_MANGLER(RTAsn1Dummy_InitEx) +# define RTAsn1MemAllocZ RT_MANGLER(RTAsn1MemAllocZ) +# define RTAsn1MemDup RT_MANGLER(RTAsn1MemDup) +# define RTAsn1MemFree RT_MANGLER(RTAsn1MemFree) +# define RTAsn1MemFreeArray RT_MANGLER(RTAsn1MemFreeArray) +# define RTAsn1MemResizeArray RT_MANGLER(RTAsn1MemResizeArray) +# define RTAsn1MemInitAllocation RT_MANGLER(RTAsn1MemInitAllocation) +# define RTAsn1MemInitArrayAllocation RT_MANGLER(RTAsn1MemInitArrayAllocation) +# define RTAsn1SeqOfCore_Clone RT_MANGLER(RTAsn1SeqOfCore_Clone) +# define RTAsn1SeqOfCore_Init RT_MANGLER(RTAsn1SeqOfCore_Init) +# define RTAsn1SequenceCore_Clone RT_MANGLER(RTAsn1SequenceCore_Clone) +# define RTAsn1SequenceCore_Init RT_MANGLER(RTAsn1SequenceCore_Init) +# define RTAsn1SetCore_Clone RT_MANGLER(RTAsn1SetCore_Clone) +# define RTAsn1SetCore_Init RT_MANGLER(RTAsn1SetCore_Init) +# define RTAsn1SetOfCore_Clone RT_MANGLER(RTAsn1SetOfCore_Clone) +# define RTAsn1SetOfCore_Init RT_MANGLER(RTAsn1SetOfCore_Init) +# define RTAsn1VtCheckSanity RT_MANGLER(RTAsn1VtCheckSanity) +# define RTAsn1VtClone RT_MANGLER(RTAsn1VtClone) +# define RTAsn1VtCompare RT_MANGLER(RTAsn1VtCompare) +# define RTAsn1VtDeepEnum RT_MANGLER(RTAsn1VtDeepEnum) +# define RTAsn1VtDelete RT_MANGLER(RTAsn1VtDelete) +# define RTAsn1CursorCheckEnd RT_MANGLER(RTAsn1CursorCheckEnd) +# define RTAsn1CursorGetBitString RT_MANGLER(RTAsn1CursorGetBitString) +# define RTAsn1CursorGetBitStringEx RT_MANGLER(RTAsn1CursorGetBitStringEx) +# define RTAsn1CursorGetBmpString RT_MANGLER(RTAsn1CursorGetBmpString) +# define RTAsn1CursorGetBoolean RT_MANGLER(RTAsn1CursorGetBoolean) +# define RTAsn1CursorGetContextTagNCursor RT_MANGLER(RTAsn1CursorGetContextTagNCursor) +# define RTAsn1CursorGetCore RT_MANGLER(RTAsn1CursorGetCore) +# define RTAsn1CursorGetDynType RT_MANGLER(RTAsn1CursorGetDynType) +# define RTAsn1CursorGetIa5String RT_MANGLER(RTAsn1CursorGetIa5String) +# define RTAsn1CursorGetInteger RT_MANGLER(RTAsn1CursorGetInteger) +# define RTAsn1CursorGetNull RT_MANGLER(RTAsn1CursorGetNull) +# define RTAsn1CursorGetObjId RT_MANGLER(RTAsn1CursorGetObjId) +# define RTAsn1CursorGetOctetString RT_MANGLER(RTAsn1CursorGetOctetString) +# define RTAsn1CursorGetSequenceCursor RT_MANGLER(RTAsn1CursorGetSequenceCursor) +# define RTAsn1CursorGetSetCursor RT_MANGLER(RTAsn1CursorGetSetCursor) +# define RTAsn1CursorGetString RT_MANGLER(RTAsn1CursorGetString) +# define RTAsn1CursorGetTime RT_MANGLER(RTAsn1CursorGetTime) +# define RTAsn1CursorGetUtf8String RT_MANGLER(RTAsn1CursorGetUtf8String) +# define RTAsn1CursorInitAllocation RT_MANGLER(RTAsn1CursorInitAllocation) +# define RTAsn1CursorInitArrayAllocation RT_MANGLER(RTAsn1CursorInitArrayAllocation) +# define RTAsn1CursorInitPrimary RT_MANGLER(RTAsn1CursorInitPrimary) +# define RTAsn1CursorInitSubFromCore RT_MANGLER(RTAsn1CursorInitSubFromCore) +# define RTAsn1CursorIsNextEx RT_MANGLER(RTAsn1CursorIsNextEx) +# define RTAsn1CursorMatchTagClassFlagsEx RT_MANGLER(RTAsn1CursorMatchTagClassFlagsEx) +# define RTAsn1CursorPeek RT_MANGLER(RTAsn1CursorPeek) +# define RTAsn1CursorReadHdr RT_MANGLER(RTAsn1CursorReadHdr) +# define RTAsn1CursorSetInfo RT_MANGLER(RTAsn1CursorSetInfo) +# define RTAsn1CursorSetInfoV RT_MANGLER(RTAsn1CursorSetInfoV) +# define RTAsn1Dump RT_MANGLER(RTAsn1Dump) +# define RTAsn1QueryObjIdName RT_MANGLER(RTAsn1QueryObjIdName) +# define RTAsn1EncodePrepare RT_MANGLER(RTAsn1EncodePrepare) +# define RTAsn1EncodeRecalcHdrSize RT_MANGLER(RTAsn1EncodeRecalcHdrSize) +# define RTAsn1EncodeToBuffer RT_MANGLER(RTAsn1EncodeToBuffer) +# define RTAsn1EncodeWrite RT_MANGLER(RTAsn1EncodeWrite) +# define RTAsn1EncodeWriteHeader RT_MANGLER(RTAsn1EncodeWriteHeader) +# define RTAsn1BitString_CheckSanity RT_MANGLER(RTAsn1BitString_CheckSanity) +# define RTAsn1BitString_Clone RT_MANGLER(RTAsn1BitString_Clone) +# define RTAsn1BitString_Compare RT_MANGLER(RTAsn1BitString_Compare) +# define RTAsn1BitString_Delete RT_MANGLER(RTAsn1BitString_Delete) +# define RTAsn1BitString_Enum RT_MANGLER(RTAsn1BitString_Enum) +# define RTAsn1BitString_GetAsUInt64 RT_MANGLER(RTAsn1BitString_GetAsUInt64) +# define RTAsn1BitString_Init RT_MANGLER(RTAsn1BitString_Init) +# define RTAsn1SeqOfBitStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfBitStrings_CheckSanity) +# define RTAsn1SeqOfBitStrings_Clone RT_MANGLER(RTAsn1SeqOfBitStrings_Clone) +# define RTAsn1SeqOfBitStrings_Compare RT_MANGLER(RTAsn1SeqOfBitStrings_Compare) +# define RTAsn1SeqOfBitStrings_Delete RT_MANGLER(RTAsn1SeqOfBitStrings_Delete) +# define RTAsn1SeqOfBitStrings_Enum RT_MANGLER(RTAsn1SeqOfBitStrings_Enum) +# define RTAsn1SeqOfBitStrings_Init RT_MANGLER(RTAsn1SeqOfBitStrings_Init) +# define RTAsn1SetOfBitStrings_CheckSanity RT_MANGLER(RTAsn1SetOfBitStrings_CheckSanity) +# define RTAsn1SetOfBitStrings_Clone RT_MANGLER(RTAsn1SetOfBitStrings_Clone) +# define RTAsn1SetOfBitStrings_Compare RT_MANGLER(RTAsn1SetOfBitStrings_Compare) +# define RTAsn1SetOfBitStrings_Delete RT_MANGLER(RTAsn1SetOfBitStrings_Delete) +# define RTAsn1SetOfBitStrings_Enum RT_MANGLER(RTAsn1SetOfBitStrings_Enum) +# define RTAsn1SetOfBitStrings_Init RT_MANGLER(RTAsn1SetOfBitStrings_Init) +# define RTAsn1BitString_DecodeAsn1 RT_MANGLER(RTAsn1BitString_DecodeAsn1) +# define RTAsn1BitString_DecodeAsn1Ex RT_MANGLER(RTAsn1BitString_DecodeAsn1Ex) +# define RTAsn1SeqOfBitStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfBitStrings_DecodeAsn1) +# define RTAsn1SetOfBitStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfBitStrings_DecodeAsn1) +# define RTAsn1Boolean_CheckSanity RT_MANGLER(RTAsn1Boolean_CheckSanity) +# define RTAsn1Boolean_Clone RT_MANGLER(RTAsn1Boolean_Clone) +# define RTAsn1Boolean_Compare RT_MANGLER(RTAsn1Boolean_Compare) +# define RTAsn1Boolean_Delete RT_MANGLER(RTAsn1Boolean_Delete) +# define RTAsn1Boolean_Enum RT_MANGLER(RTAsn1Boolean_Enum) +# define RTAsn1Boolean_Init RT_MANGLER(RTAsn1Boolean_Init) +# define RTAsn1Boolean_InitDefault RT_MANGLER(RTAsn1Boolean_InitDefault) +# define RTAsn1Boolean_Set RT_MANGLER(RTAsn1Boolean_Set) +# define RTAsn1SeqOfBooleans_CheckSanity RT_MANGLER(RTAsn1SeqOfBooleans_CheckSanity) +# define RTAsn1SeqOfBooleans_Clone RT_MANGLER(RTAsn1SeqOfBooleans_Clone) +# define RTAsn1SeqOfBooleans_Compare RT_MANGLER(RTAsn1SeqOfBooleans_Compare) +# define RTAsn1SeqOfBooleans_Delete RT_MANGLER(RTAsn1SeqOfBooleans_Delete) +# define RTAsn1SeqOfBooleans_Enum RT_MANGLER(RTAsn1SeqOfBooleans_Enum) +# define RTAsn1SeqOfBooleans_Init RT_MANGLER(RTAsn1SeqOfBooleans_Init) +# define RTAsn1SetOfBooleans_CheckSanity RT_MANGLER(RTAsn1SetOfBooleans_CheckSanity) +# define RTAsn1SetOfBooleans_Clone RT_MANGLER(RTAsn1SetOfBooleans_Clone) +# define RTAsn1SetOfBooleans_Compare RT_MANGLER(RTAsn1SetOfBooleans_Compare) +# define RTAsn1SetOfBooleans_Delete RT_MANGLER(RTAsn1SetOfBooleans_Delete) +# define RTAsn1SetOfBooleans_Enum RT_MANGLER(RTAsn1SetOfBooleans_Enum) +# define RTAsn1SetOfBooleans_Init RT_MANGLER(RTAsn1SetOfBooleans_Init) +# define RTAsn1Boolean_DecodeAsn1 RT_MANGLER(RTAsn1Boolean_DecodeAsn1) +# define RTAsn1SeqOfBooleans_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfBooleans_DecodeAsn1) +# define RTAsn1SetOfBooleans_DecodeAsn1 RT_MANGLER(RTAsn1SetOfBooleans_DecodeAsn1) +# define RTAsn1Core_ChangeTag RT_MANGLER(RTAsn1Core_ChangeTag) +# define RTAsn1Core_CheckSanity RT_MANGLER(RTAsn1Core_CheckSanity) +# define RTAsn1Core_Clone RT_MANGLER(RTAsn1Core_Clone) +# define RTAsn1Core_CloneContent RT_MANGLER(RTAsn1Core_CloneContent) +# define RTAsn1Core_CloneNoContent RT_MANGLER(RTAsn1Core_CloneNoContent) +# define RTAsn1Core_Compare RT_MANGLER(RTAsn1Core_Compare) +# define RTAsn1Core_CompareEx RT_MANGLER(RTAsn1Core_CompareEx) +# define RTAsn1Core_Delete RT_MANGLER(RTAsn1Core_Delete) +# define RTAsn1Core_Enum RT_MANGLER(RTAsn1Core_Enum) +# define RTAsn1Core_Init RT_MANGLER(RTAsn1Core_Init) +# define RTAsn1Core_InitDefault RT_MANGLER(RTAsn1Core_InitDefault) +# define RTAsn1Core_InitEx RT_MANGLER(RTAsn1Core_InitEx) +# define RTAsn1Core_ResetImplict RT_MANGLER(RTAsn1Core_ResetImplict) +# define RTAsn1Core_SetTagAndFlags RT_MANGLER(RTAsn1Core_SetTagAndFlags) +# define RTAsn1SeqOfCores_CheckSanity RT_MANGLER(RTAsn1SeqOfCores_CheckSanity) +# define RTAsn1SeqOfCores_Clone RT_MANGLER(RTAsn1SeqOfCores_Clone) +# define RTAsn1SeqOfCores_Compare RT_MANGLER(RTAsn1SeqOfCores_Compare) +# define RTAsn1SeqOfCores_Delete RT_MANGLER(RTAsn1SeqOfCores_Delete) +# define RTAsn1SeqOfCores_Enum RT_MANGLER(RTAsn1SeqOfCores_Enum) +# define RTAsn1SeqOfCores_Init RT_MANGLER(RTAsn1SeqOfCores_Init) +# define RTAsn1SetOfCores_CheckSanity RT_MANGLER(RTAsn1SetOfCores_CheckSanity) +# define RTAsn1SetOfCores_Clone RT_MANGLER(RTAsn1SetOfCores_Clone) +# define RTAsn1SetOfCores_Compare RT_MANGLER(RTAsn1SetOfCores_Compare) +# define RTAsn1SetOfCores_Delete RT_MANGLER(RTAsn1SetOfCores_Delete) +# define RTAsn1SetOfCores_Enum RT_MANGLER(RTAsn1SetOfCores_Enum) +# define RTAsn1SetOfCores_Init RT_MANGLER(RTAsn1SetOfCores_Init) +# define RTAsn1Core_DecodeAsn1 RT_MANGLER(RTAsn1Core_DecodeAsn1) +# define RTAsn1SeqOfCores_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfCores_DecodeAsn1) +# define RTAsn1SetOfCores_DecodeAsn1 RT_MANGLER(RTAsn1SetOfCores_DecodeAsn1) +# define RTAsn1DynType_CheckSanity RT_MANGLER(RTAsn1DynType_CheckSanity) +# define RTAsn1DynType_Clone RT_MANGLER(RTAsn1DynType_Clone) +# define RTAsn1DynType_Compare RT_MANGLER(RTAsn1DynType_Compare) +# define RTAsn1DynType_Delete RT_MANGLER(RTAsn1DynType_Delete) +# define RTAsn1DynType_Enum RT_MANGLER(RTAsn1DynType_Enum) +# define RTAsn1DynType_Init RT_MANGLER(RTAsn1DynType_Init) +# define RTAsn1DynType_DecodeAsn1 RT_MANGLER(RTAsn1DynType_DecodeAsn1) +# define RTAsn1Integer_CheckSanity RT_MANGLER(RTAsn1Integer_CheckSanity) +# define RTAsn1Integer_Clone RT_MANGLER(RTAsn1Integer_Clone) +# define RTAsn1Integer_Compare RT_MANGLER(RTAsn1Integer_Compare) +# define RTAsn1Integer_Delete RT_MANGLER(RTAsn1Integer_Delete) +# define RTAsn1Integer_Enum RT_MANGLER(RTAsn1Integer_Enum) +# define RTAsn1Integer_FromBigNum RT_MANGLER(RTAsn1Integer_FromBigNum) +# define RTAsn1Integer_Init RT_MANGLER(RTAsn1Integer_Init) +# define RTAsn1Integer_InitDefault RT_MANGLER(RTAsn1Integer_InitDefault) +# define RTAsn1Integer_InitU64 RT_MANGLER(RTAsn1Integer_InitU64) +# define RTAsn1Integer_ToBigNum RT_MANGLER(RTAsn1Integer_ToBigNum) +# define RTAsn1Integer_ToString RT_MANGLER(RTAsn1Integer_ToString) +# define RTAsn1Integer_UnsignedCompare RT_MANGLER(RTAsn1Integer_UnsignedCompare) +# define RTAsn1Integer_UnsignedCompareWithU32 RT_MANGLER(RTAsn1Integer_UnsignedCompareWithU32) +# define RTAsn1Integer_UnsignedCompareWithU64 RT_MANGLER(RTAsn1Integer_UnsignedCompareWithU64) +# define RTAsn1Integer_UnsignedLastBit RT_MANGLER(RTAsn1Integer_UnsignedLastBit) +# define RTAsn1SeqOfIntegers_CheckSanity RT_MANGLER(RTAsn1SeqOfIntegers_CheckSanity) +# define RTAsn1SeqOfIntegers_Clone RT_MANGLER(RTAsn1SeqOfIntegers_Clone) +# define RTAsn1SeqOfIntegers_Compare RT_MANGLER(RTAsn1SeqOfIntegers_Compare) +# define RTAsn1SeqOfIntegers_Delete RT_MANGLER(RTAsn1SeqOfIntegers_Delete) +# define RTAsn1SeqOfIntegers_Enum RT_MANGLER(RTAsn1SeqOfIntegers_Enum) +# define RTAsn1SeqOfIntegers_Init RT_MANGLER(RTAsn1SeqOfIntegers_Init) +# define RTAsn1SetOfIntegers_CheckSanity RT_MANGLER(RTAsn1SetOfIntegers_CheckSanity) +# define RTAsn1SetOfIntegers_Clone RT_MANGLER(RTAsn1SetOfIntegers_Clone) +# define RTAsn1SetOfIntegers_Compare RT_MANGLER(RTAsn1SetOfIntegers_Compare) +# define RTAsn1SetOfIntegers_Delete RT_MANGLER(RTAsn1SetOfIntegers_Delete) +# define RTAsn1SetOfIntegers_Enum RT_MANGLER(RTAsn1SetOfIntegers_Enum) +# define RTAsn1SetOfIntegers_Init RT_MANGLER(RTAsn1SetOfIntegers_Init) +# define RTAsn1Integer_DecodeAsn1 RT_MANGLER(RTAsn1Integer_DecodeAsn1) +# define RTAsn1SeqOfIntegers_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfIntegers_DecodeAsn1) +# define RTAsn1SetOfIntegers_DecodeAsn1 RT_MANGLER(RTAsn1SetOfIntegers_DecodeAsn1) +# define RTAsn1Null_CheckSanity RT_MANGLER(RTAsn1Null_CheckSanity) +# define RTAsn1Null_Clone RT_MANGLER(RTAsn1Null_Clone) +# define RTAsn1Null_Compare RT_MANGLER(RTAsn1Null_Compare) +# define RTAsn1Null_Delete RT_MANGLER(RTAsn1Null_Delete) +# define RTAsn1Null_Enum RT_MANGLER(RTAsn1Null_Enum) +# define RTAsn1Null_Init RT_MANGLER(RTAsn1Null_Init) +# define RTAsn1Null_DecodeAsn1 RT_MANGLER(RTAsn1Null_DecodeAsn1) +# define RTAsn1ObjIdCountComponents RT_MANGLER(RTAsn1ObjIdCountComponents) +# define RTAsn1ObjIdGetComponentsAsUInt32 RT_MANGLER(RTAsn1ObjIdGetComponentsAsUInt32) +# define RTAsn1ObjIdGetLastComponentsAsUInt32 RT_MANGLER(RTAsn1ObjIdGetLastComponentsAsUInt32) +# define RTAsn1ObjId_CheckSanity RT_MANGLER(RTAsn1ObjId_CheckSanity) +# define RTAsn1ObjId_Clone RT_MANGLER(RTAsn1ObjId_Clone) +# define RTAsn1ObjId_Compare RT_MANGLER(RTAsn1ObjId_Compare) +# define RTAsn1ObjId_CompareWithString RT_MANGLER(RTAsn1ObjId_CompareWithString) +# define RTAsn1ObjId_Delete RT_MANGLER(RTAsn1ObjId_Delete) +# define RTAsn1ObjId_Enum RT_MANGLER(RTAsn1ObjId_Enum) +# define RTAsn1ObjId_Init RT_MANGLER(RTAsn1ObjId_Init) +# define RTAsn1ObjId_InitFromString RT_MANGLER(RTAsn1ObjId_InitFromString) +# define RTAsn1ObjId_StartsWith RT_MANGLER(RTAsn1ObjId_StartsWith) +# define RTAsn1SeqOfObjIds_CheckSanity RT_MANGLER(RTAsn1SeqOfObjIds_CheckSanity) +# define RTAsn1SeqOfObjIds_Clone RT_MANGLER(RTAsn1SeqOfObjIds_Clone) +# define RTAsn1SeqOfObjIds_Compare RT_MANGLER(RTAsn1SeqOfObjIds_Compare) +# define RTAsn1SeqOfObjIds_Delete RT_MANGLER(RTAsn1SeqOfObjIds_Delete) +# define RTAsn1SeqOfObjIds_Enum RT_MANGLER(RTAsn1SeqOfObjIds_Enum) +# define RTAsn1SeqOfObjIds_Init RT_MANGLER(RTAsn1SeqOfObjIds_Init) +# define RTAsn1SetOfObjIds_CheckSanity RT_MANGLER(RTAsn1SetOfObjIds_CheckSanity) +# define RTAsn1SetOfObjIds_Clone RT_MANGLER(RTAsn1SetOfObjIds_Clone) +# define RTAsn1SetOfObjIds_Compare RT_MANGLER(RTAsn1SetOfObjIds_Compare) +# define RTAsn1SetOfObjIds_Delete RT_MANGLER(RTAsn1SetOfObjIds_Delete) +# define RTAsn1SetOfObjIds_Enum RT_MANGLER(RTAsn1SetOfObjIds_Enum) +# define RTAsn1SetOfObjIds_Init RT_MANGLER(RTAsn1SetOfObjIds_Init) +# define RTAsn1SeqOfObjIdSeqs_CheckSanity RT_MANGLER(RTAsn1SeqOfObjIdSeqs_CheckSanity) +# define RTAsn1SeqOfObjIdSeqs_Clone RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Clone) +# define RTAsn1SeqOfObjIdSeqs_Compare RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Compare) +# define RTAsn1SetOfObjIdSeqs_DecodeAsn1 RT_MANGLER(RTAsn1SetOfObjIdSeqs_DecodeAsn1) +# define RTAsn1SeqOfObjIdSeqs_Delete RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Delete) +# define RTAsn1SeqOfObjIdSeqs_Enum RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Enum) +# define RTAsn1SeqOfObjIdSeqs_Init RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Init) +# define RTAsn1SetOfObjIdSeqs_CheckSanity RT_MANGLER(RTAsn1SetOfObjIdSeqs_CheckSanity) +# define RTAsn1SetOfObjIdSeqs_Clone RT_MANGLER(RTAsn1SetOfObjIdSeqs_Clone) +# define RTAsn1SetOfObjIdSeqs_Compare RT_MANGLER(RTAsn1SetOfObjIdSeqs_Compare) +# define RTAsn1SetOfObjIdSeqs_Delete RT_MANGLER(RTAsn1SetOfObjIdSeqs_Delete) +# define RTAsn1SetOfObjIdSeqs_Enum RT_MANGLER(RTAsn1SetOfObjIdSeqs_Enum) +# define RTAsn1SetOfObjIdSeqs_Init RT_MANGLER(RTAsn1SetOfObjIdSeqs_Init) +# define RTAsn1ObjId_DecodeAsn1 RT_MANGLER(RTAsn1ObjId_DecodeAsn1) +# define RTAsn1SeqOfObjIds_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfObjIds_DecodeAsn1) +# define RTAsn1SetOfObjIds_DecodeAsn1 RT_MANGLER(RTAsn1SetOfObjIds_DecodeAsn1) +# define RTAsn1OctetString_CheckSanity RT_MANGLER(RTAsn1OctetString_CheckSanity) +# define RTAsn1OctetString_Clone RT_MANGLER(RTAsn1OctetString_Clone) +# define RTAsn1OctetString_Compare RT_MANGLER(RTAsn1OctetString_Compare) +# define RTAsn1OctetString_Delete RT_MANGLER(RTAsn1OctetString_Delete) +# define RTAsn1OctetString_Enum RT_MANGLER(RTAsn1OctetString_Enum) +# define RTAsn1OctetString_Init RT_MANGLER(RTAsn1OctetString_Init) +# define RTAsn1SeqOfOctetStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfOctetStrings_CheckSanity) +# define RTAsn1SeqOfOctetStrings_Clone RT_MANGLER(RTAsn1SeqOfOctetStrings_Clone) +# define RTAsn1SeqOfOctetStrings_Compare RT_MANGLER(RTAsn1SeqOfOctetStrings_Compare) +# define RTAsn1SeqOfOctetStrings_Delete RT_MANGLER(RTAsn1SeqOfOctetStrings_Delete) +# define RTAsn1SeqOfOctetStrings_Enum RT_MANGLER(RTAsn1SeqOfOctetStrings_Enum) +# define RTAsn1SeqOfOctetStrings_Init RT_MANGLER(RTAsn1SeqOfOctetStrings_Init) +# define RTAsn1SetOfOctetStrings_CheckSanity RT_MANGLER(RTAsn1SetOfOctetStrings_CheckSanity) +# define RTAsn1SetOfOctetStrings_Clone RT_MANGLER(RTAsn1SetOfOctetStrings_Clone) +# define RTAsn1SetOfOctetStrings_Compare RT_MANGLER(RTAsn1SetOfOctetStrings_Compare) +# define RTAsn1SetOfOctetStrings_Delete RT_MANGLER(RTAsn1SetOfOctetStrings_Delete) +# define RTAsn1SetOfOctetStrings_Enum RT_MANGLER(RTAsn1SetOfOctetStrings_Enum) +# define RTAsn1SetOfOctetStrings_Init RT_MANGLER(RTAsn1SetOfOctetStrings_Init) +# define RTAsn1OctetString_DecodeAsn1 RT_MANGLER(RTAsn1OctetString_DecodeAsn1) +# define RTAsn1SeqOfOctetStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfOctetStrings_DecodeAsn1) +# define RTAsn1SetOfOctetStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfOctetStrings_DecodeAsn1) +# define RTAsn1BmpString_CheckSanity RT_MANGLER(RTAsn1BmpString_CheckSanity) +# define RTAsn1BmpString_Clone RT_MANGLER(RTAsn1BmpString_Clone) +# define RTAsn1BmpString_Compare RT_MANGLER(RTAsn1BmpString_Compare) +# define RTAsn1BmpString_Delete RT_MANGLER(RTAsn1BmpString_Delete) +# define RTAsn1BmpString_Enum RT_MANGLER(RTAsn1BmpString_Enum) +# define RTAsn1BmpString_Init RT_MANGLER(RTAsn1BmpString_Init) +# define RTAsn1GeneralString_CheckSanity RT_MANGLER(RTAsn1GeneralString_CheckSanity) +# define RTAsn1GeneralString_Clone RT_MANGLER(RTAsn1GeneralString_Clone) +# define RTAsn1GeneralString_Compare RT_MANGLER(RTAsn1GeneralString_Compare) +# define RTAsn1GeneralString_Delete RT_MANGLER(RTAsn1GeneralString_Delete) +# define RTAsn1GeneralString_Enum RT_MANGLER(RTAsn1GeneralString_Enum) +# define RTAsn1GeneralString_Init RT_MANGLER(RTAsn1GeneralString_Init) +# define RTAsn1GraphicString_CheckSanity RT_MANGLER(RTAsn1GraphicString_CheckSanity) +# define RTAsn1GraphicString_Clone RT_MANGLER(RTAsn1GraphicString_Clone) +# define RTAsn1GraphicString_Compare RT_MANGLER(RTAsn1GraphicString_Compare) +# define RTAsn1GraphicString_Delete RT_MANGLER(RTAsn1GraphicString_Delete) +# define RTAsn1GraphicString_Enum RT_MANGLER(RTAsn1GraphicString_Enum) +# define RTAsn1GraphicString_Init RT_MANGLER(RTAsn1GraphicString_Init) +# define RTAsn1Ia5String_CheckSanity RT_MANGLER(RTAsn1Ia5String_CheckSanity) +# define RTAsn1Ia5String_Clone RT_MANGLER(RTAsn1Ia5String_Clone) +# define RTAsn1Ia5String_Compare RT_MANGLER(RTAsn1Ia5String_Compare) +# define RTAsn1Ia5String_Delete RT_MANGLER(RTAsn1Ia5String_Delete) +# define RTAsn1Ia5String_Enum RT_MANGLER(RTAsn1Ia5String_Enum) +# define RTAsn1Ia5String_Init RT_MANGLER(RTAsn1Ia5String_Init) +# define RTAsn1NumericString_CheckSanity RT_MANGLER(RTAsn1NumericString_CheckSanity) +# define RTAsn1NumericString_Clone RT_MANGLER(RTAsn1NumericString_Clone) +# define RTAsn1NumericString_Compare RT_MANGLER(RTAsn1NumericString_Compare) +# define RTAsn1NumericString_Delete RT_MANGLER(RTAsn1NumericString_Delete) +# define RTAsn1NumericString_Enum RT_MANGLER(RTAsn1NumericString_Enum) +# define RTAsn1NumericString_Init RT_MANGLER(RTAsn1NumericString_Init) +# define RTAsn1PrintableString_CheckSanity RT_MANGLER(RTAsn1PrintableString_CheckSanity) +# define RTAsn1PrintableString_Clone RT_MANGLER(RTAsn1PrintableString_Clone) +# define RTAsn1PrintableString_Compare RT_MANGLER(RTAsn1PrintableString_Compare) +# define RTAsn1PrintableString_Delete RT_MANGLER(RTAsn1PrintableString_Delete) +# define RTAsn1PrintableString_Enum RT_MANGLER(RTAsn1PrintableString_Enum) +# define RTAsn1PrintableString_Init RT_MANGLER(RTAsn1PrintableString_Init) +# define RTAsn1SeqOfStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfStrings_CheckSanity) +# define RTAsn1SeqOfStrings_Clone RT_MANGLER(RTAsn1SeqOfStrings_Clone) +# define RTAsn1SeqOfStrings_Compare RT_MANGLER(RTAsn1SeqOfStrings_Compare) +# define RTAsn1SeqOfStrings_Delete RT_MANGLER(RTAsn1SeqOfStrings_Delete) +# define RTAsn1SeqOfStrings_Enum RT_MANGLER(RTAsn1SeqOfStrings_Enum) +# define RTAsn1SeqOfStrings_Init RT_MANGLER(RTAsn1SeqOfStrings_Init) +# define RTAsn1SetOfStrings_CheckSanity RT_MANGLER(RTAsn1SetOfStrings_CheckSanity) +# define RTAsn1SetOfStrings_Clone RT_MANGLER(RTAsn1SetOfStrings_Clone) +# define RTAsn1SetOfStrings_Compare RT_MANGLER(RTAsn1SetOfStrings_Compare) +# define RTAsn1SetOfStrings_Delete RT_MANGLER(RTAsn1SetOfStrings_Delete) +# define RTAsn1SetOfStrings_Enum RT_MANGLER(RTAsn1SetOfStrings_Enum) +# define RTAsn1SetOfStrings_Init RT_MANGLER(RTAsn1SetOfStrings_Init) +# define RTAsn1String_CheckSanity RT_MANGLER(RTAsn1String_CheckSanity) +# define RTAsn1String_Clone RT_MANGLER(RTAsn1String_Clone) +# define RTAsn1String_Compare RT_MANGLER(RTAsn1String_Compare) +# define RTAsn1String_CompareEx RT_MANGLER(RTAsn1String_CompareEx) +# define RTAsn1String_CompareWithString RT_MANGLER(RTAsn1String_CompareWithString) +# define RTAsn1String_Delete RT_MANGLER(RTAsn1String_Delete) +# define RTAsn1String_Enum RT_MANGLER(RTAsn1String_Enum) +# define RTAsn1String_Init RT_MANGLER(RTAsn1String_Init) +# define RTAsn1String_InitEx RT_MANGLER(RTAsn1String_InitEx) +# define RTAsn1String_InitWithValue RT_MANGLER(RTAsn1String_InitWithValue) +# define RTAsn1String_QueryUtf8 RT_MANGLER(RTAsn1String_QueryUtf8) +# define RTAsn1String_QueryUtf8Len RT_MANGLER(RTAsn1String_QueryUtf8Len) +# define RTAsn1String_RecodeAsUtf8 RT_MANGLER(RTAsn1String_RecodeAsUtf8) +# define RTAsn1T61String_CheckSanity RT_MANGLER(RTAsn1T61String_CheckSanity) +# define RTAsn1T61String_Clone RT_MANGLER(RTAsn1T61String_Clone) +# define RTAsn1T61String_Compare RT_MANGLER(RTAsn1T61String_Compare) +# define RTAsn1T61String_Delete RT_MANGLER(RTAsn1T61String_Delete) +# define RTAsn1T61String_Enum RT_MANGLER(RTAsn1T61String_Enum) +# define RTAsn1T61String_Init RT_MANGLER(RTAsn1T61String_Init) +# define RTAsn1UniversalString_CheckSanity RT_MANGLER(RTAsn1UniversalString_CheckSanity) +# define RTAsn1UniversalString_Clone RT_MANGLER(RTAsn1UniversalString_Clone) +# define RTAsn1UniversalString_Compare RT_MANGLER(RTAsn1UniversalString_Compare) +# define RTAsn1UniversalString_Delete RT_MANGLER(RTAsn1UniversalString_Delete) +# define RTAsn1UniversalString_Enum RT_MANGLER(RTAsn1UniversalString_Enum) +# define RTAsn1UniversalString_Init RT_MANGLER(RTAsn1UniversalString_Init) +# define RTAsn1Utf8String_CheckSanity RT_MANGLER(RTAsn1Utf8String_CheckSanity) +# define RTAsn1Utf8String_Clone RT_MANGLER(RTAsn1Utf8String_Clone) +# define RTAsn1Utf8String_Compare RT_MANGLER(RTAsn1Utf8String_Compare) +# define RTAsn1Utf8String_Delete RT_MANGLER(RTAsn1Utf8String_Delete) +# define RTAsn1Utf8String_Enum RT_MANGLER(RTAsn1Utf8String_Enum) +# define RTAsn1Utf8String_Init RT_MANGLER(RTAsn1Utf8String_Init) +# define RTAsn1VisibleString_CheckSanity RT_MANGLER(RTAsn1VisibleString_CheckSanity) +# define RTAsn1VisibleString_Clone RT_MANGLER(RTAsn1VisibleString_Clone) +# define RTAsn1VisibleString_Compare RT_MANGLER(RTAsn1VisibleString_Compare) +# define RTAsn1VisibleString_Delete RT_MANGLER(RTAsn1VisibleString_Delete) +# define RTAsn1VisibleString_Enum RT_MANGLER(RTAsn1VisibleString_Enum) +# define RTAsn1VisibleString_Init RT_MANGLER(RTAsn1VisibleString_Init) +# define RTAsn1BmpString_DecodeAsn1 RT_MANGLER(RTAsn1BmpString_DecodeAsn1) +# define RTAsn1GeneralString_DecodeAsn1 RT_MANGLER(RTAsn1GeneralString_DecodeAsn1) +# define RTAsn1GraphicString_DecodeAsn1 RT_MANGLER(RTAsn1GraphicString_DecodeAsn1) +# define RTAsn1Ia5String_DecodeAsn1 RT_MANGLER(RTAsn1Ia5String_DecodeAsn1) +# define RTAsn1NumericString_DecodeAsn1 RT_MANGLER(RTAsn1NumericString_DecodeAsn1) +# define RTAsn1PrintableString_DecodeAsn1 RT_MANGLER(RTAsn1PrintableString_DecodeAsn1) +# define RTAsn1SeqOfStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfStrings_DecodeAsn1) +# define RTAsn1SetOfStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfStrings_DecodeAsn1) +# define RTAsn1String_DecodeAsn1 RT_MANGLER(RTAsn1String_DecodeAsn1) +# define RTAsn1T61String_DecodeAsn1 RT_MANGLER(RTAsn1T61String_DecodeAsn1) +# define RTAsn1UniversalString_DecodeAsn1 RT_MANGLER(RTAsn1UniversalString_DecodeAsn1) +# define RTAsn1Utf8String_DecodeAsn1 RT_MANGLER(RTAsn1Utf8String_DecodeAsn1) +# define RTAsn1VisibleString_DecodeAsn1 RT_MANGLER(RTAsn1VisibleString_DecodeAsn1) +# define RTAsn1GeneralizedTime_CheckSanity RT_MANGLER(RTAsn1GeneralizedTime_CheckSanity) +# define RTAsn1GeneralizedTime_Clone RT_MANGLER(RTAsn1GeneralizedTime_Clone) +# define RTAsn1GeneralizedTime_Compare RT_MANGLER(RTAsn1GeneralizedTime_Compare) +# define RTAsn1GeneralizedTime_Delete RT_MANGLER(RTAsn1GeneralizedTime_Delete) +# define RTAsn1GeneralizedTime_Enum RT_MANGLER(RTAsn1GeneralizedTime_Enum) +# define RTAsn1GeneralizedTime_Init RT_MANGLER(RTAsn1GeneralizedTime_Init) +# define RTAsn1SeqOfTimes_CheckSanity RT_MANGLER(RTAsn1SeqOfTimes_CheckSanity) +# define RTAsn1SeqOfTimes_Clone RT_MANGLER(RTAsn1SeqOfTimes_Clone) +# define RTAsn1SeqOfTimes_Compare RT_MANGLER(RTAsn1SeqOfTimes_Compare) +# define RTAsn1SeqOfTimes_Delete RT_MANGLER(RTAsn1SeqOfTimes_Delete) +# define RTAsn1SeqOfTimes_Enum RT_MANGLER(RTAsn1SeqOfTimes_Enum) +# define RTAsn1SeqOfTimes_Init RT_MANGLER(RTAsn1SeqOfTimes_Init) +# define RTAsn1SetOfTimes_CheckSanity RT_MANGLER(RTAsn1SetOfTimes_CheckSanity) +# define RTAsn1SetOfTimes_Clone RT_MANGLER(RTAsn1SetOfTimes_Clone) +# define RTAsn1SetOfTimes_Compare RT_MANGLER(RTAsn1SetOfTimes_Compare) +# define RTAsn1SetOfTimes_Delete RT_MANGLER(RTAsn1SetOfTimes_Delete) +# define RTAsn1SetOfTimes_Enum RT_MANGLER(RTAsn1SetOfTimes_Enum) +# define RTAsn1SetOfTimes_Init RT_MANGLER(RTAsn1SetOfTimes_Init) +# define RTAsn1Time_CheckSanity RT_MANGLER(RTAsn1Time_CheckSanity) +# define RTAsn1Time_Clone RT_MANGLER(RTAsn1Time_Clone) +# define RTAsn1Time_Compare RT_MANGLER(RTAsn1Time_Compare) +# define RTAsn1Time_CompareWithTimeSpec RT_MANGLER(RTAsn1Time_CompareWithTimeSpec) +# define RTAsn1Time_Delete RT_MANGLER(RTAsn1Time_Delete) +# define RTAsn1Time_Enum RT_MANGLER(RTAsn1Time_Enum) +# define RTAsn1Time_Init RT_MANGLER(RTAsn1Time_Init) +# define RTAsn1UtcTime_CheckSanity RT_MANGLER(RTAsn1UtcTime_CheckSanity) +# define RTAsn1UtcTime_Clone RT_MANGLER(RTAsn1UtcTime_Clone) +# define RTAsn1UtcTime_Compare RT_MANGLER(RTAsn1UtcTime_Compare) +# define RTAsn1UtcTime_Delete RT_MANGLER(RTAsn1UtcTime_Delete) +# define RTAsn1UtcTime_Enum RT_MANGLER(RTAsn1UtcTime_Enum) +# define RTAsn1UtcTime_Init RT_MANGLER(RTAsn1UtcTime_Init) +# define RTAsn1GeneralizedTime_DecodeAsn1 RT_MANGLER(RTAsn1GeneralizedTime_DecodeAsn1) +# define RTAsn1SeqOfTimes_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfTimes_DecodeAsn1) +# define RTAsn1SetOfTimes_DecodeAsn1 RT_MANGLER(RTAsn1SetOfTimes_DecodeAsn1) +# define RTAsn1Time_DecodeAsn1 RT_MANGLER(RTAsn1Time_DecodeAsn1) +# define RTAsn1UtcTime_DecodeAsn1 RT_MANGLER(RTAsn1UtcTime_DecodeAsn1) +# define RTMd2 RT_MANGLER(RTMd2) +# define RTMd2Final RT_MANGLER(RTMd2Final) +# define RTMd2Init RT_MANGLER(RTMd2Init) +# define RTMd2Update RT_MANGLER(RTMd2Update) +# define RTMd2FromString RT_MANGLER(RTMd2FromString) +# define RTMd2ToString RT_MANGLER(RTMd2ToString) +# define RTCrDigestClone RT_MANGLER(RTCrDigestClone) +# define RTCrDigestCreate RT_MANGLER(RTCrDigestCreate) +# define RTCrDigestFinal RT_MANGLER(RTCrDigestFinal) +# define RTCrDigestGetConsumedSize RT_MANGLER(RTCrDigestGetConsumedSize) +# define RTCrDigestGetHash RT_MANGLER(RTCrDigestGetHash) +# define RTCrDigestGetHashSize RT_MANGLER(RTCrDigestGetHashSize) +# define RTCrDigestGetType RT_MANGLER(RTCrDigestGetType) +# define RTCrDigestGetAlgorithmOid RT_MANGLER(RTCrDigestGetAlgorithmOid) +# define RTCrDigestIsFinalized RT_MANGLER(RTCrDigestIsFinalized) +# define RTCrDigestMatch RT_MANGLER(RTCrDigestMatch) +# define RTCrDigestRelease RT_MANGLER(RTCrDigestRelease) +# define RTCrDigestReset RT_MANGLER(RTCrDigestReset) +# define RTCrDigestRetain RT_MANGLER(RTCrDigestRetain) +# define RTCrDigestUpdate RT_MANGLER(RTCrDigestUpdate) +# define RTCrDigestUpdateFromVfsFile RT_MANGLER(RTCrDigestUpdateFromVfsFile) +# define RTCrDigestCreateByObjId RT_MANGLER(RTCrDigestCreateByObjId) +# define RTCrDigestCreateByObjIdString RT_MANGLER(RTCrDigestCreateByObjIdString) +# define RTCrDigestCreateByType RT_MANGLER(RTCrDigestCreateByType) +# define RTCrDigestFindByObjId RT_MANGLER(RTCrDigestFindByObjId) +# define RTCrDigestFindByObjIdString RT_MANGLER(RTCrDigestFindByObjIdString) +# define RTCrDigestFindByType RT_MANGLER(RTCrDigestFindByType) +# define RTCrDigestTypeToAlgorithmOid RT_MANGLER(RTCrDigestTypeToAlgorithmOid) +# define RTCrDigestTypeToName RT_MANGLER(RTCrDigestTypeToName) +# define RTCrDigestTypeToHashSize RT_MANGLER(RTCrDigestTypeToHashSize) +# define RTCrRsaDigestInfo_DecodeAsn1 RT_MANGLER(RTCrRsaDigestInfo_DecodeAsn1) +# define RTCrRsaOtherPrimeInfo_DecodeAsn1 RT_MANGLER(RTCrRsaOtherPrimeInfo_DecodeAsn1) +# define RTCrRsaOtherPrimeInfos_DecodeAsn1 RT_MANGLER(RTCrRsaOtherPrimeInfos_DecodeAsn1) +# define RTCrRsaPrivateKey_DecodeAsn1 RT_MANGLER(RTCrRsaPrivateKey_DecodeAsn1) +# define RTCrRsaPublicKey_DecodeAsn1 RT_MANGLER(RTCrRsaPublicKey_DecodeAsn1) +# define RTCrRsaDigestInfo_Compare RT_MANGLER(RTCrRsaDigestInfo_Compare) +# define RTCrRsaDigestInfo_Delete RT_MANGLER(RTCrRsaDigestInfo_Delete) +# define RTCrRsaDigestInfo_Enum RT_MANGLER(RTCrRsaDigestInfo_Enum) +# define RTCrRsaOtherPrimeInfo_Compare RT_MANGLER(RTCrRsaOtherPrimeInfo_Compare) +# define RTCrRsaOtherPrimeInfo_Delete RT_MANGLER(RTCrRsaOtherPrimeInfo_Delete) +# define RTCrRsaOtherPrimeInfo_Enum RT_MANGLER(RTCrRsaOtherPrimeInfo_Enum) +# define RTCrRsaOtherPrimeInfos_Compare RT_MANGLER(RTCrRsaOtherPrimeInfos_Compare) +# define RTCrRsaOtherPrimeInfos_Delete RT_MANGLER(RTCrRsaOtherPrimeInfos_Delete) +# define RTCrRsaOtherPrimeInfos_Enum RT_MANGLER(RTCrRsaOtherPrimeInfos_Enum) +# define RTCrRsaPrivateKey_Compare RT_MANGLER(RTCrRsaPrivateKey_Compare) +# define RTCrRsaPrivateKey_Delete RT_MANGLER(RTCrRsaPrivateKey_Delete) +# define RTCrRsaPrivateKey_Enum RT_MANGLER(RTCrRsaPrivateKey_Enum) +# define RTCrRsaPublicKey_Compare RT_MANGLER(RTCrRsaPublicKey_Compare) +# define RTCrRsaPublicKey_Delete RT_MANGLER(RTCrRsaPublicKey_Delete) +# define RTCrRsaPublicKey_Enum RT_MANGLER(RTCrRsaPublicKey_Enum) +# define RTCrRsaDigestInfo_Clone RT_MANGLER(RTCrRsaDigestInfo_Clone) +# define RTCrRsaDigestInfo_Init RT_MANGLER(RTCrRsaDigestInfo_Init) +# define RTCrRsaOtherPrimeInfo_Clone RT_MANGLER(RTCrRsaOtherPrimeInfo_Clone) +# define RTCrRsaOtherPrimeInfo_Init RT_MANGLER(RTCrRsaOtherPrimeInfo_Init) +# define RTCrRsaOtherPrimeInfos_Clone RT_MANGLER(RTCrRsaOtherPrimeInfos_Clone) +# define RTCrRsaOtherPrimeInfos_Init RT_MANGLER(RTCrRsaOtherPrimeInfos_Init) +# define RTCrRsaPrivateKey_Clone RT_MANGLER(RTCrRsaPrivateKey_Clone) +# define RTCrRsaPrivateKey_Init RT_MANGLER(RTCrRsaPrivateKey_Init) +# define RTCrRsaPublicKey_Clone RT_MANGLER(RTCrRsaPublicKey_Clone) +# define RTCrRsaPublicKey_Init RT_MANGLER(RTCrRsaPublicKey_Init) +# define RTCrRsaDigestInfo_CheckSanity RT_MANGLER(RTCrRsaDigestInfo_CheckSanity) +# define RTCrRsaOtherPrimeInfo_CheckSanity RT_MANGLER(RTCrRsaOtherPrimeInfo_CheckSanity) +# define RTCrRsaOtherPrimeInfos_CheckSanity RT_MANGLER(RTCrRsaOtherPrimeInfos_CheckSanity) +# define RTCrRsaPrivateKey_CheckSanity RT_MANGLER(RTCrRsaPrivateKey_CheckSanity) +# define RTCrRsaPublicKey_CheckSanity RT_MANGLER(RTCrRsaPublicKey_CheckSanity) +# define RTCrPemFindFirstSectionInContent RT_MANGLER(RTCrPemFindFirstSectionInContent) +# define RTCrPemFreeSections RT_MANGLER(RTCrPemFreeSections) +# define RTCrPemParseContent RT_MANGLER(RTCrPemParseContent) +# define RTCrPemReadFile RT_MANGLER(RTCrPemReadFile) +# define RTCrPkcs7Attribute_DecodeAsn1 RT_MANGLER(RTCrPkcs7Attribute_DecodeAsn1) +# define RTCrPkcs7Attributes_DecodeAsn1 RT_MANGLER(RTCrPkcs7Attributes_DecodeAsn1) +# define RTCrPkcs7ContentInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7ContentInfo_DecodeAsn1) +# define RTCrPkcs7DigestInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7DigestInfo_DecodeAsn1) +# define RTCrPkcs7IssuerAndSerialNumber_DecodeAsn1 RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_DecodeAsn1) +# define RTCrPkcs7SignedData_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignedData_DecodeAsn1) +# define RTCrPkcs7SignerInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignerInfo_DecodeAsn1) +# define RTCrPkcs7SignerInfos_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignerInfos_DecodeAsn1) +# define RTCrPkcs7Attribute_Compare RT_MANGLER(RTCrPkcs7Attribute_Compare) +# define RTCrPkcs7Attribute_Delete RT_MANGLER(RTCrPkcs7Attribute_Delete) +# define RTCrPkcs7Attribute_Enum RT_MANGLER(RTCrPkcs7Attribute_Enum) +# define RTCrPkcs7Attributes_Compare RT_MANGLER(RTCrPkcs7Attributes_Compare) +# define RTCrPkcs7Attributes_Delete RT_MANGLER(RTCrPkcs7Attributes_Delete) +# define RTCrPkcs7Attributes_Enum RT_MANGLER(RTCrPkcs7Attributes_Enum) +# define RTCrPkcs7ContentInfo_Compare RT_MANGLER(RTCrPkcs7ContentInfo_Compare) +# define RTCrPkcs7ContentInfo_Delete RT_MANGLER(RTCrPkcs7ContentInfo_Delete) +# define RTCrPkcs7ContentInfo_Enum RT_MANGLER(RTCrPkcs7ContentInfo_Enum) +# define RTCrPkcs7ContentInfo_IsSignedData RT_MANGLER(RTCrPkcs7ContentInfo_IsSignedData) +# define RTCrPkcs7DigestInfo_Compare RT_MANGLER(RTCrPkcs7DigestInfo_Compare) +# define RTCrPkcs7DigestInfo_Delete RT_MANGLER(RTCrPkcs7DigestInfo_Delete) +# define RTCrPkcs7DigestInfo_Enum RT_MANGLER(RTCrPkcs7DigestInfo_Enum) +# define RTCrPkcs7IssuerAndSerialNumber_Compare RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Compare) +# define RTCrPkcs7IssuerAndSerialNumber_Delete RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Delete) +# define RTCrPkcs7IssuerAndSerialNumber_Enum RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Enum) +# define RTCrPkcs7SignedData_Compare RT_MANGLER(RTCrPkcs7SignedData_Compare) +# define RTCrPkcs7SignedData_Delete RT_MANGLER(RTCrPkcs7SignedData_Delete) +# define RTCrPkcs7SignedData_Enum RT_MANGLER(RTCrPkcs7SignedData_Enum) +# define RTCrPkcs7SignerInfo_Compare RT_MANGLER(RTCrPkcs7SignerInfo_Compare) +# define RTCrPkcs7SignerInfo_Delete RT_MANGLER(RTCrPkcs7SignerInfo_Delete) +# define RTCrPkcs7SignerInfo_Enum RT_MANGLER(RTCrPkcs7SignerInfo_Enum) +# define RTCrPkcs7SignerInfo_GetSigningTime RT_MANGLER(RTCrPkcs7SignerInfo_GetSigningTime) +# define RTCrPkcs7SignerInfo_GetMsTimestamp RT_MANGLER(RTCrPkcs7SignerInfo_GetMsTimestamp) +# define RTCrPkcs7SignerInfos_Compare RT_MANGLER(RTCrPkcs7SignerInfos_Compare) +# define RTCrPkcs7SignerInfos_Delete RT_MANGLER(RTCrPkcs7SignerInfos_Delete) +# define RTCrPkcs7SignerInfos_Enum RT_MANGLER(RTCrPkcs7SignerInfos_Enum) +# define RTCrPkcs7Attribute_Clone RT_MANGLER(RTCrPkcs7Attribute_Clone) +# define RTCrPkcs7Attribute_Init RT_MANGLER(RTCrPkcs7Attribute_Init) +# define RTCrPkcs7Attributes_Clone RT_MANGLER(RTCrPkcs7Attributes_Clone) +# define RTCrPkcs7Attributes_Init RT_MANGLER(RTCrPkcs7Attributes_Init) +# define RTCrPkcs7ContentInfo_Clone RT_MANGLER(RTCrPkcs7ContentInfo_Clone) +# define RTCrPkcs7ContentInfo_Init RT_MANGLER(RTCrPkcs7ContentInfo_Init) +# define RTCrPkcs7DigestInfo_Clone RT_MANGLER(RTCrPkcs7DigestInfo_Clone) +# define RTCrPkcs7DigestInfo_Init RT_MANGLER(RTCrPkcs7DigestInfo_Init) +# define RTCrPkcs7IssuerAndSerialNumber_Clone RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Clone) +# define RTCrPkcs7IssuerAndSerialNumber_Init RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Init) +# define RTCrPkcs7SignedData_Clone RT_MANGLER(RTCrPkcs7SignedData_Clone) +# define RTCrPkcs7SignedData_Init RT_MANGLER(RTCrPkcs7SignedData_Init) +# define RTCrPkcs7SignerInfo_Clone RT_MANGLER(RTCrPkcs7SignerInfo_Clone) +# define RTCrPkcs7SignerInfo_Init RT_MANGLER(RTCrPkcs7SignerInfo_Init) +# define RTCrPkcs7SignerInfos_Clone RT_MANGLER(RTCrPkcs7SignerInfos_Clone) +# define RTCrPkcs7SignerInfos_Init RT_MANGLER(RTCrPkcs7SignerInfos_Init) +# define RTCrPkcs7Attribute_CheckSanity RT_MANGLER(RTCrPkcs7Attribute_CheckSanity) +# define RTCrPkcs7Attributes_CheckSanity RT_MANGLER(RTCrPkcs7Attributes_CheckSanity) +# define RTCrPkcs7ContentInfo_CheckSanity RT_MANGLER(RTCrPkcs7ContentInfo_CheckSanity) +# define RTCrPkcs7DigestInfo_CheckSanity RT_MANGLER(RTCrPkcs7DigestInfo_CheckSanity) +# define RTCrPkcs7IssuerAndSerialNumber_CheckSanity RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_CheckSanity) +# define RTCrPkcs7SignedData_CheckSanity RT_MANGLER(RTCrPkcs7SignedData_CheckSanity) +# define RTCrPkcs7SignerInfo_CheckSanity RT_MANGLER(RTCrPkcs7SignerInfo_CheckSanity) +# define RTCrPkcs7SignerInfos_CheckSanity RT_MANGLER(RTCrPkcs7SignerInfos_CheckSanity) +# define RTCrPkcs7VerifyCertCallbackCodeSigning RT_MANGLER(RTCrPkcs7VerifyCertCallbackCodeSigning) +# define RTCrPkcs7VerifyCertCallbackDefault RT_MANGLER(RTCrPkcs7VerifyCertCallbackDefault) +# define RTCrPkcs7VerifySignedData RT_MANGLER(RTCrPkcs7VerifySignedData) +# define RTCrPkcs7Cert_CheckSanity RT_MANGLER(RTCrPkcs7Cert_CheckSanity) +# define RTCrPkcs7Cert_Clone RT_MANGLER(RTCrPkcs7Cert_Clone) +# define RTCrPkcs7Cert_Compare RT_MANGLER(RTCrPkcs7Cert_Compare) +# define RTCrPkcs7Cert_DecodeAsn1 RT_MANGLER(RTCrPkcs7Cert_DecodeAsn1) +# define RTCrPkcs7Cert_Delete RT_MANGLER(RTCrPkcs7Cert_Delete) +# define RTCrPkcs7Cert_Enum RT_MANGLER(RTCrPkcs7Cert_Enum) +# define RTCrPkcs7Cert_Init RT_MANGLER(RTCrPkcs7Cert_Init) +# define RTCrPkcs7SetOfCerts_CheckSanity RT_MANGLER(RTCrPkcs7SetOfCerts_CheckSanity) +# define RTCrPkcs7SetOfCerts_Clone RT_MANGLER(RTCrPkcs7SetOfCerts_Clone) +# define RTCrPkcs7SetOfCerts_Compare RT_MANGLER(RTCrPkcs7SetOfCerts_Compare) +# define RTCrPkcs7SetOfCerts_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfCerts_DecodeAsn1) +# define RTCrPkcs7SetOfCerts_Delete RT_MANGLER(RTCrPkcs7SetOfCerts_Delete) +# define RTCrPkcs7SetOfCerts_Enum RT_MANGLER(RTCrPkcs7SetOfCerts_Enum) +# define RTCrPkcs7SetOfCerts_Init RT_MANGLER(RTCrPkcs7SetOfCerts_Init) +# define RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber RT_MANGLER(RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber) +# define RTCrPkcs7SetOfContentInfos_CheckSanity RT_MANGLER(RTCrPkcs7SetOfContentInfos_CheckSanity) +# define RTCrPkcs7SetOfContentInfos_Clone RT_MANGLER(RTCrPkcs7SetOfContentInfos_Clone) +# define RTCrPkcs7SetOfContentInfos_Compare RT_MANGLER(RTCrPkcs7SetOfContentInfos_Compare) +# define RTCrPkcs7SetOfContentInfos_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfContentInfos_DecodeAsn1) +# define RTCrPkcs7SetOfContentInfos_Delete RT_MANGLER(RTCrPkcs7SetOfContentInfos_Delete) +# define RTCrPkcs7SetOfContentInfos_Enum RT_MANGLER(RTCrPkcs7SetOfContentInfos_Enum) +# define RTCrPkcs7SetOfContentInfos_Init RT_MANGLER(RTCrPkcs7SetOfContentInfos_Init) +# define RTCrPkcs7SetOfSignedData_CheckSanity RT_MANGLER(RTCrPkcs7SetOfSignedData_CheckSanity) +# define RTCrPkcs7SetOfSignedData_Clone RT_MANGLER(RTCrPkcs7SetOfSignedData_Clone) +# define RTCrPkcs7SetOfSignedData_Compare RT_MANGLER(RTCrPkcs7SetOfSignedData_Compare) +# define RTCrPkcs7SetOfSignedData_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfSignedData_DecodeAsn1) +# define RTCrPkcs7SetOfSignedData_Delete RT_MANGLER(RTCrPkcs7SetOfSignedData_Delete) +# define RTCrPkcs7SetOfSignedData_Enum RT_MANGLER(RTCrPkcs7SetOfSignedData_Enum) +# define RTCrPkcs7SetOfSignedData_Init RT_MANGLER(RTCrPkcs7SetOfSignedData_Init) +# define RTCrPkixSignatureCreateByObjId RT_MANGLER(RTCrPkixSignatureCreateByObjId) +# define RTCrPkixSignatureCreateByObjIdString RT_MANGLER(RTCrPkixSignatureCreateByObjIdString) +# define RTCrPkixSignatureCreate RT_MANGLER(RTCrPkixSignatureCreate) +# define RTCrPkixSignatureRelease RT_MANGLER(RTCrPkixSignatureRelease) +# define RTCrPkixSignatureRetain RT_MANGLER(RTCrPkixSignatureRetain) +# define RTCrPkixSignatureSign RT_MANGLER(RTCrPkixSignatureSign) +# define RTCrPkixSignatureVerify RT_MANGLER(RTCrPkixSignatureVerify) +# define RTCrPkixSignatureVerifyBitString RT_MANGLER(RTCrPkixSignatureVerifyBitString) +# define RTCrPkixSignatureVerifyOctetString RT_MANGLER(RTCrPkixSignatureVerifyOctetString) +# define RTCrPkixGetCiperOidFromSignatureAlgorithm RT_MANGLER(RTCrPkixGetCiperOidFromSignatureAlgorithm) +# define RTCrPkixPubKeyVerifySignature RT_MANGLER(RTCrPkixPubKeyVerifySignature) +# define RTCrPkixPubKeyVerifySignedDigest RT_MANGLER(RTCrPkixPubKeyVerifySignedDigest) +# define RTCrSpcAttributeTypeAndOptionalValue_DecodeAsn1 RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_DecodeAsn1) +# define RTCrSpcIndirectDataContent_DecodeAsn1 RT_MANGLER(RTCrSpcIndirectDataContent_DecodeAsn1) +# define RTCrSpcLink_DecodeAsn1 RT_MANGLER(RTCrSpcLink_DecodeAsn1) +# define RTCrSpcPeImageData_DecodeAsn1 RT_MANGLER(RTCrSpcPeImageData_DecodeAsn1) +# define RTCrSpcSerializedObjectAttribute_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObjectAttribute_DecodeAsn1) +# define RTCrSpcSerializedObjectAttributes_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObjectAttributes_DecodeAsn1) +# define RTCrSpcSerializedObject_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObject_DecodeAsn1) +# define RTCrSpcSerializedPageHashes_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedPageHashes_DecodeAsn1) +# define RTCrSpcString_DecodeAsn1 RT_MANGLER(RTCrSpcString_DecodeAsn1) +# define RTCrSpcAttributeTypeAndOptionalValue_Compare RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Compare) +# define RTCrSpcAttributeTypeAndOptionalValue_Delete RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Delete) +# define RTCrSpcAttributeTypeAndOptionalValue_Enum RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Enum) +# define RTCrSpcIndirectDataContent_Compare RT_MANGLER(RTCrSpcIndirectDataContent_Compare) +# define RTCrSpcIndirectDataContent_Delete RT_MANGLER(RTCrSpcIndirectDataContent_Delete) +# define RTCrSpcIndirectDataContent_Enum RT_MANGLER(RTCrSpcIndirectDataContent_Enum) +# define RTCrSpcIndirectDataContent_GetPeImageObjAttrib RT_MANGLER(RTCrSpcIndirectDataContent_GetPeImageObjAttrib) +# define RTCrSpcLink_Compare RT_MANGLER(RTCrSpcLink_Compare) +# define RTCrSpcLink_Delete RT_MANGLER(RTCrSpcLink_Delete) +# define RTCrSpcLink_Enum RT_MANGLER(RTCrSpcLink_Enum) +# define RTCrSpcPeImageData_Compare RT_MANGLER(RTCrSpcPeImageData_Compare) +# define RTCrSpcPeImageData_Delete RT_MANGLER(RTCrSpcPeImageData_Delete) +# define RTCrSpcPeImageData_Enum RT_MANGLER(RTCrSpcPeImageData_Enum) +# define RTCrSpcSerializedObjectAttribute_Compare RT_MANGLER(RTCrSpcSerializedObjectAttribute_Compare) +# define RTCrSpcSerializedObjectAttribute_Delete RT_MANGLER(RTCrSpcSerializedObjectAttribute_Delete) +# define RTCrSpcSerializedObjectAttribute_Enum RT_MANGLER(RTCrSpcSerializedObjectAttribute_Enum) +# define RTCrSpcSerializedObjectAttributes_Compare RT_MANGLER(RTCrSpcSerializedObjectAttributes_Compare) +# define RTCrSpcSerializedObjectAttributes_Delete RT_MANGLER(RTCrSpcSerializedObjectAttributes_Delete) +# define RTCrSpcSerializedObjectAttributes_Enum RT_MANGLER(RTCrSpcSerializedObjectAttributes_Enum) +# define RTCrSpcSerializedObject_Compare RT_MANGLER(RTCrSpcSerializedObject_Compare) +# define RTCrSpcSerializedObject_Delete RT_MANGLER(RTCrSpcSerializedObject_Delete) +# define RTCrSpcSerializedObject_Enum RT_MANGLER(RTCrSpcSerializedObject_Enum) +# define RTCrSpcSerializedPageHashes_Compare RT_MANGLER(RTCrSpcSerializedPageHashes_Compare) +# define RTCrSpcSerializedPageHashes_Delete RT_MANGLER(RTCrSpcSerializedPageHashes_Delete) +# define RTCrSpcSerializedPageHashes_Enum RT_MANGLER(RTCrSpcSerializedPageHashes_Enum) +# define RTCrSpcSerializedPageHashes_UpdateDerivedData RT_MANGLER(RTCrSpcSerializedPageHashes_UpdateDerivedData) +# define RTCrSpcString_Compare RT_MANGLER(RTCrSpcString_Compare) +# define RTCrSpcString_Delete RT_MANGLER(RTCrSpcString_Delete) +# define RTCrSpcString_Enum RT_MANGLER(RTCrSpcString_Enum) +# define RTCrSpcAttributeTypeAndOptionalValue_Clone RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Clone) +# define RTCrSpcAttributeTypeAndOptionalValue_Init RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Init) +# define RTCrSpcIndirectDataContent_Clone RT_MANGLER(RTCrSpcIndirectDataContent_Clone) +# define RTCrSpcIndirectDataContent_Init RT_MANGLER(RTCrSpcIndirectDataContent_Init) +# define RTCrSpcLink_Clone RT_MANGLER(RTCrSpcLink_Clone) +# define RTCrSpcLink_Init RT_MANGLER(RTCrSpcLink_Init) +# define RTCrSpcPeImageData_Clone RT_MANGLER(RTCrSpcPeImageData_Clone) +# define RTCrSpcPeImageData_Init RT_MANGLER(RTCrSpcPeImageData_Init) +# define RTCrSpcSerializedObjectAttribute_Clone RT_MANGLER(RTCrSpcSerializedObjectAttribute_Clone) +# define RTCrSpcSerializedObjectAttribute_Init RT_MANGLER(RTCrSpcSerializedObjectAttribute_Init) +# define RTCrSpcSerializedObjectAttributes_Clone RT_MANGLER(RTCrSpcSerializedObjectAttributes_Clone) +# define RTCrSpcSerializedObjectAttributes_Init RT_MANGLER(RTCrSpcSerializedObjectAttributes_Init) +# define RTCrSpcSerializedObject_Clone RT_MANGLER(RTCrSpcSerializedObject_Clone) +# define RTCrSpcSerializedObject_Init RT_MANGLER(RTCrSpcSerializedObject_Init) +# define RTCrSpcSerializedPageHashes_Clone RT_MANGLER(RTCrSpcSerializedPageHashes_Clone) +# define RTCrSpcSerializedPageHashes_Init RT_MANGLER(RTCrSpcSerializedPageHashes_Init) +# define RTCrSpcString_Clone RT_MANGLER(RTCrSpcString_Clone) +# define RTCrSpcString_Init RT_MANGLER(RTCrSpcString_Init) +# define RTCrSpcAttributeTypeAndOptionalValue_CheckSanity RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_CheckSanity) +# define RTCrSpcIndirectDataContent_CheckSanity RT_MANGLER(RTCrSpcIndirectDataContent_CheckSanity) +# define RTCrSpcIndirectDataContent_CheckSanityEx RT_MANGLER(RTCrSpcIndirectDataContent_CheckSanityEx) +# define RTCrSpcLink_CheckSanity RT_MANGLER(RTCrSpcLink_CheckSanity) +# define RTCrSpcPeImageData_CheckSanity RT_MANGLER(RTCrSpcPeImageData_CheckSanity) +# define RTCrSpcSerializedObjectAttribute_CheckSanity RT_MANGLER(RTCrSpcSerializedObjectAttribute_CheckSanity) +# define RTCrSpcSerializedObjectAttributes_CheckSanity RT_MANGLER(RTCrSpcSerializedObjectAttributes_CheckSanity) +# define RTCrSpcSerializedObject_CheckSanity RT_MANGLER(RTCrSpcSerializedObject_CheckSanity) +# define RTCrSpcSerializedPageHashes_CheckSanity RT_MANGLER(RTCrSpcSerializedPageHashes_CheckSanity) +# define RTCrSpcString_CheckSanity RT_MANGLER(RTCrSpcString_CheckSanity) +# define RTCrX509AlgorithmIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509AlgorithmIdentifier_DecodeAsn1) +# define RTCrX509AlgorithmIdentifiers_DecodeAsn1 RT_MANGLER(RTCrX509AlgorithmIdentifiers_DecodeAsn1) +# define RTCrX509AttributeTypeAndValue_DecodeAsn1 RT_MANGLER(RTCrX509AttributeTypeAndValue_DecodeAsn1) +# define RTCrX509AttributeTypeAndValues_DecodeAsn1 RT_MANGLER(RTCrX509AttributeTypeAndValues_DecodeAsn1) +# define RTCrX509AuthorityKeyIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509AuthorityKeyIdentifier_DecodeAsn1) +# define RTCrX509BasicConstraints_DecodeAsn1 RT_MANGLER(RTCrX509BasicConstraints_DecodeAsn1) +# define RTCrX509CertificatePolicies_DecodeAsn1 RT_MANGLER(RTCrX509CertificatePolicies_DecodeAsn1) +# define RTCrX509Certificate_DecodeAsn1 RT_MANGLER(RTCrX509Certificate_DecodeAsn1) +# define RTCrX509Certificates_DecodeAsn1 RT_MANGLER(RTCrX509Certificates_DecodeAsn1) +# define RTCrX509Extension_DecodeAsn1 RT_MANGLER(RTCrX509Extension_DecodeAsn1) +# define RTCrX509Extension_ExtnValue_DecodeAsn1 RT_MANGLER(RTCrX509Extension_ExtnValue_DecodeAsn1) +# define RTCrX509Extensions_DecodeAsn1 RT_MANGLER(RTCrX509Extensions_DecodeAsn1) +# define RTCrX509GeneralName_DecodeAsn1 RT_MANGLER(RTCrX509GeneralName_DecodeAsn1) +# define RTCrX509GeneralNames_DecodeAsn1 RT_MANGLER(RTCrX509GeneralNames_DecodeAsn1) +# define RTCrX509GeneralSubtree_DecodeAsn1 RT_MANGLER(RTCrX509GeneralSubtree_DecodeAsn1) +# define RTCrX509GeneralSubtrees_DecodeAsn1 RT_MANGLER(RTCrX509GeneralSubtrees_DecodeAsn1) +# define RTCrX509NameConstraints_DecodeAsn1 RT_MANGLER(RTCrX509NameConstraints_DecodeAsn1) +# define RTCrX509Name_DecodeAsn1 RT_MANGLER(RTCrX509Name_DecodeAsn1) +# define RTCrX509OldAuthorityKeyIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_DecodeAsn1) +# define RTCrX509OtherName_DecodeAsn1 RT_MANGLER(RTCrX509OtherName_DecodeAsn1) +# define RTCrX509PolicyConstraints_DecodeAsn1 RT_MANGLER(RTCrX509PolicyConstraints_DecodeAsn1) +# define RTCrX509PolicyInformation_DecodeAsn1 RT_MANGLER(RTCrX509PolicyInformation_DecodeAsn1) +# define RTCrX509PolicyMapping_DecodeAsn1 RT_MANGLER(RTCrX509PolicyMapping_DecodeAsn1) +# define RTCrX509PolicyMappings_DecodeAsn1 RT_MANGLER(RTCrX509PolicyMappings_DecodeAsn1) +# define RTCrX509PolicyQualifierInfo_DecodeAsn1 RT_MANGLER(RTCrX509PolicyQualifierInfo_DecodeAsn1) +# define RTCrX509PolicyQualifierInfos_DecodeAsn1 RT_MANGLER(RTCrX509PolicyQualifierInfos_DecodeAsn1) +# define RTCrX509SubjectPublicKeyInfo_DecodeAsn1 RT_MANGLER(RTCrX509SubjectPublicKeyInfo_DecodeAsn1) +# define RTCrX509TbsCertificate_DecodeAsn1 RT_MANGLER(RTCrX509TbsCertificate_DecodeAsn1) +# define RTCrX509Validity_DecodeAsn1 RT_MANGLER(RTCrX509Validity_DecodeAsn1) +# define RTCrX509CertPathsBuild RT_MANGLER(RTCrX509CertPathsBuild) +# define RTCrX509CertPathsCreate RT_MANGLER(RTCrX509CertPathsCreate) +# define RTCrX509CertPathsCreateEx RT_MANGLER(RTCrX509CertPathsCreateEx) +# define RTCrX509CertPathsDumpAll RT_MANGLER(RTCrX509CertPathsDumpAll) +# define RTCrX509CertPathsDumpOne RT_MANGLER(RTCrX509CertPathsDumpOne) +# define RTCrX509CertPathsGetPathCount RT_MANGLER(RTCrX509CertPathsGetPathCount) +# define RTCrX509CertPathsGetPathLength RT_MANGLER(RTCrX509CertPathsGetPathLength) +# define RTCrX509CertPathsGetPathNodeCert RT_MANGLER(RTCrX509CertPathsGetPathNodeCert) +# define RTCrX509CertPathsGetPathVerifyResult RT_MANGLER(RTCrX509CertPathsGetPathVerifyResult) +# define RTCrX509CertPathsQueryPathInfo RT_MANGLER(RTCrX509CertPathsQueryPathInfo) +# define RTCrX509CertPathsRelease RT_MANGLER(RTCrX509CertPathsRelease) +# define RTCrX509CertPathsRetain RT_MANGLER(RTCrX509CertPathsRetain) +# define RTCrX509CertPathsSetTrustedStore RT_MANGLER(RTCrX509CertPathsSetTrustedStore) +# define RTCrX509CertPathsSetUntrustedArray RT_MANGLER(RTCrX509CertPathsSetUntrustedArray) +# define RTCrX509CertPathsSetUntrustedSet RT_MANGLER(RTCrX509CertPathsSetUntrustedSet) +# define RTCrX509CertPathsSetUntrustedStore RT_MANGLER(RTCrX509CertPathsSetUntrustedStore) +# define RTCrX509CertPathsSetValidTime RT_MANGLER(RTCrX509CertPathsSetValidTime) +# define RTCrX509CertPathsSetValidTimeSpec RT_MANGLER(RTCrX509CertPathsSetValidTimeSpec) +# define RTCrX509CertPathsValidateAll RT_MANGLER(RTCrX509CertPathsValidateAll) +# define RTCrX509CertPathsValidateOne RT_MANGLER(RTCrX509CertPathsValidateOne) +# define RTCrX509AlgorithmIdentifier_CombineEncryptionAndDigest RT_MANGLER(RTCrX509AlgorithmIdentifier_CombineEncryptionAndDigest) +# define RTCrX509AlgorithmIdentifier_CombineEncryptionOidAndDigestOid RT_MANGLER(RTCrX509AlgorithmIdentifier_CombineEncryptionOidAndDigestOid) +# define RTCrX509AlgorithmIdentifier_Compare RT_MANGLER(RTCrX509AlgorithmIdentifier_Compare) +# define RTCrX509AlgorithmIdentifier_CompareDigestAndEncryptedDigest RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareDigestAndEncryptedDigest) +# define RTCrX509AlgorithmIdentifier_CompareDigestOidAndEncryptedDigestOid RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareDigestOidAndEncryptedDigestOid) +# define RTCrX509AlgorithmIdentifier_CompareWithString RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareWithString) +# define RTCrX509AlgorithmIdentifier_Delete RT_MANGLER(RTCrX509AlgorithmIdentifier_Delete) +# define RTCrX509AlgorithmIdentifier_Enum RT_MANGLER(RTCrX509AlgorithmIdentifier_Enum) +# define RTCrX509AlgorithmIdentifier_QueryDigestSize RT_MANGLER(RTCrX509AlgorithmIdentifier_QueryDigestSize) +# define RTCrX509AlgorithmIdentifier_QueryDigestType RT_MANGLER(RTCrX509AlgorithmIdentifier_QueryDigestType) +# define RTCrX509AlgorithmIdentifiers_Compare RT_MANGLER(RTCrX509AlgorithmIdentifiers_Compare) +# define RTCrX509AlgorithmIdentifiers_Delete RT_MANGLER(RTCrX509AlgorithmIdentifiers_Delete) +# define RTCrX509AlgorithmIdentifiers_Enum RT_MANGLER(RTCrX509AlgorithmIdentifiers_Enum) +# define RTCrX509AttributeTypeAndValue_Compare RT_MANGLER(RTCrX509AttributeTypeAndValue_Compare) +# define RTCrX509AttributeTypeAndValue_Delete RT_MANGLER(RTCrX509AttributeTypeAndValue_Delete) +# define RTCrX509AttributeTypeAndValue_Enum RT_MANGLER(RTCrX509AttributeTypeAndValue_Enum) +# define RTCrX509AttributeTypeAndValues_Compare RT_MANGLER(RTCrX509AttributeTypeAndValues_Compare) +# define RTCrX509AttributeTypeAndValues_Delete RT_MANGLER(RTCrX509AttributeTypeAndValues_Delete) +# define RTCrX509AttributeTypeAndValues_Enum RT_MANGLER(RTCrX509AttributeTypeAndValues_Enum) +# define RTCrX509AuthorityKeyIdentifier_Compare RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Compare) +# define RTCrX509AuthorityKeyIdentifier_Delete RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Delete) +# define RTCrX509AuthorityKeyIdentifier_Enum RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Enum) +# define RTCrX509BasicConstraints_Compare RT_MANGLER(RTCrX509BasicConstraints_Compare) +# define RTCrX509BasicConstraints_Delete RT_MANGLER(RTCrX509BasicConstraints_Delete) +# define RTCrX509BasicConstraints_Enum RT_MANGLER(RTCrX509BasicConstraints_Enum) +# define RTCrX509CertificatePolicies_Compare RT_MANGLER(RTCrX509CertificatePolicies_Compare) +# define RTCrX509CertificatePolicies_Delete RT_MANGLER(RTCrX509CertificatePolicies_Delete) +# define RTCrX509CertificatePolicies_Enum RT_MANGLER(RTCrX509CertificatePolicies_Enum) +# define RTCrX509Certificate_Compare RT_MANGLER(RTCrX509Certificate_Compare) +# define RTCrX509Certificate_Delete RT_MANGLER(RTCrX509Certificate_Delete) +# define RTCrX509Certificate_Enum RT_MANGLER(RTCrX509Certificate_Enum) +# define RTCrX509Certificate_IsSelfSigned RT_MANGLER(RTCrX509Certificate_IsSelfSigned) +# define RTCrX509Certificate_MatchIssuerAndSerialNumber RT_MANGLER(RTCrX509Certificate_MatchIssuerAndSerialNumber) +# define RTCrX509Certificate_MatchSubjectOrAltSubjectByRfc5280 RT_MANGLER(RTCrX509Certificate_MatchSubjectOrAltSubjectByRfc5280) +# define RTCrX509Certificates_Compare RT_MANGLER(RTCrX509Certificates_Compare) +# define RTCrX509Certificates_Delete RT_MANGLER(RTCrX509Certificates_Delete) +# define RTCrX509Certificates_Enum RT_MANGLER(RTCrX509Certificates_Enum) +# define RTCrX509Certificates_FindByIssuerAndSerialNumber RT_MANGLER(RTCrX509Certificates_FindByIssuerAndSerialNumber) +# define RTCrX509Extension_Compare RT_MANGLER(RTCrX509Extension_Compare) +# define RTCrX509Extension_Delete RT_MANGLER(RTCrX509Extension_Delete) +# define RTCrX509Extension_Enum RT_MANGLER(RTCrX509Extension_Enum) +# define RTCrX509Extensions_Compare RT_MANGLER(RTCrX509Extensions_Compare) +# define RTCrX509Extensions_Delete RT_MANGLER(RTCrX509Extensions_Delete) +# define RTCrX509Extensions_Enum RT_MANGLER(RTCrX509Extensions_Enum) +# define RTCrX509GeneralName_Compare RT_MANGLER(RTCrX509GeneralName_Compare) +# define RTCrX509GeneralName_ConstraintMatch RT_MANGLER(RTCrX509GeneralName_ConstraintMatch) +# define RTCrX509GeneralName_Delete RT_MANGLER(RTCrX509GeneralName_Delete) +# define RTCrX509GeneralName_Enum RT_MANGLER(RTCrX509GeneralName_Enum) +# define RTCrX509GeneralNames_Compare RT_MANGLER(RTCrX509GeneralNames_Compare) +# define RTCrX509GeneralNames_Delete RT_MANGLER(RTCrX509GeneralNames_Delete) +# define RTCrX509GeneralNames_Enum RT_MANGLER(RTCrX509GeneralNames_Enum) +# define RTCrX509GeneralSubtree_Compare RT_MANGLER(RTCrX509GeneralSubtree_Compare) +# define RTCrX509GeneralSubtree_ConstraintMatch RT_MANGLER(RTCrX509GeneralSubtree_ConstraintMatch) +# define RTCrX509GeneralSubtree_Delete RT_MANGLER(RTCrX509GeneralSubtree_Delete) +# define RTCrX509GeneralSubtree_Enum RT_MANGLER(RTCrX509GeneralSubtree_Enum) +# define RTCrX509GeneralSubtrees_Compare RT_MANGLER(RTCrX509GeneralSubtrees_Compare) +# define RTCrX509GeneralSubtrees_Delete RT_MANGLER(RTCrX509GeneralSubtrees_Delete) +# define RTCrX509GeneralSubtrees_Enum RT_MANGLER(RTCrX509GeneralSubtrees_Enum) +# define RTCrX509NameConstraints_Compare RT_MANGLER(RTCrX509NameConstraints_Compare) +# define RTCrX509NameConstraints_Delete RT_MANGLER(RTCrX509NameConstraints_Delete) +# define RTCrX509NameConstraints_Enum RT_MANGLER(RTCrX509NameConstraints_Enum) +# define RTCrX509Name_Compare RT_MANGLER(RTCrX509Name_Compare) +# define RTCrX509Name_ConstraintMatch RT_MANGLER(RTCrX509Name_ConstraintMatch) +# define RTCrX509Name_Delete RT_MANGLER(RTCrX509Name_Delete) +# define RTCrX509Name_Enum RT_MANGLER(RTCrX509Name_Enum) +# define RTCrX509Name_FormatAsString RT_MANGLER(RTCrX509Name_FormatAsString) +# define RTCrX509Name_MatchByRfc5280 RT_MANGLER(RTCrX509Name_MatchByRfc5280) +# define RTCrX509Name_MatchWithString RT_MANGLER(RTCrX509Name_MatchWithString) +# define RTCrX509Name_GetShortRdn RT_MANGLER(RTCrX509Name_GetShortRdn) +# define RTCrX509OldAuthorityKeyIdentifier_Compare RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Compare) +# define RTCrX509OldAuthorityKeyIdentifier_Delete RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Delete) +# define RTCrX509OldAuthorityKeyIdentifier_Enum RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Enum) +# define RTCrX509OtherName_Compare RT_MANGLER(RTCrX509OtherName_Compare) +# define RTCrX509OtherName_Delete RT_MANGLER(RTCrX509OtherName_Delete) +# define RTCrX509OtherName_Enum RT_MANGLER(RTCrX509OtherName_Enum) +# define RTCrX509PolicyConstraints_Compare RT_MANGLER(RTCrX509PolicyConstraints_Compare) +# define RTCrX509PolicyConstraints_Delete RT_MANGLER(RTCrX509PolicyConstraints_Delete) +# define RTCrX509PolicyConstraints_Enum RT_MANGLER(RTCrX509PolicyConstraints_Enum) +# define RTCrX509PolicyInformation_Compare RT_MANGLER(RTCrX509PolicyInformation_Compare) +# define RTCrX509PolicyInformation_Delete RT_MANGLER(RTCrX509PolicyInformation_Delete) +# define RTCrX509PolicyInformation_Enum RT_MANGLER(RTCrX509PolicyInformation_Enum) +# define RTCrX509PolicyMapping_Compare RT_MANGLER(RTCrX509PolicyMapping_Compare) +# define RTCrX509PolicyMapping_Delete RT_MANGLER(RTCrX509PolicyMapping_Delete) +# define RTCrX509PolicyMapping_Enum RT_MANGLER(RTCrX509PolicyMapping_Enum) +# define RTCrX509PolicyMappings_Compare RT_MANGLER(RTCrX509PolicyMappings_Compare) +# define RTCrX509PolicyMappings_Delete RT_MANGLER(RTCrX509PolicyMappings_Delete) +# define RTCrX509PolicyMappings_Enum RT_MANGLER(RTCrX509PolicyMappings_Enum) +# define RTCrX509PolicyQualifierInfo_Compare RT_MANGLER(RTCrX509PolicyQualifierInfo_Compare) +# define RTCrX509PolicyQualifierInfo_Delete RT_MANGLER(RTCrX509PolicyQualifierInfo_Delete) +# define RTCrX509PolicyQualifierInfo_Enum RT_MANGLER(RTCrX509PolicyQualifierInfo_Enum) +# define RTCrX509PolicyQualifierInfos_Compare RT_MANGLER(RTCrX509PolicyQualifierInfos_Compare) +# define RTCrX509PolicyQualifierInfos_Delete RT_MANGLER(RTCrX509PolicyQualifierInfos_Delete) +# define RTCrX509PolicyQualifierInfos_Enum RT_MANGLER(RTCrX509PolicyQualifierInfos_Enum) +# define RTCrX509SubjectPublicKeyInfo_Compare RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Compare) +# define RTCrX509SubjectPublicKeyInfo_Delete RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Delete) +# define RTCrX509SubjectPublicKeyInfo_Enum RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Enum) +# define RTCrX509TbsCertificate_Compare RT_MANGLER(RTCrX509TbsCertificate_Compare) +# define RTCrX509TbsCertificate_Delete RT_MANGLER(RTCrX509TbsCertificate_Delete) +# define RTCrX509TbsCertificate_Enum RT_MANGLER(RTCrX509TbsCertificate_Enum) +# define RTCrX509TbsCertificate_ReprocessExtensions RT_MANGLER(RTCrX509TbsCertificate_ReprocessExtensions) +# define RTCrX509Validity_Compare RT_MANGLER(RTCrX509Validity_Compare) +# define RTCrX509Validity_Delete RT_MANGLER(RTCrX509Validity_Delete) +# define RTCrX509Validity_Enum RT_MANGLER(RTCrX509Validity_Enum) +# define RTCrX509Validity_IsValidAtTimeSpec RT_MANGLER(RTCrX509Validity_IsValidAtTimeSpec) +# define RTCrX509Certificate_ReadFromFile RT_MANGLER(RTCrX509Certificate_ReadFromFile) +# define RTCrX509Certificate_ReadFromBuffer RT_MANGLER(RTCrX509Certificate_ReadFromBuffer) +# define RTCrX509AlgorithmIdentifier_Clone RT_MANGLER(RTCrX509AlgorithmIdentifier_Clone) +# define RTCrX509AlgorithmIdentifier_Init RT_MANGLER(RTCrX509AlgorithmIdentifier_Init) +# define RTCrX509AlgorithmIdentifiers_Clone RT_MANGLER(RTCrX509AlgorithmIdentifiers_Clone) +# define RTCrX509AlgorithmIdentifiers_Init RT_MANGLER(RTCrX509AlgorithmIdentifiers_Init) +# define RTCrX509AttributeTypeAndValue_Clone RT_MANGLER(RTCrX509AttributeTypeAndValue_Clone) +# define RTCrX509AttributeTypeAndValue_Init RT_MANGLER(RTCrX509AttributeTypeAndValue_Init) +# define RTCrX509AttributeTypeAndValues_Clone RT_MANGLER(RTCrX509AttributeTypeAndValues_Clone) +# define RTCrX509AttributeTypeAndValues_Init RT_MANGLER(RTCrX509AttributeTypeAndValues_Init) +# define RTCrX509AuthorityKeyIdentifier_Clone RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Clone) +# define RTCrX509AuthorityKeyIdentifier_Init RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Init) +# define RTCrX509BasicConstraints_Clone RT_MANGLER(RTCrX509BasicConstraints_Clone) +# define RTCrX509BasicConstraints_Init RT_MANGLER(RTCrX509BasicConstraints_Init) +# define RTCrX509CertificatePolicies_Clone RT_MANGLER(RTCrX509CertificatePolicies_Clone) +# define RTCrX509CertificatePolicies_Init RT_MANGLER(RTCrX509CertificatePolicies_Init) +# define RTCrX509Certificate_Clone RT_MANGLER(RTCrX509Certificate_Clone) +# define RTCrX509Certificate_Init RT_MANGLER(RTCrX509Certificate_Init) +# define RTCrX509Certificates_Clone RT_MANGLER(RTCrX509Certificates_Clone) +# define RTCrX509Certificates_Init RT_MANGLER(RTCrX509Certificates_Init) +# define RTCrX509Extension_Clone RT_MANGLER(RTCrX509Extension_Clone) +# define RTCrX509Extension_Init RT_MANGLER(RTCrX509Extension_Init) +# define RTCrX509Extensions_Clone RT_MANGLER(RTCrX509Extensions_Clone) +# define RTCrX509Extensions_Init RT_MANGLER(RTCrX509Extensions_Init) +# define RTCrX509GeneralName_Clone RT_MANGLER(RTCrX509GeneralName_Clone) +# define RTCrX509GeneralName_Init RT_MANGLER(RTCrX509GeneralName_Init) +# define RTCrX509GeneralNames_Clone RT_MANGLER(RTCrX509GeneralNames_Clone) +# define RTCrX509GeneralNames_Init RT_MANGLER(RTCrX509GeneralNames_Init) +# define RTCrX509GeneralSubtree_Clone RT_MANGLER(RTCrX509GeneralSubtree_Clone) +# define RTCrX509GeneralSubtree_Init RT_MANGLER(RTCrX509GeneralSubtree_Init) +# define RTCrX509GeneralSubtrees_Clone RT_MANGLER(RTCrX509GeneralSubtrees_Clone) +# define RTCrX509GeneralSubtrees_Init RT_MANGLER(RTCrX509GeneralSubtrees_Init) +# define RTCrX509NameConstraints_Clone RT_MANGLER(RTCrX509NameConstraints_Clone) +# define RTCrX509NameConstraints_Init RT_MANGLER(RTCrX509NameConstraints_Init) +# define RTCrX509Name_Clone RT_MANGLER(RTCrX509Name_Clone) +# define RTCrX509Name_Init RT_MANGLER(RTCrX509Name_Init) +# define RTCrX509Name_RecodeAsUtf8 RT_MANGLER(RTCrX509Name_RecodeAsUtf8) +# define RTCrX509OldAuthorityKeyIdentifier_Clone RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Clone) +# define RTCrX509OldAuthorityKeyIdentifier_Init RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Init) +# define RTCrX509OtherName_Clone RT_MANGLER(RTCrX509OtherName_Clone) +# define RTCrX509OtherName_Init RT_MANGLER(RTCrX509OtherName_Init) +# define RTCrX509PolicyConstraints_Clone RT_MANGLER(RTCrX509PolicyConstraints_Clone) +# define RTCrX509PolicyConstraints_Init RT_MANGLER(RTCrX509PolicyConstraints_Init) +# define RTCrX509PolicyInformation_Clone RT_MANGLER(RTCrX509PolicyInformation_Clone) +# define RTCrX509PolicyInformation_Init RT_MANGLER(RTCrX509PolicyInformation_Init) +# define RTCrX509PolicyMapping_Clone RT_MANGLER(RTCrX509PolicyMapping_Clone) +# define RTCrX509PolicyMapping_Init RT_MANGLER(RTCrX509PolicyMapping_Init) +# define RTCrX509PolicyMappings_Clone RT_MANGLER(RTCrX509PolicyMappings_Clone) +# define RTCrX509PolicyMappings_Init RT_MANGLER(RTCrX509PolicyMappings_Init) +# define RTCrX509PolicyQualifierInfo_Clone RT_MANGLER(RTCrX509PolicyQualifierInfo_Clone) +# define RTCrX509PolicyQualifierInfo_Init RT_MANGLER(RTCrX509PolicyQualifierInfo_Init) +# define RTCrX509PolicyQualifierInfos_Clone RT_MANGLER(RTCrX509PolicyQualifierInfos_Clone) +# define RTCrX509PolicyQualifierInfos_Init RT_MANGLER(RTCrX509PolicyQualifierInfos_Init) +# define RTCrX509SubjectPublicKeyInfo_Clone RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Clone) +# define RTCrX509SubjectPublicKeyInfo_Init RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Init) +# define RTCrX509TbsCertificate_Clone RT_MANGLER(RTCrX509TbsCertificate_Clone) +# define RTCrX509TbsCertificate_Init RT_MANGLER(RTCrX509TbsCertificate_Init) +# define RTCrX509Validity_Clone RT_MANGLER(RTCrX509Validity_Clone) +# define RTCrX509Validity_Init RT_MANGLER(RTCrX509Validity_Init) +# define RTCrX509AlgorithmIdentifier_CheckSanity RT_MANGLER(RTCrX509AlgorithmIdentifier_CheckSanity) +# define RTCrX509AlgorithmIdentifiers_CheckSanity RT_MANGLER(RTCrX509AlgorithmIdentifiers_CheckSanity) +# define RTCrX509AttributeTypeAndValue_CheckSanity RT_MANGLER(RTCrX509AttributeTypeAndValue_CheckSanity) +# define RTCrX509AttributeTypeAndValues_CheckSanity RT_MANGLER(RTCrX509AttributeTypeAndValues_CheckSanity) +# define RTCrX509AuthorityKeyIdentifier_CheckSanity RT_MANGLER(RTCrX509AuthorityKeyIdentifier_CheckSanity) +# define RTCrX509BasicConstraints_CheckSanity RT_MANGLER(RTCrX509BasicConstraints_CheckSanity) +# define RTCrX509CertificatePolicies_CheckSanity RT_MANGLER(RTCrX509CertificatePolicies_CheckSanity) +# define RTCrX509Certificate_CheckSanity RT_MANGLER(RTCrX509Certificate_CheckSanity) +# define RTCrX509Certificates_CheckSanity RT_MANGLER(RTCrX509Certificates_CheckSanity) +# define RTCrX509Extension_CheckSanity RT_MANGLER(RTCrX509Extension_CheckSanity) +# define RTCrX509Extensions_CheckSanity RT_MANGLER(RTCrX509Extensions_CheckSanity) +# define RTCrX509GeneralName_CheckSanity RT_MANGLER(RTCrX509GeneralName_CheckSanity) +# define RTCrX509GeneralNames_CheckSanity RT_MANGLER(RTCrX509GeneralNames_CheckSanity) +# define RTCrX509GeneralSubtree_CheckSanity RT_MANGLER(RTCrX509GeneralSubtree_CheckSanity) +# define RTCrX509GeneralSubtrees_CheckSanity RT_MANGLER(RTCrX509GeneralSubtrees_CheckSanity) +# define RTCrX509NameConstraints_CheckSanity RT_MANGLER(RTCrX509NameConstraints_CheckSanity) +# define RTCrX509Name_CheckSanity RT_MANGLER(RTCrX509Name_CheckSanity) +# define RTCrX509OldAuthorityKeyIdentifier_CheckSanity RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_CheckSanity) +# define RTCrX509OtherName_CheckSanity RT_MANGLER(RTCrX509OtherName_CheckSanity) +# define RTCrX509PolicyConstraints_CheckSanity RT_MANGLER(RTCrX509PolicyConstraints_CheckSanity) +# define RTCrX509PolicyInformation_CheckSanity RT_MANGLER(RTCrX509PolicyInformation_CheckSanity) +# define RTCrX509PolicyMapping_CheckSanity RT_MANGLER(RTCrX509PolicyMapping_CheckSanity) +# define RTCrX509PolicyMappings_CheckSanity RT_MANGLER(RTCrX509PolicyMappings_CheckSanity) +# define RTCrX509PolicyQualifierInfo_CheckSanity RT_MANGLER(RTCrX509PolicyQualifierInfo_CheckSanity) +# define RTCrX509PolicyQualifierInfos_CheckSanity RT_MANGLER(RTCrX509PolicyQualifierInfos_CheckSanity) +# define RTCrX509SubjectPublicKeyInfo_CheckSanity RT_MANGLER(RTCrX509SubjectPublicKeyInfo_CheckSanity) +# define RTCrX509TbsCertificate_CheckSanity RT_MANGLER(RTCrX509TbsCertificate_CheckSanity) +# define RTCrX509Validity_CheckSanity RT_MANGLER(RTCrX509Validity_CheckSanity) +# define RTCrX509Certificate_VerifySignature RT_MANGLER(RTCrX509Certificate_VerifySignature) +# define RTCrX509Certificate_VerifySignatureSelfSigned RT_MANGLER(RTCrX509Certificate_VerifySignatureSelfSigned) +# define RTCrTafCertPathControls_DecodeAsn1 RT_MANGLER(RTCrTafCertPathControls_DecodeAsn1) +# define RTCrTafTrustAnchorChoice_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorChoice_DecodeAsn1) +# define RTCrTafTrustAnchorInfo_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorInfo_DecodeAsn1) +# define RTCrTafTrustAnchorList_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorList_DecodeAsn1) +# define RTCrTafCertPathControls_Compare RT_MANGLER(RTCrTafCertPathControls_Compare) +# define RTCrTafCertPathControls_Delete RT_MANGLER(RTCrTafCertPathControls_Delete) +# define RTCrTafCertPathControls_Enum RT_MANGLER(RTCrTafCertPathControls_Enum) +# define RTCrTafTrustAnchorChoice_Compare RT_MANGLER(RTCrTafTrustAnchorChoice_Compare) +# define RTCrTafTrustAnchorChoice_Delete RT_MANGLER(RTCrTafTrustAnchorChoice_Delete) +# define RTCrTafTrustAnchorChoice_Enum RT_MANGLER(RTCrTafTrustAnchorChoice_Enum) +# define RTCrTafTrustAnchorInfo_Compare RT_MANGLER(RTCrTafTrustAnchorInfo_Compare) +# define RTCrTafTrustAnchorInfo_Delete RT_MANGLER(RTCrTafTrustAnchorInfo_Delete) +# define RTCrTafTrustAnchorInfo_Enum RT_MANGLER(RTCrTafTrustAnchorInfo_Enum) +# define RTCrTafTrustAnchorList_Compare RT_MANGLER(RTCrTafTrustAnchorList_Compare) +# define RTCrTafTrustAnchorList_Delete RT_MANGLER(RTCrTafTrustAnchorList_Delete) +# define RTCrTafTrustAnchorList_Enum RT_MANGLER(RTCrTafTrustAnchorList_Enum) +# define RTCrTafCertPathControls_Clone RT_MANGLER(RTCrTafCertPathControls_Clone) +# define RTCrTafCertPathControls_Init RT_MANGLER(RTCrTafCertPathControls_Init) +# define RTCrTafTrustAnchorChoice_Clone RT_MANGLER(RTCrTafTrustAnchorChoice_Clone) +# define RTCrTafTrustAnchorChoice_Init RT_MANGLER(RTCrTafTrustAnchorChoice_Init) +# define RTCrTafTrustAnchorInfo_Clone RT_MANGLER(RTCrTafTrustAnchorInfo_Clone) +# define RTCrTafTrustAnchorInfo_Init RT_MANGLER(RTCrTafTrustAnchorInfo_Init) +# define RTCrTafTrustAnchorList_Clone RT_MANGLER(RTCrTafTrustAnchorList_Clone) +# define RTCrTafTrustAnchorList_Init RT_MANGLER(RTCrTafTrustAnchorList_Init) +# define RTCrTafCertPathControls_CheckSanity RT_MANGLER(RTCrTafCertPathControls_CheckSanity) +# define RTCrTafTrustAnchorChoice_CheckSanity RT_MANGLER(RTCrTafTrustAnchorChoice_CheckSanity) +# define RTCrTafTrustAnchorInfo_CheckSanity RT_MANGLER(RTCrTafTrustAnchorInfo_CheckSanity) +# define RTCrTafTrustAnchorList_CheckSanity RT_MANGLER(RTCrTafTrustAnchorList_CheckSanity) +# define RTCrTspAccuracy_CheckSanity RT_MANGLER(RTCrTspAccuracy_CheckSanity) +# define RTCrTspAccuracy_Clone RT_MANGLER(RTCrTspAccuracy_Clone) +# define RTCrTspAccuracy_Compare RT_MANGLER(RTCrTspAccuracy_Compare) +# define RTCrTspAccuracy_DecodeAsn1 RT_MANGLER(RTCrTspAccuracy_DecodeAsn1) +# define RTCrTspAccuracy_Delete RT_MANGLER(RTCrTspAccuracy_Delete) +# define RTCrTspAccuracy_Enum RT_MANGLER(RTCrTspAccuracy_Enum) +# define RTCrTspAccuracy_Init RT_MANGLER(RTCrTspAccuracy_Init) +# define RTCrTspMessageImprint_CheckSanity RT_MANGLER(RTCrTspMessageImprint_CheckSanity) +# define RTCrTspMessageImprint_Clone RT_MANGLER(RTCrTspMessageImprint_Clone) +# define RTCrTspMessageImprint_Compare RT_MANGLER(RTCrTspMessageImprint_Compare) +# define RTCrTspMessageImprint_DecodeAsn1 RT_MANGLER(RTCrTspMessageImprint_DecodeAsn1) +# define RTCrTspMessageImprint_Delete RT_MANGLER(RTCrTspMessageImprint_Delete) +# define RTCrTspMessageImprint_Enum RT_MANGLER(RTCrTspMessageImprint_Enum) +# define RTCrTspMessageImprint_Init RT_MANGLER(RTCrTspMessageImprint_Init) +# define RTCrTspTstInfo_CheckSanity RT_MANGLER(RTCrTspTstInfo_CheckSanity) +# define RTCrTspTstInfo_Clone RT_MANGLER(RTCrTspTstInfo_Clone) +# define RTCrTspTstInfo_Compare RT_MANGLER(RTCrTspTstInfo_Compare) +# define RTCrTspTstInfo_DecodeAsn1 RT_MANGLER(RTCrTspTstInfo_DecodeAsn1) +# define RTCrTspTstInfo_Delete RT_MANGLER(RTCrTspTstInfo_Delete) +# define RTCrTspTstInfo_Enum RT_MANGLER(RTCrTspTstInfo_Enum) +# define RTCrTspTstInfo_Init RT_MANGLER(RTCrTspTstInfo_Init) +# define RTCrCertCtxRelease RT_MANGLER(RTCrCertCtxRelease) +# define RTCrCertCtxRetain RT_MANGLER(RTCrCertCtxRetain) +# define RTCrStoreCertAddEncoded RT_MANGLER(RTCrStoreCertAddEncoded) +# define RTCrStoreCertByIssuerAndSerialNo RT_MANGLER(RTCrStoreCertByIssuerAndSerialNo) +# define RTCrStoreCertCount RT_MANGLER(RTCrStoreCertCount) +# define RTCrStoreCertFindAll RT_MANGLER(RTCrStoreCertFindAll) +# define RTCrStoreCertFindBySubjectOrAltSubjectByRfc5280 RT_MANGLER(RTCrStoreCertFindBySubjectOrAltSubjectByRfc5280) +# define RTCrStoreCertSearchDestroy RT_MANGLER(RTCrStoreCertSearchDestroy) +# define RTCrStoreCertSearchNext RT_MANGLER(RTCrStoreCertSearchNext) +# define RTCrStoreConvertToOpenSslCertStack RT_MANGLER(RTCrStoreConvertToOpenSslCertStack) +# define RTCrStoreConvertToOpenSslCertStore RT_MANGLER(RTCrStoreConvertToOpenSslCertStore) +# define RTCrStoreRelease RT_MANGLER(RTCrStoreRelease) +# define RTCrStoreRetain RT_MANGLER(RTCrStoreRetain) +# define RTCrStoreCreateInMem RT_MANGLER(RTCrStoreCreateInMem) +# define RTCrStoreCreateSnapshotById RT_MANGLER(RTCrStoreCreateSnapshotById) +# define RTCrStoreCreateSnapshotOfUserAndSystemTrustedCAsAndCerts RT_MANGLER(RTCrStoreCreateSnapshotOfUserAndSystemTrustedCAsAndCerts) +# define RTCrStoreCertAddFromDir RT_MANGLER(RTCrStoreCertAddFromDir) +# define RTCrStoreCertAddFromFile RT_MANGLER(RTCrStoreCertAddFromFile) +# define RTCrStoreCertAddFromJavaKeyStore RT_MANGLER(RTCrStoreCertAddFromJavaKeyStore) +# define RTCrStoreCertAddFromJavaKeyStoreInMem RT_MANGLER(RTCrStoreCertAddFromJavaKeyStoreInMem) +# define RTCrStoreCertAddFromStore RT_MANGLER(RTCrStoreCertAddFromStore) +# define RTCrStoreCertAddWantedFromDir RT_MANGLER(RTCrStoreCertAddWantedFromDir) +# define RTCrStoreCertAddWantedFromFile RT_MANGLER(RTCrStoreCertAddWantedFromFile) +# define RTCrStoreCertAddWantedFromStore RT_MANGLER(RTCrStoreCertAddWantedFromStore) +# define RTCrStoreCertAddWantedFromFishingExpedition RT_MANGLER(RTCrStoreCertAddWantedFromFishingExpedition) +# define RTCrStoreCertCheckWanted RT_MANGLER(RTCrStoreCertCheckWanted) +# define RTCrStoreCertExportAsPem RT_MANGLER(RTCrStoreCertExportAsPem) +# define RTErrInfoAdd RT_MANGLER(RTErrInfoAdd) +# define RTErrInfoAddF RT_MANGLER(RTErrInfoAddF) +# define RTErrInfoAddV RT_MANGLER(RTErrInfoAddV) +# define RTLdrHashImage RT_MANGLER(RTLdrHashImage) +# define RTLdrOpenWithReader RT_MANGLER(RTLdrOpenWithReader) +# define RTLdrQueryPropEx RT_MANGLER(RTLdrQueryPropEx) +# define RTLdrVerifySignature RT_MANGLER(RTLdrVerifySignature) +# define RTBigNumAdd RT_MANGLER(RTBigNumAdd) +# define RTBigNumAssign RT_MANGLER(RTBigNumAssign) +# define RTBigNumBitWidth RT_MANGLER(RTBigNumBitWidth) +# define RTBigNumByteWidth RT_MANGLER(RTBigNumByteWidth) +# define RTBigNumClone RT_MANGLER(RTBigNumClone) +# define RTBigNumCompare RT_MANGLER(RTBigNumCompare) +# define RTBigNumCompareWithS64 RT_MANGLER(RTBigNumCompareWithS64) +# define RTBigNumCompareWithU64 RT_MANGLER(RTBigNumCompareWithU64) +# define RTBigNumDestroy RT_MANGLER(RTBigNumDestroy) +# define RTBigNumDivide RT_MANGLER(RTBigNumDivide) +# define RTBigNumDivideKnuth RT_MANGLER(RTBigNumDivideKnuth) +# define RTBigNumDivideLong RT_MANGLER(RTBigNumDivideLong) +# define RTBigNumExponentiate RT_MANGLER(RTBigNumExponentiate) +# define RTBigNumInit RT_MANGLER(RTBigNumInit) +# define RTBigNumInitZero RT_MANGLER(RTBigNumInitZero) +# define RTBigNumModExp RT_MANGLER(RTBigNumModExp) +# define RTBigNumModulo RT_MANGLER(RTBigNumModulo) +# define RTBigNumMultiply RT_MANGLER(RTBigNumMultiply) +# define RTBigNumNegate RT_MANGLER(RTBigNumNegate) +# define RTBigNumNegateThis RT_MANGLER(RTBigNumNegateThis) +# define RTBigNumShiftLeft RT_MANGLER(RTBigNumShiftLeft) +# define RTBigNumShiftRight RT_MANGLER(RTBigNumShiftRight) +# define RTBigNumSubtract RT_MANGLER(RTBigNumSubtract) +# define RTBigNumToBytesBigEndian RT_MANGLER(RTBigNumToBytesBigEndian) +# define RTUInt128MulByU64 RT_MANGLER(RTUInt128MulByU64) +# define RTUInt128MulByU64_EndProc RT_MANGLER(RTUInt128MulByU64_EndProc) +# define RTUtf16Copy RT_MANGLER(RTUtf16Copy) +# define RTUtf16CopyAscii RT_MANGLER(RTUtf16CopyAscii) +# define RTUtf16Cat RT_MANGLER(RTUtf16Cat) +# define RTUtf16CatAscii RT_MANGLER(RTUtf16CatAscii) +# define RTUtf16End RT_MANGLER(RTUtf16End) +# define RTUtf16ICmpAscii RT_MANGLER(RTUtf16ICmpAscii) +# define RTUtf16NICmpAscii RT_MANGLER(RTUtf16NICmpAscii) +# define RTUtf16NLen RT_MANGLER(RTUtf16NLen) +# define RTUtf16NLenEx RT_MANGLER(RTUtf16NLenEx) +# define RTUtf16PrintHexBytes RT_MANGLER(RTUtf16PrintHexBytes) +# define RTMemSaferAllocZExTag RT_MANGLER(RTMemSaferAllocZExTag) +# define RTMemSaferAllocZTag RT_MANGLER(RTMemSaferAllocZTag) +# define RTMemSaferFree RT_MANGLER(RTMemSaferFree) +# define RTMemSaferReallocZExTag RT_MANGLER(RTMemSaferReallocZExTag) +# define RTMemSaferReallocZTag RT_MANGLER(RTMemSaferReallocZTag) +# define RTMemSaferScramble RT_MANGLER(RTMemSaferScramble) +# define RTMemSaferUnscramble RT_MANGLER(RTMemSaferUnscramble) +# define RTErrConvertFromDarwin RT_MANGLER(RTErrConvertFromDarwin) +# define RTErrConvertFromDarwinCOM RT_MANGLER(RTErrConvertFromDarwinCOM) +# define RTErrConvertFromDarwinIO RT_MANGLER(RTErrConvertFromDarwinIO) +# define RTErrConvertFromDarwinKern RT_MANGLER(RTErrConvertFromDarwinKern) +# define RTErrConvertFromDarwin RT_MANGLER(RTErrConvertFromDarwin) +# define RTErrConvertFromDarwinIO RT_MANGLER(RTErrConvertFromDarwinIO) +# define RTErrConvertFromDarwinKern RT_MANGLER(RTErrConvertFromDarwinKern) + +# define RTAsn1SeqOfBitStrings_Erase RT_MANGLER(RTAsn1SeqOfBitStrings_Erase) +# define RTAsn1SeqOfBitStrings_InsertEx RT_MANGLER(RTAsn1SeqOfBitStrings_InsertEx) +# define RTAsn1SeqOfBooleans_Erase RT_MANGLER(RTAsn1SeqOfBooleans_Erase) +# define RTAsn1SeqOfBooleans_InsertEx RT_MANGLER(RTAsn1SeqOfBooleans_InsertEx) +# define RTAsn1SeqOfCores_Erase RT_MANGLER(RTAsn1SeqOfCores_Erase) +# define RTAsn1SeqOfCores_InsertEx RT_MANGLER(RTAsn1SeqOfCores_InsertEx) +# define RTAsn1SeqOfIntegers_Erase RT_MANGLER(RTAsn1SeqOfIntegers_Erase) +# define RTAsn1SeqOfIntegers_InsertEx RT_MANGLER(RTAsn1SeqOfIntegers_InsertEx) +# define RTAsn1SeqOfObjIds_Erase RT_MANGLER(RTAsn1SeqOfObjIds_Erase) +# define RTAsn1SeqOfObjIds_InsertEx RT_MANGLER(RTAsn1SeqOfObjIds_InsertEx) +# define RTAsn1SeqOfOctetStrings_Erase RT_MANGLER(RTAsn1SeqOfOctetStrings_Erase) +# define RTAsn1SeqOfOctetStrings_InsertEx RT_MANGLER(RTAsn1SeqOfOctetStrings_InsertEx) +# define RTAsn1SeqOfStrings_Erase RT_MANGLER(RTAsn1SeqOfStrings_Erase) +# define RTAsn1SeqOfStrings_InsertEx RT_MANGLER(RTAsn1SeqOfStrings_InsertEx) +# define RTAsn1SeqOfTimes_Erase RT_MANGLER(RTAsn1SeqOfTimes_Erase) +# define RTAsn1SeqOfTimes_InsertEx RT_MANGLER(RTAsn1SeqOfTimes_InsertEx) +# define RTAsn1SetOfBitStrings_Erase RT_MANGLER(RTAsn1SetOfBitStrings_Erase) +# define RTAsn1SetOfBitStrings_InsertEx RT_MANGLER(RTAsn1SetOfBitStrings_InsertEx) +# define RTAsn1SetOfBooleans_Erase RT_MANGLER(RTAsn1SetOfBooleans_Erase) +# define RTAsn1SetOfBooleans_InsertEx RT_MANGLER(RTAsn1SetOfBooleans_InsertEx) +# define RTAsn1SetOfCores_Erase RT_MANGLER(RTAsn1SetOfCores_Erase) +# define RTAsn1SetOfCores_InsertEx RT_MANGLER(RTAsn1SetOfCores_InsertEx) +# define RTAsn1SetOfIntegers_Erase RT_MANGLER(RTAsn1SetOfIntegers_Erase) +# define RTAsn1SetOfIntegers_InsertEx RT_MANGLER(RTAsn1SetOfIntegers_InsertEx) +# define RTAsn1SetOfObjIds_Erase RT_MANGLER(RTAsn1SetOfObjIds_Erase) +# define RTAsn1SetOfObjIds_InsertEx RT_MANGLER(RTAsn1SetOfObjIds_InsertEx) +# define RTAsn1SetOfObjIdSeqs_Erase RT_MANGLER(RTAsn1SetOfObjIdSeqs_Erase) +# define RTAsn1SetOfObjIdSeqs_InsertEx RT_MANGLER(RTAsn1SetOfObjIdSeqs_InsertEx) +# define RTAsn1SetOfOctetStrings_Erase RT_MANGLER(RTAsn1SetOfOctetStrings_Erase) +# define RTAsn1SetOfOctetStrings_InsertEx RT_MANGLER(RTAsn1SetOfOctetStrings_InsertEx) +# define RTAsn1SetOfStrings_Erase RT_MANGLER(RTAsn1SetOfStrings_Erase) +# define RTAsn1SetOfStrings_InsertEx RT_MANGLER(RTAsn1SetOfStrings_InsertEx) +# define RTAsn1SetOfTimes_Erase RT_MANGLER(RTAsn1SetOfTimes_Erase) +# define RTAsn1SetOfTimes_InsertEx RT_MANGLER(RTAsn1SetOfTimes_InsertEx) +# define RTCrPkcs7Attributes_Erase RT_MANGLER(RTCrPkcs7Attributes_Erase) +# define RTCrPkcs7Attributes_InsertEx RT_MANGLER(RTCrPkcs7Attributes_InsertEx) +# define RTCrPkcs7SetOfCerts_Erase RT_MANGLER(RTCrPkcs7SetOfCerts_Erase) +# define RTCrPkcs7SetOfCerts_InsertEx RT_MANGLER(RTCrPkcs7SetOfCerts_InsertEx) +# define RTCrPkcs7SetOfContentInfos_Erase RT_MANGLER(RTCrPkcs7SetOfContentInfos_Erase) +# define RTCrPkcs7SetOfContentInfos_InsertEx RT_MANGLER(RTCrPkcs7SetOfContentInfos_InsertEx) +# define RTCrPkcs7SetOfSignedData_Erase RT_MANGLER(RTCrPkcs7SetOfSignedData_Erase) +# define RTCrPkcs7SetOfSignedData_InsertEx RT_MANGLER(RTCrPkcs7SetOfSignedData_InsertEx) +# define RTCrPkcs7SignerInfos_Erase RT_MANGLER(RTCrPkcs7SignerInfos_Erase) +# define RTCrPkcs7SignerInfos_InsertEx RT_MANGLER(RTCrPkcs7SignerInfos_InsertEx) +# define RTCrRsaOtherPrimeInfos_Erase RT_MANGLER(RTCrRsaOtherPrimeInfos_Erase) +# define RTCrRsaOtherPrimeInfos_InsertEx RT_MANGLER(RTCrRsaOtherPrimeInfos_InsertEx) +# define RTCrSpcSerializedObjectAttributes_Erase RT_MANGLER(RTCrSpcSerializedObjectAttributes_Erase) +# define RTCrSpcSerializedObjectAttributes_InsertEx RT_MANGLER(RTCrSpcSerializedObjectAttributes_InsertEx) +# define RTCrTafTrustAnchorList_Erase RT_MANGLER(RTCrTafTrustAnchorList_Erase) +# define RTCrTafTrustAnchorList_InsertEx RT_MANGLER(RTCrTafTrustAnchorList_InsertEx) +# define RTCrX509AlgorithmIdentifiers_Erase RT_MANGLER(RTCrX509AlgorithmIdentifiers_Erase) +# define RTCrX509AlgorithmIdentifiers_InsertEx RT_MANGLER(RTCrX509AlgorithmIdentifiers_InsertEx) +# define RTCrX509AttributeTypeAndValues_Erase RT_MANGLER(RTCrX509AttributeTypeAndValues_Erase) +# define RTCrX509AttributeTypeAndValues_InsertEx RT_MANGLER(RTCrX509AttributeTypeAndValues_InsertEx) +# define RTCrX509CertificatePolicies_Erase RT_MANGLER(RTCrX509CertificatePolicies_Erase) +# define RTCrX509CertificatePolicies_InsertEx RT_MANGLER(RTCrX509CertificatePolicies_InsertEx) +# define RTCrX509Certificates_Erase RT_MANGLER(RTCrX509Certificates_Erase) +# define RTCrX509Certificates_InsertEx RT_MANGLER(RTCrX509Certificates_InsertEx) +# define RTCrX509Extensions_Erase RT_MANGLER(RTCrX509Extensions_Erase) +# define RTCrX509Extensions_InsertEx RT_MANGLER(RTCrX509Extensions_InsertEx) +# define RTCrX509GeneralNames_Erase RT_MANGLER(RTCrX509GeneralNames_Erase) +# define RTCrX509GeneralNames_InsertEx RT_MANGLER(RTCrX509GeneralNames_InsertEx) +# define RTCrX509GeneralSubtrees_Erase RT_MANGLER(RTCrX509GeneralSubtrees_Erase) +# define RTCrX509GeneralSubtrees_InsertEx RT_MANGLER(RTCrX509GeneralSubtrees_InsertEx) +# define RTCrX509Name_Erase RT_MANGLER(RTCrX509Name_Erase) +# define RTCrX509Name_InsertEx RT_MANGLER(RTCrX509Name_InsertEx) +# define RTCrX509PolicyMappings_Erase RT_MANGLER(RTCrX509PolicyMappings_Erase) +# define RTCrX509PolicyMappings_InsertEx RT_MANGLER(RTCrX509PolicyMappings_InsertEx) +# define RTCrX509PolicyQualifierInfos_Erase RT_MANGLER(RTCrX509PolicyQualifierInfos_Erase) +# define RTCrX509PolicyQualifierInfos_InsertEx RT_MANGLER(RTCrX509PolicyQualifierInfos_InsertEx) + + +/* + * Stable variables (alphabetical order): + */ +# define g_apfnRTZlibDeps RT_MANGLER(g_apfnRTZlibDeps) /* os2 win solaris */ +# define g_aRTUniFlagsRanges RT_MANGLER(g_aRTUniFlagsRanges) +# define g_aRTUniLowerRanges RT_MANGLER(g_aRTUniLowerRanges) +# define g_aRTUniUpperRanges RT_MANGLER(g_aRTUniUpperRanges) +# define g_fRTAlignmentChecks RT_MANGLER(g_fRTAlignmentChecks) +# define g_hKrnlDbgInfo RT_MANGLER(g_hKrnlDbgInfo) /* solaris */ +# define g_pStdErr RT_MANGLER(g_pStdErr) +# define g_pStdIn RT_MANGLER(g_pStdIn) +# define g_pStdOut RT_MANGLER(g_pStdOut) +# define g_pszRTAssertExpr RT_MANGLER(g_pszRTAssertExpr) +# define g_pszRTAssertFile RT_MANGLER(g_pszRTAssertFile) +# define g_pszRTAssertFunction RT_MANGLER(g_pszRTAssertFunction) +# define g_szRTAssertMsg1 RT_MANGLER(g_szRTAssertMsg1) +# define g_szRTAssertMsg2 RT_MANGLER(g_szRTAssertMsg2) +# define g_u32RTAssertLine RT_MANGLER(g_u32RTAssertLine) + +/* sort/merge into the above later: */ +# define g_RTAsn1Time_Vtable RT_MANGLER(g_RTAsn1Time_Vtable) +# define g_RTAsn1String_Vtable RT_MANGLER(g_RTAsn1String_Vtable) +# define g_RTAsn1OctetString_Vtable RT_MANGLER(g_RTAsn1OctetString_Vtable) +# define g_RTAsn1ObjId_Vtable RT_MANGLER(g_RTAsn1ObjId_Vtable) +# define g_RTAsn1Null_Vtable RT_MANGLER(g_RTAsn1Null_Vtable) +# define g_RTAsn1Integer_Vtable RT_MANGLER(g_RTAsn1Integer_Vtable) +# define g_RTAsn1Core_Vtable RT_MANGLER(g_RTAsn1Core_Vtable) +# define g_RTAsn1Boolean_Vtable RT_MANGLER(g_RTAsn1Boolean_Vtable) +# define g_RTAsn1BitString_Vtable RT_MANGLER(g_RTAsn1BitString_Vtable) +# define g_RTAsn1DefaultAllocator RT_MANGLER(g_RTAsn1DefaultAllocator) +# define g_RTAsn1EFenceAllocator RT_MANGLER(g_RTAsn1EFenceAllocator) +# define g_aRTCrX509CertificateMarkers RT_MANGLER(g_aRTCrX509CertificateMarkers) +# define g_cRTCrX509CertificateMarkers RT_MANGLER(g_cRTCrX509CertificateMarkers) + +#if 0 /* Disabled for now as I'm not sure the assmbler supports mangling yet. */ +# define g_abRTZeroPage RT_MANGLER(g_abRTZeroPage) +# define g_abRTZero4K RT_MANGLER(g_abRTZero4K) +# define g_abRTZero8K RT_MANGLER(g_abRTZero8K) +# define g_abRTZero16K RT_MANGLER(g_abRTZero16K) +# define g_abRTZero32K RT_MANGLER(g_abRTZero32K) +# define g_abRTZero64K RT_MANGLER(g_abRTZero64K) +#endif + + +/* + * Unstable functions (alphabetical order): + */ +/** @todo the list is incomplete! See the .def files + libraries. */ + + +/* + * Unstable variables (alphabetical order): + */ +/* none */ + +#endif /* !DOXYGEN_RUNNING */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/mem.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/mem.h @@ -0,0 +1,987 @@ +/** @file + * IPRT - Memory Management and Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_mem_h +#define ___iprt_mem_h + + +#include +#include + + +#ifdef IN_RC +# error "There are no RTMem APIs available Guest Context!" +#endif + + +/** @defgroup grp_rt_mem RTMem - Memory Management and Manipulation + * @ingroup grp_rt + * @{ + */ + +RT_C_DECLS_BEGIN + +/** @def RTMEM_ALIGNMENT + * The alignment of the memory blocks returned by RTMemAlloc(), RTMemAllocZ(), + * RTMemRealloc(), RTMemTmpAlloc() and RTMemTmpAllocZ() for allocations greater + * than RTMEM_ALIGNMENT. + * + * @note This alignment is not forced if the electric fence is active! + */ +#if defined(RT_OS_OS2) +# define RTMEM_ALIGNMENT 4 +#else +# define RTMEM_ALIGNMENT 8 +#endif + +/** @def RTMEM_TAG + * The default allocation tag used by the RTMem allocation APIs. + * + * When not defined before the inclusion of iprt/mem.h or iprt/memobj.h, this + * will default to the pointer to the current file name. The memory API will + * make of use of this as pointer to a volatile but read-only string. + * The alternative tag includes the line number for a more-detailed analysis. + */ +#ifndef RTMEM_TAG +# if 0 +# define RTMEM_TAG (__FILE__ ":" RT_XSTR(__LINE__)) +# else +# define RTMEM_TAG (__FILE__) +# endif +#endif + + +/** @name Allocate temporary memory. + * @{ */ +/** + * Allocates temporary memory with default tag. + * + * Temporary memory blocks are used for not too large memory blocks which + * are believed not to stick around for too long. Using this API instead + * of RTMemAlloc() not only gives the heap manager room for optimization + * but makes the code easier to read. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemTmpAlloc(cb) RTMemTmpAllocTag((cb), RTMEM_TAG) + +/** + * Allocates temporary memory with custom tag. + * + * Temporary memory blocks are used for not too large memory blocks which + * are believed not to stick around for too long. Using this API instead + * of RTMemAlloc() not only gives the heap manager room for optimization + * but makes the code easier to read. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemTmpAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocates zero'd temporary memory with default tag. + * + * Same as RTMemTmpAlloc() but the memory will be zero'd. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemTmpAllocZ(cb) RTMemTmpAllocZTag((cb), RTMEM_TAG) + +/** + * Allocates zero'd temporary memory with custom tag. + * + * Same as RTMemTmpAlloc() but the memory will be zero'd. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemTmpAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free temporary memory. + * + * @param pv Pointer to memory block. + */ +RTDECL(void) RTMemTmpFree(void *pv) RT_NO_THROW_PROTO; + +/** @} */ + + +/** + * Allocates memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemAlloc(cb) RTMemAllocTag((cb), RTMEM_TAG) + +/** + * Allocates memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocates zero'd memory with default tag. + * + * Instead of memset(pv, 0, sizeof()) use this when you want zero'd + * memory. This keeps the code smaller and the heap can skip the memset + * in about 0.42% of calls :-). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemAllocZ(cb) RTMemAllocZTag((cb), RTMEM_TAG) + +/** + * Allocates zero'd memory with custom tag. + * + * Instead of memset(pv, 0, sizeof()) use this when you want zero'd + * memory. This keeps the code smaller and the heap can skip the memset + * in about 0.42% of calls :-). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Wrapper around RTMemAlloc for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAlloc. + * @param cbUnaligned The unaligned size. + */ +#define RTMemAllocVar(cbUnaligned) RTMemAllocVarTag((cbUnaligned), RTMEM_TAG) + +/** + * Wrapper around RTMemAllocTag for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAlloc. + * @param cbUnaligned The unaligned size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocVarTag(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Wrapper around RTMemAllocZ for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAllocZ. + * @param cbUnaligned The unaligned size. + */ +#define RTMemAllocZVar(cbUnaligned) RTMemAllocZVarTag((cbUnaligned), RTMEM_TAG) + +/** + * Wrapper around RTMemAllocZTag for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAllocZ. + * @param cbUnaligned The unaligned size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocZVarTag(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Duplicates a chunk of memory into a new heap block (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + */ +#define RTMemDup(pvSrc, cb) RTMemDupTag((pvSrc), (cb), RTMEM_TAG) + +/** + * Duplicates a chunk of memory into a new heap block (custom tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemDupTag(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Duplicates a chunk of memory into a new heap block with some additional + * zeroed memory (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + */ +#define RTMemDupEx(pvSrc, cbSrc, cbExtra) RTMemDupExTag((pvSrc), (cbSrc), (cbExtra), RTMEM_TAG) + +/** + * Duplicates a chunk of memory into a new heap block with some additional + * zeroed memory (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemDupExTag(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Reallocates memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + */ +#define RTMemRealloc(pvOld, cbNew) RTMemReallocTag((pvOld), (cbNew), RTMEM_TAG) + +/** + * Reallocates memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemReallocTag(void *pvOld, size_t cbNew, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Frees memory. + * + * @param pv Pointer to memory block. + */ +RTDECL(void) RTMemFree(void *pv) RT_NO_THROW_PROTO; + + + +/** @name RTR0MemAllocEx and RTR0MemAllocExTag flags. + * @{ */ +/** The returned memory should be zeroed. */ +#define RTMEMALLOCEX_FLAGS_ZEROED RT_BIT(0) +/** It must be load code into the returned memory block and execute it. */ +#define RTMEMALLOCEX_FLAGS_EXEC RT_BIT(1) +/** Allocation from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC RT_BIT(2) +/** Allocate the memory such that it can be freed from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX_FREE RT_BIT(3) +/** Allocate and free from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX (RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC | RTMEMALLOCEX_FLAGS_ANY_CTX_FREE) +/** Reachable by 16-bit address. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_16BIT_REACH RT_BIT(4) +/** Reachable by 32-bit address. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_32BIT_REACH RT_BIT(5) +/** Mask of valid flags. */ +#define RTMEMALLOCEX_FLAGS_VALID_MASK UINT32_C(0x0000003f) +/** Mask of valid flags for ring-0. */ +#define RTMEMALLOCEX_FLAGS_VALID_MASK_R0 UINT32_C(0x0000000f) +/** @} */ + +/** + * Extended heap allocation API, default tag. + * + * @returns IPRT status code. + * @retval VERR_NO_MEMORY if we're out of memory. + * @retval VERR_NO_EXEC_MEMORY if we're out of executable memory. + * @retval VERR_NOT_SUPPORTED if any of the specified flags are unsupported. + * + * @param cb The amount of memory to allocate. + * @param cbAlignment The alignment requirements. Use 0 to indicate + * default alignment. + * @param fFlags A combination of the RTMEMALLOCEX_FLAGS_XXX + * defines. + * @param ppv Where to return the memory. + */ +#define RTMemAllocEx(cb, cbAlignment, fFlags, ppv) RTMemAllocExTag((cb), (cbAlignment), (fFlags), RTMEM_TAG, (ppv)) + +/** + * Extended heap allocation API, custom tag. + * + * Depending on the implementation, using this function may add extra overhead, + * so use the simpler APIs where ever possible. + * + * @returns IPRT status code. + * @retval VERR_NO_MEMORY if we're out of memory. + * @retval VERR_NO_EXEC_MEMORY if we're out of executable memory. + * @retval VERR_NOT_SUPPORTED if any of the specified flags are unsupported. + * + * @param cb The amount of memory to allocate. + * @param cbAlignment The alignment requirements. Use 0 to indicate + * default alignment. + * @param fFlags A combination of the RTMEMALLOCEX_FLAGS_XXX + * defines. + * @param pszTag The tag. + * @param ppv Where to return the memory. + */ +RTDECL(int) RTMemAllocExTag(size_t cb, size_t cbAlignment, uint32_t fFlags, const char *pszTag, void **ppv) RT_NO_THROW_PROTO; + +/** + * For freeing memory allocated by RTMemAllocEx or RTMemAllocExTag. + * + * @param pv What to free, NULL is fine. + * @param cb The amount of allocated memory. + */ +RTDECL(void) RTMemFreeEx(void *pv, size_t cb) RT_NO_THROW_PROTO; + + + +/** + * Allocates memory which may contain code (default tag). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + */ +#define RTMemExecAlloc(cb) RTMemExecAllocTag((cb), RTMEM_TAG) + +/** + * Allocates memory which may contain code (custom tag). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemExecAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free executable/read/write memory allocated by RTMemExecAlloc(). + * + * @param pv Pointer to memory block. + * @param cb The allocation size. + */ +RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +#if defined(IN_RING0) && defined(RT_ARCH_AMD64) && defined(RT_OS_LINUX) +/** + * Donate read+write+execute memory to the exec heap. + * + * This API is specific to AMD64 and Linux/GNU. A kernel module that desires to + * use RTMemExecAlloc on AMD64 Linux/GNU will have to donate some statically + * allocated memory in the module if it wishes for GCC generated code to work. + * GCC can only generate modules that work in the address range ~2GB to ~0 + * currently. + * + * The API only accept one single donation. + * + * @returns IPRT status code. + * @param pvMemory Pointer to the memory block. + * @param cb The size of the memory block. + */ +RTR0DECL(int) RTR0MemExecDonate(void *pvMemory, size_t cb) RT_NO_THROW_PROTO; +#endif /* R0+AMD64+LINUX */ + +/** + * Allocate page aligned memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + */ +#define RTMemPageAlloc(cb) RTMemPageAllocTag((cb), RTMEM_TAG) + +/** + * Allocate page aligned memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemPageAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocate zero'd page aligned memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + */ +#define RTMemPageAllocZ(cb) RTMemPageAllocZTag((cb), RTMEM_TAG) + +/** + * Allocate zero'd page aligned memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemPageAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free a memory block allocated with RTMemPageAlloc() or RTMemPageAllocZ(). + * + * @param pv Pointer to the block as it was returned by the allocation function. + * NULL will be ignored. + * @param cb The allocation size. Will be rounded up to page size. + * Ignored if @a pv is NULL. + */ +RTDECL(void) RTMemPageFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +/** Page level protection flags for RTMemProtect(). + * @{ + */ +/** No access at all. */ +#define RTMEM_PROT_NONE 0 +/** Read access. */ +#define RTMEM_PROT_READ 1 +/** Write access. */ +#define RTMEM_PROT_WRITE 2 +/** Execute access. */ +#define RTMEM_PROT_EXEC 4 +/** @} */ + +/** + * Change the page level protection of a memory region. + * + * @returns iprt status code. + * @param pv Start of the region. Will be rounded down to nearest page boundary. + * @param cb Size of the region. Will be rounded up to the nearest page boundary. + * @param fProtect The new protection, a combination of the RTMEM_PROT_* defines. + */ +RTDECL(int) RTMemProtect(void *pv, size_t cb, unsigned fProtect) RT_NO_THROW_PROTO; + +/** + * Goes thru some pains to make sure the specified memory block is thoroughly + * scrambled. + * + * @param pv The start of the memory block. + * @param cb The size of the memory block. + * @param cMinPasses The minimum number of passes to make. + */ +RTDECL(void) RTMemWipeThoroughly(void *pv, size_t cb, size_t cMinPasses) RT_NO_THROW_PROTO; + +#ifdef IN_RING0 + +/** + * Allocates physical contiguous memory (below 4GB). + * The allocation is page aligned and the content is undefined. + * + * @returns Pointer to the memory block. This is page aligned. + * @param pPhys Where to store the physical address. + * @param cb The allocation size in bytes. This is always + * rounded up to PAGE_SIZE. + */ +RTR0DECL(void *) RTMemContAlloc(PRTCCPHYS pPhys, size_t cb) RT_NO_THROW_PROTO; + +/** + * Frees memory allocated ysing RTMemContAlloc(). + * + * @param pv Pointer to return from RTMemContAlloc(). + * @param cb The cb parameter passed to RTMemContAlloc(). + */ +RTR0DECL(void) RTMemContFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +/** + * Copy memory from an user mode buffer into a kernel buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * + * @param pvDst The kernel mode destination address. + * @param R3PtrSrc The user mode source address. + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemUserCopyFrom(void *pvDst, RTR3PTR R3PtrSrc, size_t cb); + +/** + * Copy memory from a kernel buffer into a user mode one. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * + * @param R3PtrDst The user mode destination address. + * @param pvSrc The kernel mode source address. + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemUserCopyTo(RTR3PTR R3PtrDst, void const *pvSrc, size_t cb); + +/** + * Tests if the specified address is in the user addressable range. + * + * This function does not check whether the memory at that address is accessible + * or anything of that sort, only if the address it self is in the user mode + * range. + * + * @returns true if it's in the user addressable range. false if not. + * @param R3Ptr The user mode pointer to test. + * + * @remarks Some systems may have overlapping kernel and user address ranges. + * One prominent example of this is the x86 version of Mac OS X. Use + * RTR0MemAreKrnlAndUsrDifferent() to check. + */ +RTR0DECL(bool) RTR0MemUserIsValidAddr(RTR3PTR R3Ptr); + +/** + * Tests if the specified address is in the kernel mode range. + * + * This function does not check whether the memory at that address is accessible + * or anything of that sort, only if the address it self is in the kernel mode + * range. + * + * @returns true if it's in the kernel range. false if not. + * @param pv The alleged kernel mode pointer. + * + * @remarks Some systems may have overlapping kernel and user address ranges. + * One prominent example of this is the x86 version of Mac OS X. Use + * RTR0MemAreKrnlAndUsrDifferent() to check. + */ +RTR0DECL(bool) RTR0MemKernelIsValidAddr(void *pv); + +/** + * Are user mode and kernel mode address ranges distinctly different. + * + * This determines whether RTR0MemKernelIsValidAddr and RTR0MemUserIsValidAddr + * can be used for deciding whether some arbitrary address is a user mode or a + * kernel mode one. + * + * @returns true if they are, false if not. + */ +RTR0DECL(bool) RTR0MemAreKrnlAndUsrDifferent(void); + +/** + * Copy memory from an potentially unsafe kernel mode location and into a safe + * (kernel) buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * @retval VERR_NOT_SUPPORTED if not (yet) supported. + * + * @param pvDst The destination address (safe). + * @param pvSrc The source address (potentially unsafe). + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemKernelCopyFrom(void *pvDst, void const *pvSrc, size_t cb); + +/** + * Copy from a safe (kernel) buffer and to a potentially unsafe kenrel mode + * location. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * @retval VERR_NOT_SUPPORTED if not (yet) supported. + * + * @param pvDst The destination address (potentially unsafe). + * @param pvSrc The source address (safe). + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemKernelCopyTo(void *pvDst, void const *pvSrc, size_t cb); + +#endif /* IN_RING0 */ + + +/** @name Electrical Fence Version of some APIs. + * @{ + */ + +/** + * Same as RTMemTmpAllocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. + * Use RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfTmpAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemTmpAllocZTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfTmpAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemTmpFree() except that it's for fenced memory. + * + * @param pv Pointer to memory block. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void) RTMemEfTmpFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. Free with RTMemEfFree(). + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocZTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocVarTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. Free with RTMemEfFree(). + * @returns NULL on failure. + * @param cbUnaligned Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocZVarTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cbUnaligned Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocZVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemReallocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfRealloc(void *pvOld, size_t cbNew, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Free memory allocated by any of the RTMemEf* allocators. + * + * @param pv Pointer to memory block. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void) RTMemEfFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemDupTag() except that it's fenced. + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfDup(const void *pvSrc, size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemEfDupExTag except that it's fenced. + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfDupEx(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** @def RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF + * Define RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF to enable electric fence new and + * delete operators for classes which uses the RTMEMEF_NEW_AND_DELETE_OPERATORS + * macro. + */ +/** @def RTMEMEF_NEW_AND_DELETE_OPERATORS + * Defines the electric fence new and delete operators for a class when + * RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF is define. + */ +/** @def RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT + * Defines the electric fence new and delete operators for an IOKit class when + * RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF is define. + * + * This differs from RTMEMEF_NEW_AND_DELETE_OPERATORS in that the memory we + * allocate is initialized to zero. It is also assuming we don't have nothrow + * variants and exceptions, so fewer variations. + */ +#if defined(RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF) && !defined(RTMEM_NO_WRAP_SOME_NEW_AND_DELETE_TO_EF) +# if defined(RT_EXCEPTIONS_ENABLED) +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + void *operator new(size_t cb) RT_THROW(std::bad_alloc) \ + { \ + void *pv = RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + if (RT_LIKELY(pv)) \ + return pv; \ + throw std::bad_alloc(); \ + } \ + void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) RT_THROW(std::bad_alloc) \ + { \ + void *pv = RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + if (RT_LIKELY(pv)) \ + return pv; \ + throw std::bad_alloc(); \ + } \ + void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) RT_NO_THROW_DEF \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) RT_NO_THROW_DEF \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +# else +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + void *operator new(size_t cb) \ + { \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) \ + { \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +# endif +# define RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT() \ + void *operator new(size_t cb) \ + { \ + return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) \ + { \ + return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +#else +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + typedef int UsingDefaultNewAndDeleteOperators +# define RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT() \ + typedef int UsingDefaultNewAndDeleteOperators +#endif +#ifdef DOXYGEN_RUNNING +# define RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF +#endif + +/** @def RTMEM_WRAP_TO_EF_APIS + * Define RTMEM_WRAP_TO_EF_APIS to wrap RTMem APIs to RTMemEf APIs. + */ +#if defined(RTMEM_WRAP_TO_EF_APIS) && !defined(RTMEM_NO_WRAP_TO_EF_APIS) \ + && ( defined(IN_RING3) || ( defined(IN_RING0) && !defined(IN_RING0_AGNOSTIC) && (defined(RT_OS_DARWIN) || 0) ) ) +# define RTMemTmpAllocTag(cb, pszTag) RTMemEfTmpAlloc((cb), (pszTag), RT_SRC_POS) +# define RTMemTmpAllocZTag(cb, pszTag) RTMemEfTmpAllocZ((cb), (pszTag), RT_SRC_POS) +# define RTMemTmpFree(pv) RTMemEfTmpFree((pv), RT_SRC_POS) +# define RTMemAllocTag(cb, pszTag) RTMemEfAlloc((cb), (pszTag), RT_SRC_POS) +# define RTMemAllocZTag(cb, pszTag) RTMemEfAllocZ((cb), (pszTag), RT_SRC_POS) +# define RTMemAllocVarTag(cbUnaligned, pszTag) RTMemEfAllocVar((cbUnaligned), (pszTag), RT_SRC_POS) +# define RTMemAllocZVarTag(cbUnaligned, pszTag) RTMemEfAllocZVar((cbUnaligned), (pszTag), RT_SRC_POS) +# define RTMemReallocTag(pvOld, cbNew, pszTag) RTMemEfRealloc((pvOld), (cbNew), (pszTag), RT_SRC_POS) +# define RTMemFree(pv) RTMemEfFree((pv), RT_SRC_POS) +# define RTMemDupTag(pvSrc, cb, pszTag) RTMemEfDup((pvSrc), (cb), (pszTag), RT_SRC_POS) +# define RTMemDupExTag(pvSrc, cbSrc, cbExtra, pszTag) RTMemEfDupEx((pvSrc), (cbSrc), (cbExtra), (pszTag), RT_SRC_POS) +#endif +#ifdef DOXYGEN_RUNNING +# define RTMEM_WRAP_TO_EF_APIS +#endif + +/** + * Fenced drop-in replacement for RTMemTmpAllocTag. + * @copydoc RTMemTmpAllocTag + */ +RTDECL(void *) RTMemEfTmpAllocNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemTmpAllocZTag. + * @copydoc RTMemTmpAllocZTag + */ +RTDECL(void *) RTMemEfTmpAllocZNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemTmpFreeTag. + * @copydoc RTMemTmpFree + */ +RTDECL(void) RTMemEfTmpFreeNP(void *pv) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocTag. + * @copydoc RTMemAllocTag + */ +RTDECL(void *) RTMemEfAllocNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocZTag. + * @copydoc RTMemAllocZTag + */ +RTDECL(void *) RTMemEfAllocZNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocVarTag + * @copydoc RTMemAllocVarTag + */ +RTDECL(void *) RTMemEfAllocVarNP(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocZVarTag. + * @copydoc RTMemAllocZVarTag + */ +RTDECL(void *) RTMemEfAllocZVarNP(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemReallocTag. + * @copydoc RTMemReallocTag + */ +RTDECL(void *) RTMemEfReallocNP(void *pvOld, size_t cbNew, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemFree. + * @copydoc RTMemFree + */ +RTDECL(void) RTMemEfFreeNP(void *pv) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemDupExTag. + * @copydoc RTMemDupTag + */ +RTDECL(void *) RTMemEfDupNP(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemDupExTag. + * @copydoc RTMemDupExTag + */ +RTDECL(void *) RTMemEfDupExNP(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag) RT_NO_THROW_PROTO; + +/** @} */ + +RT_C_DECLS_END + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/memobj.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/memobj.h @@ -0,0 +1,629 @@ +/** @file + * IPRT - Memory Objects (Ring-0). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_memobj_h +#define ___iprt_memobj_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_memobj RTMemObj - Memory Object Manipulation (Ring-0) + * @ingroup grp_rt + * @{ + */ + +/** @def RTMEM_TAG + * The default allocation tag used by the RTMem allocation APIs. + * + * When not defined before the inclusion of iprt/memobj.h or iprt/mem.h, this + * will default to the pointer to the current file name. The memory API will + * make of use of this as pointer to a volatile but read-only string. + */ +#ifndef RTMEM_TAG +# define RTMEM_TAG (__FILE__) +#endif + +#ifdef IN_RING0 + +/** + * Checks if this is mapping or not. + * + * @returns true if it's a mapping, otherwise false. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(bool) RTR0MemObjIsMapping(RTR0MEMOBJ MemObj); + +/** + * Gets the address of a ring-0 memory object. + * + * @returns The address of the memory object. + * @returns NULL if the handle is invalid (asserts in strict builds) or if there isn't any mapping. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(void *) RTR0MemObjAddress(RTR0MEMOBJ MemObj); + +/** + * Gets the ring-3 address of a ring-0 memory object. + * + * This only applies to ring-0 memory object with ring-3 mappings of some kind, i.e. + * locked user memory, reserved user address space and user mappings. This API should + * not be used on any other objects. + * + * @returns The address of the memory object. + * @returns NIL_RTR3PTR if the handle is invalid or if it's not an object with a ring-3 mapping. + * Strict builds will assert in both cases. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(RTR3PTR) RTR0MemObjAddressR3(RTR0MEMOBJ MemObj); + +/** + * Gets the size of a ring-0 memory object. + * + * The returned value may differ from the one specified to the API creating the + * object because of alignment adjustments. The minimal alignment currently + * employed by any API is PAGE_SIZE, so the result can safely be shifted by + * PAGE_SHIFT to calculate a page count. + * + * @returns The object size. + * @returns 0 if the handle is invalid (asserts in strict builds) or if there isn't any mapping. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(size_t) RTR0MemObjSize(RTR0MEMOBJ MemObj); + +/** + * Get the physical address of an page in the memory object. + * + * @returns The physical address. + * @returns NIL_RTHCPHYS if the object doesn't contain fixed physical pages. + * @returns NIL_RTHCPHYS if the iPage is out of range. + * @returns NIL_RTHCPHYS if the object handle isn't valid. + * @param MemObj The ring-0 memory object handle. + * @param iPage The page number within the object. + */ +RTR0DECL(RTHCPHYS) RTR0MemObjGetPagePhysAddr(RTR0MEMOBJ MemObj, size_t iPage); + +/** + * Frees a ring-0 memory object. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if + * @param MemObj The ring-0 memory object to be freed. NULL is accepted. + * @param fFreeMappings Whether or not to free mappings of the object. + */ +RTR0DECL(int) RTR0MemObjFree(RTR0MEMOBJ MemObj, bool fFreeMappings); + +/** + * Allocates page aligned virtual kernel memory (default tag). + * + * The memory is taken from a non paged (= fixed physical memory backing) pool. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +#define RTR0MemObjAllocPage(pMemObj, cb, fExecutable) \ + RTR0MemObjAllocPageTag((pMemObj), (cb), (fExecutable), RTMEM_TAG) + +/** + * Allocates page aligned virtual kernel memory (custom tag). + * + * The memory is taken from a non paged (= fixed physical memory backing) pool. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocPageTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag); + +/** + * Allocates page aligned virtual kernel memory with physical backing below 4GB + * (default tag). + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +#define RTR0MemObjAllocLow(pMemObj, cb, fExecutable) \ + RTR0MemObjAllocLowTag((pMemObj), (cb), (fExecutable), RTMEM_TAG) + +/** + * Allocates page aligned virtual kernel memory with physical backing below 4GB + * (custom tag). + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag); + +/** + * Allocates page aligned virtual kernel memory with contiguous physical backing + * below 4GB (default tag). + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + */ +#define RTR0MemObjAllocCont(pMemObj, cb, fExecutable) \ + RTR0MemObjAllocContTag((pMemObj), (cb), (fExecutable), RTMEM_TAG) + +/** + * Allocates page aligned virtual kernel memory with contiguous physical backing + * below 4GB (custom tag). + * + * The physical memory backing the allocation is fixed. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag); + +/** + * Locks a range of user virtual memory (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param R3Ptr User virtual address. This is rounded down to a page + * boundary. + * @param cb Number of bytes to lock. This is rounded up to + * nearest page boundary. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + * @param R0Process The process to lock pages in. NIL_R0PROCESS is an + * alias for the current one. + * + * @remarks RTR0MemGetAddressR3() and RTR0MemGetAddress() will return therounded + * down address. + * + * @remarks Linux: This API requires that the memory begin locked is in a memory + * mapping that is not required in any forked off child process. This + * is not intented as permanent restriction, feel free to help out + * lifting it. + */ +#define RTR0MemObjLockUser(pMemObj, R3Ptr, cb, fAccess, R0Process) \ + RTR0MemObjLockUserTag((pMemObj), (R3Ptr), (cb), (fAccess), (R0Process), RTMEM_TAG) + +/** + * Locks a range of user virtual memory (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param R3Ptr User virtual address. This is rounded down to a page + * boundary. + * @param cb Number of bytes to lock. This is rounded up to + * nearest page boundary. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + * @param R0Process The process to lock pages in. NIL_R0PROCESS is an + * alias for the current one. + * @param pszTag Allocation tag used for statistics and such. + * + * @remarks RTR0MemGetAddressR3() and RTR0MemGetAddress() will return therounded + * down address. + * + * @remarks Linux: This API requires that the memory begin locked is in a memory + * mapping that is not required in any forked off child process. This + * is not intented as permanent restriction, feel free to help out + * lifting it. + */ +RTR0DECL(int) RTR0MemObjLockUserTag(PRTR0MEMOBJ pMemObj, RTR3PTR R3Ptr, size_t cb, uint32_t fAccess, + RTR0PROCESS R0Process, const char *pszTag); + +/** + * Locks a range of kernel virtual memory (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param pv Kernel virtual address. This is rounded down to a page boundary. + * @param cb Number of bytes to lock. This is rounded up to nearest page boundary. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + * + * @remark RTR0MemGetAddress() will return the rounded down address. + */ +#define RTR0MemObjLockKernel(pMemObj, pv, cb, fAccess) \ + RTR0MemObjLockKernelTag((pMemObj), (pv), (cb), (fAccess), RTMEM_TAG) + +/** + * Locks a range of kernel virtual memory (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param pv Kernel virtual address. This is rounded down to a page boundary. + * @param cb Number of bytes to lock. This is rounded up to nearest page boundary. + * @param fAccess The desired access, a combination of RTMEM_PROT_READ + * and RTMEM_PROT_WRITE. + * @param pszTag Allocation tag used for statistics and such. + * + * @remark RTR0MemGetAddress() will return the rounded down address. + */ +RTR0DECL(int) RTR0MemObjLockKernelTag(PRTR0MEMOBJ pMemObj, void *pv, size_t cb, uint32_t fAccess, const char *pszTag); + +/** + * Allocates contiguous page aligned physical memory without (necessarily) any + * kernel mapping (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + */ +#define RTR0MemObjAllocPhys(pMemObj, cb, PhysHighest) \ + RTR0MemObjAllocPhysTag((pMemObj), (cb), (PhysHighest), RTMEM_TAG) + +/** + * Allocates contiguous page aligned physical memory without (necessarily) any + * kernel mapping (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocPhysTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, const char *pszTag); + +/** + * Allocates contiguous physical memory without (necessarily) any kernel mapping + * (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M, _4M and _1G. + */ +#define RTR0MemObjAllocPhysEx(pMemObj, cb, PhysHighest, uAlignment) \ + RTR0MemObjAllocPhysExTag((pMemObj), (cb), (PhysHighest), (uAlignment), RTMEM_TAG) + +/** + * Allocates contiguous physical memory without (necessarily) any kernel mapping + * (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M, _4M and _1G. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocPhysExTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment, const char *pszTag); + +/** + * Allocates non-contiguous page aligned physical memory without (necessarily) + * any kernel mapping (default tag). + * + * This API is for allocating huge amounts of pages and will return + * VERR_NOT_SUPPORTED if this cannot be implemented in a satisfactory + * manner. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if it's not possible to allocated unmapped + * physical memory on this platform. The caller should expect + * this error and have a fallback strategy for it. + * + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + */ +#define RTR0MemObjAllocPhysNC(pMemObj, cb, PhysHighest) \ + RTR0MemObjAllocPhysNCTag((pMemObj), (cb), (PhysHighest), RTMEM_TAG) + +/** + * Allocates non-contiguous page aligned physical memory without (necessarily) + * any kernel mapping (custom tag). + * + * This API is for allocating huge amounts of pages and will return + * VERR_NOT_SUPPORTED if this cannot be implemented in a satisfactory + * manner. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if it's not possible to allocated unmapped + * physical memory on this platform. The caller should expect + * this error and have a fallback strategy for it. + * + * @param pMemObj Where to store the ring-0 memory object handle. + * @param cb Number of bytes to allocate. This is rounded up to nearest page. + * @param PhysHighest The highest permitable address (inclusive). + * Pass NIL_RTHCPHYS if any address is acceptable. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjAllocPhysNCTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, const char *pszTag); + +/** Memory cache policy for RTR0MemObjEnterPhys. + * @{ + */ +/** Default caching policy -- don't care. */ +#define RTMEM_CACHE_POLICY_DONT_CARE UINT32_C(0) +/** MMIO caching policy -- uncachable. */ +#define RTMEM_CACHE_POLICY_MMIO UINT32_C(1) +/** @} */ + +/** + * Creates a page aligned, contiguous, physical memory object (default tag). + * + * No physical memory is allocated, we trust you do know what you're doing. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param Phys The physical address to start at. This is rounded down to the + * nearest page boundary. + * @param cb The size of the object in bytes. This is rounded up to nearest page boundary. + * @param uCachePolicy One of the RTMEM_CACHE_XXX modes. + */ +#define RTR0MemObjEnterPhys(pMemObj, Phys, cb, uCachePolicy) \ + RTR0MemObjEnterPhysTag((pMemObj), (Phys), (cb), (uCachePolicy), RTMEM_TAG) + +/** + * Creates a page aligned, contiguous, physical memory object (custom tag). + * + * No physical memory is allocated, we trust you do know what you're doing. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param Phys The physical address to start at. This is rounded down to the + * nearest page boundary. + * @param cb The size of the object in bytes. This is rounded up to nearest page boundary. + * @param uCachePolicy One of the RTMEM_CACHE_XXX modes. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjEnterPhysTag(PRTR0MEMOBJ pMemObj, RTHCPHYS Phys, size_t cb, uint32_t uCachePolicy, const char *pszTag); + +/** + * Reserves kernel virtual address space (default tag). + * + * If this function fails with VERR_NOT_SUPPORTED, the idea is that you + * can use RTR0MemObjEnterPhys() + RTR0MemObjMapKernel() as a fallback if + * you have a safe physical address range to make use of... + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param cb The number of bytes to reserve. This is rounded up to nearest page. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + */ +#define RTR0MemObjReserveKernel(pMemObj, pvFixed, cb, uAlignment) \ + RTR0MemObjReserveKernelTag((pMemObj), (pvFixed), (cb), (uAlignment), RTMEM_TAG) + +/** + * Reserves kernel virtual address space (custom tag). + * + * If this function fails with VERR_NOT_SUPPORTED, the idea is that you + * can use RTR0MemObjEnterPhys() + RTR0MemObjMapKernel() as a fallback if + * you have a safe physical address range to make use of... + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param cb The number of bytes to reserve. This is rounded up to nearest page. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjReserveKernelTag(PRTR0MEMOBJ pMemObj, void *pvFixed, size_t cb, size_t uAlignment, const char *pszTag); + +/** + * Reserves user virtual address space in the current process (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This must match the alignment. + * @param cb The number of bytes to reserve. This is rounded up to nearest PAGE_SIZE. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param R0Process The process to reserve the memory in. NIL_R0PROCESS is an alias for the current one. + */ +#define RTR0MemObjReserveUser(pMemObj, R3PtrFixed, cb, uAlignment, R0Process) \ + RTR0MemObjReserveUserTag((pMemObj), (R3PtrFixed), (cb), (uAlignment), (R0Process), RTMEM_TAG) + +/** + * Reserves user virtual address space in the current process (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This must match the alignment. + * @param cb The number of bytes to reserve. This is rounded up to nearest PAGE_SIZE. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param R0Process The process to reserve the memory in. NIL_R0PROCESS is an alias for the current one. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjReserveUserTag(PRTR0MEMOBJ pMemObj, RTR3PTR R3PtrFixed, size_t cb, size_t uAlignment, + RTR0PROCESS R0Process, const char *pszTag); + +/** + * Maps a memory object into kernel virtual address space (default tag). + * + * This is the same as calling RTR0MemObjMapKernelEx with cbSub and offSub set + * to zero. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + */ +#define RTR0MemObjMapKernel(pMemObj, MemObjToMap, pvFixed, uAlignment, fProt) \ + RTR0MemObjMapKernelTag((pMemObj), (MemObjToMap), (pvFixed), (uAlignment), (fProt), RTMEM_TAG) + +/** + * Maps a memory object into kernel virtual address space (custom tag). + * + * This is the same as calling RTR0MemObjMapKernelEx with cbSub and offSub set + * to zero. + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjMapKernelTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, void *pvFixed, + size_t uAlignment, unsigned fProt, const char *pszTag); + +/** + * Maps a memory object into kernel virtual address space (default tag). + * + * The ability to map subsections of the object into kernel space is currently + * not implemented on all platforms. All/Most of platforms supports mapping the + * whole object into kernel space. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if it's not possible to map a subsection of a + * memory object on this platform. When you hit this, try implement it. + * + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param offSub Where in the object to start mapping. If non-zero + * the value must be page aligned and cbSub must be + * non-zero as well. + * @param cbSub The size of the part of the object to be mapped. If + * zero the entire object is mapped. The value must be + * page aligned. + */ +#define RTR0MemObjMapKernelEx(pMemObj, MemObjToMap, pvFixed, uAlignment, fProt, offSub, cbSub) \ + RTR0MemObjMapKernelExTag((pMemObj), (MemObjToMap), (pvFixed), (uAlignment), (fProt), (offSub), (cbSub), RTMEM_TAG) + +/** + * Maps a memory object into kernel virtual address space (custom tag). + * + * The ability to map subsections of the object into kernel space is currently + * not implemented on all platforms. All/Most of platforms supports mapping the + * whole object into kernel space. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if it's not possible to map a subsection of a + * memory object on this platform. When you hit this, try implement it. + * + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param pvFixed Requested address. (void *)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param offSub Where in the object to start mapping. If non-zero + * the value must be page aligned and cbSub must be + * non-zero as well. + * @param cbSub The size of the part of the object to be mapped. If + * zero the entire object is mapped. The value must be + * page aligned. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjMapKernelExTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, void *pvFixed, size_t uAlignment, + unsigned fProt, size_t offSub, size_t cbSub, const char *pszTag); + +/** + * Maps a memory object into user virtual address space in the current process + * (default tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param R0Process The process to map the memory into. NIL_R0PROCESS is an alias for the current one. + */ +#define RTR0MemObjMapUser(pMemObj, MemObjToMap, R3PtrFixed, uAlignment, fProt, R0Process) \ + RTR0MemObjMapUserTag((pMemObj), (MemObjToMap), (R3PtrFixed), (uAlignment), (fProt), (R0Process), RTMEM_TAG) + +/** + * Maps a memory object into user virtual address space in the current process + * (custom tag). + * + * @returns IPRT status code. + * @param pMemObj Where to store the ring-0 memory object handle of the mapping object. + * @param MemObjToMap The object to be map. + * @param R3PtrFixed Requested address. (RTR3PTR)-1 means any address. This must match the alignment. + * @param uAlignment The alignment of the reserved memory. + * Supported values are 0 (alias for PAGE_SIZE), PAGE_SIZE, _2M and _4M. + * @param fProt Combination of RTMEM_PROT_* flags (except RTMEM_PROT_NONE). + * @param R0Process The process to map the memory into. NIL_R0PROCESS is an alias for the current one. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR0DECL(int) RTR0MemObjMapUserTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, RTR3PTR R3PtrFixed, + size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process, const char *pszTag); + +/** + * Change the page level protection of one or more pages in a memory object. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if the OS doesn't provide any way to manipulate + * page level protection. The caller must handle this status code + * gracefully. (Note that it may also occur if the implementation is + * missing, in which case just go ahead and implement it.) + * + * @param hMemObj Memory object handle. + * @param offSub Offset into the memory object. Must be page aligned. + * @param cbSub Number of bytes to change the protection of. Must be + * page aligned. + * @param fProt Combination of RTMEM_PROT_* flags. + */ +RTR0DECL(int) RTR0MemObjProtect(RTR0MEMOBJ hMemObj, size_t offSub, size_t cbSub, uint32_t fProt); + +#endif /* IN_RING0 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/mp.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/mp.h @@ -0,0 +1,508 @@ +/** @file + * IPRT - Multiprocessor. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_mp_h +#define ___iprt_mp_h + +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_mp RTMp - Multiprocessor + * @ingroup grp_rt + * @{ + */ + +/** + * Gets the identifier of the CPU executing the call. + * + * When called from a system mode where scheduling is active, like ring-3 or + * kernel mode with interrupts enabled on some systems, no assumptions should + * be made about the current CPU when the call returns. + * + * @returns CPU Id. + */ +RTDECL(RTCPUID) RTMpCpuId(void); + +/** + * Get the CPU set index of the CPU executing the call. + * + * Same scheduling warnings as for RTMpCpuId(). + * + * @returns CPU set index. + */ +RTDECL(int) RTMpCurSetIndex(void); + +/** + * Get the CPU set index and identifier of the CPU executing the call. + * + * Same scheduling warnings as for RTMpCpuId(). + * + * @returns CPU set index. + * @param pidCpu Where to return the CPU identifier. (not optional) + */ +RTDECL(int) RTMpCurSetIndexAndId(PRTCPUID pidCpu); + +/** + * Converts a CPU identifier to a CPU set index. + * + * This may or may not validate the presence of the CPU. + * + * @returns The CPU set index on success, -1 on failure. + * @param idCpu The identifier of the CPU. + */ +RTDECL(int) RTMpCpuIdToSetIndex(RTCPUID idCpu); + +/** + * Converts a CPU set index to a a CPU identifier. + * + * This may or may not validate the presence of the CPU, so, use + * RTMpIsCpuPossible for that. + * + * @returns The corresponding CPU identifier, NIL_RTCPUID on failure. + * @param iCpu The CPU set index. + */ +RTDECL(RTCPUID) RTMpCpuIdFromSetIndex(int iCpu); + +/** + * Translates an NT process group member to a CPU set index. + * + * @returns CPU set index, -1 if not valid. + * @param idxGroup The CPU group. + * @param idxMember The CPU group member number. + * + * @remarks Only available on Windows. + */ +RTDECL(int) RTMpSetIndexFromCpuGroupMember(uint32_t idxGroup, uint32_t idxMember); + +/** + * Gets the member numbers for a CPU group. + * + * @returns Maximum number of group members. + * @param idxGroup The CPU group. + * @param pcActive Where to return the number of active members. + * + * @remarks Only available on Windows. + */ +RTDECL(uint32_t) RTMpGetCpuGroupCounts(uint32_t idxGroup, uint32_t *pcActive); + +/** + * Get the maximum number of CPU groups. + * + * @returns Maximum number of CPU groups. + * + * @remarks Only available on Windows. + */ +RTDECL(uint32_t) RTMpGetMaxCpuGroupCount(void); + +/** + * Gets the max CPU identifier (inclusive). + * + * Intended for brute force enumerations, but use with + * care as it may be expensive. + * + * @returns The current higest CPU identifier value. + */ +RTDECL(RTCPUID) RTMpGetMaxCpuId(void); + +/** + * Gets the size of a CPU array that is indexed by CPU set index. + * + * This takes both online, offline and hot-plugged cpus into account. + * + * @returns Number of elements. + * + * @remarks Use RTMpCpuIdToSetIndex to convert a RTCPUID into an array index. + */ +RTDECL(uint32_t) RTMpGetArraySize(void); + +/** + * Checks if a CPU exists in the system or may possibly be hotplugged later. + * + * @returns true/false accordingly. + * @param idCpu The identifier of the CPU. + */ +RTDECL(bool) RTMpIsCpuPossible(RTCPUID idCpu); + +/** + * Gets set of the CPUs present in the system plus any that may + * possibly be hotplugged later. + * + * @returns pSet. + * @param pSet Where to put the set. + */ +RTDECL(PRTCPUSET) RTMpGetSet(PRTCPUSET pSet); + +/** + * Get the count of CPUs present in the system plus any that may + * possibly be hotplugged later. + * + * @returns The count. + * @remarks Don't use this for CPU array sizing, use RTMpGetArraySize instead. + */ +RTDECL(RTCPUID) RTMpGetCount(void); + +/** + * Get the count of physical CPU cores present in the system plus any that may + * possibly be hotplugged later. + * + * @returns The number of cores. + */ +RTDECL(RTCPUID) RTMpGetCoreCount(void); + +/** + * Gets set of the CPUs present that are currently online. + * + * @returns pSet. + * @param pSet Where to put the set. + */ +RTDECL(PRTCPUSET) RTMpGetOnlineSet(PRTCPUSET pSet); + +/** + * Get the count of CPUs that are currently online. + * + * @return The count. + */ +RTDECL(RTCPUID) RTMpGetOnlineCount(void); + +/** + * Get the count of physical CPU cores in the system with one or more online + * threads. + * + * @returns The number of online cores. + */ +RTDECL(RTCPUID) RTMpGetOnlineCoreCount(void); + +/** + * Checks if a CPU is online or not. + * + * @returns true/false accordingly. + * @param idCpu The identifier of the CPU. + */ +RTDECL(bool) RTMpIsCpuOnline(RTCPUID idCpu); + + +/** + * Gets set of the CPUs present in the system. + * + * @returns pSet. + * @param pSet Where to put the set. + */ +RTDECL(PRTCPUSET) RTMpGetPresentSet(PRTCPUSET pSet); + +/** + * Get the count of CPUs that are present in the system. + * + * @return The count. + */ +RTDECL(RTCPUID) RTMpGetPresentCount(void); + +/** + * Get the count of physical CPU cores present in the system. + * + * @returns The number of cores. + */ +RTDECL(RTCPUID) RTMpGetPresentCoreCount(void); + +/** + * Checks if a CPU is present in the system. + * + * @returns true/false accordingly. + * @param idCpu The identifier of the CPU. + */ +RTDECL(bool) RTMpIsCpuPresent(RTCPUID idCpu); + + +/** + * Get the current frequency of a CPU. + * + * The CPU must be online. + * + * @returns The frequency as MHz. 0 if the CPU is offline + * or the information is not available. + * @param idCpu The identifier of the CPU. + */ +RTDECL(uint32_t) RTMpGetCurFrequency(RTCPUID idCpu); + +/** + * Get the maximum frequency of a CPU. + * + * The CPU must be online. + * + * @returns The frequency as MHz. 0 if the CPU is offline + * or the information is not available. + * @param idCpu The identifier of the CPU. + */ +RTDECL(uint32_t) RTMpGetMaxFrequency(RTCPUID idCpu); + +/** + * Get the CPU description string. + * + * The CPU must be online. + * + * @returns IPRT status code. + * @param idCpu The identifier of the CPU. NIL_RTCPUID can be used to + * indicate the current CPU. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + */ +RTDECL(int) RTMpGetDescription(RTCPUID idCpu, char *pszBuf, size_t cbBuf); + + +#ifdef IN_RING0 + +/** + * Check if there's work (DPCs on Windows) pending on the current CPU. + * + * @return true if there's pending work on the current CPU, false otherwise. + */ +RTDECL(bool) RTMpIsCpuWorkPending(void); + + +/** + * Worker function passed to RTMpOnAll, RTMpOnOthers and RTMpOnSpecific that + * is to be called on the target cpus. + * + * @param idCpu The identifier for the CPU the function is called on. + * @param pvUser1 The 1st user argument. + * @param pvUser2 The 2nd user argument. + */ +typedef DECLCALLBACK(void) FNRTMPWORKER(RTCPUID idCpu, void *pvUser1, void *pvUser2); +/** Pointer to a FNRTMPWORKER. */ +typedef FNRTMPWORKER *PFNRTMPWORKER; + +/** @name RTMPON_F_XXX - RTMpOn flags. + * @{ */ +/** Caller doesn't care if pfnWorker is executed at the same time on the + * specified CPUs or not, as long as it gets executed. */ +#define RTMPON_F_WHATEVER_EXEC 0 +/** The caller insists on pfnWorker being executed more or less concurrently + * on the specified CPUs. */ +#define RTMPON_F_CONCURRENT_EXEC RT_BIT_32(1) +/** Mask of valid bits. */ +#define RTMPON_F_VALID_MASK UINT32_C(0x00000001) +/** @}*/ + +/** + * Checks if the RTMpOnAll() is safe with regards to all threads executing + * concurrently. + * + * If for instance, the RTMpOnAll() is implemented in a way where the threads + * might cause a classic deadlock, it is considered -not- concurrent safe. + * Windows currently is one such platform where it isn't safe. + * + * @returns true if RTMpOnAll() is concurrent safe, false otherwise. + */ +RTDECL(bool) RTMpOnAllIsConcurrentSafe(void); + +/** + * Executes a function on each (online) CPU in the system. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_SUPPORTED if this kind of operation isn't supported by the system. + * + * @param pfnWorker The worker function. + * @param pvUser1 The first user argument for the worker. + * @param pvUser2 The second user argument for the worker. + * + * @remarks The execution isn't in any way guaranteed to be simultaneous, + * it might even be serial (cpu by cpu). + */ +RTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2); + +/** + * Executes a function on a all other (online) CPUs in the system. + * + * The caller must disable preemption prior to calling this API if the outcome + * is to make any sense. But do *not* disable interrupts. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_SUPPORTED if this kind of operation isn't supported by the system. + * + * @param pfnWorker The worker function. + * @param pvUser1 The first user argument for the worker. + * @param pvUser2 The second user argument for the worker. + * + * @remarks The execution isn't in any way guaranteed to be simultaneous, + * it might even be serial (cpu by cpu). + */ +RTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2); + +/** + * Executes a function on a specific CPU in the system. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_SUPPORTED if this kind of operation isn't supported by the system. + * @retval VERR_CPU_OFFLINE if the CPU is offline. + * @retval VERR_CPU_NOT_FOUND if the CPU wasn't found. + * + * @param idCpu The id of the CPU. + * @param pfnWorker The worker function. + * @param pvUser1 The first user argument for the worker. + * @param pvUser2 The second user argument for the worker. + */ +RTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2); + +/** + * Executes a function on two specific CPUs in the system. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_SUPPORTED if this kind of operation isn't supported by the + * system or if the specified modifier flag isn't supported. + * @retval VERR_CPU_OFFLINE if one or more of the CPUs are offline (see + * remarks). + * @retval VERR_CPU_NOT_FOUND if on or both of the CPUs weren't found. + * @retval VERR_NOT_ALL_CPUS_SHOWED if one of the CPUs didn't show. + * + * @param idCpu1 The id of the first CPU. + * @param idCpu2 The id of the second CPU. + * @param fFlags Combination of RTMPON_F_XXX flags. + * @param pfnWorker The worker function. + * @param pvUser1 The first user argument for the worker. + * @param pvUser2 The second user argument for the worker. + * + * @remarks There is a possible race between one (or both) of the CPUs going + * offline while setting up the call. The worker function must take + * this into account. + */ +RTDECL(int) RTMpOnPair(RTCPUID idCpu1, RTCPUID idCpu2, uint32_t fFlags, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2); + +/** + * Indicates whether RTMpOnPair supports running the pfnWorker concurrently on + * both CPUs using RTMPON_F_CONCURRENT_EXEC. + * + * @returns true if supported, false if not. + */ +RTDECL(bool) RTMpOnPairIsConcurrentExecSupported(void); + + +/** + * Pokes the specified CPU. + * + * This should cause the execution on the CPU to be interrupted and forcing it + * to enter kernel context. It is optimized version of a RTMpOnSpecific call + * with a worker which returns immediately. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if this kind of operation isn't supported by the + * system. The caller must not automatically assume that this API works + * when any of the RTMpOn* APIs works. This is because not all systems + * supports unicast MP events and this API will not be implemented as a + * broadcast. + * @retval VERR_CPU_OFFLINE if the CPU is offline. + * @retval VERR_CPU_NOT_FOUND if the CPU wasn't found. + * + * @param idCpu The id of the CPU to poke. + */ +RTDECL(int) RTMpPokeCpu(RTCPUID idCpu); + + +/** + * MP event, see FNRTMPNOTIFICATION. + */ +typedef enum RTMPEVENT +{ + /** The CPU goes online. */ + RTMPEVENT_ONLINE = 1, + /** The CPU goes offline. */ + RTMPEVENT_OFFLINE +} RTMPEVENT; + +/** + * Notification callback. + * + * The context this is called in differs a bit from platform to platform, so be + * careful while in here. + * + * On Windows we're running with IRQL=PASSIVE_LEVEL (reschedulable) according to + * the KeRegisterProcessorChangeCallback documentation - unrestricted API + * access. Probably not being called on the onlined/offlined CPU... + * + * On Solaris we're holding the cpu_lock, IPL/SPL/PIL is not yet known, however + * we will most likely -not- be firing on the CPU going offline/online. + * + * On Linux it looks like we're called with preemption enabled on any CPU and + * not necessarily on the CPU going offline/online. + * + * There is no callbacks for darwin at the moment, due to lack of suitable KPI. + * + * @param idCpu The CPU this applies to. + * @param enmEvent The event. + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(void) FNRTMPNOTIFICATION(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser); +/** Pointer to a FNRTMPNOTIFICATION(). */ +typedef FNRTMPNOTIFICATION *PFNRTMPNOTIFICATION; + +/** + * Registers a notification callback for cpu events. + * + * On platforms which doesn't do cpu offline/online events this API + * will just be a no-op that pretends to work. + * + * @todo We'll be adding a flag to this soon to indicate whether the callback should be called on all + * CPUs that are currently online while it's being registered. This is to help avoid some race + * conditions (we'll hopefully be able to implement this on linux, solaris/win is no issue). + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NO_MEMORY if a registration record cannot be allocated. + * @retval VERR_ALREADY_EXISTS if the pfnCallback and pvUser already exist + * in the callback list. + * + * @param pfnCallback The callback. + * @param pvUser The user argument to the callback function. + */ +RTDECL(int) RTMpNotificationRegister(PFNRTMPNOTIFICATION pfnCallback, void *pvUser); + +/** + * This deregisters a notification callback registered via RTMpNotificationRegister(). + * + * The pfnCallback and pvUser arguments must be identical to the registration call + * of we won't find the right entry. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_FOUND if no matching entry was found. + * + * @param pfnCallback The callback. + * @param pvUser The user argument to the callback function. + */ +RTDECL(int) RTMpNotificationDeregister(PFNRTMPNOTIFICATION pfnCallback, void *pvUser); + +#endif /* IN_RING0 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/net.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/net.h @@ -0,0 +1,1010 @@ +/** @file + * IPRT - Network Protocols. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_net_h +#define ___iprt_net_h + +#include +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_net RTNet - Network Protocols + * @ingroup grp_rt + * @{ + */ + +/** + * Converts an stringified Ethernet MAC address into the RTMAC representation. + * + * @todo This should be move to some generic part of the runtime. + * + * @returns VINF_SUCCESS on success, VERR_GETOPT_INVALID_ARGUMENT_FORMAT on + * failure. + * + * @param pszAddr The address string to convert. + * @param pMacAddr Where to store the result. + */ +RTDECL(int) RTNetStrToMacAddr(const char *pszAddr, PRTMAC pMacAddr); + +/** + * IPv4 address. + */ +typedef RTUINT32U RTNETADDRIPV4; +AssertCompileSize(RTNETADDRIPV4, 4); +/** Pointer to a IPv4 address. */ +typedef RTNETADDRIPV4 *PRTNETADDRIPV4; +/** Pointer to a const IPv4 address. */ +typedef RTNETADDRIPV4 const *PCRTNETADDRIPV4; + +/** + * Tests if the given string is an IPv4 address. + * + * @returns boolean. + * @param pcszAddr String which may be an IPv4 address. + */ +RTDECL(bool) RTNetIsIPv4AddrStr(const char *pcszAddr); + +/** + * Tests if the given string is a wildcard IPv4 address. + * + * @returns boolean. + * @param pcszAddr String which may be an IPv4 address. + */ +RTDECL(bool) RTNetStrIsIPv4AddrAny(const char *pcszAddr); + +/** + * Parses dotted-decimal IPv4 address into RTNETADDRIPV4 representation. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pcszAddr The value to convert. + * @param ppszNext Where to store the pointer to the first char + * following the address. (Optional) + * @param pAddr Where to store the result. + */ +RTDECL(int) RTNetStrToIPv4AddrEx(const char *pcszAddr, PRTNETADDRIPV4 pAddr, char **ppszNext); + +/** + * Parses dotted-decimal IPv4 address into RTNETADDRIPV4 representation. + * Leading and trailing whitespace is ignored. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pcszAddr The value to convert. + * @param pAddr Where to store the result. + */ +RTDECL(int) RTNetStrToIPv4Addr(const char *pcszAddr, PRTNETADDRIPV4 pAddr); + +/** + * Verifies that RTNETADDRIPV4 is a valid contiguous netmask and + * computes its prefix length. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pMask The netmask to verify and convert. + * @param piPrefix Where to store the prefix length. (Optional) + */ +RTDECL(int) RTNetMaskToPrefixIPv4(PCRTNETADDRIPV4 pMask, int *piPrefix); + +/** + * Computes netmask corresponding to the prefix length. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param iPrefix The prefix to convert. + * @param pMask Where to store the netmask. + */ +RTDECL(int) RTNetPrefixToMaskIPv4(int iPrefix, PRTNETADDRIPV4 pMask); + + +/** + * IPv6 address. + */ +typedef RTUINT128U RTNETADDRIPV6; +AssertCompileSize(RTNETADDRIPV6, 16); +/** Pointer to a IPv6 address. */ +typedef RTNETADDRIPV6 *PRTNETADDRIPV6; +/** Pointer to a const IPv6 address. */ +typedef RTNETADDRIPV6 const *PCRTNETADDRIPV6; + +/** + * Tests if the given string is a valid IPv6 address. + * + * @returns @c true if it is, @c false if not. + * @param pszAddress String which may be an IPv6 address. + */ +RTDECL(bool) RTNetIsIPv6AddrStr(const char *pszAddress); + +/** + * Tests if the given string is a wildcard IPv6 address. + * + * @returns @c true if it is, @c false if not. + * @param pszAddress String which may be an IPv6 address. + */ +RTDECL(bool) RTNetStrIsIPv6AddrAny(const char *pszAddress); + +/** + * Parses IPv6 address into RTNETADDRIPV6 representation. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pcszAddr The value to convert. + * @param ppszNext Where to store the pointer to the first char + * following the address. (Optional) + * @param pAddr Where to store the result. + */ +RTDECL(int) RTNetStrToIPv6AddrEx(const char *pcszAddr, PRTNETADDRIPV6 pAddr, char **ppszNext); + +/** + * Parses IPv6 address into RTNETADDRIPV6 representation. + * Leading and trailing whitespace is ignored. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pcszAddr The value to convert. + * @param ppszZone Where to store the pointer to the first char + * of the zone id. NULL is stored if there is + * no zone id. + * @param pAddr Where to store the result. + */ +RTDECL(int) RTNetStrToIPv6Addr(const char *pcszAddr, PRTNETADDRIPV6 pAddr, char **ppszZone); + +/** + * Verifies that RTNETADDRIPV6 is a valid contiguous netmask and + * computes its prefix length. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param pMask The netmask to verify and convert. + * @param piPrefix Where to store the prefix length. (Optional) + */ +RTDECL(int) RTNetMaskToPrefixIPv6(PCRTNETADDRIPV6 pMask, int *piPrefix); + +/** + * Computes netmask corresponding to the prefix length. + * + * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on + * failure. + * + * @param iPrefix The prefix to convert. + * @param pMask Where to store the netmask. + */ +RTDECL(int) RTNetPrefixToMaskIPv6(int iPrefix, PRTNETADDRIPV6 pMask); + + +/** + * IPX address. + */ +#pragma pack(1) +typedef struct RTNETADDRIPX +{ + /** The network ID. */ + uint32_t Network; + /** The node ID. (Defaults to the MAC address apparently.) */ + RTMAC Node; +} RTNETADDRIPX; +#pragma pack() +AssertCompileSize(RTNETADDRIPX, 4+6); +/** Pointer to an IPX address. */ +typedef RTNETADDRIPX *PRTNETADDRIPX; +/** Pointer to a const IPX address. */ +typedef RTNETADDRIPX const *PCRTNETADDRIPX; + +/** + * Network address union. + * + * @remarks The size of this structure may change in the future. + */ +typedef union RTNETADDRU +{ + /** 64-bit view. */ + uint64_t au64[2]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 8-bit view. */ + uint8_t au8[16]; + /** IPv4 view. */ + RTNETADDRIPV4 IPv4; +#ifndef IPv6 /* Work around X11 and RDP defining IPv6 to 1. */ + /** IPv6 view. */ + RTNETADDRIPV6 IPv6; +#endif + /** IPX view. */ + RTNETADDRIPX Ipx; + /** MAC address view. */ + RTMAC Mac; +} RTNETADDRU; +AssertCompileSize(RTNETADDRU, 16); +/** Pointer to an address union. */ +typedef RTNETADDRU *PRTNETADDRU; +/** Pointer to a const address union. */ +typedef RTNETADDRU const *PCRTNETADDRU; + +/** + * Network address type. + * + * @remarks The value assignments may change in the future. + */ +typedef enum RTNETADDRTYPE +{ + /** The invalid 0 entry. */ + RTNETADDRTYPE_INVALID = 0, + /** IP version 4. */ + RTNETADDRTYPE_IPV4, + /** IP version 6. */ + RTNETADDRTYPE_IPV6, + /** IPX. */ + RTNETADDRTYPE_IPX, + /** MAC address. */ + RTNETADDRTYPE_MAC, + /** The end of the valid values. */ + RTNETADDRTYPE_END, + /** The usual 32-bit hack. */ + RTNETADDRTYPE_32_BIT_HACK = 0x7fffffff +} RTNETADDRTYPE; +/** Pointer to a network address type. */ +typedef RTNETADDRTYPE *PRTNETADDRTYPE; +/** Pointer to a const network address type. */ +typedef RTNETADDRTYPE const *PCRTNETADDRTYPE; + +/** + * Network address. + * + * @remarks The size and type values may change. + */ +typedef struct RTNETADDR +{ + /** The address union. */ + RTNETADDRU uAddr; + /** Indicates which view of @a u that is valid. */ + RTNETADDRTYPE enmType; + /** The port number for IPv4 and IPv6 addresses. This is set to + * RTNETADDR_NA_PORT if not applicable. */ + uint32_t uPort; +} RTNETADDR; +/** Pointer to a network address. */ +typedef RTNETADDR *PRTNETADDR; +/** Pointer to a const network address. */ +typedef RTNETADDR const *PCRTNETADDR; + +/** The not applicable value of RTNETADDR::uPort value use to inid. */ +#define RTNETADDR_PORT_NA UINT32_MAX + +/** + * Ethernet header. + */ +#pragma pack(1) +typedef struct RTNETETHERHDR +{ + RTMAC DstMac; + RTMAC SrcMac; + /** Ethernet frame type or frame size, depending on the kind of ethernet. + * This is big endian on the wire. */ + uint16_t EtherType; +} RTNETETHERHDR; +#pragma pack() +AssertCompileSize(RTNETETHERHDR, 14); +/** Pointer to an ethernet header. */ +typedef RTNETETHERHDR *PRTNETETHERHDR; +/** Pointer to a const ethernet header. */ +typedef RTNETETHERHDR const *PCRTNETETHERHDR; + +/** @name EtherType (RTNETETHERHDR::EtherType) + * @{ */ +#define RTNET_ETHERTYPE_IPV4 UINT16_C(0x0800) +#define RTNET_ETHERTYPE_ARP UINT16_C(0x0806) +#define RTNET_ETHERTYPE_IPV6 UINT16_C(0x86dd) +#define RTNET_ETHERTYPE_VLAN UINT16_C(0x8100) +#define RTNET_ETHERTYPE_IPX_1 UINT16_C(0x8037) +#define RTNET_ETHERTYPE_IPX_2 UINT16_C(0x8137) +#define RTNET_ETHERTYPE_IPX_3 UINT16_C(0x8138) +/** @} */ + + +/** + * IPv4 header. + * All is bigendian on the wire. + */ +#pragma pack(1) +typedef struct RTNETIPV4 +{ +#ifdef RT_BIG_ENDIAN + unsigned int ip_v : 4; + unsigned int ip_hl : 4; + unsigned int ip_tos : 8; + unsigned int ip_len : 16; +#else + /** 00:0 - Header length given as a 32-bit word count. */ + unsigned int ip_hl : 4; + /** 00:4 - Header version. */ + unsigned int ip_v : 4; + /** 01 - Type of service. */ + unsigned int ip_tos : 8; + /** 02 - Total length (header + data). */ + unsigned int ip_len : 16; +#endif + /** 04 - Packet idenficiation. */ + uint16_t ip_id; + /** 06 - Offset if fragmented. */ + uint16_t ip_off; + /** 08 - Time to live. */ + uint8_t ip_ttl; + /** 09 - Protocol. */ + uint8_t ip_p; + /** 0a - Header check sum. */ + uint16_t ip_sum; + /** 0c - Source address. */ + RTNETADDRIPV4 ip_src; + /** 10 - Destination address. */ + RTNETADDRIPV4 ip_dst; + /** 14 - Options (optional). */ + uint32_t ip_options[1]; +} RTNETIPV4; +#pragma pack() +AssertCompileSize(RTNETIPV4, 6 * 4); +/** Pointer to a IPv4 header. */ +typedef RTNETIPV4 *PRTNETIPV4; +/** Pointer to a const IPv4 header. */ +typedef RTNETIPV4 const *PCRTNETIPV4; + +/** The minimum IPv4 header length (in bytes). + * Up to and including RTNETIPV4::ip_dst. */ +#define RTNETIPV4_MIN_LEN (20) + + +/** @name IPv4 Protocol Numbers + * @{ */ +/** IPv4: ICMP */ +#define RTNETIPV4_PROT_ICMP (1) +/** IPv4: TCP */ +#define RTNETIPV4_PROT_TCP (6) +/** IPv4: UDP */ +#define RTNETIPV4_PROT_UDP (17) +/** @} */ + +/** @name Common IPv4 Port Assignments + * @{ + */ +/** Boostrap Protocol / DHCP) Server. */ +#define RTNETIPV4_PORT_BOOTPS (67) +/** Boostrap Protocol / DHCP) Client. */ +#define RTNETIPV4_PORT_BOOTPC (68) +/** @} */ + +/** @name IPv4 Flags + * @{ */ +/** IPv4: Don't fragment */ +#define RTNETIPV4_FLAGS_DF (0x4000) +/** IPv4: More fragments */ +#define RTNETIPV4_FLAGS_MF (0x2000) +/** @} */ + +RTDECL(uint16_t) RTNetIPv4HdrChecksum(PCRTNETIPV4 pIpHdr); +RTDECL(bool) RTNetIPv4IsHdrValid(PCRTNETIPV4 pIpHdr, size_t cbHdrMax, size_t cbPktMax, bool fChecksum); +RTDECL(uint32_t) RTNetIPv4PseudoChecksum(PCRTNETIPV4 pIpHdr); +RTDECL(uint32_t) RTNetIPv4PseudoChecksumBits(RTNETADDRIPV4 SrcAddr, RTNETADDRIPV4 DstAddr, uint8_t bProtocol, uint16_t cbPkt); +RTDECL(uint32_t) RTNetIPv4AddDataChecksum(void const *pvData, size_t cbData, uint32_t u32Sum, bool *pfOdd); +RTDECL(uint16_t) RTNetIPv4FinalizeChecksum(uint32_t u32Sum); + + +/** + * IPv6 header. + * All is bigendian on the wire. + */ +#pragma pack(1) +typedef struct RTNETIPV6 +{ + /** Version (4 bits), Traffic Class (8 bits) and Flow Lable (20 bits). + * @todo this is probably mislabeled - ip6_flow vs. ip6_vfc, fix later. */ + uint32_t ip6_vfc; + /** 04 - Payload length, including extension headers. */ + uint16_t ip6_plen; + /** 06 - Next header type (RTNETIPV4_PROT_XXX). */ + uint8_t ip6_nxt; + /** 07 - Hop limit. */ + uint8_t ip6_hlim; + /** xx - Source address. */ + RTNETADDRIPV6 ip6_src; + /** xx - Destination address. */ + RTNETADDRIPV6 ip6_dst; +} RTNETIPV6; +#pragma pack() +AssertCompileSize(RTNETIPV6, 8 + 16 + 16); +/** Pointer to a IPv6 header. */ +typedef RTNETIPV6 *PRTNETIPV6; +/** Pointer to a const IPv6 header. */ +typedef RTNETIPV6 const *PCRTNETIPV6; + +/** The minimum IPv6 header length (in bytes). + * Up to and including RTNETIPV6::ip6_dst. */ +#define RTNETIPV6_MIN_LEN (40) +#define RTNETIPV6_ICMPV6_ND_WITH_LLA_OPT_MIN_LEN (32) + +RTDECL(uint32_t) RTNetIPv6PseudoChecksum(PCRTNETIPV6 pIpHdr); +RTDECL(uint32_t) RTNetIPv6PseudoChecksumEx(PCRTNETIPV6 pIpHdr, uint8_t bProtocol, uint16_t cbPkt); +RTDECL(uint32_t) RTNetIPv6PseudoChecksumBits(PCRTNETADDRIPV6 pSrcAddr, PCRTNETADDRIPV6 pDstAddr, + uint8_t bProtocol, uint16_t cbPkt); + + +/** + * UDP header. + */ +#pragma pack(1) +typedef struct RTNETUDP +{ + /** The source port. */ + uint16_t uh_sport; + /** The destination port. */ + uint16_t uh_dport; + /** The length of the UDP header and associated data. */ + uint16_t uh_ulen; + /** The checksum of the pseudo header, the UDP header and the data. */ + uint16_t uh_sum; +} RTNETUDP; +#pragma pack() +AssertCompileSize(RTNETUDP, 8); +/** Pointer to an UDP header. */ +typedef RTNETUDP *PRTNETUDP; +/** Pointer to a const UDP header. */ +typedef RTNETUDP const *PCRTNETUDP; + +/** The minimum UDP packet length (in bytes). (RTNETUDP::uh_ulen) */ +#define RTNETUDP_MIN_LEN (8) + +RTDECL(uint16_t) RTNetUDPChecksum(uint32_t u32Sum, PCRTNETUDP pUdpHdr); +RTDECL(uint32_t) RTNetIPv4AddUDPChecksum(PCRTNETUDP pUdpHdr, uint32_t u32Sum); +RTDECL(uint16_t) RTNetIPv4UDPChecksum(PCRTNETIPV4 pIpHdr, PCRTNETUDP pUdpHdr, void const *pvData); +RTDECL(bool) RTNetIPv4IsUDPSizeValid(PCRTNETIPV4 pIpHdr, PCRTNETUDP pUdpHdr, size_t cbPktMax); +RTDECL(bool) RTNetIPv4IsUDPValid(PCRTNETIPV4 pIpHdr, PCRTNETUDP pUdpHdr, void const *pvData, size_t cbPktMax, bool fChecksum); + + +/** + * IPv4 BOOTP / DHCP packet. + */ +#pragma pack(1) +typedef struct RTNETBOOTP +{ + /** 00 - The packet opcode (RTNETBOOTP_OP_*). */ + uint8_t bp_op; + /** 01 - Hardware address type. Same as RTNETARPHDR::ar_htype. */ + uint8_t bp_htype; + /** 02 - Hardware address length. */ + uint8_t bp_hlen; + /** 03 - Gateway hops. */ + uint8_t bp_hops; + /** 04 - Transaction ID. */ + uint32_t bp_xid; + /** 08 - Seconds since boot started. */ + uint16_t bp_secs; + /** 0a - Unused (BOOTP) / Flags (DHCP) (RTNET_DHCP_FLAGS_*). */ + uint16_t bp_flags; + /** 0c - Client IPv4 address. */ + RTNETADDRIPV4 bp_ciaddr; + /** 10 - Your IPv4 address. */ + RTNETADDRIPV4 bp_yiaddr; + /** 14 - Server IPv4 address. */ + RTNETADDRIPV4 bp_siaddr; + /** 18 - Gateway IPv4 address. */ + RTNETADDRIPV4 bp_giaddr; + /** 1c - Client hardware address. */ + union + { + uint8_t au8[16]; + RTMAC Mac; + } bp_chaddr; + /** 2c - Server name. */ + uint8_t bp_sname[64]; + /** 6c - File name / more DHCP options. */ + uint8_t bp_file[128]; + /** ec - Vendor specific area (BOOTP) / Options (DHCP). + * @remark This is really 312 bytes in the DHCP version. */ + union + { + uint8_t au8[128]; + struct DHCP + { + /** ec - The DHCP cookie (RTNET_DHCP_COOKIE). */ + uint32_t dhcp_cookie; + /** f0 - The DHCP options. */ + uint8_t dhcp_opts[124]; + } Dhcp; + } bp_vend; + +} RTNETBOOTP; +#pragma pack() +AssertCompileSize(RTNETBOOTP, 0xec + 128); +/** Pointer to a BOOTP / DHCP packet. */ +typedef RTNETBOOTP *PRTNETBOOTP; +/** Pointer to a const BOOTP / DHCP packet. */ +typedef RTNETBOOTP const *PCRTNETBOOTP; + +/** Minimum BOOTP packet length. For quick validation, no standard thing really. */ +#define RTNETBOOTP_MIN_LEN 0xec +/** Minimum DHCP packet length. For quick validation, no standard thing really. */ +#define RTNETBOOTP_DHCP_MIN_LEN 0xf1 + +/** The normal size of the a DHCP packet (i.e. a RTNETBOOTP). + * Same as RTNET_DHCP_OPT_SIZE, just expressed differently. */ +#define RTNET_DHCP_NORMAL_SIZE (0xec + 4 + RTNET_DHCP_OPT_SIZE) +/** The normal size of RTNETBOOTP::bp_vend::Dhcp::dhcp_opts. */ +#define RTNET_DHCP_OPT_SIZE (312 - 4) + +/** @name BOOTP packet opcode values + * @{ */ +#define RTNETBOOTP_OP_REQUEST 1 +#define RTNETBOOTP_OP_REPLY 2 +/** @} */ + +/** @name DHCP flags (RTNETBOOTP::bp_flags) + * @{ */ +#define RTNET_DHCP_FLAGS_NO_BROADCAST UINT16_C(0x8000) /** @todo check test!!! */ +/** @} */ + +/** The DHCP cookie (network endian). */ +#define RTNET_DHCP_COOKIE UINT32_C(0x63825363) + +/** + * An IPv4 DHCP option header. + */ +typedef struct RTNETDHCPOPT +{ + /** 00 - The DHCP option. */ + uint8_t dhcp_opt; + /** 01 - The data length (excluding this header). */ + uint8_t dhcp_len; + /* 02 - The option data follows here, optional and of variable length. */ +} RTNETDHCPOPT; +AssertCompileSize(RTNETDHCPOPT, 2); +/** Pointer to a DHCP option header. */ +typedef RTNETDHCPOPT *PRTNETDHCPOPT; +/** Pointer to a const DHCP option header. */ +typedef RTNETDHCPOPT const *PCRTNETDHCPOPT; + +/** @name DHCP options + * @{ */ +/** 1 byte padding, this has no dhcp_len field. */ +#define RTNET_DHCP_OPT_PAD 0 + +/** The subnet mask. */ +#define RTNET_DHCP_OPT_SUBNET_MASK 1 +/** The time offset. */ +#define RTNET_DHCP_OPT_TIME_OFFSET 2 +/** The routers for the subnet. */ +#define RTNET_DHCP_OPT_ROUTERS 3 +/** Domain Name Server. */ +#define RTNET_DHCP_OPT_DNS 6 +/** Host name. */ +#define RTNET_DHCP_OPT_HOST_NAME 12 +/** Domain name. */ +#define RTNET_DHCP_OPT_DOMAIN_NAME 15 + +/** The requested address. */ +#define RTNET_DHCP_OPT_REQ_ADDR 50 +/** The lease time in seconds. */ +#define RTNET_DHCP_OPT_LEASE_TIME 51 +/** Option overload. + * Indicates that the bp_file and/or bp_sname holds contains DHCP options. */ +#define RTNET_DHCP_OPT_OPTION_OVERLOAD 52 +/** Have a 8-bit message type value as data, see RTNET_DHCP_MT_*. */ +#define RTNET_DHCP_OPT_MSG_TYPE 53 +/** Server ID. */ +#define RTNET_DHCP_OPT_SERVER_ID 54 +/** Parameter request list. */ +#define RTNET_DHCP_OPT_PARAM_REQ_LIST 55 +/** The maximum DHCP message size a client is willing to accept. */ +#define RTNET_DHCP_OPT_MAX_DHCP_MSG_SIZE 57 +/** Client ID. */ +#define RTNET_DHCP_OPT_CLIENT_ID 61 +/** TFTP server name. */ +#define RTNET_DHCP_OPT_TFTP_SERVER_NAME 66 +/** Bootfile name. */ +#define RTNET_DHCP_OPT_BOOTFILE_NAME 67 + +/** Marks the end of the DHCP options, this has no dhcp_len field. */ +#define RTNET_DHCP_OPT_END 255 +/** @} */ + +/** @name DHCP Message Types (option 53) + * @{ */ +#define RTNET_DHCP_MT_DISCOVER 1 +#define RTNET_DHCP_MT_OFFER 2 +#define RTNET_DHCP_MT_REQUEST 3 +#define RTNET_DHCP_MT_DECLINE 4 +#define RTNET_DHCP_MT_ACK 5 +#define RTNET_DHCP_MT_NAC 6 +#define RTNET_DHCP_MT_RELEASE 7 +#define RTNET_DHCP_MT_INFORM 8 +/** @} */ + +/** @name DHCP Flags + * @{ */ +#define RTNET_DHCP_FLAG_BROADCAST 0x8000 +/** @} */ + +RTDECL(bool) RTNetIPv4IsDHCPValid(PCRTNETUDP pUdpHdr, PCRTNETBOOTP pDhcp, size_t cbDhcp, uint8_t *pMsgType); + + +/** + * IPv4 DHCP packet. + * @deprecated Use RTNETBOOTP. + */ +#pragma pack(1) +typedef struct RTNETDHCP +{ + /** 00 - The packet opcode. */ + uint8_t Op; + /** Hardware address type. */ + uint8_t HType; + /** Hardware address length. */ + uint8_t HLen; + uint8_t Hops; + uint32_t XID; + uint16_t Secs; + uint16_t Flags; + /** Client IPv4 address. */ + RTNETADDRIPV4 CIAddr; + /** Your IPv4 address. */ + RTNETADDRIPV4 YIAddr; + /** Server IPv4 address. */ + RTNETADDRIPV4 SIAddr; + /** Gateway IPv4 address. */ + RTNETADDRIPV4 GIAddr; + /** Client hardware address. */ + uint8_t CHAddr[16]; + /** Server name. */ + uint8_t SName[64]; + uint8_t File[128]; + uint8_t abMagic[4]; + uint8_t DhcpOpt; + uint8_t DhcpLen; /* 1 */ + uint8_t DhcpReq; + uint8_t abOptions[57]; +} RTNETDHCP; +#pragma pack() +/** @todo AssertCompileSize(RTNETDHCP, ); */ +/** Pointer to a DHCP packet. */ +typedef RTNETDHCP *PRTNETDHCP; +/** Pointer to a const DHCP packet. */ +typedef RTNETDHCP const *PCRTNETDHCP; + + +/** + * TCP packet. + */ +#pragma pack(1) +typedef struct RTNETTCP +{ + /** 00 - The source port. */ + uint16_t th_sport; + /** 02 - The destination port. */ + uint16_t th_dport; + /** 04 - The sequence number. */ + uint32_t th_seq; + /** 08 - The acknowledgement number. */ + uint32_t th_ack; +#ifdef RT_BIG_ENDIAN + unsigned int th_win : 16; + unsigned int th_flags : 8; + unsigned int th_off : 4; + unsigned int th_x2 : 4; +#else + /** 0c:0 - Reserved. */ + unsigned int th_x2 : 4; + /** 0c:4 - The data offset given as a dword count from the start of this header. */ + unsigned int th_off : 4; + /** 0d - flags. */ + unsigned int th_flags : 8; + /** 0e - The window. */ + unsigned int th_win : 16; +#endif + /** 10 - The checksum of the pseudo header, the TCP header and the data. */ + uint16_t th_sum; + /** 12 - The urgent pointer. */ + uint16_t th_urp; + /* (options follows here and then the data (aka text).) */ +} RTNETTCP; +#pragma pack() +AssertCompileSize(RTNETTCP, 20); +/** Pointer to a TCP packet. */ +typedef RTNETTCP *PRTNETTCP; +/** Pointer to a const TCP packet. */ +typedef RTNETTCP const *PCRTNETTCP; + +/** The minimum TCP header length (in bytes). (RTNETTCP::th_off * 4) */ +#define RTNETTCP_MIN_LEN (20) + +/** @name TCP flags (RTNETTCP::th_flags) + * @{ */ +#define RTNETTCP_F_FIN 0x01 +#define RTNETTCP_F_SYN 0x02 +#define RTNETTCP_F_RST 0x04 +#define RTNETTCP_F_PSH 0x08 +#define RTNETTCP_F_ACK 0x10 +#define RTNETTCP_F_URG 0x20 +#define RTNETTCP_F_ECE 0x40 +#define RTNETTCP_F_CWR 0x80 +/** @} */ + +RTDECL(uint16_t) RTNetTCPChecksum(uint32_t u32Sum, PCRTNETTCP pTcpHdr, void const *pvData, size_t cbData); +RTDECL(uint32_t) RTNetIPv4AddTCPChecksum(PCRTNETTCP pTcpHdr, uint32_t u32Sum); +RTDECL(uint16_t) RTNetIPv4TCPChecksum(PCRTNETIPV4 pIpHdr, PCRTNETTCP pTcpHdr, void const *pvData); +RTDECL(bool) RTNetIPv4IsTCPSizeValid(PCRTNETIPV4 pIpHdr, PCRTNETTCP pTcpHdr, size_t cbHdrMax, size_t cbPktMax); +RTDECL(bool) RTNetIPv4IsTCPValid(PCRTNETIPV4 pIpHdr, PCRTNETTCP pTcpHdr, size_t cbHdrMax, void const *pvData, + size_t cbPktMax, bool fChecksum); + + +/** + * IPv4 ICMP packet header. + */ +#pragma pack(1) +typedef struct RTNETICMPV4HDR +{ + /** 00 - The ICMP message type. */ + uint8_t icmp_type; + /** 01 - Type specific code that further qualifies the message. */ + uint8_t icmp_code; + /** 02 - Checksum of the ICMP message. */ + uint16_t icmp_cksum; +} RTNETICMPV4HDR; +#pragma pack() +AssertCompileSize(RTNETICMPV4HDR, 4); +/** Pointer to an ICMP packet header. */ +typedef RTNETICMPV4HDR *PRTNETICMPV4HDR; +/** Pointer to a const ICMP packet header. */ +typedef RTNETICMPV4HDR const *PCRTNETICMPV4HDR; + +/** @name ICMP (v4) message types. + * @{ */ +#define RTNETICMPV4_TYPE_ECHO_REPLY 0 +#define RTNETICMPV4_TYPE_ECHO_REQUEST 8 +#define RTNETICMPV4_TYPE_TRACEROUTE 30 +/** @} */ + +/** + * IPv4 ICMP ECHO Reply & Request packet. + */ +#pragma pack(1) +typedef struct RTNETICMPV4ECHO +{ + /** 00 - The ICMP header. */ + RTNETICMPV4HDR Hdr; + /** 04 - The identifier to help the requestor match up the reply. + * Can be 0. Typically fixed value. */ + uint16_t icmp_id; + /** 06 - The sequence number to help the requestor match up the reply. + * Can be 0. Typically incrementing between requests. */ + uint16_t icmp_seq; + /** 08 - Variable length data that is to be returned unmodified in the reply. */ + uint8_t icmp_data[1]; +} RTNETICMPV4ECHO; +#pragma pack() +AssertCompileSize(RTNETICMPV4ECHO, 9); +/** Pointer to an ICMP ECHO packet. */ +typedef RTNETICMPV4ECHO *PRTNETICMPV4ECHO; +/** Pointer to a const ICMP ECHO packet. */ +typedef RTNETICMPV4ECHO const *PCRTNETICMPV4ECHO; + +/** + * IPv4 ICMP TRACEROUTE packet. + * This is an reply to an IP packet with the traceroute option set. + */ +#pragma pack(1) +typedef struct RTNETICMPV4TRACEROUTE +{ + /** 00 - The ICMP header. */ + RTNETICMPV4HDR Hdr; + /** 04 - Identifier copied from the traceroute option's ID number. */ + uint16_t icmp_id; + /** 06 - Unused. (Possibly an icmp_seq?) */ + uint16_t icmp_void; + /** 08 - Outbound hop count. From the IP packet causing this message. */ + uint16_t icmp_ohc; + /** 0a - Return hop count. From the IP packet causing this message. */ + uint16_t icmp_rhc; + /** 0c - Output link speed, 0 if not known. */ + uint32_t icmp_speed; + /** 10 - Output link MTU, 0 if not known. */ + uint32_t icmp_mtu; +} RTNETICMPV4TRACEROUTE; +#pragma pack() +AssertCompileSize(RTNETICMPV4TRACEROUTE, 20); +/** Pointer to an ICMP TRACEROUTE packet. */ +typedef RTNETICMPV4TRACEROUTE *PRTNETICMPV4TRACEROUTE; +/** Pointer to a const ICMP TRACEROUTE packet. */ +typedef RTNETICMPV4TRACEROUTE const *PCRTNETICMPV4TRACEROUTE; + +/** @todo add more ICMPv4 as needed. */ + +/** + * IPv4 ICMP union packet. + */ +typedef union RTNETICMPV4 +{ + RTNETICMPV4HDR Hdr; + RTNETICMPV4ECHO Echo; + RTNETICMPV4TRACEROUTE Traceroute; +} RTNETICMPV4; +/** Pointer to an ICMP union packet. */ +typedef RTNETICMPV4 *PRTNETICMPV4; +/** Pointer to a const ICMP union packet. */ +typedef RTNETICMPV4 const *PCRTNETICMPV4; + + +/** + * IPv6 ICMP packet header. + */ +#pragma pack(1) +typedef struct RTNETICMPV6HDR +{ + /** 00 - The ICMPv6 message type. */ + uint8_t icmp6_type; + /** 01 - Type specific code that further qualifies the message. */ + uint8_t icmp6_code; + /** 02 - Checksum of the ICMPv6 message. */ + uint16_t icmp6_cksum; +} RTNETICMPV6HDR; +#pragma pack() +AssertCompileSize(RTNETICMPV6HDR, 4); +/** Pointer to an ICMPv6 packet header. */ +typedef RTNETICMPV6HDR *PRTNETICMPV6HDR; +/** Pointer to a const ICMP packet header. */ +typedef RTNETICMPV6HDR const *PCRTNETICMPV6HDR; + +#define RTNETIPV6_PROT_ICMPV6 (58) + +/** @name Internet Control Message Protocol version 6 (ICMPv6) message types. + * @{ */ +#define RTNETIPV6_ICMP_TYPE_RS 133 +#define RTNETIPV6_ICMP_TYPE_RA 134 +#define RTNETIPV6_ICMP_TYPE_NS 135 +#define RTNETIPV6_ICMP_TYPE_NA 136 +#define RTNETIPV6_ICMP_TYPE_RDR 137 +/** @} */ + +/** @name Neighbor Discovery option types + * @{ */ +#define RTNETIPV6_ICMP_ND_SLLA_OPT (1) +#define RTNETIPV6_ICMP_ND_TLLA_OPT (2) +/** @} */ + +/** ICMPv6 ND Source/Target Link Layer Address option */ +#pragma pack(1) +typedef struct RTNETNDP_LLA_OPT +{ + uint8_t type; + uint8_t len; + RTMAC lla; +} RTNETNDP_LLA_OPT; +#pragma pack() + +AssertCompileSize(RTNETNDP_LLA_OPT, 1+1+6); + +typedef RTNETNDP_LLA_OPT *PRTNETNDP_LLA_OPT; +typedef RTNETNDP_LLA_OPT const *PCRTNETNDP_LLA_OPT; + +/** ICMPv6 ND Neighbor Sollicitation */ +#pragma pack(1) +typedef struct RTNETNDP +{ + /** 00 - The ICMPv6 header. */ + RTNETICMPV6HDR Hdr; + /** 04 - reserved */ + uint32_t reserved; + /** 08 - target address */ + RTNETADDRIPV6 target_address; +} RTNETNDP; +#pragma pack() +AssertCompileSize(RTNETNDP, 4+4+16); +/** Pointer to a NDP ND packet. */ +typedef RTNETNDP *PRTNETNDP; +/** Pointer to a const NDP NS packet. */ +typedef RTNETNDP const *PCRTNETNDP; + + +/** + * Ethernet ARP header. + */ +#pragma pack(1) +typedef struct RTNETARPHDR +{ + /** The hardware type. */ + uint16_t ar_htype; + /** The protocol type (ethertype). */ + uint16_t ar_ptype; + /** The hardware address length. */ + uint8_t ar_hlen; + /** The protocol address length. */ + uint8_t ar_plen; + /** The operation. */ + uint16_t ar_oper; +} RTNETARPHDR; +#pragma pack() +AssertCompileSize(RTNETARPHDR, 8); +/** Pointer to an ethernet ARP header. */ +typedef RTNETARPHDR *PRTNETARPHDR; +/** Pointer to a const ethernet ARP header. */ +typedef RTNETARPHDR const *PCRTNETARPHDR; + +/** ARP hardware type - ethernet. */ +#define RTNET_ARP_ETHER UINT16_C(1) + +/** @name ARP operations + * @{ */ +#define RTNET_ARPOP_REQUEST UINT16_C(1) /**< Request hardware address given a protocol address (ARP). */ +#define RTNET_ARPOP_REPLY UINT16_C(2) +#define RTNET_ARPOP_REVREQUEST UINT16_C(3) /**< Request protocol address given a hardware address (RARP). */ +#define RTNET_ARPOP_REVREPLY UINT16_C(4) +#define RTNET_ARPOP_INVREQUEST UINT16_C(8) /**< Inverse ARP. */ +#define RTNET_ARPOP_INVREPLY UINT16_C(9) +/** Check if an ARP operation is a request or not. */ +#define RTNET_ARPOP_IS_REQUEST(Op) ((Op) & 1) +/** Check if an ARP operation is a reply or not. */ +#define RTNET_ARPOP_IS_REPLY(Op) (!RTNET_ARPOP_IS_REQUEST(Op)) +/** @} */ + + +/** + * Ethernet IPv4 + 6-byte MAC ARP request packet. + */ +#pragma pack(1) +typedef struct RTNETARPIPV4 +{ + /** ARP header. */ + RTNETARPHDR Hdr; + /** The sender hardware address. */ + RTMAC ar_sha; + /** The sender protocol address. */ + RTNETADDRIPV4 ar_spa; + /** The target hardware address. */ + RTMAC ar_tha; + /** The target protocol address. */ + RTNETADDRIPV4 ar_tpa; +} RTNETARPIPV4; +#pragma pack() +AssertCompileSize(RTNETARPIPV4, 8+6+4+6+4); +/** Pointer to an ethernet IPv4+MAC ARP request packet. */ +typedef RTNETARPIPV4 *PRTNETARPIPV4; +/** Pointer to a const ethernet IPv4+MAC ARP request packet. */ +typedef RTNETARPIPV4 const *PCRTNETARPIPV4; + + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/nocrt/limits.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/nocrt/limits.h @@ -0,0 +1,86 @@ +/** @file + * IPRT / No-CRT - Our own limits header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_nocrt_limits_h +#define ___iprt_nocrt_limits_h + +#include + +#define CHAR_BIT 8 +#define SCHAR_MAX 0x7f +#define SCHAR_MIN (-0x7f - 1) +#define UCHAR_MAX 0xff +#if 1 /* ASSUMES: signed char */ +# define CHAR_MAX SCHAR_MAX +# define CHAR_MIN SCHAR_MIN +#else +# define CHAR_MAX UCHAR_MAX +# define CHAR_MIN 0 +#endif + +#define WORD_BIT 16 +#define USHRT_MAX 0xffff +#define SHRT_MAX 0x7fff +#define SHRT_MIN (-0x7fff - 1) + +/* ASSUMES 32-bit int */ +#define UINT_MAX 0xffffffffU +#define INT_MAX 0x7fffffff +#define INT_MIN (-0x7fffffff - 1) + +#if defined(RT_ARCH_X86) || defined(RT_OS_WINDOWS) || defined(RT_ARCH_SPARC) +# define LONG_BIT 32 +# define ULONG_MAX 0xffffffffU +# define LONG_MAX 0x7fffffff +# define LONG_MIN (-0x7fffffff - 1) +#elif defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) +# define LONG_BIT 64 +# define ULONG_MAX UINT64_C(0xffffffffffffffff) +# define LONG_MAX INT64_C(0x7fffffffffffffff) +# define LONG_MIN (INT64_C(-0x7fffffffffffffff) - 1) +#else +# error "PORTME" +#endif + +#define LLONG_BIT 64 +#define ULLONG_MAX UINT64_C(0xffffffffffffffff) +#define LLONG_MAX INT64_C(0x7fffffffffffffff) +#define LLONG_MIN (INT64_C(-0x7fffffffffffffff) - 1) + +#if ARCH_BITS == 32 +# define SIZE_T_MAX 0xffffffffU +# define SSIZE_MAX 0x7fffffff +#elif ARCH_BITS == 64 +# define SIZE_T_MAX UINT64_C(0xffffffffffffffff) +# define SSIZE_MAX INT64_C(0x7fffffffffffffff) +#else +# error "huh?" +#endif + +/*#define OFF_MAX __OFF_MAX +#define OFF_MIN __OFF_MIN*/ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/param.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/param.h @@ -0,0 +1,131 @@ +/** @file + * IPRT - Parameter Definitions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_param_h +#define ___iprt_param_h + +/** @todo Much of the PAGE_* stuff here is obsolete and highly risky to have around. + * As for component configs (MM_*), either we gather all in here or we move those bits away! */ + +/** @defgroup grp_rt_param System Parameter Definitions + * @ingroup grp_rt_cdefs + * @{ + */ + +/* Undefine PAGE_SIZE and PAGE_SHIFT to avoid unnecessary noice when clashing + * with system headers. Include system headers before / after iprt depending + * on which you wish to take precedence. */ +#undef PAGE_SIZE +#undef PAGE_SHIFT + +/* Undefine PAGE_OFFSET_MASK to avoid the conflict with the-linux-kernel.h */ +#undef PAGE_OFFSET_MASK + +/** + * i386 Page size. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_SIZE 8192 +#else +# define PAGE_SIZE 4096 +#endif + +/** + * i386 Page shift. + * This is used to convert between size (in bytes) and page count. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_SHIFT 13 +#else +# define PAGE_SHIFT 12 +#endif + +/** + * i386 Page offset mask. + * + * Do NOT one-complement this for whatever purpose. You may get a 32-bit const when you want a 64-bit one. + * Use PAGE_BASE_MASK, PAGE_BASE_GC_MASK, PAGE_BASE_HC_MASK, PAGE_ADDRESS() or X86_PTE_PAE_PG_MASK. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_OFFSET_MASK 0x1fff +#else +# define PAGE_OFFSET_MASK 0xfff +#endif + +/** + * Page address mask for the guest context POINTERS. + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_GC_MASK (~(RTGCUINTPTR)PAGE_OFFSET_MASK) + +/** + * Page address mask for the host context POINTERS. + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_HC_MASK (~(RTHCUINTPTR)PAGE_OFFSET_MASK) + +/** + * Page address mask for the both context POINTERS. + * + * Be careful when using this since it may be a size too big! + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_MASK (~(RTUINTPTR)PAGE_OFFSET_MASK) + +/** + * Get the page aligned address of a POINTER in the CURRENT context. + * + * @returns Page aligned address (it's an uintptr_t). + * @param pv The virtual address to align. + * + * @remarks Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + * @remarks This only works with POINTERS in the current context. + * Do NOT use on guest address or physical address! + */ +#define PAGE_ADDRESS(pv) ((uintptr_t)(pv) & ~(uintptr_t)PAGE_OFFSET_MASK) + +/** + * Get the page aligned address of a physical address + * + * @returns Page aligned address (it's an RTHCPHYS or RTGCPHYS). + * @param Phys The physical address to align. + */ +#define PHYS_PAGE_ADDRESS(Phys) ((Phys) & X86_PTE_PAE_PG_MASK) + +/** + * Host max path (the reasonable value). + * @remarks defined both by iprt/param.h and iprt/path.h. + */ +#if !defined(___iprt_path_h) || defined(DOXYGEN_RUNNING) +# define RTPATH_MAX (4096 + 4) /* (PATH_MAX + 1) on linux w/ some alignment */ +#endif + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/path.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/path.h @@ -0,0 +1,1490 @@ +/** @file + * IPRT - Path Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_path_h +#define ___iprt_path_h + +#include +#include +#ifdef IN_RING3 +# include +#endif + + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_path RTPath - Path Manipulation + * @ingroup grp_rt + * @{ + */ + +/** + * Host max path (the reasonable value). + * @remarks defined both by iprt/param.h and iprt/path.h. + */ +#if !defined(___iprt_param_h) || defined(DOXYGEN_RUNNING) +# define RTPATH_MAX (4096 + 4) /* (PATH_MAX + 1) on linux w/ some alignment */ +#endif + +/** @def RTPATH_TAG + * The default allocation tag used by the RTPath allocation APIs. + * + * When not defined before the inclusion of iprt/string.h, this will default to + * the pointer to the current file name. The string API will make of use of + * this as pointer to a volatile but read-only string. + */ +#ifndef RTPATH_TAG +# define RTPATH_TAG (__FILE__) +#endif + + +/** @name RTPATH_F_XXX - Generic flags for APIs working on the file system. + * @{ */ +/** Last component: Work on the link. */ +#define RTPATH_F_ON_LINK RT_BIT_32(0) +/** Last component: Follow if link. */ +#define RTPATH_F_FOLLOW_LINK RT_BIT_32(1) +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATH_F_NO_SYMLINKS RT_BIT_32(2) +/** @} */ + +/** Validates a flags parameter containing RTPATH_F_*. + * @remarks The parameters will be referenced multiple times. */ +#define RTPATH_F_IS_VALID(a_fFlags, a_fIgnore) \ + ( ((a_fFlags) & ~(uint32_t)((a_fIgnore) | RTPATH_F_NO_SYMLINKS)) == RTPATH_F_ON_LINK \ + || ((a_fFlags) & ~(uint32_t)((a_fIgnore) | RTPATH_F_NO_SYMLINKS)) == RTPATH_F_FOLLOW_LINK ) + + +/** @name RTPATH_STR_F_XXX - Generic flags for APIs working with path strings. + * @{ + */ +/** Host OS path style (default 0 value). */ +#define RTPATH_STR_F_STYLE_HOST UINT32_C(0x00000000) +/** DOS, OS/2 and Windows path style. */ +#define RTPATH_STR_F_STYLE_DOS UINT32_C(0x00000001) +/** Unix path style. */ +#define RTPATH_STR_F_STYLE_UNIX UINT32_C(0x00000002) +/** Reserved path style. */ +#define RTPATH_STR_F_STYLE_RESERVED UINT32_C(0x00000003) +/** The path style mask. */ +#define RTPATH_STR_F_STYLE_MASK UINT32_C(0x00000003) +/** Partial path - no start. + * This causes the API to skip the root specification parsing. */ +#define RTPATH_STR_F_NO_START UINT32_C(0x00000010) +/** Partial path - no end. + * This causes the API to skip the filename and dir-slash parsing. */ +#define RTPATH_STR_F_NO_END UINT32_C(0x00000020) +/** Partial path - no start and no end. */ +#define RTPATH_STR_F_MIDDLE (RTPATH_STR_F_NO_START | RTPATH_STR_F_NO_END) + +/** Reserved for future use. */ +#define RTPATH_STR_F_RESERVED_MASK UINT32_C(0x0000ffcc) +/** @} */ + +/** Validates a flags parameter containing RTPATH_FSTR_. + * @remarks The parameters will be references multiple times. */ +#define RTPATH_STR_F_IS_VALID(a_fFlags, a_fIgnore) \ + ( ((a_fFlags) & ~((uint32_t)(a_fIgnore) | RTPATH_STR_F_STYLE_MASK | RTPATH_STR_F_MIDDLE)) == 0 \ + && ((a_fFlags) & RTPATH_STR_F_STYLE_MASK) != RTPATH_STR_F_STYLE_RESERVED \ + && ((a_fFlags) & RTPATH_STR_F_RESERVED_MASK) == 0 ) + + +/** @def RTPATH_STYLE + * The host path style. This is set to RTPATH_STR_F_STYLE_DOS, + * RTPATH_STR_F_STYLE_UNIX, or other future styles. */ +#if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS) +# define RTPATH_STYLE RTPATH_STR_F_STYLE_DOS +#else +# define RTPATH_STYLE RTPATH_STR_F_STYLE_UNIX +#endif + + +/** @def RTPATH_SLASH + * The preferred slash character. + * + * @remark IPRT will always accept unix slashes. So, normally you would + * never have to use this define. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_SLASH '\\' +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_SLASH '/' +#else +# error "Unsupported RTPATH_STYLE value." +#endif + +/** @deprecated Use '/'! */ +#define RTPATH_DELIMITER RTPATH_SLASH + + +/** @def RTPATH_SLASH_STR + * The preferred slash character as a string, handy for concatenations + * with other strings. + * + * @remark IPRT will always accept unix slashes. So, normally you would + * never have to use this define. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_SLASH_STR "\\" +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_SLASH_STR "/" +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_SLASH + * Checks if a character is a slash. + * + * @returns true if it's a slash and false if not. + * @returns @param a_ch Char to check. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_IS_SLASH(a_ch) ( (a_ch) == '\\' || (a_ch) == '/' ) +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_IS_SLASH(a_ch) ( (a_ch) == '/' ) +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_VOLSEP + * Checks if a character marks the end of the volume specification. + * + * @remark This is sufficient for the drive letter concept on PC. + * However it might be insufficient on other platforms + * and even on PC a UNC volume spec won't be detected this way. + * Use the RTPath@() instead. + * + * @returns true if it is and false if it isn't. + * @returns @param a_ch Char to check. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_IS_VOLSEP(a_ch) ( (a_ch) == ':' ) +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_IS_VOLSEP(a_ch) (false) +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_SEP + * Checks if a character is path component separator + * + * @returns true if it is and false if it isn't. + * @returns @param a_ch Char to check. + * @ + */ +#define RTPATH_IS_SEP(a_ch) ( RTPATH_IS_SLASH(a_ch) || RTPATH_IS_VOLSEP(a_ch) ) + + +/** + * Checks if the path exists. + * + * Symbolic links will all be attempted resolved and broken links means false. + * + * @returns true if it exists and false if it doesn't. + * @param pszPath The path to check. + */ +RTDECL(bool) RTPathExists(const char *pszPath); + +/** + * Checks if the path exists. + * + * @returns true if it exists and false if it doesn't. + * @param pszPath The path to check. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTDECL(bool) RTPathExistsEx(const char *pszPath, uint32_t fFlags); + +/** + * Sets the current working directory of the process. + * + * @returns IPRT status code. + * @param pszPath The path to the new working directory. + */ +RTDECL(int) RTPathSetCurrent(const char *pszPath); + +/** + * Gets the current working directory of the process. + * + * @returns IPRT status code. + * @param pszPath Where to store the path. + * @param cchPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrent(char *pszPath, size_t cchPath); + +/** + * Gets the current working directory on the specified drive. + * + * On systems without drive letters, the root slash will be returned. + * + * @returns IPRT status code. + * @param chDrive The drive we're querying the driver letter on. + * @param pszPath Where to store the working directroy path. + * @param cbPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrentOnDrive(char chDrive, char *pszPath, size_t cbPath); + +/** + * Gets the current working drive of the process. + * + * Normally drive letter and colon will be returned, never trailing a root + * slash. If the current directory is on a UNC share, the root of the share + * will be returned. On systems without drive letters, an empty string is + * returned for consistency. + * + * @returns IPRT status code. + * @param pszPath Where to store the working drive or UNC root. + * @param cbPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrentDrive(char *pszPath, size_t cbPath); + +/** + * Get the real path (no symlinks, no . or .. components), must exist. + * + * @returns iprt status code. + * @param pszPath The path to resolve. + * @param pszRealPath Where to store the real path. + * @param cchRealPath Size of the buffer. + */ +RTDECL(int) RTPathReal(const char *pszPath, char *pszRealPath, size_t cchRealPath); + +/** + * Same as RTPathReal only the result is RTStrDup()'ed. + * + * @returns Pointer to real path. Use RTStrFree() to free this string. + * @returns NULL if RTPathReal() or RTStrDup() fails. + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathRealDup(const char *pszPath); + +/** + * Get the absolute path (starts from root, no . or .. components), doesn't have + * to exist. Note that this method is designed to never perform actual file + * system access, therefore symlinks are not resolved. + * + * @returns iprt status code. + * @param pszPath The path to resolve. + * @param pszAbsPath Where to store the absolute path. + * @param cchAbsPath Size of the buffer. + */ +RTDECL(int) RTPathAbs(const char *pszPath, char *pszAbsPath, size_t cchAbsPath); + +/** + * Same as RTPathAbs only the result is RTStrDup()'ed. + * + * @returns Pointer to the absolute path. Use RTStrFree() to free this string. + * @returns NULL if RTPathAbs() or RTStrDup() fails. + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathAbsDup(const char *pszPath); + +/** + * Get the absolute path (no symlinks, no . or .. components), assuming the + * given base path as the current directory. The resulting path doesn't have + * to exist. + * + * @returns iprt status code. + * @param pszBase The base path to act like a current directory. + * When NULL, the actual cwd is used (i.e. the call + * is equivalent to RTPathAbs(pszPath, ...). + * @param pszPath The path to resolve. + * @param pszAbsPath Where to store the absolute path. + * @param cchAbsPath Size of the buffer. + */ +RTDECL(int) RTPathAbsEx(const char *pszBase, const char *pszPath, char *pszAbsPath, size_t cchAbsPath); + +/** + * Same as RTPathAbsEx only the result is RTStrDup()'ed. + * + * @returns Pointer to the absolute path. Use RTStrFree() to free this string. + * @returns NULL if RTPathAbsEx() or RTStrDup() fails. + * @param pszBase The base path to act like a current directory. + * When NULL, the actual cwd is used (i.e. the call + * is equivalent to RTPathAbs(pszPath, ...). + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathAbsExDup(const char *pszBase, const char *pszPath); + +/** + * Strips the filename from a path. Truncates the given string in-place by overwriting the + * last path separator character with a null byte in a platform-neutral way. + * + * @param pszPath Path from which filename should be extracted, will be truncated. + * If the string contains no path separator, it will be changed to a "." string. + */ +RTDECL(void) RTPathStripFilename(char *pszPath); + +/** + * Strips the last suffix from a path. + * + * @param pszPath Path which suffix should be stripped. + */ +RTDECL(void) RTPathStripSuffix(char *pszPath); + +/** + * Strips the trailing slashes of a path name. + * + * Won't strip root slashes. + * + * @returns The new length of pszPath. + * @param pszPath Path to strip. + */ +RTDECL(size_t) RTPathStripTrailingSlash(char *pszPath); + +/** + * Skips the root specification, if present. + * + * @return Pointer to the first char after the root specification. This can be + * pointing to the terminator, if the path is only a root + * specification. + * @param pszPath The path to skip ahead in. + */ +RTDECL(char *) RTPathSkipRootSpec(const char *pszPath); + +/** + * Ensures that the path has a trailing path separator such that file names can + * be appended without further work. + * + * This can be helpful when preparing for efficiently combining a directory path + * with the filenames returned by RTDirRead. The return value gives you the + * position at which you copy the RTDIRENTRY::szName to construct a valid path + * to it. + * + * @returns The length of the path, 0 on buffer overflow. + * @param pszPath The path. + * @param cbPath The length of the path buffer @a pszPath points to. + */ +RTDECL(size_t) RTPathEnsureTrailingSeparator(char *pszPath, size_t cbPath); + +/** + * Changes all the slashes in the specified path to DOS style. + * + * Unless @a fForce is set, nothing will be done when on a UNIX flavored system + * since paths wont work with DOS style slashes there. + * + * @returns @a pszPath. + * @param pszPath The path to modify. + * @param fForce Whether to force the conversion on non-DOS OSes. + */ +RTDECL(char *) RTPathChangeToDosSlashes(char *pszPath, bool fForce); + +/** + * Changes all the slashes in the specified path to unix style. + * + * Unless @a fForce is set, nothing will be done when on a UNIX flavored system + * since paths wont work with DOS style slashes there. + * + * @returns @a pszPath. + * @param pszPath The path to modify. + * @param fForce Whether to force the conversion on non-DOS OSes. + */ +RTDECL(char *) RTPathChangeToUnixSlashes(char *pszPath, bool fForce); + +/** + * Simple parsing of the a path. + * + * It figures the length of the directory component, the offset of + * the file name and the location of the suffix dot. + * + * @returns The path length. + * + * @param pszPath Path to find filename in. + * @param pcchDir Where to put the length of the directory component. If + * no directory, this will be 0. Optional. + * @param poffName Where to store the filename offset. + * If empty string or if it's ending with a slash this + * will be set to -1. Optional. + * @param poffSuff Where to store the suffix offset (the last dot). + * If empty string or if it's ending with a slash this + * will be set to -1. Optional. + */ +RTDECL(size_t) RTPathParseSimple(const char *pszPath, size_t *pcchDir, ssize_t *poffName, ssize_t *poffSuff); + +/** + * Finds the filename in a path. + * + * @returns Pointer to filename within pszPath. + * @returns NULL if no filename (i.e. empty string or ends with a slash). + * @param pszPath Path to find filename in. + */ +RTDECL(char *) RTPathFilename(const char *pszPath); + +/** + * Finds the filename in a path, extended version. + * + * @returns Pointer to filename within pszPath. + * @returns NULL if no filename (i.e. empty string or ends with a slash). + * @param pszPath Path to find filename in. + * @param fFlags RTPATH_STR_F_STYLE_XXX. Other RTPATH_STR_F_XXX flags + * will be ignored. + */ +RTDECL(char *) RTPathFilenameEx(const char *pszPath, uint32_t fFlags); + +/** + * Finds the suffix part of in a path (last dot and onwards). + * + * @returns Pointer to suffix within pszPath. + * @returns NULL if no suffix + * @param pszPath Path to find suffix in. + * + * @remarks IPRT terminology: A suffix includes the dot, the extension starts + * after the dot. For instance suffix '.txt' and extension 'txt'. + */ +RTDECL(char *) RTPathSuffix(const char *pszPath); + +/** + * Checks if a path has an extension / suffix. + * + * @returns true if extension / suffix present. + * @returns false if no extension / suffix. + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathHasSuffix(const char *pszPath); +/** Same thing, different name. */ +#define RTPathHasExt RTPathHasSuffix + +/** + * Checks if a path includes more than a filename. + * + * @returns true if path present. + * @returns false if no path. + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathHasPath(const char *pszPath); +/** Misspelled, don't use. */ +#define RTPathHavePath RTPathHasPath + +/** + * Checks if the path starts with a root specifier or not. + * + * @returns @c true if it starts with root, @c false if not. + * + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathStartsWithRoot(const char *pszPath); + + + +/** + * Counts the components in the specified path. + * + * An empty string has zero components. A lone root slash is considered have + * one. The paths "/init" and "/bin/" are considered having two components. An + * UNC share specifier like "\\myserver\share" will be considered as one single + * component. + * + * @returns The number of path components. + * @param pszPath The path to parse. + */ +RTDECL(size_t) RTPathCountComponents(const char *pszPath); + +/** + * Copies the specified number of path components from @a pszSrc and into @a + * pszDst. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. In the latter case the buffer + * is not touched. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer. + * @param pszSrc The source path. + * @param cComponents The number of components to copy from @a pszSrc. + */ +RTDECL(int) RTPathCopyComponents(char *pszDst, size_t cbDst, const char *pszSrc, size_t cComponents); + +/** @name Path properties returned by RTPathParse and RTPathSplit. + * @{ */ + +/** Indicates that there is a filename. + * If not set, either a lone root spec was given (RTPATH_PROP_UNC, + * RTPATH_PROP_ROOT_SLASH, or RTPATH_PROP_VOLUME) or the final component had a + * trailing slash (RTPATH_PROP_DIR_SLASH). */ +#define RTPATH_PROP_FILENAME UINT16_C(0x0001) +/** Indicates that a directory was specified using a trailing slash. + * @note This is not set for lone root specifications (RTPATH_PROP_UNC, + * RTPATH_PROP_ROOT_SLASH, or RTPATH_PROP_VOLUME). + * @note The slash is not counted into the last component. However, it is + * counted into cchPath. */ +#define RTPATH_PROP_DIR_SLASH UINT16_C(0x0002) + +/** The filename has a suffix (extension). */ +#define RTPATH_PROP_SUFFIX UINT16_C(0x0004) +/** Indicates that this is an UNC path (Windows and OS/2 only). + * + * UNC = Universal Naming Convention. It is on the form '//Computer/', + * '//Namespace/', '//ComputerName/Resource' and '//Namespace/Resource'. + * RTPathParse, RTPathSplit and friends does not consider the 'Resource' as + * part of the UNC root specifier. Thus the root specs for the above examples + * would be '//ComputerName/' or '//Namespace/'. + * + * Please note that '//something' is not a UNC path, there must be a slash + * following the computer or namespace. + */ +#define RTPATH_PROP_UNC UINT16_C(0x0010) +/** A root slash was specified (unix style root). + * (While the path must relative if not set, this being set doesn't make it + * absolute.) + * + * This will be set in the following examples: '/', '/bin', 'C:/', 'C:/Windows', + * '//./', '//./PhysicalDisk0', '//example.org/', and '//example.org/share'. + * + * It will not be set for the following examples: '.', 'bin/ls', 'C:', and + * 'C:Windows'. + */ +#define RTPATH_PROP_ROOT_SLASH UINT16_C(0x0020) +/** A volume is specified (Windows, DOS and OS/2). + * For examples: 'C:', 'C:/', and 'A:/AutoExec.bat'. */ +#define RTPATH_PROP_VOLUME UINT16_C(0x0040) +/** The path is absolute, i.e. has a root specifier (root-slash, + * volume or UNC) and contains no winding '..' bits, though it may contain + * unnecessary slashes (RTPATH_PROP_EXTRA_SLASHES) and '.' components + * (RTPATH_PROP_DOT_REFS). + * + * On systems without volumes and UNC (unix style) it will be set for '/', + * '/bin/ls', and '/bin//./ls', but not for 'bin/ls', /bin/../usr/bin/env', + * '/./bin/ls' or '/.'. + * + * On systems with volumes, it will be set for 'C:/', C:/Windows', and + * 'C:/./Windows//', but not for 'C:', 'C:Windows', or 'C:/Windows/../boot.ini'. + * + * On systems with UNC paths, it will be set for '//localhost/', + * '//localhost/C$', '//localhost/C$/Windows/System32', '//localhost/.', and + * '//localhost/C$//./AutoExec.bat', but not for + * '//localhost/C$/Windows/../AutoExec.bat'. + * + * @note For the RTPathAbs definition, this flag needs to be set while both + * RTPATH_PROP_EXTRA_SLASHES and RTPATH_PROP_DOT_REFS must be cleared. + */ +#define RTPATH_PROP_ABSOLUTE UINT16_C(0x0100) +/** Relative path. Inverse of RTPATH_PROP_ABSOLUTE. */ +#define RTPATH_PROP_RELATIVE UINT16_C(0x0200) +/** The path contains unnecessary slashes. Meaning, that if */ +#define RTPATH_PROP_EXTRA_SLASHES UINT16_C(0x0400) +/** The path contains references to the special '.' (dot) directory link. */ +#define RTPATH_PROP_DOT_REFS UINT16_C(0x0800) +/** The path contains references to the special '..' (dot) directory link. + * RTPATH_PROP_RELATIVE will always be set together with this. */ +#define RTPATH_PROP_DOTDOT_REFS UINT16_C(0x1000) + + +/** Macro to determin whether to insert a slash after the first component when + * joining it with something else. + * (All other components in a split or parsed path requies slashes added.) */ +#define RTPATH_PROP_FIRST_NEEDS_NO_SLASH(a_fProps) \ + RT_BOOL( (a_fProps) & (RTPATH_PROP_ROOT_SLASH | RTPATH_PROP_VOLUME | RTPATH_PROP_UNC) ) + +/** Macro to determin whether there is a root specification of any kind + * (unix, volumes, unc). */ +#define RTPATH_PROP_HAS_ROOT_SPEC(a_fProps) \ + RT_BOOL( (a_fProps) & (RTPATH_PROP_ROOT_SLASH | RTPATH_PROP_VOLUME | RTPATH_PROP_UNC) ) + +/** @} */ + + +/** + * Parsed path. + * + * The first component is the root, volume or UNC specifier, if present. Use + * RTPATH_PROP_HAS_ROOT_SPEC() on RTPATHPARSED::fProps to determine its + * presence. + * + * Other than the root component, no component will include directory separators + * (slashes). + */ +typedef struct RTPATHPARSED +{ + /** Number of path components. + * This will always be set on VERR_BUFFER_OVERFLOW returns from RTPathParsed + * so the caller can calculate the required buffer size. */ + uint16_t cComps; + /** Path property flags, RTPATH_PROP_XXX */ + uint16_t fProps; + /** On success this is the length of the described path, i.e. sum of all + * component lengths and necessary separators. + * Do NOT use this to index in the source path in case it contains + * unnecessary slashes that RTPathParsed has ignored here. */ + uint16_t cchPath; + /** Reserved for future use. */ + uint16_t u16Reserved; + /** The offset of the filename suffix, offset of the NUL char if none. */ + uint16_t offSuffix; + /** The lenght of the suffix. */ + uint16_t cchSuffix; + /** Array of component descriptors (variable size). + * @note Don't try figure the end of the input path by adding up off and cch + * of the last component. If RTPATH_PROP_DIR_SLASH is set, there may + * be one or more trailing slashes that are unaccounted for! */ + struct + { + /** The offset of the component. */ + uint16_t off; + /** The length of the component. */ + uint16_t cch; + } aComps[1]; +} RTPATHPARSED; +/** Pointer to to a parsed path result. */ +typedef RTPATHPARSED *PRTPATHPARSED; +/** Pointer to to a const parsed path result. */ +typedef RTPATHPARSED *PCRTPATHPARSED; + + +/** + * Parses the path. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_INVALID_PARAMETER if cbOutput is less than the RTPATHPARSED + * strucuture. No output. (asserted) + * @retval VERR_BUFFER_OVERFLOW there are more components in the path than + * there is space in aComps. The required amount of space can be + * determined from the pParsed->cComps: + * @code + * RT_OFFSETOF(RTPATHPARSED, aComps[pParsed->cComps]) + * @endcode + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param pParsed Where to store the details of the parsed path. + * @param cbParsed The size of the buffer. Must be at least the + * size of RTPATHPARSED. + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @sa RTPathSplit, RTPathSplitA. + */ +RTDECL(int) RTPathParse(const char *pszPath, PRTPATHPARSED pParsed, size_t cbParsed, uint32_t fFlags); + +/** + * Reassembles a path parsed by RTPathParse. + * + * This will be more useful as more APIs manipulating the RTPATHPARSED output + * are added. + * + * @returns IPRT status code. + * @retval VERR_BUFFER_OVERFLOW if @a cbDstPath is less than or equal to + * RTPATHPARSED::cchPath. + * + * @param pszSrcPath The source path. + * @param pParsed The parser output for @a pszSrcPath. + * @param fFlags Combination of RTPATH_STR_F_STYLE_XXX. + * Most users will pass 0. + * @param pszDstPath Pointer to the buffer where the path is to be + * reassembled. + * @param cbDstPath The size of the output buffer. + */ +RTDECL(int) RTPathParsedReassemble(const char *pszSrcPath, PRTPATHPARSED pParsed, uint32_t fFlags, + char *pszDstPath, size_t cbDstPath); + + +/** + * Output buffer for RTPathSplit and RTPathSplitA. + */ +typedef struct RTPATHSPLIT +{ + /** Number of path components. + * This will always be set on VERR_BUFFER_OVERFLOW returns from RTPathParsed + * so the caller can calculate the required buffer size. */ + uint16_t cComps; + /** Path property flags, RTPATH_PROP_XXX */ + uint16_t fProps; + /** On success this is the length of the described path, i.e. sum of all + * component lengths and necessary separators. + * Do NOT use this to index in the source path in case it contains + * unnecessary slashes that RTPathSplit has ignored here. */ + uint16_t cchPath; + /** Reserved (internal use). */ + uint16_t u16Reserved; + /** The amount of memory used (on success) or required (on + * VERR_BUFFER_OVERFLOW) of this structure and it's strings. */ + uint32_t cbNeeded; + /** Pointer to the filename suffix (the dot), if any. Points to the NUL + * character of the last component if none or if RTPATH_PROP_DIR_SLASH is + * present. */ + const char *pszSuffix; + /** Array of component strings (variable size). */ + char *apszComps[1]; +} RTPATHSPLIT; +/** Pointer to a split path buffer. */ +typedef RTPATHSPLIT *PRTPATHSPLIT; +/** Pointer to a const split path buffer. */ +typedef RTPATHSPLIT const *PCRTPATHSPLIT; + +/** + * Splits the path into individual component strings, carved from user supplied + * the given buffer block. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_INVALID_PARAMETER if cbOutput is less than the RTPATHSPLIT + * strucuture. No output. (asserted) + * @retval VERR_BUFFER_OVERFLOW there are more components in the path than + * there is space in aComps. The required amount of space can be + * determined from the pParsed->cComps: + * @code + * RT_OFFSETOF(RTPATHPARSED, aComps[pParsed->cComps]) + * @endcode + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * @retval VERR_FILENAME_TOO_LONG if the filename is too long (close to 64 KB). + * + * @param pszPath The path to parse. + * @param pSplit Where to store the details of the parsed path. + * @param cbSplit The size of the buffer pointed to by @a pSplit + * (variable sized array at the end). Must be at + * least the size of RTPATHSPLIT. + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * + * @sa RTPathSplitA, RTPathParse. + */ +RTDECL(int) RTPathSplit(const char *pszPath, PRTPATHSPLIT pSplit, size_t cbSplit, uint32_t fFlags); + +/** + * Splits the path into individual component strings, allocating the buffer on + * the default thread heap. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param ppSplit Where to return the pointer to the output on + * success. This must be freed by calling + * RTPathSplitFree(). + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @sa RTPathSplitFree, RTPathSplit, RTPathParse. + */ +#define RTPathSplitA(pszPath, ppSplit, fFlags) RTPathSplitATag(pszPath, ppSplit, fFlags, RTPATH_TAG) + +/** + * Splits the path into individual component strings, allocating the buffer on + * the default thread heap. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param ppSplit Where to return the pointer to the output on + * success. This must be freed by calling + * RTPathSplitFree(). + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @param pszTag Allocation tag used for statistics and such. + * @sa RTPathSplitFree, RTPathSplit, RTPathParse. + */ +RTDECL(int) RTPathSplitATag(const char *pszPath, PRTPATHSPLIT *ppSplit, uint32_t fFlags, const char *pszTag); + +/** + * Frees buffer returned by RTPathSplitA. + * + * @param pSplit What RTPathSplitA returned. + * @sa RTPathSplitA + */ +RTDECL(void) RTPathSplitFree(PRTPATHSPLIT pSplit); + +/** + * Reassembles a path parsed by RTPathSplit. + * + * This will be more useful as more APIs manipulating the RTPATHSPLIT output are + * added. + * + * @returns IPRT status code. + * @retval VERR_BUFFER_OVERFLOW if @a cbDstPath is less than or equal to + * RTPATHSPLIT::cchPath. + * + * @param pSplit A split path (see RTPathSplit, RTPathSplitA). + * @param fFlags Combination of RTPATH_STR_F_STYLE_XXX. + * Most users will pass 0. + * @param pszDstPath Pointer to the buffer where the path is to be + * reassembled. + * @param cbDstPath The size of the output buffer. + */ +RTDECL(int) RTPathSplitReassemble(PRTPATHSPLIT pSplit, uint32_t fFlags, char *pszDstPath, size_t cbDstPath); + +/** + * Checks if the two paths leads to the file system object. + * + * If the objects exist, we'll query attributes for them. If that's not + * conclusive (some OSes) or one of them doesn't exist, we'll use a combination + * of RTPathAbs and RTPathCompare to determine the result. + * + * @returns true, false, or VERR_FILENAME_TOO_LONG. + * @param pszPath1 The first path. + * @param pszPath2 The seoncd path. + */ +RTDECL(int) RTPathIsSame(const char *pszPath1, const char *pszPath2); + + +/** + * Compares two paths. + * + * The comparison takes platform-dependent details into account, + * such as: + *
    + *
  • On DOS-like platforms, both separator chars (|\| and |/|) are considered + * to be equal. + *
  • On platforms with case-insensitive file systems, mismatching characters + * are uppercased and compared again. + *
+ * + * @returns @< 0 if the first path less than the second path. + * @returns 0 if the first path identical to the second path. + * @returns @> 0 if the first path greater than the second path. + * + * @param pszPath1 Path to compare (must be an absolute path). + * @param pszPath2 Path to compare (must be an absolute path). + * + * @remarks File system details are currently ignored. This means that you won't + * get case-insensitive compares on unix systems when a path goes into a + * case-insensitive filesystem like FAT, HPFS, HFS, NTFS, JFS, or + * similar. For NT, OS/2 and similar you'll won't get case-sensitive + * compares on a case-sensitive file system. + */ +RTDECL(int) RTPathCompare(const char *pszPath1, const char *pszPath2); + +/** + * Checks if a path starts with the given parent path. + * + * This means that either the path and the parent path matches completely, or + * that the path is to some file or directory residing in the tree given by the + * parent directory. + * + * The path comparison takes platform-dependent details into account, + * see RTPathCompare() for details. + * + * @returns |true| when \a pszPath starts with \a pszParentPath (or when they + * are identical), or |false| otherwise. + * + * @param pszPath Path to check, must be an absolute path. + * @param pszParentPath Parent path, must be an absolute path. + * No trailing directory slash! + * + * @remarks This API doesn't currently handle root directory compares in a + * manner consistent with the other APIs. RTPathStartsWith(pszSomePath, + * "/") will not work if pszSomePath isn't "/". + */ +RTDECL(bool) RTPathStartsWith(const char *pszPath, const char *pszParentPath); + +/** + * Appends one partial path to another. + * + * The main purpose of this function is to deal correctly with the slashes when + * concatenating the two partial paths. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. No changes has been made. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPath The path to append pszAppend to. This serves as both + * input and output. This can be empty, in which case + * pszAppend is just copied over. + * @param cbPathDst The size of the buffer pszPath points to, terminator + * included. This should NOT be strlen(pszPath). + * @param pszAppend The partial path to append to pszPath. This can be + * NULL, in which case nothing is done. + * + * @remarks See the RTPathAppendEx remarks. + */ +RTDECL(int) RTPathAppend(char *pszPath, size_t cbPathDst, const char *pszAppend); + +/** + * Appends one partial path to another. + * + * The main purpose of this function is to deal correctly with the slashes when + * concatenating the two partial paths. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. No changes has been made. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPath The path to append pszAppend to. This serves as both + * input and output. This can be empty, in which case + * pszAppend is just copied over. + * @param cbPathDst The size of the buffer pszPath points to, terminator + * included. This should NOT be strlen(pszPath). + * @param pszAppend The partial path to append to pszPath. This can be + * NULL, in which case nothing is done. + * @param cchAppendMax The maximum number or characters to take from @a + * pszAppend. RTSTR_MAX is fine. + * + * @remarks On OS/2, Window and similar systems, concatenating a drive letter + * specifier with a slash prefixed path will result in an absolute + * path. Meaning, RTPathAppend(strcpy(szBuf, "C:"), sizeof(szBuf), + * "/bar") will result in "C:/bar". (This follows directly from the + * behavior when pszPath is empty.) + * + * On the other hand, when joining a drive letter specifier with a + * partial path that does not start with a slash, the result is not an + * absolute path. Meaning, RTPathAppend(strcpy(szBuf, "C:"), + * sizeof(szBuf), "bar") will result in "C:bar". + */ +RTDECL(int) RTPathAppendEx(char *pszPath, size_t cbPathDst, const char *pszAppend, size_t cchAppendMax); + +/** + * Like RTPathAppend, but with the base path as a separate argument instead of + * in the path buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * + */ +RTDECL(int) RTPathJoin(char *pszPathDst, size_t cbPathDst, const char *pszPathSrc, + const char *pszAppend); + +/** + * Same as RTPathJoin, except that the output buffer is allocated. + * + * @returns Buffer containing the joined up path, call RTStrFree to free. NULL + * on allocation failure. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * + */ +RTDECL(char *) RTPathJoinA(const char *pszPathSrc, const char *pszAppend); + +/** + * Extended version of RTPathJoin, both inputs can be specified as substrings. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param cchPathSrcMax The maximum number of bytes to copy from @a + * pszPathSrc. RTSTR_MAX is find. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * @param cchAppendMax The maximum number of bytes to copy from @a + * pszAppend. RTSTR_MAX is find. + * + */ +RTDECL(int) RTPathJoinEx(char *pszPathDst, size_t cbPathDst, + const char *pszPathSrc, size_t cchPathSrcMax, + const char *pszAppend, size_t cchAppendMax); + +/** + * Callback for RTPathTraverseList that's called for each element. + * + * @returns IPRT style status code. Return VERR_TRY_AGAIN to continue, any other + * value will abort the traversing and be returned to the caller. + * + * @param pchPath Pointer to the start of the current path. This is + * not null terminated. + * @param cchPath The length of the path. + * @param pvUser1 The first user parameter. + * @param pvUser2 The second user parameter. + */ +typedef DECLCALLBACK(int) FNRTPATHTRAVERSER(char const *pchPath, size_t cchPath, void *pvUser1, void *pvUser2); +/** Pointer to a FNRTPATHTRAVERSER. */ +typedef FNRTPATHTRAVERSER *PFNRTPATHTRAVERSER; + +/** + * Traverses a string that can contain multiple paths separated by a special + * character. + * + * @returns IPRT style status code from the callback or VERR_END_OF_STRING if + * the callback returned VERR_TRY_AGAIN for all paths in the string. + * + * @param pszPathList The string to traverse. + * @param chSep The separator character. Using the null terminator + * is fine, but the result will simply be that there + * will only be one callback for the entire string + * (save any leading white space). + * @param pfnCallback The callback. + * @param pvUser1 First user argument for the callback. + * @param pvUser2 Second user argument for the callback. + */ +RTDECL(int) RTPathTraverseList(const char *pszPathList, char chSep, PFNRTPATHTRAVERSER pfnCallback, void *pvUser1, void *pvUser2); + + +/** + * Calculate a relative path between the two given paths. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_NOT_SUPPORTED if both paths start with different volume specifiers. + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathFrom The path to start from creating the relative path. + * @param pszPathTo The path to reach with the created relative path. + */ +RTDECL(int) RTPathCalcRelative(char *pszPathDst, size_t cbPathDst, + const char *pszPathFrom, + const char *pszPathTo); + +#ifdef IN_RING3 + +/** + * Gets the path to the directory containing the executable. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathExecDir(char *pszPath, size_t cchPath); + +/** + * Gets the user home directory. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathUserHome(char *pszPath, size_t cchPath); + +/** + * Gets the user documents directory. + * + * The returned path isn't guaranteed to exist. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathUserDocuments(char *pszPath, size_t cchPath); + +/** + * Gets the directory of shared libraries. + * + * This is not the same as RTPathAppPrivateArch() as Linux depends all shared + * libraries in a common global directory where ld.so can find them. + * + * Linux: /usr/lib + * Solaris: /opt/@/@@ or something + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathSharedLibs(char *pszPath, size_t cchPath); + +/** + * Gets the directory for architecture-independent application data, for + * example NLS files, module sources, ... + * + * Linux: /usr/shared/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateNoArch(char *pszPath, size_t cchPath); + +/** + * Gets the directory for architecture-dependent application data, for + * example modules which can be loaded at runtime. + * + * Linux: /usr/lib/@ + * Solaris: /opt/@/@@ or something + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateArch(char *pszPath, size_t cchPath); + +/** + * Gets the toplevel directory for architecture-dependent application data. + * + * This differs from RTPathAppPrivateArch on Solaris only where it will work + * around the /opt/@/amd64 and /opt/@/i386 multi + * architecture installation style. + * + * Linux: /usr/lib/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateArchTop(char *pszPath, size_t cchPath); + +/** + * Gets the directory for documentation. + * + * Linux: /usr/share/doc/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppDocs(char *pszPath, size_t cchPath); + +/** + * Gets the temporary directory path. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathTemp(char *pszPath, size_t cchPath); + + +/** + * RTPathGlobl result entry. + */ +typedef struct RTPATHGLOBENTRY +{ + /** List entry. */ + struct RTPATHGLOBENTRY *pNext; + /** RTDIRENTRYTYPE value. */ + uint8_t uType; + /** Unused explicit padding. */ + uint8_t bUnused; + /** The length of the path. */ + uint16_t cchPath; + /** The path to the file (variable length). */ + char szPath[1]; +} RTPATHGLOBENTRY; +/** Pointer to a GLOB result entry. */ +typedef RTPATHGLOBENTRY *PRTPATHGLOBENTRY; +/** Pointer to a const GLOB result entry. */ +typedef RTPATHGLOBENTRY const *PCRTPATHGLOBENTRY; +/** Pointer to a GLOB result entry pointer. */ +typedef PCRTPATHGLOBENTRY *PPCRTPATHGLOBENTRY; + +/** + * Performs wildcard expansion on a path pattern. + * + * @returns IPRT status code. + * + * @param pszPattern The pattern to expand. + * @param fFlags RTPATHGLOB_F_XXX. + * @param ppHead Where to return the head of the result list. This + * is always set to NULL on failure. + * @param pcResults Where to return the number of the result. Optional. + */ +RTDECL(int) RTPathGlob(const char *pszPattern, uint32_t fFlags, PPCRTPATHGLOBENTRY ppHead, uint32_t *pcResults); + +/** @name RTPATHGLOB_F_XXX - RTPathGlob flags + * @{ */ +/** Case insensitive. */ +#define RTPATHGLOB_F_IGNORE_CASE RT_BIT_32(0) +/** Do not expand \${EnvOrSpecialVariable} in the pattern. */ +#define RTPATHGLOB_F_NO_VARIABLES RT_BIT_32(1) +/** Do not interpret a leading tilde as a home directory reference. */ +#define RTPATHGLOB_F_NO_TILDE RT_BIT_32(2) +/** Only return the first match. */ +#define RTPATHGLOB_F_FIRST_ONLY RT_BIT_32(3) +/** Only match directories (implied if pattern ends with slash). */ +#define RTPATHGLOB_F_ONLY_DIRS RT_BIT_32(4) +/** Do not match directories. (Can't be used with RTPATHGLOB_F_ONLY_DIRS or + * patterns containing a trailing slash.) */ +#define RTPATHGLOB_F_NO_DIRS RT_BIT_32(5) +/** Disables the '**' wildcard pattern for matching zero or more subdirs. */ +#define RTPATHGLOB_F_NO_STARSTAR RT_BIT_32(6) +/** Mask of valid flags. */ +#define RTPATHGLOB_F_MASK UINT32_C(0x0000007f) +/** @} */ + +/** + * Frees the results produced by RTPathGlob. + * + * @param pHead What RTPathGlob returned. NULL ignored. + */ +RTDECL(void) RTPathGlobFree(PCRTPATHGLOBENTRY pHead); + + +/** + * Query information about a file system object. + * + * This API will resolve NOT symbolic links in the last component (just like + * unix lstat()). + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the object exists, information returned. + * @retval VERR_PATH_NOT_FOUND if any but the last component in the specified + * path was not found or was not a directory. + * @retval VERR_FILE_NOT_FOUND if the object does not exist (but path to the + * parent directory exists). + * + * @param pszPath Path to the file system object. + * @param pObjInfo Object information structure to be filled on successful + * return. + * @param enmAdditionalAttribs + * Which set of additional attributes to request. + * Use RTFSOBJATTRADD_NOTHING if this doesn't matter. + */ +RTR3DECL(int) RTPathQueryInfo(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs); + +/** + * Query information about a file system object. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the object exists, information returned. + * @retval VERR_PATH_NOT_FOUND if any but the last component in the specified + * path was not found or was not a directory. + * @retval VERR_FILE_NOT_FOUND if the object does not exist (but path to the + * parent directory exists). + * + * @param pszPath Path to the file system object. + * @param pObjInfo Object information structure to be filled on successful return. + * @param enmAdditionalAttribs + * Which set of additional attributes to request. + * Use RTFSOBJATTRADD_NOTHING if this doesn't matter. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTR3DECL(int) RTPathQueryInfoEx(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags); + +/** + * Changes the mode flags of a file system object. + * + * The API requires at least one of the mode flag sets (Unix/Dos) to + * be set. The type is ignored. + * + * This API will resolve symbolic links in the last component since + * mode isn't important for symbolic links. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param fMode The new file mode, see @ref grp_rt_fs for details. + */ +RTR3DECL(int) RTPathSetMode(const char *pszPath, RTFMODE fMode); + +/** + * Gets the mode flags of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pfMode Where to store the file mode, see @ref grp_rt_fs for details. + * + * @remark This is wrapper around RTPathQueryInfoEx(RTPATH_F_FOLLOW_LINK) and + * exists to complement RTPathSetMode(). + */ +RTR3DECL(int) RTPathGetMode(const char *pszPath, PRTFMODE pfMode); + +/** + * Changes one or more of the timestamps associated of file system object. + * + * This API will not resolve symbolic links in the last component (just + * like unix lutimes()). + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Pointer to the new access time. + * @param pModificationTime Pointer to the new modification time. + * @param pChangeTime Pointer to the new change time. NULL if not to be changed. + * @param pBirthTime Pointer to the new time of birth. NULL if not to be changed. + * + * @remark The file system might not implement all these time attributes, + * the API will ignore the ones which aren't supported. + * + * @remark The file system might not implement the time resolution + * employed by this interface, the time will be chopped to fit. + * + * @remark The file system may update the change time even if it's + * not specified. + * + * @remark POSIX can only set Access & Modification and will always set both. + */ +RTR3DECL(int) RTPathSetTimes(const char *pszPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, + PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime); + +/** + * Changes one or more of the timestamps associated of file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Pointer to the new access time. + * @param pModificationTime Pointer to the new modification time. + * @param pChangeTime Pointer to the new change time. NULL if not to be changed. + * @param pBirthTime Pointer to the new time of birth. NULL if not to be changed. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + * + * @remark The file system might not implement all these time attributes, + * the API will ignore the ones which aren't supported. + * + * @remark The file system might not implement the time resolution + * employed by this interface, the time will be chopped to fit. + * + * @remark The file system may update the change time even if it's + * not specified. + * + * @remark POSIX can only set Access & Modification and will always set both. + */ +RTR3DECL(int) RTPathSetTimesEx(const char *pszPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, + PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime, uint32_t fFlags); + +/** + * Gets one or more of the timestamps associated of file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Where to store the access time. NULL is ok. + * @param pModificationTime Where to store the modification time. NULL is ok. + * @param pChangeTime Where to store the change time. NULL is ok. + * @param pBirthTime Where to store the creation time. NULL is ok. + * + * @remark This is wrapper around RTPathQueryInfo() and exists to complement + * RTPathSetTimes(). If the last component is a symbolic link, it will + * not be resolved. + */ +RTR3DECL(int) RTPathGetTimes(const char *pszPath, PRTTIMESPEC pAccessTime, PRTTIMESPEC pModificationTime, + PRTTIMESPEC pChangeTime, PRTTIMESPEC pBirthTime); + +/** + * Changes the owner and/or group of a file system object. + * + * This API will not resolve symbolic links in the last component (just + * like unix lchown()). + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param uid The new file owner user id. Pass NIL_RTUID to leave + * this unchanged. + * @param gid The new group id. Pass NIL_RTGUID to leave this + * unchanged. + */ +RTR3DECL(int) RTPathSetOwner(const char *pszPath, uint32_t uid, uint32_t gid); + +/** + * Changes the owner and/or group of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param uid The new file owner user id. Pass NIL_RTUID to leave + * this unchanged. + * @param gid The new group id. Pass NIL_RTGID to leave this + * unchanged. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTR3DECL(int) RTPathSetOwnerEx(const char *pszPath, uint32_t uid, uint32_t gid, uint32_t fFlags); + +/** + * Gets the owner and/or group of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pUid Where to store the owner user id. NULL is ok. + * @param pGid Where to store the group id. NULL is ok. + * + * @remark This is wrapper around RTPathQueryInfo() and exists to complement + * RTPathGetOwner(). If the last component is a symbolic link, it will + * not be resolved. + */ +RTR3DECL(int) RTPathGetOwner(const char *pszPath, uint32_t *pUid, uint32_t *pGid); + + +/** @name RTPathRename, RTDirRename & RTFileRename flags. + * @{ */ +/** Do not replace anything. */ +#define RTPATHRENAME_FLAGS_NO_REPLACE UINT32_C(0) +/** This will replace attempt any target which isn't a directory. */ +#define RTPATHRENAME_FLAGS_REPLACE RT_BIT(0) +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATHRENAME_FLAGS_NO_SYMLINKS RT_BIT(1) +/** @} */ + +/** + * Renames a path within a filesystem. + * + * This will rename symbolic links. If RTPATHRENAME_FLAGS_REPLACE is used and + * pszDst is a symbolic link, it will be replaced and not its target. + * + * @returns IPRT status code. + * @param pszSrc The source path. + * @param pszDst The destination path. + * @param fRename Rename flags, RTPATHRENAME_FLAGS_*. + */ +RTR3DECL(int) RTPathRename(const char *pszSrc, const char *pszDst, unsigned fRename); + +/** @name RTPathUnlink flags. + * @{ */ +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATHUNLINK_FLAGS_NO_SYMLINKS RT_BIT(0) +/** @} */ + +/** + * Removes the last component of the path. + * + * @returns IPRT status code. + * @param pszPath The path. + * @param fUnlink Unlink flags, RTPATHUNLINK_FLAGS_*. + */ +RTR3DECL(int) RTPathUnlink(const char *pszPath, uint32_t fUnlink); + +/** + * A /bin/rm tool. + * + * @returns Program exit code. + * + * @param cArgs The number of arguments. + * @param papszArgs The argument vector. (Note that this may be + * reordered, so the memory must be writable.) + */ +RTDECL(RTEXITCODE) RTPathRmCmd(unsigned cArgs, char **papszArgs); + +#endif /* IN_RING3 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/power.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/power.h @@ -0,0 +1,112 @@ +/** @file + * IPRT - Power management. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_power_h +#define ___iprt_power_h + +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_power RTPower - Power management + * @ingroup grp_rt + * @{ + */ + +#ifdef IN_RING0 + +/** + * MP event, see FNRTPOWERNOTIFICATION. + */ +typedef enum RTPOWEREVENT +{ + /** The system will go into suspend mode. */ + RTPOWEREVENT_SUSPEND = 1, + /** The system has resumed. */ + RTPOWEREVENT_RESUME +} RTPOWEREVENT; + +/** + * Notification callback. + * + * The context this is called in differs a bit from platform to + * platform, so be careful while in here. + * + * @param enmEvent The event. + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(void) FNRTPOWERNOTIFICATION(RTPOWEREVENT enmEvent, void *pvUser); +/** Pointer to a FNRTPOWERNOTIFICATION(). */ +typedef FNRTPOWERNOTIFICATION *PFNRTPOWERNOTIFICATION; + +/** + * Registers a notification callback for power events. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NO_MEMORY if a registration record cannot be allocated. + * @retval VERR_ALREADY_EXISTS if the pfnCallback and pvUser already exist + * in the callback list. + * + * @param pfnCallback The callback. + * @param pvUser The user argument to the callback function. + */ +RTDECL(int) RTPowerNotificationRegister(PFNRTPOWERNOTIFICATION pfnCallback, void *pvUser); + +/** + * This deregisters a notification callback registered via RTPowerNotificationRegister(). + * + * The pfnCallback and pvUser arguments must be identical to the registration call + * of we won't find the right entry. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_NOT_FOUND if no matching entry was found. + * + * @param pfnCallback The callback. + * @param pvUser The user argument to the callback function. + */ +RTDECL(int) RTPowerNotificationDeregister(PFNRTPOWERNOTIFICATION pfnCallback, void *pvUser); + +/** + * This calls all registered power management callback handlers registered via RTPowerNotificationRegister(). + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * + * @param enmEvent Power Management event + */ +RTDECL(int) RTPowerSignalEvent(RTPOWEREVENT enmEvent); + +#endif /* IN_RING0 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/process.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/process.h @@ -0,0 +1,421 @@ +/** @file + * IPRT - Process Management. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_process_h +#define ___iprt_process_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_process RTProc - Process Management + * @ingroup grp_rt + * @{ + */ + + +/** + * Process priority. + * + * The process priority is used to select how scheduling properties + * are assigned to the different thread types (see THREADTYPE). + * + * In addition to using the policy assigned to the process at startup (DEFAULT) + * it is possible to change the process priority at runtime. This allows for + * a GUI, resource manager or admin to adjust the general priority of a task + * without upsetting the fine-tuned priority of the threads within. + */ +typedef enum RTPROCPRIORITY +{ + /** Invalid priority. */ + RTPROCPRIORITY_INVALID = 0, + /** Default priority. + * Derive the scheduling policy from the priority of the RTR3Init() + * and RTProcSetPriority() callers and the rights the process have + * to alter its own priority. + */ + RTPROCPRIORITY_DEFAULT, + /** Flat priority. + * Assumes a scheduling policy which puts the process at the default priority + * and with all thread at the same priority. + */ + RTPROCPRIORITY_FLAT, + /** Low priority. + * Assumes a scheduling policy which puts the process mostly below the + * default priority of the host OS. + */ + RTPROCPRIORITY_LOW, + /** Normal priority. + * Assume a scheduling policy which shares the CPU resources fairly with + * other processes running with the default priority of the host OS. + */ + RTPROCPRIORITY_NORMAL, + /** High priority. + * Assumes a scheduling policy which puts the task above the default + * priority of the host OS. This policy might easily cause other tasks + * in the system to starve. + */ + RTPROCPRIORITY_HIGH, + /** Last priority, used for validation. */ + RTPROCPRIORITY_LAST +} RTPROCPRIORITY; + + +/** + * Get the current process identifier. + * + * @returns Process identifier. + */ +RTDECL(RTPROCESS) RTProcSelf(void); + + +#ifdef IN_RING0 +/** + * Get the current process handle. + * + * @returns Ring-0 process handle. + */ +RTR0DECL(RTR0PROCESS) RTR0ProcHandleSelf(void); +#endif + + +#ifdef IN_RING3 + +/** + * Attempts to alter the priority of the current process. + * + * @returns iprt status code. + * @param enmPriority The new priority. + */ +RTR3DECL(int) RTProcSetPriority(RTPROCPRIORITY enmPriority); + +/** + * Gets the current priority of this process. + * + * @returns The priority (see RTPROCPRIORITY). + */ +RTR3DECL(RTPROCPRIORITY) RTProcGetPriority(void); + +/** + * Create a child process. + * + * @returns iprt status code. + * @param pszExec Executable image to use to create the child process. + * @param papszArgs Pointer to an array of arguments to the child. The array terminated by an entry containing NULL. + * @param Env Handle to the environment block for the child. + * @param fFlags Flags, one of the RTPROC_FLAGS_* defines. + * @param pProcess Where to store the process identifier on successful return. + * The content is not changed on failure. NULL is allowed. + */ +RTR3DECL(int) RTProcCreate(const char *pszExec, const char * const *papszArgs, RTENV Env, unsigned fFlags, PRTPROCESS pProcess); + + +/** + * Create a child process. + * + * @returns IPRT status code. + * + * @param pszExec Executable image to use to create the child process. + * @param papszArgs Pointer to an array of arguments to the child. The + * array terminated by an entry containing NULL. + * @param hEnv Handle to the environment block for the child. Pass + * RTENV_DEFAULT to use the environment of the current + * process. + * @param fFlags Flags, one of the RTPROC_FLAGS_* defines. + * @param phStdIn The standard in handle to assign the new process. Pass + * NULL to use the same as the current process. If the + * handle is NIL, we'll close the standard input of the + * guest. + * @param phStdOut The standard out handle to assign the new process. Pass + * NULL to use the same as the current process. If the + * handle is NIL, we'll close the standard output of the + * guest. + * @param phStdErr The standard error handle to assign the new process. Pass + * NULL to use the same as the current process. If the + * handle is NIL, we'll close the standard error of the + * guest. + * @param pszAsUser User to run the process as. Pass NULL to use the same + * user as the current process. + * Windows: Use user\@domain (UPN, User Principal Name) + * format to specify a domain. + * @param pszPassword Password to use to authenticate @a pszAsUser. Must be + * NULL wif pszAsUser is NULL. Whether this is actually + * used or not depends on the platform. + * @param phProcess Where to store the process handle on successful return. + * The content is not changed on failure. NULL is allowed. + * + * @remarks The handles does not have to be created as inheritable, but it + * doesn't hurt if they are as it may avoid race conditions on some + * platforms. + * + * @remarks The as-user feature isn't supported/implemented on all platforms and + * will cause a-yet-to-be-determined-error-status on these. + */ +RTR3DECL(int) RTProcCreateEx(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags, + PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser, + const char *pszPassword, PRTPROCESS phProcess); + +/** @name RTProcCreate and RTProcCreateEx flags + * @{ */ +/** Detach the child process from the parents process tree and process group, + * session or/and console (depends on the platform what's done applicable). + * + * The new process will not be a direct decendent of the parent and it will not + * be possible to wait for it, i.e. @a phProcess shall be NULL. */ +#define RTPROC_FLAGS_DETACHED RT_BIT(0) +/** Don't show the started process. + * This is a Windows (and maybe OS/2) concept, do not use on other platforms. */ +#define RTPROC_FLAGS_HIDDEN RT_BIT(1) +/** Use special code path for starting child processes from a service (daemon). + * This is a windows concept for dealing with the so called "Session 0" + * isolation which was introduced with Windows Vista. Do not use on other + * platforms. */ +#define RTPROC_FLAGS_SERVICE RT_BIT(2) +/** Suppress changing the process contract id for the child process + * on Solaris. Without this flag the contract id is always changed, as that's + * the more frequently used case. */ +#define RTPROC_FLAGS_SAME_CONTRACT RT_BIT(3) +/** Load user profile data when executing a process. + * This redefines the meaning of RTENV_DEFAULT to the profile environment. + * @remarks On non-windows platforms, the resulting environment maybe very + * different from what you see in your shell. Among other reasons, + * we cannot run shell profile scripts which typically sets up the + * environment. */ +#define RTPROC_FLAGS_PROFILE RT_BIT(4) +/** Create process without a console window. + * This is a Windows (and OS/2) concept, do not use on other platforms. */ +#define RTPROC_FLAGS_NO_WINDOW RT_BIT(5) +/** Search the PATH for the executable. */ +#define RTPROC_FLAGS_SEARCH_PATH RT_BIT(6) +/** Don't quote and escape arguments on Windows and similar platforms where a + * command line is passed to the child process instead of an argument vector, + * just join up argv with a space between each. Ignored on platforms + * passing argument the vector. */ +#define RTPROC_FLAGS_UNQUOTED_ARGS RT_BIT(7) +/** Consider hEnv an environment change record to be applied to RTENV_DEFAULT. + * If hEnv is RTENV_DEFAULT, the flag has no effect. */ +#define RTPROC_FLAGS_ENV_CHANGE_RECORD RT_BIT(8) +/** Valid flag mask. */ +#define RTPROC_FLAGS_VALID_MASK UINT32_C(0x1ff) +/** @} */ + + +/** + * Process exit reason. + */ +typedef enum RTPROCEXITREASON +{ + /** Normal exit. iStatus contains the exit code. */ + RTPROCEXITREASON_NORMAL = 1, + /** Any abnormal exit. iStatus is undefined. */ + RTPROCEXITREASON_ABEND, + /** Killed by a signal. The iStatus field contains the signal number. */ + RTPROCEXITREASON_SIGNAL +} RTPROCEXITREASON; + +/** + * Process exit status. + */ +typedef struct RTPROCSTATUS +{ + /** The process exit status if the exit was a normal one. */ + int iStatus; + /** The reason the process terminated. */ + RTPROCEXITREASON enmReason; +} RTPROCSTATUS; +/** Pointer to a process exit status structure. */ +typedef RTPROCSTATUS *PRTPROCSTATUS; +/** Pointer to a const process exit status structure. */ +typedef const RTPROCSTATUS *PCRTPROCSTATUS; + + +/** Flags for RTProcWait(). + * @{ */ +/** Block indefinitly waiting for the process to exit. */ +#define RTPROCWAIT_FLAGS_BLOCK 0 +/** Don't block, just check if the process have exited. */ +#define RTPROCWAIT_FLAGS_NOBLOCK 1 +/** @} */ + +/** + * Waits for a process, resumes on interruption. + * + * @returns VINF_SUCCESS when the status code for the process was collected and + * put in *pProcStatus. + * @returns VERR_PROCESS_NOT_FOUND if the specified process wasn't found. + * @returns VERR_PROCESS_RUNNING when the RTPROCWAIT_FLAGS_NOBLOCK and the + * process haven't exited yet. + * + * @param Process The process to wait for. + * @param fFlags The wait flags, any of the RTPROCWAIT_FLAGS_ \#defines. + * @param pProcStatus Where to store the exit status on success. + * Optional. + */ +RTR3DECL(int) RTProcWait(RTPROCESS Process, unsigned fFlags, PRTPROCSTATUS pProcStatus); + +/** + * Waits for a process, returns on interruption. + * + * @returns VINF_SUCCESS when the status code for the process was collected and + * put in *pProcStatus. + * @returns VERR_PROCESS_NOT_FOUND if the specified process wasn't found. + * @returns VERR_PROCESS_RUNNING when the RTPROCWAIT_FLAGS_NOBLOCK and the + * process haven't exited yet. + * @returns VERR_INTERRUPTED when the wait was interrupted by the arrival of a + * signal or other async event. + * + * @param Process The process to wait for. + * @param fFlags The wait flags, any of the RTPROCWAIT_FLAGS_ \#defines. + * @param pProcStatus Where to store the exit status on success. + * Optional. + */ +RTR3DECL(int) RTProcWaitNoResume(RTPROCESS Process, unsigned fFlags, PRTPROCSTATUS pProcStatus); + +/** + * Terminates (kills) a running process. + * + * @returns IPRT status code. + * @param Process The process to terminate. + */ +RTR3DECL(int) RTProcTerminate(RTPROCESS Process); + +/** + * Gets the processor affinity mask of the current process. + * + * @returns The affinity mask. + */ +RTR3DECL(uint64_t) RTProcGetAffinityMask(void); + +/** + * Gets the short process name. + * + * @returns Pointer to read-only name string. + */ +RTR3DECL(const char *) RTProcShortName(void); + +/** + * Gets the path to the executable image of the current process. + * + * @returns pszExecPath on success. NULL on buffer overflow or other errors. + * + * @param pszExecPath Where to store the path. + * @param cbExecPath The size of the buffer. + */ +RTR3DECL(char *) RTProcGetExecutablePath(char *pszExecPath, size_t cbExecPath); + +/** + * Daemonize the current process, making it a background process. + * + * The way this work is that it will spawn a detached / backgrounded / + * daemonized / call-it-what-you-want process that isn't a direct child of the + * current process. The spawned will have the same arguments a the caller, + * except that the @a pszDaemonizedOpt is appended to prevent that the new + * process calls this API again. + * + * The new process will have the standard handles directed to/from the + * bitbucket. + * + * @returns IPRT status code. On success it is normal for the caller to exit + * the process by returning from main(). + * + * @param papszArgs The argument vector of the calling process. + * @param pszDaemonizedOpt The daemonized option. This is appended to the + * end of the parameter list of the daemonized process. + */ +RTR3DECL(int) RTProcDaemonize(const char * const *papszArgs, const char *pszDaemonizedOpt); + +/** + * Daemonize the current process, making it a background process. The current + * process will exit if daemonizing is successful. + * + * @returns IPRT status code. On success it will only return in the child + * process, the parent will exit. On failure, it will return in the + * parent process and no child has been spawned. + * + * @param fNoChDir Pass false to change working directory to "/". + * @param fNoClose Pass false to redirect standard file streams to the null device. + * @param pszPidfile Path to a file to write the process id of the daemon + * process to. Daemonizing will fail if this file already + * exists or cannot be written. May be NULL. + */ +RTR3DECL(int) RTProcDaemonizeUsingFork(bool fNoChDir, bool fNoClose, const char *pszPidfile); + +/** + * Check if the given process is running on the system. + * + * This check is case sensitive on most systems, except for Windows, OS/2 and + * Darwin. + * + * @returns true if the process is running & false otherwise. + * @param pszName Process name to search for. If no path is given only the + * filename part of the running process set will be + * matched. If a path is specified, the full path will be + * matched. + */ +RTR3DECL(bool) RTProcIsRunningByName(const char *pszName); + +/** + * Queries the parent process ID. + * + * @returns IPRT status code + * @param hProcess The process to query the parent of. + * @param phParent Where to return the parent process ID. + */ +RTR3DECL(int) RTProcQueryParent(RTPROCESS hProcess, PRTPROCESS phParent); + +/** + * Query the username of the given process. + * + * @returns IPRT status code. + * @retval VERR_BUFFER_OVERFLOW if the given buffer size is to small for the username. + * @param hProcess The process handle to query the username for. + * NIL_PROCESS is an alias for the current process. + * @param pszUser Where to store the user name on success. + * @param cbUser The size of the user name buffer. + * @param pcbUser Where to store the username length on success + * or the required buffer size if VERR_BUFFER_OVERFLOW + * is returned. + */ +RTR3DECL(int) RTProcQueryUsername(RTPROCESS hProcess, char *pszUser, size_t cbUser, size_t *pcbUser); + +/** + * Query the username of the given process allocating the string for the username. + * + * @returns IPRT status code. + * @param hProcess The process handle to query the username for. + * @param ppszUser Where to store the pointer to the string containing + * the username on success. Free with RTStrFree(). + */ +RTR3DECL(int) RTProcQueryUsernameA(RTPROCESS hProcess, char **ppszUser); + +#endif /* IN_RING3 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/semaphore.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/semaphore.h @@ -0,0 +1,1409 @@ +/** @file + * IPRT - Semaphore. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_semaphore_h +#define ___iprt_semaphore_h + +#include +#include +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) +# include +#endif + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_sems RTSem - Semaphores + * + * This module implements all kinds of event and mutex semaphores; in addition + * to these, IPRT implements "critical sections", which are fast recursive + * mutexes (see @ref grp_rt_critsect ). C++ users may find @ref grp_rt_cpp_lock + * interesting. + * + * @ingroup grp_rt + * @{ + */ + + +/** @name Generic Semaphore Wait Flags. + * + * @remarks Exactly one of RTSEMWAIT_FLAGS_RELATIVE and + * RTSEMWAIT_FLAGS_ABSOLUTE must be set, unless + * RTSEMWAIT_FLAGS_INDEFINITE is used. + * + * Exactly one of RTSEMWAIT_FLAGS_NANOSECS and + * RTSEMWAIT_FLAGS_MILLISECS must be set, unless + * RTSEMWAIT_FLAGS_INDEFINITE is used. + * + * Exactly one of RTSEMWAIT_FLAGS_RESUME and RTSEMWAIT_FLAGS_NORESUME + * must be set. + * + * The interruptible vs resume stuff is ring-0 vs ring-3 semantics. + * + * @{ */ +/** The timeout is relative. */ +#define RTSEMWAIT_FLAGS_RELATIVE RT_BIT_32(0) +/** The timeout is absolute. */ +#define RTSEMWAIT_FLAGS_ABSOLUTE RT_BIT_32(1) +/** The timeout is specified in nanoseconds. */ +#define RTSEMWAIT_FLAGS_NANOSECS RT_BIT_32(2) +/** The timeout is specified in milliseconds. */ +#define RTSEMWAIT_FLAGS_MILLISECS RT_BIT_32(3) +/** Indefinite wait. + * The relative/absolute and nano-/millisecond flags are ignored. */ +#define RTSEMWAIT_FLAGS_INDEFINITE RT_BIT_32(4) +/** Mask covering the time related bits. */ +#define RTSEMWAIT_FLAGS_TIME_MASK UINT32_C(0x0000001f) + +/** Interruptible wait. */ +#define RTSEMWAIT_FLAGS_INTERRUPTIBLE RT_BIT_32(5) +/** No automatic resume, same as interruptible. */ +#define RTSEMWAIT_FLAGS_NORESUME RTSEMWAIT_FLAGS_INTERRUPTIBLE +/** Uninterruptible wait. */ +#define RTSEMWAIT_FLAGS_UNINTERRUPTIBLE RT_BIT_32(6) +/** Resume on interrupt, same as uninterruptible. */ +#define RTSEMWAIT_FLAGS_RESUME RTSEMWAIT_FLAGS_UNINTERRUPTIBLE + +/** Macro for validate the flags. */ +#define RTSEMWAIT_FLAGS_ARE_VALID(fFlags) \ + ( !((fFlags) & UINT32_C(0xffffff80)) \ + && ( ((fFlags) & RTSEMWAIT_FLAGS_INDEFINITE) \ + ? ( (((fFlags) & UINT32_C(0x20))) ^ (((fFlags) >> 1) & UINT32_C(0x20)) ) == UINT32_C(0x20) \ + : ( (((fFlags) & UINT32_C(0x25))) ^ (((fFlags) >> 1) & UINT32_C(0x25)) ) == UINT32_C(0x25) )) +/** @} */ + + + +/** @defgroup grp_rt_sems_event RTSemEvent - Single Release Event Semaphores + * + * Event semaphores can be used for inter-thread communication when one thread + * wants to notify another thread that something happened. A thread can block + * ("wait") on an event semaphore until it is signalled by another thread; see + * RTSemEventCreate, RTSemEventSignal and RTSemEventWait. + * + * @{ */ + +/** + * Create an event semaphore. + * + * @returns iprt status code. + * @param phEventSem Where to store the handle to the newly created + * event semaphore. + */ +RTDECL(int) RTSemEventCreate(PRTSEMEVENT phEventSem); + +/** + * Create an event semaphore. + * + * @returns iprt status code. + * @param phEventSem Where to store the handle to the newly created + * event semaphore. + * @param fFlags Flags, any combination of the + * RTSEMEVENT_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). Since we + * don't do order checks on event semaphores, the + * use of the class is limited to controlling the + * timeout threshold for deadlock detection. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMEVENT_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** Bootstrap hack for use with certain memory allocator locks only! */ +#define RTSEMEVENT_FLAGS_BOOTSTRAP_HACK UINT32_C(0x00000004) +/** @} */ + +/** + * Destroy an event semaphore. + * + * @returns iprt status code. + * @param hEventSem Handle of the event semaphore. NIL_RTSEMEVENT + * is quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemEventDestroy(RTSEMEVENT hEventSem); + +/** + * Signal an event semaphore. + * + * The event semaphore will be signaled and automatically reset after exactly + * one thread have successfully returned from RTSemEventWait() after + * waiting/polling on that semaphore. + * + * @returns iprt status code. + * @param hEventSem The event semaphore to signal. + * + * @remarks ring-0: This works when preemption is disabled. However it is + * system specific whether it works in interrupt context or with + * interrupts disabled. + */ +RTDECL(int) RTSemEventSignal(RTSEMEVENT hEventSem); + +/** + * Wait for the event semaphore to be signaled, resume on interruption. + * + * This function will resume if the wait is interrupted by an async system event + * (like a unix signal) or similar. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hEventSem The event semaphore to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventWait(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies); + +/** + * Wait for the event semaphore to be signaled, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * @returns iprt status code. + * @param hEventSem The event semaphore to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventWaitNoResume(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies); + +/** + * Extended API for waiting on an event semaphore to be signaled. + * + * @returns IPRT status code. + * @param hEventSem The event semaphore to wait on. + * @param fFlags Combination of RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemEventWaitEx(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemEventWaitEx that tracks the location. + * + * @returns IPRT status code, see RTSemEventWaitEx. + * @param hEventSem The event semaphore to wait on. + * @param fFlags See RTSemEventWaitEx. + * @param uTimeout See RTSemEventWaitEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemEventWaitExDebug(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Gets the best timeout resolution that RTSemEventWaitEx can do. + * + * @returns The resolution in nanoseconds. + */ +RTDECL(uint32_t) RTSemEventGetResolution(void); + +/** + * Sets the signaller thread to one specific thread. + * + * This is only used for validating usage and deadlock detection. When used + * after calls to RTSemEventAddSignaller, the specified thread will be the only + * signalling thread. + * + * @param hEventSem The event semaphore. + * @param hThread The thread that will signal it. Pass + * NIL_RTTHREAD to indicate that there is no + * special signalling thread. + */ +RTDECL(void) RTSemEventSetSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** + * To add more signalling threads. + * + * First call RTSemEventSetSignaller then add further threads with this. + * + * @param hEventSem The event semaphore. + * @param hThread The thread that will signal it. NIL_RTTHREAD is + * not accepted. + */ +RTDECL(void) RTSemEventAddSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** + * To remove a signalling thread. + * + * Reverts work done by RTSemEventAddSignaller and RTSemEventSetSignaller. + * + * @param hEventSem The event semaphore. + * @param hThread A previously added thread. + */ +RTDECL(void) RTSemEventRemoveSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** @} */ + + +/** @defgroup grp_rt_sems_event_multi RTSemEventMulti - Multiple Release Event Semaphores + * + * A variant of @ref grp_rt_sems_event where all threads will be unblocked when + * signalling the semaphore. + * + * @{ */ + +/** + * Creates a multiple release event semaphore. + * + * @returns iprt status code. + * @param phEventMultiSem Where to store the handle to the newly created + * multiple release event semaphore. + */ +RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem); + +/** + * Creates a multiple release event semaphore. + * + * @returns iprt status code. + * @param phEventMultiSem Where to store the handle to the newly created + * multiple release event semaphore. + * @param fFlags Flags, any combination of the + * RTSEMEVENTMULTI_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). Since we + * don't do order checks on event semaphores, the + * use of the class is limited to controlling the + * timeout threshold for deadlock detection. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + +/** + * Destroy an event multi semaphore. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Signal an event multi semaphore. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + * + * @remarks ring-0: This works when preemption is disabled. However it is + * system specific whether it works in interrupt context or with + * interrupts disabled. + */ +RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Resets an event multi semaphore to non-signaled state. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + */ +RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Wait for the event multi semaphore to be signaled, resume on interruption. + * + * This function will resume if the wait is interrupted by an async + * system event (like a unix signal) or similar. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hEventMultiSem The multiple release event semaphore. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies); + +/** + * Wait for the event multi semaphore to be signaled, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + * @param cMillies Number of milliseconds to wait. + * @todo Rename to RTSemEventMultiWaitIntr since it is mainly for + * ring-0 consumption. + */ +RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies); + +/** + * Extended API for waiting on an event semaphore to be signaled. + * + * @returns IPRT status code. + * @param hEventMultiSem The multiple release event semaphore to wait + * on. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemEventMultiWaitEx(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemEventMultiWaitEx that tracks the location. + + * @returns IPRT status code, see RTSemEventMultiWaitEx. + * @param hEventMultiSem The multiple release event semaphore handle. + * @param fFlags See RTSemEventMultiWaitEx. + * @param uTimeout See RTSemEventMultiWaitEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemEventMultiWaitExDebug(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Gets the best timeout resolution that RTSemEventMultiWaitEx can do. + * + * @returns The resolution in nanoseconds. + */ +RTDECL(uint32_t) RTSemEventMultiGetResolution(void); + +/** + * Sets the signaller thread to one specific thread. + * + * This is only used for validating usage and deadlock detection. When used + * after calls to RTSemEventAddSignaller, the specified thread will be the only + * signalling thread. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread The thread that will signal it. Pass + * NIL_RTTHREAD to indicate that there is no + * special signalling thread. + */ +RTDECL(void) RTSemEventMultiSetSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** + * To add more signalling threads. + * + * First call RTSemEventSetSignaller then add further threads with this. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread The thread that will signal it. NIL_RTTHREAD is + * not accepted. + */ +RTDECL(void) RTSemEventMultiAddSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** + * To remove a signalling thread. + * + * Reverts work done by RTSemEventAddSignaller and RTSemEventSetSignaller. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread A previously added thread. + */ +RTDECL(void) RTSemEventMultiRemoveSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** @} */ + + +/** @defgroup grp_rt_sems_mutex RTSemMutex - Mutex semaphores. + * + * Mutex semaphores protect a section of code or data to which access must be + * exclusive. Only one thread can hold access to a critical section at one + * time. See RTSemMutexCreate, RTSemMutexRequest and RTSemMutexRelease. + * + * @remarks These are less efficient than "fast mutexes" and "critical + * sections", which IPRT implements as well; see @ref + * grp_rt_sems_fast_mutex and @ref grp_rt_critsect . + * + * @{ */ + +/** + * Create a mutex semaphore. + * + * @returns iprt status code. + * @param phMutexSem Where to store the mutex semaphore handle. + */ +RTDECL(int) RTSemMutexCreate(PRTSEMMUTEX phMutexSem); + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phMutexSem Where to store the handle to the newly created + * mutex semaphore. + * @param fFlags Flags, any combination of the + * RTSEMMUTEX_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). If NIL, no + * lock order validation will be performed on this + * lock. + * @param uSubClass The sub-class. This is used to define lock + * order within a class. RTLOCKVAL_SUB_CLASS_NONE + * is the recommended value here. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemMutexCreateEx(PRTSEMMUTEX phMutexSem, uint32_t fFlags, RTLOCKVALCLASS hClass, uint32_t uSubClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(5, 6); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMMUTEX_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + + +/** + * Destroy a mutex semaphore. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to destroy. NIL is quietly + * ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemMutexDestroy(RTSEMMUTEX hMutexSem); + +/** + * Changes the lock validator sub-class of the mutex semaphore. + * + * It is recommended to try make sure that nobody is using this semaphore while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param hMutexSem The handle to the mutex semaphore. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTSemMutexSetSubClass(RTSEMMUTEX hMutexSem, uint32_t uSubClass); + +/** + * Request ownership of a mutex semaphore, resume on interruption. + * + * This function will resume if the wait is interrupted by an async + * system event (like a unix signal) or similar. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemMutexRequest(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies); + +/** + * Request ownership of a mutex semaphore, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemMutexRequestNoResume(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemMutexRequest that tracks the location. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemMutexRequestNoResume that tracks the location. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestNoResumeDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request ownership of a mutex semaphore, extended edition. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemMutexRequestEx(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemMutexRequestEx that tracks the location. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param fFlags See RTSemMutexRequestEx. + * @param uTimeout See RTSemMutexRequestEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestExDebug(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release the ownership of a mutex semaphore. + * + * @returns iprt status code. + * @param hMutexSem The mutex to release the ownership of. It goes + * without saying the the calling thread must own + * it. + */ +RTDECL(int) RTSemMutexRelease(RTSEMMUTEX hMutexSem); + +/** + * Checks if the mutex semaphore is owned or not. + * + * @returns true if owned, false if not. + * @param hMutexSem The mutex semaphore. + */ +RTDECL(bool) RTSemMutexIsOwned(RTSEMMUTEX hMutexSem); + +/* Strict build: Remap the two request calls to the debug versions. */ +#if defined(RT_STRICT) && !defined(RTSEMMUTEX_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# ifdef ___iprt_asm_h +# define RTSemMutexRequest(hMutexSem, cMillies) RTSemMutexRequestDebug((hMutexSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemMutexRequestNoResume(hMutexSem, cMillies) RTSemMutexRequestNoResumeDebug((hMutexSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemMutexRequestEx(hMutexSem, fFlags, uTimeout) RTSemMutexRequestExDebug((hMutexSem), (fFlags), (uTimeout), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# else +# define RTSemMutexRequest(hMutexSem, cMillies) RTSemMutexRequestDebug((hMutexSem), (cMillies), 0, RT_SRC_POS) +# define RTSemMutexRequestNoResume(hMutexSem, cMillies) RTSemMutexRequestNoResumeDebug((hMutexSem), (cMillies), 0, RT_SRC_POS) +# define RTSemMutexRequestEx(hMutexSem, fFlags, uTimeout) RTSemMutexRequestExDebug((hMutexSem), (fFlags), (uTimeout), 0, RT_SRC_POS) +# endif +#endif + +/* Strict lock order: Automatically classify locks by init location. */ +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) && !defined(RTSEMMUTEX_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# define RTSemMutexCreate(phMutexSem) \ + RTSemMutexCreateEx((phMutexSem), 0 /*fFlags*/, \ + RTLockValidatorClassForSrcPos(RT_SRC_POS, NULL), \ + RTLOCKVAL_SUB_CLASS_NONE, NULL) +#endif + +/** @} */ + + +/** @defgroup grp_rt_sems_fast_mutex RTSemFastMutex - Fast Mutex Semaphores + * + * Fast mutexes work like regular mutexes in that they allow only a single + * thread access to a critical piece of code or data. As opposed to mutexes, + * they require no syscall if the fast mutex is not held (like critical + * sections). Unlike critical sections however, they are *not* recursive. + * + * @remarks The fast mutexes has sideeffects on IRQL on Windows hosts. So use + * with care and test on windows with driver verifier. + * + * @{ */ + +/** + * Create a fast mutex semaphore. + * + * @returns iprt status code. + * @param phFastMtx Where to store the handle to the newly created + * fast mutex semaphore. + * + * @remarks Fast mutex semaphores are not recursive. + */ +RTDECL(int) RTSemFastMutexCreate(PRTSEMFASTMUTEX phFastMtx); + +/** + * Destroy a fast mutex semaphore. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemFastMutexDestroy(RTSEMFASTMUTEX hFastMtx); + +/** + * Request ownership of a fast mutex semaphore. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. + */ +RTDECL(int) RTSemFastMutexRequest(RTSEMFASTMUTEX hFastMtx); + +/** + * Release the ownership of a fast mutex semaphore. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. It goes + * without saying the the calling thread must own + * it. + */ +RTDECL(int) RTSemFastMutexRelease(RTSEMFASTMUTEX hFastMtx); + +/** @} */ + + +/** @defgroup grp_rt_sems_spin_mutex RTSemSpinMutex - Spinning Mutex Semaphores + * + * A very adaptive variant of mutex semaphore that is tailored for the ring-0 + * logger. + * + * @{ */ + +/** + * Creates a spinning mutex semaphore. + * + * @returns iprt status code. + * @retval VERR_INVALID_PARAMETER on invalid flags. + * @retval VERR_NO_MEMORY if out of memory for the semaphore structure and + * handle. + * + * @param phSpinMtx Where to return the handle to the create semaphore. + * @param fFlags Flags, see RTSEMSPINMUTEX_FLAGS_XXX. + */ +RTDECL(int) RTSemSpinMutexCreate(PRTSEMSPINMUTEX phSpinMtx, uint32_t fFlags); + +/** @name RTSemSpinMutexCreate flags. + * @{ */ +/** Always take the semaphore in a IRQ safe way. + * (In plain words: always disable interrupts.) */ +#define RTSEMSPINMUTEX_FLAGS_IRQ_SAFE RT_BIT_32(0) +/** Mask of valid flags. */ +#define RTSEMSPINMUTEX_FLAGS_VALID_MASK UINT32_C(0x00000001) +/** @} */ + +/** + * Destroys a spinning mutex semaphore. + * + * @returns iprt status code. + * @retval VERR_INVALID_HANDLE (or crash) if the handle is invalid. (NIL will + * not cause this status.) + * + * @param hSpinMtx The semaphore handle. NIL_RTSEMSPINMUTEX is ignored + * quietly (VINF_SUCCESS). + */ +RTDECL(int) RTSemSpinMutexDestroy(RTSEMSPINMUTEX hSpinMtx); + +/** + * Request the spinning mutex semaphore. + * + * This may block if the context we're called in allows this. If not it will + * spin. If called in an interrupt context, we will only spin if the current + * owner isn't interrupted. Also, on some systems it is not always possible to + * wake up blocking threads in all contexts, so, which will either be indicated + * by returning VERR_SEM_BAD_CONTEXT or by temporarily switching the semaphore + * into pure spinlock state. + * + * Preemption will be disabled upon return. IRQs may also be disabled. + * + * @returns iprt status code. + * @retval VERR_SEM_BAD_CONTEXT if the context it's called in isn't suitable + * for releasing it if someone is sleeping on it. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_SEM_NESTED if held by the caller. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexRequest(RTSEMSPINMUTEX hSpinMtx); + +/** + * Like RTSemSpinMutexRequest but it won't block or spin if the semaphore is + * held by someone else. + * + * @returns iprt status code. + * @retval VERR_SEM_BUSY if held by someone else. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_SEM_NESTED if held by the caller. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexTryRequest(RTSEMSPINMUTEX hSpinMtx); + +/** + * Releases the semaphore previously acquired by RTSemSpinMutexRequest or + * RTSemSpinMutexTryRequest. + * + * @returns iprt status code. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_NOT_OWNER if not owner. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted. + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexRelease(RTSEMSPINMUTEX hSpinMtx); + +/** @} */ + + +/** @defgroup grp_rt_sem_rw RTSemRW - Read / Write Semaphores + * + * Read/write semaphores are a fancier version of mutexes in that they grant + * read access to the protected data to several threads at the same time but + * allow only one writer at a time. This can make code scale better at the + * expense of slightly more overhead in mutex management. + * + * @{ */ + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phRWSem Where to store the handle to the newly created + * RW semaphore. + */ +RTDECL(int) RTSemRWCreate(PRTSEMRW phRWSem); + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phRWSem Where to store the handle to the newly created + * RW semaphore. + * @param fFlags Flags, any combination of the RTSEMRW_FLAGS_XXX + * \#defines. + * @param hClass The class (no reference consumed). If NIL, no + * lock order validation will be performed on this + * lock. + * @param uSubClass The sub-class. This is used to define lock + * order within a class. RTLOCKVAL_SUB_CLASS_NONE + * is the recommended value here. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemRWCreateEx(PRTSEMRW phRWSem, uint32_t fFlags, RTLOCKVALCLASS hClass, uint32_t uSubClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(5, 6); + +/** @name RTSemRWCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMRW_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + +/** + * Destroys a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemRWDestroy(RTSEMRW hRWSem); + +/** + * Changes the lock validator sub-class of the read/write semaphore. + * + * It is recommended to try make sure that nobody is using this semaphore while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param hRWSem Handle to the read/write semaphore. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTSemRWSetSubClass(RTSEMRW hRWSem, uint32_t uSubClass); + +/** + * Request read access to a read/write semaphore, resume on interruption + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestRead(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Request read access to a read/write semaphore, return on interruption + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestReadNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemRWRequestRead that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemRWRequestWriteNoResume that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request read access to a read/write semaphore, extended edition. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemRWRequestReadEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout); + + +/** + * Debug version of RTSemRWRequestReadEx that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags See RTSemRWRequestReadEx. + * @param uTimeout See RTSemRWRequestReadEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release read access to a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. It goes + * without saying that caller must own read + * privileges to the semaphore. + */ +RTDECL(int) RTSemRWReleaseRead(RTSEMRW hRWSem); + +/** + * Request write access to a read/write semaphore, resume on interruption. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_DEADLOCK if the caller owned the read lock. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestWrite(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Request write access to a read/write semaphore, return on interruption. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_DEADLOCK if the caller owned the read lock. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestWriteNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemRWRequestWrite that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWrite. + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemRWRequestWriteNoResume that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWriteNoResume. + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request write access to a read/write semaphore, extended edition. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPTED if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_DEADLOCK if the caller owned the read lock. Do not depend on + * this as it is implementation specific. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemRWRequestWriteEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemRWRequestWriteEx that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWriteEx. + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags See RTSemRWRequestWriteEx. + * @param uTimeout See RTSemRWRequestWriteEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release write access to a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. Goes + * without saying that caller must have write + * access to the semaphore. + */ +RTDECL(int) RTSemRWReleaseWrite(RTSEMRW hRWSem); + +/** + * Checks if the caller is the exclusive semaphore owner. + * + * @returns true / false accoringly. + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(bool) RTSemRWIsWriteOwner(RTSEMRW hRWSem); + +/** + * Checks if the caller is one of the read owners of the semaphore. + * + * @note !CAUTION! This API doesn't work reliably if lock validation isn't + * enabled. Meaning, the answer is not trustworhty unless + * RT_LOCK_STRICT or RTSEMRW_STRICT was defined at build time. Also, + * make sure you do not use RTSEMRW_FLAGS_NO_LOCK_VAL when creating + * the semaphore. And finally, if you used a locking class, don't + * disable deadlock detection by setting cMsMinDeadlock to + * RT_INDEFINITE_WAIT. + * + * In short, only use this for assertions. + * + * @returns true if reader, false if not. + * @param hRWSem Handle to the read/write semaphore. + * @param fWannaHear What you'd like to hear when lock validation is + * not available. (For avoiding asserting all over + * the place.) + */ +RTDECL(bool) RTSemRWIsReadOwner(RTSEMRW hRWSem, bool fWannaHear); + +/** + * Gets the write recursion count. + * + * @returns The write recursion count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetWriteRecursion(RTSEMRW hRWSem); + +/** + * Gets the read recursion count of the current writer. + * + * @returns The read recursion count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetWriterReadRecursion(RTSEMRW hRWSem); + +/** + * Gets the current number of reads. + * + * This includes all read recursions, so it might be higher than the number of + * read owners. It does not include reads done by the current writer. + * + * @returns The read count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetReadCount(RTSEMRW hRWSem); + +/* Strict build: Remap the four request calls to the debug versions. */ +#if defined(RT_STRICT) && !defined(RTSEMRW_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# ifdef ___iprt_asm_h +# define RTSemRWRequestRead(hRWSem, cMillies) RTSemRWRequestReadDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestReadNoResume(hRWSem, cMillies) RTSemRWRequestReadNoResumeDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWrite(hRWSem, cMillies) RTSemRWRequestWriteDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWriteNoResume(hRWSem, cMillies) RTSemRWRequestWriteNoResumeDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWriteEx(hRWSem, fFlags, uTimeout) RTSemRWRequestWriteExDebug((hRWSem), (fFlags), (uTimeout), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# else +# define RTSemRWRequestRead(hRWSem, cMillies) RTSemRWRequestReadDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestReadNoResume(hRWSem, cMillies) RTSemRWRequestReadNoResumeDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWrite(hRWSem, cMillies) RTSemRWRequestWriteDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWriteNoResume(hRWSem, cMillies) RTSemRWRequestWriteNoResumeDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWriteEx(hRWSem, fFlags, uTimeout) RTSemRWRequestWriteExDebug((hRWSem), (fFlags), (uTimeout), 0, RT_SRC_POS) +# endif +#endif + +/* Strict lock order: Automatically classify locks by init location. */ +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) && !defined(RTSEMRW_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# define RTSemRWCreate(phSemRW) \ + RTSemRWCreateEx((phSemRW), 0 /*fFlags*/, \ + RTLockValidatorClassForSrcPos(RT_SRC_POS, NULL), \ + RTLOCKVAL_SUB_CLASS_NONE, NULL) +#endif + +/** @} */ + + +/** @defgroup grp_rt_sems_pingpong RTSemPingPong - Ping-Pong Construct + * + * Serialization of a two way communication. + * + * @{ */ + +/** + * Ping-pong speaker + */ +typedef enum RTPINGPONGSPEAKER +{ + /** Not initialized. */ + RTPINGPONGSPEAKER_UNINITIALIZE = 0, + /** Ping is speaking, Pong is waiting. */ + RTPINGPONGSPEAKER_PING, + /** Pong is signaled, Ping is waiting. */ + RTPINGPONGSPEAKER_PONG_SIGNALED, + /** Pong is speaking, Ping is waiting. */ + RTPINGPONGSPEAKER_PONG, + /** Ping is signaled, Pong is waiting. */ + RTPINGPONGSPEAKER_PING_SIGNALED, + /** Hack to ensure that it's at least 32-bits wide. */ + RTPINGPONGSPEAKER_HACK = 0x7fffffff +} RTPINGPONGSPEAKER; + +/** + * Ping-Pong construct. + * + * Two threads, one saying Ping and the other saying Pong. The construct + * makes sure they don't speak out of turn and that they can wait and poll + * on the conversation. + */ +typedef struct RTPINGPONG +{ + /** The semaphore the Ping thread waits on. */ + RTSEMEVENT Ping; + /** The semaphore the Pong thread waits on. */ + RTSEMEVENT Pong; + /** The current speaker. */ + volatile RTPINGPONGSPEAKER enmSpeaker; +#if HC_ARCH_BITS == 64 + /** Padding the structure to become a multiple of sizeof(RTHCPTR). */ + uint32_t u32Padding; +#endif +} RTPINGPONG; +/** Pointer to Ping-Pong construct. */ +typedef RTPINGPONG *PRTPINGPONG; + +/** + * Init a Ping-Pong construct. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure which needs initialization. + */ +RTDECL(int) RTSemPingPongInit(PRTPINGPONG pPP); + +/** + * Deletes a Ping-Pong construct. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure which is to be destroyed. + * (I.e. put into uninitialized state.) + */ +RTDECL(int) RTSemPingPongDelete(PRTPINGPONG pPP); + +/** + * Signals the pong thread in a ping-pong construct. (I.e. sends ping.) + * This is called by the ping thread. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure to ping. + */ +RTDECL(int) RTSemPing(PRTPINGPONG pPP); + +/** + * Signals the ping thread in a ping-pong construct. (I.e. sends pong.) + * This is called by the pong thread. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure to pong. + */ +RTDECL(int) RTSemPong(PRTPINGPONG pPP); + +/** + * Wait function for the ping thread. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param pPP Pointer to the ping-pong structure to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemPingWait(PRTPINGPONG pPP, RTMSINTERVAL cMillies); + +/** + * Wait function for the pong thread. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param pPP Pointer to the ping-pong structure to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemPongWait(PRTPINGPONG pPP, RTMSINTERVAL cMillies); + + +/** + * Checks if the pong thread is speaking. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPongIsSpeaker(). + */ +DECLINLINE(bool) RTSemPingIsSpeaker(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PING; +} + + +/** + * Checks if the pong thread is speaking. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPingIsSpeaker(). + */ +DECLINLINE(bool) RTSemPongIsSpeaker(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PONG; +} + + +/** + * Checks whether the ping thread should wait. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPongShouldWait(). + */ +DECLINLINE(bool) RTSemPingShouldWait(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PONG + || enmSpeaker == RTPINGPONGSPEAKER_PONG_SIGNALED + || enmSpeaker == RTPINGPONGSPEAKER_PING_SIGNALED; +} + + +/** + * Checks whether the pong thread should wait. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPingShouldWait(). + */ +DECLINLINE(bool) RTSemPongShouldWait(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PING + || enmSpeaker == RTPINGPONGSPEAKER_PING_SIGNALED + || enmSpeaker == RTPINGPONGSPEAKER_PONG_SIGNALED; +} + +/** @} */ + + +/** @defgroup grp_rt_sems_xroads RTSemXRoads - Crossroads + * + * The crossroads semaphore is intended to prevent two classes of incompatible + * events from occurring simultaneously, like south/north bound traffic and + * west/east bound traffic at a 4-way junction. + * + * @remarks In order to simplify the implementation, the current flow is always + * given priority. So, it won't work at all well when busy! + * + * @remarks "XRoads" is used as a name because it is briefer than "crossroads" + * and it slightly stresses that is a 4 way crossing to the users of + * American English. + * @{ + */ + +/** + * Creates a crossroads semaphore. + * + * @returns IPRT status code. + * + * @param phXRoads Where to return the handle to the newly created + * crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsCreate(PRTSEMXROADS phXRoads); + +/** + * Destroys a crossroads semaphore. + * + * @returns IPRT status code. + * + * @param hXRoads Handle to the crossroads semaphore that is to be + * destroyed. NIL_RTSEMXROADS is quitetly ignored + * (VINF_SUCCESS). + */ +RTDECL(int) RTSemXRoadsDestroy(RTSEMXROADS hXRoads); + +/** + * Enter the crossroads from the south or north. + * + * (Coupled with RTSemXRoadsNSLeave.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsNSEnter(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads to the north or south. + * + * (Coupled with RTSemXRoadsNSEnter.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsNSLeave(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads from the east or west. + * + * (Coupled with RTSemXRoadsEWLeave.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsEWEnter(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads to the west or east. + * + * (Coupled with RTSemXRoadsEWEnter.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsEWLeave(RTSEMXROADS hXRoads); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/spinlock.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/spinlock.h @@ -0,0 +1,92 @@ +/** @file + * IPRT - Spinlocks. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_spinlock_h +#define ___iprt_spinlock_h + +#include +#include + +RT_C_DECLS_BEGIN + + +/** @defgroup grp_rt_spinlock RTSpinlock - Spinlocks + * @ingroup grp_rt + * @{ + */ + +/** + * Creates a spinlock. + * + * @returns iprt status code. + * @param pSpinlock Where to store the spinlock handle. + * @param fFlags Creation flags, see RTSPINLOCK_FLAGS_XXX. + * @param pszName Spinlock name, for debugging purposes. String lifetime + * must be the same as the lock as it won't be copied. + */ +RTDECL(int) RTSpinlockCreate(PRTSPINLOCK pSpinlock, uint32_t fFlags, const char *pszName); + +/** @name RTSPINLOCK_FLAGS_XXX + * @{ */ +/** Disable interrupts when taking the spinlock, making it interrupt safe + * (sans NMI of course). + * + * This is generally the safest option, though it isn't really required unless + * the data being protect is also accessed from interrupt handler context. */ +#define RTSPINLOCK_FLAGS_INTERRUPT_SAFE RT_BIT(1) +/** No need to disable interrupts, the protect code/data is not used by + * interrupt handlers. */ +#define RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE RT_BIT(2) +/** @} */ + +/** + * Destroys a spinlock created by RTSpinlockCreate(). + * + * @returns iprt status code. + * @param Spinlock Spinlock returned by RTSpinlockCreate(). + */ +RTDECL(int) RTSpinlockDestroy(RTSPINLOCK Spinlock); + +/** + * Acquires the spinlock. + * + * @param Spinlock The spinlock to acquire. + */ +RTDECL(void) RTSpinlockAcquire(RTSPINLOCK Spinlock); + +/** + * Releases the spinlock. + * + * @param Spinlock The spinlock to acquire. + */ +RTDECL(void) RTSpinlockRelease(RTSPINLOCK Spinlock); + + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/stdarg.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/stdarg.h @@ -0,0 +1,59 @@ +/** @file + * IPRT - stdarg.h wrapper. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_stdarg_h +#define ___iprt_stdarg_h + +#ifdef IPRT_NO_CRT +# include +# include +#else +# include +# if defined(RT_OS_FREEBSD) && defined(_KERNEL) +# include +# elif defined(RT_OS_NETBSD) && defined(_KERNEL) +# include +# elif defined(RT_OS_SOLARIS) && defined(_KERNEL) && defined(__GNUC__) +# include +# if __GNUC__ >= 4 /* System headers refers to __builtin_stdarg_start. */ +# define __builtin_stdarg_start __builtin_va_start +# endif +# else +# include +# endif +#endif + +/* + * Older MSC versions doesn't implement va_copy. Newer (12.0+?) ones does + * implement it like below, but for now it's easier to continue like for the + * older ones so we can more easily handle R0, RC and other weird contexts. + */ +#if !defined(va_copy) || defined(_MSC_VER) +# undef va_copy +# define va_copy(dst, src) do { (dst) = (src); } while (0) /** @todo check AMD64 */ +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/stdint.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/stdint.h @@ -0,0 +1,284 @@ +/** @file + * IPRT - stdint.h wrapper (for backlevel compilers like MSC). + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef __iprt_stdint_h +#define __iprt_stdint_h + +#include + + +/* + * Use the stdint.h on systems that have one. + */ +#if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \ + && !(defined(RT_OS_FREEBSD) && defined(_KERNEL)) \ + && !(defined(RT_OS_NETBSD) && defined(_KERNEL)) \ + && RT_MSC_PREREQ_EX(RT_MSC_VER_VS2010, 1 /*non-msc*/) \ + && !defined(__IBMC__) \ + && !defined(__IBMCPP__) \ + && !defined(IPRT_NO_CRT) \ + && !defined(IPRT_DONT_USE_SYSTEM_STDINT_H) \ + && !defined(DOXYGEN_RUNNING) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4668) +# endif +# include +# ifdef _MSC_VER +# pragma warning(pop) +# endif + +# if defined(RT_OS_DARWIN) && defined(KERNEL) && defined(RT_ARCH_AMD64) + /* + * Kludge to fix the incorrect 32-bit constant macros in + * Kernel.framework/Headers/stdin.h. uint32_t and int32_t are + * int not long as these macros use, which is significant when + * targeting AMD64. (10a222) + */ +# undef INT32_C +# define INT32_C(Value) (Value) +# undef UINT32_C +# define UINT32_C(Value) (Value ## U) +# endif /* 64-bit darwin kludge. */ + +#elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# include + +#elif defined(RT_OS_NETBSD) && defined(_KERNEL) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# include + +#else /* No system stdint.h */ + +/* + * Define the types we use. + * The linux kernel defines all these in linux/types.h, so skip it. + */ +# if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \ + || defined(IPRT_NO_CRT) \ + || defined(IPRT_DONT_USE_SYSTEM_STDINT_H) \ + || defined(DOXGEN_RUNNING) + + /* Simplify the [u]int64_t type detection mess. */ +# undef IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# ifdef __IBMCPP__ +# if __IBMCPP__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__)) +# define IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# endif +# endif +# ifdef __IBMC__ +# if __IBMC__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__)) +# define IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# endif +# endif + + /* x-bit types */ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# if !defined(_INT8_T_DECLARED) && !defined(_INT8_T) +typedef signed char int8_t; +# endif +# if !defined(_UINT8_T_DECLARED) && !defined(_UINT8_T) +typedef unsigned char uint8_t; +# endif +# if !defined(_INT16_T_DECLARED) && !defined(_INT16_T) +typedef signed short int16_t; +# endif +# if !defined(_UINT16_T_DECLARED) && !defined(_UINT16_T) +typedef unsigned short uint16_t; +# endif +# if !defined(_INT32_T_DECLARED) && !defined(_INT32_T) +# if ARCH_BITS != 16 +typedef signed int int32_t; +# else +typedef signed long int32_t; +# endif +# endif +# if !defined(_UINT32_T_DECLARED) && !defined(_UINT32_T) +# if ARCH_BITS != 16 +typedef unsigned int uint32_t; +# else +typedef unsigned long uint32_t; +# endif +# endif +# if defined(_MSC_VER) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed _int64 int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned _int64 uint64_t; +# endif +# elif defined(__WATCOMC__) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed __int64 int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned __int64 uint64_t; +# endif +# elif defined(IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef struct { uint32_t lo; int32_t hi; } int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef struct { uint32_t lo; uint32_t hi; } uint64_t; +# endif +# else /* Use long long for 64-bit types */ +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed long long int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned long long uint64_t; +# endif +# endif + + /* max integer types */ +# if !defined(_INTMAX_T_DECLARED) && !defined(_INTMAX_T) +typedef int64_t intmax_t; +# endif +# if !defined(_UINTMAX_T_DECLARED) && !defined(_UINTMAX_T) +typedef uint64_t uintmax_t; +# endif + +# else +# error "PORTME: Add architecture. Don't forget to check the [U]INTx_C() and [U]INTMAX_MIN/MAX macros." +# endif + +# endif /* !linux kernel or stuff */ + + /* pointer <-> integer types */ +# if !defined(_MSC_VER) || defined(DOXYGEN_RUNNING) +# if ARCH_BITS == 32 \ + || defined(RT_OS_LINUX) \ + || defined(RT_OS_FREEBSD) +# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T) +typedef signed long intptr_t; +# endif +# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T) +typedef unsigned long uintptr_t; +# endif +# else +# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T) +typedef int64_t intptr_t; +# endif +# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T) +typedef uint64_t uintptr_t; +# endif +# endif +# endif /* !_MSC_VER */ + +#endif /* no system stdint.h */ + + +/* + * Make sure the [U]INTx_C(c) macros are present. + * For In C++ source the system stdint.h may have skipped these if it was + * included before we managed to define __STDC_CONSTANT_MACROS. (Kludge alert!) + */ +#if !defined(INT8_C) \ + || !defined(INT16_C) \ + || !defined(INT32_C) \ + || !defined(INT64_C) \ + || !defined(INTMAX_C) \ + || !defined(UINT8_C) \ + || !defined(UINT16_C) \ + || !defined(UINT32_C) \ + || !defined(UINT64_C) \ + || !defined(UINTMAX_C) +# define INT8_C(Value) (Value) +# define INT16_C(Value) (Value) +# define UINT8_C(Value) (Value) +# define UINT16_C(Value) (Value) +# if ARCH_BITS != 16 +# define INT32_C(Value) (Value) +# define UINT32_C(Value) (Value ## U) +# define INT64_C(Value) (Value ## LL) +# define UINT64_C(Value) (Value ## ULL) +# else +# define INT32_C(Value) (Value ## L) +# define UINT32_C(Value) (Value ## UL) +# define INT64_C(Value) (Value ## LL) +# define UINT64_C(Value) (Value ## ULL) +# endif +# define INTMAX_C(Value) INT64_C(Value) +# define UINTMAX_C(Value) UINT64_C(Value) +#endif + + +/* + * Make sure the INTx_MIN and [U]INTx_MAX macros are present. + * For In C++ source the system stdint.h may have skipped these if it was + * included before we managed to define __STDC_LIMIT_MACROS. (Kludge alert!) + */ +#if !defined(INT8_MIN) \ + || !defined(INT16_MIN) \ + || !defined(INT32_MIN) \ + || !defined(INT64_MIN) \ + || !defined(INT8_MAX) \ + || !defined(INT16_MAX) \ + || !defined(INT32_MAX) \ + || !defined(INT64_MAX) \ + || !defined(UINT8_MAX) \ + || !defined(UINT16_MAX) \ + || !defined(UINT32_MAX) \ + || !defined(UINT64_MAX) +# define INT8_MIN (INT8_C(-0x7f) - 1) +# define INT16_MIN (INT16_C(-0x7fff) - 1) +# define INT32_MIN (INT32_C(-0x7fffffff) - 1) +# define INT64_MIN (INT64_C(-0x7fffffffffffffff) - 1) +# define INT8_MAX INT8_C(0x7f) +# define INT16_MAX INT16_C(0x7fff) +# define INT32_MAX INT32_C(0x7fffffff) +# define INT64_MAX INT64_C(0x7fffffffffffffff) +# define UINT8_MAX UINT8_C(0xff) +# define UINT16_MAX UINT16_C(0xffff) +# define UINT32_MAX UINT32_C(0xffffffff) +# define UINT64_MAX UINT64_C(0xffffffffffffffff) + +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# define UINTMAX_MAX UINT64_MAX +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/string.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/string.h @@ -0,0 +1,3243 @@ +/** @file + * IPRT - String Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_string_h +#define ___iprt_string_h + +#include +#include +#include +#include +#include /* for VINF_SUCCESS */ +#if defined(RT_OS_LINUX) && defined(__KERNEL__) + /* no C++ hacks ('new' etc) here anymore! */ +# include + +#elif defined(IN_XF86_MODULE) && !defined(NO_ANSIC) + RT_C_DECLS_BEGIN +# include "xf86_ansic.h" + RT_C_DECLS_END + +#elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + RT_C_DECLS_BEGIN +# include + RT_C_DECLS_END + +#elif defined(RT_OS_NETBSD) && defined(_KERNEL) + RT_C_DECLS_BEGIN +# include + RT_C_DECLS_END + +#elif defined(RT_OS_SOLARIS) && defined(_KERNEL) + /* + * Same case as with FreeBSD kernel: + * The string.h stuff clashes with sys/system.h + * ffs = find first set bit. + */ +# define ffs ffs_string_h +# include +# undef ffs +# undef strpbrk + +#else +# include +#endif + +/* For the time being: */ +#include +#include + +/* + * Supply prototypes for standard string functions provided by + * IPRT instead of the operating environment. + */ +#if defined(RT_OS_DARWIN) && defined(KERNEL) +RT_C_DECLS_BEGIN +void *memchr(const void *pv, int ch, size_t cb); +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if defined(RT_OS_FREEBSD) && defined(_KERNEL) +RT_C_DECLS_BEGIN +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if defined(RT_OS_NETBSD) && defined(_KERNEL) +RT_C_DECLS_BEGIN +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if (!defined(RT_OS_LINUX) || !defined(_GNU_SOURCE)) && !defined(RT_OS_FREEBSD) && !defined(RT_OS_NETBSD) +RT_C_DECLS_BEGIN +void *memrchr(const char *pv, int ch, size_t cb); +RT_C_DECLS_END +#endif + + +/** @def RT_USE_RTC_3629 + * When defined the UTF-8 range will stop at 0x10ffff. If not defined, the + * range stops at 0x7fffffff. + * @remarks Must be defined both when building and using the IPRT. */ +#ifdef DOXYGEN_RUNNING +# define RT_USE_RTC_3629 +#endif + + +/** + * Byte zero the specified object. + * + * This will use sizeof(Obj) to figure the size and will call memset, bzero + * or some compiler intrinsic to perform the actual zeroing. + * + * @param Obj The object to zero. Make sure to dereference pointers. + * + * @remarks Because the macro may use memset it has been placed in string.h + * instead of cdefs.h to avoid build issues because someone forgot + * to include this header. + * + * @ingroup grp_rt_cdefs + */ +#define RT_ZERO(Obj) RT_BZERO(&(Obj), sizeof(Obj)) + +/** + * Byte zero the specified memory area. + * + * This will call memset, bzero or some compiler intrinsic to clear the + * specified bytes of memory. + * + * @param pv Pointer to the memory. + * @param cb The number of bytes to clear. Please, don't pass 0. + * + * @remarks Because the macro may use memset it has been placed in string.h + * instead of cdefs.h to avoid build issues because someone forgot + * to include this header. + * + * @ingroup grp_rt_cdefs + */ +#define RT_BZERO(pv, cb) do { memset((pv), 0, cb); } while (0) + + + +/** @defgroup grp_rt_str RTStr - String Manipulation + * Mostly UTF-8 related helpers where the standard string functions won't do. + * @ingroup grp_rt + * @{ + */ + +RT_C_DECLS_BEGIN + + +/** + * The maximum string length. + */ +#define RTSTR_MAX (~(size_t)0) + + +/** @def RTSTR_TAG + * The default allocation tag used by the RTStr allocation APIs. + * + * When not defined before the inclusion of iprt/string.h, this will default to + * the pointer to the current file name. The string API will make of use of + * this as pointer to a volatile but read-only string. + */ +#if !defined(RTSTR_TAG) || defined(DOXYGEN_RUNNING) +# define RTSTR_TAG (__FILE__) +#endif + + +#ifdef IN_RING3 + +/** + * Allocates tmp buffer with default tag, translates pszString from UTF8 to + * current codepage. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated native CP string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to convert. + */ +#define RTStrUtf8ToCurrentCP(ppszString, pszString) RTStrUtf8ToCurrentCPTag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates tmp buffer with custom tag, translates pszString from UTF8 to + * current codepage. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated native CP string. + * The returned pointer must be freed using + * RTStrFree()., const char *pszTag + * @param pszString UTF-8 string to convert. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR3DECL(int) RTStrUtf8ToCurrentCPTag(char **ppszString, const char *pszString, const char *pszTag); + +/** + * Allocates tmp buffer, translates pszString from current codepage to UTF-8. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString Native string to convert. + */ +#define RTStrCurrentCPToUtf8(ppszString, pszString) RTStrCurrentCPToUtf8Tag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates tmp buffer, translates pszString from current codepage to UTF-8. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString Native string to convert. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR3DECL(int) RTStrCurrentCPToUtf8Tag(char **ppszString, const char *pszString, const char *pszTag); + +#endif /* IN_RING3 */ + +/** + * Free string allocated by any of the non-UCS-2 string functions. + * + * @returns iprt status code. + * @param pszString Pointer to buffer with string to free. + * NULL is accepted. + */ +RTDECL(void) RTStrFree(char *pszString); + +/** + * Allocates a new copy of the given UTF-8 string (default tag). + * + * @returns Pointer to the allocated UTF-8 string. + * @param pszString UTF-8 string to duplicate. + */ +#define RTStrDup(pszString) RTStrDupTag((pszString), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 string (custom tag). + * + * @returns Pointer to the allocated UTF-8 string. + * @param pszString UTF-8 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrDupTag(const char *pszString, const char *pszTag); + +/** + * Allocates a new copy of the given UTF-8 string (default tag). + * + * @returns iprt status code. + * @param ppszString Receives pointer of the allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to duplicate. + */ +#define RTStrDupEx(ppszString, pszString) RTStrDupExTag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 string (custom tag). + * + * @returns iprt status code. + * @param ppszString Receives pointer of the allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrDupExTag(char **ppszString, const char *pszString, const char *pszTag); + +/** + * Allocates a new copy of the given UTF-8 substring (default tag). + * + * @returns Pointer to the allocated UTF-8 substring. + * @param pszString UTF-8 string to duplicate. + * @param cchMax The max number of chars to duplicate, not counting + * the terminator. + */ +#define RTStrDupN(pszString, cchMax) RTStrDupNTag((pszString), (cchMax), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 substring (custom tag). + * + * @returns Pointer to the allocated UTF-8 substring. + * @param pszString UTF-8 string to duplicate. + * @param cchMax The max number of chars to duplicate, not counting + * the terminator. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrDupNTag(const char *pszString, size_t cchMax, const char *pszTag); + +/** + * Appends a string onto an existing IPRT allocated string (default tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. NULL and empty strings + * are quietly ignored. + */ +#define RTStrAAppend(ppsz, pszAppend) RTStrAAppendTag((ppsz), (pszAppend), RTSTR_TAG) + +/** + * Appends a string onto an existing IPRT allocated string (custom tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. NULL and empty strings + * are quietly ignored. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendTag(char **ppsz, const char *pszAppend, const char *pszTag); + +/** + * Appends N bytes from a strings onto an existing IPRT allocated string + * (default tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. Can be NULL if cchAppend + * is NULL. + * @param cchAppend The number of chars (not code points) to append + * from pszAppend. Must not be more than + * @a pszAppend contains, except for the special + * value RTSTR_MAX that can be used to indicate all + * of @a pszAppend without having to strlen it. + */ +#define RTStrAAppendN(ppsz, pszAppend, cchAppend) RTStrAAppendNTag((ppsz), (pszAppend), (cchAppend), RTSTR_TAG) + +/** + * Appends N bytes from a strings onto an existing IPRT allocated string (custom + * tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. Can be NULL if cchAppend + * is NULL. + * @param cchAppend The number of chars (not code points) to append + * from pszAppend. Must not be more than + * @a pszAppend contains, except for the special + * value RTSTR_MAX that can be used to indicate all + * of @a pszAppend without having to strlen it. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendNTag(char **ppsz, const char *pszAppend, size_t cchAppend, const char *pszTag); + +/** + * Appends one or more strings onto an existing IPRT allocated string. + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +#define RTStrAAppendExNV(ppsz, cPairs, va) RTStrAAppendExNVTag((ppsz), (cPairs), (va), RTSTR_TAG) + +/** + * Appends one or more strings onto an existing IPRT allocated string. + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendExNVTag(char **ppsz, size_t cPairs, va_list va, const char *pszTag); + +/** + * Appends one or more strings onto an existing IPRT allocated string + * (untagged). + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +DECLINLINE(int) RTStrAAppendExN(char **ppsz, size_t cPairs, ...) +{ + int rc; + va_list va; + va_start(va, cPairs); + rc = RTStrAAppendExNVTag(ppsz, cPairs, va, RTSTR_TAG); + va_end(va); + return rc; +} + +/** + * Appends one or more strings onto an existing IPRT allocated string (custom + * tag). + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszTag Allocation tag used for statistics and such. + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +DECLINLINE(int) RTStrAAppendExNTag(char **ppsz, const char *pszTag, size_t cPairs, ...) +{ + int rc; + va_list va; + va_start(va, cPairs); + rc = RTStrAAppendExNVTag(ppsz, cPairs, va, pszTag); + va_end(va); + return rc; +} + +/** + * Truncates an IPRT allocated string (default tag). + * + * @retval VINF_SUCCESS. + * @retval VERR_OUT_OF_RANGE if cchNew is too long. Nothing is done. + * + * @param ppsz Pointer to the string pointer. The string + * pointer can be NULL if @a cchNew is 0, no change + * is made then. If we actually reallocate the + * string, the string pointer might be changed by + * this call. (In/Out) + * @param cchNew The new string length (excluding the + * terminator). The string must be at least this + * long or we'll return VERR_OUT_OF_RANGE and + * assert on you. + */ +#define RTStrATruncate(ppsz, cchNew) RTStrATruncateTag((ppsz), (cchNew), RTSTR_TAG) + +/** + * Truncates an IPRT allocated string. + * + * @retval VINF_SUCCESS. + * @retval VERR_OUT_OF_RANGE if cchNew is too long. Nothing is done. + * + * @param ppsz Pointer to the string pointer. The string + * pointer can be NULL if @a cchNew is 0, no change + * is made then. If we actually reallocate the + * string, the string pointer might be changed by + * this call. (In/Out) + * @param cchNew The new string length (excluding the + * terminator). The string must be at least this + * long or we'll return VERR_OUT_OF_RANGE and + * assert on you. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrATruncateTag(char **ppsz, size_t cchNew, const char *pszTag); + +/** + * Allocates memory for string storage (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated string. The first byte is always set + * to the string terminator char, the contents of the remainder of the + * memory is undefined. The string must be freed by calling RTStrFree. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_STR_MEMORY and not VERR_NO_MEMORY. Also consider + * RTStrAllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + */ +#define RTStrAlloc(cb) RTStrAllocTag((cb), RTSTR_TAG) + +/** + * Allocates memory for string storage (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated string. The first byte is always set + * to the string terminator char, the contents of the remainder of the + * memory is undefined. The string must be freed by calling RTStrFree. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_STR_MEMORY and not VERR_NO_MEMORY. Also consider + * RTStrAllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrAllocTag(size_t cb, const char *pszTag); + +/** + * Allocates memory for string storage, with status code (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY + * + * @param ppsz Where to return the allocated string. This will + * be set to NULL on failure. On success, the + * returned memory will always start with a + * terminator char so that it is considered a valid + * C string, the contents of rest of the memory is + * undefined. + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + */ +#define RTStrAllocEx(ppsz, cb) RTStrAllocExTag((ppsz), (cb), RTSTR_TAG) + +/** + * Allocates memory for string storage, with status code (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY + * + * @param ppsz Where to return the allocated string. This will + * be set to NULL on failure. On success, the + * returned memory will always start with a + * terminator char so that it is considered a valid + * C string, the contents of rest of the memory is + * undefined. + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAllocExTag(char **ppsz, size_t cb, const char *pszTag); + +/** + * Reallocates the specified string (default tag). + * + * You should normally not have use this function, except perhaps to truncate a + * really long string you've got from some IPRT string API, but then you should + * use RTStrATruncate. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last byte set to the terminator + * character so that when used for string + * truncation the result will be a valid C string + * (your job to keep it a valid UTF-8 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first byte set to the terminator char + * so it will be a valid C string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTStrFree and @a *ppsz will be set to NULL. + * + * When not zero, this will be the new size of the + * memory backing the string, i.e. it includes the + * terminator char. + */ +#define RTStrRealloc(ppsz, cbNew) RTStrReallocTag((ppsz), (cbNew), RTSTR_TAG) + +/** + * Reallocates the specified string (custom tag). + * + * You should normally not have use this function, except perhaps to truncate a + * really long string you've got from some IPRT string API, but then you should + * use RTStrATruncate. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last byte set to the terminator + * character so that when used for string + * truncation the result will be a valid C string + * (your job to keep it a valid UTF-8 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first byte set to the terminator char + * so it will be a valid C string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTStrFree and @a *ppsz will be set to NULL. + * + * When not zero, this will be the new size of the + * memory backing the string, i.e. it includes the + * terminator char. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrReallocTag(char **ppsz, size_t cbNew, const char *pszTag); + +/** + * Validates the UTF-8 encoding of the string. + * + * @returns iprt status code. + * @param psz The string. + */ +RTDECL(int) RTStrValidateEncoding(const char *psz); + +/** @name Flags for RTStrValidateEncodingEx and RTUtf16ValidateEncodingEx + * @{ + */ +/** Check that the string is zero terminated within the given size. + * VERR_BUFFER_OVERFLOW will be returned if the check fails. */ +#define RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED RT_BIT_32(0) +/** Check that the string is exactly the given length. + * If it terminates early, VERR_BUFFER_UNDERFLOW will be returned. When used + * together with RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED, the given length must + * include the terminator or VERR_BUFFER_OVERFLOW will be returned. */ +#define RTSTR_VALIDATE_ENCODING_EXACT_LENGTH RT_BIT_32(1) +/** @} */ + +/** + * Validates the UTF-8 encoding of the string. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length (/ size). Use RTSTR_MAX to + * process the entire string. + * @param fFlags Combination of RTSTR_VALIDATE_ENCODING_XXX flags. + */ +RTDECL(int) RTStrValidateEncodingEx(const char *psz, size_t cch, uint32_t fFlags); + +/** + * Checks if the UTF-8 encoding is valid. + * + * @returns true / false. + * @param psz The string. + */ +RTDECL(bool) RTStrIsValidEncoding(const char *psz); + +/** + * Purge all bad UTF-8 encoding in the string, replacing it with '?'. + * + * @returns The number of bad characters (0 if nothing was done). + * @param psz The string to purge. + */ +RTDECL(size_t) RTStrPurgeEncoding(char *psz); + +/** + * Sanitizes a (valid) UTF-8 string by replacing all characters outside a white + * list in-place by an ASCII replacement character. + * + * Multi-byte characters will be replaced byte by byte. + * + * @returns The number of code points replaced. In the case of an incorrectly + * encoded string -1 will be returned, and the string is not completely + * processed. In the case of puszValidPairs having an odd number of + * code points, -1 will be also return but without any modification to + * the string. + * @param psz The string to sanitise. + * @param puszValidPairs A zero-terminated array of pairs of Unicode points. + * Each pair is the start and end point of a range, + * and the union of these ranges forms the white list. + * @param chReplacement The ASCII replacement character. + */ +RTDECL(ssize_t) RTStrPurgeComplementSet(char *psz, PCRTUNICP puszValidPairs, char chReplacement); + +/** + * Gets the number of code points the string is made up of, excluding + * the terminator. + * + * + * @returns Number of code points (RTUNICP). + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrUniLen(const char *psz); + +/** + * Gets the number of code points the string is made up of, excluding + * the terminator. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the entire string. + * @param pcuc Where to store the code point count. + * This is undefined on failure. + */ +RTDECL(int) RTStrUniLenEx(const char *psz, size_t cch, size_t *pcuc); + +/** + * Translate a UTF-8 string into an unicode string (i.e. RTUNICPs), allocating the string buffer. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppUniString Receives pointer to the allocated unicode string. + * The returned string must be freed using RTUniFree(). + */ +RTDECL(int) RTStrToUni(const char *pszString, PRTUNICP *ppUniString); + +/** + * Translates pszString from UTF-8 to an array of code points, allocating the result + * array if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppaCps If cCps is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppusz is NULL or cCps is zero a buffer of at least cCps items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cCps The number of code points in the unicode string. This includes the terminator. + * @param pcCps Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +RTDECL(int) RTStrToUniEx(const char *pszString, size_t cchString, PRTUNICP *ppaCps, size_t cCps, size_t *pcCps); + +/** + * Calculates the length of the string in RTUTF16 items. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTStrToUtf16Ex of the correct size. For most + * other purposes RTStrCalcUtf16LenEx() should be used. + * + * @returns Number of RTUTF16 items. + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrCalcUtf16Len(const char *psz); + +/** + * Calculates the length of the string in RTUTF16 items. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the entire string. + * @param pcwc Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTStrCalcUtf16LenEx(const char *psz, size_t cch, size_t *pcwc); + +/** + * Translate a UTF-8 string into a UTF-16 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. + * The returned string must be freed using RTUtf16Free(). + */ +#define RTStrToUtf16(pszString, ppwszString) RTStrToUtf16Tag((pszString), (ppwszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a UTF-16 allocating the result buffer (custom + * tag). + * + * This differs from RTStrToUtf16 in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. + * The returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16Tag(const char *pszString, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translate a UTF-8 string into a UTF-16BE allocating the result buffer + * (default tag). + * + * This differs from RTStrToUtf16Tag in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16BE string. + * The returned string must be freed using RTUtf16Free(). + */ +#define RTStrToUtf16Big(pszString, ppwszString) RTStrToUtf16BigTag((pszString), (ppwszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a UTF-16BE allocating the result buffer (custom + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16BE string. + * The returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16BigTag(const char *pszString, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translates pszString from UTF-8 to UTF-16, allocating the result buffer if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToUtf16Ex(pszString, cchString, ppwsz, cwc, pcwc) \ + RTStrToUtf16ExTag((pszString), (cchString), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to UTF-16, allocating the result buffer if + * requested (custom tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16ExTag(const char *pszString, size_t cchString, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + + +/** + * Translates pszString from UTF-8 to UTF-16BE, allocating the result buffer if requested. + * + * This differs from RTStrToUtf16Ex in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToUtf16BigEx(pszString, cchString, ppwsz, cwc, pcwc) \ + RTStrToUtf16BigExTag((pszString), (cchString), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to UTF-16BE, allocating the result buffer if + * requested (custom tag). + * + * This differs from RTStrToUtf16ExTag in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16BigExTag(const char *pszString, size_t cchString, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + + +/** + * Calculates the length of the string in Latin-1 characters. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings as well as string with codepoints outside the latin-1 range will be + * rejected. The primary purpose of this function is to help allocate buffers + * for RTStrToLatin1Ex of the correct size. For most other purposes + * RTStrCalcLatin1LenEx() should be used. + * + * @returns Number of Latin-1 characters. + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrCalcLatin1Len(const char *psz); + +/** + * Calculates the length of the string in Latin-1 characters. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings as well as string with codepoints outside the latin-1 range will be + * rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTStrCalcLatin1LenEx(const char *psz, size_t cch, size_t *pcch); + +/** + * Translate a UTF-8 string into a Latin-1 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppszString Receives pointer to the allocated Latin-1 string. + * The returned string must be freed using RTStrFree(). + */ +#define RTStrToLatin1(pszString, ppszString) RTStrToLatin1Tag((pszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a Latin-1 allocating the result buffer (custom + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppszString Receives pointer to the allocated Latin-1 string. + * The returned string must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToLatin1Tag(const char *pszString, char **ppszString, const char *pszTag); + +/** + * Translates pszString from UTF-8 to Latin-1, allocating the result buffer if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. + * The conversion stop when it reaches cchString or + * the string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch items will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in bytes. This includes the + * terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToLatin1Ex(pszString, cchString, ppsz, cch, pcch) \ + RTStrToLatin1ExTag((pszString), (cchString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to Latin1, allocating the result buffer if + * requested (custom tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. + * The conversion stop when it reaches cchString or + * the string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch items will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in bytes. This includes the + * terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToLatin1ExTag(const char *pszString, size_t cchString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param psz The string. + */ +RTDECL(RTUNICP) RTStrGetCpInternal(const char *psz); + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code + * @returns VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @param ppsz The string cursor. + * This is advanced one character forward on failure. + * @param pCp Where to store the unicode code point. + * Stores RTUNICP_INVALID if the encoding is invalid. + */ +RTDECL(int) RTStrGetCpExInternal(const char **ppsz, PRTUNICP pCp); + +/** + * Get the unicode code point at the given string position for a string of a + * given length. + * + * @returns iprt status code + * @retval VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppsz The string. + * @param pcch Pointer to the length of the string. This will be + * decremented by the size of the code point. + * @param pCp Where to store the unicode code point. + * Stores RTUNICP_INVALID if the encoding is invalid. + */ +RTDECL(int) RTStrGetCpNExInternal(const char **ppsz, size_t *pcch, PRTUNICP pCp); + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param psz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-8 range. + * + * @remark This is a worker function for RTStrPutCp(). + * + */ +RTDECL(char *) RTStrPutCpInternal(char *psz, RTUNICP CodePoint); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param psz The string. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpInternal(). + */ +DECLINLINE(RTUNICP) RTStrGetCp(const char *psz) +{ + const unsigned char uch = *(const unsigned char *)psz; + if (!(uch & RT_BIT(7))) + return uch; + return RTStrGetCpInternal(psz); +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * This is advanced one character forward on failure. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpExInternal(). + */ +DECLINLINE(int) RTStrGetCpEx(const char **ppsz, PRTUNICP pCp) +{ + const unsigned char uch = **(const unsigned char **)ppsz; + if (!(uch & RT_BIT(7))) + { + (*ppsz)++; + *pCp = uch; + return VINF_SUCCESS; + } + return RTStrGetCpExInternal(ppsz, pCp); +} + +/** + * Get the unicode code point at the given string position for a string of a + * given maximum length. + * + * @returns iprt status code. + * @retval VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pcch Pointer to the maximum string length. This will be + * decremented by the size of the code point found. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpNExInternal(). + */ +DECLINLINE(int) RTStrGetCpNEx(const char **ppsz, size_t *pcch, PRTUNICP pCp) +{ + if (RT_LIKELY(*pcch != 0)) + { + const unsigned char uch = **(const unsigned char **)ppsz; + if (!(uch & RT_BIT(7))) + { + (*ppsz)++; + (*pcch)--; + *pCp = uch; + return VINF_SUCCESS; + } + } + return RTStrGetCpNExInternal(ppsz, pcch, pCp); +} + +/** + * Get the UTF-8 size in characters of a given Unicode code point. + * + * The code point is expected to be a valid Unicode one, but not necessarily in + * the range supported by UTF-8. + * + * @returns The number of chars (bytes) required to encode the code point, or + * zero if there is no UTF-8 encoding. + * @param CodePoint The unicode code point. + */ +DECLINLINE(size_t) RTStrCpSize(RTUNICP CodePoint) +{ + if (CodePoint < 0x00000080) + return 1; + if (CodePoint < 0x00000800) + return 2; + if (CodePoint < 0x00010000) + return 3; +#ifdef RT_USE_RTC_3629 + if (CodePoint < 0x00011000) + return 4; +#else + if (CodePoint < 0x00200000) + return 4; + if (CodePoint < 0x04000000) + return 5; + if (CodePoint < 0x7fffffff) + return 6; +#endif + return 0; +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param psz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-8 range. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrPutCpInternal(). + */ +DECLINLINE(char *) RTStrPutCp(char *psz, RTUNICP CodePoint) +{ + if (CodePoint < 0x80) + { + *psz++ = (unsigned char)CodePoint; + return psz; + } + return RTStrPutCpInternal(psz, CodePoint); +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param psz Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(char *) RTStrNextCp(const char *psz) +{ + RTUNICP Cp; + RTStrGetCpEx(&psz, &Cp); + return (char *)psz; +} + +/** + * Skips back to the previous code point. + * + * @returns Pointer to the char before the current code point. + * @returns pszStart on failure. + * @param pszStart Pointer to the start of the string. + * @param psz Pointer to the current code point. + */ +RTDECL(char *) RTStrPrevCp(const char *pszStart, const char *psz); + + +/** @page pg_rt_str_format The IPRT Format Strings + * + * IPRT implements most of the commonly used format types and flags with the + * exception of floating point which is completely missing. In addition IPRT + * provides a number of IPRT specific format types for the IPRT typedefs and + * other useful things. Note that several of these extensions are similar to + * \%p and doesn't care much if you try add formating flags/width/precision. + * + * + * Group 0a, The commonly used format types: + * - \%s - Takes a pointer to a zero terminated string (UTF-8) and + * prints it with the optionally adjustment (width, -) and + * length restriction (precision). + * - \%ls - Same as \%s except that the input is UTF-16 (output UTF-8). + * - \%Ls - Same as \%s except that the input is UCS-32 (output UTF-8). + * - \%S - Same as \%s, used to convert to current codeset but this is + * now done by the streams code. Deprecated, use \%s. + * - \%lS - Ditto. Deprecated, use \%ls. + * - \%LS - Ditto. Deprecated, use \%Ls. + * - \%c - Takes a char and prints it. + * - \%d - Takes a signed integer and prints it as decimal. Thousand + * separator (\'), zero padding (0), adjustment (-+), width, + * precision + * - \%i - Same as \%d. + * - \%u - Takes an unsigned integer and prints it as decimal. Thousand + * separator (\'), zero padding (0), adjustment (-+), width, + * precision + * - \%x - Takes an unsigned integer and prints it as lowercased + * hexadecimal. The special hash (\#) flag causes a '0x' + * prefixed to be printed. Zero padding (0), adjustment (-+), + * width, precision. + * - \%X - Same as \%x except that it is uppercased. + * - \%o - Takes an unsigned (?) integer and prints it as octal. Zero + * padding (0), adjustment (-+), width, precision. + * - \%p - Takes a pointer (void technically) and prints it. Zero + * padding (0), adjustment (-+), width, precision. + * + * The \%d, \%i, \%u, \%x, \%X and \%o format types support the following + * argument type specifiers: + * - \%ll - long long (uint64_t). + * - \%L - long long (uint64_t). + * - \%l - long (uint32_t, uint64_t) + * - \%h - short (int16_t). + * - \%hh - char (int8_t). + * - \%H - char (int8_t). + * - \%z - size_t. + * - \%j - intmax_t (int64_t). + * - \%t - ptrdiff_t. + * The type in parentheses is typical sizes, however when printing those types + * you are better off using the special group 2 format types below (\%RX32 and + * such). + * + * + * Group 0b, IPRT format tricks: + * - %M - Replaces the format string, takes a string pointer. + * - %N - Nested formatting, takes a pointer to a format string + * followed by the pointer to a va_list variable. The va_list + * variable will not be modified and the caller must do va_end() + * on it. Make sure the va_list variable is NOT in a parameter + * list or some gcc versions/targets may get it all wrong. + * + * + * Group 1, the basic runtime typedefs (excluding those which obviously are + * pointer): + * - \%RTbool - Takes a bool value and prints 'true', 'false', or '!%d!'. + * - \%RTfile - Takes a #RTFILE value. + * - \%RTfmode - Takes a #RTFMODE value. + * - \%RTfoff - Takes a #RTFOFF value. + * - \%RTfp16 - Takes a #RTFAR16 value. + * - \%RTfp32 - Takes a #RTFAR32 value. + * - \%RTfp64 - Takes a #RTFAR64 value. + * - \%RTgid - Takes a #RTGID value. + * - \%RTino - Takes a #RTINODE value. + * - \%RTint - Takes a #RTINT value. + * - \%RTiop - Takes a #RTIOPORT value. + * - \%RTldrm - Takes a #RTLDRMOD value. + * - \%RTmac - Takes a #PCRTMAC pointer. + * - \%RTnaddr - Takes a #PCRTNETADDR value. + * - \%RTnaipv4 - Takes a #RTNETADDRIPV4 value. + * - \%RTnaipv6 - Takes a #PCRTNETADDRIPV6 value. + * - \%RTnthrd - Takes a #RTNATIVETHREAD value. + * - \%RTnthrd - Takes a #RTNATIVETHREAD value. + * - \%RTproc - Takes a #RTPROCESS value. + * - \%RTptr - Takes a #RTINTPTR or #RTUINTPTR value (but not void *). + * - \%RTreg - Takes a #RTCCUINTREG value. + * - \%RTsel - Takes a #RTSEL value. + * - \%RTsem - Takes a #RTSEMEVENT, #RTSEMEVENTMULTI, #RTSEMMUTEX, #RTSEMFASTMUTEX, or #RTSEMRW value. + * - \%RTsock - Takes a #RTSOCKET value. + * - \%RTthrd - Takes a #RTTHREAD value. + * - \%RTuid - Takes a #RTUID value. + * - \%RTuint - Takes a #RTUINT value. + * - \%RTunicp - Takes a #RTUNICP value. + * - \%RTutf16 - Takes a #RTUTF16 value. + * - \%RTuuid - Takes a #PCRTUUID and will print the UUID as a string. + * - \%RTxuint - Takes a #RTUINT or #RTINT value, formatting it as hex. + * - \%RGi - Takes a #RTGCINT value. + * - \%RGp - Takes a #RTGCPHYS value. + * - \%RGr - Takes a #RTGCUINTREG value. + * - \%RGu - Takes a #RTGCUINT value. + * - \%RGv - Takes a #RTGCPTR, #RTGCINTPTR or #RTGCUINTPTR value. + * - \%RGx - Takes a #RTGCUINT or #RTGCINT value, formatting it as hex. + * - \%RHi - Takes a #RTHCINT value. + * - \%RHp - Takes a #RTHCPHYS value. + * - \%RHr - Takes a #RTHCUINTREG value. + * - \%RHu - Takes a #RTHCUINT value. + * - \%RHv - Takes a #RTHCPTR, #RTHCINTPTR or #RTHCUINTPTR value. + * - \%RHx - Takes a #RTHCUINT or #RTHCINT value, formatting it as hex. + * - \%RRv - Takes a #RTRCPTR, #RTRCINTPTR or #RTRCUINTPTR value. + * - \%RCi - Takes a #RTINT value. + * - \%RCp - Takes a #RTCCPHYS value. + * - \%RCr - Takes a #RTCCUINTREG value. + * - \%RCu - Takes a #RTUINT value. + * - \%RCv - Takes a #uintptr_t, #intptr_t, void * value. + * - \%RCx - Takes a #RTUINT or #RTINT value, formatting it as hex. + * + * + * Group 2, the generic integer types which are prefered over relying on what + * bit-count a 'long', 'short', or 'long long' has on a platform. This are + * highly prefered for the [u]intXX_t kind of types: + * - \%RI[8|16|32|64] - Signed integer value of the specifed bit count. + * - \%RU[8|16|32|64] - Unsigned integer value of the specifed bit count. + * - \%RX[8|16|32|64] - Hexadecimal integer value of the specifed bit count. + * + * + * Group 3, hex dumpers and other complex stuff which requires more than simple + * formatting: + * - \%Rhxd - Takes a pointer to the memory which is to be dumped in typical + * hex format. Use the precision to specify the length, and the width to + * set the number of bytes per line. Default width and precision is 16. + * - \%RhxD - Same as \%Rhxd, except that it skips duplicate lines. + * - \%Rhxs - Takes a pointer to the memory to be displayed as a hex string, + * i.e. a series of space separated bytes formatted as two digit hex value. + * Use the precision to specify the length. Default length is 16 bytes. + * The width, if specified, is ignored. + * - \%Rrc - Takes an integer iprt status code as argument. Will insert the + * status code define corresponding to the iprt status code. + * - \%Rrs - Takes an integer iprt status code as argument. Will insert the + * short description of the specified status code. + * - \%Rrf - Takes an integer iprt status code as argument. Will insert the + * full description of the specified status code. + * - \%Rra - Takes an integer iprt status code as argument. Will insert the + * status code define + full description. + * - \%Rwc - Takes a long Windows error code as argument. Will insert the status + * code define corresponding to the Windows error code. + * - \%Rwf - Takes a long Windows error code as argument. Will insert the + * full description of the specified status code. + * - \%Rwa - Takes a long Windows error code as argument. Will insert the + * error code define + full description. + * + * - \%Rhrc - Takes a COM/XPCOM status code as argument. Will insert the status + * code define corresponding to the Windows error code. + * - \%Rhrf - Takes a COM/XPCOM status code as argument. Will insert the + * full description of the specified status code. + * - \%Rhra - Takes a COM/XPCOM error code as argument. Will insert the + * error code define + full description. + * + * - \%Rfn - Pretty printing of a function or method. It drops the + * return code and parameter list. + * - \%Rbn - Prints the base name. For dropping the path in + * order to save space when printing a path name. + * + * - \%lRbs - Same as \%ls except inlut is big endian UTF-16. + * + * On other platforms, \%Rw? simply prints the argument in a form of 0xXXXXXXXX. + * + * + * Group 4, structure dumpers: + * - \%RDtimespec - Takes a PCRTTIMESPEC. + * + * + * Group 5, XML / HTML escapers: + * - \%RMas - Takes a string pointer (const char *) and outputs + * it as an attribute value with the proper escaping. + * This typically ends up in double quotes. + * + * - \%RMes - Takes a string pointer (const char *) and outputs + * it as an element with the necessary escaping. + * + * Group 6, CPU Architecture Register dumpers: + * - \%RAx86[reg] - Takes a 64-bit register value if the register is + * 64-bit or smaller. Check the code wrt which + * registers are implemented. + * + */ + +#ifndef DECLARED_FNRTSTROUTPUT /* duplicated in iprt/log.h */ +# define DECLARED_FNRTSTROUTPUT +/** + * Output callback. + * + * @returns number of bytes written. + * @param pvArg User argument. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +typedef DECLCALLBACK(size_t) FNRTSTROUTPUT(void *pvArg, const char *pachChars, size_t cbChars); +/** Pointer to callback function. */ +typedef FNRTSTROUTPUT *PFNRTSTROUTPUT; +#endif + +/** @name Format flag. + * These are used by RTStrFormat extensions and RTStrFormatNumber, mind + * that not all flags makes sense to both of the functions. + * @{ */ +#define RTSTR_F_CAPITAL 0x0001 +#define RTSTR_F_LEFT 0x0002 +#define RTSTR_F_ZEROPAD 0x0004 +#define RTSTR_F_SPECIAL 0x0008 +#define RTSTR_F_VALSIGNED 0x0010 +#define RTSTR_F_PLUS 0x0020 +#define RTSTR_F_BLANK 0x0040 +#define RTSTR_F_WIDTH 0x0080 +#define RTSTR_F_PRECISION 0x0100 +#define RTSTR_F_THOUSAND_SEP 0x0200 +#define RTSTR_F_OBFUSCATE_PTR 0x0400 + +#define RTSTR_F_BIT_MASK 0xf800 +#define RTSTR_F_8BIT 0x0800 +#define RTSTR_F_16BIT 0x1000 +#define RTSTR_F_32BIT 0x2000 +#define RTSTR_F_64BIT 0x4000 +#define RTSTR_F_128BIT 0x8000 +/** @} */ + +/** @def RTSTR_GET_BIT_FLAG + * Gets the bit flag for the specified type. + */ +#define RTSTR_GET_BIT_FLAG(type) \ + ( sizeof(type) * 8 == 32 ? RTSTR_F_32BIT \ + : sizeof(type) * 8 == 64 ? RTSTR_F_64BIT \ + : sizeof(type) * 8 == 16 ? RTSTR_F_16BIT \ + : sizeof(type) * 8 == 8 ? RTSTR_F_8BIT \ + : sizeof(type) * 8 == 128 ? RTSTR_F_128BIT \ + : 0) + + +/** + * Callback to format non-standard format specifiers. + * + * @returns The number of bytes formatted. + * @param pvArg Formatter argument. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +typedef DECLCALLBACK(size_t) FNSTRFORMAT(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char **ppszFormat, va_list *pArgs, int cchWidth, + int cchPrecision, unsigned fFlags, char chArgSize); +/** Pointer to a FNSTRFORMAT() function. */ +typedef FNSTRFORMAT *PFNSTRFORMAT; + + +/** + * Partial implementation of a printf like formatter. + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string and its length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param InArgs Argument list. + */ +RTDECL(size_t) RTStrFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, + const char *pszFormat, va_list InArgs) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * Partial implementation of a printf like formatter. + * + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string and its length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... Argument list. + */ +RTDECL(size_t) RTStrFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Formats an integer number according to the parameters. + * + * @returns Length of the formatted number. + * @param psz Pointer to output string buffer of sufficient size. + * @param u64Value Value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(int) RTStrFormatNumber(char *psz, uint64_t u64Value, unsigned int uiBase, signed int cchWidth, signed int cchPrecision, + unsigned int fFlags); + +/** + * Formats an unsigned 8-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u8Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU8(char *pszBuf, size_t cbBuf, uint8_t u8Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 16-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u16Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU16(char *pszBuf, size_t cbBuf, uint16_t u16Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 32-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u32Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU32(char *pszBuf, size_t cbBuf, uint32_t u32Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 64-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u64Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU64(char *pszBuf, size_t cbBuf, uint64_t u64Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 128-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu128Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU128(char *pszBuf, size_t cbBuf, PCRTUINT128U pu128Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 256-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu256Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU256(char *pszBuf, size_t cbBuf, PCRTUINT256U pu256Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 512-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu512Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU512(char *pszBuf, size_t cbBuf, PCRTUINT512U pu512Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + + +/** + * Formats an 80-bit extended floating point number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pr80Value The value to format. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatR80(char *pszBuf, size_t cbBuf, PCRTFLOAT80U pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an 80-bit extended floating point number, version 2. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pr80Value The value to format. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatR80u2(char *pszBuf, size_t cbBuf, PCRTFLOAT80U2 pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags); + + + +/** + * Callback for formatting a type. + * + * This is registered using the RTStrFormatTypeRegister function and will + * be called during string formatting to handle the specified %R[type]. + * The argument for this format type is assumed to be a pointer and it's + * passed in the @a pvValue argument. + * + * @returns Length of the formatted output. + * @param pfnOutput Output worker. + * @param pvArgOutput Argument to the output worker. + * @param pszType The type name. + * @param pvValue The argument value. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags (NTFS_*). + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(size_t) FNRTSTRFORMATTYPE(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char *pszType, void const *pvValue, + int cchWidth, int cchPrecision, unsigned fFlags, + void *pvUser); +/** Pointer to a FNRTSTRFORMATTYPE. */ +typedef FNRTSTRFORMATTYPE *PFNRTSTRFORMATTYPE; + + +/** + * Register a format handler for a type. + * + * The format handler is used to handle '%R[type]' format types, where the argument + * in the vector is a pointer value (a bit restrictive, but keeps it simple). + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_ALREADY_EXISTS if the type has already been registered. + * @retval VERR_TOO_MANY_OPEN_FILES if all the type slots has been allocated already. + * + * @param pszType The type name. + * @param pfnHandler The handler address. See FNRTSTRFORMATTYPE for details. + * @param pvUser The user argument to pass to the handler. See RTStrFormatTypeSetUser + * for how to update this later. + */ +RTDECL(int) RTStrFormatTypeRegister(const char *pszType, PFNRTSTRFORMATTYPE pfnHandler, void *pvUser); + +/** + * Deregisters a format type. + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to deregister. + */ +RTDECL(int) RTStrFormatTypeDeregister(const char *pszType); + +/** + * Sets the user argument for a type. + * + * This can be used if a user argument needs relocating in GC. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to update. + * @param pvUser The new user argument value. + */ +RTDECL(int) RTStrFormatTypeSetUser(const char *pszType, void *pvUser); + + +/** + * String printf. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * + * @deprecated Use RTStrPrintf2V! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfV(char *pszBuffer, size_t cchBuffer, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * String printf. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + * + * @deprecated Use RTStrPrintf2! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintf(char *pszBuffer, size_t cchBuffer, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * String printf with custom formatting. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * + * @deprecated Use RTStrPrintf2ExV! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfExV(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * String printf with custom formatting. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + * + * @deprecated Use RTStrPrintf2Ex! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfEx(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * String printf, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2V(char *pszBuffer, size_t cbBuffer, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * String printf, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2(char *pszBuffer, size_t cbBuffer, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * String printf with custom formatting, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2ExV(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cbBuffer, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * String printf with custom formatting, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2Ex(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cbBuffer, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Allocating string printf (default tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +#define RTStrAPrintfV(ppszBuffer, pszFormat, args) RTStrAPrintfVTag((ppszBuffer), (pszFormat), (args), RTSTR_TAG) + +/** + * Allocating string printf (custom tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAPrintfVTag(char **ppszBuffer, const char *pszFormat, va_list args, const char *pszTag) RT_IPRT_FORMAT_ATTR(2, 0); + +/** + * Allocating string printf. + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(int) RT_IPRT_FORMAT_ATTR(2, 3) RTStrAPrintf(char **ppszBuffer, const char *pszFormat, ...) +{ + int cbRet; + va_list va; + va_start(va, pszFormat); + cbRet = RTStrAPrintfVTag(ppszBuffer, pszFormat, va, RTSTR_TAG); + va_end(va); + return cbRet; +} + +/** + * Allocating string printf (custom tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszTag Allocation tag used for statistics and such. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(int) RT_IPRT_FORMAT_ATTR(3, 4) RTStrAPrintfTag(char **ppszBuffer, const char *pszTag, const char *pszFormat, ...) +{ + int cbRet; + va_list va; + va_start(va, pszFormat); + cbRet = RTStrAPrintfVTag(ppszBuffer, pszFormat, va, pszTag); + va_end(va); + return cbRet; +} + +/** + * Allocating string printf, version 2. + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +#define RTStrAPrintf2V(pszFormat, args) RTStrAPrintf2VTag((pszFormat), (args), RTSTR_TAG) + +/** + * Allocating string printf, version 2. + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrAPrintf2VTag(const char *pszFormat, va_list args, const char *pszTag) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Allocating string printf, version 2 (default tag). + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(char *) RT_IPRT_FORMAT_ATTR(1, 2) RTStrAPrintf2(const char *pszFormat, ...) +{ + char *pszRet; + va_list va; + va_start(va, pszFormat); + pszRet = RTStrAPrintf2VTag(pszFormat, va, RTSTR_TAG); + va_end(va); + return pszRet; +} + +/** + * Allocating string printf, version 2 (custom tag). + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszTag Allocation tag used for statistics and such. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(char *) RT_IPRT_FORMAT_ATTR(2, 3) RTStrAPrintf2Tag(const char *pszTag, const char *pszFormat, ...) +{ + char *pszRet; + va_list va; + va_start(va, pszFormat); + pszRet = RTStrAPrintf2VTag(pszFormat, va, pszTag); + va_end(va); + return pszRet; +} + +/** + * Strips blankspaces from both ends of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStrip(char *psz); + +/** + * Strips blankspaces from the start of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStripL(const char *psz); + +/** + * Strips blankspaces from the end of the string. + * + * @returns psz. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStripR(char *psz); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCopy(char *pszDst, size_t cbDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCopyEx(char *pszDst, size_t cbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String copy with overflow handling and buffer advancing. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCopyP(char **ppszDst, size_t *pcbDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCopyPEx(char **ppszDst, size_t *pcbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCat(char *pszDst, size_t cbDst, const char *pszSrc); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCatEx(char *pszDst, size_t cbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCatP(char **ppszDst, size_t *pcbDst, const char *pszSrc); + +/** + * String concatenation with overflow handling and buffer advancing. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCatPEx(char **ppszDst, size_t *pcbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * Performs a case sensitive string compare between two UTF-8 strings. + * + * Encoding errors are ignored by the current implementation. So, the only + * difference between this and the CRT strcmp function is the handling of + * NULL arguments. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + */ +RTDECL(int) RTStrCmp(const char *psz1, const char *psz2); + +/** + * Performs a case sensitive string compare between two UTF-8 strings, given + * a maximum string length. + * + * Encoding errors are ignored by the current implementation. So, the only + * difference between this and the CRT strncmp function is the handling of + * NULL arguments. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + * @param cchMax The maximum string length + */ +RTDECL(int) RTStrNCmp(const char *psz1, const char *psz2, size_t cchMax); + +/** + * Performs a case insensitive string compare between two UTF-8 strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * The result is the difference between the mismatching codepoints after they + * both have been lower cased. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + */ +RTDECL(int) RTStrICmp(const char *psz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-8 strings, given a + * maximum string length. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * The result is the difference between the mismatching codepoints after they + * both have been lower cased. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + * @param cchMax Maximum string length + */ +RTDECL(int) RTStrNICmp(const char *psz1, const char *psz2, size_t cchMax); + +/** + * Performs a case insensitive string compare between a UTF-8 string and a 7-bit + * ASCII string. + * + * This is potentially faster than RTStrICmp and drags in less dependencies. It + * is really handy for hardcoded inputs. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second string, 7-bit ASCII. Null is allowed. + * @sa RTUtf16ICmpAscii + */ +RTDECL(int) RTStrICmpAscii(const char *psz1, const char *psz2); + +/** + * Checks whether @a pszString starts with @a pszStart. + * + * @returns true / false. + * @param pszString The string to check. + * @param pszStart The start string to check for. + */ +RTDECL(int) RTStrStartsWith(const char *pszString, const char *pszStart); + +/** + * Checks whether @a pszString starts with @a pszStart, case insensitive. + * + * @returns true / false. + * @param pszString The string to check. + * @param pszStart The start string to check for. + */ +RTDECL(int) RTStrIStartsWith(const char *pszString, const char *pszStart); + +/** + * Locates a case sensitive substring. + * + * If any of the two strings are NULL, then NULL is returned. If the needle is + * an empty string, then the haystack is returned (i.e. matches anything). + * + * @returns Pointer to the first occurrence of the substring if found, NULL if + * not. + * + * @param pszHaystack The string to search. + * @param pszNeedle The substring to search for. + * + * @remarks The difference between this and strstr is the handling of NULL + * pointers. + */ +RTDECL(char *) RTStrStr(const char *pszHaystack, const char *pszNeedle); + +/** + * Locates a case insensitive substring. + * + * If any of the two strings are NULL, then NULL is returned. If the needle is + * an empty string, then the haystack is returned (i.e. matches anything). + * + * @returns Pointer to the first occurrence of the substring if found, NULL if + * not. + * + * @param pszHaystack The string to search. + * @param pszNeedle The substring to search for. + * + */ +RTDECL(char *) RTStrIStr(const char *pszHaystack, const char *pszNeedle); + +/** + * Converts the string to lower case. + * + * @returns Pointer to the converted string. + * @param psz The string to convert. + */ +RTDECL(char *) RTStrToLower(char *psz); + +/** + * Converts the string to upper case. + * + * @returns Pointer to the converted string. + * @param psz The string to convert. + */ +RTDECL(char *) RTStrToUpper(char *psz); + +/** + * Checks if the string is case foldable, i.e. whether it would change if + * subject to RTStrToLower or RTStrToUpper. + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsCaseFoldable(const char *psz); + +/** + * Checks if the string is upper cased (no lower case chars in it). + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsUpperCased(const char *psz); + +/** + * Checks if the string is lower cased (no upper case chars in it). + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsLowerCased(const char *psz); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * See also RTStrNLenEx. + * + * @returns The string length or cbMax. The returned length does not include + * the zero terminator if it was found. + * + * @param pszString The string. + * @param cchMax The max string length. + */ +RTDECL(size_t) RTStrNLen(const char *pszString, size_t cchMax); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * See also RTStrNLen. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the string has a length less than cchMax. + * @retval VERR_BUFFER_OVERFLOW if the end of the string wasn't found + * before cchMax was reached. + * + * @param pszString The string. + * @param cchMax The max string length. + * @param pcch Where to store the string length excluding the + * terminator. This is set to cchMax if the terminator + * isn't found. + */ +RTDECL(int) RTStrNLenEx(const char *pszString, size_t cchMax, size_t *pcch); + +RT_C_DECLS_END + +/** The maximum size argument of a memchr call. */ +#define RTSTR_MEMCHR_MAX ((~(size_t)0 >> 1) - 15) + +/** + * Find the zero terminator in a string with a limited length. + * + * @returns Pointer to the zero terminator. + * @returns NULL if the zero terminator was not found. + * + * @param pszString The string. + * @param cchMax The max string length. RTSTR_MAX is fine. + */ +#if defined(__cplusplus) && !defined(DOXYGEN_RUNNING) +DECLINLINE(char const *) RTStrEnd(char const *pszString, size_t cchMax) +{ + /* Avoid potential issues with memchr seen in glibc. + * See sysdeps/x86_64/memchr.S in glibc versions older than 2.11 */ + while (cchMax > RTSTR_MEMCHR_MAX) + { + char const *pszRet = (char const *)memchr(pszString, '\0', RTSTR_MEMCHR_MAX); + if (RT_LIKELY(pszRet)) + return pszRet; + pszString += RTSTR_MEMCHR_MAX; + cchMax -= RTSTR_MEMCHR_MAX; + } + return (char const *)memchr(pszString, '\0', cchMax); +} + +DECLINLINE(char *) RTStrEnd(char *pszString, size_t cchMax) +#else +DECLINLINE(char *) RTStrEnd(const char *pszString, size_t cchMax) +#endif +{ + /* Avoid potential issues with memchr seen in glibc. + * See sysdeps/x86_64/memchr.S in glibc versions older than 2.11 */ + while (cchMax > RTSTR_MEMCHR_MAX) + { + char *pszRet = (char *)memchr(pszString, '\0', RTSTR_MEMCHR_MAX); + if (RT_LIKELY(pszRet)) + return pszRet; + pszString += RTSTR_MEMCHR_MAX; + cchMax -= RTSTR_MEMCHR_MAX; + } + return (char *)memchr(pszString, '\0', cchMax); +} + +RT_C_DECLS_BEGIN + +/** + * Finds the offset at which a simple character first occurs in a string. + * + * @returns The offset of the first occurence or the terminator offset. + * @param pszHaystack The string to search. + * @param chNeedle The character to search for. + */ +DECLINLINE(size_t) RTStrOffCharOrTerm(const char *pszHaystack, char chNeedle) +{ + const char *psz = pszHaystack; + char ch; + while ( (ch = *psz) != chNeedle + && ch != '\0') + psz++; + return psz - pszHaystack; +} + + +/** + * Matches a simple string pattern. + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPattern The pattern. Special chars are '*' and '?', where the + * asterisk matches zero or more characters and question + * mark matches exactly one character. + * @param pszString The string to match against the pattern. + */ +RTDECL(bool) RTStrSimplePatternMatch(const char *pszPattern, const char *pszString); + +/** + * Matches a simple string pattern, neither which needs to be zero terminated. + * + * This is identical to RTStrSimplePatternMatch except that you can optionally + * specify the length of both the pattern and the string. The function will + * stop when it hits a string terminator or either of the lengths. + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPattern The pattern. Special chars are '*' and '?', where the + * asterisk matches zero or more characters and question + * mark matches exactly one character. + * @param cchPattern The pattern length. Pass RTSTR_MAX if you don't know the + * length and wish to stop at the string terminator. + * @param pszString The string to match against the pattern. + * @param cchString The string length. Pass RTSTR_MAX if you don't know the + * length and wish to match up to the string terminator. + */ +RTDECL(bool) RTStrSimplePatternNMatch(const char *pszPattern, size_t cchPattern, + const char *pszString, size_t cchString); + +/** + * Matches multiple patterns against a string. + * + * The patterns are separated by the pipe character (|). + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPatterns The patterns. + * @param cchPatterns The lengths of the patterns to use. Pass RTSTR_MAX to + * stop at the terminator. + * @param pszString The string to match against the pattern. + * @param cchString The string length. Pass RTSTR_MAX stop stop at the + * terminator. + * @param poffPattern Offset into the patterns string of the patttern that + * matched. If no match, this will be set to RTSTR_MAX. + * This is optional, NULL is fine. + */ +RTDECL(bool) RTStrSimplePatternMultiMatch(const char *pszPatterns, size_t cchPatterns, + const char *pszString, size_t cchString, + size_t *poffPattern); + +/** + * Compares two version strings RTStrICmp fashion. + * + * The version string is split up into sections at punctuation, spaces, + * underscores, dashes and plus signs. The sections are then split up into + * numeric and string sub-sections. Finally, the sub-sections are compared + * in a numeric or case insesntivie fashion depending on what they are. + * + * The following strings are considered to be equal: "1.0.0", "1.00.0", "1.0", + * "1". These aren't: "1.0.0r993", "1.0", "1.0r993", "1.0_Beta3", "1.1" + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * + * @param pszVer1 First version string to compare. + * @param pszVer2 Second version string to compare first version with. + */ +RTDECL(int) RTStrVersionCompare(const char *pszVer1, const char *pszVer2); + + +/** @defgroup rt_str_conv String To/From Number Conversions + * @{ */ + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint64_t *pu64); + +/** + * Converts a string representation of a number to a 64-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Full(const char *pszValue, unsigned uBase, uint64_t *pu64); + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 64-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint64_t) RTStrToUInt64(const char *pszValue); + +/** + * Converts a string representation of a number to a 32-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint32_t *pu32); + +/** + * Converts a string representation of a number to a 32-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Full(const char *pszValue, unsigned uBase, uint32_t *pu32); + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 32-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint32_t) RTStrToUInt32(const char *pszValue); + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint16_t *pu16); + +/** + * Converts a string representation of a number to a 16-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Full(const char *pszValue, unsigned uBase, uint16_t *pu16); + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * The base is guessed. + * + * @returns 16-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint16_t) RTStrToUInt16(const char *pszValue); + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint8_t *pu8); + +/** + * Converts a string representation of a number to a 8-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Full(const char *pszValue, unsigned uBase, uint8_t *pu8); + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * The base is guessed. + * + * @returns 8-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint8_t) RTStrToUInt8(const char *pszValue); + +/** + * Converts a string representation of a number to a 64-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, int64_t *pi64); + +/** + * Converts a string representation of a number to a 64-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Full(const char *pszValue, unsigned uBase, int64_t *pi64); + +/** + * Converts a string representation of a number to a 64-bit signed number. + * The base is guessed. + * + * @returns 64-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int64_t) RTStrToInt64(const char *pszValue); + +/** + * Converts a string representation of a number to a 32-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, int32_t *pi32); + +/** + * Converts a string representation of a number to a 32-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Full(const char *pszValue, unsigned uBase, int32_t *pi32); + +/** + * Converts a string representation of a number to a 32-bit signed number. + * The base is guessed. + * + * @returns 32-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int32_t) RTStrToInt32(const char *pszValue); + +/** + * Converts a string representation of a number to a 16-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, int16_t *pi16); + +/** + * Converts a string representation of a number to a 16-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Full(const char *pszValue, unsigned uBase, int16_t *pi16); + +/** + * Converts a string representation of a number to a 16-bit signed number. + * The base is guessed. + * + * @returns 16-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int16_t) RTStrToInt16(const char *pszValue); + +/** + * Converts a string representation of a number to a 8-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, int8_t *pi8); + +/** + * Converts a string representation of a number to a 8-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Full(const char *pszValue, unsigned uBase, int8_t *pi8); + +/** + * Converts a string representation of a number to a 8-bit signed number. + * The base is guessed. + * + * @returns 8-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int8_t) RTStrToInt8(const char *pszValue); + +/** + * Formats a buffer stream as hex bytes. + * + * The default is no separating spaces or line breaks or anything. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes. + * + * @param pszBuf Output string buffer. + * @param cbBuf The size of the output buffer. + * @param pv Pointer to the bytes to stringify. + * @param cb The number of bytes to stringify. + * @param fFlags Combination of RTSTRPRINTHEXBYTES_F_XXX values. + * @sa RTUtf16PrintHexBytes. + */ +RTDECL(int) RTStrPrintHexBytes(char *pszBuf, size_t cbBuf, void const *pv, size_t cb, uint32_t fFlags); +/** @name RTSTRPRINTHEXBYTES_F_XXX - flags for RTStrPrintHexBytes and RTUtf16PritnHexBytes. + * @{ */ +/** Upper case hex digits, the default is lower case. */ +#define RTSTRPRINTHEXBYTES_F_UPPER RT_BIT(0) +/** Add a space between each group. */ +#define RTSTRPRINTHEXBYTES_F_SEP_SPACE RT_BIT(1) +/** Add a colon between each group. */ +#define RTSTRPRINTHEXBYTES_F_SEP_COLON RT_BIT(2) +/** @} */ + +/** + * Converts a string of hex bytes back into binary data. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the string contains too many hex bytes. + * @retval VERR_BUFFER_UNDERFLOW if there aren't enough hex bytes to fill up + * the output buffer. + * @retval VERR_UNEVEN_INPUT if the input contains a half byte. + * @retval VERR_NO_DIGITS + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * + * @param pszHex The string containing the hex bytes. + * @param pv Output buffer. + * @param cb The size of the output buffer. + * @param fFlags Must be zero, reserved for future use. + */ +RTDECL(int) RTStrConvertHexBytes(char const *pszHex, void *pv, size_t cb, uint32_t fFlags); + +/** @} */ + + +/** @defgroup rt_str_space Unique String Space + * @{ + */ + +/** Pointer to a string name space container node core. */ +typedef struct RTSTRSPACECORE *PRTSTRSPACECORE; +/** Pointer to a pointer to a string name space container node core. */ +typedef PRTSTRSPACECORE *PPRTSTRSPACECORE; + +/** + * String name space container node core. + */ +typedef struct RTSTRSPACECORE +{ + /** Hash key. Don't touch. */ + uint32_t Key; + /** Pointer to the left leaf node. Don't touch. */ + PRTSTRSPACECORE pLeft; + /** Pointer to the left right node. Don't touch. */ + PRTSTRSPACECORE pRight; + /** Pointer to the list of string with the same key. Don't touch. */ + PRTSTRSPACECORE pList; + /** Height of this tree: max(heigth(left), heigth(right)) + 1. Don't touch */ + unsigned char uchHeight; + /** The string length. Read only! */ + size_t cchString; + /** Pointer to the string. Read only! */ + const char *pszString; +} RTSTRSPACECORE; + +/** String space. (Initialize with NULL.) */ +typedef PRTSTRSPACECORE RTSTRSPACE; +/** Pointer to a string space. */ +typedef PPRTSTRSPACECORE PRTSTRSPACE; + + +/** + * Inserts a string into a unique string space. + * + * @returns true on success. + * @returns false if the string collided with an existing string. + * @param pStrSpace The space to insert it into. + * @param pStr The string node. + */ +RTDECL(bool) RTStrSpaceInsert(PRTSTRSPACE pStrSpace, PRTSTRSPACECORE pStr); + +/** + * Removes a string from a unique string space. + * + * @returns Pointer to the removed string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to remove it from. + * @param pszString The string to remove. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceRemove(PRTSTRSPACE pStrSpace, const char *pszString); + +/** + * Gets a string from a unique string space. + * + * @returns Pointer to the string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to get it from. + * @param pszString The string to get. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceGet(PRTSTRSPACE pStrSpace, const char *pszString); + +/** + * Gets a string from a unique string space. + * + * @returns Pointer to the string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to get it from. + * @param pszString The string to get. + * @param cchMax The max string length to evaluate. Passing + * RTSTR_MAX is ok and makes it behave just like + * RTStrSpaceGet. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceGetN(PRTSTRSPACE pStrSpace, const char *pszString, size_t cchMax); + +/** + * Callback function for RTStrSpaceEnumerate() and RTStrSpaceDestroy(). + * + * @returns 0 on continue. + * @returns Non-zero to aborts the operation. + * @param pStr The string node + * @param pvUser The user specified argument. + */ +typedef DECLCALLBACK(int) FNRTSTRSPACECALLBACK(PRTSTRSPACECORE pStr, void *pvUser); +/** Pointer to callback function for RTStrSpaceEnumerate() and RTStrSpaceDestroy(). */ +typedef FNRTSTRSPACECALLBACK *PFNRTSTRSPACECALLBACK; + +/** + * Destroys the string space. + * + * The caller supplies a callback which will be called for each of the string + * nodes in for freeing their memory and other resources. + * + * @returns 0 or what ever non-zero return value pfnCallback returned + * when aborting the destruction. + * @param pStrSpace The space to destroy. + * @param pfnCallback The callback. + * @param pvUser The user argument. + */ +RTDECL(int) RTStrSpaceDestroy(PRTSTRSPACE pStrSpace, PFNRTSTRSPACECALLBACK pfnCallback, void *pvUser); + +/** + * Enumerates the string space. + * The caller supplies a callback which will be called for each of + * the string nodes. + * + * @returns 0 or what ever non-zero return value pfnCallback returned + * when aborting the destruction. + * @param pStrSpace The space to enumerate. + * @param pfnCallback The callback. + * @param pvUser The user argument. + */ +RTDECL(int) RTStrSpaceEnumerate(PRTSTRSPACE pStrSpace, PFNRTSTRSPACECALLBACK pfnCallback, void *pvUser); + +/** @} */ + + +/** @defgroup rt_str_hash Sting hashing + * @{ */ + +/** + * Hashes the given string using algorithm \#1. + * + * @returns String hash. + * @param pszString The string to hash. + */ +RTDECL(uint32_t) RTStrHash1(const char *pszString); + +/** + * Hashes the given string using algorithm \#1. + * + * @returns String hash. + * @param pszString The string to hash. + * @param cchString The max length to hash. Hashing will stop if the + * terminator character is encountered first. Passing + * RTSTR_MAX is fine. + */ +RTDECL(uint32_t) RTStrHash1N(const char *pszString, size_t cchString); + +/** + * Hashes the given strings as if they were concatenated using algorithm \#1. + * + * @returns String hash. + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. Passing RTSTR_MAX as the size is + * fine. + */ +RTDECL(uint32_t) RTStrHash1ExN(size_t cPairs, ...); + +/** + * Hashes the given strings as if they were concatenated using algorithm \#1. + * + * @returns String hash. + * @param cPairs The number of string / length pairs in the @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. Passing RTSTR_MAX as the size is + * fine. + */ +RTDECL(uint32_t) RTStrHash1ExNV(size_t cPairs, va_list va); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/thread.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/thread.h @@ -0,0 +1,943 @@ +/** @file + * IPRT - Threads. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_thread_h +#define ___iprt_thread_h + +#include +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_thread RTThread - Thread Management + * @ingroup grp_rt + * @{ + */ + +/** + * The thread state. + */ +typedef enum RTTHREADSTATE +{ + /** The usual invalid 0 value. */ + RTTHREADSTATE_INVALID = 0, + /** The thread is being initialized. */ + RTTHREADSTATE_INITIALIZING, + /** The thread has terminated */ + RTTHREADSTATE_TERMINATED, + /** Probably running. */ + RTTHREADSTATE_RUNNING, + + /** Waiting on a critical section. */ + RTTHREADSTATE_CRITSECT, + /** Waiting on a event semaphore. */ + RTTHREADSTATE_EVENT, + /** Waiting on a event multiple wakeup semaphore. */ + RTTHREADSTATE_EVENT_MULTI, + /** Waiting on a fast mutex. */ + RTTHREADSTATE_FAST_MUTEX, + /** Waiting on a mutex. */ + RTTHREADSTATE_MUTEX, + /** Waiting on a read write semaphore, read (shared) access. */ + RTTHREADSTATE_RW_READ, + /** Waiting on a read write semaphore, write (exclusive) access. */ + RTTHREADSTATE_RW_WRITE, + /** The thread is sleeping. */ + RTTHREADSTATE_SLEEP, + /** Waiting on a spin mutex. */ + RTTHREADSTATE_SPIN_MUTEX, + /** End of the thread states. */ + RTTHREADSTATE_END, + + /** The usual 32-bit size hack. */ + RTTHREADSTATE_32BIT_HACK = 0x7fffffff +} RTTHREADSTATE; + +/** Checks if a thread state indicates that the thread is sleeping. */ +#define RTTHREAD_IS_SLEEPING(enmState) ((enmState) >= RTTHREADSTATE_CRITSECT) + +/** + * Thread types. + * Besides identifying the purpose of the thread, the thread type is + * used to select the scheduling properties. + * + * The types in are placed in a rough order of ascending priority. + */ +typedef enum RTTHREADTYPE +{ + /** Invalid type. */ + RTTHREADTYPE_INVALID = 0, + /** Infrequent poller thread. + * This type of thread will sleep for the most of the time, and do + * infrequent polls on resources at 0.5 sec or higher intervals. + */ + RTTHREADTYPE_INFREQUENT_POLLER, + /** Main heavy worker thread. + * Thread of this type is driving asynchronous tasks in the Main + * API which takes a long time and might involve a bit of CPU. Like + * for instance creating a fixed sized VDI. + */ + RTTHREADTYPE_MAIN_HEAVY_WORKER, + /** The emulation thread type. + * While being a thread with very high workload it still is vital + * that it gets scheduled frequently. When possible all other thread + * types except DEFAULT and GUI should interrupt this one ASAP when + * they become ready. + */ + RTTHREADTYPE_EMULATION, + /** The default thread type. + * Since it doesn't say much about the purpose of the thread + * nothing special is normally done to the scheduling. This type + * should be avoided. + * The main thread is registered with default type during RTR3Init() + * and that's what the default process priority is derived from. + */ + RTTHREADTYPE_DEFAULT, + /** The GUI thread type + * The GUI normally have a low workload but is frequently scheduled + * to handle events. When possible the scheduler should not leave + * threads of this kind waiting for too long (~50ms). + */ + RTTHREADTYPE_GUI, + /** Main worker thread. + * Thread of this type is driving asynchronous tasks in the Main API. + * In most cases this means little work an a lot of waiting. + */ + RTTHREADTYPE_MAIN_WORKER, + /** VRDP I/O thread. + * These threads are I/O threads in the RDP server will hang around + * waiting for data, process it and pass it on. + */ + RTTHREADTYPE_VRDP_IO, + /** The debugger type. + * Threads involved in servicing the debugger. It must remain + * responsive even when things are running wild in. + */ + RTTHREADTYPE_DEBUGGER, + /** Message pump thread. + * Thread pumping messages from one thread/process to another + * thread/process. The workload is very small, most of the time + * it's blocked waiting for messages to be produced or processed. + * This type of thread will be favored after I/O threads. + */ + RTTHREADTYPE_MSG_PUMP, + /** The I/O thread type. + * Doing I/O means shuffling data, waiting for request to arrive and + * for them to complete. The thread should be favored when competing + * with any other threads except timer threads. + */ + RTTHREADTYPE_IO, + /** The timer thread type. + * A timer thread is mostly waiting for the timer to tick + * and then perform a little bit of work. Accuracy is important here, + * so the thread should be favoured over all threads. If premention can + * be configured at thread level, it could be made very short. + */ + RTTHREADTYPE_TIMER, + /** Only used for validation. */ + RTTHREADTYPE_END +} RTTHREADTYPE; + + +#ifndef IN_RC + +/** + * Checks if the IPRT thread component has been initialized. + * + * This is used to avoid calling into RTThread before the runtime has been + * initialized. + * + * @returns @c true if it's initialized, @c false if not. + */ +RTDECL(bool) RTThreadIsInitialized(void); + +/** + * Get the thread handle of the current thread. + * + * @returns Thread handle. + */ +RTDECL(RTTHREAD) RTThreadSelf(void); + +/** + * Get the native thread handle of the current thread. + * + * @returns Native thread handle. + */ +RTDECL(RTNATIVETHREAD) RTThreadNativeSelf(void); + +/** + * Millisecond granular sleep function. + * + * @returns VINF_SUCCESS on success. + * @returns VERR_INTERRUPTED if a signal or other asynchronous stuff happened + * which interrupt the peaceful sleep. + * @param cMillies Number of milliseconds to sleep. + * 0 milliseconds means yielding the timeslice - deprecated! + * @remark See RTThreadNanoSleep() for sleeping for smaller periods of time. + */ +RTDECL(int) RTThreadSleep(RTMSINTERVAL cMillies); + +/** + * Millisecond granular sleep function, no logger calls. + * + * Same as RTThreadSleep, except it will never call into the IPRT logger. It + * can therefore safely be used in places where the logger is off limits, like + * at termination or init time. The electric fence heap is one consumer of + * this API. + * + * @returns VINF_SUCCESS on success. + * @returns VERR_INTERRUPTED if a signal or other asynchronous stuff happened + * which interrupt the peaceful sleep. + * @param cMillies Number of milliseconds to sleep. + * 0 milliseconds means yielding the timeslice - deprecated! + */ +RTDECL(int) RTThreadSleepNoLog(RTMSINTERVAL cMillies); + +/** + * Yields the CPU. + * + * @returns true if we yielded. + * @returns false if it's probable that we didn't yield. + */ +RTDECL(bool) RTThreadYield(void); + + + +/** + * Thread function. + * + * @returns 0 on success. + * @param ThreadSelf Thread handle to this thread. + * @param pvUser User argument. + */ +typedef DECLCALLBACK(int) FNRTTHREAD(RTTHREAD ThreadSelf, void *pvUser); +/** Pointer to a FNRTTHREAD(). */ +typedef FNRTTHREAD *PFNRTTHREAD; + +/** + * Thread creation flags. + */ +typedef enum RTTHREADFLAGS +{ + /** This flag is used to keep the thread structure around so it can + * be waited on after termination. @sa RTThreadWait and + * RTThreadWaitNoResume. Not required for RTThreadUserWait and friends! + */ + RTTHREADFLAGS_WAITABLE = RT_BIT(0), + /** The bit number corresponding to the RTTHREADFLAGS_WAITABLE mask. */ + RTTHREADFLAGS_WAITABLE_BIT = 0, + + /** Mask of valid flags, use for validation. */ + RTTHREADFLAGS_MASK = RT_BIT(0) +} RTTHREADFLAGS; + + +/** + * Create a new thread. + * + * @returns iprt status code. + * @param pThread Where to store the thread handle to the new thread. (optional) + * @param pfnThread The thread function. + * @param pvUser User argument. + * @param cbStack The size of the stack for the new thread. + * Use 0 for the default stack size. + * @param enmType The thread type. Used for deciding scheduling attributes + * of the thread. + * @param fFlags Flags of the RTTHREADFLAGS type (ORed together). + * @param pszName Thread name. + * + * @remark When called in Ring-0, this API will create a new kernel thread and not a thread in + * the context of the calling process. + */ +RTDECL(int) RTThreadCreate(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, unsigned fFlags, const char *pszName); +#ifndef RT_OS_LINUX /* XXX crashes genksyms at least on 32-bit Linux hosts */ +/** @copydoc RTThreadCreate */ +typedef DECLCALLBACKPTR(int, PFNRTTHREADCREATE)(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, unsigned fFlags, const char *pszName); +#endif + + +/** + * Create a new thread. + * + * Same as RTThreadCreate except the name is given in the RTStrPrintfV form. + * + * @returns iprt status code. + * @param pThread See RTThreadCreate. + * @param pfnThread See RTThreadCreate. + * @param pvUser See RTThreadCreate. + * @param cbStack See RTThreadCreate. + * @param enmType See RTThreadCreate. + * @param fFlags See RTThreadCreate. + * @param pszName Thread name format. + * @param va Format arguments. + */ +RTDECL(int) RTThreadCreateV(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, uint32_t fFlags, const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR(7, 0); + +/** + * Create a new thread. + * + * Same as RTThreadCreate except the name is given in the RTStrPrintf form. + * + * @returns iprt status code. + * @param pThread See RTThreadCreate. + * @param pfnThread See RTThreadCreate. + * @param pvUser See RTThreadCreate. + * @param cbStack See RTThreadCreate. + * @param enmType See RTThreadCreate. + * @param fFlags See RTThreadCreate. + * @param pszName Thread name format. + * @param ... Format arguments. + */ +RTDECL(int) RTThreadCreateF(PRTTHREAD pThread, PFNRTTHREAD pfnThread, void *pvUser, size_t cbStack, + RTTHREADTYPE enmType, uint32_t fFlags, const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR(7, 8); + +/** + * Gets the native thread id of a IPRT thread. + * + * @returns The native thread id. + * @param Thread The IPRT thread. + */ +RTDECL(RTNATIVETHREAD) RTThreadGetNative(RTTHREAD Thread); + +/** + * Gets the IPRT thread of a native thread. + * + * @returns The IPRT thread handle + * @returns NIL_RTTHREAD if not a thread known to IPRT. + * @param NativeThread The native thread handle/id. + */ +RTDECL(RTTHREAD) RTThreadFromNative(RTNATIVETHREAD NativeThread); + +/** + * Changes the type of the specified thread. + * + * @returns iprt status code. + * @param Thread The thread which type should be changed. + * @param enmType The new thread type. + * @remark In Ring-0 it only works if Thread == RTThreadSelf(). + */ +RTDECL(int) RTThreadSetType(RTTHREAD Thread, RTTHREADTYPE enmType); + +/** + * Wait for the thread to terminate, resume on interruption. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + * @param prc Where to store the return code of the thread. Optional. + */ +RTDECL(int) RTThreadWait(RTTHREAD Thread, RTMSINTERVAL cMillies, int *prc); + +/** + * Wait for the thread to terminate, return on interruption. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + * @param prc Where to store the return code of the thread. Optional. + */ +RTDECL(int) RTThreadWaitNoResume(RTTHREAD Thread, RTMSINTERVAL cMillies, int *prc); + +/** + * Gets the name of the current thread thread. + * + * @returns Pointer to readonly name string. + * @returns NULL on failure. + */ +RTDECL(const char *) RTThreadSelfName(void); + +/** + * Gets the name of a thread. + * + * @returns Pointer to readonly name string. + * @returns NULL on failure. + * @param Thread Thread handle of the thread to query the name of. + */ +RTDECL(const char *) RTThreadGetName(RTTHREAD Thread); + +/** + * Gets the type of the specified thread. + * + * @returns The thread type. + * @returns RTTHREADTYPE_INVALID if the thread handle is invalid. + * @param Thread The thread in question. + */ +RTDECL(RTTHREADTYPE) RTThreadGetType(RTTHREAD Thread); + +/** + * Sets the name of a thread. + * + * @returns iprt status code. + * @param Thread Thread handle of the thread to query the name of. + * @param pszName The thread name. + */ +RTDECL(int) RTThreadSetName(RTTHREAD Thread, const char *pszName); + +/** + * Checks if the specified thread is the main thread. + * + * @returns true if it is, false if it isn't. + * + * @param hThread The thread handle. + */ +RTDECL(bool) RTThreadIsMain(RTTHREAD hThread); + +/** + * Checks if the calling thread is known to IPRT. + * + * @returns @c true if it is, @c false if it isn't. + */ +RTDECL(bool) RTThreadIsSelfKnown(void); + +/** + * Checks if the calling thread is know to IPRT and is alive. + * + * @returns @c true if it is, @c false if it isn't. + */ +RTDECL(bool) RTThreadIsSelfAlive(void); + +/** + * Checks if the calling thread is known to IPRT. + * + * @returns @c true if it is, @c false if it isn't. + */ +RTDECL(bool) RTThreadIsOperational(void); + +/** + * Signal the user event. + * + * @returns iprt status code. + */ +RTDECL(int) RTThreadUserSignal(RTTHREAD Thread); + +/** + * Wait for the user event. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + */ +RTDECL(int) RTThreadUserWait(RTTHREAD Thread, RTMSINTERVAL cMillies); + +/** + * Wait for the user event, return on interruption. + * + * @returns iprt status code. + * @param Thread The thread to wait for. + * @param cMillies The number of milliseconds to wait. Use RT_INDEFINITE_WAIT for + * an indefinite wait. + */ +RTDECL(int) RTThreadUserWaitNoResume(RTTHREAD Thread, RTMSINTERVAL cMillies); + +/** + * Reset the user event. + * + * @returns iprt status code. + * @param Thread The thread to reset. + */ +RTDECL(int) RTThreadUserReset(RTTHREAD Thread); + +/** + * Pokes the thread. + * + * This will signal the thread, attempting to interrupt whatever it's currently + * doing. This is *NOT* implemented on all platforms and may cause unresolved + * symbols during linking or VERR_NOT_IMPLEMENTED at runtime. + * + * @returns IPRT status code. + * + * @param hThread The thread to poke. This must not be the + * calling thread. + */ +RTDECL(int) RTThreadPoke(RTTHREAD hThread); + +# ifdef IN_RING0 + +/** + * Check if preemption is currently enabled or not for the current thread. + * + * @note This may return true even on systems where preemption isn't + * possible. In that case, it means no call to RTThreadPreemptDisable + * has been made and interrupts are still enabled. + * + * @returns true if preemption is enabled, false if preemetion is disabled. + * @param hThread Must be NIL_RTTHREAD for now. + */ +RTDECL(bool) RTThreadPreemptIsEnabled(RTTHREAD hThread); + +/** + * Check if preemption is pending for the current thread. + * + * This function should be called regularly when executing larger portions of + * code with preemption disabled. + * + * @returns true if pending, false if not. + * @param hThread Must be NIL_RTTHREAD for now. + */ +RTDECL(bool) RTThreadPreemptIsPending(RTTHREAD hThread); + +/** + * Is RTThreadPreemptIsPending reliable? + * + * @returns true if reliable, false if not. + */ +RTDECL(bool) RTThreadPreemptIsPendingTrusty(void); + +/** + * Is preemption possible on this system. + * + * @returns true if possible, false if not. + */ +RTDECL(bool) RTThreadPreemptIsPossible(void); + +/** + * Preemption state saved by RTThreadPreemptDisable and used by + * RTThreadPreemptRestore to restore the previous state. + */ +typedef struct RTTHREADPREEMPTSTATE +{ + /** In debug builds this will be used to check for cpu migration. */ + RTCPUID idCpu; +# ifdef RT_OS_WINDOWS + /** The old IRQL. Don't touch! */ + unsigned char uchOldIrql; + /** Reserved, MBZ. */ + uint8_t bReserved1; + /** Reserved, MBZ. */ + uint8_t bReserved2; + /** Reserved, MBZ. */ + uint8_t bReserved3; +# define RTTHREADPREEMPTSTATE_INITIALIZER { NIL_RTCPUID, 255, 0, 0, 0 } +# elif defined(RT_OS_HAIKU) + /** The cpu_state. Don't touch! */ + uint32_t uOldCpuState; +# define RTTHREADPREEMPTSTATE_INITIALIZER { NIL_RTCPUID, 0 } +# elif defined(RT_OS_SOLARIS) + /** The Old PIL. Don't touch! */ + uint32_t uOldPil; +# define RTTHREADPREEMPTSTATE_INITIALIZER { NIL_RTCPUID, UINT32_MAX } +# else + /** Reserved, MBZ. */ + uint32_t u32Reserved; +# define RTTHREADPREEMPTSTATE_INITIALIZER { NIL_RTCPUID, 0 } +# endif +} RTTHREADPREEMPTSTATE; +/** Pointer to a preemption state. */ +typedef RTTHREADPREEMPTSTATE *PRTTHREADPREEMPTSTATE; + +/** + * Disable preemption. + * + * A call to this function must be matched by exactly one call to + * RTThreadPreemptRestore(). + * + * @param pState Where to store the preemption state. + */ +RTDECL(void) RTThreadPreemptDisable(PRTTHREADPREEMPTSTATE pState); + +/** + * Restores the preemption state, undoing a previous call to + * RTThreadPreemptDisable. + * + * A call to this function must be matching a previous call to + * RTThreadPreemptDisable. + * + * @param pState The state return by RTThreadPreemptDisable. + */ +RTDECL(void) RTThreadPreemptRestore(PRTTHREADPREEMPTSTATE pState); + +/** + * Check if the thread is executing in interrupt context. + * + * @returns true if in interrupt context, false if not. + * @param hThread Must be NIL_RTTHREAD for now. + */ +RTDECL(bool) RTThreadIsInInterrupt(RTTHREAD hThread); + + +/** + * Thread context swithcing events. + */ +typedef enum RTTHREADCTXEVENT +{ + /** This thread is being scheduled out on the current CPU (includes preemption, + * waiting, sleep and whatever else may trigger scheduling). */ + RTTHREADCTXEVENT_OUT = 0, + /** This thread is being scheduled in on the current CPU and will resume + * execution. */ + RTTHREADCTXEVENT_IN, + /** The usual 32-bit size hack. */ + RTTHREADCTXEVENT_32BIT_HACK = 0x7fffffff +} RTTHREADCTXEVENT; + +/** + * Thread context switching hook callback. + * + * This hook function is called when a thread is scheduled and preempted. Check + * @a enmEvent to see which it is. Since the function is being called from + * hooks inside the scheduler, it is limited what you can do from this function. + * Do NOT acquire locks, sleep or yield the thread for instance. IRQ safe + * spinlocks are fine though. + * + * @returns IPRT status code. + * @param enmEvent The thread-context event. Please quitely ignore unknown + * events, we may add more (thread exit, ++) later. + * @param pvUser User argument. + */ +typedef DECLCALLBACK(void) FNRTTHREADCTXHOOK(RTTHREADCTXEVENT enmEvent, void *pvUser); +/** Pointer to a context switching hook. */ +typedef FNRTTHREADCTXHOOK *PFNRTTHREADCTXHOOK; + +/** + * Initializes a thread context switching hook for the current thread. + * + * The hook is created as disabled, use RTThreadCtxHookEnable to enable it. + * + * @returns IPRT status code. + * @param phCtxHook Where to store the hook handle. + * @param fFlags Reserved for future extensions, must be zero. + * @param pfnCallback Pointer to a the hook function (callback) that + * should be called for all context switching events + * involving the current thread. + * @param pvUser User argument that will be passed to @a pfnCallback. + * @remarks Preemption must be enabled. + */ +RTDECL(int) RTThreadCtxHookCreate(PRTTHREADCTXHOOK phCtxHook, uint32_t fFlags, PFNRTTHREADCTXHOOK pfnCallback, void *pvUser); + +/** + * Destroys a thread context switching hook. + * + * Caller must make sure the hook is disabled before the final reference is + * released. Recommended to call this on the owning thread, otherwise the + * memory backing it may on some systems only be released when the thread + * terminates. + * + * @returns IPRT status code. + * + * @param hCtxHook The context hook handle. NIL_RTTHREADCTXHOOK is + * ignored and the function will return VINF_SUCCESS. + * @remarks Preemption must be enabled. + * @remarks Do not call from FNRTTHREADCTXHOOK. + */ +RTDECL(int) RTThreadCtxHookDestroy(RTTHREADCTXHOOK hCtxHook); + +/** + * Enables the context switching hooks for the current thread. + * + * @returns IPRT status code. + * @param hCtxHook The context hook handle. + * @remarks Should be called with preemption disabled. + */ +RTDECL(int) RTThreadCtxHookEnable(RTTHREADCTXHOOK hCtxHook); + +/** + * Disables the thread context switching hook for the current thread. + * + * Will not assert or fail if called twice or with a NIL handle. + * + * @returns IPRT status code. + * @param hCtxHook The context hook handle. NIL_RTTHREADCTXHOOK is + * ignored and the function wil return VINF_SUCCESS. + * @remarks Should be called with preemption disabled. + * @remarks Do not call from FNRTTHREADCTXHOOK. + */ +RTDECL(int) RTThreadCtxHookDisable(RTTHREADCTXHOOK hCtxHook); + +/** + * Is the thread context switching hook enabled? + * + * @returns true if registered, false if not supported or not registered. + * @param hCtxHook The context hook handle. NIL_RTTHREADCTXHOOK is + * ignored and the function will return false. + * + * @remarks Can be called from any thread, though is naturally subject to races + * when not called from the thread associated with the hook. + */ +RTDECL(bool) RTThreadCtxHookIsEnabled(RTTHREADCTXHOOK hCtxHook); + +# endif /* IN_RING0 */ + + +# ifdef IN_RING3 + +/** + * Adopts a non-IPRT thread. + * + * @returns IPRT status code. + * @param enmType The thread type. + * @param fFlags The thread flags. RTTHREADFLAGS_WAITABLE is not currently allowed. + * @param pszName The thread name. Optional + * @param pThread Where to store the thread handle. Optional. + */ +RTDECL(int) RTThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, const char *pszName, PRTTHREAD pThread); + +/** + * Get the thread handle of the current thread, automatically adopting alien + * threads. + * + * @returns Thread handle. + */ +RTDECL(RTTHREAD) RTThreadSelfAutoAdopt(void); + +/** + * Gets the affinity mask of the current thread. + * + * @returns IPRT status code. + * @param pCpuSet Where to return the CPU affienty set of the calling + * thread. + */ +RTR3DECL(int) RTThreadGetAffinity(PRTCPUSET pCpuSet); + +/** + * Sets the affinity mask of the current thread. + * + * @returns iprt status code. + * @param pCpuSet The set of CPUs this thread can run on. NULL means + * all CPUs. + */ +RTR3DECL(int) RTThreadSetAffinity(PCRTCPUSET pCpuSet); + +/** + * Binds the thread to one specific CPU. + * + * @returns iprt status code. + * @param idCpu The ID of the CPU to bind this thread to. Use + * NIL_RTCPUID to unbind it. + */ +RTR3DECL(int) RTThreadSetAffinityToCpu(RTCPUID idCpu); + +/** + * Unblocks a thread. + * + * This function is paired with RTThreadBlocking and RTThreadBlockingDebug. + * + * @param hThread The current thread. + * @param enmCurState The current state, used to check for nested blocking. + * The new state will be running. + */ +RTDECL(void) RTThreadUnblocked(RTTHREAD hThread, RTTHREADSTATE enmCurState); + +/** + * Change the thread state to blocking. + * + * @param hThread The current thread. + * @param enmState The sleep state. + * @param fReallySleeping Really going to sleep now. Use false before calls + * to other IPRT synchronization methods. + */ +RTDECL(void) RTThreadBlocking(RTTHREAD hThread, RTTHREADSTATE enmState, bool fReallySleeping); + +/** + * Get the current thread state. + * + * A thread that is reported as sleeping may actually still be running inside + * the lock validator or/and in the code of some other IPRT synchronization + * primitive. Use RTThreadGetReallySleeping + * + * @returns The thread state. + * @param hThread The thread. + */ +RTDECL(RTTHREADSTATE) RTThreadGetState(RTTHREAD hThread); + +/** + * Checks if the thread is really sleeping or not. + * + * @returns RTTHREADSTATE_RUNNING if not really sleeping, otherwise the state it + * is sleeping in. + * @param hThread The thread. + */ +RTDECL(RTTHREADSTATE) RTThreadGetReallySleeping(RTTHREAD hThread); + +/** + * Translate a thread state into a string. + * + * @returns Pointer to a read-only string containing the state name. + * @param enmState The state. + */ +RTDECL(const char *) RTThreadStateName(RTTHREADSTATE enmState); + + +/** + * Native thread states returned by RTThreadNativeState. + */ +typedef enum RTTHREADNATIVESTATE +{ + /** Invalid thread handle. */ + RTTHREADNATIVESTATE_INVALID = 0, + /** Unable to determine the thread state. */ + RTTHREADNATIVESTATE_UNKNOWN, + /** The thread is running. */ + RTTHREADNATIVESTATE_RUNNING, + /** The thread is blocked. */ + RTTHREADNATIVESTATE_BLOCKED, + /** The thread is suspended / stopped. */ + RTTHREADNATIVESTATE_SUSPENDED, + /** The thread has terminated. */ + RTTHREADNATIVESTATE_TERMINATED, + /** Make sure it's a 32-bit type. */ + RTTHREADNATIVESTATE_32BIT_HACK = 0x7fffffff +} RTTHREADNATIVESTATE; + + +/** + * Get the native state of a thread. + * + * @returns Native state. + * @param hThread The thread handle. + * + * @remarks Not yet implemented on all systems, so have a backup plan for + * RTTHREADNATIVESTATE_UNKNOWN. + */ +RTDECL(RTTHREADNATIVESTATE) RTThreadGetNativeState(RTTHREAD hThread); + + +/** + * Get the execution times of the specified thread + * + * @returns IPRT status code. + * @param pKernelTime Kernel execution time in ms (out) + * @param pUserTime User execution time in ms (out) + * + */ +RTR3DECL(int) RTThreadGetExecutionTimeMilli(uint64_t *pKernelTime, uint64_t *pUserTime); + +/** @name Thread Local Storage + * @{ + */ +/** + * Thread termination callback for destroying a non-zero TLS entry. + * + * @remarks It is not permitable to use any RTTls APIs at this time. Doing so + * may lead to endless loops, crashes, and other bad stuff. + * + * @param pvValue The current value. + */ +typedef DECLCALLBACK(void) FNRTTLSDTOR(void *pvValue); +/** Pointer to a FNRTTLSDTOR. */ +typedef FNRTTLSDTOR *PFNRTTLSDTOR; + +/** + * Allocates a TLS entry (index). + * + * Example code: + * @code + RTTLS g_iTls = NIL_RTTLS; + + ... + + // once for the process, allocate the TLS index + if (g_iTls == NIL_RTTLS) + g_iTls = RTTlsAlloc(); + + // set the thread-local value. + RTTlsSet(g_iTls, pMyData); + + ... + + // get the thread-local value + PMYDATA pMyData = (PMYDATA)RTTlsGet(g_iTls); + + @endcode + * + * @returns the index of the allocated TLS entry. + * @returns NIL_RTTLS on failure. + */ +RTR3DECL(RTTLS) RTTlsAlloc(void); + +/** + * Variant of RTTlsAlloc that returns a status code. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if pfnDestructor is non-NULL and the platform + * doesn't support this feature. + * + * @param piTls Where to store the index of the allocated TLS entry. + * This is set to NIL_RTTLS on failure. + * @param pfnDestructor Optional callback function for cleaning up on + * thread termination. WARNING! This feature may not + * be implemented everywhere. + */ +RTR3DECL(int) RTTlsAllocEx(PRTTLS piTls, PFNRTTLSDTOR pfnDestructor); + +/** + * Frees a TLS entry. + * + * @returns IPRT status code. + * @param iTls The index of the TLS entry. + */ +RTR3DECL(int) RTTlsFree(RTTLS iTls); + +/** + * Get the (thread-local) value stored in a TLS entry. + * + * @returns value in given TLS entry. + * @retval NULL if RTTlsSet() has not yet been called on this thread, or if the + * TLS index is invalid. + * + * @param iTls The index of the TLS entry. + */ +RTR3DECL(void *) RTTlsGet(RTTLS iTls); + +/** + * Get the value stored in a TLS entry. + * + * @returns IPRT status code. + * @param iTls The index of the TLS entry. + * @param ppvValue Where to store the value. The value will be NULL if + * RTTlsSet has not yet been called on this thread. + */ +RTR3DECL(int) RTTlsGetEx(RTTLS iTls, void **ppvValue); + +/** + * Set the value stored in an allocated TLS entry. + * + * @returns IPRT status. + * @param iTls The index of the TLS entry. + * @param pvValue The value to store. + * + * @remarks Note that NULL is considered a special value. + */ +RTR3DECL(int) RTTlsSet(RTTLS iTls, void *pvValue); + +/** @} */ + +# endif /* IN_RING3 */ +# endif /* !IN_RC */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/time.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/time.h @@ -0,0 +1,1110 @@ +/** @file + * IPRT - Time. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_time_h +#define ___iprt_time_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_time RTTime - Time + * @ingroup grp_rt + * @{ + */ + +/** Time Specification. + * + * Use the inline RTTimeSpecGet/Set to operate on structure this so we + * can easily change the representation if required later. + * + * The current representation is in nanoseconds relative to the unix epoch + * (1970-01-01 00:00:00 UTC). This gives us an approximate span from + * 1678 to 2262 without sacrificing the resolution offered by the various + * host OSes (BSD & LINUX 1ns, NT 100ns). + */ +typedef struct RTTIMESPEC +{ + /** Nanoseconds since epoch. + * The name is intentially too long to be comfortable to use because you should be + * using inline helpers! */ + int64_t i64NanosecondsRelativeToUnixEpoch; +} RTTIMESPEC; + + +/** @name RTTIMESPEC methods + * @{ */ + +/** + * Gets the time as nanoseconds relative to the unix epoch. + * + * @returns Nanoseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetNano(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch; +} + + +/** + * Sets the time give by nanoseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The new time in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Nano; + return pTime; +} + + +/** + * Gets the time as microseconds relative to the unix epoch. + * + * @returns microseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetMicro(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1US; +} + + +/** + * Sets the time given by microseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The new time in microsecond. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Gets the time as milliseconds relative to the unix epoch. + * + * @returns milliseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetMilli(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1MS; +} + + +/** + * Sets the time given by milliseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The new time in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Gets the time as seconds relative to the unix epoch. + * + * @returns seconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetSeconds(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1SEC; +} + + +/** + * Sets the time given by seconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The new time in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Makes the time spec absolute like abs() does (i.e. a positive value). + * + * @returns pTime. + * @param pTime The time spec to modify. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAbsolute(PRTTIMESPEC pTime) +{ + if (pTime->i64NanosecondsRelativeToUnixEpoch < 0) + pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Negates the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecNegate(PRTTIMESPEC pTime) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Adds a time period to the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeAdd The time spec to add to pTime. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAdd(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeAdd) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += pTimeAdd->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Adds a time period give as nanoseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The time period in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Nano; + return pTime; +} + + +/** + * Adds a time period give as microseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The time period in microseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Adds a time period give as milliseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The time period in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Adds a time period give as seconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The time period in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Subtracts a time period from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeSub The time spec to subtract from pTime. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSub(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeSub) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= pTimeSub->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Subtracts a time period give as nanoseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The time period in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Nano; + return pTime; +} + + +/** + * Subtracts a time period give as microseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The time period in microseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Subtracts a time period give as milliseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The time period in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Subtracts a time period give as seconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The time period in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Gives the time in seconds and nanoseconds. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param *pi32Seconds Where to store the time period in seconds. + * @param *pi32Nano Where to store the time period in nanoseconds. + */ +DECLINLINE(void) RTTimeSpecGetSecondsAndNano(PRTTIMESPEC pTime, int32_t *pi32Seconds, int32_t *pi32Nano) +{ + int64_t i64 = RTTimeSpecGetNano(pTime); + int32_t i32Nano = (int32_t)(i64 % RT_NS_1SEC); + i64 /= RT_NS_1SEC; + if (i32Nano < 0) + { + i32Nano += RT_NS_1SEC; + i64--; + } + *pi32Seconds = (int32_t)i64; + *pi32Nano = i32Nano; +} + + +/* PORTME: Add struct timeval guard macro here. */ +#if defined(RTTIME_INCL_TIMEVAL) || defined(_STRUCT_TIMEVAL) || defined(_SYS__TIMEVAL_H_) || defined(_SYS_TIME_H) || defined(_TIMEVAL) || defined(_LINUX_TIME_H) \ + || (defined(RT_OS_NETBSD) && defined(_SYS_TIME_H_)) +/** + * Gets the time as POSIX timeval. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param pTimeval Where to store the time as POSIX timeval. + */ +DECLINLINE(struct timeval *) RTTimeSpecGetTimeval(PCRTTIMESPEC pTime, struct timeval *pTimeval) +{ + int64_t i64 = RTTimeSpecGetMicro(pTime); + int32_t i32Micro = (int32_t)(i64 % RT_US_1SEC); + i64 /= RT_US_1SEC; + if (i32Micro < 0) + { + i32Micro += RT_US_1SEC; + i64--; + } + pTimeval->tv_sec = (time_t)i64; + pTimeval->tv_usec = i32Micro; + return pTimeval; +} + +/** + * Sets the time as POSIX timeval. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeval Pointer to the POSIX timeval struct with the new time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimeval(PRTTIMESPEC pTime, const struct timeval *pTimeval) +{ + return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec); +} +#endif /* various ways of detecting struct timeval */ + + +/* PORTME: Add struct timespec guard macro here. */ +#if defined(RTTIME_INCL_TIMESPEC) || defined(_STRUCT_TIMESPEC) || defined(_SYS__TIMESPEC_H_) || defined(TIMEVAL_TO_TIMESPEC) || defined(_TIMESPEC) \ + || (defined(RT_OS_NETBSD) && defined(_SYS_TIME_H_)) +/** + * Gets the time as POSIX timespec. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param pTimespec Where to store the time as POSIX timespec. + */ +DECLINLINE(struct timespec *) RTTimeSpecGetTimespec(PCRTTIMESPEC pTime, struct timespec *pTimespec) +{ + int64_t i64 = RTTimeSpecGetNano(pTime); + int32_t i32Nano = (int32_t)(i64 % RT_NS_1SEC); + i64 /= RT_NS_1SEC; + if (i32Nano < 0) + { + i32Nano += RT_NS_1SEC; + i64--; + } + pTimespec->tv_sec = (time_t)i64; + pTimespec->tv_nsec = i32Nano; + return pTimespec; +} + +/** + * Sets the time as POSIX timespec. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimespec Pointer to the POSIX timespec struct with the new time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimespec(PRTTIMESPEC pTime, const struct timespec *pTimespec) +{ + return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimespec->tv_sec), pTimespec->tv_nsec); +} +#endif /* various ways of detecting struct timespec */ + + + +/** The offset of the unix epoch and the base for NT time (in 100ns units). + * Nt time starts at 1601-01-01 00:00:00. */ +#define RTTIME_NT_TIME_OFFSET_UNIX (116444736000000000LL) + + +/** + * Gets the time as NT time. + * + * @returns Nt time. + * @param pTime The time spec to interpret. + */ +DECLINLINE(uint64_t) RTTimeSpecGetNtTime(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / 100 + + RTTIME_NT_TIME_OFFSET_UNIX; +} + + +/** + * Sets the time given by Nt time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param u64NtTime The new time in Nt time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtTime(PRTTIMESPEC pTime, uint64_t u64NtTime) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = + ((int64_t)u64NtTime - RTTIME_NT_TIME_OFFSET_UNIX) * 100; + return pTime; +} + + +#ifdef _FILETIME_ +/** + * Gets the time as NT file time. + * + * @returns pFileTime. + * @param pTime The time spec to interpret. + * @param pFileTime Pointer to NT filetime structure. + */ +DECLINLINE(PFILETIME) RTTimeSpecGetNtFileTime(PCRTTIMESPEC pTime, PFILETIME pFileTime) +{ + *((uint64_t *)pFileTime) = RTTimeSpecGetNtTime(pTime); + return pFileTime; +} + +/** + * Sets the time as NT file time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pFileTime Where to store the time as Nt file time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtFileTime(PRTTIMESPEC pTime, const FILETIME *pFileTime) +{ + return RTTimeSpecSetNtTime(pTime, *(const uint64_t *)pFileTime); +} +#endif + + +/** The offset to the start of DOS time. + * DOS time starts 1980-01-01 00:00:00. */ +#define RTTIME_OFFSET_DOS_TIME (315532800000000000LL) + + +/** + * Gets the time as seconds relative to the start of dos time. + * + * @returns seconds relative to the start of dos time. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetDosSeconds(PCRTTIMESPEC pTime) +{ + return (pTime->i64NanosecondsRelativeToUnixEpoch - RTTIME_OFFSET_DOS_TIME) + / RT_NS_1SEC; +} + + +/** + * Sets the time given by seconds relative to the start of dos time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The new time in seconds relative to the start of dos time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetDosSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * RT_NS_1SEC + + RTTIME_OFFSET_DOS_TIME; + return pTime; +} + + +/** + * Compare two time specs. + * + * @returns true they are equal. + * @returns false they are not equal. + * @param pTime1 The 1st time spec. + * @param pTime2 The 2nd time spec. + */ +DECLINLINE(bool) RTTimeSpecIsEqual(PCRTTIMESPEC pTime1, PCRTTIMESPEC pTime2) +{ + return pTime1->i64NanosecondsRelativeToUnixEpoch == pTime2->i64NanosecondsRelativeToUnixEpoch; +} + + +/** + * Compare two time specs. + * + * @returns 0 if equal, -1 if @a pLeft is smaller, 1 if @a pLeft is larger. + * @returns false they are not equal. + * @param pLeft The 1st time spec. + * @param pRight The 2nd time spec. + */ +DECLINLINE(int) RTTimeSpecCompare(PCRTTIMESPEC pLeft, PCRTTIMESPEC pRight) +{ + if (pLeft->i64NanosecondsRelativeToUnixEpoch == pRight->i64NanosecondsRelativeToUnixEpoch) + return 0; + return pLeft->i64NanosecondsRelativeToUnixEpoch < pRight->i64NanosecondsRelativeToUnixEpoch ? -1 : 1; +} + + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time spec. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeSpecToString(PCRTTIMESPEC pTime, char *psz, size_t cb); + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime The time spec. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIMESPEC) RTTimeSpecFromString(PRTTIMESPEC pTime, const char *pszString); + +/** @} */ + + +/** + * Exploded time. + */ +#pragma pack(1) +typedef struct RTTIME +{ + /** The year number. */ + int32_t i32Year; + /** The month of the year (1-12). January is 1. */ + uint8_t u8Month; + /** The day of the week (0-6). Monday is 0. */ + uint8_t u8WeekDay; + /** The day of the year (1-366). January the 1st is 1. */ + uint16_t u16YearDay; + /** The day of the month (1-31). */ + uint8_t u8MonthDay; + /** Hour of the day (0-23). */ + uint8_t u8Hour; + /** The minute of the hour (0-59). */ + uint8_t u8Minute; + /** The second of the minute (0-60). + * (u32Nanosecond / 1000000) */ + uint8_t u8Second; + /** The nanoseconds of the second (0-999999999). */ + uint32_t u32Nanosecond; + /** Flags, of the RTTIME_FLAGS_* \#defines. */ + uint32_t fFlags; + /** UCT time offset in minutes (-840-840). + * @remarks The implementation of RTTimeLocal* isn't quite there yet, so this might not be 100% correct. */ + int32_t offUTC; +} RTTIME; +#pragma pack() +/** Pointer to a exploded time structure. */ +typedef RTTIME *PRTTIME; +/** Pointer to a const exploded time structure. */ +typedef const RTTIME *PCRTTIME; + +/** @name RTTIME::fFlags values. + * @{ */ +/** Set if the time is UTC. If clear the time local time. */ +#define RTTIME_FLAGS_TYPE_MASK 3 +/** the time is UTC time. */ +#define RTTIME_FLAGS_TYPE_UTC 2 +/** The time is local time. */ +#define RTTIME_FLAGS_TYPE_LOCAL 3 + +/** Set if the time is local and daylight saving time is in effect. + * Not bit is not valid if RTTIME_FLAGS_NO_DST_DATA is set. */ +#define RTTIME_FLAGS_DST RT_BIT(4) +/** Set if the time is local and there is no data available on daylight saving time. */ +#define RTTIME_FLAGS_NO_DST_DATA RT_BIT(5) +/** Set if the year is a leap year. + * This is mutual exclusiv with RTTIME_FLAGS_COMMON_YEAR. */ +#define RTTIME_FLAGS_LEAP_YEAR RT_BIT(6) +/** Set if the year is a common year. + * This is mutual exclusiv with RTTIME_FLAGS_LEAP_YEAR. */ +#define RTTIME_FLAGS_COMMON_YEAR RT_BIT(7) +/** The mask of valid flags. */ +#define RTTIME_FLAGS_MASK UINT32_C(0xff) +/** @} */ + + +/** + * Gets the current system time (UTC). + * + * @returns pTime. + * @param pTime Where to store the time. + */ +RTDECL(PRTTIMESPEC) RTTimeNow(PRTTIMESPEC pTime); + +/** + * Sets the system time. + * + * @returns IPRT status code + * @param pTime The new system time (UTC). + * + * @remarks This will usually fail because changing the wall time is usually + * requires extra privileges. + */ +RTDECL(int) RTTimeSet(PCRTTIMESPEC pTime); + +/** + * Explodes a time spec (UTC). + * + * @returns pTime. + * @param pTime Where to store the exploded time. + * @param pTimeSpec The time spec to exploded. + */ +RTDECL(PRTTIME) RTTimeExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec); + +/** + * Implodes exploded time to a time spec (UTC). + * + * @returns pTime on success. + * @returns NULL if the pTime data is invalid. + * @param pTimeSpec Where to store the imploded UTC time. + * If pTime specifies a time which outside the range, maximum or + * minimum values will be returned. + * @param pTime Pointer to the exploded time to implode. + * The fields u8Month, u8WeekDay and u8MonthDay are not used, + * and all the other fields are expected to be within their + * bounds. Use RTTimeNormalize() to calculate u16YearDay and + * normalize the ranges of the fields. + */ +RTDECL(PRTTIMESPEC) RTTimeImplode(PRTTIMESPEC pTimeSpec, PCRTTIME pTime); + +/** + * Normalizes the fields of a time structure. + * + * It is possible to calculate year-day from month/day and vice + * versa. If you adjust any of of these, make sure to zero the + * other so you make it clear which of the fields to use. If + * it's ambiguous, the year-day field is used (and you get + * assertions in debug builds). + * + * All the time fields and the year-day or month/day fields will + * be adjusted for overflows. (Since all fields are unsigned, there + * is no underflows.) It is possible to exploit this for simple + * date math, though the recommended way of doing that to implode + * the time into a timespec and do the math on that. + * + * @returns pTime on success. + * @returns NULL if the data is invalid. + * + * @param pTime The time structure to normalize. + * + * @remarks This function doesn't work with local time, only with UTC time. + */ +RTDECL(PRTTIME) RTTimeNormalize(PRTTIME pTime); + +/** + * Gets the current local system time. + * + * @returns pTime. + * @param pTime Where to store the local time. + */ +RTDECL(PRTTIMESPEC) RTTimeLocalNow(PRTTIMESPEC pTime); + +/** + * Gets the delta between UTC and local time. + * + * @code + * RTTIMESPEC LocalTime; + * RTTimeSpecAddNano(RTTimeNow(&LocalTime), RTTimeLocalDeltaNano()); + * @endcode + * + * @returns Returns the nanosecond delta between UTC and local time. + */ +RTDECL(int64_t) RTTimeLocalDeltaNano(void); + +/** + * Explodes a time spec to the localized timezone. + * + * @returns pTime. + * @param pTime Where to store the exploded time. + * @param pTimeSpec The time spec to exploded (UTC). + */ +RTDECL(PRTTIME) RTTimeLocalExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec); + +/** + * Normalizes the fields of a time structure containing local time. + * + * See RTTimeNormalize for details. + * + * @returns pTime on success. + * @returns NULL if the data is invalid. + * @param pTime The time structure to normalize. + */ +RTDECL(PRTTIME) RTTimeLocalNormalize(PRTTIME pTime); + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time. Caller should've normalized this. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeToString(PCRTTIME pTime, char *psz, size_t cb); + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime Where to store the time on success. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIME) RTTimeFromString(PRTTIME pTime, const char *pszString); + +/** + * Checks if a year is a leap year or not. + * + * @returns true if it's a leap year. + * @returns false if it's a common year. + * @param i32Year The year in question. + */ +RTDECL(bool) RTTimeIsLeapYear(int32_t i32Year); + +/** + * Gets the current nanosecond timestamp. + * + * @returns nanosecond timestamp. + */ +RTDECL(uint64_t) RTTimeNanoTS(void); + +/** + * Gets the current millisecond timestamp. + * + * @returns millisecond timestamp. + */ +RTDECL(uint64_t) RTTimeMilliTS(void); + +/** + * Debugging the time api. + * + * @returns the number of 1ns steps which has been applied by RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgSteps(void); + +/** + * Debugging the time api. + * + * @returns the number of times the TSC interval expired RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgExpired(void); + +/** + * Debugging the time api. + * + * @returns the number of bad previous values encountered by RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgBad(void); + +/** + * Debugging the time api. + * + * @returns the number of update races in RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgRaces(void); + +/** @name RTTimeNanoTS GIP worker functions, for TM. + * @{ */ +/** Pointer to a RTTIMENANOTSDATA structure. */ +typedef struct RTTIMENANOTSDATA *PRTTIMENANOTSDATA; + +/** + * Nanosecond timestamp data. + * + * This is used to keep track of statistics and callback so IPRT + * and TM (VirtualBox) can share code. + * + * @remark Keep this in sync with the assembly version in timesupA.asm. + */ +typedef struct RTTIMENANOTSDATA +{ + /** Where the previous timestamp is stored. + * This is maintained to ensure that time doesn't go backwards or anything. */ + uint64_t volatile *pu64Prev; + + /** + * Helper function that's used by the assembly routines when something goes bust. + * + * @param pData Pointer to this structure. + * @param u64NanoTS The calculated nano ts. + * @param u64DeltaPrev The delta relative to the previously returned timestamp. + * @param u64PrevNanoTS The previously returned timestamp (as it was read it). + */ + DECLCALLBACKMEMBER(void, pfnBad)(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS); + + /** + * Callback for when rediscovery is required. + * + * @returns Nanosecond timestamp. + * @param pData Pointer to this structure. + */ + DECLCALLBACKMEMBER(uint64_t, pfnRediscover)(PRTTIMENANOTSDATA pData); + + /** + * Callback for when some CPU index related stuff goes wrong. + * + * @returns Nanosecond timestamp. + * @param pData Pointer to this structure. + * @param idApic The APIC ID if available, otherwise (UINT16_MAX-1). + * @param iCpuSet The CPU set index if available, otherwise + * (UINT16_MAX-1). + * @param iGipCpu The GIP CPU array index if available, otherwise + * (UINT16_MAX-1). + */ + DECLCALLBACKMEMBER(uint64_t, pfnBadCpuIndex)(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu); + + /** Number of 1ns steps because of overshooting the period. */ + uint32_t c1nsSteps; + /** The number of times the interval expired (overflow). */ + uint32_t cExpired; + /** Number of "bad" previous values. */ + uint32_t cBadPrev; + /** The number of update races. */ + uint32_t cUpdateRaces; +} RTTIMENANOTSDATA; + +#ifndef IN_RING3 +/** + * The Ring-3 layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATAR3 +{ + R3PTRTYPE(uint64_t volatile *) pu64Prev; + DECLR3CALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLR3CALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLR3CALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATAR3; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATAR3; +#endif + +#ifndef IN_RING0 +/** + * The Ring-3 layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATAR0 +{ + R0PTRTYPE(uint64_t volatile *) pu64Prev; + DECLR0CALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLR0CALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLR0CALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATAR0; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATAR0; +#endif + +#ifndef IN_RC +/** + * The RC layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATARC +{ + RCPTRTYPE(uint64_t volatile *) pu64Prev; + DECLRCCALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLRCCALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLRCCALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATARC; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATARC; +#endif + +/** Internal RTTimeNanoTS worker (assembly). */ +typedef DECLCALLBACK(uint64_t) FNTIMENANOTSINTERNAL(PRTTIMENANOTSDATA pData); +/** Pointer to an internal RTTimeNanoTS worker (assembly). */ +typedef FNTIMENANOTSINTERNAL *PFNTIMENANOTSINTERNAL; +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarNoDelta(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarNoDelta(PRTTIMENANOTSDATA pData); +#ifdef IN_RING3 +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim(PRTTIMENANOTSDATA pData); +#else +RTDECL(uint64_t) RTTimeNanoTSLegacyAsync(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDelta(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsync(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDelta(PRTTIMENANOTSDATA pData); +#endif + +/** @} */ + + +/** + * Gets the current nanosecond timestamp. + * + * This differs from RTTimeNanoTS in that it will use system APIs and not do any + * resolution or performance optimizations. + * + * @returns nanosecond timestamp. + */ +RTDECL(uint64_t) RTTimeSystemNanoTS(void); + +/** + * Gets the current millisecond timestamp. + * + * This differs from RTTimeNanoTS in that it will use system APIs and not do any + * resolution or performance optimizations. + * + * @returns millisecond timestamp. + */ +RTDECL(uint64_t) RTTimeSystemMilliTS(void); + +/** + * Get the nanosecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramNanoTS(void); + +/** + * Get the microsecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramMicroTS(void); + +/** + * Get the millisecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramMilliTS(void); + +/** + * Get the second timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint32_t) RTTimeProgramSecTS(void); + +/** + * Get the RTTimeNanoTS() of when the program started. + * + * @returns Program startup timestamp. + */ +RTDECL(uint64_t) RTTimeProgramStartNanoTS(void); + + +/** + * Time zone information. + */ +typedef struct RTTIMEZONEINFO +{ + /** Unix time zone name (continent/country[/city]|). */ + const char *pszUnixName; + /** Windows time zone name. */ + const char *pszWindowsName; + /** The length of the unix time zone name. */ + uint8_t cchUnixName; + /** The length of the windows time zone name. */ + uint8_t cchWindowsName; + /** Two letter country/territory code if applicable, otherwise 'ZZ'. */ + char szCountry[3]; + /** Two letter windows country/territory code if applicable. + * Empty string if no windows mapping. */ + char szWindowsCountry[3]; +#if 0 /* Add when needed and it's been extracted. */ + /** The standard delta in minutes (add to UTC). */ + int16_t cMinStdDelta; + /** The daylight saving time delta in minutes (add to UTC). */ + int16_t cMinDstDelta; +#endif + /** closest matching windows time zone index. */ + uint32_t idxWindows; + /** Flags, RTTIMEZONEINFO_F_XXX. */ + uint32_t fFlags; +} RTTIMEZONEINFO; +/** Pointer to time zone info. */ +typedef RTTIMEZONEINFO const *PCRTTIMEZONEINFO; + +/** @name RTTIMEZONEINFO_F_XXX - time zone info flags. + * @{ */ +/** Indicates golden mapping entry for a windows time zone name. */ +#define RTTIMEZONEINFO_F_GOLDEN RT_BIT_32(0) +/** @} */ + +/** + * Looks up static time zone information by unix name. + * + * @returns Pointer to info entry if found, NULL if not. + * @param pszName The unix zone name (TZ). + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByUnixName(const char *pszName); + +/** + * Looks up static time zone information by window name. + * + * @returns Pointer to info entry if found, NULL if not. + * @param pszName The windows zone name (reg key). + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByWindowsName(const char *pszName); + +/** + * Looks up static time zone information by windows index. + * + * @returns Pointer to info entry if found, NULL if not. + * @param idxZone The windows timezone index. + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByWindowsIndex(uint32_t idxZone); + +/** + * Get the current time zone (TZ). + * + * @returns IPRT status code. + * @param pszName Where to return the time zone name. + * @param cbName The size of the name buffer. + */ +RTDECL(int) RTTimeZoneGetCurrent(char *pszName, size_t cbName); + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/timer.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/timer.h @@ -0,0 +1,387 @@ +/** @file + * IPRT - Timer. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_timer_h +#define ___iprt_timer_h + + +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_timer RTTimer - Timer + * + * The IPRT timer API provides a simple abstraction of recurring and one-shot callback timers. + * + * Because of the great variation in the native APIs and the quality of + * the service delivered by those native APIs, the timers are operated + * on at best effort basis. + * + * All the ring-3 implementations are naturally at the mercy of the scheduler, + * which means that the callback rate might vary quite a bit and we might skip + * ticks. Many systems have a restriction that a process can only have one + * timer. IPRT currently makes no efforts at multiplexing timers in those kind + * of situations and will simply fail if you try to create more than one timer. + * + * Things are generally better in ring-0. The implementations will use interrupt + * time callbacks wherever available, and if not, resort to a high priority + * kernel thread. + * + * @ingroup grp_rt + * @{ + */ + + +/** Timer handle. */ +typedef struct RTTIMER *PRTTIMER; + +/** + * Timer callback function. + * + * The context this call is made in varies with different platforms and + * kernel / user mode IPRT. + * + * In kernel mode a timer callback should not waste time, it shouldn't + * waste stack and it should be prepared that some APIs might not work + * correctly because of weird OS restrictions in this context that we + * haven't discovered and avoided yet. Please fix those APIs so they + * at least avoid panics and weird behaviour. + * + * @param pTimer Timer handle. + * @param pvUser User argument. + * @param iTick The current timer tick. This is always 1 on the first + * callback after the timer was started. For omni timers + * this will be 1 when a cpu comes back online. + */ +typedef DECLCALLBACK(void) FNRTTIMER(PRTTIMER pTimer, void *pvUser, uint64_t iTick); +/** Pointer to FNRTTIMER() function. */ +typedef FNRTTIMER *PFNRTTIMER; + + +/** + * Create a recurring timer. + * + * @returns iprt status code. + * @param ppTimer Where to store the timer handle. + * @param uMilliesInterval Milliseconds between the timer ticks. + * This is rounded up to the system granularity. + * @param pfnTimer Callback function which shall be scheduled for execution + * on every timer tick. + * @param pvUser User argument for the callback. + * @see RTTimerCreateEx, RTTimerStart, RTTimerStop, RTTimerChangeInterval, + * RTTimerDestroy, RTTimerGetSystemGranularity + */ +RTDECL(int) RTTimerCreate(PRTTIMER *ppTimer, unsigned uMilliesInterval, PFNRTTIMER pfnTimer, void *pvUser); + +/** + * Create a suspended timer. + * + * @returns iprt status code. + * @retval VERR_NOT_SUPPORTED if an unsupported flag was specfied. + * @retval VERR_CPU_NOT_FOUND if the specified CPU + * + * @param ppTimer Where to store the timer handle. + * @param u64NanoInterval The interval between timer ticks specified in nanoseconds if it's + * a recurring timer. This is rounded to the fit the system timer granularity. + * For one shot timers, pass 0. + * @param fFlags Timer flags. + * @param pfnTimer Callback function which shall be scheduled for execution + * on every timer tick. + * @param pvUser User argument for the callback. + * @see RTTimerStart, RTTimerStop, RTTimerChangeInterval, RTTimerDestroy, + * RTTimerGetSystemGranularity, RTTimerCanDoHighResolution + */ +RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_t fFlags, PFNRTTIMER pfnTimer, void *pvUser); + +/** @name RTTimerCreateEx flags + * @{ */ +/** Any CPU is fine. (Must be 0.) */ +#define RTTIMER_FLAGS_CPU_ANY UINT32_C(0) +/** One specific CPU */ +#define RTTIMER_FLAGS_CPU_SPECIFIC RT_BIT(16) +/** Omni timer, run on all online CPUs. + * @remarks The timer callback isn't necessarily running at the time same time on each CPU. */ +#define RTTIMER_FLAGS_CPU_ALL ( RTTIMER_FLAGS_CPU_MASK | RTTIMER_FLAGS_CPU_SPECIFIC ) +/** CPU mask. */ +#define RTTIMER_FLAGS_CPU_MASK UINT32_C(0xffff) +/** Desire a high resolution timer that works with RTTimerChangeInterval and + * isn't subject to RTTimerGetSystemGranularity rounding. + * @remarks This is quietly ignored if the feature isn't supported. */ +#define RTTIMER_FLAGS_HIGH_RES RT_BIT(17) +/** Convert a CPU set index (0-based) to RTTimerCreateEx flags. + * This will automatically OR in the RTTIMER_FLAGS_CPU_SPECIFIC flag. */ +#define RTTIMER_FLAGS_CPU(iCpu) ( (iCpu) | RTTIMER_FLAGS_CPU_SPECIFIC ) +/** Macro that validates the flags. */ +#define RTTIMER_FLAGS_ARE_VALID(fFlags) \ + ( !((fFlags) & ~((fFlags) & RTTIMER_FLAGS_CPU_SPECIFIC ? UINT32_C(0x3ffff) : UINT32_C(0x30000))) ) +/** @} */ + +/** + * Stops and destroys a running timer. + * + * @returns iprt status code. + * @retval VERR_INVALID_CONTEXT if executing at the wrong IRQL (windows), PIL + * (solaris), or similar. Portable code does not destroy timers with + * preemption (or interrupts) disabled. + * @param pTimer Timer to stop and destroy. NULL is ok. + */ +RTDECL(int) RTTimerDestroy(PRTTIMER pTimer); + +/** + * Starts a suspended timer. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_TIMER_ACTIVE if the timer isn't suspended. + * @retval VERR_CPU_OFFLINE if the CPU the timer was created to run on is not + * online (this include the case where it's not present in the + * system). + * + * @param pTimer The timer to activate. + * @param u64First The RTTimeSystemNanoTS() for when the timer should start + * firing (relative). If 0 is specified, the timer will + * fire ASAP. + * @remarks When RTTimerCanDoHighResolution returns true, this API is + * callable with preemption disabled in ring-0. + * @see RTTimerStop + */ +RTDECL(int) RTTimerStart(PRTTIMER pTimer, uint64_t u64First); + +/** + * Stops an active timer. + * + * @todo May return while the timer callback function is being services on + * some platforms (ring-0 Windows, ring-0 linux). This needs to be + * addressed at some point... + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_TIMER_SUSPENDED if the timer isn't active. + * @retval VERR_NOT_SUPPORTED if the IPRT implementation doesn't support + * stopping a timer. + * + * @param pTimer The timer to suspend. + * @remarks Can be called from the timer callback function to stop it. + * @see RTTimerStart + */ +RTDECL(int) RTTimerStop(PRTTIMER pTimer); + +/** + * Changes the interval of a periodic timer. + * + * If the timer is active, it is implementation dependent whether the change + * takes place immediately or after the next tick. To get defined behavior, + * stop the timer before calling this API. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_NOT_SUPPORTED if not supported. + * @retval VERR_INVALID_STATE if not a periodic timer. + * + * @param pTimer The timer to activate. + * @param u64NanoInterval The interval between timer ticks specified in + * nanoseconds. This is rounded to the fit the + * system timer granularity. + * @remarks Callable from the timer callback. Callable with preemption + * disabled in ring-0. + */ +RTDECL(int) RTTimerChangeInterval(PRTTIMER pTimer, uint64_t u64NanoInterval); + +/** + * Gets the (current) timer granularity of the system. + * + * @returns The timer granularity of the system in nanoseconds. + * @see RTTimerRequestSystemGranularity + */ +RTDECL(uint32_t) RTTimerGetSystemGranularity(void); + +/** + * Requests a specific system timer granularity. + * + * Successfull calls to this API must be coupled with the exact same number of + * calls to RTTimerReleaseSystemGranularity() in order to undo any changes made. + * + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if the requested value isn't supported by the host platform + * or if the host platform doesn't support modifying the system timer granularity. + * @retval VERR_PERMISSION_DENIED if the caller doesn't have the necessary privilege to + * modify the system timer granularity. + * + * @param u32Request The requested system timer granularity in nanoseconds. + * @param pu32Granted Where to store the granted system granularity. This is the value + * that should be passed to RTTimerReleaseSystemGranularity(). It + * is what RTTimerGetSystemGranularity() would return immediately + * after the change was made. + * + * The value differ from the request in two ways; rounding and + * scale. Meaning if your request is for 10.000.000 you might + * be granted 10.000.055 or 1.000.000. + * @see RTTimerReleaseSystemGranularity, RTTimerGetSystemGranularity + */ +RTDECL(int) RTTimerRequestSystemGranularity(uint32_t u32Request, uint32_t *pu32Granted); + +/** + * Releases a system timer granularity grant acquired by RTTimerRequestSystemGranularity(). + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if the host platform doesn't have any way of modifying + * the system timer granularity. + * @retval VERR_WRONG_ORDER if nobody call RTTimerRequestSystemGranularity() with the + * given grant value. + * @param u32Granted The granted system granularity. + * @see RTTimerRequestSystemGranularity + */ +RTDECL(int) RTTimerReleaseSystemGranularity(uint32_t u32Granted); + +/** + * Checks if the system support high resolution timers. + * + * The kind of support we are checking for is the kind of dynamically + * reprogrammable timers employed by recent Solaris and Linux kernels. It also + * implies that we can specify microsecond (or even better maybe) intervals + * without getting into trouble. + * + * @returns true if supported, false it not. + * + * @remarks Returning true also means RTTimerChangeInterval must be implemented + * and RTTimerStart be callable with preemption disabled. + */ +RTDECL(bool) RTTimerCanDoHighResolution(void); + + +/** + * Timer callback function for low res timers. + * + * This is identical to FNRTTIMER except for the first parameter, so + * see FNRTTIMER for details. + * + * @param hTimerLR The low resolution timer handle. + * @param pvUser User argument. + * @param iTick The current timer tick. This is always 1 on the first + * callback after the timer was started. Will jump if we've + * skipped ticks when lagging behind. + */ +typedef DECLCALLBACK(void) FNRTTIMERLR(RTTIMERLR hTimerLR, void *pvUser, uint64_t iTick); +/** Pointer to FNRTTIMER() function. */ +typedef FNRTTIMERLR *PFNRTTIMERLR; + + +/** + * Create a recurring low resolution timer. + * + * @returns iprt status code. + * @param phTimerLR Where to store the timer handle. + * @param uMilliesInterval Milliseconds between the timer ticks, at least 100 ms. + * If higher resolution is required use the other API. + * @param pfnTimer Callback function which shall be scheduled for execution + * on every timer tick. + * @param pvUser User argument for the callback. + * @see RTTimerLRCreateEx, RTTimerLRDestroy, RTTimerLRStop + */ +RTDECL(int) RTTimerLRCreate(PRTTIMERLR phTimerLR, uint32_t uMilliesInterval, PFNRTTIMERLR pfnTimer, void *pvUser); + +/** + * Create a suspended low resolution timer. + * + * @returns iprt status code. + * @retval VERR_NOT_SUPPORTED if an unsupported flag was specfied. + * + * @param phTimerLR Where to store the timer handle. + * @param u64NanoInterval The interval between timer ticks specified in nanoseconds if it's + * a recurring timer, the minimum for is 100000000 ns. + * For one shot timers, pass 0. + * @param fFlags Timer flags. Same as RTTimerCreateEx. + * @param pfnTimer Callback function which shall be scheduled for execution + * on every timer tick. + * @param pvUser User argument for the callback. + * @see RTTimerLRStart, RTTimerLRStop, RTTimerLRDestroy + */ +RTDECL(int) RTTimerLRCreateEx(PRTTIMERLR phTimerLR, uint64_t u64NanoInterval, uint32_t fFlags, PFNRTTIMERLR pfnTimer, void *pvUser); + +/** + * Stops and destroys a running low resolution timer. + * + * @returns iprt status code. + * @param hTimerLR The low resolution timer to stop and destroy. + * NIL_RTTIMERLR is accepted. + */ +RTDECL(int) RTTimerLRDestroy(RTTIMERLR hTimerLR); + +/** + * Starts a low resolution timer. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_TIMER_ACTIVE if the timer isn't suspended. + * + * @param hTimerLR The low resolution timer to activate. + * @param u64First The RTTimeSystemNanoTS() for when the timer should start + * firing (relative), the minimum is 100000000 ns. + * If 0 is specified, the timer will fire ASAP. + * + * @see RTTimerLRStop + */ +RTDECL(int) RTTimerLRStart(RTTIMERLR hTimerLR, uint64_t u64First); + +/** + * Stops an active low resolution timer. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_TIMER_SUSPENDED if the timer isn't active. + * @retval VERR_NOT_SUPPORTED if the IPRT implementation doesn't support stopping a timer. + * + * @param hTimerLR The low resolution timer to suspend. + * + * @see RTTimerLRStart + */ +RTDECL(int) RTTimerLRStop(RTTIMERLR hTimerLR); + +/** + * Changes the interval of a low resolution timer. + * + * If the timer is active, the next tick will occure immediately just like with + * RTTimerLRStart() when u64First parameter is zero. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if pTimer isn't valid. + * @retval VERR_NOT_SUPPORTED if not supported. + * + * @param hTimerLR The low resolution timer to update. + * @param u64NanoInterval The interval between timer ticks specified in + * nanoseconds. This is rounded to the fit the + * system timer granularity. + * @remarks Callable from the timer callback. + */ +RTDECL(int) RTTimerLRChangeInterval(RTTIMERLR hTimerLR, uint64_t u64NanoInterval); + +/** @} */ + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/types.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/types.h @@ -0,0 +1,3163 @@ +/** @file + * IPRT - Types. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_types_h +#define ___iprt_types_h + +#include +#include +#include + +/* + * Include standard C types. + */ +#ifndef IPRT_NO_CRT + +# if defined(IN_XF86_MODULE) && !defined(NO_ANSIC) + /* + * Kludge for xfree86 modules: size_t and other types are redefined. + */ +RT_C_DECLS_BEGIN +# include "xf86_ansic.h" +# undef NULL +RT_C_DECLS_END + +# elif defined(RT_OS_DARWIN) && defined(KERNEL) + /* + * Kludge for the darwin kernel: + * stddef.h is missing IIRC. + */ +# ifndef _PTRDIFF_T +# define _PTRDIFF_T + typedef __darwin_ptrdiff_t ptrdiff_t; +# endif +# include + +# elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + /* + * Kludge for the FreeBSD kernel: + * stddef.h and sys/types.h have slightly different offsetof definitions + * when compiling in kernel mode. This is just to make GCC shut up. + */ +# ifndef _STDDEF_H_ +# undef offsetof +# endif +# include +# ifndef _SYS_TYPES_H_ +# undef offsetof +# endif +# include +# ifndef offsetof +# error "offsetof is not defined!" +# endif + +# elif defined(RT_OS_FREEBSD) && HC_ARCH_BITS == 64 && defined(RT_ARCH_X86) + /* + * Kludge for compiling 32-bit code on a 64-bit FreeBSD: + * FreeBSD declares uint64_t and int64_t wrong (long unsigned and long int + * though they need to be long long unsigned and long long int). These + * defines conflict with our declaration in stdint.h. Adding the defines + * below omits the definitions in the system header. + */ +# include +# define _UINT64_T_DECLARED +# define _INT64_T_DECLARED +# define _UINTPTR_T_DECLARED +# define _INTPTR_T_DECLARED +# include + +# elif defined(RT_OS_NETBSD) && defined(_KERNEL) + +# include + + /* + * Kludge for NetBSD-6.x where the definition of bool in + * does not check for C++. + */ +# if defined(__cplusplus) && defined(bool) +# undef bool +# undef true +# undef false +# endif + + /* + * Kludge for NetBSD-6.x where does not define + * ptrdiff_t for the kernel code. Note that we don't worry about + * redefinition in since that header doesn't exist for + * _KERNEL code. + */ +# ifdef _BSD_PTRDIFF_T_ + typedef _BSD_PTRDIFF_T_ ptrdiff_t; +# endif + +# elif defined(RT_OS_LINUX) && defined(__KERNEL__) + /* + * Kludge for the linux kernel: + * 1. sys/types.h doesn't mix with the kernel. + * 2. Starting with 2.6.19, linux/types.h typedefs bool and linux/stddef.h + * declares false and true as enum values. + * 3. Starting with 2.6.24, linux/types.h typedefs uintptr_t. + * We work around these issues here and nowhere else. + */ +# include +# if defined(__cplusplus) + typedef bool _Bool; +# endif +# define bool linux_bool +# define true linux_true +# define false linux_false +# define uintptr_t linux_uintptr_t +# include +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) +# include +# else +# ifndef AUTOCONF_INCLUDED +# include +# endif +# endif +# include +# if defined(__cplusplus) + /* + * Starting with 3.3, appends 'notrace' (which + * expands to __attribute__((no_instrument_function))) to inline, + * __inline and __inline__. Revert that. + */ +# undef inline +# define inline inline +# undef __inline__ +# define __inline__ __inline__ +# undef __inline +# define __inline __inline +# endif +# include +# include + /* + * Starting with 3.4, defines NULL as '((void*)0)' which + * does not work for C++ code. + */ +# undef NULL +# undef uintptr_t +# ifdef __GNUC__ +# if !RT_GNUC_PREREQ(4, 1) + /* + * does + * #define __inline__ __inline__ __attribute__((always_inline)) + * in some older Linux kernels. Forcing inlining will fail for some RTStrA* + * functions with gcc <= 4.0 due to passing variable argument lists. + */ +# undef __inline__ +# define __inline__ __inline__ +# endif +# endif +# undef false +# undef true +# undef bool +# else +# include +# include +# endif + + +/* Define any types missing from sys/types.h on windows. */ +# ifdef _MSC_VER +# undef ssize_t + typedef intptr_t ssize_t; +# endif + +#else /* no crt */ +# include +#endif /* no crt */ + + + +/** @def NULL + * NULL pointer. + */ +#ifndef NULL +# ifdef __cplusplus +# define NULL 0 +# else +# define NULL ((void*)0) +# endif +#endif + + + +/** @defgroup grp_rt_types IPRT Base Types + * @{ + */ + +/* define wchar_t, we don't wanna include all the wcsstuff to get this. */ +#ifdef _MSC_VER +# ifndef _WCHAR_T_DEFINED + typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +#endif +#ifdef __GNUC__ +/** @todo wchar_t on GNUC */ +#endif + +/* + * C doesn't have bool, nor does VisualAge for C++ v3.08. + */ +#if !defined(__cplusplus) || (defined(__IBMCPP__) && defined(RT_OS_OS2)) +# if defined(__GNUC__) +# if defined(RT_OS_LINUX) && __GNUC__ < 3 +typedef uint8_t bool; +# elif defined(RT_OS_FREEBSD) +# ifndef __bool_true_false_are_defined +typedef _Bool bool; +# endif +# elif defined(RT_OS_NETBSD) +# if !defined(_KERNEL) + /* + * For the kernel code is not available, but bool is + * provided by included above. + */ +# include + + /* + * ... but the story doesn't end here. The C standard says that + * defines preprocessor macro "bool" that expands to + * "_Bool", but adds that a program may undefine/redefine it + * (this is 7.16 in C99 and 7.18 in C11). We have to play this + * game here because X11 code uses "bool" as a struct member name + * - so undefine "bool" and provide it as a typedef instead. We + * still keep #include so that any code that might + * include it later doesn't mess things up. + */ +# undef bool + typedef _Bool bool; +# endif +# else +# if (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU)) && (defined(_STDBOOL_H) || defined(__STDBOOL_H)) +# undef bool +# endif +typedef _Bool bool; +# endif +# else +# if RT_MSC_PREREQ(RT_MSC_VER_VC120) +# include +# else +typedef unsigned char bool; +# endif +# endif +# ifndef true +# define true (1) +# endif +# ifndef false +# define false (0) +# endif +#endif + +/** + * 128-bit unsigned integer. + */ +#if defined(__GNUC__) && defined(RT_ARCH_AMD64) +typedef __uint128_t uint128_t; +#else +typedef struct uint128_s +{ +# ifdef RT_BIG_ENDIAN + uint64_t Hi; + uint64_t Lo; +# else + uint64_t Lo; + uint64_t Hi; +# endif +} uint128_t; +#endif + + +/** + * 128-bit signed integer. + */ +#if defined(__GNUC__) && defined(RT_ARCH_AMD64) +typedef __int128_t int128_t; +#else +typedef struct int128_s +{ +# ifdef RT_BIG_ENDIAN + int64_t Hi; + uint64_t Lo; +# else + uint64_t Lo; + int64_t Hi; +# endif +} int128_t; +#endif + + +/** + * 16-bit unsigned integer union. + */ +typedef union RTUINT16U +{ + /** natural view. */ + uint16_t u; + + /** 16-bit view. */ + uint16_t au16[1]; + /** 8-bit view. */ + uint8_t au8[2]; + /** 16-bit hi/lo view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint8_t Hi; + uint8_t Lo; +#else + uint8_t Lo; + uint8_t Hi; +#endif + } s; +} RTUINT16U; +/** Pointer to a 16-bit unsigned integer union. */ +typedef RTUINT16U RT_FAR *PRTUINT16U; +/** Pointer to a const 32-bit unsigned integer union. */ +typedef const RTUINT16U RT_FAR *PCRTUINT16U; + + +/** + * 32-bit unsigned integer union. + */ +typedef union RTUINT32U +{ + /** natural view. */ + uint32_t u; + /** Hi/Low view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t Hi; + uint16_t Lo; +#else + uint16_t Lo; + uint16_t Hi; +#endif + } s; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; +#endif + } Words; + + /** 32-bit view. */ + uint32_t au32[1]; + /** 16-bit view. */ + uint16_t au16[2]; + /** 8-bit view. */ + uint8_t au8[4]; +} RTUINT32U; +/** Pointer to a 32-bit unsigned integer union. */ +typedef RTUINT32U RT_FAR *PRTUINT32U; +/** Pointer to a const 32-bit unsigned integer union. */ +typedef const RTUINT32U RT_FAR *PCRTUINT32U; + + +/** + * 64-bit unsigned integer union. + */ +typedef union RTUINT64U +{ + /** Natural view. */ + uint64_t u; + /** Hi/Low view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t Hi; + uint32_t Lo; +#else + uint32_t Lo; + uint32_t Hi; +#endif + } s; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; +#endif + } Words; + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[4]; + /** 8-bit view. */ + uint8_t au8[8]; +} RTUINT64U; +/** Pointer to a 64-bit unsigned integer union. */ +typedef RTUINT64U RT_FAR *PRTUINT64U; +/** Pointer to a const 64-bit unsigned integer union. */ +typedef const RTUINT64U RT_FAR *PCRTUINT64U; + + +/** + * 128-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT128U +{ + /** Hi/Low view. + * @remarks We put this first so we can have portable initializers + * (RTUINT128_INIT) */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t Hi; + uint64_t Lo; +#else + uint64_t Lo; + uint64_t Hi; +#endif + } s; + + /** Natural view. + * WARNING! This member depends on the compiler supporting 128-bit stuff. */ + uint128_t u; + + /** Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; +#endif + } Words; + + /** 64-bit view. */ + uint64_t au64[2]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 8-bit view. */ + uint8_t au8[16]; +} RTUINT128U; +#pragma pack() +/** Pointer to a 128-bit unsigned integer union. */ +typedef RTUINT128U RT_FAR *PRTUINT128U; +/** Pointer to a const 128-bit unsigned integer union. */ +typedef const RTUINT128U RT_FAR *PCRTUINT128U; + +/** @def RTUINT128_INIT + * Portable RTUINT128U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Hi, a_Lo } } +#else +# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Lo, a_Hi } } +#endif + +/** @def RTUINT128_INIT_C + * Portable RTUINT128U initializer for 64-bit constants. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Hi), UINT64_C(a_Lo) } } +#else +# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Lo), UINT64_C(a_Hi) } } +#endif + + +/** + * 256-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT256U +{ + /** Quad-Word view (first as it's used by RTUINT256_INIT). */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw3; + uint64_t qw2; + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; + uint64_t qw2; + uint64_t qw3; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw7; + uint32_t dw6; + uint32_t dw5; + uint32_t dw4; + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; + uint32_t dw4; + uint32_t dw5; + uint32_t dw6; + uint32_t dw7; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w15; + uint16_t w14; + uint16_t w13; + uint16_t w12; + uint16_t w11; + uint16_t w10; + uint16_t w9; + uint16_t w8; + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; + uint16_t w8; + uint16_t w9; + uint16_t w10; + uint16_t w11; + uint16_t w12; + uint16_t w13; + uint16_t w14; + uint16_t w15; +#endif + } Words; + + /** Double-Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT128U dqw1; + RTUINT128U dqw0; +#else + RTUINT128U dqw0; + RTUINT128U dqw1; +#endif + } DQWords; + + /** 128-bit view. */ + RTUINT128U au128[2]; + /** 64-bit view. */ + uint64_t au64[4]; + /** 32-bit view. */ + uint32_t au32[8]; + /** 16-bit view. */ + uint16_t au16[16]; + /** 8-bit view. */ + uint8_t au8[32]; +} RTUINT256U; +#pragma pack() +/** Pointer to a 256-bit unsigned integer union. */ +typedef RTUINT256U RT_FAR *PRTUINT256U; +/** Pointer to a const 256-bit unsigned integer union. */ +typedef const RTUINT256U RT_FAR *PCRTUINT256U; + +/** @def RTUINT256_INIT + * Portable RTUINT256U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } +#else +# define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw0, a_Qw1, a_Qw2, a_Qw3 } } +#endif + +/** @def RTUINT256_INIT_C + * Portable RTUINT256U initializer for 64-bit constants. */ +#define RTUINT256_INIT_C(a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + RTUINT256_INIT(UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) + + +/** + * 512-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT512U +{ + /** Quad-Word view (first as it's used by RTUINT512_INIT). */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw7; + uint64_t qw6; + uint64_t qw5; + uint64_t qw4; + uint64_t qw3; + uint64_t qw2; + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; + uint64_t qw2; + uint64_t qw3; + uint64_t qw4; + uint64_t qw5; + uint64_t qw6; + uint64_t qw7; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw15; + uint32_t dw14; + uint32_t dw13; + uint32_t dw12; + uint32_t dw11; + uint32_t dw10; + uint32_t dw9; + uint32_t dw8; + uint32_t dw7; + uint32_t dw6; + uint32_t dw5; + uint32_t dw4; + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; + uint32_t dw4; + uint32_t dw5; + uint32_t dw6; + uint32_t dw7; + uint32_t dw8; + uint32_t dw9; + uint32_t dw10; + uint32_t dw11; + uint32_t dw12; + uint32_t dw13; + uint32_t dw14; + uint32_t dw15; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w31; + uint16_t w30; + uint16_t w29; + uint16_t w28; + uint16_t w27; + uint16_t w26; + uint16_t w25; + uint16_t w24; + uint16_t w23; + uint16_t w22; + uint16_t w21; + uint16_t w20; + uint16_t w19; + uint16_t w18; + uint16_t w17; + uint16_t w16; + uint16_t w15; + uint16_t w14; + uint16_t w13; + uint16_t w12; + uint16_t w11; + uint16_t w10; + uint16_t w9; + uint16_t w8; + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; + uint16_t w8; + uint16_t w9; + uint16_t w10; + uint16_t w11; + uint16_t w12; + uint16_t w13; + uint16_t w14; + uint16_t w15; + uint16_t w16; + uint16_t w17; + uint16_t w18; + uint16_t w19; + uint16_t w20; + uint16_t w21; + uint16_t w22; + uint16_t w23; + uint16_t w24; + uint16_t w25; + uint16_t w26; + uint16_t w27; + uint16_t w28; + uint16_t w29; + uint16_t w30; + uint16_t w31; +#endif + } Words; + + /** Double-Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT128U dqw3; + RTUINT128U dqw2; + RTUINT128U dqw1; + RTUINT128U dqw0; +#else + RTUINT128U dqw0; + RTUINT128U dqw1; + RTUINT128U dqw2; + RTUINT128U dqw3; +#endif + } DQWords; + + /** Octo-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT256U ow3; + RTUINT256U ow2; + RTUINT256U ow1; + RTUINT256U ow0; +#else + RTUINT256U ow0; + RTUINT256U ow1; + RTUINT256U ow2; + RTUINT256U ow3; +#endif + } OWords; + + /** 256-bit view. */ + RTUINT256U au256[2]; + /** 128-bit view. */ + RTUINT128U au128[4]; + /** 64-bit view. */ + uint64_t au64[8]; + /** 32-bit view. */ + uint32_t au32[16]; + /** 16-bit view. */ + uint16_t au16[32]; + /** 8-bit view. */ + uint8_t au8[64]; +} RTUINT512U; +#pragma pack() +/** Pointer to a 512-bit unsigned integer union. */ +typedef RTUINT512U RT_FAR *PRTUINT512U; +/** Pointer to a const 512-bit unsigned integer union. */ +typedef const RTUINT512U RT_FAR *PCRTUINT512U; + +/** @def RTUINT512_INIT + * Portable RTUINT512U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + { { a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } +#else +# define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + { { a_Qw0, a_Qw1, a_Qw2, a_Qw3, a_Qw4, a_Qw5, a_Qw6, a_Qw7 } } +#endif + +/** @def RTUINT512_INIT_C + * Portable RTUINT512U initializer for 64-bit constants. */ +#define RTUINT512_INIT_C(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + RTUINT512_INIT(UINT64_C(a_Qw7), UINT64_C(a_Qw6), UINT64_C(a_Qw5), UINT64_C(a_Qw4), \ + UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) + + +/** + * Double precision floating point format (64-bit). + */ +typedef union RTFLOAT64U +{ +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + /** Double view. */ + double rd; +#endif + /** Format using regular bitfields. */ + struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + uint32_t fSign : 1; + /** The exponent (offseted by 1023). */ + uint32_t uExponent : 11; + /** The fraction, bits 32 thru 51. */ + uint32_t u20FractionHigh : 20; + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow; +# else + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow; + /** The fraction, bits 32 thru 51. */ + uint32_t u20FractionHigh : 20; + /** The exponent (offseted by 1023). */ + uint32_t uExponent : 11; + /** The sign indicator. */ + uint32_t fSign : 1; +# endif + } s; + +#ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS + /** Format using 64-bit bitfields. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint64_t fSign : 1; + /** The exponent (offseted by 1023). */ + RT_GCC_EXTENSION uint64_t uExponent : 11; + /** The fraction. */ + RT_GCC_EXTENSION uint64_t uFraction : 52; +# else + /** The fraction. */ + RT_GCC_EXTENSION uint64_t uFraction : 52; + /** The exponent (offseted by 1023). */ + RT_GCC_EXTENSION uint64_t uExponent : 11; + /** The sign indicator. */ + RT_GCC_EXTENSION uint64_t fSign : 1; +# endif + } s64; +#endif + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[4]; + /** 8-bit view. */ + uint8_t au8[8]; +} RTFLOAT64U; +/** Pointer to a double precision floating point format union. */ +typedef RTFLOAT64U RT_FAR *PRTFLOAT64U; +/** Pointer to a const double precision floating point format union. */ +typedef const RTFLOAT64U RT_FAR *PCRTFLOAT64U; + + +#if !defined(__IBMCPP__) && !defined(__IBMC__) + +/** + * Extended Double precision floating point format (80-bit). + */ +#pragma pack(1) +typedef union RTFLOAT80U +{ + /** Format using bitfields. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The mantissa. */ + uint64_t u64Mantissa; +# else + /** The mantissa. */ + uint64_t u64Mantissa; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +# endif + } s; + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[5]; + /** 8-bit view. */ + uint8_t au8[10]; +} RTFLOAT80U; +#pragma pack() +/** Pointer to a extended precision floating point format union. */ +typedef RTFLOAT80U RT_FAR *PRTFLOAT80U; +/** Pointer to a const extended precision floating point format union. */ +typedef const RTFLOAT80U RT_FAR *PCRTFLOAT80U; + + +/** + * A variant of RTFLOAT80U that may be larger than 80-bits depending on how the + * compiler implements long double. + */ +#pragma pack(1) +typedef union RTFLOAT80U2 +{ +#ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE + /** Long double view. */ + long double lrd; +#endif + /** Format using bitfields. */ + RT_GCC_EXTENSION struct + { +#ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The mantissa. */ + uint64_t u64Mantissa; +#else + /** The mantissa. */ + uint64_t u64Mantissa; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +#endif + } s; + + /** Bitfield exposing the J bit and the fraction. */ + RT_GCC_EXTENSION struct + { +#ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The J bit, aka the integer bit. */ + uint32_t fInteger; + /** The fraction, bits 32 thru 62. */ + uint32_t u31FractionHigh : 31; + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow : 32; +#else + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow : 32; + /** The fraction, bits 32 thru 62. */ + uint32_t u31FractionHigh : 31; + /** The J bit, aka the integer bit. */ + uint32_t fInteger; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +#endif + } sj; + +#ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS + /** 64-bit bitfields exposing the J bit and the fraction. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The J bit, aka the integer bit. */ + RT_GCC_EXTENSION uint64_t fInteger : 1; + /** The fraction. */ + RT_GCC_EXTENSION uint64_t u63Fraction : 63; +# else + /** The fraction. */ + RT_GCC_EXTENSION uint64_t u63Fraction : 63; + /** The J bit, aka the integer bit. */ + RT_GCC_EXTENSION uint64_t fInteger : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +# endif + } sj64; +#endif + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[5]; + /** 8-bit view. */ + uint8_t au8[10]; +} RTFLOAT80U2; +#pragma pack() +/** Pointer to a extended precision floating point format union, 2nd + * variant. */ +typedef RTFLOAT80U2 RT_FAR *PRTFLOAT80U2; +/** Pointer to a const extended precision floating point format union, 2nd + * variant. */ +typedef const RTFLOAT80U2 RT_FAR *PCRTFLOAT80U2; + +#endif /* uint16_t bitfields doesn't work */ + + +/** Generic function type. + * @see PFNRT + */ +typedef DECLCALLBACK(void) FNRT(void); + +/** Generic function pointer. + * With -pedantic, gcc-4 complains when casting a function to a data object, for + * example: + * + * @code + * void foo(void) + * { + * } + * + * void *bar = (void *)foo; + * @endcode + * + * The compiler would warn with "ISO C++ forbids casting between + * pointer-to-function and pointer-to-object". The purpose of this warning is + * not to bother the programmer but to point out that he is probably doing + * something dangerous, assigning a pointer to executable code to a data object. + */ +typedef FNRT *PFNRT; + +/** Millisecond interval. */ +typedef uint32_t RTMSINTERVAL; +/** Pointer to a millisecond interval. */ +typedef RTMSINTERVAL RT_FAR *PRTMSINTERVAL; +/** Pointer to a const millisecond interval. */ +typedef const RTMSINTERVAL RT_FAR *PCRTMSINTERVAL; + +/** Pointer to a time spec structure. */ +typedef struct RTTIMESPEC RT_FAR *PRTTIMESPEC; +/** Pointer to a const time spec structure. */ +typedef const struct RTTIMESPEC RT_FAR *PCRTTIMESPEC; + + + +/** @defgroup grp_rt_types_both Common Guest and Host Context Basic Types + * @{ + */ + +/** Signed integer which can contain both GC and HC pointers. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +typedef int32_t RTINTPTR; +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +typedef int64_t RTINTPTR; +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** Pointer to signed integer which can contain both GC and HC pointers. */ +typedef RTINTPTR RT_FAR *PRTINTPTR; +/** Pointer const to signed integer which can contain both GC and HC pointers. */ +typedef const RTINTPTR RT_FAR *PCRTINTPTR; +/** The maximum value the RTINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTINTPTR_MAX INT32_MAX +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTINTPTR_MAX INT64_MAX +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** The minimum value the RTINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTINTPTR_MIN INT32_MIN +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTINTPTR_MIN INT64_MIN +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif + +/** Unsigned integer which can contain both GC and HC pointers. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +typedef uint32_t RTUINTPTR; +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +typedef uint64_t RTUINTPTR; +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** Pointer to unsigned integer which can contain both GC and HC pointers. */ +typedef RTUINTPTR RT_FAR *PRTUINTPTR; +/** Pointer const to unsigned integer which can contain both GC and HC pointers. */ +typedef const RTUINTPTR RT_FAR *PCRTUINTPTR; +/** The maximum value the RTUINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTUINTPTR_MAX UINT32_MAX +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTUINTPTR_MAX UINT64_MAX +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif + +/** Signed integer. */ +typedef int32_t RTINT; +/** Pointer to signed integer. */ +typedef RTINT RT_FAR *PRTINT; +/** Pointer to const signed integer. */ +typedef const RTINT RT_FAR *PCRTINT; + +/** Unsigned integer. */ +typedef uint32_t RTUINT; +/** Pointer to unsigned integer. */ +typedef RTUINT RT_FAR *PRTUINT; +/** Pointer to const unsigned integer. */ +typedef const RTUINT RT_FAR *PCRTUINT; + +/** A file offset / size (off_t). */ +typedef int64_t RTFOFF; +/** Pointer to a file offset / size. */ +typedef RTFOFF RT_FAR *PRTFOFF; +/** The max value for RTFOFF. */ +#define RTFOFF_MAX INT64_MAX +/** The min value for RTFOFF. */ +#define RTFOFF_MIN INT64_MIN + +/** File mode (see iprt/fs.h). */ +typedef uint32_t RTFMODE; +/** Pointer to file mode. */ +typedef RTFMODE RT_FAR *PRTFMODE; + +/** Device unix number. */ +typedef uint32_t RTDEV; +/** Pointer to a device unix number. */ +typedef RTDEV RT_FAR *PRTDEV; + +/** @name RTDEV Macros + * @{ */ +/** + * Our makedev macro. + * @returns RTDEV + * @param uMajor The major device number. + * @param uMinor The minor device number. + */ +#define RTDEV_MAKE(uMajor, uMinor) ((RTDEV)( ((RTDEV)(uMajor) << 24) | (uMinor & UINT32_C(0x00ffffff)) )) +/** + * Get the major device node number from an RTDEV type. + * @returns The major device number of @a uDev + * @param uDev The device number. + */ +#define RTDEV_MAJOR(uDev) ((uDev) >> 24) +/** + * Get the minor device node number from an RTDEV type. + * @returns The minor device number of @a uDev + * @param uDev The device number. + */ +#define RTDEV_MINOR(uDev) ((uDev) & UINT32_C(0x00ffffff)) +/** @} */ + +/** i-node number. */ +typedef uint64_t RTINODE; +/** Pointer to a i-node number. */ +typedef RTINODE RT_FAR *PRTINODE; + +/** User id. */ +typedef uint32_t RTUID; +/** Pointer to a user id. */ +typedef RTUID RT_FAR *PRTUID; +/** NIL user id. + * @todo check this for portability! */ +#define NIL_RTUID (~(RTUID)0) + +/** Group id. */ +typedef uint32_t RTGID; +/** Pointer to a group id. */ +typedef RTGID RT_FAR *PRTGID; +/** NIL group id. + * @todo check this for portability! */ +#define NIL_RTGID (~(RTGID)0) + +/** I/O Port. */ +typedef uint16_t RTIOPORT; +/** Pointer to I/O Port. */ +typedef RTIOPORT RT_FAR *PRTIOPORT; +/** Pointer to const I/O Port. */ +typedef const RTIOPORT RT_FAR *PCRTIOPORT; + +/** Selector. */ +typedef uint16_t RTSEL; +/** Pointer to selector. */ +typedef RTSEL RT_FAR *PRTSEL; +/** Pointer to const selector. */ +typedef const RTSEL RT_FAR *PCRTSEL; +/** Max selector value. */ +#define RTSEL_MAX UINT16_MAX + +/** Far 16-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR16 +{ + uint16_t off; + RTSEL sel; +} RTFAR16; +#pragma pack() +/** Pointer to Far 16-bit pointer. */ +typedef RTFAR16 RT_FAR *PRTFAR16; +/** Pointer to const Far 16-bit pointer. */ +typedef const RTFAR16 RT_FAR *PCRTFAR16; + +/** Far 32-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR32 +{ + uint32_t off; + RTSEL sel; +} RTFAR32; +#pragma pack() +/** Pointer to Far 32-bit pointer. */ +typedef RTFAR32 RT_FAR *PRTFAR32; +/** Pointer to const Far 32-bit pointer. */ +typedef const RTFAR32 RT_FAR *PCRTFAR32; + +/** Far 64-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR64 +{ + uint64_t off; + RTSEL sel; +} RTFAR64; +#pragma pack() +/** Pointer to Far 64-bit pointer. */ +typedef RTFAR64 RT_FAR *PRTFAR64; +/** Pointer to const Far 64-bit pointer. */ +typedef const RTFAR64 RT_FAR *PCRTFAR64; + +/** @} */ + + +/** @defgroup grp_rt_types_hc Host Context Basic Types + * @{ + */ + +/** HC Natural signed integer. + * @deprecated silly type. */ +typedef int32_t RTHCINT; +/** Pointer to HC Natural signed integer. + * @deprecated silly type. */ +typedef RTHCINT RT_FAR *PRTHCINT; +/** Pointer to const HC Natural signed integer. + * @deprecated silly type. */ +typedef const RTHCINT RT_FAR *PCRTHCINT; + +/** HC Natural unsigned integer. + * @deprecated silly type. */ +typedef uint32_t RTHCUINT; +/** Pointer to HC Natural unsigned integer. + * @deprecated silly type. */ +typedef RTHCUINT RT_FAR *PRTHCUINT; +/** Pointer to const HC Natural unsigned integer. + * @deprecated silly type. */ +typedef const RTHCUINT RT_FAR *PCRTHCUINT; + + +/** Signed integer which can contain a HC pointer. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +typedef int32_t RTHCINTPTR; +#elif HC_ARCH_BITS == 64 +typedef int64_t RTHCINTPTR; +#else +# error Unsupported HC_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC pointer. */ +typedef RTHCINTPTR RT_FAR *PRTHCINTPTR; +/** Pointer to const signed integer which can contain a HC pointer. */ +typedef const RTHCINTPTR RT_FAR *PCRTHCINTPTR; +/** Max RTHCINTPTR value. */ +#if HC_ARCH_BITS == 32 +# define RTHCINTPTR_MAX INT32_MAX +#elif HC_ARCH_BITS == 64 +# define RTHCINTPTR_MAX INT64_MAX +#else +# define RTHCINTPTR_MAX INT16_MAX +#endif +/** Min RTHCINTPTR value. */ +#if HC_ARCH_BITS == 32 +# define RTHCINTPTR_MIN INT32_MIN +#elif HC_ARCH_BITS == 64 +# define RTHCINTPTR_MIN INT64_MIN +#else +# define RTHCINTPTR_MIN INT16_MIN +#endif + +/** Signed integer which can contain a HC ring-3 pointer. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +typedef int32_t RTR3INTPTR; +#elif R3_ARCH_BITS == 64 +typedef int64_t RTR3INTPTR; +#else +# error Unsupported R3_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC ring-3 pointer. */ +typedef RTR3INTPTR RT_FAR *PRTR3INTPTR; +/** Pointer to const signed integer which can contain a HC ring-3 pointer. */ +typedef const RTR3INTPTR RT_FAR *PCRTR3INTPTR; +/** Max RTR3INTPTR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3INTPTR_MAX INT32_MAX +#else +# define RTR3INTPTR_MAX INT64_MAX +#endif +/** Min RTR3INTPTR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3INTPTR_MIN INT32_MIN +#else +# define RTR3INTPTR_MIN INT64_MIN +#endif + +/** Signed integer which can contain a HC ring-0 pointer. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +typedef int32_t RTR0INTPTR; +#elif R0_ARCH_BITS == 64 +typedef int64_t RTR0INTPTR; +#else +# error Unsupported R0_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC ring-0 pointer. */ +typedef RTR0INTPTR RT_FAR *PRTR0INTPTR; +/** Pointer to const signed integer which can contain a HC ring-0 pointer. */ +typedef const RTR0INTPTR RT_FAR *PCRTR0INTPTR; +/** Max RTR0INTPTR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0INTPTR_MAX INT32_MAX +#else +# define RTR0INTPTR_MAX INT64_MAX +#endif +/** Min RTHCINTPTR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0INTPTR_MIN INT32_MIN +#else +# define RTR0INTPTR_MIN INT64_MIN +#endif + + +/** Unsigned integer which can contain a HC pointer. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +typedef uint32_t RTHCUINTPTR; +#elif HC_ARCH_BITS == 64 +typedef uint64_t RTHCUINTPTR; +#else +# error Unsupported HC_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC pointer. */ +typedef RTHCUINTPTR RT_FAR *PRTHCUINTPTR; +/** Pointer to unsigned integer which can contain a HC pointer. */ +typedef const RTHCUINTPTR RT_FAR *PCRTHCUINTPTR; +/** Max RTHCUINTTPR value. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +# define RTHCUINTPTR_MAX UINT32_MAX +#else +# define RTHCUINTPTR_MAX UINT64_MAX +#endif + +/** Unsigned integer which can contain a HC ring-3 pointer. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +typedef uint32_t RTR3UINTPTR; +#elif R3_ARCH_BITS == 64 +typedef uint64_t RTR3UINTPTR; +#else +# error Unsupported R3_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ +typedef RTR3UINTPTR RT_FAR *PRTR3UINTPTR; +/** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ +typedef const RTR3UINTPTR RT_FAR *PCRTR3UINTPTR; +/** Max RTHCUINTTPR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3UINTPTR_MAX UINT32_MAX +#else +# define RTR3UINTPTR_MAX UINT64_MAX +#endif + +/** Unsigned integer which can contain a HC ring-0 pointer. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +typedef uint32_t RTR0UINTPTR; +#elif R0_ARCH_BITS == 64 +typedef uint64_t RTR0UINTPTR; +#else +# error Unsupported R0_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ +typedef RTR0UINTPTR RT_FAR *PRTR0UINTPTR; +/** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ +typedef const RTR0UINTPTR RT_FAR *PCRTR0UINTPTR; +/** Max RTR0UINTTPR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0UINTPTR_MAX UINT32_MAX +#else +# define RTR0UINTPTR_MAX UINT64_MAX +#endif + + +/** Host Physical Memory Address. */ +typedef uint64_t RTHCPHYS; +/** Pointer to Host Physical Memory Address. */ +typedef RTHCPHYS RT_FAR *PRTHCPHYS; +/** Pointer to const Host Physical Memory Address. */ +typedef const RTHCPHYS RT_FAR *PCRTHCPHYS; +/** @def NIL_RTHCPHYS + * NIL HC Physical Address. + * NIL_RTHCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. + */ +#define NIL_RTHCPHYS (~(RTHCPHYS)0) +/** Max RTHCPHYS value. */ +#define RTHCPHYS_MAX UINT64_MAX + + +/** HC pointer. */ +#ifndef IN_RC +typedef void RT_FAR *RTHCPTR; +#else +typedef RTHCUINTPTR RTHCPTR; +#endif +/** Pointer to HC pointer. */ +typedef RTHCPTR RT_FAR *PRTHCPTR; +/** Pointer to const HC pointer. */ +typedef const RTHCPTR *PCRTHCPTR; +/** @def NIL_RTHCPTR + * NIL HC pointer. + */ +#define NIL_RTHCPTR ((RTHCPTR)0) +/** Max RTHCPTR value. */ +#define RTHCPTR_MAX ((RTHCPTR)RTHCUINTPTR_MAX) + + +/** HC ring-3 pointer. */ +#ifdef IN_RING3 +typedef void RT_FAR *RTR3PTR; +#else +typedef RTR3UINTPTR RTR3PTR; +#endif +/** Pointer to HC ring-3 pointer. */ +typedef RTR3PTR RT_FAR *PRTR3PTR; +/** Pointer to const HC ring-3 pointer. */ +typedef const RTR3PTR *PCRTR3PTR; +/** @def NIL_RTR3PTR + * NIL HC ring-3 pointer. + */ +#ifndef IN_RING3 +# define NIL_RTR3PTR ((RTR3PTR)0) +#else +# define NIL_RTR3PTR (NULL) +#endif +/** Max RTR3PTR value. */ +#define RTR3PTR_MAX ((RTR3PTR)RTR3UINTPTR_MAX) + +/** HC ring-0 pointer. */ +#ifdef IN_RING0 +typedef void RT_FAR *RTR0PTR; +#else +typedef RTR0UINTPTR RTR0PTR; +#endif +/** Pointer to HC ring-0 pointer. */ +typedef RTR0PTR RT_FAR *PRTR0PTR; +/** Pointer to const HC ring-0 pointer. */ +typedef const RTR0PTR *PCRTR0PTR; +/** @def NIL_RTR0PTR + * NIL HC ring-0 pointer. + */ +#ifndef IN_RING0 +# define NIL_RTR0PTR ((RTR0PTR)0) +#else +# define NIL_RTR0PTR (NULL) +#endif +/** Max RTR3PTR value. */ +#define RTR0PTR_MAX ((RTR0PTR)RTR0UINTPTR_MAX) + + +/** Unsigned integer register in the host context. */ +#if HC_ARCH_BITS == 32 +typedef uint32_t RTHCUINTREG; +#elif HC_ARCH_BITS == 64 +typedef uint64_t RTHCUINTREG; +#elif HC_ARCH_BITS == 16 +typedef uint16_t RTHCUINTREG; +#else +# error "Unsupported HC_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host context. */ +typedef RTHCUINTREG RT_FAR *PRTHCUINTREG; +/** Pointer to a const unsigned integer register in the host context. */ +typedef const RTHCUINTREG RT_FAR *PCRTHCUINTREG; + +/** Unsigned integer register in the host ring-3 context. */ +#if R3_ARCH_BITS == 32 +typedef uint32_t RTR3UINTREG; +#elif R3_ARCH_BITS == 64 +typedef uint64_t RTR3UINTREG; +#elif R3_ARCH_BITS == 16 +typedef uint16_t RTR3UINTREG; +#else +# error "Unsupported R3_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host ring-3 context. */ +typedef RTR3UINTREG RT_FAR *PRTR3UINTREG; +/** Pointer to a const unsigned integer register in the host ring-3 context. */ +typedef const RTR3UINTREG RT_FAR *PCRTR3UINTREG; + +/** Unsigned integer register in the host ring-3 context. */ +#if R0_ARCH_BITS == 32 +typedef uint32_t RTR0UINTREG; +#elif R0_ARCH_BITS == 64 +typedef uint64_t RTR0UINTREG; +#elif R0_ARCH_BITS == 16 +typedef uint16_t RTR0UINTREG; +#else +# error "Unsupported R3_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host ring-3 context. */ +typedef RTR0UINTREG RT_FAR *PRTR0UINTREG; +/** Pointer to a const unsigned integer register in the host ring-3 context. */ +typedef const RTR0UINTREG RT_FAR *PCRTR0UINTREG; + +/** @} */ + + +/** @defgroup grp_rt_types_gc Guest Context Basic Types + * @{ + */ + +/** Natural signed integer in the GC. + * @deprecated silly type. */ +#if GC_ARCH_BITS == 32 +typedef int32_t RTGCINT; +#elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCINT. */ +typedef int64_t RTGCINT; +#endif +/** Pointer to natural signed integer in GC. + * @deprecated silly type. */ +typedef RTGCINT RT_FAR *PRTGCINT; +/** Pointer to const natural signed integer in GC. + * @deprecated silly type. */ +typedef const RTGCINT RT_FAR *PCRTGCINT; + +/** Natural unsigned integer in the GC. + * @deprecated silly type. */ +#if GC_ARCH_BITS == 32 +typedef uint32_t RTGCUINT; +#elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCUINT. */ +typedef uint64_t RTGCUINT; +#endif +/** Pointer to natural unsigned integer in GC. + * @deprecated silly type. */ +typedef RTGCUINT RT_FAR *PRTGCUINT; +/** Pointer to const natural unsigned integer in GC. + * @deprecated silly type. */ +typedef const RTGCUINT RT_FAR *PCRTGCUINT; + +/** Signed integer which can contain a GC pointer. */ +#if GC_ARCH_BITS == 32 +typedef int32_t RTGCINTPTR; +#elif GC_ARCH_BITS == 64 +typedef int64_t RTGCINTPTR; +#endif +/** Pointer to signed integer which can contain a GC pointer. */ +typedef RTGCINTPTR RT_FAR *PRTGCINTPTR; +/** Pointer to const signed integer which can contain a GC pointer. */ +typedef const RTGCINTPTR RT_FAR *PCRTGCINTPTR; + +/** Unsigned integer which can contain a GC pointer. */ +#if GC_ARCH_BITS == 32 +typedef uint32_t RTGCUINTPTR; +#elif GC_ARCH_BITS == 64 +typedef uint64_t RTGCUINTPTR; +#else +# error Unsupported GC_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a GC pointer. */ +typedef RTGCUINTPTR RT_FAR *PRTGCUINTPTR; +/** Pointer to unsigned integer which can contain a GC pointer. */ +typedef const RTGCUINTPTR RT_FAR *PCRTGCUINTPTR; + +/** Unsigned integer which can contain a 32 bits GC pointer. */ +typedef uint32_t RTGCUINTPTR32; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef RTGCUINTPTR32 RT_FAR *PRTGCUINTPTR32; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef const RTGCUINTPTR32 RT_FAR *PCRTGCUINTPTR32; + +/** Unsigned integer which can contain a 64 bits GC pointer. */ +typedef uint64_t RTGCUINTPTR64; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef RTGCUINTPTR64 RT_FAR *PRTGCUINTPTR64; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef const RTGCUINTPTR64 RT_FAR *PCRTGCUINTPTR64; + +/** Guest Physical Memory Address.*/ +typedef uint64_t RTGCPHYS; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS RT_FAR *PRTGCPHYS; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS RT_FAR *PCRTGCPHYS; +/** @def NIL_RTGCPHYS + * NIL GC Physical Address. + * NIL_RTGCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS (~(RTGCPHYS)0U) +/** Max guest physical memory address value. */ +#define RTGCPHYS_MAX UINT64_MAX + + +/** Guest Physical Memory Address; limited to 32 bits.*/ +typedef uint32_t RTGCPHYS32; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS32 RT_FAR *PRTGCPHYS32; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS32 RT_FAR *PCRTGCPHYS32; +/** @def NIL_RTGCPHYS32 + * NIL GC Physical Address. + * NIL_RTGCPHYS32 is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS32 (~(RTGCPHYS32)0) + + +/** Guest Physical Memory Address; limited to 64 bits.*/ +typedef uint64_t RTGCPHYS64; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS64 RT_FAR *PRTGCPHYS64; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS64 RT_FAR *PCRTGCPHYS64; +/** @def NIL_RTGCPHYS64 + * NIL GC Physical Address. + * NIL_RTGCPHYS64 is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS64 (~(RTGCPHYS64)0) + +/** Guest context pointer, 32 bits. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in GC. + */ +typedef RTGCUINTPTR32 RTGCPTR32; +/** Pointer to a guest context pointer. */ +typedef RTGCPTR32 RT_FAR *PRTGCPTR32; +/** Pointer to a const guest context pointer. */ +typedef const RTGCPTR32 RT_FAR *PCRTGCPTR32; +/** @def NIL_RTGCPTR32 + * NIL GC pointer. + */ +#define NIL_RTGCPTR32 ((RTGCPTR32)0) + +/** Guest context pointer, 64 bits. + */ +typedef RTGCUINTPTR64 RTGCPTR64; +/** Pointer to a guest context pointer. */ +typedef RTGCPTR64 RT_FAR *PRTGCPTR64; +/** Pointer to a const guest context pointer. */ +typedef const RTGCPTR64 RT_FAR *PCRTGCPTR64; +/** @def NIL_RTGCPTR64 + * NIL GC pointer. + */ +#define NIL_RTGCPTR64 ((RTGCPTR64)0) + +/** Guest context pointer. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in GC. + */ +#if GC_ARCH_BITS == 64 +typedef RTGCPTR64 RTGCPTR; +/** Pointer to a guest context pointer. */ +typedef PRTGCPTR64 PRTGCPTR; +/** Pointer to a const guest context pointer. */ +typedef PCRTGCPTR64 PCRTGCPTR; +/** @def NIL_RTGCPTR + * NIL GC pointer. + */ +# define NIL_RTGCPTR NIL_RTGCPTR64 +/** Max RTGCPTR value. */ +# define RTGCPTR_MAX UINT64_MAX +#elif GC_ARCH_BITS == 32 +typedef RTGCPTR32 RTGCPTR; +/** Pointer to a guest context pointer. */ +typedef PRTGCPTR32 PRTGCPTR; +/** Pointer to a const guest context pointer. */ +typedef PCRTGCPTR32 PCRTGCPTR; +/** @def NIL_RTGCPTR + * NIL GC pointer. + */ +# define NIL_RTGCPTR NIL_RTGCPTR32 +/** Max RTGCPTR value. */ +# define RTGCPTR_MAX UINT32_MAX +#else +# error "Unsupported GC_ARCH_BITS!" +#endif + +/** Unsigned integer register in the guest context. */ +typedef uint32_t RTGCUINTREG32; +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG32 RT_FAR *PRTGCUINTREG32; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG32 RT_FAR *PCRTGCUINTREG32; + +typedef uint64_t RTGCUINTREG64; +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG64 RT_FAR *PRTGCUINTREG64; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG64 RT_FAR *PCRTGCUINTREG64; + +#if GC_ARCH_BITS == 64 +typedef RTGCUINTREG64 RTGCUINTREG; +#elif GC_ARCH_BITS == 32 +typedef RTGCUINTREG32 RTGCUINTREG; +#else +# error "Unsupported GC_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG RT_FAR *PRTGCUINTREG; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG RT_FAR *PCRTGCUINTREG; + +/** @} */ + +/** @defgroup grp_rt_types_rc Raw mode Context Basic Types + * @{ + */ + +/** Raw mode context pointer; a 32 bits guest context pointer. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in RC. + */ +#ifdef IN_RC +typedef void RT_FAR *RTRCPTR; +#else +typedef uint32_t RTRCPTR; +#endif +/** Pointer to a raw mode context pointer. */ +typedef RTRCPTR RT_FAR *PRTRCPTR; +/** Pointer to a const raw mode context pointer. */ +typedef const RTRCPTR RT_FAR *PCRTRCPTR; +/** @def NIL_RTGCPTR + * NIL RC pointer. + */ +#ifndef IN_RC +# define NIL_RTRCPTR ((RTRCPTR)0) +#else +# define NIL_RTRCPTR (NULL) +#endif +/** @def RTRCPTR_MAX + * The maximum value a RTRCPTR can have. Mostly used as INVALID value. + */ +#define RTRCPTR_MAX ((RTRCPTR)UINT32_MAX) + +/** Raw mode context pointer, unsigned integer variant. */ +typedef int32_t RTRCINTPTR; +/** @def RTRCUINTPTR_MAX + * The maximum value a RTRCUINPTR can have. + */ +#define RTRCUINTPTR_MAX ((RTRCUINTPTR)UINT32_MAX) + +/** Raw mode context pointer, signed integer variant. */ +typedef uint32_t RTRCUINTPTR; +/** @def RTRCINTPTR_MIN + * The minimum value a RTRCINPTR can have. + */ +#define RTRCINTPTR_MIN ((RTRCINTPTR)INT32_MIN) +/** @def RTRCINTPTR_MAX + * The maximum value a RTRCINPTR can have. + */ +#define RTRCINTPTR_MAX ((RTRCINTPTR)INT32_MAX) + +/** @} */ + + +/** @defgroup grp_rt_types_cc Current Context Basic Types + * @{ + */ + +/** Current Context Physical Memory Address.*/ +#ifdef IN_RC +typedef RTGCPHYS RTCCPHYS; +#else +typedef RTHCPHYS RTCCPHYS; +#endif +/** Pointer to Current Context Physical Memory Address. */ +typedef RTCCPHYS RT_FAR *PRTCCPHYS; +/** Pointer to const Current Context Physical Memory Address. */ +typedef const RTCCPHYS RT_FAR *PCRTCCPHYS; +/** @def NIL_RTCCPHYS + * NIL CC Physical Address. + * NIL_RTCCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. + */ +#ifdef IN_RC +# define NIL_RTCCPHYS NIL_RTGCPHYS +#else +# define NIL_RTCCPHYS NIL_RTHCPHYS +#endif + +/** Unsigned integer register in the current context. */ +#if ARCH_BITS == 32 +typedef uint32_t RTCCUINTREG; +#elif ARCH_BITS == 64 +typedef uint64_t RTCCUINTREG; +#elif ARCH_BITS == 16 +typedef uint16_t RTCCUINTREG; +#else +# error "Unsupported ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the current context. */ +typedef RTCCUINTREG RT_FAR *PRTCCUINTREG; +/** Pointer to a const unsigned integer register in the current context. */ +typedef RTCCUINTREG const RT_FAR *PCRTCCUINTREG; + +/** Signed integer register in the current context. */ +#if ARCH_BITS == 32 +typedef int32_t RTCCINTREG; +#elif ARCH_BITS == 64 +typedef int64_t RTCCINTREG; +#elif ARCH_BITS == 16 +typedef int16_t RTCCINTREG; +#endif +/** Pointer to a signed integer register in the current context. */ +typedef RTCCINTREG RT_FAR *PRTCCINTREG; +/** Pointer to a const signed integer register in the current context. */ +typedef RTCCINTREG const RT_FAR *PCRTCCINTREG; + +/** Unsigned integer register in the current context. + * @remarks This is for dealing with EAX in 16-bit mode. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +typedef uint32_t RTCCUINTXREG; +#else +typedef RTCCUINTREG RTCCUINTXREG; +#endif +/** Pointer to an unsigned integer register in the current context. */ +typedef RTCCUINTREG RT_FAR *PRTCCUINTXREG; +/** Pointer to a const unsigned integer register in the current context. */ +typedef RTCCUINTREG const RT_FAR *PCRTCCUINTXREG; + +/** Signed integer extended register in the current context. + * @remarks This is for dealing with EAX in 16-bit mode. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +typedef int32_t RTCCINTXREG; +#else +typedef RTCCINTREG RTCCINTXREG; +#endif +/** Pointer to a signed integer extended register in the current context. */ +typedef RTCCINTXREG RT_FAR *PRTCCINTXREG; +/** Pointer to a const signed integer extended register in the current + * context. */ +typedef RTCCINTXREG const RT_FAR *PCRTCCINTXREG; + +/** @def RTCCUINTREG_C + * Defines a constant of RTCCUINTREG type. + * @param a_Value Constant value */ +/** @def RTCCUINTREG_MAX + * Max value that RTCCUINTREG can hold. */ +/** @def RTCCUINTREG_FMT + * Generic IPRT format specifier for RTCCUINTREG. */ +/** @def RTCCUINTREG_XFMT + * Generic IPRT format specifier for RTCCUINTREG, hexadecimal. */ +/** @def RTCCINTREG_C + * Defines a constant of RTCCINTREG type. + * @param a_Value Constant value */ +/** @def RTCCINTREG_MAX + * Max value that RTCCINTREG can hold. */ +/** @def RTCCINTREG_MIN + * Min value that RTCCINTREG can hold. */ +/** @def RTCCINTREG_XFMT + * Generic IPRT format specifier for RTCCINTREG, hexadecimal. */ +#if ARCH_BITS == 32 +# define RTCCUINTREG_C(a_Value) UINT32_C(a_Value) +# define RTCCUINTREG_MAX UINT32_MAX +# define RTCCUINTREG_FMT "RU32" +# define RTCCUINTREG_XFMT "RX32" +# define RTCCINTREG_C(a_Value) INT32_C(a_Value) +# define RTCCINTREG_MAX INT32_MAX +# define RTCCINTREG_MIN INT32_MIN +# define RTCCINTREG_FMT "RI32" +# define RTCCINTREG_XFMT "RX32" +#elif ARCH_BITS == 64 +# define RTCCUINTREG_C(a_Value) UINT64_C(a_Value) +# define RTCCUINTREG_MAX UINT64_MAX +# define RTCCUINTREG_FMT "RU64" +# define RTCCUINTREG_XFMT "RX64" +# define RTCCINTREG_C(a_Value) INT64_C(a_Value) +# define RTCCINTREG_MAX INT64_MAX +# define RTCCINTREG_MIN INT64_MIN +# define RTCCINTREG_FMT "RI64" +# define RTCCINTREG_XFMT "RX64" +#elif ARCH_BITS == 16 +# define RTCCUINTREG_C(a_Value) UINT16_C(a_Value) +# define RTCCUINTREG_MAX UINT16_MAX +# define RTCCUINTREG_FMT "RU16" +# define RTCCUINTREG_XFMT "RX16" +# define RTCCINTREG_C(a_Value) INT16_C(a_Value) +# define RTCCINTREG_MAX INT16_MAX +# define RTCCINTREG_MIN INT16_MIN +# define RTCCINTREG_FMT "RI16" +# define RTCCINTREG_XFMT "RX16" +#else +# error "Unsupported ARCH_BITS!" +#endif +/** @def RTCCUINTXREG_C + * Defines a constant of RTCCUINTXREG type. + * @param a_Value Constant value */ +/** @def RTCCUINTXREG_MAX + * Max value that RTCCUINTXREG can hold. */ +/** @def RTCCUINTXREG_FMT + * Generic IPRT format specifier for RTCCUINTXREG. */ +/** @def RTCCUINTXREG_XFMT + * Generic IPRT format specifier for RTCCUINTXREG, hexadecimal. */ +/** @def RTCCINTXREG_C + * Defines a constant of RTCCINTXREG type. + * @param a_Value Constant value */ +/** @def RTCCINTXREG_MAX + * Max value that RTCCINTXREG can hold. */ +/** @def RTCCINTXREG_MIN + * Min value that RTCCINTXREG can hold. */ +/** @def RTCCINTXREG_FMT + * Generic IPRT format specifier for RTCCINTXREG. */ +/** @def RTCCINTXREG_XFMT + * Generic IPRT format specifier for RTCCINTXREG, hexadecimal. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +# define RTCCUINTXREG_C(a_Value) UINT32_C(a_Value) +# define RTCCUINTXREG_MAX UINT32_MAX +# define RTCCUINTXREG_FMT "RU32" +# define RTCCUINTXREG_XFMT "RX32" +# define RTCCINTXREG_C(a_Value) INT32_C(a_Value) +# define RTCCINTXREG_MAX INT32_MAX +# define RTCCINTXREG_MIN INT32_MIN +# define RTCCINTXREG_FMT "RI32" +# define RTCCINTXREG_XFMT "RX32" +#else +# define RTCCUINTXREG_C(a_Value) RTCCUINTREG_C(a_Value) +# define RTCCUINTXREG_MAX RTCCUINTREG_MAX +# define RTCCUINTXREG_FMT RTCCUINTREG_FMT +# define RTCCUINTXREG_XFMT RTCCUINTREG_XFMT +# define RTCCINTXREG_C(a_Value) RTCCINTREG_C(a_Value) +# define RTCCINTXREG_MAX RTCCINTREG_MAX +# define RTCCINTXREG_MIN RTCCINTREG_MIN +# define RTCCINTXREG_FMT RTCCINTREG_FMT +# define RTCCINTXREG_XFMT RTCCINTREG_XFMT +#endif +/** @} */ + + + +/** Pointer to a big integer number. */ +typedef struct RTBIGNUM RT_FAR *PRTBIGNUM; +/** Pointer to a const big integer number. */ +typedef struct RTBIGNUM const RT_FAR *PCRTBIGNUM; + + +/** Pointer to a critical section. */ +typedef struct RTCRITSECT RT_FAR *PRTCRITSECT; +/** Pointer to a const critical section. */ +typedef const struct RTCRITSECT RT_FAR *PCRTCRITSECT; + +/** Pointer to a read/write critical section. */ +typedef struct RTCRITSECTRW RT_FAR *PRTCRITSECTRW; +/** Pointer to a const read/write critical section. */ +typedef const struct RTCRITSECTRW RT_FAR *PCRTCRITSECTRW; + + +/** Condition variable handle. */ +typedef R3PTRTYPE(struct RTCONDVARINTERNAL RT_FAR *) RTCONDVAR; +/** Pointer to a condition variable handle. */ +typedef RTCONDVAR RT_FAR *PRTCONDVAR; +/** Nil condition variable handle. */ +#define NIL_RTCONDVAR 0 + +/** Cryptographic (certificate) store handle. */ +typedef R3R0PTRTYPE(struct RTCRSTOREINT RT_FAR *) RTCRSTORE; +/** Pointer to a Cryptographic (certificate) store handle. */ +typedef RTCRSTORE RT_FAR *PRTCRSTORE; +/** Nil Cryptographic (certificate) store handle. */ +#define NIL_RTCRSTORE 0 + +/** Pointer to a const (store) certificate context. */ +typedef struct RTCRCERTCTX const RT_FAR *PCRTCRCERTCTX; + +/** Cryptographic message digest handle. */ +typedef R3R0PTRTYPE(struct RTCRDIGESTINT RT_FAR *) RTCRDIGEST; +/** Pointer to a cryptographic message digest handle. */ +typedef RTCRDIGEST RT_FAR *PRTCRDIGEST; +/** NIL cryptographic message digest handle. */ +#define NIL_RTCRDIGEST (0) + +/** Public key encryption schema handle. */ +typedef R3R0PTRTYPE(struct RTCRPKIXENCRYPTIONINT RT_FAR *) RTCRPKIXENCRYPTION; +/** Pointer to a public key encryption schema handle. */ +typedef RTCRPKIXENCRYPTION RT_FAR *PRTCRPKIXENCRYPTION; +/** NIL public key encryption schema handle */ +#define NIL_RTCRPKIXENCRYPTION (0) + +/** Public key signature schema handle. */ +typedef R3R0PTRTYPE(struct RTCRPKIXSIGNATUREINT RT_FAR *) RTCRPKIXSIGNATURE; +/** Pointer to a public key signature schema handle. */ +typedef RTCRPKIXSIGNATURE RT_FAR *PRTCRPKIXSIGNATURE; +/** NIL public key signature schema handle */ +#define NIL_RTCRPKIXSIGNATURE (0) + +/** X.509 certificate paths builder & validator handle. */ +typedef R3R0PTRTYPE(struct RTCRX509CERTPATHSINT RT_FAR *) RTCRX509CERTPATHS; +/** Pointer to a certificate paths builder & validator handle. */ +typedef RTCRX509CERTPATHS RT_FAR *PRTCRX509CERTPATHS; +/** Nil certificate paths builder & validator handle. */ +#define NIL_RTCRX509CERTPATHS 0 + +/** Directory handle. */ +typedef struct RTDIRINTERNAL *RTDIR; +/** Pointer to directory handle. */ +typedef RTDIR *PRTDIR; +/** NIL directory handle. */ +#define NIL_RTDIR ((RTDIR)0) + +/** File handle. */ +typedef R3R0PTRTYPE(struct RTFILEINT RT_FAR *) RTFILE; +/** Pointer to file handle. */ +typedef RTFILE RT_FAR *PRTFILE; +/** Nil file handle. */ +#define NIL_RTFILE ((RTFILE)~(RTHCINTPTR)0) + +/** Async I/O request handle. */ +typedef R3PTRTYPE(struct RTFILEAIOREQINTERNAL RT_FAR *) RTFILEAIOREQ; +/** Pointer to an async I/O request handle. */ +typedef RTFILEAIOREQ RT_FAR *PRTFILEAIOREQ; +/** Nil request handle. */ +#define NIL_RTFILEAIOREQ 0 + +/** Async I/O completion context handle. */ +typedef R3PTRTYPE(struct RTFILEAIOCTXINTERNAL RT_FAR *) RTFILEAIOCTX; +/** Pointer to an async I/O completion context handle. */ +typedef RTFILEAIOCTX RT_FAR *PRTFILEAIOCTX; +/** Nil context handle. */ +#define NIL_RTFILEAIOCTX 0 + +/** ISO image maker handle. */ +typedef struct RTFSISOMAKERINT RT_FAR *RTFSISOMAKER; +/** Pointer to an ISO image maker handle. */ +typedef RTFSISOMAKER RT_FAR *PRTFSISOMAKER; +/** NIL ISO maker handle. */ +#define NIL_RTFSISOMAKER ((RTFSISOMAKER)0) + +/** INI-file handle. */ +typedef struct RTINIFILEINT RT_FAR *RTINIFILE; +/** Pointer to an INI-file handle. */ +typedef RTINIFILE RT_FAR *PRTINIFILE; +/** NIL INI-file handle. */ +#define NIL_RTINIFILE ((RTINIFILE)0) + +/** Loader module handle. */ +typedef R3R0PTRTYPE(struct RTLDRMODINTERNAL RT_FAR *) RTLDRMOD; +/** Pointer to a loader module handle. */ +typedef RTLDRMOD RT_FAR *PRTLDRMOD; +/** Nil loader module handle. */ +#define NIL_RTLDRMOD 0 + +/** Lock validator class handle. */ +typedef R3R0PTRTYPE(struct RTLOCKVALCLASSINT RT_FAR *) RTLOCKVALCLASS; +/** Pointer to a lock validator class handle. */ +typedef RTLOCKVALCLASS RT_FAR *PRTLOCKVALCLASS; +/** Nil lock validator class handle. */ +#define NIL_RTLOCKVALCLASS ((RTLOCKVALCLASS)0) + +/** Ring-0 memory object handle. */ +typedef R0PTRTYPE(struct RTR0MEMOBJINTERNAL RT_FAR *) RTR0MEMOBJ; +/** Pointer to a Ring-0 memory object handle. */ +typedef RTR0MEMOBJ RT_FAR *PRTR0MEMOBJ; +/** Nil ring-0 memory object handle. */ +#define NIL_RTR0MEMOBJ 0 + +/** Native thread handle. */ +typedef RTHCUINTPTR RTNATIVETHREAD; +/** Pointer to an native thread handle. */ +typedef RTNATIVETHREAD RT_FAR *PRTNATIVETHREAD; +/** Nil native thread handle. */ +#define NIL_RTNATIVETHREAD (~(RTNATIVETHREAD)0) + +/** Pipe handle. */ +typedef R3R0PTRTYPE(struct RTPIPEINTERNAL RT_FAR *) RTPIPE; +/** Pointer to a pipe handle. */ +typedef RTPIPE RT_FAR *PRTPIPE; +/** Nil pipe handle. + * @remarks This is not 0 because of UNIX and OS/2 handle values. Take care! */ +#define NIL_RTPIPE ((RTPIPE)RTHCUINTPTR_MAX) + +/** @typedef RTPOLLSET + * Poll set handle. */ +typedef R3R0PTRTYPE(struct RTPOLLSETINTERNAL RT_FAR *) RTPOLLSET; +/** Pointer to a poll set handle. */ +typedef RTPOLLSET RT_FAR *PRTPOLLSET; +/** Nil poll set handle handle. */ +#define NIL_RTPOLLSET ((RTPOLLSET)0) + +/** Process identifier. */ +typedef uint32_t RTPROCESS; +/** Pointer to a process identifier. */ +typedef RTPROCESS RT_FAR *PRTPROCESS; +/** Nil process identifier. */ +#define NIL_RTPROCESS (~(RTPROCESS)0) + +/** Process ring-0 handle. */ +typedef RTR0UINTPTR RTR0PROCESS; +/** Pointer to a ring-0 process handle. */ +typedef RTR0PROCESS RT_FAR *PRTR0PROCESS; +/** Nil ring-0 process handle. */ +#define NIL_RTR0PROCESS (~(RTR0PROCESS)0) + +/** @typedef RTSEMEVENT + * Event Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMEVENTINTERNAL RT_FAR *) RTSEMEVENT; +/** Pointer to an event semaphore handle. */ +typedef RTSEMEVENT RT_FAR *PRTSEMEVENT; +/** Nil event semaphore handle. */ +#define NIL_RTSEMEVENT 0 + +/** @typedef RTSEMEVENTMULTI + * Event Multiple Release Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMEVENTMULTIINTERNAL RT_FAR *) RTSEMEVENTMULTI; +/** Pointer to an event multiple release semaphore handle. */ +typedef RTSEMEVENTMULTI RT_FAR *PRTSEMEVENTMULTI; +/** Nil multiple release event semaphore handle. */ +#define NIL_RTSEMEVENTMULTI 0 + +/** @typedef RTSEMFASTMUTEX + * Fast mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMFASTMUTEXINTERNAL RT_FAR *) RTSEMFASTMUTEX; +/** Pointer to a fast mutex semaphore handle. */ +typedef RTSEMFASTMUTEX RT_FAR *PRTSEMFASTMUTEX; +/** Nil fast mutex semaphore handle. */ +#define NIL_RTSEMFASTMUTEX 0 + +/** @typedef RTSEMMUTEX + * Mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMMUTEXINTERNAL RT_FAR *) RTSEMMUTEX; +/** Pointer to a mutex semaphore handle. */ +typedef RTSEMMUTEX RT_FAR *PRTSEMMUTEX; +/** Nil mutex semaphore handle. */ +#define NIL_RTSEMMUTEX 0 + +/** @typedef RTSEMSPINMUTEX + * Spinning mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMSPINMUTEXINTERNAL RT_FAR *) RTSEMSPINMUTEX; +/** Pointer to a spinning mutex semaphore handle. */ +typedef RTSEMSPINMUTEX RT_FAR *PRTSEMSPINMUTEX; +/** Nil spinning mutex semaphore handle. */ +#define NIL_RTSEMSPINMUTEX 0 + +/** @typedef RTSEMRW + * Read/Write Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMRWINTERNAL RT_FAR *) RTSEMRW; +/** Pointer to a read/write semaphore handle. */ +typedef RTSEMRW RT_FAR *PRTSEMRW; +/** Nil read/write semaphore handle. */ +#define NIL_RTSEMRW 0 + +/** @typedef RTSEMXROADS + * Crossroads semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMXROADSINTERNAL RT_FAR *) RTSEMXROADS; +/** Pointer to a crossroads semaphore handle. */ +typedef RTSEMXROADS RT_FAR *PRTSEMXROADS; +/** Nil crossroads semaphore handle. */ +#define NIL_RTSEMXROADS ((RTSEMXROADS)0) + +/** Spinlock handle. */ +typedef R3R0PTRTYPE(struct RTSPINLOCKINTERNAL RT_FAR *) RTSPINLOCK; +/** Pointer to a spinlock handle. */ +typedef RTSPINLOCK RT_FAR *PRTSPINLOCK; +/** Nil spinlock handle. */ +#define NIL_RTSPINLOCK 0 + +/** Socket handle. */ +typedef R3R0PTRTYPE(struct RTSOCKETINT RT_FAR *) RTSOCKET; +/** Pointer to socket handle. */ +typedef RTSOCKET RT_FAR *PRTSOCKET; +/** Nil socket handle. */ +#define NIL_RTSOCKET ((RTSOCKET)0) + +/** Pointer to a RTTCPSERVER handle. */ +typedef struct RTTCPSERVER RT_FAR *PRTTCPSERVER; +/** Pointer to a RTTCPSERVER handle. */ +typedef PRTTCPSERVER RT_FAR *PPRTTCPSERVER; +/** Nil RTTCPSERVER handle. */ +#define NIL_RTTCPSERVER ((PRTTCPSERVER)0) + +/** Pointer to a RTUDPSERVER handle. */ +typedef struct RTUDPSERVER RT_FAR *PRTUDPSERVER; +/** Pointer to a RTUDPSERVER handle. */ +typedef PRTUDPSERVER RT_FAR *PPRTUDPSERVER; +/** Nil RTUDPSERVER handle. */ +#define NIL_RTUDPSERVER ((PRTUDPSERVER)0) + +/** Thread handle.*/ +typedef R3R0PTRTYPE(struct RTTHREADINT RT_FAR *) RTTHREAD; +/** Pointer to thread handle. */ +typedef RTTHREAD RT_FAR *PRTTHREAD; +/** Nil thread handle. */ +#define NIL_RTTHREAD 0 + +/** Thread context switching hook handle. */ +typedef R0PTRTYPE(struct RTTHREADCTXHOOKINT RT_FAR *) RTTHREADCTXHOOK; +/** Pointer to Thread context switching hook handle. */ +typedef RTTHREADCTXHOOK RT_FAR *PRTTHREADCTXHOOK; +/** Nil Thread context switching hook handle. */ +#define NIL_RTTHREADCTXHOOK ((RTTHREADCTXHOOK)0) + +/** A TLS index. */ +typedef RTHCINTPTR RTTLS; +/** Pointer to a TLS index. */ +typedef RTTLS RT_FAR *PRTTLS; +/** Pointer to a const TLS index. */ +typedef RTTLS const RT_FAR *PCRTTLS; +/** NIL TLS index value. */ +#define NIL_RTTLS ((RTTLS)-1) + +/** Trace buffer handle. + * @remarks This is not a R3/R0 type like most other handles! + */ +typedef struct RTTRACEBUFINT RT_FAR *RTTRACEBUF; +/** Pointer to a trace buffer handle. */ +typedef RTTRACEBUF RT_FAR *PRTTRACEBUF; +/** Nil trace buffer handle. */ +#define NIL_RTTRACEBUF ((RTTRACEBUF)0) +/** The handle of the default trace buffer. + * This can be used with any of the RTTraceBufAdd APIs. */ +#define RTTRACEBUF_DEFAULT ((RTTRACEBUF)-2) + +/** Handle to a simple heap. */ +typedef R3R0PTRTYPE(struct RTHEAPSIMPLEINTERNAL RT_FAR *) RTHEAPSIMPLE; +/** Pointer to a handle to a simple heap. */ +typedef RTHEAPSIMPLE RT_FAR *PRTHEAPSIMPLE; +/** NIL simple heap handle. */ +#define NIL_RTHEAPSIMPLE ((RTHEAPSIMPLE)0) + +/** Handle to an offset based heap. */ +typedef R3R0PTRTYPE(struct RTHEAPOFFSETINTERNAL RT_FAR *) RTHEAPOFFSET; +/** Pointer to a handle to an offset based heap. */ +typedef RTHEAPOFFSET RT_FAR *PRTHEAPOFFSET; +/** NIL offset based heap handle. */ +#define NIL_RTHEAPOFFSET ((RTHEAPOFFSET)0) + +/** Handle to an environment block. */ +typedef R3PTRTYPE(struct RTENVINTERNAL RT_FAR *) RTENV; +/** Pointer to a handle to an environment block. */ +typedef RTENV RT_FAR *PRTENV; +/** NIL simple heap handle. */ +#define NIL_RTENV ((RTENV)0) + +/** A CPU identifier. + * @remarks This doesn't have to correspond to the APIC ID (intel/amd). Nor + * does it have to correspond to the bits in the affinity mask, at + * least not until we've sorted out Windows NT. */ +typedef uint32_t RTCPUID; +/** Pointer to a CPU identifier. */ +typedef RTCPUID RT_FAR *PRTCPUID; +/** Pointer to a const CPU identifier. */ +typedef RTCPUID const RT_FAR *PCRTCPUID; +/** Nil CPU Id. */ +#define NIL_RTCPUID ((RTCPUID)~0) + +/** The maximum number of CPUs a set can contain and IPRT is able + * to reference. (Should be max of support arch/platforms.) + * @remarks Must be a multiple of 64 (see RTCPUSET). */ +#if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) +# define RTCPUSET_MAX_CPUS 256 +#elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define RTCPUSET_MAX_CPUS 1024 +#else +# define RTCPUSET_MAX_CPUS 64 +#endif +/** A CPU set. + * @note Treat this as an opaque type and always use RTCpuSet* for + * manipulating it. */ +typedef struct RTCPUSET +{ + /** The bitmap. */ + uint64_t bmSet[RTCPUSET_MAX_CPUS / 64]; +} RTCPUSET; +/** Pointer to a CPU set. */ +typedef RTCPUSET RT_FAR *PRTCPUSET; +/** Pointer to a const CPU set. */ +typedef RTCPUSET const RT_FAR *PCRTCPUSET; + +/** A handle table handle. */ +typedef R3R0PTRTYPE(struct RTHANDLETABLEINT RT_FAR *) RTHANDLETABLE; +/** A pointer to a handle table handle. */ +typedef RTHANDLETABLE RT_FAR *PRTHANDLETABLE; +/** @def NIL_RTHANDLETABLE + * NIL handle table handle. */ +#define NIL_RTHANDLETABLE ((RTHANDLETABLE)0) + +/** A handle to a low resolution timer. */ +typedef R3R0PTRTYPE(struct RTTIMERLRINT RT_FAR *) RTTIMERLR; +/** A pointer to a low resolution timer handle. */ +typedef RTTIMERLR RT_FAR *PRTTIMERLR; +/** @def NIL_RTTIMERLR + * NIL low resolution timer handle value. */ +#define NIL_RTTIMERLR ((RTTIMERLR)0) + +/** Handle to a random number generator. */ +typedef R3R0PTRTYPE(struct RTRANDINT RT_FAR *) RTRAND; +/** Pointer to a random number generator handle. */ +typedef RTRAND RT_FAR *PRTRAND; +/** NIL random number generator handle value. */ +#define NIL_RTRAND ((RTRAND)0) + +/** Debug address space handle. */ +typedef R3R0PTRTYPE(struct RTDBGASINT RT_FAR *) RTDBGAS; +/** Pointer to a debug address space handle. */ +typedef RTDBGAS RT_FAR *PRTDBGAS; +/** NIL debug address space handle. */ +#define NIL_RTDBGAS ((RTDBGAS)0) + +/** Debug module handle. */ +typedef R3R0PTRTYPE(struct RTDBGMODINT RT_FAR *) RTDBGMOD; +/** Pointer to a debug module handle. */ +typedef RTDBGMOD RT_FAR *PRTDBGMOD; +/** NIL debug module handle. */ +#define NIL_RTDBGMOD ((RTDBGMOD)0) + +/** Manifest handle. */ +typedef struct RTMANIFESTINT RT_FAR *RTMANIFEST; +/** Pointer to a manifest handle. */ +typedef RTMANIFEST RT_FAR *PRTMANIFEST; +/** NIL manifest handle. */ +#define NIL_RTMANIFEST ((RTMANIFEST)~(uintptr_t)0) + +/** Memory pool handle. */ +typedef R3R0PTRTYPE(struct RTMEMPOOLINT RT_FAR *) RTMEMPOOL; +/** Pointer to a memory pool handle. */ +typedef RTMEMPOOL RT_FAR *PRTMEMPOOL; +/** NIL memory pool handle. */ +#define NIL_RTMEMPOOL ((RTMEMPOOL)0) +/** The default memory pool handle. */ +#define RTMEMPOOL_DEFAULT ((RTMEMPOOL)-2) + +/** String cache handle. */ +typedef R3R0PTRTYPE(struct RTSTRCACHEINT RT_FAR *) RTSTRCACHE; +/** Pointer to a string cache handle. */ +typedef RTSTRCACHE RT_FAR *PRTSTRCACHE; +/** NIL string cache handle. */ +#define NIL_RTSTRCACHE ((RTSTRCACHE)0) +/** The default string cache handle. */ +#define RTSTRCACHE_DEFAULT ((RTSTRCACHE)-2) + + +/** Virtual Filesystem handle. */ +typedef struct RTVFSINTERNAL RT_FAR *RTVFS; +/** Pointer to a VFS handle. */ +typedef RTVFS RT_FAR *PRTVFS; +/** A NIL VFS handle. */ +#define NIL_RTVFS ((RTVFS)~(uintptr_t)0) + +/** Virtual Filesystem base object handle. */ +typedef struct RTVFSOBJINTERNAL RT_FAR *RTVFSOBJ; +/** Pointer to a VFS base object handle. */ +typedef RTVFSOBJ RT_FAR *PRTVFSOBJ; +/** A NIL VFS base object handle. */ +#define NIL_RTVFSOBJ ((RTVFSOBJ)~(uintptr_t)0) + +/** Virtual Filesystem directory handle. */ +typedef struct RTVFSDIRINTERNAL RT_FAR *RTVFSDIR; +/** Pointer to a VFS directory handle. */ +typedef RTVFSDIR RT_FAR *PRTVFSDIR; +/** A NIL VFS directory handle. */ +#define NIL_RTVFSDIR ((RTVFSDIR)~(uintptr_t)0) + +/** Virtual Filesystem filesystem stream handle. */ +typedef struct RTVFSFSSTREAMINTERNAL RT_FAR *RTVFSFSSTREAM; +/** Pointer to a VFS filesystem stream handle. */ +typedef RTVFSFSSTREAM RT_FAR *PRTVFSFSSTREAM; +/** A NIL VFS filesystem stream handle. */ +#define NIL_RTVFSFSSTREAM ((RTVFSFSSTREAM)~(uintptr_t)0) + +/** Virtual Filesystem I/O stream handle. */ +typedef struct RTVFSIOSTREAMINTERNAL RT_FAR *RTVFSIOSTREAM; +/** Pointer to a VFS I/O stream handle. */ +typedef RTVFSIOSTREAM RT_FAR *PRTVFSIOSTREAM; +/** A NIL VFS I/O stream handle. */ +#define NIL_RTVFSIOSTREAM ((RTVFSIOSTREAM)~(uintptr_t)0) + +/** Virtual Filesystem file handle. */ +typedef struct RTVFSFILEINTERNAL RT_FAR *RTVFSFILE; +/** Pointer to a VFS file handle. */ +typedef RTVFSFILE RT_FAR *PRTVFSFILE; +/** A NIL VFS file handle. */ +#define NIL_RTVFSFILE ((RTVFSFILE)~(uintptr_t)0) + +/** Virtual Filesystem symbolic link handle. */ +typedef struct RTVFSSYMLINKINTERNAL RT_FAR *RTVFSSYMLINK; +/** Pointer to a VFS symbolic link handle. */ +typedef RTVFSSYMLINK RT_FAR *PRTVFSSYMLINK; +/** A NIL VFS symbolic link handle. */ +#define NIL_RTVFSSYMLINK ((RTVFSSYMLINK)~(uintptr_t)0) + +/** Async I/O manager handle. */ +typedef struct RTAIOMGRINT RT_FAR *RTAIOMGR; +/** Pointer to a async I/O manager handle. */ +typedef RTAIOMGR RT_FAR *PRTAIOMGR; +/** A NIL async I/O manager handle. */ +#define NIL_RTAIOMGR ((RTAIOMGR)~(uintptr_t)0) + +/** Async I/O manager file handle. */ +typedef struct RTAIOMGRFILEINT RT_FAR *RTAIOMGRFILE; +/** Pointer to a async I/O manager file handle. */ +typedef RTAIOMGRFILE RT_FAR *PRTAIOMGRFILE; +/** A NIL async I/O manager file handle. */ +#define NIL_RTAIOMGRFILE ((RTAIOMGRFILE)~(uintptr_t)0) + +/** Kernel module information record handle. */ +typedef struct RTKRNLMODINFOINT RT_FAR *RTKRNLMODINFO; +/** Pointer to a kernel information record handle. */ +typedef RTKRNLMODINFO RT_FAR *PRTKRNLMODINFO; +/** A NIL kernel module information record handle. */ +#define NIL_RTKRNLMODINFO ((RTKRNLMODINFO)~(uintptr_t)0); + +/** + * Handle type. + * + * This is usually used together with RTHANDLEUNION. + */ +typedef enum RTHANDLETYPE +{ + /** The invalid zero value. */ + RTHANDLETYPE_INVALID = 0, + /** File handle. */ + RTHANDLETYPE_FILE, + /** Pipe handle */ + RTHANDLETYPE_PIPE, + /** Socket handle. */ + RTHANDLETYPE_SOCKET, + /** Thread handle. */ + RTHANDLETYPE_THREAD, + /** The end of the valid values. */ + RTHANDLETYPE_END, + /** The 32-bit type blow up. */ + RTHANDLETYPE_32BIT_HACK = 0x7fffffff +} RTHANDLETYPE; +/** Pointer to a handle type. */ +typedef RTHANDLETYPE RT_FAR *PRTHANDLETYPE; + +/** + * Handle union. + * + * This is usually used together with RTHANDLETYPE or as RTHANDLE. + */ +typedef union RTHANDLEUNION +{ + RTFILE hFile; /**< File handle. */ + RTPIPE hPipe; /**< Pipe handle. */ + RTSOCKET hSocket; /**< Socket handle. */ + RTTHREAD hThread; /**< Thread handle. */ + /** Generic integer handle value. + * Note that RTFILE is not yet pointer sized, so accessing it via this member + * isn't necessarily safe or fully portable. */ + RTHCUINTPTR uInt; +} RTHANDLEUNION; +/** Pointer to a handle union. */ +typedef RTHANDLEUNION RT_FAR *PRTHANDLEUNION; +/** Pointer to a const handle union. */ +typedef RTHANDLEUNION const RT_FAR *PCRTHANDLEUNION; + +/** + * Generic handle. + */ +typedef struct RTHANDLE +{ + /** The handle type. */ + RTHANDLETYPE enmType; + /** The handle value. */ + RTHANDLEUNION u; +} RTHANDLE; +/** Pointer to a generic handle. */ +typedef RTHANDLE RT_FAR *PRTHANDLE; +/** Pointer to a const generic handle. */ +typedef RTHANDLE const RT_FAR *PCRTHANDLE; + + +/** + * Standard handles. + * + * @remarks These have the correct file descriptor values for unixy systems and + * can be used directly in code specific to those platforms. + */ +typedef enum RTHANDLESTD +{ + /** Invalid standard handle. */ + RTHANDLESTD_INVALID = -1, + /** The standard input handle. */ + RTHANDLESTD_INPUT = 0, + /** The standard output handle. */ + RTHANDLESTD_OUTPUT, + /** The standard error handle. */ + RTHANDLESTD_ERROR, + /** The typical 32-bit type hack. */ + RTHANDLESTD_32BIT_HACK = 0x7fffffff +} RTHANDLESTD; + + +/** + * Error info. + * + * See RTErrInfo*. + */ +typedef struct RTERRINFO +{ + /** Flags, see RTERRINFO_FLAGS_XXX. */ + uint32_t fFlags; + /** The status code. */ + int32_t rc; + /** The size of the message */ + size_t cbMsg; + /** The error buffer. */ + char *pszMsg; + /** Reserved for future use. */ + void *apvReserved[2]; +} RTERRINFO; +/** Pointer to an error info structure. */ +typedef RTERRINFO RT_FAR *PRTERRINFO; +/** Pointer to a const error info structure. */ +typedef RTERRINFO const RT_FAR *PCRTERRINFO; + +/** + * Static error info structure, see RTErrInfoInitStatic. + */ +typedef struct RTERRINFOSTATIC +{ + /** The core error info. */ + RTERRINFO Core; + /** The static message buffer. */ + char szMsg[3072]; +} RTERRINFOSTATIC; +/** Pointer to a error info buffer. */ +typedef RTERRINFOSTATIC RT_FAR *PRTERRINFOSTATIC; +/** Pointer to a const static error info buffer. */ +typedef RTERRINFOSTATIC const RT_FAR *PCRTERRINFOSTATIC; + + +/** + * UUID data type. + * + * See RTUuid*. + * + * @remarks IPRT defines that the first three integers in the @c Gen struct + * interpretation are in little endian representation. This is + * different to many other UUID implementation, and requires + * conversion if you need to achieve consistent results. + */ +typedef union RTUUID +{ + /** 8-bit view. */ + uint8_t au8[16]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 64-bit view. */ + uint64_t au64[2]; + /** The way the UUID is declared by the DCE specification. */ + struct + { + uint32_t u32TimeLow; + uint16_t u16TimeMid; + uint16_t u16TimeHiAndVersion; + uint8_t u8ClockSeqHiAndReserved; + uint8_t u8ClockSeqLow; + uint8_t au8Node[6]; + } Gen; +} RTUUID; +/** Pointer to UUID data. */ +typedef RTUUID RT_FAR *PRTUUID; +/** Pointer to readonly UUID data. */ +typedef const RTUUID RT_FAR *PCRTUUID; + +/** Initializes a RTUUID structure with all zeros (RTUuidIsNull() true). */ +#define RTUUID_INITIALIZE_NULL { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +/** UUID string maximum length. */ +#define RTUUID_STR_LENGTH 37 + + +/** Compression handle. */ +typedef struct RTZIPCOMP RT_FAR *PRTZIPCOMP; +/** Decompressor handle. */ +typedef struct RTZIPDECOMP RT_FAR *PRTZIPDECOMP; + + +/** + * Unicode Code Point. + */ +typedef uint32_t RTUNICP; +/** Pointer to an Unicode Code Point. */ +typedef RTUNICP RT_FAR *PRTUNICP; +/** Pointer to an Unicode Code Point. */ +typedef const RTUNICP RT_FAR *PCRTUNICP; +/** Max value a RTUNICP type can hold. */ +#define RTUNICP_MAX ( ~(RTUNICP)0 ) +/** Invalid code point. + * This is returned when encountered invalid encodings or invalid + * unicode code points. */ +#define RTUNICP_INVALID ( UINT32_C(0xfffffffe) ) + + +/** + * UTF-16 character. + * @remark wchar_t is not usable since it's compiler defined. + * @remark When we use the term character we're not talking about unicode code point, but + * the basic unit of the string encoding. Thus cwc - count of wide chars - means + * count of RTUTF16; cuc - count of unicode chars - means count of RTUNICP; + * and cch means count of the typedef 'char', which is assumed to be an octet. + */ +typedef uint16_t RTUTF16; +/** Pointer to a UTF-16 character. */ +typedef RTUTF16 RT_FAR *PRTUTF16; +/** Pointer to a const UTF-16 character. */ +typedef const RTUTF16 RT_FAR *PCRTUTF16; + + +/** + * String tuple to go with the RT_STR_TUPLE macro. + */ +typedef struct RTSTRTUPLE +{ + /** The string. */ + const char *psz; + /** The string length. */ + size_t cch; +} RTSTRTUPLE; +/** Pointer to a string tuple. */ +typedef RTSTRTUPLE RT_FAR *PRTSTRTUPLE; +/** Pointer to a const string tuple. */ +typedef RTSTRTUPLE const RT_FAR *PCRTSTRTUPLE; + +/** + * Wait for ever if we have to. + */ +#define RT_INDEFINITE_WAIT (~0U) + + +/** + * Generic process callback. + * + * @returns VBox status code. Failure will cancel the operation. + * @param uPercentage The percentage of the operation which has been completed. + * @param pvUser The user specified argument. + */ +typedef DECLCALLBACK(int) FNRTPROGRESS(unsigned uPrecentage, void *pvUser); +/** Pointer to a generic progress callback function, FNRTPROCESS(). */ +typedef FNRTPROGRESS *PFNRTPROGRESS; + +/** + * Generic vprintf-like callback function for dumpers. + * + * @param pvUser User argument. + * @param pszFormat The format string. + * @param va Arguments for the format string. + */ +typedef DECLCALLBACK(void) FNRTDUMPPRINTFV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); +/** Pointer to a generic printf-like function for dumping. */ +typedef FNRTDUMPPRINTFV *PFNRTDUMPPRINTFV; + + +/** + * A point in a two dimentional coordinate system. + */ +typedef struct RTPOINT +{ + /** X coordinate. */ + int32_t x; + /** Y coordinate. */ + int32_t y; +} RTPOINT; +/** Pointer to a point. */ +typedef RTPOINT RT_FAR *PRTPOINT; +/** Pointer to a const point. */ +typedef const RTPOINT RT_FAR *PCRTPOINT; + + +/** + * Rectangle data type, double point. + */ +typedef struct RTRECT +{ + /** left X coordinate. */ + int32_t xLeft; + /** top Y coordinate. */ + int32_t yTop; + /** right X coordinate. (exclusive) */ + int32_t xRight; + /** bottom Y coordinate. (exclusive) */ + int32_t yBottom; +} RTRECT; +/** Pointer to a double point rectangle. */ +typedef RTRECT RT_FAR *PRTRECT; +/** Pointer to a const double point rectangle. */ +typedef const RTRECT RT_FAR *PCRTRECT; + + +/** + * Rectangle data type, point + size. + */ +typedef struct RTRECT2 +{ + /** X coordinate. + * Unless stated otherwise, this is the top left corner. */ + int32_t x; + /** Y coordinate. + * Unless stated otherwise, this is the top left corner. */ + int32_t y; + /** The width. + * Unless stated otherwise, this is to the right of (x,y) and will not + * be a negative number. */ + int32_t cx; + /** The height. + * Unless stated otherwise, this is down from (x,y) and will not be a + * negative number. */ + int32_t cy; +} RTRECT2; +/** Pointer to a point + size rectangle. */ +typedef RTRECT2 RT_FAR *PRTRECT2; +/** Pointer to a const point + size rectangle. */ +typedef const RTRECT2 RT_FAR *PCRTRECT2; + + +/** + * The size of a rectangle. + */ +typedef struct RTRECTSIZE +{ + /** The width (along the x-axis). */ + uint32_t cx; + /** The height (along the y-axis). */ + uint32_t cy; +} RTRECTSIZE; +/** Pointer to a rectangle size. */ +typedef RTRECTSIZE RT_FAR *PRTRECTSIZE; +/** Pointer to a const rectangle size. */ +typedef const RTRECTSIZE RT_FAR *PCRTRECTSIZE; + + +/** + * Ethernet MAC address. + * + * The first 24 bits make up the Organisationally Unique Identifier (OUI), + * where the first bit (little endian) indicates multicast (set) / unicast, + * and the second bit indicates locally (set) / global administered. If all + * bits are set, it's a broadcast. + */ +typedef union RTMAC +{ + /** @todo add a bitfield view of this stuff. */ + /** 8-bit view. */ + uint8_t au8[6]; + /** 16-bit view. */ + uint16_t au16[3]; +} RTMAC; +/** Pointer to a MAC address. */ +typedef RTMAC RT_FAR *PRTMAC; +/** Pointer to a readonly MAC address. */ +typedef const RTMAC RT_FAR *PCRTMAC; + + +/** Pointer to a lock validator record. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALRECEXCL RT_FAR *PRTLOCKVALRECEXCL; +/** Pointer to a record of one ownership share. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALRECSHRD RT_FAR *PRTLOCKVALRECSHRD; +/** Pointer to a lock validator source position. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALSRCPOS RT_FAR *PRTLOCKVALSRCPOS; +/** Pointer to a const lock validator source position. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALSRCPOS const RT_FAR *PCRTLOCKVALSRCPOS; + +/** @name Special sub-class values. + * The range 16..UINT32_MAX is available to the user, the range 0..15 is + * reserved for the lock validator. In the user range the locks can only be + * taking in ascending order. + * @{ */ +/** Invalid value. */ +#define RTLOCKVAL_SUB_CLASS_INVALID UINT32_C(0) +/** Not allowed to be taken with any other locks in the same class. + * This is the recommended value. */ +#define RTLOCKVAL_SUB_CLASS_NONE UINT32_C(1) +/** Any order is allowed within the class. */ +#define RTLOCKVAL_SUB_CLASS_ANY UINT32_C(2) +/** The first user value. */ +#define RTLOCKVAL_SUB_CLASS_USER UINT32_C(16) +/** @} */ + + +/** + * Digest types. + */ +typedef enum RTDIGESTTYPE +{ + /** Invalid digest value. */ + RTDIGESTTYPE_INVALID = 0, + /** Unknown digest type. */ + RTDIGESTTYPE_UNKNOWN, + /** CRC32 checksum. */ + RTDIGESTTYPE_CRC32, + /** CRC64 checksum. */ + RTDIGESTTYPE_CRC64, + /** MD2 checksum (unsafe!). */ + RTDIGESTTYPE_MD2, + /** MD4 checksum (unsafe!!). */ + RTDIGESTTYPE_MD4, + /** MD5 checksum (unsafe!). */ + RTDIGESTTYPE_MD5, + /** SHA-1 checksum (unsafe!). */ + RTDIGESTTYPE_SHA1, + /** SHA-224 checksum. */ + RTDIGESTTYPE_SHA224, + /** SHA-256 checksum. */ + RTDIGESTTYPE_SHA256, + /** SHA-384 checksum. */ + RTDIGESTTYPE_SHA384, + /** SHA-512 checksum. */ + RTDIGESTTYPE_SHA512, + /** SHA-512/224 checksum. */ + RTDIGESTTYPE_SHA512T224, + /** SHA-512/256 checksum. */ + RTDIGESTTYPE_SHA512T256, + /** End of valid types. */ + RTDIGESTTYPE_END, + /** Usual 32-bit type blowup. */ + RTDIGESTTYPE_32BIT_HACK = 0x7fffffff +} RTDIGESTTYPE; + +/** + * Process exit codes. + */ +typedef enum RTEXITCODE +{ + /** Success. */ + RTEXITCODE_SUCCESS = 0, + /** General failure. */ + RTEXITCODE_FAILURE = 1, + /** Invalid arguments. */ + RTEXITCODE_SYNTAX = 2, + /** Initialization failure (usually IPRT, but could be used for other + * components as well). */ + RTEXITCODE_INIT = 3, + /** Test skipped. */ + RTEXITCODE_SKIPPED = 4, + /** The end of valid exit codes. */ + RTEXITCODE_END, + /** The usual 32-bit type hack. */ + RTEXITCODE_32BIT_HACK = 0x7fffffff +} RTEXITCODE; + +/** + * Range descriptor. + */ +typedef struct RTRANGE +{ + /** Start offset. */ + uint64_t offStart; + /** Range size. */ + size_t cbRange; +} RTRANGE; +/** Pointer to a range descriptor. */ +typedef RTRANGE RT_FAR *PRTRANGE; +/** Pointer to a readonly range descriptor. */ +typedef const RTRANGE RT_FAR *PCRTRANGE; + + +/** + * Generic pointer union. + */ +typedef union RTPTRUNION +{ + /** Pointer into the void. */ + void RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char RT_FAR *pch; + /** Pointer to char value. */ + unsigned char RT_FAR *puch; + /** Pointer to a int value. */ + int RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int RT_FAR *pu; + /** Pointer to a long value. */ + long RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + PRTUTF16 pwc; + /** Pointer to a UUID character. */ + PRTUUID pUuid; +} RTPTRUNION; +/** Pointer to a pointer union. */ +typedef RTPTRUNION RT_FAR *PRTPTRUNION; + +/** + * Generic const pointer union. + */ +typedef union RTCPTRUNION +{ + /** Pointer into the void. */ + void const RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char const RT_FAR *pch; + /** Pointer to char value. */ + unsigned char const RT_FAR *puch; + /** Pointer to a int value. */ + int const RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int const RT_FAR *pu; + /** Pointer to a long value. */ + long const RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long const RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t const RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t const RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t const RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t const RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + PCRTUTF16 pwc; + /** Pointer to a UUID character. */ + PCRTUUID pUuid; +} RTCPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTCPTRUNION RT_FAR *PRTCPTRUNION; + +/** + * Generic volatile pointer union. + */ +typedef union RTVPTRUNION +{ + /** Pointer into the void. */ + void volatile RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char volatile RT_FAR *pch; + /** Pointer to char value. */ + unsigned char volatile RT_FAR *puch; + /** Pointer to a int value. */ + int volatile RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int volatile RT_FAR *pu; + /** Pointer to a long value. */ + long volatile RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long volatile RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t volatile RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t volatile RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t volatile RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t volatile RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + RTUTF16 volatile RT_FAR *pwc; + /** Pointer to a UUID character. */ + RTUUID volatile RT_FAR *pUuid; +} RTVPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTVPTRUNION RT_FAR *PRTVPTRUNION; + +/** + * Generic const volatile pointer union. + */ +typedef union RTCVPTRUNION +{ + /** Pointer into the void. */ + void const volatile RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char const volatile RT_FAR *pch; + /** Pointer to char value. */ + unsigned char const volatile RT_FAR *puch; + /** Pointer to a int value. */ + int const volatile RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int const volatile RT_FAR *pu; + /** Pointer to a long value. */ + long const volatile RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long const volatile RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t const volatile RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t const volatile RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t const volatile RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t const volatile RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + RTUTF16 const volatile RT_FAR *pwc; + /** Pointer to a UUID character. */ + RTUUID const volatile RT_FAR *pUuid; +} RTCVPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTCVPTRUNION RT_FAR *PRTCVPTRUNION; + + + +#ifdef __cplusplus +/** + * Strict type validation helper class. + * + * See RTErrStrictType and RT_SUCCESS_NP. + */ +class RTErrStrictType2 +{ +protected: + /** The status code. */ + int32_t m_rc; + +public: + /** + * Constructor. + * @param rc IPRT style status code. + */ + RTErrStrictType2(int32_t rc) : m_rc(rc) + { + } + + /** + * Get the status code. + * @returns IPRT style status code. + */ + int32_t getValue() const + { + return m_rc; + } +}; +#endif /* __cplusplus */ +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/uint64.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/uint64.h @@ -0,0 +1,1330 @@ +/** @file + * IPRT - RTUINT64U methods for old 32-bit and 16-bit compilers. + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_uint64_h +#define ___iprt_uint64_h + +#include +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_uint64 RTUInt64 - 64-bit Unsigned Integer Methods for ancient compilers + * @ingroup grp_rt + * @{ + */ + + +/** + * Test if a 128-bit unsigned integer value is zero. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64IsZero(PRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + return pValue->s.Lo == 0 + && pValue->s.Hi == 0; +#else + return pValue->Words.w0 == 0 + && pValue->Words.w1 == 0 + && pValue->Words.w2 == 0 + && pValue->Words.w3 == 0; +#endif +} + + +/** + * Set a 128-bit unsigned integer value to zero. + * + * @returns pResult + * @param pResult The result variable. + */ +DECLINLINE(PRTUINT64U) RTUInt64SetZero(PRTUINT64U pResult) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = 0; + pResult->s.Lo = 0; +#else + pResult->Words.w0 = 0; + pResult->Words.w1 = 0; + pResult->Words.w2 = 0; + pResult->Words.w3 = 0; +#endif + return pResult; +} + + +/** + * Set a 32-bit unsigned integer value to the maximum value. + * + * @returns pResult + * @param pResult The result variable. + */ +DECLINLINE(PRTUINT64U) RTUInt64SetMax(PRTUINT64U pResult) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = UINT32_MAX; + pResult->s.Lo = UINT32_MAX; +#else + pResult->Words.w0 = UINT16_MAX; + pResult->Words.w1 = UINT16_MAX; + pResult->Words.w2 = UINT16_MAX; + pResult->Words.w3 = UINT16_MAX; +#endif + return pResult; +} + + + + +/** + * Adds two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Add(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi + pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo + pValue2->s.Lo; + if (pResult->s.Lo < pValue1->s.Lo) + pResult->s.Hi++; + return pResult; +} + + +/** + * Adds a 64-bit and a 32-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64AddU32(PRTUINT64U pResult, PCRTUINT64U pValue1, uint32_t uValue2) +{ + pResult->s.Hi = pValue1->s.Hi; + pResult->s.Lo = pValue1->s.Lo + uValue2; + if (pResult->s.Lo < pValue1->s.Lo) + pResult->s.Hi++; + return pResult; +} + + +/** + * Subtracts a 64-bit unsigned integer value from another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The minuend value. + * @param pValue2 The subtrahend value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Sub(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Lo = pValue1->s.Lo - pValue2->s.Lo; + pResult->s.Hi = pValue1->s.Hi - pValue2->s.Hi; + if (pResult->s.Lo > pValue1->s.Lo) + pResult->s.Hi--; + return pResult; +} + + +/** + * Multiplies two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Mul(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT32U uTmp; + + /* multiply all words in v1 by v2.w0. */ + pResult->s.Lo = (uint32_t)pValue1->Words.w0 * pValue2->Words.w0; + + uTmp.u = (uint32_t)pValue1->Words.w1 * pValue2->Words.w0; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w2 * pValue2->Words.w0; + pResult->Words.w3 += pValue1->Words.w3 * pValue2->Words.w0; + + /* multiply w0, w1 & w2 in v1 by v2.w1. */ + uTmp.u = (uint32_t)pValue1->Words.w0 * pValue2->Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w1 * pValue2->Words.w1; + pResult->Words.w3 += pValue1->Words.w2 * pValue2->Words.w1; + + /* multiply w0 & w1 in v1 by v2.w2. */ + pResult->s.Hi += (uint32_t)pValue1->Words.w0 * pValue2->Words.w2; + pResult->Words.w3 += pValue1->Words.w1 * pValue2->Words.w2; + + /* multiply w0 in v1 by v2.w3. */ + pResult->Words.w3 += pValue1->Words.w0 * pValue2->Words.w3; + + return pResult; +} + + +/** + * Multiplies an 64-bit unsigned integer by a 32-bit unsigned integer value. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64MulByU32(PRTUINT64U pResult, PCRTUINT64U pValue1, uint32_t uValue2) +{ + uint16_t const uLoValue2 = (uint16_t)uValue2; + uint16_t const uHiValue2 = (uint16_t)(uValue2 >> 16); + RTUINT32U uTmp; + + /* multiply all words in v1 by uLoValue1. */ + pResult->s.Lo = (uint32_t)pValue1->Words.w0 * uLoValue2; + + uTmp.u = (uint32_t)pValue1->Words.w1 * uLoValue2; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w2 * uLoValue2; + pResult->Words.w3 += pValue1->Words.w3 * uLoValue2; + + /* multiply w0, w1 & w2 in v1 by uHiValue2. */ + uTmp.u = (uint32_t)pValue1->Words.w0 * uHiValue2; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w1 * uHiValue2; + pResult->Words.w3 += pValue1->Words.w2 * uHiValue2; + + return pResult; +} + + +/** + * Multiplies two 32-bit unsigned integer values with 64-bit precision. + * + * @returns pResult + * @param pResult The result variable. + * @param uValue1 The first value. 32-bit. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64MulU32ByU32(PRTUINT64U pResult, uint32_t uValue1, uint32_t uValue2) +{ + uint16_t const uLoValue1 = (uint16_t)uValue1; + uint16_t const uHiValue1 = (uint16_t)(uValue1 >> 16); + uint16_t const uLoValue2 = (uint16_t)uValue2; + uint16_t const uHiValue2 = (uint16_t)(uValue2 >> 16); + RTUINT32U uTmp; + + /* Multiply uLoValue1 and uHiValue1 by uLoValue1. */ + pResult->s.Lo = (uint32_t)uLoValue1 * uLoValue2; + + uTmp.u = (uint32_t)uHiValue1 * uLoValue2; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + /* Multiply uLoValue1 and uHiValue1 by uHiValue2. */ + uTmp.u = (uint32_t)uLoValue1 * uHiValue2; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)uHiValue1 * uHiValue2; + return pResult; +} + + +DECLINLINE(PRTUINT64U) RTUInt64DivRem(PRTUINT64U pQuotient, PRTUINT64U pRemainder, PCRTUINT64U pValue1, PCRTUINT64U pValue2); + +/** + * Divides a 64-bit unsigned integer value by another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Div(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + return RTUInt64DivRem(pResult, &Ignored, pValue1, pValue2); +} + + +/** + * Divides a 64-bit unsigned integer value by another, returning the remainder. + * + * @returns pResult + * @param pResult The result variable (remainder). + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Mod(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + RTUInt64DivRem(&Ignored, pResult, pValue1, pValue2); + return pResult; +} + + +/** + * Bitwise AND of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64And(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi & pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo & pValue2->s.Lo; + return pResult; +} + + +/** + * Bitwise OR of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Or( PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi | pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo | pValue2->s.Lo; + return pResult; +} + + +/** + * Bitwise XOR of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Xor(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi ^ pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo ^ pValue2->s.Lo; + return pResult; +} + + +/** + * Shifts a 64-bit unsigned integer value @a cBits to the left. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to shift. + * @param cBits The number of bits to shift it. + */ +DECLINLINE(PRTUINT64U) RTUInt64ShiftLeft(PRTUINT64U pResult, PCRTUINT64U pValue, int cBits) +{ + cBits &= 63; + if (cBits < 32) + { + pResult->s.Lo = pValue->s.Lo << cBits; + pResult->s.Hi = (pValue->s.Hi << cBits) | (pValue->s.Lo >> (32 - cBits)); + } + else + { + pResult->s.Lo = 0; + pResult->s.Hi = pValue->s.Lo << (cBits - 32); + } + return pResult; +} + + +/** + * Shifts a 64-bit unsigned integer value @a cBits to the right. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to shift. + * @param cBits The number of bits to shift it. + */ +DECLINLINE(PRTUINT64U) RTUInt64ShiftRight(PRTUINT64U pResult, PCRTUINT64U pValue, int cBits) +{ + cBits &= 63; + if (cBits < 32) + { + pResult->s.Hi = pValue->s.Hi >> cBits; + pResult->s.Lo = (pValue->s.Lo >> cBits) | (pValue->s.Hi << (32 - cBits)); + } + else + { + pResult->s.Hi = 0; + pResult->s.Lo = pValue->s.Hi >> (cBits - 32); + } + return pResult; +} + + +/** + * Boolean not (result 0 or 1). + * + * @returns pResult. + * @param pResult The result variable. + * @param pValue The value. + */ +DECLINLINE(PRTUINT64U) RTUInt64BooleanNot(PRTUINT64U pResult, PCRTUINT64U pValue) +{ + pResult->s.Lo = pValue->s.Lo || pValue->s.Hi ? 0 : 1; + pResult->s.Hi = 0; + return pResult; +} + + +/** + * Bitwise not (flips each bit of the 64 bits). + * + * @returns pResult. + * @param pResult The result variable. + * @param pValue The value. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitwiseNot(PRTUINT64U pResult, PCRTUINT64U pValue) +{ + pResult->s.Hi = ~pValue->s.Hi; + pResult->s.Lo = ~pValue->s.Lo; + return pResult; +} + + +/** + * Assigns one 64-bit unsigned integer value to another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to assign. + */ +DECLINLINE(PRTUINT64U) RTUInt64Assign(PRTUINT64U pResult, PCRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = pValue->s.Hi; + pResult->s.Lo = pValue->s.Lo; +#else + pResult->Words.w0 = pValue->Words.w0; + pResult->Words.w1 = pValue->Words.w1; + pResult->Words.w2 = pValue->Words.w2; + pResult->Words.w3 = pValue->Words.w3; +#endif + return pResult; +} + + +/** + * Assigns a boolean value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param fValue The boolean value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBoolean(PRTUINT64U pValueResult, bool fValue) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = fValue; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = fValue; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 8-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u8Value The 8-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU8(PRTUINT64U pValueResult, uint8_t u8Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u8Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = u8Value; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 16-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u16Value The 16-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU16(PRTUINT64U pValueResult, uint16_t u16Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u16Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = u16Value; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 32-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u32Value The 32-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU32(PRTUINT64U pValueResult, uint32_t u32Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u32Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = (uint16_t)u32Value; + pValueResult->Words.w1 = u32Value >> 16; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Adds two 64-bit unsigned integer values, storing the result in the first. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAdd(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + uint32_t const uTmp = pValue1Result->s.Lo; + pValue1Result->s.Lo += pValue2->s.Lo; + if (pValue1Result->s.Lo < uTmp) + pValue1Result->s.Hi++; + pValue1Result->s.Hi += pValue2->s.Hi; + return pValue1Result; +} + + +/** + * Subtracts two 64-bit unsigned integer values, storing the result in the + * first. + * + * @returns pValue1Result. + * @param pValue1Result The minuend value and result. + * @param pValue2 The subtrahend value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignSub(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + uint32_t const uTmp = pValue1Result->s.Lo; + pValue1Result->s.Lo -= pValue2->s.Lo; + if (pValue1Result->s.Lo > uTmp) + pValue1Result->s.Hi--; + pValue1Result->s.Hi -= pValue2->s.Hi; + return pValue1Result; +} + + +/** + * Multiplies two 64-bit unsigned integer values, storing the result in the + * first. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignMul(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Result; + RTUInt64Mul(&Result, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Divides a 64-bit unsigned integer value by another, storing the result in + * the first. + * + * @returns pValue1Result. + * @param pValue1Result The dividend value and result. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignDiv(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Result; + RTUINT64U Ignored; + RTUInt64DivRem(&Result, &Ignored, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Divides a 64-bit unsigned integer value by another, storing the remainder in + * the first. + * + * @returns pValue1Result. + * @param pValue1Result The dividend value and result (remainder). + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignMod(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + RTUINT64U Result; + RTUInt64DivRem(&Ignored, &Result, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Performs a bitwise AND of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAnd(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi &= pValue2->s.Hi; + pValue1Result->s.Lo &= pValue2->s.Lo; +#else + pValue1Result->Words.w0 &= pValue2->Words.w0; + pValue1Result->Words.w1 &= pValue2->Words.w1; + pValue1Result->Words.w2 &= pValue2->Words.w2; + pValue1Result->Words.w3 &= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * Performs a bitwise AND of a 64-bit unsigned integer value and a mask made + * up of the first N bits, assigning the result to the the 64-bit value. + * + * @returns pValueResult. + * @param pValueResult The value and result. + * @param cBits The number of bits to AND (counting from the first + * bit). + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAndNFirstBits(PRTUINT64U pValueResult, unsigned cBits) +{ + if (cBits <= 32) + { + if (cBits != 32) + pValueResult->s.Lo &= (RT_BIT_32(cBits) - 1); + pValueResult->s.Hi = 0; + } + else if (cBits < 64) + pValueResult->s.Hi &= (RT_BIT_32(cBits - 32) - 1); + return pValueResult; +} + + +/** + * Performs a bitwise OR of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignOr(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi |= pValue2->s.Hi; + pValue1Result->s.Lo |= pValue2->s.Lo; +#else + pValue1Result->Words.w0 |= pValue2->Words.w0; + pValue1Result->Words.w1 |= pValue2->Words.w1; + pValue1Result->Words.w2 |= pValue2->Words.w2; + pValue1Result->Words.w3 |= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * ORs in a bit and assign the result to the input value. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param iBit The bit to set (0 based). + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignOrBit(PRTUINT64U pValue1Result, unsigned iBit) +{ +#if ARCH_BITS >= 32 + if (iBit >= 32) + pValue1Result->s.Hi |= RT_BIT_32(iBit - 32); + else + pValue1Result->s.Lo |= RT_BIT_32(iBit); +#else + if (iBit >= 32) + { + if (iBit >= 48) + pValue1Result->Words.w3 |= UINT16_C(1) << (iBit - 48); + else + pValue1Result->Words.w2 |= UINT16_C(1) << (iBit - 32); + } + else + { + if (iBit >= 16) + pValue1Result->Words.w1 |= UINT16_C(1) << (iBit - 16); + else + pValue1Result->Words.w0 |= UINT16_C(1) << (iBit); + } +#endif + return pValue1Result; +} + + + +/** + * Performs a bitwise XOR of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignXor(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi ^= pValue2->s.Hi; + pValue1Result->s.Lo ^= pValue2->s.Lo; +#else + pValue1Result->Words.w0 ^= pValue2->Words.w0; + pValue1Result->Words.w1 ^= pValue2->Words.w1; + pValue1Result->Words.w2 ^= pValue2->Words.w2; + pValue1Result->Words.w3 ^= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * Performs a bitwise left shift on a 64-bit unsigned integer value, assigning + * the result to it. + * + * @returns pValueResult. + * @param pValueResult The first value and result. + * @param cBits The number of bits to shift. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignShiftLeft(PRTUINT64U pValueResult, int cBits) +{ + RTUINT64U const InVal = *pValueResult; + if (cBits > 0) + { + /* (left shift) */ + cBits &= 31; + if (cBits >= 32) + { + pValueResult->s.Lo = 0; + pValueResult->s.Hi = InVal.s.Lo << (cBits - 32); + } + else + { + pValueResult->s.Hi = InVal.s.Hi << cBits; + pValueResult->s.Hi |= InVal.s.Lo >> (32 - cBits); + pValueResult->s.Lo = InVal.s.Lo << cBits; + } + } + else if (cBits < 0) + { + /* (right shift) */ + cBits = -cBits; + cBits &= 31; + if (cBits >= 32) + { + pValueResult->s.Hi = 0; + pValueResult->s.Lo = InVal.s.Hi >> (cBits - 32); + } + else + { + pValueResult->s.Lo = InVal.s.Lo >> cBits; + pValueResult->s.Lo |= InVal.s.Hi << (32 - cBits); + pValueResult->s.Hi = InVal.s.Hi >> cBits; + } + } + return pValueResult; +} + + +/** + * Performs a bitwise left shift on a 64-bit unsigned integer value, assigning + * the result to it. + * + * @returns pValueResult. + * @param pValueResult The first value and result. + * @param cBits The number of bits to shift. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignShiftRight(PRTUINT64U pValueResult, int cBits) +{ + return RTUInt64AssignShiftLeft(pValueResult, -cBits); +} + + +/** + * Performs a bitwise NOT on a 64-bit unsigned integer value, assigning the + * result to it. + * + * @returns pValueResult + * @param pValueResult The value and result. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBitwiseNot(PRTUINT64U pValueResult) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Hi = ~pValueResult->s.Hi; + pValueResult->s.Lo = ~pValueResult->s.Lo; +#else + pValueResult->Words.w0 = ~pValueResult->Words.w0; + pValueResult->Words.w1 = ~pValueResult->Words.w1; + pValueResult->Words.w2 = ~pValueResult->Words.w2; + pValueResult->Words.w3 = ~pValueResult->Words.w3; +#endif + return pValueResult; +} + + +/** + * Performs a boolean NOT on a 64-bit unsigned integer value, assigning the + * result to it. + * + * @returns pValueResult + * @param pValueResult The value and result. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBooleanNot(PRTUINT64U pValueResult) +{ + return RTUInt64AssignBoolean(pValueResult, RTUInt64IsZero(pValueResult)); +} + + +/** + * Compares two 64-bit unsigned integer values. + * + * @retval 0 if equal. + * @retval -1 if the first value is smaller than the second. + * @retval 1 if the first value is larger than the second. + * + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(int) RTUInt64Compare(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + if (pValue1->s.Hi != pValue2->s.Hi) + return pValue1->s.Hi > pValue2->s.Hi ? 1 : -1; + if (pValue1->s.Lo != pValue2->s.Lo) + return pValue1->s.Lo > pValue2->s.Lo ? 1 : -1; + return 0; +#else + if (pValue1->Words.w3 != pValue2->Words.w3) + return pValue1->Words.w3 > pValue2->Words.w3 ? 1 : -1; + if (pValue1->Words.w2 != pValue2->Words.w2) + return pValue1->Words.w2 > pValue2->Words.w2 ? 1 : -1; + if (pValue1->Words.w1 != pValue2->Words.w1) + return pValue1->Words.w1 > pValue2->Words.w1 ? 1 : -1; + if (pValue1->Words.w0 != pValue2->Words.w0) + return pValue1->Words.w0 > pValue2->Words.w0 ? 1 : -1; + return 0; +#endif +} + + +/** + * Tests if a 64-bit unsigned integer value is smaller than another. + * + * @returns true if the first value is smaller, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsSmaller(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi < pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo < pValue2->s.Lo); +#else + return pValue1->Words.w3 < pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 < pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 < pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 < pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if a 32-bit unsigned integer value is larger than another. + * + * @returns true if the first value is larger, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsLarger(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi > pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo > pValue2->s.Lo); +#else + return pValue1->Words.w3 > pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 > pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 > pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 > pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if a 64-bit unsigned integer value is larger or equal than another. + * + * @returns true if the first value is larger or equal, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsLargerOrEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi > pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo >= pValue2->s.Lo); +#else + return pValue1->Words.w3 > pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 > pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 > pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 >= pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if two 64-bit unsigned integer values not equal. + * + * @returns true if equal, false if not equal. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo == pValue2->s.Lo; +#else + return pValue1->Words.w0 == pValue2->Words.w0 + && pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w2 == pValue2->Words.w2 + && pValue1->Words.w3 == pValue2->Words.w3; +#endif +} + + +/** + * Tests if two 64-bit unsigned integer values are not equal. + * + * @returns true if not equal, false if equal. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsNotEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + return !RTUInt64IsEqual(pValue1, pValue2); +} + + +/** + * Sets a bit in a 64-bit unsigned integer type. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitSet(PRTUINT64U pValueResult, unsigned iBit) +{ + if (iBit < 32) + { +#if ARCH_BITS >= 32 + pValueResult->s.Lo |= RT_BIT_32(iBit); +#else + if (iBit < 16) + pValueResult->Words.w0 |= UINT16_C(1) << iBit; + else + pValueResult->Words.w1 |= UINT16_C(1) << (iBit - 32); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + pValueResult->s.Hi |= RT_BIT_32(iBit - 32); +#else + if (iBit < 48) + pValueResult->Words.w2 |= UINT16_C(1) << (iBit - 64); + else + pValueResult->Words.w3 |= UINT16_C(1) << (iBit - 96); +#endif + } + return pValueResult; +} + + +/** + * Sets a bit in a 64-bit unsigned integer type. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitClear(PRTUINT64U pValueResult, unsigned iBit) +{ + if (iBit < 32) + { +#if ARCH_BITS >= 32 + pValueResult->s.Lo &= ~RT_BIT_32(iBit); +#else + if (iBit < 48) + pValueResult->Words.w0 &= ~(UINT16_C(1) << (iBit)); + else + pValueResult->Words.w1 &= ~(UINT16_C(1) << (iBit - 32)); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + pValueResult->s.Hi &= ~RT_BIT_32(iBit - 32); +#else + if (iBit < 48) + pValueResult->Words.w2 &= ~(UINT16_C(1) << (iBit - 64)); + else + pValueResult->Words.w3 &= ~(UINT16_C(1) << (iBit - 96)); +#endif + } + return pValueResult; +} + + +/** + * Tests if a bit in a 64-bit unsigned integer value is set. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to test. + */ +DECLINLINE(bool) RTUInt64BitTest(PRTUINT64U pValueResult, unsigned iBit) +{ + bool fRc; + if (iBit < 32) + { +#if ARCH_BITS >= 32 + fRc = RT_BOOL(pValueResult->s.Lo & RT_BIT_32(iBit)); +#else + if (iBit < 16) + fRc = RT_BOOL(pValueResult->Words.w0 & (UINT16_C(1) << (iBit))); + else + fRc = RT_BOOL(pValueResult->Words.w1 & (UINT16_C(1) << (iBit - 16))); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + fRc = RT_BOOL(pValueResult->s.Hi & RT_BIT_32(iBit - 32)); +#else + if (iBit < 48) + fRc = RT_BOOL(pValueResult->Words.w2 & (UINT16_C(1) << (iBit - 32))); + else + fRc = RT_BOOL(pValueResult->Words.w3 & (UINT16_C(1) << (iBit - 48))); +#endif + } + else + fRc = false; + return fRc; +} + + +/** + * Set a range of bits a 64-bit unsigned integer value. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iFirstBit The first bit to test. + * @param cBits The number of bits to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitSetRange(PRTUINT64U pValueResult, unsigned iFirstBit, unsigned cBits) +{ + /* bounds check & fix. */ + if (iFirstBit < 64) + { + if (iFirstBit + cBits > 64) + cBits = 64 - iFirstBit; + +#if ARCH_BITS >= 32 + if (iFirstBit + cBits < 32) + pValueResult->s.Lo |= (RT_BIT_32(cBits) - 1) << iFirstBit; + else if (iFirstBit + cBits < 64 && iFirstBit >= 32) + pValueResult->s.Hi |= (RT_BIT_32(cBits) - 1) << (iFirstBit - 32); + else +#else + if (iFirstBit + cBits < 16) + pValueResult->Words.w0 |= ((UINT16_C(1) << cBits) - 1) << iFirstBit; + else if (iFirstBit + cBits < 32 && iFirstBit >= 16) + pValueResult->Words.w1 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 16); + else if (iFirstBit + cBits < 48 && iFirstBit >= 32) + pValueResult->Words.w2 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 32); + else if (iFirstBit + cBits < 64 && iFirstBit >= 48) + pValueResult->Words.w3 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 48); + else +#endif + while (cBits-- > 0) + RTUInt64BitSet(pValueResult, iFirstBit++); + } + return pValueResult; +} + + +/** + * Test if all the bits of a 64-bit unsigned integer value are set. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64BitAreAllSet(PRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + return pValue->s.Hi == UINT32_MAX + && pValue->s.Lo == UINT32_MAX; +#else + return pValue->Words.w0 == UINT16_MAX + && pValue->Words.w1 == UINT16_MAX + && pValue->Words.w2 == UINT16_MAX + && pValue->Words.w3 == UINT16_MAX; +#endif +} + + +/** + * Test if all the bits of a 64-bit unsigned integer value are clear. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64BitAreAllClear(PRTUINT64U pValue) +{ + return RTUInt64IsZero(pValue); +} + + +DECLINLINE(unsigned) RTUInt64BitCount(PCRTUINT64U pValue) +{ + unsigned cBits; + if (pValue->s.Hi != 0) + { +#if ARCH_BITS >= 32 + cBits = 32 + ASMBitLastSetU32(pValue->s.Hi); +#else + if (pValue->Words.w3) + cBits = 48 + ASMBitLastSetU16(pValue->Words.w3); + else + cBits = 32 + ASMBitLastSetU16(pValue->Words.w2); +#endif + } + else + { +#if ARCH_BITS >= 32 + cBits = ASMBitLastSetU32(pValue->s.Lo); +#else + if (pValue->Words.w1) + cBits = 16 + ASMBitLastSetU16(pValue->Words.w1); + else + cBits = 0 + ASMBitLastSetU16(pValue->Words.w0); +#endif + } + return cBits; +} + + +/** + * Divides a 64-bit unsigned integer value by another, returning both quotient + * and remainder. + * + * @returns pQuotient, NULL if pValue2 is 0. + * @param pQuotient Where to return the quotient. + * @param pRemainder Where to return the remainder. + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64DivRem(PRTUINT64U pQuotient, PRTUINT64U pRemainder, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + int iDiff; + + /* + * Sort out all the special cases first. + */ + /* Divide by zero or 1? */ + if (!pValue2->s.Hi) + { + if (!pValue2->s.Lo) + return NULL; + + if (pValue2->s.Lo == 1) + { + RTUInt64SetZero(pRemainder); + *pQuotient = *pValue1; + return pQuotient; + } + /** @todo RTUInt64DivModByU32 */ + } + + /* Dividend is smaller? */ + iDiff = RTUInt64Compare(pValue1, pValue2); + if (iDiff < 0) + { + *pRemainder = *pValue1; + RTUInt64SetZero(pQuotient); + } + + /* The values are equal? */ + else if (iDiff == 0) + { + RTUInt64SetZero(pRemainder); + RTUInt64AssignU8(pQuotient, 1); + } + else + { + /* + * Prepare. + */ + unsigned iBitAdder = RTUInt64BitCount(pValue1) - RTUInt64BitCount(pValue2); + RTUINT64U NormDivisor = *pValue2; + if (iBitAdder) + { + RTUInt64ShiftLeft(&NormDivisor, pValue2, iBitAdder); + if (RTUInt64IsLarger(&NormDivisor, pValue1)) + { + RTUInt64AssignShiftRight(&NormDivisor, 1); + iBitAdder--; + } + } + else + NormDivisor = *pValue2; + + RTUInt64SetZero(pQuotient); + *pRemainder = *pValue1; + + /* + * Do the division. + */ + if (RTUInt64IsLargerOrEqual(pRemainder, pValue2)) + { + for (;;) + { + if (RTUInt64IsLargerOrEqual(pRemainder, &NormDivisor)) + { + RTUInt64AssignSub(pRemainder, &NormDivisor); + RTUInt64AssignOrBit(pQuotient, iBitAdder); + } + if (RTUInt64IsSmaller(pRemainder, pValue2)) + break; + RTUInt64AssignShiftRight(&NormDivisor, 1); + iBitAdder--; + } + } + } + return pQuotient; +} + + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/uni.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/uni.h @@ -0,0 +1,478 @@ +/** @file + * IPRT - Unicode Code Points. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_uni_h +#define ___iprt_uni_h + +/** @defgroup grp_rt_uni RTUniCp - Unicode Code Points + * @ingroup grp_rt + * @{ + */ + +/** @def RTUNI_USE_WCTYPE + * Define RTUNI_USE_WCTYPE to not use the IPRT unicode data but the + * data which the C runtime library provides. */ +#ifdef DOXYGEN_RUNNING +# define RTUNI_USE_WCTYPE +#endif + +#include +#ifdef RTUNI_USE_WCTYPE +# include +#endif + +RT_C_DECLS_BEGIN + + +#ifndef RTUNI_USE_WCTYPE + +/** + * A unicode flags range. + * @internal + */ +typedef struct RTUNIFLAGSRANGE +{ + /** The first code point of the range. */ + RTUNICP BeginCP; + /** The last + 1 code point of the range. */ + RTUNICP EndCP; + /** Pointer to the array of case folded code points. */ + const uint8_t *pafFlags; +} RTUNIFLAGSRANGE; +/** Pointer to a flags range. + * @internal */ +typedef RTUNIFLAGSRANGE *PRTUNIFLAGSRANGE; +/** Pointer to a const flags range. + * @internal */ +typedef const RTUNIFLAGSRANGE *PCRTUNIFLAGSRANGE; + +/** + * A unicode case folded range. + * @internal + */ +typedef struct RTUNICASERANGE +{ + /** The first code point of the range. */ + RTUNICP BeginCP; + /** The last + 1 code point of the range. */ + RTUNICP EndCP; + /** Pointer to the array of case folded code points. */ + PCRTUNICP paFoldedCPs; +} RTUNICASERANGE; +/** Pointer to a case folded range. + * @internal */ +typedef RTUNICASERANGE *PRTUNICASERANGE; +/** Pointer to a const case folded range. + * @internal */ +typedef const RTUNICASERANGE *PCRTUNICASERANGE; + +/** @name Unicode Code Point Flags. + * @internal + * @{ */ +#define RTUNI_UPPER RT_BIT(0) +#define RTUNI_LOWER RT_BIT(1) +#define RTUNI_ALPHA RT_BIT(2) +#define RTUNI_XDIGIT RT_BIT(3) +#define RTUNI_DDIGIT RT_BIT(4) +#define RTUNI_WSPACE RT_BIT(5) +/*#define RTUNI_BSPACE RT_BIT(6) - later */ +/** When set, the codepoint requires further checking wrt NFC and NFD + * normalization. I.e. set when either of QC_NFD and QC_NFC are not Y. */ +#define RTUNI_QC_NFX RT_BIT(7) +/** @} */ + + +/** + * Array of flags ranges. + * @internal + */ +extern RTDATADECL(const RTUNIFLAGSRANGE) g_aRTUniFlagsRanges[]; + +/** + * Gets the flags for a unicode code point. + * + * @returns The flag mask. (RTUNI_*) + * @param CodePoint The unicode code point. + * @internal + */ +DECLINLINE(RTUNICP) rtUniCpFlags(RTUNICP CodePoint) +{ + PCRTUNIFLAGSRANGE pCur = &g_aRTUniFlagsRanges[0]; + do + { + if (pCur->EndCP > CodePoint) + { + if (pCur->BeginCP <= CodePoint) + return pCur->pafFlags[CodePoint - pCur->BeginCP]; + break; + } + pCur++; + } while (pCur->EndCP != RTUNICP_MAX); + return 0; +} + + +/** + * Checks if a unicode code point is upper case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsUpper(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_UPPER) != 0; +} + + +/** + * Checks if a unicode code point is lower case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsLower(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_LOWER) != 0; +} + + +/** + * Checks if a unicode code point is case foldable. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsFoldable(RTUNICP CodePoint) +{ + /* Right enough. */ + return (rtUniCpFlags(CodePoint) & (RTUNI_LOWER | RTUNI_UPPER)) != 0; +} + + +/** + * Checks if a unicode code point is alphabetic. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsAlphabetic(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_ALPHA) != 0; +} + + +/** + * Checks if a unicode code point is a decimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsDecDigit(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_DDIGIT) != 0; +} + + +/** + * Checks if a unicode code point is a hexadecimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsHexDigit(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_XDIGIT) != 0; +} + + +/** + * Checks if a unicode code point is white space. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsSpace(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_WSPACE) != 0; +} + + + +/** + * Array of uppercase ranges. + * @internal + */ +extern RTDATADECL(const RTUNICASERANGE) g_aRTUniUpperRanges[]; + +/** + * Array of lowercase ranges. + * @internal + */ +extern RTDATADECL(const RTUNICASERANGE) g_aRTUniLowerRanges[]; + + +/** + * Folds a unicode code point using the specified range array. + * + * @returns FOlded code point. + * @param CodePoint The unicode code point to fold. + * @param pCur The case folding range to use. + */ +DECLINLINE(RTUNICP) rtUniCpFold(RTUNICP CodePoint, PCRTUNICASERANGE pCur) +{ + do + { + if (pCur->EndCP > CodePoint) + { + if (pCur->BeginCP <= CodePoint) + CodePoint = pCur->paFoldedCPs[CodePoint - pCur->BeginCP]; + break; + } + pCur++; + } while (pCur->EndCP != RTUNICP_MAX); + return CodePoint; +} + + +/** + * Folds a unicode code point to upper case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToUpper(RTUNICP CodePoint) +{ + return rtUniCpFold(CodePoint, &g_aRTUniUpperRanges[0]); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToLower(RTUNICP CodePoint) +{ + return rtUniCpFold(CodePoint, &g_aRTUniLowerRanges[0]); +} + + +#else /* RTUNI_USE_WCTYPE */ + + +/** + * Checks if a unicode code point is upper case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsUpper(RTUNICP CodePoint) +{ + return !!iswupper(CodePoint); +} + + +/** + * Checks if a unicode code point is lower case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsLower(RTUNICP CodePoint) +{ + return !!iswlower(CodePoint); +} + + +/** + * Checks if a unicode code point is case foldable. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsFoldable(RTUNICP CodePoint) +{ + /* Right enough. */ + return iswupper(CodePoint) || iswlower(CodePoint); +} + + +/** + * Checks if a unicode code point is alphabetic. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsAlphabetic(RTUNICP CodePoint) +{ + return !!iswalpha(CodePoint); +} + + +/** + * Checks if a unicode code point is a decimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsDecDigit(RTUNICP CodePoint) +{ + return !!iswdigit(CodePoint); +} + + +/** + * Checks if a unicode code point is a hexadecimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsHexDigit(RTUNICP CodePoint) +{ + return !!iswxdigit(CodePoint); +} + + +/** + * Checks if a unicode code point is white space. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsSpace(RTUNICP CodePoint) +{ + return !!iswspace(CodePoint); +} + + +/** + * Folds a unicode code point to upper case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToUpper(RTUNICP CodePoint) +{ + return towupper(CodePoint); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToLower(RTUNICP CodePoint) +{ + return towlower(CodePoint); +} + + +#endif /* RTUNI_USE_WCTYPE */ + + +/** + * Frees a unicode string. + * + * @param pusz The string to free. + */ +RTDECL(void) RTUniFree(PRTUNICP pusz); + + +/** + * Checks if a code point valid. + * + * Any code point (defined or not) within the 17 unicode planes (0 thru 16), + * except surrogates will be considered valid code points by this function. + * + * @returns true if in range, false if not. + * @param CodePoint The unicode code point to validate. + */ +DECLINLINE(bool) RTUniCpIsValid(RTUNICP CodePoint) +{ + return CodePoint <= 0x00d7ff + || ( CodePoint <= 0x10ffff + && CodePoint >= 0x00e000); +} + + +/** + * Checks if the given code point is in the BMP range. + * + * Surrogates are not considered in the BMP range by this function. + * + * @returns true if in BMP, false if not. + * @param CodePoint The unicode code point to consider. + */ +DECLINLINE(bool) RTUniCpIsBMP(RTUNICP CodePoint) +{ + return CodePoint <= 0xd7ff + || ( CodePoint <= 0xffff + && CodePoint >= 0xe000); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(size_t) RTUniCpCalcUtf8Len(RTUNICP CodePoint) +{ + if (CodePoint < 0x80) + return 1; + return 2 + + (CodePoint >= 0x00000800) + + (CodePoint >= 0x00010000) + + (CodePoint >= 0x00200000) + + (CodePoint >= 0x04000000) + + (CodePoint >= 0x80000000) /* illegal */; +} + + + +RT_C_DECLS_END +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/utf16.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/utf16.h @@ -0,0 +1,1332 @@ +/** @file + * IPRT - String Manipulation, UTF-16 encoding. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_utf16_h +#define ___iprt_utf16_h + +#include + +RT_C_DECLS_BEGIN + + +/** @defgroup rt_str_utf16 UTF-16 String Manipulation + * @ingroup grp_rt_str + * @{ + */ + +/** + * Allocates memory for UTF-16 string storage (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated UTF-16 string. The first wide char is + * always set to the string terminator char, the contents of the + * remainder of the memory is undefined. The string must be freed by + * calling RTUtf16Free. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY. Also consider + * RTUtf16AllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate, will be rounded up + * to a multiple of two. If this is zero, we will + * allocate a terminator wide char anyway. + */ +#define RTUtf16Alloc(cb) RTUtf16AllocTag((cb), RTSTR_TAG) + +/** + * Allocates memory for UTF-16 string storage (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated UTF-16 string. The first wide char is + * always set to the string terminator char, the contents of the + * remainder of the memory is undefined. The string must be freed by + * calling RTUtf16Free. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY. Also consider + * RTUtf16AllocExTag if an IPRT status code is required. + * + * @param cb How many bytes to allocate, will be rounded up + * to a multiple of two. If this is zero, we will + * allocate a terminator wide char anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(PRTUTF16) RTUtf16AllocTag(size_t cb, const char *pszTag); + +/** + * Reallocates the specified UTF-16 string (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_UTF16_MEMORY if we failed to reallocate the string, @a + * *ppwsz remains unchanged. + * + * @param ppwsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last RTUTF16 set to the + * terminator character so that when used for + * string truncation the result will be a valid + * C-style string (your job to keep it a valid + * UTF-16 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first RTUTF16 set to the terminator + * char so it will be a valid C-style string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTUtf16Free and @a *ppwsz will be set to NULL. + * + * When not zero, this will be rounded up to a + * multiple of two, and used as the new size of the + * memory backing the string, i.e. it includes the + * terminator (RTUTF16) char. + */ +#define RTUtf16Realloc(ppwsz, cbNew) RTUtf16ReallocTag((ppwsz), (cbNew), RTSTR_TAG) + +/** + * Reallocates the specified UTF-16 string (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_UTF16_MEMORY if we failed to reallocate the string, @a + * *ppwsz remains unchanged. + * + * @param ppwsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last RTUTF16 set to the + * terminator character so that when used for + * string truncation the result will be a valid + * C-style string (your job to keep it a valid + * UTF-16 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first RTUTF16 set to the terminator + * char so it will be a valid C-style string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTUtf16Free and @a *ppwsz will be set to NULL. + * + * When not zero, this will be rounded up to a + * multiple of two, and used as the new size of the + * memory backing the string, i.e. it includes the + * terminator (RTUTF16) char. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ReallocTag(PRTUTF16 *ppwsz, size_t cbNew, const char *pszTag); + +/** + * Free a UTF-16 string allocated by RTStrToUtf16(), RTStrToUtf16Ex(), + * RTLatin1ToUtf16(), RTLatin1ToUtf16Ex(), RTUtf16Dup() or RTUtf16DupEx(). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to free. NULL is accepted. + */ +RTDECL(void) RTUtf16Free(PRTUTF16 pwszString); + +/** + * Allocates a new copy of the specified UTF-16 string (default tag). + * + * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it. + * @returns NULL when out of memory. + * @param pwszString UTF-16 string to duplicate. + * @remark This function will not make any attempt to validate the encoding. + */ +#define RTUtf16Dup(pwszString) RTUtf16DupTag((pwszString), RTSTR_TAG) + +/** + * Allocates a new copy of the specified UTF-16 string (custom tag). + * + * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it. + * @returns NULL when out of memory. + * @param pwszString UTF-16 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(PRTUTF16) RTUtf16DupTag(PCRTUTF16 pwszString, const char *pszTag); + +/** + * Allocates a new copy of the specified UTF-16 string (default tag). + * + * @returns iprt status code. + * @param ppwszString Receives pointer of the allocated UTF-16 string. + * The returned pointer must be freed using RTUtf16Free(). + * @param pwszString UTF-16 string to duplicate. + * @param cwcExtra Number of extra RTUTF16 items to allocate. + * @remark This function will not make any attempt to validate the encoding. + */ +#define RTUtf16DupEx(ppwszString, pwszString, cwcExtra) \ + RTUtf16DupExTag((ppwszString), (pwszString), (cwcExtra), RTSTR_TAG) + +/** + * Allocates a new copy of the specified UTF-16 string (custom tag). + * + * @returns iprt status code. + * @param ppwszString Receives pointer of the allocated UTF-16 string. + * The returned pointer must be freed using RTUtf16Free(). + * @param pwszString UTF-16 string to duplicate. + * @param cwcExtra Number of extra RTUTF16 items to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16DupExTag(PRTUTF16 *ppwszString, PCRTUTF16 pwszString, size_t cwcExtra, const char *pszTag); + +/** + * Returns the length of a UTF-16 string in UTF-16 characters + * without trailing '\\0'. + * + * Surrogate pairs counts as two UTF-16 characters here. Use RTUtf16CpCnt() + * to get the exact number of code points in the string. + * + * @returns The number of RTUTF16 items in the string. + * @param pwszString Pointer the UTF-16 string. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(size_t) RTUtf16Len(PCRTUTF16 pwszString); + +/** + * Find the length of a zero-terminated byte string, given a max string length. + * + * @returns The string length or cbMax. The returned length does not include + * the zero terminator if it was found. + * + * @param pwszString The string. + * @param cwcMax The max string length in RTUTF16s. + * @sa RTUtf16NLenEx, RTStrNLen. + */ +RTDECL(size_t) RTUtf16NLen(PCRTUTF16 pwszString, size_t cwcMax); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the string has a length less than cchMax. + * @retval VERR_BUFFER_OVERFLOW if the end of the string wasn't found + * before cwcMax was reached. + * + * @param pwszString The string. + * @param cwcMax The max string length in RTUTF16s. + * @param pcwc Where to store the string length excluding the + * terminator. This is set to cwcMax if the terminator + * isn't found. + * @sa RTUtf16NLen, RTStrNLenEx. + */ +RTDECL(int) RTUtf16NLenEx(PCRTUTF16 pwszString, size_t cwcMax, size_t *pcwc); + +/** + * Find the zero terminator in a string with a limited length. + * + * @returns Pointer to the zero terminator. + * @returns NULL if the zero terminator was not found. + * + * @param pwszString The string. + * @param cwcMax The max string length. RTSTR_MAX is fine. + */ +RTDECL(PCRTUTF16) RTUtf16End(PCRTUTF16 pwszString, size_t cwcMax); + +/** + * Strips blankspaces from both ends of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16Strip(PRTUTF16 pwsz); + +/** + * Strips blankspaces from the start of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16StripL(PCRTUTF16 pwsz); + +/** + * Strips blankspaces from the end of the string. + * + * @returns pwsz. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16StripR(PRTUTF16 pwsz); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTUtf16Copy(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc); + +/** + * String copy with overflow handling, ASCII source. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pszSrc The source string, pure ASCII. NULL is not OK. + */ +RTDECL(int) RTUtf16CopyAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + * @param cwcSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTUtf16CopyEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTUtf16Cat(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc); + +/** + * String concatenation with overflow handling, ASCII source. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pszSrc The source string, pure ASCII. NULL is not OK. + */ +RTDECL(int) RTUtf16CatAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + * @param cwcSrcMax The maximum number of UTF-16 chars (not code + * points) to copy from the source string, not + * counting the terminator as usual. + */ +RTDECL(int) RTUtf16CatEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax); + +/** + * Performs a case sensitive string compare between two UTF-16 strings. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16Cmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case sensitive string compare between an UTF-16 string and a pure + * ASCII string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, pure ASCII. Null is allowed. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16CmpAscii(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case sensitive string compare between an UTF-16 string and a UTF-8 + * string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, UTF-8. Null is allowed. + * @remarks NULL and empty strings are treated equally. + */ +RTDECL(int) RTUtf16CmpUtf8(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16ICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between two big endian UTF-16 + * strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First big endian UTF-16 string. Null is allowed. + * @param pwsz2 Second big endian UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16BigICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between an UTF-16 string and a + * UTF-8 string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, UTF-8. Null is allowed. + * @remarks NULL and empty strings are treated equally. + */ +RTDECL(int) RTUtf16ICmpUtf8(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between an UTF-16 string and a + * pure ASCII string. + * + * Since this compare only takes cares about the first 128 codepoints in + * unicode, no tables are needed and there aren't any real complications. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, pure ASCII. Null is allowed. + */ +RTDECL(int) RTUtf16ICmpAscii(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings + * using the current locale of the process (if applicable). + * + * This differs from RTUtf16ICmp() in that it will try, if a locale with the + * required data is available, to do a correct case-insensitive compare. It + * follows that it is more complex and thereby likely to be more expensive. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16LocaleICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings, + * stopping after N characters. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + * @param cwcMax Maximum number of characters to compare. + */ +RTDECL(int) RTUtf16NICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2, size_t cwcMax); + +/** + * Performs a case insensitive string compare between two big endian UTF-16 + * strings, stopping after N characters. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First big endian UTF-16 string. Null is allowed. + * @param pwsz2 Second big endian UTF-16 string. Null is allowed. + * @param cwcMax Maximum number of characters to compare. + */ +RTDECL(int) RTUtf16BigNICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2, size_t cwcMax); + +/** + * Performs a case insensitive string compare between a UTF-16 string and a pure + * ASCII string, stopping after N characters. + * + * Since this compare only takes cares about the first 128 codepoints in + * unicode, no tables are needed and there aren't any real complications. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 The UTF-16 first string. Null is allowed. + * @param psz2 The pure ASCII second string. Null is allowed. + * @param cwcMax Maximum number of UTF-16 characters to compare. + */ +RTDECL(int) RTUtf16NICmpAscii(PCRTUTF16 pwsz1, const char *psz2, size_t cwcMax); + + +/** + * Folds a UTF-16 string to lowercase. + * + * This is a very simple folding; is uses the simple lowercase + * code point, it is not related to any locale just the most common + * lowercase codepoint setup by the unicode specs, and it will not + * create new surrogate pairs or remove existing ones. + * + * @returns Pointer to the passed in string. + * @param pwsz The string to fold. + */ +RTDECL(PRTUTF16) RTUtf16ToLower(PRTUTF16 pwsz); + +/** + * Folds a UTF-16 string to uppercase. + * + * This is a very simple folding; is uses the simple uppercase + * code point, it is not related to any locale just the most common + * uppercase codepoint setup by the unicode specs, and it will not + * create new surrogate pairs or remove existing ones. + * + * @returns Pointer to the passed in string. + * @param pwsz The string to fold. + */ +RTDECL(PRTUTF16) RTUtf16ToUpper(PRTUTF16 pwsz); + +/** + * Validates the UTF-16 encoding of the string. + * + * @returns iprt status code. + * @param pwsz The string. + */ +RTDECL(int) RTUtf16ValidateEncoding(PCRTUTF16 pwsz); + +/** + * Validates the UTF-16 encoding of the string. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length (/ size) in UTF-16 units. Use + * RTSTR_MAX to process the entire string. + * @param fFlags Combination of RTSTR_VALIDATE_ENCODING_XXX flags. + */ +RTDECL(int) RTUtf16ValidateEncodingEx(PCRTUTF16 pwsz, size_t cwc, uint32_t fFlags); + +/** + * Checks if the UTF-16 encoding is valid. + * + * @returns true / false. + * @param pwsz The string. + */ +RTDECL(bool) RTUtf16IsValidEncoding(PCRTUTF16 pwsz); + +/** + * Sanitise a (valid) UTF-16 string by replacing all characters outside a white + * list in-place by an ASCII replacement character. + * + * Surrogate paris will be replaced by two chars. + * + * @returns The number of code points replaced. In the case of an incorrectly + * encoded string -1 will be returned, and the string is not completely + * processed. In the case of puszValidPairs having an odd number of + * code points, -1 will be also return but without any modification to + * the string. + * @param pwsz The string to sanitise. + * @param puszValidPairs A zero-terminated array of pairs of Unicode points. + * Each pair is the start and end point of a range, + * and the union of these ranges forms the white list. + * @param chReplacement The ASCII replacement character. + * @sa RTStrPurgeComplementSet + */ +RTDECL(ssize_t) RTUtf16PurgeComplementSet(PRTUTF16 pwsz, PCRTUNICP puszValidPairs, char chReplacement); + + +/** + * Translate a UTF-16 string into a UTF-8 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16ToUtf8(pwszString, ppszString) RTUtf16ToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16 string into a UTF-8 allocating the result buffer. + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translate a UTF-16BE string into a UTF-8 allocating the result buffer + * (default tag). + * + * This differs from RTUtf16ToUtf8 in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16BE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16BigToUtf8(pwszString, ppszString) RTUtf16BigToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16BE string into a UTF-8 allocating the result buffer. + * + * This differs from RTUtf16ToUtf8Tag in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16BE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16BigToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translate a UTF-16LE string into a UTF-8 allocating the result buffer + * (default tag). + * + * This differs from RTUtf16ToUtf8 in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16LE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16LittleToUtf8(pwszString, ppszString) RTUtf16LittleToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16LE string into a UTF-8 allocating the result buffer. + * + * This differs from RTUtf16ToUtf8Tag in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16LE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16LittleToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + + +/** + * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16ToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16ToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Translates UTF-16BE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (default tag). + * + * This differs from RTUtf16ToUtf8Ex in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16BE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16BigToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16BigToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16BE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (custom tag). + * + * This differs from RTUtf16ToUtf8ExTag in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16BE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16BigToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Translates UTF-16LE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (default tag). + * + * This differs from RTUtf16ToUtf8Ex in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16LE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16LittleToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16LittleToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16LE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (custom tag). + * + * This differs from RTUtf16ToUtf8ExTag in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16LE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16LittleToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, + const char *pszTag); + +/** + * Calculates the length of the UTF-16 string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16ToUtf8() of the correct size. For most + * other purposes RTUtf16ToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16 string. + */ +RTDECL(size_t) RTUtf16CalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16BE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16BE + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16BigToUtf8() of the correct size. For most + * other purposes RTUtf16BigToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16BE string. + */ +RTDECL(size_t) RTUtf16BigCalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16LE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16LE + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16LittleToUtf8() of the correct size. For + * most other purposes RTUtf16LittleToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16LE string. + */ +RTDECL(size_t) RTUtf16LittleCalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16 string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16CalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Calculates the length of the UTF-16BE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16BE + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16BigCalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Calculates the length of the UTF-16LE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16LE + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16LittleCalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result + * buffer (default tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated Latin1 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16ToLatin1(pwszString, ppszString) RTUtf16ToLatin1Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result + * buffer (custom tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated Latin1 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToLatin1Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller + * or a fittingly sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from + * pwszString. The translation will stop when reaching + * cwcString or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz Pointer to the pointer to the Latin-1 string. The + * buffer can optionally be preallocated by the caller. + * + * If cch is zero, *ppsz is undefined. + * + * If cch is non-zero and *ppsz is not NULL, then this + * will be used as the output buffer. + * VERR_BUFFER_OVERFLOW will be returned if this is + * insufficient. + * + * If cch is zero or *ppsz is NULL, then a buffer of + * sufficient size is allocated. cch can be used to + * specify a minimum size of this buffer. Use + * RTUtf16Free() to free the result. + * + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16ToLatin1Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16ToLatin1ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller + * or a fittingly sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from + * pwszString. The translation will stop when reaching + * cwcString or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz Pointer to the pointer to the Latin-1 string. The + * buffer can optionally be preallocated by the caller. + * + * If cch is zero, *ppsz is undefined. + * + * If cch is non-zero and *ppsz is not NULL, then this + * will be used as the output buffer. + * VERR_BUFFER_OVERFLOW will be returned if this is + * insufficient. + * + * If cch is zero or *ppsz is NULL, then a buffer of + * sufficient size is allocated. cch can be used to + * specify a minimum size of this buffer. Use + * RTUtf16Free() to free the result. + * + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToLatin1ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars. + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16ToLatin1() of the correct size. For most + * other purposes RTUtf16ToLatin1Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16 string. + */ +RTDECL(size_t) RTUtf16CalcLatin1Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars. + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16CalcLatin1LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pwsz The string. + * + * @remark This is an internal worker for RTUtf16GetCp(). + */ +RTDECL(RTUNICP) RTUtf16GetCpInternal(PCRTUTF16 pwsz); + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark This is an internal worker for RTUtf16GetCpEx(). + */ +RTDECL(int) RTUtf16GetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp); + +/** + * Get the unicode code point at the given string position, big endian. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark This is an internal worker for RTUtf16BigGetCpEx(). + */ +RTDECL(int) RTUtf16BigGetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp); + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by pwsz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pwsz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-16 range. + * + * @remark This is an internal worker for RTUtf16GetCpEx(). + */ +RTDECL(PRTUTF16) RTUtf16PutCpInternal(PRTUTF16 pwsz, RTUNICP CodePoint); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pwsz The string. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or an endian indicator. + */ +DECLINLINE(RTUNICP) RTUtf16GetCp(PCRTUTF16 pwsz) +{ + const RTUTF16 wc = *pwsz; + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + return wc; + return RTUtf16GetCpInternal(pwsz); +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(int) RTUtf16GetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp) +{ + const RTUTF16 wc = **ppwsz; + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + { + (*ppwsz)++; + *pCp = wc; + return VINF_SUCCESS; + } + return RTUtf16GetCpExInternal(ppwsz, pCp); +} + +/** + * Get the unicode code point at the given string position, big endian version. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(int) RTUtf16BigGetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp) +{ +#ifdef RT_BIG_ENDIAN + return RTUtf16GetCpEx(ppwsz, pCp); +#else +# ifdef ___iprt_asm_h + const RTUTF16 wc = RT_BE2H_U16(**ppwsz); + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + { + (*ppwsz)++; + *pCp = wc; + return VINF_SUCCESS; + } +# endif + return RTUtf16BigGetCpExInternal(ppwsz, pCp); +#endif +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by pwsz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pwsz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-16 range. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(PRTUTF16) RTUtf16PutCp(PRTUTF16 pwsz, RTUNICP CodePoint) +{ + if (CodePoint < 0xd800 || (CodePoint > 0xd800 && CodePoint < 0xfffe)) + { + *pwsz++ = (RTUTF16)CodePoint; + return pwsz; + } + return RTUtf16PutCpInternal(pwsz, CodePoint); +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param pwsz Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(PRTUTF16) RTUtf16NextCp(PCRTUTF16 pwsz) +{ + RTUNICP Cp; + RTUtf16GetCpEx(&pwsz, &Cp); + return (PRTUTF16)pwsz; +} + +/** + * Skips backwards, to the previous code point. + * + * @returns Pointer to the char after the current code point. + * @param pwszStart Pointer to the start of the string. + * @param pwsz Pointer to the current code point. + */ +RTDECL(PRTUTF16) RTUtf16PrevCp(PCRTUTF16 pwszStart, PCRTUTF16 pwsz); + + +/** + * Checks if the UTF-16 char is the high surrogate char (i.e. + * the 1st char in the pair). + * + * @returns true if it is. + * @returns false if it isn't. + * @param wc The character to investigate. + */ +DECLINLINE(bool) RTUtf16IsHighSurrogate(RTUTF16 wc) +{ + return wc >= 0xd800 && wc <= 0xdbff; +} + +/** + * Checks if the UTF-16 char is the low surrogate char (i.e. + * the 2nd char in the pair). + * + * @returns true if it is. + * @returns false if it isn't. + * @param wc The character to investigate. + */ +DECLINLINE(bool) RTUtf16IsLowSurrogate(RTUTF16 wc) +{ + return wc >= 0xdc00 && wc <= 0xdfff; +} + + +/** + * Checks if the two UTF-16 chars form a valid surrogate pair. + * + * @returns true if they do. + * @returns false if they doesn't. + * @param wcHigh The high (1st) character. + * @param wcLow The low (2nd) character. + */ +DECLINLINE(bool) RTUtf16IsSurrogatePair(RTUTF16 wcHigh, RTUTF16 wcLow) +{ + return RTUtf16IsHighSurrogate(wcHigh) + && RTUtf16IsLowSurrogate(wcLow); +} + +/** + * Formats a buffer stream as hex bytes. + * + * The default is no separating spaces or line breaks or anything. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes. + * + * @param pwszBuf Output string buffer. + * @param cwcBuf The size of the output buffer in RTUTF16 units. + * @param pv Pointer to the bytes to stringify. + * @param cb The number of bytes to stringify. + * @param fFlags Combination of RTSTRPRINTHEXBYTES_F_XXX values. + * @sa RTStrPrintHexBytes. + */ +RTDECL(int) RTUtf16PrintHexBytes(PRTUTF16 pwszBuf, size_t cwcBuf, void const *pv, size_t cb, uint32_t fFlags); + +/** @} */ + + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/include/iprt/x86.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/include/iprt/x86.h @@ -0,0 +1,4285 @@ +/** @file + * IPRT - X86 and AMD64 Structures and Definitions. + * + * @note x86.mac is generated from this file by running 'kmk incs' in the root. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_x86_h +#define ___iprt_x86_h + +#ifndef VBOX_FOR_DTRACE_LIB +# include +# include +#else +# pragma D depends_on library vbox-types.d +#endif + +/* Workaround for Solaris sys/regset.h defining CS, DS */ +#ifdef RT_OS_SOLARIS +# undef CS +# undef DS +#endif + +/** @defgroup grp_rt_x86 x86 Types and Definitions + * @ingroup grp_rt + * @{ + */ + +#ifndef VBOX_FOR_DTRACE_LIB +/** + * EFLAGS Bits. + */ +typedef struct X86EFLAGSBITS +{ + /** Bit 0 - CF - Carry flag - Status flag. */ + unsigned u1CF : 1; + /** Bit 1 - 1 - Reserved flag. */ + unsigned u1Reserved0 : 1; + /** Bit 2 - PF - Parity flag - Status flag. */ + unsigned u1PF : 1; + /** Bit 3 - 0 - Reserved flag. */ + unsigned u1Reserved1 : 1; + /** Bit 4 - AF - Auxiliary carry flag - Status flag. */ + unsigned u1AF : 1; + /** Bit 5 - 0 - Reserved flag. */ + unsigned u1Reserved2 : 1; + /** Bit 6 - ZF - Zero flag - Status flag. */ + unsigned u1ZF : 1; + /** Bit 7 - SF - Signed flag - Status flag. */ + unsigned u1SF : 1; + /** Bit 8 - TF - Trap flag - System flag. */ + unsigned u1TF : 1; + /** Bit 9 - IF - Interrupt flag - System flag. */ + unsigned u1IF : 1; + /** Bit 10 - DF - Direction flag - Control flag. */ + unsigned u1DF : 1; + /** Bit 11 - OF - Overflow flag - Status flag. */ + unsigned u1OF : 1; + /** Bit 12-13 - IOPL - I/O privilege level flag - System flag. */ + unsigned u2IOPL : 2; + /** Bit 14 - NT - Nested task flag - System flag. */ + unsigned u1NT : 1; + /** Bit 15 - 0 - Reserved flag. */ + unsigned u1Reserved3 : 1; + /** Bit 16 - RF - Resume flag - System flag. */ + unsigned u1RF : 1; + /** Bit 17 - VM - Virtual 8086 mode - System flag. */ + unsigned u1VM : 1; + /** Bit 18 - AC - Alignment check flag - System flag. Works with CR0.AM. */ + unsigned u1AC : 1; + /** Bit 19 - VIF - Virtual interrupt flag - System flag. */ + unsigned u1VIF : 1; + /** Bit 20 - VIP - Virtual interrupt pending flag - System flag. */ + unsigned u1VIP : 1; + /** Bit 21 - ID - CPUID flag - System flag. If this responds to flipping CPUID is supported. */ + unsigned u1ID : 1; + /** Bit 22-31 - 0 - Reserved flag. */ + unsigned u10Reserved4 : 10; +} X86EFLAGSBITS; +/** Pointer to EFLAGS bits. */ +typedef X86EFLAGSBITS *PX86EFLAGSBITS; +/** Pointer to const EFLAGS bits. */ +typedef const X86EFLAGSBITS *PCX86EFLAGSBITS; +#endif /* !VBOX_FOR_DTRACE_LIB */ + +/** + * EFLAGS. + */ +typedef union X86EFLAGS +{ + /** The plain unsigned view. */ + uint32_t u; +#ifndef VBOX_FOR_DTRACE_LIB + /** The bitfield view. */ + X86EFLAGSBITS Bits; +#endif + /** The 8-bit view. */ + uint8_t au8[4]; + /** The 16-bit view. */ + uint16_t au16[2]; + /** The 32-bit view. */ + uint32_t au32[1]; + /** The 32-bit view. */ + uint32_t u32; +} X86EFLAGS; +/** Pointer to EFLAGS. */ +typedef X86EFLAGS *PX86EFLAGS; +/** Pointer to const EFLAGS. */ +typedef const X86EFLAGS *PCX86EFLAGS; + +/** + * RFLAGS (32 upper bits are reserved). + */ +typedef union X86RFLAGS +{ + /** The plain unsigned view. */ + uint64_t u; +#ifndef VBOX_FOR_DTRACE_LIB + /** The bitfield view. */ + X86EFLAGSBITS Bits; +#endif + /** The 8-bit view. */ + uint8_t au8[8]; + /** The 16-bit view. */ + uint16_t au16[4]; + /** The 32-bit view. */ + uint32_t au32[2]; + /** The 64-bit view. */ + uint64_t au64[1]; + /** The 64-bit view. */ + uint64_t u64; +} X86RFLAGS; +/** Pointer to RFLAGS. */ +typedef X86RFLAGS *PX86RFLAGS; +/** Pointer to const RFLAGS. */ +typedef const X86RFLAGS *PCX86RFLAGS; + + +/** @name EFLAGS + * @{ + */ +/** Bit 0 - CF - Carry flag - Status flag. */ +#define X86_EFL_CF RT_BIT_32(0) +#define X86_EFL_CF_BIT 0 +/** Bit 1 - Reserved, reads as 1. */ +#define X86_EFL_1 RT_BIT_32(1) +/** Bit 2 - PF - Parity flag - Status flag. */ +#define X86_EFL_PF RT_BIT_32(2) +/** Bit 4 - AF - Auxiliary carry flag - Status flag. */ +#define X86_EFL_AF RT_BIT_32(4) +#define X86_EFL_AF_BIT 4 +/** Bit 6 - ZF - Zero flag - Status flag. */ +#define X86_EFL_ZF RT_BIT_32(6) +#define X86_EFL_ZF_BIT 6 +/** Bit 7 - SF - Signed flag - Status flag. */ +#define X86_EFL_SF RT_BIT_32(7) +#define X86_EFL_SF_BIT 7 +/** Bit 8 - TF - Trap flag - System flag. */ +#define X86_EFL_TF RT_BIT_32(8) +/** Bit 9 - IF - Interrupt flag - System flag. */ +#define X86_EFL_IF RT_BIT_32(9) +/** Bit 10 - DF - Direction flag - Control flag. */ +#define X86_EFL_DF RT_BIT_32(10) +/** Bit 11 - OF - Overflow flag - Status flag. */ +#define X86_EFL_OF RT_BIT_32(11) +#define X86_EFL_OF_BIT 11 +/** Bit 12-13 - IOPL - I/O privilege level flag - System flag. */ +#define X86_EFL_IOPL (RT_BIT_32(12) | RT_BIT_32(13)) +/** Bit 14 - NT - Nested task flag - System flag. */ +#define X86_EFL_NT RT_BIT_32(14) +/** Bit 16 - RF - Resume flag - System flag. */ +#define X86_EFL_RF RT_BIT_32(16) +/** Bit 17 - VM - Virtual 8086 mode - System flag. */ +#define X86_EFL_VM RT_BIT_32(17) +/** Bit 18 - AC - Alignment check flag - System flag. Works with CR0.AM. */ +#define X86_EFL_AC RT_BIT_32(18) +/** Bit 19 - VIF - Virtual interrupt flag - System flag. */ +#define X86_EFL_VIF RT_BIT_32(19) +/** Bit 20 - VIP - Virtual interrupt pending flag - System flag. */ +#define X86_EFL_VIP RT_BIT_32(20) +/** Bit 21 - ID - CPUID flag - System flag. If this responds to flipping CPUID is supported. */ +#define X86_EFL_ID RT_BIT_32(21) +/** All live bits. */ +#define X86_EFL_LIVE_MASK UINT32_C(0x003f7fd5) +/** Read as 1 bits. */ +#define X86_EFL_RA1_MASK RT_BIT_32(1) +/** IOPL shift. */ +#define X86_EFL_IOPL_SHIFT 12 +/** The IOPL level from the flags. */ +#define X86_EFL_GET_IOPL(efl) (((efl) >> X86_EFL_IOPL_SHIFT) & 3) +/** Bits restored by popf */ +#define X86_EFL_POPF_BITS ( X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF | X86_EFL_TF | X86_EFL_IF \ + | X86_EFL_DF | X86_EFL_OF | X86_EFL_IOPL | X86_EFL_NT | X86_EFL_AC | X86_EFL_ID ) +/** Bits restored by popf */ +#define X86_EFL_POPF_BITS_386 ( X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF | X86_EFL_TF | X86_EFL_IF \ + | X86_EFL_DF | X86_EFL_OF | X86_EFL_IOPL | X86_EFL_NT ) +/** The status bits commonly updated by arithmetic instructions. */ +#define X86_EFL_STATUS_BITS ( X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF | X86_EFL_OF ) +/** @} */ + + +/** CPUID Feature information - ECX. + * CPUID query with EAX=1. + */ +#ifndef VBOX_FOR_DTRACE_LIB +typedef struct X86CPUIDFEATECX +{ + /** Bit 0 - SSE3 - Supports SSE3 or not. */ + unsigned u1SSE3 : 1; + /** Bit 1 - PCLMULQDQ. */ + unsigned u1PCLMULQDQ : 1; + /** Bit 2 - DS Area 64-bit layout. */ + unsigned u1DTE64 : 1; + /** Bit 3 - MONITOR - Supports MONITOR/MWAIT. */ + unsigned u1Monitor : 1; + /** Bit 4 - CPL-DS - CPL Qualified Debug Store. */ + unsigned u1CPLDS : 1; + /** Bit 5 - VMX - Virtual Machine Technology. */ + unsigned u1VMX : 1; + /** Bit 6 - SMX: Safer Mode Extensions. */ + unsigned u1SMX : 1; + /** Bit 7 - EST - Enh. SpeedStep Tech. */ + unsigned u1EST : 1; + /** Bit 8 - TM2 - Terminal Monitor 2. */ + unsigned u1TM2 : 1; + /** Bit 9 - SSSE3 - Supplemental Streaming SIMD Extensions 3. */ + unsigned u1SSSE3 : 1; + /** Bit 10 - CNTX-ID - L1 Context ID. */ + unsigned u1CNTXID : 1; + /** Bit 11 - Reserved. */ + unsigned u1Reserved1 : 1; + /** Bit 12 - FMA. */ + unsigned u1FMA : 1; + /** Bit 13 - CX16 - CMPXCHG16B. */ + unsigned u1CX16 : 1; + /** Bit 14 - xTPR Update Control. Processor supports changing IA32_MISC_ENABLES[bit 23]. */ + unsigned u1TPRUpdate : 1; + /** Bit 15 - PDCM - Perf/Debug Capability MSR. */ + unsigned u1PDCM : 1; + /** Bit 16 - Reserved. */ + unsigned u1Reserved2 : 1; + /** Bit 17 - PCID - Process-context identifiers. */ + unsigned u1PCID : 1; + /** Bit 18 - Direct Cache Access. */ + unsigned u1DCA : 1; + /** Bit 19 - SSE4_1 - Supports SSE4_1 or not. */ + unsigned u1SSE4_1 : 1; + /** Bit 20 - SSE4_2 - Supports SSE4_2 or not. */ + unsigned u1SSE4_2 : 1; + /** Bit 21 - x2APIC. */ + unsigned u1x2APIC : 1; + /** Bit 22 - MOVBE - Supports MOVBE. */ + unsigned u1MOVBE : 1; + /** Bit 23 - POPCNT - Supports POPCNT. */ + unsigned u1POPCNT : 1; + /** Bit 24 - TSC-Deadline. */ + unsigned u1TSCDEADLINE : 1; + /** Bit 25 - AES. */ + unsigned u1AES : 1; + /** Bit 26 - XSAVE - Supports XSAVE. */ + unsigned u1XSAVE : 1; + /** Bit 27 - OSXSAVE - Supports OSXSAVE. */ + unsigned u1OSXSAVE : 1; + /** Bit 28 - AVX - Supports AVX instruction extensions. */ + unsigned u1AVX : 1; + /** Bit 29 - F16C - Supports 16-bit floating point conversion instructions. */ + unsigned u1F16C : 1; + /** Bit 30 - RDRAND - Supports RDRAND. */ + unsigned u1RDRAND : 1; + /** Bit 31 - Hypervisor present (we're a guest). */ + unsigned u1HVP : 1; +} X86CPUIDFEATECX; +#else /* VBOX_FOR_DTRACE_LIB */ +typedef uint32_t X86CPUIDFEATECX; +#endif /* VBOX_FOR_DTRACE_LIB */ +/** Pointer to CPUID Feature Information - ECX. */ +typedef X86CPUIDFEATECX *PX86CPUIDFEATECX; +/** Pointer to const CPUID Feature Information - ECX. */ +typedef const X86CPUIDFEATECX *PCX86CPUIDFEATECX; + + +/** CPUID Feature Information - EDX. + * CPUID query with EAX=1. + */ +#ifndef VBOX_FOR_DTRACE_LIB /* DTrace different (brain-dead from a C pov) bitfield implementation */ +typedef struct X86CPUIDFEATEDX +{ + /** Bit 0 - FPU - x87 FPU on Chip. */ + unsigned u1FPU : 1; + /** Bit 1 - VME - Virtual 8086 Mode Enhancements. */ + unsigned u1VME : 1; + /** Bit 2 - DE - Debugging extensions. */ + unsigned u1DE : 1; + /** Bit 3 - PSE - Page Size Extension. */ + unsigned u1PSE : 1; + /** Bit 4 - TSC - Time Stamp Counter. */ + unsigned u1TSC : 1; + /** Bit 5 - MSR - Model Specific Registers RDMSR and WRMSR Instructions. */ + unsigned u1MSR : 1; + /** Bit 6 - PAE - Physical Address Extension. */ + unsigned u1PAE : 1; + /** Bit 7 - MCE - Machine Check Exception. */ + unsigned u1MCE : 1; + /** Bit 8 - CX8 - CMPXCHG8B instruction. */ + unsigned u1CX8 : 1; + /** Bit 9 - APIC - APIC On-Chip. */ + unsigned u1APIC : 1; + /** Bit 10 - Reserved. */ + unsigned u1Reserved1 : 1; + /** Bit 11 - SEP - SYSENTER and SYSEXIT. */ + unsigned u1SEP : 1; + /** Bit 12 - MTRR - Memory Type Range Registers. */ + unsigned u1MTRR : 1; + /** Bit 13 - PGE - PTE Global Bit. */ + unsigned u1PGE : 1; + /** Bit 14 - MCA - Machine Check Architecture. */ + unsigned u1MCA : 1; + /** Bit 15 - CMOV - Conditional Move Instructions. */ + unsigned u1CMOV : 1; + /** Bit 16 - PAT - Page Attribute Table. */ + unsigned u1PAT : 1; + /** Bit 17 - PSE-36 - 36-bit Page Size Extension. */ + unsigned u1PSE36 : 1; + /** Bit 18 - PSN - Processor Serial Number. */ + unsigned u1PSN : 1; + /** Bit 19 - CLFSH - CLFLUSH Instruction. */ + unsigned u1CLFSH : 1; + /** Bit 20 - Reserved. */ + unsigned u1Reserved2 : 1; + /** Bit 21 - DS - Debug Store. */ + unsigned u1DS : 1; + /** Bit 22 - ACPI - Thermal Monitor and Software Controlled Clock Facilities. */ + unsigned u1ACPI : 1; + /** Bit 23 - MMX - Intel MMX 'Technology'. */ + unsigned u1MMX : 1; + /** Bit 24 - FXSR - FXSAVE and FXRSTOR Instructions. */ + unsigned u1FXSR : 1; + /** Bit 25 - SSE - SSE Support. */ + unsigned u1SSE : 1; + /** Bit 26 - SSE2 - SSE2 Support. */ + unsigned u1SSE2 : 1; + /** Bit 27 - SS - Self Snoop. */ + unsigned u1SS : 1; + /** Bit 28 - HTT - Hyper-Threading Technology. */ + unsigned u1HTT : 1; + /** Bit 29 - TM - Thermal Monitor. */ + unsigned u1TM : 1; + /** Bit 30 - Reserved - . */ + unsigned u1Reserved3 : 1; + /** Bit 31 - PBE - Pending Break Enabled. */ + unsigned u1PBE : 1; +} X86CPUIDFEATEDX; +#else /* VBOX_FOR_DTRACE_LIB */ +typedef uint32_t X86CPUIDFEATEDX; +#endif /* VBOX_FOR_DTRACE_LIB */ +/** Pointer to CPUID Feature Information - EDX. */ +typedef X86CPUIDFEATEDX *PX86CPUIDFEATEDX; +/** Pointer to const CPUID Feature Information - EDX. */ +typedef const X86CPUIDFEATEDX *PCX86CPUIDFEATEDX; + +/** @name CPUID Vendor information. + * CPUID query with EAX=0. + * @{ + */ +#define X86_CPUID_VENDOR_INTEL_EBX 0x756e6547 /* Genu */ +#define X86_CPUID_VENDOR_INTEL_ECX 0x6c65746e /* ntel */ +#define X86_CPUID_VENDOR_INTEL_EDX 0x49656e69 /* ineI */ + +#define X86_CPUID_VENDOR_AMD_EBX 0x68747541 /* Auth */ +#define X86_CPUID_VENDOR_AMD_ECX 0x444d4163 /* cAMD */ +#define X86_CPUID_VENDOR_AMD_EDX 0x69746e65 /* enti */ + +#define X86_CPUID_VENDOR_VIA_EBX 0x746e6543 /* Cent */ +#define X86_CPUID_VENDOR_VIA_ECX 0x736c7561 /* auls */ +#define X86_CPUID_VENDOR_VIA_EDX 0x48727561 /* aurH */ +/** @} */ + + +/** @name CPUID Feature information. + * CPUID query with EAX=1. + * @{ + */ +/** ECX Bit 0 - SSE3 - Supports SSE3 or not. */ +#define X86_CPUID_FEATURE_ECX_SSE3 RT_BIT_32(0) +/** ECX Bit 1 - PCLMUL - PCLMULQDQ support (for AES-GCM). */ +#define X86_CPUID_FEATURE_ECX_PCLMUL RT_BIT_32(1) +/** ECX Bit 2 - DTES64 - DS Area 64-bit Layout. */ +#define X86_CPUID_FEATURE_ECX_DTES64 RT_BIT_32(2) +/** ECX Bit 3 - MONITOR - Supports MONITOR/MWAIT. */ +#define X86_CPUID_FEATURE_ECX_MONITOR RT_BIT_32(3) +/** ECX Bit 4 - CPL-DS - CPL Qualified Debug Store. */ +#define X86_CPUID_FEATURE_ECX_CPLDS RT_BIT_32(4) +/** ECX Bit 5 - VMX - Virtual Machine Technology. */ +#define X86_CPUID_FEATURE_ECX_VMX RT_BIT_32(5) +/** ECX Bit 6 - SMX - Safer Mode Extensions. */ +#define X86_CPUID_FEATURE_ECX_SMX RT_BIT_32(6) +/** ECX Bit 7 - EST - Enh. SpeedStep Tech. */ +#define X86_CPUID_FEATURE_ECX_EST RT_BIT_32(7) +/** ECX Bit 8 - TM2 - Terminal Monitor 2. */ +#define X86_CPUID_FEATURE_ECX_TM2 RT_BIT_32(8) +/** ECX Bit 9 - SSSE3 - Supplemental Streaming SIMD Extensions 3. */ +#define X86_CPUID_FEATURE_ECX_SSSE3 RT_BIT_32(9) +/** ECX Bit 10 - CNTX-ID - L1 Context ID. */ +#define X86_CPUID_FEATURE_ECX_CNTXID RT_BIT_32(10) +/** ECX Bit 11 - SDBG - Sillicon debug interface (IA32_DEBUG_INTERFACE MSR). + * See figure 3-6 and table 3-10, in intel Vol. 2A. from 2015-01-01. */ +#define X86_CPUID_FEATURE_ECX_SDBG RT_BIT_32(11) +/** ECX Bit 12 - FMA. */ +#define X86_CPUID_FEATURE_ECX_FMA RT_BIT_32(12) +/** ECX Bit 13 - CX16 - CMPXCHG16B. */ +#define X86_CPUID_FEATURE_ECX_CX16 RT_BIT_32(13) +/** ECX Bit 14 - xTPR Update Control. Processor supports changing IA32_MISC_ENABLES[bit 23]. */ +#define X86_CPUID_FEATURE_ECX_TPRUPDATE RT_BIT_32(14) +/** ECX Bit 15 - PDCM - Perf/Debug Capability MSR. */ +#define X86_CPUID_FEATURE_ECX_PDCM RT_BIT_32(15) +/** ECX Bit 17 - PCID - Process-context identifiers. */ +#define X86_CPUID_FEATURE_ECX_PCID RT_BIT_32(17) +/** ECX Bit 18 - DCA - Direct Cache Access. */ +#define X86_CPUID_FEATURE_ECX_DCA RT_BIT_32(18) +/** ECX Bit 19 - SSE4_1 - Supports SSE4_1 or not. */ +#define X86_CPUID_FEATURE_ECX_SSE4_1 RT_BIT_32(19) +/** ECX Bit 20 - SSE4_2 - Supports SSE4_2 or not. */ +#define X86_CPUID_FEATURE_ECX_SSE4_2 RT_BIT_32(20) +/** ECX Bit 21 - x2APIC support. */ +#define X86_CPUID_FEATURE_ECX_X2APIC RT_BIT_32(21) +/** ECX Bit 22 - MOVBE instruction. */ +#define X86_CPUID_FEATURE_ECX_MOVBE RT_BIT_32(22) +/** ECX Bit 23 - POPCNT instruction. */ +#define X86_CPUID_FEATURE_ECX_POPCNT RT_BIT_32(23) +/** ECX Bir 24 - TSC-Deadline. */ +#define X86_CPUID_FEATURE_ECX_TSCDEADL RT_BIT_32(24) +/** ECX Bit 25 - AES instructions. */ +#define X86_CPUID_FEATURE_ECX_AES RT_BIT_32(25) +/** ECX Bit 26 - XSAVE instruction. */ +#define X86_CPUID_FEATURE_ECX_XSAVE RT_BIT_32(26) +/** ECX Bit 27 - Copy of CR4.OSXSAVE. */ +#define X86_CPUID_FEATURE_ECX_OSXSAVE RT_BIT_32(27) +/** ECX Bit 28 - AVX. */ +#define X86_CPUID_FEATURE_ECX_AVX RT_BIT_32(28) +/** ECX Bit 29 - F16C - Half-precision convert instruction support. */ +#define X86_CPUID_FEATURE_ECX_F16C RT_BIT_32(29) +/** ECX Bit 30 - RDRAND instruction. */ +#define X86_CPUID_FEATURE_ECX_RDRAND RT_BIT_32(30) +/** ECX Bit 31 - Hypervisor Present (software only). */ +#define X86_CPUID_FEATURE_ECX_HVP RT_BIT_32(31) + + +/** Bit 0 - FPU - x87 FPU on Chip. */ +#define X86_CPUID_FEATURE_EDX_FPU RT_BIT_32(0) +/** Bit 1 - VME - Virtual 8086 Mode Enhancements. */ +#define X86_CPUID_FEATURE_EDX_VME RT_BIT_32(1) +/** Bit 2 - DE - Debugging extensions. */ +#define X86_CPUID_FEATURE_EDX_DE RT_BIT_32(2) +/** Bit 3 - PSE - Page Size Extension. */ +#define X86_CPUID_FEATURE_EDX_PSE RT_BIT_32(3) +#define X86_CPUID_FEATURE_EDX_PSE_BIT 3 /**< Bit number for X86_CPUID_FEATURE_EDX_PSE. */ +/** Bit 4 - TSC - Time Stamp Counter. */ +#define X86_CPUID_FEATURE_EDX_TSC RT_BIT_32(4) +/** Bit 5 - MSR - Model Specific Registers RDMSR and WRMSR Instructions. */ +#define X86_CPUID_FEATURE_EDX_MSR RT_BIT_32(5) +/** Bit 6 - PAE - Physical Address Extension. */ +#define X86_CPUID_FEATURE_EDX_PAE RT_BIT_32(6) +#define X86_CPUID_FEATURE_EDX_PAE_BIT 6 /**< Bit number for X86_CPUID_FEATURE_EDX_PAE. */ +/** Bit 7 - MCE - Machine Check Exception. */ +#define X86_CPUID_FEATURE_EDX_MCE RT_BIT_32(7) +/** Bit 8 - CX8 - CMPXCHG8B instruction. */ +#define X86_CPUID_FEATURE_EDX_CX8 RT_BIT_32(8) +/** Bit 9 - APIC - APIC On-Chip. */ +#define X86_CPUID_FEATURE_EDX_APIC RT_BIT_32(9) +/** Bit 11 - SEP - SYSENTER and SYSEXIT Present. */ +#define X86_CPUID_FEATURE_EDX_SEP RT_BIT_32(11) +/** Bit 12 - MTRR - Memory Type Range Registers. */ +#define X86_CPUID_FEATURE_EDX_MTRR RT_BIT_32(12) +/** Bit 13 - PGE - PTE Global Bit. */ +#define X86_CPUID_FEATURE_EDX_PGE RT_BIT_32(13) +/** Bit 14 - MCA - Machine Check Architecture. */ +#define X86_CPUID_FEATURE_EDX_MCA RT_BIT_32(14) +/** Bit 15 - CMOV - Conditional Move Instructions. */ +#define X86_CPUID_FEATURE_EDX_CMOV RT_BIT_32(15) +/** Bit 16 - PAT - Page Attribute Table. */ +#define X86_CPUID_FEATURE_EDX_PAT RT_BIT_32(16) +/** Bit 17 - PSE-36 - 36-bit Page Size Extension. */ +#define X86_CPUID_FEATURE_EDX_PSE36 RT_BIT_32(17) +/** Bit 18 - PSN - Processor Serial Number. */ +#define X86_CPUID_FEATURE_EDX_PSN RT_BIT_32(18) +/** Bit 19 - CLFSH - CLFLUSH Instruction. */ +#define X86_CPUID_FEATURE_EDX_CLFSH RT_BIT_32(19) +/** Bit 21 - DS - Debug Store. */ +#define X86_CPUID_FEATURE_EDX_DS RT_BIT_32(21) +/** Bit 22 - ACPI - Thermal Monitor and Software Controlled Clock Facilities. */ +#define X86_CPUID_FEATURE_EDX_ACPI RT_BIT_32(22) +/** Bit 23 - MMX - Intel MMX Technology. */ +#define X86_CPUID_FEATURE_EDX_MMX RT_BIT_32(23) +/** Bit 24 - FXSR - FXSAVE and FXRSTOR Instructions. */ +#define X86_CPUID_FEATURE_EDX_FXSR RT_BIT_32(24) +/** Bit 25 - SSE - SSE Support. */ +#define X86_CPUID_FEATURE_EDX_SSE RT_BIT_32(25) +/** Bit 26 - SSE2 - SSE2 Support. */ +#define X86_CPUID_FEATURE_EDX_SSE2 RT_BIT_32(26) +/** Bit 27 - SS - Self Snoop. */ +#define X86_CPUID_FEATURE_EDX_SS RT_BIT_32(27) +/** Bit 28 - HTT - Hyper-Threading Technology. */ +#define X86_CPUID_FEATURE_EDX_HTT RT_BIT_32(28) +/** Bit 29 - TM - Therm. Monitor. */ +#define X86_CPUID_FEATURE_EDX_TM RT_BIT_32(29) +/** Bit 31 - PBE - Pending Break Enabled. */ +#define X86_CPUID_FEATURE_EDX_PBE RT_BIT_32(31) +/** @} */ + +/** @name CPUID mwait/monitor information. + * CPUID query with EAX=5. + * @{ + */ +/** ECX Bit 0 - MWAITEXT - Supports mwait/monitor extensions or not. */ +#define X86_CPUID_MWAIT_ECX_EXT RT_BIT_32(0) +/** ECX Bit 1 - MWAITBREAK - Break mwait for external interrupt even if EFLAGS.IF=0. */ +#define X86_CPUID_MWAIT_ECX_BREAKIRQIF0 RT_BIT_32(1) +/** @} */ + + +/** @name CPUID Structured Extended Feature information. + * CPUID query with EAX=7. + * @{ + */ +/** EBX Bit 0 - FSGSBASE - Supports RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE. */ +#define X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE RT_BIT_32(0) +/** EBX Bit 1 - TSCADJUST - Supports MSR_IA32_TSC_ADJUST. */ +#define X86_CPUID_STEXT_FEATURE_EBX_TSC_ADJUST RT_BIT_32(1) +/** EBX Bit 2 - SGX - Supports Software Guard Extensions . */ +#define X86_CPUID_STEXT_FEATURE_EBX_SGX RT_BIT_32(2) +/** EBX Bit 3 - BMI1 - Advanced Bit Manipulation extension 1. */ +#define X86_CPUID_STEXT_FEATURE_EBX_BMI1 RT_BIT_32(3) +/** EBX Bit 4 - HLE - Hardware Lock Elision. */ +#define X86_CPUID_STEXT_FEATURE_EBX_HLE RT_BIT_32(4) +/** EBX Bit 5 - AVX2 - Advanced Vector Extensions 2. */ +#define X86_CPUID_STEXT_FEATURE_EBX_AVX2 RT_BIT_32(5) +/** EBX Bit 6 - FDP_EXCPTN_ONLY - FPU data pointer only updated on exceptions if set. */ +#define X86_CPUID_STEXT_FEATURE_EBX_FDP_EXCPTN_ONLY RT_BIT_32(6) +/** EBX Bit 7 - SMEP - Supervisor Mode Execution Prevention. */ +#define X86_CPUID_STEXT_FEATURE_EBX_SMEP RT_BIT_32(7) +/** EBX Bit 8 - BMI2 - Advanced Bit Manipulation extension 2. */ +#define X86_CPUID_STEXT_FEATURE_EBX_BMI2 RT_BIT_32(8) +/** EBX Bit 9 - ERMS - Supports Enhanced REP MOVSB/STOSB. */ +#define X86_CPUID_STEXT_FEATURE_EBX_ERMS RT_BIT_32(9) +/** EBX Bit 10 - INVPCID - Supports INVPCID. */ +#define X86_CPUID_STEXT_FEATURE_EBX_INVPCID RT_BIT_32(10) +/** EBX Bit 11 - RTM - Supports Restricted Transactional Memory. */ +#define X86_CPUID_STEXT_FEATURE_EBX_RTM RT_BIT_32(11) +/** EBX Bit 12 - PQM - Supports Platform Quality of Service Monitoring. */ +#define X86_CPUID_STEXT_FEATURE_EBX_PQM RT_BIT_32(12) +/** EBX Bit 13 - DEPFPU_CS_DS - Deprecates FPU CS, FPU DS values if set. */ +#define X86_CPUID_STEXT_FEATURE_EBX_DEPR_FPU_CS_DS RT_BIT_32(13) +/** EBX Bit 14 - MPE - Supports Intel Memory Protection Extensions. */ +#define X86_CPUID_STEXT_FEATURE_EBX_MPE RT_BIT_32(14) +/** EBX Bit 15 - PQE - Supports Platform Quality of Service Enforcement. */ +#define X86_CPUID_STEXT_FEATURE_EBX_PQE RT_BIT_32(15) +/** EBX Bit 16 - AVX512F - Supports AVX512F. */ +#define X86_CPUID_STEXT_FEATURE_EBX_AVX512F RT_BIT_32(16) +/** EBX Bit 18 - RDSEED - Supports RDSEED. */ +#define X86_CPUID_STEXT_FEATURE_EBX_RDSEED RT_BIT_32(18) +/** EBX Bit 19 - ADX - Supports ADCX/ADOX. */ +#define X86_CPUID_STEXT_FEATURE_EBX_ADX RT_BIT_32(19) +/** EBX Bit 20 - SMAP - Supports Supervisor Mode Access Prevention. */ +#define X86_CPUID_STEXT_FEATURE_EBX_SMAP RT_BIT_32(20) +/** EBX Bit 23 - CLFLUSHOPT - Supports CLFLUSHOPT (Cache Line Flush). */ +#define X86_CPUID_STEXT_FEATURE_EBX_CLFLUSHOPT RT_BIT_32(23) +/** EBX Bit 25 - INTEL_PT - Supports Intel Processor Trace. */ +#define X86_CPUID_STEXT_FEATURE_EBX_INTEL_PT RT_BIT_32(25) +/** EBX Bit 26 - AVX512PF - Supports AVX512PF. */ +#define X86_CPUID_STEXT_FEATURE_EBX_AVX512PF RT_BIT_32(26) +/** EBX Bit 27 - AVX512ER - Supports AVX512ER. */ +#define X86_CPUID_STEXT_FEATURE_EBX_AVX512ER RT_BIT_32(27) +/** EBX Bit 28 - AVX512CD - Supports AVX512CD. */ +#define X86_CPUID_STEXT_FEATURE_EBX_AVX512CD RT_BIT_32(28) +/** EBX Bit 29 - SHA - Supports Secure Hash Algorithm extensions. */ +#define X86_CPUID_STEXT_FEATURE_EBX_SHA RT_BIT_32(29) + +/** ECX Bit 0 - PREFETCHWT1 - Supports the PREFETCHWT1 instruction. */ +#define X86_CPUID_STEXT_FEATURE_ECX_PREFETCHWT1 RT_BIT_32(0) +/** ECX Bit 2 - UIMP - Supports user mode instruction prevention. */ +#define X86_CPUID_STEXT_FEATURE_ECX_UMIP RT_BIT_32(2) +/** ECX Bit 3 - PKU - Supports protection keys for user-mode pages. */ +#define X86_CPUID_STEXT_FEATURE_ECX_PKU RT_BIT_32(3) +/** ECX Bit 4 - OSPKE - Protection keys for user mode pages enabled. */ +#define X86_CPUID_STEXT_FEATURE_ECX_OSPKE RT_BIT_32(4) +/** ECX Bits 17-21 - MAWAU - Value used by BNDLDX and BNDSTX. */ +#define X86_CPUID_STEXT_FEATURE_ECX_MAWAU UINT32_C(0x003e0000) +/** ECX Bit 22 - RDPID - Support pread process ID. */ +#define X86_CPUID_STEXT_FEATURE_ECX_RDPID RT_BIT_32(2) +/** ECX Bit 30 - SGX_LC - Supports SGX launch configuration. */ +#define X86_CPUID_STEXT_FEATURE_ECX_SGX_LC RT_BIT_32(30) + +/** EDX Bit 26 - IBRS & IBPB - Supports the IBRS flag in IA32_SPEC_CTRL and + * IBPB command in IA32_PRED_CMD. */ +#define X86_CPUID_STEXT_FEATURE_EDX_IBRS_IBPB RT_BIT_32(26) +/** EDX Bit 27 - IBRS & IBPB - Supports the STIBP flag in IA32_SPEC_CTRL. */ +#define X86_CPUID_STEXT_FEATURE_EDX_STIBP RT_BIT_32(27) + +/** EDX Bit 29 - ARCHCAP - Supports the IA32_ARCH_CAP MSR. */ +#define X86_CPUID_STEXT_FEATURE_EDX_ARCHCAP RT_BIT_32(29) + +/** @} */ + + +/** @name CPUID Extended Feature information. + * CPUID query with EAX=0x80000001. + * @{ + */ +/** ECX Bit 0 - LAHF/SAHF support in 64-bit mode. */ +#define X86_CPUID_EXT_FEATURE_ECX_LAHF_SAHF RT_BIT_32(0) + +/** EDX Bit 11 - SYSCALL/SYSRET. */ +#define X86_CPUID_EXT_FEATURE_EDX_SYSCALL RT_BIT_32(11) +/** EDX Bit 20 - No-Execute/Execute-Disable. */ +#define X86_CPUID_EXT_FEATURE_EDX_NX RT_BIT_32(20) +/** EDX Bit 26 - 1 GB large page. */ +#define X86_CPUID_EXT_FEATURE_EDX_PAGE1GB RT_BIT_32(26) +/** EDX Bit 27 - RDTSCP. */ +#define X86_CPUID_EXT_FEATURE_EDX_RDTSCP RT_BIT_32(27) +/** EDX Bit 29 - AMD Long Mode/Intel-64 Instructions. */ +#define X86_CPUID_EXT_FEATURE_EDX_LONG_MODE RT_BIT_32(29) +/** @}*/ + +/** @name CPUID AMD Feature information. + * CPUID query with EAX=0x80000001. + * @{ + */ +/** Bit 0 - FPU - x87 FPU on Chip. */ +#define X86_CPUID_AMD_FEATURE_EDX_FPU RT_BIT_32(0) +/** Bit 1 - VME - Virtual 8086 Mode Enhancements. */ +#define X86_CPUID_AMD_FEATURE_EDX_VME RT_BIT_32(1) +/** Bit 2 - DE - Debugging extensions. */ +#define X86_CPUID_AMD_FEATURE_EDX_DE RT_BIT_32(2) +/** Bit 3 - PSE - Page Size Extension. */ +#define X86_CPUID_AMD_FEATURE_EDX_PSE RT_BIT_32(3) +/** Bit 4 - TSC - Time Stamp Counter. */ +#define X86_CPUID_AMD_FEATURE_EDX_TSC RT_BIT_32(4) +/** Bit 5 - MSR - K86 Model Specific Registers RDMSR and WRMSR Instructions. */ +#define X86_CPUID_AMD_FEATURE_EDX_MSR RT_BIT_32(5) +/** Bit 6 - PAE - Physical Address Extension. */ +#define X86_CPUID_AMD_FEATURE_EDX_PAE RT_BIT_32(6) +/** Bit 7 - MCE - Machine Check Exception. */ +#define X86_CPUID_AMD_FEATURE_EDX_MCE RT_BIT_32(7) +/** Bit 8 - CX8 - CMPXCHG8B instruction. */ +#define X86_CPUID_AMD_FEATURE_EDX_CX8 RT_BIT_32(8) +/** Bit 9 - APIC - APIC On-Chip. */ +#define X86_CPUID_AMD_FEATURE_EDX_APIC RT_BIT_32(9) +/** Bit 12 - MTRR - Memory Type Range Registers. */ +#define X86_CPUID_AMD_FEATURE_EDX_MTRR RT_BIT_32(12) +/** Bit 13 - PGE - PTE Global Bit. */ +#define X86_CPUID_AMD_FEATURE_EDX_PGE RT_BIT_32(13) +/** Bit 14 - MCA - Machine Check Architecture. */ +#define X86_CPUID_AMD_FEATURE_EDX_MCA RT_BIT_32(14) +/** Bit 15 - CMOV - Conditional Move Instructions. */ +#define X86_CPUID_AMD_FEATURE_EDX_CMOV RT_BIT_32(15) +/** Bit 16 - PAT - Page Attribute Table. */ +#define X86_CPUID_AMD_FEATURE_EDX_PAT RT_BIT_32(16) +/** Bit 17 - PSE-36 - 36-bit Page Size Extension. */ +#define X86_CPUID_AMD_FEATURE_EDX_PSE36 RT_BIT_32(17) +/** Bit 22 - AXMMX - AMD Extensions to MMX Instructions. */ +#define X86_CPUID_AMD_FEATURE_EDX_AXMMX RT_BIT_32(22) +/** Bit 23 - MMX - Intel MMX Technology. */ +#define X86_CPUID_AMD_FEATURE_EDX_MMX RT_BIT_32(23) +/** Bit 24 - FXSR - FXSAVE and FXRSTOR Instructions. */ +#define X86_CPUID_AMD_FEATURE_EDX_FXSR RT_BIT_32(24) +/** Bit 25 - FFXSR - AMD fast FXSAVE and FXRSTOR Instructions. */ +#define X86_CPUID_AMD_FEATURE_EDX_FFXSR RT_BIT_32(25) +/** Bit 30 - 3DNOWEXT - AMD Extensions to 3DNow. */ +#define X86_CPUID_AMD_FEATURE_EDX_3DNOW_EX RT_BIT_32(30) +/** Bit 31 - 3DNOW - AMD 3DNow. */ +#define X86_CPUID_AMD_FEATURE_EDX_3DNOW RT_BIT_32(31) + +/** Bit 1 - CmpLegacy - Core multi-processing legacy mode. */ +#define X86_CPUID_AMD_FEATURE_ECX_CMPL RT_BIT_32(1) +/** Bit 2 - SVM - AMD VM extensions. */ +#define X86_CPUID_AMD_FEATURE_ECX_SVM RT_BIT_32(2) +/** Bit 3 - EXTAPIC - AMD extended APIC registers starting at 0x400. */ +#define X86_CPUID_AMD_FEATURE_ECX_EXT_APIC RT_BIT_32(3) +/** Bit 4 - CR8L - AMD LOCK MOV CR0 means MOV CR8. */ +#define X86_CPUID_AMD_FEATURE_ECX_CR8L RT_BIT_32(4) +/** Bit 5 - ABM - AMD Advanced bit manipulation. LZCNT instruction support. */ +#define X86_CPUID_AMD_FEATURE_ECX_ABM RT_BIT_32(5) +/** Bit 6 - SSE4A - AMD EXTRQ, INSERTQ, MOVNTSS, and MOVNTSD instruction support. */ +#define X86_CPUID_AMD_FEATURE_ECX_SSE4A RT_BIT_32(6) +/** Bit 7 - MISALIGNSSE - AMD Misaligned SSE mode. */ +#define X86_CPUID_AMD_FEATURE_ECX_MISALNSSE RT_BIT_32(7) +/** Bit 8 - 3DNOWPRF - AMD PREFETCH and PREFETCHW instruction support. */ +#define X86_CPUID_AMD_FEATURE_ECX_3DNOWPRF RT_BIT_32(8) +/** Bit 9 - OSVW - AMD OS visible workaround. */ +#define X86_CPUID_AMD_FEATURE_ECX_OSVW RT_BIT_32(9) +/** Bit 10 - IBS - Instruct based sampling. */ +#define X86_CPUID_AMD_FEATURE_ECX_IBS RT_BIT_32(10) +/** Bit 11 - XOP - Extended operation support (see APM6). */ +#define X86_CPUID_AMD_FEATURE_ECX_XOP RT_BIT_32(11) +/** Bit 12 - SKINIT - AMD SKINIT: SKINIT, STGI, and DEV support. */ +#define X86_CPUID_AMD_FEATURE_ECX_SKINIT RT_BIT_32(12) +/** Bit 13 - WDT - AMD Watchdog timer support. */ +#define X86_CPUID_AMD_FEATURE_ECX_WDT RT_BIT_32(13) +/** Bit 15 - LWP - Lightweight profiling support. */ +#define X86_CPUID_AMD_FEATURE_ECX_LWP RT_BIT_32(15) +/** Bit 16 - FMA4 - Four operand FMA instruction support. */ +#define X86_CPUID_AMD_FEATURE_ECX_FMA4 RT_BIT_32(16) +/** Bit 19 - NodeId - Indicates support for + * MSR_C001_100C[NodeId,NodesPerProcessr]. */ +#define X86_CPUID_AMD_FEATURE_ECX_NODEID RT_BIT_32(19) +/** Bit 21 - TBM - Trailing bit manipulation instruction support. */ +#define X86_CPUID_AMD_FEATURE_ECX_TBM RT_BIT_32(21) +/** Bit 22 - TopologyExtensions - . */ +#define X86_CPUID_AMD_FEATURE_ECX_TOPOEXT RT_BIT_32(22) +/** @} */ + + +/** @name CPUID AMD Feature information. + * CPUID query with EAX=0x80000007. + * @{ + */ +/** Bit 0 - TS - Temperature Sensor. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_TS RT_BIT_32(0) +/** Bit 1 - FID - Frequency ID Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_FID RT_BIT_32(1) +/** Bit 2 - VID - Voltage ID Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_VID RT_BIT_32(2) +/** Bit 3 - TTP - THERMTRIP. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_TTP RT_BIT_32(3) +/** Bit 4 - TM - Hardware Thermal Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_TM RT_BIT_32(4) +/** Bit 5 - STC - Software Thermal Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_STC RT_BIT_32(5) +/** Bit 6 - MC - 100 Mhz Multiplier Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_MC RT_BIT_32(6) +/** Bit 7 - HWPSTATE - Hardware P-State Control. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_HWPSTATE RT_BIT_32(7) +/** Bit 8 - TSCINVAR - TSC Invariant. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_TSCINVAR RT_BIT_32(8) +/** Bit 9 - CPB - TSC Invariant. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_CPB RT_BIT_32(9) +/** Bit 10 - EffFreqRO - MPERF/APERF. */ +#define X86_CPUID_AMD_ADVPOWER_EDX_EFRO RT_BIT_32(10) +/** Bit 11 - PFI - Processor feedback interface (see EAX). */ +#define X86_CPUID_AMD_ADVPOWER_EDX_PFI RT_BIT_32(11) +/** Bit 12 - PA - Processor accumulator (MSR c001_007a). */ +#define X86_CPUID_AMD_ADVPOWER_EDX_PA RT_BIT_32(12) +/** @} */ + + +/** @name CPUID AMD extended feature extensions ID (EBX). + * CPUID query with EAX=0x80000008. + * @{ + */ +/** Bit 0 - CLZERO - Clear zero instruction. */ +#define X86_CPUID_AMD_EFEID_EBX_CLZERO RT_BIT_32(0) +/** Bit 1 - IRPerf - Instructions retired count support. */ +#define X86_CPUID_AMD_EFEID_EBX_IRPERF RT_BIT_32(1) +/** Bit 2 - XSaveErPtr - Always XSAVE* and XRSTR* error pointers. */ +#define X86_CPUID_AMD_EFEID_EBX_XSAVE_ER_PTR RT_BIT_32(2) +/* AMD pipeline length: 9 feature bits ;-) */ +/** Bit 12 - IBPB - Supports the IBPB command in IA32_PRED_CMD. */ +#define X86_CPUID_AMD_EFEID_EBX_IBPB RT_BIT_32(12) +/** @} */ + + +/** @name CPUID AMD SVM Feature information. + * CPUID query with EAX=0x8000000a. + * @{ + */ +/** Bit 0 - NP - Nested Paging supported. */ +#define X86_CPUID_SVM_FEATURE_EDX_NESTED_PAGING RT_BIT(0) +/** Bit 1 - LbrVirt - Support for saving five debug MSRs. */ +#define X86_CPUID_SVM_FEATURE_EDX_LBR_VIRT RT_BIT(1) +/** Bit 2 - SVML - SVM locking bit supported. */ +#define X86_CPUID_SVM_FEATURE_EDX_SVM_LOCK RT_BIT(2) +/** Bit 3 - NRIPS - Saving the next instruction pointer is supported. */ +#define X86_CPUID_SVM_FEATURE_EDX_NRIP_SAVE RT_BIT(3) +/** Bit 4 - TscRateMsr - Support for MSR TSC ratio. */ +#define X86_CPUID_SVM_FEATURE_EDX_TSC_RATE_MSR RT_BIT(4) +/** Bit 5 - VmcbClean - Support VMCB clean bits. */ +#define X86_CPUID_SVM_FEATURE_EDX_VMCB_CLEAN RT_BIT(5) +/** Bit 6 - FlushByAsid - Indicate TLB flushing for current ASID only, and that + * VMCB.TLB_Control is supported. */ +#define X86_CPUID_SVM_FEATURE_EDX_FLUSH_BY_ASID RT_BIT(6) +/** Bit 7 - DecodeAssist - Indicate decode assist is supported. */ +#define X86_CPUID_SVM_FEATURE_EDX_DECODE_ASSIST RT_BIT(7) +/** Bit 10 - PauseFilter - Indicates support for the PAUSE intercept filter. */ +#define X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER RT_BIT(10) +/** Bit 12 - PauseFilterThreshold - Indicates support for the PAUSE + * intercept filter cycle count threshold. */ +#define X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER_THRESHOLD RT_BIT(12) +/** Bit 13 - AVIC - Advanced Virtual Interrupt Controller. */ +#define X86_CPUID_SVM_FEATURE_EDX_AVIC RT_BIT(13) +/** Bit 15 - V_VMSAVE_VMLOAD - Supports virtualized VMSAVE/VMLOAD. */ +#define X86_CPUID_SVM_FEATURE_EDX_VIRT_VMSAVE_VMLOAD RT_BIT(15) +/** Bit 16 - V_VMSAVE_VMLOAD - Supports virtualized GIF. */ +#define X86_CPUID_SVM_FEATURE_EDX_VGIF RT_BIT(16) +/** @} */ + + +/** @name CR0 + * @remarks The 286 (MSW), 386 and 486 ignores attempts at setting + * reserved flags. + * @{ */ +/** Bit 0 - PE - Protection Enabled */ +#define X86_CR0_PE RT_BIT_32(0) +#define X86_CR0_PROTECTION_ENABLE RT_BIT_32(0) +/** Bit 1 - MP - Monitor Coprocessor */ +#define X86_CR0_MP RT_BIT_32(1) +#define X86_CR0_MONITOR_COPROCESSOR RT_BIT_32(1) +/** Bit 2 - EM - Emulation. */ +#define X86_CR0_EM RT_BIT_32(2) +#define X86_CR0_EMULATE_FPU RT_BIT_32(2) +/** Bit 3 - TS - Task Switch. */ +#define X86_CR0_TS RT_BIT_32(3) +#define X86_CR0_TASK_SWITCH RT_BIT_32(3) +/** Bit 4 - ET - Extension flag. (386, 'hardcoded' to 1 on 486+) */ +#define X86_CR0_ET RT_BIT_32(4) +#define X86_CR0_EXTENSION_TYPE RT_BIT_32(4) +/** Bit 5 - NE - Numeric error (486+). */ +#define X86_CR0_NE RT_BIT_32(5) +#define X86_CR0_NUMERIC_ERROR RT_BIT_32(5) +/** Bit 16 - WP - Write Protect (486+). */ +#define X86_CR0_WP RT_BIT_32(16) +#define X86_CR0_WRITE_PROTECT RT_BIT_32(16) +/** Bit 18 - AM - Alignment Mask (486+). */ +#define X86_CR0_AM RT_BIT_32(18) +#define X86_CR0_ALIGMENT_MASK RT_BIT_32(18) +/** Bit 29 - NW - Not Write-though (486+). */ +#define X86_CR0_NW RT_BIT_32(29) +#define X86_CR0_NOT_WRITE_THROUGH RT_BIT_32(29) +/** Bit 30 - WP - Cache Disable (486+). */ +#define X86_CR0_CD RT_BIT_32(30) +#define X86_CR0_CACHE_DISABLE RT_BIT_32(30) +/** Bit 31 - PG - Paging. */ +#define X86_CR0_PG RT_BIT_32(31) +#define X86_CR0_PAGING RT_BIT_32(31) +/** @} */ + + +/** @name CR3 + * @{ */ +/** Bit 3 - PWT - Page-level Writes Transparent. */ +#define X86_CR3_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page-level Cache Disable. */ +#define X86_CR3_PCD RT_BIT_32(4) +/** Bits 12-31 - - Page directory page number. */ +#define X86_CR3_PAGE_MASK (0xfffff000) +/** Bits 5-31 - - PAE Page directory page number. */ +#define X86_CR3_PAE_PAGE_MASK (0xffffffe0) +/** Bits 12-51 - - AMD64 Page directory page number. */ +#define X86_CR3_AMD64_PAGE_MASK UINT64_C(0x000ffffffffff000) +/** @} */ + + +/** @name CR4 + * @{ */ +/** Bit 0 - VME - Virtual-8086 Mode Extensions. */ +#define X86_CR4_VME RT_BIT_32(0) +/** Bit 1 - PVI - Protected-Mode Virtual Interrupts. */ +#define X86_CR4_PVI RT_BIT_32(1) +/** Bit 2 - TSD - Time Stamp Disable. */ +#define X86_CR4_TSD RT_BIT_32(2) +/** Bit 3 - DE - Debugging Extensions. */ +#define X86_CR4_DE RT_BIT_32(3) +/** Bit 4 - PSE - Page Size Extension. */ +#define X86_CR4_PSE RT_BIT_32(4) +/** Bit 5 - PAE - Physical Address Extension. */ +#define X86_CR4_PAE RT_BIT_32(5) +/** Bit 6 - MCE - Machine-Check Enable. */ +#define X86_CR4_MCE RT_BIT_32(6) +/** Bit 7 - PGE - Page Global Enable. */ +#define X86_CR4_PGE RT_BIT_32(7) +/** Bit 8 - PCE - Performance-Monitoring Counter Enable. */ +#define X86_CR4_PCE RT_BIT_32(8) +/** Bit 9 - OSFXSR - Operating System Support for FXSAVE and FXRSTORE instructions. */ +#define X86_CR4_OSFXSR RT_BIT_32(9) +/** Bit 10 - OSXMMEEXCPT - Operating System Support for Unmasked SIMD Floating-Point Exceptions. */ +#define X86_CR4_OSXMMEEXCPT RT_BIT_32(10) +/** Bit 13 - VMXE - VMX mode is enabled. */ +#define X86_CR4_VMXE RT_BIT_32(13) +/** Bit 14 - SMXE - Safer Mode Extensions Enabled. */ +#define X86_CR4_SMXE RT_BIT_32(14) +/** Bit 17 - PCIDE - Process-Context Identifiers Enabled. */ +#define X86_CR4_PCIDE RT_BIT_32(17) +/** Bit 18 - OSXSAVE - Operating System Support for XSAVE and processor + * extended states. */ +#define X86_CR4_OSXSAVE RT_BIT_32(18) +/** Bit 20 - SMEP - Supervisor-mode Execution Prevention enabled. */ +#define X86_CR4_SMEP RT_BIT_32(20) +/** Bit 21 - SMAP - Supervisor-mode Access Prevention enabled. */ +#define X86_CR4_SMAP RT_BIT_32(21) +/** Bit 22 - PKE - Protection Key Enable. */ +#define X86_CR4_PKE RT_BIT_32(22) +/** @} */ + + +/** @name DR6 + * @{ */ +/** Bit 0 - B0 - Breakpoint 0 condition detected. */ +#define X86_DR6_B0 RT_BIT_32(0) +/** Bit 1 - B1 - Breakpoint 1 condition detected. */ +#define X86_DR6_B1 RT_BIT_32(1) +/** Bit 2 - B2 - Breakpoint 2 condition detected. */ +#define X86_DR6_B2 RT_BIT_32(2) +/** Bit 3 - B3 - Breakpoint 3 condition detected. */ +#define X86_DR6_B3 RT_BIT_32(3) +/** Mask of all the Bx bits. */ +#define X86_DR6_B_MASK UINT64_C(0x0000000f) +/** Bit 13 - BD - Debug register access detected. Corresponds to the X86_DR7_GD bit. */ +#define X86_DR6_BD RT_BIT_32(13) +/** Bit 14 - BS - Single step */ +#define X86_DR6_BS RT_BIT_32(14) +/** Bit 15 - BT - Task switch. (TSS T bit.) */ +#define X86_DR6_BT RT_BIT_32(15) +/** Value of DR6 after powerup/reset. */ +#define X86_DR6_INIT_VAL UINT64_C(0xFFFF0FF0) +/** Bits which must be 1s in DR6. */ +#define X86_DR6_RA1_MASK UINT64_C(0xffff0ff0) +/** Bits which must be 0s in DR6. */ +#define X86_DR6_RAZ_MASK RT_BIT_64(12) +/** Bits which must be 0s on writes to DR6. */ +#define X86_DR6_MBZ_MASK UINT64_C(0xffffffff00000000) +/** @} */ + +/** Get the DR6.Bx bit for a the given breakpoint. */ +#define X86_DR6_B(iBp) RT_BIT_64(iBp) + + +/** @name DR7 + * @{ */ +/** Bit 0 - L0 - Local breakpoint enable. Cleared on task switch. */ +#define X86_DR7_L0 RT_BIT_32(0) +/** Bit 1 - G0 - Global breakpoint enable. Not cleared on task switch. */ +#define X86_DR7_G0 RT_BIT_32(1) +/** Bit 2 - L1 - Local breakpoint enable. Cleared on task switch. */ +#define X86_DR7_L1 RT_BIT_32(2) +/** Bit 3 - G1 - Global breakpoint enable. Not cleared on task switch. */ +#define X86_DR7_G1 RT_BIT_32(3) +/** Bit 4 - L2 - Local breakpoint enable. Cleared on task switch. */ +#define X86_DR7_L2 RT_BIT_32(4) +/** Bit 5 - G2 - Global breakpoint enable. Not cleared on task switch. */ +#define X86_DR7_G2 RT_BIT_32(5) +/** Bit 6 - L3 - Local breakpoint enable. Cleared on task switch. */ +#define X86_DR7_L3 RT_BIT_32(6) +/** Bit 7 - G3 - Global breakpoint enable. Not cleared on task switch. */ +#define X86_DR7_G3 RT_BIT_32(7) +/** Bit 8 - LE - Local breakpoint exact. (Not supported (read ignored) by P6 and later.) */ +#define X86_DR7_LE RT_BIT_32(8) +/** Bit 9 - GE - Local breakpoint exact. (Not supported (read ignored) by P6 and later.) */ +#define X86_DR7_GE RT_BIT_32(9) + +/** L0, L1, L2, and L3. */ +#define X86_DR7_LE_ALL UINT64_C(0x0000000000000055) +/** L0, L1, L2, and L3. */ +#define X86_DR7_GE_ALL UINT64_C(0x00000000000000aa) + +/** Bit 12 - IR (ICE) - Interrupt redirection on Pentium. When set, the in + * Circuit Emulator (ICE) will break emulation on breakpoints and stuff. + * May cause CPU hang if enabled without ICE attached when the ICEBP/INT1 + * instruction is executed. + * @see http://www.rcollins.org/secrets/DR7.html */ +#define X86_DR7_ICE_IR RT_BIT_32(12) +/** Bit 13 - GD - General detect enable. Enables emulators to get exceptions when + * any DR register is accessed. */ +#define X86_DR7_GD RT_BIT_32(13) +/** Bit 14 - TR1 (ICE) - Code discontinuity trace for use with ICE on + * Pentium. */ +#define X86_DR7_ICE_TR1 RT_BIT_32(14) +/** Bit 15 - TR2 (ICE) - Controls unknown ICE trace feature of the pentium. */ +#define X86_DR7_ICE_TR2 RT_BIT_32(15) +/** Bit 16 & 17 - R/W0 - Read write field 0. Values X86_DR7_RW_*. */ +#define X86_DR7_RW0_MASK (3 << 16) +/** Bit 18 & 19 - LEN0 - Length field 0. Values X86_DR7_LEN_*. */ +#define X86_DR7_LEN0_MASK (3 << 18) +/** Bit 20 & 21 - R/W1 - Read write field 0. Values X86_DR7_RW_*. */ +#define X86_DR7_RW1_MASK (3 << 20) +/** Bit 22 & 23 - LEN1 - Length field 0. Values X86_DR7_LEN_*. */ +#define X86_DR7_LEN1_MASK (3 << 22) +/** Bit 24 & 25 - R/W2 - Read write field 0. Values X86_DR7_RW_*. */ +#define X86_DR7_RW2_MASK (3 << 24) +/** Bit 26 & 27 - LEN2 - Length field 0. Values X86_DR7_LEN_*. */ +#define X86_DR7_LEN2_MASK (3 << 26) +/** Bit 28 & 29 - R/W3 - Read write field 0. Values X86_DR7_RW_*. */ +#define X86_DR7_RW3_MASK (3 << 28) +/** Bit 30 & 31 - LEN3 - Length field 0. Values X86_DR7_LEN_*. */ +#define X86_DR7_LEN3_MASK (3 << 30) + +/** Bits which reads as 1s. */ +#define X86_DR7_RA1_MASK RT_BIT_32(10) +/** Bits which reads as zeros. These are related to ICE (bits 12, 14, 15). */ +#define X86_DR7_RAZ_MASK UINT64_C(0x0000d800) +/** Bits which must be 0s when writing to DR7. */ +#define X86_DR7_MBZ_MASK UINT64_C(0xffffffff00000000) + +/** Calcs the L bit of Nth breakpoint. + * @param iBp The breakpoint number [0..3]. + */ +#define X86_DR7_L(iBp) ( UINT32_C(1) << (iBp * 2) ) + +/** Calcs the G bit of Nth breakpoint. + * @param iBp The breakpoint number [0..3]. + */ +#define X86_DR7_G(iBp) ( UINT32_C(1) << (iBp * 2 + 1) ) + +/** Calcs the L and G bits of Nth breakpoint. + * @param iBp The breakpoint number [0..3]. + */ +#define X86_DR7_L_G(iBp) ( UINT32_C(3) << (iBp * 2) ) + +/** @name Read/Write values. + * @{ */ +/** Break on instruction fetch only. */ +#define X86_DR7_RW_EO 0U +/** Break on write only. */ +#define X86_DR7_RW_WO 1U +/** Break on I/O read/write. This is only defined if CR4.DE is set. */ +#define X86_DR7_RW_IO 2U +/** Break on read or write (but not instruction fetches). */ +#define X86_DR7_RW_RW 3U +/** @} */ + +/** Shifts a X86_DR7_RW_* value to its right place. + * @param iBp The breakpoint number [0..3]. + * @param fRw One of the X86_DR7_RW_* value. + */ +#define X86_DR7_RW(iBp, fRw) ( (fRw) << ((iBp) * 4 + 16) ) + +/** Fetch the R/Wx bits for a given breakpoint (so it can be compared with + * one of the X86_DR7_RW_XXX constants). + * + * @returns X86_DR7_RW_XXX + * @param uDR7 DR7 value + * @param iBp The breakpoint number [0..3]. + */ +#define X86_DR7_GET_RW(uDR7, iBp) ( ( (uDR7) >> ((iBp) * 4 + 16) ) & UINT32_C(3) ) + +/** R/W0, R/W1, R/W2, and R/W3. */ +#define X86_DR7_RW_ALL_MASKS UINT32_C(0x33330000) + +#ifndef VBOX_FOR_DTRACE_LIB +/** Checks if there are any I/O breakpoint types configured in the RW + * registers. Does NOT check if these are enabled, sorry. */ +# define X86_DR7_ANY_RW_IO(uDR7) \ + ( ( UINT32_C(0x22220000) & (uDR7) ) /* any candidates? */ \ + && ( ( (UINT32_C(0x22220000) & (uDR7) ) >> 1 ) & ~(uDR7) ) ) +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x33330000)) == 0); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x22220000)) == 1); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x32320000)) == 1); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x23230000)) == 1); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00000000)) == 0); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00010000)) == 0); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00020000)) == 1); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00030000)) == 0); +AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00040000)) == 0); +#endif /* !VBOX_FOR_DTRACE_LIB */ + +/** @name Length values. + * @{ */ +#define X86_DR7_LEN_BYTE 0U +#define X86_DR7_LEN_WORD 1U +#define X86_DR7_LEN_QWORD 2U /**< AMD64 long mode only. */ +#define X86_DR7_LEN_DWORD 3U +/** @} */ + +/** Shifts a X86_DR7_LEN_* value to its right place. + * @param iBp The breakpoint number [0..3]. + * @param cb One of the X86_DR7_LEN_* values. + */ +#define X86_DR7_LEN(iBp, cb) ( (cb) << ((iBp) * 4 + 18) ) + +/** Fetch the breakpoint length bits from the DR7 value. + * @param uDR7 DR7 value + * @param iBp The breakpoint number [0..3]. + */ +#define X86_DR7_GET_LEN(uDR7, iBp) ( ( (uDR7) >> ((iBp) * 4 + 18) ) & UINT32_C(0x3) ) + +/** Mask used to check if any breakpoints are enabled. */ +#define X86_DR7_ENABLED_MASK UINT32_C(0x000000ff) + +/** LEN0, LEN1, LEN2, and LEN3. */ +#define X86_DR7_LEN_ALL_MASKS UINT32_C(0xcccc0000) +/** R/W0, R/W1, R/W2, R/W3,LEN0, LEN1, LEN2, and LEN3. */ +#define X86_DR7_RW_LEN_ALL_MASKS UINT32_C(0xffff0000) + +/** Value of DR7 after powerup/reset. */ +#define X86_DR7_INIT_VAL 0x400 +/** @} */ + + +/** @name Machine Specific Registers + * @{ + */ +/** Machine check address register (P5). */ +#define MSR_P5_MC_ADDR UINT32_C(0x00000000) +/** Machine check type register (P5). */ +#define MSR_P5_MC_TYPE UINT32_C(0x00000001) +/** Time Stamp Counter. */ +#define MSR_IA32_TSC 0x10 +#define MSR_IA32_CESR UINT32_C(0x00000011) +#define MSR_IA32_CTR0 UINT32_C(0x00000012) +#define MSR_IA32_CTR1 UINT32_C(0x00000013) + +#define MSR_IA32_PLATFORM_ID 0x17 + +#ifndef MSR_IA32_APICBASE /* qemu cpu.h kludge */ +# define MSR_IA32_APICBASE 0x1b +/** Local APIC enabled. */ +# define MSR_IA32_APICBASE_EN RT_BIT_64(11) +/** X2APIC enabled (requires the EN bit to be set). */ +# define MSR_IA32_APICBASE_EXTD RT_BIT_64(10) +/** The processor is the boot strap processor (BSP). */ +# define MSR_IA32_APICBASE_BSP RT_BIT_64(8) +/** Minimum base address mask, consult CPUID leaf 0x80000008 for the actual + * width. */ +# define MSR_IA32_APICBASE_BASE_MIN UINT64_C(0x0000000ffffff000) +/** The default physical base address of the APIC. */ +# define MSR_IA32_APICBASE_ADDR UINT64_C(0x00000000fee00000) +/** Gets the physical base address from the MSR. */ +# define MSR_IA32_APICBASE_GET_ADDR(a_Msr) ((a_Msr) & X86_PAGE_4K_BASE_MASK) +#endif + +/** Undocumented intel MSR for reporting thread and core counts. + * Judging from the XNU sources, it seems to be introduced in Nehalem. The + * first 16 bits is the thread count. The next 16 bits the core count, except + * on Westmere where it seems it's only the next 4 bits for some reason. */ +#define MSR_CORE_THREAD_COUNT 0x35 + +/** CPU Feature control. */ +#define MSR_IA32_FEATURE_CONTROL 0x3A +#define MSR_IA32_FEATURE_CONTROL_LOCK RT_BIT_32(0) +#define MSR_IA32_FEATURE_CONTROL_SMX_VMXON RT_BIT_32(1) +#define MSR_IA32_FEATURE_CONTROL_VMXON RT_BIT_32(2) + +/** Per-processor TSC adjust MSR. */ +#define MSR_IA32_TSC_ADJUST 0x3B + +/** Spectre control register. + * Logical processor scope. Reset value 0, unaffected by SIPI & INIT. */ +#define MSR_IA32_SPEC_CTRL 0x48 +/** IBRS - Indirect branch restricted speculation. */ +#define MSR_IA32_SPEC_CTRL_F_IBRS RT_BIT_32(0) +/** STIBP - Single thread indirect branch predictors. */ +#define MSR_IA32_SPEC_CTRL_F_STIBP RT_BIT_32(1) + +/** Prediction command register. + * Write only, logical processor scope, no state since write only. */ +#define MSR_IA32_PRED_CMD 0x49 +/** IBPB - Indirect branch prediction barrie when written as 1. */ +#define MSR_IA32_PRED_CMD_F_IBPB RT_BIT_32(0) + +/** BIOS update trigger (microcode update). */ +#define MSR_IA32_BIOS_UPDT_TRIG 0x79 + +/** BIOS update signature (microcode). */ +#define MSR_IA32_BIOS_SIGN_ID 0x8B + +/** SMM monitor control. */ +#define MSR_IA32_SMM_MONITOR_CTL 0x9B + +/** General performance counter no. 0. */ +#define MSR_IA32_PMC0 0xC1 +/** General performance counter no. 1. */ +#define MSR_IA32_PMC1 0xC2 +/** General performance counter no. 2. */ +#define MSR_IA32_PMC2 0xC3 +/** General performance counter no. 3. */ +#define MSR_IA32_PMC3 0xC4 + +/** Nehalem power control. */ +#define MSR_IA32_PLATFORM_INFO 0xCE + +/** Get FSB clock status (Intel-specific). */ +#define MSR_IA32_FSB_CLOCK_STS 0xCD + +/** C-State configuration control. Intel specific: Nehalem, Sandy Bridge. */ +#define MSR_PKG_CST_CONFIG_CONTROL UINT32_C(0x000000e2) + +/** C0 Maximum Frequency Clock Count */ +#define MSR_IA32_MPERF 0xE7 +/** C0 Actual Frequency Clock Count */ +#define MSR_IA32_APERF 0xE8 + +/** MTRR Capabilities. */ +#define MSR_IA32_MTRR_CAP 0xFE + +/** Architecture capabilities (bugfixes). + * @note May move */ +#define MSR_IA32_ARCH_CAP UINT32_C(0x10a) +/** CPU is no subject to spectre problems. */ +#define MSR_IA32_ARCH_CAP_F_SPECTRE_FIX RT_BIT_32(0) +/** CPU has better IBRS and you can leave it on all the time. */ +#define MSR_IA32_ARCH_CAP_F_BETTER_IBRS RT_BIT_32(1) + +/** Cache control/info. */ +#define MSR_BBL_CR_CTL3 UINT32_C(0x11e) + +#ifndef MSR_IA32_SYSENTER_CS /* qemu cpu.h kludge */ +/** SYSENTER_CS - the R0 CS, indirectly giving R0 SS, R3 CS and R3 DS. + * R0 SS == CS + 8 + * R3 CS == CS + 16 + * R3 SS == CS + 24 + */ +#define MSR_IA32_SYSENTER_CS 0x174 +/** SYSENTER_ESP - the R0 ESP. */ +#define MSR_IA32_SYSENTER_ESP 0x175 +/** SYSENTER_EIP - the R0 EIP. */ +#define MSR_IA32_SYSENTER_EIP 0x176 +#endif + +/** Machine Check Global Capabilities Register. */ +#define MSR_IA32_MCG_CAP 0x179 +/** Machine Check Global Status Register. */ +#define MSR_IA32_MCG_STATUS 0x17A +/** Machine Check Global Control Register. */ +#define MSR_IA32_MCG_CTRL 0x17B + +/** Page Attribute Table. */ +#define MSR_IA32_CR_PAT 0x277 + +/** Performance counter MSRs. (Intel only) */ +#define MSR_IA32_PERFEVTSEL0 0x186 +#define MSR_IA32_PERFEVTSEL1 0x187 +/** Flexible ratio, seems to be undocumented, used by XNU (tsc.c). + * The 16th bit whether flex ratio is being used, in which case bits 15:8 + * holds a ratio that Apple takes for TSC granularity. + * + * @note This MSR conflicts the P4 MSR_MCG_R12 register. */ +#define MSR_FLEX_RATIO 0x194 +/** Performance state value and starting with Intel core more. + * Apple uses the >=core features to determine TSC granularity on older CPUs. */ +#define MSR_IA32_PERF_STATUS 0x198 +#define MSR_IA32_PERF_CTL 0x199 +#define MSR_IA32_THERM_STATUS 0x19c + +/** Enable misc. processor features (R/W). */ +#define MSR_IA32_MISC_ENABLE 0x1A0 +/** Enable fast-strings feature (for REP MOVS and REP STORS). */ +#define MSR_IA32_MISC_ENABLE_FAST_STRINGS RT_BIT_64(0) +/** Automatic Thermal Control Circuit Enable (R/W). */ +#define MSR_IA32_MISC_ENABLE_TCC RT_BIT_64(3) +/** Performance Monitoring Available (R). */ +#define MSR_IA32_MISC_ENABLE_PERF_MON RT_BIT_64(7) +/** Branch Trace Storage Unavailable (R/O). */ +#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL RT_BIT_64(11) +/** Precise Event Based Sampling (PEBS) Unavailable (R/O). */ +#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL RT_BIT_64(12) +/** Enhanced Intel SpeedStep Technology Enable (R/W). */ +#define MSR_IA32_MISC_ENABLE_SST_ENABLE RT_BIT_64(16) +/** If MONITOR/MWAIT is supported (R/W). */ +#define MSR_IA32_MISC_ENABLE_MONITOR RT_BIT_64(18) +/** Limit CPUID Maxval to 3 leafs (R/W). */ +#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID RT_BIT_64(22) +/** When set to 1, xTPR messages are disabled (R/W). */ +#define MSR_IA32_MISC_ENABLE_XTPR_MSG_DISABLE RT_BIT_64(23) +/** When set to 1, the Execute Disable Bit feature (XD Bit) is disabled (R/W). */ +#define MSR_IA32_MISC_ENABLE_XD_DISABLE RT_BIT_64(34) + +/** Trace/Profile Resource Control (R/W) */ +#define MSR_IA32_DEBUGCTL UINT32_C(0x000001d9) +/** The number (0..3 or 0..15) of the last branch record register on P4 and + * related Xeons. */ +#define MSR_P4_LASTBRANCH_TOS UINT32_C(0x000001da) +/** @name Last branch registers for P4 and Xeon, models 0 thru 2. + * @{ */ +#define MSR_P4_LASTBRANCH_0 UINT32_C(0x000001db) +#define MSR_P4_LASTBRANCH_1 UINT32_C(0x000001dc) +#define MSR_P4_LASTBRANCH_2 UINT32_C(0x000001dd) +#define MSR_P4_LASTBRANCH_3 UINT32_C(0x000001de) +/** @} */ + + +#define IA32_MTRR_PHYSBASE0 0x200 +#define IA32_MTRR_PHYSMASK0 0x201 +#define IA32_MTRR_PHYSBASE1 0x202 +#define IA32_MTRR_PHYSMASK1 0x203 +#define IA32_MTRR_PHYSBASE2 0x204 +#define IA32_MTRR_PHYSMASK2 0x205 +#define IA32_MTRR_PHYSBASE3 0x206 +#define IA32_MTRR_PHYSMASK3 0x207 +#define IA32_MTRR_PHYSBASE4 0x208 +#define IA32_MTRR_PHYSMASK4 0x209 +#define IA32_MTRR_PHYSBASE5 0x20a +#define IA32_MTRR_PHYSMASK5 0x20b +#define IA32_MTRR_PHYSBASE6 0x20c +#define IA32_MTRR_PHYSMASK6 0x20d +#define IA32_MTRR_PHYSBASE7 0x20e +#define IA32_MTRR_PHYSMASK7 0x20f +#define IA32_MTRR_PHYSBASE8 0x210 +#define IA32_MTRR_PHYSMASK8 0x211 +#define IA32_MTRR_PHYSBASE9 0x212 +#define IA32_MTRR_PHYSMASK9 0x213 + +/** Fixed range MTRRs. + * @{ */ +#define IA32_MTRR_FIX64K_00000 0x250 +#define IA32_MTRR_FIX16K_80000 0x258 +#define IA32_MTRR_FIX16K_A0000 0x259 +#define IA32_MTRR_FIX4K_C0000 0x268 +#define IA32_MTRR_FIX4K_C8000 0x269 +#define IA32_MTRR_FIX4K_D0000 0x26a +#define IA32_MTRR_FIX4K_D8000 0x26b +#define IA32_MTRR_FIX4K_E0000 0x26c +#define IA32_MTRR_FIX4K_E8000 0x26d +#define IA32_MTRR_FIX4K_F0000 0x26e +#define IA32_MTRR_FIX4K_F8000 0x26f +/** @} */ + +/** MTRR Default Range. */ +#define MSR_IA32_MTRR_DEF_TYPE 0x2FF + +/** Global performance counter control facilities (Intel only). */ +#define MSR_IA32_PERF_GLOBAL_STATUS 0x38E +#define MSR_IA32_PERF_GLOBAL_CTRL 0x38F +#define MSR_IA32_PERF_GLOBAL_OVF_CTRL 0x390 + +/** Precise Event Based sampling (Intel only). */ +#define MSR_IA32_PEBS_ENABLE 0x3F1 + +#define MSR_IA32_MC0_CTL 0x400 +#define MSR_IA32_MC0_STATUS 0x401 + +/** Basic VMX information. */ +#define MSR_IA32_VMX_BASIC_INFO 0x480 +/** Allowed settings for pin-based VM execution controls */ +#define MSR_IA32_VMX_PINBASED_CTLS 0x481 +/** Allowed settings for proc-based VM execution controls */ +#define MSR_IA32_VMX_PROCBASED_CTLS 0x482 +/** Allowed settings for the VMX exit controls. */ +#define MSR_IA32_VMX_EXIT_CTLS 0x483 +/** Allowed settings for the VMX entry controls. */ +#define MSR_IA32_VMX_ENTRY_CTLS 0x484 +/** Misc VMX info. */ +#define MSR_IA32_VMX_MISC 0x485 +/** Fixed cleared bits in CR0. */ +#define MSR_IA32_VMX_CR0_FIXED0 0x486 +/** Fixed set bits in CR0. */ +#define MSR_IA32_VMX_CR0_FIXED1 0x487 +/** Fixed cleared bits in CR4. */ +#define MSR_IA32_VMX_CR4_FIXED0 0x488 +/** Fixed set bits in CR4. */ +#define MSR_IA32_VMX_CR4_FIXED1 0x489 +/** Information for enumerating fields in the VMCS. */ +#define MSR_IA32_VMX_VMCS_ENUM 0x48A +/** Allowed settings for the VM-functions controls. */ +#define MSR_IA32_VMX_VMFUNC 0x491 +/** Allowed settings for secondary proc-based VM execution controls */ +#define MSR_IA32_VMX_PROCBASED_CTLS2 0x48B +/** EPT capabilities. */ +#define MSR_IA32_VMX_EPT_VPID_CAP 0x48C +/** Allowed settings of all pin-based VM execution controls. */ +#define MSR_IA32_VMX_TRUE_PINBASED_CTLS 0x48D +/** Allowed settings of all proc-based VM execution controls. */ +#define MSR_IA32_VMX_TRUE_PROCBASED_CTLS 0x48E +/** Allowed settings of all VMX exit controls. */ +#define MSR_IA32_VMX_TRUE_EXIT_CTLS 0x48F +/** Allowed settings of all VMX entry controls. */ +#define MSR_IA32_VMX_TRUE_ENTRY_CTLS 0x490 + +/** DS Save Area (R/W). */ +#define MSR_IA32_DS_AREA 0x600 +/** Running Average Power Limit (RAPL) power units. */ +#define MSR_RAPL_POWER_UNIT 0x606 + +/** X2APIC MSR range start. */ +#define MSR_IA32_X2APIC_START 0x800 +/** X2APIC MSR - APIC ID Register. */ +#define MSR_IA32_X2APIC_ID 0x802 +/** X2APIC MSR - APIC Version Register. */ +#define MSR_IA32_X2APIC_VERSION 0x803 +/** X2APIC MSR - Task Priority Register. */ +#define MSR_IA32_X2APIC_TPR 0x808 +/** X2APIC MSR - Processor Priority register. */ +#define MSR_IA32_X2APIC_PPR 0x80A +/** X2APIC MSR - End Of Interrupt register. */ +#define MSR_IA32_X2APIC_EOI 0x80B +/** X2APIC MSR - Logical Destination Register. */ +#define MSR_IA32_X2APIC_LDR 0x80D +/** X2APIC MSR - Spurious Interrupt Vector Register. */ +#define MSR_IA32_X2APIC_SVR 0x80F +/** X2APIC MSR - In-service Register (bits 31:0). */ +#define MSR_IA32_X2APIC_ISR0 0x810 +/** X2APIC MSR - In-service Register (bits 63:32). */ +#define MSR_IA32_X2APIC_ISR1 0x811 +/** X2APIC MSR - In-service Register (bits 95:64). */ +#define MSR_IA32_X2APIC_ISR2 0x812 +/** X2APIC MSR - In-service Register (bits 127:96). */ +#define MSR_IA32_X2APIC_ISR3 0x813 +/** X2APIC MSR - In-service Register (bits 159:128). */ +#define MSR_IA32_X2APIC_ISR4 0x814 +/** X2APIC MSR - In-service Register (bits 191:160). */ +#define MSR_IA32_X2APIC_ISR5 0x815 +/** X2APIC MSR - In-service Register (bits 223:192). */ +#define MSR_IA32_X2APIC_ISR6 0x816 +/** X2APIC MSR - In-service Register (bits 255:224). */ +#define MSR_IA32_X2APIC_ISR7 0x817 +/** X2APIC MSR - Trigger Mode Register (bits 31:0). */ +#define MSR_IA32_X2APIC_TMR0 0x818 +/** X2APIC MSR - Trigger Mode Register (bits 63:32). */ +#define MSR_IA32_X2APIC_TMR1 0x819 +/** X2APIC MSR - Trigger Mode Register (bits 95:64). */ +#define MSR_IA32_X2APIC_TMR2 0x81A +/** X2APIC MSR - Trigger Mode Register (bits 127:96). */ +#define MSR_IA32_X2APIC_TMR3 0x81B +/** X2APIC MSR - Trigger Mode Register (bits 159:128). */ +#define MSR_IA32_X2APIC_TMR4 0x81C +/** X2APIC MSR - Trigger Mode Register (bits 191:160). */ +#define MSR_IA32_X2APIC_TMR5 0x81D +/** X2APIC MSR - Trigger Mode Register (bits 223:192). */ +#define MSR_IA32_X2APIC_TMR6 0x81E +/** X2APIC MSR - Trigger Mode Register (bits 255:224). */ +#define MSR_IA32_X2APIC_TMR7 0x81F +/** X2APIC MSR - Interrupt Request Register (bits 31:0). */ +#define MSR_IA32_X2APIC_IRR0 0x820 +/** X2APIC MSR - Interrupt Request Register (bits 63:32). */ +#define MSR_IA32_X2APIC_IRR1 0x821 +/** X2APIC MSR - Interrupt Request Register (bits 95:64). */ +#define MSR_IA32_X2APIC_IRR2 0x822 +/** X2APIC MSR - Interrupt Request Register (bits 127:96). */ +#define MSR_IA32_X2APIC_IRR3 0x823 +/** X2APIC MSR - Interrupt Request Register (bits 159:128). */ +#define MSR_IA32_X2APIC_IRR4 0x824 +/** X2APIC MSR - Interrupt Request Register (bits 191:160). */ +#define MSR_IA32_X2APIC_IRR5 0x825 +/** X2APIC MSR - Interrupt Request Register (bits 223:192). */ +#define MSR_IA32_X2APIC_IRR6 0x826 +/** X2APIC MSR - Interrupt Request Register (bits 255:224). */ +#define MSR_IA32_X2APIC_IRR7 0x827 +/** X2APIC MSR - Error Status Register. */ +#define MSR_IA32_X2APIC_ESR 0x828 +/** X2APIC MSR - LVT CMCI Register. */ +#define MSR_IA32_X2APIC_LVT_CMCI 0x82F +/** X2APIC MSR - Interrupt Command Register. */ +#define MSR_IA32_X2APIC_ICR 0x830 +/** X2APIC MSR - LVT Timer Register. */ +#define MSR_IA32_X2APIC_LVT_TIMER 0x832 +/** X2APIC MSR - LVT Thermal Sensor Register. */ +#define MSR_IA32_X2APIC_LVT_THERMAL 0x833 +/** X2APIC MSR - LVT Performance Counter Register. */ +#define MSR_IA32_X2APIC_LVT_PERF 0x834 +/** X2APIC MSR - LVT LINT0 Register. */ +#define MSR_IA32_X2APIC_LVT_LINT0 0x835 +/** X2APIC MSR - LVT LINT1 Register. */ +#define MSR_IA32_X2APIC_LVT_LINT1 0x836 +/** X2APIC MSR - LVT Error Register . */ +#define MSR_IA32_X2APIC_LVT_ERROR 0x837 +/** X2APIC MSR - Timer Initial Count Register. */ +#define MSR_IA32_X2APIC_TIMER_ICR 0x838 +/** X2APIC MSR - Timer Current Count Register. */ +#define MSR_IA32_X2APIC_TIMER_CCR 0x839 +/** X2APIC MSR - Timer Divide Configuration Register. */ +#define MSR_IA32_X2APIC_TIMER_DCR 0x83E +/** X2APIC MSR - Self IPI. */ +#define MSR_IA32_X2APIC_SELF_IPI 0x83F +/** X2APIC MSR range end. */ +#define MSR_IA32_X2APIC_END 0xBFF +/** X2APIC MSR - LVT start range. */ +#define MSR_IA32_X2APIC_LVT_START MSR_IA32_X2APIC_LVT_TIMER +/** X2APIC MSR - LVT end range (inclusive). */ +#define MSR_IA32_X2APIC_LVT_END MSR_IA32_X2APIC_LVT_ERROR + +/** K6 EFER - Extended Feature Enable Register. */ +#define MSR_K6_EFER UINT32_C(0xc0000080) +/** @todo document EFER */ +/** Bit 0 - SCE - System call extensions (SYSCALL / SYSRET). (R/W) */ +#define MSR_K6_EFER_SCE RT_BIT_32(0) +/** Bit 8 - LME - Long mode enabled. (R/W) */ +#define MSR_K6_EFER_LME RT_BIT_32(8) +/** Bit 10 - LMA - Long mode active. (R) */ +#define MSR_K6_EFER_LMA RT_BIT_32(10) +/** Bit 11 - NXE - No-Execute Page Protection Enabled. (R/W) */ +#define MSR_K6_EFER_NXE RT_BIT_32(11) +#define MSR_K6_EFER_BIT_NXE 11 /**< Bit number of MSR_K6_EFER_NXE */ +/** Bit 12 - SVME - Secure VM Extension Enabled. (R/W) */ +#define MSR_K6_EFER_SVME RT_BIT_32(12) +/** Bit 13 - LMSLE - Long Mode Segment Limit Enable. (R/W?) */ +#define MSR_K6_EFER_LMSLE RT_BIT_32(13) +/** Bit 14 - FFXSR - Fast FXSAVE / FXRSTOR (skip XMM*). (R/W) */ +#define MSR_K6_EFER_FFXSR RT_BIT_32(14) +/** Bit 15 - TCE - Translation Cache Extension. (R/W) */ +#define MSR_K6_EFER_TCE RT_BIT_32(15) +/** K6 STAR - SYSCALL/RET targets. */ +#define MSR_K6_STAR UINT32_C(0xc0000081) +/** Shift value for getting the SYSRET CS and SS value. */ +#define MSR_K6_STAR_SYSRET_CS_SS_SHIFT 48 +/** Shift value for getting the SYSCALL CS and SS value. */ +#define MSR_K6_STAR_SYSCALL_CS_SS_SHIFT 32 +/** Selector mask for use after shifting. */ +#define MSR_K6_STAR_SEL_MASK UINT32_C(0xffff) +/** The mask which give the SYSCALL EIP. */ +#define MSR_K6_STAR_SYSCALL_EIP_MASK UINT32_C(0xffffffff) +/** K6 WHCR - Write Handling Control Register. */ +#define MSR_K6_WHCR UINT32_C(0xc0000082) +/** K6 UWCCR - UC/WC Cacheability Control Register. */ +#define MSR_K6_UWCCR UINT32_C(0xc0000085) +/** K6 PSOR - Processor State Observability Register. */ +#define MSR_K6_PSOR UINT32_C(0xc0000087) +/** K6 PFIR - Page Flush/Invalidate Register. */ +#define MSR_K6_PFIR UINT32_C(0xc0000088) + +/** Performance counter MSRs. (AMD only) */ +#define MSR_K7_EVNTSEL0 UINT32_C(0xc0010000) +#define MSR_K7_EVNTSEL1 UINT32_C(0xc0010001) +#define MSR_K7_EVNTSEL2 UINT32_C(0xc0010002) +#define MSR_K7_EVNTSEL3 UINT32_C(0xc0010003) +#define MSR_K7_PERFCTR0 UINT32_C(0xc0010004) +#define MSR_K7_PERFCTR1 UINT32_C(0xc0010005) +#define MSR_K7_PERFCTR2 UINT32_C(0xc0010006) +#define MSR_K7_PERFCTR3 UINT32_C(0xc0010007) + +/** K8 LSTAR - Long mode SYSCALL target (RIP). */ +#define MSR_K8_LSTAR UINT32_C(0xc0000082) +/** K8 CSTAR - Compatibility mode SYSCALL target (RIP). */ +#define MSR_K8_CSTAR UINT32_C(0xc0000083) +/** K8 SF_MASK - SYSCALL flag mask. (aka SFMASK) */ +#define MSR_K8_SF_MASK UINT32_C(0xc0000084) +/** K8 FS.base - The 64-bit base FS register. */ +#define MSR_K8_FS_BASE UINT32_C(0xc0000100) +/** K8 GS.base - The 64-bit base GS register. */ +#define MSR_K8_GS_BASE UINT32_C(0xc0000101) +/** K8 KernelGSbase - Used with SWAPGS. */ +#define MSR_K8_KERNEL_GS_BASE UINT32_C(0xc0000102) +/** K8 TSC_AUX - Used with RDTSCP. */ +#define MSR_K8_TSC_AUX UINT32_C(0xc0000103) +#define MSR_K8_SYSCFG UINT32_C(0xc0010010) +#define MSR_K8_HWCR UINT32_C(0xc0010015) +#define MSR_K8_IORRBASE0 UINT32_C(0xc0010016) +#define MSR_K8_IORRMASK0 UINT32_C(0xc0010017) +#define MSR_K8_IORRBASE1 UINT32_C(0xc0010018) +#define MSR_K8_IORRMASK1 UINT32_C(0xc0010019) +#define MSR_K8_TOP_MEM1 UINT32_C(0xc001001a) +#define MSR_K8_TOP_MEM2 UINT32_C(0xc001001d) +/** North bridge config? See BIOS & Kernel dev guides for + * details. */ +#define MSR_K8_NB_CFG UINT32_C(0xc001001f) + +/** Hypertransport interrupt pending register. + * "BIOS and Kernel Developer's Guide for AMD NPT Family 0Fh Processors" */ +#define MSR_K8_INT_PENDING UINT32_C(0xc0010055) + +/** SVM Control. */ +#define MSR_K8_VM_CR UINT32_C(0xc0010114) +/** Disables HDT (Hardware Debug Tool) and certain internal debug + * features. */ +#define MSR_K8_VM_CR_DPD RT_BIT_32(0) +/** If set, non-intercepted INIT signals are converted to \#SX + * exceptions. */ +#define MSR_K8_VM_CR_R_INIT RT_BIT_32(1) +/** Disables A20 masking. */ +#define MSR_K8_VM_CR_DIS_A20M RT_BIT_32(2) +/** Lock bit for this MSR controlling bits 3 (LOCK) and 4 (SVMDIS). */ +#define MSR_K8_VM_CR_LOCK RT_BIT_32(3) +/** SVM disable. When set, writes to EFER.SVME are treated as MBZ. When + * clear, EFER.SVME can be written normally. */ +#define MSR_K8_VM_CR_SVM_DISABLE RT_BIT_32(4) + +#define MSR_K8_IGNNE UINT32_C(0xc0010115) +#define MSR_K8_SMM_CTL UINT32_C(0xc0010116) +/** SVM - VM_HSAVE_PA - Physical address for saving and restoring + * host state during world switch. */ +#define MSR_K8_VM_HSAVE_PA UINT32_C(0xc0010117) + +/** @} */ + + +/** @name Page Table / Directory / Directory Pointers / L4. + * @{ + */ + +/** Page table/directory entry as an unsigned integer. */ +typedef uint32_t X86PGUINT; +/** Pointer to a page table/directory table entry as an unsigned integer. */ +typedef X86PGUINT *PX86PGUINT; +/** Pointer to an const page table/directory table entry as an unsigned integer. */ +typedef X86PGUINT const *PCX86PGUINT; + +/** Number of entries in a 32-bit PT/PD. */ +#define X86_PG_ENTRIES 1024 + + +/** PAE page table/page directory/pdpt/l4/l5 entry as an unsigned integer. */ +typedef uint64_t X86PGPAEUINT; +/** Pointer to a PAE page table/page directory/pdpt/l4/l5 entry as an unsigned integer. */ +typedef X86PGPAEUINT *PX86PGPAEUINT; +/** Pointer to an const PAE page table/page directory/pdpt/l4/l5 entry as an unsigned integer. */ +typedef X86PGPAEUINT const *PCX86PGPAEUINT; + +/** Number of entries in a PAE PT/PD. */ +#define X86_PG_PAE_ENTRIES 512 +/** Number of entries in a PAE PDPT. */ +#define X86_PG_PAE_PDPE_ENTRIES 4 + +/** Number of entries in an AMD64 PT/PD/PDPT/L4/L5. */ +#define X86_PG_AMD64_ENTRIES X86_PG_PAE_ENTRIES +/** Number of entries in an AMD64 PDPT. + * Just for complementing X86_PG_PAE_PDPE_ENTRIES, using X86_PG_AMD64_ENTRIES for this is fine too. */ +#define X86_PG_AMD64_PDPE_ENTRIES X86_PG_AMD64_ENTRIES + +/** The size of a default page. */ +#define X86_PAGE_SIZE X86_PAGE_4K_SIZE +/** The page shift of a default page. */ +#define X86_PAGE_SHIFT X86_PAGE_4K_SHIFT +/** The default page offset mask. */ +#define X86_PAGE_OFFSET_MASK X86_PAGE_4K_OFFSET_MASK +/** The default page base mask for virtual addresses. */ +#define X86_PAGE_BASE_MASK X86_PAGE_4K_BASE_MASK +/** The default page base mask for virtual addresses - 32bit version. */ +#define X86_PAGE_BASE_MASK_32 X86_PAGE_4K_BASE_MASK_32 + +/** The size of a 4KB page. */ +#define X86_PAGE_4K_SIZE _4K +/** The page shift of a 4KB page. */ +#define X86_PAGE_4K_SHIFT 12 +/** The 4KB page offset mask. */ +#define X86_PAGE_4K_OFFSET_MASK 0xfff +/** The 4KB page base mask for virtual addresses. */ +#define X86_PAGE_4K_BASE_MASK 0xfffffffffffff000ULL +/** The 4KB page base mask for virtual addresses - 32bit version. */ +#define X86_PAGE_4K_BASE_MASK_32 0xfffff000U + +/** The size of a 2MB page. */ +#define X86_PAGE_2M_SIZE _2M +/** The page shift of a 2MB page. */ +#define X86_PAGE_2M_SHIFT 21 +/** The 2MB page offset mask. */ +#define X86_PAGE_2M_OFFSET_MASK 0x001fffff +/** The 2MB page base mask for virtual addresses. */ +#define X86_PAGE_2M_BASE_MASK 0xffffffffffe00000ULL +/** The 2MB page base mask for virtual addresses - 32bit version. */ +#define X86_PAGE_2M_BASE_MASK_32 0xffe00000U + +/** The size of a 4MB page. */ +#define X86_PAGE_4M_SIZE _4M +/** The page shift of a 4MB page. */ +#define X86_PAGE_4M_SHIFT 22 +/** The 4MB page offset mask. */ +#define X86_PAGE_4M_OFFSET_MASK 0x003fffff +/** The 4MB page base mask for virtual addresses. */ +#define X86_PAGE_4M_BASE_MASK 0xffffffffffc00000ULL +/** The 4MB page base mask for virtual addresses - 32bit version. */ +#define X86_PAGE_4M_BASE_MASK_32 0xffc00000U + +/** + * Check if the given address is canonical. + */ +#define X86_IS_CANONICAL(a_u64Addr) ((uint64_t)(a_u64Addr) + UINT64_C(0x800000000000) < UINT64_C(0x1000000000000)) + + +/** @name Page Table Entry + * @{ + */ +/** Bit 0 - P - Present bit. */ +#define X86_PTE_BIT_P 0 +/** Bit 1 - R/W - Read (clear) / Write (set) bit. */ +#define X86_PTE_BIT_RW 1 +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit. */ +#define X86_PTE_BIT_US 2 +/** Bit 3 - PWT - Page level write thru bit. */ +#define X86_PTE_BIT_PWT 3 +/** Bit 4 - PCD - Page level cache disable bit. */ +#define X86_PTE_BIT_PCD 4 +/** Bit 5 - A - Access bit. */ +#define X86_PTE_BIT_A 5 +/** Bit 6 - D - Dirty bit. */ +#define X86_PTE_BIT_D 6 +/** Bit 7 - PAT - Page Attribute Table index bit. Reserved and 0 if not supported. */ +#define X86_PTE_BIT_PAT 7 +/** Bit 8 - G - Global flag. */ +#define X86_PTE_BIT_G 8 +/** Bits 63 - NX - PAE/LM - No execution flag. */ +#define X86_PTE_PAE_BIT_NX 63 + +/** Bit 0 - P - Present bit mask. */ +#define X86_PTE_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) / Write (set) bit mask. */ +#define X86_PTE_RW RT_BIT_32(1) +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit mask. */ +#define X86_PTE_US RT_BIT_32(2) +/** Bit 3 - PWT - Page level write thru bit mask. */ +#define X86_PTE_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page level cache disable bit mask. */ +#define X86_PTE_PCD RT_BIT_32(4) +/** Bit 5 - A - Access bit mask. */ +#define X86_PTE_A RT_BIT_32(5) +/** Bit 6 - D - Dirty bit mask. */ +#define X86_PTE_D RT_BIT_32(6) +/** Bit 7 - PAT - Page Attribute Table index bit mask. Reserved and 0 if not supported. */ +#define X86_PTE_PAT RT_BIT_32(7) +/** Bit 8 - G - Global bit mask. */ +#define X86_PTE_G RT_BIT_32(8) + +/** Bits 9-11 - - Available for use to system software. */ +#define X86_PTE_AVL_MASK (RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bits 12-31 - - Physical Page number of the next level. */ +#define X86_PTE_PG_MASK ( 0xfffff000 ) + +/** Bits 12-51 - - PAE - Physical Page number of the next level. */ +#define X86_PTE_PAE_PG_MASK UINT64_C(0x000ffffffffff000) +/** Bits 63 - NX - PAE/LM - No execution flag. */ +#define X86_PTE_PAE_NX RT_BIT_64(63) +/** Bits 62-52 - - PAE - MBZ bits when NX is active. */ +#define X86_PTE_PAE_MBZ_MASK_NX UINT64_C(0x7ff0000000000000) +/** Bits 63-52 - - PAE - MBZ bits when no NX. */ +#define X86_PTE_PAE_MBZ_MASK_NO_NX UINT64_C(0xfff0000000000000) +/** No bits - - LM - MBZ bits when NX is active. */ +#define X86_PTE_LM_MBZ_MASK_NX UINT64_C(0x0000000000000000) +/** Bits 63 - - LM - MBZ bits when no NX. */ +#define X86_PTE_LM_MBZ_MASK_NO_NX UINT64_C(0x8000000000000000) + +/** + * Page table entry. + */ +typedef struct X86PTEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Dirty flag. + * Indicates that the page has been written to. */ + uint32_t u1Dirty : 1; + /** Reserved / If PAT enabled, bit 2 of the index. */ + uint32_t u1PAT : 1; + /** Global flag. (Ignored in all but final level.) */ + uint32_t u1Global : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level. */ + uint32_t u20PageNo : 20; +} X86PTEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PTEBITS, 4); +#endif +/** Pointer to a page table entry. */ +typedef X86PTEBITS *PX86PTEBITS; +/** Pointer to a const page table entry. */ +typedef const X86PTEBITS *PCX86PTEBITS; + +/** + * Page table entry. + */ +typedef union X86PTE +{ + /** Unsigned integer view */ + X86PGUINT u; + /** Bit field view. */ + X86PTEBITS n; + /** 32-bit view. */ + uint32_t au32[1]; + /** 16-bit view. */ + uint16_t au16[2]; + /** 8-bit view. */ + uint8_t au8[4]; +} X86PTE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PTE, 4); +#endif +/** Pointer to a page table entry. */ +typedef X86PTE *PX86PTE; +/** Pointer to a const page table entry. */ +typedef const X86PTE *PCX86PTE; + + +/** + * PAE page table entry. + */ +typedef struct X86PTEPAEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor(=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Dirty flag. + * Indicates that the page has been written to. */ + uint32_t u1Dirty : 1; + /** Reserved / If PAT enabled, bit 2 of the index. */ + uint32_t u1PAT : 1; + /** Global flag. (Ignored in all but final level.) */ + uint32_t u1Global : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level - Low Part. Don't use this. */ + uint32_t u20PageNoLow : 20; + /** Physical Page number of the next level - High Part. Don't use this. */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u11Reserved : 11; + /** No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PTEPAEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PTEPAEBITS, 8); +#endif +/** Pointer to a page table entry. */ +typedef X86PTEPAEBITS *PX86PTEPAEBITS; +/** Pointer to a page table entry. */ +typedef const X86PTEPAEBITS *PCX86PTEPAEBITS; + +/** + * PAE Page table entry. + */ +typedef union X86PTEPAE +{ + /** Unsigned integer view */ + X86PGPAEUINT u; + /** Bit field view. */ + X86PTEPAEBITS n; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[4]; + /** 8-bit view. */ + uint8_t au8[8]; +} X86PTEPAE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PTEPAE, 8); +#endif +/** Pointer to a PAE page table entry. */ +typedef X86PTEPAE *PX86PTEPAE; +/** Pointer to a const PAE page table entry. */ +typedef const X86PTEPAE *PCX86PTEPAE; +/** @} */ + +/** + * Page table. + */ +typedef struct X86PT +{ + /** PTE Array. */ + X86PTE a[X86_PG_ENTRIES]; +} X86PT; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PT, 4096); +#endif +/** Pointer to a page table. */ +typedef X86PT *PX86PT; +/** Pointer to a const page table. */ +typedef const X86PT *PCX86PT; + +/** The page shift to get the PT index. */ +#define X86_PT_SHIFT 12 +/** The PT index mask (apply to a shifted page address). */ +#define X86_PT_MASK 0x3ff + + +/** + * Page directory. + */ +typedef struct X86PTPAE +{ + /** PTE Array. */ + X86PTEPAE a[X86_PG_PAE_ENTRIES]; +} X86PTPAE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PTPAE, 4096); +#endif +/** Pointer to a page table. */ +typedef X86PTPAE *PX86PTPAE; +/** Pointer to a const page table. */ +typedef const X86PTPAE *PCX86PTPAE; + +/** The page shift to get the PA PTE index. */ +#define X86_PT_PAE_SHIFT 12 +/** The PAE PT index mask (apply to a shifted page address). */ +#define X86_PT_PAE_MASK 0x1ff + + +/** @name 4KB Page Directory Entry + * @{ + */ +/** Bit 0 - P - Present bit. */ +#define X86_PDE_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) / Write (set) bit. */ +#define X86_PDE_RW RT_BIT_32(1) +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit. */ +#define X86_PDE_US RT_BIT_32(2) +/** Bit 3 - PWT - Page level write thru bit. */ +#define X86_PDE_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page level cache disable bit. */ +#define X86_PDE_PCD RT_BIT_32(4) +/** Bit 5 - A - Access bit. */ +#define X86_PDE_A RT_BIT_32(5) +/** Bit 7 - PS - Page size attribute. + * Clear mean 4KB pages, set means large pages (2/4MB). */ +#define X86_PDE_PS RT_BIT_32(7) +/** Bits 9-11 - - Available for use to system software. */ +#define X86_PDE_AVL_MASK (RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bits 12-31 - - Physical Page number of the next level. */ +#define X86_PDE_PG_MASK ( 0xfffff000 ) + +/** Bits 12-51 - - PAE - Physical Page number of the next level. */ +#define X86_PDE_PAE_PG_MASK UINT64_C(0x000ffffffffff000) +/** Bits 63 - NX - PAE/LM - No execution flag. */ +#define X86_PDE_PAE_NX RT_BIT_64(63) +/** Bits 62-52, 7 - - PAE - MBZ bits when NX is active. */ +#define X86_PDE_PAE_MBZ_MASK_NX UINT64_C(0x7ff0000000000080) +/** Bits 63-52, 7 - - PAE - MBZ bits when no NX. */ +#define X86_PDE_PAE_MBZ_MASK_NO_NX UINT64_C(0xfff0000000000080) +/** Bit 7 - - LM - MBZ bits when NX is active. */ +#define X86_PDE_LM_MBZ_MASK_NX UINT64_C(0x0000000000000080) +/** Bits 63, 7 - - LM - MBZ bits when no NX. */ +#define X86_PDE_LM_MBZ_MASK_NO_NX UINT64_C(0x8000000000000080) + +/** + * Page directory entry. + */ +typedef struct X86PDEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page has been read or written to. */ + uint32_t u1Accessed : 1; + /** Reserved / Ignored (dirty bit). */ + uint32_t u1Reserved0 : 1; + /** Size bit if PSE is enabled - in any event it's 0. */ + uint32_t u1Size : 1; + /** Reserved / Ignored (global bit). */ + uint32_t u1Reserved1 : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level. */ + uint32_t u20PageNo : 20; +} X86PDEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDEBITS, 4); +#endif +/** Pointer to a page directory entry. */ +typedef X86PDEBITS *PX86PDEBITS; +/** Pointer to a const page directory entry. */ +typedef const X86PDEBITS *PCX86PDEBITS; + + +/** + * PAE page directory entry. + */ +typedef struct X86PDEPAEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page has been read or written to. */ + uint32_t u1Accessed : 1; + /** Reserved / Ignored (dirty bit). */ + uint32_t u1Reserved0 : 1; + /** Size bit if PSE is enabled - in any event it's 0. */ + uint32_t u1Size : 1; + /** Reserved / Ignored (global bit). / */ + uint32_t u1Reserved1 : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level - Low Part. Don't use! */ + uint32_t u20PageNoLow : 20; + /** Physical Page number of the next level - High Part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u11Reserved : 11; + /** No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PDEPAEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDEPAEBITS, 8); +#endif +/** Pointer to a page directory entry. */ +typedef X86PDEPAEBITS *PX86PDEPAEBITS; +/** Pointer to a const page directory entry. */ +typedef const X86PDEPAEBITS *PCX86PDEPAEBITS; + +/** @} */ + + +/** @name 2/4MB Page Directory Entry + * @{ + */ +/** Bit 0 - P - Present bit. */ +#define X86_PDE4M_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) / Write (set) bit. */ +#define X86_PDE4M_RW RT_BIT_32(1) +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit. */ +#define X86_PDE4M_US RT_BIT_32(2) +/** Bit 3 - PWT - Page level write thru bit. */ +#define X86_PDE4M_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page level cache disable bit. */ +#define X86_PDE4M_PCD RT_BIT_32(4) +/** Bit 5 - A - Access bit. */ +#define X86_PDE4M_A RT_BIT_32(5) +/** Bit 6 - D - Dirty bit. */ +#define X86_PDE4M_D RT_BIT_32(6) +/** Bit 7 - PS - Page size attribute. Clear mean 4KB pages, set means large pages (2/4MB). */ +#define X86_PDE4M_PS RT_BIT_32(7) +/** Bit 8 - G - Global flag. */ +#define X86_PDE4M_G RT_BIT_32(8) +/** Bits 9-11 - AVL - Available for use to system software. */ +#define X86_PDE4M_AVL (RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bit 12 - PAT - Page Attribute Table index bit. Reserved and 0 if not supported. */ +#define X86_PDE4M_PAT RT_BIT_32(12) +/** Shift to get from X86_PTE_PAT to X86_PDE4M_PAT. */ +#define X86_PDE4M_PAT_SHIFT (12 - 7) +/** Bits 22-31 - - Physical Page number. */ +#define X86_PDE4M_PG_MASK ( 0xffc00000 ) +/** Bits 20-13 - - Physical Page number high part (32-39 bits). AMD64 hack. */ +#define X86_PDE4M_PG_HIGH_MASK ( 0x001fe000 ) +/** The number of bits to the high part of the page number. */ +#define X86_PDE4M_PG_HIGH_SHIFT 19 +/** Bit 21 - - MBZ bits for AMD CPUs, no PSE36. */ +#define X86_PDE4M_MBZ_MASK RT_BIT_32(21) + +/** Bits 21-51 - - PAE/LM - Physical Page number. + * (Bits 40-51 (long mode) & bits 36-51 (pae legacy) are reserved according to the Intel docs; AMD allows for more.) */ +#define X86_PDE2M_PAE_PG_MASK UINT64_C(0x000fffffffe00000) +/** Bits 63 - NX - PAE/LM - No execution flag. */ +#define X86_PDE2M_PAE_NX RT_BIT_64(63) +/** Bits 62-52, 20-13 - - PAE - MBZ bits when NX is active. */ +#define X86_PDE2M_PAE_MBZ_MASK_NX UINT64_C(0x7ff00000001fe000) +/** Bits 63-52, 20-13 - - PAE - MBZ bits when no NX. */ +#define X86_PDE2M_PAE_MBZ_MASK_NO_NX UINT64_C(0xfff00000001fe000) +/** Bits 20-13 - - LM - MBZ bits when NX is active. */ +#define X86_PDE2M_LM_MBZ_MASK_NX UINT64_C(0x00000000001fe000) +/** Bits 63, 20-13 - - LM - MBZ bits when no NX. */ +#define X86_PDE2M_LM_MBZ_MASK_NO_NX UINT64_C(0x80000000001fe000) + +/** + * 4MB page directory entry. + */ +typedef struct X86PDE4MBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Dirty flag. + * Indicates that the page has been written to. */ + uint32_t u1Dirty : 1; + /** Page size flag - always 1 for 4MB entries. */ + uint32_t u1Size : 1; + /** Global flag. */ + uint32_t u1Global : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Reserved / If PAT enabled, bit 2 of the index. */ + uint32_t u1PAT : 1; + /** Bits 32-39 of the page number on AMD64. + * This AMD64 hack allows accessing 40bits of physical memory without PAE. */ + uint32_t u8PageNoHigh : 8; + /** Reserved. */ + uint32_t u1Reserved : 1; + /** Physical Page number of the page. */ + uint32_t u10PageNo : 10; +} X86PDE4MBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDE4MBITS, 4); +#endif +/** Pointer to a page table entry. */ +typedef X86PDE4MBITS *PX86PDE4MBITS; +/** Pointer to a const page table entry. */ +typedef const X86PDE4MBITS *PCX86PDE4MBITS; + + +/** + * 2MB PAE page directory entry. + */ +typedef struct X86PDE2MPAEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor(=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Dirty flag. + * Indicates that the page has been written to. */ + uint32_t u1Dirty : 1; + /** Page size flag - always 1 for 2MB entries. */ + uint32_t u1Size : 1; + /** Global flag. */ + uint32_t u1Global : 1; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Reserved / If PAT enabled, bit 2 of the index. */ + uint32_t u1PAT : 1; + /** Reserved. */ + uint32_t u9Reserved : 9; + /** Physical Page number of the next level - Low part. Don't use! */ + uint32_t u10PageNoLow : 10; + /** Physical Page number of the next level - High part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u11Reserved : 11; + /** No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PDE2MPAEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDE2MPAEBITS, 8); +#endif +/** Pointer to a 2MB PAE page table entry. */ +typedef X86PDE2MPAEBITS *PX86PDE2MPAEBITS; +/** Pointer to a 2MB PAE page table entry. */ +typedef const X86PDE2MPAEBITS *PCX86PDE2MPAEBITS; + +/** @} */ + +/** + * Page directory entry. + */ +typedef union X86PDE +{ + /** Unsigned integer view. */ + X86PGUINT u; + /** Normal view. */ + X86PDEBITS n; + /** 4MB view (big). */ + X86PDE4MBITS b; + /** 8 bit unsigned integer view. */ + uint8_t au8[4]; + /** 16 bit unsigned integer view. */ + uint16_t au16[2]; + /** 32 bit unsigned integer view. */ + uint32_t au32[1]; +} X86PDE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDE, 4); +#endif +/** Pointer to a page directory entry. */ +typedef X86PDE *PX86PDE; +/** Pointer to a const page directory entry. */ +typedef const X86PDE *PCX86PDE; + +/** + * PAE page directory entry. + */ +typedef union X86PDEPAE +{ + /** Unsigned integer view. */ + X86PGPAEUINT u; + /** Normal view. */ + X86PDEPAEBITS n; + /** 2MB page view (big). */ + X86PDE2MPAEBITS b; + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; +} X86PDEPAE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDEPAE, 8); +#endif +/** Pointer to a page directory entry. */ +typedef X86PDEPAE *PX86PDEPAE; +/** Pointer to a const page directory entry. */ +typedef const X86PDEPAE *PCX86PDEPAE; + +/** + * Page directory. + */ +typedef struct X86PD +{ + /** PDE Array. */ + X86PDE a[X86_PG_ENTRIES]; +} X86PD; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PD, 4096); +#endif +/** Pointer to a page directory. */ +typedef X86PD *PX86PD; +/** Pointer to a const page directory. */ +typedef const X86PD *PCX86PD; + +/** The page shift to get the PD index. */ +#define X86_PD_SHIFT 22 +/** The PD index mask (apply to a shifted page address). */ +#define X86_PD_MASK 0x3ff + + +/** + * PAE page directory. + */ +typedef struct X86PDPAE +{ + /** PDE Array. */ + X86PDEPAE a[X86_PG_PAE_ENTRIES]; +} X86PDPAE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPAE, 4096); +#endif +/** Pointer to a PAE page directory. */ +typedef X86PDPAE *PX86PDPAE; +/** Pointer to a const PAE page directory. */ +typedef const X86PDPAE *PCX86PDPAE; + +/** The page shift to get the PAE PD index. */ +#define X86_PD_PAE_SHIFT 21 +/** The PAE PD index mask (apply to a shifted page address). */ +#define X86_PD_PAE_MASK 0x1ff + + +/** @name Page Directory Pointer Table Entry (PAE) + * @{ + */ +/** Bit 0 - P - Present bit. */ +#define X86_PDPE_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) / Write (set) bit. Long Mode only. */ +#define X86_PDPE_RW RT_BIT_32(1) +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit. Long Mode only. */ +#define X86_PDPE_US RT_BIT_32(2) +/** Bit 3 - PWT - Page level write thru bit. */ +#define X86_PDPE_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page level cache disable bit. */ +#define X86_PDPE_PCD RT_BIT_32(4) +/** Bit 5 - A - Access bit. Long Mode only. */ +#define X86_PDPE_A RT_BIT_32(5) +/** Bit 7 - PS - Page size (1GB). Long Mode only. */ +#define X86_PDPE_LM_PS RT_BIT_32(7) +/** Bits 9-11 - - Available for use to system software. */ +#define X86_PDPE_AVL_MASK (RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bits 12-51 - - PAE - Physical Page number of the next level. */ +#define X86_PDPE_PG_MASK UINT64_C(0x000ffffffffff000) +/** Bits 63-52, 8-5, 2-1 - - PAE - MBZ bits (NX is long mode only). */ +#define X86_PDPE_PAE_MBZ_MASK UINT64_C(0xfff00000000001e6) +/** Bits 63 - NX - LM - No execution flag. Long Mode only. */ +#define X86_PDPE_LM_NX RT_BIT_64(63) +/** Bits 8, 7 - - LM - MBZ bits when NX is active. */ +#define X86_PDPE_LM_MBZ_MASK_NX UINT64_C(0x0000000000000180) +/** Bits 63, 8, 7 - - LM - MBZ bits when no NX. */ +#define X86_PDPE_LM_MBZ_MASK_NO_NX UINT64_C(0x8000000000000180) +/** Bits 29-13 - - LM - MBZ bits for 1GB page entry when NX is active. */ +#define X86_PDPE1G_LM_MBZ_MASK_NX UINT64_C(0x000000003fffe000) +/** Bits 63, 29-13 - - LM - MBZ bits for 1GB page entry when no NX. */ +#define X86_PDPE1G_LM_MBZ_MASK_NO_NX UINT64_C(0x800000003fffe000) + + +/** + * Page directory pointer table entry. + */ +typedef struct X86PDPEBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Chunk of reserved bits. */ + uint32_t u2Reserved : 2; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Chunk of reserved bits. */ + uint32_t u4Reserved : 4; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level - Low Part. Don't use! */ + uint32_t u20PageNoLow : 20; + /** Physical Page number of the next level - High Part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u12Reserved : 12; +} X86PDPEBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPEBITS, 8); +#endif +/** Pointer to a page directory pointer table entry. */ +typedef X86PDPEBITS *PX86PTPEBITS; +/** Pointer to a const page directory pointer table entry. */ +typedef const X86PDPEBITS *PCX86PTPEBITS; + +/** + * Page directory pointer table entry. AMD64 version + */ +typedef struct X86PDPEAMD64BITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Chunk of reserved bits. */ + uint32_t u3Reserved : 3; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level - Low Part. Don't use! */ + uint32_t u20PageNoLow : 20; + /** Physical Page number of the next level - High Part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u11Reserved : 11; + /** No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PDPEAMD64BITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPEAMD64BITS, 8); +#endif +/** Pointer to a page directory pointer table entry. */ +typedef X86PDPEAMD64BITS *PX86PDPEAMD64BITS; +/** Pointer to a const page directory pointer table entry. */ +typedef const X86PDPEAMD64BITS *PCX86PDPEAMD64BITS; + +/** + * Page directory pointer table entry for 1GB page. (AMD64 only) + */ +typedef struct X86PDPE1GB +{ + /** 0: Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** 1: Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** 2: User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** 3: Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** 4: Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** 5: Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** 6: Dirty flag for 1GB pages. */ + uint32_t u1Dirty : 1; + /** 7: Indicates 1GB page if set. */ + uint32_t u1Size : 1; + /** 8: Global 1GB page. */ + uint32_t u1Global: 1; + /** 9-11: Available for use to system software. */ + uint32_t u3Available : 3; + /** 12: PAT bit for 1GB page. */ + uint32_t u1PAT : 1; + /** 13-29: MBZ bits. */ + uint32_t u17Reserved : 17; + /** 30-31: Physical page number - Low Part. Don't use! */ + uint32_t u2PageNoLow : 2; + /** 32-51: Physical Page number of the next level - High Part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** 52-62: MBZ bits */ + uint32_t u11Reserved : 11; + /** 63: No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PDPE1GB; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPE1GB, 8); +#endif +/** Pointer to a page directory pointer table entry for a 1GB page. */ +typedef X86PDPE1GB *PX86PDPE1GB; +/** Pointer to a const page directory pointer table entry for a 1GB page. */ +typedef const X86PDPE1GB *PCX86PDPE1GB; + +/** + * Page directory pointer table entry. + */ +typedef union X86PDPE +{ + /** Unsigned integer view. */ + X86PGPAEUINT u; + /** Normal view. */ + X86PDPEBITS n; + /** AMD64 view. */ + X86PDPEAMD64BITS lm; + /** AMD64 big view. */ + X86PDPE1GB b; + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; +} X86PDPE; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPE, 8); +#endif +/** Pointer to a page directory pointer table entry. */ +typedef X86PDPE *PX86PDPE; +/** Pointer to a const page directory pointer table entry. */ +typedef const X86PDPE *PCX86PDPE; + + +/** + * Page directory pointer table. + */ +typedef struct X86PDPT +{ + /** PDE Array. */ + X86PDPE a[X86_PG_AMD64_PDPE_ENTRIES]; +} X86PDPT; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PDPT, 4096); +#endif +/** Pointer to a page directory pointer table. */ +typedef X86PDPT *PX86PDPT; +/** Pointer to a const page directory pointer table. */ +typedef const X86PDPT *PCX86PDPT; + +/** The page shift to get the PDPT index. */ +#define X86_PDPT_SHIFT 30 +/** The PDPT index mask (apply to a shifted page address). (32 bits PAE) */ +#define X86_PDPT_MASK_PAE 0x3 +/** The PDPT index mask (apply to a shifted page address). (64 bits PAE)*/ +#define X86_PDPT_MASK_AMD64 0x1ff + +/** @} */ + + +/** @name Page Map Level-4 Entry (Long Mode PAE) + * @{ + */ +/** Bit 0 - P - Present bit. */ +#define X86_PML4E_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) / Write (set) bit. */ +#define X86_PML4E_RW RT_BIT_32(1) +/** Bit 2 - U/S - User (set) / Supervisor (clear) bit. */ +#define X86_PML4E_US RT_BIT_32(2) +/** Bit 3 - PWT - Page level write thru bit. */ +#define X86_PML4E_PWT RT_BIT_32(3) +/** Bit 4 - PCD - Page level cache disable bit. */ +#define X86_PML4E_PCD RT_BIT_32(4) +/** Bit 5 - A - Access bit. */ +#define X86_PML4E_A RT_BIT_32(5) +/** Bits 9-11 - - Available for use to system software. */ +#define X86_PML4E_AVL_MASK (RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bits 12-51 - - PAE - Physical Page number of the next level. */ +#define X86_PML4E_PG_MASK UINT64_C(0x000ffffffffff000) +/** Bits 8, 7 - - MBZ bits when NX is active. */ +#define X86_PML4E_MBZ_MASK_NX UINT64_C(0x0000000000000080) +/** Bits 63, 7 - - MBZ bits when no NX. */ +#define X86_PML4E_MBZ_MASK_NO_NX UINT64_C(0x8000000000000080) +/** Bits 63 - NX - PAE - No execution flag. */ +#define X86_PML4E_NX RT_BIT_64(63) + +/** + * Page Map Level-4 Entry + */ +typedef struct X86PML4EBITS +{ + /** Flags whether(=1) or not the page is present. */ + uint32_t u1Present : 1; + /** Read(=0) / Write(=1) flag. */ + uint32_t u1Write : 1; + /** User(=1) / Supervisor (=0) flag. */ + uint32_t u1User : 1; + /** Write Thru flag. If PAT enabled, bit 0 of the index. */ + uint32_t u1WriteThru : 1; + /** Cache disabled flag. If PAT enabled, bit 1 of the index. */ + uint32_t u1CacheDisable : 1; + /** Accessed flag. + * Indicates that the page have been read or written to. */ + uint32_t u1Accessed : 1; + /** Chunk of reserved bits. */ + uint32_t u3Reserved : 3; + /** Available for use to system software. */ + uint32_t u3Available : 3; + /** Physical Page number of the next level - Low Part. Don't use! */ + uint32_t u20PageNoLow : 20; + /** Physical Page number of the next level - High Part. Don't use! */ + uint32_t u20PageNoHigh : 20; + /** MBZ bits */ + uint32_t u11Reserved : 11; + /** No Execute flag. */ + uint32_t u1NoExecute : 1; +} X86PML4EBITS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PML4EBITS, 8); +#endif +/** Pointer to a page map level-4 entry. */ +typedef X86PML4EBITS *PX86PML4EBITS; +/** Pointer to a const page map level-4 entry. */ +typedef const X86PML4EBITS *PCX86PML4EBITS; + +/** + * Page Map Level-4 Entry. + */ +typedef union X86PML4E +{ + /** Unsigned integer view. */ + X86PGPAEUINT u; + /** Normal view. */ + X86PML4EBITS n; + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; +} X86PML4E; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PML4E, 8); +#endif +/** Pointer to a page map level-4 entry. */ +typedef X86PML4E *PX86PML4E; +/** Pointer to a const page map level-4 entry. */ +typedef const X86PML4E *PCX86PML4E; + + +/** + * Page Map Level-4. + */ +typedef struct X86PML4 +{ + /** PDE Array. */ + X86PML4E a[X86_PG_PAE_ENTRIES]; +} X86PML4; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86PML4, 4096); +#endif +/** Pointer to a page map level-4. */ +typedef X86PML4 *PX86PML4; +/** Pointer to a const page map level-4. */ +typedef const X86PML4 *PCX86PML4; + +/** The page shift to get the PML4 index. */ +#define X86_PML4_SHIFT 39 +/** The PML4 index mask (apply to a shifted page address). */ +#define X86_PML4_MASK 0x1ff + +/** @} */ + +/** @} */ + +/** + * 32-bit protected mode FSTENV image. + */ +typedef struct X86FSTENV32P +{ + uint16_t FCW; + uint16_t padding1; + uint16_t FSW; + uint16_t padding2; + uint16_t FTW; + uint16_t padding3; + uint32_t FPUIP; + uint16_t FPUCS; + uint16_t FOP; + uint32_t FPUDP; + uint16_t FPUDS; + uint16_t padding4; +} X86FSTENV32P; +/** Pointer to a 32-bit protected mode FSTENV image. */ +typedef X86FSTENV32P *PX86FSTENV32P; +/** Pointer to a const 32-bit protected mode FSTENV image. */ +typedef X86FSTENV32P const *PCX86FSTENV32P; + + +/** + * 80-bit MMX/FPU register type. + */ +typedef struct X86FPUMMX +{ + uint8_t reg[10]; +} X86FPUMMX; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86FPUMMX, 10); +#endif +/** Pointer to a 80-bit MMX/FPU register type. */ +typedef X86FPUMMX *PX86FPUMMX; +/** Pointer to a const 80-bit MMX/FPU register type. */ +typedef const X86FPUMMX *PCX86FPUMMX; + +/** FPU (x87) register. */ +typedef union X86FPUREG +{ + /** MMX view. */ + uint64_t mmx; + /** FPU view - todo. */ + X86FPUMMX fpu; + /** Extended precision floating point view. */ + RTFLOAT80U r80; + /** Extended precision floating point view v2 */ + RTFLOAT80U2 r80Ex; + /** 8-bit view. */ + uint8_t au8[16]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 64-bit view. */ + uint64_t au64[2]; + /** 128-bit view. (yeah, very helpful) */ + uint128_t au128[1]; +} X86FPUREG; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86FPUREG, 16); +#endif +/** Pointer to a FPU register. */ +typedef X86FPUREG *PX86FPUREG; +/** Pointer to a const FPU register. */ +typedef X86FPUREG const *PCX86FPUREG; + +/** + * XMM register union. + */ +typedef union X86XMMREG +{ + /** XMM Register view. */ + uint128_t xmm; + /** 8-bit view. */ + uint8_t au8[16]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 64-bit view. */ + uint64_t au64[2]; + /** 128-bit view. (yeah, very helpful) */ + uint128_t au128[1]; + /** Confusing nested 128-bit union view (this is what xmm should've been). */ + RTUINT128U uXmm; +} X86XMMREG; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XMMREG, 16); +#endif +/** Pointer to an XMM register state. */ +typedef X86XMMREG *PX86XMMREG; +/** Pointer to a const XMM register state. */ +typedef X86XMMREG const *PCX86XMMREG; + +/** + * YMM register union. + */ +typedef union X86YMMREG +{ + /** 8-bit view. */ + uint8_t au8[32]; + /** 16-bit view. */ + uint16_t au16[16]; + /** 32-bit view. */ + uint32_t au32[8]; + /** 64-bit view. */ + uint64_t au64[4]; + /** 128-bit view. (yeah, very helpful) */ + uint128_t au128[2]; + /** XMM sub register view. */ + X86XMMREG aXmm[2]; +} X86YMMREG; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86YMMREG, 32); +#endif +/** Pointer to an YMM register state. */ +typedef X86YMMREG *PX86YMMREG; +/** Pointer to a const YMM register state. */ +typedef X86YMMREG const *PCX86YMMREG; + +/** + * ZMM register union. + */ +typedef union X86ZMMREG +{ + /** 8-bit view. */ + uint8_t au8[64]; + /** 16-bit view. */ + uint16_t au16[32]; + /** 32-bit view. */ + uint32_t au32[16]; + /** 64-bit view. */ + uint64_t au64[8]; + /** 128-bit view. (yeah, very helpful) */ + uint128_t au128[4]; + /** XMM sub register view. */ + X86XMMREG aXmm[4]; + /** YMM sub register view. */ + X86YMMREG aYmm[2]; +} X86ZMMREG; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86ZMMREG, 64); +#endif +/** Pointer to an ZMM register state. */ +typedef X86ZMMREG *PX86ZMMREG; +/** Pointer to a const ZMM register state. */ +typedef X86ZMMREG const *PCX86ZMMREG; + + +/** + * 32-bit FPU state (aka FSAVE/FRSTOR Memory Region). + * @todo verify this... + */ +#pragma pack(1) +typedef struct X86FPUSTATE +{ + /** 0x00 - Control word. */ + uint16_t FCW; + /** 0x02 - Alignment word */ + uint16_t Dummy1; + /** 0x04 - Status word. */ + uint16_t FSW; + /** 0x06 - Alignment word */ + uint16_t Dummy2; + /** 0x08 - Tag word */ + uint16_t FTW; + /** 0x0a - Alignment word */ + uint16_t Dummy3; + + /** 0x0c - Instruction pointer. */ + uint32_t FPUIP; + /** 0x10 - Code selector. */ + uint16_t CS; + /** 0x12 - Opcode. */ + uint16_t FOP; + /** 0x14 - FOO. */ + uint32_t FPUOO; + /** 0x18 - FOS. */ + uint32_t FPUOS; + /** 0x1c - FPU register. */ + X86FPUREG regs[8]; +} X86FPUSTATE; +#pragma pack() +/** Pointer to a FPU state. */ +typedef X86FPUSTATE *PX86FPUSTATE; +/** Pointer to a const FPU state. */ +typedef const X86FPUSTATE *PCX86FPUSTATE; + +/** + * FPU Extended state (aka FXSAVE/FXRSTORE Memory Region). + */ +#pragma pack(1) +typedef struct X86FXSTATE +{ + /** 0x00 - Control word. */ + uint16_t FCW; + /** 0x02 - Status word. */ + uint16_t FSW; + /** 0x04 - Tag word. (The upper byte is always zero.) */ + uint16_t FTW; + /** 0x06 - Opcode. */ + uint16_t FOP; + /** 0x08 - Instruction pointer. */ + uint32_t FPUIP; + /** 0x0c - Code selector. */ + uint16_t CS; + uint16_t Rsrvd1; + /** 0x10 - Data pointer. */ + uint32_t FPUDP; + /** 0x14 - Data segment */ + uint16_t DS; + /** 0x16 */ + uint16_t Rsrvd2; + /** 0x18 */ + uint32_t MXCSR; + /** 0x1c */ + uint32_t MXCSR_MASK; + /** 0x20 - FPU registers. */ + X86FPUREG aRegs[8]; + /** 0xA0 - XMM registers - 8 registers in 32 bits mode, 16 in long mode. */ + X86XMMREG aXMM[16]; + /* - offset 416 - */ + uint32_t au32RsrvdRest[(464 - 416) / sizeof(uint32_t)]; + /* - offset 464 - Software usable reserved bits. */ + uint32_t au32RsrvdForSoftware[(512 - 464) / sizeof(uint32_t)]; +} X86FXSTATE; +#pragma pack() +/** Pointer to a FPU Extended state. */ +typedef X86FXSTATE *PX86FXSTATE; +/** Pointer to a const FPU Extended state. */ +typedef const X86FXSTATE *PCX86FXSTATE; + +/** Offset for software usable reserved bits (464:511) where we store a 32-bit + * magic. Don't forget to update x86.mac if you change this! */ +#define X86_OFF_FXSTATE_RSVD 0x1d0 +/** The 32-bit magic used to recognize if this a 32-bit FPU state. Don't + * forget to update x86.mac if you change this! + * @todo r=bird: This has nothing what-so-ever to do here.... */ +#define X86_FXSTATE_RSVD_32BIT_MAGIC 0x32b3232b +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86FXSTATE, 512); +AssertCompileMemberOffset(X86FXSTATE, au32RsrvdForSoftware, X86_OFF_FXSTATE_RSVD); +#endif + +/** @name FPU status word flags. + * @{ */ +/** Exception Flag: Invalid operation. */ +#define X86_FSW_IE RT_BIT_32(0) +/** Exception Flag: Denormalized operand. */ +#define X86_FSW_DE RT_BIT_32(1) +/** Exception Flag: Zero divide. */ +#define X86_FSW_ZE RT_BIT_32(2) +/** Exception Flag: Overflow. */ +#define X86_FSW_OE RT_BIT_32(3) +/** Exception Flag: Underflow. */ +#define X86_FSW_UE RT_BIT_32(4) +/** Exception Flag: Precision. */ +#define X86_FSW_PE RT_BIT_32(5) +/** Stack fault. */ +#define X86_FSW_SF RT_BIT_32(6) +/** Error summary status. */ +#define X86_FSW_ES RT_BIT_32(7) +/** Mask of exceptions flags, excluding the summary bit. */ +#define X86_FSW_XCPT_MASK UINT16_C(0x007f) +/** Mask of exceptions flags, including the summary bit. */ +#define X86_FSW_XCPT_ES_MASK UINT16_C(0x00ff) +/** Condition code 0. */ +#define X86_FSW_C0 RT_BIT_32(8) +/** Condition code 1. */ +#define X86_FSW_C1 RT_BIT_32(9) +/** Condition code 2. */ +#define X86_FSW_C2 RT_BIT_32(10) +/** Top of the stack mask. */ +#define X86_FSW_TOP_MASK UINT16_C(0x3800) +/** TOP shift value. */ +#define X86_FSW_TOP_SHIFT 11 +/** Mask for getting TOP value after shifting it right. */ +#define X86_FSW_TOP_SMASK UINT16_C(0x0007) +/** Get the TOP value. */ +#define X86_FSW_TOP_GET(a_uFsw) (((a_uFsw) >> X86_FSW_TOP_SHIFT) & X86_FSW_TOP_SMASK) +/** Condition code 3. */ +#define X86_FSW_C3 RT_BIT_32(14) +/** Mask of exceptions flags, including the summary bit. */ +#define X86_FSW_C_MASK UINT16_C(0x4700) +/** FPU busy. */ +#define X86_FSW_B RT_BIT_32(15) +/** @} */ + + +/** @name FPU control word flags. + * @{ */ +/** Exception Mask: Invalid operation. */ +#define X86_FCW_IM RT_BIT_32(0) +/** Exception Mask: Denormalized operand. */ +#define X86_FCW_DM RT_BIT_32(1) +/** Exception Mask: Zero divide. */ +#define X86_FCW_ZM RT_BIT_32(2) +/** Exception Mask: Overflow. */ +#define X86_FCW_OM RT_BIT_32(3) +/** Exception Mask: Underflow. */ +#define X86_FCW_UM RT_BIT_32(4) +/** Exception Mask: Precision. */ +#define X86_FCW_PM RT_BIT_32(5) +/** Mask all exceptions, the value typically loaded (by for instance fninit). + * @remarks This includes reserved bit 6. */ +#define X86_FCW_MASK_ALL UINT16_C(0x007f) +/** Mask all exceptions. Same as X86_FSW_XCPT_MASK. */ +#define X86_FCW_XCPT_MASK UINT16_C(0x003f) +/** Precision control mask. */ +#define X86_FCW_PC_MASK UINT16_C(0x0300) +/** Precision control: 24-bit. */ +#define X86_FCW_PC_24 UINT16_C(0x0000) +/** Precision control: Reserved. */ +#define X86_FCW_PC_RSVD UINT16_C(0x0100) +/** Precision control: 53-bit. */ +#define X86_FCW_PC_53 UINT16_C(0x0200) +/** Precision control: 64-bit. */ +#define X86_FCW_PC_64 UINT16_C(0x0300) +/** Rounding control mask. */ +#define X86_FCW_RC_MASK UINT16_C(0x0c00) +/** Rounding control: To nearest. */ +#define X86_FCW_RC_NEAREST UINT16_C(0x0000) +/** Rounding control: Down. */ +#define X86_FCW_RC_DOWN UINT16_C(0x0400) +/** Rounding control: Up. */ +#define X86_FCW_RC_UP UINT16_C(0x0800) +/** Rounding control: Towards zero. */ +#define X86_FCW_RC_ZERO UINT16_C(0x0c00) +/** Bits which should be zero, apparently. */ +#define X86_FCW_ZERO_MASK UINT16_C(0xf080) +/** @} */ + +/** @name SSE MXCSR + * @{ */ +/** Exception Flag: Invalid operation. */ +#define X86_MXCSR_IE RT_BIT_32(0) +/** Exception Flag: Denormalized operand. */ +#define X86_MXCSR_DE RT_BIT_32(1) +/** Exception Flag: Zero divide. */ +#define X86_MXCSR_ZE RT_BIT_32(2) +/** Exception Flag: Overflow. */ +#define X86_MXCSR_OE RT_BIT_32(3) +/** Exception Flag: Underflow. */ +#define X86_MXCSR_UE RT_BIT_32(4) +/** Exception Flag: Precision. */ +#define X86_MXCSR_PE RT_BIT_32(5) + +/** Denormals are zero. */ +#define X86_MXCSR_DAZ RT_BIT_32(6) + +/** Exception Mask: Invalid operation. */ +#define X86_MXCSR_IM RT_BIT_32(7) +/** Exception Mask: Denormalized operand. */ +#define X86_MXCSR_DM RT_BIT_32(8) +/** Exception Mask: Zero divide. */ +#define X86_MXCSR_ZM RT_BIT_32(9) +/** Exception Mask: Overflow. */ +#define X86_MXCSR_OM RT_BIT_32(10) +/** Exception Mask: Underflow. */ +#define X86_MXCSR_UM RT_BIT_32(11) +/** Exception Mask: Precision. */ +#define X86_MXCSR_PM RT_BIT_32(12) + +/** Rounding control mask. */ +#define X86_MXCSR_RC_MASK UINT16_C(0x6000) +/** Rounding control: To nearest. */ +#define X86_MXCSR_RC_NEAREST UINT16_C(0x0000) +/** Rounding control: Down. */ +#define X86_MXCSR_RC_DOWN UINT16_C(0x2000) +/** Rounding control: Up. */ +#define X86_MXCSR_RC_UP UINT16_C(0x4000) +/** Rounding control: Towards zero. */ +#define X86_MXCSR_RC_ZERO UINT16_C(0x6000) + +/** Flush-to-zero for masked underflow. */ +#define X86_MXCSR_FZ RT_BIT_32(15) + +/** Misaligned Exception Mask (AMD MISALIGNSSE). */ +#define X86_MXCSR_MM RT_BIT_32(17) +/** @} */ + +/** + * XSAVE header. + */ +typedef struct X86XSAVEHDR +{ + /** XTATE_BV - Bitmap indicating whether a component is in the state. */ + uint64_t bmXState; + /** XCOMP_BC - Bitmap used by instructions applying structure compaction. */ + uint64_t bmXComp; + /** Reserved for furture extensions, probably MBZ. */ + uint64_t au64Reserved[6]; +} X86XSAVEHDR; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEHDR, 64); +#endif +/** Pointer to an XSAVE header. */ +typedef X86XSAVEHDR *PX86XSAVEHDR; +/** Pointer to a const XSAVE header. */ +typedef X86XSAVEHDR const *PCX86XSAVEHDR; + + +/** + * The high 128-bit YMM register state (XSAVE_C_YMM). + * (The lower 128-bits being in X86FXSTATE.) + */ +typedef struct X86XSAVEYMMHI +{ + /** 16 registers in 64-bit mode, 8 in 32-bit mode. */ + X86XMMREG aYmmHi[16]; +} X86XSAVEYMMHI; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEYMMHI, 256); +#endif +/** Pointer to a high 128-bit YMM register state. */ +typedef X86XSAVEYMMHI *PX86XSAVEYMMHI; +/** Pointer to a const high 128-bit YMM register state. */ +typedef X86XSAVEYMMHI const *PCX86XSAVEYMMHI; + +/** + * Intel MPX bound registers state (XSAVE_C_BNDREGS). + */ +typedef struct X86XSAVEBNDREGS +{ + /** Array of registers (BND0...BND3). */ + struct + { + /** Lower bound. */ + uint64_t uLowerBound; + /** Upper bound. */ + uint64_t uUpperBound; + } aRegs[4]; +} X86XSAVEBNDREGS; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEBNDREGS, 64); +#endif +/** Pointer to a MPX bound register state. */ +typedef X86XSAVEBNDREGS *PX86XSAVEBNDREGS; +/** Pointer to a const MPX bound register state. */ +typedef X86XSAVEBNDREGS const *PCX86XSAVEBNDREGS; + +/** + * Intel MPX bound config and status register state (XSAVE_C_BNDCSR). + */ +typedef struct X86XSAVEBNDCFG +{ + uint64_t fConfig; + uint64_t fStatus; +} X86XSAVEBNDCFG; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEBNDCFG, 16); +#endif +/** Pointer to a MPX bound config and status register state. */ +typedef X86XSAVEBNDCFG *PX86XSAVEBNDCFG; +/** Pointer to a const MPX bound config and status register state. */ +typedef X86XSAVEBNDCFG *PCX86XSAVEBNDCFG; + +/** + * AVX-512 opmask state (XSAVE_C_OPMASK). + */ +typedef struct X86XSAVEOPMASK +{ + /** The K0..K7 values. */ + uint64_t aKRegs[8]; +} X86XSAVEOPMASK; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEOPMASK, 64); +#endif +/** Pointer to a AVX-512 opmask state. */ +typedef X86XSAVEOPMASK *PX86XSAVEOPMASK; +/** Pointer to a const AVX-512 opmask state. */ +typedef X86XSAVEOPMASK const *PCX86XSAVEOPMASK; + +/** + * ZMM0-15 upper 256 bits introduced in AVX-512 (XSAVE_C_ZMM_HI256). + */ +typedef struct X86XSAVEZMMHI256 +{ + /** Upper 256-bits of ZMM0-15. */ + X86YMMREG aHi256Regs[16]; +} X86XSAVEZMMHI256; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEZMMHI256, 512); +#endif +/** Pointer to a state comprising the upper 256-bits of ZMM0-15. */ +typedef X86XSAVEZMMHI256 *PX86XSAVEZMMHI256; +/** Pointer to a const state comprising the upper 256-bits of ZMM0-15. */ +typedef X86XSAVEZMMHI256 const *PCX86XSAVEZMMHI256; + +/** + * ZMM16-31 register state introduced in AVX-512 (XSAVE_C_ZMM_16HI). + */ +typedef struct X86XSAVEZMM16HI +{ + /** ZMM16 thru ZMM31. */ + X86ZMMREG aRegs[16]; +} X86XSAVEZMM16HI; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEZMM16HI, 1024); +#endif +/** Pointer to a state comprising ZMM16-32. */ +typedef X86XSAVEZMM16HI *PX86XSAVEZMM16HI; +/** Pointer to a const state comprising ZMM16-32. */ +typedef X86XSAVEZMM16HI const *PCX86XSAVEZMM16HI; + +/** + * AMD Light weight profiling state (XSAVE_C_LWP). + * + * We probably won't play with this as AMD seems to be dropping from their "zen" + * processor micro architecture. + */ +typedef struct X86XSAVELWP +{ + /** Details when needed. */ + uint64_t auLater[128/8]; +} X86XSAVELWP; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVELWP, 128); +#endif + + +/** + * x86 FPU/SSE/AVX/XXXX state. + * + * Please bump DBGFCORE_FMT_VERSION by 1 in dbgfcorefmt.h if you make any + * changes to this structure. + */ +typedef struct X86XSAVEAREA +{ + /** The x87 and SSE region (or legacy region if you like). */ + X86FXSTATE x87; + /** The XSAVE header. */ + X86XSAVEHDR Hdr; + /** Beyond the header, there isn't really a fixed layout, but we can + generally assume the YMM (AVX) register extensions are present and + follows immediately. */ + union + { + /** The high 128-bit AVX registers for easy access by IEM. + * @note This ASSUMES they will always be here... */ + X86XSAVEYMMHI YmmHi; + + /** This is a typical layout on intel CPUs (good for debuggers). */ + struct + { + X86XSAVEYMMHI YmmHi; + X86XSAVEBNDREGS BndRegs; + X86XSAVEBNDCFG BndCfg; + uint8_t abFudgeToMatchDocs[0xB0]; + X86XSAVEOPMASK Opmask; + X86XSAVEZMMHI256 ZmmHi256; + X86XSAVEZMM16HI Zmm16Hi; + } Intel; + + /** This is a typical layout on AMD Bulldozer type CPUs (good for debuggers). */ + struct + { + X86XSAVEYMMHI YmmHi; + X86XSAVELWP Lwp; + } AmdBd; + + /** To enbling static deployments that have a reasonable chance of working for + * the next 3-6 CPU generations without running short on space, we allocate a + * lot of extra space here, making the structure a round 8KB in size. This + * leaves us 7616 bytes for extended state. The skylake xeons are likely to use + * 2112 of these, leaving us with 5504 bytes for future Intel generations. */ + uint8_t ab[8192 - 512 - 64]; + } u; +} X86XSAVEAREA; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86XSAVEAREA, 8192); +AssertCompileMemberSize(X86XSAVEAREA, u.Intel, 0x840 /*2112 => total 0xa80 (2688) */); +AssertCompileMemberOffset(X86XSAVEAREA, Hdr, 0x200); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.YmmHi, 0x240); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.BndRegs, 0x340); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.BndCfg, 0x380); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.Opmask, 0x440 /* 1088 */); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.ZmmHi256, 0x480 /* 1152 */); +AssertCompileMemberOffset(X86XSAVEAREA, u.Intel.Zmm16Hi, 0x680 /* 1664 */); +#endif +/** Pointer to a XSAVE area. */ +typedef X86XSAVEAREA *PX86XSAVEAREA; +/** Pointer to a const XSAVE area. */ +typedef X86XSAVEAREA const *PCX86XSAVEAREA; + + +/** @name XSAVE_C_XXX - XSAVE State Components Bits (XCR0). + * @{ */ +/** Bit 0 - x87 - Legacy FPU state (bit number) */ +#define XSAVE_C_X87_BIT 0 +/** Bit 0 - x87 - Legacy FPU state. */ +#define XSAVE_C_X87 RT_BIT_64(XSAVE_C_X87_BIT) +/** Bit 1 - SSE - 128-bit SSE state (bit number). */ +#define XSAVE_C_SSE_BIT 1 +/** Bit 1 - SSE - 128-bit SSE state. */ +#define XSAVE_C_SSE RT_BIT_64(XSAVE_C_SSE_BIT) +/** Bit 2 - YMM_Hi128 - Upper 128 bits of YMM0-15 (AVX) (bit number). */ +#define XSAVE_C_YMM_BIT 2 +/** Bit 2 - YMM_Hi128 - Upper 128 bits of YMM0-15 (AVX). */ +#define XSAVE_C_YMM RT_BIT_64(XSAVE_C_YMM_BIT) +/** Bit 3 - BNDREGS - MPX bound register state (bit number). */ +#define XSAVE_C_BNDREGS_BIT 3 +/** Bit 3 - BNDREGS - MPX bound register state. */ +#define XSAVE_C_BNDREGS RT_BIT_64(XSAVE_C_BNDREGS_BIT) +/** Bit 4 - BNDCSR - MPX bound config and status state (bit number). */ +#define XSAVE_C_BNDCSR_BIT 4 +/** Bit 4 - BNDCSR - MPX bound config and status state. */ +#define XSAVE_C_BNDCSR RT_BIT_64(XSAVE_C_BNDCSR_BIT) +/** Bit 5 - Opmask - opmask state (bit number). */ +#define XSAVE_C_OPMASK_BIT 5 +/** Bit 5 - Opmask - opmask state. */ +#define XSAVE_C_OPMASK RT_BIT_64(XSAVE_C_OPMASK_BIT) +/** Bit 6 - ZMM_Hi256 - Upper 256 bits of ZMM0-15 (AVX-512) (bit number). */ +#define XSAVE_C_ZMM_HI256_BIT 6 +/** Bit 6 - ZMM_Hi256 - Upper 256 bits of ZMM0-15 (AVX-512). */ +#define XSAVE_C_ZMM_HI256 RT_BIT_64(XSAVE_C_ZMM_HI256_BIT) +/** Bit 7 - Hi16_ZMM - 512-bits ZMM16-31 state (AVX-512) (bit number). */ +#define XSAVE_C_ZMM_16HI_BIT 7 +/** Bit 7 - Hi16_ZMM - 512-bits ZMM16-31 state (AVX-512). */ +#define XSAVE_C_ZMM_16HI RT_BIT_64(XSAVE_C_ZMM_16HI_BIT) +/** Bit 9 - PKRU - Protection-key state (bit number). */ +#define XSAVE_C_PKRU_BIT 9 +/** Bit 9 - PKRU - Protection-key state. */ +#define XSAVE_C_PKRU RT_BIT_64(XSAVE_C_PKRU_BIT) +/** Bit 62 - LWP - Lightweight Profiling (AMD) (bit number). */ +#define XSAVE_C_LWP_BIT 62 +/** Bit 62 - LWP - Lightweight Profiling (AMD). */ +#define XSAVE_C_LWP RT_BIT_64(XSAVE_C_LWP_BIT) +/** Bit 63 - X - Reserved (MBZ) for extending XCR0 (bit number). */ +#define XSAVE_C_X_BIT 63 +/** Bit 63 - X - Reserved (MBZ) for extending XCR0 (AMD). */ +#define XSAVE_C_X RT_BIT_64(XSAVE_C_X_BIT) +/** @} */ + + + +/** @name Selector Descriptor + * @{ + */ + +#ifndef VBOX_FOR_DTRACE_LIB +/** + * Descriptor attributes (as seen by VT-x). + */ +typedef struct X86DESCATTRBITS +{ + /** 00 - Segment Type. */ + unsigned u4Type : 4; + /** 04 - Descriptor Type. System(=0) or code/data selector */ + unsigned u1DescType : 1; + /** 05 - Descriptor Privilege level. */ + unsigned u2Dpl : 2; + /** 07 - Flags selector present(=1) or not. */ + unsigned u1Present : 1; + /** 08 - Segment limit 16-19. */ + unsigned u4LimitHigh : 4; + /** 0c - Available for system software. */ + unsigned u1Available : 1; + /** 0d - 32 bits mode: Reserved - 0, long mode: Long Attribute Bit. */ + unsigned u1Long : 1; + /** 0e - This flags meaning depends on the segment type. Try make sense out + * of the intel manual yourself. */ + unsigned u1DefBig : 1; + /** 0f - Granularity of the limit. If set 4KB granularity is used, if + * clear byte. */ + unsigned u1Granularity : 1; + /** 10 - "Unusable" selector, special Intel (VT-x only?) bit. */ + unsigned u1Unusable : 1; +} X86DESCATTRBITS; +#endif /* !VBOX_FOR_DTRACE_LIB */ + +/** @name X86DESCATTR masks + * @{ */ +#define X86DESCATTR_TYPE UINT32_C(0x0000000f) +#define X86DESCATTR_DT UINT32_C(0x00000010) +#define X86DESCATTR_DPL UINT32_C(0x00000060) +#define X86DESCATTR_DPL_SHIFT 5 /**< Shift count for the DPL value. */ +#define X86DESCATTR_P UINT32_C(0x00000080) +#define X86DESCATTR_LIMIT_HIGH UINT32_C(0x00000f00) +#define X86DESCATTR_AVL UINT32_C(0x00001000) +#define X86DESCATTR_L UINT32_C(0x00002000) +#define X86DESCATTR_D UINT32_C(0x00004000) +#define X86DESCATTR_G UINT32_C(0x00008000) +#define X86DESCATTR_UNUSABLE UINT32_C(0x00010000) +/** @} */ + +#pragma pack(1) +typedef union X86DESCATTR +{ + /** Unsigned integer view. */ + uint32_t u; +#ifndef VBOX_FOR_DTRACE_LIB + /** Normal view. */ + X86DESCATTRBITS n; +#endif +} X86DESCATTR; +#pragma pack() +/** Pointer to descriptor attributes. */ +typedef X86DESCATTR *PX86DESCATTR; +/** Pointer to const descriptor attributes. */ +typedef const X86DESCATTR *PCX86DESCATTR; + +#ifndef VBOX_FOR_DTRACE_LIB + +/** + * Generic descriptor table entry + */ +#pragma pack(1) +typedef struct X86DESCGENERIC +{ + /** 00 - Limit - Low word. */ + unsigned u16LimitLow : 16; + /** 10 - Base address - low word. + * Don't try set this to 24 because MSC is doing stupid things then. */ + unsigned u16BaseLow : 16; + /** 20 - Base address - first 8 bits of high word. */ + unsigned u8BaseHigh1 : 8; + /** 28 - Segment Type. */ + unsigned u4Type : 4; + /** 2c - Descriptor Type. System(=0) or code/data selector */ + unsigned u1DescType : 1; + /** 2d - Descriptor Privilege level. */ + unsigned u2Dpl : 2; + /** 2f - Flags selector present(=1) or not. */ + unsigned u1Present : 1; + /** 30 - Segment limit 16-19. */ + unsigned u4LimitHigh : 4; + /** 34 - Available for system software. */ + unsigned u1Available : 1; + /** 35 - 32 bits mode: Reserved - 0, long mode: Long Attribute Bit. */ + unsigned u1Long : 1; + /** 36 - This flags meaning depends on the segment type. Try make sense out + * of the intel manual yourself. */ + unsigned u1DefBig : 1; + /** 37 - Granularity of the limit. If set 4KB granularity is used, if + * clear byte. */ + unsigned u1Granularity : 1; + /** 38 - Base address - highest 8 bits. */ + unsigned u8BaseHigh2 : 8; +} X86DESCGENERIC; +#pragma pack() +/** Pointer to a generic descriptor entry. */ +typedef X86DESCGENERIC *PX86DESCGENERIC; +/** Pointer to a const generic descriptor entry. */ +typedef const X86DESCGENERIC *PCX86DESCGENERIC; + +/** @name Bit offsets of X86DESCGENERIC members. + * @{*/ +#define X86DESCGENERIC_BIT_OFF_LIMIT_LOW (0) /**< Bit offset of X86DESCGENERIC::u16LimitLow. */ +#define X86DESCGENERIC_BIT_OFF_BASE_LOW (16) /**< Bit offset of X86DESCGENERIC::u16BaseLow. */ +#define X86DESCGENERIC_BIT_OFF_BASE_HIGH1 (32) /**< Bit offset of X86DESCGENERIC::u8BaseHigh1. */ +#define X86DESCGENERIC_BIT_OFF_TYPE (40) /**< Bit offset of X86DESCGENERIC::u4Type. */ +#define X86DESCGENERIC_BIT_OFF_DESC_TYPE (44) /**< Bit offset of X86DESCGENERIC::u1DescType. */ +#define X86DESCGENERIC_BIT_OFF_DPL (45) /**< Bit offset of X86DESCGENERIC::u2Dpl. */ +#define X86DESCGENERIC_BIT_OFF_PRESENT (47) /**< Bit offset of X86DESCGENERIC::uu1Present. */ +#define X86DESCGENERIC_BIT_OFF_LIMIT_HIGH (48) /**< Bit offset of X86DESCGENERIC::u4LimitHigh. */ +#define X86DESCGENERIC_BIT_OFF_AVAILABLE (52) /**< Bit offset of X86DESCGENERIC::u1Available. */ +#define X86DESCGENERIC_BIT_OFF_LONG (53) /**< Bit offset of X86DESCGENERIC::u1Long. */ +#define X86DESCGENERIC_BIT_OFF_DEF_BIG (54) /**< Bit offset of X86DESCGENERIC::u1DefBig. */ +#define X86DESCGENERIC_BIT_OFF_GRANULARITY (55) /**< Bit offset of X86DESCGENERIC::u1Granularity. */ +#define X86DESCGENERIC_BIT_OFF_BASE_HIGH2 (56) /**< Bit offset of X86DESCGENERIC::u8BaseHigh2. */ +/** @} */ + + +/** @name LAR mask + * @{ */ +#define X86LAR_F_TYPE UINT16_C( 0x0f00) +#define X86LAR_F_DT UINT16_C( 0x1000) +#define X86LAR_F_DPL UINT16_C( 0x6000) +#define X86LAR_F_DPL_SHIFT 13 /**< Shift count for the DPL value. */ +#define X86LAR_F_P UINT16_C( 0x8000) +#define X86LAR_F_AVL UINT32_C(0x00100000) +#define X86LAR_F_L UINT32_C(0x00200000) +#define X86LAR_F_D UINT32_C(0x00400000) +#define X86LAR_F_G UINT32_C(0x00800000) +/** @} */ + + +/** + * Call-, Interrupt-, Trap- or Task-gate descriptor (legacy). + */ +typedef struct X86DESCGATE +{ + /** 00 - Target code segment offset - Low word. + * Ignored if task-gate. */ + unsigned u16OffsetLow : 16; + /** 10 - Target code segment selector for call-, interrupt- and trap-gates, + * TSS selector if task-gate. */ + unsigned u16Sel : 16; + /** 20 - Number of parameters for a call-gate. + * Ignored if interrupt-, trap- or task-gate. */ + unsigned u5ParmCount : 5; + /** 25 - Reserved / ignored. */ + unsigned u3Reserved : 3; + /** 28 - Segment Type. */ + unsigned u4Type : 4; + /** 2c - Descriptor Type (0 = system). */ + unsigned u1DescType : 1; + /** 2d - Descriptor Privilege level. */ + unsigned u2Dpl : 2; + /** 2f - Flags selector present(=1) or not. */ + unsigned u1Present : 1; + /** 30 - Target code segment offset - High word. + * Ignored if task-gate. */ + unsigned u16OffsetHigh : 16; +} X86DESCGATE; +/** Pointer to a Call-, Interrupt-, Trap- or Task-gate descriptor entry. */ +typedef X86DESCGATE *PX86DESCGATE; +/** Pointer to a const Call-, Interrupt-, Trap- or Task-gate descriptor entry. */ +typedef const X86DESCGATE *PCX86DESCGATE; + +#endif /* VBOX_FOR_DTRACE_LIB */ + +/** + * Descriptor table entry. + */ +#pragma pack(1) +typedef union X86DESC +{ +#ifndef VBOX_FOR_DTRACE_LIB + /** Generic descriptor view. */ + X86DESCGENERIC Gen; + /** Gate descriptor view. */ + X86DESCGATE Gate; +#endif + + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; + /** 64 bit unsigned integer view. */ + uint64_t au64[1]; + /** Unsigned integer view. */ + uint64_t u; +} X86DESC; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86DESC, 8); +#endif +#pragma pack() +/** Pointer to descriptor table entry. */ +typedef X86DESC *PX86DESC; +/** Pointer to const descriptor table entry. */ +typedef const X86DESC *PCX86DESC; + +/** @def X86DESC_BASE + * Return the base address of a descriptor. + */ +#define X86DESC_BASE(a_pDesc) /*ASM-NOINC*/ \ + ( ((uint32_t)((a_pDesc)->Gen.u8BaseHigh2) << 24) \ + | ( (a_pDesc)->Gen.u8BaseHigh1 << 16) \ + | ( (a_pDesc)->Gen.u16BaseLow ) ) + +/** @def X86DESC_LIMIT + * Return the limit of a descriptor. + */ +#define X86DESC_LIMIT(a_pDesc) /*ASM-NOINC*/ \ + ( ((uint32_t)((a_pDesc)->Gen.u4LimitHigh) << 16) \ + | ( (a_pDesc)->Gen.u16LimitLow ) ) + +/** @def X86DESC_LIMIT_G + * Return the limit of a descriptor with the granularity bit taken into account. + * @returns Selector limit (uint32_t). + * @param a_pDesc Pointer to the descriptor. + */ +#define X86DESC_LIMIT_G(a_pDesc) /*ASM-NOINC*/ \ + ( (a_pDesc)->Gen.u1Granularity \ + ? ( ( ((uint32_t)(a_pDesc)->Gen.u4LimitHigh << 16) | (a_pDesc)->Gen.u16LimitLow ) << 12 ) | UINT32_C(0xfff) \ + : ((uint32_t)(a_pDesc)->Gen.u4LimitHigh << 16) | (a_pDesc)->Gen.u16LimitLow \ + ) + +/** @def X86DESC_GET_HID_ATTR + * Get the descriptor attributes for the hidden register. + */ +#define X86DESC_GET_HID_ATTR(a_pDesc) /*ASM-NOINC*/ \ + ( ((a_pDesc)->u >> (16+16+8)) & UINT32_C(0xf0ff) ) /** @todo do we have a define for 0xf0ff? */ + +#ifndef VBOX_FOR_DTRACE_LIB + +/** + * 64 bits generic descriptor table entry + * Note: most of these bits have no meaning in long mode. + */ +#pragma pack(1) +typedef struct X86DESC64GENERIC +{ + /** Limit - Low word - *IGNORED*. */ + uint32_t u16LimitLow : 16; + /** Base address - low word. - *IGNORED* + * Don't try set this to 24 because MSC is doing stupid things then. */ + uint32_t u16BaseLow : 16; + /** Base address - first 8 bits of high word. - *IGNORED* */ + uint32_t u8BaseHigh1 : 8; + /** Segment Type. */ + uint32_t u4Type : 4; + /** Descriptor Type. System(=0) or code/data selector */ + uint32_t u1DescType : 1; + /** Descriptor Privilege level. */ + uint32_t u2Dpl : 2; + /** Flags selector present(=1) or not. */ + uint32_t u1Present : 1; + /** Segment limit 16-19. - *IGNORED* */ + uint32_t u4LimitHigh : 4; + /** Available for system software. - *IGNORED* */ + uint32_t u1Available : 1; + /** Long mode flag. */ + uint32_t u1Long : 1; + /** This flags meaning depends on the segment type. Try make sense out + * of the intel manual yourself. */ + uint32_t u1DefBig : 1; + /** Granularity of the limit. If set 4KB granularity is used, if + * clear byte. - *IGNORED* */ + uint32_t u1Granularity : 1; + /** Base address - highest 8 bits. - *IGNORED* */ + uint32_t u8BaseHigh2 : 8; + /** Base address - bits 63-32. */ + uint32_t u32BaseHigh3 : 32; + uint32_t u8Reserved : 8; + uint32_t u5Zeros : 5; + uint32_t u19Reserved : 19; +} X86DESC64GENERIC; +#pragma pack() +/** Pointer to a generic descriptor entry. */ +typedef X86DESC64GENERIC *PX86DESC64GENERIC; +/** Pointer to a const generic descriptor entry. */ +typedef const X86DESC64GENERIC *PCX86DESC64GENERIC; + +/** + * System descriptor table entry (64 bits) + * + * @remarks This is, save a couple of comments, identical to X86DESC64GENERIC... + */ +#pragma pack(1) +typedef struct X86DESC64SYSTEM +{ + /** Limit - Low word. */ + uint32_t u16LimitLow : 16; + /** Base address - low word. + * Don't try set this to 24 because MSC is doing stupid things then. */ + uint32_t u16BaseLow : 16; + /** Base address - first 8 bits of high word. */ + uint32_t u8BaseHigh1 : 8; + /** Segment Type. */ + uint32_t u4Type : 4; + /** Descriptor Type. System(=0) or code/data selector */ + uint32_t u1DescType : 1; + /** Descriptor Privilege level. */ + uint32_t u2Dpl : 2; + /** Flags selector present(=1) or not. */ + uint32_t u1Present : 1; + /** Segment limit 16-19. */ + uint32_t u4LimitHigh : 4; + /** Available for system software. */ + uint32_t u1Available : 1; + /** Reserved - 0. */ + uint32_t u1Reserved : 1; + /** This flags meaning depends on the segment type. Try make sense out + * of the intel manual yourself. */ + uint32_t u1DefBig : 1; + /** Granularity of the limit. If set 4KB granularity is used, if + * clear byte. */ + uint32_t u1Granularity : 1; + /** Base address - bits 31-24. */ + uint32_t u8BaseHigh2 : 8; + /** Base address - bits 63-32. */ + uint32_t u32BaseHigh3 : 32; + uint32_t u8Reserved : 8; + uint32_t u5Zeros : 5; + uint32_t u19Reserved : 19; +} X86DESC64SYSTEM; +#pragma pack() +/** Pointer to a system descriptor entry. */ +typedef X86DESC64SYSTEM *PX86DESC64SYSTEM; +/** Pointer to a const system descriptor entry. */ +typedef const X86DESC64SYSTEM *PCX86DESC64SYSTEM; + +/** + * Call-, Interrupt-, Trap- or Task-gate descriptor (64-bit). + */ +typedef struct X86DESC64GATE +{ + /** Target code segment offset - Low word. */ + uint32_t u16OffsetLow : 16; + /** Target code segment selector. */ + uint32_t u16Sel : 16; + /** Interrupt stack table for interrupt- and trap-gates. + * Ignored by call-gates. */ + uint32_t u3IST : 3; + /** Reserved / ignored. */ + uint32_t u5Reserved : 5; + /** Segment Type. */ + uint32_t u4Type : 4; + /** Descriptor Type (0 = system). */ + uint32_t u1DescType : 1; + /** Descriptor Privilege level. */ + uint32_t u2Dpl : 2; + /** Flags selector present(=1) or not. */ + uint32_t u1Present : 1; + /** Target code segment offset - High word. + * Ignored if task-gate. */ + uint32_t u16OffsetHigh : 16; + /** Target code segment offset - Top dword. + * Ignored if task-gate. */ + uint32_t u32OffsetTop : 32; + /** Reserved / ignored / must be zero. + * For call-gates bits 8 thru 12 must be zero, the other gates ignores this. */ + uint32_t u32Reserved : 32; +} X86DESC64GATE; +AssertCompileSize(X86DESC64GATE, 16); +/** Pointer to a Call-, Interrupt-, Trap- or Task-gate descriptor entry. */ +typedef X86DESC64GATE *PX86DESC64GATE; +/** Pointer to a const Call-, Interrupt-, Trap- or Task-gate descriptor entry. */ +typedef const X86DESC64GATE *PCX86DESC64GATE; + +#endif /* VBOX_FOR_DTRACE_LIB */ + +/** + * Descriptor table entry. + */ +#pragma pack(1) +typedef union X86DESC64 +{ +#ifndef VBOX_FOR_DTRACE_LIB + /** Generic descriptor view. */ + X86DESC64GENERIC Gen; + /** System descriptor view. */ + X86DESC64SYSTEM System; + /** Gate descriptor view. */ + X86DESC64GATE Gate; +#endif + + /** 8 bit unsigned integer view. */ + uint8_t au8[16]; + /** 16 bit unsigned integer view. */ + uint16_t au16[8]; + /** 32 bit unsigned integer view. */ + uint32_t au32[4]; + /** 64 bit unsigned integer view. */ + uint64_t au64[2]; +} X86DESC64; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86DESC64, 16); +#endif +#pragma pack() +/** Pointer to descriptor table entry. */ +typedef X86DESC64 *PX86DESC64; +/** Pointer to const descriptor table entry. */ +typedef const X86DESC64 *PCX86DESC64; + +/** @def X86DESC64_BASE + * Return the base of a 64-bit descriptor. + */ +#define X86DESC64_BASE(a_pDesc) /*ASM-NOINC*/ \ + ( ((uint64_t)((a_pDesc)->Gen.u32BaseHigh3) << 32) \ + | ((uint32_t)((a_pDesc)->Gen.u8BaseHigh2) << 24) \ + | ( (a_pDesc)->Gen.u8BaseHigh1 << 16) \ + | ( (a_pDesc)->Gen.u16BaseLow ) ) + + + +/** @name Host system descriptor table entry - Use with care! + * @{ */ +/** Host system descriptor table entry. */ +#if HC_ARCH_BITS == 64 +typedef X86DESC64 X86DESCHC; +#else +typedef X86DESC X86DESCHC; +#endif +/** Pointer to a host system descriptor table entry. */ +#if HC_ARCH_BITS == 64 +typedef PX86DESC64 PX86DESCHC; +#else +typedef PX86DESC PX86DESCHC; +#endif +/** Pointer to a const host system descriptor table entry. */ +#if HC_ARCH_BITS == 64 +typedef PCX86DESC64 PCX86DESCHC; +#else +typedef PCX86DESC PCX86DESCHC; +#endif +/** @} */ + + +/** @name Selector Descriptor Types. + * @{ + */ + +/** @name Non-System Selector Types. + * @{ */ +/** Code(=set)/Data(=clear) bit. */ +#define X86_SEL_TYPE_CODE 8 +/** Memory(=set)/System(=clear) bit. */ +#define X86_SEL_TYPE_MEMORY RT_BIT_32(4) +/** Accessed bit. */ +#define X86_SEL_TYPE_ACCESSED 1 +/** Expand down bit (for data selectors only). */ +#define X86_SEL_TYPE_DOWN 4 +/** Conforming bit (for code selectors only). */ +#define X86_SEL_TYPE_CONF 4 +/** Write bit (for data selectors only). */ +#define X86_SEL_TYPE_WRITE 2 +/** Read bit (for code selectors only). */ +#define X86_SEL_TYPE_READ 2 +/** The bit number of the code segment read bit (relative to u4Type). */ +#define X86_SEL_TYPE_READ_BIT 1 + +/** Read only selector type. */ +#define X86_SEL_TYPE_RO 0 +/** Accessed read only selector type. */ +#define X86_SEL_TYPE_RO_ACC (0 | X86_SEL_TYPE_ACCESSED) +/** Read write selector type. */ +#define X86_SEL_TYPE_RW 2 +/** Accessed read write selector type. */ +#define X86_SEL_TYPE_RW_ACC (2 | X86_SEL_TYPE_ACCESSED) +/** Expand down read only selector type. */ +#define X86_SEL_TYPE_RO_DOWN 4 +/** Accessed expand down read only selector type. */ +#define X86_SEL_TYPE_RO_DOWN_ACC (4 | X86_SEL_TYPE_ACCESSED) +/** Expand down read write selector type. */ +#define X86_SEL_TYPE_RW_DOWN 6 +/** Accessed expand down read write selector type. */ +#define X86_SEL_TYPE_RW_DOWN_ACC (6 | X86_SEL_TYPE_ACCESSED) +/** Execute only selector type. */ +#define X86_SEL_TYPE_EO (0 | X86_SEL_TYPE_CODE) +/** Accessed execute only selector type. */ +#define X86_SEL_TYPE_EO_ACC (0 | X86_SEL_TYPE_CODE | X86_SEL_TYPE_ACCESSED) +/** Execute and read selector type. */ +#define X86_SEL_TYPE_ER (2 | X86_SEL_TYPE_CODE) +/** Accessed execute and read selector type. */ +#define X86_SEL_TYPE_ER_ACC (2 | X86_SEL_TYPE_CODE | X86_SEL_TYPE_ACCESSED) +/** Conforming execute only selector type. */ +#define X86_SEL_TYPE_EO_CONF (4 | X86_SEL_TYPE_CODE) +/** Accessed Conforming execute only selector type. */ +#define X86_SEL_TYPE_EO_CONF_ACC (4 | X86_SEL_TYPE_CODE | X86_SEL_TYPE_ACCESSED) +/** Conforming execute and write selector type. */ +#define X86_SEL_TYPE_ER_CONF (6 | X86_SEL_TYPE_CODE) +/** Accessed Conforming execute and write selector type. */ +#define X86_SEL_TYPE_ER_CONF_ACC (6 | X86_SEL_TYPE_CODE | X86_SEL_TYPE_ACCESSED) +/** @} */ + + +/** @name System Selector Types. + * @{ */ +/** The TSS busy bit mask. */ +#define X86_SEL_TYPE_SYS_TSS_BUSY_MASK 2 + +/** Undefined system selector type. */ +#define X86_SEL_TYPE_SYS_UNDEFINED 0 +/** 286 TSS selector. */ +#define X86_SEL_TYPE_SYS_286_TSS_AVAIL 1 +/** LDT selector. */ +#define X86_SEL_TYPE_SYS_LDT 2 +/** 286 TSS selector - Busy. */ +#define X86_SEL_TYPE_SYS_286_TSS_BUSY 3 +/** 286 Callgate selector. */ +#define X86_SEL_TYPE_SYS_286_CALL_GATE 4 +/** Taskgate selector. */ +#define X86_SEL_TYPE_SYS_TASK_GATE 5 +/** 286 Interrupt gate selector. */ +#define X86_SEL_TYPE_SYS_286_INT_GATE 6 +/** 286 Trapgate selector. */ +#define X86_SEL_TYPE_SYS_286_TRAP_GATE 7 +/** Undefined system selector. */ +#define X86_SEL_TYPE_SYS_UNDEFINED2 8 +/** 386 TSS selector. */ +#define X86_SEL_TYPE_SYS_386_TSS_AVAIL 9 +/** Undefined system selector. */ +#define X86_SEL_TYPE_SYS_UNDEFINED3 0xA +/** 386 TSS selector - Busy. */ +#define X86_SEL_TYPE_SYS_386_TSS_BUSY 0xB +/** 386 Callgate selector. */ +#define X86_SEL_TYPE_SYS_386_CALL_GATE 0xC +/** Undefined system selector. */ +#define X86_SEL_TYPE_SYS_UNDEFINED4 0xD +/** 386 Interruptgate selector. */ +#define X86_SEL_TYPE_SYS_386_INT_GATE 0xE +/** 386 Trapgate selector. */ +#define X86_SEL_TYPE_SYS_386_TRAP_GATE 0xF +/** @} */ + +/** @name AMD64 System Selector Types. + * @{ */ +/** LDT selector. */ +#define AMD64_SEL_TYPE_SYS_LDT 2 +/** TSS selector - Busy. */ +#define AMD64_SEL_TYPE_SYS_TSS_AVAIL 9 +/** TSS selector - Busy. */ +#define AMD64_SEL_TYPE_SYS_TSS_BUSY 0xB +/** Callgate selector. */ +#define AMD64_SEL_TYPE_SYS_CALL_GATE 0xC +/** Interruptgate selector. */ +#define AMD64_SEL_TYPE_SYS_INT_GATE 0xE +/** Trapgate selector. */ +#define AMD64_SEL_TYPE_SYS_TRAP_GATE 0xF +/** @} */ + +/** @} */ + + +/** @name Descriptor Table Entry Flag Masks. + * These are for the 2nd 32-bit word of a descriptor. + * @{ */ +/** Bits 8-11 - TYPE - Descriptor type mask. */ +#define X86_DESC_TYPE_MASK (RT_BIT_32(8) | RT_BIT_32(9) | RT_BIT_32(10) | RT_BIT_32(11)) +/** Bit 12 - S - System (=0) or Code/Data (=1). */ +#define X86_DESC_S RT_BIT_32(12) +/** Bits 13-14 - DPL - Descriptor Privilege Level. */ +#define X86_DESC_DPL (RT_BIT_32(13) | RT_BIT_32(14)) +/** Bit 15 - P - Present. */ +#define X86_DESC_P RT_BIT_32(15) +/** Bit 20 - AVL - Available for system software. */ +#define X86_DESC_AVL RT_BIT_32(20) +/** Bit 22 - DB - Default operation size. 0 = 16 bit, 1 = 32 bit. */ +#define X86_DESC_DB RT_BIT_32(22) +/** Bit 23 - G - Granularity of the limit. If set 4KB granularity is + * used, if clear byte. */ +#define X86_DESC_G RT_BIT_32(23) +/** @} */ + +/** @} */ + + +/** @name Task Segments. + * @{ + */ + +/** + * The minimum TSS descriptor limit for 286 tasks. + */ +#define X86_SEL_TYPE_SYS_286_TSS_LIMIT_MIN 0x2b + +/** + * The minimum TSS descriptor segment limit for 386 tasks. + */ +#define X86_SEL_TYPE_SYS_386_TSS_LIMIT_MIN 0x67 + +/** + * 16-bit Task Segment (TSS). + */ +#pragma pack(1) +typedef struct X86TSS16 +{ + /** Back link to previous task. (static) */ + RTSEL selPrev; + /** Ring-0 stack pointer. (static) */ + uint16_t sp0; + /** Ring-0 stack segment. (static) */ + RTSEL ss0; + /** Ring-1 stack pointer. (static) */ + uint16_t sp1; + /** Ring-1 stack segment. (static) */ + RTSEL ss1; + /** Ring-2 stack pointer. (static) */ + uint16_t sp2; + /** Ring-2 stack segment. (static) */ + RTSEL ss2; + /** IP before task switch. */ + uint16_t ip; + /** FLAGS before task switch. */ + uint16_t flags; + /** AX before task switch. */ + uint16_t ax; + /** CX before task switch. */ + uint16_t cx; + /** DX before task switch. */ + uint16_t dx; + /** BX before task switch. */ + uint16_t bx; + /** SP before task switch. */ + uint16_t sp; + /** BP before task switch. */ + uint16_t bp; + /** SI before task switch. */ + uint16_t si; + /** DI before task switch. */ + uint16_t di; + /** ES before task switch. */ + RTSEL es; + /** CS before task switch. */ + RTSEL cs; + /** SS before task switch. */ + RTSEL ss; + /** DS before task switch. */ + RTSEL ds; + /** LDTR before task switch. */ + RTSEL selLdt; +} X86TSS16; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86TSS16, X86_SEL_TYPE_SYS_286_TSS_LIMIT_MIN + 1); +#endif +#pragma pack() +/** Pointer to a 16-bit task segment. */ +typedef X86TSS16 *PX86TSS16; +/** Pointer to a const 16-bit task segment. */ +typedef const X86TSS16 *PCX86TSS16; + + +/** + * 32-bit Task Segment (TSS). + */ +#pragma pack(1) +typedef struct X86TSS32 +{ + /** Back link to previous task. (static) */ + RTSEL selPrev; + uint16_t padding1; + /** Ring-0 stack pointer. (static) */ + uint32_t esp0; + /** Ring-0 stack segment. (static) */ + RTSEL ss0; + uint16_t padding_ss0; + /** Ring-1 stack pointer. (static) */ + uint32_t esp1; + /** Ring-1 stack segment. (static) */ + RTSEL ss1; + uint16_t padding_ss1; + /** Ring-2 stack pointer. (static) */ + uint32_t esp2; + /** Ring-2 stack segment. (static) */ + RTSEL ss2; + uint16_t padding_ss2; + /** Page directory for the task. (static) */ + uint32_t cr3; + /** EIP before task switch. */ + uint32_t eip; + /** EFLAGS before task switch. */ + uint32_t eflags; + /** EAX before task switch. */ + uint32_t eax; + /** ECX before task switch. */ + uint32_t ecx; + /** EDX before task switch. */ + uint32_t edx; + /** EBX before task switch. */ + uint32_t ebx; + /** ESP before task switch. */ + uint32_t esp; + /** EBP before task switch. */ + uint32_t ebp; + /** ESI before task switch. */ + uint32_t esi; + /** EDI before task switch. */ + uint32_t edi; + /** ES before task switch. */ + RTSEL es; + uint16_t padding_es; + /** CS before task switch. */ + RTSEL cs; + uint16_t padding_cs; + /** SS before task switch. */ + RTSEL ss; + uint16_t padding_ss; + /** DS before task switch. */ + RTSEL ds; + uint16_t padding_ds; + /** FS before task switch. */ + RTSEL fs; + uint16_t padding_fs; + /** GS before task switch. */ + RTSEL gs; + uint16_t padding_gs; + /** LDTR before task switch. */ + RTSEL selLdt; + uint16_t padding_ldt; + /** Debug trap flag */ + uint16_t fDebugTrap; + /** Offset relative to the TSS of the start of the I/O Bitmap + * and the end of the interrupt redirection bitmap. */ + uint16_t offIoBitmap; +} X86TSS32; +#pragma pack() +/** Pointer to task segment. */ +typedef X86TSS32 *PX86TSS32; +/** Pointer to const task segment. */ +typedef const X86TSS32 *PCX86TSS32; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86TSS32, X86_SEL_TYPE_SYS_386_TSS_LIMIT_MIN + 1); +AssertCompileMemberOffset(X86TSS32, cr3, 28); +AssertCompileMemberOffset(X86TSS32, offIoBitmap, 102); +#endif + +/** + * 64-bit Task segment. + */ +#pragma pack(1) +typedef struct X86TSS64 +{ + /** Reserved. */ + uint32_t u32Reserved; + /** Ring-0 stack pointer. (static) */ + uint64_t rsp0; + /** Ring-1 stack pointer. (static) */ + uint64_t rsp1; + /** Ring-2 stack pointer. (static) */ + uint64_t rsp2; + /** Reserved. */ + uint32_t u32Reserved2[2]; + /* IST */ + uint64_t ist1; + uint64_t ist2; + uint64_t ist3; + uint64_t ist4; + uint64_t ist5; + uint64_t ist6; + uint64_t ist7; + /* Reserved. */ + uint16_t u16Reserved[5]; + /** Offset relative to the TSS of the start of the I/O Bitmap + * and the end of the interrupt redirection bitmap. */ + uint16_t offIoBitmap; +} X86TSS64; +#pragma pack() +/** Pointer to a 64-bit task segment. */ +typedef X86TSS64 *PX86TSS64; +/** Pointer to a const 64-bit task segment. */ +typedef const X86TSS64 *PCX86TSS64; +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompileSize(X86TSS64, X86_SEL_TYPE_SYS_386_TSS_LIMIT_MIN + 1); +#endif + +/** @} */ + + +/** @name Selectors. + * @{ + */ + +/** + * The shift used to convert a selector from and to index an index (C). + */ +#define X86_SEL_SHIFT 3 + +/** + * The mask used to mask off the table indicator and RPL of an selector. + */ +#define X86_SEL_MASK 0xfff8U + +/** + * The mask used to mask off the RPL of an selector. + * This is suitable for checking for NULL selectors. + */ +#define X86_SEL_MASK_OFF_RPL 0xfffcU + +/** + * The bit indicating that a selector is in the LDT and not in the GDT. + */ +#define X86_SEL_LDT 0x0004U + +/** + * The bit mask for getting the RPL of a selector. + */ +#define X86_SEL_RPL 0x0003U + +/** + * The mask covering both RPL and LDT. + * This is incidentally the same as sizeof(X86DESC) - 1, so good for limit + * checks. + */ +#define X86_SEL_RPL_LDT 0x0007U + +/** @} */ + + +/** + * x86 Exceptions/Faults/Traps. + */ +typedef enum X86XCPT +{ + /** \#DE - Divide error. */ + X86_XCPT_DE = 0x00, + /** \#DB - Debug event (single step, DRx, ..) */ + X86_XCPT_DB = 0x01, + /** NMI - Non-Maskable Interrupt */ + X86_XCPT_NMI = 0x02, + /** \#BP - Breakpoint (INT3). */ + X86_XCPT_BP = 0x03, + /** \#OF - Overflow (INTO). */ + X86_XCPT_OF = 0x04, + /** \#BR - Bound range exceeded (BOUND). */ + X86_XCPT_BR = 0x05, + /** \#UD - Undefined opcode. */ + X86_XCPT_UD = 0x06, + /** \#NM - Device not available (math coprocessor device). */ + X86_XCPT_NM = 0x07, + /** \#DF - Double fault. */ + X86_XCPT_DF = 0x08, + /** ??? - Coprocessor segment overrun (obsolete). */ + X86_XCPT_CO_SEG_OVERRUN = 0x09, + /** \#TS - Taskswitch (TSS). */ + X86_XCPT_TS = 0x0a, + /** \#NP - Segment no present. */ + X86_XCPT_NP = 0x0b, + /** \#SS - Stack segment fault. */ + X86_XCPT_SS = 0x0c, + /** \#GP - General protection fault. */ + X86_XCPT_GP = 0x0d, + /** \#PF - Page fault. */ + X86_XCPT_PF = 0x0e, + /* 0x0f is reserved (to avoid conflict with spurious interrupts in BIOS setup). */ + /** \#MF - Math fault (FPU). */ + X86_XCPT_MF = 0x10, + /** \#AC - Alignment check. */ + X86_XCPT_AC = 0x11, + /** \#MC - Machine check. */ + X86_XCPT_MC = 0x12, + /** \#XF - SIMD Floating-Pointer Exception. */ + X86_XCPT_XF = 0x13, + /** \#VE - Virtualization Exception. */ + X86_XCPT_VE = 0x14, + /** \#SX - Security Exception. */ + X86_XCPT_SX = 0x1e +} X86XCPT; +/** Pointer to a x86 exception code. */ +typedef X86XCPT *PX86XCPT; +/** Pointer to a const x86 exception code. */ +typedef const X86XCPT *PCX86XCPT; +/** The last valid (currently reserved) exception value. */ +#define X86_XCPT_LAST 0x1f + + +/** @name Trap Error Codes + * @{ + */ +/** External indicator. */ +#define X86_TRAP_ERR_EXTERNAL 1 +/** IDT indicator. */ +#define X86_TRAP_ERR_IDT 2 +/** Descriptor table indicator - If set LDT, if clear GDT. */ +#define X86_TRAP_ERR_TI 4 +/** Mask for getting the selector. */ +#define X86_TRAP_ERR_SEL_MASK 0xfff8 +/** Shift for getting the selector table index (C type index). */ +#define X86_TRAP_ERR_SEL_SHIFT 3 +/** @} */ + + +/** @name \#PF Trap Error Codes + * @{ + */ +/** Bit 0 - P - Not present (clear) or page level protection (set) fault. */ +#define X86_TRAP_PF_P RT_BIT_32(0) +/** Bit 1 - R/W - Read (clear) or write (set) access. */ +#define X86_TRAP_PF_RW RT_BIT_32(1) +/** Bit 2 - U/S - CPU executing in user mode (set) or supervisor mode (clear). */ +#define X86_TRAP_PF_US RT_BIT_32(2) +/** Bit 3 - RSVD- Reserved bit violation (set), i.e. reserved bit was set to 1. */ +#define X86_TRAP_PF_RSVD RT_BIT_32(3) +/** Bit 4 - I/D - Instruction fetch (set) / Data access (clear) - PAE + NXE. */ +#define X86_TRAP_PF_ID RT_BIT_32(4) +/** Bit 5 - PK - Protection-key violation (AMD64 mode only). */ +#define X86_TRAP_PF_PK RT_BIT_32(5) +/** @} */ + +#pragma pack(1) +/** + * 16-bit IDTR. + */ +typedef struct X86IDTR16 +{ + /** Offset. */ + uint16_t offSel; + /** Selector. */ + uint16_t uSel; +} X86IDTR16, *PX86IDTR16; +#pragma pack() + +#pragma pack(1) +/** + * 32-bit IDTR/GDTR. + */ +typedef struct X86XDTR32 +{ + /** Size of the descriptor table. */ + uint16_t cb; + /** Address of the descriptor table. */ +#ifndef VBOX_FOR_DTRACE_LIB + uint32_t uAddr; +#else + uint16_t au16Addr[2]; +#endif +} X86XDTR32, *PX86XDTR32; +#pragma pack() + +#pragma pack(1) +/** + * 64-bit IDTR/GDTR. + */ +typedef struct X86XDTR64 +{ + /** Size of the descriptor table. */ + uint16_t cb; + /** Address of the descriptor table. */ +#ifndef VBOX_FOR_DTRACE_LIB + uint64_t uAddr; +#else + uint16_t au16Addr[4]; +#endif +} X86XDTR64, *PX86XDTR64; +#pragma pack() + + +/** @name ModR/M + * @{ */ +#define X86_MODRM_RM_MASK UINT8_C(0x07) +#define X86_MODRM_REG_MASK UINT8_C(0x38) +#define X86_MODRM_REG_SMASK UINT8_C(0x07) +#define X86_MODRM_REG_SHIFT 3 +#define X86_MODRM_MOD_MASK UINT8_C(0xc0) +#define X86_MODRM_MOD_SMASK UINT8_C(0x03) +#define X86_MODRM_MOD_SHIFT 6 +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompile((X86_MODRM_RM_MASK | X86_MODRM_REG_MASK | X86_MODRM_MOD_MASK) == 0xff); +AssertCompile((X86_MODRM_REG_MASK >> X86_MODRM_REG_SHIFT) == X86_MODRM_REG_SMASK); +AssertCompile((X86_MODRM_MOD_MASK >> X86_MODRM_MOD_SHIFT) == X86_MODRM_MOD_SMASK); +/** @def X86_MODRM_MAKE + * @param a_Mod The mod value (0..3). + * @param a_Reg The register value (0..7). + * @param a_RegMem The register or memory value (0..7). */ +# define X86_MODRM_MAKE(a_Mod, a_Reg, a_RegMem) (((a_Mod) << X86_MODRM_MOD_SHIFT) | ((a_Reg) << X86_MODRM_REG_SHIFT) | (a_RegMem)) +#endif +/** @} */ + +/** @name SIB + * @{ */ +#define X86_SIB_BASE_MASK UINT8_C(0x07) +#define X86_SIB_INDEX_MASK UINT8_C(0x38) +#define X86_SIB_INDEX_SMASK UINT8_C(0x07) +#define X86_SIB_INDEX_SHIFT 3 +#define X86_SIB_SCALE_MASK UINT8_C(0xc0) +#define X86_SIB_SCALE_SMASK UINT8_C(0x03) +#define X86_SIB_SCALE_SHIFT 6 +#ifndef VBOX_FOR_DTRACE_LIB +AssertCompile((X86_SIB_BASE_MASK | X86_SIB_INDEX_MASK | X86_SIB_SCALE_MASK) == 0xff); +AssertCompile((X86_SIB_INDEX_MASK >> X86_SIB_INDEX_SHIFT) == X86_SIB_INDEX_SMASK); +AssertCompile((X86_SIB_SCALE_MASK >> X86_SIB_SCALE_SHIFT) == X86_SIB_SCALE_SMASK); +#endif +/** @} */ + +/** @name General register indexes + * @{ */ +#define X86_GREG_xAX 0 +#define X86_GREG_xCX 1 +#define X86_GREG_xDX 2 +#define X86_GREG_xBX 3 +#define X86_GREG_xSP 4 +#define X86_GREG_xBP 5 +#define X86_GREG_xSI 6 +#define X86_GREG_xDI 7 +#define X86_GREG_x8 8 +#define X86_GREG_x9 9 +#define X86_GREG_x10 10 +#define X86_GREG_x11 11 +#define X86_GREG_x12 12 +#define X86_GREG_x13 13 +#define X86_GREG_x14 14 +#define X86_GREG_x15 15 +/** @} */ + +/** @name X86_SREG_XXX - Segment register indexes. + * @{ */ +#define X86_SREG_ES 0 +#define X86_SREG_CS 1 +#define X86_SREG_SS 2 +#define X86_SREG_DS 3 +#define X86_SREG_FS 4 +#define X86_SREG_GS 5 +/** @} */ +/** Segment register count. */ +#define X86_SREG_COUNT 6 + + +/** @name X86_OP_XXX - Prefixes + * @{ */ +#define X86_OP_PRF_CS UINT8_C(0x2e) +#define X86_OP_PRF_SS UINT8_C(0x36) +#define X86_OP_PRF_DS UINT8_C(0x3e) +#define X86_OP_PRF_ES UINT8_C(0x26) +#define X86_OP_PRF_FS UINT8_C(0x64) +#define X86_OP_PRF_GS UINT8_C(0x65) +#define X86_OP_PRF_SIZE_OP UINT8_C(0x66) +#define X86_OP_PRF_SIZE_ADDR UINT8_C(0x67) +#define X86_OP_PRF_LOCK UINT8_C(0xf0) +#define X86_OP_PRF_REPZ UINT8_C(0xf3) +#define X86_OP_PRF_REPNZ UINT8_C(0xf2) +#define X86_OP_REX_B UINT8_C(0x41) +#define X86_OP_REX_X UINT8_C(0x42) +#define X86_OP_REX_R UINT8_C(0x44) +#define X86_OP_REX_W UINT8_C(0x48) +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/product-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/product-generated.h @@ -0,0 +1,10 @@ +#ifndef ___product_generated_h___ +#define ___product_generated_h___ + +#define VBOX_VENDOR "Oracle Corporation" +#define VBOX_VENDOR_SHORT "Oracle" +#define VBOX_PRODUCT "Oracle VM VirtualBox" +#define VBOX_BUILD_PUBLISHER "_Ubuntu" +#define VBOX_C_YEAR "2018" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/alloc-r0drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/alloc-r0drv.c @@ -0,0 +1,437 @@ +/* $Id: alloc-r0drv.cpp $ */ +/** @file + * IPRT - Memory Allocation, Ring-0 Driver. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define RTMEM_NO_WRAP_TO_EF_APIS +#include +#include "internal/iprt.h" + +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# include +#endif +#include +#ifdef RT_MORE_STRICT +# include +#endif +#include +#include +#include +#include "r0drv/alloc-r0drv.h" + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#ifdef RT_STRICT +# define RTR0MEM_STRICT +#endif + +#ifdef RTR0MEM_STRICT +# define RTR0MEM_FENCE_EXTRA 16 +#else +# define RTR0MEM_FENCE_EXTRA 0 +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#ifdef RTR0MEM_STRICT +/** Fence data. */ +static uint8_t const g_abFence[RTR0MEM_FENCE_EXTRA] = +{ + 0x77, 0x88, 0x66, 0x99, 0x55, 0xaa, 0x44, 0xbb, + 0x33, 0xcc, 0x22, 0xdd, 0x11, 0xee, 0x00, 0xff +}; +#endif + + +/** + * Wrapper around rtR0MemAllocEx. + * + * @returns Pointer to the allocated memory block header. + * @param cb The number of bytes to allocate (sans header). + * @param fFlags The allocation flags. + */ +DECLINLINE(PRTMEMHDR) rtR0MemAlloc(size_t cb, uint32_t fFlags) +{ + PRTMEMHDR pHdr; + int rc = rtR0MemAllocEx(cb, fFlags, &pHdr); + if (RT_FAILURE(rc)) + return NULL; + return pHdr; +} + + +RTDECL(void *) RTMemTmpAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + return RTMemAllocTag(cb, pszTag); +} +RT_EXPORT_SYMBOL(RTMemTmpAllocTag); + + +RTDECL(void *) RTMemTmpAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + return RTMemAllocZTag(cb, pszTag); +} +RT_EXPORT_SYMBOL(RTMemTmpAllocZTag); + + +RTDECL(void) RTMemTmpFree(void *pv) RT_NO_THROW_DEF +{ + return RTMemFree(pv); +} +RT_EXPORT_SYMBOL(RTMemTmpFree); + + + + + +RTDECL(void *) RTMemAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; + RT_ASSERT_INTS_ON(); + RT_NOREF_PV(pszTag); + + pHdr = rtR0MemAlloc(cb + RTR0MEM_FENCE_EXTRA, 0); + if (pHdr) + { +#ifdef RTR0MEM_STRICT + pHdr->cbReq = (uint32_t)cb; Assert(pHdr->cbReq == cb); + memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA); +#endif + return pHdr + 1; + } + return NULL; +} +RT_EXPORT_SYMBOL(RTMemAllocTag); + + +RTDECL(void *) RTMemAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; + RT_ASSERT_INTS_ON(); + RT_NOREF_PV(pszTag); + + pHdr = rtR0MemAlloc(cb + RTR0MEM_FENCE_EXTRA, RTMEMHDR_FLAG_ZEROED); + if (pHdr) + { +#ifdef RTR0MEM_STRICT + pHdr->cbReq = (uint32_t)cb; Assert(pHdr->cbReq == cb); + memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA); + return memset(pHdr + 1, 0, cb); +#else + return memset(pHdr + 1, 0, pHdr->cb); +#endif + } + return NULL; +} +RT_EXPORT_SYMBOL(RTMemAllocZTag); + + +RTDECL(void *) RTMemAllocVarTag(size_t cbUnaligned, const char *pszTag) +{ + size_t cbAligned; + if (cbUnaligned >= 16) + cbAligned = RT_ALIGN_Z(cbUnaligned, 16); + else + cbAligned = RT_ALIGN_Z(cbUnaligned, sizeof(void *)); + return RTMemAllocTag(cbAligned, pszTag); +} +RT_EXPORT_SYMBOL(RTMemAllocVarTag); + + +RTDECL(void *) RTMemAllocZVarTag(size_t cbUnaligned, const char *pszTag) +{ + size_t cbAligned; + if (cbUnaligned >= 16) + cbAligned = RT_ALIGN_Z(cbUnaligned, 16); + else + cbAligned = RT_ALIGN_Z(cbUnaligned, sizeof(void *)); + return RTMemAllocZTag(cbAligned, pszTag); +} +RT_EXPORT_SYMBOL(RTMemAllocZVarTag); + + +RTDECL(void *) RTMemReallocTag(void *pvOld, size_t cbNew, const char *pszTag) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdrOld; + + /* Free. */ + if (!cbNew && pvOld) + { + RTMemFree(pvOld); + return NULL; + } + + /* Alloc. */ + if (!pvOld) + return RTMemAllocTag(cbNew, pszTag); + + /* + * Realloc. + */ + pHdrOld = (PRTMEMHDR)pvOld - 1; + RT_ASSERT_PREEMPTIBLE(); + + if (pHdrOld->u32Magic == RTMEMHDR_MAGIC) + { + PRTMEMHDR pHdrNew; + + /* If there is sufficient space in the old block and we don't cause + substantial internal fragmentation, reuse the old block. */ + if ( pHdrOld->cb >= cbNew + RTR0MEM_FENCE_EXTRA + && pHdrOld->cb - (cbNew + RTR0MEM_FENCE_EXTRA) <= 128) + { + pHdrOld->cbReq = (uint32_t)cbNew; Assert(pHdrOld->cbReq == cbNew); +#ifdef RTR0MEM_STRICT + memcpy((uint8_t *)(pHdrOld + 1) + cbNew, &g_abFence[0], RTR0MEM_FENCE_EXTRA); +#endif + return pvOld; + } + + /* Allocate a new block and copy over the content. */ + pHdrNew = rtR0MemAlloc(cbNew + RTR0MEM_FENCE_EXTRA, 0); + if (pHdrNew) + { + size_t cbCopy = RT_MIN(pHdrOld->cb, pHdrNew->cb); + memcpy(pHdrNew + 1, pvOld, cbCopy); +#ifdef RTR0MEM_STRICT + pHdrNew->cbReq = (uint32_t)cbNew; Assert(pHdrNew->cbReq == cbNew); + memcpy((uint8_t *)(pHdrNew + 1) + cbNew, &g_abFence[0], RTR0MEM_FENCE_EXTRA); + AssertReleaseMsg(!memcmp((uint8_t *)(pHdrOld + 1) + pHdrOld->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA), + ("pHdr=%p pvOld=%p cbReq=%u cb=%u cbNew=%zu fFlags=%#x\n" + "fence: %.*Rhxs\n" + "expected: %.*Rhxs\n", + pHdrOld, pvOld, pHdrOld->cbReq, pHdrOld->cb, cbNew, pHdrOld->fFlags, + RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdrOld + 1) + pHdrOld->cbReq, + RTR0MEM_FENCE_EXTRA, &g_abFence[0])); +#endif + rtR0MemFree(pHdrOld); + return pHdrNew + 1; + } + } + else + AssertMsgFailed(("pHdrOld->u32Magic=%RX32 pvOld=%p cbNew=%#zx\n", pHdrOld->u32Magic, pvOld, cbNew)); + + return NULL; +} +RT_EXPORT_SYMBOL(RTMemReallocTag); + + +RTDECL(void) RTMemFree(void *pv) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; + RT_ASSERT_INTS_ON(); + + if (!pv) + return; + pHdr = (PRTMEMHDR)pv - 1; + if (pHdr->u32Magic == RTMEMHDR_MAGIC) + { + Assert(!(pHdr->fFlags & RTMEMHDR_FLAG_ALLOC_EX)); + Assert(!(pHdr->fFlags & RTMEMHDR_FLAG_EXEC)); +#ifdef RTR0MEM_STRICT + AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA), + ("pHdr=%p pv=%p cbReq=%u cb=%u fFlags=%#x\n" + "fence: %.*Rhxs\n" + "expected: %.*Rhxs\n", + pHdr, pv, pHdr->cbReq, pHdr->cb, pHdr->fFlags, + RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdr + 1) + pHdr->cbReq, + RTR0MEM_FENCE_EXTRA, &g_abFence[0])); +#endif + rtR0MemFree(pHdr); + } + else + AssertMsgFailed(("pHdr->u32Magic=%RX32 pv=%p\n", pHdr->u32Magic, pv)); +} +RT_EXPORT_SYMBOL(RTMemFree); + + + + + + +RTDECL(void *) RTMemExecAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; +#ifdef RT_OS_SOLARIS /** @todo figure out why */ + RT_ASSERT_INTS_ON(); +#else + RT_ASSERT_PREEMPTIBLE(); +#endif + RT_NOREF_PV(pszTag); + + + pHdr = rtR0MemAlloc(cb + RTR0MEM_FENCE_EXTRA, RTMEMHDR_FLAG_EXEC); + if (pHdr) + { +#ifdef RTR0MEM_STRICT + pHdr->cbReq = (uint32_t)cb; Assert(pHdr->cbReq == cb); + memcpy((uint8_t *)(pHdr + 1) + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA); +#endif + return pHdr + 1; + } + return NULL; +} +RT_EXPORT_SYMBOL(RTMemExecAllocTag); + + +RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; + RT_ASSERT_INTS_ON(); + RT_NOREF_PV(cb); + + if (!pv) + return; + pHdr = (PRTMEMHDR)pv - 1; + if (pHdr->u32Magic == RTMEMHDR_MAGIC) + { + Assert(!(pHdr->fFlags & RTMEMHDR_FLAG_ALLOC_EX)); +#ifdef RTR0MEM_STRICT + AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA), + ("pHdr=%p pv=%p cbReq=%u cb=%u fFlags=%#x\n" + "fence: %.*Rhxs\n" + "expected: %.*Rhxs\n", + pHdr, pv, pHdr->cbReq, pHdr->cb, pHdr->fFlags, + RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdr + 1) + pHdr->cbReq, + RTR0MEM_FENCE_EXTRA, &g_abFence[0])); +#endif + rtR0MemFree(pHdr); + } + else + AssertMsgFailed(("pHdr->u32Magic=%RX32 pv=%p\n", pHdr->u32Magic, pv)); +} +RT_EXPORT_SYMBOL(RTMemExecFree); + + + + +RTDECL(int) RTMemAllocExTag(size_t cb, size_t cbAlignment, uint32_t fFlags, const char *pszTag, void **ppv) RT_NO_THROW_DEF +{ + uint32_t fHdrFlags = RTMEMHDR_FLAG_ALLOC_EX; + PRTMEMHDR pHdr; + int rc; + RT_NOREF_PV(pszTag); + + RT_ASSERT_PREEMPT_CPUID_VAR(); + if (!(fFlags & RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC)) + RT_ASSERT_INTS_ON(); + + /* + * Fake up some alignment support. + */ + AssertMsgReturn(cbAlignment <= sizeof(void *), ("%zu (%#x)\n", cbAlignment, cbAlignment), VERR_UNSUPPORTED_ALIGNMENT); + if (cb < cbAlignment) + cb = cbAlignment; + + /* + * Validate and convert flags. + */ + AssertMsgReturn(!(fFlags & ~RTMEMALLOCEX_FLAGS_VALID_MASK_R0), ("%#x\n", fFlags), VERR_INVALID_PARAMETER); + if (fFlags & RTMEMALLOCEX_FLAGS_ZEROED) + fHdrFlags |= RTMEMHDR_FLAG_ZEROED; + if (fFlags & RTMEMALLOCEX_FLAGS_EXEC) + fHdrFlags |= RTMEMHDR_FLAG_EXEC; + if (fFlags & RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC) + fHdrFlags |= RTMEMHDR_FLAG_ANY_CTX_ALLOC; + if (fFlags & RTMEMALLOCEX_FLAGS_ANY_CTX_FREE) + fHdrFlags |= RTMEMHDR_FLAG_ANY_CTX_FREE; + + /* + * Do the allocation. + */ + rc = rtR0MemAllocEx(cb + RTR0MEM_FENCE_EXTRA, fHdrFlags, &pHdr); + if (RT_SUCCESS(rc)) + { + void *pv; + + Assert(pHdr->cbReq == cb + RTR0MEM_FENCE_EXTRA); + Assert((pHdr->fFlags & fFlags) == fFlags); + + /* + * Calc user pointer, initialize the memory if requested, and if + * memory strictness is enable set up the fence. + */ + pv = pHdr + 1; + *ppv = pv; + if (fFlags & RTMEMHDR_FLAG_ZEROED) + memset(pv, 0, pHdr->cb); + +#ifdef RTR0MEM_STRICT + pHdr->cbReq = (uint32_t)cb; + memcpy((uint8_t *)pv + cb, &g_abFence[0], RTR0MEM_FENCE_EXTRA); +#endif + } + else if (rc == VERR_NO_MEMORY && (fFlags & RTMEMALLOCEX_FLAGS_EXEC)) + rc = VERR_NO_EXEC_MEMORY; + + RT_ASSERT_PREEMPT_CPUID(); + return rc; +} +RT_EXPORT_SYMBOL(RTMemAllocExTag); + + +RTDECL(void) RTMemFreeEx(void *pv, size_t cb) RT_NO_THROW_DEF +{ + PRTMEMHDR pHdr; + RT_NOREF_PV(cb); + + if (!pv) + return; + + AssertPtr(pv); + pHdr = (PRTMEMHDR)pv - 1; + if (pHdr->u32Magic == RTMEMHDR_MAGIC) + { + RT_ASSERT_PREEMPT_CPUID_VAR(); + + Assert(pHdr->fFlags & RTMEMHDR_FLAG_ALLOC_EX); + if (!(pHdr->fFlags & RTMEMHDR_FLAG_ANY_CTX_FREE)) + RT_ASSERT_INTS_ON(); + AssertMsg(pHdr->cbReq == cb, ("cbReq=%zu cb=%zu\n", pHdr->cb, cb)); + +#ifdef RTR0MEM_STRICT + AssertReleaseMsg(!memcmp((uint8_t *)(pHdr + 1) + pHdr->cbReq, &g_abFence[0], RTR0MEM_FENCE_EXTRA), + ("pHdr=%p pv=%p cbReq=%u cb=%u fFlags=%#x\n" + "fence: %.*Rhxs\n" + "expected: %.*Rhxs\n", + pHdr, pv, pHdr->cbReq, pHdr->cb, pHdr->fFlags, + RTR0MEM_FENCE_EXTRA, (uint8_t *)(pHdr + 1) + pHdr->cbReq, + RTR0MEM_FENCE_EXTRA, &g_abFence[0])); +#endif + rtR0MemFree(pHdr); + RT_ASSERT_PREEMPT_CPUID(); + } + else + AssertMsgFailed(("pHdr->u32Magic=%RX32 pv=%p\n", pHdr->u32Magic, pv)); +} +RT_EXPORT_SYMBOL(RTMemFreeEx); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/alloc-r0drv.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/alloc-r0drv.h @@ -0,0 +1,101 @@ +/* $Id: alloc-r0drv.h $ */ +/** @file + * IPRT - Memory Allocation, Ring-0 Driver. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___r0drv_alloc_r0drv_h +#define ___r0drv_alloc_r0drv_h + +#include +#include +#include +#include "internal/magics.h" + +RT_C_DECLS_BEGIN + +/** + * Header which heading all memory blocks. + */ +typedef struct RTMEMHDR +{ + /** Magic (RTMEMHDR_MAGIC). */ + uint32_t u32Magic; + /** Block flags (RTMEMHDR_FLAG_*). */ + uint32_t fFlags; + /** The actual size of the block, header not included. */ + uint32_t cb; + /** The requested allocation size. */ + uint32_t cbReq; +} RTMEMHDR, *PRTMEMHDR; + + +/** @name RTMEMHDR::fFlags. + * @{ */ +/** Clear the allocated memory. */ +#define RTMEMHDR_FLAG_ZEROED RT_BIT(0) +/** Executable flag. */ +#define RTMEMHDR_FLAG_EXEC RT_BIT(1) +/** Use allocation method suitable for any context. */ +#define RTMEMHDR_FLAG_ANY_CTX_ALLOC RT_BIT(2) +/** Use allocation method which allow for freeing in any context. */ +#define RTMEMHDR_FLAG_ANY_CTX_FREE RT_BIT(3) +/** Both alloc and free in any context (or we're just darn lazy). */ +#define RTMEMHDR_FLAG_ANY_CTX (RTMEMHDR_FLAG_ANY_CTX_ALLOC | RTMEMHDR_FLAG_ANY_CTX_FREE) +/** Indicate that it was allocated by rtR0MemAllocExTag. */ +#define RTMEMHDR_FLAG_ALLOC_EX RT_BIT(4) +#ifdef RT_OS_LINUX +/** Linux: Allocated using vm_area hacks. */ +# define RTMEMHDR_FLAG_EXEC_VM_AREA RT_BIT(29) +/** Linux: Allocated from the special heap for executable memory. */ +# define RTMEMHDR_FLAG_EXEC_HEAP RT_BIT(30) +/** Linux: Allocated by kmalloc() instead of vmalloc(). */ +# define RTMEMHDR_FLAG_KMALLOC RT_BIT(31) +#endif +/** @} */ + + +/** + * Heap allocation back end for ring-0. + * + * @returns IPRT status code. VERR_NO_MEMORY suffices for RTMEMHDR_FLAG_EXEC, + * the caller will change it to VERR_NO_EXEC_MEMORY when appropriate. + * + * @param cb The amount of memory requested by the user. This does + * not include the header. + * @param fFlags The allocation flags and more. These should be + * assigned to RTMEMHDR::fFlags together with any flags + * the backend might be using. + * @param ppHdr Where to return the memory header on success. + */ +DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr); + +/** + * Free memory allocated by rtR0MemAllocEx. + * @param pHdr The memory block to free. (Never NULL.) + */ +DECLHIDDEN(void) rtR0MemFree(PRTMEMHDR pHdr); + +RT_C_DECLS_END +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/generic/semspinmutex-r0drv-generic.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/generic/semspinmutex-r0drv-generic.c @@ -0,0 +1,503 @@ +/* $Id: semspinmutex-r0drv-generic.c $ */ +/** @file + * IPRT - Spinning Mutex Semaphores, Ring-0 Driver, Generic. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#ifdef RT_OS_WINDOWS +# include "../nt/the-nt-kernel.h" +#endif +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include +#include +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Saved state information. + */ +typedef struct RTSEMSPINMUTEXSTATE +{ + /** Saved flags register. */ + RTCCUINTREG fSavedFlags; + /** Preemption state. */ + RTTHREADPREEMPTSTATE PreemptState; + /** Whether to spin or sleep. */ + bool fSpin; + /** Whether the flags have been saved. */ + bool fValidFlags; +} RTSEMSPINMUTEXSTATE; + +/** + * Spinning mutex semaphore. + */ +typedef struct RTSEMSPINMUTEXINTERNAL +{ + /** Magic value (RTSEMSPINMUTEX_MAGIC) + * RTCRITSECT_MAGIC is the value of an initialized & operational section. */ + uint32_t volatile u32Magic; + /** Flags. This is a combination of RTSEMSPINMUTEX_FLAGS_XXX and + * RTSEMSPINMUTEX_INT_FLAGS_XXX. */ + uint32_t volatile fFlags; + /** The owner thread. + * This is NIL if the semaphore is not owned by anyone. */ + RTNATIVETHREAD volatile hOwner; + /** Number of threads that are fighting for the lock. */ + int32_t volatile cLockers; + /** The semaphore to block on. */ + RTSEMEVENT hEventSem; + /** Saved state information of the owner. + * This will be restored by RTSemSpinRelease. */ + RTSEMSPINMUTEXSTATE SavedState; +} RTSEMSPINMUTEXINTERNAL; + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/*#define RTSEMSPINMUTEX_INT_FLAGS_MUST*/ + +/** Validates the handle, returning if invalid. */ +#define RTSEMSPINMUTEX_VALIDATE_RETURN(pThis) \ + do \ + { \ + uint32_t u32Magic; \ + AssertPtr(pThis); \ + u32Magic = (pThis)->u32Magic; \ + if (u32Magic != RTSEMSPINMUTEX_MAGIC) \ + { \ + AssertMsgFailed(("u32Magic=%#x pThis=%p\n", u32Magic, pThis)); \ + return u32Magic == RTSEMSPINMUTEX_MAGIC_DEAD ? VERR_SEM_DESTROYED : VERR_INVALID_HANDLE; \ + } \ + } while (0) + + +RTDECL(int) RTSemSpinMutexCreate(PRTSEMSPINMUTEX phSpinMtx, uint32_t fFlags) +{ + RTSEMSPINMUTEXINTERNAL *pThis; + int rc; + + AssertReturn(!(fFlags & ~RTSEMSPINMUTEX_FLAGS_VALID_MASK), VERR_INVALID_PARAMETER); + AssertPtr(phSpinMtx); + + /* + * Allocate and initialize the structure. + */ + pThis = (RTSEMSPINMUTEXINTERNAL *)RTMemAllocZ(sizeof(*pThis)); + if (!pThis) + return VERR_NO_MEMORY; + pThis->u32Magic = RTSEMSPINMUTEX_MAGIC; + pThis->fFlags = fFlags; + pThis->hOwner = NIL_RTNATIVETHREAD; + pThis->cLockers = 0; + rc = RTSemEventCreateEx(&pThis->hEventSem, RTSEMEVENT_FLAGS_NO_LOCK_VAL, NIL_RTLOCKVALCLASS, NULL); + if (RT_SUCCESS(rc)) + { + *phSpinMtx = pThis; + return VINF_SUCCESS; + } + + RTMemFree(pThis); + return rc; +} +RT_EXPORT_SYMBOL(RTSemSpinMutexCreate); + + +/** + * Helper for RTSemSpinMutexTryRequest and RTSemSpinMutexRequest. + * + * This will check the current context and see if it's usui + * + * @returns VINF_SUCCESS or VERR_SEM_BAD_CONTEXT. + * @param pState Output structure. + */ +static int rtSemSpinMutexEnter(RTSEMSPINMUTEXSTATE *pState, RTSEMSPINMUTEXINTERNAL *pThis) +{ +#ifndef RT_OS_WINDOWS + RTTHREADPREEMPTSTATE const StateInit = RTTHREADPREEMPTSTATE_INITIALIZER; +#endif + int rc = VINF_SUCCESS; + + /** @todo Later #1: When entering in interrupt context and we're not able to + * wake up threads from it, we could try switch the lock into pure + * spinlock mode. This would require that there are no other threads + * currently waiting on it and that the RTSEMSPINMUTEX_FLAGS_IRQ_SAFE + * flag is set. + * + * Later #2: Similarly, it is possible to turn on the + * RTSEMSPINMUTEX_FLAGS_IRQ_SAFE at run time if we manage to grab the + * semaphore ownership at interrupt time. We might want to try delay the + * RTSEMSPINMUTEX_FLAGS_IRQ_SAFE even, since we're fine if we get it... + */ + +#ifdef RT_OS_WINDOWS + /* + * NT: IRQL <= DISPATCH_LEVEL for waking up threads; IRQL < DISPATCH_LEVEL for sleeping. + */ + pState->PreemptState.uchOldIrql = KeGetCurrentIrql(); + if (pState->PreemptState.uchOldIrql > DISPATCH_LEVEL) + return VERR_SEM_BAD_CONTEXT; + + if (pState->PreemptState.uchOldIrql >= DISPATCH_LEVEL) + pState->fSpin = true; + else + { + pState->fSpin = false; + KeRaiseIrql(DISPATCH_LEVEL, &pState->PreemptState.uchOldIrql); + Assert(pState->PreemptState.uchOldIrql < DISPATCH_LEVEL); + } + +#elif defined(RT_OS_SOLARIS) + /* + * Solaris: RTSemEventSignal will do bad stuff on S10 if interrupts are disabled. + */ + if (!ASMIntAreEnabled()) + return VERR_SEM_BAD_CONTEXT; + + pState->fSpin = !RTThreadPreemptIsEnabled(NIL_RTTHREAD); + if (RTThreadIsInInterrupt(NIL_RTTHREAD)) + { + if (!(pThis->fFlags & RTSEMSPINMUTEX_FLAGS_IRQ_SAFE)) + rc = VINF_SEM_BAD_CONTEXT; /* Try, but owner might be interrupted. */ + pState->fSpin = true; + } + pState->PreemptState = StateInit; + RTThreadPreemptDisable(&pState->PreemptState); + +#elif defined(RT_OS_LINUX) || defined(RT_OS_OS2) + /* + * OSes on which RTSemEventSignal can be called from any context. + */ + pState->fSpin = !RTThreadPreemptIsEnabled(NIL_RTTHREAD); + if (RTThreadIsInInterrupt(NIL_RTTHREAD)) + { + if (!(pThis->fFlags & RTSEMSPINMUTEX_FLAGS_IRQ_SAFE)) + rc = VINF_SEM_BAD_CONTEXT; /* Try, but owner might be interrupted. */ + pState->fSpin = true; + } + pState->PreemptState = StateInit; + RTThreadPreemptDisable(&pState->PreemptState); + +#else /* PORTME: Check for context where we cannot wake up threads. */ + /* + * Default: ASSUME thread can be woken up if interrupts are enabled and + * we're not in an interrupt context. + * ASSUME that we can go to sleep if preemption is enabled. + */ + if ( RTThreadIsInInterrupt(NIL_RTTHREAD) + || !ASMIntAreEnabled()) + return VERR_SEM_BAD_CONTEXT; + + pState->fSpin = !RTThreadPreemptIsEnabled(NIL_RTTHREAD); + pState->PreemptState = StateInit; + RTThreadPreemptDisable(&pState->PreemptState); +#endif + + /* + * Disable interrupts if necessary. + */ + pState->fValidFlags = !!(pThis->fFlags & RTSEMSPINMUTEX_FLAGS_IRQ_SAFE); + if (pState->fValidFlags) + pState->fSavedFlags = ASMIntDisableFlags(); + else + pState->fSavedFlags = 0; + + return rc; +} + + +/** + * Helper for RTSemSpinMutexTryRequest, RTSemSpinMutexRequest and + * RTSemSpinMutexRelease. + * + * @param pState + */ +DECL_FORCE_INLINE(void) rtSemSpinMutexLeave(RTSEMSPINMUTEXSTATE *pState) +{ + /* + * Restore the interrupt flag. + */ + if (pState->fValidFlags) + ASMSetFlags(pState->fSavedFlags); + +#ifdef RT_OS_WINDOWS + /* + * NT: Lower the IRQL if we raised it. + */ + if (pState->PreemptState.uchOldIrql < DISPATCH_LEVEL) + KeLowerIrql(pState->PreemptState.uchOldIrql); +#else + /* + * Default: Restore preemption. + */ + RTThreadPreemptRestore(&pState->PreemptState); +#endif +} + + +RTDECL(int) RTSemSpinMutexTryRequest(RTSEMSPINMUTEX hSpinMtx) +{ + RTSEMSPINMUTEXINTERNAL *pThis = hSpinMtx; + RTNATIVETHREAD hSelf = RTThreadNativeSelf(); + RTSEMSPINMUTEXSTATE State; + bool fRc; + int rc; + + Assert(hSelf != NIL_RTNATIVETHREAD); + RTSEMSPINMUTEX_VALIDATE_RETURN(pThis); + + /* + * Check context, disable preemption and save flags if necessary. + */ + rc = rtSemSpinMutexEnter(&State, pThis); + if (RT_FAILURE(rc)) + return rc; + + /* + * Try take the ownership. + */ + ASMAtomicCmpXchgHandle(&pThis->hOwner, hSelf, NIL_RTNATIVETHREAD, fRc); + if (!fRc) + { + /* Busy, too bad. Check for attempts at nested access. */ + rc = VERR_SEM_BUSY; + if (RT_UNLIKELY(pThis->hOwner == hSelf)) + { + AssertMsgFailed(("%p attempt at nested access\n")); + rc = VERR_SEM_NESTED; + } + + rtSemSpinMutexLeave(&State); + return rc; + } + + /* + * We're the semaphore owner. + */ + ASMAtomicIncS32(&pThis->cLockers); + pThis->SavedState = State; + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemSpinMutexTryRequest); + + +RTDECL(int) RTSemSpinMutexRequest(RTSEMSPINMUTEX hSpinMtx) +{ + RTSEMSPINMUTEXINTERNAL *pThis = hSpinMtx; + RTNATIVETHREAD hSelf = RTThreadNativeSelf(); + RTSEMSPINMUTEXSTATE State; + bool fRc; + int rc; + + Assert(hSelf != NIL_RTNATIVETHREAD); + RTSEMSPINMUTEX_VALIDATE_RETURN(pThis); + + /* + * Check context, disable preemption and save flags if necessary. + */ + rc = rtSemSpinMutexEnter(&State, pThis); + if (RT_FAILURE(rc)) + return rc; + + /* + * Try take the ownership. + */ + ASMAtomicIncS32(&pThis->cLockers); + ASMAtomicCmpXchgHandle(&pThis->hOwner, hSelf, NIL_RTNATIVETHREAD, fRc); + if (!fRc) + { + uint32_t cSpins; + + /* + * It's busy. Check if it's an attempt at nested access. + */ + if (RT_UNLIKELY(pThis->hOwner == hSelf)) + { + AssertMsgFailed(("%p attempt at nested access\n")); + rtSemSpinMutexLeave(&State); + return VERR_SEM_NESTED; + } + + /* + * Return if we're in interrupt context and the semaphore isn't + * configure to be interrupt safe. + */ + if (rc == VINF_SEM_BAD_CONTEXT) + { + rtSemSpinMutexLeave(&State); + return VERR_SEM_BAD_CONTEXT; + } + + /* + * Ok, we have to wait. + */ + if (State.fSpin) + { + for (cSpins = 0; ; cSpins++) + { + ASMAtomicCmpXchgHandle(&pThis->hOwner, hSelf, NIL_RTNATIVETHREAD, fRc); + if (fRc) + break; + ASMNopPause(); + if (RT_UNLIKELY(pThis->u32Magic != RTSEMSPINMUTEX_MAGIC)) + { + rtSemSpinMutexLeave(&State); + return VERR_SEM_DESTROYED; + } + + /* + * "Yield" once in a while. This may lower our IRQL/PIL which + * may preempting us, and it will certainly stop the hammering + * of hOwner for a little while. + */ + if ((cSpins & 0x7f) == 0x1f) + { + rtSemSpinMutexLeave(&State); + rtSemSpinMutexEnter(&State, pThis); + Assert(State.fSpin); + } + } + } + else + { + for (cSpins = 0;; cSpins++) + { + ASMAtomicCmpXchgHandle(&pThis->hOwner, hSelf, NIL_RTNATIVETHREAD, fRc); + if (fRc) + break; + ASMNopPause(); + if (RT_UNLIKELY(pThis->u32Magic != RTSEMSPINMUTEX_MAGIC)) + { + rtSemSpinMutexLeave(&State); + return VERR_SEM_DESTROYED; + } + + if ((cSpins & 15) == 15) /* spin a bit before going sleep (again). */ + { + rtSemSpinMutexLeave(&State); + + rc = RTSemEventWait(pThis->hEventSem, RT_INDEFINITE_WAIT); + ASMCompilerBarrier(); + if (RT_SUCCESS(rc)) + AssertReturn(pThis->u32Magic == RTSEMSPINMUTEX_MAGIC, VERR_SEM_DESTROYED); + else if (rc == VERR_INTERRUPTED) + AssertRC(rc); /* shouldn't happen */ + else + { + AssertRC(rc); + return rc; + } + + rc = rtSemSpinMutexEnter(&State, pThis); + AssertRCReturn(rc, rc); + Assert(!State.fSpin); + } + } + } + } + + /* + * We're the semaphore owner. + */ + pThis->SavedState = State; + Assert(pThis->hOwner == hSelf); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemSpinMutexRequest); + + +RTDECL(int) RTSemSpinMutexRelease(RTSEMSPINMUTEX hSpinMtx) +{ + RTSEMSPINMUTEXINTERNAL *pThis = hSpinMtx; + RTNATIVETHREAD hSelf = RTThreadNativeSelf(); + uint32_t cLockers; + RTSEMSPINMUTEXSTATE State; + bool fRc; + + Assert(hSelf != NIL_RTNATIVETHREAD); + RTSEMSPINMUTEX_VALIDATE_RETURN(pThis); + + /* + * Get the saved state and try release the semaphore. + */ + State = pThis->SavedState; + ASMCompilerBarrier(); + ASMAtomicCmpXchgHandle(&pThis->hOwner, NIL_RTNATIVETHREAD, hSelf, fRc); + AssertMsgReturn(fRc, + ("hOwner=%p hSelf=%p cLockers=%d\n", pThis->hOwner, hSelf, pThis->cLockers), + VERR_NOT_OWNER); + + cLockers = ASMAtomicDecS32(&pThis->cLockers); + rtSemSpinMutexLeave(&State); + if (cLockers > 0) + { + int rc = RTSemEventSignal(pThis->hEventSem); + AssertReleaseMsg(RT_SUCCESS(rc), ("RTSemEventSignal -> %Rrc\n", rc)); + } + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemSpinMutexRelease); + + +RTDECL(int) RTSemSpinMutexDestroy(RTSEMSPINMUTEX hSpinMtx) +{ + RTSEMSPINMUTEXINTERNAL *pThis; + RTSEMEVENT hEventSem; + int rc; + + if (hSpinMtx == NIL_RTSEMSPINMUTEX) + return VINF_SUCCESS; + pThis = hSpinMtx; + RTSEMSPINMUTEX_VALIDATE_RETURN(pThis); + + /* No destruction races allowed! */ + AssertMsg( pThis->cLockers == 0 + && pThis->hOwner == NIL_RTNATIVETHREAD, + ("pThis=%p cLockers=%d hOwner=%p\n", pThis, pThis->cLockers, pThis->hOwner)); + + /* + * Invalidate the structure, free the mutex and free the structure. + */ + ASMAtomicWriteU32(&pThis->u32Magic, RTSEMSPINMUTEX_MAGIC_DEAD); + hEventSem = pThis->hEventSem; + pThis->hEventSem = NIL_RTSEMEVENT; + rc = RTSemEventDestroy(hEventSem); AssertRC(rc); + + RTMemFree(pThis); + return rc; +} +RT_EXPORT_SYMBOL(RTSemSpinMutexDestroy); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/initterm-r0drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/initterm-r0drv.c @@ -0,0 +1,164 @@ +/* $Id: initterm-r0drv.cpp $ */ +/** @file + * IPRT - Initialization & Termination, R0 Driver, Common. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#ifndef IN_GUEST /* play safe for now */ +# include "r0drv/mp-r0drv.h" +# include "r0drv/power-r0drv.h" +#endif + +#include "internal/initterm.h" +#include "internal/mem.h" +#include "internal/thread.h" + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** Count of current IPRT users. + * In ring-0 several drivers / kmods / kexts / wossnames may share the + * same runtime code. So, we need to keep count in order not to terminate + * it prematurely. */ +static int32_t volatile g_crtR0Users = 0; + + +/** + * Initializes the ring-0 driver runtime library. + * + * @returns iprt status code. + * @param fReserved Flags reserved for the future. + */ +RTR0DECL(int) RTR0Init(unsigned fReserved) +{ + int rc; + uint32_t cNewUsers; + Assert(fReserved == 0); RT_NOREF_PV(fReserved); +#ifndef RT_OS_SOLARIS /* On Solaris our thread preemption information is only obtained in rtR0InitNative().*/ + RT_ASSERT_PREEMPTIBLE(); +#endif + + /* + * The first user initializes it. + * We rely on the module loader to ensure that there are no + * initialization races should two modules share the IPRT. + */ + cNewUsers = ASMAtomicIncS32(&g_crtR0Users); + if (cNewUsers != 1) + { + if (cNewUsers > 1) + return VINF_SUCCESS; + ASMAtomicDecS32(&g_crtR0Users); + return VERR_INTERNAL_ERROR_3; + } + + rc = rtR0InitNative(); + if (RT_SUCCESS(rc)) + { +#ifdef RTR0MEM_WITH_EF_APIS + rtR0MemEfInit(); +#endif + rc = rtThreadInit(); + if (RT_SUCCESS(rc)) + { +#ifndef IN_GUEST /* play safe for now */ + rc = rtR0MpNotificationInit(); + if (RT_SUCCESS(rc)) + { + rc = rtR0PowerNotificationInit(); + if (RT_SUCCESS(rc)) + return rc; + rtR0MpNotificationTerm(); + } +#else + if (RT_SUCCESS(rc)) + return rc; +#endif + rtThreadTerm(); + } +#ifdef RTR0MEM_WITH_EF_APIS + rtR0MemEfTerm(); +#endif + rtR0TermNative(); + } + return rc; +} +RT_EXPORT_SYMBOL(RTR0Init); + + +static void rtR0Term(void) +{ + rtThreadTerm(); +#ifndef IN_GUEST /* play safe for now */ + rtR0PowerNotificationTerm(); + rtR0MpNotificationTerm(); +#endif +#ifdef RTR0MEM_WITH_EF_APIS + rtR0MemEfTerm(); +#endif + rtR0TermNative(); +} + + +/** + * Terminates the ring-0 driver runtime library. + */ +RTR0DECL(void) RTR0Term(void) +{ + int32_t cNewUsers; + RT_ASSERT_PREEMPTIBLE(); + + cNewUsers = ASMAtomicDecS32(&g_crtR0Users); + Assert(cNewUsers >= 0); + if (cNewUsers == 0) + rtR0Term(); + else if (cNewUsers < 0) + ASMAtomicIncS32(&g_crtR0Users); +} +RT_EXPORT_SYMBOL(RTR0Term); + + +/* Note! Should *not* be exported since it's only for static linking. */ +RTR0DECL(void) RTR0TermForced(void) +{ + RT_ASSERT_PREEMPTIBLE(); + + AssertMsg(g_crtR0Users == 1, ("%d\n", g_crtR0Users)); + ASMAtomicWriteS32(&g_crtR0Users, 0); + + rtR0Term(); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/RTLogWriteDebugger-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/RTLogWriteDebugger-r0drv-linux.c @@ -0,0 +1,43 @@ +/* $Id: RTLogWriteDebugger-r0drv-linux.c $ */ +/** @file + * IPRT - Log To Debugger, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + + +RTDECL(void) RTLogWriteDebugger(const char *pch, size_t cb) +{ + IPRT_LINUX_SAVE_EFL_AC(); + printk("%.*s", (int)cb, pch); + IPRT_LINUX_RESTORE_EFL_AC(); +} +RT_EXPORT_SYMBOL(RTLogWriteDebugger); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/alloc-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/alloc-r0drv-linux.c @@ -0,0 +1,501 @@ +/* $Id: alloc-r0drv-linux.c $ */ +/** @file + * IPRT - Memory Allocation, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#include +#include "r0drv/alloc-r0drv.h" + + +#if (defined(RT_ARCH_AMD64) || defined(DOXYGEN_RUNNING)) && !defined(RTMEMALLOC_EXEC_HEAP) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) +/** + * Starting with 2.6.23 we can use __get_vm_area and map_vm_area to allocate + * memory in the moduel range. This is preferrable to the exec heap below. + */ +# define RTMEMALLOC_EXEC_VM_AREA +# else +/** + * We need memory in the module range (~2GB to ~0) this can only be obtained + * thru APIs that are not exported (see module_alloc()). + * + * So, we'll have to create a quick and dirty heap here using BSS memory. + * Very annoying and it's going to restrict us! + */ +# define RTMEMALLOC_EXEC_HEAP +# endif +#endif + +#ifdef RTMEMALLOC_EXEC_HEAP +# include +# include +# include +#endif + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +#ifdef RTMEMALLOC_EXEC_VM_AREA +/** + * Extended header used for headers marked with RTMEMHDR_FLAG_EXEC_VM_AREA. + * + * This is used with allocating executable memory, for things like generated + * code and loaded modules. + */ +typedef struct RTMEMLNXHDREX +{ + /** The VM area for this allocation. */ + struct vm_struct *pVmArea; + void *pvDummy; + /** The header we present to the generic API. */ + RTMEMHDR Hdr; +} RTMEMLNXHDREX; +AssertCompileSize(RTMEMLNXHDREX, 32); +/** Pointer to an extended memory header. */ +typedef RTMEMLNXHDREX *PRTMEMLNXHDREX; +#endif + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#ifdef RTMEMALLOC_EXEC_HEAP +/** The heap. */ +static RTHEAPSIMPLE g_HeapExec = NIL_RTHEAPSIMPLE; +/** Spinlock protecting the heap. */ +static RTSPINLOCK g_HeapExecSpinlock = NIL_RTSPINLOCK; +#endif + + +/** + * API for cleaning up the heap spinlock on IPRT termination. + * This is as RTMemExecDonate specific to AMD64 Linux/GNU. + */ +DECLHIDDEN(void) rtR0MemExecCleanup(void) +{ +#ifdef RTMEMALLOC_EXEC_HEAP + RTSpinlockDestroy(g_HeapExecSpinlock); + g_HeapExecSpinlock = NIL_RTSPINLOCK; +#endif +} + + +/** + * Donate read+write+execute memory to the exec heap. + * + * This API is specific to AMD64 and Linux/GNU. A kernel module that desires to + * use RTMemExecAlloc on AMD64 Linux/GNU will have to donate some statically + * allocated memory in the module if it wishes for GCC generated code to work. + * GCC can only generate modules that work in the address range ~2GB to ~0 + * currently. + * + * The API only accept one single donation. + * + * @returns IPRT status code. + * @retval VERR_NOT_SUPPORTED if the code isn't enabled. + * @param pvMemory Pointer to the memory block. + * @param cb The size of the memory block. + */ +RTR0DECL(int) RTR0MemExecDonate(void *pvMemory, size_t cb) +{ +#ifdef RTMEMALLOC_EXEC_HEAP + int rc; + AssertReturn(g_HeapExec == NIL_RTHEAPSIMPLE, VERR_WRONG_ORDER); + + rc = RTSpinlockCreate(&g_HeapExecSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "RTR0MemExecDonate"); + if (RT_SUCCESS(rc)) + { + rc = RTHeapSimpleInit(&g_HeapExec, pvMemory, cb); + if (RT_FAILURE(rc)) + rtR0MemExecCleanup(); + } + return rc; +#else + RT_NOREF_PV(pvMemory); RT_NOREF_PV(cb); + return VERR_NOT_SUPPORTED; +#endif +} +RT_EXPORT_SYMBOL(RTR0MemExecDonate); + + + +#ifdef RTMEMALLOC_EXEC_VM_AREA +/** + * Allocate executable kernel memory in the module range. + * + * @returns Pointer to a allocation header success. NULL on failure. + * + * @param cb The size the user requested. + */ +static PRTMEMHDR rtR0MemAllocExecVmArea(size_t cb) +{ + size_t const cbAlloc = RT_ALIGN_Z(sizeof(RTMEMLNXHDREX) + cb, PAGE_SIZE); + size_t const cPages = cbAlloc >> PAGE_SHIFT; + struct page **papPages; + struct vm_struct *pVmArea; + size_t iPage; + + pVmArea = __get_vm_area(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END); + if (!pVmArea) + return NULL; + pVmArea->nr_pages = 0; /* paranoia? */ + pVmArea->pages = NULL; /* paranoia? */ + + papPages = (struct page **)kmalloc(cPages * sizeof(papPages[0]), GFP_KERNEL | __GFP_NOWARN); + if (!papPages) + { + vunmap(pVmArea->addr); + return NULL; + } + + for (iPage = 0; iPage < cPages; iPage++) + { + papPages[iPage] = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN); + if (!papPages[iPage]) + break; + } + if (iPage == cPages) + { + /* + * Map the pages. + * + * Not entirely sure we really need to set nr_pages and pages here, but + * they provide a very convenient place for storing something we need + * in the free function, if nothing else... + */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) + struct page **papPagesIterator = papPages; +# endif + pVmArea->nr_pages = cPages; + pVmArea->pages = papPages; + if (!map_vm_area(pVmArea, PAGE_KERNEL_EXEC, +# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) + &papPagesIterator +# else + papPages +# endif + )) + { + PRTMEMLNXHDREX pHdrEx = (PRTMEMLNXHDREX)pVmArea->addr; + pHdrEx->pVmArea = pVmArea; + pHdrEx->pvDummy = NULL; + return &pHdrEx->Hdr; + } + /* bail out */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) + pVmArea->nr_pages = papPagesIterator - papPages; +# endif + } + + vunmap(pVmArea->addr); + + while (iPage-- > 0) + __free_page(papPages[iPage]); + kfree(papPages); + + return NULL; +} +#endif /* RTMEMALLOC_EXEC_VM_AREA */ + + +/** + * OS specific allocation function. + */ +DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr) +{ + PRTMEMHDR pHdr; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Allocate. + */ + if (fFlags & RTMEMHDR_FLAG_EXEC) + { + if (fFlags & RTMEMHDR_FLAG_ANY_CTX) + return VERR_NOT_SUPPORTED; + +#if defined(RT_ARCH_AMD64) +# ifdef RTMEMALLOC_EXEC_HEAP + if (g_HeapExec != NIL_RTHEAPSIMPLE) + { + RTSpinlockAcquire(g_HeapExecSpinlock); + pHdr = (PRTMEMHDR)RTHeapSimpleAlloc(g_HeapExec, cb + sizeof(*pHdr), 0); + RTSpinlockRelease(g_HeapExecSpinlock); + fFlags |= RTMEMHDR_FLAG_EXEC_HEAP; + } + else + pHdr = NULL; + +# elif defined(RTMEMALLOC_EXEC_VM_AREA) + pHdr = rtR0MemAllocExecVmArea(cb); + fFlags |= RTMEMHDR_FLAG_EXEC_VM_AREA; + +# else /* !RTMEMALLOC_EXEC_HEAP */ +# error "you don not want to go here..." + pHdr = (PRTMEMHDR)__vmalloc(cb + sizeof(*pHdr), GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN, MY_PAGE_KERNEL_EXEC); +# endif /* !RTMEMALLOC_EXEC_HEAP */ + +#elif defined(PAGE_KERNEL_EXEC) && defined(CONFIG_X86_PAE) + pHdr = (PRTMEMHDR)__vmalloc(cb + sizeof(*pHdr), GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN, MY_PAGE_KERNEL_EXEC); +#else + pHdr = (PRTMEMHDR)vmalloc(cb + sizeof(*pHdr)); +#endif + } + else + { + if ( +#if 1 /* vmalloc has serious performance issues, avoid it. */ + cb <= PAGE_SIZE*16 - sizeof(*pHdr) +#else + cb <= PAGE_SIZE +#endif + || (fFlags & RTMEMHDR_FLAG_ANY_CTX) + ) + { + fFlags |= RTMEMHDR_FLAG_KMALLOC; + pHdr = kmalloc(cb + sizeof(*pHdr), + (fFlags & RTMEMHDR_FLAG_ANY_CTX_ALLOC) ? (GFP_ATOMIC | __GFP_NOWARN) + : (GFP_KERNEL | __GFP_NOWARN)); + if (RT_UNLIKELY( !pHdr + && cb > PAGE_SIZE + && !(fFlags & RTMEMHDR_FLAG_ANY_CTX) )) + { + fFlags &= ~RTMEMHDR_FLAG_KMALLOC; + pHdr = vmalloc(cb + sizeof(*pHdr)); + } + } + else + pHdr = vmalloc(cb + sizeof(*pHdr)); + } + if (RT_UNLIKELY(!pHdr)) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + /* + * Initialize. + */ + pHdr->u32Magic = RTMEMHDR_MAGIC; + pHdr->fFlags = fFlags; + pHdr->cb = cb; + pHdr->cbReq = cb; + + *ppHdr = pHdr; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} + + +/** + * OS specific free function. + */ +DECLHIDDEN(void) rtR0MemFree(PRTMEMHDR pHdr) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + pHdr->u32Magic += 1; + if (pHdr->fFlags & RTMEMHDR_FLAG_KMALLOC) + kfree(pHdr); +#ifdef RTMEMALLOC_EXEC_HEAP + else if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC_HEAP) + { + RTSpinlockAcquire(g_HeapExecSpinlock); + RTHeapSimpleFree(g_HeapExec, pHdr); + RTSpinlockRelease(g_HeapExecSpinlock); + } +#endif +#ifdef RTMEMALLOC_EXEC_VM_AREA + else if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC_VM_AREA) + { + PRTMEMLNXHDREX pHdrEx = RT_FROM_MEMBER(pHdr, RTMEMLNXHDREX, Hdr); + size_t iPage = pHdrEx->pVmArea->nr_pages; + struct page **papPages = pHdrEx->pVmArea->pages; + void *pvMapping = pHdrEx->pVmArea->addr; + + vunmap(pvMapping); + + while (iPage-- > 0) + __free_page(papPages[iPage]); + kfree(papPages); + } +#endif + else + vfree(pHdr); + + IPRT_LINUX_RESTORE_EFL_AC(); +} + + + +/** + * Compute order. Some functions allocate 2^order pages. + * + * @returns order. + * @param cPages Number of pages. + */ +static int CalcPowerOf2Order(unsigned long cPages) +{ + int iOrder; + unsigned long cTmp; + + for (iOrder = 0, cTmp = cPages; cTmp >>= 1; ++iOrder) + ; + if (cPages & ~(1 << iOrder)) + ++iOrder; + + return iOrder; +} + + +/** + * Allocates physical contiguous memory (below 4GB). + * The allocation is page aligned and the content is undefined. + * + * @returns Pointer to the memory block. This is page aligned. + * @param pPhys Where to store the physical address. + * @param cb The allocation size in bytes. This is always + * rounded up to PAGE_SIZE. + */ +RTR0DECL(void *) RTMemContAlloc(PRTCCPHYS pPhys, size_t cb) +{ + int cOrder; + unsigned cPages; + struct page *paPages; + void *pvRet; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * validate input. + */ + Assert(VALID_PTR(pPhys)); + Assert(cb > 0); + + /* + * Allocate page pointer array. + */ + cb = RT_ALIGN_Z(cb, PAGE_SIZE); + cPages = cb >> PAGE_SHIFT; + cOrder = CalcPowerOf2Order(cPages); +#if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) + /* ZONE_DMA32: 0-4GB */ + paPages = alloc_pages(GFP_DMA32 | __GFP_NOWARN, cOrder); + if (!paPages) +#endif +#ifdef RT_ARCH_AMD64 + /* ZONE_DMA; 0-16MB */ + paPages = alloc_pages(GFP_DMA | __GFP_NOWARN, cOrder); +#else + /* ZONE_NORMAL: 0-896MB */ + paPages = alloc_pages(GFP_USER | __GFP_NOWARN, cOrder); +#endif + if (paPages) + { + /* + * Reserve the pages and mark them executable. + */ + unsigned iPage; + for (iPage = 0; iPage < cPages; iPage++) + { + Assert(!PageHighMem(&paPages[iPage])); + if (iPage + 1 < cPages) + { + AssertMsg( (uintptr_t)phys_to_virt(page_to_phys(&paPages[iPage])) + PAGE_SIZE + == (uintptr_t)phys_to_virt(page_to_phys(&paPages[iPage + 1])) + && page_to_phys(&paPages[iPage]) + PAGE_SIZE + == page_to_phys(&paPages[iPage + 1]), + ("iPage=%i cPages=%u [0]=%#llx,%p [1]=%#llx,%p\n", iPage, cPages, + (long long)page_to_phys(&paPages[iPage]), phys_to_virt(page_to_phys(&paPages[iPage])), + (long long)page_to_phys(&paPages[iPage + 1]), phys_to_virt(page_to_phys(&paPages[iPage + 1])) )); + } + + SetPageReserved(&paPages[iPage]); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 4, 20) /** @todo find the exact kernel where change_page_attr was introduced. */ + MY_SET_PAGES_EXEC(&paPages[iPage], 1); +#endif + } + *pPhys = page_to_phys(paPages); + pvRet = phys_to_virt(page_to_phys(paPages)); + } + else + pvRet = NULL; + + IPRT_LINUX_RESTORE_EFL_AC(); + return pvRet; +} +RT_EXPORT_SYMBOL(RTMemContAlloc); + + +/** + * Frees memory allocated using RTMemContAlloc(). + * + * @param pv Pointer to return from RTMemContAlloc(). + * @param cb The cb parameter passed to RTMemContAlloc(). + */ +RTR0DECL(void) RTMemContFree(void *pv, size_t cb) +{ + if (pv) + { + int cOrder; + unsigned cPages; + unsigned iPage; + struct page *paPages; + IPRT_LINUX_SAVE_EFL_AC(); + + /* validate */ + AssertMsg(!((uintptr_t)pv & PAGE_OFFSET_MASK), ("pv=%p\n", pv)); + Assert(cb > 0); + + /* calc order and get pages */ + cb = RT_ALIGN_Z(cb, PAGE_SIZE); + cPages = cb >> PAGE_SHIFT; + cOrder = CalcPowerOf2Order(cPages); + paPages = virt_to_page(pv); + + /* + * Restore page attributes freeing the pages. + */ + for (iPage = 0; iPage < cPages; iPage++) + { + ClearPageReserved(&paPages[iPage]); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 4, 20) /** @todo find the exact kernel where change_page_attr was introduced. */ + MY_SET_PAGES_NOEXEC(&paPages[iPage], 1); +#endif + } + __free_pages(paPages, cOrder); + IPRT_LINUX_RESTORE_EFL_AC(); + } +} +RT_EXPORT_SYMBOL(RTMemContFree); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/assert-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/assert-r0drv-linux.c @@ -0,0 +1,74 @@ +/* $Id: assert-r0drv-linux.c $ */ +/** @file + * IPRT - Assertion Workers, Ring-0 Drivers, Linux. + */ + +/* + * Copyright (C) 2007-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include +#include +#include +#include + +#include "internal/assert.h" + + +DECLHIDDEN(void) rtR0AssertNativeMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction) +{ + IPRT_LINUX_SAVE_EFL_AC(); + printk(KERN_EMERG + "\r\n!!Assertion Failed!!\r\n" + "Expression: %s\r\n" + "Location : %s(%d) %s\r\n", + pszExpr, pszFile, uLine, pszFunction); + IPRT_LINUX_RESTORE_EFL_AC(); +} + + +DECLHIDDEN(void) rtR0AssertNativeMsg2V(bool fInitial, const char *pszFormat, va_list va) +{ + char szMsg[256]; + IPRT_LINUX_SAVE_EFL_AC(); + + RTStrPrintfV(szMsg, sizeof(szMsg) - 1, pszFormat, va); + szMsg[sizeof(szMsg) - 1] = '\0'; + printk(KERN_EMERG "%s", szMsg); + + NOREF(fInitial); + IPRT_LINUX_RESTORE_EFL_AC(); +} + + +RTR0DECL(void) RTR0AssertPanicSystem(void) +{ + panic("%s%s", g_szRTAssertMsg1, g_szRTAssertMsg2); +} +RT_EXPORT_SYMBOL(RTR0AssertPanicSystem); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/initterm-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/initterm-r0drv-linux.c @@ -0,0 +1,137 @@ +/* $Id: initterm-r0drv-linux.c $ */ +/** @file + * IPRT - Initialization & Termination, R0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include +#include +#include "internal/initterm.h" + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The IPRT work queue. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +static struct workqueue_struct *g_prtR0LnxWorkQueue; +#else +static DECLARE_TASK_QUEUE(g_rtR0LnxWorkQueue); +#endif + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +/* in alloc-r0drv0-linux.c */ +DECLHIDDEN(void) rtR0MemExecCleanup(void); + + +/** + * Pushes an item onto the IPRT work queue. + * + * @param pWork The work item. + * @param pfnWorker The callback function. It will be called back + * with @a pWork as argument. + */ +DECLHIDDEN(void) rtR0LnxWorkqueuePush(RTR0LNXWORKQUEUEITEM *pWork, void (*pfnWorker)(RTR0LNXWORKQUEUEITEM *)) +{ + IPRT_LINUX_SAVE_EFL_AC(); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) + INIT_WORK(pWork, pfnWorker); +# else + INIT_WORK(pWork, pfnWorker, pWork); +# endif + queue_work(g_prtR0LnxWorkQueue, pWork); +#else + INIT_TQUEUE(pWork, (void (*)(void *))pfnWorker, pWork); + queue_task(pWork, &g_rtR0LnxWorkQueue); +#endif + + IPRT_LINUX_RESTORE_EFL_AC(); +} + + +/** + * Flushes all items in the IPRT work queue. + * + * @remarks This is mostly for 2.4.x compatability. Must not be called from + * atomic contexts or with unncessary locks held. + */ +DECLHIDDEN(void) rtR0LnxWorkqueueFlush(void) +{ + IPRT_LINUX_SAVE_EFL_AC(); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) + flush_workqueue(g_prtR0LnxWorkQueue); +#else + run_task_queue(&g_rtR0LnxWorkQueue); +#endif + + IPRT_LINUX_RESTORE_EFL_AC(); +} + + +DECLHIDDEN(int) rtR0InitNative(void) +{ + int rc = VINF_SUCCESS; + IPRT_LINUX_SAVE_EFL_AC(); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) + g_prtR0LnxWorkQueue = create_workqueue("iprt-VBoxWQueue"); + #else + g_prtR0LnxWorkQueue = create_workqueue("iprt-VBoxQ"); + #endif + if (!g_prtR0LnxWorkQueue) + rc = VERR_NO_MEMORY; +#endif + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(void) rtR0TermNative(void) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + rtR0LnxWorkqueueFlush(); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) + destroy_workqueue(g_prtR0LnxWorkQueue); + g_prtR0LnxWorkQueue = NULL; +#endif + + rtR0MemExecCleanup(); + + IPRT_LINUX_RESTORE_EFL_AC(); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/memobj-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/memobj-r0drv-linux.c @@ -0,0 +1,1767 @@ +/* $Id: memobj-r0drv-linux.c $ */ +/** @file + * IPRT - Ring-0 Memory Objects, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" + +#include +#include +#include +#include +#include +#include +#include "internal/memobj.h" + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/* early 2.6 kernels */ +#ifndef PAGE_SHARED_EXEC +# define PAGE_SHARED_EXEC PAGE_SHARED +#endif +#ifndef PAGE_READONLY_EXEC +# define PAGE_READONLY_EXEC PAGE_READONLY +#endif + +/* + * 2.6.29+ kernels don't work with remap_pfn_range() anymore because + * track_pfn_vma_new() is apparently not defined for non-RAM pages. + * It should be safe to use vm_insert_page() older kernels as well. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) +# define VBOX_USE_INSERT_PAGE +#endif +#if defined(CONFIG_X86_PAE) \ + && ( defined(HAVE_26_STYLE_REMAP_PAGE_RANGE) \ + || ( LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) \ + && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11))) +# define VBOX_USE_PAE_HACK +#endif + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * The Darwin version of the memory object structure. + */ +typedef struct RTR0MEMOBJLNX +{ + /** The core structure. */ + RTR0MEMOBJINTERNAL Core; + /** Set if the allocation is contiguous. + * This means it has to be given back as one chunk. */ + bool fContiguous; + /** Set if we've vmap'ed the memory into ring-0. */ + bool fMappedToRing0; + /** The pages in the apPages array. */ + size_t cPages; + /** Array of struct page pointers. (variable size) */ + struct page *apPages[1]; +} RTR0MEMOBJLNX, *PRTR0MEMOBJLNX; + + +static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx); + + +/** + * Helper that converts from a RTR0PROCESS handle to a linux task. + * + * @returns The corresponding Linux task. + * @param R0Process IPRT ring-0 process handle. + */ +static struct task_struct *rtR0ProcessToLinuxTask(RTR0PROCESS R0Process) +{ + /** @todo fix rtR0ProcessToLinuxTask!! */ + /** @todo many (all?) callers currently assume that we return 'current'! */ + return R0Process == RTR0ProcHandleSelf() ? current : NULL; +} + + +/** + * Compute order. Some functions allocate 2^order pages. + * + * @returns order. + * @param cPages Number of pages. + */ +static int rtR0MemObjLinuxOrder(size_t cPages) +{ + int iOrder; + size_t cTmp; + + for (iOrder = 0, cTmp = cPages; cTmp >>= 1; ++iOrder) + ; + if (cPages & ~((size_t)1 << iOrder)) + ++iOrder; + + return iOrder; +} + + +/** + * Converts from RTMEM_PROT_* to Linux PAGE_*. + * + * @returns Linux page protection constant. + * @param fProt The IPRT protection mask. + * @param fKernel Whether it applies to kernel or user space. + */ +static pgprot_t rtR0MemObjLinuxConvertProt(unsigned fProt, bool fKernel) +{ + switch (fProt) + { + default: + AssertMsgFailed(("%#x %d\n", fProt, fKernel)); + case RTMEM_PROT_NONE: + return PAGE_NONE; + + case RTMEM_PROT_READ: + return fKernel ? PAGE_KERNEL_RO : PAGE_READONLY; + + case RTMEM_PROT_WRITE: + case RTMEM_PROT_WRITE | RTMEM_PROT_READ: + return fKernel ? PAGE_KERNEL : PAGE_SHARED; + + case RTMEM_PROT_EXEC: + case RTMEM_PROT_EXEC | RTMEM_PROT_READ: +#if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) + if (fKernel) + { + pgprot_t fPg = MY_PAGE_KERNEL_EXEC; + pgprot_val(fPg) &= ~_PAGE_RW; + return fPg; + } + return PAGE_READONLY_EXEC; +#else + return fKernel ? MY_PAGE_KERNEL_EXEC : PAGE_READONLY_EXEC; +#endif + + case RTMEM_PROT_WRITE | RTMEM_PROT_EXEC: + case RTMEM_PROT_WRITE | RTMEM_PROT_EXEC | RTMEM_PROT_READ: + return fKernel ? MY_PAGE_KERNEL_EXEC : PAGE_SHARED_EXEC; + } +} + + +/** + * Worker for rtR0MemObjNativeReserveUser and rtR0MemObjNativerMapUser that creates + * an empty user space mapping. + * + * We acquire the mmap_sem of the task! + * + * @returns Pointer to the mapping. + * (void *)-1 on failure. + * @param R3PtrFixed (RTR3PTR)-1 if anywhere, otherwise a specific location. + * @param cb The size of the mapping. + * @param uAlignment The alignment of the mapping. + * @param pTask The Linux task to create this mapping in. + * @param fProt The RTMEM_PROT_* mask. + */ +static void *rtR0MemObjLinuxDoMmap(RTR3PTR R3PtrFixed, size_t cb, size_t uAlignment, struct task_struct *pTask, unsigned fProt) +{ + unsigned fLnxProt; + unsigned long ulAddr; + + Assert(pTask == current); /* do_mmap */ + RT_NOREF_PV(pTask); + + /* + * Convert from IPRT protection to mman.h PROT_ and call do_mmap. + */ + fProt &= (RTMEM_PROT_NONE | RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC); + if (fProt == RTMEM_PROT_NONE) + fLnxProt = PROT_NONE; + else + { + fLnxProt = 0; + if (fProt & RTMEM_PROT_READ) + fLnxProt |= PROT_READ; + if (fProt & RTMEM_PROT_WRITE) + fLnxProt |= PROT_WRITE; + if (fProt & RTMEM_PROT_EXEC) + fLnxProt |= PROT_EXEC; + } + + if (R3PtrFixed != (RTR3PTR)-1) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + ulAddr = vm_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0); +#else + down_write(&pTask->mm->mmap_sem); + ulAddr = do_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0); + up_write(&pTask->mm->mmap_sem); +#endif + } + else + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + ulAddr = vm_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0); +#else + down_write(&pTask->mm->mmap_sem); + ulAddr = do_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0); + up_write(&pTask->mm->mmap_sem); +#endif + if ( !(ulAddr & ~PAGE_MASK) + && (ulAddr & (uAlignment - 1))) + { + /** @todo implement uAlignment properly... We'll probably need to make some dummy mappings to fill + * up alignment gaps. This is of course complicated by fragmentation (which we might have cause + * ourselves) and further by there begin two mmap strategies (top / bottom). */ + /* For now, just ignore uAlignment requirements... */ + } + } + + + if (ulAddr & ~PAGE_MASK) /* ~PAGE_MASK == PAGE_OFFSET_MASK */ + return (void *)-1; + return (void *)ulAddr; +} + + +/** + * Worker that destroys a user space mapping. + * Undoes what rtR0MemObjLinuxDoMmap did. + * + * We acquire the mmap_sem of the task! + * + * @param pv The ring-3 mapping. + * @param cb The size of the mapping. + * @param pTask The Linux task to destroy this mapping in. + */ +static void rtR0MemObjLinuxDoMunmap(void *pv, size_t cb, struct task_struct *pTask) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + Assert(pTask == current); RT_NOREF_PV(pTask); + vm_munmap((unsigned long)pv, cb); +#elif defined(USE_RHEL4_MUNMAP) + down_write(&pTask->mm->mmap_sem); + do_munmap(pTask->mm, (unsigned long)pv, cb, 0); /* should it be 1 or 0? */ + up_write(&pTask->mm->mmap_sem); +#else + down_write(&pTask->mm->mmap_sem); + do_munmap(pTask->mm, (unsigned long)pv, cb); + up_write(&pTask->mm->mmap_sem); +#endif +} + + +/** + * Internal worker that allocates physical pages and creates the memory object for them. + * + * @returns IPRT status code. + * @param ppMemLnx Where to store the memory object pointer. + * @param enmType The object type. + * @param cb The number of bytes to allocate. + * @param uAlignment The alignment of the physical memory. + * Only valid if fContiguous == true, ignored otherwise. + * @param fFlagsLnx The page allocation flags (GPFs). + * @param fContiguous Whether the allocation must be contiguous. + * @param rcNoMem What to return when we're out of pages. + */ +static int rtR0MemObjLinuxAllocPages(PRTR0MEMOBJLNX *ppMemLnx, RTR0MEMOBJTYPE enmType, size_t cb, + size_t uAlignment, unsigned fFlagsLnx, bool fContiguous, int rcNoMem) +{ + size_t iPage; + size_t const cPages = cb >> PAGE_SHIFT; + struct page *paPages; + + /* + * Allocate a memory object structure that's large enough to contain + * the page pointer array. + */ + PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), enmType, NULL, cb); + if (!pMemLnx) + return VERR_NO_MEMORY; + pMemLnx->cPages = cPages; + + if (cPages > 255) + { +# ifdef __GFP_REPEAT + /* Try hard to allocate the memory, but the allocation attempt might fail. */ + fFlagsLnx |= __GFP_REPEAT; +# endif +# ifdef __GFP_NOMEMALLOC + /* Introduced with Linux 2.6.12: Don't use emergency reserves */ + fFlagsLnx |= __GFP_NOMEMALLOC; +# endif + } + + /* + * Allocate the pages. + * For small allocations we'll try contiguous first and then fall back on page by page. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + if ( fContiguous + || cb <= PAGE_SIZE * 2) + { +# ifdef VBOX_USE_INSERT_PAGE + paPages = alloc_pages(fFlagsLnx | __GFP_COMP | __GFP_NOWARN, rtR0MemObjLinuxOrder(cPages)); +# else + paPages = alloc_pages(fFlagsLnx | __GFP_NOWARN, rtR0MemObjLinuxOrder(cPages)); +# endif + if (paPages) + { + fContiguous = true; + for (iPage = 0; iPage < cPages; iPage++) + pMemLnx->apPages[iPage] = &paPages[iPage]; + } + else if (fContiguous) + { + rtR0MemObjDelete(&pMemLnx->Core); + return rcNoMem; + } + } + + if (!fContiguous) + { + for (iPage = 0; iPage < cPages; iPage++) + { + pMemLnx->apPages[iPage] = alloc_page(fFlagsLnx | __GFP_NOWARN); + if (RT_UNLIKELY(!pMemLnx->apPages[iPage])) + { + while (iPage-- > 0) + __free_page(pMemLnx->apPages[iPage]); + rtR0MemObjDelete(&pMemLnx->Core); + return rcNoMem; + } + } + } + +#else /* < 2.4.22 */ + /** @todo figure out why we didn't allocate page-by-page on 2.4.21 and older... */ + paPages = alloc_pages(fFlagsLnx, rtR0MemObjLinuxOrder(cPages)); + if (!paPages) + { + rtR0MemObjDelete(&pMemLnx->Core); + return rcNoMem; + } + for (iPage = 0; iPage < cPages; iPage++) + { + pMemLnx->apPages[iPage] = &paPages[iPage]; + MY_SET_PAGES_EXEC(pMemLnx->apPages[iPage], 1); + if (PageHighMem(pMemLnx->apPages[iPage])) + BUG(); + } + + fContiguous = true; +#endif /* < 2.4.22 */ + pMemLnx->fContiguous = fContiguous; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) + /* + * Reserve the pages. + * + * Linux >= 4.5 with CONFIG_DEBUG_VM panics when setting PG_reserved on compound + * pages. According to Michal Hocko this shouldn't be necessary anyway because + * as pages which are not on the LRU list are never evictable. + */ + for (iPage = 0; iPage < cPages; iPage++) + SetPageReserved(pMemLnx->apPages[iPage]); +#endif + + /* + * Note that the physical address of memory allocated with alloc_pages(flags, order) + * is always 2^(PAGE_SHIFT+order)-aligned. + */ + if ( fContiguous + && uAlignment > PAGE_SIZE) + { + /* + * Check for alignment constraints. The physical address of memory allocated with + * alloc_pages(flags, order) is always 2^(PAGE_SHIFT+order)-aligned. + */ + if (RT_UNLIKELY(page_to_phys(pMemLnx->apPages[0]) & (uAlignment - 1))) + { + /* + * This should never happen! + */ + printk("rtR0MemObjLinuxAllocPages(cb=0x%lx, uAlignment=0x%lx): alloc_pages(..., %d) returned physical memory at 0x%lx!\n", + (unsigned long)cb, (unsigned long)uAlignment, rtR0MemObjLinuxOrder(cPages), (unsigned long)page_to_phys(pMemLnx->apPages[0])); + rtR0MemObjLinuxFreePages(pMemLnx); + return rcNoMem; + } + } + + *ppMemLnx = pMemLnx; + return VINF_SUCCESS; +} + + +/** + * Frees the physical pages allocated by the rtR0MemObjLinuxAllocPages() call. + * + * This method does NOT free the object. + * + * @param pMemLnx The object which physical pages should be freed. + */ +static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx) +{ + size_t iPage = pMemLnx->cPages; + if (iPage > 0) + { + /* + * Restore the page flags. + */ + while (iPage-- > 0) + { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) + /* + * See SetPageReserved() in rtR0MemObjLinuxAllocPages() + */ + ClearPageReserved(pMemLnx->apPages[iPage]); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) +#else + MY_SET_PAGES_NOEXEC(pMemLnx->apPages[iPage], 1); +#endif + } + + /* + * Free the pages. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + if (!pMemLnx->fContiguous) + { + iPage = pMemLnx->cPages; + while (iPage-- > 0) + __free_page(pMemLnx->apPages[iPage]); + } + else +#endif + __free_pages(pMemLnx->apPages[0], rtR0MemObjLinuxOrder(pMemLnx->cPages)); + + pMemLnx->cPages = 0; + } +} + + +/** + * Maps the allocation into ring-0. + * + * This will update the RTR0MEMOBJLNX::Core.pv and RTR0MEMOBJ::fMappedToRing0 members. + * + * Contiguous mappings that isn't in 'high' memory will already be mapped into kernel + * space, so we'll use that mapping if possible. If execute access is required, we'll + * play safe and do our own mapping. + * + * @returns IPRT status code. + * @param pMemLnx The linux memory object to map. + * @param fExecutable Whether execute access is required. + */ +static int rtR0MemObjLinuxVMap(PRTR0MEMOBJLNX pMemLnx, bool fExecutable) +{ + int rc = VINF_SUCCESS; + + /* + * Choose mapping strategy. + */ + bool fMustMap = fExecutable + || !pMemLnx->fContiguous; + if (!fMustMap) + { + size_t iPage = pMemLnx->cPages; + while (iPage-- > 0) + if (PageHighMem(pMemLnx->apPages[iPage])) + { + fMustMap = true; + break; + } + } + + Assert(!pMemLnx->Core.pv); + Assert(!pMemLnx->fMappedToRing0); + + if (fMustMap) + { + /* + * Use vmap - 2.4.22 and later. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + pgprot_t fPg; + pgprot_val(fPg) = _PAGE_PRESENT | _PAGE_RW; +# ifdef _PAGE_NX + if (!fExecutable) + pgprot_val(fPg) |= _PAGE_NX; +# endif + +# ifdef VM_MAP + pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_MAP, fPg); +# else + pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_ALLOC, fPg); +# endif + if (pMemLnx->Core.pv) + pMemLnx->fMappedToRing0 = true; + else + rc = VERR_MAP_FAILED; +#else /* < 2.4.22 */ + rc = VERR_NOT_SUPPORTED; +#endif + } + else + { + /* + * Use the kernel RAM mapping. + */ + pMemLnx->Core.pv = phys_to_virt(page_to_phys(pMemLnx->apPages[0])); + Assert(pMemLnx->Core.pv); + } + + return rc; +} + + +/** + * Undoes what rtR0MemObjLinuxVMap() did. + * + * @param pMemLnx The linux memory object. + */ +static void rtR0MemObjLinuxVUnmap(PRTR0MEMOBJLNX pMemLnx) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + if (pMemLnx->fMappedToRing0) + { + Assert(pMemLnx->Core.pv); + vunmap(pMemLnx->Core.pv); + pMemLnx->fMappedToRing0 = false; + } +#else /* < 2.4.22 */ + Assert(!pMemLnx->fMappedToRing0); +#endif + pMemLnx->Core.pv = NULL; +} + + +DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem; + + /* + * Release any memory that we've allocated or locked. + */ + switch (pMemLnx->Core.enmType) + { + case RTR0MEMOBJTYPE_LOW: + case RTR0MEMOBJTYPE_PAGE: + case RTR0MEMOBJTYPE_CONT: + case RTR0MEMOBJTYPE_PHYS: + case RTR0MEMOBJTYPE_PHYS_NC: + rtR0MemObjLinuxVUnmap(pMemLnx); + rtR0MemObjLinuxFreePages(pMemLnx); + break; + + case RTR0MEMOBJTYPE_LOCK: + if (pMemLnx->Core.u.Lock.R0Process != NIL_RTR0PROCESS) + { + struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process); + size_t iPage; + Assert(pTask); + if (pTask && pTask->mm) + down_read(&pTask->mm->mmap_sem); + + iPage = pMemLnx->cPages; + while (iPage-- > 0) + { + if (!PageReserved(pMemLnx->apPages[iPage])) + SetPageDirty(pMemLnx->apPages[iPage]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) + put_page(pMemLnx->apPages[iPage]); +#else + page_cache_release(pMemLnx->apPages[iPage]); +#endif + } + + if (pTask && pTask->mm) + up_read(&pTask->mm->mmap_sem); + } + /* else: kernel memory - nothing to do here. */ + break; + + case RTR0MEMOBJTYPE_RES_VIRT: + Assert(pMemLnx->Core.pv); + if (pMemLnx->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS) + { + struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process); + Assert(pTask); + if (pTask && pTask->mm) + rtR0MemObjLinuxDoMunmap(pMemLnx->Core.pv, pMemLnx->Core.cb, pTask); + } + else + { + vunmap(pMemLnx->Core.pv); + + Assert(pMemLnx->cPages == 1 && pMemLnx->apPages[0] != NULL); + __free_page(pMemLnx->apPages[0]); + pMemLnx->apPages[0] = NULL; + pMemLnx->cPages = 0; + } + pMemLnx->Core.pv = NULL; + break; + + case RTR0MEMOBJTYPE_MAPPING: + Assert(pMemLnx->cPages == 0); Assert(pMemLnx->Core.pv); + if (pMemLnx->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS) + { + struct task_struct *pTask = rtR0ProcessToLinuxTask(pMemLnx->Core.u.Lock.R0Process); + Assert(pTask); + if (pTask && pTask->mm) + rtR0MemObjLinuxDoMunmap(pMemLnx->Core.pv, pMemLnx->Core.cb, pTask); + } + else + vunmap(pMemLnx->Core.pv); + pMemLnx->Core.pv = NULL; + break; + + default: + AssertMsgFailed(("enmType=%d\n", pMemLnx->Core.enmType)); + return VERR_INTERNAL_ERROR; + } + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + return VINF_SUCCESS; +} + + +DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTR0MEMOBJLNX pMemLnx; + int rc; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_PAGE, cb, PAGE_SIZE, GFP_HIGHUSER, + false /* non-contiguous */, VERR_NO_MEMORY); +#else + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_PAGE, cb, PAGE_SIZE, GFP_USER, + false /* non-contiguous */, VERR_NO_MEMORY); +#endif + if (RT_SUCCESS(rc)) + { + rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable); + if (RT_SUCCESS(rc)) + { + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; + } + + rtR0MemObjLinuxFreePages(pMemLnx); + rtR0MemObjDelete(&pMemLnx->Core); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTR0MEMOBJLNX pMemLnx; + int rc; + + /* Try to avoid GFP_DMA. GFM_DMA32 was introduced with Linux 2.6.15. */ +#if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) + /* ZONE_DMA32: 0-4GB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA32, + false /* non-contiguous */, VERR_NO_LOW_MEMORY); + if (RT_FAILURE(rc)) +#endif +#ifdef RT_ARCH_AMD64 + /* ZONE_DMA: 0-16MB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA, + false /* non-contiguous */, VERR_NO_LOW_MEMORY); +#else +# ifdef CONFIG_X86_PAE +# endif + /* ZONE_NORMAL: 0-896MB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_USER, + false /* non-contiguous */, VERR_NO_LOW_MEMORY); +#endif + if (RT_SUCCESS(rc)) + { + rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable); + if (RT_SUCCESS(rc)) + { + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; + } + + rtR0MemObjLinuxFreePages(pMemLnx); + rtR0MemObjDelete(&pMemLnx->Core); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTR0MEMOBJLNX pMemLnx; + int rc; + +#if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) + /* ZONE_DMA32: 0-4GB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA32, + true /* contiguous */, VERR_NO_CONT_MEMORY); + if (RT_FAILURE(rc)) +#endif +#ifdef RT_ARCH_AMD64 + /* ZONE_DMA: 0-16MB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA, + true /* contiguous */, VERR_NO_CONT_MEMORY); +#else + /* ZONE_NORMAL (32-bit hosts): 0-896MB */ + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_USER, + true /* contiguous */, VERR_NO_CONT_MEMORY); +#endif + if (RT_SUCCESS(rc)) + { + rc = rtR0MemObjLinuxVMap(pMemLnx, fExecutable); + if (RT_SUCCESS(rc)) + { +#if defined(RT_STRICT) && (defined(RT_ARCH_AMD64) || defined(CONFIG_HIGHMEM64G)) + size_t iPage = pMemLnx->cPages; + while (iPage-- > 0) + Assert(page_to_phys(pMemLnx->apPages[iPage]) < _4G); +#endif + pMemLnx->Core.u.Cont.Phys = page_to_phys(pMemLnx->apPages[0]); + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; + } + + rtR0MemObjLinuxFreePages(pMemLnx); + rtR0MemObjDelete(&pMemLnx->Core); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +/** + * Worker for rtR0MemObjLinuxAllocPhysSub that tries one allocation strategy. + * + * @returns IPRT status code. + * @param ppMemLnx Where to + * @param enmType The object type. + * @param cb The size of the allocation. + * @param uAlignment The alignment of the physical memory. + * Only valid for fContiguous == true, ignored otherwise. + * @param PhysHighest See rtR0MemObjNativeAllocPhys. + * @param fGfp The Linux GFP flags to use for the allocation. + */ +static int rtR0MemObjLinuxAllocPhysSub2(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJTYPE enmType, + size_t cb, size_t uAlignment, RTHCPHYS PhysHighest, unsigned fGfp) +{ + PRTR0MEMOBJLNX pMemLnx; + int rc; + + rc = rtR0MemObjLinuxAllocPages(&pMemLnx, enmType, cb, uAlignment, fGfp, + enmType == RTR0MEMOBJTYPE_PHYS /* contiguous / non-contiguous */, + VERR_NO_PHYS_MEMORY); + if (RT_FAILURE(rc)) + return rc; + + /* + * Check the addresses if necessary. (Can be optimized a bit for PHYS.) + */ + if (PhysHighest != NIL_RTHCPHYS) + { + size_t iPage = pMemLnx->cPages; + while (iPage-- > 0) + if (page_to_phys(pMemLnx->apPages[iPage]) > PhysHighest) + { + rtR0MemObjLinuxFreePages(pMemLnx); + rtR0MemObjDelete(&pMemLnx->Core); + return VERR_NO_MEMORY; + } + } + + /* + * Complete the object. + */ + if (enmType == RTR0MEMOBJTYPE_PHYS) + { + pMemLnx->Core.u.Phys.PhysBase = page_to_phys(pMemLnx->apPages[0]); + pMemLnx->Core.u.Phys.fAllocated = true; + } + *ppMem = &pMemLnx->Core; + return rc; +} + + +/** + * Worker for rtR0MemObjNativeAllocPhys and rtR0MemObjNativeAllocPhysNC. + * + * @returns IPRT status code. + * @param ppMem Where to store the memory object pointer on success. + * @param enmType The object type. + * @param cb The size of the allocation. + * @param uAlignment The alignment of the physical memory. + * Only valid for enmType == RTR0MEMOBJTYPE_PHYS, ignored otherwise. + * @param PhysHighest See rtR0MemObjNativeAllocPhys. + */ +static int rtR0MemObjLinuxAllocPhysSub(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJTYPE enmType, + size_t cb, size_t uAlignment, RTHCPHYS PhysHighest) +{ + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * There are two clear cases and that's the <=16MB and anything-goes ones. + * When the physical address limit is somewhere in-between those two we'll + * just have to try, starting with HIGHUSER and working our way thru the + * different types, hoping we'll get lucky. + * + * We should probably move this physical address restriction logic up to + * the page alloc function as it would be more efficient there. But since + * we don't expect this to be a performance issue just yet it can wait. + */ + if (PhysHighest == NIL_RTHCPHYS) + /* ZONE_HIGHMEM: the whole physical memory */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_HIGHUSER); + else if (PhysHighest <= _1M * 16) + /* ZONE_DMA: 0-16MB */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_DMA); + else + { + rc = VERR_NO_MEMORY; + if (RT_FAILURE(rc)) + /* ZONE_HIGHMEM: the whole physical memory */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_HIGHUSER); + if (RT_FAILURE(rc)) + /* ZONE_NORMAL: 0-896MB */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_USER); +#ifdef GFP_DMA32 + if (RT_FAILURE(rc)) + /* ZONE_DMA32: 0-4GB */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_DMA32); +#endif + if (RT_FAILURE(rc)) + /* ZONE_DMA: 0-16MB */ + rc = rtR0MemObjLinuxAllocPhysSub2(ppMem, enmType, cb, uAlignment, PhysHighest, GFP_DMA); + } + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +/** + * Translates a kernel virtual address to a linux page structure by walking the + * page tables. + * + * @note We do assume that the page tables will not change as we are walking + * them. This assumption is rather forced by the fact that I could not + * immediately see any way of preventing this from happening. So, we + * take some extra care when accessing them. + * + * Because of this, we don't want to use this function on memory where + * attribute changes to nearby pages is likely to cause large pages to + * be used or split up. So, don't use this for the linear mapping of + * physical memory. + * + * @returns Pointer to the page structur or NULL if it could not be found. + * @param pv The kernel virtual address. + */ +static struct page *rtR0MemObjLinuxVirtToPage(void *pv) +{ + unsigned long ulAddr = (unsigned long)pv; + unsigned long pfn; + struct page *pPage; + pte_t *pEntry; + union + { + pgd_t Global; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + p4d_t Four; +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + pud_t Upper; +#endif + pmd_t Middle; + pte_t Entry; + } u; + + /* Should this happen in a situation this code will be called in? And if + * so, can it change under our feet? See also + * "Documentation/vm/active_mm.txt" in the kernel sources. */ + if (RT_UNLIKELY(!current->active_mm)) + return NULL; + u.Global = *pgd_offset(current->active_mm, ulAddr); + if (RT_UNLIKELY(pgd_none(u.Global))) + return NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + u.Four = *p4d_offset(&u.Global, ulAddr); + if (RT_UNLIKELY(p4d_none(u.Four))) + return NULL; + if (p4d_large(u.Four)) + { + pPage = p4d_page(u.Four); + AssertReturn(pPage, NULL); + pfn = page_to_pfn(pPage); /* doing the safe way... */ + AssertCompile(P4D_SHIFT - PAGE_SHIFT < 31); + pfn += (ulAddr >> PAGE_SHIFT) & ((UINT32_C(1) << (P4D_SHIFT - PAGE_SHIFT)) - 1); + return pfn_to_page(pfn); + } + u.Upper = *pud_offset(&u.Four, ulAddr); +# else /* < 4.12 */ + u.Upper = *pud_offset(&u.Global, ulAddr); +# endif /* < 4.12 */ + if (RT_UNLIKELY(pud_none(u.Upper))) + return NULL; +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) + if (pud_large(u.Upper)) + { + pPage = pud_page(u.Upper); + AssertReturn(pPage, NULL); + pfn = page_to_pfn(pPage); /* doing the safe way... */ + pfn += (ulAddr >> PAGE_SHIFT) & ((UINT32_C(1) << (PUD_SHIFT - PAGE_SHIFT)) - 1); + return pfn_to_page(pfn); + } +# endif + u.Middle = *pmd_offset(&u.Upper, ulAddr); +#else /* < 2.6.11 */ + u.Middle = *pmd_offset(&u.Global, ulAddr); +#endif /* < 2.6.11 */ + if (RT_UNLIKELY(pmd_none(u.Middle))) + return NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + if (pmd_large(u.Middle)) + { + pPage = pmd_page(u.Middle); + AssertReturn(pPage, NULL); + pfn = page_to_pfn(pPage); /* doing the safe way... */ + pfn += (ulAddr >> PAGE_SHIFT) & ((UINT32_C(1) << (PMD_SHIFT - PAGE_SHIFT)) - 1); + return pfn_to_page(pfn); + } +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 5) || defined(pte_offset_map) /* As usual, RHEL 3 had pte_offset_map earlier. */ + pEntry = pte_offset_map(&u.Middle, ulAddr); +#else + pEntry = pte_offset(&u.Middle, ulAddr); +#endif + if (RT_UNLIKELY(!pEntry)) + return NULL; + u.Entry = *pEntry; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 5) || defined(pte_offset_map) + pte_unmap(pEntry); +#endif + + if (RT_UNLIKELY(!pte_present(u.Entry))) + return NULL; + return pte_page(u.Entry); +} + + +DECLHIDDEN(int) rtR0MemObjNativeAllocPhys(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment) +{ + return rtR0MemObjLinuxAllocPhysSub(ppMem, RTR0MEMOBJTYPE_PHYS, cb, uAlignment, PhysHighest); +} + + +DECLHIDDEN(int) rtR0MemObjNativeAllocPhysNC(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest) +{ + return rtR0MemObjLinuxAllocPhysSub(ppMem, RTR0MEMOBJTYPE_PHYS_NC, cb, PAGE_SIZE, PhysHighest); +} + + +DECLHIDDEN(int) rtR0MemObjNativeEnterPhys(PPRTR0MEMOBJINTERNAL ppMem, RTHCPHYS Phys, size_t cb, uint32_t uCachePolicy) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * All we need to do here is to validate that we can use + * ioremap on the specified address (32/64-bit dma_addr_t). + */ + PRTR0MEMOBJLNX pMemLnx; + dma_addr_t PhysAddr = Phys; + AssertMsgReturn(PhysAddr == Phys, ("%#llx\n", (unsigned long long)Phys), VERR_ADDRESS_TOO_BIG); + + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_PHYS, NULL, cb); + if (!pMemLnx) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + pMemLnx->Core.u.Phys.PhysBase = PhysAddr; + pMemLnx->Core.u.Phys.fAllocated = false; + pMemLnx->Core.u.Phys.uCachePolicy = uCachePolicy; + Assert(!pMemLnx->cPages); + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} + +/* openSUSE Leap 42.3 detection :-/ */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) \ + && LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) \ + && defined(FAULT_FLAG_REMOTE) +# define GET_USER_PAGES_API KERNEL_VERSION(4, 10, 0) /* no typo! */ +#else +# define GET_USER_PAGES_API LINUX_VERSION_CODE +#endif + +DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3Ptr, size_t cb, uint32_t fAccess, RTR0PROCESS R0Process) +{ + IPRT_LINUX_SAVE_EFL_AC(); + const int cPages = cb >> PAGE_SHIFT; + struct task_struct *pTask = rtR0ProcessToLinuxTask(R0Process); + struct vm_area_struct **papVMAs; + PRTR0MEMOBJLNX pMemLnx; + int rc = VERR_NO_MEMORY; + int const fWrite = fAccess & RTMEM_PROT_WRITE ? 1 : 0; + + /* + * Check for valid task and size overflows. + */ + if (!pTask) + return VERR_NOT_SUPPORTED; + if (((size_t)cPages << PAGE_SHIFT) != cb) + return VERR_OUT_OF_RANGE; + + /* + * Allocate the memory object and a temporary buffer for the VMAs. + */ + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), RTR0MEMOBJTYPE_LOCK, (void *)R3Ptr, cb); + if (!pMemLnx) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + papVMAs = (struct vm_area_struct **)RTMemAlloc(sizeof(*papVMAs) * cPages); + if (papVMAs) + { + down_read(&pTask->mm->mmap_sem); + + /* + * Get user pages. + */ +#if GET_USER_PAGES_API >= KERNEL_VERSION(4, 6, 0) + if (R0Process == RTR0ProcHandleSelf()) + rc = get_user_pages(R3Ptr, /* Where from. */ + cPages, /* How many pages. */ +# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0) + fWrite ? FOLL_WRITE | /* Write to memory. */ + FOLL_FORCE /* force write access. */ + : 0, /* Write to memory. */ +# else + fWrite, /* Write to memory. */ + fWrite, /* force write access. */ +# endif + &pMemLnx->apPages[0], /* Page array. */ + papVMAs); /* vmas */ + /* + * Actually this should not happen at the moment as call this function + * only for our own process. + */ + else + rc = get_user_pages_remote( + pTask, /* Task for fault accounting. */ + pTask->mm, /* Whose pages. */ + R3Ptr, /* Where from. */ + cPages, /* How many pages. */ +# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0) + fWrite ? FOLL_WRITE | /* Write to memory. */ + FOLL_FORCE /* force write access. */ + : 0, /* Write to memory. */ +# else + fWrite, /* Write to memory. */ + fWrite, /* force write access. */ +# endif + &pMemLnx->apPages[0], /* Page array. */ + papVMAs /* vmas */ +# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 10, 0) + , NULL /* locked */ +# endif + ); +#else /* GET_USER_PAGES_API < KERNEL_VERSION(4, 6, 0) */ + rc = get_user_pages(pTask, /* Task for fault accounting. */ + pTask->mm, /* Whose pages. */ + R3Ptr, /* Where from. */ + cPages, /* How many pages. */ +# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0) + fWrite ? FOLL_WRITE | /* Write to memory. */ + FOLL_FORCE /* force write access. */ + : 0, /* Write to memory. */ +# else + fWrite, /* Write to memory. */ + fWrite, /* force write access. */ +# endif + &pMemLnx->apPages[0], /* Page array. */ + papVMAs); /* vmas */ +#endif /* GET_USER_PAGES_API < KERNEL_VERSION(4, 6, 0) */ + if (rc == cPages) + { + /* + * Flush dcache (required?), protect against fork and _really_ pin the page + * table entries. get_user_pages() will protect against swapping out the + * pages but it will NOT protect against removing page table entries. This + * can be achieved with + * - using mlock / mmap(..., MAP_LOCKED, ...) from userland. This requires + * an appropriate limit set up with setrlimit(..., RLIMIT_MEMLOCK, ...). + * Usual Linux distributions support only a limited size of locked pages + * (e.g. 32KB). + * - setting the PageReserved bit (as we do in rtR0MemObjLinuxAllocPages() + * or by + * - setting the VM_LOCKED flag. This is the same as doing mlock() without + * a range check. + */ + /** @todo The Linux fork() protection will require more work if this API + * is to be used for anything but locking VM pages. */ + while (rc-- > 0) + { + flush_dcache_page(pMemLnx->apPages[rc]); + papVMAs[rc]->vm_flags |= (VM_DONTCOPY | VM_LOCKED); + } + + up_read(&pTask->mm->mmap_sem); + + RTMemFree(papVMAs); + + pMemLnx->Core.u.Lock.R0Process = R0Process; + pMemLnx->cPages = cPages; + Assert(!pMemLnx->fMappedToRing0); + *ppMem = &pMemLnx->Core; + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + + /* + * Failed - we need to unlock any pages that we succeeded to lock. + */ + while (rc-- > 0) + { + if (!PageReserved(pMemLnx->apPages[rc])) + SetPageDirty(pMemLnx->apPages[rc]); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) + put_page(pMemLnx->apPages[rc]); +#else + page_cache_release(pMemLnx->apPages[rc]); +#endif + } + + up_read(&pTask->mm->mmap_sem); + + RTMemFree(papVMAs); + rc = VERR_LOCK_FAILED; + } + + rtR0MemObjDelete(&pMemLnx->Core); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(int) rtR0MemObjNativeLockKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pv, size_t cb, uint32_t fAccess) +{ + IPRT_LINUX_SAVE_EFL_AC(); + void *pvLast = (uint8_t *)pv + cb - 1; + size_t const cPages = cb >> PAGE_SHIFT; + PRTR0MEMOBJLNX pMemLnx; + bool fLinearMapping; + int rc; + uint8_t *pbPage; + size_t iPage; + NOREF(fAccess); + + if ( !RTR0MemKernelIsValidAddr(pv) + || !RTR0MemKernelIsValidAddr(pv + cb)) + return VERR_INVALID_PARAMETER; + + /* + * The lower part of the kernel memory has a linear mapping between + * physical and virtual addresses. So we take a short cut here. This is + * assumed to be the cleanest way to handle those addresses (and the code + * is well tested, though the test for determining it is not very nice). + * If we ever decide it isn't we can still remove it. + */ +#if 0 + fLinearMapping = (unsigned long)pvLast < VMALLOC_START; +#else + fLinearMapping = (unsigned long)pv >= (unsigned long)__va(0) + && (unsigned long)pvLast < (unsigned long)high_memory; +#endif + + /* + * Allocate the memory object. + */ + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJLNX, apPages[cPages]), RTR0MEMOBJTYPE_LOCK, pv, cb); + if (!pMemLnx) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + /* + * Gather the pages. + * We ASSUME all kernel pages are non-swappable and non-movable. + */ + rc = VINF_SUCCESS; + pbPage = (uint8_t *)pvLast; + iPage = cPages; + if (!fLinearMapping) + { + while (iPage-- > 0) + { + struct page *pPage = rtR0MemObjLinuxVirtToPage(pbPage); + if (RT_UNLIKELY(!pPage)) + { + rc = VERR_LOCK_FAILED; + break; + } + pMemLnx->apPages[iPage] = pPage; + pbPage -= PAGE_SIZE; + } + } + else + { + while (iPage-- > 0) + { + pMemLnx->apPages[iPage] = virt_to_page(pbPage); + pbPage -= PAGE_SIZE; + } + } + if (RT_SUCCESS(rc)) + { + /* + * Complete the memory object and return. + */ + pMemLnx->Core.u.Lock.R0Process = NIL_RTR0PROCESS; + pMemLnx->cPages = cPages; + Assert(!pMemLnx->fMappedToRing0); + *ppMem = &pMemLnx->Core; + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + + rtR0MemObjDelete(&pMemLnx->Core); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(int) rtR0MemObjNativeReserveKernel(PPRTR0MEMOBJINTERNAL ppMem, void *pvFixed, size_t cb, size_t uAlignment) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + IPRT_LINUX_SAVE_EFL_AC(); + const size_t cPages = cb >> PAGE_SHIFT; + struct page *pDummyPage; + struct page **papPages; + + /* check for unsupported stuff. */ + AssertMsgReturn(pvFixed == (void *)-1, ("%p\n", pvFixed), VERR_NOT_SUPPORTED); + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; + + /* + * Allocate a dummy page and create a page pointer array for vmap such that + * the dummy page is mapped all over the reserved area. + */ + pDummyPage = alloc_page(GFP_HIGHUSER | __GFP_NOWARN); + if (pDummyPage) + { + papPages = RTMemAlloc(sizeof(*papPages) * cPages); + if (papPages) + { + void *pv; + size_t iPage = cPages; + while (iPage-- > 0) + papPages[iPage] = pDummyPage; +# ifdef VM_MAP + pv = vmap(papPages, cPages, VM_MAP, PAGE_KERNEL_RO); +# else + pv = vmap(papPages, cPages, VM_ALLOC, PAGE_KERNEL_RO); +# endif + RTMemFree(papPages); + if (pv) + { + PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb); + if (pMemLnx) + { + pMemLnx->Core.u.ResVirt.R0Process = NIL_RTR0PROCESS; + pMemLnx->cPages = 1; + pMemLnx->apPages[0] = pDummyPage; + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + vunmap(pv); + } + } + __free_page(pDummyPage); + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + +#else /* < 2.4.22 */ + /* + * Could probably use ioremap here, but the caller is in a better position than us + * to select some safe physical memory. + */ + return VERR_NOT_SUPPORTED; +#endif +} + + +DECLHIDDEN(int) rtR0MemObjNativeReserveUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3PtrFixed, size_t cb, size_t uAlignment, RTR0PROCESS R0Process) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTR0MEMOBJLNX pMemLnx; + void *pv; + struct task_struct *pTask = rtR0ProcessToLinuxTask(R0Process); + if (!pTask) + return VERR_NOT_SUPPORTED; + + /* + * Check that the specified alignment is supported. + */ + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; + + /* + * Let rtR0MemObjLinuxDoMmap do the difficult bits. + */ + pv = rtR0MemObjLinuxDoMmap(R3PtrFixed, cb, uAlignment, pTask, RTMEM_PROT_NONE); + if (pv == (void *)-1) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_RES_VIRT, pv, cb); + if (!pMemLnx) + { + rtR0MemObjLinuxDoMunmap(pv, cb, pTask); + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + + pMemLnx->Core.u.ResVirt.R0Process = R0Process; + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} + + +DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, + void *pvFixed, size_t uAlignment, + unsigned fProt, size_t offSub, size_t cbSub) +{ + int rc = VERR_NO_MEMORY; + PRTR0MEMOBJLNX pMemLnxToMap = (PRTR0MEMOBJLNX)pMemToMap; + PRTR0MEMOBJLNX pMemLnx; + IPRT_LINUX_SAVE_EFL_AC(); + + /* Fail if requested to do something we can't. */ + AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED); + AssertMsgReturn(pvFixed == (void *)-1, ("%p\n", pvFixed), VERR_NOT_SUPPORTED); + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; + + /* + * Create the IPRT memory object. + */ + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_MAPPING, NULL, pMemLnxToMap->Core.cb); + if (pMemLnx) + { + if (pMemLnxToMap->cPages) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22) + /* + * Use vmap - 2.4.22 and later. + */ + pgprot_t fPg = rtR0MemObjLinuxConvertProt(fProt, true /* kernel */); +# ifdef VM_MAP + pMemLnx->Core.pv = vmap(&pMemLnxToMap->apPages[0], pMemLnxToMap->cPages, VM_MAP, fPg); +# else + pMemLnx->Core.pv = vmap(&pMemLnxToMap->apPages[0], pMemLnxToMap->cPages, VM_ALLOC, fPg); +# endif + if (pMemLnx->Core.pv) + { + pMemLnx->fMappedToRing0 = true; + rc = VINF_SUCCESS; + } + else + rc = VERR_MAP_FAILED; + +#else /* < 2.4.22 */ + /* + * Only option here is to share mappings if possible and forget about fProt. + */ + if (rtR0MemObjIsRing3(pMemToMap)) + rc = VERR_NOT_SUPPORTED; + else + { + rc = VINF_SUCCESS; + if (!pMemLnxToMap->Core.pv) + rc = rtR0MemObjLinuxVMap(pMemLnxToMap, !!(fProt & RTMEM_PROT_EXEC)); + if (RT_SUCCESS(rc)) + { + Assert(pMemLnxToMap->Core.pv); + pMemLnx->Core.pv = pMemLnxToMap->Core.pv; + } + } +#endif + } + else + { + /* + * MMIO / physical memory. + */ + Assert(pMemLnxToMap->Core.enmType == RTR0MEMOBJTYPE_PHYS && !pMemLnxToMap->Core.u.Phys.fAllocated); + pMemLnx->Core.pv = pMemLnxToMap->Core.u.Phys.uCachePolicy == RTMEM_CACHE_POLICY_MMIO + ? ioremap_nocache(pMemLnxToMap->Core.u.Phys.PhysBase, pMemLnxToMap->Core.cb) + : ioremap(pMemLnxToMap->Core.u.Phys.PhysBase, pMemLnxToMap->Core.cb); + if (pMemLnx->Core.pv) + { + /** @todo fix protection. */ + rc = VINF_SUCCESS; + } + } + if (RT_SUCCESS(rc)) + { + pMemLnx->Core.u.Mapping.R0Process = NIL_RTR0PROCESS; + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + rtR0MemObjDelete(&pMemLnx->Core); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +#ifdef VBOX_USE_PAE_HACK +/** + * Replace the PFN of a PTE with the address of the actual page. + * + * The caller maps a reserved dummy page at the address with the desired access + * and flags. + * + * This hack is required for older Linux kernels which don't provide + * remap_pfn_range(). + * + * @returns 0 on success, -ENOMEM on failure. + * @param mm The memory context. + * @param ulAddr The mapping address. + * @param Phys The physical address of the page to map. + */ +static int rtR0MemObjLinuxFixPte(struct mm_struct *mm, unsigned long ulAddr, RTHCPHYS Phys) +{ + int rc = -ENOMEM; + pgd_t *pgd; + + spin_lock(&mm->page_table_lock); + + pgd = pgd_offset(mm, ulAddr); + if (!pgd_none(*pgd) && !pgd_bad(*pgd)) + { + pmd_t *pmd = pmd_offset(pgd, ulAddr); + if (!pmd_none(*pmd)) + { + pte_t *ptep = pte_offset_map(pmd, ulAddr); + if (ptep) + { + pte_t pte = *ptep; + pte.pte_high &= 0xfff00000; + pte.pte_high |= ((Phys >> 32) & 0x000fffff); + pte.pte_low &= 0x00000fff; + pte.pte_low |= (Phys & 0xfffff000); + set_pte(ptep, pte); + pte_unmap(ptep); + rc = 0; + } + } + } + + spin_unlock(&mm->page_table_lock); + return rc; +} +#endif /* VBOX_USE_PAE_HACK */ + + +DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, + size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process) +{ + struct task_struct *pTask = rtR0ProcessToLinuxTask(R0Process); + PRTR0MEMOBJLNX pMemLnxToMap = (PRTR0MEMOBJLNX)pMemToMap; + int rc = VERR_NO_MEMORY; + PRTR0MEMOBJLNX pMemLnx; +#ifdef VBOX_USE_PAE_HACK + struct page *pDummyPage; + RTHCPHYS DummyPhys; +#endif + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Check for restrictions. + */ + if (!pTask) + return VERR_NOT_SUPPORTED; + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; + +#ifdef VBOX_USE_PAE_HACK + /* + * Allocate a dummy page for use when mapping the memory. + */ + pDummyPage = alloc_page(GFP_USER | __GFP_NOWARN); + if (!pDummyPage) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; + } + SetPageReserved(pDummyPage); + DummyPhys = page_to_phys(pDummyPage); +#endif + + /* + * Create the IPRT memory object. + */ + pMemLnx = (PRTR0MEMOBJLNX)rtR0MemObjNew(sizeof(*pMemLnx), RTR0MEMOBJTYPE_MAPPING, NULL, pMemLnxToMap->Core.cb); + if (pMemLnx) + { + /* + * Allocate user space mapping. + */ + void *pv; + pv = rtR0MemObjLinuxDoMmap(R3PtrFixed, pMemLnxToMap->Core.cb, uAlignment, pTask, fProt); + if (pv != (void *)-1) + { + /* + * Map page by page into the mmap area. + * This is generic, paranoid and not very efficient. + */ + pgprot_t fPg = rtR0MemObjLinuxConvertProt(fProt, false /* user */); + unsigned long ulAddrCur = (unsigned long)pv; + const size_t cPages = pMemLnxToMap->Core.cb >> PAGE_SHIFT; + size_t iPage; + + down_write(&pTask->mm->mmap_sem); + + rc = VINF_SUCCESS; + if (pMemLnxToMap->cPages) + { + for (iPage = 0; iPage < cPages; iPage++, ulAddrCur += PAGE_SIZE) + { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11) + RTHCPHYS Phys = page_to_phys(pMemLnxToMap->apPages[iPage]); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) || defined(HAVE_26_STYLE_REMAP_PAGE_RANGE) + struct vm_area_struct *vma = find_vma(pTask->mm, ulAddrCur); /* this is probably the same for all the pages... */ + AssertBreakStmt(vma, rc = VERR_INTERNAL_ERROR); +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) + /* remap_page_range() limitation on x86 */ + AssertBreakStmt(Phys < _4G, rc = VERR_NO_MEMORY); +#endif + +#if defined(VBOX_USE_INSERT_PAGE) && LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + rc = vm_insert_page(vma, ulAddrCur, pMemLnxToMap->apPages[iPage]); + /* Thes flags help making 100% sure some bad stuff wont happen (swap, core, ++). + * See remap_pfn_range() in mm/memory.c */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 7, 0) + vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP; +#else + vma->vm_flags |= VM_RESERVED; +#endif +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + rc = remap_pfn_range(vma, ulAddrCur, page_to_pfn(pMemLnxToMap->apPages[iPage]), PAGE_SIZE, fPg); +#elif defined(VBOX_USE_PAE_HACK) + rc = remap_page_range(vma, ulAddrCur, DummyPhys, PAGE_SIZE, fPg); + if (!rc) + rc = rtR0MemObjLinuxFixPte(pTask->mm, ulAddrCur, Phys); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) || defined(HAVE_26_STYLE_REMAP_PAGE_RANGE) + rc = remap_page_range(vma, ulAddrCur, Phys, PAGE_SIZE, fPg); +#else /* 2.4 */ + rc = remap_page_range(ulAddrCur, Phys, PAGE_SIZE, fPg); +#endif + if (rc) + { + rc = VERR_NO_MEMORY; + break; + } + } + } + else + { + RTHCPHYS Phys; + if (pMemLnxToMap->Core.enmType == RTR0MEMOBJTYPE_PHYS) + Phys = pMemLnxToMap->Core.u.Phys.PhysBase; + else if (pMemLnxToMap->Core.enmType == RTR0MEMOBJTYPE_CONT) + Phys = pMemLnxToMap->Core.u.Cont.Phys; + else + { + AssertMsgFailed(("%d\n", pMemLnxToMap->Core.enmType)); + Phys = NIL_RTHCPHYS; + } + if (Phys != NIL_RTHCPHYS) + { + for (iPage = 0; iPage < cPages; iPage++, ulAddrCur += PAGE_SIZE, Phys += PAGE_SIZE) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) || defined(HAVE_26_STYLE_REMAP_PAGE_RANGE) + struct vm_area_struct *vma = find_vma(pTask->mm, ulAddrCur); /* this is probably the same for all the pages... */ + AssertBreakStmt(vma, rc = VERR_INTERNAL_ERROR); +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86) + /* remap_page_range() limitation on x86 */ + AssertBreakStmt(Phys < _4G, rc = VERR_NO_MEMORY); +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + rc = remap_pfn_range(vma, ulAddrCur, Phys, PAGE_SIZE, fPg); +#elif defined(VBOX_USE_PAE_HACK) + rc = remap_page_range(vma, ulAddrCur, DummyPhys, PAGE_SIZE, fPg); + if (!rc) + rc = rtR0MemObjLinuxFixPte(pTask->mm, ulAddrCur, Phys); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) || defined(HAVE_26_STYLE_REMAP_PAGE_RANGE) + rc = remap_page_range(vma, ulAddrCur, Phys, PAGE_SIZE, fPg); +#else /* 2.4 */ + rc = remap_page_range(ulAddrCur, Phys, PAGE_SIZE, fPg); +#endif + if (rc) + { + rc = VERR_NO_MEMORY; + break; + } + } + } + } + +#ifdef CONFIG_NUMA_BALANCING +# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) +# ifdef RHEL_RELEASE_CODE +# if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(7, 0) +# define VBOX_NUMA_HACK_OLD +# endif +# endif +# endif + if (RT_SUCCESS(rc)) + { + /** @todo Ugly hack! But right now we have no other means to + * disable automatic NUMA page balancing. */ +# ifdef RT_OS_X86 +# ifdef VBOX_NUMA_HACK_OLD + pTask->mm->numa_next_reset = jiffies + 0x7fffffffUL; +# endif + pTask->mm->numa_next_scan = jiffies + 0x7fffffffUL; +# else +# ifdef VBOX_NUMA_HACK_OLD + pTask->mm->numa_next_reset = jiffies + 0x7fffffffffffffffUL; +# endif + pTask->mm->numa_next_scan = jiffies + 0x7fffffffffffffffUL; +# endif + } +#endif /* CONFIG_NUMA_BALANCING */ + + up_write(&pTask->mm->mmap_sem); + + if (RT_SUCCESS(rc)) + { +#ifdef VBOX_USE_PAE_HACK + __free_page(pDummyPage); +#endif + pMemLnx->Core.pv = pv; + pMemLnx->Core.u.Mapping.R0Process = R0Process; + *ppMem = &pMemLnx->Core; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + + /* + * Bail out. + */ + rtR0MemObjLinuxDoMunmap(pv, pMemLnxToMap->Core.cb, pTask); + } + rtR0MemObjDelete(&pMemLnx->Core); + } +#ifdef VBOX_USE_PAE_HACK + __free_page(pDummyPage); +#endif + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} + + +DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt) +{ + NOREF(pMem); + NOREF(offSub); + NOREF(cbSub); + NOREF(fProt); + return VERR_NOT_SUPPORTED; +} + + +DECLHIDDEN(RTHCPHYS) rtR0MemObjNativeGetPagePhysAddr(PRTR0MEMOBJINTERNAL pMem, size_t iPage) +{ + PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem; + + if (pMemLnx->cPages) + return page_to_phys(pMemLnx->apPages[iPage]); + + switch (pMemLnx->Core.enmType) + { + case RTR0MEMOBJTYPE_CONT: + return pMemLnx->Core.u.Cont.Phys + (iPage << PAGE_SHIFT); + + case RTR0MEMOBJTYPE_PHYS: + return pMemLnx->Core.u.Phys.PhysBase + (iPage << PAGE_SHIFT); + + /* the parent knows */ + case RTR0MEMOBJTYPE_MAPPING: + return rtR0MemObjNativeGetPagePhysAddr(pMemLnx->Core.uRel.Child.pParent, iPage); + + /* cPages > 0 */ + case RTR0MEMOBJTYPE_LOW: + case RTR0MEMOBJTYPE_LOCK: + case RTR0MEMOBJTYPE_PHYS_NC: + case RTR0MEMOBJTYPE_PAGE: + default: + AssertMsgFailed(("%d\n", pMemLnx->Core.enmType)); + /* fall thru */ + + case RTR0MEMOBJTYPE_RES_VIRT: + return NIL_RTHCPHYS; + } +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/memuserkernel-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/memuserkernel-r0drv-linux.c @@ -0,0 +1,172 @@ +/* $Id: memuserkernel-r0drv-linux.c $ */ +/** @file + * IPRT - User & Kernel Memory, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include + + +RTR0DECL(int) RTR0MemUserCopyFrom(void *pvDst, RTR3PTR R3PtrSrc, size_t cb) +{ + IPRT_LINUX_SAVE_EFL_AC(); + if (RT_LIKELY(copy_from_user(pvDst, (void *)R3PtrSrc, cb) == 0)) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_ACCESS_DENIED; +} +RT_EXPORT_SYMBOL(RTR0MemUserCopyFrom); + + +RTR0DECL(int) RTR0MemUserCopyTo(RTR3PTR R3PtrDst, void const *pvSrc, size_t cb) +{ + IPRT_LINUX_SAVE_EFL_AC(); + if (RT_LIKELY(copy_to_user((void *)R3PtrDst, pvSrc, cb) == 0)) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_ACCESS_DENIED; +} +RT_EXPORT_SYMBOL(RTR0MemUserCopyTo); + + +RTR0DECL(bool) RTR0MemUserIsValidAddr(RTR3PTR R3Ptr) +{ + IPRT_LINUX_SAVE_EFL_AC(); + bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1); + IPRT_LINUX_RESTORE_EFL_AC(); + return fRc; +} +RT_EXPORT_SYMBOL(RTR0MemUserIsValidAddr); + + +RTR0DECL(bool) RTR0MemKernelIsValidAddr(void *pv) +{ + /* Couldn't find a straight forward way of doing this... */ +#if defined(RT_ARCH_X86) && defined(CONFIG_X86_HIGH_ENTRY) + return true; /* ?? */ +#elif defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) + return (uintptr_t)pv >= PAGE_OFFSET; +#else +# error "PORT ME" + return !access_ok(VERIFY_READ, pv, 1); +#endif +} +RT_EXPORT_SYMBOL(RTR0MemKernelIsValidAddr); + + +RTR0DECL(bool) RTR0MemAreKrnlAndUsrDifferent(void) +{ +#if defined(RT_ARCH_X86) && defined(CONFIG_X86_HIGH_ENTRY) /* ?? */ + return false; +#else + return true; +#endif +} +RT_EXPORT_SYMBOL(RTR0MemAreKrnlAndUsrDifferent); + + +/** + * Treats both source and destination as unsafe buffers. + */ +static int rtR0MemKernelCopyLnxWorker(void *pvDst, void const *pvSrc, size_t cb) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 55) +/* _ASM_EXTABLE was introduced in 2.6.25 from what I can tell. Using #ifndef + here since it has to be a macro and you never know what someone might have + backported to an earlier kernel release. */ +# ifndef _ASM_EXTABLE +# if ARCH_BITS == 32 +# define _ASM_EXTABLE(a_Instr, a_Resume) \ + ".section __ex_table,\"a\"\n" \ + ".balign 4\n" \ + ".long " #a_Instr "\n" \ + ".long " #a_Resume "\n" \ + ".previous\n" +# else +# define _ASM_EXTABLE(a_Instr, a_Resume) \ + ".section __ex_table,\"a\"\n" \ + ".balign 8\n" \ + ".quad " #a_Instr "\n" \ + ".quad " #a_Resume "\n" \ + ".previous\n" +# endif +# endif /* !_ASM_EXTABLE */ + int rc; + IPRT_LINUX_SAVE_EFL_AC(); /* paranoia */ + if (!cb) + return VINF_SUCCESS; + + __asm__ __volatile__ ("cld\n" + "1:\n\t" + "rep; movsb\n" + "2:\n\t" + ".section .fixup,\"ax\"\n" + "3:\n\t" + "movl %4, %0\n" + ".previous\n" + _ASM_EXTABLE(1b, 3b) + : "=r" (rc), + "=D" (pvDst), + "=S" (pvSrc), + "=c" (cb) + : "i" (VERR_ACCESS_DENIED), + "0" (VINF_SUCCESS), + "1" (pvDst), + "2" (pvSrc), + "3" (cb) + : "memory"); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +#else + return VERR_NOT_SUPPORTED; +#endif +} + + +RTR0DECL(int) RTR0MemKernelCopyFrom(void *pvDst, void const *pvSrc, size_t cb) +{ + return rtR0MemKernelCopyLnxWorker(pvDst, pvSrc, cb); +} +RT_EXPORT_SYMBOL(RTR0MemKernelCopyFrom); + + +RTR0DECL(int) RTR0MemKernelCopyTo(void *pvDst, void const *pvSrc, size_t cb) +{ + return rtR0MemKernelCopyLnxWorker(pvDst, pvSrc, cb); +} +RT_EXPORT_SYMBOL(RTR0MemKernelCopyTo); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/mp-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/mp-r0drv-linux.c @@ -0,0 +1,598 @@ +/* $Id: mp-r0drv-linux.c $ */ +/** @file + * IPRT - Multiprocessor, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include "r0drv/mp-r0drv.h" + +#ifdef nr_cpumask_bits +# define VBOX_NR_CPUMASK_BITS nr_cpumask_bits +#else +# define VBOX_NR_CPUMASK_BITS NR_CPUS +#endif + +RTDECL(RTCPUID) RTMpCpuId(void) +{ + return smp_processor_id(); +} +RT_EXPORT_SYMBOL(RTMpCpuId); + + +RTDECL(int) RTMpCurSetIndex(void) +{ + return smp_processor_id(); +} +RT_EXPORT_SYMBOL(RTMpCurSetIndex); + + +RTDECL(int) RTMpCurSetIndexAndId(PRTCPUID pidCpu) +{ + return *pidCpu = smp_processor_id(); +} +RT_EXPORT_SYMBOL(RTMpCurSetIndexAndId); + + +RTDECL(int) RTMpCpuIdToSetIndex(RTCPUID idCpu) +{ + return idCpu < RTCPUSET_MAX_CPUS && idCpu < VBOX_NR_CPUMASK_BITS ? (int)idCpu : -1; +} +RT_EXPORT_SYMBOL(RTMpCpuIdToSetIndex); + + +RTDECL(RTCPUID) RTMpCpuIdFromSetIndex(int iCpu) +{ + return iCpu < VBOX_NR_CPUMASK_BITS ? (RTCPUID)iCpu : NIL_RTCPUID; +} +RT_EXPORT_SYMBOL(RTMpCpuIdFromSetIndex); + + +RTDECL(RTCPUID) RTMpGetMaxCpuId(void) +{ + return VBOX_NR_CPUMASK_BITS - 1; //??? +} +RT_EXPORT_SYMBOL(RTMpGetMaxCpuId); + + +RTDECL(bool) RTMpIsCpuPossible(RTCPUID idCpu) +{ +#if defined(CONFIG_SMP) + if (RT_UNLIKELY(idCpu >= VBOX_NR_CPUMASK_BITS)) + return false; + +# if defined(cpu_possible) + return cpu_possible(idCpu); +# else /* < 2.5.29 */ + return idCpu < (RTCPUID)smp_num_cpus; +# endif +#else + return idCpu == RTMpCpuId(); +#endif +} +RT_EXPORT_SYMBOL(RTMpIsCpuPossible); + + +RTDECL(PRTCPUSET) RTMpGetSet(PRTCPUSET pSet) +{ + RTCPUID idCpu; + + RTCpuSetEmpty(pSet); + idCpu = RTMpGetMaxCpuId(); + do + { + if (RTMpIsCpuPossible(idCpu)) + RTCpuSetAdd(pSet, idCpu); + } while (idCpu-- > 0); + return pSet; +} +RT_EXPORT_SYMBOL(RTMpGetSet); + + +RTDECL(RTCPUID) RTMpGetCount(void) +{ +#ifdef CONFIG_SMP +# if defined(CONFIG_HOTPLUG_CPU) /* introduced & uses cpu_present */ + return num_present_cpus(); +# elif defined(num_possible_cpus) + return num_possible_cpus(); +# elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0) + return smp_num_cpus; +# else + RTCPUSET Set; + RTMpGetSet(&Set); + return RTCpuSetCount(&Set); +# endif +#else + return 1; +#endif +} +RT_EXPORT_SYMBOL(RTMpGetCount); + + +RTDECL(bool) RTMpIsCpuOnline(RTCPUID idCpu) +{ +#ifdef CONFIG_SMP + if (RT_UNLIKELY(idCpu >= VBOX_NR_CPUMASK_BITS)) + return false; +# ifdef cpu_online + return cpu_online(idCpu); +# else /* 2.4: */ + return cpu_online_map & RT_BIT_64(idCpu); +# endif +#else + return idCpu == RTMpCpuId(); +#endif +} +RT_EXPORT_SYMBOL(RTMpIsCpuOnline); + + +RTDECL(PRTCPUSET) RTMpGetOnlineSet(PRTCPUSET pSet) +{ +#ifdef CONFIG_SMP + RTCPUID idCpu; + + RTCpuSetEmpty(pSet); + idCpu = RTMpGetMaxCpuId(); + do + { + if (RTMpIsCpuOnline(idCpu)) + RTCpuSetAdd(pSet, idCpu); + } while (idCpu-- > 0); +#else + RTCpuSetEmpty(pSet); + RTCpuSetAdd(pSet, RTMpCpuId()); +#endif + return pSet; +} +RT_EXPORT_SYMBOL(RTMpGetOnlineSet); + + +RTDECL(RTCPUID) RTMpGetOnlineCount(void) +{ +#ifdef CONFIG_SMP +# if defined(num_online_cpus) + return num_online_cpus(); +# else + RTCPUSET Set; + RTMpGetOnlineSet(&Set); + return RTCpuSetCount(&Set); +# endif +#else + return 1; +#endif +} +RT_EXPORT_SYMBOL(RTMpGetOnlineCount); + + +RTDECL(bool) RTMpIsCpuWorkPending(void) +{ + /** @todo (not used on non-Windows platforms yet). */ + return false; +} +RT_EXPORT_SYMBOL(RTMpIsCpuWorkPending); + + +/** + * Wrapper between the native linux per-cpu callbacks and PFNRTWORKER. + * + * @param pvInfo Pointer to the RTMPARGS package. + */ +static void rtmpLinuxWrapper(void *pvInfo) +{ + PRTMPARGS pArgs = (PRTMPARGS)pvInfo; + ASMAtomicIncU32(&pArgs->cHits); + pArgs->pfnWorker(RTMpCpuId(), pArgs->pvUser1, pArgs->pvUser2); +} + + +/** + * Wrapper between the native linux per-cpu callbacks and PFNRTWORKER, does hit + * increment after calling the worker. + * + * @param pvInfo Pointer to the RTMPARGS package. + */ +static void rtmpLinuxWrapperPostInc(void *pvInfo) +{ + PRTMPARGS pArgs = (PRTMPARGS)pvInfo; + pArgs->pfnWorker(RTMpCpuId(), pArgs->pvUser1, pArgs->pvUser2); + ASMAtomicIncU32(&pArgs->cHits); +} + + +/** + * Wrapper between the native linux all-cpu callbacks and PFNRTWORKER. + * + * @param pvInfo Pointer to the RTMPARGS package. + */ +static void rtmpLinuxAllWrapper(void *pvInfo) +{ + PRTMPARGS pArgs = (PRTMPARGS)pvInfo; + PRTCPUSET pWorkerSet = pArgs->pWorkerSet; + RTCPUID idCpu = RTMpCpuId(); + Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); + + if (RTCpuSetIsMember(pWorkerSet, idCpu)) + { + pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2); + RTCpuSetDel(pWorkerSet, idCpu); + } +} + + +RTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) +{ + IPRT_LINUX_SAVE_EFL_AC(); + int rc; + RTMPARGS Args; + RTCPUSET OnlineSet; + RTCPUID idCpu; + uint32_t cLoops; + + RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; + + Args.pfnWorker = pfnWorker; + Args.pvUser1 = pvUser1; + Args.pvUser2 = pvUser2; + Args.idCpu = NIL_RTCPUID; + Args.cHits = 0; + + RTThreadPreemptDisable(&PreemptState); + RTMpGetOnlineSet(&OnlineSet); + Args.pWorkerSet = &OnlineSet; + idCpu = RTMpCpuId(); + + if (RTCpuSetCount(&OnlineSet) > 1) + { + /* Fire the function on all other CPUs without waiting for completion. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */); +#else + rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* retry */, 0 /* wait */); +#endif + Assert(!rc); NOREF(rc); + } + + /* Fire the function on this CPU. */ + Args.pfnWorker(idCpu, Args.pvUser1, Args.pvUser2); + RTCpuSetDel(Args.pWorkerSet, idCpu); + + /* Wait for all of them finish. */ + cLoops = 64000; + while (!RTCpuSetIsEmpty(Args.pWorkerSet)) + { + /* Periodically check if any CPU in the wait set has gone offline, if so update the wait set. */ + if (!cLoops--) + { + RTCPUSET OnlineSetNow; + RTMpGetOnlineSet(&OnlineSetNow); + RTCpuSetAnd(Args.pWorkerSet, &OnlineSetNow); + + cLoops = 64000; + } + + ASMNopPause(); + } + + RTThreadPreemptRestore(&PreemptState); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTMpOnAll); + + +RTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) +{ + IPRT_LINUX_SAVE_EFL_AC(); + int rc; + RTMPARGS Args; + + RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; + Args.pfnWorker = pfnWorker; + Args.pvUser1 = pvUser1; + Args.pvUser2 = pvUser2; + Args.idCpu = NIL_RTCPUID; + Args.cHits = 0; + + RTThreadPreemptDisable(&PreemptState); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */); +#else /* older kernels */ + rc = smp_call_function(rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */); +#endif /* older kernels */ + RTThreadPreemptRestore(&PreemptState); + + Assert(rc == 0); NOREF(rc); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTMpOnOthers); + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) +/** + * Wrapper between the native linux per-cpu callbacks and PFNRTWORKER + * employed by RTMpOnPair on older kernels that lacks smp_call_function_many. + * + * @param pvInfo Pointer to the RTMPARGS package. + */ +static void rtMpLinuxOnPairWrapper(void *pvInfo) +{ + PRTMPARGS pArgs = (PRTMPARGS)pvInfo; + RTCPUID idCpu = RTMpCpuId(); + + if ( idCpu == pArgs->idCpu + || idCpu == pArgs->idCpu2) + { + pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2); + ASMAtomicIncU32(&pArgs->cHits); + } +} +#endif + + +RTDECL(int) RTMpOnPair(RTCPUID idCpu1, RTCPUID idCpu2, uint32_t fFlags, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) +{ + IPRT_LINUX_SAVE_EFL_AC(); + int rc; + RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; + + AssertReturn(idCpu1 != idCpu2, VERR_INVALID_PARAMETER); + AssertReturn(!(fFlags & RTMPON_F_VALID_MASK), VERR_INVALID_FLAGS); + + /* + * Check that both CPUs are online before doing the broadcast call. + */ + RTThreadPreemptDisable(&PreemptState); + if ( RTMpIsCpuOnline(idCpu1) + && RTMpIsCpuOnline(idCpu2)) + { + /* + * Use the smp_call_function variant taking a cpu mask where available, + * falling back on broadcast with filter. Slight snag if one of the + * CPUs is the one we're running on, we must do the call and the post + * call wait ourselves. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) + /* 2.6.28 introduces CONFIG_CPUMASK_OFFSTACK */ + cpumask_var_t DstCpuMask; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + cpumask_t DstCpuMask; +#endif + RTCPUID idCpuSelf = RTMpCpuId(); + bool const fCallSelf = idCpuSelf == idCpu1 || idCpuSelf == idCpu2; + RTMPARGS Args; + Args.pfnWorker = pfnWorker; + Args.pvUser1 = pvUser1; + Args.pvUser2 = pvUser2; + Args.idCpu = idCpu1; + Args.idCpu2 = idCpu2; + Args.cHits = 0; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) + if (!zalloc_cpumask_var(&DstCpuMask, GFP_KERNEL)) + return VERR_NO_MEMORY; + cpumask_set_cpu(idCpu1, DstCpuMask); + cpumask_set_cpu(idCpu2, DstCpuMask); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) + if (!alloc_cpumask_var(&DstCpuMask, GFP_KERNEL)) + return VERR_NO_MEMORY; + cpumask_clear(DstCpuMask); + cpumask_set_cpu(idCpu1, DstCpuMask); + cpumask_set_cpu(idCpu2, DstCpuMask); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + cpus_clear(DstCpuMask); + cpu_set(idCpu1, DstCpuMask); + cpu_set(idCpu2, DstCpuMask); +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) + smp_call_function_many(DstCpuMask, rtmpLinuxWrapperPostInc, &Args, !fCallSelf /* wait */); + rc = 0; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + rc = smp_call_function_mask(DstCpuMask, rtmpLinuxWrapperPostInc, &Args, !fCallSelf /* wait */); +#else /* older kernels */ + rc = smp_call_function(rtMpLinuxOnPairWrapper, &Args, 0 /* retry */, !fCallSelf /* wait */); +#endif /* older kernels */ + Assert(rc == 0); + + /* Call ourselves if necessary and wait for the other party to be done. */ + if (fCallSelf) + { + uint32_t cLoops = 0; + rtmpLinuxWrapper(&Args); + while (ASMAtomicReadU32(&Args.cHits) < 2) + { + if ((cLoops & 0x1ff) == 0 && !RTMpIsCpuOnline(idCpuSelf == idCpu1 ? idCpu2 : idCpu1)) + break; + cLoops++; + ASMNopPause(); + } + } + + Assert(Args.cHits <= 2); + if (Args.cHits == 2) + rc = VINF_SUCCESS; + else if (Args.cHits == 1) + rc = VERR_NOT_ALL_CPUS_SHOWED; + else if (Args.cHits == 0) + rc = VERR_CPU_OFFLINE; + else + rc = VERR_CPU_IPE_1; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) + free_cpumask_var(DstCpuMask); +#endif + } + /* + * A CPU must be present to be considered just offline. + */ + else if ( RTMpIsCpuPresent(idCpu1) + && RTMpIsCpuPresent(idCpu2)) + rc = VERR_CPU_OFFLINE; + else + rc = VERR_CPU_NOT_FOUND; + RTThreadPreemptRestore(&PreemptState);; + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} +RT_EXPORT_SYMBOL(RTMpOnPair); + + +RTDECL(bool) RTMpOnPairIsConcurrentExecSupported(void) +{ + return true; +} +RT_EXPORT_SYMBOL(RTMpOnPairIsConcurrentExecSupported); + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +/** + * Wrapper between the native linux per-cpu callbacks and PFNRTWORKER + * employed by RTMpOnSpecific on older kernels that lacks smp_call_function_single. + * + * @param pvInfo Pointer to the RTMPARGS package. + */ +static void rtmpOnSpecificLinuxWrapper(void *pvInfo) +{ + PRTMPARGS pArgs = (PRTMPARGS)pvInfo; + RTCPUID idCpu = RTMpCpuId(); + + if (idCpu == pArgs->idCpu) + { + pArgs->pfnWorker(idCpu, pArgs->pvUser1, pArgs->pvUser2); + ASMAtomicIncU32(&pArgs->cHits); + } +} +#endif + + +RTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) +{ + IPRT_LINUX_SAVE_EFL_AC(); + int rc; + RTMPARGS Args; + + RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER; + Args.pfnWorker = pfnWorker; + Args.pvUser1 = pvUser1; + Args.pvUser2 = pvUser2; + Args.idCpu = idCpu; + Args.cHits = 0; + + if (!RTMpIsCpuPossible(idCpu)) + return VERR_CPU_NOT_FOUND; + + RTThreadPreemptDisable(&PreemptState); + if (idCpu != RTMpCpuId()) + { + if (RTMpIsCpuOnline(idCpu)) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + rc = smp_call_function_single(idCpu, rtmpLinuxWrapper, &Args, 1 /* wait */); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) + rc = smp_call_function_single(idCpu, rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */); +#else /* older kernels */ + rc = smp_call_function(rtmpOnSpecificLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */); +#endif /* older kernels */ + Assert(rc == 0); + rc = Args.cHits ? VINF_SUCCESS : VERR_CPU_OFFLINE; + } + else + rc = VERR_CPU_OFFLINE; + } + else + { + rtmpLinuxWrapper(&Args); + rc = VINF_SUCCESS; + } + RTThreadPreemptRestore(&PreemptState);; + + NOREF(rc); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} +RT_EXPORT_SYMBOL(RTMpOnSpecific); + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) +/** + * Dummy callback used by RTMpPokeCpu. + * + * @param pvInfo Ignored. + */ +static void rtmpLinuxPokeCpuCallback(void *pvInfo) +{ + NOREF(pvInfo); +} +#endif + + +RTDECL(int) RTMpPokeCpu(RTCPUID idCpu) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + + if (!RTMpIsCpuPossible(idCpu)) + return VERR_CPU_NOT_FOUND; + if (!RTMpIsCpuOnline(idCpu)) + return VERR_CPU_OFFLINE; + +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) + rc = smp_call_function_single(idCpu, rtmpLinuxPokeCpuCallback, NULL, 0 /* wait */); +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) + rc = smp_call_function_single(idCpu, rtmpLinuxPokeCpuCallback, NULL, 0 /* retry */, 0 /* wait */); +# else /* older kernels */ +# error oops +# endif /* older kernels */ + NOREF(rc); + Assert(rc == 0); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + +#else /* older kernels */ + /* no unicast here? */ + return VERR_NOT_SUPPORTED; +#endif /* older kernels */ +} +RT_EXPORT_SYMBOL(RTMpPokeCpu); + + +RTDECL(bool) RTMpOnAllIsConcurrentSafe(void) +{ + return true; +} +RT_EXPORT_SYMBOL(RTMpOnAllIsConcurrentSafe); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/mpnotification-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/mpnotification-r0drv-linux.c @@ -0,0 +1,248 @@ +/* $Id: mpnotification-r0drv-linux.c $ */ +/** @file + * IPRT - Multiprocessor Event Notifications, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include +#include +#include +#include "r0drv/mp-r0drv.h" + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) + +static enum cpuhp_state g_rtR0MpOnline; + +/* + * Linux 4.10 completely removed CPU notifiers. So let's switch to CPU hotplug + * notification. + */ + +static int rtR0MpNotificationLinuxOnline(unsigned int cpu) +{ + RTCPUID idCpu = RTMpCpuIdFromSetIndex(cpu); + rtMpNotificationDoCallbacks(RTMPEVENT_ONLINE, idCpu); + return 0; +} + +static int rtR0MpNotificationLinuxOffline(unsigned int cpu) +{ + RTCPUID idCpu = RTMpCpuIdFromSetIndex(cpu); + rtMpNotificationDoCallbacks(RTMPEVENT_OFFLINE, idCpu); + return 0; +} + +DECLHIDDEN(int) rtR0MpNotificationNativeInit(void) +{ + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + rc = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "vboxdrv:online", + rtR0MpNotificationLinuxOnline, rtR0MpNotificationLinuxOffline); + IPRT_LINUX_RESTORE_EFL_AC(); + /* + * cpuhp_setup_state_nocalls() returns a positive state number for + * CPUHP_AP_ONLINE_DYN or -ENOSPC if there is no free slot available + * (see cpuhp_reserve_state / definition of CPUHP_AP_ONLINE_DYN). + */ + AssertMsgReturn(rc > 0, ("%d\n", rc), RTErrConvertFromErrno(rc)); + g_rtR0MpOnline = rc; + return VINF_SUCCESS; +} + + +DECLHIDDEN(void) rtR0MpNotificationNativeTerm(void) +{ + IPRT_LINUX_SAVE_EFL_AC(); + cpuhp_remove_state_nocalls(g_rtR0MpOnline); + IPRT_LINUX_RESTORE_EFL_AC(); +} + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 71) && defined(CONFIG_SMP) + +static int rtMpNotificationLinuxCallback(struct notifier_block *pNotifierBlock, unsigned long ulNativeEvent, void *pvCpu); + +/** + * The notifier block we use for registering the callback. + */ +static struct notifier_block g_NotifierBlock = +{ + .notifier_call = rtMpNotificationLinuxCallback, + .next = NULL, + .priority = 0 +}; + +# ifdef CPU_DOWN_FAILED +/** + * The set of CPUs we've seen going offline recently. + */ +static RTCPUSET g_MpPendingOfflineSet; +# endif + + +/** + * The native callback. + * + * @returns NOTIFY_DONE. + * @param pNotifierBlock Pointer to g_NotifierBlock. + * @param ulNativeEvent The native event. + * @param pvCpu The cpu id cast into a pointer value. + * + * @remarks This can fire with preemption enabled and on any CPU. + */ +static int rtMpNotificationLinuxCallback(struct notifier_block *pNotifierBlock, unsigned long ulNativeEvent, void *pvCpu) +{ + bool fProcessEvent = false; + RTCPUID idCpu = (uintptr_t)pvCpu; + NOREF(pNotifierBlock); + + /* + * Note that redhat/CentOS ported _some_ of the FROZEN macros + * back to their 2.6.18-92.1.10.el5 kernel but actually don't + * use them. Thus we have to test for both CPU_TASKS_FROZEN and + * the individual event variants. + */ + switch (ulNativeEvent) + { + /* + * Pick up online events or failures to go offline. + * Ignore failure events for CPUs we didn't see go offline. + */ +# ifdef CPU_DOWN_FAILED + case CPU_DOWN_FAILED: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_DOWN_FAILED_FROZEN) + case CPU_DOWN_FAILED_FROZEN: +# endif + if (!RTCpuSetIsMember(&g_MpPendingOfflineSet, idCpu)) + break; /* fProcessEvents = false */ + /* fall thru */ +# endif + case CPU_ONLINE: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_ONLINE_FROZEN) + case CPU_ONLINE_FROZEN: +# endif +# ifdef CPU_DOWN_FAILED + RTCpuSetDel(&g_MpPendingOfflineSet, idCpu); +# endif + fProcessEvent = true; + break; + + /* + * Pick the earliest possible offline event. + * The only important thing here is that we get the event and that + * it's exactly one. + */ +# ifdef CPU_DOWN_PREPARE + case CPU_DOWN_PREPARE: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_DOWN_PREPARE_FROZEN) + case CPU_DOWN_PREPARE_FROZEN: +# endif + fProcessEvent = true; +# else + case CPU_DEAD: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_DEAD_FROZEN) + case CPU_DEAD_FROZEN: +# endif + /* Don't process CPU_DEAD notifications. */ +# endif +# ifdef CPU_DOWN_FAILED + RTCpuSetAdd(&g_MpPendingOfflineSet, idCpu); +# endif + break; + } + + if (!fProcessEvent) + return NOTIFY_DONE; + + switch (ulNativeEvent) + { +# ifdef CPU_DOWN_FAILED + case CPU_DOWN_FAILED: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_DOWN_FAILED_FROZEN) + case CPU_DOWN_FAILED_FROZEN: +# endif +# endif + case CPU_ONLINE: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_ONLINE_FROZEN) + case CPU_ONLINE_FROZEN: +# endif + rtMpNotificationDoCallbacks(RTMPEVENT_ONLINE, idCpu); + break; + +# ifdef CPU_DOWN_PREPARE + case CPU_DOWN_PREPARE: +# if defined(CPU_TASKS_FROZEN) && defined(CPU_DOWN_PREPARE_FROZEN) + case CPU_DOWN_PREPARE_FROZEN: +# endif + rtMpNotificationDoCallbacks(RTMPEVENT_OFFLINE, idCpu); + break; +# endif + } + + return NOTIFY_DONE; +} + + +DECLHIDDEN(int) rtR0MpNotificationNativeInit(void) +{ + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + +# ifdef CPU_DOWN_FAILED + RTCpuSetEmpty(&g_MpPendingOfflineSet); +# endif + + rc = register_cpu_notifier(&g_NotifierBlock); + IPRT_LINUX_RESTORE_EFL_AC(); + AssertMsgReturn(!rc, ("%d\n", rc), RTErrConvertFromErrno(rc)); + return VINF_SUCCESS; +} + + +DECLHIDDEN(void) rtR0MpNotificationNativeTerm(void) +{ + IPRT_LINUX_SAVE_EFL_AC(); + unregister_cpu_notifier(&g_NotifierBlock); + IPRT_LINUX_RESTORE_EFL_AC(); +} + +#else /* Not supported / Not needed */ + +DECLHIDDEN(int) rtR0MpNotificationNativeInit(void) +{ + return VINF_SUCCESS; +} + +DECLHIDDEN(void) rtR0MpNotificationNativeTerm(void) +{ +} + +#endif /* Not supported / Not needed */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/process-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/process-r0drv-linux.c @@ -0,0 +1,49 @@ +/* $Id: process-r0drv-linux.c $ */ +/** @file + * IPRT - Process, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include + + +RTDECL(RTPROCESS) RTProcSelf(void) +{ + return (RTPROCESS)current->tgid; +} +RT_EXPORT_SYMBOL(RTProcSelf); + + +RTR0DECL(RTR0PROCESS) RTR0ProcHandleSelf(void) +{ + return (RTR0PROCESS)current->tgid; +} +RT_EXPORT_SYMBOL(RTR0ProcHandleSelf); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/semevent-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/semevent-r0drv-linux.c @@ -0,0 +1,279 @@ +/* $Id: semevent-r0drv-linux.c $ */ +/** @file + * IPRT - Single Release Event Semaphores, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define RTSEMEVENT_WITHOUT_REMAPPING +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#include +#include +#include +#include + +#include "waitqueue-r0drv-linux.h" +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Linux event semaphore. + */ +typedef struct RTSEMEVENTINTERNAL +{ + /** Magic value (RTSEMEVENT_MAGIC). */ + uint32_t volatile u32Magic; + /** The object status - !0 when signaled and 0 when reset. */ + uint32_t volatile fState; + /** Reference counter. */ + uint32_t volatile cRefs; + /** The wait queue. */ + wait_queue_head_t Head; +} RTSEMEVENTINTERNAL, *PRTSEMEVENTINTERNAL; + + + +RTDECL(int) RTSemEventCreate(PRTSEMEVENT phEventSem) +{ + return RTSemEventCreateEx(phEventSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL); +} + + +RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) +{ + PRTSEMEVENTINTERNAL pThis; + IPRT_LINUX_SAVE_EFL_AC(); + RT_NOREF_PV(hClass); RT_NOREF_PV(pszNameFmt); + + AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); + Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); + + pThis = (PRTSEMEVENTINTERNAL)RTMemAlloc(sizeof(*pThis)); + if (!pThis) + return VERR_NO_MEMORY; + + pThis->u32Magic = RTSEMEVENT_MAGIC; + pThis->fState = 0; + pThis->cRefs = 1; + init_waitqueue_head(&pThis->Head); + + *phEventSem = pThis; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventCreate); + + +/** + * Retains a reference to the event semaphore. + * + * @param pThis The event semaphore. + */ +DECLINLINE(void) rtR0SemEventLnxRetain(PRTSEMEVENTINTERNAL pThis) +{ + uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs); + Assert(cRefs < 100000); NOREF(cRefs); +} + + +/** + * Releases a reference to the event semaphore. + * + * @param pThis The event semaphore. + */ +DECLINLINE(void) rtR0SemEventLnxRelease(PRTSEMEVENTINTERNAL pThis) +{ + if (RT_UNLIKELY(ASMAtomicDecU32(&pThis->cRefs) == 0)) + RTMemFree(pThis); +} + + +RTDECL(int) RTSemEventDestroy(RTSEMEVENT hEventSem) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate input. + */ + PRTSEMEVENTINTERNAL pThis = hEventSem; + if (pThis == NIL_RTSEMEVENT) + return VINF_SUCCESS; + AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + Assert(pThis->cRefs > 0); + + /* + * Invalidate it and signal the object just in case. + */ + ASMAtomicWriteU32(&pThis->u32Magic, ~RTSEMEVENT_MAGIC); + ASMAtomicWriteU32(&pThis->fState, 0); + Assert(!waitqueue_active(&pThis->Head)); + wake_up_all(&pThis->Head); + rtR0SemEventLnxRelease(pThis); + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventDestroy); + + +RTDECL(int) RTSemEventSignal(RTSEMEVENT hEventSem) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate input. + */ + PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)hEventSem; + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + rtR0SemEventLnxRetain(pThis); + + /* + * Signal the event object. + */ + ASMAtomicWriteU32(&pThis->fState, 1); + wake_up(&pThis->Head); + + rtR0SemEventLnxRelease(pThis); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventSignal); + + +/** + * Worker for RTSemEventWaitEx and RTSemEventWaitExDebug. + * + * @returns VBox status code. + * @param pThis The event semaphore. + * @param fFlags See RTSemEventWaitEx. + * @param uTimeout See RTSemEventWaitEx. + * @param pSrcPos The source code position of the wait. + */ +static int rtR0SemEventLnxWait(PRTSEMEVENTINTERNAL pThis, uint32_t fFlags, uint64_t uTimeout, + PCRTLOCKVALSRCPOS pSrcPos) +{ + int rc; + RT_NOREF_PV(pSrcPos); + + /* + * Validate the input. + */ + AssertPtrReturn(pThis, VERR_INVALID_PARAMETER); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER); + AssertReturn(RTSEMWAIT_FLAGS_ARE_VALID(fFlags), VERR_INVALID_PARAMETER); + rtR0SemEventLnxRetain(pThis); + + /* + * Try grab the event without setting up the wait. + */ + if ( 1 /** @todo check if there are someone waiting already - waitqueue_active, but then what do we do below? */ + && ASMAtomicCmpXchgU32(&pThis->fState, 0, 1)) + rc = VINF_SUCCESS; + else + { + /* + * We have to wait. + */ + IPRT_LINUX_SAVE_EFL_AC(); + RTR0SEMLNXWAIT Wait; + rc = rtR0SemLnxWaitInit(&Wait, fFlags, uTimeout, &pThis->Head); + if (RT_SUCCESS(rc)) + { + IPRT_DEBUG_SEMS_STATE(pThis, 'E'); + for (;;) + { + /* The destruction test. */ + if (RT_UNLIKELY(pThis->u32Magic != RTSEMEVENT_MAGIC)) + rc = VERR_SEM_DESTROYED; + else + { + rtR0SemLnxWaitPrepare(&Wait); + + /* Check the exit conditions. */ + if (RT_UNLIKELY(pThis->u32Magic != RTSEMEVENT_MAGIC)) + rc = VERR_SEM_DESTROYED; + else if (ASMAtomicCmpXchgU32(&pThis->fState, 0, 1)) + rc = VINF_SUCCESS; + else if (rtR0SemLnxWaitHasTimedOut(&Wait)) + rc = VERR_TIMEOUT; + else if (rtR0SemLnxWaitWasInterrupted(&Wait)) + rc = VERR_INTERRUPTED; + else + { + /* Do the wait and then recheck the conditions. */ + rtR0SemLnxWaitDoIt(&Wait); + continue; + } + } + break; + } + + rtR0SemLnxWaitDelete(&Wait); + IPRT_DEBUG_SEMS_STATE_RC(pThis, 'E', rc); + } + IPRT_LINUX_RESTORE_EFL_AC(); + } + + rtR0SemEventLnxRelease(pThis); + return rc; +} + + +RTDECL(int) RTSemEventWaitEx(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout) +{ +#ifndef RTSEMEVENT_STRICT + return rtR0SemEventLnxWait(hEventSem, fFlags, uTimeout, NULL); +#else + RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); + return rtR0SemEventLnxWait(hEventSem, fFlags, uTimeout, &SrcPos); +#endif +} +RT_EXPORT_SYMBOL(RTSemEventWaitEx); + + +RTDECL(int) RTSemEventWaitExDebug(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL) +{ + RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); + return rtR0SemEventLnxWait(hEventSem, fFlags, uTimeout, &SrcPos); +} +RT_EXPORT_SYMBOL(RTSemEventWaitExDebug); + + +RTDECL(uint32_t) RTSemEventGetResolution(void) +{ + return rtR0SemLnxWaitGetResolution(); +} +RT_EXPORT_SYMBOL(RTSemEventGetResolution); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/semeventmulti-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/semeventmulti-r0drv-linux.c @@ -0,0 +1,344 @@ +/* $Id: semeventmulti-r0drv-linux.c $ */ +/** @file + * IPRT - Multiple Release Event Semaphores, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define RTSEMEVENTMULTI_WITHOUT_REMAPPING +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#include +#include +#include +#include + +#include "waitqueue-r0drv-linux.h" +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +/** @name fStateAndGen values + * @{ */ +/** The state bit number. */ +#define RTSEMEVENTMULTILNX_STATE_BIT 0 +/** The state mask. */ +#define RTSEMEVENTMULTILNX_STATE_MASK RT_BIT_32(RTSEMEVENTMULTILNX_STATE_BIT) +/** The generation mask. */ +#define RTSEMEVENTMULTILNX_GEN_MASK ~RTSEMEVENTMULTILNX_STATE_MASK +/** The generation shift. */ +#define RTSEMEVENTMULTILNX_GEN_SHIFT 1 +/** The initial variable value. */ +#define RTSEMEVENTMULTILNX_STATE_GEN_INIT UINT32_C(0xfffffffc) +/** @} */ + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Linux event semaphore. + */ +typedef struct RTSEMEVENTMULTIINTERNAL +{ + /** Magic value (RTSEMEVENTMULTI_MAGIC). */ + uint32_t volatile u32Magic; + /** The object state bit and generation counter. + * The generation counter is incremented every time the object is + * signalled. */ + uint32_t volatile fStateAndGen; + /** Reference counter. */ + uint32_t volatile cRefs; + /** The wait queue. */ + wait_queue_head_t Head; +} RTSEMEVENTMULTIINTERNAL, *PRTSEMEVENTMULTIINTERNAL; + + + + + +RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem) +{ + return RTSemEventMultiCreateEx(phEventMultiSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL); +} + + +RTDECL(int) RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass, + const char *pszNameFmt, ...) +{ + PRTSEMEVENTMULTIINTERNAL pThis; + IPRT_LINUX_SAVE_EFL_AC(); + RT_NOREF_PV(hClass); RT_NOREF_PV(pszNameFmt); + + AssertReturn(!(fFlags & ~RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); + pThis = (PRTSEMEVENTMULTIINTERNAL)RTMemAlloc(sizeof(*pThis)); + if (pThis) + { + pThis->u32Magic = RTSEMEVENTMULTI_MAGIC; + pThis->fStateAndGen = RTSEMEVENTMULTILNX_STATE_GEN_INIT; + pThis->cRefs = 1; + init_waitqueue_head(&pThis->Head); + + *phEventMultiSem = pThis; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_NO_MEMORY; +} +RT_EXPORT_SYMBOL(RTSemEventMultiCreate); + + +/** + * Retain a reference to the semaphore. + * + * @param pThis The semaphore. + */ +DECLINLINE(void) rtR0SemEventMultiLnxRetain(PRTSEMEVENTMULTIINTERNAL pThis) +{ + uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs); + NOREF(cRefs); + Assert(cRefs && cRefs < 100000); +} + + +/** + * Release a reference, destroy the thing if necessary. + * + * @param pThis The semaphore. + */ +DECLINLINE(void) rtR0SemEventMultiLnxRelease(PRTSEMEVENTMULTIINTERNAL pThis) +{ + if (RT_UNLIKELY(ASMAtomicDecU32(&pThis->cRefs) == 0)) + { + Assert(pThis->u32Magic != RTSEMEVENTMULTI_MAGIC); + RTMemFree(pThis); + } +} + + +RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate input. + */ + PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem; + if (pThis == NIL_RTSEMEVENTMULTI) + return VINF_SUCCESS; + AssertPtrReturn(pThis, VERR_INVALID_PARAMETER); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER); + Assert(pThis->cRefs > 0); + + /* + * Invalidate it and signal the object just in case. + */ + ASMAtomicWriteU32(&pThis->u32Magic, ~RTSEMEVENTMULTI_MAGIC); + ASMAtomicAndU32(&pThis->fStateAndGen, RTSEMEVENTMULTILNX_GEN_MASK); + Assert(!waitqueue_active(&pThis->Head)); + wake_up_all(&pThis->Head); + rtR0SemEventMultiLnxRelease(pThis); + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventMultiDestroy); + + +RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem) +{ + IPRT_LINUX_SAVE_EFL_AC(); + uint32_t fNew; + uint32_t fOld; + + /* + * Validate input. + */ + PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem; + if (!pThis) + return VERR_INVALID_PARAMETER; + AssertPtrReturn(pThis, VERR_INVALID_PARAMETER); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER); + rtR0SemEventMultiLnxRetain(pThis); + + /* + * Signal the event object. The cause of the paranoia here is racing to try + * deal with racing RTSemEventMultiSignal calls (should probably be + * forbidden, but it's relatively easy to handle). + */ + do + { + fNew = fOld = ASMAtomicUoReadU32(&pThis->fStateAndGen); + fNew += 1 << RTSEMEVENTMULTILNX_GEN_SHIFT; + fNew |= RTSEMEVENTMULTILNX_STATE_MASK; + } + while (!ASMAtomicCmpXchgU32(&pThis->fStateAndGen, fNew, fOld)); + + wake_up_all(&pThis->Head); + + rtR0SemEventMultiLnxRelease(pThis); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventMultiSignal); + + +RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem) +{ + /* + * Validate input. + */ + PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem; + if (!pThis) + return VERR_INVALID_PARAMETER; + AssertPtrReturn(pThis, VERR_INVALID_PARAMETER); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER); + rtR0SemEventMultiLnxRetain(pThis); + + /* + * Reset it. + */ + ASMAtomicAndU32(&pThis->fStateAndGen, ~RTSEMEVENTMULTILNX_STATE_MASK); + + rtR0SemEventMultiLnxRelease(pThis); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemEventMultiReset); + + +/** + * Worker for RTSemEventMultiWaitEx and RTSemEventMultiWaitExDebug. + * + * @returns VBox status code. + * @param pThis The event semaphore. + * @param fFlags See RTSemEventMultiWaitEx. + * @param uTimeout See RTSemEventMultiWaitEx. + * @param pSrcPos The source code position of the wait. + */ +static int rtR0SemEventMultiLnxWait(PRTSEMEVENTMULTIINTERNAL pThis, uint32_t fFlags, uint64_t uTimeout, + PCRTLOCKVALSRCPOS pSrcPos) +{ + uint32_t fOrgStateAndGen; + int rc; + RT_NOREF_PV(pSrcPos); + + /* + * Validate the input. + */ + AssertPtrReturn(pThis, VERR_INVALID_PARAMETER); + AssertMsgReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER); + AssertReturn(RTSEMWAIT_FLAGS_ARE_VALID(fFlags), VERR_INVALID_PARAMETER); + rtR0SemEventMultiLnxRetain(pThis); + + /* + * Is the event already signalled or do we have to wait? + */ + fOrgStateAndGen = ASMAtomicUoReadU32(&pThis->fStateAndGen); + if (fOrgStateAndGen & RTSEMEVENTMULTILNX_STATE_MASK) + rc = VINF_SUCCESS; + else + { + /* + * We have to wait. + */ + RTR0SEMLNXWAIT Wait; + IPRT_LINUX_SAVE_EFL_AC(); + rc = rtR0SemLnxWaitInit(&Wait, fFlags, uTimeout, &pThis->Head); + if (RT_SUCCESS(rc)) + { + IPRT_DEBUG_SEMS_STATE(pThis, 'E'); + for (;;) + { + /* The destruction test. */ + if (RT_UNLIKELY(pThis->u32Magic != RTSEMEVENTMULTI_MAGIC)) + rc = VERR_SEM_DESTROYED; + else + { + rtR0SemLnxWaitPrepare(&Wait); + + /* Check the exit conditions. */ + if (RT_UNLIKELY(pThis->u32Magic != RTSEMEVENTMULTI_MAGIC)) + rc = VERR_SEM_DESTROYED; + else if (ASMAtomicUoReadU32(&pThis->fStateAndGen) != fOrgStateAndGen) + rc = VINF_SUCCESS; + else if (rtR0SemLnxWaitHasTimedOut(&Wait)) + rc = VERR_TIMEOUT; + else if (rtR0SemLnxWaitWasInterrupted(&Wait)) + rc = VERR_INTERRUPTED; + else + { + /* Do the wait and then recheck the conditions. */ + rtR0SemLnxWaitDoIt(&Wait); + continue; + } + } + break; + } + + rtR0SemLnxWaitDelete(&Wait); + IPRT_DEBUG_SEMS_STATE_RC(pThis, 'E', rc); + } + IPRT_LINUX_RESTORE_EFL_AC(); + } + + rtR0SemEventMultiLnxRelease(pThis); + return rc; +} + + +RTDECL(int) RTSemEventMultiWaitEx(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout) +{ +#ifndef RTSEMEVENT_STRICT + return rtR0SemEventMultiLnxWait(hEventMultiSem, fFlags, uTimeout, NULL); +#else + RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_NORMAL_API(); + return rtR0SemEventMultiLnxWait(hEventMultiSem, fFlags, uTimeout, &SrcPos); +#endif +} +RT_EXPORT_SYMBOL(RTSemEventMultiWaitEx); + + +RTDECL(int) RTSemEventMultiWaitExDebug(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL) +{ + RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); + return rtR0SemEventMultiLnxWait(hEventMultiSem, fFlags, uTimeout, &SrcPos); +} +RT_EXPORT_SYMBOL(RTSemEventMultiWaitExDebug); + + +RTDECL(uint32_t) RTSemEventMultiGetResolution(void) +{ + return rtR0SemLnxWaitGetResolution(); +} +RT_EXPORT_SYMBOL(RTSemEventMultiGetResolution); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/semfastmutex-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/semfastmutex-r0drv-linux.c @@ -0,0 +1,157 @@ +/* $Id: semfastmutex-r0drv-linux.c $ */ +/** @file + * IPRT - Fast Mutex Semaphores, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include +#include +#include +#include +#include +#if defined(RT_STRICT) || defined(IPRT_DEBUG_SEMS) +# include +#endif + +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Wrapper for the linux semaphore structure. + */ +typedef struct RTSEMFASTMUTEXINTERNAL +{ + /** Magic value (RTSEMFASTMUTEX_MAGIC). */ + uint32_t u32Magic; + /** the linux semaphore. */ + struct semaphore Semaphore; +#if defined(RT_STRICT) || defined(IPRT_DEBUG_SEMS) + /** For check. */ + RTNATIVETHREAD volatile Owner; +#endif +} RTSEMFASTMUTEXINTERNAL, *PRTSEMFASTMUTEXINTERNAL; + + +RTDECL(int) RTSemFastMutexCreate(PRTSEMFASTMUTEX phFastMtx) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Allocate. + */ + PRTSEMFASTMUTEXINTERNAL pThis; + pThis = (PRTSEMFASTMUTEXINTERNAL)RTMemAlloc(sizeof(*pThis)); + if (!pThis) + return VERR_NO_MEMORY; + + /* + * Initialize. + */ + pThis->u32Magic = RTSEMFASTMUTEX_MAGIC; + sema_init(&pThis->Semaphore, 1); +#if defined(RT_STRICT) || defined(IPRT_DEBUG_SEMS) + pThis->Owner = NIL_RTNATIVETHREAD; +#endif + + *phFastMtx = pThis; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemFastMutexCreate); + + +RTDECL(int) RTSemFastMutexDestroy(RTSEMFASTMUTEX hFastMtx) +{ + /* + * Validate. + */ + PRTSEMFASTMUTEXINTERNAL pThis = hFastMtx; + if (pThis == NIL_RTSEMFASTMUTEX) + return VINF_SUCCESS; + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMFASTMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + + ASMAtomicWriteU32(&pThis->u32Magic, RTSEMFASTMUTEX_MAGIC_DEAD); + RTMemFree(pThis); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemFastMutexDestroy); + + +RTDECL(int) RTSemFastMutexRequest(RTSEMFASTMUTEX hFastMtx) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + PRTSEMFASTMUTEXINTERNAL pThis = hFastMtx; + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMFASTMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + + IPRT_DEBUG_SEMS_STATE(pThis, 'd'); + down(&pThis->Semaphore); +#if defined(RT_STRICT) || defined(IPRT_DEBUG_SEMS) + IPRT_DEBUG_SEMS_STATE(pThis, 'o'); + AssertRelease(pThis->Owner == NIL_RTNATIVETHREAD); + ASMAtomicUoWriteSize(&pThis->Owner, RTThreadNativeSelf()); +#endif + + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemFastMutexRequest); + + +RTDECL(int) RTSemFastMutexRelease(RTSEMFASTMUTEX hFastMtx) +{ + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + PRTSEMFASTMUTEXINTERNAL pThis = hFastMtx; + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMFASTMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + +#if defined(RT_STRICT) || defined(IPRT_DEBUG_SEMS) + AssertRelease(pThis->Owner == RTThreadNativeSelf()); + ASMAtomicUoWriteSize(&pThis->Owner, NIL_RTNATIVETHREAD); +#endif + up(&pThis->Semaphore); + IPRT_DEBUG_SEMS_STATE(pThis, 'u'); + + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemFastMutexRelease); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/semmutex-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/semmutex-r0drv-linux.c @@ -0,0 +1,421 @@ +/* $Id: semmutex-r0drv-linux.c $ */ +/** @file + * IPRT - Mutex Semaphores, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define RTSEMMUTEX_WITHOUT_REMAPPING +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#include +#include +#include +#include + +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +typedef struct RTSEMMUTEXLNXWAITER +{ + /** The list entry. */ + RTLISTNODE ListEntry; + /** The waiting task. */ + struct task_struct *pTask; + /** Why did we wake up? */ + enum + { + /** Wakeup to take the semaphore. */ + RTSEMMUTEXLNXWAITER_WAKEUP, + /** Mutex is being destroyed. */ + RTSEMMUTEXLNXWAITER_DESTROYED, + /** Some other reason. */ + RTSEMMUTEXLNXWAITER_OTHER + } volatile enmReason; +} RTSEMMUTEXLNXWAITER, *PRTSEMMUTEXLNXWAITER; + +/** + * Wrapper for the linux semaphore structure. + */ +typedef struct RTSEMMUTEXINTERNAL +{ + /** Magic value (RTSEMMUTEX_MAGIC). */ + uint32_t u32Magic; + /** The number of recursions. */ + uint32_t cRecursions; + /** The list of waiting threads. */ + RTLISTANCHOR WaiterList; + /** The current owner, NULL if none. */ + struct task_struct *pOwnerTask; + /** The number of references to this piece of memory. This is used to + * prevent it from being kicked from underneath us while waiting. */ + uint32_t volatile cRefs; + /** The spinlock protecting the members and falling asleep. */ + spinlock_t Spinlock; +} RTSEMMUTEXINTERNAL, *PRTSEMMUTEXINTERNAL; + + +RTDECL(int) RTSemMutexCreate(PRTSEMMUTEX phMtx) +{ + int rc = VINF_SUCCESS; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Allocate. + */ + PRTSEMMUTEXINTERNAL pThis; + pThis = (PRTSEMMUTEXINTERNAL)RTMemAlloc(sizeof(*pThis)); + if (pThis) + { + /* + * Initialize. + */ + pThis->u32Magic = RTSEMMUTEX_MAGIC; + pThis->cRecursions = 0; + pThis->pOwnerTask = NULL; + pThis->cRefs = 1; + RTListInit(&pThis->WaiterList); + spin_lock_init(&pThis->Spinlock); + + *phMtx = pThis; + } + else + rc = VERR_NO_MEMORY; + + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} +RT_EXPORT_SYMBOL(RTSemMutexCreate); + + +RTDECL(int) RTSemMutexDestroy(RTSEMMUTEX hMtx) +{ + PRTSEMMUTEXINTERNAL pThis = hMtx; + PRTSEMMUTEXLNXWAITER pCur; + unsigned long fSavedIrq; + + /* + * Validate. + */ + if (pThis == NIL_RTSEMMUTEX) + return VINF_SUCCESS; + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + + /* + * Kill it, kick waiters and release it. + */ + AssertReturn(ASMAtomicCmpXchgU32(&pThis->u32Magic, RTSEMMUTEX_MAGIC_DEAD, RTSEMMUTEX_MAGIC), VERR_INVALID_HANDLE); + + IPRT_LINUX_SAVE_EFL_AC(); + + spin_lock_irqsave(&pThis->Spinlock, fSavedIrq); + RTListForEach(&pThis->WaiterList, pCur, RTSEMMUTEXLNXWAITER, ListEntry) + { + pCur->enmReason = RTSEMMUTEXLNXWAITER_DESTROYED; + wake_up_process(pCur->pTask); + } + + if (ASMAtomicDecU32(&pThis->cRefs) != 0) + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + else + { + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + RTMemFree(pThis); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSemMutexDestroy); + + +/** + * Worker for rtSemMutexLinuxRequest that handles the case where we go to sleep. + * + * @returns VINF_SUCCESS, VERR_INTERRUPTED, VERR_TIMEOUT or VERR_SEM_DESTROYED. + * Returns without owning the spinlock. + * @param pThis The mutex instance. + * @param cMillies The timeout. + * @param fInterruptible The wait type. + * @param fSavedIrq The saved IRQ flags. + */ +static int rtSemMutexLinuxRequestSleep(PRTSEMMUTEXINTERNAL pThis, RTMSINTERVAL cMillies, + bool fInterruptible, unsigned long fSavedIrq) +{ + struct task_struct *pSelf = current; + int rc = VERR_TIMEOUT; + long lTimeout = cMillies == RT_INDEFINITE_WAIT ? MAX_SCHEDULE_TIMEOUT : msecs_to_jiffies(cMillies); + RTSEMMUTEXLNXWAITER Waiter; + + IPRT_DEBUG_SEMS_STATE(pThis, 'm'); + + /* + * Grab a reference to the mutex and add ourselves to the waiter list. + */ + ASMAtomicIncU32(&pThis->cRefs); + + Waiter.pTask = pSelf; + Waiter.enmReason = RTSEMMUTEXLNXWAITER_OTHER; + RTListAppend(&pThis->WaiterList, &Waiter.ListEntry); + + /* + * Do the waiting. + */ + for (;;) + { + /* Check signal and timeout conditions. */ + if ( fInterruptible + && signal_pending(pSelf)) + { + rc = VERR_INTERRUPTED; + break; + } + + if (!lTimeout) + break; + + /* Go to sleep. */ + set_current_state(fInterruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); + spin_unlock_irq(&pThis->Spinlock); + + lTimeout = schedule_timeout(lTimeout); + + spin_lock_irq(&pThis->Spinlock); + set_current_state(TASK_RUNNING); + + /* Did someone wake us up? */ + if (Waiter.enmReason == RTSEMMUTEXLNXWAITER_WAKEUP) + { + Assert(pThis->cRecursions == 0); + pThis->cRecursions = 1; + pThis->pOwnerTask = pSelf; + rc = VINF_SUCCESS; + break; + } + + /* Is the mutex being destroyed? */ + if (RT_UNLIKELY( Waiter.enmReason == RTSEMMUTEXLNXWAITER_DESTROYED + || pThis->u32Magic != RTSEMMUTEX_MAGIC)) + { + rc = VERR_SEM_DESTROYED; + break; + } + } + + /* + * Unlink ourself from the waiter list, dereference the mutex and exit the + * lock. We might have to free the mutex if it was the destroyed. + */ + RTListNodeRemove(&Waiter.ListEntry); + IPRT_DEBUG_SEMS_STATE_RC(pThis, 'M', rc); + + if (RT_LIKELY(ASMAtomicDecU32(&pThis->cRefs) != 0)) + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + else + { + Assert(RT_FAILURE_NP(rc)); + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + RTMemFree(pThis); + } + return rc; +} + + +/** + * Internal worker. + */ +DECLINLINE(int) rtSemMutexLinuxRequest(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, bool fInterruptible) +{ + PRTSEMMUTEXINTERNAL pThis = hMutexSem; + struct task_struct *pSelf = current; + unsigned long fSavedIrq; + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + Assert(pThis->cRefs >= 1); + + /* + * Lock it and check if it's a recursion. + */ + spin_lock_irqsave(&pThis->Spinlock, fSavedIrq); + if (pThis->pOwnerTask == pSelf) + { + pThis->cRecursions++; + Assert(pThis->cRecursions > 1); + Assert(pThis->cRecursions < 256); + rc = VINF_SUCCESS; + } + /* + * Not a recursion, maybe it's not owned by anyone then? + */ + else if ( pThis->pOwnerTask == NULL + && RTListIsEmpty(&pThis->WaiterList)) + { + Assert(pThis->cRecursions == 0); + pThis->cRecursions = 1; + pThis->pOwnerTask = pSelf; + rc = VINF_SUCCESS; + } + /* + * Was it a polling call? + */ + else if (cMillies == 0) + rc = VERR_TIMEOUT; + /* + * No, so go to sleep. + */ + else + { + rc = rtSemMutexLinuxRequestSleep(pThis, cMillies, fInterruptible, fSavedIrq); + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + return rc; + } + + IPRT_DEBUG_SEMS_STATE_RC(pThis, 'M', rc); + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + return rc; +} + + +RTDECL(int) RTSemMutexRequest(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies) +{ + return rtSemMutexLinuxRequest(hMutexSem, cMillies, false /*fInterruptible*/); +} +RT_EXPORT_SYMBOL(RTSemMutexRequest); + + +RTDECL(int) RTSemMutexRequestDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) +{ + RT_NOREF_PV(uId); RT_SRC_POS_NOREF(); + return RTSemMutexRequest(hMutexSem, cMillies); +} +RT_EXPORT_SYMBOL(RTSemMutexRequestDebug); + + +RTDECL(int) RTSemMutexRequestNoResume(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies) +{ + return rtSemMutexLinuxRequest(hMutexSem, cMillies, true /*fInterruptible*/); +} +RT_EXPORT_SYMBOL(RTSemMutexRequestNoResume); + + +RTDECL(int) RTSemMutexRequestNoResumeDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL) +{ + RT_NOREF_PV(uId); RT_SRC_POS_NOREF(); + return RTSemMutexRequestNoResume(hMutexSem, cMillies); +} +RT_EXPORT_SYMBOL(RTSemMutexRequestNoResumeDebug); + + +RTDECL(int) RTSemMutexRelease(RTSEMMUTEX hMtx) +{ + PRTSEMMUTEXINTERNAL pThis = hMtx; + struct task_struct *pSelf = current; + unsigned long fSavedIrq; + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + AssertPtrReturn(pThis, VERR_INVALID_HANDLE); + AssertMsgReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE); + Assert(pThis->cRefs >= 1); + + /* + * Take the lock and release one recursion. + */ + spin_lock_irqsave(&pThis->Spinlock, fSavedIrq); + if (pThis->pOwnerTask == pSelf) + { + Assert(pThis->cRecursions > 0); + if (--pThis->cRecursions == 0) + { + pThis->pOwnerTask = NULL; + + /* anyone to wake up? */ + if (!RTListIsEmpty(&pThis->WaiterList)) + { + PRTSEMMUTEXLNXWAITER pWaiter = RTListGetFirst(&pThis->WaiterList, RTSEMMUTEXLNXWAITER, ListEntry); + pWaiter->enmReason = RTSEMMUTEXLNXWAITER_WAKEUP; + wake_up_process(pWaiter->pTask); + } + IPRT_DEBUG_SEMS_STATE(pThis, 'u'); + } + rc = VINF_SUCCESS; + } + else + rc = VERR_NOT_OWNER; + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + + AssertRC(rc); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; +} +RT_EXPORT_SYMBOL(RTSemMutexRelease); + + +RTDECL(bool) RTSemMutexIsOwned(RTSEMMUTEX hMutexSem) +{ + PRTSEMMUTEXINTERNAL pThis = hMutexSem; + unsigned long fSavedIrq; + bool fOwned; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + AssertPtrReturn(pThis, false); + AssertMsgReturn(pThis->u32Magic == RTSEMMUTEX_MAGIC, ("u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), false); + Assert(pThis->cRefs >= 1); + + /* + * Take the lock and release one recursion. + */ + spin_lock_irqsave(&pThis->Spinlock, fSavedIrq); + fOwned = pThis->pOwnerTask != NULL; + spin_unlock_irqrestore(&pThis->Spinlock, fSavedIrq); + + IPRT_LINUX_RESTORE_EFL_AC(); + return fOwned; + +} +RT_EXPORT_SYMBOL(RTSemMutexIsOwned); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/spinlock-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/spinlock-r0drv-linux.c @@ -0,0 +1,186 @@ +/* $Id: spinlock-r0drv-linux.c $ */ +/** @file + * IPRT - Spinlocks, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# include +#endif +#include +#include +#include +#include +#include +#include "internal/magics.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Wrapper for the spinlock_t structure. + */ +typedef struct RTSPINLOCKINTERNAL +{ + /** Spinlock magic value (RTSPINLOCK_MAGIC). */ + uint32_t volatile u32Magic; + /** The spinlock creation flags. */ + uint32_t fFlags; + /** The saved interrupt flag. */ + unsigned long volatile fIntSaved; + /** The linux spinlock structure. */ + spinlock_t Spinlock; +#ifdef RT_MORE_STRICT + /** The idAssertCpu variable before acquring the lock for asserting after + * releasing the spinlock. */ + RTCPUID volatile idAssertCpu; + /** The CPU that owns the lock. */ + RTCPUID volatile idCpuOwner; +#endif +} RTSPINLOCKINTERNAL, *PRTSPINLOCKINTERNAL; + + + +RTDECL(int) RTSpinlockCreate(PRTSPINLOCK pSpinlock, uint32_t fFlags, const char *pszName) +{ + IPRT_LINUX_SAVE_EFL_AC(); + PRTSPINLOCKINTERNAL pThis; + AssertReturn(fFlags == RTSPINLOCK_FLAGS_INTERRUPT_SAFE || fFlags == RTSPINLOCK_FLAGS_INTERRUPT_UNSAFE, VERR_INVALID_PARAMETER); + RT_NOREF_PV(pszName); + + /* + * Allocate. + */ + Assert(sizeof(RTSPINLOCKINTERNAL) > sizeof(void *)); + pThis = (PRTSPINLOCKINTERNAL)RTMemAlloc(sizeof(*pThis)); + if (!pThis) + return VERR_NO_MEMORY; + /* + * Initialize and return. + */ + pThis->u32Magic = RTSPINLOCK_MAGIC; + pThis->fFlags = fFlags; + pThis->fIntSaved = 0; +#ifdef RT_MORE_STRICT + pThis->idCpuOwner = NIL_RTCPUID; + pThis->idAssertCpu = NIL_RTCPUID; +#endif + + spin_lock_init(&pThis->Spinlock); + + *pSpinlock = pThis; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSpinlockCreate); + + +RTDECL(int) RTSpinlockDestroy(RTSPINLOCK Spinlock) +{ + /* + * Validate input. + */ + PRTSPINLOCKINTERNAL pThis = (PRTSPINLOCKINTERNAL)Spinlock; + if (!pThis) + return VERR_INVALID_PARAMETER; + if (pThis->u32Magic != RTSPINLOCK_MAGIC) + { + AssertMsgFailed(("Invalid spinlock %p magic=%#x\n", pThis, pThis->u32Magic)); + return VERR_INVALID_PARAMETER; + } + + ASMAtomicIncU32(&pThis->u32Magic); + RTMemFree(pThis); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTSpinlockDestroy); + + +RTDECL(void) RTSpinlockAcquire(RTSPINLOCK Spinlock) +{ + PRTSPINLOCKINTERNAL pThis = (PRTSPINLOCKINTERNAL)Spinlock; + IPRT_LINUX_SAVE_EFL_AC(); + RT_ASSERT_PREEMPT_CPUID_VAR(); + AssertMsg(pThis && pThis->u32Magic == RTSPINLOCK_MAGIC, + ("pThis=%p u32Magic=%08x\n", pThis, pThis ? (int)pThis->u32Magic : 0)); + +#ifdef CONFIG_PROVE_LOCKING + lockdep_off(); +#endif + if (pThis->fFlags & RTSPINLOCK_FLAGS_INTERRUPT_SAFE) + { + unsigned long fIntSaved; + spin_lock_irqsave(&pThis->Spinlock, fIntSaved); + pThis->fIntSaved = fIntSaved; + } + else + spin_lock(&pThis->Spinlock); +#ifdef CONFIG_PROVE_LOCKING + lockdep_on(); +#endif + + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + RT_ASSERT_PREEMPT_CPUID_SPIN_ACQUIRED(pThis); +} +RT_EXPORT_SYMBOL(RTSpinlockAcquire); + + +RTDECL(void) RTSpinlockRelease(RTSPINLOCK Spinlock) +{ + PRTSPINLOCKINTERNAL pThis = (PRTSPINLOCKINTERNAL)Spinlock; + IPRT_LINUX_SAVE_EFL_AC(); /* spin_unlock* may preempt and trash eflags.ac. */ + RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE_VARS(); + AssertMsg(pThis && pThis->u32Magic == RTSPINLOCK_MAGIC, + ("pThis=%p u32Magic=%08x\n", pThis, pThis ? (int)pThis->u32Magic : 0)); + RT_ASSERT_PREEMPT_CPUID_SPIN_RELEASE(pThis); + +#ifdef CONFIG_PROVE_LOCKING + lockdep_off(); +#endif + if (pThis->fFlags & RTSPINLOCK_FLAGS_INTERRUPT_SAFE) + { + unsigned long fIntSaved = pThis->fIntSaved; + pThis->fIntSaved = 0; + spin_unlock_irqrestore(&pThis->Spinlock, fIntSaved); + } + else + spin_unlock(&pThis->Spinlock); +#ifdef CONFIG_PROVE_LOCKING + lockdep_on(); +#endif + + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); + RT_ASSERT_PREEMPT_CPUID(); +} +RT_EXPORT_SYMBOL(RTSpinlockRelease); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/string.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/string.h @@ -0,0 +1,57 @@ +/* $Id: string.h $ */ +/** @file + * IPRT - wrapper for the linux kernel asm/string.h. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___string_h +#define ___string_h + +#include + +RT_C_DECLS_BEGIN +#ifndef bool /* Linux 2.6.19 C++ nightmare */ +#define bool bool_type +#define true true_type +#define false false_type +#define _Bool int +#define bool_type_r0drv_string_h__ +#endif +#include +#include +#ifdef bool_type_r0drv_string_h__ +#undef bool +#undef true +#undef false +#undef bool_type_r0drv_string_h__ +#endif +char *strpbrk(const char *pszStr, const char *pszChars) +#if defined(__THROW) + __THROW +#endif + ; + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/the-linux-kernel.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/the-linux-kernel.h @@ -0,0 +1,452 @@ +/* $Id: the-linux-kernel.h $ */ +/** @file + * IPRT - Include all necessary headers for the Linux kernel. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___the_linux_kernel_h +#define ___the_linux_kernel_h + +/* + * Include iprt/types.h to install the bool wrappers. + * Then use the linux bool type for all the stuff include here. + */ +#include +#define bool linux_bool + +#if RT_GNUC_PREREQ(4, 6) +# pragma GCC diagnostic push +#endif +#if RT_GNUC_PREREQ(4, 2) +# pragma GCC diagnostic ignored "-Wunused-parameter" +# if !defined(__cplusplus) && RT_GNUC_PREREQ(4, 3) +# pragma GCC diagnostic ignored "-Wold-style-declaration" /* 2.6.18-411.0.0.0.1.el5/build/include/asm/apic.h:110: warning: 'inline' is not at beginning of declaration [-Wold-style-declaration] */ +# endif +#endif + +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 33) +# include +#else +# ifndef AUTOCONF_INCLUDED +# include +# endif +#endif + +/* We only support 2.4 and 2.6 series kernels */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +# error We only support 2.4 and 2.6 series kernels +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# error We only support 2.4 and 2.6 series kernels +#endif + +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 71) +# include +# endif +#endif +#ifndef KBUILD_STR +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +# define KBUILD_STR(s) s +# else +# define KBUILD_STR(s) #s +# endif +#endif +# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) +# include /* for macro IS_ENABLED */ +# endif +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) +# include +#else /* older kernels */ +# include +#endif /* older kernels */ +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +# include +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 7) +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16) +# include +# include +#endif +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 71) +# include +# include +#endif +/* For the basic additions module */ +#include +#include +#include +#include +#include +#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */ +# include +#endif +/* For the shared folders module */ +#include +#define wchar_t linux_wchar_t +#include +#undef wchar_t +#include +#include +#include +#include + +/* For thread-context hooks. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) && defined(CONFIG_PREEMPT_NOTIFIERS) +# include +#endif + +/* for workqueue / task queues. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +# include +#else +# include +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif + +/* for cr4_init_shadow() / cpu_tlbstate. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0) +# include +#endif + +/* for set_pages_x() */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +# include +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 7, 0) +# include +#else +static inline void clac(void) { } +static inline void stac(void) { } +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# ifndef page_to_pfn +# define page_to_pfn(page) ((page) - mem_map) +# endif +#endif + +#ifndef DEFINE_WAIT +# define DEFINE_WAIT(name) DECLARE_WAITQUEUE(name, current) +#endif + +#ifndef __GFP_NOWARN +# define __GFP_NOWARN 0 +#endif + +/* + * 2.4 / early 2.6 compatibility wrappers + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 7) + +# ifndef MAX_JIFFY_OFFSET +# define MAX_JIFFY_OFFSET ((~0UL >> 1)-1) +# endif + +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 29) || LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + +DECLINLINE(unsigned int) jiffies_to_msecs(unsigned long cJiffies) +{ +# if HZ <= 1000 && !(1000 % HZ) + return (1000 / HZ) * cJiffies; +# elif HZ > 1000 && !(HZ % 1000) + return (cJiffies + (HZ / 1000) - 1) / (HZ / 1000); +# else + return (cJiffies * 1000) / HZ; +# endif +} + +DECLINLINE(unsigned long) msecs_to_jiffies(unsigned int cMillies) +{ +# if HZ > 1000 + if (cMillies > jiffies_to_msecs(MAX_JIFFY_OFFSET)) + return MAX_JIFFY_OFFSET; +# endif +# if HZ <= 1000 && !(1000 % HZ) + return (cMillies + (1000 / HZ) - 1) / (1000 / HZ); +# elif HZ > 1000 && !(HZ % 1000) + return cMillies * (HZ / 1000); +# else + return (cMillies * HZ + 999) / 1000; +# endif +} + +# endif /* < 2.4.29 || >= 2.6.0 */ + +#endif /* < 2.6.7 */ + +/* + * 2.4 compatibility wrappers + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) + +# define prepare_to_wait(q, wait, state) \ + do { \ + add_wait_queue(q, wait); \ + set_current_state(state); \ + } while (0) + +# define after_wait(wait) \ + do { \ + list_del_init(&(wait)->task_list); \ + } while (0) + +# define finish_wait(q, wait) \ + do { \ + set_current_state(TASK_RUNNING); \ + remove_wait_queue(q, wait); \ + } while (0) + +#else /* >= 2.6.0 */ + +# define after_wait(wait) do {} while (0) + +#endif /* >= 2.6.0 */ + +/** @def TICK_NSEC + * The time between ticks in nsec */ +#ifndef TICK_NSEC +# define TICK_NSEC (1000000000UL / HZ) +#endif + +/* + * This sucks soooo badly on x86! Why don't they export __PAGE_KERNEL_EXEC so PAGE_KERNEL_EXEC would be usable? + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(RT_ARCH_AMD64) +# define MY_PAGE_KERNEL_EXEC PAGE_KERNEL_EXEC +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(PAGE_KERNEL_EXEC) && defined(CONFIG_X86_PAE) +# ifdef __PAGE_KERNEL_EXEC + /* >= 2.6.27 */ +# define MY_PAGE_KERNEL_EXEC __pgprot(boot_cpu_has(X86_FEATURE_PGE) ? __PAGE_KERNEL_EXEC | _PAGE_GLOBAL : __PAGE_KERNEL_EXEC) +# else +# define MY_PAGE_KERNEL_EXEC __pgprot(boot_cpu_has(X86_FEATURE_PGE) ? _PAGE_KERNEL_EXEC | _PAGE_GLOBAL : _PAGE_KERNEL_EXEC) +# endif +#else +# define MY_PAGE_KERNEL_EXEC PAGE_KERNEL +#endif + + +/* + * The redhat hack section. + * - The current hacks are for 2.4.21-15.EL only. + */ +#ifndef NO_REDHAT_HACKS +/* accounting. */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# ifdef VM_ACCOUNT +# define USE_RHEL4_MUNMAP +# endif +# endif + +/* backported remap_page_range. */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# include +# ifdef tlb_vma /* probably not good enough... */ +# define HAVE_26_STYLE_REMAP_PAGE_RANGE 1 +# endif +# endif + +# ifndef RT_ARCH_AMD64 +/* In 2.6.9-22.ELsmp we have to call change_page_attr() twice when changing + * the page attributes from PAGE_KERNEL to something else, because there appears + * to be a bug in one of the many patches that redhat applied. + * It should be safe to do this on less buggy linux kernels too. ;-) + */ +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) \ + do { \ + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) \ + change_page_attr(pPages, cPages, prot); \ + change_page_attr(pPages, cPages, prot); \ + } while (0) +# endif /* !RT_ARCH_AMD64 */ +#endif /* !NO_REDHAT_HACKS */ + +#ifndef MY_CHANGE_PAGE_ATTR +# ifdef RT_ARCH_AMD64 /** @todo This is a cheap hack, but it'll get around that 'else BUG();' in __change_page_attr(). */ +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) \ + do { \ + change_page_attr(pPages, cPages, PAGE_KERNEL_NOCACHE); \ + change_page_attr(pPages, cPages, prot); \ + } while (0) +# else +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) change_page_attr(pPages, cPages, prot) +# endif +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +# define MY_SET_PAGES_EXEC(pPages, cPages) set_pages_x(pPages, cPages) +# define MY_SET_PAGES_NOEXEC(pPages, cPages) set_pages_nx(pPages, cPages) +#else +# define MY_SET_PAGES_EXEC(pPages, cPages) \ + do { \ + if (pgprot_val(MY_PAGE_KERNEL_EXEC) != pgprot_val(PAGE_KERNEL)) \ + MY_CHANGE_PAGE_ATTR(pPages, cPages, MY_PAGE_KERNEL_EXEC); \ + } while (0) +# define MY_SET_PAGES_NOEXEC(pPages, cPages) \ + do { \ + if (pgprot_val(MY_PAGE_KERNEL_EXEC) != pgprot_val(PAGE_KERNEL)) \ + MY_CHANGE_PAGE_ATTR(pPages, cPages, PAGE_KERNEL); \ + } while (0) +#endif + +/** @def ONE_MSEC_IN_JIFFIES + * The number of jiffies that make up 1 millisecond. Must be at least 1! */ +#if HZ <= 1000 +# define ONE_MSEC_IN_JIFFIES 1 +#elif !(HZ % 1000) +# define ONE_MSEC_IN_JIFFIES (HZ / 1000) +#else +# define ONE_MSEC_IN_JIFFIES ((HZ + 999) / 1000) +# error "HZ is not a multiple of 1000, the GIP stuff won't work right!" +#endif + +/* + * Stop using the linux bool type. + */ +#undef bool + +#if RT_GNUC_PREREQ(4, 6) +# pragma GCC diagnostic pop +#endif + +/* + * There are post-2.6.24 kernels (confusingly with unchanged version number) + * which eliminate macros which were marked as deprecated. + */ +#ifndef __attribute_used__ +#define __attribute_used__ __used +#endif + +/** + * Hack for shortening pointers on linux so we can stuff more stuff into the + * task_struct::comm field. This is used by the semaphore code but put here + * because we don't have any better place atm. Don't use outside IPRT, please. + */ +#ifdef RT_ARCH_AMD64 +# define IPRT_DEBUG_SEMS_ADDRESS(addr) ( ((long)(addr) & (long)~UINT64_C(0xfffffff000000000)) ) +#else +# define IPRT_DEBUG_SEMS_ADDRESS(addr) ( (long)(addr) ) +#endif + +/** + * Puts semaphore info into the task_struct::comm field if IPRT_DEBUG_SEMS is + * defined. + */ +#ifdef IPRT_DEBUG_SEMS +# define IPRT_DEBUG_SEMS_STATE(pThis, chState) \ + snprintf(current->comm, sizeof(current->comm), "%c%lx", (chState), IPRT_DEBUG_SEMS_ADDRESS(pThis)); +#else +# define IPRT_DEBUG_SEMS_STATE(pThis, chState) do { } while (0) +#endif + +/** + * Puts semaphore info into the task_struct::comm field if IPRT_DEBUG_SEMS is + * defined. + */ +#ifdef IPRT_DEBUG_SEMS +# define IPRT_DEBUG_SEMS_STATE_RC(pThis, chState, rc) \ + snprintf(current->comm, sizeof(current->comm), "%c%lx:%d", (chState), IPRT_DEBUG_SEMS_ADDRESS(pThis), rc); +#else +# define IPRT_DEBUG_SEMS_STATE_RC(pThis, chState, rc) do { } while (0) +#endif + +/** @name Macros for preserving EFLAGS.AC on 3.19+/amd64 paranoid. + * The AMD 64 switch_to in macro in arch/x86/include/asm/switch_to.h stopped + * restoring flags. + * @{ */ +#if defined(CONFIG_X86_SMAP) || defined(RT_STRICT) || defined(IPRT_WITH_EFLAGS_AC_PRESERVING) +# include +# define IPRT_X86_EFL_AC RT_BIT(18) +# define IPRT_LINUX_SAVE_EFL_AC() RTCCUINTREG fSavedEfl = ASMGetFlags() +# define IPRT_LINUX_RESTORE_EFL_AC() ASMSetFlags(fSavedEfl) +# define IPRT_LINUX_RESTORE_EFL_ONLY_AC() ASMChangeFlags(~IPRT_X86_EFL_AC, fSavedEfl & IPRT_X86_EFL_AC) +#else +# define IPRT_LINUX_SAVE_EFL_AC() do { } while (0) +# define IPRT_LINUX_RESTORE_EFL_AC() do { } while (0) +# define IPRT_LINUX_RESTORE_EFL_ONLY_AC() do { } while (0) +#endif +/** @} */ + +/* + * There are some conflicting defines in iprt/param.h, sort them out here. + */ +#ifndef ___iprt_param_h +# undef PAGE_SIZE +# undef PAGE_OFFSET_MASK +# include +#endif + +/* + * Some global indicator macros. + */ +/** @def IPRT_LINUX_HAS_HRTIMER + * Whether the kernel support high resolution timers (Linux kernel versions + * 2.6.28 and later (hrtimer_add_expires_ns() & schedule_hrtimeout). */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) +# define IPRT_LINUX_HAS_HRTIMER +#endif + +/* + * Workqueue stuff, see initterm-r0drv-linux.c. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +typedef struct work_struct RTR0LNXWORKQUEUEITEM; +#else +typedef struct tq_struct RTR0LNXWORKQUEUEITEM; +#endif +DECLHIDDEN(void) rtR0LnxWorkqueuePush(RTR0LNXWORKQUEUEITEM *pWork, void (*pfnWorker)(RTR0LNXWORKQUEUEITEM *)); +DECLHIDDEN(void) rtR0LnxWorkqueueFlush(void); + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/thread-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/thread-r0drv-linux.c @@ -0,0 +1,236 @@ +/* $Id: thread-r0drv-linux.c $ */ +/** @file + * IPRT - Threads, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include + +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 28) || defined(CONFIG_X86_SMAP) +# include +#endif +#include +#include +#include + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +#ifndef CONFIG_PREEMPT +/** Per-cpu preemption counters. */ +static int32_t volatile g_acPreemptDisabled[NR_CPUS]; +#endif + + +RTDECL(RTNATIVETHREAD) RTThreadNativeSelf(void) +{ + return (RTNATIVETHREAD)current; +} +RT_EXPORT_SYMBOL(RTThreadNativeSelf); + + +static int rtR0ThreadLnxSleepCommon(RTMSINTERVAL cMillies) +{ + IPRT_LINUX_SAVE_EFL_AC(); + long cJiffies = msecs_to_jiffies(cMillies); + set_current_state(TASK_INTERRUPTIBLE); + cJiffies = schedule_timeout(cJiffies); + IPRT_LINUX_RESTORE_EFL_AC(); + if (!cJiffies) + return VINF_SUCCESS; + return VERR_INTERRUPTED; +} + + +RTDECL(int) RTThreadSleep(RTMSINTERVAL cMillies) +{ + return rtR0ThreadLnxSleepCommon(cMillies); +} +RT_EXPORT_SYMBOL(RTThreadSleep); + + +RTDECL(int) RTThreadSleepNoLog(RTMSINTERVAL cMillies) +{ + return rtR0ThreadLnxSleepCommon(cMillies); +} +RT_EXPORT_SYMBOL(RTThreadSleepNoLog); + + +RTDECL(bool) RTThreadYield(void) +{ + IPRT_LINUX_SAVE_EFL_AC(); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 20) + yield(); +#else + /** @todo r=ramshankar: Can we use cond_resched() instead? */ + set_current_state(TASK_RUNNING); + sys_sched_yield(); + schedule(); +#endif + IPRT_LINUX_RESTORE_EFL_AC(); + return true; +} +RT_EXPORT_SYMBOL(RTThreadYield); + + +RTDECL(bool) RTThreadPreemptIsEnabled(RTTHREAD hThread) +{ +#ifdef CONFIG_PREEMPT + Assert(hThread == NIL_RTTHREAD); RT_NOREF_PV(hThread); +# ifdef preemptible + return preemptible(); +# else + return preempt_count() == 0 && !in_atomic() && !irqs_disabled(); +# endif +#else + int32_t c; + + Assert(hThread == NIL_RTTHREAD); + c = g_acPreemptDisabled[smp_processor_id()]; + AssertMsg(c >= 0 && c < 32, ("%d\n", c)); + if (c != 0) + return false; +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 32) + if (in_atomic()) + return false; +# endif +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 28) + if (irqs_disabled()) + return false; +# else + if (!ASMIntAreEnabled()) + return false; +# endif + return true; +#endif +} +RT_EXPORT_SYMBOL(RTThreadPreemptIsEnabled); + + +RTDECL(bool) RTThreadPreemptIsPending(RTTHREAD hThread) +{ + Assert(hThread == NIL_RTTHREAD); RT_NOREF_PV(hThread); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 4) + return !!test_tsk_thread_flag(current, TIF_NEED_RESCHED); + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 20) + return !!need_resched(); + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 1, 110) + return current->need_resched != 0; + +#else + return need_resched != 0; +#endif +} +RT_EXPORT_SYMBOL(RTThreadPreemptIsPending); + + +RTDECL(bool) RTThreadPreemptIsPendingTrusty(void) +{ + /* yes, RTThreadPreemptIsPending is reliable. */ + return true; +} +RT_EXPORT_SYMBOL(RTThreadPreemptIsPendingTrusty); + + +RTDECL(bool) RTThreadPreemptIsPossible(void) +{ + /** @todo r=ramshankar: What about CONFIG_PREEMPT_VOLUNTARY? That can preempt + * too but does so in voluntarily in explicit preemption points. */ +#ifdef CONFIG_PREEMPT + return true; /* yes, kernel preemption is possible. */ +#else + return false; /* no kernel preemption */ +#endif +} +RT_EXPORT_SYMBOL(RTThreadPreemptIsPossible); + + +RTDECL(void) RTThreadPreemptDisable(PRTTHREADPREEMPTSTATE pState) +{ +#ifdef CONFIG_PREEMPT + AssertPtr(pState); + Assert(pState->u32Reserved == 0); + pState->u32Reserved = 42; + /* This ASSUMES that CONFIG_PREEMPT_COUNT is always defined with CONFIG_PREEMPT. */ + preempt_disable(); + RT_ASSERT_PREEMPT_CPUID_DISABLE(pState); + +#else /* !CONFIG_PREEMPT */ + int32_t c; + AssertPtr(pState); + Assert(pState->u32Reserved == 0); + + /* Do our own accounting. */ + c = ASMAtomicIncS32(&g_acPreemptDisabled[smp_processor_id()]); + AssertMsg(c > 0 && c < 32, ("%d\n", c)); + pState->u32Reserved = c; + RT_ASSERT_PREEMPT_CPUID_DISABLE(pState); +#endif +} +RT_EXPORT_SYMBOL(RTThreadPreemptDisable); + + +RTDECL(void) RTThreadPreemptRestore(PRTTHREADPREEMPTSTATE pState) +{ +#ifdef CONFIG_PREEMPT + IPRT_LINUX_SAVE_EFL_AC(); /* paranoia */ + AssertPtr(pState); + Assert(pState->u32Reserved == 42); + RT_ASSERT_PREEMPT_CPUID_RESTORE(pState); + preempt_enable(); + IPRT_LINUX_RESTORE_EFL_ONLY_AC(); /* paranoia */ + +#else + int32_t volatile *pc; + AssertPtr(pState); + AssertMsg(pState->u32Reserved > 0 && pState->u32Reserved < 32, ("%d\n", pState->u32Reserved)); + RT_ASSERT_PREEMPT_CPUID_RESTORE(pState); + + /* Do our own accounting. */ + pc = &g_acPreemptDisabled[smp_processor_id()]; + AssertMsg(pState->u32Reserved == (uint32_t)*pc, ("u32Reserved=%d *pc=%d \n", pState->u32Reserved, *pc)); + ASMAtomicUoWriteS32(pc, pState->u32Reserved - 1); +#endif + pState->u32Reserved = 0; +} +RT_EXPORT_SYMBOL(RTThreadPreemptRestore); + + +RTDECL(bool) RTThreadIsInInterrupt(RTTHREAD hThread) +{ + Assert(hThread == NIL_RTTHREAD); NOREF(hThread); + + return in_interrupt() != 0; +} +RT_EXPORT_SYMBOL(RTThreadIsInInterrupt); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/thread2-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/thread2-r0drv-linux.c @@ -0,0 +1,162 @@ +/* $Id: thread2-r0drv-linux.c $ */ +/** @file + * IPRT - Threads (Part 2), Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include +#include +#include "internal/thread.h" + + +RTDECL(RTTHREAD) RTThreadSelf(void) +{ + return rtThreadGetByNative((RTNATIVETHREAD)current); +} + + +DECLHIDDEN(int) rtThreadNativeInit(void) +{ + return VINF_SUCCESS; +} + + +DECLHIDDEN(int) rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11) + /* See comment near MAX_RT_PRIO in linux/sched.h for details on + sched_priority. */ + int iSchedClass = SCHED_NORMAL; + struct sched_param Param = { .sched_priority = MAX_PRIO - 1 }; + switch (enmType) + { + case RTTHREADTYPE_INFREQUENT_POLLER: + Param.sched_priority = MAX_RT_PRIO + 5; + break; + + case RTTHREADTYPE_EMULATION: + Param.sched_priority = MAX_RT_PRIO + 4; + break; + + case RTTHREADTYPE_DEFAULT: + Param.sched_priority = MAX_RT_PRIO + 3; + break; + + case RTTHREADTYPE_MSG_PUMP: + Param.sched_priority = MAX_RT_PRIO + 2; + break; + + case RTTHREADTYPE_IO: + iSchedClass = SCHED_FIFO; + Param.sched_priority = MAX_RT_PRIO - 1; + break; + + case RTTHREADTYPE_TIMER: + iSchedClass = SCHED_FIFO; + Param.sched_priority = 1; /* not 0 just in case */ + break; + + default: + AssertMsgFailed(("enmType=%d\n", enmType)); + return VERR_INVALID_PARAMETER; + } + + sched_setscheduler(current, iSchedClass, &Param); +#else + RT_NOREF_PV(enmType); +#endif + RT_NOREF_PV(pThread); + + return VINF_SUCCESS; +} + + +DECLHIDDEN(int) rtThreadNativeAdopt(PRTTHREADINT pThread) +{ + RT_NOREF_PV(pThread); + return VERR_NOT_IMPLEMENTED; +} + + +DECLHIDDEN(void) rtThreadNativeWaitKludge(PRTTHREADINT pThread) +{ + /** @todo fix RTThreadWait/RTR0Term race on linux. */ + RTThreadSleep(1); NOREF(pThread); +} + + +DECLHIDDEN(void) rtThreadNativeDestroy(PRTTHREADINT pThread) +{ + NOREF(pThread); +} + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 4) +/** + * Native kernel thread wrapper function. + * + * This will forward to rtThreadMain and do termination upon return. + * + * @param pvArg Pointer to the argument package. + */ +static int rtThreadNativeMain(void *pvArg) +{ + PRTTHREADINT pThread = (PRTTHREADINT)pvArg; + + rtThreadMain(pThread, (RTNATIVETHREAD)current, &pThread->szName[0]); + return 0; +} +#endif + + +DECLHIDDEN(int) rtThreadNativeCreate(PRTTHREADINT pThreadInt, PRTNATIVETHREAD pNativeThread) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 4) + struct task_struct *NativeThread; + IPRT_LINUX_SAVE_EFL_AC(); + + RT_ASSERT_PREEMPTIBLE(); + + NativeThread = kthread_run(rtThreadNativeMain, pThreadInt, "iprt-%s", pThreadInt->szName); + + if (!IS_ERR(NativeThread)) + { + *pNativeThread = (RTNATIVETHREAD)NativeThread; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_GENERAL_FAILURE; +#else + return VERR_NOT_IMPLEMENTED; +#endif +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/time-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/time-r0drv-linux.c @@ -0,0 +1,187 @@ +/* $Id: time-r0drv-linux.c $ */ +/** @file + * IPRT - Time, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_TIME +#include "the-linux-kernel.h" +#include "internal/iprt.h" +#include +#include + + + +DECLINLINE(uint64_t) rtTimeGetSystemNanoTS(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16) /* This must match timer-r0drv-linux.c! */ + /* + * Use ktime_get_ts, this is also what clock_gettime(CLOCK_MONOTONIC,) is using. + */ + uint64_t u64; + struct timespec Ts; + ktime_get_ts(&Ts); + u64 = Ts.tv_sec * RT_NS_1SEC_64 + Ts.tv_nsec; + return u64; + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 60) + /* + * Seems there is no way of getting to the exact source of + * sys_clock_gettime(CLOCK_MONOTONIC, &ts) here, I think. But + * 64-bit jiffies adjusted for the initial value should be pretty + * much the same I hope. + */ + uint64_t u64 = get_jiffies_64(); +# ifdef INITIAL_JIFFIES + u64 += INITIAL_JIFFIES; +# endif + u64 *= TICK_NSEC; + return u64; + +#else /* < 2.5.60 */ +# if BITS_PER_LONG >= 64 + /* + * This is the same as above, except that there is no get_jiffies_64() + * here and we rely on long, and therefor jiffies, being 64-bit instead. + */ + uint64_t u64 = jiffies; +# ifdef INITIAL_JIFFIES + u64 += INITIAL_JIFFIES; +# endif + u64 *= TICK_NSEC; + return u64; + +# else /* 32 bit jiffies */ + /* + * We'll have to try track jiffy rollovers here or we'll be + * in trouble every time it flips. + * + * The high dword of the s_u64Last is the rollover count, the + * low dword is the previous jiffies. Updating is done by + * atomic compare & exchange of course. + */ + static uint64_t volatile s_u64Last = 0; + uint64_t u64; + + for (;;) + { + uint64_t u64NewLast; + int32_t iDelta; + uint32_t cRollovers; + uint32_t u32LastJiffies; + + /* sample the values */ + unsigned long ulNow = jiffies; + uint64_t u64Last = s_u64Last; + if (ulNow != jiffies) + continue; /* try again */ +# ifdef INITIAL_JIFFIES + ulNow += INITIAL_JIFFIES; +# endif + + u32LastJiffies = (uint32_t)u64Last; + cRollovers = u64Last >> 32; + + /* + * Check for rollover and update the static last value. + * + * We have to make sure we update it successfully to rule out + * an underrun because of racing someone. + */ + iDelta = ulNow - u32LastJiffies; + if (iDelta < 0) + { + cRollovers++; + u64NewLast = RT_MAKE_U64(ulNow, cRollovers); + if (!ASMAtomicCmpXchgU64(&s_u64Last, u64NewLast, u64Last)) + continue; /* race, try again */ + } + else + { + u64NewLast = RT_MAKE_U64(ulNow, cRollovers); + ASMAtomicCmpXchgU64(&s_u64Last, u64NewLast, u64Last); + } + + /* calculate the return value */ + u64 = ulNow; + u64 *= TICK_NSEC; + u64 += cRollovers * (_4G * TICK_NSEC); + break; + } + + return u64; +# endif /* 32 bit jiffies */ +#endif /* < 2.5.60 */ +} + + +RTDECL(uint64_t) RTTimeNanoTS(void) +{ + return rtTimeGetSystemNanoTS(); +} +RT_EXPORT_SYMBOL(RTTimeNanoTS); + + +RTDECL(uint64_t) RTTimeMilliTS(void) +{ + return rtTimeGetSystemNanoTS() / RT_NS_1MS; +} +RT_EXPORT_SYMBOL(RTTimeMilliTS); + + +RTDECL(uint64_t) RTTimeSystemNanoTS(void) +{ + return rtTimeGetSystemNanoTS(); +} +RT_EXPORT_SYMBOL(RTTimeSystemNanoTS); + + +RTDECL(uint64_t) RTTimeSystemMilliTS(void) +{ + return rtTimeGetSystemNanoTS() / RT_NS_1MS; +} +RT_EXPORT_SYMBOL(RTTimeSystemMilliTS); + + +RTDECL(PRTTIMESPEC) RTTimeNow(PRTTIMESPEC pTime) +{ + IPRT_LINUX_SAVE_EFL_AC(); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16) + struct timespec Ts; + ktime_get_real_ts(&Ts); + IPRT_LINUX_RESTORE_EFL_AC(); + return RTTimeSpecSetTimespec(pTime, &Ts); + +#else /* < 2.6.16 */ + struct timeval Tv; + do_gettimeofday(&Tv); + IPRT_LINUX_RESTORE_EFL_AC(); + return RTTimeSpecSetTimeval(pTime, &Tv); +#endif +} +RT_EXPORT_SYMBOL(RTTimeNow); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/timer-r0drv-linux.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/timer-r0drv-linux.c @@ -0,0 +1,1693 @@ +/* $Id: timer-r0drv-linux.c $ */ +/** @file + * IPRT - Timers, Ring-0 Driver, Linux. + */ + +/* + * Copyright (C) 2006-2018 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "the-linux-kernel.h" +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "internal/magics.h" + +/** @def RTTIMER_LINUX_WITH_HRTIMER + * Whether to use high resolution timers. */ +#if !defined(RTTIMER_LINUX_WITH_HRTIMER) \ + && defined(IPRT_LINUX_HAS_HRTIMER) +# define RTTIMER_LINUX_WITH_HRTIMER +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +# define mod_timer_pinned mod_timer +# define HRTIMER_MODE_ABS_PINNED HRTIMER_MODE_ABS +#endif + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Timer state machine. + * + * This is used to try handle the issues with MP events and + * timers that runs on all CPUs. It's relatively nasty :-/ + */ +typedef enum RTTIMERLNXSTATE +{ + /** Stopped. */ + RTTIMERLNXSTATE_STOPPED = 0, + /** Transient state; next ACTIVE. */ + RTTIMERLNXSTATE_STARTING, + /** Transient state; next ACTIVE. (not really necessary) */ + RTTIMERLNXSTATE_MP_STARTING, + /** Active. */ + RTTIMERLNXSTATE_ACTIVE, + /** Active and in callback; next ACTIVE, STOPPED or CALLBACK_DESTROYING. */ + RTTIMERLNXSTATE_CALLBACK, + /** Stopped while in the callback; next STOPPED. */ + RTTIMERLNXSTATE_CB_STOPPING, + /** Restarted while in the callback; next ACTIVE, STOPPED, DESTROYING. */ + RTTIMERLNXSTATE_CB_RESTARTING, + /** The callback shall destroy the timer; next STOPPED. */ + RTTIMERLNXSTATE_CB_DESTROYING, + /** Transient state; next STOPPED. */ + RTTIMERLNXSTATE_STOPPING, + /** Transient state; next STOPPED. */ + RTTIMERLNXSTATE_MP_STOPPING, + /** The usual 32-bit hack. */ + RTTIMERLNXSTATE_32BIT_HACK = 0x7fffffff +} RTTIMERLNXSTATE; + + +/** + * A Linux sub-timer. + */ +typedef struct RTTIMERLNXSUBTIMER +{ + /** Timer specific data. */ + union + { +#if defined(RTTIMER_LINUX_WITH_HRTIMER) + /** High resolution timer. */ + struct + { + /** The linux timer structure. */ + struct hrtimer LnxTimer; + } Hr; +#endif + /** Standard timer. */ + struct + { + /** The linux timer structure. */ + struct timer_list LnxTimer; + /** The start of the current run (ns). + * This is used to calculate when the timer ought to fire the next time. */ + uint64_t u64NextTS; + /** The u64NextTS in jiffies. */ + unsigned long ulNextJiffies; + /** Set when starting or changing the timer so that u64StartTs + * and u64NextTS gets reinitialized (eliminating some jitter). */ + bool volatile fFirstAfterChg; + } Std; + } u; + /** The current tick number. */ + uint64_t iTick; + /** Restart the single shot timer at this specific time. + * Used when a single shot timer is restarted from the callback. */ + uint64_t volatile uNsRestartAt; + /** Pointer to the parent timer. */ + PRTTIMER pParent; + /** The current sub-timer state. */ + RTTIMERLNXSTATE volatile enmState; +} RTTIMERLNXSUBTIMER; +/** Pointer to a linux sub-timer. */ +typedef RTTIMERLNXSUBTIMER *PRTTIMERLNXSUBTIMER; + + +/** + * The internal representation of an Linux timer handle. + */ +typedef struct RTTIMER +{ + /** Magic. + * This is RTTIMER_MAGIC, but changes to something else before the timer + * is destroyed to indicate clearly that thread should exit. */ + uint32_t volatile u32Magic; + /** Spinlock synchronizing the fSuspended and MP event handling. + * This is NIL_RTSPINLOCK if cCpus == 1. */ + RTSPINLOCK hSpinlock; + /** Flag indicating that the timer is suspended. */ + bool volatile fSuspended; + /** Whether the timer must run on one specific CPU or not. */ + bool fSpecificCpu; +#ifdef CONFIG_SMP + /** Whether the timer must run on all CPUs or not. */ + bool fAllCpus; +#endif /* else: All -> specific on non-SMP kernels */ + /** Whether it is a high resolution timer or a standard one. */ + bool fHighRes; + /** The id of the CPU it must run on if fSpecificCpu is set. */ + RTCPUID idCpu; + /** The number of CPUs this timer should run on. */ + RTCPUID cCpus; + /** Callback. */ + PFNRTTIMER pfnTimer; + /** User argument. */ + void *pvUser; + /** The timer interval. 0 if one-shot. */ + uint64_t volatile u64NanoInterval; + /** This is set to the number of jiffies between ticks if the interval is + * an exact number of jiffies. (Standard timers only.) */ + unsigned long volatile cJiffies; + /** The change interval spinlock for standard timers only. */ + spinlock_t ChgIntLock; + /** Workqueue item for delayed destruction. */ + RTR0LNXWORKQUEUEITEM DtorWorkqueueItem; + /** Sub-timers. + * Normally there is just one, but for RTTIMER_FLAGS_CPU_ALL this will contain + * an entry for all possible cpus. In that case the index will be the same as + * for the RTCpuSet. */ + RTTIMERLNXSUBTIMER aSubTimers[1]; +} RTTIMER; + + +/** + * A rtTimerLinuxStartOnCpu and rtTimerLinuxStartOnCpu argument package. + */ +typedef struct RTTIMERLINUXSTARTONCPUARGS +{ + /** The current time (RTTimeSystemNanoTS). */ + uint64_t u64Now; + /** When to start firing (delta). */ + uint64_t u64First; +} RTTIMERLINUXSTARTONCPUARGS; +/** Pointer to a rtTimerLinuxStartOnCpu argument package. */ +typedef RTTIMERLINUXSTARTONCPUARGS *PRTTIMERLINUXSTARTONCPUARGS; + + +/********************************************************************************************************************************* +* Internal Functions * +*********************************************************************************************************************************/ +#ifdef CONFIG_SMP +static DECLCALLBACK(void) rtTimerLinuxMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser); +#endif + +#if 0 +#define DEBUG_HACKING +#include +#include +static void myLogBackdoorPrintf(const char *pszFormat, ...) +{ + char szTmp[256]; + va_list args; + size_t cb; + + cb = RTStrPrintf(szTmp, sizeof(szTmp) - 10, "%d: ", RTMpCpuId()); + va_start(args, pszFormat); + cb += RTStrPrintfV(&szTmp[cb], sizeof(szTmp) - cb, pszFormat, args); + va_end(args); + + ASMOutStrU8(0x504, (uint8_t *)&szTmp[0], cb); +} +# define RTAssertMsg1Weak(pszExpr, uLine, pszFile, pszFunction) \ + myLogBackdoorPrintf("\n!!Guest Assertion failed!!\n%s(%d) %s\n%s\n", uLine, pszFile, pszFunction, (pszExpr)) +# define RTAssertMsg2Weak myLogBackdoorPrintf +# define RTTIMERLNX_LOG(a) myLogBackdoorPrintf a +#else +# define RTTIMERLNX_LOG(a) do { } while (0) +#endif + +/** + * Sets the state. + */ +DECLINLINE(void) rtTimerLnxSetState(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState) +{ +#ifdef DEBUG_HACKING + RTTIMERLNX_LOG(("set %d -> %d\n", *penmState, enmNewState)); +#endif + ASMAtomicWriteU32((uint32_t volatile *)penmState, enmNewState); +} + + +/** + * Sets the state if it has a certain value. + * + * @return true if xchg was done. + * @return false if xchg wasn't done. + */ +#ifdef DEBUG_HACKING +#define rtTimerLnxCmpXchgState(penmState, enmNewState, enmCurState) rtTimerLnxCmpXchgStateDebug(penmState, enmNewState, enmCurState, __LINE__) +static bool rtTimerLnxCmpXchgStateDebug(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState, + RTTIMERLNXSTATE enmCurState, uint32_t uLine) +{ + RTTIMERLNXSTATE enmOldState = enmCurState; + bool fRc = ASMAtomicCmpXchgExU32((uint32_t volatile *)penmState, enmNewState, enmCurState, (uint32_t *)&enmOldState); + RTTIMERLNX_LOG(("cxg %d -> %d - %d at %u\n", enmOldState, enmNewState, fRc, uLine)); + return fRc; +} +#else +DECLINLINE(bool) rtTimerLnxCmpXchgState(RTTIMERLNXSTATE volatile *penmState, RTTIMERLNXSTATE enmNewState, + RTTIMERLNXSTATE enmCurState) +{ + return ASMAtomicCmpXchgU32((uint32_t volatile *)penmState, enmNewState, enmCurState); +} +#endif + + +/** + * Gets the state. + */ +DECLINLINE(RTTIMERLNXSTATE) rtTimerLnxGetState(RTTIMERLNXSTATE volatile *penmState) +{ + return (RTTIMERLNXSTATE)ASMAtomicUoReadU32((uint32_t volatile *)penmState); +} + +#ifdef RTTIMER_LINUX_WITH_HRTIMER + +/** + * Converts a nano second time stamp to ktime_t. + * + * ASSUMES RTTimeSystemNanoTS() is implemented using ktime_get_ts(). + * + * @returns ktime_t. + * @param cNanoSecs Nanoseconds. + */ +DECLINLINE(ktime_t) rtTimerLnxNanoToKt(uint64_t cNanoSecs) +{ + /* With some luck the compiler optimizes the division out of this... (Bet it doesn't.) */ + return ktime_set(cNanoSecs / 1000000000, cNanoSecs % 1000000000); +} + +/** + * Converts ktime_t to a nano second time stamp. + * + * ASSUMES RTTimeSystemNanoTS() is implemented using ktime_get_ts(). + * + * @returns nano second time stamp. + * @param Kt ktime_t. + */ +DECLINLINE(uint64_t) rtTimerLnxKtToNano(ktime_t Kt) +{ + return ktime_to_ns(Kt); +} + +#endif /* RTTIMER_LINUX_WITH_HRTIMER */ + +/** + * Converts a nano second interval to jiffies. + * + * @returns Jiffies. + * @param cNanoSecs Nanoseconds. + */ +DECLINLINE(unsigned long) rtTimerLnxNanoToJiffies(uint64_t cNanoSecs) +{ + /* this can be made even better... */ + if (cNanoSecs > (uint64_t)TICK_NSEC * MAX_JIFFY_OFFSET) + return MAX_JIFFY_OFFSET; +# if ARCH_BITS == 32 + if (RT_LIKELY(cNanoSecs <= UINT32_MAX)) + return ((uint32_t)cNanoSecs + (TICK_NSEC-1)) / TICK_NSEC; +# endif + return (cNanoSecs + (TICK_NSEC-1)) / TICK_NSEC; +} + + +/** + * Starts a sub-timer (RTTimerStart). + * + * @param pSubTimer The sub-timer to start. + * @param u64Now The current timestamp (RTTimeSystemNanoTS()). + * @param u64First The interval from u64Now to the first time the timer should fire. + * @param fPinned true = timer pinned to a specific CPU, + * false = timer can migrate between CPUs + * @param fHighRes Whether the user requested a high resolution timer or not. + * @param enmOldState The old timer state. + */ +static void rtTimerLnxStartSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, uint64_t u64Now, uint64_t u64First, + bool fPinned, bool fHighRes) +{ + /* + * Calc when it should start firing. + */ + uint64_t u64NextTS = u64Now + u64First; + if (!fHighRes) + pSubTimer->u.Std.u64NextTS = u64NextTS; + RTTIMERLNX_LOG(("startsubtimer %p\n", pSubTimer->pParent)); + + pSubTimer->iTick = 0; + +#ifdef RTTIMER_LINUX_WITH_HRTIMER + if (fHighRes) + hrtimer_start(&pSubTimer->u.Hr.LnxTimer, rtTimerLnxNanoToKt(u64NextTS), + fPinned ? HRTIMER_MODE_ABS_PINNED : HRTIMER_MODE_ABS); + else +#endif + { + unsigned long cJiffies = !u64First ? 0 : rtTimerLnxNanoToJiffies(u64First); + pSubTimer->u.Std.ulNextJiffies = jiffies + cJiffies; + pSubTimer->u.Std.fFirstAfterChg = true; +#ifdef CONFIG_SMP + if (fPinned) + { +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# else + mod_timer_pinned(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# endif + } + else +#endif + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); + } + + /* Be a bit careful here since we could be racing the callback. */ + if (!rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_STARTING)) + rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_MP_STARTING); +} + + +/** + * Stops a sub-timer (RTTimerStart and rtTimerLinuxMpEvent()). + * + * The caller has already changed the state, so we will not be in a callback + * situation wrt to the calling thread. + * + * @param pSubTimer The sub-timer. + * @param fHighRes Whether the user requested a high resolution timer or not. + */ +static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes) +{ + RTTIMERLNX_LOG(("stopsubtimer %p %d\n", pSubTimer->pParent, fHighRes)); +#ifdef RTTIMER_LINUX_WITH_HRTIMER + if (fHighRes) + { + /* There is no equivalent to del_timer in the hrtimer API, + hrtimer_cancel() == del_timer_sync(). Just like the WARN_ON in + del_timer_sync() asserts, waiting for a timer callback to complete + is deadlock prone, so don't do it. */ + int rc = hrtimer_try_to_cancel(&pSubTimer->u.Hr.LnxTimer); + if (rc < 0) + { + hrtimer_start(&pSubTimer->u.Hr.LnxTimer, ktime_set(KTIME_SEC_MAX, 0), HRTIMER_MODE_ABS); + hrtimer_try_to_cancel(&pSubTimer->u.Hr.LnxTimer); + } + } + else +#endif + del_timer(&pSubTimer->u.Std.LnxTimer); + + rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED); +} + + +/** + * Used by RTTimerDestroy and rtTimerLnxCallbackDestroy to do the actual work. + * + * @param pTimer The timer in question. + */ +static void rtTimerLnxDestroyIt(PRTTIMER pTimer) +{ + RTSPINLOCK hSpinlock = pTimer->hSpinlock; + RTCPUID iCpu; + Assert(pTimer->fSuspended); + RTTIMERLNX_LOG(("destroyit %p\n", pTimer)); + + /* + * Remove the MP notifications first because it'll reduce the risk of + * us overtaking any MP event that might theoretically be racing us here. + */ +#ifdef CONFIG_SMP + if ( pTimer->cCpus > 1 + && hSpinlock != NIL_RTSPINLOCK) + { + int rc = RTMpNotificationDeregister(rtTimerLinuxMpEvent, pTimer); + AssertRC(rc); + } +#endif /* CONFIG_SMP */ + + /* + * Invalidate the handle. + */ + ASMAtomicWriteU32(&pTimer->u32Magic, ~RTTIMER_MAGIC); + + /* + * Make sure all timers have stopped executing since we're stopping them in + * an asynchronous manner up in rtTimerLnxStopSubTimer. + */ + iCpu = pTimer->cCpus; + while (iCpu-- > 0) + { +#ifdef RTTIMER_LINUX_WITH_HRTIMER + if (pTimer->fHighRes) + hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer); + else +#endif + del_timer_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); + } + + /* + * Finally, free the resources. + */ + RTMemFreeEx(pTimer, RT_OFFSETOF(RTTIMER, aSubTimers[pTimer->cCpus])); + if (hSpinlock != NIL_RTSPINLOCK) + RTSpinlockDestroy(hSpinlock); +} + + +/** + * Workqueue callback (no DECLCALLBACK!) for deferred destruction. + * + * @param pWork Pointer to the DtorWorkqueueItem member of our timer + * structure. + */ +static void rtTimerLnxDestroyDeferred(RTR0LNXWORKQUEUEITEM *pWork) +{ + PRTTIMER pTimer = RT_FROM_MEMBER(pWork, RTTIMER, DtorWorkqueueItem); + rtTimerLnxDestroyIt(pTimer); +} + + +/** + * Called when the timer was destroyed by the callback function. + * + * @param pTimer The timer. + * @param pSubTimer The sub-timer which we're handling, the state of this + * will be RTTIMERLNXSTATE_CALLBACK_DESTROYING. + */ +static void rtTimerLnxCallbackDestroy(PRTTIMER pTimer, PRTTIMERLNXSUBTIMER pSubTimer) +{ + /* + * If it's an omni timer, the last dude does the destroying. + */ + if (pTimer->cCpus > 1) + { + uint32_t iCpu = pTimer->cCpus; + RTSpinlockAcquire(pTimer->hSpinlock); + + Assert(pSubTimer->enmState == RTTIMERLNXSTATE_CB_DESTROYING); + rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED); + + while (iCpu-- > 0) + if (rtTimerLnxGetState(&pTimer->aSubTimers[iCpu].enmState) != RTTIMERLNXSTATE_STOPPED) + { + RTSpinlockRelease(pTimer->hSpinlock); + return; + } + + RTSpinlockRelease(pTimer->hSpinlock); + } + + /* + * Destroying a timer from the callback is unsafe since the callout code + * might be touching the timer structure upon return (hrtimer does!). So, + * we have to defer the actual destruction to the IRPT workqueue. + */ + rtR0LnxWorkqueuePush(&pTimer->DtorWorkqueueItem, rtTimerLnxDestroyDeferred); +} + + +#ifdef CONFIG_SMP +/** + * Deal with a sub-timer that has migrated. + * + * @param pTimer The timer. + * @param pSubTimer The sub-timer. + */ +static void rtTimerLnxCallbackHandleMigration(PRTTIMER pTimer, PRTTIMERLNXSUBTIMER pSubTimer) +{ + RTTIMERLNXSTATE enmState; + if (pTimer->cCpus > 1) + RTSpinlockAcquire(pTimer->hSpinlock); + + do + { + enmState = rtTimerLnxGetState(&pSubTimer->enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_STOPPING: + case RTTIMERLNXSTATE_MP_STOPPING: + enmState = RTTIMERLNXSTATE_STOPPED; + case RTTIMERLNXSTATE_STOPPED: + break; + + default: + AssertMsgFailed(("%d\n", enmState)); + case RTTIMERLNXSTATE_STARTING: + case RTTIMERLNXSTATE_MP_STARTING: + case RTTIMERLNXSTATE_ACTIVE: + case RTTIMERLNXSTATE_CALLBACK: + case RTTIMERLNXSTATE_CB_STOPPING: + case RTTIMERLNXSTATE_CB_RESTARTING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED, enmState)) + enmState = RTTIMERLNXSTATE_STOPPED; + break; + + case RTTIMERLNXSTATE_CB_DESTROYING: + { + if (pTimer->cCpus > 1) + RTSpinlockRelease(pTimer->hSpinlock); + + rtTimerLnxCallbackDestroy(pTimer, pSubTimer); + return; + } + } + } while (enmState != RTTIMERLNXSTATE_STOPPED); + + if (pTimer->cCpus > 1) + RTSpinlockRelease(pTimer->hSpinlock); +} +#endif /* CONFIG_SMP */ + + +/** + * The slow path of rtTimerLnxChangeToCallbackState. + * + * @returns true if changed successfully, false if not. + * @param pSubTimer The sub-timer. + */ +static bool rtTimerLnxChangeToCallbackStateSlow(PRTTIMERLNXSUBTIMER pSubTimer) +{ + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pSubTimer->enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_ACTIVE: + case RTTIMERLNXSTATE_STARTING: + case RTTIMERLNXSTATE_MP_STARTING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_CALLBACK, enmState)) + return true; + break; + + case RTTIMERLNXSTATE_CALLBACK: + case RTTIMERLNXSTATE_CB_STOPPING: + case RTTIMERLNXSTATE_CB_RESTARTING: + case RTTIMERLNXSTATE_CB_DESTROYING: + AssertMsgFailed(("%d\n", enmState)); + default: + return false; + } + ASMNopPause(); + } +} + + +/** + * Tries to change the sub-timer state to 'callback'. + * + * @returns true if changed successfully, false if not. + * @param pSubTimer The sub-timer. + */ +DECLINLINE(bool) rtTimerLnxChangeToCallbackState(PRTTIMERLNXSUBTIMER pSubTimer) +{ + if (RT_LIKELY(rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_CALLBACK, RTTIMERLNXSTATE_ACTIVE))) + return true; + return rtTimerLnxChangeToCallbackStateSlow(pSubTimer); +} + + +#ifdef RTTIMER_LINUX_WITH_HRTIMER +/** + * Timer callback function for high resolution timers. + * + * @returns HRTIMER_NORESTART or HRTIMER_RESTART depending on whether it's a + * one-shot or interval timer. + * @param pHrTimer Pointer to the sub-timer structure. + */ +static enum hrtimer_restart rtTimerLinuxHrCallback(struct hrtimer *pHrTimer) +{ + PRTTIMERLNXSUBTIMER pSubTimer = RT_FROM_MEMBER(pHrTimer, RTTIMERLNXSUBTIMER, u.Hr.LnxTimer); + PRTTIMER pTimer = pSubTimer->pParent; + + + RTTIMERLNX_LOG(("hrcallback %p\n", pTimer)); + if (RT_UNLIKELY(!rtTimerLnxChangeToCallbackState(pSubTimer))) + return HRTIMER_NORESTART; + +#ifdef CONFIG_SMP + /* + * Check for unwanted migration. + */ + if (pTimer->fAllCpus || pTimer->fSpecificCpu) + { + RTCPUID idCpu = RTMpCpuId(); + if (RT_UNLIKELY( pTimer->fAllCpus + ? (RTCPUID)(pSubTimer - &pTimer->aSubTimers[0]) != idCpu + : pTimer->idCpu != idCpu)) + { + rtTimerLnxCallbackHandleMigration(pTimer, pSubTimer); + return HRTIMER_NORESTART; + } + } +#endif + + if (pTimer->u64NanoInterval) + { + /* + * Periodic timer, run it and update the native timer afterwards so + * we can handle RTTimerStop and RTTimerChangeInterval from the + * callback as well as a racing control thread. + */ + pTimer->pfnTimer(pTimer, pTimer->pvUser, ++pSubTimer->iTick); + hrtimer_add_expires_ns(&pSubTimer->u.Hr.LnxTimer, ASMAtomicReadU64(&pTimer->u64NanoInterval)); + if (RT_LIKELY(rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_CALLBACK))) + return HRTIMER_RESTART; + } + else + { + /* + * One shot timer (no omni), stop it before dispatching it. + * Allow RTTimerStart as well as RTTimerDestroy to be called from + * the callback. + */ + ASMAtomicWriteBool(&pTimer->fSuspended, true); + pTimer->pfnTimer(pTimer, pTimer->pvUser, ++pSubTimer->iTick); + if (RT_LIKELY(rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED, RTTIMERLNXSTATE_CALLBACK))) + return HRTIMER_NORESTART; + } + + /* + * Some state change occurred while we were in the callback routine. + */ + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pSubTimer->enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_CB_DESTROYING: + rtTimerLnxCallbackDestroy(pTimer, pSubTimer); + return HRTIMER_NORESTART; + + case RTTIMERLNXSTATE_CB_STOPPING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED, RTTIMERLNXSTATE_CB_STOPPING)) + return HRTIMER_NORESTART; + break; + + case RTTIMERLNXSTATE_CB_RESTARTING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_CB_RESTARTING)) + { + pSubTimer->iTick = 0; + hrtimer_set_expires(&pSubTimer->u.Hr.LnxTimer, rtTimerLnxNanoToKt(pSubTimer->uNsRestartAt)); + return HRTIMER_RESTART; + } + break; + + default: + AssertMsgFailed(("%d\n", enmState)); + return HRTIMER_NORESTART; + } + ASMNopPause(); + } +} +#endif /* RTTIMER_LINUX_WITH_HRTIMER */ + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) +/** + * Timer callback function for standard timers. + * + * @param pLnxTimer Pointer to the Linux timer structure. + */ +static void rtTimerLinuxStdCallback(struct timer_list *pLnxTimer) +{ + PRTTIMERLNXSUBTIMER pSubTimer = from_timer(pSubTimer, pLnxTimer, u.Std.LnxTimer); +#else +/** + * Timer callback function for standard timers. + * + * @param ulUser Address of the sub-timer structure. + */ +static void rtTimerLinuxStdCallback(unsigned long ulUser) +{ + PRTTIMERLNXSUBTIMER pSubTimer = (PRTTIMERLNXSUBTIMER)ulUser; +#endif + PRTTIMER pTimer = pSubTimer->pParent; + + RTTIMERLNX_LOG(("stdcallback %p\n", pTimer)); + if (RT_UNLIKELY(!rtTimerLnxChangeToCallbackState(pSubTimer))) + return; + +#ifdef CONFIG_SMP + /* + * Check for unwanted migration. + */ + if (pTimer->fAllCpus || pTimer->fSpecificCpu) + { + RTCPUID idCpu = RTMpCpuId(); + if (RT_UNLIKELY( pTimer->fAllCpus + ? (RTCPUID)(pSubTimer - &pTimer->aSubTimers[0]) != idCpu + : pTimer->idCpu != idCpu)) + { + rtTimerLnxCallbackHandleMigration(pTimer, pSubTimer); + return; + } + } +#endif + + if (pTimer->u64NanoInterval) + { + /* + * Interval timer, calculate the next timeout. + * + * The first time around, we'll re-adjust the u.Std.u64NextTS to + * try prevent some jittering if we were started at a bad time. + */ + const uint64_t iTick = ++pSubTimer->iTick; + uint64_t u64NanoInterval; + unsigned long cJiffies; + unsigned long flFlags; + + spin_lock_irqsave(&pTimer->ChgIntLock, flFlags); + u64NanoInterval = pTimer->u64NanoInterval; + cJiffies = pTimer->cJiffies; + if (RT_UNLIKELY(pSubTimer->u.Std.fFirstAfterChg)) + { + pSubTimer->u.Std.fFirstAfterChg = false; + pSubTimer->u.Std.u64NextTS = RTTimeSystemNanoTS(); + pSubTimer->u.Std.ulNextJiffies = jiffies; + } + spin_unlock_irqrestore(&pTimer->ChgIntLock, flFlags); + + pSubTimer->u.Std.u64NextTS += u64NanoInterval; + if (cJiffies) + { + pSubTimer->u.Std.ulNextJiffies += cJiffies; + /* Prevent overflows when the jiffies counter wraps around. + * Special thanks to Ken Preslan for helping debugging! */ + while (time_before(pSubTimer->u.Std.ulNextJiffies, jiffies)) + { + pSubTimer->u.Std.ulNextJiffies += cJiffies; + pSubTimer->u.Std.u64NextTS += u64NanoInterval; + } + } + else + { + const uint64_t u64NanoTS = RTTimeSystemNanoTS(); + while (pSubTimer->u.Std.u64NextTS < u64NanoTS) + pSubTimer->u.Std.u64NextTS += u64NanoInterval; + pSubTimer->u.Std.ulNextJiffies = jiffies + rtTimerLnxNanoToJiffies(pSubTimer->u.Std.u64NextTS - u64NanoTS); + } + + /* + * Run the timer and re-arm it unless the state changed . + * . + * We must re-arm it afterwards as we're not in a position to undo this . + * operation if for instance someone stopped or destroyed us while we . + * were in the callback. (Linux takes care of any races here.) + */ + pTimer->pfnTimer(pTimer, pTimer->pvUser, iTick); + if (RT_LIKELY(rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_CALLBACK))) + { +#ifdef CONFIG_SMP + if (pTimer->fSpecificCpu || pTimer->fAllCpus) + { +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# else + mod_timer_pinned(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# endif + } + else +#endif + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); + return; + } + } + else + { + /* + * One shot timer, stop it before dispatching it. + * Allow RTTimerStart as well as RTTimerDestroy to be called from + * the callback. + */ + ASMAtomicWriteBool(&pTimer->fSuspended, true); + pTimer->pfnTimer(pTimer, pTimer->pvUser, ++pSubTimer->iTick); + if (RT_LIKELY(rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED, RTTIMERLNXSTATE_CALLBACK))) + return; + } + + /* + * Some state change occurred while we were in the callback routine. + */ + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pSubTimer->enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_CB_DESTROYING: + rtTimerLnxCallbackDestroy(pTimer, pSubTimer); + return; + + case RTTIMERLNXSTATE_CB_STOPPING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED, RTTIMERLNXSTATE_CB_STOPPING)) + return; + break; + + case RTTIMERLNXSTATE_CB_RESTARTING: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_ACTIVE, RTTIMERLNXSTATE_CB_RESTARTING)) + { + uint64_t u64NanoTS; + uint64_t u64NextTS; + unsigned long flFlags; + + spin_lock_irqsave(&pTimer->ChgIntLock, flFlags); + u64NextTS = pSubTimer->uNsRestartAt; + u64NanoTS = RTTimeSystemNanoTS(); + pSubTimer->iTick = 0; + pSubTimer->u.Std.u64NextTS = u64NextTS; + pSubTimer->u.Std.fFirstAfterChg = true; + pSubTimer->u.Std.ulNextJiffies = u64NextTS > u64NanoTS + ? jiffies + rtTimerLnxNanoToJiffies(u64NextTS - u64NanoTS) + : jiffies; + spin_unlock_irqrestore(&pTimer->ChgIntLock, flFlags); + +#ifdef CONFIG_SMP + if (pTimer->fSpecificCpu || pTimer->fAllCpus) + { +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# else + mod_timer_pinned(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); +# endif + } + else +#endif + mod_timer(&pSubTimer->u.Std.LnxTimer, pSubTimer->u.Std.ulNextJiffies); + return; + } + break; + + default: + AssertMsgFailed(("%d\n", enmState)); + return; + } + ASMNopPause(); + } +} + + +#ifdef CONFIG_SMP + +/** + * Per-cpu callback function (RTMpOnAll/RTMpOnSpecific). + * + * @param idCpu The current CPU. + * @param pvUser1 Pointer to the timer. + * @param pvUser2 Pointer to the argument structure. + */ +static DECLCALLBACK(void) rtTimerLnxStartAllOnCpu(RTCPUID idCpu, void *pvUser1, void *pvUser2) +{ + PRTTIMERLINUXSTARTONCPUARGS pArgs = (PRTTIMERLINUXSTARTONCPUARGS)pvUser2; + PRTTIMER pTimer = (PRTTIMER)pvUser1; + Assert(idCpu < pTimer->cCpus); + rtTimerLnxStartSubTimer(&pTimer->aSubTimers[idCpu], pArgs->u64Now, pArgs->u64First, true /*fPinned*/, pTimer->fHighRes); +} + + +/** + * Worker for RTTimerStart() that takes care of the ugly bits. + * + * @returns RTTimerStart() return value. + * @param pTimer The timer. + * @param pArgs The argument structure. + */ +static int rtTimerLnxOmniStart(PRTTIMER pTimer, PRTTIMERLINUXSTARTONCPUARGS pArgs) +{ + RTCPUID iCpu; + RTCPUSET OnlineSet; + RTCPUSET OnlineSet2; + int rc2; + + /* + * Prepare all the sub-timers for the startup and then flag the timer + * as a whole as non-suspended, make sure we get them all before + * clearing fSuspended as the MP handler will be waiting on this + * should something happen while we're looping. + */ + RTSpinlockAcquire(pTimer->hSpinlock); + + /* Just make it a omni timer restriction that no stop/start races are allowed. */ + for (iCpu = 0; iCpu < pTimer->cCpus; iCpu++) + if (rtTimerLnxGetState(&pTimer->aSubTimers[iCpu].enmState) != RTTIMERLNXSTATE_STOPPED) + { + RTSpinlockRelease(pTimer->hSpinlock); + return VERR_TIMER_BUSY; + } + + do + { + RTMpGetOnlineSet(&OnlineSet); + for (iCpu = 0; iCpu < pTimer->cCpus; iCpu++) + { + Assert(pTimer->aSubTimers[iCpu].enmState != RTTIMERLNXSTATE_MP_STOPPING); + rtTimerLnxSetState(&pTimer->aSubTimers[iCpu].enmState, + RTCpuSetIsMember(&OnlineSet, iCpu) + ? RTTIMERLNXSTATE_STARTING + : RTTIMERLNXSTATE_STOPPED); + } + } while (!RTCpuSetIsEqual(&OnlineSet, RTMpGetOnlineSet(&OnlineSet2))); + + ASMAtomicWriteBool(&pTimer->fSuspended, false); + + RTSpinlockRelease(pTimer->hSpinlock); + + /* + * Start them (can't find any exported function that allows me to + * do this without the cross calls). + */ + pArgs->u64Now = RTTimeSystemNanoTS(); + rc2 = RTMpOnAll(rtTimerLnxStartAllOnCpu, pTimer, pArgs); + AssertRC(rc2); /* screw this if it fails. */ + + /* + * Reset the sub-timers who didn't start up (ALL CPUs case). + */ + RTSpinlockAcquire(pTimer->hSpinlock); + + for (iCpu = 0; iCpu < pTimer->cCpus; iCpu++) + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[iCpu].enmState, RTTIMERLNXSTATE_STOPPED, RTTIMERLNXSTATE_STARTING)) + { + /** @todo very odd case for a rainy day. Cpus that temporarily went offline while + * we were between calls needs to nudged as the MP handler will ignore events for + * them because of the STARTING state. This is an extremely unlikely case - not that + * that means anything in my experience... ;-) */ + RTTIMERLNX_LOG(("what!? iCpu=%u -> didn't start\n", iCpu)); + } + + RTSpinlockRelease(pTimer->hSpinlock); + + return VINF_SUCCESS; +} + + +/** + * Worker for RTTimerStop() that takes care of the ugly SMP bits. + * + * @returns true if there was any active callbacks, false if not. + * @param pTimer The timer (valid). + * @param fForDestroy Whether this is for RTTimerDestroy or not. + */ +static bool rtTimerLnxOmniStop(PRTTIMER pTimer, bool fForDestroy) +{ + bool fActiveCallbacks = false; + RTCPUID iCpu; + RTTIMERLNXSTATE enmState; + + + /* + * Mark the timer as suspended and flag all timers as stopping, except + * for those being stopped by an MP event. + */ + RTSpinlockAcquire(pTimer->hSpinlock); + + ASMAtomicWriteBool(&pTimer->fSuspended, true); + for (iCpu = 0; iCpu < pTimer->cCpus; iCpu++) + { + for (;;) + { + enmState = rtTimerLnxGetState(&pTimer->aSubTimers[iCpu].enmState); + if ( enmState == RTTIMERLNXSTATE_STOPPED + || enmState == RTTIMERLNXSTATE_MP_STOPPING) + break; + if ( enmState == RTTIMERLNXSTATE_CALLBACK + || enmState == RTTIMERLNXSTATE_CB_STOPPING + || enmState == RTTIMERLNXSTATE_CB_RESTARTING) + { + Assert(enmState != RTTIMERLNXSTATE_CB_STOPPING || fForDestroy); + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[iCpu].enmState, + !fForDestroy ? RTTIMERLNXSTATE_CB_STOPPING : RTTIMERLNXSTATE_CB_DESTROYING, + enmState)) + { + fActiveCallbacks = true; + break; + } + } + else + { + Assert(enmState == RTTIMERLNXSTATE_ACTIVE); + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[iCpu].enmState, RTTIMERLNXSTATE_STOPPING, enmState)) + break; + } + ASMNopPause(); + } + } + + RTSpinlockRelease(pTimer->hSpinlock); + + /* + * Do the actual stopping. Fortunately, this doesn't require any IPIs. + * Unfortunately it cannot be done synchronously. + */ + for (iCpu = 0; iCpu < pTimer->cCpus; iCpu++) + if (rtTimerLnxGetState(&pTimer->aSubTimers[iCpu].enmState) == RTTIMERLNXSTATE_STOPPING) + rtTimerLnxStopSubTimer(&pTimer->aSubTimers[iCpu], pTimer->fHighRes); + + return fActiveCallbacks; +} + + +/** + * Per-cpu callback function (RTMpOnSpecific) used by rtTimerLinuxMpEvent() + * to start a sub-timer on a cpu that just have come online. + * + * @param idCpu The current CPU. + * @param pvUser1 Pointer to the timer. + * @param pvUser2 Pointer to the argument structure. + */ +static DECLCALLBACK(void) rtTimerLinuxMpStartOnCpu(RTCPUID idCpu, void *pvUser1, void *pvUser2) +{ + PRTTIMERLINUXSTARTONCPUARGS pArgs = (PRTTIMERLINUXSTARTONCPUARGS)pvUser2; + PRTTIMER pTimer = (PRTTIMER)pvUser1; + RTSPINLOCK hSpinlock; + Assert(idCpu < pTimer->cCpus); + + /* + * We have to be kind of careful here as we might be racing RTTimerStop + * (and/or RTTimerDestroy, thus the paranoia. + */ + hSpinlock = pTimer->hSpinlock; + if ( hSpinlock != NIL_RTSPINLOCK + && pTimer->u32Magic == RTTIMER_MAGIC) + { + RTSpinlockAcquire(hSpinlock); + + if ( !ASMAtomicUoReadBool(&pTimer->fSuspended) + && pTimer->u32Magic == RTTIMER_MAGIC) + { + /* We're sane and the timer is not suspended yet. */ + PRTTIMERLNXSUBTIMER pSubTimer = &pTimer->aSubTimers[idCpu]; + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_MP_STARTING, RTTIMERLNXSTATE_STOPPED)) + rtTimerLnxStartSubTimer(pSubTimer, pArgs->u64Now, pArgs->u64First, true /*fPinned*/, pTimer->fHighRes); + } + + RTSpinlockRelease(hSpinlock); + } +} + + +/** + * MP event notification callback. + * + * @param enmEvent The event. + * @param idCpu The cpu it applies to. + * @param pvUser The timer. + */ +static DECLCALLBACK(void) rtTimerLinuxMpEvent(RTMPEVENT enmEvent, RTCPUID idCpu, void *pvUser) +{ + PRTTIMER pTimer = (PRTTIMER)pvUser; + PRTTIMERLNXSUBTIMER pSubTimer = &pTimer->aSubTimers[idCpu]; + RTSPINLOCK hSpinlock; + + Assert(idCpu < pTimer->cCpus); + + /* + * Some initial paranoia. + */ + if (pTimer->u32Magic != RTTIMER_MAGIC) + return; + hSpinlock = pTimer->hSpinlock; + if (hSpinlock == NIL_RTSPINLOCK) + return; + + RTSpinlockAcquire(hSpinlock); + + /* Is it active? */ + if ( !ASMAtomicUoReadBool(&pTimer->fSuspended) + && pTimer->u32Magic == RTTIMER_MAGIC) + { + switch (enmEvent) + { + /* + * Try do it without leaving the spin lock, but if we have to, retake it + * when we're on the right cpu. + */ + case RTMPEVENT_ONLINE: + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_MP_STARTING, RTTIMERLNXSTATE_STOPPED)) + { + RTTIMERLINUXSTARTONCPUARGS Args; + Args.u64Now = RTTimeSystemNanoTS(); + Args.u64First = 0; + + if (RTMpCpuId() == idCpu) + rtTimerLnxStartSubTimer(pSubTimer, Args.u64Now, Args.u64First, true /*fPinned*/, pTimer->fHighRes); + else + { + rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED); /* we'll recheck it. */ + RTSpinlockRelease(hSpinlock); + + RTMpOnSpecific(idCpu, rtTimerLinuxMpStartOnCpu, pTimer, &Args); + return; /* we've left the spinlock */ + } + } + break; + + /* + * The CPU is (going) offline, make sure the sub-timer is stopped. + * + * Linux will migrate it to a different CPU, but we don't want this. The + * timer function is checking for this. + */ + case RTMPEVENT_OFFLINE: + { + RTTIMERLNXSTATE enmState; + while ( (enmState = rtTimerLnxGetState(&pSubTimer->enmState)) == RTTIMERLNXSTATE_ACTIVE + || enmState == RTTIMERLNXSTATE_CALLBACK + || enmState == RTTIMERLNXSTATE_CB_RESTARTING) + { + if (enmState == RTTIMERLNXSTATE_ACTIVE) + { + if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_MP_STOPPING, RTTIMERLNXSTATE_ACTIVE)) + { + RTSpinlockRelease(hSpinlock); + + rtTimerLnxStopSubTimer(pSubTimer, pTimer->fHighRes); + return; /* we've left the spinlock */ + } + } + else if (rtTimerLnxCmpXchgState(&pSubTimer->enmState, RTTIMERLNXSTATE_CB_STOPPING, enmState)) + break; + + /* State not stable, try again. */ + ASMNopPause(); + } + break; + } + } + } + + RTSpinlockRelease(hSpinlock); +} + +#endif /* CONFIG_SMP */ + + +/** + * Callback function use by RTTimerStart via RTMpOnSpecific to start a timer + * running on a specific CPU. + * + * @param idCpu The current CPU. + * @param pvUser1 Pointer to the timer. + * @param pvUser2 Pointer to the argument structure. + */ +static DECLCALLBACK(void) rtTimerLnxStartOnSpecificCpu(RTCPUID idCpu, void *pvUser1, void *pvUser2) +{ + PRTTIMERLINUXSTARTONCPUARGS pArgs = (PRTTIMERLINUXSTARTONCPUARGS)pvUser2; + PRTTIMER pTimer = (PRTTIMER)pvUser1; + RT_NOREF_PV(idCpu); + rtTimerLnxStartSubTimer(&pTimer->aSubTimers[0], pArgs->u64Now, pArgs->u64First, true /*fPinned*/, pTimer->fHighRes); +} + + +RTDECL(int) RTTimerStart(PRTTIMER pTimer, uint64_t u64First) +{ + RTTIMERLINUXSTARTONCPUARGS Args; + int rc2; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); + AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); + + if (!ASMAtomicUoReadBool(&pTimer->fSuspended)) + return VERR_TIMER_ACTIVE; + RTTIMERLNX_LOG(("start %p cCpus=%d\n", pTimer, pTimer->cCpus)); + + Args.u64First = u64First; +#ifdef CONFIG_SMP + /* + * Omni timer? + */ + if (pTimer->fAllCpus) + { + rc2 = rtTimerLnxOmniStart(pTimer, &Args); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc2; + } +#endif + + /* + * Simple timer - Pretty straight forward if it wasn't for restarting. + */ + Args.u64Now = RTTimeSystemNanoTS(); + ASMAtomicWriteU64(&pTimer->aSubTimers[0].uNsRestartAt, Args.u64Now + u64First); + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pTimer->aSubTimers[0].enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_STOPPED: + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_STARTING, RTTIMERLNXSTATE_STOPPED)) + { + ASMAtomicWriteBool(&pTimer->fSuspended, false); + if (!pTimer->fSpecificCpu) + rtTimerLnxStartSubTimer(&pTimer->aSubTimers[0], Args.u64Now, Args.u64First, + false /*fPinned*/, pTimer->fHighRes); + else + { + rc2 = RTMpOnSpecific(pTimer->idCpu, rtTimerLnxStartOnSpecificCpu, pTimer, &Args); + if (RT_FAILURE(rc2)) + { + /* Suspend it, the cpu id is probably invalid or offline. */ + ASMAtomicWriteBool(&pTimer->fSuspended, true); + rtTimerLnxSetState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_STOPPED); + return rc2; + } + } + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + break; + + case RTTIMERLNXSTATE_CALLBACK: + case RTTIMERLNXSTATE_CB_STOPPING: + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_CB_RESTARTING, enmState)) + { + ASMAtomicWriteBool(&pTimer->fSuspended, false); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } + break; + + default: + AssertMsgFailed(("%d\n", enmState)); + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_INTERNAL_ERROR_4; + } + ASMNopPause(); + } +} +RT_EXPORT_SYMBOL(RTTimerStart); + + +/** + * Common worker for RTTimerStop and RTTimerDestroy. + * + * @returns true if there was any active callbacks, false if not. + * @param pTimer The timer to stop. + * @param fForDestroy Whether it's RTTimerDestroy calling or not. + */ +static bool rtTimerLnxStop(PRTTIMER pTimer, bool fForDestroy) +{ + RTTIMERLNX_LOG(("lnxstop %p %d\n", pTimer, fForDestroy)); +#ifdef CONFIG_SMP + /* + * Omni timer? + */ + if (pTimer->fAllCpus) + return rtTimerLnxOmniStop(pTimer, fForDestroy); +#endif + + /* + * Simple timer. + */ + ASMAtomicWriteBool(&pTimer->fSuspended, true); + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pTimer->aSubTimers[0].enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_ACTIVE: + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, RTTIMERLNXSTATE_STOPPING, RTTIMERLNXSTATE_ACTIVE)) + { + rtTimerLnxStopSubTimer(&pTimer->aSubTimers[0], pTimer->fHighRes); + return false; + } + break; + + case RTTIMERLNXSTATE_CALLBACK: + case RTTIMERLNXSTATE_CB_RESTARTING: + case RTTIMERLNXSTATE_CB_STOPPING: + Assert(enmState != RTTIMERLNXSTATE_CB_STOPPING || fForDestroy); + if (rtTimerLnxCmpXchgState(&pTimer->aSubTimers[0].enmState, + !fForDestroy ? RTTIMERLNXSTATE_CB_STOPPING : RTTIMERLNXSTATE_CB_DESTROYING, + enmState)) + return true; + break; + + case RTTIMERLNXSTATE_STOPPED: + return VINF_SUCCESS; + + case RTTIMERLNXSTATE_CB_DESTROYING: + AssertMsgFailed(("enmState=%d pTimer=%p\n", enmState, pTimer)); + return true; + + default: + case RTTIMERLNXSTATE_STARTING: + case RTTIMERLNXSTATE_MP_STARTING: + case RTTIMERLNXSTATE_STOPPING: + case RTTIMERLNXSTATE_MP_STOPPING: + AssertMsgFailed(("enmState=%d pTimer=%p\n", enmState, pTimer)); + return false; + } + + /* State not stable, try again. */ + ASMNopPause(); + } +} + + +RTDECL(int) RTTimerStop(PRTTIMER pTimer) +{ + /* + * Validate. + */ + IPRT_LINUX_SAVE_EFL_AC(); + AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); + AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); + RTTIMERLNX_LOG(("stop %p\n", pTimer)); + + if (ASMAtomicUoReadBool(&pTimer->fSuspended)) + return VERR_TIMER_SUSPENDED; + + rtTimerLnxStop(pTimer, false /*fForDestroy*/); + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTTimerStop); + + +RTDECL(int) RTTimerChangeInterval(PRTTIMER pTimer, uint64_t u64NanoInterval) +{ + unsigned long cJiffies; + unsigned long flFlags; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. + */ + AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); + AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); + AssertReturn(u64NanoInterval, VERR_INVALID_PARAMETER); + AssertReturn(u64NanoInterval < UINT64_MAX / 8, VERR_INVALID_PARAMETER); + AssertReturn(pTimer->u64NanoInterval, VERR_INVALID_STATE); + RTTIMERLNX_LOG(("change %p %llu\n", pTimer, u64NanoInterval)); + +#ifdef RTTIMER_LINUX_WITH_HRTIMER + /* + * For the high resolution timers it is easy since we don't care so much + * about when it is applied to the sub-timers. + */ + if (pTimer->fHighRes) + { + ASMAtomicWriteU64(&pTimer->u64NanoInterval, u64NanoInterval); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; + } +#endif + + /* + * Standard timers have a bit more complicated way of calculating + * their interval and such. So, forget omni timers for now. + */ + if (pTimer->cCpus > 1) + return VERR_NOT_SUPPORTED; + + cJiffies = u64NanoInterval / RTTimerGetSystemGranularity(); + if (cJiffies * RTTimerGetSystemGranularity() != u64NanoInterval) + cJiffies = 0; + + spin_lock_irqsave(&pTimer->ChgIntLock, flFlags); + pTimer->aSubTimers[0].u.Std.fFirstAfterChg = true; + pTimer->cJiffies = cJiffies; + ASMAtomicWriteU64(&pTimer->u64NanoInterval, u64NanoInterval); + spin_unlock_irqrestore(&pTimer->ChgIntLock, flFlags); + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTTimerChangeInterval); + + +RTDECL(int) RTTimerDestroy(PRTTIMER pTimer) +{ + bool fCanDestroy; + IPRT_LINUX_SAVE_EFL_AC(); + + /* + * Validate. It's ok to pass NULL pointer. + */ + if (pTimer == /*NIL_RTTIMER*/ NULL) + return VINF_SUCCESS; + AssertPtrReturn(pTimer, VERR_INVALID_HANDLE); + AssertReturn(pTimer->u32Magic == RTTIMER_MAGIC, VERR_INVALID_HANDLE); + RTTIMERLNX_LOG(("destroy %p\n", pTimer)); +/** @todo We should invalidate the magic here! */ + + /* + * Stop the timer if it's still active, then destroy it if we can. + */ + if (!ASMAtomicUoReadBool(&pTimer->fSuspended)) + fCanDestroy = rtTimerLnxStop(pTimer, true /*fForDestroy*/); + else + { + uint32_t iCpu = pTimer->cCpus; + if (pTimer->cCpus > 1) + RTSpinlockAcquire(pTimer->hSpinlock); + + fCanDestroy = true; + while (iCpu-- > 0) + { + for (;;) + { + RTTIMERLNXSTATE enmState = rtTimerLnxGetState(&pTimer->aSubTimers[iCpu].enmState); + switch (enmState) + { + case RTTIMERLNXSTATE_CALLBACK: + case RTTIMERLNXSTATE_CB_RESTARTING: + case RTTIMERLNXSTATE_CB_STOPPING: + if (!rtTimerLnxCmpXchgState(&pTimer->aSubTimers[iCpu].enmState, RTTIMERLNXSTATE_CB_DESTROYING, enmState)) + continue; + fCanDestroy = false; + break; + + case RTTIMERLNXSTATE_CB_DESTROYING: + AssertMsgFailed(("%d\n", enmState)); + fCanDestroy = false; + break; + default: + break; + } + break; + } + } + + if (pTimer->cCpus > 1) + RTSpinlockRelease(pTimer->hSpinlock); + } + + if (fCanDestroy) + { + /* For paranoid reasons, defer actually destroying the semaphore when + in atomic or interrupt context. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 32) + if (in_atomic() || in_interrupt()) +#else + if (in_interrupt()) +#endif + rtR0LnxWorkqueuePush(&pTimer->DtorWorkqueueItem, rtTimerLnxDestroyDeferred); + else + rtTimerLnxDestroyIt(pTimer); + } + + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTTimerDestroy); + + +RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_t fFlags, PFNRTTIMER pfnTimer, void *pvUser) +{ + PRTTIMER pTimer; + RTCPUID iCpu; + unsigned cCpus; + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + + rtR0LnxWorkqueueFlush(); /* for 2.4 */ + *ppTimer = NULL; + + /* + * Validate flags. + */ + if (!RTTIMER_FLAGS_ARE_VALID(fFlags)) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_INVALID_PARAMETER; + } + if ( (fFlags & RTTIMER_FLAGS_CPU_SPECIFIC) + && (fFlags & RTTIMER_FLAGS_CPU_ALL) != RTTIMER_FLAGS_CPU_ALL + && !RTMpIsCpuPossible(RTMpCpuIdFromSetIndex(fFlags & RTTIMER_FLAGS_CPU_MASK))) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return VERR_CPU_NOT_FOUND; + } + + /* + * Allocate the timer handler. + */ + cCpus = 1; +#ifdef CONFIG_SMP + if ((fFlags & RTTIMER_FLAGS_CPU_ALL) == RTTIMER_FLAGS_CPU_ALL) + { + cCpus = RTMpGetMaxCpuId() + 1; + Assert(cCpus <= RTCPUSET_MAX_CPUS); /* On linux we have a 1:1 relationship between cpuid and set index. */ + AssertReturnStmt(u64NanoInterval, IPRT_LINUX_RESTORE_EFL_AC(), VERR_NOT_IMPLEMENTED); /* We don't implement single shot on all cpus, sorry. */ + } +#endif + + rc = RTMemAllocEx(RT_OFFSETOF(RTTIMER, aSubTimers[cCpus]), 0, + RTMEMALLOCEX_FLAGS_ZEROED | RTMEMALLOCEX_FLAGS_ANY_CTX_FREE, (void **)&pTimer); + if (RT_FAILURE(rc)) + { + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; + } + + /* + * Initialize it. + */ + pTimer->u32Magic = RTTIMER_MAGIC; + pTimer->hSpinlock = NIL_RTSPINLOCK; + pTimer->fSuspended = true; + pTimer->fHighRes = !!(fFlags & RTTIMER_FLAGS_HIGH_RES); +#ifdef CONFIG_SMP + pTimer->fSpecificCpu = (fFlags & RTTIMER_FLAGS_CPU_SPECIFIC) && (fFlags & RTTIMER_FLAGS_CPU_ALL) != RTTIMER_FLAGS_CPU_ALL; + pTimer->fAllCpus = (fFlags & RTTIMER_FLAGS_CPU_ALL) == RTTIMER_FLAGS_CPU_ALL; + pTimer->idCpu = pTimer->fSpecificCpu + ? RTMpCpuIdFromSetIndex(fFlags & RTTIMER_FLAGS_CPU_MASK) + : NIL_RTCPUID; +#else + pTimer->fSpecificCpu = !!(fFlags & RTTIMER_FLAGS_CPU_SPECIFIC); + pTimer->idCpu = RTMpCpuId(); +#endif + pTimer->cCpus = cCpus; + pTimer->pfnTimer = pfnTimer; + pTimer->pvUser = pvUser; + pTimer->u64NanoInterval = u64NanoInterval; + pTimer->cJiffies = u64NanoInterval / RTTimerGetSystemGranularity(); + if (pTimer->cJiffies * RTTimerGetSystemGranularity() != u64NanoInterval) + pTimer->cJiffies = 0; + spin_lock_init(&pTimer->ChgIntLock); + + for (iCpu = 0; iCpu < cCpus; iCpu++) + { +#ifdef RTTIMER_LINUX_WITH_HRTIMER + if (pTimer->fHighRes) + { + hrtimer_init(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); + pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback; + } + else +#endif + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer, rtTimerLinuxStdCallback, TIMER_PINNED); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + init_timer_pinned(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); +#else + init_timer(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer); +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.data = (unsigned long)&pTimer->aSubTimers[iCpu]; + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.function = rtTimerLinuxStdCallback; +#endif + pTimer->aSubTimers[iCpu].u.Std.LnxTimer.expires = jiffies; + pTimer->aSubTimers[iCpu].u.Std.u64NextTS = 0; + } + pTimer->aSubTimers[iCpu].iTick = 0; + pTimer->aSubTimers[iCpu].pParent = pTimer; + pTimer->aSubTimers[iCpu].enmState = RTTIMERLNXSTATE_STOPPED; + } + +#ifdef CONFIG_SMP + /* + * If this is running on ALL cpus, we'll have to register a callback + * for MP events (so timers can be started/stopped on cpus going + * online/offline). We also create the spinlock for synchronizing + * stop/start/mp-event. + */ + if (cCpus > 1) + { + int rc = RTSpinlockCreate(&pTimer->hSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "RTTimerLnx"); + if (RT_SUCCESS(rc)) + rc = RTMpNotificationRegister(rtTimerLinuxMpEvent, pTimer); + else + pTimer->hSpinlock = NIL_RTSPINLOCK; + if (RT_FAILURE(rc)) + { + RTTimerDestroy(pTimer); + IPRT_LINUX_RESTORE_EFL_AC(); + return rc; + } + } +#endif /* CONFIG_SMP */ + + RTTIMERLNX_LOG(("create %p hires=%d fFlags=%#x cCpus=%u\n", pTimer, pTimer->fHighRes, fFlags, cCpus)); + *ppTimer = pTimer; + IPRT_LINUX_RESTORE_EFL_AC(); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTTimerCreateEx); + + +RTDECL(uint32_t) RTTimerGetSystemGranularity(void) +{ +#if 0 /** @todo Not sure if this is what we want or not... Add new API for + * querying the resolution of the high res timers? */ + struct timespec Ts; + int rc; + IPRT_LINUX_SAVE_EFL_AC(); + rc = hrtimer_get_res(CLOCK_MONOTONIC, &Ts); + IPRT_LINUX_RESTORE_EFL_AC(); + if (!rc) + { + Assert(!Ts.tv_sec); + return Ts.tv_nsec; + } +#endif + return RT_NS_1SEC / HZ; /* ns */ +} +RT_EXPORT_SYMBOL(RTTimerGetSystemGranularity); + + +RTDECL(int) RTTimerRequestSystemGranularity(uint32_t u32Request, uint32_t *pu32Granted) +{ + RT_NOREF_PV(u32Request); RT_NOREF_PV(*pu32Granted); + return VERR_NOT_SUPPORTED; +} +RT_EXPORT_SYMBOL(RTTimerRequestSystemGranularity); + + +RTDECL(int) RTTimerReleaseSystemGranularity(uint32_t u32Granted) +{ + RT_NOREF_PV(u32Granted); + return VERR_NOT_SUPPORTED; +} +RT_EXPORT_SYMBOL(RTTimerReleaseSystemGranularity); + + +RTDECL(bool) RTTimerCanDoHighResolution(void) +{ +#ifdef RTTIMER_LINUX_WITH_HRTIMER + return true; +#else + return false; +#endif +} +RT_EXPORT_SYMBOL(RTTimerCanDoHighResolution); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/linux/waitqueue-r0drv-linux.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/linux/waitqueue-r0drv-linux.h @@ -0,0 +1,290 @@ +/* $Id: waitqueue-r0drv-linux.h $ */ +/** @file + * IPRT - Linux Ring-0 Driver Helpers for Abstracting Wait Queues, + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#ifndef ___r0drv_linux_waitqueue_r0drv_linux_h +#define ___r0drv_linux_waitqueue_r0drv_linux_h + +#include "the-linux-kernel.h" + +#include +#include +#include +#include + +/** The resolution (nanoseconds) specified when using + * schedule_hrtimeout_range. */ +#define RTR0SEMLNXWAIT_RESOLUTION 50000 + + +/** + * Kernel mode Linux wait state structure. + */ +typedef struct RTR0SEMLNXWAIT +{ + /** The wait queue entry. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0) + wait_queue_entry_t WaitQE; +#else + wait_queue_t WaitQE; +#endif + /** The absolute timeout given as nano seconds since the start of the + * monotonic clock. */ + uint64_t uNsAbsTimeout; + /** The timeout in nano seconds relative to the start of the wait. */ + uint64_t cNsRelTimeout; + /** The native timeout value. */ + union + { +#ifdef IPRT_LINUX_HAS_HRTIMER + /** The timeout when fHighRes is true. Absolute, so no updating. */ + ktime_t KtTimeout; +#endif + /** The timeout when fHighRes is false. Updated after waiting. */ + long lTimeout; + } u; + /** Set if we use high resolution timeouts. */ + bool fHighRes; + /** Set if it's an indefinite wait. */ + bool fIndefinite; + /** Set if we've already timed out. + * Set by rtR0SemLnxWaitDoIt and read by rtR0SemLnxWaitHasTimedOut. */ + bool fTimedOut; + /** TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE. */ + int iWaitState; + /** The wait queue. */ + wait_queue_head_t *pWaitQueue; +} RTR0SEMLNXWAIT; +/** Pointer to a linux wait state. */ +typedef RTR0SEMLNXWAIT *PRTR0SEMLNXWAIT; + + +/** + * Initializes a wait. + * + * The caller MUST check the wait condition BEFORE calling this function or the + * timeout logic will be flawed. + * + * @returns VINF_SUCCESS or VERR_TIMEOUT. + * @param pWait The wait structure. + * @param fFlags The wait flags. + * @param uTimeout The timeout. + * @param pWaitQueue The wait queue head. + */ +DECLINLINE(int) rtR0SemLnxWaitInit(PRTR0SEMLNXWAIT pWait, uint32_t fFlags, uint64_t uTimeout, + wait_queue_head_t *pWaitQueue) +{ + /* + * Process the flags and timeout. + */ + if (!(fFlags & RTSEMWAIT_FLAGS_INDEFINITE)) + { +/** @todo optimize: millisecs -> nanosecs -> millisec -> jiffies */ + if (fFlags & RTSEMWAIT_FLAGS_MILLISECS) + uTimeout = uTimeout < UINT64_MAX / RT_US_1SEC * RT_US_1SEC + ? uTimeout * RT_US_1SEC + : UINT64_MAX; + if (uTimeout == UINT64_MAX) + fFlags |= RTSEMWAIT_FLAGS_INDEFINITE; + else + { + uint64_t u64Now; + if (fFlags & RTSEMWAIT_FLAGS_RELATIVE) + { + if (uTimeout == 0) + return VERR_TIMEOUT; + + u64Now = RTTimeSystemNanoTS(); + pWait->cNsRelTimeout = uTimeout; + pWait->uNsAbsTimeout = u64Now + uTimeout; + if (pWait->uNsAbsTimeout < u64Now) /* overflow */ + fFlags |= RTSEMWAIT_FLAGS_INDEFINITE; + } + else + { + u64Now = RTTimeSystemNanoTS(); + if (u64Now >= uTimeout) + return VERR_TIMEOUT; + + pWait->cNsRelTimeout = uTimeout - u64Now; + pWait->uNsAbsTimeout = uTimeout; + } + } + } + + if (!(fFlags & RTSEMWAIT_FLAGS_INDEFINITE)) + { + pWait->fIndefinite = false; +#ifdef IPRT_LINUX_HAS_HRTIMER + if ( (fFlags & (RTSEMWAIT_FLAGS_NANOSECS | RTSEMWAIT_FLAGS_ABSOLUTE)) + || pWait->cNsRelTimeout < RT_NS_1SEC / HZ * 4) + { + pWait->fHighRes = true; +# if BITS_PER_LONG < 64 + if ( KTIME_SEC_MAX <= LONG_MAX + && pWait->uNsAbsTimeout >= KTIME_SEC_MAX * RT_NS_1SEC_64 + (RT_NS_1SEC - 1)) + fFlags |= RTSEMWAIT_FLAGS_INDEFINITE; + else +# endif + pWait->u.KtTimeout = ns_to_ktime(pWait->uNsAbsTimeout); + } + else +#endif + { + uint64_t cJiffies = ASMMultU64ByU32DivByU32(pWait->cNsRelTimeout, HZ, RT_NS_1SEC); + if (cJiffies >= MAX_JIFFY_OFFSET) + fFlags |= RTSEMWAIT_FLAGS_INDEFINITE; + else + { + pWait->u.lTimeout = (long)cJiffies; + pWait->fHighRes = false; + } + } + } + + if (fFlags & RTSEMWAIT_FLAGS_INDEFINITE) + { + pWait->fIndefinite = true; + pWait->fHighRes = false; + pWait->uNsAbsTimeout = UINT64_MAX; + pWait->cNsRelTimeout = UINT64_MAX; + pWait->u.lTimeout = LONG_MAX; + } + + pWait->fTimedOut = false; + + /* + * Initialize the wait queue related bits. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 39) + init_wait((&pWait->WaitQE)); +#else + RT_ZERO(pWait->WaitQE); + init_waitqueue_entry((&pWait->WaitQE), current); +#endif + pWait->pWaitQueue = pWaitQueue; + pWait->iWaitState = fFlags & RTSEMWAIT_FLAGS_INTERRUPTIBLE + ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE; + + return VINF_SUCCESS; +} + + +/** + * Prepares the next wait. + * + * This must be called before rtR0SemLnxWaitDoIt, and the caller should check + * the exit conditions in-between the two calls. + * + * @param pWait The wait structure. + */ +DECLINLINE(void) rtR0SemLnxWaitPrepare(PRTR0SEMLNXWAIT pWait) +{ + /* Make everything thru schedule*() atomic scheduling wise. (Is this correct?) */ + prepare_to_wait(pWait->pWaitQueue, &pWait->WaitQE, pWait->iWaitState); +} + + +/** + * Do the actual wait. + * + * @param pWait The wait structure. + */ +DECLINLINE(void) rtR0SemLnxWaitDoIt(PRTR0SEMLNXWAIT pWait) +{ + if (pWait->fIndefinite) + schedule(); +#ifdef IPRT_LINUX_HAS_HRTIMER + else if (pWait->fHighRes) + { + int rc = schedule_hrtimeout_range(&pWait->u.KtTimeout, HRTIMER_MODE_ABS, RTR0SEMLNXWAIT_RESOLUTION); + if (!rc) + pWait->fTimedOut = true; + } +#endif + else + { + pWait->u.lTimeout = schedule_timeout(pWait->u.lTimeout); + if (pWait->u.lTimeout <= 0) + pWait->fTimedOut = true; + } + after_wait((&pWait->WaitQE)); +} + + +/** + * Checks if a linux wait was interrupted. + * + * @returns true / false + * @param pWait The wait structure. + * @remarks This shall be called before the first rtR0SemLnxWaitDoIt(). + */ +DECLINLINE(bool) rtR0SemLnxWaitWasInterrupted(PRTR0SEMLNXWAIT pWait) +{ + return pWait->iWaitState == TASK_INTERRUPTIBLE + && signal_pending(current); +} + + +/** + * Checks if a linux wait has timed out. + * + * @returns true / false + * @param pWait The wait structure. + */ +DECLINLINE(bool) rtR0SemLnxWaitHasTimedOut(PRTR0SEMLNXWAIT pWait) +{ + return pWait->fTimedOut; +} + + +/** + * Deletes a linux wait. + * + * @param pWait The wait structure. + */ +DECLINLINE(void) rtR0SemLnxWaitDelete(PRTR0SEMLNXWAIT pWait) +{ + finish_wait(pWait->pWaitQueue, &pWait->WaitQE); +} + + +/** + * Gets the max resolution of the timeout machinery. + * + * @returns Resolution specified in nanoseconds. + */ +DECLINLINE(uint32_t) rtR0SemLnxWaitGetResolution(void) +{ +#ifdef IPRT_LINUX_HAS_HRTIMER + return RTR0SEMLNXWAIT_RESOLUTION; +#else + return RT_NS_1SEC / HZ; /* ns */ +#endif +} + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/memobj-r0drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/memobj-r0drv.c @@ -0,0 +1,808 @@ +/* $Id: memobj-r0drv.cpp $ */ +/** @file + * IPRT - Ring-0 Memory Objects, Common Code. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP RTLOGGROUP_DEFAULT /// @todo RTLOGGROUP_MEM +#define RTMEM_NO_WRAP_TO_EF_APIS /* circular dependency otherwise. */ +#include +#include "internal/iprt.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "internal/memobj.h" + + +/** + * Internal function for allocating a new memory object. + * + * @returns The allocated and initialized handle. + * @param cbSelf The size of the memory object handle. 0 mean default size. + * @param enmType The memory object type. + * @param pv The memory object mapping. + * @param cb The size of the memory object. + */ +DECLHIDDEN(PRTR0MEMOBJINTERNAL) rtR0MemObjNew(size_t cbSelf, RTR0MEMOBJTYPE enmType, void *pv, size_t cb) +{ + PRTR0MEMOBJINTERNAL pNew; + + /* validate the size */ + if (!cbSelf) + cbSelf = sizeof(*pNew); + Assert(cbSelf >= sizeof(*pNew)); + Assert(cbSelf == (uint32_t)cbSelf); + AssertMsg(RT_ALIGN_Z(cb, PAGE_SIZE) == cb, ("%#zx\n", cb)); + + /* + * Allocate and initialize the object. + */ + pNew = (PRTR0MEMOBJINTERNAL)RTMemAllocZ(cbSelf); + if (pNew) + { + pNew->u32Magic = RTR0MEMOBJ_MAGIC; + pNew->cbSelf = (uint32_t)cbSelf; + pNew->enmType = enmType; + pNew->fFlags = 0; + pNew->cb = cb; + pNew->pv = pv; + } + return pNew; +} + + +/** + * Deletes an incomplete memory object. + * + * This is for cleaning up after failures during object creation. + * + * @param pMem The incomplete memory object to delete. + */ +DECLHIDDEN(void) rtR0MemObjDelete(PRTR0MEMOBJINTERNAL pMem) +{ + if (pMem) + { + ASMAtomicUoWriteU32(&pMem->u32Magic, ~RTR0MEMOBJ_MAGIC); + pMem->enmType = RTR0MEMOBJTYPE_END; + RTMemFree(pMem); + } +} + + +/** + * Links a mapping object to a primary object. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VINF_NO_MEMORY if we couldn't expand the mapping array of the parent. + * @param pParent The parent (primary) memory object. + * @param pChild The child (mapping) memory object. + */ +static int rtR0MemObjLink(PRTR0MEMOBJINTERNAL pParent, PRTR0MEMOBJINTERNAL pChild) +{ + uint32_t i; + + /* sanity */ + Assert(rtR0MemObjIsMapping(pChild)); + Assert(!rtR0MemObjIsMapping(pParent)); + + /* expand the array? */ + i = pParent->uRel.Parent.cMappings; + if (i >= pParent->uRel.Parent.cMappingsAllocated) + { + void *pv = RTMemRealloc(pParent->uRel.Parent.papMappings, + (i + 32) * sizeof(pParent->uRel.Parent.papMappings[0])); + if (!pv) + return VERR_NO_MEMORY; + pParent->uRel.Parent.papMappings = (PPRTR0MEMOBJINTERNAL)pv; + pParent->uRel.Parent.cMappingsAllocated = i + 32; + Assert(i == pParent->uRel.Parent.cMappings); + } + + /* do the linking. */ + pParent->uRel.Parent.papMappings[i] = pChild; + pParent->uRel.Parent.cMappings++; + pChild->uRel.Child.pParent = pParent; + + return VINF_SUCCESS; +} + + +/** + * Checks if this is mapping or not. + * + * @returns true if it's a mapping, otherwise false. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(bool) RTR0MemObjIsMapping(RTR0MEMOBJ MemObj) +{ + /* Validate the object handle. */ + PRTR0MEMOBJINTERNAL pMem; + AssertPtrReturn(MemObj, false); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertMsgReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, ("%p: %#x\n", pMem, pMem->u32Magic), false); + AssertMsgReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, ("%p: %d\n", pMem, pMem->enmType), false); + + /* hand it on to the inlined worker. */ + return rtR0MemObjIsMapping(pMem); +} +RT_EXPORT_SYMBOL(RTR0MemObjIsMapping); + + +/** + * Gets the address of a ring-0 memory object. + * + * @returns The address of the memory object. + * @returns NULL if the handle is invalid (asserts in strict builds) or if there isn't any mapping. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(void *) RTR0MemObjAddress(RTR0MEMOBJ MemObj) +{ + /* Validate the object handle. */ + PRTR0MEMOBJINTERNAL pMem; + if (RT_UNLIKELY(MemObj == NIL_RTR0MEMOBJ)) + return NULL; + AssertPtrReturn(MemObj, NULL); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertMsgReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, ("%p: %#x\n", pMem, pMem->u32Magic), NULL); + AssertMsgReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, ("%p: %d\n", pMem, pMem->enmType), NULL); + + /* return the mapping address. */ + return pMem->pv; +} +RT_EXPORT_SYMBOL(RTR0MemObjAddress); + + +/** + * Gets the ring-3 address of a ring-0 memory object. + * + * This only applies to ring-0 memory object with ring-3 mappings of some kind, i.e. + * locked user memory, reserved user address space and user mappings. This API should + * not be used on any other objects. + * + * @returns The address of the memory object. + * @returns NIL_RTR3PTR if the handle is invalid or if it's not an object with a ring-3 mapping. + * Strict builds will assert in both cases. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(RTR3PTR) RTR0MemObjAddressR3(RTR0MEMOBJ MemObj) +{ + PRTR0MEMOBJINTERNAL pMem; + + /* Validate the object handle. */ + if (RT_UNLIKELY(MemObj == NIL_RTR0MEMOBJ)) + return NIL_RTR3PTR; + AssertPtrReturn(MemObj, NIL_RTR3PTR); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertMsgReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, ("%p: %#x\n", pMem, pMem->u32Magic), NIL_RTR3PTR); + AssertMsgReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, ("%p: %d\n", pMem, pMem->enmType), NIL_RTR3PTR); + if (RT_UNLIKELY( ( pMem->enmType != RTR0MEMOBJTYPE_MAPPING + || pMem->u.Mapping.R0Process == NIL_RTR0PROCESS) + && ( pMem->enmType != RTR0MEMOBJTYPE_LOCK + || pMem->u.Lock.R0Process == NIL_RTR0PROCESS) + && ( pMem->enmType != RTR0MEMOBJTYPE_PHYS_NC + || pMem->u.Lock.R0Process == NIL_RTR0PROCESS) + && ( pMem->enmType != RTR0MEMOBJTYPE_RES_VIRT + || pMem->u.ResVirt.R0Process == NIL_RTR0PROCESS))) + return NIL_RTR3PTR; + + /* return the mapping address. */ + return (RTR3PTR)pMem->pv; +} +RT_EXPORT_SYMBOL(RTR0MemObjAddressR3); + + +/** + * Gets the size of a ring-0 memory object. + * + * The returned value may differ from the one specified to the API creating the + * object because of alignment adjustments. The minimal alignment currently + * employed by any API is PAGE_SIZE, so the result can safely be shifted by + * PAGE_SHIFT to calculate a page count. + * + * @returns The object size. + * @returns 0 if the handle is invalid (asserts in strict builds) or if there isn't any mapping. + * @param MemObj The ring-0 memory object handle. + */ +RTR0DECL(size_t) RTR0MemObjSize(RTR0MEMOBJ MemObj) +{ + PRTR0MEMOBJINTERNAL pMem; + + /* Validate the object handle. */ + if (RT_UNLIKELY(MemObj == NIL_RTR0MEMOBJ)) + return 0; + AssertPtrReturn(MemObj, 0); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertMsgReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, ("%p: %#x\n", pMem, pMem->u32Magic), 0); + AssertMsgReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, ("%p: %d\n", pMem, pMem->enmType), 0); + AssertMsg(RT_ALIGN_Z(pMem->cb, PAGE_SIZE) == pMem->cb, ("%#zx\n", pMem->cb)); + + /* return the size. */ + return pMem->cb; +} +RT_EXPORT_SYMBOL(RTR0MemObjSize); + + +/** + * Get the physical address of an page in the memory object. + * + * @returns The physical address. + * @returns NIL_RTHCPHYS if the object doesn't contain fixed physical pages. + * @returns NIL_RTHCPHYS if the iPage is out of range. + * @returns NIL_RTHCPHYS if the object handle isn't valid. + * @param MemObj The ring-0 memory object handle. + * @param iPage The page number within the object. + */ +/* Work around gcc bug 55940 */ +#if defined(__GNUC__) && defined(RT_ARCH_X86) && (__GNUC__ * 100 + __GNUC_MINOR__) == 407 + __attribute__((__optimize__ ("no-shrink-wrap"))) +#endif +RTR0DECL(RTHCPHYS) RTR0MemObjGetPagePhysAddr(RTR0MEMOBJ MemObj, size_t iPage) +{ + /* Validate the object handle. */ + PRTR0MEMOBJINTERNAL pMem; + size_t cPages; + AssertPtrReturn(MemObj, NIL_RTHCPHYS); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, NIL_RTHCPHYS); + AssertReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, NIL_RTHCPHYS); + AssertMsgReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, ("%p: %#x\n", pMem, pMem->u32Magic), NIL_RTHCPHYS); + AssertMsgReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, ("%p: %d\n", pMem, pMem->enmType), NIL_RTHCPHYS); + cPages = (pMem->cb >> PAGE_SHIFT); + if (iPage >= cPages) + { + /* permit: while (RTR0MemObjGetPagePhysAddr(pMem, iPage++) != NIL_RTHCPHYS) {} */ + if (iPage == cPages) + return NIL_RTHCPHYS; + AssertReturn(iPage < (pMem->cb >> PAGE_SHIFT), NIL_RTHCPHYS); + } + + /* + * We know the address of physically contiguous allocations and mappings. + */ + if (pMem->enmType == RTR0MEMOBJTYPE_CONT) + return pMem->u.Cont.Phys + iPage * PAGE_SIZE; + if (pMem->enmType == RTR0MEMOBJTYPE_PHYS) + return pMem->u.Phys.PhysBase + iPage * PAGE_SIZE; + + /* + * Do the job. + */ + return rtR0MemObjNativeGetPagePhysAddr(pMem, iPage); +} +RT_EXPORT_SYMBOL(RTR0MemObjGetPagePhysAddr); + + +/** + * Frees a ring-0 memory object. + * + * @returns IPRT status code. + * @retval VERR_INVALID_HANDLE if + * @param MemObj The ring-0 memory object to be freed. NULL is accepted. + * @param fFreeMappings Whether or not to free mappings of the object. + */ +RTR0DECL(int) RTR0MemObjFree(RTR0MEMOBJ MemObj, bool fFreeMappings) +{ + /* + * Validate the object handle. + */ + PRTR0MEMOBJINTERNAL pMem; + int rc; + + if (MemObj == NIL_RTR0MEMOBJ) + return VINF_SUCCESS; + AssertPtrReturn(MemObj, VERR_INVALID_HANDLE); + pMem = (PRTR0MEMOBJINTERNAL)MemObj; + AssertReturn(pMem->u32Magic == RTR0MEMOBJ_MAGIC, VERR_INVALID_HANDLE); + AssertReturn(pMem->enmType > RTR0MEMOBJTYPE_INVALID && pMem->enmType < RTR0MEMOBJTYPE_END, VERR_INVALID_HANDLE); + RT_ASSERT_PREEMPTIBLE(); + + /* + * Deal with mappings according to fFreeMappings. + */ + if ( !rtR0MemObjIsMapping(pMem) + && pMem->uRel.Parent.cMappings > 0) + { + /* fail if not requested to free mappings. */ + if (!fFreeMappings) + return VERR_MEMORY_BUSY; + + while (pMem->uRel.Parent.cMappings > 0) + { + PRTR0MEMOBJINTERNAL pChild = pMem->uRel.Parent.papMappings[--pMem->uRel.Parent.cMappings]; + pMem->uRel.Parent.papMappings[pMem->uRel.Parent.cMappings] = NULL; + + /* sanity checks. */ + AssertPtr(pChild); + AssertFatal(pChild->u32Magic == RTR0MEMOBJ_MAGIC); + AssertFatal(pChild->enmType > RTR0MEMOBJTYPE_INVALID && pChild->enmType < RTR0MEMOBJTYPE_END); + AssertFatal(rtR0MemObjIsMapping(pChild)); + + /* free the mapping. */ + rc = rtR0MemObjNativeFree(pChild); + if (RT_FAILURE(rc)) + { + Log(("RTR0MemObjFree: failed to free mapping %p: %p %#zx; rc=%Rrc\n", pChild, pChild->pv, pChild->cb, rc)); + pMem->uRel.Parent.papMappings[pMem->uRel.Parent.cMappings++] = pChild; + return rc; + } + } + } + + /* + * Free this object. + */ + rc = rtR0MemObjNativeFree(pMem); + if (RT_SUCCESS(rc)) + { + /* + * Ok, it was freed just fine. Now, if it's a mapping we'll have to remove it from the parent. + */ + if (rtR0MemObjIsMapping(pMem)) + { + PRTR0MEMOBJINTERNAL pParent = pMem->uRel.Child.pParent; + uint32_t i; + + /* sanity checks */ + AssertPtr(pParent); + AssertFatal(pParent->u32Magic == RTR0MEMOBJ_MAGIC); + AssertFatal(pParent->enmType > RTR0MEMOBJTYPE_INVALID && pParent->enmType < RTR0MEMOBJTYPE_END); + AssertFatal(!rtR0MemObjIsMapping(pParent)); + AssertFatal(pParent->uRel.Parent.cMappings > 0); + AssertPtr(pParent->uRel.Parent.papMappings); + + /* locate and remove from the array of mappings. */ + i = pParent->uRel.Parent.cMappings; + while (i-- > 0) + { + if (pParent->uRel.Parent.papMappings[i] == pMem) + { + pParent->uRel.Parent.papMappings[i] = pParent->uRel.Parent.papMappings[--pParent->uRel.Parent.cMappings]; + break; + } + } + Assert(i != UINT32_MAX); + } + else + Assert(pMem->uRel.Parent.cMappings == 0); + + /* + * Finally, destroy the handle. + */ + pMem->u32Magic++; + pMem->enmType = RTR0MEMOBJTYPE_END; + if (!rtR0MemObjIsMapping(pMem)) + RTMemFree(pMem->uRel.Parent.papMappings); + RTMemFree(pMem); + } + else + Log(("RTR0MemObjFree: failed to free %p: %d %p %#zx; rc=%Rrc\n", + pMem, pMem->enmType, pMem->pv, pMem->cb, rc)); + return rc; +} +RT_EXPORT_SYMBOL(RTR0MemObjFree); + + + +RTR0DECL(int) RTR0MemObjAllocPageTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocPage(pMemObj, cbAligned, fExecutable); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocPageTag); + + +RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocLow(pMemObj, cbAligned, fExecutable); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocLowTag); + + +RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocCont(pMemObj, cbAligned, fExecutable); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocContTag); + + +RTR0DECL(int) RTR0MemObjLockUserTag(PRTR0MEMOBJ pMemObj, RTR3PTR R3Ptr, size_t cb, + uint32_t fAccess, RTR0PROCESS R0Process, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb + (R3Ptr & PAGE_OFFSET_MASK), PAGE_SIZE); + RTR3PTR const R3PtrAligned = (R3Ptr & ~(RTR3PTR)PAGE_OFFSET_MASK); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + if (R0Process == NIL_RTR0PROCESS) + R0Process = RTR0ProcHandleSelf(); + AssertReturn(!(fAccess & ~(RTMEM_PROT_READ | RTMEM_PROT_WRITE)), VERR_INVALID_PARAMETER); + AssertReturn(fAccess, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the locking. */ + return rtR0MemObjNativeLockUser(pMemObj, R3PtrAligned, cbAligned, fAccess, R0Process); +} +RT_EXPORT_SYMBOL(RTR0MemObjLockUserTag); + + +RTR0DECL(int) RTR0MemObjLockKernelTag(PRTR0MEMOBJ pMemObj, void *pv, size_t cb, uint32_t fAccess, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb + ((uintptr_t)pv & PAGE_OFFSET_MASK), PAGE_SIZE); + void * const pvAligned = (void *)((uintptr_t)pv & ~(uintptr_t)PAGE_OFFSET_MASK); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + AssertPtrReturn(pvAligned, VERR_INVALID_POINTER); + AssertReturn(!(fAccess & ~(RTMEM_PROT_READ | RTMEM_PROT_WRITE)), VERR_INVALID_PARAMETER); + AssertReturn(fAccess, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeLockKernel(pMemObj, pvAligned, cbAligned, fAccess); +} +RT_EXPORT_SYMBOL(RTR0MemObjLockKernelTag); + + +RTR0DECL(int) RTR0MemObjAllocPhysTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + AssertReturn(PhysHighest >= cb, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocPhys(pMemObj, cbAligned, PhysHighest, PAGE_SIZE /* page aligned */); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocPhysTag); + + +RTR0DECL(int) RTR0MemObjAllocPhysExTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + AssertReturn(PhysHighest >= cb, VERR_INVALID_PARAMETER); + if (uAlignment == 0) + uAlignment = PAGE_SIZE; + AssertReturn( uAlignment == PAGE_SIZE + || uAlignment == _2M + || uAlignment == _4M + || uAlignment == _1G, + VERR_INVALID_PARAMETER); +#if HC_ARCH_BITS == 32 + /* Memory allocated in this way is typically mapped into kernel space as well; simply + don't allow this on 32 bits hosts as the kernel space is too crowded already. */ + if (uAlignment != PAGE_SIZE) + return VERR_NOT_SUPPORTED; +#endif + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocPhys(pMemObj, cbAligned, PhysHighest, uAlignment); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocPhysExTag); + + +RTR0DECL(int) RTR0MemObjAllocPhysNCTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + AssertReturn(PhysHighest >= cb, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeAllocPhysNC(pMemObj, cbAligned, PhysHighest); +} +RT_EXPORT_SYMBOL(RTR0MemObjAllocPhysNCTag); + + +RTR0DECL(int) RTR0MemObjEnterPhysTag(PRTR0MEMOBJ pMemObj, RTHCPHYS Phys, size_t cb, uint32_t uCachePolicy, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb + (Phys & PAGE_OFFSET_MASK), PAGE_SIZE); + const RTHCPHYS PhysAligned = Phys & ~(RTHCPHYS)PAGE_OFFSET_MASK; + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + AssertReturn(Phys != NIL_RTHCPHYS, VERR_INVALID_PARAMETER); + AssertReturn( uCachePolicy == RTMEM_CACHE_POLICY_DONT_CARE + || uCachePolicy == RTMEM_CACHE_POLICY_MMIO, + VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the allocation. */ + return rtR0MemObjNativeEnterPhys(pMemObj, PhysAligned, cbAligned, uCachePolicy); +} +RT_EXPORT_SYMBOL(RTR0MemObjEnterPhysTag); + + +RTR0DECL(int) RTR0MemObjReserveKernelTag(PRTR0MEMOBJ pMemObj, void *pvFixed, size_t cb, size_t uAlignment, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + if (uAlignment == 0) + uAlignment = PAGE_SIZE; + AssertReturn(uAlignment == PAGE_SIZE || uAlignment == _2M || uAlignment == _4M, VERR_INVALID_PARAMETER); + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + if (pvFixed != (void *)-1) + AssertReturn(!((uintptr_t)pvFixed & (uAlignment - 1)), VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the reservation. */ + return rtR0MemObjNativeReserveKernel(pMemObj, pvFixed, cbAligned, uAlignment); +} +RT_EXPORT_SYMBOL(RTR0MemObjReserveKernelTag); + + +RTR0DECL(int) RTR0MemObjReserveUserTag(PRTR0MEMOBJ pMemObj, RTR3PTR R3PtrFixed, size_t cb, + size_t uAlignment, RTR0PROCESS R0Process, const char *pszTag) +{ + /* sanity checks. */ + const size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE); + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + if (uAlignment == 0) + uAlignment = PAGE_SIZE; + AssertReturn(uAlignment == PAGE_SIZE || uAlignment == _2M || uAlignment == _4M, VERR_INVALID_PARAMETER); + AssertReturn(cb > 0, VERR_INVALID_PARAMETER); + AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); + if (R3PtrFixed != (RTR3PTR)-1) + AssertReturn(!(R3PtrFixed & (uAlignment - 1)), VERR_INVALID_PARAMETER); + if (R0Process == NIL_RTR0PROCESS) + R0Process = RTR0ProcHandleSelf(); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the reservation. */ + return rtR0MemObjNativeReserveUser(pMemObj, R3PtrFixed, cbAligned, uAlignment, R0Process); +} +RT_EXPORT_SYMBOL(RTR0MemObjReserveUserTag); + + +RTR0DECL(int) RTR0MemObjMapKernelTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, void *pvFixed, + size_t uAlignment, unsigned fProt, const char *pszTag) +{ + return RTR0MemObjMapKernelExTag(pMemObj, MemObjToMap, pvFixed, uAlignment, fProt, 0, 0, pszTag); +} +RT_EXPORT_SYMBOL(RTR0MemObjMapKernelTag); + + +RTR0DECL(int) RTR0MemObjMapKernelExTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, void *pvFixed, size_t uAlignment, + unsigned fProt, size_t offSub, size_t cbSub, const char *pszTag) +{ + PRTR0MEMOBJINTERNAL pMemToMap; + PRTR0MEMOBJINTERNAL pNew; + int rc; + + /* sanity checks. */ + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + *pMemObj = NIL_RTR0MEMOBJ; + AssertPtrReturn(MemObjToMap, VERR_INVALID_HANDLE); + pMemToMap = (PRTR0MEMOBJINTERNAL)MemObjToMap; + AssertReturn(pMemToMap->u32Magic == RTR0MEMOBJ_MAGIC, VERR_INVALID_HANDLE); + AssertReturn(pMemToMap->enmType > RTR0MEMOBJTYPE_INVALID && pMemToMap->enmType < RTR0MEMOBJTYPE_END, VERR_INVALID_HANDLE); + AssertReturn(!rtR0MemObjIsMapping(pMemToMap), VERR_INVALID_PARAMETER); + AssertReturn(pMemToMap->enmType != RTR0MEMOBJTYPE_RES_VIRT, VERR_INVALID_PARAMETER); + if (uAlignment == 0) + uAlignment = PAGE_SIZE; + AssertReturn(uAlignment == PAGE_SIZE || uAlignment == _2M || uAlignment == _4M, VERR_INVALID_PARAMETER); + if (pvFixed != (void *)-1) + AssertReturn(!((uintptr_t)pvFixed & (uAlignment - 1)), VERR_INVALID_PARAMETER); + AssertReturn(fProt != RTMEM_PROT_NONE, VERR_INVALID_PARAMETER); + AssertReturn(!(fProt & ~(RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC)), VERR_INVALID_PARAMETER); + AssertReturn(!(offSub & PAGE_OFFSET_MASK), VERR_INVALID_PARAMETER); + AssertReturn(offSub < pMemToMap->cb, VERR_INVALID_PARAMETER); + AssertReturn(!(cbSub & PAGE_OFFSET_MASK), VERR_INVALID_PARAMETER); + AssertReturn(cbSub <= pMemToMap->cb, VERR_INVALID_PARAMETER); + AssertReturn((!offSub && !cbSub) || (offSub + cbSub) <= pMemToMap->cb, VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* adjust the request to simplify the native code. */ + if (offSub == 0 && cbSub == pMemToMap->cb) + cbSub = 0; + + /* do the mapping. */ + rc = rtR0MemObjNativeMapKernel(&pNew, pMemToMap, pvFixed, uAlignment, fProt, offSub, cbSub); + if (RT_SUCCESS(rc)) + { + /* link it. */ + rc = rtR0MemObjLink(pMemToMap, pNew); + if (RT_SUCCESS(rc)) + *pMemObj = pNew; + else + { + /* damn, out of memory. bail out. */ + int rc2 = rtR0MemObjNativeFree(pNew); + AssertRC(rc2); + pNew->u32Magic++; + pNew->enmType = RTR0MEMOBJTYPE_END; + RTMemFree(pNew); + } + } + + return rc; +} +RT_EXPORT_SYMBOL(RTR0MemObjMapKernelExTag); + + +RTR0DECL(int) RTR0MemObjMapUserTag(PRTR0MEMOBJ pMemObj, RTR0MEMOBJ MemObjToMap, RTR3PTR R3PtrFixed, + size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process, const char *pszTag) +{ + /* sanity checks. */ + PRTR0MEMOBJINTERNAL pMemToMap; + PRTR0MEMOBJINTERNAL pNew; + int rc; + AssertPtrReturn(pMemObj, VERR_INVALID_POINTER); + pMemToMap = (PRTR0MEMOBJINTERNAL)MemObjToMap; + *pMemObj = NIL_RTR0MEMOBJ; + AssertPtrReturn(MemObjToMap, VERR_INVALID_HANDLE); + AssertReturn(pMemToMap->u32Magic == RTR0MEMOBJ_MAGIC, VERR_INVALID_HANDLE); + AssertReturn(pMemToMap->enmType > RTR0MEMOBJTYPE_INVALID && pMemToMap->enmType < RTR0MEMOBJTYPE_END, VERR_INVALID_HANDLE); + AssertReturn(!rtR0MemObjIsMapping(pMemToMap), VERR_INVALID_PARAMETER); + AssertReturn(pMemToMap->enmType != RTR0MEMOBJTYPE_RES_VIRT, VERR_INVALID_PARAMETER); + if (uAlignment == 0) + uAlignment = PAGE_SIZE; + AssertReturn(uAlignment == PAGE_SIZE || uAlignment == _2M || uAlignment == _4M, VERR_INVALID_PARAMETER); + if (R3PtrFixed != (RTR3PTR)-1) + AssertReturn(!(R3PtrFixed & (uAlignment - 1)), VERR_INVALID_PARAMETER); + AssertReturn(fProt != RTMEM_PROT_NONE, VERR_INVALID_PARAMETER); + AssertReturn(!(fProt & ~(RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC)), VERR_INVALID_PARAMETER); + if (R0Process == NIL_RTR0PROCESS) + R0Process = RTR0ProcHandleSelf(); + RT_ASSERT_PREEMPTIBLE(); + + RT_NOREF_PV(pszTag); + + /* do the mapping. */ + rc = rtR0MemObjNativeMapUser(&pNew, pMemToMap, R3PtrFixed, uAlignment, fProt, R0Process); + if (RT_SUCCESS(rc)) + { + /* link it. */ + rc = rtR0MemObjLink(pMemToMap, pNew); + if (RT_SUCCESS(rc)) + *pMemObj = pNew; + else + { + /* damn, out of memory. bail out. */ + int rc2 = rtR0MemObjNativeFree(pNew); + AssertRC(rc2); + pNew->u32Magic++; + pNew->enmType = RTR0MEMOBJTYPE_END; + RTMemFree(pNew); + } + } + + return rc; +} +RT_EXPORT_SYMBOL(RTR0MemObjMapUserTag); + + +RTR0DECL(int) RTR0MemObjProtect(RTR0MEMOBJ hMemObj, size_t offSub, size_t cbSub, uint32_t fProt) +{ + PRTR0MEMOBJINTERNAL pMemObj; + int rc; + + /* sanity checks. */ + pMemObj = (PRTR0MEMOBJINTERNAL)hMemObj; + AssertPtrReturn(pMemObj, VERR_INVALID_HANDLE); + AssertReturn(pMemObj->u32Magic == RTR0MEMOBJ_MAGIC, VERR_INVALID_HANDLE); + AssertReturn(pMemObj->enmType > RTR0MEMOBJTYPE_INVALID && pMemObj->enmType < RTR0MEMOBJTYPE_END, VERR_INVALID_HANDLE); + AssertReturn(rtR0MemObjIsProtectable(pMemObj), VERR_INVALID_PARAMETER); + AssertReturn(!(offSub & PAGE_OFFSET_MASK), VERR_INVALID_PARAMETER); + AssertReturn(offSub < pMemObj->cb, VERR_INVALID_PARAMETER); + AssertReturn(!(cbSub & PAGE_OFFSET_MASK), VERR_INVALID_PARAMETER); + AssertReturn(cbSub <= pMemObj->cb, VERR_INVALID_PARAMETER); + AssertReturn(offSub + cbSub <= pMemObj->cb, VERR_INVALID_PARAMETER); + AssertReturn(!(fProt & ~(RTMEM_PROT_NONE | RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC)), VERR_INVALID_PARAMETER); + RT_ASSERT_PREEMPTIBLE(); + + /* do the job */ + rc = rtR0MemObjNativeProtect(pMemObj, offSub, cbSub, fProt); + if (RT_SUCCESS(rc)) + pMemObj->fFlags |= RTR0MEMOBJ_FLAGS_PROT_CHANGED; /* record it */ + + return rc; +} +RT_EXPORT_SYMBOL(RTR0MemObjProtect); + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/mp-r0drv.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/mp-r0drv.h @@ -0,0 +1,82 @@ +/* $Id: mp-r0drv.h $ */ +/** @file + * IPRT - Multiprocessor, Ring-0 Driver, Internal Header. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___r0drv_mp_r0drv_h +#define ___r0drv_mp_r0drv_h + +#include + +RT_C_DECLS_BEGIN + +/** + * MP callback + * + * @param idCpu CPU id + * @param pvUser1 The first user argument. + * @param pvUser2 The second user argument. + */ +typedef DECLCALLBACK(void) FNMPWORKER(RTCPUID idCpu, void *pvUser1, void *pvUser2); +/** Pointer to a FNMPWORKER(). */ +typedef FNMPWORKER *PFNMPWORKER; + +/** + * RTMpOn* argument packet used by the host specific callback + * wrapper functions. + */ +typedef struct RTMPARGS +{ + PFNMPWORKER pfnWorker; + void *pvUser1; + void *pvUser2; + RTCPUID idCpu; + RTCPUID idCpu2; + uint32_t volatile cHits; +#ifdef RT_OS_WINDOWS + /** Turns out that KeFlushQueuedDpcs doesn't necessarily wait till all + * callbacks are done. So, do reference counting to make sure we don't free + * this structure befor all CPUs have completely handled their requests. */ + int32_t volatile cRefs; +#endif +#ifdef RT_OS_LINUX + PRTCPUSET pWorkerSet; +#endif +} RTMPARGS; +/** Pointer to a RTMpOn* argument packet. */ +typedef RTMPARGS *PRTMPARGS; + +/* Called from initterm-r0drv.cpp: */ +DECLHIDDEN(int) rtR0MpNotificationInit(void); +DECLHIDDEN(void) rtR0MpNotificationTerm(void); + +/* The following is only relevant when using mpnotifcation-r0drv.cpp: */ +DECLHIDDEN(int) rtR0MpNotificationNativeInit(void); +DECLHIDDEN(void) rtR0MpNotificationNativeTerm(void); +DECLHIDDEN(void) rtMpNotificationDoCallbacks(RTMPEVENT enmEvent, RTCPUID idCpu); + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/mpnotification-r0drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/mpnotification-r0drv.c @@ -0,0 +1,322 @@ +/* $Id: mpnotification-r0drv.c $ */ +/** @file + * IPRT - Multiprocessor, Ring-0 Driver, Event Notifications. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# include +#endif +#include +#include +#include +#include +#include +#include +#include "r0drv/mp-r0drv.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Notification registration record tracking + * RTMpRegisterNotification() calls. + */ +typedef struct RTMPNOTIFYREG +{ + /** Pointer to the next record. */ + struct RTMPNOTIFYREG * volatile pNext; + /** The callback. */ + PFNRTMPNOTIFICATION pfnCallback; + /** The user argument. */ + void *pvUser; + /** Bit mask indicating whether we've done this callback or not. */ + uint8_t bmDone[sizeof(void *)]; +} RTMPNOTIFYREG; +/** Pointer to a registration record. */ +typedef RTMPNOTIFYREG *PRTMPNOTIFYREG; + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The spinlock protecting the list. */ +static RTSPINLOCK volatile g_hRTMpNotifySpinLock = NIL_RTSPINLOCK; +/** List of callbacks, in registration order. */ +static PRTMPNOTIFYREG volatile g_pRTMpCallbackHead = NULL; +/** The current done bit. */ +static uint32_t volatile g_iRTMpDoneBit; +/** The list generation. + * This is increased whenever the list has been modified. The callback routine + * make use of this to avoid having restart at the list head after each callback. */ +static uint32_t volatile g_iRTMpGeneration; + + + + +/** + * This is called by the native code. + * + * @param idCpu The CPU id the event applies to. + * @param enmEvent The event. + */ +DECLHIDDEN(void) rtMpNotificationDoCallbacks(RTMPEVENT enmEvent, RTCPUID idCpu) +{ + PRTMPNOTIFYREG pCur; + RTSPINLOCK hSpinlock; + + /* + * This is a little bit tricky as we cannot be holding the spinlock + * while calling the callback. This means that the list might change + * while we're walking it, and that multiple events might be running + * concurrently (depending on the OS). + * + * So, the first measure is to employ a 32-bitmask for each + * record where we'll use a bit that rotates for each call to + * this function to indicate which records that has been + * processed. This will take care of both changes to the list + * and a reasonable amount of concurrent events. + * + * In order to avoid having to restart the list walks for every + * callback we make, we'll make use a list generation number that is + * incremented everytime the list is changed. So, if it remains + * unchanged over a callback we can safely continue the iteration. + */ + uint32_t iDone = ASMAtomicIncU32(&g_iRTMpDoneBit); + iDone %= RT_SIZEOFMEMB(RTMPNOTIFYREG, bmDone) * 8; + + hSpinlock = g_hRTMpNotifySpinLock; + if (hSpinlock == NIL_RTSPINLOCK) + return; + RTSpinlockAcquire(hSpinlock); + + /* Clear the bit. */ + for (pCur = g_pRTMpCallbackHead; pCur; pCur = pCur->pNext) + ASMAtomicBitClear(&pCur->bmDone[0], iDone); + + /* Iterate the records and perform the callbacks. */ + do + { + uint32_t const iGeneration = ASMAtomicUoReadU32(&g_iRTMpGeneration); + + pCur = g_pRTMpCallbackHead; + while (pCur) + { + if (!ASMAtomicBitTestAndSet(&pCur->bmDone[0], iDone)) + { + PFNRTMPNOTIFICATION pfnCallback = pCur->pfnCallback; + void *pvUser = pCur->pvUser; + pCur = pCur->pNext; + RTSpinlockRelease(g_hRTMpNotifySpinLock); + + pfnCallback(enmEvent, idCpu, pvUser); + + /* carefully require the lock here, see RTR0MpNotificationTerm(). */ + hSpinlock = g_hRTMpNotifySpinLock; + if (hSpinlock == NIL_RTSPINLOCK) + return; + RTSpinlockAcquire(hSpinlock); + if (ASMAtomicUoReadU32(&g_iRTMpGeneration) != iGeneration) + break; + } + else + pCur = pCur->pNext; + } + } while (pCur); + + RTSpinlockRelease(hSpinlock); +} + + + +RTDECL(int) RTMpNotificationRegister(PFNRTMPNOTIFICATION pfnCallback, void *pvUser) +{ + PRTMPNOTIFYREG pCur; + PRTMPNOTIFYREG pNew; + + /* + * Validation. + */ + AssertPtrReturn(pfnCallback, VERR_INVALID_POINTER); + AssertReturn(g_hRTMpNotifySpinLock != NIL_RTSPINLOCK, VERR_WRONG_ORDER); + RT_ASSERT_PREEMPTIBLE(); + + RTSpinlockAcquire(g_hRTMpNotifySpinLock); + for (pCur = g_pRTMpCallbackHead; pCur; pCur = pCur->pNext) + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + RTSpinlockRelease(g_hRTMpNotifySpinLock); + AssertMsgReturn(!pCur, ("pCur=%p pfnCallback=%p pvUser=%p\n", pCur, pfnCallback, pvUser), VERR_ALREADY_EXISTS); + + /* + * Allocate a new record and attempt to insert it. + */ + pNew = (PRTMPNOTIFYREG)RTMemAlloc(sizeof(*pNew)); + if (!pNew) + return VERR_NO_MEMORY; + + pNew->pNext = NULL; + pNew->pfnCallback = pfnCallback; + pNew->pvUser = pvUser; + memset(&pNew->bmDone[0], 0xff, sizeof(pNew->bmDone)); + + RTSpinlockAcquire(g_hRTMpNotifySpinLock); + + pCur = g_pRTMpCallbackHead; + if (!pCur) + g_pRTMpCallbackHead = pNew; + else + { + for (pCur = g_pRTMpCallbackHead; ; pCur = pCur->pNext) + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + else if (!pCur->pNext) + { + pCur->pNext = pNew; + pCur = NULL; + break; + } + } + + ASMAtomicIncU32(&g_iRTMpGeneration); + + RTSpinlockRelease(g_hRTMpNotifySpinLock); + + /* duplicate? */ + if (pCur) + { + RTMemFree(pCur); + AssertMsgFailedReturn(("pCur=%p pfnCallback=%p pvUser=%p\n", pCur, pfnCallback, pvUser), VERR_ALREADY_EXISTS); + } + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTMpNotificationRegister); + + +RTDECL(int) RTMpNotificationDeregister(PFNRTMPNOTIFICATION pfnCallback, void *pvUser) +{ + PRTMPNOTIFYREG pPrev; + PRTMPNOTIFYREG pCur; + + /* + * Validation. + */ + AssertPtrReturn(pfnCallback, VERR_INVALID_POINTER); + AssertReturn(g_hRTMpNotifySpinLock != NIL_RTSPINLOCK, VERR_WRONG_ORDER); + RT_ASSERT_INTS_ON(); + + /* + * Find and unlink the record from the list. + */ + RTSpinlockAcquire(g_hRTMpNotifySpinLock); + pPrev = NULL; + for (pCur = g_pRTMpCallbackHead; pCur; pCur = pCur->pNext) + { + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + pPrev = pCur; + } + if (pCur) + { + if (pPrev) + pPrev->pNext = pCur->pNext; + else + g_pRTMpCallbackHead = pCur->pNext; + ASMAtomicIncU32(&g_iRTMpGeneration); + } + RTSpinlockRelease(g_hRTMpNotifySpinLock); + + if (!pCur) + return VERR_NOT_FOUND; + + /* + * Invalidate and free the record. + */ + pCur->pNext = NULL; + pCur->pfnCallback = NULL; + RTMemFree(pCur); + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTMpNotificationDeregister); + + +DECLHIDDEN(int) rtR0MpNotificationInit(void) +{ + int rc = RTSpinlockCreate((PRTSPINLOCK)&g_hRTMpNotifySpinLock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "RTR0Mp"); + if (RT_SUCCESS(rc)) + { + rc = rtR0MpNotificationNativeInit(); + if (RT_SUCCESS(rc)) + return rc; + + RTSpinlockDestroy(g_hRTMpNotifySpinLock); + g_hRTMpNotifySpinLock = NIL_RTSPINLOCK; + } + return rc; +} + + +DECLHIDDEN(void) rtR0MpNotificationTerm(void) +{ + PRTMPNOTIFYREG pHead; + RTSPINLOCK hSpinlock = g_hRTMpNotifySpinLock; + AssertReturnVoid(hSpinlock != NIL_RTSPINLOCK); + + rtR0MpNotificationNativeTerm(); + + /* pick up the list and the spinlock. */ + RTSpinlockAcquire(hSpinlock); + ASMAtomicWriteHandle(&g_hRTMpNotifySpinLock, NIL_RTSPINLOCK); + pHead = g_pRTMpCallbackHead; + g_pRTMpCallbackHead = NULL; + ASMAtomicIncU32(&g_iRTMpGeneration); + RTSpinlockRelease(hSpinlock); + + /* free the list. */ + while (pHead) + { + PRTMPNOTIFYREG pFree = pHead; + pHead = pHead->pNext; + + pFree->pNext = NULL; + pFree->pfnCallback = NULL; + RTMemFree(pFree); + } + + RTSpinlockDestroy(hSpinlock); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/power-r0drv.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/power-r0drv.h @@ -0,0 +1,41 @@ +/* $Id: power-r0drv.h $ */ +/** @file + * IPRT - Power Management, Ring-0 Driver, Internal Header. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___r0drv_powermgt_r0drv_h +#define ___r0drv_powermgt_r0drv_h + +#include + +RT_C_DECLS_BEGIN + +/* Called from initterm-r0drv.cpp: */ +DECLHIDDEN(int) rtR0PowerNotificationInit(void); +DECLHIDDEN(void) rtR0PowerNotificationTerm(void); + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/r0drv/powernotification-r0drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/r0drv/powernotification-r0drv.c @@ -0,0 +1,318 @@ +/* $Id: powernotification-r0drv.c $ */ +/** @file + * IPRT - Power Management, Ring-0 Driver, Event Notifications. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include +#include "internal/iprt.h" + +#include +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# include +#endif +#include +#include +#include +#include +#include +#include +#include "r0drv/mp-r0drv.h" +#include "r0drv/power-r0drv.h" + + +/********************************************************************************************************************************* +* Structures and Typedefs * +*********************************************************************************************************************************/ +/** + * Notification registration record tracking + * RTPowerRegisterNotification() calls. + */ +typedef struct RTPOWERNOTIFYREG +{ + /** Pointer to the next record. */ + struct RTPOWERNOTIFYREG * volatile pNext; + /** The callback. */ + PFNRTPOWERNOTIFICATION pfnCallback; + /** The user argument. */ + void *pvUser; + /** Bit mask indicating whether we've done this callback or not. */ + uint8_t bmDone[sizeof(void *)]; +} RTPOWERNOTIFYREG; +/** Pointer to a registration record. */ +typedef RTPOWERNOTIFYREG *PRTPOWERNOTIFYREG; + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** The spinlock protecting the list. */ +static RTSPINLOCK volatile g_hRTPowerNotifySpinLock = NIL_RTSPINLOCK; +/** List of callbacks, in registration order. */ +static PRTPOWERNOTIFYREG volatile g_pRTPowerCallbackHead = NULL; +/** The current done bit. */ +static uint32_t volatile g_iRTPowerDoneBit; +/** The list generation. + * This is increased whenever the list has been modified. The callback routine + * make use of this to avoid having restart at the list head after each callback. */ +static uint32_t volatile g_iRTPowerGeneration; + + + + +RTDECL(int) RTPowerSignalEvent(RTPOWEREVENT enmEvent) +{ + PRTPOWERNOTIFYREG pCur; + RTSPINLOCK hSpinlock; + + /* + * This is a little bit tricky as we cannot be holding the spinlock + * while calling the callback. This means that the list might change + * while we're walking it, and that multiple events might be running + * concurrently (depending on the OS). + * + * So, the first measure is to employ a 32-bitmask for each + * record where we'll use a bit that rotates for each call to + * this function to indicate which records that has been + * processed. This will take care of both changes to the list + * and a reasonable amount of concurrent events. + * + * In order to avoid having to restart the list walks for every + * callback we make, we'll make use a list generation number that is + * incremented everytime the list is changed. So, if it remains + * unchanged over a callback we can safely continue the iteration. + */ + uint32_t iDone = ASMAtomicIncU32(&g_iRTPowerDoneBit); + iDone %= RT_SIZEOFMEMB(RTPOWERNOTIFYREG, bmDone) * 8; + + hSpinlock = g_hRTPowerNotifySpinLock; + if (hSpinlock == NIL_RTSPINLOCK) + return VERR_ACCESS_DENIED; + RTSpinlockAcquire(hSpinlock); + + /* Clear the bit. */ + for (pCur = g_pRTPowerCallbackHead; pCur; pCur = pCur->pNext) + ASMAtomicBitClear(&pCur->bmDone[0], iDone); + + /* Iterate the records and perform the callbacks. */ + do + { + uint32_t const iGeneration = ASMAtomicUoReadU32(&g_iRTPowerGeneration); + + pCur = g_pRTPowerCallbackHead; + while (pCur) + { + if (!ASMAtomicBitTestAndSet(&pCur->bmDone[0], iDone)) + { + PFNRTPOWERNOTIFICATION pfnCallback = pCur->pfnCallback; + void *pvUser = pCur->pvUser; + pCur = pCur->pNext; + RTSpinlockRelease(g_hRTPowerNotifySpinLock); + + pfnCallback(enmEvent, pvUser); + + /* carefully require the lock here, see RTR0MpNotificationTerm(). */ + hSpinlock = g_hRTPowerNotifySpinLock; + if (hSpinlock == NIL_RTSPINLOCK) + return VERR_ACCESS_DENIED; + RTSpinlockAcquire(hSpinlock); + if (ASMAtomicUoReadU32(&g_iRTPowerGeneration) != iGeneration) + break; + } + else + pCur = pCur->pNext; + } + } while (pCur); + + RTSpinlockRelease(hSpinlock); + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTPowerSignalEvent); + + +RTDECL(int) RTPowerNotificationRegister(PFNRTPOWERNOTIFICATION pfnCallback, void *pvUser) +{ + PRTPOWERNOTIFYREG pCur; + PRTPOWERNOTIFYREG pNew; + + /* + * Validation. + */ + AssertPtrReturn(pfnCallback, VERR_INVALID_POINTER); + AssertReturn(g_hRTPowerNotifySpinLock != NIL_RTSPINLOCK, VERR_WRONG_ORDER); + RT_ASSERT_PREEMPTIBLE(); + + RTSpinlockAcquire(g_hRTPowerNotifySpinLock); + for (pCur = g_pRTPowerCallbackHead; pCur; pCur = pCur->pNext) + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + RTSpinlockRelease(g_hRTPowerNotifySpinLock); + AssertMsgReturn(!pCur, ("pCur=%p pfnCallback=%p pvUser=%p\n", pCur, pfnCallback, pvUser), VERR_ALREADY_EXISTS); + + /* + * Allocate a new record and attempt to insert it. + */ + pNew = (PRTPOWERNOTIFYREG)RTMemAlloc(sizeof(*pNew)); + if (!pNew) + return VERR_NO_MEMORY; + + pNew->pNext = NULL; + pNew->pfnCallback = pfnCallback; + pNew->pvUser = pvUser; + memset(&pNew->bmDone[0], 0xff, sizeof(pNew->bmDone)); + + RTSpinlockAcquire(g_hRTPowerNotifySpinLock); + + pCur = g_pRTPowerCallbackHead; + if (!pCur) + g_pRTPowerCallbackHead = pNew; + else + { + for (pCur = g_pRTPowerCallbackHead; ; pCur = pCur->pNext) + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + else if (!pCur->pNext) + { + pCur->pNext = pNew; + pCur = NULL; + break; + } + } + + ASMAtomicIncU32(&g_iRTPowerGeneration); + + RTSpinlockRelease(g_hRTPowerNotifySpinLock); + + /* duplicate? */ + if (pCur) + { + RTMemFree(pCur); + AssertMsgFailedReturn(("pCur=%p pfnCallback=%p pvUser=%p\n", pCur, pfnCallback, pvUser), VERR_ALREADY_EXISTS); + } + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTPowerNotificationRegister); + + +RTDECL(int) RTPowerNotificationDeregister(PFNRTPOWERNOTIFICATION pfnCallback, void *pvUser) +{ + PRTPOWERNOTIFYREG pPrev; + PRTPOWERNOTIFYREG pCur; + + /* + * Validation. + */ + AssertPtrReturn(pfnCallback, VERR_INVALID_POINTER); + AssertReturn(g_hRTPowerNotifySpinLock != NIL_RTSPINLOCK, VERR_WRONG_ORDER); + RT_ASSERT_INTS_ON(); + + /* + * Find and unlink the record from the list. + */ + RTSpinlockAcquire(g_hRTPowerNotifySpinLock); + pPrev = NULL; + for (pCur = g_pRTPowerCallbackHead; pCur; pCur = pCur->pNext) + { + if ( pCur->pvUser == pvUser + && pCur->pfnCallback == pfnCallback) + break; + pPrev = pCur; + } + if (pCur) + { + if (pPrev) + pPrev->pNext = pCur->pNext; + else + g_pRTPowerCallbackHead = pCur->pNext; + ASMAtomicIncU32(&g_iRTPowerGeneration); + } + RTSpinlockRelease(g_hRTPowerNotifySpinLock); + + if (!pCur) + return VERR_NOT_FOUND; + + /* + * Invalidate and free the record. + */ + pCur->pNext = NULL; + pCur->pfnCallback = NULL; + RTMemFree(pCur); + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTPowerNotificationDeregister); + + +DECLHIDDEN(int) rtR0PowerNotificationInit(void) +{ + int rc = RTSpinlockCreate((PRTSPINLOCK)&g_hRTPowerNotifySpinLock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "RTR0Power"); + if (RT_SUCCESS(rc)) + { + /** @todo OS specific init here */ + return rc; +#if 0 + RTSpinlockDestroy(g_hRTPowerNotifySpinLock); + g_hRTPowerNotifySpinLock = NIL_RTSPINLOCK; +#endif + } + return rc; +} + + +DECLHIDDEN(void) rtR0PowerNotificationTerm(void) +{ + PRTPOWERNOTIFYREG pHead; + RTSPINLOCK hSpinlock = g_hRTPowerNotifySpinLock; + AssertReturnVoid(hSpinlock != NIL_RTSPINLOCK); + + /** @todo OS specific term here */ + + /* pick up the list and the spinlock. */ + RTSpinlockAcquire(hSpinlock); + ASMAtomicWriteHandle(&g_hRTPowerNotifySpinLock, NIL_RTSPINLOCK); + pHead = g_pRTPowerCallbackHead; + g_pRTPowerCallbackHead = NULL; + ASMAtomicIncU32(&g_iRTPowerGeneration); + RTSpinlockRelease(hSpinlock); + + /* free the list. */ + while (pHead) + { + PRTPOWERNOTIFYREG pFree = pHead; + pHead = pHead->pNext; + + pFree->pNext = NULL; + pFree->pfnCallback = NULL; + RTMemFree(pFree); + } + + RTSpinlockDestroy(hSpinlock); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/revision-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/revision-generated.h @@ -0,0 +1 @@ +#define VBOX_SVN_REV 120293 --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxguest/version-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxguest/version-generated.h @@ -0,0 +1,13 @@ +#ifndef ___version_generated_h___ +#define ___version_generated_h___ + +#define VBOX_VERSION_MAJOR 5 +#define VBOX_VERSION_MINOR 2 +#define VBOX_VERSION_BUILD 6 +#define VBOX_VERSION_STRING_RAW "5.2.6" +#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu" +#define VBOX_API_VERSION_STRING "5_2" + +#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/Makefile +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/Makefile @@ -0,0 +1,92 @@ +KBUILD_EXTMOD=${srctree}/ubuntu/vbox +# $Id: Makefile.module $ +## @file +# VirtualBox Guest Additions Module Makefile. +# +# (For 2.6.x this file must be 'Makefile'!) +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# Linux kbuild sets this to our source directory if we are called from there +obj ?= $(CURDIR) +include $(obj)/Makefile.include.header + +MOD_NAME = vboxsf +MOD_OBJS = \ + vfsmod.o \ + dirops.o \ + lnkops.o \ + regops.o \ + utils.o \ + VBoxGuestR0LibHGCM.o \ + VBoxGuestR0LibIdc.o \ + VBoxGuestR0LibIdc-unix.o \ + VBoxGuestR0LibSharedFolders.o +ifeq ($(BUILD_TARGET_ARCH),x86) +MOD_OBJS += \ + divdi3.o \ + moddi3.o \ + udivdi3.o \ + udivmoddi4.o \ + umoddi3.o \ + qdivrem.o +endif + +MOD_INCL = \ + $(addprefix -I$(KBUILD_EXTMOD),/ /include /r0drv/linux) \ + $(addprefix -I$(KBUILD_EXTMOD)/vboxsf,/ /include /r0drv/linux) + +ifneq ($(wildcard $(KBUILD_EXTMOD)/vboxsf),) + MANGLING := $(KBUILD_EXTMOD)/vboxsf/include/VBox/VBoxGuestMangling.h +else + MANGLING := $(KBUILD_EXTMOD)/include/VBox/VBoxGuestMangling.h +endif + +MOD_DEFS = -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 \ + -DIN_SUP_R0 -DVBOX -DVBOX_WITH_HGCM -DIN_MODULE -DIN_GUEST_R0 +# our module does not export any symbol +MOD_DEFS += -DRT_NO_EXPORT_SYMBOL +ifeq ($(BUILD_TARGET_ARCH),amd64) + MOD_DEFS += -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS +else + MOD_DEFS += -DRT_ARCH_X86 +endif + +ifeq ($(KERN_VERSION), 24) + MOD_CFLAGS = +else + MOD_CFLAGS = -Wno-declaration-after-statement -fshort-wchar -include $(MANGLING) -fno-pie + +# special hack for Fedora Core 6 2.6.18 (fc6), rhel5 2.6.18 (el5), +# ClarkConnect 4.3 (cc4) and ClarkConnect 5 (v5) + ifeq ($(KERNELRELEASE),) + MOD_EXTRA += $(foreach inc,$(KERN_INCL),\ + $(if $(wildcard $(inc)/linux/utsrelease.h),\ + $(if $(shell grep '"2.6.18.*fc6.*"' $(inc)/linux/utsrelease.h; \ + grep '"2.6.18.*el5.*"' $(inc)/linux/utsrelease.h; \ + grep '"2.6.18.*v5.*"' $(inc)/linux/utsrelease.h; \ + grep '"2.6.18.*cc4.*"' $(inc)/linux/utsrelease.h),\ + -DKERNEL_FC6,),)) + else + MOD_EXTRA += $(if $(shell echo "$(KERNELRELEASE)"|grep '2.6.18.*fc6.*';\ + echo "$(KERNELRELEASE)"|grep '2.6.18.*el5.*';\ + echo "$(KERNELRELEASE)"|grep '2.6.18.*v5.*';\ + echo "$(KERNELRELEASE)"|grep '2.6.18.*cc4.*'),\ + -DKERNEL_FC6,) + endif +endif + +MOD_CLEAN = . linux r0drv r0drv/linux + +include $(obj)/Makefile.include.footer --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/Makefile.include.footer +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/Makefile.include.footer @@ -0,0 +1,112 @@ +# $Id: Makefile.include.footer $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# See Makefile.include.header for details of how to use this. +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# override is required by the Debian guys +override MODULE = $(MOD_NAME) +OBJS = $(MOD_OBJS) + +KBUILD_VERBOSE ?= 1 +LINUX_VERBOSE = $(if $(KBUILD_VERBOSE),1,) + +# +# Compiler options +# +ifndef INCL + INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL)) + ifndef KBUILD_EXTMOD + KBUILD_EXTMOD := $(shell pwd) + endif + INCL += $(MOD_INCL) + export INCL +endif +KFLAGS := -D__KERNEL__ -DMODULE $(MOD_DEFS) +ifeq ($(BUILD_TYPE),debug) + KFLAGS += -DDEBUG -DDEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) -DDEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME)) +endif + +ifeq ($(KERN_VERSION), 24) +# +# 2.4 +# + +# Note: while 2.4 kernels could also do "proper" builds from kbuild, the make +# script needed to support it was somewhat different from 2.6. Since this +# script works and 2.4 is not a moving target we will not try do do things the +# "proper" way. + +ifeq ($(BUILD_TARGET_ARCH),amd64) + KFLAGS += -mcmodel=kernel +endif + +CFLAGS := -O2 -DVBOX_LINUX_2_4 $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) +MODULE_EXT := o + +# 2.4 Module linking +$(MODULE).o: $(OBJS) + $(LD) -o $@ -r $(OBJS) + +.PHONY: $(MODULE) +all: $(MODULE) +$(MODULE): $(MODULE).o + +install: $(MODULE) + @mkdir -p $(MODULE_DIR); \ + install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \ + PATH="$(PATH):/bin:/sbin" depmod -a; + +clean: + for f in $(sort $(dir $(OBJS))); do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done + rm -rf .$(MOD_NAME)* .tmp_ver* $(MOD_NAME).* Modules.symvers modules.order + +else # ! $(KERN_VERSION), 24 +# +# 2.6 and later +# + +MODULE_EXT := ko + +$(MODULE)-y := $(OBJS) + +# build defs +EXTRA_CFLAGS += $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) + +.PHONY: $(MODULE) +all: $(MODULE) + +obj-m += $(MODULE).o + +JOBS := $(shell (getconf _NPROCESSORS_ONLN || grep -Ec '^processor|^CPU[0-9]' /proc/cpuinfo) 2>/dev/null) +ifeq ($(JOBS),0) + JOBS := 1 +endif + +# OL/UEK: disable module signing for external modules -- we don't have any private key +$(MODULE): + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) $(if $(JOBS),-j$(JOBS),) modules + +install: $(MODULE) + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) modules_install + +modules_install: install + +clean: + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) clean + +.PHONY: $(MODULE) install modules_install clean +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/Makefile.include.header +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/Makefile.include.header @@ -0,0 +1,158 @@ +# $Id: Makefile.include.header $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# (For 2.6.x, the main file must be called 'Makefile'!) +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# Testing: +# * Building with KERN_DIR set uses the value specified and +# the default value for the unspecified one if any. + +# +# These file should be included by the Makefiles for any kernel modules we +# build as part of the Guest Additions. The intended way of doing this is as +# follows: +# +# # Linux kbuild sets this to our source directory if we are called from +# # there +# obj ?= $(CURDIR) +# include $(obj)/Makefile.include.header +# MOD_NAME = +# MOD_OBJS = +# MOD_DEFS = +# MOD_INCL = +# MOD_CFLAGS = +# include $(obj)/Makefile.include.footer +# +# The kmk kBuild define KBUILD_TARGET_ARCH is available. +# + + +# +# First, figure out which architecture we're targeting and the build type. +# (We have to support basic cross building (ARCH=i386|x86_64).) +# While at it, warn about BUILD_* vars found to help with user problems. +# +ifeq ($(filter-out x86_64 amd64 AMD64,$(shell dpkg-architecture -qDEB_HOST_GNU_CPU)),) + BUILD_TARGET_ARCH_DEF := amd64 +else + BUILD_TARGET_ARCH_DEF := x86 +endif +ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),) + $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.) + BUILD_TARGET_ARCH := +endif +ifeq ($(BUILD_TARGET_ARCH),) + ifeq ($(ARCH),x86_64) + BUILD_TARGET_ARCH := amd64 + else + ifeq ($(ARCH),i386) + BUILD_TARGET_ARCH := x86 + else + BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF) + endif + endif +else + ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF)) + $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).) + endif +endif + +ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),) + $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.) + BUILD_TYPE := +endif +ifeq ($(BUILD_TYPE),) + BUILD_TYPE := release +else + ifneq ($(BUILD_TYPE),release) + $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).) + endif +endif +ifeq ($(USERNAME),) + USERNAME := noname +endif + +ifeq ($(KERNELRELEASE),) + + # + # building from this directory + # + + # kernel base directory + ifdef KERN_DIR + ifndef KERN_VER + ifeq ($(filter %/build,$(KERN_DIR)),) + $(error The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set) + endif + endif + endif + + ifndef KERN_VER + ifdef KERN_DIR + KERN_VER = $(notdir $(patsubst %/build,%,$(KERN_DIR))) + ifeq ($(shell expr $(KERN_VER) : '[0-9]*\.[0-9]*.[0-9]*'),0) + $(error The kernel build folder path must end in /build, or the variable KERN_VER must be set) + endif + endif + KERN_VER ?= $(shell uname -r) + endif + + # guess kernel major version (24 or later) + ifeq ($(shell if grep '"2\.4\.' /lib/modules/$(KERN_VER)/build/include/linux/version.h > /dev/null 2>&1; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + +else # neq($(KERNELRELEASE),) + + # + # building from kbuild (make -C M=`pwd`) + # + + # guess kernel version (24 or 26) + ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + + KERN_VER := $(KERNELRELEASE) + +endif # neq($(KERNELRELEASE),) + +# Kernel build folder +KERN_DIR := $(srctree) +ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes) + $(error Error: unable to find the headers of the Linux kernel to build against. \ + Specify KERN_VER= (currently $(KERN_VER)) and run Make again) +endif +# Kernel include folder +KERN_INCL := $(KERN_DIR)/include +# module install folder +INSTALL_MOD_DIR ?= misc +MODULE_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KERN_VER)/$(INSTALL_MOD_DIR) + +# debug - show guesses. +ifdef DEBUG +$(warning dbg: INSTALL_MOD_PATH = $(INSTALL_MOD_PATH)) +$(warning dbg: INSTALL_MOD_DIR = $(INSTALL_MOD_DIR)) +$(warning dbg: KERN_DIR = $(KERN_DIR)) +$(warning dbg: KERN_INCL = $(KERN_INCL)) +$(warning dbg: KERN_VERSION = $(KERN_VERSION)) +$(warning dbg: MODULE_DIR = $(MODULE_DIR)) +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/VBoxGuestR0LibHGCM.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/VBoxGuestR0LibHGCM.c @@ -0,0 +1,228 @@ +/* $Id: VBoxGuestR0LibHGCM.cpp $ */ +/** @file + * VBoxGuestLib - Host-Guest Communication Manager, ring-0 client drivers. + * + * These public functions can be only used by other drivers. They all + * do an IOCTL to VBoxGuest via IDC. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" + +#include +#include +#include + +#ifdef VBGL_VBOXGUEST +# error "This file shouldn't be part of the VBoxGuestR0LibBase library that is linked into VBoxGuest. It's client code." +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#define VBGL_HGCM_ASSERT_MSG AssertReleaseMsg + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/** + * Fast heap for HGCM handles data. + * @{ + */ +static RTSEMFASTMUTEX g_hMtxHGCMHandleData; +static struct VBGLHGCMHANDLEDATA g_aHGCMHandleData[64]; +/** @} */ + + +/** + * Initializes the HGCM VBGL bits. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInit(void) +{ + AssertReturn(g_hMtxHGCMHandleData == NIL_RTSEMFASTMUTEX, VINF_ALREADY_INITIALIZED); + return RTSemFastMutexCreate(&g_hMtxHGCMHandleData); +} + +/** + * Initializes the HGCM VBGL bits. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMTerminate(void) +{ + RTSemFastMutexDestroy(g_hMtxHGCMHandleData); + g_hMtxHGCMHandleData = NIL_RTSEMFASTMUTEX; + + return VINF_SUCCESS; +} + +DECLINLINE(int) vbglR0HandleHeapEnter(void) +{ + int rc = RTSemFastMutexRequest(g_hMtxHGCMHandleData); + + VBGL_HGCM_ASSERT_MSG(RT_SUCCESS(rc), ("Failed to request handle heap mutex, rc = %Rrc\n", rc)); + + return rc; +} + +DECLINLINE(void) vbglR0HandleHeapLeave(void) +{ + RTSemFastMutexRelease(g_hMtxHGCMHandleData); +} + +struct VBGLHGCMHANDLEDATA *vbglR0HGCMHandleAlloc(void) +{ + struct VBGLHGCMHANDLEDATA *p = NULL; + int rc = vbglR0HandleHeapEnter(); + if (RT_SUCCESS(rc)) + { + uint32_t i; + + /* Simple linear search in array. This will be called not so often, only connect/disconnect. */ + /** @todo bitmap for faster search and other obvious optimizations. */ + for (i = 0; i < RT_ELEMENTS(g_aHGCMHandleData); i++) + { + if (!g_aHGCMHandleData[i].fAllocated) + { + p = &g_aHGCMHandleData[i]; + p->fAllocated = 1; + break; + } + } + + vbglR0HandleHeapLeave(); + + VBGL_HGCM_ASSERT_MSG(p != NULL, ("Not enough HGCM handles.\n")); + } + return p; +} + +void vbglR0HGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle) +{ + if (pHandle) + { + int rc = vbglR0HandleHeapEnter(); + if (RT_SUCCESS(rc)) + { + VBGL_HGCM_ASSERT_MSG(pHandle->fAllocated, ("Freeing not allocated handle.\n")); + + RT_ZERO(*pHandle); + vbglR0HandleHeapLeave(); + } + } +} + +DECLR0VBGL(int) VbglR0HGCMConnect(VBGLHGCMHANDLE *pHandle, const char *pszServiceName, HGCMCLIENTID *pidClient) +{ + int rc; + if (pHandle && pszServiceName && pidClient) + { + struct VBGLHGCMHANDLEDATA *pHandleData = vbglR0HGCMHandleAlloc(); + if (pHandleData) + { + rc = VbglR0IdcOpen(&pHandleData->IdcHandle, + VBGL_IOC_VERSION /*uReqVersion*/, + VBGL_IOC_VERSION & UINT32_C(0xffff0000) /*uMinVersion*/, + NULL /*puSessionVersion*/, NULL /*puDriverVersion*/, NULL /*uDriverRevision*/); + if (RT_SUCCESS(rc)) + { + VBGLIOCHGCMCONNECT Info; + RT_ZERO(Info); + VBGLREQHDR_INIT(&Info.Hdr, HGCM_CONNECT); + Info.u.In.Loc.type = VMMDevHGCMLoc_LocalHost_Existing; + rc = RTStrCopy(Info.u.In.Loc.u.host.achName, sizeof(Info.u.In.Loc.u.host.achName), pszServiceName); + if (RT_SUCCESS(rc)) + { + rc = VbglR0IdcCall(&pHandleData->IdcHandle, VBGL_IOCTL_HGCM_CONNECT, &Info.Hdr, sizeof(Info)); + if (RT_SUCCESS(rc)) + { + *pidClient = Info.u.Out.idClient; + *pHandle = pHandleData; + return rc; + } + } + + VbglR0IdcClose(&pHandleData->IdcHandle); + } + + vbglR0HGCMHandleFree(pHandleData); + } + else + rc = VERR_NO_MEMORY; + } + else + rc = VERR_INVALID_PARAMETER; + return rc; +} + +DECLR0VBGL(int) VbglR0HGCMDisconnect(VBGLHGCMHANDLE handle, HGCMCLIENTID idClient) +{ + int rc; + VBGLIOCHGCMDISCONNECT Info; + + RT_ZERO(Info); + VBGLREQHDR_INIT(&Info.Hdr, HGCM_DISCONNECT); + Info.u.In.idClient = idClient; + rc = VbglR0IdcCall(&handle->IdcHandle, VBGL_IOCTL_HGCM_DISCONNECT, &Info.Hdr, sizeof(Info)); + + VbglR0IdcClose(&handle->IdcHandle); + + vbglR0HGCMHandleFree(handle); + + return rc; +} + +DECLR0VBGL(int) VbglR0HGCMCallRaw(VBGLHGCMHANDLE handle, PVBGLIOCHGCMCALL pData, uint32_t cbData) +{ + VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBGLIOCHGCMCALL) + pData->cParms * sizeof(HGCMFunctionParameter), + ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, + sizeof(VBGLIOCHGCMCALL) + pData->cParms * sizeof(VBGLIOCHGCMCALL))); + + return VbglR0IdcCallRaw(&handle->IdcHandle, VBGL_IOCTL_HGCM_CALL(cbData), &pData->Hdr, cbData); +} + +DECLR0VBGL(int) VbglR0HGCMCall(VBGLHGCMHANDLE handle, PVBGLIOCHGCMCALL pData, uint32_t cbData) +{ + int rc = VbglR0HGCMCallRaw(handle, pData, cbData); + if (RT_SUCCESS(rc)) + rc = pData->Hdr.rc; + return rc; +} + +DECLR0VBGL(int) VbglR0HGCMCallUserDataRaw(VBGLHGCMHANDLE handle, PVBGLIOCHGCMCALL pData, uint32_t cbData) +{ + VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBGLIOCHGCMCALL) + pData->cParms * sizeof(HGCMFunctionParameter), + ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, + sizeof(VBGLIOCHGCMCALL) + pData->cParms * sizeof(VBGLIOCHGCMCALL))); + + return VbglR0IdcCallRaw(&handle->IdcHandle, VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(cbData), &pData->Hdr, cbData); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/VBoxGuestR0LibIdc-unix.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/VBoxGuestR0LibIdc-unix.c @@ -0,0 +1,60 @@ +/* $Id: VBoxGuestR0LibIdc-unix.cpp $ */ +/** @file + * VBoxGuestLib - Ring-0 Support Library for VBoxGuest, IDC, UNIX-like OSes. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" + + +int VBOXCALL vbglR0IdcNativeOpen(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCCONNECT pReq) +{ + RT_NOREF(pHandle); + return VBoxGuestIDC(NULL /*pvSession*/, VBGL_IOCTL_IDC_CONNECT, &pReq->Hdr, sizeof(*pReq)); +} + + +int VBOXCALL vbglR0IdcNativeClose(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCDISCONNECT pReq) +{ + return VBoxGuestIDC(pHandle->s.pvSession, VBGL_IOCTL_IDC_DISCONNECT, &pReq->Hdr, sizeof(*pReq)); +} + + +/** + * Makes an IDC call, returning only the I/O control status code. + * + * @returns VBox status code (the I/O control failure status). + * @param pHandle The IDC handle. + * @param uReq The request number. + * @param pReqHdr The request header. + * @param cbReq The request size. + */ +DECLR0VBGL(int) VbglR0IdcCallRaw(PVBGLIDCHANDLE pHandle, uintptr_t uReq, PVBGLREQHDR pReqHdr, uint32_t cbReq) +{ + return VBoxGuestIDC(pHandle->s.pvSession, uReq, pReqHdr, cbReq); +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/VBoxGuestR0LibIdc.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/VBoxGuestR0LibIdc.c @@ -0,0 +1,201 @@ +/* $Id: VBoxGuestR0LibIdc.cpp $ */ +/** @file + * VBoxGuestLib - Ring-0 Support Library for VBoxGuest, IDC. + */ + +/* + * Copyright (C) 2008-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBoxGuestR0LibInternal.h" +#include +#include +/*#include */ + +#ifdef VBGL_VBOXGUEST +# error "This file shouldn't be part of the VBoxGuestR0LibBase library that is linked into VBoxGuest. It's client code." +#endif + + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +/*static PVBGLIDCHANDLE volatile g_pMainHandle = NULL;*/ + + +/** + * Opens the IDC interface of the support driver. + * + * This will perform basic version negotiations and fail if the + * minimum requirements aren't met. + * + * @returns VBox status code. + * @param pHandle The handle structure (output). + * @param uReqVersion The requested version. Pass 0 for default. + * @param uMinVersion The minimum required version. Pass 0 for default. + * @param puSessionVersion Where to store the session version. Optional. + * @param puDriverVersion Where to store the session version. Optional. + * @param puDriverRevision Where to store the SVN revision of the driver. Optional. + */ +DECLR0VBGL(int) VbglR0IdcOpen(PVBGLIDCHANDLE pHandle, uint32_t uReqVersion, uint32_t uMinVersion, + uint32_t *puSessionVersion, uint32_t *puDriverVersion, uint32_t *puDriverRevision) +{ + unsigned uDefaultMinVersion; + VBGLIOCIDCCONNECT Req; + int rc; + + /* + * Validate and set failure return values. + */ + AssertPtrReturn(pHandle, VERR_INVALID_POINTER); + pHandle->s.pvSession = NULL; + + AssertPtrNullReturn(puSessionVersion, VERR_INVALID_POINTER); + if (puSessionVersion) + *puSessionVersion = 0; + + AssertPtrNullReturn(puDriverVersion, VERR_INVALID_POINTER); + if (puDriverVersion) + *puDriverVersion = 0; + + AssertPtrNullReturn(puDriverRevision, VERR_INVALID_POINTER); + if (puDriverRevision) + *puDriverRevision = 0; + + AssertReturn(!uMinVersion || (uMinVersion & UINT32_C(0xffff0000)) == (VBGL_IOC_VERSION & UINT32_C(0xffff0000)), VERR_INVALID_PARAMETER); + AssertReturn(!uReqVersion || (uReqVersion & UINT32_C(0xffff0000)) == (VBGL_IOC_VERSION & UINT32_C(0xffff0000)), VERR_INVALID_PARAMETER); + + /* + * Handle default version input and enforce minimum requirements made + * by this library. + * + * The clients will pass defaults (0), and only in the case that some + * special API feature was just added will they set an actual version. + * So, this is the place where can easily enforce a minimum IDC version + * on bugs and similar. It corresponds a bit to what SUPR3Init is + * responsible for. + */ + uDefaultMinVersion = VBGL_IOC_VERSION & UINT32_C(0xffff0000); + if (!uMinVersion || uMinVersion < uDefaultMinVersion) + uMinVersion = uDefaultMinVersion; + if (!uReqVersion || uReqVersion < uDefaultMinVersion) + uReqVersion = uDefaultMinVersion; + + /* + * Setup the connect request packet and call the OS specific function. + */ + VBGLREQHDR_INIT(&Req.Hdr, IDC_CONNECT); + Req.u.In.u32MagicCookie = VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE; + Req.u.In.uMinVersion = uMinVersion; + Req.u.In.uReqVersion = uReqVersion; + Req.u.In.uReserved = 0; + rc = vbglR0IdcNativeOpen(pHandle, &Req); + if (RT_SUCCESS(rc)) + rc = Req.Hdr.rc; + if (RT_SUCCESS(rc)) + { + pHandle->s.pvSession = Req.u.Out.pvSession; + if (puSessionVersion) + *puSessionVersion = Req.u.Out.uSessionVersion; + if (puDriverVersion) + *puDriverVersion = Req.u.Out.uDriverVersion; + if (puDriverRevision) + *puDriverRevision = Req.u.Out.uDriverRevision; + + /* + * We don't really trust anyone, make sure the returned + * session and version values actually makes sense. + */ + if ( RT_VALID_PTR(Req.u.Out.pvSession) + && Req.u.Out.uSessionVersion >= uMinVersion + && (Req.u.Out.uSessionVersion & UINT32_C(0xffff0000)) == (VBGL_IOC_VERSION & UINT32_C(0xffff0000))) + { + /*ASMAtomicCmpXchgPtr(&g_pMainHandle, pHandle, NULL);*/ + return rc; + } + + AssertMsgFailed(("pSession=%p uSessionVersion=0x%x (r%u)\n", Req.u.Out.pvSession, Req.u.Out.uSessionVersion, Req.u.Out.uDriverRevision)); + rc = VERR_VERSION_MISMATCH; + VbglR0IdcClose(pHandle); + } + + return rc; +} + + +/** + * Closes a IDC connection established by VbglR0IdcOpen. + * + * @returns VBox status code. + * @param pHandle The IDC handle. + */ +DECLR0VBGL(int) VbglR0IdcClose(PVBGLIDCHANDLE pHandle) +{ + VBGLIOCIDCDISCONNECT Req; + int rc; + + /* + * Catch closed handles and check that the session is valid. + */ + AssertPtrReturn(pHandle, VERR_INVALID_POINTER); + if (!pHandle->s.pvSession) + return VERR_INVALID_HANDLE; + AssertPtrReturn(pHandle->s.pvSession, VERR_INVALID_HANDLE); + + /* + * Create the request and hand it to the OS specific code. + */ + VBGLREQHDR_INIT(&Req.Hdr, IDC_DISCONNECT); + Req.u.In.pvSession = pHandle->s.pvSession; + rc = vbglR0IdcNativeClose(pHandle, &Req); + if (RT_SUCCESS(rc)) + rc = Req.Hdr.rc; + if (RT_SUCCESS(rc)) + { + pHandle->s.pvSession = NULL; + /*ASMAtomicCmpXchgPtr(&g_pMainHandle, NULL, pHandle);*/ + } + return rc; +} + + +/** + * Makes an IDC call, returning the request status. + * + * @returns VBox status code. Request status if the I/O control succeeds, + * otherwise the I/O control failure status. + * @param pHandle The IDC handle. + * @param uReq The request number. + * @param pReqHdr The request header. + * @param cbReq The request size. + */ +DECLR0VBGL(int) VbglR0IdcCall(PVBGLIDCHANDLE pHandle, uintptr_t uReq, PVBGLREQHDR pReqHdr, uint32_t cbReq) +{ + int rc = VbglR0IdcCallRaw(pHandle, uReq, pReqHdr, cbReq); + if (RT_SUCCESS(rc)) + rc = pReqHdr->rc; + return rc; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/VBoxGuestR0LibInternal.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/VBoxGuestR0LibInternal.h @@ -0,0 +1,203 @@ +/* $Id: VBoxGuestR0LibInternal.h $ */ +/** @file + * VBoxGuestLibR0 - Internal header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBoxGuestLib_VBoxGuestR0LibInternal_h +#define ___VBoxGuestLib_VBoxGuestR0LibInternal_h + +/* + * Define the private IDC handle structure before we include the VBoxGuestLib.h header. + */ +#include +#include +RT_C_DECLS_BEGIN + +# ifndef VBGL_VBOXGUEST +/** + * The hidden part of VBGLIDCHANDLE. + */ +struct VBGLIDCHANDLEPRIVATE +{ + /** Pointer to the session handle. */ + void *pvSession; +# if defined(RT_OS_WINDOWS) && (defined(___iprt_nt_ntddk_h___) || defined(___iprt_nt_nt_h___)) + /** Pointer to the NT device object. */ + PDEVICE_OBJECT pDeviceObject; + /** Pointer to the NT file object. */ + PFILE_OBJECT pFileObject; +# elif defined(RT_OS_SOLARIS) && defined(_SYS_SUNLDI_H) + /** LDI device handle to keep the device attached. */ + ldi_handle_t hDev; +# endif +}; +/** Indicate that the VBGLIDCHANDLEPRIVATE structure is present. */ +# define VBGLIDCHANDLEPRIVATE_DECLARED 1 +#endif + +#include +#include +#include + +#ifdef VBGLIDCHANDLEPRIVATE_DECLARED +AssertCompile(RT_SIZEOFMEMB(VBGLIDCHANDLE, apvPadding) >= sizeof(struct VBGLIDCHANDLEPRIVATE)); +#endif + + +/* + * Native IDC functions. + */ +int VBOXCALL vbglR0IdcNativeOpen(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCCONNECT pReq); +int VBOXCALL vbglR0IdcNativeClose(PVBGLIDCHANDLE pHandle, PVBGLIOCIDCDISCONNECT pReq); + + +/* + * Deprecated logging macro + */ +#include +#ifdef RT_OS_WINDOWS /** @todo dprintf() -> Log() */ +# if (defined(DEBUG) && !defined(NO_LOGGING)) || defined(LOG_ENABLED) +# define dprintf(a) RTLogBackdoorPrintf a +# else +# define dprintf(a) do {} while (0) +# endif +#else +# define dprintf(a) Log(a) +#endif + +/* + * Lazy bird: OS/2 doesn't currently implement the RTSemMutex API in ring-0, so + * use a fast mutex instead. Unlike Windows, the OS/2 implementation + * doesn't have any nasty side effects on IRQL-like context properties, so the + * fast mutexes on OS/2 are identical to normal mutexes except for the missing + * timeout aspec. Fortunately we don't need timeouts here. + */ +#ifdef RT_OS_OS2 +# define VBGLDATA_USE_FAST_MUTEX +#endif + +struct _VBGLPHYSHEAPBLOCK; +typedef struct _VBGLPHYSHEAPBLOCK VBGLPHYSHEAPBLOCK; +struct _VBGLPHYSHEAPCHUNK; +typedef struct _VBGLPHYSHEAPCHUNK VBGLPHYSHEAPCHUNK; + +#ifndef VBGL_VBOXGUEST +struct VBGLHGCMHANDLEDATA +{ + uint32_t fAllocated; + VBGLIDCHANDLE IdcHandle; +}; +#endif + +enum VbglLibStatus +{ + VbglStatusNotInitialized = 0, + VbglStatusInitializing, + VbglStatusReady +}; + +/** + * Global VBGL ring-0 data. + * Lives in VbglR0Init.cpp. + */ +typedef struct VBGLDATA +{ + enum VbglLibStatus status; + + RTIOPORT portVMMDev; + + VMMDevMemory *pVMMDevMemory; + + /** + * Physical memory heap data. + * @{ + */ + + VBGLPHYSHEAPBLOCK *pFreeBlocksHead; + VBGLPHYSHEAPBLOCK *pAllocBlocksHead; + VBGLPHYSHEAPCHUNK *pChunkHead; + + RTSEMFASTMUTEX mutexHeap; + /** @} */ + + /** + * The host version data. + */ + VMMDevReqHostVersion hostVersion; + + +#ifndef VBGL_VBOXGUEST + /** The IDC handle. This is used for talking to the main driver. */ + VBGLIDCHANDLE IdcHandle; + /** Mutex used to serialize IDC setup. */ +# ifdef VBGLDATA_USE_FAST_MUTEX + RTSEMFASTMUTEX hMtxIdcSetup; +# else + RTSEMMUTEX hMtxIdcSetup; +# endif +#endif +} VBGLDATA; + + +extern VBGLDATA g_vbgldata; + +/** + * Internal macro for checking whether we can pass physical page lists to the + * host. + * + * ASSUMES that vbglR0Enter has been called already. + * + * @param a_fLocked For the windows shared folders workarounds. + * + * @remarks Disabled the PageList feature for locked memory on Windows, + * because a new MDL is created by VBGL to get the page addresses + * and the pages from the MDL are marked as dirty when they should not. + */ +#if defined(RT_OS_WINDOWS) +# define VBGLR0_CAN_USE_PHYS_PAGE_LIST(a_fLocked) \ + ( !(a_fLocked) && (g_vbgldata.hostVersion.features & VMMDEV_HVF_HGCM_PHYS_PAGE_LIST) ) +#else +# define VBGLR0_CAN_USE_PHYS_PAGE_LIST(a_fLocked) \ + ( !!(g_vbgldata.hostVersion.features & VMMDEV_HVF_HGCM_PHYS_PAGE_LIST) ) +#endif + +int vbglR0Enter (void); + +#ifdef VBOX_WITH_HGCM +struct VBGLHGCMHANDLEDATA *vbglR0HGCMHandleAlloc(void); +void vbglR0HGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle); +#endif /* VBOX_WITH_HGCM */ + +#ifndef VBGL_VBOXGUEST +/** + * Get the IDC handle to the main VBoxGuest driver. + * @returns VERR_TRY_AGAIN if the main driver has not yet been loaded. + */ +int VBOXCALL vbglR0QueryIdcHandle(PVBGLIDCHANDLE *ppIdcHandle); +#endif + +RT_C_DECLS_END + +#endif /* !___VBoxGuestLib_VBoxGuestR0LibInternal_h */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/VBoxGuestR0LibSharedFolders.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/VBoxGuestR0LibSharedFolders.c @@ -0,0 +1,683 @@ +/* $Id: VBoxGuestR0LibSharedFolders.c $ */ +/** @file + * VBoxGuestR0LibSharedFolders - Ring 0 Shared Folders calls. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#define LOG_GROUP LOG_GROUP_SHARED_FOLDERS +#include "VBoxGuestR0LibInternal.h" +#include +#include +#include +#include +#include +#include + +#ifdef VBGL_VBOXGUEST +# error "This file shouldn't be part of the VBoxGuestR0LibBase library that is linked into VBoxGuest. It's client code." +#endif + + +/********************************************************************************************************************************* +* Defined Constants And Macros * +*********************************************************************************************************************************/ +#define SHFL_CPARMS_SET_UTF8 0 +#define SHFL_CPARMS_SET_SYMLINKS 0 + +#define VBOX_INIT_CALL(a, b, c) \ + LogFunc(("%s, idClient=%d\n", "SHFL_FN_" # b, (c)->idClient)); \ + VBGL_HGCM_HDR_INIT(a, (c)->idClient, SHFL_FN_##b, SHFL_CPARMS_##b); \ + (a)->fInterruptible = false /* Currently we do like nfs with -o hard (default). */ + +#define VBOX_INIT_CALL_EX(a, b, c, a_cbReq) \ + LogFunc(("%s, idClient=%d\n", "SHFL_FN_" # b, (c)->idClient)); \ + VBGL_HGCM_HDR_INIT_EX(a, (c)->idClient, SHFL_FN_##b, SHFL_CPARMS_##b, a_cbReq); \ + (a)->fInterruptible = false /* Currently we do like nfs with -o hard (default). */ + + + +/** @todo We only need HGCM, not physical memory, so other guests should also + * switch to calling vbglR0HGCMInit() and vbglR0HGCMTerminate() instead + * of VbglR0SfInit() and VbglR0SfTerm(). */ +#ifndef RT_OS_LINUX +DECLVBGL(int) VbglR0SfInit(void) +{ + return VbglR0InitClient(); +} + +DECLVBGL(void) VbglR0SfTerm(void) +{ + VbglR0TerminateClient(); +} +#endif + +DECLVBGL(int) VbglR0SfConnect(PVBGLSFCLIENT pClient) +{ + int rc = VbglR0HGCMConnect(&pClient->handle, "VBoxSharedFolders", &pClient->idClient); + if (RT_SUCCESS(rc)) + LogFunc(("idClient=%d\n", pClient->idClient)); + else + LogFunc(("VbglR0HGCMConnect failed -> rc=%Rrc\n", rc)); + return rc; +} + +DECLVBGL(void) VbglR0SfDisconnect(PVBGLSFCLIENT pClient) +{ + int rc; + LogFunc(("u32ClientID=%d\n", pClient->idClient)); + if (pClient->handle == NULL) + return; /* not connected */ + + rc = VbglR0HGCMDisconnect(pClient->handle, pClient->idClient); + NOREF(rc); +/* Log(("VBOXSF: VbglR0SfDisconnect: VbglR0HGCMDisconnect -> %#x\n", rc)); */ + pClient->idClient = 0; + pClient->handle = NULL; + return; +} + +DECLVBGL(int) VbglR0SfQueryMappings(PVBGLSFCLIENT pClient, SHFLMAPPING paMappings[], uint32_t *pcMappings) +{ + int rc; + VBoxSFQueryMappings data; + + VBOX_INIT_CALL(&data.callInfo, QUERY_MAPPINGS, pClient); + + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = SHFL_MF_UCS2; + + data.numberOfMappings.type = VMMDevHGCMParmType_32bit; + data.numberOfMappings.u.value32 = *pcMappings; + + data.mappings.type = VMMDevHGCMParmType_LinAddr; + data.mappings.u.Pointer.size = sizeof(SHFLMAPPING) * *pcMappings; + data.mappings.u.Pointer.u.linearAddr = (uintptr_t)&paMappings[0]; + +/* Log(("VBOXSF: in ifs difference %d\n", (char *)&data.flags.type - (char *)&data.callInfo.cParms)); */ + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfQueryMappings: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */ + if (RT_SUCCESS(rc)) + *pcMappings = data.numberOfMappings.u.value32; + + return rc; +} + +DECLVBGL(int) VbglR0SfQueryMapName(PVBGLSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size) +{ + int rc; + VBoxSFQueryMapName data; + + VBOX_INIT_CALL(&data.callInfo, QUERY_MAP_NAME, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = root; + + data.name.type = VMMDevHGCMParmType_LinAddr; + data.name.u.Pointer.size = size; + data.name.u.Pointer.u.linearAddr = (uintptr_t)pString; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfQueryMapName: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfMapFolder(PVBGLSFCLIENT pClient, PSHFLSTRING szFolderName, PVBGLSFMAP pMap) +{ + int rc; + VBoxSFMapFolder data; + + VBOX_INIT_CALL(&data.callInfo, MAP_FOLDER, pClient); + + data.path.type = VMMDevHGCMParmType_LinAddr; + data.path.u.Pointer.size = ShflStringSizeOfBuffer(szFolderName); + data.path.u.Pointer.u.linearAddr = (uintptr_t)szFolderName; + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = 0; + + data.delimiter.type = VMMDevHGCMParmType_32bit; + data.delimiter.u.value32 = RTPATH_DELIMITER; + + data.fCaseSensitive.type = VMMDevHGCMParmType_32bit; +#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2) + data.fCaseSensitive.u.value32 = 0; +#else + data.fCaseSensitive.u.value32 = 1; +#endif + + rc = VbglR0HGCMCallRaw(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfMapFolder: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + pMap->root = data.root.u.value32; + rc = data.callInfo.Hdr.rc; + } + return rc; +} + +DECLVBGL(int) VbglR0SfUnmapFolder(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap) +{ + int rc; + VBoxSFUnmapFolder data; + + VBOX_INIT_CALL(&data.callInfo, UNMAP_FOLDER, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfUnmapFolder: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfCreate(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms) +{ + /** @todo copy buffers to physical or mapped memory. */ + int rc; + VBoxSFCreate data; + + VBOX_INIT_CALL(&data.callInfo, CREATE, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.path.type = VMMDevHGCMParmType_LinAddr; + data.path.u.Pointer.size = ShflStringSizeOfBuffer (pParsedPath); + data.path.u.Pointer.u.linearAddr = (uintptr_t)pParsedPath; + + data.parms.type = VMMDevHGCMParmType_LinAddr; + data.parms.u.Pointer.size = sizeof(SHFLCREATEPARMS); + data.parms.u.Pointer.u.linearAddr = (uintptr_t)pCreateParms; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfCreate: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfClose(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE Handle) +{ + int rc; + VBoxSFClose data; + + VBOX_INIT_CALL(&data.callInfo, CLOSE, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = Handle; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfClose: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfRemove(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t flags) +{ + int rc = VINF_SUCCESS; + + VBoxSFRemove data; + + VBOX_INIT_CALL(&data.callInfo, REMOVE, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.path.type = VMMDevHGCMParmType_LinAddr_In; + data.path.u.Pointer.size = ShflStringSizeOfBuffer(pParsedPath); + data.path.u.Pointer.u.linearAddr = (uintptr_t)pParsedPath; + + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = flags; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfRemove: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfRename(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags) +{ + int rc; + VBoxSFRename data; + + VBOX_INIT_CALL(&data.callInfo, RENAME, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.src.type = VMMDevHGCMParmType_LinAddr_In; + data.src.u.Pointer.size = ShflStringSizeOfBuffer(pSrcPath); + data.src.u.Pointer.u.linearAddr = (uintptr_t)pSrcPath; + + data.dest.type = VMMDevHGCMParmType_LinAddr_In; + data.dest.u.Pointer.size = ShflStringSizeOfBuffer(pDestPath); + data.dest.u.Pointer.u.linearAddr = (uintptr_t)pDestPath; + + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = flags; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfRename: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfRead(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, + uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked) +{ + int rc; + VBoxSFRead data; + + VBOX_INIT_CALL(&data.callInfo, READ, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + data.offset.type = VMMDevHGCMParmType_64bit; + data.offset.u.value64 = offset; + data.cb.type = VMMDevHGCMParmType_32bit; + data.cb.u.value32 = *pcbBuffer; + data.buffer.type = (fLocked) ? VMMDevHGCMParmType_LinAddr_Locked_Out : VMMDevHGCMParmType_LinAddr_Out; + data.buffer.u.Pointer.size = *pcbBuffer; + data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + rc = VbglR0HGCMCallRaw(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfRead: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = data.callInfo.Hdr.rc; + *pcbBuffer = data.cb.u.value32; + } + return rc; +} + +DECLVBGL(int) VbglR0SfReadPageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, + uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages) +{ + uint32_t cbToRead = *pcbBuffer; + uint32_t cbData = (uint32_t)(sizeof(VBoxSFRead) + RT_UOFFSETOF(HGCMPageListInfo, aPages[cPages])); + VBoxSFRead *pData = (VBoxSFRead *)RTMemTmpAlloc(cbData); + HGCMPageListInfo *pPgLst = (HGCMPageListInfo *)(pData + 1); + uint16_t iPage; + int rc; + + if (RT_UNLIKELY(!pData)) + return VERR_NO_TMP_MEMORY; + + VBOX_INIT_CALL_EX(&pData->callInfo, READ, pClient, cbData); + + pData->root.type = VMMDevHGCMParmType_32bit; + pData->root.u.value32 = pMap->root; + + pData->handle.type = VMMDevHGCMParmType_64bit; + pData->handle.u.value64 = hFile; + pData->offset.type = VMMDevHGCMParmType_64bit; + pData->offset.u.value64 = offset; + pData->cb.type = VMMDevHGCMParmType_32bit; + pData->cb.u.value32 = cbToRead; + pData->buffer.type = VMMDevHGCMParmType_PageList; + pData->buffer.u.PageList.size = cbToRead; + pData->buffer.u.PageList.offset = sizeof(VBoxSFRead); + + pPgLst->flags = VBOX_HGCM_F_PARM_DIRECTION_FROM_HOST; + pPgLst->offFirstPage = offFirstPage; + pPgLst->cPages = cPages; + for (iPage = 0; iPage < cPages; iPage++) + pPgLst->aPages[iPage] = paPages[iPage]; + + rc = VbglR0HGCMCallRaw(pClient->handle, &pData->callInfo, cbData); +/* Log(("VBOXSF: VbglR0SfReadPageList: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = pData->callInfo.Hdr.rc; + *pcbBuffer = pData->cb.u.value32; + } + + RTMemTmpFree(pData); + return rc; +} + +DECLVBGL(int) VbglR0SfWrite(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, + uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked) +{ + int rc; + VBoxSFWrite data; + + VBOX_INIT_CALL(&data.callInfo, WRITE, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + data.offset.type = VMMDevHGCMParmType_64bit; + data.offset.u.value64 = offset; + data.cb.type = VMMDevHGCMParmType_32bit; + data.cb.u.value32 = *pcbBuffer; + data.buffer.type = fLocked ? VMMDevHGCMParmType_LinAddr_Locked_In : VMMDevHGCMParmType_LinAddr_In; + data.buffer.u.Pointer.size = *pcbBuffer; + data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + rc = VbglR0HGCMCallRaw(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfWrite: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = data.callInfo.Hdr.rc; + *pcbBuffer = data.cb.u.value32; + } + return rc; +} + +DECLVBGL(int) VbglR0SfWritePhysCont(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, + uint32_t *pcbBuffer, RTCCPHYS PhysBuffer) +{ + uint32_t cbToWrite = *pcbBuffer; + uint32_t cPages = RT_ALIGN_32((PhysBuffer & PAGE_OFFSET_MASK) + cbToWrite, PAGE_SIZE) >> PAGE_SHIFT; + uint32_t cbData = (uint32_t)(sizeof(VBoxSFWrite) + RT_UOFFSETOF(HGCMPageListInfo, aPages[cPages])); + VBoxSFWrite *pData = (VBoxSFWrite *)RTMemTmpAlloc(cbData); + HGCMPageListInfo *pPgLst = (HGCMPageListInfo *)(pData + 1); + uint32_t iPage; + int rc; + + if (RT_UNLIKELY(!pData)) + return VERR_NO_TMP_MEMORY; + + VBOX_INIT_CALL_EX(&pData->callInfo, WRITE, pClient, cbData); + + pData->root.type = VMMDevHGCMParmType_32bit; + pData->root.u.value32 = pMap->root; + + pData->handle.type = VMMDevHGCMParmType_64bit; + pData->handle.u.value64 = hFile; + pData->offset.type = VMMDevHGCMParmType_64bit; + pData->offset.u.value64 = offset; + pData->cb.type = VMMDevHGCMParmType_32bit; + pData->cb.u.value32 = cbToWrite; + pData->buffer.type = VMMDevHGCMParmType_PageList; + pData->buffer.u.PageList.size = cbToWrite; + pData->buffer.u.PageList.offset = sizeof(VBoxSFWrite); + + pPgLst->flags = VBOX_HGCM_F_PARM_DIRECTION_TO_HOST; + pPgLst->offFirstPage = (uint16_t)(PhysBuffer & PAGE_OFFSET_MASK); + pPgLst->cPages = cPages; + PhysBuffer &= ~(RTCCPHYS)PAGE_OFFSET_MASK; + for (iPage = 0; iPage < cPages; iPage++, PhysBuffer += PAGE_SIZE) + pPgLst->aPages[iPage] = PhysBuffer; + + rc = VbglR0HGCMCallRaw(pClient->handle, &pData->callInfo, cbData); +/* Log(("VBOXSF: VbglR0SfWritePhysCont: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = pData->callInfo.Hdr.rc; + *pcbBuffer = pData->cb.u.value32; + } + + RTMemTmpFree(pData); + return rc; + +} + +DECLVBGL(int) VbglR0SfWritePageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, + uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages) +{ + uint32_t cbToWrite = *pcbBuffer; + uint32_t cbData = (uint32_t)(sizeof(VBoxSFWrite) + RT_UOFFSETOF(HGCMPageListInfo, aPages[cPages])); + VBoxSFWrite *pData = (VBoxSFWrite *)RTMemTmpAlloc(cbData); + HGCMPageListInfo *pPgLst = (HGCMPageListInfo *)(pData + 1); + uint16_t iPage; + int rc; + + if (RT_UNLIKELY(!pData)) + return VERR_NO_TMP_MEMORY; + + VBOX_INIT_CALL_EX(&pData->callInfo, WRITE, pClient, cbData); + + pData->root.type = VMMDevHGCMParmType_32bit; + pData->root.u.value32 = pMap->root; + + pData->handle.type = VMMDevHGCMParmType_64bit; + pData->handle.u.value64 = hFile; + pData->offset.type = VMMDevHGCMParmType_64bit; + pData->offset.u.value64 = offset; + pData->cb.type = VMMDevHGCMParmType_32bit; + pData->cb.u.value32 = cbToWrite; + pData->buffer.type = VMMDevHGCMParmType_PageList; + pData->buffer.u.PageList.size = cbToWrite; + pData->buffer.u.PageList.offset = sizeof(VBoxSFWrite); + + pPgLst->flags = VBOX_HGCM_F_PARM_DIRECTION_TO_HOST; + pPgLst->offFirstPage = offFirstPage; + pPgLst->cPages = cPages; + for (iPage = 0; iPage < cPages; iPage++) + pPgLst->aPages[iPage] = paPages[iPage]; + + rc = VbglR0HGCMCallRaw(pClient->handle, &pData->callInfo, cbData); +/* Log(("VBOXSF: VbglR0SfWritePageList: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = pData->callInfo.Hdr.rc; + *pcbBuffer = pData->cb.u.value32; + } + + RTMemTmpFree(pData); + return rc; +} + +DECLVBGL(int) VbglR0SfFlush(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile) +{ + int rc; + VBoxSFFlush data; + + VBOX_INIT_CALL(&data.callInfo, FLUSH, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfFlush: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfDirInfo( + PVBGLSFCLIENT pClient, + PVBGLSFMAP pMap, + SHFLHANDLE hFile, + PSHFLSTRING ParsedPath, + uint32_t flags, + uint32_t index, + uint32_t *pcbBuffer, + PSHFLDIRINFO pBuffer, + uint32_t *pcFiles) +{ + int rc; + VBoxSFList data; + + VBOX_INIT_CALL(&data.callInfo, LIST, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = flags; + data.cb.type = VMMDevHGCMParmType_32bit; + data.cb.u.value32 = *pcbBuffer; + data.path.type = VMMDevHGCMParmType_LinAddr_In; + data.path.u.Pointer.size = ParsedPath ? ShflStringSizeOfBuffer(ParsedPath) : 0; + data.path.u.Pointer.u.linearAddr = (uintptr_t) ParsedPath; + + data.buffer.type = VMMDevHGCMParmType_LinAddr_Out; + data.buffer.u.Pointer.size = *pcbBuffer; + data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + data.resumePoint.type = VMMDevHGCMParmType_32bit; + data.resumePoint.u.value32 = index; + data.cFiles.type = VMMDevHGCMParmType_32bit; + data.cFiles.u.value32 = 0; /* out parameters only */ + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfDirInfo: rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + *pcbBuffer = data.cb.u.value32; + *pcFiles = data.cFiles.u.value32; + return rc; +} + +DECLVBGL(int) VbglR0SfFsInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, + uint32_t flags, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer) +{ + int rc; + VBoxSFInformation data; + + VBOX_INIT_CALL(&data.callInfo, INFORMATION, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = flags; + data.cb.type = VMMDevHGCMParmType_32bit; + data.cb.u.value32 = *pcbBuffer; + data.info.type = VMMDevHGCMParmType_LinAddr; + data.info.u.Pointer.size = *pcbBuffer; + data.info.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + rc = VbglR0HGCMCallRaw(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfFsInfo: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + if (RT_SUCCESS(rc)) + { + rc = data.callInfo.Hdr.rc; + *pcbBuffer = data.cb.u.value32; + } + return rc; +} + +DECLVBGL(int) VbglR0SfLock(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, + uint64_t offset, uint64_t cbSize, uint32_t fLock) +{ + int rc; + VBoxSFLock data; + + VBOX_INIT_CALL(&data.callInfo, LOCK, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.handle.type = VMMDevHGCMParmType_64bit; + data.handle.u.value64 = hFile; + data.offset.type = VMMDevHGCMParmType_64bit; + data.offset.u.value64 = offset; + data.length.type = VMMDevHGCMParmType_64bit; + data.length.u.value64 = cbSize; + + data.flags.type = VMMDevHGCMParmType_32bit; + data.flags.u.value32 = fLock; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfLock: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfSetUtf8(PVBGLSFCLIENT pClient) +{ + int rc; + VBGLIOCHGCMCALL callInfo; + + VBOX_INIT_CALL(&callInfo, SET_UTF8, pClient); + rc = VbglR0HGCMCall(pClient->handle, &callInfo, sizeof(callInfo)); +/* Log(("VBOXSF: VbglR0SfSetUtf8: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfReadLink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t cbBuffer, uint8_t *pBuffer) +{ + int rc; + VBoxSFReadLink data; + + VBOX_INIT_CALL(&data.callInfo, READLINK, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.path.type = VMMDevHGCMParmType_LinAddr_In; + data.path.u.Pointer.size = ShflStringSizeOfBuffer (pParsedPath); + data.path.u.Pointer.u.linearAddr = (uintptr_t)pParsedPath; + + data.buffer.type = VMMDevHGCMParmType_LinAddr_Out; + data.buffer.u.Pointer.size = cbBuffer; + data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfReadLink: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfSymlink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath, + PSHFLFSOBJINFO pBuffer) +{ + int rc; + VBoxSFSymlink data; + + VBOX_INIT_CALL(&data.callInfo, SYMLINK, pClient); + + data.root.type = VMMDevHGCMParmType_32bit; + data.root.u.value32 = pMap->root; + + data.newPath.type = VMMDevHGCMParmType_LinAddr_In; + data.newPath.u.Pointer.size = ShflStringSizeOfBuffer (pNewPath); + data.newPath.u.Pointer.u.linearAddr = (uintptr_t)pNewPath; + + data.oldPath.type = VMMDevHGCMParmType_LinAddr_In; + data.oldPath.u.Pointer.size = ShflStringSizeOfBuffer (pOldPath); + data.oldPath.u.Pointer.u.linearAddr = (uintptr_t)pOldPath; + + data.info.type = VMMDevHGCMParmType_LinAddr_Out; + data.info.u.Pointer.size = sizeof(SHFLFSOBJINFO); + data.info.u.Pointer.u.linearAddr = (uintptr_t)pBuffer; + + rc = VbglR0HGCMCall(pClient->handle, &data.callInfo, sizeof(data)); +/* Log(("VBOXSF: VbglR0SfSymlink: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + +DECLVBGL(int) VbglR0SfSetSymlinks(PVBGLSFCLIENT pClient) +{ + int rc; + VBGLIOCHGCMCALL callInfo; + + VBOX_INIT_CALL(&callInfo, SET_SYMLINKS, pClient); + rc = VbglR0HGCMCall(pClient->handle, &callInfo, sizeof(callInfo)); +/* Log(("VBOXSF: VbglR0SfSetSymlinks: VbglR0HGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.Hdr.rc)); */ + return rc; +} + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/dirops.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/dirops.c @@ -0,0 +1,902 @@ +/** @file + * + * vboxsf -- VirtualBox Guest Additions for Linux: + * Directory inode and file operations + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#include "vfsmod.h" + +/** + * Open a directory. Read the complete content into a buffer. + * + * @param inode inode + * @param file file + * @returns 0 on success, Linux error code otherwise + */ +static int sf_dir_open(struct inode *inode, struct file *file) +{ + int rc; + int err; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_dir_info *sf_d; + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + SHFLCREATEPARMS params; + + TRACE(); + BUG_ON(!sf_g); + BUG_ON(!sf_i); + + if (file->private_data) + { + LogFunc(("sf_dir_open() called on already opened directory '%s'\n", + sf_i->path->String.utf8)); + return 0; + } + + sf_d = sf_dir_info_alloc(); + if (!sf_d) + { + LogRelFunc(("could not allocate directory info for '%s'\n", + sf_i->path->String.utf8)); + return -ENOMEM; + } + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + params.CreateFlags = 0 + | SHFL_CF_DIRECTORY + | SHFL_CF_ACT_OPEN_IF_EXISTS + | SHFL_CF_ACT_FAIL_IF_NEW + | SHFL_CF_ACCESS_READ + ; + + LogFunc(("sf_dir_open(): calling VbglR0SfCreate, folder %s, flags %#x\n", + sf_i->path->String.utf8, params.CreateFlags)); + rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, ¶ms); + if (RT_SUCCESS(rc)) + { + if (params.Result == SHFL_FILE_EXISTS) + { + err = sf_dir_read_all(sf_g, sf_i, sf_d, params.Handle); + if (!err) + file->private_data = sf_d; + } + else + err = -ENOENT; + + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("sf_dir_open(): VbglR0SfClose(%s) after err=%d failed rc=%Rrc\n", + sf_i->path->String.utf8, err, rc)); + } + else + err = -EPERM; + + if (err) + sf_dir_info_free(sf_d); + + return err; +} + + +/** + * This is called when reference count of [file] goes to zero. Notify + * the host that it can free whatever is associated with this directory + * and deallocate our own internal buffers + * + * @param inode inode + * @param file file + * returns 0 on success, Linux error code otherwise + */ +static int sf_dir_release(struct inode *inode, struct file *file) +{ + TRACE(); + + if (file->private_data) + sf_dir_info_free(file->private_data); + + return 0; +} + +/** + * Translate RTFMODE into DT_xxx (in conjunction to rtDirType()) + * @param fMode file mode + * returns d_type + */ +static int sf_get_d_type(RTFMODE fMode) +{ + int d_type; + switch (fMode & RTFS_TYPE_MASK) + { + case RTFS_TYPE_FIFO: d_type = DT_FIFO; break; + case RTFS_TYPE_DEV_CHAR: d_type = DT_CHR; break; + case RTFS_TYPE_DIRECTORY: d_type = DT_DIR; break; + case RTFS_TYPE_DEV_BLOCK: d_type = DT_BLK; break; + case RTFS_TYPE_FILE: d_type = DT_REG; break; + case RTFS_TYPE_SYMLINK: d_type = DT_LNK; break; + case RTFS_TYPE_SOCKET: d_type = DT_SOCK; break; + case RTFS_TYPE_WHITEOUT: d_type = DT_WHT; break; + default: d_type = DT_UNKNOWN; break; + } + return d_type; +} + +/** + * Extract element ([dir]->f_pos) from the directory [dir] into [d_name]. + * + * @returns 0 for success, 1 for end reached, Linux error code otherwise. + */ +static int sf_getdent(struct file *dir, char d_name[NAME_MAX], int *d_type) +{ + loff_t cur; + struct sf_glob_info *sf_g; + struct sf_dir_info *sf_d; + struct sf_inode_info *sf_i; + struct inode *inode; + struct list_head *pos, *list; + + TRACE(); + + inode = GET_F_DENTRY(dir)->d_inode; + sf_i = GET_INODE_INFO(inode); + sf_g = GET_GLOB_INFO(inode->i_sb); + sf_d = dir->private_data; + + BUG_ON(!sf_g); + BUG_ON(!sf_d); + BUG_ON(!sf_i); + + if (sf_i->force_reread) + { + int rc; + int err; + SHFLCREATEPARMS params; + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + params.CreateFlags = 0 + | SHFL_CF_DIRECTORY + | SHFL_CF_ACT_OPEN_IF_EXISTS + | SHFL_CF_ACT_FAIL_IF_NEW + | SHFL_CF_ACCESS_READ + ; + + LogFunc(("sf_getdent: calling VbglR0SfCreate, folder %s, flags %#x\n", + sf_i->path->String.utf8, params.CreateFlags)); + rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, ¶ms); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfCreate(%s) failed rc=%Rrc\n", + sf_i->path->String.utf8, rc)); + return -EPERM; + } + + if (params.Result != SHFL_FILE_EXISTS) + { + LogFunc(("directory %s does not exist\n", sf_i->path->String.utf8)); + sf_dir_info_free(sf_d); + return -ENOENT; + } + + sf_dir_info_empty(sf_d); + err = sf_dir_read_all(sf_g, sf_i, sf_d, params.Handle); + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc)); + if (err) + return err; + + sf_i->force_reread = 0; + } + + cur = 0; + list = &sf_d->info_list; + list_for_each(pos, list) + { + struct sf_dir_buf *b; + SHFLDIRINFO *info; + loff_t i; + + b = list_entry(pos, struct sf_dir_buf, head); + if (dir->f_pos >= cur + b->cEntries) + { + cur += b->cEntries; + continue; + } + + for (i = 0, info = b->buf; i < dir->f_pos - cur; ++i) + { + size_t size; + + size = offsetof(SHFLDIRINFO, name.String) + info->name.u16Size; + info = (SHFLDIRINFO *) ((uintptr_t) info + size); + } + + *d_type = sf_get_d_type(info->Info.Attr.fMode); + + return sf_nlscpy(sf_g, d_name, NAME_MAX, + info->name.String.utf8, info->name.u16Length); + } + + return 1; +} + +/** + * This is called when vfs wants to populate internal buffers with + * directory [dir]s contents. [opaque] is an argument to the + * [filldir]. [filldir] magically modifies it's argument - [opaque] + * and takes following additional arguments (which i in turn get from + * the host via sf_getdent): + * + * name : name of the entry (i must also supply it's length huh?) + * type : type of the entry (FILE | DIR | etc) (i ellect to use DT_UNKNOWN) + * pos : position/index of the entry + * ino : inode number of the entry (i fake those) + * + * [dir] contains: + * f_pos : cursor into the directory listing + * private_data : mean of communication with the host side + * + * Extract elements from the directory listing (incrementing f_pos + * along the way) and feed them to [filldir] until: + * + * a. there are no more entries (i.e. sf_getdent set done to 1) + * b. failure to compute fake inode number + * c. filldir returns an error (see comment on that) + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) +static int sf_dir_iterate(struct file *dir, struct dir_context *ctx) +#else +static int sf_dir_read(struct file *dir, void *opaque, filldir_t filldir) +#endif +{ + TRACE(); + for (;;) + { + int err; + ino_t fake_ino; + loff_t sanity; + char d_name[NAME_MAX]; + int d_type = DT_UNKNOWN; + + err = sf_getdent(dir, d_name, &d_type); + switch (err) + { + case 1: + return 0; + + case 0: + break; + + case -1: + default: + /* skip erroneous entry and proceed */ + LogFunc(("sf_getdent error %d\n", err)); + dir->f_pos += 1; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) + ctx->pos += 1; +#endif + continue; + } + + /* d_name now contains a valid entry name */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) + sanity = ctx->pos + 0xbeef; +#else + sanity = dir->f_pos + 0xbeef; +#endif + fake_ino = sanity; + if (sanity - fake_ino) + { + LogRelFunc(("can not compute ino\n")); + return -EINVAL; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) + if (!dir_emit(ctx, d_name, strlen(d_name), fake_ino, d_type)) + { + LogFunc(("dir_emit failed\n")); + return 0; + } +#else + err = filldir(opaque, d_name, strlen(d_name), dir->f_pos, fake_ino, d_type); + if (err) + { + LogFunc(("filldir returned error %d\n", err)); + /* Rely on the fact that filldir returns error + only when it runs out of space in opaque */ + return 0; + } +#endif + + dir->f_pos += 1; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) + ctx->pos += 1; +#endif + } + + BUG(); +} + +struct file_operations sf_dir_fops = +{ + .open = sf_dir_open, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0) + .iterate = sf_dir_iterate, +#else + .readdir = sf_dir_read, +#endif + .release = sf_dir_release, + .read = generic_read_dir +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37) + , .llseek = generic_file_llseek +#endif +}; + + +/* iops */ + +/** + * This is called when vfs failed to locate dentry in the cache. The + * job of this function is to allocate inode and link it to dentry. + * [dentry] contains the name to be looked in the [parent] directory. + * Failure to locate the name is not a "hard" error, in this case NULL + * inode is added to [dentry] and vfs should proceed trying to create + * the entry via other means. NULL(or "positive" pointer) ought to be + * returned in case of success and "negative" pointer on error + */ +static struct dentry *sf_lookup(struct inode *parent, struct dentry *dentry +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) + , unsigned int flags +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + , struct nameidata *nd +#endif + ) +{ + int err; + struct sf_inode_info *sf_i, *sf_new_i; + struct sf_glob_info *sf_g; + SHFLSTRING *path; + struct inode *inode; + ino_t ino; + SHFLFSOBJINFO fsinfo; + + TRACE(); + sf_g = GET_GLOB_INFO(parent->i_sb); + sf_i = GET_INODE_INFO(parent); + + BUG_ON(!sf_g); + BUG_ON(!sf_i); + + err = sf_path_from_dentry(__func__, sf_g, sf_i, dentry, &path); + if (err) + goto fail0; + + err = sf_stat(__func__, sf_g, path, &fsinfo, 1); + if (err) + { + if (err == -ENOENT) + { + /* -ENOENT: add NULL inode to dentry so it later can be + created via call to create/mkdir/open */ + kfree(path); + inode = NULL; + } + else + goto fail1; + } + else + { + sf_new_i = kmalloc(sizeof(*sf_new_i), GFP_KERNEL); + if (!sf_new_i) + { + LogRelFunc(("could not allocate memory for new inode info\n")); + err = -ENOMEM; + goto fail1; + } + sf_new_i->handle = SHFL_HANDLE_NIL; + sf_new_i->force_reread = 0; + + ino = iunique(parent->i_sb, 1); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + inode = iget_locked(parent->i_sb, ino); +#else + inode = iget(parent->i_sb, ino); +#endif + if (!inode) + { + LogFunc(("iget failed\n")); + err = -ENOMEM; /* XXX: ??? */ + goto fail2; + } + + SET_INODE_INFO(inode, sf_new_i); + sf_init_inode(sf_g, inode, &fsinfo); + sf_new_i->path = path; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + unlock_new_inode(inode); +#endif + } + + sf_i->force_restat = 0; + dentry->d_time = jiffies; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) + d_set_d_op(dentry, &sf_dentry_ops); +#else + dentry->d_op = &sf_dentry_ops; +#endif + d_add(dentry, inode); + return NULL; + +fail2: + kfree(sf_new_i); + +fail1: + kfree(path); + +fail0: + return ERR_PTR(err); +} + +/** + * This should allocate memory for sf_inode_info, compute a unique inode + * number, get an inode from vfs, initialize inode info, instantiate + * dentry. + * + * @param parent inode entry of the directory + * @param dentry directory cache entry + * @param path path name + * @param info file information + * @param handle handle + * @returns 0 on success, Linux error code otherwise + */ +static int sf_instantiate(struct inode *parent, struct dentry *dentry, + SHFLSTRING *path, PSHFLFSOBJINFO info, SHFLHANDLE handle) +{ + int err; + ino_t ino; + struct inode *inode; + struct sf_inode_info *sf_new_i; + struct sf_glob_info *sf_g = GET_GLOB_INFO(parent->i_sb); + + TRACE(); + BUG_ON(!sf_g); + + sf_new_i = kmalloc(sizeof(*sf_new_i), GFP_KERNEL); + if (!sf_new_i) + { + LogRelFunc(("could not allocate inode info.\n")); + err = -ENOMEM; + goto fail0; + } + + ino = iunique(parent->i_sb, 1); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + inode = iget_locked(parent->i_sb, ino); +#else + inode = iget(parent->i_sb, ino); +#endif + if (!inode) + { + LogFunc(("iget failed\n")); + err = -ENOMEM; + goto fail1; + } + + sf_init_inode(sf_g, inode, info); + sf_new_i->path = path; + SET_INODE_INFO(inode, sf_new_i); + sf_new_i->force_restat = 1; + sf_new_i->force_reread = 0; + + d_instantiate(dentry, inode); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + unlock_new_inode(inode); +#endif + + /* Store this handle if we leave the handle open. */ + sf_new_i->handle = handle; + return 0; + +fail1: + kfree(sf_new_i); + +fail0: + return err; + +} + +/** + * Create a new regular file / directory. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @param mode file mode + * @param fDirectory true if directory, false otherwise + * @returns 0 on success, Linux error code otherwise + */ +static int sf_create_aux(struct inode *parent, struct dentry *dentry, + umode_t mode, int fDirectory) +{ + int rc, err; + SHFLCREATEPARMS params; + SHFLSTRING *path; + struct sf_inode_info *sf_i = GET_INODE_INFO(parent); + struct sf_glob_info *sf_g = GET_GLOB_INFO(parent->i_sb); + + TRACE(); + BUG_ON(!sf_i); + BUG_ON(!sf_g); + + err = sf_path_from_dentry(__func__, sf_g, sf_i, dentry, &path); + if (err) + goto fail0; + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + params.CreateFlags = 0 + | SHFL_CF_ACT_CREATE_IF_NEW + | SHFL_CF_ACT_FAIL_IF_EXISTS + | SHFL_CF_ACCESS_READWRITE + | (fDirectory ? SHFL_CF_DIRECTORY : 0) + ; + params.Info.Attr.fMode = 0 + | (fDirectory ? RTFS_TYPE_DIRECTORY : RTFS_TYPE_FILE) + | (mode & S_IRWXUGO) + ; + params.Info.Attr.enmAdditional = RTFSOBJATTRADD_NOTHING; + + LogFunc(("sf_create_aux: calling VbglR0SfCreate, folder %s, flags %#x\n", + path->String.utf8, params.CreateFlags)); + rc = VbglR0SfCreate(&client_handle, &sf_g->map, path, ¶ms); + if (RT_FAILURE(rc)) + { + if (rc == VERR_WRITE_PROTECT) + { + err = -EROFS; + goto fail1; + } + err = -EPROTO; + LogFunc(("(%d): VbglR0SfCreate(%s) failed rc=%Rrc\n", + fDirectory, sf_i->path->String.utf8, rc)); + goto fail1; + } + + if (params.Result != SHFL_FILE_CREATED) + { + err = -EPERM; + LogFunc(("(%d): could not create file %s result=%d\n", + fDirectory, sf_i->path->String.utf8, params.Result)); + goto fail1; + } + + err = sf_instantiate(parent, dentry, path, ¶ms.Info, + fDirectory ? SHFL_HANDLE_NIL : params.Handle); + if (err) + { + LogFunc(("(%d): could not instantiate dentry for %s err=%d\n", + fDirectory, sf_i->path->String.utf8, err)); + goto fail2; + } + + /* + * Don't close this handle right now. We assume that the same file is + * opened with sf_reg_open() and later closed with sf_reg_close(). Save + * the handle in between. Does not apply to directories. True? + */ + if (fDirectory) + { + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("(%d): VbglR0SfClose failed rc=%Rrc\n", fDirectory, rc)); + } + + sf_i->force_restat = 1; + return 0; + +fail2: + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("(%d): VbglR0SfClose failed rc=%Rrc\n", fDirectory, rc)); + +fail1: + kfree(path); + +fail0: + return err; +} + +/** + * Create a new regular file. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @param mode file mode + * @param excl Possible O_EXCL... + * @returns 0 on success, Linux error code otherwise + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) || defined(DOXYGEN_RUNNING) +static int sf_create(struct inode *parent, struct dentry *dentry, umode_t mode, bool excl) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) +static int sf_create(struct inode *parent, struct dentry *dentry, umode_t mode, struct nameidata *nd) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int sf_create(struct inode *parent, struct dentry *dentry, int mode, struct nameidata *nd) +#else +static int sf_create(struct inode *parent, struct dentry *dentry, int mode) +#endif +{ + TRACE(); + return sf_create_aux(parent, dentry, mode, 0); +} + +/** + * Create a new directory. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @param mode file mode + * @returns 0 on success, Linux error code otherwise + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) +static int sf_mkdir(struct inode *parent, struct dentry *dentry, umode_t mode) +#else +static int sf_mkdir(struct inode *parent, struct dentry *dentry, int mode) +#endif +{ + TRACE(); + return sf_create_aux(parent, dentry, mode, 1); +} + +/** + * Remove a regular file / directory. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @param fDirectory true if directory, false otherwise + * @returns 0 on success, Linux error code otherwise + */ +static int sf_unlink_aux(struct inode *parent, struct dentry *dentry, int fDirectory) +{ + int rc, err; + struct sf_glob_info *sf_g = GET_GLOB_INFO(parent->i_sb); + struct sf_inode_info *sf_i = GET_INODE_INFO(parent); + SHFLSTRING *path; + uint32_t fFlags; + + TRACE(); + BUG_ON(!sf_g); + + err = sf_path_from_dentry(__func__, sf_g, sf_i, dentry, &path); + if (err) + goto fail0; + + fFlags = fDirectory ? SHFL_REMOVE_DIR : SHFL_REMOVE_FILE; + if ( dentry->d_inode + && ((dentry->d_inode->i_mode & S_IFLNK) == S_IFLNK)) + fFlags |= SHFL_REMOVE_SYMLINK; + rc = VbglR0SfRemove(&client_handle, &sf_g->map, path, fFlags); + if (RT_FAILURE(rc)) + { + LogFunc(("(%d): VbglR0SfRemove(%s) failed rc=%Rrc\n", fDirectory, path->String.utf8, rc)); + err = -RTErrConvertToErrno(rc); + goto fail1; + } + + /* directory access/change time changed */ + sf_i->force_restat = 1; + /* directory content changed */ + sf_i->force_reread = 1; + + err = 0; + +fail1: + kfree(path); + +fail0: + return err; +} + +/** + * Remove a regular file. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @returns 0 on success, Linux error code otherwise + */ +static int sf_unlink(struct inode *parent, struct dentry *dentry) +{ + TRACE(); + return sf_unlink_aux(parent, dentry, 0); +} + +/** + * Remove a directory. + * + * @param parent inode of the directory + * @param dentry directory cache entry + * @returns 0 on success, Linux error code otherwise + */ +static int sf_rmdir(struct inode *parent, struct dentry *dentry) +{ + TRACE(); + return sf_unlink_aux(parent, dentry, 1); +} + +/** + * Rename a regular file / directory. + * + * @param old_parent inode of the old parent directory + * @param old_dentry old directory cache entry + * @param new_parent inode of the new parent directory + * @param new_dentry new directory cache entry + * @param flags flags + * @returns 0 on success, Linux error code otherwise + */ +static int sf_rename(struct inode *old_parent, struct dentry *old_dentry, + struct inode *new_parent, struct dentry *new_dentry +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) + , unsigned flags +#endif + ) +{ + int err = 0, rc = VINF_SUCCESS; + struct sf_glob_info *sf_g = GET_GLOB_INFO(old_parent->i_sb); + + TRACE(); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) + if (flags) + { + LogFunc(("rename with flags=%x\n", flags)); + return -EINVAL; + } +#endif + + if (sf_g != GET_GLOB_INFO(new_parent->i_sb)) + { + LogFunc(("rename with different roots\n")); + err = -EINVAL; + } + else + { + struct sf_inode_info *sf_old_i = GET_INODE_INFO(old_parent); + struct sf_inode_info *sf_new_i = GET_INODE_INFO(new_parent); + /* As we save the relative path inside the inode structure, we need to change + this if the rename is successful. */ + struct sf_inode_info *sf_file_i = GET_INODE_INFO(old_dentry->d_inode); + SHFLSTRING *old_path; + SHFLSTRING *new_path; + + BUG_ON(!sf_old_i); + BUG_ON(!sf_new_i); + BUG_ON(!sf_file_i); + + old_path = sf_file_i->path; + err = sf_path_from_dentry(__func__, sf_g, sf_new_i, + new_dentry, &new_path); + if (err) + LogFunc(("failed to create new path\n")); + else + { + int fDir = ((old_dentry->d_inode->i_mode & S_IFDIR) != 0); + + rc = VbglR0SfRename(&client_handle, &sf_g->map, old_path, + new_path, fDir ? 0 : SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS); + if (RT_SUCCESS(rc)) + { + kfree(old_path); + sf_new_i->force_restat = 1; + sf_old_i->force_restat = 1; /* XXX: needed? */ + /* Set the new relative path in the inode. */ + sf_file_i->path = new_path; + } + else + { + LogFunc(("VbglR0SfRename failed rc=%Rrc\n", rc)); + err = -RTErrConvertToErrno(rc); + kfree(new_path); + } + } + } + return err; +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int sf_symlink(struct inode *parent, struct dentry *dentry, const char *symname) +{ + int err; + int rc; + struct sf_inode_info *sf_i; + struct sf_glob_info *sf_g; + SHFLSTRING *path, *ssymname; + SHFLFSOBJINFO info; + int symname_len = strlen(symname) + 1; + + TRACE(); + sf_g = GET_GLOB_INFO(parent->i_sb); + sf_i = GET_INODE_INFO(parent); + + BUG_ON(!sf_g); + BUG_ON(!sf_i); + + err = sf_path_from_dentry(__func__, sf_g, sf_i, dentry, &path); + if (err) + goto fail0; + + ssymname = kmalloc(offsetof(SHFLSTRING, String.utf8) + symname_len, GFP_KERNEL); + if (!ssymname) + { + LogRelFunc(("kmalloc failed, caller=sf_symlink\n")); + err = -ENOMEM; + goto fail1; + } + + ssymname->u16Length = symname_len - 1; + ssymname->u16Size = symname_len; + memcpy(ssymname->String.utf8, symname, symname_len); + + rc = VbglR0SfSymlink(&client_handle, &sf_g->map, path, ssymname, &info); + kfree(ssymname); + + if (RT_FAILURE(rc)) + { + if (rc == VERR_WRITE_PROTECT) + { + err = -EROFS; + goto fail1; + } + LogFunc(("VbglR0SfSymlink(%s) failed rc=%Rrc\n", + sf_i->path->String.utf8, rc)); + err = -EPROTO; + goto fail1; + } + + err = sf_instantiate(parent, dentry, path, &info, SHFL_HANDLE_NIL); + if (err) + { + LogFunc(("could not instantiate dentry for %s err=%d\n", + sf_i->path->String.utf8, err)); + goto fail1; + } + + sf_i->force_restat = 1; + return 0; + +fail1: + kfree(path); +fail0: + return err; +} +#endif + +struct inode_operations sf_dir_iops = +{ + .lookup = sf_lookup, + .create = sf_create, + .mkdir = sf_mkdir, + .rmdir = sf_rmdir, + .unlink = sf_unlink, + .rename = sf_rename, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) + .revalidate = sf_inode_revalidate +#else + .getattr = sf_getattr, + .setattr = sf_setattr, + .symlink = sf_symlink +#endif +}; --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/divdi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/divdi3.c @@ -0,0 +1,70 @@ +/* $NetBSD: divdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)divdi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: divdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Divide two signed quads. + * ??? if -1/2 should produce -1 on this machine, this code is wrong + */ +quad_t +__divdi3(a, b) + quad_t a, b; +{ + u_quad_t ua, ub, uq; + int neg = 0; + + ua = a; + ub = b; + + if (a < 0) + ua = -ua, neg ^= 1; + if (b < 0) + ub = -ub, neg ^= 1; + + uq = __qdivrem(ua, ub, (u_quad_t *)0); + if (neg) + uq = - uq; + return uq; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VBoxGuest.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VBoxGuest.h @@ -0,0 +1,927 @@ +/** @file + * VBoxGuest - VirtualBox Guest Additions Driver Interface. (ADD,DEV) + * + * @note This file is used by 16-bit compilers too (OpenWatcom). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VBoxGuest_h +#define ___VBox_VBoxGuest_h + +#include +#include +#include +#include + + + +/** @defgroup grp_vboxguest VirtualBox Guest Additions Device Driver + * + * Also know as VBoxGuest. + * + * @{ + */ + +/** @defgroup grp_vboxguest_ioc VirtualBox Guest Additions Driver Interface + * + * @note This is considered internal in ring-3, please use the VbglR3 functions. + * + * - I/O controls for user and/or kernel mode starts at 0. + * - IDC specific requests descends from 127. + * - Bits 7 and 6 are currently reserved for future hacks. + * + * @remarks When creating new IOCtl interfaces keep in mind that not all OSes supports + * reporting back the output size. (This got messed up a little bit in VBoxDrv.) + * + * The request size is also a little bit tricky as it's passed as part of the + * request code on unix. The size field is 14 bits on Linux, 12 bits on *BSD, + * 13 bits Darwin, and 8-bits on Solaris. All the BSDs and Darwin kernels + * will make use of the size field, while Linux and Solaris will not. We're of + * course using the size to validate and/or map/lock the request, so it has + * to be valid. + * + * For Solaris we will have to do something special though, 255 isn't + * sufficient for all we need. A 4KB restriction (BSD) is probably not + * too problematic (yet) as a general one. + * + * More info can be found in SUPDRVIOC.h and related sources. + * + * @remarks If adding interfaces that only has input or only has output, some new macros + * needs to be created so the most efficient IOCtl data buffering method can be + * used. + * + * @{ + */ +#if !defined(IN_RC) && !defined(IN_RING0_AGNOSTIC) && !defined(IPRT_NO_CRT) + +/** Fictive start address of the hypervisor physical memory for MmMapIoSpace. */ +#define VBOXGUEST_HYPERVISOR_PHYSICAL_START UINT32_C(0xf8000000) + +#ifdef RT_OS_DARWIN +/** Cookie used to fend off some unwanted clients to the IOService. */ +# define VBOXGUEST_DARWIN_IOSERVICE_COOKIE UINT32_C(0x56426f78) /* 'VBox' */ +#endif + + +#if defined(RT_OS_WINDOWS) +# ifndef CTL_CODE +# include +# endif + /* Automatic buffering, size not encoded. */ +# define VBGL_IOCTL_CODE_SIZE(Function, Size) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_BIG(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_FAST(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_NEITHER, FILE_WRITE_ACCESS) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "\\\\.\\VBoxGuest" +/** The support service name. */ +# define VBOXGUEST_SERVICE_NAME "VBoxGuest" +/** Global name for Win2k+ */ +# define VBOXGUEST_DEVICE_NAME_GLOBAL "\\\\.\\Global\\VBoxGuest" +/** Win32 driver name */ +# define VBOXGUEST_DEVICE_NAME_NT L"\\Device\\VBoxGuest" +/** Device name. */ +# define VBOXGUEST_DEVICE_NAME_DOS L"\\DosDevices\\VBoxGuest" + +#elif defined(RT_OS_OS2) + /* No automatic buffering, size not encoded. */ +# define VBGL_IOCTL_CATEGORY 0xc2 +# define VBGL_IOCTL_CODE_SIZE(Function, Size) ((unsigned char)(Function)) +# define VBGL_IOCTL_CODE_BIG(Function) ((unsigned char)(Function)) +# define VBGL_IOCTL_CATEGORY_FAST 0xc3 /**< Also defined in VBoxGuestA-os2.asm. */ +# define VBGL_IOCTL_CODE_FAST(Function) ((unsigned char)(Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "\\Dev\\VBoxGst$" +/** Short device name for AttachDD. + * @note Case sensitive. Must match what VBoxGuestA-os2.asm says! */ +# define VBOXGUEST_DEVICE_NAME_SHORT "vboxgst$" + +#elif defined(RT_OS_SOLARIS) + /* No automatic buffering, size limited to 255 bytes => use VBGLBIGREQ for everything. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOWRN('V', (Function), sizeof(VBGLREQHDR)) +# define VBGL_IOCTL_CODE_BIG(Function) _IOWRN('V', (Function), sizeof(VBGLREQHDR)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO( 'F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( ((a_uIOCtl) & 0x0000ff00) == ('F' << 8) ) + +#elif defined(RT_OS_LINUX) + /* No automatic buffering, size limited to 16KB. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOC(_IOC_READ | _IOC_WRITE, 'V', (Function), (Size)) +# define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) _IOC_NR((a_uIOCtl)) +# define VBOXGUEST_USER_DEVICE_NAME "/dev/vboxuser" + +#elif defined(RT_OS_HAIKU) + /* No automatic buffering, size not encoded. */ + /** @todo do something better */ +# define VBGL_IOCTL_CODE_SIZE(Function, Size) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_BIG(Function) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) (0x56420000 | (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) +# define VBOXGUEST_DEVICE_NAME "/dev/misc/vboxguest" + +#else /* BSD Like */ + /* Automatic buffering, size limited to 4KB on *BSD and 8KB on Darwin - commands the limit, 4KB. */ +# include +# define VBGL_IOCTL_CODE_SIZE(Function, Size) _IOC(IOC_INOUT, 'V', (Function), (Size)) +# define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) +# define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) +# define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK))) +# define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( IOCGROUP(a_uIOCtl) == 'F' ) +#endif + + +/** @todo It would be nice if we could have two defines without paths. */ + +/** @def VBOXGUEST_DEVICE_NAME + * The support device name. */ +#ifndef VBOXGUEST_DEVICE_NAME /* PORTME */ +# define VBOXGUEST_DEVICE_NAME "/dev/vboxguest" +#endif + +/** @def VBOXGUEST_USER_DEVICE_NAME + * The support device name of the user accessible device node. */ +#ifndef VBOXGUEST_USER_DEVICE_NAME +# define VBOXGUEST_USER_DEVICE_NAME VBOXGUEST_DEVICE_NAME +#endif + + +/** + * The VBoxGuest I/O control version. + * + * As usual, the high word contains the major version and changes to it + * signifies incompatible changes. + * + * The lower word is the minor version number, it is increased when new + * functions are added or existing changed in a backwards compatible manner. + */ +#define VBGL_IOC_VERSION UINT32_C(0x00010000) + + + +/** @name VBGL_IOCTL_DRIVER_INFO + * Adjust and get driver information. + * + * @note May switch the session to a backwards compatible interface version if + * uClientVersion indicates older client code. + * + * @{ + */ +#define VBGL_IOCTL_DRIVER_VERSION_INFO VBGL_IOCTL_CODE_SIZE(0, VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE sizeof(VBGLIOCDRIVERVERSIONINFO) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_IN RT_UOFFSET_AFTER(VBGLIOCDRIVERVERSIONINFO, u.In) +#define VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_OUT sizeof(VBGLIOCDRIVERVERSIONINFO) +typedef struct VBGLIOCDRIVERVERSIONINFO +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The requested interface version number (VBGL_IOC_VERSION). */ + uint32_t uReqVersion; + /** The minimum interface version number + * (typically the major version part of VBGL_IOC_VERSION). */ + uint32_t uMinVersion; + /** Reserved, MBZ. */ + uint32_t uReserved1; + /** Reserved, MBZ. */ + uint32_t uReserved2; + } In; + struct + { + /** Interface version for this session (typically VBGL_IOC_VERSION). */ + uint32_t uSessionVersion; + /** The version of the IDC interface (VBGL_IOC_VERSION). */ + uint32_t uDriverVersion; + /** The SVN revision of the driver. + * This will be set to 0 if not compiled into the driver. */ + uint32_t uDriverRevision; + /** Reserved \#1 (will be returned as zero until defined). */ + uint32_t uReserved1; + /** Reserved \#2 (will be returned as zero until defined). */ + uint32_t uReserved2; + } Out; + } u; +} VBGLIOCDRIVERVERSIONINFO, RT_FAR *PVBGLIOCDRIVERVERSIONINFO; +AssertCompileSize(VBGLIOCDRIVERVERSIONINFO, 24 + 20); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_DRIVER_VERSION_INFO_SIZE_IN == 24 + 16); +#endif +/** @} */ + + +/** @name VBGL_IOCTL_GET_PORT_INFO + * Query VMMDev I/O port region and MMIO mapping address. + * @remarks Ring-0 only. + * @{ + */ +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO VBGL_IOCTL_CODE_SIZE(1, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE sizeof(VBGLIOCGETVMMDEVIOINFO) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_OUT sizeof(VBGLIOCGETVMMDEVIOINFO) +typedef struct VBGLIOCGETVMMDEVIOINFO +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The MMIO mapping. NULL if no MMIO region. */ + struct VMMDevMemory volatile RT_FAR *pvVmmDevMapping; + /** The I/O port address. */ + RTIOPORT IoPort; + /** Padding, ignore. */ + RTIOPORT auPadding[HC_ARCH_BITS == 64 ? 3 : 1]; + } Out; + } u; +} VBGLIOCGETVMMDEVIOINFO, RT_FAR *PVBGLIOCGETVMMDEVIOINFO; +AssertCompileSize(VBGLIOCGETVMMDEVIOINFO, 24 + (HC_ARCH_BITS == 64 ? 16 : 8)); +/** @} */ + + +/** @name VBGL_IOCTL_VMMDEV_REQUEST + * IOCTL to VBoxGuest to perform a VMM Device request less than 1KB in size. + * @{ + */ +#define VBGL_IOCTL_VMMDEV_REQUEST(a_cb) VBGL_IOCTL_CODE_SIZE(2, (a_cb)) +/** @} */ + + +/** @name VBGL_IOCTL_VMMDEV_REQUEST_BIG + * IOCTL to VBoxGuest to perform a VMM Device request that can 1KB or larger. + * @{ + */ +#define VBGL_IOCTL_VMMDEV_REQUEST_BIG VBGL_IOCTL_CODE_BIG(3) +/** @} */ + + +#ifdef VBOX_WITH_HGCM +/** @name VBGL_IOCTL_HGCM_CONNECT + * Connect to a HGCM service. + * @{ */ +# define VBGL_IOCTL_HGCM_CONNECT VBGL_IOCTL_CODE_SIZE(4, VBGL_IOCTL_HGCM_CONNECT_SIZE) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE sizeof(VBGLIOCHGCMCONNECT) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE_IN sizeof(VBGLIOCHGCMCONNECT) +# define VBGL_IOCTL_HGCM_CONNECT_SIZE_OUT RT_UOFFSET_AFTER(VBGLIOCHGCMCONNECT, u.Out) +typedef struct VBGLIOCHGCMCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + HGCMServiceLocation Loc; + } In; + struct + { + uint32_t idClient; + } Out; + } u; +} VBGLIOCHGCMCONNECT, RT_FAR *PVBGLIOCHGCMCONNECT; +AssertCompileSize(VBGLIOCHGCMCONNECT, 24 + 132); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_HGCM_CONNECT_SIZE_OUT == 24 + 4); +#endif +/** @} */ + + +/** @name VBGL_IOCTL_HGCM_DISCONNECT + * Disconnect from a HGCM service. + * @{ */ +# define VBGL_IOCTL_HGCM_DISCONNECT VBGL_IOCTL_CODE_SIZE(5, VBGL_IOCTL_HGCM_DISCONNECT_SIZE) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE sizeof(VBGLIOCHGCMDISCONNECT) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE_IN sizeof(VBGLIOCHGCMDISCONNECT) +# define VBGL_IOCTL_HGCM_DISCONNECT_SIZE_OUT sizeof(VBGLREQHDR) +/** @note This is also used by a VbglR0 API. */ +typedef struct VBGLIOCHGCMDISCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + uint32_t idClient; + } In; + } u; +} VBGLIOCHGCMDISCONNECT, RT_FAR *PVBGLIOCHGCMDISCONNECT; +AssertCompileSize(VBGLIOCHGCMDISCONNECT, 24 + 4); +/** @} */ + + +/** @name VBGL_IOCTL_HGCM_CALL, VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA + * + * Make a call to a HGCM servicesure. There are several variations here. + * + * The VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA variation is for other drivers (like + * the graphics ones) passing on requests from user land that contains user + * data. These calls are always interruptible. + * + * @{ */ +# define VBGL_IOCTL_HGCM_CALL_32(a_cb) VBGL_IOCTL_CODE_SIZE(6, (a_cb)) +# define VBGL_IOCTL_HGCM_CALL_64(a_cb) VBGL_IOCTL_CODE_SIZE(7, (a_cb)) +# if ARCH_BITS == 64 +# define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_64(a_cb) +# else +# define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_32(a_cb) +# endif +# define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb) VBGL_IOCTL_CODE_SIZE(8, (a_cb)) +/** @} */ +#endif /* VBOX_WITH_HGCM */ + + +/** @name VBGL_IOCTL_LOG + * IOCTL to VBoxGuest to perform backdoor logging. + * @{ */ +#define VBOXGUEST_IOCTL_LOG(Size) +#define VBGL_IOCTL_LOG(a_cchMsg) VBGL_IOCTL_CODE_BIG(9) +#define VBGL_IOCTL_LOG_SIZE(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) +#define VBGL_IOCTL_LOG_SIZE_IN(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) +#define VBGL_IOCTL_LOG_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCLOG +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The log message. + * The length is determined from the input size and zero termination. */ + char szMsg[RT_FLEXIBLE_ARRAY_IN_NESTED_UNION]; + } In; + } u; +} VBGLIOCLOG, RT_FAR *PVBGLIOCLOG; +/** @} */ + + +/** @name VBGL_IOCTL_WAIT_FOR_EVENTS + * Wait for a VMMDev host event notification. + * @{ + */ +#define VBGL_IOCTL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(10, VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLIOCWAITFOREVENTS) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLIOCWAITFOREVENTS) +#define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_OUT RT_UOFFSET_AFTER(VBGLIOCWAITFOREVENTS, u.Out) +typedef struct VBGLIOCWAITFOREVENTS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Timeout in milliseconds. */ + uint32_t cMsTimeOut; + /** Events to wait for. */ + uint32_t fEvents; + } In; + struct + { + /** Events that occurred. */ + uint32_t fEvents; + } Out; + } u; +} VBGLIOCWAITFOREVENTS, RT_FAR *PVBGLIOCWAITFOREVENTS; +AssertCompileSize(VBGLIOCWAITFOREVENTS, 24 + 8); +/** @} */ + + +/** @name VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS + * IOCTL to VBoxGuest to interrupt (cancel) any pending + * VBGL_IOCTL_WAIT_FOR_EVENTS and return. + * + * Handled inside the guest additions and not seen by the host at all. + * After calling this, VBGL_IOCTL_WAIT_FOR_EVENTS should no longer be called in + * the same session. At the time of writing this is not enforced; at the time + * of reading it may be. + * @see VBGL_IOCTL_WAIT_FOR_EVENTS + * + * @{ + */ +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(11, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLREQHDR) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_OUT sizeof(VBGLREQHDR) +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_FILTER_MASK + * IOCTL to VBoxGuest to control the event filter mask. + * @{ */ +#define VBGL_IOCTL_CHANGE_FILTER_MASK VBGL_IOCTL_CODE_SIZE(12, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE sizeof(VBGLIOCCHANGEFILTERMASK) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_IN sizeof(VBGLIOCCHANGEFILTERMASK) +#define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCCHANGEFILTERMASK +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Flags to set. */ + uint32_t fOrMask; + /** Flags to remove. */ + uint32_t fNotMask; + } In; + } u; +} VBGLIOCCHANGEFILTERMASK, RT_FAR *PVBGLIOCCHANGEFILTERMASK; +AssertCompileSize(VBGLIOCCHANGEFILTERMASK, 24 + 8); +/** @} */ + + +/** @name VBGL_IOCTL_GUEST_CAPS_ACQUIRE + * IOCTL to for acquiring and releasing guest capabilities. + * + * This is used for multiple purposes: + * 1. By doing @a acquire r3 client application (e.g. VBoxTray) claims it will + * use the given session for performing operations like @a seamless or + * @a auto-resize, thus, if the application terminates, the driver will + * automatically cleanup the caps reported to host, so that host knows guest + * does not support them anymore + * 2. In a multy-user environment this will not allow r3 applications (like + * VBoxTray) running in different user sessions simultaneously to interfere + * with each other. An r3 client application (like VBoxTray) is responsible + * for Acquiring/Releasing caps properly as needed. + * + * + * VERR_RESOURCE_BUSY is returned if any capabilities in the fOrMask are + * currently acquired by some other VBoxGuest session. + * + * @{ + */ +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(13, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCACQUIREGUESTCAPS) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCACQUIREGUESTCAPS) +#define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_OUT sizeof(VBGLREQHDR) + +/** Default operation (full acquire/release). */ +#define VBGL_IOC_AGC_FLAGS_DEFAULT UINT32_C(0x00000000) +/** Configures VBoxGuest to use the specified caps in Acquire mode, w/o making + * any caps acquisition/release. This is only possible to set acquire mode for + * caps, but not clear it, so fNotMask is ignored when this flag is set. */ +#define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE UINT32_C(0x00000001) +/** Valid flag mask. */ +#define VBGL_IOC_AGC_FLAGS_VALID_MASK UINT32_C(0x00000001) + +typedef struct VBGLIOCACQUIREGUESTCAPS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Acquire flags (VBGL_IOC_AGC_FLAGS_XXX). */ + uint32_t fFlags; + /** Guest capabilities to acquire (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fOrMask; + /** Guest capabilities to release (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fNotMask; + } In; + } u; +} VBGLIOCACQUIREGUESTCAPS, RT_FAR *PVBGLIOCACQUIREGUESTCAPS; +AssertCompileSize(VBGLIOCACQUIREGUESTCAPS, 24 + 12); +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES + * IOCTL to VBoxGuest to set guest capabilities. + * @{ */ +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(14, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCSETGUESTCAPS) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCSETGUESTCAPS) +#define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_OUT sizeof(VBGLIOCSETGUESTCAPS) +typedef struct VBGLIOCSETGUESTCAPS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fOrMask; + /** The capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fNotMask; + } In; + struct + { + /** The capabilities held by the session after the call (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fSessionCaps; + /** The capabilities for all the sessions after the call (VMMDEV_GUEST_SUPPORTS_XXX). */ + uint32_t fGlobalCaps; + } Out; + } u; +} VBGLIOCSETGUESTCAPS, RT_FAR *PVBGLIOCSETGUESTCAPS; +AssertCompileSize(VBGLIOCSETGUESTCAPS, 24 + 8); +typedef VBGLIOCSETGUESTCAPS VBoxGuestSetCapabilitiesInfo; +/** @} */ + + +/** @name VBGL_IOCTL_SET_MOUSE_STATUS + * IOCTL to VBoxGuest to update the mouse status features. + * @{ */ +#define VBGL_IOCTL_SET_MOUSE_STATUS VBGL_IOCTL_CODE_SIZE(15, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE sizeof(VBGLIOCSETMOUSESTATUS) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_IN sizeof(VBGLIOCSETMOUSESTATUS) +#define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCSETMOUSESTATUS +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Mouse status flags (VMMDEV_MOUSE_XXX). */ + uint32_t fStatus; + } In; + } u; +} VBGLIOCSETMOUSESTATUS, RT_FAR *PVBGLIOCSETMOUSESTATUS; +/** @} */ + + +/** @name VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK + * + * IOCTL to for setting the mouse driver callback. + * @note The callback will be called in interrupt context with the VBoxGuest + * device event spinlock held. + * @note ring-0 only. + * + * @{ */ +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK VBGL_IOCTL_CODE_SIZE(16, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_IN sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) +#define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCSETMOUSENOTIFYCALLBACK +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Mouse notification callback function. */ + PFNVBOXGUESTMOUSENOTIFY pfnNotify; + /** The callback argument. */ + void RT_FAR *pvUser; + } In; + } u; +} VBGLIOCSETMOUSENOTIFYCALLBACK, RT_FAR *PVBGLIOCSETMOUSENOTIFYCALLBACK; +/** @} */ + + +/** @name VBGL_IOCTL_CHECK_BALLOON + * IOCTL to VBoxGuest to check memory ballooning. + * + * The guest kernel module / device driver will ask the host for the current size of + * the balloon and adjust the size. Or it will set fHandledInR0 = false and R3 is + * responsible for allocating memory and calling R0 (VBGL_IOCTL_CHANGE_BALLOON). + * @{ */ +#define VBGL_IOCTL_CHECK_BALLOON VBGL_IOCTL_CODE_SIZE(17, VBGL_IOCTL_CHECK_BALLOON_SIZE) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE sizeof(VBGLIOCCHECKBALLOON) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE_IN sizeof(VBGLREQHDR) +#define VBGL_IOCTL_CHECK_BALLOON_SIZE_OUT sizeof(VBGLIOCCHECKBALLOON) +typedef struct VBGLIOCCHECKBALLOON +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The size of the balloon in chunks of 1MB. */ + uint32_t cBalloonChunks; + /** false = handled in R0, no further action required. + * true = allocate balloon memory in R3. */ + bool fHandleInR3; + /** Explicit padding, please ignore. */ + bool afPadding[3]; + } Out; + } u; +} VBGLIOCCHECKBALLOON, RT_FAR *PVBGLIOCCHECKBALLOON; +AssertCompileSize(VBGLIOCCHECKBALLOON, 24 + 8); +typedef VBGLIOCCHECKBALLOON VBoxGuestCheckBalloonInfo; +/** @} */ + + +/** @name VBGL_IOCTL_CHANGE_BALLOON + * IOCTL to VBoxGuest to supply or revoke one chunk for ballooning. + * + * The guest kernel module / device driver will lock down supplied memory or + * unlock reclaimed memory and then forward the physical addresses of the + * changed balloon chunk to the host. + * + * @{ */ +#define VBGL_IOCTL_CHANGE_BALLOON VBGL_IOCTL_CODE_SIZE(18, VBGL_IOCTL_CHANGE_BALLOON_SIZE) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE sizeof(VBGLIOCCHANGEBALLOON) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE_IN sizeof(VBGLIOCCHANGEBALLOON) +#define VBGL_IOCTL_CHANGE_BALLOON_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCCHANGEBALLOON +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Address of the chunk (user space address). */ + RTR3PTR pvChunk; + /** Explicit alignment padding, MBZ. */ + uint8_t abPadding[ARCH_BITS == 64 ? 0 + 7 : 4 + 7]; + /** true = inflate, false = deflate. */ + bool fInflate; + } In; + } u; +} VBGLIOCCHANGEBALLOON, RT_FAR *PVBGLIOCCHANGEBALLOON; +AssertCompileSize(VBGLIOCCHANGEBALLOON, 24+16); +/** @} */ + + +/** @name VBGL_IOCTL_WRITE_CORE_DUMP + * IOCTL to VBoxGuest to write guest core. + * @{ */ +#define VBGL_IOCTL_WRITE_CORE_DUMP VBGL_IOCTL_CODE_SIZE(19, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE sizeof(VBGLIOCWRITECOREDUMP) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_IN sizeof(VBGLIOCWRITECOREDUMP) +#define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCWRITECOREDUMP +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** Flags (reserved, MBZ). */ + uint32_t fFlags; + } In; + } u; +} VBGLIOCWRITECOREDUMP, RT_FAR *PVBGLIOCWRITECOREDUMP; +AssertCompileSize(VBGLIOCWRITECOREDUMP, 24 + 4); +typedef VBGLIOCWRITECOREDUMP VBoxGuestWriteCoreDump; +/** @} */ + + +#ifdef VBOX_WITH_DPC_LATENCY_CHECKER +/** @name VBGL_IOCTL_DPC_LATENCY_CHECKER + * IOCTL to VBoxGuest to perform DPC latency tests, printing the result in + * the release log on the host. Takes no data, returns no data. + * @{ */ +# define VBGL_IOCTL_DPC_LATENCY_CHECKER VBGL_IOCTL_CODE_SIZE(20, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE sizeof(VBGLREQHDR) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_IN sizeof(VBGLREQHDR) +# define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_OUT sizeof(VBGLREQHDR) +/** @} */ +#endif + + +#ifdef RT_OS_OS2 +/** + * The data buffer layout for the IDC entry point (AttachDD). + * + * @remark This is defined in multiple 16-bit headers / sources. + * Some places it's called VBGOS2IDC to short things a bit. + */ +typedef struct VBGLOS2ATTACHDD +{ + /** VBGL_IOC_VERSION. */ + uint32_t u32Version; + /** Opaque session handle. */ + uint32_t u32Session; + + /** + * The 32-bit service entry point. + * + * @returns VBox status code. + * @param u32Session The session handle (PVBOXGUESTSESSION). + * @param iFunction The requested function. + * @param pReqHdr The input/output data buffer. The caller + * ensures that this cannot be swapped out, or that + * it's acceptable to take a page in fault in the + * current context. If the request doesn't take + * input or produces output, apssing NULL is okay. + * @param cbReq The size of the data buffer. + */ +# if ARCH_BITS == 32 || defined(DOXYGEN_RUNNING) + DECLCALLBACKMEMBER(int, pfnServiceEP)(uint32_t u32Session, unsigned iFunction, PVBGLREQHDR pReqHdr, size_t cbReq); +# else + uint32_t pfnServiceEP; +#endif + + /** The 16-bit service entry point for C code (cdecl). + * + * It's the same as the 32-bit entry point, but the types has + * changed to 16-bit equivalents. + * + * @code + * int far cdecl + * VBoxGuestOs2IDCService16(uint32_t u32Session, uint16_t iFunction, + * PVBGLREQHDR fpvData, uint16_t cbData); + * @endcode + */ +# if ARCH_BITS == 16 || defined(DOXYGEN_RUNNING) + DECLCALLBACKMEMBER(int, fpfnServiceEP)(uint32_t u32Session, uint16_t iFunction, PVBGLREQHDR fpvData, uint16_t cbData); +# else + RTFAR16 fpfnServiceEP; +# endif + + /** The 16-bit service entry point for Assembly code (register). + * + * This is just a wrapper around fpfnServiceEP to simplify calls + * from 16-bit assembly code. + * + * @returns (e)ax: VBox status code; cx: The amount of data returned. + * + * @param u32Session eax - The above session handle. + * @param iFunction dl - The requested function. + * @param pvData es:bx - The input/output data buffer. + * @param cbData cx - The size of the data buffer. + */ + RTFAR16 fpfnServiceAsmEP; +} VBGLOS2ATTACHDD; +/** Pointer to VBOXGUESTOS2IDCCONNECT buffer. */ +typedef VBGLOS2ATTACHDD RT_FAR *PVBGLOS2ATTACHDD; + +/** + * Prototype for the 16-bit callback returned by AttachDD on OS/2. + * @param pAttachInfo Pointer to structure to fill in. + */ +# if defined(__IBMC__) || defined(__IBMCPP__) +typedef void (* __cdecl RT_FAR_CODE PFNVBGLOS2ATTACHDD)(PVBGLOS2ATTACHDD pAttachInfo); +# else +typedef void (__cdecl RT_FAR_CODE *PFNVBGLOS2ATTACHDD)(PVBGLOS2ATTACHDD pAttachInfo); +# endif +#endif /* RT_OS_OS2 */ + + +/** @name VBGL_IOCL_IDC_CONNECT + * IDC client connect request. + * + * On platforms other than Windows and OS/2, this will also create a kernel + * session for the caller. + * + * @note ring-0 only. + */ +#define VBGL_IOCTL_IDC_CONNECT VBGL_IOCTL_CODE_SIZE(63, VBGL_IOCTL_IDC_CONNECT_SIZE) +#define VBGL_IOCTL_IDC_CONNECT_SIZE sizeof(VBGLIOCIDCCONNECT) +#define VBGL_IOCTL_IDC_CONNECT_SIZE_IN RT_UOFFSET_AFTER(VBGLIOCIDCCONNECT, u.In) +#define VBGL_IOCTL_IDC_CONNECT_SIZE_OUT sizeof(VBGLIOCIDCCONNECT) +typedef struct VBGLIOCIDCCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + /** The payload union. */ + union + { + struct + { + /** VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE. */ + uint32_t u32MagicCookie; + /** The desired version of the I/O control interface (VBGL_IOC_VERSION). */ + uint32_t uReqVersion; + /** The minimum version of the I/O control interface (VBGL_IOC_VERSION). */ + uint32_t uMinVersion; + /** Reserved, MBZ. */ + uint32_t uReserved; + } In; + struct + { + /** The session handle (opaque). */ +#if ARCH_BITS >= 32 + void RT_FAR *pvSession; +#else + uint32_t pvSession; +#endif + /** The version of the I/O control interface for this session + * (typically VBGL_IOC_VERSION). */ + uint32_t uSessionVersion; + /** The I/O control interface version for of the driver (VBGL_IOC_VERSION). */ + uint32_t uDriverVersion; + /** The SVN revision of the driver. + * This will be set to 0 if not compiled into the driver. */ + uint32_t uDriverRevision; + /** Reserved \#1 (will be returned as zero until defined). */ + uint32_t uReserved1; + /** Reserved \#2 (will be returned as NULL until defined). */ + void RT_FAR *pvReserved2; + } Out; + } u; +} VBGLIOCIDCCONNECT, RT_FAR *PVBGLIOCIDCCONNECT; +AssertCompileSize(VBGLIOCIDCCONNECT, 24 + 16 + (ARCH_BITS == 64 ? 8 : 4) * 2); +#if !defined(__GNUC__) /* Some GCC versions can't handle the complicated RT_UOFFSET_AFTER macro, it seems. */ \ + && (!defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__) && (!defined(__WATCOMC__) || !defined(__cplusplus)))) +AssertCompile(VBGL_IOCTL_IDC_CONNECT_SIZE_IN == 24 + 16); +#endif +#define VBGL_IOCTL_IDC_CONNECT_MAGIC_COOKIE UINT32_C(0x55aa4d5a) /**< Magic value for doing an IDC connect. */ +/** @} */ + + +/** @name VBGL_IOCL_IDC_DISCONNECT + * IDC client disconnect request. + * + * This will destroy the kernel session associated with the IDC connection. + * + * @note ring-0 only. + */ +#define VBGL_IOCTL_IDC_DISCONNECT VBGL_IOCTL_CODE_SIZE(62, VBGL_IOCTL_IDC_DISCONNECT_SIZE) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE sizeof(VBGLIOCIDCDISCONNECT) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE_IN sizeof(VBGLIOCIDCDISCONNECT) +#define VBGL_IOCTL_IDC_DISCONNECT_SIZE_OUT sizeof(VBGLREQHDR) +typedef struct VBGLIOCIDCDISCONNECT +{ + /** The header. */ + VBGLREQHDR Hdr; + union + { + struct + { + /** The session handle for platforms where this is needed. */ +#if ARCH_BITS >= 32 + void RT_FAR *pvSession; +#else + uint32_t pvSession; +#endif + } In; + } u; +} VBGLIOCIDCDISCONNECT, RT_FAR *PVBGLIOCIDCDISCONNECT; +AssertCompileSize(VBGLIOCIDCDISCONNECT, 24 + (ARCH_BITS == 64 ? 8 : 4)); +/** @} */ + + +#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2) +RT_C_DECLS_BEGIN +/** + * The VBoxGuest IDC entry point. + * + * @returns VBox status code. + * @param pvSession The session. + * @param uReq The request code. + * @param pReqHdr The request. + * @param cbReq The request size. + */ +int VBOXCALL VBoxGuestIDC(void RT_FAR *pvSession, uintptr_t uReq, PVBGLREQHDR pReqHdr, size_t cbReq); +RT_C_DECLS_END +#endif + + +#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_FREEBSD) + +/* Private IOCtls between user space and the kernel video driver. DRM private + * IOCtls always have the type 'd' and a number between 0x40 and 0x99 (0x9F?) */ + +# define VBOX_DRM_IOCTL(a) (0x40 + DRM_VBOX_ ## a) + +/** Stop using HGSMI in the kernel driver until it is re-enabled, so that a + * user-space driver can use it. It must be re-enabled before the kernel + * driver can be used again in a sensible way. */ +/** @note These IOCtls was removed from the code, but are left here as + * templates as we may need similar ones in future. */ +# define DRM_VBOX_DISABLE_HGSMI 0 +# define DRM_IOCTL_VBOX_DISABLE_HGSMI VBOX_DRM_IOCTL(DISABLE_HGSMI) +# define VBOXVIDEO_IOCTL_DISABLE_HGSMI _IO('d', DRM_IOCTL_VBOX_DISABLE_HGSMI) +/** Enable HGSMI in the kernel driver after it was previously disabled. */ +# define DRM_VBOX_ENABLE_HGSMI 1 +# define DRM_IOCTL_VBOX_ENABLE_HGSMI VBOX_DRM_IOCTL(ENABLE_HGSMI) +# define VBOXVIDEO_IOCTL_ENABLE_HGSMI _IO('d', DRM_IOCTL_VBOX_ENABLE_HGSMI) + +#endif /* RT_OS_LINUX || RT_OS_SOLARIS || RT_OS_FREEBSD */ + +#endif /* !defined(IN_RC) && !defined(IN_RING0_AGNOSTIC) && !defined(IPRT_NO_CRT) */ + +/** @} */ + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestCoreTypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestCoreTypes.h @@ -0,0 +1,228 @@ +/** @file + * VBoxGuest - VirtualBox Guest Additions, Core Types. + * + * This contains types that are used both in the VBoxGuest I/O control interface + * and the VBoxGuestLib. The goal is to avoid having to include VBoxGuest.h + * everwhere VBoxGuestLib.h is used. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#ifndef ___VBoxGuestCoreTypes_h +#define ___VBoxGuestCoreTypes_h + +#include +#include + +/** @addtogroup grp_vboxguest + * @{ */ + +/** + * Common in/out header. + * + * This is a copy/mirror of VMMDevRequestHeader to prevent duplicating data and + * needing to verify things multiple times. For that reason this differs a bit + * from SUPREQHDR. + * + * @sa VMMDevRequestHeader + */ +typedef struct VBGLREQHDR +{ + /** IN: The request input size, and output size if cbOut is zero. + * @sa VMMDevRequestHeader::size */ + uint32_t cbIn; + /** IN: Structure version (VBGLREQHDR_VERSION) + * @sa VMMDevRequestHeader::version */ + uint32_t uVersion; + /** IN: The VMMDev request type, set to VBGLREQHDR_TYPE_DEFAULT unless this is a + * kind of VMMDev request. + * @sa VMMDevRequestType, VMMDevRequestHeader::requestType */ + uint32_t uType; + /** OUT: The VBox status code of the operation, out direction only. */ + int32_t rc; + /** IN: The output size. This is optional - set to zero to use cbIn as the + * output size. */ + uint32_t cbOut; + /** Reserved, MBZ. */ + uint32_t uReserved; +} VBGLREQHDR; +AssertCompileSize(VBGLREQHDR, 24); +/** Pointer to a IOC header. */ +typedef VBGLREQHDR RT_FAR *PVBGLREQHDR; + +/** Version of VMMDevRequestHeader structure. */ +#define VBGLREQHDR_VERSION UINT32_C(0x10001) +/** Default request type. Use this for non-VMMDev requests. */ +#define VBGLREQHDR_TYPE_DEFAULT UINT32_C(0) + +/** Initialize a VBGLREQHDR structure for a fixed size I/O control call. + * @param a_pHdr Pointer to the header to initialize. + * @param a_IOCtl The base I/O control name, no VBGL_IOCTL_ prefix. We + * have to skip the prefix to avoid it getting expanded + * before we append _SIZE_IN and _SIZE_OUT to it. + */ +#define VBGLREQHDR_INIT(a_pHdr, a_IOCtl) \ + VBGLREQHDR_INIT_EX(a_pHdr, RT_CONCAT3(VBGL_IOCTL_,a_IOCtl,_SIZE_IN), RT_CONCAT3(VBGL_IOCTL_,a_IOCtl,_SIZE_OUT)) +/** Initialize a VBGLREQHDR structure, extended version. */ +#define VBGLREQHDR_INIT_EX(a_pHdr, a_cbIn, a_cbOut) \ + do { \ + (a_pHdr)->cbIn = (uint32_t)(a_cbIn); \ + (a_pHdr)->uVersion = VBGLREQHDR_VERSION; \ + (a_pHdr)->uType = VBGLREQHDR_TYPE_DEFAULT; \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->cbOut = (uint32_t)(a_cbOut); \ + (a_pHdr)->uReserved = 0; \ + } while (0) +/** Initialize a VBGLREQHDR structure for a VMMDev request. + * Same as VMMDEV_REQ_HDR_INIT(). */ +#define VBGLREQHDR_INIT_VMMDEV(a_pHdr, a_cb, a_enmType) \ + do { \ + (a_pHdr)->cbIn = (a_cb); \ + (a_pHdr)->uVersion = VBGLREQHDR_VERSION; \ + (a_pHdr)->uType = (a_enmType); \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->cbOut = 0; \ + (a_pHdr)->uReserved = 0; \ + } while (0) + + +/** + * For VBGL_IOCTL_HGCM_CALL and VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA. + * + * @note This is used by alot of HGCM call structures. + */ +typedef struct VBGLIOCHGCMCALL +{ + /** Common header. */ + VBGLREQHDR Hdr; + /** Input: The id of the caller. */ + uint32_t u32ClientID; + /** Input: Function number. */ + uint32_t u32Function; + /** Input: How long to wait (milliseconds) for completion before cancelling the + * call. This is ignored if not a VBGL_IOCTL_HGCM_CALL_TIMED or + * VBGL_IOCTL_HGCM_CALL_TIMED_32 request. */ + uint32_t cMsTimeout; + /** Input: Whether a timed call is interruptible (ring-0 only). This is ignored + * if not a VBGL_IOCTL_HGCM_CALL_TIMED or VBGL_IOCTL_HGCM_CALL_TIMED_32 + * request, or if made from user land. */ + bool fInterruptible; + /** Explicit padding, MBZ. */ + uint8_t bReserved; + /** Input: How many parameters following this structure. + * + * The parameters are either HGCMFunctionParameter64 or HGCMFunctionParameter32, + * depending on whether we're receiving a 64-bit or 32-bit request. + * + * The current maximum is 61 parameters (given a 1KB max request size, + * and a 64-bit parameter size of 16 bytes). + * + * @note This information is duplicated by Hdr.cbIn, but it's currently too much + * work to eliminate this. */ + uint16_t cParms; + /* Parameters follow in form HGCMFunctionParameter aParms[cParms] */ +} VBGLIOCHGCMCALL, RT_FAR *PVBGLIOCHGCMCALL; +AssertCompileSize(VBGLIOCHGCMCALL, 24 + 16); +typedef VBGLIOCHGCMCALL const RT_FAR *PCVBGLIOCHGCMCALL; + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL) for a non-timed call. + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + */ +# define VBGL_HGCM_HDR_INIT(a_pHdr, a_idClient, a_idFunction, a_cParameters) \ + do { \ + VBGLREQHDR_INIT_EX(&(a_pHdr)->Hdr, \ + sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter), \ + sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter)); \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = RT_INDEFINITE_WAIT; \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL) for a non-timed call, custom size. + * + * This is usually only needed when appending page lists to the call. + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + * @param a_cbReq The request size. + */ +# define VBGL_HGCM_HDR_INIT_EX(a_pHdr, a_idClient, a_idFunction, a_cParameters, a_cbReq) \ + do { \ + Assert((a_cbReq) >= sizeof(VBGLIOCHGCMCALL) + (a_cParameters) * sizeof(HGCMFunctionParameter)); \ + VBGLREQHDR_INIT_EX(&(a_pHdr)->Hdr, (a_cbReq), (a_cbReq)); \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = RT_INDEFINITE_WAIT; \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** + * Initialize a HGCM header (VBGLIOCHGCMCALL), with timeout (interruptible). + * + * @param a_pHdr The header to initalize. + * @param a_idClient The client connection ID to call thru. + * @param a_idFunction The function we're calling + * @param a_cParameters Number of parameters. + * @param a_cMsTimeout The timeout in milliseconds. + */ +# define VBGL_HGCM_HDR_INIT_TIMED(a_pHdr, a_idClient, a_idFunction, a_cParameters, a_cMsTimeout) \ + do { \ + (a_pHdr)->u32ClientID = (a_idClient); \ + (a_pHdr)->u32Function = (a_idFunction); \ + (a_pHdr)->cMsTimeout = (a_cMsTimeout); \ + (a_pHdr)->fInterruptible = true; \ + (a_pHdr)->bReserved = 0; \ + (a_pHdr)->cParms = (a_cParameters); \ + } while (0) + +/** Get the pointer to the first HGCM parameter. */ +# define VBGL_HGCM_GET_CALL_PARMS(a_pInfo) ( (HGCMFunctionParameter *)((uint8_t *)(a_pInfo) + sizeof(VBGLIOCHGCMCALL)) ) +/** Get the pointer to the first HGCM parameter in a 32-bit request. */ +# define VBGL_HGCM_GET_CALL_PARMS32(a_pInfo) ( (HGCMFunctionParameter32 *)((uint8_t *)(a_pInfo) + sizeof(VBGLIOCHGCMCALL)) ) + + +/** + * Mouse event noticification callback function. + * @param pvUser Argument given when setting the callback. + */ +typedef DECLCALLBACK(void) FNVBOXGUESTMOUSENOTIFY(void *pvUser); +/** Pointer to a mouse event notification callback function. */ +typedef FNVBOXGUESTMOUSENOTIFY *PFNVBOXGUESTMOUSENOTIFY; /**< @todo fix type prefix */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestLib.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestLib.h @@ -0,0 +1,926 @@ +/** @file + * VBoxGuestLib - VirtualBox Guest Additions Library. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VBoxGuestLib_h +#define ___VBox_VBoxGuestLib_h + +#include +#include +#include + +/** @defgroup grp_vboxguest_lib VirtualBox Guest Additions Library + * @ingroup grp_vboxguest + * @{ + */ + +/** @page pg_guest_lib VirtualBox Guest Library + * + * This is a library for abstracting the additions driver interface. There are + * multiple versions of the library depending on the context. The main + * distinction is between kernel and user mode where the interfaces are very + * different. + * + * + * @section sec_guest_lib_ring0 Ring-0 + * + * In ring-0 there are two version: + * - VBOX_LIB_VBGL_R0_BASE / VBoxGuestR0LibBase for the VBoxGuest main driver, + * who is responsible for managing the VMMDev virtual hardware. + * - VBOX_LIB_VBGL_R0 / VBoxGuestR0Lib for other (client) guest drivers. + * + * + * The library source code and the header have a define VBGL_VBOXGUEST, which is + * defined for VBoxGuest and undefined for other drivers. Drivers must choose + * right library in their makefiles and set VBGL_VBOXGUEST accordingly. + * + * The libraries consists of: + * - common code to be used by both VBoxGuest and other drivers; + * - VBoxGuest specific code; + * - code for other drivers which communicate with VBoxGuest via an IOCTL. + * + * + * @section sec_guest_lib_ring3 Ring-3 + * + * There are more variants of the library here: + * - VBOX_LIB_VBGL_R3 / VBoxGuestR3Lib for programs. + * - VBOX_LIB_VBGL_R3_XFREE86 / VBoxGuestR3LibXFree86 for old style XFree + * drivers which uses special loader and or symbol resolving strategy. + * - VBOX_LIB_VBGL_R3_SHARED / VBoxGuestR3LibShared for shared objects / DLLs / + * Dylibs. + * + */ + +RT_C_DECLS_BEGIN + +/** HGCM client ID. + * @todo Promote to VBox/types.h */ +typedef uint32_t HGCMCLIENTID; + + +/** @defgroup grp_vboxguest_lib_r0 Ring-0 interface. + * @{ + */ +#ifdef IN_RING0 +/** @def DECLR0VBGL + * Declare a VBGL ring-0 API with the right calling convention and visibilitiy. + * @param type Return type. */ +# ifdef RT_OS_DARWIN /** @todo probably apply to all, but don't want a forest fire on our hands right now. */ +# define DECLR0VBGL(type) DECLHIDDEN(type) VBOXCALL +# else +# define DECLR0VBGL(type) type VBOXCALL +# endif +# define DECLVBGL(type) DECLR0VBGL(type) + + +/** + * The library initialization function to be used by the main VBoxGuest driver. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0InitPrimary(RTIOPORT portVMMDev, struct VMMDevMemory *pVMMDevMemory); + +/** + * The library termination function to be used by the main VBoxGuest driver. + * + * @author bird (2017-08-23) + */ +DECLR0VBGL(void) VbglR0TerminatePrimary(void); + +/** + * The library initialization function to be used by all drivers + * other than the main VBoxGuest system driver. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0InitClient(void); + +/** + * The library termination function. + */ +DECLR0VBGL(void) VbglR0TerminateClient(void); + + +/** @name The IDC Client Interface + * @{ + */ + +/** + * Inter-Driver Communication Handle. + */ +typedef union VBGLIDCHANDLE +{ + /** Padding for opaque usage. + * Must be greater or equal in size than the private struct. */ + void *apvPadding[4]; +#ifdef VBGLIDCHANDLEPRIVATE_DECLARED + /** The private view. */ + struct VBGLIDCHANDLEPRIVATE s; +#endif +} VBGLIDCHANDLE; +/** Pointer to a handle. */ +typedef VBGLIDCHANDLE *PVBGLIDCHANDLE; + +DECLR0VBGL(int) VbglR0IdcOpen(PVBGLIDCHANDLE pHandle, uint32_t uReqVersion, uint32_t uMinVersion, + uint32_t *puSessionVersion, uint32_t *puDriverVersion, uint32_t *puDriverRevision); +struct VBGLREQHDR; +DECLR0VBGL(int) VbglR0IdcCallRaw(PVBGLIDCHANDLE pHandle, uintptr_t uReq, struct VBGLREQHDR *pReqHdr, uint32_t cbReq); +DECLR0VBGL(int) VbglR0IdcCall(PVBGLIDCHANDLE pHandle, uintptr_t uReq, struct VBGLREQHDR *pReqHdr, uint32_t cbReq); +DECLR0VBGL(int) VbglR0IdcClose(PVBGLIDCHANDLE pHandle); + +/** @} */ + + +/** @name Generic request functions. + * @{ + */ + +/** + * Allocate memory for generic request and initialize the request header. + * + * @returns VBox status code. + * @param ppReq Where to return the pointer to the allocated memory. + * @param cbReq Size of memory block required for the request. + * @param enmReqType the generic request type. + */ +# if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING) +DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader **ppReq, size_t cbReq, VMMDevRequestType enmReqType); +# else +DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader **ppReq, size_t cbReq, int32_t enmReqType); +# endif + +/** + * Perform the generic request. + * + * @param pReq pointer the request structure. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0GRPerform(struct VMMDevRequestHeader *pReq); + +/** + * Free the generic request memory. + * + * @param pReq pointer the request structure. + * + * @return VBox status code. + */ +DECLR0VBGL(void) VbglR0GRFree(struct VMMDevRequestHeader *pReq); + +/** + * Verify the generic request header. + * + * @param pReq pointer the request header structure. + * @param cbReq size of the request memory block. It should be equal to the request size + * for fixed size requests. It can be greater than the request size for + * variable size requests. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglGR0Verify(const struct VMMDevRequestHeader *pReq, size_t cbReq); + +/** @} */ + +# ifdef VBOX_WITH_HGCM +struct VBGLIOCHGCMCALL; + +# ifdef VBGL_VBOXGUEST + +/** + * Callback function called from HGCM helpers when a wait for request + * completion IRQ is required. + * + * @returns VINF_SUCCESS, VERR_INTERRUPT or VERR_TIMEOUT. + * @param pvData VBoxGuest pointer to be passed to callback. + * @param u32Data VBoxGuest 32 bit value to be passed to callback. + */ +typedef DECLCALLBACK(int) FNVBGLHGCMCALLBACK(VMMDevHGCMRequestHeader *pHeader, void *pvData, uint32_t u32Data); +/** Pointer to a FNVBGLHGCMCALLBACK. */ +typedef FNVBGLHGCMCALLBACK *PFNVBGLHGCMCALLBACK; + +/** + * Perform a connect request. + * + * That is locate required service and obtain a client identifier for future + * access. + * + * @note This function can NOT handle cancelled requests! + * + * @param pLoc The service to connect to. + * @param pidClient Where to return the client ID on success. + * @param pfnAsyncCallback Required pointer to function that is calledwhen + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalConnect(HGCMServiceLocation const *pLoc, HGCMCLIENTID *pidClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + + +/** + * Perform a disconnect request. + * + * That is tell the host that the client will not call the service anymore. + * + * @note This function can NOT handle cancelled requests! + * + * @param idClient The client ID to disconnect. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to + * callback. + * + * @return VBox status code. + */ + +DECLR0VBGL(int) VbglR0HGCMInternalDisconnect(HGCMCLIENTID idClient, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** Call a HGCM service. + * + * @note This function can deal with cancelled requests. + * + * @param pCallInfo The request data. + * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalCall(struct VBGLIOCHGCMCALL *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** Call a HGCM service. (32 bits packet structure in a 64 bits guest) + * + * @note This function can deal with cancelled requests. + * + * @param pCallInfo The request data. + * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX. + * @param pfnAsyncCallback Required pointer to function that is called when + * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest + * implements waiting for an IRQ in this function. + * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback. + * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInternalCall32(struct VBGLIOCHGCMCALL *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, + PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData); + +/** @name VbglR0HGCMInternalCall flags + * @{ */ +/** User mode request. + * Indicates that only user mode addresses are permitted as parameters. */ +#define VBGLR0_HGCMCALL_F_USER UINT32_C(0) +/** Kernel mode request. + * Indicates that kernel mode addresses are permitted as parameters. Whether or + * not user mode addresses are permitted is, unfortunately, OS specific. The + * following OSes allows user mode addresses: Windows, TODO. + */ +#define VBGLR0_HGCMCALL_F_KERNEL UINT32_C(1) +/** Mode mask. */ +#define VBGLR0_HGCMCALL_F_MODE_MASK UINT32_C(1) +/** @} */ + +# else /* !VBGL_VBOXGUEST */ + +struct VBGLHGCMHANDLEDATA; +typedef struct VBGLHGCMHANDLEDATA *VBGLHGCMHANDLE; + +/** @name HGCM functions + * @{ + */ + +/** + * Initializes HGCM in the R0 guest library. Must be called before any HGCM + * connections are made. Is called by VbglInitClient(). + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMInit(void); + +/** + * Terminates HGCM in the R0 guest library. Is called by VbglTerminate(). + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMTerminate(void); + +/** + * Connect to a service. + * + * @param pHandle Pointer to variable that will hold a handle to be used + * further in VbglHGCMCall and VbglHGCMClose. + * @param pszServiceName The service to connect to. + * @param pidClient Where to return the client ID for the connection. + * + * @return VBox status code. + * + * @todo consider baking the client Id into the handle. + */ +DECLR0VBGL(int) VbglR0HGCMConnect(VBGLHGCMHANDLE *pHandle, const char *pszServiceName, HGCMCLIENTID *pidClient); + +/** + * Connect to a service. + * + * @param handle Handle of the connection. + * @param idClient The ID of the client connection. + * + * @return VBox status code. + * + * @todo consider baking the client Id into the handle. + */ +DECLR0VBGL(int) VbglR0HGCMDisconnect(VBGLHGCMHANDLE handle, HGCMCLIENTID idClient); + +/** + * Call to a service, returning only the I/O control status code. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMCallRaw(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** + * Call to a service, returning the HGCM status code. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. Either the I/O control status code if that failed, + * or the HGCM status code (pData->Hdr.rc). + */ +DECLR0VBGL(int) VbglR0HGCMCall(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** + * Call to a service with user-mode data received by the calling driver from the User-Mode process. + * The call must be done in the context of a calling process. + * + * @param handle Handle of the connection. + * @param pData Call request information structure, including function parameters. + * @param cbData Length in bytes of data. + * + * @return VBox status code. + */ +DECLR0VBGL(int) VbglR0HGCMCallUserDataRaw(VBGLHGCMHANDLE handle, struct VBGLIOCHGCMCALL*pData, uint32_t cbData); + +/** @} */ + +/** @name Undocumented helpers for talking to the Chromium OpenGL Host Service + * @{ */ +typedef VBGLHGCMHANDLE VBGLCRCTLHANDLE; +DECLR0VBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE *phCtl); +DECLR0VBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl); +DECLR0VBGL(int) VbglR0CrCtlConConnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID *pidClient); +DECLR0VBGL(int) VbglR0CrCtlConDisconnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID idClient); +struct VBGLIOCHGCMCALL; +DECLR0VBGL(int) VbglR0CrCtlConCallRaw(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +DECLR0VBGL(int) VbglR0CrCtlConCall(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +DECLR0VBGL(int) VbglR0CrCtlConCallUserDataRaw(VBGLCRCTLHANDLE hCtl, struct VBGLIOCHGCMCALL *pCallInfo, int cbCallInfo); +/** @} */ + +# endif /* !VBGL_VBOXGUEST */ + +# endif /* VBOX_WITH_HGCM */ + + +/** + * Initialize the heap. + * + * @returns VBox status code. + */ +DECLR0VBGL(int) VbglR0PhysHeapInit(void); + +/** + * Shutdown the heap. + */ +DECLR0VBGL(void) VbglR0PhysHeapTerminate(void); + +/** + * Allocate a memory block. + * + * @returns Virtual address of the allocated memory block. + * @param cbSize Size of block to be allocated. + */ +DECLR0VBGL(void *) VbglR0PhysHeapAlloc(uint32_t cbSize); + +/** + * Get physical address of memory block pointed by the virtual address. + * + * @note WARNING! + * The function does not acquire the Heap mutex! + * When calling the function make sure that the pointer is a valid one and + * is not being deallocated. This function can NOT be used for verifying + * if the given pointer is a valid one allocated from the heap. + * + * @param pv Virtual address of memory block. + * @returns Physical address of the memory block. + */ +DECLR0VBGL(uint32_t) VbglR0PhysHeapGetPhysAddr(void *pv); + +/** + * Free a memory block. + * + * @param pv Virtual address of memory block. + */ +DECLR0VBGL(void) VbglR0PhysHeapFree(void *pv); + +DECLR0VBGL(int) VbglR0QueryVMMDevMemory(struct VMMDevMemory **ppVMMDevMemory); +DECLR0VBGL(bool) VbglR0CanUsePhysPageList(void); + +# ifndef VBOX_GUEST +/** @name Mouse + * @{ */ +DECLR0VBGL(int) VbglR0SetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify, void *pvUser); +DECLR0VBGL(int) VbglR0GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py); +DECLR0VBGL(int) VbglR0SetMouseStatus(uint32_t fFeatures); +/** @} */ +# endif /* VBOX_GUEST */ + +#endif /* IN_RING0 */ + +/** @} */ + + +/** @defgroup grp_vboxguest_lib_r3 Ring-3 interface. + * @{ + */ +#ifdef IN_RING3 + +/** @def VBGLR3DECL + * Ring 3 VBGL declaration. + * @param type The return type of the function declaration. + */ +# define VBGLR3DECL(type) DECLHIDDEN(type) VBOXCALL + +/** @name General-purpose functions + * @{ */ +VBGLR3DECL(int) VbglR3Init(void); +VBGLR3DECL(int) VbglR3InitUser(void); +VBGLR3DECL(void) VbglR3Term(void); +# ifdef ___iprt_time_h +VBGLR3DECL(int) VbglR3GetHostTime(PRTTIMESPEC pTime); +# endif +VBGLR3DECL(int) VbglR3InterruptEventWaits(void); +VBGLR3DECL(int) VbglR3WriteLog(const char *pch, size_t cch); +VBGLR3DECL(int) VbglR3CtlFilterMask(uint32_t fOr, uint32_t fNot); +VBGLR3DECL(int) VbglR3Daemonize(bool fNoChDir, bool fNoClose, bool fRespawn, unsigned *pcRespawn); +VBGLR3DECL(int) VbglR3PidFile(const char *pszPath, PRTFILE phFile); +VBGLR3DECL(void) VbglR3ClosePidFile(const char *pszPath, RTFILE hFile); +VBGLR3DECL(int) VbglR3SetGuestCaps(uint32_t fOr, uint32_t fNot); +VBGLR3DECL(int) VbglR3AcquireGuestCaps(uint32_t fOr, uint32_t fNot, bool fConfig); +VBGLR3DECL(int) VbglR3WaitEvent(uint32_t fMask, uint32_t cMillies, uint32_t *pfEvents); + +VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent, + uint32_t fFlags); +VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerEx, char **ppszRev); +VBGLR3DECL(int) VbglR3GetAdditionsInstallationPath(char **ppszPath); +VBGLR3DECL(int) VbglR3GetSessionId(uint64_t *pu64IdSession); + +/** @} */ + +/** @name Shared clipboard + * @{ */ +VBGLR3DECL(int) VbglR3ClipboardConnect(HGCMCLIENTID *pidClient); +VBGLR3DECL(int) VbglR3ClipboardDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient, uint32_t *pMsg, uint32_t *pfFormats); +VBGLR3DECL(int) VbglR3ClipboardReadData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb); +VBGLR3DECL(int) VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats); +VBGLR3DECL(int) VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb); +/** @} */ + +/** @name Seamless mode + * @{ */ +VBGLR3DECL(int) VbglR3SeamlessSetCap(bool fState); +VBGLR3DECL(int) VbglR3SeamlessWaitEvent(VMMDevSeamlessMode *pMode); +VBGLR3DECL(int) VbglR3SeamlessSendRects(uint32_t cRects, PRTRECT pRects); +VBGLR3DECL(int) VbglR3SeamlessGetLastEvent(VMMDevSeamlessMode *pMode); + +/** @} */ + +/** @name Mouse + * @{ */ +VBGLR3DECL(int) VbglR3GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py); +VBGLR3DECL(int) VbglR3SetMouseStatus(uint32_t fFeatures); +/** @} */ + +/** @name Video + * @{ */ +VBGLR3DECL(int) VbglR3VideoAccelEnable(bool fEnable); +VBGLR3DECL(int) VbglR3VideoAccelFlush(void); +VBGLR3DECL(int) VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy, + const void *pvImg, size_t cbImg); +VBGLR3DECL(int) VbglR3SetPointerShapeReq(struct VMMDevReqMousePointer *pReq); +/** @} */ + +/** @name Display + * @{ */ +/** The folder for the video mode hint unix domain socket on Unix-like guests. + * @note This can be safely changed as all users are rebuilt in lock-step. */ +#define VBGLR3HOSTDISPSOCKETPATH "/tmp/.VBoxService" +/** The path to the video mode hint unix domain socket on Unix-like guests. */ +#define VBGLR3HOSTDISPSOCKET VBGLR3VIDEOMODEHINTSOCKETPATH "/VideoModeHint" + +/** The folder for saving video mode hints to between sessions. */ +#define VBGLR3HOSTDISPSAVEDMODEPATH "/var/lib/VBoxGuestAdditions" +/** The path to the file for saving video mode hints to between sessions. */ +#define VBGLR3HOSTDISPSAVEDMODE VBGLR3HOSTDISPSAVEDMODEPATH "/SavedVideoModes" + +VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy, uint32_t *pcBits, uint32_t *piDisplay, + uint32_t *pdx, uint32_t *pdy, bool *pfEnabled, bool *pfChangeOrigin, bool fAck); +VBGLR3DECL(bool) VbglR3HostLikesVideoMode(uint32_t cx, uint32_t cy, uint32_t cBits); +VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen); +VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy, unsigned cBits, + unsigned x, unsigned y, bool fEnabled); +VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen, unsigned *pcx, unsigned *pcy, unsigned *pcBits, + unsigned *px, unsigned *py, bool *pfEnabled); +/** @} */ + +/** @name VRDP + * @{ */ +VBGLR3DECL(int) VbglR3VrdpGetChangeRequest(bool *pfActive, uint32_t *puExperienceLevel); +/** @} */ + +/** @name VM Statistics + * @{ */ +VBGLR3DECL(int) VbglR3StatQueryInterval(uint32_t *pu32Interval); +# if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING) +VBGLR3DECL(int) VbglR3StatReport(VMMDevReportGuestStats *pReq); +# endif +/** @} */ + +/** @name Memory ballooning + * @{ */ +VBGLR3DECL(int) VbglR3MemBalloonRefresh(uint32_t *pcChunks, bool *pfHandleInR3); +VBGLR3DECL(int) VbglR3MemBalloonChange(void *pv, bool fInflate); +/** @} */ + +/** @name Core Dump + * @{ */ +VBGLR3DECL(int) VbglR3WriteCoreDump(void); + +/** @} */ + +# ifdef VBOX_WITH_GUEST_PROPS +/** @name Guest properties + * @{ */ +/** @todo Docs. */ +typedef struct VBGLR3GUESTPROPENUM VBGLR3GUESTPROPENUM; +/** @todo Docs. */ +typedef VBGLR3GUESTPROPENUM *PVBGLR3GUESTPROPENUM; +VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3GuestPropDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(int) VbglR3GuestPropWrite(HGCMCLIENTID idClient, const char *pszName, const char *pszValue, const char *pszFlags); +VBGLR3DECL(int) VbglR3GuestPropWriteValue(HGCMCLIENTID idClient, const char *pszName, const char *pszValue); +VBGLR3DECL(int) VbglR3GuestPropWriteValueV(HGCMCLIENTID idClient, const char *pszName, + const char *pszValueFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); +VBGLR3DECL(int) VbglR3GuestPropWriteValueF(HGCMCLIENTID idClient, const char *pszName, + const char *pszValueFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); +VBGLR3DECL(int) VbglR3GuestPropRead(HGCMCLIENTID idClient, const char *pszName, void *pvBuf, uint32_t cbBuf, char **ppszValue, + uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual); +VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t ClientId, const char *pszName, char *pszValue, uint32_t cchValue, + uint32_t *pcchValueActual); +VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(HGCMCLIENTID idClient, const char *pszName, char **ppszValue); +VBGLR3DECL(void) VbglR3GuestPropReadValueFree(char *pszValue); +VBGLR3DECL(int) VbglR3GuestPropEnumRaw(HGCMCLIENTID idClient, const char *paszPatterns, char *pcBuf, uint32_t cbBuf, + uint32_t *pcbBufActual); +VBGLR3DECL(int) VbglR3GuestPropEnum(HGCMCLIENTID idClient, char const * const *ppaszPatterns, uint32_t cPatterns, + PVBGLR3GUESTPROPENUM *ppHandle, char const **ppszName, char const **ppszValue, + uint64_t *pu64Timestamp, char const **ppszFlags); +VBGLR3DECL(int) VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle, char const **ppszName, char const **ppszValue, + uint64_t *pu64Timestamp, char const **ppszFlags); +VBGLR3DECL(void) VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle); +VBGLR3DECL(int) VbglR3GuestPropDelete(HGCMCLIENTID idClient, const char *pszName); +VBGLR3DECL(int) VbglR3GuestPropDelSet(HGCMCLIENTID idClient, char const * const *papszPatterns, uint32_t cPatterns); +VBGLR3DECL(int) VbglR3GuestPropWait(HGCMCLIENTID idClient, const char *pszPatterns, void *pvBuf, uint32_t cbBuf, + uint64_t u64Timestamp, uint32_t cMillies, char ** ppszName, char **ppszValue, + uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual); +/** @} */ + +/** @name Guest user handling / reporting. + * @{ */ +VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser, const char *pszDomain, VBoxGuestUserState enmState, + uint8_t *pbDetails, uint32_t cbDetails); +/** @} */ + +/** @name Host version handling + * @{ */ +VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(HGCMCLIENTID idClient, bool *pfUpdate, char **ppszHostVersion, + char **ppszGuestVersion); +VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(HGCMCLIENTID idClient, char **ppszVer); +VBGLR3DECL(int) VbglR3HostVersionLastCheckedStore(HGCMCLIENTID idClient, const char *pszVer); +/** @} */ +# endif /* VBOX_WITH_GUEST_PROPS defined */ + +# ifdef VBOX_WITH_SHARED_FOLDERS +/** @name Shared folders + * @{ */ +/** + * Structure containing mapping information for a shared folder. + */ +typedef struct VBGLR3SHAREDFOLDERMAPPING +{ + /** Mapping status. */ + uint32_t u32Status; + /** Root handle. */ + uint32_t u32Root; +} VBGLR3SHAREDFOLDERMAPPING; +/** Pointer to a shared folder mapping information structure. */ +typedef VBGLR3SHAREDFOLDERMAPPING *PVBGLR3SHAREDFOLDERMAPPING; +/** Pointer to a const shared folder mapping information structure. */ +typedef VBGLR3SHAREDFOLDERMAPPING const *PCVBGLR3SHAREDFOLDERMAPPING; + +VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3SharedFolderDisconnect(HGCMCLIENTID idClient); +VBGLR3DECL(bool) VbglR3SharedFolderExists(HGCMCLIENTID idClient, const char *pszShareName); +VBGLR3DECL(int) VbglR3SharedFolderGetMappings(HGCMCLIENTID idClient, bool fAutoMountOnly, + PVBGLR3SHAREDFOLDERMAPPING *ppaMappings, uint32_t *pcMappings); +VBGLR3DECL(void) VbglR3SharedFolderFreeMappings(PVBGLR3SHAREDFOLDERMAPPING paMappings); +VBGLR3DECL(int) VbglR3SharedFolderGetName(HGCMCLIENTID idClient,uint32_t u32Root, char **ppszName); +VBGLR3DECL(int) VbglR3SharedFolderGetMountPrefix(char **ppszPrefix); +VBGLR3DECL(int) VbglR3SharedFolderGetMountDir(char **ppszDir); +/** @} */ +# endif /* VBOX_WITH_SHARED_FOLDERS defined */ + +# ifdef VBOX_WITH_GUEST_CONTROL +/** @name Guest control + * @{ */ + +/** + * Structure containing the context required for + * either retrieving or sending a HGCM guest control + * commands from or to the host. + * + * Note: Do not change parameter order without also + * adapting all structure initializers. + */ +typedef struct VBGLR3GUESTCTRLCMDCTX +{ + /** @todo This struct could be handy if we want to implement + * a second communication channel, e.g. via TCP/IP. + * Use a union for the HGCM stuff then. */ + + /** IN: HGCM client ID to use for + * communication. */ + uint32_t uClientID; + /** IN/OUT: Context ID to retrieve + * or to use. */ + uint32_t uContextID; + /** IN: Protocol version to use. */ + uint32_t uProtocol; + /** OUT: Number of parameters retrieved. */ + uint32_t uNumParms; +} VBGLR3GUESTCTRLCMDCTX, *PVBGLR3GUESTCTRLCMDCTX; + +/* General message handling on the guest. */ +VBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *pidClient); +VBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t idClient); +VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId, uint32_t uValue, uint32_t uMaskAdd, uint32_t uMaskRemove); +VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId); +VBGLR3DECL(int) VbglR3GuestCtrlMsgReply(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc); +VBGLR3DECL(int) VbglR3GuestCtrlMsgReplyEx(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc, uint32_t uType, + void *pvPayload, uint32_t cbPayload); +VBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId); +VBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId, uint32_t *puMsg, uint32_t *puNumParms); +VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(HGCMCLIENTID idClient); +/* Guest session handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t fFlags); +VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uType, uint32_t uResult); +VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puProtocol, char *pszUser, uint32_t cbUser, + char *pszPassword, uint32_t cbPassword, char *pszDomain, uint32_t cbDomain, + uint32_t *pfFlags, uint32_t *pidSession); +VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *pfFlags, uint32_t *pidSession); +/* Guest path handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszSource, uint32_t cbSource, char *pszDest, + uint32_t cbDest, uint32_t *pfFlags); +/* Guest process execution. */ +VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszCmd, uint32_t cbCmd, uint32_t *pfFlags, + char *pszArgs, uint32_t cbArgs, uint32_t *puNumArgs, char *pszEnv, uint32_t *pcbEnv, + uint32_t *puNumEnvVars, char *pszUser, uint32_t cbUser, char *pszPassword, + uint32_t cbPassword, uint32_t *puTimeoutMS, uint32_t *puPriority, + uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *pfFlags, void *pvData, + uint32_t cbData, uint32_t *pcbSize); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puHandle, uint32_t *pfFlags); +VBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puWaitFlags, + uint32_t *puTimeoutMS); +/* Guest native directory handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszPath, uint32_t cbPath, uint32_t *pfFlags); +/* Guest native file handling. */ +VBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszFileName, uint32_t cbFileName, char *pszOpenMode, + uint32_t cbOpenMode, char *pszDisposition, uint32_t cbDisposition, char *pszSharing, + uint32_t cbSharing, uint32_t *puCreationMode, uint64_t *puOffset); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, uint32_t *puToRead); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + uint32_t *puToRead, uint64_t *poffRead); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + void *pvData, uint32_t cbData, uint32_t *pcbActual); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, void *pvData, uint32_t cbData, + uint32_t *pcbActual, uint64_t *poffWrite); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, + uint32_t *puSeekMethod, uint64_t *poffSeek); +VBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle); +/* Guest -> Host. */ +VBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uFileHandle); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbError(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uWritten); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual); +VBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uStatus, uint32_t fFlags, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uHandle, uint32_t fFlags, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t u32PID, uint32_t uStatus, + uint32_t fFlags, uint32_t cbWritten); + +/** @} */ +# endif /* VBOX_WITH_GUEST_CONTROL defined */ + +/** @name Auto-logon handling + * @{ */ +VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus); +VBGLR3DECL(bool) VbglR3AutoLogonIsRemoteSession(void); +/** @} */ + +/** @name User credentials handling + * @{ */ +VBGLR3DECL(int) VbglR3CredentialsQueryAvailability(void); +VBGLR3DECL(int) VbglR3CredentialsRetrieve(char **ppszUser, char **ppszPassword, char **ppszDomain); +VBGLR3DECL(int) VbglR3CredentialsRetrieveUtf16(PRTUTF16 *ppwszUser, PRTUTF16 *ppwszPassword, PRTUTF16 *ppwszDomain); +VBGLR3DECL(void) VbglR3CredentialsDestroy(char *pszUser, char *pszPassword, char *pszDomain, uint32_t cPasses); +VBGLR3DECL(void) VbglR3CredentialsDestroyUtf16(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16 pwszDomain, + uint32_t cPasses); +/** @} */ + +/** @name CPU hotplug monitor + * @{ */ +VBGLR3DECL(int) VbglR3CpuHotPlugInit(void); +VBGLR3DECL(int) VbglR3CpuHotPlugTerm(void); +VBGLR3DECL(int) VbglR3CpuHotPlugWaitForEvent(VMMDevCpuEventType *penmEventType, uint32_t *pidCpuCore, uint32_t *pidCpuPackage); +/** @} */ + +/** @name Page sharing + * @{ */ +struct VMMDEVSHAREDREGIONDESC; +VBGLR3DECL(int) VbglR3RegisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64 GCBaseAddr, uint32_t cbModule, + unsigned cRegions, struct VMMDEVSHAREDREGIONDESC *pRegions); +VBGLR3DECL(int) VbglR3UnregisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64 GCBaseAddr, uint32_t cbModule); +VBGLR3DECL(int) VbglR3CheckSharedModules(void); +VBGLR3DECL(bool) VbglR3PageSharingIsEnabled(void); +VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage, bool *pfShared, uint64_t *puPageFlags); +/** @} */ + +# ifdef VBOX_WITH_DRAG_AND_DROP +/** @name Drag and Drop + * @{ */ +/** + * Structure containing the context required for + * either retrieving or sending a HGCM guest drag'n drop + * commands from or to the host. + * + * Note: Do not change parameter order without also + * adapting all structure initializers. + */ +typedef struct VBGLR3GUESTDNDCMDCTX +{ + /** @todo This struct could be handy if we want to implement + * a second communication channel, e.g. via TCP/IP. + * Use a union for the HGCM stuff then. */ + + /** HGCM client ID to use for communication. */ + uint32_t uClientID; + /** The VM's current session ID. */ + uint64_t uSessionID; + /** Protocol version to use. */ + uint32_t uProtocol; + /** Number of parameters retrieved for the current command. */ + uint32_t uNumParms; + /** Max chunk size (in bytes) for data transfers. */ + uint32_t cbMaxChunkSize; +} VBGLR3GUESTDNDCMDCTX, *PVBGLR3GUESTDNDCMDCTX; + +typedef struct VBGLR3DNDHGCMEVENT +{ + uint32_t uType; /** The event type this struct contains. */ + uint32_t uScreenId; /** Screen ID this request belongs to. */ + char *pszFormats; /** Format list (\r\n separated). */ + uint32_t cbFormats; /** Size (in bytes) of pszFormats (\0 included). */ + union + { + struct + { + uint32_t uXpos; /** X position of guest screen. */ + uint32_t uYpos; /** Y position of guest screen. */ + uint32_t uDefAction; /** Proposed DnD action. */ + uint32_t uAllActions; /** Allowed DnD actions. */ + } a; /** Values used in init, move and drop event type. */ + struct + { + void *pvData; /** Data request. */ + uint32_t cbData; /** Size (in bytes) of pvData. */ + } b; /** Values used in drop data event type. */ + } u; +} VBGLR3DNDHGCMEVENT; +typedef VBGLR3DNDHGCMEVENT *PVBGLR3DNDHGCMEVENT; +typedef const PVBGLR3DNDHGCMEVENT CPVBGLR3DNDHGCMEVENT; +VBGLR3DECL(int) VbglR3DnDConnect(PVBGLR3GUESTDNDCMDCTX pCtx); +VBGLR3DECL(int) VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx); + +VBGLR3DECL(int) VbglR3DnDRecvNextMsg(PVBGLR3GUESTDNDCMDCTX pCtx, CPVBGLR3DNDHGCMEVENT pEvent); + +VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction); +VBGLR3DECL(int) VbglR3DnDHGSendReqData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pcszFormat); +VBGLR3DECL(int) VbglR3DnDHGSendProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr); +# ifdef VBOX_WITH_DRAG_AND_DROP_GH +VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats, uint32_t cbFormats); +VBGLR3DECL(int) VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp); +# endif /* VBOX_WITH_DRAG_AND_DROP_GH */ +/** @} */ +# endif /* VBOX_WITH_DRAG_AND_DROP */ + +/* Generic Host Channel Service. */ +VBGLR3DECL(int) VbglR3HostChannelInit(uint32_t *pidClient); +VBGLR3DECL(void) VbglR3HostChannelTerm(uint32_t idClient); +VBGLR3DECL(int) VbglR3HostChannelAttach(uint32_t *pu32ChannelHandle, uint32_t u32HGCMClientId, + const char *pszName, uint32_t u32Flags); +VBGLR3DECL(void) VbglR3HostChannelDetach(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId); +VBGLR3DECL(int) VbglR3HostChannelSend(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + void *pvData, uint32_t cbData); +VBGLR3DECL(int) VbglR3HostChannelRecv(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + void *pvData, uint32_t cbData, + uint32_t *pu32SizeReceived, uint32_t *pu32SizeRemaining); +VBGLR3DECL(int) VbglR3HostChannelControl(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId, + uint32_t u32Code, void *pvParm, uint32_t cbParm, + void *pvData, uint32_t cbData, uint32_t *pu32SizeDataReturned); +VBGLR3DECL(int) VbglR3HostChannelEventWait(uint32_t *pu32ChannelHandle, uint32_t u32HGCMClientId, + uint32_t *pu32EventId, void *pvParm, uint32_t cbParm, + uint32_t *pu32SizeReturned); +VBGLR3DECL(int) VbglR3HostChannelEventCancel(uint32_t u32ChannelHandle, uint32_t u32HGCMClientId); +VBGLR3DECL(int) VbglR3HostChannelQuery(const char *pszName, uint32_t u32HGCMClientId, uint32_t u32Code, + void *pvParm, uint32_t cbParm, void *pvData, uint32_t cbData, + uint32_t *pu32SizeDataReturned); + +/** @name Mode hint storage + * @{ */ +VBGLR3DECL(int) VbglR3ReadVideoMode(unsigned cDisplay, unsigned *cx, + unsigned *cy, unsigned *cBPP, unsigned *x, + unsigned *y, unsigned *fEnabled); +VBGLR3DECL(int) VbglR3WriteVideoMode(unsigned cDisplay, unsigned cx, + unsigned cy, unsigned cBPP, unsigned x, + unsigned y, unsigned fEnabled); +/** @} */ + +/** @name Generic HGCM + * @{ */ +VBGLR3DECL(int) VbglR3HGCMConnect(const char *pszServiceName, HGCMCLIENTID *pidClient); +VBGLR3DECL(int) VbglR3HGCMDisconnect(HGCMCLIENTID idClient); +struct VBGLIOCHGCMCALL; +VBGLR3DECL(int) VbglR3HGCMCall(struct VBGLIOCHGCMCALL *pInfo, size_t cbInfo); +/** @} */ + +#endif /* IN_RING3 */ +/** @} */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestLibSharedFolders.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestLibSharedFolders.h @@ -0,0 +1,124 @@ +/* $Id: VBoxGuestLibSharedFolders.h $ */ +/** @file + * VBoxGuestLib - Central calls header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VBoxGuestLibSharedFolders_h_ +#define ___VBox_VBoxGuestLibSharedFolders_h_ + +#include +#include + +#ifndef IN_RING0 +# error "ring-0 only" +#endif + +RT_C_DECLS_BEGIN + + +/** @addtogroup grp_vboxguest_lib_r0 + * @{ + */ + +typedef struct VBGLSFCLIENT +{ + HGCMCLIENTID idClient; + VBGLHGCMHANDLE handle; +} VBGLSFCLIENT; +typedef VBGLSFCLIENT *PVBGLSFCLIENT; + +typedef struct VBGLSFMAP +{ + SHFLROOT root; +} VBGLSFMAP, *PVBGLSFMAP; + +DECLVBGL(int) VbglR0SfInit(void); +DECLVBGL(void) VbglR0SfTerm(void); +DECLVBGL(int) VbglR0SfConnect(PVBGLSFCLIENT pClient); +DECLVBGL(void) VbglR0SfDisconnect(PVBGLSFCLIENT pClient); + +DECLVBGL(int) VbglR0SfQueryMappings(PVBGLSFCLIENT pClient, SHFLMAPPING paMappings[], uint32_t *pcMappings); + +DECLVBGL(int) VbglR0SfQueryMapName(PVBGLSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size); + +/** + * Create a new file or folder or open an existing one in a shared folder. Proxies + * to vbsfCreate in the host shared folder service. + * + * @returns IPRT status code, but see note below + * @param pClient Host-guest communication connection + * @param pMap The mapping for the shared folder in which the file + * or folder is to be created + * @param pParsedPath The path of the file or folder relative to the shared + * folder + * @param pCreateParms Parameters for file/folder creation. See the + * structure description in shflsvc.h + * @retval pCreateParms See the structure description in shflsvc.h + * + * @note This function reports errors as follows. The return value is always + * VINF_SUCCESS unless an exceptional condition occurs - out of + * memory, invalid arguments, etc. If the file or folder could not be + * opened or created, pCreateParms->Handle will be set to + * SHFL_HANDLE_NIL on return. In this case the value in + * pCreateParms->Result provides information as to why (e.g. + * SHFL_FILE_EXISTS). pCreateParms->Result is also set on success + * as additional information. + */ +DECLVBGL(int) VbglR0SfCreate(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms); + +DECLVBGL(int) VbglR0SfClose(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE Handle); +DECLVBGL(int) VbglR0SfRemove(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t flags); +DECLVBGL(int) VbglR0SfRename(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags); +DECLVBGL(int) VbglR0SfFlush(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile); + +DECLVBGL(int) VbglR0SfRead(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked); +DECLVBGL(int) VbglR0SfReadPageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, + uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages); +DECLVBGL(int) VbglR0SfWrite(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, + uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked); +DECLVBGL(int) VbglR0SfWritePhysCont(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, + uint32_t *pcbBuffer, RTCCPHYS PhysBuffer); +DECLVBGL(int) VbglR0SfWritePageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, + uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages); + +DECLVBGL(int) VbglR0SfLock(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint64_t cbSize, uint32_t fLock); + +DECLVBGL(int) VbglR0SfDirInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,PSHFLSTRING ParsedPath, uint32_t flags, + uint32_t index, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer, uint32_t *pcFiles); +DECLVBGL(int) VbglR0SfFsInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint32_t flags, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer); + +DECLVBGL(int) VbglR0SfMapFolder(PVBGLSFCLIENT pClient, PSHFLSTRING szFolderName, PVBGLSFMAP pMap); +DECLVBGL(int) VbglR0SfUnmapFolder(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap); +DECLVBGL(int) VbglR0SfSetUtf8(PVBGLSFCLIENT pClient); + +DECLVBGL(int) VbglR0SfReadLink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING ParsedPath, uint32_t pcbBuffer, uint8_t *pBuffer); +DECLVBGL(int) VbglR0SfSymlink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath, PSHFLFSOBJINFO pBuffer); +DECLVBGL(int) VbglR0SfSetSymlinks(PVBGLSFCLIENT pClient); + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestMangling.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VBoxGuestMangling.h @@ -0,0 +1,32 @@ +/** @file + * VBoxGuest - Mangling of IPRT symbols for guest drivers. + * + * This is included via a compiler directive on platforms with a global kernel + * symbol name space (i.e. not Windows, OS/2 and Mac OS X (?)). + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +#define RT_MANGLER(symbol) VBoxGuest_##symbol +#include + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VMMDev.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VMMDev.h @@ -0,0 +1,1823 @@ +/** @file + * Virtual Device for Guest <-> VMM/Host communication (ADD,DEV). + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VMMDev_h +#define ___VBox_VMMDev_h + +#include +#include /* for the PCI IDs. */ +#include +#include +#include +#include +#include + + +#pragma pack(4) /* force structure dword packing here. */ +RT_C_DECLS_BEGIN + + +/** @defgroup grp_vmmdev VMM Device + * + * @note This interface cannot be changed, it can only be extended! + * + * @{ + */ + + +/** Size of VMMDev RAM region accessible by guest. + * Must be big enough to contain VMMDevMemory structure (see further down). + * For now: 4 megabyte. + */ +#define VMMDEV_RAM_SIZE (4 * 256 * PAGE_SIZE) + +/** Size of VMMDev heap region accessible by guest. + * (Must be a power of two (pci range).) + */ +#define VMMDEV_HEAP_SIZE (4 * PAGE_SIZE) + +/** Port for generic request interface (relative offset). */ +#define VMMDEV_PORT_OFF_REQUEST 0 + + +/** @defgroup grp_vmmdev_req VMMDev Generic Request Interface + * @{ + */ + +/** @name Current version of the VMMDev interface. + * + * Additions are allowed to work only if + * additions_major == vmmdev_current && additions_minor <= vmmdev_current. + * Additions version is reported to host (VMMDev) by VMMDevReq_ReportGuestInfo. + * + * @remarks These defines also live in the 16-bit and assembly versions of this + * header. + */ +#define VMMDEV_VERSION 0x00010004 +#define VMMDEV_VERSION_MAJOR (VMMDEV_VERSION >> 16) +#define VMMDEV_VERSION_MINOR (VMMDEV_VERSION & 0xffff) +/** @} */ + +/** Maximum request packet size. */ +#define VMMDEV_MAX_VMMDEVREQ_SIZE _1M +/** Maximum number of HGCM parameters. + * @todo r=bird: This is wrong wrt user land calls. For them it iss 61. + * See comments on VBGLIOCHGCMCALL::cParms. */ +#define VMMDEV_MAX_HGCM_PARMS 1024 +/** Maximum total size of hgcm buffers in one call. */ +#define VMMDEV_MAX_HGCM_DATA_SIZE UINT32_C(0x7FFFFFFF) + +/** + * VMMDev request types. + * @note when updating this, adjust vmmdevGetRequestSize() as well + */ +typedef enum VMMDevRequestType +{ + VMMDevReq_InvalidRequest = 0, + VMMDevReq_GetMouseStatus = 1, + VMMDevReq_SetMouseStatus = 2, + VMMDevReq_SetPointerShape = 3, + VMMDevReq_GetHostVersion = 4, + VMMDevReq_Idle = 5, + VMMDevReq_GetHostTime = 10, + VMMDevReq_GetHypervisorInfo = 20, + VMMDevReq_SetHypervisorInfo = 21, + VMMDevReq_RegisterPatchMemory = 22, /**< @since version 3.0.6 */ + VMMDevReq_DeregisterPatchMemory = 23, /**< @since version 3.0.6 */ + VMMDevReq_SetPowerStatus = 30, + VMMDevReq_AcknowledgeEvents = 41, + VMMDevReq_CtlGuestFilterMask = 42, + VMMDevReq_ReportGuestInfo = 50, + VMMDevReq_ReportGuestInfo2 = 58, /**< @since version 3.2.0 */ + VMMDevReq_ReportGuestStatus = 59, /**< @since version 3.2.8 */ + VMMDevReq_ReportGuestUserState = 74, /**< @since version 4.3 */ + /** + * Retrieve a display resize request sent by the host using + * @a IDisplay:setVideoModeHint. Deprecated. + * + * Similar to @a VMMDevReq_GetDisplayChangeRequest2, except that it only + * considers host requests sent for the first virtual display. This guest + * request should not be used in new guest code, and the results are + * undefined if a guest mixes calls to this and + * @a VMMDevReq_GetDisplayChangeRequest2. + */ + VMMDevReq_GetDisplayChangeRequest = 51, + VMMDevReq_VideoModeSupported = 52, + VMMDevReq_GetHeightReduction = 53, + /** + * Retrieve a display resize request sent by the host using + * @a IDisplay:setVideoModeHint. + * + * Queries a display resize request sent from the host. If the + * @a eventAck member is sent to true and there is an unqueried + * request available for one of the virtual display then that request will + * be returned. If several displays have unqueried requests the lowest + * numbered display will be chosen first. Only the most recent unseen + * request for each display is remembered. + * If @a eventAck is set to false, the last host request queried with + * @a eventAck set is resent, or failing that the most recent received from + * the host. If no host request was ever received then all zeros are + * returned. + */ + VMMDevReq_GetDisplayChangeRequest2 = 54, + VMMDevReq_ReportGuestCapabilities = 55, + VMMDevReq_SetGuestCapabilities = 56, + VMMDevReq_VideoModeSupported2 = 57, /**< @since version 3.2.0 */ + VMMDevReq_GetDisplayChangeRequestEx = 80, /**< @since version 4.2.4 */ +#ifdef VBOX_WITH_HGCM + VMMDevReq_HGCMConnect = 60, + VMMDevReq_HGCMDisconnect = 61, +#ifdef VBOX_WITH_64_BITS_GUESTS + VMMDevReq_HGCMCall32 = 62, + VMMDevReq_HGCMCall64 = 63, +#else + VMMDevReq_HGCMCall = 62, +#endif /* VBOX_WITH_64_BITS_GUESTS */ + VMMDevReq_HGCMCancel = 64, + VMMDevReq_HGCMCancel2 = 65, +#endif + VMMDevReq_VideoAccelEnable = 70, + VMMDevReq_VideoAccelFlush = 71, + VMMDevReq_VideoSetVisibleRegion = 72, + VMMDevReq_GetSeamlessChangeRequest = 73, + VMMDevReq_QueryCredentials = 100, + VMMDevReq_ReportCredentialsJudgement = 101, + VMMDevReq_ReportGuestStats = 110, + VMMDevReq_GetMemBalloonChangeRequest = 111, + VMMDevReq_GetStatisticsChangeRequest = 112, + VMMDevReq_ChangeMemBalloon = 113, + VMMDevReq_GetVRDPChangeRequest = 150, + VMMDevReq_LogString = 200, + VMMDevReq_GetCpuHotPlugRequest = 210, + VMMDevReq_SetCpuHotPlugStatus = 211, + VMMDevReq_RegisterSharedModule = 212, + VMMDevReq_UnregisterSharedModule = 213, + VMMDevReq_CheckSharedModules = 214, + VMMDevReq_GetPageSharingStatus = 215, + VMMDevReq_DebugIsPageShared = 216, + VMMDevReq_GetSessionId = 217, /**< @since version 3.2.8 */ + VMMDevReq_WriteCoreDump = 218, + VMMDevReq_GuestHeartbeat = 219, + VMMDevReq_HeartbeatConfigure = 220, + VMMDevReq_SizeHack = 0x7fffffff +} VMMDevRequestType; + +#ifdef VBOX_WITH_64_BITS_GUESTS +/* + * Constants and structures are redefined for the guest. + * + * Host code MUST always use either *32 or *64 variant explicitely. + * Host source code will use VBOX_HGCM_HOST_CODE define to catch undefined + * data types and constants. + * + * This redefinition means that the new additions builds will use + * the *64 or *32 variants depending on the current architecture bit count (ARCH_BITS). + */ +# ifndef VBOX_HGCM_HOST_CODE +# if ARCH_BITS == 64 +# define VMMDevReq_HGCMCall VMMDevReq_HGCMCall64 +# elif ARCH_BITS == 32 || ARCH_BITS == 16 +# define VMMDevReq_HGCMCall VMMDevReq_HGCMCall32 +# else +# error "Unsupported ARCH_BITS" +# endif +# endif /* !VBOX_HGCM_HOST_CODE */ +#endif /* VBOX_WITH_64_BITS_GUESTS */ + +/** Version of VMMDevRequestHeader structure. */ +#define VMMDEV_REQUEST_HEADER_VERSION (0x10001) + + +/** + * Generic VMMDev request header. + * + * This structure is copied/mirrored by VBGLREQHDR in the VBoxGuest I/O control + * interface. Changes there needs to be mirrored in it. + * + * @sa VBGLREQHDR + */ +typedef struct VMMDevRequestHeader +{ + /** IN: Size of the structure in bytes (including body). + * (VBGLREQHDR uses this for input size and output if reserved1 is zero). */ + uint32_t size; + /** IN: Version of the structure. */ + uint32_t version; + /** IN: Type of the request. + * @note VBGLREQHDR uses this for optional output size. */ + VMMDevRequestType requestType; + /** OUT: VBox status code. */ + int32_t rc; + /** Reserved field no.1. MBZ. + * @note VBGLREQHDR uses this for optional output size, however never for a + * real VMMDev request, only in the I/O control interface. */ + uint32_t reserved1; + /** Reserved field no.2. MBZ. */ + uint32_t reserved2; +} VMMDevRequestHeader; +AssertCompileSize(VMMDevRequestHeader, 24); + +/** Initialize a VMMDevRequestHeader structure. + * Same as VBGLREQHDR_INIT_VMMDEV(). */ +#define VMMDEV_REQ_HDR_INIT(a_pHdr, a_cb, a_enmType) \ + do { \ + (a_pHdr)->size = (a_cb); \ + (a_pHdr)->version = VMMDEV_REQUEST_HEADER_VERSION; \ + (a_pHdr)->requestType = (a_enmType); \ + (a_pHdr)->rc = VERR_INTERNAL_ERROR; \ + (a_pHdr)->reserved1 = 0; \ + (a_pHdr)->reserved2 = 0; \ + } while (0) + + +/** + * Mouse status request structure. + * + * Used by VMMDevReq_GetMouseStatus and VMMDevReq_SetMouseStatus. + */ +typedef struct +{ + /** header */ + VMMDevRequestHeader header; + /** Mouse feature mask. See VMMDEV_MOUSE_*. */ + uint32_t mouseFeatures; + /** Mouse x position. */ + int32_t pointerXPos; + /** Mouse y position. */ + int32_t pointerYPos; +} VMMDevReqMouseStatus; +AssertCompileSize(VMMDevReqMouseStatus, 24+12); + +/** @name Mouse capability bits (VMMDevReqMouseStatus::mouseFeatures). + * @{ */ +/** The guest can (== wants to) handle absolute coordinates. */ +#define VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE RT_BIT(0) +/** The host can (== wants to) send absolute coordinates. + * (Input not captured.) */ +#define VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE RT_BIT(1) +/** The guest can *NOT* switch to software cursor and therefore depends on the + * host cursor. + * + * When guest additions are installed and the host has promised to display the + * cursor itself, the guest installs a hardware mouse driver. Don't ask the + * guest to switch to a software cursor then. */ +#define VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR RT_BIT(2) +/** The host does NOT provide support for drawing the cursor itself. */ +#define VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER RT_BIT(3) +/** The guest can read VMMDev events to find out about pointer movement */ +#define VMMDEV_MOUSE_NEW_PROTOCOL RT_BIT(4) +/** If the guest changes the status of the + * VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR bit, the host will honour this */ +#define VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR RT_BIT(5) +/** The host supplies an absolute pointing device. The Guest Additions may + * wish to use this to decide whether to install their own driver */ +#define VMMDEV_MOUSE_HOST_HAS_ABS_DEV RT_BIT(6) +/** The mask of all VMMDEV_MOUSE_* flags */ +#define VMMDEV_MOUSE_MASK UINT32_C(0x0000007f) +/** The mask of guest capability changes for which notification events should + * be sent */ +#define VMMDEV_MOUSE_NOTIFY_HOST_MASK \ + (VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE | VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR) +/** The mask of all capabilities which the guest can legitimately change */ +#define VMMDEV_MOUSE_GUEST_MASK \ + (VMMDEV_MOUSE_NOTIFY_HOST_MASK | VMMDEV_MOUSE_NEW_PROTOCOL) +/** The mask of host capability changes for which notification events should + * be sent */ +#define VMMDEV_MOUSE_NOTIFY_GUEST_MASK \ + VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE +/** The mask of all capabilities which the host can legitimately change */ +#define VMMDEV_MOUSE_HOST_MASK \ + ( VMMDEV_MOUSE_NOTIFY_GUEST_MASK \ + | VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER \ + | VMMDEV_MOUSE_HOST_RECHECKS_NEEDS_HOST_CURSOR \ + | VMMDEV_MOUSE_HOST_HAS_ABS_DEV) +/** @} */ + +/** @name Absolute mouse reporting range + * @{ */ +/** @todo Should these be here? They are needed by both host and guest. */ +/** The minumum value our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE_MIN 0 +/** The maximum value our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE_MAX 0xFFFF +/** The full range our pointing device can return. */ +#define VMMDEV_MOUSE_RANGE (VMMDEV_MOUSE_RANGE_MAX - VMMDEV_MOUSE_RANGE_MIN) +/** @} */ + + +/** + * Mouse pointer shape/visibility change request. + * + * Used by VMMDevReq_SetPointerShape. The size is variable. + */ +typedef struct VMMDevReqMousePointer +{ + /** Header. */ + VMMDevRequestHeader header; + /** VBOX_MOUSE_POINTER_* bit flags from VBox/Graphics/VBoxVideo.h. */ + uint32_t fFlags; + /** x coordinate of hot spot. */ + uint32_t xHot; + /** y coordinate of hot spot. */ + uint32_t yHot; + /** Width of the pointer in pixels. */ + uint32_t width; + /** Height of the pointer in scanlines. */ + uint32_t height; + /** Pointer data. + * + **** + * The data consists of 1 bpp AND mask followed by 32 bpp XOR (color) mask. + * + * For pointers without alpha channel the XOR mask pixels are 32 bit values: (lsb)BGR0(msb). + * For pointers with alpha channel the XOR mask consists of (lsb)BGRA(msb) 32 bit values. + * + * Guest driver must create the AND mask for pointers with alpha channel, so if host does not + * support alpha, the pointer could be displayed as a normal color pointer. The AND mask can + * be constructed from alpha values. For example alpha value >= 0xf0 means bit 0 in the AND mask. + * + * The AND mask is 1 bpp bitmap with byte aligned scanlines. Size of AND mask, + * therefore, is cbAnd = (width + 7) / 8 * height. The padding bits at the + * end of any scanline are undefined. + * + * The XOR mask follows the AND mask on the next 4 bytes aligned offset: + * uint8_t *pXor = pAnd + (cbAnd + 3) & ~3 + * Bytes in the gap between the AND and the XOR mask are undefined. + * XOR mask scanlines have no gap between them and size of XOR mask is: + * cXor = width * 4 * height. + **** + * + * Preallocate 4 bytes for accessing actual data as p->pointerData. + */ + char pointerData[4]; +} VMMDevReqMousePointer; +AssertCompileSize(VMMDevReqMousePointer, 24+24); + +/** + * Get the size that a VMMDevReqMousePointer request should have for a given + * size of cursor, including the trailing cursor image and mask data. + * @note an "empty" request still has the four preallocated bytes of data + * + * @returns the size + * @param width the cursor width + * @param height the cursor height + */ +DECLINLINE(size_t) vmmdevGetMousePointerReqSize(uint32_t width, uint32_t height) +{ + size_t cbBase = RT_OFFSETOF(VMMDevReqMousePointer, pointerData[0]); + size_t cbMask = (width + 7) / 8 * height; + size_t cbArgb = width * height * 4; + return RT_MAX(cbBase + ((cbMask + 3) & ~3) + cbArgb, + sizeof(VMMDevReqMousePointer)); +} + + +/** + * String log request structure. + * + * Used by VMMDevReq_LogString. + * @deprecated Use the IPRT logger or VbglR3WriteLog instead. + */ +typedef struct +{ + /** header */ + VMMDevRequestHeader header; + /** variable length string data */ + char szString[1]; +} VMMDevReqLogString; +AssertCompileSize(VMMDevReqLogString, 24+4); + + +/** + * VirtualBox host version request structure. + * + * Used by VMMDevReq_GetHostVersion. + * + * @remarks VBGL uses this to detect the precense of new features in the + * interface. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Major version. */ + uint16_t major; + /** Minor version. */ + uint16_t minor; + /** Build number. */ + uint32_t build; + /** SVN revision. */ + uint32_t revision; + /** Feature mask. */ + uint32_t features; +} VMMDevReqHostVersion; +AssertCompileSize(VMMDevReqHostVersion, 24+16); + +/** @name VMMDevReqHostVersion::features + * @{ */ +/** Physical page lists are supported by HGCM. */ +#define VMMDEV_HVF_HGCM_PHYS_PAGE_LIST RT_BIT(0) +/** @} */ + + +/** + * Guest capabilities structure. + * + * Used by VMMDevReq_ReportGuestCapabilities. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Capabilities (VMMDEV_GUEST_*). */ + uint32_t caps; +} VMMDevReqGuestCapabilities; +AssertCompileSize(VMMDevReqGuestCapabilities, 24+4); + + +/** + * Guest capabilities structure, version 2. + * + * Used by VMMDevReq_SetGuestCapabilities. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Mask of capabilities to be added. */ + uint32_t u32OrMask; + /** Mask of capabilities to be removed. */ + uint32_t u32NotMask; +} VMMDevReqGuestCapabilities2; +AssertCompileSize(VMMDevReqGuestCapabilities2, 24+8); + + +/** + * Idle request structure. + * + * Used by VMMDevReq_Idle. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevReqIdle; +AssertCompileSize(VMMDevReqIdle, 24); + + +/** + * Host time request structure. + * + * Used by VMMDevReq_GetHostTime. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** OUT: Time in milliseconds since unix epoch. */ + uint64_t time; +} VMMDevReqHostTime; +AssertCompileSize(VMMDevReqHostTime, 24+8); + + +/** + * Hypervisor info structure. + * + * Used by VMMDevReq_GetHypervisorInfo and VMMDevReq_SetHypervisorInfo. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest virtual address of proposed hypervisor start. + * Not used by VMMDevReq_GetHypervisorInfo. + * @todo Make this 64-bit compatible? */ + RTGCPTR32 hypervisorStart; + /** Hypervisor size in bytes. */ + uint32_t hypervisorSize; +} VMMDevReqHypervisorInfo; +AssertCompileSize(VMMDevReqHypervisorInfo, 24+8); + +/** @name Default patch memory size . + * Used by VMMDevReq_RegisterPatchMemory and VMMDevReq_DeregisterPatchMemory. + * @{ */ +#define VMMDEV_GUEST_DEFAULT_PATCHMEM_SIZE 8192 +/** @} */ + +/** + * Patching memory structure. (locked executable & read-only page from the guest's perspective) + * + * Used by VMMDevReq_RegisterPatchMemory and VMMDevReq_DeregisterPatchMemory + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest virtual address of the patching page(s). */ + RTGCPTR64 pPatchMem; + /** Patch page size in bytes. */ + uint32_t cbPatchMem; +} VMMDevReqPatchMemory; +AssertCompileSize(VMMDevReqPatchMemory, 24+12); + + +/** + * Guest power requests. + * + * See VMMDevReq_SetPowerStatus and VMMDevPowerStateRequest. + */ +typedef enum +{ + VMMDevPowerState_Invalid = 0, + VMMDevPowerState_Pause = 1, + VMMDevPowerState_PowerOff = 2, + VMMDevPowerState_SaveState = 3, + VMMDevPowerState_SizeHack = 0x7fffffff +} VMMDevPowerState; +AssertCompileSize(VMMDevPowerState, 4); + +/** + * VM power status structure. + * + * Used by VMMDevReq_SetPowerStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Power state request. */ + VMMDevPowerState powerState; +} VMMDevPowerStateRequest; +AssertCompileSize(VMMDevPowerStateRequest, 24+4); + + +/** + * Pending events structure. + * + * Used by VMMDevReq_AcknowledgeEvents. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Pending event mask. */ + uint32_t events; +} VMMDevEvents; +AssertCompileSize(VMMDevEvents, 24+4); + + +/** + * Guest event filter mask control. + * + * Used by VMMDevReq_CtlGuestFilterMask. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Mask of events to be added to the filter. */ + uint32_t u32OrMask; + /** Mask of events to be removed from the filter. */ + uint32_t u32NotMask; +} VMMDevCtlGuestFilterMask; +AssertCompileSize(VMMDevCtlGuestFilterMask, 24+8); + + +/** + * Guest information structure. + * + * Used by VMMDevReportGuestInfo and PDMIVMMDEVCONNECTOR::pfnUpdateGuestVersion. + */ +typedef struct VBoxGuestInfo +{ + /** The VMMDev interface version expected by additions. + * *Deprecated*, do not use anymore! Will be removed. */ + uint32_t interfaceVersion; + /** Guest OS type. */ + VBOXOSTYPE osType; +} VBoxGuestInfo; +AssertCompileSize(VBoxGuestInfo, 8); + +/** + * Guest information report. + * + * Used by VMMDevReq_ReportGuestInfo. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestInfo guestInfo; +} VMMDevReportGuestInfo; +AssertCompileSize(VMMDevReportGuestInfo, 24+8); + + +/** + * Guest information structure, version 2. + * + * Used by VMMDevReportGuestInfo2 and PDMIVMMDEVCONNECTOR::pfnUpdateGuestVersion2. + */ +typedef struct VBoxGuestInfo2 +{ + /** Major version. */ + uint16_t additionsMajor; + /** Minor version. */ + uint16_t additionsMinor; + /** Build number. */ + uint32_t additionsBuild; + /** SVN revision. */ + uint32_t additionsRevision; + /** Feature mask, currently unused. */ + uint32_t additionsFeatures; + /** The intentional meaning of this field was: + * Some additional information, for example 'Beta 1' or something like that. + * + * The way it was implemented was implemented: VBOX_VERSION_STRING. + * + * This means the first three members are duplicated in this field (if the guest + * build config is sane). So, the user must check this and chop it off before + * usage. There is, because of the Main code's blind trust in the field's + * content, no way back. */ + char szName[128]; +} VBoxGuestInfo2; +AssertCompileSize(VBoxGuestInfo2, 144); + +/** + * Guest information report, version 2. + * + * Used by VMMDevReq_ReportGuestInfo2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestInfo2 guestInfo; +} VMMDevReportGuestInfo2; +AssertCompileSize(VMMDevReportGuestInfo2, 24+144); + + +/** + * The facility class. + * + * This needs to be kept in sync with AdditionsFacilityClass of the Main API! + */ +typedef enum +{ + VBoxGuestFacilityClass_None = 0, + VBoxGuestFacilityClass_Driver = 10, + VBoxGuestFacilityClass_Service = 30, + VBoxGuestFacilityClass_Program = 50, + VBoxGuestFacilityClass_Feature = 100, + VBoxGuestFacilityClass_ThirdParty = 999, + VBoxGuestFacilityClass_All = 0x7ffffffe, + VBoxGuestFacilityClass_SizeHack = 0x7fffffff +} VBoxGuestFacilityClass; +AssertCompileSize(VBoxGuestFacilityClass, 4); + +/** + * Guest status structure. + * + * Used by VMMDevReqGuestStatus. + */ +typedef struct VBoxGuestStatus +{ + /** Facility the status is indicated for. */ + VBoxGuestFacilityType facility; + /** Current guest status. */ + VBoxGuestFacilityStatus status; + /** Flags, not used at the moment. */ + uint32_t flags; +} VBoxGuestStatus; +AssertCompileSize(VBoxGuestStatus, 12); + +/** + * Guest Additions status structure. + * + * Used by VMMDevReq_ReportGuestStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestStatus guestStatus; +} VMMDevReportGuestStatus; +AssertCompileSize(VMMDevReportGuestStatus, 24+12); + + +/** + * Guest user status updates. + */ +typedef struct VBoxGuestUserStatus +{ + /** The guest user state to send. */ + VBoxGuestUserState state; + /** Size (in bytes) of szUser. */ + uint32_t cbUser; + /** Size (in bytes) of szDomain. */ + uint32_t cbDomain; + /** Size (in bytes) of aDetails. */ + uint32_t cbDetails; + /** Note: Here begins the dynamically + * allocated region. */ + /** Guest user to report state for. */ + char szUser[1]; + /** Domain the guest user is bound to. */ + char szDomain[1]; + /** Optional details of the state. */ + uint8_t aDetails[1]; +} VBoxGuestUserStatus; +AssertCompileSize(VBoxGuestUserStatus, 20); + + +/** + * Guest user status structure. + * + * Used by VMMDevReq_ReportGuestUserStatus. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest user status. */ + VBoxGuestUserStatus status; +} VMMDevReportGuestUserState; +AssertCompileSize(VMMDevReportGuestUserState, 24+20); + + +/** + * Guest statistics structure. + * + * Used by VMMDevReportGuestStats and PDMIVMMDEVCONNECTOR::pfnReportStatistics. + */ +typedef struct VBoxGuestStatistics +{ + /** Virtual CPU ID. */ + uint32_t u32CpuId; + /** Reported statistics. */ + uint32_t u32StatCaps; + /** Idle CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_Idle; + /** Kernel CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_Kernel; + /** User CPU load (0-100) for last interval. */ + uint32_t u32CpuLoad_User; + /** Nr of threads. */ + uint32_t u32Threads; + /** Nr of processes. */ + uint32_t u32Processes; + /** Nr of handles. */ + uint32_t u32Handles; + /** Memory load (0-100). */ + uint32_t u32MemoryLoad; + /** Page size of guest system. */ + uint32_t u32PageSize; + /** Total physical memory (in 4KB pages). */ + uint32_t u32PhysMemTotal; + /** Available physical memory (in 4KB pages). */ + uint32_t u32PhysMemAvail; + /** Ballooned physical memory (in 4KB pages). */ + uint32_t u32PhysMemBalloon; + /** Total number of committed memory (which is not necessarily in-use) (in 4KB pages). */ + uint32_t u32MemCommitTotal; + /** Total amount of memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelTotal; + /** Total amount of paged memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelPaged; + /** Total amount of nonpaged memory used by the kernel (in 4KB pages). */ + uint32_t u32MemKernelNonPaged; + /** Total amount of memory used for the system cache (in 4KB pages). */ + uint32_t u32MemSystemCache; + /** Pagefile size (in 4KB pages). */ + uint32_t u32PageFileSize; +} VBoxGuestStatistics; +AssertCompileSize(VBoxGuestStatistics, 19*4); + +/** @name Guest statistics values (VBoxGuestStatistics::u32StatCaps). + * @{ */ +#define VBOX_GUEST_STAT_CPU_LOAD_IDLE RT_BIT(0) +#define VBOX_GUEST_STAT_CPU_LOAD_KERNEL RT_BIT(1) +#define VBOX_GUEST_STAT_CPU_LOAD_USER RT_BIT(2) +#define VBOX_GUEST_STAT_THREADS RT_BIT(3) +#define VBOX_GUEST_STAT_PROCESSES RT_BIT(4) +#define VBOX_GUEST_STAT_HANDLES RT_BIT(5) +#define VBOX_GUEST_STAT_MEMORY_LOAD RT_BIT(6) +#define VBOX_GUEST_STAT_PHYS_MEM_TOTAL RT_BIT(7) +#define VBOX_GUEST_STAT_PHYS_MEM_AVAIL RT_BIT(8) +#define VBOX_GUEST_STAT_PHYS_MEM_BALLOON RT_BIT(9) +#define VBOX_GUEST_STAT_MEM_COMMIT_TOTAL RT_BIT(10) +#define VBOX_GUEST_STAT_MEM_KERNEL_TOTAL RT_BIT(11) +#define VBOX_GUEST_STAT_MEM_KERNEL_PAGED RT_BIT(12) +#define VBOX_GUEST_STAT_MEM_KERNEL_NONPAGED RT_BIT(13) +#define VBOX_GUEST_STAT_MEM_SYSTEM_CACHE RT_BIT(14) +#define VBOX_GUEST_STAT_PAGE_FILE_SIZE RT_BIT(15) +/** @} */ + +/** + * Guest statistics command structure. + * + * Used by VMMDevReq_ReportGuestStats. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Guest information. */ + VBoxGuestStatistics guestStats; +} VMMDevReportGuestStats; +AssertCompileSize(VMMDevReportGuestStats, 24+19*4); + + +/** Memory balloon change request structure. */ +#define VMMDEV_MAX_MEMORY_BALLOON(PhysMemTotal) ( (9 * (PhysMemTotal)) / 10 ) + +/** + * Poll for ballooning change request. + * + * Used by VMMDevReq_GetMemBalloonChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Balloon size in megabytes. */ + uint32_t cBalloonChunks; + /** Guest ram size in megabytes. */ + uint32_t cPhysMemChunks; + /** Setting this to VMMDEV_EVENT_BALLOON_CHANGE_REQUEST indicates that the + * request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevGetMemBalloonChangeRequest; +AssertCompileSize(VMMDevGetMemBalloonChangeRequest, 24+12); + + +/** + * Change the size of the balloon. + * + * Used by VMMDevReq_ChangeMemBalloon. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The number of pages in the array. */ + uint32_t cPages; + /** true = inflate, false = deflate. */ + uint32_t fInflate; + /** Physical address (RTGCPHYS) of each page, variable size. */ + RTGCPHYS aPhysPage[1]; +} VMMDevChangeMemBalloon; +AssertCompileSize(VMMDevChangeMemBalloon, 24+16); + + +/** + * Guest statistics interval change request structure. + * + * Used by VMMDevReq_GetStatisticsChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The interval in seconds. */ + uint32_t u32StatInterval; + /** Setting this to VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevGetStatisticsChangeRequest; +AssertCompileSize(VMMDevGetStatisticsChangeRequest, 24+8); + + +/** The size of a string field in the credentials request (including '\\0'). + * @see VMMDevCredentials */ +#define VMMDEV_CREDENTIALS_SZ_SIZE 128 + +/** + * Credentials request structure. + * + * Used by VMMDevReq_QueryCredentials. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN/OUT: Request flags. */ + uint32_t u32Flags; + /** OUT: User name (UTF-8). */ + char szUserName[VMMDEV_CREDENTIALS_SZ_SIZE]; + /** OUT: Password (UTF-8). */ + char szPassword[VMMDEV_CREDENTIALS_SZ_SIZE]; + /** OUT: Domain name (UTF-8). */ + char szDomain[VMMDEV_CREDENTIALS_SZ_SIZE]; +} VMMDevCredentials; +AssertCompileSize(VMMDevCredentials, 24+4+3*128); + +/** @name Credentials request flag (VMMDevCredentials::u32Flags) + * @{ */ +/** query from host whether credentials are present */ +#define VMMDEV_CREDENTIALS_QUERYPRESENCE RT_BIT(1) +/** read credentials from host (can be combined with clear) */ +#define VMMDEV_CREDENTIALS_READ RT_BIT(2) +/** clear credentials on host (can be combined with read) */ +#define VMMDEV_CREDENTIALS_CLEAR RT_BIT(3) +/** read credentials for judgement in the guest */ +#define VMMDEV_CREDENTIALS_READJUDGE RT_BIT(8) +/** clear credentials for judegement on the host */ +#define VMMDEV_CREDENTIALS_CLEARJUDGE RT_BIT(9) +/** report credentials acceptance by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_OK RT_BIT(10) +/** report credentials denial by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_DENY RT_BIT(11) +/** report that no judgement could be made by guest */ +#define VMMDEV_CREDENTIALS_JUDGE_NOJUDGEMENT RT_BIT(12) + +/** flag telling the guest that credentials are present */ +#define VMMDEV_CREDENTIALS_PRESENT RT_BIT(16) +/** flag telling guest that local logons should be prohibited */ +#define VMMDEV_CREDENTIALS_NOLOCALLOGON RT_BIT(17) +/** @} */ + + +/** + * Seamless mode change request structure. + * + * Used by VMMDevReq_GetSeamlessChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + + /** New seamless mode. */ + VMMDevSeamlessMode mode; + /** Setting this to VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevSeamlessChangeRequest; +AssertCompileSize(VMMDevSeamlessChangeRequest, 24+8); +AssertCompileMemberOffset(VMMDevSeamlessChangeRequest, eventAck, 24+4); + + +/** + * Display change request structure. + * + * Used by VMMDevReq_GetDisplayChangeRequest. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; +} VMMDevDisplayChangeRequest; +AssertCompileSize(VMMDevDisplayChangeRequest, 24+16); + + +/** + * Display change request structure, version 2. + * + * Used by VMMDevReq_GetDisplayChangeRequest2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; + /** 0 for primary display, 1 for the first secondary, etc. */ + uint32_t display; +} VMMDevDisplayChangeRequest2; +AssertCompileSize(VMMDevDisplayChangeRequest2, 24+20); + + +/** + * Display change request structure, version Extended. + * + * Used by VMMDevReq_GetDisplayChangeRequestEx. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Horizontal pixel resolution (0 = do not change). */ + uint32_t xres; + /** Vertical pixel resolution (0 = do not change). */ + uint32_t yres; + /** Bits per pixel (0 = do not change). */ + uint32_t bpp; + /** Setting this to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST indicates + * that the request is a response to that event. + * (Don't confuse this with VMMDevReq_AcknowledgeEvents.) */ + uint32_t eventAck; + /** 0 for primary display, 1 for the first secondary, etc. */ + uint32_t display; + /** New OriginX of secondary virtual screen */ + uint32_t cxOrigin; + /** New OriginY of secondary virtual screen */ + uint32_t cyOrigin; + /** Change in origin of the secondary virtaul scree is + * required */ + bool fChangeOrigin; + /** secondary virtual screen enabled or disabled */ + bool fEnabled; +} VMMDevDisplayChangeRequestEx; +AssertCompileSize(VMMDevDisplayChangeRequestEx, 24+32); + + +/** + * Video mode supported request structure. + * + * Used by VMMDevReq_VideoModeSupported. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN: Horizontal pixel resolution. */ + uint32_t width; + /** IN: Vertical pixel resolution. */ + uint32_t height; + /** IN: Bits per pixel. */ + uint32_t bpp; + /** OUT: Support indicator. */ + bool fSupported; +} VMMDevVideoModeSupportedRequest; +AssertCompileSize(VMMDevVideoModeSupportedRequest, 24+16); + +/** + * Video mode supported request structure for a specific display. + * + * Used by VMMDevReq_VideoModeSupported2. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** IN: The guest display number. */ + uint32_t display; + /** IN: Horizontal pixel resolution. */ + uint32_t width; + /** IN: Vertical pixel resolution. */ + uint32_t height; + /** IN: Bits per pixel. */ + uint32_t bpp; + /** OUT: Support indicator. */ + bool fSupported; +} VMMDevVideoModeSupportedRequest2; +AssertCompileSize(VMMDevVideoModeSupportedRequest2, 24+20); + +/** + * Video modes height reduction request structure. + * + * Used by VMMDevReq_GetHeightReduction. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Height reduction in pixels. */ + uint32_t heightReduction; +} VMMDevGetHeightReductionRequest; +AssertCompileSize(VMMDevGetHeightReductionRequest, 24+4); + + +/** + * VRDP change request structure. + * + * Used by VMMDevReq_GetVRDPChangeRequest. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** Whether VRDP is active or not. */ + uint8_t u8VRDPActive; + /** The configured experience level for active VRDP. */ + uint32_t u32VRDPExperienceLevel; +} VMMDevVRDPChangeRequest; +AssertCompileSize(VMMDevVRDPChangeRequest, 24+8); +AssertCompileMemberOffset(VMMDevVRDPChangeRequest, u8VRDPActive, 24); +AssertCompileMemberOffset(VMMDevVRDPChangeRequest, u32VRDPExperienceLevel, 24+4); + +/** @name VRDP Experience level (VMMDevVRDPChangeRequest::u32VRDPExperienceLevel) + * @{ */ +#define VRDP_EXPERIENCE_LEVEL_ZERO 0 /**< Theming disabled. */ +#define VRDP_EXPERIENCE_LEVEL_LOW 1 /**< Full window dragging and desktop wallpaper disabled. */ +#define VRDP_EXPERIENCE_LEVEL_MEDIUM 2 /**< Font smoothing, gradients. */ +#define VRDP_EXPERIENCE_LEVEL_HIGH 3 /**< Animation effects disabled. */ +#define VRDP_EXPERIENCE_LEVEL_FULL 4 /**< Everything enabled. */ +/** @} */ + + +/** + * VBVA enable request structure. + * + * Used by VMMDevReq_VideoAccelEnable. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** 0 - disable, !0 - enable. */ + uint32_t u32Enable; + /** The size of VBVAMEMORY::au8RingBuffer expected by driver. + * The host will refuse to enable VBVA if the size is not equal to + * VBVA_RING_BUFFER_SIZE. + */ + uint32_t cbRingBuffer; + /** Guest initializes the status to 0. Host sets appropriate VBVA_F_STATUS_ flags. */ + uint32_t fu32Status; +} VMMDevVideoAccelEnable; +AssertCompileSize(VMMDevVideoAccelEnable, 24+12); + +/** @name VMMDevVideoAccelEnable::fu32Status. + * @{ */ +#define VBVA_F_STATUS_ACCEPTED (0x01) +#define VBVA_F_STATUS_ENABLED (0x02) +/** @} */ + + +/** + * VBVA flush request structure. + * + * Used by VMMDevReq_VideoAccelFlush. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevVideoAccelFlush; +AssertCompileSize(VMMDevVideoAccelFlush, 24); + + +/** + * VBVA set visible region request structure. + * + * Used by VMMDevReq_VideoSetVisibleRegion. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Number of rectangles */ + uint32_t cRect; + /** Rectangle array. + * @todo array is spelled aRects[1]. */ + RTRECT Rect; +} VMMDevVideoSetVisibleRegion; +AssertCompileSize(RTRECT, 16); +AssertCompileSize(VMMDevVideoSetVisibleRegion, 24+4+16); + +/** + * CPU event types. + */ +typedef enum +{ + VMMDevCpuStatusType_Invalid = 0, + VMMDevCpuStatusType_Disable = 1, + VMMDevCpuStatusType_Enable = 2, + VMMDevCpuStatusType_SizeHack = 0x7fffffff +} VMMDevCpuStatusType; + +/** + * CPU hotplug event status request. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Status type */ + VMMDevCpuStatusType enmStatusType; +} VMMDevCpuHotPlugStatusRequest; +AssertCompileSize(VMMDevCpuHotPlugStatusRequest, 24+4); + +/** + * Get the ID of the changed CPU and event type. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Event type */ + VMMDevCpuEventType enmEventType; + /** core id of the CPU changed */ + uint32_t idCpuCore; + /** package id of the CPU changed */ + uint32_t idCpuPackage; +} VMMDevGetCpuHotPlugRequest; +AssertCompileSize(VMMDevGetCpuHotPlugRequest, 24+4+4+4); + + +/** + * Shared region description + */ +typedef struct VMMDEVSHAREDREGIONDESC +{ + RTGCPTR64 GCRegionAddr; + uint32_t cbRegion; + uint32_t u32Alignment; +} VMMDEVSHAREDREGIONDESC; +AssertCompileSize(VMMDEVSHAREDREGIONDESC, 16); + +#define VMMDEVSHAREDREGIONDESC_MAX 32 + +/** + * Shared module registration + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Shared module size. */ + uint32_t cbModule; + /** Number of included region descriptors */ + uint32_t cRegions; + /** Base address of the shared module. */ + RTGCPTR64 GCBaseAddr; + /** Guest OS type. */ + VBOXOSFAMILY enmGuestOS; + /** Alignment. */ + uint32_t u32Align; + /** Module name */ + char szName[128]; + /** Module version */ + char szVersion[16]; + /** Shared region descriptor(s). */ + VMMDEVSHAREDREGIONDESC aRegions[1]; +} VMMDevSharedModuleRegistrationRequest; +AssertCompileSize(VMMDevSharedModuleRegistrationRequest, 24+4+4+8+4+4+128+16+16); + + +/** + * Shared module unregistration + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Shared module size. */ + uint32_t cbModule; + /** Align at 8 byte boundary. */ + uint32_t u32Alignment; + /** Base address of the shared module. */ + RTGCPTR64 GCBaseAddr; + /** Module name */ + char szName[128]; + /** Module version */ + char szVersion[16]; +} VMMDevSharedModuleUnregistrationRequest; +AssertCompileSize(VMMDevSharedModuleUnregistrationRequest, 24+4+4+8+128+16); + + +/** + * Shared module periodic check + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; +} VMMDevSharedModuleCheckRequest; +AssertCompileSize(VMMDevSharedModuleCheckRequest, 24); + +/** + * Paging sharing enabled query + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Enabled flag (out) */ + bool fEnabled; + /** Alignment */ + bool fAlignment[3]; +} VMMDevPageSharingStatusRequest; +AssertCompileSize(VMMDevPageSharingStatusRequest, 24+4); + + +/** + * Page sharing status query (debug build only) + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Page address. */ + RTGCPTR GCPtrPage; + /** Page flags. */ + uint64_t uPageFlags; + /** Shared flag (out) */ + bool fShared; + /** Alignment */ + bool fAlignment[3]; +} VMMDevPageIsSharedRequest; + +/** + * Session id request structure. + * + * Used by VMMDevReq_GetSessionId. + */ +typedef struct +{ + /** Header */ + VMMDevRequestHeader header; + /** OUT: unique session id; the id will be different after each start, reset or restore of the VM */ + uint64_t idSession; +} VMMDevReqSessionId; +AssertCompileSize(VMMDevReqSessionId, 24+8); + + +/** + * Write Core Dump request. + * + * Used by VMMDevReq_WriteCoreDump. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** Flags (reserved, MBZ). */ + uint32_t fFlags; +} VMMDevReqWriteCoreDump; +AssertCompileSize(VMMDevReqWriteCoreDump, 24+4); + +/** Heart beat check state structure. + * Used by VMMDevReq_HeartbeatConfigure. */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** OUT: Guest heartbeat interval in nanosec. */ + uint64_t cNsInterval; + /** Heartbeat check flag. */ + bool fEnabled; +} VMMDevReqHeartbeat; +AssertCompileSize(VMMDevReqHeartbeat, 24+12); + + + +#ifdef VBOX_WITH_HGCM + +/** @name HGCM flags. + * @{ + */ +# define VBOX_HGCM_REQ_DONE RT_BIT_32(VBOX_HGCM_REQ_DONE_BIT) +# define VBOX_HGCM_REQ_DONE_BIT 0 +# define VBOX_HGCM_REQ_CANCELLED (0x2) +/** @} */ + +/** + * HGCM request header. + */ +typedef struct VMMDevHGCMRequestHeader +{ + /** Request header. */ + VMMDevRequestHeader header; + + /** HGCM flags. */ + uint32_t fu32Flags; + + /** Result code. */ + int32_t result; +} VMMDevHGCMRequestHeader; +AssertCompileSize(VMMDevHGCMRequestHeader, 24+8); + +/** + * HGCM connect request structure. + * + * Used by VMMDevReq_HGCMConnect. + */ +typedef struct +{ + /** HGCM request header. */ + VMMDevHGCMRequestHeader header; + + /** IN: Description of service to connect to. */ + HGCMServiceLocation loc; + + /** OUT: Client identifier assigned by local instance of HGCM. */ + uint32_t u32ClientID; +} VMMDevHGCMConnect; +AssertCompileSize(VMMDevHGCMConnect, 32+132+4); + + +/** + * HGCM disconnect request structure. + * + * Used by VMMDevReq_HGCMDisconnect. + */ +typedef struct +{ + /** HGCM request header. */ + VMMDevHGCMRequestHeader header; + + /** IN: Client identifier. */ + uint32_t u32ClientID; +} VMMDevHGCMDisconnect; +AssertCompileSize(VMMDevHGCMDisconnect, 32+4); + +/** + * HGCM call request structure. + * + * Used by VMMDevReq_HGCMCall, VMMDevReq_HGCMCall32 and VMMDevReq_HGCMCall64. + */ +typedef struct +{ + /* request header */ + VMMDevHGCMRequestHeader header; + + /** IN: Client identifier. */ + uint32_t u32ClientID; + /** IN: Service function number. */ + uint32_t u32Function; + /** IN: Number of parameters. */ + uint32_t cParms; + /** Parameters follow in form: HGCMFunctionParameter aParms[X]; */ +} VMMDevHGCMCall; +AssertCompileSize(VMMDevHGCMCall, 32+12); + +/** @name Direction of data transfer (HGCMPageListInfo::flags). Bit flags. + * @{ */ +#define VBOX_HGCM_F_PARM_DIRECTION_NONE UINT32_C(0x00000000) +#define VBOX_HGCM_F_PARM_DIRECTION_TO_HOST UINT32_C(0x00000001) +#define VBOX_HGCM_F_PARM_DIRECTION_FROM_HOST UINT32_C(0x00000002) +#define VBOX_HGCM_F_PARM_DIRECTION_BOTH UINT32_C(0x00000003) +/** Macro for validating that the specified flags are valid. */ +#define VBOX_HGCM_F_PARM_ARE_VALID(fFlags) \ + ( (fFlags) > VBOX_HGCM_F_PARM_DIRECTION_NONE \ + && (fFlags) < VBOX_HGCM_F_PARM_DIRECTION_BOTH ) +/** @} */ + +/** + * VMMDevHGCMParmType_PageList points to this structure to actually describe the + * buffer. + */ +typedef struct +{ + uint32_t flags; /**< VBOX_HGCM_F_PARM_*. */ + uint16_t offFirstPage; /**< Offset in the first page where data begins. */ + uint16_t cPages; /**< Number of pages. */ + RTGCPHYS64 aPages[1]; /**< Page addresses. */ +} HGCMPageListInfo; +AssertCompileSize(HGCMPageListInfo, 4+2+2+8); + + +/** Get the pointer to the first parmater of a HGCM call request. */ +# define VMMDEV_HGCM_CALL_PARMS(a) ((HGCMFunctionParameter *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +/** Get the pointer to the first parmater of a 32-bit HGCM call request. */ +# define VMMDEV_HGCM_CALL_PARMS32(a) ((HGCMFunctionParameter32 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) + +# ifdef VBOX_WITH_64_BITS_GUESTS +/* Explicit defines for the host code. */ +# ifdef VBOX_HGCM_HOST_CODE +# define VMMDEV_HGCM_CALL_PARMS32(a) ((HGCMFunctionParameter32 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +# define VMMDEV_HGCM_CALL_PARMS64(a) ((HGCMFunctionParameter64 *)((uint8_t *)(a) + sizeof (VMMDevHGCMCall))) +# endif /* VBOX_HGCM_HOST_CODE */ +# endif /* VBOX_WITH_64_BITS_GUESTS */ + +# define VBOX_HGCM_MAX_PARMS 32 + +/** + * HGCM cancel request structure. + * + * The Cancel request is issued using the same physical memory address as was + * used for the corresponding initial HGCMCall. + * + * Used by VMMDevReq_HGCMCancel. + */ +typedef struct +{ + /** Header. */ + VMMDevHGCMRequestHeader header; +} VMMDevHGCMCancel; +AssertCompileSize(VMMDevHGCMCancel, 32); + +/** + * HGCM cancel request structure, version 2. + * + * Used by VMMDevReq_HGCMCancel2. + * + * VINF_SUCCESS when cancelled. + * VERR_NOT_FOUND if the specified request cannot be found. + * VERR_INVALID_PARAMETER if the address is invalid valid. + */ +typedef struct +{ + /** Header. */ + VMMDevRequestHeader header; + /** The physical address of the request to cancel. */ + RTGCPHYS32 physReqToCancel; +} VMMDevHGCMCancel2; +AssertCompileSize(VMMDevHGCMCancel2, 24+4); + +#endif /* VBOX_WITH_HGCM */ + + +/** + * Inline helper to determine the request size for the given operation. + * Returns 0 if the given operation is not handled and/or supported. + * + * @returns Size. + * @param requestType The VMMDev request type. + */ +DECLINLINE(size_t) vmmdevGetRequestSize(VMMDevRequestType requestType) +{ + switch (requestType) + { + case VMMDevReq_GetMouseStatus: + case VMMDevReq_SetMouseStatus: + return sizeof(VMMDevReqMouseStatus); + case VMMDevReq_SetPointerShape: + return sizeof(VMMDevReqMousePointer); + case VMMDevReq_GetHostVersion: + return sizeof(VMMDevReqHostVersion); + case VMMDevReq_Idle: + return sizeof(VMMDevReqIdle); + case VMMDevReq_GetHostTime: + return sizeof(VMMDevReqHostTime); + case VMMDevReq_GetHypervisorInfo: + case VMMDevReq_SetHypervisorInfo: + return sizeof(VMMDevReqHypervisorInfo); + case VMMDevReq_RegisterPatchMemory: + case VMMDevReq_DeregisterPatchMemory: + return sizeof(VMMDevReqPatchMemory); + case VMMDevReq_SetPowerStatus: + return sizeof(VMMDevPowerStateRequest); + case VMMDevReq_AcknowledgeEvents: + return sizeof(VMMDevEvents); + case VMMDevReq_ReportGuestInfo: + return sizeof(VMMDevReportGuestInfo); + case VMMDevReq_ReportGuestInfo2: + return sizeof(VMMDevReportGuestInfo2); + case VMMDevReq_ReportGuestStatus: + return sizeof(VMMDevReportGuestStatus); + case VMMDevReq_ReportGuestUserState: + return sizeof(VMMDevReportGuestUserState); + case VMMDevReq_GetDisplayChangeRequest: + return sizeof(VMMDevDisplayChangeRequest); + case VMMDevReq_GetDisplayChangeRequest2: + return sizeof(VMMDevDisplayChangeRequest2); + case VMMDevReq_GetDisplayChangeRequestEx: + return sizeof(VMMDevDisplayChangeRequestEx); + case VMMDevReq_VideoModeSupported: + return sizeof(VMMDevVideoModeSupportedRequest); + case VMMDevReq_GetHeightReduction: + return sizeof(VMMDevGetHeightReductionRequest); + case VMMDevReq_ReportGuestCapabilities: + return sizeof(VMMDevReqGuestCapabilities); + case VMMDevReq_SetGuestCapabilities: + return sizeof(VMMDevReqGuestCapabilities2); +#ifdef VBOX_WITH_HGCM + case VMMDevReq_HGCMConnect: + return sizeof(VMMDevHGCMConnect); + case VMMDevReq_HGCMDisconnect: + return sizeof(VMMDevHGCMDisconnect); +#ifdef VBOX_WITH_64_BITS_GUESTS + case VMMDevReq_HGCMCall32: + return sizeof(VMMDevHGCMCall); + case VMMDevReq_HGCMCall64: + return sizeof(VMMDevHGCMCall); +#else + case VMMDevReq_HGCMCall: + return sizeof(VMMDevHGCMCall); +#endif /* VBOX_WITH_64_BITS_GUESTS */ + case VMMDevReq_HGCMCancel: + return sizeof(VMMDevHGCMCancel); +#endif /* VBOX_WITH_HGCM */ + case VMMDevReq_VideoAccelEnable: + return sizeof(VMMDevVideoAccelEnable); + case VMMDevReq_VideoAccelFlush: + return sizeof(VMMDevVideoAccelFlush); + case VMMDevReq_VideoSetVisibleRegion: + /* The original protocol didn't consider a guest with NO visible + * windows */ + return sizeof(VMMDevVideoSetVisibleRegion) - sizeof(RTRECT); + case VMMDevReq_GetSeamlessChangeRequest: + return sizeof(VMMDevSeamlessChangeRequest); + case VMMDevReq_QueryCredentials: + return sizeof(VMMDevCredentials); + case VMMDevReq_ReportGuestStats: + return sizeof(VMMDevReportGuestStats); + case VMMDevReq_GetMemBalloonChangeRequest: + return sizeof(VMMDevGetMemBalloonChangeRequest); + case VMMDevReq_GetStatisticsChangeRequest: + return sizeof(VMMDevGetStatisticsChangeRequest); + case VMMDevReq_ChangeMemBalloon: + return sizeof(VMMDevChangeMemBalloon); + case VMMDevReq_GetVRDPChangeRequest: + return sizeof(VMMDevVRDPChangeRequest); + case VMMDevReq_LogString: + return sizeof(VMMDevReqLogString); + case VMMDevReq_CtlGuestFilterMask: + return sizeof(VMMDevCtlGuestFilterMask); + case VMMDevReq_GetCpuHotPlugRequest: + return sizeof(VMMDevGetCpuHotPlugRequest); + case VMMDevReq_SetCpuHotPlugStatus: + return sizeof(VMMDevCpuHotPlugStatusRequest); + case VMMDevReq_RegisterSharedModule: + return sizeof(VMMDevSharedModuleRegistrationRequest); + case VMMDevReq_UnregisterSharedModule: + return sizeof(VMMDevSharedModuleUnregistrationRequest); + case VMMDevReq_CheckSharedModules: + return sizeof(VMMDevSharedModuleCheckRequest); + case VMMDevReq_GetPageSharingStatus: + return sizeof(VMMDevPageSharingStatusRequest); + case VMMDevReq_DebugIsPageShared: + return sizeof(VMMDevPageIsSharedRequest); + case VMMDevReq_GetSessionId: + return sizeof(VMMDevReqSessionId); + case VMMDevReq_HeartbeatConfigure: + return sizeof(VMMDevReqHeartbeat); + case VMMDevReq_GuestHeartbeat: + return sizeof(VMMDevRequestHeader); + default: + break; + } + + return 0; +} + + +/** + * Initializes a request structure. + * + * @returns VBox status code. + * @param req The request structure to initialize. + * @param type The request type. + */ +DECLINLINE(int) vmmdevInitRequest(VMMDevRequestHeader *req, VMMDevRequestType type) +{ + uint32_t requestSize; + if (!req) + return VERR_INVALID_PARAMETER; + requestSize = (uint32_t)vmmdevGetRequestSize(type); + if (!requestSize) + return VERR_INVALID_PARAMETER; + req->size = requestSize; + req->version = VMMDEV_REQUEST_HEADER_VERSION; + req->requestType = type; + req->rc = VERR_GENERAL_FAILURE; + req->reserved1 = 0; + req->reserved2 = 0; + return VINF_SUCCESS; +} + +/** @} */ + +/** @name VBVA ring defines. + * + * The VBVA ring buffer is suitable for transferring large (< 2GB) amount of + * data. For example big bitmaps which do not fit to the buffer. + * + * Guest starts writing to the buffer by initializing a record entry in the + * aRecords queue. VBVA_F_RECORD_PARTIAL indicates that the record is being + * written. As data is written to the ring buffer, the guest increases off32End + * for the record. + * + * The host reads the aRecords on flushes and processes all completed records. + * When host encounters situation when only a partial record presents and + * cbRecord & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE - + * VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates + * off32Head. After that on each flush the host continues fetching the data + * until the record is completed. + * + */ +#define VMMDEV_VBVA_RING_BUFFER_SIZE (_4M - _1K) +#define VMMDEV_VBVA_RING_BUFFER_THRESHOLD (4 * _1K) + +#define VMMDEV_VBVA_MAX_RECORDS (64) +/** @} */ + +/** + * VBVA record. + */ +typedef struct VMMDEVVBVARECORD +{ + /** The length of the record. Changed by guest. */ + uint32_t cbRecord; +} VMMDEVVBVARECORD; +AssertCompileSize(VMMDEVVBVARECORD, 4); + +#if ARCH_BITS >= 32 + +/** + * VBVA memory layout. + * + * This is a subsection of the VMMDevMemory structure. + */ +typedef struct VBVAMEMORY +{ + /** VBVA_F_MODE_*. */ + uint32_t fu32ModeFlags; + + /** The offset where the data start in the buffer. */ + uint32_t off32Data; + /** The offset where next data must be placed in the buffer. */ + uint32_t off32Free; + + /** The ring buffer for data. */ + uint8_t au8RingBuffer[VMMDEV_VBVA_RING_BUFFER_SIZE]; + + /** The queue of record descriptions. */ + VMMDEVVBVARECORD aRecords[VMMDEV_VBVA_MAX_RECORDS]; + uint32_t indexRecordFirst; + uint32_t indexRecordFree; + + /** RDP orders supported by the client. The guest reports only them + * and falls back to DIRTY rects for not supported ones. + * + * (1 << VBVA_VRDP_*) + */ + uint32_t fu32SupportedOrders; + +} VBVAMEMORY; +AssertCompileSize(VBVAMEMORY, 12 + (_4M-_1K) + 4*64 + 12); + + +/** + * The layout of VMMDEV RAM region that contains information for guest. + */ +typedef struct VMMDevMemory +{ + /** The size of this structure. */ + uint32_t u32Size; + /** The structure version. (VMMDEV_MEMORY_VERSION) */ + uint32_t u32Version; + + union + { + struct + { + /** Flag telling that VMMDev set the IRQ and acknowlegment is required */ + bool fHaveEvents; + } V1_04; + + struct + { + /** Pending events flags, set by host. */ + uint32_t u32HostEvents; + /** Mask of events the guest wants to see, set by guest. */ + uint32_t u32GuestEventMask; + } V1_03; + } V; + + VBVAMEMORY vbvaMemory; + +} VMMDevMemory; +AssertCompileSize(VMMDevMemory, 8+8 + (12 + (_4M-_1K) + 4*64 + 12) ); +AssertCompileMemberOffset(VMMDevMemory, vbvaMemory, 16); + +/** Version of VMMDevMemory structure (VMMDevMemory::u32Version). */ +# define VMMDEV_MEMORY_VERSION (1) + +#endif /* ARCH_BITS >= 32 */ + +/** @} */ + +RT_C_DECLS_END +#pragma pack() + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/VMMDevCoreTypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/VMMDevCoreTypes.h @@ -0,0 +1,516 @@ +/** @file + * Virtual Device for Guest <-> VMM/Host communication, Core Types. (ADD,DEV) + * + * These types are needed by several headers VBoxGuestLib.h and are kept + * separate to avoid having to include the whole VMMDev.h fun. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_VMMDevCoreTypes_h +#define ___VBox_VMMDevCoreTypes_h + +#include +#include +#ifdef __cplusplus +# include +#endif + + +/** @addtogroup grp_vmmdev + * @{ + */ + +/* Helpful forward declarations: */ +struct VMMDevRequestHeader; +struct VMMDevReqMousePointer; +struct VMMDevMemory; + + +/** @name VMMDev events. + * + * Used mainly by VMMDevReq_AcknowledgeEvents/VMMDevEvents and version 1.3 of + * VMMDevMemory. + * + * @{ + */ +/** Host mouse capabilities has been changed. */ +#define VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED RT_BIT(0) +/** HGCM event. */ +#define VMMDEV_EVENT_HGCM RT_BIT(1) +/** A display change request has been issued. */ +#define VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST RT_BIT(2) +/** Credentials are available for judgement. */ +#define VMMDEV_EVENT_JUDGE_CREDENTIALS RT_BIT(3) +/** The guest has been restored. */ +#define VMMDEV_EVENT_RESTORED RT_BIT(4) +/** Seamless mode state changed. */ +#define VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST RT_BIT(5) +/** Memory balloon size changed. */ +#define VMMDEV_EVENT_BALLOON_CHANGE_REQUEST RT_BIT(6) +/** Statistics interval changed. */ +#define VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST RT_BIT(7) +/** VRDP status changed. */ +#define VMMDEV_EVENT_VRDP RT_BIT(8) +/** New mouse position data available. */ +#define VMMDEV_EVENT_MOUSE_POSITION_CHANGED RT_BIT(9) +/** CPU hotplug event occurred. */ +#define VMMDEV_EVENT_CPU_HOTPLUG RT_BIT(10) +/** The mask of valid events, for sanity checking. */ +#define VMMDEV_EVENT_VALID_EVENT_MASK UINT32_C(0x000007ff) +/** @} */ + + +/** @name The ballooning chunk size which VMMDev works at. + * @{ */ +#define VMMDEV_MEMORY_BALLOON_CHUNK_PAGES (_1M/4096) +#define VMMDEV_MEMORY_BALLOON_CHUNK_SIZE (VMMDEV_MEMORY_BALLOON_CHUNK_PAGES*4096) +/** @} */ + + +/** + * Seamless mode. + * + * Used by VbglR3SeamlessWaitEvent + * + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDev_Seamless_Disabled = 0, /**< normal mode; entire guest desktop displayed. */ + VMMDev_Seamless_Visible_Region = 1, /**< visible region mode; only top-level guest windows displayed. */ + VMMDev_Seamless_Host_Window = 2, /**< windowed mode; each top-level guest window is represented in a host window. */ + VMMDev_Seamless_SizeHack = 0x7fffffff +} VMMDevSeamlessMode; +AssertCompileSize(VMMDevSeamlessMode, 4); + + +/** + * CPU event types. + * + * Used by VbglR3CpuHotplugWaitForEvent + * + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDevCpuEventType_Invalid = 0, + VMMDevCpuEventType_None = 1, + VMMDevCpuEventType_Plug = 2, + VMMDevCpuEventType_Unplug = 3, + VMMDevCpuEventType_SizeHack = 0x7fffffff +} VMMDevCpuEventType; +AssertCompileSize(VMMDevCpuEventType, 4); + + +/** @name Guest capability bits. + * Used by VMMDevReq_ReportGuestCapabilities and VMMDevReq_SetGuestCapabilities. + * @{ */ +/** The guest supports seamless display rendering. */ +#define VMMDEV_GUEST_SUPPORTS_SEAMLESS RT_BIT_32(0) +/** The guest supports mapping guest to host windows. */ +#define VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING RT_BIT_32(1) +/** The guest graphical additions are active. + * Used for fast activation and deactivation of certain graphical operations + * (e.g. resizing & seamless). The legacy VMMDevReq_ReportGuestCapabilities + * request sets this automatically, but VMMDevReq_SetGuestCapabilities does + * not. */ +#define VMMDEV_GUEST_SUPPORTS_GRAPHICS RT_BIT_32(2) +/** The mask of valid events, for sanity checking. */ +#define VMMDEV_GUEST_CAPABILITIES_MASK UINT32_C(0x00000007) +/** @} */ + + +/** + * The guest facility. + * This needs to be kept in sync with AdditionsFacilityType of the Main API! + */ +typedef enum +{ + VBoxGuestFacilityType_Unknown = 0, + VBoxGuestFacilityType_VBoxGuestDriver = 20, + VBoxGuestFacilityType_AutoLogon = 90, /* VBoxGINA / VBoxCredProv / pam_vbox. */ + VBoxGuestFacilityType_VBoxService = 100, + VBoxGuestFacilityType_VBoxTrayClient = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */ + VBoxGuestFacilityType_Seamless = 1000, + VBoxGuestFacilityType_Graphics = 1100, + VBoxGuestFacilityType_MonitorAttach = 1101, + VBoxGuestFacilityType_All = 0x7ffffffe, + VBoxGuestFacilityType_SizeHack = 0x7fffffff +} VBoxGuestFacilityType; +AssertCompileSize(VBoxGuestFacilityType, 4); + + +/** + * The current guest status of a facility. + * This needs to be kept in sync with AdditionsFacilityStatus of the Main API! + * + * @remarks r=bird: Pretty please, for future types like this, simply do a + * linear allocation without any gaps. This stuff is impossible work + * efficiently with, let alone validate. Applies to the other facility + * enums too. + */ +typedef enum +{ + VBoxGuestFacilityStatus_Inactive = 0, + VBoxGuestFacilityStatus_Paused = 1, + VBoxGuestFacilityStatus_PreInit = 20, + VBoxGuestFacilityStatus_Init = 30, + VBoxGuestFacilityStatus_Active = 50, + VBoxGuestFacilityStatus_Terminating = 100, + VBoxGuestFacilityStatus_Terminated = 101, + VBoxGuestFacilityStatus_Failed = 800, + VBoxGuestFacilityStatus_Unknown = 999, + VBoxGuestFacilityStatus_SizeHack = 0x7fffffff +} VBoxGuestFacilityStatus; +AssertCompileSize(VBoxGuestFacilityStatus, 4); + + +/** + * The current status of specific guest user. + * This needs to be kept in sync with GuestUserState of the Main API! + */ +typedef enum VBoxGuestUserState +{ + VBoxGuestUserState_Unknown = 0, + VBoxGuestUserState_LoggedIn = 1, + VBoxGuestUserState_LoggedOut = 2, + VBoxGuestUserState_Locked = 3, + VBoxGuestUserState_Unlocked = 4, + VBoxGuestUserState_Disabled = 5, + VBoxGuestUserState_Idle = 6, + VBoxGuestUserState_InUse = 7, + VBoxGuestUserState_Created = 8, + VBoxGuestUserState_Deleted = 9, + VBoxGuestUserState_SessionChanged = 10, + VBoxGuestUserState_CredentialsChanged = 11, + VBoxGuestUserState_RoleChanged = 12, + VBoxGuestUserState_GroupAdded = 13, + VBoxGuestUserState_GroupRemoved = 14, + VBoxGuestUserState_Elevated = 15, + VBoxGuestUserState_SizeHack = 0x7fffffff +} VBoxGuestUserState; +AssertCompileSize(VBoxGuestUserState, 4); + + + +/** + * HGCM service location types. + * @ingroup grp_vmmdev_req + */ +typedef enum +{ + VMMDevHGCMLoc_Invalid = 0, + VMMDevHGCMLoc_LocalHost = 1, + VMMDevHGCMLoc_LocalHost_Existing = 2, + VMMDevHGCMLoc_SizeHack = 0x7fffffff +} HGCMServiceLocationType; +AssertCompileSize(HGCMServiceLocationType, 4); + +/** + * HGCM host service location. + * @ingroup grp_vmmdev_req + */ +typedef struct +{ + char achName[128]; /**< This is really szName. */ +} HGCMServiceLocationHost; +AssertCompileSize(HGCMServiceLocationHost, 128); + +/** + * HGCM service location. + * @ingroup grp_vmmdev_req + */ +typedef struct HGCMSERVICELOCATION +{ + /** Type of the location. */ + HGCMServiceLocationType type; + + union + { + HGCMServiceLocationHost host; + } u; +} HGCMServiceLocation; +AssertCompileSize(HGCMServiceLocation, 128+4); + + +/** + * HGCM parameter type. + */ +typedef enum +{ + VMMDevHGCMParmType_Invalid = 0, + VMMDevHGCMParmType_32bit = 1, + VMMDevHGCMParmType_64bit = 2, + VMMDevHGCMParmType_PhysAddr = 3, /**< @deprecated Doesn't work, use PageList. */ + VMMDevHGCMParmType_LinAddr = 4, /**< In and Out */ + VMMDevHGCMParmType_LinAddr_In = 5, /**< In (read; host<-guest) */ + VMMDevHGCMParmType_LinAddr_Out = 6, /**< Out (write; host->guest) */ + VMMDevHGCMParmType_LinAddr_Locked = 7, /**< Locked In and Out */ + VMMDevHGCMParmType_LinAddr_Locked_In = 8, /**< Locked In (read; host<-guest) */ + VMMDevHGCMParmType_LinAddr_Locked_Out = 9, /**< Locked Out (write; host->guest) */ + VMMDevHGCMParmType_PageList = 10, /**< Physical addresses of locked pages for a buffer. */ + VMMDevHGCMParmType_SizeHack = 0x7fffffff +} HGCMFunctionParameterType; +AssertCompileSize(HGCMFunctionParameterType, 4); + + +# ifdef VBOX_WITH_64_BITS_GUESTS +/** + * HGCM function parameter, 32-bit client. + */ +# pragma pack(4) /* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64 member of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS32 physAddr; + RTGCPTR32 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t RT_FAR *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t RT_FAR *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void RT_FAR *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (RTGCPTR32)(uintptr_t)pv; + } +# endif /* __cplusplus */ +} HGCMFunctionParameter32; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter32, 4+8); + +/** + * HGCM function parameter, 64-bit client. + */ +# pragma pack(4)/* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64, physAddr and linearAddr members of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS64 physAddr; + RTGCPTR64 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t RT_FAR *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t RT_FAR *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void RT_FAR *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (uintptr_t)pv; + } +# endif /** __cplusplus */ +} HGCMFunctionParameter64; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter64, 4+12); + +/* Redefine the structure type for the guest code. */ +# ifndef VBOX_HGCM_HOST_CODE +# if ARCH_BITS == 64 +# define HGCMFunctionParameter HGCMFunctionParameter64 +# elif ARCH_BITS == 32 || ARCH_BITS == 16 +# define HGCMFunctionParameter HGCMFunctionParameter32 +# else +# error "Unsupported sizeof (void *)" +# endif +# endif /* !VBOX_HGCM_HOST_CODE */ + +# else /* !VBOX_WITH_64_BITS_GUESTS */ + +/** + * HGCM function parameter, 32-bit client. + * + * @todo If this is the same as HGCMFunctionParameter32, why the duplication? + */ +# pragma pack(4) /* We force structure dword packing here for hysterical raisins. Saves us 4 bytes, at the cost of + misaligning the value64 member of every other parameter structure. */ +typedef struct +{ + HGCMFunctionParameterType type; + union + { + uint32_t value32; + uint64_t value64; + struct + { + uint32_t size; + + union + { + RTGCPHYS32 physAddr; + RTGCPTR32 linearAddr; + } u; + } Pointer; + struct + { + uint32_t size; /**< Size of the buffer described by the page list. */ + uint32_t offset; /**< Relative to the request header, valid if size != 0. */ + } PageList; + } u; +# ifdef __cplusplus + void SetUInt32(uint32_t u32) + { + type = VMMDevHGCMParmType_32bit; + u.value64 = 0; /* init unused bits to 0 */ + u.value32 = u32; + } + + int GetUInt32(uint32_t *pu32) + { + if (type == VMMDevHGCMParmType_32bit) + { + *pu32 = u.value32; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetUInt64(uint64_t u64) + { + type = VMMDevHGCMParmType_64bit; + u.value64 = u64; + } + + int GetUInt64(uint64_t *pu64) + { + if (type == VMMDevHGCMParmType_64bit) + { + *pu64 = u.value64; + return VINF_SUCCESS; + } + return VERR_INVALID_PARAMETER; + } + + void SetPtr(void *pv, uint32_t cb) + { + type = VMMDevHGCMParmType_LinAddr; + u.Pointer.size = cb; + u.Pointer.u.linearAddr = (uintptr_t)pv; + } +# endif /* __cplusplus */ +} HGCMFunctionParameter; +# pragma pack() +AssertCompileSize(HGCMFunctionParameter, 4+8); +# endif /* !VBOX_WITH_64_BITS_GUESTS */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/cdefs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/cdefs.h @@ -0,0 +1,461 @@ +/** @file + * VirtualBox - Common C and C++ definition. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_cdefs_h +#define ___VBox_cdefs_h + +#include + + +/** @defgroup VBox Common Defintions and Macros + * @{ + */ + +/** @def VBOX_WITH_STATISTICS + * When defined all statistics will be included in the build. + * This is enabled by default in all debug builds. + */ +#ifndef VBOX_WITH_STATISTICS +# ifdef DEBUG +# define VBOX_WITH_STATISTICS +# endif +#endif + +/** @def VBOX_STRICT + * Alias for RT_STRICT. + */ +#ifdef RT_STRICT +# ifndef VBOX_STRICT +# define VBOX_STRICT +# endif +#endif + + +/* + * Shut up DOXYGEN warnings and guide it properly thru the code. + */ +#ifdef DOXYGEN_RUNNING +#define VBOX_WITH_STATISTICS +#define VBOX_STRICT +#define IN_DBG +#define IN_DIS +#define IN_INTNET_R0 +#define IN_INTNET_R3 +#define IN_PCIRAW_R0 +#define IN_PCIRAW_R3 +#define IN_REM_R3 +#define IN_SUP_R0 +#define IN_SUP_R3 +#define IN_SUP_RC +#define IN_SUP_STATIC +#define IN_USBLIB +#define IN_VBOXDDU +#define IN_VMM_RC +#define IN_VMM_R0 +#define IN_VMM_R3 +#define IN_VMM_STATIC +#endif + + + + +/** @def VBOXCALL + * The standard calling convention for VBOX interfaces. + */ +#define VBOXCALL RTCALL + + + +/** @def IN_DIS + * Used to indicate whether we're inside the same link module as the + * disassembler. + */ +/** @def DISDECL(type) + * Disassembly export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_DIS) +# ifdef IN_DIS_STATIC +# define DISDECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define DISDECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# define DISDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_DBG + * Used to indicate whether we're inside the same link module as the debugger + * console, gui, and related things (ring-3). + */ +/** @def DBGDECL(type) + * Debugger module export or import declaration. + * Functions declared using this exists only in R3 since the + * debugger modules is R3 only. + * @param type The return type of the function declaration. + */ +#if defined(IN_DBG_R3) || defined(IN_DBG) +# define DBGDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define DBGDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_INTNET_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * Internal Networking Service. + */ +/** @def INTNETR3DECL(type) + * Internal Networking Service export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_INTNET_R3 +# define INTNETR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define INTNETR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_INTNET_R0 + * Used to indicate whether we're inside the same link module as the R0 + * Internal Network Service. + */ +/** @def INTNETR0DECL(type) + * Internal Networking Service export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_INTNET_R0 +# define INTNETR0DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define INTNETR0DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_PCIRAW_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * PCI passthrough support. + */ +/** @def PCIRAWR3DECL(type) + * PCI passthrough export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_PCIRAW_R3 +# define PCIRAWR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define PCIRAWR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_PCIRAW_R0 + * Used to indicate whether we're inside the same link module as the R0 + * PCI passthrough support. + */ +/** @def PCIRAWR0DECL(type) + * PCI passthroug export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_PCIRAW_R0 +# define PCIRAWR0DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define PCIRAWR0DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_REM_R3 + * Used to indicate whether we're inside the same link module as + * the HC Ring-3 Recompiled Execution Manager. + */ +/** @def REMR3DECL(type) + * Recompiled Execution Manager HC Ring-3 export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_REM_R3 +# define REMR3DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define REMR3DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_SUP_R3 + * Used to indicate whether we're inside the same link module as the Ring-3 + * Support Library or not. + */ +/** @def SUPR3DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_R3 +# ifdef IN_SUP_STATIC +# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR3DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# ifdef IN_SUP_STATIC +# define SUPR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR3DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#endif + +/** @def IN_SUP_R0 + * Used to indicate whether we're inside the same link module as the Ring-0 + * Support Library or not. + */ +/** @def IN_SUP_STATIC + * Used to indicate that the Support Library is built or used as a static + * library. + */ +/** @def SUPR0DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_R0 +# ifdef IN_SUP_STATIC +# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR0DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# ifdef IN_SUP_STATIC +# define SUPR0DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define SUPR0DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#endif + +/** @def IN_SUP_RC + * Used to indicate whether we're inside the same link module as the RC Support + * Library or not. + */ +/** @def SUPRCDECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_SUP_RC +# define SUPRCDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define SUPRCDECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def IN_SUP_R0 + * Used to indicate whether we're inside the same link module as the Ring-0 + * Support Library or not. + */ +/** @def SUPR0DECL(type) + * Support library export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC) +# define SUPDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define SUPDECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_USBLIB + * Used to indicate whether we're inside the same link module as the USBLib. + */ +/** @def USBLIB_DECL + * USBLIB export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_RING0 +# define USBLIB_DECL(type) type VBOXCALL +#elif defined(IN_USBLIB) +# define USBLIB_DECL(type) DECLEXPORT(type) VBOXCALL +#else +# define USBLIB_DECL(type) DECLIMPORT(type) VBOXCALL +#endif + + + +/** @def IN_VMM_STATIC + * Used to indicate that the virtual machine monitor is built or used as a + * static library. + */ +/** @def IN_VMM_R3 + * Used to indicate whether we're inside the same link module as the ring 3 part of the + * virtual machine monitor or not. + */ +/** @def VMMR3DECL + * Ring-3 VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R3 +# ifdef IN_VMM_STATIC +# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define VMMR3DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#elif defined(IN_RING3) +# ifdef IN_VMM_STATIC +# define VMMR3DECL(type) DECLHIDDEN(type) VBOXCALL +# else +# define VMMR3DECL(type) DECLIMPORT(type) VBOXCALL +# endif +#else +# define VMMR3DECL(type) DECL_INVALID(type) +#endif + +/** @def IN_VMM_R0 + * Used to indicate whether we're inside the same link module as the ring-0 part + * of the virtual machine monitor or not. + */ +/** @def VMMR0DECL + * Ring-0 VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R0 +# define VMMR0DECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RING0) +# define VMMR0DECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMR0DECL(type) DECL_INVALID(type) +#endif + +/** @def IN_VMM_RC + * Used to indicate whether we're inside the same link module as the raw-mode + * context part of the virtual machine monitor or not. + */ +/** @def VMMRCDECL + * Raw-mode context VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_RC +# define VMMRCDECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RC) +# define VMMRCDECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMRCDECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRZDECL + * Ring-0 and Raw-mode context VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMMRZDECL(type) DECLEXPORT(type) VBOXCALL +#elif defined(IN_RING0) || defined(IN_RZ) +# define VMMRZDECL(type) DECLIMPORT(type) VBOXCALL +#else +# define VMMRZDECL(type) DECL_INVALID(type) +#endif + +/** @def VMMDECL + * VMM export or import declaration. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_STATIC +# define VMMDECL(type) DECLHIDDEN(type) VBOXCALL +#elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMMDECL(type) DECLEXPORT(type) VBOXCALL +#else +# define VMMDECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @def VMM_INT_DECL + * VMM internal function. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC) +# define VMM_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMM_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMR3_INT_DECL + * VMM internal function, ring-3. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R3 +# define VMMR3_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMR3_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMR0_INT_DECL + * VMM internal function, ring-0. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_R0 +# define VMMR0_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMR0_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRC_INT_DECL + * VMM internal function, raw-mode context. + * @param type The return type of the function declaration. + */ +#ifdef IN_VMM_RC +# define VMMRC_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMRC_INT_DECL(type) DECL_INVALID(type) +#endif + +/** @def VMMRZ_INT_DECL + * VMM internal function, ring-0 + raw-mode context. + * @param type The return type of the function declaration. + */ +#if defined(IN_VMM_RC) || defined(IN_VMM_R0) +# define VMMRZ_INT_DECL(type) DECLHIDDEN(type) VBOXCALL +#else +# define VMMRZ_INT_DECL(type) DECL_INVALID(type) +#endif + + + +/** @def IN_VBOXDDU + * Used to indicate whether we're inside the VBoxDDU shared object. + */ +/** @def VBOXDDU_DECL(type) + * VBoxDDU export or import (ring-3). + * @param type The return type of the function declaration. + */ +#ifdef IN_VBOXDDU +# ifdef IN_VBOXDDU_STATIC +# define VBOXDDU_DECL(type) type +# else +# define VBOXDDU_DECL(type) DECLEXPORT(type) VBOXCALL +# endif +#else +# define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL +#endif + +/** @} */ + + +/** @defgroup grp_devdrv Device Emulations and Drivers + * @{ */ +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/err.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/err.h @@ -0,0 +1,2809 @@ +/** @file + * VirtualBox Status Codes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_err_h +#define ___VBox_err_h + +#include +#include + + +/** @defgroup grp_err VBox Error Codes + * @{ + */ + +/* SED-START */ + +/** @name Misc. Status Codes + * @{ + */ +/** Failed to allocate VM memory. */ +#define VERR_NO_VM_MEMORY (-1000) +/** RC is toasted and the VMM should be terminated at once, but no need to + * panic about it :-) */ +#define VERR_DONT_PANIC (-1001) +/** Unsupported CPU. */ +#define VERR_UNSUPPORTED_CPU (-1002) +/** Unsupported CPU mode. */ +#define VERR_UNSUPPORTED_CPU_MODE (-1003) +/** Page not present. */ +#define VERR_PAGE_NOT_PRESENT (-1004) +/** Invalid/Corrupted configuration file. */ +#define VERR_CFG_INVALID_FORMAT (-1005) +/** No configuration value exists. */ +#define VERR_CFG_NO_VALUE (-1006) +/** Selector not present. */ +#define VERR_SELECTOR_NOT_PRESENT (-1007) +/** Not code selector. */ +#define VERR_NOT_CODE_SELECTOR (-1008) +/** Not data selector. */ +#define VERR_NOT_DATA_SELECTOR (-1009) +/** Out of selector bounds. */ +#define VERR_OUT_OF_SELECTOR_BOUNDS (-1010) +/** Invalid selector. Usually beyond table limits. */ +#define VERR_INVALID_SELECTOR (-1011) +/** Invalid requested privilege level. */ +#define VERR_INVALID_RPL (-1012) +/** PML4 entry not present. */ +#define VERR_PAGE_MAP_LEVEL4_NOT_PRESENT (-1013) +/** Page directory pointer not present. */ +#define VERR_PAGE_DIRECTORY_PTR_NOT_PRESENT (-1014) +/** Raw mode doesn't support SMP. */ +#define VERR_RAW_MODE_INVALID_SMP (-1015) +/** Invalid VM handle. */ +#define VERR_INVALID_VM_HANDLE (-1016) +/** Invalid VM handle. */ +#define VERR_INVALID_VMCPU_HANDLE (-1017) +/** Invalid Virtual CPU ID. */ +#define VERR_INVALID_CPU_ID (-1018) +/** Too many VCPUs. */ +#define VERR_TOO_MANY_CPUS (-1019) +/** The service was disabled on the host. + * Returned by pfnInit in VBoxService to indicated a non-fatal error that + * should results in the particular service being disabled. */ +#define VERR_SERVICE_DISABLED (-1020) +/** The requested feature is not supported in raw-mode. */ +#define VERR_NOT_SUP_IN_RAW_MODE (-1021) +/** Invalid CPU index. */ +#define VERR_INVALID_CPU_INDEX (-1022) +/** This VirtualBox build does not support raw-mode. */ +#define VERR_RAW_MODE_NOT_SUPPORTED (-1023) +/** Essential fields in the shared VM structure doesn't match the global one. */ +#define VERR_INCONSISTENT_VM_HANDLE (-1024) +/** @} */ + + +/** @name Execution Monitor/Manager (EM) Status Codes + * + * The order of the status codes between VINF_EM_FIRST and VINF_EM_LAST + * are of vital importance. The lower the number the higher importance + * as a scheduling instruction. + * @{ + */ +/** First scheduling related status code. */ +#define VINF_EM_FIRST 1100 +/** Indicating that the VM is being terminated and that the execution + * shall stop. */ +#define VINF_EM_TERMINATE 1100 +/** Hypervisor code was stepped. + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_STEPPED 1101 +/** Hit a breakpoint in the hypervisor code, + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_BREAKPOINT 1102 +/** Hit a possible assertion in the hypervisor code, + * EM will first send this to the debugger, and if the issue isn't + * resolved there it will enter guru meditation. */ +#define VINF_EM_DBG_HYPER_ASSERTION 1103 +/** Generic debug event, suspend the VM for debugging. */ +#define VINF_EM_DBG_EVENT 1104 +/** Indicating that the VM should be suspended for debugging because + * the developer wants to inspect the VM state. */ +#define VINF_EM_DBG_STOP 1105 +/** Indicating success single stepping and that EM should report that + * event to the debugger. */ +#define VINF_EM_DBG_STEPPED 1106 +/** Indicating that a breakpoint was hit and that EM should notify the debugger + * and in the event there is no debugger fail fatally. */ +#define VINF_EM_DBG_BREAKPOINT 1107 +/** Indicating that EM should single step an instruction. + * The instruction is stepped in the current execution mode (RAW/REM). */ +#define VINF_EM_DBG_STEP 1108 +/** Indicating that the VM is being turned off and that the EM should + * exit to the VM awaiting the destruction request. */ +#define VINF_EM_OFF 1109 +/** Indicating that the VM has been suspended and that the thread + * should wait for request telling it what to do next. */ +#define VINF_EM_SUSPEND 1110 +/** Indicating that the VM has been reset and that scheduling goes + * back to startup defaults. */ +#define VINF_EM_RESET 1111 +/** Indicating that the VM has executed a halt instruction and that + * the emulation thread should wait for an interrupt before resuming + * execution. */ +#define VINF_EM_HALT 1112 +/** Indicating that the VM has been resumed and that the thread should + * start executing. */ +#define VINF_EM_RESUME 1113 +/** Indicating that we've got an out-of-memory condition and that we need + * to take the appropriate actions to deal with this. + * @remarks It might seem odd at first that this has lower priority than VINF_EM_HALT, + * VINF_EM_SUSPEND, and VINF_EM_RESUME. The reason is that these events are + * vital to correctly operating the VM. Also, they can't normally occur together + * with an out-of-memory condition, and even if that should happen the condition + * will be rediscovered before executing any more code. */ +#define VINF_EM_NO_MEMORY 1114 +/** The fatal variant of VINF_EM_NO_MEMORY. */ +#define VERR_EM_NO_MEMORY (-1114) +/** Indicating that a rescheduling to recompiled execution. + * Typically caused by raw-mode executing code which is difficult/slow + * to virtualize rawly. + * @remarks Important to have a higher priority (lower number) than the other rescheduling status codes. */ +#define VINF_EM_RESCHEDULE_REM 1115 +/** Indicating that a rescheduling to vmx-mode execution. + * Typically caused by REM detecting that hardware-accelerated raw-mode execution is possible. */ +#define VINF_EM_RESCHEDULE_HM 1116 +/** Indicating that a rescheduling to raw-mode execution. + * Typically caused by REM detecting that raw-mode execution is possible. + * @remarks Important to have a higher priority (lower number) than VINF_EM_RESCHEDULE. */ +#define VINF_EM_RESCHEDULE_RAW 1117 +/** Indicating that a rescheduling now is required. Typically caused by + * interrupts having changed the EIP. */ +#define VINF_EM_RESCHEDULE 1118 +/** PARAV call */ +#define VINF_EM_RESCHEDULE_PARAV 1119 +/** Go back into wait for SIPI mode */ +#define VINF_EM_WAIT_SIPI 1120 +/** Last scheduling related status code. (inclusive) */ +#define VINF_EM_LAST 1120 + +/** Reason for leaving RC: Guest trap which couldn't be handled in RC. + * The trap is generally forwarded to the REM and executed there. */ +#define VINF_EM_RAW_GUEST_TRAP 1121 +/** Reason for leaving RC: Interrupted by external interrupt. + * The interrupt needed to be handled by the host OS. */ +#define VINF_EM_RAW_INTERRUPT 1122 +/** Reason for leaving RC: Interrupted by external interrupt while in hypervisor + * code. The interrupt needed to be handled by the host OS and hypervisor + * execution must be resumed. VM state is not complete at this point. */ +#define VINF_EM_RAW_INTERRUPT_HYPER 1123 +/** Reason for leaving RC: A Ring switch was attempted. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_RING_SWITCH 1124 +/** Reason for leaving RC: A Ring switch was attempted using software interrupt. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_RING_SWITCH_INT 1125 +/** Reason for leaving RC: A privileged instruction was attempted executed. + * Normal cause of action is to execute this in REM. */ +#define VINF_EM_RAW_EXCEPTION_PRIVILEGED 1126 + +/** Reason for leaving RZ: Emulate instruction. */ +#define VINF_EM_RAW_EMULATE_INSTR 1127 +/** Reason for leaving RC: Unhandled TSS write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_TSS_FAULT 1128 +/** Reason for leaving RC: Unhandled LDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_LDT_FAULT 1129 +/** Reason for leaving RC: Unhandled IDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_IDT_FAULT 1130 +/** Reason for leaving RC: Partly handled GDT write. + * Recompiler gets control. */ +#define VINF_EM_RAW_EMULATE_INSTR_GDT_FAULT 1131 +/** Reason for leaving RC: jump inside generated patch jump. + * Fatal error. */ +#define VERR_EM_RAW_PATCH_CONFLICT (-1133) +/** Reason for leaving RZ: Ring-3 operation pending. */ +#define VINF_EM_RAW_TO_R3 1135 +/** Reason for leaving RZ: Timer pending. */ +#define VINF_EM_RAW_TIMER_PENDING 1136 +/** Reason for leaving RC: Interrupt pending (guest). */ +#define VINF_EM_RAW_INTERRUPT_PENDING 1137 +/** Reason for leaving RC: Encountered a stale selector. */ +#define VINF_EM_RAW_STALE_SELECTOR 1138 +/** Reason for leaving RC: The IRET resuming guest code trapped. */ +#define VINF_EM_RAW_IRET_TRAP 1139 +/** Reason for leaving RC: Emulate (MM)IO intensive code in the recompiler. */ +#define VINF_EM_RAW_EMULATE_IO_BLOCK 1140 +/** The interpreter was unable to deal with the instruction at hand. */ +#define VERR_EM_INTERPRETER (-1148) +/** Internal EM error caused by an unknown warning or informational status code. */ +#define VERR_EM_INTERNAL_ERROR (-1149) +/** Pending VM request packet. */ +#define VINF_EM_PENDING_REQUEST 1150 +/** Start instruction stepping (debug only). */ +#define VINF_EM_RAW_EMULATE_DBG_STEP 1151 +/** Patch TPR access instruction. */ +#define VINF_EM_HM_PATCH_TPR_INSTR 1152 +/** Unexpected guest mapping conflict detected. */ +#define VERR_EM_UNEXPECTED_MAPPING_CONFLICT (-1154) +/** Reason for leaving RC: A triple-fault condition. Currently, causes + * a guru meditation. */ +#define VINF_EM_TRIPLE_FAULT 1155 +/** The specified execution engine cannot execute guest code in the current + * state. */ +#define VERR_EM_CANNOT_EXEC_GUEST (-1156) +/** Reason for leaving RC: Inject a TRPM event. */ +#define VINF_EM_RAW_INJECT_TRPM_EVENT 1157 +/** Guest tried to trigger a CPU hang. The guest is probably up to no good. */ +#define VERR_EM_GUEST_CPU_HANG (-1158) +/** @} */ + + +/** @name Debugging Facility (DBGF) DBGF Status Codes + * @{ + */ +/** The function called requires the caller to be attached as a + * debugger to the VM. */ +#define VERR_DBGF_NOT_ATTACHED (-1200) +/** Someone (including the caller) was already attached as + * debugger to the VM. */ +#define VERR_DBGF_ALREADY_ATTACHED (-1201) +/** Tried to halt a debugger which was already halted. + * (This is a warning and not an error.) */ +#define VWRN_DBGF_ALREADY_HALTED 1202 +/** The DBGF has no more free breakpoint slots. */ +#define VERR_DBGF_NO_MORE_BP_SLOTS (-1203) +/** The DBGF couldn't find the specified breakpoint. */ +#define VERR_DBGF_BP_NOT_FOUND (-1204) +/** Attempted to enabled a breakpoint which was already enabled. */ +#define VINF_DBGF_BP_ALREADY_ENABLED 1205 +/** Attempted to disabled a breakpoint which was already disabled. */ +#define VINF_DBGF_BP_ALREADY_DISABLED 1206 +/** The breakpoint already exists. */ +#define VINF_DBGF_BP_ALREADY_EXIST 1207 +/** The byte string was not found. */ +#define VERR_DBGF_MEM_NOT_FOUND (-1208) +/** The OS was not detected. */ +#define VERR_DBGF_OS_NOT_DETCTED (-1209) +/** The OS was not detected. */ +#define VINF_DBGF_OS_NOT_DETCTED 1209 +/** The specified register was not found. */ +#define VERR_DBGF_REGISTER_NOT_FOUND (-1210) +/** The value was truncated to fit. + * For queries this means that the register is wider than the queried value. + * For setters this means that the value is wider than the register. */ +#define VINF_DBGF_TRUNCATED_REGISTER 1211 +/** The value was zero extended to fit. + * For queries this means that the register is narrower than the queried value. + * For setters this means that the value is narrower than the register. */ +#define VINF_DBGF_ZERO_EXTENDED_REGISTER 1212 +/** The requested type conversion was not supported. */ +#define VERR_DBGF_UNSUPPORTED_CAST (-1213) +/** The register is read-only and cannot be modified. */ +#define VERR_DBGF_READ_ONLY_REGISTER (-1214) +/** Internal processing error \#1 in the DBGF register code. */ +#define VERR_DBGF_REG_IPE_1 (-1215) +/** Internal processing error \#2 in the DBGF register code. */ +#define VERR_DBGF_REG_IPE_2 (-1216) +/** Unhandled \#DB in hypervisor code. */ +#define VERR_DBGF_HYPER_DB_XCPT (-1217) +/** Internal processing error \#1 in the DBGF stack code. */ +#define VERR_DBGF_STACK_IPE_1 (-1218) +/** Internal processing error \#2 in the DBGF stack code. */ +#define VERR_DBGF_STACK_IPE_2 (-1219) +/** No trace buffer available, please change the VM config. */ +#define VERR_DBGF_NO_TRACE_BUFFER (-1220) +/** @} */ + + +/** @name Patch Manager (PATM) Status Codes + * @{ + */ +/** Non fatal Patch Manager analysis phase warning */ +#define VWRN_CONTINUE_ANALYSIS 1400 +/** Non fatal Patch Manager recompile phase warning (mapped to VWRN_CONTINUE_ANALYSIS). */ +#define VWRN_CONTINUE_RECOMPILE VWRN_CONTINUE_ANALYSIS +/** Continue search (mapped to VWRN_CONTINUE_ANALYSIS). */ +#define VWRN_PATM_CONTINUE_SEARCH VWRN_CONTINUE_ANALYSIS +/** Patch installation refused (patch too complex or unsupported instructions ) */ +#define VERR_PATCHING_REFUSED (-1401) +/** Unable to find patch */ +#define VERR_PATCH_NOT_FOUND (-1402) +/** Patch disabled */ +#define VERR_PATCH_DISABLED (-1403) +/** Patch enabled */ +#define VWRN_PATCH_ENABLED 1404 +/** Patch was already disabled */ +#define VERR_PATCH_ALREADY_DISABLED (-1405) +/** Patch was already enabled */ +#define VERR_PATCH_ALREADY_ENABLED (-1406) +/** Patch was removed. */ +#define VWRN_PATCH_REMOVED 1407 + +/** Reason for leaving RC: \#GP with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_TRAP_GP 1408 +/** First leave RC code. */ +#define VINF_PATM_LEAVE_RC_FIRST VINF_PATM_PATCH_TRAP_GP +/** Reason for leaving RC: \#PF with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_TRAP_PF 1409 +/** Reason for leaving RC: int3 with EIP pointing to patch code. */ +#define VINF_PATM_PATCH_INT3 1410 +/** Reason for leaving RC: \#PF for monitored patch page. */ +#define VINF_PATM_CHECK_PATCH_PAGE 1411 +/** Reason for leaving RC: duplicate instruction called at current eip. */ +#define VINF_PATM_DUPLICATE_FUNCTION 1412 +/** Execute one instruction with the recompiler */ +#define VINF_PATCH_EMULATE_INSTR 1413 +/** Reason for leaving RC: attempt to patch MMIO write. */ +#define VINF_PATM_HC_MMIO_PATCH_WRITE 1414 +/** Reason for leaving RC: attempt to patch MMIO read. */ +#define VINF_PATM_HC_MMIO_PATCH_READ 1415 +/** Reason for leaving RC: pending irq after iret that sets IF. */ +#define VINF_PATM_PENDING_IRQ_AFTER_IRET 1416 +/** Last leave RC code. */ +#define VINF_PATM_LEAVE_RC_LAST VINF_PATM_PENDING_IRQ_AFTER_IRET + +/** No conflicts to resolve */ +#define VERR_PATCH_NO_CONFLICT (-1425) +/** Detected unsafe code for patching */ +#define VERR_PATM_UNSAFE_CODE (-1426) +/** Terminate search branch */ +#define VWRN_PATCH_END_BRANCH 1427 +/** Already patched */ +#define VERR_PATM_ALREADY_PATCHED (-1428) +/** Spinlock detection failed. */ +#define VINF_PATM_SPINLOCK_FAILED (1429) +/** Continue execution after patch trap. */ +#define VINF_PATCH_CONTINUE (1430) +/** The patch manager is not used because we're using HM and VT-x/AMD-V. */ +#define VERR_PATM_HM_IPE (-1431) +/** Unexpected trap in patch code. */ +#define VERR_PATM_IPE_TRAP_IN_PATCH_CODE (-1432) + +/** @} */ + + +/** @name Code Scanning and Analysis Manager (CSAM) Status Codes + * @{ + */ +/** Trap not handled */ +#define VWRN_CSAM_TRAP_NOT_HANDLED 1500 +/** Patch installed */ +#define VWRN_CSAM_INSTRUCTION_PATCHED 1501 +/** Page record not found */ +#define VWRN_CSAM_PAGE_NOT_FOUND 1502 +/** Reason for leaving RC: CSAM wants perform a task in ring-3. */ +#define VINF_CSAM_PENDING_ACTION 1503 +/** The CSAM is not used because we're using HM and VT-x/AMD-V. */ +#define VERR_CSAM_HM_IPE (-1504) +/** @} */ + + +/** @name Page Monitor/Manager (PGM) Status Codes + * @{ + */ +/** Attempt to create a GC mapping which conflicts with an existing mapping. */ +#define VERR_PGM_MAPPING_CONFLICT (-1600) +/** The physical handler range has no corresponding RAM range. + * If this is MMIO, see todo above the return. If not MMIO, then it's + * someone else's fault... */ +#define VERR_PGM_HANDLER_PHYSICAL_NO_RAM_RANGE (-1601) +/** Attempt to register an access handler for a virtual range of which a part + * was already handled. */ +#define VERR_PGM_HANDLER_VIRTUAL_CONFLICT (-1602) +/** Attempt to register an access handler for a physical range of which a part + * was already handled. */ +#define VERR_PGM_HANDLER_PHYSICAL_CONFLICT (-1603) +/** Invalid page directory specified to PGM. */ +#define VERR_PGM_INVALID_PAGE_DIRECTORY (-1604) +/** Invalid GC physical address. */ +#define VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS (-1605) +/** Invalid GC physical range. Usually used when a specified range crosses + * a RAM region boundary. */ +#define VERR_PGM_INVALID_GC_PHYSICAL_RANGE (-1606) +/** Specified access handler was not found. */ +#define VERR_PGM_HANDLER_NOT_FOUND (-1607) +/** Attempt to register a RAM range of which parts are already + * covered by existing RAM ranges. */ +#define VERR_PGM_RAM_CONFLICT (-1608) +/** Failed to add new mappings because the current mappings are fixed + * in guest os memory. */ +#define VERR_PGM_MAPPINGS_FIXED (-1609) +/** Failed to fix mappings because of a conflict with the intermediate code. */ +#define VERR_PGM_MAPPINGS_FIX_CONFLICT (-1610) +/** Failed to fix mappings because a mapping rejected the address. */ +#define VERR_PGM_MAPPINGS_FIX_REJECTED (-1611) +/** Failed to fix mappings because the proposed memory area was to small. */ +#define VERR_PGM_MAPPINGS_FIX_TOO_SMALL (-1612) +/** Reason for leaving RZ: The urge to syncing CR3. */ +#define VINF_PGM_SYNC_CR3 1613 +/** Page not marked for dirty bit tracking */ +#define VINF_PGM_NO_DIRTY_BIT_TRACKING 1614 +/** Page fault caused by dirty bit tracking; corrected */ +#define VINF_PGM_HANDLED_DIRTY_BIT_FAULT 1615 +/** Go ahead with the default Read/Write operation. + * This is returned by a R3 physical or virtual handler when it wants the + * PGMPhys[Read|Write] routine do the reading/writing. */ +#define VINF_PGM_HANDLER_DO_DEFAULT 1616 +/** The paging mode of the host is not supported yet. */ +#define VERR_PGM_UNSUPPORTED_HOST_PAGING_MODE (-1617) +/** The physical guest page is a reserved/MMIO page and does not have any HC + * address. */ +#define VERR_PGM_PHYS_PAGE_RESERVED (-1618) +/** No page directory available for the hypervisor. */ +#define VERR_PGM_NO_HYPERVISOR_ADDRESS (-1619) +/** The shadow page pool was flushed. + * This means that a global CR3 sync was flagged. Anyone receiving this kind of status + * will have to get down to a SyncCR3 ASAP. See also VINF_PGM_SYNC_CR3. */ +#define VERR_PGM_POOL_FLUSHED (-1620) +/** The shadow page pool was cleared. + * This is a error code internal to the shadow page pool, it will be + * converted to a VERR_PGM_POOL_FLUSHED before leaving the pool code. */ +#define VERR_PGM_POOL_CLEARED (-1621) +/** The returned shadow page is cached. */ +#define VINF_PGM_CACHED_PAGE 1622 +/** Returned by handler registration, modification and deregistration + * when the shadow PTs could be updated because the guest page + * aliased or/and mapped by multiple PTs. */ +#define VINF_PGM_GCPHYS_ALIASED 1623 +/** Reason for leaving RC: Paging mode changed. + * PGMChangeMode() uses this to force a switch to R3 so it can safely deal with + * a mode switch. */ +#define VINF_PGM_CHANGE_MODE 1624 +/** SyncPage modified the PDE. + * This is an internal status code used to communicate back to the \#PF handler + * that the PDE was (probably) marked not-present and it should restart the instruction. */ +#define VINF_PGM_SYNCPAGE_MODIFIED_PDE 1625 +/** Physical range crosses dynamic ram chunk boundary; translation to HC ptr not safe. */ +#define VERR_PGM_GCPHYS_RANGE_CROSSES_BOUNDARY (-1626) +/** Conflict between the core memory and the intermediate paging context, try again. + * There are some very special conditions applying to the intermediate paging context + * (used during the world switches), and some times we continuously run into these + * when asking the host kernel for memory during VM init. Let us know if you run into + * this and we'll adjust the code so it tries harder to avoid it. + */ +#define VERR_PGM_INTERMEDIATE_PAGING_CONFLICT (-1627) +/** The shadow paging mode is not supported yet. */ +#define VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE (-1628) +/** The dynamic mapping cache for physical memory failed. */ +#define VERR_PGM_DYNMAP_FAILED (-1629) +/** The auto usage cache for the dynamic mapping set is full. */ +#define VERR_PGM_DYNMAP_FULL_SET (-1630) +/** The initialization of the dynamic mapping cache failed. */ +#define VERR_PGM_DYNMAP_SETUP_ERROR (-1631) +/** The expanding of the dynamic mapping cache failed. */ +#define VERR_PGM_DYNMAP_EXPAND_ERROR (-1632) +/** The page is unassigned (akin to VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS). */ +#define VERR_PGM_PHYS_TLB_UNASSIGNED (-1633) +/** Catch any access and route it thru PGM. */ +#define VERR_PGM_PHYS_TLB_CATCH_ALL (-1634) +/** Catch write access and route it thru PGM. */ +#define VINF_PGM_PHYS_TLB_CATCH_WRITE 1635 +/** Catch write access and route it thru PGM. */ +#define VERR_PGM_PHYS_TLB_CATCH_WRITE (-1635) +/** No CR3 root shadow page table. */ +#define VERR_PGM_NO_CR3_SHADOW_ROOT (-1636) +/** Trying to free a page with an invalid Page ID. */ +#define VERR_PGM_PHYS_INVALID_PAGE_ID (-1637) +/** PGMPhysWrite/Read hit a handler in Ring-0 or raw-mode context. */ +#define VERR_PGM_PHYS_WR_HIT_HANDLER (-1638) +/** Trying to free a page that isn't RAM. */ +#define VERR_PGM_PHYS_NOT_RAM (-1639) +/** Not ROM page. */ +#define VERR_PGM_PHYS_NOT_ROM (-1640) +/** Not MMIO page. */ +#define VERR_PGM_PHYS_NOT_MMIO (-1641) +/** Not MMIO2 page. */ +#define VERR_PGM_PHYS_NOT_MMIO2 (-1642) +/** Already aliased to a different page. */ +#define VERR_PGM_HANDLER_ALREADY_ALIASED (-1643) +/** Already aliased to the same page. */ +#define VINF_PGM_HANDLER_ALREADY_ALIASED (1643) +/** PGM pool flush pending - return to ring 3. */ +#define VINF_PGM_POOL_FLUSH_PENDING (1644) +/** Unable to use the range for a large page. */ +#define VERR_PGM_INVALID_LARGE_PAGE_RANGE (-1645) +/** Don't mess around with ballooned pages. */ +#define VERR_PGM_PHYS_PAGE_BALLOONED (-1646) +/** Internal processing error \#1 in page access handler code. */ +#define VERR_PGM_HANDLER_IPE_1 (-1647) + + +/** pgmPhysPageMapCommon encountered PGMPAGETYPE_MMIO2_ALIAS_MMIO. */ +#define VERR_PGM_MAP_MMIO2_ALIAS_MMIO (-1651) +/** Guest mappings are disabled. */ +#define VERR_PGM_MAPPINGS_DISABLED (-1652) +/** No guest mappings when SMP is enabled. */ +#define VERR_PGM_MAPPINGS_SMP (-1653) +/** Invalid saved page state. */ +#define VERR_PGM_INVALID_SAVED_PAGE_STATE (-1654) +/** Encountered an unexpected page type in the saved state. */ +#define VERR_PGM_LOAD_UNEXPECTED_PAGE_TYPE (-1655) +/** Encountered an unexpected page state in the saved state. */ +#define VERR_PGM_UNEXPECTED_PAGE_STATE (-1656) +/** Couldn't find MMIO2 range from saved state. */ +#define VERR_PGM_SAVED_MMIO2_RANGE_NOT_FOUND (-1657) +/** Couldn't find MMIO2 page from saved state. */ +#define VERR_PGM_SAVED_MMIO2_PAGE_NOT_FOUND (-1658) +/** Couldn't find ROM range from saved state. */ +#define VERR_PGM_SAVED_ROM_RANGE_NOT_FOUND (-1659) +/** Couldn't find ROM page from saved state. */ +#define VERR_PGM_SAVED_ROM_PAGE_NOT_FOUND (-1660) +/** ROM page mismatch between saved state and the VM. */ +#define VERR_PGM_SAVED_ROM_PAGE_PROT (-1661) +/** Unknown saved state record. */ +#define VERR_PGM_SAVED_REC_TYPE (-1662) +/** Internal processing error in the PGM dynmap (r0/rc). */ +#define VERR_PGM_DYNMAP_IPE (-1663) +/** Internal processing error in the PGM handy page allocator. */ +#define VERR_PGM_HANDY_PAGE_IPE (-1664) +/** Failed to map the guest PML4. */ +#define VERR_PGM_PML4_MAPPING (-1665) +/** Failed to obtain a pool page. */ +#define VERR_PGM_POOL_GET_PAGE_FAILED (-1666) +/** A PGM function was called in a mode where it isn't supposed to be used. */ +#define VERR_PGM_NOT_USED_IN_MODE (-1667) +/** The CR3 address specified memory we don't know about. */ +#define VERR_PGM_INVALID_CR3_ADDR (-1668) +/** One or the PDPEs specified memory we don't know about. */ +#define VERR_PGM_INVALID_PDPE_ADDR (-1669) +/** Internal processing error in the PGM physical handler code. */ +#define VERR_PGM_PHYS_HANDLER_IPE (-1670) +/** Internal processing error \#1 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_1 (-1671) +/** Internal processing error \#2 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_2 (-1672) +/** Internal processing error \#3 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_3 (-1673) +/** Internal processing error \#4 in the PGM physial page mapping code. */ +#define VERR_PGM_PHYS_PAGE_MAP_IPE_4 (-1674) +/** Too many loops looking for a page to reuse. */ +#define VERR_PGM_POOL_TOO_MANY_LOOPS (-1675) +/** Internal processing error related to guest mappings. */ +#define VERR_PGM_MAPPING_IPE (-1676) +/** An attempt was made to grow an already maxed out page pool. */ +#define VERR_PGM_POOL_MAXED_OUT_ALREADY (-1677) +/** Internal processing error in the page pool code. */ +#define VERR_PGM_POOL_IPE (-1678) +/** The write monitor is already engaged. */ +#define VERR_PGM_WRITE_MONITOR_ENGAGED (-1679) +/** Failed to get a guest page which is expected to be present. */ +#define VERR_PGM_PHYS_PAGE_GET_IPE (-1680) +/** We were given a NULL pPage parameter. */ +#define VERR_PGM_PHYS_NULL_PAGE_PARAM (-1681) +/** PCI passthru is not supported by this build. */ +#define VERR_PGM_PCI_PASSTHRU_MISCONFIG (-1682) +/** Too many MMIO2 ranges. */ +#define VERR_PGM_TOO_MANY_MMIO2_RANGES (-1683) +/** Internal processing error in the PGM physical page mapping code dealing + * with MMIO2 pages. */ +#define VERR_PGM_PHYS_PAGE_MAP_MMIO2_IPE (-1684) +/** Internal processing error in the PGM physcal page handling code related to + * MMIO/MMIO2. */ +#define VERR_PGM_PHYS_MMIO_EX_IPE (-1685) +/** @} */ + + +/** @name Memory Monitor (MM) Status Codes + * @{ + */ +/** Attempt to register a RAM range of which parts are already + * covered by existing RAM ranges. */ +#define VERR_MM_RAM_CONFLICT (-1700) +/** Hypervisor memory allocation failed. */ +#define VERR_MM_HYPER_NO_MEMORY (-1701) +/** A bad trap type ended up in mmGCRamTrap0eHandler. */ +#define VERR_MM_BAD_TRAP_TYPE_IPE (-1702) +/** @} */ + + +/** @name CPU Monitor (CPUM) Status Codes + * @{ + */ +/** The caller shall raise an \#GP(0) exception. */ +#define VERR_CPUM_RAISE_GP_0 (-1750) +/** Incompatible CPUM configuration. */ +#define VERR_CPUM_INCOMPATIBLE_CONFIG (-1751) +/** CPUMR3DisasmInstrCPU unexpectedly failed to determine the hidden + * parts of the CS register. */ +#define VERR_CPUM_HIDDEN_CS_LOAD_ERROR (-1752) +/** Couldn't find the end of CPUID sub-leaves. */ +#define VERR_CPUM_TOO_MANY_CPUID_SUBLEAVES (-1753) +/** CPUM internal processing error \#1. */ +#define VERR_CPUM_IPE_1 (-1754) +/** CPUM internal processing error \#2. */ +#define VERR_CPUM_IPE_2 (-1755) +/** The specified CPU cannot be found in the CPU database. */ +#define VERR_CPUM_DB_CPU_NOT_FOUND (-1756) +/** Invalid CPUMCPU offset in MSR range. */ +#define VERR_CPUM_MSR_BAD_CPUMCPU_OFFSET (-1757) +/** Return to ring-3 to read the MSR there. */ +#define VINF_CPUM_R3_MSR_READ (1758) +/** Return to ring-3 to write the MSR there. */ +#define VINF_CPUM_R3_MSR_WRITE (1759) +/** Too many CPUID leaves. */ +#define VERR_TOO_MANY_CPUID_LEAVES (-1760) +/** Invalid config value. */ +#define VERR_CPUM_INVALID_CONFIG_VALUE (-1761) +/** The loaded XSAVE component mask is not compatible with the host CPU + * or/and VM config. */ +#define VERR_CPUM_INCOMPATIBLE_XSAVE_COMP_MASK (-1762) +/** The loaded XSAVE component mask is not valid. */ +#define VERR_CPUM_INVALID_XSAVE_COMP_MASK (-1763) +/** The loaded XSAVE header is not valid. */ +#define VERR_CPUM_INVALID_XSAVE_HDR (-1764) +/** The loaded XCR0 register value is not valid. */ +#define VERR_CPUM_INVALID_XCR0 (-1765) +/** Indicates that we modified the host CR0 (FPU related). */ +#define VINF_CPUM_HOST_CR0_MODIFIED (1766) +/** @} */ + + +/** @name Save State Manager (SSM) Status Codes + * @{ + */ +/** The specified data unit already exist. */ +#define VERR_SSM_UNIT_EXISTS (-1800) +/** The specified data unit wasn't found. */ +#define VERR_SSM_UNIT_NOT_FOUND (-1801) +/** The specified data unit wasn't owned by caller. */ +#define VERR_SSM_UNIT_NOT_OWNER (-1802) + +/** General saved state file integrity error. */ +#define VERR_SSM_INTEGRITY (-1810) +/** The saved state file magic was not recognized. */ +#define VERR_SSM_INTEGRITY_MAGIC (-1811) +/** The saved state file version is not supported. */ +#define VERR_SSM_INTEGRITY_VERSION (-1812) +/** The saved state file size didn't match the one in the header. */ +#define VERR_SSM_INTEGRITY_SIZE (-1813) +/** The CRC of the saved state file did not match. */ +#define VERR_SSM_INTEGRITY_CRC (-1814) +/** The machine uuid field wasn't null. */ +#define VERR_SMM_INTEGRITY_MACHINE (-1815) +/** Saved state header integrity error. */ +#define VERR_SSM_INTEGRITY_HEADER (-1816) +/** Unit header integrity error. */ +#define VERR_SSM_INTEGRITY_UNIT (-1817) +/** Invalid unit magic (internal data tag). */ +#define VERR_SSM_INTEGRITY_UNIT_MAGIC (-1818) +/** The file contained a data unit which no-one wants. */ +#define VERR_SSM_INTEGRITY_UNIT_NOT_FOUND (-1819) +/** Incorrect version numbers in the header. */ +#define VERR_SSM_INTEGRITY_VBOX_VERSION (-1820) +/** Footer integrity error. */ +#define VERR_SSM_INTEGRITY_FOOTER (-1821) +/** Record header integrity error. */ +#define VERR_SSM_INTEGRITY_REC_HDR (-1822) +/** Termination record integrity error. */ +#define VERR_SSM_INTEGRITY_REC_TERM (-1823) +/** Termination record CRC mismatch. */ +#define VERR_SSM_INTEGRITY_REC_TERM_CRC (-1824) +/** Decompression integrity error. */ +#define VERR_SSM_INTEGRITY_DECOMPRESSION (-1825) +/** Saved state directory wintertides error. */ +#define VERR_SSM_INTEGRITY_DIR (-1826) +/** The saved state directory magic is wrong. */ +#define VERR_SSM_INTEGRITY_DIR_MAGIC (-1827) + +/** A data unit in the saved state file was defined but didn't any + * routine for processing it. */ +#define VERR_SSM_NO_LOAD_EXEC (-1830) +/** A restore routine attempted to load more data then the unit contained. */ +#define VERR_SSM_LOADED_TOO_MUCH (-1831) +/** Not in the correct state for the attempted operation. */ +#define VERR_SSM_INVALID_STATE (-1832) +/** Not in the correct state for the attempted operation. */ +#define VERR_SSM_LOADED_TOO_LITTLE (-1833) + +/** Unsupported data unit version. + * A SSM user returns this if it doesn't know the u32Version. */ +#define VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION (-1840) +/** The format of a data unit has changed. + * A SSM user returns this if it's not able to read the format for + * other reasons than u32Version. */ +#define VERR_SSM_DATA_UNIT_FORMAT_CHANGED (-1841) +/** The CPUID instruction returns different information when loading than when saved. + * Normally caused by hardware changes on the host, but could also be caused by + * changes in the BIOS setup. */ +#define VERR_SSM_LOAD_CPUID_MISMATCH (-1842) +/** The RAM size differs between the saved state and the VM config. */ +#define VERR_SSM_LOAD_MEMORY_SIZE_MISMATCH (-1843) +/** The state doesn't match the VM configuration in one or another way. + * (There are certain PCI reconfiguration which the OS could potentially + * do which can cause this problem. Check this out when it happens.) */ +#define VERR_SSM_LOAD_CONFIG_MISMATCH (-1844) +/** The virtual clock frequency differs too much. + * The clock source for the virtual time isn't reliable or the code have changed. */ +#define VERR_SSM_VIRTUAL_CLOCK_HZ (-1845) +/** A timeout occurred while waiting for async IDE operations to finish. */ +#define VERR_SSM_IDE_ASYNC_TIMEOUT (-1846) +/** One of the structure magics was wrong. */ +#define VERR_SSM_STRUCTURE_MAGIC (-1847) +/** The data in the saved state doesn't conform to expectations. */ +#define VERR_SSM_UNEXPECTED_DATA (-1848) +/** Trying to read a 64-bit guest physical address into a 32-bit variable. */ +#define VERR_SSM_GCPHYS_OVERFLOW (-1849) +/** Trying to read a 64-bit guest virtual address into a 32-bit variable. */ +#define VERR_SSM_GCPTR_OVERFLOW (-1850) +/** Vote for another pass. */ +#define VINF_SSM_VOTE_FOR_ANOTHER_PASS 1851 +/** Vote for done tell SSM not to call again until the final pass. */ +#define VINF_SSM_VOTE_DONE_DONT_CALL_AGAIN 1852 +/** Vote for giving up. */ +#define VERR_SSM_VOTE_FOR_GIVING_UP (-1853) +/** Don't call again until the final pass. */ +#define VINF_SSM_DONT_CALL_AGAIN 1854 +/** Giving up a live snapshot/teleportation attempt because of too many + * passes. */ +#define VERR_SSM_TOO_MANY_PASSES (-1855) +/** Giving up a live snapshot/teleportation attempt because the state grew to + * big. */ +#define VERR_SSM_STATE_GREW_TOO_BIG (-1856) +/** Giving up a live snapshot attempt because we're low on disk space. */ +#define VERR_SSM_LOW_ON_DISK_SPACE (-1857) +/** The operation was cancelled. */ +#define VERR_SSM_CANCELLED (-1858) +/** Nothing that can be cancelled. */ +#define VERR_SSM_NO_PENDING_OPERATION (-1859) +/** The operation has already been cancelled. */ +#define VERR_SSM_ALREADY_CANCELLED (-1860) +/** The machine was powered off while saving. */ +#define VERR_SSM_LIVE_POWERED_OFF (-1861) +/** The live snapshot/teleportation operation was aborted because of a guru + * meditation. */ +#define VERR_SSM_LIVE_GURU_MEDITATION (-1862) +/** The live snapshot/teleportation operation was aborted because of a fatal + * runtime error. */ +#define VERR_SSM_LIVE_FATAL_ERROR (-1863) +/** The VM was suspended before or while saving, don't resume execution. */ +#define VINF_SSM_LIVE_SUSPENDED 1864 +/** Complex SSM field fed to SSMR3PutStruct or SSMR3GetStruct. Use the + * extended API. */ +#define VERR_SSM_FIELD_COMPLEX (-1864) +/** Invalid size of a SSM field with the specified transformation. */ +#define VERR_SSM_FIELD_INVALID_SIZE (-1865) +/** The specified field is outside the structure. */ +#define VERR_SSM_FIELD_OUT_OF_BOUNDS (-1866) +/** The field does not follow immediately the previous one. */ +#define VERR_SSM_FIELD_NOT_CONSECUTIVE (-1867) +/** The field contains an invalid callback or transformation index. */ +#define VERR_SSM_FIELD_INVALID_CALLBACK (-1868) +/** The field contains an invalid padding size. */ +#define VERR_SSM_FIELD_INVALID_PADDING_SIZE (-1869) +/** The field contains a value that is out of range. */ +#define VERR_SSM_FIELD_INVALID_VALUE (-1870) +/** Generic stream error. */ +#define VERR_SSM_STREAM_ERROR (-1871) +/** SSM did a callback for a pass we didn't expect. */ +#define VERR_SSM_UNEXPECTED_PASS (-1872) +/** Someone is trying to skip backwards in the stream... */ +#define VERR_SSM_SKIP_BACKWARDS (-1873) +/** Someone is trying to write a memory block which is too big to encode. */ +#define VERR_SSM_MEM_TOO_BIG (-1874) +/** Encountered an bad (/unknown) record type. */ +#define VERR_SSM_BAD_REC_TYPE (-1875) +/** Internal processing error \#1 in SSM code. */ +#define VERR_SSM_IPE_1 (-1876) +/** Internal processing error \#2 in SSM code. */ +#define VERR_SSM_IPE_2 (-1877) +/** Internal processing error \#3 in SSM code. */ +#define VERR_SSM_IPE_3 (-1878) +/** A field contained an transformation that should only be used when loading + * old states. */ +#define VERR_SSM_FIELD_LOAD_ONLY_TRANSFORMATION (-1879) +/** @} */ + + +/** @name Virtual Machine (VM) Status Codes + * @{ + */ +/** The specified at reset handler wasn't found. */ +#define VERR_VM_ATRESET_NOT_FOUND (-1900) +/** Invalid VM request type. + * For the VMR3ReqAlloc() case, the caller just specified an illegal enmType. For + * all the other occurrences it means indicates corruption, broken logic, or stupid + * interface user. */ +#define VERR_VM_REQUEST_INVALID_TYPE (-1901) +/** Invalid VM request state. + * The state of the request packet was not the expected and accepted one(s). Either + * the interface user screwed up, or we've got corruption/broken logic. */ +#define VERR_VM_REQUEST_STATE (-1902) +/** Invalid VM request packet. + * One or more of the VM controlled packet members didn't contain the correct + * values. Some thing's broken. */ +#define VERR_VM_REQUEST_INVALID_PACKAGE (-1903) +/** The status field has not been updated yet as the request is still + * pending completion. Someone queried the iStatus field before the request + * has been fully processed. */ +#define VERR_VM_REQUEST_STATUS_STILL_PENDING (-1904) +/** The request has been freed, don't read the status now. + * Someone is reading the iStatus field of a freed request packet. */ +#define VERR_VM_REQUEST_STATUS_FREED (-1905) +/** A VM api requiring EMT was called from another thread. + * Use the VMR3ReqCall() apis to call it! */ +#define VERR_VM_THREAD_NOT_EMT (-1906) +/** The VM state was invalid for the requested operation. + * Go check the 'VM Statechart Diagram.gif'. */ +#define VERR_VM_INVALID_VM_STATE (-1907) +/** The support driver is not installed. + * On linux, open returned ENOENT. */ +#define VERR_VM_DRIVER_NOT_INSTALLED (-1908) +/** The support driver is not accessible. + * On linux, open returned EPERM. */ +#define VERR_VM_DRIVER_NOT_ACCESSIBLE (-1909) +/** Was not able to load the support driver. + * On linux, open returned ENODEV. */ +#define VERR_VM_DRIVER_LOAD_ERROR (-1910) +/** Was not able to open the support driver. + * Generic open error used when none of the other ones fit. */ +#define VERR_VM_DRIVER_OPEN_ERROR (-1911) +/** The installed support driver doesn't match the version of the user. */ +#define VERR_VM_DRIVER_VERSION_MISMATCH (-1912) +/** Saving the VM state is temporarily not allowed. Try again later. */ +#define VERR_VM_SAVE_STATE_NOT_ALLOWED (-1913) +/** An EMT called an API which cannot be called on such a thread. */ +#define VERR_VM_THREAD_IS_EMT (-1914) +/** Encountered an unexpected VM state. */ +#define VERR_VM_UNEXPECTED_VM_STATE (-1915) +/** Unexpected unstable VM state. */ +#define VERR_VM_UNEXPECTED_UNSTABLE_STATE (-1916) +/** Too many arguments passed to a VM request / request corruption. */ +#define VERR_VM_REQUEST_TOO_MANY_ARGS_IPE (-1917) +/** Fatal EMT wait error. */ +#define VERR_VM_FATAL_WAIT_ERROR (-1918) +/** The VM request was killed at VM termination. */ +#define VERR_VM_REQUEST_KILLED (-1919) +/** @} */ + + +/** @name VBox Remote Desktop Protocol (VRDP) Status Codes + * @{ + */ +/** Successful completion of operation (mapped to generic iprt status code). */ +#define VINF_VRDP_SUCCESS VINF_SUCCESS +/** VRDP transport operation timed out (mapped to generic iprt status code). */ +#define VERR_VRDP_TIMEOUT VERR_TIMEOUT + +/** Unsupported ISO protocol feature */ +#define VERR_VRDP_ISO_UNSUPPORTED (-2000) +/** Security (en/decryption) engine error */ +#define VERR_VRDP_SEC_ENGINE_FAIL (-2001) +/** VRDP protocol violation */ +#define VERR_VRDP_PROTOCOL_ERROR (-2002) +/** Unsupported VRDP protocol feature */ +#define VERR_VRDP_NOT_SUPPORTED (-2003) +/** VRDP protocol violation, client sends less data than expected */ +#define VERR_VRDP_INSUFFICIENT_DATA (-2004) +/** Internal error, VRDP packet is in wrong operation mode */ +#define VERR_VRDP_INVALID_MODE (-2005) +/** Memory allocation failed */ +#define VERR_VRDP_NO_MEMORY (-2006) +/** Client has been rejected */ +#define VERR_VRDP_ACCESS_DENIED (-2007) +/** VRPD receives a packet that is not supported */ +#define VWRN_VRDP_PDU_NOT_SUPPORTED 2008 +/** VRDP script allowed the packet to be processed further */ +#define VINF_VRDP_PROCESS_PDU 2009 +/** VRDP script has completed its task */ +#define VINF_VRDP_OPERATION_COMPLETED 2010 +/** VRDP thread has started OK and will run */ +#define VINF_VRDP_THREAD_STARTED 2011 +/** Framebuffer is resized, terminate send bitmap procedure */ +#define VINF_VRDP_RESIZE_REQUESTED 2012 +/** Output can be enabled for the client. */ +#define VINF_VRDP_OUTPUT_ENABLE 2013 +/** @} */ + + +/** @name Configuration Manager (CFGM) Status Codes + * @{ + */ +/** The integer value was too big for the requested representation. */ +#define VERR_CFGM_INTEGER_TOO_BIG (-2100) +/** Child node was not found. */ +#define VERR_CFGM_CHILD_NOT_FOUND (-2101) +/** Path to child node was invalid (i.e. empty). */ +#define VERR_CFGM_INVALID_CHILD_PATH (-2102) +/** Value not found. */ +#define VERR_CFGM_VALUE_NOT_FOUND (-2103) +/** No parent node specified. */ +#define VERR_CFGM_NO_PARENT (-2104) +/** No node was specified. */ +#define VERR_CFGM_NO_NODE (-2105) +/** The value is not an integer. */ +#define VERR_CFGM_NOT_INTEGER (-2106) +/** The value is not a zero terminated character string. */ +#define VERR_CFGM_NOT_STRING (-2107) +/** The value is not a byte string. */ +#define VERR_CFGM_NOT_BYTES (-2108) +/** The specified string / bytes buffer was to small. Specify a larger one and retry. */ +#define VERR_CFGM_NOT_ENOUGH_SPACE (-2109) +/** The path of a new node contained slashes or was empty. */ +#define VERR_CFGM_INVALID_NODE_PATH (-2160) +/** A new node couldn't be inserted because one with the same name exists. */ +#define VERR_CFGM_NODE_EXISTS (-2161) +/** A new leaf couldn't be inserted because one with the same name exists. */ +#define VERR_CFGM_LEAF_EXISTS (-2162) +/** An unknown config value was encountered. */ +#define VERR_CFGM_CONFIG_UNKNOWN_VALUE (-2163) +/** An unknown config node (key) was encountered. */ +#define VERR_CFGM_CONFIG_UNKNOWN_NODE (-2164) +/** Internal processing error \#1 in CFGM. */ +#define VERR_CFGM_IPE_1 (-2165) +/** @} */ + + +/** @name Time Manager (TM) Status Codes + * @{ + */ +/** The loaded timer state was incorrect. */ +#define VERR_TM_LOAD_STATE (-2200) +/** The timer was not in the correct state for the request operation. */ +#define VERR_TM_INVALID_STATE (-2201) +/** The timer was in a unknown state. Corruption or stupid coding error. */ +#define VERR_TM_UNKNOWN_STATE (-2202) +/** The timer was stuck in an unstable state until we grew impatient and returned. */ +#define VERR_TM_UNSTABLE_STATE (-2203) +/** TM requires GIP. */ +#define VERR_TM_GIP_REQUIRED (-2204) +/** TM does not support the GIP version. */ +#define VERR_TM_GIP_VERSION (-2205) +/** The GIP update interval is too large. */ +#define VERR_TM_GIP_UPDATE_INTERVAL_TOO_BIG (-2206) +/** The timer has a bad clock enum value, probably corruption. */ +#define VERR_TM_TIMER_BAD_CLOCK (-2207) +/** The timer failed to reach a stable state. */ +#define VERR_TM_TIMER_UNSTABLE_STATE (-2208) +/** Attempt to resume a running TSC. */ +#define VERR_TM_TSC_ALREADY_TICKING (-2209) +/** Attempt to pause a paused TSC. */ +#define VERR_TM_TSC_ALREADY_PAUSED (-2210) +/** Invalid value for cVirtualTicking. */ +#define VERR_TM_VIRTUAL_TICKING_IPE (-2211) +/** @} */ + + +/** @name Recompiled Execution Manager (REM) Status Codes + * @{ + */ +/** Fatal error in virtual hardware. */ +#define VERR_REM_VIRTUAL_HARDWARE_ERROR (-2300) +/** Fatal error in the recompiler cpu. */ +#define VERR_REM_VIRTUAL_CPU_ERROR (-2301) +/** Recompiler execution was interrupted by forced action. */ +#define VINF_REM_INTERRUPED_FF 2302 +/** Too many similar traps. This is a very useful debug only + * check (we don't do double/triple faults in REM). */ +#define VERR_REM_TOO_MANY_TRAPS (-2304) +/** The REM is out of breakpoint slots. */ +#define VERR_REM_NO_MORE_BP_SLOTS (-2305) +/** The REM could not find any breakpoint on the specified address. */ +#define VERR_REM_BP_NOT_FOUND (-2306) +/** @} */ + + +/** @name Trap Manager / Monitor (TRPM) Status Codes + * @{ + */ +/** No active trap. Cannot query or reset a non-existing trap. */ +#define VERR_TRPM_NO_ACTIVE_TRAP (-2400) +/** Active trap. Cannot assert a new trap when one is already active. */ +#define VERR_TRPM_ACTIVE_TRAP (-2401) +/** Reason for leaving RC: Guest tried to write to our IDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the idtr register. */ +#define VERR_TRPM_SHADOW_IDT_WRITE (-2402) +/** Reason for leaving RC: Fatal trap in hypervisor. */ +#define VERR_TRPM_DONT_PANIC (-2403) +/** Reason for leaving RC: Double Fault. */ +#define VERR_TRPM_PANIC (-2404) +/** The exception was dispatched for raw-mode execution. */ +#define VINF_TRPM_XCPT_DISPATCHED 2405 +/** Bad TRPM_TRAP_IN_OP. */ +#define VERR_TRPM_BAD_TRAP_IN_OP (-2406) +/** Internal processing error \#1 in TRPM. */ +#define VERR_TRPM_IPE_1 (-2407) +/** Internal processing error \#2 in TRPM. */ +#define VERR_TRPM_IPE_2 (-2408) +/** Internal processing error \#3 in TRPM. */ +#define VERR_TRPM_IPE_3 (-2409) +/** Got into a part of TRPM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_TRPM_HM_IPE (-2410) +/** @} */ + + +/** @name Selector Manager / Monitor (SELM) Status Code + * @{ + */ +/** Reason for leaving RC: Guest tried to write to our GDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the gdtr register. */ +#define VERR_SELM_SHADOW_GDT_WRITE (-2500) +/** Reason for leaving RC: Guest tried to write to our LDT - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the ldtr register. */ +#define VERR_SELM_SHADOW_LDT_WRITE (-2501) +/** Reason for leaving RC: Guest tried to write to our TSS - fatal. + * The VM will be terminated assuming the worst, i.e. that the + * guest has read the ltr register. */ +#define VERR_SELM_SHADOW_TSS_WRITE (-2502) +/** Reason for leaving RC: Sync the GDT table to solve a conflict. */ +#define VINF_SELM_SYNC_GDT 2503 +/** No valid TSS present. */ +#define VERR_SELM_NO_TSS (-2504) +/** Invalid guest LDT selector. */ +#define VERR_SELM_INVALID_LDT (-2505) +/** The guest LDT selector is out of bounds. */ +#define VERR_SELM_LDT_OUT_OF_BOUNDS (-2506) +/** Unknown error while reading the guest GDT during shadow table updating. */ +#define VERR_SELM_GDT_READ_ERROR (-2507) +/** The guest GDT so full that we cannot find free space for our own + * selectors. */ +#define VERR_SELM_GDT_TOO_FULL (-2508) +/** Got into a part of SELM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_SELM_HM_IPE (-2509) +/** @} */ + + +/** @name I/O Manager / Monitor (IOM) Status Code + * @{ + */ +/** The specified I/O port range was invalid. + * It was either empty or it was out of bounds. */ +#define VERR_IOM_INVALID_IOPORT_RANGE (-2600) +/** The specified R0 or RC I/O port range didn't have a corresponding R3 range. + * IOMR3IOPortRegisterR3() must be called first. */ +#define VERR_IOM_NO_R3_IOPORT_RANGE (-2601) +/** The specified I/O port range intruded on an existing range. There is + * a I/O port conflict between two device, or a device tried to register + * the same range twice. */ +#define VERR_IOM_IOPORT_RANGE_CONFLICT (-2602) +/** The I/O port range specified for removal wasn't found or it wasn't contiguous. */ +#define VERR_IOM_IOPORT_RANGE_NOT_FOUND (-2603) +/** The specified I/O port range was owned by some other device(s). Both registration + * and deregistration, but in the first case only RC and R0 ranges. */ +#define VERR_IOM_NOT_IOPORT_RANGE_OWNER (-2604) + +/** The specified MMIO range was invalid. + * It was either empty or it was out of bounds. */ +#define VERR_IOM_INVALID_MMIO_RANGE (-2605) +/** The specified R0 or RC MMIO range didn't have a corresponding R3 range. + * IOMR3MMIORegisterR3() must be called first. */ +#define VERR_IOM_NO_R3_MMIO_RANGE (-2606) +/** The specified MMIO range was owned by some other device(s). Both registration + * and deregistration, but in the first case only RC and R0 ranges. */ +#define VERR_IOM_NOT_MMIO_RANGE_OWNER (-2607) +/** The specified MMIO range intruded on an existing range. There is + * a MMIO conflict between two device, or a device tried to register + * the same range twice. */ +#define VERR_IOM_MMIO_RANGE_CONFLICT (-2608) +/** The MMIO range specified for removal was not found. */ +#define VERR_IOM_MMIO_RANGE_NOT_FOUND (-2609) +/** The MMIO range specified for removal was invalid. The range didn't match + * quite match a set of existing ranges. It's not possible to remove parts of + * a MMIO range, only one or more full ranges. */ +#define VERR_IOM_INCOMPLETE_MMIO_RANGE (-2610) +/** An invalid I/O port size was specified for a read or write operation. */ +#define VERR_IOM_INVALID_IOPORT_SIZE (-2611) +/** The MMIO handler was called for a bogus address! Internal error! */ +#define VERR_IOM_MMIO_HANDLER_BOGUS_CALL (-2612) +/** The MMIO handler experienced a problem with the disassembler. */ +#define VERR_IOM_MMIO_HANDLER_DISASM_ERROR (-2613) +/** The port being read was not present(/unused) and IOM shall return ~0 according to size. */ +#define VERR_IOM_IOPORT_UNUSED (-2614) +/** Unused MMIO register read, fill with 00. */ +#define VINF_IOM_MMIO_UNUSED_00 2615 +/** Unused MMIO register read, fill with FF. */ +#define VINF_IOM_MMIO_UNUSED_FF 2616 + +/** Reason for leaving RZ: I/O port read. */ +#define VINF_IOM_R3_IOPORT_READ 2620 +/** Reason for leaving RZ: I/O port write. */ +#define VINF_IOM_R3_IOPORT_WRITE 2621 +/** Reason for leaving RZ: Pending I/O port write. Since there is also + * VMCPU_FF_IOM for this condition, it's ok to drop this status code for + * some other VINF_EM_XXX statuses. */ +#define VINF_IOM_R3_IOPORT_COMMIT_WRITE 2622 +/** Reason for leaving RZ: MMIO read. */ +#define VINF_IOM_R3_MMIO_READ 2623 +/** Reason for leaving RZ: MMIO write. */ +#define VINF_IOM_R3_MMIO_WRITE 2624 +/** Reason for leaving RZ: MMIO read/write. */ +#define VINF_IOM_R3_MMIO_READ_WRITE 2625 +/** Reason for leaving RZ: Pending MMIO write. Since there is also + * VMCPU_FF_IOM for this condition, it's ok to drop this status code for + * some other VINF_EM_XXX statuses. */ +#define VINF_IOM_R3_MMIO_COMMIT_WRITE 2626 + +/** IOMGCIOPortHandler was given an unexpected opcode. */ +#define VERR_IOM_IOPORT_UNKNOWN_OPCODE (-2630) +/** Internal processing error \#1 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_1 (-2631) +/** Internal processing error \#2 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_2 (-2632) +/** Internal processing error \#3 in the I/O port code. */ +#define VERR_IOM_IOPORT_IPE_3 (-2633) +/** Internal processing error \#1 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_1 (-2634) +/** Internal processing error \#2 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_2 (-2635) +/** Internal processing error \#3 in the MMIO code. */ +#define VERR_IOM_MMIO_IPE_3 (-2636) +/** Got into a part of IOM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_IOM_HM_IPE (-2637) +/** Internal processing error while merging status codes. */ +#define VERR_IOM_FF_STATUS_IPE (-2638) +/** @} */ + + +/** @name Virtual Machine Monitor (VMM) Status Codes + * @{ + */ +/** Reason for leaving RZ: Calling host function. */ +#define VINF_VMM_CALL_HOST 2700 +/** Reason for leaving R0: Hit a ring-0 assertion on EMT. */ +#define VERR_VMM_RING0_ASSERTION (-2701) +/** The hyper CR3 differs between PGM and CPUM. */ +#define VERR_VMM_HYPER_CR3_MISMATCH (-2702) +/** Reason for leaving RZ: Illegal call to ring-3. */ +#define VERR_VMM_RING3_CALL_DISABLED (-2703) +/** The VMMR0.r0 module version does not match VBoxVMM.dll/so/dylib. + * If you just upgraded VirtualBox, please terminate all VMs and make sure + * that neither VBoxNetDHCP nor VBoxNetNAT is running. Then try again. + * If this error persists, try re-installing VirtualBox. */ +#define VERR_VMM_R0_VERSION_MISMATCH (-2704) +/** The VMMRC.rc module version does not match VBoxVMM.dll/so/dylib. + * Re-install if you are a user. Developers should make sure the build is + * complete or try with a clean build. */ +#define VERR_VMM_RC_VERSION_MISMATCH (-2705) +/** VMM set jump error. */ +#define VERR_VMM_SET_JMP_ERROR (-2706) +/** VMM set jump stack overflow error. */ +#define VERR_VMM_SET_JMP_STACK_OVERFLOW (-2707) +/** VMM set jump resume error. */ +#define VERR_VMM_SET_JMP_ABORTED_RESUME (-2708) +/** VMM long jump error. */ +#define VERR_VMM_LONG_JMP_ERROR (-2709) +/** Unknown ring-3 call attempted. */ +#define VERR_VMM_UNKNOWN_RING3_CALL (-2710) +/** The ring-3 call didn't set an RC. */ +#define VERR_VMM_RING3_CALL_NO_RC (-2711) +/** Reason for leaving RC: Caller the tracer in ring-0. */ +#define VINF_VMM_CALL_TRACER (2712) +/** Internal processing error \#1 in the switcher code. */ +#define VERR_VMM_SWITCHER_IPE_1 (-2713) +/** Reason for leaving RZ: Unknown call to ring-3. */ +#define VINF_VMM_UNKNOWN_RING3_CALL (2714) +/** Attempted to use stub switcher. */ +#define VERR_VMM_SWITCHER_STUB (-2715) +/** HM returned in the wrong state. */ +#define VERR_VMM_WRONG_HM_VMCPU_STATE (-2716) +/** SMAP enabled, but the AC flag was found to be clear - check the kernel + * log for details. */ +#define VERR_VMM_SMAP_BUT_AC_CLEAR (-2717) +/** @} */ + + +/** @name Pluggable Device and Driver Manager (PDM) Status Codes + * @{ + */ +/** An invalid LUN specification was given. */ +#define VERR_PDM_NO_SUCH_LUN (-2800) +/** A device encountered an unknown configuration value. + * This means that the device is potentially misconfigured and the device + * construction or unit attachment failed because of this. */ +#define VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES (-2801) +/** The above driver doesn't export a interface required by a driver being + * attached to it. Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE_ABOVE (-2802) +/** The below driver doesn't export a interface required by the drive + * having attached it. Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE_BELOW (-2803) +/** A device didn't find a required interface with an attached driver. + * Typical misconfiguration problem. */ +#define VERR_PDM_MISSING_INTERFACE (-2804) +/** A driver encountered an unknown configuration value. + * This means that the driver is potentially misconfigured and the driver + * construction failed because of this. */ +#define VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES (-2805) +/** The PCI bus assigned to a device didn't have room for it. + * Either too many devices are configured on the same PCI bus, or there are + * some internal problem where PDM/PCI doesn't free up slots when unplugging devices. */ +#define VERR_PDM_TOO_PCI_MANY_DEVICES (-2806) +/** A queue is out of free items, the queueing operation failed. */ +#define VERR_PDM_NO_QUEUE_ITEMS (-2807) +/** Not possible to attach further drivers to the driver. + * A driver which doesn't support attachments (below of course) will + * return this status code if it found that further drivers were configured + * to be attached to it. */ +#define VERR_PDM_DRVINS_NO_ATTACH (-2808) +/** Not possible to attach drivers to the device. + * A device which doesn't support attachments (below of course) will + * return this status code if it found that drivers were configured + * to be attached to it. */ +#define VERR_PDM_DEVINS_NO_ATTACH (-2809) +/** No attached driver. + * The PDMDRVHLP::pfnAttach and PDMDEVHLP::pfnDriverAttach will return + * this error when no driver was configured to be attached. */ +#define VERR_PDM_NO_ATTACHED_DRIVER (-2810) +/** The media geometry hasn't been set yet, so it cannot be obtained. + * The caller should then calculate the geometry from the media size. */ +#define VERR_PDM_GEOMETRY_NOT_SET (-2811) +/** The media translation hasn't been set yet, so it cannot be obtained. + * The caller should then guess the translation. */ +#define VERR_PDM_TRANSLATION_NOT_SET (-2812) +/** The media is not mounted, operation requires a mounted media. */ +#define VERR_PDM_MEDIA_NOT_MOUNTED (-2813) +/** Mount failed because a media was already mounted. Unmount the media + * and retry the mount. */ +#define VERR_PDM_MEDIA_MOUNTED (-2814) +/** The media is locked and cannot be unmounted. */ +#define VERR_PDM_MEDIA_LOCKED (-2815) +/** No 'Type' attribute in the DrvBlock configuration. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_NO_TYPE (-2816) +/** The 'Type' attribute in the DrvBlock configuration had an unknown value. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_UNKNOWN_TYPE (-2817) +/** The 'Translation' attribute in the DrvBlock configuration had an unknown value. + * Misconfiguration. */ +#define VERR_PDM_BLOCK_UNKNOWN_TRANSLATION (-2818) +/** The block driver type wasn't supported. + * Misconfiguration of the kind you get when attaching a floppy to an IDE controller. */ +#define VERR_PDM_UNSUPPORTED_BLOCK_TYPE (-2819) +/** A attach or prepare mount call failed because the driver already + * had a driver attached. */ +#define VERR_PDM_DRIVER_ALREADY_ATTACHED (-2820) +/** An attempt on detaching a driver without anyone actually being attached, or + * performing any other operation on an attached driver. */ +#define VERR_PDM_NO_DRIVER_ATTACHED (-2821) +/** The attached driver configuration is missing the 'Driver' attribute. */ +#define VERR_PDM_CFG_MISSING_DRIVER_NAME (-2822) +/** The configured driver wasn't found. + * Either the necessary driver modules wasn't loaded, the name was + * misspelled, or it was a misconfiguration. */ +#define VERR_PDM_DRIVER_NOT_FOUND (-2823) +/** The Ring-3 module was already loaded. */ +#define VINF_PDM_ALREADY_LOADED (2824) +/** The name of the module clashed with an existing module. */ +#define VERR_PDM_MODULE_NAME_CLASH (-2825) +/** Couldn't find any export for registration of drivers/devices. */ +#define VERR_PDM_NO_REGISTRATION_EXPORT (-2826) +/** A module name is too long. */ +#define VERR_PDM_MODULE_NAME_TOO_LONG (-2827) +/** Driver name clash. Another driver with the same name as the + * one being registered exists. */ +#define VERR_PDM_DRIVER_NAME_CLASH (-2828) +/** The version of the driver registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_DRVREG_VERSION (-2829) +/** Invalid entry in the driver registration structure. */ +#define VERR_PDM_INVALID_DRIVER_REGISTRATION (-2830) +/** Invalid host bit mask. */ +#define VERR_PDM_INVALID_DRIVER_HOST_BITS (-2831) +/** Not possible to detach a driver because the above driver/device + * doesn't support it. The above entity doesn't implement the pfnDetach call. */ +#define VERR_PDM_DRIVER_DETACH_NOT_POSSIBLE (-2832) +/** No PCI Bus is available to register the device with. This is usually a + * misconfiguration or in rare cases a buggy pci device. */ +#define VERR_PDM_NO_PCI_BUS (-2833) +/** The device is not a registered PCI device and thus cannot + * perform any PCI operations. The device forgot to register it self. */ +#define VERR_PDM_NOT_PCI_DEVICE (-2834) + +/** The version of the device registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_DEVREG_VERSION (-2835) +/** Invalid entry in the device registration structure. */ +#define VERR_PDM_INVALID_DEVICE_REGISTRATION (-2836) +/** Invalid host bit mask. */ +#define VERR_PDM_INVALID_DEVICE_GUEST_BITS (-2837) +/** The guest bit mask didn't match the guest being loaded. */ +#define VERR_PDM_INVALID_DEVICE_HOST_BITS (-2838) +/** Device name clash. Another device with the same name as the + * one being registered exists. */ +#define VERR_PDM_DEVICE_NAME_CLASH (-2839) +/** The device wasn't found. There was no registered device + * by that name. */ +#define VERR_PDM_DEVICE_NOT_FOUND (-2840) +/** The device instance was not found. */ +#define VERR_PDM_DEVICE_INSTANCE_NOT_FOUND (-2841) +/** The device instance have no base interface. */ +#define VERR_PDM_DEVICE_INSTANCE_NO_IBASE (-2842) +/** The device instance have no such logical unit. */ +#define VERR_PDM_DEVICE_INSTANCE_LUN_NOT_FOUND (-2843) +/** The driver instance could not be found. */ +#define VERR_PDM_DRIVER_INSTANCE_NOT_FOUND (-2844) +/** Logical Unit was not found. */ +#define VERR_PDM_LUN_NOT_FOUND (-2845) +/** The Logical Unit was found, but it had no driver attached to it. */ +#define VERR_PDM_NO_DRIVER_ATTACHED_TO_LUN (-2846) +/** The Logical Unit was found, but it had no driver attached to it. */ +#define VINF_PDM_NO_DRIVER_ATTACHED_TO_LUN 2846 +/** No PIC device instance is registered with the current VM and thus + * the PIC operation cannot be performed. */ +#define VERR_PDM_NO_PIC_INSTANCE (-2847) +/** No APIC device instance is registered with the current VM and thus + * the APIC operation cannot be performed. */ +#define VERR_PDM_NO_APIC_INSTANCE (-2848) +/** No DMAC device instance is registered with the current VM and thus + * the DMA operation cannot be performed. */ +#define VERR_PDM_NO_DMAC_INSTANCE (-2849) +/** No RTC device instance is registered with the current VM and thus + * the RTC or CMOS operation cannot be performed. */ +#define VERR_PDM_NO_RTC_INSTANCE (-2850) +/** Unable to open the host interface due to a sharing violation . */ +#define VERR_PDM_HIF_SHARING_VIOLATION (-2851) +/** Unable to open the host interface. */ +#define VERR_PDM_HIF_OPEN_FAILED (-2852) +/** The device doesn't support runtime driver attaching. + * The PDMDEVREG::pfnAttach callback function is NULL. */ +#define VERR_PDM_DEVICE_NO_RT_ATTACH (-2853) +/** The driver doesn't support runtime driver attaching. + * The PDMDRVREG::pfnAttach callback function is NULL. */ +#define VERR_PDM_DRIVER_NO_RT_ATTACH (-2854) +/** Invalid host interface version. */ +#define VERR_PDM_HIF_INVALID_VERSION (-2855) + +/** The version of the USB device registration structure is unknown + * to this VBox version. Either mixing incompatible versions or + * the structure isn't correctly initialized. */ +#define VERR_PDM_UNKNOWN_USBREG_VERSION (-2856) +/** Invalid entry in the device registration structure. */ +#define VERR_PDM_INVALID_USB_REGISTRATION (-2857) +/** Driver name clash. Another driver with the same name as the + * one being registered exists. */ +#define VERR_PDM_USB_NAME_CLASH (-2858) +/** The USB hub is already registered. */ +#define VERR_PDM_USB_HUB_EXISTS (-2859) +/** Couldn't find any USB hubs to attach the device to. */ +#define VERR_PDM_NO_USB_HUBS (-2860) +/** Couldn't find any free USB ports to attach the device to. */ +#define VERR_PDM_NO_USB_PORTS (-2861) +/** Couldn't find the USB Proxy device. Using OSE? */ +#define VERR_PDM_NO_USBPROXY (-2862) +/** The async completion template is still used. */ +#define VERR_PDM_ASYNC_TEMPLATE_BUSY (-2863) +/** The async completion task is already suspended. */ +#define VERR_PDM_ASYNC_COMPLETION_ALREADY_SUSPENDED (-2864) +/** The async completion task is not suspended. */ +#define VERR_PDM_ASYNC_COMPLETION_NOT_SUSPENDED (-2865) +/** The driver properties were invalid, and as a consequence construction + * failed. Caused my unusable media or similar problems. */ +#define VERR_PDM_DRIVER_INVALID_PROPERTIES (-2866) +/** Too many instances of a device. */ +#define VERR_PDM_TOO_MANY_DEVICE_INSTANCES (-2867) +/** Too many instances of a driver. */ +#define VERR_PDM_TOO_MANY_DRIVER_INSTANCES (-2868) +/** Too many instances of a usb device. */ +#define VERR_PDM_TOO_MANY_USB_DEVICE_INSTANCES (-2869) +/** The device instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVINS_VERSION_MISMATCH (-2870) +/** The device helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVHLPR3_VERSION_MISMATCH (-2871) +/** The USB device instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBINS_VERSION_MISMATCH (-2872) +/** The USB device helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBHLPR3_VERSION_MISMATCH (-2873) +/** The driver instance structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRVINS_VERSION_MISMATCH (-2874) +/** The driver helper structure version has changed. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRVHLPR3_VERSION_MISMATCH (-2875) +/** Generic device structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DEVICE_VERSION_MISMATCH (-2876) +/** Generic USB device structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_USBDEV_VERSION_MISMATCH (-2877) +/** Generic driver structure version mismatch. + * + * If you have upgraded VirtualBox recently, please make sure you have + * terminated all VMs and upgraded any extension packs. If this error + * persists, try re-installing VirtualBox. */ +#define VERR_PDM_DRIVER_VERSION_MISMATCH (-2878) +/** PDMVMMDevHeapR3ToGCPhys failure. */ +#define VERR_PDM_DEV_HEAP_R3_TO_GCPHYS (-2879) +/** A legacy device isn't implementing the HPET notification interface. */ +#define VERR_PDM_HPET_LEGACY_NOTIFY_MISSING (-2880) +/** Internal processing error in the critical section code. */ +#define VERR_PDM_CRITSECT_IPE (-2881) +/** The critical section being deleted was not found. */ +#define VERR_PDM_CRITSECT_NOT_FOUND (-2882) +/** A PDMThread API was called by the wrong thread. */ +#define VERR_PDM_THREAD_INVALID_CALLER (-2883) +/** Internal processing error \#1 in the PDM Thread code. */ +#define VERR_PDM_THREAD_IPE_1 (-2884) +/** Internal processing error \#2 in the PDM Thread code. */ +#define VERR_PDM_THREAD_IPE_2 (-2885) +/** Only one PCI function is supported per PDM device. */ +#define VERR_PDM_ONE_PCI_FUNCTION_PER_DEVICE (-2886) +/** Bad PCI configuration. */ +#define VERR_PDM_BAD_PCI_CONFIG (-2887) +/** Internal processing error # in the PDM device code. */ +#define VERR_PDM_DEV_IPE_1 (-2888) +/** Misconfigured driver chain transformation. */ +#define VERR_PDM_MISCONFIGURED_DRV_TRANSFORMATION (-2889) +/** The driver is already removed, not more transformations possible (at + * present). */ +#define VERR_PDM_CANNOT_TRANSFORM_REMOVED_DRIVER (-2890) +/** The PCI device isn't configured as a busmaster, physical memory access + * rejected. */ +#define VERR_PDM_NOT_PCI_BUS_MASTER (-2891) +/** Got into a part of PDM that is not used when HM (VT-x/AMD-V) is enabled. */ +#define VERR_PDM_HM_IPE (-2892) +/** The I/O request was canceled. */ +#define VERR_PDM_MEDIAEX_IOREQ_CANCELED (-2893) +/** There is not enough room to store the data. */ +#define VERR_PDM_MEDIAEX_IOBUF_OVERFLOW (-2894) +/** There is not enough data to satisfy the request. */ +#define VERR_PDM_MEDIAEX_IOBUF_UNDERRUN (-2895) +/** The I/O request ID is already existing. */ +#define VERR_PDM_MEDIAEX_IOREQID_CONFLICT (-2896) +/** The I/O request ID was not found. */ +#define VERR_PDM_MEDIAEX_IOREQID_NOT_FOUND (-2897) +/** The I/O request is in progress. */ +#define VINF_PDM_MEDIAEX_IOREQ_IN_PROGRESS 2898 +/** The I/O request is in an invalid state for this operation. */ +#define VERR_PDM_MEDIAEX_IOREQ_INVALID_STATE (-2899) +/** @} */ + + +/** @name Host-Guest Communication Manager (HGCM) Status Codes + * @{ + */ +/** Requested service does not exist. */ +#define VERR_HGCM_SERVICE_NOT_FOUND (-2900) +/** Service rejected client connection */ +#define VINF_HGCM_CLIENT_REJECTED 2901 +/** Command address is invalid. */ +#define VERR_HGCM_INVALID_CMD_ADDRESS (-2902) +/** Service will execute the command in background. */ +#define VINF_HGCM_ASYNC_EXECUTE 2903 +/** HGCM could not perform requested operation because of an internal error. */ +#define VERR_HGCM_INTERNAL (-2904) +/** Invalid HGCM client id. */ +#define VERR_HGCM_INVALID_CLIENT_ID (-2905) +/** The HGCM is saving state. */ +#define VINF_HGCM_SAVE_STATE (2906) +/** Requested service already exists. */ +#define VERR_HGCM_SERVICE_EXISTS (-2907) + +/** @} */ + + +/** @name Network Address Translation Driver (DrvNAT) Status Codes + * @{ + */ +/** Failed to find the DNS configured for this machine. */ +#define VINF_NAT_DNS 3000 +/** Failed to convert the specified Guest IP to a binary IP address. + * Malformed input. */ +#define VERR_NAT_REDIR_GUEST_IP (-3001) +/** Failed while setting up a redirector rule. + * There probably is a conflict between the rule and some existing + * service on the computer. */ +#define VERR_NAT_REDIR_SETUP (-3002) +/** @} */ + + +/** @name HostIF Driver (DrvTUN) Status Codes + * @{ + */ +/** The Host Interface Networking init program failed. */ +#define VERR_HOSTIF_INIT_FAILED (-3100) +/** The Host Interface Networking device name is too long. */ +#define VERR_HOSTIF_DEVICE_NAME_TOO_LONG (-3101) +/** The Host Interface Networking name config IOCTL call failed. */ +#define VERR_HOSTIF_IOCTL (-3102) +/** Failed to make the Host Interface Networking handle non-blocking. */ +#define VERR_HOSTIF_BLOCKING (-3103) +/** If a Host Interface Networking filehandle was specified it's not allowed to + * have any init or term programs. */ +#define VERR_HOSTIF_FD_AND_INIT_TERM (-3104) +/** The Host Interface Networking terminate program failed. */ +#define VERR_HOSTIF_TERM_FAILED (-3105) +/** @} */ + + +/** @name VBox HDD Container (VD) Status Codes + * @{ + */ +/** Invalid image type. */ +#define VERR_VD_INVALID_TYPE (-3200) +/** Operation can't be done in current HDD container state. */ +#define VERR_VD_INVALID_STATE (-3201) +/** Configuration value not found. */ +#define VERR_VD_VALUE_NOT_FOUND (-3202) +/** Virtual HDD is not opened. */ +#define VERR_VD_NOT_OPENED (-3203) +/** Requested image is not opened. */ +#define VERR_VD_IMAGE_NOT_FOUND (-3204) +/** Image is read-only. */ +#define VERR_VD_IMAGE_READ_ONLY (-3205) +/** Geometry hasn't been set. */ +#define VERR_VD_GEOMETRY_NOT_SET (-3206) +/** No data for this block in image. */ +#define VERR_VD_BLOCK_FREE (-3207) +/** Differencing and parent images can't be used together due to UUID. */ +#define VERR_VD_UUID_MISMATCH (-3208) +/** Asynchronous I/O request finished. */ +#define VINF_VD_ASYNC_IO_FINISHED 3209 +/** Asynchronous I/O is not finished yet. */ +#define VERR_VD_ASYNC_IO_IN_PROGRESS (-3210) +/** The image is too small or too large for this format. */ +#define VERR_VD_INVALID_SIZE (-3211) +/** Configuration value is unknown. This indicates misconfiguration. */ +#define VERR_VD_UNKNOWN_CFG_VALUES (-3212) +/** Interface is unknown. This indicates misconfiguration. */ +#define VERR_VD_UNKNOWN_INTERFACE (-3213) +/** The DEK for disk encryption is missing. */ +#define VERR_VD_DEK_MISSING (-3214) +/** The provided password to decrypt the DEK was incorrect. */ +#define VERR_VD_PASSWORD_INCORRECT (-3215) +/** Generic: Invalid image file header. Use this for plugins. */ +#define VERR_VD_GEN_INVALID_HEADER (-3220) +/** VDI: Invalid image file header. */ +#define VERR_VD_VDI_INVALID_HEADER (-3230) +/** VDI: Invalid image file header: invalid signature. */ +#define VERR_VD_VDI_INVALID_SIGNATURE (-3231) +/** VDI: Invalid image file header: invalid version. */ +#define VERR_VD_VDI_UNSUPPORTED_VERSION (-3232) +/** Comment string is too long. */ +#define VERR_VD_VDI_COMMENT_TOO_LONG (-3233) +/** VMDK: Invalid image file header. */ +#define VERR_VD_VMDK_INVALID_HEADER (-3240) +/** VMDK: Invalid image file header: invalid version. */ +#define VERR_VD_VMDK_UNSUPPORTED_VERSION (-3241) +/** VMDK: Image property not found. */ +#define VERR_VD_VMDK_VALUE_NOT_FOUND (-3242) +/** VMDK: Operation can't be done in current image state. */ +#define VERR_VD_VMDK_INVALID_STATE (-3243) +/** VMDK: Format is invalid/inconsistent. */ +#define VERR_VD_VMDK_INVALID_FORMAT (-3244) +/** VMDK: Invalid write position. */ +#define VERR_VD_VMDK_INVALID_WRITE (-3245) +/** iSCSI: Invalid header, i.e. dummy for validity check. */ +#define VERR_VD_ISCSI_INVALID_HEADER (-3250) +/** iSCSI: Operation can't be done in current image state. */ +#define VERR_VD_ISCSI_INVALID_STATE (-3251) +/** iSCSI: Invalid device type (not a disk). */ +#define VERR_VD_ISCSI_INVALID_TYPE (-3252) +/** iSCSI: Initiator secret not decrypted */ +#define VERR_VD_ISCSI_SECRET_ENCRYPTED (-3253) +/** VHD: Invalid image file header. */ +#define VERR_VD_VHD_INVALID_HEADER (-3260) +/** Parallels HDD: Invalid image file header. */ +#define VERR_VD_PARALLELS_INVALID_HEADER (-3265) +/** DMG: Invalid image file header. */ +#define VERR_VD_DMG_INVALID_HEADER (-3267) +/** Raw: Invalid image file header. */ +#define VERR_VD_RAW_INVALID_HEADER (-3270) +/** Raw: Invalid image file type. */ +#define VERR_VD_RAW_INVALID_TYPE (-3271) +/** The backend needs more metadata before it can continue. */ +#define VERR_VD_NOT_ENOUGH_METADATA (-3272) +/** Halt the current I/O context until further notification from the backend. */ +#define VERR_VD_IOCTX_HALT (-3273) +/** The disk has a cache attached already. */ +#define VERR_VD_CACHE_ALREADY_EXISTS (-3274) +/** There is no cache attached to the disk. */ +#define VERR_VD_CACHE_NOT_FOUND (-3275) +/** The cache is not up to date with the image. */ +#define VERR_VD_CACHE_NOT_UP_TO_DATE (-3276) +/** The given range does not meet the required alignment. */ +#define VERR_VD_DISCARD_ALIGNMENT_NOT_MET (-3277) +/** The discard operation is not supported for this image. */ +#define VERR_VD_DISCARD_NOT_SUPPORTED (-3278) +/** The image is the correct format but is corrupted. */ +#define VERR_VD_IMAGE_CORRUPTED (-3279) +/** Repairing the image is not supported. */ +#define VERR_VD_IMAGE_REPAIR_NOT_SUPPORTED (-3280) +/** Repairing the image is not possible because the corruption is to severe. */ +#define VERR_VD_IMAGE_REPAIR_IMPOSSIBLE (-3281) +/** Reading from the image was not possible because the offset is out of the image range. + * This usually indicates that there is a minor corruption in the image meta data. */ +#define VERR_VD_READ_OUT_OF_RANGE (-3282) +/** Block read was marked as free in the image and returned as a zero block. */ +#define VINF_VD_NEW_ZEROED_BLOCK 3283 +/** Unable to parse the XML in DMG file. */ +#define VERR_VD_DMG_XML_PARSE_ERROR (-3284) +/** Unable to locate a usable DMG file within the XAR archive. */ +#define VERR_VD_DMG_NOT_FOUND_INSIDE_XAR (-3285) +/** The size of the raw image is not dividable by 512 */ +#define VERR_VD_RAW_SIZE_MODULO_512 (-3286) +/** The size of the raw image is not dividable by 2048 */ +#define VERR_VD_RAW_SIZE_MODULO_2048 (-3287) +/** The size of the raw optical image is too small (<= 32K) */ +#define VERR_VD_RAW_SIZE_OPTICAL_TOO_SMALL (-3288) +/** The size of the raw floppy image is too big (>2.88MB) */ +#define VERR_VD_RAW_SIZE_FLOPPY_TOO_BIG (-3289) + +/** @} */ + + +/** @name VBox Guest Library (VBGL) Status Codes + * @{ + */ +/** Library was not initialized. */ +#define VERR_VBGL_NOT_INITIALIZED (-3300) +/** Virtual address was not allocated by the library. */ +#define VERR_VBGL_INVALID_ADDR (-3301) +/** IOCtl to VBoxGuest driver failed. */ +#define VERR_VBGL_IOCTL_FAILED (-3302) +/** @} */ + + +/** @name VBox USB (VUSB) Status Codes + * @{ + */ +/** No available ports on the hub. + * This error is returned when a device is attempted created and/or attached + * to a hub which is out of ports. */ +#define VERR_VUSB_NO_PORTS (-3400) +/** The requested operation cannot be performed on a detached USB device. */ +#define VERR_VUSB_DEVICE_NOT_ATTACHED (-3401) +/** Failed to allocate memory for a URB. */ +#define VERR_VUSB_NO_URB_MEMORY (-3402) +/** General failure during URB queuing. + * This will go away when the queueing gets proper status code handling. */ +#define VERR_VUSB_FAILED_TO_QUEUE_URB (-3403) +/** Device creation failed because the USB device name was not found. */ +#define VERR_VUSB_DEVICE_NAME_NOT_FOUND (-3404) +/** Not permitted to open the USB device. + * The user doesn't have access to the device in the usbfs, check the mount options. */ +#define VERR_VUSB_USBFS_PERMISSION (-3405) +/** The requested operation cannot be performed because the device + * is currently being reset. */ +#define VERR_VUSB_DEVICE_IS_RESETTING (-3406) +/** The requested operation cannot be performed because the device + * is currently suspended. */ +#define VERR_VUSB_DEVICE_IS_SUSPENDED (-3407) +/** Not permitted to open the USB device. + * The user doesn't have access to the device node, check group memberships. */ +#define VERR_VUSB_USB_DEVICE_PERMISSION (-3408) +/** @} */ + + +/** @name VBox VGA Status Codes + * @{ + */ +/** One of the custom modes was incorrect. + * The format or bit count of the custom mode value is invalid. */ +#define VERR_VGA_INVALID_CUSTOM_MODE (-3500) +/** The display connector is resizing. */ +#define VINF_VGA_RESIZE_IN_PROGRESS (3501) +/** Unexpected PCI region change during VGA saved state loading. */ +#define VERR_VGA_UNEXPECTED_PCI_REGION_LOAD_CHANGE (-3502) +/** @} */ + + +/** @name Internal Networking Status Codes + * @{ + */ +/** The networking interface to filter was not found. */ +#define VERR_INTNET_FLT_IF_NOT_FOUND (-3600) +/** The networking interface to filter was busy (used by someone). */ +#define VERR_INTNET_FLT_IF_BUSY (-3601) +/** Failed to create or connect to a networking interface filter. */ +#define VERR_INTNET_FLT_IF_FAILED (-3602) +/** The network already exists with a different trunk configuration. */ +#define VERR_INTNET_INCOMPATIBLE_TRUNK (-3603) +/** The network already exists with a different security profile (restricted / public). */ +#define VERR_INTNET_INCOMPATIBLE_FLAGS (-3604) +/** Failed to create a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_CREATE_FAILED (-3605) +/** Failed to retrieve a virtual network interface link ID. */ +#define VERR_INTNET_FLT_VNIC_LINK_ID_NOT_FOUND (-3606) +/** Failed to initialize a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_INIT_FAILED (-3607) +/** Failed to open a virtual network interface instance. */ +#define VERR_INTNET_FLT_VNIC_OPEN_FAILED (-3608) +/** Failed to retrieve underlying (lower mac) link. */ +#define VERR_INTNET_FLT_LOWER_LINK_INFO_NOT_FOUND (-3609) +/** Failed to open underlying link instance. */ +#define VERR_INTNET_FLT_LOWER_LINK_OPEN_FAILED (-3610) +/** Failed to get underlying link ID. */ +#define VERR_INTNET_FLT_LOWER_LINK_ID_NOT_FOUND (-3611) +/** @} */ + + +/** @name Support Driver Status Codes + * @{ + */ +/** The component factory was not found. */ +#define VERR_SUPDRV_COMPONENT_NOT_FOUND (-3700) +/** The component factories do not support the requested interface. */ +#define VERR_SUPDRV_INTERFACE_NOT_SUPPORTED (-3701) +/** The service module was not found. */ +#define VERR_SUPDRV_SERVICE_NOT_FOUND (-3702) +/** The host kernel is too old. */ +#define VERR_SUPDRV_KERNEL_TOO_OLD_FOR_VTX (-3703) +/** Bad VTG magic value. */ +#define VERR_SUPDRV_VTG_MAGIC (-3704) +/** Bad VTG bit count value. */ +#define VERR_SUPDRV_VTG_BITS (-3705) +/** Bad VTG header - misc. */ +#define VERR_SUPDRV_VTG_BAD_HDR_MISC (-3706) +/** Bad VTG header - offset. */ +#define VERR_SUPDRV_VTG_BAD_HDR_OFF (-3707) +/** Bad VTG header - offset. */ +#define VERR_SUPDRV_VTG_BAD_HDR_PTR (-3708) +/** Bad VTG header - to low value. */ +#define VERR_SUPDRV_VTG_BAD_HDR_TOO_FEW (-3709) +/** Bad VTG header - to high value. */ +#define VERR_SUPDRV_VTG_BAD_HDR_TOO_MUCH (-3710) +/** Bad VTG header - size value is not a multiple of the structure size. */ +#define VERR_SUPDRV_VTG_BAD_HDR_NOT_MULTIPLE (-3711) +/** Bad VTG string table offset. */ +#define VERR_SUPDRV_VTG_STRTAB_OFF (-3712) +/** Bad VTG string. */ +#define VERR_SUPDRV_VTG_BAD_STRING (-3713) +/** VTG string is too long. */ +#define VERR_SUPDRV_VTG_STRING_TOO_LONG (-3714) +/** Bad VTG attribute value. */ +#define VERR_SUPDRV_VTG_BAD_ATTR (-3715) +/** Bad VTG provider descriptor. */ +#define VERR_SUPDRV_VTG_BAD_PROVIDER (-3716) +/** Bad VTG probe descriptor. */ +#define VERR_SUPDRV_VTG_BAD_PROBE (-3717) +/** Bad VTG argument list descriptor. */ +#define VERR_SUPDRV_VTG_BAD_ARGLIST (-3718) +/** Bad VTG probe enabled data. */ +#define VERR_SUPDRV_VTG_BAD_PROBE_ENABLED (-3719) +/** Bad VTG probe location record. */ +#define VERR_SUPDRV_VTG_BAD_PROBE_LOC (-3720) +/** The VTG object for the session or image has already been registered. */ +#define VERR_SUPDRV_VTG_ALREADY_REGISTERED (-3721) +/** A driver may only register one VTG object per session. */ +#define VERR_SUPDRV_VTG_ONLY_ONCE_PER_SESSION (-3722) +/** A tracer has already been registered. */ +#define VERR_SUPDRV_TRACER_ALREADY_REGISTERED (-3723) +/** The session has no tracer associated with it. */ +#define VERR_SUPDRV_TRACER_NOT_REGISTERED (-3724) +/** The tracer has already been opened in this sesssion. */ +#define VERR_SUPDRV_TRACER_ALREADY_OPENED (-3725) +/** The tracer has not been opened. */ +#define VERR_SUPDRV_TRACER_NOT_OPENED (-3726) +/** There is no tracer present. */ +#define VERR_SUPDRV_TRACER_NOT_PRESENT (-3727) +/** The tracer is unloading. */ +#define VERR_SUPDRV_TRACER_UNLOADING (-3728) +/** Another thread in the session is talking to the tracer. */ +#define VERR_SUPDRV_TRACER_SESSION_BUSY (-3729) +/** The tracer cannot open it self in the same session. */ +#define VERR_SUPDRV_TRACER_CANNOT_OPEN_SELF (-3730) +/** Bad argument flags. */ +#define VERR_SUPDRV_TRACER_BAD_ARG_FLAGS (-3731) +/** The session has reached the max number of (user mode) providers. */ +#define VERR_SUPDRV_TRACER_TOO_MANY_PROVIDERS (-3732) +/** The tracepoint provider object is too large. */ +#define VERR_SUPDRV_TRACER_TOO_LARGE (-3733) +/** The probe location array isn't adjacent to the probe enable array. */ +#define VERR_SUPDRV_TRACER_UMOD_NOT_ADJACENT (-3734) +/** The user mode tracepoint provider has too many probe locations and + * probes. */ +#define VERR_SUPDRV_TRACER_UMOD_TOO_MANY_PROBES (-3735) +/** The user mode tracepoint provider string table is too large. */ +#define VERR_SUPDRV_TRACER_UMOD_STRTAB_TOO_BIG (-3736) +/** The user mode tracepoint provider string table offset is bad. */ +#define VERR_SUPDRV_TRACER_UMOD_STRTAB_OFF_BAD (-3737) +/** The VM process was denied access to vboxdrv because someone have managed to + * open the process or its main thread with too broad access rights. */ +#define VERR_SUPDRV_HARDENING_EVIL_HANDLE (-3738) +/** Error opening the ApiPort LPC object. */ +#define VERR_SUPDRV_APIPORT_OPEN_ERROR (-3739) +/** Error enumerating all processes in the session. */ +#define VERR_SUPDRV_SESSION_PROCESS_ENUM_ERROR (-3740) +/** The CSRSS instance associated with the client process could not be + * located. */ +#define VERR_SUPDRV_CSRSS_NOT_FOUND (-3741) +/** Type error opening the ApiPort LPC object. */ +#define VERR_SUPDRV_APIPORT_OPEN_ERROR_TYPE (-3742) +/** Failed to measure the TSC delta between two CPUs. */ +#define VERR_SUPDRV_TSC_DELTA_MEASUREMENT_FAILED (-3743) +/** Failed to calculate the TSC frequency. */ +#define VERR_SUPDRV_TSC_FREQ_MEASUREMENT_FAILED (-3744) +/** Failed to get the delta-adjusted TSC value. */ +#define VERR_SUPDRV_TSC_READ_FAILED (-3745) +/** Failed to measure the TSC delta between two CPUs, continue without any + * TSC-delta. */ +#define VWRN_SUPDRV_TSC_DELTA_MEASUREMENT_FAILED 3746 +/** A TSC-delta measurement request is currently being serviced. */ +#define VERR_SUPDRV_TSC_DELTA_MEASUREMENT_BUSY (-3747) +/** The process trying to open VBoxDrv is not a budding VM process (1). */ +#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1 (-3748) +/** The process trying to open VBoxDrv is not a budding VM process (2). */ +#define VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_2 (-3749) +/** @} */ + + +/** @name Support Library Status Codes + * @{ + */ +/** The specified path was not absolute (hardening). */ +#define VERR_SUPLIB_PATH_NOT_ABSOLUTE (-3750) +/** The specified path was not clean (hardening). */ +#define VERR_SUPLIB_PATH_NOT_CLEAN (-3751) +/** The specified path is too long (hardening). */ +#define VERR_SUPLIB_PATH_TOO_LONG (-3752) +/** The specified path is too short (hardening). */ +#define VERR_SUPLIB_PATH_TOO_SHORT (-3753) +/** The specified path has too many components (hardening). */ +#define VERR_SUPLIB_PATH_TOO_MANY_COMPONENTS (-3754) +/** The specified path is a root path (hardening). */ +#define VERR_SUPLIB_PATH_IS_ROOT (-3755) +/** Failed to enumerate directory (hardening). */ +#define VERR_SUPLIB_DIR_ENUM_FAILED (-3756) +/** Failed to stat a file/dir during enumeration (hardening). */ +#define VERR_SUPLIB_STAT_ENUM_FAILED (-3757) +/** Failed to stat a file/dir (hardening). */ +#define VERR_SUPLIB_STAT_FAILED (-3758) +/** Failed to fstat a native handle (hardening). */ +#define VERR_SUPLIB_FSTAT_FAILED (-3759) +/** Found an illegal symbolic link (hardening). */ +#define VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED (-3760) +/** Found something which isn't a file nor a directory (hardening). */ +#define VERR_SUPLIB_NOT_DIR_NOT_FILE (-3761) +/** The specified path is a directory and not a file (hardening). */ +#define VERR_SUPLIB_IS_DIRECTORY (-3762) +/** The specified path is a file and not a directory (hardening). */ +#define VERR_SUPLIB_IS_FILE (-3763) +/** The path is not the same object as the native handle (hardening). */ +#define VERR_SUPLIB_NOT_SAME_OBJECT (-3764) +/** The owner is not root (hardening). */ +#define VERR_SUPLIB_OWNER_NOT_ROOT (-3765) +/** The group is a non-system group and it has write access (hardening). */ +#define VERR_SUPLIB_WRITE_NON_SYS_GROUP (-3766) +/** The file or directory is world writable (hardening). */ +#define VERR_SUPLIB_WORLD_WRITABLE (-3767) +/** The argv[0] of an internal application does not match the executable image + * path (hardening). */ +#define VERR_SUPLIB_INVALID_ARGV0_INTERNAL (-3768) +/** The internal application does not reside in the correct place (hardening). */ +#define VERR_SUPLIB_INVALID_INTERNAL_APP_DIR (-3769) +/** Unable to establish trusted of VM process (0). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_0 (-3770) +/** Unable to establish trusted of VM process (1). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_1 (-3771) +/** Unable to establish trusted of VM process (2). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_2 (-3772) +/** Unable to establish trusted of VM process (3). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_3 (-3773) +/** Unable to establish trusted of VM process (4). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_4 (-3774) +/** Unable to establish trusted of VM process (5). */ +#define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_5 (-3775) +/** Unable to make text memory writeable (hardening). */ +#define VERR_SUPLIB_TEXT_NOT_WRITEABLE (-3776) +/** Unable to seal text memory again to protect against write access (hardening). */ +#define VERR_SUPLIB_TEXT_NOT_SEALED (-3777) +/** Unexpected instruction encountered for which there is no patch strategy + * implemented (hardening). */ +#define VERR_SUPLIB_UNEXPECTED_INSTRUCTION (-3778) +/** @} */ + + +/** @name VBox GMM Status Codes + * @{ + */ +/** The GMM is out of pages and needs to be give another chunk of user memory that + * it can lock down and borrow pages from. */ +#define VERR_GMM_SEED_ME (-3800) +/** Unable to allocate more pages from the host system. */ +#define VERR_GMM_OUT_OF_MEMORY (-3801) +/** Hit the global allocation limit. + * If you know there is still sufficient memory available, try raising the limit. */ +#define VERR_GMM_HIT_GLOBAL_LIMIT (-3802) +/** Hit the a VM account limit. */ +#define VERR_GMM_HIT_VM_ACCOUNT_LIMIT (-3803) +/** Attempt to free more memory than what was previously allocated. */ +#define VERR_GMM_ATTEMPT_TO_FREE_TOO_MUCH (-3804) +/** Attempted to report too many pages as deflated. */ +#define VERR_GMM_ATTEMPT_TO_DEFLATE_TOO_MUCH (-3805) +/** The page to be freed or updated was not found. */ +#define VERR_GMM_PAGE_NOT_FOUND (-3806) +/** The specified shared page was not actually private. */ +#define VERR_GMM_PAGE_NOT_PRIVATE (-3807) +/** The specified shared page was not actually shared. */ +#define VERR_GMM_PAGE_NOT_SHARED (-3808) +/** The page to be freed was already freed. */ +#define VERR_GMM_PAGE_ALREADY_FREE (-3809) +/** The page to be updated or freed was noted owned by the caller. */ +#define VERR_GMM_NOT_PAGE_OWNER (-3810) +/** The specified chunk was not found. */ +#define VERR_GMM_CHUNK_NOT_FOUND (-3811) +/** The chunk has already been mapped into the process. */ +#define VERR_GMM_CHUNK_ALREADY_MAPPED (-3812) +/** The chunk to be unmapped isn't actually mapped into the process. */ +#define VERR_GMM_CHUNK_NOT_MAPPED (-3813) +/** The chunk has been mapped too many times already (impossible). */ +#define VERR_GMM_TOO_MANY_CHUNK_MAPPINGS (-3814) +/** The reservation or reservation update was declined - too many VMs, too + * little memory, and/or too low GMM configuration. */ +#define VERR_GMM_MEMORY_RESERVATION_DECLINED (-3815) +/** A GMM sanity check failed. */ +#define VERR_GMM_IS_NOT_SANE (-3816) +/** Inserting a new chunk failed. */ +#define VERR_GMM_CHUNK_INSERT (-3817) +/** Failed to obtain the GMM instance. */ +#define VERR_GMM_INSTANCE (-3818) +/** Bad mutex semaphore flags. */ +#define VERR_GMM_MTX_FLAGS (-3819) +/** Internal processing error in the page allocator. */ +#define VERR_GMM_ALLOC_PAGES_IPE (-3820) +/** Invalid page count given to GMMR3FreePagesPerform. */ +#define VERR_GMM_ACTUAL_PAGES_IPE (-3821) +/** The shared module name is too long. */ +#define VERR_GMM_MODULE_NAME_TOO_LONG (-3822) +/** The shared module version string is too long. */ +#define VERR_GMM_MODULE_VERSION_TOO_LONG (-3823) +/** The shared module has too many regions. */ +#define VERR_GMM_TOO_MANY_REGIONS (-3824) +/** The guest has reported too many modules. */ +#define VERR_GMM_TOO_MANY_PER_VM_MODULES (-3825) +/** The guest has reported too many modules. */ +#define VERR_GMM_TOO_MANY_GLOBAL_MODULES (-3826) +/** The shared module is already registered. */ +#define VINF_GMM_SHARED_MODULE_ALREADY_REGISTERED (3827) +/** The shared module clashed address wise with a previously registered + * module. */ +#define VERR_GMM_SHARED_MODULE_ADDRESS_CLASH (-3828) +/** The shared module was not found. */ +#define VERR_GMM_SHARED_MODULE_NOT_FOUND (-3829) +/** The size of the shared module was out of range. */ +#define VERR_GMM_BAD_SHARED_MODULE_SIZE (-3830) +/** The size of the one or more regions in the shared module was out of + * range. */ +#define VERR_GMM_SHARED_MODULE_BAD_REGIONS_SIZE (-3831) +/** @} */ + + +/** @name VBox GVM Status Codes + * @{ + */ +/** The GVM is out of VM handle space. */ +#define VERR_GVM_TOO_MANY_VMS (-3900) +/** The EMT was not blocked at the time of the call. */ +#define VINF_GVM_NOT_BLOCKED 3901 +/** The EMT was not busy running guest code at the time of the call. */ +#define VINF_GVM_NOT_BUSY_IN_GC 3902 +/** RTThreadYield was called during a GVMMR0SchedPoll call. */ +#define VINF_GVM_YIELDED 3903 +/** @} */ + + +/** @name VBox VMX Status Codes + * @{ + */ +/** VMXON failed; possibly because it was already run before. */ +#define VERR_VMX_VMXON_FAILED (-4000) +/** Invalid VMCS pointer. + * (Can be OR'ed with VERR_VMX_INVALID_VMCS_FIELD.) */ +#define VERR_VMX_INVALID_VMCS_PTR (-4001) +/** Invalid VMCS index or write to read-only element. */ +#define VERR_VMX_INVALID_VMCS_FIELD (-4002) +/** Reserved for future status code that we wish to OR with + * VERR_VMX_INVALID_VMCS_PTR and VERR_VMX_INVALID_VMCS_FIELD. */ +#define VERR_VMX_RESERVED (-4003) +/** Invalid VMXON pointer. */ +#define VERR_VMX_INVALID_VMXON_PTR (-4004) +/** Unable to start VM execution. */ +#define VERR_VMX_UNABLE_TO_START_VM (-4005) +/** Unable to switch due to invalid host state. */ +#define VERR_VMX_INVALID_HOST_STATE (-4006) +/** IA32_FEATURE_CONTROL MSR not setup correcty (turn on VMX in the host system BIOS) */ +#define VERR_VMX_ILLEGAL_FEATURE_CONTROL_MSR (-4007) +/** Invalid CPU mode for VMX execution. */ +#define VERR_VMX_UNSUPPORTED_MODE (-4008) +/** VMX CPU extension not available */ +#define VERR_VMX_NO_VMX (-4009) +/** CPU was incorrectly left in VMX root mode; incompatible with VirtualBox */ +#define VERR_VMX_IN_VMX_ROOT_MODE (-4011) +/** Somebody cleared X86_CR4_VMXE in the CR4 register. */ +#define VERR_VMX_X86_CR4_VMXE_CLEARED (-4012) +/** Failed to enable and lock VT-x features. */ +#define VERR_VMX_MSR_LOCKING_FAILED (-4013) +/** Unable to switch due to invalid guest state. */ +#define VERR_VMX_INVALID_GUEST_STATE (-4014) +/** Unexpected VM exit. */ +#define VERR_VMX_UNEXPECTED_EXIT (-4015) +/** Unexpected VM exception. */ +#define VERR_VMX_UNEXPECTED_EXCEPTION (-4016) +/** Unexpected interruption exit type. */ +#define VERR_VMX_UNEXPECTED_INTERRUPTION_EXIT_TYPE (-4017) +/** CPU is not in VMX root mode; unexpected when leaving VMX root mode. */ +#define VERR_VMX_NOT_IN_VMX_ROOT_MODE (-4018) +/** Undefined VM exit code. */ +#define VERR_VMX_UNDEFINED_EXIT_CODE (-4019) +/** VMPTRLD failed; possibly because of invalid VMCS launch-state. */ +#define VERR_VMX_VMPTRLD_FAILED (-4021) +/** Invalid VMCS pointer passed to VMLAUNCH/VMRESUME. */ +#define VERR_VMX_INVALID_VMCS_PTR_TO_START_VM (-4022) +/** Internal VMX processing error no 1. */ +#define VERR_VMX_IPE_1 (-4023) +/** Internal VMX processing error no 2. */ +#define VERR_VMX_IPE_2 (-4024) +/** Internal VMX processing error no 3. */ +#define VERR_VMX_IPE_3 (-4025) +/** Internal VMX processing error no 4. */ +#define VERR_VMX_IPE_4 (-4026) +/** Internal VMX processing error no 5. */ +#define VERR_VMX_IPE_5 (-4027) +/** VT-x features for all modes (SMX and non-SMX) disabled by the BIOS. */ +#define VERR_VMX_MSR_ALL_VMX_DISABLED (-4028) +/** VT-x features disabled by the BIOS. */ +#define VERR_VMX_MSR_VMX_DISABLED (-4029) +/** VM-Entry Controls internal cache invalid. */ +#define VERR_VMX_ENTRY_CTLS_CACHE_INVALID (-4030) +/** VM-Exit Controls internal cache invalid. */ +#define VERR_VMX_EXIT_CTLS_CACHE_INVALID (-4031) +/** VM-Execution Pin-based Controls internal cache invalid. */ +#define VERR_VMX_PIN_EXEC_CTLS_CACHE_INVALID (-4032) +/** VM-Execution Primary Processor-based Controls internal cache + * invalid. */ +#define VERR_VMX_PROC_EXEC_CTLS_CACHE_INVALID (-4033) +/** VM-Execution Secondary Processor-based Controls internal + * cache invalid. */ +#define VERR_VMX_PROC_EXEC2_CTLS_CACHE_INVALID (-4034) +/** Failed to set VMXON enable bit while enabling VT-x through the MSR. */ +#define VERR_VMX_MSR_VMX_ENABLE_FAILED (-4035) +/** Failed to enable VMXON-in-SMX bit while enabling VT-x through the MSR. */ +#define VERR_VMX_MSR_SMX_VMX_ENABLE_FAILED (-4036) +/** @} */ + + +/** @name VBox SVM Status Codes + * @{ + */ +/** Unable to start VM execution. */ +#define VERR_SVM_UNABLE_TO_START_VM (-4050) +/** AMD-V bit not set in K6_EFER MSR */ +#define VERR_SVM_ILLEGAL_EFER_MSR (-4051) +/** AMD-V CPU extension not available. */ +#define VERR_SVM_NO_SVM (-4052) +/** AMD-V CPU extension disabled (by BIOS). */ +#define VERR_SVM_DISABLED (-4053) +/** AMD-V CPU extension in-use. */ +#define VERR_SVM_IN_USE (-4054) +/** Invalid pVMCB. */ +#define VERR_SVM_INVALID_PVMCB (-4055) +/** Unexpected SVM exit. */ +#define VERR_SVM_UNEXPECTED_EXIT (-4056) +/** Unexpected SVM exception exit. */ +#define VERR_SVM_UNEXPECTED_XCPT_EXIT (-4057) +/** Unexpected SVM patch type. */ +#define VERR_SVM_UNEXPECTED_PATCH_TYPE (-4058) +/** Unable to start VM execution due to an invalid guest state. */ +#define VERR_SVM_INVALID_GUEST_STATE (-4059) +/** Unknown or unrecognized SVM exit. */ +#define VERR_SVM_UNKNOWN_EXIT (-4060) +/** Internal SVM processing error no 1. */ +#define VERR_SVM_IPE_1 (-4061) +/** Internal SVM processing error no 2. */ +#define VERR_SVM_IPE_2 (-4062) +/** Internal SVM processing error no 3. */ +#define VERR_SVM_IPE_3 (-4063) +/** Internal SVM processing error no 4. */ +#define VERR_SVM_IPE_4 (-4064) +/** Internal SVM processing error no 5. */ +#define VERR_SVM_IPE_5 (-4065) +/** The nested-guest \#VMEXIT processing failed, initiate shutdown. */ +#define VERR_SVM_VMEXIT_FAILED (-4066) +/** An operation caused a nested-guest SVM \#VMEXIT. */ +#define VINF_SVM_VMEXIT 4067 +/** VMRUN emulation succeeded, ready to immediately enter the nested-guest. */ +#define VINF_SVM_VMRUN 4068 +/** @} */ + + +/** @name VBox HM Status Codes + * @{ + */ +/** Unable to start VM execution. */ +#define VERR_HM_UNKNOWN_CPU (-4100) +/** No CPUID support. */ +#define VERR_HM_NO_CPUID (-4101) +/** Host is about to go into suspend mode. */ +#define VERR_HM_SUSPEND_PENDING (-4102) +/** Conflicting CFGM values. */ +#define VERR_HM_CONFIG_MISMATCH (-4103) +/** Internal processing error in the HM init code. */ +#define VERR_HM_ALREADY_ENABLED_IPE (-4104) +/** Unexpected MSR in the auto-load/store area. */ +#define VERR_HM_UNEXPECTED_LD_ST_MSR (-4105) +/** No 32-bit to 64-bit switcher in place. */ +#define VERR_HM_NO_32_TO_64_SWITCHER (-4106) +/** HMR0Leave was called on the wrong CPU. */ +#define VERR_HM_WRONG_CPU (-4107) +/** Internal processing error \#1 in the HM code. */ +#define VERR_HM_IPE_1 (-4108) +/** Internal processing error \#2 in the HM code. */ +#define VERR_HM_IPE_2 (-4109) +/** Wrong 32/64-bit switcher. */ +#define VERR_HM_WRONG_SWITCHER (-4110) +/** Unknown I/O instruction. */ +#define VERR_HM_UNKNOWN_IO_INSTRUCTION (-4111) +/** Unsupported CPU feature combination. */ +#define VERR_HM_UNSUPPORTED_CPU_FEATURE_COMBO (-4112) +/** Internal processing error \#3 in the HM code. */ +#define VERR_HM_IPE_3 (-4113) +/** Internal processing error \#4 in the HM code. */ +#define VERR_HM_IPE_4 (-4114) +/** Internal processing error \#5 in the HM code. */ +#define VERR_HM_IPE_5 (-4115) +/** Invalid HM64ON32OP value. */ +#define VERR_HM_INVALID_HM64ON32OP (-4116) +/** Resume guest execution after injecting a double-fault. */ +#define VINF_HM_DOUBLE_FAULT 4117 +/** The requested nested-guest VM-exit intercept is not active or not in + * nested-guest execution mode. */ +#define VINF_HM_INTERCEPT_NOT_ACTIVE 4118 +/** @} */ + + +/** @name VBox Disassembler Status Codes + * @{ + */ +/** Invalid opcode byte(s) */ +#define VERR_DIS_INVALID_OPCODE (-4200) +/** Generic failure during disassembly. */ +#define VERR_DIS_GEN_FAILURE (-4201) +/** No read callback. */ +#define VERR_DIS_NO_READ_CALLBACK (-4202) +/** Invalid Mod/RM. */ +#define VERR_DIS_INVALID_MODRM (-4203) +/** Invalid parameter index. */ +#define VERR_DIS_INVALID_PARAMETER (-4204) +/** The instruction is too long. */ +#define VERR_DIS_TOO_LONG_INSTR (-4206) +/** @} */ + + +/** @name VBox Webservice Status Codes + * @{ + */ +/** Authentication failed (ISessionManager::logon()) */ +#define VERR_WEB_NOT_AUTHENTICATED (-4300) +/** Invalid format of managed object reference */ +#define VERR_WEB_INVALID_MANAGED_OBJECT_REFERENCE (-4301) +/** Invalid session ID in managed object reference */ +#define VERR_WEB_INVALID_SESSION_ID (-4302) +/** Invalid object ID in managed object reference */ +#define VERR_WEB_INVALID_OBJECT_ID (-4303) +/** Unsupported interface for managed object reference */ +#define VERR_WEB_UNSUPPORTED_INTERFACE (-4304) +/** @} */ + + +/** @name VBox PARAV Status Codes + * @{ + */ +/** Switch back to host */ +#define VINF_PARAV_SWITCH_TO_HOST 4400 + +/** @} */ + +/** @name VBox Video HW Acceleration command status + * @{ + */ +/** command processing is pending, a completion handler will be called */ +#define VINF_VHWA_CMD_PENDING 4500 + +/** @} */ + + +/** @name VBox COM error codes + * + * @remarks Global::vboxStatusCodeToCOM and Global::vboxStatusCodeFromCOM uses + * these for conversion that is lossless with respect to important COM + * status codes. These methods should be moved to the glue library. + * @{ */ +/** Unexpected turn of events. */ +#define VERR_COM_UNEXPECTED (-4600) +/** The base of the VirtualBox COM status codes (the lower value) + * corresponding 1:1 to VBOX_E_XXX. This is the lowest value. */ +#define VERR_COM_VBOX_LOWEST (-4699) +/** Object corresponding to the supplied arguments does not exist. */ +#define VERR_COM_OBJECT_NOT_FOUND (VERR_COM_VBOX_LOWEST + 1) +/** Current virtual machine state prevents the operation. */ +#define VERR_COM_INVALID_VM_STATE (VERR_COM_VBOX_LOWEST + 2) +/** Virtual machine error occurred attempting the operation. */ +#define VERR_COM_VM_ERROR (VERR_COM_VBOX_LOWEST + 3) +/** File not accessible or erroneous file contents. */ +#define VERR_COM_FILE_ERROR (VERR_COM_VBOX_LOWEST + 4) +/** IPRT error. */ +#define VERR_COM_IPRT_ERROR (VERR_COM_VBOX_LOWEST + 5) +/** Pluggable Device Manager error. */ +#define VERR_COM_PDM_ERROR (VERR_COM_VBOX_LOWEST + 6) +/** Current object state prohibits operation. */ +#define VERR_COM_INVALID_OBJECT_STATE (VERR_COM_VBOX_LOWEST + 7) +/** Host operating system related error. */ +#define VERR_COM_HOST_ERROR (VERR_COM_VBOX_LOWEST + 8) +/** Requested operation is not supported. */ +#define VERR_COM_NOT_SUPPORTED (VERR_COM_VBOX_LOWEST + 9) +/** Invalid XML found. */ +#define VERR_COM_XML_ERROR (VERR_COM_VBOX_LOWEST + 10) +/** Current session state prohibits operation. */ +#define VERR_COM_INVALID_SESSION_STATE (VERR_COM_VBOX_LOWEST + 11) +/** Object being in use prohibits operation. */ +#define VERR_COM_OBJECT_IN_USE (VERR_COM_VBOX_LOWEST + 12) +/** Returned by callback methods which does not need to be called + * again because the client does not actually make use of them. */ +#define VERR_COM_DONT_CALL_AGAIN (VERR_COM_VBOX_LOWEST + 13) +/** @} */ + +/** @name VBox VMMDev Status codes + * @{ + */ +/** CPU hotplug events from VMMDev are not monitored by the guest. */ +#define VERR_VMMDEV_CPU_HOTPLUG_NOT_MONITORED_BY_GUEST (-4700) +/** @} */ + +/** @name VBox async I/O manager Status Codes + * @{ + */ +/** Async I/O task is pending, a completion handler will be called. */ +#define VINF_AIO_TASK_PENDING 4800 +/** @} */ + +/** @name VBox Virtual SCSI Status Codes + * @{ + */ +/** LUN type is not supported. */ +#define VERR_VSCSI_LUN_TYPE_NOT_SUPPORTED (-4900) +/** LUN is already/still attached to a device. */ +#define VERR_VSCSI_LUN_ATTACHED_TO_DEVICE (-4901) +/** The specified LUN is invalid. */ +#define VERR_VSCSI_LUN_INVALID (-4902) +/** The LUN is not attached to the device. */ +#define VERR_VSCSI_LUN_NOT_ATTACHED (-4903) +/** The LUN is still busy. */ +#define VERR_VSCSI_LUN_BUSY (-4904) +/** @} */ + +/** @name VBox FAM Status Codes + * @{ + */ +/** FAM failed to open a connection. */ +#define VERR_FAM_OPEN_FAILED (-5000) +/** FAM failed to add a file to the list to be monitored. */ +#define VERR_FAM_MONITOR_FILE_FAILED (-5001) +/** FAM failed to add a directory to the list to be monitored. */ +#define VERR_FAM_MONITOR_DIRECTORY_FAILED (-5002) +/** The connection to the FAM daemon was lost. */ +#define VERR_FAM_CONNECTION_LOST (-5003) +/** @} */ + + +/** @name PCI Passtrhough Status Codes + * @{ + */ +/** RamPreAlloc not set. + * RAM pre-allocation is currently a requirement for PCI passthrough. */ +#define VERR_PCI_PASSTHROUGH_NO_RAM_PREALLOC (-5100) +/** VT-x/AMD-V not active. + * PCI passthrough currently works only if VT-x/AMD-V is active. */ +#define VERR_PCI_PASSTHROUGH_NO_HM (-5101) +/** Nested paging not active. + * PCI passthrough currently works only if nested paging is active. */ +#define VERR_PCI_PASSTHROUGH_NO_NESTED_PAGING (-5102) +/** @} */ + + +/** @name GVMM Status Codes + * @{ + */ +/** Internal error obtaining the GVMM instance. */ +#define VERR_GVMM_INSTANCE (-5200) +/** GVMM does not support the range of CPUs present/possible on the host. */ +#define VERR_GVMM_HOST_CPU_RANGE (-5201) +/** GVMM ran into some broken IPRT code. */ +#define VERR_GVMM_BROKEN_IPRT (-5202) +/** Internal processing error \#1 in the GVMM code. */ +#define VERR_GVMM_IPE_1 (-5203) +/** Internal processing error \#2 in the GVMM code. */ +#define VERR_GVMM_IPE_2 (-5204) +/** Cannot destroy VM because not all other EMTs have deregistered. */ +#define VERR_GVMM_NOT_ALL_EMTS_DEREGISTERED (-5205) +/** @} */ + + +/** @name IEM Status Codes + * @{ */ +/** The instruction is not yet implemented by IEM. */ +#define VERR_IEM_INSTR_NOT_IMPLEMENTED (-5300) +/** Invalid operand size passed to an IEM function. */ +#define VERR_IEM_INVALID_OPERAND_SIZE (-5301) +/** Invalid address mode passed to an IEM function. */ +#define VERR_IEM_INVALID_ADDRESS_MODE (-5302) +/** Invalid effective segment register number passed to an IEM function. */ +#define VERR_IEM_INVALID_EFF_SEG (-5303) +/** Invalid instruction length passed to an IEM function. */ +#define VERR_IEM_INVALID_INSTR_LENGTH (-5304) +/** Internal status code for indicating that a selector isn't valid (LAR, LSL, + * VERR, VERW). This is not used outside the instruction implementations. */ +#define VINF_IEM_SELECTOR_NOT_OK (5305) +/** Restart the current instruction. For testing only. */ +#define VERR_IEM_RESTART_INSTRUCTION (-5389) +/** This particular aspect of the instruction is not yet implemented by IEM. */ +#define VERR_IEM_ASPECT_NOT_IMPLEMENTED (-5390) +/** Internal processing error \#1 in the IEM code. */ +#define VERR_IEM_IPE_1 (-5391) +/** Internal processing error \#2 in the IEM code. */ +#define VERR_IEM_IPE_2 (-5392) +/** Internal processing error \#3 in the IEM code. */ +#define VERR_IEM_IPE_3 (-5393) +/** Internal processing error \#4 in the IEM code. */ +#define VERR_IEM_IPE_4 (-5394) +/** Internal processing error \#5 in the IEM code. */ +#define VERR_IEM_IPE_5 (-5395) +/** Internal processing error \#6 in the IEM code. */ +#define VERR_IEM_IPE_6 (-5396) +/** Internal processing error \#7 in the IEM code. */ +#define VERR_IEM_IPE_7 (-5397) +/** Internal processing error \#8 in the IEM code. */ +#define VERR_IEM_IPE_8 (-5398) +/** Internal processing error \#9 in the IEM code. */ +#define VERR_IEM_IPE_9 (-5399) +/** @} */ + + +/** @name DBGC Status Codes + * @{ */ +/** Status that causes DBGC to quit. */ +#define VERR_DBGC_QUIT (-5400) +/** Async command pending. */ +#define VWRN_DBGC_CMD_PENDING 5401 +/** The command has already been registered. */ +#define VWRN_DBGC_ALREADY_REGISTERED 5402 +/** The command cannot be deregistered because has not been registered. */ +#define VERR_DBGC_COMMANDS_NOT_REGISTERED (-5403) +/** Unknown breakpoint. */ +#define VERR_DBGC_BP_NOT_FOUND (-5404) +/** The breakpoint already exists. */ +#define VERR_DBGC_BP_EXISTS (-5405) +/** The breakpoint has no command. */ +#define VINF_DBGC_BP_NO_COMMAND 5406 +/** Generic debugger command failure. */ +#define VERR_DBGC_COMMAND_FAILED (-5407) +/** Logic bug in the DBGC code. */ +#define VERR_DBGC_IPE (-5408) + +/** The lowest parse status code. */ +#define VERR_DBGC_PARSE_LOWEST (-5499) +/** Syntax error - too few arguments. */ +#define VERR_DBGC_PARSE_TOO_FEW_ARGUMENTS (VERR_DBGC_PARSE_LOWEST + 0) +/** Syntax error - too many arguments. */ +#define VERR_DBGC_PARSE_TOO_MANY_ARGUMENTS (VERR_DBGC_PARSE_LOWEST + 1) +/** Syntax error - too many arguments for static storage. */ +#define VERR_DBGC_PARSE_ARGUMENT_OVERFLOW (VERR_DBGC_PARSE_LOWEST + 2) +/** Syntax error - expected binary operator. */ +#define VERR_DBGC_PARSE_EXPECTED_BINARY_OP (VERR_DBGC_PARSE_LOWEST + 3) + +/** Syntax error - the argument does not allow a range to be specified. */ +#define VERR_DBGC_PARSE_NO_RANGE_ALLOWED (VERR_DBGC_PARSE_LOWEST + 5) +/** Syntax error - unbalanced quotes. */ +#define VERR_DBGC_PARSE_UNBALANCED_QUOTE (VERR_DBGC_PARSE_LOWEST + 6) +/** Syntax error - unbalanced parenthesis. */ +#define VERR_DBGC_PARSE_UNBALANCED_PARENTHESIS (VERR_DBGC_PARSE_LOWEST + 7) +/** Syntax error - an argument or subargument contains nothing useful. */ +#define VERR_DBGC_PARSE_EMPTY_ARGUMENT (VERR_DBGC_PARSE_LOWEST + 8) +/** Syntax error - invalid operator usage. */ +#define VERR_DBGC_PARSE_UNEXPECTED_OPERATOR (VERR_DBGC_PARSE_LOWEST + 9) +/** Syntax error - invalid numeric value. */ +#define VERR_DBGC_PARSE_INVALID_NUMBER (VERR_DBGC_PARSE_LOWEST + 10) +/** Syntax error - numeric overflow. */ +#define VERR_DBGC_PARSE_NUMBER_TOO_BIG (VERR_DBGC_PARSE_LOWEST + 11) +/** Syntax error - invalid operation attempted. */ +#define VERR_DBGC_PARSE_INVALID_OPERATION (VERR_DBGC_PARSE_LOWEST + 12) +/** Syntax error - function not found. */ +#define VERR_DBGC_PARSE_FUNCTION_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 13) +/** Syntax error - the specified function is not a function. */ +#define VERR_DBGC_PARSE_NOT_A_FUNCTION (VERR_DBGC_PARSE_LOWEST + 14) +/** Syntax error - out of scratch memory. */ +#define VERR_DBGC_PARSE_NO_SCRATCH (VERR_DBGC_PARSE_LOWEST + 15) +/** Syntax error - out of regular heap memory. */ +#define VERR_DBGC_PARSE_NO_MEMORY (VERR_DBGC_PARSE_LOWEST + 16) +/** Syntax error - incorrect argument type. */ +#define VERR_DBGC_PARSE_INCORRECT_ARG_TYPE (VERR_DBGC_PARSE_LOWEST + 17) +/** Syntax error - an undefined variable was referenced. */ +#define VERR_DBGC_PARSE_VARIABLE_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 18) +/** Syntax error - a type conversion failed. */ +#define VERR_DBGC_PARSE_CONVERSION_FAILED (VERR_DBGC_PARSE_LOWEST + 19) +/** Syntax error - you hit a debugger feature which isn't implemented yet. + * (Feel free to help implement it.) */ +#define VERR_DBGC_PARSE_NOT_IMPLEMENTED (VERR_DBGC_PARSE_LOWEST + 20) +/** Syntax error - Couldn't satisfy a request for a specific result type. */ +#define VERR_DBGC_PARSE_BAD_RESULT_TYPE (VERR_DBGC_PARSE_LOWEST + 21) +/** Syntax error - Cannot read symbol value, it is a set-only symbol. */ +#define VERR_DBGC_PARSE_WRITEONLY_SYMBOL (VERR_DBGC_PARSE_LOWEST + 22) +/** Syntax error - Invalid command name. */ +#define VERR_DBGC_PARSE_INVALD_COMMAND_NAME (VERR_DBGC_PARSE_LOWEST + 23) +/** Syntax error - Command not found. */ +#define VERR_DBGC_PARSE_COMMAND_NOT_FOUND (VERR_DBGC_PARSE_LOWEST + 24) +/** Syntax error - buggy parser. */ +#define VERR_DBGC_PARSE_BUG (VERR_DBGC_PARSE_LOWEST + 25) +/** @} */ + + +/** @name Support driver/library shared verification status codes. + * @{ */ +/** Process Verification Failure: The memory content does not match the image + * file. */ +#define VERR_SUP_VP_MEMORY_VS_FILE_MISMATCH (-5600) +/** Process Verification Failure: The memory protection of a image file section + * does not match what the section header prescribes. */ +#define VERR_SUP_VP_SECTION_PROTECTION_MISMATCH (-5601) +/** Process Verification Failure: One of the section in the image file is not + * mapped into memory. */ +#define VERR_SUP_VP_SECTION_NOT_MAPPED (-5602) +/** Process Verification Failure: One of the section in the image file is not + * fully mapped into memory. */ +#define VERR_SUP_VP_SECTION_NOT_FULLY_MAPPED (-5603) +/** Process Verification Failure: Bad file alignment value in image header. */ +#define VERR_SUP_VP_BAD_FILE_ALIGNMENT_VALUE (-5604) +/** Process Verification Failure: Bad image base in header. */ +#define VERR_SUP_VP_BAD_IMAGE_BASE (-5605) +/** Process Verification Failure: Bad image signature. */ +#define VERR_SUP_VP_BAD_IMAGE_SIGNATURE (-5606) +/** Process Verification Failure: Bad image size. */ +#define VERR_SUP_VP_BAD_IMAGE_SIZE (-5607) +/** Process Verification Failure: Bad new-header offset in the MZ header. */ +#define VERR_SUP_VP_BAD_MZ_OFFSET (-5608) +/** Process Verification Failure: Bad optional header field. */ +#define VERR_SUP_VP_BAD_OPTIONAL_HEADER (-5609) +/** Process Verification Failure: Bad section alignment value in image + * header. */ +#define VERR_SUP_VP_BAD_SECTION_ALIGNMENT_VALUE (-5610) +/** Process Verification Failure: Bad section raw data size. */ +#define VERR_SUP_VP_BAD_SECTION_FILE_SIZE (-5611) +/** Process Verification Failure: Bad virtual section address. */ +#define VERR_SUP_VP_BAD_SECTION_RVA (-5612) +/** Process Verification Failure: Bad virtual section size. */ +#define VERR_SUP_VP_BAD_SECTION_VIRTUAL_SIZE (-5613) +/** Process Verification Failure: Bad size of image header. */ +#define VERR_SUP_VP_BAD_SIZE_OF_HEADERS (-5614) +/** Process Verification Failure: The process is being debugged. */ +#define VERR_SUP_VP_DEBUGGED (-5615) +/** Process Verification Failure: A DLL was found more than once. */ +#define VERR_SUP_VP_DUPLICATE_DLL_MAPPING (-5616) +/** Process Verification Failure: Image section region is too large. */ +#define VERR_SUP_VP_EMPTY_REGION_TOO_LARGE (-5617) +/** Process Verification Failure: Executable file name and process image name + * does not match up. */ +#define VERR_SUP_VP_EXE_VS_PROC_NAME_MISMATCH (-5618) +/** Process Verification Failure: Found executable memory allocated in the + * process. There is only supposed be executable memory associated with + * image file mappings (DLLs & EXE). */ +#define VERR_SUP_VP_FOUND_EXEC_MEMORY (-5619) +/** Process Verification Failure: There is more than one known executable mapped + * into the process. */ +#define VERR_SUP_VP_FOUND_MORE_THAN_ONE_EXE_MAPPING (-5620) +/** Process Verification Failure: Error closing image file handle. */ +#define VERR_SUP_VP_IMAGE_FILE_CLOSE_ERROR (-5621) +/** Process Verification Failure: Error opening image file. */ +#define VERR_SUP_VP_IMAGE_FILE_OPEN_ERROR (-5622) +/** Process Verification Failure: Error reading image file header. */ +#define VERR_SUP_VP_IMAGE_HDR_READ_ERROR (-5623) +/** Process Verification Failure: Image mapping is bogus as the first region + * has different AllocationBase and BaseAddress values, indicating that a + * section was unmapped or otherwise tampered with. */ +#define VERR_SUP_VP_IMAGE_MAPPING_BASE_ERROR (-5624) +/** Process Verification Failure: Error reading process memory for comparing + * with disk data. */ +#define VERR_SUP_VP_MEMORY_READ_ERROR (-5625) +/** Process Verification Failure: Found no executable mapped into the process + * address space. */ +#define VERR_SUP_VP_NO_FOUND_NO_EXE_MAPPING (-5626) +/** Process Verification Failure: An image mapping failed to report a name. */ +#define VERR_SUP_VP_NO_IMAGE_MAPPING_NAME (-5627) +/** Process Verification Failure: No KERNE32.DLL mapping found. This is + * impossible. */ +#define VERR_SUP_VP_NO_KERNEL32_MAPPING (-5628) +/** Process Verification Failure: Error allocating memory. */ +#define VERR_SUP_VP_NO_MEMORY (-5629) +/** Process Verification Failure: Error allocating state memory or querying + * the system32 path. */ +#define VERR_SUP_VP_NO_MEMORY_STATE (-5630) +/** Process Verification Failure: No NTDLL.DLL mapping found. This is + * impossible. */ +#define VERR_SUP_VP_NO_NTDLL_MAPPING (-5631) +/** Process Verification Failure: A DLL residing outside System32 was found + * in the process. */ +#define VERR_SUP_VP_NON_SYSTEM32_DLL (-5632) +/** Process Verification Failure: An unknown and unwanted DLL was found loaded + * into the process. */ +#define VERR_SUP_VP_NOT_KNOWN_DLL_OR_EXE (-5633) +/** Process Verification Failure: The name of an image file changes between + * mapping regions. */ +#define VERR_SUP_VP_NT_MAPPING_NAME_CHANGED (-5634) +/** Process Verification Failure: Error querying process name. */ +#define VERR_SUP_VP_NT_QI_PROCESS_NM_ERROR (-5635) +/** Process Verification Failure: Error querying thread information. */ +#define VERR_SUP_VP_NT_QI_THREAD_ERROR (-5636) +/** Process Verification Failure: Error query virtual memory information. */ +#define VERR_SUP_VP_NT_QI_VIRTUAL_MEMORY_ERROR (-5637) +/** Process Verification Failure: Error query virtual memory mapping name. */ +#define VERR_SUP_VP_NT_QI_VIRTUAL_MEMORY_NM_ERROR (-5638) +/** Process Verification Failure: Error determining the full path of + * System32. */ +#define VERR_SUP_VP_SYSTEM32_PATH (-5639) +/** Process Verification Failure: The process has more than one thread. */ +#define VERR_SUP_VP_THREAD_NOT_ALONE (-5640) +/** Process Verification Failure: The image mapping is too large (>= 2GB). */ +#define VERR_SUP_VP_TOO_HIGH_REGION_RVA (-5641) +/** Process Verification Failure: The memory region is too large (>= 2GB). */ +#define VERR_SUP_VP_TOO_LARGE_REGION (-5642) +/** Process Verification Failure: There are too many DLLs loaded. */ +#define VERR_SUP_VP_TOO_MANY_DLLS_LOADED (-5643) +/** Process Verification Failure: An image has too many regions. */ +#define VERR_SUP_VP_TOO_MANY_IMAGE_REGIONS (-5644) +/** Process Verification Failure: The process has too many virtual memory + * regions. */ +#define VERR_SUP_VP_TOO_MANY_MEMORY_REGIONS (-5645) +/** Process Verification Failure: An image has too many sections. */ +#define VERR_SUP_VP_TOO_MANY_SECTIONS (-5646) +/** Process Verification Failure: An image is targeting an unexpected + * machine/CPU. */ +#define VERR_SUP_VP_UNEXPECTED_IMAGE_MACHINE (-5647) +/** Process Verification Failure: Unexpected section protection flag + * combination. */ +#define VERR_SUP_VP_UNEXPECTED_SECTION_FLAGS (-5648) +/** Process Verification Failure: Expected the process and exe to have forced + * integrity checking enabled (verifying signatures). */ +#define VERR_SUP_VP_EXE_MISSING_FORCE_INTEGRITY (-5649) +/** Process Verification Failure: Expected the process and exe to have dynamic + * base enabled. */ +#define VERR_SUP_VP_EXE_MISSING_DYNAMIC_BASE (-5650) +/** Process Verification Failure: Expected the process and exe to advertise + * NX compatibility. */ +#define VERR_SUP_VP_EXE_MISSING_NX_COMPAT (-5651) +/** Process Verification Failure: The DllCharacteristics of the process + * does not match the value in the optional header in the exe file. */ +#define VERR_SUP_VP_DLL_CHARECTERISTICS_MISMATCH (-5652) +/** Process Verification Failure: The ImageCharacteristics of the process + * does not match the value in the file header in the exe file. */ +#define VERR_SUP_VP_IMAGE_CHARECTERISTICS_MISMATCH (-5653) +/** Process Verification Failure: Error querying image information. */ +#define VERR_SUP_VP_NT_QI_PROCESS_IMG_INFO_ERROR (-5654) +/** Process Verification Failure: Error querying debug port. */ +#define VERR_SUP_VP_NT_QI_PROCESS_DBG_PORT_ERROR (-5655) +/** WinVerifyTrust failed with an unexpected status code when using the + * catalog-file approach. */ +#define VERR_SUP_VP_WINTRUST_CAT_FAILURE (-5656) +/** The image is required to be signed with the same certificate as the rest + * of VirtualBox. */ +#define VERR_SUP_VP_NOT_SIGNED_WITH_BUILD_CERT (-5657) +/** Internal processing error: Not build certificate. */ +#define VERR_SUP_VP_NOT_BUILD_CERT_IPE (-5658) +/** The image requires to be signed using the kernel-code signing process. */ +#define VERR_SUP_VP_NOT_VALID_KERNEL_CODE_SIGNATURE (-5659) +/** Unexpected number of valid paths. */ +#define VERR_SUP_VP_UNEXPECTED_VALID_PATH_COUNT (-5660) +/** The image is required to force integrity checks. */ +#define VERR_SUP_VP_SIGNATURE_CHECKS_NOT_ENFORCED (-5661) +/** Process Verification Failure: Symantec Endpoint Protection must be + * disabled for the VirtualBox VM processes. + * http://www.symantec.com/connect/articles/creating-application-control-exclusions-symantec-endpoint-protection-121 */ +#define VERR_SUP_VP_SYSFER_DLL (-5662) +/** Process Purification Failure: KERNE32.DLL already mapped into the initial + * process (suspended). */ +#define VERR_SUP_VP_KERNEL32_ALREADY_MAPPED (-5663) +/** Process Purification Failure: NtFreeVirtualMemory failed on a chunk of + * executable memory which shouldn't be present in the process. */ +#define VERR_SUP_VP_FREE_VIRTUAL_MEMORY_FAILED (-5664) +/** Process Purification Failure: Both NtUnmapViewOfSetion and + * NtProtectVirtualMemory failed to get rid of or passify an non-image + * executable mapping. */ +#define VERR_SUP_VP_UNMAP_AND_PROTECT_FAILED (-5665) +/** Process Purification Failure: Unknown memory type of executable memory. */ +#define VERR_SUP_VP_UNKOWN_MEM_TYPE (-5666) +/** The image file is not owned by TrustedInstaller is it should be. */ +#define VERR_SUP_VP_NOT_OWNED_BY_TRUSTED_INSTALLER (-5667) +/** The image is outside the expected range. */ +#define VERR_SUP_VP_IMAGE_TOO_BIG (-5668) +/** Stub process not found so it cannot be revalidated when vboxdrv is opened + * by the VM process. */ +#define VERR_SUP_VP_STUB_NOT_FOUND (-5669) +/** Error opening the stub process for revalidation when vboxdrv is opened by + * the VM process. */ +#define VERR_SUP_VP_STUB_OPEN_ERROR (-5670) +/** Stub process thread not found during revalidation upon vboxdrv opening by + * the VM process. */ +#define VERR_SUP_VP_STUB_THREAD_NOT_FOUND (-5671) +/** Error opening the stub process thread for revalidation when vboxdrv is + * opened by the VM process. */ +#define VERR_SUP_VP_STUB_THREAD_OPEN_ERROR (-5672) +/** Process Purification Failure: NtAllocateVirtualMemory failed to get us + * suitable replacement memory for a chunk of executable memory that + * shouldn't be present in our process. (You will only see this message if you + * got potentially fatally buggy anti-virus software installed.) */ +#define VERR_SUP_VP_REPLACE_VIRTUAL_MEMORY_FAILED (-5673) +/** Error getting the file mode. */ +#define VERR_SUP_VP_FILE_MODE_ERROR (-5674) +/** Error creating an event semaphore for used with asynchronous reads. */ +#define VERR_SUP_VP_CREATE_READ_EVT_SEM_FAILED (-5675) +/** Undesirable module. */ +#define VERR_SUP_VP_UNDESIRABLE_MODULE (-5676) + +/** @} */ + +/** @name VBox Extension Pack Status Codes + * @{ + */ +/** The host is not supported. Uninstall the extension pack. + * Returned by the VBOXEXTPACKREG::pfnInstalled. */ +#define VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL (-6000) +/** The VirtualBox version is not supported by one of the extension packs. + * + * You have probably upgraded VirtualBox recently. Please upgrade the + * extension packs to versions compatible with this VirtualBox release. + */ +#define VERR_EXTPACK_VBOX_VERSION_MISMATCH (-6001) +/** @} */ + + +/** @name VBox Guest Control Status Codes + * @{ + */ +/** Guest side reported an error. */ +#define VERR_GSTCTL_GUEST_ERROR (-6200) +/** A guest control object has changed its overall status. */ +#define VWRN_GSTCTL_OBJECTSTATE_CHANGED 6220 +/** Guest process is in a wrong state. */ +#define VERR_GSTCTL_PROCESS_WRONG_STATE (-6221) +/** Started guest process terminated with an exit code <> 0. */ +#define VWRN_GSTCTL_PROCESS_EXIT_CODE 6221 +/** @} */ + + +/** @name GIM Status Codes + * @{ + */ +/** No GIM provider is configured for this VM. */ +#define VERR_GIM_NOT_ENABLED (-6300) +/** GIM internal processing error \#1. */ +#define VERR_GIM_IPE_1 (-6301) +/** GIM internal processing error \#2. */ +#define VERR_GIM_IPE_2 (-6302) +/** GIM internal processing error \#3. */ +#define VERR_GIM_IPE_3 (-6303) +/** The GIM provider does not support any paravirtualized TSC. */ +#define VERR_GIM_PVTSC_NOT_AVAILABLE (-6304) +/** The guest has not setup use of the paravirtualized TSC. */ +#define VERR_GIM_PVTSC_NOT_ENABLED (-6305) +/** Unknown or invalid GIM provider. */ +#define VERR_GIM_INVALID_PROVIDER (-6306) +/** GIM generic operation failed. */ +#define VERR_GIM_OPERATION_FAILED (-6307) +/** The GIM provider does not support any hypercalls. */ +#define VERR_GIM_HYPERCALLS_NOT_AVAILABLE (-6308) +/** The guest has not setup use of the hypercalls. */ +#define VERR_GIM_HYPERCALLS_NOT_ENABLED (-6309) +/** The GIM device is not registered with GIM when it ought to be. */ +#define VERR_GIM_DEVICE_NOT_REGISTERED (-6310) +/** Hypercall cannot be enabled/performed due to access/permissions/CPL. */ +#define VERR_GIM_HYPERCALL_ACCESS_DENIED (-6311) +/** Failed to read to a memory region while performing a hypercall. */ +#define VERR_GIM_HYPERCALL_MEMORY_READ_FAILED (-6312) +/** Failed to write to a memory region while performing a hypercall. */ +#define VERR_GIM_HYPERCALL_MEMORY_WRITE_FAILED (-6313) +/** Generic hypercall operation failure. */ +#define VERR_GIM_HYPERCALL_FAILED (-6314) +/** No debug connection configured. */ +#define VERR_GIM_NO_DEBUG_CONNECTION (-6315) +/** Return to ring-3 to perform the hypercall there. */ +#define VINF_GIM_R3_HYPERCALL 6316 +/** Continuing hypercall at the same RIP, continue guest execution. */ +#define VINF_GIM_HYPERCALL_CONTINUING 6317 +/** Instruction that triggers the hypercall is invalid/unrecognized. */ +#define VERR_GIM_INVALID_HYPERCALL_INSTR (-6318) +/** @} */ + + +/** @name Main API Status Codes + * @{ + */ +/** The configuration constructor in main failed due to a COM error. Check + * the release log of the VM for further details. */ +#define VERR_MAIN_CONFIG_CONSTRUCTOR_COM_ERROR (-6400) +/** The configuration constructor in main failed due to an internal consistency + * error. Consult the release log of the VM for further details. */ +#define VERR_MAIN_CONFIG_CONSTRUCTOR_IPE (-6401) +/** @} */ + + +/** @name VBox Drag and Drop Status Codes + * @{ + */ +/** Guest side reported an error. */ +#define VERR_GSTDND_GUEST_ERROR (-6500) +/** @} */ + + +/** @name Audio Status Codes + * @{ + */ +/** Host backend couldn't be initialized. Happen if the audio server is not + * reachable, audio hardware is not available or similar. We should use the + * NULL audio driver. */ +#define VERR_AUDIO_BACKEND_INIT_FAILED (-6600) +/** No free input streams. */ +#define VERR_AUDIO_NO_FREE_INPUT_STREAMS (-6601) +/** No free output streams. */ +#define VERR_AUDIO_NO_FREE_OUTPUT_STREAMS (-6602) +/** Pending stream disable operation in progress. */ +#define VERR_AUDIO_STREAM_PENDING_DISABLE (-6603) +/** There is more data available. + * This can happen due to a buffer wraparound of a buffer read/write operation. */ +#define VINF_AUDIO_MORE_DATA_AVAILABLE (6604) +/** @} */ + + +/** @name APIC Status Codes + * @{ + */ +/** No pending interrupt. */ +#define VERR_APIC_INTR_NOT_PENDING (-6700) +/** Pending interrupt is masked by TPR. */ +#define VERR_APIC_INTR_MASKED_BY_TPR (-6701) +/** APIC did not accept the interrupt. */ +#define VERR_APIC_INTR_DISCARDED (-6702) +/** @} */ + +/* SED-END */ + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/hgcmsvc.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/hgcmsvc.h @@ -0,0 +1,423 @@ +/** @file + * Host-Guest Communication Manager (HGCM) - Service library definitions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_hgcm_h +#define ___VBox_hgcm_h + +#include +#include +#include +#include +#include +#ifdef VBOX_TEST_HGCM_PARMS +# include +#endif + +/** @todo proper comments. */ + +/** + * Service interface version. + * + * Includes layout of both VBOXHGCMSVCFNTABLE and VBOXHGCMSVCHELPERS. + * + * A service can work with these structures if major version + * is equal and minor version of service is <= version of the + * structures. + * + * For example when a new helper is added at the end of helpers + * structure, then the minor version will be increased. All older + * services still can work because they have their old helpers + * unchanged. + * + * Revision history. + * 1.1->2.1 Because the pfnConnect now also has the pvClient parameter. + * 2.1->2.2 Because pfnSaveState and pfnLoadState were added + * 2.2->3.1 Because pfnHostCall is now synchronous, returns rc, and parameters were changed + * 3.1->3.2 Because pfnRegisterExtension was added + * 3.2->3.3 Because pfnDisconnectClient helper was added + * 3.3->4.1 Because the pvService entry and parameter was added + * 4.1->4.2 Because the VBOX_HGCM_SVC_PARM_CALLBACK parameter type was added + * 4.2->5.1 Removed the VBOX_HGCM_SVC_PARM_CALLBACK parameter type, as + * this problem is already solved by service extension callbacks + */ +#define VBOX_HGCM_SVC_VERSION_MAJOR (0x0005) +#define VBOX_HGCM_SVC_VERSION_MINOR (0x0001) +#define VBOX_HGCM_SVC_VERSION ((VBOX_HGCM_SVC_VERSION_MAJOR << 16) + VBOX_HGCM_SVC_VERSION_MINOR) + + +/** Typed pointer to distinguish a call to service. */ +struct VBOXHGCMCALLHANDLE_TYPEDEF; +typedef struct VBOXHGCMCALLHANDLE_TYPEDEF *VBOXHGCMCALLHANDLE; + +/** Service helpers pointers table. */ +typedef struct VBOXHGCMSVCHELPERS +{ + /** The service has processed the Call request. */ + DECLR3CALLBACKMEMBER(void, pfnCallComplete, (VBOXHGCMCALLHANDLE callHandle, int32_t rc)); + + void *pvInstance; + + /** The service disconnects the client. */ + DECLR3CALLBACKMEMBER(void, pfnDisconnectClient, (void *pvInstance, uint32_t u32ClientID)); +} VBOXHGCMSVCHELPERS; + +typedef VBOXHGCMSVCHELPERS *PVBOXHGCMSVCHELPERS; + + +#define VBOX_HGCM_SVC_PARM_INVALID (0U) +#define VBOX_HGCM_SVC_PARM_32BIT (1U) +#define VBOX_HGCM_SVC_PARM_64BIT (2U) +#define VBOX_HGCM_SVC_PARM_PTR (3U) + +typedef struct VBOXHGCMSVCPARM +{ + /** VBOX_HGCM_SVC_PARM_* values. */ + uint32_t type; + + union + { + uint32_t uint32; + uint64_t uint64; + struct + { + uint32_t size; + void *addr; + } pointer; + } u; +#ifdef __cplusplus + /** Extract an uint32_t value from an HGCM parameter structure */ + int getUInt32(uint32_t *u32) + { + AssertPtrReturn(u32, VERR_INVALID_POINTER); + int rc = VINF_SUCCESS; + if (type != VBOX_HGCM_SVC_PARM_32BIT) + rc = VERR_INVALID_PARAMETER; + if (RT_SUCCESS(rc)) + *u32 = u.uint32; + return rc; + } + + /** Extract a uint64_t value from an HGCM parameter structure */ + int getUInt64(uint64_t *u64) + { + AssertPtrReturn(u64, VERR_INVALID_POINTER); + int rc = VINF_SUCCESS; + if (type != VBOX_HGCM_SVC_PARM_64BIT) + rc = VERR_INVALID_PARAMETER; + if (RT_SUCCESS(rc)) + *u64 = u.uint64; + return rc; + } + + /** Extract a pointer value from an HGCM parameter structure */ + int getPointer(void **ppv, uint32_t *pcb) + { + AssertPtrReturn(ppv, VERR_INVALID_POINTER); + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + if (type == VBOX_HGCM_SVC_PARM_PTR) + { + *ppv = u.pointer.addr; + *pcb = u.pointer.size; + return VINF_SUCCESS; + } + + return VERR_INVALID_PARAMETER; + } + + /** Extract a constant pointer value from an HGCM parameter structure */ + int getPointer(const void **ppcv, uint32_t *pcb) + { + AssertPtrReturn(ppcv, VERR_INVALID_POINTER); + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + void *pv; + int rc = getPointer(&pv, pcb); + *ppcv = pv; + return rc; + } + + /** Extract a pointer value to a non-empty buffer from an HGCM parameter + * structure */ + int getBuffer(void **ppv, uint32_t *pcb) + { + AssertPtrReturn(ppv, VERR_INVALID_POINTER); + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + void *pv = NULL; + uint32_t cb = 0; + int rc = getPointer(&pv, &cb); + if ( RT_SUCCESS(rc) + && VALID_PTR(pv) + && cb > 0) + { + *ppv = pv; + *pcb = cb; + return VINF_SUCCESS; + } + + return VERR_INVALID_PARAMETER; + } + + /** Extract a pointer value to a non-empty constant buffer from an HGCM + * parameter structure */ + int getBuffer(const void **ppcv, uint32_t *pcb) + { + AssertPtrReturn(ppcv, VERR_INVALID_POINTER); + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + void *pcv = NULL; + int rc = getBuffer(&pcv, pcb); + *ppcv = pcv; + return rc; + } + + /** Extract a string value from an HGCM parameter structure */ + int getString(char **ppch, uint32_t *pcb) + { + uint32_t cb = 0; + char *pch = NULL; + int rc = getBuffer((void **)&pch, &cb); + if (RT_FAILURE(rc)) + { + *ppch = NULL; + *pcb = 0; + return rc; + } + rc = RTStrValidateEncodingEx(pch, cb, + RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED); + *ppch = pch; + *pcb = cb; + return rc; + } + + /** Extract a constant string value from an HGCM parameter structure */ + int getString(const char **ppch, uint32_t *pcb) + { + char *pch = NULL; + int rc = getString(&pch, pcb); + *ppch = pch; + return rc; + } + + /** Set a uint32_t value to an HGCM parameter structure */ + void setUInt32(uint32_t u32) + { + type = VBOX_HGCM_SVC_PARM_32BIT; + u.uint32 = u32; + } + + /** Set a uint64_t value to an HGCM parameter structure */ + void setUInt64(uint64_t u64) + { + type = VBOX_HGCM_SVC_PARM_64BIT; + u.uint64 = u64; + } + + /** Set a pointer value to an HGCM parameter structure */ + void setPointer(void *pv, uint32_t cb) + { + type = VBOX_HGCM_SVC_PARM_PTR; + u.pointer.addr = pv; + u.pointer.size = cb; + } + + /** Set a const string value to an HGCM parameter structure */ + void setString(const char *psz) + { + type = VBOX_HGCM_SVC_PARM_PTR; + u.pointer.addr = (void *)psz; + u.pointer.size = (uint32_t)strlen(psz) + 1; + } + +#ifdef ___iprt_cpp_ministring_h + /** Set a const string value to an HGCM parameter structure */ + void setCppString(const RTCString &rString) + { + type = VBOX_HGCM_SVC_PARM_PTR; + u.pointer.addr = (void *)rString.c_str(); + u.pointer.size = (uint32_t)rString.length() + 1; + } +#endif + +#ifdef VBOX_TEST_HGCM_PARMS + /** Test the getString member function. Indirectly tests the getPointer + * and getBuffer APIs. + * @param hTest an running IPRT test + * @param aType the type that the parameter should be set to before + * calling getString + * @param apcc the value that the parameter should be set to before + * calling getString, and also the address (!) which we + * expect getString to return. Stricter than needed of + * course, but I was feeling lazy. + * @param acb the size that the parameter should be set to before + * calling getString, and also the size which we expect + * getString to return. + * @param rcExp the expected return value of the call to getString. + */ + void doTestGetString(RTTEST hTest, uint32_t aType, const char *apcc, + uint32_t acb, int rcExp) + { + /* An RTTest API like this, which would print out an additional line + * of context if a test failed, would be nice. This is because the + * line number alone doesn't help much here, given that this is a + * subroutine called many times. */ + /* + RTTestContextF(hTest, + ("doTestGetString, aType=%u, apcc=%p, acp=%u, rcExp=%Rrc", + aType, apcc, acp, rcExp)); + */ + setPointer((void *)apcc, acb); + type = aType; /* in case we don't want VBOX_HGCM_SVC_PARM_PTR */ + const char *pcc = NULL; + uint32_t cb = 0; + int rc = getString(&pcc, &cb); + RTTEST_CHECK_RC(hTest, rc, rcExp); + if (RT_SUCCESS(rcExp)) + { + RTTEST_CHECK_MSG_RETV(hTest, (pcc == apcc), + (hTest, "expected %p, got %p", apcc, pcc)); + RTTEST_CHECK_MSG_RETV(hTest, (cb == acb), + (hTest, "expected %u, got %u", acb, cb)); + } + } + + /** Run some unit tests on the getString method and indirectly test + * getPointer and getBuffer as well. */ + void testGetString(RTTEST hTest) + { + RTTestSub(hTest, "HGCM string parameter handling"); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_32BIT, "test", 3, + VERR_INVALID_PARAMETER); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_PTR, "test", 5, + VINF_SUCCESS); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_PTR, "test", 3, + VERR_BUFFER_OVERFLOW); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_PTR, "test\xf0", 6, + VERR_INVALID_UTF8_ENCODING); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_PTR, "test", 0, + VERR_INVALID_PARAMETER); + doTestGetString(hTest, VBOX_HGCM_SVC_PARM_PTR, (const char *)0x1, 5, + VERR_INVALID_PARAMETER); + RTTestSubDone(hTest); + } +#endif + + VBOXHGCMSVCPARM() : type(VBOX_HGCM_SVC_PARM_INVALID) {} +#endif +} VBOXHGCMSVCPARM; + +typedef VBOXHGCMSVCPARM *PVBOXHGCMSVCPARM; + +#ifdef VBOX_WITH_CRHGSMI +typedef void * HGCMCVSHANDLE; + +typedef DECLCALLBACK(void) HGCMHOSTFASTCALLCB (int32_t result, uint32_t u32Function, PVBOXHGCMSVCPARM pParam, void *pvContext); +typedef HGCMHOSTFASTCALLCB *PHGCMHOSTFASTCALLCB; +#endif + + +/** Service specific extension callback. + * This callback is called by the service to perform service specific operation. + * + * @param pvExtension The extension pointer. + * @param u32Function What the callback is supposed to do. + * @param pvParm The function parameters. + * @param cbParm The size of the function parameters. + */ +typedef DECLCALLBACK(int) FNHGCMSVCEXT(void *pvExtension, uint32_t u32Function, void *pvParm, uint32_t cbParms); +typedef FNHGCMSVCEXT *PFNHGCMSVCEXT; + +/** The Service DLL entry points. + * + * HGCM will call the DLL "VBoxHGCMSvcLoad" + * function and the DLL must fill in the VBOXHGCMSVCFNTABLE + * with function pointers. + */ + +/* The structure is used in separately compiled binaries so an explicit packing is required. */ +#pragma pack(1) /** @todo r=bird: The pragma pack(1) is not at all required!! */ +typedef struct VBOXHGCMSVCFNTABLE +{ + /** @name Filled by HGCM + * @{ */ + + /** Size of the structure. */ + uint32_t cbSize; + + /** Version of the structure, including the helpers. */ + uint32_t u32Version; + + PVBOXHGCMSVCHELPERS pHelpers; + /** @} */ + + /** @name Filled in by the service. + * @{ */ + + /** Size of client information the service want to have. */ + uint32_t cbClient; +#if ARCH_BITS == 64 + /** Ensure that the following pointers are properly aligned on 64-bit system. */ + uint32_t u32Alignment0; +#endif + + /** Uninitialize service */ + DECLR3CALLBACKMEMBER(int, pfnUnload, (void *pvService)); + + /** Inform the service about a client connection. */ + DECLR3CALLBACKMEMBER(int, pfnConnect, (void *pvService, uint32_t u32ClientID, void *pvClient)); + + /** Inform the service that the client wants to disconnect. */ + DECLR3CALLBACKMEMBER(int, pfnDisconnect, (void *pvService, uint32_t u32ClientID, void *pvClient)); + + /** Service entry point. + * Return code is passed to pfnCallComplete callback. + */ + DECLR3CALLBACKMEMBER(void, pfnCall, (void *pvService, VBOXHGCMCALLHANDLE callHandle, uint32_t u32ClientID, void *pvClient, uint32_t function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])); + + /** Host Service entry point meant for privileged features invisible to the guest. + * Return code is passed to pfnCallComplete callback. + */ + DECLR3CALLBACKMEMBER(int, pfnHostCall, (void *pvService, uint32_t function, uint32_t cParms, VBOXHGCMSVCPARM paParms[])); + + /** Inform the service about a VM save operation. */ + DECLR3CALLBACKMEMBER(int, pfnSaveState, (void *pvService, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM)); + + /** Inform the service about a VM load operation. */ + DECLR3CALLBACKMEMBER(int, pfnLoadState, (void *pvService, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM)); + + /** Register a service extension callback. */ + DECLR3CALLBACKMEMBER(int, pfnRegisterExtension, (void *pvService, PFNHGCMSVCEXT pfnExtension, void *pvExtension)); + + /** User/instance data pointer for the service. */ + void *pvService; + + /** @} */ +} VBOXHGCMSVCFNTABLE; +#pragma pack() + + +/** Service initialization entry point. */ +typedef DECLCALLBACK(int) VBOXHGCMSVCLOAD(VBOXHGCMSVCFNTABLE *ptable); +typedef VBOXHGCMSVCLOAD *PFNVBOXHGCMSVCLOAD; +#define VBOX_HGCM_SVCLOAD_NAME "VBoxHGCMSvcLoad" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/log.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/log.h @@ -0,0 +1,1208 @@ +/** @file + * VirtualBox - Logging. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_log_h +#define ___VBox_log_h + +/* + * Set the default loggroup. + */ +#ifndef LOG_GROUP +# define LOG_GROUP LOG_GROUP_DEFAULT +#endif + +#include + + +/** @defgroup grp_rt_vbox_log VBox Logging + * @ingroup grp_rt_vbox + * @{ + */ + +/** PC port for debug output */ +#define RTLOG_DEBUG_PORT 0x504 + +/** + * VirtualBox Logging Groups. + * (Remember to update LOGGROUP_NAMES!) + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ + */ +typedef enum LOGGROUP +{ + /** The default VBox group. */ + LOG_GROUP_DEFAULT = RTLOGGROUP_FIRST_USER, + /** Audio mixer group. */ + LOG_GROUP_AUDIO_MIXER, + /** Audio mixer buffer group. */ + LOG_GROUP_AUDIO_MIXER_BUFFER, + /** Auto-logon group. */ + LOG_GROUP_AUTOLOGON, + /** CFGM group. */ + LOG_GROUP_CFGM, + /** CPUM group. */ + LOG_GROUP_CPUM, + /** CSAM group. */ + LOG_GROUP_CSAM, + /** Debug Console group. */ + LOG_GROUP_DBGC, + /** DBGF group. */ + LOG_GROUP_DBGF, + /** DBGF info group. */ + LOG_GROUP_DBGF_INFO, + /** The debugger gui. */ + LOG_GROUP_DBGG, + /** Generic Device group. */ + LOG_GROUP_DEV, + /** AC97 Device group. */ + LOG_GROUP_DEV_AC97, + /** ACPI Device group. */ + LOG_GROUP_DEV_ACPI, + /** AHCI Device group. */ + LOG_GROUP_DEV_AHCI, + /** APIC Device group. */ + LOG_GROUP_DEV_APIC, + /** BusLogic SCSI host adapter group. */ + LOG_GROUP_DEV_BUSLOGIC, + /** DMA Controller group. */ + LOG_GROUP_DEV_DMA, + /** Gigabit Ethernet Device group. */ + LOG_GROUP_DEV_E1000, + /** Extensible Firmware Interface Device group. */ + LOG_GROUP_DEV_EFI, + /** USB EHCI Device group. */ + LOG_GROUP_DEV_EHCI, + /** Floppy Controller Device group. */ + LOG_GROUP_DEV_FDC, + /** Guest Interface Manager Device group. */ + LOG_GROUP_DEV_GIM, + /** HDA Device group. */ + LOG_GROUP_DEV_HDA, + /** HDA Codec Device group. */ + LOG_GROUP_DEV_HDA_CODEC, + /** High Precision Event Timer Device group. */ + LOG_GROUP_DEV_HPET, + /** IDE Device group. */ + LOG_GROUP_DEV_IDE, + /** I/O APIC Device group. */ + LOG_GROUP_DEV_IOAPIC, + /** The internal networking IP stack Device group. */ + LOG_GROUP_DEV_INIP, + /** KeyBoard Controller Device group. */ + LOG_GROUP_DEV_KBD, + /** Low Pin Count Device group. */ + LOG_GROUP_DEV_LPC, + /** LsiLogic SCSI controller Device group. */ + LOG_GROUP_DEV_LSILOGICSCSI, + /** NVMe Device group. */ + LOG_GROUP_DEV_NVME, + /** USB OHCI Device group. */ + LOG_GROUP_DEV_OHCI, + /** Parallel Device group */ + LOG_GROUP_DEV_PARALLEL, + /** PC Device group. */ + LOG_GROUP_DEV_PC, + /** PC Architecture Device group. */ + LOG_GROUP_DEV_PC_ARCH, + /** PC BIOS Device group. */ + LOG_GROUP_DEV_PC_BIOS, + /** PCI Device group. */ + LOG_GROUP_DEV_PCI, + /** PCI Raw Device group. */ + LOG_GROUP_DEV_PCI_RAW, + /** PCNet Device group. */ + LOG_GROUP_DEV_PCNET, + /** PIC Device group. */ + LOG_GROUP_DEV_PIC, + /** PIT Device group. */ + LOG_GROUP_DEV_PIT, + /** RTC Device group. */ + LOG_GROUP_DEV_RTC, + /** SB16 Device group. */ + LOG_GROUP_DEV_SB16, + /** Serial Device group */ + LOG_GROUP_DEV_SERIAL, + /** System Management Controller Device group. */ + LOG_GROUP_DEV_SMC, + /** VGA Device group. */ + LOG_GROUP_DEV_VGA, + /** Virtio PCI Device group. */ + LOG_GROUP_DEV_VIRTIO, + /** Virtio Network Device group. */ + LOG_GROUP_DEV_VIRTIO_NET, + /** VMM Device group. */ + LOG_GROUP_DEV_VMM, + /** VMM Device group for backdoor logging. */ + LOG_GROUP_DEV_VMM_BACKDOOR, + /** VMM Device group for logging guest backdoor logging to stderr. */ + LOG_GROUP_DEV_VMM_STDERR, + /** VMSVGA Device group. */ + LOG_GROUP_DEV_VMSVGA, + /** USB xHCI Device group. */ + LOG_GROUP_DEV_XHCI, + /** Disassembler group. */ + LOG_GROUP_DIS, + /** Generic driver group. */ + LOG_GROUP_DRV, + /** ACPI driver group */ + LOG_GROUP_DRV_ACPI, + /** Audio driver group */ + LOG_GROUP_DRV_AUDIO, + /** Block driver group. */ + LOG_GROUP_DRV_BLOCK, + /** Char driver group. */ + LOG_GROUP_DRV_CHAR, + /** Disk integrity driver group. */ + LOG_GROUP_DRV_DISK_INTEGRITY, + /** Video Display driver group. */ + LOG_GROUP_DRV_DISPLAY, + /** Floppy media driver group. */ + LOG_GROUP_DRV_FLOPPY, + /** Host Audio driver group. */ + LOG_GROUP_DRV_HOST_AUDIO, + /** Host Base block driver group. */ + LOG_GROUP_DRV_HOST_BASE, + /** Host DVD block driver group. */ + LOG_GROUP_DRV_HOST_DVD, + /** Host floppy block driver group. */ + LOG_GROUP_DRV_HOST_FLOPPY, + /** Host Parallel Driver group */ + LOG_GROUP_DRV_HOST_PARALLEL, + /** Host Serial Driver Group */ + LOG_GROUP_DRV_HOST_SERIAL, + /** The internal networking transport driver group. */ + LOG_GROUP_DRV_INTNET, + /** ISO (CD/DVD) media driver group. */ + LOG_GROUP_DRV_ISO, + /** Keyboard Queue driver group. */ + LOG_GROUP_DRV_KBD_QUEUE, + /** lwIP IP stack driver group. */ + LOG_GROUP_DRV_LWIP, + /** Video Miniport driver group. */ + LOG_GROUP_DRV_MINIPORT, + /** Mouse driver group. */ + LOG_GROUP_DRV_MOUSE, + /** Mouse Queue driver group. */ + LOG_GROUP_DRV_MOUSE_QUEUE, + /** Named Pipe stream driver group. */ + LOG_GROUP_DRV_NAMEDPIPE, + /** NAT network transport driver group */ + LOG_GROUP_DRV_NAT, + /** Raw image driver group */ + LOG_GROUP_DRV_RAW_IMAGE, + /** SCSI driver group. */ + LOG_GROUP_DRV_SCSI, + /** Host SCSI driver group. */ + LOG_GROUP_DRV_SCSIHOST, + /** TCP socket stream driver group. */ + LOG_GROUP_DRV_TCP, + /** Async transport driver group */ + LOG_GROUP_DRV_TRANSPORT_ASYNC, + /** TUN network transport driver group */ + LOG_GROUP_DRV_TUN, + /** UDP socket stream driver group. */ + LOG_GROUP_DRV_UDP, + /** UDP tunnet network transport driver group. */ + LOG_GROUP_DRV_UDPTUNNEL, + /** USB Proxy driver group. */ + LOG_GROUP_DRV_USBPROXY, + /** VBoxHDD media driver group. */ + LOG_GROUP_DRV_VBOXHDD, + /** VBox HDD container media driver group. */ + LOG_GROUP_DRV_VD, + /** VRDE audio driver group. */ + LOG_GROUP_DRV_VRDE_AUDIO, + /** Virtual Switch transport driver group */ + LOG_GROUP_DRV_VSWITCH, + /** VUSB driver group */ + LOG_GROUP_DRV_VUSB, + /** EM group. */ + LOG_GROUP_EM, + /** FTM group. */ + LOG_GROUP_FTM, + /** GIM group. */ + LOG_GROUP_GIM, + /** GMM group. */ + LOG_GROUP_GMM, + /** Guest control. */ + LOG_GROUP_GUEST_CONTROL, + /** Guest drag'n drop. */ + LOG_GROUP_GUEST_DND, + /** GUI group. */ + LOG_GROUP_GUI, + /** GVMM group. */ + LOG_GROUP_GVMM, + /** HGCM group */ + LOG_GROUP_HGCM, + /** HGSMI group */ + LOG_GROUP_HGSMI, + /** HM group. */ + LOG_GROUP_HM, + /** IEM group. */ + LOG_GROUP_IEM, + /** I/O buffer management group. */ + LOG_GROUP_IOBUFMGMT, + /** IOM group. */ + LOG_GROUP_IOM, + /** XPCOM IPC group. */ + LOG_GROUP_IPC, + /** lwIP group. */ + LOG_GROUP_LWIP, + /** lwIP group, api_lib.c API_LIB_DEBUG */ + LOG_GROUP_LWIP_API_LIB, + /** lwIP group, api_msg.c API_MSG_DEBUG */ + LOG_GROUP_LWIP_API_MSG, + /** lwIP group, etharp.c ETHARP_DEBUG */ + LOG_GROUP_LWIP_ETHARP, + /** lwIP group, icmp.c ICMP_DEBUG */ + LOG_GROUP_LWIP_ICMP, + /** lwIP group, igmp.c IGMP_DEBUG */ + LOG_GROUP_LWIP_IGMP, + /** lwIP group, inet.c INET_DEBUG */ + LOG_GROUP_LWIP_INET, + /** lwIP group, IP_DEBUG (sic!) */ + LOG_GROUP_LWIP_IP4, + /** lwIP group, ip_frag.c IP_REASS_DEBUG (sic!) */ + LOG_GROUP_LWIP_IP4_REASS, + /** lwIP group, IP6_DEBUG */ + LOG_GROUP_LWIP_IP6, + /** lwIP group, mem.c MEM_DEBUG */ + LOG_GROUP_LWIP_MEM, + /** lwIP group, memp.c MEMP_DEBUG */ + LOG_GROUP_LWIP_MEMP, + /** lwIP group, netif.c NETIF_DEBUG */ + LOG_GROUP_LWIP_NETIF, + /** lwIP group, pbuf.c PBUF_DEBUG */ + LOG_GROUP_LWIP_PBUF, + /** lwIP group, raw.c RAW_DEBUG */ + LOG_GROUP_LWIP_RAW, + /** lwIP group, sockets.c SOCKETS_DEBUG */ + LOG_GROUP_LWIP_SOCKETS, + /** lwIP group, SYS_DEBUG */ + LOG_GROUP_LWIP_SYS, + /** lwIP group, TCP_DEBUG */ + LOG_GROUP_LWIP_TCP, + /** lwIP group, tcpip.c TCPIP_DEBUG */ + LOG_GROUP_LWIP_TCPIP, + /** lwIP group, TCP_CWND_DEBUG (congestion window) */ + LOG_GROUP_LWIP_TCP_CWND, + /** lwIP group, tcp_in.c TCP_FR_DEBUG (fast retransmit) */ + LOG_GROUP_LWIP_TCP_FR, + /** lwIP group, tcp_in.c TCP_INPUT_DEBUG */ + LOG_GROUP_LWIP_TCP_INPUT, + /** lwIP group, tcp_out.c TCP_OUTPUT_DEBUG */ + LOG_GROUP_LWIP_TCP_OUTPUT, + /** lwIP group, TCP_QLEN_DEBUG */ + LOG_GROUP_LWIP_TCP_QLEN, + /** lwIP group, TCP_RST_DEBUG */ + LOG_GROUP_LWIP_TCP_RST, + /** lwIP group, TCP_RTO_DEBUG (retransmit) */ + LOG_GROUP_LWIP_TCP_RTO, + /** lwIP group, tcp_in.c TCP_WND_DEBUG (window updates) */ + LOG_GROUP_LWIP_TCP_WND, + /** lwIP group, timers.c TIMERS_DEBUG */ + LOG_GROUP_LWIP_TIMERS, + /** lwIP group, udp.c UDP_DEBUG */ + LOG_GROUP_LWIP_UDP, + /** Main group. */ + LOG_GROUP_MAIN, + /** Main group, IAdditionsFacility. */ + LOG_GROUP_MAIN_ADDITIONSFACILITY, + /** Main group, IAdditionsStateChangedEvent. */ + LOG_GROUP_MAIN_ADDITIONSSTATECHANGEDEVENT, + /** Main group, IAppliance. */ + LOG_GROUP_MAIN_APPLIANCE, + /** Main group, IAudioAdapter. */ + LOG_GROUP_MAIN_AUDIOADAPTER, + /** Main group, IAudioAdapterChangedEvent. */ + LOG_GROUP_MAIN_AUDIOADAPTERCHANGEDEVENT, + /** Main group, IBandwidthControl. */ + LOG_GROUP_MAIN_BANDWIDTHCONTROL, + /** Main group, IBandwidthGroup. */ + LOG_GROUP_MAIN_BANDWIDTHGROUP, + /** Main group, IBandwidthGroupChangedEvent. */ + LOG_GROUP_MAIN_BANDWIDTHGROUPCHANGEDEVENT, + /** Main group, IBIOSSettings. */ + LOG_GROUP_MAIN_BIOSSETTINGS, + /** Main group, ICanShowWindowEvent. */ + LOG_GROUP_MAIN_CANSHOWWINDOWEVENT, + /** Main group, ICertificate. */ + LOG_GROUP_MAIN_CERTIFICATE, + /** Main group, IClipboardModeChangedEvent. */ + LOG_GROUP_MAIN_CLIPBOARDMODECHANGEDEVENT, + /** Main group, IConsole. */ + LOG_GROUP_MAIN_CONSOLE, + /** Main group, ICPUChangedEvent. */ + LOG_GROUP_MAIN_CPUCHANGEDEVENT, + /** Main group, ICPUExecutionCapChangedEvent. */ + LOG_GROUP_MAIN_CPUEXECUTIONCAPCHANGEDEVENT, + /** Main group, IDHCPServer. */ + LOG_GROUP_MAIN_DHCPSERVER, + /** Main group, IDirectory. */ + LOG_GROUP_MAIN_DIRECTORY, + /** Main group, IDisplay. */ + LOG_GROUP_MAIN_DISPLAY, + /** Main group, IDisplaySourceBitmap. */ + LOG_GROUP_MAIN_DISPLAYSOURCEBITMAP, + /** Main group, IDnDBase. */ + LOG_GROUP_MAIN_DNDBASE, + /** Main group, IDnDModeChangedEvent. */ + LOG_GROUP_MAIN_DNDMODECHANGEDEVENT, + /** Main group, IDnDSource. */ + LOG_GROUP_MAIN_DNDSOURCE, + /** Main group, IDnDTarget. */ + LOG_GROUP_MAIN_DNDTARGET, + /** Main group, IEmulatedUSB. */ + LOG_GROUP_MAIN_EMULATEDUSB, + /** Main group, IEvent. */ + LOG_GROUP_MAIN_EVENT, + /** Main group, IEventListener. */ + LOG_GROUP_MAIN_EVENTLISTENER, + /** Main group, IEventSource. */ + LOG_GROUP_MAIN_EVENTSOURCE, + /** Main group, IEventSourceChangedEvent. */ + LOG_GROUP_MAIN_EVENTSOURCECHANGEDEVENT, + /** Main group, IExtPack. */ + LOG_GROUP_MAIN_EXTPACK, + /** Main group, IExtPackBase. */ + LOG_GROUP_MAIN_EXTPACKBASE, + /** Main group, IExtPackFile. */ + LOG_GROUP_MAIN_EXTPACKFILE, + /** Main group, IExtPackManager. */ + LOG_GROUP_MAIN_EXTPACKMANAGER, + /** Main group, IExtPackPlugIn. */ + LOG_GROUP_MAIN_EXTPACKPLUGIN, + /** Main group, IExtraDataCanChangeEvent. */ + LOG_GROUP_MAIN_EXTRADATACANCHANGEEVENT, + /** Main group, IExtraDataChangedEvent. */ + LOG_GROUP_MAIN_EXTRADATACHANGEDEVENT, + /** Main group, IFile. */ + LOG_GROUP_MAIN_FILE, + /** Main group, IFramebuffer. */ + LOG_GROUP_MAIN_FRAMEBUFFER, + /** Main group, IFramebufferOverlay. */ + LOG_GROUP_MAIN_FRAMEBUFFEROVERLAY, + /** Main group, IFsObjInfo. */ + LOG_GROUP_MAIN_FSOBJINFO, + /** Main group, IGuest. */ + LOG_GROUP_MAIN_GUEST, + /** Main group, IGuestDirectory. */ + LOG_GROUP_MAIN_GUESTDIRECTORY, + /** Main group, IGuestDnDSource. */ + LOG_GROUP_MAIN_GUESTDNDSOURCE, + /** Main group, IGuestDnDTarget. */ + LOG_GROUP_MAIN_GUESTDNDTARGET, + /** Main group, IGuestErrorInfo. */ + LOG_GROUP_MAIN_GUESTERRORINFO, + /** Main group, IGuestFile. */ + LOG_GROUP_MAIN_GUESTFILE, + /** Main group, IGuestFileEvent. */ + LOG_GROUP_MAIN_GUESTFILEEVENT, + /** Main group, IGuestFileIOEvent. */ + LOG_GROUP_MAIN_GUESTFILEIOEVENT, + /** Main group, IGuestFileOffsetChangedEvent. */ + LOG_GROUP_MAIN_GUESTFILEOFFSETCHANGEDEVENT, + /** Main group, IGuestFileReadEvent. */ + LOG_GROUP_MAIN_GUESTFILEREADEVENT, + /** Main group, IGuestFileRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTFILEREGISTEREDEVENT, + /** Main group, IGuestFileStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTFILESTATECHANGEDEVENT, + /** Main group, IGuestFileWriteEvent. */ + LOG_GROUP_MAIN_GUESTFILEWRITEEVENT, + /** Main group, IGuestFsObjInfo. */ + LOG_GROUP_MAIN_GUESTFSOBJINFO, + /** Main group, IGuestKeyboardEvent. */ + LOG_GROUP_MAIN_GUESTKEYBOARDEVENT, + /** Main group, IGuestMonitorChangedEvent. */ + LOG_GROUP_MAIN_GUESTMONITORCHANGEDEVENT, + /** Main group, IGuestMouseEvent. */ + LOG_GROUP_MAIN_GUESTMOUSEEVENT, + /** Main group, IGuestMultiTouchEvent. */ + LOG_GROUP_MAIN_GUESTMULTITOUCHEVENT, + /** Main group, IGuestOSType. */ + LOG_GROUP_MAIN_GUESTOSTYPE, + /** Main group, IGuestProcess. */ + LOG_GROUP_MAIN_GUESTPROCESS, + /** Main group, IGuestProcessEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSEVENT, + /** Main group, IGuestProcessInputNotifyEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSINPUTNOTIFYEVENT, + /** Main group, IGuestProcessIOEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSIOEVENT, + /** Main group, IGuestProcessOutputEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSOUTPUTEVENT, + /** Main group, IGuestProcessRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSREGISTEREDEVENT, + /** Main group, IGuestProcessStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTPROCESSSTATECHANGEDEVENT, + /** Main group, IGuestPropertyChangedEvent. */ + LOG_GROUP_MAIN_GUESTPROPERTYCHANGEDEVENT, + /** Main group, IGuestScreenInfo. */ + LOG_GROUP_MAIN_GUESTSCREENINFO, + /** Main group, IGuestSession. */ + LOG_GROUP_MAIN_GUESTSESSION, + /** Main group, IGuestSessionEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONEVENT, + /** Main group, IGuestSessionRegisteredEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONREGISTEREDEVENT, + /** Main group, IGuestSessionStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTSESSIONSTATECHANGEDEVENT, + /** Main group, IGuestUserStateChangedEvent. */ + LOG_GROUP_MAIN_GUESTUSERSTATECHANGEDEVENT, + /** Main group, IHost. */ + LOG_GROUP_MAIN_HOST, + /** Main group, IHostNameResolutionConfigurationChangeEvent. */ + LOG_GROUP_MAIN_HOSTNAMERESOLUTIONCONFIGURATIONCHANGEEVENT, + /** Main group, IHostNetworkInterface. */ + LOG_GROUP_MAIN_HOSTNETWORKINTERFACE, + /** Main group, IHostPCIDevicePlugEvent. */ + LOG_GROUP_MAIN_HOSTPCIDEVICEPLUGEVENT, + /** Main group, IHostUSBDevice. */ + LOG_GROUP_MAIN_HOSTUSBDEVICE, + /** Main group, IHostUSBDeviceFilter. */ + LOG_GROUP_MAIN_HOSTUSBDEVICEFILTER, + /** Main group, IHostVideoInputDevice. */ + LOG_GROUP_MAIN_HOSTVIDEOINPUTDEVICE, + /** Main group, IInternalMachineControl. */ + LOG_GROUP_MAIN_INTERNALMACHINECONTROL, + /** Main group, IInternalSessionControl. */ + LOG_GROUP_MAIN_INTERNALSESSIONCONTROL, + /** Main group, IKeyboard. */ + LOG_GROUP_MAIN_KEYBOARD, + /** Main group, IKeyboardLedsChangedEvent. */ + LOG_GROUP_MAIN_KEYBOARDLEDSCHANGEDEVENT, + /** Main group, IMachine. */ + LOG_GROUP_MAIN_MACHINE, + /** Main group, IMachineDataChangedEvent. */ + LOG_GROUP_MAIN_MACHINEDATACHANGEDEVENT, + /** Main group, IMachineDebugger. */ + LOG_GROUP_MAIN_MACHINEDEBUGGER, + /** Main group, IMachineEvent. */ + LOG_GROUP_MAIN_MACHINEEVENT, + /** Main group, IMachineRegisteredEvent. */ + LOG_GROUP_MAIN_MACHINEREGISTEREDEVENT, + /** Main group, IMachineStateChangedEvent. */ + LOG_GROUP_MAIN_MACHINESTATECHANGEDEVENT, + /** Main group, IMedium. */ + LOG_GROUP_MAIN_MEDIUM, + /** Main group, IMediumAttachment. */ + LOG_GROUP_MAIN_MEDIUMATTACHMENT, + /** Main group, IMediumChangedEvent. */ + LOG_GROUP_MAIN_MEDIUMCHANGEDEVENT, + /** Main group, IMediumConfigChangedEvent. */ + LOG_GROUP_MAIN_MEDIUMCONFIGCHANGEDEVENT, + /** Main group, IMediumFormat. */ + LOG_GROUP_MAIN_MEDIUMFORMAT, + /** Main group, IMediumRegisteredEvent. */ + LOG_GROUP_MAIN_MEDIUMREGISTEREDEVENT, + /** Main group, IMouse. */ + LOG_GROUP_MAIN_MOUSE, + /** Main group, IMouseCapabilityChangedEvent. */ + LOG_GROUP_MAIN_MOUSECAPABILITYCHANGEDEVENT, + /** Main group, IMousePointerShape. */ + LOG_GROUP_MAIN_MOUSEPOINTERSHAPE, + /** Main group, IMousePointerShapeChangedEvent. */ + LOG_GROUP_MAIN_MOUSEPOINTERSHAPECHANGEDEVENT, + /** Main group, INATEngine. */ + LOG_GROUP_MAIN_NATENGINE, + /** Main group, INATNetwork. */ + LOG_GROUP_MAIN_NATNETWORK, + /** Main group, INATNetworkAlterEvent. */ + LOG_GROUP_MAIN_NATNETWORKALTEREVENT, + /** Main group, INATNetworkChangedEvent. */ + LOG_GROUP_MAIN_NATNETWORKCHANGEDEVENT, + /** Main group, INATNetworkCreationDeletionEvent. */ + LOG_GROUP_MAIN_NATNETWORKCREATIONDELETIONEVENT, + /** Main group, INATNetworkPortForwardEvent. */ + LOG_GROUP_MAIN_NATNETWORKPORTFORWARDEVENT, + /** Main group, INATNetworkSettingEvent. */ + LOG_GROUP_MAIN_NATNETWORKSETTINGEVENT, + /** Main group, INATNetworkStartStopEvent. */ + LOG_GROUP_MAIN_NATNETWORKSTARTSTOPEVENT, + /** Main group, INATRedirectEvent. */ + LOG_GROUP_MAIN_NATREDIRECTEVENT, + /** Main group, INetworkAdapter. */ + LOG_GROUP_MAIN_NETWORKADAPTER, + /** Main group, INetworkAdapterChangedEvent. */ + LOG_GROUP_MAIN_NETWORKADAPTERCHANGEDEVENT, + /** Main group, IParallelPort. */ + LOG_GROUP_MAIN_PARALLELPORT, + /** Main group, IParallelPortChangedEvent. */ + LOG_GROUP_MAIN_PARALLELPORTCHANGEDEVENT, + /** Main group, IPCIAddress. */ + LOG_GROUP_MAIN_PCIADDRESS, + /** Main group, IPCIDeviceAttachment. */ + LOG_GROUP_MAIN_PCIDEVICEATTACHMENT, + /** Main group, IPerformanceCollector. */ + LOG_GROUP_MAIN_PERFORMANCECOLLECTOR, + /** Main group, IPerformanceMetric. */ + LOG_GROUP_MAIN_PERFORMANCEMETRIC, + /** Main group, IProcess. */ + LOG_GROUP_MAIN_PROCESS, + /** Main group, IProgress. */ + LOG_GROUP_MAIN_PROGRESS, + /** Main group, IProgressEvent. */ + LOG_GROUP_MAIN_PROGRESSEVENT, + /** Main group, IProgressPercentageChangedEvent. */ + LOG_GROUP_MAIN_PROGRESSPERCENTAGECHANGEDEVENT, + /** Main group, IProgressTaskCompletedEvent. */ + LOG_GROUP_MAIN_PROGRESSTASKCOMPLETEDEVENT, + /** Main group, IReusableEvent. */ + LOG_GROUP_MAIN_REUSABLEEVENT, + /** Main group, IRuntimeErrorEvent. */ + LOG_GROUP_MAIN_RUNTIMEERROREVENT, + /** Main group, ISerialPort. */ + LOG_GROUP_MAIN_SERIALPORT, + /** Main group, ISerialPortChangedEvent. */ + LOG_GROUP_MAIN_SERIALPORTCHANGEDEVENT, + /** Main group, ISession. */ + LOG_GROUP_MAIN_SESSION, + /** Main group, ISessionStateChangedEvent. */ + LOG_GROUP_MAIN_SESSIONSTATECHANGEDEVENT, + /** Main group, ISharedFolder. */ + LOG_GROUP_MAIN_SHAREDFOLDER, + /** Main group, ISharedFolderChangedEvent. */ + LOG_GROUP_MAIN_SHAREDFOLDERCHANGEDEVENT, + /** Main group, IShowWindowEvent. */ + LOG_GROUP_MAIN_SHOWWINDOWEVENT, + /** Main group, ISnapshot. */ + LOG_GROUP_MAIN_SNAPSHOT, + /** Main group, ISnapshotChangedEvent. */ + LOG_GROUP_MAIN_SNAPSHOTCHANGEDEVENT, + /** Main group, ISnapshotDeletedEvent. */ + LOG_GROUP_MAIN_SNAPSHOTDELETEDEVENT, + /** Main group, ISnapshotEvent. */ + LOG_GROUP_MAIN_SNAPSHOTEVENT, + /** Main group, ISnapshotTakenEvent. */ + LOG_GROUP_MAIN_SNAPSHOTRESTOREDEVENT, + /** Main group, ISnapshotRestoredEvent. */ + LOG_GROUP_MAIN_SNAPSHOTTAKENEVENT, + /** Main group, IStateChangedEvent. */ + LOG_GROUP_MAIN_STATECHANGEDEVENT, + /** Main group, IStorageController. */ + LOG_GROUP_MAIN_STORAGECONTROLLER, + /** Main group, IStorageControllerChangedEvent. */ + LOG_GROUP_MAIN_STORAGECONTROLLERCHANGEDEVENT, + /** Main group, IStorageDeviceChangedEvent. */ + LOG_GROUP_MAIN_STORAGEDEVICECHANGEDEVENT, + /** Main group, ISystemProperties. */ + LOG_GROUP_MAIN_SYSTEMPROPERTIES, + /** Main group, IToken. */ + LOG_GROUP_MAIN_TOKEN, + /** Main group, IUnattended. */ + LOG_GROUP_MAIN_UNATTENDED, + /** Main group, IUSBController. */ + LOG_GROUP_MAIN_USBCONTROLLER, + /** Main group, IUSBControllerChangedEvent. */ + LOG_GROUP_MAIN_USBCONTROLLERCHANGEDEVENT, + /** Main group, IUSBDevice. */ + LOG_GROUP_MAIN_USBDEVICE, + /** Main group, IUSBDeviceFilter. */ + LOG_GROUP_MAIN_USBDEVICEFILTER, + /** Main group, IUSBDeviceFilters. */ + LOG_GROUP_MAIN_USBDEVICEFILTERS, + /** Main group, IUSBDeviceStateChangedEvent. */ + LOG_GROUP_MAIN_USBDEVICESTATECHANGEDEVENT, + /** Main group, IUSBProxyBackend. */ + LOG_GROUP_MAIN_USBPROXYBACKEND, + /** Main group, IVBoxSVC. */ + LOG_GROUP_MAIN_VBOXSVC, + /** Main group, IVBoxSVCAvailabilityChangedEvent. */ + LOG_GROUP_MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT, + /** Main group, IVetoEvent. */ + LOG_GROUP_MAIN_VETOEVENT, + /** Main group, IVFSExplorer. */ + LOG_GROUP_MAIN_VFSEXPLORER, + /** Main group, IVideoCaptureChangedEvent. */ + LOG_GROUP_MAIN_VIDEOCAPTURECHANGEDEVENT, + /** Main group, IVirtualBox. */ + LOG_GROUP_MAIN_VIRTUALBOX, + /** Main group, IVirtualBoxClient. */ + LOG_GROUP_MAIN_VIRTUALBOXCLIENT, + /** Main group, IVirtualBoxSDS. */ + LOG_GROUP_MAIN_VIRTUALBOXSDS, + /** Main group, IVirtualSystemDescription. */ + LOG_GROUP_MAIN_VIRTUALSYSTEMDESCRIPTION, + /** Main group, VMM device interfaces. */ + LOG_GROUP_MAIN_VMMDEVINTERFACES, + /** Main group, IVRDEServer. */ + LOG_GROUP_MAIN_VRDESERVER, + /** Main group, IVRDEServerChangedEvent. */ + LOG_GROUP_MAIN_VRDESERVERCHANGEDEVENT, + /** Main group, IVRDEServerInfo. */ + LOG_GROUP_MAIN_VRDESERVERINFO, + /** Main group, IVRDEServerInfoChangedEvent. */ + LOG_GROUP_MAIN_VRDESERVERINFOCHANGEDEVENT, + /** Misc. group intended for external use only. */ + LOG_GROUP_MISC, + /** MM group. */ + LOG_GROUP_MM, + /** MM group. */ + LOG_GROUP_MM_HEAP, + /** MM group. */ + LOG_GROUP_MM_HYPER, + /** MM Hypervisor Heap group. */ + LOG_GROUP_MM_HYPER_HEAP, + /** MM Physical/Ram group. */ + LOG_GROUP_MM_PHYS, + /** MM Page pool group. */ + LOG_GROUP_MM_POOL, + /** The NAT service group */ + LOG_GROUP_NAT_SERVICE, + /** The network adaptor driver group. */ + LOG_GROUP_NET_ADP_DRV, + /** The network filter driver group. */ + LOG_GROUP_NET_FLT_DRV, + /** The common network service group */ + LOG_GROUP_NET_SERVICE, + /** Network traffic shaper driver group. */ + LOG_GROUP_NET_SHAPER, + /** PATM group. */ + LOG_GROUP_PATM, + /** PDM group. */ + LOG_GROUP_PDM, + /** PDM Async completion group. */ + LOG_GROUP_PDM_ASYNC_COMPLETION, + /** PDM Block cache group. */ + LOG_GROUP_PDM_BLK_CACHE, + /** PDM Device group. */ + LOG_GROUP_PDM_DEVICE, + /** PDM Driver group. */ + LOG_GROUP_PDM_DRIVER, + /** PDM Loader group. */ + LOG_GROUP_PDM_LDR, + /** PDM Loader group. */ + LOG_GROUP_PDM_QUEUE, + /** PGM group. */ + LOG_GROUP_PGM, + /** PGM dynamic mapping group. */ + LOG_GROUP_PGM_DYNMAP, + /** PGM physical group. */ + LOG_GROUP_PGM_PHYS, + /** PGM physical access group. */ + LOG_GROUP_PGM_PHYS_ACCESS, + /** PGM shadow page pool group. */ + LOG_GROUP_PGM_POOL, + /** PGM shared paging group. */ + LOG_GROUP_PGM_SHARED, + /** REM group. */ + LOG_GROUP_REM, + /** REM disassembly handler group. */ + LOG_GROUP_REM_DISAS, + /** REM access handler group. */ + LOG_GROUP_REM_HANDLER, + /** REM I/O port access group. */ + LOG_GROUP_REM_IOPORT, + /** REM MMIO access group. */ + LOG_GROUP_REM_MMIO, + /** REM Printf. */ + LOG_GROUP_REM_PRINTF, + /** REM running group. */ + LOG_GROUP_REM_RUN, + /** SELM group. */ + LOG_GROUP_SELM, + /** Shared clipboard host service group. */ + LOG_GROUP_SHARED_CLIPBOARD, + /** Chromium OpenGL host service group. */ + LOG_GROUP_SHARED_CROPENGL, + /** Shared folders host service group. */ + LOG_GROUP_SHARED_FOLDERS, + /** OpenGL host service group. */ + LOG_GROUP_SHARED_OPENGL, + /** The internal networking service group. */ + LOG_GROUP_SRV_INTNET, + /** SSM group. */ + LOG_GROUP_SSM, + /** STAM group. */ + LOG_GROUP_STAM, + /** SUP group. */ + LOG_GROUP_SUP, + /** SUPport driver group. */ + LOG_GROUP_SUP_DRV, + /** TM group. */ + LOG_GROUP_TM, + /** TRPM group. */ + LOG_GROUP_TRPM, + /** USB cardreader group. */ + LOG_GROUP_USB_CARDREADER, + /** USB driver group. */ + LOG_GROUP_USB_DRV, + /** USBFilter group. */ + LOG_GROUP_USB_FILTER, + /** USB keyboard device group. */ + LOG_GROUP_USB_KBD, + /** USB mouse/tablet device group. */ + LOG_GROUP_USB_MOUSE, + /** MSD USB device group. */ + LOG_GROUP_USB_MSD, + /** USB remote support. */ + LOG_GROUP_USB_REMOTE, + /** USB webcam. */ + LOG_GROUP_USB_WEBCAM, + /** VBox Guest Additions Driver (VBoxGuest). */ + LOG_GROUP_VGDRV, + /** VBox Guest Additions Library. */ + LOG_GROUP_VBGL, + /** Generic virtual disk layer. */ + LOG_GROUP_VD, + /** CUE/BIN virtual disk backend. */ + LOG_GROUP_VD_CUE, + /** DMG virtual disk backend. */ + LOG_GROUP_VD_DMG, + /** iSCSI virtual disk backend. */ + LOG_GROUP_VD_ISCSI, + /** Parallels HDD virtual disk backend. */ + LOG_GROUP_VD_PARALLELS, + /** QCOW virtual disk backend. */ + LOG_GROUP_VD_QCOW, + /** QED virtual disk backend. */ + LOG_GROUP_VD_QED, + /** Raw virtual disk backend. */ + LOG_GROUP_VD_RAW, + /** VDI virtual disk backend. */ + LOG_GROUP_VD_VDI, + /** VHD virtual disk backend. */ + LOG_GROUP_VD_VHD, + /** VHDX virtual disk backend. */ + LOG_GROUP_VD_VHDX, + /** VMDK virtual disk backend. */ + LOG_GROUP_VD_VMDK, + /** VM group. */ + LOG_GROUP_VM, + /** VMM group. */ + LOG_GROUP_VMM, + /** VRDE group */ + LOG_GROUP_VRDE, + /** VRDP group */ + LOG_GROUP_VRDP, + /** VSCSI group */ + LOG_GROUP_VSCSI, + /** Webservice group. */ + LOG_GROUP_WEBSERVICE + /* !!!ALPHABETICALLY!!! */ +} VBOX_LOGGROUP; + + +/** @def VBOX_LOGGROUP_NAMES + * VirtualBox Logging group names. + * + * Must correspond 100% to LOGGROUP! + * Don't forget commas! + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +#define VBOX_LOGGROUP_NAMES \ +{ \ + RT_LOGGROUP_NAMES, \ + "DEFAULT", \ + "AUDIO_MIXER", \ + "AUDIO_MIXER_BUFFER", \ + "AUTOLOGON", \ + "CFGM", \ + "CPUM", \ + "CSAM", \ + "DBGC", \ + "DBGF", \ + "DBGF_INFO", \ + "DBGG", \ + "DEV", \ + "DEV_AC97", \ + "DEV_ACPI", \ + "DEV_AHCI", \ + "DEV_APIC", \ + "DEV_BUSLOGIC", \ + "DEV_DMA", \ + "DEV_E1000", \ + "DEV_EFI", \ + "DEV_EHCI", \ + "DEV_FDC", \ + "DEV_GIM", \ + "DEV_HDA", \ + "DEV_HDA_CODEC", \ + "DEV_HPET", \ + "DEV_IDE", \ + "DEV_IOAPIC", \ + "DEV_INIP", \ + "DEV_KBD", \ + "DEV_LPC", \ + "DEV_LSILOGICSCSI", \ + "DEV_NVME", \ + "DEV_OHCI", \ + "DEV_PARALLEL", \ + "DEV_PC", \ + "DEV_PC_ARCH", \ + "DEV_PC_BIOS", \ + "DEV_PCI", \ + "DEV_PCI_RAW", \ + "DEV_PCNET", \ + "DEV_PIC", \ + "DEV_PIT", \ + "DEV_RTC", \ + "DEV_SB16", \ + "DEV_SERIAL", \ + "DEV_SMC", \ + "DEV_VGA", \ + "DEV_VIRTIO", \ + "DEV_VIRTIO_NET", \ + "DEV_VMM", \ + "DEV_VMM_BACKDOOR", \ + "DEV_VMM_STDERR", \ + "DEV_VMSVGA", \ + "DEV_XHCI", \ + "DIS", \ + "DRV", \ + "DRV_ACPI", \ + "DRV_AUDIO", \ + "DRV_BLOCK", \ + "DRV_CHAR", \ + "DRV_DISK_INTEGRITY", \ + "DRV_DISPLAY", \ + "DRV_FLOPPY", \ + "DRV_HOST_AUDIO", \ + "DRV_HOST_BASE", \ + "DRV_HOST_DVD", \ + "DRV_HOST_FLOPPY", \ + "DRV_HOST_PARALLEL", \ + "DRV_HOST_SERIAL", \ + "DRV_INTNET", \ + "DRV_ISO", \ + "DRV_KBD_QUEUE", \ + "DRV_LWIP", \ + "DRV_MINIPORT", \ + "DRV_MOUSE", \ + "DRV_MOUSE_QUEUE", \ + "DRV_NAMEDPIPE", \ + "DRV_NAT", \ + "DRV_RAW_IMAGE", \ + "DRV_SCSI", \ + "DRV_SCSIHOST", \ + "DRV_TCP", \ + "DRV_TRANSPORT_ASYNC", \ + "DRV_TUN", \ + "DRV_UDP", \ + "DRV_UDPTUNNEL", \ + "DRV_USBPROXY", \ + "DRV_VBOXHDD", \ + "DRV_VD", \ + "DRV_VRDE_AUDIO", \ + "DRV_VSWITCH", \ + "DRV_VUSB", \ + "EM", \ + "FTM", \ + "GIM", \ + "GMM", \ + "GUEST_CONTROL", \ + "GUEST_DND", \ + "GUI", \ + "GVMM", \ + "HGCM", \ + "HGSMI", \ + "HM", \ + "IEM", \ + "IOBUFMGMT", \ + "IOM", \ + "IPC", \ + "LWIP", \ + "LWIP_API_LIB", \ + "LWIP_API_MSG", \ + "LWIP_ETHARP", \ + "LWIP_ICMP", \ + "LWIP_IGMP", \ + "LWIP_INET", \ + "LWIP_IP4", \ + "LWIP_IP4_REASS", \ + "LWIP_IP6", \ + "LWIP_MEM", \ + "LWIP_MEMP", \ + "LWIP_NETIF", \ + "LWIP_PBUF", \ + "LWIP_RAW", \ + "LWIP_SOCKETS", \ + "LWIP_SYS", \ + "LWIP_TCP", \ + "LWIP_TCPIP", \ + "LWIP_TCP_CWND", \ + "LWIP_TCP_FR", \ + "LWIP_TCP_INPUT", \ + "LWIP_TCP_OUTPUT", \ + "LWIP_TCP_QLEN", \ + "LWIP_TCP_RST", \ + "LWIP_TCP_RTO", \ + "LWIP_TCP_WND", \ + "LWIP_TIMERS", \ + "LWIP_UDP", \ + "MAIN", \ + "MAIN_ADDITIONSFACILITY", \ + "MAIN_ADDITIONSSTATECHANGEDEVENT", \ + "MAIN_APPLIANCE", \ + "MAIN_AUDIOADAPTER", \ + "MAIN_AUDIOADAPTERCHANGEDEVENT", \ + "MAIN_BANDWIDTHCONTROL", \ + "MAIN_BANDWIDTHGROUP", \ + "MAIN_BANDWIDTHGROUPCHANGEDEVENT", \ + "MAIN_BIOSSETTINGS", \ + "MAIN_CANSHOWWINDOWEVENT", \ + "MAIN_CERTIFICATE", \ + "MAIN_CLIPBOARDMODECHANGEDEVENT", \ + "MAIN_CONSOLE", \ + "MAIN_CPUCHANGEDEVENT", \ + "MAIN_CPUEXECUTIONCAPCHANGEDEVENT", \ + "MAIN_DHCPSERVER", \ + "MAIN_DIRECTORY", \ + "MAIN_DISPLAY", \ + "MAIN_DISPLAYSOURCEBITMAP", \ + "MAIN_DNDBASE", \ + "MAIN_DNDMODECHANGEDEVENT", \ + "MAIN_DNDSOURCE", \ + "MAIN_DNDTARGET", \ + "MAIN_EMULATEDUSB", \ + "MAIN_EVENT", \ + "MAIN_EVENTLISTENER", \ + "MAIN_EVENTSOURCE", \ + "MAIN_EVENTSOURCECHANGEDEVENT", \ + "MAIN_EXTPACK", \ + "MAIN_EXTPACKBASE", \ + "MAIN_EXTPACKFILE", \ + "MAIN_EXTPACKMANAGER", \ + "MAIN_EXTPACKPLUGIN", \ + "MAIN_EXTRADATACANCHANGEEVENT", \ + "MAIN_EXTRADATACHANGEDEVENT", \ + "MAIN_FILE", \ + "MAIN_FRAMEBUFFER", \ + "MAIN_FRAMEBUFFEROVERLAY", \ + "MAIN_FSOBJINFO", \ + "MAIN_GUEST", \ + "MAIN_GUESTDIRECTORY", \ + "MAIN_GUESTDNDSOURCE", \ + "MAIN_GUESTDNDTARGET", \ + "MAIN_GUESTERRORINFO", \ + "MAIN_GUESTFILE", \ + "MAIN_GUESTFILEEVENT", \ + "MAIN_GUESTFILEIOEVENT", \ + "MAIN_GUESTFILEOFFSETCHANGEDEVENT", \ + "MAIN_GUESTFILEREADEVENT", \ + "MAIN_GUESTFILEREGISTEREDEVENT", \ + "MAIN_GUESTFILESTATECHANGEDEVENT", \ + "MAIN_GUESTFILEWRITEEVENT", \ + "MAIN_GUESTFSOBJINFO", \ + "MAIN_GUESTKEYBOARDEVENT", \ + "MAIN_GUESTMONITORCHANGEDEVENT", \ + "MAIN_GUESTMOUSEEVENT", \ + "MAIN_GUESTMULTITOUCHEVENT", \ + "MAIN_GUESTOSTYPE", \ + "MAIN_GUESTPROCESS", \ + "MAIN_GUESTPROCESSEVENT", \ + "MAIN_GUESTPROCESSINPUTNOTIFYEVENT", \ + "MAIN_GUESTPROCESSIOEVENT", \ + "MAIN_GUESTPROCESSOUTPUTEVENT", \ + "MAIN_GUESTPROCESSREGISTEREDEVENT", \ + "MAIN_GUESTPROCESSSTATECHANGEDEVENT", \ + "MAIN_GUESTPROPERTYCHANGEDEVENT", \ + "MAIN_GUESTSCREENINFO", \ + "MAIN_GUESTSESSION", \ + "MAIN_GUESTSESSIONEVENT", \ + "MAIN_GUESTSESSIONREGISTEREDEVENT", \ + "MAIN_GUESTSESSIONSTATECHANGEDEVENT", \ + "MAIN_GUESTUSERSTATECHANGEDEVENT", \ + "MAIN_HOST", \ + "MAIN_HOSTNAMERESOLUTIONCONFIGURATIONCHANGEEVENT", \ + "MAIN_HOSTNETWORKINTERFACE", \ + "MAIN_HOSTPCIDEVICEPLUGEVENT", \ + "MAIN_HOSTUSBDEVICE", \ + "MAIN_HOSTUSBDEVICEFILTER", \ + "MAIN_HOSTVIDEOINPUTDEVICE", \ + "MAIN_INTERNALMACHINECONTROL", \ + "MAIN_INTERNALSESSIONCONTROL", \ + "MAIN_KEYBOARD", \ + "MAIN_KEYBOARDLEDSCHANGEDEVENT", \ + "MAIN_MACHINE", \ + "MAIN_MACHINEDATACHANGEDEVENT", \ + "MAIN_MACHINEDEBUGGER", \ + "MAIN_MACHINEEVENT", \ + "MAIN_MACHINEREGISTEREDEVENT", \ + "MAIN_MACHINESTATECHANGEDEVENT", \ + "MAIN_MEDIUM", \ + "MAIN_MEDIUMATTACHMENT", \ + "MAIN_MEDIUMCHANGEDEVENT", \ + "MAIN_MEDIUMCONFIGCHANGEDEVENT", \ + "MAIN_MEDIUMFORMAT", \ + "MAIN_MEDIUMREGISTEREDEVENT", \ + "MAIN_MOUSE", \ + "MAIN_MOUSECAPABILITYCHANGEDEVENT", \ + "MAIN_MOUSEPOINTERSHAPE", \ + "MAIN_MOUSEPOINTERSHAPECHANGEDEVENT", \ + "MAIN_NATENGINE", \ + "MAIN_NATNETWORK", \ + "MAIN_NATNETWORKALTEREVENT", \ + "MAIN_NATNETWORKCHANGEDEVENT", \ + "MAIN_NATNETWORKCREATIONDELETIONEVENT", \ + "MAIN_NATNETWORKPORTFORWARDEVENT", \ + "MAIN_NATNETWORKSETTINGEVENT", \ + "MAIN_NATNETWORKSTARTSTOPEVENT", \ + "MAIN_NATREDIRECTEVENT", \ + "MAIN_NETWORKADAPTER", \ + "MAIN_NETWORKADAPTERCHANGEDEVENT", \ + "MAIN_PARALLELPORT", \ + "MAIN_PARALLELPORTCHANGEDEVENT", \ + "MAIN_PCIADDRESS", \ + "MAIN_PCIDEVICEATTACHMENT", \ + "MAIN_PERFORMANCECOLLECTOR", \ + "MAIN_PERFORMANCEMETRIC", \ + "MAIN_PROCESS", \ + "MAIN_PROGRESS", \ + "MAIN_PROGRESSEVENT", \ + "MAIN_PROGRESSPERCENTAGECHANGEDEVENT", \ + "MAIN_PROGRESSTASKCOMPLETEDEVENT", \ + "MAIN_REUSABLEEVENT", \ + "MAIN_RUNTIMEERROREVENT", \ + "MAIN_SERIALPORT", \ + "MAIN_SERIALPORTCHANGEDEVENT", \ + "MAIN_SESSION", \ + "MAIN_SESSIONSTATECHANGEDEVENT", \ + "MAIN_SHAREDFOLDER", \ + "MAIN_SHAREDFOLDERCHANGEDEVENT", \ + "MAIN_SHOWWINDOWEVENT", \ + "MAIN_SNAPSHOT", \ + "MAIN_SNAPSHOTCHANGEDEVENT", \ + "MAIN_SNAPSHOTDELETEDEVENT", \ + "MAIN_SNAPSHOTEVENT", \ + "MAIN_SNAPSHOTRESTOREDEVENT", \ + "MAIN_SNAPSHOTTAKENEVENT", \ + "MAIN_STATECHANGEDEVENT", \ + "MAIN_STORAGECONTROLLER", \ + "MAIN_STORAGECONTROLLERCHANGEDEVENT", \ + "MAIN_STORAGEDEVICECHANGEDEVENT", \ + "MAIN_SYSTEMPROPERTIES", \ + "MAIN_TOKEN", \ + "MAIN_UNATTENDED", \ + "MAIN_USBCONTROLLER", \ + "MAIN_USBCONTROLLERCHANGEDEVENT", \ + "MAIN_USBDEVICE", \ + "MAIN_USBDEVICEFILTER", \ + "MAIN_USBDEVICEFILTERS", \ + "MAIN_USBDEVICESTATECHANGEDEVENT", \ + "MAIN_USBPROXYBACKEND", \ + "MAIN_VBOXSVC", \ + "MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT", \ + "MAIN_VETOEVENT", \ + "MAIN_VFSEXPLORER", \ + "MAIN_VIDEOCAPTURECHANGEDEVENT", \ + "MAIN_VIRTUALBOX", \ + "MAIN_VIRTUALBOXCLIENT", \ + "MAIN_VIRTUALBOXSDS", \ + "MAIN_VIRTUALSYSTEMDESCRIPTION", \ + "MAIN_VMMDEVINTERFACES", \ + "MAIN_VRDESERVER", \ + "MAIN_VRDESERVERCHANGEDEVENT", \ + "MAIN_VRDESERVERINFO", \ + "MAIN_VRDESERVERINFOCHANGEDEVENT", \ + "MISC", \ + "MM", \ + "MM_HEAP", \ + "MM_HYPER", \ + "MM_HYPER_HEAP",\ + "MM_PHYS", \ + "MM_POOL", \ + "NAT_SERVICE", \ + "NET_ADP_DRV", \ + "NET_FLT_DRV", \ + "NET_SERVICE", \ + "NET_SHAPER", \ + "PATM", \ + "PDM", \ + "PDM_ASYNC_COMPLETION", \ + "PDM_BLK_CACHE", \ + "PDM_DEVICE", \ + "PDM_DRIVER", \ + "PDM_LDR", \ + "PDM_QUEUE", \ + "PGM", \ + "PGM_DYNMAP", \ + "PGM_PHYS", \ + "PGM_PHYS_ACCESS",\ + "PGM_POOL", \ + "PGM_SHARED", \ + "REM", \ + "REM_DISAS", \ + "REM_HANDLER", \ + "REM_IOPORT", \ + "REM_MMIO", \ + "REM_PRINTF", \ + "REM_RUN", \ + "SELM", \ + "SHARED_CLIPBOARD",\ + "SHARED_CROPENGL",\ + "SHARED_FOLDERS",\ + "SHARED_OPENGL",\ + "SRV_INTNET", \ + "SSM", \ + "STAM", \ + "SUP", \ + "SUP_DRV", \ + "TM", \ + "TRPM", \ + "USB_CARDREADER",\ + "USB_DRV", \ + "USB_FILTER", \ + "USB_KBD", \ + "USB_MOUSE", \ + "USB_MSD", \ + "USB_REMOTE", \ + "USB_WEBCAM", \ + "VGDRV", \ + "VBGL", \ + "VD", \ + "VD_CUE", \ + "VD_DMG", \ + "VD_ISCSI", \ + "VD_PARALLELS", \ + "VD_QCOW", \ + "VD_QED", \ + "VD_RAW", \ + "VD_VDI", \ + "VD_VHD", \ + "VD_VHDX", \ + "VD_VMDK", \ + "VM", \ + "VMM", \ + "VRDE", \ + "VRDP", \ + "VSCSI", \ + "WEBSERVICE", \ +} + +/** @} */ +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/ostypes.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/ostypes.h @@ -0,0 +1,170 @@ +/** @file + * VirtualBox - Global Guest Operating System definition. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_ostypes_h +#define ___VBox_ostypes_h + +#include + +RT_C_DECLS_BEGIN + +/** + * Global list of guest operating system types. + * + * They are grouped into families. A family identifer is always has + * mod 0x10000 == 0. New entries can be added, however other components + * depend on the values (e.g. the Qt GUI and guest additions) so the + * existing values MUST stay the same. + * + * Note: distinguish between 32 & 64 bits guest OSes by checking bit 8 (mod 0x100) + */ +typedef enum VBOXOSTYPE +{ + VBOXOSTYPE_Unknown = 0, + VBOXOSTYPE_Unknown_x64 = 0x00100, + VBOXOSTYPE_DOS = 0x10000, + VBOXOSTYPE_Win31 = 0x15000, + VBOXOSTYPE_Win9x = 0x20000, + VBOXOSTYPE_Win95 = 0x21000, + VBOXOSTYPE_Win98 = 0x22000, + VBOXOSTYPE_WinMe = 0x23000, + VBOXOSTYPE_WinNT = 0x30000, + VBOXOSTYPE_WinNT_x64 = 0x30100, + VBOXOSTYPE_WinNT4 = 0x31000, + VBOXOSTYPE_Win2k = 0x32000, + VBOXOSTYPE_WinXP = 0x33000, + VBOXOSTYPE_WinXP_x64 = 0x33100, + VBOXOSTYPE_Win2k3 = 0x34000, + VBOXOSTYPE_Win2k3_x64 = 0x34100, + VBOXOSTYPE_WinVista = 0x35000, + VBOXOSTYPE_WinVista_x64 = 0x35100, + VBOXOSTYPE_Win2k8 = 0x36000, + VBOXOSTYPE_Win2k8_x64 = 0x36100, + VBOXOSTYPE_Win7 = 0x37000, + VBOXOSTYPE_Win7_x64 = 0x37100, + VBOXOSTYPE_Win8 = 0x38000, + VBOXOSTYPE_Win8_x64 = 0x38100, + VBOXOSTYPE_Win2k12_x64 = 0x39100, + VBOXOSTYPE_Win81 = 0x3A000, + VBOXOSTYPE_Win81_x64 = 0x3A100, + VBOXOSTYPE_Win10 = 0x3B000, + VBOXOSTYPE_Win10_x64 = 0x3B100, + VBOXOSTYPE_Win2k16_x64 = 0x3C100, + VBOXOSTYPE_OS2 = 0x40000, + VBOXOSTYPE_OS2Warp3 = 0x41000, + VBOXOSTYPE_OS2Warp4 = 0x42000, + VBOXOSTYPE_OS2Warp45 = 0x43000, + VBOXOSTYPE_ECS = 0x44000, + VBOXOSTYPE_OS21x = 0x48000, + VBOXOSTYPE_Linux = 0x50000, + VBOXOSTYPE_Linux_x64 = 0x50100, + VBOXOSTYPE_Linux22 = 0x51000, + VBOXOSTYPE_Linux24 = 0x52000, + VBOXOSTYPE_Linux24_x64 = 0x52100, + VBOXOSTYPE_Linux26 = 0x53000, + VBOXOSTYPE_Linux26_x64 = 0x53100, + VBOXOSTYPE_ArchLinux = 0x54000, + VBOXOSTYPE_ArchLinux_x64 = 0x54100, + VBOXOSTYPE_Debian = 0x55000, + VBOXOSTYPE_Debian_x64 = 0x55100, + VBOXOSTYPE_OpenSUSE = 0x56000, + VBOXOSTYPE_OpenSUSE_x64 = 0x56100, + VBOXOSTYPE_FedoraCore = 0x57000, + VBOXOSTYPE_FedoraCore_x64 = 0x57100, + VBOXOSTYPE_Gentoo = 0x58000, + VBOXOSTYPE_Gentoo_x64 = 0x58100, + VBOXOSTYPE_Mandriva = 0x59000, + VBOXOSTYPE_Mandriva_x64 = 0x59100, + VBOXOSTYPE_RedHat = 0x5A000, + VBOXOSTYPE_RedHat_x64 = 0x5A100, + VBOXOSTYPE_Turbolinux = 0x5B000, + VBOXOSTYPE_Turbolinux_x64 = 0x5B100, + VBOXOSTYPE_Ubuntu = 0x5C000, + VBOXOSTYPE_Ubuntu_x64 = 0x5C100, + VBOXOSTYPE_Xandros = 0x5D000, + VBOXOSTYPE_Xandros_x64 = 0x5D100, + VBOXOSTYPE_Oracle = 0x5E000, + VBOXOSTYPE_Oracle_x64 = 0x5E100, + VBOXOSTYPE_FreeBSD = 0x60000, + VBOXOSTYPE_FreeBSD_x64 = 0x60100, + VBOXOSTYPE_OpenBSD = 0x61000, + VBOXOSTYPE_OpenBSD_x64 = 0x61100, + VBOXOSTYPE_NetBSD = 0x62000, + VBOXOSTYPE_NetBSD_x64 = 0x62100, + VBOXOSTYPE_Netware = 0x70000, + VBOXOSTYPE_Solaris = 0x80000, + VBOXOSTYPE_Solaris_x64 = 0x80100, + VBOXOSTYPE_OpenSolaris = 0x81000, + VBOXOSTYPE_OpenSolaris_x64 = 0x81100, + VBOXOSTYPE_Solaris11_x64 = 0x82100, + VBOXOSTYPE_L4 = 0x90000, + VBOXOSTYPE_QNX = 0xA0000, + VBOXOSTYPE_MacOS = 0xB0000, + VBOXOSTYPE_MacOS_x64 = 0xB0100, + VBOXOSTYPE_MacOS106 = 0xB2000, + VBOXOSTYPE_MacOS106_x64 = 0xB2100, + VBOXOSTYPE_MacOS107_x64 = 0xB3100, + VBOXOSTYPE_MacOS108_x64 = 0xB4100, + VBOXOSTYPE_MacOS109_x64 = 0xB5100, + VBOXOSTYPE_MacOS1010_x64 = 0xB6100, + VBOXOSTYPE_MacOS1011_x64 = 0xB7100, + VBOXOSTYPE_MacOS1012_x64 = 0xB8100, + VBOXOSTYPE_MacOS1013_x64 = 0xB9100, + VBOXOSTYPE_JRockitVE = 0xC0000, + VBOXOSTYPE_Haiku = 0xD0000, + VBOXOSTYPE_Haiku_x64 = 0xD0100, + VBOXOSTYPE_VBoxBS_x64 = 0xE0100, +/** The bit number which indicates 64-bit or 32-bit. */ +#define VBOXOSTYPE_x64_BIT 8 + /** The mask which indicates 64-bit. */ + VBOXOSTYPE_x64 = 1 << VBOXOSTYPE_x64_BIT, + /** The usual 32-bit hack. */ + VBOXOSTYPE_32BIT_HACK = 0x7fffffff +} VBOXOSTYPE; + + +/** + * Global list of guest OS families. + */ +typedef enum VBOXOSFAMILY +{ + VBOXOSFAMILY_Unknown = 0, + VBOXOSFAMILY_Windows32 = 1, + VBOXOSFAMILY_Windows64 = 2, + VBOXOSFAMILY_Linux32 = 3, + VBOXOSFAMILY_Linux64 = 4, + VBOXOSFAMILY_FreeBSD32 = 5, + VBOXOSFAMILY_FreeBSD64 = 6, + VBOXOSFAMILY_Solaris32 = 7, + VBOXOSFAMILY_Solaris64 = 8, + VBOXOSFAMILY_MacOSX32 = 9, + VBOXOSFAMILY_MacOSX64 = 10, + /** The usual 32-bit hack. */ + VBOXOSFAMILY_32BIT_HACK = 0x7fffffff +} VBOXOSFAMILY; + +RT_C_DECLS_END + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/param.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/param.h @@ -0,0 +1,190 @@ +/** @file + * VirtualBox Parameter Definitions. (VMM,+) + * + * param.mac is generated from this file by running 'kmk incs' in the root. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_param_h +#define ___VBox_param_h + +#include +#include + + +/** @defgroup grp_vbox_param VBox Parameter Definition + * @{ + */ + +/** The maximum number of pages that can be allocated and mapped + * by various MM, PGM and SUP APIs. */ +#if ARCH_BITS == 64 +# define VBOX_MAX_ALLOC_PAGE_COUNT (_512M / PAGE_SIZE) +#else +# define VBOX_MAX_ALLOC_PAGE_COUNT (_256M / PAGE_SIZE) +#endif + +/** @def VBOX_WITH_PAGE_SHARING + * Enables the page sharing code. + * @remarks This must match GMMR0Init; currently we only support page fusion on + * all 64-bit hosts except Mac OS X */ +#if ( HC_ARCH_BITS == 64 /* ASM-NOINC */ \ + && (defined(RT_OS_FREEBSD) || defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS)) ) /* ASM-NOINC */ \ + || defined(DOXYGEN_RUNNING) /* ASM-NOINC */ +# define VBOX_WITH_PAGE_SHARING /* ASM-NOINC */ +#endif /* ASM-NOINC */ + + +/** @defgroup grp_vbox_param_mm Memory Monitor Parameters + * @{ + */ +/** Initial address of Hypervisor Memory Area. + * MUST BE PAGE TABLE ALIGNED! */ +#define MM_HYPER_AREA_ADDRESS UINT32_C(0xa0000000) + +/** The max size of the hypervisor memory area. */ +#define MM_HYPER_AREA_MAX_SIZE (40U * _1M) /**< @todo Readjust when floating RAMRANGEs have been implemented. Used to be 20 * _1MB */ + +/** Maximum number of bytes we can dynamically map into the hypervisor region. + * This must be a power of 2 number of pages! + */ +#define MM_HYPER_DYNAMIC_SIZE (16U * PAGE_SIZE) + +/** The minimum guest RAM size in bytes. */ +#define MM_RAM_MIN UINT32_C(0x00400000) +/** The maximum guest RAM size in bytes. */ +#if HC_ARCH_BITS == 64 +# define MM_RAM_MAX UINT64_C(0x20000000000) +#else +# define MM_RAM_MAX UINT64_C(0x000E0000000) +#endif +/** The minimum guest RAM size in MBs. */ +#define MM_RAM_MIN_IN_MB UINT32_C(4) +/** The maximum guest RAM size in MBs. */ +#if HC_ARCH_BITS == 64 +# define MM_RAM_MAX_IN_MB UINT32_C(2097152) +#else +# define MM_RAM_MAX_IN_MB UINT32_C(3584) +#endif +/** The default size of the below 4GB RAM hole. */ +#define MM_RAM_HOLE_SIZE_DEFAULT (512U * _1M) +/** The maximum 64-bit MMIO BAR size. + * @remarks There isn't really any limit here other than the size of the + * tracking structures we need (around 1/256 of the size). */ +#if HC_ARCH_BITS == 64 +# define MM_MMIO_64_MAX _1T +#else +# define MM_MMIO_64_MAX (_1G64 * 16) +#endif +/** The maximum 32-bit MMIO BAR size. */ +#define MM_MMIO_32_MAX _2G + +/** @} */ + + +/** @defgroup grp_vbox_param_pgm Page Manager Parameters + * @{ + */ +/** The number of handy pages. + * This should be a power of two. */ +#define PGM_HANDY_PAGES 128 +/** The threshold at which allocation of more handy pages is flagged. */ +#define PGM_HANDY_PAGES_SET_FF 32 +/** The threshold at which we will allocate more when in ring-3. + * This is must be smaller than both PGM_HANDY_PAGES_SET_FF and + * PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_R3_ALLOC 8 +/** The threshold at which we will allocate more when in ring-0 or raw mode. + * The idea is that we should never go below this threshold while in ring-0 or + * raw mode because of PGM_HANDY_PAGES_RZ_TO_R3. However, should this happen and + * we are actually out of memory, we will have 8 page to get out of whatever + * code we're executing. + * + * This is must be smaller than both PGM_HANDY_PAGES_SET_FF and + * PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_RZ_ALLOC 8 +/** The threshold at which we force return to R3 ASAP. + * The idea is that this should be large enough to get out of any code and up to + * the main EM loop when we are out of memory. + * This must be less or equal to PGM_HANDY_PAGES_MIN. */ +#define PGM_HANDY_PAGES_RZ_TO_R3 24 +/** The minimum number of handy pages (after allocation). + * This must be greater or equal to PGM_HANDY_PAGES_SET_FF. + * Another name would be PGM_HANDY_PAGES_EXTRA_RESERVATION or _PARANOIA. :-) */ +#define PGM_HANDY_PAGES_MIN 32 +/** @} */ + + +/** @defgroup grp_vbox_param_vmm VMM Parameters + * @{ + */ +/** VMM stack size. */ +#ifdef RT_OS_DARWIN +# define VMM_STACK_SIZE 16384U +#else +# define VMM_STACK_SIZE 8192U +#endif +/** Min number of Virtual CPUs. */ +#define VMM_MIN_CPU_COUNT 1 +/** Max number of Virtual CPUs. */ +#define VMM_MAX_CPU_COUNT 64 + +/** @} */ + + +/** @defgroup grp_vbox_pci PCI Identifiers + * @{ */ +/** VirtualBox PCI vendor ID. */ +#define VBOX_PCI_VENDORID (0x80ee) + +/** @name VirtualBox graphics card identifiers + * @{ */ +#define VBOX_VENDORID VBOX_PCI_VENDORID /**< @todo wonderful choice of name! Please squeeze a _VGA_ or something in there, please. */ +#define VBOX_DEVICEID (0xbeef) /**< @todo ditto. */ +#define VBOX_VESA_VENDORID VBOX_PCI_VENDORID +#define VBOX_VESA_DEVICEID (0xbeef) +/** @} */ + +/** @name VMMDev PCI card identifiers + * @{ */ +#define VMMDEV_VENDORID VBOX_PCI_VENDORID +#define VMMDEV_DEVICEID (0xcafe) +/** @} */ + +/** @} */ + + +/** @defgroup grp_vbox_param_misc Misc + * @{ */ + +/** The maximum size of a generic segment offload (GSO) frame. This limit is + * imposed by the 16-bit frame size in internal networking header. */ +#define VBOX_MAX_GSO_SIZE 0xfff0 + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/shflsvc.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/shflsvc.h @@ -0,0 +1,1433 @@ +/** @file + * Shared Folders: Common header for host service and guest clients. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_shflsvc_h +#define ___VBox_shflsvc_h + +#include +#include +#include +#include +#include + + +/** @name Some bit flag manipulation macros. + * @{ */ +#ifndef BIT_FLAG +#define BIT_FLAG(__Field,__Flag) ((__Field) & (__Flag)) +#endif + +#ifndef BIT_FLAG_SET +#define BIT_FLAG_SET(__Field,__Flag) ((__Field) |= (__Flag)) +#endif + +#ifndef BIT_FLAG_CLEAR +#define BIT_FLAG_CLEAR(__Field,__Flag) ((__Field) &= ~(__Flag)) +#endif +/** @} */ + + +/** + * Structures shared between guest and the service + * can be relocated and use offsets to point to variable + * length parts. + */ + +/** + * Shared folders protocol works with handles. + * Before doing any action on a file system object, + * one have to obtain the object handle via a SHFL_FN_CREATE + * request. A handle must be closed with SHFL_FN_CLOSE. + */ + +/** Shared Folders service functions. (guest) + * @{ + */ + +/** Query mappings changes. */ +#define SHFL_FN_QUERY_MAPPINGS (1) +/** Query mappings changes. */ +#define SHFL_FN_QUERY_MAP_NAME (2) +/** Open/create object. */ +#define SHFL_FN_CREATE (3) +/** Close object handle. */ +#define SHFL_FN_CLOSE (4) +/** Read object content. */ +#define SHFL_FN_READ (5) +/** Write new object content. */ +#define SHFL_FN_WRITE (6) +/** Lock/unlock a range in the object. */ +#define SHFL_FN_LOCK (7) +/** List object content. */ +#define SHFL_FN_LIST (8) +/** Query/set object information. */ +#define SHFL_FN_INFORMATION (9) +/** Remove object */ +#define SHFL_FN_REMOVE (11) +/** Map folder (legacy) */ +#define SHFL_FN_MAP_FOLDER_OLD (12) +/** Unmap folder */ +#define SHFL_FN_UNMAP_FOLDER (13) +/** Rename object (possibly moving it to another directory) */ +#define SHFL_FN_RENAME (14) +/** Flush file */ +#define SHFL_FN_FLUSH (15) +/** @todo macl, a description, please. */ +#define SHFL_FN_SET_UTF8 (16) +/** Map folder */ +#define SHFL_FN_MAP_FOLDER (17) +/** Read symlink destination (as of VBox 4.0) */ +#define SHFL_FN_READLINK (18) +/** Create symlink (as of VBox 4.0) */ +#define SHFL_FN_SYMLINK (19) +/** Ask host to show symlinks (as of VBox 4.0) */ +#define SHFL_FN_SET_SYMLINKS (20) + +/** @} */ + +/** Shared Folders service functions. (host) + * @{ + */ + +/** Add shared folder mapping. */ +#define SHFL_FN_ADD_MAPPING (1) +/** Remove shared folder mapping. */ +#define SHFL_FN_REMOVE_MAPPING (2) +/** Set the led status light address. */ +#define SHFL_FN_SET_STATUS_LED (3) +/** Allow the guest to create symbolic links (as of VBox 4.0) */ +#define SHFL_FN_ALLOW_SYMLINKS_CREATE (4) +/** @} */ + +/** Root handle for a mapping. Root handles are unique. + * @note + * Function parameters structures consider + * the root handle as 32 bit value. If the typedef + * will be changed, then function parameters must be + * changed accordingly. All those parameters are marked + * with SHFLROOT in comments. + */ +typedef uint32_t SHFLROOT; + +#define SHFL_ROOT_NIL ((SHFLROOT)~0) + + +/** A shared folders handle for an opened object. */ +typedef uint64_t SHFLHANDLE; + +#define SHFL_HANDLE_NIL ((SHFLHANDLE)~0LL) +#define SHFL_HANDLE_ROOT ((SHFLHANDLE)0LL) + +/** Hardcoded maximum length (in chars) of a shared folder name. */ +#define SHFL_MAX_LEN (256) +/** Hardcoded maximum number of shared folder mapping available to the guest. */ +#define SHFL_MAX_MAPPINGS (64) + +/** @name Shared Folders strings. They can be either UTF-8 or UTF-16. + * @{ + */ + +/** + * Shared folder string buffer structure. + */ +typedef struct _SHFLSTRING +{ + /** Allocated size of the String member in bytes. */ + uint16_t u16Size; + + /** Length of string without trailing nul in bytes. */ + uint16_t u16Length; + + /** UTF-8 or UTF-16 string. Nul terminated. */ + union + { +#if 1 + uint8_t utf8[1]; + RTUTF16 utf16[1]; + uint16_t ucs2[1]; /**< misnomer, use utf16. */ +#else + uint8_t utf8[RT_FLEXIBLE_ARRAY_IN_NESTED_UNION]; + RTUTF16 utf16[RT_FLEXIBLE_ARRAY_IN_NESTED_UNION]; + RTUTF16 ucs2[RT_FLEXIBLE_ARRAY_IN_NESTED_UNION]; /**< misnomer, use utf16. */ +#endif + } String; +} SHFLSTRING; +AssertCompileSize(RTUTF16, 2); +AssertCompileSize(SHFLSTRING, 6); +AssertCompileMemberOffset(SHFLSTRING, String, 4); +/** The size of SHFLSTRING w/o the string part. */ +#define SHFLSTRING_HEADER_SIZE 4 +AssertCompileMemberOffset(SHFLSTRING, String, SHFLSTRING_HEADER_SIZE); + +/** Pointer to a shared folder string buffer. */ +typedef SHFLSTRING *PSHFLSTRING; +/** Pointer to a const shared folder string buffer. */ +typedef const SHFLSTRING *PCSHFLSTRING; + +/** Calculate size of the string. */ +DECLINLINE(uint32_t) ShflStringSizeOfBuffer(PCSHFLSTRING pString) +{ + return pString ? (uint32_t)(SHFLSTRING_HEADER_SIZE + pString->u16Size) : 0; +} + +DECLINLINE(uint32_t) ShflStringLength(PCSHFLSTRING pString) +{ + return pString ? pString->u16Length : 0; +} + +DECLINLINE(PSHFLSTRING) ShflStringInitBuffer(void *pvBuffer, uint32_t u32Size) +{ + PSHFLSTRING pString = NULL; + const uint32_t u32HeaderSize = SHFLSTRING_HEADER_SIZE; + + /* + * Check that the buffer size is big enough to hold a zero sized string + * and is not too big to fit into 16 bit variables. + */ + if (u32Size >= u32HeaderSize && u32Size - u32HeaderSize <= 0xFFFF) + { + pString = (PSHFLSTRING)pvBuffer; + pString->u16Size = (uint16_t)(u32Size - u32HeaderSize); + pString->u16Length = 0; + if (pString->u16Size >= sizeof(pString->String.ucs2[0])) + pString->String.ucs2[0] = 0; + else if (pString->u16Size >= sizeof(pString->String.utf8[0])) + pString->String.utf8[0] = 0; + } + + return pString; +} + +/** + * Validates a HGCM string output parameter. + * + * @returns true if valid, false if not. + * + * @param pString The string buffer pointer. + * @param cbBuf The buffer size from the parameter. + */ +DECLINLINE(bool) ShflStringIsValidOut(PCSHFLSTRING pString, uint32_t cbBuf) +{ + if (RT_LIKELY(cbBuf > RT_UOFFSETOF(SHFLSTRING, String))) + if (RT_LIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) <= cbBuf)) + if (RT_LIKELY(pString->u16Length < pString->u16Size)) + return true; + return false; +} + +/** + * Validates a HGCM string input parameter. + * + * @returns true if valid, false if not. + * + * @param pString The string buffer pointer. + * @param cbBuf The buffer size from the parameter. + * @param fUtf8Not16 Set if UTF-8 encoding, clear if UTF-16 encoding. + */ +DECLINLINE(bool) ShflStringIsValidIn(PCSHFLSTRING pString, uint32_t cbBuf, bool fUtf8Not16) +{ + int rc; + if (RT_LIKELY(cbBuf > RT_UOFFSETOF(SHFLSTRING, String))) + { + if (RT_LIKELY((uint32_t)pString->u16Size + RT_UOFFSETOF(SHFLSTRING, String) <= cbBuf)) + { + if (fUtf8Not16) + { + /* UTF-8: */ + if (RT_LIKELY(pString->u16Length < pString->u16Size)) + { + rc = RTStrValidateEncodingEx((const char *)&pString->String.utf8[0], pString->u16Length + 1, + RTSTR_VALIDATE_ENCODING_EXACT_LENGTH | RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED); + if (RT_SUCCESS(rc)) + return true; + } + } + else + { + /* UTF-16: */ + if (RT_LIKELY(!(pString->u16Length & 1))) + { + if (RT_LIKELY((uint32_t)sizeof(RTUTF16) + pString->u16Length <= pString->u16Size)) + { + rc = RTUtf16ValidateEncodingEx(&pString->String.ucs2[0], pString->u16Length / 2 + 1, + RTSTR_VALIDATE_ENCODING_EXACT_LENGTH + | RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED); + if (RT_SUCCESS(rc)) + return true; + } + } + } + } + } + return false; +} + +/** + * Validates an optional HGCM string input parameter. + * + * @returns true if valid, false if not. + * + * @param pString The string buffer pointer. Can be NULL. + * @param cbBuf The buffer size from the parameter. + * @param fUtf8Not16 Set if UTF-8 encoding, clear if UTF-16 encoding. + */ +DECLINLINE(bool) ShflStringIsValidOrNullIn(PCSHFLSTRING pString, uint32_t cbBuf, bool fUtf8Not16) +{ + if (pString) + return ShflStringIsValidIn(pString, cbBuf, fUtf8Not16); + if (RT_LIKELY(cbBuf == 0)) + return true; + return false; +} + +/** @} */ + + +/** + * The available additional information in a SHFLFSOBJATTR object. + */ +typedef enum SHFLFSOBJATTRADD +{ + /** No additional information is available / requested. */ + SHFLFSOBJATTRADD_NOTHING = 1, + /** The additional unix attributes (SHFLFSOBJATTR::u::Unix) are + * available / requested. */ + SHFLFSOBJATTRADD_UNIX, + /** The additional extended attribute size (SHFLFSOBJATTR::u::EASize) is + * available / requested. */ + SHFLFSOBJATTRADD_EASIZE, + /** The last valid item (inclusive). + * The valid range is SHFLFSOBJATTRADD_NOTHING thru + * SHFLFSOBJATTRADD_LAST. */ + SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE, + + /** The usual 32-bit hack. */ + SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff +} SHFLFSOBJATTRADD; + + +/* Assert sizes of the IRPT types we're using below. */ +AssertCompileSize(RTFMODE, 4); +AssertCompileSize(RTFOFF, 8); +AssertCompileSize(RTINODE, 8); +AssertCompileSize(RTTIMESPEC, 8); +AssertCompileSize(RTDEV, 4); +AssertCompileSize(RTUID, 4); + +/** + * Shared folder filesystem object attributes. + */ +#pragma pack(1) +typedef struct SHFLFSOBJATTR +{ + /** Mode flags (st_mode). RTFS_UNIX_*, RTFS_TYPE_*, and RTFS_DOS_*. + * @remarks We depend on a number of RTFS_ defines to remain unchanged. + * Fortuntately, these are depending on windows, dos and unix + * standard values, so this shouldn't be much of a pain. */ + RTFMODE fMode; + + /** The additional attributes available. */ + SHFLFSOBJATTRADD enmAdditional; + + /** + * Additional attributes. + * + * Unless explicitly specified to an API, the API can provide additional + * data as it is provided by the underlying OS. + */ + union SHFLFSOBJATTRUNION + { + /** Additional Unix Attributes + * These are available when SHFLFSOBJATTRADD is set in fUnix. + */ + struct SHFLFSOBJATTRUNIX + { + /** The user owning the filesystem object (st_uid). + * This field is ~0U if not supported. */ + RTUID uid; + + /** The group the filesystem object is assigned (st_gid). + * This field is ~0U if not supported. */ + RTGID gid; + + /** Number of hard links to this filesystem object (st_nlink). + * This field is 1 if the filesystem doesn't support hardlinking or + * the information isn't available. + */ + uint32_t cHardlinks; + + /** The device number of the device which this filesystem object resides on (st_dev). + * This field is 0 if this information is not available. */ + RTDEV INodeIdDevice; + + /** The unique identifier (within the filesystem) of this filesystem object (st_ino). + * Together with INodeIdDevice, this field can be used as a OS wide unique id + * when both their values are not 0. + * This field is 0 if the information is not available. */ + RTINODE INodeId; + + /** User flags (st_flags). + * This field is 0 if this information is not available. */ + uint32_t fFlags; + + /** The current generation number (st_gen). + * This field is 0 if this information is not available. */ + uint32_t GenerationId; + + /** The device number of a character or block device type object (st_rdev). + * This field is 0 if the file isn't of a character or block device type and + * when the OS doesn't subscribe to the major+minor device idenfication scheme. */ + RTDEV Device; + } Unix; + + /** + * Extended attribute size. + */ + struct SHFLFSOBJATTREASIZE + { + /** Size of EAs. */ + RTFOFF cb; + } EASize; + } u; +} SHFLFSOBJATTR; +#pragma pack() +AssertCompileSize(SHFLFSOBJATTR, 44); +/** Pointer to a shared folder filesystem object attributes structure. */ +typedef SHFLFSOBJATTR *PSHFLFSOBJATTR; +/** Pointer to a const shared folder filesystem object attributes structure. */ +typedef const SHFLFSOBJATTR *PCSHFLFSOBJATTR; + + +/** + * Filesystem object information structure. + */ +#pragma pack(1) +typedef struct SHFLFSOBJINFO +{ + /** Logical size (st_size). + * For normal files this is the size of the file. + * For symbolic links, this is the length of the path name contained + * in the symbolic link. + * For other objects this fields needs to be specified. + */ + RTFOFF cbObject; + + /** Disk allocation size (st_blocks * DEV_BSIZE). */ + RTFOFF cbAllocated; + + /** Time of last access (st_atime). + * @remarks Here (and other places) we depend on the IPRT timespec to + * remain unchanged. */ + RTTIMESPEC AccessTime; + + /** Time of last data modification (st_mtime). */ + RTTIMESPEC ModificationTime; + + /** Time of last status change (st_ctime). + * If not available this is set to ModificationTime. + */ + RTTIMESPEC ChangeTime; + + /** Time of file birth (st_birthtime). + * If not available this is set to ChangeTime. + */ + RTTIMESPEC BirthTime; + + /** Attributes. */ + SHFLFSOBJATTR Attr; + +} SHFLFSOBJINFO; +#pragma pack() +AssertCompileSize(SHFLFSOBJINFO, 92); +/** Pointer to a shared folder filesystem object information structure. */ +typedef SHFLFSOBJINFO *PSHFLFSOBJINFO; +/** Pointer to a const shared folder filesystem object information + * structure. */ +typedef const SHFLFSOBJINFO *PCSHFLFSOBJINFO; + + +/** + * Copy file system objinfo from IPRT to shared folder format. + * + * @param pDst The shared folder structure. + * @param pSrc The IPRT structure. + */ +DECLINLINE(void) vbfsCopyFsObjInfoFromIprt(PSHFLFSOBJINFO pDst, PCRTFSOBJINFO pSrc) +{ + pDst->cbObject = pSrc->cbObject; + pDst->cbAllocated = pSrc->cbAllocated; + pDst->AccessTime = pSrc->AccessTime; + pDst->ModificationTime = pSrc->ModificationTime; + pDst->ChangeTime = pSrc->ChangeTime; + pDst->BirthTime = pSrc->BirthTime; + pDst->Attr.fMode = pSrc->Attr.fMode; + RT_ZERO(pDst->Attr.u); + switch (pSrc->Attr.enmAdditional) + { + default: + case RTFSOBJATTRADD_NOTHING: + pDst->Attr.enmAdditional = SHFLFSOBJATTRADD_NOTHING; + break; + + case RTFSOBJATTRADD_UNIX: + pDst->Attr.enmAdditional = SHFLFSOBJATTRADD_UNIX; + pDst->Attr.u.Unix.uid = pSrc->Attr.u.Unix.uid; + pDst->Attr.u.Unix.gid = pSrc->Attr.u.Unix.gid; + pDst->Attr.u.Unix.cHardlinks = pSrc->Attr.u.Unix.cHardlinks; + pDst->Attr.u.Unix.INodeIdDevice = pSrc->Attr.u.Unix.INodeIdDevice; + pDst->Attr.u.Unix.INodeId = pSrc->Attr.u.Unix.INodeId; + pDst->Attr.u.Unix.fFlags = pSrc->Attr.u.Unix.fFlags; + pDst->Attr.u.Unix.GenerationId = pSrc->Attr.u.Unix.GenerationId; + pDst->Attr.u.Unix.Device = pSrc->Attr.u.Unix.Device; + break; + + case RTFSOBJATTRADD_EASIZE: + pDst->Attr.enmAdditional = SHFLFSOBJATTRADD_EASIZE; + pDst->Attr.u.EASize.cb = pSrc->Attr.u.EASize.cb; + break; + } +} + + +/** Result of an open/create request. + * Along with handle value the result code + * identifies what has happened while + * trying to open the object. + */ +typedef enum _SHFLCREATERESULT +{ + SHFL_NO_RESULT, + /** Specified path does not exist. */ + SHFL_PATH_NOT_FOUND, + /** Path to file exists, but the last component does not. */ + SHFL_FILE_NOT_FOUND, + /** File already exists and either has been opened or not. */ + SHFL_FILE_EXISTS, + /** New file was created. */ + SHFL_FILE_CREATED, + /** Existing file was replaced or overwritten. */ + SHFL_FILE_REPLACED +} SHFLCREATERESULT; + + +/** Open/create flags. + * @{ + */ + +/** No flags. Initialization value. */ +#define SHFL_CF_NONE (0x00000000) + +/** Lookup only the object, do not return a handle. All other flags are ignored. */ +#define SHFL_CF_LOOKUP (0x00000001) + +/** Open parent directory of specified object. + * Useful for the corresponding Windows FSD flag + * and for opening paths like \\dir\\*.* to search the 'dir'. + * @todo possibly not needed??? + */ +#define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002) + +/** Create/open a directory. */ +#define SHFL_CF_DIRECTORY (0x00000004) + +/** Open/create action to do if object exists + * and if the object does not exists. + * REPLACE file means atomically DELETE and CREATE. + * OVERWRITE file means truncating the file to 0 and + * setting new size. + * When opening an existing directory REPLACE and OVERWRITE + * actions are considered invalid, and cause returning + * FILE_EXISTS with NIL handle. + */ +#define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000F0) +#define SHFL_CF_ACT_MASK_IF_NEW (0x00000F00) + +/** What to do if object exists. */ +#define SHFL_CF_ACT_OPEN_IF_EXISTS (0x00000000) +#define SHFL_CF_ACT_FAIL_IF_EXISTS (0x00000010) +#define SHFL_CF_ACT_REPLACE_IF_EXISTS (0x00000020) +#define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030) + +/** What to do if object does not exist. */ +#define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000) +#define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100) + +/** Read/write requested access for the object. */ +#define SHFL_CF_ACCESS_MASK_RW (0x00003000) + +/** No access requested. */ +#define SHFL_CF_ACCESS_NONE (0x00000000) +/** Read access requested. */ +#define SHFL_CF_ACCESS_READ (0x00001000) +/** Write access requested. */ +#define SHFL_CF_ACCESS_WRITE (0x00002000) +/** Read/Write access requested. */ +#define SHFL_CF_ACCESS_READWRITE (SHFL_CF_ACCESS_READ | SHFL_CF_ACCESS_WRITE) + +/** Requested share access for the object. */ +#define SHFL_CF_ACCESS_MASK_DENY (0x0000C000) + +/** Allow any access. */ +#define SHFL_CF_ACCESS_DENYNONE (0x00000000) +/** Do not allow read. */ +#define SHFL_CF_ACCESS_DENYREAD (0x00004000) +/** Do not allow write. */ +#define SHFL_CF_ACCESS_DENYWRITE (0x00008000) +/** Do not allow access. */ +#define SHFL_CF_ACCESS_DENYALL (SHFL_CF_ACCESS_DENYREAD | SHFL_CF_ACCESS_DENYWRITE) + +/** Requested access to attributes of the object. */ +#define SHFL_CF_ACCESS_MASK_ATTR (0x00030000) + +/** No access requested. */ +#define SHFL_CF_ACCESS_ATTR_NONE (0x00000000) +/** Read access requested. */ +#define SHFL_CF_ACCESS_ATTR_READ (0x00010000) +/** Write access requested. */ +#define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000) +/** Read/Write access requested. */ +#define SHFL_CF_ACCESS_ATTR_READWRITE (SHFL_CF_ACCESS_ATTR_READ | SHFL_CF_ACCESS_ATTR_WRITE) + +/** The file is opened in append mode. Ignored if SHFL_CF_ACCESS_WRITE is not set. */ +#define SHFL_CF_ACCESS_APPEND (0x00040000) + +/** @} */ + +#pragma pack(1) +typedef struct _SHFLCREATEPARMS +{ + /* Returned handle of opened object. */ + SHFLHANDLE Handle; + + /* Returned result of the operation */ + SHFLCREATERESULT Result; + + /* SHFL_CF_* */ + uint32_t CreateFlags; + + /* Attributes of object to create and + * returned actual attributes of opened/created object. + */ + SHFLFSOBJINFO Info; + +} SHFLCREATEPARMS; +#pragma pack() + +typedef SHFLCREATEPARMS *PSHFLCREATEPARMS; + + +/** Shared Folders mappings. + * @{ + */ + +/** The mapping has been added since last query. */ +#define SHFL_MS_NEW (1) +/** The mapping has been deleted since last query. */ +#define SHFL_MS_DELETED (2) + +typedef struct _SHFLMAPPING +{ + /** Mapping status. */ + uint32_t u32Status; + /** Root handle. */ + SHFLROOT root; +} SHFLMAPPING; +/** Pointer to a SHFLMAPPING structure. */ +typedef SHFLMAPPING *PSHFLMAPPING; + +/** @} */ + +/** Shared Folder directory information + * @{ + */ + +typedef struct _SHFLDIRINFO +{ + /** Full information about the object. */ + SHFLFSOBJINFO Info; + /** The length of the short field (number of RTUTF16 chars). + * It is 16-bit for reasons of alignment. */ + uint16_t cucShortName; + /** The short name for 8.3 compatibility. + * Empty string if not available. + */ + RTUTF16 uszShortName[14]; + /** @todo malc, a description, please. */ + SHFLSTRING name; +} SHFLDIRINFO, *PSHFLDIRINFO; + + +/** + * Shared folder filesystem properties. + */ +typedef struct SHFLFSPROPERTIES +{ + /** The maximum size of a filesystem object name. + * This does not include the '\\0'. */ + uint32_t cbMaxComponent; + + /** True if the filesystem is remote. + * False if the filesystem is local. */ + bool fRemote; + + /** True if the filesystem is case sensitive. + * False if the filesystem is case insensitive. */ + bool fCaseSensitive; + + /** True if the filesystem is mounted read only. + * False if the filesystem is mounted read write. */ + bool fReadOnly; + + /** True if the filesystem can encode unicode object names. + * False if it can't. */ + bool fSupportsUnicode; + + /** True if the filesystem is compresses. + * False if it isn't or we don't know. */ + bool fCompressed; + + /** True if the filesystem compresses of individual files. + * False if it doesn't or we don't know. */ + bool fFileCompression; + + /** @todo more? */ +} SHFLFSPROPERTIES; +AssertCompileSize(SHFLFSPROPERTIES, 12); +/** Pointer to a shared folder filesystem properties structure. */ +typedef SHFLFSPROPERTIES *PSHFLFSPROPERTIES; +/** Pointer to a const shared folder filesystem properties structure. */ +typedef SHFLFSPROPERTIES const *PCSHFLFSPROPERTIES; + + +/** + * Copy file system properties from IPRT to shared folder format. + * + * @param pDst The shared folder structure. + * @param pSrc The IPRT structure. + */ +DECLINLINE(void) vbfsCopyFsPropertiesFromIprt(PSHFLFSPROPERTIES pDst, PCRTFSPROPERTIES pSrc) +{ + RT_ZERO(*pDst); /* zap the implicit padding. */ + pDst->cbMaxComponent = pSrc->cbMaxComponent; + pDst->fRemote = pSrc->fRemote; + pDst->fCaseSensitive = pSrc->fCaseSensitive; + pDst->fReadOnly = pSrc->fReadOnly; + pDst->fSupportsUnicode = pSrc->fSupportsUnicode; + pDst->fCompressed = pSrc->fCompressed; + pDst->fFileCompression = pSrc->fFileCompression; +} + + +typedef struct _SHFLVOLINFO +{ + RTFOFF ullTotalAllocationBytes; + RTFOFF ullAvailableAllocationBytes; + uint32_t ulBytesPerAllocationUnit; + uint32_t ulBytesPerSector; + uint32_t ulSerial; + SHFLFSPROPERTIES fsProperties; +} SHFLVOLINFO, *PSHFLVOLINFO; + +/** @} */ + +/** Function parameter structures. + * @{ + */ + +/** + * SHFL_FN_QUERY_MAPPINGS + */ +/** Validation mask. Needs to be adjusted + * whenever a new SHFL_MF_ flag is added. */ +#define SHFL_MF_MASK (0x00000011) +/** UC2 enconded strings. */ +#define SHFL_MF_UCS2 (0x00000000) +/** Guest uses UTF8 strings, if not set then the strings are unicode (UCS2). */ +#define SHFL_MF_UTF8 (0x00000001) +/** Just handle the auto-mounted folders. */ +#define SHFL_MF_AUTOMOUNT (0x00000010) + +/** Type of guest system. For future system dependent features. */ +#define SHFL_MF_SYSTEM_MASK (0x0000FF00) +#define SHFL_MF_SYSTEM_NONE (0x00000000) +#define SHFL_MF_SYSTEM_WINDOWS (0x00000100) +#define SHFL_MF_SYSTEM_LINUX (0x00000200) + +/** Parameters structure. */ +typedef struct _VBoxSFQueryMappings +{ + VBGLIOCHGCMCALL callInfo; + + /** 32bit, in: + * Flags describing various client needs. + */ + HGCMFunctionParameter flags; + + /** 32bit, in/out: + * Number of mappings the client expects. + * This is the number of elements in the + * mappings array. + */ + HGCMFunctionParameter numberOfMappings; + + /** pointer, in/out: + * Points to array of SHFLMAPPING structures. + */ + HGCMFunctionParameter mappings; + +} VBoxSFQueryMappings; + +/** Number of parameters */ +#define SHFL_CPARMS_QUERY_MAPPINGS (3) + + + +/** + * SHFL_FN_QUERY_MAP_NAME + */ + +/** Parameters structure. */ +typedef struct _VBoxSFQueryMapName +{ + VBGLIOCHGCMCALL callInfo; + + /** 32bit, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in/out: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter name; + +} VBoxSFQueryMapName; + +/** Number of parameters */ +#define SHFL_CPARMS_QUERY_MAP_NAME (2) + +/** + * SHFL_FN_MAP_FOLDER_OLD + */ + +/** Parameters structure. */ +typedef struct _VBoxSFMapFolder_Old +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter path; + + /** pointer, out: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: RTUTF16 + * Path delimiter + */ + HGCMFunctionParameter delimiter; + +} VBoxSFMapFolder_Old; + +/** Number of parameters */ +#define SHFL_CPARMS_MAP_FOLDER_OLD (3) + +/** + * SHFL_FN_MAP_FOLDER + */ + +/** Parameters structure. */ +typedef struct _VBoxSFMapFolder +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter path; + + /** pointer, out: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: RTUTF16 + * Path delimiter + */ + HGCMFunctionParameter delimiter; + + /** pointer, in: SHFLROOT + * Case senstive flag + */ + HGCMFunctionParameter fCaseSensitive; + +} VBoxSFMapFolder; + +/** Number of parameters */ +#define SHFL_CPARMS_MAP_FOLDER (4) + +/** + * SHFL_FN_UNMAP_FOLDER + */ + +/** Parameters structure. */ +typedef struct _VBoxSFUnmapFolder +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + +} VBoxSFUnmapFolder; + +/** Number of parameters */ +#define SHFL_CPARMS_UNMAP_FOLDER (1) + + +/** + * SHFL_FN_CREATE + */ + +/** Parameters structure. */ +typedef struct _VBoxSFCreate +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter path; + + /** pointer, in/out: + * Points to SHFLCREATEPARMS buffer. + */ + HGCMFunctionParameter parms; + +} VBoxSFCreate; + +/** Number of parameters */ +#define SHFL_CPARMS_CREATE (3) + + +/** + * SHFL_FN_CLOSE + */ + +/** Parameters structure. */ +typedef struct _VBoxSFClose +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + + /** value64, in: + * SHFLHANDLE of object to close. + */ + HGCMFunctionParameter handle; + +} VBoxSFClose; + +/** Number of parameters */ +#define SHFL_CPARMS_CLOSE (2) + + +/** + * SHFL_FN_READ + */ + +/** Parameters structure. */ +typedef struct _VBoxSFRead +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to read from. + */ + HGCMFunctionParameter handle; + + /** value64, in: + * Offset to read from. + */ + HGCMFunctionParameter offset; + + /** value64, in/out: + * Bytes to read/How many were read. + */ + HGCMFunctionParameter cb; + + /** pointer, out: + * Buffer to place data to. + */ + HGCMFunctionParameter buffer; + +} VBoxSFRead; + +/** Number of parameters */ +#define SHFL_CPARMS_READ (5) + + + +/** + * SHFL_FN_WRITE + */ + +/** Parameters structure. */ +typedef struct _VBoxSFWrite +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to write to. + */ + HGCMFunctionParameter handle; + + /** value64, in: + * Offset to write to. + */ + HGCMFunctionParameter offset; + + /** value64, in/out: + * Bytes to write/How many were written. + */ + HGCMFunctionParameter cb; + + /** pointer, in: + * Data to write. + */ + HGCMFunctionParameter buffer; + +} VBoxSFWrite; + +/** Number of parameters */ +#define SHFL_CPARMS_WRITE (5) + + + +/** + * SHFL_FN_LOCK + */ + +/** Lock owner is the HGCM client. */ + +/** Lock mode bit mask. */ +#define SHFL_LOCK_MODE_MASK (0x3) +/** Cancel lock on the given range. */ +#define SHFL_LOCK_CANCEL (0x0) +/** Acquire read only lock. Prevent write to the range. */ +#define SHFL_LOCK_SHARED (0x1) +/** Acquire write lock. Prevent both write and read to the range. */ +#define SHFL_LOCK_EXCLUSIVE (0x2) + +/** Do not wait for lock if it can not be acquired at the time. */ +#define SHFL_LOCK_NOWAIT (0x0) +/** Wait and acquire lock. */ +#define SHFL_LOCK_WAIT (0x4) + +/** Lock the specified range. */ +#define SHFL_LOCK_PARTIAL (0x0) +/** Lock entire object. */ +#define SHFL_LOCK_ENTIRE (0x8) + +/** Parameters structure. */ +typedef struct _VBoxSFLock +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to be locked. + */ + HGCMFunctionParameter handle; + + /** value64, in: + * Starting offset of lock range. + */ + HGCMFunctionParameter offset; + + /** value64, in: + * Length of range. + */ + HGCMFunctionParameter length; + + /** value32, in: + * Lock flags SHFL_LOCK_*. + */ + HGCMFunctionParameter flags; + +} VBoxSFLock; + +/** Number of parameters */ +#define SHFL_CPARMS_LOCK (5) + + + +/** + * SHFL_FN_FLUSH + */ + +/** Parameters structure. */ +typedef struct _VBoxSFFlush +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to be locked. + */ + HGCMFunctionParameter handle; + +} VBoxSFFlush; + +/** Number of parameters */ +#define SHFL_CPARMS_FLUSH (2) + +/** + * SHFL_FN_LIST + */ + +/** Listing information includes variable length RTDIRENTRY[EX] structures. */ + +/** @todo might be necessary for future. */ +#define SHFL_LIST_NONE 0 +#define SHFL_LIST_RETURN_ONE 1 + +/** Parameters structure. */ +typedef struct _VBoxSFList +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to be listed. + */ + HGCMFunctionParameter handle; + + /** value32, in: + * List flags SHFL_LIST_*. + */ + HGCMFunctionParameter flags; + + /** value32, in/out: + * Bytes to be used for listing information/How many bytes were used. + */ + HGCMFunctionParameter cb; + + /** pointer, in/optional + * Points to SHFLSTRING buffer that specifies a search path. + */ + HGCMFunctionParameter path; + + /** pointer, out: + * Buffer to place listing information to. (SHFLDIRINFO) + */ + HGCMFunctionParameter buffer; + + /** value32, in/out: + * Indicates a key where the listing must be resumed. + * in: 0 means start from begin of object. + * out: 0 means listing completed. + */ + HGCMFunctionParameter resumePoint; + + /** pointer, out: + * Number of files returned + */ + HGCMFunctionParameter cFiles; + +} VBoxSFList; + +/** Number of parameters */ +#define SHFL_CPARMS_LIST (8) + + + +/** + * SHFL_FN_READLINK + */ + +/** Parameters structure. */ +typedef struct _VBoxSFReadLink +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter path; + + /** pointer, out: + * Buffer to place data to. + */ + HGCMFunctionParameter buffer; + +} VBoxSFReadLink; + +/** Number of parameters */ +#define SHFL_CPARMS_READLINK (3) + + + +/** + * SHFL_FN_INFORMATION + */ + +/** Mask of Set/Get bit. */ +#define SHFL_INFO_MODE_MASK (0x1) +/** Get information */ +#define SHFL_INFO_GET (0x0) +/** Set information */ +#define SHFL_INFO_SET (0x1) + +/** Get name of the object. */ +#define SHFL_INFO_NAME (0x2) +/** Set size of object (extend/trucate); only applies to file objects */ +#define SHFL_INFO_SIZE (0x4) +/** Get/Set file object info. */ +#define SHFL_INFO_FILE (0x8) +/** Get volume information. */ +#define SHFL_INFO_VOLUME (0x10) + +/** @todo different file info structures */ + + +/** Parameters structure. */ +typedef struct _VBoxSFInformation +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** value64, in: + * SHFLHANDLE of object to be listed. + */ + HGCMFunctionParameter handle; + + /** value32, in: + * SHFL_INFO_* + */ + HGCMFunctionParameter flags; + + /** value32, in/out: + * Bytes to be used for information/How many bytes were used. + */ + HGCMFunctionParameter cb; + + /** pointer, in/out: + * Information to be set/get (SHFLFSOBJINFO or SHFLSTRING). Do not forget + * to set the SHFLFSOBJINFO::Attr::enmAdditional for Get operation as well. + */ + HGCMFunctionParameter info; + +} VBoxSFInformation; + +/** Number of parameters */ +#define SHFL_CPARMS_INFORMATION (5) + + +/** + * SHFL_FN_REMOVE + */ + +#define SHFL_REMOVE_FILE (0x1) +#define SHFL_REMOVE_DIR (0x2) +#define SHFL_REMOVE_SYMLINK (0x4) + +/** Parameters structure. */ +typedef struct _VBoxSFRemove +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: + * Points to SHFLSTRING buffer. + */ + HGCMFunctionParameter path; + + /** value32, in: + * remove flags (file/directory) + */ + HGCMFunctionParameter flags; + +} VBoxSFRemove; + +#define SHFL_CPARMS_REMOVE (3) + + +/** + * SHFL_FN_RENAME + */ + +#define SHFL_RENAME_FILE (0x1) +#define SHFL_RENAME_DIR (0x2) +#define SHFL_RENAME_REPLACE_IF_EXISTS (0x4) + +/** Parameters structure. */ +typedef struct _VBoxSFRename +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: + * Points to SHFLSTRING src. + */ + HGCMFunctionParameter src; + + /** pointer, in: + * Points to SHFLSTRING dest. + */ + HGCMFunctionParameter dest; + + /** value32, in: + * rename flags (file/directory) + */ + HGCMFunctionParameter flags; + +} VBoxSFRename; + +#define SHFL_CPARMS_RENAME (4) + + +/** + * SHFL_FN_SYMLINK + */ + +/** Parameters structure. */ +typedef struct _VBoxSFSymlink +{ + VBGLIOCHGCMCALL callInfo; + + /** pointer, in: SHFLROOT + * Root handle of the mapping which name is queried. + */ + HGCMFunctionParameter root; + + /** pointer, in: + * Points to SHFLSTRING of path for the new symlink. + */ + HGCMFunctionParameter newPath; + + /** pointer, in: + * Points to SHFLSTRING of destination for symlink. + */ + HGCMFunctionParameter oldPath; + + /** pointer, out: + * Information about created symlink. + */ + HGCMFunctionParameter info; + +} VBoxSFSymlink; + +#define SHFL_CPARMS_SYMLINK (4) + + + +/** + * SHFL_FN_ADD_MAPPING + * Host call, no guest structure is used. + */ + +/** mapping is writable */ +#define SHFL_ADD_MAPPING_F_WRITABLE (RT_BIT_32(0)) +/** mapping is automounted by the guest */ +#define SHFL_ADD_MAPPING_F_AUTOMOUNT (RT_BIT_32(1)) +/** allow the guest to create symlinks */ +#define SHFL_ADD_MAPPING_F_CREATE_SYMLINKS (RT_BIT_32(2)) +/** mapping is actually missing on the host */ +#define SHFL_ADD_MAPPING_F_MISSING (RT_BIT_32(3)) + +#define SHFL_CPARMS_ADD_MAPPING (3) + +/** + * SHFL_FN_REMOVE_MAPPING + * Host call, no guest structure is used. + */ + +#define SHFL_CPARMS_REMOVE_MAPPING (1) + + +/** + * SHFL_FN_SET_STATUS_LED + * Host call, no guest structure is used. + */ + +#define SHFL_CPARMS_SET_STATUS_LED (1) + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/VBox/types.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/VBox/types.h @@ -0,0 +1,1082 @@ +/** @file + * VirtualBox - Types. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___VBox_types_h +#define ___VBox_types_h + +#include +#include + + +/** @defgroup grp_types VBox Basic Types + * @{ + */ + + +/** @defgroup grp_types_both Common Guest and Host Context Basic Types + * @{ + */ + + +/** @defgroup grp_types_hc Host Context Basic Types + * @{ + */ + +/** @} */ + + +/** @defgroup grp_types_gc Guest Context Basic Types + * @{ + */ + +/** @} */ + + +/** Pointer to per support driver session data. + * (The data is a R0 entity and private to the the R0 SUP part. All + * other should consider this a sort of handle.) */ +typedef R0PTRTYPE(struct SUPDRVSESSION *) PSUPDRVSESSION; + +/** Event semaphore handle. Ring-0 / ring-3. */ +typedef R0PTRTYPE(struct SUPSEMEVENTHANDLE *) SUPSEMEVENT; +/** Pointer to an event semaphore handle. */ +typedef SUPSEMEVENT *PSUPSEMEVENT; +/** Nil event semaphore handle. */ +#define NIL_SUPSEMEVENT ((SUPSEMEVENT)0) + +/** Multiple release event semaphore handle. Ring-0 / ring-3. */ +typedef R0PTRTYPE(struct SUPSEMEVENTMULTIHANDLE *) SUPSEMEVENTMULTI; +/** Pointer to an multiple release event semaphore handle. */ +typedef SUPSEMEVENTMULTI *PSUPSEMEVENTMULTI; +/** Nil multiple release event semaphore handle. */ +#define NIL_SUPSEMEVENTMULTI ((SUPSEMEVENTMULTI)0) + + +/** Pointer to a VM. */ +typedef struct VM *PVM; +/** Pointer to a VM - Ring-0 Ptr. */ +typedef R0PTRTYPE(struct VM *) PVMR0; +/** Pointer to a VM - Ring-3 Ptr. */ +typedef R3PTRTYPE(struct VM *) PVMR3; +/** Pointer to a VM - RC Ptr. */ +typedef RCPTRTYPE(struct VM *) PVMRC; + +/** Pointer to a virtual CPU structure. */ +typedef struct VMCPU * PVMCPU; +/** Pointer to a const virtual CPU structure. */ +typedef const struct VMCPU * PCVMCPU; +/** Pointer to a virtual CPU structure - Ring-3 Ptr. */ +typedef R3PTRTYPE(struct VMCPU *) PVMCPUR3; +/** Pointer to a virtual CPU structure - Ring-0 Ptr. */ +typedef R0PTRTYPE(struct VMCPU *) PVMCPUR0; +/** Pointer to a virtual CPU structure - RC Ptr. */ +typedef RCPTRTYPE(struct VMCPU *) PVMCPURC; + +/** Pointer to a ring-0 (global) VM structure. */ +typedef R0PTRTYPE(struct GVM *) PGVM; + +/** Pointer to a ring-3 (user mode) VM structure. */ +typedef R3PTRTYPE(struct UVM *) PUVM; + +/** Pointer to a ring-3 (user mode) VMCPU structure. */ +typedef R3PTRTYPE(struct UVMCPU *) PUVMCPU; + +/** Virtual CPU ID. */ +typedef uint32_t VMCPUID; +/** Pointer to a virtual CPU ID. */ +typedef VMCPUID *PVMCPUID; +/** @name Special CPU ID values. + * Most of these are for request scheduling. + * + * @{ */ +/** All virtual CPUs. */ +#define VMCPUID_ALL UINT32_C(0xfffffff2) +/** All virtual CPUs, descending order. */ +#define VMCPUID_ALL_REVERSE UINT32_C(0xfffffff3) +/** Any virtual CPU. + * Intended for scheduling a VM request or some other task. */ +#define VMCPUID_ANY UINT32_C(0xfffffff4) +/** Any virtual CPU; always queue for future execution. + * Intended for scheduling a VM request or some other task. */ +#define VMCPUID_ANY_QUEUE UINT32_C(0xfffffff5) +/** The NIL value. */ +#define NIL_VMCPUID UINT32_C(0xfffffffd) +/** @} */ + +/** + * Virtual CPU set. + */ +typedef struct VMCPUSET +{ + /** The bitmap data. */ + uint32_t au32Bitmap[8 /*256/32*/]; +} VMCPUSET; +/** Pointer to a Virtual CPU set. */ +typedef VMCPUSET *PVMCPUSET; +/** Pointer to a const Virtual CPU set. */ +typedef VMCPUSET const *PCVMCPUSET; + + +/** + * VM State + */ +typedef enum VMSTATE +{ + /** The VM is being created. */ + VMSTATE_CREATING = 0, + /** The VM is created. */ + VMSTATE_CREATED, + /** The VM state is being loaded from file. */ + VMSTATE_LOADING, + /** The VM is being powered on */ + VMSTATE_POWERING_ON, + /** The VM is being resumed. */ + VMSTATE_RESUMING, + /** The VM is runnning. */ + VMSTATE_RUNNING, + /** Live save: The VM is running and the state is being saved. */ + VMSTATE_RUNNING_LS, + /** Fault Tolerance: The VM is running and the state is being synced. */ + VMSTATE_RUNNING_FT, + /** The VM is being reset. */ + VMSTATE_RESETTING, + /** Live save: The VM is being reset and immediately suspended. */ + VMSTATE_RESETTING_LS, + /** The VM is being soft/warm reset. */ + VMSTATE_SOFT_RESETTING, + /** Live save: The VM is being soft/warm reset (not suspended afterwards). */ + VMSTATE_SOFT_RESETTING_LS, + /** The VM is being suspended. */ + VMSTATE_SUSPENDING, + /** Live save: The VM is being suspended during a live save operation, either as + * part of the normal flow or VMR3Reset. */ + VMSTATE_SUSPENDING_LS, + /** Live save: The VM is being suspended by VMR3Suspend during live save. */ + VMSTATE_SUSPENDING_EXT_LS, + /** The VM is suspended. */ + VMSTATE_SUSPENDED, + /** Live save: The VM has been suspended and is waiting for the live save + * operation to move on. */ + VMSTATE_SUSPENDED_LS, + /** Live save: The VM has been suspended by VMR3Suspend during a live save. */ + VMSTATE_SUSPENDED_EXT_LS, + /** The VM is suspended and its state is being saved by EMT(0). (See SSM) */ + VMSTATE_SAVING, + /** The VM is being debugged. (See DBGF.) */ + VMSTATE_DEBUGGING, + /** Live save: The VM is being debugged while the live phase is going on. */ + VMSTATE_DEBUGGING_LS, + /** The VM is being powered off. */ + VMSTATE_POWERING_OFF, + /** Live save: The VM is being powered off and the save cancelled. */ + VMSTATE_POWERING_OFF_LS, + /** The VM is switched off, awaiting destruction. */ + VMSTATE_OFF, + /** Live save: Waiting for cancellation and transition to VMSTATE_OFF. */ + VMSTATE_OFF_LS, + /** The VM is powered off because of a fatal error. */ + VMSTATE_FATAL_ERROR, + /** Live save: Waiting for cancellation and transition to FatalError. */ + VMSTATE_FATAL_ERROR_LS, + /** The VM is in guru meditation over a fatal failure. */ + VMSTATE_GURU_MEDITATION, + /** Live save: Waiting for cancellation and transition to GuruMeditation. */ + VMSTATE_GURU_MEDITATION_LS, + /** The VM is screwed because of a failed state loading. */ + VMSTATE_LOAD_FAILURE, + /** The VM is being destroyed. */ + VMSTATE_DESTROYING, + /** Terminated. */ + VMSTATE_TERMINATED, + /** hack forcing the size of the enum to 32-bits. */ + VMSTATE_MAKE_32BIT_HACK = 0x7fffffff +} VMSTATE; + +/** @def VBOXSTRICTRC_STRICT_ENABLED + * Indicates that VBOXSTRICTRC is in strict mode. + */ +#if defined(__cplusplus) \ + && ARCH_BITS == 64 /* cdecl requires classes and structs as hidden params. */ \ + && !defined(_MSC_VER) /* trouble similar to 32-bit gcc. */ \ + && ( defined(RT_STRICT) \ + || defined(VBOX_STRICT) \ + || defined(DEBUG) \ + || defined(DOXYGEN_RUNNING) ) +# define VBOXSTRICTRC_STRICT_ENABLED 1 +#endif + +/** We need RTERR_STRICT_RC. */ +#if defined(VBOXSTRICTRC_STRICT_ENABLED) && !defined(RTERR_STRICT_RC) +# define RTERR_STRICT_RC 1 +#endif + +/** + * Strict VirtualBox status code. + * + * This is normally an 32-bit integer and the only purpose of the type is to + * highlight the special handling that is required. But in strict build it is a + * class that causes compilation and runtime errors for some of the incorrect + * handling. + */ +#ifdef VBOXSTRICTRC_STRICT_ENABLED +struct VBOXSTRICTRC +{ +protected: + /** The status code. */ + int32_t m_rc; + +public: + /** Default constructor setting the status to VERR_IPE_UNINITIALIZED_STATUS. */ + VBOXSTRICTRC() +#ifdef VERR_IPE_UNINITIALIZED_STATUS + : m_rc(VERR_IPE_UNINITIALIZED_STATUS) +#else + : m_rc(-233 /*VERR_IPE_UNINITIALIZED_STATUS*/) +#endif + { + } + + /** Constructor for normal integer status codes. */ + VBOXSTRICTRC(int32_t const rc) + : m_rc(rc) + { + } + + /** Getter that VBOXSTRICTRC_VAL can use. */ + int32_t getValue() const { return m_rc; } + + /** @name Comparison operators + * @{ */ + bool operator==(int32_t rc) const { return m_rc == rc; } + bool operator!=(int32_t rc) const { return m_rc != rc; } + bool operator<=(int32_t rc) const { return m_rc <= rc; } + bool operator>=(int32_t rc) const { return m_rc >= rc; } + bool operator<(int32_t rc) const { return m_rc < rc; } + bool operator>(int32_t rc) const { return m_rc > rc; } + + bool operator==(const VBOXSTRICTRC &rRc) const { return m_rc == rRc.m_rc; } + bool operator!=(const VBOXSTRICTRC &rRc) const { return m_rc != rRc.m_rc; } + bool operator<=(const VBOXSTRICTRC &rRc) const { return m_rc <= rRc.m_rc; } + bool operator>=(const VBOXSTRICTRC &rRc) const { return m_rc >= rRc.m_rc; } + bool operator<(const VBOXSTRICTRC &rRc) const { return m_rc < rRc.m_rc; } + bool operator>(const VBOXSTRICTRC &rRc) const { return m_rc > rRc.m_rc; } + /** @} */ + + /** Special automatic cast for RT_SUCCESS_NP. */ + operator RTErrStrictType2() const { return RTErrStrictType2(m_rc); } + +private: + /** @name Constructors that will prevent some of the bad types. + * @{ */ + VBOXSTRICTRC(uint8_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint16_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint32_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(uint64_t rc) : m_rc(-999) { NOREF(rc); } + + VBOXSTRICTRC(int8_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(int16_t rc) : m_rc(-999) { NOREF(rc); } + VBOXSTRICTRC(int64_t rc) : m_rc(-999) { NOREF(rc); } + /** @} */ +}; +# ifdef _MSC_VER +# pragma warning(disable:4190) +# endif +#else +typedef int32_t VBOXSTRICTRC; +#endif + +/** @def VBOXSTRICTRC_VAL + * Explicit getter. + * @param rcStrict The strict VirtualBox status code. + */ +#ifdef VBOXSTRICTRC_STRICT_ENABLED +# define VBOXSTRICTRC_VAL(rcStrict) ( (rcStrict).getValue() ) +#else +# define VBOXSTRICTRC_VAL(rcStrict) (rcStrict) +#endif + +/** @def VBOXSTRICTRC_TODO + * Returns that needs dealing with. + * @param rcStrict The strict VirtualBox status code. + */ +#define VBOXSTRICTRC_TODO(rcStrict) VBOXSTRICTRC_VAL(rcStrict) + + +/** Pointer to a PDM Base Interface. */ +typedef struct PDMIBASE *PPDMIBASE; +/** Pointer to a pointer to a PDM Base Interface. */ +typedef PPDMIBASE *PPPDMIBASE; + +/** Pointer to a PDM Device Instance. */ +typedef struct PDMDEVINS *PPDMDEVINS; +/** Pointer to a pointer to a PDM Device Instance. */ +typedef PPDMDEVINS *PPPDMDEVINS; +/** R3 pointer to a PDM Device Instance. */ +typedef R3PTRTYPE(PPDMDEVINS) PPDMDEVINSR3; +/** R0 pointer to a PDM Device Instance. */ +typedef R0PTRTYPE(PPDMDEVINS) PPDMDEVINSR0; +/** RC pointer to a PDM Device Instance. */ +typedef RCPTRTYPE(PPDMDEVINS) PPDMDEVINSRC; + +/** Pointer to a PDM PCI device structure. */ +typedef struct PDMPCIDEV *PPDMPCIDEV; + +/** Pointer to a PDM USB Device Instance. */ +typedef struct PDMUSBINS *PPDMUSBINS; +/** Pointer to a pointer to a PDM USB Device Instance. */ +typedef PPDMUSBINS *PPPDMUSBINS; + +/** Pointer to a PDM Driver Instance. */ +typedef struct PDMDRVINS *PPDMDRVINS; +/** Pointer to a pointer to a PDM Driver Instance. */ +typedef PPDMDRVINS *PPPDMDRVINS; +/** R3 pointer to a PDM Driver Instance. */ +typedef R3PTRTYPE(PPDMDRVINS) PPDMDRVINSR3; +/** R0 pointer to a PDM Driver Instance. */ +typedef R0PTRTYPE(PPDMDRVINS) PPDMDRVINSR0; +/** RC pointer to a PDM Driver Instance. */ +typedef RCPTRTYPE(PPDMDRVINS) PPDMDRVINSRC; + +/** Pointer to a PDM Service Instance. */ +typedef struct PDMSRVINS *PPDMSRVINS; +/** Pointer to a pointer to a PDM Service Instance. */ +typedef PPDMSRVINS *PPPDMSRVINS; + +/** Pointer to a PDM critical section. */ +typedef union PDMCRITSECT *PPDMCRITSECT; +/** Pointer to a const PDM critical section. */ +typedef const union PDMCRITSECT *PCPDMCRITSECT; + +/** Pointer to a PDM read/write critical section. */ +typedef union PDMCRITSECTRW *PPDMCRITSECTRW; +/** Pointer to a const PDM read/write critical section. */ +typedef union PDMCRITSECTRW const *PCPDMCRITSECTRW; + +/** R3 pointer to a timer. */ +typedef R3PTRTYPE(struct TMTIMER *) PTMTIMERR3; +/** Pointer to a R3 pointer to a timer. */ +typedef PTMTIMERR3 *PPTMTIMERR3; + +/** R0 pointer to a timer. */ +typedef R0PTRTYPE(struct TMTIMER *) PTMTIMERR0; +/** Pointer to a R3 pointer to a timer. */ +typedef PTMTIMERR0 *PPTMTIMERR0; + +/** RC pointer to a timer. */ +typedef RCPTRTYPE(struct TMTIMER *) PTMTIMERRC; +/** Pointer to a RC pointer to a timer. */ +typedef PTMTIMERRC *PPTMTIMERRC; + +/** Pointer to a timer. */ +typedef CTX_SUFF(PTMTIMER) PTMTIMER; +/** Pointer to a pointer to a timer. */ +typedef PTMTIMER *PPTMTIMER; + +/** SSM Operation handle. */ +typedef struct SSMHANDLE *PSSMHANDLE; +/** Pointer to a const SSM stream method table. */ +typedef struct SSMSTRMOPS const *PCSSMSTRMOPS; + +/** Pointer to a CPUMCTX. */ +typedef struct CPUMCTX *PCPUMCTX; +/** Pointer to a const CPUMCTX. */ +typedef const struct CPUMCTX *PCCPUMCTX; + +/** Pointer to a CPU context core. */ +typedef struct CPUMCTXCORE *PCPUMCTXCORE; +/** Pointer to a const CPU context core. */ +typedef const struct CPUMCTXCORE *PCCPUMCTXCORE; + +/** Pointer to a selector register. */ +typedef struct CPUMSELREG *PCPUMSELREG; +/** Pointer to a const selector register. */ +typedef const struct CPUMSELREG *PCCPUMSELREG; + +/** Pointer to selector hidden registers. + * @deprecated Replaced by PCPUMSELREG */ +typedef struct CPUMSELREG *PCPUMSELREGHID; +/** Pointer to const selector hidden registers. + * @deprecated Replaced by PCCPUMSELREG */ +typedef const struct CPUMSELREG *PCCPUMSELREGHID; + +/** @} */ + + +/** @defgroup grp_types_idt Interrupt Descriptor Table Entry. + * @todo This all belongs in x86.h! + * @{ */ + +/** @todo VBOXIDT -> VBOXDESCIDT, skip the complex variations. We'll never use them. */ + +/** IDT Entry, Task Gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_TASKGATE +{ + /** Reserved. */ + unsigned u16Reserved1 : 16; + /** Task Segment Selector. */ + unsigned u16TSS : 16; + /** More reserved. */ + unsigned u8Reserved2 : 8; + /** Fixed value bit 0 - Set to 1. */ + unsigned u1Fixed0 : 1; + /** Busy bit. */ + unsigned u1Busy : 1; + /** Fixed value bit 2 - Set to 1. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** Reserved. */ + unsigned u16Reserved3 : 16; +} VBOXIDTE_TASKGATE; +#pragma pack() +/** Pointer to IDT Entry, Task gate view. */ +typedef VBOXIDTE_TASKGATE *PVBOXIDTE_TASKGATE; + + +/** IDT Entry, Intertupt gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_INTERRUPTGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved2 : 5; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 1. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed6 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_INTERRUPTGATE; +#pragma pack() +/** Pointer to IDT Entry, Interrupt gate view. */ +typedef VBOXIDTE_INTERRUPTGATE *PVBOXIDTE_INTERRUPTGATE; + +/** IDT Entry, Trap Gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_TRAPGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved2 : 5; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 1. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 1. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed6 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_TRAPGATE; +#pragma pack() +/** Pointer to IDT Entry, Trap Gate view. */ +typedef VBOXIDTE_TRAPGATE *PVBOXIDTE_TRAPGATE; + +/** IDT Entry Generic view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE_GENERIC +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u5Reserved : 5; + /** IDT Type part one (not used for task gate). */ + unsigned u3Type1 : 3; + /** IDT Type part two. */ + unsigned u5Type2 : 5; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; +} VBOXIDTE_GENERIC; +#pragma pack() +/** Pointer to IDT Entry Generic view. */ +typedef VBOXIDTE_GENERIC *PVBOXIDTE_GENERIC; + +/** IDT Type1 value. (Reserved for task gate!) */ +#define VBOX_IDTE_TYPE1 0 +/** IDT Type2 value - Task gate. */ +#define VBOX_IDTE_TYPE2_TASK 0x5 +/** IDT Type2 value - 16 bit interrupt gate. */ +#define VBOX_IDTE_TYPE2_INT_16 0x6 +/** IDT Type2 value - 32 bit interrupt gate. */ +#define VBOX_IDTE_TYPE2_INT_32 0xe +/** IDT Type2 value - 16 bit trap gate. */ +#define VBOX_IDTE_TYPE2_TRAP_16 0x7 +/** IDT Type2 value - 32 bit trap gate. */ +#define VBOX_IDTE_TYPE2_TRAP_32 0xf + +/** IDT Entry. */ +#pragma pack(1) /* paranoia */ +typedef union VBOXIDTE +{ + /** Task gate view. */ + VBOXIDTE_TASKGATE Task; + /** Trap gate view. */ + VBOXIDTE_TRAPGATE Trap; + /** Interrupt gate view. */ + VBOXIDTE_INTERRUPTGATE Int; + /** Generic IDT view. */ + VBOXIDTE_GENERIC Gen; + + /** 8 bit unsigned integer view. */ + uint8_t au8[8]; + /** 16 bit unsigned integer view. */ + uint16_t au16[4]; + /** 32 bit unsigned integer view. */ + uint32_t au32[2]; + /** 64 bit unsigned integer view. */ + uint64_t au64; +} VBOXIDTE; +#pragma pack() +/** Pointer to IDT Entry. */ +typedef VBOXIDTE *PVBOXIDTE; +/** Pointer to IDT Entry. */ +typedef VBOXIDTE const *PCVBOXIDTE; + +/** IDT Entry, 64-bit mode, Intertupt gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_INTERRUPTGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Interrupt Stack Table Index. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed5 : 1; + /** Fixed value bit 6 - Set to 1. */ + unsigned u1Fixed6 : 1; + /** Fixed value bit 7 - Set to 1. */ + unsigned u1Fixed7 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed8 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_INTERRUPTGATE; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Interrupt gate view. */ +typedef VBOXIDTE64_INTERRUPTGATE *PVBOXIDTE64_INTERRUPTGATE; + +/** IDT Entry, 64-bit mode, Trap gate view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_TRAPGATE +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Interrupt Stack Table Index. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** Fixed value bit 2 - Set to 0. */ + unsigned u1Fixed2 : 1; + /** Fixed value bit 3 - Set to 0. */ + unsigned u1Fixed3 : 1; + /** Fixed value bit 4 - Set to 0. */ + unsigned u1Fixed4 : 1; + /** Fixed value bit 5 - Set to 1. */ + unsigned u1Fixed5 : 1; + /** Fixed value bit 6 - Set to 1. */ + unsigned u1Fixed6 : 1; + /** Fixed value bit 7 - Set to 1. */ + unsigned u1Fixed7 : 1; + /** Gate size, 1 = 32 bits, 0 = 16 bits. */ + unsigned u132BitGate : 1; + /** Fixed value bit 5 - Set to 0. */ + unsigned u1Fixed8 : 1; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_TRAPGATE; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Trap gate view. */ +typedef VBOXIDTE64_TRAPGATE *PVBOXIDTE64_TRAPGATE; + +/** IDT Entry, 64-bit mode, Generic view. */ +#pragma pack(1) /* paranoia */ +typedef struct VBOXIDTE64_GENERIC +{ + /** Low offset word. */ + unsigned u16OffsetLow : 16; + /** Segment Selector. */ + unsigned u16SegSel : 16; + /** Reserved. */ + unsigned u3Ist : 3; + /** Fixed value bit 0 - Set to 0. */ + unsigned u1Fixed0 : 1; + /** Fixed value bit 1 - Set to 0. */ + unsigned u1Fixed1 : 1; + /** IDT Type part one (not used for task gate). */ + unsigned u3Type1 : 3; + /** IDT Type part two. */ + unsigned u5Type2 : 5; + /** Descriptor Privilege level. */ + unsigned u2DPL : 2; + /** Present flag. */ + unsigned u1Present : 1; + /** High offset word. */ + unsigned u16OffsetHigh : 16; + /** Offset bits 32..63. */ + unsigned u32OffsetHigh64; + /** Reserved. */ + unsigned u32Reserved; +} VBOXIDTE64_GENERIC; +#pragma pack() +/** Pointer to IDT Entry, 64-bit mode, Generic view. */ +typedef VBOXIDTE64_GENERIC *PVBOXIDTE64_GENERIC; + +/** IDT Entry, 64-bit mode. */ +#pragma pack(1) /* paranoia */ +typedef union VBOXIDTE64 +{ + /** Trap gate view. */ + VBOXIDTE64_TRAPGATE Trap; + /** Interrupt gate view. */ + VBOXIDTE64_INTERRUPTGATE Int; + /** Generic IDT view. */ + VBOXIDTE64_GENERIC Gen; + + /** 8 bit unsigned integer view. */ + uint8_t au8[16]; + /** 16 bit unsigned integer view. */ + uint16_t au16[8]; + /** 32 bit unsigned integer view. */ + uint32_t au32[4]; + /** 64 bit unsigned integer view. */ + uint64_t au64[2]; +} VBOXIDTE64; +#pragma pack() +/** Pointer to IDT Entry. */ +typedef VBOXIDTE64 *PVBOXIDTE64; +/** Pointer to IDT Entry. */ +typedef VBOXIDTE64 const *PCVBOXIDTE64; + +#pragma pack(1) +/** IDTR */ +typedef struct VBOXIDTR +{ + /** Size of the IDT. */ + uint16_t cbIdt; + /** Address of the IDT. */ + uint64_t pIdt; +} VBOXIDTR, *PVBOXIDTR; +#pragma pack() + +/** @} */ + + +/** @def VBOXIDTE_OFFSET + * Return the offset of an IDT entry. + */ +#define VBOXIDTE_OFFSET(desc) \ + ( ((uint32_t)((desc).Gen.u16OffsetHigh) << 16) \ + | ( (desc).Gen.u16OffsetLow ) ) + +/** @def VBOXIDTE64_OFFSET + * Return the offset of an IDT entry. + */ +#define VBOXIDTE64_OFFSET(desc) \ + ( ((uint64_t)((desc).Gen.u32OffsetHigh64) << 32) \ + | ((uint32_t)((desc).Gen.u16OffsetHigh) << 16) \ + | ( (desc).Gen.u16OffsetLow ) ) + +#pragma pack(1) +/** GDTR */ +typedef struct VBOXGDTR +{ + /** Size of the GDT. */ + uint16_t cbGdt; + /** Address of the GDT. */ + uint64_t pGdt; +} VBOXGDTR; +#pragma pack() +/** Pointer to GDTR. */ +typedef VBOXGDTR *PVBOXGDTR; + +/** @} */ + + +/** + * 32-bit Task Segment used in raw mode. + * @todo Move this to SELM! Use X86TSS32 instead. + */ +#pragma pack(1) +typedef struct VBOXTSS +{ + /** 0x00 - Back link to previous task. (static) */ + RTSEL selPrev; + uint16_t padding1; + /** 0x04 - Ring-0 stack pointer. (static) */ + uint32_t esp0; + /** 0x08 - Ring-0 stack segment. (static) */ + RTSEL ss0; + uint16_t padding_ss0; + /** 0x0c - Ring-1 stack pointer. (static) */ + uint32_t esp1; + /** 0x10 - Ring-1 stack segment. (static) */ + RTSEL ss1; + uint16_t padding_ss1; + /** 0x14 - Ring-2 stack pointer. (static) */ + uint32_t esp2; + /** 0x18 - Ring-2 stack segment. (static) */ + RTSEL ss2; + uint16_t padding_ss2; + /** 0x1c - Page directory for the task. (static) */ + uint32_t cr3; + /** 0x20 - EIP before task switch. */ + uint32_t eip; + /** 0x24 - EFLAGS before task switch. */ + uint32_t eflags; + /** 0x28 - EAX before task switch. */ + uint32_t eax; + /** 0x2c - ECX before task switch. */ + uint32_t ecx; + /** 0x30 - EDX before task switch. */ + uint32_t edx; + /** 0x34 - EBX before task switch. */ + uint32_t ebx; + /** 0x38 - ESP before task switch. */ + uint32_t esp; + /** 0x3c - EBP before task switch. */ + uint32_t ebp; + /** 0x40 - ESI before task switch. */ + uint32_t esi; + /** 0x44 - EDI before task switch. */ + uint32_t edi; + /** 0x48 - ES before task switch. */ + RTSEL es; + uint16_t padding_es; + /** 0x4c - CS before task switch. */ + RTSEL cs; + uint16_t padding_cs; + /** 0x50 - SS before task switch. */ + RTSEL ss; + uint16_t padding_ss; + /** 0x54 - DS before task switch. */ + RTSEL ds; + uint16_t padding_ds; + /** 0x58 - FS before task switch. */ + RTSEL fs; + uint16_t padding_fs; + /** 0x5c - GS before task switch. */ + RTSEL gs; + uint16_t padding_gs; + /** 0x60 - LDTR before task switch. */ + RTSEL selLdt; + uint16_t padding_ldt; + /** 0x64 - Debug trap flag */ + uint16_t fDebugTrap; + /** 0x66 - Offset relative to the TSS of the start of the I/O Bitmap + * and the end of the interrupt redirection bitmap. */ + uint16_t offIoBitmap; + /** 0x68 - 32 bytes for the virtual interrupt redirection bitmap. (VME) */ + uint8_t IntRedirBitmap[32]; +} VBOXTSS; +#pragma pack() +/** Pointer to task segment. */ +typedef VBOXTSS *PVBOXTSS; +/** Pointer to const task segment. */ +typedef const VBOXTSS *PCVBOXTSS; + + +/** Pointer to a callback method table provided by the VM API user. */ +typedef struct VMM2USERMETHODS const *PCVMM2USERMETHODS; + + +/** + * Data transport buffer (scatter/gather) + */ +typedef struct PDMDATASEG +{ + /** Length of buffer in entry. */ + size_t cbSeg; + /** Pointer to the start of the buffer. */ + void *pvSeg; +} PDMDATASEG; +/** Pointer to a data transport segment. */ +typedef PDMDATASEG *PPDMDATASEG; +/** Pointer to a const data transport segment. */ +typedef PDMDATASEG const *PCPDMDATASEG; + + +/** + * Forms of generic segment offloading. + */ +typedef enum PDMNETWORKGSOTYPE +{ + /** Invalid zero value. */ + PDMNETWORKGSOTYPE_INVALID = 0, + /** TCP/IPv4 - no CWR/ECE encoding. */ + PDMNETWORKGSOTYPE_IPV4_TCP, + /** TCP/IPv6 - no CWR/ECE encoding. */ + PDMNETWORKGSOTYPE_IPV6_TCP, + /** UDP/IPv4. */ + PDMNETWORKGSOTYPE_IPV4_UDP, + /** UDP/IPv6. */ + PDMNETWORKGSOTYPE_IPV6_UDP, + /** TCP/IPv6 over IPv4 tunneling - no CWR/ECE encoding. + * The header offsets and sizes relates to IPv4 and TCP, the IPv6 header is + * figured out as needed. + * @todo Needs checking against facts, this is just an outline of the idea. */ + PDMNETWORKGSOTYPE_IPV4_IPV6_TCP, + /** UDP/IPv6 over IPv4 tunneling. + * The header offsets and sizes relates to IPv4 and UDP, the IPv6 header is + * figured out as needed. + * @todo Needs checking against facts, this is just an outline of the idea. */ + PDMNETWORKGSOTYPE_IPV4_IPV6_UDP, + /** The end of valid GSO types. */ + PDMNETWORKGSOTYPE_END +} PDMNETWORKGSOTYPE; + + +/** + * Generic segment offloading context. + * + * We generally follow the E1000 specs wrt to which header fields we change. + * However the GSO type implies where the checksum fields are and that they are + * always updated from scratch (no half done pseudo checksums). + * + * @remarks This is part of the internal network GSO packets. Take great care + * when making changes. The size is expected to be exactly 8 bytes. + */ +typedef struct PDMNETWORKGSO +{ + /** The type of segmentation offloading we're performing (PDMNETWORKGSOTYPE). */ + uint8_t u8Type; + /** The total header size. */ + uint8_t cbHdrsTotal; + /** The max segment size (MSS) to apply. */ + uint16_t cbMaxSeg; + + /** Offset of the first header (IPv4 / IPv6). 0 if not not needed. */ + uint8_t offHdr1; + /** Offset of the second header (TCP / UDP). 0 if not not needed. */ + uint8_t offHdr2; + /** The header size used for segmentation (equal to offHdr2 in UFO). */ + uint8_t cbHdrsSeg; + /** Unused. */ + uint8_t u8Unused; +} PDMNETWORKGSO; +/** Pointer to a GSO context. */ +typedef PDMNETWORKGSO *PPDMNETWORKGSO; +/** Pointer to a const GSO context. */ +typedef PDMNETWORKGSO const *PCPDMNETWORKGSO; + + +/** + * The current ROM page protection. + * + * @remarks This is part of the saved state. + */ +typedef enum PGMROMPROT +{ + /** The customary invalid value. */ + PGMROMPROT_INVALID = 0, + /** Read from the virgin ROM page, ignore writes. + * Map the virgin page, use write access handler to ignore writes. */ + PGMROMPROT_READ_ROM_WRITE_IGNORE, + /** Read from the virgin ROM page, write to the shadow RAM. + * Map the virgin page, use write access handler to change the shadow RAM. */ + PGMROMPROT_READ_ROM_WRITE_RAM, + /** Read from the shadow ROM page, ignore writes. + * Map the shadow page read-only, use write access handler to ignore writes. */ + PGMROMPROT_READ_RAM_WRITE_IGNORE, + /** Read from the shadow ROM page, ignore writes. + * Map the shadow page read-write, disabled write access handler. */ + PGMROMPROT_READ_RAM_WRITE_RAM, + /** The end of valid values. */ + PGMROMPROT_END, + /** The usual 32-bit type size hack. */ + PGMROMPROT_32BIT_HACK = 0x7fffffff +} PGMROMPROT; + + +/** + * Page mapping lock. + */ +typedef struct PGMPAGEMAPLOCK +{ +#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) + /** The locked page. */ + void *pvPage; + /** Pointer to the CPU that made the mapping. + * In ring-0 and raw-mode context we don't intend to ever allow long term + * locking and this is a way of making sure we're still on the same CPU. */ + PVMCPU pVCpu; +#else + /** Pointer to the PGMPAGE and lock type. + * bit-0 abuse: set=write, clear=read. */ + uintptr_t uPageAndType; +/** Read lock type value. */ +# define PGMPAGEMAPLOCK_TYPE_READ ((uintptr_t)0) +/** Write lock type value. */ +# define PGMPAGEMAPLOCK_TYPE_WRITE ((uintptr_t)1) +/** Lock type mask. */ +# define PGMPAGEMAPLOCK_TYPE_MASK ((uintptr_t)1) + /** Pointer to the PGMCHUNKR3MAP. */ + void *pvMap; +#endif +} PGMPAGEMAPLOCK; +/** Pointer to a page mapping lock. */ +typedef PGMPAGEMAPLOCK *PPGMPAGEMAPLOCK; + + +/** Pointer to a info helper callback structure. */ +typedef struct DBGFINFOHLP *PDBGFINFOHLP; +/** Pointer to a const info helper callback structure. */ +typedef const struct DBGFINFOHLP *PCDBGFINFOHLP; + +/** Pointer to a const register descriptor. */ +typedef struct DBGFREGDESC const *PCDBGFREGDESC; + + +/** Configuration manager tree node - A key. */ +typedef struct CFGMNODE *PCFGMNODE; + +/** Configuration manager tree leaf - A value. */ +typedef struct CFGMLEAF *PCFGMLEAF; + + +/** + * CPU modes. + */ +typedef enum CPUMMODE +{ + /** The usual invalid zero entry. */ + CPUMMODE_INVALID = 0, + /** Real mode. */ + CPUMMODE_REAL, + /** Protected mode (32-bit). */ + CPUMMODE_PROTECTED, + /** Long mode (64-bit). */ + CPUMMODE_LONG +} CPUMMODE; + + +/** + * CPU mode flags (DISSTATE::mode). + */ +typedef enum DISCPUMODE +{ + DISCPUMODE_INVALID = 0, + DISCPUMODE_16BIT, + DISCPUMODE_32BIT, + DISCPUMODE_64BIT, + /** hack forcing the size of the enum to 32-bits. */ + DISCPUMODE_MAKE_32BIT_HACK = 0x7fffffff +} DISCPUMODE; + +/** Pointer to the disassembler state. */ +typedef struct DISSTATE *PDISSTATE; +/** Pointer to a const disassembler state. */ +typedef struct DISSTATE const *PCDISSTATE; + +/** @deprecated PDISSTATE and change pCpu and pDisState to pDis. */ +typedef PDISSTATE PDISCPUSTATE; +/** @deprecated PCDISSTATE and change pCpu and pDisState to pDis. */ +typedef PCDISSTATE PCDISCPUSTATE; + + +/** @} */ + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/alloc.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/alloc.h @@ -0,0 +1,33 @@ +/** @file + * IPRT - Memory Allocation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_alloc_h +#define ___iprt_alloc_h + +/* Forwarding to the canonical header. */ +#include + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/asm-amd64-x86.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/asm-amd64-x86.h @@ -0,0 +1,3362 @@ +/** @file + * IPRT - AMD64 and x86 Specific Assembly Functions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_amd64_x86_h +#define ___iprt_asm_amd64_x86_h + +#include +#include +#if !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) +# error "Not on AMD64 or x86" +#endif + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(_ReadWriteBarrier) +# pragma intrinsic(__cpuid) +# pragma intrinsic(_enable) +# pragma intrinsic(_disable) +# pragma intrinsic(__rdtsc) +# pragma intrinsic(__readmsr) +# pragma intrinsic(__writemsr) +# pragma intrinsic(__outbyte) +# pragma intrinsic(__outbytestring) +# pragma intrinsic(__outword) +# pragma intrinsic(__outwordstring) +# pragma intrinsic(__outdword) +# pragma intrinsic(__outdwordstring) +# pragma intrinsic(__inbyte) +# pragma intrinsic(__inbytestring) +# pragma intrinsic(__inword) +# pragma intrinsic(__inwordstring) +# pragma intrinsic(__indword) +# pragma intrinsic(__indwordstring) +# pragma intrinsic(__invlpg) +# pragma intrinsic(__wbinvd) +# pragma intrinsic(__readcr0) +# pragma intrinsic(__readcr2) +# pragma intrinsic(__readcr3) +# pragma intrinsic(__readcr4) +# pragma intrinsic(__writecr0) +# pragma intrinsic(__writecr3) +# pragma intrinsic(__writecr4) +# pragma intrinsic(__readdr) +# pragma intrinsic(__writedr) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(__readcr8) +# pragma intrinsic(__writecr8) +# endif +# if RT_INLINE_ASM_USES_INTRIN >= 14 +# pragma intrinsic(__halt) +# endif +# if RT_INLINE_ASM_USES_INTRIN >= 15 +# pragma intrinsic(__readeflags) +# pragma intrinsic(__writeeflags) +# pragma intrinsic(__rdtscp) +# endif +#endif + + +/* + * Include #pragma aux definitions for Watcom C/C++. + */ +#if defined(__WATCOMC__) && ARCH_BITS == 16 +# include "asm-amd64-x86-watcom-16.h" +#elif defined(__WATCOMC__) && ARCH_BITS == 32 +# include "asm-amd64-x86-watcom-32.h" +#endif + + +/** @defgroup grp_rt_asm_amd64_x86 AMD64 and x86 Specific ASM Routines + * @ingroup grp_rt_asm + * @{ + */ + +/** @todo find a more proper place for these structures? */ + +#pragma pack(1) +/** IDTR */ +typedef struct RTIDTR +{ + /** Size of the IDT. */ + uint16_t cbIdt; + /** Address of the IDT. */ +#if ARCH_BITS != 64 + uint32_t pIdt; +#else + uint64_t pIdt; +#endif +} RTIDTR, RT_FAR *PRTIDTR; +#pragma pack() + +#pragma pack(1) +/** @internal */ +typedef struct RTIDTRALIGNEDINT +{ + /** Alignment padding. */ + uint16_t au16Padding[ARCH_BITS == 64 ? 3 : 1]; + /** The IDTR structure. */ + RTIDTR Idtr; +} RTIDTRALIGNEDINT; +#pragma pack() + +/** Wrapped RTIDTR for preventing misalignment exceptions. */ +typedef union RTIDTRALIGNED +{ + /** Try make sure this structure has optimal alignment. */ + uint64_t auAlignmentHack[ARCH_BITS == 64 ? 2 : 1]; + /** Aligned structure. */ + RTIDTRALIGNEDINT s; +} RTIDTRALIGNED; +AssertCompileSize(RTIDTRALIGNED, ((ARCH_BITS == 64) + 1) * 8); +/** Pointer to a an RTIDTR alignment wrapper. */ +typedef RTIDTRALIGNED RT_FAR *PRIDTRALIGNED; + + +#pragma pack(1) +/** GDTR */ +typedef struct RTGDTR +{ + /** Size of the GDT. */ + uint16_t cbGdt; + /** Address of the GDT. */ +#if ARCH_BITS != 64 + uint32_t pGdt; +#else + uint64_t pGdt; +#endif +} RTGDTR, RT_FAR *PRTGDTR; +#pragma pack() + +#pragma pack(1) +/** @internal */ +typedef struct RTGDTRALIGNEDINT +{ + /** Alignment padding. */ + uint16_t au16Padding[ARCH_BITS == 64 ? 3 : 1]; + /** The GDTR structure. */ + RTGDTR Gdtr; +} RTGDTRALIGNEDINT; +#pragma pack() + +/** Wrapped RTGDTR for preventing misalignment exceptions. */ +typedef union RTGDTRALIGNED +{ + /** Try make sure this structure has optimal alignment. */ + uint64_t auAlignmentHack[ARCH_BITS == 64 ? 2 : 1]; + /** Aligned structure. */ + RTGDTRALIGNEDINT s; +} RTGDTRALIGNED; +AssertCompileSize(RTIDTRALIGNED, ((ARCH_BITS == 64) + 1) * 8); +/** Pointer to a an RTGDTR alignment wrapper. */ +typedef RTGDTRALIGNED RT_FAR *PRGDTRALIGNED; + + +/** + * Gets the content of the IDTR CPU register. + * @param pIdtr Where to store the IDTR contents. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMGetIDTR(PRTIDTR pIdtr); +#else +DECLINLINE(void) ASMGetIDTR(PRTIDTR pIdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sidt %0" : "=m" (*pIdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pIdtr] + sidt [rax] +# else + mov eax, [pIdtr] + sidt [eax] +# endif + } +# endif +} +#endif + + +/** + * Gets the content of the IDTR.LIMIT CPU register. + * @returns IDTR limit. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint16_t) ASMGetIdtrLimit(void); +#else +DECLINLINE(uint16_t) ASMGetIdtrLimit(void) +{ + RTIDTRALIGNED TmpIdtr; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sidt %0" : "=m" (TmpIdtr.s.Idtr)); +# else + __asm + { + sidt [TmpIdtr.s.Idtr] + } +# endif + return TmpIdtr.s.Idtr.cbIdt; +} +#endif + + +/** + * Sets the content of the IDTR CPU register. + * @param pIdtr Where to load the IDTR contents from + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetIDTR(const RTIDTR RT_FAR *pIdtr); +#else +DECLINLINE(void) ASMSetIDTR(const RTIDTR RT_FAR *pIdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lidt %0" : : "m" (*pIdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pIdtr] + lidt [rax] +# else + mov eax, [pIdtr] + lidt [eax] +# endif + } +# endif +} +#endif + + +/** + * Gets the content of the GDTR CPU register. + * @param pGdtr Where to store the GDTR contents. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMGetGDTR(PRTGDTR pGdtr); +#else +DECLINLINE(void) ASMGetGDTR(PRTGDTR pGdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sgdt %0" : "=m" (*pGdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pGdtr] + sgdt [rax] +# else + mov eax, [pGdtr] + sgdt [eax] +# endif + } +# endif +} +#endif + + +/** + * Sets the content of the GDTR CPU register. + * @param pGdtr Where to load the GDTR contents from + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetGDTR(const RTGDTR RT_FAR *pGdtr); +#else +DECLINLINE(void) ASMSetGDTR(const RTGDTR RT_FAR *pGdtr) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lgdt %0" : : "m" (*pGdtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pGdtr] + lgdt [rax] +# else + mov eax, [pGdtr] + lgdt [eax] +# endif + } +# endif +} +#endif + + + +/** + * Get the cs register. + * @returns cs. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetCS(void); +#else +DECLINLINE(RTSEL) ASMGetCS(void) +{ + RTSEL SelCS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%cs, %0\n\t" : "=r" (SelCS)); +# else + __asm + { + mov ax, cs + mov [SelCS], ax + } +# endif + return SelCS; +} +#endif + + +/** + * Get the DS register. + * @returns DS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetDS(void); +#else +DECLINLINE(RTSEL) ASMGetDS(void) +{ + RTSEL SelDS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%ds, %0\n\t" : "=r" (SelDS)); +# else + __asm + { + mov ax, ds + mov [SelDS], ax + } +# endif + return SelDS; +} +#endif + + +/** + * Get the ES register. + * @returns ES. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetES(void); +#else +DECLINLINE(RTSEL) ASMGetES(void) +{ + RTSEL SelES; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%es, %0\n\t" : "=r" (SelES)); +# else + __asm + { + mov ax, es + mov [SelES], ax + } +# endif + return SelES; +} +#endif + + +/** + * Get the FS register. + * @returns FS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetFS(void); +#else +DECLINLINE(RTSEL) ASMGetFS(void) +{ + RTSEL SelFS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%fs, %0\n\t" : "=r" (SelFS)); +# else + __asm + { + mov ax, fs + mov [SelFS], ax + } +# endif + return SelFS; +} +# endif + + +/** + * Get the GS register. + * @returns GS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetGS(void); +#else +DECLINLINE(RTSEL) ASMGetGS(void) +{ + RTSEL SelGS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%gs, %0\n\t" : "=r" (SelGS)); +# else + __asm + { + mov ax, gs + mov [SelGS], ax + } +# endif + return SelGS; +} +#endif + + +/** + * Get the SS register. + * @returns SS. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetSS(void); +#else +DECLINLINE(RTSEL) ASMGetSS(void) +{ + RTSEL SelSS; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movw %%ss, %0\n\t" : "=r" (SelSS)); +# else + __asm + { + mov ax, ss + mov [SelSS], ax + } +# endif + return SelSS; +} +#endif + + +/** + * Get the TR register. + * @returns TR. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetTR(void); +#else +DECLINLINE(RTSEL) ASMGetTR(void) +{ + RTSEL SelTR; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("str %w0\n\t" : "=r" (SelTR)); +# else + __asm + { + str ax + mov [SelTR], ax + } +# endif + return SelTR; +} +#endif + + +/** + * Get the LDTR register. + * @returns LDTR. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(RTSEL) ASMGetLDTR(void); +#else +DECLINLINE(RTSEL) ASMGetLDTR(void) +{ + RTSEL SelLDTR; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("sldt %w0\n\t" : "=r" (SelLDTR)); +# else + __asm + { + sldt ax + mov [SelLDTR], ax + } +# endif + return SelLDTR; +} +#endif + + +/** + * Get the access rights for the segment selector. + * + * @returns The access rights on success or UINT32_MAX on failure. + * @param uSel The selector value. + * + * @remarks Using UINT32_MAX for failure is chosen because valid access rights + * always have bits 0:7 as 0 (on both Intel & AMD). + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMGetSegAttr(uint32_t uSel); +#else +DECLINLINE(uint32_t) ASMGetSegAttr(uint32_t uSel) +{ + uint32_t uAttr; + /* LAR only accesses 16-bit of the source operand, but eax for the + destination operand is required for getting the full 32-bit access rights. */ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lar %1, %%eax\n\t" + "jz done%=\n\t" + "movl $0xffffffff, %%eax\n\t" + "done%=:\n\t" + "movl %%eax, %0\n\t" + : "=r" (uAttr) + : "r" (uSel) + : "cc", "%eax"); +# else + __asm + { + lar eax, [uSel] + jz done + mov eax, 0ffffffffh + done: + mov [uAttr], eax + } +# endif + return uAttr; +} +#endif + + +/** + * Get the [RE]FLAGS register. + * @returns [RE]FLAGS. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMGetFlags(void); +#else +DECLINLINE(RTCCUINTREG) ASMGetFlags(void) +{ + RTCCUINTREG uFlags; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "popq %0\n\t" + : "=r" (uFlags)); +# else + __asm__ __volatile__("pushfl\n\t" + "popl %0\n\t" + : "=r" (uFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + uFlags = __readeflags(); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + pushfq + pop [uFlags] +# else + pushfd + pop [uFlags] +# endif + } +# endif + return uFlags; +} +#endif + + +/** + * Set the [RE]FLAGS register. + * @param uFlags The new [RE]FLAGS value. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(void) ASMSetFlags(RTCCUINTREG uFlags); +#else +DECLINLINE(void) ASMSetFlags(RTCCUINTREG uFlags) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushq %0\n\t" + "popfq\n\t" + : : "g" (uFlags)); +# else + __asm__ __volatile__("pushl %0\n\t" + "popfl\n\t" + : : "g" (uFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + __writeeflags(uFlags); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + push [uFlags] + popfq +# else + push [uFlags] + popfd +# endif + } +# endif +} +#endif + + +/** + * Modifies the [RE]FLAGS register. + * @returns Original value. + * @param fAndEfl Flags to keep (applied first). + * @param fOrEfl Flags to be set. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMChangeFlags(RTCCUINTREG fAndEfl, RTCCUINTREG fOrEfl); +#else +DECLINLINE(RTCCUINTREG) ASMChangeFlags(RTCCUINTREG fAndEfl, RTCCUINTREG fOrEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "andq %0, %1\n\t" + "orq %3, %1\n\t" + "mov %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl), + "=r" (fAndEfl) + : "1" (fAndEfl), + "rn" (fOrEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "andl %1, (%%esp)\n\t" + "orl %2, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl), + "rn" (fOrEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags((fOldEfl & fAndEfl) | fOrEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [fAndEfl] + mov rcx, [fOrEfl] + pushfq + mov rax, [rsp] + and rdx, rax + or rdx, rcx + mov [rsp], rdx + popfq + mov [fOldEfl], rax +# else + mov edx, [fAndEfl] + mov ecx, [fOrEfl] + pushfd + mov eax, [esp] + and edx, eax + or edx, ecx + mov [esp], edx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Modifies the [RE]FLAGS register by ORing in one or more flags. + * @returns Original value. + * @param fOrEfl The flags to be set (ORed in). + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMAddFlags(RTCCUINTREG fOrEfl); +#else +DECLINLINE(RTCCUINTREG) ASMAddFlags(RTCCUINTREG fOrEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "orq %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl) + : "rn" (fOrEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "orl %1, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fOrEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags(fOldEfl | fOrEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rcx, [fOrEfl] + pushfq + mov rdx, [rsp] + or [rsp], rcx + popfq + mov [fOldEfl], rax +# else + mov ecx, [fOrEfl] + pushfd + mov edx, [esp] + or [esp], ecx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Modifies the [RE]FLAGS register by AND'ing out one or more flags. + * @returns Original value. + * @param fAndEfl The flags to keep. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(RTCCUINTREG) ASMClearFlags(RTCCUINTREG fAndEfl); +#else +DECLINLINE(RTCCUINTREG) ASMClearFlags(RTCCUINTREG fAndEfl) +{ + RTCCUINTREG fOldEfl; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "movq (%%rsp), %0\n\t" + "andq %1, (%%rsp)\n\t" + "popfq\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl) ); +# else + __asm__ __volatile__("pushfl\n\t" + "movl (%%esp), %0\n\t" + "andl %1, (%%esp)\n\t" + "popfl\n\t" + : "=&r" (fOldEfl) + : "rn" (fAndEfl) ); +# endif +# elif RT_INLINE_ASM_USES_INTRIN >= 15 + fOldEfl = __readeflags(); + __writeeflags(fOldEfl & fAndEfl); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [fAndEfl] + pushfq + mov rdx, [rsp] + and [rsp], rdx + popfq + mov [fOldEfl], rax +# else + mov edx, [fAndEfl] + pushfd + mov edx, [esp] + and [esp], edx + popfd + mov [fOldEfl], eax +# endif + } +# endif + return fOldEfl; +} +#endif + + +/** + * Gets the content of the CPU timestamp counter register. + * + * @returns TSC. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMReadTSC(void); +#else +DECLINLINE(uint64_t) ASMReadTSC(void) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdtsc\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi)); +# else +# if RT_INLINE_ASM_USES_INTRIN + u.u = __rdtsc(); +# else + __asm + { + rdtsc + mov [u.s.Lo], eax + mov [u.s.Hi], edx + } +# endif +# endif + return u.u; +} +#endif + + +/** + * Gets the content of the CPU timestamp counter register and the + * assoicated AUX value. + * + * @returns TSC. + * @param puAux Where to store the AUX value. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(uint64_t) ASMReadTscWithAux(uint32_t RT_FAR *puAux); +#else +DECLINLINE(uint64_t) ASMReadTscWithAux(uint32_t RT_FAR *puAux) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + /* rdtscp is not supported by ancient linux build VM of course :-( */ + /*__asm__ __volatile__("rdtscp\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi), "=c" (*puAux)); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" : "=a" (u.s.Lo), "=d" (u.s.Hi), "=c" (*puAux)); +# else +# if RT_INLINE_ASM_USES_INTRIN >= 15 + u.u = __rdtscp(puAux); +# else + __asm + { + rdtscp + mov [u.s.Lo], eax + mov [u.s.Hi], edx + mov eax, [puAux] + mov [eax], ecx + } +# endif +# endif + return u.u; +} +#endif + + +/** + * Performs the cpuid instruction returning all registers. + * + * @param uOperator CPUID operation (eax). + * @param pvEAX Where to store eax. + * @param pvEBX Where to store ebx. + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId(uint32_t uOperator, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId(uint32_t uOperator, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uRAX, uRBX, uRCX, uRDX; + __asm__ __volatile__ ("cpuid\n\t" + : "=a" (uRAX), + "=b" (uRBX), + "=c" (uRCX), + "=d" (uRDX) + : "0" (uOperator), "2" (0)); + *(uint32_t RT_FAR *)pvEAX = (uint32_t)uRAX; + *(uint32_t RT_FAR *)pvEBX = (uint32_t)uRBX; + *(uint32_t RT_FAR *)pvECX = (uint32_t)uRCX; + *(uint32_t RT_FAR *)pvEDX = (uint32_t)uRDX; +# else + __asm__ __volatile__ ("xchgl %%ebx, %1\n\t" + "cpuid\n\t" + "xchgl %%ebx, %1\n\t" + : "=a" (*(uint32_t *)pvEAX), + "=r" (*(uint32_t *)pvEBX), + "=c" (*(uint32_t *)pvECX), + "=d" (*(uint32_t *)pvEDX) + : "0" (uOperator), "2" (0)); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + *(uint32_t RT_FAR *)pvEAX = aInfo[0]; + *(uint32_t RT_FAR *)pvEBX = aInfo[1]; + *(uint32_t RT_FAR *)pvECX = aInfo[2]; + *(uint32_t RT_FAR *)pvEDX = aInfo[3]; + +# else + uint32_t uEAX; + uint32_t uEBX; + uint32_t uECX; + uint32_t uEDX; + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [uEAX], eax + mov [uEBX], ebx + mov [uECX], ecx + mov [uEDX], edx + pop ebx + } + *(uint32_t RT_FAR *)pvEAX = uEAX; + *(uint32_t RT_FAR *)pvEBX = uEBX; + *(uint32_t RT_FAR *)pvECX = uECX; + *(uint32_t RT_FAR *)pvEDX = uEDX; +# endif +} +#endif + + +/** + * Performs the CPUID instruction with EAX and ECX input returning ALL output + * registers. + * + * @param uOperator CPUID operation (eax). + * @param uIdxECX ecx index + * @param pvEAX Where to store eax. + * @param pvEBX Where to store ebx. + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL || RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId_Idx_ECX(uint32_t uOperator, uint32_t uIdxECX, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId_Idx_ECX(uint32_t uOperator, uint32_t uIdxECX, void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uRAX, uRBX, uRCX, uRDX; + __asm__ ("cpuid\n\t" + : "=a" (uRAX), + "=b" (uRBX), + "=c" (uRCX), + "=d" (uRDX) + : "0" (uOperator), + "2" (uIdxECX)); + *(uint32_t RT_FAR *)pvEAX = (uint32_t)uRAX; + *(uint32_t RT_FAR *)pvEBX = (uint32_t)uRBX; + *(uint32_t RT_FAR *)pvECX = (uint32_t)uRCX; + *(uint32_t RT_FAR *)pvEDX = (uint32_t)uRDX; +# else + __asm__ ("xchgl %%ebx, %1\n\t" + "cpuid\n\t" + "xchgl %%ebx, %1\n\t" + : "=a" (*(uint32_t *)pvEAX), + "=r" (*(uint32_t *)pvEBX), + "=c" (*(uint32_t *)pvECX), + "=d" (*(uint32_t *)pvEDX) + : "0" (uOperator), + "2" (uIdxECX)); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuidex(aInfo, uOperator, uIdxECX); + *(uint32_t RT_FAR *)pvEAX = aInfo[0]; + *(uint32_t RT_FAR *)pvEBX = aInfo[1]; + *(uint32_t RT_FAR *)pvECX = aInfo[2]; + *(uint32_t RT_FAR *)pvEDX = aInfo[3]; + +# else + uint32_t uEAX; + uint32_t uEBX; + uint32_t uECX; + uint32_t uEDX; + __asm + { + push ebx + mov eax, [uOperator] + mov ecx, [uIdxECX] + cpuid + mov [uEAX], eax + mov [uEBX], ebx + mov [uECX], ecx + mov [uEDX], edx + pop ebx + } + *(uint32_t RT_FAR *)pvEAX = uEAX; + *(uint32_t RT_FAR *)pvEBX = uEBX; + *(uint32_t RT_FAR *)pvECX = uECX; + *(uint32_t RT_FAR *)pvEDX = uEDX; +# endif +} +#endif + + +/** + * CPUID variant that initializes all 4 registers before the CPUID instruction. + * + * @returns The EAX result value. + * @param uOperator CPUID operation (eax). + * @param uInitEBX The value to assign EBX prior to the CPUID instruction. + * @param uInitECX The value to assign ECX prior to the CPUID instruction. + * @param uInitEDX The value to assign EDX prior to the CPUID instruction. + * @param pvEAX Where to store eax. Optional. + * @param pvEBX Where to store ebx. Optional. + * @param pvECX Where to store ecx. Optional. + * @param pvEDX Where to store edx. Optional. + */ +DECLASM(uint32_t) ASMCpuIdExSlow(uint32_t uOperator, uint32_t uInitEBX, uint32_t uInitECX, uint32_t uInitEDX, + void RT_FAR *pvEAX, void RT_FAR *pvEBX, void RT_FAR *pvECX, void RT_FAR *pvEDX); + + +/** + * Performs the cpuid instruction returning ecx and edx. + * + * @param uOperator CPUID operation (eax). + * @param pvECX Where to store ecx. + * @param pvEDX Where to store edx. + * @remark We're using void pointers to ease the use of special bitfield structures and such. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMCpuId_ECX_EDX(uint32_t uOperator, void RT_FAR *pvECX, void RT_FAR *pvEDX); +#else +DECLINLINE(void) ASMCpuId_ECX_EDX(uint32_t uOperator, void RT_FAR *pvECX, void RT_FAR *pvEDX) +{ + uint32_t uEBX; + ASMCpuId(uOperator, &uOperator, &uEBX, pvECX, pvEDX); +} +#endif + + +/** + * Performs the cpuid instruction returning eax. + * + * @param uOperator CPUID operation (eax). + * @returns EAX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EAX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EAX(uint32_t uOperator) +{ + RTCCUINTREG xAX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ ("cpuid" + : "=a" (xAX) + : "0" (uOperator) + : "rbx", "rcx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (xAX) + : "0" (uOperator) + : "ecx", "edx"); +# else + __asm__ ("cpuid" + : "=a" (xAX) + : "0" (uOperator) + : "edx", "ecx", "ebx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xAX = aInfo[0]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xAX], eax + pop ebx + } +# endif + return (uint32_t)xAX; +} +#endif + + +/** + * Performs the cpuid instruction returning ebx. + * + * @param uOperator CPUID operation (eax). + * @returns EBX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EBX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EBX(uint32_t uOperator) +{ + RTCCUINTREG xBX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (uOperator) + : "rdx", "rcx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "mov %%ebx, %%edx\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=d" (xBX) + : "0" (uOperator) + : "ecx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=b" (xBX) + : "0" (uOperator) + : "edx", "ecx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xBX = aInfo[1]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xBX], ebx + pop ebx + } +# endif + return (uint32_t)xBX; +} +#endif + + +/** + * Performs the cpuid instruction returning ecx. + * + * @param uOperator CPUID operation (eax). + * @returns ECX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_ECX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_ECX(uint32_t uOperator) +{ + RTCCUINTREG xCX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=c" (xCX) + : "0" (uOperator) + : "rbx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=c" (xCX) + : "0" (uOperator) + : "edx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=c" (xCX) + : "0" (uOperator) + : "ebx", "edx"); + +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xCX = aInfo[2]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xCX], ecx + pop ebx + } +# endif + return (uint32_t)xCX; +} +#endif + + +/** + * Performs the cpuid instruction returning edx. + * + * @param uOperator CPUID operation (eax). + * @returns EDX after cpuid operation. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMCpuId_EDX(uint32_t uOperator); +#else +DECLINLINE(uint32_t) ASMCpuId_EDX(uint32_t uOperator) +{ + RTCCUINTREG xDX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ ("cpuid" + : "=a" (uSpill), + "=d" (xDX) + : "0" (uOperator) + : "rbx", "rcx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (uOperator), + "=d" (xDX) + : "0" (uOperator) + : "ecx"); +# else + __asm__ ("cpuid" + : "=a" (uOperator), + "=d" (xDX) + : "0" (uOperator) + : "ebx", "ecx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, uOperator); + xDX = aInfo[3]; + +# else + __asm + { + push ebx + mov eax, [uOperator] + cpuid + mov [xDX], edx + pop ebx + } +# endif + return (uint32_t)xDX; +} +#endif + + +/** + * Checks if the current CPU supports CPUID. + * + * @returns true if CPUID is supported. + */ +#ifdef __WATCOMC__ +DECLASM(bool) ASMHasCpuId(void); +#else +DECLINLINE(bool) ASMHasCpuId(void) +{ +# ifdef RT_ARCH_AMD64 + return true; /* ASSUME that all amd64 compatible CPUs have cpuid. */ +# else /* !RT_ARCH_AMD64 */ + bool fRet = false; +# if RT_INLINE_ASM_GNU_STYLE + uint32_t u1; + uint32_t u2; + __asm__ ("pushf\n\t" + "pop %1\n\t" + "mov %1, %2\n\t" + "xorl $0x200000, %1\n\t" + "push %1\n\t" + "popf\n\t" + "pushf\n\t" + "pop %1\n\t" + "cmpl %1, %2\n\t" + "setne %0\n\t" + "push %2\n\t" + "popf\n\t" + : "=m" (fRet), "=r" (u1), "=r" (u2)); +# else + __asm + { + pushfd + pop eax + mov ebx, eax + xor eax, 0200000h + push eax + popfd + pushfd + pop eax + cmp eax, ebx + setne fRet + push ebx + popfd + } +# endif + return fRet; +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Gets the APIC ID of the current CPU. + * + * @returns the APIC ID. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint8_t) ASMGetApicId(void); +#else +DECLINLINE(uint8_t) ASMGetApicId(void) +{ + RTCCUINTREG xBX; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + RTCCUINTREG uSpill; + __asm__ __volatile__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (1) + : "rcx", "rdx"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + RTCCUINTREG uSpill; + __asm__ __volatile__ ("mov %%ebx,%1\n\t" + "cpuid\n\t" + "xchgl %%ebx,%1\n\t" + : "=a" (uSpill), + "=rm" (xBX) + : "0" (1) + : "ecx", "edx"); +# else + RTCCUINTREG uSpill; + __asm__ __volatile__ ("cpuid" + : "=a" (uSpill), + "=b" (xBX) + : "0" (1) + : "ecx", "edx"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + __cpuid(aInfo, 1); + xBX = aInfo[1]; + +# else + __asm + { + push ebx + mov eax, 1 + cpuid + mov [xBX], ebx + pop ebx + } +# endif + return (uint8_t)(xBX >> 24); +} +#endif + + +/** + * Tests if it a genuine Intel CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0) + * @param uECX ECX return from ASMCpuId(0) + * @param uEDX EDX return from ASMCpuId(0) + */ +DECLINLINE(bool) ASMIsIntelCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x756e6547) + && uECX == UINT32_C(0x6c65746e) + && uEDX == UINT32_C(0x49656e69); +} + + +/** + * Tests if this is a genuine Intel CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsIntelCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsIntelCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Tests if it an authentic AMD CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0) + * @param uECX ECX return from ASMCpuId(0) + * @param uEDX EDX return from ASMCpuId(0) + */ +DECLINLINE(bool) ASMIsAmdCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x68747541) + && uECX == UINT32_C(0x444d4163) + && uEDX == UINT32_C(0x69746e65); +} + + +/** + * Tests if this is an authentic AMD CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsAmdCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsAmdCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Tests if it a centaur hauling VIA CPU based on the ASMCpuId(0) output. + * + * @returns true/false. + * @param uEBX EBX return from ASMCpuId(0). + * @param uECX ECX return from ASMCpuId(0). + * @param uEDX EDX return from ASMCpuId(0). + */ +DECLINLINE(bool) ASMIsViaCentaurCpuEx(uint32_t uEBX, uint32_t uECX, uint32_t uEDX) +{ + return uEBX == UINT32_C(0x746e6543) + && uECX == UINT32_C(0x736c7561) + && uEDX == UINT32_C(0x48727561); +} + + +/** + * Tests if this is a centaur hauling VIA CPU. + * + * @returns true/false. + * @remarks ASSUMES that cpuid is supported by the CPU. + */ +DECLINLINE(bool) ASMIsViaCentaurCpu(void) +{ + uint32_t uEAX, uEBX, uECX, uEDX; + ASMCpuId(0, &uEAX, &uEBX, &uECX, &uEDX); + return ASMIsViaCentaurCpuEx(uEBX, uECX, uEDX); +} + + +/** + * Checks whether ASMCpuId_EAX(0x00000000) indicates a valid range. + * + * + * @returns true/false. + * @param uEAX The EAX value of CPUID leaf 0x00000000. + * + * @note This only succeeds if there are at least two leaves in the range. + * @remarks The upper range limit is just some half reasonable value we've + * picked out of thin air. + */ +DECLINLINE(bool) ASMIsValidStdRange(uint32_t uEAX) +{ + return uEAX >= UINT32_C(0x00000001) && uEAX <= UINT32_C(0x000fffff); +} + + +/** + * Checks whether ASMCpuId_EAX(0x80000000) indicates a valid range. + * + * This only succeeds if there are at least two leaves in the range. + * + * @returns true/false. + * @param uEAX The EAX value of CPUID leaf 0x80000000. + * + * @note This only succeeds if there are at least two leaves in the range. + * @remarks The upper range limit is just some half reasonable value we've + * picked out of thin air. + */ +DECLINLINE(bool) ASMIsValidExtRange(uint32_t uEAX) +{ + return uEAX >= UINT32_C(0x80000001) && uEAX <= UINT32_C(0x800fffff); +} + + +/** + * Extracts the CPU family from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Family. + * @param uEAX EAX return from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuFamily(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf + ? ((uEAX >> 20) & 0x7f) + 0xf + : ((uEAX >> 8) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001), Intel variant. + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuModelIntel(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf || (((uEAX >> 8) & 0xf) == 0x6) /* family! */ + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001), AMD variant. + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuModelAMD(uint32_t uEAX) +{ + return ((uEAX >> 8) & 0xf) == 0xf + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU model from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + * @param fIntel Whether it's an intel CPU. Use ASMIsIntelCpuEx() or ASMIsIntelCpu(). + */ +DECLINLINE(uint32_t) ASMGetCpuModel(uint32_t uEAX, bool fIntel) +{ + return ((uEAX >> 8) & 0xf) == 0xf || (((uEAX >> 8) & 0xf) == 0x6 && fIntel) /* family! */ + ? ((uEAX >> 4) & 0xf) | ((uEAX >> 12) & 0xf0) + : ((uEAX >> 4) & 0xf); +} + + +/** + * Extracts the CPU stepping from ASMCpuId(1) or ASMCpuId(0x80000001) + * + * @returns Model. + * @param uEAX EAX from ASMCpuId(1) or ASMCpuId(0x80000001). + */ +DECLINLINE(uint32_t) ASMGetCpuStepping(uint32_t uEAX) +{ + return uEAX & 0xf; +} + + +/** + * Get cr0. + * @returns cr0. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR0(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR0(void) +{ + RTCCUINTXREG uCR0; +# if RT_INLINE_ASM_USES_INTRIN + uCR0 = __readcr0(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr0, %0\t\n" : "=r" (uCR0)); +# else + __asm__ __volatile__("movl %%cr0, %0\t\n" : "=r" (uCR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr0 + mov [uCR0], rax +# else + mov eax, cr0 + mov [uCR0], eax +# endif + } +# endif + return uCR0; +} +#endif + + +/** + * Sets the CR0 register. + * @param uCR0 The new CR0 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR0(RTCCUINTXREG uCR0); +#else +DECLINLINE(void) ASMSetCR0(RTCCUINTXREG uCR0) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr0(uCR0); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr0\n\t" :: "r" (uCR0)); +# else + __asm__ __volatile__("movl %0, %%cr0\n\t" :: "r" (uCR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR0] + mov cr0, rax +# else + mov eax, [uCR0] + mov cr0, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr2. + * @returns cr2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR2(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR2(void) +{ + RTCCUINTXREG uCR2; +# if RT_INLINE_ASM_USES_INTRIN + uCR2 = __readcr2(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr2, %0\t\n" : "=r" (uCR2)); +# else + __asm__ __volatile__("movl %%cr2, %0\t\n" : "=r" (uCR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr2 + mov [uCR2], rax +# else + mov eax, cr2 + mov [uCR2], eax +# endif + } +# endif + return uCR2; +} +#endif + + +/** + * Sets the CR2 register. + * @param uCR2 The new CR0 value. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSetCR2(RTCCUINTXREG uCR2); +#else +DECLINLINE(void) ASMSetCR2(RTCCUINTXREG uCR2) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr2\n\t" :: "r" (uCR2)); +# else + __asm__ __volatile__("movl %0, %%cr2\n\t" :: "r" (uCR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR2] + mov cr2, rax +# else + mov eax, [uCR2] + mov cr2, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr3. + * @returns cr3. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR3(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR3(void) +{ + RTCCUINTXREG uCR3; +# if RT_INLINE_ASM_USES_INTRIN + uCR3 = __readcr3(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr3, %0\t\n" : "=r" (uCR3)); +# else + __asm__ __volatile__("movl %%cr3, %0\t\n" : "=r" (uCR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr3 + mov [uCR3], rax +# else + mov eax, cr3 + mov [uCR3], eax +# endif + } +# endif + return uCR3; +} +#endif + + +/** + * Sets the CR3 register. + * + * @param uCR3 New CR3 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR3(RTCCUINTXREG uCR3); +#else +DECLINLINE(void) ASMSetCR3(RTCCUINTXREG uCR3) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr3(uCR3); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr3\n\t" : : "r" (uCR3)); +# else + __asm__ __volatile__("movl %0, %%cr3\n\t" : : "r" (uCR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR3] + mov cr3, rax +# else + mov eax, [uCR3] + mov cr3, eax +# endif + } +# endif +} +#endif + + +/** + * Reloads the CR3 register. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMReloadCR3(void); +#else +DECLINLINE(void) ASMReloadCR3(void) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr3(__readcr3()); + +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTXREG u; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr3, %0\n\t" + "movq %0, %%cr3\n\t" + : "=r" (u)); +# else + __asm__ __volatile__("movl %%cr3, %0\n\t" + "movl %0, %%cr3\n\t" + : "=r" (u)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr3 + mov cr3, rax +# else + mov eax, cr3 + mov cr3, eax +# endif + } +# endif +} +#endif + + +/** + * Get cr4. + * @returns cr4. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR4(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR4(void) +{ + RTCCUINTXREG uCR4; +# if RT_INLINE_ASM_USES_INTRIN + uCR4 = __readcr4(); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%cr4, %0\t\n" : "=r" (uCR4)); +# else + __asm__ __volatile__("movl %%cr4, %0\t\n" : "=r" (uCR4)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, cr4 + mov [uCR4], rax +# else + push eax /* just in case */ + /*mov eax, cr4*/ + _emit 0x0f + _emit 0x20 + _emit 0xe0 + mov [uCR4], eax + pop eax +# endif + } +# endif + return uCR4; +} +#endif + + +/** + * Sets the CR4 register. + * + * @param uCR4 New CR4 value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetCR4(RTCCUINTXREG uCR4); +#else +DECLINLINE(void) ASMSetCR4(RTCCUINTXREG uCR4) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writecr4(uCR4); + +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%cr4\n\t" : : "r" (uCR4)); +# else + __asm__ __volatile__("movl %0, %%cr4\n\t" : : "r" (uCR4)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uCR4] + mov cr4, rax +# else + mov eax, [uCR4] + _emit 0x0F + _emit 0x22 + _emit 0xE0 /* mov cr4, eax */ +# endif + } +# endif +} +#endif + + +/** + * Get cr8. + * @returns cr8. + * @remark The lock prefix hack for access from non-64-bit modes is NOT used and 0 is returned. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetCR8(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetCR8(void) +{ +# ifdef RT_ARCH_AMD64 + RTCCUINTXREG uCR8; +# if RT_INLINE_ASM_USES_INTRIN + uCR8 = __readcr8(); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movq %%cr8, %0\t\n" : "=r" (uCR8)); +# else + __asm + { + mov rax, cr8 + mov [uCR8], rax + } +# endif + return uCR8; +# else /* !RT_ARCH_AMD64 */ + return 0; +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Get XCR0 (eXtended feature Control Register 0). + * @returns xcr0. + */ +DECLASM(uint64_t) ASMGetXcr0(void); + +/** + * Sets the XCR0 register. + * @param uXcr0 The new XCR0 value. + */ +DECLASM(void) ASMSetXcr0(uint64_t uXcr0); + +struct X86XSAVEAREA; +/** + * Save extended CPU state. + * @param pXStateArea Where to save the state. + * @param fComponents Which state components to save. + */ +DECLASM(void) ASMXSave(struct X86XSAVEAREA RT_FAR *pXStateArea, uint64_t fComponents); + +/** + * Loads extended CPU state. + * @param pXStateArea Where to load the state from. + * @param fComponents Which state components to load. + */ +DECLASM(void) ASMXRstor(struct X86XSAVEAREA const RT_FAR *pXStateArea, uint64_t fComponents); + + +struct X86FXSTATE; +/** + * Save FPU and SSE CPU state. + * @param pXStateArea Where to save the state. + */ +DECLASM(void) ASMFxSave(struct X86FXSTATE RT_FAR *pXStateArea); + +/** + * Load FPU and SSE CPU state. + * @param pXStateArea Where to load the state from. + */ +DECLASM(void) ASMFxRstor(struct X86FXSTATE const RT_FAR *pXStateArea); + + +/** + * Enables interrupts (EFLAGS.IF). + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMIntEnable(void); +#else +DECLINLINE(void) ASMIntEnable(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm("sti\n"); +# elif RT_INLINE_ASM_USES_INTRIN + _enable(); +# else + __asm sti +# endif +} +#endif + + +/** + * Disables interrupts (!EFLAGS.IF). + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMIntDisable(void); +#else +DECLINLINE(void) ASMIntDisable(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm("cli\n"); +# elif RT_INLINE_ASM_USES_INTRIN + _disable(); +# else + __asm cli +# endif +} +#endif + + +/** + * Disables interrupts and returns previous xFLAGS. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTREG) ASMIntDisableFlags(void); +#else +DECLINLINE(RTCCUINTREG) ASMIntDisableFlags(void) +{ + RTCCUINTREG xFlags; +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("pushfq\n\t" + "cli\n\t" + "popq %0\n\t" + : "=r" (xFlags)); +# else + __asm__ __volatile__("pushfl\n\t" + "cli\n\t" + "popl %0\n\t" + : "=r" (xFlags)); +# endif +# elif RT_INLINE_ASM_USES_INTRIN && !defined(RT_ARCH_X86) + xFlags = ASMGetFlags(); + _disable(); +# else + __asm { + pushfd + cli + pop [xFlags] + } +# endif + return xFlags; +} +#endif + + +/** + * Are interrupts enabled? + * + * @returns true / false. + */ +DECLINLINE(bool) ASMIntAreEnabled(void) +{ + RTCCUINTREG uFlags = ASMGetFlags(); + return uFlags & 0x200 /* X86_EFL_IF */ ? true : false; +} + + +/** + * Halts the CPU until interrupted. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 14 +DECLASM(void) ASMHalt(void); +#else +DECLINLINE(void) ASMHalt(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("hlt\n\t"); +# elif RT_INLINE_ASM_USES_INTRIN + __halt(); +# else + __asm { + hlt + } +# endif +} +#endif + + +/** + * Reads a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMRdMsr(uint32_t uRegister); +#else +DECLINLINE(uint64_t) ASMRdMsr(uint32_t uRegister) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u.s.Lo), + "=d" (u.s.Hi) + : "c" (uRegister)); + +# elif RT_INLINE_ASM_USES_INTRIN + u.u = __readmsr(uRegister); + +# else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u.s.Lo], eax + mov [u.s.Hi], edx + } +# endif + + return u.u; +} +#endif + + +/** + * Writes a machine specific register. + * + * @returns Register content. + * @param uRegister Register to write to. + * @param u64Val Value to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMWrMsr(uint32_t uRegister, uint64_t u64Val); +#else +DECLINLINE(void) ASMWrMsr(uint32_t uRegister, uint64_t u64Val) +{ + RTUINT64U u; + + u.u = u64Val; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wrmsr\n\t" + ::"a" (u.s.Lo), + "d" (u.s.Hi), + "c" (uRegister)); + +# elif RT_INLINE_ASM_USES_INTRIN + __writemsr(uRegister, u.u); + +# else + __asm + { + mov ecx, [uRegister] + mov edx, [u.s.Hi] + mov eax, [u.s.Lo] + wrmsr + } +# endif +} +#endif + + +/** + * Reads a machine specific register, extended version (for AMD). + * + * @returns Register content. + * @param uRegister Register to read. + * @param uXDI RDI/EDI value. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint64_t) ASMRdMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI); +#else +DECLINLINE(uint64_t) ASMRdMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI) +{ + RTUINT64U u; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u.s.Lo), + "=d" (u.s.Hi) + : "c" (uRegister), + "D" (uXDI)); + +# else + __asm + { + mov ecx, [uRegister] + xchg edi, [uXDI] + rdmsr + mov [u.s.Lo], eax + mov [u.s.Hi], edx + xchg edi, [uXDI] + } +# endif + + return u.u; +} +#endif + + +/** + * Writes a machine specific register, extended version (for AMD). + * + * @returns Register content. + * @param uRegister Register to write to. + * @param uXDI RDI/EDI value. + * @param u64Val Value to write. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMWrMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI, uint64_t u64Val); +#else +DECLINLINE(void) ASMWrMsrEx(uint32_t uRegister, RTCCUINTXREG uXDI, uint64_t u64Val) +{ + RTUINT64U u; + + u.u = u64Val; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wrmsr\n\t" + ::"a" (u.s.Lo), + "d" (u.s.Hi), + "c" (uRegister), + "D" (uXDI)); + +# else + __asm + { + mov ecx, [uRegister] + xchg edi, [uXDI] + mov edx, [u.s.Hi] + mov eax, [u.s.Lo] + wrmsr + xchg edi, [uXDI] + } +# endif +} +#endif + + + +/** + * Reads low part of a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMRdMsr_Low(uint32_t uRegister); +#else +DECLINLINE(uint32_t) ASMRdMsr_Low(uint32_t uRegister) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=a" (u32) + : "c" (uRegister) + : "edx"); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = (uint32_t)__readmsr(uRegister); + +#else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u32], eax + } +# endif + + return u32; +} +#endif + + +/** + * Reads high part of a machine specific register. + * + * @returns Register content. + * @param uRegister Register to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMRdMsr_High(uint32_t uRegister); +#else +DECLINLINE(uint32_t) ASMRdMsr_High(uint32_t uRegister) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rdmsr\n\t" + : "=d" (u32) + : "c" (uRegister) + : "eax"); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = (uint32_t)(__readmsr(uRegister) >> 32); + +# else + __asm + { + mov ecx, [uRegister] + rdmsr + mov [u32], edx + } +# endif + + return u32; +} +#endif + + +/** + * Gets dr0. + * + * @returns dr0. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR0(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR0(void) +{ + RTCCUINTXREG uDR0; +# if RT_INLINE_ASM_USES_INTRIN + uDR0 = __readdr(0); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr0, %0\n\t" : "=r" (uDR0)); +# else + __asm__ __volatile__("movl %%dr0, %0\n\t" : "=r" (uDR0)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr0 + mov [uDR0], rax +# else + mov eax, dr0 + mov [uDR0], eax +# endif + } +# endif + return uDR0; +} +#endif + + +/** + * Gets dr1. + * + * @returns dr1. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR1(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR1(void) +{ + RTCCUINTXREG uDR1; +# if RT_INLINE_ASM_USES_INTRIN + uDR1 = __readdr(1); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr1, %0\n\t" : "=r" (uDR1)); +# else + __asm__ __volatile__("movl %%dr1, %0\n\t" : "=r" (uDR1)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr1 + mov [uDR1], rax +# else + mov eax, dr1 + mov [uDR1], eax +# endif + } +# endif + return uDR1; +} +#endif + + +/** + * Gets dr2. + * + * @returns dr2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR2(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR2(void) +{ + RTCCUINTXREG uDR2; +# if RT_INLINE_ASM_USES_INTRIN + uDR2 = __readdr(2); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr2, %0\n\t" : "=r" (uDR2)); +# else + __asm__ __volatile__("movl %%dr2, %0\n\t" : "=r" (uDR2)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr2 + mov [uDR2], rax +# else + mov eax, dr2 + mov [uDR2], eax +# endif + } +# endif + return uDR2; +} +#endif + + +/** + * Gets dr3. + * + * @returns dr3. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR3(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR3(void) +{ + RTCCUINTXREG uDR3; +# if RT_INLINE_ASM_USES_INTRIN + uDR3 = __readdr(3); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr3, %0\n\t" : "=r" (uDR3)); +# else + __asm__ __volatile__("movl %%dr3, %0\n\t" : "=r" (uDR3)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr3 + mov [uDR3], rax +# else + mov eax, dr3 + mov [uDR3], eax +# endif + } +# endif + return uDR3; +} +#endif + + +/** + * Gets dr6. + * + * @returns dr6. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR6(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR6(void) +{ + RTCCUINTXREG uDR6; +# if RT_INLINE_ASM_USES_INTRIN + uDR6 = __readdr(6); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr6, %0\n\t" : "=r" (uDR6)); +# else + __asm__ __volatile__("movl %%dr6, %0\n\t" : "=r" (uDR6)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr6 + mov [uDR6], rax +# else + mov eax, dr6 + mov [uDR6], eax +# endif + } +# endif + return uDR6; +} +#endif + + +/** + * Reads and clears DR6. + * + * @returns DR6. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetAndClearDR6(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetAndClearDR6(void) +{ + RTCCUINTXREG uDR6; +# if RT_INLINE_ASM_USES_INTRIN + uDR6 = __readdr(6); + __writedr(6, 0xffff0ff0U); /* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTXREG uNewValue = 0xffff0ff0U;/* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr6, %0\n\t" + "movq %1, %%dr6\n\t" + : "=r" (uDR6) + : "r" (uNewValue)); +# else + __asm__ __volatile__("movl %%dr6, %0\n\t" + "movl %1, %%dr6\n\t" + : "=r" (uDR6) + : "r" (uNewValue)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr6 + mov [uDR6], rax + mov rcx, rax + mov ecx, 0ffff0ff0h; /* 31-16 and 4-11 are 1's, 12 and 63-31 are zero. */ + mov dr6, rcx +# else + mov eax, dr6 + mov [uDR6], eax + mov ecx, 0ffff0ff0h; /* 31-16 and 4-11 are 1's, 12 is zero. */ + mov dr6, ecx +# endif + } +# endif + return uDR6; +} +#endif + + +/** + * Gets dr7. + * + * @returns dr7. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(RTCCUINTXREG) ASMGetDR7(void); +#else +DECLINLINE(RTCCUINTXREG) ASMGetDR7(void) +{ + RTCCUINTXREG uDR7; +# if RT_INLINE_ASM_USES_INTRIN + uDR7 = __readdr(7); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %%dr7, %0\n\t" : "=r" (uDR7)); +# else + __asm__ __volatile__("movl %%dr7, %0\n\t" : "=r" (uDR7)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, dr7 + mov [uDR7], rax +# else + mov eax, dr7 + mov [uDR7], eax +# endif + } +# endif + return uDR7; +} +#endif + + +/** + * Sets dr0. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR0(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR0(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(0, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr0\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr0\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr0, rax +# else + mov eax, [uDRVal] + mov dr0, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr1. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR1(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR1(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(1, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr1\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr1\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr1, rax +# else + mov eax, [uDRVal] + mov dr1, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr2. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR2(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR2(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(2, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr2\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr2\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr2, rax +# else + mov eax, [uDRVal] + mov dr2, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr3. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR3(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR3(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(3, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr3\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr3\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr3, rax +# else + mov eax, [uDRVal] + mov dr3, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr6. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR6(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR6(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(6, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr6\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr6\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr6, rax +# else + mov eax, [uDRVal] + mov dr6, eax +# endif + } +# endif +} +#endif + + +/** + * Sets dr7. + * + * @param uDRVal Debug register value to write + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSetDR7(RTCCUINTXREG uDRVal); +#else +DECLINLINE(void) ASMSetDR7(RTCCUINTXREG uDRVal) +{ +# if RT_INLINE_ASM_USES_INTRIN + __writedr(7, uDRVal); +# elif RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("movq %0, %%dr7\n\t" : : "r" (uDRVal)); +# else + __asm__ __volatile__("movl %0, %%dr7\n\t" : : "r" (uDRVal)); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uDRVal] + mov dr7, rax +# else + mov eax, [uDRVal] + mov dr7, eax +# endif + } +# endif +} +#endif + + +/** + * Writes a 8-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u8 8-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU8(RTIOPORT Port, uint8_t u8); +#else +DECLINLINE(void) ASMOutU8(RTIOPORT Port, uint8_t u8) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outb %b1, %w0\n\t" + :: "Nd" (Port), + "a" (u8)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outbyte(Port, u8); + +# else + __asm + { + mov dx, [Port] + mov al, [u8] + out dx, al + } +# endif +} +#endif + + +/** + * Reads a 8-bit unsigned integer from an I/O port, ordered. + * + * @returns 8-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint8_t) ASMInU8(RTIOPORT Port); +#else +DECLINLINE(uint8_t) ASMInU8(RTIOPORT Port) +{ + uint8_t u8; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inb %w1, %b0\n\t" + : "=a" (u8) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u8 = __inbyte(Port); + +# else + __asm + { + mov dx, [Port] + in al, dx + mov [u8], al + } +# endif + return u8; +} +#endif + + +/** + * Writes a 16-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u16 16-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU16(RTIOPORT Port, uint16_t u16); +#else +DECLINLINE(void) ASMOutU16(RTIOPORT Port, uint16_t u16) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outw %w1, %w0\n\t" + :: "Nd" (Port), + "a" (u16)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outword(Port, u16); + +# else + __asm + { + mov dx, [Port] + mov ax, [u16] + out dx, ax + } +# endif +} +#endif + + +/** + * Reads a 16-bit unsigned integer from an I/O port, ordered. + * + * @returns 16-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint16_t) ASMInU16(RTIOPORT Port); +#else +DECLINLINE(uint16_t) ASMInU16(RTIOPORT Port) +{ + uint16_t u16; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inw %w1, %w0\n\t" + : "=a" (u16) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u16 = __inword(Port); + +# else + __asm + { + mov dx, [Port] + in ax, dx + mov [u16], ax + } +# endif + return u16; +} +#endif + + +/** + * Writes a 32-bit unsigned integer to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param u32 32-bit integer to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutU32(RTIOPORT Port, uint32_t u32); +#else +DECLINLINE(void) ASMOutU32(RTIOPORT Port, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("outl %1, %w0\n\t" + :: "Nd" (Port), + "a" (u32)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outdword(Port, u32); + +# else + __asm + { + mov dx, [Port] + mov eax, [u32] + out dx, eax + } +# endif +} +#endif + + +/** + * Reads a 32-bit unsigned integer from an I/O port, ordered. + * + * @returns 32-bit integer. + * @param Port I/O port to read from. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMInU32(RTIOPORT Port); +#else +DECLINLINE(uint32_t) ASMInU32(RTIOPORT Port) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("inl %w1, %0\n\t" + : "=a" (u32) + : "Nd" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = __indword(Port); + +# else + __asm + { + mov dx, [Port] + in eax, dx + mov [u32], eax + } +# endif + return u32; +} +#endif + + +/** + * Writes a string of 8-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau8 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU8(RTIOPORT Port, uint8_t const RT_FAR *pau8, size_t c); +#else +DECLINLINE(void) ASMOutStrU8(RTIOPORT Port, uint8_t const RT_FAR *pau8, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsb\n\t" + : "+S" (pau8), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outbytestring(Port, (unsigned char RT_FAR *)pau8, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau8] + xchg esi, eax + rep outsb + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 8-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau8 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU8(RTIOPORT Port, uint8_t RT_FAR *pau8, size_t c); +#else +DECLINLINE(void) ASMInStrU8(RTIOPORT Port, uint8_t RT_FAR *pau8, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insb\n\t" + : "+D" (pau8), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __inbytestring(Port, pau8, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau8] + xchg edi, eax + rep insb + xchg edi, eax + } +# endif +} +#endif + + +/** + * Writes a string of 16-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau16 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU16(RTIOPORT Port, uint16_t const RT_FAR *pau16, size_t c); +#else +DECLINLINE(void) ASMOutStrU16(RTIOPORT Port, uint16_t const RT_FAR *pau16, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsw\n\t" + : "+S" (pau16), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outwordstring(Port, (unsigned short RT_FAR *)pau16, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau16] + xchg esi, eax + rep outsw + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 16-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau16 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU16(RTIOPORT Port, uint16_t RT_FAR *pau16, size_t c); +#else +DECLINLINE(void) ASMInStrU16(RTIOPORT Port, uint16_t RT_FAR *pau16, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insw\n\t" + : "+D" (pau16), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __inwordstring(Port, pau16, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau16] + xchg edi, eax + rep insw + xchg edi, eax + } +# endif +} +#endif + + +/** + * Writes a string of 32-bit unsigned integer items to an I/O port, ordered. + * + * @param Port I/O port to write to. + * @param pau32 Pointer to the string buffer. + * @param c The number of items to write. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMOutStrU32(RTIOPORT Port, uint32_t const RT_FAR *pau32, size_t c); +#else +DECLINLINE(void) ASMOutStrU32(RTIOPORT Port, uint32_t const RT_FAR *pau32, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; outsl\n\t" + : "+S" (pau32), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __outdwordstring(Port, (unsigned long RT_FAR *)pau32, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau32] + xchg esi, eax + rep outsd + xchg esi, eax + } +# endif +} +#endif + + +/** + * Reads a string of 32-bit unsigned integer items from an I/O port, ordered. + * + * @param Port I/O port to read from. + * @param pau32 Pointer to the string buffer (output). + * @param c The number of items to read. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInStrU32(RTIOPORT Port, uint32_t RT_FAR *pau32, size_t c); +#else +DECLINLINE(void) ASMInStrU32(RTIOPORT Port, uint32_t RT_FAR *pau32, size_t c) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep; insl\n\t" + : "+D" (pau32), + "+c" (c) + : "d" (Port)); + +# elif RT_INLINE_ASM_USES_INTRIN + __indwordstring(Port, (unsigned long RT_FAR *)pau32, (unsigned long)c); + +# else + __asm + { + mov dx, [Port] + mov ecx, [c] + mov eax, [pau32] + xchg edi, eax + rep insd + xchg edi, eax + } +# endif +} +#endif + + +/** + * Invalidate page. + * + * @param uPtr Address of the page to invalidate. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMInvalidatePage(RTCCUINTXREG uPtr); +#else +DECLINLINE(void) ASMInvalidatePage(RTCCUINTXREG uPtr) +{ +# if RT_INLINE_ASM_USES_INTRIN + __invlpg((void RT_FAR *)uPtr); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("invlpg %0\n\t" + : : "m" (*(uint8_t RT_FAR *)(uintptr_t)uPtr)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [uPtr] + invlpg [rax] +# else + mov eax, [uPtr] + invlpg [eax] +# endif + } +# endif +} +#endif + + +/** + * Write back the internal caches and invalidate them. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMWriteBackAndInvalidateCaches(void); +#else +DECLINLINE(void) ASMWriteBackAndInvalidateCaches(void) +{ +# if RT_INLINE_ASM_USES_INTRIN + __wbinvd(); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("wbinvd"); +# else + __asm + { + wbinvd + } +# endif +} +#endif + + +/** + * Invalidate internal and (perhaps) external caches without first + * flushing dirty cache lines. Use with extreme care. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMInvalidateInternalCaches(void); +#else +DECLINLINE(void) ASMInvalidateInternalCaches(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("invd"); +# else + __asm + { + invd + } +# endif +} +#endif + + +/** + * Memory load/store fence, waits for any pending writes and reads to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE2 CPUID bit set. + */ +DECLINLINE(void) ASMMemoryFenceSSE2(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xf0\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_mfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xf0 + } +#endif +} + + +/** + * Memory store fence, waits for any writes to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE CPUID bit set. + */ +DECLINLINE(void) ASMWriteFenceSSE(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xf8\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_sfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xf8 + } +#endif +} + + +/** + * Memory load fence, waits for any pending reads to complete. + * Requires the X86_CPUID_FEATURE_EDX_SSE2 CPUID bit set. + */ +DECLINLINE(void) ASMReadFenceSSE2(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0xae,0xe8\n\t"); +#elif RT_INLINE_ASM_USES_INTRIN + _mm_lfence(); +#else + __asm + { + _emit 0x0f + _emit 0xae + _emit 0xe8 + } +#endif +} + +#if !defined(_MSC_VER) || !defined(RT_ARCH_AMD64) + +/* + * Clear the AC bit in the EFLAGS register. + * Requires the X86_CPUID_STEXT_FEATURE_EBX_SMAP CPUID bit set. + * Requires to be executed in R0. + */ +DECLINLINE(void) ASMClearAC(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0x01,0xca\n\t"); +#else + __asm + { + _emit 0x0f + _emit 0x01 + _emit 0xca + } +#endif +} + + +/* + * Set the AC bit in the EFLAGS register. + * Requires the X86_CPUID_STEXT_FEATURE_EBX_SMAP CPUID bit set. + * Requires to be executed in R0. + */ +DECLINLINE(void) ASMSetAC(void) +{ +#if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__ (".byte 0x0f,0x01,0xcb\n\t"); +#else + __asm + { + _emit 0x0f + _emit 0x01 + _emit 0xcb + } +#endif +} + +#endif /* !_MSC_VER) || !RT_ARCH_AMD64 */ + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/asm-math.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/asm-math.h @@ -0,0 +1,438 @@ +/** @file + * IPRT - Assembly Routines for Optimizing some Integers Math Operations. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_math_h +#define ___iprt_asm_math_h + +#include + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(__emul) +# pragma intrinsic(__emulu) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(_mul128) +# pragma intrinsic(_umul128) +# endif +#endif + + +/** @defgroup grp_rt_asm_math Interger Math Optimizations + * @ingroup grp_rt_asm + * @{ */ + +/** + * Multiplies two unsigned 32-bit values returning an unsigned 64-bit result. + * + * @returns u32F1 * u32F2. + */ + +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_X86) +DECLASM(uint64_t) ASMMult2xU32RetU64(uint32_t u32F1, uint32_t u32F2); +#else +DECLINLINE(uint64_t) ASMMult2xU32RetU64(uint32_t u32F1, uint32_t u32F2) +{ +# ifdef RT_ARCH_X86 + uint64_t u64; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("mull %%edx" + : "=A" (u64) + : "a" (u32F2), "d" (u32F1)); +# elif RT_INLINE_ASM_USES_INTRIN + u64 = __emulu(u32F1, u32F2); +# else + __asm + { + mov edx, [u32F1] + mov eax, [u32F2] + mul edx + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif + return u64; +# else /* generic: */ + return (uint64_t)u32F1 * u32F2; +# endif +} +#endif + + +/** + * Multiplies two signed 32-bit values returning a signed 64-bit result. + * + * @returns u32F1 * u32F2. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_X86) +DECLASM(int64_t) ASMMult2xS32RetS64(int32_t i32F1, int32_t i32F2); +#else +DECLINLINE(int64_t) ASMMult2xS32RetS64(int32_t i32F1, int32_t i32F2) +{ +# ifdef RT_ARCH_X86 + int64_t i64; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("imull %%edx" + : "=A" (i64) + : "a" (i32F2), "d" (i32F1)); +# elif RT_INLINE_ASM_USES_INTRIN + i64 = __emul(i32F1, i32F2); +# else + __asm + { + mov edx, [i32F1] + mov eax, [i32F2] + imul edx + mov dword ptr [i64], eax + mov dword ptr [i64 + 4], edx + } +# endif + return i64; +# else /* generic: */ + return (int64_t)i32F1 * i32F2; +# endif +} +#endif + + +#if ARCH_BITS == 64 +DECLINLINE(uint64_t) ASMMult2xU64Ret2xU64(uint64_t u64F1, uint64_t u64F2, uint64_t *pu64ProdHi) +{ +# if defined(RT_ARCH_AMD64) && (RT_INLINE_ASM_GNU_STYLE || RT_INLINE_ASM_USES_INTRIN) +# if RT_INLINE_ASM_GNU_STYLE + uint64_t u64Low, u64High; + __asm__ __volatile__("mulq %%rdx" + : "=a" (u64Low), "=d" (u64High) + : "0" (u64F1), "1" (u64F2)); + *pu64ProdHi = u64High; + return u64Low; +# elif RT_INLINE_ASM_USES_INTRIN + return _umul128(u64F1, u64F2, pu64ProdHi); +# else +# error "hmm" +# endif +# else /* generic: */ + /* + * F1 * F2 = Prod + * -- -- + * ab * cd = b*d + a*d*10 + b*c*10 + a*c*100 + * + * Where a, b, c and d are 'digits', and 10 is max digit + 1. + * + * Our digits are 32-bit wide, so instead of 10 we multiply by 4G. + * Prod = F1.s.Lo*F2.s.Lo + F1.s.Hi*F2.s.Lo*4G + * + F1.s.Lo*F2.s.Hi*4G + F1.s.Hi*F2.s.Hi*4G*4G + */ + RTUINT128U Prod; + RTUINT64U Tmp1; + uint64_t u64Tmp; + RTUINT64U F1, F2; + F1.u = u64F1; + F2.u = u64F2; + + Prod.s.Lo = ASMMult2xU32RetU64(F1.s.Lo, F2.s.Lo); + + Tmp1.u = ASMMult2xU32RetU64(F1.s.Hi, F2.s.Lo); + u64Tmp = (uint64_t)Prod.DWords.dw1 + Tmp1.s.Lo; + Prod.DWords.dw1 = (uint32_t)u64Tmp; + Prod.s.Hi = Tmp1.s.Hi; + Prod.s.Hi += u64Tmp >> 32; /* carry */ + + Tmp1.u = ASMMult2xU32RetU64(F1.s.Lo, F2.s.Hi); + u64Tmp = (uint64_t)Prod.DWords.dw1 + Tmp1.s.Lo; + Prod.DWords.dw1 = (uint32_t)u64Tmp; + u64Tmp >>= 32; /* carry */ + u64Tmp += Prod.DWords.dw2; + u64Tmp += Tmp1.s.Hi; + Prod.DWords.dw2 = (uint32_t)u64Tmp; + Prod.DWords.dw3 += u64Tmp >> 32; /* carry */ + + Prod.s.Hi += ASMMult2xU32RetU64(F1.s.Hi, F2.s.Hi); + *pu64ProdHi = Prod.s.Hi; + return Prod.s.Lo; +# endif +} +#endif + + + +/** + * Divides a 64-bit unsigned by a 32-bit unsigned returning an unsigned 32-bit result. + * + * @returns u64 / u32. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(uint32_t) ASMDivU64ByU32RetU32(uint64_t u64, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMDivU64ByU32RetU32(uint64_t u64, uint32_t u32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; + __asm__ __volatile__("divl %3" + : "=a" (u32), "=d"(uDummy) + : "A" (u64), "r" (u32)); +# else + __asm + { + mov eax, dword ptr [u64] + mov edx, dword ptr [u64 + 4] + mov ecx, [u32] + div ecx + mov [u32], eax + } +# endif + return u32; +# else /* generic: */ + return (uint32_t)(u64 / u32); +# endif +} +#endif + + +/** + * Divides a 64-bit signed by a 32-bit signed returning a signed 32-bit result. + * + * @returns u64 / u32. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(int32_t) ASMDivS64ByS32RetS32(int64_t i64, int32_t i32); +#else +DECLINLINE(int32_t) ASMDivS64ByS32RetS32(int64_t i64, int32_t i32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG iDummy; + __asm__ __volatile__("idivl %3" + : "=a" (i32), "=d"(iDummy) + : "A" (i64), "r" (i32)); +# else + __asm + { + mov eax, dword ptr [i64] + mov edx, dword ptr [i64 + 4] + mov ecx, [i32] + idiv ecx + mov [i32], eax + } +# endif + return i32; +# else /* generic: */ + return (int32_t)(i64 / i32); +# endif +} +#endif + + +/** + * Performs 64-bit unsigned by a 32-bit unsigned division with a 32-bit unsigned result, + * returning the rest. + * + * @returns u64 % u32. + * + * @remarks It is important that the result is <= UINT32_MAX or we'll overflow and crash. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(uint32_t) ASMModU64ByU32RetU32(uint64_t u64, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMModU64ByU32RetU32(uint64_t u64, uint32_t u32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; + __asm__ __volatile__("divl %3" + : "=a" (uDummy), "=d"(u32) + : "A" (u64), "r" (u32)); +# else + __asm + { + mov eax, dword ptr [u64] + mov edx, dword ptr [u64 + 4] + mov ecx, [u32] + div ecx + mov [u32], edx + } +# endif + return u32; +# else /* generic: */ + return (uint32_t)(u64 % u32); +# endif +} +#endif + + +/** + * Performs 64-bit signed by a 32-bit signed division with a 32-bit signed result, + * returning the rest. + * + * @returns u64 % u32. + * + * @remarks It is important that the result is <= UINT32_MAX or we'll overflow and crash. + */ +#if RT_INLINE_ASM_EXTERNAL && defined(RT_ARCH_X86) +DECLASM(int32_t) ASMModS64ByS32RetS32(int64_t i64, int32_t i32); +#else +DECLINLINE(int32_t) ASMModS64ByS32RetS32(int64_t i64, int32_t i32) +{ +# ifdef RT_ARCH_X86 +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG iDummy; + __asm__ __volatile__("idivl %3" + : "=a" (iDummy), "=d"(i32) + : "A" (i64), "r" (i32)); +# else + __asm + { + mov eax, dword ptr [i64] + mov edx, dword ptr [i64 + 4] + mov ecx, [i32] + idiv ecx + mov [i32], edx + } +# endif + return i32; +# else /* generic: */ + return (int32_t)(i64 % i32); +# endif +} +#endif + + +/** + * Multiple a 32-bit by a 32-bit integer and divide the result by a 32-bit integer + * using a 64 bit intermediate result. + * + * @returns (u32A * u32B) / u32C. + * @param u32A The 32-bit value (A). + * @param u32B The 32-bit value to multiple by A. + * @param u32C The 32-bit value to divide A*B by. + * + * @remarks Architecture specific. + * @remarks Make sure the result won't ever exceed 32-bit, because hardware + * exception may be raised if it does. + * @remarks On x86 this may be used to avoid dragging in 64-bit builtin + * arithmetics functions. + */ +#if RT_INLINE_ASM_EXTERNAL && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +DECLASM(uint32_t) ASMMultU32ByU32DivByU32(uint32_t u32A, uint32_t u32B, uint32_t u32C); +#else +DECLINLINE(uint32_t) ASMMultU32ByU32DivByU32(uint32_t u32A, uint32_t u32B, uint32_t u32C) +{ +# if RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + uint32_t u32Result, u32Spill; + __asm__ __volatile__("mull %2\n\t" + "divl %3\n\t" + : "=&a" (u32Result), + "=&d" (u32Spill) + : "r" (u32B), + "r" (u32C), + "0" (u32A)); + return u32Result; +# else + return (uint32_t)(((uint64_t)u32A * u32B) / u32C); +# endif +} +#endif + + +/** + * Multiple a 64-bit by a 32-bit integer and divide the result by a 32-bit integer + * using a 96 bit intermediate result. + * + * @returns (u64A * u32B) / u32C. + * @param u64A The 64-bit value. + * @param u32B The 32-bit value to multiple by A. + * @param u32C The 32-bit value to divide A*B by. + * + * @remarks Architecture specific. + * @remarks Make sure the result won't ever exceed 64-bit, because hardware + * exception may be raised if it does. + * @remarks On x86 this may be used to avoid dragging in 64-bit builtin + * arithmetics function. + */ +#if RT_INLINE_ASM_EXTERNAL || !defined(__GNUC__) || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86)) +DECLASM(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C); +#else +DECLINLINE(uint64_t) ASMMultU64ByU32DivByU32(uint64_t u64A, uint32_t u32B, uint32_t u32C) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + uint64_t u64Result, u64Spill; + __asm__ __volatile__("mulq %2\n\t" + "divq %3\n\t" + : "=&a" (u64Result), + "=&d" (u64Spill) + : "r" ((uint64_t)u32B), + "r" ((uint64_t)u32C), + "0" (u64A)); + return u64Result; +# else + uint32_t u32Dummy; + uint64_t u64Result; + __asm__ __volatile__("mull %%ecx \n\t" /* eax = u64Lo.lo = (u64A.lo * u32B).lo + edx = u64Lo.hi = (u64A.lo * u32B).hi */ + "xchg %%eax,%%esi \n\t" /* esi = u64Lo.lo + eax = u64A.hi */ + "xchg %%edx,%%edi \n\t" /* edi = u64Low.hi + edx = u32C */ + "xchg %%edx,%%ecx \n\t" /* ecx = u32C + edx = u32B */ + "mull %%edx \n\t" /* eax = u64Hi.lo = (u64A.hi * u32B).lo + edx = u64Hi.hi = (u64A.hi * u32B).hi */ + "addl %%edi,%%eax \n\t" /* u64Hi.lo += u64Lo.hi */ + "adcl $0,%%edx \n\t" /* u64Hi.hi += carry */ + "divl %%ecx \n\t" /* eax = u64Hi / u32C + edx = u64Hi % u32C */ + "movl %%eax,%%edi \n\t" /* edi = u64Result.hi = u64Hi / u32C */ + "movl %%esi,%%eax \n\t" /* eax = u64Lo.lo */ + "divl %%ecx \n\t" /* u64Result.lo */ + "movl %%edi,%%edx \n\t" /* u64Result.hi */ + : "=A"(u64Result), "=c"(u32Dummy), + "=S"(u32Dummy), "=D"(u32Dummy) + : "a"((uint32_t)u64A), + "S"((uint32_t)(u64A >> 32)), + "c"(u32B), + "D"(u32C)); + return u64Result; +# endif +# else + RTUINT64U u; + uint64_t u64Lo = (uint64_t)(u64A & 0xffffffff) * u32B; + uint64_t u64Hi = (uint64_t)(u64A >> 32) * u32B; + u64Hi += (u64Lo >> 32); + u.s.Hi = (uint32_t)(u64Hi / u32C); + u.s.Lo = (uint32_t)((((u64Hi % u32C) << 32) + (u64Lo & 0xffffffff)) / u32C); + return u.u; +# endif +} +#endif + +/** @} */ +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/asm.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/asm.h @@ -0,0 +1,5621 @@ +/** @file + * IPRT - Assembly Functions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_asm_h +#define ___iprt_asm_h + +#include +#include +#include +/** @def RT_INLINE_ASM_USES_INTRIN + * Defined as 1 if we're using a _MSC_VER 1400. + * Otherwise defined as 0. + */ + +/* Solaris 10 header ugliness */ +#ifdef u +# undef u +#endif + +#if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN +# pragma warning(push) +# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */ +# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */ +# include +# pragma warning(pop) + /* Emit the intrinsics at all optimization levels. */ +# pragma intrinsic(_ReadWriteBarrier) +# pragma intrinsic(__cpuid) +# pragma intrinsic(__stosd) +# pragma intrinsic(__stosw) +# pragma intrinsic(__stosb) +# pragma intrinsic(_BitScanForward) +# pragma intrinsic(_BitScanReverse) +# pragma intrinsic(_bittest) +# pragma intrinsic(_bittestandset) +# pragma intrinsic(_bittestandreset) +# pragma intrinsic(_bittestandcomplement) +# pragma intrinsic(_byteswap_ushort) +# pragma intrinsic(_byteswap_ulong) +# pragma intrinsic(_interlockedbittestandset) +# pragma intrinsic(_interlockedbittestandreset) +# pragma intrinsic(_InterlockedAnd) +# pragma intrinsic(_InterlockedOr) +# pragma intrinsic(_InterlockedIncrement) +# pragma intrinsic(_InterlockedDecrement) +# pragma intrinsic(_InterlockedExchange) +# pragma intrinsic(_InterlockedExchangeAdd) +# pragma intrinsic(_InterlockedCompareExchange) +# pragma intrinsic(_InterlockedCompareExchange64) +# pragma intrinsic(_rotl) +# pragma intrinsic(_rotr) +# pragma intrinsic(_rotl64) +# pragma intrinsic(_rotr64) +# ifdef RT_ARCH_AMD64 +# pragma intrinsic(__stosq) +# pragma intrinsic(_byteswap_uint64) +# pragma intrinsic(_InterlockedExchange64) +# pragma intrinsic(_InterlockedExchangeAdd64) +# pragma intrinsic(_InterlockedAnd64) +# pragma intrinsic(_InterlockedOr64) +# pragma intrinsic(_InterlockedIncrement64) +# pragma intrinsic(_InterlockedDecrement64) +# endif +#endif + +/* + * Include #pragma aux definitions for Watcom C/C++. + */ +#if defined(__WATCOMC__) && ARCH_BITS == 16 && defined(RT_ARCH_X86) +# include "asm-watcom-x86-16.h" +#elif defined(__WATCOMC__) && ARCH_BITS == 32 && defined(RT_ARCH_X86) +# include "asm-watcom-x86-32.h" +#endif + + + +/** @defgroup grp_rt_asm ASM - Assembly Routines + * @ingroup grp_rt + * + * @remarks The difference between ordered and unordered atomic operations are that + * the former will complete outstanding reads and writes before continuing + * while the latter doesn't make any promises about the order. Ordered + * operations doesn't, it seems, make any 100% promise wrt to whether + * the operation will complete before any subsequent memory access. + * (please, correct if wrong.) + * + * ASMAtomicSomething operations are all ordered, while ASMAtomicUoSomething + * are unordered (note the Uo). + * + * @remarks Some remarks about __volatile__: Without this keyword gcc is allowed to reorder + * or even optimize assembler instructions away. For instance, in the following code + * the second rdmsr instruction is optimized away because gcc treats that instruction + * as deterministic: + * + * @code + * static inline uint64_t rdmsr_low(int idx) + * { + * uint32_t low; + * __asm__ ("rdmsr" : "=a"(low) : "c"(idx) : "edx"); + * } + * ... + * uint32_t msr1 = rdmsr_low(1); + * foo(msr1); + * msr1 = rdmsr_low(1); + * bar(msr1); + * @endcode + * + * The input parameter of rdmsr_low is the same for both calls and therefore gcc will + * use the result of the first call as input parameter for bar() as well. For rdmsr this + * is not acceptable as this instruction is _not_ deterministic. This applies to reading + * machine status information in general. + * + * @{ + */ + + +/** @def RT_INLINE_ASM_GCC_4_3_X_X86 + * Used to work around some 4.3.x register allocation issues in this version of + * the compiler. So far this workaround is still required for 4.4 and 4.5 but + * definitely not for 5.x */ +#if (RT_GNUC_PREREQ(4, 3) && !RT_GNUC_PREREQ(5, 0) && defined(__i386__)) +# define RT_INLINE_ASM_GCC_4_3_X_X86 1 +#else +# define RT_INLINE_ASM_GCC_4_3_X_X86 0 +#endif + +/** @def RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC + * i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493) screws up + * RTSemRWRequestWrite semsemrw-lockless-generic.cpp in release builds. PIC + * mode, x86. + * + * Some gcc 4.3.x versions may have register allocation issues with cmpxchg8b + * when in PIC mode on x86. + */ +#ifndef RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +# if defined(DOXYGEN_RUNNING) || defined(__WATCOMC__) /* Watcom has trouble with the expression below */ +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 1 +# elif defined(_MSC_VER) /* Visual C++ has trouble too, but it'll only tell us when C4688 is enabled. */ +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 0 +# elif ( (defined(PIC) || defined(__PIC__)) \ + && defined(RT_ARCH_X86) \ + && ( RT_INLINE_ASM_GCC_4_3_X_X86 \ + || defined(RT_OS_DARWIN)) ) +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 1 +# else +# define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 0 +# endif +#endif + + +/** @def ASMReturnAddress + * Gets the return address of the current (or calling if you like) function or method. + */ +#ifdef _MSC_VER +# ifdef __cplusplus +extern "C" +# endif +void * _ReturnAddress(void); +# pragma intrinsic(_ReturnAddress) +# define ASMReturnAddress() _ReturnAddress() +#elif defined(__GNUC__) || defined(DOXYGEN_RUNNING) +# define ASMReturnAddress() __builtin_return_address(0) +#elif defined(__WATCOMC__) +# define ASMReturnAddress() Watcom_does_not_appear_to_have_intrinsic_return_address_function() +#else +# error "Unsupported compiler." +#endif + + +/** + * Compiler memory barrier. + * + * Ensure that the compiler does not use any cached (register/tmp stack) memory + * values or any outstanding writes when returning from this function. + * + * This function must be used if non-volatile data is modified by a + * device or the VMM. Typical cases are port access, MMIO access, + * trapping instruction, etc. + */ +#if RT_INLINE_ASM_GNU_STYLE +# define ASMCompilerBarrier() do { __asm__ __volatile__("" : : : "memory"); } while (0) +#elif RT_INLINE_ASM_USES_INTRIN +# define ASMCompilerBarrier() do { _ReadWriteBarrier(); } while (0) +#elif defined(__WATCOMC__) +void ASMCompilerBarrier(void); +#else /* 2003 should have _ReadWriteBarrier() but I guess we're at 2002 level then... */ +DECLINLINE(void) ASMCompilerBarrier(void) +{ + __asm + { + } +} +#endif + + +/** @def ASMBreakpoint + * Debugger Breakpoint. + * @deprecated Use RT_BREAKPOINT instead. + * @internal + */ +#define ASMBreakpoint() RT_BREAKPOINT() + + +/** + * Spinloop hint for platforms that have these, empty function on the other + * platforms. + * + * x86 & AMD64: The PAUSE variant of NOP for helping hyperthreaded CPUs detecting + * spin locks. + */ +#if RT_INLINE_ASM_EXTERNAL && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +DECLASM(void) ASMNopPause(void); +#else +DECLINLINE(void) ASMNopPause(void) +{ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__(".byte 0xf3,0x90\n\t"); +# else + __asm { + _emit 0f3h + _emit 090h + } +# endif +# else + /* dummy */ +# endif +} +#endif + + +/** + * Atomically Exchange an unsigned 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to update. + * @param u8 The 8-bit value to assign to *pu8. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint8_t) ASMAtomicXchgU8(volatile uint8_t RT_FAR *pu8, uint8_t u8); +#else +DECLINLINE(uint8_t) ASMAtomicXchgU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgb %0, %1\n\t" + : "=m" (*pu8), + "=q" (u8) /* =r - busted on g++ (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2) */ + : "1" (u8), + "m" (*pu8)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu8] + mov al, [u8] + xchg [rdx], al + mov [u8], al +# else + mov edx, [pu8] + mov al, [u8] + xchg [edx], al + mov [u8], al +# endif + } +# endif + return u8; +} +#endif + + +/** + * Atomically Exchange a signed 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pi8 Pointer to the 8-bit variable to update. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(int8_t) ASMAtomicXchgS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + return (int8_t)ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pi8, (uint8_t)i8); +} + + +/** + * Atomically Exchange a bool value, ordered. + * + * @returns Current *pf value + * @param pf Pointer to the 8-bit variable to update. + * @param f The 8-bit value to assign to *pi8. + */ +DECLINLINE(bool) ASMAtomicXchgBool(volatile bool RT_FAR *pf, bool f) +{ +#ifdef _MSC_VER + return !!ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pf, (uint8_t)f); +#else + return (bool)ASMAtomicXchgU8((volatile uint8_t RT_FAR *)pf, (uint8_t)f); +#endif +} + + +/** + * Atomically Exchange an unsigned 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to update. + * @param u16 The 16-bit value to assign to *pu16. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint16_t) ASMAtomicXchgU16(volatile uint16_t RT_FAR *pu16, uint16_t u16); +#else +DECLINLINE(uint16_t) ASMAtomicXchgU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgw %0, %1\n\t" + : "=m" (*pu16), + "=r" (u16) + : "1" (u16), + "m" (*pu16)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu16] + mov ax, [u16] + xchg [rdx], ax + mov [u16], ax +# else + mov edx, [pu16] + mov ax, [u16] + xchg [edx], ax + mov [u16], ax +# endif + } +# endif + return u16; +} +#endif + + +/** + * Atomically Exchange a signed 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pi16 Pointer to the 16-bit variable to update. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(int16_t) ASMAtomicXchgS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + return (int16_t)ASMAtomicXchgU16((volatile uint16_t RT_FAR *)pi16, (uint16_t)i16); +} + + +/** + * Atomically Exchange an unsigned 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to update. + * @param u32 The 32-bit value to assign to *pu32. + * + * @remarks Does not work on 286 and earlier. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicXchgU32(volatile uint32_t RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMAtomicXchgU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgl %0, %1\n\t" + : "=m" (*pu32), + "=r" (u32) + : "1" (u32), + "m" (*pu32)); + +# elif RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedExchange((long RT_FAR *)pu32, u32); + +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + mov eax, u32 + xchg [rdx], eax + mov [u32], eax +# else + mov edx, [pu32] + mov eax, u32 + xchg [edx], eax + mov [u32], eax +# endif + } +# endif + return u32; +} +#endif + + +/** + * Atomically Exchange a signed 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pi32 Pointer to the 32-bit variable to update. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(int32_t) ASMAtomicXchgS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically Exchange an unsigned 64-bit value, ordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64 The 64-bit value to assign to *pu64. + * + * @remarks Works on 32-bit x86 CPUs starting with Pentium. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(uint64_t) ASMAtomicXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(uint64_t) ASMAtomicXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ +# if defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_USES_INTRIN + u64 = _InterlockedExchange64((__int64 *)pu64, u64); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xchgq %0, %1\n\t" + : "=m" (*pu64), + "=r" (u64) + : "1" (u64), + "m" (*pu64)); +# else + __asm + { + mov rdx, [pu64] + mov rax, [u64] + xchg [rdx], rax + mov [u64], rax + } +# endif +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = (uint32_t)u64; + __asm__ __volatile__(/*"xchgl %%esi, %5\n\t"*/ + "xchgl %%ebx, %3\n\t" + "1:\n\t" + "lock; cmpxchg8b (%5)\n\t" + "jnz 1b\n\t" + "movl %3, %%ebx\n\t" + /*"xchgl %%esi, %5\n\t"*/ + : "=A" (u64), + "=m" (*pu64) + : "0" (*pu64), + "m" ( u32EBX ), + "c" ( (uint32_t)(u64 >> 32) ), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("1:\n\t" + "lock; cmpxchg8b %1\n\t" + "jnz 1b\n\t" + : "=A" (u64), + "=m" (*pu64) + : "0" (*pu64), + "b" ( (uint32_t)u64 ), + "c" ( (uint32_t)(u64 >> 32) )); +# endif +# else + __asm + { + mov ebx, dword ptr [u64] + mov ecx, dword ptr [u64 + 4] + mov edi, pu64 + mov eax, dword ptr [edi] + mov edx, dword ptr [edi + 4] + retry: + lock cmpxchg8b [edi] + jnz retry + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically Exchange an signed 64-bit value, ordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(int64_t) ASMAtomicXchgS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically Exchange a pointer value, ordered. + * + * @returns Current *ppv value + * @param ppv Pointer to the pointer variable to update. + * @param pv The pointer value to assign to *ppv. + */ +DECLINLINE(void RT_FAR *) ASMAtomicXchgPtr(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicXchgPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to update. + * @param pv The pointer value to assign to *ppv. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicXchgPtrT(ppv, pv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + Type const pvTypeChecked = (pv); \ + Type pvTypeCheckedRet = (__typeof__(*(ppv))) ASMAtomicXchgPtr((void * volatile *)ppvTypeChecked, (void *)pvTypeChecked); \ + pvTypeCheckedRet; \ + }) +#else +# define ASMAtomicXchgPtrT(ppv, pv, Type) \ + (Type)ASMAtomicXchgPtr((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pv)) +#endif + + +/** + * Atomically Exchange a raw-mode context pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvRC Pointer to the pointer variable to update. + * @param pvRC The pointer value to assign to *ppv. + */ +DECLINLINE(RTRCPTR) ASMAtomicXchgRCPtr(RTRCPTR volatile RT_FAR *ppvRC, RTRCPTR pvRC) +{ + return (RTRCPTR)ASMAtomicXchgU32((uint32_t volatile RT_FAR *)(void RT_FAR *)ppvRC, (uint32_t)pvRC); +} + + +/** + * Atomically Exchange a ring-0 pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvR0 Pointer to the pointer variable to update. + * @param pvR0 The pointer value to assign to *ppv. + */ +DECLINLINE(RTR0PTR) ASMAtomicXchgR0Ptr(RTR0PTR volatile RT_FAR *ppvR0, RTR0PTR pvR0) +{ +#if R0_ARCH_BITS == 32 || ARCH_BITS == 16 + return (RTR0PTR)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppvR0, (uint32_t)pvR0); +#elif R0_ARCH_BITS == 64 + return (RTR0PTR)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppvR0, (uint64_t)pvR0); +#else +# error "R0_ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Exchange a ring-3 pointer value, ordered. + * + * @returns Current *ppv value + * @param ppvR3 Pointer to the pointer variable to update. + * @param pvR3 The pointer value to assign to *ppv. + */ +DECLINLINE(RTR3PTR) ASMAtomicXchgR3Ptr(RTR3PTR volatile RT_FAR *ppvR3, RTR3PTR pvR3) +{ +#if R3_ARCH_BITS == 32 || ARCH_BITS == 16 + return (RTR3PTR)ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppvR3, (uint32_t)pvR3); +#elif R3_ARCH_BITS == 64 + return (RTR3PTR)ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppvR3, (uint64_t)pvR3); +#else +# error "R3_ARCH_BITS is bogus" +#endif +} + + +/** @def ASMAtomicXchgHandle + * Atomically Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param phRes Where to store the current *ph value. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicXchgHandle(ph, hNew, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicXchgU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicXchgHandle(ph, hNew, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicXchgU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + * @todo This is busted as its missing the result argument. + */ +#define ASMAtomicXchgSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicXchgU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t)(uNew)); break; \ + case 2: ASMAtomicXchgU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + +/** + * Atomically Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + * @param puRes Where to store the current *pu value. + */ +#define ASMAtomicXchgSizeCorrect(pu, uNew, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicXchgU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t)(uNew)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicXchgU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically Compare and Exchange an unsigned 8-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu8 Pointer to the value to update. + * @param u8New The new value to assigned to *pu8. + * @param u8Old The old value to *pu8 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL || !RT_INLINE_ASM_GNU_STYLE +DECLASM(bool) ASMAtomicCmpXchgU8(volatile uint8_t RT_FAR *pu8, const uint8_t u8New, const uint8_t u8Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU8(volatile uint8_t RT_FAR *pu8, const uint8_t u8New, uint8_t u8Old) +{ + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgb %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu8), + "=qm" (u8Ret), + "=a" (u8Old) + : "q" (u8New), + "2" (u8Old), + "m" (*pu8)); + return (bool)u8Ret; +} +#endif + + +/** + * Atomically Compare and Exchange a signed 8-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi8 Pointer to the value to update. + * @param i8New The new value to assigned to *pi8. + * @param i8Old The old value to *pi8 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS8(volatile int8_t RT_FAR *pi8, const int8_t i8New, const int8_t i8Old) +{ + return ASMAtomicCmpXchgU8((volatile uint8_t RT_FAR *)pi8, (const uint8_t)i8New, (const uint8_t)i8Old); +} + + +/** + * Atomically Compare and Exchange a bool value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pf Pointer to the value to update. + * @param fNew The new value to assigned to *pf. + * @param fOld The old value to *pf compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgBool(volatile bool RT_FAR *pf, const bool fNew, const bool fOld) +{ + return ASMAtomicCmpXchgU8((volatile uint8_t RT_FAR *)pf, (const uint8_t)fNew, (const uint8_t)fOld); +} + + +/** + * Atomically Compare and Exchange an unsigned 32-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu32 Pointer to the value to update. + * @param u32New The new value to assigned to *pu32. + * @param u32Old The old value to *pu32 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicCmpXchgU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, uint32_t u32Old) +{ +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgl %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu32), + "=qm" (u8Ret), + "=a" (u32Old) + : "r" (u32New), + "2" (u32Old), + "m" (*pu32)); + return (bool)u8Ret; + +# elif RT_INLINE_ASM_USES_INTRIN + return (uint32_t)_InterlockedCompareExchange((long RT_FAR *)pu32, u32New, u32Old) == u32Old; + +# else + uint32_t u32Ret; + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] +# else + mov edx, [pu32] +# endif + mov eax, [u32Old] + mov ecx, [u32New] +# ifdef RT_ARCH_AMD64 + lock cmpxchg [rdx], ecx +# else + lock cmpxchg [edx], ecx +# endif + setz al + movzx eax, al + mov [u32Ret], eax + } + return !!u32Ret; +# endif +} +#endif + + +/** + * Atomically Compare and Exchange a signed 32-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi32 Pointer to the value to update. + * @param i32New The new value to assigned to *pi32. + * @param i32Old The old value to *pi32 compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS32(volatile int32_t RT_FAR *pi32, const int32_t i32New, const int32_t i32Old) +{ + return ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32New, (uint32_t)i32Old); +} + + +/** + * Atomically Compare and exchange an unsigned 64-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64New The 64-bit value to assign to *pu64. + * @param u64Old The value to compare with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(bool) ASMAtomicCmpXchgU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgU64(volatile uint64_t RT_FAR *pu64, uint64_t u64New, uint64_t u64Old) +{ +# if RT_INLINE_ASM_USES_INTRIN + return (uint64_t)_InterlockedCompareExchange64((__int64 RT_FAR *)pu64, u64New, u64Old) == u64Old; + +# elif defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgq %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu64), + "=qm" (u8Ret), + "=a" (u64Old) + : "r" (u64New), + "2" (u64Old), + "m" (*pu64)); + return (bool)u8Ret; +# else + bool fRet; + __asm + { + mov rdx, [pu32] + mov rax, [u64Old] + mov rcx, [u64New] + lock cmpxchg [rdx], rcx + setz al + mov [fRet], al + } + return fRet; +# endif +# else /* !RT_ARCH_AMD64 */ + uint32_t u32Ret; +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = (uint32_t)u64New; + uint32_t u32Spill; + __asm__ __volatile__("xchgl %%ebx, %4\n\t" + "lock; cmpxchg8b (%6)\n\t" + "setz %%al\n\t" + "movl %4, %%ebx\n\t" + "movzbl %%al, %%eax\n\t" + : "=a" (u32Ret), + "=d" (u32Spill), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64) +# else + "=m" (*pu64) +# endif + : "A" (u64Old), + "m" ( u32EBX ), + "c" ( (uint32_t)(u64New >> 32) ), + "S" (pu64)); +# else /* !PIC */ + uint32_t u32Spill; + __asm__ __volatile__("lock; cmpxchg8b %2\n\t" + "setz %%al\n\t" + "movzbl %%al, %%eax\n\t" + : "=a" (u32Ret), + "=d" (u32Spill), + "+m" (*pu64) + : "A" (u64Old), + "b" ( (uint32_t)u64New ), + "c" ( (uint32_t)(u64New >> 32) )); +# endif + return (bool)u32Ret; +# else + __asm + { + mov ebx, dword ptr [u64New] + mov ecx, dword ptr [u64New + 4] + mov edi, [pu64] + mov eax, dword ptr [u64Old] + mov edx, dword ptr [u64Old + 4] + lock cmpxchg8b [edi] + setz al + movzx eax, al + mov dword ptr [u32Ret], eax + } + return !!u32Ret; +# endif +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Atomically Compare and exchange a signed 64-bit value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pu64. + * @param i64Old The value to compare with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgS64(volatile int64_t RT_FAR *pi64, const int64_t i64, const int64_t i64Old) +{ + return ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64, (uint64_t)i64Old); +} + + +/** + * Atomically Compare and Exchange a pointer value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgPtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pvNew, const void RT_FAR *pvOld) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pvNew, (uint32_t)pvOld); +#elif ARCH_BITS == 64 + return ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pvNew, (uint64_t)pvOld); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Compare and Exchange a pointer value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * + * @remarks This is relatively type safe on GCC platforms. + * @remarks x86: Requires a 486 or later. + */ +#ifdef __GNUC__ +# define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ + __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ + bool fMacroRet = ASMAtomicCmpXchgPtrVoid((void * volatile *)ppvTypeChecked, \ + (void *)pvNewTypeChecked, (void *)pvOldTypeChecked); \ + fMacroRet; \ + }) +#else +# define ASMAtomicCmpXchgPtr(ppv, pvNew, pvOld) \ + ASMAtomicCmpXchgPtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pvNew), (void RT_FAR *)(pvOld)) +#endif + + +/** @def ASMAtomicCmpXchgHandle + * Atomically Compare and Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param hOld The old value to *pu compare with. + * @param fRc Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + * @remarks x86: Requires a 486 or later. + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicCmpXchgHandle(ph, hNew, hOld, fRc) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + (fRc) = ASMAtomicCmpXchgU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew), (const uint32_t)(hOld)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicCmpXchgHandle(ph, hNew, hOld, fRc) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + (fRc) = ASMAtomicCmpXchgU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew), (const uint64_t)(hOld)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** @def ASMAtomicCmpXchgSize + * Atomically Compare and Exchange a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the value to update. + * @param uNew The new value to assigned to *pu. + * @param uOld The old value to *pu compare with. + * @param fRc Where to store the result. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicCmpXchgSize(pu, uNew, uOld, fRc) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: (fRc) = ASMAtomicCmpXchgU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld)); \ + break; \ + case 8: (fRc) = ASMAtomicCmpXchgU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld)); \ + break; \ + default: AssertMsgFailed(("ASMAtomicCmpXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + (fRc) = false; \ + break; \ + } \ + } while (0) + + +/** + * Atomically Compare and Exchange an unsigned 32-bit value, additionally + * passes back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu32 Pointer to the value to update. + * @param u32New The new value to assigned to *pu32. + * @param u32Old The old value to *pu32 compare with. + * @param pu32Old Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicCmpXchgExU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old, uint32_t RT_FAR *pu32Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgExU32(volatile uint32_t RT_FAR *pu32, const uint32_t u32New, const uint32_t u32Old, uint32_t RT_FAR *pu32Old) +{ +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgl %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu32), + "=qm" (u8Ret), + "=a" (*pu32Old) + : "r" (u32New), + "a" (u32Old), + "m" (*pu32)); + return (bool)u8Ret; + +# elif RT_INLINE_ASM_USES_INTRIN + return (*pu32Old =_InterlockedCompareExchange((long RT_FAR *)pu32, u32New, u32Old)) == u32Old; + +# else + uint32_t u32Ret; + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] +# else + mov edx, [pu32] +# endif + mov eax, [u32Old] + mov ecx, [u32New] +# ifdef RT_ARCH_AMD64 + lock cmpxchg [rdx], ecx + mov rdx, [pu32Old] + mov [rdx], eax +# else + lock cmpxchg [edx], ecx + mov edx, [pu32Old] + mov [edx], eax +# endif + setz al + movzx eax, al + mov [u32Ret], eax + } + return !!u32Ret; +# endif +} +#endif + + +/** + * Atomically Compare and Exchange a signed 32-bit value, additionally + * passes back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi32 Pointer to the value to update. + * @param i32New The new value to assigned to *pi32. + * @param i32Old The old value to *pi32 compare with. + * @param pi32Old Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExS32(volatile int32_t RT_FAR *pi32, const int32_t i32New, const int32_t i32Old, int32_t RT_FAR *pi32Old) +{ + return ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)pi32, (uint32_t)i32New, (uint32_t)i32Old, (uint32_t RT_FAR *)pi32Old); +} + + +/** + * Atomically Compare and exchange an unsigned 64-bit value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pu64 Pointer to the 64-bit variable to update. + * @param u64New The 64-bit value to assign to *pu64. + * @param u64Old The value to compare with. + * @param pu64Old Pointer store the old value at. + * + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(bool) ASMAtomicCmpXchgExU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t RT_FAR *pu64Old); +#else +DECLINLINE(bool) ASMAtomicCmpXchgExU64(volatile uint64_t RT_FAR *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t RT_FAR *pu64Old) +{ +# if RT_INLINE_ASM_USES_INTRIN + return (*pu64Old =_InterlockedCompareExchange64((__int64 RT_FAR *)pu64, u64New, u64Old)) == u64Old; + +# elif defined(RT_ARCH_AMD64) +# if RT_INLINE_ASM_GNU_STYLE + uint8_t u8Ret; + __asm__ __volatile__("lock; cmpxchgq %3, %0\n\t" + "setz %1\n\t" + : "=m" (*pu64), + "=qm" (u8Ret), + "=a" (*pu64Old) + : "r" (u64New), + "a" (u64Old), + "m" (*pu64)); + return (bool)u8Ret; +# else + bool fRet; + __asm + { + mov rdx, [pu32] + mov rax, [u64Old] + mov rcx, [u64New] + lock cmpxchg [rdx], rcx + mov rdx, [pu64Old] + mov [rdx], rax + setz al + mov [fRet], al + } + return fRet; +# endif +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE + uint64_t u64Ret; +# if defined(PIC) || defined(__PIC__) + /* NB: this code uses a memory clobber description, because the clean + * solution with an output value for *pu64 makes gcc run out of registers. + * This will cause suboptimal code, and anyone with a better solution is + * welcome to improve this. */ + __asm__ __volatile__("xchgl %%ebx, %1\n\t" + "lock; cmpxchg8b %3\n\t" + "xchgl %%ebx, %1\n\t" + : "=A" (u64Ret) + : "DS" ((uint32_t)u64New), + "c" ((uint32_t)(u64New >> 32)), + "m" (*pu64), + "0" (u64Old) + : "memory" ); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %4\n\t" + : "=A" (u64Ret), + "=m" (*pu64) + : "b" ((uint32_t)u64New), + "c" ((uint32_t)(u64New >> 32)), + "m" (*pu64), + "0" (u64Old)); +# endif + *pu64Old = u64Ret; + return u64Ret == u64Old; +# else + uint32_t u32Ret; + __asm + { + mov ebx, dword ptr [u64New] + mov ecx, dword ptr [u64New + 4] + mov edi, [pu64] + mov eax, dword ptr [u64Old] + mov edx, dword ptr [u64Old + 4] + lock cmpxchg8b [edi] + mov ebx, [pu64Old] + mov [ebx], eax + setz al + movzx eax, al + add ebx, 4 + mov [ebx], edx + mov dword ptr [u32Ret], eax + } + return !!u32Ret; +# endif +# endif /* !RT_ARCH_AMD64 */ +} +#endif + + +/** + * Atomically Compare and exchange a signed 64-bit value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param pi64 Pointer to the 64-bit variable to update. + * @param i64 The 64-bit value to assign to *pu64. + * @param i64Old The value to compare with. + * @param pi64Old Pointer store the old value at. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExS64(volatile int64_t RT_FAR *pi64, const int64_t i64, const int64_t i64Old, int64_t RT_FAR *pi64Old) +{ + return ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)pi64, (uint64_t)i64, (uint64_t)i64Old, (uint64_t RT_FAR *)pi64Old); +} + +/** @def ASMAtomicCmpXchgExHandle + * Atomically Compare and Exchange a typical IPRT handle value, ordered. + * + * @param ph Pointer to the value to update. + * @param hNew The new value to assigned to *pu. + * @param hOld The old value to *pu compare with. + * @param fRc Where to store the result. + * @param phOldVal Pointer to where to store the old value. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicCmpXchgExHandle(ph, hNew, hOld, fRc, phOldVal) \ + do { \ + AssertCompile(sizeof(*ph) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*phOldVal) == sizeof(uint32_t)); \ + (fRc) = ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld), (uint32_t RT_FAR *)(puOldVal)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicCmpXchgExHandle(ph, hNew, hOld, fRc, phOldVal) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phOldVal)) == sizeof(uint64_t)); \ + (fRc) = ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld), (uint64_t RT_FAR *)(puOldVal)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** @def ASMAtomicCmpXchgExSize + * Atomically Compare and Exchange a value which size might differ + * between platforms or compilers. Additionally passes back old value. + * + * @param pu Pointer to the value to update. + * @param uNew The new value to assigned to *pu. + * @param uOld The old value to *pu compare with. + * @param fRc Where to store the result. + * @param puOldVal Pointer to where to store the old value. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicCmpXchgExSize(pu, uNew, uOld, fRc, puOldVal) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: (fRc) = ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew), (uint32_t)(uOld), (uint32_t RT_FAR *)(uOldVal)); \ + break; \ + case 8: (fRc) = ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew), (uint64_t)(uOld), (uint64_t RT_FAR *)(uOldVal)); \ + break; \ + default: AssertMsgFailed(("ASMAtomicCmpXchgSize: size %d is not supported\n", sizeof(*(pu)))); \ + (fRc) = false; \ + (uOldVal) = 0; \ + break; \ + } \ + } while (0) + + +/** + * Atomically Compare and Exchange a pointer value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * @param ppvOld Pointer store the old value at. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(bool) ASMAtomicCmpXchgExPtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void RT_FAR *pvNew, const void RT_FAR *pvOld, + void RT_FAR * RT_FAR *ppvOld) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return ASMAtomicCmpXchgExU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pvNew, (uint32_t)pvOld, (uint32_t RT_FAR *)ppvOld); +#elif ARCH_BITS == 64 + return ASMAtomicCmpXchgExU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pvNew, (uint64_t)pvOld, (uint64_t RT_FAR *)ppvOld); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically Compare and Exchange a pointer value, additionally + * passing back old value, ordered. + * + * @returns true if xchg was done. + * @returns false if xchg wasn't done. + * + * @param ppv Pointer to the value to update. + * @param pvNew The new value to assigned to *ppv. + * @param pvOld The old value to *ppv compare with. + * @param ppvOld Pointer store the old value at. + * + * @remarks This is relatively type safe on GCC platforms. + * @remarks x86: Requires a 486 or later. + */ +#ifdef __GNUC__ +# define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvNewTypeChecked = (pvNew); \ + __typeof__(*(ppv)) const pvOldTypeChecked = (pvOld); \ + __typeof__(*(ppv)) * const ppvOldTypeChecked = (ppvOld); \ + bool fMacroRet = ASMAtomicCmpXchgExPtrVoid((void * volatile *)ppvTypeChecked, \ + (void *)pvNewTypeChecked, (void *)pvOldTypeChecked, \ + (void **)ppvOldTypeChecked); \ + fMacroRet; \ + }) +#else +# define ASMAtomicCmpXchgExPtr(ppv, pvNew, pvOld, ppvOld) \ + ASMAtomicCmpXchgExPtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pvNew), (void RT_FAR *)(pvOld), (void RT_FAR * RT_FAR *)(ppvOld)) +#endif + + +/** + * Virtualization unfriendly serializing instruction, always exits. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMSerializeInstructionCpuId(void); +#else +DECLINLINE(void) ASMSerializeInstructionCpuId(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG xAX = 0; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__ ("cpuid" + : "=a" (xAX) + : "0" (xAX) + : "rbx", "rcx", "rdx", "memory"); +# elif (defined(PIC) || defined(__PIC__)) && defined(__i386__) + __asm__ __volatile__ ("push %%ebx\n\t" + "cpuid\n\t" + "pop %%ebx\n\t" + : "=a" (xAX) + : "0" (xAX) + : "ecx", "edx", "memory"); +# else + __asm__ __volatile__ ("cpuid" + : "=a" (xAX) + : "0" (xAX) + : "ebx", "ecx", "edx", "memory"); +# endif + +# elif RT_INLINE_ASM_USES_INTRIN + int aInfo[4]; + _ReadWriteBarrier(); + __cpuid(aInfo, 0); + +# else + __asm + { + push ebx + xor eax, eax + cpuid + pop ebx + } +# endif +} +#endif + +/** + * Virtualization friendly serializing instruction, though more expensive. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMSerializeInstructionIRet(void); +#else +DECLINLINE(void) ASMSerializeInstructionIRet(void) +{ +# if RT_INLINE_ASM_GNU_STYLE +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__ ("movq %%rsp,%%r10\n\t" + "subq $128, %%rsp\n\t" /*redzone*/ + "mov %%ss, %%eax\n\t" + "pushq %%rax\n\t" + "pushq %%r10\n\t" + "pushfq\n\t" + "movl %%cs, %%eax\n\t" + "pushq %%rax\n\t" + "leaq 1f(%%rip), %%rax\n\t" + "pushq %%rax\n\t" + "iretq\n\t" + "1:\n\t" + ::: "rax", "r10", "memory"); +# else + __asm__ __volatile__ ("pushfl\n\t" + "pushl %%cs\n\t" + "pushl $1f\n\t" + "iretl\n\t" + "1:\n\t" + ::: "memory"); +# endif + +# else + __asm + { + pushfd + push cs + push la_ret + iretd + la_ret: + } +# endif +} +#endif + +/** + * Virtualization friendlier serializing instruction, may still cause exits. + */ +#if RT_INLINE_ASM_EXTERNAL && RT_INLINE_ASM_USES_INTRIN < 15 +DECLASM(void) ASMSerializeInstructionRdTscp(void); +#else +DECLINLINE(void) ASMSerializeInstructionRdTscp(void) +{ +# if RT_INLINE_ASM_GNU_STYLE + /* rdtscp is not supported by ancient linux build VM of course :-( */ +# ifdef RT_ARCH_AMD64 + /*__asm__ __volatile__("rdtscp\n\t" ::: "rax", "rdx, "rcx"); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" ::: "rax", "rdx", "rcx", "memory"); +# else + /*__asm__ __volatile__("rdtscp\n\t" ::: "eax", "edx, "ecx"); */ + __asm__ __volatile__(".byte 0x0f,0x01,0xf9\n\t" ::: "eax", "edx", "ecx", "memory"); +# endif +# else +# if RT_INLINE_ASM_USES_INTRIN >= 15 + uint32_t uIgnore; + _ReadWriteBarrier(); + (void)__rdtscp(&uIgnore); + (void)uIgnore; +# else + __asm + { + rdtscp + } +# endif +# endif +} +#endif + + +/** + * Serialize Instruction. + */ +#if (defined(RT_ARCH_X86) && ARCH_BITS == 16) || defined(IN_GUEST) +# define ASMSerializeInstruction() ASMSerializeInstructionIRet() +#else +# define ASMSerializeInstruction() ASMSerializeInstructionCpuId() +#endif + + +/** + * Memory fence, waits for any pending writes and reads to complete. + */ +DECLINLINE(void) ASMMemoryFence(void) +{ + /** @todo use mfence? check if all cpus we care for support it. */ +#if ARCH_BITS == 16 + uint16_t volatile u16; + ASMAtomicXchgU16(&u16, 0); +#else + uint32_t volatile u32; + ASMAtomicXchgU32(&u32, 0); +#endif +} + + +/** + * Write fence, waits for any pending writes to complete. + */ +DECLINLINE(void) ASMWriteFence(void) +{ + /** @todo use sfence? check if all cpus we care for support it. */ + ASMMemoryFence(); +} + + +/** + * Read fence, waits for any pending reads to complete. + */ +DECLINLINE(void) ASMReadFence(void) +{ + /** @todo use lfence? check if all cpus we care for support it. */ + ASMMemoryFence(); +} + + +/** + * Atomically reads an unsigned 8-bit value, ordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(uint8_t) ASMAtomicReadU8(volatile uint8_t RT_FAR *pu8) +{ + ASMMemoryFence(); + return *pu8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads an unsigned 8-bit value, unordered. + * + * @returns Current *pu8 value + * @param pu8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(uint8_t) ASMAtomicUoReadU8(volatile uint8_t RT_FAR *pu8) +{ + return *pu8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a signed 8-bit value, ordered. + * + * @returns Current *pi8 value + * @param pi8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(int8_t) ASMAtomicReadS8(volatile int8_t RT_FAR *pi8) +{ + ASMMemoryFence(); + return *pi8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a signed 8-bit value, unordered. + * + * @returns Current *pi8 value + * @param pi8 Pointer to the 8-bit variable to read. + */ +DECLINLINE(int8_t) ASMAtomicUoReadS8(volatile int8_t RT_FAR *pi8) +{ + return *pi8; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads an unsigned 16-bit value, ordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(uint16_t) ASMAtomicReadU16(volatile uint16_t RT_FAR *pu16) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pu16 & 1)); + return *pu16; +} + + +/** + * Atomically reads an unsigned 16-bit value, unordered. + * + * @returns Current *pu16 value + * @param pu16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(uint16_t) ASMAtomicUoReadU16(volatile uint16_t RT_FAR *pu16) +{ + Assert(!((uintptr_t)pu16 & 1)); + return *pu16; +} + + +/** + * Atomically reads a signed 16-bit value, ordered. + * + * @returns Current *pi16 value + * @param pi16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(int16_t) ASMAtomicReadS16(volatile int16_t RT_FAR *pi16) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pi16 & 1)); + return *pi16; +} + + +/** + * Atomically reads a signed 16-bit value, unordered. + * + * @returns Current *pi16 value + * @param pi16 Pointer to the 16-bit variable to read. + */ +DECLINLINE(int16_t) ASMAtomicUoReadS16(volatile int16_t RT_FAR *pi16) +{ + Assert(!((uintptr_t)pi16 & 1)); + return *pi16; +} + + +/** + * Atomically reads an unsigned 32-bit value, ordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(uint32_t) ASMAtomicReadU32(volatile uint32_t RT_FAR *pu32) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pu32; +} + + +/** + * Atomically reads an unsigned 32-bit value, unordered. + * + * @returns Current *pu32 value + * @param pu32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(uint32_t) ASMAtomicUoReadU32(volatile uint32_t RT_FAR *pu32) +{ + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pu32; +} + + +/** + * Atomically reads a signed 32-bit value, ordered. + * + * @returns Current *pi32 value + * @param pi32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(int32_t) ASMAtomicReadS32(volatile int32_t RT_FAR *pi32) +{ + ASMMemoryFence(); + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pi32; +} + + +/** + * Atomically reads a signed 32-bit value, unordered. + * + * @returns Current *pi32 value + * @param pi32 Pointer to the 32-bit variable to read. + */ +DECLINLINE(int32_t) ASMAtomicUoReadS32(volatile int32_t RT_FAR *pi32) +{ + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS == 16 + AssertFailed(); /** @todo 16-bit */ +#endif + return *pi32; +} + + +/** + * Atomically reads an unsigned 64-bit value, ordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +#if (RT_INLINE_ASM_EXTERNAL && !defined(RT_ARCH_AMD64)) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC +DECLASM(uint64_t) ASMAtomicReadU64(volatile uint64_t RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicReadU64(volatile uint64_t RT_FAR *pu64) +{ + uint64_t u64; +# ifdef RT_ARCH_AMD64 + Assert(!((uintptr_t)pu64 & 7)); +/*# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__( "mfence\n\t" + "movq %1, %0\n\t" + : "=r" (u64) + : "m" (*pu64)); +# else + __asm + { + mfence + mov rdx, [pu64] + mov rax, [rdx] + mov [u64], rax + } +# endif*/ + ASMMemoryFence(); + u64 = *pu64; +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = 0; + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("xchgl %%ebx, %3\n\t" + "lock; cmpxchg8b (%5)\n\t" + "movl %3, %%ebx\n\t" + : "=A" (u64), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64) +# else + "=m" (*pu64) +# endif + : "0" (0ULL), + "m" (u32EBX), + "c" (0), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %1\n\t" + : "=A" (u64), + "+m" (*pu64) + : "0" (0ULL), + "b" (0), + "c" (0)); +# endif +# else + Assert(!((uintptr_t)pu64 & 7)); + __asm + { + xor eax, eax + xor edx, edx + mov edi, pu64 + xor ecx, ecx + xor ebx, ebx + lock cmpxchg8b [edi] + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically reads an unsigned 64-bit value, unordered. + * + * @returns Current *pu64 value + * @param pu64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +#if !defined(RT_ARCH_AMD64) \ + && ( (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ + || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC) +DECLASM(uint64_t) ASMAtomicUoReadU64(volatile uint64_t RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicUoReadU64(volatile uint64_t RT_FAR *pu64) +{ + uint64_t u64; +# ifdef RT_ARCH_AMD64 + Assert(!((uintptr_t)pu64 & 7)); +/*# if RT_INLINE_ASM_GNU_STYLE + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("movq %1, %0\n\t" + : "=r" (u64) + : "m" (*pu64)); +# else + __asm + { + mov rdx, [pu64] + mov rax, [rdx] + mov [u64], rax + } +# endif */ + u64 = *pu64; +# else /* !RT_ARCH_AMD64 */ +# if RT_INLINE_ASM_GNU_STYLE +# if defined(PIC) || defined(__PIC__) + uint32_t u32EBX = 0; + uint32_t u32Spill; + Assert(!((uintptr_t)pu64 & 7)); + __asm__ __volatile__("xor %%eax,%%eax\n\t" + "xor %%ecx,%%ecx\n\t" + "xor %%edx,%%edx\n\t" + "xchgl %%ebx, %3\n\t" + "lock; cmpxchg8b (%4)\n\t" + "movl %3, %%ebx\n\t" + : "=A" (u64), +# if RT_GNUC_PREREQ(4, 3) + "+m" (*pu64), +# else + "=m" (*pu64), +# endif + "=c" (u32Spill) + : "m" (u32EBX), + "S" (pu64)); +# else /* !PIC */ + __asm__ __volatile__("lock; cmpxchg8b %1\n\t" + : "=A" (u64), + "+m" (*pu64) + : "0" (0ULL), + "b" (0), + "c" (0)); +# endif +# else + Assert(!((uintptr_t)pu64 & 7)); + __asm + { + xor eax, eax + xor edx, edx + mov edi, pu64 + xor ecx, ecx + xor ebx, ebx + lock cmpxchg8b [edi] + mov dword ptr [u64], eax + mov dword ptr [u64 + 4], edx + } +# endif +# endif /* !RT_ARCH_AMD64 */ + return u64; +} +#endif + + +/** + * Atomically reads a signed 64-bit value, ordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This may fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicReadS64(volatile int64_t RT_FAR *pi64) +{ + return (int64_t)ASMAtomicReadU64((volatile uint64_t RT_FAR *)pi64); +} + + +/** + * Atomically reads a signed 64-bit value, unordered. + * + * @returns Current *pi64 value + * @param pi64 Pointer to the 64-bit variable to read. + * The memory pointed to must be writable. + * + * @remarks This will fault if the memory is read-only! + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicUoReadS64(volatile int64_t RT_FAR *pi64) +{ + return (int64_t)ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)pi64); +} + + +/** + * Atomically reads a size_t value, ordered. + * + * @returns Current *pcb value + * @param pcb Pointer to the size_t variable to read. + */ +DECLINLINE(size_t) ASMAtomicReadZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicReadU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicReadU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicReadU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically reads a size_t value, unordered. + * + * @returns Current *pcb value + * @param pcb Pointer to the size_t variable to read. + */ +DECLINLINE(size_t) ASMAtomicUoReadZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 || ARCH_BITS == 16 + return ASMAtomicUoReadU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicUoReadU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicUoReadU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically reads a pointer value, ordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * + * @remarks Please use ASMAtomicReadPtrT, it provides better type safety and + * requires less typing (no casts). + */ +DECLINLINE(void RT_FAR *) ASMAtomicReadPtr(void RT_FAR * volatile RT_FAR *ppv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv); +#else +# error "ARCH_BITS is bogus" +#endif +} + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicReadPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicReadPtrT(ppv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile *ppvTypeChecked = (ppv); \ + Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicReadPtr((void * volatile *)ppvTypeChecked); \ + pvTypeChecked; \ + }) +#else +# define ASMAtomicReadPtrT(ppv, Type) \ + (Type)ASMAtomicReadPtr((void RT_FAR * volatile RT_FAR *)(ppv)) +#endif + + +/** + * Atomically reads a pointer value, unordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * + * @remarks Please use ASMAtomicUoReadPtrT, it provides better type safety and + * requires less typing (no casts). + */ +DECLINLINE(void RT_FAR *) ASMAtomicUoReadPtr(void RT_FAR * volatile RT_FAR *ppv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + return (void RT_FAR *)ASMAtomicUoReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv); +#elif ARCH_BITS == 64 + return (void RT_FAR *)ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Convenience macro for avoiding the annoying casting with ASMAtomicUoReadPtr. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable to read. + * @param Type The type of *ppv, sans volatile. + */ +#ifdef __GNUC__ +# define ASMAtomicUoReadPtrT(ppv, Type) \ + __extension__ \ + ({\ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + Type pvTypeChecked = (__typeof__(*(ppv))) ASMAtomicUoReadPtr((void * volatile *)ppvTypeChecked); \ + pvTypeChecked; \ + }) +#else +# define ASMAtomicUoReadPtrT(ppv, Type) \ + (Type)ASMAtomicUoReadPtr((void RT_FAR * volatile RT_FAR *)(ppv)) +#endif + + +/** + * Atomically reads a boolean value, ordered. + * + * @returns Current *pf value + * @param pf Pointer to the boolean variable to read. + */ +DECLINLINE(bool) ASMAtomicReadBool(volatile bool RT_FAR *pf) +{ + ASMMemoryFence(); + return *pf; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically reads a boolean value, unordered. + * + * @returns Current *pf value + * @param pf Pointer to the boolean variable to read. + */ +DECLINLINE(bool) ASMAtomicUoReadBool(volatile bool RT_FAR *pf) +{ + return *pf; /* byte reads are atomic on x86 */ +} + + +/** + * Atomically read a typical IPRT handle value, ordered. + * + * @param ph Pointer to the handle variable to read. + * @param phRes Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicReadU32((uint32_t volatile RT_FAR *)(ph)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicReadU64((uint64_t volatile RT_FAR *)(ph)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically read a typical IPRT handle value, unordered. + * + * @param ph Pointer to the handle variable to read. + * @param phRes Where to store the result. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicUoReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint32_t)); \ + *(uint32_t RT_FAR *)(phRes) = ASMAtomicUoReadU32((uint32_t volatile RT_FAR *)(ph)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicUoReadHandle(ph, phRes) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + AssertCompile(sizeof(*(phRes)) == sizeof(uint64_t)); \ + *(uint64_t RT_FAR *)(phRes) = ASMAtomicUoReadU64((uint64_t volatile RT_FAR *)(ph)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically read a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to read. + * @param puRes Where to store the result. + */ +#define ASMAtomicReadSize(pu, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicReadU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicReadU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + +/** + * Atomically read a value which size might differ + * between platforms or compilers, unordered. + * + * @param pu Pointer to the variable to read. + * @param puRes Where to store the result. + */ +#define ASMAtomicUoReadSize(pu, puRes) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: *(uint8_t RT_FAR *)(puRes) = ASMAtomicUoReadU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 2: *(uint16_t RT_FAR *)(puRes) = ASMAtomicUoReadU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 4: *(uint32_t RT_FAR *)(puRes) = ASMAtomicUoReadU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + case 8: *(uint64_t RT_FAR *)(puRes) = ASMAtomicUoReadU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu)); break; \ + default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + +/** + * Atomically writes an unsigned 8-bit value, ordered. + * + * @param pu8 Pointer to the 8-bit variable. + * @param u8 The 8-bit value to assign to *pu8. + */ +DECLINLINE(void) ASMAtomicWriteU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ + ASMAtomicXchgU8(pu8, u8); +} + + +/** + * Atomically writes an unsigned 8-bit value, unordered. + * + * @param pu8 Pointer to the 8-bit variable. + * @param u8 The 8-bit value to assign to *pu8. + */ +DECLINLINE(void) ASMAtomicUoWriteU8(volatile uint8_t RT_FAR *pu8, uint8_t u8) +{ + *pu8 = u8; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes a signed 8-bit value, ordered. + * + * @param pi8 Pointer to the 8-bit variable to read. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(void) ASMAtomicWriteS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + ASMAtomicXchgS8(pi8, i8); +} + + +/** + * Atomically writes a signed 8-bit value, unordered. + * + * @param pi8 Pointer to the 8-bit variable to write. + * @param i8 The 8-bit value to assign to *pi8. + */ +DECLINLINE(void) ASMAtomicUoWriteS8(volatile int8_t RT_FAR *pi8, int8_t i8) +{ + *pi8 = i8; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes an unsigned 16-bit value, ordered. + * + * @param pu16 Pointer to the 16-bit variable to write. + * @param u16 The 16-bit value to assign to *pu16. + */ +DECLINLINE(void) ASMAtomicWriteU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ + ASMAtomicXchgU16(pu16, u16); +} + + +/** + * Atomically writes an unsigned 16-bit value, unordered. + * + * @param pu16 Pointer to the 16-bit variable to write. + * @param u16 The 16-bit value to assign to *pu16. + */ +DECLINLINE(void) ASMAtomicUoWriteU16(volatile uint16_t RT_FAR *pu16, uint16_t u16) +{ + Assert(!((uintptr_t)pu16 & 1)); + *pu16 = u16; +} + + +/** + * Atomically writes a signed 16-bit value, ordered. + * + * @param pi16 Pointer to the 16-bit variable to write. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(void) ASMAtomicWriteS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + ASMAtomicXchgS16(pi16, i16); +} + + +/** + * Atomically writes a signed 16-bit value, unordered. + * + * @param pi16 Pointer to the 16-bit variable to write. + * @param i16 The 16-bit value to assign to *pi16. + */ +DECLINLINE(void) ASMAtomicUoWriteS16(volatile int16_t RT_FAR *pi16, int16_t i16) +{ + Assert(!((uintptr_t)pi16 & 1)); + *pi16 = i16; +} + + +/** + * Atomically writes an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the 32-bit variable to write. + * @param u32 The 32-bit value to assign to *pu32. + */ +DECLINLINE(void) ASMAtomicWriteU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ + ASMAtomicXchgU32(pu32, u32); +} + + +/** + * Atomically writes an unsigned 32-bit value, unordered. + * + * @param pu32 Pointer to the 32-bit variable to write. + * @param u32 The 32-bit value to assign to *pu32. + */ +DECLINLINE(void) ASMAtomicUoWriteU32(volatile uint32_t RT_FAR *pu32, uint32_t u32) +{ + Assert(!((uintptr_t)pu32 & 3)); +#if ARCH_BITS >= 32 + *pu32 = u32; +#else + ASMAtomicXchgU32(pu32, u32); +#endif +} + + +/** + * Atomically writes a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the 32-bit variable to write. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(void) ASMAtomicWriteS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + ASMAtomicXchgS32(pi32, i32); +} + + +/** + * Atomically writes a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the 32-bit variable to write. + * @param i32 The 32-bit value to assign to *pi32. + */ +DECLINLINE(void) ASMAtomicUoWriteS32(volatile int32_t RT_FAR *pi32, int32_t i32) +{ + Assert(!((uintptr_t)pi32 & 3)); +#if ARCH_BITS >= 32 + *pi32 = i32; +#else + ASMAtomicXchgS32(pi32, i32); +#endif +} + + +/** + * Atomically writes an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the 64-bit variable to write. + * @param u64 The 64-bit value to assign to *pu64. + */ +DECLINLINE(void) ASMAtomicWriteU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ + ASMAtomicXchgU64(pu64, u64); +} + + +/** + * Atomically writes an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the 64-bit variable to write. + * @param u64 The 64-bit value to assign to *pu64. + */ +DECLINLINE(void) ASMAtomicUoWriteU64(volatile uint64_t RT_FAR *pu64, uint64_t u64) +{ + Assert(!((uintptr_t)pu64 & 7)); +#if ARCH_BITS == 64 + *pu64 = u64; +#else + ASMAtomicXchgU64(pu64, u64); +#endif +} + + +/** + * Atomically writes a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the 64-bit variable to write. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(void) ASMAtomicWriteS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + ASMAtomicXchgS64(pi64, i64); +} + + +/** + * Atomically writes a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the 64-bit variable to write. + * @param i64 The 64-bit value to assign to *pi64. + */ +DECLINLINE(void) ASMAtomicUoWriteS64(volatile int64_t RT_FAR *pi64, int64_t i64) +{ + Assert(!((uintptr_t)pi64 & 7)); +#if ARCH_BITS == 64 + *pi64 = i64; +#else + ASMAtomicXchgS64(pi64, i64); +#endif +} + + +/** + * Atomically writes a size_t value, ordered. + * + * @returns nothing. + * @param pcb Pointer to the size_t variable to write. + * @param cb The value to assign to *pcb. + */ +DECLINLINE(void) ASMAtomicWriteZ(volatile size_t RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + ASMAtomicWriteU64((uint64_t volatile *)pcb, cb); +#elif ARCH_BITS == 32 + ASMAtomicWriteU32((uint32_t volatile *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + ASMAtomicWriteU16((uint16_t volatile *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically writes a boolean value, unordered. + * + * @param pf Pointer to the boolean variable to write. + * @param f The boolean value to assign to *pf. + */ +DECLINLINE(void) ASMAtomicWriteBool(volatile bool RT_FAR *pf, bool f) +{ + ASMAtomicWriteU8((uint8_t volatile RT_FAR *)pf, f); +} + + +/** + * Atomically writes a boolean value, unordered. + * + * @param pf Pointer to the boolean variable to write. + * @param f The boolean value to assign to *pf. + */ +DECLINLINE(void) ASMAtomicUoWriteBool(volatile bool RT_FAR *pf, bool f) +{ + *pf = f; /* byte writes are atomic on x86 */ +} + + +/** + * Atomically writes a pointer value, ordered. + * + * @param ppv Pointer to the pointer variable to write. + * @param pv The pointer value to assign to *ppv. + */ +DECLINLINE(void) ASMAtomicWritePtrVoid(void RT_FAR * volatile RT_FAR *ppv, const void *pv) +{ +#if ARCH_BITS == 32 || ARCH_BITS == 16 + ASMAtomicWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)ppv, (uint32_t)pv); +#elif ARCH_BITS == 64 + ASMAtomicWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)ppv, (uint64_t)pv); +#else +# error "ARCH_BITS is bogus" +#endif +} + + +/** + * Atomically writes a pointer value, ordered. + * + * @param ppv Pointer to the pointer variable to write. + * @param pv The pointer value to assign to *ppv. If NULL use + * ASMAtomicWriteNullPtr or you'll land in trouble. + * + * @remarks This is relatively type safe on GCC platforms when @a pv isn't + * NULL. + */ +#ifdef __GNUC__ +# define ASMAtomicWritePtr(ppv, pv) \ + do \ + { \ + __typeof__(*(ppv)) volatile RT_FAR * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvTypeChecked = (pv); \ + \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppvTypeChecked), (void RT_FAR *)(pvTypeChecked)); \ + } while (0) +#else +# define ASMAtomicWritePtr(ppv, pv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), (void RT_FAR *)(pv)); \ + } while (0) +#endif + + +/** + * Atomically sets a pointer to NULL, ordered. + * + * @param ppv Pointer to the pointer variable that should be set to NULL. + * + * @remarks This is relatively type safe on GCC platforms. + */ +#ifdef __GNUC__ +# define ASMAtomicWriteNullPtr(ppv) \ + do \ + { \ + __typeof__(*(ppv)) * const ppvTypeChecked = (ppv); \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppvTypeChecked), NULL); \ + } while (0) +#else +# define ASMAtomicWriteNullPtr(ppv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + ASMAtomicWritePtrVoid((void RT_FAR * volatile RT_FAR *)(ppv), NULL); \ + } while (0) +#endif + + +/** + * Atomically writes a pointer value, unordered. + * + * @returns Current *pv value + * @param ppv Pointer to the pointer variable. + * @param pv The pointer value to assign to *ppv. If NULL use + * ASMAtomicUoWriteNullPtr or you'll land in trouble. + * + * @remarks This is relatively type safe on GCC platforms when @a pv isn't + * NULL. + */ +#ifdef __GNUC__ +# define ASMAtomicUoWritePtr(ppv, pv) \ + do \ + { \ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + __typeof__(*(ppv)) const pvTypeChecked = (pv); \ + \ + AssertCompile(sizeof(*ppv) == sizeof(void *)); \ + AssertCompile(sizeof(pv) == sizeof(void *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + \ + *(ppvTypeChecked) = pvTypeChecked; \ + } while (0) +#else +# define ASMAtomicUoWritePtr(ppv, pv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + AssertCompile(sizeof(pv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppv) = pv; \ + } while (0) +#endif + + +/** + * Atomically sets a pointer to NULL, unordered. + * + * @param ppv Pointer to the pointer variable that should be set to NULL. + * + * @remarks This is relatively type safe on GCC platforms. + */ +#ifdef __GNUC__ +# define ASMAtomicUoWriteNullPtr(ppv) \ + do \ + { \ + __typeof__(*(ppv)) volatile * const ppvTypeChecked = (ppv); \ + AssertCompile(sizeof(*ppv) == sizeof(void *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppvTypeChecked) = NULL; \ + } while (0) +#else +# define ASMAtomicUoWriteNullPtr(ppv) \ + do \ + { \ + AssertCompile(sizeof(*ppv) == sizeof(void RT_FAR *)); \ + Assert(!( (uintptr_t)ppv & ((ARCH_BITS / 8) - 1) )); \ + *(ppv) = NULL; \ + } while (0) +#endif + + +/** + * Atomically write a typical IPRT handle value, ordered. + * + * @param ph Pointer to the variable to update. + * @param hNew The value to assign to *ph. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + ASMAtomicWriteU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)(hNew)); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + ASMAtomicWriteU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)(hNew)); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically write a typical IPRT handle value, unordered. + * + * @param ph Pointer to the variable to update. + * @param hNew The value to assign to *ph. + * + * @remarks This doesn't currently work for all handles (like RTFILE). + */ +#if HC_ARCH_BITS == 32 || ARCH_BITS == 16 +# define ASMAtomicUoWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint32_t)); \ + ASMAtomicUoWriteU32((uint32_t volatile RT_FAR *)(ph), (const uint32_t)hNew); \ + } while (0) +#elif HC_ARCH_BITS == 64 +# define ASMAtomicUoWriteHandle(ph, hNew) \ + do { \ + AssertCompile(sizeof(*(ph)) == sizeof(uint64_t)); \ + ASMAtomicUoWriteU64((uint64_t volatile RT_FAR *)(ph), (const uint64_t)hNew); \ + } while (0) +#else +# error HC_ARCH_BITS +#endif + + +/** + * Atomically write a value which size might differ + * between platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + */ +#define ASMAtomicWriteSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicWriteU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t )(uNew)); break; \ + case 2: ASMAtomicWriteU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicWriteSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + +/** + * Atomically write a value which size might differ + * between platforms or compilers, unordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to assign to *pu. + */ +#define ASMAtomicUoWriteSize(pu, uNew) \ + do { \ + switch (sizeof(*(pu))) { \ + case 1: ASMAtomicUoWriteU8( (volatile uint8_t RT_FAR *)(void RT_FAR *)(pu), (uint8_t )(uNew)); break; \ + case 2: ASMAtomicUoWriteU16((volatile uint16_t RT_FAR *)(void RT_FAR *)(pu), (uint16_t)(uNew)); break; \ + case 4: ASMAtomicUoWriteU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: ASMAtomicUoWriteU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicWriteSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically exchanges and adds to a 16-bit value, ordered. + * + * @returns The old value. + * @param pu16 Pointer to the value. + * @param u16 Number to add. + * + * @remarks Currently not implemented, just to make 16-bit code happy. + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint16_t) ASMAtomicAddU16(uint16_t volatile RT_FAR *pu16, uint32_t u16); + + +/** + * Atomically exchanges and adds to a 32-bit value, ordered. + * + * @returns The old value. + * @param pu32 Pointer to the value. + * @param u32 Number to add. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicAddU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(uint32_t) ASMAtomicAddU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedExchangeAdd((long RT_FAR *)pu32, u32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (u32), + "m" (*pu32) + : "memory"); + return u32; +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov [u32], eax + } + return u32; +# endif +} +#endif + + +/** + * Atomically exchanges and adds to a signed 32-bit value, ordered. + * + * @returns The old value. + * @param pi32 Pointer to the value. + * @param i32 Number to add. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicAddS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicAddU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically exchanges and adds to a 64-bit value, ordered. + * + * @returns The old value. + * @param pu64 Pointer to the value. + * @param u64 Number to add. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicAddU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(uint64_t) ASMAtomicAddU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + u64 = _InterlockedExchangeAdd64((__int64 RT_FAR *)pu64, u64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; xaddq %0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (u64), + "m" (*pu64) + : "memory"); + return u64; +# else + uint64_t u64Old; + for (;;) + { + uint64_t u64New; + u64Old = ASMAtomicUoReadU64(pu64); + u64New = u64Old + u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } + return u64Old; +# endif +} +#endif + + +/** + * Atomically exchanges and adds to a signed 64-bit value, ordered. + * + * @returns The old value. + * @param pi64 Pointer to the value. + * @param i64 Number to add. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicAddS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicAddU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically exchanges and adds to a size_t value, ordered. + * + * @returns The old value. + * @param pcb Pointer to the size_t value. + * @param cb Number to add. + */ +DECLINLINE(size_t) ASMAtomicAddZ(size_t volatile RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + AssertCompileSize(size_t, 8); + return ASMAtomicAddU64((uint64_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 32 + AssertCompileSize(size_t, 4); + return ASMAtomicAddU32((uint32_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicAddU16((uint16_t volatile RT_FAR *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically exchanges and adds a value which size might differ between + * platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to add to *pu. + * @param puOld Where to store the old value. + */ +#define ASMAtomicAddSize(pu, uNew, puOld) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: *(uint32_t *)(puOld) = ASMAtomicAddU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t *)(puOld) = ASMAtomicAddU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicAddSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically exchanges and subtracts to an unsigned 16-bit value, ordered. + * + * @returns The old value. + * @param pu16 Pointer to the value. + * @param u16 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(uint16_t) ASMAtomicSubU16(uint16_t volatile RT_FAR *pu16, uint32_t u16) +{ + return ASMAtomicAddU16(pu16, (uint16_t)-(int16_t)u16); +} + + +/** + * Atomically exchanges and subtracts to a signed 16-bit value, ordered. + * + * @returns The old value. + * @param pi16 Pointer to the value. + * @param i16 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int16_t) ASMAtomicSubS16(int16_t volatile RT_FAR *pi16, int16_t i16) +{ + return (int16_t)ASMAtomicAddU16((uint16_t volatile RT_FAR *)pi16, (uint16_t)-i16); +} + + +/** + * Atomically exchanges and subtracts to an unsigned 32-bit value, ordered. + * + * @returns The old value. + * @param pu32 Pointer to the value. + * @param u32 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(uint32_t) ASMAtomicSubU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ + return ASMAtomicAddU32(pu32, (uint32_t)-(int32_t)u32); +} + + +/** + * Atomically exchanges and subtracts to a signed 32-bit value, ordered. + * + * @returns The old value. + * @param pi32 Pointer to the value. + * @param i32 Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicSubS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + return (int32_t)ASMAtomicAddU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)-i32); +} + + +/** + * Atomically exchanges and subtracts to an unsigned 64-bit value, ordered. + * + * @returns The old value. + * @param pu64 Pointer to the value. + * @param u64 Number to subtract. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(uint64_t) ASMAtomicSubU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ + return ASMAtomicAddU64(pu64, (uint64_t)-(int64_t)u64); +} + + +/** + * Atomically exchanges and subtracts to a signed 64-bit value, ordered. + * + * @returns The old value. + * @param pi64 Pointer to the value. + * @param i64 Number to subtract. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicSubS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + return (int64_t)ASMAtomicAddU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)-i64); +} + + +/** + * Atomically exchanges and subtracts to a size_t value, ordered. + * + * @returns The old value. + * @param pcb Pointer to the size_t value. + * @param cb Number to subtract. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(size_t) ASMAtomicSubZ(size_t volatile RT_FAR *pcb, size_t cb) +{ +#if ARCH_BITS == 64 + return ASMAtomicSubU64((uint64_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 32 + return ASMAtomicSubU32((uint32_t volatile RT_FAR *)pcb, cb); +#elif ARCH_BITS == 16 + AssertCompileSize(size_t, 2); + return ASMAtomicSubU16((uint16_t volatile RT_FAR *)pcb, cb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically exchanges and subtracts a value which size might differ between + * platforms or compilers, ordered. + * + * @param pu Pointer to the variable to update. + * @param uNew The value to subtract to *pu. + * @param puOld Where to store the old value. + * + * @remarks x86: Requires a 486 or later. + */ +#define ASMAtomicSubSize(pu, uNew, puOld) \ + do { \ + switch (sizeof(*(pu))) { \ + case 4: *(uint32_t RT_FAR *)(puOld) = ASMAtomicSubU32((volatile uint32_t RT_FAR *)(void RT_FAR *)(pu), (uint32_t)(uNew)); break; \ + case 8: *(uint64_t RT_FAR *)(puOld) = ASMAtomicSubU64((volatile uint64_t RT_FAR *)(void RT_FAR *)(pu), (uint64_t)(uNew)); break; \ + default: AssertMsgFailed(("ASMAtomicSubSize: size %d is not supported\n", sizeof(*(pu)))); \ + } \ + } while (0) + + + +/** + * Atomically increment a 16-bit value, ordered. + * + * @returns The new value. + * @param pu16 Pointer to the value to increment. + * @remarks Not implemented. Just to make 16-bit code happy. + * + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint16_t) ASMAtomicIncU16(uint16_t volatile RT_FAR *pu16); + + +/** + * Atomically increment a 32-bit value, ordered. + * + * @returns The new value. + * @param pu32 Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicIncU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicIncU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedIncrement((long RT_FAR *)pu32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (1), + "m" (*pu32) + : "memory"); + return u32+1; +# else + __asm + { + mov eax, 1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov u32, eax + } + return u32+1; +# endif +} +#endif + + +/** + * Atomically increment a signed 32-bit value, ordered. + * + * @returns The new value. + * @param pi32 Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicIncS32(int32_t volatile RT_FAR *pi32) +{ + return (int32_t)ASMAtomicIncU32((uint32_t volatile RT_FAR *)pi32); +} + + +/** + * Atomically increment a 64-bit value, ordered. + * + * @returns The new value. + * @param pu64 Pointer to the value to increment. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicIncU64(uint64_t volatile RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicIncU64(uint64_t volatile RT_FAR *pu64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + uint64_t u64; + u64 = _InterlockedIncrement64((__int64 RT_FAR *)pu64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + uint64_t u64; + __asm__ __volatile__("lock; xaddq %0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (1), + "m" (*pu64) + : "memory"); + return u64 + 1; +# else + return ASMAtomicAddU64(pu64, 1) + 1; +# endif +} +#endif + + +/** + * Atomically increment a signed 64-bit value, ordered. + * + * @returns The new value. + * @param pi64 Pointer to the value to increment. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicIncS64(int64_t volatile RT_FAR *pi64) +{ + return (int64_t)ASMAtomicIncU64((uint64_t volatile RT_FAR *)pi64); +} + + +/** + * Atomically increment a size_t value, ordered. + * + * @returns The new value. + * @param pcb Pointer to the value to increment. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int64_t) ASMAtomicIncZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicIncU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicIncU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + return ASMAtomicIncU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + + +/** + * Atomically decrement an unsigned 32-bit value, ordered. + * + * @returns The new value. + * @param pu16 Pointer to the value to decrement. + * @remarks Not implemented. Just to make 16-bit code happy. + * + * @remarks x86: Requires a 486 or later. + */ +DECLASM(uint32_t) ASMAtomicDecU16(uint16_t volatile RT_FAR *pu16); + + +/** + * Atomically decrement an unsigned 32-bit value, ordered. + * + * @returns The new value. + * @param pu32 Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMAtomicDecU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicDecU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_USES_INTRIN + u32 = _InterlockedDecrement((long RT_FAR *)pu32); + return u32; + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (-1), + "m" (*pu32) + : "memory"); + return u32-1; +# else + __asm + { + mov eax, -1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock xadd [rdx], eax +# else + mov edx, [pu32] + lock xadd [edx], eax +# endif + mov u32, eax + } + return u32-1; +# endif +} +#endif + + +/** + * Atomically decrement a signed 32-bit value, ordered. + * + * @returns The new value. + * @param pi32 Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int32_t) ASMAtomicDecS32(int32_t volatile RT_FAR *pi32) +{ + return (int32_t)ASMAtomicDecU32((uint32_t volatile RT_FAR *)pi32); +} + + +/** + * Atomically decrement an unsigned 64-bit value, ordered. + * + * @returns The new value. + * @param pu64 Pointer to the value to decrement. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint64_t) ASMAtomicDecU64(uint64_t volatile RT_FAR *pu64); +#else +DECLINLINE(uint64_t) ASMAtomicDecU64(uint64_t volatile RT_FAR *pu64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + uint64_t u64 = _InterlockedDecrement64((__int64 volatile RT_FAR *)pu64); + return u64; + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + uint64_t u64; + __asm__ __volatile__("lock; xaddq %q0, %1\n\t" + : "=r" (u64), + "=m" (*pu64) + : "0" (~(uint64_t)0), + "m" (*pu64) + : "memory"); + return u64-1; +# else + return ASMAtomicAddU64(pu64, UINT64_MAX) - 1; +# endif +} +#endif + + +/** + * Atomically decrement a signed 64-bit value, ordered. + * + * @returns The new value. + * @param pi64 Pointer to the value to decrement. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(int64_t) ASMAtomicDecS64(int64_t volatile RT_FAR *pi64) +{ + return (int64_t)ASMAtomicDecU64((uint64_t volatile RT_FAR *)pi64); +} + + +/** + * Atomically decrement a size_t value, ordered. + * + * @returns The new value. + * @param pcb Pointer to the value to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +DECLINLINE(int64_t) ASMAtomicDecZ(size_t volatile RT_FAR *pcb) +{ +#if ARCH_BITS == 64 + return ASMAtomicDecU64((uint64_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 32 + return ASMAtomicDecU32((uint32_t volatile RT_FAR *)pcb); +#elif ARCH_BITS == 16 + return ASMAtomicDecU16((uint16_t volatile RT_FAR *)pcb); +#else +# error "Unsupported ARCH_BITS value" +#endif +} + + +/** + * Atomically Or an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the pointer variable to OR u32 with. + * @param u32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + _InterlockedOr((long volatile RT_FAR *)pu32, (long)u32); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; orl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock or [rdx], eax +# else + mov edx, [pu32] + lock or [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically Or a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the pointer variable to OR u32 with. + * @param i32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicOrS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicOrU32((uint32_t volatile RT_FAR *)pi32, i32); +} + + +/** + * Atomically Or an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the pointer variable to OR u64 with. + * @param u64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + _InterlockedOr64((__int64 volatile RT_FAR *)pu64, (__int64)u64); + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; orq %1, %q0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old | u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically Or a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the pointer variable to OR u64 with. + * @param i64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicOrS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicOrU64((uint64_t volatile RT_FAR *)pi64, i64); +} + + +/** + * Atomically And an unsigned 32-bit value, ordered. + * + * @param pu32 Pointer to the pointer variable to AND u32 with. + * @param u32 The value to AND *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + _InterlockedAnd((long volatile RT_FAR *)pu32, u32); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; andl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + lock and [rdx], eax +# else + mov edx, [pu32] + lock and [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically And a signed 32-bit value, ordered. + * + * @param pi32 Pointer to the pointer variable to AND i32 with. + * @param i32 The value to AND *pi32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicAndS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicAndU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically And an unsigned 64-bit value, ordered. + * + * @param pu64 Pointer to the pointer variable to AND u64 with. + * @param u64 The value to AND *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN && defined(RT_ARCH_AMD64) + _InterlockedAnd64((__int64 volatile RT_FAR *)pu64, u64); + +# elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("lock; andq %1, %0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old & u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically And a signed 64-bit value, ordered. + * + * @param pi64 Pointer to the pointer variable to AND i64 with. + * @param i64 The value to AND *pi64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicAndS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicAndU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically OR an unsigned 32-bit value, unordered but interrupt safe. + * + * @param pu32 Pointer to the pointer variable to OR u32 with. + * @param u32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicUoOrU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("orl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + or [rdx], eax +# else + mov edx, [pu32] + or [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically OR a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the pointer variable to OR u32 with. + * @param i32 The value to OR *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicUoOrS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicUoOrU32((uint32_t volatile RT_FAR *)pi32, i32); +} + + +/** + * Atomically OR an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the pointer variable to OR u64 with. + * @param u64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicUoOrU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("orq %1, %q0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old | u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically Or a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the pointer variable to OR u64 with. + * @param i64 The value to OR *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicUoOrS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicUoOrU64((uint64_t volatile RT_FAR *)pi64, i64); +} + + +/** + * Atomically And an unsigned 32-bit value, unordered. + * + * @param pu32 Pointer to the pointer variable to AND u32 with. + * @param u32 The value to AND *pu32 with. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32); +#else +DECLINLINE(void) ASMAtomicUoAndU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) +{ +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("andl %1, %0\n\t" + : "=m" (*pu32) + : "ir" (u32), + "m" (*pu32)); +# else + __asm + { + mov eax, [u32] +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + and [rdx], eax +# else + mov edx, [pu32] + and [edx], eax +# endif + } +# endif +} +#endif + + +/** + * Atomically And a signed 32-bit value, unordered. + * + * @param pi32 Pointer to the pointer variable to AND i32 with. + * @param i32 The value to AND *pi32 with. + * + * @remarks x86: Requires a 386 or later. + */ +DECLINLINE(void) ASMAtomicUoAndS32(int32_t volatile RT_FAR *pi32, int32_t i32) +{ + ASMAtomicUoAndU32((uint32_t volatile RT_FAR *)pi32, (uint32_t)i32); +} + + +/** + * Atomically And an unsigned 64-bit value, unordered. + * + * @param pu64 Pointer to the pointer variable to AND u64 with. + * @param u64 The value to AND *pu64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicUoAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64); +#else +DECLINLINE(void) ASMAtomicUoAndU64(uint64_t volatile RT_FAR *pu64, uint64_t u64) +{ +# if RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("andq %1, %0\n\t" + : "=m" (*pu64) + : "r" (u64), + "m" (*pu64)); +# else + for (;;) + { + uint64_t u64Old = ASMAtomicUoReadU64(pu64); + uint64_t u64New = u64Old & u64; + if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old)) + break; + ASMNopPause(); + } +# endif +} +#endif + + +/** + * Atomically And a signed 64-bit value, unordered. + * + * @param pi64 Pointer to the pointer variable to AND i64 with. + * @param i64 The value to AND *pi64 with. + * + * @remarks x86: Requires a Pentium or later. + */ +DECLINLINE(void) ASMAtomicUoAndS64(int64_t volatile RT_FAR *pi64, int64_t i64) +{ + ASMAtomicUoAndU64((uint64_t volatile RT_FAR *)pi64, (uint64_t)i64); +} + + +/** + * Atomically increment an unsigned 32-bit value, unordered. + * + * @returns the new value. + * @param pu32 Pointer to the variable to increment. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMAtomicUoIncU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicUoIncU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (1), + "m" (*pu32) + : "memory"); + return u32 + 1; +# else + __asm + { + mov eax, 1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + xadd [rdx], eax +# else + mov edx, [pu32] + xadd [edx], eax +# endif + mov u32, eax + } + return u32 + 1; +# endif +} +#endif + + +/** + * Atomically decrement an unsigned 32-bit value, unordered. + * + * @returns the new value. + * @param pu32 Pointer to the variable to decrement. + * + * @remarks x86: Requires a 486 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint32_t) ASMAtomicUoDecU32(uint32_t volatile RT_FAR *pu32); +#else +DECLINLINE(uint32_t) ASMAtomicUoDecU32(uint32_t volatile RT_FAR *pu32) +{ + uint32_t u32; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; xaddl %0, %1\n\t" + : "=r" (u32), + "=m" (*pu32) + : "0" (-1), + "m" (*pu32) + : "memory"); + return u32 - 1; +# else + __asm + { + mov eax, -1 +# ifdef RT_ARCH_AMD64 + mov rdx, [pu32] + xadd [rdx], eax +# else + mov edx, [pu32] + xadd [edx], eax +# endif + mov u32, eax + } + return u32 - 1; +# endif +} +#endif + + +/** @def RT_ASM_PAGE_SIZE + * We try avoid dragging in iprt/param.h here. + * @internal + */ +#if defined(RT_ARCH_SPARC64) +# define RT_ASM_PAGE_SIZE 0x2000 +# if defined(PAGE_SIZE) && !defined(NT_INCLUDED) +# if PAGE_SIZE != 0x2000 +# error "PAGE_SIZE is not 0x2000!" +# endif +# endif +#else +# define RT_ASM_PAGE_SIZE 0x1000 +# if defined(PAGE_SIZE) && !defined(NT_INCLUDED) +# if PAGE_SIZE != 0x1000 +# error "PAGE_SIZE is not 0x1000!" +# endif +# endif +#endif + +/** + * Zeros a 4K memory page. + * + * @param pv Pointer to the memory block. This must be page aligned. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemZeroPage(volatile void RT_FAR *pv); +# else +DECLINLINE(void) ASMMemZeroPage(volatile void RT_FAR *pv) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + __stosq((unsigned __int64 *)pv, 0, RT_ASM_PAGE_SIZE / 8); +# else + __stosd((unsigned long *)pv, 0, RT_ASM_PAGE_SIZE / 4); +# endif + +# elif RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uDummy; +# ifdef RT_ARCH_AMD64 + __asm__ __volatile__("rep stosq" + : "=D" (pv), + "=c" (uDummy) + : "0" (pv), + "c" (RT_ASM_PAGE_SIZE >> 3), + "a" (0) + : "memory"); +# else + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (uDummy) + : "0" (pv), + "c" (RT_ASM_PAGE_SIZE >> 2), + "a" (0) + : "memory"); +# endif +# else + __asm + { +# ifdef RT_ARCH_AMD64 + xor rax, rax + mov ecx, 0200h + mov rdi, [pv] + rep stosq +# else + xor eax, eax + mov ecx, 0400h + mov edi, [pv] + rep stosd +# endif + } +# endif +} +# endif + + +/** + * Zeros a memory block with a 32-bit aligned size. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb); +#else +DECLINLINE(void) ASMMemZero32(volatile void RT_FAR *pv, size_t cb) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + if (!(cb & 7)) + __stosq((unsigned __int64 RT_FAR *)pv, 0, cb / 8); + else +# endif + __stosd((unsigned long RT_FAR *)pv, 0, cb / 4); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (cb) + : "0" (pv), + "1" (cb >> 2), + "a" (0) + : "memory"); +# else + __asm + { + xor eax, eax +# ifdef RT_ARCH_AMD64 + mov rcx, [cb] + shr rcx, 2 + mov rdi, [pv] +# else + mov ecx, [cb] + shr ecx, 2 + mov edi, [pv] +# endif + rep stosd + } +# endif +} +#endif + + +/** + * Fills a memory block with a 32-bit aligned size. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + * @param u32 The value to fill with. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32); +#else +DECLINLINE(void) ASMMemFill32(volatile void RT_FAR *pv, size_t cb, uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN +# ifdef RT_ARCH_AMD64 + if (!(cb & 7)) + __stosq((unsigned __int64 RT_FAR *)pv, RT_MAKE_U64(u32, u32), cb / 8); + else +# endif + __stosd((unsigned long RT_FAR *)pv, u32, cb / 4); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("rep stosl" + : "=D" (pv), + "=c" (cb) + : "0" (pv), + "1" (cb >> 2), + "a" (u32) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rcx, [cb] + shr rcx, 2 + mov rdi, [pv] +# else + mov ecx, [cb] + shr ecx, 2 + mov edi, [pv] +# endif + mov eax, [u32] + rep stosd + } +# endif +} +#endif + + +/** + * Checks if a memory block is all zeros. + * + * @returns Pointer to the first non-zero byte. + * @returns NULL if all zero. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * + * @todo Fix name, it is a predicate function but it's not returning boolean! + */ +#if !defined(RDESKTOP) && (!defined(RT_OS_LINUX) || !defined(__KERNEL__)) +DECLASM(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb); +#else +DECLINLINE(void RT_FAR *) ASMMemFirstNonZero(void const RT_FAR *pv, size_t cb) +{ + uint8_t const *pb = (uint8_t const RT_FAR *)pv; + for (; cb; cb--, pb++) + if (RT_LIKELY(*pb == 0)) + { /* likely */ } + else + return (void RT_FAR *)pb; + return NULL; +} +#endif + + +/** + * Checks if a memory block is all zeros. + * + * @returns true if zero, false if not. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * + * @sa ASMMemFirstNonZero + */ +DECLINLINE(bool) ASMMemIsZero(void const RT_FAR *pv, size_t cb) +{ + return ASMMemFirstNonZero(pv, cb) == NULL; +} + + +/** + * Checks if a memory page is all zeros. + * + * @returns true / false. + * + * @param pvPage Pointer to the page. Must be aligned on 16 byte + * boundary + */ +DECLINLINE(bool) ASMMemIsZeroPage(void const RT_FAR *pvPage) +{ +# if 0 /*RT_INLINE_ASM_GNU_STYLE - this is actually slower... */ + union { RTCCUINTREG r; bool f; } uAX; + RTCCUINTREG xCX, xDI; + Assert(!((uintptr_t)pvPage & 15)); + __asm__ __volatile__("repe; " +# ifdef RT_ARCH_AMD64 + "scasq\n\t" +# else + "scasl\n\t" +# endif + "setnc %%al\n\t" + : "=&c" (xCX), + "=&D" (xDI), + "=&a" (uAX.r) + : "mr" (pvPage), +# ifdef RT_ARCH_AMD64 + "0" (RT_ASM_PAGE_SIZE/8), +# else + "0" (RT_ASM_PAGE_SIZE/4), +# endif + "1" (pvPage), + "2" (0)); + return uAX.f; +# else + uintptr_t const RT_FAR *puPtr = (uintptr_t const RT_FAR *)pvPage; + size_t cLeft = RT_ASM_PAGE_SIZE / sizeof(uintptr_t) / 8; + Assert(!((uintptr_t)pvPage & 15)); + for (;;) + { + if (puPtr[0]) return false; + if (puPtr[4]) return false; + + if (puPtr[2]) return false; + if (puPtr[6]) return false; + + if (puPtr[1]) return false; + if (puPtr[5]) return false; + + if (puPtr[3]) return false; + if (puPtr[7]) return false; + + if (!--cLeft) + return true; + puPtr += 8; + } +# endif +} + + +/** + * Checks if a memory block is filled with the specified byte, returning the + * first mismatch. + * + * This is sort of an inverted memchr. + * + * @returns Pointer to the byte which doesn't equal u8. + * @returns NULL if all equal to u8. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * @param u8 The value it's supposed to be filled with. + * + * @remarks No alignment requirements. + */ +#if (!defined(RT_OS_LINUX) || !defined(__KERNEL__)) \ + && (!defined(RT_OS_FREEBSD) || !defined(_KERNEL)) +DECLASM(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8); +#else +DECLINLINE(void *) ASMMemFirstMismatchingU8(void const RT_FAR *pv, size_t cb, uint8_t u8) +{ + uint8_t const *pb = (uint8_t const RT_FAR *)pv; + for (; cb; cb--, pb++) + if (RT_LIKELY(*pb == u8)) + { /* likely */ } + else + return (void *)pb; + return NULL; +} +#endif + + +/** + * Checks if a memory block is filled with the specified byte. + * + * @returns true if all matching, false if not. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. + * @param u8 The value it's supposed to be filled with. + * + * @remarks No alignment requirements. + */ +DECLINLINE(bool) ASMMemIsAllU8(void const RT_FAR *pv, size_t cb, uint8_t u8) +{ + return ASMMemFirstMismatchingU8(pv, cb, u8) == NULL; +} + + +/** + * Checks if a memory block is filled with the specified 32-bit value. + * + * This is a sort of inverted memchr. + * + * @returns Pointer to the first value which doesn't equal u32. + * @returns NULL if all equal to u32. + * + * @param pv Pointer to the memory block. + * @param cb Number of bytes in the block. This MUST be aligned on 32-bit! + * @param u32 The value it's supposed to be filled with. + */ +DECLINLINE(uint32_t RT_FAR *) ASMMemFirstMismatchingU32(void const RT_FAR *pv, size_t cb, uint32_t u32) +{ +/** @todo rewrite this in inline assembly? */ + uint32_t const RT_FAR *pu32 = (uint32_t const RT_FAR *)pv; + for (; cb; cb -= 4, pu32++) + if (RT_LIKELY(*pu32 == u32)) + { /* likely */ } + else + return (uint32_t RT_FAR *)pu32; + return NULL; +} + + +/** + * Probes a byte pointer for read access. + * + * While the function will not fault if the byte is not read accessible, + * the idea is to do this in a safe place like before acquiring locks + * and such like. + * + * Also, this functions guarantees that an eager compiler is not going + * to optimize the probing away. + * + * @param pvByte Pointer to the byte. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(uint8_t) ASMProbeReadByte(const void RT_FAR *pvByte); +#else +DECLINLINE(uint8_t) ASMProbeReadByte(const void RT_FAR *pvByte) +{ + /** @todo verify that the compiler actually doesn't optimize this away. (intel & gcc) */ + uint8_t u8; +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("movb (%1), %0\n\t" + : "=r" (u8) + : "r" (pvByte)); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvByte] + mov al, [rax] +# else + mov eax, [pvByte] + mov al, [eax] +# endif + mov [u8], al + } +# endif + return u8; +} +#endif + +/** + * Probes a buffer for read access page by page. + * + * While the function will fault if the buffer is not fully read + * accessible, the idea is to do this in a safe place like before + * acquiring locks and such like. + * + * Also, this functions guarantees that an eager compiler is not going + * to optimize the probing away. + * + * @param pvBuf Pointer to the buffer. + * @param cbBuf The size of the buffer in bytes. Must be >= 1. + */ +DECLINLINE(void) ASMProbeReadBuffer(const void RT_FAR *pvBuf, size_t cbBuf) +{ + /** @todo verify that the compiler actually doesn't optimize this away. (intel & gcc) */ + /* the first byte */ + const uint8_t RT_FAR *pu8 = (const uint8_t RT_FAR *)pvBuf; + ASMProbeReadByte(pu8); + + /* the pages in between pages. */ + while (cbBuf > RT_ASM_PAGE_SIZE) + { + ASMProbeReadByte(pu8); + cbBuf -= RT_ASM_PAGE_SIZE; + pu8 += RT_ASM_PAGE_SIZE; + } + + /* the last byte */ + ASMProbeReadByte(pu8 + cbBuf - 1); +} + + + +/** @defgroup grp_inline_bits Bit Operations + * @{ + */ + + +/** + * Sets a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. This should be 32-bit aligned. + * @param iBit The bit to set. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btsl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + bts [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + bts [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically sets a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMAtomicBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + _interlockedbittestandset((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btsl %1, %0" + : "=m" (*(volatile long *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock bts [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock bts [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Clears a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to clear. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btrl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + btr [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + btr [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically clears a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to toggle set. + * + * @remarks No memory barrier, take care on smp. + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btrl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock btr [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock btr [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Toggles a bit in a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to toggle. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(void) ASMBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ +# if RT_INLINE_ASM_USES_INTRIN + _bittestandcomplement((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btcl %1, %0" + : "=m" (*(volatile long *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + btc [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + btc [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Atomically toggles a bit in a bitmap, ordered. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(void) ASMAtomicBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(void) ASMAtomicBitToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btcl %1, %0" + : "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + mov edx, [iBit] + lock btc [rax], edx +# else + mov eax, [pvBitmap] + mov edx, [iBit] + lock btc [eax], edx +# endif + } +# endif +} +#endif + + +/** + * Tests and sets a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and set. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btsl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + bts [rax], edx +# else + mov eax, [pvBitmap] + bts [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and sets a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to set. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndSet(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _interlockedbittestandset((long RT_FAR *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btsl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock bts [rax], edx +# else + mov eax, [pvBitmap] + lock bts [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests and clears a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and clear. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btrl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + btr [rax], edx +# else + mov eax, [pvBitmap] + btr [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and clears a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and clear. + * + * @remarks No memory barrier, take care on smp. + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMAtomicBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndClear(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _interlockedbittestandreset((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btrl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock btr [rax], edx +# else + mov eax, [pvBitmap] + lock btr [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests and toggles a bit in a bitmap. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test and toggle. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u8 = _bittestandcomplement((long RT_FAR *)pvBitmap, iBit); + +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("btcl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + btc [rax], edx +# else + mov eax, [pvBitmap] + btc [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Atomically tests and toggles a bit in a bitmap, ordered. + * + * @returns true if the bit was set. + * @returns false if the bit was clear. + * + * @param pvBitmap Pointer to the bitmap. Must be 32-bit aligned, otherwise + * the memory access isn't atomic! + * @param iBit The bit to test and toggle. + * + * @remarks x86: Requires a 386 or later. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(bool) ASMAtomicBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMAtomicBitTestAndToggle(volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; + AssertMsg(!((uintptr_t)pvBitmap & 3), ("address %p not 32-bit aligned", pvBitmap)); +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("lock; btcl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32), + "=m" (*(volatile long RT_FAR *)pvBitmap) + : "Ir" (iBit), + "m" (*(volatile long RT_FAR *)pvBitmap) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + lock btc [rax], edx +# else + mov eax, [pvBitmap] + lock btc [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Tests if a bit in a bitmap is set. + * + * @returns true if the bit is set. + * @returns false if the bit is clear. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBit The bit to test. + * + * @remarks The 32-bit aligning of pvBitmap is not a strict requirement. + * However, doing so will yield better performance as well as avoiding + * traps accessing the last bits in the bitmap. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(bool) ASMBitTest(const volatile void RT_FAR *pvBitmap, int32_t iBit); +#else +DECLINLINE(bool) ASMBitTest(const volatile void RT_FAR *pvBitmap, int32_t iBit) +{ + union { bool f; uint32_t u32; uint8_t u8; } rc; +# if RT_INLINE_ASM_USES_INTRIN + rc.u32 = _bittest((long *)pvBitmap, iBit); +# elif RT_INLINE_ASM_GNU_STYLE + + __asm__ __volatile__("btl %2, %1\n\t" + "setc %b0\n\t" + "andl $1, %0\n\t" + : "=q" (rc.u32) + : "m" (*(const volatile long RT_FAR *)pvBitmap), + "Ir" (iBit) + : "memory"); +# else + __asm + { + mov edx, [iBit] +# ifdef RT_ARCH_AMD64 + mov rax, [pvBitmap] + bt [rax], edx +# else + mov eax, [pvBitmap] + bt [eax], edx +# endif + setc al + and eax, 1 + mov [rc.u32], eax + } +# endif + return rc.f; +} +#endif + + +/** + * Clears a bit range within a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBitStart The First bit to clear. + * @param iBitEnd The first bit not to clear. + */ +DECLINLINE(void) ASMBitClearRange(volatile void RT_FAR *pvBitmap, int32_t iBitStart, int32_t iBitEnd) +{ + if (iBitStart < iBitEnd) + { + volatile uint32_t RT_FAR *pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitStart >> 5); + int32_t iStart = iBitStart & ~31; + int32_t iEnd = iBitEnd & ~31; + if (iStart == iEnd) + *pu32 &= ((UINT32_C(1) << (iBitStart & 31)) - 1) | ~((UINT32_C(1) << (iBitEnd & 31)) - 1); + else + { + /* bits in first dword. */ + if (iBitStart & 31) + { + *pu32 &= (UINT32_C(1) << (iBitStart & 31)) - 1; + pu32++; + iBitStart = iStart + 32; + } + + /* whole dword. */ + if (iBitStart != iEnd) + ASMMemZero32(pu32, (iEnd - iBitStart) >> 3); + + /* bits in last dword. */ + if (iBitEnd & 31) + { + pu32 = (volatile uint32_t *)pvBitmap + (iBitEnd >> 5); + *pu32 &= ~((UINT32_C(1) << (iBitEnd & 31)) - 1); + } + } + } +} + + +/** + * Sets a bit range within a bitmap. + * + * @param pvBitmap Pointer to the bitmap. + * @param iBitStart The First bit to set. + * @param iBitEnd The first bit not to set. + */ +DECLINLINE(void) ASMBitSetRange(volatile void RT_FAR *pvBitmap, int32_t iBitStart, int32_t iBitEnd) +{ + if (iBitStart < iBitEnd) + { + volatile uint32_t RT_FAR *pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitStart >> 5); + int32_t iStart = iBitStart & ~31; + int32_t iEnd = iBitEnd & ~31; + if (iStart == iEnd) + *pu32 |= ((UINT32_C(1) << (iBitEnd - iBitStart)) - 1) << (iBitStart & 31); + else + { + /* bits in first dword. */ + if (iBitStart & 31) + { + *pu32 |= ~((UINT32_C(1) << (iBitStart & 31)) - 1); + pu32++; + iBitStart = iStart + 32; + } + + /* whole dword. */ + if (iBitStart != iEnd) + ASMMemFill32(pu32, (iEnd - iBitStart) >> 3, ~UINT32_C(0)); + + /* bits in last dword. */ + if (iBitEnd & 31) + { + pu32 = (volatile uint32_t RT_FAR *)pvBitmap + (iBitEnd >> 5); + *pu32 |= (UINT32_C(1) << (iBitEnd & 31)) - 1; + } + } + } +} + + +/** + * Finds the first clear bit in a bitmap. + * + * @returns Index of the first zero bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits); +#else +DECLINLINE(int32_t) ASMBitFirstClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits) +{ + if (cBits) + { + int32_t iBit; +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uEAX, uECX, uEDI; + cBits = RT_ALIGN_32(cBits, 32); + __asm__ __volatile__("repe; scasl\n\t" + "je 1f\n\t" +# ifdef RT_ARCH_AMD64 + "lea -4(%%rdi), %%rdi\n\t" + "xorl (%%rdi), %%eax\n\t" + "subq %5, %%rdi\n\t" +# else + "lea -4(%%edi), %%edi\n\t" + "xorl (%%edi), %%eax\n\t" + "subl %5, %%edi\n\t" +# endif + "shll $3, %%edi\n\t" + "bsfl %%eax, %%edx\n\t" + "addl %%edi, %%edx\n\t" + "1:\t\n" + : "=d" (iBit), + "=&c" (uECX), + "=&D" (uEDI), + "=&a" (uEAX) + : "0" (0xffffffff), + "mr" (pvBitmap), + "1" (cBits >> 5), + "2" (pvBitmap), + "3" (0xffffffff)); +# else + cBits = RT_ALIGN_32(cBits, 32); + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdi, [pvBitmap] + mov rbx, rdi +# else + mov edi, [pvBitmap] + mov ebx, edi +# endif + mov edx, 0ffffffffh + mov eax, edx + mov ecx, [cBits] + shr ecx, 5 + repe scasd + je done + +# ifdef RT_ARCH_AMD64 + lea rdi, [rdi - 4] + xor eax, [rdi] + sub rdi, rbx +# else + lea edi, [edi - 4] + xor eax, [edi] + sub edi, ebx +# endif + shl edi, 3 + bsf edx, eax + add edx, edi + done: + mov [iBit], edx + } +# endif + return iBit; + } + return -1; +} +#endif + + +/** + * Finds the next clear bit in a bitmap. + * + * @returns Index of the first zero bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + * @param iBitPrev The bit returned from the last search. + * The search will start at iBitPrev + 1. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev); +#else +DECLINLINE(int) ASMBitNextClear(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) +{ + const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap; + int iBit = ++iBitPrev & 31; + if (iBit) + { + /* + * Inspect the 32-bit word containing the unaligned bit. + */ + uint32_t u32 = ~pau32Bitmap[iBitPrev / 32] >> iBit; + +# if RT_INLINE_ASM_USES_INTRIN + unsigned long ulBit = 0; + if (_BitScanForward(&ulBit, u32)) + return ulBit + iBitPrev; +# else +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "movl $-1, %0\n\t" + "1:\n\t" + : "=r" (iBit) + : "r" (u32)); +# else + __asm + { + mov edx, [u32] + bsf eax, edx + jnz done + mov eax, 0ffffffffh + done: + mov [iBit], eax + } +# endif + if (iBit >= 0) + return iBit + iBitPrev; +# endif + + /* + * Skip ahead and see if there is anything left to search. + */ + iBitPrev |= 31; + iBitPrev++; + if (cBits <= (uint32_t)iBitPrev) + return -1; + } + + /* + * 32-bit aligned search, let ASMBitFirstClear do the dirty work. + */ + iBit = ASMBitFirstClear(&pau32Bitmap[iBitPrev / 32], cBits - iBitPrev); + if (iBit >= 0) + iBit += iBitPrev; + return iBit; +} +#endif + + +/** + * Finds the first set bit in a bitmap. + * + * @returns Index of the first set bit. + * @returns -1 if no clear bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits); +#else +DECLINLINE(int32_t) ASMBitFirstSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits) +{ + if (cBits) + { + int32_t iBit; +# if RT_INLINE_ASM_GNU_STYLE + RTCCUINTREG uEAX, uECX, uEDI; + cBits = RT_ALIGN_32(cBits, 32); + __asm__ __volatile__("repe; scasl\n\t" + "je 1f\n\t" +# ifdef RT_ARCH_AMD64 + "lea -4(%%rdi), %%rdi\n\t" + "movl (%%rdi), %%eax\n\t" + "subq %5, %%rdi\n\t" +# else + "lea -4(%%edi), %%edi\n\t" + "movl (%%edi), %%eax\n\t" + "subl %5, %%edi\n\t" +# endif + "shll $3, %%edi\n\t" + "bsfl %%eax, %%edx\n\t" + "addl %%edi, %%edx\n\t" + "1:\t\n" + : "=d" (iBit), + "=&c" (uECX), + "=&D" (uEDI), + "=&a" (uEAX) + : "0" (0xffffffff), + "mr" (pvBitmap), + "1" (cBits >> 5), + "2" (pvBitmap), + "3" (0)); +# else + cBits = RT_ALIGN_32(cBits, 32); + __asm + { +# ifdef RT_ARCH_AMD64 + mov rdi, [pvBitmap] + mov rbx, rdi +# else + mov edi, [pvBitmap] + mov ebx, edi +# endif + mov edx, 0ffffffffh + xor eax, eax + mov ecx, [cBits] + shr ecx, 5 + repe scasd + je done +# ifdef RT_ARCH_AMD64 + lea rdi, [rdi - 4] + mov eax, [rdi] + sub rdi, rbx +# else + lea edi, [edi - 4] + mov eax, [edi] + sub edi, ebx +# endif + shl edi, 3 + bsf edx, eax + add edx, edi + done: + mov [iBit], edx + } +# endif + return iBit; + } + return -1; +} +#endif + + +/** + * Finds the next set bit in a bitmap. + * + * @returns Index of the next set bit. + * @returns -1 if no set bit was found. + * @param pvBitmap Pointer to the bitmap. + * @param cBits The number of bits in the bitmap. Multiple of 32. + * @param iBitPrev The bit returned from the last search. + * The search will start at iBitPrev + 1. + */ +#if RT_INLINE_ASM_EXTERNAL +DECLASM(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev); +#else +DECLINLINE(int) ASMBitNextSet(const volatile void RT_FAR *pvBitmap, uint32_t cBits, uint32_t iBitPrev) +{ + const volatile uint32_t RT_FAR *pau32Bitmap = (const volatile uint32_t RT_FAR *)pvBitmap; + int iBit = ++iBitPrev & 31; + if (iBit) + { + /* + * Inspect the 32-bit word containing the unaligned bit. + */ + uint32_t u32 = pau32Bitmap[iBitPrev / 32] >> iBit; + +# if RT_INLINE_ASM_USES_INTRIN + unsigned long ulBit = 0; + if (_BitScanForward(&ulBit, u32)) + return ulBit + iBitPrev; +# else +# if RT_INLINE_ASM_GNU_STYLE + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "movl $-1, %0\n\t" + "1:\n\t" + : "=r" (iBit) + : "r" (u32)); +# else + __asm + { + mov edx, [u32] + bsf eax, edx + jnz done + mov eax, 0ffffffffh + done: + mov [iBit], eax + } +# endif + if (iBit >= 0) + return iBit + iBitPrev; +# endif + + /* + * Skip ahead and see if there is anything left to search. + */ + iBitPrev |= 31; + iBitPrev++; + if (cBits <= (uint32_t)iBitPrev) + return -1; + } + + /* + * 32-bit aligned search, let ASMBitFirstClear do the dirty work. + */ + iBit = ASMBitFirstSet(&pau32Bitmap[iBitPrev / 32], cBits - iBitPrev); + if (iBit >= 0) + iBit += iBitPrev; + return iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u32 Integer to search for set bits. + * @remarks Similar to ffs() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU32(uint32_t u32); +#else +DECLINLINE(unsigned) ASMBitFirstSetU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; + if (_BitScanForward(&iBit, u32)) + iBit++; + else + iBit = 0; +# elif RT_INLINE_ASM_GNU_STYLE + uint32_t iBit; + __asm__ __volatile__("bsf %1, %0\n\t" + "jnz 1f\n\t" + "xorl %0, %0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u32)); +# else + uint32_t iBit; + _asm + { + bsf eax, [u32] + jnz found + xor eax, eax + jmp done + found: + inc eax + done: + mov [iBit], eax + } +# endif + return iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the first set bit. + * @returns 0 if all bits are cleared. + * @param i32 Integer to search for set bits. + * @remark Similar to ffs() in BSD. + */ +DECLINLINE(unsigned) ASMBitFirstSetS32(int32_t i32) +{ + return ASMBitFirstSetU32((uint32_t)i32); +} + + +/** + * Finds the first bit which is set in the given 64-bit integer. + * + * Bits are numbered from 1 (least significant) to 64. + * + * @returns index [1..64] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u64 Integer to search for set bits. + * @remarks Similar to ffs() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU64(uint64_t u64); +#else +DECLINLINE(unsigned) ASMBitFirstSetU64(uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; +# if ARCH_BITS == 64 + if (_BitScanForward64(&iBit, u64)) + iBit++; + else + iBit = 0; +# else + if (_BitScanForward(&iBit, (uint32_t)u64)) + iBit++; + else if (_BitScanForward(&iBit, (uint32_t)(u64 >> 32))) + iBit += 33; + else + iBit = 0; +# endif +# elif RT_INLINE_ASM_GNU_STYLE && ARCH_BITS == 64 + uint64_t iBit; + __asm__ __volatile__("bsfq %1, %0\n\t" + "jnz 1f\n\t" + "xorl %k0, %k0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %k0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u64)); +# else + unsigned iBit = ASMBitFirstSetU32((uint32_t)u64); + if (!iBit) + { + iBit = ASMBitFirstSetU32((uint32_t)(u64 >> 32)); + if (iBit) + iBit += 32; + } +# endif + return (unsigned)iBit; +} +#endif + + +/** + * Finds the first bit which is set in the given 16-bit integer. + * + * Bits are numbered from 1 (least significant) to 16. + * + * @returns index [1..16] of the first set bit. + * @returns 0 if all bits are cleared. + * @param u16 Integer to search for set bits. + * @remarks For 16-bit bs3kit code. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitFirstSetU16(uint16_t u16); +#else +DECLINLINE(unsigned) ASMBitFirstSetU16(uint16_t u16) +{ + return ASMBitFirstSetU32((uint32_t)u16); +} +#endif + + +/** + * Finds the last bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u32 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU32(uint32_t u32); +#else +DECLINLINE(unsigned) ASMBitLastSetU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; + if (_BitScanReverse(&iBit, u32)) + iBit++; + else + iBit = 0; +# elif RT_INLINE_ASM_GNU_STYLE + uint32_t iBit; + __asm__ __volatile__("bsrl %1, %0\n\t" + "jnz 1f\n\t" + "xorl %0, %0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u32)); +# else + uint32_t iBit; + _asm + { + bsr eax, [u32] + jnz found + xor eax, eax + jmp done + found: + inc eax + done: + mov [iBit], eax + } +# endif + return iBit; +} +#endif + + +/** + * Finds the last bit which is set in the given 32-bit integer. + * Bits are numbered from 1 (least significant) to 32. + * + * @returns index [1..32] of the last set bit. + * @returns 0 if all bits are cleared. + * @param i32 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +DECLINLINE(unsigned) ASMBitLastSetS32(int32_t i32) +{ + return ASMBitLastSetU32((uint32_t)i32); +} + + +/** + * Finds the last bit which is set in the given 64-bit integer. + * + * Bits are numbered from 1 (least significant) to 64. + * + * @returns index [1..64] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u64 Integer to search for set bits. + * @remark Similar to fls() in BSD. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU64(uint64_t u64); +#else +DECLINLINE(unsigned) ASMBitLastSetU64(uint64_t u64) +{ +# if RT_INLINE_ASM_USES_INTRIN + unsigned long iBit; +# if ARCH_BITS == 64 + if (_BitScanReverse64(&iBit, u64)) + iBit++; + else + iBit = 0; +# else + if (_BitScanReverse(&iBit, (uint32_t)(u64 >> 32))) + iBit += 33; + else if (_BitScanReverse(&iBit, (uint32_t)u64)) + iBit++; + else + iBit = 0; +# endif +# elif RT_INLINE_ASM_GNU_STYLE && ARCH_BITS == 64 + uint64_t iBit; + __asm__ __volatile__("bsrq %1, %0\n\t" + "jnz 1f\n\t" + "xorl %k0, %k0\n\t" + "jmp 2f\n" + "1:\n\t" + "incl %k0\n" + "2:\n\t" + : "=r" (iBit) + : "rm" (u64)); +# else + unsigned iBit = ASMBitLastSetU32((uint32_t)(u64 >> 32)); + if (iBit) + iBit += 32; + else + iBit = ASMBitLastSetU32((uint32_t)u64); +#endif + return (unsigned)iBit; +} +#endif + + +/** + * Finds the last bit which is set in the given 16-bit integer. + * + * Bits are numbered from 1 (least significant) to 16. + * + * @returns index [1..16] of the last set bit. + * @returns 0 if all bits are cleared. + * @param u16 Integer to search for set bits. + * @remarks For 16-bit bs3kit code. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(unsigned) ASMBitLastSetU16(uint16_t u16); +#else +DECLINLINE(unsigned) ASMBitLastSetU16(uint16_t u16) +{ + return ASMBitLastSetU32((uint32_t)u16); +} +#endif + + +/** + * Reverse the byte order of the given 16-bit integer. + * + * @returns Revert + * @param u16 16-bit integer value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint16_t) ASMByteSwapU16(uint16_t u16); +#else +DECLINLINE(uint16_t) ASMByteSwapU16(uint16_t u16) +{ +# if RT_INLINE_ASM_USES_INTRIN + u16 = _byteswap_ushort(u16); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ ("rorw $8, %0" : "=r" (u16) : "0" (u16)); +# else + _asm + { + mov ax, [u16] + ror ax, 8 + mov [u16], ax + } +# endif + return u16; +} +#endif + + +/** + * Reverse the byte order of the given 32-bit integer. + * + * @returns Revert + * @param u32 32-bit integer value. + */ +#if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN +DECLASM(uint32_t) ASMByteSwapU32(uint32_t u32); +#else +DECLINLINE(uint32_t) ASMByteSwapU32(uint32_t u32) +{ +# if RT_INLINE_ASM_USES_INTRIN + u32 = _byteswap_ulong(u32); +# elif RT_INLINE_ASM_GNU_STYLE + __asm__ ("bswapl %0" : "=r" (u32) : "0" (u32)); +# else + _asm + { + mov eax, [u32] + bswap eax + mov [u32], eax + } +# endif + return u32; +} +#endif + + +/** + * Reverse the byte order of the given 64-bit integer. + * + * @returns Revert + * @param u64 64-bit integer value. + */ +DECLINLINE(uint64_t) ASMByteSwapU64(uint64_t u64) +{ +#if defined(RT_ARCH_AMD64) && RT_INLINE_ASM_USES_INTRIN + u64 = _byteswap_uint64(u64); +#else + u64 = (uint64_t)ASMByteSwapU32((uint32_t)u64) << 32 + | (uint64_t)ASMByteSwapU32((uint32_t)(u64 >> 32)); +#endif + return u64; +} + + +/** + * Rotate 32-bit unsigned value to the left by @a cShift. + * + * @returns Rotated value. + * @param u32 The value to rotate. + * @param cShift How many bits to rotate by. + */ +#ifdef __WATCOMC__ +DECLASM(uint32_t) ASMRotateLeftU32(uint32_t u32, unsigned cShift); +#else +DECLINLINE(uint32_t) ASMRotateLeftU32(uint32_t u32, uint32_t cShift) +{ +# if RT_INLINE_ASM_USES_INTRIN + return _rotl(u32, cShift); +# elif RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + __asm__ __volatile__("roll %b1, %0" : "=g" (u32) : "Ic" (cShift), "0" (u32)); + return u32; +# else + cShift &= 31; + return (u32 << cShift) | (u32 >> (32 - cShift)); +# endif +} +#endif + + +/** + * Rotate 32-bit unsigned value to the right by @a cShift. + * + * @returns Rotated value. + * @param u32 The value to rotate. + * @param cShift How many bits to rotate by. + */ +#ifdef __WATCOMC__ +DECLASM(uint32_t) ASMRotateRightU32(uint32_t u32, unsigned cShift); +#else +DECLINLINE(uint32_t) ASMRotateRightU32(uint32_t u32, uint32_t cShift) +{ +# if RT_INLINE_ASM_USES_INTRIN + return _rotr(u32, cShift); +# elif RT_INLINE_ASM_GNU_STYLE && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) + __asm__ __volatile__("rorl %b1, %0" : "=g" (u32) : "Ic" (cShift), "0" (u32)); + return u32; +# else + cShift &= 31; + return (u32 >> cShift) | (u32 << (32 - cShift)); +# endif +} +#endif + + +/** + * Rotate 64-bit unsigned value to the left by @a cShift. + * + * @returns Rotated value. + * @param u64 The value to rotate. + * @param cShift How many bits to rotate by. + */ +DECLINLINE(uint64_t) ASMRotateLeftU64(uint64_t u64, uint32_t cShift) +{ +#if RT_INLINE_ASM_USES_INTRIN + return _rotl64(u64, cShift); +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("rolq %b1, %0" : "=g" (u64) : "Jc" (cShift), "0" (u64)); + return u64; +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_X86) + uint32_t uSpill; + __asm__ __volatile__("testb $0x20, %%cl\n\t" /* if (cShift >= 0x20) { swap(u64.hi, u64lo); cShift -= 0x20; } */ + "jz 1f\n\t" + "xchgl %%eax, %%edx\n\t" + "1:\n\t" + "andb $0x1f, %%cl\n\t" /* if (cShift & 0x1f) { */ + "jz 2f\n\t" + "movl %%edx, %2\n\t" /* save the hi value in %3. */ + "shldl %%cl,%%eax,%%edx\n\t" /* shift the hi value left, feeding MSBits from the low value. */ + "shldl %%cl,%2,%%eax\n\t" /* shift the lo value left, feeding MSBits from the saved hi value. */ + "2:\n\t" /* } */ + : "=A" (u64), "=c" (cShift), "=r" (uSpill) + : "0" (u64), + "1" (cShift)); + return u64; +#else + cShift &= 63; + return (u64 << cShift) | (u64 >> (64 - cShift)); +#endif +} + + +/** + * Rotate 64-bit unsigned value to the right by @a cShift. + * + * @returns Rotated value. + * @param u64 The value to rotate. + * @param cShift How many bits to rotate by. + */ +DECLINLINE(uint64_t) ASMRotateRightU64(uint64_t u64, uint32_t cShift) +{ +#if RT_INLINE_ASM_USES_INTRIN + return _rotr64(u64, cShift); +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_AMD64) + __asm__ __volatile__("rorq %b1, %0" : "=g" (u64) : "Jc" (cShift), "0" (u64)); + return u64; +#elif RT_INLINE_ASM_GNU_STYLE && defined(RT_ARCH_X86) + uint32_t uSpill; + __asm__ __volatile__("testb $0x20, %%cl\n\t" /* if (cShift >= 0x20) { swap(u64.hi, u64lo); cShift -= 0x20; } */ + "jz 1f\n\t" + "xchgl %%eax, %%edx\n\t" + "1:\n\t" + "andb $0x1f, %%cl\n\t" /* if (cShift & 0x1f) { */ + "jz 2f\n\t" + "movl %%edx, %2\n\t" /* save the hi value in %3. */ + "shrdl %%cl,%%eax,%%edx\n\t" /* shift the hi value right, feeding LSBits from the low value. */ + "shrdl %%cl,%2,%%eax\n\t" /* shift the lo value right, feeding LSBits from the saved hi value. */ + "2:\n\t" /* } */ + : "=A" (u64), "=c" (cShift), "=r" (uSpill) + : "0" (u64), + "1" (cShift)); + return u64; +#else + cShift &= 63; + return (u64 >> cShift) | (u64 << (64 - cShift)); +#endif +} + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/assert.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/assert.h @@ -0,0 +1,2671 @@ +/** @file + * IPRT - Assertions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_assert_h +#define ___iprt_assert_h + +#include +#include +#include +#include + +/** @defgroup grp_rt_assert Assert - Assertions + * @ingroup grp_rt + * + * Assertions are generally used to check preconditions and other + * assumptions. Sometimes it is also used to catch odd errors or errors + * that one would like to inspect in the debugger. They should not be + * used for errors that happen frequently. + * + * IPRT provides a host of assertion macros, so many that it can be a bit + * overwhelming at first. Don't despair, there is a system (surprise). + * + * First there are four families of assertions: + * - Assert - The normal strict build only assertions. + * - AssertLogRel - Calls LogRel() in non-strict builds, otherwise like Assert. + * - AssertRelease - Triggers in all builds. + * - AssertFatal - Triggers in all builds and cannot be continued. + * + * Then there are variations wrt to argument list and behavior on failure: + * - Msg - Custom RTStrPrintf-like message with the assertion message. + * - Return - Return the specific rc on failure. + * - ReturnVoid - Return (void) on failure. + * - Break - Break (out of switch/loop) on failure. + * - Stmt - Execute the specified statement(s) on failure. + * - RC - Assert RT_SUCCESS. + * - RCSuccess - Assert VINF_SUCCESS. + * + * @remarks As you might have noticed, the macros don't follow the + * coding guidelines wrt to macros supposedly being all uppercase + * and underscored. For various reasons they don't, and nobody + * has complained yet. Wonder why... :-) + * + * @remarks Each project has its own specific guidelines on how to use + * assertions, so the above is just trying to give you the general idea + * from the IPRT point of view. + * + * @{ + */ + +RT_C_DECLS_BEGIN + +/** + * The 1st part of an assert message. + * + * @param pszExpr Expression. Can be NULL. + * @param uLine Location line number. + * @param pszFile Location file name. + * @param pszFunction Location function name. + */ +RTDECL(void) RTAssertMsg1(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction); +/** + * Weak version of RTAssertMsg1 that can be overridden locally in a module to + * modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg1 + */ +RTDECL(void) RTAssertMsg1Weak(const char *pszExpr, unsigned uLine, const char *pszFile, const char *pszFunction); + +/** + * The 2nd (optional) part of an assert message. + * + * @param pszFormat Printf like format string. + * @param ... Arguments to that string. + */ +RTDECL(void) RTAssertMsg2(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** + * Weak version of RTAssertMsg2 that forwards to RTAssertMsg2WeakV. + * + * There is not need to override this, check out RTAssertMsg2WeakV instead! + * + * @copydoc RTAssertMsg2 + */ +RTDECL(void) RTAssertMsg2Weak(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * The 2nd (optional) part of an assert message. + * + * @param pszFormat Printf like format string. + * @param va Arguments to that string. + */ +RTDECL(void) RTAssertMsg2V(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); +/** + * Weak version of RTAssertMsg2V that can be overridden locally in a module to + * modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg2V + */ +RTDECL(void) RTAssertMsg2WeakV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Additional information which should be appended to the 2nd part of an + * assertion message. + * + * @param pszFormat Printf like format string. + * @param ... Arguments to that string. + */ +RTDECL(void) RTAssertMsg2Add(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** + * Weak version of RTAssertMsg2Add that forwards to RTAssertMsg2AddWeakV. + * + * There is not need to override this, check out RTAssertMsg2AddWeakV instead! + * + * @copydoc RTAssertMsg2Add + */ +RTDECL(void) RTAssertMsg2AddWeak(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Additional information which should be appended to the 2nd part of an + * assertion message. + * + * @param pszFormat Printf like format string. + * @param va Arguments to that string. + */ +RTDECL(void) RTAssertMsg2AddV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); +/** + * Weak version of RTAssertMsg2AddV that can be overridden locally in a module + * to modify, redirect or otherwise mess with the assertion output. + * + * @copydoc RTAssertMsg2AddV + */ +RTDECL(void) RTAssertMsg2AddWeakV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +#ifdef IN_RING0 +/** + * Panics the system as the result of a fail assertion. + */ +RTR0DECL(void) RTR0AssertPanicSystem(void); +#endif /* IN_RING0 */ + +/** + * Overridable function that decides whether assertions executes the panic + * (breakpoint) or not. + * + * The generic implementation will return true. + * + * @returns true if the breakpoint should be hit, false if it should be ignored. + * + * @remark The RTDECL() makes this a bit difficult to override on Windows. So, + * you'll have to use RTASSERT_HAVE_SHOULD_PANIC or + * RTASSERT_HAVE_SHOULD_PANIC_PRIVATE there to control the kind of + * prototype. + */ +#if !defined(RTASSERT_HAVE_SHOULD_PANIC) && !defined(RTASSERT_HAVE_SHOULD_PANIC_PRIVATE) +RTDECL(bool) RTAssertShouldPanic(void); +#elif defined(RTASSERT_HAVE_SHOULD_PANIC_PRIVATE) +bool RTAssertShouldPanic(void); +#else +DECLEXPORT(bool) RTCALL RTAssertShouldPanic(void); +#endif + +/** + * Controls whether the assertions should be quiet or noisy (default). + * + * @returns The old setting. + * @param fQuiet The new setting. + */ +RTDECL(bool) RTAssertSetQuiet(bool fQuiet); + +/** + * Are assertions quiet or noisy? + * + * @returns True if they are quiet, false if noisy. + */ +RTDECL(bool) RTAssertAreQuiet(void); + +/** + * Makes the assertions panic (default) or not. + * + * @returns The old setting. + * @param fPanic The new setting. + */ +RTDECL(bool) RTAssertSetMayPanic(bool fPanic); + +/** + * Can assertion panic. + * + * @returns True if they can, false if not. + */ +RTDECL(bool) RTAssertMayPanic(void); + + +/** @name Globals for crash analysis + * @remarks This is the full potential set, it + * @{ + */ +/** The last assert message, 1st part. */ +extern RTDATADECL(char) g_szRTAssertMsg1[1024]; +/** The last assert message, 2nd part. */ +extern RTDATADECL(char) g_szRTAssertMsg2[4096]; +/** The last assert message, expression. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertExpr; +/** The last assert message, file name. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertFile; +/** The last assert message, line number. */ +extern RTDATADECL(uint32_t volatile) g_u32RTAssertLine; +/** The last assert message, function name. */ +extern RTDATADECL(const char * volatile) g_pszRTAssertFunction; +/** @} */ + +RT_C_DECLS_END + +/** @def RTAssertDebugBreak() + * Debugger breakpoint instruction. + * + * @remarks This macro does not depend on RT_STRICT. + */ +#define RTAssertDebugBreak() do { RT_BREAKPOINT(); } while (0) + + + +/** @name Assertions + * + * These assertions will only trigger when RT_STRICT is defined. When it is + * undefined they will all be no-ops and generate no code. + * + * @{ + */ + + +/** @def RTASSERT_QUIET + * This can be defined to shut up the messages for a file where this would be + * problematic because the message printing code path passes thru it. + * @internal */ +#ifdef DOXYGEN_RUNNING +# define RTASSERT_QUIET +#endif +#if defined(RTASSERT_QUIET) && !defined(DOXYGEN_RUNNING) +# define RTAssertMsg1Weak(pszExpr, uLine, pszfile, pszFunction) \ + do { } while (0) +# define RTAssertMsg2Weak if (1) {} else RTAssertMsg2Weak +#endif + +/** @def RTAssertDoPanic + * Raises an assertion panic appropriate to the current context. + * @remarks This macro does not depend on RT_STRICT. + */ +#if defined(IN_RING0) \ + && (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU) || defined(RT_OS_SOLARIS)) +# define RTAssertDoPanic() RTR0AssertPanicSystem() +#else +# define RTAssertDoPanic() RTAssertDebugBreak() +#endif + +/** @def AssertBreakpoint() + * Assertion Breakpoint. + * @deprecated Use RTAssertPanic or RTAssertDebugBreak instead. + */ +#ifdef RT_STRICT +# define AssertBreakpoint() RTAssertDebugBreak() +#else +# define AssertBreakpoint() do { } while (0) +#endif + +/** @def RTAssertPanic() + * If RT_STRICT is defined this macro will invoke RTAssertDoPanic if + * RTAssertShouldPanic returns true. If RT_STRICT isn't defined it won't do any + * thing. + */ +#if defined(RT_STRICT) && !defined(RTASSERT_DONT_PANIC) +# define RTAssertPanic() do { if (RTAssertShouldPanic()) RTAssertDoPanic(); } while (0) +#else +# define RTAssertPanic() do { } while (0) +#endif + +/** @def Assert + * Assert that an expression is true. If false, hit breakpoint. + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define Assert(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } \ + } while (0) +#else +# define Assert(expr) do { } while (0) +#endif + + +/** @def AssertStmt + * Assert that an expression is true. If false, hit breakpoint and execute the + * statement. + * @param expr Expression which should be true. + * @param stmt Statement to execute on failure. + */ +#ifdef RT_STRICT +# define AssertStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) +#else +# define AssertStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + } \ + } while (0) +#endif + + +/** @def AssertReturn + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) +#else +# define AssertReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return (rc); \ + } while (0) +#endif + +/** @def AssertReturnStmt + * Assert that an expression is true, if it isn't execute the given statement + * and return rc. + * + * In RT_STRICT mode it will hit a breakpoint before executing the statement and + * returning. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before returning on failure. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertReturnStmt(expr, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } \ + } while (0) +#else +# define AssertReturnStmt(expr, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return (rc); \ + } \ + } while (0) +#endif + +/** @def AssertReturnVoid + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) +#else +# define AssertReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return; \ + } while (0) +#endif + +/** @def AssertReturnVoidStmt + * Assert that an expression is true, if it isn't execute the given statement + * and return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before returning on failure. + */ +#ifdef RT_STRICT +# define AssertReturnVoidStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } \ + } while (0) +#else +# define AssertReturnVoidStmt(expr, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return; \ + } \ + } while (0) +#endif + + +/** @def AssertBreak + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before breaking. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + break +#endif + +/** @def AssertContinue + * Assert that an expression is true and continue if it isn't. + * In RT_STRICT mode it will hit a breakpoint before continuing. + * + * @param expr Expression which should be true. + */ +#ifdef RT_STRICT +# define AssertContinue(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + continue; \ + } else do {} while (0) +#else +# define AssertContinue(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + continue +#endif + +/** @def AssertBreakStmt + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before doing break. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else do {} while (0) +#else +# define AssertBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + stmt; \ + break; \ + } else do {} while (0) +#endif + + +/** @def AssertMsg + * Assert that an expression is true. If it's not print message and hit breakpoint. + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + } \ + } while (0) +#else +# define AssertMsg(expr, a) do { } while (0) +#endif + +/** @def AssertMsgStmt + * Assert that an expression is true. If it's not print message and hit + * breakpoint and execute the statement. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute in case of a failed assertion. + * + * @remarks The expression and statement will be evaluated in all build types. + */ +#ifdef RT_STRICT +# define AssertMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) +#else +# define AssertMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + } \ + } while (0) +#endif + +/** @def AssertMsgReturn + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) +#else +# define AssertMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return (rc); \ + } while (0) +#endif + +/** @def AssertMsgReturnStmt + * Assert that an expression is true, if it isn't execute the statement and + * return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgReturnStmt(expr, a, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } \ + } while (0) +#else +# define AssertMsgReturnStmt(expr, a, stmt, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return (rc); \ + } \ + } while (0) +#endif + +/** @def AssertMsgReturnVoid + * Assert that an expression is true and returns if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) +#else +# define AssertMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + return; \ + } while (0) +#endif + +/** @def AssertMsgReturnVoidStmt + * Assert that an expression is true, if it isn't execute the statement and + * return. + * + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before return in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertMsgReturnVoidStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + return; \ + } \ + } while (0) +#else +# define AssertMsgReturnVoidStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + stmt; \ + return; \ + } \ + } while (0) +#endif + + +/** @def AssertMsgBreak + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before returning. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + break +#endif + +/** @def AssertMsgBreakStmt + * Assert that an expression is true and breaks if it isn't. + * In RT_STRICT mode it will hit a breakpoint before doing break. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#ifdef RT_STRICT +# define AssertMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + stmt; \ + break; \ + } else \ + break +#endif + +/** @def AssertFailed + * An assertion failed, hit breakpoint. + */ +#ifdef RT_STRICT +# define AssertFailed() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } while (0) +#else +# define AssertFailed() do { } while (0) +#endif + +/** @def AssertFailedStmt + * An assertion failed, hit breakpoint and execute statement. + */ +#ifdef RT_STRICT +# define AssertFailedStmt(stmt) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + } while (0) +#else +# define AssertFailedStmt(stmt) do { stmt; } while (0) +#endif + +/** @def AssertFailedReturn + * An assertion failed, hit breakpoint (RT_STRICT mode only) and return. + * + * @param rc The rc to return. + */ +#ifdef RT_STRICT +# define AssertFailedReturn(rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) +#else +# define AssertFailedReturn(rc) \ + do { \ + return (rc); \ + } while (0) +#endif + +/** @def AssertFailedReturnStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute a + * statement and return a value. + * + * @param stmt The statement to execute before returning. + * @param rc The value to return. + */ +#ifdef RT_STRICT +# define AssertFailedReturnStmt(stmt, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } while (0) +#else +# define AssertFailedReturnStmt(stmt, rc) \ + do { \ + stmt; \ + return (rc); \ + } while (0) +#endif + +/** @def AssertFailedReturnVoid + * An assertion failed, hit breakpoint (RT_STRICT mode only) and return. + */ +#ifdef RT_STRICT +# define AssertFailedReturnVoid() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } while (0) +#else +# define AssertFailedReturnVoid() \ + do { \ + return; \ + } while (0) +#endif + +/** @def AssertFailedReturnVoidStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute a + * statement and return. + * + * @param stmt The statement to execute before returning. + */ +#ifdef RT_STRICT +# define AssertFailedReturnVoidStmt(stmt) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } while (0) +#else +# define AssertFailedReturnVoidStmt(stmt) \ + do { \ + stmt; \ + return; \ + } while (0) +#endif + + +/** @def AssertFailedBreak + * An assertion failed, hit breakpoint (RT_STRICT mode only) and break. + */ +#ifdef RT_STRICT +# define AssertFailedBreak() \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertFailedBreak() \ + if (1) \ + break; \ + else \ + break +#endif + +/** @def AssertFailedBreakStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute + * the given statement and break. + * + * @param stmt Statement to execute before break. + */ +#ifdef RT_STRICT +# define AssertFailedBreakStmt(stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertFailedBreakStmt(stmt) \ + if (1) { \ + stmt; \ + break; \ + } else \ + break +#endif + + +/** @def AssertMsgFailed + * An assertion failed print a message and a hit breakpoint. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailed(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + } while (0) +#else +# define AssertMsgFailed(a) do { } while (0) +#endif + +/** @def AssertMsgFailedReturn + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and return. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#ifdef RT_STRICT +# define AssertMsgFailedReturn(a, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return (rc); \ + } while (0) +#else +# define AssertMsgFailedReturn(a, rc) \ + do { \ + return (rc); \ + } while (0) +#endif + +/** @def AssertMsgFailedReturnVoid + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and return. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailedReturnVoid(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + return; \ + } while (0) +#else +# define AssertMsgFailedReturnVoid(a) \ + do { \ + return; \ + } while (0) +#endif + + +/** @def AssertMsgFailedBreak + * An assertion failed, hit breakpoint with message (RT_STRICT mode only) and break. + * + * @param a printf argument list (in parenthesis). + */ +#ifdef RT_STRICT +# define AssertMsgFailedBreak(a) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + break; \ + } else \ + break +#else +# define AssertMsgFailedBreak(a) \ + if (1) \ + break; \ + else \ + break +#endif + +/** @def AssertMsgFailedBreakStmt + * An assertion failed, hit breakpoint (RT_STRICT mode only), execute + * the given statement and break. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#ifdef RT_STRICT +# define AssertMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break +#else +# define AssertMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + stmt; \ + break; \ + } else \ + break +#endif + +/** @} */ + + + +/** @name Release Log Assertions + * + * These assertions will work like normal strict assertion when RT_STRICT is + * defined and LogRel statements when RT_STRICT is undefined. Typically used for + * things which shouldn't go wrong, but when it does you'd like to know one way + * or the other. + * + * @{ + */ + +/** @def RTAssertLogRelMsg1 + * RTAssertMsg1Weak (strict builds) / LogRel wrapper (non-strict). + */ +#ifdef RT_STRICT +# define RTAssertLogRelMsg1(pszExpr, iLine, pszFile, pszFunction) \ + RTAssertMsg1Weak(pszExpr, iLine, pszFile, pszFunction) +#else +# define RTAssertLogRelMsg1(pszExpr, iLine, pszFile, pszFunction) \ + LogRel(("AssertLogRel %s(%d) %s: %s\n",\ + (pszFile), (iLine), (pszFunction), (pszExpr) )) +#endif + +/** @def RTAssertLogRelMsg2 + * RTAssertMsg2Weak (strict builds) / LogRel wrapper (non-strict). + */ +#ifdef RT_STRICT +# define RTAssertLogRelMsg2(a) RTAssertMsg2Weak a +#else +# define RTAssertLogRelMsg2(a) LogRel(a) +#endif + +/** @def AssertLogRel + * Assert that an expression is true. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRel(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } \ + } while (0) + +/** @def AssertLogRelReturn + * Assert that an expression is true, return \a rc if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#define AssertLogRelReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertLogRelReturnVoid + * Assert that an expression is true, return void if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRelReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) + +/** @def AssertLogRelBreak + * Assert that an expression is true, break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + */ +#define AssertLogRelBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } \ + else \ + break + +/** @def AssertLogRelBreakStmt + * Assert that an expression is true, execute \a stmt and break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertLogRelBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelMsg + * Assert that an expression is true. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + } \ + } while (0) + +/** @def AssertLogRelMsgStmt + * Assert that an expression is true, execute \a stmt and break if it isn't + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute in case of a failed assertion. + */ +#define AssertLogRelMsgStmt(expr, a, stmt) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturn + * Assert that an expression is true, return \a rc if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturnStmt + * Assert that an expression is true, execute @a stmt and return @a rcRet if it + * isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + */ +#define AssertLogRelMsgReturnStmt(expr, a, stmt, rcRet) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return (rcRet); \ + } \ + } while (0) + +/** @def AssertLogRelMsgReturnVoid + * Assert that an expression is true, return (void) if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else\ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return; \ + } \ + } while (0) + +/** @def AssertLogRelMsgBreak + * Assert that an expression is true, break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + break; \ + } \ + else \ + break + +/** @def AssertLogRelMsgBreakStmt + * Assert that an expression is true, execute \a stmt and break if it isn't. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertLogRelMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertLogRelMsg1(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelFailed + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailed() \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + } while (0) + +/** @def AssertLogRelFailedReturn + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param rc What is to be presented to return. + */ +#define AssertLogRelFailedReturn(rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) + +/** @def AssertLogRelFailedReturnVoid + * An assertion failed, hit a breakpoint and return. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailedReturnVoid() \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + return; \ + } while (0) + +/** @def AssertLogRelFailedBreak + * An assertion failed, break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + */ +#define AssertLogRelFailedBreak() \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + break; \ + } else \ + break + +/** @def AssertLogRelFailedBreakStmt + * An assertion failed, execute \a stmt and break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param stmt Statement to execute before break. + */ +#define AssertLogRelFailedBreakStmt(stmt) \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @def AssertLogRelMsgFailed + * An assertion failed. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailed(a) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + } while (0) + +/** @def AssertLogRelMsgFailedStmt + * An assertion failed, execute @a stmt. + * + * Strict builds will hit a breakpoint, non-strict will only do LogRel. The + * statement will be executed in regardless of build type. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute after raising/logging the assertion. + */ +#define AssertLogRelMsgFailedStmt(a, stmt) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + } while (0) + +/** @def AssertLogRelMsgFailedReturn + * An assertion failed, return \a rc. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgFailedReturn(a, rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return (rc); \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnStmt + * An assertion failed, execute @a stmt and return @a rc. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rc What is to be presented to return. + */ +#define AssertLogRelMsgFailedReturnStmt(a, stmt, rc) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return (rc); \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnVoid + * An assertion failed, return void. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailedReturnVoid(a) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + return; \ + } while (0) + +/** @def AssertLogRelMsgFailedReturnVoidStmt + * An assertion failed, execute @a stmt and return void. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + */ +#define AssertLogRelMsgFailedReturnVoidStmt(a, stmt) \ + do { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + return; \ + } while (0) + +/** @def AssertLogRelMsgFailedBreak + * An assertion failed, break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertLogRelMsgFailedBreak(a) \ + if (1)\ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + break; \ + } else \ + break + +/** @def AssertLogRelMsgFailedBreakStmt + * An assertion failed, execute \a stmt and break. + * Strict builds will hit a breakpoint, non-strict will only do LogRel. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#define AssertLogRelMsgFailedBreakStmt(a, stmt) \ + if (1) \ + { \ + RTAssertLogRelMsg1((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertLogRelMsg2(a); \ + RTAssertPanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @} */ + + + +/** @name Release Assertions + * + * These assertions are always enabled. + * @{ + */ + +/** @def RTAssertReleasePanic() + * Invokes RTAssertShouldPanic and RTAssertDoPanic. + * + * It might seem odd that RTAssertShouldPanic is necessary when its result isn't + * checked, but it's done since RTAssertShouldPanic is overrideable and might be + * used to bail out before taking down the system (the VMMR0 case). + */ +#define RTAssertReleasePanic() do { RTAssertShouldPanic(); RTAssertDoPanic(); } while (0) + + +/** @def AssertRelease + * Assert that an expression is true. If it's not hit a breakpoint. + * + * @param expr Expression which should be true. + */ +#define AssertRelease(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertReleaseReturn + * Assert that an expression is true, hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param rc What is to be presented to return. + */ +#define AssertReleaseReturn(expr, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertReleaseReturnVoid + * Assert that an expression is true, hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + */ +#define AssertReleaseReturnVoid(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return; \ + } \ + } while (0) + + +/** @def AssertReleaseBreak + * Assert that an expression is true, hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + */ +#define AssertReleaseBreak(expr) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseBreakStmt + * Assert that an expression is true, hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertReleaseBreakStmt(expr, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseMsg + * Assert that an expression is true, print the message and hit a breakpoint if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertReleaseMsgReturn + * Assert that an expression is true, print the message and hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertReleaseMsgReturn(expr, a, rc) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return (rc); \ + } \ + } while (0) + +/** @def AssertReleaseMsgReturnVoid + * Assert that an expression is true, print the message and hit a breakpoint and return if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgReturnVoid(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return; \ + } \ + } while (0) + + +/** @def AssertReleaseMsgBreak + * Assert that an expression is true, print the message and hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgBreak(expr, a) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseMsgBreakStmt + * Assert that an expression is true, print the message and hit a breakpoint and break if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertReleaseMsgBreakStmt(expr, a, stmt) \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else if (1) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseFailed + * An assertion failed, hit a breakpoint. + */ +#define AssertReleaseFailed() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } while (0) + +/** @def AssertReleaseFailedReturn + * An assertion failed, hit a breakpoint and return. + * + * @param rc What is to be presented to return. + */ +#define AssertReleaseFailedReturn(rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return (rc); \ + } while (0) + +/** @def AssertReleaseFailedReturnVoid + * An assertion failed, hit a breakpoint and return. + */ +#define AssertReleaseFailedReturnVoid() \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + return; \ + } while (0) + + +/** @def AssertReleaseFailedBreak + * An assertion failed, hit a breakpoint and break. + */ +#define AssertReleaseFailedBreak() \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseFailedBreakStmt + * An assertion failed, hit a breakpoint and break. + * + * @param stmt Statement to execute before break. + */ +#define AssertReleaseFailedBreakStmt(stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + + +/** @def AssertReleaseMsgFailed + * An assertion failed, print a message and hit a breakpoint. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailed(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } while (0) + +/** @def AssertReleaseMsgFailedReturn + * An assertion failed, print a message, hit a breakpoint and return. + * + * @param a printf argument list (in parenthesis). + * @param rc What is to be presented to return. + */ +#define AssertReleaseMsgFailedReturn(a, rc) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return (rc); \ + } while (0) + +/** @def AssertReleaseMsgFailedReturnVoid + * An assertion failed, print a message, hit a breakpoint and return. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailedReturnVoid(a) \ + do { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + return; \ + } while (0) + + +/** @def AssertReleaseMsgFailedBreak + * An assertion failed, print a message, hit a breakpoint and break. + * + * @param a printf argument list (in parenthesis). + */ +#define AssertReleaseMsgFailedBreak(a) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + break; \ + } else \ + break + +/** @def AssertReleaseMsgFailedBreakStmt + * An assertion failed, print a message, hit a breakpoint and break. + * + * @param a printf argument list (in parenthesis). + * @param stmt Statement to execute before break. + */ +#define AssertReleaseMsgFailedBreakStmt(a, stmt) \ + if (1) { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + stmt; \ + break; \ + } else \ + break + +/** @} */ + + + +/** @name Fatal Assertions + * These are similar to release assertions except that you cannot ignore them in + * any way, they will loop for ever if RTAssertDoPanic returns. + * + * @{ + */ + +/** @def AssertFatal + * Assert that an expression is true. If it's not hit a breakpoint (for ever). + * + * @param expr Expression which should be true. + */ +#define AssertFatal(expr) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + for (;;) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalMsg + * Assert that an expression is true, print the message and hit a breakpoint (for ever) if it isn't. + * + * @param expr Expression which should be true. + * @param a printf argument list (in parenthesis). + */ +#define AssertFatalMsg(expr, a) \ + do { \ + if (RT_LIKELY(!!(expr))) \ + { /* likely */ } \ + else \ + for (;;) \ + { \ + RTAssertMsg1Weak(#expr, __LINE__, __FILE__, __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalFailed + * An assertion failed, hit a breakpoint (for ever). + */ +#define AssertFatalFailed() \ + do { \ + for (;;) \ + { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @def AssertFatalMsgFailed + * An assertion failed, print a message and hit a breakpoint (for ever). + * + * @param a printf argument list (in parenthesis). + */ +#define AssertFatalMsgFailed(a) \ + do { \ + for (;;) \ + { \ + RTAssertMsg1Weak((const char *)0, __LINE__, __FILE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__); \ + RTAssertMsg2Weak a; \ + RTAssertReleasePanic(); \ + } \ + } while (0) + +/** @} */ + + + +/** @name Convenience Assertions Macros + * @{ + */ + +/** @def AssertRC + * Asserts a iprt status code successful. + * + * On failure it will print info about the rc and hit a breakpoint. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRC(rc) AssertMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertRCStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and execute + * @a stmt if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCStmt(rc, stmt) AssertMsgRCStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertRCReturn + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturn(rc, rcRet) AssertMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertRCReturnStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and returns @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnStmt(rc, stmt, rcRet) AssertMsgRCReturnStmt(rc, ("%Rra\n", (rc)), stmt, rcRet) + +/** @def AssertRCReturnVoid + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnVoid(rc) AssertMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertRCReturnVoidStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), and + * execute the given statement/return if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning on failure. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCReturnVoidStmt(rc, stmt) AssertMsgRCReturnVoidStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertRCBreak + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCBreak(rc) AssertMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertRCBreakStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCBreakStmt(rc, stmt) AssertMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertMsgRC + * Asserts a iprt status code successful. + * + * It prints a custom message and hits a breakpoint on FAILURE. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRC(rc, msg) \ + do { AssertMsg(RT_SUCCESS_NP(rc), msg); NOREF(rc); } while (0) + +/** @def AssertMsgRCStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and + * execute @a stmt if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCStmt(rc, msg, stmt) \ + do { AssertMsgStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturn + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return + * @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturn(rc, msg, rcRet) \ + do { AssertMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and return @a rcRet if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnStmt(rc, msg, stmt, rcRet) \ + do { AssertMsgReturnStmt(RT_SUCCESS_NP(rc), msg, stmt, rcRet); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnVoid + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and return + * void if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnVoid(rc, msg) \ + do { AssertMsgReturnVoid(RT_SUCCESS_NP(rc), msg); NOREF(rc); } while (0) + +/** @def AssertMsgRCReturnVoidStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and return void if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCReturnVoidStmt(rc, msg, stmt) \ + do { AssertMsgReturnVoidStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } while (0) + +/** @def AssertMsgRCBreak + * Asserts a iprt status code successful, bitch (RT_STRICT mode only) and break + * if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCBreak(rc, msg) \ + if (1) { AssertMsgBreak(RT_SUCCESS(rc), msg); NOREF(rc); } else do {} while (0) + +/** @def AssertMsgRCBreakStmt + * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute + * @a stmt and break if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertMsgRCBreakStmt(rc, msg, stmt) \ + if (1) { AssertMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt); NOREF(rc); } else do {} while (0) + +/** @def AssertRCSuccess + * Asserts an iprt status code equals VINF_SUCCESS. + * + * On failure it will print info about the rc and hit a breakpoint. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccess(rc) do { AssertMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))); NOREF(rc); } while (0) + +/** @def AssertRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessReturn(rc, rcRet) AssertMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and return if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessReturnVoid(rc) AssertMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessBreak(rc) AssertMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS, bitch (RT_STRICT mode only) and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. In release mode is NOREF()'ed. + */ +#define AssertRCSuccessBreakStmt(rc, stmt) AssertMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertLogRelRC + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRC(rc) AssertLogRelMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCReturn + * Asserts a iprt status code successful, returning \a rc if it isn't. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturn(rc, rcRet) AssertLogRelMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertLogRelRCReturnStmt + * Asserts a iprt status code successful, executing \a stmt and returning \a rc + * if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturnStmt(rc, stmt, rcRet) AssertLogRelMsgRCReturnStmt(rc, ("%Rra\n", (rc)), stmt, rcRet) + +/** @def AssertLogRelRCReturnVoid + * Asserts a iprt status code successful, returning (void) if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCReturnVoid(rc) AssertLogRelMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCBreak + * Asserts a iprt status code successful, breaking if it isn't. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCBreak(rc) AssertLogRelMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCBreakStmt + * Asserts a iprt status code successful, execute \a statement and break if it isn't. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCBreakStmt(rc, stmt) AssertLogRelMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertLogRelMsgRC + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRC(rc, msg) AssertLogRelMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertLogRelMsgRCReturn + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturn(rc, msg, rcRet) AssertLogRelMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet) + +/** @def AssertLogRelMsgRCReturnStmt + * Asserts a iprt status code successful, execute \a stmt and return on + * failure. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before returning in case of a failed + * assertion. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturnStmt(rc, msg, stmt, rcRet) AssertLogRelMsgReturnStmt(RT_SUCCESS_NP(rc), msg, stmt, rcRet) + +/** @def AssertLogRelMsgRCReturnVoid + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCReturnVoid(rc, msg) AssertLogRelMsgReturnVoid(RT_SUCCESS_NP(rc), msg) + +/** @def AssertLogRelMsgRCBreak + * Asserts a iprt status code successful. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCBreak(rc, msg) AssertLogRelMsgBreak(RT_SUCCESS(rc), msg) + +/** @def AssertLogRelMsgRCBreakStmt + * Asserts a iprt status code successful, execute \a stmt and break if it isn't. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelMsgRCBreakStmt(rc, msg, stmt) AssertLogRelMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt) + +/** @def AssertLogRelRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccess(rc) AssertLogRelMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessReturn(rc, rcRet) AssertLogRelMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertLogRelRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessReturnVoid(rc) AssertLogRelMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessBreak(rc) AssertLogRelMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertLogRelRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertLogRelRCSuccessBreakStmt(rc, stmt) AssertLogRelMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertReleaseRC + * Asserts a iprt status code successful. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRC(rc) AssertReleaseMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCReturn + * Asserts a iprt status code successful, returning if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCReturn(rc, rcRet) AssertReleaseMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet) + +/** @def AssertReleaseRCReturnVoid + * Asserts a iprt status code successful, returning if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCReturnVoid(rc) AssertReleaseMsgRCReturnVoid(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCBreak + * Asserts a iprt status code successful, breaking if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally breaking the current statement if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCBreak(rc) AssertReleaseMsgRCBreak(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCBreakStmt + * Asserts a iprt status code successful, break if it isn't. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally the break statement will be issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCBreakStmt(rc, stmt) AssertReleaseMsgRCBreakStmt(rc, ("%Rra\n", (rc)), stmt) + +/** @def AssertReleaseMsgRC + * Asserts a iprt status code successful. + * + * On failure a custom message is printed and a breakpoint is hit. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRC(rc, msg) AssertReleaseMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertReleaseMsgRCReturn + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCReturn(rc, msg, rcRet) AssertReleaseMsgReturn(RT_SUCCESS_NP(rc), msg, rcRet) + +/** @def AssertReleaseMsgRCReturnVoid + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCReturnVoid(rc, msg) AssertReleaseMsgReturnVoid(RT_SUCCESS_NP(rc), msg) + +/** @def AssertReleaseMsgRCBreak + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * breaking the current status if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCBreak(rc, msg) AssertReleaseMsgBreak(RT_SUCCESS(rc), msg) + +/** @def AssertReleaseMsgRCBreakStmt + * Asserts a iprt status code successful. + * + * On failure a custom message is printed, a breakpoint is hit, and finally + * the break statement is issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseMsgRCBreakStmt(rc, msg, stmt) AssertReleaseMsgBreakStmt(RT_SUCCESS_NP(rc), msg, stmt) + +/** @def AssertReleaseRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccess(rc) AssertReleaseMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessReturn + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param rcRet What is to be presented to return. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessReturn(rc, rcRet) AssertReleaseMsgReturn((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), rcRet) + +/** @def AssertReleaseRCSuccessReturnVoid + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally returning from the function if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessReturnVoid(rc) AssertReleaseMsgReturnVoid((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessBreak + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally breaking the current statement if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessBreak(rc) AssertReleaseMsgBreak((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + +/** @def AssertReleaseRCSuccessBreakStmt + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed, a breakpoint hit + * and finally the break statement will be issued if the breakpoint is somehow ignored. + * + * @param rc iprt status code. + * @param stmt Statement to execute before break in case of a failed assertion. + * @remark rc is referenced multiple times. + */ +#define AssertReleaseRCSuccessBreakStmt(rc, stmt) AssertReleaseMsgBreakStmt((rc) == VINF_SUCCESS, ("%Rra\n", (rc)), stmt) + + +/** @def AssertFatalRC + * Asserts a iprt status code successful. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertFatalRC(rc) AssertFatalMsgRC(rc, ("%Rra\n", (rc))) + +/** @def AssertReleaseMsgRC + * Asserts a iprt status code successful. + * + * On failure a custom message is printed and a breakpoint is hit. + * + * @param rc iprt status code. + * @param msg printf argument list (in parenthesis). + * @remark rc is referenced multiple times. + */ +#define AssertFatalMsgRC(rc, msg) AssertFatalMsg(RT_SUCCESS_NP(rc), msg) + +/** @def AssertFatalRCSuccess + * Asserts that an iprt status code equals VINF_SUCCESS. + * + * On failure information about the error will be printed and a breakpoint hit. + * + * @param rc iprt status code. + * @remark rc is referenced multiple times. + */ +#define AssertFatalRCSuccess(rc) AssertFatalMsg((rc) == VINF_SUCCESS, ("%Rra\n", (rc))) + + +/** @def AssertPtr + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtr(pv) AssertMsg(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrReturn + * Asserts that a pointer is valid. + * + * @param pv The pointer. + * @param rcRet What is to be presented to return. + */ +#define AssertPtrReturn(pv, rcRet) AssertMsgReturn(VALID_PTR(pv), ("%p\n", (pv)), rcRet) + +/** @def AssertPtrReturnVoid + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtrReturnVoid(pv) AssertMsgReturnVoid(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrBreak + * Asserts that a pointer is valid. + * + * @param pv The pointer. + */ +#define AssertPtrBreak(pv) AssertMsgBreak(VALID_PTR(pv), ("%p\n", (pv))) + +/** @def AssertPtrBreakStmt + * Asserts that a pointer is valid. + * + * @param pv The pointer. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertPtrBreakStmt(pv, stmt) AssertMsgBreakStmt(VALID_PTR(pv), ("%p\n", (pv)), stmt) + +/** @def AssertPtrNull + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNull(pv) AssertMsg(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullReturn + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + * @param rcRet What is to be presented to return. + */ +#define AssertPtrNullReturn(pv, rcRet) AssertMsgReturn(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv)), rcRet) + +/** @def AssertPtrNullReturnVoid + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNullReturnVoid(pv) AssertMsgReturnVoid(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullBreak + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + */ +#define AssertPtrNullBreak(pv) AssertMsgBreak(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv))) + +/** @def AssertPtrNullBreakStmt + * Asserts that a pointer is valid or NULL. + * + * @param pv The pointer. + * @param stmt Statement to execute before break in case of a failed assertion. + */ +#define AssertPtrNullBreakStmt(pv, stmt) AssertMsgBreakStmt(VALID_PTR(pv) || (pv) == NULL, ("%p\n", (pv)), stmt) + +/** @def AssertGCPhys32 + * Asserts that the high dword of a physical address is zero + * + * @param GCPhys The address (RTGCPHYS). + */ +#define AssertGCPhys32(GCPhys) AssertMsg(VALID_PHYS32(GCPhys), ("%RGp\n", (RTGCPHYS)(GCPhys))) + +/** @def AssertGCPtr32 + * Asserts that the high dword of a physical address is zero + * + * @param GCPtr The address (RTGCPTR). + */ +#if GC_ARCH_BITS == 32 +# define AssertGCPtr32(GCPtr) do { } while (0) +#else +# define AssertGCPtr32(GCPtr) AssertMsg(!((GCPtr) & UINT64_C(0xffffffff00000000)), ("%RGv\n", GCPtr)) +#endif + +/** @def AssertForEach + * Equivalent to Assert for each value of the variable from the starting + * value to the finishing one. + * + * @param var Name of the counter variable. + * @param vartype Type of the counter variable. + * @param first Lowest inclusive value of the counter variable. + * This must be free from side effects. + * @param end Highest exclusive value of the counter variable. + * This must be free from side effects. + * @param expr Expression which should be true for each value of @a var. + */ +#define AssertForEach(var, vartype, first, end, expr) \ + do { \ + vartype var; \ + Assert((first) == (first) && (end) == (end)); /* partial check for side effects */ \ + for (var = (first); var < (end); var++) \ + AssertMsg(expr, ("%s = %#RX64 (%RI64)", #var, (uint64_t)var, (int64_t)var)); \ + } while (0) + +#ifdef RT_OS_WINDOWS + +/** @def AssertNtStatus + * Asserts that the NT_SUCCESS() returns true for the given NTSTATUS value. + * + * @param a_rcNt The NTSTATUS to check. Will be evaluated twice and + * subjected to NOREF(). + * @sa AssertRC() + */ +# define AssertNtStatus(a_rcNt) \ + do { AssertMsg(NT_SUCCESS(a_rcNt), ("%#x\n", (a_rcNt))); NOREF(a_rcNt); } while (0) + +/** @def AssertNtStatusSuccess + * Asserts that the given NTSTATUS value equals STATUS_SUCCESS. + * + * @param a_rcNt The NTSTATUS to check. Will be evaluated twice and + * subjected to NOREF(). + * @sa AssertRCSuccess() + */ +# define AssertNtStatusSuccess(a_rcNt) \ + do { AssertMsg((a_rcNt) == STATUS_SUCCESS, ("%#x\n", (a_rcNt))); NOREF(a_rcNt); } while (0) + +#endif /* RT_OS_WINDOWS */ + +/** @} */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/assertcompile.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/assertcompile.h @@ -0,0 +1,236 @@ +/** @file + * IPRT - Compile Time Assertions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_assertcompile_h +#define ___iprt_assertcompile_h + +#include + +/** @defgroup grp_rt_assert_compile Compile time assertions + * @ingroup grp_rt + * + * These assertions are used to check structure sizes, member/size alignments + * and similar compile time expressions. + * + * @remarks As you might have noticed, the AssertCompile macros don't follow the + * coding guidelines wrt to macros supposedly being all uppercase and + * underscored. For various reasons they don't, and nobody has + * complained yet. + * + * @{ + */ + +/** + * RTASSERTTYPE is the type the AssertCompile() macro redefines. + * It has no other function and shouldn't be used. + * Visual C++ uses this. + */ +typedef int RTASSERTTYPE[1]; + +/** + * RTASSERTVAR is the type the AssertCompile() macro redefines. + * It has no other function and shouldn't be used. + * GCC uses this. + */ +#ifdef __GNUC__ +RT_C_DECLS_BEGIN +#endif +extern int RTASSERTVAR[1]; +#ifdef __GNUC__ +RT_C_DECLS_END +#endif + +/** @def RTASSERT_HAVE_STATIC_ASSERT + * Indicates that the compiler implements static_assert(expr, msg). + */ +#ifdef _MSC_VER +# if _MSC_VER >= 1600 && defined(__cplusplus) +# define RTASSERT_HAVE_STATIC_ASSERT +# endif +#endif +#if defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define RTASSERT_HAVE_STATIC_ASSERT +#endif +#if RT_CLANG_PREREQ(6, 0) +# if __has_feature(cxx_static_assert) || __has_feature(c_static_assert) +# define RTASSERT_HAVE_STATIC_ASSERT +# endif +#endif +#ifdef DOXYGEN_RUNNING +# define RTASSERT_HAVE_STATIC_ASSERT +#endif + +/** @def AssertCompileNS + * Asserts that a compile-time expression is true. If it's not break the build. + * + * This differs from AssertCompile in that it accepts some more expressions + * than what C++0x allows - NS = Non-standard. + * + * @param expr Expression which should be true. + */ +#ifdef __GNUC__ +# define AssertCompileNS(expr) extern int RTASSERTVAR[1] __attribute__((__unused__)), RTASSERTVAR[(expr) ? 1 : 0] __attribute__((__unused__)) +#elif defined(__IBMC__) || defined(__IBMCPP__) +# define AssertCompileNS(expr) extern int RTASSERTVAR[(expr) ? 1 : 0] +#else +# define AssertCompileNS(expr) typedef int RTASSERTTYPE[(expr) ? 1 : 0] +#endif + +/** @def AssertCompile + * Asserts that a C++0x compile-time expression is true. If it's not break the + * build. + * @param expr Expression which should be true. + */ +#ifdef RTASSERT_HAVE_STATIC_ASSERT +# define AssertCompile(expr) static_assert(!!(expr), #expr) +#else +# define AssertCompile(expr) AssertCompileNS(expr) +#endif + +/** @def RTASSERT_OFFSET_OF() + * A offsetof() macro suitable for compile time assertions. + * Both GCC v4 and VisualAge for C++ v3.08 has trouble using RT_OFFSETOF. + */ +#if defined(__GNUC__) +# if __GNUC__ >= 4 +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __builtin_offsetof(a_Type, a_Member) +# else +# define RTASSERT_OFFSET_OF(a_Type, a_Member) RT_OFFSETOF(a_Type, a_Member) +# endif +#elif (defined(__IBMC__) || defined(__IBMCPP__)) && defined(RT_OS_OS2) +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __offsetof(a_Type, a_Member) +#elif (defined(__WATCOMC__) && defined(__cplusplus)) +# define RTASSERT_OFFSET_OF(a_Type, a_Member) __offsetof(a_Type, a_Member) +#else +# define RTASSERT_OFFSET_OF(a_Type, a_Member) RT_OFFSETOF(a_Type, a_Member) +#endif + + +/** @def AssertCompileSize + * Asserts a size at compile. + * @param type The type. + * @param size The expected type size. + */ +#define AssertCompileSize(type, size) \ + AssertCompile(sizeof(type) == (size)) + +/** @def AssertCompileSizeAlignment + * Asserts a size alignment at compile. + * @param type The type. + * @param align The size alignment to assert. + */ +#define AssertCompileSizeAlignment(type, align) \ + AssertCompile(!(sizeof(type) & ((align) - 1))) + +/** @def AssertCompileMemberSize + * Asserts a member offset alignment at compile. + * @param type The type. + * @param member The member. + * @param size The member size to assert. + */ +#define AssertCompileMemberSize(type, member, size) \ + AssertCompile(RT_SIZEOFMEMB(type, member) == (size)) + +/** @def AssertCompileMemberSizeAlignment + * Asserts a member size alignment at compile. + * @param type The type. + * @param member The member. + * @param align The member size alignment to assert. + */ +#define AssertCompileMemberSizeAlignment(type, member, align) \ + AssertCompile(!(RT_SIZEOFMEMB(type, member) & ((align) - 1))) + +/** @def AssertCompileMemberAlignment + * Asserts a member offset alignment at compile. + * @param type The type. + * @param member The member. + * @param align The member offset alignment to assert. + */ +#define AssertCompileMemberAlignment(type, member, align) \ + AssertCompile(!(RTASSERT_OFFSET_OF(type, member) & ((align) - 1))) + +/** @def AssertCompileMemberOffset + * Asserts an offset of a structure member at compile. + * @param type The type. + * @param member The member. + * @param off The expected offset. + */ +#define AssertCompileMemberOffset(type, member, off) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member) == (off)) + +/** @def AssertCompile2MemberOffsets + * Asserts that two (sub-structure) members in union have the same offset. + * @param type The type. + * @param member1 The first member. + * @param member2 The second member. + */ +#define AssertCompile2MemberOffsets(type, member1, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member1) == RTASSERT_OFFSET_OF(type, member2)) + +/** @def AssertCompileAdjacentMembers + * Asserts that two structure members are adjacent. + * @param type The type. + * @param member1 The first member. + * @param member2 The second member. + */ +#define AssertCompileAdjacentMembers(type, member1, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type, member1) + RT_SIZEOFMEMB(type, member1) == RTASSERT_OFFSET_OF(type, member2)) + +/** @def AssertCompileMembersAtSameOffset + * Asserts that members of two different structures are at the same offset. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersAtSameOffset(type1, member1, type2, member2) \ + AssertCompile(RTASSERT_OFFSET_OF(type1, member1) == RTASSERT_OFFSET_OF(type2, member2)) + +/** @def AssertCompileMembersSameSize + * Asserts that members of two different structures have the same size. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersSameSize(type1, member1, type2, member2) \ + AssertCompile(RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) + +/** @def AssertCompileMembersSameSizeAndOffset + * Asserts that members of two different structures have the same size and are + * at the same offset. + * @param type1 The first type. + * @param member1 The first member. + * @param type2 The second type. + * @param member2 The second member. + */ +#define AssertCompileMembersSameSizeAndOffset(type1, member1, type2, member2) \ + AssertCompile( RTASSERT_OFFSET_OF(type1, member1) == RTASSERT_OFFSET_OF(type2, member2) \ + && RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/cdefs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/cdefs.h @@ -0,0 +1,3867 @@ +/** @file + * IPRT - Common C and C++ definitions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_cdefs_h +#define ___iprt_cdefs_h + + +/** @defgroup grp_rt_cdefs IPRT Common Definitions and Macros + * @{ + */ + +/** @def RT_C_DECLS_BEGIN + * Used to start a block of function declarations which are shared + * between C and C++ program. + */ + +/** @def RT_C_DECLS_END + * Used to end a block of function declarations which are shared + * between C and C++ program. + */ + +#if defined(__cplusplus) +# define RT_C_DECLS_BEGIN extern "C" { +# define RT_C_DECLS_END } +#else +# define RT_C_DECLS_BEGIN +# define RT_C_DECLS_END +#endif + + +/* + * Shut up DOXYGEN warnings and guide it properly thru the code. + */ +#ifdef DOXYGEN_RUNNING +# define __AMD64__ +# define __X86__ +# define RT_ARCH_AMD64 +# define RT_ARCH_X86 +# define RT_ARCH_SPARC +# define RT_ARCH_SPARC64 +# define IN_RING0 +# define IN_RING3 +# define IN_RC +# define IN_RC +# define IN_RT_RC +# define IN_RT_R0 +# define IN_RT_R3 +# define IN_RT_STATIC +# define RT_STRICT +# define RT_NO_STRICT +# define RT_LOCK_STRICT +# define RT_LOCK_NO_STRICT +# define RT_LOCK_STRICT_ORDER +# define RT_LOCK_NO_STRICT_ORDER +# define RT_BREAKPOINT +# define RT_NO_DEPRECATED_MACROS +# define RT_EXCEPTIONS_ENABLED +# define RT_BIG_ENDIAN +# define RT_LITTLE_ENDIAN +# define RT_COMPILER_GROKS_64BIT_BITFIELDS +# define RT_COMPILER_WITH_80BIT_LONG_DOUBLE +# define RT_NO_VISIBILITY_HIDDEN +# define RT_GCC_SUPPORTS_VISIBILITY_HIDDEN +# define RT_COMPILER_SUPPORTS_VA_ARGS +# define RT_COMPILER_SUPPORTS_LAMBDA +#endif /* DOXYGEN_RUNNING */ + +/** @def RT_ARCH_X86 + * Indicates that we're compiling for the X86 architecture. + */ + +/** @def RT_ARCH_AMD64 + * Indicates that we're compiling for the AMD64 architecture. + */ + +/** @def RT_ARCH_SPARC + * Indicates that we're compiling for the SPARC V8 architecture (32-bit). + */ + +/** @def RT_ARCH_SPARC64 + * Indicates that we're compiling for the SPARC V9 architecture (64-bit). + */ +#if !defined(RT_ARCH_X86) \ + && !defined(RT_ARCH_AMD64) \ + && !defined(RT_ARCH_SPARC) \ + && !defined(RT_ARCH_SPARC64) \ + && !defined(RT_ARCH_ARM) +# if defined(__amd64__) || defined(__x86_64__) || defined(_M_X64) || defined(__AMD64__) +# define RT_ARCH_AMD64 +# elif defined(__i386__) || defined(_M_IX86) || defined(__X86__) +# define RT_ARCH_X86 +# elif defined(__sparcv9) +# define RT_ARCH_SPARC64 +# elif defined(__sparc__) +# define RT_ARCH_SPARC +# elif defined(__arm__) || defined(__arm32__) +# define RT_ARCH_ARM +# else /* PORTME: append test for new archs. */ +# error "Check what predefined macros your compiler uses to indicate architecture." +# endif +/* PORTME: append new archs checks. */ +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_AMD64) +# error "Both RT_ARCH_X86 and RT_ARCH_AMD64 cannot be defined at the same time!" +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_X86 and RT_ARCH_SPARC cannot be defined at the same time!" +#elif defined(RT_ARCH_X86) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_X86 and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_AMD64) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_AMD64 and RT_ARCH_SPARC cannot be defined at the same time!" +#elif defined(RT_ARCH_AMD64) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_AMD64 and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_SPARC) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_SPARC and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_AMD64) +# error "Both RT_ARCH_ARM and RT_ARCH_AMD64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_X86) +# error "Both RT_ARCH_ARM and RT_ARCH_X86 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_SPARC64) +# error "Both RT_ARCH_ARM and RT_ARCH_SPARC64 cannot be defined at the same time!" +#elif defined(RT_ARCH_ARM) && defined(RT_ARCH_SPARC) +# error "Both RT_ARCH_ARM and RT_ARCH_SPARC cannot be defined at the same time!" +#endif + +/* Final check (PORTME). */ +#if (defined(RT_ARCH_X86) != 0) \ + + (defined(RT_ARCH_AMD64) != 0) \ + + (defined(RT_ARCH_SPARC) != 0) \ + + (defined(RT_ARCH_SPARC64) != 0) \ + + (defined(RT_ARCH_ARM) != 0) \ + != 1 +# error "Exactly one RT_ARCH_XXX macro shall be defined" +#endif + +/** @def RT_GNUC_PREREQ + * Shorter than fiddling with __GNUC__ and __GNUC_MINOR__. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + */ +#define RT_GNUC_PREREQ(a_MinMajor, a_MinMinor) RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, 0) +/** @def RT_GNUC_PREREQ_EX + * Simplified way of checking __GNUC__ and __GNUC_MINOR__ regardless of actual + * compiler used, returns @a a_OtherRet for other compilers. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + * @param a_OtherRet What to return for non-GCC compilers. + */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((a_MinMajor) << 16) + (a_MinMinor)) +#else +# define RT_GNUC_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) (a_OtherRet) +#endif + +/** @def RT_MSC_PREREQ + * Convenient way of checking _MSC_VER regardless of actual compiler used + * (returns false if not MSC). + * + * @param a_MinVer Preferably a RT_MSC_VER_XXX value. + */ +#define RT_MSC_PREREQ(a_MinVer) RT_MSC_PREREQ_EX(a_MinVer, 0) +/** @def RT_MSC_PREREQ_EX + * Convenient way of checking _MSC_VER regardless of actual compiler used, + * returns @a a_OtherRet for other compilers. + * + * @param a_MinVer Preferably a RT_MSC_VER_XXX value. + * @param a_OtherRet What to return for non-MSC compilers. + */ +#if defined(_MSC_VER) +# define RT_MSC_PREREQ_EX(a_MinVer, a_OtherRet) ( (_MSC_VER) >= (a_MinVer) ) +#else +# define RT_MSC_PREREQ_EX(a_MinVer, a_OtherRet) (a_OtherRet) +#endif +/** @name RT_MSC_VER_XXX - _MSC_VER values to use with RT_MSC_PREREQ. + * @remarks The VCxxx values are derived from the CRT DLLs shipping with the + * compilers. + * @{ */ +#define RT_MSC_VER_VC50 (1100) /**< Visual C++ 5.0. */ +#define RT_MSC_VER_VC60 (1200) /**< Visual C++ 6.0. */ +#define RT_MSC_VER_VC70 (1300) /**< Visual C++ 7.0. */ +#define RT_MSC_VER_VC70 (1300) /**< Visual C++ 7.0. */ +#define RT_MSC_VER_VS2003 (1310) /**< Visual Studio 2003, aka Visual C++ 7.1. */ +#define RT_MSC_VER_VC71 RT_MSC_VER_VS2003 /**< Visual C++ 7.1, aka Visual Studio 2003. */ +#define RT_MSC_VER_VS2005 (1400) /**< Visual Studio 2005. */ +#define RT_MSC_VER_VC80 RT_MSC_VER_VS2005 /**< Visual C++ 8.0, aka Visual Studio 2008. */ +#define RT_MSC_VER_VS2008 (1500) /**< Visual Studio 2008. */ +#define RT_MSC_VER_VC90 RT_MSC_VER_VS2008 /**< Visual C++ 9.0, aka Visual Studio 2008. */ +#define RT_MSC_VER_VS2010 (1600) /**< Visual Studio 2010. */ +#define RT_MSC_VER_VC100 RT_MSC_VER_VS2010 /**< Visual C++ 10.0, aka Visual Studio 2010. */ +#define RT_MSC_VER_VS2012 (1700) /**< Visual Studio 2012. */ +#define RT_MSC_VER_VC110 RT_MSC_VER_VS2012 /**< Visual C++ 11.0, aka Visual Studio 2012. */ +#define RT_MSC_VER_VS2013 (1800) /**< Visual Studio 2013. */ +#define RT_MSC_VER_VC120 RT_MSC_VER_VS2013 /**< Visual C++ 12.0, aka Visual Studio 2013. */ +#define RT_MSC_VER_VS2015 (1900) /**< Visual Studio 2015. */ +#define RT_MSC_VER_VC140 RT_MSC_VER_VS2015 /**< Visual C++ 14.0, aka Visual Studio 2015. */ +/** @} */ + +/** @def RT_CLANG_PREREQ + * Shorter than fiddling with __clang_major__ and __clang_minor__. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + */ +#define RT_CLANG_PREREQ(a_MinMajor, a_MinMinor) RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, 0) +/** @def RT_CLANG_PREREQ_EX + * Simplified way of checking __clang_major__ and __clang_minor__ regardless of + * actual compiler used, returns @a a_OtherRet for other compilers. + * + * @param a_MinMajor Minimum major version + * @param a_MinMinor The minor version number part. + * @param a_OtherRet What to return for non-GCC compilers. + */ +#if defined(__clang_major__) && defined(__clang_minor__) +# define RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) \ + ((__clang_major__ << 16) + __clang_minor__ >= ((a_MinMajor) << 16) + (a_MinMinor)) +#else +# define RT_CLANG_PREREQ_EX(a_MinMajor, a_MinMinor, a_OtherRet) (a_OtherRet) +#endif + + +/** @def __X86__ + * Indicates that we're compiling for the X86 architecture. + * @deprecated + */ + +/** @def __AMD64__ + * Indicates that we're compiling for the AMD64 architecture. + * @deprecated + */ +#if !defined(__X86__) && !defined(__AMD64__) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) +# if defined(RT_ARCH_AMD64) +# define __AMD64__ +# elif defined(RT_ARCH_X86) +# define __X86__ +# else +# error "Check what predefined macros your compiler uses to indicate architecture." +# endif +#elif defined(__X86__) && defined(__AMD64__) +# error "Both __X86__ and __AMD64__ cannot be defined at the same time!" +#elif defined(__X86__) && !defined(RT_ARCH_X86) +# error "__X86__ without RT_ARCH_X86!" +#elif defined(__AMD64__) && !defined(RT_ARCH_AMD64) +# error "__AMD64__ without RT_ARCH_AMD64!" +#endif + +/** @def RT_BIG_ENDIAN + * Defined if the architecture is big endian. */ +/** @def RT_LITTLE_ENDIAN + * Defined if the architecture is little endian. */ +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM) +# define RT_LITTLE_ENDIAN +#elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define RT_BIG_ENDIAN +#else +# error "PORTME: architecture endianess" +#endif +#if defined(RT_BIG_ENDIAN) && defined(RT_LITTLE_ENDIAN) +# error "Both RT_BIG_ENDIAN and RT_LITTLE_ENDIAN are defined" +#endif + + +/** @def IN_RING0 + * Used to indicate that we're compiling code which is running + * in Ring-0 Host Context. + */ + +/** @def IN_RING3 + * Used to indicate that we're compiling code which is running + * in Ring-3 Host Context. + */ + +/** @def IN_RC + * Used to indicate that we're compiling code which is running + * in the Raw-mode Context (implies R0). + */ +#if !defined(IN_RING3) && !defined(IN_RING0) && !defined(IN_RC) && !defined(IN_RC) +# error "You must define which context the compiled code should run in; IN_RING3, IN_RING0 or IN_RC" +#endif +#if (defined(IN_RING3) && (defined(IN_RING0) || defined(IN_RC)) ) \ + || (defined(IN_RING0) && (defined(IN_RING3) || defined(IN_RC)) ) \ + || (defined(IN_RC) && (defined(IN_RING3) || defined(IN_RING0)) ) +# error "Only one of the IN_RING3, IN_RING0, IN_RC defines should be defined." +#endif + + +/** @def ARCH_BITS + * Defines the bit count of the current context. + */ +#if !defined(ARCH_BITS) || defined(DOXYGEN_RUNNING) +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) +# define ARCH_BITS 64 +# elif !defined(__I86__) || !defined(__WATCOMC__) +# define ARCH_BITS 32 +# else +# define ARCH_BITS 16 +# endif +#endif + +/* ARCH_BITS validation (PORTME). */ +#if ARCH_BITS == 64 + #if defined(RT_ARCH_X86) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_ARM) + # error "ARCH_BITS=64 but non-64-bit RT_ARCH_XXX defined." + #endif + #if !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_SPARC64) + # error "ARCH_BITS=64 but no 64-bit RT_ARCH_XXX defined." + #endif + +#elif ARCH_BITS == 32 + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) + # error "ARCH_BITS=32 but non-32-bit RT_ARCH_XXX defined." + #endif + #if !defined(RT_ARCH_X86) && !defined(RT_ARCH_SPARC) && !defined(RT_ARCH_ARM) + # error "ARCH_BITS=32 but no 32-bit RT_ARCH_XXX defined." + #endif + +#elif ARCH_BITS == 16 + #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) || defined(RT_ARCH_ARM) + # error "ARCH_BITS=16 but non-16-bit RT_ARCH_XX defined." + #endif + #if !defined(RT_ARCH_X86) + # error "ARCH_BITS=16 but RT_ARCH_X86 isn't defined." + #endif + +#else +# error "Unsupported ARCH_BITS value!" +#endif + +/** @def HC_ARCH_BITS + * Defines the host architecture bit count. + */ +#if !defined(HC_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifndef IN_RC +# define HC_ARCH_BITS ARCH_BITS +# else +# define HC_ARCH_BITS 32 +# endif +#endif + +/** @def GC_ARCH_BITS + * Defines the guest architecture bit count. + */ +#if !defined(GC_ARCH_BITS) && !defined(DOXYGEN_RUNNING) +# ifdef VBOX_WITH_64_BITS_GUESTS +# define GC_ARCH_BITS 64 +# else +# define GC_ARCH_BITS 32 +# endif +#endif + +/** @def R3_ARCH_BITS + * Defines the host ring-3 architecture bit count. + */ +#if !defined(R3_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RING3 +# define R3_ARCH_BITS ARCH_BITS +# else +# define R3_ARCH_BITS HC_ARCH_BITS +# endif +#endif + +/** @def R0_ARCH_BITS + * Defines the host ring-0 architecture bit count. + */ +#if !defined(R0_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RING0 +# define R0_ARCH_BITS ARCH_BITS +# else +# define R0_ARCH_BITS HC_ARCH_BITS +# endif +#endif + +/** @def GC_ARCH_BITS + * Defines the guest architecture bit count. + */ +#if !defined(GC_ARCH_BITS) || defined(DOXYGEN_RUNNING) +# ifdef IN_RC +# define GC_ARCH_BITS ARCH_BITS +# else +# define GC_ARCH_BITS 32 +# endif +#endif + + + +/** @name RT_OPSYS_XXX - Operative System Identifiers. + * These are the value that the RT_OPSYS \#define can take. @{ + */ +/** Unknown OS. */ +#define RT_OPSYS_UNKNOWN 0 +/** OS Agnostic. */ +#define RT_OPSYS_AGNOSTIC 1 +/** Darwin - aka Mac OS X. */ +#define RT_OPSYS_DARWIN 2 +/** DragonFly BSD. */ +#define RT_OPSYS_DRAGONFLY 3 +/** DOS. */ +#define RT_OPSYS_DOS 4 +/** FreeBSD. */ +#define RT_OPSYS_FREEBSD 5 +/** Haiku. */ +#define RT_OPSYS_HAIKU 6 +/** Linux. */ +#define RT_OPSYS_LINUX 7 +/** L4. */ +#define RT_OPSYS_L4 8 +/** Minix. */ +#define RT_OPSYS_MINIX 9 +/** NetBSD. */ +#define RT_OPSYS_NETBSD 11 +/** Netware. */ +#define RT_OPSYS_NETWARE 12 +/** NT (native). */ +#define RT_OPSYS_NT 13 +/** OpenBSD. */ +#define RT_OPSYS_OPENBSD 14 +/** OS/2. */ +#define RT_OPSYS_OS2 15 +/** Plan 9. */ +#define RT_OPSYS_PLAN9 16 +/** QNX. */ +#define RT_OPSYS_QNX 17 +/** Solaris. */ +#define RT_OPSYS_SOLARIS 18 +/** UEFI. */ +#define RT_OPSYS_UEFI 19 +/** Windows. */ +#define RT_OPSYS_WINDOWS 20 +/** The max RT_OPSYS_XXX value (exclusive). */ +#define RT_OPSYS_MAX 21 +/** @} */ + +/** @def RT_OPSYS + * Indicates which OS we're targeting. It's a \#define with is + * assigned one of the RT_OPSYS_XXX defines above. + * + * So to test if we're on FreeBSD do the following: + * @code + * #if RT_OPSYS == RT_OPSYS_FREEBSD + * some_funky_freebsd_specific_stuff(); + * #endif + * @endcode + */ + +/* + * Set RT_OPSYS_XXX according to RT_OS_XXX. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: # elif defined(RT_OS_\1)\n# define RT_OPSYS RT_OPSYS_\1 + */ +#ifndef RT_OPSYS +# if defined(RT_OS_UNKNOWN) || defined(DOXYGEN_RUNNING) +# define RT_OPSYS RT_OPSYS_UNKNOWN +# elif defined(RT_OS_AGNOSTIC) +# define RT_OPSYS RT_OPSYS_AGNOSTIC +# elif defined(RT_OS_DARWIN) +# define RT_OPSYS RT_OPSYS_DARWIN +# elif defined(RT_OS_DRAGONFLY) +# define RT_OPSYS RT_OPSYS_DRAGONFLY +# elif defined(RT_OS_DOS) +# define RT_OPSYS RT_OPSYS_DOS +# elif defined(RT_OS_FREEBSD) +# define RT_OPSYS RT_OPSYS_FREEBSD +# elif defined(RT_OS_HAIKU) +# define RT_OPSYS RT_OPSYS_HAIKU +# elif defined(RT_OS_LINUX) +# define RT_OPSYS RT_OPSYS_LINUX +# elif defined(RT_OS_L4) +# define RT_OPSYS RT_OPSYS_L4 +# elif defined(RT_OS_MINIX) +# define RT_OPSYS RT_OPSYS_MINIX +# elif defined(RT_OS_NETBSD) +# define RT_OPSYS RT_OPSYS_NETBSD +# elif defined(RT_OS_NETWARE) +# define RT_OPSYS RT_OPSYS_NETWARE +# elif defined(RT_OS_NT) +# define RT_OPSYS RT_OPSYS_NT +# elif defined(RT_OS_OPENBSD) +# define RT_OPSYS RT_OPSYS_OPENBSD +# elif defined(RT_OS_OS2) +# define RT_OPSYS RT_OPSYS_OS2 +# elif defined(RT_OS_PLAN9) +# define RT_OPSYS RT_OPSYS_PLAN9 +# elif defined(RT_OS_QNX) +# define RT_OPSYS RT_OPSYS_QNX +# elif defined(RT_OS_SOLARIS) +# define RT_OPSYS RT_OPSYS_SOLARIS +# elif defined(RT_OS_UEFI) +# define RT_OPSYS RT_OPSYS_UEFI +# elif defined(RT_OS_WINDOWS) +# define RT_OPSYS RT_OPSYS_WINDOWS +# endif +#endif + +/* + * Guess RT_OPSYS based on compiler predefined macros. + */ +#ifndef RT_OPSYS +# if defined(__APPLE__) +# define RT_OPSYS RT_OPSYS_DARWIN +# elif defined(__DragonFly__) +# define RT_OPSYS RT_OPSYS_DRAGONFLY +# elif defined(__FreeBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_FREEBSD +# elif defined(__gnu_linux__) +# define RT_OPSYS RT_OPSYS_LINUX +# elif defined(__NetBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_NETBSD +# elif defined(__OpenBSD__) /*??*/ +# define RT_OPSYS RT_OPSYS_OPENBSD +# elif defined(__OS2__) +# define RT_OPSYS RT_OPSYS_OS2 +# elif defined(__sun__) || defined(__SunOS__) || defined(__sun) || defined(__SunOS) +# define RT_OPSYS RT_OPSYS_SOLARIS +# elif defined(_WIN32) || defined(_WIN64) +# define RT_OPSYS RT_OPSYS_WINDOWS +# elif defined(MSDOS) || defined(_MSDOS) || defined(DOS16RM) /* OW+MSC || MSC || DMC */ +# define RT_OPSYS RT_OPSYS_DOS +# else +# error "Port Me" +# endif +#endif + +#if RT_OPSYS < RT_OPSYS_UNKNOWN || RT_OPSYS >= RT_OPSYS_MAX +# error "Invalid RT_OPSYS value." +#endif + +/* + * Do some consistency checks. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: #if defined(RT_OS_\1) && RT_OPSYS != RT_OPSYS_\1\n# error RT_OPSYS vs RT_OS_\1\n#endif + */ +#if defined(RT_OS_UNKNOWN) && RT_OPSYS != RT_OPSYS_UNKNOWN +# error RT_OPSYS vs RT_OS_UNKNOWN +#endif +#if defined(RT_OS_AGNOSTIC) && RT_OPSYS != RT_OPSYS_AGNOSTIC +# error RT_OPSYS vs RT_OS_AGNOSTIC +#endif +#if defined(RT_OS_DARWIN) && RT_OPSYS != RT_OPSYS_DARWIN +# error RT_OPSYS vs RT_OS_DARWIN +#endif +#if defined(RT_OS_DRAGONFLY) && RT_OPSYS != RT_OPSYS_DRAGONFLY +# error RT_OPSYS vs RT_OS_DRAGONFLY +#endif +#if defined(RT_OS_DOS) && RT_OPSYS != RT_OPSYS_DOS +# error RT_OPSYS vs RT_OS_DOS +#endif +#if defined(RT_OS_FREEBSD) && RT_OPSYS != RT_OPSYS_FREEBSD +# error RT_OPSYS vs RT_OS_FREEBSD +#endif +#if defined(RT_OS_HAIKU) && RT_OPSYS != RT_OPSYS_HAIKU +# error RT_OPSYS vs RT_OS_HAIKU +#endif +#if defined(RT_OS_LINUX) && RT_OPSYS != RT_OPSYS_LINUX +# error RT_OPSYS vs RT_OS_LINUX +#endif +#if defined(RT_OS_L4) && RT_OPSYS != RT_OPSYS_L4 +# error RT_OPSYS vs RT_OS_L4 +#endif +#if defined(RT_OS_MINIX) && RT_OPSYS != RT_OPSYS_MINIX +# error RT_OPSYS vs RT_OS_MINIX +#endif +#if defined(RT_OS_NETBSD) && RT_OPSYS != RT_OPSYS_NETBSD +# error RT_OPSYS vs RT_OS_NETBSD +#endif +#if defined(RT_OS_NETWARE) && RT_OPSYS != RT_OPSYS_NETWARE +# error RT_OPSYS vs RT_OS_NETWARE +#endif +#if defined(RT_OS_NT) && RT_OPSYS != RT_OPSYS_NT +# error RT_OPSYS vs RT_OS_NT +#endif +#if defined(RT_OS_OPENBSD) && RT_OPSYS != RT_OPSYS_OPENBSD +# error RT_OPSYS vs RT_OS_OPENBSD +#endif +#if defined(RT_OS_OS2) && RT_OPSYS != RT_OPSYS_OS2 +# error RT_OPSYS vs RT_OS_OS2 +#endif +#if defined(RT_OS_PLAN9) && RT_OPSYS != RT_OPSYS_PLAN9 +# error RT_OPSYS vs RT_OS_PLAN9 +#endif +#if defined(RT_OS_QNX) && RT_OPSYS != RT_OPSYS_QNX +# error RT_OPSYS vs RT_OS_QNX +#endif +#if defined(RT_OS_SOLARIS) && RT_OPSYS != RT_OPSYS_SOLARIS +# error RT_OPSYS vs RT_OS_SOLARIS +#endif +#if defined(RT_OS_UEFI) && RT_OPSYS != RT_OPSYS_UEFI +# error RT_OPSYS vs RT_OS_UEFI +#endif +#if defined(RT_OS_WINDOWS) && RT_OPSYS != RT_OPSYS_WINDOWS +# error RT_OPSYS vs RT_OS_WINDOWS +#endif + +/* + * Make sure the RT_OS_XXX macro is defined. + * + * Search: #define RT_OPSYS_([A-Z0-9]+) .* + * Replace: #elif RT_OPSYS == RT_OPSYS_\1\n# ifndef RT_OS_\1\n# define RT_OS_\1\n# endif + */ +#if RT_OPSYS == RT_OPSYS_UNKNOWN +# ifndef RT_OS_UNKNOWN +# define RT_OS_UNKNOWN +# endif +#elif RT_OPSYS == RT_OPSYS_AGNOSTIC +# ifndef RT_OS_AGNOSTIC +# define RT_OS_AGNOSTIC +# endif +#elif RT_OPSYS == RT_OPSYS_DARWIN +# ifndef RT_OS_DARWIN +# define RT_OS_DARWIN +# endif +#elif RT_OPSYS == RT_OPSYS_DRAGONFLY +# ifndef RT_OS_DRAGONFLY +# define RT_OS_DRAGONFLY +# endif +#elif RT_OPSYS == RT_OPSYS_DOS +# ifndef RT_OS_DOS +# define RT_OS_DOS +# endif +#elif RT_OPSYS == RT_OPSYS_FREEBSD +# ifndef RT_OS_FREEBSD +# define RT_OS_FREEBSD +# endif +#elif RT_OPSYS == RT_OPSYS_HAIKU +# ifndef RT_OS_HAIKU +# define RT_OS_HAIKU +# endif +#elif RT_OPSYS == RT_OPSYS_LINUX +# ifndef RT_OS_LINUX +# define RT_OS_LINUX +# endif +#elif RT_OPSYS == RT_OPSYS_L4 +# ifndef RT_OS_L4 +# define RT_OS_L4 +# endif +#elif RT_OPSYS == RT_OPSYS_MINIX +# ifndef RT_OS_MINIX +# define RT_OS_MINIX +# endif +#elif RT_OPSYS == RT_OPSYS_NETBSD +# ifndef RT_OS_NETBSD +# define RT_OS_NETBSD +# endif +#elif RT_OPSYS == RT_OPSYS_NETWARE +# ifndef RT_OS_NETWARE +# define RT_OS_NETWARE +# endif +#elif RT_OPSYS == RT_OPSYS_NT +# ifndef RT_OS_NT +# define RT_OS_NT +# endif +#elif RT_OPSYS == RT_OPSYS_OPENBSD +# ifndef RT_OS_OPENBSD +# define RT_OS_OPENBSD +# endif +#elif RT_OPSYS == RT_OPSYS_OS2 +# ifndef RT_OS_OS2 +# define RT_OS_OS2 +# endif +#elif RT_OPSYS == RT_OPSYS_PLAN9 +# ifndef RT_OS_PLAN9 +# define RT_OS_PLAN9 +# endif +#elif RT_OPSYS == RT_OPSYS_QNX +# ifndef RT_OS_QNX +# define RT_OS_QNX +# endif +#elif RT_OPSYS == RT_OPSYS_SOLARIS +# ifndef RT_OS_SOLARIS +# define RT_OS_SOLARIS +# endif +#elif RT_OPSYS == RT_OPSYS_UEFI +# ifndef RT_OS_UEFI +# define RT_OS_UEFI +# endif +#elif RT_OPSYS == RT_OPSYS_WINDOWS +# ifndef RT_OS_WINDOWS +# define RT_OS_WINDOWS +# endif +#else +# error "Bad RT_OPSYS value." +#endif + + +/** + * Checks whether the given OpSys uses DOS-style paths or not. + * + * By DOS-style paths we include drive lettering and UNC paths. + * + * @returns true / false + * @param a_OpSys The RT_OPSYS_XXX value to check, will be reference + * multiple times. + */ +#define RT_OPSYS_USES_DOS_PATHS(a_OpSys) \ + ( (a_OpSys) == RT_OPSYS_WINDOWS \ + || (a_OpSys) == RT_OPSYS_OS2 \ + || (a_OpSys) == RT_OPSYS_DOS ) + + + +/** @def CTXTYPE + * Declare a type differently in GC, R3 and R0. + * + * @param GCType The GC type. + * @param R3Type The R3 type. + * @param R0Type The R0 type. + * @remark For pointers used only in one context use RCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE(). + */ +#ifdef IN_RC +# define CTXTYPE(GCType, R3Type, R0Type) GCType +#elif defined(IN_RING3) +# define CTXTYPE(GCType, R3Type, R0Type) R3Type +#else +# define CTXTYPE(GCType, R3Type, R0Type) R0Type +#endif + +/** @def RCPTRTYPE + * Declare a pointer which is used in the raw mode context but appears in structure(s) used by + * both HC and RC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param RCType The RC type. + */ +#define RCPTRTYPE(RCType) CTXTYPE(RCType, RTRCPTR, RTRCPTR) + +/** @def R3R0PTRTYPE + * Declare a pointer which is used in HC, is explicitly valid in ring 3 and 0, + * but appears in structure(s) used by both HC and GC. The main purpose is to + * make sure structures have the same size when built for different architectures. + * + * @param R3R0Type The R3R0 type. + * @remarks This used to be called HCPTRTYPE. + */ +#define R3R0PTRTYPE(R3R0Type) CTXTYPE(RTHCPTR, R3R0Type, R3R0Type) + +/** @def R3PTRTYPE + * Declare a pointer which is used in R3 but appears in structure(s) used by + * both HC and GC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param R3Type The R3 type. + */ +#define R3PTRTYPE(R3Type) CTXTYPE(RTHCUINTPTR, R3Type, RTHCUINTPTR) + +/** @def R0PTRTYPE + * Declare a pointer which is used in R0 but appears in structure(s) used by + * both HC and GC. The main purpose is to make sure structures have the same + * size when built for different architectures. + * + * @param R0Type The R0 type. + */ +#define R0PTRTYPE(R0Type) CTXTYPE(RTHCUINTPTR, RTHCUINTPTR, R0Type) + +/** @def CTXSUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +/** @def OTHERCTXSUFF + * Adds the suffix of the other context to the passed in + * identifier name. The suffix is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +#ifdef IN_RC +# define CTXSUFF(var) var##GC +# define OTHERCTXSUFF(var) var##HC +#else +# define CTXSUFF(var) var##HC +# define OTHERCTXSUFF(var) var##GC +#endif + +/** @def CTXALLSUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is R3, R0 or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * @deprecated Use CTX_SUFF. Do NOT use this for new code. + */ +#ifdef IN_RC +# define CTXALLSUFF(var) var##GC +#elif defined(IN_RING0) +# define CTXALLSUFF(var) var##R0 +#else +# define CTXALLSUFF(var) var##R3 +#endif + +/** @def CTX_SUFF + * Adds the suffix of the current context to the passed in + * identifier name. The suffix is R3, R0 or RC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * + * @remark This will replace CTXALLSUFF and CTXSUFF before long. + */ +#ifdef IN_RC +# define CTX_SUFF(var) var##RC +#elif defined(IN_RING0) +# define CTX_SUFF(var) var##R0 +#else +# define CTX_SUFF(var) var##R3 +#endif + +/** @def CTX_SUFF_Z + * Adds the suffix of the current context to the passed in + * identifier name, combining RC and R0 into RZ. + * The suffix thus is R3 or RZ. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param var Identifier name. + * + * @remark This will replace CTXALLSUFF and CTXSUFF before long. + */ +#ifdef IN_RING3 +# define CTX_SUFF_Z(var) var##R3 +#else +# define CTX_SUFF_Z(var) var##RZ +#endif + + +/** @def CTXMID + * Adds the current context as a middle name of an identifier name + * The middle name is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +/** @def OTHERCTXMID + * Adds the other context as a middle name of an identifier name + * The middle name is HC or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + * @deprecated use CTX_MID or CTX_MID_Z + */ +#ifdef IN_RC +# define CTXMID(first, last) first##GC##last +# define OTHERCTXMID(first, last) first##HC##last +#else +# define CTXMID(first, last) first##HC##last +# define OTHERCTXMID(first, last) first##GC##last +#endif + +/** @def CTXALLMID + * Adds the current context as a middle name of an identifier name. + * The middle name is R3, R0 or GC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + * @deprecated use CTX_MID or CTX_MID_Z + */ +#ifdef IN_RC +# define CTXALLMID(first, last) first##GC##last +#elif defined(IN_RING0) +# define CTXALLMID(first, last) first##R0##last +#else +# define CTXALLMID(first, last) first##R3##last +#endif + +/** @def CTX_MID + * Adds the current context as a middle name of an identifier name. + * The middle name is R3, R0 or RC. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +#ifdef IN_RC +# define CTX_MID(first, last) first##RC##last +#elif defined(IN_RING0) +# define CTX_MID(first, last) first##R0##last +#else +# define CTX_MID(first, last) first##R3##last +#endif + +/** @def CTX_MID_Z + * Adds the current context as a middle name of an identifier name, combining RC + * and R0 into RZ. + * The middle name thus is either R3 or RZ. + * + * This is macro should only be used in shared code to avoid a forest of ifdefs. + * @param first First name. + * @param last Surname. + */ +#ifdef IN_RING3 +# define CTX_MID_Z(first, last) first##R3##last +#else +# define CTX_MID_Z(first, last) first##RZ##last +#endif + + +/** @def R3STRING + * A macro which in GC and R0 will return a dummy string while in R3 it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or GC. The intention is to avoid the \#ifdef IN_RING3 mess. + * + * @param pR3String The R3 string. Only referenced in R3. + * @see R0STRING and GCSTRING + */ +#ifdef IN_RING3 +# define R3STRING(pR3String) (pR3String) +#else +# define R3STRING(pR3String) ("") +#endif + +/** @def R0STRING + * A macro which in GC and R3 will return a dummy string while in R0 it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or GC. The intention is to avoid the \#ifdef IN_RING0 mess. + * + * @param pR0String The R0 string. Only referenced in R0. + * @see R3STRING and GCSTRING + */ +#ifdef IN_RING0 +# define R0STRING(pR0String) (pR0String) +#else +# define R0STRING(pR0String) ("") +#endif + +/** @def RCSTRING + * A macro which in R3 and R0 will return a dummy string while in RC it will return + * the parameter. + * + * This is typically used to wrap description strings in structures shared + * between R3, R0 and/or RC. The intention is to avoid the \#ifdef IN_RC mess. + * + * @param pRCString The RC string. Only referenced in RC. + * @see R3STRING, R0STRING + */ +#ifdef IN_RC +# define RCSTRING(pRCString) (pRCString) +#else +# define RCSTRING(pRCString) ("") +#endif + + +/** @def RT_NOTHING + * A macro that expands to nothing. + * This is primarily intended as a dummy argument for macros to avoid the + * undefined behavior passing empty arguments to an macro (ISO C90 and C++98, + * gcc v4.4 warns about it). + */ +#define RT_NOTHING + +/** @def RT_GCC_EXTENSION + * Macro for shutting up GCC warnings about using language extensions. */ +#ifdef __GNUC__ +# define RT_GCC_EXTENSION __extension__ +#else +# define RT_GCC_EXTENSION +#endif + +/** @def RT_GCC_NO_WARN_DEPRECATED_BEGIN + * Used to start a block of code where GCC should not warn about deprecated + * declarations. */ +#if RT_GNUC_PREREQ(4, 6) +# define RT_GCC_NO_WARN_DEPRECATED_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +/** @def RT_GCC_NO_WARN_DEPRECATED_END + * Used to end a block of code where GCC should not warn about deprecated + * declarations. */ +# define RT_GCC_NO_WARN_DEPRECATED_END \ + _Pragma("GCC diagnostic pop") +#else +# define RT_GCC_NO_WARN_DEPRECATED_BEGIN +# define RT_GCC_NO_WARN_DEPRECATED_END +#endif + +/** @def RT_GCC_NO_WARN_CONVERSION_BEGIN + * Used to start a block of code where GCC should not warn about implicit + * conversions that may alter a value. */ +#if RT_GNUC_PREREQ(4, 6) +# define RT_GCC_NO_WARN_CONVERSION_BEGIN \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wconversion\"") +/** @def RT_GCC_NO_WARN_CONVERSION_END + * Used to end a block of code where GCC should not warn about implicit + * conversions that may alter a value. */ +# define RT_GCC_NO_WARN_CONVERSION_END \ + _Pragma("GCC diagnostic pop") +#else +# define RT_GCC_NO_WARN_CONVERSION_BEGIN +# define RT_GCC_NO_WARN_CONVERSION_END +#endif + +/** @def RT_COMPILER_GROKS_64BIT_BITFIELDS + * Macro that is defined if the compiler understands 64-bit bitfields. */ +#if !defined(RT_OS_OS2) || (!defined(__IBMC__) && !defined(__IBMCPP__)) +# if !defined(__WATCOMC__) /* watcom compiler doesn't grok it either. */ +# define RT_COMPILER_GROKS_64BIT_BITFIELDS +# endif +#endif + +/** @def RT_COMPILER_WITH_80BIT_LONG_DOUBLE + * Macro that is defined if the compiler implements long double as the + * IEEE extended precision floating. */ +#if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) && !defined(RT_OS_WINDOWS) +# define RT_COMPILER_WITH_80BIT_LONG_DOUBLE +#endif + + +/** @def RT_EXCEPTIONS_ENABLED + * Defined when C++ exceptions are enabled. + */ +#if !defined(RT_EXCEPTIONS_ENABLED) \ + && defined(__cplusplus) \ + && ( (defined(_MSC_VER) && defined(_CPPUNWIND)) \ + || (defined(__GNUC__) && defined(__EXCEPTIONS))) +# define RT_EXCEPTIONS_ENABLED +#endif + +/** @def RT_NO_THROW_PROTO + * How to express that a function doesn't throw C++ exceptions + * and the compiler can thus save itself the bother of trying + * to catch any of them. Put this between the closing parenthesis + * and the semicolon in function prototypes (and implementation if C++). + * + * @remarks May not work on C++ methods, mainly intented for C-style APIs. + * + * @remarks The use of the nothrow attribute with GCC is because old compilers + * (4.1.1, 32-bit) leaking the nothrow into global space or something + * when used with RTDECL or similar. Using this forces use to have two + * macros, as the nothrow attribute is not for the function definition. + */ +#ifdef RT_EXCEPTIONS_ENABLED +# ifdef __GNUC__ +# if RT_GNUC_PREREQ(3, 3) +# define RT_NO_THROW_PROTO __attribute__((__nothrow__)) +# else +# define RT_NO_THROW_PROTO +# endif +# else +# define RT_NO_THROW_PROTO throw() +# endif +#else +# define RT_NO_THROW_PROTO +#endif + +/** @def RT_NO_THROW_DEF + * The counter part to RT_NO_THROW_PROTO that is added to the function + * definition. + */ +#if defined(RT_EXCEPTIONS_ENABLED) && !defined(__GNUC__) +# define RT_NO_THROW_DEF RT_NO_THROW_PROTO +#else +# define RT_NO_THROW_DEF +#endif + +/** @def RT_THROW + * How to express that a method or function throws a type of exceptions. Some + * compilers does not want this kind of information and will warning about it. + * + * @param type The type exception. + * + * @remarks If the actual throwing is done from the header, enclose it by + * \#ifdef RT_EXCEPTIONS_ENABLED ... \#else ... \#endif so the header + * compiles cleanly without exceptions enabled. + * + * Do NOT use this for the actual throwing of exceptions! + */ +#ifdef RT_EXCEPTIONS_ENABLED +# if RT_MSC_PREREQ_EX(RT_MSC_VER_VC71, 0) +# define RT_THROW(type) +# elif RT_GNUC_PREREQ(7, 0) +# define RT_THROW(type) +# else +# define RT_THROW(type) throw(type) +# endif +#else +# define RT_THROW(type) +#endif + + +/** @def RT_FALL_THROUGH + * Tell the compiler that we're falling through to the next case in a switch. + * @sa RT_FALL_THRU */ +#if RT_GNUC_PREREQ(7, 0) +# define RT_FALL_THROUGH() __attribute__((fallthrough)) +#else +# define RT_FALL_THROUGH() (void)0 +#endif +/** @def RT_FALL_THRU + * Tell the compiler that we're falling thru to the next case in a switch. + * @sa RT_FALL_THROUGH */ +#define RT_FALL_THRU() RT_FALL_THROUGH() + + +/** @def RT_IPRT_FORMAT_ATTR + * Identifies a function taking an IPRT format string. + * @param a_iFmt The index (1-based) of the format string argument. + * @param a_iArgs The index (1-based) of the first format argument, use 0 for + * va_list. + */ +#if defined(__GNUC__) && defined(WITH_IPRT_FORMAT_ATTRIBUTE) +# define RT_IPRT_FORMAT_ATTR(a_iFmt, a_iArgs) __attribute__((__iprt_format__(a_iFmt, a_iArgs))) +#else +# define RT_IPRT_FORMAT_ATTR(a_iFmt, a_iArgs) +#endif + +/** @def RT_IPRT_FORMAT_ATTR_MAYBE_NULL + * Identifies a function taking an IPRT format string, NULL is allowed. + * @param a_iFmt The index (1-based) of the format string argument. + * @param a_iArgs The index (1-based) of the first format argument, use 0 for + * va_list. + */ +#if defined(__GNUC__) && defined(WITH_IPRT_FORMAT_ATTRIBUTE) +# define RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a_iFmt, a_iArgs) __attribute__((__iprt_format_maybe_null__(a_iFmt, a_iArgs))) +#else +# define RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a_iFmt, a_iArgs) +#endif + + +/** @def RT_GCC_SUPPORTS_VISIBILITY_HIDDEN + * Indicates that the "hidden" visibility attribute can be used (GCC) */ +#if defined(__GNUC__) +# if __GNUC__ >= 4 && !defined(RT_OS_OS2) && !defined(RT_OS_WINDOWS) +# define RT_GCC_SUPPORTS_VISIBILITY_HIDDEN +# endif +#endif + +/** @def RT_COMPILER_SUPPORTS_VA_ARGS + * If the defined, the compiler supports the variadic macro feature (..., __VA_ARGS__). */ +#if defined(_MSC_VER) +# if _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_COMPILER_SUPPORTS_VA_ARGS +# endif +#elif defined(__GNUC__) +# if __GNUC__ >= 3 /* not entirely sure when this was added */ +# define RT_COMPILER_SUPPORTS_VA_ARGS +# endif +#endif + + + +/** @def RTCALL + * The standard calling convention for the Runtime interfaces. + * + * @remarks The regparm(0) in the X86/GNUC variant deals with -mregparm=x use in + * the linux kernel and potentially elsewhere (3rd party). + */ +#if defined(_MSC_VER) || defined(__WATCOMC__) +# define RTCALL __cdecl +#elif defined(RT_OS_OS2) +# define RTCALL __cdecl +#elif defined(__GNUC__) && defined(RT_ARCH_X86) +# define RTCALL __attribute__((__cdecl__,__regparm__(0))) +#else +# define RTCALL +#endif + +/** @def DECLEXPORT + * How to declare an exported function. + * @param type The return type of the function declaration. + */ +#if defined(_MSC_VER) || defined(RT_OS_OS2) +# define DECLEXPORT(type) __declspec(dllexport) type +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLEXPORT(type) __attribute__((visibility("default"))) type +#else +# define DECLEXPORT(type) type +#endif + +/** @def DECLIMPORT + * How to declare an imported function. + * @param type The return type of the function declaration. + */ +#if defined(_MSC_VER) || (defined(RT_OS_OS2) && !defined(__IBMC__) && !defined(__IBMCPP__)) +# define DECLIMPORT(type) __declspec(dllimport) type +#else +# define DECLIMPORT(type) type +#endif + +/** @def DECLHIDDEN + * How to declare a non-exported function or variable. + * @param type The return type of the function or the data type of the variable. + */ +#if !defined(RT_GCC_SUPPORTS_VISIBILITY_HIDDEN) || defined(RT_NO_VISIBILITY_HIDDEN) +# define DECLHIDDEN(type) type +#else +# define DECLHIDDEN(type) __attribute__((visibility("hidden"))) type +#endif + +/** @def DECL_HIDDEN_CONST + * Workaround for g++ warnings when applying the hidden attribute to a const + * definition. Use DECLHIDDEN for the declaration. + * @param a_Type The return type of the function or the data type of + * the variable. + */ +#if defined(__cplusplus) && defined(__GNUC__) +# define DECL_HIDDEN_CONST(a_Type) a_Type +#else +# define DECL_HIDDEN_CONST(a_Type) DECLHIDDEN(a_Type) +#endif + +/** @def DECL_INVALID + * How to declare a function not available for linking in the current context. + * The purpose is to create compile or like time errors when used. This isn't + * possible on all platforms. + * @param type The return type of the function. + */ +#if defined(_MSC_VER) +# define DECL_INVALID(type) __declspec(dllimport) type __stdcall +#elif defined(__GNUC__) && defined(__cplusplus) +# define DECL_INVALID(type) extern "C++" type +#else +# define DECL_INVALID(type) type +#endif + +/** @def DECLASM + * How to declare an internal assembly function. + * @param type The return type of the function declaration. + */ +#ifdef __cplusplus +# define DECLASM(type) extern "C" type RTCALL +#else +# define DECLASM(type) type RTCALL +#endif + +/** @def DECLASMTYPE + * How to declare an internal assembly function type. + * @param type The return type of the function. + */ +#define DECLASMTYPE(type) type RTCALL + +/** @def DECL_NO_RETURN + * How to declare a function which does not return. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECL_NO_RETURN(void)) foo(void); + * @endcode + */ +#ifdef _MSC_VER +# define DECL_NO_RETURN(type) __declspec(noreturn) type +#elif defined(__GNUC__) +# define DECL_NO_RETURN(type) __attribute__((noreturn)) type +#else +# define DECL_NO_RETURN(type) type +#endif +/** @deprecated Use DECL_NO_RETURN instead. */ +#define DECLNORETURN(type) DECL_NO_RETURN(type) + +/** @def DECL_RETURNS_TWICE + * How to declare a function which may return more than once. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECL_RETURNS_TWICE(void)) MySetJmp(void); + * @endcode + */ +#if RT_GNUC_PREREQ(4, 1) +# define DECL_RETURNS_TWICE(type) __attribute__((returns_twice)) type +# else +# define DECL_RETURNS_TWICE(type) type +#endif + +/** @def DECLWEAK + * How to declare a variable which is not necessarily resolved at + * runtime. + * @note This macro can be combined with other macros, for example + * @code + * EMR3DECL(DECLWEAK(int)) foo; + * @endcode + */ +#if defined(__GNUC__) +# define DECLWEAK(type) type __attribute__((weak)) +#else +# define DECLWEAK(type) type +#endif + +/** @def DECLCALLBACK + * How to declare an call back function type. + * @param type The return type of the function declaration. + */ +#define DECLCALLBACK(type) type RT_FAR_CODE RTCALL + +/** @def DECLCALLBACKPTR + * How to declare an call back function pointer. + * @param type The return type of the function declaration. + * @param name The name of the variable member. + */ +#if defined(__IBMC__) || defined(__IBMCPP__) +# define DECLCALLBACKPTR(type, name) type (* RTCALL name) +#else +# define DECLCALLBACKPTR(type, name) type (RT_FAR_CODE RTCALL * name) +#endif + +/** @def DECLCALLBACKMEMBER + * How to declare an call back function pointer member. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + */ +#if defined(__IBMC__) || defined(__IBMCPP__) +# define DECLCALLBACKMEMBER(type, name) type (* RTCALL name) +#else +# define DECLCALLBACKMEMBER(type, name) type (RT_FAR_CODE RTCALL * name) +#endif + +/** @def DECLR3CALLBACKMEMBER + * How to declare an call back function pointer member - R3 Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RING3 +# define DECLR3CALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLR3CALLBACKMEMBER(type, name, args) RTR3PTR name +#endif + +/** @def DECLRCCALLBACKMEMBER + * How to declare an call back function pointer member - RC Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RC +# define DECLRCCALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLRCCALLBACKMEMBER(type, name, args) RTRCPTR name +#endif + +/** @def DECLR0CALLBACKMEMBER + * How to declare an call back function pointer member - R0 Ptr. + * @param type The return type of the function declaration. + * @param name The name of the struct/union/class member. + * @param args The argument list enclosed in parentheses. + */ +#ifdef IN_RING0 +# define DECLR0CALLBACKMEMBER(type, name, args) DECLCALLBACKMEMBER(type, name) args +#else +# define DECLR0CALLBACKMEMBER(type, name, args) RTR0PTR name +#endif + +/** @def DECLINLINE + * How to declare a function as inline. + * @param type The return type of the function declaration. + * @remarks Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECLINLINE(type) static __inline__ type +#elif defined(__cplusplus) +# define DECLINLINE(type) static inline type +#elif defined(_MSC_VER) +# define DECLINLINE(type) static _inline type +#elif defined(__IBMC__) +# define DECLINLINE(type) _Inline type +#else +# define DECLINLINE(type) inline type +#endif + + +/** @def DECL_FORCE_INLINE + * How to declare a function as inline and try convince the compiler to always + * inline it regardless of optimization switches. + * @param type The return type of the function declaration. + * @remarks Use sparsely and with care. Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECL_FORCE_INLINE(type) __attribute__((__always_inline__)) DECLINLINE(type) +#elif defined(_MSC_VER) +# define DECL_FORCE_INLINE(type) __forceinline type +#else +# define DECL_FORCE_INLINE(type) DECLINLINE(type) +#endif + + +/** @def DECL_NO_INLINE + * How to declare a function telling the compiler not to inline it. + * @param scope The function scope, static or RT_NOTHING. + * @param type The return type of the function declaration. + * @remarks Don't use this macro on C++ methods. + */ +#ifdef __GNUC__ +# define DECL_NO_INLINE(scope,type) __attribute__((__noinline__)) scope type +#elif defined(_MSC_VER) +# define DECL_NO_INLINE(scope,type) __declspec(noinline) scope type +#else +# define DECL_NO_INLINE(scope,type) scope type +#endif + + +/** @def IN_RT_STATIC + * Used to indicate whether we're linking against a static IPRT + * or not. + * + * The IPRT symbols will be declared as hidden (if supported). Note that this + * define has no effect without also setting one of the IN_RT_R0, IN_RT_R3 or + * IN_RT_RC indicators. + */ + +/** @def IN_RT_R0 + * Used to indicate whether we're inside the same link module as the host + * context ring-0 Runtime Library. + */ +/** @def RTR0DECL(type) + * Runtime Library host context ring-0 export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_R0 +# ifdef IN_RT_STATIC +# define RTR0DECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTR0DECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTR0DECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def IN_RT_R3 + * Used to indicate whether we're inside the same link module as the host + * context ring-3 Runtime Library. + */ +/** @def RTR3DECL(type) + * Runtime Library host context ring-3 export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_R3 +# ifdef IN_RT_STATIC +# define RTR3DECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTR3DECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTR3DECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def IN_RT_RC + * Used to indicate whether we're inside the same link module as the raw-mode + * context (RC) runtime library. + */ +/** @def RTRCDECL(type) + * Runtime Library raw-mode context export or import declaration. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#ifdef IN_RT_RC +# ifdef IN_RT_STATIC +# define RTRCDECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTRCDECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTRCDECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def RTDECL(type) + * Runtime Library export or import declaration. + * Functions declared using this macro exists in all contexts. + * @param type The return type of the function declaration. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RTDECL(type) DECLHIDDEN(type) RTCALL +# else +# define RTDECL(type) DECLEXPORT(type) RTCALL +# endif +#else +# define RTDECL(type) DECLIMPORT(type) RTCALL +#endif + +/** @def RTDATADECL(type) + * Runtime Library export or import declaration. + * Data declared using this macro exists in all contexts. + * @param type The data type. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +/** @def RT_DECL_DATA_CONST(type) + * Definition of a const variable. See DECL_HIDDEN_CONST. + * @param type The const data type. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RTDATADECL(type) DECLHIDDEN(type) +# define RT_DECL_DATA_CONST(type) DECL_HIDDEN_CONST(type) +# else +# define RTDATADECL(type) DECLEXPORT(type) +# if defined(__cplusplus) && defined(__GNUC__) +# define RT_DECL_DATA_CONST(type) type +# else +# define RT_DECL_DATA_CONST(type) DECLEXPORT(type) +# endif +# endif +#else +# define RTDATADECL(type) DECLIMPORT(type) +# define RT_DECL_DATA_CONST(type) DECLIMPORT(type) +#endif + +/** @def RT_DECL_CLASS + * Declares an class living in the runtime. + * @remarks This is only used inside IPRT. Other APIs need to define their own + * XXXX_DECL macros for dealing with import/export/static visibility. + */ +#if defined(IN_RT_R3) || defined(IN_RT_RC) || defined(IN_RT_R0) +# ifdef IN_RT_STATIC +# define RT_DECL_CLASS +# else +# define RT_DECL_CLASS DECLEXPORT_CLASS +# endif +#else +# define RT_DECL_CLASS DECLIMPORT_CLASS +#endif + + +/** @def RT_NOCRT + * Symbol name wrapper for the No-CRT bits. + * + * In order to coexist in the same process as other CRTs, we need to + * decorate the symbols such that they don't conflict the ones in the + * other CRTs. The result of such conflicts / duplicate symbols can + * confuse the dynamic loader on Unix like systems. + * + * Define RT_WITHOUT_NOCRT_WRAPPERS to drop the wrapping. + * Define RT_WITHOUT_NOCRT_WRAPPER_ALIASES to drop the aliases to the + * wrapped names. + */ +/** @def RT_NOCRT_STR + * Same as RT_NOCRT only it'll return a double quoted string of the result. + */ +#ifndef RT_WITHOUT_NOCRT_WRAPPERS +# define RT_NOCRT(name) nocrt_ ## name +# define RT_NOCRT_STR(name) "nocrt_" # name +#else +# define RT_NOCRT(name) name +# define RT_NOCRT_STR(name) #name +#endif + + + +/** @def RT_LIKELY + * Give the compiler a hint that an expression is very likely to hold true. + * + * Some compilers support explicit branch prediction so that the CPU backend + * can hint the processor and also so that code blocks can be reordered such + * that the predicted path sees a more linear flow, thus improving cache + * behaviour, etc. + * + * IPRT provides the macros RT_LIKELY() and RT_UNLIKELY() as a way to utilize + * this compiler feature when present. + * + * A few notes about the usage: + * + * - Generally, order your code use RT_LIKELY() instead of RT_UNLIKELY(). + * + * - Generally, use RT_UNLIKELY() with error condition checks (unless you + * have some _strong_ reason to do otherwise, in which case document it), + * and/or RT_LIKELY() with success condition checks, assuming you want + * to optimize for the success path. + * + * - Other than that, if you don't know the likelihood of a test succeeding + * from empirical or other 'hard' evidence, don't make predictions unless + * you happen to be a Dirk Gently character. + * + * - These macros are meant to be used in places that get executed a lot. It + * is wasteful to make predictions in code that is executed rarely (e.g. + * at subsystem initialization time) as the basic block reordering that this + * affects can often generate larger code. + * + * - Note that RT_SUCCESS() and RT_FAILURE() already makes use of RT_LIKELY() + * and RT_UNLIKELY(). Should you wish for prediction free status checks, + * use the RT_SUCCESS_NP() and RT_FAILURE_NP() macros instead. + * + * + * @returns the boolean result of the expression. + * @param expr The expression that's very likely to be true. + * @see RT_UNLIKELY + */ +/** @def RT_UNLIKELY + * Give the compiler a hint that an expression is highly unlikely to hold true. + * + * See the usage instructions give in the RT_LIKELY() docs. + * + * @returns the boolean result of the expression. + * @param expr The expression that's very unlikely to be true. + * @see RT_LIKELY + * + * @deprecated Please use RT_LIKELY() instead wherever possible! That gives us + * a better chance of the windows compilers to generate favorable code + * too. The belief is that the compiler will by default assume the + * if-case is more likely than the else-case. + */ +#if defined(__GNUC__) +# if __GNUC__ >= 3 && !defined(FORTIFY_RUNNING) +# define RT_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define RT_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +# else +# define RT_LIKELY(expr) (expr) +# define RT_UNLIKELY(expr) (expr) +# endif +#else +# define RT_LIKELY(expr) (expr) +# define RT_UNLIKELY(expr) (expr) +#endif + +/** @def RT_EXPAND_2 + * Helper for RT_EXPAND. */ +#define RT_EXPAND_2(a_Expr) a_Expr +/** @def RT_EXPAND + * Returns the expanded expression. + * @param a_Expr The expression to expand. */ +#define RT_EXPAND(a_Expr) RT_EXPAND_2(a_Expr) + +/** @def RT_STR + * Returns the argument as a string constant. + * @param str Argument to stringify. */ +#define RT_STR(str) #str +/** @def RT_XSTR + * Returns the expanded argument as a string. + * @param str Argument to expand and stringify. */ +#define RT_XSTR(str) RT_STR(str) + +/** @def RT_LSTR_2 + * Helper for RT_WSTR that gets the expanded @a str. + * @param str String litteral to prefix with 'L'. */ +#define RT_LSTR_2(str) L##str +/** @def RT_LSTR + * Returns the expanded argument with a L string prefix. + * + * Intended for converting ASCII string \#defines into wide char string + * litterals on Windows. + * + * @param str String litteral to . */ +#define RT_LSTR(str) RT_LSTR_2(str) + +/** @def RT_UNPACK_CALL + * Unpacks the an argument list inside an extra set of parenthesis and turns it + * into a call to @a a_Fn. + * + * @param a_Fn Function/macro to call. + * @param a_Args Parameter list in parenthesis. + */ +#define RT_UNPACK_CALL(a_Fn, a_Args) a_Fn a_Args + +#if defined(RT_COMPILER_SUPPORTS_VA_ARGS) || defined(DOXYGEN_RUNNING) + +/** @def RT_UNPACK_ARGS + * Returns the arguments without parenthesis. + * + * @param ... Parameter list in parenthesis. + * @remarks Requires RT_COMPILER_SUPPORTS_VA_ARGS. + */ +# define RT_UNPACK_ARGS(...) __VA_ARGS__ + +/** @def RT_COUNT_VA_ARGS_HLP + * Helper for RT_COUNT_VA_ARGS that picks out the argument count from + * RT_COUNT_VA_ARGS_REV_SEQ. */ +# define RT_COUNT_VA_ARGS_HLP( \ + c69, c68, c67, c66, c65, c64, c63, c62, c61, c60, \ + c59, c58, c57, c56, c55, c54, c53, c52, c51, c50, \ + c49, c48, c47, c46, c45, c44, c43, c42, c41, c40, \ + c39, c38, c37, c36, c35, c34, c33, c32, c31, c30, \ + c29, c28, c27, c26, c25, c24, c23, c22, c21, c20, \ + c19, c18, c17, c16, c15, c14, c13, c12, c11, c10, \ + c9, c8, c7, c6, c5, c4, c3, c2, c1, cArgs, ...) cArgs +/** Argument count sequence. */ +# define RT_COUNT_VA_ARGS_REV_SEQ \ + 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, \ + 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \ + 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ + 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \ + 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \ + 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \ + 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 +/** This is for zero arguments. At least Visual C++ requires it. */ +# define RT_COUNT_VA_ARGS_PREFIX_RT_NOTHING RT_COUNT_VA_ARGS_REV_SEQ +/** + * Counts the number of arguments given to the variadic macro. + * + * Max is 69. + * + * @returns Number of arguments in the ellipsis + * @param ... Arguments to count. + * @remarks Requires RT_COMPILER_SUPPORTS_VA_ARGS. + */ +# define RT_COUNT_VA_ARGS(...) \ + RT_UNPACK_CALL(RT_COUNT_VA_ARGS_HLP, (RT_COUNT_VA_ARGS_PREFIX_ ## __VA_ARGS__ ## RT_NOTHING, \ + RT_COUNT_VA_ARGS_REV_SEQ)) + +#endif /* RT_COMPILER_SUPPORTS_VA_ARGS */ + + +/** @def RT_CONCAT + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The first part. + * @param b The second part. + */ +#define RT_CONCAT(a,b) RT_CONCAT_HLP(a,b) +/** RT_CONCAT helper, don't use. */ +#define RT_CONCAT_HLP(a,b) a##b + +/** @def RT_CONCAT3 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + */ +#define RT_CONCAT3(a,b,c) RT_CONCAT3_HLP(a,b,c) +/** RT_CONCAT3 helper, don't use. */ +#define RT_CONCAT3_HLP(a,b,c) a##b##c + +/** @def RT_CONCAT4 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + */ +#define RT_CONCAT4(a,b,c,d) RT_CONCAT4_HLP(a,b,c,d) +/** RT_CONCAT4 helper, don't use. */ +#define RT_CONCAT4_HLP(a,b,c,d) a##b##c##d + +/** @def RT_CONCAT5 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + */ +#define RT_CONCAT5(a,b,c,d,e) RT_CONCAT5_HLP(a,b,c,d,e) +/** RT_CONCAT5 helper, don't use. */ +#define RT_CONCAT5_HLP(a,b,c,d,e) a##b##c##d##e + +/** @def RT_CONCAT6 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + */ +#define RT_CONCAT6(a,b,c,d,e,f) RT_CONCAT6_HLP(a,b,c,d,e,f) +/** RT_CONCAT6 helper, don't use. */ +#define RT_CONCAT6_HLP(a,b,c,d,e,f) a##b##c##d##e##f + +/** @def RT_CONCAT7 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + */ +#define RT_CONCAT7(a,b,c,d,e,f,g) RT_CONCAT7_HLP(a,b,c,d,e,f,g) +/** RT_CONCAT7 helper, don't use. */ +#define RT_CONCAT7_HLP(a,b,c,d,e,f,g) a##b##c##d##e##f##g + +/** @def RT_CONCAT8 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + * @param h The 8th part. + */ +#define RT_CONCAT8(a,b,c,d,e,f,g,h) RT_CONCAT8_HLP(a,b,c,d,e,f,g,h) +/** RT_CONCAT8 helper, don't use. */ +#define RT_CONCAT8_HLP(a,b,c,d,e,f,g,h) a##b##c##d##e##f##g##h + +/** @def RT_CONCAT9 + * Concatenate the expanded arguments without any extra spaces in between. + * + * @param a The 1st part. + * @param b The 2nd part. + * @param c The 3rd part. + * @param d The 4th part. + * @param e The 5th part. + * @param f The 6th part. + * @param g The 7th part. + * @param h The 8th part. + * @param i The 9th part. + */ +#define RT_CONCAT9(a,b,c,d,e,f,g,h,i) RT_CONCAT9_HLP(a,b,c,d,e,f,g,h,i) +/** RT_CONCAT9 helper, don't use. */ +#define RT_CONCAT9_HLP(a,b,c,d,e,f,g,h,i) a##b##c##d##e##f##g##h##i + +/** + * String constant tuple - string constant, strlen(string constant). + * + * @param a_szConst String constant. + * @sa RTSTRTUPLE + */ +#define RT_STR_TUPLE(a_szConst) a_szConst, (sizeof(a_szConst) - 1) + + +/** + * Macro for using in switch statements that turns constants into strings. + * + * @param a_Const The constant (not string). + */ +#define RT_CASE_RET_STR(a_Const) case a_Const: return #a_Const + + +/** @def RT_BIT + * Convert a bit number into an integer bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT(bit) ( 1U << (bit) ) + +/** @def RT_BIT_32 + * Convert a bit number into a 32-bit bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT_32(bit) ( UINT32_C(1) << (bit) ) + +/** @def RT_BIT_64 + * Convert a bit number into a 64-bit bitmask (unsigned). + * @param bit The bit number. + */ +#define RT_BIT_64(bit) ( UINT64_C(1) << (bit) ) + + +/** @def RT_BF_GET + * Gets the value of a bit field in an integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. + * + * @returns The bit field value. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_CLEAR, #RT_BF_SET, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_GET(a_uValue, a_FieldNm) ( ((a_uValue) >> RT_CONCAT(a_FieldNm,_SHIFT)) & RT_BF_ZMASK(a_FieldNm) ) + +/** @def RT_BF_SET + * Sets the given bit field in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. Must have the same type as the + * integer value!! + * + * @returns Integer value with bit field set to @a a_uFieldValue. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @param a_uFieldValue The new field value. + * @sa #RT_BF_GET, #RT_BF_CLEAR, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_SET(a_uValue, a_FieldNm, a_uFieldValue) ( RT_BF_CLEAR(a_uValue, a_FieldNm) | RT_BF_MAKE(a_FieldNm, a_uFieldValue) ) + +/** @def RT_BF_CLEAR + * Clears the given bit field in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. Must have the same type as the + * integer value!! + * + * @returns Integer value with bit field set to zero. + * @param a_uValue The integer value containing the field. + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_MAKE, #RT_BF_ZMASK + */ +#define RT_BF_CLEAR(a_uValue, a_FieldNm) ( (a_uValue) & ~RT_CONCAT(a_FieldNm,_MASK) ) + +/** @def RT_BF_MAKE + * Shifts and masks a bit field value into position in the integer value. + * + * This requires a couple of macros to be defined for the field: + * - \_SHIFT: The shift count to get to the field. + * - \_MASK: The field mask. + * + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @param a_uFieldValue The field value that should be masked and shifted + * into position. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_CLEAR, #RT_BF_ZMASK + */ +#define RT_BF_MAKE(a_FieldNm, a_uFieldValue) ( ((a_uFieldValue) & RT_BF_ZMASK(a_FieldNm) ) << RT_CONCAT(a_FieldNm,_SHIFT) ) + +/** @def RT_BF_ZMASK + * Helper for getting the field mask shifted to bit position zero. + * + * @param a_FieldNm The field name prefix for getting at the _SHIFT and + * _MASK macros. + * @sa #RT_BF_GET, #RT_BF_SET, #RT_BF_CLEAR, #RT_BF_MAKE + */ +#define RT_BF_ZMASK(a_FieldNm) ( RT_CONCAT(a_FieldNm,_MASK) >> RT_CONCAT(a_FieldNm,_SHIFT) ) + +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_XOR_MASK(a_uLeft, a_RightPrefix, a_FieldNm) ((a_uLeft) ^ RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_OR_MASK(a_uLeft, a_RightPrefix, a_FieldNm) ((a_uLeft) | RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) +/** Bit field compile time check helper + * @internal */ +#define RT_BF_CHECK_DO_1ST_MASK_BIT(a_uLeft, a_RightPrefix, a_FieldNm) \ + ((a_uLeft) && ( (RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK) >> RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) & 1U ) ) +/** Used to check that a bit field mask does not start too early. + * @internal */ +#define RT_BF_CHECK_DO_MASK_START(a_uLeft, a_RightPrefix, a_FieldNm) \ + ( (a_uLeft) \ + && ( RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT) == 0 \ + || ( ( ( ((RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK) >> RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) & 1U) \ + << RT_CONCAT3(a_RightPrefix, a_FieldNm, _SHIFT)) /* => single bit mask, correct type */ \ + - 1U) /* => mask of all bits below the field */ \ + & RT_CONCAT3(a_RightPrefix, a_FieldNm, _MASK)) == 0 ) ) +/** @name Bit field compile time check recursion workers. + * @internal + * @{ */ +#define RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix, f1) \ + a_DoThis(a_uLeft, a_RightPrefix, f1) +#define RT_BF_CHECK_DO_2(a_DoThis, a_uLeft, a_RightPrefix, f1, f2) \ + RT_BF_CHECK_DO_1(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2) +#define RT_BF_CHECK_DO_3(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3) \ + RT_BF_CHECK_DO_2(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3) +#define RT_BF_CHECK_DO_4(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4) \ + RT_BF_CHECK_DO_3(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4) +#define RT_BF_CHECK_DO_5(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5) \ + RT_BF_CHECK_DO_4(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5) +#define RT_BF_CHECK_DO_6(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6) \ + RT_BF_CHECK_DO_5(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6) +#define RT_BF_CHECK_DO_7(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7) \ + RT_BF_CHECK_DO_6(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7) +#define RT_BF_CHECK_DO_8(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8) \ + RT_BF_CHECK_DO_7(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8) +#define RT_BF_CHECK_DO_9(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9) \ + RT_BF_CHECK_DO_8(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9) +#define RT_BF_CHECK_DO_10(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10) \ + RT_BF_CHECK_DO_9(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10) +#define RT_BF_CHECK_DO_11(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) \ + RT_BF_CHECK_DO_10(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) +#define RT_BF_CHECK_DO_12(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) \ + RT_BF_CHECK_DO_11(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) +#define RT_BF_CHECK_DO_13(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13) \ + RT_BF_CHECK_DO_12(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13) +#define RT_BF_CHECK_DO_14(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \ + RT_BF_CHECK_DO_13(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) +#define RT_BF_CHECK_DO_15(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15) \ + RT_BF_CHECK_DO_14(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15) +#define RT_BF_CHECK_DO_16(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) \ + RT_BF_CHECK_DO_15(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) +#define RT_BF_CHECK_DO_17(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) \ + RT_BF_CHECK_DO_16(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) +#define RT_BF_CHECK_DO_18(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18) \ + RT_BF_CHECK_DO_17(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18) +#define RT_BF_CHECK_DO_19(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) \ + RT_BF_CHECK_DO_18(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19) +#define RT_BF_CHECK_DO_20(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20) \ + RT_BF_CHECK_DO_19(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20) +#define RT_BF_CHECK_DO_21(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21) \ + RT_BF_CHECK_DO_20(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21) +#define RT_BF_CHECK_DO_22(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22) \ + RT_BF_CHECK_DO_21(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22) +#define RT_BF_CHECK_DO_23(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23) \ + RT_BF_CHECK_DO_22(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23) +#define RT_BF_CHECK_DO_24(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24) \ + RT_BF_CHECK_DO_23(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24) +#define RT_BF_CHECK_DO_25(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25) \ + RT_BF_CHECK_DO_24(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25) +#define RT_BF_CHECK_DO_26(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26) \ + RT_BF_CHECK_DO_25(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26) +#define RT_BF_CHECK_DO_27(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27) \ + RT_BF_CHECK_DO_26(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27) +#define RT_BF_CHECK_DO_28(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28) \ + RT_BF_CHECK_DO_27(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28) +#define RT_BF_CHECK_DO_29(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29) \ + RT_BF_CHECK_DO_28(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29) +#define RT_BF_CHECK_DO_30(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30) \ + RT_BF_CHECK_DO_29(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30) +#define RT_BF_CHECK_DO_31(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31) \ + RT_BF_CHECK_DO_30(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31) +#define RT_BF_CHECK_DO_32(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32) \ + RT_BF_CHECK_DO_31(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32) +#define RT_BF_CHECK_DO_33(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33) \ + RT_BF_CHECK_DO_32(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33) +#define RT_BF_CHECK_DO_34(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34) \ + RT_BF_CHECK_DO_33(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34) +#define RT_BF_CHECK_DO_35(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35) \ + RT_BF_CHECK_DO_34(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35) +#define RT_BF_CHECK_DO_36(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36) \ + RT_BF_CHECK_DO_35(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36) +#define RT_BF_CHECK_DO_37(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37) \ + RT_BF_CHECK_DO_36(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37) +#define RT_BF_CHECK_DO_38(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38) \ + RT_BF_CHECK_DO_37(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38) +#define RT_BF_CHECK_DO_39(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39) \ + RT_BF_CHECK_DO_38(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39) +#define RT_BF_CHECK_DO_40(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40) \ + RT_BF_CHECK_DO_39(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40) +#define RT_BF_CHECK_DO_41(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41) \ + RT_BF_CHECK_DO_40(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41) +#define RT_BF_CHECK_DO_42(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42) \ + RT_BF_CHECK_DO_41(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42) +#define RT_BF_CHECK_DO_43(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43) \ + RT_BF_CHECK_DO_42(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43) +#define RT_BF_CHECK_DO_44(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44) \ + RT_BF_CHECK_DO_43(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44) +#define RT_BF_CHECK_DO_45(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45) \ + RT_BF_CHECK_DO_44(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45) +#define RT_BF_CHECK_DO_46(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46) \ + RT_BF_CHECK_DO_45(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46) +#define RT_BF_CHECK_DO_47(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47) \ + RT_BF_CHECK_DO_46(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47) +#define RT_BF_CHECK_DO_48(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48) \ + RT_BF_CHECK_DO_47(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48) +#define RT_BF_CHECK_DO_49(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49) \ + RT_BF_CHECK_DO_48(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49) +#define RT_BF_CHECK_DO_50(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50) \ + RT_BF_CHECK_DO_49(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50) +#define RT_BF_CHECK_DO_51(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51) \ + RT_BF_CHECK_DO_40(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51) +#define RT_BF_CHECK_DO_52(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52) \ + RT_BF_CHECK_DO_51(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52) +#define RT_BF_CHECK_DO_53(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53) \ + RT_BF_CHECK_DO_52(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53) +#define RT_BF_CHECK_DO_54(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54) \ + RT_BF_CHECK_DO_53(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54) +#define RT_BF_CHECK_DO_55(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55) \ + RT_BF_CHECK_DO_54(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55) +#define RT_BF_CHECK_DO_56(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56) \ + RT_BF_CHECK_DO_55(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56) +#define RT_BF_CHECK_DO_57(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57) \ + RT_BF_CHECK_DO_56(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57) +#define RT_BF_CHECK_DO_58(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58) \ + RT_BF_CHECK_DO_57(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58) +#define RT_BF_CHECK_DO_59(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59) \ + RT_BF_CHECK_DO_58(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59) +#define RT_BF_CHECK_DO_60(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60) \ + RT_BF_CHECK_DO_59(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60) +#define RT_BF_CHECK_DO_61(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61) \ + RT_BF_CHECK_DO_60(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61) +#define RT_BF_CHECK_DO_62(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62) \ + RT_BF_CHECK_DO_61(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62) +#define RT_BF_CHECK_DO_63(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63) \ + RT_BF_CHECK_DO_62(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63) +#define RT_BF_CHECK_DO_64(a_DoThis, a_uLeft, a_RightPrefix, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63, f64) \ + RT_BF_CHECK_DO_63(a_DoThis, RT_BF_CHECK_DO_1(a_DoThis, a_uLeft, a_RightPrefix,f1), a_RightPrefix, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, f40, f41, f42, f43, f44, f45, f46, f47, f48, f49, f50, f51, f52, f53, f54, f55, f56, f57, f58, f59, f60, f61, f62, f63, f64) +/** @} */ + +/** @def RT_BF_ASSERT_COMPILE_CHECKS + * Emits a series of AssertCompile statements checking that the bit-field + * declarations doesn't overlap, has holes, and generally makes some sense. + * + * This requires variadic macros because its too much to type otherwise. + */ +#if defined(RT_COMPILER_SUPPORTS_VA_ARGS) || defined(DOXYGEN_RUNNING) +# define RT_BF_ASSERT_COMPILE_CHECKS(a_Prefix, a_uZero, a_uCovered, a_Fields) \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_OR_MASK, a_uZero, a_Prefix, RT_UNPACK_ARGS a_Fields ) == a_uCovered); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_XOR_MASK, a_uCovered, a_Prefix, RT_UNPACK_ARGS a_Fields ) == 0); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_1ST_MASK_BIT, true, a_Prefix, RT_UNPACK_ARGS a_Fields ) == true); \ + AssertCompile(RT_BF_CHECK_DO_N(RT_BF_CHECK_DO_MASK_START, true, a_Prefix, RT_UNPACK_ARGS a_Fields ) == true) +/** Bit field compile time check helper + * @internal */ +# define RT_BF_CHECK_DO_N(a_DoThis, a_uLeft, a_RightPrefix, ...) \ + RT_UNPACK_CALL(RT_CONCAT(RT_BF_CHECK_DO_, RT_EXPAND(RT_COUNT_VA_ARGS(__VA_ARGS__))), (a_DoThis, a_uLeft, a_RightPrefix, __VA_ARGS__)) +#else +# define RT_BF_ASSERT_COMPILE_CHECKS(a_Prefix, a_uZero, a_uCovered, a_Fields) AssertCompile(true) +#endif + + +/** @def RT_ALIGN + * Align macro. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * + * @remark Be extremely careful when using this macro with type which sizeof != sizeof int. + * When possible use any of the other RT_ALIGN_* macros. And when that's not + * possible, make 101% sure that uAlignment is specified with a right sized type. + * + * Specifying an unsigned 32-bit alignment constant with a 64-bit value will give + * you a 32-bit return value! + * + * In short: Don't use this macro. Use RT_ALIGN_T() instead. + */ +#define RT_ALIGN(u, uAlignment) ( ((u) + ((uAlignment) - 1)) & ~((uAlignment) - 1) ) + +/** @def RT_ALIGN_T + * Align macro. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param type Integer type to use while aligning. + * @remark This macro is the preferred alignment macro, it doesn't have any of the pitfalls RT_ALIGN has. + */ +#define RT_ALIGN_T(u, uAlignment, type) ( ((type)(u) + ((uAlignment) - 1)) & ~(type)((uAlignment) - 1) ) + +/** @def RT_ALIGN_32 + * Align macro for a 32-bit value. + * @param u32 Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_32(u32, uAlignment) RT_ALIGN_T(u32, uAlignment, uint32_t) + +/** @def RT_ALIGN_64 + * Align macro for a 64-bit value. + * @param u64 Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_64(u64, uAlignment) RT_ALIGN_T(u64, uAlignment, uint64_t) + +/** @def RT_ALIGN_Z + * Align macro for size_t. + * @param cb Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_Z(cb, uAlignment) RT_ALIGN_T(cb, uAlignment, size_t) + +/** @def RT_ALIGN_P + * Align macro for pointers. + * @param pv Value to align. + * @param uAlignment The alignment. Power of two! + */ +#define RT_ALIGN_P(pv, uAlignment) RT_ALIGN_PT(pv, uAlignment, void *) + +/** @def RT_ALIGN_PT + * Align macro for pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, uintptr_t) ) + +/** @def RT_ALIGN_R3PT + * Align macro for ring-3 pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_R3PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTR3UINTPTR) ) + +/** @def RT_ALIGN_R0PT + * Align macro for ring-0 pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_R0PT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTR0UINTPTR) ) + +/** @def RT_ALIGN_GCPT + * Align macro for GC pointers with type cast. + * @param u Value to align. + * @param uAlignment The alignment. Power of two! + * @param CastType The type to cast the result to. + */ +#define RT_ALIGN_GCPT(u, uAlignment, CastType) ( (CastType)RT_ALIGN_T(u, uAlignment, RTGCUINTPTR) ) + + +/** @def RT_OFFSETOF + * Our own special offsetof() variant, returns a signed result. + * + * This differs from the usual offsetof() in that it's not relying on builtin + * compiler stuff and thus can use variables in arrays the structure may + * contain. This is useful to determine the sizes of structures ending + * with a variable length field. For gcc >= 4.4 see @bugref{7775}. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + */ +#if defined(__cplusplus) && RT_GNUC_PREREQ(4, 4) +# define RT_OFFSETOF(type, member) ( (int)(uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 ) +#else +# define RT_OFFSETOF(type, member) ( (int)(uintptr_t)&( ((type *)(void *)0)->member) ) +#endif + +/** @def RT_UOFFSETOF + * Our own special offsetof() variant, returns an unsigned result. + * + * This differs from the usual offsetof() in that it's not relying on builtin + * compiler stuff and thus can use variables in arrays the structure may + * contain. This is useful to determine the sizes of structures ending + * with a variable length field. For gcc >= 4.4 see @bugref{7775}. + * + * @returns offset into the structure of the specified member. unsigned. + * @param type Structure type. + * @param member Member. + */ +#if defined(__cplusplus) && RT_GNUC_PREREQ(4, 4) +# define RT_UOFFSETOF(type, member) ( (uintptr_t)&( ((type *)(void *)0x1000)->member) - 0x1000 ) +#else +# define RT_UOFFSETOF(type, member) ( (uintptr_t)&( ((type *)(void *)0)->member) ) +#endif + +/** @def RT_OFFSETOF_ADD + * RT_OFFSETOF with an addend. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + * @param addend The addend to add to the offset. + */ +#define RT_OFFSETOF_ADD(type, member, addend) ( (int)RT_UOFFSETOF_ADD(type, member, addend) ) + +/** @def RT_UOFFSETOF_ADD + * RT_UOFFSETOF with an addend. + * + * @returns offset into the structure of the specified member. signed. + * @param type Structure type. + * @param member Member. + * @param addend The addend to add to the offset. + */ +#define RT_UOFFSETOF_ADD(type, member, addend) ( (uintptr_t)&( ((type *)(void *)(uintptr_t)(addend))->member) ) + +/** @def RT_SIZEOFMEMB + * Get the size of a structure member. + * + * @returns size of the structure member. + * @param type Structure type. + * @param member Member. + */ +#define RT_SIZEOFMEMB(type, member) ( sizeof(((type *)(void *)0)->member) ) + +/** @def RT_UOFFSET_AFTER + * Returns the offset of the first byte following a structure/union member. + * + * @return byte offset into the struct. + * @param a_Type Structure type. + * @param a_Member The member name. + */ +#define RT_UOFFSET_AFTER(a_Type, a_Member) ( RT_UOFFSETOF(a_Type, a_Member) + RT_SIZEOFMEMB(a_Type, a_Member) ) + +/** @def RT_FROM_MEMBER + * Convert a pointer to a structure member into a pointer to the structure. + * + * @returns pointer to the structure. + * @param pMem Pointer to the member. + * @param Type Structure type. + * @param Member Member name. + */ +#define RT_FROM_MEMBER(pMem, Type, Member) ( (Type *) ((uint8_t *)(void *)(pMem) - RT_UOFFSETOF(Type, Member)) ) + +/** @def RT_FROM_CPP_MEMBER + * Same as RT_FROM_MEMBER except it avoids the annoying g++ warnings about + * invalid access to non-static data member of NULL object. + * + * @returns pointer to the structure. + * @param pMem Pointer to the member. + * @param Type Structure type. + * @param Member Member name. + * + * @remarks Using the __builtin_offsetof does not shut up the compiler. + */ +#if defined(__GNUC__) && defined(__cplusplus) +# define RT_FROM_CPP_MEMBER(pMem, Type, Member) \ + ( (Type *) ((uintptr_t)(pMem) - (uintptr_t)&((Type *)0x1000)->Member + 0x1000U) ) +#else +# define RT_FROM_CPP_MEMBER(pMem, Type, Member) RT_FROM_MEMBER(pMem, Type, Member) +#endif + +/** @def RT_ELEMENTS + * Calculates the number of elements in a statically sized array. + * @returns Element count. + * @param aArray Array in question. + */ +#define RT_ELEMENTS(aArray) ( sizeof(aArray) / sizeof((aArray)[0]) ) + +/** @def RT_FLEXIBLE_ARRAY + * What to up inside the square brackets when declaring a structure member + * with a flexible size. + * + * @note Use RT_UOFFSETOF() to calculate the structure size. + * + * @note Never to a sizeof() on the structure or member! + * + * @note The member must be the last one. + * + * @note GCC does not permit using this in a union. So, for unions you must + * use RT_FLEXIBLE_ARRAY_IN_UNION instead. + * + * @note GCC does not permit using this in nested structures, where as MSC + * does. So, use RT_FLEXIBLE_ARRAY_NESTED for that. + * + * @sa RT_FLEXIBLE_ARRAY_NESTED, RT_FLEXIBLE_ARRAY_IN_UNION + */ +#if RT_MSC_PREREQ(RT_MSC_VER_VS2005) /** @todo Probably much much earlier. */ \ + || (defined(__cplusplus) && RT_GNUC_PREREQ(6, 1) && !RT_GNUC_PREREQ(7, 0)) /* gcc-7 warns again */\ + || defined(__WATCOMC__) /* openwatcom 1.9 supports it, we don't care about older atm. */ \ + || RT_CLANG_PREREQ_EX(3, 4, 0) /* Only tested clang v3.4, support is probably older. */ +# define RT_FLEXIBLE_ARRAY +# if defined(__cplusplus) && defined(_MSC_VER) +# pragma warning(disable:4200) /* -wd4200 does not work with VS2010 */ +# endif +#elif defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 1999901L +# define RT_FLEXIBLE_ARRAY +# else +# define RT_FLEXIBLE_ARRAY 1 +# endif +#else +# define RT_FLEXIBLE_ARRAY 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_NESTED + * Variant of RT_FLEXIBLE_ARRAY for use in structures that are nested. + * + * GCC only allow the use of flexible array member in the top structure, whereas + * MSC is less strict and let you do struct { struct { char szName[]; } s; }; + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @note GCC does not permit using this in a union. So, for unions you must + * use RT_FLEXIBLE_ARRAY_IN_NESTED_UNION instead. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_NESTED RT_FLEXIBLE_ARRAY +#else +# define RT_FLEXIBLE_ARRAY_NESTED 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_IN_UNION + * The union version of RT_FLEXIBLE_ARRAY. + * + * @remarks GCC does not support flexible array members in unions, 6.1.x + * actively checks for this. Visual C++ 2010 seems happy with it. + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_IN_UNION RT_FLEXIBLE_ARRAY +#else +# define RT_FLEXIBLE_ARRAY_IN_UNION 1 +#endif + +/** @def RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + * The union version of RT_FLEXIBLE_ARRAY_NESTED. + * + * @note See notes for RT_FLEXIBLE_ARRAY. + * + * @sa RT_FLEXIBLE_ARRAY, RT_FLEXIBLE_ARRAY_IN_NESTED_UNION + */ +#ifdef _MSC_VER +# define RT_FLEXIBLE_ARRAY_IN_NESTED_UNION RT_FLEXIBLE_ARRAY_NESTED +#else +# define RT_FLEXIBLE_ARRAY_IN_NESTED_UNION 1 +#endif + +/** @def RT_UNION_NM + * For compilers (like DTrace) that does not grok nameless unions, we have a + * little hack to make them palatable. + */ +/** @def RT_STRUCT_NM + * For compilers (like DTrace) that does not grok nameless structs (it is + * non-standard C++), we have a little hack to make them palatable. + */ +#ifdef IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS +# define RT_UNION_NM(a_Nm) a_Nm +# define RT_STRUCT_NM(a_Nm) a_Nm +#else +# define RT_UNION_NM(a_Nm) +# define RT_STRUCT_NM(a_Nm) +#endif + +/** + * Checks if the value is a power of two. + * + * @returns true if power of two, false if not. + * @param uVal The value to test. + * @remarks 0 is a power of two. + * @see VERR_NOT_POWER_OF_TWO + */ +#define RT_IS_POWER_OF_TWO(uVal) ( ((uVal) & ((uVal) - 1)) == 0) + +#ifdef RT_OS_OS2 +/* Undefine RT_MAX since there is an unfortunate clash with the max + resource type define in os2.h. */ +# undef RT_MAX +#endif + +/** @def RT_MAX + * Finds the maximum value. + * @returns The higher of the two. + * @param Value1 Value 1 + * @param Value2 Value 2 + */ +#define RT_MAX(Value1, Value2) ( (Value1) >= (Value2) ? (Value1) : (Value2) ) + +/** @def RT_MIN + * Finds the minimum value. + * @returns The lower of the two. + * @param Value1 Value 1 + * @param Value2 Value 2 + */ +#define RT_MIN(Value1, Value2) ( (Value1) <= (Value2) ? (Value1) : (Value2) ) + +/** @def RT_CLAMP + * Clamps the value to minimum and maximum values. + * @returns The clamped value. + * @param Value The value to check. + * @param Min Minimum value. + * @param Max Maximum value. + */ +#define RT_CLAMP(Value, Min, Max) ( (Value) > (Max) ? (Max) : (Value) < (Min) ? (Min) : (Value) ) + +/** @def RT_ABS + * Get the absolute (non-negative) value. + * @returns The absolute value of Value. + * @param Value The value. + */ +#define RT_ABS(Value) ( (Value) >= 0 ? (Value) : -(Value) ) + +/** @def RT_BOOL + * Turn non-zero/zero into true/false + * @returns The resulting boolean value. + * @param Value The value. + */ +#define RT_BOOL(Value) ( !!(Value) ) + +/** @def RT_LO_U8 + * Gets the low uint8_t of a uint16_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U8(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint16_t)); (uint8_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U8(a) ( (uint8_t)(UINT8_MAX & (a)) ) +#else +# define RT_LO_U8(a) ( (uint8_t)(a) ) +#endif +/** @def RT_HI_U8 + * Gets the high uint8_t of a uint16_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U8(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint16_t)); (uint8_t)((a) >> 8); }) +#else +# define RT_HI_U8(a) ( (uint8_t)((a) >> 8) ) +#endif + +/** @def RT_LO_U16 + * Gets the low uint16_t of a uint32_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U16(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint32_t)); (uint16_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U16(a) ( (uint16_t)(UINT16_MAX & (a)) ) +#else +# define RT_LO_U16(a) ( (uint16_t)(a) ) +#endif +/** @def RT_HI_U16 + * Gets the high uint16_t of a uint32_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U16(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint32_t)); (uint16_t)((a) >> 16); }) +#else +# define RT_HI_U16(a) ( (uint16_t)((a) >> 16) ) +#endif + +/** @def RT_LO_U32 + * Gets the low uint32_t of a uint64_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_LO_U32(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint64_t)); (uint32_t)(a); }) +#elif defined(_MSC_VER) /* shut up cast truncates constant value warnings */ +# define RT_LO_U32(a) ( (uint32_t)(UINT32_MAX & (a)) ) +#else +# define RT_LO_U32(a) ( (uint32_t)(a) ) +#endif +/** @def RT_HI_U32 + * Gets the high uint32_t of a uint64_t or something equivalent. */ +#ifdef __GNUC__ +# define RT_HI_U32(a) __extension__ ({ AssertCompile(sizeof((a)) == sizeof(uint64_t)); (uint32_t)((a) >> 32); }) +#else +# define RT_HI_U32(a) ( (uint32_t)((a) >> 32) ) +#endif + +/** @def RT_BYTE1 + * Gets the first byte of something. */ +#define RT_BYTE1(a) ( (a) & 0xff ) +/** @def RT_BYTE2 + * Gets the second byte of something. */ +#define RT_BYTE2(a) ( ((a) >> 8) & 0xff ) +/** @def RT_BYTE3 + * Gets the second byte of something. */ +#define RT_BYTE3(a) ( ((a) >> 16) & 0xff ) +/** @def RT_BYTE4 + * Gets the fourth byte of something. */ +#define RT_BYTE4(a) ( ((a) >> 24) & 0xff ) +/** @def RT_BYTE5 + * Gets the fifth byte of something. */ +#define RT_BYTE5(a) ( ((a) >> 32) & 0xff ) +/** @def RT_BYTE6 + * Gets the sixth byte of something. */ +#define RT_BYTE6(a) ( ((a) >> 40) & 0xff ) +/** @def RT_BYTE7 + * Gets the seventh byte of something. */ +#define RT_BYTE7(a) ( ((a) >> 48) & 0xff ) +/** @def RT_BYTE8 + * Gets the eight byte of something. */ +#define RT_BYTE8(a) ( ((a) >> 56) & 0xff ) + + +/** @def RT_LODWORD + * Gets the low dword (=uint32_t) of something. + * @deprecated Use RT_LO_U32. */ +#define RT_LODWORD(a) ( (uint32_t)(a) ) +/** @def RT_HIDWORD + * Gets the high dword (=uint32_t) of a 64-bit of something. + * @deprecated Use RT_HI_U32. */ +#define RT_HIDWORD(a) ( (uint32_t)((a) >> 32) ) + +/** @def RT_LOWORD + * Gets the low word (=uint16_t) of something. + * @deprecated Use RT_LO_U16. */ +#define RT_LOWORD(a) ( (a) & 0xffff ) +/** @def RT_HIWORD + * Gets the high word (=uint16_t) of a 32-bit something. + * @deprecated Use RT_HI_U16. */ +#define RT_HIWORD(a) ( (a) >> 16 ) + +/** @def RT_LOBYTE + * Gets the low byte of something. + * @deprecated Use RT_LO_U8. */ +#define RT_LOBYTE(a) ( (a) & 0xff ) +/** @def RT_HIBYTE + * Gets the high byte of a 16-bit something. + * @deprecated Use RT_HI_U8. */ +#define RT_HIBYTE(a) ( (a) >> 8 ) + + +/** @def RT_MAKE_U64 + * Constructs a uint64_t value from two uint32_t values. + */ +#define RT_MAKE_U64(Lo, Hi) ( (uint64_t)((uint32_t)(Hi)) << 32 | (uint32_t)(Lo) ) + +/** @def RT_MAKE_U64_FROM_U16 + * Constructs a uint64_t value from four uint16_t values. + */ +#define RT_MAKE_U64_FROM_U16(w0, w1, w2, w3) \ + ((uint64_t)( (uint64_t)((uint16_t)(w3)) << 48 \ + | (uint64_t)((uint16_t)(w2)) << 32 \ + | (uint32_t)((uint16_t)(w1)) << 16 \ + | (uint16_t)(w0) )) + +/** @def RT_MAKE_U64_FROM_U8 + * Constructs a uint64_t value from eight uint8_t values. + */ +#define RT_MAKE_U64_FROM_U8(b0, b1, b2, b3, b4, b5, b6, b7) \ + ((uint64_t)( (uint64_t)((uint8_t)(b7)) << 56 \ + | (uint64_t)((uint8_t)(b6)) << 48 \ + | (uint64_t)((uint8_t)(b5)) << 40 \ + | (uint64_t)((uint8_t)(b4)) << 32 \ + | (uint32_t)((uint8_t)(b3)) << 24 \ + | (uint32_t)((uint8_t)(b2)) << 16 \ + | (uint16_t)((uint8_t)(b1)) << 8 \ + | (uint8_t)(b0) )) + +/** @def RT_MAKE_U32 + * Constructs a uint32_t value from two uint16_t values. + */ +#define RT_MAKE_U32(Lo, Hi) \ + ((uint32_t)( (uint32_t)((uint16_t)(Hi)) << 16 \ + | (uint16_t)(Lo) )) + +/** @def RT_MAKE_U32_FROM_U8 + * Constructs a uint32_t value from four uint8_t values. + */ +#define RT_MAKE_U32_FROM_U8(b0, b1, b2, b3) \ + ((uint32_t)( (uint32_t)((uint8_t)(b3)) << 24 \ + | (uint32_t)((uint8_t)(b2)) << 16 \ + | (uint16_t)((uint8_t)(b1)) << 8 \ + | (uint8_t)(b0) )) + +/** @def RT_MAKE_U16 + * Constructs a uint16_t value from two uint8_t values. + */ +#define RT_MAKE_U16(Lo, Hi) \ + ((uint16_t)( (uint16_t)((uint8_t)(Hi)) << 8 \ + | (uint8_t)(Lo) )) + + +/** @def RT_BSWAP_U64 + * Reverses the byte order of an uint64_t value. */ +#if 0 +# define RT_BSWAP_U64(u64) RT_BSWAP_U64_C(u64) +#elif defined(__GNUC__) +# define RT_BSWAP_U64(u64) (__builtin_constant_p((u64)) \ + ? RT_BSWAP_U64_C(u64) : ASMByteSwapU64(u64)) +#else +# define RT_BSWAP_U64(u64) ASMByteSwapU64(u64) +#endif + +/** @def RT_BSWAP_U32 + * Reverses the byte order of an uint32_t value. */ +#if 0 +# define RT_BSWAP_U32(u32) RT_BSWAP_U32_C(u32) +#elif defined(__GNUC__) +# define RT_BSWAP_U32(u32) (__builtin_constant_p((u32)) \ + ? RT_BSWAP_U32_C(u32) : ASMByteSwapU32(u32)) +#else +# define RT_BSWAP_U32(u32) ASMByteSwapU32(u32) +#endif + +/** @def RT_BSWAP_U16 + * Reverses the byte order of an uint16_t value. */ +#if 0 +# define RT_BSWAP_U16(u16) RT_BSWAP_U16_C(u16) +#elif defined(__GNUC__) +# define RT_BSWAP_U16(u16) (__builtin_constant_p((u16)) \ + ? RT_BSWAP_U16_C(u16) : ASMByteSwapU16(u16)) +#else +# define RT_BSWAP_U16(u16) ASMByteSwapU16(u16) +#endif + + +/** @def RT_BSWAP_U64_C + * Reverses the byte order of an uint64_t constant. */ +#define RT_BSWAP_U64_C(u64) RT_MAKE_U64(RT_BSWAP_U32_C((u64) >> 32), RT_BSWAP_U32_C((u64) & 0xffffffff)) + +/** @def RT_BSWAP_U32_C + * Reverses the byte order of an uint32_t constant. */ +#define RT_BSWAP_U32_C(u32) RT_MAKE_U32_FROM_U8(RT_BYTE4(u32), RT_BYTE3(u32), RT_BYTE2(u32), RT_BYTE1(u32)) + +/** @def RT_BSWAP_U16_C + * Reverses the byte order of an uint16_t constant. */ +#define RT_BSWAP_U16_C(u16) RT_MAKE_U16(RT_HIBYTE(u16), RT_LOBYTE(u16)) + + +/** @def RT_H2LE_U64 + * Converts an uint64_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U64(u64) RT_BSWAP_U64(u64) +#else +# define RT_H2LE_U64(u64) (u64) +#endif + +/** @def RT_H2LE_U64_C + * Converts an uint64_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U64_C(u64) RT_BSWAP_U64_C(u64) +#else +# define RT_H2LE_U64_C(u64) (u64) +#endif + +/** @def RT_H2LE_U32 + * Converts an uint32_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U32(u32) RT_BSWAP_U32(u32) +#else +# define RT_H2LE_U32(u32) (u32) +#endif + +/** @def RT_H2LE_U32_C + * Converts an uint32_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U32_C(u32) RT_BSWAP_U32_C(u32) +#else +# define RT_H2LE_U32_C(u32) (u32) +#endif + +/** @def RT_H2LE_U16 + * Converts an uint16_t value from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U16(u16) RT_BSWAP_U16(u16) +#else +# define RT_H2LE_U16(u16) (u16) +#endif + +/** @def RT_H2LE_U16_C + * Converts an uint16_t constant from host to little endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2LE_U16_C(u16) RT_BSWAP_U16_C(u16) +#else +# define RT_H2LE_U16_C(u16) (u16) +#endif + + +/** @def RT_LE2H_U64 + * Converts an uint64_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U64(u64) RT_BSWAP_U64(u64) +#else +# define RT_LE2H_U64(u64) (u64) +#endif + +/** @def RT_LE2H_U64_C + * Converts an uint64_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U64_C(u64) RT_BSWAP_U64_C(u64) +#else +# define RT_LE2H_U64_C(u64) (u64) +#endif + +/** @def RT_LE2H_U32 + * Converts an uint32_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U32(u32) RT_BSWAP_U32(u32) +#else +# define RT_LE2H_U32(u32) (u32) +#endif + +/** @def RT_LE2H_U32_C + * Converts an uint32_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U32_C(u32) RT_BSWAP_U32_C(u32) +#else +# define RT_LE2H_U32_C(u32) (u32) +#endif + +/** @def RT_LE2H_U16 + * Converts an uint16_t value from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U16(u16) RT_BSWAP_U16(u16) +#else +# define RT_LE2H_U16(u16) (u16) +#endif + +/** @def RT_LE2H_U16_C + * Converts an uint16_t constant from little endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_LE2H_U16_C(u16) RT_BSWAP_U16_C(u16) +#else +# define RT_LE2H_U16_C(u16) (u16) +#endif + + +/** @def RT_H2BE_U64 + * Converts an uint64_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U64(u64) (u64) +#else +# define RT_H2BE_U64(u64) RT_BSWAP_U64(u64) +#endif + +/** @def RT_H2BE_U64_C + * Converts an uint64_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U64_C(u64) (u64) +#else +# define RT_H2BE_U64_C(u64) RT_BSWAP_U64_C(u64) +#endif + +/** @def RT_H2BE_U32 + * Converts an uint32_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U32(u32) (u32) +#else +# define RT_H2BE_U32(u32) RT_BSWAP_U32(u32) +#endif + +/** @def RT_H2BE_U32_C + * Converts an uint32_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U32_C(u32) (u32) +#else +# define RT_H2BE_U32_C(u32) RT_BSWAP_U32_C(u32) +#endif + +/** @def RT_H2BE_U16 + * Converts an uint16_t value from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U16(u16) (u16) +#else +# define RT_H2BE_U16(u16) RT_BSWAP_U16(u16) +#endif + +/** @def RT_H2BE_U16_C + * Converts an uint16_t constant from host to big endian byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_H2BE_U16_C(u16) (u16) +#else +# define RT_H2BE_U16_C(u16) RT_BSWAP_U16_C(u16) +#endif + +/** @def RT_BE2H_U64 + * Converts an uint64_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U64(u64) (u64) +#else +# define RT_BE2H_U64(u64) RT_BSWAP_U64(u64) +#endif + +/** @def RT_BE2H_U64 + * Converts an uint64_t constant from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U64_C(u64) (u64) +#else +# define RT_BE2H_U64_C(u64) RT_BSWAP_U64_C(u64) +#endif + +/** @def RT_BE2H_U32 + * Converts an uint32_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U32(u32) (u32) +#else +# define RT_BE2H_U32(u32) RT_BSWAP_U32(u32) +#endif + +/** @def RT_BE2H_U32_C + * Converts an uint32_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U32_C(u32) (u32) +#else +# define RT_BE2H_U32_C(u32) RT_BSWAP_U32_C(u32) +#endif + +/** @def RT_BE2H_U16 + * Converts an uint16_t value from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U16(u16) (u16) +#else +# define RT_BE2H_U16(u16) RT_BSWAP_U16(u16) +#endif + +/** @def RT_BE2H_U16_C + * Converts an uint16_t constant from big endian to host byte order. */ +#ifdef RT_BIG_ENDIAN +# define RT_BE2H_U16_C(u16) (u16) +#else +# define RT_BE2H_U16_C(u16) RT_BSWAP_U16_C(u16) +#endif + + +/** @def RT_H2N_U64 + * Converts an uint64_t value from host to network byte order. */ +#define RT_H2N_U64(u64) RT_H2BE_U64(u64) + +/** @def RT_H2N_U64_C + * Converts an uint64_t constant from host to network byte order. */ +#define RT_H2N_U64_C(u64) RT_H2BE_U64_C(u64) + +/** @def RT_H2N_U32 + * Converts an uint32_t value from host to network byte order. */ +#define RT_H2N_U32(u32) RT_H2BE_U32(u32) + +/** @def RT_H2N_U32_C + * Converts an uint32_t constant from host to network byte order. */ +#define RT_H2N_U32_C(u32) RT_H2BE_U32_C(u32) + +/** @def RT_H2N_U16 + * Converts an uint16_t value from host to network byte order. */ +#define RT_H2N_U16(u16) RT_H2BE_U16(u16) + +/** @def RT_H2N_U16_C + * Converts an uint16_t constant from host to network byte order. */ +#define RT_H2N_U16_C(u16) RT_H2BE_U16_C(u16) + +/** @def RT_N2H_U64 + * Converts an uint64_t value from network to host byte order. */ +#define RT_N2H_U64(u64) RT_BE2H_U64(u64) + +/** @def RT_N2H_U64_C + * Converts an uint64_t constant from network to host byte order. */ +#define RT_N2H_U64_C(u64) RT_BE2H_U64_C(u64) + +/** @def RT_N2H_U32 + * Converts an uint32_t value from network to host byte order. */ +#define RT_N2H_U32(u32) RT_BE2H_U32(u32) + +/** @def RT_N2H_U32_C + * Converts an uint32_t constant from network to host byte order. */ +#define RT_N2H_U32_C(u32) RT_BE2H_U32_C(u32) + +/** @def RT_N2H_U16 + * Converts an uint16_t value from network to host byte order. */ +#define RT_N2H_U16(u16) RT_BE2H_U16(u16) + +/** @def RT_N2H_U16_C + * Converts an uint16_t value from network to host byte order. */ +#define RT_N2H_U16_C(u16) RT_BE2H_U16_C(u16) + + +/* + * The BSD sys/param.h + machine/param.h file is a major source of + * namespace pollution. Kill off some of the worse ones unless we're + * compiling kernel code. + */ +#if defined(RT_OS_DARWIN) \ + && !defined(KERNEL) \ + && !defined(RT_NO_BSD_PARAM_H_UNDEFING) \ + && ( defined(_SYS_PARAM_H_) || defined(_I386_PARAM_H_) ) +/* sys/param.h: */ +# undef PSWP +# undef PVM +# undef PINOD +# undef PRIBO +# undef PVFS +# undef PZERO +# undef PSOCK +# undef PWAIT +# undef PLOCK +# undef PPAUSE +# undef PUSER +# undef PRIMASK +# undef MINBUCKET +# undef MAXALLOCSAVE +# undef FSHIFT +# undef FSCALE + +/* i386/machine.h: */ +# undef ALIGN +# undef ALIGNBYTES +# undef DELAY +# undef STATUS_WORD +# undef USERMODE +# undef BASEPRI +# undef MSIZE +# undef CLSIZE +# undef CLSIZELOG2 +#endif + +/** @def NIL_OFFSET + * NIL offset. + * Whenever we use offsets instead of pointers to save space and relocation effort + * NIL_OFFSET shall be used as the equivalent to NULL. + */ +#define NIL_OFFSET (~0U) + + +/** @def NOREF + * Keeps the compiler from bitching about an unused parameter, local variable, + * or other stuff, will never use _Pragma are is thus more flexible. + */ +#define NOREF(var) (void)(var) + +/** @def RT_NOREF_PV + * Keeps the compiler from bitching about an unused parameter or local variable. + * This one cannot be used with structure members and such, like for instance + * AssertRC may end up doing due to its generic nature. + */ +#if defined(__cplusplus) && RT_CLANG_PREREQ(6, 0) +# define RT_NOREF_PV(var) _Pragma(RT_STR(unused(var))) +#else +# define RT_NOREF_PV(var) (void)(var) +#endif + +/** @def RT_NOREF1 + * RT_NOREF_PV shorthand taking on parameter. */ +#define RT_NOREF1(var1) RT_NOREF_PV(var1) +/** @def RT_NOREF2 + * RT_NOREF_PV shorthand taking two parameters. */ +#define RT_NOREF2(var1, var2) RT_NOREF_PV(var1); RT_NOREF1(var2) +/** @def RT_NOREF3 + * RT_NOREF_PV shorthand taking three parameters. */ +#define RT_NOREF3(var1, var2, var3) RT_NOREF_PV(var1); RT_NOREF2(var2, var3) +/** @def RT_NOREF4 + * RT_NOREF_PV shorthand taking four parameters. */ +#define RT_NOREF4(var1, var2, var3, var4) RT_NOREF_PV(var1); RT_NOREF3(var2, var3, var4) +/** @def RT_NOREF5 + * RT_NOREF_PV shorthand taking five parameters. */ +#define RT_NOREF5(var1, var2, var3, var4, var5) RT_NOREF_PV(var1); RT_NOREF4(var2, var3, var4, var5) +/** @def RT_NOREF6 + * RT_NOREF_PV shorthand taking six parameters. */ +#define RT_NOREF6(var1, var2, var3, var4, var5, var6) RT_NOREF_PV(var1); RT_NOREF5(var2, var3, var4, var5, var6) +/** @def RT_NOREF7 + * RT_NOREF_PV shorthand taking seven parameters. */ +#define RT_NOREF7(var1, var2, var3, var4, var5, var6, var7) \ + RT_NOREF_PV(var1); RT_NOREF6(var2, var3, var4, var5, var6, var7) +/** @def RT_NOREF8 + * RT_NOREF_PV shorthand taking eight parameters. */ +#define RT_NOREF8(var1, var2, var3, var4, var5, var6, var7, var8) \ + RT_NOREF_PV(var1); RT_NOREF7(var2, var3, var4, var5, var6, var7, var8) +/** @def RT_NOREF9 + * RT_NOREF_PV shorthand taking nine parameters. */ +#define RT_NOREF9(var1, var2, var3, var4, var5, var6, var7, var8, var9) \ + RT_NOREF_PV(var1); RT_NOREF8(var2, var3, var4, var5, var6, var7, var8, var9) +/** @def RT_NOREF10 + * RT_NOREF_PV shorthand taking ten parameters. */ +#define RT_NOREF10(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10) \ + RT_NOREF_PV(var1); RT_NOREF_PV(var2); RT_NOREF_PV(var3); RT_NOREF_PV(var4); RT_NOREF_PV(var5); RT_NOREF_PV(var6); \ + RT_NOREF_PV(var7); RT_NOREF_PV(var8); RT_NOREF_PV(var9); RT_NOREF_PV(var10) +/** @def RT_NOREF11 + * RT_NOREF_PV shorthand taking eleven parameters. */ +#define RT_NOREF11(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11) \ + RT_NOREF_PV(var1); RT_NOREF10(var2, var3, var4, var5, var6, var7, var8, var9, var10) +/** @def RT_NOREF12 + * RT_NOREF_PV shorthand taking twelve parameters. */ +#define RT_NOREF12(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) \ + RT_NOREF_PV(var1); RT_NOREF11(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) +/** @def RT_NOREF13 + * RT_NOREF_PV shorthand taking thirteen parameters. */ +#define RT_NOREF13(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13) \ + RT_NOREF_PV(var1); RT_NOREF12(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13) +/** @def RT_NOREF14 + * RT_NOREF_PV shorthand taking fourteen parameters. */ +#define RT_NOREF14(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14) \ + RT_NOREF_PV(var1); RT_NOREF13(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14) +/** @def RT_NOREF15 + * RT_NOREF_PV shorthand taking fifteen parameters. */ +#define RT_NOREF15(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15) \ + RT_NOREF_PV(var1); RT_NOREF14(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15) +/** @def RT_NOREF16 + * RT_NOREF_PV shorthand taking fifteen parameters. */ +#define RT_NOREF16(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16) \ + RT_NOREF_PV(var1); RT_NOREF15(var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15, var16) +/** @def RT_NOREF17 + * RT_NOREF_PV shorthand taking seventeen parameters. */ +#define RT_NOREF17(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) \ + RT_NOREF_PV(v1); RT_NOREF16(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +/** @def RT_NOREF18 + * RT_NOREF_PV shorthand taking eighteen parameters. */ +#define RT_NOREF18(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) \ + RT_NOREF_PV(v1); RT_NOREF17(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +/** @def RT_NOREF19 + * RT_NOREF_PV shorthand taking nineteen parameters. */ +#define RT_NOREF19(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) \ + RT_NOREF_PV(v1); RT_NOREF18(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +/** @def RT_NOREF20 + * RT_NOREF_PV shorthand taking twenty parameters. */ +#define RT_NOREF20(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) \ + RT_NOREF_PV(v1); RT_NOREF19(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +/** @def RT_NOREF21 + * RT_NOREF_PV shorthand taking twentyone parameters. */ +#define RT_NOREF21(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) \ + RT_NOREF_PV(v1); RT_NOREF20(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +/** @def RT_NOREF22 + * RT_NOREF_PV shorthand taking twentytwo parameters. */ +#define RT_NOREF22(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) \ + RT_NOREF_PV(v1); RT_NOREF21(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) + +/** @def RT_NOREF + * RT_NOREF_PV variant using the variadic macro feature of C99. + * @remarks Only use this in sources */ +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RT_NOREF(...) \ + RT_UNPACK_CALL(RT_CONCAT(RT_NOREF, RT_EXPAND(RT_COUNT_VA_ARGS(__VA_ARGS__))),(__VA_ARGS__)) +#endif + + +/** @def RT_BREAKPOINT + * Emit a debug breakpoint instruction. + * + * @remarks In the x86/amd64 gnu world we add a nop instruction after the int3 + * to force gdb to remain at the int3 source line. + * @remarks The L4 kernel will try make sense of the breakpoint, thus the jmp on + * x86/amd64. + */ +#ifdef __GNUC__ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) +# if !defined(__L4ENV__) +# define RT_BREAKPOINT() __asm__ __volatile__("int $3\n\tnop\n\t") +# else +# define RT_BREAKPOINT() __asm__ __volatile__("int3; jmp 1f; 1:\n\t") +# endif +# elif defined(RT_ARCH_SPARC64) +# define RT_BREAKPOINT() __asm__ __volatile__("illtrap 0\n\t") /** @todo Sparc64: this is just a wild guess. */ +# elif defined(RT_ARCH_SPARC) +# define RT_BREAKPOINT() __asm__ __volatile__("unimp 0\n\t") /** @todo Sparc: this is just a wild guess (same as Sparc64, just different name). */ +# endif +#endif +#ifdef _MSC_VER +# define RT_BREAKPOINT() __debugbreak() +#endif +#if defined(__IBMC__) || defined(__IBMCPP__) +# define RT_BREAKPOINT() __interrupt(3) +#endif +#if defined(__WATCOMC__) +# define RT_BREAKPOINT() _asm { int 3 } +#endif +#ifndef RT_BREAKPOINT +# error "This compiler/arch is not supported!" +#endif + + +/** @defgroup grp_rt_cdefs_size Size Constants + * (Of course, these are binary computer terms, not SI.) + * @{ + */ +/** 1 K (Kilo) (1 024). */ +#define _1K 0x00000400 +/** 2 K (Kilo) (2 048). */ +#define _2K 0x00000800 +/** 4 K (Kilo) (4 096). */ +#define _4K 0x00001000 +/** 8 K (Kilo) (8 192). */ +#define _8K 0x00002000 +/** 16 K (Kilo) (16 384). */ +#define _16K 0x00004000 +/** 32 K (Kilo) (32 768). */ +#define _32K 0x00008000 +/** 64 K (Kilo) (65 536). */ +#if ARCH_BITS != 16 +# define _64K 0x00010000 +#else +# define _64K UINT32_C(0x00010000) +#endif +/** 128 K (Kilo) (131 072). */ +#if ARCH_BITS != 16 +# define _128K 0x00020000 +#else +# define _128K UINT32_C(0x00020000) +#endif +/** 256 K (Kilo) (262 144). */ +#if ARCH_BITS != 16 +# define _256K 0x00040000 +#else +# define _256K UINT32_C(0x00040000) +#endif +/** 512 K (Kilo) (524 288). */ +#if ARCH_BITS != 16 +# define _512K 0x00080000 +#else +# define _512K UINT32_C(0x00080000) +#endif +/** 1 M (Mega) (1 048 576). */ +#if ARCH_BITS != 16 +# define _1M 0x00100000 +#else +# define _1M UINT32_C(0x00100000) +#endif +/** 2 M (Mega) (2 097 152). */ +#if ARCH_BITS != 16 +# define _2M 0x00200000 +#else +# define _2M UINT32_C(0x00200000) +#endif +/** 4 M (Mega) (4 194 304). */ +#if ARCH_BITS != 16 +# define _4M 0x00400000 +#else +# define _4M UINT32_C(0x00400000) +#endif +/** 8 M (Mega) (8 388 608). */ +#define _8M UINT32_C(0x00800000) +/** 16 M (Mega) (16 777 216). */ +#define _16M UINT32_C(0x01000000) +/** 32 M (Mega) (33 554 432). */ +#define _32M UINT32_C(0x02000000) +/** 64 M (Mega) (67 108 864). */ +#define _64M UINT32_C(0x04000000) +/** 128 M (Mega) (134 217 728). */ +#define _128M UINT32_C(0x08000000) +/** 256 M (Mega) (268 435 456). */ +#define _256M UINT32_C(0x10000000) +/** 512 M (Mega) (536 870 912). */ +#define _512M UINT32_C(0x20000000) +/** 1 G (Giga) (1 073 741 824). (32-bit) */ +#if ARCH_BITS != 16 +# define _1G 0x40000000 +#else +# define _1G UINT32_C(0x40000000) +#endif +/** 1 G (Giga) (1 073 741 824). (64-bit) */ +#if ARCH_BITS != 16 +# define _1G64 0x40000000LL +#else +# define _1G64 UINT64_C(0x40000000) +#endif +/** 2 G (Giga) (2 147 483 648). (32-bit) */ +#define _2G32 UINT32_C(0x80000000) +/** 2 G (Giga) (2 147 483 648). (64-bit) */ +#if ARCH_BITS != 16 +# define _2G 0x0000000080000000LL +#else +# define _2G UINT64_C(0x0000000080000000) +#endif +/** 4 G (Giga) (4 294 967 296). */ +#if ARCH_BITS != 16 +# define _4G 0x0000000100000000LL +#else +# define _4G UINT64_C(0x0000000100000000) +#endif +/** 1 T (Tera) (1 099 511 627 776). */ +#if ARCH_BITS != 16 +# define _1T 0x0000010000000000LL +#else +# define _1T UINT64_C(0x0000010000000000) +#endif +/** 1 P (Peta) (1 125 899 906 842 624). */ +#if ARCH_BITS != 16 +# define _1P 0x0004000000000000LL +#else +# define _1P UINT64_C(0x0004000000000000) +#endif +/** 1 E (Exa) (1 152 921 504 606 846 976). */ +#if ARCH_BITS != 16 +# define _1E 0x1000000000000000LL +#else +# define _1E UINT64_C(0x1000000000000000) +#endif +/** 2 E (Exa) (2 305 843 009 213 693 952). */ +#if ARCH_BITS != 16 +# define _2E 0x2000000000000000ULL +#else +# define _2E UINT64_C(0x2000000000000000) +#endif +/** @} */ + +/** @defgroup grp_rt_cdefs_decimal_grouping Decimal Constant Grouping Macros + * @{ */ +#define RT_D1(g1) g1 +#define RT_D2(g1, g2) g1#g2 +#define RT_D3(g1, g2, g3) g1#g2#g3 +#define RT_D4(g1, g2, g3, g4) g1#g2#g3#g4 +#define RT_D5(g1, g2, g3, g4, g5) g1#g2#g3#g4#g5 +#define RT_D6(g1, g2, g3, g4, g5, g6) g1#g2#g3#g4#g5#g6 +#define RT_D7(g1, g2, g3, g4, g5, g6, g7) g1#g2#g3#g4#g5#g6#g7 + +#define RT_D1_U(g1) UINT32_C(g1) +#define RT_D2_U(g1, g2) UINT32_C(g1#g2) +#define RT_D3_U(g1, g2, g3) UINT32_C(g1#g2#g3) +#define RT_D4_U(g1, g2, g3, g4) UINT64_C(g1#g2#g3#g4) +#define RT_D5_U(g1, g2, g3, g4, g5) UINT64_C(g1#g2#g3#g4#g5) +#define RT_D6_U(g1, g2, g3, g4, g5, g6) UINT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_U(g1, g2, g3, g4, g5, g6, g7) UINT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_S(g1) INT32_C(g1) +#define RT_D2_S(g1, g2) INT32_C(g1#g2) +#define RT_D3_S(g1, g2, g3) INT32_C(g1#g2#g3) +#define RT_D4_S(g1, g2, g3, g4) INT64_C(g1#g2#g3#g4) +#define RT_D5_S(g1, g2, g3, g4, g5) INT64_C(g1#g2#g3#g4#g5) +#define RT_D6_S(g1, g2, g3, g4, g5, g6) INT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_S(g1, g2, g3, g4, g5, g6, g7) INT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_U32(g1) UINT32_C(g1) +#define RT_D2_U32(g1, g2) UINT32_C(g1#g2) +#define RT_D3_U32(g1, g2, g3) UINT32_C(g1#g2#g3) +#define RT_D4_U32(g1, g2, g3, g4) UINT32_C(g1#g2#g3#g4) + +#define RT_D1_S32(g1) INT32_C(g1) +#define RT_D2_S32(g1, g2) INT32_C(g1#g2) +#define RT_D3_S32(g1, g2, g3) INT32_C(g1#g2#g3) +#define RT_D4_S32(g1, g2, g3, g4) INT32_C(g1#g2#g3#g4) + +#define RT_D1_U64(g1) UINT64_C(g1) +#define RT_D2_U64(g1, g2) UINT64_C(g1#g2) +#define RT_D3_U64(g1, g2, g3) UINT64_C(g1#g2#g3) +#define RT_D4_U64(g1, g2, g3, g4) UINT64_C(g1#g2#g3#g4) +#define RT_D5_U64(g1, g2, g3, g4, g5) UINT64_C(g1#g2#g3#g4#g5) +#define RT_D6_U64(g1, g2, g3, g4, g5, g6) UINT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_U64(g1, g2, g3, g4, g5, g6, g7) UINT64_C(g1#g2#g3#g4#g5#g6#g7) + +#define RT_D1_S64(g1) INT64_C(g1) +#define RT_D2_S64(g1, g2) INT64_C(g1#g2) +#define RT_D3_S64(g1, g2, g3) INT64_C(g1#g2#g3) +#define RT_D4_S64(g1, g2, g3, g4) INT64_C(g1#g2#g3#g4) +#define RT_D5_S64(g1, g2, g3, g4, g5) INT64_C(g1#g2#g3#g4#g5) +#define RT_D6_S64(g1, g2, g3, g4, g5, g6) INT64_C(g1#g2#g3#g4#g5#g6) +#define RT_D7_S64(g1, g2, g3, g4, g5, g6, g7) INT64_C(g1#g2#g3#g4#g5#g6#g7) +/** @} */ + + +/** @defgroup grp_rt_cdefs_time Time Constants + * @{ + */ +/** 1 hour expressed in nanoseconds (64-bit). */ +#define RT_NS_1HOUR UINT64_C(3600000000000) +/** 1 minute expressed in nanoseconds (64-bit). */ +#define RT_NS_1MIN UINT64_C(60000000000) +/** 45 second expressed in nanoseconds. */ +#define RT_NS_45SEC UINT64_C(45000000000) +/** 30 second expressed in nanoseconds. */ +#define RT_NS_30SEC UINT64_C(30000000000) +/** 20 second expressed in nanoseconds. */ +#define RT_NS_20SEC UINT64_C(20000000000) +/** 15 second expressed in nanoseconds. */ +#define RT_NS_15SEC UINT64_C(15000000000) +/** 10 second expressed in nanoseconds. */ +#define RT_NS_10SEC UINT64_C(10000000000) +/** 1 second expressed in nanoseconds. */ +#define RT_NS_1SEC UINT32_C(1000000000) +/** 100 millsecond expressed in nanoseconds. */ +#define RT_NS_100MS UINT32_C(100000000) +/** 10 millsecond expressed in nanoseconds. */ +#define RT_NS_10MS UINT32_C(10000000) +/** 1 millsecond expressed in nanoseconds. */ +#define RT_NS_1MS UINT32_C(1000000) +/** 100 microseconds expressed in nanoseconds. */ +#define RT_NS_100US UINT32_C(100000) +/** 10 microseconds expressed in nanoseconds. */ +#define RT_NS_10US UINT32_C(10000) +/** 1 microsecond expressed in nanoseconds. */ +#define RT_NS_1US UINT32_C(1000) + +/** 1 second expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1SEC_64 UINT64_C(1000000000) +/** 100 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_100MS_64 UINT64_C(100000000) +/** 10 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_10MS_64 UINT64_C(10000000) +/** 1 millsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1MS_64 UINT64_C(1000000) +/** 100 microseconds expressed in nanoseconds - 64-bit type. */ +#define RT_NS_100US_64 UINT64_C(100000) +/** 10 microseconds expressed in nanoseconds - 64-bit type. */ +#define RT_NS_10US_64 UINT64_C(10000) +/** 1 microsecond expressed in nanoseconds - 64-bit type. */ +#define RT_NS_1US_64 UINT64_C(1000) + +/** 1 hour expressed in microseconds. */ +#define RT_US_1HOUR UINT32_C(3600000000) +/** 1 minute expressed in microseconds. */ +#define RT_US_1MIN UINT32_C(60000000) +/** 1 second expressed in microseconds. */ +#define RT_US_1SEC UINT32_C(1000000) +/** 100 millsecond expressed in microseconds. */ +#define RT_US_100MS UINT32_C(100000) +/** 10 millsecond expressed in microseconds. */ +#define RT_US_10MS UINT32_C(10000) +/** 1 millsecond expressed in microseconds. */ +#define RT_US_1MS UINT32_C(1000) + +/** 1 hour expressed in microseconds - 64-bit type. */ +#define RT_US_1HOUR_64 UINT64_C(3600000000) +/** 1 minute expressed in microseconds - 64-bit type. */ +#define RT_US_1MIN_64 UINT64_C(60000000) +/** 1 second expressed in microseconds - 64-bit type. */ +#define RT_US_1SEC_64 UINT64_C(1000000) +/** 100 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_100MS_64 UINT64_C(100000) +/** 10 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_10MS_64 UINT64_C(10000) +/** 1 millsecond expressed in microseconds - 64-bit type. */ +#define RT_US_1MS_64 UINT64_C(1000) + +/** 1 hour expressed in milliseconds. */ +#define RT_MS_1HOUR UINT32_C(3600000) +/** 1 minute expressed in milliseconds. */ +#define RT_MS_1MIN UINT32_C(60000) +/** 1 second expressed in milliseconds. */ +#define RT_MS_1SEC UINT32_C(1000) + +/** 1 hour expressed in milliseconds - 64-bit type. */ +#define RT_MS_1HOUR_64 UINT64_C(3600000) +/** 1 minute expressed in milliseconds - 64-bit type. */ +#define RT_MS_1MIN_64 UINT64_C(60000) +/** 1 second expressed in milliseconds - 64-bit type. */ +#define RT_MS_1SEC_64 UINT64_C(1000) + +/** The number of seconds per week. */ +#define RT_SEC_1WEEK UINT32_C(604800) +/** The number of seconds per day. */ +#define RT_SEC_1DAY UINT32_C(86400) +/** The number of seconds per hour. */ +#define RT_SEC_1HOUR UINT32_C(3600) + +/** The number of seconds per week - 64-bit type. */ +#define RT_SEC_1WEEK_64 UINT64_C(604800) +/** The number of seconds per day - 64-bit type. */ +#define RT_SEC_1DAY_64 UINT64_C(86400) +/** The number of seconds per hour - 64-bit type. */ +#define RT_SEC_1HOUR_64 UINT64_C(3600) +/** @} */ + + +/** @defgroup grp_rt_cdefs_dbgtype Debug Info Types + * @{ */ +/** Other format. */ +#define RT_DBGTYPE_OTHER RT_BIT_32(0) +/** Stabs. */ +#define RT_DBGTYPE_STABS RT_BIT_32(1) +/** Debug With Arbitrary Record Format (DWARF). */ +#define RT_DBGTYPE_DWARF RT_BIT_32(2) +/** Microsoft Codeview debug info. */ +#define RT_DBGTYPE_CODEVIEW RT_BIT_32(3) +/** Watcom debug info. */ +#define RT_DBGTYPE_WATCOM RT_BIT_32(4) +/** IBM High Level Language debug info. */ +#define RT_DBGTYPE_HLL RT_BIT_32(5) +/** Old OS/2 and Windows symbol file. */ +#define RT_DBGTYPE_SYM RT_BIT_32(6) +/** Map file. */ +#define RT_DBGTYPE_MAP RT_BIT_32(7) +/** @} */ + + +/** @defgroup grp_rt_cdefs_exetype Executable Image Types + * @{ */ +/** Some other format. */ +#define RT_EXETYPE_OTHER RT_BIT_32(0) +/** Portable Executable. */ +#define RT_EXETYPE_PE RT_BIT_32(1) +/** Linear eXecutable. */ +#define RT_EXETYPE_LX RT_BIT_32(2) +/** Linear Executable. */ +#define RT_EXETYPE_LE RT_BIT_32(3) +/** New Executable. */ +#define RT_EXETYPE_NE RT_BIT_32(4) +/** DOS Executable (Mark Zbikowski). */ +#define RT_EXETYPE_MZ RT_BIT_32(5) +/** COM Executable. */ +#define RT_EXETYPE_COM RT_BIT_32(6) +/** a.out Executable. */ +#define RT_EXETYPE_AOUT RT_BIT_32(7) +/** Executable and Linkable Format. */ +#define RT_EXETYPE_ELF RT_BIT_32(8) +/** Mach-O Executable (including FAT ones). */ +#define RT_EXETYPE_MACHO RT_BIT_32(9) +/** TE from UEFI. */ +#define RT_EXETYPE_TE RT_BIT_32(9) +/** @} */ + + +/** @def VALID_PTR + * Pointer validation macro. + * @param ptr The pointer. + */ +#if defined(RT_ARCH_AMD64) +# ifdef IN_RING3 +# if defined(RT_OS_DARWIN) /* first 4GB is reserved for legacy kernel. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) >= _4G \ + && !((uintptr_t)(ptr) & 0xffff800000000000ULL) ) +# elif defined(RT_OS_SOLARIS) /* The kernel only used the top 2TB, but keep it simple. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && ( ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0xffff800000000000ULL \ + || ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0) ) +# else +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && !((uintptr_t)(ptr) & 0xffff800000000000ULL) ) +# endif +# else /* !IN_RING3 */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U \ + && ( ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0xffff800000000000ULL \ + || ((uintptr_t)(ptr) & 0xffff800000000000ULL) == 0) ) +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_X86) +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) + +#elif defined(RT_ARCH_SPARC64) +# ifdef IN_RING3 +# if defined(RT_OS_SOLARIS) +/** Sparc64 user mode: According to Figure 9.4 in solaris internals */ +/** @todo # define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x80004000U >= 0x80004000U + 0x100000000ULL ) - figure this. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x80000000U >= 0x80000000U + 0x100000000ULL ) +# else +# error "Port me" +# endif +# else /* !IN_RING3 */ +# if defined(RT_OS_SOLARIS) +/** @todo Sparc64 kernel mode: This is according to Figure 11.1 in solaris + * internals. Verify in sources. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) >= 0x01000000U ) +# else +# error "Port me" +# endif +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_SPARC) +# ifdef IN_RING3 +# ifdef RT_OS_SOLARIS +/** Sparc user mode: According to + * http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/sun4/os/startup.c#510 */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x400000U >= 0x400000U + 0x2000U ) + +# else +# error "Port me" +# endif +# else /* !IN_RING3 */ +# ifdef RT_OS_SOLARIS +/** @todo Sparc kernel mode: Check the sources! */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) +# else +# error "Port me" +# endif +# endif /* !IN_RING3 */ + +#elif defined(RT_ARCH_ARM) +/* ASSUMES that at least the last and first 4K are out of bounds. */ +# define RT_VALID_PTR(ptr) ( (uintptr_t)(ptr) + 0x1000U >= 0x2000U ) + +#else +# error "Architecture identifier missing / not implemented." +#endif + +/** Old name for RT_VALID_PTR. */ +#define VALID_PTR(ptr) RT_VALID_PTR(ptr) + +/** @def RT_VALID_ALIGNED_PTR + * Pointer validation macro that also checks the alignment. + * @param ptr The pointer. + * @param align The alignment, must be a power of two. + */ +#define RT_VALID_ALIGNED_PTR(ptr, align) \ + ( !((uintptr_t)(ptr) & (uintptr_t)((align) - 1)) \ + && VALID_PTR(ptr) ) + + +/** @def VALID_PHYS32 + * 32 bits physical address validation macro. + * @param Phys The RTGCPHYS address. + */ +#define VALID_PHYS32(Phys) ( (uint64_t)(Phys) < (uint64_t)_4G ) + +/** @def N_ + * The \#define N_ is used to mark a string for translation. This is usable in + * any part of the code, as it is only used by the tools that create message + * catalogs. This macro is a no-op as far as the compiler and code generation + * is concerned. + * + * If you want to both mark a string for translation and translate it, use _(). + */ +#define N_(s) (s) + +/** @def _ + * The \#define _ is used to mark a string for translation and to translate it + * in one step. + * + * If you want to only mark a string for translation, use N_(). + */ +#define _(s) gettext(s) + + +/** @def __PRETTY_FUNCTION__ + * With GNU C we'd like to use the builtin __PRETTY_FUNCTION__, so define that + * for the other compilers. + */ +#if !defined(__GNUC__) && !defined(__PRETTY_FUNCTION__) +# ifdef _MSC_VER +# define __PRETTY_FUNCTION__ __FUNCSIG__ +# else +# define __PRETTY_FUNCTION__ __FUNCTION__ +# endif +#endif + + +/** @def RT_STRICT + * The \#define RT_STRICT controls whether or not assertions and other runtime + * checks should be compiled in or not. This is defined when DEBUG is defined. + * If RT_NO_STRICT is defined, it will unconditionally be undefined. + * + * If you want assertions which are not subject to compile time options use + * the AssertRelease*() flavors. + */ +#if !defined(RT_STRICT) && defined(DEBUG) +# define RT_STRICT +#endif +#ifdef RT_NO_STRICT +# undef RT_STRICT +#endif + +/** @todo remove this: */ +#if !defined(RT_LOCK_STRICT) && !defined(DEBUG_bird) +# define RT_LOCK_NO_STRICT +#endif +#if !defined(RT_LOCK_STRICT_ORDER) && !defined(DEBUG_bird) +# define RT_LOCK_NO_STRICT_ORDER +#endif + +/** @def RT_LOCK_STRICT + * The \#define RT_LOCK_STRICT controls whether deadlock detection and related + * checks are done in the lock and semaphore code. It is by default enabled in + * RT_STRICT builds, but this behavior can be overridden by defining + * RT_LOCK_NO_STRICT. */ +#if !defined(RT_LOCK_STRICT) && !defined(RT_LOCK_NO_STRICT) && defined(RT_STRICT) +# define RT_LOCK_STRICT +#endif +/** @def RT_LOCK_NO_STRICT + * The \#define RT_LOCK_NO_STRICT disables RT_LOCK_STRICT. */ +#if defined(RT_LOCK_NO_STRICT) && defined(RT_LOCK_STRICT) +# undef RT_LOCK_STRICT +#endif + +/** @def RT_LOCK_STRICT_ORDER + * The \#define RT_LOCK_STRICT_ORDER controls whether locking order is checked + * by the lock and semaphore code. It is by default enabled in RT_STRICT + * builds, but this behavior can be overridden by defining + * RT_LOCK_NO_STRICT_ORDER. */ +#if !defined(RT_LOCK_STRICT_ORDER) && !defined(RT_LOCK_NO_STRICT_ORDER) && defined(RT_STRICT) +# define RT_LOCK_STRICT_ORDER +#endif +/** @def RT_LOCK_NO_STRICT_ORDER + * The \#define RT_LOCK_NO_STRICT_ORDER disables RT_LOCK_STRICT_ORDER. */ +#if defined(RT_LOCK_NO_STRICT_ORDER) && defined(RT_LOCK_STRICT_ORDER) +# undef RT_LOCK_STRICT_ORDER +#endif + + +/** Source position. */ +#define RT_SRC_POS __FILE__, __LINE__, RT_GCC_EXTENSION __PRETTY_FUNCTION__ + +/** Source position declaration. */ +#define RT_SRC_POS_DECL const char *pszFile, unsigned iLine, const char *pszFunction + +/** Source position arguments. */ +#define RT_SRC_POS_ARGS pszFile, iLine, pszFunction + +/** Applies NOREF() to the source position arguments. */ +#define RT_SRC_POS_NOREF() do { NOREF(pszFile); NOREF(iLine); NOREF(pszFunction); } while (0) + + +/** @def RT_INLINE_ASM_EXTERNAL + * Defined as 1 if the compiler does not support inline assembly. + * The ASM* functions will then be implemented in external .asm files. + */ +#if (defined(_MSC_VER) && defined(RT_ARCH_AMD64)) \ + || (!defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86)) \ + || defined(__WATCOMC__) +# define RT_INLINE_ASM_EXTERNAL 1 +#else +# define RT_INLINE_ASM_EXTERNAL 0 +#endif + +/** @def RT_INLINE_ASM_GNU_STYLE + * Defined as 1 if the compiler understands GNU style inline assembly. + */ +#if defined(_MSC_VER) || defined(__WATCOMC__) +# define RT_INLINE_ASM_GNU_STYLE 0 +#else +# define RT_INLINE_ASM_GNU_STYLE 1 +#endif + +/** @def RT_INLINE_ASM_USES_INTRIN + * Defined as the major MSC version if the compiler have and uses intrin.h. + * Otherwise it is 0. */ +#ifdef _MSC_VER +# if _MSC_VER >= 1700 /* Visual C++ v11.0 / 2012 */ +# define RT_INLINE_ASM_USES_INTRIN 17 +# elif _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_INLINE_ASM_USES_INTRIN 16 +# elif _MSC_VER >= 1500 /* Visual C++ v9.0 / 2008 */ +# define RT_INLINE_ASM_USES_INTRIN 15 +# elif _MSC_VER >= 1400 /* Visual C++ v8.0 / 2005 */ +# define RT_INLINE_ASM_USES_INTRIN 14 +# endif +#endif +#ifndef RT_INLINE_ASM_USES_INTRIN +# define RT_INLINE_ASM_USES_INTRIN 0 +#endif + +/** @def RT_COMPILER_SUPPORTS_LAMBDA + * If the defined, the compiler supports lambda expressions. These expressions + * are useful for embedding assertions and type checks into macros. */ +#if defined(_MSC_VER) && defined(__cplusplus) +# if _MSC_VER >= 1600 /* Visual C++ v10.0 / 2010 */ +# define RT_COMPILER_SUPPORTS_LAMBDA +# endif +#elif defined(__GNUC__) && defined(__cplusplus) +/* 4.5 or later, I think, if in ++11 mode... */ +#endif + +/** @def RT_DATA_IS_FAR + * Set to 1 if we're in 16-bit mode and use far pointers. + */ +#if ARCH_BITS == 16 && defined(__WATCOMC__) \ + && (defined(__COMPACT__) || defined(__LARGE__)) +# define RT_DATA_IS_FAR 1 +#else +# define RT_DATA_IS_FAR 0 +#endif + +/** @def RT_FAR + * For indicating far pointers in 16-bit code. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_NEAR + * For indicating near pointers in 16-bit code. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_FAR_CODE + * For indicating far 16-bit functions. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_NEAR_CODE + * For indicating near 16-bit functions. + * Does nothing in 32-bit and 64-bit code. */ +/** @def RT_FAR_DATA + * For indicating far 16-bit external data, i.e. in a segment other than DATA16. + * Does nothing in 32-bit and 64-bit code. */ +#if ARCH_BITS == 16 +# define RT_FAR __far +# define RT_NEAR __near +# define RT_FAR_CODE __far +# define RT_NEAR_CODE __near +# define RT_FAR_DATA __far +#else +# define RT_FAR +# define RT_NEAR +# define RT_FAR_CODE +# define RT_NEAR_CODE +# define RT_FAR_DATA +#endif + + +/** @} */ + + +/** @defgroup grp_rt_cdefs_cpp Special Macros for C++ + * @ingroup grp_rt_cdefs + * @{ + */ + +#ifdef __cplusplus + +/** @def DECLEXPORT_CLASS + * How to declare an exported class. Place this macro after the 'class' + * keyword in the declaration of every class you want to export. + * + * @note It is necessary to use this macro even for inner classes declared + * inside the already exported classes. This is a GCC specific requirement, + * but it seems not to harm other compilers. + */ +#if defined(_MSC_VER) || defined(RT_OS_OS2) +# define DECLEXPORT_CLASS __declspec(dllexport) +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLEXPORT_CLASS __attribute__((visibility("default"))) +#else +# define DECLEXPORT_CLASS +#endif + +/** @def DECLIMPORT_CLASS + * How to declare an imported class Place this macro after the 'class' + * keyword in the declaration of every class you want to export. + * + * @note It is necessary to use this macro even for inner classes declared + * inside the already exported classes. This is a GCC specific requirement, + * but it seems not to harm other compilers. + */ +#if defined(_MSC_VER) || (defined(RT_OS_OS2) && !defined(__IBMC__) && !defined(__IBMCPP__)) +# define DECLIMPORT_CLASS __declspec(dllimport) +#elif defined(RT_USE_VISIBILITY_DEFAULT) +# define DECLIMPORT_CLASS __attribute__((visibility("default"))) +#else +# define DECLIMPORT_CLASS +#endif + +/** @def WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP + * Macro to work around error C2593 of the not-so-smart MSVC 7.x ambiguity + * resolver. The following snippet clearly demonstrates the code causing this + * error: + * @code + * class A + * { + * public: + * operator bool() const { return false; } + * operator int*() const { return NULL; } + * }; + * int main() + * { + * A a; + * if (!a); + * if (a && 0); + * return 0; + * } + * @endcode + * The code itself seems pretty valid to me and GCC thinks the same. + * + * This macro fixes the compiler error by explicitly overloading implicit + * global operators !, && and || that take the given class instance as one of + * their arguments. + * + * The best is to use this macro right after the class declaration. + * + * @note The macro expands to nothing for compilers other than MSVC. + * + * @param Cls Class to apply the workaround to + */ +#if defined(_MSC_VER) +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP(Cls) \ + inline bool operator! (const Cls &that) { return !bool (that); } \ + inline bool operator&& (const Cls &that, bool b) { return bool (that) && b; } \ + inline bool operator|| (const Cls &that, bool b) { return bool (that) || b; } \ + inline bool operator&& (bool b, const Cls &that) { return b && bool (that); } \ + inline bool operator|| (bool b, const Cls &that) { return b || bool (that); } +#else +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP(Cls) +#endif + +/** @def WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL + * Version of WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP for template classes. + * + * @param Tpl Name of the template class to apply the workaround to + * @param ArgsDecl arguments of the template, as declared in |<>| after the + * |template| keyword, including |<>| + * @param Args arguments of the template, as specified in |<>| after the + * template class name when using the, including |<>| + * + * Example: + * @code + * // template class declaration + * template + * class Foo { ... }; + * // applied workaround + * WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL (Foo, , ) + * @endcode + */ +#if defined(_MSC_VER) +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL(Tpl, ArgsDecl, Args) \ + template ArgsDecl \ + inline bool operator! (const Tpl Args &that) { return !bool (that); } \ + template ArgsDecl \ + inline bool operator&& (const Tpl Args &that, bool b) { return bool (that) && b; } \ + template ArgsDecl \ + inline bool operator|| (const Tpl Args &that, bool b) { return bool (that) || b; } \ + template ArgsDecl \ + inline bool operator&& (bool b, const Tpl Args &that) { return b && bool (that); } \ + template ArgsDecl \ + inline bool operator|| (bool b, const Tpl Args &that) { return b || bool (that); } +#else +# define WORKAROUND_MSVC7_ERROR_C2593_FOR_BOOL_OP_TPL(Tpl, ArgsDecl, Args) +#endif + + +/** @def DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP + * Declares the copy constructor and the assignment operation as inlined no-ops + * (non-existent functions) for the given class. Use this macro inside the + * private section if you want to effectively disable these operations for your + * class. + * + * @param Cls class name to declare for + */ +#define DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(Cls) \ + inline Cls(const Cls &); \ + inline Cls &operator= (const Cls &) + + +/** @def DECLARE_CLS_NEW_DELETE_NOOP + * Declares the new and delete operations as no-ops (non-existent functions) + * for the given class. Use this macro inside the private section if you want + * to effectively limit creating class instances on the stack only. + * + * @note The destructor of the given class must not be virtual, otherwise a + * compile time error will occur. Note that this is not a drawback: having + * the virtual destructor for a stack-based class is absolutely useless + * (the real class of the stack-based instance is always known to the compiler + * at compile time, so it will always call the correct destructor). + * + * @param Cls class name to declare for + */ +#define DECLARE_CLS_NEW_DELETE_NOOP(Cls) \ + inline static void *operator new (size_t); \ + inline static void operator delete (void *) + +#endif /* __cplusplus */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/err.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/err.h @@ -0,0 +1,3099 @@ +/** @file + * IPRT - Status Codes. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_err_h +#define ___iprt_err_h + +#include +#include +#include + + +/** @defgroup grp_rt_err RTErr - Status Codes + * @ingroup grp_rt + * + * The IPRT status codes are in two ranges: {0..999} and {22000..32766}. The + * IPRT users are free to use the range {1000..21999}. See RTERR_RANGE1_FIRST, + * RTERR_RANGE1_LAST, RTERR_RANGE2_FIRST, RTERR_RANGE2_LAST, RTERR_USER_FIRST + * and RTERR_USER_LAST. + * + * @{ + */ + +/** @defgroup grp_rt_err_hlp Status Code Helpers + * @{ + */ + +#ifdef __cplusplus +/** + * Strict type validation class. + * + * This is only really useful for type checking the arguments to RT_SUCCESS, + * RT_SUCCESS_NP, RT_FAILURE and RT_FAILURE_NP. The RTErrStrictType2 + * constructor is for integration with external status code strictness regimes. + */ +class RTErrStrictType +{ +protected: + int32_t m_rc; + +public: + /** + * Constructor for interaction with external status code strictness regimes. + * + * This is a special constructor for helping external return code validator + * classes interact cleanly with RT_SUCCESS, RT_SUCCESS_NP, RT_FAILURE and + * RT_FAILURE_NP while barring automatic cast to integer. + * + * @param rcObj IPRT status code object from an automatic cast. + */ + RTErrStrictType(RTErrStrictType2 const rcObj) + : m_rc(rcObj.getValue()) + { + } + + /** + * Integer constructor used by RT_SUCCESS_NP. + * + * @param rc IPRT style status code. + */ + RTErrStrictType(int32_t rc) + : m_rc(rc) + { + } + +#if 0 /** @todo figure where int32_t is long instead of int. */ + /** + * Integer constructor used by RT_SUCCESS_NP. + * + * @param rc IPRT style status code. + */ + RTErrStrictType(signed int rc) + : m_rc(rc) + { + } +#endif + + /** + * Test for success. + */ + bool success() const + { + return m_rc >= 0; + } + +private: + /** @name Try ban a number of wrong types. + * @{ */ + RTErrStrictType(uint8_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint16_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint32_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(uint64_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int8_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int16_t rc) : m_rc(-999) { NOREF(rc); } + RTErrStrictType(int64_t rc) : m_rc(-999) { NOREF(rc); } + /** @todo fight long here - clashes with int32_t/int64_t on some platforms. */ + /** @} */ +}; +#endif /* __cplusplus */ + + +/** @def RTERR_STRICT_RC + * Indicates that RT_SUCCESS_NP, RT_SUCCESS, RT_FAILURE_NP and RT_FAILURE should + * make type enforcing at compile time. + * + * @remarks Only define this for C++ code. + */ +#if defined(__cplusplus) \ + && !defined(RTERR_STRICT_RC) \ + && ( defined(DOXYGEN_RUNNING) \ + || defined(DEBUG) \ + || defined(RT_STRICT) ) +# define RTERR_STRICT_RC 1 +#endif + + +/** @def RT_SUCCESS + * Check for success. We expect success in normal cases, that is the code path depending on + * this check is normally taken. To prevent any prediction use RT_SUCCESS_NP instead. + * + * @returns true if rc indicates success. + * @returns false if rc indicates failure. + * + * @param rc The iprt status code to test. + */ +#define RT_SUCCESS(rc) ( RT_LIKELY(RT_SUCCESS_NP(rc)) ) + +/** @def RT_SUCCESS_NP + * Check for success. Don't predict the result. + * + * @returns true if rc indicates success. + * @returns false if rc indicates failure. + * + * @param rc The iprt status code to test. + */ +#ifdef RTERR_STRICT_RC +# define RT_SUCCESS_NP(rc) ( RTErrStrictType(rc).success() ) +#else +# define RT_SUCCESS_NP(rc) ( (int)(rc) >= VINF_SUCCESS ) +#endif + +/** @def RT_FAILURE + * Check for failure, predicting unlikely. + * + * We don't expect in normal cases, that is the code path depending on this + * check is normally NOT taken. To prevent any prediction use RT_FAILURE_NP + * instead. + * + * @returns true if rc indicates failure. + * @returns false if rc indicates success. + * + * @param rc The iprt status code to test. + * + * @remarks Please structure your code to use the RT_SUCCESS() macro instead of + * RT_FAILURE() where possible, as that gives us a better shot at good + * code with the windows compilers. + */ +#define RT_FAILURE(rc) ( RT_UNLIKELY(!RT_SUCCESS_NP(rc)) ) + +/** @def RT_FAILURE_NP + * Check for failure, no prediction. + * + * @returns true if rc indicates failure. + * @returns false if rc indicates success. + * + * @param rc The iprt status code to test. + */ +#define RT_FAILURE_NP(rc) ( !RT_SUCCESS_NP(rc) ) + +RT_C_DECLS_BEGIN + +/** + * Converts a Darwin HRESULT error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode HRESULT error code. + * @remark Darwin ring-3 only. + */ +RTDECL(int) RTErrConvertFromDarwinCOM(int32_t iNativeCode); + +/** + * Converts a Darwin IOReturn error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode IOReturn error code. + * @remark Darwin only. + */ +RTDECL(int) RTErrConvertFromDarwinIO(int iNativeCode); + +/** + * Converts a Darwin kern_return_t error to an iprt status code. + * + * @returns iprt status code. + * @param iNativeCode kern_return_t error code. + * @remark Darwin only. + */ +RTDECL(int) RTErrConvertFromDarwinKern(int iNativeCode); + +/** + * Converts a Darwin error to an iprt status code. + * + * This will consult RTErrConvertFromDarwinKern, RTErrConvertFromDarwinIO + * and RTErrConvertFromDarwinCOM in this order. The latter is ring-3 only as it + * doesn't apply elsewhere. + * + * @returns iprt status code. + * @param iNativeCode Darwin error code. + * @remarks Darwin only. + * @remarks This is recommended over RTErrConvertFromDarwinKern and RTErrConvertFromDarwinIO + * since these are really just subsets of the same error space. + */ +RTDECL(int) RTErrConvertFromDarwin(int iNativeCode); + +/** + * Converts errno to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode errno code. + */ +RTDECL(int) RTErrConvertFromErrno(unsigned uNativeCode); + +/** + * Converts a L4 errno to a iprt status code. + * + * @returns iprt status code. + * @param uNativeCode l4 errno. + * @remark L4 only. + */ +RTDECL(int) RTErrConvertFromL4Errno(unsigned uNativeCode); + +/** + * Converts NT status code to iprt status code. + * + * Needless to say, this is only available on NT and winXX targets. + * + * @returns iprt status code. + * @param lNativeCode NT status code. + * @remark Windows only. + */ +RTDECL(int) RTErrConvertFromNtStatus(long lNativeCode); + +/** + * Converts OS/2 error code to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode OS/2 error code. + * @remark OS/2 only. + */ +RTDECL(int) RTErrConvertFromOS2(unsigned uNativeCode); + +/** + * Converts Win32 error code to iprt status code. + * + * @returns iprt status code. + * @param uNativeCode Win32 error code. + * @remark Windows only. + */ +RTDECL(int) RTErrConvertFromWin32(unsigned uNativeCode); + +/** + * Converts an iprt status code to a errno status code. + * + * @returns errno status code. + * @param iErr iprt status code. + */ +RTDECL(int) RTErrConvertToErrno(int iErr); + +#ifdef IN_RING3 + +/** + * iprt status code message. + */ +typedef struct RTSTATUSMSG +{ + /** Pointer to the short message string. */ + const char *pszMsgShort; + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Status code number. */ + int iCode; +} RTSTATUSMSG; +/** Pointer to iprt status code message. */ +typedef RTSTATUSMSG *PRTSTATUSMSG; +/** Pointer to const iprt status code message. */ +typedef const RTSTATUSMSG *PCRTSTATUSMSG; + +/** + * Get the message structure corresponding to a given iprt status code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTSTATUSMSG) RTErrGet(int rc); + +/** + * Get the define corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the \#define identifier. + * @param rc The status code. + */ +#define RTErrGetDefine(rc) (RTErrGet(rc)->pszDefine) + +/** + * Get the short description corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the description. + * @param rc The status code. + */ +#define RTErrGetShort(rc) (RTErrGet(rc)->pszMsgShort) + +/** + * Get the full description corresponding to a given iprt status code. + * + * @returns Pointer to read-only string with the description. + * @param rc The status code. + */ +#define RTErrGetFull(rc) (RTErrGet(rc)->pszMsgFull) + +#ifdef RT_OS_WINDOWS +/** + * Windows error code message. + */ +typedef struct RTWINERRMSG +{ + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Error code number. */ + long iCode; +} RTWINERRMSG; +/** Pointer to Windows error code message. */ +typedef RTWINERRMSG *PRTWINERRMSG; +/** Pointer to const Windows error code message. */ +typedef const RTWINERRMSG *PCRTWINERRMSG; + +/** + * Get the message structure corresponding to a given Windows error code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTWINERRMSG) RTErrWinGet(long rc); + +/** On windows COM errors are part of the Windows error database. */ +typedef RTWINERRMSG RTCOMERRMSG; + +#else /* !RT_OS_WINDOWS */ + +/** + * COM/XPCOM error code message. + */ +typedef struct RTCOMERRMSG +{ + /** Pointer to the full message string. */ + const char *pszMsgFull; + /** Pointer to the define string. */ + const char *pszDefine; + /** Error code number. */ + uint32_t iCode; +} RTCOMERRMSG; +#endif /* !RT_OS_WINDOWS */ +/** Pointer to a XPCOM/COM error code message. */ +typedef RTCOMERRMSG *PRTCOMERRMSG; +/** Pointer to const a XPCOM/COM error code message. */ +typedef const RTCOMERRMSG *PCRTCOMERRMSG; + +/** + * Get the message structure corresponding to a given COM/XPCOM error code. + * + * @returns Pointer to read-only message description. + * @param rc The status code. + */ +RTDECL(PCRTCOMERRMSG) RTErrCOMGet(uint32_t rc); + +#endif /* IN_RING3 */ + +/** @defgroup RTERRINFO_FLAGS_XXX RTERRINFO::fFlags + * @{ */ +/** Custom structure (the default). */ +#define RTERRINFO_FLAGS_T_CUSTOM UINT32_C(0) +/** Static structure (RTERRINFOSTATIC). */ +#define RTERRINFO_FLAGS_T_STATIC UINT32_C(1) +/** Allocated structure (RTErrInfoAlloc). */ +#define RTERRINFO_FLAGS_T_ALLOC UINT32_C(2) +/** Reserved type. */ +#define RTERRINFO_FLAGS_T_RESERVED UINT32_C(3) +/** Type mask. */ +#define RTERRINFO_FLAGS_T_MASK UINT32_C(3) +/** Error info is set. */ +#define RTERRINFO_FLAGS_SET RT_BIT_32(2) +/** Fixed flags (magic). */ +#define RTERRINFO_FLAGS_MAGIC UINT32_C(0xbabe0000) +/** The bit mask for the magic value. */ +#define RTERRINFO_FLAGS_MAGIC_MASK UINT32_C(0xffff0000) +/** @} */ + +/** + * Initializes an error info structure. + * + * @returns @a pErrInfo. + * @param pErrInfo The error info structure to init. + * @param pszMsg The message buffer. Must be at least one byte. + * @param cbMsg The size of the message buffer. + */ +DECLINLINE(PRTERRINFO) RTErrInfoInit(PRTERRINFO pErrInfo, char *pszMsg, size_t cbMsg) +{ + *pszMsg = '\0'; + + pErrInfo->fFlags = RTERRINFO_FLAGS_T_CUSTOM | RTERRINFO_FLAGS_MAGIC; + pErrInfo->rc = /*VINF_SUCCESS*/ 0; + pErrInfo->pszMsg = pszMsg; + pErrInfo->cbMsg = cbMsg; + pErrInfo->apvReserved[0] = NULL; + pErrInfo->apvReserved[1] = NULL; + + return pErrInfo; +} + +/** + * Initialize a static error info structure. + * + * @returns Pointer to the core error info structure. + * @param pStaticErrInfo The static error info structure to init. + */ +DECLINLINE(PRTERRINFO) RTErrInfoInitStatic(PRTERRINFOSTATIC pStaticErrInfo) +{ + RTErrInfoInit(&pStaticErrInfo->Core, pStaticErrInfo->szMsg, sizeof(pStaticErrInfo->szMsg)); + pStaticErrInfo->Core.fFlags = RTERRINFO_FLAGS_T_STATIC | RTERRINFO_FLAGS_MAGIC; + return &pStaticErrInfo->Core; +} + +/** + * Allocates a error info structure with a buffer at least the given size. + * + * @returns Pointer to an error info structure on success, NULL on failure. + * + * @param cbMsg The minimum message buffer size. Use 0 to get + * the default buffer size. + */ +RTDECL(PRTERRINFO) RTErrInfoAlloc(size_t cbMsg); + +/** + * Same as RTErrInfoAlloc, except that an IPRT status code is returned. + * + * @returns IPRT status code. + * + * @param cbMsg The minimum message buffer size. Use 0 to get + * the default buffer size. + * @param ppErrInfo Where to store the pointer to the allocated + * error info structure on success. This is + * always set to NULL. + */ +RTDECL(int) RTErrInfoAllocEx(size_t cbMsg, PRTERRINFO *ppErrInfo); + +/** + * Frees an error info structure allocated by RTErrInfoAlloc or + * RTErrInfoAllocEx. + * + * @param pErrInfo The error info structure. + */ +RTDECL(void) RTErrInfoFree(PRTERRINFO pErrInfo); + +/** + * Fills in the error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszMsg The error message string. + */ +RTDECL(int) RTErrInfoSet(PRTERRINFO pErrInfo, int rc, const char *pszMsg); + +/** + * Fills in the error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoSetF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Fills in the error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoSetV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Adds more error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszMsg The error message string to add. + */ +RTDECL(int) RTErrInfoAdd(PRTERRINFO pErrInfo, int rc, const char *pszMsg); + +/** + * Adds more error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string to add. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoAddF(PRTERRINFO pErrInfo, int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Adds more error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param pszFormat The format string to add. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoAddV(PRTERRINFO pErrInfo, int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0); + +/** @name RTERRINFO_LOG_F_XXX + * @{ */ +/** Both debug and release log. */ +#define RTERRINFO_LOG_F_RELEASE RT_BIT_32(0) +/** @} */ + +/** + * Fills in the error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszMsg The error message string. + */ +RTDECL(int) RTErrInfoLogAndSet(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg); + +/** + * Fills in the error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoLogAndSetF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Fills in the error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoLogAndSetV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * Adds more error info details. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszMsg The error message string to add. + */ +RTDECL(int) RTErrInfoLogAndAdd(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszMsg); + +/** + * Adds more error info details, with a sprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string to add. + * @param ... The format arguments. + */ +RTDECL(int) RTErrInfoLogAndAddF(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Adds more error info details, with a vsprintf style message. + * + * @returns @a rc. + * + * @param pErrInfo The error info structure to fill in. + * @param rc The status code to return. + * @param iLogGroup The logging group. + * @param fFlags RTERRINFO_LOG_F_XXX. + * @param pszFormat The format string to add. + * @param va The format arguments. + */ +RTDECL(int) RTErrInfoLogAndAddV(PRTERRINFO pErrInfo, int rc, uint32_t iLogGroup, uint32_t fFlags, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(5, 0); + +/** @name Macros wrapping the RTErrInfoLog* functions. + * @{ */ +#define RTERRINFO_LOG_SET( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg) +#define RTERRINFO_LOG_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va) +#define RTERRINFO_LOG_ADD( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg) +#define RTERRINFO_LOG_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, 0, a_pszMsg, a_va) +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RTERRINFO_LOG_ADD_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__) +# define RTERRINFO_LOG_SET_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, 0, __VA_ARGS__) +#endif + +#define RTERRINFO_LOG_REL_SET( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndSet( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg) +#define RTERRINFO_LOG_REL_SET_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndSetV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va) +#define RTERRINFO_LOG_REL_ADD( a_pErrInfo, a_rc, a_pszMsg) RTErrInfoLogAndAdd( a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg) +#define RTERRINFO_LOG_REL_ADD_V(a_pErrInfo, a_rc, a_pszMsg, a_va) RTErrInfoLogAndAddV(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, a_pszMsg, a_va) +#ifdef RT_COMPILER_SUPPORTS_VA_ARGS +# define RTERRINFO_LOG_REL_ADD_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndAddF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__) +# define RTERRINFO_LOG_REL_SET_F(a_pErrInfo, a_rc, ...) RTErrInfoLogAndSetF(a_pErrInfo, a_rc, LOG_GROUP, RTERRINFO_LOG_F_RELEASE, __VA_ARGS__) +#else +# define RTERRINFO_LOG_REL_ADD_F RTErrInfoSetF +# define RTERRINFO_LOG_REL_SET_F RTErrInfoAddF +#endif +/** @} */ + + +/** + * Checks if the error info is set. + * + * @returns true if set, false if not. + * @param pErrInfo The error info structure. NULL is OK. + */ +DECLINLINE(bool) RTErrInfoIsSet(PCRTERRINFO pErrInfo) +{ + if (!pErrInfo) + return false; + return (pErrInfo->fFlags & (RTERRINFO_FLAGS_MAGIC_MASK | RTERRINFO_FLAGS_SET)) + == (RTERRINFO_FLAGS_MAGIC | RTERRINFO_FLAGS_SET); +} + +/** + * Clears the error info structure. + * + * @param pErrInfo The error info structure. NULL is OK. + */ +DECLINLINE(void) RTErrInfoClear(PRTERRINFO pErrInfo) +{ + if (pErrInfo) + { + pErrInfo->fFlags &= ~RTERRINFO_FLAGS_SET; + pErrInfo->rc = /*VINF_SUCCESS*/0; + *pErrInfo->pszMsg = '\0'; + } +} + +/** + * Storage for error variables. + * + * @remarks Do NOT touch the members! They are platform specific and what's + * where may change at any time! + */ +typedef union RTERRVARS +{ + int8_t ai8Vars[32]; + int16_t ai16Vars[16]; + int32_t ai32Vars[8]; + int64_t ai64Vars[4]; +} RTERRVARS; +/** Pointer to an error variable storage union. */ +typedef RTERRVARS *PRTERRVARS; +/** Pointer to a const error variable storage union. */ +typedef RTERRVARS const *PCRTERRVARS; + +/** + * Saves the error variables. + * + * @returns @a pVars. + * @param pVars The variable storage union. + */ +RTDECL(PRTERRVARS) RTErrVarsSave(PRTERRVARS pVars); + +/** + * Restores the error variables. + * + * @param pVars The variable storage union. + */ +RTDECL(void) RTErrVarsRestore(PCRTERRVARS pVars); + +/** + * Checks if the first variable set equals the second. + * + * @returns true if they are equal, false if not. + * @param pVars1 The first variable storage union. + * @param pVars2 The second variable storage union. + */ +RTDECL(bool) RTErrVarsAreEqual(PCRTERRVARS pVars1, PCRTERRVARS pVars2); + +/** + * Checks if the (live) error variables have changed since we saved them. + * + * @returns @c true if they have changed, @c false if not. + * @param pVars The saved variables to compare the current state + * against. + */ +RTDECL(bool) RTErrVarsHaveChanged(PCRTERRVARS pVars); + +RT_C_DECLS_END + +/** @} */ + +/** @name Status Code Ranges + * @{ */ +/** The first status code in the primary IPRT range. */ +#define RTERR_RANGE1_FIRST 0 +/** The last status code in the primary IPRT range. */ +#define RTERR_RANGE1_LAST 999 + +/** The first status code in the secondary IPRT range. */ +#define RTERR_RANGE2_FIRST 22000 +/** The last status code in the secondary IPRT range. */ +#define RTERR_RANGE2_LAST 32766 + +/** The first status code in the user range. */ +#define RTERR_USER_FIRST 1000 +/** The last status code in the user range. */ +#define RTERR_USER_LAST 21999 +/** @} */ + + +/* SED-START */ + +/** @name Misc. Status Codes + * @{ + */ +/** Success. */ +#define VINF_SUCCESS 0 + +/** General failure - DON'T USE THIS!!! */ +#define VERR_GENERAL_FAILURE (-1) +/** Invalid parameter. */ +#define VERR_INVALID_PARAMETER (-2) +/** Invalid parameter. */ +#define VWRN_INVALID_PARAMETER 2 +/** Invalid magic or cookie. */ +#define VERR_INVALID_MAGIC (-3) +/** Invalid magic or cookie. */ +#define VWRN_INVALID_MAGIC 3 +/** Invalid loader handle. */ +#define VERR_INVALID_HANDLE (-4) +/** Invalid loader handle. */ +#define VWRN_INVALID_HANDLE 4 +/** Failed to lock the address range. */ +#define VERR_LOCK_FAILED (-5) +/** Invalid memory pointer. */ +#define VERR_INVALID_POINTER (-6) +/** Failed to patch the IDT. */ +#define VERR_IDT_FAILED (-7) +/** Memory allocation failed. */ +#define VERR_NO_MEMORY (-8) +/** Already loaded. */ +#define VERR_ALREADY_LOADED (-9) +/** Permission denied. */ +#define VERR_PERMISSION_DENIED (-10) +/** Permission denied. */ +#define VINF_PERMISSION_DENIED 10 +/** Version mismatch. */ +#define VERR_VERSION_MISMATCH (-11) +/** The request function is not implemented. */ +#define VERR_NOT_IMPLEMENTED (-12) +/** Invalid flags was given. */ +#define VERR_INVALID_FLAGS (-13) + +/** Not equal. */ +#define VERR_NOT_EQUAL (-18) +/** The specified path does not point at a symbolic link. */ +#define VERR_NOT_SYMLINK (-19) +/** Failed to allocate temporary memory. */ +#define VERR_NO_TMP_MEMORY (-20) +/** Invalid file mode mask (RTFMODE). */ +#define VERR_INVALID_FMODE (-21) +/** Incorrect call order. */ +#define VERR_WRONG_ORDER (-22) +/** There is no TLS (thread local storage) available for storing the current thread. */ +#define VERR_NO_TLS_FOR_SELF (-23) +/** Failed to set the TLS (thread local storage) entry which points to our thread structure. */ +#define VERR_FAILED_TO_SET_SELF_TLS (-24) +/** Not able to allocate contiguous memory. */ +#define VERR_NO_CONT_MEMORY (-26) +/** No memory available for page table or page directory. */ +#define VERR_NO_PAGE_MEMORY (-27) +/** Already initialized. */ +#define VINF_ALREADY_INITIALIZED 28 +/** The specified thread is dead. */ +#define VERR_THREAD_IS_DEAD (-29) +/** The specified thread is not waitable. */ +#define VERR_THREAD_NOT_WAITABLE (-30) +/** Pagetable not present. */ +#define VERR_PAGE_TABLE_NOT_PRESENT (-31) +/** Invalid context. + * Typically an API was used by the wrong thread. */ +#define VERR_INVALID_CONTEXT (-32) +/** The per process timer is busy. */ +#define VERR_TIMER_BUSY (-33) +/** Address conflict. */ +#define VERR_ADDRESS_CONFLICT (-34) +/** Unresolved (unknown) host platform error. */ +#define VERR_UNRESOLVED_ERROR (-35) +/** Invalid function. */ +#define VERR_INVALID_FUNCTION (-36) +/** Not supported. */ +#define VERR_NOT_SUPPORTED (-37) +/** Not supported. */ +#define VINF_NOT_SUPPORTED 37 +/** Access denied. */ +#define VERR_ACCESS_DENIED (-38) +/** Call interrupted. */ +#define VERR_INTERRUPTED (-39) +/** Call interrupted. */ +#define VINF_INTERRUPTED 39 +/** Timeout. */ +#define VERR_TIMEOUT (-40) +/** Timeout. */ +#define VINF_TIMEOUT 40 +/** Buffer too small to save result. */ +#define VERR_BUFFER_OVERFLOW (-41) +/** Buffer too small to save result. */ +#define VINF_BUFFER_OVERFLOW 41 +/** Data size overflow. */ +#define VERR_TOO_MUCH_DATA (-42) +/** Max threads number reached. */ +#define VERR_MAX_THRDS_REACHED (-43) +/** Max process number reached. */ +#define VERR_MAX_PROCS_REACHED (-44) +/** The recipient process has refused the signal. */ +#define VERR_SIGNAL_REFUSED (-45) +/** A signal is already pending. */ +#define VERR_SIGNAL_PENDING (-46) +/** The signal being posted is not correct. */ +#define VERR_SIGNAL_INVALID (-47) +/** The state changed. + * This is a generic error message and needs a context to make sense. */ +#define VERR_STATE_CHANGED (-48) +/** Warning, the state changed. + * This is a generic error message and needs a context to make sense. */ +#define VWRN_STATE_CHANGED 48 +/** Error while parsing UUID string */ +#define VERR_INVALID_UUID_FORMAT (-49) +/** The specified process was not found. */ +#define VERR_PROCESS_NOT_FOUND (-50) +/** The process specified to a non-block wait had not exited. */ +#define VERR_PROCESS_RUNNING (-51) +/** Retry the operation. */ +#define VERR_TRY_AGAIN (-52) +/** Retry the operation. */ +#define VINF_TRY_AGAIN 52 +/** Generic parse error. */ +#define VERR_PARSE_ERROR (-53) +/** Value out of range. */ +#define VERR_OUT_OF_RANGE (-54) +/** A numeric conversion encountered a value which was too big for the target. */ +#define VERR_NUMBER_TOO_BIG (-55) +/** A numeric conversion encountered a value which was too big for the target. */ +#define VWRN_NUMBER_TOO_BIG 55 +/** The number begin converted (string) contained no digits. */ +#define VERR_NO_DIGITS (-56) +/** The number begin converted (string) contained no digits. */ +#define VWRN_NO_DIGITS 56 +/** Encountered a '-' during conversion to an unsigned value. */ +#define VERR_NEGATIVE_UNSIGNED (-57) +/** Encountered a '-' during conversion to an unsigned value. */ +#define VWRN_NEGATIVE_UNSIGNED 57 +/** Error while characters translation (unicode and so). */ +#define VERR_NO_TRANSLATION (-58) +/** Error while characters translation (unicode and so). */ +#define VWRN_NO_TRANSLATION 58 +/** Encountered unicode code point which is reserved for use as endian indicator (0xffff or 0xfffe). */ +#define VERR_CODE_POINT_ENDIAN_INDICATOR (-59) +/** Encountered unicode code point in the surrogate range (0xd800 to 0xdfff). */ +#define VERR_CODE_POINT_SURROGATE (-60) +/** A string claiming to be UTF-8 is incorrectly encoded. */ +#define VERR_INVALID_UTF8_ENCODING (-61) +/** A string claiming to be in UTF-16 is incorrectly encoded. */ +#define VERR_INVALID_UTF16_ENCODING (-62) +/** Encountered a unicode code point which cannot be represented as UTF-16. */ +#define VERR_CANT_RECODE_AS_UTF16 (-63) +/** Got an out of memory condition trying to allocate a string. */ +#define VERR_NO_STR_MEMORY (-64) +/** Got an out of memory condition trying to allocate a UTF-16 (/UCS-2) string. */ +#define VERR_NO_UTF16_MEMORY (-65) +/** Get an out of memory condition trying to allocate a code point array. */ +#define VERR_NO_CODE_POINT_MEMORY (-66) +/** Can't free the memory because it's used in mapping. */ +#define VERR_MEMORY_BUSY (-67) +/** The timer can't be started because it's already active. */ +#define VERR_TIMER_ACTIVE (-68) +/** The timer can't be stopped because it's already suspended. */ +#define VERR_TIMER_SUSPENDED (-69) +/** The operation was cancelled by the user (copy) or another thread (local ipc). */ +#define VERR_CANCELLED (-70) +/** Failed to initialize a memory object. + * Exactly what this means is OS specific. */ +#define VERR_MEMOBJ_INIT_FAILED (-71) +/** Out of memory condition when allocating memory with low physical backing. */ +#define VERR_NO_LOW_MEMORY (-72) +/** Out of memory condition when allocating physical memory (without mapping). */ +#define VERR_NO_PHYS_MEMORY (-73) +/** The address (virtual or physical) is too big. */ +#define VERR_ADDRESS_TOO_BIG (-74) +/** Failed to map a memory object. */ +#define VERR_MAP_FAILED (-75) +/** Trailing characters. */ +#define VERR_TRAILING_CHARS (-76) +/** Trailing characters. */ +#define VWRN_TRAILING_CHARS 76 +/** Trailing spaces. */ +#define VERR_TRAILING_SPACES (-77) +/** Trailing spaces. */ +#define VWRN_TRAILING_SPACES 77 +/** Generic not found error. */ +#define VERR_NOT_FOUND (-78) +/** Generic not found warning. */ +#define VWRN_NOT_FOUND 78 +/** Generic invalid state error. */ +#define VERR_INVALID_STATE (-79) +/** Generic invalid state warning. */ +#define VWRN_INVALID_STATE 79 +/** Generic out of resources error. */ +#define VERR_OUT_OF_RESOURCES (-80) +/** Generic out of resources warning. */ +#define VWRN_OUT_OF_RESOURCES 80 +/** No more handles available, too many open handles. */ +#define VERR_NO_MORE_HANDLES (-81) +/** Preemption is disabled. + * The requested operation can only be performed when preemption is enabled. */ +#define VERR_PREEMPT_DISABLED (-82) +/** End of string. */ +#define VERR_END_OF_STRING (-83) +/** End of string. */ +#define VINF_END_OF_STRING 83 +/** A page count is out of range. */ +#define VERR_PAGE_COUNT_OUT_OF_RANGE (-84) +/** Generic object destroyed status. */ +#define VERR_OBJECT_DESTROYED (-85) +/** Generic object was destroyed by the call status. */ +#define VINF_OBJECT_DESTROYED 85 +/** Generic dangling objects status. */ +#define VERR_DANGLING_OBJECTS (-86) +/** Generic dangling objects status. */ +#define VWRN_DANGLING_OBJECTS 86 +/** Invalid Base64 encoding. */ +#define VERR_INVALID_BASE64_ENCODING (-87) +/** Return instigated by a callback or similar. */ +#define VERR_CALLBACK_RETURN (-88) +/** Return instigated by a callback or similar. */ +#define VINF_CALLBACK_RETURN 88 +/** Authentication failure. */ +#define VERR_AUTHENTICATION_FAILURE (-89) +/** Not a power of two. */ +#define VERR_NOT_POWER_OF_TWO (-90) +/** Status code, typically given as a parameter, that isn't supposed to be used. */ +#define VERR_IGNORED (-91) +/** Concurrent access to the object is not allowed. */ +#define VERR_CONCURRENT_ACCESS (-92) +/** The caller does not have a reference to the object. + * This status is used when two threads is caught sharing the same object + * reference. */ +#define VERR_CALLER_NO_REFERENCE (-93) +/** Generic no change error. */ +#define VERR_NO_CHANGE (-95) +/** Generic no change info. */ +#define VINF_NO_CHANGE 95 +/** Out of memory condition when allocating executable memory. */ +#define VERR_NO_EXEC_MEMORY (-96) +/** The alignment is not supported. */ +#define VERR_UNSUPPORTED_ALIGNMENT (-97) +/** The alignment is not really supported, however we got lucky with this + * allocation. */ +#define VINF_UNSUPPORTED_ALIGNMENT 97 +/** Duplicate something. */ +#define VERR_DUPLICATE (-98) +/** Something is missing. */ +#define VERR_MISSING (-99) +/** An unexpected (/unknown) exception was caught. */ +#define VERR_UNEXPECTED_EXCEPTION (-22400) +/** Buffer underflow. */ +#define VERR_BUFFER_UNDERFLOW (-22401) +/** Buffer underflow. */ +#define VINF_BUFFER_UNDERFLOW 22401 +/** Uneven input. */ +#define VERR_UNEVEN_INPUT (-22402) +/** Something is not available or not working properly. */ +#define VERR_NOT_AVAILABLE (-22403) +/** The RTPROC_FLAGS_DETACHED flag isn't supported. */ +#define VERR_PROC_DETACH_NOT_SUPPORTED (-22404) +/** An account is restricted in a certain way. */ +#define VERR_ACCOUNT_RESTRICTED (-22405) +/** An account is restricted in a certain way. */ +#define VINF_ACCOUNT_RESTRICTED 22405 +/** Not able satisfy all the requirements of the request. */ +#define VERR_UNABLE_TO_SATISFY_REQUIREMENTS (-22406) +/** Not able satisfy all the requirements of the request. */ +#define VWRN_UNABLE_TO_SATISFY_REQUIREMENTS 22406 +/** The requested allocation is too big. */ +#define VERR_ALLOCATION_TOO_BIG (-22407) +/** Mismatch. */ +#define VERR_MISMATCH (-22408) +/** Wrong type. */ +#define VERR_WRONG_TYPE (-22409) +/** This indicates that the process does not have sufficient privileges to + * perform the operation. */ +#define VERR_PRIVILEGE_NOT_HELD (-22410) +/** Process does not have the trusted code base (TCB) privilege needed for user + * authentication or/and process creation as a given user. TCB is also called + * 'Act as part of the operating system'. */ +#define VERR_PROC_TCB_PRIV_NOT_HELD (-22411) +/** Process does not have the assign primary token (APT) privilege needed + * for creating process as a given user. APT is also called 'Replace a process + * level token'. */ +#define VERR_PROC_APT_PRIV_NOT_HELD (-22412) +/** Process does not have the increase quota (IQ) privilege needed for + * creating a process as a given user. IQ is also called 'Increase quotas'. */ +#define VERR_PROC_IQ_PRIV_NOT_HELD (-22413) +/** The system has too many CPUs. */ +#define VERR_MP_TOO_MANY_CPUS (-22414) +/** @} */ + + +/** @name Common File/Disk/Pipe/etc Status Codes + * @{ + */ +/** Unresolved (unknown) file i/o error. */ +#define VERR_FILE_IO_ERROR (-100) +/** File/Device open failed. */ +#define VERR_OPEN_FAILED (-101) +/** File not found. */ +#define VERR_FILE_NOT_FOUND (-102) +/** Path not found. */ +#define VERR_PATH_NOT_FOUND (-103) +/** Invalid (malformed) file/path name. */ +#define VERR_INVALID_NAME (-104) +/** The object in question already exists. */ +#define VERR_ALREADY_EXISTS (-105) +/** The object in question already exists. */ +#define VWRN_ALREADY_EXISTS 105 +/** Too many open files. */ +#define VERR_TOO_MANY_OPEN_FILES (-106) +/** Seek error. */ +#define VERR_SEEK (-107) +/** Seek below file start. */ +#define VERR_NEGATIVE_SEEK (-108) +/** Trying to seek on device. */ +#define VERR_SEEK_ON_DEVICE (-109) +/** Reached the end of the file. */ +#define VERR_EOF (-110) +/** Reached the end of the file. */ +#define VINF_EOF 110 +/** Generic file read error. */ +#define VERR_READ_ERROR (-111) +/** Generic file write error. */ +#define VERR_WRITE_ERROR (-112) +/** Write protect error. */ +#define VERR_WRITE_PROTECT (-113) +/** Sharing violation, file is being used by another process. */ +#define VERR_SHARING_VIOLATION (-114) +/** Unable to lock a region of a file. */ +#define VERR_FILE_LOCK_FAILED (-115) +/** File access error, another process has locked a portion of the file. */ +#define VERR_FILE_LOCK_VIOLATION (-116) +/** File or directory can't be created. */ +#define VERR_CANT_CREATE (-117) +/** Directory can't be deleted. */ +#define VERR_CANT_DELETE_DIRECTORY (-118) +/** Can't move file to another disk. */ +#define VERR_NOT_SAME_DEVICE (-119) +/** The filename or extension is too long. */ +#define VERR_FILENAME_TOO_LONG (-120) +/** Media not present in drive. */ +#define VERR_MEDIA_NOT_PRESENT (-121) +/** The type of media was not recognized. Not formatted? */ +#define VERR_MEDIA_NOT_RECOGNIZED (-122) +/** Can't unlock - region was not locked. */ +#define VERR_FILE_NOT_LOCKED (-123) +/** Unrecoverable error: lock was lost. */ +#define VERR_FILE_LOCK_LOST (-124) +/** Can't delete directory with files. */ +#define VERR_DIR_NOT_EMPTY (-125) +/** A directory operation was attempted on a non-directory object. */ +#define VERR_NOT_A_DIRECTORY (-126) +/** A non-directory operation was attempted on a directory object. */ +#define VERR_IS_A_DIRECTORY (-127) +/** Tried to grow a file beyond the limit imposed by the process or the filesystem. */ +#define VERR_FILE_TOO_BIG (-128) +/** No pending request the aio context has to wait for completion. */ +#define VERR_FILE_AIO_NO_REQUEST (-129) +/** The request could not be canceled or prepared for another transfer + * because it is still in progress. */ +#define VERR_FILE_AIO_IN_PROGRESS (-130) +/** The request could not be canceled because it already completed. */ +#define VERR_FILE_AIO_COMPLETED (-131) +/** The I/O context couldn't be destroyed because there are still pending requests. */ +#define VERR_FILE_AIO_BUSY (-132) +/** The requests couldn't be submitted because that would exceed the capacity of the context. */ +#define VERR_FILE_AIO_LIMIT_EXCEEDED (-133) +/** The request was canceled. */ +#define VERR_FILE_AIO_CANCELED (-134) +/** The request wasn't submitted so it can't be canceled. */ +#define VERR_FILE_AIO_NOT_SUBMITTED (-135) +/** A request was not prepared and thus could not be submitted. */ +#define VERR_FILE_AIO_NOT_PREPARED (-136) +/** Not all requests could be submitted due to resource shortage. */ +#define VERR_FILE_AIO_INSUFFICIENT_RESSOURCES (-137) +/** Device or resource is busy. */ +#define VERR_RESOURCE_BUSY (-138) +/** A file operation was attempted on a non-file object. */ +#define VERR_NOT_A_FILE (-139) +/** A non-file operation was attempted on a file object. */ +#define VERR_IS_A_FILE (-140) +/** Unexpected filesystem object type. */ +#define VERR_UNEXPECTED_FS_OBJ_TYPE (-141) +/** A path does not start with a root specification. */ +#define VERR_PATH_DOES_NOT_START_WITH_ROOT (-142) +/** A path is relative, expected an absolute path. */ +#define VERR_PATH_IS_RELATIVE (-143) +/** A path is not relative (start with root), expected an relative path. */ +#define VERR_PATH_IS_NOT_RELATIVE (-144) +/** Zero length path. */ +#define VERR_PATH_ZERO_LENGTH (-145) +/** There are not enough events available on the host to create the I/O context. + * This exact meaning is host platform dependent. */ +#define VERR_FILE_AIO_INSUFFICIENT_EVENTS (-146) +/** @} */ + + +/** @name Generic Filesystem I/O Status Codes + * @{ + */ +/** Unresolved (unknown) disk i/o error. */ +#define VERR_DISK_IO_ERROR (-150) +/** Invalid drive number. */ +#define VERR_INVALID_DRIVE (-151) +/** Disk is full. */ +#define VERR_DISK_FULL (-152) +/** Disk was changed. */ +#define VERR_DISK_CHANGE (-153) +/** Drive is locked. */ +#define VERR_DRIVE_LOCKED (-154) +/** The specified disk or diskette cannot be accessed. */ +#define VERR_DISK_INVALID_FORMAT (-155) +/** Too many symbolic links. */ +#define VERR_TOO_MANY_SYMLINKS (-156) +/** The OS does not support setting the time stamps on a symbolic link. */ +#define VERR_NS_SYMLINK_SET_TIME (-157) +/** The OS does not support changing the owner of a symbolic link. */ +#define VERR_NS_SYMLINK_CHANGE_OWNER (-158) +/** Symbolic link not allowed. */ +#define VERR_SYMLINK_NOT_ALLOWED (-159) +/** @} */ + + +/** @name Generic Directory Enumeration Status Codes + * @{ + */ +/** Unresolved (unknown) search error. */ +#define VERR_SEARCH_ERROR (-200) +/** No more files found. */ +#define VERR_NO_MORE_FILES (-201) +/** No more search handles available. */ +#define VERR_NO_MORE_SEARCH_HANDLES (-202) +/** RTDirReadEx() failed to retrieve the extra data which was requested. */ +#define VWRN_NO_DIRENT_INFO 203 +/** @} */ + + +/** @name Internal Processing Errors + * @{ + */ +/** Internal error - this should never happen. */ +#define VERR_INTERNAL_ERROR (-225) +/** Internal error no. 2. */ +#define VERR_INTERNAL_ERROR_2 (-226) +/** Internal error no. 3. */ +#define VERR_INTERNAL_ERROR_3 (-227) +/** Internal error no. 4. */ +#define VERR_INTERNAL_ERROR_4 (-228) +/** Internal error no. 5. */ +#define VERR_INTERNAL_ERROR_5 (-229) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_STATUS (-230) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_INFO_STATUS (-231) +/** Internal error: Unexpected status code. */ +#define VERR_IPE_UNEXPECTED_ERROR_STATUS (-232) +/** Internal error: Uninitialized status code. + * @remarks This is used by value elsewhere. */ +#define VERR_IPE_UNINITIALIZED_STATUS (-233) +/** Internal error: Supposedly unreachable default case in a switch. */ +#define VERR_IPE_NOT_REACHED_DEFAULT_CASE (-234) +/** @} */ + + +/** @name Generic Device I/O Status Codes + * @{ + */ +/** Unresolved (unknown) device i/o error. */ +#define VERR_DEV_IO_ERROR (-250) +/** Device i/o: Bad unit. */ +#define VERR_IO_BAD_UNIT (-251) +/** Device i/o: Not ready. */ +#define VERR_IO_NOT_READY (-252) +/** Device i/o: Bad command. */ +#define VERR_IO_BAD_COMMAND (-253) +/** Device i/o: CRC error. */ +#define VERR_IO_CRC (-254) +/** Device i/o: Bad length. */ +#define VERR_IO_BAD_LENGTH (-255) +/** Device i/o: Sector not found. */ +#define VERR_IO_SECTOR_NOT_FOUND (-256) +/** Device i/o: General failure. */ +#define VERR_IO_GEN_FAILURE (-257) +/** @} */ + + +/** @name Generic Pipe I/O Status Codes + * @{ + */ +/** Unresolved (unknown) pipe i/o error. */ +#define VERR_PIPE_IO_ERROR (-300) +/** Broken pipe. */ +#define VERR_BROKEN_PIPE (-301) +/** Bad pipe. */ +#define VERR_BAD_PIPE (-302) +/** Pipe is busy. */ +#define VERR_PIPE_BUSY (-303) +/** No data in pipe. */ +#define VERR_NO_DATA (-304) +/** Pipe is not connected. */ +#define VERR_PIPE_NOT_CONNECTED (-305) +/** More data available in pipe. */ +#define VERR_MORE_DATA (-306) +/** Expected read pipe, got a write pipe instead. */ +#define VERR_PIPE_NOT_READ (-307) +/** Expected write pipe, got a read pipe instead. */ +#define VERR_PIPE_NOT_WRITE (-308) +/** @} */ + + +/** @name Generic Semaphores Status Codes + * @{ + */ +/** Unresolved (unknown) semaphore error. */ +#define VERR_SEM_ERROR (-350) +/** Too many semaphores. */ +#define VERR_TOO_MANY_SEMAPHORES (-351) +/** Exclusive semaphore is owned by another process. */ +#define VERR_EXCL_SEM_ALREADY_OWNED (-352) +/** The semaphore is set and cannot be closed. */ +#define VERR_SEM_IS_SET (-353) +/** The semaphore cannot be set again. */ +#define VERR_TOO_MANY_SEM_REQUESTS (-354) +/** Attempt to release mutex not owned by caller. */ +#define VERR_NOT_OWNER (-355) +/** The semaphore has been opened too many times. */ +#define VERR_TOO_MANY_OPENS (-356) +/** The maximum posts for the event semaphore has been reached. */ +#define VERR_TOO_MANY_POSTS (-357) +/** The event semaphore has already been posted. */ +#define VERR_ALREADY_POSTED (-358) +/** The event semaphore has already been reset. */ +#define VERR_ALREADY_RESET (-359) +/** The semaphore is in use. */ +#define VERR_SEM_BUSY (-360) +/** The previous ownership of this semaphore has ended. */ +#define VERR_SEM_OWNER_DIED (-361) +/** Failed to open semaphore by name - not found. */ +#define VERR_SEM_NOT_FOUND (-362) +/** Semaphore destroyed while waiting. */ +#define VERR_SEM_DESTROYED (-363) +/** Nested ownership requests are not permitted for this semaphore type. */ +#define VERR_SEM_NESTED (-364) +/** The release call only release a semaphore nesting, i.e. the caller is still + * holding the semaphore. */ +#define VINF_SEM_NESTED (364) +/** Deadlock detected. */ +#define VERR_DEADLOCK (-365) +/** Ping-Pong listen or speak out of turn error. */ +#define VERR_SEM_OUT_OF_TURN (-366) +/** Tried to take a semaphore in a bad context. */ +#define VERR_SEM_BAD_CONTEXT (-367) +/** Don't spin for the semaphore, but it is safe to try grab it. */ +#define VINF_SEM_BAD_CONTEXT (367) +/** Wrong locking order detected. */ +#define VERR_SEM_LV_WRONG_ORDER (-368) +/** Wrong release order detected. */ +#define VERR_SEM_LV_WRONG_RELEASE_ORDER (-369) +/** Attempt to recursively enter a non-recursive lock. */ +#define VERR_SEM_LV_NESTED (-370) +/** Invalid parameters passed to the lock validator. */ +#define VERR_SEM_LV_INVALID_PARAMETER (-371) +/** The lock validator detected a deadlock. */ +#define VERR_SEM_LV_DEADLOCK (-372) +/** The lock validator detected an existing deadlock. + * The deadlock was not caused by the current operation, but existed already. */ +#define VERR_SEM_LV_EXISTING_DEADLOCK (-373) +/** Not the lock owner according our records. */ +#define VERR_SEM_LV_NOT_OWNER (-374) +/** An illegal lock upgrade was attempted. */ +#define VERR_SEM_LV_ILLEGAL_UPGRADE (-375) +/** The thread is not a valid signaller of the event. */ +#define VERR_SEM_LV_NOT_SIGNALLER (-376) +/** Internal error in the lock validator or related components. */ +#define VERR_SEM_LV_INTERNAL_ERROR (-377) +/** @} */ + + +/** @name Generic Network I/O Status Codes + * @{ + */ +/** Unresolved (unknown) network error. */ +#define VERR_NET_IO_ERROR (-400) +/** The network is busy or is out of resources. */ +#define VERR_NET_OUT_OF_RESOURCES (-401) +/** Net host name not found. */ +#define VERR_NET_HOST_NOT_FOUND (-402) +/** Network path not found. */ +#define VERR_NET_PATH_NOT_FOUND (-403) +/** General network printing error. */ +#define VERR_NET_PRINT_ERROR (-404) +/** The machine is not on the network. */ +#define VERR_NET_NO_NETWORK (-405) +/** Name is not unique on the network. */ +#define VERR_NET_NOT_UNIQUE_NAME (-406) + +/* These are BSD networking error codes - numbers correspond, don't mess! */ +/** Operation in progress. */ +#define VERR_NET_IN_PROGRESS (-436) +/** Operation already in progress. */ +#define VERR_NET_ALREADY_IN_PROGRESS (-437) +/** Attempted socket operation with a non-socket handle. + * (This includes closed handles.) */ +#define VERR_NET_NOT_SOCKET (-438) +/** Destination address required. */ +#define VERR_NET_DEST_ADDRESS_REQUIRED (-439) +/** Message too long. */ +#define VERR_NET_MSG_SIZE (-440) +/** Protocol wrong type for socket. */ +#define VERR_NET_PROTOCOL_TYPE (-441) +/** Protocol not available. */ +#define VERR_NET_PROTOCOL_NOT_AVAILABLE (-442) +/** Protocol not supported. */ +#define VERR_NET_PROTOCOL_NOT_SUPPORTED (-443) +/** Socket type not supported. */ +#define VERR_NET_SOCKET_TYPE_NOT_SUPPORTED (-444) +/** Operation not supported. */ +#define VERR_NET_OPERATION_NOT_SUPPORTED (-445) +/** Protocol family not supported. */ +#define VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED (-446) +/** Address family not supported by protocol family. */ +#define VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED (-447) +/** Address already in use. */ +#define VERR_NET_ADDRESS_IN_USE (-448) +/** Can't assign requested address. */ +#define VERR_NET_ADDRESS_NOT_AVAILABLE (-449) +/** Network is down. */ +#define VERR_NET_DOWN (-450) +/** Network is unreachable. */ +#define VERR_NET_UNREACHABLE (-451) +/** Network dropped connection on reset. */ +#define VERR_NET_CONNECTION_RESET (-452) +/** Software caused connection abort. */ +#define VERR_NET_CONNECTION_ABORTED (-453) +/** Connection reset by peer. */ +#define VERR_NET_CONNECTION_RESET_BY_PEER (-454) +/** No buffer space available. */ +#define VERR_NET_NO_BUFFER_SPACE (-455) +/** Socket is already connected. */ +#define VERR_NET_ALREADY_CONNECTED (-456) +/** Socket is not connected. */ +#define VERR_NET_NOT_CONNECTED (-457) +/** Can't send after socket shutdown. */ +#define VERR_NET_SHUTDOWN (-458) +/** Too many references: can't splice. */ +#define VERR_NET_TOO_MANY_REFERENCES (-459) +/** Too many references: can't splice. */ +#define VERR_NET_CONNECTION_TIMED_OUT (-460) +/** Connection refused. */ +#define VERR_NET_CONNECTION_REFUSED (-461) +/* ELOOP is not net. */ +/* ENAMETOOLONG is not net. */ +/** Host is down. */ +#define VERR_NET_HOST_DOWN (-464) +/** No route to host. */ +#define VERR_NET_HOST_UNREACHABLE (-465) +/** Protocol error. */ +#define VERR_NET_PROTOCOL_ERROR (-466) +/** Incomplete packet was submitted by guest. */ +#define VERR_NET_INCOMPLETE_TX_PACKET (-467) +/** @} */ + + +/** @name TCP Status Codes + * @{ + */ +/** Stop the TCP server. */ +#define VERR_TCP_SERVER_STOP (-500) +/** The server was stopped. */ +#define VINF_TCP_SERVER_STOP 500 +/** The TCP server was shut down using RTTcpServerShutdown. */ +#define VERR_TCP_SERVER_SHUTDOWN (-501) +/** The TCP server was destroyed. */ +#define VERR_TCP_SERVER_DESTROYED (-502) +/** The TCP server has no client associated with it. */ +#define VINF_TCP_SERVER_NO_CLIENT 503 +/** @} */ + + +/** @name UDP Status Codes + * @{ + */ +/** Stop the UDP server. */ +#define VERR_UDP_SERVER_STOP (-520) +/** The server was stopped. */ +#define VINF_UDP_SERVER_STOP 520 +/** The UDP server was shut down using RTUdpServerShutdown. */ +#define VERR_UDP_SERVER_SHUTDOWN (-521) +/** The UDP server was destroyed. */ +#define VERR_UDP_SERVER_DESTROYED (-522) +/** The UDP server has no client associated with it. */ +#define VINF_UDP_SERVER_NO_CLIENT 523 +/** @} */ + + +/** @name L4 Specific Status Codes + * @{ + */ +/** Invalid offset in an L4 dataspace */ +#define VERR_L4_INVALID_DS_OFFSET (-550) +/** IPC error */ +#define VERR_IPC (-551) +/** Item already used */ +#define VERR_RESOURCE_IN_USE (-552) +/** Source/destination not found */ +#define VERR_IPC_PROCESS_NOT_FOUND (-553) +/** Receive timeout */ +#define VERR_IPC_RECEIVE_TIMEOUT (-554) +/** Send timeout */ +#define VERR_IPC_SEND_TIMEOUT (-555) +/** Receive cancelled */ +#define VERR_IPC_RECEIVE_CANCELLED (-556) +/** Send cancelled */ +#define VERR_IPC_SEND_CANCELLED (-557) +/** Receive aborted */ +#define VERR_IPC_RECEIVE_ABORTED (-558) +/** Send aborted */ +#define VERR_IPC_SEND_ABORTED (-559) +/** Couldn't map pages during receive */ +#define VERR_IPC_RECEIVE_MAP_FAILED (-560) +/** Couldn't map pages during send */ +#define VERR_IPC_SEND_MAP_FAILED (-561) +/** Send pagefault timeout in receive */ +#define VERR_IPC_RECEIVE_SEND_PF_TIMEOUT (-562) +/** Send pagefault timeout in send */ +#define VERR_IPC_SEND_SEND_PF_TIMEOUT (-563) +/** (One) receive buffer was too small, or too few buffers */ +#define VINF_IPC_RECEIVE_MSG_CUT 564 +/** (One) send buffer was too small, or too few buffers */ +#define VINF_IPC_SEND_MSG_CUT 565 +/** Dataspace manager server not found */ +#define VERR_L4_DS_MANAGER_NOT_FOUND (-566) +/** @} */ + + +/** @name Loader Status Codes. + * @{ + */ +/** Invalid executable signature. */ +#define VERR_INVALID_EXE_SIGNATURE (-600) +/** The iprt loader recognized a ELF image, but doesn't support loading it. */ +#define VERR_ELF_EXE_NOT_SUPPORTED (-601) +/** The iprt loader recognized a PE image, but doesn't support loading it. */ +#define VERR_PE_EXE_NOT_SUPPORTED (-602) +/** The iprt loader recognized a LX image, but doesn't support loading it. */ +#define VERR_LX_EXE_NOT_SUPPORTED (-603) +/** The iprt loader recognized a LE image, but doesn't support loading it. */ +#define VERR_LE_EXE_NOT_SUPPORTED (-604) +/** The iprt loader recognized a NE image, but doesn't support loading it. */ +#define VERR_NE_EXE_NOT_SUPPORTED (-605) +/** The iprt loader recognized a MZ image, but doesn't support loading it. */ +#define VERR_MZ_EXE_NOT_SUPPORTED (-606) +/** The iprt loader recognized an a.out image, but doesn't support loading it. */ +#define VERR_AOUT_EXE_NOT_SUPPORTED (-607) +/** Bad executable. */ +#define VERR_BAD_EXE_FORMAT (-608) +/** Symbol (export) not found. */ +#define VERR_SYMBOL_NOT_FOUND (-609) +/** Module not found. */ +#define VERR_MODULE_NOT_FOUND (-610) +/** The loader resolved an external symbol to an address to big for the image format. */ +#define VERR_SYMBOL_VALUE_TOO_BIG (-611) +/** The image is too big. */ +#define VERR_IMAGE_TOO_BIG (-612) +/** The image base address is to high for this image type. */ +#define VERR_IMAGE_BASE_TOO_HIGH (-614) +/** Mismatching architecture. */ +#define VERR_LDR_ARCH_MISMATCH (-615) +/** Mismatch between IPRT and native loader. */ +#define VERR_LDR_MISMATCH_NATIVE (-616) +/** Failed to resolve an imported (external) symbol. */ +#define VERR_LDR_IMPORTED_SYMBOL_NOT_FOUND (-617) +/** Generic loader failure. */ +#define VERR_LDR_GENERAL_FAILURE (-618) +/** Code signing error. */ +#define VERR_LDR_IMAGE_HASH (-619) +/** The PE loader encountered delayed imports, a feature which hasn't been implemented yet. */ +#define VERR_LDRPE_DELAY_IMPORT (-620) +/** The PE loader encountered a malformed certificate. */ +#define VERR_LDRPE_CERT_MALFORMED (-621) +/** The PE loader encountered a certificate with an unsupported type or structure revision. */ +#define VERR_LDRPE_CERT_UNSUPPORTED (-622) +/** The PE loader doesn't know how to deal with the global pointer data directory entry yet. */ +#define VERR_LDRPE_GLOBALPTR (-623) +/** The PE loader doesn't support the TLS data directory yet. */ +#define VERR_LDRPE_TLS (-624) +/** The PE loader doesn't grok the COM descriptor data directory entry. */ +#define VERR_LDRPE_COM_DESCRIPTOR (-625) +/** The PE loader encountered an unknown load config directory/header size. */ +#define VERR_LDRPE_LOAD_CONFIG_SIZE (-626) +/** The PE loader encountered a lock prefix table, a feature which hasn't been implemented yet. */ +#define VERR_LDRPE_LOCK_PREFIX_TABLE (-627) +/** The PE loader encountered some Guard CF stuff in the load config. */ +#define VERR_LDRPE_GUARD_CF_STUFF (-628) +/** The ELF loader doesn't handle foreign endianness. */ +#define VERR_LDRELF_ODD_ENDIAN (-630) +/** The ELF image is 'dynamic', the ELF loader can only deal with 'relocatable' images at present. */ +#define VERR_LDRELF_DYN (-631) +/** The ELF image is 'executable', the ELF loader can only deal with 'relocatable' images at present. */ +#define VERR_LDRELF_EXEC (-632) +/** The ELF image was created for an unsupported target machine type. */ +#define VERR_LDRELF_MACHINE (-633) +/** The ELF version is not supported. */ +#define VERR_LDRELF_VERSION (-634) +/** The ELF loader cannot handle multiple SYMTAB sections. */ +#define VERR_LDRELF_MULTIPLE_SYMTABS (-635) +/** The ELF loader encountered a relocation type which is not implemented. */ +#define VERR_LDRELF_RELOCATION_NOT_SUPPORTED (-636) +/** The ELF loader encountered a bad symbol index. */ +#define VERR_LDRELF_INVALID_SYMBOL_INDEX (-637) +/** The ELF loader encountered an invalid symbol name offset. */ +#define VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET (-638) +/** The ELF loader encountered an invalid relocation offset. */ +#define VERR_LDRELF_INVALID_RELOCATION_OFFSET (-639) +/** The ELF loader didn't find the symbol/string table for the image. */ +#define VERR_LDRELF_NO_SYMBOL_OR_NO_STRING_TABS (-640) +/** Invalid link address. */ +#define VERR_LDR_INVALID_LINK_ADDRESS (-647) +/** Invalid image relative virtual address. */ +#define VERR_LDR_INVALID_RVA (-648) +/** Invalid segment:offset address. */ +#define VERR_LDR_INVALID_SEG_OFFSET (-649) +/** @}*/ + +/** @name Debug Info Reader Status Codes. + * @{ + */ +/** The module contains no line number information. */ +#define VERR_DBG_NO_LINE_NUMBERS (-650) +/** The module contains no symbol information. */ +#define VERR_DBG_NO_SYMBOLS (-651) +/** The specified segment:offset address was invalid. Typically an attempt at + * addressing outside the segment boundary. */ +#define VERR_DBG_INVALID_ADDRESS (-652) +/** Invalid segment index. */ +#define VERR_DBG_INVALID_SEGMENT_INDEX (-653) +/** Invalid segment offset. */ +#define VERR_DBG_INVALID_SEGMENT_OFFSET (-654) +/** Invalid image relative virtual address. */ +#define VERR_DBG_INVALID_RVA (-655) +/** Invalid image relative virtual address. */ +#define VERR_DBG_SPECIAL_SEGMENT (-656) +/** Address conflict within a module/segment. + * Attempted to add a segment, symbol or line number that fully or partially + * overlaps with an existing one. */ +#define VERR_DBG_ADDRESS_CONFLICT (-657) +/** Duplicate symbol within the module. + * Attempted to add a symbol which name already exists within the module. */ +#define VERR_DBG_DUPLICATE_SYMBOL (-658) +/** The segment index specified when adding a new segment is already in use. */ +#define VERR_DBG_SEGMENT_INDEX_CONFLICT (-659) +/** No line number was found for the specified address/ordinal/whatever. */ +#define VERR_DBG_LINE_NOT_FOUND (-660) +/** The length of the symbol name is out of range. + * This means it is an empty string or that it's greater or equal to + * RTDBG_SYMBOL_NAME_LENGTH. */ +#define VERR_DBG_SYMBOL_NAME_OUT_OF_RANGE (-661) +/** The length of the file name is out of range. + * This means it is an empty string or that it's greater or equal to + * RTDBG_FILE_NAME_LENGTH. */ +#define VERR_DBG_FILE_NAME_OUT_OF_RANGE (-662) +/** The length of the segment name is out of range. + * This means it is an empty string or that it is greater or equal to + * RTDBG_SEGMENT_NAME_LENGTH. */ +#define VERR_DBG_SEGMENT_NAME_OUT_OF_RANGE (-663) +/** The specified address range wraps around. */ +#define VERR_DBG_ADDRESS_WRAP (-664) +/** The file is not a valid NM map file. */ +#define VERR_DBG_NOT_NM_MAP_FILE (-665) +/** The file is not a valid /proc/kallsyms file. */ +#define VERR_DBG_NOT_LINUX_KALLSYMS (-666) +/** No debug module interpreter matching the debug info. */ +#define VERR_DBG_NO_MATCHING_INTERPRETER (-667) +/** Bad DWARF line number header. */ +#define VERR_DWARF_BAD_LINE_NUMBER_HEADER (-668) +/** Unexpected end of DWARF unit. */ +#define VERR_DWARF_UNEXPECTED_END (-669) +/** DWARF LEB value overflows the decoder type. */ +#define VERR_DWARF_LEB_OVERFLOW (-670) +/** Bad DWARF extended line number opcode. */ +#define VERR_DWARF_BAD_LNE (-671) +/** Bad DWARF string. */ +#define VERR_DWARF_BAD_STRING (-672) +/** Bad DWARF position. */ +#define VERR_DWARF_BAD_POS (-673) +/** Bad DWARF info. */ +#define VERR_DWARF_BAD_INFO (-674) +/** Bad DWARF abbreviation data. */ +#define VERR_DWARF_BAD_ABBREV (-675) +/** A DWARF abbreviation was not found. */ +#define VERR_DWARF_ABBREV_NOT_FOUND (-676) +/** Encountered an unknown attribute form. */ +#define VERR_DWARF_UNKNOWN_FORM (-677) +/** Encountered an unexpected attribute form. */ +#define VERR_DWARF_UNEXPECTED_FORM (-678) +/** Unfinished code. */ +#define VERR_DWARF_TODO (-679) +/** Unknown location opcode. */ +#define VERR_DWARF_UNKNOWN_LOC_OPCODE (-680) +/** Expression stack overflow. */ +#define VERR_DWARF_STACK_OVERFLOW (-681) +/** Expression stack underflow. */ +#define VERR_DWARF_STACK_UNDERFLOW (-682) +/** Internal processing error in the DWARF code. */ +#define VERR_DWARF_IPE (-683) +/** Invalid configuration property value. */ +#define VERR_DBG_CFG_INVALID_VALUE (-684) +/** Not an integer property. */ +#define VERR_DBG_CFG_NOT_UINT_PROP (-685) +/** Deferred loading of information failed. */ +#define VERR_DBG_DEFERRED_LOAD_FAILED (-686) +/** Unfinished debug info reader code. */ +#define VERR_DBG_TODO (-687) +/** Found file, but it didn't match the search criteria. */ +#define VERR_DBG_FILE_MISMATCH (-688) +/** Internal processing error in the debug module reader code. */ +#define VERR_DBG_MOD_IPE (-689) +/** The symbol size was adjusted while adding it. */ +#define VINF_DBG_ADJUSTED_SYM_SIZE 690 +/** Unable to parse the CodeView debug information. */ +#define VERR_CV_BAD_FORMAT (-691) +/** Unfinished CodeView debug information feature. */ +#define VERR_CV_TODO (-692) +/** Internal processing error the CodeView debug information reader. */ +#define VERR_CV_IPE (-693) +/** @} */ + +/** @name Request Packet Status Codes. + * @{ + */ +/** Invalid RT request type. + * For the RTReqAlloc() case, the caller just specified an illegal enmType. For + * all the other occurrences it means indicates corruption, broken logic, or stupid + * interface user. */ +#define VERR_RT_REQUEST_INVALID_TYPE (-700) +/** Invalid RT request state. + * The state of the request packet was not the expected and accepted one(s). Either + * the interface user screwed up, or we've got corruption/broken logic. */ +#define VERR_RT_REQUEST_STATE (-701) +/** Invalid RT request packet. + * One or more of the RT controlled packet members didn't contain the correct + * values. Some thing's broken. */ +#define VERR_RT_REQUEST_INVALID_PACKAGE (-702) +/** The status field has not been updated yet as the request is still + * pending completion. Someone queried the iStatus field before the request + * has been fully processed. */ +#define VERR_RT_REQUEST_STATUS_STILL_PENDING (-703) +/** The request has been freed, don't read the status now. + * Someone is reading the iStatus field of a freed request packet. */ +#define VERR_RT_REQUEST_STATUS_FREED (-704) +/** @} */ + +/** @name Environment Status Code + * @{ + */ +/** The specified environment variable was not found. (RTEnvGetEx) */ +#define VERR_ENV_VAR_NOT_FOUND (-750) +/** The specified environment variable was not found. (RTEnvUnsetEx) */ +#define VINF_ENV_VAR_NOT_FOUND (750) +/** Unable to translate all the variables in the default environment due to + * codeset issues (LANG / LC_ALL / LC_CTYPE). */ +#define VWRN_ENV_NOT_FULLY_TRANSLATED (751) +/** Invalid environment variable name. */ +#define VERR_ENV_INVALID_VAR_NAME (-752) +/** The environment variable is an unset record. */ +#define VINF_ENV_VAR_UNSET (753) +/** The environment variable has been recorded as being unset. */ +#define VERR_ENV_VAR_UNSET (-753) +/** @} */ + +/** @name Multiprocessor Status Codes. + * @{ + */ +/** The specified cpu is offline. */ +#define VERR_CPU_OFFLINE (-800) +/** The specified cpu was not found. */ +#define VERR_CPU_NOT_FOUND (-801) +/** Not all of the requested CPUs showed up in the PFNRTMPWORKER. */ +#define VERR_NOT_ALL_CPUS_SHOWED (-802) +/** Internal processing error in the RTMp code.*/ +#define VERR_CPU_IPE_1 (-803) +/** @} */ + +/** @name RTGetOpt status codes + * @{ */ +/** RTGetOpt: Command line option not recognized. */ +#define VERR_GETOPT_UNKNOWN_OPTION (-825) +/** RTGetOpt: Command line option needs argument. */ +#define VERR_GETOPT_REQUIRED_ARGUMENT_MISSING (-826) +/** RTGetOpt: Command line option has argument with bad format. */ +#define VERR_GETOPT_INVALID_ARGUMENT_FORMAT (-827) +/** RTGetOpt: Not an option. */ +#define VINF_GETOPT_NOT_OPTION 828 +/** RTGetOpt: Command line option needs an index. */ +#define VERR_GETOPT_INDEX_MISSING (-829) +/** @} */ + +/** @name RTCache status codes + * @{ */ +/** RTCache: cache is full. */ +#define VERR_CACHE_FULL (-850) +/** RTCache: cache is empty. */ +#define VERR_CACHE_EMPTY (-851) +/** @} */ + +/** @name RTMemCache status codes + * @{ */ +/** Reached the max cache size. */ +#define VERR_MEM_CACHE_MAX_SIZE (-855) +/** @} */ + +/** @name RTS3 status codes + * @{ */ +/** Access denied error. */ +#define VERR_S3_ACCESS_DENIED (-875) +/** The bucket/key wasn't found. */ +#define VERR_S3_NOT_FOUND (-876) +/** Bucket already exists. */ +#define VERR_S3_BUCKET_ALREADY_EXISTS (-877) +/** Can't delete bucket with keys. */ +#define VERR_S3_BUCKET_NOT_EMPTY (-878) +/** The current operation was canceled. */ +#define VERR_S3_CANCELED (-879) +/** @} */ + +/** @name HTTP status codes + * @{ */ +/** HTTP initialization failed. */ +#define VERR_HTTP_INIT_FAILED (-885) +/** The server has not found anything matching the URI given. */ +#define VERR_HTTP_NOT_FOUND (-886) +/** The request is for something forbidden. Authorization will not help. */ +#define VERR_HTTP_ACCESS_DENIED (-887) +/** The server did not understand the request due to bad syntax. */ +#define VERR_HTTP_BAD_REQUEST (-888) +/** Couldn't connect to the server (proxy?). */ +#define VERR_HTTP_COULDNT_CONNECT (-889) +/** SSL connection error. */ +#define VERR_HTTP_SSL_CONNECT_ERROR (-890) +/** CAcert is missing or has the wrong format. */ +#define VERR_HTTP_CACERT_WRONG_FORMAT (-891) +/** Certificate cannot be authenticated with the given CA certificates. */ +#define VERR_HTTP_CACERT_CANNOT_AUTHENTICATE (-892) +/** The current HTTP request was forcefully aborted */ +#define VERR_HTTP_ABORTED (-893) +/** Request was redirected. */ +#define VERR_HTTP_REDIRECTED (-894) +/** Proxy couldn't be resolved. */ +#define VERR_HTTP_PROXY_NOT_FOUND (-895) +/** The remote host couldn't be resolved. */ +#define VERR_HTTP_HOST_NOT_FOUND (-896) +/** Unexpected cURL error configure the proxy. */ +#define VERR_HTTP_CURL_PROXY_CONFIG (-897) +/** Generic CURL error. */ +#define VERR_HTTP_CURL_ERROR (-899) +/** @} */ + +/** @name RTManifest status codes + * @{ */ +/** A digest type used in the manifest file isn't supported. */ +#define VERR_MANIFEST_UNSUPPORTED_DIGEST_TYPE (-900) +/** An entry in the manifest file couldn't be interpreted correctly. */ +#define VERR_MANIFEST_WRONG_FILE_FORMAT (-901) +/** A digest doesn't match the corresponding file. */ +#define VERR_MANIFEST_DIGEST_MISMATCH (-902) +/** The file list doesn't match to the content of the manifest file. */ +#define VERR_MANIFEST_FILE_MISMATCH (-903) +/** The specified attribute (name) was not found in the manifest. */ +#define VERR_MANIFEST_ATTR_NOT_FOUND (-904) +/** The attribute type did not match. */ +#define VERR_MANIFEST_ATTR_TYPE_MISMATCH (-905) +/** No attribute of the specified types was found. */ +#define VERR_MANIFEST_ATTR_TYPE_NOT_FOUND (-906) +/** @} */ + +/** @name RTTar status codes + * @{ */ +/** The checksum of a tar header record doesn't match. */ +#define VERR_TAR_CHKSUM_MISMATCH (-925) +/** The tar end of file record was read. */ +#define VERR_TAR_END_OF_FILE (-926) +/** The tar file ended unexpectedly. */ +#define VERR_TAR_UNEXPECTED_EOS (-927) +/** The tar termination records was encountered without reaching the end of + * the input stream. */ +#define VERR_TAR_EOS_MORE_INPUT (-928) +/** A number tar header field was malformed. */ +#define VERR_TAR_BAD_NUM_FIELD (-929) +/** A numeric tar header field was not terminated correctly. */ +#define VERR_TAR_BAD_NUM_FIELD_TERM (-930) +/** A number tar header field was encoded using base-256 which this + * tar implementation currently does not support. */ +#define VERR_TAR_BASE_256_NOT_SUPPORTED (-931) +/** A number tar header field yielded a value too large for the internal + * variable of the tar interpreter. */ +#define VERR_TAR_NUM_VALUE_TOO_LARGE (-932) +/** The combined minor and major device number type is too small to hold the + * value stored in the tar header. */ +#define VERR_TAR_DEV_VALUE_TOO_LARGE (-933) +/** The mode field in a tar header is bad. */ +#define VERR_TAR_BAD_MODE_FIELD (-934) +/** The mode field should not include the type. */ +#define VERR_TAR_MODE_WITH_TYPE (-935) +/** The size field should be zero for links and symlinks. */ +#define VERR_TAR_SIZE_NOT_ZERO (-936) +/** Encountered an unknown type flag. */ +#define VERR_TAR_UNKNOWN_TYPE_FLAG (-937) +/** The tar header is all zeros. */ +#define VERR_TAR_ZERO_HEADER (-938) +/** Not a uniform standard tape v0.0 archive header. */ +#define VERR_TAR_NOT_USTAR_V00 (-939) +/** The name is empty. */ +#define VERR_TAR_EMPTY_NAME (-940) +/** A non-directory entry has a name ending with a slash. */ +#define VERR_TAR_NON_DIR_ENDS_WITH_SLASH (-941) +/** Encountered an unsupported portable archive exchange (pax) header. */ +#define VERR_TAR_UNSUPPORTED_PAX_TYPE (-942) +/** Encountered an unsupported Solaris Tar extension. */ +#define VERR_TAR_UNSUPPORTED_SOLARIS_HDR_TYPE (-943) +/** Encountered an unsupported GNU Tar extension. */ +#define VERR_TAR_UNSUPPORTED_GNU_HDR_TYPE (-944) +/** Malformed checksum field in the tar header. */ +#define VERR_TAR_BAD_CHKSUM_FIELD (-945) +/** Malformed checksum field in the tar header. */ +#define VERR_TAR_MALFORMED_GNU_LONGXXXX (-946) +/** Too long name or link string. */ +#define VERR_TAR_NAME_TOO_LONG (-947) +/** A directory entry in the archive. */ +#define VINF_TAR_DIR_PATH (948) +/** @} */ + +/** @name RTPoll status codes + * @{ */ +/** The handle is not pollable. */ +#define VERR_POLL_HANDLE_NOT_POLLABLE (-950) +/** The handle ID is already present in the poll set. */ +#define VERR_POLL_HANDLE_ID_EXISTS (-951) +/** The handle ID was not found in the set. */ +#define VERR_POLL_HANDLE_ID_NOT_FOUND (-952) +/** The poll set is full. */ +#define VERR_POLL_SET_IS_FULL (-953) +/** @} */ + +/** @name Pkzip status codes + * @{ */ +/** No end of central directory record found. */ +#define VERR_PKZIP_NO_EOCB (-960) +/** Too long name string. */ +#define VERR_PKZIP_NAME_TOO_LONG (-961) +/** Local file header corrupt. */ +#define VERR_PKZIP_BAD_LF_HEADER (-962) +/** Central directory file header corrupt. */ +#define VERR_PKZIP_BAD_CDF_HEADER (-963) +/** Encountered an unknown type flag. */ +#define VERR_PKZIP_UNKNOWN_TYPE_FLAG (-964) +/** Found a ZIP64 Extra Information Field in a ZIP32 file. */ +#define VERR_PKZIP_ZIP64EX_IN_ZIP32 (-965) + + +/** @name RTZip status codes + * @{ */ +/** Generic zip error. */ +#define VERR_ZIP_ERROR (-22000) +/** The compressed data was corrupted. */ +#define VERR_ZIP_CORRUPTED (-22001) +/** Ran out of memory while compressing or uncompressing. */ +#define VERR_ZIP_NO_MEMORY (-22002) +/** The compression format version is unsupported. */ +#define VERR_ZIP_UNSUPPORTED_VERSION (-22003) +/** The compression method is unsupported. */ +#define VERR_ZIP_UNSUPPORTED_METHOD (-22004) +/** The compressed data started with a bad header. */ +#define VERR_ZIP_BAD_HEADER (-22005) +/** @} */ + +/** @name RTVfs status codes + * @{ */ +/** The VFS chain specification does not have a valid prefix. */ +#define VERR_VFS_CHAIN_NO_PREFIX (-22100) +/** The VFS chain specification is empty. */ +#define VERR_VFS_CHAIN_EMPTY (-22101) +/** Expected an element. */ +#define VERR_VFS_CHAIN_EXPECTED_ELEMENT (-22102) +/** The VFS object type is not known. */ +#define VERR_VFS_CHAIN_UNKNOWN_TYPE (-22103) +/** Expected a left parentheses. */ +#define VERR_VFS_CHAIN_EXPECTED_LEFT_PARENTHESES (-22104) +/** Expected a right parentheses. */ +#define VERR_VFS_CHAIN_EXPECTED_RIGHT_PARENTHESES (-22105) +/** Expected a provider name. */ +#define VERR_VFS_CHAIN_EXPECTED_PROVIDER_NAME (-22106) +/** Expected an element separator (| or :). */ +#define VERR_VFS_CHAIN_EXPECTED_SEPARATOR (-22107) +/** Leading element separator not permitted. */ +#define VERR_VFS_CHAIN_LEADING_SEPARATOR (-22108) +/** Trailing element separator not permitted. */ +#define VERR_VFS_CHAIN_TRAILING_SEPARATOR (-22109) +/** The provider is only allowed as the first element. */ +#define VERR_VFS_CHAIN_MUST_BE_FIRST_ELEMENT (-22110) +/** The provider cannot be the first element. */ +#define VERR_VFS_CHAIN_CANNOT_BE_FIRST_ELEMENT (-22111) +/** VFS object cast failed. */ +#define VERR_VFS_CHAIN_CAST_FAILED (-22112) +/** Internal error in the VFS chain code. */ +#define VERR_VFS_CHAIN_IPE (-22113) +/** VFS chain element provider not found. */ +#define VERR_VFS_CHAIN_PROVIDER_NOT_FOUND (-22114) +/** VFS chain does not terminate with the desired object type. */ +#define VERR_VFS_CHAIN_FINAL_TYPE_MISMATCH (-22115) +/** VFS chain element takes no arguments. */ +#define VERR_VFS_CHAIN_NO_ARGS (-22116) +/** VFS chain element takes exactly one argument. */ +#define VERR_VFS_CHAIN_ONE_ARG (-22117) +/** VFS chain element expected at most one argument. */ +#define VERR_VFS_CHAIN_AT_MOST_ONE_ARG (-22118) +/** VFS chain element expected at least one argument. */ +#define VERR_VFS_CHAIN_AT_LEAST_ONE_ARG (-22119) +/** VFS chain element takes exactly two arguments. */ +#define VERR_VFS_CHAIN_TWO_ARGS (-22120) +/** VFS chain element expected at least two arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_TWO_ARGS (-22121) +/** VFS chain element expected at most two arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_TWO_ARGS (-22122) +/** VFS chain element takes exactly three arguments. */ +#define VERR_VFS_CHAIN_THREE_ARGS (-22123) +/** VFS chain element expected at least three arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_THREE_ARGS (-22124) +/** VFS chain element expected at most three arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_THREE_ARGS (-22125) +/** VFS chain element takes exactly four arguments. */ +#define VERR_VFS_CHAIN_FOUR_ARGS (-22126) +/** VFS chain element expected at least four arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_FOUR_ARGS (-22127) +/** VFS chain element expected at most four arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_FOUR_ARGS (-22128) +/** VFS chain element takes exactly five arguments. */ +#define VERR_VFS_CHAIN_FIVE_ARGS (-22129) +/** VFS chain element expected at least five arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_FIVE_ARGS (-22130) +/** VFS chain element expected at most five arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_FIVE_ARGS (-22131) +/** VFS chain element takes exactly six arguments. */ +#define VERR_VFS_CHAIN_SIX_ARGS (-22132) +/** VFS chain element expected at least six arguments. */ +#define VERR_VFS_CHAIN_AT_LEAST_SIX_ARGS (-22133) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_AT_MOST_SIX_ARGS (-22134) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_TOO_FEW_ARGS (-22135) +/** VFS chain element expected at most six arguments. */ +#define VERR_VFS_CHAIN_TOO_MANY_ARGS (-22136) +/** VFS chain element expected non-empty argument. */ +#define VERR_VFS_CHAIN_EMPTY_ARG (-22137) +/** Invalid argument to VFS chain element. */ +#define VERR_VFS_CHAIN_INVALID_ARGUMENT (-22138) +/** VFS chain element only provides file and I/O stream (ios) objects. */ +#define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS (-22139) +/** VFS chain element only provides I/O stream (ios) objects. */ +#define VERR_VFS_CHAIN_ONLY_IOS (-22140) +/** VFS chain element only provides directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_DIR (-22141) +/** VFS chain element only provides file system stream (fss) objects. */ +#define VERR_VFS_CHAIN_ONLY_FSS (-22142) +/** VFS chain element only provides file system (vfs) objects. */ +#define VERR_VFS_CHAIN_ONLY_VFS (-22143) +/** VFS chain element only provides file, I/O stream (ios), or + * directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS_OR_DIR (-22144) +/** VFS chain element only provides file, I/O stream (ios), or + * directory (dir) objects. */ +#define VERR_VFS_CHAIN_ONLY_DIR_OR_VFS (-22145) +/** VFS chain element takes a file object as input. */ +#define VERR_VFS_CHAIN_TAKES_FILE (-22146) +/** VFS chain element takes a file or I/O stream (ios) object as input. */ +#define VERR_VFS_CHAIN_TAKES_FILE_OR_IOS (-22147) +/** VFS chain element takes a directory (dir) object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR (-22148) +/** VFS chain element takes a file system stream (fss) object as input. */ +#define VERR_VFS_CHAIN_TAKES_FSS (-22149) +/** VFS chain element takes a file system (vfs) object as input. */ +#define VERR_VFS_CHAIN_TAKES_VFS (-22150) +/** VFS chain element takes a directory (dir) or file system (vfs) + * object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR_OR_VFS (-22151) +/** VFS chain element takes a directory (dir), file system stream (fss), + * or file system (vfs) object as input. */ +#define VERR_VFS_CHAIN_TAKES_DIR_OR_FSS_OR_VFS (-22152) +/** VFS chain element only provides a read-only I/O stream, while the chain + * requires write access. */ +#define VERR_VFS_CHAIN_READ_ONLY_IOS (-22153) +/** VFS chain element only provides a read-only I/O stream, while the chain + * read access. */ +#define VERR_VFS_CHAIN_WRITE_ONLY_IOS (-22154) +/** VFS chain only has a single element and it is just a path, need to be + * treated as a normal file system request. */ +#define VERR_VFS_CHAIN_PATH_ONLY (-22155) +/** VFS chain element preceding the final path needs to be a directory, file + * system or file system stream. */ +#define VERR_VFS_CHAIN_TYPE_MISMATCH_PATH_ONLY (-22156) +/** VFS chain doesn't end with a path only element. */ +#define VERR_VFS_CHAIN_NOT_PATH_ONLY (-22157) +/** The path only element at the end of the VFS chain is too short to make out + * the parent directory. */ +#define VERR_VFS_CHAIN_TOO_SHORT_FOR_PARENT (-22158) +/** @} */ + +/** @name RTDvm status codes + * @{ */ +/** The volume map doesn't contain any valid volume. */ +#define VERR_DVM_MAP_EMPTY (-22200) +/** There is no volume behind the current one. */ +#define VERR_DVM_MAP_NO_VOLUME (-22201) +/** @} */ + +/** @name Logger status codes + * @{ */ +/** The internal logger revision did not match. */ +#define VERR_LOG_REVISION_MISMATCH (-22300) +/** @} */ + +/* see above, 22400..22499 is used for misc codes! */ + +/** @name Logger status codes + * @{ */ +/** Power off is not supported by the hardware or the OS. */ +#define VERR_SYS_CANNOT_POWER_OFF (-22500) +/** The halt action was requested, but the OS may actually power + * off the machine. */ +#define VINF_SYS_MAY_POWER_OFF (22501) +/** Shutdown failed. */ +#define VERR_SYS_SHUTDOWN_FAILED (-22502) +/** @} */ + +/** @name Filesystem status codes + * @{ */ +/** Filesystem can't be opened because it is corrupt. */ +#define VERR_FILESYSTEM_CORRUPT (-22600) +/** @} */ + +/** @name RTZipXar status codes. + * @{ */ +/** Wrong magic value. */ +#define VERR_XAR_WRONG_MAGIC (-22700) +/** Bad header size. */ +#define VERR_XAR_BAD_HDR_SIZE (-22701) +/** Unsupported version. */ +#define VERR_XAR_UNSUPPORTED_VERSION (-22702) +/** Unsupported hashing function. */ +#define VERR_XAR_UNSUPPORTED_HASH_FUNCTION (-22703) +/** The table of content (TOC) is too small and therefore can't be valid. */ +#define VERR_XAR_TOC_TOO_SMALL (-22704) +/** The table of content (TOC) is too big. */ +#define VERR_XAR_TOC_TOO_BIG (-22705) +/** The compressed table of content is too big. */ +#define VERR_XAR_TOC_TOO_BIG_COMPRESSED (-22706) +/** The uncompressed table of content size in the header didn't match what + * ZLib returned. */ +#define VERR_XAR_TOC_UNCOMP_SIZE_MISMATCH (-22707) +/** The table of content string length didn't match the size specified in the + * header. */ +#define VERR_XAR_TOC_STRLEN_MISMATCH (-22708) +/** The table of content isn't valid UTF-8. */ +#define VERR_XAR_TOC_UTF8_ENCODING (-22709) +/** XML error while parsing the table of content. */ +#define VERR_XAR_TOC_XML_PARSE_ERROR (-22710) +/** The table of content XML document does not have a toc element. */ +#define VERR_XML_TOC_ELEMENT_MISSING (-22711) +/** The table of content XML element (toc) has siblings, we expected it to be + * an only child or the root element (xar). */ +#define VERR_XML_TOC_ELEMENT_HAS_SIBLINGS (-22712) +/** The XAR table of content digest doesn't match. */ +#define VERR_XAR_TOC_DIGEST_MISMATCH (-22713) +/** Bad or missing XAR checksum element. */ +#define VERR_XAR_BAD_CHECKSUM_ELEMENT (-22714) +/** The hash function in the header doesn't match the one in the table of + * content. */ +#define VERR_XAR_HASH_FUNCTION_MISMATCH (-22715) +/** Bad digest length encountered in the table of content. */ +#define VERR_XAR_BAD_DIGEST_LENGTH (-22716) +/** The order of elements in the XAR file does not lend it self to expansion + * from via an I/O stream. */ +#define VERR_XAR_NOT_STREAMBLE_ELEMENT_ORDER (-22717) +/** Missing offset element in table of content sub-element. */ +#define VERR_XAR_MISSING_OFFSET_ELEMENT (-22718) +/** Bad offset element in table of content sub-element. */ +#define VERR_XAR_BAD_OFFSET_ELEMENT (-22719) +/** Missing size element in table of content sub-element. */ +#define VERR_XAR_MISSING_SIZE_ELEMENT (-22720) +/** Bad size element in table of content sub-element. */ +#define VERR_XAR_BAD_SIZE_ELEMENT (-22721) +/** Missing length element in table of content sub-element. */ +#define VERR_XAR_MISSING_LENGTH_ELEMENT (-22722) +/** Bad length element in table of content sub-element. */ +#define VERR_XAR_BAD_LENGTH_ELEMENT (-22723) +/** Bad file element in XAR table of content. */ +#define VERR_XAR_BAD_FILE_ELEMENT (-22724) +/** Missing data element for XAR file. */ +#define VERR_XAR_MISSING_DATA_ELEMENT (-22725) +/** Unknown XAR file type value. */ +#define VERR_XAR_UNKNOWN_FILE_TYPE (-22726) +/** Missing encoding element for XAR data stream. */ +#define VERR_XAR_NO_ENCODING (-22727) +/** Bad timestamp for XAR file. */ +#define VERR_XAR_BAD_FILE_TIMESTAMP (-22728) +/** Bad file mode for XAR file. */ +#define VERR_XAR_BAD_FILE_MODE (-22729) +/** Bad file user id for XAR file. */ +#define VERR_XAR_BAD_FILE_UID (-22730) +/** Bad file group id for XAR file. */ +#define VERR_XAR_BAD_FILE_GID (-22731) +/** Bad file inode device number for XAR file. */ +#define VERR_XAR_BAD_FILE_DEVICE_NO (-22732) +/** Bad file inode number for XAR file. */ +#define VERR_XAR_BAD_FILE_INODE (-22733) +/** Invalid name for XAR file. */ +#define VERR_XAR_INVALID_FILE_NAME (-22734) +/** The message digest of the extracted data does not match the one supplied. */ +#define VERR_XAR_EXTRACTED_HASH_MISMATCH (-22735) +/** The extracted data has exceeded the expected size. */ +#define VERR_XAR_EXTRACTED_SIZE_EXCEEDED (-22736) +/** The message digest of the archived data does not match the one supplied. */ +#define VERR_XAR_ARCHIVED_HASH_MISMATCH (-22737) +/** The decompressor completed without using all the input data. */ +#define VERR_XAR_UNUSED_ARCHIVED_DATA (-22738) +/** Expected the archived and extracted XAR data sizes to be the same for + * uncompressed data. */ +#define VERR_XAR_ARCHIVED_AND_EXTRACTED_SIZES_MISMATCH (-22739) +/** @} */ + +/** @name RTX509 status codes + * @{ */ +/** Error reading a certificate in PEM format from BIO. */ +#define VERR_X509_READING_CERT_FROM_BIO (-23100) +/** Error extracting a public key from the certificate. */ +#define VERR_X509_EXTRACT_PUBKEY_FROM_CERT (-23101) +/** Error extracting RSA from the public key. */ +#define VERR_X509_EXTRACT_RSA_FROM_PUBLIC_KEY (-23102) +/** Signature verification failed. */ +#define VERR_X509_RSA_VERIFICATION_FUILURE (-23103) +/** Basic constraints were not found. */ +#define VERR_X509_NO_BASIC_CONSTARAINTS (-23104) +/** Error getting extensions from the certificate. */ +#define VERR_X509_GETTING_EXTENSION_FROM_CERT (-23105) +/** Error getting a data from the extension. */ +#define VERR_X509_GETTING_DATA_FROM_EXTENSION (-23106) +/** Error formatting an extension. */ +#define VERR_X509_PRINT_EXTENSION_TO_BIO (-23107) +/** X509 certificate verification error. */ +#define VERR_X509_CERTIFICATE_VERIFICATION_FAILURE (-23108) +/** X509 certificate isn't self signed. */ +#define VERR_X509_NOT_SELFSIGNED_CERTIFICATE (-23109) +/** Warning X509 certificate isn't self signed. */ +#define VINF_X509_NOT_SELFSIGNED_CERTIFICATE 23109 +/** @} */ + +/** @name RTAsn1 status codes + * @{ */ +/** Temporary place holder. */ +#define VERR_ASN1_ERROR (-22800) +/** Encountered an ASN.1 string type that is not supported. */ +#define VERR_ASN1_STRING_TYPE_NOT_IMPLEMENTED (-22801) +/** Invalid ASN.1 UTF-8 STRING encoding. */ +#define VERR_ASN1_INVALID_UTF8_STRING_ENCODING (-22802) +/** Invalid ASN.1 NUMERIC STRING encoding. */ +#define VERR_ASN1_INVALID_NUMERIC_STRING_ENCODING (-22803) +/** Invalid ASN.1 PRINTABLE STRING encoding. */ +#define VERR_ASN1_INVALID_PRINTABLE_STRING_ENCODING (-22804) +/** Invalid ASN.1 T61/TELETEX STRING encoding. */ +#define VERR_ASN1_INVALID_T61_STRING_ENCODING (-22805) +/** Invalid ASN.1 VIDEOTEX STRING encoding. */ +#define VERR_ASN1_INVALID_VIDEOTEX_STRING_ENCODING (-22806) +/** Invalid ASN.1 IA5 STRING encoding. */ +#define VERR_ASN1_INVALID_IA5_STRING_ENCODING (-22807) +/** Invalid ASN.1 GRAPHIC STRING encoding. */ +#define VERR_ASN1_INVALID_GRAPHIC_STRING_ENCODING (-22808) +/** Invalid ASN.1 ISO-646/VISIBLE STRING encoding. */ +#define VERR_ASN1_INVALID_VISIBLE_STRING_ENCODING (-22809) +/** Invalid ASN.1 GENERAL STRING encoding. */ +#define VERR_ASN1_INVALID_GENERAL_STRING_ENCODING (-22810) +/** Invalid ASN.1 UNIVERSAL STRING encoding. */ +#define VERR_ASN1_INVALID_UNIVERSAL_STRING_ENCODING (-22811) +/** Invalid ASN.1 BMP STRING encoding. */ +#define VERR_ASN1_INVALID_BMP_STRING_ENCODING (-22812) +/** Invalid ASN.1 OBJECT IDENTIFIER encoding. */ +#define VERR_ASN1_INVALID_OBJID_ENCODING (-22813) +/** A component value of an ASN.1 OBJECT IDENTIFIER is too big for our + * internal representation (32-bits). */ +#define VERR_ASN1_OBJID_COMPONENT_TOO_BIG (-22814) +/** Too many components in an ASN.1 OBJECT IDENTIFIER for our internal + * representation. */ +#define VERR_ASN1_OBJID_TOO_MANY_COMPONENTS (-22815) +/** The dotted-string representation of an ASN.1 OBJECT IDENTIFIER would be too + * long for our internal representation. */ +#define VERR_ASN1_OBJID_TOO_LONG_STRING_FORM (-22816) +/** Invalid dotted string. */ +#define VERR_ASN1_OBJID_INVALID_DOTTED_STRING (-22817) +/** Constructed string type not implemented. */ +#define VERR_ASN1_CONSTRUCTED_STRING_NOT_IMPL (-22818) +/** Expected a different string tag. */ +#define VERR_ASN1_STRING_TAG_MISMATCH (-22819) +/** Expected a different time tag. */ +#define VERR_ASN1_TIME_TAG_MISMATCH (-22820) +/** More unconsumed data available. */ +#define VINF_ASN1_MORE_DATA (22821) +/** RTAsnEncodeWriteHeader return code indicating that nothing was written + * and the content should be skipped as well. */ +#define VINF_ASN1_NOT_ENCODED (22822) +/** Unknown escape sequence encountered in TeletexString. */ +#define VERR_ASN1_TELETEX_UNKNOWN_ESC_SEQ (-22823) +/** Unsupported escape sequence encountered in TeletexString. */ +#define VERR_ASN1_TELETEX_UNSUPPORTED_ESC_SEQ (-22824) +/** Unsupported character set. */ +#define VERR_ASN1_TELETEX_UNSUPPORTED_CHARSET (-22825) +/** ASN.1 object has no virtual method table. */ +#define VERR_ASN1_NO_VTABLE (-22826) +/** ASN.1 object has no pfnCheckSanity method. */ +#define VERR_ASN1_NO_CHECK_SANITY_METHOD (-22827) +/** ASN.1 object is not present */ +#define VERR_ASN1_NOT_PRESENT (-22828) +/** There are unconsumed bytes after decoding an ASN.1 object. */ +#define VERR_ASN1_CURSOR_NOT_AT_END (-22829) +/** Long ASN.1 tag form is not implemented. */ +#define VERR_ASN1_CURSOR_LONG_TAG (-22830) +/** Bad ASN.1 object length encoding. */ +#define VERR_ASN1_CURSOR_BAD_LENGTH_ENCODING (-22831) +/** Indefinite length form is against the rules. */ +#define VERR_ASN1_CURSOR_ILLEGAL_IDEFINITE_LENGTH (-22832) +/** Indefinite length form is not implemented. */ +#define VERR_ASN1_CURSOR_IDEFINITE_LENGTH_NOT_SUP (-22833) +/** ASN.1 object length goes beyond the end of the byte stream being decoded. */ +#define VERR_ASN1_CURSOR_BAD_LENGTH (-22834) +/** Not more data in ASN.1 byte stream. */ +#define VERR_ASN1_CURSOR_NO_MORE_DATA (-22835) +/** Too little data in ASN.1 byte stream. */ +#define VERR_ASN1_CURSOR_TOO_LITTLE_DATA_LEFT (-22836) +/** Constructed string is not according to the encoding rules. */ +#define VERR_ASN1_CURSOR_ILLEGAL_CONSTRUCTED_STRING (-22837) +/** Unexpected ASN.1 tag encountered while decoding. */ +#define VERR_ASN1_CURSOR_TAG_MISMATCH (-22838) +/** Unexpected ASN.1 tag class/flag encountered while decoding. */ +#define VERR_ASN1_CURSOR_TAG_FLAG_CLASS_MISMATCH (-22839) +/** ASN.1 bit string object is out of bounds. */ +#define VERR_ASN1_BITSTRING_OUT_OF_BOUNDS (-22840) +/** Bad ASN.1 time object. */ +#define VERR_ASN1_TIME_BAD_NORMALIZE_INPUT (-22841) +/** Failed to normalize ASN.1 time object. */ +#define VERR_ASN1_TIME_NORMALIZE_ERROR (-22842) +/** Normalization of ASN.1 time object didn't work out. */ +#define VERR_ASN1_TIME_NORMALIZE_MISMATCH (-22843) +/** Invalid ASN.1 UTC TIME encoding. */ +#define VERR_ASN1_INVALID_UTC_TIME_ENCODING (-22844) +/** Invalid ASN.1 GENERALIZED TIME encoding. */ +#define VERR_ASN1_INVALID_GENERALIZED_TIME_ENCODING (-22845) +/** Invalid ASN.1 BOOLEAN encoding. */ +#define VERR_ASN1_INVALID_BOOLEAN_ENCODING (-22846) +/** Invalid ASN.1 NULL encoding. */ +#define VERR_ASN1_INVALID_NULL_ENCODING (-22847) +/** Invalid ASN.1 BIT STRING encoding. */ +#define VERR_ASN1_INVALID_BITSTRING_ENCODING (-22848) +/** Unimplemented ASN.1 tag reached the RTAsn1DynType code. */ +#define VERR_ASN1_DYNTYPE_TAG_NOT_IMPL (-22849) +/** ASN.1 tag and flags/class mismatch in RTAsn1DynType code. */ +#define VERR_ASN1_DYNTYPE_BAD_TAG (-22850) +/** Unexpected ASN.1 fake/dummy object. */ +#define VERR_ASN1_DUMMY_OBJECT (-22851) +/** ASN.1 object is too long. */ +#define VERR_ASN1_TOO_LONG (-22852) +/** Expected primitive ASN.1 object. */ +#define VERR_ASN1_EXPECTED_PRIMITIVE (-22853) +/** Expected valid data pointer for ASN.1 object. */ +#define VERR_ASN1_INVALID_DATA_POINTER (-22854) +/** The ASN.1 encoding is too deeply nested for the decoder. */ +#define VERR_ASN1_TOO_DEEPLY_NESTED (-22855) +/** Generic unexpected object ID error. */ +#define VERR_ASN1_UNEXPECTED_OBJ_ID (-22856) + +/** ANS.1 internal error 1. */ +#define VERR_ASN1_INTERNAL_ERROR_1 (-22895) +/** ANS.1 internal error 2. */ +#define VERR_ASN1_INTERNAL_ERROR_2 (-22896) +/** ANS.1 internal error 3. */ +#define VERR_ASN1_INTERNAL_ERROR_3 (-22897) +/** ANS.1 internal error 4. */ +#define VERR_ASN1_INTERNAL_ERROR_4 (-22898) +/** ANS.1 internal error 5. */ +#define VERR_ASN1_INTERNAL_ERROR_5 (-22899) +/** @} */ + +/** @name More RTLdr status codes. + * @{ */ +/** Image Verification Failure: No Authenticode Signature. */ +#define VERR_LDRVI_NOT_SIGNED (-22900) +/** Image Verification Warning: No Authenticode Signature, but on whitelist. */ +#define VINF_LDRVI_NOT_SIGNED (22900) +/** Image Verification Failure: Error reading image headers. */ +#define VERR_LDRVI_READ_ERROR_HDR (-22901) +/** Image Verification Failure: Error reading section headers. */ +#define VERR_LDRVI_READ_ERROR_SHDRS (-22902) +/** Image Verification Failure: Error reading authenticode signature data. */ +#define VERR_LDRVI_READ_ERROR_SIGNATURE (-22903) +/** Image Verification Failure: Error reading file for hashing. */ +#define VERR_LDRVI_READ_ERROR_HASH (-22904) +/** Image Verification Failure: Error determining the file length. */ +#define VERR_LDRVI_FILE_LENGTH_ERROR (-22905) +/** Image Verification Failure: Error allocating memory for state data. */ +#define VERR_LDRVI_NO_MEMORY_STATE (-22906) +/** Image Verification Failure: Error allocating memory for authenticode + * signature data. */ +#define VERR_LDRVI_NO_MEMORY_SIGNATURE (-22907) +/** Image Verification Failure: Error allocating memory for section headers. */ +#define VERR_LDRVI_NO_MEMORY_SHDRS (-22908) +/** Image Verification Failure: Authenticode parsing output. */ +#define VERR_LDRVI_NO_MEMORY_PARSE_OUTPUT (-22909) +/** Image Verification Failure: Invalid security directory entry. */ +#define VERR_LDRVI_INVALID_SECURITY_DIR_ENTRY (-22910) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_LENGTH (-22911) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_REVISION (-22912) +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_CERT_HDR_TYPE (-22913) +/** Image Verification Failure: More than one certificate table entry. */ +#define VERR_LDRVI_BAD_CERT_MULTIPLE (-22914) + +/** Image Verification Failure: */ +#define VERR_LDRVI_BAD_MZ_OFFSET (-22915) +/** Image Verification Failure: Invalid section count. */ +#define VERR_LDRVI_INVALID_SECTION_COUNT (-22916) +/** Image Verification Failure: Raw data offsets and sizes are out of range. */ +#define VERR_LDRVI_SECTION_RAW_DATA_VALUES (-22917) +/** Optional header magic and target machine does not match. */ +#define VERR_LDRVI_MACHINE_OPT_HDR_MAGIC_MISMATCH (-22918) +/** Unsupported image target architecture. */ +#define VERR_LDRVI_UNSUPPORTED_ARCH (-22919) + +/** Image Verification Failure: Internal error in signature parser. */ +#define VERR_LDRVI_PARSE_IPE (-22921) +/** Generic BER parse error. Will be refined later. */ +#define VERR_LDRVI_PARSE_BER_ERROR (-22922) + +/** Expected the signed data content to be the object ID of + * SpcIndirectDataContent, found something else instead. */ +#define VERR_LDRVI_EXPECTED_INDIRECT_DATA_CONTENT_OID (-22923) +/** Page hash table size overflow. */ +#define VERR_LDRVI_PAGE_HASH_TAB_SIZE_OVERFLOW (-22924) +/** Page hash table is too long (covers signature data, i.e. itself). */ +#define VERR_LDRVI_PAGE_HASH_TAB_TOO_LONG (-22925) +/** The page hash table is not strictly ordered by offset. */ +#define VERR_LDRVI_PAGE_HASH_TAB_NOT_STRICTLY_SORTED (-22926) +/** The page hash table hashes data outside the defined and implicit sections. */ +#define VERR_PAGE_HASH_TAB_HASHES_NON_SECTION_DATA (-22927) +/** Page hash mismatch. */ +#define VERR_LDRVI_PAGE_HASH_MISMATCH (-22928) +/** Image hash mismatch. */ +#define VERR_LDRVI_IMAGE_HASH_MISMATCH (-22929) + +/** Cannot resolve symbol because it's a forwarder. */ +#define VERR_LDR_FORWARDER (-22950) +/** The symbol is not a forwarder. */ +#define VERR_LDR_NOT_FORWARDER (-22951) +/** Malformed forwarder entry. */ +#define VERR_LDR_BAD_FORWARDER (-22952) +/** Too long forwarder chain or there is a loop. */ +#define VERR_LDR_FORWARDER_CHAIN_TOO_LONG (-22953) +/** Support for forwarders has not been implemented. */ +#define VERR_LDR_FORWARDERS_NOT_SUPPORTED (-22954) +/** @} */ + +/** @name RTCrX509 status codes. + * @{ */ +/** Generic X.509 error. */ +#define VERR_CR_X509_GENERIC_ERROR (-23000) +/** Internal error in the X.509 code. */ +#define VERR_CR_X509_INTERNAL_ERROR (-23001) +/** Internal error in the X.509 certificate path building and verification + * code. */ +#define VERR_CR_X509_CERTPATHS_INTERNAL_ERROR (-23002) +/** Path not verified yet. */ +#define VERR_CR_X509_NOT_VERIFIED (-23003) +/** The certificate path has no trust anchor. */ +#define VERR_CR_X509_NO_TRUST_ANCHOR (-23004) +/** Unknown X.509 certificate signature algorithm. */ +#define VERR_CR_X509_UNKNOWN_CERT_SIGN_ALGO (-23005) +/** Certificate signature algorithm mismatch. */ +#define VERR_CR_X509_CERT_SIGN_ALGO_MISMATCH (-23006) +/** The signature algorithm in the to-be-signed certificate part does not match + * the one associated with the signature. */ +#define VERR_CR_X509_CERT_TBS_SIGN_ALGO_MISMATCH (-23007) +/** Certificate extensions requires certificate version 3 or later. */ +#define VERR_CR_X509_TBSCERT_EXTS_REQ_V3 (-23008) +/** Unique issuer and subject IDs require version certificate 2. */ +#define VERR_CR_X509_TBSCERT_UNIQUE_IDS_REQ_V2 (-23009) +/** Certificate serial number length is out of bounds. */ +#define VERR_CR_X509_TBSCERT_SERIAL_NUMBER_OUT_OF_BOUNDS (-23010) +/** Unsupported X.509 certificate version. */ +#define VERR_CR_X509_TBSCERT_UNSUPPORTED_VERSION (-23011) +/** Public key is too small. */ +#define VERR_CR_X509_PUBLIC_KEY_TOO_SMALL (-23012) +/** Invalid string tag for a X.509 name object. */ +#define VERR_CR_X509_INVALID_NAME_STRING_TAG (-23013) +/** Empty string in X.509 name object. */ +#define VERR_CR_X509_NAME_EMPTY_STRING (-23014) +/** Non-string object inside X.509 name object. */ +#define VERR_CR_X509_NAME_NOT_STRING (-23015) +/** Empty set inside X.509 name. */ +#define VERR_CR_X509_NAME_EMPTY_SET (-23016) +/** Empty sub-string set inside X.509 name. */ +#define VERR_CR_X509_NAME_EMPTY_SUB_SET (-23017) +/** The NotBefore and NotAfter values of an X.509 Validity object seems to + * have been swapped around. */ +#define VERR_CR_X509_VALIDITY_SWAPPED (-23018) +/** Duplicate certificate extension. */ +#define VERR_CR_X509_TBSCERT_DUPLICATE_EXTENSION (-23019) +/** Missing relative distinguished name map entry. */ +#define VERR_CR_X509_NAME_MISSING_RDN_MAP_ENTRY (-23020) +/** Certificate path validator: No trusted certificate paths. */ +#define VERR_CR_X509_CPV_NO_TRUSTED_PATHS (-23021) +/** Certificate path validator: No valid certificate policy. */ +#define VERR_CR_X509_CPV_NO_VALID_POLICY (-23022) +/** Certificate path validator: Unknown critical certificate extension. */ +#define VERR_CR_X509_CPV_UNKNOWN_CRITICAL_EXTENSION (-23023) +/** Certificate path validator: Intermediate certificate is missing the + * KeyCertSign usage flag. */ +#define VERR_CR_X509_CPV_MISSING_KEY_CERT_SIGN (-23024) +/** Certificate path validator: Hit the max certificate path length before + * reaching trust anchor. */ +#define VERR_CR_X509_CPV_MAX_PATH_LENGTH (-23025) +/** Certificate path validator: Intermediate certificate is not marked as a + * certificate authority (CA). */ +#define VERR_CR_X509_CPV_NOT_CA_CERT (-23026) +/** Certificate path validator: Intermediate certificate is not a version 3 + * certificate. */ +#define VERR_CR_X509_CPV_NOT_V3_CERT (-23027) +/** Certificate path validator: Invalid policy mapping (to/from anyPolicy). */ +#define VERR_CR_X509_CPV_INVALID_POLICY_MAPPING (-23028) +/** Certificate path validator: Name constraints permits no names. */ +#define VERR_CR_X509_CPV_NO_PERMITTED_NAMES (-23029) +/** Certificate path validator: Name constraints does not permits the + * certificate name. */ +#define VERR_CR_X509_CPV_NAME_NOT_PERMITTED (-23030) +/** Certificate path validator: Name constraints does not permits the + * alternative certificate name. */ +#define VERR_CR_X509_CPV_ALT_NAME_NOT_PERMITTED (-23031) +/** Certificate path validator: Intermediate certificate subject does not + * match child issuer property. */ +#define VERR_CR_X509_CPV_ISSUER_MISMATCH (-23032) +/** Certificate path validator: The certificate is not valid at the + * specified time. */ +#define VERR_CR_X509_CPV_NOT_VALID_AT_TIME (-23033) +/** Certificate path validator: Unexpected choice found in general subtree + * object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_CHOICE (-23034) +/** Certificate path validator: Unexpected minimum value found in general + * subtree object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_MIN (-23035) +/** Certificate path validator: Unexpected maximum value found in + * general subtree object (name constraints). */ +#define VERR_CR_X509_CPV_UNEXP_GENERAL_SUBTREE_MAX (-23036) +/** Certificate path builder: Encountered bad certificate context. */ +#define VERR_CR_X509_CPB_BAD_CERT_CTX (-23037) +/** OpenSSL d2i_X509 failed. */ +#define VERR_CR_X509_OSSL_D2I_FAILED (-23090) +/** @} */ + +/** @name RTCrPkcs7 status codes. + * @{ */ +/** Generic PKCS \#7 error. */ +#define VERR_CR_PKCS7_GENERIC_ERROR (-23300) +/** Signed data verification failed because there are zero signer infos. */ +#define VERR_CR_PKCS7_NO_SIGNER_INFOS (-23301) +/** Signed data certificate not found. */ +#define VERR_CR_PKCS7_SIGNED_DATA_CERT_NOT_FOUND (-23302) +/** Signed data verification failed due to key usage issues. */ +#define VERR_CR_PKCS7_KEY_USAGE_MISMATCH (-23303) +/** Signed data verification failed because of missing (or duplicate) + * authenticated content-type attribute. */ +#define VERR_CR_PKCS7_MISSING_CONTENT_TYPE_ATTRIB (-23304) +/** Signed data verification failed because of the authenticated content-type + * attribute did not match. */ +#define VERR_CR_PKCS7_CONTENT_TYPE_ATTRIB_MISMATCH (-23305) +/** Signed data verification failed because of a malformed authenticated + * content-type attribute. */ +#define VERR_CR_PKCS7_BAD_CONTENT_TYPE_ATTRIB (-23306) +/** Signed data verification failed because of missing (or duplicate) + * authenticated message-digest attribute. */ +#define VERR_CR_PKCS7_MISSING_MESSAGE_DIGEST_ATTRIB (-23307) +/** Signed data verification failed because the authenticated message-digest + * attribute did not match. */ +#define VERR_CR_PKCS7_MESSAGE_DIGEST_ATTRIB_MISMATCH (-23308) +/** Signed data verification failed because of a malformed authenticated + * message-digest attribute. */ +#define VERR_CR_PKCS7_BAD_MESSAGE_DIGEST_ATTRIB (-23309) +/** Signature verification failed. */ +#define VERR_CR_PKCS7_SIGNATURE_VERIFICATION_FAILED (-23310) +/** Internal PKCS \#7 error. */ +#define VERR_CR_PKCS7_INTERNAL_ERROR (-22311) +/** OpenSSL d2i_PKCS7 failed. */ +#define VERR_CR_PKCS7_OSSL_D2I_FAILED (-22312) +/** OpenSSL PKCS \#7 verification failed. */ +#define VERR_CR_PKCS7_OSSL_VERIFY_FAILED (-22313) +/** Digest algorithm parameters are not supported by the PKCS \#7 code. */ +#define VERR_CR_PKCS7_DIGEST_PARAMS_NOT_IMPL (-22314) +/** The digest algorithm of a signer info entry was not found in the list of + * digest algorithms in the signed data. */ +#define VERR_CR_PKCS7_DIGEST_ALGO_NOT_FOUND_IN_LIST (-22315) +/** The PKCS \#7 content is not signed data. */ +#define VERR_CR_PKCS7_NOT_SIGNED_DATA (-22316) +/** No digest algorithms listed in PKCS \#7 signed data. */ +#define VERR_CR_PKCS7_NO_DIGEST_ALGORITHMS (-22317) +/** Too many digest algorithms used by PKCS \#7 signed data. This is an + * internal limitation of the code that aims at saving kernel stack space. */ +#define VERR_CR_PKCS7_TOO_MANY_DIGEST_ALGORITHMS (-22318) +/** Error creating digest algorithm calculator. */ +#define VERR_CR_PKCS7_DIGEST_CREATE_ERROR (-22319) +/** Error while calculating a digest for a PKCS \#7 verification operation. */ +#define VERR_CR_PKCS7_DIGEST_CALC_ERROR (-22320) +/** Unsupported PKCS \#7 signed data version. */ +#define VERR_CR_PKCS7_SIGNED_DATA_VERSION (-22350) +/** PKCS \#7 signed data has no digest algorithms listed. */ +#define VERR_CR_PKCS7_SIGNED_DATA_NO_DIGEST_ALGOS (-22351) +/** Unknown digest algorithm used by PKCS \#7 object. */ +#define VERR_CR_PKCS7_UNKNOWN_DIGEST_ALGORITHM (-22352) +/** Expected PKCS \#7 object to ship at least one certificate. */ +#define VERR_CR_PKCS7_NO_CERTIFICATES (-22353) +/** Expected PKCS \#7 object to not contain any CRLs. */ +#define VERR_CR_PKCS7_EXPECTED_NO_CRLS (-22354) +/** Expected PKCS \#7 object to contain exactly on signer info entry. */ +#define VERR_CR_PKCS7_EXPECTED_ONE_SIGNER_INFO (-22355) +/** Unsupported PKCS \#7 signer info version. */ +#define VERR_CR_PKCS7_SIGNER_INFO_VERSION (-22356) +/** PKCS \#7 singer info contains no issuer serial number. */ +#define VERR_CR_PKCS7_SIGNER_INFO_NO_ISSUER_SERIAL_NO (-22357) +/** Expected PKCS \#7 object to ship the signer certificate(s). */ +#define VERR_CR_PKCS7_SIGNER_CERT_NOT_SHIPPED (-22358) +/** The encrypted digest algorithm does not match the one in the certificate. */ +#define VERR_CR_PKCS7_SIGNER_INFO_DIGEST_ENCRYPT_MISMATCH (-22359) +/** @} */ + +/** @name RTCrSpc status codes. + * @{ */ +/** Generic SPC error. */ +#define VERR_CR_SPC_GENERIC_ERROR (-23400) +/** SPC requires there to be exactly one SignerInfo entry. */ +#define VERR_CR_SPC_NOT_EXACTLY_ONE_SIGNER_INFOS (-23401) +/** There shall be exactly one digest algorithm to go with the single + * SingerInfo entry required by SPC. */ +#define VERR_CR_SPC_NOT_EXACTLY_ONE_DIGEST_ALGO (-23402) +/** The digest algorithm in the SignerInfo does not match the one in the + * indirect data. */ +#define VERR_CR_SPC_SIGNED_IND_DATA_DIGEST_ALGO_MISMATCH (-23403) +/** The digest algorithm in the indirect data was not found in the list of + * digest algorithms in the signed data structure. */ +#define VERR_CR_SPC_IND_DATA_DIGEST_ALGO_NOT_IN_DIGEST_ALGOS (-23404) +/** The digest algorithm is not known to us. */ +#define VERR_CR_SPC_UNKNOWN_DIGEST_ALGO (-23405) +/** The indirect data digest size does not match the digest algorithm. */ +#define VERR_CR_SPC_IND_DATA_DIGEST_SIZE_MISMATCH (-23406) +/** Expected PE image data inside indirect data object. */ +#define VERR_CR_SPC_EXPECTED_PE_IMAGE_DATA (-23407) +/** Internal SPC error: The PE image data is missing. */ +#define VERR_CR_SPC_PEIMAGE_DATA_NOT_PRESENT (-23408) +/** Bad SPC object moniker UUID field. */ +#define VERR_CR_SPC_BAD_MONIKER_UUID (-23409) +/** Unknown SPC object moniker UUID. */ +#define VERR_CR_SPC_UNKNOWN_MONIKER_UUID (-23410) +/** Internal SPC error: Bad object moniker choice value. */ +#define VERR_CR_SPC_BAD_MONIKER_CHOICE (-23411) +/** Internal SPC error: Bad object moniker data pointer. */ +#define VERR_CR_SPC_MONIKER_BAD_DATA (-23412) +/** Multiple PE image page hash tables. */ +#define VERR_CR_SPC_PEIMAGE_MULTIPLE_HASH_TABS (-23413) +/** Unknown SPC PE image attribute. */ +#define VERR_CR_SPC_PEIMAGE_UNKNOWN_ATTRIBUTE (-23414) +/** URL not expected in SPC PE image data. */ +#define VERR_CR_SPC_PEIMAGE_URL_UNEXPECTED (-23415) +/** PE image data without any valid content was not expected. */ +#define VERR_CR_SPC_PEIMAGE_NO_CONTENT (-23416) +/** @} */ + +/** @name RTCrPkix status codes. + * @{ */ +/** Generic PKCS \#7 error. */ +#define VERR_CR_PKIX_GENERIC_ERROR (-23500) +/** Parameters was presented to a signature schema that does not take any. */ +#define VERR_CR_PKIX_SIGNATURE_TAKES_NO_PARAMETERS (-23501) +/** Unknown hash digest type. */ +#define VERR_CR_PKIX_UNKNOWN_DIGEST_TYPE (-23502) +/** Internal error. */ +#define VERR_CR_PKIX_INTERNAL_ERROR (-23503) +/** The hash is too long for the key used when signing/verifying. */ +#define VERR_CR_PKIX_HASH_TOO_LONG_FOR_KEY (-23504) +/** The signature is too long for the scratch buffer. */ +#define VERR_CR_PKIX_SIGNATURE_TOO_LONG (-23505) +/** The signature is greater than or equal to the key. */ +#define VERR_CR_PKIX_SIGNATURE_GE_KEY (-23506) +/** The signature is negative. */ +#define VERR_CR_PKIX_SIGNATURE_NEGATIVE (-23507) +/** Invalid signature length. */ +#define VERR_CR_PKIX_INVALID_SIGNATURE_LENGTH (-23508) +/** PKIX signature no does not match up to the current data. */ +#define VERR_CR_PKIX_SIGNATURE_MISMATCH (-23509) +/** PKIX cipher algorithm parameters are not implemented. */ +#define VERR_CR_PKIX_CIPHER_ALGO_PARAMS_NOT_IMPL (-23510) +/** Cipher algorithm is not known to us. */ +#define VERR_CR_PKIX_CIPHER_ALGO_NOT_KNOWN (-23511) +/** PKIX cipher algorithm is not known to OpenSSL. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALGO_NOT_KNOWN (-23512) +/** PKIX cipher algorithm is not known to OpenSSL EVP API. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALGO_NOT_KNOWN_EVP (-23513) +/** OpenSSL failed to init PKIX cipher algorithm context. */ +#define VERR_CR_PKIX_OSSL_CIPHER_ALOG_INIT_FAILED (-23514) +/** Final OpenSSL PKIX verification failed. */ +#define VERR_CR_PKIX_OSSL_VERIFY_FINAL_FAILED (-23515) +/** OpenSSL failed to decode the public key. */ +#define VERR_CR_PKIX_OSSL_D2I_PUBLIC_KEY_FAILED (-23516) +/** The EVP_PKEY_type API in OpenSSL failed. */ +#define VERR_CR_PKIX_OSSL_EVP_PKEY_TYPE_ERROR (-23517) +/** @} */ + +/** @name RTCrStore status codes. + * @{ */ +/** Generic store error. */ +#define VERR_CR_STORE_GENERIC_ERROR (-23700) +/** @} */ + +/** @name RTCrRsa status codes. + * @{ */ +/** Generic RSA error. */ +#define VERR_CR_RSA_GENERIC_ERROR (-23900) +/** @} */ + +/** @name RTBigNum status codes. + * @{ */ +/** Sensitive input requires the result(s) to be initialized as sensitive. */ +#define VERR_BIGNUM_SENSITIVE_INPUT (-24000) +/** Attempt to divide by zero. */ +#define VERR_BIGNUM_DIV_BY_ZERO (-24001) +/** Negative exponent makes no sense to integer math. */ +#define VERR_BIGNUM_NEGATIVE_EXPONENT (-24002) + +/** @} */ + +/** @name RTCrDigest status codes. + * @{ */ +/** OpenSSL failed to initialize the digest algorithm context. */ +#define VERR_CR_DIGEST_OSSL_DIGEST_INIT_ERROR (-24200) +/** OpenSSL failed to clone the digest algorithm context. */ +#define VERR_CR_DIGEST_OSSL_DIGEST_CTX_COPY_ERROR (-24201) +/** @} */ + +/** @name RTPath status codes. + * @{ */ +/** Unknown glob variable. */ +#define VERR_PATH_MATCH_UNKNOWN_VARIABLE (-24400) +/** The specified glob variable must be first in the pattern. */ +#define VERR_PATH_MATCH_VARIABLE_MUST_BE_FIRST (-24401) +/** Hit unimplemented glob pattern matching feature. */ +#define VERR_PATH_MATCH_FEATURE_NOT_IMPLEMENTED (-24402) +/** Unknown character class in glob pattern. */ +#define VERR_PATH_GLOB_UNKNOWN_CHAR_CLASS (-24403) +/** @} */ + +/** @name RTUri status codes. + * @{ */ +/** The URI is empty */ +#define VERR_URI_EMPTY (-24600) +/** The URI is too short to be a valid URI. */ +#define VERR_URI_TOO_SHORT (-24601) +/** Invalid scheme. */ +#define VERR_URI_INVALID_SCHEME (-24602) +/** Invalid port number. */ +#define VERR_URI_INVALID_PORT_NUMBER (-24603) +/** Invalid escape sequence. */ +#define VERR_URI_INVALID_ESCAPE_SEQ (-24604) +/** Escape URI char decodes as zero (the C string terminator). */ +#define VERR_URI_ESCAPED_ZERO (-24605) +/** Escaped URI characters does not decode to valid UTF-8. */ +#define VERR_URI_ESCAPED_CHARS_NOT_VALID_UTF8 (-24606) +/** Escaped URI character is not a valid UTF-8 lead byte. */ +#define VERR_URI_INVALID_ESCAPED_UTF8_LEAD_BYTE (-24607) +/** Escaped URI character sequence with invalid UTF-8 continutation byte. */ +#define VERR_URI_INVALID_ESCAPED_UTF8_CONTINUATION_BYTE (-24608) +/** Missing UTF-8 continutation in escaped URI character sequence. */ +#define VERR_URI_MISSING_UTF8_CONTINUATION_BYTE (-24609) +/** Expected URI using the 'file:' scheme. */ +#define VERR_URI_NOT_FILE_SCHEME (-24610) +/** @} */ + +/** @name RTJson status codes. + * @{ */ +/** The called method does not work with the value type of the given JSON value. */ +#define VERR_JSON_VALUE_INVALID_TYPE (-24700) +/** The iterator reached the end. */ +#define VERR_JSON_ITERATOR_END (-24701) +/** The JSON document is malformed. */ +#define VERR_JSON_MALFORMED (-24702) +/** @} */ + +/** @name RTVfs status codes. + * @{ */ +/** Unknown file system format. */ +#define VERR_VFS_UNKNOWN_FORMAT (-24800) +/** Found bogus values in the file system. */ +#define VERR_VFS_BOGUS_FORMAT (-24801) +/** Found bogus offset in the file system. */ +#define VERR_VFS_BOGUS_OFFSET (-24802) +/** Unsupported file system format. */ +#define VERR_VFS_UNSUPPORTED_FORMAT (-24803) +/** @} */ + +/** @name RTFsIsoMaker status codes. + * @{ */ +/** No validation entry in the boot catalog. */ +#define VERR_ISOMK_BOOT_CAT_NO_VALIDATION_ENTRY (-25000) +/** No default entry in the boot catalog. */ +#define VERR_ISOMK_BOOT_CAT_NO_DEFAULT_ENTRY (-25001) +/** Expected section header. */ +#define VERR_ISOMK_BOOT_CAT_EXPECTED_SECTION_HEADER (-25002) +/** Entry in a boot catalog section is empty. */ +#define VERR_ISOMK_BOOT_CAT_EMPTY_ENTRY (-25003) +/** Entry in a boot catalog section is another section. */ +#define VERR_ISOMK_BOOT_CAT_INVALID_SECTION_SIZE (-25004) +/** Unsectioned boot catalog entry. */ +#define VERR_ISOMK_BOOT_CAT_ERRATIC_ENTRY (-25005) +/** The file is too big for the current ISO level (4GB+ sized files + * requires ISO level 3). */ +#define VERR_ISOMK_FILE_TOO_BIG_REQ_ISO_LEVEL_3 (-25006) +/** Cannot add symbolic link to namespace which isn't configured to support it. */ +#define VERR_ISOMK_SYMLINK_REQ_ROCK_RIDGE (-25007) +/** Cannot add symbolic link to one of the selected namespaces. */ +#define VINF_ISOMK_SYMLINK_REQ_ROCK_RIDGE (25007) +/** Cannot add symbolic link because no namespace is configured to support it. */ +#define VERR_ISOMK_SYMLINK_SUPPORT_DISABLED (-25008) +/** No space for rock ridge 'CE' entry in directory record. */ +#define VERR_ISOMK_RR_NO_SPACE_FOR_CE (-25009) +/** Internal ISO maker error: Rock ridge read problem. */ +#define VERR_ISOMK_IPE_RR_READ (-25010) +/** Internal ISO maker error: Buggy namespace table. */ +#define VERR_ISOMK_IPE_TABLE (-25011) +/** Internal ISO maker error: Namespace problem \#1. */ +#define VERR_ISOMK_IPE_NAMESPACE_1 (-25012) +/** Internal ISO maker error: Namespace problem \#2. */ +#define VERR_ISOMK_IPE_NAMESPACE_2 (-25013) +/** Internal ISO maker error: Namespace problem \#3. */ +#define VERR_ISOMK_IPE_NAMESPACE_3 (-25014) +/** Internal ISO maker error: Namespace problem \#4. */ +#define VERR_ISOMK_IPE_NAMESPACE_4 (-25015) +/** Internal ISO maker error: Namespace problem \#5. */ +#define VERR_ISOMK_IPE_NAMESPACE_5 (-25016) +/** Internal ISO maker error: Namespace problem \#6. */ +#define VERR_ISOMK_IPE_NAMESPACE_6 (-25017) +/** Internal ISO maker error: Empty path. */ +#define VERR_ISOMK_IPE_EMPTY_PATH (-25018) +/** Internal ISO maker error: Unexpected empty component. */ +#define VERR_ISOMK_IPE_EMPTY_COMPONENT (-25019) +/** Internal ISO maker error: Expected path to start with root slash. */ +#define VERR_ISOMK_IPE_ROOT_SLASH (-25020) +/** Internal ISO maker error: Descriptor miscounting. */ +#define VERR_ISOMK_IPE_DESC_COUNT (-25021) +/** Internal ISO maker error: Buffer size. */ +#define VERR_ISOMK_IPE_BUFFER_SIZE (-25022) +/** Internal ISO maker error: Boot catalog file handle problem. */ +#define VERR_ISOMK_IPE_BOOT_CAT_FILE (-25023) +/** Internal ISO maker error: Inconsistency produing trans.tbl file. */ +#define VERR_ISOMK_IPE_PRODUCE_TRANS_TBL (-25024) +/** Internal ISO maker error: Read file data probem \#1. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_1 (-25025) +/** Internal ISO maker error: Read file data probem \#2. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_2 (-25026) +/** Internal ISO maker error: Read file data probem \#3. */ +#define VERR_ISOMK_IPE_READ_FILE_DATA_3 (-25027) +/** Internal ISO maker error: Finalization problem \#1. */ +#define VERR_ISOMK_IPE_FINALIZE_1 (-25028) +/** The spill file grew larger than 4GB. */ +#define VERR_ISOMK_RR_SPILL_FILE_FULL (-25029) + +/** Requested to import an unknown ISO format. */ +#define VERR_ISOMK_IMPORT_UNKNOWN_FORMAT (-25100) +/** Too many volume descriptors in the import ISO. */ +#define VERR_ISOMK_IMPORT_TOO_MANY_VOL_DESCS (-25101) +/** Import ISO contains a bad volume descriptor header. */ +#define VERR_ISOMK_IMPORT_INVALID_VOL_DESC_HDR (-25102) +/** Import ISO contains more than one primary volume descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_PRIMARY_VOL_DESCS (-25103) +/** Import ISO contains more than one el torito descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_EL_TORITO_DESCS (-25104) +/** Import ISO contains more than one joliet volume descriptor. */ +#define VERR_ISOMK_IMPORT_MULTIPLE_JOLIET_VOL_DESCS (-25105) +/** Import ISO starts with supplementary volume descriptor before any + * primary ones. */ +#define VERR_ISOMK_IMPORT_SUPPLEMENTARY_BEFORE_PRIMARY (-25106) +/** Import ISO contains an unsupported primary volume descriptor version. */ +#define VERR_IOSMK_IMPORT_PRIMARY_VOL_DESC_VER (-25107) +/** Import ISO contains a bad primary volume descriptor. */ +#define VERR_ISOMK_IMPORT_BAD_PRIMARY_VOL_DESC (-25108) +/** Import ISO contains an unsupported supplementary volume descriptor + * version. */ +#define VERR_IOSMK_IMPORT_SUP_VOL_DESC_VER (-25109) +/** Import ISO contains a bad supplementary volume descriptor. */ +#define VERR_ISOMK_IMPORT_BAD_SUP_VOL_DESC (-25110) +/** Import ISO uses a logical block size other than 2KB. */ +#define VERR_ISOMK_IMPORT_LOGICAL_BLOCK_SIZE_NOT_2KB (-25111) +/** Import ISO contains more than volume. */ +#define VERR_ISOMK_IMPORT_MORE_THAN_ONE_VOLUME_IN_SET (-25112) +/** Import ISO uses invalid volume sequence number. */ +#define VERR_ISOMK_IMPORT_INVALID_VOLUMNE_SEQ_NO (-25113) +/** Import ISO has different volume space sizes of primary and supplementary + * volume descriptors. */ +#define VERR_ISOMK_IMPORT_VOLUME_SPACE_SIZE_MISMATCH (-25114) +/** Import ISO has different volume set sizes of primary and supplementary + * volume descriptors. */ +#define VERR_ISOMK_IMPORT_VOLUME_IN_SET_MISMATCH (-25115) +/** Import ISO contains a bad root directory record. */ +#define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC (-25116) +/** Import ISO contains a zero sized root directory. */ +#define VERR_ISOMK_IMPORT_ZERO_SIZED_ROOT_DIR (-25117) +/** Import ISO contains a root directory with a mismatching volume sequence + * number. */ +#define VERR_ISOMK_IMPORT_ROOT_VOLUME_SEQ_NO (-25118) +/** Import ISO contains a root directory with an out of bounds data extent. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_EXTENT_OUT_OF_BOUNDS (-25119) +/** Import ISO contains a root directory with a bad record length. */ +#define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC_LENGTH (-25120) +/** Import ISO contains a root directory without the directory flag set. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_WITHOUT_DIR_FLAG (-25121) +/** Import ISO contains a root directory with multiple extents. */ +#define VERR_ISOMK_IMPORT_ROOT_DIR_IS_MULTI_EXTENT (-25122) +/** Import ISO contains a too deep directory subtree. */ +#define VERR_ISOMK_IMPORT_TOO_DEEP_DIR_TREE (-25123) +/** Import ISO contains a bad directory record. */ +#define VERR_ISOMK_IMPORT_BAD_DIR_REC (-25124) +/** Import ISO contains a directory record with a mismatching volume sequence + * number. */ +#define VERR_ISOMK_IMPORT_DIR_REC_VOLUME_SEQ_NO (-25125) +/** Import ISO contains a directory with an extent that is out of bounds. */ +#define VERR_ISOMK_IMPORT_DIR_REC_EXTENT_OUT_OF_BOUNDS (-25126) +/** Import ISO contains a directory with a bad record length. */ +#define VERR_ISOMK_IMPORT_BAD_DIR_REC_LENGTH (-25127) +/** Import ISO contains a '.' or '..' directory record with a bad name + * length. */ +#define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME_LENGTH (-25128) +/** Import ISO contains a '.' or '..' directory record with a bad name. */ +#define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME (-25129) +/** Import ISO contains a directory with a more than one extent, that's + * currently not supported. */ +#define VERR_ISOMK_IMPORT_DIR_WITH_MORE_EXTENTS (-25130) +/** Import ISO contains a multi-extent directory record that differs + * significantly from first record. */ +#define VERR_ISOMK_IMPORT_MISMATCHING_MULTI_EXTENT_REC (-25131) +/** Import ISO contains a non-final multi-extent directory record with a + * size that isn't block aligned. */ +#define VERR_ISOMK_IMPORT_MISALIGNED_MULTI_EXTENT (-25132) +/** Import ISO contains a non-contigiuous multi-extent data, this is + * currently not supported. */ +#define VERR_ISOMK_IMPORT_NON_CONTIGUOUS_MULTI_EXTENT (-25133) + +/** The boot catalog block in the import ISO is out of bounds. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_OUT_OF_BOUNDS (-25140) +/** The boot catalog block in the import ISO has an incorrect validation + * header ID. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_HEADER_ID (-25141) +/** The boot catalog validation entry in the import ISO has incorrect keys. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_KEYS (-25142) +/** The boot catalog validation entry in the import ISO has an incorrect checksum. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_CHECKSUM (-25143) +/** A boot catalog entry in the import ISO has an unknown type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_UNKNOWN_HEADER_ID (-25144) +/** A boot catalog entry in the import ISO has an invalid boot media type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_INVALID_BOOT_MEDIA_TYPE (-25145) +/** The default boot catalog entry in the import ISO has invalid flags set. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_FLAGS (-25146) +/** A boot catalog entry in the import ISO has reserved flag set. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_RESERVED_FLAG (-25147) +/** A boot catalog entry in the import ISO is using the unused field. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_USES_UNUSED_FIELD (-25148) +/** A boot catalog entry in the import ISO points to a block after the end of + * the image input file. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_IMAGE_OUT_OF_BOUNDS (-25149) +/** A boot catalog entry in the import ISO has an image with an + * indeterminate size. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_UNKNOWN_IMAGE_SIZE (-25150) +/** The boot catalog in the import ISO is larger than a sector or it is + * missing the final section header entry. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_MISSING_FINAL_OR_TOO_BIG (-25151) +/** The default boot catalog entry in the import ISO an invalid boot + * indicator value. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_BOOT_IND (-25152) +/** A boot catalog extension entry in the import ISO was either flagged + * incorrectly in the previous entry or has an invalid header ID. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_INVALID_ID (-25153) +/** A boot catalog extension entry in the import ISO uses undefined flags + * which will be lost. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_UNDEFINED_FLAGS (-25154) +/** A boot catalog extension entry in the import ISO indicates more entries when + * we reached the end of the boot catalog sector. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_END_OF_SECTOR (-25155) +/** A boot catalog entry in the import ISO sets the continuation flag when using + * NONE as the selection criteria type. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_WITH_NONE (-25156) +/** A boot catalog entry in the import ISO sets the continuation flag when + * we reached the ned of the boot catalog secotr. */ +#define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_EOS (-25157) + +/** @} */ + + +/** @name RTFsIsoVol status codes + * @{ */ +/** Descriptor tag is all zeros. */ +#define VERR_ISOFS_TAG_IS_ALL_ZEROS (-25300) +/** Unsupported descriptor tag version. */ +#define VERR_ISOFS_UNSUPPORTED_TAG_VERSION (-25301) +/** Bad descriptor tag checksum. */ +#define VERR_ISOFS_BAD_TAG_CHECKSUM (-25302) +/** Descriptor tag sector number mismatch. */ +#define VERR_ISOFS_TAG_SECTOR_MISMATCH (-25303) +/** Descriptor CRC mismatch. */ +#define VERR_ISOFS_DESC_CRC_MISMATCH (-25304) +/** Insufficient data to check descriptor CRC. */ +#define VERR_ISOFS_INSUFFICIENT_DATA_FOR_DESC_CRC (-25305) +/** Unexpected/unknown/bad descriptor in volume descriptor sequence. */ +#define VERR_ISOFS_UNEXPECTED_VDS_DESC (-25306) +/** Too many primary volume descriptors. */ +#define VERR_ISOFS_TOO_MANY_PVDS (-25307) +/** Too many logical volume descriptors. */ +#define VERR_ISOFS_TOO_MANY_LVDS (-25308) +/** Too many partition descriptors. */ +#define VERR_ISOFS_TOO_MANY_PDS (-25309) +/** The logical volume descriptor has a too big partition map. */ +#define VERR_ISOFS_TOO_BIT_PARTMAP_IN_LVD (-25310) +/** No primary volume descriptors found. */ +#define VERR_ISOFS_NO_PVD (-25311) +/** No logical volume descriptors found. */ +#define VERR_ISOFS_NO_LVD (-25312) +/** No partition descriptors found. */ +#define VERR_ISOFS_NO_PD (-25313) +/** Multiple primary volume descriptors found, we can only deal with one. */ +#define VERR_ISOFS_MULTIPLE_PVDS (-25314) +/** Multiple logical volume descriptors found, we can only deal with one. */ +#define VERR_ISOFS_MULTIPLE_LVDS (-25315) +/** Too many partition maps in the logical volume descriptor. */ +#define VERR_ISOFS_TOO_MANY_PART_MAPS (-25316) +/** Malformed partition map table in the logical volume descriptor. */ +#define VERR_ISOFS_MALFORMED_PART_MAP_TABLE (-25317) +/** Unable to find partition descriptor for a partition map table entry. */ +#define VERR_ISOFS_PARTITION_NOT_FOUND (-25318) +/** Partition mapping table is shorted than described. */ +#define VERR_ISOFS_INCOMPLETE_PART_MAP_TABLE (-25319) +/** Unknown partition map entry type. */ +#define VERR_ISOFS_UNKNOWN_PART_MAP_ENTRY_TYPE (-25320) +/** Unkonwn paritition ID found in the partition map table. */ +#define VERR_ISOFS_UNKNOWN_PART_MAP_TYPE_ID (-25321) +/** Support for virtual partitions as not yet been implemented. */ +#define VERR_ISOFS_VPM_NOT_SUPPORTED (-25322) +/** Support for sparable partitions as not yet been implemented. */ +#define VERR_ISOFS_SPM_NOT_SUPPORTED (-25323) +/** Support for metadata partitions as not yet been implemented. */ +#define VERR_ISOFS_MPM_NOT_SUPPORTED (-25324) +/** Invalid or unsupported logical block size. */ +#define VERR_ISOFS_UNSUPPORTED_LOGICAL_BLOCK_SIZE (-25325) +/** Unsupported domain ID in logical volume descriptor. */ +#define VERR_ISOFS_BAD_LVD_DOMAIN_ID (-25326) +/** Malformed or invalid file set descriptor location. */ +#define VERR_ISOFS_BAD_LVD_FILE_SET_DESC_LOCATION (-25327) +/** Non-standard descriptor character set in the logical volume descriptor. */ +#define VERR_ISOFS_BAD_LVD_DESC_CHAR_SET (-25329) +/** Invalid partition index in a location. */ +#define VERR_ISOFS_INVALID_PARTITION_INDEX (-25330) +/** Unsupported file system charset. */ +#define VERR_ISOFS_FSD_UNSUPPORTED_CHAR_SET (-25331) +/** File set descriptor has an zero length or invalid root dir extent. */ +#define VERR_ISOFS_FSD_ZERO_ROOT_DIR (-25332) +/** File set descriptor has a next extent member. */ +#define VERR_ISOFS_FSD_NEXT_EXTENT (-25333) +/** The ICB for is too big. */ +#define VERR_ISOFS_ICB_TOO_BIG (-25334) +/** The ICB for is too small. */ +#define VERR_ISOFS_ICB_TOO_SMALL (-25335) +/** No direct ICB entries found. */ +#define VERR_ISOFS_NO_DIRECT_ICB_ENTRIES (-25336) +/** Too many ICB indirections, possibly a loop. */ +#define VERR_ISOFS_TOO_MANY_ICB_INDIRECTIONS (-25337) +/** Too deep ICB recursion. */ +#define VERR_ISOFS_TOO_DEEP_ICB_RECURSION (-25338) +/** ICB is too small to contain anything useful. */ +#define VERR_ISOFS_ICB_ENTRY_TOO_SMALL (-25339) +/** Unsupported tag encountered in ICB. */ +#define VERR_ISOFS_UNSUPPORTED_ICB (-25340) +/** Bad file entry (ICB). */ +#define VERR_ISOFS_BAD_FILE_ENTRY (-25341) +/** Unknown allocation descriptor type. */ +#define VERR_ISO_FS_UNKNOWN_AD_TYPE (-25342) +/** Malformed extended allocation descriptor. */ +#define VERR_ISOFS_BAD_EXTAD (-25343) +/** Wrong file type. */ +#define VERR_ISOFS_WRONG_FILE_TYPE (-25344) +/** Unknow file type. */ +#define VERR_ISOFS_UNKNOWN_FILE_TYPE (-25345) + +/** Not implemented for UDF. */ +#define VERR_ISOFS_UDF_NOT_IMPLEMENTED (-25390) +/** Internal processing error \#1. */ +#define VERR_ISOFS_IPE_1 (-25391) +/** Internal processing error \#2. */ +#define VERR_ISOFS_IPE_2 (-25392) +/** Internal processing error \#3. */ +#define VERR_ISOFS_IPE_3 (-25393) +/** Internal processing error \#4. */ +#define VERR_ISOFS_IPE_4 (-25394) +/** Internal processing error \#5. */ +#define VERR_ISOFS_IPE_5 (-25395) + +/** @} */ + +/* SED-END */ + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/fs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/fs.h @@ -0,0 +1,641 @@ +/** @file + * IPRT - Filesystem. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_fs_h +#define ___iprt_fs_h + +#include +#include +#include + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_fs RTFs - Filesystem and Volume + * @ingroup grp_rt + * @{ + */ + + +/** @name Filesystem Object Mode Flags. + * + * There are two sets of flags: the unix mode flags and the dos attributes. + * + * APIs returning mode flags will provide both sets. + * + * When specifying mode flags to any API at least one of them must be given. If + * one set is missing the API will synthesize it from the one given if it + * requires it. + * + * Both sets match their x86 ABIs, the DOS/NT one is simply shifted up 16 bits. + * The DOS/NT range is bits 16 to 31 inclusively. The Unix range is bits 0 to 15 + * (inclusively). + * + * @remarks These constants have been comitted to a binary format and must not + * be changed in any incompatible ways. + * + * @{ + */ + +/** Set user id on execution (S_ISUID). */ +#define RTFS_UNIX_ISUID 0004000U +/** Set group id on execution (S_ISGID). */ +#define RTFS_UNIX_ISGID 0002000U +/** Sticky bit (S_ISVTX / S_ISTXT). */ +#define RTFS_UNIX_ISTXT 0001000U + +/** Owner RWX mask (S_IRWXU). */ +#define RTFS_UNIX_IRWXU 0000700U +/** Owner readable (S_IRUSR). */ +#define RTFS_UNIX_IRUSR 0000400U +/** Owner writable (S_IWUSR). */ +#define RTFS_UNIX_IWUSR 0000200U +/** Owner executable (S_IXUSR). */ +#define RTFS_UNIX_IXUSR 0000100U + +/** Group RWX mask (S_IRWXG). */ +#define RTFS_UNIX_IRWXG 0000070U +/** Group readable (S_IRGRP). */ +#define RTFS_UNIX_IRGRP 0000040U +/** Group writable (S_IWGRP). */ +#define RTFS_UNIX_IWGRP 0000020U +/** Group executable (S_IXGRP). */ +#define RTFS_UNIX_IXGRP 0000010U + +/** Other RWX mask (S_IRWXO). */ +#define RTFS_UNIX_IRWXO 0000007U +/** Other readable (S_IROTH). */ +#define RTFS_UNIX_IROTH 0000004U +/** Other writable (S_IWOTH). */ +#define RTFS_UNIX_IWOTH 0000002U +/** Other executable (S_IXOTH). */ +#define RTFS_UNIX_IXOTH 0000001U + +/** All UNIX access permission bits (0777). */ +#define RTFS_UNIX_ALL_ACCESS_PERMS 0000777U +/** All UNIX permission bits, including set id and sticky bits. */ +#define RTFS_UNIX_ALL_PERMS 0007777U + +/** Named pipe (fifo) (S_IFIFO). */ +#define RTFS_TYPE_FIFO 0010000U +/** Character device (S_IFCHR). */ +#define RTFS_TYPE_DEV_CHAR 0020000U +/** Directory (S_IFDIR). */ +#define RTFS_TYPE_DIRECTORY 0040000U +/** Block device (S_IFBLK). */ +#define RTFS_TYPE_DEV_BLOCK 0060000U +/** Regular file (S_IFREG). */ +#define RTFS_TYPE_FILE 0100000U +/** Symbolic link (S_IFLNK). */ +#define RTFS_TYPE_SYMLINK 0120000U +/** Socket (S_IFSOCK). */ +#define RTFS_TYPE_SOCKET 0140000U +/** Whiteout (S_IFWHT). */ +#define RTFS_TYPE_WHITEOUT 0160000U +/** Type mask (S_IFMT). */ +#define RTFS_TYPE_MASK 0170000U +/** The shift count to convert between RTFS_TYPE_MASK and DIRENTRYTYPE. */ +#define RTFS_TYPE_DIRENTRYTYPE_SHIFT 12 + +/** Unix attribute mask. */ +#define RTFS_UNIX_MASK 0xffffU +/** The mask of all the NT, OS/2 and DOS attributes. */ +#define RTFS_DOS_MASK (0x7fffU << RTFS_DOS_SHIFT) + +/** The shift value. */ +#define RTFS_DOS_SHIFT 16 +/** The mask of the OS/2 and DOS attributes. */ +#define RTFS_DOS_MASK_OS2 (0x003fU << RTFS_DOS_SHIFT) +/** The mask of the NT attributes. */ +#define RTFS_DOS_MASK_NT (0x7fffU << RTFS_DOS_SHIFT) + +/** Readonly object. */ +#define RTFS_DOS_READONLY (0x0001U << RTFS_DOS_SHIFT) +/** Hidden object. */ +#define RTFS_DOS_HIDDEN (0x0002U << RTFS_DOS_SHIFT) +/** System object. */ +#define RTFS_DOS_SYSTEM (0x0004U << RTFS_DOS_SHIFT) +/** Directory. */ +#define RTFS_DOS_DIRECTORY (0x0010U << RTFS_DOS_SHIFT) +/** Archived object. + * This bit is set by the filesystem after each modification of a file. */ +#define RTFS_DOS_ARCHIVED (0x0020U << RTFS_DOS_SHIFT) +/** Undocumented / Reserved, used to be the FAT volume label. */ +#define RTFS_DOS_NT_DEVICE (0x0040U << RTFS_DOS_SHIFT) +/** Normal object, no other attribute set (NT). */ +#define RTFS_DOS_NT_NORMAL (0x0080U << RTFS_DOS_SHIFT) +/** Temporary object (NT). */ +#define RTFS_DOS_NT_TEMPORARY (0x0100U << RTFS_DOS_SHIFT) +/** Sparse file (NT). */ +#define RTFS_DOS_NT_SPARSE_FILE (0x0200U << RTFS_DOS_SHIFT) +/** Reparse point (NT). */ +#define RTFS_DOS_NT_REPARSE_POINT (0x0400U << RTFS_DOS_SHIFT) +/** Compressed object (NT). + * For a directory, compression is the default for new files. */ +#define RTFS_DOS_NT_COMPRESSED (0x0800U << RTFS_DOS_SHIFT) +/** Physically offline data (NT). + * MSDN say, don't mess with this one. */ +#define RTFS_DOS_NT_OFFLINE (0x1000U << RTFS_DOS_SHIFT) +/** Not content indexed by the content indexing service (NT). */ +#define RTFS_DOS_NT_NOT_CONTENT_INDEXED (0x2000U << RTFS_DOS_SHIFT) +/** Encryped object (NT). + * For a directory, encrypted is the default for new files. */ +#define RTFS_DOS_NT_ENCRYPTED (0x4000U << RTFS_DOS_SHIFT) + +/** @} */ + + +/** @name Filesystem Object Type Predicates. + * @{ */ +/** Checks the mode flags indicate a named pipe (fifo) (S_ISFIFO). */ +#define RTFS_IS_FIFO(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_FIFO ) +/** Checks the mode flags indicate a character device (S_ISCHR). */ +#define RTFS_IS_DEV_CHAR(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_DEV_CHAR ) +/** Checks the mode flags indicate a directory (S_ISDIR). */ +#define RTFS_IS_DIRECTORY(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_DIRECTORY ) +/** Checks the mode flags indicate a block device (S_ISBLK). */ +#define RTFS_IS_DEV_BLOCK(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_DEV_BLOCK ) +/** Checks the mode flags indicate a regular file (S_ISREG). */ +#define RTFS_IS_FILE(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_FILE ) +/** Checks the mode flags indicate a symbolic link (S_ISLNK). */ +#define RTFS_IS_SYMLINK(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_SYMLINK ) +/** Checks the mode flags indicate a socket (S_ISSOCK). */ +#define RTFS_IS_SOCKET(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_SOCKET ) +/** Checks the mode flags indicate a whiteout (S_ISWHT). */ +#define RTFS_IS_WHITEOUT(fMode) ( ((fMode) & RTFS_TYPE_MASK) == RTFS_TYPE_WHITEOUT ) +/** @} */ + + +/** + * Filesystem type IDs returned by RTFsQueryType. + * + * This enum is subject to changes and must not be used as part of any ABI or + * binary format (file, network, etc). + * + * @remarks When adding new entries, please update RTFsTypeName(). Also, try + * add them to the most natural group. + */ +typedef enum RTFSTYPE +{ + /** Unknown file system. */ + RTFSTYPE_UNKNOWN = 0, + + /** Universal Disk Format. */ + RTFSTYPE_UDF, + /** ISO 9660, aka Compact Disc File System (CDFS). */ + RTFSTYPE_ISO9660, + /** Filesystem in Userspace. */ + RTFSTYPE_FUSE, + /** VirtualBox shared folders. */ + RTFSTYPE_VBOXSHF, + + /* Linux: */ + RTFSTYPE_EXT, + RTFSTYPE_EXT2, + RTFSTYPE_EXT3, + RTFSTYPE_EXT4, + RTFSTYPE_XFS, + RTFSTYPE_CIFS, + RTFSTYPE_SMBFS, + RTFSTYPE_TMPFS, + RTFSTYPE_SYSFS, + RTFSTYPE_PROC, + RTFSTYPE_OCFS2, + RTFSTYPE_BTRFS, + + /* Windows: */ + /** New Technology File System. */ + RTFSTYPE_NTFS, + /** FAT12, FAT16 and FAT32 lumped into one basket. + * The partition size limit of FAT12 and FAT16 will be the factor + * limiting the file size (except, perhaps for the 64KB cluster case on + * non-Windows hosts). */ + RTFSTYPE_FAT, + /** Extended File Allocation Table, main target are flash drives. */ + RTFSTYPE_EXFAT, + + /* Solaris: */ + /** Zettabyte File System. */ + RTFSTYPE_ZFS, + /** Unix File System. */ + RTFSTYPE_UFS, + /** Network File System. */ + RTFSTYPE_NFS, + + /* Mac OS X: */ + /** Hierarchical File System. */ + RTFSTYPE_HFS, + /** @todo RTFSTYPE_HFS_PLUS? */ + RTFSTYPE_AUTOFS, + RTFSTYPE_DEVFS, + + /* *BSD: */ + + /* OS/2: */ + /** High Performance File System. */ + RTFSTYPE_HPFS, + /** Journaled File System (v2). */ + RTFSTYPE_JFS, + + /** The end of valid Filesystem types IDs. */ + RTFSTYPE_END, + /** The usual 32-bit type blow up. */ + RTFSTYPE_32BIT_HACK = 0x7fffffff +} RTFSTYPE; +/** Pointer to a Filesystem type ID. */ +typedef RTFSTYPE *PRTFSTYPE; + + +/** + * The available additional information in a RTFSOBJATTR object. + */ +typedef enum RTFSOBJATTRADD +{ + /** No additional information is available / requested. */ + RTFSOBJATTRADD_NOTHING = 1, + /** The additional unix attributes (RTFSOBJATTR::u::Unix) are available / + * requested. */ + RTFSOBJATTRADD_UNIX, + /** The additional unix attributes (RTFSOBJATTR::u::UnixOwner) are + * available / requested. */ + RTFSOBJATTRADD_UNIX_OWNER, + /** The additional unix attributes (RTFSOBJATTR::u::UnixGroup) are + * available / requested. */ + RTFSOBJATTRADD_UNIX_GROUP, + /** The additional extended attribute size (RTFSOBJATTR::u::EASize) is available / requested. */ + RTFSOBJATTRADD_EASIZE, + /** The last valid item (inclusive). + * The valid range is RTFSOBJATTRADD_NOTHING thru RTFSOBJATTRADD_LAST. */ + RTFSOBJATTRADD_LAST = RTFSOBJATTRADD_EASIZE, + + /** The usual 32-bit hack. */ + RTFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff +} RTFSOBJATTRADD; + +/** The number of bytes reserved for the additional attribute union. */ +#define RTFSOBJATTRUNION_MAX_SIZE 128 + +/** + * Additional Unix Attributes (RTFSOBJATTRADD_UNIX). + */ +typedef struct RTFSOBJATTRUNIX +{ + /** The user owning the filesystem object (st_uid). + * This field is NIL_RTUID if not supported. */ + RTUID uid; + + /** The group the filesystem object is assigned (st_gid). + * This field is NIL_RTGID if not supported. */ + RTGID gid; + + /** Number of hard links to this filesystem object (st_nlink). + * This field is 1 if the filesystem doesn't support hardlinking or + * the information isn't available. + */ + uint32_t cHardlinks; + + /** The device number of the device which this filesystem object resides on (st_dev). + * This field is 0 if this information is not available. */ + RTDEV INodeIdDevice; + + /** The unique identifier (within the filesystem) of this filesystem object (st_ino). + * Together with INodeIdDevice, this field can be used as a OS wide unique id + * when both their values are not 0. + * This field is 0 if the information is not available. + * + * @remarks The special '..' dir always shows up with 0 on NTFS/Windows. */ + RTINODE INodeId; + + /** User flags (st_flags). + * This field is 0 if this information is not available. */ + uint32_t fFlags; + + /** The current generation number (st_gen). + * This field is 0 if this information is not available. */ + uint32_t GenerationId; + + /** The device number of a character or block device type object (st_rdev). + * This field is 0 if the file isn't of a character or block device type and + * when the OS doesn't subscribe to the major+minor device idenfication scheme. */ + RTDEV Device; +} RTFSOBJATTRUNIX; + + +/** + * Additional Unix Attributes (RTFSOBJATTRADD_UNIX_OWNER). + * + * @remarks This interface is mainly for TAR. + */ +typedef struct RTFSOBJATTRUNIXOWNER +{ + /** The user owning the filesystem object (st_uid). + * This field is NIL_UID if not supported. */ + RTUID uid; + /** The user name. + * Empty if not available or not supported, truncated if too long. */ + char szName[RTFSOBJATTRUNION_MAX_SIZE - sizeof(RTUID)]; +} RTFSOBJATTRUNIXOWNER; + + +/** + * Additional Unix Attributes (RTFSOBJATTRADD_UNIX_GROUP). + * + * @remarks This interface is mainly for TAR. + */ +typedef struct RTFSOBJATTRUNIXGROUP +{ + /** The user owning the filesystem object (st_uid). + * This field is NIL_GID if not supported. */ + RTGID gid; + /** The group name. + * Empty if not available or not supported, truncated if too long. */ + char szName[RTFSOBJATTRUNION_MAX_SIZE - sizeof(RTGID)]; +} RTFSOBJATTRUNIXGROUP; + + +/** + * Filesystem object attributes. + */ +typedef struct RTFSOBJATTR +{ + /** Mode flags (st_mode). RTFS_UNIX_*, RTFS_TYPE_*, and RTFS_DOS_*. */ + RTFMODE fMode; + + /** The additional attributes available. */ + RTFSOBJATTRADD enmAdditional; + + /** + * Additional attributes. + * + * Unless explicitly specified to an API, the API can provide additional + * data as it is provided by the underlying OS. + */ + union RTFSOBJATTRUNION + { + /** Additional Unix Attributes - RTFSOBJATTRADD_UNIX. */ + RTFSOBJATTRUNIX Unix; + /** Additional Unix Owner Attributes - RTFSOBJATTRADD_UNIX_OWNER. */ + RTFSOBJATTRUNIXOWNER UnixOwner; + /** Additional Unix Group Attributes - RTFSOBJATTRADD_UNIX_GROUP. */ + RTFSOBJATTRUNIXGROUP UnixGroup; + + /** + * Extended attribute size is available when RTFS_DOS_HAVE_EA_SIZE is set. + */ + struct RTFSOBJATTREASIZE + { + /** Size of EAs. */ + RTFOFF cb; + } EASize; + /** Reserved space. */ + uint8_t abReserveSpace[128]; + } u; +} RTFSOBJATTR; +/** Pointer to a filesystem object attributes structure. */ +typedef RTFSOBJATTR *PRTFSOBJATTR; +/** Pointer to a const filesystem object attributes structure. */ +typedef const RTFSOBJATTR *PCRTFSOBJATTR; + + +/** + * Filesystem object information structure. + * + * This is returned by the RTPathQueryInfo(), RTFileQueryInfo() and RTDirRead() APIs. + */ +typedef struct RTFSOBJINFO +{ + /** Logical size (st_size). + * For normal files this is the size of the file. + * For symbolic links, this is the length of the path name contained + * in the symbolic link. + * For other objects this fields needs to be specified. + */ + RTFOFF cbObject; + + /** Disk allocation size (st_blocks * DEV_BSIZE). */ + RTFOFF cbAllocated; + + /** Time of last access (st_atime). */ + RTTIMESPEC AccessTime; + + /** Time of last data modification (st_mtime). */ + RTTIMESPEC ModificationTime; + + /** Time of last status change (st_ctime). + * If not available this is set to ModificationTime. + */ + RTTIMESPEC ChangeTime; + + /** Time of file birth (st_birthtime). + * If not available this is set to ChangeTime. + */ + RTTIMESPEC BirthTime; + + /** Attributes. */ + RTFSOBJATTR Attr; + +} RTFSOBJINFO; +/** Pointer to a filesystem object information structure. */ +typedef RTFSOBJINFO *PRTFSOBJINFO; +/** Pointer to a const filesystem object information structure. */ +typedef const RTFSOBJINFO *PCRTFSOBJINFO; + + +#ifdef IN_RING3 + +/** + * Query the sizes of a filesystem. + * + * @returns iprt status code. + * @param pszFsPath Path within the mounted filesystem. + * @param pcbTotal Where to store the total filesystem space. (Optional) + * @param pcbFree Where to store the remaining free space in the filesystem. (Optional) + * @param pcbBlock Where to store the block size. (Optional) + * @param pcbSector Where to store the sector size. (Optional) + * + * @sa RTFileQueryFsSizes + */ +RTR3DECL(int) RTFsQuerySizes(const char *pszFsPath, PRTFOFF pcbTotal, RTFOFF *pcbFree, + uint32_t *pcbBlock, uint32_t *pcbSector); + +/** + * Query the mountpoint of a filesystem. + * + * @returns iprt status code. + * @returns VERR_BUFFER_OVERFLOW if cbMountpoint isn't enough. + * @param pszFsPath Path within the mounted filesystem. + * @param pszMountpoint Where to store the mountpoint path. + * @param cbMountpoint Size of the buffer pointed to by pszMountpoint. + */ +RTR3DECL(int) RTFsQueryMountpoint(const char *pszFsPath, char *pszMountpoint, size_t cbMountpoint); + +/** + * Query the label of a filesystem. + * + * @returns iprt status code. + * @returns VERR_BUFFER_OVERFLOW if cbLabel isn't enough. + * @param pszFsPath Path within the mounted filesystem. + * @param pszLabel Where to store the label. + * @param cbLabel Size of the buffer pointed to by pszLabel. + */ +RTR3DECL(int) RTFsQueryLabel(const char *pszFsPath, char *pszLabel, size_t cbLabel); + +/** + * Query the serial number of a filesystem. + * + * @returns iprt status code. + * @param pszFsPath Path within the mounted filesystem. + * @param pu32Serial Where to store the serial number. + */ +RTR3DECL(int) RTFsQuerySerial(const char *pszFsPath, uint32_t *pu32Serial); + +/** + * Query the name of the filesystem driver. + * + * @returns iprt status code. + * @returns VERR_BUFFER_OVERFLOW if cbFsDriver isn't enough. + * @param pszFsPath Path within the mounted filesystem. + * @param pszFsDriver Where to store the filesystem driver name. + * @param cbFsDriver Size of the buffer pointed to by pszFsDriver. + */ +RTR3DECL(int) RTFsQueryDriver(const char *pszFsPath, char *pszFsDriver, size_t cbFsDriver); + +/** + * Query the name of the filesystem the file is located on. + * + * @returns iprt status code. + * @param pszFsPath Path within the mounted filesystem. It must exist. + * In case this is a symlink, the file it refers to is + * evaluated. + * @param penmType Where to store the filesystem type, this is always + * set. See RTFSTYPE for the values. + */ +RTR3DECL(int) RTFsQueryType(const char *pszFsPath, PRTFSTYPE penmType); + +#endif /* IN_RING3 */ + +/** + * Gets the name of a filesystem type. + * + * @returns Pointer to a read-only string containing the name. + * @param enmType A valid filesystem ID. If outside the valid range, + * the returned string will be pointing to a static + * memory buffer which will be changed on subsequent + * calls to this function by any thread. + */ +RTDECL(const char *) RTFsTypeName(RTFSTYPE enmType); + +/** + * Filesystem properties. + */ +typedef struct RTFSPROPERTIES +{ + /** The maximum size of a filesystem object name. + * This does not include the '\\0'. */ + uint32_t cbMaxComponent; + + /** True if the filesystem is remote. + * False if the filesystem is local. */ + bool fRemote; + + /** True if the filesystem is case sensitive. + * False if the filesystem is case insensitive. */ + bool fCaseSensitive; + + /** True if the filesystem is mounted read only. + * False if the filesystem is mounted read write. */ + bool fReadOnly; + + /** True if the filesystem can encode unicode object names. + * False if it can't. */ + bool fSupportsUnicode; + + /** True if the filesystem is compresses. + * False if it isn't or we don't know. */ + bool fCompressed; + + /** True if the filesystem compresses of individual files. + * False if it doesn't or we don't know. */ + bool fFileCompression; + + /** @todo more? */ +} RTFSPROPERTIES; +/** Pointer to a filesystem properties structure. */ +typedef RTFSPROPERTIES *PRTFSPROPERTIES; +/** Pointer to a const filesystem properties structure. */ +typedef RTFSPROPERTIES const *PCRTFSPROPERTIES; + +#ifdef IN_RING3 + +/** + * Query the properties of a mounted filesystem. + * + * @returns iprt status code. + * @param pszFsPath Path within the mounted filesystem. + * @param pProperties Where to store the properties. + */ +RTR3DECL(int) RTFsQueryProperties(const char *pszFsPath, PRTFSPROPERTIES pProperties); + +/** + * Checks if the given volume is case sensitive or not. + * + * This may be misleading in some cases as we lack the necessary APIs to query + * the information on some system (or choose not to use them) and are instead + * returning the general position on case sensitive file name of the system. + * + * @returns @c true if case sensitive, @c false if not. + * @param pszFsPath Path within the mounted file system. + */ +RTR3DECL(bool) RTFsIsCaseSensitive(const char *pszFsPath); + +/** + * Mountpoint enumerator callback. + * + * @returns iprt status code. Failure terminates the enumeration. + * @param pszMountpoint The mountpoint name. + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(int) FNRTFSMOUNTPOINTENUM(const char *pszMountpoint, void *pvUser); +/** Pointer to a FNRTFSMOUNTPOINTENUM(). */ +typedef FNRTFSMOUNTPOINTENUM *PFNRTFSMOUNTPOINTENUM; + +/** + * Enumerate mount points. + * + * @returns iprt status code. + * @param pfnCallback The callback function. + * @param pvUser The user argument to the callback. + */ +RTR3DECL(int) RTFsMountpointsEnum(PFNRTFSMOUNTPOINTENUM pfnCallback, void *pvUser); + + +#endif /* IN_RING3 */ + +/** @} */ + +RT_C_DECLS_END + +#endif /* !___iprt_fs_h */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/latin1.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/latin1.h @@ -0,0 +1,392 @@ +/** @file + * IPRT - String Manipulation, Latin-1 (ISO-8859-1) encoding. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_latin1_h +#define ___iprt_latin1_h + +#include + +RT_C_DECLS_BEGIN + + +/** @defgroup rt_str_latin1 Latin-1 (ISO-8859-1) String Manipulation + * @ingroup grp_rt_str + * + * Deals with Latin-1 encoded strings. + * + * @warning Make sure to name all variables dealing with Latin-1 strings + * suchthat there is no way to mistake them for normal UTF-8 strings. + * There may be severe security issues resulting from mistaking Latin-1 + * for UTF-8! + * + * @{ + */ + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pszLatin1 The Latin-1 string. + */ +DECLINLINE(RTUNICP) RTLatin1GetCp(const char *pszLatin1) +{ + return *(const unsigned char *)pszLatin1; +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppszLatin1 Pointer to the string pointer. This will be updated to + * point to the char following the current code point. This + * is advanced one character forward on failure. + * @param pCp Where to store the code point. RTUNICP_INVALID is stored + * here on failure. + */ +DECLINLINE(int) RTLatin1GetCpEx(const char **ppszLatin1, PRTUNICP pCp) +{ + const unsigned char uch = **(const unsigned char **)ppszLatin1; + (*ppszLatin1)++; + *pCp = uch; + return VINF_SUCCESS; +} + +/** + * Get the unicode code point at the given string position for a string of a + * given maximum length. + * + * @returns iprt status code. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppszLatin1 Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pcchLatin1 Pointer to the maximum string length. This will be + * decremented by the size of the code point found. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + */ +DECLINLINE(int) RTLatin1GetCpNEx(const char **ppszLatin1, size_t *pcchLatin1, PRTUNICP pCp) +{ + if (RT_LIKELY(*pcchLatin1 != 0)) + { + const unsigned char uch = **(const unsigned char **)ppszLatin1; + (*ppszLatin1)++; + (*pcchLatin1)--; + *pCp = uch; + return VINF_SUCCESS; + } + *pCp = RTUNICP_INVALID; + return VERR_END_OF_STRING; +} + +/** + * Get the Latin-1 size in characters of a given Unicode code point. + * + * The code point is expected to be a valid Unicode one, but not necessarily in + * the range supported by Latin-1. + * + * @returns the size in characters, or zero if there is no Latin-1 encoding + */ +DECLINLINE(size_t) RTLatin1CpSize(RTUNICP CodePoint) +{ + if (CodePoint < 0x100) + return 1; + return 0; +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pszLatin1 The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the Latin-1 range. + */ +DECLINLINE(char *) RTLatin1PutCp(char *pszLatin1, RTUNICP CodePoint) +{ + AssertReturn(CodePoint < 0x100, NULL); + *pszLatin1++ = (unsigned char)CodePoint; + return pszLatin1; +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param pszLatin1 Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(char *) RTLatin1NextCp(const char *pszLatin1) +{ + pszLatin1++; + return (char *)pszLatin1; +} + +/** + * Skips back to the previous code point. + * + * @returns Pointer to the char before the current code point. + * @returns pszLatin1Start on failure. + * @param pszLatin1Start Pointer to the start of the string. + * @param pszLatin1 Pointer to the current code point. + */ +DECLINLINE(char *) RTLatin1PrevCp(const char *pszLatin1Start, const char *pszLatin1) +{ + if ((uintptr_t)pszLatin1 > (uintptr_t)pszLatin1Start) + { + pszLatin1--; + return (char *)pszLatin1; + } + return (char *)pszLatin1Start; +} + +/** + * Translate a Latin1 string into a UTF-8 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszLatin1 Latin1 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTLatin1ToUtf8(pszLatin1, ppszString) RTLatin1ToUtf8Tag((pszLatin1), (ppszString), RTSTR_TAG) + +/** + * Translate a Latin-1 string into a UTF-8 allocating the result buffer. + * + * @returns iprt status code. + * @param pszLatin1 Latin-1 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf8Tag(const char *pszLatin1, char **ppszString, const char *pszTag); + +/** + * Translates Latin-1 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The number of Latin-1 characters to translate from + * pszLatin1. The translation will stop when reaching + * cchLatin1 or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz If @a cch is non-zero, this must either be pointing + * to a pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or + * @a cch is zero a buffer of at least @a cch chars + * will be allocated to hold the translated string. If + * a buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTLatin1ToUtf8Ex(pszLatin1, cchLatin1, ppsz, cch, pcch) \ + RTLatin1ToUtf8ExTag((pszLatin1), (cchLatin1), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates Latin1 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin1 string to convert. + * @param cchLatin1 The number of Latin1 characters to translate from + * pwszString. The translation will stop when + * reaching cchLatin1 or the terminator ('\\0'). Use + * RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * a pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch chars will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf8ExTag(const char *pszLatin1, size_t cchLatin1, char **ppsz, size_t cch, size_t *pcch, + const char *pszTag); + +/** + * Calculates the length of the Latin-1 string in UTF-8 chars (bytes). + * + * The primary purpose of this function is to help allocate buffers for + * RTLatin1ToUtf8() of the correct size. For most other purposes + * RTLatin1ToUtf8Ex() should be used. + * + * @returns Number of chars (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pszLatin1 The Latin-1 string. + */ +RTDECL(size_t) RTLatin1CalcUtf8Len(const char *pszLatin1); + +/** + * Calculates the length of the Latin-1 string in UTF-8 chars (bytes). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string. + * @param cchLatin1 The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTLatin1CalcUtf8LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcch); + +/** + * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items. + * + * @returns Number of RTUTF16 items. + * @param pszLatin1 The Latin-1 string. + */ +RTDECL(size_t) RTLatin1CalcUtf16Len(const char *pszLatin1); + +/** + * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items. + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string. + * @param cchLatin1 The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcwc Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTLatin1CalcUtf16LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcwc); + +/** + * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result + * buffer (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. The + * returned string must be freed using RTUtf16Free(). + */ +#define RTLatin1ToUtf16(pszLatin1, ppwszString) RTLatin1ToUtf16Tag((pszLatin1), (ppwszString), RTSTR_TAG) + +/** + * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result + * buffer (custom tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. The + * returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf16Tag(const char *pszLatin1, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the + * result buffer if requested (default tag). + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The maximum size in chars (the type) to convert. The + * conversion stops when it reaches cchLatin1 or the + * string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing + * to pointer to a buffer of the specified size, or + * pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at + * least cwc items will be allocated to hold the + * translated string. If a buffer was requested it + * must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the + * terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTLatin1ToUtf16Ex(pszLatin1, cchLatin1, ppwsz, cwc, pcwc) \ + RTLatin1ToUtf16ExTag((pszLatin1), (cchLatin1), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the + * result buffer if requested. + * + * @returns iprt status code. + * @param pszLatin1 The Latin-1 string to convert. + * @param cchLatin1 The maximum size in chars (the type) to convert. The + * conversion stops when it reaches cchLatin1 or the + * string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing + * to pointer to a buffer of the specified size, or + * pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at + * least cwc items will be allocated to hold the + * translated string. If a buffer was requested it + * must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the + * terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTLatin1ToUtf16ExTag(const char *pszLatin1, size_t cchLatin1, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + +/** @} */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/log.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/log.h @@ -0,0 +1,2568 @@ +/** @file + * IPRT - Logging. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_log_h +#define ___iprt_log_h + +#include +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_log RTLog - Logging + * @ingroup grp_rt + * @{ + */ + +/** + * IPRT Logging Groups. + * (Remember to update RT_LOGGROUP_NAMES!) + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +typedef enum RTLOGGROUP +{ + /** Default logging group. */ + RTLOGGROUP_DEFAULT, + RTLOGGROUP_CRYPTO, + RTLOGGROUP_DBG, + RTLOGGROUP_DBG_DWARF, + RTLOGGROUP_DIR, + RTLOGGROUP_FILE, + RTLOGGROUP_FS, + RTLOGGROUP_HTTP, + RTLOGGROUP_LDR, + RTLOGGROUP_PATH, + RTLOGGROUP_PROCESS, + RTLOGGROUP_SYMLINK, + RTLOGGROUP_THREAD, + RTLOGGROUP_TIME, + RTLOGGROUP_TIMER, + RTLOGGROUP_LOCALIPC, + RTLOGGROUP_VFS, + RTLOGGROUP_ZIP = 31, + RTLOGGROUP_FIRST_USER = 32 +} RTLOGGROUP; + +/** @def RT_LOGGROUP_NAMES + * IPRT Logging group names. + * + * Must correspond 100% to RTLOGGROUP! + * Don't forget commas! + * + * @remark It should be pretty obvious, but just to have + * mentioned it, the values are sorted alphabetically (using the + * english alphabet) except for _DEFAULT which is always first. + * + * If anyone might be wondering what the alphabet looks like: + * a b c d e f g h i j k l m n o p q r s t u v w x y z + */ +#define RT_LOGGROUP_NAMES \ + "DEFAULT", \ + "RT_CRYPTO", \ + "RT_DBG", \ + "RT_DBG_DWARF", \ + "RT_DIR", \ + "RT_FILE", \ + "RT_FS", \ + "RT_HTTP", \ + "RT_LDR", \ + "RT_PATH", \ + "RT_PROCESS", \ + "RT_SYMLINK", \ + "RT_THREAD", \ + "RT_TIME", \ + "RT_TIMER", \ + "RT_LOCALIPC", \ + "RT_VFS", \ + "RT_17", \ + "RT_18", \ + "RT_19", \ + "RT_20", \ + "RT_21", \ + "RT_22", \ + "RT_23", \ + "RT_24", \ + "RT_25", \ + "RT_26", \ + "RT_27", \ + "RT_28", \ + "RT_29", \ + "RT_30", \ + "RT_ZIP" \ + + +/** @def LOG_GROUP + * Active logging group. + */ +#ifndef LOG_GROUP +# define LOG_GROUP RTLOGGROUP_DEFAULT +#endif + +/** @def LOG_FN_FMT + * You can use this to specify you desired way of printing __PRETTY_FUNCTION__ + * if you dislike the default one. + */ +#ifndef LOG_FN_FMT +# define LOG_FN_FMT "%Rfn" +#endif + +#ifdef LOG_INSTANCE +# error "LOG_INSTANCE is no longer supported." +#endif +#ifdef LOG_REL_INSTANCE +# error "LOG_REL_INSTANCE is no longer supported." +#endif + +/** Logger structure. */ +#ifdef IN_RC +typedef struct RTLOGGERRC RTLOGGER; +#else +typedef struct RTLOGGER RTLOGGER; +#endif +/** Pointer to logger structure. */ +typedef RTLOGGER *PRTLOGGER; +/** Pointer to const logger structure. */ +typedef const RTLOGGER *PCRTLOGGER; + + +/** Guest context logger structure. */ +typedef struct RTLOGGERRC RTLOGGERRC; +/** Pointer to guest context logger structure. */ +typedef RTLOGGERRC *PRTLOGGERRC; +/** Pointer to const guest context logger structure. */ +typedef const RTLOGGERRC *PCRTLOGGERRC; + + +/** + * Logger phase. + * + * Used for signalling the log header/footer callback what to do. + */ +typedef enum RTLOGPHASE +{ + /** Begin of the logging. */ + RTLOGPHASE_BEGIN = 0, + /** End of the logging. */ + RTLOGPHASE_END, + /** Before rotating the log file. */ + RTLOGPHASE_PREROTATE, + /** After rotating the log file. */ + RTLOGPHASE_POSTROTATE, + /** 32-bit type blow up hack. */ + RTLOGPHASE_32BIT_HACK = 0x7fffffff +} RTLOGPHASE; + + +/** + * Logger function. + * + * @param pszFormat Format string. + * @param ... Optional arguments as specified in the format string. + */ +typedef DECLCALLBACK(void) FNRTLOGGER(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); +/** Pointer to logger function. */ +typedef FNRTLOGGER *PFNRTLOGGER; + +/** + * Flush function. + * + * @param pLogger Pointer to the logger instance which is to be flushed. + */ +typedef DECLCALLBACK(void) FNRTLOGFLUSH(PRTLOGGER pLogger); +/** Pointer to flush function. */ +typedef FNRTLOGFLUSH *PFNRTLOGFLUSH; + +/** + * Flush function. + * + * @param pLogger Pointer to the logger instance which is to be flushed. + */ +typedef DECLCALLBACK(void) FNRTLOGFLUSHGC(PRTLOGGERRC pLogger); +/** Pointer to logger function. */ +typedef RCPTRTYPE(FNRTLOGFLUSHGC *) PFNRTLOGFLUSHGC; + +/** + * Header/footer message callback. + * + * @param pLogger Pointer to the logger instance. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +typedef DECLCALLBACK(void) FNRTLOGPHASEMSG(PRTLOGGER pLogger, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3); +/** Pointer to header/footer message callback function. */ +typedef FNRTLOGPHASEMSG *PFNRTLOGPHASEMSG; + +/** + * Log file header/footer callback. + * + * @param pLogger Pointer to the logger instance. + * @param enmLogPhase Indicates at what time the callback is invoked. + * @param pfnLogPhaseMsg Callback for writing the header/footer (RTLogPrintf + * and others are out of bounds). + */ +typedef DECLCALLBACK(void) FNRTLOGPHASE(PRTLOGGER pLogger, RTLOGPHASE enmLogPhase, PFNRTLOGPHASEMSG pfnLogPhaseMsg); +/** Pointer to log header/footer callback function. */ +typedef FNRTLOGPHASE *PFNRTLOGPHASE; + +/** + * Custom log prefix callback. + * + * + * @returns The number of chars written. + * + * @param pLogger Pointer to the logger instance. + * @param pchBuf Output buffer pointer. + * No need to terminate the output. + * @param cchBuf The size of the output buffer. + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(size_t) FNRTLOGPREFIX(PRTLOGGER pLogger, char *pchBuf, size_t cchBuf, void *pvUser); +/** Pointer to prefix callback function. */ +typedef FNRTLOGPREFIX *PFNRTLOGPREFIX; + + + +/** + * Logger instance structure for raw-mode context (RC). + */ +struct RTLOGGERRC +{ + /** Pointer to temporary scratch buffer. + * This is used to format the log messages. */ + char achScratch[32768]; + /** Current scratch buffer position. */ + uint32_t offScratch; + /** This is set if a prefix is pending. */ + bool fPendingPrefix; + bool afAlignment[3]; + /** Pointer to the logger function. + * This is actually pointer to a wrapper which will push a pointer to the + * instance pointer onto the stack before jumping to the real logger function. + * A very unfortunate hack to work around the missing variadic macro support in C++. */ + RCPTRTYPE(PFNRTLOGGER) pfnLogger; + /** Pointer to the flush function. */ + PFNRTLOGFLUSHGC pfnFlush; + /** Magic number (RTLOGGERRC_MAGIC). */ + uint32_t u32Magic; + /** Logger instance flags - RTLOGFLAGS. */ + uint32_t fFlags; + /** Number of groups in the afGroups member. */ + uint32_t cGroups; + /** Group flags array - RTLOGGRPFLAGS. + * This member have variable length and may extend way beyond + * the declared size of 1 entry. */ + uint32_t afGroups[1]; +}; + +/** RTLOGGERRC::u32Magic value. (John Rogers Searle) */ +#define RTLOGGERRC_MAGIC 0x19320731 + + + +#ifndef IN_RC + +/** Pointer to internal logger bits. */ +typedef struct RTLOGGERINTERNAL *PRTLOGGERINTERNAL; + +/** + * Logger instance structure. + */ +struct RTLOGGER +{ + /** Pointer to temporary scratch buffer. + * This is used to format the log messages. */ + char achScratch[49152]; + /** Current scratch buffer position. */ + uint32_t offScratch; + /** Magic number. */ + uint32_t u32Magic; + /** Logger instance flags - RTLOGFLAGS. */ + uint32_t fFlags; + /** Destination flags - RTLOGDEST. */ + uint32_t fDestFlags; + /** Pointer to the internal bits of the logger. + * (The memory is allocated in the same block as RTLOGGER.) */ + PRTLOGGERINTERNAL pInt; + /** Pointer to the logger function (used in non-C99 mode only). + * + * This is actually pointer to a wrapper which will push a pointer to the + * instance pointer onto the stack before jumping to the real logger function. + * A very unfortunate hack to work around the missing variadic macro + * support in older C++/C standards. (The memory is allocated using + * RTMemExecAlloc(), except for agnostic R0 code.) */ + PFNRTLOGGER pfnLogger; + /** Number of groups in the afGroups and papszGroups members. */ + uint32_t cGroups; + /** Group flags array - RTLOGGRPFLAGS. + * This member have variable length and may extend way beyond + * the declared size of 1 entry. */ + uint32_t afGroups[1]; +}; + +/** RTLOGGER::u32Magic value. (Avram Noam Chomsky) */ +# define RTLOGGER_MAGIC UINT32_C(0x19281207) + +#endif /* !IN_RC */ + + +/** + * Logger flags. + */ +typedef enum RTLOGFLAGS +{ + /** The logger instance is disabled for normal output. */ + RTLOGFLAGS_DISABLED = 0x00000001, + /** The logger instance is using buffered output. */ + RTLOGFLAGS_BUFFERED = 0x00000002, + /** The logger instance expands LF to CR/LF. */ + RTLOGFLAGS_USECRLF = 0x00000010, + /** Append to the log destination where applicable. */ + RTLOGFLAGS_APPEND = 0x00000020, + /** Show relative timestamps with PREFIX_TSC and PREFIX_TS */ + RTLOGFLAGS_REL_TS = 0x00000040, + /** Show decimal timestamps with PREFIX_TSC and PREFIX_TS */ + RTLOGFLAGS_DECIMAL_TS = 0x00000080, + /** Open the file in write through mode. */ + RTLOGFLAGS_WRITE_THROUGH = 0x00000100, + /** Flush the file to disk when flushing the buffer. */ + RTLOGFLAGS_FLUSH = 0x00000200, + /** Restrict the number of log entries per group. */ + RTLOGFLAGS_RESTRICT_GROUPS = 0x00000400, + /** New lines should be prefixed with the write and read lock counts. */ + RTLOGFLAGS_PREFIX_LOCK_COUNTS = 0x00008000, + /** New lines should be prefixed with the CPU id (ApicID on intel/amd). */ + RTLOGFLAGS_PREFIX_CPUID = 0x00010000, + /** New lines should be prefixed with the native process id. */ + RTLOGFLAGS_PREFIX_PID = 0x00020000, + /** New lines should be prefixed with group flag number causing the output. */ + RTLOGFLAGS_PREFIX_FLAG_NO = 0x00040000, + /** New lines should be prefixed with group flag name causing the output. */ + RTLOGFLAGS_PREFIX_FLAG = 0x00080000, + /** New lines should be prefixed with group number. */ + RTLOGFLAGS_PREFIX_GROUP_NO = 0x00100000, + /** New lines should be prefixed with group name. */ + RTLOGFLAGS_PREFIX_GROUP = 0x00200000, + /** New lines should be prefixed with the native thread id. */ + RTLOGFLAGS_PREFIX_TID = 0x00400000, + /** New lines should be prefixed with thread name. */ + RTLOGFLAGS_PREFIX_THREAD = 0x00800000, + /** New lines should be prefixed with data from a custom callback. */ + RTLOGFLAGS_PREFIX_CUSTOM = 0x01000000, + /** New lines should be prefixed with formatted timestamp since program start. */ + RTLOGFLAGS_PREFIX_TIME_PROG = 0x04000000, + /** New lines should be prefixed with formatted timestamp (UCT). */ + RTLOGFLAGS_PREFIX_TIME = 0x08000000, + /** New lines should be prefixed with milliseconds since program start. */ + RTLOGFLAGS_PREFIX_MS_PROG = 0x10000000, + /** New lines should be prefixed with timestamp. */ + RTLOGFLAGS_PREFIX_TSC = 0x20000000, + /** New lines should be prefixed with timestamp. */ + RTLOGFLAGS_PREFIX_TS = 0x40000000, + /** The prefix mask. */ + RTLOGFLAGS_PREFIX_MASK = 0x7dff8000 +} RTLOGFLAGS; + +/** + * Logger per group flags. + * + * @remarks We only use the lower 16 bits here. We'll be combining it with the + * group number in a few places. + */ +typedef enum RTLOGGRPFLAGS +{ + /** Enabled. */ + RTLOGGRPFLAGS_ENABLED = 0x0001, + /** Flow logging. */ + RTLOGGRPFLAGS_FLOW = 0x0002, + /** Warnings logging. */ + RTLOGGRPFLAGS_WARN = 0x0004, + /* 0x0008 for later. */ + /** Level 1 logging. */ + RTLOGGRPFLAGS_LEVEL_1 = 0x0010, + /** Level 2 logging. */ + RTLOGGRPFLAGS_LEVEL_2 = 0x0020, + /** Level 3 logging. */ + RTLOGGRPFLAGS_LEVEL_3 = 0x0040, + /** Level 4 logging. */ + RTLOGGRPFLAGS_LEVEL_4 = 0x0080, + /** Level 5 logging. */ + RTLOGGRPFLAGS_LEVEL_5 = 0x0100, + /** Level 6 logging. */ + RTLOGGRPFLAGS_LEVEL_6 = 0x0200, + /** Level 7 logging. */ + RTLOGGRPFLAGS_LEVEL_7 = 0x0400, + /** Level 8 logging. */ + RTLOGGRPFLAGS_LEVEL_8 = 0x0800, + /** Level 9 logging. */ + RTLOGGRPFLAGS_LEVEL_9 = 0x1000, + /** Level 10 logging. */ + RTLOGGRPFLAGS_LEVEL_10 = 0x2000, + /** Level 11 logging. */ + RTLOGGRPFLAGS_LEVEL_11 = 0x4000, + /** Level 12 logging. */ + RTLOGGRPFLAGS_LEVEL_12 = 0x8000, + + /** Restrict the number of log entries. */ + RTLOGGRPFLAGS_RESTRICT = 0x40000000, + /** Blow up the type. */ + RTLOGGRPFLAGS_32BIT_HACK = 0x7fffffff +} RTLOGGRPFLAGS; + +/** + * Logger destination types and flags. + */ +typedef enum RTLOGDEST +{ + /** Log to file. */ + RTLOGDEST_FILE = 0x00000001, + /** Log to stdout. */ + RTLOGDEST_STDOUT = 0x00000002, + /** Log to stderr. */ + RTLOGDEST_STDERR = 0x00000004, + /** Log to debugger (win32 only). */ + RTLOGDEST_DEBUGGER = 0x00000008, + /** Log to com port. */ + RTLOGDEST_COM = 0x00000010, + /** Log a memory ring buffer. */ + RTLOGDEST_RINGBUF = 0x00000020, + /** Open files with no deny (share read, write, delete) on Windows. */ + RTLOGDEST_F_NO_DENY = 0x00010000, + /** Delay opening the log file, logging to the buffer untill + * RTLogClearFileDelayFlag is called. */ + RTLOGDEST_F_DELAY_FILE = 0x00020000, + /** Just a dummy flag to be used when no other flag applies. */ + RTLOGDEST_DUMMY = 0x20000000, + /** Log to a user defined output stream. */ + RTLOGDEST_USER = 0x40000000 +} RTLOGDEST; + + +RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + + +#ifdef DOXYGEN_RUNNING +# define LOG_DISABLED +# define LOG_ENABLED +# define LOG_ENABLE_FLOW +#endif + +/** @def LOG_DISABLED + * Use this compile time define to disable all logging macros. It can + * be overridden for each of the logging macros by the LOG_ENABLE* + * compile time defines. + */ + +/** @def LOG_ENABLED + * Use this compile time define to enable logging when not in debug mode + * or LOG_DISABLED is set. + * This will enabled Log() only. + */ + +/** @def LOG_ENABLE_FLOW + * Use this compile time define to enable flow logging when not in + * debug mode or LOG_DISABLED is defined. + * This will enable LogFlow() only. + */ + +/* + * Determine whether logging is enabled and forcefully normalize the indicators. + */ +#if (defined(DEBUG) || defined(LOG_ENABLED)) && !defined(LOG_DISABLED) +# undef LOG_DISABLED +# undef LOG_ENABLED +# define LOG_ENABLED +#else +# undef LOG_ENABLED +# undef LOG_DISABLED +# define LOG_DISABLED +#endif + + +/** @def LOG_USE_C99 + * Governs the use of variadic macros. + */ +#ifndef LOG_USE_C99 +# if defined(RT_ARCH_AMD64) || defined(RT_OS_DARWIN) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define LOG_USE_C99 +# endif +#endif + + +/** @name Macros for checking whether a log level is enabled. + * @{ */ +/** @def LogIsItEnabled + * Checks whether the specified logging group is enabled or not. + */ +#ifdef LOG_ENABLED +# define LogIsItEnabled(a_fFlags, a_iGroup) ( RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)) != NULL ) +#else +# define LogIsItEnabled(a_fFlags, a_iGroup) (false) +#endif + +/** @def LogIsEnabled + * Checks whether level 1 logging is enabled. + */ +#define LogIsEnabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP) + +/** @def LogIs2Enabled + * Checks whether level 2 logging is enabled. + */ +#define LogIs2Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP) + +/** @def LogIs3Enabled + * Checks whether level 3 logging is enabled. + */ +#define LogIs3Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP) + +/** @def LogIs4Enabled + * Checks whether level 4 logging is enabled. + */ +#define LogIs4Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP) + +/** @def LogIs5Enabled + * Checks whether level 5 logging is enabled. + */ +#define LogIs5Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP) + +/** @def LogIs6Enabled + * Checks whether level 6 logging is enabled. + */ +#define LogIs6Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP) + +/** @def LogIs7Enabled + * Checks whether level 7 logging is enabled. + */ +#define LogIs7Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP) + +/** @def LogIs8Enabled + * Checks whether level 8 logging is enabled. + */ +#define LogIs8Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP) + +/** @def LogIs9Enabled + * Checks whether level 9 logging is enabled. + */ +#define LogIs9Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP) + +/** @def LogIs10Enabled + * Checks whether level 10 logging is enabled. + */ +#define LogIs10Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP) + +/** @def LogIs11Enabled + * Checks whether level 11 logging is enabled. + */ +#define LogIs11Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP) + +/** @def LogIs12Enabled + * Checks whether level 12 logging is enabled. + */ +#define LogIs12Enabled() LogIsItEnabled(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP) + +/** @def LogIsFlowEnabled + * Checks whether execution flow logging is enabled. + */ +#define LogIsFlowEnabled() LogIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) + +/** @def LogIsWarnEnabled + * Checks whether execution flow logging is enabled. + */ +#define LogIsWarnEnabled() LogIsItEnabled(RTLOGGRPFLAGS_WARN, LOG_GROUP) +/** @} */ + + +/** @def LogIt + * Write to specific logger if group enabled. + */ +#ifdef LOG_ENABLED +# if defined(LOG_USE_C99) +# define _LogRemoveParentheseis(...) __VA_ARGS__ +# define _LogIt(a_fFlags, a_iGroup, ...) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogIt_pLogger)) \ + { /* likely */ } \ + else \ + RTLogLoggerEx(LogIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogIt(a_fFlags, a_iGroup, fmtargs) _LogIt(a_fFlags, a_iGroup, _LogRemoveParentheseis fmtargs) +# define _LogItAlways(a_fFlags, a_iGroup, ...) RTLogLoggerEx(NULL, a_fFlags, UINT32_MAX, __VA_ARGS__) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) _LogItAlways(a_fFlags, a_iGroup, _LogRemoveParentheseis fmtargs) + /** @todo invent a flag or something for skipping the group check so we can pass iGroup. LogItAlways. */ +# else +# define LogIt(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogIt_pLogger)) \ + { /* likely */ } \ + else \ + { \ + LogIt_pLogger->pfnLogger fmtargs; \ + } \ + } while (0) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + register PRTLOGGER LogIt_pLogger = RTLogDefaultInstanceEx(RT_MAKE_U32(0, UINT16_MAX)); \ + if (LogIt_pLogger) \ + LogIt_pLogger->pfnLogger fmtargs; \ + } while (0) +# endif +#else +# define LogIt(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogItAlways(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# if defined(LOG_USE_C99) +# define _LogRemoveParentheseis(...) __VA_ARGS__ +# define _LogIt(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogItAlways(a_fFlags, a_iGroup, ...) do { } while (0) +# endif +#endif + + +/** @name Basic logging macros + * @{ */ +/** @def Log + * Level 1 logging that works regardless of the group settings. + */ +#define LogAlways(a) LogItAlways(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def Log + * Level 1 logging. + */ +#define Log(a) LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def Log2 + * Level 2 logging. + */ +#define Log2(a) LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def Log3 + * Level 3 logging. + */ +#define Log3(a) LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def Log4 + * Level 4 logging. + */ +#define Log4(a) LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def Log5 + * Level 5 logging. + */ +#define Log5(a) LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def Log6 + * Level 6 logging. + */ +#define Log6(a) LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def Log7 + * Level 7 logging. + */ +#define Log7(a) LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def Log8 + * Level 8 logging. + */ +#define Log8(a) LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def Log9 + * Level 9 logging. + */ +#define Log9(a) LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def Log10 + * Level 10 logging. + */ +#define Log10(a) LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def Log11 + * Level 11 logging. + */ +#define Log11(a) LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def Log12 + * Level 12 logging. + */ +#define Log12(a) LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogFlow + * Logging of execution flow. + */ +#define LogFlow(a) LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) + +/** @def LogWarn + * Logging of warnings. + */ +#define LogWarn(a) LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, a) +/** @} */ + + +/** @name Logging macros prefixing the current function name. + * @{ */ +/** @def LogFunc + * Level 1 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFunc(a) _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFunc(a) do { Log((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log2Func + * Level 2 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log2Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log2Func(a) do { Log2((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log2(a); } while (0) +#endif + +/** @def Log3Func + * Level 3 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log3Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log3Func(a) do { Log3((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log3(a); } while (0) +#endif + +/** @def Log4Func + * Level 4 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log4Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log4Func(a) do { Log4((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log4(a); } while (0) +#endif + +/** @def Log5Func + * Level 5 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log5Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log5Func(a) do { Log5((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log5(a); } while (0) +#endif + +/** @def Log6Func + * Level 6 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log6Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log6Func(a) do { Log6((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log6(a); } while (0) +#endif + +/** @def Log7Func + * Level 7 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log7Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log7Func(a) do { Log7((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log7(a); } while (0) +#endif + +/** @def Log8Func + * Level 8 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log8Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log8Func(a) do { Log8((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log8(a); } while (0) +#endif + +/** @def Log9Func + * Level 9 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log9Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log9Func(a) do { Log9((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log9(a); } while (0) +#endif + +/** @def Log10Func + * Level 10 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log10Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log10Func(a) do { Log10((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log10(a); } while (0) +#endif + +/** @def Log11Func + * Level 11 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log11Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log11Func(a) do { Log11((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log11(a); } while (0) +#endif + +/** @def Log12Func + * Level 12 logging inside C/C++ functions. + * + * Prepends the given log message with the function name followed by a + * semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log12Func(a) _LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log12Func(a) do { Log12((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); Log12(a); } while (0) +#endif + +/** @def LogFlowFunc + * Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFlowFunc(a) \ + _LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFlowFunc(a) \ + do { LogFlow((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif + +/** @def LogWarnFunc + * Macro to log a warning inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogWarnFunc(a) \ + _LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogWarnFunc(a) \ + do { LogFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif +/** @} */ + + +/** @name Logging macros prefixing the this pointer value and method name. + * @{ */ + +/** @def LogThisFunc + * Level 1 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogThisFunc(a) do { Log(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log2ThisFunc + * Level 2 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log2ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log2ThisFunc(a) do { Log2(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log2(a); } while (0) +#endif + +/** @def Log3ThisFunc + * Level 3 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log3ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log3ThisFunc(a) do { Log3(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log3(a); } while (0) +#endif + +/** @def Log4ThisFunc + * Level 4 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log4ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log4ThisFunc(a) do { Log4(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log4(a); } while (0) +#endif + +/** @def Log5ThisFunc + * Level 5 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log5ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log5ThisFunc(a) do { Log5(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log5(a); } while (0) +#endif + +/** @def Log6ThisFunc + * Level 6 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log6ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log6ThisFunc(a) do { Log6(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log6(a); } while (0) +#endif + +/** @def Log7ThisFunc + * Level 7 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log7ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log7ThisFunc(a) do { Log7(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log7(a); } while (0) +#endif + +/** @def Log8ThisFunc + * Level 8 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log8ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log8ThisFunc(a) do { Log8(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log8(a); } while (0) +#endif + +/** @def Log9ThisFunc + * Level 9 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log9ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log9ThisFunc(a) do { Log9(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log9(a); } while (0) +#endif + +/** @def Log10ThisFunc + * Level 10 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log10ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log10ThisFunc(a) do { Log10(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log10(a); } while (0) +#endif + +/** @def Log11ThisFunc + * Level 11 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log11ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log11ThisFunc(a) do { Log11(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log11(a); } while (0) +#endif + +/** @def Log12ThisFunc + * Level 12 logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log12ThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log12ThisFunc(a) do { Log12(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); Log12(a); } while (0) +#endif + +/** @def LogFlowThisFunc + * Flow level logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogFlowThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogFlowThisFunc(a) do { LogFlow(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogFlow(a); } while (0) +#endif + +/** @def LogWarnThisFunc + * Warning level logging inside a C++ non-static method, with object pointer and + * method name prefixed to the given message. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogWarnThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogWarnThisFunc(a) do { LogWarn(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogWarn(a); } while (0) +#endif +/** @} */ + + +/** @name Misc Logging Macros + * @{ */ + +/** @def Log1Warning + * The same as Log(), but prepents a "WARNING! " string to the message. + * + * @param a Custom log message in format ("string\n" [, args]). + */ +#if defined(LOG_USE_C99) +# define Log1Warning(a) _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "WARNING! %M", _LogRemoveParentheseis a ) +#else +# define Log1Warning(a) do { Log(("WARNING! ")); Log(a); } while (0) +#endif + +/** @def Log1WarningFunc + * The same as LogWarning(), but prepents the log message with the function name. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log1WarningFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": WARNING! %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log1WarningFunc(a) \ + do { Log((LOG_FN_FMT ": WARNING! ", __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + +/** @def Log1WarningThisFunc + * The same as LogWarningFunc() but for class functions (methods): the resulting + * log line is additionally prepended with a hex value of |this| pointer. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define Log1WarningThisFunc(a) \ + _LogIt(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": WARNING! %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define Log1WarningThisFunc(a) \ + do { Log(("{%p} " LOG_FN_FMT ": WARNING! ", this, __PRETTY_FUNCTION__)); Log(a); } while (0) +#endif + + +/** Shortcut to |LogFlowFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogFlowFuncEnter() LogFlowFunc(("ENTER\n")) + +/** Shortcut to |LogFlowFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogFlowFuncLeave() LogFlowFunc(("LEAVE\n")) + +/** Shortcut to |LogFlowFunc ("LEAVE: %Rrc\n")|, marks the end of the function. */ +#define LogFlowFuncLeaveRC(rc) LogFlowFunc(("LEAVE: %Rrc\n", (rc))) + +/** Shortcut to |LogFlowThisFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogFlowThisFuncEnter() LogFlowThisFunc(("ENTER\n")) + +/** Shortcut to |LogFlowThisFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogFlowThisFuncLeave() LogFlowThisFunc(("LEAVE\n")) + + +/** @def LogObjRefCnt + * Helper macro to print the current reference count of the given COM object + * to the log file. + * + * @param pObj Pointer to the object in question (must be a pointer to an + * IUnknown subclass or simply define COM-style AddRef() and + * Release() methods) + */ +#define LogObjRefCnt(pObj) \ + do { \ + if (LogIsFlowEnabled()) \ + { \ + int cRefsForLog = (pObj)->AddRef(); \ + LogFlow((#pObj "{%p}.refCnt=%d\n", (pObj), cRefsForLog - 1)); \ + (pObj)->Release(); \ + } \ + } while (0) +/** @} */ + + + +/** @name Passing Function Call Position When Logging. + * + * This is a little bit ugly as we have to omit the comma before the + * position parameters so that we don't inccur any overhead in non-logging + * builds (!defined(LOG_ENABLED). + * + * @{ */ +/** Source position for passing to a function call. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS , __FILE__, __LINE__, __PRETTY_FUNCTION__ +#else +# define RTLOG_COMMA_SRC_POS RT_NOTHING +#endif +/** Source position declaration. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS_DECL , const char *pszFile, unsigned iLine, const char *pszFunction +#else +# define RTLOG_COMMA_SRC_POS_DECL RT_NOTHING +#endif +/** Source position arguments. */ +#ifdef LOG_ENABLED +# define RTLOG_COMMA_SRC_POS_ARGS , pszFile, iLine, pszFunction +#else +# define RTLOG_COMMA_SRC_POS_ARGS RT_NOTHING +#endif +/** Applies NOREF() to the source position arguments. */ +#ifdef LOG_ENABLED +# define RTLOG_SRC_POS_NOREF() do { NOREF(pszFile); NOREF(iLine); NOREF(pszFunction); } while (0) +#else +# define RTLOG_SRC_POS_NOREF() do { } while (0) +#endif +/** @} */ + + + +/** @name Release Logging + * @{ + */ + +#ifdef DOXYGEN_RUNNING +# define RTLOG_REL_DISABLED +# define RTLOG_REL_ENABLED +#endif + +/** @def RTLOG_REL_DISABLED + * Use this compile time define to disable all release logging + * macros. + */ + +/** @def RTLOG_REL_ENABLED + * Use this compile time define to override RTLOG_REL_DISABLE. + */ + +/* + * Determine whether release logging is enabled and forcefully normalize the indicators. + */ +#if !defined(RTLOG_REL_DISABLED) || defined(RTLOG_REL_ENABLED) +# undef RTLOG_REL_DISABLED +# undef RTLOG_REL_ENABLED +# define RTLOG_REL_ENABLED +#else +# undef RTLOG_REL_ENABLED +# undef RTLOG_REL_DISABLED +# define RTLOG_REL_DISABLED +#endif + +/** @name Macros for checking whether a release log level is enabled. + * @{ */ +/** @def LogRelIsItEnabled + * Checks whether the specified release logging group is enabled or not. + */ +#define LogRelIsItEnabled(a_fFlags, a_iGroup) ( RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)) != NULL ) + +/** @def LogRelIsEnabled + * Checks whether level 1 release logging is enabled. + */ +#define LogRelIsEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP) + +/** @def LogRelIs2Enabled + * Checks whether level 2 release logging is enabled. + */ +#define LogRelIs2Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP) + +/** @def LogRelIs3Enabled + * Checks whether level 3 release logging is enabled. + */ +#define LogRelIs3Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP) + +/** @def LogRelIs4Enabled + * Checks whether level 4 release logging is enabled. + */ +#define LogRelIs4Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP) + +/** @def LogRelIs5Enabled + * Checks whether level 5 release logging is enabled. + */ +#define LogRelIs5Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP) + +/** @def LogRelIs6Enabled + * Checks whether level 6 release logging is enabled. + */ +#define LogRelIs6Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP) + +/** @def LogRelIs7Enabled + * Checks whether level 7 release logging is enabled. + */ +#define LogRelIs7Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP) + +/** @def LogRelIs8Enabled + * Checks whether level 8 release logging is enabled. + */ +#define LogRelIs8Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP) + +/** @def LogRelIs2Enabled + * Checks whether level 9 release logging is enabled. + */ +#define LogRelIs9Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP) + +/** @def LogRelIs10Enabled + * Checks whether level 10 release logging is enabled. + */ +#define LogRelIs10Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP) + +/** @def LogRelIs11Enabled + * Checks whether level 10 release logging is enabled. + */ +#define LogRelIs11Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP) + +/** @def LogRelIs12Enabled + * Checks whether level 12 release logging is enabled. + */ +#define LogRelIs12Enabled() LogRelIsItEnabled(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP) + +/** @def LogRelIsFlowEnabled + * Checks whether execution flow release logging is enabled. + */ +#define LogRelIsFlowEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) + +/** @def LogRelIsWarnEnabled + * Checks whether warning level release logging is enabled. + */ +#define LogRelIsWarnEnabled() LogRelIsItEnabled(RTLOGGRPFLAGS_FLOW, LOG_GROUP) +/** @} */ + + +/** @def LogRelIt + * Write to specific logger if group enabled. + */ +/** @def LogRelItLikely + * Write to specific logger if group enabled, assuming it likely it is enabled. + */ +/** @def LogRelMaxIt + * Write to specific logger if group enabled and at less than a_cMax messages + * have hit the log. Uses a static variable to count. + */ +#ifdef RTLOG_REL_ENABLED +# if defined(LOG_USE_C99) +# define _LogRelRemoveParentheseis(...) __VA_ARGS__ +# define _LogRelIt(a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogRelIt_pLogger)) \ + { /* likely */ } \ + else \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) \ + _LogRelIt(a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# define _LogRelItLikely(a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) \ + _LogRelItLikely(a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# define _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, ...) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + static uint32_t s_LogRelMaxIt_cLogged = 0; \ + if (s_LogRelMaxIt_cLogged < (a_cMax)) \ + { \ + s_LogRelMaxIt_cLogged++; \ + RTLogLoggerEx(LogRelIt_pLogger, a_fFlags, a_iGroup, __VA_ARGS__); \ + } \ + } \ + _LogIt(a_fFlags, a_iGroup, __VA_ARGS__); \ + } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) \ + _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, _LogRelRemoveParentheseis fmtargs) +# else +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (RT_LIKELY(!LogRelIt_pLogger)) \ + { /* likely */ } \ + else \ + { \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) \ + do \ + { \ + PRTLOGGER LogRelIt_pLogger = RTLogRelGetDefaultInstanceEx(RT_MAKE_U32(a_fFlags, a_iGroup)); \ + if (LogRelIt_pLogger) \ + { \ + static uint32_t s_LogRelMaxIt_cLogged = 0; \ + if (s_LogRelMaxIt_cLogged < (a_cMax)) \ + { \ + s_LogRelMaxIt_cLogged++; \ + LogRelIt_pLogger->pfnLogger fmtargs; \ + } \ + } \ + LogIt(a_fFlags, a_iGroup, fmtargs); \ + } while (0) +# endif +#else /* !RTLOG_REL_ENABLED */ +# define LogRelIt(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogRelItLikely(a_fFlags, a_iGroup, fmtargs) do { } while (0) +# define LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, fmtargs) do { } while (0) +# if defined(LOG_USE_C99) +# define _LogRelRemoveParentheseis(...) __VA_ARGS__ +# define _LogRelIt(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogRelItLikely(a_fFlags, a_iGroup, ...) do { } while (0) +# define _LogRelMaxIt(a_cMax, a_fFlags, a_iGroup, ...) do { } while (0) +# endif +#endif /* !RTLOG_REL_ENABLED */ + + +/** @name Basic release logging macros + * @{ */ +/** @def LogRel + * Level 1 release logging. + */ +#define LogRel(a) LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def LogRel2 + * Level 2 release logging. + */ +#define LogRel2(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def LogRel3 + * Level 3 release logging. + */ +#define LogRel3(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def LogRel4 + * Level 4 release logging. + */ +#define LogRel4(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def LogRel5 + * Level 5 release logging. + */ +#define LogRel5(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def LogRel6 + * Level 6 release logging. + */ +#define LogRel6(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def LogRel7 + * Level 7 release logging. + */ +#define LogRel7(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def LogRel8 + * Level 8 release logging. + */ +#define LogRel8(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def LogRel9 + * Level 9 release logging. + */ +#define LogRel9(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def LogRel10 + * Level 10 release logging. + */ +#define LogRel10(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def LogRel11 + * Level 11 release logging. + */ +#define LogRel11(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def LogRel12 + * Level 12 release logging. + */ +#define LogRel12(a) LogRelIt(RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogRelFlow + * Logging of execution flow. + */ +#define LogRelFlow(a) LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) + +/** @def LogRelWarn + * Warning level release logging. + */ +#define LogRelWarn(a) LogRelIt(RTLOGGRPFLAGS_WARN, LOG_GROUP, a) +/** @} */ + + + +/** @name Basic release logging macros with local max + * @{ */ +/** @def LogRelMax + * Level 1 release logging with a max number of log entries. + */ +#define LogRelMax(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, a) + +/** @def LogRelMax2 + * Level 2 release logging with a max number of log entries. + */ +#define LogRelMax2(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_2, LOG_GROUP, a) + +/** @def LogRelMax3 + * Level 3 release logging with a max number of log entries. + */ +#define LogRelMax3(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_3, LOG_GROUP, a) + +/** @def LogRelMax4 + * Level 4 release logging with a max number of log entries. + */ +#define LogRelMax4(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_4, LOG_GROUP, a) + +/** @def LogRelMax5 + * Level 5 release logging with a max number of log entries. + */ +#define LogRelMax5(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_5, LOG_GROUP, a) + +/** @def LogRelMax6 + * Level 6 release logging with a max number of log entries. + */ +#define LogRelMax6(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_6, LOG_GROUP, a) + +/** @def LogRelMax7 + * Level 7 release logging with a max number of log entries. + */ +#define LogRelMax7(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_7, LOG_GROUP, a) + +/** @def LogRelMax8 + * Level 8 release logging with a max number of log entries. + */ +#define LogRelMax8(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_8, LOG_GROUP, a) + +/** @def LogRelMax9 + * Level 9 release logging with a max number of log entries. + */ +#define LogRelMax9(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_9, LOG_GROUP, a) + +/** @def LogRelMax10 + * Level 10 release logging with a max number of log entries. + */ +#define LogRelMax10(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_10, LOG_GROUP, a) + +/** @def LogRelMax11 + * Level 11 release logging with a max number of log entries. + */ +#define LogRelMax11(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_11, LOG_GROUP, a) + +/** @def LogRelMax12 + * Level 12 release logging with a max number of log entries. + */ +#define LogRelMax12(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_12, LOG_GROUP, a) + +/** @def LogRelMaxFlow + * Logging of execution flow with a max number of log entries. + */ +#define LogRelMaxFlow(a_cMax, a) LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_FLOW, LOG_GROUP, a) +/** @} */ + + +/** @name Release logging macros prefixing the current function name. + * @{ */ + +/** @def LogRelFunc + * Release logging. Prepends the given log message with the function name + * followed by a semicolon and space. + */ +#ifdef LOG_USE_C99 +# define LogRelFunc(a) \ + _LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", RT_GCC_EXTENSION __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFunc(a) do { LogRel((LOG_FN_FMT ": ", RT_GCC_EXTENSION __PRETTY_FUNCTION__)); LogRel(a); } while (0) +#endif + +/** @def LogRelFlowFunc + * Release logging. Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelFlowFunc(a) _LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFlowFunc(a) do { LogRelFlow((LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelFlow(a); } while (0) +#endif + +/** @def LogRelMaxFunc + * Release logging. Prepends the given log message with the function name + * followed by a semicolon and space. + */ +#ifdef LOG_USE_C99 +# define LogRelMaxFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxFunc(a_cMax, a) \ + do { LogRelMax(a_cMax, (LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelMax(a_cMax, a); } while (0) +#endif + +/** @def LogRelMaxFlowFunc + * Release logging. Macro to log the execution flow inside C/C++ functions. + * + * Prepends the given log message with the function name followed by + * a semicolon and space. + * + * @param a_cMax Max number of times this should hit the log. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelMaxFlowFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_FLOW, LOG_GROUP, LOG_FN_FMT ": %M", __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxFlowFunc(a_cMax, a) \ + do { LogRelMaxFlow(a_cMax, (LOG_FN_FMT ": ", __PRETTY_FUNCTION__)); LogRelFlow(a_cMax, a); } while (0) +#endif + +/** @} */ + + +/** @name Release Logging macros prefixing the this pointer value and method name. + * @{ */ + +/** @def LogRelThisFunc + * The same as LogRelFunc but for class functions (methods): the resulting log + * line is additionally prepended with a hex value of |this| pointer. + */ +#ifdef LOG_USE_C99 +# define LogRelThisFunc(a) \ + _LogRelItLikely(RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelThisFunc(a) \ + do { LogRel(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRel(a); } while (0) +#endif + +/** @def LogRelMaxThisFunc + * The same as LogRelFunc but for class functions (methods): the resulting log + * line is additionally prepended with a hex value of |this| pointer. + * @param a_cMax Max number of times this should hit the log. + * @param a Log message in format ("string\n" [, args]). + */ +#ifdef LOG_USE_C99 +# define LogRelMaxThisFunc(a_cMax, a) \ + _LogRelMaxIt(a_cMax, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelMaxThisFunc(a_cMax, a) \ + do { LogRelMax(a_cMax, ("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRelMax(a_cMax, a); } while (0) +#endif + +/** @def LogRelFlowThisFunc + * The same as LogRelFlowFunc but for class functions (methods): the resulting + * log line is additionally prepended with a hex value of |this| pointer. + */ +#ifdef LOG_USE_C99 +# define LogRelFlowThisFunc(a) \ + _LogRelIt(RTLOGGRPFLAGS_FLOW, LOG_GROUP, "{%p} " LOG_FN_FMT ": %M", this, __PRETTY_FUNCTION__, _LogRemoveParentheseis a ) +#else +# define LogRelFlowThisFunc(a) do { LogRelFlow(("{%p} " LOG_FN_FMT ": ", this, __PRETTY_FUNCTION__)); LogRelFlow(a); } while (0) +#endif + + +/** Shortcut to |LogRelFlowFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogRelFlowFuncEnter() LogRelFlowFunc(("ENTER\n")) + +/** Shortcut to |LogRelFlowFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogRelFlowFuncLeave() LogRelFlowFunc(("LEAVE\n")) + +/** Shortcut to |LogRelFlowFunc ("LEAVE: %Rrc\n")|, marks the end of the function. */ +#define LogRelFlowFuncLeaveRC(rc) LogRelFlowFunc(("LEAVE: %Rrc\n", (rc))) + +/** Shortcut to |LogRelFlowThisFunc ("ENTER\n")|, marks the beginnig of the function. */ +#define LogRelFlowThisFuncEnter() LogRelFlowThisFunc(("ENTER\n")) + +/** Shortcut to |LogRelFlowThisFunc ("LEAVE\n")|, marks the end of the function. */ +#define LogRelFlowThisFuncLeave() LogRelFlowThisFunc(("LEAVE\n")) + +/** @} */ + + +#ifndef IN_RC +/** + * Sets the default release logger instance. + * + * @returns The old default instance. + * @param pLogger The new default release logger instance. + */ +RTDECL(PRTLOGGER) RTLogRelSetDefaultInstance(PRTLOGGER pLogger); +#endif /* !IN_RC */ + +/** + * Gets the default release logger instance. + * + * @returns Pointer to default release logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstance(void); + +/** + * Gets the default release logger instance. + * + * @returns Pointer to default release logger instance if availble, otherwise NULL. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogRelGetDefaultInstanceEx(uint32_t fFlagsAndGroup); + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function for LogRelIt. + */ +RTDECL(void) RTLogRelLogger(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + +/** + * Write to a logger instance, defaulting to the release one. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default release instance is attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogRelLoggerV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(4, 0); + +/** + * printf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * vprintf like function for writing to the default release log. + * + * @param pszFormat Printf like format string. + * @param args Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogRelPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Changes the buffering setting of the default release logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogRelSetBuffering(bool fBuffered); + +/** @} */ + + + +/** @name COM port logging + * { + */ + +#ifdef DOXYGEN_RUNNING +# define LOG_TO_COM +# define LOG_NO_COM +#endif + +/** @def LOG_TO_COM + * Redirects the normal logging macros to the serial versions. + */ + +/** @def LOG_NO_COM + * Disables all LogCom* macros. + */ + +/** @def LogCom + * Generic logging to serial port. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_COM) +# define LogCom(a) RTLogComPrintf a +#else +# define LogCom(a) do { } while (0) +#endif + +/** @def LogComFlow + * Logging to serial port of execution flow. + */ +#if defined(LOG_ENABLED) && defined(LOG_ENABLE_FLOW) && !defined(LOG_NO_COM) +# define LogComFlow(a) RTLogComPrintf a +#else +# define LogComFlow(a) do { } while (0) +#endif + +#ifdef LOG_TO_COM +# undef Log +# define Log(a) LogCom(a) +# undef LogFlow +# define LogFlow(a) LogComFlow(a) +#endif + +/** @} */ + + +/** @name Backdoor Logging + * @{ + */ + +#ifdef DOXYGEN_RUNNING +# define LOG_TO_BACKDOOR +# define LOG_NO_BACKDOOR +#endif + +/** @def LOG_TO_BACKDOOR + * Redirects the normal logging macros to the backdoor versions. + */ + +/** @def LOG_NO_BACKDOOR + * Disables all LogBackdoor* macros. + */ + +/** @def LogBackdoor + * Generic logging to the VBox backdoor via port I/O. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_BACKDOOR) +# define LogBackdoor(a) RTLogBackdoorPrintf a +#else +# define LogBackdoor(a) do { } while (0) +#endif + +/** @def LogBackdoorFlow + * Logging of execution flow messages to the backdoor I/O port. + */ +#if defined(LOG_ENABLED) && !defined(LOG_NO_BACKDOOR) +# define LogBackdoorFlow(a) RTLogBackdoorPrintf a +#else +# define LogBackdoorFlow(a) do { } while (0) +#endif + +/** @def LogRelBackdoor + * Release logging to the VBox backdoor via port I/O. + */ +#if !defined(LOG_NO_BACKDOOR) +# define LogRelBackdoor(a) RTLogBackdoorPrintf a +#else +# define LogRelBackdoor(a) do { } while (0) +#endif + +#ifdef LOG_TO_BACKDOOR +# undef Log +# define Log(a) LogBackdoor(a) +# undef LogFlow +# define LogFlow(a) LogBackdoorFlow(a) +# undef LogRel +# define LogRel(a) LogRelBackdoor(a) +# if defined(LOG_USE_C99) +# undef _LogIt +# define _LogIt(a_fFlags, a_iGroup, ...) LogBackdoor((__VA_ARGS__)) +# endif +#endif + +/** @} */ + + + +/** + * Gets the default logger instance, creating it if necessary. + * + * @returns Pointer to default logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogDefaultInstance(void); + +/** + * Gets the logger instance if enabled, creating it if necessary. + * + * @returns Pointer to default logger instance, if group has the specified + * flags enabled. Otherwise NULL is returned. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogDefaultInstanceEx(uint32_t fFlagsAndGroup); + +/** + * Gets the default logger instance. + * + * @returns Pointer to default logger instance if availble, otherwise NULL. + */ +RTDECL(PRTLOGGER) RTLogGetDefaultInstance(void); + +/** + * Gets the default logger instance if enabled. + * + * @returns Pointer to default logger instance, if group has the specified + * flags enabled. Otherwise NULL is returned. + * @param fFlagsAndGroup The flags in the lower 16 bits, the group number in + * the high 16 bits. + */ +RTDECL(PRTLOGGER) RTLogGetDefaultInstanceEx(uint32_t fFlagsAndGroup); + +#ifndef IN_RC +/** + * Sets the default logger instance. + * + * @returns The old default instance. + * @param pLogger The new default logger instance. + */ +RTDECL(PRTLOGGER) RTLogSetDefaultInstance(PRTLOGGER pLogger); +#endif /* !IN_RC */ + +#ifdef IN_RING0 +/** + * Changes the default logger instance for the current thread. + * + * @returns IPRT status code. + * @param pLogger The logger instance. Pass NULL for deregistration. + * @param uKey Associated key for cleanup purposes. If pLogger is NULL, + * all instances with this key will be deregistered. So in + * order to only deregister the instance associated with the + * current thread use 0. + */ +RTDECL(int) RTLogSetDefaultInstanceThread(PRTLOGGER pLogger, uintptr_t uKey); +#endif /* IN_RING0 */ + + +#ifndef IN_RC +/** + * Creates the default logger instance for a iprt users. + * + * Any user of the logging features will need to implement + * this or use the generic dummy. + * + * @returns Pointer to the logger instance. + */ +RTDECL(PRTLOGGER) RTLogDefaultInit(void); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pszFilenameFmt Log filename format string. Standard + * RTStrFormat(). + * @param ... Format arguments. + */ +RTDECL(int) RTLogCreate(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(8, 9); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pfnPhase Callback function for starting logging and for + * ending or starting a new file for log history + * rotation. NULL is OK. + * @param cHistory Number of old log files to keep when performing + * log history rotation. 0 means no history. + * @param cbHistoryFileMax Maximum size of log file when performing + * history rotation. 0 means no size limit. + * @param cSecsHistoryTimeSlot Maximum time interval per log file when + * performing history rotation, in seconds. + * 0 means time limit. + * @param pErrInfo Where to return extended error information. + * Optional. + * @param pszFilenameFmt Log filename format string. Standard RTStrFormat(). + * @param ... Format arguments. + */ +RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo, + const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 14); + +/** + * Create a logger instance. + * + * @returns iprt status code. + * + * @param ppLogger Where to store the logger instance. + * @param fFlags Logger instance flags, a combination of the + * RTLOGFLAGS_* values. + * @param pszGroupSettings The initial group settings. + * @param pszEnvVarBase Base name for the environment variables for + * this instance. + * @param cGroups Number of groups in the array. + * @param papszGroups Pointer to array of groups. This must stick + * around for the life of the logger instance. + * @param fDestFlags The destination flags. RTLOGDEST_FILE is ORed + * if pszFilenameFmt specified. + * @param pfnPhase Callback function for starting logging and for + * ending or starting a new file for log history + * rotation. + * @param cHistory Number of old log files to keep when performing + * log history rotation. 0 means no history. + * @param cbHistoryFileMax Maximum size of log file when performing + * history rotation. 0 means no size limit. + * @param cSecsHistoryTimeSlot Maximum time interval per log file when + * performing history rotation, in seconds. + * 0 means no time limit. + * @param pErrInfo Where to return extended error information. + * Optional. + * @param pszFilenameFmt Log filename format string. Standard + * RTStrFormat(). + * @param args Format arguments. + */ +RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings, + const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups, + uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory, + uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo, + const char *pszFilenameFmt, va_list args) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 0); + +/** + * Create a logger instance for singled threaded ring-0 usage. + * + * @returns iprt status code. + * + * @param pLogger Where to create the logger instance. + * @param cbLogger The amount of memory available for the logger instance. + * @param pLoggerR0Ptr The ring-0 address corresponding to @a pLogger. + * @param pfnLoggerR0Ptr Pointer to logger wrapper function. + * @param pfnFlushR0Ptr Pointer to flush function. + * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. + * @param fDestFlags The destination flags. + */ +RTDECL(int) RTLogCreateForR0(PRTLOGGER pLogger, size_t cbLogger, + RTR0PTR pLoggerR0Ptr, RTR0PTR pfnLoggerR0Ptr, RTR0PTR pfnFlushR0Ptr, + uint32_t fFlags, uint32_t fDestFlags); + +/** + * Calculates the minimum size of a ring-0 logger instance. + * + * @returns The minimum size. + * @param cGroups The number of groups. + * @param fFlags Relevant flags. + */ +RTDECL(size_t) RTLogCalcSizeForR0(uint32_t cGroups, uint32_t fFlags); + +/** + * Destroys a logger instance. + * + * The instance is flushed and all output destinations closed (where applicable). + * + * @returns iprt status code. + * @param pLogger The logger instance which close destroyed. NULL is fine. + */ +RTDECL(int) RTLogDestroy(PRTLOGGER pLogger); + +/** + * Create a logger instance clone for RC usage. + * + * @returns iprt status code. + * + * @param pLogger The logger instance to be cloned. + * @param pLoggerRC Where to create the RC logger instance. + * @param cbLoggerRC Amount of memory allocated to for the RC logger + * instance clone. + * @param pfnLoggerRCPtr Pointer to logger wrapper function for this + * instance (RC Ptr). + * @param pfnFlushRCPtr Pointer to flush function (RC Ptr). + * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. + */ +RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC, size_t cbLoggerRC, + RTRCPTR pfnLoggerRCPtr, RTRCPTR pfnFlushRCPtr, uint32_t fFlags); + +/** + * Flushes a RC logger instance to a R3 logger. + * + * @returns iprt status code. + * @param pLogger The R3 logger instance to flush pLoggerRC to. If NULL + * the default logger is used. + * @param pLoggerRC The RC logger instance to flush. + */ +RTDECL(void) RTLogFlushRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC); + +/** + * Flushes the buffer in one logger instance onto another logger. + * + * @returns iprt status code. + * + * @param pSrcLogger The logger instance to flush. + * @param pDstLogger The logger instance to flush onto. + * If NULL the default logger will be used. + */ +RTDECL(void) RTLogFlushToLogger(PRTLOGGER pSrcLogger, PRTLOGGER pDstLogger); + +/** + * Flushes a R0 logger instance to a R3 logger. + * + * @returns iprt status code. + * @param pLogger The R3 logger instance to flush pLoggerR0 to. If NULL + * the default logger is used. + * @param pLoggerR0 The R0 logger instance to flush. + */ +RTDECL(void) RTLogFlushR0(PRTLOGGER pLogger, PRTLOGGER pLoggerR0); + +/** + * Sets the custom prefix callback. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param pfnCallback The callback. + * @param pvUser The user argument for the callback. + * */ +RTDECL(int) RTLogSetCustomPrefixCallback(PRTLOGGER pLogger, PFNRTLOGPREFIX pfnCallback, void *pvUser); + +/** + * Same as RTLogSetCustomPrefixCallback for loggers created by + * RTLogCreateForR0. + * + * @returns IPRT status code. + * @param pLogger The logger instance. + * @param pLoggerR0Ptr The ring-0 address corresponding to @a pLogger. + * @param pfnCallbackR0Ptr The callback. + * @param pvUserR0Ptr The user argument for the callback. + * */ +RTDECL(int) RTLogSetCustomPrefixCallbackForR0(PRTLOGGER pLogger, RTR0PTR pLoggerR0Ptr, + RTR0PTR pfnCallbackR0Ptr, RTR0PTR pvUserR0Ptr); + +/** + * Copies the group settings and flags from logger instance to another. + * + * @returns IPRT status code. + * @param pDstLogger The destination logger instance. + * @param pDstLoggerR0Ptr The ring-0 address corresponding to @a pDstLogger. + * @param pSrcLogger The source logger instance. If NULL the default one is used. + * @param fFlagsOr OR mask for the flags. + * @param fFlagsAnd AND mask for the flags. + */ +RTDECL(int) RTLogCopyGroupsAndFlagsForR0(PRTLOGGER pDstLogger, RTR0PTR pDstLoggerR0Ptr, + PCRTLOGGER pSrcLogger, uint32_t fFlagsOr, uint32_t fFlagsAnd); + +/** + * Get the current log group settings as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetGroupSettings(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); + +/** + * Updates the group settings for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogGroupSettings(PRTLOGGER pLogger, const char *pszValue); +#endif /* !IN_RC */ + +/** + * Updates the flags for the logger instance using the specified + * specification string. + * + * @returns iprt status code. + * Failures can safely be ignored. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue Value to parse. + */ +RTDECL(int) RTLogFlags(PRTLOGGER pLogger, const char *pszValue); + +/** + * Changes the buffering setting of the specified logger. + * + * This can be used for optimizing longish logging sequences. + * + * @returns The old state. + * @param pLogger The logger instance (NULL is an alias for the + * default logger). + * @param fBuffered The new state. + */ +RTDECL(bool) RTLogSetBuffering(PRTLOGGER pLogger, bool fBuffered); + +/** + * Sets the max number of entries per group. + * + * @returns Old restriction. + * + * @param pLogger The logger instance (NULL is an alias for the + * default logger). + * @param cMaxEntriesPerGroup The max number of entries per group. + * + * @remarks Lowering the limit of an active logger may quietly mute groups. + * Raising it may reactive already muted groups. + */ +RTDECL(uint32_t) RTLogSetGroupLimit(PRTLOGGER pLogger, uint32_t cMaxEntriesPerGroup); + +#ifndef IN_RC +/** + * Get the current log flags as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than zero. + */ +RTDECL(int) RTLogGetFlags(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); + +/** + * Updates the logger destination using the specified string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + */ +RTDECL(int) RTLogDestinations(PRTLOGGER pLogger, char const *pszValue); + +/** + * Clear the file delay flag if set, opening the destination and flushing. + * + * @returns IPRT status code. + * @param pLogger Logger instance (NULL for default logger). + * @param pszValue The value to parse. + * @param pErrInfo Where to return extended error info. Optional. + */ +RTDECL(int) RTLogClearFileDelayFlag(PRTLOGGER pLogger, PRTERRINFO pErrInfo); + +/** + * Get the current log destinations as a string. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. + * @param pLogger Logger instance (NULL for default logger). + * @param pszBuf The output buffer. + * @param cchBuf The size of the output buffer. Must be greater + * than 0. + */ +RTDECL(int) RTLogGetDestinations(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf); +#endif /* !IN_RC */ + +/** + * Flushes the specified logger. + * + * @param pLogger The logger instance to flush. + * If NULL the default instance is used. The default instance + * will not be initialized by this call. + */ +RTDECL(void) RTLogFlush(PRTLOGGER pLogger); + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pvCallerRet Ignored. + * @param pszFormat Format string. + * @param ... Format arguments. + */ +RTDECL(void) RTLogLogger(PRTLOGGER pLogger, void *pvCallerRet, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * Write to a logger instance. + * + * @param pLogger Pointer to logger instance. + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerV(PRTLOGGER pLogger, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param ... Format arguments. + * @remark This is a worker function of LogIt. + */ +RTDECL(void) RTLogLoggerEx(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(4, 5); + +/** + * Write to a logger instance. + * + * This function will check whether the instance, group and flags makes up a + * logging kind which is currently enabled before writing anything to the log. + * + * @param pLogger Pointer to logger instance. If NULL the default logger instance will be attempted. + * @param fFlags The logging flags. + * @param iGroup The group. + * The value ~0U is reserved for compatibility with RTLogLogger[V] and is + * only for internal usage! + * @param pszFormat Format string. + * @param args Format arguments. + */ +RTDECL(void) RTLogLoggerExV(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(4, 0); + +/** + * printf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param ... Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * vprintf like function for writing to the default log. + * + * @param pszFormat Printf like format string. + * @param va Optional arguments as specified in pszFormat. + * + * @remark The API doesn't support formatting of floating point numbers at the moment. + */ +RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Dumper vprintf-like function outputting to a logger. + * + * @param pvUser Pointer to the logger instance to use, NULL for + * default instance. + * @param pszFormat Format string. + * @param va Format arguments. + */ +RTDECL(void) RTLogDumpPrintfV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); + + +#ifndef DECLARED_FNRTSTROUTPUT /* duplicated in iprt/string.h */ +#define DECLARED_FNRTSTROUTPUT +/** + * Output callback. + * + * @returns number of bytes written. + * @param pvArg User argument. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +typedef DECLCALLBACK(size_t) FNRTSTROUTPUT(void *pvArg, const char *pachChars, size_t cbChars); +/** Pointer to callback function. */ +typedef FNRTSTROUTPUT *PFNRTSTROUTPUT; +#endif + +/** + * Partial vsprintf worker implementation. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string an it's length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArg Argument to output worker. + * @param pszFormat Format string. + * @param args Argument list. + */ +RTDECL(size_t) RTLogFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArg, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * Write log buffer to COM port. + * + * @param pach Pointer to the buffer to write. + * @param cb Number of bytes to write. + */ +RTDECL(void) RTLogWriteCom(const char *pach, size_t cb); + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Prints a formatted string to the serial port used for logging. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param args Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogComPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + + +#if 0 /* not implemented yet */ + +/** Indicates that the semaphores shall be used to notify the other + * part about buffer changes. */ +#define LOGHOOKBUFFER_FLAGS_SEMAPHORED 1 + +/** + * Log Hook Buffer. + * Use to communicate between the logger and a log consumer. + */ +typedef struct RTLOGHOOKBUFFER +{ + /** Write pointer. */ + volatile void *pvWrite; + /** Read pointer. */ + volatile void *pvRead; + /** Buffer start. */ + void *pvStart; + /** Buffer end (exclusive). */ + void *pvEnd; + /** Signaling semaphore used by the writer to wait on a full buffer. + * Only used when indicated in flags. */ + void *pvSemWriter; + /** Signaling semaphore used by the read to wait on an empty buffer. + * Only used when indicated in flags. */ + void *pvSemReader; + /** Buffer flags. Current reserved and set to zero. */ + volatile unsigned fFlags; +} RTLOGHOOKBUFFER; +/** Pointer to a log hook buffer. */ +typedef RTLOGHOOKBUFFER *PRTLOGHOOKBUFFER; + + +/** + * Register a logging hook. + * + * This type of logging hooks are expecting different threads acting + * producer and consumer. They share a circular buffer which have two + * pointers one for each end. When the buffer is full there are two + * alternatives (indicated by a buffer flag), either wait for the + * consumer to get it's job done, or to write a generic message saying + * buffer overflow. + * + * Since the waiting would need a signal semaphore, we'll skip that for now. + * + * @returns iprt status code. + * @param pBuffer Pointer to a logger hook buffer. + */ +RTDECL(int) RTLogRegisterHook(PRTLOGGER pLogger, PRTLOGHOOKBUFFER pBuffer); + +/** + * Deregister a logging hook registered with RTLogRegisterHook(). + * + * @returns iprt status code. + * @param pBuffer Pointer to a logger hook buffer. + */ +RTDECL(int) RTLogDeregisterHook(PRTLOGGER pLogger, PRTLOGHOOKBUFFER pBuffer); + +#endif /* not implemented yet */ + + + +/** + * Write log buffer to a debugger (RTLOGDEST_DEBUGGER). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteDebugger(const char *pach, size_t cb); + +/** + * Write log buffer to a user defined output stream (RTLOGDEST_USER). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteUser(const char *pach, size_t cb); + +/** + * Write log buffer to stdout (RTLOGDEST_STDOUT). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteStdOut(const char *pach, size_t cb); + +/** + * Write log buffer to stdout (RTLOGDEST_STDERR). + * + * @param pach What to write. + * @param cb How much to write. + * @remark When linking statically, this function can be replaced by defining your own. + */ +RTDECL(void) RTLogWriteStdErr(const char *pach, size_t cb); + +#ifdef VBOX + +/** + * Prints a formatted string to the backdoor port. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param ... Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogBackdoorPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2); + +/** + * Prints a formatted string to the backdoor port. + * + * @returns Number of bytes written. + * @param pszFormat Format string. + * @param args Optional arguments specified in the format string. + */ +RTDECL(size_t) RTLogBackdoorPrintfV(const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(1, 0); + +#endif /* VBOX */ + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/mangling.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/mangling.h @@ -0,0 +1,3708 @@ +/** @file + * IPRT - Symbol Mangling. + * + * This header is used to mangle public IPRT symbol to make it possible to have + * several IPRT version loaded into one symbol space at the same time. To + * enable symbol mangling you create a header which the compiler includes for + * every compilation unit (check out the -include option of gcc). Your header + * will define RT_MANGLER(name) and then include this header to set up the + * actual mappings. + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_mangling_h +#define ___iprt_mangling_h + +#ifndef RT_MANGLER +# error "RT_MANGLER is not defined." +#endif + +#ifndef DOXYGEN_RUNNING + +/** @def RT_WITH_MANGLING + * Indicates that we're mangling symbols. */ +# define RT_WITH_MANGLING + + +/* + * Stable functions (alphabetical order): + */ +/* ASM*: + grep -h DECLASM include/iprt/asm.h include/iprt/asm-amd64-x86.h \ + | kmk_sed -e 's/^DECLASM.[^)]*. *\(ASM[^(]*\)[(].*$/# define \1 :RT_MANGLER(\1)\n# define \1_EndProc :RT_MANGLER(\1_EndProc)/' \ + | sort \ + | awk -F: '{ printf("%-55s %s\n", $1, $2);' */ +# define ASMAddFlags RT_MANGLER(ASMAddFlags) +# define ASMAddFlags_EndProc RT_MANGLER(ASMAddFlags_EndProc) +# define ASMAtomicAddU16 RT_MANGLER(ASMAtomicAddU16) +# define ASMAtomicAddU16_EndProc RT_MANGLER(ASMAtomicAddU16_EndProc) +# define ASMAtomicAddU32 RT_MANGLER(ASMAtomicAddU32) +# define ASMAtomicAddU32_EndProc RT_MANGLER(ASMAtomicAddU32_EndProc) +# define ASMAtomicAddU64 RT_MANGLER(ASMAtomicAddU64) +# define ASMAtomicAddU64_EndProc RT_MANGLER(ASMAtomicAddU64_EndProc) +# define ASMAtomicAndU32 RT_MANGLER(ASMAtomicAndU32) +# define ASMAtomicAndU32_EndProc RT_MANGLER(ASMAtomicAndU32_EndProc) +# define ASMAtomicAndU64 RT_MANGLER(ASMAtomicAndU64) +# define ASMAtomicAndU64_EndProc RT_MANGLER(ASMAtomicAndU64_EndProc) +# define ASMAtomicBitClear RT_MANGLER(ASMAtomicBitClear) +# define ASMAtomicBitClear_EndProc RT_MANGLER(ASMAtomicBitClear_EndProc) +# define ASMAtomicBitSet RT_MANGLER(ASMAtomicBitSet) +# define ASMAtomicBitSet_EndProc RT_MANGLER(ASMAtomicBitSet_EndProc) +# define ASMAtomicBitTestAndClear RT_MANGLER(ASMAtomicBitTestAndClear) +# define ASMAtomicBitTestAndClear_EndProc RT_MANGLER(ASMAtomicBitTestAndClear_EndProc) +# define ASMAtomicBitTestAndSet RT_MANGLER(ASMAtomicBitTestAndSet) +# define ASMAtomicBitTestAndSet_EndProc RT_MANGLER(ASMAtomicBitTestAndSet_EndProc) +# define ASMAtomicBitTestAndToggle RT_MANGLER(ASMAtomicBitTestAndToggle) +# define ASMAtomicBitTestAndToggle_EndProc RT_MANGLER(ASMAtomicBitTestAndToggle_EndProc) +# define ASMAtomicBitToggle RT_MANGLER(ASMAtomicBitToggle) +# define ASMAtomicBitToggle_EndProc RT_MANGLER(ASMAtomicBitToggle_EndProc) +# define ASMAtomicCmpXchgExU32 RT_MANGLER(ASMAtomicCmpXchgExU32) +# define ASMAtomicCmpXchgExU32_EndProc RT_MANGLER(ASMAtomicCmpXchgExU32_EndProc) +# define ASMAtomicCmpXchgExU64 RT_MANGLER(ASMAtomicCmpXchgExU64) +# define ASMAtomicCmpXchgExU64_EndProc RT_MANGLER(ASMAtomicCmpXchgExU64_EndProc) +# define ASMAtomicCmpXchgU32 RT_MANGLER(ASMAtomicCmpXchgU32) +# define ASMAtomicCmpXchgU32_EndProc RT_MANGLER(ASMAtomicCmpXchgU32_EndProc) +# define ASMAtomicCmpXchgU64 RT_MANGLER(ASMAtomicCmpXchgU64) +# define ASMAtomicCmpXchgU64_EndProc RT_MANGLER(ASMAtomicCmpXchgU64_EndProc) +# define ASMAtomicCmpXchgU8 RT_MANGLER(ASMAtomicCmpXchgU8) +# define ASMAtomicCmpXchgU8_EndProc RT_MANGLER(ASMAtomicCmpXchgU8_EndProc) +# define ASMAtomicDecU16 RT_MANGLER(ASMAtomicDecU16) +# define ASMAtomicDecU16_EndProc RT_MANGLER(ASMAtomicDecU16_EndProc) +# define ASMAtomicDecU32 RT_MANGLER(ASMAtomicDecU32) +# define ASMAtomicDecU32_EndProc RT_MANGLER(ASMAtomicDecU32_EndProc) +# define ASMAtomicDecU64 RT_MANGLER(ASMAtomicDecU64) +# define ASMAtomicDecU64_EndProc RT_MANGLER(ASMAtomicDecU64_EndProc) +# define ASMAtomicIncU16 RT_MANGLER(ASMAtomicIncU16) +# define ASMAtomicIncU16_EndProc RT_MANGLER(ASMAtomicIncU16_EndProc) +# define ASMAtomicIncU32 RT_MANGLER(ASMAtomicIncU32) +# define ASMAtomicIncU32_EndProc RT_MANGLER(ASMAtomicIncU32_EndProc) +# define ASMAtomicIncU64 RT_MANGLER(ASMAtomicIncU64) +# define ASMAtomicIncU64_EndProc RT_MANGLER(ASMAtomicIncU64_EndProc) +# define ASMAtomicOrU32 RT_MANGLER(ASMAtomicOrU32) +# define ASMAtomicOrU32_EndProc RT_MANGLER(ASMAtomicOrU32_EndProc) +# define ASMAtomicOrU64 RT_MANGLER(ASMAtomicOrU64) +# define ASMAtomicOrU64_EndProc RT_MANGLER(ASMAtomicOrU64_EndProc) +# define ASMAtomicReadU64 RT_MANGLER(ASMAtomicReadU64) +# define ASMAtomicReadU64_EndProc RT_MANGLER(ASMAtomicReadU64_EndProc) +# define ASMAtomicUoAndU32 RT_MANGLER(ASMAtomicUoAndU32) +# define ASMAtomicUoAndU32_EndProc RT_MANGLER(ASMAtomicUoAndU32_EndProc) +# define ASMAtomicUoAndU64 RT_MANGLER(ASMAtomicUoAndU64) +# define ASMAtomicUoAndU64_EndProc RT_MANGLER(ASMAtomicUoAndU64_EndProc) +# define ASMAtomicUoDecU32 RT_MANGLER(ASMAtomicUoDecU32) +# define ASMAtomicUoDecU32_EndProc RT_MANGLER(ASMAtomicUoDecU32_EndProc) +# define ASMAtomicUoIncU32 RT_MANGLER(ASMAtomicUoIncU32) +# define ASMAtomicUoIncU32_EndProc RT_MANGLER(ASMAtomicUoIncU32_EndProc) +# define ASMAtomicUoOrU32 RT_MANGLER(ASMAtomicUoOrU32) +# define ASMAtomicUoOrU32_EndProc RT_MANGLER(ASMAtomicUoOrU32_EndProc) +# define ASMAtomicUoOrU64 RT_MANGLER(ASMAtomicUoOrU64) +# define ASMAtomicUoOrU64_EndProc RT_MANGLER(ASMAtomicUoOrU64_EndProc) +# define ASMAtomicUoReadU64 RT_MANGLER(ASMAtomicUoReadU64) +# define ASMAtomicUoReadU64_EndProc RT_MANGLER(ASMAtomicUoReadU64_EndProc) +# define ASMAtomicXchgU16 RT_MANGLER(ASMAtomicXchgU16) +# define ASMAtomicXchgU16_EndProc RT_MANGLER(ASMAtomicXchgU16_EndProc) +# define ASMAtomicXchgU32 RT_MANGLER(ASMAtomicXchgU32) +# define ASMAtomicXchgU32_EndProc RT_MANGLER(ASMAtomicXchgU32_EndProc) +# define ASMAtomicXchgU64 RT_MANGLER(ASMAtomicXchgU64) +# define ASMAtomicXchgU64_EndProc RT_MANGLER(ASMAtomicXchgU64_EndProc) +# define ASMAtomicXchgU8 RT_MANGLER(ASMAtomicXchgU8) +# define ASMAtomicXchgU8_EndProc RT_MANGLER(ASMAtomicXchgU8_EndProc) +# define ASMBitClear RT_MANGLER(ASMBitClear) +# define ASMBitClear_EndProc RT_MANGLER(ASMBitClear_EndProc) +# define ASMBitFirstClear RT_MANGLER(ASMBitFirstClear) +# define ASMBitFirstClear_EndProc RT_MANGLER(ASMBitFirstClear_EndProc) +# define ASMBitFirstSet RT_MANGLER(ASMBitFirstSet) +# define ASMBitFirstSet_EndProc RT_MANGLER(ASMBitFirstSet_EndProc) +# define ASMBitFirstSetU16 RT_MANGLER(ASMBitFirstSetU16) +# define ASMBitFirstSetU16_EndProc RT_MANGLER(ASMBitFirstSetU16_EndProc) +# define ASMBitFirstSetU32 RT_MANGLER(ASMBitFirstSetU32) +# define ASMBitFirstSetU32_EndProc RT_MANGLER(ASMBitFirstSetU32_EndProc) +# define ASMBitFirstSetU64 RT_MANGLER(ASMBitFirstSetU64) +# define ASMBitFirstSetU64_EndProc RT_MANGLER(ASMBitFirstSetU64_EndProc) +# define ASMBitLastSetU16 RT_MANGLER(ASMBitLastSetU16) +# define ASMBitLastSetU16_EndProc RT_MANGLER(ASMBitLastSetU16_EndProc) +# define ASMBitLastSetU32 RT_MANGLER(ASMBitLastSetU32) +# define ASMBitLastSetU32_EndProc RT_MANGLER(ASMBitLastSetU32_EndProc) +# define ASMBitLastSetU64 RT_MANGLER(ASMBitLastSetU64) +# define ASMBitLastSetU64_EndProc RT_MANGLER(ASMBitLastSetU64_EndProc) +# define ASMBitNextClear RT_MANGLER(ASMBitNextClear) +# define ASMBitNextClear_EndProc RT_MANGLER(ASMBitNextClear_EndProc) +# define ASMBitNextSet RT_MANGLER(ASMBitNextSet) +# define ASMBitNextSet_EndProc RT_MANGLER(ASMBitNextSet_EndProc) +# define ASMBitSet RT_MANGLER(ASMBitSet) +# define ASMBitSet_EndProc RT_MANGLER(ASMBitSet_EndProc) +# define ASMBitTest RT_MANGLER(ASMBitTest) +# define ASMBitTest_EndProc RT_MANGLER(ASMBitTest_EndProc) +# define ASMBitTestAndClear RT_MANGLER(ASMBitTestAndClear) +# define ASMBitTestAndClear_EndProc RT_MANGLER(ASMBitTestAndClear_EndProc) +# define ASMBitTestAndSet RT_MANGLER(ASMBitTestAndSet) +# define ASMBitTestAndSet_EndProc RT_MANGLER(ASMBitTestAndSet_EndProc) +# define ASMBitTestAndToggle RT_MANGLER(ASMBitTestAndToggle) +# define ASMBitTestAndToggle_EndProc RT_MANGLER(ASMBitTestAndToggle_EndProc) +# define ASMBitToggle RT_MANGLER(ASMBitToggle) +# define ASMBitToggle_EndProc RT_MANGLER(ASMBitToggle_EndProc) +# define ASMByteSwapU16 RT_MANGLER(ASMByteSwapU16) +# define ASMByteSwapU16_EndProc RT_MANGLER(ASMByteSwapU16_EndProc) +# define ASMByteSwapU32 RT_MANGLER(ASMByteSwapU32) +# define ASMByteSwapU32_EndProc RT_MANGLER(ASMByteSwapU32_EndProc) +# define ASMChangeFlags RT_MANGLER(ASMChangeFlags) +# define ASMChangeFlags_EndProc RT_MANGLER(ASMChangeFlags_EndProc) +# define ASMClearFlags RT_MANGLER(ASMClearFlags) +# define ASMClearFlags_EndProc RT_MANGLER(ASMClearFlags_EndProc) +# define ASMCpuId RT_MANGLER(ASMCpuId) +# define ASMCpuId_EAX RT_MANGLER(ASMCpuId_EAX) +# define ASMCpuId_EAX_EndProc RT_MANGLER(ASMCpuId_EAX_EndProc) +# define ASMCpuId_EBX RT_MANGLER(ASMCpuId_EBX) +# define ASMCpuId_EBX_EndProc RT_MANGLER(ASMCpuId_EBX_EndProc) +# define ASMCpuId_ECX RT_MANGLER(ASMCpuId_ECX) +# define ASMCpuId_ECX_EDX RT_MANGLER(ASMCpuId_ECX_EDX) +# define ASMCpuId_ECX_EDX_EndProc RT_MANGLER(ASMCpuId_ECX_EDX_EndProc) +# define ASMCpuId_ECX_EndProc RT_MANGLER(ASMCpuId_ECX_EndProc) +# define ASMCpuId_EDX RT_MANGLER(ASMCpuId_EDX) +# define ASMCpuId_EDX_EndProc RT_MANGLER(ASMCpuId_EDX_EndProc) +# define ASMCpuId_EndProc RT_MANGLER(ASMCpuId_EndProc) +# define ASMCpuId_Idx_ECX RT_MANGLER(ASMCpuId_Idx_ECX) +# define ASMCpuId_Idx_ECX_EndProc RT_MANGLER(ASMCpuId_Idx_ECX_EndProc) +# define ASMCpuIdExSlow RT_MANGLER(ASMCpuIdExSlow) +# define ASMCpuIdExSlow_EndProc RT_MANGLER(ASMCpuIdExSlow_EndProc) +# define ASMGetAndClearDR6 RT_MANGLER(ASMGetAndClearDR6) +# define ASMGetAndClearDR6_EndProc RT_MANGLER(ASMGetAndClearDR6_EndProc) +# define ASMGetApicId RT_MANGLER(ASMGetApicId) +# define ASMGetApicId_EndProc RT_MANGLER(ASMGetApicId_EndProc) +# define ASMGetCR0 RT_MANGLER(ASMGetCR0) +# define ASMGetCR0_EndProc RT_MANGLER(ASMGetCR0_EndProc) +# define ASMGetCR2 RT_MANGLER(ASMGetCR2) +# define ASMGetCR2_EndProc RT_MANGLER(ASMGetCR2_EndProc) +# define ASMGetCR3 RT_MANGLER(ASMGetCR3) +# define ASMGetCR3_EndProc RT_MANGLER(ASMGetCR3_EndProc) +# define ASMGetCR4 RT_MANGLER(ASMGetCR4) +# define ASMGetCR4_EndProc RT_MANGLER(ASMGetCR4_EndProc) +# define ASMGetCR8 RT_MANGLER(ASMGetCR8) +# define ASMGetCR8_EndProc RT_MANGLER(ASMGetCR8_EndProc) +# define ASMGetCS RT_MANGLER(ASMGetCS) +# define ASMGetCS_EndProc RT_MANGLER(ASMGetCS_EndProc) +# define ASMGetDR0 RT_MANGLER(ASMGetDR0) +# define ASMGetDR0_EndProc RT_MANGLER(ASMGetDR0_EndProc) +# define ASMGetDR1 RT_MANGLER(ASMGetDR1) +# define ASMGetDR1_EndProc RT_MANGLER(ASMGetDR1_EndProc) +# define ASMGetDR2 RT_MANGLER(ASMGetDR2) +# define ASMGetDR2_EndProc RT_MANGLER(ASMGetDR2_EndProc) +# define ASMGetDR3 RT_MANGLER(ASMGetDR3) +# define ASMGetDR3_EndProc RT_MANGLER(ASMGetDR3_EndProc) +# define ASMGetDR6 RT_MANGLER(ASMGetDR6) +# define ASMGetDR6_EndProc RT_MANGLER(ASMGetDR6_EndProc) +# define ASMGetDR7 RT_MANGLER(ASMGetDR7) +# define ASMGetDR7_EndProc RT_MANGLER(ASMGetDR7_EndProc) +# define ASMGetDS RT_MANGLER(ASMGetDS) +# define ASMGetDS_EndProc RT_MANGLER(ASMGetDS_EndProc) +# define ASMGetES RT_MANGLER(ASMGetES) +# define ASMGetES_EndProc RT_MANGLER(ASMGetES_EndProc) +# define ASMGetFlags RT_MANGLER(ASMGetFlags) +# define ASMGetFlags_EndProc RT_MANGLER(ASMGetFlags_EndProc) +# define ASMGetFS RT_MANGLER(ASMGetFS) +# define ASMGetFS_EndProc RT_MANGLER(ASMGetFS_EndProc) +# define ASMGetGDTR RT_MANGLER(ASMGetGDTR) +# define ASMGetGDTR_EndProc RT_MANGLER(ASMGetGDTR_EndProc) +# define ASMGetGS RT_MANGLER(ASMGetGS) +# define ASMGetGS_EndProc RT_MANGLER(ASMGetGS_EndProc) +# define ASMGetIDTR RT_MANGLER(ASMGetIDTR) +# define ASMGetIDTR_EndProc RT_MANGLER(ASMGetIDTR_EndProc) +# define ASMGetIdtrLimit RT_MANGLER(ASMGetIdtrLimit) +# define ASMGetIdtrLimit_EndProc RT_MANGLER(ASMGetIdtrLimit_EndProc) +# define ASMGetLDTR RT_MANGLER(ASMGetLDTR) +# define ASMGetLDTR_EndProc RT_MANGLER(ASMGetLDTR_EndProc) +# define ASMGetSegAttr RT_MANGLER(ASMGetSegAttr) +# define ASMGetSegAttr_EndProc RT_MANGLER(ASMGetSegAttr_EndProc) +# define ASMGetSS RT_MANGLER(ASMGetSS) +# define ASMGetSS_EndProc RT_MANGLER(ASMGetSS_EndProc) +# define ASMGetTR RT_MANGLER(ASMGetTR) +# define ASMGetTR_EndProc RT_MANGLER(ASMGetTR_EndProc) +# define ASMGetXcr0 RT_MANGLER(ASMGetXcr0) +# define ASMGetXcr0_EndProc RT_MANGLER(ASMGetXcr0_EndProc) +# define ASMHalt RT_MANGLER(ASMHalt) +# define ASMHalt_EndProc RT_MANGLER(ASMHalt_EndProc) +# define ASMInStrU16 RT_MANGLER(ASMInStrU16) +# define ASMInStrU16_EndProc RT_MANGLER(ASMInStrU16_EndProc) +# define ASMInStrU32 RT_MANGLER(ASMInStrU32) +# define ASMInStrU32_EndProc RT_MANGLER(ASMInStrU32_EndProc) +# define ASMInStrU8 RT_MANGLER(ASMInStrU8) +# define ASMInStrU8_EndProc RT_MANGLER(ASMInStrU8_EndProc) +# define ASMIntDisable RT_MANGLER(ASMIntDisable) +# define ASMIntDisable_EndProc RT_MANGLER(ASMIntDisable_EndProc) +# define ASMIntDisableFlags RT_MANGLER(ASMIntDisableFlags) +# define ASMIntDisableFlags_EndProc RT_MANGLER(ASMIntDisableFlags_EndProc) +# define ASMIntEnable RT_MANGLER(ASMIntEnable) +# define ASMIntEnable_EndProc RT_MANGLER(ASMIntEnable_EndProc) +# define ASMInU16 RT_MANGLER(ASMInU16) +# define ASMInU16_EndProc RT_MANGLER(ASMInU16_EndProc) +# define ASMInU32 RT_MANGLER(ASMInU32) +# define ASMInU32_EndProc RT_MANGLER(ASMInU32_EndProc) +# define ASMInU8 RT_MANGLER(ASMInU8) +# define ASMInU8_EndProc RT_MANGLER(ASMInU8_EndProc) +# define ASMInvalidateInternalCaches RT_MANGLER(ASMInvalidateInternalCaches) +# define ASMInvalidateInternalCaches_EndProc RT_MANGLER(ASMInvalidateInternalCaches_EndProc) +# define ASMInvalidatePage RT_MANGLER(ASMInvalidatePage) +# define ASMInvalidatePage_EndProc RT_MANGLER(ASMInvalidatePage_EndProc) +# define ASMMemFill32 RT_MANGLER(ASMMemFill32) +# define ASMMemFill32_EndProc RT_MANGLER(ASMMemFill32_EndProc) +# define ASMMemFirstNonZero RT_MANGLER(ASMMemFirstNonZero) +# define ASMMemFirstNonZero_EndProc RT_MANGLER(ASMMemFirstNonZero_EndProc) +# define ASMMemFirstMismatchingU8 RT_MANGLER(ASMMemFirstMismatchingU8) +# define ASMMemFirstMismatchingU8_EndProc RT_MANGLER(ASMMemFirstMismatchingU8_EndProc) +# define ASMMemFirstMismatchingU32 RT_MANGLER(ASMMemFirstMismatchingU32) +# define ASMMemFirstMismatchingU32_EndProc RT_MANGLER(ASMMemFirstMismatchingU32_EndProc) +# define ASMMemIsZero RT_MANGLER(ASMMemIsZero) +# define ASMMemIsZero_EndProc RT_MANGLER(ASMMemIsZero_EndProc) +# define ASMMemIsAllU8 RT_MANGLER(ASMMemIsAllU8) +# define ASMMemIsAllU8_EndProc RT_MANGLER(ASMMemIsAllU8_EndProc) +# define ASMMemZero32 RT_MANGLER(ASMMemZero32) +# define ASMMemZero32_EndProc RT_MANGLER(ASMMemZero32_EndProc) +# define ASMMemZeroPage RT_MANGLER(ASMMemZeroPage) +# define ASMMemZeroPage_EndProc RT_MANGLER(ASMMemZeroPage_EndProc) +# define ASMNopPause RT_MANGLER(ASMNopPause) +# define ASMNopPause_EndProc RT_MANGLER(ASMNopPause_EndProc) +# define ASMOutStrU16 RT_MANGLER(ASMOutStrU16) +# define ASMOutStrU16_EndProc RT_MANGLER(ASMOutStrU16_EndProc) +# define ASMOutStrU32 RT_MANGLER(ASMOutStrU32) +# define ASMOutStrU32_EndProc RT_MANGLER(ASMOutStrU32_EndProc) +# define ASMOutStrU8 RT_MANGLER(ASMOutStrU8) +# define ASMOutStrU8_EndProc RT_MANGLER(ASMOutStrU8_EndProc) +# define ASMOutU16 RT_MANGLER(ASMOutU16) +# define ASMOutU16_EndProc RT_MANGLER(ASMOutU16_EndProc) +# define ASMOutU32 RT_MANGLER(ASMOutU32) +# define ASMOutU32_EndProc RT_MANGLER(ASMOutU32_EndProc) +# define ASMOutU8 RT_MANGLER(ASMOutU8) +# define ASMOutU8_EndProc RT_MANGLER(ASMOutU8_EndProc) +# define ASMProbeReadByte RT_MANGLER(ASMProbeReadByte) +# define ASMProbeReadByte_EndProc RT_MANGLER(ASMProbeReadByte_EndProc) +# define ASMRdMsr RT_MANGLER(ASMRdMsr) +# define ASMRdMsr_EndProc RT_MANGLER(ASMRdMsr_EndProc) +# define ASMRdMsr_High RT_MANGLER(ASMRdMsr_High) +# define ASMRdMsr_High_EndProc RT_MANGLER(ASMRdMsr_High_EndProc) +# define ASMRdMsr_Low RT_MANGLER(ASMRdMsr_Low) +# define ASMRdMsr_Low_EndProc RT_MANGLER(ASMRdMsr_Low_EndProc) +# define ASMRdMsrEx RT_MANGLER(ASMRdMsrEx) +# define ASMRdMsrEx_EndProc RT_MANGLER(ASMRdMsrEx_EndProc) +# define ASMReadTSC RT_MANGLER(ASMReadTSC) +# define ASMReadTSC_EndProc RT_MANGLER(ASMReadTSC_EndProc) +# define ASMReadTscWithAux RT_MANGLER(ASMReadTscWithAux) +# define ASMReadTscWithAux_EndProc RT_MANGLER(ASMReadTscWithAux_EndProc) +# define ASMReloadCR3 RT_MANGLER(ASMReloadCR3) +# define ASMReloadCR3_EndProc RT_MANGLER(ASMReloadCR3_EndProc) +# define ASMRotateLeftU32 RT_MANGLER(ASMRotateLeftU32) +# define ASMRotateLeftU32_EndProc RT_MANGLER(ASMRotateLeftU32_EndProc) +# define ASMRotateRightU32 RT_MANGLER(ASMRotateRightU32) +# define ASMRotateRightU32_EndProc RT_MANGLER(ASMRotateRightU32_EndProc) +# define ASMSerializeInstructionCpuId RT_MANGLER(ASMSerializeInstructionCpuId) +# define ASMSerializeInstructionCpuId_EndProc RT_MANGLER(ASMSerializeInstructionCpuId_EndProc) +# define ASMSerializeInstructionIRet RT_MANGLER(ASMSerializeInstructionIRet) +# define ASMSerializeInstructionIRet_EndProc RT_MANGLER(ASMSerializeInstructionIRet_EndProc) +# define ASMSerializeInstructionRdTscp RT_MANGLER(ASMSerializeInstructionRdTscp) +# define ASMSerializeInstructionRdTscp_EndProc RT_MANGLER(ASMSerializeInstructionRdTscp_EndProc) +# define ASMSetCR0 RT_MANGLER(ASMSetCR0) +# define ASMSetCR0_EndProc RT_MANGLER(ASMSetCR0_EndProc) +# define ASMSetCR2 RT_MANGLER(ASMSetCR2) +# define ASMSetCR2_EndProc RT_MANGLER(ASMSetCR2_EndProc) +# define ASMSetCR3 RT_MANGLER(ASMSetCR3) +# define ASMSetCR3_EndProc RT_MANGLER(ASMSetCR3_EndProc) +# define ASMSetCR4 RT_MANGLER(ASMSetCR4) +# define ASMSetCR4_EndProc RT_MANGLER(ASMSetCR4_EndProc) +# define ASMSetDR0 RT_MANGLER(ASMSetDR0) +# define ASMSetDR0_EndProc RT_MANGLER(ASMSetDR0_EndProc) +# define ASMSetDR1 RT_MANGLER(ASMSetDR1) +# define ASMSetDR1_EndProc RT_MANGLER(ASMSetDR1_EndProc) +# define ASMSetDR2 RT_MANGLER(ASMSetDR2) +# define ASMSetDR2_EndProc RT_MANGLER(ASMSetDR2_EndProc) +# define ASMSetDR3 RT_MANGLER(ASMSetDR3) +# define ASMSetDR3_EndProc RT_MANGLER(ASMSetDR3_EndProc) +# define ASMSetDR6 RT_MANGLER(ASMSetDR6) +# define ASMSetDR6_EndProc RT_MANGLER(ASMSetDR6_EndProc) +# define ASMSetDR7 RT_MANGLER(ASMSetDR7) +# define ASMSetDR7_EndProc RT_MANGLER(ASMSetDR7_EndProc) +# define ASMSetFlags RT_MANGLER(ASMSetFlags) +# define ASMSetFlags_EndProc RT_MANGLER(ASMSetFlags_EndProc) +# define ASMSetGDTR RT_MANGLER(ASMSetGDTR) +# define ASMSetGDTR_EndProc RT_MANGLER(ASMSetGDTR_EndProc) +# define ASMSetIDTR RT_MANGLER(ASMSetIDTR) +# define ASMSetIDTR_EndProc RT_MANGLER(ASMSetIDTR_EndProc) +# define ASMSetXcr0 RT_MANGLER(ASMSetXcr0) +# define ASMSetXcr0_EndProc RT_MANGLER(ASMSetXcr0_EndProc) +# define ASMWriteBackAndInvalidateCaches RT_MANGLER(ASMWriteBackAndInvalidateCaches) +# define ASMWriteBackAndInvalidateCaches_EndProc RT_MANGLER(ASMWriteBackAndInvalidateCaches_EndProc) +# define ASMWrMsr RT_MANGLER(ASMWrMsr) +# define ASMWrMsr_EndProc RT_MANGLER(ASMWrMsr_EndProc) +# define ASMWrMsrEx RT_MANGLER(ASMWrMsrEx) +# define ASMWrMsrEx_EndProc RT_MANGLER(ASMWrMsrEx_EndProc) +# define ASMXRstor RT_MANGLER(ASMXRstor) +# define ASMXRstor_EndProc RT_MANGLER(ASMXRstor_EndProc) +# define ASMXSave RT_MANGLER(ASMXSave) +# define ASMXSave_EndProc RT_MANGLER(ASMXSave_EndProc) +# define ASMFxRstor RT_MANGLER(ASMFxRstor) +# define ASMFxRstor_EndProc RT_MANGLER(ASMFxRstor_EndProc) +# define ASMFxSave RT_MANGLER(ASMFxSave) +# define ASMFxSave_EndProc RT_MANGLER(ASMFxSave_EndProc) + +# define RTAssertAreQuiet RT_MANGLER(RTAssertAreQuiet) +# define RTAssertMayPanic RT_MANGLER(RTAssertMayPanic) +# define RTAssertMsg1 RT_MANGLER(RTAssertMsg1) +# define RTAssertMsg1Weak RT_MANGLER(RTAssertMsg1Weak) +# define RTAssertMsg2 RT_MANGLER(RTAssertMsg2) +# define RTAssertMsg2Add RT_MANGLER(RTAssertMsg2Add) +# define RTAssertMsg2AddV RT_MANGLER(RTAssertMsg2AddV) +# define RTAssertMsg2AddWeak RT_MANGLER(RTAssertMsg2AddWeak) +# define RTAssertMsg2AddWeakV RT_MANGLER(RTAssertMsg2AddWeakV) +# define RTAssertMsg2V RT_MANGLER(RTAssertMsg2V) +# define RTAssertMsg2Weak RT_MANGLER(RTAssertMsg2Weak) +# define RTAssertMsg2WeakV RT_MANGLER(RTAssertMsg2WeakV) +# define RTAssertSetMayPanic RT_MANGLER(RTAssertSetMayPanic) +# define RTAssertSetQuiet RT_MANGLER(RTAssertSetQuiet) +# define RTAssertShouldPanic RT_MANGLER(RTAssertShouldPanic) +# define RTAvlGCPhysDestroy RT_MANGLER(RTAvlGCPhysDestroy) +# define RTAvlGCPhysDoWithAll RT_MANGLER(RTAvlGCPhysDoWithAll) +# define RTAvlGCPhysGet RT_MANGLER(RTAvlGCPhysGet) +# define RTAvlGCPhysGetBestFit RT_MANGLER(RTAvlGCPhysGetBestFit) +# define RTAvlGCPhysInsert RT_MANGLER(RTAvlGCPhysInsert) +# define RTAvlGCPhysRemove RT_MANGLER(RTAvlGCPhysRemove) +# define RTAvlGCPhysRemoveBestFit RT_MANGLER(RTAvlGCPhysRemoveBestFit) +# define RTAvlGCPtrDestroy RT_MANGLER(RTAvlGCPtrDestroy) +# define RTAvlGCPtrDoWithAll RT_MANGLER(RTAvlGCPtrDoWithAll) +# define RTAvlGCPtrGet RT_MANGLER(RTAvlGCPtrGet) +# define RTAvlGCPtrGetBestFit RT_MANGLER(RTAvlGCPtrGetBestFit) +# define RTAvlGCPtrInsert RT_MANGLER(RTAvlGCPtrInsert) +# define RTAvlGCPtrRemove RT_MANGLER(RTAvlGCPtrRemove) +# define RTAvlGCPtrRemoveBestFit RT_MANGLER(RTAvlGCPtrRemoveBestFit) +# define RTAvlHCPhysDestroy RT_MANGLER(RTAvlHCPhysDestroy) +# define RTAvlHCPhysDoWithAll RT_MANGLER(RTAvlHCPhysDoWithAll) +# define RTAvlHCPhysGet RT_MANGLER(RTAvlHCPhysGet) +# define RTAvlHCPhysGetBestFit RT_MANGLER(RTAvlHCPhysGetBestFit) +# define RTAvlHCPhysInsert RT_MANGLER(RTAvlHCPhysInsert) +# define RTAvlHCPhysRemove RT_MANGLER(RTAvlHCPhysRemove) +# define RTAvlHCPhysRemoveBestFit RT_MANGLER(RTAvlHCPhysRemoveBestFit) +# define RTAvllU32Destroy RT_MANGLER(RTAvllU32Destroy) +# define RTAvllU32DoWithAll RT_MANGLER(RTAvllU32DoWithAll) +# define RTAvllU32Get RT_MANGLER(RTAvllU32Get) +# define RTAvllU32GetBestFit RT_MANGLER(RTAvllU32GetBestFit) +# define RTAvllU32Insert RT_MANGLER(RTAvllU32Insert) +# define RTAvllU32Remove RT_MANGLER(RTAvllU32Remove) +# define RTAvllU32RemoveBestFit RT_MANGLER(RTAvllU32RemoveBestFit) +# define RTAvllU32RemoveNode RT_MANGLER(RTAvllU32RemoveNode) +# define RTAvloGCPhysDestroy RT_MANGLER(RTAvloGCPhysDestroy) +# define RTAvloGCPhysDoWithAll RT_MANGLER(RTAvloGCPhysDoWithAll) +# define RTAvloGCPhysGet RT_MANGLER(RTAvloGCPhysGet) +# define RTAvloGCPhysGetBestFit RT_MANGLER(RTAvloGCPhysGetBestFit) +# define RTAvloGCPhysInsert RT_MANGLER(RTAvloGCPhysInsert) +# define RTAvloGCPhysRemove RT_MANGLER(RTAvloGCPhysRemove) +# define RTAvloGCPhysRemoveBestFit RT_MANGLER(RTAvloGCPhysRemoveBestFit) +# define RTAvloGCPtrDestroy RT_MANGLER(RTAvloGCPtrDestroy) +# define RTAvloGCPtrDoWithAll RT_MANGLER(RTAvloGCPtrDoWithAll) +# define RTAvloGCPtrGet RT_MANGLER(RTAvloGCPtrGet) +# define RTAvloGCPtrGetBestFit RT_MANGLER(RTAvloGCPtrGetBestFit) +# define RTAvloGCPtrInsert RT_MANGLER(RTAvloGCPtrInsert) +# define RTAvloGCPtrRemove RT_MANGLER(RTAvloGCPtrRemove) +# define RTAvloGCPtrRemoveBestFit RT_MANGLER(RTAvloGCPtrRemoveBestFit) +# define RTAvloHCPhysDestroy RT_MANGLER(RTAvloHCPhysDestroy) +# define RTAvloHCPhysDoWithAll RT_MANGLER(RTAvloHCPhysDoWithAll) +# define RTAvloHCPhysGet RT_MANGLER(RTAvloHCPhysGet) +# define RTAvloHCPhysGetBestFit RT_MANGLER(RTAvloHCPhysGetBestFit) +# define RTAvloHCPhysInsert RT_MANGLER(RTAvloHCPhysInsert) +# define RTAvloHCPhysRemove RT_MANGLER(RTAvloHCPhysRemove) +# define RTAvloHCPhysRemoveBestFit RT_MANGLER(RTAvloHCPhysRemoveBestFit) +# define RTAvloIOPortDestroy RT_MANGLER(RTAvloIOPortDestroy) +# define RTAvloIOPortDoWithAll RT_MANGLER(RTAvloIOPortDoWithAll) +# define RTAvloIOPortGet RT_MANGLER(RTAvloIOPortGet) +# define RTAvloIOPortGetBestFit RT_MANGLER(RTAvloIOPortGetBestFit) +# define RTAvloIOPortInsert RT_MANGLER(RTAvloIOPortInsert) +# define RTAvloIOPortRemove RT_MANGLER(RTAvloIOPortRemove) +# define RTAvloIOPortRemoveBestFit RT_MANGLER(RTAvloIOPortRemoveBestFit) +# define RTAvloU32Destroy RT_MANGLER(RTAvloU32Destroy) +# define RTAvloU32DoWithAll RT_MANGLER(RTAvloU32DoWithAll) +# define RTAvloU32Get RT_MANGLER(RTAvloU32Get) +# define RTAvloU32GetBestFit RT_MANGLER(RTAvloU32GetBestFit) +# define RTAvloU32Insert RT_MANGLER(RTAvloU32Insert) +# define RTAvloU32Remove RT_MANGLER(RTAvloU32Remove) +# define RTAvloU32RemoveBestFit RT_MANGLER(RTAvloU32RemoveBestFit) +# define RTAvlPVDestroy RT_MANGLER(RTAvlPVDestroy) +# define RTAvlPVDoWithAll RT_MANGLER(RTAvlPVDoWithAll) +# define RTAvlPVGet RT_MANGLER(RTAvlPVGet) +# define RTAvlPVGetBestFit RT_MANGLER(RTAvlPVGetBestFit) +# define RTAvlPVInsert RT_MANGLER(RTAvlPVInsert) +# define RTAvlPVRemove RT_MANGLER(RTAvlPVRemove) +# define RTAvlPVRemoveBestFit RT_MANGLER(RTAvlPVRemoveBestFit) +# define RTAvlrFileOffsetDestroy RT_MANGLER(RTAvlrFileOffsetDestroy) +# define RTAvlrFileOffsetDoWithAll RT_MANGLER(RTAvlrFileOffsetDoWithAll) +# define RTAvlrFileOffsetGet RT_MANGLER(RTAvlrFileOffsetGet) +# define RTAvlrFileOffsetGetBestFit RT_MANGLER(RTAvlrFileOffsetGetBestFit) +# define RTAvlrFileOffsetGetLeft RT_MANGLER(RTAvlrFileOffsetGetLeft) +# define RTAvlrFileOffsetGetRight RT_MANGLER(RTAvlrFileOffsetGetRight) +# define RTAvlrFileOffsetGetRoot RT_MANGLER(RTAvlrFileOffsetGetRoot) +# define RTAvlrFileOffsetInsert RT_MANGLER(RTAvlrFileOffsetInsert) +# define RTAvlrFileOffsetRangeGet RT_MANGLER(RTAvlrFileOffsetRangeGet) +# define RTAvlrFileOffsetRangeRemove RT_MANGLER(RTAvlrFileOffsetRangeRemove) +# define RTAvlrFileOffsetRemove RT_MANGLER(RTAvlrFileOffsetRemove) +# define RTAvlrGCPtrDestroy RT_MANGLER(RTAvlrGCPtrDestroy) +# define RTAvlrGCPtrDoWithAll RT_MANGLER(RTAvlrGCPtrDoWithAll) +# define RTAvlrGCPtrGet RT_MANGLER(RTAvlrGCPtrGet) +# define RTAvlrGCPtrGetBestFit RT_MANGLER(RTAvlrGCPtrGetBestFit) +# define RTAvlrGCPtrGetLeft RT_MANGLER(RTAvlrGCPtrGetLeft) +# define RTAvlrGCPtrGetRight RT_MANGLER(RTAvlrGCPtrGetRight) +# define RTAvlrGCPtrGetRoot RT_MANGLER(RTAvlrGCPtrGetRoot) +# define RTAvlrGCPtrInsert RT_MANGLER(RTAvlrGCPtrInsert) +# define RTAvlrGCPtrRangeGet RT_MANGLER(RTAvlrGCPtrRangeGet) +# define RTAvlrGCPtrRangeRemove RT_MANGLER(RTAvlrGCPtrRangeRemove) +# define RTAvlrGCPtrRemove RT_MANGLER(RTAvlrGCPtrRemove) +# define RTAvlroGCPhysDestroy RT_MANGLER(RTAvlroGCPhysDestroy) +# define RTAvlroGCPhysDoWithAll RT_MANGLER(RTAvlroGCPhysDoWithAll) +# define RTAvlroGCPhysGet RT_MANGLER(RTAvlroGCPhysGet) +# define RTAvlroGCPhysGetBestFit RT_MANGLER(RTAvlroGCPhysGetBestFit) +# define RTAvlroGCPhysGetLeft RT_MANGLER(RTAvlroGCPhysGetLeft) +# define RTAvlroGCPhysGetRight RT_MANGLER(RTAvlroGCPhysGetRight) +# define RTAvlroGCPhysGetRoot RT_MANGLER(RTAvlroGCPhysGetRoot) +# define RTAvlroGCPhysInsert RT_MANGLER(RTAvlroGCPhysInsert) +# define RTAvlroGCPhysRangeGet RT_MANGLER(RTAvlroGCPhysRangeGet) +# define RTAvlroGCPhysRangeRemove RT_MANGLER(RTAvlroGCPhysRangeRemove) +# define RTAvlroGCPhysRemove RT_MANGLER(RTAvlroGCPhysRemove) +# define RTAvlroGCPtrDestroy RT_MANGLER(RTAvlroGCPtrDestroy) +# define RTAvlroGCPtrDoWithAll RT_MANGLER(RTAvlroGCPtrDoWithAll) +# define RTAvlroGCPtrGet RT_MANGLER(RTAvlroGCPtrGet) +# define RTAvlroGCPtrGetBestFit RT_MANGLER(RTAvlroGCPtrGetBestFit) +# define RTAvlroGCPtrGetLeft RT_MANGLER(RTAvlroGCPtrGetLeft) +# define RTAvlroGCPtrGetRight RT_MANGLER(RTAvlroGCPtrGetRight) +# define RTAvlroGCPtrGetRoot RT_MANGLER(RTAvlroGCPtrGetRoot) +# define RTAvlroGCPtrInsert RT_MANGLER(RTAvlroGCPtrInsert) +# define RTAvlroGCPtrRangeGet RT_MANGLER(RTAvlroGCPtrRangeGet) +# define RTAvlroGCPtrRangeRemove RT_MANGLER(RTAvlroGCPtrRangeRemove) +# define RTAvlroGCPtrRemove RT_MANGLER(RTAvlroGCPtrRemove) +# define RTAvlroIOPortDestroy RT_MANGLER(RTAvlroIOPortDestroy) +# define RTAvlroIOPortDoWithAll RT_MANGLER(RTAvlroIOPortDoWithAll) +# define RTAvlroIOPortGet RT_MANGLER(RTAvlroIOPortGet) +# define RTAvlroIOPortInsert RT_MANGLER(RTAvlroIOPortInsert) +# define RTAvlroIOPortRangeGet RT_MANGLER(RTAvlroIOPortRangeGet) +# define RTAvlroIOPortRangeRemove RT_MANGLER(RTAvlroIOPortRangeRemove) +# define RTAvlroIOPortRemove RT_MANGLER(RTAvlroIOPortRemove) +# define RTAvlrooGCPtrDestroy RT_MANGLER(RTAvlrooGCPtrDestroy) +# define RTAvlrooGCPtrDoWithAll RT_MANGLER(RTAvlrooGCPtrDoWithAll) +# define RTAvlrooGCPtrGet RT_MANGLER(RTAvlrooGCPtrGet) +# define RTAvlrooGCPtrGetBestFit RT_MANGLER(RTAvlrooGCPtrGetBestFit) +# define RTAvlrooGCPtrGetLeft RT_MANGLER(RTAvlrooGCPtrGetLeft) +# define RTAvlrooGCPtrGetNextEqual RT_MANGLER(RTAvlrooGCPtrGetNextEqual) +# define RTAvlrooGCPtrGetRight RT_MANGLER(RTAvlrooGCPtrGetRight) +# define RTAvlrooGCPtrGetRoot RT_MANGLER(RTAvlrooGCPtrGetRoot) +# define RTAvlrooGCPtrInsert RT_MANGLER(RTAvlrooGCPtrInsert) +# define RTAvlrooGCPtrRangeGet RT_MANGLER(RTAvlrooGCPtrRangeGet) +# define RTAvlrooGCPtrRangeRemove RT_MANGLER(RTAvlrooGCPtrRangeRemove) +# define RTAvlrooGCPtrRemove RT_MANGLER(RTAvlrooGCPtrRemove) +# define RTAvlrPVDestroy RT_MANGLER(RTAvlrPVDestroy) +# define RTAvlrPVDoWithAll RT_MANGLER(RTAvlrPVDoWithAll) +# define RTAvlrPVGet RT_MANGLER(RTAvlrPVGet) +# define RTAvlrPVGetBestFit RT_MANGLER(RTAvlrPVGetBestFit) +# define RTAvlrPVInsert RT_MANGLER(RTAvlrPVInsert) +# define RTAvlrPVRangeGet RT_MANGLER(RTAvlrPVRangeGet) +# define RTAvlrPVRangeRemove RT_MANGLER(RTAvlrPVRangeRemove) +# define RTAvlrPVRemove RT_MANGLER(RTAvlrPVRemove) +# define RTAvlrPVRemoveBestFit RT_MANGLER(RTAvlrPVRemoveBestFit) +# define RTAvlrU64Destroy RT_MANGLER(RTAvlrU64Destroy) +# define RTAvlrU64DoWithAll RT_MANGLER(RTAvlrU64DoWithAll) +# define RTAvlrU64Get RT_MANGLER(RTAvlrU64Get) +# define RTAvlrU64GetBestFit RT_MANGLER(RTAvlrU64GetBestFit) +# define RTAvlrU64Insert RT_MANGLER(RTAvlrU64Insert) +# define RTAvlrU64RangeGet RT_MANGLER(RTAvlrU64RangeGet) +# define RTAvlrU64RangeRemove RT_MANGLER(RTAvlrU64RangeRemove) +# define RTAvlrU64Remove RT_MANGLER(RTAvlrU64Remove) +# define RTAvlrU64RemoveBestFit RT_MANGLER(RTAvlrU64RemoveBestFit) +# define RTAvlrUIntPtrDestroy RT_MANGLER(RTAvlrUIntPtrDestroy) +# define RTAvlrUIntPtrDoWithAll RT_MANGLER(RTAvlrUIntPtrDoWithAll) +# define RTAvlrUIntPtrGet RT_MANGLER(RTAvlrUIntPtrGet) +# define RTAvlrUIntPtrGetBestFit RT_MANGLER(RTAvlrUIntPtrGetBestFit) +# define RTAvlrUIntPtrGetLeft RT_MANGLER(RTAvlrUIntPtrGetLeft) +# define RTAvlrUIntPtrGetRight RT_MANGLER(RTAvlrUIntPtrGetRight) +# define RTAvlrUIntPtrGetRoot RT_MANGLER(RTAvlrUIntPtrGetRoot) +# define RTAvlrUIntPtrInsert RT_MANGLER(RTAvlrUIntPtrInsert) +# define RTAvlrUIntPtrRangeGet RT_MANGLER(RTAvlrUIntPtrRangeGet) +# define RTAvlrUIntPtrRangeRemove RT_MANGLER(RTAvlrUIntPtrRangeRemove) +# define RTAvlrUIntPtrRemove RT_MANGLER(RTAvlrUIntPtrRemove) +# define RTAvlU32Destroy RT_MANGLER(RTAvlU32Destroy) +# define RTAvlU32DoWithAll RT_MANGLER(RTAvlU32DoWithAll) +# define RTAvlU32Get RT_MANGLER(RTAvlU32Get) +# define RTAvlU32GetBestFit RT_MANGLER(RTAvlU32GetBestFit) +# define RTAvlU32Insert RT_MANGLER(RTAvlU32Insert) +# define RTAvlU32Remove RT_MANGLER(RTAvlU32Remove) +# define RTAvlU32RemoveBestFit RT_MANGLER(RTAvlU32RemoveBestFit) +# define RTAvlUIntPtrDestroy RT_MANGLER(RTAvlUIntPtrDestroy) +# define RTAvlUIntPtrDoWithAll RT_MANGLER(RTAvlUIntPtrDoWithAll) +# define RTAvlUIntPtrGet RT_MANGLER(RTAvlUIntPtrGet) +# define RTAvlUIntPtrGetBestFit RT_MANGLER(RTAvlUIntPtrGetBestFit) +# define RTAvlUIntPtrGetLeft RT_MANGLER(RTAvlUIntPtrGetLeft) +# define RTAvlUIntPtrGetRight RT_MANGLER(RTAvlUIntPtrGetRight) +# define RTAvlUIntPtrGetRoot RT_MANGLER(RTAvlUIntPtrGetRoot) +# define RTAvlUIntPtrInsert RT_MANGLER(RTAvlUIntPtrInsert) +# define RTAvlUIntPtrRemove RT_MANGLER(RTAvlUIntPtrRemove) +# define RTAvlULDestroy RT_MANGLER(RTAvlULDestroy) +# define RTAvlULDoWithAll RT_MANGLER(RTAvlULDoWithAll) +# define RTAvlULGet RT_MANGLER(RTAvlULGet) +# define RTAvlULGetBestFit RT_MANGLER(RTAvlULGetBestFit) +# define RTAvlULInsert RT_MANGLER(RTAvlULInsert) +# define RTAvlULRemove RT_MANGLER(RTAvlULRemove) +# define RTAvlULRemoveBestFit RT_MANGLER(RTAvlULRemoveBestFit) +# define RTBase64Decode RT_MANGLER(RTBase64Decode) +# define RTBase64DecodeEx RT_MANGLER(RTBase64DecodeEx) +# define RTBase64DecodedSize RT_MANGLER(RTBase64DecodedSize) +# define RTBase64DecodedSizeEx RT_MANGLER(RTBase64DecodedSizeEx) +# define RTBase64Encode RT_MANGLER(RTBase64Encode) +# define RTBase64EncodedLength RT_MANGLER(RTBase64EncodedLength) +# define RTBldCfgCompiler RT_MANGLER(RTBldCfgCompiler) +# define RTBldCfgRevision RT_MANGLER(RTBldCfgRevision) +# define RTBldCfgRevisionStr RT_MANGLER(RTBldCfgRevisionStr) +# define RTBldCfgTarget RT_MANGLER(RTBldCfgTarget) +# define RTBldCfgTargetArch RT_MANGLER(RTBldCfgTargetArch) +# define RTBldCfgTargetDotArch RT_MANGLER(RTBldCfgTargetDotArch) +# define RTBldCfgType RT_MANGLER(RTBldCfgType) +# define RTBldCfgVersion RT_MANGLER(RTBldCfgVersion) +# define RTBldCfgVersionBuild RT_MANGLER(RTBldCfgVersionBuild) +# define RTBldCfgVersionMajor RT_MANGLER(RTBldCfgVersionMajor) +# define RTBldCfgVersionMinor RT_MANGLER(RTBldCfgVersionMinor) +# define RTCdromOpen RT_MANGLER(RTCdromOpen) +# define RTCdromRetain RT_MANGLER(RTCdromRetain) +# define RTCdromRelease RT_MANGLER(RTCdromRelease) +# define RTCdromQueryMountPoint RT_MANGLER(RTCdromQueryMountPoint) +# define RTCdromUnmount RT_MANGLER(RTCdromUnmount) +# define RTCdromEject RT_MANGLER(RTCdromEject) +# define RTCdromLock RT_MANGLER(RTCdromLock) +# define RTCdromUnlock RT_MANGLER(RTCdromUnlock) +# define RTCdromCount RT_MANGLER(RTCdromCount) +# define RTCdromOrdinalToName RT_MANGLER(RTCdromOrdinalToName) +# define RTCdromOpenByOrdinal RT_MANGLER(RTCdromOpenByOrdinal) +# define RTCidrStrToIPv4 RT_MANGLER(RTCidrStrToIPv4) +# define RTCircBufAcquireReadBlock RT_MANGLER(RTCircBufAcquireReadBlock) +# define RTCircBufAcquireWriteBlock RT_MANGLER(RTCircBufAcquireWriteBlock) +# define RTCircBufCreate RT_MANGLER(RTCircBufCreate) +# define RTCircBufDestroy RT_MANGLER(RTCircBufDestroy) +# define RTCircBufFree RT_MANGLER(RTCircBufFree) +# define RTCircBufIsReading RT_MANGLER(RTCircBufIsReading) +# define RTCircBufIsWriting RT_MANGLER(RTCircBufIsWriting) +# define RTCircBufOffsetRead RT_MANGLER(RTCircBufOffsetRead) +# define RTCircBufOffsetWrite RT_MANGLER(RTCircBufOffsetWrite) +# define RTCircBufReleaseReadBlock RT_MANGLER(RTCircBufReleaseReadBlock) +# define RTCircBufReleaseWriteBlock RT_MANGLER(RTCircBufReleaseWriteBlock) +# define RTCircBufReset RT_MANGLER(RTCircBufReset) +# define RTCircBufSize RT_MANGLER(RTCircBufSize) +# define RTCircBufUsed RT_MANGLER(RTCircBufUsed) +# define RTCoreDumperDisable RT_MANGLER(RTCoreDumperDisable) /* solaris */ +# define RTCoreDumperSetup RT_MANGLER(RTCoreDumperSetup) /* solaris */ +# define RTCoreDumperTakeDump RT_MANGLER(RTCoreDumperTakeDump) /* solaris */ +# define RTCrc16Ccitt RT_MANGLER(RTCrc16Ccitt) +# define RTCrc16CcittProcess RT_MANGLER(RTCrc16CcittProcess) +# define RTCrc16CcittFinish RT_MANGLER(RTCrc16CcittFinish) +# define RTCrc16CcittStart RT_MANGLER(RTCrc16CcittStart) +# define RTCrc32 RT_MANGLER(RTCrc32) +# define RTCrc32Finish RT_MANGLER(RTCrc32Finish) +# define RTCrc32Process RT_MANGLER(RTCrc32Process) +# define RTCrc32Start RT_MANGLER(RTCrc32Start) +# define RTCrc32C RT_MANGLER(RTCrc32C) +# define RTCrc32CFinish RT_MANGLER(RTCrc32CFinish) +# define RTCrc32CProcess RT_MANGLER(RTCrc32CProcess) +# define RTCrc32CStart RT_MANGLER(RTCrc32CStart) +# define RTCrc64 RT_MANGLER(RTCrc64) +# define RTCrc64Finish RT_MANGLER(RTCrc64Finish) +# define RTCrc64Process RT_MANGLER(RTCrc64Process) +# define RTCrc64Start RT_MANGLER(RTCrc64Start) +# define RTCrcAdler32 RT_MANGLER(RTCrcAdler32) +# define RTCrcAdler32Finish RT_MANGLER(RTCrcAdler32Finish) +# define RTCrcAdler32Process RT_MANGLER(RTCrcAdler32Process) +# define RTCrcAdler32Start RT_MANGLER(RTCrcAdler32Start) +# define RTCritSectDelete RT_MANGLER(RTCritSectDelete) +# define RTCritSectEnter RT_MANGLER(RTCritSectEnter) +# define RTCritSectEnterDebug RT_MANGLER(RTCritSectEnterDebug) +# define RTCritSectEnterMultiple RT_MANGLER(RTCritSectEnterMultiple) +# define RTCritSectEnterMultipleDebug RT_MANGLER(RTCritSectEnterMultipleDebug) +# define RTCritSectInit RT_MANGLER(RTCritSectInit) +# define RTCritSectInitEx RT_MANGLER(RTCritSectInitEx) +# define RTCritSectLeave RT_MANGLER(RTCritSectLeave) +# define RTCritSectLeaveMultiple RT_MANGLER(RTCritSectLeaveMultiple) +# define RTCritSectSetSubClass RT_MANGLER(RTCritSectSetSubClass) +# define RTCritSectTryEnter RT_MANGLER(RTCritSectTryEnter) +# define RTCritSectTryEnterDebug RT_MANGLER(RTCritSectTryEnterDebug) +# define RTCritSectRwDelete RT_MANGLER(RTCritSectRwDelete) +# define RTCritSectRwEnterExcl RT_MANGLER(RTCritSectRwEnterExcl) +# define RTCritSectRwEnterExclDebug RT_MANGLER(RTCritSectRwEnterExclDebug) +# define RTCritSectRwEnterShared RT_MANGLER(RTCritSectRwEnterShared) +# define RTCritSectRwEnterSharedDebug RT_MANGLER(RTCritSectRwEnterSharedDebug) +# define RTCritSectRwGetReadCount RT_MANGLER(RTCritSectRwGetReadCount) +# define RTCritSectRwGetWriteRecursion RT_MANGLER(RTCritSectRwGetWriteRecursion) +# define RTCritSectRwGetWriterReadRecursion RT_MANGLER(RTCritSectRwGetWriterReadRecursion) +# define RTCritSectRwInit RT_MANGLER(RTCritSectRwInit) +# define RTCritSectRwInitEx RT_MANGLER(RTCritSectRwInitEx) +# define RTCritSectRwIsReadOwner RT_MANGLER(RTCritSectRwIsReadOwner) +# define RTCritSectRwIsWriteOwner RT_MANGLER(RTCritSectRwIsWriteOwner) +# define RTCritSectRwLeaveExcl RT_MANGLER(RTCritSectRwLeaveExcl) +# define RTCritSectRwLeaveShared RT_MANGLER(RTCritSectRwLeaveShared) +# define RTCritSectRwSetSubClass RT_MANGLER(RTCritSectRwSetSubClass) +# define RTCritSectRwTryEnterExcl RT_MANGLER(RTCritSectRwTryEnterExcl) +# define RTCritSectRwTryEnterExclDebug RT_MANGLER(RTCritSectRwTryEnterExclDebug) +# define RTCritSectRwTryEnterShared RT_MANGLER(RTCritSectRwTryEnterShared) +# define RTCritSectRwTryEnterSharedDebug RT_MANGLER(RTCritSectRwTryEnterSharedDebug) +# define RTDbgAsCreate RT_MANGLER(RTDbgAsCreate) +# define RTDbgAsCreateF RT_MANGLER(RTDbgAsCreateF) +# define RTDbgAsCreateV RT_MANGLER(RTDbgAsCreateV) +# define RTDbgAsFirstAddr RT_MANGLER(RTDbgAsFirstAddr) +# define RTDbgAsLastAddr RT_MANGLER(RTDbgAsLastAddr) +# define RTDbgAsLineAdd RT_MANGLER(RTDbgAsLineAdd) +# define RTDbgAsLineByAddr RT_MANGLER(RTDbgAsLineByAddr) +# define RTDbgAsLineByAddrA RT_MANGLER(RTDbgAsLineByAddrA) +# define RTDbgAsLockExcl RT_MANGLER(RTDbgAsLockExcl) +# define RTDbgAsModuleByAddr RT_MANGLER(RTDbgAsModuleByAddr) +# define RTDbgAsModuleByIndex RT_MANGLER(RTDbgAsModuleByIndex) +# define RTDbgAsModuleByName RT_MANGLER(RTDbgAsModuleByName) +# define RTDbgAsModuleCount RT_MANGLER(RTDbgAsModuleCount) +# define RTDbgAsModuleLink RT_MANGLER(RTDbgAsModuleLink) +# define RTDbgAsModuleLinkSeg RT_MANGLER(RTDbgAsModuleLinkSeg) +# define RTDbgAsModuleQueryMapByIndex RT_MANGLER(RTDbgAsModuleQueryMapByIndex) +# define RTDbgAsModuleUnlink RT_MANGLER(RTDbgAsModuleUnlink) +# define RTDbgAsModuleUnlinkByAddr RT_MANGLER(RTDbgAsModuleUnlinkByAddr) +# define RTDbgAsName RT_MANGLER(RTDbgAsName) +# define RTDbgAsRelease RT_MANGLER(RTDbgAsRelease) +# define RTDbgAsRetain RT_MANGLER(RTDbgAsRetain) +# define RTDbgAsSymbolAdd RT_MANGLER(RTDbgAsSymbolAdd) +# define RTDbgAsSymbolByAddr RT_MANGLER(RTDbgAsSymbolByAddr) +# define RTDbgAsSymbolByAddrA RT_MANGLER(RTDbgAsSymbolByAddrA) +# define RTDbgAsSymbolByName RT_MANGLER(RTDbgAsSymbolByName) +# define RTDbgAsSymbolByNameA RT_MANGLER(RTDbgAsSymbolByNameA) +# define RTDbgAsUnlockExcl RT_MANGLER(RTDbgAsUnlockExcl) +# define RTDbgCfgCreate RT_MANGLER(RTDbgCfgCreate) +# define RTDbgCfgRetain RT_MANGLER(RTDbgCfgRetain) +# define RTDbgCfgRelease RT_MANGLER(RTDbgCfgRelease) +# define RTDbgCfgChangeString RT_MANGLER(RTDbgCfgChangeString) +# define RTDbgCfgChangeUInt RT_MANGLER(RTDbgCfgChangeUInt) +# define RTDbgCfgQueryString RT_MANGLER(RTDbgCfgQueryString) +# define RTDbgCfgQueryUInt RT_MANGLER(RTDbgCfgQueryUInt) +# define RTDbgCfgOpenDbg RT_MANGLER(RTDbgCfgOpenDbg) +# define RTDbgCfgOpenDsymBundle RT_MANGLER(RTDbgCfgOpenDsymBundle) +# define RTDbgCfgOpenMachOImage RT_MANGLER(RTDbgCfgOpenMachOImage) +# define RTDbgCfgOpenDwo RT_MANGLER(RTDbgCfgOpenDwo) +# define RTDbgCfgOpenPdb70 RT_MANGLER(RTDbgCfgOpenPdb70) +# define RTDbgCfgOpenPdb20 RT_MANGLER(RTDbgCfgOpenPdb20) +# define RTDbgCfgOpenPeImage RT_MANGLER(RTDbgCfgOpenPeImage) +# define RTDbgCfgSetLogCallback RT_MANGLER(RTDbgCfgSetLogCallback) +# define RTDbgLineAlloc RT_MANGLER(RTDbgLineAlloc) +# define RTDbgLineDup RT_MANGLER(RTDbgLineDup) +# define RTDbgLineFree RT_MANGLER(RTDbgLineFree) +# define RTDbgModCreate RT_MANGLER(RTDbgModCreate) +# define RTDbgModCreateFromDbg RT_MANGLER(RTDbgModCreateFromDbg) +# define RTDbgModCreateFromDwo RT_MANGLER(RTDbgModCreateFromDwo) +# define RTDbgModCreateFromImage RT_MANGLER(RTDbgModCreateFromImage) +# define RTDbgModCreateFromMap RT_MANGLER(RTDbgModCreateFromMap) +# define RTDbgModCreateFromPdb RT_MANGLER(RTDbgModCreateFromPdb) +# define RTDbgModCreateFromPeImage RT_MANGLER(RTDbgModCreateFromPeImage) +# define RTDbgModCreateFromMachOImage RT_MANGLER(RTDbgModCreateFromMachOImage) +# define RTDbgModGetTag RT_MANGLER(RTDbgModGetTag) +# define RTDbgModImageSize RT_MANGLER(RTDbgModImageSize) +# define RTDbgModIsDeferred RT_MANGLER(RTDbgModIsDeferred) +# define RTDbgModIsExports RT_MANGLER(RTDbgModIsExports) +# define RTDbgModLineAdd RT_MANGLER(RTDbgModLineAdd) +# define RTDbgModLineByAddr RT_MANGLER(RTDbgModLineByAddr) +# define RTDbgModLineByAddrA RT_MANGLER(RTDbgModLineByAddrA) +# define RTDbgModLineByOrdinal RT_MANGLER(RTDbgModLineByOrdinal) +# define RTDbgModLineByOrdinalA RT_MANGLER(RTDbgModLineByOrdinalA) +# define RTDbgModLineCount RT_MANGLER(RTDbgModLineCount) +# define RTDbgModName RT_MANGLER(RTDbgModName) +# define RTDbgModDebugFile RT_MANGLER(RTDbgModDebugFile) +# define RTDbgModImageFile RT_MANGLER(RTDbgModImageFile) +# define RTDbgModImageFileUsed RT_MANGLER(RTDbgModImageFileUsed) +# define RTDbgModRelease RT_MANGLER(RTDbgModRelease) +# define RTDbgModRemoveAll RT_MANGLER(RTDbgModRemoveAll) +# define RTDbgModRetain RT_MANGLER(RTDbgModRetain) +# define RTDbgModRvaToSegOff RT_MANGLER(RTDbgModRvaToSegOff) +# define RTDbgModSegmentAdd RT_MANGLER(RTDbgModSegmentAdd) +# define RTDbgModSegmentByIndex RT_MANGLER(RTDbgModSegmentByIndex) +# define RTDbgModSegmentCount RT_MANGLER(RTDbgModSegmentCount) +# define RTDbgModSegmentRva RT_MANGLER(RTDbgModSegmentRva) +# define RTDbgModSegmentSize RT_MANGLER(RTDbgModSegmentSize) +# define RTDbgModSetTag RT_MANGLER(RTDbgModSetTag) +# define RTDbgModSymbolAdd RT_MANGLER(RTDbgModSymbolAdd) +# define RTDbgModSymbolByAddr RT_MANGLER(RTDbgModSymbolByAddr) +# define RTDbgModSymbolByAddrA RT_MANGLER(RTDbgModSymbolByAddrA) +# define RTDbgModSymbolByName RT_MANGLER(RTDbgModSymbolByName) +# define RTDbgModSymbolByNameA RT_MANGLER(RTDbgModSymbolByNameA) +# define RTDbgModSymbolByOrdinal RT_MANGLER(RTDbgModSymbolByOrdinal) +# define RTDbgModSymbolByOrdinalA RT_MANGLER(RTDbgModSymbolByOrdinalA) +# define RTDbgModSymbolCount RT_MANGLER(RTDbgModSymbolCount) +# define RTDbgSymbolAlloc RT_MANGLER(RTDbgSymbolAlloc) +# define RTDbgSymbolDup RT_MANGLER(RTDbgSymbolDup) +# define RTDbgSymbolFree RT_MANGLER(RTDbgSymbolFree) +# define RTDirClose RT_MANGLER(RTDirClose) +# define RTDirCreate RT_MANGLER(RTDirCreate) +# define RTDirCreateFullPath RT_MANGLER(RTDirCreateFullPath) +# define RTDirCreateTemp RT_MANGLER(RTDirCreateTemp) +# define RTDirCreateTempSecure RT_MANGLER(RTDirCreateTempSecure) +# define RTDirCreateUniqueNumbered RT_MANGLER(RTDirCreateUniqueNumbered) +# define RTDirEntryIsStdDotLink RT_MANGLER(RTDirEntryIsStdDotLink) +# define RTDirEntryExIsStdDotLink RT_MANGLER(RTDirEntryExIsStdDotLink) +# define RTDirExists RT_MANGLER(RTDirExists) +# define RTDirFlush RT_MANGLER(RTDirFlush) +# define RTDirFlushParent RT_MANGLER(RTDirFlushParent) +# define RTDirIsValid RT_MANGLER(RTDirIsValid) +# define RTDirOpen RT_MANGLER(RTDirOpen) +# define RTDirOpenFiltered RT_MANGLER(RTDirOpenFiltered) +# define RTDirQueryInfo RT_MANGLER(RTDirQueryInfo) +# define RTDirQueryUnknownType RT_MANGLER(RTDirQueryUnknownType) +# define RTDirQueryUnknownTypeEx RT_MANGLER(RTDirQueryUnknownTypeEx) +# define RTDirRead RT_MANGLER(RTDirRead) +# define RTDirReadEx RT_MANGLER(RTDirReadEx) +# define RTDirReadExA RT_MANGLER(RTDirReadExA) +# define RTDirReadExAFree RT_MANGLER(RTDirReadExAFree) +# define RTDirRemove RT_MANGLER(RTDirRemove) +# define RTDirRemoveRecursive RT_MANGLER(RTDirRemoveRecursive) +# define RTDirRename RT_MANGLER(RTDirRename) +# define RTDirSetTimes RT_MANGLER(RTDirSetTimes) +# define RTDirRelFileOpen RT_MANGLER(RTDirRelFileOpen) +# define RTDirRelDirOpen RT_MANGLER(RTDirRelDirOpen) +# define RTDirRelDirOpenFiltered RT_MANGLER(RTDirRelDirOpenFiltered) +# define RTDirRelDirCreate RT_MANGLER(RTDirRelDirCreate) +# define RTDirRelDirRemove RT_MANGLER(RTDirRelDirRemove) +# define RTDirRelPathQueryInfo RT_MANGLER(RTDirRelPathQueryInfo) +# define RTDirRelPathSetMode RT_MANGLER(RTDirRelPathSetMode) +# define RTDirRelPathSetTimes RT_MANGLER(RTDirRelPathSetTimes) +# define RTDirRelPathSetOwner RT_MANGLER(RTDirRelPathSetOwner) +# define RTDirRelPathRename RT_MANGLER(RTDirRelPathRename) +# define RTDirRelPathUnlink RT_MANGLER(RTDirRelPathUnlink) +# define RTDirRelSymlinkCreate RT_MANGLER(RTDirRelSymlinkCreate) +# define RTDirRelSymlinkRead RT_MANGLER(RTDirRelSymlinkRead) +# define RTVfsDirOpenDir RT_MANGLER(RTVfsDirOpenDir) +# define RTVfsDirFromRTDir RT_MANGLER(RTVfsDirFromRTDir) +# define RTVfsDirOpenNormal RT_MANGLER(RTVfsDirOpenNormal) +# define RTDvmCreate RT_MANGLER(RTDvmCreate) +# define RTDvmCreateFromVfsFile RT_MANGLER(RTDvmCreateFromVfsFile) +# define RTDvmRetain RT_MANGLER(RTDvmRetain) +# define RTDvmRelease RT_MANGLER(RTDvmRelease) +# define RTDvmMapOpen RT_MANGLER(RTDvmMapOpen) +# define RTDvmMapInitialize RT_MANGLER(RTDvmMapInitialize) +# define RTDvmMapGetFormatName RT_MANGLER(RTDvmMapGetFormatName) +# define RTDvmMapGetFormatType RT_MANGLER(RTDvmMapGetFormatType) +# define RTDvmMapGetValidVolumes RT_MANGLER(RTDvmMapGetValidVolumes) +# define RTDvmMapGetMaxVolumes RT_MANGLER(RTDvmMapGetMaxVolumes) +# define RTDvmMapQueryBlockStatus RT_MANGLER(RTDvmMapQueryBlockStatus) +# define RTDvmMapQueryFirstVolume RT_MANGLER(RTDvmMapQueryFirstVolume) +# define RTDvmMapQueryNextVolume RT_MANGLER(RTDvmMapQueryNextVolume) +# define RTDvmVolumeRetain RT_MANGLER(RTDvmVolumeRetain) +# define RTDvmVolumeRelease RT_MANGLER(RTDvmVolumeRelease) +# define RTDvmVolumeGetSize RT_MANGLER(RTDvmVolumeGetSize) +# define RTDvmVolumeQueryName RT_MANGLER(RTDvmVolumeQueryName) +# define RTDvmVolumeGetType RT_MANGLER(RTDvmVolumeGetType) +# define RTDvmVolumeGetFlags RT_MANGLER(RTDvmVolumeGetFlags) +# define RTDvmVolumeRead RT_MANGLER(RTDvmVolumeRead) +# define RTDvmVolumeWrite RT_MANGLER(RTDvmVolumeWrite) +# define RTDvmVolumeSetQueryBlockStatusCallback RT_MANGLER(RTDvmVolumeSetQueryBlockStatusCallback) +# define RTDvmVolumeTypeGetDescr RT_MANGLER(RTDvmVolumeTypeGetDescr) +# define RTDvmVolumeCreateVfsFile RT_MANGLER(RTDvmVolumeCreateVfsFile) +# define RTEnvApplyChanges RT_MANGLER(RTEnvApplyChanges) +# define RTEnvClone RT_MANGLER(RTEnvClone) +# define RTEnvCloneUtf16Block RT_MANGLER(RTEnvCloneUtf16Block) +# define RTEnvCountEx RT_MANGLER(RTEnvCountEx) +# define RTEnvCreate RT_MANGLER(RTEnvCreate) +# define RTEnvCreateChangeRecord RT_MANGLER(RTEnvCreateChangeRecord) +# define RTEnvDestroy RT_MANGLER(RTEnvDestroy) +# define RTEnvDupEx RT_MANGLER(RTEnvDupEx) +# define RTEnvExist RT_MANGLER(RTEnvExist) +# define RTEnvExistsBad RT_MANGLER(RTEnvExistsBad) +# define RTEnvExistsUtf8 RT_MANGLER(RTEnvExistsUtf8) +# define RTEnvExistEx RT_MANGLER(RTEnvExistEx) +# define RTEnvFreeUtf8Block RT_MANGLER(RTEnvFreeUtf8Block) +# define RTEnvFreeUtf16Block RT_MANGLER(RTEnvFreeUtf16Block) +# define RTEnvGet RT_MANGLER(RTEnvGet) +# define RTEnvGetBad RT_MANGLER(RTEnvGetBad) +# define RTEnvGetByIndexEx RT_MANGLER(RTEnvGetByIndexEx) +# define RTEnvGetByIndexRawEx RT_MANGLER(RTEnvGetByIndexRawEx) +# define RTEnvGetUtf8 RT_MANGLER(RTEnvGetUtf8) +# define RTEnvGetEx RT_MANGLER(RTEnvGetEx) +# define RTEnvGetExecEnvP RT_MANGLER(RTEnvGetExecEnvP) +# define RTEnvIsChangeRecord RT_MANGLER(RTEnvIsChangeRecord) +# define RTEnvPut RT_MANGLER(RTEnvPut) +# define RTEnvPutBad RT_MANGLER(RTEnvPutBad) +# define RTEnvPutUtf8 RT_MANGLER(RTEnvPutUtf8) +# define RTEnvPutEx RT_MANGLER(RTEnvPutEx) +# define RTEnvQueryUtf16Block RT_MANGLER(RTEnvQueryUtf16Block) +# define RTEnvQueryUtf8Block RT_MANGLER(RTEnvQueryUtf8Block) +# define RTEnvReset RT_MANGLER(RTEnvReset) +# define RTEnvSet RT_MANGLER(RTEnvSet) +# define RTEnvSetBad RT_MANGLER(RTEnvSetBad) +# define RTEnvSetUtf8 RT_MANGLER(RTEnvSetUtf8) +# define RTEnvSetEx RT_MANGLER(RTEnvSetEx) +# define RTEnvUnset RT_MANGLER(RTEnvUnset) +# define RTEnvUnsetBad RT_MANGLER(RTEnvUnsetBad) +# define RTEnvUnsetUtf8 RT_MANGLER(RTEnvUnsetUtf8) +# define RTEnvUnsetEx RT_MANGLER(RTEnvUnsetEx) +# define RTErrCOMGet RT_MANGLER(RTErrCOMGet) +# define RTErrConvertFromErrno RT_MANGLER(RTErrConvertFromErrno) +# define RTErrConvertToErrno RT_MANGLER(RTErrConvertToErrno) +# define RTErrGet RT_MANGLER(RTErrGet) +# define RTErrInfoAlloc RT_MANGLER(RTErrInfoAlloc) +# define RTErrInfoAllocEx RT_MANGLER(RTErrInfoAllocEx) +# define RTErrInfoFree RT_MANGLER(RTErrInfoFree) +# define RTErrInfoSet RT_MANGLER(RTErrInfoSet) +# define RTErrInfoSetF RT_MANGLER(RTErrInfoSetF) +# define RTErrInfoSetV RT_MANGLER(RTErrInfoSetV) +# define RTErrInfoLogAndSet RT_MANGLER(RTErrInfoLogAndSet) +# define RTErrInfoLogAndSetF RT_MANGLER(RTErrInfoLogAndSetF) +# define RTErrInfoLogAndSetV RT_MANGLER(RTErrInfoLogAndSetV) +# define RTErrInfoLogAndAdd RT_MANGLER(RTErrInfoLogAndAdd) +# define RTErrInfoLogAndAddF RT_MANGLER(RTErrInfoLogAndAddF) +# define RTErrInfoLogAndAddV RT_MANGLER(RTErrInfoLogAndAddV) +# define RTErrVarsAreEqual RT_MANGLER(RTErrVarsAreEqual) +# define RTErrVarsHaveChanged RT_MANGLER(RTErrVarsHaveChanged) +# define RTErrVarsRestore RT_MANGLER(RTErrVarsRestore) +# define RTErrVarsSave RT_MANGLER(RTErrVarsSave) +# define RTFileAioCtxAssociateWithFile RT_MANGLER(RTFileAioCtxAssociateWithFile) +# define RTFileAioCtxCreate RT_MANGLER(RTFileAioCtxCreate) +# define RTFileAioCtxDestroy RT_MANGLER(RTFileAioCtxDestroy) +# define RTFileAioCtxGetMaxReqCount RT_MANGLER(RTFileAioCtxGetMaxReqCount) +# define RTFileAioCtxSubmit RT_MANGLER(RTFileAioCtxSubmit) +# define RTFileAioCtxWait RT_MANGLER(RTFileAioCtxWait) +# define RTFileAioCtxWakeup RT_MANGLER(RTFileAioCtxWakeup) +# define RTFileAioGetLimits RT_MANGLER(RTFileAioGetLimits) +# define RTFileAioReqCancel RT_MANGLER(RTFileAioReqCancel) +# define RTFileAioReqCreate RT_MANGLER(RTFileAioReqCreate) +# define RTFileAioReqDestroy RT_MANGLER(RTFileAioReqDestroy) +# define RTFileAioReqGetRC RT_MANGLER(RTFileAioReqGetRC) +# define RTFileAioReqGetUser RT_MANGLER(RTFileAioReqGetUser) +# define RTFileAioReqPrepareFlush RT_MANGLER(RTFileAioReqPrepareFlush) +# define RTFileAioReqPrepareRead RT_MANGLER(RTFileAioReqPrepareRead) +# define RTFileAioReqPrepareWrite RT_MANGLER(RTFileAioReqPrepareWrite) +# define RTFileChangeLock RT_MANGLER(RTFileChangeLock) +# define RTFileClose RT_MANGLER(RTFileClose) +# define RTFileCompare RT_MANGLER(RTFileCompare) +# define RTFileCompareByHandles RT_MANGLER(RTFileCompareByHandles) +# define RTFileCompareByHandlesEx RT_MANGLER(RTFileCompareByHandlesEx) +# define RTFileCompareEx RT_MANGLER(RTFileCompareEx) +# define RTFileCopy RT_MANGLER(RTFileCopy) +# define RTFileCopyByHandles RT_MANGLER(RTFileCopyByHandles) +# define RTFileCopyByHandlesEx RT_MANGLER(RTFileCopyByHandlesEx) +# define RTFileCopyEx RT_MANGLER(RTFileCopyEx) +# define RTFileCreateTemp RT_MANGLER(RTFileCreateTemp) +# define RTFileCreateTempSecure RT_MANGLER(RTFileCreateTempSecure) +# define RTFileDelete RT_MANGLER(RTFileDelete) +# define RTFileExists RT_MANGLER(RTFileExists) +# define RTFileFlush RT_MANGLER(RTFileFlush) +# define RTFileFromNative RT_MANGLER(RTFileFromNative) +# define RTFileGetMaxSize RT_MANGLER(RTFileGetMaxSize) +# define RTFileGetMaxSizeEx RT_MANGLER(RTFileGetMaxSizeEx) +# define RTFileGetSize RT_MANGLER(RTFileGetSize) +# define RTFileIoCtl RT_MANGLER(RTFileIoCtl) +# define RTFileIsValid RT_MANGLER(RTFileIsValid) +# define RTFileLock RT_MANGLER(RTFileLock) +# define RTFileModeToFlags RT_MANGLER(RTFileModeToFlags) +# define RTFileModeToFlagsEx RT_MANGLER(RTFileModeToFlagsEx) +# define RTFileMove RT_MANGLER(RTFileMove) +# define RTFileOpen RT_MANGLER(RTFileOpen) +# define RTFileOpenBitBucket RT_MANGLER(RTFileOpenBitBucket) +# define RTFileOpenF RT_MANGLER(RTFileOpenF) +# define RTFileOpenV RT_MANGLER(RTFileOpenV) +# define RTFileOpenTemp RT_MANGLER(RTFileOpenTemp) +# define RTFileQueryFsSizes RT_MANGLER(RTFileQueryFsSizes) +# define RTFileQueryInfo RT_MANGLER(RTFileQueryInfo) +# define RTFileQuerySize RT_MANGLER(RTFileQuerySize) +# define RTFileRead RT_MANGLER(RTFileRead) +# define RTFileReadAll RT_MANGLER(RTFileReadAll) +# define RTFileReadAllByHandle RT_MANGLER(RTFileReadAllByHandle) +# define RTFileReadAllByHandleEx RT_MANGLER(RTFileReadAllByHandleEx) +# define RTFileReadAllEx RT_MANGLER(RTFileReadAllEx) +# define RTFileReadAllFree RT_MANGLER(RTFileReadAllFree) +# define RTFileReadAt RT_MANGLER(RTFileReadAt) +# define RTFileRename RT_MANGLER(RTFileRename) +# define RTFileSeek RT_MANGLER(RTFileSeek) +# define RTFileSetAllocationSize RT_MANGLER(RTFileSetAllocationSize) +# define RTFileSetForceFlags RT_MANGLER(RTFileSetForceFlags) +# define RTFileSetMode RT_MANGLER(RTFileSetMode) +# define RTFileSetOwner RT_MANGLER(RTFileSetOwner) +# define RTFileSetSize RT_MANGLER(RTFileSetSize) +# define RTFileSetTimes RT_MANGLER(RTFileSetTimes) +# define RTFileSgReadAt RT_MANGLER(RTFileSgReadAt) +# define RTFileSgWriteAt RT_MANGLER(RTFileSgWriteAt) +# define RTFileTell RT_MANGLER(RTFileTell) +# define RTFileToNative RT_MANGLER(RTFileToNative) +# define RTFileUnlock RT_MANGLER(RTFileUnlock) +# define RTFileWrite RT_MANGLER(RTFileWrite) +# define RTFileWriteAt RT_MANGLER(RTFileWriteAt) +# define RTFilesystemVfsFromFile RT_MANGLER(RTFilesystemVfsFromFile) +# define RTFsIsCaseSensitive RT_MANGLER(RTFsIsCaseSensitive) +# define RTFsQueryProperties RT_MANGLER(RTFsQueryProperties) +# define RTFsQuerySerial RT_MANGLER(RTFsQuerySerial) +# define RTFsQuerySizes RT_MANGLER(RTFsQuerySizes) +# define RTFsQueryType RT_MANGLER(RTFsQueryType) +# define RTFsTypeName RT_MANGLER(RTFsTypeName) +# define RTFsFatVolOpen RT_MANGLER(RTFsFatVolOpen) +# define RTFsFatVolFormat RT_MANGLER(RTFsFatVolFormat) +# define RTFsFatVolFormat144 RT_MANGLER(RTFsFatVolFormat144) +# define RTFsIso9660VolOpen RT_MANGLER(RTFsIso9660VolOpen) +# define RTFsIsoMakerCreate RT_MANGLER(RTFsIsoMakerCreate) +# define RTFsIsoMakerRetain RT_MANGLER(RTFsIsoMakerRetain) +# define RTFsIsoMakerRelease RT_MANGLER(RTFsIsoMakerRelease) +# define RTFsIsoMakerBootCatSetFile RT_MANGLER(RTFsIsoMakerBootCatSetFile) +# define RTFsIsoMakerBootCatSetValidationEntry RT_MANGLER(RTFsIsoMakerBootCatSetValidationEntry) +# define RTFsIsoMakerBootCatSetSectionEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionEntry) +# define RTFsIsoMakerBootCatSetSectionHeaderEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionHeaderEntry) +# define RTFsIsoMakerQueryObjIdxForBootCatalog RT_MANGLER(RTFsIsoMakerQueryObjIdxForBootCatalog) +# define RTFsIsoMakerGetIso9660Level RT_MANGLER(RTFsIsoMakerGetIso9660Level) +# define RTFsIsoMakerSetImagePadding RT_MANGLER(RTFsIsoMakerSetImagePadding) +# define RTFsIsoMakerSetIso9660Level RT_MANGLER(RTFsIsoMakerSetIso9660Level) +# define RTFsIsoMakerSetJolietUcs2Level RT_MANGLER(RTFsIsoMakerSetJolietUcs2Level) +# define RTFsIsoMakerSetRockRidgeLevel RT_MANGLER(RTFsIsoMakerSetRockRidgeLevel) +# define RTFsIsoMakerSetJolietRockRidgeLevel RT_MANGLER(RTFsIsoMakerSetJolietRockRidgeLevel) +# define RTFsIsoMakerSetAttribInheritStyle RT_MANGLER(RTFsIsoMakerSetAttribInheritStyle) +# define RTFsIsoMakerSetDefaultDirMode RT_MANGLER(RTFsIsoMakerSetDefaultDirMode) +# define RTFsIsoMakerSetDefaultFileMode RT_MANGLER(RTFsIsoMakerSetDefaultFileMode) +# define RTFsIsoMakerSetForcedDirMode RT_MANGLER(RTFsIsoMakerSetForcedDirMode) +# define RTFsIsoMakerSetForcedFileMode RT_MANGLER(RTFsIsoMakerSetForcedFileMode) +# define RTFsIsoMakerSetPathGroupId RT_MANGLER(RTFsIsoMakerSetPathGroupId) +# define RTFsIsoMakerSetPathMode RT_MANGLER(RTFsIsoMakerSetPathMode) +# define RTFsIsoMakerSetPathOwnerId RT_MANGLER(RTFsIsoMakerSetPathOwnerId) +# define RTFsIsoMakerSetSysAreaContent RT_MANGLER(RTFsIsoMakerSetSysAreaContent) +# define RTFsIsoMakerSetStringProp RT_MANGLER(RTFsIsoMakerSetStringProp) +# define RTFsIsoMakerGetObjIdxForPath RT_MANGLER(RTFsIsoMakerGetObjIdxForPath) +# define RTFsIsoMakerObjEnableBootInfoTablePatching RT_MANGLER(RTFsIsoMakerObjEnableBootInfoTablePatching) +# define RTFsIsoMakerObjQueryDataSize RT_MANGLER(RTFsIsoMakerObjQueryDataSize) +# define RTFsIsoMakerObjRemove RT_MANGLER(RTFsIsoMakerObjRemove) +# define RTFsIsoMakerObjSetPath RT_MANGLER(RTFsIsoMakerObjSetPath) +# define RTFsIsoMakerObjSetNameAndParent RT_MANGLER(RTFsIsoMakerObjSetNameAndParent) +# define RTFsIsoMakerObjSetRockName RT_MANGLER(RTFsIsoMakerObjSetRockName) +# define RTFsIsoMakerAddUnnamedDir RT_MANGLER(RTFsIsoMakerAddUnnamedDir) +# define RTFsIsoMakerAddDir RT_MANGLER(RTFsIsoMakerAddDir) +# define RTFsIsoMakerAddFileWithSrcPath RT_MANGLER(RTFsIsoMakerAddFileWithSrcPath) +# define RTFsIsoMakerAddFileWithVfsFile RT_MANGLER(RTFsIsoMakerAddFileWithVfsFile) +# define RTFsIsoMakerAddUnnamedFileWithSrcPath RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithSrcPath) +# define RTFsIsoMakerAddUnnamedFileWithVfsFile RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithVfsFile) +# define RTFsIsoMakerAddUnnamedFileWithCommonSrc RT_MANGLER(RTFsIsoMakerAddUnnamedFileWithCommonSrc) +# define RTFsIsoMakerAddSymlink RT_MANGLER(RTFsIsoMakerAddSymlink) +# define RTFsIsoMakerAddUnnamedSymlink RT_MANGLER(RTFsIsoMakerAddUnnamedSymlink) +# define RTFsIsoMakerAddCommonSourceFile RT_MANGLER(RTFsIsoMakerAddCommonSourceFile) +# define RTFsIsoMakerImport RT_MANGLER(RTFsIsoMakerImport) +# define RTFsIsoMakerFinalize RT_MANGLER(RTFsIsoMakerFinalize) +# define RTFsIsoMakerCreateVfsOutputFile RT_MANGLER(RTFsIsoMakerCreateVfsOutputFile) +# define RTFsIsoMakerCmd RT_MANGLER(RTFsIsoMakerCmd) +# define RTFsIsoMakerCmdEx RT_MANGLER(RTFsIsoMakerCmdEx) +# define RTGetOpt RT_MANGLER(RTGetOpt) +# define RTGetOptArgvFree RT_MANGLER(RTGetOptArgvFree) +# define RTGetOptArgvFreeEx RT_MANGLER(RTGetOptArgvFreeEx) +# define RTGetOptArgvFromString RT_MANGLER(RTGetOptArgvFromString) +# define RTGetOptArgvToString RT_MANGLER(RTGetOptArgvToString) +# define RTGetOptArgvToUtf16String RT_MANGLER(RTGetOptArgvToUtf16String) +# define RTGetOptFetchValue RT_MANGLER(RTGetOptFetchValue) +# define RTGetOptInit RT_MANGLER(RTGetOptInit) +# define RTGetOptNonOptionArrayPtr RT_MANGLER(RTGetOptNonOptionArrayPtr) +# define RTGetOptFormatError RT_MANGLER(RTGetOptFormatError) +# define RTGetOptPrintError RT_MANGLER(RTGetOptPrintError) +# define RTHandleClose RT_MANGLER(RTHandleClose) +# define RTHandleGetStandard RT_MANGLER(RTHandleGetStandard) +# define RTHandleTableAlloc RT_MANGLER(RTHandleTableAlloc) +# define RTHandleTableAllocWithCtx RT_MANGLER(RTHandleTableAllocWithCtx) +# define RTHandleTableCreate RT_MANGLER(RTHandleTableCreate) +# define RTHandleTableCreateEx RT_MANGLER(RTHandleTableCreateEx) +# define RTHandleTableDestroy RT_MANGLER(RTHandleTableDestroy) +# define RTHandleTableFree RT_MANGLER(RTHandleTableFree) +# define RTHandleTableFreeWithCtx RT_MANGLER(RTHandleTableFreeWithCtx) +# define RTHandleTableLookup RT_MANGLER(RTHandleTableLookup) +# define RTHandleTableLookupWithCtx RT_MANGLER(RTHandleTableLookupWithCtx) +# define RTHeapOffsetAlloc RT_MANGLER(RTHeapOffsetAlloc) +# define RTHeapOffsetAllocZ RT_MANGLER(RTHeapOffsetAllocZ) +# define RTHeapOffsetDump RT_MANGLER(RTHeapOffsetDump) +# define RTHeapOffsetFree RT_MANGLER(RTHeapOffsetFree) +# define RTHeapOffsetGetFreeSize RT_MANGLER(RTHeapOffsetGetFreeSize) +# define RTHeapOffsetGetHeapSize RT_MANGLER(RTHeapOffsetGetHeapSize) +# define RTHeapOffsetInit RT_MANGLER(RTHeapOffsetInit) +# define RTHeapOffsetSize RT_MANGLER(RTHeapOffsetSize) +# define RTHeapSimpleAlloc RT_MANGLER(RTHeapSimpleAlloc) +# define RTHeapSimpleAllocZ RT_MANGLER(RTHeapSimpleAllocZ) +# define RTHeapSimpleDump RT_MANGLER(RTHeapSimpleDump) +# define RTHeapSimpleFree RT_MANGLER(RTHeapSimpleFree) +# define RTHeapSimpleGetFreeSize RT_MANGLER(RTHeapSimpleGetFreeSize) +# define RTHeapSimpleGetHeapSize RT_MANGLER(RTHeapSimpleGetHeapSize) +# define RTHeapSimpleInit RT_MANGLER(RTHeapSimpleInit) +# define RTHeapSimpleRelocate RT_MANGLER(RTHeapSimpleRelocate) +# define RTHeapSimpleSize RT_MANGLER(RTHeapSimpleSize) +# define RTHttpGetFile RT_MANGLER(RTHttpGetFile) +# define RTHttpUseSystemProxySettings RT_MANGLER(RTHttpUseSystemProxySettings) +# define RTIniFileCreateFromVfsFile RT_MANGLER(RTIniFileCreateFromVfsFile) +# define RTIniFileRetain RT_MANGLER(RTIniFileRetain) +# define RTIniFileRelease RT_MANGLER(RTIniFileRelease) +# define RTIniFileQueryPair RT_MANGLER(RTIniFileQueryPair) +# define RTIniFileQueryValue RT_MANGLER(RTIniFileQueryValue) +# define RTIsoFsClose RT_MANGLER(RTIsoFsClose) +# define RTIsoFsExtractFile RT_MANGLER(RTIsoFsExtractFile) +# define RTIsoFsGetFileInfo RT_MANGLER(RTIsoFsGetFileInfo) +# define RTIsoFsOpen RT_MANGLER(RTIsoFsOpen) +# define RTJsonIteratorBegin RT_MANGLER(RTJsonIteratorBegin) +# define RTJsonIteratorFree RT_MANGLER(RTJsonIteratorFree) +# define RTJsonIteratorNext RT_MANGLER(RTJsonIteratorNext) +# define RTJsonIteratorQueryValue RT_MANGLER(RTJsonIteratorQueryValue) +# define RTJsonParseFromBuf RT_MANGLER(RTJsonParseFromBuf) +# define RTJsonParseFromFile RT_MANGLER(RTJsonParseFromFile) +# define RTJsonParseFromString RT_MANGLER(RTJsonParseFromString) +# define RTJsonValueGetArraySize RT_MANGLER(RTJsonValueGetArraySize) +# define RTJsonValueGetString RT_MANGLER(RTJsonValueGetString) +# define RTJsonValueGetType RT_MANGLER(RTJsonValueGetType) +# define RTJsonValueQueryArraySizeEx RT_MANGLER(RTJsonValueQueryArraySize) +# define RTJsonValueQueryBooleanByName RT_MANGLER(RTJsonValueQueryBooleanByName) +# define RTJsonValueQueryByIndex RT_MANGLER(RTJsonValueQueryByIndex) +# define RTJsonValueQueryByName RT_MANGLER(RTJsonValueQueryByName) +# define RTJsonValueQueryInteger RT_MANGLER(RTJsonValueQueryInteger) +# define RTJsonValueQueryIntegerByName RT_MANGLER(RTJsonValueQueryIntegerByName) +# define RTJsonValueQueryString RT_MANGLER(RTJsonValueQueryString) +# define RTJsonValueQueryStringByName RT_MANGLER(RTJsonValueQueryStringByName) +# define RTJsonValueRelease RT_MANGLER(RTJsonValueRelease) +# define RTJsonValueRetain RT_MANGLER(RTJsonValueRetain) +# define RTKrnlModInfoGetFilePath RT_MANGLER(RTKrnlModInfoGetFilePath) +# define RTKrnlModInfoGetLoadAddr RT_MANGLER(RTKrnlModInfoGetLoadAddr) +# define RTKrnlModInfoGetName RT_MANGLER(RTKrnlModInfoGetName) +# define RTKrnlModInfoGetRefCnt RT_MANGLER(RTKrnlModInfoGetRefCnt) +# define RTKrnlModInfoGetSize RT_MANGLER(RTKrnlModInfoGetSize) +# define RTKrnlModInfoQueryRefModInfo RT_MANGLER(RTKrnlModInfoQueryRefModInfo) +# define RTKrnlModInfoRetain RT_MANGLER(RTKrnlModInfoRetain) +# define RTKrnlModInfoRelease RT_MANGLER(RTKrnlModInfoRelease) +# define RTKrnlModLoadedGetCount RT_MANGLER(RTKrnlModLoadedGetCount) +# define RTKrnlModLoadedQueryInfo RT_MANGLER(RTKrnlModLoadedQueryInfo) +# define RTKrnlModLoadedQueryInfoAll RT_MANGLER(RTKrnlModLoadedQueryInfoAll) +# define RTKrnlModQueryLoaded RT_MANGLER(RTKrnlModQueryLoaded) +# define RTLatin1CalcUtf16Len RT_MANGLER(RTLatin1CalcUtf16Len) +# define RTLatin1CalcUtf16LenEx RT_MANGLER(RTLatin1CalcUtf16LenEx) +# define RTLatin1CalcUtf8Len RT_MANGLER(RTLatin1CalcUtf8Len) +# define RTLatin1CalcUtf8LenEx RT_MANGLER(RTLatin1CalcUtf8LenEx) +# define RTLatin1ToUtf16ExTag RT_MANGLER(RTLatin1ToUtf16ExTag) +# define RTLatin1ToUtf16Tag RT_MANGLER(RTLatin1ToUtf16Tag) +# define RTLatin1ToUtf8ExTag RT_MANGLER(RTLatin1ToUtf8ExTag) +# define RTLatin1ToUtf8Tag RT_MANGLER(RTLatin1ToUtf8Tag) +# define RTLdrClose RT_MANGLER(RTLdrClose) +# define RTLdrEnumDbgInfo RT_MANGLER(RTLdrEnumDbgInfo) +# define RTLdrEnumSegments RT_MANGLER(RTLdrEnumSegments) +# define RTLdrEnumSymbols RT_MANGLER(RTLdrEnumSymbols) +# define RTLdrGetArch RT_MANGLER(RTLdrGetArch) +# define RTLdrGetBits RT_MANGLER(RTLdrGetBits) +# define RTLdrGetEndian RT_MANGLER(RTLdrGetEndian) +# define RTLdrGetFormat RT_MANGLER(RTLdrGetFormat) +# define RTLdrGetFunction RT_MANGLER(RTLdrGetFunction) +# define RTLdrGetNativeHandle RT_MANGLER(RTLdrGetNativeHandle) +# define RTLdrGetSuff RT_MANGLER(RTLdrGetSuff) +# define RTLdrGetSymbol RT_MANGLER(RTLdrGetSymbol) +# define RTLdrGetSymbolEx RT_MANGLER(RTLdrGetSymbolEx) +# define RTLdrGetSystemSymbol RT_MANGLER(RTLdrGetSystemSymbol) +# define RTLdrGetType RT_MANGLER(RTLdrGetType) +# define RTLdrIsLoadable RT_MANGLER(RTLdrIsLoadable) +# define RTLdrLinkAddressToRva RT_MANGLER(RTLdrLinkAddressToRva) +# define RTLdrLinkAddressToSegOffset RT_MANGLER(RTLdrLinkAddressToSegOffset) +# define RTLdrLoad RT_MANGLER(RTLdrLoad) +# define RTLdrLoadAppPriv RT_MANGLER(RTLdrLoadAppPriv) +# define RTLdrLoadEx RT_MANGLER(RTLdrLoadEx) +# define RTLdrLoadSystem RT_MANGLER(RTLdrLoadSystem) +# define RTLdrOpen RT_MANGLER(RTLdrOpen) +# define RTLdrOpenEx RT_MANGLER(RTLdrOpenEx) +# define RTLdrOpenInMemory RT_MANGLER(RTLdrOpenInMemory) +# define RTLdrOpenkLdr RT_MANGLER(RTLdrOpenkLdr) +# define RTLdrRelocate RT_MANGLER(RTLdrRelocate) +# define RTLdrRvaToSegOffset RT_MANGLER(RTLdrRvaToSegOffset) +# define RTLdrQueryForwarderInfo RT_MANGLER(RTLdrQueryForwarderInfo) +# define RTLdrQueryProp RT_MANGLER(RTLdrQueryProp) +# define RTLdrSegOffsetToRva RT_MANGLER(RTLdrSegOffsetToRva) +# define RTLdrSize RT_MANGLER(RTLdrSize) +# define RTLinuxCheckDevicePath RT_MANGLER(RTLinuxCheckDevicePath) +# define RTLinuxCheckDevicePathV RT_MANGLER(RTLinuxCheckDevicePathV) +# define RTLinuxSysFsClose RT_MANGLER(RTLinuxSysFsClose) +# define RTLinuxSysFsExists RT_MANGLER(RTLinuxSysFsExists) +# define RTLinuxSysFsExistsEx RT_MANGLER(RTLinuxSysFsExistsEx) +# define RTLinuxSysFsExistsExV RT_MANGLER(RTLinuxSysFsExistsExV) +# define RTLinuxSysFsExistsV RT_MANGLER(RTLinuxSysFsExistsV) +# define RTLinuxSysFsGetLinkDest RT_MANGLER(RTLinuxSysFsGetLinkDest) +# define RTLinuxSysFsGetLinkDestV RT_MANGLER(RTLinuxSysFsGetLinkDestV) +# define RTLinuxSysFsOpen RT_MANGLER(RTLinuxSysFsOpen) +# define RTLinuxSysFsOpenEx RT_MANGLER(RTLinuxSysFsOpenEx) +# define RTLinuxSysFsOpenExV RT_MANGLER(RTLinuxSysFsOpenExV) +# define RTLinuxSysFsOpenV RT_MANGLER(RTLinuxSysFsOpenV) +# define RTLinuxSysFsReadDevNumFile RT_MANGLER(RTLinuxSysFsReadDevNumFile) +# define RTLinuxSysFsReadDevNumFileV RT_MANGLER(RTLinuxSysFsReadDevNumFileV) +# define RTLinuxSysFsReadFile RT_MANGLER(RTLinuxSysFsReadFile) +# define RTLinuxSysFsReadIntFile RT_MANGLER(RTLinuxSysFsReadIntFile) +# define RTLinuxSysFsReadIntFileV RT_MANGLER(RTLinuxSysFsReadIntFileV) +# define RTLinuxSysFsReadStr RT_MANGLER(RTLinuxSysFsReadStr) +# define RTLinuxSysFsReadStrFile RT_MANGLER(RTLinuxSysFsReadStrFile) +# define RTLinuxSysFsReadStrFileV RT_MANGLER(RTLinuxSysFsReadStrFileV) +# define RTLinuxSysFsWriteFile RT_MANGLER(RTLinuxSysFsWriteFile) +# define RTLinuxSysFsWriteStr RT_MANGLER(RTLinuxSysFsWriteStr) +# define RTLinuxSysFsWriteStrFile RT_MANGLER(RTLinuxSysFsWriteStrFile) +# define RTLinuxSysFsWriteStrFileV RT_MANGLER(RTLinuxSysFsWriteStrFileV) +# define RTLinuxSysFsWriteU8File RT_MANGLER(RTLinuxSysFsWriteU8File) +# define RTLinuxSysFsWriteU8FileV RT_MANGLER(RTLinuxSysFsWriteU8FileV) +# define RTLinuxSysFsWriteU16File RT_MANGLER(RTLinuxSysFsWriteU16File) +# define RTLinuxSysFsWriteU16FileV RT_MANGLER(RTLinuxSysFsWriteU16FileV) +# define RTLinuxSysFsWriteU32File RT_MANGLER(RTLinuxSysFsWriteU32File) +# define RTLinuxSysFsWriteU32FileV RT_MANGLER(RTLinuxSysFsWriteU32FileV) +# define RTLinuxSysFsWriteU64File RT_MANGLER(RTLinuxSysFsWriteU64File) +# define RTLinuxSysFsWriteU64FileV RT_MANGLER(RTLinuxSysFsWriteU64FileV) +# define RTLocalIpcServerCreate RT_MANGLER(RTLocalIpcServerCreate) +# define RTLocalIpcServerDestroy RT_MANGLER(RTLocalIpcServerDestroy) +# define RTLocalIpcServerCancel RT_MANGLER(RTLocalIpcServerCancel) +# define RTLocalIpcServerListen RT_MANGLER(RTLocalIpcServerListen) +# define RTLocalIpcSessionConnect RT_MANGLER(RTLocalIpcSessionConnect) +# define RTLocalIpcSessionClose RT_MANGLER(RTLocalIpcSessionClose) +# define RTLocalIpcSessionCancel RT_MANGLER(RTLocalIpcSessionCancel) +# define RTLocalIpcSessionRead RT_MANGLER(RTLocalIpcSessionRead) +# define RTLocalIpcSessionReadNB RT_MANGLER(RTLocalIpcSessionReadNB) +# define RTLocalIpcSessionRetain RT_MANGLER(RTLocalIpcSessionRetain) +# define RTLocalIpcSessionRelease RT_MANGLER(RTLocalIpcSessionRelease) +# define RTLocalIpcSessionWrite RT_MANGLER(RTLocalIpcSessionWrite) +# define RTLocalIpcSessionFlush RT_MANGLER(RTLocalIpcSessionFlush) +# define RTLocalIpcSessionWaitForData RT_MANGLER(RTLocalIpcSessionWaitForData) +# define RTLocalIpcSessionQueryProcess RT_MANGLER(RTLocalIpcSessionQueryProcess) +# define RTLocalIpcSessionQueryUserId RT_MANGLER(RTLocalIpcSessionQueryUserId) +# define RTLocalIpcSessionQueryGroupId RT_MANGLER(RTLocalIpcSessionQueryGroupId) +# define RTLocaleQueryLocaleName RT_MANGLER(RTLocaleQueryLocaleName) +# define RTLocaleQueryNormalizedBaseLocaleName RT_MANGLER(RTLocaleQueryNormalizedBaseLocaleName) +# define RTLocaleQueryUserCountryCode RT_MANGLER(RTLocaleQueryUserCountryCode) +# define RTLockValidatorClassAddPriorClass RT_MANGLER(RTLockValidatorClassAddPriorClass) +# define RTLockValidatorClassCreate RT_MANGLER(RTLockValidatorClassCreate) +# define RTLockValidatorClassCreateEx RT_MANGLER(RTLockValidatorClassCreateEx) +# define RTLockValidatorClassCreateExV RT_MANGLER(RTLockValidatorClassCreateExV) +# define RTLockValidatorClassCreateUnique RT_MANGLER(RTLockValidatorClassCreateUnique) +# define RTLockValidatorClassEnforceStrictReleaseOrder RT_MANGLER(RTLockValidatorClassEnforceStrictReleaseOrder) +# define RTLockValidatorClassFindForSrcPos RT_MANGLER(RTLockValidatorClassFindForSrcPos) +# define RTLockValidatorClassForSrcPos RT_MANGLER(RTLockValidatorClassForSrcPos) +# define RTLockValidatorClassRelease RT_MANGLER(RTLockValidatorClassRelease) +# define RTLockValidatorClassRetain RT_MANGLER(RTLockValidatorClassRetain) +# define RTLockValidatorHoldsLocksInClass RT_MANGLER(RTLockValidatorHoldsLocksInClass) +# define RTLockValidatorHoldsLocksInSubClass RT_MANGLER(RTLockValidatorHoldsLocksInSubClass) +# define RTLockValidatorIsBlockedThreadInValidator RT_MANGLER(RTLockValidatorIsBlockedThreadInValidator) +# define RTLockValidatorIsEnabled RT_MANGLER(RTLockValidatorIsEnabled) +# define RTLockValidatorIsQuiet RT_MANGLER(RTLockValidatorIsQuiet) +# define RTLockValidatorMayPanic RT_MANGLER(RTLockValidatorMayPanic) +# define RTLockValidatorQueryBlocking RT_MANGLER(RTLockValidatorQueryBlocking) +# define RTLockValidatorReadLockDec RT_MANGLER(RTLockValidatorReadLockDec) +# define RTLockValidatorReadLockGetCount RT_MANGLER(RTLockValidatorReadLockGetCount) +# define RTLockValidatorReadLockInc RT_MANGLER(RTLockValidatorReadLockInc) +# define RTLockValidatorRecExclCheckBlocking RT_MANGLER(RTLockValidatorRecExclCheckBlocking) +# define RTLockValidatorRecExclCheckOrder RT_MANGLER(RTLockValidatorRecExclCheckOrder) +# define RTLockValidatorRecExclCheckOrderAndBlocking RT_MANGLER(RTLockValidatorRecExclCheckOrderAndBlocking) +# define RTLockValidatorRecExclCreate RT_MANGLER(RTLockValidatorRecExclCreate) +# define RTLockValidatorRecExclCreateV RT_MANGLER(RTLockValidatorRecExclCreateV) +# define RTLockValidatorRecExclDelete RT_MANGLER(RTLockValidatorRecExclDelete) +# define RTLockValidatorRecExclDestroy RT_MANGLER(RTLockValidatorRecExclDestroy) +# define RTLockValidatorRecExclInit RT_MANGLER(RTLockValidatorRecExclInit) +# define RTLockValidatorRecExclInitV RT_MANGLER(RTLockValidatorRecExclInitV) +# define RTLockValidatorRecExclRecursion RT_MANGLER(RTLockValidatorRecExclRecursion) +# define RTLockValidatorRecExclRecursionMixed RT_MANGLER(RTLockValidatorRecExclRecursionMixed) +# define RTLockValidatorRecExclReleaseOwner RT_MANGLER(RTLockValidatorRecExclReleaseOwner) +# define RTLockValidatorRecExclReleaseOwnerUnchecked RT_MANGLER(RTLockValidatorRecExclReleaseOwnerUnchecked) +# define RTLockValidatorRecExclSetOwner RT_MANGLER(RTLockValidatorRecExclSetOwner) +# define RTLockValidatorRecExclSetSubClass RT_MANGLER(RTLockValidatorRecExclSetSubClass) +# define RTLockValidatorRecExclUnwind RT_MANGLER(RTLockValidatorRecExclUnwind) +# define RTLockValidatorRecExclUnwindMixed RT_MANGLER(RTLockValidatorRecExclUnwindMixed) +# define RTLockValidatorRecMakeSiblings RT_MANGLER(RTLockValidatorRecMakeSiblings) +# define RTLockValidatorRecSharedAddOwner RT_MANGLER(RTLockValidatorRecSharedAddOwner) +# define RTLockValidatorRecSharedCheckAndRelease RT_MANGLER(RTLockValidatorRecSharedCheckAndRelease) +# define RTLockValidatorRecSharedCheckBlocking RT_MANGLER(RTLockValidatorRecSharedCheckBlocking) +# define RTLockValidatorRecSharedCheckOrder RT_MANGLER(RTLockValidatorRecSharedCheckOrder) +# define RTLockValidatorRecSharedCheckOrderAndBlocking RT_MANGLER(RTLockValidatorRecSharedCheckOrderAndBlocking) +# define RTLockValidatorRecSharedCheckSignaller RT_MANGLER(RTLockValidatorRecSharedCheckSignaller) +# define RTLockValidatorRecSharedCreate RT_MANGLER(RTLockValidatorRecSharedCreate) +# define RTLockValidatorRecSharedCreateV RT_MANGLER(RTLockValidatorRecSharedCreateV) +# define RTLockValidatorRecSharedDelete RT_MANGLER(RTLockValidatorRecSharedDelete) +# define RTLockValidatorRecSharedDestroy RT_MANGLER(RTLockValidatorRecSharedDestroy) +# define RTLockValidatorRecSharedInit RT_MANGLER(RTLockValidatorRecSharedInit) +# define RTLockValidatorRecSharedInitV RT_MANGLER(RTLockValidatorRecSharedInitV) +# define RTLockValidatorRecSharedIsOwner RT_MANGLER(RTLockValidatorRecSharedIsOwner) +# define RTLockValidatorRecSharedRemoveOwner RT_MANGLER(RTLockValidatorRecSharedRemoveOwner) +# define RTLockValidatorRecSharedResetOwner RT_MANGLER(RTLockValidatorRecSharedResetOwner) +# define RTLockValidatorRecSharedSetSubClass RT_MANGLER(RTLockValidatorRecSharedSetSubClass) +# define RTLockValidatorSetEnabled RT_MANGLER(RTLockValidatorSetEnabled) +# define RTLockValidatorSetMayPanic RT_MANGLER(RTLockValidatorSetMayPanic) +# define RTLockValidatorSetQuiet RT_MANGLER(RTLockValidatorSetQuiet) +# define RTLockValidatorWriteLockDec RT_MANGLER(RTLockValidatorWriteLockDec) +# define RTLockValidatorWriteLockGetCount RT_MANGLER(RTLockValidatorWriteLockGetCount) +# define RTLockValidatorWriteLockInc RT_MANGLER(RTLockValidatorWriteLockInc) +# define RTLogBackdoorPrintf RT_MANGLER(RTLogBackdoorPrintf) /* r0drv-guest */ +# define RTLogBackdoorPrintfV RT_MANGLER(RTLogBackdoorPrintfV) /* r0drv-guest */ +# define RTLogCalcSizeForR0 RT_MANGLER(RTLogCalcSizeForR0) +# define RTLogClearFileDelayFlag RT_MANGLER(RTLogClearFileDelayFlag) +# define RTLogCloneRC RT_MANGLER(RTLogCloneRC) +# define RTLogComPrintf RT_MANGLER(RTLogComPrintf) +# define RTLogComPrintfV RT_MANGLER(RTLogComPrintfV) +# define RTLogCopyGroupsAndFlagsForR0 RT_MANGLER(RTLogCopyGroupsAndFlagsForR0) +# define RTLogCreate RT_MANGLER(RTLogCreate) +# define RTLogCreateEx RT_MANGLER(RTLogCreateEx) +# define RTLogCreateExV RT_MANGLER(RTLogCreateExV) +# define RTLogCreateForR0 RT_MANGLER(RTLogCreateForR0) +# define RTLogDefaultInit RT_MANGLER(RTLogDefaultInit) +# define RTLogDefaultInstance RT_MANGLER(RTLogDefaultInstance) +# define RTLogDefaultInstanceEx RT_MANGLER(RTLogDefaultInstanceEx) +# define RTLogDestinations RT_MANGLER(RTLogDestinations) +# define RTLogDestroy RT_MANGLER(RTLogDestroy) +# define RTLogFlags RT_MANGLER(RTLogFlags) +# define RTLogFlush RT_MANGLER(RTLogFlush) +# define RTLogFlushRC RT_MANGLER(RTLogFlushRC) +# define RTLogFlushR0 RT_MANGLER(RTLogFlushR0) +# define RTLogFlushToLogger RT_MANGLER(RTLogFlushToLogger) +# define RTLogFormatV RT_MANGLER(RTLogFormatV) +# define RTLogGetDefaultInstance RT_MANGLER(RTLogGetDefaultInstance) +# define RTLogGetDefaultInstanceEx RT_MANGLER(RTLogGetDefaultInstanceEx) +# define RTLogGetDestinations RT_MANGLER(RTLogGetDestinations) +# define RTLogGetFlags RT_MANGLER(RTLogGetFlags) +# define RTLogGetGroupSettings RT_MANGLER(RTLogGetGroupSettings) +# define RTLogGroupSettings RT_MANGLER(RTLogGroupSettings) +# define RTLogLogger RT_MANGLER(RTLogLogger) +# define RTLogLoggerEx RT_MANGLER(RTLogLoggerEx) +# define RTLogLoggerExV RT_MANGLER(RTLogLoggerExV) +# define RTLogLoggerV RT_MANGLER(RTLogLoggerV) +# define RTLogPrintf RT_MANGLER(RTLogPrintf) +# define RTLogPrintfV RT_MANGLER(RTLogPrintfV) +# define RTLogDumpPrintfV RT_MANGLER(RTLogDumpPrintfV) +# define RTLogRelGetDefaultInstance RT_MANGLER(RTLogRelGetDefaultInstance) +# define RTLogRelGetDefaultInstanceEx RT_MANGLER(RTLogRelGetDefaultInstanceEx) +# define RTLogRelLogger RT_MANGLER(RTLogRelLogger) +# define RTLogRelLoggerV RT_MANGLER(RTLogRelLoggerV) +# define RTLogRelPrintf RT_MANGLER(RTLogRelPrintf) +# define RTLogRelPrintfV RT_MANGLER(RTLogRelPrintfV) +# define RTLogRelSetBuffering RT_MANGLER(RTLogRelSetBuffering) +# define RTLogRelSetDefaultInstance RT_MANGLER(RTLogRelSetDefaultInstance) +# define RTLogSetBuffering RT_MANGLER(RTLogSetBuffering) +# define RTLogSetCustomPrefixCallback RT_MANGLER(RTLogSetCustomPrefixCallback) +# define RTLogSetCustomPrefixCallbackForR0 RT_MANGLER(RTLogSetCustomPrefixCallbackForR0) +# define RTLogSetDefaultInstance RT_MANGLER(RTLogSetDefaultInstance) +# define RTLogSetDefaultInstanceThread RT_MANGLER(RTLogSetDefaultInstanceThread) /* r0drv */ +# define RTLogSetGroupLimit RT_MANGLER(RTLogSetGroupLimit) +# define RTLogWriteCom RT_MANGLER(RTLogWriteCom) +# define RTLogWriteCom RT_MANGLER(RTLogWriteCom) +# define RTLogWriteDebugger RT_MANGLER(RTLogWriteDebugger) +# define RTLogWriteStdErr RT_MANGLER(RTLogWriteStdErr) +# define RTLogWriteStdOut RT_MANGLER(RTLogWriteStdOut) +# define RTLogWriteUser RT_MANGLER(RTLogWriteUser) +# define RTManifestCreate RT_MANGLER(RTManifestCreate) +# define RTManifestDup RT_MANGLER(RTManifestDup) +# define RTManifestEntryAdd RT_MANGLER(RTManifestEntryAdd) +# define RTManifestEntryAddIoStream RT_MANGLER(RTManifestEntryAddIoStream) +# define RTManifestEntryAddPassthruIoStream RT_MANGLER(RTManifestEntryAddPassthruIoStream) +# define RTManifestEntryExists RT_MANGLER(RTManifestEntryExists) +# define RTManifestEntryRemove RT_MANGLER(RTManifestEntryRemove) +# define RTManifestEntryQueryAttr RT_MANGLER(RTManifestEntryQueryAttr) +# define RTManifestEntrySetAttr RT_MANGLER(RTManifestEntrySetAttr) +# define RTManifestEntryUnsetAttr RT_MANGLER(RTManifestEntryUnsetAttr) +# define RTManifestEquals RT_MANGLER(RTManifestEquals) +# define RTManifestEqualsEx RT_MANGLER(RTManifestEqualsEx) +# define RTManifestPtIosAddEntryNow RT_MANGLER(RTManifestPtIosAddEntryNow) +# define RTManifestPtIosIsInstanceOf RT_MANGLER(RTManifestPtIosIsInstanceOf) +# define RTManifestQueryAllAttrTypes RT_MANGLER(RTManifestQueryAllAttrTypes) +# define RTManifestQueryAttr RT_MANGLER(RTManifestQueryAttr) +# define RTManifestReadStandard RT_MANGLER(RTManifestReadStandard) +# define RTManifestReadStandardEx RT_MANGLER(RTManifestReadStandardEx) +# define RTManifestReadStandardFromFile RT_MANGLER(RTManifestReadStandardFromFile) +# define RTManifestRelease RT_MANGLER(RTManifestRelease) +# define RTManifestRetain RT_MANGLER(RTManifestRetain) +# define RTManifestSetAttr RT_MANGLER(RTManifestSetAttr) +# define RTManifestUnsetAttr RT_MANGLER(RTManifestUnsetAttr) +# define RTManifestVerify RT_MANGLER(RTManifestVerify) +# define RTManifestVerifyDigestType RT_MANGLER(RTManifestVerifyDigestType) +# define RTManifestVerifyFiles RT_MANGLER(RTManifestVerifyFiles) +# define RTManifestVerifyFilesBuf RT_MANGLER(RTManifestVerifyFilesBuf) +# define RTManifestWriteFiles RT_MANGLER(RTManifestWriteFiles) +# define RTManifestWriteFilesBuf RT_MANGLER(RTManifestWriteFilesBuf) +# define RTManifestWriteStandard RT_MANGLER(RTManifestWriteStandard) +# define RTManifestWriteStandardToFile RT_MANGLER(RTManifestWriteStandardToFile) +# define RTMd5 RT_MANGLER(RTMd5) +# define RTMd5Final RT_MANGLER(RTMd5Final) +# define RTMd5FromString RT_MANGLER(RTMd5FromString) +# define RTMd5Init RT_MANGLER(RTMd5Init) +# define RTMd5ToString RT_MANGLER(RTMd5ToString) +# define RTMd5Update RT_MANGLER(RTMd5Update) +# define RTMemAllocExTag RT_MANGLER(RTMemAllocExTag) +# define RTMemAllocTag RT_MANGLER(RTMemAllocTag) +# define RTMemAllocVarTag RT_MANGLER(RTMemAllocVarTag) +# define RTMemAllocZTag RT_MANGLER(RTMemAllocZTag) +# define RTMemAllocZVarTag RT_MANGLER(RTMemAllocZVarTag) +# define RTMemCacheAlloc RT_MANGLER(RTMemCacheAlloc) +# define RTMemCacheAllocEx RT_MANGLER(RTMemCacheAllocEx) +# define RTMemCacheCreate RT_MANGLER(RTMemCacheCreate) +# define RTMemCacheDestroy RT_MANGLER(RTMemCacheDestroy) +# define RTMemCacheFree RT_MANGLER(RTMemCacheFree) +# define RTMemContAlloc RT_MANGLER(RTMemContAlloc) /* r0drv */ +# define RTMemContFree RT_MANGLER(RTMemContFree) /* r0drv */ +# define RTMemDump RT_MANGLER(RTMemDump) +# define RTMemDupExTag RT_MANGLER(RTMemDupExTag) +# define RTMemDupTag RT_MANGLER(RTMemDupTag) +# define RTMemEfAlloc RT_MANGLER(RTMemEfAlloc) +# define RTMemEfAllocNP RT_MANGLER(RTMemEfAllocNP) +# define RTMemEfAllocVar RT_MANGLER(RTMemEfAllocVar) +# define RTMemEfAllocVarNP RT_MANGLER(RTMemEfAllocVarNP) +# define RTMemEfAllocZ RT_MANGLER(RTMemEfAllocZ) +# define RTMemEfAllocZNP RT_MANGLER(RTMemEfAllocZNP) +# define RTMemEfAllocZVar RT_MANGLER(RTMemEfAllocZVar) +# define RTMemEfAllocZVarNP RT_MANGLER(RTMemEfAllocZVarNP) +# define RTMemEfDup RT_MANGLER(RTMemEfDup) +# define RTMemEfDupEx RT_MANGLER(RTMemEfDupEx) +# define RTMemEfDupExNP RT_MANGLER(RTMemEfDupExNP) +# define RTMemEfDupNP RT_MANGLER(RTMemEfDupNP) +# define RTMemEfFree RT_MANGLER(RTMemEfFree) +# define RTMemEfFreeNP RT_MANGLER(RTMemEfFreeNP) +# define RTMemEfRealloc RT_MANGLER(RTMemEfRealloc) +# define RTMemEfReallocNP RT_MANGLER(RTMemEfReallocNP) +# define RTMemEfTmpAlloc RT_MANGLER(RTMemEfTmpAlloc) +# define RTMemEfTmpAllocNP RT_MANGLER(RTMemEfTmpAllocNP) +# define RTMemEfTmpAllocZ RT_MANGLER(RTMemEfTmpAllocZ) +# define RTMemEfTmpAllocZNP RT_MANGLER(RTMemEfTmpAllocZNP) +# define RTMemEfTmpFree RT_MANGLER(RTMemEfTmpFree) +# define RTMemEfTmpFreeNP RT_MANGLER(RTMemEfTmpFreeNP) +# define RTMemExecAllocTag RT_MANGLER(RTMemExecAllocTag) +# define RTMemExecFree RT_MANGLER(RTMemExecFree) +# define RTMemFree RT_MANGLER(RTMemFree) +# define RTMemFreeEx RT_MANGLER(RTMemFreeEx) +# define RTMemLockedAllocExTag RT_MANGLER(RTMemLockedAllocExTag) +# define RTMemLockedAllocZExTag RT_MANGLER(RTMemLockedAllocZExTag) +# define RTMemLockedAllocTag RT_MANGLER(RTMemLockedAllocTag) +# define RTMemLockedAllocZTag RT_MANGLER(RTMemLockedAllocZTag) +# define RTMemLockedFree RT_MANGLER(RTMemLockedFree) +# define RTMemPageAllocTag RT_MANGLER(RTMemPageAllocTag) +# define RTMemPageAllocZTag RT_MANGLER(RTMemPageAllocZTag) +# define RTMemPageFree RT_MANGLER(RTMemPageFree) +# define RTMemPoolAlloc RT_MANGLER(RTMemPoolAlloc) +# define RTMemPoolAllocZ RT_MANGLER(RTMemPoolAllocZ) +# define RTMemPoolCreate RT_MANGLER(RTMemPoolCreate) +# define RTMemPoolDestroy RT_MANGLER(RTMemPoolDestroy) +# define RTMemPoolDup RT_MANGLER(RTMemPoolDup) +# define RTMemPoolDupEx RT_MANGLER(RTMemPoolDupEx) +# define RTMemPoolFree RT_MANGLER(RTMemPoolFree) +# define RTMemPoolRealloc RT_MANGLER(RTMemPoolRealloc) +# define RTMemPoolRefCount RT_MANGLER(RTMemPoolRefCount) +# define RTMemPoolRelease RT_MANGLER(RTMemPoolRelease) +# define RTMemPoolRetain RT_MANGLER(RTMemPoolRetain) +# define RTMemProtect RT_MANGLER(RTMemProtect) +# define RTMemReallocTag RT_MANGLER(RTMemReallocTag) +# define RTMemTmpAllocTag RT_MANGLER(RTMemTmpAllocTag) +# define RTMemTmpAllocZTag RT_MANGLER(RTMemTmpAllocZTag) +# define RTMemTmpFree RT_MANGLER(RTMemTmpFree) +# define RTMemTrackerDumpAllToFile RT_MANGLER(RTMemTrackerDumpAllToFile) +# define RTMemTrackerDumpAllToLog RT_MANGLER(RTMemTrackerDumpAllToLog) +# define RTMemTrackerDumpAllToLogRel RT_MANGLER(RTMemTrackerDumpAllToLogRel) +# define RTMemTrackerDumpAllToStdErr RT_MANGLER(RTMemTrackerDumpAllToStdErr) +# define RTMemTrackerDumpAllToStdOut RT_MANGLER(RTMemTrackerDumpAllToStdOut) +# define RTMemTrackerDumpStatsToFile RT_MANGLER(RTMemTrackerDumpStatsToFile) +# define RTMemTrackerDumpStatsToLog RT_MANGLER(RTMemTrackerDumpStatsToLog) +# define RTMemTrackerDumpStatsToLogRel RT_MANGLER(RTMemTrackerDumpStatsToLogRel) +# define RTMemTrackerDumpStatsToStdErr RT_MANGLER(RTMemTrackerDumpStatsToStdErr) +# define RTMemTrackerDumpStatsToStdOut RT_MANGLER(RTMemTrackerDumpStatsToStdOut) +# define RTMemTrackerHdrAlloc RT_MANGLER(RTMemTrackerHdrAlloc) +# define RTMemTrackerHdrFree RT_MANGLER(RTMemTrackerHdrFree) +# define RTMemTrackerHdrReallocDone RT_MANGLER(RTMemTrackerHdrReallocDone) +# define RTMemTrackerHdrReallocPrep RT_MANGLER(RTMemTrackerHdrReallocPrep) +# define RTMemWipeThoroughly RT_MANGLER(RTMemWipeThoroughly) +# define RTMpCpuId RT_MANGLER(RTMpCpuId) +# define RTMpCpuIdFromSetIndex RT_MANGLER(RTMpCpuIdFromSetIndex) +# define RTMpCpuIdToSetIndex RT_MANGLER(RTMpCpuIdToSetIndex) +# define RTMpCurSetIndex RT_MANGLER(RTMpCurSetIndex) +# define RTMpCurSetIndexAndId RT_MANGLER(RTMpCurSetIndexAndId) +# define RTMpGetArraySize RT_MANGLER(RTMpGetArraySize) +# define RTMpGetCount RT_MANGLER(RTMpGetCount) +# define RTMpGetCurFrequency RT_MANGLER(RTMpGetCurFrequency) +# define RTMpGetDescription RT_MANGLER(RTMpGetDescription) +# define RTMpGetCpuGroupCounts RT_MANGLER(RTMpGetCpuGroupCounts) +# define RTMpGetMaxCpuGroupCount RT_MANGLER(RTMpGetMaxCpuGroupCount) +# define RTMpGetMaxCpuId RT_MANGLER(RTMpGetMaxCpuId) +# define RTMpGetMaxFrequency RT_MANGLER(RTMpGetMaxFrequency) +# define RTMpGetOnlineCount RT_MANGLER(RTMpGetOnlineCount) +# define RTMpGetOnlineCoreCount RT_MANGLER(RTMpGetOnlineCoreCount) +# define RTMpGetOnlineSet RT_MANGLER(RTMpGetOnlineSet) +# define RTMpGetPresentCount RT_MANGLER(RTMpGetPresentCount) +# define RTMpGetPresentCoreCount RT_MANGLER(RTMpGetPresentCoreCount) +# define RTMpGetPresentSet RT_MANGLER(RTMpGetPresentSet) +# define RTMpGetSet RT_MANGLER(RTMpGetSet) +# define RTMpGetCoreCount RT_MANGLER(RTMpGetCoreCount) +# define RTMpIsCpuOnline RT_MANGLER(RTMpIsCpuOnline) +# define RTMpIsCpuPossible RT_MANGLER(RTMpIsCpuPossible) /* r0drv */ +# define RTMpIsCpuPresent RT_MANGLER(RTMpIsCpuPresent) +# define RTMpIsCpuWorkPending RT_MANGLER(RTMpIsCpuWorkPending) +# define RTMpNotificationDeregister RT_MANGLER(RTMpNotificationDeregister) /* r0drv */ +# define RTMpNotificationRegister RT_MANGLER(RTMpNotificationRegister) /* r0drv */ +# define RTMpOnAll RT_MANGLER(RTMpOnAll) /* r0drv */ +# define RTMpOnAllIsConcurrentSafe RT_MANGLER(RTMpOnAllIsConcurrentSafe) /* r0drv */ +# define RTMpOnOthers RT_MANGLER(RTMpOnOthers) /* r0drv */ +# define RTMpOnPair RT_MANGLER(RTMpOnPair) /* r0drv */ +# define RTMpOnPairIsConcurrentExecSupported RT_MANGLER(RTMpOnPairIsConcurrentExecSupported) /* r0drv */ +# define RTMpOnSpecific RT_MANGLER(RTMpOnSpecific) /* r0drv */ +# define RTMpPokeCpu RT_MANGLER(RTMpPokeCpu) /* r0drv */ +# define RTMpSetIndexFromCpuGroupMember RT_MANGLER(RTMpSetIndexFromCpuGroupMember) +# define RTMsgError RT_MANGLER(RTMsgError) +# define RTMsgErrorExit RT_MANGLER(RTMsgErrorExit) +# define RTMsgErrorExitV RT_MANGLER(RTMsgErrorExitV) +# define RTMsgErrorExitFailure RT_MANGLER(RTMsgErrorExitFailure) +# define RTMsgErrorExitFailureV RT_MANGLER(RTMsgErrorExitFailureV) +# define RTMsgErrorRc RT_MANGLER(RTMsgErrorRc) +# define RTMsgErrorRcV RT_MANGLER(RTMsgErrorRcV) +# define RTMsgErrorV RT_MANGLER(RTMsgErrorV) +# define RTMsgInfo RT_MANGLER(RTMsgInfo) +# define RTMsgInfoV RT_MANGLER(RTMsgInfoV) +# define RTMsgInitFailure RT_MANGLER(RTMsgInitFailure) +# define RTMsgSetProgName RT_MANGLER(RTMsgSetProgName) +# define RTMsgWarning RT_MANGLER(RTMsgWarning) +# define RTMsgWarningV RT_MANGLER(RTMsgWarningV) +# define RTMsgRefEntryPrintStringTable RT_MANGLER(RTMsgRefEntryPrintStringTable) +# define RTMsgRefEntrySynopsisEx RT_MANGLER(RTMsgRefEntrySynopsisEx) +# define RTMsgRefEntrySynopsis RT_MANGLER(RTMsgRefEntrySynopsis) +# define RTMsgRefEntryHelpEx RT_MANGLER(RTMsgRefEntryHelpEx) +# define RTMsgRefEntryHelp RT_MANGLER(RTMsgRefEntryHelp) +# define RTNetIPv4AddDataChecksum RT_MANGLER(RTNetIPv4AddDataChecksum) +# define RTNetIPv4AddTCPChecksum RT_MANGLER(RTNetIPv4AddTCPChecksum) +# define RTNetIPv4AddUDPChecksum RT_MANGLER(RTNetIPv4AddUDPChecksum) +# define RTNetIPv4FinalizeChecksum RT_MANGLER(RTNetIPv4FinalizeChecksum) +# define RTNetIPv4HdrChecksum RT_MANGLER(RTNetIPv4HdrChecksum) +# define RTNetIPv4IsDHCPValid RT_MANGLER(RTNetIPv4IsDHCPValid) +# define RTNetIPv4IsHdrValid RT_MANGLER(RTNetIPv4IsHdrValid) +# define RTNetIPv4IsTCPSizeValid RT_MANGLER(RTNetIPv4IsTCPSizeValid) +# define RTNetIPv4IsTCPValid RT_MANGLER(RTNetIPv4IsTCPValid) +# define RTNetIPv4IsUDPSizeValid RT_MANGLER(RTNetIPv4IsUDPSizeValid) +# define RTNetIPv4IsUDPValid RT_MANGLER(RTNetIPv4IsUDPValid) +# define RTNetIPv4PseudoChecksum RT_MANGLER(RTNetIPv4PseudoChecksum) +# define RTNetIPv4PseudoChecksumBits RT_MANGLER(RTNetIPv4PseudoChecksumBits) +# define RTNetIPv4TCPChecksum RT_MANGLER(RTNetIPv4TCPChecksum) +# define RTNetIPv4UDPChecksum RT_MANGLER(RTNetIPv4UDPChecksum) +# define RTNetIPv6PseudoChecksum RT_MANGLER(RTNetIPv6PseudoChecksum) +# define RTNetIPv6PseudoChecksumBits RT_MANGLER(RTNetIPv6PseudoChecksumBits) +# define RTNetIPv6PseudoChecksumEx RT_MANGLER(RTNetIPv6PseudoChecksumEx) +# define RTNetMaskToPrefixIPv4 RT_MANGLER(RTNetMaskToPrefixIPv4) +# define RTNetPrefixToMaskIPv4 RT_MANGLER(RTNetPrefixToMaskIPv4) +# define RTNetTCPChecksum RT_MANGLER(RTNetTCPChecksum) +# define RTNetUDPChecksum RT_MANGLER(RTNetUDPChecksum) +# define RTNetStrToMacAddr RT_MANGLER(RTNetStrToMacAddr) +# define RTNetIsIPv4AddrStr RT_MANGLER(RTNetIsIPv4AddrStr) +# define RTNetStrIsIPv4AddrAny RT_MANGLER(RTNetStrIsIPv4AddrAny) +# define RTNetStrToIPv4AddrEx RT_MANGLER(RTNetStrToIPv4AddrEx) +# define RTNetStrToIPv4Addr RT_MANGLER(RTNetStrToIPv4Addr) +# define RTNetIsIPv6AddrStr RT_MANGLER(RTNetIsIPv6AddrStr) +# define RTNetStrIsIPv6AddrAny RT_MANGLER(RTNetStrIsIPv6AddrAny) +# define RTNetStrToIPv6AddrEx RT_MANGLER(RTNetStrToIPv6AddrEx) +# define RTNetStrToIPv6Addr RT_MANGLER(RTNetStrToIPv6Addr) +# define RTNetMaskToPrefixIPv6 RT_MANGLER(RTNetMaskToPrefixIPv6) +# define RTNetPrefixToMaskIPv6 RT_MANGLER(RTNetPrefixToMaskIPv6) +# define RTOnceSlow RT_MANGLER(RTOnceSlow) +# define RTOnceReset RT_MANGLER(RTOnceReset) +# define RTPathAbs RT_MANGLER(RTPathAbs) +# define RTPathAbsDup RT_MANGLER(RTPathAbsDup) +# define RTPathAbsEx RT_MANGLER(RTPathAbsEx) +# define RTPathAbsExDup RT_MANGLER(RTPathAbsExDup) +# define RTPathAppDocs RT_MANGLER(RTPathAppDocs) +# define RTPathAppend RT_MANGLER(RTPathAppend) +# define RTPathAppendEx RT_MANGLER(RTPathAppendEx) +# define RTPathAppPrivateArch RT_MANGLER(RTPathAppPrivateArch) +# define RTPathAppPrivateArchTop RT_MANGLER(RTPathAppPrivateArchTop) +# define RTPathAppPrivateNoArch RT_MANGLER(RTPathAppPrivateNoArch) +# define RTPathCalcRelative RT_MANGLER(RTPathCalcRelative) +# define RTPathChangeToDosSlashes RT_MANGLER(RTPathChangeToDosSlashes) +# define RTPathChangeToUnixSlashes RT_MANGLER(RTPathChangeToUnixSlashes) +# define RTPathCompare RT_MANGLER(RTPathCompare) +# define RTPathCopyComponents RT_MANGLER(RTPathCopyComponents) +# define RTPathCountComponents RT_MANGLER(RTPathCountComponents) +# define RTPathEnsureTrailingSeparator RT_MANGLER(RTPathEnsureTrailingSeparator) +# define RTPathExecDir RT_MANGLER(RTPathExecDir) +# define RTPathExists RT_MANGLER(RTPathExists) +# define RTPathExistsEx RT_MANGLER(RTPathExistsEx) +# define RTPathSuffix RT_MANGLER(RTPathSuffix) +# define RTPathFilename RT_MANGLER(RTPathFilename) +# define RTPathFilenameEx RT_MANGLER(RTPathFilenameEx) +# define RTPathGetCurrent RT_MANGLER(RTPathGetCurrent) +# define RTPathGetCurrentDrive RT_MANGLER(RTPathGetCurrentDrive) +# define RTPathGetCurrentOnDrive RT_MANGLER(RTPathGetCurrentOnDrive) +# define RTPathGetMode RT_MANGLER(RTPathGetMode) +# define RTPathGlob RT_MANGLER(RTPathGlob) +# define RTPathGlobFree RT_MANGLER(RTPathGlobFree) +# define RTPathHasSuffix RT_MANGLER(RTPathHasSuffix) +# define RTPathHasPath RT_MANGLER(RTPathHasPath) +# define RTPathIsSame RT_MANGLER(RTPathIsSame) +# define RTPathJoin RT_MANGLER(RTPathJoin) +# define RTPathJoinA RT_MANGLER(RTPathJoinA) +# define RTPathJoinEx RT_MANGLER(RTPathJoinEx) +# define RTPathParse RT_MANGLER(RTPathParse) +# define RTPathParsedReassemble RT_MANGLER(RTPathParsedReassemble) +# define RTPathParseSimple RT_MANGLER(RTPathParseSimple) +# define RTPathQueryInfo RT_MANGLER(RTPathQueryInfo) +# define RTPathQueryInfoEx RT_MANGLER(RTPathQueryInfoEx) +# define RTPathReal RT_MANGLER(RTPathReal) +# define RTPathRealDup RT_MANGLER(RTPathRealDup) +# define RTPathRename RT_MANGLER(RTPathRename) +# define RTPathRmCmd RT_MANGLER(RTPathRmCmd) +# define RTPathSetCurrent RT_MANGLER(RTPathSetCurrent) +# define RTPathSetMode RT_MANGLER(RTPathSetMode) /* not-win */ +# define RTPathSetOwner RT_MANGLER(RTPathSetOwner) /* not-win */ +# define RTPathSetOwnerEx RT_MANGLER(RTPathSetOwnerEx) /* not-win */ +# define RTPathSetTimes RT_MANGLER(RTPathSetTimes) +# define RTPathSetTimesEx RT_MANGLER(RTPathSetTimesEx) +# define RTPathSharedLibs RT_MANGLER(RTPathSharedLibs) +# define RTPathSkipRootSpec RT_MANGLER(RTPathSkipRootSpec) +# define RTPathSplit RT_MANGLER(RTPathSplit) +# define RTPathSplitATag RT_MANGLER(RTPathSplitATag) +# define RTPathSplitFree RT_MANGLER(RTPathSplitFree) +# define RTPathSplitReassemble RT_MANGLER(RTPathSplitReassemble) +# define RTPathStartsWith RT_MANGLER(RTPathStartsWith) +# define RTPathStartsWithRoot RT_MANGLER(RTPathStartsWithRoot) +# define RTPathStripSuffix RT_MANGLER(RTPathStripSuffix) +# define RTPathStripFilename RT_MANGLER(RTPathStripFilename) +# define RTPathStripTrailingSlash RT_MANGLER(RTPathStripTrailingSlash) +# define RTPathTemp RT_MANGLER(RTPathTemp) +# define RTPathTraverseList RT_MANGLER(RTPathTraverseList) +# define RTPathUnlink RT_MANGLER(RTPathUnlink) +# define RTPathUserDocuments RT_MANGLER(RTPathUserDocuments) +# define RTPathUserHome RT_MANGLER(RTPathUserHome) +# define RTPipeClose RT_MANGLER(RTPipeClose) +# define RTPipeCreate RT_MANGLER(RTPipeCreate) +# define RTPipeFlush RT_MANGLER(RTPipeFlush) +# define RTPipeFromNative RT_MANGLER(RTPipeFromNative) +# define RTPipeQueryInfo RT_MANGLER(RTPipeQueryInfo) +# define RTPipeQueryReadable RT_MANGLER(RTPipeQueryReadable) +# define RTPipeRead RT_MANGLER(RTPipeRead) +# define RTPipeReadBlocking RT_MANGLER(RTPipeReadBlocking) +# define RTPipeSelectOne RT_MANGLER(RTPipeSelectOne) +# define RTPipeToNative RT_MANGLER(RTPipeToNative) +# define RTPipeWrite RT_MANGLER(RTPipeWrite) +# define RTPipeWriteBlocking RT_MANGLER(RTPipeWriteBlocking) +# define RTPoll RT_MANGLER(RTPoll) +# define RTPollNoResume RT_MANGLER(RTPollNoResume) +# define RTPollSetAdd RT_MANGLER(RTPollSetAdd) +# define RTPollSetCreate RT_MANGLER(RTPollSetCreate) +# define RTPollSetDestroy RT_MANGLER(RTPollSetDestroy) +# define RTPollSetEventsChange RT_MANGLER(RTPollSetEventsChange) +# define RTPollSetGetCount RT_MANGLER(RTPollSetGetCount) +# define RTPollSetQueryHandle RT_MANGLER(RTPollSetQueryHandle) +# define RTPollSetRemove RT_MANGLER(RTPollSetRemove) +# define RTPowerNotificationDeregister RT_MANGLER(RTPowerNotificationDeregister) /* r0drv */ +# define RTPowerNotificationRegister RT_MANGLER(RTPowerNotificationRegister) /* r0drv */ +# define RTPowerSignalEvent RT_MANGLER(RTPowerSignalEvent) /* r0drv */ +# define RTPrintf RT_MANGLER(RTPrintf) +# define RTPrintfV RT_MANGLER(RTPrintfV) +# define RTProcCreate RT_MANGLER(RTProcCreate) +# define RTProcCreateEx RT_MANGLER(RTProcCreateEx) +# define RTProcDaemonize RT_MANGLER(RTProcDaemonize) +# define RTProcDaemonizeUsingFork RT_MANGLER(RTProcDaemonizeUsingFork) +# define RTProcGetAffinityMask RT_MANGLER(RTProcGetAffinityMask) +# define RTProcGetExecutablePath RT_MANGLER(RTProcGetExecutablePath) +# define RTProcGetPriority RT_MANGLER(RTProcGetPriority) +# define RTProcIsRunningByName RT_MANGLER(RTProcIsRunningByName) +# define RTProcQueryParent RT_MANGLER(RTProcQueryParent) +# define RTProcQueryUsername RT_MANGLER(RTProcQueryUsername) +# define RTProcQueryUsernameA RT_MANGLER(RTProcQueryUsernameA) +# define RTProcSelf RT_MANGLER(RTProcSelf) +# define RTProcSetPriority RT_MANGLER(RTProcSetPriority) +# define RTProcShortName RT_MANGLER(RTProcShortName) +# define RTProcTerminate RT_MANGLER(RTProcTerminate) +# define RTProcWait RT_MANGLER(RTProcWait) +# define RTProcWaitNoResume RT_MANGLER(RTProcWaitNoResume) +# define RTR0AssertPanicSystem RT_MANGLER(RTR0AssertPanicSystem) /* r0drv */ +# define RTR0DbgKrnlInfoOpen RT_MANGLER(RTR0DbgKrnlInfoOpen) /* r0drv */ +# define RTR0DbgKrnlInfoQueryMember RT_MANGLER(RTR0DbgKrnlInfoQueryMember) /* r0drv */ +# define RTR0DbgKrnlInfoQuerySize RT_MANGLER(RTR0DbgKrnlInfoQuerySize) /* r0drv */ +# define RTR0DbgKrnlInfoQuerySymbol RT_MANGLER(RTR0DbgKrnlInfoQuerySymbol) /* r0drv */ +# define RTR0DbgKrnlInfoRelease RT_MANGLER(RTR0DbgKrnlInfoRelease) /* r0drv */ +# define RTR0DbgKrnlInfoRetain RT_MANGLER(RTR0DbgKrnlInfoRetain) /* r0drv */ +# define RTR0Init RT_MANGLER(RTR0Init) /* r0drv */ +# define RTR0MemAreKrnlAndUsrDifferent RT_MANGLER(RTR0MemAreKrnlAndUsrDifferent) /* r0drv */ +# define RTR0MemExecDonate RT_MANGLER(RTR0MemExecDonate) /* r0drv */ +# define RTR0MemKernelIsValidAddr RT_MANGLER(RTR0MemKernelIsValidAddr) /* r0drv */ +# define RTR0MemObjAddress RT_MANGLER(RTR0MemObjAddress) /* r0drv */ +# define RTR0MemObjAddressR3 RT_MANGLER(RTR0MemObjAddressR3) /* r0drv */ +# define RTR0MemKernelCopyFrom RT_MANGLER(RTR0MemKernelCopyFrom) /* r0drv */ +# define RTR0MemKernelCopyTo RT_MANGLER(RTR0MemKernelCopyTo) /* r0drv */ +# define RTR0MemObjAllocContTag RT_MANGLER(RTR0MemObjAllocContTag) /* r0drv */ +# define RTR0MemObjAllocLowTag RT_MANGLER(RTR0MemObjAllocLowTag) /* r0drv */ +# define RTR0MemObjAllocPageTag RT_MANGLER(RTR0MemObjAllocPageTag) /* r0drv */ +# define RTR0MemObjAllocPhysExTag RT_MANGLER(RTR0MemObjAllocPhysExTag) /* r0drv */ +# define RTR0MemObjAllocPhysNCTag RT_MANGLER(RTR0MemObjAllocPhysNCTag) /* r0drv */ +# define RTR0MemObjAllocPhysTag RT_MANGLER(RTR0MemObjAllocPhysTag) /* r0drv */ +# define RTR0MemObjEnterPhysTag RT_MANGLER(RTR0MemObjEnterPhysTag) /* r0drv */ +# define RTR0MemObjFree RT_MANGLER(RTR0MemObjFree) /* r0drv */ +# define RTR0MemObjGetPagePhysAddr RT_MANGLER(RTR0MemObjGetPagePhysAddr) /* r0drv */ +# define RTR0MemObjIsMapping RT_MANGLER(RTR0MemObjIsMapping) /* r0drv */ +# define RTR0MemObjLockKernelTag RT_MANGLER(RTR0MemObjLockKernelTag) /* r0drv */ +# define RTR0MemObjLockUserTag RT_MANGLER(RTR0MemObjLockUserTag) /* r0drv */ +# define RTR0MemObjMapKernelExTag RT_MANGLER(RTR0MemObjMapKernelExTag) /* r0drv */ +# define RTR0MemObjMapKernelTag RT_MANGLER(RTR0MemObjMapKernelTag) /* r0drv */ +# define RTR0MemObjMapUserTag RT_MANGLER(RTR0MemObjMapUserTag) /* r0drv */ +# define RTR0MemObjProtect RT_MANGLER(RTR0MemObjProtect) /* r0drv */ +# define RTR0MemObjReserveKernelTag RT_MANGLER(RTR0MemObjReserveKernelTag) /* r0drv */ +# define RTR0MemObjReserveUserTag RT_MANGLER(RTR0MemObjReserveUserTag) /* r0drv */ +# define RTR0MemObjSize RT_MANGLER(RTR0MemObjSize) /* r0drv */ +# define RTR0MemUserCopyFrom RT_MANGLER(RTR0MemUserCopyFrom) /* r0drv */ +# define RTR0MemUserCopyTo RT_MANGLER(RTR0MemUserCopyTo) /* r0drv */ +# define RTR0MemUserIsValidAddr RT_MANGLER(RTR0MemUserIsValidAddr) /* r0drv */ +# define RTR0ProcHandleSelf RT_MANGLER(RTR0ProcHandleSelf) /* r0drv */ +# define RTR0Term RT_MANGLER(RTR0Term) /* r0drv */ +# define RTR0TermForced RT_MANGLER(RTR0TermForced) /* r0drv */ +# define RTR3InitDll RT_MANGLER(RTR3InitDll) +# define RTR3InitExe RT_MANGLER(RTR3InitExe) +# define RTR3InitExeNoArguments RT_MANGLER(RTR3InitExeNoArguments) +# define RTR3InitEx RT_MANGLER(RTR3InitEx) +# define RTR3InitIsInitialized RT_MANGLER(RTR3InitIsInitialized) +# define RTR3InitIsUnobtrusive RT_MANGLER(RTR3InitIsUnobtrusive) +# define rtR3MemAlloc RT_MANGLER(rtR3MemAlloc) +# define rtR3MemFree RT_MANGLER(rtR3MemFree) +# define rtR3MemRealloc RT_MANGLER(rtR3MemRealloc) +# define RTRCInit RT_MANGLER(RTRCInit) +# define RTRCTerm RT_MANGLER(RTRCTerm) +# define RTRandAdvBytes RT_MANGLER(RTRandAdvBytes) +# define RTRandAdvCreateParkMiller RT_MANGLER(RTRandAdvCreateParkMiller) +# define RTRandAdvCreateSystemFaster RT_MANGLER(RTRandAdvCreateSystemFaster) +# define RTRandAdvCreateSystemTruer RT_MANGLER(RTRandAdvCreateSystemTruer) +# define RTRandAdvDestroy RT_MANGLER(RTRandAdvDestroy) +# define RTRandAdvRestoreState RT_MANGLER(RTRandAdvRestoreState) +# define RTRandAdvS32 RT_MANGLER(RTRandAdvS32) +# define RTRandAdvS32Ex RT_MANGLER(RTRandAdvS32Ex) +# define RTRandAdvS64 RT_MANGLER(RTRandAdvS64) +# define RTRandAdvS64Ex RT_MANGLER(RTRandAdvS64Ex) +# define RTRandAdvSaveState RT_MANGLER(RTRandAdvSaveState) +# define RTRandAdvSeed RT_MANGLER(RTRandAdvSeed) +# define RTRandAdvU32 RT_MANGLER(RTRandAdvU32) +# define RTRandAdvU32Ex RT_MANGLER(RTRandAdvU32Ex) +# define RTRandAdvU64 RT_MANGLER(RTRandAdvU64) +# define RTRandAdvU64Ex RT_MANGLER(RTRandAdvU64Ex) +# define RTRandBytes RT_MANGLER(RTRandBytes) +# define RTRandS32 RT_MANGLER(RTRandS32) +# define RTRandS32Ex RT_MANGLER(RTRandS32Ex) +# define RTRandS64 RT_MANGLER(RTRandS64) +# define RTRandS64Ex RT_MANGLER(RTRandS64Ex) +# define RTRandU32 RT_MANGLER(RTRandU32) +# define RTRandU32Ex RT_MANGLER(RTRandU32Ex) +# define RTRandU64 RT_MANGLER(RTRandU64) +# define RTRandU64Ex RT_MANGLER(RTRandU64Ex) +# define RTReqPoolAlloc RT_MANGLER(RTReqPoolAlloc) +# define RTReqPoolCallEx RT_MANGLER(RTReqPoolCallEx) +# define RTReqPoolCallExV RT_MANGLER(RTReqPoolCallExV) +# define RTReqPoolCallWait RT_MANGLER(RTReqPoolCallWait) +# define RTReqPoolCallNoWait RT_MANGLER(RTReqPoolCallNoWait) +# define RTReqPoolCallVoidWait RT_MANGLER(RTReqPoolCallVoidWait) +# define RTReqPoolCallVoidNoWait RT_MANGLER(RTReqPoolCallVoidNoWait) +# define RTReqPoolCreate RT_MANGLER(RTReqPoolCreate) +# define RTReqPoolGetCfgVar RT_MANGLER(RTReqPoolGetCfgVar) +# define RTReqPoolGetStat RT_MANGLER(RTReqPoolGetStat) +# define RTReqPoolRetain RT_MANGLER(RTReqPoolRetain) +# define RTReqPoolRelease RT_MANGLER(RTReqPoolRelease) +# define RTReqPoolSetCfgVar RT_MANGLER(RTReqPoolSetCfgVar) +# define RTReqQueueAlloc RT_MANGLER(RTReqQueueAlloc) +# define RTReqQueueCall RT_MANGLER(RTReqQueueCall) +# define RTReqQueueCallEx RT_MANGLER(RTReqQueueCallEx) +# define RTReqQueueCallV RT_MANGLER(RTReqQueueCallV) +# define RTReqQueueCallVoid RT_MANGLER(RTReqQueueCallVoid) +# define RTReqQueueCreate RT_MANGLER(RTReqQueueCreate) +# define RTReqQueueDestroy RT_MANGLER(RTReqQueueDestroy) +# define RTReqQueueIsBusy RT_MANGLER(RTReqQueueIsBusy) +# define RTReqQueueProcess RT_MANGLER(RTReqQueueProcess) +# define RTReqSubmit RT_MANGLER(RTReqSubmit) +# define RTReqRelease RT_MANGLER(RTReqRelease) +# define RTReqRetain RT_MANGLER(RTReqRetain) +# define RTReqWait RT_MANGLER(RTReqWait) +# define RTReqGetStatus RT_MANGLER(RTReqGetStatus) +# define RTS3BucketsDestroy RT_MANGLER(RTS3BucketsDestroy) +# define RTS3Create RT_MANGLER(RTS3Create) +# define RTS3CreateBucket RT_MANGLER(RTS3CreateBucket) +# define RTS3DeleteBucket RT_MANGLER(RTS3DeleteBucket) +# define RTS3DeleteKey RT_MANGLER(RTS3DeleteKey) +# define RTS3Destroy RT_MANGLER(RTS3Destroy) +# define RTS3GetBucketKeys RT_MANGLER(RTS3GetBucketKeys) +# define RTS3GetBuckets RT_MANGLER(RTS3GetBuckets) +# define RTS3GetKey RT_MANGLER(RTS3GetKey) +# define RTS3KeysDestroy RT_MANGLER(RTS3KeysDestroy) +# define RTS3PutKey RT_MANGLER(RTS3PutKey) +# define RTS3SetProgressCallback RT_MANGLER(RTS3SetProgressCallback) +# define RTSemEventAddSignaller RT_MANGLER(RTSemEventAddSignaller) +# define RTSemEventCreate RT_MANGLER(RTSemEventCreate) +# define RTSemEventCreateEx RT_MANGLER(RTSemEventCreateEx) +# define RTSemEventDestroy RT_MANGLER(RTSemEventDestroy) +# define RTSemEventGetResolution RT_MANGLER(RTSemEventGetResolution) /* r0drv */ +# define RTSemEventMultiAddSignaller RT_MANGLER(RTSemEventMultiAddSignaller) +# define RTSemEventMultiCreate RT_MANGLER(RTSemEventMultiCreate) +# define RTSemEventMultiCreateEx RT_MANGLER(RTSemEventMultiCreateEx) +# define RTSemEventMultiDestroy RT_MANGLER(RTSemEventMultiDestroy) +# define RTSemEventMultiGetResolution RT_MANGLER(RTSemEventMultiGetResolution) /* r0drv */ +# define RTSemEventMultiRemoveSignaller RT_MANGLER(RTSemEventMultiRemoveSignaller) +# define RTSemEventMultiReset RT_MANGLER(RTSemEventMultiReset) +# define RTSemEventMultiSetSignaller RT_MANGLER(RTSemEventMultiSetSignaller) +# define RTSemEventMultiSignal RT_MANGLER(RTSemEventMultiSignal) +# define RTSemEventMultiWait RT_MANGLER(RTSemEventMultiWait) +# define RTSemEventMultiWaitEx RT_MANGLER(RTSemEventMultiWaitEx) +# define RTSemEventMultiWaitEx RT_MANGLER(RTSemEventMultiWaitEx) /* r0drv */ +# define RTSemEventMultiWaitExDebug RT_MANGLER(RTSemEventMultiWaitExDebug) +# define RTSemEventMultiWaitExDebug RT_MANGLER(RTSemEventMultiWaitExDebug) /* r0drv */ +# define RTSemEventMultiWaitNoResume RT_MANGLER(RTSemEventMultiWaitNoResume) +# define RTSemEventRemoveSignaller RT_MANGLER(RTSemEventRemoveSignaller) +# define RTSemEventSetSignaller RT_MANGLER(RTSemEventSetSignaller) +# define RTSemEventSignal RT_MANGLER(RTSemEventSignal) +# define RTSemEventWait RT_MANGLER(RTSemEventWait) +# define RTSemEventWaitEx RT_MANGLER(RTSemEventWaitEx) /* r0drv */ +# define RTSemEventWaitExDebug RT_MANGLER(RTSemEventWaitExDebug) /* r0drv */ +# define RTSemEventWaitNoResume RT_MANGLER(RTSemEventWaitNoResume) +# define RTSemFastMutexCreate RT_MANGLER(RTSemFastMutexCreate) +# define RTSemFastMutexDestroy RT_MANGLER(RTSemFastMutexDestroy) +# define RTSemFastMutexRelease RT_MANGLER(RTSemFastMutexRelease) +# define RTSemFastMutexRequest RT_MANGLER(RTSemFastMutexRequest) +# define RTSemMutexCreate RT_MANGLER(RTSemMutexCreate) +# define RTSemMutexCreateEx RT_MANGLER(RTSemMutexCreateEx) +# define RTSemMutexDestroy RT_MANGLER(RTSemMutexDestroy) +# define RTSemMutexIsOwned RT_MANGLER(RTSemMutexIsOwned) +# define RTSemMutexRelease RT_MANGLER(RTSemMutexRelease) +# define RTSemMutexRequest RT_MANGLER(RTSemMutexRequest) +# define RTSemMutexRequestDebug RT_MANGLER(RTSemMutexRequestDebug) +# define RTSemMutexRequestNoResume RT_MANGLER(RTSemMutexRequestNoResume) +# define RTSemMutexRequestNoResumeDebug RT_MANGLER(RTSemMutexRequestNoResumeDebug) +# define RTSemMutexSetSubClass RT_MANGLER(RTSemMutexSetSubClass) +# define RTSemPing RT_MANGLER(RTSemPing) +# define RTSemPingPongDelete RT_MANGLER(RTSemPingPongDelete) +# define RTSemPingPongInit RT_MANGLER(RTSemPingPongInit) +# define RTSemPingWait RT_MANGLER(RTSemPingWait) +# define RTSemPong RT_MANGLER(RTSemPong) +# define RTSemPongWait RT_MANGLER(RTSemPongWait) +# define RTSemRWCreate RT_MANGLER(RTSemRWCreate) +# define RTSemRWCreateEx RT_MANGLER(RTSemRWCreateEx) +# define RTSemRWDestroy RT_MANGLER(RTSemRWDestroy) +# define RTSemRWGetReadCount RT_MANGLER(RTSemRWGetReadCount) +# define RTSemRWGetWriteRecursion RT_MANGLER(RTSemRWGetWriteRecursion) +# define RTSemRWGetWriterReadRecursion RT_MANGLER(RTSemRWGetWriterReadRecursion) +# define RTSemRWIsReadOwner RT_MANGLER(RTSemRWIsReadOwner) +# define RTSemRWIsWriteOwner RT_MANGLER(RTSemRWIsWriteOwner) +# define RTSemRWReleaseRead RT_MANGLER(RTSemRWReleaseRead) +# define RTSemRWReleaseWrite RT_MANGLER(RTSemRWReleaseWrite) +# define RTSemRWRequestRead RT_MANGLER(RTSemRWRequestRead) +# define RTSemRWRequestReadDebug RT_MANGLER(RTSemRWRequestReadDebug) +# define RTSemRWRequestReadNoResume RT_MANGLER(RTSemRWRequestReadNoResume) +# define RTSemRWRequestReadNoResumeDebug RT_MANGLER(RTSemRWRequestReadNoResumeDebug) +# define RTSemRWRequestWrite RT_MANGLER(RTSemRWRequestWrite) +# define RTSemRWRequestWriteDebug RT_MANGLER(RTSemRWRequestWriteDebug) +# define RTSemRWRequestWriteNoResume RT_MANGLER(RTSemRWRequestWriteNoResume) +# define RTSemRWRequestWriteNoResumeDebug RT_MANGLER(RTSemRWRequestWriteNoResumeDebug) +# define RTSemRWSetSubClass RT_MANGLER(RTSemRWSetSubClass) +# define RTSemSpinMutexCreate RT_MANGLER(RTSemSpinMutexCreate) +# define RTSemSpinMutexDestroy RT_MANGLER(RTSemSpinMutexDestroy) +# define RTSemSpinMutexRelease RT_MANGLER(RTSemSpinMutexRelease) +# define RTSemSpinMutexRequest RT_MANGLER(RTSemSpinMutexRequest) +# define RTSemSpinMutexTryRequest RT_MANGLER(RTSemSpinMutexTryRequest) +# define RTSemXRoadsCreate RT_MANGLER(RTSemXRoadsCreate) +# define RTSemXRoadsDestroy RT_MANGLER(RTSemXRoadsDestroy) +# define RTSemXRoadsEWEnter RT_MANGLER(RTSemXRoadsEWEnter) +# define RTSemXRoadsEWLeave RT_MANGLER(RTSemXRoadsEWLeave) +# define RTSemXRoadsNSEnter RT_MANGLER(RTSemXRoadsNSEnter) +# define RTSemXRoadsNSLeave RT_MANGLER(RTSemXRoadsNSLeave) +# define RTSgBufAdvance RT_MANGLER(RTSgBufAdvance) +# define RTSgBufClone RT_MANGLER(RTSgBufClone) +# define RTSgBufCmp RT_MANGLER(RTSgBufCmp) +# define RTSgBufCmpEx RT_MANGLER(RTSgBufCmpEx) +# define RTSgBufCopy RT_MANGLER(RTSgBufCopy) +# define RTSgBufCopyFromBuf RT_MANGLER(RTSgBufCopyFromBuf) +# define RTSgBufCopyToBuf RT_MANGLER(RTSgBufCopyToBuf) +# define RTSgBufInit RT_MANGLER(RTSgBufInit) +# define RTSgBufIsZero RT_MANGLER(RTSgBufIsZero) +# define RTSgBufReset RT_MANGLER(RTSgBufReset) +# define RTSgBufSegArrayCreate RT_MANGLER(RTSgBufSegArrayCreate) +# define RTSgBufSet RT_MANGLER(RTSgBufSet) +# define RTSgBufGetNextSegment RT_MANGLER(RTSgBufGetNextSegment) +# define RTSha1 RT_MANGLER(RTSha1) +# define RTSha1Check RT_MANGLER(RTSha1Check) +# define RTSha1Digest RT_MANGLER(RTSha1Digest) +# define RTSha1DigestFromFile RT_MANGLER(RTSha1DigestFromFile) +# define RTSha1Final RT_MANGLER(RTSha1Final) +# define RTSha1FromString RT_MANGLER(RTSha1FromString) +# define RTSha1Init RT_MANGLER(RTSha1Init) +# define RTSha1ToString RT_MANGLER(RTSha1ToString) +# define RTSha1Update RT_MANGLER(RTSha1Update) +# define RTSha224 RT_MANGLER(RTSha224) +# define RTSha224Check RT_MANGLER(RTSha224Check) +# define RTSha224Final RT_MANGLER(RTSha224Final) +# define RTSha224FromString RT_MANGLER(RTSha224FromString) +# define RTSha224Init RT_MANGLER(RTSha224Init) +# define RTSha224ToString RT_MANGLER(RTSha224ToString) +# define RTSha224Update RT_MANGLER(RTSha224Update) +# define RTSha224Digest RT_MANGLER(RTSha224Digest) +# define RTSha224DigestFromFile RT_MANGLER(RTSha224DigestFromFile) +# define RTSha256 RT_MANGLER(RTSha256) +# define RTSha256Check RT_MANGLER(RTSha256Check) +# define RTSha256Final RT_MANGLER(RTSha256Final) +# define RTSha256FromString RT_MANGLER(RTSha256FromString) +# define RTSha256Init RT_MANGLER(RTSha256Init) +# define RTSha256ToString RT_MANGLER(RTSha256ToString) +# define RTSha256Update RT_MANGLER(RTSha256Update) +# define RTSha256Digest RT_MANGLER(RTSha256Digest) +# define RTSha256DigestFromFile RT_MANGLER(RTSha256DigestFromFile) +# define RTSha384 RT_MANGLER(RTSha384) +# define RTSha384Check RT_MANGLER(RTSha384Check) +# define RTSha384Final RT_MANGLER(RTSha384Final) +# define RTSha384FromString RT_MANGLER(RTSha384FromString) +# define RTSha384Init RT_MANGLER(RTSha384Init) +# define RTSha384ToString RT_MANGLER(RTSha384ToString) +# define RTSha384Update RT_MANGLER(RTSha384Update) +# define RTSha512 RT_MANGLER(RTSha512) +# define RTSha512Check RT_MANGLER(RTSha512Check) +# define RTSha512Final RT_MANGLER(RTSha512Final) +# define RTSha512FromString RT_MANGLER(RTSha512FromString) +# define RTSha512Init RT_MANGLER(RTSha512Init) +# define RTSha512ToString RT_MANGLER(RTSha512ToString) +# define RTSha512Update RT_MANGLER(RTSha512Update) +# define RTSha512t224 RT_MANGLER(RTSha512t224) +# define RTSha512t224Check RT_MANGLER(RTSha512t224Check) +# define RTSha512t224Final RT_MANGLER(RTSha512t224Final) +# define RTSha512t224FromString RT_MANGLER(RTSha512t224FromString) +# define RTSha512t224Init RT_MANGLER(RTSha512t224Init) +# define RTSha512t224ToString RT_MANGLER(RTSha512t224ToString) +# define RTSha512t224Update RT_MANGLER(RTSha512t224Update) +# define RTSha512t256 RT_MANGLER(RTSha512t256) +# define RTSha512t256Check RT_MANGLER(RTSha512t256Check) +# define RTSha512t256Final RT_MANGLER(RTSha512t256Final) +# define RTSha512t256FromString RT_MANGLER(RTSha512t256FromString) +# define RTSha512t256Init RT_MANGLER(RTSha512t256Init) +# define RTSha512t256ToString RT_MANGLER(RTSha512t256ToString) +# define RTSha512t256Update RT_MANGLER(RTSha512t256Update) +# define RTSocketClose RT_MANGLER(RTSocketClose) +# define RTSocketFromNative RT_MANGLER(RTSocketFromNative) +# define RTSocketQueryAddressStr RT_MANGLER(RTSocketQueryAddressStr) +# define RTSocketGetLocalAddress RT_MANGLER(RTSocketGetLocalAddress) +# define RTSocketGetPeerAddress RT_MANGLER(RTSocketGetPeerAddress) +# define RTSocketParseInetAddress RT_MANGLER(RTSocketParseInetAddress) +# define RTSocketRead RT_MANGLER(RTSocketRead) +# define RTSocketReadFrom RT_MANGLER(RTSocketReadFrom) +# define RTSocketReadNB RT_MANGLER(RTSocketReadNB) +# define RTSocketRelease RT_MANGLER(RTSocketRelease) +# define RTSocketRetain RT_MANGLER(RTSocketRetain) +# define RTSocketSelectOne RT_MANGLER(RTSocketSelectOne) +# define RTSocketSelectOneEx RT_MANGLER(RTSocketSelectOneEx) +# define RTSocketSetInheritance RT_MANGLER(RTSocketSetInheritance) +# define RTSocketSgWrite RT_MANGLER(RTSocketSgWrite) +# define RTSocketSgWriteL RT_MANGLER(RTSocketSgWriteL) +# define RTSocketSgWriteLNB RT_MANGLER(RTSocketSgWriteLNB) +# define RTSocketSgWriteLV RT_MANGLER(RTSocketSgWriteLV) +# define RTSocketSgWriteLVNB RT_MANGLER(RTSocketSgWriteLVNB) +# define RTSocketSgWriteNB RT_MANGLER(RTSocketSgWriteNB) +# define RTSocketShutdown RT_MANGLER(RTSocketShutdown) +# define RTSocketToNative RT_MANGLER(RTSocketToNative) +# define RTSocketWrite RT_MANGLER(RTSocketWrite) +# define RTSocketWriteNB RT_MANGLER(RTSocketWriteNB) +# define RTSocketWriteTo RT_MANGLER(RTSocketWriteTo) +# define RTSocketWriteToNB RT_MANGLER(RTSocketWriteToNB) +# define RTSortApvIsSorted RT_MANGLER(RTSortApvIsSorted) +# define RTSortApvShell RT_MANGLER(RTSortApvShell) +# define RTSortIsSorted RT_MANGLER(RTSortIsSorted) +# define RTSortShell RT_MANGLER(RTSortShell) +# define RTSpinlockAcquire RT_MANGLER(RTSpinlockAcquire) +# define RTSpinlockAcquireNoInts RT_MANGLER(RTSpinlockAcquireNoInts) +# define RTSpinlockCreate RT_MANGLER(RTSpinlockCreate) +# define RTSpinlockDestroy RT_MANGLER(RTSpinlockDestroy) +# define RTSpinlockRelease RT_MANGLER(RTSpinlockRelease) +# define RTStrAAppendExNVTag RT_MANGLER(RTStrAAppendExNVTag) +# define RTStrAAppendNTag RT_MANGLER(RTStrAAppendNTag) +# define RTStrAAppendTag RT_MANGLER(RTStrAAppendTag) +# define RTStrAllocExTag RT_MANGLER(RTStrAllocExTag) +# define RTStrAllocTag RT_MANGLER(RTStrAllocTag) +# define RTStrAPrintf2VTag RT_MANGLER(RTStrAPrintf2VTag) +# define RTStrAPrintfVTag RT_MANGLER(RTStrAPrintfVTag) +# define RTStrATruncateTag RT_MANGLER(RTStrATruncateTag) +# define RTStrCacheCreate RT_MANGLER(RTStrCacheCreate) +# define RTStrCacheDestroy RT_MANGLER(RTStrCacheDestroy) +# define RTStrCacheEnter RT_MANGLER(RTStrCacheEnter) +# define RTStrCacheEnterLower RT_MANGLER(RTStrCacheEnterLower) +# define RTStrCacheEnterLowerN RT_MANGLER(RTStrCacheEnterLowerN) +# define RTStrCacheEnterN RT_MANGLER(RTStrCacheEnterN) +# define RTStrCacheGetStats RT_MANGLER(RTStrCacheGetStats) +# define RTStrCacheIsRealImpl RT_MANGLER(RTStrCacheIsRealImpl) +# define RTStrCacheLength RT_MANGLER(RTStrCacheLength) +# define RTStrCacheRelease RT_MANGLER(RTStrCacheRelease) +# define RTStrCacheRetain RT_MANGLER(RTStrCacheRetain) +# define RTStrCalcLatin1Len RT_MANGLER(RTStrCalcLatin1Len) +# define RTStrCalcLatin1LenEx RT_MANGLER(RTStrCalcLatin1LenEx) +# define RTStrCalcUtf16Len RT_MANGLER(RTStrCalcUtf16Len) +# define RTStrCalcUtf16LenEx RT_MANGLER(RTStrCalcUtf16LenEx) +# define RTStrCat RT_MANGLER(RTStrCat) +# define RTStrCatEx RT_MANGLER(RTStrCatEx) +# define RTStrCatP RT_MANGLER(RTStrCatP) +# define RTStrCatPEx RT_MANGLER(RTStrCatPEx) +# define RTStrCmp RT_MANGLER(RTStrCmp) +# define RTStrConvertHexBytes RT_MANGLER(RTStrConvertHexBytes) +# define RTStrCopy RT_MANGLER(RTStrCopy) +# define RTStrCopyEx RT_MANGLER(RTStrCopyEx) +# define RTStrCopyP RT_MANGLER(RTStrCopyP) +# define RTStrCopyPEx RT_MANGLER(RTStrCopyPEx) +# define RTStrCurrentCPToUtf8Tag RT_MANGLER(RTStrCurrentCPToUtf8Tag) +# define RTStrDupExTag RT_MANGLER(RTStrDupExTag) +# define RTStrDupNTag RT_MANGLER(RTStrDupNTag) +# define RTStrDupTag RT_MANGLER(RTStrDupTag) +# define RTStrFormat RT_MANGLER(RTStrFormat) +# define RTStrFormatNumber RT_MANGLER(RTStrFormatNumber) +# define RTStrFormatR80 RT_MANGLER(RTStrFormatR80) +# define RTStrFormatR80u2 RT_MANGLER(RTStrFormatR80u2) +# define RTStrFormatTypeDeregister RT_MANGLER(RTStrFormatTypeDeregister) +# define RTStrFormatTypeRegister RT_MANGLER(RTStrFormatTypeRegister) +# define RTStrFormatTypeSetUser RT_MANGLER(RTStrFormatTypeSetUser) +# define RTStrFormatU128 RT_MANGLER(RTStrFormatU128) +# define RTStrFormatU256 RT_MANGLER(RTStrFormatU256) +# define RTStrFormatU512 RT_MANGLER(RTStrFormatU512) +# define RTStrFormatU16 RT_MANGLER(RTStrFormatU16) +# define RTStrFormatU32 RT_MANGLER(RTStrFormatU32) +# define RTStrFormatU64 RT_MANGLER(RTStrFormatU64) +# define RTStrFormatU8 RT_MANGLER(RTStrFormatU8) +# define RTStrFormatV RT_MANGLER(RTStrFormatV) +# define RTStrFree RT_MANGLER(RTStrFree) +# define RTStrGetCpExInternal RT_MANGLER(RTStrGetCpExInternal) +# define RTStrGetCpInternal RT_MANGLER(RTStrGetCpInternal) +# define RTStrGetCpNExInternal RT_MANGLER(RTStrGetCpNExInternal) +# define RTStrHash1 RT_MANGLER(RTStrHash1) +# define RTStrHash1ExN RT_MANGLER(RTStrHash1ExN) +# define RTStrHash1ExNV RT_MANGLER(RTStrHash1ExNV) +# define RTStrHash1N RT_MANGLER(RTStrHash1N) +# define RTStrICmp RT_MANGLER(RTStrICmp) +# define RTStrICmpAscii RT_MANGLER(RTStrICmpAscii) +# define RTStrIStartsWith RT_MANGLER(RTStrIStartsWith) +# define RTStrIStr RT_MANGLER(RTStrIStr) +# define RTStrIsCaseFoldable RT_MANGLER(RTStrIsCaseFoldable) +# define RTStrIsLowerCased RT_MANGLER(RTStrIsLowerCased) +# define RTStrIsUpperCased RT_MANGLER(RTStrIsUpperCased) +# define RTStrIsValidEncoding RT_MANGLER(RTStrIsValidEncoding) +# define RTStrmClearError RT_MANGLER(RTStrmClearError) +# define RTStrmClose RT_MANGLER(RTStrmClose) +# define RTStrmError RT_MANGLER(RTStrmError) +# define RTStrmFlush RT_MANGLER(RTStrmFlush) +# define RTStrmGetCh RT_MANGLER(RTStrmGetCh) +# define RTStrmGetLine RT_MANGLER(RTStrmGetLine) +# define RTStrmOpen RT_MANGLER(RTStrmOpen) +# define RTStrmOpenF RT_MANGLER(RTStrmOpenF) +# define RTStrmOpenFV RT_MANGLER(RTStrmOpenFV) +# define RTStrmPrintf RT_MANGLER(RTStrmPrintf) +# define RTStrmPrintfV RT_MANGLER(RTStrmPrintfV) +# define RTStrmDumpPrintfV RT_MANGLER(RTStrmDumpPrintfV) +# define RTStrmPutCh RT_MANGLER(RTStrmPutCh) +# define RTStrmPutStr RT_MANGLER(RTStrmPutStr) +# define RTStrmReadEx RT_MANGLER(RTStrmReadEx) +# define RTStrmRewind RT_MANGLER(RTStrmRewind) +# define RTStrmSetMode RT_MANGLER(RTStrmSetMode) +# define RTStrmWriteEx RT_MANGLER(RTStrmWriteEx) +# define RTStrmIsTerminal RT_MANGLER(RTStrmIsTerminal) +# define RTStrmInputGetEchoChars RT_MANGLER(RTStrmInputGetEchoChars) +# define RTStrmInputSetEchoChars RT_MANGLER(RTStrmInputSetEchoChars) +# define RTStrmQueryTerminalWidth RT_MANGLER(RTStrmQueryTerminalWidth) +# define RTStrNCmp RT_MANGLER(RTStrNCmp) +# define RTStrNICmp RT_MANGLER(RTStrNICmp) +# define RTStrNLen RT_MANGLER(RTStrNLen) +# define RTStrNLenEx RT_MANGLER(RTStrNLenEx) +# define RTStrPrevCp RT_MANGLER(RTStrPrevCp) +# define RTStrPrintf RT_MANGLER(RTStrPrintf) +# define RTStrPrintfEx RT_MANGLER(RTStrPrintfEx) +# define RTStrPrintfExV RT_MANGLER(RTStrPrintfExV) +# define RTStrPrintfV RT_MANGLER(RTStrPrintfV) +# define RTStrPrintf2 RT_MANGLER(RTStrPrintf2) +# define RTStrPrintf2Ex RT_MANGLER(RTStrPrintf2Ex) +# define RTStrPrintf2ExV RT_MANGLER(RTStrPrintf2ExV) +# define RTStrPrintf2V RT_MANGLER(RTStrPrintf2V) +# define RTStrPrintHexBytes RT_MANGLER(RTStrPrintHexBytes) +# define RTStrPurgeEncoding RT_MANGLER(RTStrPurgeEncoding) +# define RTStrPurgeComplementSet RT_MANGLER(RTStrPurgeComplementSet) +# define RTStrPutCpInternal RT_MANGLER(RTStrPutCpInternal) +# define RTStrReallocTag RT_MANGLER(RTStrReallocTag) +# define RTStrSimplePatternMatch RT_MANGLER(RTStrSimplePatternMatch) +# define RTStrSimplePatternMultiMatch RT_MANGLER(RTStrSimplePatternMultiMatch) +# define RTStrSimplePatternNMatch RT_MANGLER(RTStrSimplePatternNMatch) +# define RTStrSpaceDestroy RT_MANGLER(RTStrSpaceDestroy) +# define RTStrSpaceEnumerate RT_MANGLER(RTStrSpaceEnumerate) +# define RTStrSpaceGet RT_MANGLER(RTStrSpaceGet) +# define RTStrSpaceGetN RT_MANGLER(RTStrSpaceGetN) +# define RTStrSpaceInsert RT_MANGLER(RTStrSpaceInsert) +# define RTStrSpaceRemove RT_MANGLER(RTStrSpaceRemove) +# define RTStrStartsWith RT_MANGLER(RTStrStartsWith) +# define RTStrStr RT_MANGLER(RTStrStr) +# define RTStrStrip RT_MANGLER(RTStrStrip) +# define RTStrStripL RT_MANGLER(RTStrStripL) +# define RTStrStripR RT_MANGLER(RTStrStripR) +# define RTStrToInt16 RT_MANGLER(RTStrToInt16) +# define RTStrToInt16Ex RT_MANGLER(RTStrToInt16Ex) +# define RTStrToInt16Full RT_MANGLER(RTStrToInt16Full) +# define RTStrToInt32 RT_MANGLER(RTStrToInt32) +# define RTStrToInt32Ex RT_MANGLER(RTStrToInt32Ex) +# define RTStrToInt32Full RT_MANGLER(RTStrToInt32Full) +# define RTStrToInt64 RT_MANGLER(RTStrToInt64) +# define RTStrToInt64Ex RT_MANGLER(RTStrToInt64Ex) +# define RTStrToInt64Full RT_MANGLER(RTStrToInt64Full) +# define RTStrToInt8 RT_MANGLER(RTStrToInt8) +# define RTStrToInt8Ex RT_MANGLER(RTStrToInt8Ex) +# define RTStrToInt8Full RT_MANGLER(RTStrToInt8Full) +# define RTStrToLatin1ExTag RT_MANGLER(RTStrToLatin1ExTag) +# define RTStrToLatin1Tag RT_MANGLER(RTStrToLatin1Tag) +# define RTStrToLower RT_MANGLER(RTStrToLower) +# define RTStrToUInt16 RT_MANGLER(RTStrToUInt16) +# define RTStrToUInt16Ex RT_MANGLER(RTStrToUInt16Ex) +# define RTStrToUInt16Full RT_MANGLER(RTStrToUInt16Full) +# define RTStrToUInt32 RT_MANGLER(RTStrToUInt32) +# define RTStrToUInt32Ex RT_MANGLER(RTStrToUInt32Ex) +# define RTStrToUInt32Full RT_MANGLER(RTStrToUInt32Full) +# define RTStrToUInt64 RT_MANGLER(RTStrToUInt64) +# define RTStrToUInt64Ex RT_MANGLER(RTStrToUInt64Ex) +# define RTStrToUInt64Full RT_MANGLER(RTStrToUInt64Full) +# define RTStrToUInt8 RT_MANGLER(RTStrToUInt8) +# define RTStrToUInt8Ex RT_MANGLER(RTStrToUInt8Ex) +# define RTStrToUInt8Full RT_MANGLER(RTStrToUInt8Full) +# define RTStrToUni RT_MANGLER(RTStrToUni) +# define RTStrToUniEx RT_MANGLER(RTStrToUniEx) +# define RTStrToUpper RT_MANGLER(RTStrToUpper) +# define RTStrToUtf16BigExTag RT_MANGLER(RTStrToUtf16BigExTag) +# define RTStrToUtf16BigTag RT_MANGLER(RTStrToUtf16BigTag) +# define RTStrToUtf16ExTag RT_MANGLER(RTStrToUtf16ExTag) +# define RTStrToUtf16Tag RT_MANGLER(RTStrToUtf16Tag) +# define RTStrUniLen RT_MANGLER(RTStrUniLen) +# define RTStrUniLenEx RT_MANGLER(RTStrUniLenEx) +# define RTStrUtf8ToCurrentCPTag RT_MANGLER(RTStrUtf8ToCurrentCPTag) +# define RTStrValidateEncoding RT_MANGLER(RTStrValidateEncoding) +# define RTStrValidateEncodingEx RT_MANGLER(RTStrValidateEncodingEx) +# define RTStrVersionCompare RT_MANGLER(RTStrVersionCompare) +# define RTSymlinkCreate RT_MANGLER(RTSymlinkCreate) +# define RTSymlinkDelete RT_MANGLER(RTSymlinkDelete) +# define RTSymlinkExists RT_MANGLER(RTSymlinkExists) +# define RTSymlinkIsDangling RT_MANGLER(RTSymlinkIsDangling) +# define RTSymlinkRead RT_MANGLER(RTSymlinkRead) +# define RTSymlinkReadA RT_MANGLER(RTSymlinkReadA) +# define RTSystemIsInsideVM RT_MANGLER(RTSystemIsInsideVM) +# define RTSystemQueryAvailableRam RT_MANGLER(RTSystemQueryAvailableRam) +# define RTSystemQueryDmiString RT_MANGLER(RTSystemQueryDmiString) +# define RTSystemQueryOSInfo RT_MANGLER(RTSystemQueryOSInfo) +# define RTSystemQueryTotalRam RT_MANGLER(RTSystemQueryTotalRam) +# define RTSystemShutdown RT_MANGLER(RTSystemShutdown) +# define RTTarClose RT_MANGLER(RTTarClose) +# define RTTarFileClose RT_MANGLER(RTTarFileClose) +# define RTTarFileGetSize RT_MANGLER(RTTarFileGetSize) +# define RTTarFileOpen RT_MANGLER(RTTarFileOpen) +# define RTTarFileReadAt RT_MANGLER(RTTarFileReadAt) +# define RTTarFileSetSize RT_MANGLER(RTTarFileSetSize) +# define RTTarFileWriteAt RT_MANGLER(RTTarFileWriteAt) +# define RTTarOpen RT_MANGLER(RTTarOpen) +# define RTTcpClientCancelConnect RT_MANGLER(RTTcpClientCancelConnect) +# define RTTcpClientClose RT_MANGLER(RTTcpClientClose) +# define RTTcpClientCloseEx RT_MANGLER(RTTcpClientCloseEx) +# define RTTcpClientConnect RT_MANGLER(RTTcpClientConnect) +# define RTTcpClientConnectEx RT_MANGLER(RTTcpClientConnectEx) +# define RTTcpFlush RT_MANGLER(RTTcpFlush) +# define RTTcpGetLocalAddress RT_MANGLER(RTTcpGetLocalAddress) +# define RTTcpGetPeerAddress RT_MANGLER(RTTcpGetPeerAddress) +# define RTTcpRead RT_MANGLER(RTTcpRead) +# define RTTcpReadNB RT_MANGLER(RTTcpReadNB) +# define RTTcpSelectOne RT_MANGLER(RTTcpSelectOne) +# define RTTcpSelectOneEx RT_MANGLER(RTTcpSelectOneEx) +# define RTTcpServerCreate RT_MANGLER(RTTcpServerCreate) +# define RTTcpServerCreateEx RT_MANGLER(RTTcpServerCreateEx) +# define RTTcpServerDestroy RT_MANGLER(RTTcpServerDestroy) +# define RTTcpServerDisconnectClient RT_MANGLER(RTTcpServerDisconnectClient) +# define RTTcpServerDisconnectClient2 RT_MANGLER(RTTcpServerDisconnectClient2) +# define RTTcpServerListen RT_MANGLER(RTTcpServerListen) +# define RTTcpServerListen2 RT_MANGLER(RTTcpServerListen2) +# define RTTcpServerShutdown RT_MANGLER(RTTcpServerShutdown) +# define RTTcpSetSendCoalescing RT_MANGLER(RTTcpSetSendCoalescing) +# define RTTcpSgWrite RT_MANGLER(RTTcpSgWrite) +# define RTTcpSgWriteL RT_MANGLER(RTTcpSgWriteL) +# define RTTcpSgWriteLNB RT_MANGLER(RTTcpSgWriteLNB) +# define RTTcpSgWriteLV RT_MANGLER(RTTcpSgWriteLV) +# define RTTcpSgWriteLVNB RT_MANGLER(RTTcpSgWriteLVNB) +# define RTTcpSgWriteNB RT_MANGLER(RTTcpSgWriteNB) +# define RTTcpWrite RT_MANGLER(RTTcpWrite) +# define RTTcpWriteNB RT_MANGLER(RTTcpWriteNB) +# define RTTermDeregisterCallback RT_MANGLER(RTTermDeregisterCallback) +# define RTTermRegisterCallback RT_MANGLER(RTTermRegisterCallback) +# define RTTermRunCallbacks RT_MANGLER(RTTermRunCallbacks) +# define RTTestBanner RT_MANGLER(RTTestBanner) +# define RTTestChangeName RT_MANGLER(RTTestChangeName) +# define RTTestCreate RT_MANGLER(RTTestCreate) +# define RTTestCreateChild RT_MANGLER(RTTestCreateChild) +# define RTTestCreateEx RT_MANGLER(RTTestCreateEx) +# define RTTestDestroy RT_MANGLER(RTTestDestroy) +# define RTTestDisableAssertions RT_MANGLER(RTTestDisableAssertions) +# define RTTestErrorCount RT_MANGLER(RTTestErrorCount) +# define RTTestErrorInc RT_MANGLER(RTTestErrorInc) +# define RTTestFailed RT_MANGLER(RTTestFailed) +# define RTTestFailedV RT_MANGLER(RTTestFailedV) +# define RTTestFailureDetails RT_MANGLER(RTTestFailureDetails) +# define RTTestFailureDetailsV RT_MANGLER(RTTestFailureDetailsV) +# define RTTestGuardedAlloc RT_MANGLER(RTTestGuardedAlloc) +# define RTTestGuardedAllocHead RT_MANGLER(RTTestGuardedAllocHead) +# define RTTestGuardedAllocTail RT_MANGLER(RTTestGuardedAllocTail) +# define RTTestGuardedFree RT_MANGLER(RTTestGuardedFree) +# define RTTestIDisableAssertions RT_MANGLER(RTTestIDisableAssertions) +# define RTTestIErrorCount RT_MANGLER(RTTestIErrorCount) +# define RTTestIErrorInc RT_MANGLER(RTTestIErrorInc) +# define RTTestIFailed RT_MANGLER(RTTestIFailed) +# define RTTestIFailedRc RT_MANGLER(RTTestIFailedRc) +# define RTTestIFailedRcV RT_MANGLER(RTTestIFailedRcV) +# define RTTestIFailedV RT_MANGLER(RTTestIFailedV) +# define RTTestIFailureDetails RT_MANGLER(RTTestIFailureDetails) +# define RTTestIFailureDetailsV RT_MANGLER(RTTestIFailureDetailsV) +# define RTTestInitAndCreate RT_MANGLER(RTTestInitAndCreate) +# define RTTestInitExAndCreate RT_MANGLER(RTTestInitExAndCreate) +# define RTTestIPassed RT_MANGLER(RTTestIPassed) +# define RTTestIPassedV RT_MANGLER(RTTestIPassedV) +# define RTTestIPrintf RT_MANGLER(RTTestIPrintf) +# define RTTestIPrintfV RT_MANGLER(RTTestIPrintfV) +# define RTTestIRestoreAssertions RT_MANGLER(RTTestIRestoreAssertions) +# define RTTestISub RT_MANGLER(RTTestISub) +# define RTTestISubDone RT_MANGLER(RTTestISubDone) +# define RTTestISubF RT_MANGLER(RTTestISubF) +# define RTTestISubV RT_MANGLER(RTTestISubV) +# define RTTestIValue RT_MANGLER(RTTestIValue) +# define RTTestIValueF RT_MANGLER(RTTestIValueF) +# define RTTestIValueV RT_MANGLER(RTTestIValueV) +# define RTTestPassed RT_MANGLER(RTTestPassed) +# define RTTestPassedV RT_MANGLER(RTTestPassedV) +# define RTTestPrintf RT_MANGLER(RTTestPrintf) +# define RTTestPrintfNl RT_MANGLER(RTTestPrintfNl) +# define RTTestPrintfNlV RT_MANGLER(RTTestPrintfNlV) +# define RTTestPrintfV RT_MANGLER(RTTestPrintfV) +# define RTTestRestoreAssertions RT_MANGLER(RTTestRestoreAssertions) +# define RTTestSetDefault RT_MANGLER(RTTestSetDefault) +# define RTTestSkipAndDestroy RT_MANGLER(RTTestSkipAndDestroy) +# define RTTestSkipAndDestroyV RT_MANGLER(RTTestSkipAndDestroyV) +# define RTTestSkipped RT_MANGLER(RTTestSkipped) +# define RTTestSkippedV RT_MANGLER(RTTestSkippedV) +# define RTTestSub RT_MANGLER(RTTestSub) +# define RTTestSubDone RT_MANGLER(RTTestSubDone) +# define RTTestSubErrorCount RT_MANGLER(RTTestSubErrorCount) +# define RTTestSubF RT_MANGLER(RTTestSubF) +# define RTTestSubV RT_MANGLER(RTTestSubV) +# define RTTestSummaryAndDestroy RT_MANGLER(RTTestSummaryAndDestroy) +# define RTTestValue RT_MANGLER(RTTestValue) +# define RTTestValueF RT_MANGLER(RTTestValueF) +# define RTTestValueV RT_MANGLER(RTTestValueV) +# define RTThreadAdopt RT_MANGLER(RTThreadAdopt) +# define RTThreadBlocking RT_MANGLER(RTThreadBlocking) +# define RTThreadCreate RT_MANGLER(RTThreadCreate) +# define RTThreadCreateF RT_MANGLER(RTThreadCreateF) +# define RTThreadCreateV RT_MANGLER(RTThreadCreateV) +# define RTThreadCtxHookIsEnabled RT_MANGLER(RTThreadCtxHookIsEnabled) /* r0drv */ +# define RTThreadCtxHookCreate RT_MANGLER(RTThreadCtxHookCreate) /* r0drv */ +# define RTThreadCtxHookDestroy RT_MANGLER(RTThreadCtxHookDestroy) /* r0drv */ +# define RTThreadCtxHookDisable RT_MANGLER(RTThreadCtxHookDisable) /* r0drv */ +# define RTThreadCtxHookEnable RT_MANGLER(RTThreadCtxHookEnable) /* r0drv */ +# define RTThreadFromNative RT_MANGLER(RTThreadFromNative) +# define RTThreadGetAffinity RT_MANGLER(RTThreadGetAffinity) +# define RTThreadGetExecutionTimeMilli RT_MANGLER(RTThreadGetExecutionTimeMilli) +# define RTThreadGetName RT_MANGLER(RTThreadGetName) +# define RTThreadGetNative RT_MANGLER(RTThreadGetNative) +# define RTThreadGetNativeState RT_MANGLER(RTThreadGetNativeState) +# define RTThreadGetReallySleeping RT_MANGLER(RTThreadGetReallySleeping) +# define RTThreadGetState RT_MANGLER(RTThreadGetState) +# define RTThreadGetType RT_MANGLER(RTThreadGetType) +# define RTThreadIsInInterrupt RT_MANGLER(RTThreadIsInInterrupt) /* r0drv */ +# define RTThreadIsInitialized RT_MANGLER(RTThreadIsInitialized) +# define RTThreadIsMain RT_MANGLER(RTThreadIsMain) +# define RTThreadIsSelfAlive RT_MANGLER(RTThreadIsSelfAlive) +# define RTThreadIsSelfKnown RT_MANGLER(RTThreadIsSelfKnown) +# define RTThreadNativeSelf RT_MANGLER(RTThreadNativeSelf) +# define RTThreadPoke RT_MANGLER(RTThreadPoke) /* not-win not-os2 */ +# define RTThreadPreemptDisable RT_MANGLER(RTThreadPreemptDisable) /* r0drv */ +# define RTThreadPreemptIsEnabled RT_MANGLER(RTThreadPreemptIsEnabled) /* r0drv */ +# define RTThreadPreemptIsPending RT_MANGLER(RTThreadPreemptIsPending) /* r0drv */ +# define RTThreadPreemptIsPendingTrusty RT_MANGLER(RTThreadPreemptIsPendingTrusty) /* r0drv */ +# define RTThreadPreemptIsPossible RT_MANGLER(RTThreadPreemptIsPossible) /* r0drv */ +# define RTThreadPreemptRestore RT_MANGLER(RTThreadPreemptRestore) /* r0drv */ +# define RTThreadSelf RT_MANGLER(RTThreadSelf) +# define RTThreadSelfAutoAdopt RT_MANGLER(RTThreadSelfAutoAdopt) +# define RTThreadSelfName RT_MANGLER(RTThreadSelfName) +# define RTThreadSetAffinity RT_MANGLER(RTThreadSetAffinity) +# define RTThreadSetAffinityToCpu RT_MANGLER(RTThreadSetAffinityToCpu) +# define RTThreadSetName RT_MANGLER(RTThreadSetName) +# define RTThreadSetType RT_MANGLER(RTThreadSetType) +# define RTThreadSleep RT_MANGLER(RTThreadSleep) +# define RTThreadSleepNoLog RT_MANGLER(RTThreadSleepNoLog) +# define RTThreadStateName RT_MANGLER(RTThreadStateName) +# define RTThreadUnblocked RT_MANGLER(RTThreadUnblocked) +# define RTThreadUserReset RT_MANGLER(RTThreadUserReset) +# define RTThreadUserSignal RT_MANGLER(RTThreadUserSignal) +# define RTThreadUserWait RT_MANGLER(RTThreadUserWait) +# define RTThreadUserWaitNoResume RT_MANGLER(RTThreadUserWaitNoResume) +# define RTThreadWait RT_MANGLER(RTThreadWait) +# define RTThreadWaitNoResume RT_MANGLER(RTThreadWaitNoResume) +# define RTThreadYield RT_MANGLER(RTThreadYield) +# define RTTimeDbgBad RT_MANGLER(RTTimeDbgBad) +# define RTTimeDbgExpired RT_MANGLER(RTTimeDbgExpired) +# define RTTimeDbgRaces RT_MANGLER(RTTimeDbgRaces) +# define RTTimeDbgSteps RT_MANGLER(RTTimeDbgSteps) +# define RTTimeExplode RT_MANGLER(RTTimeExplode) +# define RTTimeImplode RT_MANGLER(RTTimeImplode) +# define RTTimeIsLeapYear RT_MANGLER(RTTimeIsLeapYear) +# define RTTimeLocalDeltaNano RT_MANGLER(RTTimeLocalDeltaNano) +# define RTTimeLocalExplode RT_MANGLER(RTTimeLocalExplode) +# define RTTimeLocalNow RT_MANGLER(RTTimeLocalNow) +# define RTTimeMilliTS RT_MANGLER(RTTimeMilliTS) +# define RTTimeNanoTS RT_MANGLER(RTTimeNanoTS) +# define RTTimeNanoTSLegacyAsync RT_MANGLER(RTTimeNanoTSLegacyAsync) +# define RTTimeNanoTSLegacyAsync_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsync_EndProc) +# define RTTimeNanoTSLegacyAsyncUseApicId RT_MANGLER(RTTimeNanoTSLegacyAsyncUseApicId) +# define RTTimeNanoTSLegacyAsyncUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseApicId_EndProc) +# define RTTimeNanoTSLegacyAsyncUseRdtscp RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscp) +# define RTTimeNanoTSLegacyAsyncUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscp_EndProc) +# define RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl) +# define RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl_EndProc) +# define RTTimeNanoTSLegacyAsyncUseIdtrLim RT_MANGLER(RTTimeNanoTSLegacyAsyncUseIdtrLim) +# define RTTimeNanoTSLegacyAsyncUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLegacyAsyncUseIdtrLim_EndProc) +# define RTTimeNanoTSLegacySyncInvarNoDelta RT_MANGLER(RTTimeNanoTSLegacySyncInvarNoDelta) +# define RTTimeNanoTSLegacySyncInvarNoDelta_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarNoDelta_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDelta RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDelta) +# define RTTimeNanoTSLegacySyncInvarWithDelta_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDelta_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp_EndProc) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim) +# define RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim_EndProc) +# define RTTimeNanoTSLFenceAsync RT_MANGLER(RTTimeNanoTSLFenceAsync) +# define RTTimeNanoTSLFenceAsync_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsync_EndProc) +# define RTTimeNanoTSLFenceAsyncUseApicId RT_MANGLER(RTTimeNanoTSLFenceAsyncUseApicId) +# define RTTimeNanoTSLFenceAsyncUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseApicId_EndProc) +# define RTTimeNanoTSLFenceAsyncUseRdtscp RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscp) +# define RTTimeNanoTSLFenceAsyncUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscp_EndProc) +# define RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl) +# define RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl_EndProc) +# define RTTimeNanoTSLFenceAsyncUseIdtrLim RT_MANGLER(RTTimeNanoTSLFenceAsyncUseIdtrLim) +# define RTTimeNanoTSLFenceAsyncUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLFenceAsyncUseIdtrLim_EndProc) +# define RTTimeNanoTSLFenceSyncInvarNoDelta RT_MANGLER(RTTimeNanoTSLFenceSyncInvarNoDelta) +# define RTTimeNanoTSLFenceSyncInvarNoDelta_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarNoDelta_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDelta RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDelta) +# define RTTimeNanoTSLFenceSyncInvarWithDelta_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDelta_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp_EndProc) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim) +# define RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim_EndProc RT_MANGLER(RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim_EndProc) +# define RTTimeNormalize RT_MANGLER(RTTimeNormalize) +# define RTTimeNow RT_MANGLER(RTTimeNow) +# define RTTimeProgramMicroTS RT_MANGLER(RTTimeProgramMicroTS) +# define RTTimeProgramMilliTS RT_MANGLER(RTTimeProgramMilliTS) +# define RTTimeProgramNanoTS RT_MANGLER(RTTimeProgramNanoTS) +# define RTTimeProgramSecTS RT_MANGLER(RTTimeProgramSecTS) +# define RTTimeProgramStartNanoTS RT_MANGLER(RTTimeProgramStartNanoTS) +# define RTTimerCanDoHighResolution RT_MANGLER(RTTimerCanDoHighResolution) +# define RTTimerChangeInterval RT_MANGLER(RTTimerChangeInterval) +# define RTTimerCreate RT_MANGLER(RTTimerCreate) +# define RTTimerCreateEx RT_MANGLER(RTTimerCreateEx) +# define RTTimerDestroy RT_MANGLER(RTTimerDestroy) +# define RTTimerGetSystemGranularity RT_MANGLER(RTTimerGetSystemGranularity) /* r0drv */ +# define RTTimerLRCreate RT_MANGLER(RTTimerLRCreate) +# define RTTimerLRCreateEx RT_MANGLER(RTTimerLRCreateEx) +# define RTTimerLRDestroy RT_MANGLER(RTTimerLRDestroy) +# define RTTimerLRStart RT_MANGLER(RTTimerLRStart) +# define RTTimerLRStop RT_MANGLER(RTTimerLRStop) +# define RTTimerLRChangeInterval RT_MANGLER(RTTimerLRChangeInterval) +# define RTTimerReleaseSystemGranularity RT_MANGLER(RTTimerReleaseSystemGranularity) /* r0drv */ +# define RTTimerRequestSystemGranularity RT_MANGLER(RTTimerRequestSystemGranularity) /* r0drv */ +# define RTTimerStart RT_MANGLER(RTTimerStart) +# define RTTimerStop RT_MANGLER(RTTimerStop) +# define RTTimeSet RT_MANGLER(RTTimeSet) +# define RTTimeSpecFromString RT_MANGLER(RTTimeSpecFromString) +# define RTTimeSpecToString RT_MANGLER(RTTimeSpecToString) +# define RTTimeSystemMilliTS RT_MANGLER(RTTimeSystemMilliTS) +# define RTTimeSystemNanoTS RT_MANGLER(RTTimeSystemNanoTS) +# define RTTimeFromString RT_MANGLER(RTTimeFromString) +# define RTTimeToString RT_MANGLER(RTTimeToString) +# define RTTimeZoneGetInfoByUnixName RT_MANGLER(RTTimeZoneGetInfoByUnixName) +# define RTTimeZoneGetInfoByWindowsName RT_MANGLER(RTTimeZoneGetInfoByWindowsName) +# define RTTimeZoneGetInfoByWindowsIndex RT_MANGLER(RTTimeZoneGetInfoByWindowsIndex) +# define RTTimeZoneGetCurrent RT_MANGLER(RTTimeZoneGetCurrent) +# define RTTlsAlloc RT_MANGLER(RTTlsAlloc) +# define RTTlsAllocEx RT_MANGLER(RTTlsAllocEx) +# define RTTlsFree RT_MANGLER(RTTlsFree) +# define RTTlsGet RT_MANGLER(RTTlsGet) +# define RTTlsGetEx RT_MANGLER(RTTlsGetEx) +# define RTTlsSet RT_MANGLER(RTTlsSet) +# define RTTraceBufAddMsg RT_MANGLER(RTTraceBufAddMsg) +# define RTTraceBufAddMsgEx RT_MANGLER(RTTraceBufAddMsgEx) +# define RTTraceBufAddMsgF RT_MANGLER(RTTraceBufAddMsgF) +# define RTTraceBufAddMsgV RT_MANGLER(RTTraceBufAddMsgV) +# define RTTraceBufAddPos RT_MANGLER(RTTraceBufAddPos) +# define RTTraceBufAddPosMsg RT_MANGLER(RTTraceBufAddPosMsg) +# define RTTraceBufAddPosMsgEx RT_MANGLER(RTTraceBufAddPosMsgEx) +# define RTTraceBufAddPosMsgF RT_MANGLER(RTTraceBufAddPosMsgF) +# define RTTraceBufAddPosMsgV RT_MANGLER(RTTraceBufAddPosMsgV) +# define RTTraceBufCarve RT_MANGLER(RTTraceBufCarve) +# define RTTraceBufCreate RT_MANGLER(RTTraceBufCreate) +# define RTTraceBufDisable RT_MANGLER(RTTraceBufDisable) +# define RTTraceBufDumpToAssert RT_MANGLER(RTTraceBufDumpToAssert) +# define RTTraceBufDumpToLog RT_MANGLER(RTTraceBufDumpToLog) +# define RTTraceBufEnable RT_MANGLER(RTTraceBufEnable) +# define RTTraceBufEnumEntries RT_MANGLER(RTTraceBufEnumEntries) +# define RTTraceBufGetEntryCount RT_MANGLER(RTTraceBufGetEntryCount) +# define RTTraceBufGetEntrySize RT_MANGLER(RTTraceBufGetEntrySize) +# define RTTraceBufRelease RT_MANGLER(RTTraceBufRelease) +# define RTTraceBufRetain RT_MANGLER(RTTraceBufRetain) +# define RTTraceGetDefaultBuf RT_MANGLER(RTTraceGetDefaultBuf) +# define RTTraceSetDefaultBuf RT_MANGLER(RTTraceSetDefaultBuf) +# define RTUdpCreateClientSocket RT_MANGLER(RTUdpCreateClientSocket) +# define RTUdpRead RT_MANGLER(RTUdpRead) +# define RTUdpServerCreate RT_MANGLER(RTUdpServerCreate) +# define RTUdpServerCreateEx RT_MANGLER(RTUdpServerCreateEx) +# define RTUdpServerDestroy RT_MANGLER(RTUdpServerDestroy) +# define RTUdpServerListen RT_MANGLER(RTUdpServerListen) +# define RTUdpServerShutdown RT_MANGLER(RTUdpServerShutdown) +# define RTUdpWrite RT_MANGLER(RTUdpWrite) +# define RTUniFree RT_MANGLER(RTUniFree) +# define RTUriCreate RT_MANGLER(RTUriCreate) +# define RTUriFileCreate RT_MANGLER(RTUriFileCreate) +# define RTUriFileCreateEx RT_MANGLER(RTUriFileCreateEx) +# define RTUriFilePath RT_MANGLER(RTUriFilePath) +# define RTUriFilePathEx RT_MANGLER(RTUriFilePathEx) +# define RTUriParse RT_MANGLER(RTUriParse) +# define RTUriParsedAuthority RT_MANGLER(RTUriParsedAuthority) +# define RTUriParsedAuthorityHost RT_MANGLER(RTUriParsedAuthorityHost) +# define RTUriParsedAuthorityPassword RT_MANGLER(RTUriParsedAuthorityPassword) +# define RTUriParsedAuthorityPort RT_MANGLER(RTUriParsedAuthorityPort) +# define RTUriParsedAuthorityUsername RT_MANGLER(RTUriParsedAuthorityUsername) +# define RTUriParsedFragment RT_MANGLER(RTUriParsedFragment) +# define RTUriParsedPath RT_MANGLER(RTUriParsedPath) +# define RTUriParsedScheme RT_MANGLER(RTUriParsedScheme) +# define RTUriParsedQuery RT_MANGLER(RTUriParsedQuery) +# define RTUriIsSchemeMatch RT_MANGLER(RTUriIsSchemeMatch) +# define RTUtf16AllocTag RT_MANGLER(RTUtf16AllocTag) +# define RTUtf16ReallocTag RT_MANGLER(RTUtf16ReallocTag) +# define RTUtf16CalcLatin1Len RT_MANGLER(RTUtf16CalcLatin1Len) +# define RTUtf16CalcLatin1LenEx RT_MANGLER(RTUtf16CalcLatin1LenEx) +# define RTUtf16CalcUtf8Len RT_MANGLER(RTUtf16CalcUtf8Len) +# define RTUtf16CalcUtf8LenEx RT_MANGLER(RTUtf16CalcUtf8LenEx) +# define RTUtf16BigCalcUtf8Len RT_MANGLER(RTUtf16BigCalcUtf8Len) +# define RTUtf16BigCalcUtf8LenEx RT_MANGLER(RTUtf16BigCalcUtf8LenEx) +# define RTUtf16LittleCalcUtf8Len RT_MANGLER(RTUtf16LittleCalcUtf8Len) +# define RTUtf16LittleCalcUtf8LenEx RT_MANGLER(RTUtf16LittleCalcUtf8LenEx) +# define RTUtf16Cmp RT_MANGLER(RTUtf16Cmp) +# define RTUtf16CmpAscii RT_MANGLER(RTUtf16CmpAscii) +# define RTUtf16CmpUtf8 RT_MANGLER(RTUtf16CmpUtf8) +# define RTUtf16DupExTag RT_MANGLER(RTUtf16DupExTag) +# define RTUtf16DupTag RT_MANGLER(RTUtf16DupTag) +# define RTUtf16Free RT_MANGLER(RTUtf16Free) +# define RTUtf16GetCpExInternal RT_MANGLER(RTUtf16GetCpExInternal) +# define RTUtf16BigGetCpExInternal RT_MANGLER(RTUtf16BigGetCpExInternal) +# define RTUtf16GetCpInternal RT_MANGLER(RTUtf16GetCpInternal) +# define RTUtf16BigGetCpInternal RT_MANGLER(RTUtf16BigGetCpInternal) +# define RTUtf16ICmp RT_MANGLER(RTUtf16ICmp) +# define RTUtf16BigICmp RT_MANGLER(RTUtf16BigICmp) +# define RTUtf16ICmpUtf8 RT_MANGLER(RTUtf16ICmpUtf8) +# define RTUtf16NICmp RT_MANGLER(RTUtf16NICmp) +# define RTUtf16BigNICmp RT_MANGLER(RTUtf16BigNICmp) +# define RTUtf16IsValidEncoding RT_MANGLER(RTUtf16IsValidEncoding) +# define RTUtf16Len RT_MANGLER(RTUtf16Len) +# define RTUtf16LocaleICmp RT_MANGLER(RTUtf16LocaleICmp) +# define RTUtf16PutCpInternal RT_MANGLER(RTUtf16PutCpInternal) +# define RTUtf16BigPutCpInternal RT_MANGLER(RTUtf16BigPutCpInternal) +# define RTUtf16ToLatin1ExTag RT_MANGLER(RTUtf16ToLatin1ExTag) +# define RTUtf16ToLatin1Tag RT_MANGLER(RTUtf16ToLatin1Tag) +# define RTUtf16ToLower RT_MANGLER(RTUtf16ToLower) +# define RTUtf16ToUpper RT_MANGLER(RTUtf16ToUpper) +# define RTUtf16PurgeComplementSet RT_MANGLER(RTUtf16PurgeComplementSet) +# define RTUtf16ToUtf8ExTag RT_MANGLER(RTUtf16ToUtf8ExTag) +# define RTUtf16BigToUtf8ExTag RT_MANGLER(RTUtf16BigToUtf8ExTag) +# define RTUtf16LittleToUtf8ExTag RT_MANGLER(RTUtf16LittleToUtf8ExTag) +# define RTUtf16ToUtf8Tag RT_MANGLER(RTUtf16ToUtf8Tag) +# define RTUtf16BigToUtf8Tag RT_MANGLER(RTUtf16BigToUtf8Tag) +# define RTUtf16LittleToUtf8Tag RT_MANGLER(RTUtf16LittleToUtf8Tag) +# define RTUtf16ValidateEncoding RT_MANGLER(RTUtf16ValidateEncoding) +# define RTUtf16ValidateEncodingEx RT_MANGLER(RTUtf16ValidateEncodingEx) +# define RTUuidClear RT_MANGLER(RTUuidClear) +# define RTUuidCompare RT_MANGLER(RTUuidCompare) +# define RTUuidCompare2Strs RT_MANGLER(RTUuidCompare2Strs) +# define RTUuidCompareStr RT_MANGLER(RTUuidCompareStr) +# define RTUuidCreate RT_MANGLER(RTUuidCreate) +# define RTUuidFromStr RT_MANGLER(RTUuidFromStr) +# define RTUuidFromUtf16 RT_MANGLER(RTUuidFromUtf16) +# define RTUuidIsNull RT_MANGLER(RTUuidIsNull) +# define RTUuidToStr RT_MANGLER(RTUuidToStr) +# define RTUuidToUtf16 RT_MANGLER(RTUuidToUtf16) +# define RTVfsChainElementDeregisterProvider RT_MANGLER(RTVfsChainElementDeregisterProvider) +# define RTVfsChainElementRegisterProvider RT_MANGLER(RTVfsChainElementRegisterProvider) +# define RTVfsChainIsSpec RT_MANGLER(RTVfsChainIsSpec) +# define RTVfsChainMsgError RT_MANGLER(RTVfsChainMsgError) +# define RTVfsChainMsgErrorExitFailure RT_MANGLER(RTVfsChainMsgErrorExitFailure) +# define RTVfsChainOpenDir RT_MANGLER(RTVfsChainOpenDir) +# define RTVfsChainOpenParentDir RT_MANGLER(RTVfsChainOpenParentDir) +# define RTVfsChainOpenFile RT_MANGLER(RTVfsChainOpenFile) +# define RTVfsChainOpenIoStream RT_MANGLER(RTVfsChainOpenIoStream) +# define RTVfsChainQueryFinalPath RT_MANGLER(RTVfsChainQueryFinalPath) +# define RTVfsChainQueryInfo RT_MANGLER(RTVfsChainQueryInfo) +# define RTVfsChainSpecCheckAndSetup RT_MANGLER(RTVfsChainSpecCheckAndSetup) +# define RTVfsChainSpecFree RT_MANGLER(RTVfsChainSpecFree) +# define RTVfsChainSpecParse RT_MANGLER(RTVfsChainSpecParse) +# define RTVfsChainSplitOffFinalPath RT_MANGLER(RTVfsChainSplitOffFinalPath) +# define RTVfsChainValidateOpenFileOrIoStream RT_MANGLER(RTVfsChainValidateOpenFileOrIoStream) +# define RTVfsDirRelease RT_MANGLER(RTVfsDirRelease) +# define RTVfsDirRetain RT_MANGLER(RTVfsDirRetain) +# define RTVfsDirRetainDebug RT_MANGLER(RTVfsDirRetainDebug) +# define RTVfsDirOpen RT_MANGLER(RTVfsDirOpen) +# define RTVfsDirOpenDir RT_MANGLER(RTVfsDirOpenDir) +# define RTVfsDirCreateDir RT_MANGLER(RTVfsDirCreateDir) +# define RTVfsDirOpenFile RT_MANGLER(RTVfsDirOpenFile) +# define RTVfsDirOpenFileAsIoStream RT_MANGLER(RTVfsDirOpenFileAsIoStream) +# define RTVfsDirQueryPathInfo RT_MANGLER(RTVfsDirQueryPathInfo) +# define RTVfsDirReadEx RT_MANGLER(RTVfsDirReadEx) +# define RTVfsDirRemoveDir RT_MANGLER(RTVfsDirRemoveDir) +# define RTVfsFileFlush RT_MANGLER(RTVfsFileFlush) +# define RTVfsFileFromBuffer RT_MANGLER(RTVfsFileFromBuffer) +# define RTVfsFileFromRTFile RT_MANGLER(RTVfsFileFromRTFile) +# define RTVfsFileGetOpenFlags RT_MANGLER(RTVfsFileGetOpenFlags) +# define RTVfsFileGetSize RT_MANGLER(RTVfsFileGetSize) +# define RTVfsFileOpen RT_MANGLER(RTVfsFileOpen) +# define RTVfsFileOpenNormal RT_MANGLER(RTVfsFileOpenNormal) +# define RTVfsFilePoll RT_MANGLER(RTVfsFilePoll) +# define RTVfsFileQueryInfo RT_MANGLER(RTVfsFileQueryInfo) +# define RTVfsFileRead RT_MANGLER(RTVfsFileRead) +# define RTVfsFileReadAt RT_MANGLER(RTVfsFileReadAt) +# define RTVfsFileRelease RT_MANGLER(RTVfsFileRelease) +# define RTVfsFileRetain RT_MANGLER(RTVfsFileRetain) +# define RTVfsFileRetainDebug RT_MANGLER(RTVfsFileRetainDebug) +# define RTVfsFileSeek RT_MANGLER(RTVfsFileSeek) +# define RTVfsFileSgRead RT_MANGLER(RTVfsFileSgRead) +# define RTVfsFileSgWrite RT_MANGLER(RTVfsFileSgWrite) +# define RTVfsFileTell RT_MANGLER(RTVfsFileTell) +# define RTVfsFileToIoStream RT_MANGLER(RTVfsFileToIoStream) +# define RTVfsFileWrite RT_MANGLER(RTVfsFileWrite) +# define RTVfsFileWriteAt RT_MANGLER(RTVfsFileWriteAt) +# define RTVfsFsStreamToPrivate RT_MANGLER(RTVfsFsStreamToPrivate) +# define RTVfsFsStrmAdd RT_MANGLER(RTVfsFsStrmAdd) +# define RTVfsFsStrmEnd RT_MANGLER(RTVfsFsStrmEnd) +# define RTVfsFsStrmNext RT_MANGLER(RTVfsFsStrmNext) +# define RTVfsFsStrmPushFile RT_MANGLER(RTVfsFsStrmPushFile) +# define RTVfsFsStrmQueryInfo RT_MANGLER(RTVfsFsStrmQueryInfo) +# define RTVfsFsStrmRelease RT_MANGLER(RTVfsFsStrmRelease) +# define RTVfsFsStrmRetain RT_MANGLER(RTVfsFsStrmRetain) +# define RTVfsFsStrmRetainDebug RT_MANGLER(RTVfsFsStrmRetainDebug) +# define RTVfsFsStrmToDir RT_MANGLER(RTVfsFsStrmToDir) +# define RTVfsFsStrmToNormalDir RT_MANGLER(RTVfsFsStrmToNormalDir) +# define RTVfsFsStrmToDirUndo RT_MANGLER(RTVfsFsStrmToDirUndo) +# define RTVfsIoStreamToPrivate RT_MANGLER(RTVfsIoStreamToPrivate) +# define RTVfsIoStrmFlush RT_MANGLER(RTVfsIoStrmFlush) +# define RTVfsIoStrmFromBuffer RT_MANGLER(RTVfsIoStrmFromBuffer) +# define RTVfsIoStrmFromRTFile RT_MANGLER(RTVfsIoStrmFromRTFile) +# define RTVfsIoStrmFromRTPipe RT_MANGLER(RTVfsIoStrmFromRTPipe) +# define RTVfsIoStrmFromStdHandle RT_MANGLER(RTVfsIoStrmFromStdHandle) +# define RTVfsIoStrmGetOpenFlags RT_MANGLER(RTVfsIoStrmGetOpenFlags) +# define RTVfsIoStrmIsAtEnd RT_MANGLER(RTVfsIoStrmIsAtEnd) +# define RTVfsIoStrmOpenNormal RT_MANGLER(RTVfsIoStrmOpenNormal) +# define RTVfsIoStrmPoll RT_MANGLER(RTVfsIoStrmPoll) +# define RTVfsIoStrmQueryInfo RT_MANGLER(RTVfsIoStrmQueryInfo) +# define RTVfsIoStrmRead RT_MANGLER(RTVfsIoStrmRead) +# define RTVfsIoStrmReadAt RT_MANGLER(RTVfsIoStrmReadAt) +# define RTVfsIoStrmReadAll RT_MANGLER(RTVfsIoStrmReadAll) +# define RTVfsIoStrmReadAllFree RT_MANGLER(RTVfsIoStrmReadAllFree) +# define RTVfsIoStrmRelease RT_MANGLER(RTVfsIoStrmRelease) +# define RTVfsIoStrmRetain RT_MANGLER(RTVfsIoStrmRetain) +# define RTVfsIoStrmRetainDebug RT_MANGLER(RTVfsIoStrmRetainDebug) +# define RTVfsIoStrmSgRead RT_MANGLER(RTVfsIoStrmSgRead) +# define RTVfsIoStrmSgWrite RT_MANGLER(RTVfsIoStrmSgWrite) +# define RTVfsIoStrmSkip RT_MANGLER(RTVfsIoStrmSkip) +# define RTVfsIoStrmTell RT_MANGLER(RTVfsIoStrmTell) +# define RTVfsIoStrmToFile RT_MANGLER(RTVfsIoStrmToFile) +# define RTVfsIoStrmValidateUtf8Encoding RT_MANGLER(RTVfsIoStrmValidateUtf8Encoding) +# define RTVfsIoStrmWrite RT_MANGLER(RTVfsIoStrmWrite) +# define RTVfsIoStrmWriteAt RT_MANGLER(RTVfsIoStrmWriteAt) +# define RTVfsIoStrmZeroFill RT_MANGLER(RTVfsIoStrmZeroFill) +# define RTVfsIsRangeInUse RT_MANGLER(RTVfsIsRangeInUse) +# define RTVfsLockAcquireReadSlow RT_MANGLER(RTVfsLockAcquireReadSlow) +# define RTVfsLockAcquireWriteSlow RT_MANGLER(RTVfsLockAcquireWriteSlow) +# define RTVfsLockRelease RT_MANGLER(RTVfsLockRelease) +# define RTVfsLockReleaseReadSlow RT_MANGLER(RTVfsLockReleaseReadSlow) +# define RTVfsLockReleaseWriteSlow RT_MANGLER(RTVfsLockReleaseWriteSlow) +# define RTVfsLockRetain RT_MANGLER(RTVfsLockRetain) +# define RTVfsLockRetainDebug RT_MANGLER(RTVfsLockRetainDebug) +# define RTVfsMemFileCreate RT_MANGLER(RTVfsMemFileCreate) +# define RTVfsMemIoStrmCreate RT_MANGLER(RTVfsMemIoStrmCreate) +# define RTVfsMemorizeIoStreamAsFile RT_MANGLER(RTVfsMemorizeIoStreamAsFile) +# define RTVfsNew RT_MANGLER(RTVfsNew) +# define RTVfsNewBaseObj RT_MANGLER(RTVfsNewBaseObj) +# define RTVfsNewDir RT_MANGLER(RTVfsNewDir) +# define RTVfsNewFile RT_MANGLER(RTVfsNewFile) +# define RTVfsNewFsStream RT_MANGLER(RTVfsNewFsStream) +# define RTVfsNewIoStream RT_MANGLER(RTVfsNewIoStream) +# define RTVfsNewSymlink RT_MANGLER(RTVfsNewSymlink) +# define RTVfsObjFromDir RT_MANGLER(RTVfsObjFromDir) +# define RTVfsObjFromFile RT_MANGLER(RTVfsObjFromFile) +# define RTVfsObjFromFsStream RT_MANGLER(RTVfsObjFromFsStream) +# define RTVfsObjFromIoStream RT_MANGLER(RTVfsObjFromIoStream) +# define RTVfsObjFromSymlink RT_MANGLER(RTVfsObjFromSymlink) +# define RTVfsObjFromVfs RT_MANGLER(RTVfsObjFromVfs) +# define RTVfsObjQueryInfo RT_MANGLER(RTVfsObjQueryInfo) +# define RTVfsObjRelease RT_MANGLER(RTVfsObjRelease) +# define RTVfsObjRetain RT_MANGLER(RTVfsObjRetain) +# define RTVfsObjRetainDebug RT_MANGLER(RTVfsObjRetainDebug) +# define RTVfsObjToDir RT_MANGLER(RTVfsObjToDir) +# define RTVfsObjToFile RT_MANGLER(RTVfsObjToFile) +# define RTVfsObjToFsStream RT_MANGLER(RTVfsObjToFsStream) +# define RTVfsObjToIoStream RT_MANGLER(RTVfsObjToIoStream) +# define RTVfsObjToSymlink RT_MANGLER(RTVfsObjToSymlink) +# define RTVfsObjToVfs RT_MANGLER(RTVfsObjToVfs) +# define RTVfsParsePath RT_MANGLER(RTVfsParsePath) +# define RTVfsParsePathA RT_MANGLER(RTVfsParsePathA) +# define RTVfsParsePathAppend RT_MANGLER(RTVfsParsePathAppend) +# define RTVfsParsePathFree RT_MANGLER(RTVfsParsePathFree) +# define RTVfsRelease RT_MANGLER(RTVfsRelease) +# define RTVfsOpenRoot RT_MANGLER(RTVfsOpenRoot) +# define RTVfsQuerPathInfo RT_MANGLER(RTVfsQueryPathInfo) +# define RTVfsRetain RT_MANGLER(RTVfsRetain) +# define RTVfsRetainDebug RT_MANGLER(RTVfsRetainDebug) +# define RTVfsSymlinkQueryInfo RT_MANGLER(RTVfsSymlinkQueryInfo) +# define RTVfsSymlinkRead RT_MANGLER(RTVfsSymlinkRead) +# define RTVfsSymlinkRelease RT_MANGLER(RTVfsSymlinkRelease) +# define RTVfsSymlinkRetain RT_MANGLER(RTVfsSymlinkRetain) +# define RTVfsSymlinkRetainDebug RT_MANGLER(RTVfsSymlinkRetainDebug) +# define RTVfsSymlinkSetMode RT_MANGLER(RTVfsSymlinkSetMode) +# define RTVfsSymlinkSetOwner RT_MANGLER(RTVfsSymlinkSetOwner) +# define RTVfsSymlinkSetTimes RT_MANGLER(RTVfsSymlinkSetTimes) +# define RTVfsUtilDummyPollOne RT_MANGLER(RTVfsUtilDummyPollOne) +# define RTVfsUtilPumpIoStreams RT_MANGLER(RTVfsUtilPumpIoStreams) +# define RTVfsCreateProgressForFile RT_MANGLER(RTVfsCreateProgressForFile) +# define RTVfsCreateProgressForIoStream RT_MANGLER(RTVfsCreateProgressForIoStream) +# define RTVfsCreateReadAheadForFile RT_MANGLER(RTVfsCreateReadAheadForFile) +# define RTVfsCreateReadAheadForIoStream RT_MANGLER(RTVfsCreateReadAheadForIoStream) +# define RTZipBlockCompress RT_MANGLER(RTZipBlockCompress) +# define RTZipBlockDecompress RT_MANGLER(RTZipBlockDecompress) +# define RTZipCompCreate RT_MANGLER(RTZipCompCreate) +# define RTZipCompDestroy RT_MANGLER(RTZipCompDestroy) +# define RTZipCompFinish RT_MANGLER(RTZipCompFinish) +# define RTZipCompress RT_MANGLER(RTZipCompress) +# define RTZipDecompCreate RT_MANGLER(RTZipDecompCreate) +# define RTZipDecompDestroy RT_MANGLER(RTZipDecompDestroy) +# define RTZipDecompress RT_MANGLER(RTZipDecompress) +# define RTZipGzipCompressIoStream RT_MANGLER(RTZipGzipCompressIoStream) +# define RTZipGzipDecompressIoStream RT_MANGLER(RTZipGzipDecompressIoStream) +# define RTZipPkzipFsStreamFromIoStream RT_MANGLER(RTZipPkzipFsStreamFromIoStream) +# define RTZipPkzipMemDecompress RT_MANGLER(RTZipPkzipMemDecompress) +# define RTZipTarCmd RT_MANGLER(RTZipTarCmd) +# define RTZipUnzipCmd RT_MANGLER(RTZipUnzipCmd) +# define RTZipTarFsStreamFromIoStream RT_MANGLER(RTZipTarFsStreamFromIoStream) +# define RTZipTarFsStreamToIoStream RT_MANGLER(RTZipTarFsStreamToIoStream) +# define RTZipTarFsStreamSetOwner RT_MANGLER(RTZipTarFsStreamSetOwner) +# define RTZipTarFsStreamSetGroup RT_MANGLER(RTZipTarFsStreamSetGroup) +# define RTZipTarFsStreamSetPrefix RT_MANGLER(RTZipTarFsStreamSetPrefix) +# define RTZipTarFsStreamSetFileMode RT_MANGLER(RTZipTarFsStreamSetFileMode) +# define RTZipTarFsStreamSetDirMode RT_MANGLER(RTZipTarFsStreamSetDirMode) +# define RTZipTarFsStreamSetModTime RT_MANGLER(RTZipTarFsStreamSetModTime) +# define RTZipXarFsStreamFromIoStream RT_MANGLER(RTZipXarFsStreamFromIoStream) + +/* sort/merge into the above later: */ +# define RTAsn1ContentAllocZ RT_MANGLER(RTAsn1ContentAllocZ) +# define RTAsn1ContentDup RT_MANGLER(RTAsn1ContentDup) +# define RTAsn1ContentFree RT_MANGLER(RTAsn1ContentFree) +# define RTAsn1ContentReallocZ RT_MANGLER(RTAsn1ContentReallocZ) +# define RTAsn1ContextTagN_Clone RT_MANGLER(RTAsn1ContextTagN_Clone) +# define RTAsn1ContextTagN_Init RT_MANGLER(RTAsn1ContextTagN_Init) +# define RTAsn1Dummy_InitEx RT_MANGLER(RTAsn1Dummy_InitEx) +# define RTAsn1MemAllocZ RT_MANGLER(RTAsn1MemAllocZ) +# define RTAsn1MemDup RT_MANGLER(RTAsn1MemDup) +# define RTAsn1MemFree RT_MANGLER(RTAsn1MemFree) +# define RTAsn1MemFreeArray RT_MANGLER(RTAsn1MemFreeArray) +# define RTAsn1MemResizeArray RT_MANGLER(RTAsn1MemResizeArray) +# define RTAsn1MemInitAllocation RT_MANGLER(RTAsn1MemInitAllocation) +# define RTAsn1MemInitArrayAllocation RT_MANGLER(RTAsn1MemInitArrayAllocation) +# define RTAsn1SeqOfCore_Clone RT_MANGLER(RTAsn1SeqOfCore_Clone) +# define RTAsn1SeqOfCore_Init RT_MANGLER(RTAsn1SeqOfCore_Init) +# define RTAsn1SequenceCore_Clone RT_MANGLER(RTAsn1SequenceCore_Clone) +# define RTAsn1SequenceCore_Init RT_MANGLER(RTAsn1SequenceCore_Init) +# define RTAsn1SetCore_Clone RT_MANGLER(RTAsn1SetCore_Clone) +# define RTAsn1SetCore_Init RT_MANGLER(RTAsn1SetCore_Init) +# define RTAsn1SetOfCore_Clone RT_MANGLER(RTAsn1SetOfCore_Clone) +# define RTAsn1SetOfCore_Init RT_MANGLER(RTAsn1SetOfCore_Init) +# define RTAsn1VtCheckSanity RT_MANGLER(RTAsn1VtCheckSanity) +# define RTAsn1VtClone RT_MANGLER(RTAsn1VtClone) +# define RTAsn1VtCompare RT_MANGLER(RTAsn1VtCompare) +# define RTAsn1VtDeepEnum RT_MANGLER(RTAsn1VtDeepEnum) +# define RTAsn1VtDelete RT_MANGLER(RTAsn1VtDelete) +# define RTAsn1CursorCheckEnd RT_MANGLER(RTAsn1CursorCheckEnd) +# define RTAsn1CursorGetBitString RT_MANGLER(RTAsn1CursorGetBitString) +# define RTAsn1CursorGetBitStringEx RT_MANGLER(RTAsn1CursorGetBitStringEx) +# define RTAsn1CursorGetBmpString RT_MANGLER(RTAsn1CursorGetBmpString) +# define RTAsn1CursorGetBoolean RT_MANGLER(RTAsn1CursorGetBoolean) +# define RTAsn1CursorGetContextTagNCursor RT_MANGLER(RTAsn1CursorGetContextTagNCursor) +# define RTAsn1CursorGetCore RT_MANGLER(RTAsn1CursorGetCore) +# define RTAsn1CursorGetDynType RT_MANGLER(RTAsn1CursorGetDynType) +# define RTAsn1CursorGetIa5String RT_MANGLER(RTAsn1CursorGetIa5String) +# define RTAsn1CursorGetInteger RT_MANGLER(RTAsn1CursorGetInteger) +# define RTAsn1CursorGetNull RT_MANGLER(RTAsn1CursorGetNull) +# define RTAsn1CursorGetObjId RT_MANGLER(RTAsn1CursorGetObjId) +# define RTAsn1CursorGetOctetString RT_MANGLER(RTAsn1CursorGetOctetString) +# define RTAsn1CursorGetSequenceCursor RT_MANGLER(RTAsn1CursorGetSequenceCursor) +# define RTAsn1CursorGetSetCursor RT_MANGLER(RTAsn1CursorGetSetCursor) +# define RTAsn1CursorGetString RT_MANGLER(RTAsn1CursorGetString) +# define RTAsn1CursorGetTime RT_MANGLER(RTAsn1CursorGetTime) +# define RTAsn1CursorGetUtf8String RT_MANGLER(RTAsn1CursorGetUtf8String) +# define RTAsn1CursorInitAllocation RT_MANGLER(RTAsn1CursorInitAllocation) +# define RTAsn1CursorInitArrayAllocation RT_MANGLER(RTAsn1CursorInitArrayAllocation) +# define RTAsn1CursorInitPrimary RT_MANGLER(RTAsn1CursorInitPrimary) +# define RTAsn1CursorInitSubFromCore RT_MANGLER(RTAsn1CursorInitSubFromCore) +# define RTAsn1CursorIsNextEx RT_MANGLER(RTAsn1CursorIsNextEx) +# define RTAsn1CursorMatchTagClassFlagsEx RT_MANGLER(RTAsn1CursorMatchTagClassFlagsEx) +# define RTAsn1CursorPeek RT_MANGLER(RTAsn1CursorPeek) +# define RTAsn1CursorReadHdr RT_MANGLER(RTAsn1CursorReadHdr) +# define RTAsn1CursorSetInfo RT_MANGLER(RTAsn1CursorSetInfo) +# define RTAsn1CursorSetInfoV RT_MANGLER(RTAsn1CursorSetInfoV) +# define RTAsn1Dump RT_MANGLER(RTAsn1Dump) +# define RTAsn1QueryObjIdName RT_MANGLER(RTAsn1QueryObjIdName) +# define RTAsn1EncodePrepare RT_MANGLER(RTAsn1EncodePrepare) +# define RTAsn1EncodeRecalcHdrSize RT_MANGLER(RTAsn1EncodeRecalcHdrSize) +# define RTAsn1EncodeToBuffer RT_MANGLER(RTAsn1EncodeToBuffer) +# define RTAsn1EncodeWrite RT_MANGLER(RTAsn1EncodeWrite) +# define RTAsn1EncodeWriteHeader RT_MANGLER(RTAsn1EncodeWriteHeader) +# define RTAsn1BitString_CheckSanity RT_MANGLER(RTAsn1BitString_CheckSanity) +# define RTAsn1BitString_Clone RT_MANGLER(RTAsn1BitString_Clone) +# define RTAsn1BitString_Compare RT_MANGLER(RTAsn1BitString_Compare) +# define RTAsn1BitString_Delete RT_MANGLER(RTAsn1BitString_Delete) +# define RTAsn1BitString_Enum RT_MANGLER(RTAsn1BitString_Enum) +# define RTAsn1BitString_GetAsUInt64 RT_MANGLER(RTAsn1BitString_GetAsUInt64) +# define RTAsn1BitString_Init RT_MANGLER(RTAsn1BitString_Init) +# define RTAsn1SeqOfBitStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfBitStrings_CheckSanity) +# define RTAsn1SeqOfBitStrings_Clone RT_MANGLER(RTAsn1SeqOfBitStrings_Clone) +# define RTAsn1SeqOfBitStrings_Compare RT_MANGLER(RTAsn1SeqOfBitStrings_Compare) +# define RTAsn1SeqOfBitStrings_Delete RT_MANGLER(RTAsn1SeqOfBitStrings_Delete) +# define RTAsn1SeqOfBitStrings_Enum RT_MANGLER(RTAsn1SeqOfBitStrings_Enum) +# define RTAsn1SeqOfBitStrings_Init RT_MANGLER(RTAsn1SeqOfBitStrings_Init) +# define RTAsn1SetOfBitStrings_CheckSanity RT_MANGLER(RTAsn1SetOfBitStrings_CheckSanity) +# define RTAsn1SetOfBitStrings_Clone RT_MANGLER(RTAsn1SetOfBitStrings_Clone) +# define RTAsn1SetOfBitStrings_Compare RT_MANGLER(RTAsn1SetOfBitStrings_Compare) +# define RTAsn1SetOfBitStrings_Delete RT_MANGLER(RTAsn1SetOfBitStrings_Delete) +# define RTAsn1SetOfBitStrings_Enum RT_MANGLER(RTAsn1SetOfBitStrings_Enum) +# define RTAsn1SetOfBitStrings_Init RT_MANGLER(RTAsn1SetOfBitStrings_Init) +# define RTAsn1BitString_DecodeAsn1 RT_MANGLER(RTAsn1BitString_DecodeAsn1) +# define RTAsn1BitString_DecodeAsn1Ex RT_MANGLER(RTAsn1BitString_DecodeAsn1Ex) +# define RTAsn1SeqOfBitStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfBitStrings_DecodeAsn1) +# define RTAsn1SetOfBitStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfBitStrings_DecodeAsn1) +# define RTAsn1Boolean_CheckSanity RT_MANGLER(RTAsn1Boolean_CheckSanity) +# define RTAsn1Boolean_Clone RT_MANGLER(RTAsn1Boolean_Clone) +# define RTAsn1Boolean_Compare RT_MANGLER(RTAsn1Boolean_Compare) +# define RTAsn1Boolean_Delete RT_MANGLER(RTAsn1Boolean_Delete) +# define RTAsn1Boolean_Enum RT_MANGLER(RTAsn1Boolean_Enum) +# define RTAsn1Boolean_Init RT_MANGLER(RTAsn1Boolean_Init) +# define RTAsn1Boolean_InitDefault RT_MANGLER(RTAsn1Boolean_InitDefault) +# define RTAsn1Boolean_Set RT_MANGLER(RTAsn1Boolean_Set) +# define RTAsn1SeqOfBooleans_CheckSanity RT_MANGLER(RTAsn1SeqOfBooleans_CheckSanity) +# define RTAsn1SeqOfBooleans_Clone RT_MANGLER(RTAsn1SeqOfBooleans_Clone) +# define RTAsn1SeqOfBooleans_Compare RT_MANGLER(RTAsn1SeqOfBooleans_Compare) +# define RTAsn1SeqOfBooleans_Delete RT_MANGLER(RTAsn1SeqOfBooleans_Delete) +# define RTAsn1SeqOfBooleans_Enum RT_MANGLER(RTAsn1SeqOfBooleans_Enum) +# define RTAsn1SeqOfBooleans_Init RT_MANGLER(RTAsn1SeqOfBooleans_Init) +# define RTAsn1SetOfBooleans_CheckSanity RT_MANGLER(RTAsn1SetOfBooleans_CheckSanity) +# define RTAsn1SetOfBooleans_Clone RT_MANGLER(RTAsn1SetOfBooleans_Clone) +# define RTAsn1SetOfBooleans_Compare RT_MANGLER(RTAsn1SetOfBooleans_Compare) +# define RTAsn1SetOfBooleans_Delete RT_MANGLER(RTAsn1SetOfBooleans_Delete) +# define RTAsn1SetOfBooleans_Enum RT_MANGLER(RTAsn1SetOfBooleans_Enum) +# define RTAsn1SetOfBooleans_Init RT_MANGLER(RTAsn1SetOfBooleans_Init) +# define RTAsn1Boolean_DecodeAsn1 RT_MANGLER(RTAsn1Boolean_DecodeAsn1) +# define RTAsn1SeqOfBooleans_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfBooleans_DecodeAsn1) +# define RTAsn1SetOfBooleans_DecodeAsn1 RT_MANGLER(RTAsn1SetOfBooleans_DecodeAsn1) +# define RTAsn1Core_ChangeTag RT_MANGLER(RTAsn1Core_ChangeTag) +# define RTAsn1Core_CheckSanity RT_MANGLER(RTAsn1Core_CheckSanity) +# define RTAsn1Core_Clone RT_MANGLER(RTAsn1Core_Clone) +# define RTAsn1Core_CloneContent RT_MANGLER(RTAsn1Core_CloneContent) +# define RTAsn1Core_CloneNoContent RT_MANGLER(RTAsn1Core_CloneNoContent) +# define RTAsn1Core_Compare RT_MANGLER(RTAsn1Core_Compare) +# define RTAsn1Core_CompareEx RT_MANGLER(RTAsn1Core_CompareEx) +# define RTAsn1Core_Delete RT_MANGLER(RTAsn1Core_Delete) +# define RTAsn1Core_Enum RT_MANGLER(RTAsn1Core_Enum) +# define RTAsn1Core_Init RT_MANGLER(RTAsn1Core_Init) +# define RTAsn1Core_InitDefault RT_MANGLER(RTAsn1Core_InitDefault) +# define RTAsn1Core_InitEx RT_MANGLER(RTAsn1Core_InitEx) +# define RTAsn1Core_ResetImplict RT_MANGLER(RTAsn1Core_ResetImplict) +# define RTAsn1Core_SetTagAndFlags RT_MANGLER(RTAsn1Core_SetTagAndFlags) +# define RTAsn1SeqOfCores_CheckSanity RT_MANGLER(RTAsn1SeqOfCores_CheckSanity) +# define RTAsn1SeqOfCores_Clone RT_MANGLER(RTAsn1SeqOfCores_Clone) +# define RTAsn1SeqOfCores_Compare RT_MANGLER(RTAsn1SeqOfCores_Compare) +# define RTAsn1SeqOfCores_Delete RT_MANGLER(RTAsn1SeqOfCores_Delete) +# define RTAsn1SeqOfCores_Enum RT_MANGLER(RTAsn1SeqOfCores_Enum) +# define RTAsn1SeqOfCores_Init RT_MANGLER(RTAsn1SeqOfCores_Init) +# define RTAsn1SetOfCores_CheckSanity RT_MANGLER(RTAsn1SetOfCores_CheckSanity) +# define RTAsn1SetOfCores_Clone RT_MANGLER(RTAsn1SetOfCores_Clone) +# define RTAsn1SetOfCores_Compare RT_MANGLER(RTAsn1SetOfCores_Compare) +# define RTAsn1SetOfCores_Delete RT_MANGLER(RTAsn1SetOfCores_Delete) +# define RTAsn1SetOfCores_Enum RT_MANGLER(RTAsn1SetOfCores_Enum) +# define RTAsn1SetOfCores_Init RT_MANGLER(RTAsn1SetOfCores_Init) +# define RTAsn1Core_DecodeAsn1 RT_MANGLER(RTAsn1Core_DecodeAsn1) +# define RTAsn1SeqOfCores_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfCores_DecodeAsn1) +# define RTAsn1SetOfCores_DecodeAsn1 RT_MANGLER(RTAsn1SetOfCores_DecodeAsn1) +# define RTAsn1DynType_CheckSanity RT_MANGLER(RTAsn1DynType_CheckSanity) +# define RTAsn1DynType_Clone RT_MANGLER(RTAsn1DynType_Clone) +# define RTAsn1DynType_Compare RT_MANGLER(RTAsn1DynType_Compare) +# define RTAsn1DynType_Delete RT_MANGLER(RTAsn1DynType_Delete) +# define RTAsn1DynType_Enum RT_MANGLER(RTAsn1DynType_Enum) +# define RTAsn1DynType_Init RT_MANGLER(RTAsn1DynType_Init) +# define RTAsn1DynType_DecodeAsn1 RT_MANGLER(RTAsn1DynType_DecodeAsn1) +# define RTAsn1Integer_CheckSanity RT_MANGLER(RTAsn1Integer_CheckSanity) +# define RTAsn1Integer_Clone RT_MANGLER(RTAsn1Integer_Clone) +# define RTAsn1Integer_Compare RT_MANGLER(RTAsn1Integer_Compare) +# define RTAsn1Integer_Delete RT_MANGLER(RTAsn1Integer_Delete) +# define RTAsn1Integer_Enum RT_MANGLER(RTAsn1Integer_Enum) +# define RTAsn1Integer_FromBigNum RT_MANGLER(RTAsn1Integer_FromBigNum) +# define RTAsn1Integer_Init RT_MANGLER(RTAsn1Integer_Init) +# define RTAsn1Integer_InitDefault RT_MANGLER(RTAsn1Integer_InitDefault) +# define RTAsn1Integer_InitU64 RT_MANGLER(RTAsn1Integer_InitU64) +# define RTAsn1Integer_ToBigNum RT_MANGLER(RTAsn1Integer_ToBigNum) +# define RTAsn1Integer_ToString RT_MANGLER(RTAsn1Integer_ToString) +# define RTAsn1Integer_UnsignedCompare RT_MANGLER(RTAsn1Integer_UnsignedCompare) +# define RTAsn1Integer_UnsignedCompareWithU32 RT_MANGLER(RTAsn1Integer_UnsignedCompareWithU32) +# define RTAsn1Integer_UnsignedCompareWithU64 RT_MANGLER(RTAsn1Integer_UnsignedCompareWithU64) +# define RTAsn1Integer_UnsignedLastBit RT_MANGLER(RTAsn1Integer_UnsignedLastBit) +# define RTAsn1SeqOfIntegers_CheckSanity RT_MANGLER(RTAsn1SeqOfIntegers_CheckSanity) +# define RTAsn1SeqOfIntegers_Clone RT_MANGLER(RTAsn1SeqOfIntegers_Clone) +# define RTAsn1SeqOfIntegers_Compare RT_MANGLER(RTAsn1SeqOfIntegers_Compare) +# define RTAsn1SeqOfIntegers_Delete RT_MANGLER(RTAsn1SeqOfIntegers_Delete) +# define RTAsn1SeqOfIntegers_Enum RT_MANGLER(RTAsn1SeqOfIntegers_Enum) +# define RTAsn1SeqOfIntegers_Init RT_MANGLER(RTAsn1SeqOfIntegers_Init) +# define RTAsn1SetOfIntegers_CheckSanity RT_MANGLER(RTAsn1SetOfIntegers_CheckSanity) +# define RTAsn1SetOfIntegers_Clone RT_MANGLER(RTAsn1SetOfIntegers_Clone) +# define RTAsn1SetOfIntegers_Compare RT_MANGLER(RTAsn1SetOfIntegers_Compare) +# define RTAsn1SetOfIntegers_Delete RT_MANGLER(RTAsn1SetOfIntegers_Delete) +# define RTAsn1SetOfIntegers_Enum RT_MANGLER(RTAsn1SetOfIntegers_Enum) +# define RTAsn1SetOfIntegers_Init RT_MANGLER(RTAsn1SetOfIntegers_Init) +# define RTAsn1Integer_DecodeAsn1 RT_MANGLER(RTAsn1Integer_DecodeAsn1) +# define RTAsn1SeqOfIntegers_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfIntegers_DecodeAsn1) +# define RTAsn1SetOfIntegers_DecodeAsn1 RT_MANGLER(RTAsn1SetOfIntegers_DecodeAsn1) +# define RTAsn1Null_CheckSanity RT_MANGLER(RTAsn1Null_CheckSanity) +# define RTAsn1Null_Clone RT_MANGLER(RTAsn1Null_Clone) +# define RTAsn1Null_Compare RT_MANGLER(RTAsn1Null_Compare) +# define RTAsn1Null_Delete RT_MANGLER(RTAsn1Null_Delete) +# define RTAsn1Null_Enum RT_MANGLER(RTAsn1Null_Enum) +# define RTAsn1Null_Init RT_MANGLER(RTAsn1Null_Init) +# define RTAsn1Null_DecodeAsn1 RT_MANGLER(RTAsn1Null_DecodeAsn1) +# define RTAsn1ObjIdCountComponents RT_MANGLER(RTAsn1ObjIdCountComponents) +# define RTAsn1ObjIdGetComponentsAsUInt32 RT_MANGLER(RTAsn1ObjIdGetComponentsAsUInt32) +# define RTAsn1ObjIdGetLastComponentsAsUInt32 RT_MANGLER(RTAsn1ObjIdGetLastComponentsAsUInt32) +# define RTAsn1ObjId_CheckSanity RT_MANGLER(RTAsn1ObjId_CheckSanity) +# define RTAsn1ObjId_Clone RT_MANGLER(RTAsn1ObjId_Clone) +# define RTAsn1ObjId_Compare RT_MANGLER(RTAsn1ObjId_Compare) +# define RTAsn1ObjId_CompareWithString RT_MANGLER(RTAsn1ObjId_CompareWithString) +# define RTAsn1ObjId_Delete RT_MANGLER(RTAsn1ObjId_Delete) +# define RTAsn1ObjId_Enum RT_MANGLER(RTAsn1ObjId_Enum) +# define RTAsn1ObjId_Init RT_MANGLER(RTAsn1ObjId_Init) +# define RTAsn1ObjId_InitFromString RT_MANGLER(RTAsn1ObjId_InitFromString) +# define RTAsn1ObjId_StartsWith RT_MANGLER(RTAsn1ObjId_StartsWith) +# define RTAsn1SeqOfObjIds_CheckSanity RT_MANGLER(RTAsn1SeqOfObjIds_CheckSanity) +# define RTAsn1SeqOfObjIds_Clone RT_MANGLER(RTAsn1SeqOfObjIds_Clone) +# define RTAsn1SeqOfObjIds_Compare RT_MANGLER(RTAsn1SeqOfObjIds_Compare) +# define RTAsn1SeqOfObjIds_Delete RT_MANGLER(RTAsn1SeqOfObjIds_Delete) +# define RTAsn1SeqOfObjIds_Enum RT_MANGLER(RTAsn1SeqOfObjIds_Enum) +# define RTAsn1SeqOfObjIds_Init RT_MANGLER(RTAsn1SeqOfObjIds_Init) +# define RTAsn1SetOfObjIds_CheckSanity RT_MANGLER(RTAsn1SetOfObjIds_CheckSanity) +# define RTAsn1SetOfObjIds_Clone RT_MANGLER(RTAsn1SetOfObjIds_Clone) +# define RTAsn1SetOfObjIds_Compare RT_MANGLER(RTAsn1SetOfObjIds_Compare) +# define RTAsn1SetOfObjIds_Delete RT_MANGLER(RTAsn1SetOfObjIds_Delete) +# define RTAsn1SetOfObjIds_Enum RT_MANGLER(RTAsn1SetOfObjIds_Enum) +# define RTAsn1SetOfObjIds_Init RT_MANGLER(RTAsn1SetOfObjIds_Init) +# define RTAsn1SeqOfObjIdSeqs_CheckSanity RT_MANGLER(RTAsn1SeqOfObjIdSeqs_CheckSanity) +# define RTAsn1SeqOfObjIdSeqs_Clone RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Clone) +# define RTAsn1SeqOfObjIdSeqs_Compare RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Compare) +# define RTAsn1SetOfObjIdSeqs_DecodeAsn1 RT_MANGLER(RTAsn1SetOfObjIdSeqs_DecodeAsn1) +# define RTAsn1SeqOfObjIdSeqs_Delete RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Delete) +# define RTAsn1SeqOfObjIdSeqs_Enum RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Enum) +# define RTAsn1SeqOfObjIdSeqs_Init RT_MANGLER(RTAsn1SeqOfObjIdSeqs_Init) +# define RTAsn1SetOfObjIdSeqs_CheckSanity RT_MANGLER(RTAsn1SetOfObjIdSeqs_CheckSanity) +# define RTAsn1SetOfObjIdSeqs_Clone RT_MANGLER(RTAsn1SetOfObjIdSeqs_Clone) +# define RTAsn1SetOfObjIdSeqs_Compare RT_MANGLER(RTAsn1SetOfObjIdSeqs_Compare) +# define RTAsn1SetOfObjIdSeqs_Delete RT_MANGLER(RTAsn1SetOfObjIdSeqs_Delete) +# define RTAsn1SetOfObjIdSeqs_Enum RT_MANGLER(RTAsn1SetOfObjIdSeqs_Enum) +# define RTAsn1SetOfObjIdSeqs_Init RT_MANGLER(RTAsn1SetOfObjIdSeqs_Init) +# define RTAsn1ObjId_DecodeAsn1 RT_MANGLER(RTAsn1ObjId_DecodeAsn1) +# define RTAsn1SeqOfObjIds_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfObjIds_DecodeAsn1) +# define RTAsn1SetOfObjIds_DecodeAsn1 RT_MANGLER(RTAsn1SetOfObjIds_DecodeAsn1) +# define RTAsn1OctetString_CheckSanity RT_MANGLER(RTAsn1OctetString_CheckSanity) +# define RTAsn1OctetString_Clone RT_MANGLER(RTAsn1OctetString_Clone) +# define RTAsn1OctetString_Compare RT_MANGLER(RTAsn1OctetString_Compare) +# define RTAsn1OctetString_Delete RT_MANGLER(RTAsn1OctetString_Delete) +# define RTAsn1OctetString_Enum RT_MANGLER(RTAsn1OctetString_Enum) +# define RTAsn1OctetString_Init RT_MANGLER(RTAsn1OctetString_Init) +# define RTAsn1SeqOfOctetStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfOctetStrings_CheckSanity) +# define RTAsn1SeqOfOctetStrings_Clone RT_MANGLER(RTAsn1SeqOfOctetStrings_Clone) +# define RTAsn1SeqOfOctetStrings_Compare RT_MANGLER(RTAsn1SeqOfOctetStrings_Compare) +# define RTAsn1SeqOfOctetStrings_Delete RT_MANGLER(RTAsn1SeqOfOctetStrings_Delete) +# define RTAsn1SeqOfOctetStrings_Enum RT_MANGLER(RTAsn1SeqOfOctetStrings_Enum) +# define RTAsn1SeqOfOctetStrings_Init RT_MANGLER(RTAsn1SeqOfOctetStrings_Init) +# define RTAsn1SetOfOctetStrings_CheckSanity RT_MANGLER(RTAsn1SetOfOctetStrings_CheckSanity) +# define RTAsn1SetOfOctetStrings_Clone RT_MANGLER(RTAsn1SetOfOctetStrings_Clone) +# define RTAsn1SetOfOctetStrings_Compare RT_MANGLER(RTAsn1SetOfOctetStrings_Compare) +# define RTAsn1SetOfOctetStrings_Delete RT_MANGLER(RTAsn1SetOfOctetStrings_Delete) +# define RTAsn1SetOfOctetStrings_Enum RT_MANGLER(RTAsn1SetOfOctetStrings_Enum) +# define RTAsn1SetOfOctetStrings_Init RT_MANGLER(RTAsn1SetOfOctetStrings_Init) +# define RTAsn1OctetString_DecodeAsn1 RT_MANGLER(RTAsn1OctetString_DecodeAsn1) +# define RTAsn1SeqOfOctetStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfOctetStrings_DecodeAsn1) +# define RTAsn1SetOfOctetStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfOctetStrings_DecodeAsn1) +# define RTAsn1BmpString_CheckSanity RT_MANGLER(RTAsn1BmpString_CheckSanity) +# define RTAsn1BmpString_Clone RT_MANGLER(RTAsn1BmpString_Clone) +# define RTAsn1BmpString_Compare RT_MANGLER(RTAsn1BmpString_Compare) +# define RTAsn1BmpString_Delete RT_MANGLER(RTAsn1BmpString_Delete) +# define RTAsn1BmpString_Enum RT_MANGLER(RTAsn1BmpString_Enum) +# define RTAsn1BmpString_Init RT_MANGLER(RTAsn1BmpString_Init) +# define RTAsn1GeneralString_CheckSanity RT_MANGLER(RTAsn1GeneralString_CheckSanity) +# define RTAsn1GeneralString_Clone RT_MANGLER(RTAsn1GeneralString_Clone) +# define RTAsn1GeneralString_Compare RT_MANGLER(RTAsn1GeneralString_Compare) +# define RTAsn1GeneralString_Delete RT_MANGLER(RTAsn1GeneralString_Delete) +# define RTAsn1GeneralString_Enum RT_MANGLER(RTAsn1GeneralString_Enum) +# define RTAsn1GeneralString_Init RT_MANGLER(RTAsn1GeneralString_Init) +# define RTAsn1GraphicString_CheckSanity RT_MANGLER(RTAsn1GraphicString_CheckSanity) +# define RTAsn1GraphicString_Clone RT_MANGLER(RTAsn1GraphicString_Clone) +# define RTAsn1GraphicString_Compare RT_MANGLER(RTAsn1GraphicString_Compare) +# define RTAsn1GraphicString_Delete RT_MANGLER(RTAsn1GraphicString_Delete) +# define RTAsn1GraphicString_Enum RT_MANGLER(RTAsn1GraphicString_Enum) +# define RTAsn1GraphicString_Init RT_MANGLER(RTAsn1GraphicString_Init) +# define RTAsn1Ia5String_CheckSanity RT_MANGLER(RTAsn1Ia5String_CheckSanity) +# define RTAsn1Ia5String_Clone RT_MANGLER(RTAsn1Ia5String_Clone) +# define RTAsn1Ia5String_Compare RT_MANGLER(RTAsn1Ia5String_Compare) +# define RTAsn1Ia5String_Delete RT_MANGLER(RTAsn1Ia5String_Delete) +# define RTAsn1Ia5String_Enum RT_MANGLER(RTAsn1Ia5String_Enum) +# define RTAsn1Ia5String_Init RT_MANGLER(RTAsn1Ia5String_Init) +# define RTAsn1NumericString_CheckSanity RT_MANGLER(RTAsn1NumericString_CheckSanity) +# define RTAsn1NumericString_Clone RT_MANGLER(RTAsn1NumericString_Clone) +# define RTAsn1NumericString_Compare RT_MANGLER(RTAsn1NumericString_Compare) +# define RTAsn1NumericString_Delete RT_MANGLER(RTAsn1NumericString_Delete) +# define RTAsn1NumericString_Enum RT_MANGLER(RTAsn1NumericString_Enum) +# define RTAsn1NumericString_Init RT_MANGLER(RTAsn1NumericString_Init) +# define RTAsn1PrintableString_CheckSanity RT_MANGLER(RTAsn1PrintableString_CheckSanity) +# define RTAsn1PrintableString_Clone RT_MANGLER(RTAsn1PrintableString_Clone) +# define RTAsn1PrintableString_Compare RT_MANGLER(RTAsn1PrintableString_Compare) +# define RTAsn1PrintableString_Delete RT_MANGLER(RTAsn1PrintableString_Delete) +# define RTAsn1PrintableString_Enum RT_MANGLER(RTAsn1PrintableString_Enum) +# define RTAsn1PrintableString_Init RT_MANGLER(RTAsn1PrintableString_Init) +# define RTAsn1SeqOfStrings_CheckSanity RT_MANGLER(RTAsn1SeqOfStrings_CheckSanity) +# define RTAsn1SeqOfStrings_Clone RT_MANGLER(RTAsn1SeqOfStrings_Clone) +# define RTAsn1SeqOfStrings_Compare RT_MANGLER(RTAsn1SeqOfStrings_Compare) +# define RTAsn1SeqOfStrings_Delete RT_MANGLER(RTAsn1SeqOfStrings_Delete) +# define RTAsn1SeqOfStrings_Enum RT_MANGLER(RTAsn1SeqOfStrings_Enum) +# define RTAsn1SeqOfStrings_Init RT_MANGLER(RTAsn1SeqOfStrings_Init) +# define RTAsn1SetOfStrings_CheckSanity RT_MANGLER(RTAsn1SetOfStrings_CheckSanity) +# define RTAsn1SetOfStrings_Clone RT_MANGLER(RTAsn1SetOfStrings_Clone) +# define RTAsn1SetOfStrings_Compare RT_MANGLER(RTAsn1SetOfStrings_Compare) +# define RTAsn1SetOfStrings_Delete RT_MANGLER(RTAsn1SetOfStrings_Delete) +# define RTAsn1SetOfStrings_Enum RT_MANGLER(RTAsn1SetOfStrings_Enum) +# define RTAsn1SetOfStrings_Init RT_MANGLER(RTAsn1SetOfStrings_Init) +# define RTAsn1String_CheckSanity RT_MANGLER(RTAsn1String_CheckSanity) +# define RTAsn1String_Clone RT_MANGLER(RTAsn1String_Clone) +# define RTAsn1String_Compare RT_MANGLER(RTAsn1String_Compare) +# define RTAsn1String_CompareEx RT_MANGLER(RTAsn1String_CompareEx) +# define RTAsn1String_CompareWithString RT_MANGLER(RTAsn1String_CompareWithString) +# define RTAsn1String_Delete RT_MANGLER(RTAsn1String_Delete) +# define RTAsn1String_Enum RT_MANGLER(RTAsn1String_Enum) +# define RTAsn1String_Init RT_MANGLER(RTAsn1String_Init) +# define RTAsn1String_InitEx RT_MANGLER(RTAsn1String_InitEx) +# define RTAsn1String_InitWithValue RT_MANGLER(RTAsn1String_InitWithValue) +# define RTAsn1String_QueryUtf8 RT_MANGLER(RTAsn1String_QueryUtf8) +# define RTAsn1String_QueryUtf8Len RT_MANGLER(RTAsn1String_QueryUtf8Len) +# define RTAsn1String_RecodeAsUtf8 RT_MANGLER(RTAsn1String_RecodeAsUtf8) +# define RTAsn1T61String_CheckSanity RT_MANGLER(RTAsn1T61String_CheckSanity) +# define RTAsn1T61String_Clone RT_MANGLER(RTAsn1T61String_Clone) +# define RTAsn1T61String_Compare RT_MANGLER(RTAsn1T61String_Compare) +# define RTAsn1T61String_Delete RT_MANGLER(RTAsn1T61String_Delete) +# define RTAsn1T61String_Enum RT_MANGLER(RTAsn1T61String_Enum) +# define RTAsn1T61String_Init RT_MANGLER(RTAsn1T61String_Init) +# define RTAsn1UniversalString_CheckSanity RT_MANGLER(RTAsn1UniversalString_CheckSanity) +# define RTAsn1UniversalString_Clone RT_MANGLER(RTAsn1UniversalString_Clone) +# define RTAsn1UniversalString_Compare RT_MANGLER(RTAsn1UniversalString_Compare) +# define RTAsn1UniversalString_Delete RT_MANGLER(RTAsn1UniversalString_Delete) +# define RTAsn1UniversalString_Enum RT_MANGLER(RTAsn1UniversalString_Enum) +# define RTAsn1UniversalString_Init RT_MANGLER(RTAsn1UniversalString_Init) +# define RTAsn1Utf8String_CheckSanity RT_MANGLER(RTAsn1Utf8String_CheckSanity) +# define RTAsn1Utf8String_Clone RT_MANGLER(RTAsn1Utf8String_Clone) +# define RTAsn1Utf8String_Compare RT_MANGLER(RTAsn1Utf8String_Compare) +# define RTAsn1Utf8String_Delete RT_MANGLER(RTAsn1Utf8String_Delete) +# define RTAsn1Utf8String_Enum RT_MANGLER(RTAsn1Utf8String_Enum) +# define RTAsn1Utf8String_Init RT_MANGLER(RTAsn1Utf8String_Init) +# define RTAsn1VisibleString_CheckSanity RT_MANGLER(RTAsn1VisibleString_CheckSanity) +# define RTAsn1VisibleString_Clone RT_MANGLER(RTAsn1VisibleString_Clone) +# define RTAsn1VisibleString_Compare RT_MANGLER(RTAsn1VisibleString_Compare) +# define RTAsn1VisibleString_Delete RT_MANGLER(RTAsn1VisibleString_Delete) +# define RTAsn1VisibleString_Enum RT_MANGLER(RTAsn1VisibleString_Enum) +# define RTAsn1VisibleString_Init RT_MANGLER(RTAsn1VisibleString_Init) +# define RTAsn1BmpString_DecodeAsn1 RT_MANGLER(RTAsn1BmpString_DecodeAsn1) +# define RTAsn1GeneralString_DecodeAsn1 RT_MANGLER(RTAsn1GeneralString_DecodeAsn1) +# define RTAsn1GraphicString_DecodeAsn1 RT_MANGLER(RTAsn1GraphicString_DecodeAsn1) +# define RTAsn1Ia5String_DecodeAsn1 RT_MANGLER(RTAsn1Ia5String_DecodeAsn1) +# define RTAsn1NumericString_DecodeAsn1 RT_MANGLER(RTAsn1NumericString_DecodeAsn1) +# define RTAsn1PrintableString_DecodeAsn1 RT_MANGLER(RTAsn1PrintableString_DecodeAsn1) +# define RTAsn1SeqOfStrings_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfStrings_DecodeAsn1) +# define RTAsn1SetOfStrings_DecodeAsn1 RT_MANGLER(RTAsn1SetOfStrings_DecodeAsn1) +# define RTAsn1String_DecodeAsn1 RT_MANGLER(RTAsn1String_DecodeAsn1) +# define RTAsn1T61String_DecodeAsn1 RT_MANGLER(RTAsn1T61String_DecodeAsn1) +# define RTAsn1UniversalString_DecodeAsn1 RT_MANGLER(RTAsn1UniversalString_DecodeAsn1) +# define RTAsn1Utf8String_DecodeAsn1 RT_MANGLER(RTAsn1Utf8String_DecodeAsn1) +# define RTAsn1VisibleString_DecodeAsn1 RT_MANGLER(RTAsn1VisibleString_DecodeAsn1) +# define RTAsn1GeneralizedTime_CheckSanity RT_MANGLER(RTAsn1GeneralizedTime_CheckSanity) +# define RTAsn1GeneralizedTime_Clone RT_MANGLER(RTAsn1GeneralizedTime_Clone) +# define RTAsn1GeneralizedTime_Compare RT_MANGLER(RTAsn1GeneralizedTime_Compare) +# define RTAsn1GeneralizedTime_Delete RT_MANGLER(RTAsn1GeneralizedTime_Delete) +# define RTAsn1GeneralizedTime_Enum RT_MANGLER(RTAsn1GeneralizedTime_Enum) +# define RTAsn1GeneralizedTime_Init RT_MANGLER(RTAsn1GeneralizedTime_Init) +# define RTAsn1SeqOfTimes_CheckSanity RT_MANGLER(RTAsn1SeqOfTimes_CheckSanity) +# define RTAsn1SeqOfTimes_Clone RT_MANGLER(RTAsn1SeqOfTimes_Clone) +# define RTAsn1SeqOfTimes_Compare RT_MANGLER(RTAsn1SeqOfTimes_Compare) +# define RTAsn1SeqOfTimes_Delete RT_MANGLER(RTAsn1SeqOfTimes_Delete) +# define RTAsn1SeqOfTimes_Enum RT_MANGLER(RTAsn1SeqOfTimes_Enum) +# define RTAsn1SeqOfTimes_Init RT_MANGLER(RTAsn1SeqOfTimes_Init) +# define RTAsn1SetOfTimes_CheckSanity RT_MANGLER(RTAsn1SetOfTimes_CheckSanity) +# define RTAsn1SetOfTimes_Clone RT_MANGLER(RTAsn1SetOfTimes_Clone) +# define RTAsn1SetOfTimes_Compare RT_MANGLER(RTAsn1SetOfTimes_Compare) +# define RTAsn1SetOfTimes_Delete RT_MANGLER(RTAsn1SetOfTimes_Delete) +# define RTAsn1SetOfTimes_Enum RT_MANGLER(RTAsn1SetOfTimes_Enum) +# define RTAsn1SetOfTimes_Init RT_MANGLER(RTAsn1SetOfTimes_Init) +# define RTAsn1Time_CheckSanity RT_MANGLER(RTAsn1Time_CheckSanity) +# define RTAsn1Time_Clone RT_MANGLER(RTAsn1Time_Clone) +# define RTAsn1Time_Compare RT_MANGLER(RTAsn1Time_Compare) +# define RTAsn1Time_CompareWithTimeSpec RT_MANGLER(RTAsn1Time_CompareWithTimeSpec) +# define RTAsn1Time_Delete RT_MANGLER(RTAsn1Time_Delete) +# define RTAsn1Time_Enum RT_MANGLER(RTAsn1Time_Enum) +# define RTAsn1Time_Init RT_MANGLER(RTAsn1Time_Init) +# define RTAsn1UtcTime_CheckSanity RT_MANGLER(RTAsn1UtcTime_CheckSanity) +# define RTAsn1UtcTime_Clone RT_MANGLER(RTAsn1UtcTime_Clone) +# define RTAsn1UtcTime_Compare RT_MANGLER(RTAsn1UtcTime_Compare) +# define RTAsn1UtcTime_Delete RT_MANGLER(RTAsn1UtcTime_Delete) +# define RTAsn1UtcTime_Enum RT_MANGLER(RTAsn1UtcTime_Enum) +# define RTAsn1UtcTime_Init RT_MANGLER(RTAsn1UtcTime_Init) +# define RTAsn1GeneralizedTime_DecodeAsn1 RT_MANGLER(RTAsn1GeneralizedTime_DecodeAsn1) +# define RTAsn1SeqOfTimes_DecodeAsn1 RT_MANGLER(RTAsn1SeqOfTimes_DecodeAsn1) +# define RTAsn1SetOfTimes_DecodeAsn1 RT_MANGLER(RTAsn1SetOfTimes_DecodeAsn1) +# define RTAsn1Time_DecodeAsn1 RT_MANGLER(RTAsn1Time_DecodeAsn1) +# define RTAsn1UtcTime_DecodeAsn1 RT_MANGLER(RTAsn1UtcTime_DecodeAsn1) +# define RTMd2 RT_MANGLER(RTMd2) +# define RTMd2Final RT_MANGLER(RTMd2Final) +# define RTMd2Init RT_MANGLER(RTMd2Init) +# define RTMd2Update RT_MANGLER(RTMd2Update) +# define RTMd2FromString RT_MANGLER(RTMd2FromString) +# define RTMd2ToString RT_MANGLER(RTMd2ToString) +# define RTCrDigestClone RT_MANGLER(RTCrDigestClone) +# define RTCrDigestCreate RT_MANGLER(RTCrDigestCreate) +# define RTCrDigestFinal RT_MANGLER(RTCrDigestFinal) +# define RTCrDigestGetConsumedSize RT_MANGLER(RTCrDigestGetConsumedSize) +# define RTCrDigestGetHash RT_MANGLER(RTCrDigestGetHash) +# define RTCrDigestGetHashSize RT_MANGLER(RTCrDigestGetHashSize) +# define RTCrDigestGetType RT_MANGLER(RTCrDigestGetType) +# define RTCrDigestGetAlgorithmOid RT_MANGLER(RTCrDigestGetAlgorithmOid) +# define RTCrDigestIsFinalized RT_MANGLER(RTCrDigestIsFinalized) +# define RTCrDigestMatch RT_MANGLER(RTCrDigestMatch) +# define RTCrDigestRelease RT_MANGLER(RTCrDigestRelease) +# define RTCrDigestReset RT_MANGLER(RTCrDigestReset) +# define RTCrDigestRetain RT_MANGLER(RTCrDigestRetain) +# define RTCrDigestUpdate RT_MANGLER(RTCrDigestUpdate) +# define RTCrDigestUpdateFromVfsFile RT_MANGLER(RTCrDigestUpdateFromVfsFile) +# define RTCrDigestCreateByObjId RT_MANGLER(RTCrDigestCreateByObjId) +# define RTCrDigestCreateByObjIdString RT_MANGLER(RTCrDigestCreateByObjIdString) +# define RTCrDigestCreateByType RT_MANGLER(RTCrDigestCreateByType) +# define RTCrDigestFindByObjId RT_MANGLER(RTCrDigestFindByObjId) +# define RTCrDigestFindByObjIdString RT_MANGLER(RTCrDigestFindByObjIdString) +# define RTCrDigestFindByType RT_MANGLER(RTCrDigestFindByType) +# define RTCrDigestTypeToAlgorithmOid RT_MANGLER(RTCrDigestTypeToAlgorithmOid) +# define RTCrDigestTypeToName RT_MANGLER(RTCrDigestTypeToName) +# define RTCrDigestTypeToHashSize RT_MANGLER(RTCrDigestTypeToHashSize) +# define RTCrRsaDigestInfo_DecodeAsn1 RT_MANGLER(RTCrRsaDigestInfo_DecodeAsn1) +# define RTCrRsaOtherPrimeInfo_DecodeAsn1 RT_MANGLER(RTCrRsaOtherPrimeInfo_DecodeAsn1) +# define RTCrRsaOtherPrimeInfos_DecodeAsn1 RT_MANGLER(RTCrRsaOtherPrimeInfos_DecodeAsn1) +# define RTCrRsaPrivateKey_DecodeAsn1 RT_MANGLER(RTCrRsaPrivateKey_DecodeAsn1) +# define RTCrRsaPublicKey_DecodeAsn1 RT_MANGLER(RTCrRsaPublicKey_DecodeAsn1) +# define RTCrRsaDigestInfo_Compare RT_MANGLER(RTCrRsaDigestInfo_Compare) +# define RTCrRsaDigestInfo_Delete RT_MANGLER(RTCrRsaDigestInfo_Delete) +# define RTCrRsaDigestInfo_Enum RT_MANGLER(RTCrRsaDigestInfo_Enum) +# define RTCrRsaOtherPrimeInfo_Compare RT_MANGLER(RTCrRsaOtherPrimeInfo_Compare) +# define RTCrRsaOtherPrimeInfo_Delete RT_MANGLER(RTCrRsaOtherPrimeInfo_Delete) +# define RTCrRsaOtherPrimeInfo_Enum RT_MANGLER(RTCrRsaOtherPrimeInfo_Enum) +# define RTCrRsaOtherPrimeInfos_Compare RT_MANGLER(RTCrRsaOtherPrimeInfos_Compare) +# define RTCrRsaOtherPrimeInfos_Delete RT_MANGLER(RTCrRsaOtherPrimeInfos_Delete) +# define RTCrRsaOtherPrimeInfos_Enum RT_MANGLER(RTCrRsaOtherPrimeInfos_Enum) +# define RTCrRsaPrivateKey_Compare RT_MANGLER(RTCrRsaPrivateKey_Compare) +# define RTCrRsaPrivateKey_Delete RT_MANGLER(RTCrRsaPrivateKey_Delete) +# define RTCrRsaPrivateKey_Enum RT_MANGLER(RTCrRsaPrivateKey_Enum) +# define RTCrRsaPublicKey_Compare RT_MANGLER(RTCrRsaPublicKey_Compare) +# define RTCrRsaPublicKey_Delete RT_MANGLER(RTCrRsaPublicKey_Delete) +# define RTCrRsaPublicKey_Enum RT_MANGLER(RTCrRsaPublicKey_Enum) +# define RTCrRsaDigestInfo_Clone RT_MANGLER(RTCrRsaDigestInfo_Clone) +# define RTCrRsaDigestInfo_Init RT_MANGLER(RTCrRsaDigestInfo_Init) +# define RTCrRsaOtherPrimeInfo_Clone RT_MANGLER(RTCrRsaOtherPrimeInfo_Clone) +# define RTCrRsaOtherPrimeInfo_Init RT_MANGLER(RTCrRsaOtherPrimeInfo_Init) +# define RTCrRsaOtherPrimeInfos_Clone RT_MANGLER(RTCrRsaOtherPrimeInfos_Clone) +# define RTCrRsaOtherPrimeInfos_Init RT_MANGLER(RTCrRsaOtherPrimeInfos_Init) +# define RTCrRsaPrivateKey_Clone RT_MANGLER(RTCrRsaPrivateKey_Clone) +# define RTCrRsaPrivateKey_Init RT_MANGLER(RTCrRsaPrivateKey_Init) +# define RTCrRsaPublicKey_Clone RT_MANGLER(RTCrRsaPublicKey_Clone) +# define RTCrRsaPublicKey_Init RT_MANGLER(RTCrRsaPublicKey_Init) +# define RTCrRsaDigestInfo_CheckSanity RT_MANGLER(RTCrRsaDigestInfo_CheckSanity) +# define RTCrRsaOtherPrimeInfo_CheckSanity RT_MANGLER(RTCrRsaOtherPrimeInfo_CheckSanity) +# define RTCrRsaOtherPrimeInfos_CheckSanity RT_MANGLER(RTCrRsaOtherPrimeInfos_CheckSanity) +# define RTCrRsaPrivateKey_CheckSanity RT_MANGLER(RTCrRsaPrivateKey_CheckSanity) +# define RTCrRsaPublicKey_CheckSanity RT_MANGLER(RTCrRsaPublicKey_CheckSanity) +# define RTCrPemFindFirstSectionInContent RT_MANGLER(RTCrPemFindFirstSectionInContent) +# define RTCrPemFreeSections RT_MANGLER(RTCrPemFreeSections) +# define RTCrPemParseContent RT_MANGLER(RTCrPemParseContent) +# define RTCrPemReadFile RT_MANGLER(RTCrPemReadFile) +# define RTCrPkcs7Attribute_DecodeAsn1 RT_MANGLER(RTCrPkcs7Attribute_DecodeAsn1) +# define RTCrPkcs7Attributes_DecodeAsn1 RT_MANGLER(RTCrPkcs7Attributes_DecodeAsn1) +# define RTCrPkcs7ContentInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7ContentInfo_DecodeAsn1) +# define RTCrPkcs7DigestInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7DigestInfo_DecodeAsn1) +# define RTCrPkcs7IssuerAndSerialNumber_DecodeAsn1 RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_DecodeAsn1) +# define RTCrPkcs7SignedData_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignedData_DecodeAsn1) +# define RTCrPkcs7SignerInfo_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignerInfo_DecodeAsn1) +# define RTCrPkcs7SignerInfos_DecodeAsn1 RT_MANGLER(RTCrPkcs7SignerInfos_DecodeAsn1) +# define RTCrPkcs7Attribute_Compare RT_MANGLER(RTCrPkcs7Attribute_Compare) +# define RTCrPkcs7Attribute_Delete RT_MANGLER(RTCrPkcs7Attribute_Delete) +# define RTCrPkcs7Attribute_Enum RT_MANGLER(RTCrPkcs7Attribute_Enum) +# define RTCrPkcs7Attributes_Compare RT_MANGLER(RTCrPkcs7Attributes_Compare) +# define RTCrPkcs7Attributes_Delete RT_MANGLER(RTCrPkcs7Attributes_Delete) +# define RTCrPkcs7Attributes_Enum RT_MANGLER(RTCrPkcs7Attributes_Enum) +# define RTCrPkcs7ContentInfo_Compare RT_MANGLER(RTCrPkcs7ContentInfo_Compare) +# define RTCrPkcs7ContentInfo_Delete RT_MANGLER(RTCrPkcs7ContentInfo_Delete) +# define RTCrPkcs7ContentInfo_Enum RT_MANGLER(RTCrPkcs7ContentInfo_Enum) +# define RTCrPkcs7ContentInfo_IsSignedData RT_MANGLER(RTCrPkcs7ContentInfo_IsSignedData) +# define RTCrPkcs7DigestInfo_Compare RT_MANGLER(RTCrPkcs7DigestInfo_Compare) +# define RTCrPkcs7DigestInfo_Delete RT_MANGLER(RTCrPkcs7DigestInfo_Delete) +# define RTCrPkcs7DigestInfo_Enum RT_MANGLER(RTCrPkcs7DigestInfo_Enum) +# define RTCrPkcs7IssuerAndSerialNumber_Compare RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Compare) +# define RTCrPkcs7IssuerAndSerialNumber_Delete RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Delete) +# define RTCrPkcs7IssuerAndSerialNumber_Enum RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Enum) +# define RTCrPkcs7SignedData_Compare RT_MANGLER(RTCrPkcs7SignedData_Compare) +# define RTCrPkcs7SignedData_Delete RT_MANGLER(RTCrPkcs7SignedData_Delete) +# define RTCrPkcs7SignedData_Enum RT_MANGLER(RTCrPkcs7SignedData_Enum) +# define RTCrPkcs7SignerInfo_Compare RT_MANGLER(RTCrPkcs7SignerInfo_Compare) +# define RTCrPkcs7SignerInfo_Delete RT_MANGLER(RTCrPkcs7SignerInfo_Delete) +# define RTCrPkcs7SignerInfo_Enum RT_MANGLER(RTCrPkcs7SignerInfo_Enum) +# define RTCrPkcs7SignerInfo_GetSigningTime RT_MANGLER(RTCrPkcs7SignerInfo_GetSigningTime) +# define RTCrPkcs7SignerInfo_GetMsTimestamp RT_MANGLER(RTCrPkcs7SignerInfo_GetMsTimestamp) +# define RTCrPkcs7SignerInfos_Compare RT_MANGLER(RTCrPkcs7SignerInfos_Compare) +# define RTCrPkcs7SignerInfos_Delete RT_MANGLER(RTCrPkcs7SignerInfos_Delete) +# define RTCrPkcs7SignerInfos_Enum RT_MANGLER(RTCrPkcs7SignerInfos_Enum) +# define RTCrPkcs7Attribute_Clone RT_MANGLER(RTCrPkcs7Attribute_Clone) +# define RTCrPkcs7Attribute_Init RT_MANGLER(RTCrPkcs7Attribute_Init) +# define RTCrPkcs7Attributes_Clone RT_MANGLER(RTCrPkcs7Attributes_Clone) +# define RTCrPkcs7Attributes_Init RT_MANGLER(RTCrPkcs7Attributes_Init) +# define RTCrPkcs7ContentInfo_Clone RT_MANGLER(RTCrPkcs7ContentInfo_Clone) +# define RTCrPkcs7ContentInfo_Init RT_MANGLER(RTCrPkcs7ContentInfo_Init) +# define RTCrPkcs7DigestInfo_Clone RT_MANGLER(RTCrPkcs7DigestInfo_Clone) +# define RTCrPkcs7DigestInfo_Init RT_MANGLER(RTCrPkcs7DigestInfo_Init) +# define RTCrPkcs7IssuerAndSerialNumber_Clone RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Clone) +# define RTCrPkcs7IssuerAndSerialNumber_Init RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_Init) +# define RTCrPkcs7SignedData_Clone RT_MANGLER(RTCrPkcs7SignedData_Clone) +# define RTCrPkcs7SignedData_Init RT_MANGLER(RTCrPkcs7SignedData_Init) +# define RTCrPkcs7SignerInfo_Clone RT_MANGLER(RTCrPkcs7SignerInfo_Clone) +# define RTCrPkcs7SignerInfo_Init RT_MANGLER(RTCrPkcs7SignerInfo_Init) +# define RTCrPkcs7SignerInfos_Clone RT_MANGLER(RTCrPkcs7SignerInfos_Clone) +# define RTCrPkcs7SignerInfos_Init RT_MANGLER(RTCrPkcs7SignerInfos_Init) +# define RTCrPkcs7Attribute_CheckSanity RT_MANGLER(RTCrPkcs7Attribute_CheckSanity) +# define RTCrPkcs7Attributes_CheckSanity RT_MANGLER(RTCrPkcs7Attributes_CheckSanity) +# define RTCrPkcs7ContentInfo_CheckSanity RT_MANGLER(RTCrPkcs7ContentInfo_CheckSanity) +# define RTCrPkcs7DigestInfo_CheckSanity RT_MANGLER(RTCrPkcs7DigestInfo_CheckSanity) +# define RTCrPkcs7IssuerAndSerialNumber_CheckSanity RT_MANGLER(RTCrPkcs7IssuerAndSerialNumber_CheckSanity) +# define RTCrPkcs7SignedData_CheckSanity RT_MANGLER(RTCrPkcs7SignedData_CheckSanity) +# define RTCrPkcs7SignerInfo_CheckSanity RT_MANGLER(RTCrPkcs7SignerInfo_CheckSanity) +# define RTCrPkcs7SignerInfos_CheckSanity RT_MANGLER(RTCrPkcs7SignerInfos_CheckSanity) +# define RTCrPkcs7VerifyCertCallbackCodeSigning RT_MANGLER(RTCrPkcs7VerifyCertCallbackCodeSigning) +# define RTCrPkcs7VerifyCertCallbackDefault RT_MANGLER(RTCrPkcs7VerifyCertCallbackDefault) +# define RTCrPkcs7VerifySignedData RT_MANGLER(RTCrPkcs7VerifySignedData) +# define RTCrPkcs7Cert_CheckSanity RT_MANGLER(RTCrPkcs7Cert_CheckSanity) +# define RTCrPkcs7Cert_Clone RT_MANGLER(RTCrPkcs7Cert_Clone) +# define RTCrPkcs7Cert_Compare RT_MANGLER(RTCrPkcs7Cert_Compare) +# define RTCrPkcs7Cert_DecodeAsn1 RT_MANGLER(RTCrPkcs7Cert_DecodeAsn1) +# define RTCrPkcs7Cert_Delete RT_MANGLER(RTCrPkcs7Cert_Delete) +# define RTCrPkcs7Cert_Enum RT_MANGLER(RTCrPkcs7Cert_Enum) +# define RTCrPkcs7Cert_Init RT_MANGLER(RTCrPkcs7Cert_Init) +# define RTCrPkcs7SetOfCerts_CheckSanity RT_MANGLER(RTCrPkcs7SetOfCerts_CheckSanity) +# define RTCrPkcs7SetOfCerts_Clone RT_MANGLER(RTCrPkcs7SetOfCerts_Clone) +# define RTCrPkcs7SetOfCerts_Compare RT_MANGLER(RTCrPkcs7SetOfCerts_Compare) +# define RTCrPkcs7SetOfCerts_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfCerts_DecodeAsn1) +# define RTCrPkcs7SetOfCerts_Delete RT_MANGLER(RTCrPkcs7SetOfCerts_Delete) +# define RTCrPkcs7SetOfCerts_Enum RT_MANGLER(RTCrPkcs7SetOfCerts_Enum) +# define RTCrPkcs7SetOfCerts_Init RT_MANGLER(RTCrPkcs7SetOfCerts_Init) +# define RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber RT_MANGLER(RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber) +# define RTCrPkcs7SetOfContentInfos_CheckSanity RT_MANGLER(RTCrPkcs7SetOfContentInfos_CheckSanity) +# define RTCrPkcs7SetOfContentInfos_Clone RT_MANGLER(RTCrPkcs7SetOfContentInfos_Clone) +# define RTCrPkcs7SetOfContentInfos_Compare RT_MANGLER(RTCrPkcs7SetOfContentInfos_Compare) +# define RTCrPkcs7SetOfContentInfos_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfContentInfos_DecodeAsn1) +# define RTCrPkcs7SetOfContentInfos_Delete RT_MANGLER(RTCrPkcs7SetOfContentInfos_Delete) +# define RTCrPkcs7SetOfContentInfos_Enum RT_MANGLER(RTCrPkcs7SetOfContentInfos_Enum) +# define RTCrPkcs7SetOfContentInfos_Init RT_MANGLER(RTCrPkcs7SetOfContentInfos_Init) +# define RTCrPkcs7SetOfSignedData_CheckSanity RT_MANGLER(RTCrPkcs7SetOfSignedData_CheckSanity) +# define RTCrPkcs7SetOfSignedData_Clone RT_MANGLER(RTCrPkcs7SetOfSignedData_Clone) +# define RTCrPkcs7SetOfSignedData_Compare RT_MANGLER(RTCrPkcs7SetOfSignedData_Compare) +# define RTCrPkcs7SetOfSignedData_DecodeAsn1 RT_MANGLER(RTCrPkcs7SetOfSignedData_DecodeAsn1) +# define RTCrPkcs7SetOfSignedData_Delete RT_MANGLER(RTCrPkcs7SetOfSignedData_Delete) +# define RTCrPkcs7SetOfSignedData_Enum RT_MANGLER(RTCrPkcs7SetOfSignedData_Enum) +# define RTCrPkcs7SetOfSignedData_Init RT_MANGLER(RTCrPkcs7SetOfSignedData_Init) +# define RTCrPkixSignatureCreateByObjId RT_MANGLER(RTCrPkixSignatureCreateByObjId) +# define RTCrPkixSignatureCreateByObjIdString RT_MANGLER(RTCrPkixSignatureCreateByObjIdString) +# define RTCrPkixSignatureCreate RT_MANGLER(RTCrPkixSignatureCreate) +# define RTCrPkixSignatureRelease RT_MANGLER(RTCrPkixSignatureRelease) +# define RTCrPkixSignatureRetain RT_MANGLER(RTCrPkixSignatureRetain) +# define RTCrPkixSignatureSign RT_MANGLER(RTCrPkixSignatureSign) +# define RTCrPkixSignatureVerify RT_MANGLER(RTCrPkixSignatureVerify) +# define RTCrPkixSignatureVerifyBitString RT_MANGLER(RTCrPkixSignatureVerifyBitString) +# define RTCrPkixSignatureVerifyOctetString RT_MANGLER(RTCrPkixSignatureVerifyOctetString) +# define RTCrPkixGetCiperOidFromSignatureAlgorithm RT_MANGLER(RTCrPkixGetCiperOidFromSignatureAlgorithm) +# define RTCrPkixPubKeyVerifySignature RT_MANGLER(RTCrPkixPubKeyVerifySignature) +# define RTCrPkixPubKeyVerifySignedDigest RT_MANGLER(RTCrPkixPubKeyVerifySignedDigest) +# define RTCrSpcAttributeTypeAndOptionalValue_DecodeAsn1 RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_DecodeAsn1) +# define RTCrSpcIndirectDataContent_DecodeAsn1 RT_MANGLER(RTCrSpcIndirectDataContent_DecodeAsn1) +# define RTCrSpcLink_DecodeAsn1 RT_MANGLER(RTCrSpcLink_DecodeAsn1) +# define RTCrSpcPeImageData_DecodeAsn1 RT_MANGLER(RTCrSpcPeImageData_DecodeAsn1) +# define RTCrSpcSerializedObjectAttribute_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObjectAttribute_DecodeAsn1) +# define RTCrSpcSerializedObjectAttributes_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObjectAttributes_DecodeAsn1) +# define RTCrSpcSerializedObject_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedObject_DecodeAsn1) +# define RTCrSpcSerializedPageHashes_DecodeAsn1 RT_MANGLER(RTCrSpcSerializedPageHashes_DecodeAsn1) +# define RTCrSpcString_DecodeAsn1 RT_MANGLER(RTCrSpcString_DecodeAsn1) +# define RTCrSpcAttributeTypeAndOptionalValue_Compare RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Compare) +# define RTCrSpcAttributeTypeAndOptionalValue_Delete RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Delete) +# define RTCrSpcAttributeTypeAndOptionalValue_Enum RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Enum) +# define RTCrSpcIndirectDataContent_Compare RT_MANGLER(RTCrSpcIndirectDataContent_Compare) +# define RTCrSpcIndirectDataContent_Delete RT_MANGLER(RTCrSpcIndirectDataContent_Delete) +# define RTCrSpcIndirectDataContent_Enum RT_MANGLER(RTCrSpcIndirectDataContent_Enum) +# define RTCrSpcIndirectDataContent_GetPeImageObjAttrib RT_MANGLER(RTCrSpcIndirectDataContent_GetPeImageObjAttrib) +# define RTCrSpcLink_Compare RT_MANGLER(RTCrSpcLink_Compare) +# define RTCrSpcLink_Delete RT_MANGLER(RTCrSpcLink_Delete) +# define RTCrSpcLink_Enum RT_MANGLER(RTCrSpcLink_Enum) +# define RTCrSpcPeImageData_Compare RT_MANGLER(RTCrSpcPeImageData_Compare) +# define RTCrSpcPeImageData_Delete RT_MANGLER(RTCrSpcPeImageData_Delete) +# define RTCrSpcPeImageData_Enum RT_MANGLER(RTCrSpcPeImageData_Enum) +# define RTCrSpcSerializedObjectAttribute_Compare RT_MANGLER(RTCrSpcSerializedObjectAttribute_Compare) +# define RTCrSpcSerializedObjectAttribute_Delete RT_MANGLER(RTCrSpcSerializedObjectAttribute_Delete) +# define RTCrSpcSerializedObjectAttribute_Enum RT_MANGLER(RTCrSpcSerializedObjectAttribute_Enum) +# define RTCrSpcSerializedObjectAttributes_Compare RT_MANGLER(RTCrSpcSerializedObjectAttributes_Compare) +# define RTCrSpcSerializedObjectAttributes_Delete RT_MANGLER(RTCrSpcSerializedObjectAttributes_Delete) +# define RTCrSpcSerializedObjectAttributes_Enum RT_MANGLER(RTCrSpcSerializedObjectAttributes_Enum) +# define RTCrSpcSerializedObject_Compare RT_MANGLER(RTCrSpcSerializedObject_Compare) +# define RTCrSpcSerializedObject_Delete RT_MANGLER(RTCrSpcSerializedObject_Delete) +# define RTCrSpcSerializedObject_Enum RT_MANGLER(RTCrSpcSerializedObject_Enum) +# define RTCrSpcSerializedPageHashes_Compare RT_MANGLER(RTCrSpcSerializedPageHashes_Compare) +# define RTCrSpcSerializedPageHashes_Delete RT_MANGLER(RTCrSpcSerializedPageHashes_Delete) +# define RTCrSpcSerializedPageHashes_Enum RT_MANGLER(RTCrSpcSerializedPageHashes_Enum) +# define RTCrSpcSerializedPageHashes_UpdateDerivedData RT_MANGLER(RTCrSpcSerializedPageHashes_UpdateDerivedData) +# define RTCrSpcString_Compare RT_MANGLER(RTCrSpcString_Compare) +# define RTCrSpcString_Delete RT_MANGLER(RTCrSpcString_Delete) +# define RTCrSpcString_Enum RT_MANGLER(RTCrSpcString_Enum) +# define RTCrSpcAttributeTypeAndOptionalValue_Clone RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Clone) +# define RTCrSpcAttributeTypeAndOptionalValue_Init RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_Init) +# define RTCrSpcIndirectDataContent_Clone RT_MANGLER(RTCrSpcIndirectDataContent_Clone) +# define RTCrSpcIndirectDataContent_Init RT_MANGLER(RTCrSpcIndirectDataContent_Init) +# define RTCrSpcLink_Clone RT_MANGLER(RTCrSpcLink_Clone) +# define RTCrSpcLink_Init RT_MANGLER(RTCrSpcLink_Init) +# define RTCrSpcPeImageData_Clone RT_MANGLER(RTCrSpcPeImageData_Clone) +# define RTCrSpcPeImageData_Init RT_MANGLER(RTCrSpcPeImageData_Init) +# define RTCrSpcSerializedObjectAttribute_Clone RT_MANGLER(RTCrSpcSerializedObjectAttribute_Clone) +# define RTCrSpcSerializedObjectAttribute_Init RT_MANGLER(RTCrSpcSerializedObjectAttribute_Init) +# define RTCrSpcSerializedObjectAttributes_Clone RT_MANGLER(RTCrSpcSerializedObjectAttributes_Clone) +# define RTCrSpcSerializedObjectAttributes_Init RT_MANGLER(RTCrSpcSerializedObjectAttributes_Init) +# define RTCrSpcSerializedObject_Clone RT_MANGLER(RTCrSpcSerializedObject_Clone) +# define RTCrSpcSerializedObject_Init RT_MANGLER(RTCrSpcSerializedObject_Init) +# define RTCrSpcSerializedPageHashes_Clone RT_MANGLER(RTCrSpcSerializedPageHashes_Clone) +# define RTCrSpcSerializedPageHashes_Init RT_MANGLER(RTCrSpcSerializedPageHashes_Init) +# define RTCrSpcString_Clone RT_MANGLER(RTCrSpcString_Clone) +# define RTCrSpcString_Init RT_MANGLER(RTCrSpcString_Init) +# define RTCrSpcAttributeTypeAndOptionalValue_CheckSanity RT_MANGLER(RTCrSpcAttributeTypeAndOptionalValue_CheckSanity) +# define RTCrSpcIndirectDataContent_CheckSanity RT_MANGLER(RTCrSpcIndirectDataContent_CheckSanity) +# define RTCrSpcIndirectDataContent_CheckSanityEx RT_MANGLER(RTCrSpcIndirectDataContent_CheckSanityEx) +# define RTCrSpcLink_CheckSanity RT_MANGLER(RTCrSpcLink_CheckSanity) +# define RTCrSpcPeImageData_CheckSanity RT_MANGLER(RTCrSpcPeImageData_CheckSanity) +# define RTCrSpcSerializedObjectAttribute_CheckSanity RT_MANGLER(RTCrSpcSerializedObjectAttribute_CheckSanity) +# define RTCrSpcSerializedObjectAttributes_CheckSanity RT_MANGLER(RTCrSpcSerializedObjectAttributes_CheckSanity) +# define RTCrSpcSerializedObject_CheckSanity RT_MANGLER(RTCrSpcSerializedObject_CheckSanity) +# define RTCrSpcSerializedPageHashes_CheckSanity RT_MANGLER(RTCrSpcSerializedPageHashes_CheckSanity) +# define RTCrSpcString_CheckSanity RT_MANGLER(RTCrSpcString_CheckSanity) +# define RTCrX509AlgorithmIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509AlgorithmIdentifier_DecodeAsn1) +# define RTCrX509AlgorithmIdentifiers_DecodeAsn1 RT_MANGLER(RTCrX509AlgorithmIdentifiers_DecodeAsn1) +# define RTCrX509AttributeTypeAndValue_DecodeAsn1 RT_MANGLER(RTCrX509AttributeTypeAndValue_DecodeAsn1) +# define RTCrX509AttributeTypeAndValues_DecodeAsn1 RT_MANGLER(RTCrX509AttributeTypeAndValues_DecodeAsn1) +# define RTCrX509AuthorityKeyIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509AuthorityKeyIdentifier_DecodeAsn1) +# define RTCrX509BasicConstraints_DecodeAsn1 RT_MANGLER(RTCrX509BasicConstraints_DecodeAsn1) +# define RTCrX509CertificatePolicies_DecodeAsn1 RT_MANGLER(RTCrX509CertificatePolicies_DecodeAsn1) +# define RTCrX509Certificate_DecodeAsn1 RT_MANGLER(RTCrX509Certificate_DecodeAsn1) +# define RTCrX509Certificates_DecodeAsn1 RT_MANGLER(RTCrX509Certificates_DecodeAsn1) +# define RTCrX509Extension_DecodeAsn1 RT_MANGLER(RTCrX509Extension_DecodeAsn1) +# define RTCrX509Extension_ExtnValue_DecodeAsn1 RT_MANGLER(RTCrX509Extension_ExtnValue_DecodeAsn1) +# define RTCrX509Extensions_DecodeAsn1 RT_MANGLER(RTCrX509Extensions_DecodeAsn1) +# define RTCrX509GeneralName_DecodeAsn1 RT_MANGLER(RTCrX509GeneralName_DecodeAsn1) +# define RTCrX509GeneralNames_DecodeAsn1 RT_MANGLER(RTCrX509GeneralNames_DecodeAsn1) +# define RTCrX509GeneralSubtree_DecodeAsn1 RT_MANGLER(RTCrX509GeneralSubtree_DecodeAsn1) +# define RTCrX509GeneralSubtrees_DecodeAsn1 RT_MANGLER(RTCrX509GeneralSubtrees_DecodeAsn1) +# define RTCrX509NameConstraints_DecodeAsn1 RT_MANGLER(RTCrX509NameConstraints_DecodeAsn1) +# define RTCrX509Name_DecodeAsn1 RT_MANGLER(RTCrX509Name_DecodeAsn1) +# define RTCrX509OldAuthorityKeyIdentifier_DecodeAsn1 RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_DecodeAsn1) +# define RTCrX509OtherName_DecodeAsn1 RT_MANGLER(RTCrX509OtherName_DecodeAsn1) +# define RTCrX509PolicyConstraints_DecodeAsn1 RT_MANGLER(RTCrX509PolicyConstraints_DecodeAsn1) +# define RTCrX509PolicyInformation_DecodeAsn1 RT_MANGLER(RTCrX509PolicyInformation_DecodeAsn1) +# define RTCrX509PolicyMapping_DecodeAsn1 RT_MANGLER(RTCrX509PolicyMapping_DecodeAsn1) +# define RTCrX509PolicyMappings_DecodeAsn1 RT_MANGLER(RTCrX509PolicyMappings_DecodeAsn1) +# define RTCrX509PolicyQualifierInfo_DecodeAsn1 RT_MANGLER(RTCrX509PolicyQualifierInfo_DecodeAsn1) +# define RTCrX509PolicyQualifierInfos_DecodeAsn1 RT_MANGLER(RTCrX509PolicyQualifierInfos_DecodeAsn1) +# define RTCrX509SubjectPublicKeyInfo_DecodeAsn1 RT_MANGLER(RTCrX509SubjectPublicKeyInfo_DecodeAsn1) +# define RTCrX509TbsCertificate_DecodeAsn1 RT_MANGLER(RTCrX509TbsCertificate_DecodeAsn1) +# define RTCrX509Validity_DecodeAsn1 RT_MANGLER(RTCrX509Validity_DecodeAsn1) +# define RTCrX509CertPathsBuild RT_MANGLER(RTCrX509CertPathsBuild) +# define RTCrX509CertPathsCreate RT_MANGLER(RTCrX509CertPathsCreate) +# define RTCrX509CertPathsCreateEx RT_MANGLER(RTCrX509CertPathsCreateEx) +# define RTCrX509CertPathsDumpAll RT_MANGLER(RTCrX509CertPathsDumpAll) +# define RTCrX509CertPathsDumpOne RT_MANGLER(RTCrX509CertPathsDumpOne) +# define RTCrX509CertPathsGetPathCount RT_MANGLER(RTCrX509CertPathsGetPathCount) +# define RTCrX509CertPathsGetPathLength RT_MANGLER(RTCrX509CertPathsGetPathLength) +# define RTCrX509CertPathsGetPathNodeCert RT_MANGLER(RTCrX509CertPathsGetPathNodeCert) +# define RTCrX509CertPathsGetPathVerifyResult RT_MANGLER(RTCrX509CertPathsGetPathVerifyResult) +# define RTCrX509CertPathsQueryPathInfo RT_MANGLER(RTCrX509CertPathsQueryPathInfo) +# define RTCrX509CertPathsRelease RT_MANGLER(RTCrX509CertPathsRelease) +# define RTCrX509CertPathsRetain RT_MANGLER(RTCrX509CertPathsRetain) +# define RTCrX509CertPathsSetTrustedStore RT_MANGLER(RTCrX509CertPathsSetTrustedStore) +# define RTCrX509CertPathsSetUntrustedArray RT_MANGLER(RTCrX509CertPathsSetUntrustedArray) +# define RTCrX509CertPathsSetUntrustedSet RT_MANGLER(RTCrX509CertPathsSetUntrustedSet) +# define RTCrX509CertPathsSetUntrustedStore RT_MANGLER(RTCrX509CertPathsSetUntrustedStore) +# define RTCrX509CertPathsSetValidTime RT_MANGLER(RTCrX509CertPathsSetValidTime) +# define RTCrX509CertPathsSetValidTimeSpec RT_MANGLER(RTCrX509CertPathsSetValidTimeSpec) +# define RTCrX509CertPathsValidateAll RT_MANGLER(RTCrX509CertPathsValidateAll) +# define RTCrX509CertPathsValidateOne RT_MANGLER(RTCrX509CertPathsValidateOne) +# define RTCrX509AlgorithmIdentifier_CombineEncryptionAndDigest RT_MANGLER(RTCrX509AlgorithmIdentifier_CombineEncryptionAndDigest) +# define RTCrX509AlgorithmIdentifier_CombineEncryptionOidAndDigestOid RT_MANGLER(RTCrX509AlgorithmIdentifier_CombineEncryptionOidAndDigestOid) +# define RTCrX509AlgorithmIdentifier_Compare RT_MANGLER(RTCrX509AlgorithmIdentifier_Compare) +# define RTCrX509AlgorithmIdentifier_CompareDigestAndEncryptedDigest RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareDigestAndEncryptedDigest) +# define RTCrX509AlgorithmIdentifier_CompareDigestOidAndEncryptedDigestOid RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareDigestOidAndEncryptedDigestOid) +# define RTCrX509AlgorithmIdentifier_CompareWithString RT_MANGLER(RTCrX509AlgorithmIdentifier_CompareWithString) +# define RTCrX509AlgorithmIdentifier_Delete RT_MANGLER(RTCrX509AlgorithmIdentifier_Delete) +# define RTCrX509AlgorithmIdentifier_Enum RT_MANGLER(RTCrX509AlgorithmIdentifier_Enum) +# define RTCrX509AlgorithmIdentifier_QueryDigestSize RT_MANGLER(RTCrX509AlgorithmIdentifier_QueryDigestSize) +# define RTCrX509AlgorithmIdentifier_QueryDigestType RT_MANGLER(RTCrX509AlgorithmIdentifier_QueryDigestType) +# define RTCrX509AlgorithmIdentifiers_Compare RT_MANGLER(RTCrX509AlgorithmIdentifiers_Compare) +# define RTCrX509AlgorithmIdentifiers_Delete RT_MANGLER(RTCrX509AlgorithmIdentifiers_Delete) +# define RTCrX509AlgorithmIdentifiers_Enum RT_MANGLER(RTCrX509AlgorithmIdentifiers_Enum) +# define RTCrX509AttributeTypeAndValue_Compare RT_MANGLER(RTCrX509AttributeTypeAndValue_Compare) +# define RTCrX509AttributeTypeAndValue_Delete RT_MANGLER(RTCrX509AttributeTypeAndValue_Delete) +# define RTCrX509AttributeTypeAndValue_Enum RT_MANGLER(RTCrX509AttributeTypeAndValue_Enum) +# define RTCrX509AttributeTypeAndValues_Compare RT_MANGLER(RTCrX509AttributeTypeAndValues_Compare) +# define RTCrX509AttributeTypeAndValues_Delete RT_MANGLER(RTCrX509AttributeTypeAndValues_Delete) +# define RTCrX509AttributeTypeAndValues_Enum RT_MANGLER(RTCrX509AttributeTypeAndValues_Enum) +# define RTCrX509AuthorityKeyIdentifier_Compare RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Compare) +# define RTCrX509AuthorityKeyIdentifier_Delete RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Delete) +# define RTCrX509AuthorityKeyIdentifier_Enum RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Enum) +# define RTCrX509BasicConstraints_Compare RT_MANGLER(RTCrX509BasicConstraints_Compare) +# define RTCrX509BasicConstraints_Delete RT_MANGLER(RTCrX509BasicConstraints_Delete) +# define RTCrX509BasicConstraints_Enum RT_MANGLER(RTCrX509BasicConstraints_Enum) +# define RTCrX509CertificatePolicies_Compare RT_MANGLER(RTCrX509CertificatePolicies_Compare) +# define RTCrX509CertificatePolicies_Delete RT_MANGLER(RTCrX509CertificatePolicies_Delete) +# define RTCrX509CertificatePolicies_Enum RT_MANGLER(RTCrX509CertificatePolicies_Enum) +# define RTCrX509Certificate_Compare RT_MANGLER(RTCrX509Certificate_Compare) +# define RTCrX509Certificate_Delete RT_MANGLER(RTCrX509Certificate_Delete) +# define RTCrX509Certificate_Enum RT_MANGLER(RTCrX509Certificate_Enum) +# define RTCrX509Certificate_IsSelfSigned RT_MANGLER(RTCrX509Certificate_IsSelfSigned) +# define RTCrX509Certificate_MatchIssuerAndSerialNumber RT_MANGLER(RTCrX509Certificate_MatchIssuerAndSerialNumber) +# define RTCrX509Certificate_MatchSubjectOrAltSubjectByRfc5280 RT_MANGLER(RTCrX509Certificate_MatchSubjectOrAltSubjectByRfc5280) +# define RTCrX509Certificates_Compare RT_MANGLER(RTCrX509Certificates_Compare) +# define RTCrX509Certificates_Delete RT_MANGLER(RTCrX509Certificates_Delete) +# define RTCrX509Certificates_Enum RT_MANGLER(RTCrX509Certificates_Enum) +# define RTCrX509Certificates_FindByIssuerAndSerialNumber RT_MANGLER(RTCrX509Certificates_FindByIssuerAndSerialNumber) +# define RTCrX509Extension_Compare RT_MANGLER(RTCrX509Extension_Compare) +# define RTCrX509Extension_Delete RT_MANGLER(RTCrX509Extension_Delete) +# define RTCrX509Extension_Enum RT_MANGLER(RTCrX509Extension_Enum) +# define RTCrX509Extensions_Compare RT_MANGLER(RTCrX509Extensions_Compare) +# define RTCrX509Extensions_Delete RT_MANGLER(RTCrX509Extensions_Delete) +# define RTCrX509Extensions_Enum RT_MANGLER(RTCrX509Extensions_Enum) +# define RTCrX509GeneralName_Compare RT_MANGLER(RTCrX509GeneralName_Compare) +# define RTCrX509GeneralName_ConstraintMatch RT_MANGLER(RTCrX509GeneralName_ConstraintMatch) +# define RTCrX509GeneralName_Delete RT_MANGLER(RTCrX509GeneralName_Delete) +# define RTCrX509GeneralName_Enum RT_MANGLER(RTCrX509GeneralName_Enum) +# define RTCrX509GeneralNames_Compare RT_MANGLER(RTCrX509GeneralNames_Compare) +# define RTCrX509GeneralNames_Delete RT_MANGLER(RTCrX509GeneralNames_Delete) +# define RTCrX509GeneralNames_Enum RT_MANGLER(RTCrX509GeneralNames_Enum) +# define RTCrX509GeneralSubtree_Compare RT_MANGLER(RTCrX509GeneralSubtree_Compare) +# define RTCrX509GeneralSubtree_ConstraintMatch RT_MANGLER(RTCrX509GeneralSubtree_ConstraintMatch) +# define RTCrX509GeneralSubtree_Delete RT_MANGLER(RTCrX509GeneralSubtree_Delete) +# define RTCrX509GeneralSubtree_Enum RT_MANGLER(RTCrX509GeneralSubtree_Enum) +# define RTCrX509GeneralSubtrees_Compare RT_MANGLER(RTCrX509GeneralSubtrees_Compare) +# define RTCrX509GeneralSubtrees_Delete RT_MANGLER(RTCrX509GeneralSubtrees_Delete) +# define RTCrX509GeneralSubtrees_Enum RT_MANGLER(RTCrX509GeneralSubtrees_Enum) +# define RTCrX509NameConstraints_Compare RT_MANGLER(RTCrX509NameConstraints_Compare) +# define RTCrX509NameConstraints_Delete RT_MANGLER(RTCrX509NameConstraints_Delete) +# define RTCrX509NameConstraints_Enum RT_MANGLER(RTCrX509NameConstraints_Enum) +# define RTCrX509Name_Compare RT_MANGLER(RTCrX509Name_Compare) +# define RTCrX509Name_ConstraintMatch RT_MANGLER(RTCrX509Name_ConstraintMatch) +# define RTCrX509Name_Delete RT_MANGLER(RTCrX509Name_Delete) +# define RTCrX509Name_Enum RT_MANGLER(RTCrX509Name_Enum) +# define RTCrX509Name_FormatAsString RT_MANGLER(RTCrX509Name_FormatAsString) +# define RTCrX509Name_MatchByRfc5280 RT_MANGLER(RTCrX509Name_MatchByRfc5280) +# define RTCrX509Name_MatchWithString RT_MANGLER(RTCrX509Name_MatchWithString) +# define RTCrX509Name_GetShortRdn RT_MANGLER(RTCrX509Name_GetShortRdn) +# define RTCrX509OldAuthorityKeyIdentifier_Compare RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Compare) +# define RTCrX509OldAuthorityKeyIdentifier_Delete RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Delete) +# define RTCrX509OldAuthorityKeyIdentifier_Enum RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Enum) +# define RTCrX509OtherName_Compare RT_MANGLER(RTCrX509OtherName_Compare) +# define RTCrX509OtherName_Delete RT_MANGLER(RTCrX509OtherName_Delete) +# define RTCrX509OtherName_Enum RT_MANGLER(RTCrX509OtherName_Enum) +# define RTCrX509PolicyConstraints_Compare RT_MANGLER(RTCrX509PolicyConstraints_Compare) +# define RTCrX509PolicyConstraints_Delete RT_MANGLER(RTCrX509PolicyConstraints_Delete) +# define RTCrX509PolicyConstraints_Enum RT_MANGLER(RTCrX509PolicyConstraints_Enum) +# define RTCrX509PolicyInformation_Compare RT_MANGLER(RTCrX509PolicyInformation_Compare) +# define RTCrX509PolicyInformation_Delete RT_MANGLER(RTCrX509PolicyInformation_Delete) +# define RTCrX509PolicyInformation_Enum RT_MANGLER(RTCrX509PolicyInformation_Enum) +# define RTCrX509PolicyMapping_Compare RT_MANGLER(RTCrX509PolicyMapping_Compare) +# define RTCrX509PolicyMapping_Delete RT_MANGLER(RTCrX509PolicyMapping_Delete) +# define RTCrX509PolicyMapping_Enum RT_MANGLER(RTCrX509PolicyMapping_Enum) +# define RTCrX509PolicyMappings_Compare RT_MANGLER(RTCrX509PolicyMappings_Compare) +# define RTCrX509PolicyMappings_Delete RT_MANGLER(RTCrX509PolicyMappings_Delete) +# define RTCrX509PolicyMappings_Enum RT_MANGLER(RTCrX509PolicyMappings_Enum) +# define RTCrX509PolicyQualifierInfo_Compare RT_MANGLER(RTCrX509PolicyQualifierInfo_Compare) +# define RTCrX509PolicyQualifierInfo_Delete RT_MANGLER(RTCrX509PolicyQualifierInfo_Delete) +# define RTCrX509PolicyQualifierInfo_Enum RT_MANGLER(RTCrX509PolicyQualifierInfo_Enum) +# define RTCrX509PolicyQualifierInfos_Compare RT_MANGLER(RTCrX509PolicyQualifierInfos_Compare) +# define RTCrX509PolicyQualifierInfos_Delete RT_MANGLER(RTCrX509PolicyQualifierInfos_Delete) +# define RTCrX509PolicyQualifierInfos_Enum RT_MANGLER(RTCrX509PolicyQualifierInfos_Enum) +# define RTCrX509SubjectPublicKeyInfo_Compare RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Compare) +# define RTCrX509SubjectPublicKeyInfo_Delete RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Delete) +# define RTCrX509SubjectPublicKeyInfo_Enum RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Enum) +# define RTCrX509TbsCertificate_Compare RT_MANGLER(RTCrX509TbsCertificate_Compare) +# define RTCrX509TbsCertificate_Delete RT_MANGLER(RTCrX509TbsCertificate_Delete) +# define RTCrX509TbsCertificate_Enum RT_MANGLER(RTCrX509TbsCertificate_Enum) +# define RTCrX509TbsCertificate_ReprocessExtensions RT_MANGLER(RTCrX509TbsCertificate_ReprocessExtensions) +# define RTCrX509Validity_Compare RT_MANGLER(RTCrX509Validity_Compare) +# define RTCrX509Validity_Delete RT_MANGLER(RTCrX509Validity_Delete) +# define RTCrX509Validity_Enum RT_MANGLER(RTCrX509Validity_Enum) +# define RTCrX509Validity_IsValidAtTimeSpec RT_MANGLER(RTCrX509Validity_IsValidAtTimeSpec) +# define RTCrX509Certificate_ReadFromFile RT_MANGLER(RTCrX509Certificate_ReadFromFile) +# define RTCrX509Certificate_ReadFromBuffer RT_MANGLER(RTCrX509Certificate_ReadFromBuffer) +# define RTCrX509AlgorithmIdentifier_Clone RT_MANGLER(RTCrX509AlgorithmIdentifier_Clone) +# define RTCrX509AlgorithmIdentifier_Init RT_MANGLER(RTCrX509AlgorithmIdentifier_Init) +# define RTCrX509AlgorithmIdentifiers_Clone RT_MANGLER(RTCrX509AlgorithmIdentifiers_Clone) +# define RTCrX509AlgorithmIdentifiers_Init RT_MANGLER(RTCrX509AlgorithmIdentifiers_Init) +# define RTCrX509AttributeTypeAndValue_Clone RT_MANGLER(RTCrX509AttributeTypeAndValue_Clone) +# define RTCrX509AttributeTypeAndValue_Init RT_MANGLER(RTCrX509AttributeTypeAndValue_Init) +# define RTCrX509AttributeTypeAndValues_Clone RT_MANGLER(RTCrX509AttributeTypeAndValues_Clone) +# define RTCrX509AttributeTypeAndValues_Init RT_MANGLER(RTCrX509AttributeTypeAndValues_Init) +# define RTCrX509AuthorityKeyIdentifier_Clone RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Clone) +# define RTCrX509AuthorityKeyIdentifier_Init RT_MANGLER(RTCrX509AuthorityKeyIdentifier_Init) +# define RTCrX509BasicConstraints_Clone RT_MANGLER(RTCrX509BasicConstraints_Clone) +# define RTCrX509BasicConstraints_Init RT_MANGLER(RTCrX509BasicConstraints_Init) +# define RTCrX509CertificatePolicies_Clone RT_MANGLER(RTCrX509CertificatePolicies_Clone) +# define RTCrX509CertificatePolicies_Init RT_MANGLER(RTCrX509CertificatePolicies_Init) +# define RTCrX509Certificate_Clone RT_MANGLER(RTCrX509Certificate_Clone) +# define RTCrX509Certificate_Init RT_MANGLER(RTCrX509Certificate_Init) +# define RTCrX509Certificates_Clone RT_MANGLER(RTCrX509Certificates_Clone) +# define RTCrX509Certificates_Init RT_MANGLER(RTCrX509Certificates_Init) +# define RTCrX509Extension_Clone RT_MANGLER(RTCrX509Extension_Clone) +# define RTCrX509Extension_Init RT_MANGLER(RTCrX509Extension_Init) +# define RTCrX509Extensions_Clone RT_MANGLER(RTCrX509Extensions_Clone) +# define RTCrX509Extensions_Init RT_MANGLER(RTCrX509Extensions_Init) +# define RTCrX509GeneralName_Clone RT_MANGLER(RTCrX509GeneralName_Clone) +# define RTCrX509GeneralName_Init RT_MANGLER(RTCrX509GeneralName_Init) +# define RTCrX509GeneralNames_Clone RT_MANGLER(RTCrX509GeneralNames_Clone) +# define RTCrX509GeneralNames_Init RT_MANGLER(RTCrX509GeneralNames_Init) +# define RTCrX509GeneralSubtree_Clone RT_MANGLER(RTCrX509GeneralSubtree_Clone) +# define RTCrX509GeneralSubtree_Init RT_MANGLER(RTCrX509GeneralSubtree_Init) +# define RTCrX509GeneralSubtrees_Clone RT_MANGLER(RTCrX509GeneralSubtrees_Clone) +# define RTCrX509GeneralSubtrees_Init RT_MANGLER(RTCrX509GeneralSubtrees_Init) +# define RTCrX509NameConstraints_Clone RT_MANGLER(RTCrX509NameConstraints_Clone) +# define RTCrX509NameConstraints_Init RT_MANGLER(RTCrX509NameConstraints_Init) +# define RTCrX509Name_Clone RT_MANGLER(RTCrX509Name_Clone) +# define RTCrX509Name_Init RT_MANGLER(RTCrX509Name_Init) +# define RTCrX509Name_RecodeAsUtf8 RT_MANGLER(RTCrX509Name_RecodeAsUtf8) +# define RTCrX509OldAuthorityKeyIdentifier_Clone RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Clone) +# define RTCrX509OldAuthorityKeyIdentifier_Init RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_Init) +# define RTCrX509OtherName_Clone RT_MANGLER(RTCrX509OtherName_Clone) +# define RTCrX509OtherName_Init RT_MANGLER(RTCrX509OtherName_Init) +# define RTCrX509PolicyConstraints_Clone RT_MANGLER(RTCrX509PolicyConstraints_Clone) +# define RTCrX509PolicyConstraints_Init RT_MANGLER(RTCrX509PolicyConstraints_Init) +# define RTCrX509PolicyInformation_Clone RT_MANGLER(RTCrX509PolicyInformation_Clone) +# define RTCrX509PolicyInformation_Init RT_MANGLER(RTCrX509PolicyInformation_Init) +# define RTCrX509PolicyMapping_Clone RT_MANGLER(RTCrX509PolicyMapping_Clone) +# define RTCrX509PolicyMapping_Init RT_MANGLER(RTCrX509PolicyMapping_Init) +# define RTCrX509PolicyMappings_Clone RT_MANGLER(RTCrX509PolicyMappings_Clone) +# define RTCrX509PolicyMappings_Init RT_MANGLER(RTCrX509PolicyMappings_Init) +# define RTCrX509PolicyQualifierInfo_Clone RT_MANGLER(RTCrX509PolicyQualifierInfo_Clone) +# define RTCrX509PolicyQualifierInfo_Init RT_MANGLER(RTCrX509PolicyQualifierInfo_Init) +# define RTCrX509PolicyQualifierInfos_Clone RT_MANGLER(RTCrX509PolicyQualifierInfos_Clone) +# define RTCrX509PolicyQualifierInfos_Init RT_MANGLER(RTCrX509PolicyQualifierInfos_Init) +# define RTCrX509SubjectPublicKeyInfo_Clone RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Clone) +# define RTCrX509SubjectPublicKeyInfo_Init RT_MANGLER(RTCrX509SubjectPublicKeyInfo_Init) +# define RTCrX509TbsCertificate_Clone RT_MANGLER(RTCrX509TbsCertificate_Clone) +# define RTCrX509TbsCertificate_Init RT_MANGLER(RTCrX509TbsCertificate_Init) +# define RTCrX509Validity_Clone RT_MANGLER(RTCrX509Validity_Clone) +# define RTCrX509Validity_Init RT_MANGLER(RTCrX509Validity_Init) +# define RTCrX509AlgorithmIdentifier_CheckSanity RT_MANGLER(RTCrX509AlgorithmIdentifier_CheckSanity) +# define RTCrX509AlgorithmIdentifiers_CheckSanity RT_MANGLER(RTCrX509AlgorithmIdentifiers_CheckSanity) +# define RTCrX509AttributeTypeAndValue_CheckSanity RT_MANGLER(RTCrX509AttributeTypeAndValue_CheckSanity) +# define RTCrX509AttributeTypeAndValues_CheckSanity RT_MANGLER(RTCrX509AttributeTypeAndValues_CheckSanity) +# define RTCrX509AuthorityKeyIdentifier_CheckSanity RT_MANGLER(RTCrX509AuthorityKeyIdentifier_CheckSanity) +# define RTCrX509BasicConstraints_CheckSanity RT_MANGLER(RTCrX509BasicConstraints_CheckSanity) +# define RTCrX509CertificatePolicies_CheckSanity RT_MANGLER(RTCrX509CertificatePolicies_CheckSanity) +# define RTCrX509Certificate_CheckSanity RT_MANGLER(RTCrX509Certificate_CheckSanity) +# define RTCrX509Certificates_CheckSanity RT_MANGLER(RTCrX509Certificates_CheckSanity) +# define RTCrX509Extension_CheckSanity RT_MANGLER(RTCrX509Extension_CheckSanity) +# define RTCrX509Extensions_CheckSanity RT_MANGLER(RTCrX509Extensions_CheckSanity) +# define RTCrX509GeneralName_CheckSanity RT_MANGLER(RTCrX509GeneralName_CheckSanity) +# define RTCrX509GeneralNames_CheckSanity RT_MANGLER(RTCrX509GeneralNames_CheckSanity) +# define RTCrX509GeneralSubtree_CheckSanity RT_MANGLER(RTCrX509GeneralSubtree_CheckSanity) +# define RTCrX509GeneralSubtrees_CheckSanity RT_MANGLER(RTCrX509GeneralSubtrees_CheckSanity) +# define RTCrX509NameConstraints_CheckSanity RT_MANGLER(RTCrX509NameConstraints_CheckSanity) +# define RTCrX509Name_CheckSanity RT_MANGLER(RTCrX509Name_CheckSanity) +# define RTCrX509OldAuthorityKeyIdentifier_CheckSanity RT_MANGLER(RTCrX509OldAuthorityKeyIdentifier_CheckSanity) +# define RTCrX509OtherName_CheckSanity RT_MANGLER(RTCrX509OtherName_CheckSanity) +# define RTCrX509PolicyConstraints_CheckSanity RT_MANGLER(RTCrX509PolicyConstraints_CheckSanity) +# define RTCrX509PolicyInformation_CheckSanity RT_MANGLER(RTCrX509PolicyInformation_CheckSanity) +# define RTCrX509PolicyMapping_CheckSanity RT_MANGLER(RTCrX509PolicyMapping_CheckSanity) +# define RTCrX509PolicyMappings_CheckSanity RT_MANGLER(RTCrX509PolicyMappings_CheckSanity) +# define RTCrX509PolicyQualifierInfo_CheckSanity RT_MANGLER(RTCrX509PolicyQualifierInfo_CheckSanity) +# define RTCrX509PolicyQualifierInfos_CheckSanity RT_MANGLER(RTCrX509PolicyQualifierInfos_CheckSanity) +# define RTCrX509SubjectPublicKeyInfo_CheckSanity RT_MANGLER(RTCrX509SubjectPublicKeyInfo_CheckSanity) +# define RTCrX509TbsCertificate_CheckSanity RT_MANGLER(RTCrX509TbsCertificate_CheckSanity) +# define RTCrX509Validity_CheckSanity RT_MANGLER(RTCrX509Validity_CheckSanity) +# define RTCrX509Certificate_VerifySignature RT_MANGLER(RTCrX509Certificate_VerifySignature) +# define RTCrX509Certificate_VerifySignatureSelfSigned RT_MANGLER(RTCrX509Certificate_VerifySignatureSelfSigned) +# define RTCrTafCertPathControls_DecodeAsn1 RT_MANGLER(RTCrTafCertPathControls_DecodeAsn1) +# define RTCrTafTrustAnchorChoice_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorChoice_DecodeAsn1) +# define RTCrTafTrustAnchorInfo_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorInfo_DecodeAsn1) +# define RTCrTafTrustAnchorList_DecodeAsn1 RT_MANGLER(RTCrTafTrustAnchorList_DecodeAsn1) +# define RTCrTafCertPathControls_Compare RT_MANGLER(RTCrTafCertPathControls_Compare) +# define RTCrTafCertPathControls_Delete RT_MANGLER(RTCrTafCertPathControls_Delete) +# define RTCrTafCertPathControls_Enum RT_MANGLER(RTCrTafCertPathControls_Enum) +# define RTCrTafTrustAnchorChoice_Compare RT_MANGLER(RTCrTafTrustAnchorChoice_Compare) +# define RTCrTafTrustAnchorChoice_Delete RT_MANGLER(RTCrTafTrustAnchorChoice_Delete) +# define RTCrTafTrustAnchorChoice_Enum RT_MANGLER(RTCrTafTrustAnchorChoice_Enum) +# define RTCrTafTrustAnchorInfo_Compare RT_MANGLER(RTCrTafTrustAnchorInfo_Compare) +# define RTCrTafTrustAnchorInfo_Delete RT_MANGLER(RTCrTafTrustAnchorInfo_Delete) +# define RTCrTafTrustAnchorInfo_Enum RT_MANGLER(RTCrTafTrustAnchorInfo_Enum) +# define RTCrTafTrustAnchorList_Compare RT_MANGLER(RTCrTafTrustAnchorList_Compare) +# define RTCrTafTrustAnchorList_Delete RT_MANGLER(RTCrTafTrustAnchorList_Delete) +# define RTCrTafTrustAnchorList_Enum RT_MANGLER(RTCrTafTrustAnchorList_Enum) +# define RTCrTafCertPathControls_Clone RT_MANGLER(RTCrTafCertPathControls_Clone) +# define RTCrTafCertPathControls_Init RT_MANGLER(RTCrTafCertPathControls_Init) +# define RTCrTafTrustAnchorChoice_Clone RT_MANGLER(RTCrTafTrustAnchorChoice_Clone) +# define RTCrTafTrustAnchorChoice_Init RT_MANGLER(RTCrTafTrustAnchorChoice_Init) +# define RTCrTafTrustAnchorInfo_Clone RT_MANGLER(RTCrTafTrustAnchorInfo_Clone) +# define RTCrTafTrustAnchorInfo_Init RT_MANGLER(RTCrTafTrustAnchorInfo_Init) +# define RTCrTafTrustAnchorList_Clone RT_MANGLER(RTCrTafTrustAnchorList_Clone) +# define RTCrTafTrustAnchorList_Init RT_MANGLER(RTCrTafTrustAnchorList_Init) +# define RTCrTafCertPathControls_CheckSanity RT_MANGLER(RTCrTafCertPathControls_CheckSanity) +# define RTCrTafTrustAnchorChoice_CheckSanity RT_MANGLER(RTCrTafTrustAnchorChoice_CheckSanity) +# define RTCrTafTrustAnchorInfo_CheckSanity RT_MANGLER(RTCrTafTrustAnchorInfo_CheckSanity) +# define RTCrTafTrustAnchorList_CheckSanity RT_MANGLER(RTCrTafTrustAnchorList_CheckSanity) +# define RTCrTspAccuracy_CheckSanity RT_MANGLER(RTCrTspAccuracy_CheckSanity) +# define RTCrTspAccuracy_Clone RT_MANGLER(RTCrTspAccuracy_Clone) +# define RTCrTspAccuracy_Compare RT_MANGLER(RTCrTspAccuracy_Compare) +# define RTCrTspAccuracy_DecodeAsn1 RT_MANGLER(RTCrTspAccuracy_DecodeAsn1) +# define RTCrTspAccuracy_Delete RT_MANGLER(RTCrTspAccuracy_Delete) +# define RTCrTspAccuracy_Enum RT_MANGLER(RTCrTspAccuracy_Enum) +# define RTCrTspAccuracy_Init RT_MANGLER(RTCrTspAccuracy_Init) +# define RTCrTspMessageImprint_CheckSanity RT_MANGLER(RTCrTspMessageImprint_CheckSanity) +# define RTCrTspMessageImprint_Clone RT_MANGLER(RTCrTspMessageImprint_Clone) +# define RTCrTspMessageImprint_Compare RT_MANGLER(RTCrTspMessageImprint_Compare) +# define RTCrTspMessageImprint_DecodeAsn1 RT_MANGLER(RTCrTspMessageImprint_DecodeAsn1) +# define RTCrTspMessageImprint_Delete RT_MANGLER(RTCrTspMessageImprint_Delete) +# define RTCrTspMessageImprint_Enum RT_MANGLER(RTCrTspMessageImprint_Enum) +# define RTCrTspMessageImprint_Init RT_MANGLER(RTCrTspMessageImprint_Init) +# define RTCrTspTstInfo_CheckSanity RT_MANGLER(RTCrTspTstInfo_CheckSanity) +# define RTCrTspTstInfo_Clone RT_MANGLER(RTCrTspTstInfo_Clone) +# define RTCrTspTstInfo_Compare RT_MANGLER(RTCrTspTstInfo_Compare) +# define RTCrTspTstInfo_DecodeAsn1 RT_MANGLER(RTCrTspTstInfo_DecodeAsn1) +# define RTCrTspTstInfo_Delete RT_MANGLER(RTCrTspTstInfo_Delete) +# define RTCrTspTstInfo_Enum RT_MANGLER(RTCrTspTstInfo_Enum) +# define RTCrTspTstInfo_Init RT_MANGLER(RTCrTspTstInfo_Init) +# define RTCrCertCtxRelease RT_MANGLER(RTCrCertCtxRelease) +# define RTCrCertCtxRetain RT_MANGLER(RTCrCertCtxRetain) +# define RTCrStoreCertAddEncoded RT_MANGLER(RTCrStoreCertAddEncoded) +# define RTCrStoreCertByIssuerAndSerialNo RT_MANGLER(RTCrStoreCertByIssuerAndSerialNo) +# define RTCrStoreCertCount RT_MANGLER(RTCrStoreCertCount) +# define RTCrStoreCertFindAll RT_MANGLER(RTCrStoreCertFindAll) +# define RTCrStoreCertFindBySubjectOrAltSubjectByRfc5280 RT_MANGLER(RTCrStoreCertFindBySubjectOrAltSubjectByRfc5280) +# define RTCrStoreCertSearchDestroy RT_MANGLER(RTCrStoreCertSearchDestroy) +# define RTCrStoreCertSearchNext RT_MANGLER(RTCrStoreCertSearchNext) +# define RTCrStoreConvertToOpenSslCertStack RT_MANGLER(RTCrStoreConvertToOpenSslCertStack) +# define RTCrStoreConvertToOpenSslCertStore RT_MANGLER(RTCrStoreConvertToOpenSslCertStore) +# define RTCrStoreRelease RT_MANGLER(RTCrStoreRelease) +# define RTCrStoreRetain RT_MANGLER(RTCrStoreRetain) +# define RTCrStoreCreateInMem RT_MANGLER(RTCrStoreCreateInMem) +# define RTCrStoreCreateSnapshotById RT_MANGLER(RTCrStoreCreateSnapshotById) +# define RTCrStoreCreateSnapshotOfUserAndSystemTrustedCAsAndCerts RT_MANGLER(RTCrStoreCreateSnapshotOfUserAndSystemTrustedCAsAndCerts) +# define RTCrStoreCertAddFromDir RT_MANGLER(RTCrStoreCertAddFromDir) +# define RTCrStoreCertAddFromFile RT_MANGLER(RTCrStoreCertAddFromFile) +# define RTCrStoreCertAddFromJavaKeyStore RT_MANGLER(RTCrStoreCertAddFromJavaKeyStore) +# define RTCrStoreCertAddFromJavaKeyStoreInMem RT_MANGLER(RTCrStoreCertAddFromJavaKeyStoreInMem) +# define RTCrStoreCertAddFromStore RT_MANGLER(RTCrStoreCertAddFromStore) +# define RTCrStoreCertAddWantedFromDir RT_MANGLER(RTCrStoreCertAddWantedFromDir) +# define RTCrStoreCertAddWantedFromFile RT_MANGLER(RTCrStoreCertAddWantedFromFile) +# define RTCrStoreCertAddWantedFromStore RT_MANGLER(RTCrStoreCertAddWantedFromStore) +# define RTCrStoreCertAddWantedFromFishingExpedition RT_MANGLER(RTCrStoreCertAddWantedFromFishingExpedition) +# define RTCrStoreCertCheckWanted RT_MANGLER(RTCrStoreCertCheckWanted) +# define RTCrStoreCertExportAsPem RT_MANGLER(RTCrStoreCertExportAsPem) +# define RTErrInfoAdd RT_MANGLER(RTErrInfoAdd) +# define RTErrInfoAddF RT_MANGLER(RTErrInfoAddF) +# define RTErrInfoAddV RT_MANGLER(RTErrInfoAddV) +# define RTLdrHashImage RT_MANGLER(RTLdrHashImage) +# define RTLdrOpenWithReader RT_MANGLER(RTLdrOpenWithReader) +# define RTLdrQueryPropEx RT_MANGLER(RTLdrQueryPropEx) +# define RTLdrVerifySignature RT_MANGLER(RTLdrVerifySignature) +# define RTBigNumAdd RT_MANGLER(RTBigNumAdd) +# define RTBigNumAssign RT_MANGLER(RTBigNumAssign) +# define RTBigNumBitWidth RT_MANGLER(RTBigNumBitWidth) +# define RTBigNumByteWidth RT_MANGLER(RTBigNumByteWidth) +# define RTBigNumClone RT_MANGLER(RTBigNumClone) +# define RTBigNumCompare RT_MANGLER(RTBigNumCompare) +# define RTBigNumCompareWithS64 RT_MANGLER(RTBigNumCompareWithS64) +# define RTBigNumCompareWithU64 RT_MANGLER(RTBigNumCompareWithU64) +# define RTBigNumDestroy RT_MANGLER(RTBigNumDestroy) +# define RTBigNumDivide RT_MANGLER(RTBigNumDivide) +# define RTBigNumDivideKnuth RT_MANGLER(RTBigNumDivideKnuth) +# define RTBigNumDivideLong RT_MANGLER(RTBigNumDivideLong) +# define RTBigNumExponentiate RT_MANGLER(RTBigNumExponentiate) +# define RTBigNumInit RT_MANGLER(RTBigNumInit) +# define RTBigNumInitZero RT_MANGLER(RTBigNumInitZero) +# define RTBigNumModExp RT_MANGLER(RTBigNumModExp) +# define RTBigNumModulo RT_MANGLER(RTBigNumModulo) +# define RTBigNumMultiply RT_MANGLER(RTBigNumMultiply) +# define RTBigNumNegate RT_MANGLER(RTBigNumNegate) +# define RTBigNumNegateThis RT_MANGLER(RTBigNumNegateThis) +# define RTBigNumShiftLeft RT_MANGLER(RTBigNumShiftLeft) +# define RTBigNumShiftRight RT_MANGLER(RTBigNumShiftRight) +# define RTBigNumSubtract RT_MANGLER(RTBigNumSubtract) +# define RTBigNumToBytesBigEndian RT_MANGLER(RTBigNumToBytesBigEndian) +# define RTUInt128MulByU64 RT_MANGLER(RTUInt128MulByU64) +# define RTUInt128MulByU64_EndProc RT_MANGLER(RTUInt128MulByU64_EndProc) +# define RTUtf16Copy RT_MANGLER(RTUtf16Copy) +# define RTUtf16CopyAscii RT_MANGLER(RTUtf16CopyAscii) +# define RTUtf16Cat RT_MANGLER(RTUtf16Cat) +# define RTUtf16CatAscii RT_MANGLER(RTUtf16CatAscii) +# define RTUtf16End RT_MANGLER(RTUtf16End) +# define RTUtf16ICmpAscii RT_MANGLER(RTUtf16ICmpAscii) +# define RTUtf16NICmpAscii RT_MANGLER(RTUtf16NICmpAscii) +# define RTUtf16NLen RT_MANGLER(RTUtf16NLen) +# define RTUtf16NLenEx RT_MANGLER(RTUtf16NLenEx) +# define RTUtf16PrintHexBytes RT_MANGLER(RTUtf16PrintHexBytes) +# define RTMemSaferAllocZExTag RT_MANGLER(RTMemSaferAllocZExTag) +# define RTMemSaferAllocZTag RT_MANGLER(RTMemSaferAllocZTag) +# define RTMemSaferFree RT_MANGLER(RTMemSaferFree) +# define RTMemSaferReallocZExTag RT_MANGLER(RTMemSaferReallocZExTag) +# define RTMemSaferReallocZTag RT_MANGLER(RTMemSaferReallocZTag) +# define RTMemSaferScramble RT_MANGLER(RTMemSaferScramble) +# define RTMemSaferUnscramble RT_MANGLER(RTMemSaferUnscramble) +# define RTErrConvertFromDarwin RT_MANGLER(RTErrConvertFromDarwin) +# define RTErrConvertFromDarwinCOM RT_MANGLER(RTErrConvertFromDarwinCOM) +# define RTErrConvertFromDarwinIO RT_MANGLER(RTErrConvertFromDarwinIO) +# define RTErrConvertFromDarwinKern RT_MANGLER(RTErrConvertFromDarwinKern) +# define RTErrConvertFromDarwin RT_MANGLER(RTErrConvertFromDarwin) +# define RTErrConvertFromDarwinIO RT_MANGLER(RTErrConvertFromDarwinIO) +# define RTErrConvertFromDarwinKern RT_MANGLER(RTErrConvertFromDarwinKern) + +# define RTAsn1SeqOfBitStrings_Erase RT_MANGLER(RTAsn1SeqOfBitStrings_Erase) +# define RTAsn1SeqOfBitStrings_InsertEx RT_MANGLER(RTAsn1SeqOfBitStrings_InsertEx) +# define RTAsn1SeqOfBooleans_Erase RT_MANGLER(RTAsn1SeqOfBooleans_Erase) +# define RTAsn1SeqOfBooleans_InsertEx RT_MANGLER(RTAsn1SeqOfBooleans_InsertEx) +# define RTAsn1SeqOfCores_Erase RT_MANGLER(RTAsn1SeqOfCores_Erase) +# define RTAsn1SeqOfCores_InsertEx RT_MANGLER(RTAsn1SeqOfCores_InsertEx) +# define RTAsn1SeqOfIntegers_Erase RT_MANGLER(RTAsn1SeqOfIntegers_Erase) +# define RTAsn1SeqOfIntegers_InsertEx RT_MANGLER(RTAsn1SeqOfIntegers_InsertEx) +# define RTAsn1SeqOfObjIds_Erase RT_MANGLER(RTAsn1SeqOfObjIds_Erase) +# define RTAsn1SeqOfObjIds_InsertEx RT_MANGLER(RTAsn1SeqOfObjIds_InsertEx) +# define RTAsn1SeqOfOctetStrings_Erase RT_MANGLER(RTAsn1SeqOfOctetStrings_Erase) +# define RTAsn1SeqOfOctetStrings_InsertEx RT_MANGLER(RTAsn1SeqOfOctetStrings_InsertEx) +# define RTAsn1SeqOfStrings_Erase RT_MANGLER(RTAsn1SeqOfStrings_Erase) +# define RTAsn1SeqOfStrings_InsertEx RT_MANGLER(RTAsn1SeqOfStrings_InsertEx) +# define RTAsn1SeqOfTimes_Erase RT_MANGLER(RTAsn1SeqOfTimes_Erase) +# define RTAsn1SeqOfTimes_InsertEx RT_MANGLER(RTAsn1SeqOfTimes_InsertEx) +# define RTAsn1SetOfBitStrings_Erase RT_MANGLER(RTAsn1SetOfBitStrings_Erase) +# define RTAsn1SetOfBitStrings_InsertEx RT_MANGLER(RTAsn1SetOfBitStrings_InsertEx) +# define RTAsn1SetOfBooleans_Erase RT_MANGLER(RTAsn1SetOfBooleans_Erase) +# define RTAsn1SetOfBooleans_InsertEx RT_MANGLER(RTAsn1SetOfBooleans_InsertEx) +# define RTAsn1SetOfCores_Erase RT_MANGLER(RTAsn1SetOfCores_Erase) +# define RTAsn1SetOfCores_InsertEx RT_MANGLER(RTAsn1SetOfCores_InsertEx) +# define RTAsn1SetOfIntegers_Erase RT_MANGLER(RTAsn1SetOfIntegers_Erase) +# define RTAsn1SetOfIntegers_InsertEx RT_MANGLER(RTAsn1SetOfIntegers_InsertEx) +# define RTAsn1SetOfObjIds_Erase RT_MANGLER(RTAsn1SetOfObjIds_Erase) +# define RTAsn1SetOfObjIds_InsertEx RT_MANGLER(RTAsn1SetOfObjIds_InsertEx) +# define RTAsn1SetOfObjIdSeqs_Erase RT_MANGLER(RTAsn1SetOfObjIdSeqs_Erase) +# define RTAsn1SetOfObjIdSeqs_InsertEx RT_MANGLER(RTAsn1SetOfObjIdSeqs_InsertEx) +# define RTAsn1SetOfOctetStrings_Erase RT_MANGLER(RTAsn1SetOfOctetStrings_Erase) +# define RTAsn1SetOfOctetStrings_InsertEx RT_MANGLER(RTAsn1SetOfOctetStrings_InsertEx) +# define RTAsn1SetOfStrings_Erase RT_MANGLER(RTAsn1SetOfStrings_Erase) +# define RTAsn1SetOfStrings_InsertEx RT_MANGLER(RTAsn1SetOfStrings_InsertEx) +# define RTAsn1SetOfTimes_Erase RT_MANGLER(RTAsn1SetOfTimes_Erase) +# define RTAsn1SetOfTimes_InsertEx RT_MANGLER(RTAsn1SetOfTimes_InsertEx) +# define RTCrPkcs7Attributes_Erase RT_MANGLER(RTCrPkcs7Attributes_Erase) +# define RTCrPkcs7Attributes_InsertEx RT_MANGLER(RTCrPkcs7Attributes_InsertEx) +# define RTCrPkcs7SetOfCerts_Erase RT_MANGLER(RTCrPkcs7SetOfCerts_Erase) +# define RTCrPkcs7SetOfCerts_InsertEx RT_MANGLER(RTCrPkcs7SetOfCerts_InsertEx) +# define RTCrPkcs7SetOfContentInfos_Erase RT_MANGLER(RTCrPkcs7SetOfContentInfos_Erase) +# define RTCrPkcs7SetOfContentInfos_InsertEx RT_MANGLER(RTCrPkcs7SetOfContentInfos_InsertEx) +# define RTCrPkcs7SetOfSignedData_Erase RT_MANGLER(RTCrPkcs7SetOfSignedData_Erase) +# define RTCrPkcs7SetOfSignedData_InsertEx RT_MANGLER(RTCrPkcs7SetOfSignedData_InsertEx) +# define RTCrPkcs7SignerInfos_Erase RT_MANGLER(RTCrPkcs7SignerInfos_Erase) +# define RTCrPkcs7SignerInfos_InsertEx RT_MANGLER(RTCrPkcs7SignerInfos_InsertEx) +# define RTCrRsaOtherPrimeInfos_Erase RT_MANGLER(RTCrRsaOtherPrimeInfos_Erase) +# define RTCrRsaOtherPrimeInfos_InsertEx RT_MANGLER(RTCrRsaOtherPrimeInfos_InsertEx) +# define RTCrSpcSerializedObjectAttributes_Erase RT_MANGLER(RTCrSpcSerializedObjectAttributes_Erase) +# define RTCrSpcSerializedObjectAttributes_InsertEx RT_MANGLER(RTCrSpcSerializedObjectAttributes_InsertEx) +# define RTCrTafTrustAnchorList_Erase RT_MANGLER(RTCrTafTrustAnchorList_Erase) +# define RTCrTafTrustAnchorList_InsertEx RT_MANGLER(RTCrTafTrustAnchorList_InsertEx) +# define RTCrX509AlgorithmIdentifiers_Erase RT_MANGLER(RTCrX509AlgorithmIdentifiers_Erase) +# define RTCrX509AlgorithmIdentifiers_InsertEx RT_MANGLER(RTCrX509AlgorithmIdentifiers_InsertEx) +# define RTCrX509AttributeTypeAndValues_Erase RT_MANGLER(RTCrX509AttributeTypeAndValues_Erase) +# define RTCrX509AttributeTypeAndValues_InsertEx RT_MANGLER(RTCrX509AttributeTypeAndValues_InsertEx) +# define RTCrX509CertificatePolicies_Erase RT_MANGLER(RTCrX509CertificatePolicies_Erase) +# define RTCrX509CertificatePolicies_InsertEx RT_MANGLER(RTCrX509CertificatePolicies_InsertEx) +# define RTCrX509Certificates_Erase RT_MANGLER(RTCrX509Certificates_Erase) +# define RTCrX509Certificates_InsertEx RT_MANGLER(RTCrX509Certificates_InsertEx) +# define RTCrX509Extensions_Erase RT_MANGLER(RTCrX509Extensions_Erase) +# define RTCrX509Extensions_InsertEx RT_MANGLER(RTCrX509Extensions_InsertEx) +# define RTCrX509GeneralNames_Erase RT_MANGLER(RTCrX509GeneralNames_Erase) +# define RTCrX509GeneralNames_InsertEx RT_MANGLER(RTCrX509GeneralNames_InsertEx) +# define RTCrX509GeneralSubtrees_Erase RT_MANGLER(RTCrX509GeneralSubtrees_Erase) +# define RTCrX509GeneralSubtrees_InsertEx RT_MANGLER(RTCrX509GeneralSubtrees_InsertEx) +# define RTCrX509Name_Erase RT_MANGLER(RTCrX509Name_Erase) +# define RTCrX509Name_InsertEx RT_MANGLER(RTCrX509Name_InsertEx) +# define RTCrX509PolicyMappings_Erase RT_MANGLER(RTCrX509PolicyMappings_Erase) +# define RTCrX509PolicyMappings_InsertEx RT_MANGLER(RTCrX509PolicyMappings_InsertEx) +# define RTCrX509PolicyQualifierInfos_Erase RT_MANGLER(RTCrX509PolicyQualifierInfos_Erase) +# define RTCrX509PolicyQualifierInfos_InsertEx RT_MANGLER(RTCrX509PolicyQualifierInfos_InsertEx) + + +/* + * Stable variables (alphabetical order): + */ +# define g_apfnRTZlibDeps RT_MANGLER(g_apfnRTZlibDeps) /* os2 win solaris */ +# define g_aRTUniFlagsRanges RT_MANGLER(g_aRTUniFlagsRanges) +# define g_aRTUniLowerRanges RT_MANGLER(g_aRTUniLowerRanges) +# define g_aRTUniUpperRanges RT_MANGLER(g_aRTUniUpperRanges) +# define g_fRTAlignmentChecks RT_MANGLER(g_fRTAlignmentChecks) +# define g_hKrnlDbgInfo RT_MANGLER(g_hKrnlDbgInfo) /* solaris */ +# define g_pStdErr RT_MANGLER(g_pStdErr) +# define g_pStdIn RT_MANGLER(g_pStdIn) +# define g_pStdOut RT_MANGLER(g_pStdOut) +# define g_pszRTAssertExpr RT_MANGLER(g_pszRTAssertExpr) +# define g_pszRTAssertFile RT_MANGLER(g_pszRTAssertFile) +# define g_pszRTAssertFunction RT_MANGLER(g_pszRTAssertFunction) +# define g_szRTAssertMsg1 RT_MANGLER(g_szRTAssertMsg1) +# define g_szRTAssertMsg2 RT_MANGLER(g_szRTAssertMsg2) +# define g_u32RTAssertLine RT_MANGLER(g_u32RTAssertLine) + +/* sort/merge into the above later: */ +# define g_RTAsn1Time_Vtable RT_MANGLER(g_RTAsn1Time_Vtable) +# define g_RTAsn1String_Vtable RT_MANGLER(g_RTAsn1String_Vtable) +# define g_RTAsn1OctetString_Vtable RT_MANGLER(g_RTAsn1OctetString_Vtable) +# define g_RTAsn1ObjId_Vtable RT_MANGLER(g_RTAsn1ObjId_Vtable) +# define g_RTAsn1Null_Vtable RT_MANGLER(g_RTAsn1Null_Vtable) +# define g_RTAsn1Integer_Vtable RT_MANGLER(g_RTAsn1Integer_Vtable) +# define g_RTAsn1Core_Vtable RT_MANGLER(g_RTAsn1Core_Vtable) +# define g_RTAsn1Boolean_Vtable RT_MANGLER(g_RTAsn1Boolean_Vtable) +# define g_RTAsn1BitString_Vtable RT_MANGLER(g_RTAsn1BitString_Vtable) +# define g_RTAsn1DefaultAllocator RT_MANGLER(g_RTAsn1DefaultAllocator) +# define g_RTAsn1EFenceAllocator RT_MANGLER(g_RTAsn1EFenceAllocator) +# define g_aRTCrX509CertificateMarkers RT_MANGLER(g_aRTCrX509CertificateMarkers) +# define g_cRTCrX509CertificateMarkers RT_MANGLER(g_cRTCrX509CertificateMarkers) + +#if 0 /* Disabled for now as I'm not sure the assmbler supports mangling yet. */ +# define g_abRTZeroPage RT_MANGLER(g_abRTZeroPage) +# define g_abRTZero4K RT_MANGLER(g_abRTZero4K) +# define g_abRTZero8K RT_MANGLER(g_abRTZero8K) +# define g_abRTZero16K RT_MANGLER(g_abRTZero16K) +# define g_abRTZero32K RT_MANGLER(g_abRTZero32K) +# define g_abRTZero64K RT_MANGLER(g_abRTZero64K) +#endif + + +/* + * Unstable functions (alphabetical order): + */ +/** @todo the list is incomplete! See the .def files + libraries. */ + + +/* + * Unstable variables (alphabetical order): + */ +/* none */ + +#endif /* !DOXYGEN_RUNNING */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/mem.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/mem.h @@ -0,0 +1,987 @@ +/** @file + * IPRT - Memory Management and Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_mem_h +#define ___iprt_mem_h + + +#include +#include + + +#ifdef IN_RC +# error "There are no RTMem APIs available Guest Context!" +#endif + + +/** @defgroup grp_rt_mem RTMem - Memory Management and Manipulation + * @ingroup grp_rt + * @{ + */ + +RT_C_DECLS_BEGIN + +/** @def RTMEM_ALIGNMENT + * The alignment of the memory blocks returned by RTMemAlloc(), RTMemAllocZ(), + * RTMemRealloc(), RTMemTmpAlloc() and RTMemTmpAllocZ() for allocations greater + * than RTMEM_ALIGNMENT. + * + * @note This alignment is not forced if the electric fence is active! + */ +#if defined(RT_OS_OS2) +# define RTMEM_ALIGNMENT 4 +#else +# define RTMEM_ALIGNMENT 8 +#endif + +/** @def RTMEM_TAG + * The default allocation tag used by the RTMem allocation APIs. + * + * When not defined before the inclusion of iprt/mem.h or iprt/memobj.h, this + * will default to the pointer to the current file name. The memory API will + * make of use of this as pointer to a volatile but read-only string. + * The alternative tag includes the line number for a more-detailed analysis. + */ +#ifndef RTMEM_TAG +# if 0 +# define RTMEM_TAG (__FILE__ ":" RT_XSTR(__LINE__)) +# else +# define RTMEM_TAG (__FILE__) +# endif +#endif + + +/** @name Allocate temporary memory. + * @{ */ +/** + * Allocates temporary memory with default tag. + * + * Temporary memory blocks are used for not too large memory blocks which + * are believed not to stick around for too long. Using this API instead + * of RTMemAlloc() not only gives the heap manager room for optimization + * but makes the code easier to read. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemTmpAlloc(cb) RTMemTmpAllocTag((cb), RTMEM_TAG) + +/** + * Allocates temporary memory with custom tag. + * + * Temporary memory blocks are used for not too large memory blocks which + * are believed not to stick around for too long. Using this API instead + * of RTMemAlloc() not only gives the heap manager room for optimization + * but makes the code easier to read. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemTmpAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocates zero'd temporary memory with default tag. + * + * Same as RTMemTmpAlloc() but the memory will be zero'd. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemTmpAllocZ(cb) RTMemTmpAllocZTag((cb), RTMEM_TAG) + +/** + * Allocates zero'd temporary memory with custom tag. + * + * Same as RTMemTmpAlloc() but the memory will be zero'd. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemTmpAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free temporary memory. + * + * @param pv Pointer to memory block. + */ +RTDECL(void) RTMemTmpFree(void *pv) RT_NO_THROW_PROTO; + +/** @} */ + + +/** + * Allocates memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemAlloc(cb) RTMemAllocTag((cb), RTMEM_TAG) + +/** + * Allocates memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure, assertion raised in strict builds. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocates zero'd memory with default tag. + * + * Instead of memset(pv, 0, sizeof()) use this when you want zero'd + * memory. This keeps the code smaller and the heap can skip the memset + * in about 0.42% of calls :-). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocated. + */ +#define RTMemAllocZ(cb) RTMemAllocZTag((cb), RTMEM_TAG) + +/** + * Allocates zero'd memory with custom tag. + * + * Instead of memset(pv, 0, sizeof()) use this when you want zero'd + * memory. This keeps the code smaller and the heap can skip the memset + * in about 0.42% of calls :-). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocated. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Wrapper around RTMemAlloc for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAlloc. + * @param cbUnaligned The unaligned size. + */ +#define RTMemAllocVar(cbUnaligned) RTMemAllocVarTag((cbUnaligned), RTMEM_TAG) + +/** + * Wrapper around RTMemAllocTag for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAlloc. + * @param cbUnaligned The unaligned size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocVarTag(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Wrapper around RTMemAllocZ for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAllocZ. + * @param cbUnaligned The unaligned size. + */ +#define RTMemAllocZVar(cbUnaligned) RTMemAllocZVarTag((cbUnaligned), RTMEM_TAG) + +/** + * Wrapper around RTMemAllocZTag for automatically aligning variable sized + * allocations so that the various electric fence heaps works correctly. + * + * @returns See RTMemAllocZ. + * @param cbUnaligned The unaligned size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemAllocZVarTag(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Duplicates a chunk of memory into a new heap block (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + */ +#define RTMemDup(pvSrc, cb) RTMemDupTag((pvSrc), (cb), RTMEM_TAG) + +/** + * Duplicates a chunk of memory into a new heap block (custom tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemDupTag(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Duplicates a chunk of memory into a new heap block with some additional + * zeroed memory (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + */ +#define RTMemDupEx(pvSrc, cbSrc, cbExtra) RTMemDupExTag((pvSrc), (cbSrc), (cbExtra), RTMEM_TAG) + +/** + * Duplicates a chunk of memory into a new heap block with some additional + * zeroed memory (default tag). + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemDupExTag(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Reallocates memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + */ +#define RTMemRealloc(pvOld, cbNew) RTMemReallocTag((pvOld), (cbNew), RTMEM_TAG) + +/** + * Reallocates memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemReallocTag(void *pvOld, size_t cbNew, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Frees memory. + * + * @param pv Pointer to memory block. + */ +RTDECL(void) RTMemFree(void *pv) RT_NO_THROW_PROTO; + + + +/** @name RTR0MemAllocEx and RTR0MemAllocExTag flags. + * @{ */ +/** The returned memory should be zeroed. */ +#define RTMEMALLOCEX_FLAGS_ZEROED RT_BIT(0) +/** It must be load code into the returned memory block and execute it. */ +#define RTMEMALLOCEX_FLAGS_EXEC RT_BIT(1) +/** Allocation from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC RT_BIT(2) +/** Allocate the memory such that it can be freed from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX_FREE RT_BIT(3) +/** Allocate and free from any context. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_ANY_CTX (RTMEMALLOCEX_FLAGS_ANY_CTX_ALLOC | RTMEMALLOCEX_FLAGS_ANY_CTX_FREE) +/** Reachable by 16-bit address. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_16BIT_REACH RT_BIT(4) +/** Reachable by 32-bit address. + * Will return VERR_NOT_SUPPORTED if not supported. */ +#define RTMEMALLOCEX_FLAGS_32BIT_REACH RT_BIT(5) +/** Mask of valid flags. */ +#define RTMEMALLOCEX_FLAGS_VALID_MASK UINT32_C(0x0000003f) +/** Mask of valid flags for ring-0. */ +#define RTMEMALLOCEX_FLAGS_VALID_MASK_R0 UINT32_C(0x0000000f) +/** @} */ + +/** + * Extended heap allocation API, default tag. + * + * @returns IPRT status code. + * @retval VERR_NO_MEMORY if we're out of memory. + * @retval VERR_NO_EXEC_MEMORY if we're out of executable memory. + * @retval VERR_NOT_SUPPORTED if any of the specified flags are unsupported. + * + * @param cb The amount of memory to allocate. + * @param cbAlignment The alignment requirements. Use 0 to indicate + * default alignment. + * @param fFlags A combination of the RTMEMALLOCEX_FLAGS_XXX + * defines. + * @param ppv Where to return the memory. + */ +#define RTMemAllocEx(cb, cbAlignment, fFlags, ppv) RTMemAllocExTag((cb), (cbAlignment), (fFlags), RTMEM_TAG, (ppv)) + +/** + * Extended heap allocation API, custom tag. + * + * Depending on the implementation, using this function may add extra overhead, + * so use the simpler APIs where ever possible. + * + * @returns IPRT status code. + * @retval VERR_NO_MEMORY if we're out of memory. + * @retval VERR_NO_EXEC_MEMORY if we're out of executable memory. + * @retval VERR_NOT_SUPPORTED if any of the specified flags are unsupported. + * + * @param cb The amount of memory to allocate. + * @param cbAlignment The alignment requirements. Use 0 to indicate + * default alignment. + * @param fFlags A combination of the RTMEMALLOCEX_FLAGS_XXX + * defines. + * @param pszTag The tag. + * @param ppv Where to return the memory. + */ +RTDECL(int) RTMemAllocExTag(size_t cb, size_t cbAlignment, uint32_t fFlags, const char *pszTag, void **ppv) RT_NO_THROW_PROTO; + +/** + * For freeing memory allocated by RTMemAllocEx or RTMemAllocExTag. + * + * @param pv What to free, NULL is fine. + * @param cb The amount of allocated memory. + */ +RTDECL(void) RTMemFreeEx(void *pv, size_t cb) RT_NO_THROW_PROTO; + + + +/** + * Allocates memory which may contain code (default tag). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + */ +#define RTMemExecAlloc(cb) RTMemExecAllocTag((cb), RTMEM_TAG) + +/** + * Allocates memory which may contain code (custom tag). + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemExecAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free executable/read/write memory allocated by RTMemExecAlloc(). + * + * @param pv Pointer to memory block. + * @param cb The allocation size. + */ +RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +#if defined(IN_RING0) && defined(RT_ARCH_AMD64) && defined(RT_OS_LINUX) +/** + * Donate read+write+execute memory to the exec heap. + * + * This API is specific to AMD64 and Linux/GNU. A kernel module that desires to + * use RTMemExecAlloc on AMD64 Linux/GNU will have to donate some statically + * allocated memory in the module if it wishes for GCC generated code to work. + * GCC can only generate modules that work in the address range ~2GB to ~0 + * currently. + * + * The API only accept one single donation. + * + * @returns IPRT status code. + * @param pvMemory Pointer to the memory block. + * @param cb The size of the memory block. + */ +RTR0DECL(int) RTR0MemExecDonate(void *pvMemory, size_t cb) RT_NO_THROW_PROTO; +#endif /* R0+AMD64+LINUX */ + +/** + * Allocate page aligned memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + */ +#define RTMemPageAlloc(cb) RTMemPageAllocTag((cb), RTMEM_TAG) + +/** + * Allocate page aligned memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemPageAllocTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Allocate zero'd page aligned memory with default tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + */ +#define RTMemPageAllocZ(cb) RTMemPageAllocZTag((cb), RTMEM_TAG) + +/** + * Allocate zero'd page aligned memory with custom tag. + * + * @returns Pointer to the allocated memory. + * @returns NULL if we're out of memory. + * @param cb Size of the memory block. Will be rounded up to page size. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(void *) RTMemPageAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Free a memory block allocated with RTMemPageAlloc() or RTMemPageAllocZ(). + * + * @param pv Pointer to the block as it was returned by the allocation function. + * NULL will be ignored. + * @param cb The allocation size. Will be rounded up to page size. + * Ignored if @a pv is NULL. + */ +RTDECL(void) RTMemPageFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +/** Page level protection flags for RTMemProtect(). + * @{ + */ +/** No access at all. */ +#define RTMEM_PROT_NONE 0 +/** Read access. */ +#define RTMEM_PROT_READ 1 +/** Write access. */ +#define RTMEM_PROT_WRITE 2 +/** Execute access. */ +#define RTMEM_PROT_EXEC 4 +/** @} */ + +/** + * Change the page level protection of a memory region. + * + * @returns iprt status code. + * @param pv Start of the region. Will be rounded down to nearest page boundary. + * @param cb Size of the region. Will be rounded up to the nearest page boundary. + * @param fProtect The new protection, a combination of the RTMEM_PROT_* defines. + */ +RTDECL(int) RTMemProtect(void *pv, size_t cb, unsigned fProtect) RT_NO_THROW_PROTO; + +/** + * Goes thru some pains to make sure the specified memory block is thoroughly + * scrambled. + * + * @param pv The start of the memory block. + * @param cb The size of the memory block. + * @param cMinPasses The minimum number of passes to make. + */ +RTDECL(void) RTMemWipeThoroughly(void *pv, size_t cb, size_t cMinPasses) RT_NO_THROW_PROTO; + +#ifdef IN_RING0 + +/** + * Allocates physical contiguous memory (below 4GB). + * The allocation is page aligned and the content is undefined. + * + * @returns Pointer to the memory block. This is page aligned. + * @param pPhys Where to store the physical address. + * @param cb The allocation size in bytes. This is always + * rounded up to PAGE_SIZE. + */ +RTR0DECL(void *) RTMemContAlloc(PRTCCPHYS pPhys, size_t cb) RT_NO_THROW_PROTO; + +/** + * Frees memory allocated ysing RTMemContAlloc(). + * + * @param pv Pointer to return from RTMemContAlloc(). + * @param cb The cb parameter passed to RTMemContAlloc(). + */ +RTR0DECL(void) RTMemContFree(void *pv, size_t cb) RT_NO_THROW_PROTO; + +/** + * Copy memory from an user mode buffer into a kernel buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * + * @param pvDst The kernel mode destination address. + * @param R3PtrSrc The user mode source address. + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemUserCopyFrom(void *pvDst, RTR3PTR R3PtrSrc, size_t cb); + +/** + * Copy memory from a kernel buffer into a user mode one. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * + * @param R3PtrDst The user mode destination address. + * @param pvSrc The kernel mode source address. + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemUserCopyTo(RTR3PTR R3PtrDst, void const *pvSrc, size_t cb); + +/** + * Tests if the specified address is in the user addressable range. + * + * This function does not check whether the memory at that address is accessible + * or anything of that sort, only if the address it self is in the user mode + * range. + * + * @returns true if it's in the user addressable range. false if not. + * @param R3Ptr The user mode pointer to test. + * + * @remarks Some systems may have overlapping kernel and user address ranges. + * One prominent example of this is the x86 version of Mac OS X. Use + * RTR0MemAreKrnlAndUsrDifferent() to check. + */ +RTR0DECL(bool) RTR0MemUserIsValidAddr(RTR3PTR R3Ptr); + +/** + * Tests if the specified address is in the kernel mode range. + * + * This function does not check whether the memory at that address is accessible + * or anything of that sort, only if the address it self is in the kernel mode + * range. + * + * @returns true if it's in the kernel range. false if not. + * @param pv The alleged kernel mode pointer. + * + * @remarks Some systems may have overlapping kernel and user address ranges. + * One prominent example of this is the x86 version of Mac OS X. Use + * RTR0MemAreKrnlAndUsrDifferent() to check. + */ +RTR0DECL(bool) RTR0MemKernelIsValidAddr(void *pv); + +/** + * Are user mode and kernel mode address ranges distinctly different. + * + * This determines whether RTR0MemKernelIsValidAddr and RTR0MemUserIsValidAddr + * can be used for deciding whether some arbitrary address is a user mode or a + * kernel mode one. + * + * @returns true if they are, false if not. + */ +RTR0DECL(bool) RTR0MemAreKrnlAndUsrDifferent(void); + +/** + * Copy memory from an potentially unsafe kernel mode location and into a safe + * (kernel) buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * @retval VERR_NOT_SUPPORTED if not (yet) supported. + * + * @param pvDst The destination address (safe). + * @param pvSrc The source address (potentially unsafe). + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemKernelCopyFrom(void *pvDst, void const *pvSrc, size_t cb); + +/** + * Copy from a safe (kernel) buffer and to a potentially unsafe kenrel mode + * location. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_ACCESS_DENIED on error. + * @retval VERR_NOT_SUPPORTED if not (yet) supported. + * + * @param pvDst The destination address (potentially unsafe). + * @param pvSrc The source address (safe). + * @param cb The number of bytes to copy. + */ +RTR0DECL(int) RTR0MemKernelCopyTo(void *pvDst, void const *pvSrc, size_t cb); + +#endif /* IN_RING0 */ + + +/** @name Electrical Fence Version of some APIs. + * @{ + */ + +/** + * Same as RTMemTmpAllocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. + * Use RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfTmpAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemTmpAllocZTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfTmpAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemTmpFree() except that it's for fenced memory. + * + * @param pv Pointer to memory block. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void) RTMemEfTmpFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. Free with RTMemEfFree(). + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocZTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cb Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocVarTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. Free with RTMemEfFree(). + * @returns NULL on failure. + * @param cbUnaligned Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemAllocZVarTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param cbUnaligned Size in bytes of the memory block to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfAllocZVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemReallocTag() except that it's fenced. + * + * @returns Pointer to the allocated memory. + * @returns NULL on failure. + * @param pvOld The memory block to reallocate. + * @param cbNew The new block size (in bytes). + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfRealloc(void *pvOld, size_t cbNew, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Free memory allocated by any of the RTMemEf* allocators. + * + * @param pv Pointer to memory block. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void) RTMemEfFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemDupTag() except that it's fenced. + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cb The amount of memory to duplicate. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfDup(const void *pvSrc, size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** + * Same as RTMemEfDupExTag except that it's fenced. + * + * @returns New heap block with the duplicate data. + * @returns NULL if we're out of memory. + * @param pvSrc The memory to duplicate. + * @param cbSrc The amount of memory to duplicate. + * @param cbExtra The amount of extra memory to allocate and zero. + * @param pszTag Allocation tag used for statistics and such. + * @param SRC_POS The source position where call is being made from. Use + * RT_SRC_POS when possible. Optional. + */ +RTDECL(void *) RTMemEfDupEx(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO; + +/** @def RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF + * Define RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF to enable electric fence new and + * delete operators for classes which uses the RTMEMEF_NEW_AND_DELETE_OPERATORS + * macro. + */ +/** @def RTMEMEF_NEW_AND_DELETE_OPERATORS + * Defines the electric fence new and delete operators for a class when + * RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF is define. + */ +/** @def RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT + * Defines the electric fence new and delete operators for an IOKit class when + * RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF is define. + * + * This differs from RTMEMEF_NEW_AND_DELETE_OPERATORS in that the memory we + * allocate is initialized to zero. It is also assuming we don't have nothrow + * variants and exceptions, so fewer variations. + */ +#if defined(RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF) && !defined(RTMEM_NO_WRAP_SOME_NEW_AND_DELETE_TO_EF) +# if defined(RT_EXCEPTIONS_ENABLED) +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + void *operator new(size_t cb) RT_THROW(std::bad_alloc) \ + { \ + void *pv = RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + if (RT_LIKELY(pv)) \ + return pv; \ + throw std::bad_alloc(); \ + } \ + void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) RT_THROW(std::bad_alloc) \ + { \ + void *pv = RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + if (RT_LIKELY(pv)) \ + return pv; \ + throw std::bad_alloc(); \ + } \ + void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) RT_NO_THROW_DEF \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) RT_NO_THROW_DEF \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) RT_NO_THROW_DEF \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +# else +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + void *operator new(size_t cb) \ + { \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new(size_t cb, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) \ + { \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + return RTMemEfAlloc(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete(void *pv, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv, const std::nothrow_t ¬hrow_constant) \ + { \ + NOREF(nothrow_constant); \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +# endif +# define RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT() \ + void *operator new(size_t cb) \ + { \ + return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + void *operator new[](size_t cb) \ + { \ + return RTMemEfAllocZ(cb, RTMEM_TAG, RT_SRC_POS); \ + } \ + \ + void operator delete(void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + void operator delete[](void *pv) \ + { \ + RTMemEfFree(pv, RT_SRC_POS); \ + } \ + \ + typedef int UsingElectricNewAndDeleteOperators +#else +# define RTMEMEF_NEW_AND_DELETE_OPERATORS() \ + typedef int UsingDefaultNewAndDeleteOperators +# define RTR0MEMEF_NEW_AND_DELETE_OPERATORS_IOKIT() \ + typedef int UsingDefaultNewAndDeleteOperators +#endif +#ifdef DOXYGEN_RUNNING +# define RTMEM_WRAP_SOME_NEW_AND_DELETE_TO_EF +#endif + +/** @def RTMEM_WRAP_TO_EF_APIS + * Define RTMEM_WRAP_TO_EF_APIS to wrap RTMem APIs to RTMemEf APIs. + */ +#if defined(RTMEM_WRAP_TO_EF_APIS) && !defined(RTMEM_NO_WRAP_TO_EF_APIS) \ + && ( defined(IN_RING3) || ( defined(IN_RING0) && !defined(IN_RING0_AGNOSTIC) && (defined(RT_OS_DARWIN) || 0) ) ) +# define RTMemTmpAllocTag(cb, pszTag) RTMemEfTmpAlloc((cb), (pszTag), RT_SRC_POS) +# define RTMemTmpAllocZTag(cb, pszTag) RTMemEfTmpAllocZ((cb), (pszTag), RT_SRC_POS) +# define RTMemTmpFree(pv) RTMemEfTmpFree((pv), RT_SRC_POS) +# define RTMemAllocTag(cb, pszTag) RTMemEfAlloc((cb), (pszTag), RT_SRC_POS) +# define RTMemAllocZTag(cb, pszTag) RTMemEfAllocZ((cb), (pszTag), RT_SRC_POS) +# define RTMemAllocVarTag(cbUnaligned, pszTag) RTMemEfAllocVar((cbUnaligned), (pszTag), RT_SRC_POS) +# define RTMemAllocZVarTag(cbUnaligned, pszTag) RTMemEfAllocZVar((cbUnaligned), (pszTag), RT_SRC_POS) +# define RTMemReallocTag(pvOld, cbNew, pszTag) RTMemEfRealloc((pvOld), (cbNew), (pszTag), RT_SRC_POS) +# define RTMemFree(pv) RTMemEfFree((pv), RT_SRC_POS) +# define RTMemDupTag(pvSrc, cb, pszTag) RTMemEfDup((pvSrc), (cb), (pszTag), RT_SRC_POS) +# define RTMemDupExTag(pvSrc, cbSrc, cbExtra, pszTag) RTMemEfDupEx((pvSrc), (cbSrc), (cbExtra), (pszTag), RT_SRC_POS) +#endif +#ifdef DOXYGEN_RUNNING +# define RTMEM_WRAP_TO_EF_APIS +#endif + +/** + * Fenced drop-in replacement for RTMemTmpAllocTag. + * @copydoc RTMemTmpAllocTag + */ +RTDECL(void *) RTMemEfTmpAllocNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemTmpAllocZTag. + * @copydoc RTMemTmpAllocZTag + */ +RTDECL(void *) RTMemEfTmpAllocZNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemTmpFreeTag. + * @copydoc RTMemTmpFree + */ +RTDECL(void) RTMemEfTmpFreeNP(void *pv) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocTag. + * @copydoc RTMemAllocTag + */ +RTDECL(void *) RTMemEfAllocNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocZTag. + * @copydoc RTMemAllocZTag + */ +RTDECL(void *) RTMemEfAllocZNP(size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocVarTag + * @copydoc RTMemAllocVarTag + */ +RTDECL(void *) RTMemEfAllocVarNP(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemAllocZVarTag. + * @copydoc RTMemAllocZVarTag + */ +RTDECL(void *) RTMemEfAllocZVarNP(size_t cbUnaligned, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemReallocTag. + * @copydoc RTMemReallocTag + */ +RTDECL(void *) RTMemEfReallocNP(void *pvOld, size_t cbNew, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemFree. + * @copydoc RTMemFree + */ +RTDECL(void) RTMemEfFreeNP(void *pv) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemDupExTag. + * @copydoc RTMemDupTag + */ +RTDECL(void *) RTMemEfDupNP(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_PROTO; + +/** + * Fenced drop-in replacement for RTMemDupExTag. + * @copydoc RTMemDupExTag + */ +RTDECL(void *) RTMemEfDupExNP(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag) RT_NO_THROW_PROTO; + +/** @} */ + +RT_C_DECLS_END + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/nocrt/limits.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/nocrt/limits.h @@ -0,0 +1,86 @@ +/** @file + * IPRT / No-CRT - Our own limits header. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_nocrt_limits_h +#define ___iprt_nocrt_limits_h + +#include + +#define CHAR_BIT 8 +#define SCHAR_MAX 0x7f +#define SCHAR_MIN (-0x7f - 1) +#define UCHAR_MAX 0xff +#if 1 /* ASSUMES: signed char */ +# define CHAR_MAX SCHAR_MAX +# define CHAR_MIN SCHAR_MIN +#else +# define CHAR_MAX UCHAR_MAX +# define CHAR_MIN 0 +#endif + +#define WORD_BIT 16 +#define USHRT_MAX 0xffff +#define SHRT_MAX 0x7fff +#define SHRT_MIN (-0x7fff - 1) + +/* ASSUMES 32-bit int */ +#define UINT_MAX 0xffffffffU +#define INT_MAX 0x7fffffff +#define INT_MIN (-0x7fffffff - 1) + +#if defined(RT_ARCH_X86) || defined(RT_OS_WINDOWS) || defined(RT_ARCH_SPARC) +# define LONG_BIT 32 +# define ULONG_MAX 0xffffffffU +# define LONG_MAX 0x7fffffff +# define LONG_MIN (-0x7fffffff - 1) +#elif defined(RT_ARCH_AMD64) || defined(RT_ARCH_SPARC64) +# define LONG_BIT 64 +# define ULONG_MAX UINT64_C(0xffffffffffffffff) +# define LONG_MAX INT64_C(0x7fffffffffffffff) +# define LONG_MIN (INT64_C(-0x7fffffffffffffff) - 1) +#else +# error "PORTME" +#endif + +#define LLONG_BIT 64 +#define ULLONG_MAX UINT64_C(0xffffffffffffffff) +#define LLONG_MAX INT64_C(0x7fffffffffffffff) +#define LLONG_MIN (INT64_C(-0x7fffffffffffffff) - 1) + +#if ARCH_BITS == 32 +# define SIZE_T_MAX 0xffffffffU +# define SSIZE_MAX 0x7fffffff +#elif ARCH_BITS == 64 +# define SIZE_T_MAX UINT64_C(0xffffffffffffffff) +# define SSIZE_MAX INT64_C(0x7fffffffffffffff) +#else +# error "huh?" +#endif + +/*#define OFF_MAX __OFF_MAX +#define OFF_MIN __OFF_MIN*/ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/param.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/param.h @@ -0,0 +1,131 @@ +/** @file + * IPRT - Parameter Definitions. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_param_h +#define ___iprt_param_h + +/** @todo Much of the PAGE_* stuff here is obsolete and highly risky to have around. + * As for component configs (MM_*), either we gather all in here or we move those bits away! */ + +/** @defgroup grp_rt_param System Parameter Definitions + * @ingroup grp_rt_cdefs + * @{ + */ + +/* Undefine PAGE_SIZE and PAGE_SHIFT to avoid unnecessary noice when clashing + * with system headers. Include system headers before / after iprt depending + * on which you wish to take precedence. */ +#undef PAGE_SIZE +#undef PAGE_SHIFT + +/* Undefine PAGE_OFFSET_MASK to avoid the conflict with the-linux-kernel.h */ +#undef PAGE_OFFSET_MASK + +/** + * i386 Page size. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_SIZE 8192 +#else +# define PAGE_SIZE 4096 +#endif + +/** + * i386 Page shift. + * This is used to convert between size (in bytes) and page count. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_SHIFT 13 +#else +# define PAGE_SHIFT 12 +#endif + +/** + * i386 Page offset mask. + * + * Do NOT one-complement this for whatever purpose. You may get a 32-bit const when you want a 64-bit one. + * Use PAGE_BASE_MASK, PAGE_BASE_GC_MASK, PAGE_BASE_HC_MASK, PAGE_ADDRESS() or X86_PTE_PAE_PG_MASK. + */ +#if defined(RT_ARCH_SPARC64) +# define PAGE_OFFSET_MASK 0x1fff +#else +# define PAGE_OFFSET_MASK 0xfff +#endif + +/** + * Page address mask for the guest context POINTERS. + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_GC_MASK (~(RTGCUINTPTR)PAGE_OFFSET_MASK) + +/** + * Page address mask for the host context POINTERS. + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_HC_MASK (~(RTHCUINTPTR)PAGE_OFFSET_MASK) + +/** + * Page address mask for the both context POINTERS. + * + * Be careful when using this since it may be a size too big! + * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + */ +#define PAGE_BASE_MASK (~(RTUINTPTR)PAGE_OFFSET_MASK) + +/** + * Get the page aligned address of a POINTER in the CURRENT context. + * + * @returns Page aligned address (it's an uintptr_t). + * @param pv The virtual address to align. + * + * @remarks Physical addresses are always masked using X86_PTE_PAE_PG_MASK! + * @remarks This only works with POINTERS in the current context. + * Do NOT use on guest address or physical address! + */ +#define PAGE_ADDRESS(pv) ((uintptr_t)(pv) & ~(uintptr_t)PAGE_OFFSET_MASK) + +/** + * Get the page aligned address of a physical address + * + * @returns Page aligned address (it's an RTHCPHYS or RTGCPHYS). + * @param Phys The physical address to align. + */ +#define PHYS_PAGE_ADDRESS(Phys) ((Phys) & X86_PTE_PAE_PG_MASK) + +/** + * Host max path (the reasonable value). + * @remarks defined both by iprt/param.h and iprt/path.h. + */ +#if !defined(___iprt_path_h) || defined(DOXYGEN_RUNNING) +# define RTPATH_MAX (4096 + 4) /* (PATH_MAX + 1) on linux w/ some alignment */ +#endif + +/** @} */ + + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/path.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/path.h @@ -0,0 +1,1490 @@ +/** @file + * IPRT - Path Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_path_h +#define ___iprt_path_h + +#include +#include +#ifdef IN_RING3 +# include +#endif + + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_path RTPath - Path Manipulation + * @ingroup grp_rt + * @{ + */ + +/** + * Host max path (the reasonable value). + * @remarks defined both by iprt/param.h and iprt/path.h. + */ +#if !defined(___iprt_param_h) || defined(DOXYGEN_RUNNING) +# define RTPATH_MAX (4096 + 4) /* (PATH_MAX + 1) on linux w/ some alignment */ +#endif + +/** @def RTPATH_TAG + * The default allocation tag used by the RTPath allocation APIs. + * + * When not defined before the inclusion of iprt/string.h, this will default to + * the pointer to the current file name. The string API will make of use of + * this as pointer to a volatile but read-only string. + */ +#ifndef RTPATH_TAG +# define RTPATH_TAG (__FILE__) +#endif + + +/** @name RTPATH_F_XXX - Generic flags for APIs working on the file system. + * @{ */ +/** Last component: Work on the link. */ +#define RTPATH_F_ON_LINK RT_BIT_32(0) +/** Last component: Follow if link. */ +#define RTPATH_F_FOLLOW_LINK RT_BIT_32(1) +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATH_F_NO_SYMLINKS RT_BIT_32(2) +/** @} */ + +/** Validates a flags parameter containing RTPATH_F_*. + * @remarks The parameters will be referenced multiple times. */ +#define RTPATH_F_IS_VALID(a_fFlags, a_fIgnore) \ + ( ((a_fFlags) & ~(uint32_t)((a_fIgnore) | RTPATH_F_NO_SYMLINKS)) == RTPATH_F_ON_LINK \ + || ((a_fFlags) & ~(uint32_t)((a_fIgnore) | RTPATH_F_NO_SYMLINKS)) == RTPATH_F_FOLLOW_LINK ) + + +/** @name RTPATH_STR_F_XXX - Generic flags for APIs working with path strings. + * @{ + */ +/** Host OS path style (default 0 value). */ +#define RTPATH_STR_F_STYLE_HOST UINT32_C(0x00000000) +/** DOS, OS/2 and Windows path style. */ +#define RTPATH_STR_F_STYLE_DOS UINT32_C(0x00000001) +/** Unix path style. */ +#define RTPATH_STR_F_STYLE_UNIX UINT32_C(0x00000002) +/** Reserved path style. */ +#define RTPATH_STR_F_STYLE_RESERVED UINT32_C(0x00000003) +/** The path style mask. */ +#define RTPATH_STR_F_STYLE_MASK UINT32_C(0x00000003) +/** Partial path - no start. + * This causes the API to skip the root specification parsing. */ +#define RTPATH_STR_F_NO_START UINT32_C(0x00000010) +/** Partial path - no end. + * This causes the API to skip the filename and dir-slash parsing. */ +#define RTPATH_STR_F_NO_END UINT32_C(0x00000020) +/** Partial path - no start and no end. */ +#define RTPATH_STR_F_MIDDLE (RTPATH_STR_F_NO_START | RTPATH_STR_F_NO_END) + +/** Reserved for future use. */ +#define RTPATH_STR_F_RESERVED_MASK UINT32_C(0x0000ffcc) +/** @} */ + +/** Validates a flags parameter containing RTPATH_FSTR_. + * @remarks The parameters will be references multiple times. */ +#define RTPATH_STR_F_IS_VALID(a_fFlags, a_fIgnore) \ + ( ((a_fFlags) & ~((uint32_t)(a_fIgnore) | RTPATH_STR_F_STYLE_MASK | RTPATH_STR_F_MIDDLE)) == 0 \ + && ((a_fFlags) & RTPATH_STR_F_STYLE_MASK) != RTPATH_STR_F_STYLE_RESERVED \ + && ((a_fFlags) & RTPATH_STR_F_RESERVED_MASK) == 0 ) + + +/** @def RTPATH_STYLE + * The host path style. This is set to RTPATH_STR_F_STYLE_DOS, + * RTPATH_STR_F_STYLE_UNIX, or other future styles. */ +#if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS) +# define RTPATH_STYLE RTPATH_STR_F_STYLE_DOS +#else +# define RTPATH_STYLE RTPATH_STR_F_STYLE_UNIX +#endif + + +/** @def RTPATH_SLASH + * The preferred slash character. + * + * @remark IPRT will always accept unix slashes. So, normally you would + * never have to use this define. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_SLASH '\\' +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_SLASH '/' +#else +# error "Unsupported RTPATH_STYLE value." +#endif + +/** @deprecated Use '/'! */ +#define RTPATH_DELIMITER RTPATH_SLASH + + +/** @def RTPATH_SLASH_STR + * The preferred slash character as a string, handy for concatenations + * with other strings. + * + * @remark IPRT will always accept unix slashes. So, normally you would + * never have to use this define. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_SLASH_STR "\\" +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_SLASH_STR "/" +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_SLASH + * Checks if a character is a slash. + * + * @returns true if it's a slash and false if not. + * @returns @param a_ch Char to check. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_IS_SLASH(a_ch) ( (a_ch) == '\\' || (a_ch) == '/' ) +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_IS_SLASH(a_ch) ( (a_ch) == '/' ) +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_VOLSEP + * Checks if a character marks the end of the volume specification. + * + * @remark This is sufficient for the drive letter concept on PC. + * However it might be insufficient on other platforms + * and even on PC a UNC volume spec won't be detected this way. + * Use the RTPath@() instead. + * + * @returns true if it is and false if it isn't. + * @returns @param a_ch Char to check. + */ +#if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS +# define RTPATH_IS_VOLSEP(a_ch) ( (a_ch) == ':' ) +#elif RTPATH_STYLE == RTPATH_STR_F_STYLE_UNIX +# define RTPATH_IS_VOLSEP(a_ch) (false) +#else +# error "Unsupported RTPATH_STYLE value." +#endif + + +/** @def RTPATH_IS_SEP + * Checks if a character is path component separator + * + * @returns true if it is and false if it isn't. + * @returns @param a_ch Char to check. + * @ + */ +#define RTPATH_IS_SEP(a_ch) ( RTPATH_IS_SLASH(a_ch) || RTPATH_IS_VOLSEP(a_ch) ) + + +/** + * Checks if the path exists. + * + * Symbolic links will all be attempted resolved and broken links means false. + * + * @returns true if it exists and false if it doesn't. + * @param pszPath The path to check. + */ +RTDECL(bool) RTPathExists(const char *pszPath); + +/** + * Checks if the path exists. + * + * @returns true if it exists and false if it doesn't. + * @param pszPath The path to check. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTDECL(bool) RTPathExistsEx(const char *pszPath, uint32_t fFlags); + +/** + * Sets the current working directory of the process. + * + * @returns IPRT status code. + * @param pszPath The path to the new working directory. + */ +RTDECL(int) RTPathSetCurrent(const char *pszPath); + +/** + * Gets the current working directory of the process. + * + * @returns IPRT status code. + * @param pszPath Where to store the path. + * @param cchPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrent(char *pszPath, size_t cchPath); + +/** + * Gets the current working directory on the specified drive. + * + * On systems without drive letters, the root slash will be returned. + * + * @returns IPRT status code. + * @param chDrive The drive we're querying the driver letter on. + * @param pszPath Where to store the working directroy path. + * @param cbPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrentOnDrive(char chDrive, char *pszPath, size_t cbPath); + +/** + * Gets the current working drive of the process. + * + * Normally drive letter and colon will be returned, never trailing a root + * slash. If the current directory is on a UNC share, the root of the share + * will be returned. On systems without drive letters, an empty string is + * returned for consistency. + * + * @returns IPRT status code. + * @param pszPath Where to store the working drive or UNC root. + * @param cbPath The size of the buffer pszPath points to. + */ +RTDECL(int) RTPathGetCurrentDrive(char *pszPath, size_t cbPath); + +/** + * Get the real path (no symlinks, no . or .. components), must exist. + * + * @returns iprt status code. + * @param pszPath The path to resolve. + * @param pszRealPath Where to store the real path. + * @param cchRealPath Size of the buffer. + */ +RTDECL(int) RTPathReal(const char *pszPath, char *pszRealPath, size_t cchRealPath); + +/** + * Same as RTPathReal only the result is RTStrDup()'ed. + * + * @returns Pointer to real path. Use RTStrFree() to free this string. + * @returns NULL if RTPathReal() or RTStrDup() fails. + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathRealDup(const char *pszPath); + +/** + * Get the absolute path (starts from root, no . or .. components), doesn't have + * to exist. Note that this method is designed to never perform actual file + * system access, therefore symlinks are not resolved. + * + * @returns iprt status code. + * @param pszPath The path to resolve. + * @param pszAbsPath Where to store the absolute path. + * @param cchAbsPath Size of the buffer. + */ +RTDECL(int) RTPathAbs(const char *pszPath, char *pszAbsPath, size_t cchAbsPath); + +/** + * Same as RTPathAbs only the result is RTStrDup()'ed. + * + * @returns Pointer to the absolute path. Use RTStrFree() to free this string. + * @returns NULL if RTPathAbs() or RTStrDup() fails. + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathAbsDup(const char *pszPath); + +/** + * Get the absolute path (no symlinks, no . or .. components), assuming the + * given base path as the current directory. The resulting path doesn't have + * to exist. + * + * @returns iprt status code. + * @param pszBase The base path to act like a current directory. + * When NULL, the actual cwd is used (i.e. the call + * is equivalent to RTPathAbs(pszPath, ...). + * @param pszPath The path to resolve. + * @param pszAbsPath Where to store the absolute path. + * @param cchAbsPath Size of the buffer. + */ +RTDECL(int) RTPathAbsEx(const char *pszBase, const char *pszPath, char *pszAbsPath, size_t cchAbsPath); + +/** + * Same as RTPathAbsEx only the result is RTStrDup()'ed. + * + * @returns Pointer to the absolute path. Use RTStrFree() to free this string. + * @returns NULL if RTPathAbsEx() or RTStrDup() fails. + * @param pszBase The base path to act like a current directory. + * When NULL, the actual cwd is used (i.e. the call + * is equivalent to RTPathAbs(pszPath, ...). + * @param pszPath The path to resolve. + */ +RTDECL(char *) RTPathAbsExDup(const char *pszBase, const char *pszPath); + +/** + * Strips the filename from a path. Truncates the given string in-place by overwriting the + * last path separator character with a null byte in a platform-neutral way. + * + * @param pszPath Path from which filename should be extracted, will be truncated. + * If the string contains no path separator, it will be changed to a "." string. + */ +RTDECL(void) RTPathStripFilename(char *pszPath); + +/** + * Strips the last suffix from a path. + * + * @param pszPath Path which suffix should be stripped. + */ +RTDECL(void) RTPathStripSuffix(char *pszPath); + +/** + * Strips the trailing slashes of a path name. + * + * Won't strip root slashes. + * + * @returns The new length of pszPath. + * @param pszPath Path to strip. + */ +RTDECL(size_t) RTPathStripTrailingSlash(char *pszPath); + +/** + * Skips the root specification, if present. + * + * @return Pointer to the first char after the root specification. This can be + * pointing to the terminator, if the path is only a root + * specification. + * @param pszPath The path to skip ahead in. + */ +RTDECL(char *) RTPathSkipRootSpec(const char *pszPath); + +/** + * Ensures that the path has a trailing path separator such that file names can + * be appended without further work. + * + * This can be helpful when preparing for efficiently combining a directory path + * with the filenames returned by RTDirRead. The return value gives you the + * position at which you copy the RTDIRENTRY::szName to construct a valid path + * to it. + * + * @returns The length of the path, 0 on buffer overflow. + * @param pszPath The path. + * @param cbPath The length of the path buffer @a pszPath points to. + */ +RTDECL(size_t) RTPathEnsureTrailingSeparator(char *pszPath, size_t cbPath); + +/** + * Changes all the slashes in the specified path to DOS style. + * + * Unless @a fForce is set, nothing will be done when on a UNIX flavored system + * since paths wont work with DOS style slashes there. + * + * @returns @a pszPath. + * @param pszPath The path to modify. + * @param fForce Whether to force the conversion on non-DOS OSes. + */ +RTDECL(char *) RTPathChangeToDosSlashes(char *pszPath, bool fForce); + +/** + * Changes all the slashes in the specified path to unix style. + * + * Unless @a fForce is set, nothing will be done when on a UNIX flavored system + * since paths wont work with DOS style slashes there. + * + * @returns @a pszPath. + * @param pszPath The path to modify. + * @param fForce Whether to force the conversion on non-DOS OSes. + */ +RTDECL(char *) RTPathChangeToUnixSlashes(char *pszPath, bool fForce); + +/** + * Simple parsing of the a path. + * + * It figures the length of the directory component, the offset of + * the file name and the location of the suffix dot. + * + * @returns The path length. + * + * @param pszPath Path to find filename in. + * @param pcchDir Where to put the length of the directory component. If + * no directory, this will be 0. Optional. + * @param poffName Where to store the filename offset. + * If empty string or if it's ending with a slash this + * will be set to -1. Optional. + * @param poffSuff Where to store the suffix offset (the last dot). + * If empty string or if it's ending with a slash this + * will be set to -1. Optional. + */ +RTDECL(size_t) RTPathParseSimple(const char *pszPath, size_t *pcchDir, ssize_t *poffName, ssize_t *poffSuff); + +/** + * Finds the filename in a path. + * + * @returns Pointer to filename within pszPath. + * @returns NULL if no filename (i.e. empty string or ends with a slash). + * @param pszPath Path to find filename in. + */ +RTDECL(char *) RTPathFilename(const char *pszPath); + +/** + * Finds the filename in a path, extended version. + * + * @returns Pointer to filename within pszPath. + * @returns NULL if no filename (i.e. empty string or ends with a slash). + * @param pszPath Path to find filename in. + * @param fFlags RTPATH_STR_F_STYLE_XXX. Other RTPATH_STR_F_XXX flags + * will be ignored. + */ +RTDECL(char *) RTPathFilenameEx(const char *pszPath, uint32_t fFlags); + +/** + * Finds the suffix part of in a path (last dot and onwards). + * + * @returns Pointer to suffix within pszPath. + * @returns NULL if no suffix + * @param pszPath Path to find suffix in. + * + * @remarks IPRT terminology: A suffix includes the dot, the extension starts + * after the dot. For instance suffix '.txt' and extension 'txt'. + */ +RTDECL(char *) RTPathSuffix(const char *pszPath); + +/** + * Checks if a path has an extension / suffix. + * + * @returns true if extension / suffix present. + * @returns false if no extension / suffix. + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathHasSuffix(const char *pszPath); +/** Same thing, different name. */ +#define RTPathHasExt RTPathHasSuffix + +/** + * Checks if a path includes more than a filename. + * + * @returns true if path present. + * @returns false if no path. + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathHasPath(const char *pszPath); +/** Misspelled, don't use. */ +#define RTPathHavePath RTPathHasPath + +/** + * Checks if the path starts with a root specifier or not. + * + * @returns @c true if it starts with root, @c false if not. + * + * @param pszPath Path to check. + */ +RTDECL(bool) RTPathStartsWithRoot(const char *pszPath); + + + +/** + * Counts the components in the specified path. + * + * An empty string has zero components. A lone root slash is considered have + * one. The paths "/init" and "/bin/" are considered having two components. An + * UNC share specifier like "\\myserver\share" will be considered as one single + * component. + * + * @returns The number of path components. + * @param pszPath The path to parse. + */ +RTDECL(size_t) RTPathCountComponents(const char *pszPath); + +/** + * Copies the specified number of path components from @a pszSrc and into @a + * pszDst. + * + * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW. In the latter case the buffer + * is not touched. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer. + * @param pszSrc The source path. + * @param cComponents The number of components to copy from @a pszSrc. + */ +RTDECL(int) RTPathCopyComponents(char *pszDst, size_t cbDst, const char *pszSrc, size_t cComponents); + +/** @name Path properties returned by RTPathParse and RTPathSplit. + * @{ */ + +/** Indicates that there is a filename. + * If not set, either a lone root spec was given (RTPATH_PROP_UNC, + * RTPATH_PROP_ROOT_SLASH, or RTPATH_PROP_VOLUME) or the final component had a + * trailing slash (RTPATH_PROP_DIR_SLASH). */ +#define RTPATH_PROP_FILENAME UINT16_C(0x0001) +/** Indicates that a directory was specified using a trailing slash. + * @note This is not set for lone root specifications (RTPATH_PROP_UNC, + * RTPATH_PROP_ROOT_SLASH, or RTPATH_PROP_VOLUME). + * @note The slash is not counted into the last component. However, it is + * counted into cchPath. */ +#define RTPATH_PROP_DIR_SLASH UINT16_C(0x0002) + +/** The filename has a suffix (extension). */ +#define RTPATH_PROP_SUFFIX UINT16_C(0x0004) +/** Indicates that this is an UNC path (Windows and OS/2 only). + * + * UNC = Universal Naming Convention. It is on the form '//Computer/', + * '//Namespace/', '//ComputerName/Resource' and '//Namespace/Resource'. + * RTPathParse, RTPathSplit and friends does not consider the 'Resource' as + * part of the UNC root specifier. Thus the root specs for the above examples + * would be '//ComputerName/' or '//Namespace/'. + * + * Please note that '//something' is not a UNC path, there must be a slash + * following the computer or namespace. + */ +#define RTPATH_PROP_UNC UINT16_C(0x0010) +/** A root slash was specified (unix style root). + * (While the path must relative if not set, this being set doesn't make it + * absolute.) + * + * This will be set in the following examples: '/', '/bin', 'C:/', 'C:/Windows', + * '//./', '//./PhysicalDisk0', '//example.org/', and '//example.org/share'. + * + * It will not be set for the following examples: '.', 'bin/ls', 'C:', and + * 'C:Windows'. + */ +#define RTPATH_PROP_ROOT_SLASH UINT16_C(0x0020) +/** A volume is specified (Windows, DOS and OS/2). + * For examples: 'C:', 'C:/', and 'A:/AutoExec.bat'. */ +#define RTPATH_PROP_VOLUME UINT16_C(0x0040) +/** The path is absolute, i.e. has a root specifier (root-slash, + * volume or UNC) and contains no winding '..' bits, though it may contain + * unnecessary slashes (RTPATH_PROP_EXTRA_SLASHES) and '.' components + * (RTPATH_PROP_DOT_REFS). + * + * On systems without volumes and UNC (unix style) it will be set for '/', + * '/bin/ls', and '/bin//./ls', but not for 'bin/ls', /bin/../usr/bin/env', + * '/./bin/ls' or '/.'. + * + * On systems with volumes, it will be set for 'C:/', C:/Windows', and + * 'C:/./Windows//', but not for 'C:', 'C:Windows', or 'C:/Windows/../boot.ini'. + * + * On systems with UNC paths, it will be set for '//localhost/', + * '//localhost/C$', '//localhost/C$/Windows/System32', '//localhost/.', and + * '//localhost/C$//./AutoExec.bat', but not for + * '//localhost/C$/Windows/../AutoExec.bat'. + * + * @note For the RTPathAbs definition, this flag needs to be set while both + * RTPATH_PROP_EXTRA_SLASHES and RTPATH_PROP_DOT_REFS must be cleared. + */ +#define RTPATH_PROP_ABSOLUTE UINT16_C(0x0100) +/** Relative path. Inverse of RTPATH_PROP_ABSOLUTE. */ +#define RTPATH_PROP_RELATIVE UINT16_C(0x0200) +/** The path contains unnecessary slashes. Meaning, that if */ +#define RTPATH_PROP_EXTRA_SLASHES UINT16_C(0x0400) +/** The path contains references to the special '.' (dot) directory link. */ +#define RTPATH_PROP_DOT_REFS UINT16_C(0x0800) +/** The path contains references to the special '..' (dot) directory link. + * RTPATH_PROP_RELATIVE will always be set together with this. */ +#define RTPATH_PROP_DOTDOT_REFS UINT16_C(0x1000) + + +/** Macro to determin whether to insert a slash after the first component when + * joining it with something else. + * (All other components in a split or parsed path requies slashes added.) */ +#define RTPATH_PROP_FIRST_NEEDS_NO_SLASH(a_fProps) \ + RT_BOOL( (a_fProps) & (RTPATH_PROP_ROOT_SLASH | RTPATH_PROP_VOLUME | RTPATH_PROP_UNC) ) + +/** Macro to determin whether there is a root specification of any kind + * (unix, volumes, unc). */ +#define RTPATH_PROP_HAS_ROOT_SPEC(a_fProps) \ + RT_BOOL( (a_fProps) & (RTPATH_PROP_ROOT_SLASH | RTPATH_PROP_VOLUME | RTPATH_PROP_UNC) ) + +/** @} */ + + +/** + * Parsed path. + * + * The first component is the root, volume or UNC specifier, if present. Use + * RTPATH_PROP_HAS_ROOT_SPEC() on RTPATHPARSED::fProps to determine its + * presence. + * + * Other than the root component, no component will include directory separators + * (slashes). + */ +typedef struct RTPATHPARSED +{ + /** Number of path components. + * This will always be set on VERR_BUFFER_OVERFLOW returns from RTPathParsed + * so the caller can calculate the required buffer size. */ + uint16_t cComps; + /** Path property flags, RTPATH_PROP_XXX */ + uint16_t fProps; + /** On success this is the length of the described path, i.e. sum of all + * component lengths and necessary separators. + * Do NOT use this to index in the source path in case it contains + * unnecessary slashes that RTPathParsed has ignored here. */ + uint16_t cchPath; + /** Reserved for future use. */ + uint16_t u16Reserved; + /** The offset of the filename suffix, offset of the NUL char if none. */ + uint16_t offSuffix; + /** The lenght of the suffix. */ + uint16_t cchSuffix; + /** Array of component descriptors (variable size). + * @note Don't try figure the end of the input path by adding up off and cch + * of the last component. If RTPATH_PROP_DIR_SLASH is set, there may + * be one or more trailing slashes that are unaccounted for! */ + struct + { + /** The offset of the component. */ + uint16_t off; + /** The length of the component. */ + uint16_t cch; + } aComps[1]; +} RTPATHPARSED; +/** Pointer to to a parsed path result. */ +typedef RTPATHPARSED *PRTPATHPARSED; +/** Pointer to to a const parsed path result. */ +typedef RTPATHPARSED *PCRTPATHPARSED; + + +/** + * Parses the path. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_INVALID_PARAMETER if cbOutput is less than the RTPATHPARSED + * strucuture. No output. (asserted) + * @retval VERR_BUFFER_OVERFLOW there are more components in the path than + * there is space in aComps. The required amount of space can be + * determined from the pParsed->cComps: + * @code + * RT_OFFSETOF(RTPATHPARSED, aComps[pParsed->cComps]) + * @endcode + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param pParsed Where to store the details of the parsed path. + * @param cbParsed The size of the buffer. Must be at least the + * size of RTPATHPARSED. + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @sa RTPathSplit, RTPathSplitA. + */ +RTDECL(int) RTPathParse(const char *pszPath, PRTPATHPARSED pParsed, size_t cbParsed, uint32_t fFlags); + +/** + * Reassembles a path parsed by RTPathParse. + * + * This will be more useful as more APIs manipulating the RTPATHPARSED output + * are added. + * + * @returns IPRT status code. + * @retval VERR_BUFFER_OVERFLOW if @a cbDstPath is less than or equal to + * RTPATHPARSED::cchPath. + * + * @param pszSrcPath The source path. + * @param pParsed The parser output for @a pszSrcPath. + * @param fFlags Combination of RTPATH_STR_F_STYLE_XXX. + * Most users will pass 0. + * @param pszDstPath Pointer to the buffer where the path is to be + * reassembled. + * @param cbDstPath The size of the output buffer. + */ +RTDECL(int) RTPathParsedReassemble(const char *pszSrcPath, PRTPATHPARSED pParsed, uint32_t fFlags, + char *pszDstPath, size_t cbDstPath); + + +/** + * Output buffer for RTPathSplit and RTPathSplitA. + */ +typedef struct RTPATHSPLIT +{ + /** Number of path components. + * This will always be set on VERR_BUFFER_OVERFLOW returns from RTPathParsed + * so the caller can calculate the required buffer size. */ + uint16_t cComps; + /** Path property flags, RTPATH_PROP_XXX */ + uint16_t fProps; + /** On success this is the length of the described path, i.e. sum of all + * component lengths and necessary separators. + * Do NOT use this to index in the source path in case it contains + * unnecessary slashes that RTPathSplit has ignored here. */ + uint16_t cchPath; + /** Reserved (internal use). */ + uint16_t u16Reserved; + /** The amount of memory used (on success) or required (on + * VERR_BUFFER_OVERFLOW) of this structure and it's strings. */ + uint32_t cbNeeded; + /** Pointer to the filename suffix (the dot), if any. Points to the NUL + * character of the last component if none or if RTPATH_PROP_DIR_SLASH is + * present. */ + const char *pszSuffix; + /** Array of component strings (variable size). */ + char *apszComps[1]; +} RTPATHSPLIT; +/** Pointer to a split path buffer. */ +typedef RTPATHSPLIT *PRTPATHSPLIT; +/** Pointer to a const split path buffer. */ +typedef RTPATHSPLIT const *PCRTPATHSPLIT; + +/** + * Splits the path into individual component strings, carved from user supplied + * the given buffer block. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_INVALID_PARAMETER if cbOutput is less than the RTPATHSPLIT + * strucuture. No output. (asserted) + * @retval VERR_BUFFER_OVERFLOW there are more components in the path than + * there is space in aComps. The required amount of space can be + * determined from the pParsed->cComps: + * @code + * RT_OFFSETOF(RTPATHPARSED, aComps[pParsed->cComps]) + * @endcode + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * @retval VERR_FILENAME_TOO_LONG if the filename is too long (close to 64 KB). + * + * @param pszPath The path to parse. + * @param pSplit Where to store the details of the parsed path. + * @param cbSplit The size of the buffer pointed to by @a pSplit + * (variable sized array at the end). Must be at + * least the size of RTPATHSPLIT. + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * + * @sa RTPathSplitA, RTPathParse. + */ +RTDECL(int) RTPathSplit(const char *pszPath, PRTPATHSPLIT pSplit, size_t cbSplit, uint32_t fFlags); + +/** + * Splits the path into individual component strings, allocating the buffer on + * the default thread heap. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param ppSplit Where to return the pointer to the output on + * success. This must be freed by calling + * RTPathSplitFree(). + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @sa RTPathSplitFree, RTPathSplit, RTPathParse. + */ +#define RTPathSplitA(pszPath, ppSplit, fFlags) RTPathSplitATag(pszPath, ppSplit, fFlags, RTPATH_TAG) + +/** + * Splits the path into individual component strings, allocating the buffer on + * the default thread heap. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if pParsed or pszPath is an invalid pointer. + * @retval VERR_PATH_ZERO_LENGTH if the path is empty. + * + * @param pszPath The path to parse. + * @param ppSplit Where to return the pointer to the output on + * success. This must be freed by calling + * RTPathSplitFree(). + * @param fFlags Combination of RTPATH_STR_F_XXX flags. + * Most users will pass 0. + * @param pszTag Allocation tag used for statistics and such. + * @sa RTPathSplitFree, RTPathSplit, RTPathParse. + */ +RTDECL(int) RTPathSplitATag(const char *pszPath, PRTPATHSPLIT *ppSplit, uint32_t fFlags, const char *pszTag); + +/** + * Frees buffer returned by RTPathSplitA. + * + * @param pSplit What RTPathSplitA returned. + * @sa RTPathSplitA + */ +RTDECL(void) RTPathSplitFree(PRTPATHSPLIT pSplit); + +/** + * Reassembles a path parsed by RTPathSplit. + * + * This will be more useful as more APIs manipulating the RTPATHSPLIT output are + * added. + * + * @returns IPRT status code. + * @retval VERR_BUFFER_OVERFLOW if @a cbDstPath is less than or equal to + * RTPATHSPLIT::cchPath. + * + * @param pSplit A split path (see RTPathSplit, RTPathSplitA). + * @param fFlags Combination of RTPATH_STR_F_STYLE_XXX. + * Most users will pass 0. + * @param pszDstPath Pointer to the buffer where the path is to be + * reassembled. + * @param cbDstPath The size of the output buffer. + */ +RTDECL(int) RTPathSplitReassemble(PRTPATHSPLIT pSplit, uint32_t fFlags, char *pszDstPath, size_t cbDstPath); + +/** + * Checks if the two paths leads to the file system object. + * + * If the objects exist, we'll query attributes for them. If that's not + * conclusive (some OSes) or one of them doesn't exist, we'll use a combination + * of RTPathAbs and RTPathCompare to determine the result. + * + * @returns true, false, or VERR_FILENAME_TOO_LONG. + * @param pszPath1 The first path. + * @param pszPath2 The seoncd path. + */ +RTDECL(int) RTPathIsSame(const char *pszPath1, const char *pszPath2); + + +/** + * Compares two paths. + * + * The comparison takes platform-dependent details into account, + * such as: + *
    + *
  • On DOS-like platforms, both separator chars (|\| and |/|) are considered + * to be equal. + *
  • On platforms with case-insensitive file systems, mismatching characters + * are uppercased and compared again. + *
+ * + * @returns @< 0 if the first path less than the second path. + * @returns 0 if the first path identical to the second path. + * @returns @> 0 if the first path greater than the second path. + * + * @param pszPath1 Path to compare (must be an absolute path). + * @param pszPath2 Path to compare (must be an absolute path). + * + * @remarks File system details are currently ignored. This means that you won't + * get case-insensitive compares on unix systems when a path goes into a + * case-insensitive filesystem like FAT, HPFS, HFS, NTFS, JFS, or + * similar. For NT, OS/2 and similar you'll won't get case-sensitive + * compares on a case-sensitive file system. + */ +RTDECL(int) RTPathCompare(const char *pszPath1, const char *pszPath2); + +/** + * Checks if a path starts with the given parent path. + * + * This means that either the path and the parent path matches completely, or + * that the path is to some file or directory residing in the tree given by the + * parent directory. + * + * The path comparison takes platform-dependent details into account, + * see RTPathCompare() for details. + * + * @returns |true| when \a pszPath starts with \a pszParentPath (or when they + * are identical), or |false| otherwise. + * + * @param pszPath Path to check, must be an absolute path. + * @param pszParentPath Parent path, must be an absolute path. + * No trailing directory slash! + * + * @remarks This API doesn't currently handle root directory compares in a + * manner consistent with the other APIs. RTPathStartsWith(pszSomePath, + * "/") will not work if pszSomePath isn't "/". + */ +RTDECL(bool) RTPathStartsWith(const char *pszPath, const char *pszParentPath); + +/** + * Appends one partial path to another. + * + * The main purpose of this function is to deal correctly with the slashes when + * concatenating the two partial paths. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. No changes has been made. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPath The path to append pszAppend to. This serves as both + * input and output. This can be empty, in which case + * pszAppend is just copied over. + * @param cbPathDst The size of the buffer pszPath points to, terminator + * included. This should NOT be strlen(pszPath). + * @param pszAppend The partial path to append to pszPath. This can be + * NULL, in which case nothing is done. + * + * @remarks See the RTPathAppendEx remarks. + */ +RTDECL(int) RTPathAppend(char *pszPath, size_t cbPathDst, const char *pszAppend); + +/** + * Appends one partial path to another. + * + * The main purpose of this function is to deal correctly with the slashes when + * concatenating the two partial paths. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. No changes has been made. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPath The path to append pszAppend to. This serves as both + * input and output. This can be empty, in which case + * pszAppend is just copied over. + * @param cbPathDst The size of the buffer pszPath points to, terminator + * included. This should NOT be strlen(pszPath). + * @param pszAppend The partial path to append to pszPath. This can be + * NULL, in which case nothing is done. + * @param cchAppendMax The maximum number or characters to take from @a + * pszAppend. RTSTR_MAX is fine. + * + * @remarks On OS/2, Window and similar systems, concatenating a drive letter + * specifier with a slash prefixed path will result in an absolute + * path. Meaning, RTPathAppend(strcpy(szBuf, "C:"), sizeof(szBuf), + * "/bar") will result in "C:/bar". (This follows directly from the + * behavior when pszPath is empty.) + * + * On the other hand, when joining a drive letter specifier with a + * partial path that does not start with a slash, the result is not an + * absolute path. Meaning, RTPathAppend(strcpy(szBuf, "C:"), + * sizeof(szBuf), "bar") will result in "C:bar". + */ +RTDECL(int) RTPathAppendEx(char *pszPath, size_t cbPathDst, const char *pszAppend, size_t cchAppendMax); + +/** + * Like RTPathAppend, but with the base path as a separate argument instead of + * in the path buffer. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * + */ +RTDECL(int) RTPathJoin(char *pszPathDst, size_t cbPathDst, const char *pszPathSrc, + const char *pszAppend); + +/** + * Same as RTPathJoin, except that the output buffer is allocated. + * + * @returns Buffer containing the joined up path, call RTStrFree to free. NULL + * on allocation failure. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * + */ +RTDECL(char *) RTPathJoinA(const char *pszPathSrc, const char *pszAppend); + +/** + * Extended version of RTPathJoin, both inputs can be specified as substrings. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_INVALID_PARAMETER if the string pointed to by pszPath is longer + * than cbPathDst-1 bytes (failed to find terminator). Asserted. + * + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathSrc The base path to copy into @a pszPathDst before + * appending @a pszAppend. + * @param cchPathSrcMax The maximum number of bytes to copy from @a + * pszPathSrc. RTSTR_MAX is find. + * @param pszAppend The partial path to append to pszPathSrc. This can + * be NULL, in which case nothing is done. + * @param cchAppendMax The maximum number of bytes to copy from @a + * pszAppend. RTSTR_MAX is find. + * + */ +RTDECL(int) RTPathJoinEx(char *pszPathDst, size_t cbPathDst, + const char *pszPathSrc, size_t cchPathSrcMax, + const char *pszAppend, size_t cchAppendMax); + +/** + * Callback for RTPathTraverseList that's called for each element. + * + * @returns IPRT style status code. Return VERR_TRY_AGAIN to continue, any other + * value will abort the traversing and be returned to the caller. + * + * @param pchPath Pointer to the start of the current path. This is + * not null terminated. + * @param cchPath The length of the path. + * @param pvUser1 The first user parameter. + * @param pvUser2 The second user parameter. + */ +typedef DECLCALLBACK(int) FNRTPATHTRAVERSER(char const *pchPath, size_t cchPath, void *pvUser1, void *pvUser2); +/** Pointer to a FNRTPATHTRAVERSER. */ +typedef FNRTPATHTRAVERSER *PFNRTPATHTRAVERSER; + +/** + * Traverses a string that can contain multiple paths separated by a special + * character. + * + * @returns IPRT style status code from the callback or VERR_END_OF_STRING if + * the callback returned VERR_TRY_AGAIN for all paths in the string. + * + * @param pszPathList The string to traverse. + * @param chSep The separator character. Using the null terminator + * is fine, but the result will simply be that there + * will only be one callback for the entire string + * (save any leading white space). + * @param pfnCallback The callback. + * @param pvUser1 First user argument for the callback. + * @param pvUser2 Second user argument for the callback. + */ +RTDECL(int) RTPathTraverseList(const char *pszPathList, char chSep, PFNRTPATHTRAVERSER pfnCallback, void *pvUser1, void *pvUser2); + + +/** + * Calculate a relative path between the two given paths. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the result is too big to fit within + * cbPathDst bytes. + * @retval VERR_NOT_SUPPORTED if both paths start with different volume specifiers. + * @param pszPathDst Where to store the resulting path. + * @param cbPathDst The size of the buffer pszPathDst points to, + * terminator included. + * @param pszPathFrom The path to start from creating the relative path. + * @param pszPathTo The path to reach with the created relative path. + */ +RTDECL(int) RTPathCalcRelative(char *pszPathDst, size_t cbPathDst, + const char *pszPathFrom, + const char *pszPathTo); + +#ifdef IN_RING3 + +/** + * Gets the path to the directory containing the executable. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathExecDir(char *pszPath, size_t cchPath); + +/** + * Gets the user home directory. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathUserHome(char *pszPath, size_t cchPath); + +/** + * Gets the user documents directory. + * + * The returned path isn't guaranteed to exist. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathUserDocuments(char *pszPath, size_t cchPath); + +/** + * Gets the directory of shared libraries. + * + * This is not the same as RTPathAppPrivateArch() as Linux depends all shared + * libraries in a common global directory where ld.so can find them. + * + * Linux: /usr/lib + * Solaris: /opt/@/@@ or something + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathSharedLibs(char *pszPath, size_t cchPath); + +/** + * Gets the directory for architecture-independent application data, for + * example NLS files, module sources, ... + * + * Linux: /usr/shared/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateNoArch(char *pszPath, size_t cchPath); + +/** + * Gets the directory for architecture-dependent application data, for + * example modules which can be loaded at runtime. + * + * Linux: /usr/lib/@ + * Solaris: /opt/@/@@ or something + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateArch(char *pszPath, size_t cchPath); + +/** + * Gets the toplevel directory for architecture-dependent application data. + * + * This differs from RTPathAppPrivateArch on Solaris only where it will work + * around the /opt/@/amd64 and /opt/@/i386 multi + * architecture installation style. + * + * Linux: /usr/lib/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppPrivateArchTop(char *pszPath, size_t cchPath); + +/** + * Gets the directory for documentation. + * + * Linux: /usr/share/doc/@ + * Solaris: /opt/@ + * Windows: @/@ + * Old path: same as RTPathExecDir() + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathAppDocs(char *pszPath, size_t cchPath); + +/** + * Gets the temporary directory path. + * + * @returns iprt status code. + * @param pszPath Buffer where to store the path. + * @param cchPath Buffer size in bytes. + */ +RTDECL(int) RTPathTemp(char *pszPath, size_t cchPath); + + +/** + * RTPathGlobl result entry. + */ +typedef struct RTPATHGLOBENTRY +{ + /** List entry. */ + struct RTPATHGLOBENTRY *pNext; + /** RTDIRENTRYTYPE value. */ + uint8_t uType; + /** Unused explicit padding. */ + uint8_t bUnused; + /** The length of the path. */ + uint16_t cchPath; + /** The path to the file (variable length). */ + char szPath[1]; +} RTPATHGLOBENTRY; +/** Pointer to a GLOB result entry. */ +typedef RTPATHGLOBENTRY *PRTPATHGLOBENTRY; +/** Pointer to a const GLOB result entry. */ +typedef RTPATHGLOBENTRY const *PCRTPATHGLOBENTRY; +/** Pointer to a GLOB result entry pointer. */ +typedef PCRTPATHGLOBENTRY *PPCRTPATHGLOBENTRY; + +/** + * Performs wildcard expansion on a path pattern. + * + * @returns IPRT status code. + * + * @param pszPattern The pattern to expand. + * @param fFlags RTPATHGLOB_F_XXX. + * @param ppHead Where to return the head of the result list. This + * is always set to NULL on failure. + * @param pcResults Where to return the number of the result. Optional. + */ +RTDECL(int) RTPathGlob(const char *pszPattern, uint32_t fFlags, PPCRTPATHGLOBENTRY ppHead, uint32_t *pcResults); + +/** @name RTPATHGLOB_F_XXX - RTPathGlob flags + * @{ */ +/** Case insensitive. */ +#define RTPATHGLOB_F_IGNORE_CASE RT_BIT_32(0) +/** Do not expand \${EnvOrSpecialVariable} in the pattern. */ +#define RTPATHGLOB_F_NO_VARIABLES RT_BIT_32(1) +/** Do not interpret a leading tilde as a home directory reference. */ +#define RTPATHGLOB_F_NO_TILDE RT_BIT_32(2) +/** Only return the first match. */ +#define RTPATHGLOB_F_FIRST_ONLY RT_BIT_32(3) +/** Only match directories (implied if pattern ends with slash). */ +#define RTPATHGLOB_F_ONLY_DIRS RT_BIT_32(4) +/** Do not match directories. (Can't be used with RTPATHGLOB_F_ONLY_DIRS or + * patterns containing a trailing slash.) */ +#define RTPATHGLOB_F_NO_DIRS RT_BIT_32(5) +/** Disables the '**' wildcard pattern for matching zero or more subdirs. */ +#define RTPATHGLOB_F_NO_STARSTAR RT_BIT_32(6) +/** Mask of valid flags. */ +#define RTPATHGLOB_F_MASK UINT32_C(0x0000007f) +/** @} */ + +/** + * Frees the results produced by RTPathGlob. + * + * @param pHead What RTPathGlob returned. NULL ignored. + */ +RTDECL(void) RTPathGlobFree(PCRTPATHGLOBENTRY pHead); + + +/** + * Query information about a file system object. + * + * This API will resolve NOT symbolic links in the last component (just like + * unix lstat()). + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the object exists, information returned. + * @retval VERR_PATH_NOT_FOUND if any but the last component in the specified + * path was not found or was not a directory. + * @retval VERR_FILE_NOT_FOUND if the object does not exist (but path to the + * parent directory exists). + * + * @param pszPath Path to the file system object. + * @param pObjInfo Object information structure to be filled on successful + * return. + * @param enmAdditionalAttribs + * Which set of additional attributes to request. + * Use RTFSOBJATTRADD_NOTHING if this doesn't matter. + */ +RTR3DECL(int) RTPathQueryInfo(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs); + +/** + * Query information about a file system object. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the object exists, information returned. + * @retval VERR_PATH_NOT_FOUND if any but the last component in the specified + * path was not found or was not a directory. + * @retval VERR_FILE_NOT_FOUND if the object does not exist (but path to the + * parent directory exists). + * + * @param pszPath Path to the file system object. + * @param pObjInfo Object information structure to be filled on successful return. + * @param enmAdditionalAttribs + * Which set of additional attributes to request. + * Use RTFSOBJATTRADD_NOTHING if this doesn't matter. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTR3DECL(int) RTPathQueryInfoEx(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags); + +/** + * Changes the mode flags of a file system object. + * + * The API requires at least one of the mode flag sets (Unix/Dos) to + * be set. The type is ignored. + * + * This API will resolve symbolic links in the last component since + * mode isn't important for symbolic links. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param fMode The new file mode, see @ref grp_rt_fs for details. + */ +RTR3DECL(int) RTPathSetMode(const char *pszPath, RTFMODE fMode); + +/** + * Gets the mode flags of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pfMode Where to store the file mode, see @ref grp_rt_fs for details. + * + * @remark This is wrapper around RTPathQueryInfoEx(RTPATH_F_FOLLOW_LINK) and + * exists to complement RTPathSetMode(). + */ +RTR3DECL(int) RTPathGetMode(const char *pszPath, PRTFMODE pfMode); + +/** + * Changes one or more of the timestamps associated of file system object. + * + * This API will not resolve symbolic links in the last component (just + * like unix lutimes()). + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Pointer to the new access time. + * @param pModificationTime Pointer to the new modification time. + * @param pChangeTime Pointer to the new change time. NULL if not to be changed. + * @param pBirthTime Pointer to the new time of birth. NULL if not to be changed. + * + * @remark The file system might not implement all these time attributes, + * the API will ignore the ones which aren't supported. + * + * @remark The file system might not implement the time resolution + * employed by this interface, the time will be chopped to fit. + * + * @remark The file system may update the change time even if it's + * not specified. + * + * @remark POSIX can only set Access & Modification and will always set both. + */ +RTR3DECL(int) RTPathSetTimes(const char *pszPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, + PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime); + +/** + * Changes one or more of the timestamps associated of file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Pointer to the new access time. + * @param pModificationTime Pointer to the new modification time. + * @param pChangeTime Pointer to the new change time. NULL if not to be changed. + * @param pBirthTime Pointer to the new time of birth. NULL if not to be changed. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + * + * @remark The file system might not implement all these time attributes, + * the API will ignore the ones which aren't supported. + * + * @remark The file system might not implement the time resolution + * employed by this interface, the time will be chopped to fit. + * + * @remark The file system may update the change time even if it's + * not specified. + * + * @remark POSIX can only set Access & Modification and will always set both. + */ +RTR3DECL(int) RTPathSetTimesEx(const char *pszPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, + PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime, uint32_t fFlags); + +/** + * Gets one or more of the timestamps associated of file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pAccessTime Where to store the access time. NULL is ok. + * @param pModificationTime Where to store the modification time. NULL is ok. + * @param pChangeTime Where to store the change time. NULL is ok. + * @param pBirthTime Where to store the creation time. NULL is ok. + * + * @remark This is wrapper around RTPathQueryInfo() and exists to complement + * RTPathSetTimes(). If the last component is a symbolic link, it will + * not be resolved. + */ +RTR3DECL(int) RTPathGetTimes(const char *pszPath, PRTTIMESPEC pAccessTime, PRTTIMESPEC pModificationTime, + PRTTIMESPEC pChangeTime, PRTTIMESPEC pBirthTime); + +/** + * Changes the owner and/or group of a file system object. + * + * This API will not resolve symbolic links in the last component (just + * like unix lchown()). + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param uid The new file owner user id. Pass NIL_RTUID to leave + * this unchanged. + * @param gid The new group id. Pass NIL_RTGUID to leave this + * unchanged. + */ +RTR3DECL(int) RTPathSetOwner(const char *pszPath, uint32_t uid, uint32_t gid); + +/** + * Changes the owner and/or group of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param uid The new file owner user id. Pass NIL_RTUID to leave + * this unchanged. + * @param gid The new group id. Pass NIL_RTGID to leave this + * unchanged. + * @param fFlags RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK. + */ +RTR3DECL(int) RTPathSetOwnerEx(const char *pszPath, uint32_t uid, uint32_t gid, uint32_t fFlags); + +/** + * Gets the owner and/or group of a file system object. + * + * @returns iprt status code. + * @param pszPath Path to the file system object. + * @param pUid Where to store the owner user id. NULL is ok. + * @param pGid Where to store the group id. NULL is ok. + * + * @remark This is wrapper around RTPathQueryInfo() and exists to complement + * RTPathGetOwner(). If the last component is a symbolic link, it will + * not be resolved. + */ +RTR3DECL(int) RTPathGetOwner(const char *pszPath, uint32_t *pUid, uint32_t *pGid); + + +/** @name RTPathRename, RTDirRename & RTFileRename flags. + * @{ */ +/** Do not replace anything. */ +#define RTPATHRENAME_FLAGS_NO_REPLACE UINT32_C(0) +/** This will replace attempt any target which isn't a directory. */ +#define RTPATHRENAME_FLAGS_REPLACE RT_BIT(0) +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATHRENAME_FLAGS_NO_SYMLINKS RT_BIT(1) +/** @} */ + +/** + * Renames a path within a filesystem. + * + * This will rename symbolic links. If RTPATHRENAME_FLAGS_REPLACE is used and + * pszDst is a symbolic link, it will be replaced and not its target. + * + * @returns IPRT status code. + * @param pszSrc The source path. + * @param pszDst The destination path. + * @param fRename Rename flags, RTPATHRENAME_FLAGS_*. + */ +RTR3DECL(int) RTPathRename(const char *pszSrc, const char *pszDst, unsigned fRename); + +/** @name RTPathUnlink flags. + * @{ */ +/** Don't allow symbolic links as part of the path. + * @remarks this flag is currently not implemented and will be ignored. */ +#define RTPATHUNLINK_FLAGS_NO_SYMLINKS RT_BIT(0) +/** @} */ + +/** + * Removes the last component of the path. + * + * @returns IPRT status code. + * @param pszPath The path. + * @param fUnlink Unlink flags, RTPATHUNLINK_FLAGS_*. + */ +RTR3DECL(int) RTPathUnlink(const char *pszPath, uint32_t fUnlink); + +/** + * A /bin/rm tool. + * + * @returns Program exit code. + * + * @param cArgs The number of arguments. + * @param papszArgs The argument vector. (Note that this may be + * reordered, so the memory must be writable.) + */ +RTDECL(RTEXITCODE) RTPathRmCmd(unsigned cArgs, char **papszArgs); + +#endif /* IN_RING3 */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/semaphore.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/semaphore.h @@ -0,0 +1,1409 @@ +/** @file + * IPRT - Semaphore. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_semaphore_h +#define ___iprt_semaphore_h + +#include +#include +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) +# include +#endif + + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_sems RTSem - Semaphores + * + * This module implements all kinds of event and mutex semaphores; in addition + * to these, IPRT implements "critical sections", which are fast recursive + * mutexes (see @ref grp_rt_critsect ). C++ users may find @ref grp_rt_cpp_lock + * interesting. + * + * @ingroup grp_rt + * @{ + */ + + +/** @name Generic Semaphore Wait Flags. + * + * @remarks Exactly one of RTSEMWAIT_FLAGS_RELATIVE and + * RTSEMWAIT_FLAGS_ABSOLUTE must be set, unless + * RTSEMWAIT_FLAGS_INDEFINITE is used. + * + * Exactly one of RTSEMWAIT_FLAGS_NANOSECS and + * RTSEMWAIT_FLAGS_MILLISECS must be set, unless + * RTSEMWAIT_FLAGS_INDEFINITE is used. + * + * Exactly one of RTSEMWAIT_FLAGS_RESUME and RTSEMWAIT_FLAGS_NORESUME + * must be set. + * + * The interruptible vs resume stuff is ring-0 vs ring-3 semantics. + * + * @{ */ +/** The timeout is relative. */ +#define RTSEMWAIT_FLAGS_RELATIVE RT_BIT_32(0) +/** The timeout is absolute. */ +#define RTSEMWAIT_FLAGS_ABSOLUTE RT_BIT_32(1) +/** The timeout is specified in nanoseconds. */ +#define RTSEMWAIT_FLAGS_NANOSECS RT_BIT_32(2) +/** The timeout is specified in milliseconds. */ +#define RTSEMWAIT_FLAGS_MILLISECS RT_BIT_32(3) +/** Indefinite wait. + * The relative/absolute and nano-/millisecond flags are ignored. */ +#define RTSEMWAIT_FLAGS_INDEFINITE RT_BIT_32(4) +/** Mask covering the time related bits. */ +#define RTSEMWAIT_FLAGS_TIME_MASK UINT32_C(0x0000001f) + +/** Interruptible wait. */ +#define RTSEMWAIT_FLAGS_INTERRUPTIBLE RT_BIT_32(5) +/** No automatic resume, same as interruptible. */ +#define RTSEMWAIT_FLAGS_NORESUME RTSEMWAIT_FLAGS_INTERRUPTIBLE +/** Uninterruptible wait. */ +#define RTSEMWAIT_FLAGS_UNINTERRUPTIBLE RT_BIT_32(6) +/** Resume on interrupt, same as uninterruptible. */ +#define RTSEMWAIT_FLAGS_RESUME RTSEMWAIT_FLAGS_UNINTERRUPTIBLE + +/** Macro for validate the flags. */ +#define RTSEMWAIT_FLAGS_ARE_VALID(fFlags) \ + ( !((fFlags) & UINT32_C(0xffffff80)) \ + && ( ((fFlags) & RTSEMWAIT_FLAGS_INDEFINITE) \ + ? ( (((fFlags) & UINT32_C(0x20))) ^ (((fFlags) >> 1) & UINT32_C(0x20)) ) == UINT32_C(0x20) \ + : ( (((fFlags) & UINT32_C(0x25))) ^ (((fFlags) >> 1) & UINT32_C(0x25)) ) == UINT32_C(0x25) )) +/** @} */ + + + +/** @defgroup grp_rt_sems_event RTSemEvent - Single Release Event Semaphores + * + * Event semaphores can be used for inter-thread communication when one thread + * wants to notify another thread that something happened. A thread can block + * ("wait") on an event semaphore until it is signalled by another thread; see + * RTSemEventCreate, RTSemEventSignal and RTSemEventWait. + * + * @{ */ + +/** + * Create an event semaphore. + * + * @returns iprt status code. + * @param phEventSem Where to store the handle to the newly created + * event semaphore. + */ +RTDECL(int) RTSemEventCreate(PRTSEMEVENT phEventSem); + +/** + * Create an event semaphore. + * + * @returns iprt status code. + * @param phEventSem Where to store the handle to the newly created + * event semaphore. + * @param fFlags Flags, any combination of the + * RTSEMEVENT_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). Since we + * don't do order checks on event semaphores, the + * use of the class is limited to controlling the + * timeout threshold for deadlock detection. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMEVENT_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** Bootstrap hack for use with certain memory allocator locks only! */ +#define RTSEMEVENT_FLAGS_BOOTSTRAP_HACK UINT32_C(0x00000004) +/** @} */ + +/** + * Destroy an event semaphore. + * + * @returns iprt status code. + * @param hEventSem Handle of the event semaphore. NIL_RTSEMEVENT + * is quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemEventDestroy(RTSEMEVENT hEventSem); + +/** + * Signal an event semaphore. + * + * The event semaphore will be signaled and automatically reset after exactly + * one thread have successfully returned from RTSemEventWait() after + * waiting/polling on that semaphore. + * + * @returns iprt status code. + * @param hEventSem The event semaphore to signal. + * + * @remarks ring-0: This works when preemption is disabled. However it is + * system specific whether it works in interrupt context or with + * interrupts disabled. + */ +RTDECL(int) RTSemEventSignal(RTSEMEVENT hEventSem); + +/** + * Wait for the event semaphore to be signaled, resume on interruption. + * + * This function will resume if the wait is interrupted by an async system event + * (like a unix signal) or similar. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hEventSem The event semaphore to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventWait(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies); + +/** + * Wait for the event semaphore to be signaled, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * @returns iprt status code. + * @param hEventSem The event semaphore to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventWaitNoResume(RTSEMEVENT hEventSem, RTMSINTERVAL cMillies); + +/** + * Extended API for waiting on an event semaphore to be signaled. + * + * @returns IPRT status code. + * @param hEventSem The event semaphore to wait on. + * @param fFlags Combination of RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemEventWaitEx(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemEventWaitEx that tracks the location. + * + * @returns IPRT status code, see RTSemEventWaitEx. + * @param hEventSem The event semaphore to wait on. + * @param fFlags See RTSemEventWaitEx. + * @param uTimeout See RTSemEventWaitEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemEventWaitExDebug(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Gets the best timeout resolution that RTSemEventWaitEx can do. + * + * @returns The resolution in nanoseconds. + */ +RTDECL(uint32_t) RTSemEventGetResolution(void); + +/** + * Sets the signaller thread to one specific thread. + * + * This is only used for validating usage and deadlock detection. When used + * after calls to RTSemEventAddSignaller, the specified thread will be the only + * signalling thread. + * + * @param hEventSem The event semaphore. + * @param hThread The thread that will signal it. Pass + * NIL_RTTHREAD to indicate that there is no + * special signalling thread. + */ +RTDECL(void) RTSemEventSetSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** + * To add more signalling threads. + * + * First call RTSemEventSetSignaller then add further threads with this. + * + * @param hEventSem The event semaphore. + * @param hThread The thread that will signal it. NIL_RTTHREAD is + * not accepted. + */ +RTDECL(void) RTSemEventAddSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** + * To remove a signalling thread. + * + * Reverts work done by RTSemEventAddSignaller and RTSemEventSetSignaller. + * + * @param hEventSem The event semaphore. + * @param hThread A previously added thread. + */ +RTDECL(void) RTSemEventRemoveSignaller(RTSEMEVENT hEventSem, RTTHREAD hThread); + +/** @} */ + + +/** @defgroup grp_rt_sems_event_multi RTSemEventMulti - Multiple Release Event Semaphores + * + * A variant of @ref grp_rt_sems_event where all threads will be unblocked when + * signalling the semaphore. + * + * @{ */ + +/** + * Creates a multiple release event semaphore. + * + * @returns iprt status code. + * @param phEventMultiSem Where to store the handle to the newly created + * multiple release event semaphore. + */ +RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem); + +/** + * Creates a multiple release event semaphore. + * + * @returns iprt status code. + * @param phEventMultiSem Where to store the handle to the newly created + * multiple release event semaphore. + * @param fFlags Flags, any combination of the + * RTSEMEVENTMULTI_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). Since we + * don't do order checks on event semaphores, the + * use of the class is limited to controlling the + * timeout threshold for deadlock detection. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(4, 5); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + +/** + * Destroy an event multi semaphore. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Signal an event multi semaphore. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + * + * @remarks ring-0: This works when preemption is disabled. However it is + * system specific whether it works in interrupt context or with + * interrupts disabled. + */ +RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Resets an event multi semaphore to non-signaled state. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + */ +RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem); + +/** + * Wait for the event multi semaphore to be signaled, resume on interruption. + * + * This function will resume if the wait is interrupted by an async + * system event (like a unix signal) or similar. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hEventMultiSem The multiple release event semaphore. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies); + +/** + * Wait for the event multi semaphore to be signaled, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * @returns iprt status code. + * @param hEventMultiSem The multiple release event semaphore. + * @param cMillies Number of milliseconds to wait. + * @todo Rename to RTSemEventMultiWaitIntr since it is mainly for + * ring-0 consumption. + */ +RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, RTMSINTERVAL cMillies); + +/** + * Extended API for waiting on an event semaphore to be signaled. + * + * @returns IPRT status code. + * @param hEventMultiSem The multiple release event semaphore to wait + * on. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemEventMultiWaitEx(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemEventMultiWaitEx that tracks the location. + + * @returns IPRT status code, see RTSemEventMultiWaitEx. + * @param hEventMultiSem The multiple release event semaphore handle. + * @param fFlags See RTSemEventMultiWaitEx. + * @param uTimeout See RTSemEventMultiWaitEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemEventMultiWaitExDebug(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Gets the best timeout resolution that RTSemEventMultiWaitEx can do. + * + * @returns The resolution in nanoseconds. + */ +RTDECL(uint32_t) RTSemEventMultiGetResolution(void); + +/** + * Sets the signaller thread to one specific thread. + * + * This is only used for validating usage and deadlock detection. When used + * after calls to RTSemEventAddSignaller, the specified thread will be the only + * signalling thread. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread The thread that will signal it. Pass + * NIL_RTTHREAD to indicate that there is no + * special signalling thread. + */ +RTDECL(void) RTSemEventMultiSetSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** + * To add more signalling threads. + * + * First call RTSemEventSetSignaller then add further threads with this. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread The thread that will signal it. NIL_RTTHREAD is + * not accepted. + */ +RTDECL(void) RTSemEventMultiAddSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** + * To remove a signalling thread. + * + * Reverts work done by RTSemEventAddSignaller and RTSemEventSetSignaller. + * + * @param hEventMultiSem The multiple release event semaphore. + * @param hThread A previously added thread. + */ +RTDECL(void) RTSemEventMultiRemoveSignaller(RTSEMEVENTMULTI hEventMultiSem, RTTHREAD hThread); + +/** @} */ + + +/** @defgroup grp_rt_sems_mutex RTSemMutex - Mutex semaphores. + * + * Mutex semaphores protect a section of code or data to which access must be + * exclusive. Only one thread can hold access to a critical section at one + * time. See RTSemMutexCreate, RTSemMutexRequest and RTSemMutexRelease. + * + * @remarks These are less efficient than "fast mutexes" and "critical + * sections", which IPRT implements as well; see @ref + * grp_rt_sems_fast_mutex and @ref grp_rt_critsect . + * + * @{ */ + +/** + * Create a mutex semaphore. + * + * @returns iprt status code. + * @param phMutexSem Where to store the mutex semaphore handle. + */ +RTDECL(int) RTSemMutexCreate(PRTSEMMUTEX phMutexSem); + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phMutexSem Where to store the handle to the newly created + * mutex semaphore. + * @param fFlags Flags, any combination of the + * RTSEMMUTEX_FLAGS_XXX \#defines. + * @param hClass The class (no reference consumed). If NIL, no + * lock order validation will be performed on this + * lock. + * @param uSubClass The sub-class. This is used to define lock + * order within a class. RTLOCKVAL_SUB_CLASS_NONE + * is the recommended value here. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemMutexCreateEx(PRTSEMMUTEX phMutexSem, uint32_t fFlags, RTLOCKVALCLASS hClass, uint32_t uSubClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(5, 6); + +/** @name RTSemMutexCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMMUTEX_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + + +/** + * Destroy a mutex semaphore. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to destroy. NIL is quietly + * ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemMutexDestroy(RTSEMMUTEX hMutexSem); + +/** + * Changes the lock validator sub-class of the mutex semaphore. + * + * It is recommended to try make sure that nobody is using this semaphore while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param hMutexSem The handle to the mutex semaphore. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTSemMutexSetSubClass(RTSEMMUTEX hMutexSem, uint32_t uSubClass); + +/** + * Request ownership of a mutex semaphore, resume on interruption. + * + * This function will resume if the wait is interrupted by an async + * system event (like a unix signal) or similar. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemMutexRequest(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies); + +/** + * Request ownership of a mutex semaphore, return on interruption. + * + * This function will not resume the wait if interrupted. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemMutexRequestNoResume(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemMutexRequest that tracks the location. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemMutexRequestNoResume that tracks the location. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestNoResumeDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request ownership of a mutex semaphore, extended edition. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemMutexRequestEx(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemMutexRequestEx that tracks the location. + * + * @returns iprt status code. + * @param hMutexSem The mutex semaphore to request ownership over. + * @param fFlags See RTSemMutexRequestEx. + * @param uTimeout See RTSemMutexRequestEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemMutexRequestExDebug(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release the ownership of a mutex semaphore. + * + * @returns iprt status code. + * @param hMutexSem The mutex to release the ownership of. It goes + * without saying the the calling thread must own + * it. + */ +RTDECL(int) RTSemMutexRelease(RTSEMMUTEX hMutexSem); + +/** + * Checks if the mutex semaphore is owned or not. + * + * @returns true if owned, false if not. + * @param hMutexSem The mutex semaphore. + */ +RTDECL(bool) RTSemMutexIsOwned(RTSEMMUTEX hMutexSem); + +/* Strict build: Remap the two request calls to the debug versions. */ +#if defined(RT_STRICT) && !defined(RTSEMMUTEX_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# ifdef ___iprt_asm_h +# define RTSemMutexRequest(hMutexSem, cMillies) RTSemMutexRequestDebug((hMutexSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemMutexRequestNoResume(hMutexSem, cMillies) RTSemMutexRequestNoResumeDebug((hMutexSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemMutexRequestEx(hMutexSem, fFlags, uTimeout) RTSemMutexRequestExDebug((hMutexSem), (fFlags), (uTimeout), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# else +# define RTSemMutexRequest(hMutexSem, cMillies) RTSemMutexRequestDebug((hMutexSem), (cMillies), 0, RT_SRC_POS) +# define RTSemMutexRequestNoResume(hMutexSem, cMillies) RTSemMutexRequestNoResumeDebug((hMutexSem), (cMillies), 0, RT_SRC_POS) +# define RTSemMutexRequestEx(hMutexSem, fFlags, uTimeout) RTSemMutexRequestExDebug((hMutexSem), (fFlags), (uTimeout), 0, RT_SRC_POS) +# endif +#endif + +/* Strict lock order: Automatically classify locks by init location. */ +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) && !defined(RTSEMMUTEX_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# define RTSemMutexCreate(phMutexSem) \ + RTSemMutexCreateEx((phMutexSem), 0 /*fFlags*/, \ + RTLockValidatorClassForSrcPos(RT_SRC_POS, NULL), \ + RTLOCKVAL_SUB_CLASS_NONE, NULL) +#endif + +/** @} */ + + +/** @defgroup grp_rt_sems_fast_mutex RTSemFastMutex - Fast Mutex Semaphores + * + * Fast mutexes work like regular mutexes in that they allow only a single + * thread access to a critical piece of code or data. As opposed to mutexes, + * they require no syscall if the fast mutex is not held (like critical + * sections). Unlike critical sections however, they are *not* recursive. + * + * @remarks The fast mutexes has sideeffects on IRQL on Windows hosts. So use + * with care and test on windows with driver verifier. + * + * @{ */ + +/** + * Create a fast mutex semaphore. + * + * @returns iprt status code. + * @param phFastMtx Where to store the handle to the newly created + * fast mutex semaphore. + * + * @remarks Fast mutex semaphores are not recursive. + */ +RTDECL(int) RTSemFastMutexCreate(PRTSEMFASTMUTEX phFastMtx); + +/** + * Destroy a fast mutex semaphore. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemFastMutexDestroy(RTSEMFASTMUTEX hFastMtx); + +/** + * Request ownership of a fast mutex semaphore. + * + * The same thread may request a mutex semaphore multiple times, + * a nested counter is kept to make sure it's released on the right + * RTSemMutexRelease() call. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. + */ +RTDECL(int) RTSemFastMutexRequest(RTSEMFASTMUTEX hFastMtx); + +/** + * Release the ownership of a fast mutex semaphore. + * + * @returns iprt status code. + * @param hFastMtx Handle to the fast mutex semaphore. It goes + * without saying the the calling thread must own + * it. + */ +RTDECL(int) RTSemFastMutexRelease(RTSEMFASTMUTEX hFastMtx); + +/** @} */ + + +/** @defgroup grp_rt_sems_spin_mutex RTSemSpinMutex - Spinning Mutex Semaphores + * + * A very adaptive variant of mutex semaphore that is tailored for the ring-0 + * logger. + * + * @{ */ + +/** + * Creates a spinning mutex semaphore. + * + * @returns iprt status code. + * @retval VERR_INVALID_PARAMETER on invalid flags. + * @retval VERR_NO_MEMORY if out of memory for the semaphore structure and + * handle. + * + * @param phSpinMtx Where to return the handle to the create semaphore. + * @param fFlags Flags, see RTSEMSPINMUTEX_FLAGS_XXX. + */ +RTDECL(int) RTSemSpinMutexCreate(PRTSEMSPINMUTEX phSpinMtx, uint32_t fFlags); + +/** @name RTSemSpinMutexCreate flags. + * @{ */ +/** Always take the semaphore in a IRQ safe way. + * (In plain words: always disable interrupts.) */ +#define RTSEMSPINMUTEX_FLAGS_IRQ_SAFE RT_BIT_32(0) +/** Mask of valid flags. */ +#define RTSEMSPINMUTEX_FLAGS_VALID_MASK UINT32_C(0x00000001) +/** @} */ + +/** + * Destroys a spinning mutex semaphore. + * + * @returns iprt status code. + * @retval VERR_INVALID_HANDLE (or crash) if the handle is invalid. (NIL will + * not cause this status.) + * + * @param hSpinMtx The semaphore handle. NIL_RTSEMSPINMUTEX is ignored + * quietly (VINF_SUCCESS). + */ +RTDECL(int) RTSemSpinMutexDestroy(RTSEMSPINMUTEX hSpinMtx); + +/** + * Request the spinning mutex semaphore. + * + * This may block if the context we're called in allows this. If not it will + * spin. If called in an interrupt context, we will only spin if the current + * owner isn't interrupted. Also, on some systems it is not always possible to + * wake up blocking threads in all contexts, so, which will either be indicated + * by returning VERR_SEM_BAD_CONTEXT or by temporarily switching the semaphore + * into pure spinlock state. + * + * Preemption will be disabled upon return. IRQs may also be disabled. + * + * @returns iprt status code. + * @retval VERR_SEM_BAD_CONTEXT if the context it's called in isn't suitable + * for releasing it if someone is sleeping on it. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_SEM_NESTED if held by the caller. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexRequest(RTSEMSPINMUTEX hSpinMtx); + +/** + * Like RTSemSpinMutexRequest but it won't block or spin if the semaphore is + * held by someone else. + * + * @returns iprt status code. + * @retval VERR_SEM_BUSY if held by someone else. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_SEM_NESTED if held by the caller. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexTryRequest(RTSEMSPINMUTEX hSpinMtx); + +/** + * Releases the semaphore previously acquired by RTSemSpinMutexRequest or + * RTSemSpinMutexTryRequest. + * + * @returns iprt status code. + * @retval VERR_SEM_DESTROYED if destroyed. + * @retval VERR_NOT_OWNER if not owner. Asserted. + * @retval VERR_INVALID_HANDLE if the handle is invalid. Asserted. + * + * @param hSpinMtx The semaphore handle. + */ +RTDECL(int) RTSemSpinMutexRelease(RTSEMSPINMUTEX hSpinMtx); + +/** @} */ + + +/** @defgroup grp_rt_sem_rw RTSemRW - Read / Write Semaphores + * + * Read/write semaphores are a fancier version of mutexes in that they grant + * read access to the protected data to several threads at the same time but + * allow only one writer at a time. This can make code scale better at the + * expense of slightly more overhead in mutex management. + * + * @{ */ + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phRWSem Where to store the handle to the newly created + * RW semaphore. + */ +RTDECL(int) RTSemRWCreate(PRTSEMRW phRWSem); + +/** + * Creates a read/write semaphore. + * + * @returns iprt status code. + * @param phRWSem Where to store the handle to the newly created + * RW semaphore. + * @param fFlags Flags, any combination of the RTSEMRW_FLAGS_XXX + * \#defines. + * @param hClass The class (no reference consumed). If NIL, no + * lock order validation will be performed on this + * lock. + * @param uSubClass The sub-class. This is used to define lock + * order within a class. RTLOCKVAL_SUB_CLASS_NONE + * is the recommended value here. + * @param pszNameFmt Name format string for the lock validator, + * optional (NULL). Max length is 32 bytes. + * @param ... Format string arguments. + */ +RTDECL(int) RTSemRWCreateEx(PRTSEMRW phRWSem, uint32_t fFlags, RTLOCKVALCLASS hClass, uint32_t uSubClass, + const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(5, 6); + +/** @name RTSemRWCreateEx flags + * @{ */ +/** Disables lock validation. */ +#define RTSEMRW_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) +/** @} */ + +/** + * Destroys a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. NIL is + * quietly ignored (VINF_SUCCESS). + */ +RTDECL(int) RTSemRWDestroy(RTSEMRW hRWSem); + +/** + * Changes the lock validator sub-class of the read/write semaphore. + * + * It is recommended to try make sure that nobody is using this semaphore while + * changing the value. + * + * @returns The old sub-class. RTLOCKVAL_SUB_CLASS_INVALID is returns if the + * lock validator isn't compiled in or either of the parameters are + * invalid. + * @param hRWSem Handle to the read/write semaphore. + * @param uSubClass The new sub-class value. + */ +RTDECL(uint32_t) RTSemRWSetSubClass(RTSEMRW hRWSem, uint32_t uSubClass); + +/** + * Request read access to a read/write semaphore, resume on interruption + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestRead(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Request read access to a read/write semaphore, return on interruption + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestReadNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemRWRequestRead that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemRWRequestWriteNoResume that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request read access to a read/write semaphore, extended edition. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemRWRequestReadEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout); + + +/** + * Debug version of RTSemRWRequestReadEx that tracks the location. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags See RTSemRWRequestReadEx. + * @param uTimeout See RTSemRWRequestReadEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestReadExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release read access to a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. It goes + * without saying that caller must own read + * privileges to the semaphore. + */ +RTDECL(int) RTSemRWReleaseRead(RTSEMRW hRWSem); + +/** + * Request write access to a read/write semaphore, resume on interruption. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_DEADLOCK if the caller owned the read lock. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestWrite(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Request write access to a read/write semaphore, return on interruption. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPT if the wait was interrupted. + * @retval VERR_DEADLOCK if the caller owned the read lock. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + */ +RTDECL(int) RTSemRWRequestWriteNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies); + +/** + * Debug version of RTSemRWRequestWrite that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWrite. + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Debug version of RTSemRWRequestWriteNoResume that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWriteNoResume. + * @param hRWSem Handle to the read/write semaphore. + * @param cMillies The number of milliseconds to wait. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Request write access to a read/write semaphore, extended edition. + * + * @returns iprt status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_INTERRUPTED if the wait was interrupted. + * @retval VERR_TIMEOUT if the wait timed out. + * @retval VERR_DEADLOCK if the caller owned the read lock. Do not depend on + * this as it is implementation specific. + * @retval VERR_INVALID_HANDLE if hRWSem is invalid. + * + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags Combination of the RTSEMWAIT_FLAGS_XXX. + * @param uTimeout The timeout, ignored if + * RTSEMWAIT_FLAGS_INDEFINITE is set in @a flags. + * Whether this is absolute or relative, + * milliseconds or nanoseconds depends on the @a + * fFlags value. Do not pass RT_INDEFINITE_WAIT + * here, use RTSEMWAIT_FLAGS_INDEFINITE instead. + */ +RTDECL(int) RTSemRWRequestWriteEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout); + +/** + * Debug version of RTSemRWRequestWriteEx that tracks the location. + * + * @returns IPRT status code, see RTSemRWRequestWriteEx. + * @param hRWSem Handle to the read/write semaphore. + * @param fFlags See RTSemRWRequestWriteEx. + * @param uTimeout See RTSemRWRequestWriteEx. + * @param uId Some kind of locking location ID. Typically a + * return address up the stack. Optional (0). + * @param SRC_POS The source position where call is being made + * from. Use RT_SRC_POS when possible. Optional. + */ +RTDECL(int) RTSemRWRequestWriteExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout, + RTHCUINTPTR uId, RT_SRC_POS_DECL); + +/** + * Release write access to a read/write semaphore. + * + * @returns iprt status code. + * @param hRWSem Handle to the read/write semaphore. Goes + * without saying that caller must have write + * access to the semaphore. + */ +RTDECL(int) RTSemRWReleaseWrite(RTSEMRW hRWSem); + +/** + * Checks if the caller is the exclusive semaphore owner. + * + * @returns true / false accoringly. + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(bool) RTSemRWIsWriteOwner(RTSEMRW hRWSem); + +/** + * Checks if the caller is one of the read owners of the semaphore. + * + * @note !CAUTION! This API doesn't work reliably if lock validation isn't + * enabled. Meaning, the answer is not trustworhty unless + * RT_LOCK_STRICT or RTSEMRW_STRICT was defined at build time. Also, + * make sure you do not use RTSEMRW_FLAGS_NO_LOCK_VAL when creating + * the semaphore. And finally, if you used a locking class, don't + * disable deadlock detection by setting cMsMinDeadlock to + * RT_INDEFINITE_WAIT. + * + * In short, only use this for assertions. + * + * @returns true if reader, false if not. + * @param hRWSem Handle to the read/write semaphore. + * @param fWannaHear What you'd like to hear when lock validation is + * not available. (For avoiding asserting all over + * the place.) + */ +RTDECL(bool) RTSemRWIsReadOwner(RTSEMRW hRWSem, bool fWannaHear); + +/** + * Gets the write recursion count. + * + * @returns The write recursion count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetWriteRecursion(RTSEMRW hRWSem); + +/** + * Gets the read recursion count of the current writer. + * + * @returns The read recursion count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetWriterReadRecursion(RTSEMRW hRWSem); + +/** + * Gets the current number of reads. + * + * This includes all read recursions, so it might be higher than the number of + * read owners. It does not include reads done by the current writer. + * + * @returns The read count (0 if bad semaphore handle). + * @param hRWSem Handle to the read/write semaphore. + */ +RTDECL(uint32_t) RTSemRWGetReadCount(RTSEMRW hRWSem); + +/* Strict build: Remap the four request calls to the debug versions. */ +#if defined(RT_STRICT) && !defined(RTSEMRW_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# ifdef ___iprt_asm_h +# define RTSemRWRequestRead(hRWSem, cMillies) RTSemRWRequestReadDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestReadNoResume(hRWSem, cMillies) RTSemRWRequestReadNoResumeDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWrite(hRWSem, cMillies) RTSemRWRequestWriteDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWriteNoResume(hRWSem, cMillies) RTSemRWRequestWriteNoResumeDebug((hRWSem), (cMillies), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# define RTSemRWRequestWriteEx(hRWSem, fFlags, uTimeout) RTSemRWRequestWriteExDebug((hRWSem), (fFlags), (uTimeout), (uintptr_t)ASMReturnAddress(), RT_SRC_POS) +# else +# define RTSemRWRequestRead(hRWSem, cMillies) RTSemRWRequestReadDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestReadNoResume(hRWSem, cMillies) RTSemRWRequestReadNoResumeDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWrite(hRWSem, cMillies) RTSemRWRequestWriteDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWriteNoResume(hRWSem, cMillies) RTSemRWRequestWriteNoResumeDebug((hRWSem), (cMillies), 0, RT_SRC_POS) +# define RTSemRWRequestWriteEx(hRWSem, fFlags, uTimeout) RTSemRWRequestWriteExDebug((hRWSem), (fFlags), (uTimeout), 0, RT_SRC_POS) +# endif +#endif + +/* Strict lock order: Automatically classify locks by init location. */ +#if defined(RT_LOCK_STRICT_ORDER) && defined(IN_RING3) && !defined(RTSEMRW_WITHOUT_REMAPPING) && !defined(RT_WITH_MANGLING) +# define RTSemRWCreate(phSemRW) \ + RTSemRWCreateEx((phSemRW), 0 /*fFlags*/, \ + RTLockValidatorClassForSrcPos(RT_SRC_POS, NULL), \ + RTLOCKVAL_SUB_CLASS_NONE, NULL) +#endif + +/** @} */ + + +/** @defgroup grp_rt_sems_pingpong RTSemPingPong - Ping-Pong Construct + * + * Serialization of a two way communication. + * + * @{ */ + +/** + * Ping-pong speaker + */ +typedef enum RTPINGPONGSPEAKER +{ + /** Not initialized. */ + RTPINGPONGSPEAKER_UNINITIALIZE = 0, + /** Ping is speaking, Pong is waiting. */ + RTPINGPONGSPEAKER_PING, + /** Pong is signaled, Ping is waiting. */ + RTPINGPONGSPEAKER_PONG_SIGNALED, + /** Pong is speaking, Ping is waiting. */ + RTPINGPONGSPEAKER_PONG, + /** Ping is signaled, Pong is waiting. */ + RTPINGPONGSPEAKER_PING_SIGNALED, + /** Hack to ensure that it's at least 32-bits wide. */ + RTPINGPONGSPEAKER_HACK = 0x7fffffff +} RTPINGPONGSPEAKER; + +/** + * Ping-Pong construct. + * + * Two threads, one saying Ping and the other saying Pong. The construct + * makes sure they don't speak out of turn and that they can wait and poll + * on the conversation. + */ +typedef struct RTPINGPONG +{ + /** The semaphore the Ping thread waits on. */ + RTSEMEVENT Ping; + /** The semaphore the Pong thread waits on. */ + RTSEMEVENT Pong; + /** The current speaker. */ + volatile RTPINGPONGSPEAKER enmSpeaker; +#if HC_ARCH_BITS == 64 + /** Padding the structure to become a multiple of sizeof(RTHCPTR). */ + uint32_t u32Padding; +#endif +} RTPINGPONG; +/** Pointer to Ping-Pong construct. */ +typedef RTPINGPONG *PRTPINGPONG; + +/** + * Init a Ping-Pong construct. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure which needs initialization. + */ +RTDECL(int) RTSemPingPongInit(PRTPINGPONG pPP); + +/** + * Deletes a Ping-Pong construct. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure which is to be destroyed. + * (I.e. put into uninitialized state.) + */ +RTDECL(int) RTSemPingPongDelete(PRTPINGPONG pPP); + +/** + * Signals the pong thread in a ping-pong construct. (I.e. sends ping.) + * This is called by the ping thread. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure to ping. + */ +RTDECL(int) RTSemPing(PRTPINGPONG pPP); + +/** + * Signals the ping thread in a ping-pong construct. (I.e. sends pong.) + * This is called by the pong thread. + * + * @returns iprt status code. + * @param pPP Pointer to the ping-pong structure to pong. + */ +RTDECL(int) RTSemPong(PRTPINGPONG pPP); + +/** + * Wait function for the ping thread. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param pPP Pointer to the ping-pong structure to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemPingWait(PRTPINGPONG pPP, RTMSINTERVAL cMillies); + +/** + * Wait function for the pong thread. + * + * @returns iprt status code. + * Will not return VERR_INTERRUPTED. + * @param pPP Pointer to the ping-pong structure to wait on. + * @param cMillies Number of milliseconds to wait. + */ +RTDECL(int) RTSemPongWait(PRTPINGPONG pPP, RTMSINTERVAL cMillies); + + +/** + * Checks if the pong thread is speaking. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPongIsSpeaker(). + */ +DECLINLINE(bool) RTSemPingIsSpeaker(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PING; +} + + +/** + * Checks if the pong thread is speaking. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPingIsSpeaker(). + */ +DECLINLINE(bool) RTSemPongIsSpeaker(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PONG; +} + + +/** + * Checks whether the ping thread should wait. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPongShouldWait(). + */ +DECLINLINE(bool) RTSemPingShouldWait(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PONG + || enmSpeaker == RTPINGPONGSPEAKER_PONG_SIGNALED + || enmSpeaker == RTPINGPONGSPEAKER_PING_SIGNALED; +} + + +/** + * Checks whether the pong thread should wait. + * + * @returns true / false. + * @param pPP Pointer to the ping-pong structure. + * @remark This is NOT the same as !RTSemPingShouldWait(). + */ +DECLINLINE(bool) RTSemPongShouldWait(PRTPINGPONG pPP) +{ + RTPINGPONGSPEAKER enmSpeaker = pPP->enmSpeaker; + return enmSpeaker == RTPINGPONGSPEAKER_PING + || enmSpeaker == RTPINGPONGSPEAKER_PING_SIGNALED + || enmSpeaker == RTPINGPONGSPEAKER_PONG_SIGNALED; +} + +/** @} */ + + +/** @defgroup grp_rt_sems_xroads RTSemXRoads - Crossroads + * + * The crossroads semaphore is intended to prevent two classes of incompatible + * events from occurring simultaneously, like south/north bound traffic and + * west/east bound traffic at a 4-way junction. + * + * @remarks In order to simplify the implementation, the current flow is always + * given priority. So, it won't work at all well when busy! + * + * @remarks "XRoads" is used as a name because it is briefer than "crossroads" + * and it slightly stresses that is a 4 way crossing to the users of + * American English. + * @{ + */ + +/** + * Creates a crossroads semaphore. + * + * @returns IPRT status code. + * + * @param phXRoads Where to return the handle to the newly created + * crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsCreate(PRTSEMXROADS phXRoads); + +/** + * Destroys a crossroads semaphore. + * + * @returns IPRT status code. + * + * @param hXRoads Handle to the crossroads semaphore that is to be + * destroyed. NIL_RTSEMXROADS is quitetly ignored + * (VINF_SUCCESS). + */ +RTDECL(int) RTSemXRoadsDestroy(RTSEMXROADS hXRoads); + +/** + * Enter the crossroads from the south or north. + * + * (Coupled with RTSemXRoadsNSLeave.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsNSEnter(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads to the north or south. + * + * (Coupled with RTSemXRoadsNSEnter.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsNSLeave(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads from the east or west. + * + * (Coupled with RTSemXRoadsEWLeave.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsEWEnter(RTSEMXROADS hXRoads); + +/** + * Leave the crossroads to the west or east. + * + * (Coupled with RTSemXRoadsEWEnter.) + * + * @returns IPRT status code. + * @param hXRoads Handle to the crossroads semaphore. + */ +RTDECL(int) RTSemXRoadsEWLeave(RTSEMXROADS hXRoads); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/stdarg.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/stdarg.h @@ -0,0 +1,59 @@ +/** @file + * IPRT - stdarg.h wrapper. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_stdarg_h +#define ___iprt_stdarg_h + +#ifdef IPRT_NO_CRT +# include +# include +#else +# include +# if defined(RT_OS_FREEBSD) && defined(_KERNEL) +# include +# elif defined(RT_OS_NETBSD) && defined(_KERNEL) +# include +# elif defined(RT_OS_SOLARIS) && defined(_KERNEL) && defined(__GNUC__) +# include +# if __GNUC__ >= 4 /* System headers refers to __builtin_stdarg_start. */ +# define __builtin_stdarg_start __builtin_va_start +# endif +# else +# include +# endif +#endif + +/* + * Older MSC versions doesn't implement va_copy. Newer (12.0+?) ones does + * implement it like below, but for now it's easier to continue like for the + * older ones so we can more easily handle R0, RC and other weird contexts. + */ +#if !defined(va_copy) || defined(_MSC_VER) +# undef va_copy +# define va_copy(dst, src) do { (dst) = (src); } while (0) /** @todo check AMD64 */ +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/stdint.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/stdint.h @@ -0,0 +1,284 @@ +/** @file + * IPRT - stdint.h wrapper (for backlevel compilers like MSC). + */ + +/* + * Copyright (C) 2009-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef __iprt_stdint_h +#define __iprt_stdint_h + +#include + + +/* + * Use the stdint.h on systems that have one. + */ +#if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \ + && !(defined(RT_OS_FREEBSD) && defined(_KERNEL)) \ + && !(defined(RT_OS_NETBSD) && defined(_KERNEL)) \ + && RT_MSC_PREREQ_EX(RT_MSC_VER_VS2010, 1 /*non-msc*/) \ + && !defined(__IBMC__) \ + && !defined(__IBMCPP__) \ + && !defined(IPRT_NO_CRT) \ + && !defined(IPRT_DONT_USE_SYSTEM_STDINT_H) \ + && !defined(DOXYGEN_RUNNING) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4668) +# endif +# include +# ifdef _MSC_VER +# pragma warning(pop) +# endif + +# if defined(RT_OS_DARWIN) && defined(KERNEL) && defined(RT_ARCH_AMD64) + /* + * Kludge to fix the incorrect 32-bit constant macros in + * Kernel.framework/Headers/stdin.h. uint32_t and int32_t are + * int not long as these macros use, which is significant when + * targeting AMD64. (10a222) + */ +# undef INT32_C +# define INT32_C(Value) (Value) +# undef UINT32_C +# define UINT32_C(Value) (Value ## U) +# endif /* 64-bit darwin kludge. */ + +#elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# include + +#elif defined(RT_OS_NETBSD) && defined(_KERNEL) + +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS +# endif +# include + +#else /* No system stdint.h */ + +/* + * Define the types we use. + * The linux kernel defines all these in linux/types.h, so skip it. + */ +# if !(defined(RT_OS_LINUX) && defined(__KERNEL__)) \ + || defined(IPRT_NO_CRT) \ + || defined(IPRT_DONT_USE_SYSTEM_STDINT_H) \ + || defined(DOXGEN_RUNNING) + + /* Simplify the [u]int64_t type detection mess. */ +# undef IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# ifdef __IBMCPP__ +# if __IBMCPP__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__)) +# define IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# endif +# endif +# ifdef __IBMC__ +# if __IBMC__ < 350 && (defined(__WINDOWS__) || defined(_AIX) || defined(__OS2__)) +# define IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES +# endif +# endif + + /* x-bit types */ +# if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# if !defined(_INT8_T_DECLARED) && !defined(_INT8_T) +typedef signed char int8_t; +# endif +# if !defined(_UINT8_T_DECLARED) && !defined(_UINT8_T) +typedef unsigned char uint8_t; +# endif +# if !defined(_INT16_T_DECLARED) && !defined(_INT16_T) +typedef signed short int16_t; +# endif +# if !defined(_UINT16_T_DECLARED) && !defined(_UINT16_T) +typedef unsigned short uint16_t; +# endif +# if !defined(_INT32_T_DECLARED) && !defined(_INT32_T) +# if ARCH_BITS != 16 +typedef signed int int32_t; +# else +typedef signed long int32_t; +# endif +# endif +# if !defined(_UINT32_T_DECLARED) && !defined(_UINT32_T) +# if ARCH_BITS != 16 +typedef unsigned int uint32_t; +# else +typedef unsigned long uint32_t; +# endif +# endif +# if defined(_MSC_VER) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed _int64 int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned _int64 uint64_t; +# endif +# elif defined(__WATCOMC__) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed __int64 int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned __int64 uint64_t; +# endif +# elif defined(IPRT_STDINT_USE_STRUCT_FOR_64_BIT_TYPES) +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef struct { uint32_t lo; int32_t hi; } int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef struct { uint32_t lo; uint32_t hi; } uint64_t; +# endif +# else /* Use long long for 64-bit types */ +# if !defined(_INT64_T_DECLARED) && !defined(_INT64_T) +typedef signed long long int64_t; +# endif +# if !defined(_UINT64_T_DECLARED) && !defined(_UINT64_T) +typedef unsigned long long uint64_t; +# endif +# endif + + /* max integer types */ +# if !defined(_INTMAX_T_DECLARED) && !defined(_INTMAX_T) +typedef int64_t intmax_t; +# endif +# if !defined(_UINTMAX_T_DECLARED) && !defined(_UINTMAX_T) +typedef uint64_t uintmax_t; +# endif + +# else +# error "PORTME: Add architecture. Don't forget to check the [U]INTx_C() and [U]INTMAX_MIN/MAX macros." +# endif + +# endif /* !linux kernel or stuff */ + + /* pointer <-> integer types */ +# if !defined(_MSC_VER) || defined(DOXYGEN_RUNNING) +# if ARCH_BITS == 32 \ + || defined(RT_OS_LINUX) \ + || defined(RT_OS_FREEBSD) +# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T) +typedef signed long intptr_t; +# endif +# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T) +typedef unsigned long uintptr_t; +# endif +# else +# if !defined(_INTPTR_T_DECLARED) && !defined(_INTPTR_T) +typedef int64_t intptr_t; +# endif +# if !defined(_UINTPTR_T_DECLARED) && !defined(_UINTPTR_T) +typedef uint64_t uintptr_t; +# endif +# endif +# endif /* !_MSC_VER */ + +#endif /* no system stdint.h */ + + +/* + * Make sure the [U]INTx_C(c) macros are present. + * For In C++ source the system stdint.h may have skipped these if it was + * included before we managed to define __STDC_CONSTANT_MACROS. (Kludge alert!) + */ +#if !defined(INT8_C) \ + || !defined(INT16_C) \ + || !defined(INT32_C) \ + || !defined(INT64_C) \ + || !defined(INTMAX_C) \ + || !defined(UINT8_C) \ + || !defined(UINT16_C) \ + || !defined(UINT32_C) \ + || !defined(UINT64_C) \ + || !defined(UINTMAX_C) +# define INT8_C(Value) (Value) +# define INT16_C(Value) (Value) +# define UINT8_C(Value) (Value) +# define UINT16_C(Value) (Value) +# if ARCH_BITS != 16 +# define INT32_C(Value) (Value) +# define UINT32_C(Value) (Value ## U) +# define INT64_C(Value) (Value ## LL) +# define UINT64_C(Value) (Value ## ULL) +# else +# define INT32_C(Value) (Value ## L) +# define UINT32_C(Value) (Value ## UL) +# define INT64_C(Value) (Value ## LL) +# define UINT64_C(Value) (Value ## ULL) +# endif +# define INTMAX_C(Value) INT64_C(Value) +# define UINTMAX_C(Value) UINT64_C(Value) +#endif + + +/* + * Make sure the INTx_MIN and [U]INTx_MAX macros are present. + * For In C++ source the system stdint.h may have skipped these if it was + * included before we managed to define __STDC_LIMIT_MACROS. (Kludge alert!) + */ +#if !defined(INT8_MIN) \ + || !defined(INT16_MIN) \ + || !defined(INT32_MIN) \ + || !defined(INT64_MIN) \ + || !defined(INT8_MAX) \ + || !defined(INT16_MAX) \ + || !defined(INT32_MAX) \ + || !defined(INT64_MAX) \ + || !defined(UINT8_MAX) \ + || !defined(UINT16_MAX) \ + || !defined(UINT32_MAX) \ + || !defined(UINT64_MAX) +# define INT8_MIN (INT8_C(-0x7f) - 1) +# define INT16_MIN (INT16_C(-0x7fff) - 1) +# define INT32_MIN (INT32_C(-0x7fffffff) - 1) +# define INT64_MIN (INT64_C(-0x7fffffffffffffff) - 1) +# define INT8_MAX INT8_C(0x7f) +# define INT16_MAX INT16_C(0x7fff) +# define INT32_MAX INT32_C(0x7fffffff) +# define INT64_MAX INT64_C(0x7fffffffffffffff) +# define UINT8_MAX UINT8_C(0xff) +# define UINT16_MAX UINT16_C(0xffff) +# define UINT32_MAX UINT32_C(0xffffffff) +# define UINT64_MAX UINT64_C(0xffffffffffffffff) + +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# define UINTMAX_MAX UINT64_MAX +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/string.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/string.h @@ -0,0 +1,3243 @@ +/** @file + * IPRT - String Manipulation. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_string_h +#define ___iprt_string_h + +#include +#include +#include +#include +#include /* for VINF_SUCCESS */ +#if defined(RT_OS_LINUX) && defined(__KERNEL__) + /* no C++ hacks ('new' etc) here anymore! */ +# include + +#elif defined(IN_XF86_MODULE) && !defined(NO_ANSIC) + RT_C_DECLS_BEGIN +# include "xf86_ansic.h" + RT_C_DECLS_END + +#elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + RT_C_DECLS_BEGIN +# include + RT_C_DECLS_END + +#elif defined(RT_OS_NETBSD) && defined(_KERNEL) + RT_C_DECLS_BEGIN +# include + RT_C_DECLS_END + +#elif defined(RT_OS_SOLARIS) && defined(_KERNEL) + /* + * Same case as with FreeBSD kernel: + * The string.h stuff clashes with sys/system.h + * ffs = find first set bit. + */ +# define ffs ffs_string_h +# include +# undef ffs +# undef strpbrk + +#else +# include +#endif + +/* For the time being: */ +#include +#include + +/* + * Supply prototypes for standard string functions provided by + * IPRT instead of the operating environment. + */ +#if defined(RT_OS_DARWIN) && defined(KERNEL) +RT_C_DECLS_BEGIN +void *memchr(const void *pv, int ch, size_t cb); +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if defined(RT_OS_FREEBSD) && defined(_KERNEL) +RT_C_DECLS_BEGIN +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if defined(RT_OS_NETBSD) && defined(_KERNEL) +RT_C_DECLS_BEGIN +char *strpbrk(const char *pszStr, const char *pszChars); +RT_C_DECLS_END +#endif + +#if (!defined(RT_OS_LINUX) || !defined(_GNU_SOURCE)) && !defined(RT_OS_FREEBSD) && !defined(RT_OS_NETBSD) +RT_C_DECLS_BEGIN +void *memrchr(const char *pv, int ch, size_t cb); +RT_C_DECLS_END +#endif + + +/** @def RT_USE_RTC_3629 + * When defined the UTF-8 range will stop at 0x10ffff. If not defined, the + * range stops at 0x7fffffff. + * @remarks Must be defined both when building and using the IPRT. */ +#ifdef DOXYGEN_RUNNING +# define RT_USE_RTC_3629 +#endif + + +/** + * Byte zero the specified object. + * + * This will use sizeof(Obj) to figure the size and will call memset, bzero + * or some compiler intrinsic to perform the actual zeroing. + * + * @param Obj The object to zero. Make sure to dereference pointers. + * + * @remarks Because the macro may use memset it has been placed in string.h + * instead of cdefs.h to avoid build issues because someone forgot + * to include this header. + * + * @ingroup grp_rt_cdefs + */ +#define RT_ZERO(Obj) RT_BZERO(&(Obj), sizeof(Obj)) + +/** + * Byte zero the specified memory area. + * + * This will call memset, bzero or some compiler intrinsic to clear the + * specified bytes of memory. + * + * @param pv Pointer to the memory. + * @param cb The number of bytes to clear. Please, don't pass 0. + * + * @remarks Because the macro may use memset it has been placed in string.h + * instead of cdefs.h to avoid build issues because someone forgot + * to include this header. + * + * @ingroup grp_rt_cdefs + */ +#define RT_BZERO(pv, cb) do { memset((pv), 0, cb); } while (0) + + + +/** @defgroup grp_rt_str RTStr - String Manipulation + * Mostly UTF-8 related helpers where the standard string functions won't do. + * @ingroup grp_rt + * @{ + */ + +RT_C_DECLS_BEGIN + + +/** + * The maximum string length. + */ +#define RTSTR_MAX (~(size_t)0) + + +/** @def RTSTR_TAG + * The default allocation tag used by the RTStr allocation APIs. + * + * When not defined before the inclusion of iprt/string.h, this will default to + * the pointer to the current file name. The string API will make of use of + * this as pointer to a volatile but read-only string. + */ +#if !defined(RTSTR_TAG) || defined(DOXYGEN_RUNNING) +# define RTSTR_TAG (__FILE__) +#endif + + +#ifdef IN_RING3 + +/** + * Allocates tmp buffer with default tag, translates pszString from UTF8 to + * current codepage. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated native CP string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to convert. + */ +#define RTStrUtf8ToCurrentCP(ppszString, pszString) RTStrUtf8ToCurrentCPTag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates tmp buffer with custom tag, translates pszString from UTF8 to + * current codepage. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated native CP string. + * The returned pointer must be freed using + * RTStrFree()., const char *pszTag + * @param pszString UTF-8 string to convert. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR3DECL(int) RTStrUtf8ToCurrentCPTag(char **ppszString, const char *pszString, const char *pszTag); + +/** + * Allocates tmp buffer, translates pszString from current codepage to UTF-8. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString Native string to convert. + */ +#define RTStrCurrentCPToUtf8(ppszString, pszString) RTStrCurrentCPToUtf8Tag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates tmp buffer, translates pszString from current codepage to UTF-8. + * + * @returns iprt status code. + * @param ppszString Receives pointer of allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString Native string to convert. + * @param pszTag Allocation tag used for statistics and such. + */ +RTR3DECL(int) RTStrCurrentCPToUtf8Tag(char **ppszString, const char *pszString, const char *pszTag); + +#endif /* IN_RING3 */ + +/** + * Free string allocated by any of the non-UCS-2 string functions. + * + * @returns iprt status code. + * @param pszString Pointer to buffer with string to free. + * NULL is accepted. + */ +RTDECL(void) RTStrFree(char *pszString); + +/** + * Allocates a new copy of the given UTF-8 string (default tag). + * + * @returns Pointer to the allocated UTF-8 string. + * @param pszString UTF-8 string to duplicate. + */ +#define RTStrDup(pszString) RTStrDupTag((pszString), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 string (custom tag). + * + * @returns Pointer to the allocated UTF-8 string. + * @param pszString UTF-8 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrDupTag(const char *pszString, const char *pszTag); + +/** + * Allocates a new copy of the given UTF-8 string (default tag). + * + * @returns iprt status code. + * @param ppszString Receives pointer of the allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to duplicate. + */ +#define RTStrDupEx(ppszString, pszString) RTStrDupExTag((ppszString), (pszString), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 string (custom tag). + * + * @returns iprt status code. + * @param ppszString Receives pointer of the allocated UTF-8 string. + * The returned pointer must be freed using RTStrFree(). + * @param pszString UTF-8 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrDupExTag(char **ppszString, const char *pszString, const char *pszTag); + +/** + * Allocates a new copy of the given UTF-8 substring (default tag). + * + * @returns Pointer to the allocated UTF-8 substring. + * @param pszString UTF-8 string to duplicate. + * @param cchMax The max number of chars to duplicate, not counting + * the terminator. + */ +#define RTStrDupN(pszString, cchMax) RTStrDupNTag((pszString), (cchMax), RTSTR_TAG) + +/** + * Allocates a new copy of the given UTF-8 substring (custom tag). + * + * @returns Pointer to the allocated UTF-8 substring. + * @param pszString UTF-8 string to duplicate. + * @param cchMax The max number of chars to duplicate, not counting + * the terminator. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrDupNTag(const char *pszString, size_t cchMax, const char *pszTag); + +/** + * Appends a string onto an existing IPRT allocated string (default tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. NULL and empty strings + * are quietly ignored. + */ +#define RTStrAAppend(ppsz, pszAppend) RTStrAAppendTag((ppsz), (pszAppend), RTSTR_TAG) + +/** + * Appends a string onto an existing IPRT allocated string (custom tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. NULL and empty strings + * are quietly ignored. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendTag(char **ppsz, const char *pszAppend, const char *pszTag); + +/** + * Appends N bytes from a strings onto an existing IPRT allocated string + * (default tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. Can be NULL if cchAppend + * is NULL. + * @param cchAppend The number of chars (not code points) to append + * from pszAppend. Must not be more than + * @a pszAppend contains, except for the special + * value RTSTR_MAX that can be used to indicate all + * of @a pszAppend without having to strlen it. + */ +#define RTStrAAppendN(ppsz, pszAppend, cchAppend) RTStrAAppendNTag((ppsz), (pszAppend), (cchAppend), RTSTR_TAG) + +/** + * Appends N bytes from a strings onto an existing IPRT allocated string (custom + * tag). + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszAppend The string to append. Can be NULL if cchAppend + * is NULL. + * @param cchAppend The number of chars (not code points) to append + * from pszAppend. Must not be more than + * @a pszAppend contains, except for the special + * value RTSTR_MAX that can be used to indicate all + * of @a pszAppend without having to strlen it. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendNTag(char **ppsz, const char *pszAppend, size_t cchAppend, const char *pszTag); + +/** + * Appends one or more strings onto an existing IPRT allocated string. + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +#define RTStrAAppendExNV(ppsz, cPairs, va) RTStrAAppendExNVTag((ppsz), (cPairs), (va), RTSTR_TAG) + +/** + * Appends one or more strings onto an existing IPRT allocated string. + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAAppendExNVTag(char **ppsz, size_t cPairs, va_list va, const char *pszTag); + +/** + * Appends one or more strings onto an existing IPRT allocated string + * (untagged). + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +DECLINLINE(int) RTStrAAppendExN(char **ppsz, size_t cPairs, ...) +{ + int rc; + va_list va; + va_start(va, cPairs); + rc = RTStrAAppendExNVTag(ppsz, cPairs, va, RTSTR_TAG); + va_end(va); + return rc; +} + +/** + * Appends one or more strings onto an existing IPRT allocated string (custom + * tag). + * + * This is a very flexible and efficient alternative to using RTStrAPrintf to + * combine several strings together. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string pointer. The string + * pointer must either be NULL or point to a string + * returned by an IPRT string API. (In/Out) + * @param pszTag Allocation tag used for statistics and such. + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. The strings will be appended to + * the string in the first argument. + */ +DECLINLINE(int) RTStrAAppendExNTag(char **ppsz, const char *pszTag, size_t cPairs, ...) +{ + int rc; + va_list va; + va_start(va, cPairs); + rc = RTStrAAppendExNVTag(ppsz, cPairs, va, pszTag); + va_end(va); + return rc; +} + +/** + * Truncates an IPRT allocated string (default tag). + * + * @retval VINF_SUCCESS. + * @retval VERR_OUT_OF_RANGE if cchNew is too long. Nothing is done. + * + * @param ppsz Pointer to the string pointer. The string + * pointer can be NULL if @a cchNew is 0, no change + * is made then. If we actually reallocate the + * string, the string pointer might be changed by + * this call. (In/Out) + * @param cchNew The new string length (excluding the + * terminator). The string must be at least this + * long or we'll return VERR_OUT_OF_RANGE and + * assert on you. + */ +#define RTStrATruncate(ppsz, cchNew) RTStrATruncateTag((ppsz), (cchNew), RTSTR_TAG) + +/** + * Truncates an IPRT allocated string. + * + * @retval VINF_SUCCESS. + * @retval VERR_OUT_OF_RANGE if cchNew is too long. Nothing is done. + * + * @param ppsz Pointer to the string pointer. The string + * pointer can be NULL if @a cchNew is 0, no change + * is made then. If we actually reallocate the + * string, the string pointer might be changed by + * this call. (In/Out) + * @param cchNew The new string length (excluding the + * terminator). The string must be at least this + * long or we'll return VERR_OUT_OF_RANGE and + * assert on you. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrATruncateTag(char **ppsz, size_t cchNew, const char *pszTag); + +/** + * Allocates memory for string storage (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated string. The first byte is always set + * to the string terminator char, the contents of the remainder of the + * memory is undefined. The string must be freed by calling RTStrFree. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_STR_MEMORY and not VERR_NO_MEMORY. Also consider + * RTStrAllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + */ +#define RTStrAlloc(cb) RTStrAllocTag((cb), RTSTR_TAG) + +/** + * Allocates memory for string storage (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated string. The first byte is always set + * to the string terminator char, the contents of the remainder of the + * memory is undefined. The string must be freed by calling RTStrFree. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_STR_MEMORY and not VERR_NO_MEMORY. Also consider + * RTStrAllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrAllocTag(size_t cb, const char *pszTag); + +/** + * Allocates memory for string storage, with status code (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY + * + * @param ppsz Where to return the allocated string. This will + * be set to NULL on failure. On success, the + * returned memory will always start with a + * terminator char so that it is considered a valid + * C string, the contents of rest of the memory is + * undefined. + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + */ +#define RTStrAllocEx(ppsz, cb) RTStrAllocExTag((ppsz), (cb), RTSTR_TAG) + +/** + * Allocates memory for string storage, with status code (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @retval VINF_SUCCESS + * @retval VERR_NO_STR_MEMORY + * + * @param ppsz Where to return the allocated string. This will + * be set to NULL on failure. On success, the + * returned memory will always start with a + * terminator char so that it is considered a valid + * C string, the contents of rest of the memory is + * undefined. + * @param cb How many bytes to allocate. If this is zero, we + * will allocate a terminator byte anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAllocExTag(char **ppsz, size_t cb, const char *pszTag); + +/** + * Reallocates the specified string (default tag). + * + * You should normally not have use this function, except perhaps to truncate a + * really long string you've got from some IPRT string API, but then you should + * use RTStrATruncate. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last byte set to the terminator + * character so that when used for string + * truncation the result will be a valid C string + * (your job to keep it a valid UTF-8 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first byte set to the terminator char + * so it will be a valid C string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTStrFree and @a *ppsz will be set to NULL. + * + * When not zero, this will be the new size of the + * memory backing the string, i.e. it includes the + * terminator char. + */ +#define RTStrRealloc(ppsz, cbNew) RTStrReallocTag((ppsz), (cbNew), RTSTR_TAG) + +/** + * Reallocates the specified string (custom tag). + * + * You should normally not have use this function, except perhaps to truncate a + * really long string you've got from some IPRT string API, but then you should + * use RTStrATruncate. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_STR_MEMORY if we failed to reallocate the string, @a *ppsz + * remains unchanged. + * + * @param ppsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last byte set to the terminator + * character so that when used for string + * truncation the result will be a valid C string + * (your job to keep it a valid UTF-8 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first byte set to the terminator char + * so it will be a valid C string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTStrFree and @a *ppsz will be set to NULL. + * + * When not zero, this will be the new size of the + * memory backing the string, i.e. it includes the + * terminator char. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrReallocTag(char **ppsz, size_t cbNew, const char *pszTag); + +/** + * Validates the UTF-8 encoding of the string. + * + * @returns iprt status code. + * @param psz The string. + */ +RTDECL(int) RTStrValidateEncoding(const char *psz); + +/** @name Flags for RTStrValidateEncodingEx and RTUtf16ValidateEncodingEx + * @{ + */ +/** Check that the string is zero terminated within the given size. + * VERR_BUFFER_OVERFLOW will be returned if the check fails. */ +#define RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED RT_BIT_32(0) +/** Check that the string is exactly the given length. + * If it terminates early, VERR_BUFFER_UNDERFLOW will be returned. When used + * together with RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED, the given length must + * include the terminator or VERR_BUFFER_OVERFLOW will be returned. */ +#define RTSTR_VALIDATE_ENCODING_EXACT_LENGTH RT_BIT_32(1) +/** @} */ + +/** + * Validates the UTF-8 encoding of the string. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length (/ size). Use RTSTR_MAX to + * process the entire string. + * @param fFlags Combination of RTSTR_VALIDATE_ENCODING_XXX flags. + */ +RTDECL(int) RTStrValidateEncodingEx(const char *psz, size_t cch, uint32_t fFlags); + +/** + * Checks if the UTF-8 encoding is valid. + * + * @returns true / false. + * @param psz The string. + */ +RTDECL(bool) RTStrIsValidEncoding(const char *psz); + +/** + * Purge all bad UTF-8 encoding in the string, replacing it with '?'. + * + * @returns The number of bad characters (0 if nothing was done). + * @param psz The string to purge. + */ +RTDECL(size_t) RTStrPurgeEncoding(char *psz); + +/** + * Sanitizes a (valid) UTF-8 string by replacing all characters outside a white + * list in-place by an ASCII replacement character. + * + * Multi-byte characters will be replaced byte by byte. + * + * @returns The number of code points replaced. In the case of an incorrectly + * encoded string -1 will be returned, and the string is not completely + * processed. In the case of puszValidPairs having an odd number of + * code points, -1 will be also return but without any modification to + * the string. + * @param psz The string to sanitise. + * @param puszValidPairs A zero-terminated array of pairs of Unicode points. + * Each pair is the start and end point of a range, + * and the union of these ranges forms the white list. + * @param chReplacement The ASCII replacement character. + */ +RTDECL(ssize_t) RTStrPurgeComplementSet(char *psz, PCRTUNICP puszValidPairs, char chReplacement); + +/** + * Gets the number of code points the string is made up of, excluding + * the terminator. + * + * + * @returns Number of code points (RTUNICP). + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrUniLen(const char *psz); + +/** + * Gets the number of code points the string is made up of, excluding + * the terminator. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the entire string. + * @param pcuc Where to store the code point count. + * This is undefined on failure. + */ +RTDECL(int) RTStrUniLenEx(const char *psz, size_t cch, size_t *pcuc); + +/** + * Translate a UTF-8 string into an unicode string (i.e. RTUNICPs), allocating the string buffer. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppUniString Receives pointer to the allocated unicode string. + * The returned string must be freed using RTUniFree(). + */ +RTDECL(int) RTStrToUni(const char *pszString, PRTUNICP *ppUniString); + +/** + * Translates pszString from UTF-8 to an array of code points, allocating the result + * array if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppaCps If cCps is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppusz is NULL or cCps is zero a buffer of at least cCps items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cCps The number of code points in the unicode string. This includes the terminator. + * @param pcCps Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +RTDECL(int) RTStrToUniEx(const char *pszString, size_t cchString, PRTUNICP *ppaCps, size_t cCps, size_t *pcCps); + +/** + * Calculates the length of the string in RTUTF16 items. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTStrToUtf16Ex of the correct size. For most + * other purposes RTStrCalcUtf16LenEx() should be used. + * + * @returns Number of RTUTF16 items. + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrCalcUtf16Len(const char *psz); + +/** + * Calculates the length of the string in RTUTF16 items. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings will be rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the entire string. + * @param pcwc Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTStrCalcUtf16LenEx(const char *psz, size_t cch, size_t *pcwc); + +/** + * Translate a UTF-8 string into a UTF-16 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. + * The returned string must be freed using RTUtf16Free(). + */ +#define RTStrToUtf16(pszString, ppwszString) RTStrToUtf16Tag((pszString), (ppwszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a UTF-16 allocating the result buffer (custom + * tag). + * + * This differs from RTStrToUtf16 in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16 string. + * The returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16Tag(const char *pszString, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translate a UTF-8 string into a UTF-16BE allocating the result buffer + * (default tag). + * + * This differs from RTStrToUtf16Tag in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16BE string. + * The returned string must be freed using RTUtf16Free(). + */ +#define RTStrToUtf16Big(pszString, ppwszString) RTStrToUtf16BigTag((pszString), (ppwszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a UTF-16BE allocating the result buffer (custom + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppwszString Receives pointer to the allocated UTF-16BE string. + * The returned string must be freed using RTUtf16Free(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16BigTag(const char *pszString, PRTUTF16 *ppwszString, const char *pszTag); + +/** + * Translates pszString from UTF-8 to UTF-16, allocating the result buffer if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToUtf16Ex(pszString, cchString, ppwsz, cwc, pcwc) \ + RTStrToUtf16ExTag((pszString), (cchString), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to UTF-16, allocating the result buffer if + * requested (custom tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16ExTag(const char *pszString, size_t cchString, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + + +/** + * Translates pszString from UTF-8 to UTF-16BE, allocating the result buffer if requested. + * + * This differs from RTStrToUtf16Ex in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToUtf16BigEx(pszString, cchString, ppwsz, cwc, pcwc) \ + RTStrToUtf16BigExTag((pszString), (cchString), (ppwsz), (cwc), (pcwc), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to UTF-16BE, allocating the result buffer if + * requested (custom tag). + * + * This differs from RTStrToUtf16ExTag in that it always produces a + * big-endian string. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. The conversion stop + * when it reaches cchString or the string terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppwsz If cwc is non-zero, this must either be pointing to pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppwsz is NULL or cwc is zero a buffer of at least cwc items + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTUtf16Free(). + * @param cwc The buffer size in RTUTF16s. This includes the terminator. + * @param pcwc Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToUtf16BigExTag(const char *pszString, size_t cchString, + PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag); + + +/** + * Calculates the length of the string in Latin-1 characters. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings as well as string with codepoints outside the latin-1 range will be + * rejected. The primary purpose of this function is to help allocate buffers + * for RTStrToLatin1Ex of the correct size. For most other purposes + * RTStrCalcLatin1LenEx() should be used. + * + * @returns Number of Latin-1 characters. + * @returns 0 if the string was incorrectly encoded. + * @param psz The string. + */ +RTDECL(size_t) RTStrCalcLatin1Len(const char *psz); + +/** + * Calculates the length of the string in Latin-1 characters. + * + * This function will validate the string, and incorrectly encoded UTF-8 + * strings as well as string with codepoints outside the latin-1 range will be + * rejected. + * + * @returns iprt status code. + * @param psz The string. + * @param cch The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length. Optional. + * This is undefined on failure. + */ +RTDECL(int) RTStrCalcLatin1LenEx(const char *psz, size_t cch, size_t *pcch); + +/** + * Translate a UTF-8 string into a Latin-1 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppszString Receives pointer to the allocated Latin-1 string. + * The returned string must be freed using RTStrFree(). + */ +#define RTStrToLatin1(pszString, ppszString) RTStrToLatin1Tag((pszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-8 string into a Latin-1 allocating the result buffer (custom + * tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param ppszString Receives pointer to the allocated Latin-1 string. + * The returned string must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToLatin1Tag(const char *pszString, char **ppszString, const char *pszTag); + +/** + * Translates pszString from UTF-8 to Latin-1, allocating the result buffer if requested. + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. + * The conversion stop when it reaches cchString or + * the string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch items will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in bytes. This includes the + * terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTStrToLatin1Ex(pszString, cchString, ppsz, cch, pcch) \ + RTStrToLatin1ExTag((pszString), (cchString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates pszString from UTF-8 to Latin1, allocating the result buffer if + * requested (custom tag). + * + * @returns iprt status code. + * @param pszString UTF-8 string to convert. + * @param cchString The maximum size in chars (the type) to convert. + * The conversion stop when it reaches cchString or + * the string terminator ('\\0'). Use RTSTR_MAX to + * translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to + * pointer to a buffer of the specified size, or + * pointer to a NULL pointer. If *ppsz is NULL or cch + * is zero a buffer of at least cch items will be + * allocated to hold the translated string. If a + * buffer was requested it must be freed using + * RTStrFree(). + * @param cch The buffer size in bytes. This includes the + * terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrToLatin1ExTag(const char *pszString, size_t cchString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param psz The string. + */ +RTDECL(RTUNICP) RTStrGetCpInternal(const char *psz); + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code + * @returns VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @param ppsz The string cursor. + * This is advanced one character forward on failure. + * @param pCp Where to store the unicode code point. + * Stores RTUNICP_INVALID if the encoding is invalid. + */ +RTDECL(int) RTStrGetCpExInternal(const char **ppsz, PRTUNICP pCp); + +/** + * Get the unicode code point at the given string position for a string of a + * given length. + * + * @returns iprt status code + * @retval VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppsz The string. + * @param pcch Pointer to the length of the string. This will be + * decremented by the size of the code point. + * @param pCp Where to store the unicode code point. + * Stores RTUNICP_INVALID if the encoding is invalid. + */ +RTDECL(int) RTStrGetCpNExInternal(const char **ppsz, size_t *pcch, PRTUNICP pCp); + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param psz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-8 range. + * + * @remark This is a worker function for RTStrPutCp(). + * + */ +RTDECL(char *) RTStrPutCpInternal(char *psz, RTUNICP CodePoint); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param psz The string. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpInternal(). + */ +DECLINLINE(RTUNICP) RTStrGetCp(const char *psz) +{ + const unsigned char uch = *(const unsigned char *)psz; + if (!(uch & RT_BIT(7))) + return uch; + return RTStrGetCpInternal(psz); +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * This is advanced one character forward on failure. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpExInternal(). + */ +DECLINLINE(int) RTStrGetCpEx(const char **ppsz, PRTUNICP pCp) +{ + const unsigned char uch = **(const unsigned char **)ppsz; + if (!(uch & RT_BIT(7))) + { + (*ppsz)++; + *pCp = uch; + return VINF_SUCCESS; + } + return RTStrGetCpExInternal(ppsz, pCp); +} + +/** + * Get the unicode code point at the given string position for a string of a + * given maximum length. + * + * @returns iprt status code. + * @retval VERR_INVALID_UTF8_ENCODING if the encoding is invalid. + * @retval VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID. + * + * @param ppsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pcch Pointer to the maximum string length. This will be + * decremented by the size of the code point found. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrGetCpNExInternal(). + */ +DECLINLINE(int) RTStrGetCpNEx(const char **ppsz, size_t *pcch, PRTUNICP pCp) +{ + if (RT_LIKELY(*pcch != 0)) + { + const unsigned char uch = **(const unsigned char **)ppsz; + if (!(uch & RT_BIT(7))) + { + (*ppsz)++; + (*pcch)--; + *pCp = uch; + return VINF_SUCCESS; + } + } + return RTStrGetCpNExInternal(ppsz, pcch, pCp); +} + +/** + * Get the UTF-8 size in characters of a given Unicode code point. + * + * The code point is expected to be a valid Unicode one, but not necessarily in + * the range supported by UTF-8. + * + * @returns The number of chars (bytes) required to encode the code point, or + * zero if there is no UTF-8 encoding. + * @param CodePoint The unicode code point. + */ +DECLINLINE(size_t) RTStrCpSize(RTUNICP CodePoint) +{ + if (CodePoint < 0x00000080) + return 1; + if (CodePoint < 0x00000800) + return 2; + if (CodePoint < 0x00010000) + return 3; +#ifdef RT_USE_RTC_3629 + if (CodePoint < 0x00011000) + return 4; +#else + if (CodePoint < 0x00200000) + return 4; + if (CodePoint < 0x04000000) + return 5; + if (CodePoint < 0x7fffffff) + return 6; +#endif + return 0; +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by psz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param psz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-8 range. + * + * @remark We optimize this operation by using an inline function for + * the most frequent and simplest sequence, the rest is + * handled by RTStrPutCpInternal(). + */ +DECLINLINE(char *) RTStrPutCp(char *psz, RTUNICP CodePoint) +{ + if (CodePoint < 0x80) + { + *psz++ = (unsigned char)CodePoint; + return psz; + } + return RTStrPutCpInternal(psz, CodePoint); +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param psz Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(char *) RTStrNextCp(const char *psz) +{ + RTUNICP Cp; + RTStrGetCpEx(&psz, &Cp); + return (char *)psz; +} + +/** + * Skips back to the previous code point. + * + * @returns Pointer to the char before the current code point. + * @returns pszStart on failure. + * @param pszStart Pointer to the start of the string. + * @param psz Pointer to the current code point. + */ +RTDECL(char *) RTStrPrevCp(const char *pszStart, const char *psz); + + +/** @page pg_rt_str_format The IPRT Format Strings + * + * IPRT implements most of the commonly used format types and flags with the + * exception of floating point which is completely missing. In addition IPRT + * provides a number of IPRT specific format types for the IPRT typedefs and + * other useful things. Note that several of these extensions are similar to + * \%p and doesn't care much if you try add formating flags/width/precision. + * + * + * Group 0a, The commonly used format types: + * - \%s - Takes a pointer to a zero terminated string (UTF-8) and + * prints it with the optionally adjustment (width, -) and + * length restriction (precision). + * - \%ls - Same as \%s except that the input is UTF-16 (output UTF-8). + * - \%Ls - Same as \%s except that the input is UCS-32 (output UTF-8). + * - \%S - Same as \%s, used to convert to current codeset but this is + * now done by the streams code. Deprecated, use \%s. + * - \%lS - Ditto. Deprecated, use \%ls. + * - \%LS - Ditto. Deprecated, use \%Ls. + * - \%c - Takes a char and prints it. + * - \%d - Takes a signed integer and prints it as decimal. Thousand + * separator (\'), zero padding (0), adjustment (-+), width, + * precision + * - \%i - Same as \%d. + * - \%u - Takes an unsigned integer and prints it as decimal. Thousand + * separator (\'), zero padding (0), adjustment (-+), width, + * precision + * - \%x - Takes an unsigned integer and prints it as lowercased + * hexadecimal. The special hash (\#) flag causes a '0x' + * prefixed to be printed. Zero padding (0), adjustment (-+), + * width, precision. + * - \%X - Same as \%x except that it is uppercased. + * - \%o - Takes an unsigned (?) integer and prints it as octal. Zero + * padding (0), adjustment (-+), width, precision. + * - \%p - Takes a pointer (void technically) and prints it. Zero + * padding (0), adjustment (-+), width, precision. + * + * The \%d, \%i, \%u, \%x, \%X and \%o format types support the following + * argument type specifiers: + * - \%ll - long long (uint64_t). + * - \%L - long long (uint64_t). + * - \%l - long (uint32_t, uint64_t) + * - \%h - short (int16_t). + * - \%hh - char (int8_t). + * - \%H - char (int8_t). + * - \%z - size_t. + * - \%j - intmax_t (int64_t). + * - \%t - ptrdiff_t. + * The type in parentheses is typical sizes, however when printing those types + * you are better off using the special group 2 format types below (\%RX32 and + * such). + * + * + * Group 0b, IPRT format tricks: + * - %M - Replaces the format string, takes a string pointer. + * - %N - Nested formatting, takes a pointer to a format string + * followed by the pointer to a va_list variable. The va_list + * variable will not be modified and the caller must do va_end() + * on it. Make sure the va_list variable is NOT in a parameter + * list or some gcc versions/targets may get it all wrong. + * + * + * Group 1, the basic runtime typedefs (excluding those which obviously are + * pointer): + * - \%RTbool - Takes a bool value and prints 'true', 'false', or '!%d!'. + * - \%RTfile - Takes a #RTFILE value. + * - \%RTfmode - Takes a #RTFMODE value. + * - \%RTfoff - Takes a #RTFOFF value. + * - \%RTfp16 - Takes a #RTFAR16 value. + * - \%RTfp32 - Takes a #RTFAR32 value. + * - \%RTfp64 - Takes a #RTFAR64 value. + * - \%RTgid - Takes a #RTGID value. + * - \%RTino - Takes a #RTINODE value. + * - \%RTint - Takes a #RTINT value. + * - \%RTiop - Takes a #RTIOPORT value. + * - \%RTldrm - Takes a #RTLDRMOD value. + * - \%RTmac - Takes a #PCRTMAC pointer. + * - \%RTnaddr - Takes a #PCRTNETADDR value. + * - \%RTnaipv4 - Takes a #RTNETADDRIPV4 value. + * - \%RTnaipv6 - Takes a #PCRTNETADDRIPV6 value. + * - \%RTnthrd - Takes a #RTNATIVETHREAD value. + * - \%RTnthrd - Takes a #RTNATIVETHREAD value. + * - \%RTproc - Takes a #RTPROCESS value. + * - \%RTptr - Takes a #RTINTPTR or #RTUINTPTR value (but not void *). + * - \%RTreg - Takes a #RTCCUINTREG value. + * - \%RTsel - Takes a #RTSEL value. + * - \%RTsem - Takes a #RTSEMEVENT, #RTSEMEVENTMULTI, #RTSEMMUTEX, #RTSEMFASTMUTEX, or #RTSEMRW value. + * - \%RTsock - Takes a #RTSOCKET value. + * - \%RTthrd - Takes a #RTTHREAD value. + * - \%RTuid - Takes a #RTUID value. + * - \%RTuint - Takes a #RTUINT value. + * - \%RTunicp - Takes a #RTUNICP value. + * - \%RTutf16 - Takes a #RTUTF16 value. + * - \%RTuuid - Takes a #PCRTUUID and will print the UUID as a string. + * - \%RTxuint - Takes a #RTUINT or #RTINT value, formatting it as hex. + * - \%RGi - Takes a #RTGCINT value. + * - \%RGp - Takes a #RTGCPHYS value. + * - \%RGr - Takes a #RTGCUINTREG value. + * - \%RGu - Takes a #RTGCUINT value. + * - \%RGv - Takes a #RTGCPTR, #RTGCINTPTR or #RTGCUINTPTR value. + * - \%RGx - Takes a #RTGCUINT or #RTGCINT value, formatting it as hex. + * - \%RHi - Takes a #RTHCINT value. + * - \%RHp - Takes a #RTHCPHYS value. + * - \%RHr - Takes a #RTHCUINTREG value. + * - \%RHu - Takes a #RTHCUINT value. + * - \%RHv - Takes a #RTHCPTR, #RTHCINTPTR or #RTHCUINTPTR value. + * - \%RHx - Takes a #RTHCUINT or #RTHCINT value, formatting it as hex. + * - \%RRv - Takes a #RTRCPTR, #RTRCINTPTR or #RTRCUINTPTR value. + * - \%RCi - Takes a #RTINT value. + * - \%RCp - Takes a #RTCCPHYS value. + * - \%RCr - Takes a #RTCCUINTREG value. + * - \%RCu - Takes a #RTUINT value. + * - \%RCv - Takes a #uintptr_t, #intptr_t, void * value. + * - \%RCx - Takes a #RTUINT or #RTINT value, formatting it as hex. + * + * + * Group 2, the generic integer types which are prefered over relying on what + * bit-count a 'long', 'short', or 'long long' has on a platform. This are + * highly prefered for the [u]intXX_t kind of types: + * - \%RI[8|16|32|64] - Signed integer value of the specifed bit count. + * - \%RU[8|16|32|64] - Unsigned integer value of the specifed bit count. + * - \%RX[8|16|32|64] - Hexadecimal integer value of the specifed bit count. + * + * + * Group 3, hex dumpers and other complex stuff which requires more than simple + * formatting: + * - \%Rhxd - Takes a pointer to the memory which is to be dumped in typical + * hex format. Use the precision to specify the length, and the width to + * set the number of bytes per line. Default width and precision is 16. + * - \%RhxD - Same as \%Rhxd, except that it skips duplicate lines. + * - \%Rhxs - Takes a pointer to the memory to be displayed as a hex string, + * i.e. a series of space separated bytes formatted as two digit hex value. + * Use the precision to specify the length. Default length is 16 bytes. + * The width, if specified, is ignored. + * - \%Rrc - Takes an integer iprt status code as argument. Will insert the + * status code define corresponding to the iprt status code. + * - \%Rrs - Takes an integer iprt status code as argument. Will insert the + * short description of the specified status code. + * - \%Rrf - Takes an integer iprt status code as argument. Will insert the + * full description of the specified status code. + * - \%Rra - Takes an integer iprt status code as argument. Will insert the + * status code define + full description. + * - \%Rwc - Takes a long Windows error code as argument. Will insert the status + * code define corresponding to the Windows error code. + * - \%Rwf - Takes a long Windows error code as argument. Will insert the + * full description of the specified status code. + * - \%Rwa - Takes a long Windows error code as argument. Will insert the + * error code define + full description. + * + * - \%Rhrc - Takes a COM/XPCOM status code as argument. Will insert the status + * code define corresponding to the Windows error code. + * - \%Rhrf - Takes a COM/XPCOM status code as argument. Will insert the + * full description of the specified status code. + * - \%Rhra - Takes a COM/XPCOM error code as argument. Will insert the + * error code define + full description. + * + * - \%Rfn - Pretty printing of a function or method. It drops the + * return code and parameter list. + * - \%Rbn - Prints the base name. For dropping the path in + * order to save space when printing a path name. + * + * - \%lRbs - Same as \%ls except inlut is big endian UTF-16. + * + * On other platforms, \%Rw? simply prints the argument in a form of 0xXXXXXXXX. + * + * + * Group 4, structure dumpers: + * - \%RDtimespec - Takes a PCRTTIMESPEC. + * + * + * Group 5, XML / HTML escapers: + * - \%RMas - Takes a string pointer (const char *) and outputs + * it as an attribute value with the proper escaping. + * This typically ends up in double quotes. + * + * - \%RMes - Takes a string pointer (const char *) and outputs + * it as an element with the necessary escaping. + * + * Group 6, CPU Architecture Register dumpers: + * - \%RAx86[reg] - Takes a 64-bit register value if the register is + * 64-bit or smaller. Check the code wrt which + * registers are implemented. + * + */ + +#ifndef DECLARED_FNRTSTROUTPUT /* duplicated in iprt/log.h */ +# define DECLARED_FNRTSTROUTPUT +/** + * Output callback. + * + * @returns number of bytes written. + * @param pvArg User argument. + * @param pachChars Pointer to an array of utf-8 characters. + * @param cbChars Number of bytes in the character array pointed to by pachChars. + */ +typedef DECLCALLBACK(size_t) FNRTSTROUTPUT(void *pvArg, const char *pachChars, size_t cbChars); +/** Pointer to callback function. */ +typedef FNRTSTROUTPUT *PFNRTSTROUTPUT; +#endif + +/** @name Format flag. + * These are used by RTStrFormat extensions and RTStrFormatNumber, mind + * that not all flags makes sense to both of the functions. + * @{ */ +#define RTSTR_F_CAPITAL 0x0001 +#define RTSTR_F_LEFT 0x0002 +#define RTSTR_F_ZEROPAD 0x0004 +#define RTSTR_F_SPECIAL 0x0008 +#define RTSTR_F_VALSIGNED 0x0010 +#define RTSTR_F_PLUS 0x0020 +#define RTSTR_F_BLANK 0x0040 +#define RTSTR_F_WIDTH 0x0080 +#define RTSTR_F_PRECISION 0x0100 +#define RTSTR_F_THOUSAND_SEP 0x0200 +#define RTSTR_F_OBFUSCATE_PTR 0x0400 + +#define RTSTR_F_BIT_MASK 0xf800 +#define RTSTR_F_8BIT 0x0800 +#define RTSTR_F_16BIT 0x1000 +#define RTSTR_F_32BIT 0x2000 +#define RTSTR_F_64BIT 0x4000 +#define RTSTR_F_128BIT 0x8000 +/** @} */ + +/** @def RTSTR_GET_BIT_FLAG + * Gets the bit flag for the specified type. + */ +#define RTSTR_GET_BIT_FLAG(type) \ + ( sizeof(type) * 8 == 32 ? RTSTR_F_32BIT \ + : sizeof(type) * 8 == 64 ? RTSTR_F_64BIT \ + : sizeof(type) * 8 == 16 ? RTSTR_F_16BIT \ + : sizeof(type) * 8 == 8 ? RTSTR_F_8BIT \ + : sizeof(type) * 8 == 128 ? RTSTR_F_128BIT \ + : 0) + + +/** + * Callback to format non-standard format specifiers. + * + * @returns The number of bytes formatted. + * @param pvArg Formatter argument. + * @param pfnOutput Pointer to output function. + * @param pvArgOutput Argument for the output function. + * @param ppszFormat Pointer to the format string pointer. Advance this till the char + * after the format specifier. + * @param pArgs Pointer to the argument list. Use this to fetch the arguments. + * @param cchWidth Format Width. -1 if not specified. + * @param cchPrecision Format Precision. -1 if not specified. + * @param fFlags Flags (RTSTR_NTFS_*). + * @param chArgSize The argument size specifier, 'l' or 'L'. + */ +typedef DECLCALLBACK(size_t) FNSTRFORMAT(void *pvArg, PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char **ppszFormat, va_list *pArgs, int cchWidth, + int cchPrecision, unsigned fFlags, char chArgSize); +/** Pointer to a FNSTRFORMAT() function. */ +typedef FNSTRFORMAT *PFNSTRFORMAT; + + +/** + * Partial implementation of a printf like formatter. + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string and its length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param InArgs Argument list. + */ +RTDECL(size_t) RTStrFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, + const char *pszFormat, va_list InArgs) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * Partial implementation of a printf like formatter. + * + * It doesn't do everything correct, and there is no floating point support. + * However, it supports custom formats by the means of a format callback. + * + * @returns number of bytes formatted. + * @param pfnOutput Output worker. + * Called in two ways. Normally with a string and its length. + * For termination, it's called with NULL for string, 0 for length. + * @param pvArgOutput Argument to the output worker. + * @param pfnFormat Custom format worker. + * @param pvArgFormat Argument to the format worker. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... Argument list. + */ +RTDECL(size_t) RTStrFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRFORMAT pfnFormat, void *pvArgFormat, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Formats an integer number according to the parameters. + * + * @returns Length of the formatted number. + * @param psz Pointer to output string buffer of sufficient size. + * @param u64Value Value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(int) RTStrFormatNumber(char *psz, uint64_t u64Value, unsigned int uiBase, signed int cchWidth, signed int cchPrecision, + unsigned int fFlags); + +/** + * Formats an unsigned 8-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u8Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU8(char *pszBuf, size_t cbBuf, uint8_t u8Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 16-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u16Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU16(char *pszBuf, size_t cbBuf, uint16_t u16Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 32-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u32Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU32(char *pszBuf, size_t cbBuf, uint32_t u32Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 64-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param u64Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatU64(char *pszBuf, size_t cbBuf, uint64_t u64Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 128-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu128Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU128(char *pszBuf, size_t cbBuf, PCRTUINT128U pu128Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 256-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu256Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU256(char *pszBuf, size_t cbBuf, PCRTUINT256U pu256Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an unsigned 512-bit number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pu512Value The value to format. + * @param uiBase Number representation base. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + * @remarks The current implementation is limited to base 16 and doesn't do + * width or precision and probably ignores few flags too. + */ +RTDECL(ssize_t) RTStrFormatU512(char *pszBuf, size_t cbBuf, PCRTUINT512U pu512Value, unsigned int uiBase, + signed int cchWidth, signed int cchPrecision, uint32_t fFlags); + + +/** + * Formats an 80-bit extended floating point number. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pr80Value The value to format. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatR80(char *pszBuf, size_t cbBuf, PCRTFLOAT80U pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags); + +/** + * Formats an 80-bit extended floating point number, version 2. + * + * @returns The length of the formatted number or VERR_BUFFER_OVERFLOW. + * @param pszBuf The output buffer. + * @param cbBuf The size of the output buffer. + * @param pr80Value The value to format. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags, RTSTR_F_XXX. + */ +RTDECL(ssize_t) RTStrFormatR80u2(char *pszBuf, size_t cbBuf, PCRTFLOAT80U2 pr80Value, signed int cchWidth, + signed int cchPrecision, uint32_t fFlags); + + + +/** + * Callback for formatting a type. + * + * This is registered using the RTStrFormatTypeRegister function and will + * be called during string formatting to handle the specified %R[type]. + * The argument for this format type is assumed to be a pointer and it's + * passed in the @a pvValue argument. + * + * @returns Length of the formatted output. + * @param pfnOutput Output worker. + * @param pvArgOutput Argument to the output worker. + * @param pszType The type name. + * @param pvValue The argument value. + * @param cchWidth Width. + * @param cchPrecision Precision. + * @param fFlags Flags (NTFS_*). + * @param pvUser The user argument. + */ +typedef DECLCALLBACK(size_t) FNRTSTRFORMATTYPE(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, + const char *pszType, void const *pvValue, + int cchWidth, int cchPrecision, unsigned fFlags, + void *pvUser); +/** Pointer to a FNRTSTRFORMATTYPE. */ +typedef FNRTSTRFORMATTYPE *PFNRTSTRFORMATTYPE; + + +/** + * Register a format handler for a type. + * + * The format handler is used to handle '%R[type]' format types, where the argument + * in the vector is a pointer value (a bit restrictive, but keeps it simple). + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_ALREADY_EXISTS if the type has already been registered. + * @retval VERR_TOO_MANY_OPEN_FILES if all the type slots has been allocated already. + * + * @param pszType The type name. + * @param pfnHandler The handler address. See FNRTSTRFORMATTYPE for details. + * @param pvUser The user argument to pass to the handler. See RTStrFormatTypeSetUser + * for how to update this later. + */ +RTDECL(int) RTStrFormatTypeRegister(const char *pszType, PFNRTSTRFORMATTYPE pfnHandler, void *pvUser); + +/** + * Deregisters a format type. + * + * The caller must ensure that no other thread will be making use of any of + * the dynamic formatting type facilities simultaneously with this call. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to deregister. + */ +RTDECL(int) RTStrFormatTypeDeregister(const char *pszType); + +/** + * Sets the user argument for a type. + * + * This can be used if a user argument needs relocating in GC. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS on success. + * @retval VERR_FILE_NOT_FOUND if not found. + * + * @param pszType The type to update. + * @param pvUser The new user argument value. + */ +RTDECL(int) RTStrFormatTypeSetUser(const char *pszType, void *pvUser); + + +/** + * String printf. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * + * @deprecated Use RTStrPrintf2V! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfV(char *pszBuffer, size_t cchBuffer, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * String printf. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + * + * @deprecated Use RTStrPrintf2! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintf(char *pszBuffer, size_t cchBuffer, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * String printf with custom formatting. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * + * @deprecated Use RTStrPrintf2ExV! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfExV(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * String printf with custom formatting. + * + * @returns The length of the returned string (in pszBuffer) excluding the + * terminator. + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cchBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + * + * @deprecated Use RTStrPrintf2Ex! Problematic return value on overflow. + */ +RTDECL(size_t) RTStrPrintfEx(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cchBuffer, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * String printf, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2V(char *pszBuffer, size_t cbBuffer, const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(3, 0); + +/** + * String printf, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2(char *pszBuffer, size_t cbBuffer, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4); + +/** + * String printf with custom formatting, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2ExV(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cbBuffer, + const char *pszFormat, va_list args) RT_IPRT_FORMAT_ATTR(5, 0); + +/** + * String printf with custom formatting, version 2. + * + * @returns On success, positive count of formatted character excluding the + * terminator. On buffer overflow, negative number giving the required + * buffer size (including terminator char). + * + * @param pfnFormat Pointer to handler function for the custom formats. + * @param pvArg Argument to the pfnFormat function. + * @param pszBuffer Output buffer. + * @param cbBuffer Size of the output buffer. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +RTDECL(ssize_t) RTStrPrintf2Ex(PFNSTRFORMAT pfnFormat, void *pvArg, char *pszBuffer, size_t cbBuffer, + const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(5, 6); + +/** + * Allocating string printf (default tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +#define RTStrAPrintfV(ppszBuffer, pszFormat, args) RTStrAPrintfVTag((ppszBuffer), (pszFormat), (args), RTSTR_TAG) + +/** + * Allocating string printf (custom tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTStrAPrintfVTag(char **ppszBuffer, const char *pszFormat, va_list args, const char *pszTag) RT_IPRT_FORMAT_ATTR(2, 0); + +/** + * Allocating string printf. + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(int) RT_IPRT_FORMAT_ATTR(2, 3) RTStrAPrintf(char **ppszBuffer, const char *pszFormat, ...) +{ + int cbRet; + va_list va; + va_start(va, pszFormat); + cbRet = RTStrAPrintfVTag(ppszBuffer, pszFormat, va, RTSTR_TAG); + va_end(va); + return cbRet; +} + +/** + * Allocating string printf (custom tag). + * + * @returns The length of the string in the returned *ppszBuffer excluding the + * terminator. + * @returns -1 on failure. + * @param ppszBuffer Where to store the pointer to the allocated output buffer. + * The buffer should be freed using RTStrFree(). + * On failure *ppszBuffer will be set to NULL. + * @param pszTag Allocation tag used for statistics and such. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(int) RT_IPRT_FORMAT_ATTR(3, 4) RTStrAPrintfTag(char **ppszBuffer, const char *pszTag, const char *pszFormat, ...) +{ + int cbRet; + va_list va; + va_start(va, pszFormat); + cbRet = RTStrAPrintfVTag(ppszBuffer, pszFormat, va, pszTag); + va_end(va); + return cbRet; +} + +/** + * Allocating string printf, version 2. + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + */ +#define RTStrAPrintf2V(pszFormat, args) RTStrAPrintf2VTag((pszFormat), (args), RTSTR_TAG) + +/** + * Allocating string printf, version 2. + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param args The format argument. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(char *) RTStrAPrintf2VTag(const char *pszFormat, va_list args, const char *pszTag) RT_IPRT_FORMAT_ATTR(1, 0); + +/** + * Allocating string printf, version 2 (default tag). + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(char *) RT_IPRT_FORMAT_ATTR(1, 2) RTStrAPrintf2(const char *pszFormat, ...) +{ + char *pszRet; + va_list va; + va_start(va, pszFormat); + pszRet = RTStrAPrintf2VTag(pszFormat, va, RTSTR_TAG); + va_end(va); + return pszRet; +} + +/** + * Allocating string printf, version 2 (custom tag). + * + * @returns Formatted string. Use RTStrFree() to free it. NULL when out of + * memory. + * @param pszTag Allocation tag used for statistics and such. + * @param pszFormat Pointer to the format string, @see pg_rt_str_format. + * @param ... The format argument. + */ +DECLINLINE(char *) RT_IPRT_FORMAT_ATTR(2, 3) RTStrAPrintf2Tag(const char *pszTag, const char *pszFormat, ...) +{ + char *pszRet; + va_list va; + va_start(va, pszFormat); + pszRet = RTStrAPrintf2VTag(pszFormat, va, pszTag); + va_end(va); + return pszRet; +} + +/** + * Strips blankspaces from both ends of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStrip(char *psz); + +/** + * Strips blankspaces from the start of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStripL(const char *psz); + +/** + * Strips blankspaces from the end of the string. + * + * @returns psz. + * @param psz The string to strip. + */ +RTDECL(char *) RTStrStripR(char *psz); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCopy(char *pszDst, size_t cbDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCopyEx(char *pszDst, size_t cbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String copy with overflow handling and buffer advancing. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCopyP(char **ppszDst, size_t *pcbDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCopyPEx(char **ppszDst, size_t *pcbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCat(char *pszDst, size_t cbDst, const char *pszSrc); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pszDst The destination buffer. + * @param cbDst The size of the destination buffer (in bytes). + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCatEx(char *pszDst, size_t cbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTStrCatP(char **ppszDst, size_t *pcbDst, const char *pszSrc); + +/** + * String concatenation with overflow handling and buffer advancing. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param ppszDst Pointer to the destination buffer pointer. + * This will be advanced to the end of the copied + * bytes (points at the terminator). This is also + * updated on overflow. + * @param pcbDst Pointer to the destination buffer size + * variable. This will be updated in accord with + * the buffer pointer. + * @param pszSrc The source string. NULL is not OK. + * @param cchSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTStrCatPEx(char **ppszDst, size_t *pcbDst, const char *pszSrc, size_t cchSrcMax); + +/** + * Performs a case sensitive string compare between two UTF-8 strings. + * + * Encoding errors are ignored by the current implementation. So, the only + * difference between this and the CRT strcmp function is the handling of + * NULL arguments. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + */ +RTDECL(int) RTStrCmp(const char *psz1, const char *psz2); + +/** + * Performs a case sensitive string compare between two UTF-8 strings, given + * a maximum string length. + * + * Encoding errors are ignored by the current implementation. So, the only + * difference between this and the CRT strncmp function is the handling of + * NULL arguments. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + * @param cchMax The maximum string length + */ +RTDECL(int) RTStrNCmp(const char *psz1, const char *psz2, size_t cchMax); + +/** + * Performs a case insensitive string compare between two UTF-8 strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * The result is the difference between the mismatching codepoints after they + * both have been lower cased. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + */ +RTDECL(int) RTStrICmp(const char *psz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-8 strings, given a + * maximum string length. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * The result is the difference between the mismatching codepoints after they + * both have been lower cased. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second UTF-8 string. Null is allowed. + * @param cchMax Maximum string length + */ +RTDECL(int) RTStrNICmp(const char *psz1, const char *psz2, size_t cchMax); + +/** + * Performs a case insensitive string compare between a UTF-8 string and a 7-bit + * ASCII string. + * + * This is potentially faster than RTStrICmp and drags in less dependencies. It + * is really handy for hardcoded inputs. + * + * If the string encoding is invalid the function will assert (strict builds) + * and use RTStrCmp for the remainder of the string. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param psz1 First UTF-8 string. Null is allowed. + * @param psz2 Second string, 7-bit ASCII. Null is allowed. + * @sa RTUtf16ICmpAscii + */ +RTDECL(int) RTStrICmpAscii(const char *psz1, const char *psz2); + +/** + * Checks whether @a pszString starts with @a pszStart. + * + * @returns true / false. + * @param pszString The string to check. + * @param pszStart The start string to check for. + */ +RTDECL(int) RTStrStartsWith(const char *pszString, const char *pszStart); + +/** + * Checks whether @a pszString starts with @a pszStart, case insensitive. + * + * @returns true / false. + * @param pszString The string to check. + * @param pszStart The start string to check for. + */ +RTDECL(int) RTStrIStartsWith(const char *pszString, const char *pszStart); + +/** + * Locates a case sensitive substring. + * + * If any of the two strings are NULL, then NULL is returned. If the needle is + * an empty string, then the haystack is returned (i.e. matches anything). + * + * @returns Pointer to the first occurrence of the substring if found, NULL if + * not. + * + * @param pszHaystack The string to search. + * @param pszNeedle The substring to search for. + * + * @remarks The difference between this and strstr is the handling of NULL + * pointers. + */ +RTDECL(char *) RTStrStr(const char *pszHaystack, const char *pszNeedle); + +/** + * Locates a case insensitive substring. + * + * If any of the two strings are NULL, then NULL is returned. If the needle is + * an empty string, then the haystack is returned (i.e. matches anything). + * + * @returns Pointer to the first occurrence of the substring if found, NULL if + * not. + * + * @param pszHaystack The string to search. + * @param pszNeedle The substring to search for. + * + */ +RTDECL(char *) RTStrIStr(const char *pszHaystack, const char *pszNeedle); + +/** + * Converts the string to lower case. + * + * @returns Pointer to the converted string. + * @param psz The string to convert. + */ +RTDECL(char *) RTStrToLower(char *psz); + +/** + * Converts the string to upper case. + * + * @returns Pointer to the converted string. + * @param psz The string to convert. + */ +RTDECL(char *) RTStrToUpper(char *psz); + +/** + * Checks if the string is case foldable, i.e. whether it would change if + * subject to RTStrToLower or RTStrToUpper. + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsCaseFoldable(const char *psz); + +/** + * Checks if the string is upper cased (no lower case chars in it). + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsUpperCased(const char *psz); + +/** + * Checks if the string is lower cased (no upper case chars in it). + * + * @returns true / false + * @param psz The string in question. + */ +RTDECL(bool) RTStrIsLowerCased(const char *psz); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * See also RTStrNLenEx. + * + * @returns The string length or cbMax. The returned length does not include + * the zero terminator if it was found. + * + * @param pszString The string. + * @param cchMax The max string length. + */ +RTDECL(size_t) RTStrNLen(const char *pszString, size_t cchMax); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * See also RTStrNLen. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the string has a length less than cchMax. + * @retval VERR_BUFFER_OVERFLOW if the end of the string wasn't found + * before cchMax was reached. + * + * @param pszString The string. + * @param cchMax The max string length. + * @param pcch Where to store the string length excluding the + * terminator. This is set to cchMax if the terminator + * isn't found. + */ +RTDECL(int) RTStrNLenEx(const char *pszString, size_t cchMax, size_t *pcch); + +RT_C_DECLS_END + +/** The maximum size argument of a memchr call. */ +#define RTSTR_MEMCHR_MAX ((~(size_t)0 >> 1) - 15) + +/** + * Find the zero terminator in a string with a limited length. + * + * @returns Pointer to the zero terminator. + * @returns NULL if the zero terminator was not found. + * + * @param pszString The string. + * @param cchMax The max string length. RTSTR_MAX is fine. + */ +#if defined(__cplusplus) && !defined(DOXYGEN_RUNNING) +DECLINLINE(char const *) RTStrEnd(char const *pszString, size_t cchMax) +{ + /* Avoid potential issues with memchr seen in glibc. + * See sysdeps/x86_64/memchr.S in glibc versions older than 2.11 */ + while (cchMax > RTSTR_MEMCHR_MAX) + { + char const *pszRet = (char const *)memchr(pszString, '\0', RTSTR_MEMCHR_MAX); + if (RT_LIKELY(pszRet)) + return pszRet; + pszString += RTSTR_MEMCHR_MAX; + cchMax -= RTSTR_MEMCHR_MAX; + } + return (char const *)memchr(pszString, '\0', cchMax); +} + +DECLINLINE(char *) RTStrEnd(char *pszString, size_t cchMax) +#else +DECLINLINE(char *) RTStrEnd(const char *pszString, size_t cchMax) +#endif +{ + /* Avoid potential issues with memchr seen in glibc. + * See sysdeps/x86_64/memchr.S in glibc versions older than 2.11 */ + while (cchMax > RTSTR_MEMCHR_MAX) + { + char *pszRet = (char *)memchr(pszString, '\0', RTSTR_MEMCHR_MAX); + if (RT_LIKELY(pszRet)) + return pszRet; + pszString += RTSTR_MEMCHR_MAX; + cchMax -= RTSTR_MEMCHR_MAX; + } + return (char *)memchr(pszString, '\0', cchMax); +} + +RT_C_DECLS_BEGIN + +/** + * Finds the offset at which a simple character first occurs in a string. + * + * @returns The offset of the first occurence or the terminator offset. + * @param pszHaystack The string to search. + * @param chNeedle The character to search for. + */ +DECLINLINE(size_t) RTStrOffCharOrTerm(const char *pszHaystack, char chNeedle) +{ + const char *psz = pszHaystack; + char ch; + while ( (ch = *psz) != chNeedle + && ch != '\0') + psz++; + return psz - pszHaystack; +} + + +/** + * Matches a simple string pattern. + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPattern The pattern. Special chars are '*' and '?', where the + * asterisk matches zero or more characters and question + * mark matches exactly one character. + * @param pszString The string to match against the pattern. + */ +RTDECL(bool) RTStrSimplePatternMatch(const char *pszPattern, const char *pszString); + +/** + * Matches a simple string pattern, neither which needs to be zero terminated. + * + * This is identical to RTStrSimplePatternMatch except that you can optionally + * specify the length of both the pattern and the string. The function will + * stop when it hits a string terminator or either of the lengths. + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPattern The pattern. Special chars are '*' and '?', where the + * asterisk matches zero or more characters and question + * mark matches exactly one character. + * @param cchPattern The pattern length. Pass RTSTR_MAX if you don't know the + * length and wish to stop at the string terminator. + * @param pszString The string to match against the pattern. + * @param cchString The string length. Pass RTSTR_MAX if you don't know the + * length and wish to match up to the string terminator. + */ +RTDECL(bool) RTStrSimplePatternNMatch(const char *pszPattern, size_t cchPattern, + const char *pszString, size_t cchString); + +/** + * Matches multiple patterns against a string. + * + * The patterns are separated by the pipe character (|). + * + * @returns true if the string matches the pattern, otherwise false. + * + * @param pszPatterns The patterns. + * @param cchPatterns The lengths of the patterns to use. Pass RTSTR_MAX to + * stop at the terminator. + * @param pszString The string to match against the pattern. + * @param cchString The string length. Pass RTSTR_MAX stop stop at the + * terminator. + * @param poffPattern Offset into the patterns string of the patttern that + * matched. If no match, this will be set to RTSTR_MAX. + * This is optional, NULL is fine. + */ +RTDECL(bool) RTStrSimplePatternMultiMatch(const char *pszPatterns, size_t cchPatterns, + const char *pszString, size_t cchString, + size_t *poffPattern); + +/** + * Compares two version strings RTStrICmp fashion. + * + * The version string is split up into sections at punctuation, spaces, + * underscores, dashes and plus signs. The sections are then split up into + * numeric and string sub-sections. Finally, the sub-sections are compared + * in a numeric or case insesntivie fashion depending on what they are. + * + * The following strings are considered to be equal: "1.0.0", "1.00.0", "1.0", + * "1". These aren't: "1.0.0r993", "1.0", "1.0r993", "1.0_Beta3", "1.1" + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * + * @param pszVer1 First version string to compare. + * @param pszVer2 Second version string to compare first version with. + */ +RTDECL(int) RTStrVersionCompare(const char *pszVer1, const char *pszVer2); + + +/** @defgroup rt_str_conv String To/From Number Conversions + * @{ */ + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint64_t *pu64); + +/** + * Converts a string representation of a number to a 64-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt64Full(const char *pszValue, unsigned uBase, uint64_t *pu64); + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 64-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint64_t) RTStrToUInt64(const char *pszValue); + +/** + * Converts a string representation of a number to a 32-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint32_t *pu32); + +/** + * Converts a string representation of a number to a 32-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt32Full(const char *pszValue, unsigned uBase, uint32_t *pu32); + +/** + * Converts a string representation of a number to a 64-bit unsigned number. + * The base is guessed. + * + * @returns 32-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint32_t) RTStrToUInt32(const char *pszValue); + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint16_t *pu16); + +/** + * Converts a string representation of a number to a 16-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt16Full(const char *pszValue, unsigned uBase, uint16_t *pu16); + +/** + * Converts a string representation of a number to a 16-bit unsigned number. + * The base is guessed. + * + * @returns 16-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint16_t) RTStrToUInt16(const char *pszValue); + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, uint8_t *pu8); + +/** + * Converts a string representation of a number to a 8-bit unsigned number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_NEGATIVE_UNSIGNED + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * @retval VERR_TRAILING_SPACES + * @retval VERR_TRAILING_CHARS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pu8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToUInt8Full(const char *pszValue, unsigned uBase, uint8_t *pu8); + +/** + * Converts a string representation of a number to a 8-bit unsigned number. + * The base is guessed. + * + * @returns 8-bit unsigned number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(uint8_t) RTStrToUInt8(const char *pszValue); + +/** + * Converts a string representation of a number to a 64-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Ex(const char *pszValue, char **ppszNext, unsigned uBase, int64_t *pi64); + +/** + * Converts a string representation of a number to a 64-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi64 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt64Full(const char *pszValue, unsigned uBase, int64_t *pi64); + +/** + * Converts a string representation of a number to a 64-bit signed number. + * The base is guessed. + * + * @returns 64-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int64_t) RTStrToInt64(const char *pszValue); + +/** + * Converts a string representation of a number to a 32-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Ex(const char *pszValue, char **ppszNext, unsigned uBase, int32_t *pi32); + +/** + * Converts a string representation of a number to a 32-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi32 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt32Full(const char *pszValue, unsigned uBase, int32_t *pi32); + +/** + * Converts a string representation of a number to a 32-bit signed number. + * The base is guessed. + * + * @returns 32-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int32_t) RTStrToInt32(const char *pszValue); + +/** + * Converts a string representation of a number to a 16-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Ex(const char *pszValue, char **ppszNext, unsigned uBase, int16_t *pi16); + +/** + * Converts a string representation of a number to a 16-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi16 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt16Full(const char *pszValue, unsigned uBase, int16_t *pi16); + +/** + * Converts a string representation of a number to a 16-bit signed number. + * The base is guessed. + * + * @returns 16-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int16_t) RTStrToInt16(const char *pszValue); + +/** + * Converts a string representation of a number to a 8-bit signed number. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * @retval VINF_SUCCESS + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param ppszNext Where to store the pointer to the first char following the number. (Optional) + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Ex(const char *pszValue, char **ppszNext, unsigned uBase, int8_t *pi8); + +/** + * Converts a string representation of a number to a 8-bit signed number, + * making sure the full string is converted. + * + * @returns iprt status code. + * Warnings are used to indicate conversion problems. + * @retval VWRN_NUMBER_TOO_BIG + * @retval VINF_SUCCESS + * @retval VERR_TRAILING_CHARS + * @retval VERR_TRAILING_SPACES + * @retval VERR_NO_DIGITS + * + * @param pszValue Pointer to the string value. + * @param uBase The base of the representation used. + * If 0 the function will look for known prefixes before defaulting to 10. + * @param pi8 Where to store the converted number. (optional) + */ +RTDECL(int) RTStrToInt8Full(const char *pszValue, unsigned uBase, int8_t *pi8); + +/** + * Converts a string representation of a number to a 8-bit signed number. + * The base is guessed. + * + * @returns 8-bit signed number on success. + * @returns 0 on failure. + * @param pszValue Pointer to the string value. + */ +RTDECL(int8_t) RTStrToInt8(const char *pszValue); + +/** + * Formats a buffer stream as hex bytes. + * + * The default is no separating spaces or line breaks or anything. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes. + * + * @param pszBuf Output string buffer. + * @param cbBuf The size of the output buffer. + * @param pv Pointer to the bytes to stringify. + * @param cb The number of bytes to stringify. + * @param fFlags Combination of RTSTRPRINTHEXBYTES_F_XXX values. + * @sa RTUtf16PrintHexBytes. + */ +RTDECL(int) RTStrPrintHexBytes(char *pszBuf, size_t cbBuf, void const *pv, size_t cb, uint32_t fFlags); +/** @name RTSTRPRINTHEXBYTES_F_XXX - flags for RTStrPrintHexBytes and RTUtf16PritnHexBytes. + * @{ */ +/** Upper case hex digits, the default is lower case. */ +#define RTSTRPRINTHEXBYTES_F_UPPER RT_BIT(0) +/** Add a space between each group. */ +#define RTSTRPRINTHEXBYTES_F_SEP_SPACE RT_BIT(1) +/** Add a colon between each group. */ +#define RTSTRPRINTHEXBYTES_F_SEP_COLON RT_BIT(2) +/** @} */ + +/** + * Converts a string of hex bytes back into binary data. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the string contains too many hex bytes. + * @retval VERR_BUFFER_UNDERFLOW if there aren't enough hex bytes to fill up + * the output buffer. + * @retval VERR_UNEVEN_INPUT if the input contains a half byte. + * @retval VERR_NO_DIGITS + * @retval VWRN_TRAILING_CHARS + * @retval VWRN_TRAILING_SPACES + * + * @param pszHex The string containing the hex bytes. + * @param pv Output buffer. + * @param cb The size of the output buffer. + * @param fFlags Must be zero, reserved for future use. + */ +RTDECL(int) RTStrConvertHexBytes(char const *pszHex, void *pv, size_t cb, uint32_t fFlags); + +/** @} */ + + +/** @defgroup rt_str_space Unique String Space + * @{ + */ + +/** Pointer to a string name space container node core. */ +typedef struct RTSTRSPACECORE *PRTSTRSPACECORE; +/** Pointer to a pointer to a string name space container node core. */ +typedef PRTSTRSPACECORE *PPRTSTRSPACECORE; + +/** + * String name space container node core. + */ +typedef struct RTSTRSPACECORE +{ + /** Hash key. Don't touch. */ + uint32_t Key; + /** Pointer to the left leaf node. Don't touch. */ + PRTSTRSPACECORE pLeft; + /** Pointer to the left right node. Don't touch. */ + PRTSTRSPACECORE pRight; + /** Pointer to the list of string with the same key. Don't touch. */ + PRTSTRSPACECORE pList; + /** Height of this tree: max(heigth(left), heigth(right)) + 1. Don't touch */ + unsigned char uchHeight; + /** The string length. Read only! */ + size_t cchString; + /** Pointer to the string. Read only! */ + const char *pszString; +} RTSTRSPACECORE; + +/** String space. (Initialize with NULL.) */ +typedef PRTSTRSPACECORE RTSTRSPACE; +/** Pointer to a string space. */ +typedef PPRTSTRSPACECORE PRTSTRSPACE; + + +/** + * Inserts a string into a unique string space. + * + * @returns true on success. + * @returns false if the string collided with an existing string. + * @param pStrSpace The space to insert it into. + * @param pStr The string node. + */ +RTDECL(bool) RTStrSpaceInsert(PRTSTRSPACE pStrSpace, PRTSTRSPACECORE pStr); + +/** + * Removes a string from a unique string space. + * + * @returns Pointer to the removed string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to remove it from. + * @param pszString The string to remove. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceRemove(PRTSTRSPACE pStrSpace, const char *pszString); + +/** + * Gets a string from a unique string space. + * + * @returns Pointer to the string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to get it from. + * @param pszString The string to get. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceGet(PRTSTRSPACE pStrSpace, const char *pszString); + +/** + * Gets a string from a unique string space. + * + * @returns Pointer to the string node. + * @returns NULL if the string was not found in the string space. + * @param pStrSpace The space to get it from. + * @param pszString The string to get. + * @param cchMax The max string length to evaluate. Passing + * RTSTR_MAX is ok and makes it behave just like + * RTStrSpaceGet. + */ +RTDECL(PRTSTRSPACECORE) RTStrSpaceGetN(PRTSTRSPACE pStrSpace, const char *pszString, size_t cchMax); + +/** + * Callback function for RTStrSpaceEnumerate() and RTStrSpaceDestroy(). + * + * @returns 0 on continue. + * @returns Non-zero to aborts the operation. + * @param pStr The string node + * @param pvUser The user specified argument. + */ +typedef DECLCALLBACK(int) FNRTSTRSPACECALLBACK(PRTSTRSPACECORE pStr, void *pvUser); +/** Pointer to callback function for RTStrSpaceEnumerate() and RTStrSpaceDestroy(). */ +typedef FNRTSTRSPACECALLBACK *PFNRTSTRSPACECALLBACK; + +/** + * Destroys the string space. + * + * The caller supplies a callback which will be called for each of the string + * nodes in for freeing their memory and other resources. + * + * @returns 0 or what ever non-zero return value pfnCallback returned + * when aborting the destruction. + * @param pStrSpace The space to destroy. + * @param pfnCallback The callback. + * @param pvUser The user argument. + */ +RTDECL(int) RTStrSpaceDestroy(PRTSTRSPACE pStrSpace, PFNRTSTRSPACECALLBACK pfnCallback, void *pvUser); + +/** + * Enumerates the string space. + * The caller supplies a callback which will be called for each of + * the string nodes. + * + * @returns 0 or what ever non-zero return value pfnCallback returned + * when aborting the destruction. + * @param pStrSpace The space to enumerate. + * @param pfnCallback The callback. + * @param pvUser The user argument. + */ +RTDECL(int) RTStrSpaceEnumerate(PRTSTRSPACE pStrSpace, PFNRTSTRSPACECALLBACK pfnCallback, void *pvUser); + +/** @} */ + + +/** @defgroup rt_str_hash Sting hashing + * @{ */ + +/** + * Hashes the given string using algorithm \#1. + * + * @returns String hash. + * @param pszString The string to hash. + */ +RTDECL(uint32_t) RTStrHash1(const char *pszString); + +/** + * Hashes the given string using algorithm \#1. + * + * @returns String hash. + * @param pszString The string to hash. + * @param cchString The max length to hash. Hashing will stop if the + * terminator character is encountered first. Passing + * RTSTR_MAX is fine. + */ +RTDECL(uint32_t) RTStrHash1N(const char *pszString, size_t cchString); + +/** + * Hashes the given strings as if they were concatenated using algorithm \#1. + * + * @returns String hash. + * @param cPairs The number of string / length pairs in the + * ellipsis. + * @param ... List of string (const char *) and length + * (size_t) pairs. Passing RTSTR_MAX as the size is + * fine. + */ +RTDECL(uint32_t) RTStrHash1ExN(size_t cPairs, ...); + +/** + * Hashes the given strings as if they were concatenated using algorithm \#1. + * + * @returns String hash. + * @param cPairs The number of string / length pairs in the @a va. + * @param va List of string (const char *) and length + * (size_t) pairs. Passing RTSTR_MAX as the size is + * fine. + */ +RTDECL(uint32_t) RTStrHash1ExNV(size_t cPairs, va_list va); + +/** @} */ + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/time.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/time.h @@ -0,0 +1,1110 @@ +/** @file + * IPRT - Time. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_time_h +#define ___iprt_time_h + +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_time RTTime - Time + * @ingroup grp_rt + * @{ + */ + +/** Time Specification. + * + * Use the inline RTTimeSpecGet/Set to operate on structure this so we + * can easily change the representation if required later. + * + * The current representation is in nanoseconds relative to the unix epoch + * (1970-01-01 00:00:00 UTC). This gives us an approximate span from + * 1678 to 2262 without sacrificing the resolution offered by the various + * host OSes (BSD & LINUX 1ns, NT 100ns). + */ +typedef struct RTTIMESPEC +{ + /** Nanoseconds since epoch. + * The name is intentially too long to be comfortable to use because you should be + * using inline helpers! */ + int64_t i64NanosecondsRelativeToUnixEpoch; +} RTTIMESPEC; + + +/** @name RTTIMESPEC methods + * @{ */ + +/** + * Gets the time as nanoseconds relative to the unix epoch. + * + * @returns Nanoseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetNano(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch; +} + + +/** + * Sets the time give by nanoseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The new time in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Nano; + return pTime; +} + + +/** + * Gets the time as microseconds relative to the unix epoch. + * + * @returns microseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetMicro(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1US; +} + + +/** + * Sets the time given by microseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The new time in microsecond. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Gets the time as milliseconds relative to the unix epoch. + * + * @returns milliseconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetMilli(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1MS; +} + + +/** + * Sets the time given by milliseconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The new time in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Gets the time as seconds relative to the unix epoch. + * + * @returns seconds relative to unix epoch. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetSeconds(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / RT_NS_1SEC; +} + + +/** + * Sets the time given by seconds relative to the unix epoch. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The new time in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Makes the time spec absolute like abs() does (i.e. a positive value). + * + * @returns pTime. + * @param pTime The time spec to modify. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAbsolute(PRTTIMESPEC pTime) +{ + if (pTime->i64NanosecondsRelativeToUnixEpoch < 0) + pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Negates the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecNegate(PRTTIMESPEC pTime) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = -pTime->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Adds a time period to the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeAdd The time spec to add to pTime. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAdd(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeAdd) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += pTimeAdd->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Adds a time period give as nanoseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The time period in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Nano; + return pTime; +} + + +/** + * Adds a time period give as microseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The time period in microseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Adds a time period give as milliseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The time period in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Adds a time period give as seconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The time period in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecAddSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch += i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Subtracts a time period from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeSub The time spec to subtract from pTime. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSub(PRTTIMESPEC pTime, PCRTTIMESPEC pTimeSub) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= pTimeSub->i64NanosecondsRelativeToUnixEpoch; + return pTime; +} + + +/** + * Subtracts a time period give as nanoseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Nano The time period in nanoseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubNano(PRTTIMESPEC pTime, int64_t i64Nano) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Nano; + return pTime; +} + + +/** + * Subtracts a time period give as microseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Micro The time period in microseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMicro(PRTTIMESPEC pTime, int64_t i64Micro) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Micro * RT_NS_1US; + return pTime; +} + + +/** + * Subtracts a time period give as milliseconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Milli The time period in milliseconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubMilli(PRTTIMESPEC pTime, int64_t i64Milli) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Milli * RT_NS_1MS; + return pTime; +} + + +/** + * Subtracts a time period give as seconds from the time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The time period in seconds. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSubSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch -= i64Seconds * RT_NS_1SEC; + return pTime; +} + + +/** + * Gives the time in seconds and nanoseconds. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param *pi32Seconds Where to store the time period in seconds. + * @param *pi32Nano Where to store the time period in nanoseconds. + */ +DECLINLINE(void) RTTimeSpecGetSecondsAndNano(PRTTIMESPEC pTime, int32_t *pi32Seconds, int32_t *pi32Nano) +{ + int64_t i64 = RTTimeSpecGetNano(pTime); + int32_t i32Nano = (int32_t)(i64 % RT_NS_1SEC); + i64 /= RT_NS_1SEC; + if (i32Nano < 0) + { + i32Nano += RT_NS_1SEC; + i64--; + } + *pi32Seconds = (int32_t)i64; + *pi32Nano = i32Nano; +} + + +/* PORTME: Add struct timeval guard macro here. */ +#if defined(RTTIME_INCL_TIMEVAL) || defined(_STRUCT_TIMEVAL) || defined(_SYS__TIMEVAL_H_) || defined(_SYS_TIME_H) || defined(_TIMEVAL) || defined(_LINUX_TIME_H) \ + || (defined(RT_OS_NETBSD) && defined(_SYS_TIME_H_)) +/** + * Gets the time as POSIX timeval. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param pTimeval Where to store the time as POSIX timeval. + */ +DECLINLINE(struct timeval *) RTTimeSpecGetTimeval(PCRTTIMESPEC pTime, struct timeval *pTimeval) +{ + int64_t i64 = RTTimeSpecGetMicro(pTime); + int32_t i32Micro = (int32_t)(i64 % RT_US_1SEC); + i64 /= RT_US_1SEC; + if (i32Micro < 0) + { + i32Micro += RT_US_1SEC; + i64--; + } + pTimeval->tv_sec = (time_t)i64; + pTimeval->tv_usec = i32Micro; + return pTimeval; +} + +/** + * Sets the time as POSIX timeval. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimeval Pointer to the POSIX timeval struct with the new time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimeval(PRTTIMESPEC pTime, const struct timeval *pTimeval) +{ + return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec); +} +#endif /* various ways of detecting struct timeval */ + + +/* PORTME: Add struct timespec guard macro here. */ +#if defined(RTTIME_INCL_TIMESPEC) || defined(_STRUCT_TIMESPEC) || defined(_SYS__TIMESPEC_H_) || defined(TIMEVAL_TO_TIMESPEC) || defined(_TIMESPEC) \ + || (defined(RT_OS_NETBSD) && defined(_SYS_TIME_H_)) +/** + * Gets the time as POSIX timespec. + * + * @returns pTime. + * @param pTime The time spec to interpret. + * @param pTimespec Where to store the time as POSIX timespec. + */ +DECLINLINE(struct timespec *) RTTimeSpecGetTimespec(PCRTTIMESPEC pTime, struct timespec *pTimespec) +{ + int64_t i64 = RTTimeSpecGetNano(pTime); + int32_t i32Nano = (int32_t)(i64 % RT_NS_1SEC); + i64 /= RT_NS_1SEC; + if (i32Nano < 0) + { + i32Nano += RT_NS_1SEC; + i64--; + } + pTimespec->tv_sec = (time_t)i64; + pTimespec->tv_nsec = i32Nano; + return pTimespec; +} + +/** + * Sets the time as POSIX timespec. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pTimespec Pointer to the POSIX timespec struct with the new time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimespec(PRTTIMESPEC pTime, const struct timespec *pTimespec) +{ + return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimespec->tv_sec), pTimespec->tv_nsec); +} +#endif /* various ways of detecting struct timespec */ + + + +/** The offset of the unix epoch and the base for NT time (in 100ns units). + * Nt time starts at 1601-01-01 00:00:00. */ +#define RTTIME_NT_TIME_OFFSET_UNIX (116444736000000000LL) + + +/** + * Gets the time as NT time. + * + * @returns Nt time. + * @param pTime The time spec to interpret. + */ +DECLINLINE(uint64_t) RTTimeSpecGetNtTime(PCRTTIMESPEC pTime) +{ + return pTime->i64NanosecondsRelativeToUnixEpoch / 100 + + RTTIME_NT_TIME_OFFSET_UNIX; +} + + +/** + * Sets the time given by Nt time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param u64NtTime The new time in Nt time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtTime(PRTTIMESPEC pTime, uint64_t u64NtTime) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = + ((int64_t)u64NtTime - RTTIME_NT_TIME_OFFSET_UNIX) * 100; + return pTime; +} + + +#ifdef _FILETIME_ +/** + * Gets the time as NT file time. + * + * @returns pFileTime. + * @param pTime The time spec to interpret. + * @param pFileTime Pointer to NT filetime structure. + */ +DECLINLINE(PFILETIME) RTTimeSpecGetNtFileTime(PCRTTIMESPEC pTime, PFILETIME pFileTime) +{ + *((uint64_t *)pFileTime) = RTTimeSpecGetNtTime(pTime); + return pFileTime; +} + +/** + * Sets the time as NT file time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param pFileTime Where to store the time as Nt file time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetNtFileTime(PRTTIMESPEC pTime, const FILETIME *pFileTime) +{ + return RTTimeSpecSetNtTime(pTime, *(const uint64_t *)pFileTime); +} +#endif + + +/** The offset to the start of DOS time. + * DOS time starts 1980-01-01 00:00:00. */ +#define RTTIME_OFFSET_DOS_TIME (315532800000000000LL) + + +/** + * Gets the time as seconds relative to the start of dos time. + * + * @returns seconds relative to the start of dos time. + * @param pTime The time spec to interpret. + */ +DECLINLINE(int64_t) RTTimeSpecGetDosSeconds(PCRTTIMESPEC pTime) +{ + return (pTime->i64NanosecondsRelativeToUnixEpoch - RTTIME_OFFSET_DOS_TIME) + / RT_NS_1SEC; +} + + +/** + * Sets the time given by seconds relative to the start of dos time. + * + * @returns pTime. + * @param pTime The time spec to modify. + * @param i64Seconds The new time in seconds relative to the start of dos time. + */ +DECLINLINE(PRTTIMESPEC) RTTimeSpecSetDosSeconds(PRTTIMESPEC pTime, int64_t i64Seconds) +{ + pTime->i64NanosecondsRelativeToUnixEpoch = i64Seconds * RT_NS_1SEC + + RTTIME_OFFSET_DOS_TIME; + return pTime; +} + + +/** + * Compare two time specs. + * + * @returns true they are equal. + * @returns false they are not equal. + * @param pTime1 The 1st time spec. + * @param pTime2 The 2nd time spec. + */ +DECLINLINE(bool) RTTimeSpecIsEqual(PCRTTIMESPEC pTime1, PCRTTIMESPEC pTime2) +{ + return pTime1->i64NanosecondsRelativeToUnixEpoch == pTime2->i64NanosecondsRelativeToUnixEpoch; +} + + +/** + * Compare two time specs. + * + * @returns 0 if equal, -1 if @a pLeft is smaller, 1 if @a pLeft is larger. + * @returns false they are not equal. + * @param pLeft The 1st time spec. + * @param pRight The 2nd time spec. + */ +DECLINLINE(int) RTTimeSpecCompare(PCRTTIMESPEC pLeft, PCRTTIMESPEC pRight) +{ + if (pLeft->i64NanosecondsRelativeToUnixEpoch == pRight->i64NanosecondsRelativeToUnixEpoch) + return 0; + return pLeft->i64NanosecondsRelativeToUnixEpoch < pRight->i64NanosecondsRelativeToUnixEpoch ? -1 : 1; +} + + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time spec. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeSpecToString(PCRTTIMESPEC pTime, char *psz, size_t cb); + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime The time spec. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIMESPEC) RTTimeSpecFromString(PRTTIMESPEC pTime, const char *pszString); + +/** @} */ + + +/** + * Exploded time. + */ +#pragma pack(1) +typedef struct RTTIME +{ + /** The year number. */ + int32_t i32Year; + /** The month of the year (1-12). January is 1. */ + uint8_t u8Month; + /** The day of the week (0-6). Monday is 0. */ + uint8_t u8WeekDay; + /** The day of the year (1-366). January the 1st is 1. */ + uint16_t u16YearDay; + /** The day of the month (1-31). */ + uint8_t u8MonthDay; + /** Hour of the day (0-23). */ + uint8_t u8Hour; + /** The minute of the hour (0-59). */ + uint8_t u8Minute; + /** The second of the minute (0-60). + * (u32Nanosecond / 1000000) */ + uint8_t u8Second; + /** The nanoseconds of the second (0-999999999). */ + uint32_t u32Nanosecond; + /** Flags, of the RTTIME_FLAGS_* \#defines. */ + uint32_t fFlags; + /** UCT time offset in minutes (-840-840). + * @remarks The implementation of RTTimeLocal* isn't quite there yet, so this might not be 100% correct. */ + int32_t offUTC; +} RTTIME; +#pragma pack() +/** Pointer to a exploded time structure. */ +typedef RTTIME *PRTTIME; +/** Pointer to a const exploded time structure. */ +typedef const RTTIME *PCRTTIME; + +/** @name RTTIME::fFlags values. + * @{ */ +/** Set if the time is UTC. If clear the time local time. */ +#define RTTIME_FLAGS_TYPE_MASK 3 +/** the time is UTC time. */ +#define RTTIME_FLAGS_TYPE_UTC 2 +/** The time is local time. */ +#define RTTIME_FLAGS_TYPE_LOCAL 3 + +/** Set if the time is local and daylight saving time is in effect. + * Not bit is not valid if RTTIME_FLAGS_NO_DST_DATA is set. */ +#define RTTIME_FLAGS_DST RT_BIT(4) +/** Set if the time is local and there is no data available on daylight saving time. */ +#define RTTIME_FLAGS_NO_DST_DATA RT_BIT(5) +/** Set if the year is a leap year. + * This is mutual exclusiv with RTTIME_FLAGS_COMMON_YEAR. */ +#define RTTIME_FLAGS_LEAP_YEAR RT_BIT(6) +/** Set if the year is a common year. + * This is mutual exclusiv with RTTIME_FLAGS_LEAP_YEAR. */ +#define RTTIME_FLAGS_COMMON_YEAR RT_BIT(7) +/** The mask of valid flags. */ +#define RTTIME_FLAGS_MASK UINT32_C(0xff) +/** @} */ + + +/** + * Gets the current system time (UTC). + * + * @returns pTime. + * @param pTime Where to store the time. + */ +RTDECL(PRTTIMESPEC) RTTimeNow(PRTTIMESPEC pTime); + +/** + * Sets the system time. + * + * @returns IPRT status code + * @param pTime The new system time (UTC). + * + * @remarks This will usually fail because changing the wall time is usually + * requires extra privileges. + */ +RTDECL(int) RTTimeSet(PCRTTIMESPEC pTime); + +/** + * Explodes a time spec (UTC). + * + * @returns pTime. + * @param pTime Where to store the exploded time. + * @param pTimeSpec The time spec to exploded. + */ +RTDECL(PRTTIME) RTTimeExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec); + +/** + * Implodes exploded time to a time spec (UTC). + * + * @returns pTime on success. + * @returns NULL if the pTime data is invalid. + * @param pTimeSpec Where to store the imploded UTC time. + * If pTime specifies a time which outside the range, maximum or + * minimum values will be returned. + * @param pTime Pointer to the exploded time to implode. + * The fields u8Month, u8WeekDay and u8MonthDay are not used, + * and all the other fields are expected to be within their + * bounds. Use RTTimeNormalize() to calculate u16YearDay and + * normalize the ranges of the fields. + */ +RTDECL(PRTTIMESPEC) RTTimeImplode(PRTTIMESPEC pTimeSpec, PCRTTIME pTime); + +/** + * Normalizes the fields of a time structure. + * + * It is possible to calculate year-day from month/day and vice + * versa. If you adjust any of of these, make sure to zero the + * other so you make it clear which of the fields to use. If + * it's ambiguous, the year-day field is used (and you get + * assertions in debug builds). + * + * All the time fields and the year-day or month/day fields will + * be adjusted for overflows. (Since all fields are unsigned, there + * is no underflows.) It is possible to exploit this for simple + * date math, though the recommended way of doing that to implode + * the time into a timespec and do the math on that. + * + * @returns pTime on success. + * @returns NULL if the data is invalid. + * + * @param pTime The time structure to normalize. + * + * @remarks This function doesn't work with local time, only with UTC time. + */ +RTDECL(PRTTIME) RTTimeNormalize(PRTTIME pTime); + +/** + * Gets the current local system time. + * + * @returns pTime. + * @param pTime Where to store the local time. + */ +RTDECL(PRTTIMESPEC) RTTimeLocalNow(PRTTIMESPEC pTime); + +/** + * Gets the delta between UTC and local time. + * + * @code + * RTTIMESPEC LocalTime; + * RTTimeSpecAddNano(RTTimeNow(&LocalTime), RTTimeLocalDeltaNano()); + * @endcode + * + * @returns Returns the nanosecond delta between UTC and local time. + */ +RTDECL(int64_t) RTTimeLocalDeltaNano(void); + +/** + * Explodes a time spec to the localized timezone. + * + * @returns pTime. + * @param pTime Where to store the exploded time. + * @param pTimeSpec The time spec to exploded (UTC). + */ +RTDECL(PRTTIME) RTTimeLocalExplode(PRTTIME pTime, PCRTTIMESPEC pTimeSpec); + +/** + * Normalizes the fields of a time structure containing local time. + * + * See RTTimeNormalize for details. + * + * @returns pTime on success. + * @returns NULL if the data is invalid. + * @param pTime The time structure to normalize. + */ +RTDECL(PRTTIME) RTTimeLocalNormalize(PRTTIME pTime); + +/** + * Converts a time spec to a ISO date string. + * + * @returns psz on success. + * @returns NULL on buffer underflow. + * @param pTime The time. Caller should've normalized this. + * @param psz Where to store the string. + * @param cb The size of the buffer. + */ +RTDECL(char *) RTTimeToString(PCRTTIME pTime, char *psz, size_t cb); + +/** + * Attempts to convert an ISO date string to a time structure. + * + * We're a little forgiving with zero padding, unspecified parts, and leading + * and trailing spaces. + * + * @retval pTime on success, + * @retval NULL on failure. + * @param pTime Where to store the time on success. + * @param pszString The ISO date string to convert. + */ +RTDECL(PRTTIME) RTTimeFromString(PRTTIME pTime, const char *pszString); + +/** + * Checks if a year is a leap year or not. + * + * @returns true if it's a leap year. + * @returns false if it's a common year. + * @param i32Year The year in question. + */ +RTDECL(bool) RTTimeIsLeapYear(int32_t i32Year); + +/** + * Gets the current nanosecond timestamp. + * + * @returns nanosecond timestamp. + */ +RTDECL(uint64_t) RTTimeNanoTS(void); + +/** + * Gets the current millisecond timestamp. + * + * @returns millisecond timestamp. + */ +RTDECL(uint64_t) RTTimeMilliTS(void); + +/** + * Debugging the time api. + * + * @returns the number of 1ns steps which has been applied by RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgSteps(void); + +/** + * Debugging the time api. + * + * @returns the number of times the TSC interval expired RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgExpired(void); + +/** + * Debugging the time api. + * + * @returns the number of bad previous values encountered by RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgBad(void); + +/** + * Debugging the time api. + * + * @returns the number of update races in RTTimeNanoTS(). + */ +RTDECL(uint32_t) RTTimeDbgRaces(void); + +/** @name RTTimeNanoTS GIP worker functions, for TM. + * @{ */ +/** Pointer to a RTTIMENANOTSDATA structure. */ +typedef struct RTTIMENANOTSDATA *PRTTIMENANOTSDATA; + +/** + * Nanosecond timestamp data. + * + * This is used to keep track of statistics and callback so IPRT + * and TM (VirtualBox) can share code. + * + * @remark Keep this in sync with the assembly version in timesupA.asm. + */ +typedef struct RTTIMENANOTSDATA +{ + /** Where the previous timestamp is stored. + * This is maintained to ensure that time doesn't go backwards or anything. */ + uint64_t volatile *pu64Prev; + + /** + * Helper function that's used by the assembly routines when something goes bust. + * + * @param pData Pointer to this structure. + * @param u64NanoTS The calculated nano ts. + * @param u64DeltaPrev The delta relative to the previously returned timestamp. + * @param u64PrevNanoTS The previously returned timestamp (as it was read it). + */ + DECLCALLBACKMEMBER(void, pfnBad)(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS); + + /** + * Callback for when rediscovery is required. + * + * @returns Nanosecond timestamp. + * @param pData Pointer to this structure. + */ + DECLCALLBACKMEMBER(uint64_t, pfnRediscover)(PRTTIMENANOTSDATA pData); + + /** + * Callback for when some CPU index related stuff goes wrong. + * + * @returns Nanosecond timestamp. + * @param pData Pointer to this structure. + * @param idApic The APIC ID if available, otherwise (UINT16_MAX-1). + * @param iCpuSet The CPU set index if available, otherwise + * (UINT16_MAX-1). + * @param iGipCpu The GIP CPU array index if available, otherwise + * (UINT16_MAX-1). + */ + DECLCALLBACKMEMBER(uint64_t, pfnBadCpuIndex)(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu); + + /** Number of 1ns steps because of overshooting the period. */ + uint32_t c1nsSteps; + /** The number of times the interval expired (overflow). */ + uint32_t cExpired; + /** Number of "bad" previous values. */ + uint32_t cBadPrev; + /** The number of update races. */ + uint32_t cUpdateRaces; +} RTTIMENANOTSDATA; + +#ifndef IN_RING3 +/** + * The Ring-3 layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATAR3 +{ + R3PTRTYPE(uint64_t volatile *) pu64Prev; + DECLR3CALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLR3CALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLR3CALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATAR3; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATAR3; +#endif + +#ifndef IN_RING0 +/** + * The Ring-3 layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATAR0 +{ + R0PTRTYPE(uint64_t volatile *) pu64Prev; + DECLR0CALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLR0CALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLR0CALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATAR0; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATAR0; +#endif + +#ifndef IN_RC +/** + * The RC layout of the RTTIMENANOTSDATA structure. + */ +typedef struct RTTIMENANOTSDATARC +{ + RCPTRTYPE(uint64_t volatile *) pu64Prev; + DECLRCCALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS)); + DECLRCCALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData)); + DECLRCCALLBACKMEMBER(uint64_t, pfnBadCpuIndex,(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)); + uint32_t c1nsSteps; + uint32_t cExpired; + uint32_t cBadPrev; + uint32_t cUpdateRaces; +} RTTIMENANOTSDATARC; +#else +typedef RTTIMENANOTSDATA RTTIMENANOTSDATARC; +#endif + +/** Internal RTTimeNanoTS worker (assembly). */ +typedef DECLCALLBACK(uint64_t) FNTIMENANOTSINTERNAL(PRTTIMENANOTSDATA pData); +/** Pointer to an internal RTTimeNanoTS worker (assembly). */ +typedef FNTIMENANOTSINTERNAL *PFNTIMENANOTSINTERNAL; +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarNoDelta(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarNoDelta(PRTTIMENANOTSDATA pData); +#ifdef IN_RING3 +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseRdtscpGroupChNumCl(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacyAsyncUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDeltaUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseRdtscpGroupChNumCl(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsyncUseIdtrLim(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseApicId(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseRdtscp(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDeltaUseIdtrLim(PRTTIMENANOTSDATA pData); +#else +RTDECL(uint64_t) RTTimeNanoTSLegacyAsync(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLegacySyncInvarWithDelta(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceAsync(PRTTIMENANOTSDATA pData); +RTDECL(uint64_t) RTTimeNanoTSLFenceSyncInvarWithDelta(PRTTIMENANOTSDATA pData); +#endif + +/** @} */ + + +/** + * Gets the current nanosecond timestamp. + * + * This differs from RTTimeNanoTS in that it will use system APIs and not do any + * resolution or performance optimizations. + * + * @returns nanosecond timestamp. + */ +RTDECL(uint64_t) RTTimeSystemNanoTS(void); + +/** + * Gets the current millisecond timestamp. + * + * This differs from RTTimeNanoTS in that it will use system APIs and not do any + * resolution or performance optimizations. + * + * @returns millisecond timestamp. + */ +RTDECL(uint64_t) RTTimeSystemMilliTS(void); + +/** + * Get the nanosecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramNanoTS(void); + +/** + * Get the microsecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramMicroTS(void); + +/** + * Get the millisecond timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint64_t) RTTimeProgramMilliTS(void); + +/** + * Get the second timestamp relative to program startup. + * + * @returns Timestamp relative to program startup. + */ +RTDECL(uint32_t) RTTimeProgramSecTS(void); + +/** + * Get the RTTimeNanoTS() of when the program started. + * + * @returns Program startup timestamp. + */ +RTDECL(uint64_t) RTTimeProgramStartNanoTS(void); + + +/** + * Time zone information. + */ +typedef struct RTTIMEZONEINFO +{ + /** Unix time zone name (continent/country[/city]|). */ + const char *pszUnixName; + /** Windows time zone name. */ + const char *pszWindowsName; + /** The length of the unix time zone name. */ + uint8_t cchUnixName; + /** The length of the windows time zone name. */ + uint8_t cchWindowsName; + /** Two letter country/territory code if applicable, otherwise 'ZZ'. */ + char szCountry[3]; + /** Two letter windows country/territory code if applicable. + * Empty string if no windows mapping. */ + char szWindowsCountry[3]; +#if 0 /* Add when needed and it's been extracted. */ + /** The standard delta in minutes (add to UTC). */ + int16_t cMinStdDelta; + /** The daylight saving time delta in minutes (add to UTC). */ + int16_t cMinDstDelta; +#endif + /** closest matching windows time zone index. */ + uint32_t idxWindows; + /** Flags, RTTIMEZONEINFO_F_XXX. */ + uint32_t fFlags; +} RTTIMEZONEINFO; +/** Pointer to time zone info. */ +typedef RTTIMEZONEINFO const *PCRTTIMEZONEINFO; + +/** @name RTTIMEZONEINFO_F_XXX - time zone info flags. + * @{ */ +/** Indicates golden mapping entry for a windows time zone name. */ +#define RTTIMEZONEINFO_F_GOLDEN RT_BIT_32(0) +/** @} */ + +/** + * Looks up static time zone information by unix name. + * + * @returns Pointer to info entry if found, NULL if not. + * @param pszName The unix zone name (TZ). + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByUnixName(const char *pszName); + +/** + * Looks up static time zone information by window name. + * + * @returns Pointer to info entry if found, NULL if not. + * @param pszName The windows zone name (reg key). + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByWindowsName(const char *pszName); + +/** + * Looks up static time zone information by windows index. + * + * @returns Pointer to info entry if found, NULL if not. + * @param idxZone The windows timezone index. + */ +RTDECL(PCRTTIMEZONEINFO) RTTimeZoneGetInfoByWindowsIndex(uint32_t idxZone); + +/** + * Get the current time zone (TZ). + * + * @returns IPRT status code. + * @param pszName Where to return the time zone name. + * @param cbName The size of the name buffer. + */ +RTDECL(int) RTTimeZoneGetCurrent(char *pszName, size_t cbName); + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/types.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/types.h @@ -0,0 +1,3163 @@ +/** @file + * IPRT - Types. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_types_h +#define ___iprt_types_h + +#include +#include +#include + +/* + * Include standard C types. + */ +#ifndef IPRT_NO_CRT + +# if defined(IN_XF86_MODULE) && !defined(NO_ANSIC) + /* + * Kludge for xfree86 modules: size_t and other types are redefined. + */ +RT_C_DECLS_BEGIN +# include "xf86_ansic.h" +# undef NULL +RT_C_DECLS_END + +# elif defined(RT_OS_DARWIN) && defined(KERNEL) + /* + * Kludge for the darwin kernel: + * stddef.h is missing IIRC. + */ +# ifndef _PTRDIFF_T +# define _PTRDIFF_T + typedef __darwin_ptrdiff_t ptrdiff_t; +# endif +# include + +# elif defined(RT_OS_FREEBSD) && defined(_KERNEL) + /* + * Kludge for the FreeBSD kernel: + * stddef.h and sys/types.h have slightly different offsetof definitions + * when compiling in kernel mode. This is just to make GCC shut up. + */ +# ifndef _STDDEF_H_ +# undef offsetof +# endif +# include +# ifndef _SYS_TYPES_H_ +# undef offsetof +# endif +# include +# ifndef offsetof +# error "offsetof is not defined!" +# endif + +# elif defined(RT_OS_FREEBSD) && HC_ARCH_BITS == 64 && defined(RT_ARCH_X86) + /* + * Kludge for compiling 32-bit code on a 64-bit FreeBSD: + * FreeBSD declares uint64_t and int64_t wrong (long unsigned and long int + * though they need to be long long unsigned and long long int). These + * defines conflict with our declaration in stdint.h. Adding the defines + * below omits the definitions in the system header. + */ +# include +# define _UINT64_T_DECLARED +# define _INT64_T_DECLARED +# define _UINTPTR_T_DECLARED +# define _INTPTR_T_DECLARED +# include + +# elif defined(RT_OS_NETBSD) && defined(_KERNEL) + +# include + + /* + * Kludge for NetBSD-6.x where the definition of bool in + * does not check for C++. + */ +# if defined(__cplusplus) && defined(bool) +# undef bool +# undef true +# undef false +# endif + + /* + * Kludge for NetBSD-6.x where does not define + * ptrdiff_t for the kernel code. Note that we don't worry about + * redefinition in since that header doesn't exist for + * _KERNEL code. + */ +# ifdef _BSD_PTRDIFF_T_ + typedef _BSD_PTRDIFF_T_ ptrdiff_t; +# endif + +# elif defined(RT_OS_LINUX) && defined(__KERNEL__) + /* + * Kludge for the linux kernel: + * 1. sys/types.h doesn't mix with the kernel. + * 2. Starting with 2.6.19, linux/types.h typedefs bool and linux/stddef.h + * declares false and true as enum values. + * 3. Starting with 2.6.24, linux/types.h typedefs uintptr_t. + * We work around these issues here and nowhere else. + */ +# include +# if defined(__cplusplus) + typedef bool _Bool; +# endif +# define bool linux_bool +# define true linux_true +# define false linux_false +# define uintptr_t linux_uintptr_t +# include +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) +# include +# else +# ifndef AUTOCONF_INCLUDED +# include +# endif +# endif +# include +# if defined(__cplusplus) + /* + * Starting with 3.3, appends 'notrace' (which + * expands to __attribute__((no_instrument_function))) to inline, + * __inline and __inline__. Revert that. + */ +# undef inline +# define inline inline +# undef __inline__ +# define __inline__ __inline__ +# undef __inline +# define __inline __inline +# endif +# include +# include + /* + * Starting with 3.4, defines NULL as '((void*)0)' which + * does not work for C++ code. + */ +# undef NULL +# undef uintptr_t +# ifdef __GNUC__ +# if !RT_GNUC_PREREQ(4, 1) + /* + * does + * #define __inline__ __inline__ __attribute__((always_inline)) + * in some older Linux kernels. Forcing inlining will fail for some RTStrA* + * functions with gcc <= 4.0 due to passing variable argument lists. + */ +# undef __inline__ +# define __inline__ __inline__ +# endif +# endif +# undef false +# undef true +# undef bool +# else +# include +# include +# endif + + +/* Define any types missing from sys/types.h on windows. */ +# ifdef _MSC_VER +# undef ssize_t + typedef intptr_t ssize_t; +# endif + +#else /* no crt */ +# include +#endif /* no crt */ + + + +/** @def NULL + * NULL pointer. + */ +#ifndef NULL +# ifdef __cplusplus +# define NULL 0 +# else +# define NULL ((void*)0) +# endif +#endif + + + +/** @defgroup grp_rt_types IPRT Base Types + * @{ + */ + +/* define wchar_t, we don't wanna include all the wcsstuff to get this. */ +#ifdef _MSC_VER +# ifndef _WCHAR_T_DEFINED + typedef unsigned short wchar_t; +# define _WCHAR_T_DEFINED +# endif +#endif +#ifdef __GNUC__ +/** @todo wchar_t on GNUC */ +#endif + +/* + * C doesn't have bool, nor does VisualAge for C++ v3.08. + */ +#if !defined(__cplusplus) || (defined(__IBMCPP__) && defined(RT_OS_OS2)) +# if defined(__GNUC__) +# if defined(RT_OS_LINUX) && __GNUC__ < 3 +typedef uint8_t bool; +# elif defined(RT_OS_FREEBSD) +# ifndef __bool_true_false_are_defined +typedef _Bool bool; +# endif +# elif defined(RT_OS_NETBSD) +# if !defined(_KERNEL) + /* + * For the kernel code is not available, but bool is + * provided by included above. + */ +# include + + /* + * ... but the story doesn't end here. The C standard says that + * defines preprocessor macro "bool" that expands to + * "_Bool", but adds that a program may undefine/redefine it + * (this is 7.16 in C99 and 7.18 in C11). We have to play this + * game here because X11 code uses "bool" as a struct member name + * - so undefine "bool" and provide it as a typedef instead. We + * still keep #include so that any code that might + * include it later doesn't mess things up. + */ +# undef bool + typedef _Bool bool; +# endif +# else +# if (defined(RT_OS_DARWIN) || defined(RT_OS_HAIKU)) && (defined(_STDBOOL_H) || defined(__STDBOOL_H)) +# undef bool +# endif +typedef _Bool bool; +# endif +# else +# if RT_MSC_PREREQ(RT_MSC_VER_VC120) +# include +# else +typedef unsigned char bool; +# endif +# endif +# ifndef true +# define true (1) +# endif +# ifndef false +# define false (0) +# endif +#endif + +/** + * 128-bit unsigned integer. + */ +#if defined(__GNUC__) && defined(RT_ARCH_AMD64) +typedef __uint128_t uint128_t; +#else +typedef struct uint128_s +{ +# ifdef RT_BIG_ENDIAN + uint64_t Hi; + uint64_t Lo; +# else + uint64_t Lo; + uint64_t Hi; +# endif +} uint128_t; +#endif + + +/** + * 128-bit signed integer. + */ +#if defined(__GNUC__) && defined(RT_ARCH_AMD64) +typedef __int128_t int128_t; +#else +typedef struct int128_s +{ +# ifdef RT_BIG_ENDIAN + int64_t Hi; + uint64_t Lo; +# else + uint64_t Lo; + int64_t Hi; +# endif +} int128_t; +#endif + + +/** + * 16-bit unsigned integer union. + */ +typedef union RTUINT16U +{ + /** natural view. */ + uint16_t u; + + /** 16-bit view. */ + uint16_t au16[1]; + /** 8-bit view. */ + uint8_t au8[2]; + /** 16-bit hi/lo view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint8_t Hi; + uint8_t Lo; +#else + uint8_t Lo; + uint8_t Hi; +#endif + } s; +} RTUINT16U; +/** Pointer to a 16-bit unsigned integer union. */ +typedef RTUINT16U RT_FAR *PRTUINT16U; +/** Pointer to a const 32-bit unsigned integer union. */ +typedef const RTUINT16U RT_FAR *PCRTUINT16U; + + +/** + * 32-bit unsigned integer union. + */ +typedef union RTUINT32U +{ + /** natural view. */ + uint32_t u; + /** Hi/Low view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t Hi; + uint16_t Lo; +#else + uint16_t Lo; + uint16_t Hi; +#endif + } s; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; +#endif + } Words; + + /** 32-bit view. */ + uint32_t au32[1]; + /** 16-bit view. */ + uint16_t au16[2]; + /** 8-bit view. */ + uint8_t au8[4]; +} RTUINT32U; +/** Pointer to a 32-bit unsigned integer union. */ +typedef RTUINT32U RT_FAR *PRTUINT32U; +/** Pointer to a const 32-bit unsigned integer union. */ +typedef const RTUINT32U RT_FAR *PCRTUINT32U; + + +/** + * 64-bit unsigned integer union. + */ +typedef union RTUINT64U +{ + /** Natural view. */ + uint64_t u; + /** Hi/Low view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t Hi; + uint32_t Lo; +#else + uint32_t Lo; + uint32_t Hi; +#endif + } s; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; +#endif + } Words; + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[4]; + /** 8-bit view. */ + uint8_t au8[8]; +} RTUINT64U; +/** Pointer to a 64-bit unsigned integer union. */ +typedef RTUINT64U RT_FAR *PRTUINT64U; +/** Pointer to a const 64-bit unsigned integer union. */ +typedef const RTUINT64U RT_FAR *PCRTUINT64U; + + +/** + * 128-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT128U +{ + /** Hi/Low view. + * @remarks We put this first so we can have portable initializers + * (RTUINT128_INIT) */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t Hi; + uint64_t Lo; +#else + uint64_t Lo; + uint64_t Hi; +#endif + } s; + + /** Natural view. + * WARNING! This member depends on the compiler supporting 128-bit stuff. */ + uint128_t u; + + /** Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; +#endif + } Words; + + /** 64-bit view. */ + uint64_t au64[2]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 8-bit view. */ + uint8_t au8[16]; +} RTUINT128U; +#pragma pack() +/** Pointer to a 128-bit unsigned integer union. */ +typedef RTUINT128U RT_FAR *PRTUINT128U; +/** Pointer to a const 128-bit unsigned integer union. */ +typedef const RTUINT128U RT_FAR *PCRTUINT128U; + +/** @def RTUINT128_INIT + * Portable RTUINT128U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Hi, a_Lo } } +#else +# define RTUINT128_INIT(a_Hi, a_Lo) { { a_Lo, a_Hi } } +#endif + +/** @def RTUINT128_INIT_C + * Portable RTUINT128U initializer for 64-bit constants. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Hi), UINT64_C(a_Lo) } } +#else +# define RTUINT128_INIT_C(a_Hi, a_Lo) { { UINT64_C(a_Lo), UINT64_C(a_Hi) } } +#endif + + +/** + * 256-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT256U +{ + /** Quad-Word view (first as it's used by RTUINT256_INIT). */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw3; + uint64_t qw2; + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; + uint64_t qw2; + uint64_t qw3; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw7; + uint32_t dw6; + uint32_t dw5; + uint32_t dw4; + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; + uint32_t dw4; + uint32_t dw5; + uint32_t dw6; + uint32_t dw7; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w15; + uint16_t w14; + uint16_t w13; + uint16_t w12; + uint16_t w11; + uint16_t w10; + uint16_t w9; + uint16_t w8; + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; + uint16_t w8; + uint16_t w9; + uint16_t w10; + uint16_t w11; + uint16_t w12; + uint16_t w13; + uint16_t w14; + uint16_t w15; +#endif + } Words; + + /** Double-Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT128U dqw1; + RTUINT128U dqw0; +#else + RTUINT128U dqw0; + RTUINT128U dqw1; +#endif + } DQWords; + + /** 128-bit view. */ + RTUINT128U au128[2]; + /** 64-bit view. */ + uint64_t au64[4]; + /** 32-bit view. */ + uint32_t au32[8]; + /** 16-bit view. */ + uint16_t au16[16]; + /** 8-bit view. */ + uint8_t au8[32]; +} RTUINT256U; +#pragma pack() +/** Pointer to a 256-bit unsigned integer union. */ +typedef RTUINT256U RT_FAR *PRTUINT256U; +/** Pointer to a const 256-bit unsigned integer union. */ +typedef const RTUINT256U RT_FAR *PCRTUINT256U; + +/** @def RTUINT256_INIT + * Portable RTUINT256U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } +#else +# define RTUINT256_INIT(a_Qw3, a_Qw2, a_Qw1, a_Qw0) { { a_Qw0, a_Qw1, a_Qw2, a_Qw3 } } +#endif + +/** @def RTUINT256_INIT_C + * Portable RTUINT256U initializer for 64-bit constants. */ +#define RTUINT256_INIT_C(a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + RTUINT256_INIT(UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) + + +/** + * 512-bit unsigned integer union. + */ +#pragma pack(1) +typedef union RTUINT512U +{ + /** Quad-Word view (first as it's used by RTUINT512_INIT). */ + struct + { +#ifdef RT_BIG_ENDIAN + uint64_t qw7; + uint64_t qw6; + uint64_t qw5; + uint64_t qw4; + uint64_t qw3; + uint64_t qw2; + uint64_t qw1; + uint64_t qw0; +#else + uint64_t qw0; + uint64_t qw1; + uint64_t qw2; + uint64_t qw3; + uint64_t qw4; + uint64_t qw5; + uint64_t qw6; + uint64_t qw7; +#endif + } QWords; + /** Double-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint32_t dw15; + uint32_t dw14; + uint32_t dw13; + uint32_t dw12; + uint32_t dw11; + uint32_t dw10; + uint32_t dw9; + uint32_t dw8; + uint32_t dw7; + uint32_t dw6; + uint32_t dw5; + uint32_t dw4; + uint32_t dw3; + uint32_t dw2; + uint32_t dw1; + uint32_t dw0; +#else + uint32_t dw0; + uint32_t dw1; + uint32_t dw2; + uint32_t dw3; + uint32_t dw4; + uint32_t dw5; + uint32_t dw6; + uint32_t dw7; + uint32_t dw8; + uint32_t dw9; + uint32_t dw10; + uint32_t dw11; + uint32_t dw12; + uint32_t dw13; + uint32_t dw14; + uint32_t dw15; +#endif + } DWords; + /** Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + uint16_t w31; + uint16_t w30; + uint16_t w29; + uint16_t w28; + uint16_t w27; + uint16_t w26; + uint16_t w25; + uint16_t w24; + uint16_t w23; + uint16_t w22; + uint16_t w21; + uint16_t w20; + uint16_t w19; + uint16_t w18; + uint16_t w17; + uint16_t w16; + uint16_t w15; + uint16_t w14; + uint16_t w13; + uint16_t w12; + uint16_t w11; + uint16_t w10; + uint16_t w9; + uint16_t w8; + uint16_t w7; + uint16_t w6; + uint16_t w5; + uint16_t w4; + uint16_t w3; + uint16_t w2; + uint16_t w1; + uint16_t w0; +#else + uint16_t w0; + uint16_t w1; + uint16_t w2; + uint16_t w3; + uint16_t w4; + uint16_t w5; + uint16_t w6; + uint16_t w7; + uint16_t w8; + uint16_t w9; + uint16_t w10; + uint16_t w11; + uint16_t w12; + uint16_t w13; + uint16_t w14; + uint16_t w15; + uint16_t w16; + uint16_t w17; + uint16_t w18; + uint16_t w19; + uint16_t w20; + uint16_t w21; + uint16_t w22; + uint16_t w23; + uint16_t w24; + uint16_t w25; + uint16_t w26; + uint16_t w27; + uint16_t w28; + uint16_t w29; + uint16_t w30; + uint16_t w31; +#endif + } Words; + + /** Double-Quad-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT128U dqw3; + RTUINT128U dqw2; + RTUINT128U dqw1; + RTUINT128U dqw0; +#else + RTUINT128U dqw0; + RTUINT128U dqw1; + RTUINT128U dqw2; + RTUINT128U dqw3; +#endif + } DQWords; + + /** Octo-Word view. */ + struct + { +#ifdef RT_BIG_ENDIAN + RTUINT256U ow3; + RTUINT256U ow2; + RTUINT256U ow1; + RTUINT256U ow0; +#else + RTUINT256U ow0; + RTUINT256U ow1; + RTUINT256U ow2; + RTUINT256U ow3; +#endif + } OWords; + + /** 256-bit view. */ + RTUINT256U au256[2]; + /** 128-bit view. */ + RTUINT128U au128[4]; + /** 64-bit view. */ + uint64_t au64[8]; + /** 32-bit view. */ + uint32_t au32[16]; + /** 16-bit view. */ + uint16_t au16[32]; + /** 8-bit view. */ + uint8_t au8[64]; +} RTUINT512U; +#pragma pack() +/** Pointer to a 512-bit unsigned integer union. */ +typedef RTUINT512U RT_FAR *PRTUINT512U; +/** Pointer to a const 512-bit unsigned integer union. */ +typedef const RTUINT512U RT_FAR *PCRTUINT512U; + +/** @def RTUINT512_INIT + * Portable RTUINT512U initializer. */ +#ifdef RT_BIG_ENDIAN +# define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + { { a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0 } } +#else +# define RTUINT512_INIT(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + { { a_Qw0, a_Qw1, a_Qw2, a_Qw3, a_Qw4, a_Qw5, a_Qw6, a_Qw7 } } +#endif + +/** @def RTUINT512_INIT_C + * Portable RTUINT512U initializer for 64-bit constants. */ +#define RTUINT512_INIT_C(a_Qw7, a_Qw6, a_Qw5, a_Qw4, a_Qw3, a_Qw2, a_Qw1, a_Qw0) \ + RTUINT512_INIT(UINT64_C(a_Qw7), UINT64_C(a_Qw6), UINT64_C(a_Qw5), UINT64_C(a_Qw4), \ + UINT64_C(a_Qw3), UINT64_C(a_Qw2), UINT64_C(a_Qw1), UINT64_C(a_Qw0)) + + +/** + * Double precision floating point format (64-bit). + */ +typedef union RTFLOAT64U +{ +#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) + /** Double view. */ + double rd; +#endif + /** Format using regular bitfields. */ + struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + uint32_t fSign : 1; + /** The exponent (offseted by 1023). */ + uint32_t uExponent : 11; + /** The fraction, bits 32 thru 51. */ + uint32_t u20FractionHigh : 20; + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow; +# else + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow; + /** The fraction, bits 32 thru 51. */ + uint32_t u20FractionHigh : 20; + /** The exponent (offseted by 1023). */ + uint32_t uExponent : 11; + /** The sign indicator. */ + uint32_t fSign : 1; +# endif + } s; + +#ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS + /** Format using 64-bit bitfields. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint64_t fSign : 1; + /** The exponent (offseted by 1023). */ + RT_GCC_EXTENSION uint64_t uExponent : 11; + /** The fraction. */ + RT_GCC_EXTENSION uint64_t uFraction : 52; +# else + /** The fraction. */ + RT_GCC_EXTENSION uint64_t uFraction : 52; + /** The exponent (offseted by 1023). */ + RT_GCC_EXTENSION uint64_t uExponent : 11; + /** The sign indicator. */ + RT_GCC_EXTENSION uint64_t fSign : 1; +# endif + } s64; +#endif + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[4]; + /** 8-bit view. */ + uint8_t au8[8]; +} RTFLOAT64U; +/** Pointer to a double precision floating point format union. */ +typedef RTFLOAT64U RT_FAR *PRTFLOAT64U; +/** Pointer to a const double precision floating point format union. */ +typedef const RTFLOAT64U RT_FAR *PCRTFLOAT64U; + + +#if !defined(__IBMCPP__) && !defined(__IBMC__) + +/** + * Extended Double precision floating point format (80-bit). + */ +#pragma pack(1) +typedef union RTFLOAT80U +{ + /** Format using bitfields. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The mantissa. */ + uint64_t u64Mantissa; +# else + /** The mantissa. */ + uint64_t u64Mantissa; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +# endif + } s; + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[5]; + /** 8-bit view. */ + uint8_t au8[10]; +} RTFLOAT80U; +#pragma pack() +/** Pointer to a extended precision floating point format union. */ +typedef RTFLOAT80U RT_FAR *PRTFLOAT80U; +/** Pointer to a const extended precision floating point format union. */ +typedef const RTFLOAT80U RT_FAR *PCRTFLOAT80U; + + +/** + * A variant of RTFLOAT80U that may be larger than 80-bits depending on how the + * compiler implements long double. + */ +#pragma pack(1) +typedef union RTFLOAT80U2 +{ +#ifdef RT_COMPILER_WITH_80BIT_LONG_DOUBLE + /** Long double view. */ + long double lrd; +#endif + /** Format using bitfields. */ + RT_GCC_EXTENSION struct + { +#ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The mantissa. */ + uint64_t u64Mantissa; +#else + /** The mantissa. */ + uint64_t u64Mantissa; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +#endif + } s; + + /** Bitfield exposing the J bit and the fraction. */ + RT_GCC_EXTENSION struct + { +#ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The J bit, aka the integer bit. */ + uint32_t fInteger; + /** The fraction, bits 32 thru 62. */ + uint32_t u31FractionHigh : 31; + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow : 32; +#else + /** The fraction, bits 0 thru 31. */ + uint32_t u32FractionLow : 32; + /** The fraction, bits 32 thru 62. */ + uint32_t u31FractionHigh : 31; + /** The J bit, aka the integer bit. */ + uint32_t fInteger; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +#endif + } sj; + +#ifdef RT_COMPILER_GROKS_64BIT_BITFIELDS + /** 64-bit bitfields exposing the J bit and the fraction. */ + RT_GCC_EXTENSION struct + { +# ifdef RT_BIG_ENDIAN + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The J bit, aka the integer bit. */ + RT_GCC_EXTENSION uint64_t fInteger : 1; + /** The fraction. */ + RT_GCC_EXTENSION uint64_t u63Fraction : 63; +# else + /** The fraction. */ + RT_GCC_EXTENSION uint64_t u63Fraction : 63; + /** The J bit, aka the integer bit. */ + RT_GCC_EXTENSION uint64_t fInteger : 1; + /** The exponent (offseted by 16383). */ + RT_GCC_EXTENSION uint16_t uExponent : 15; + /** The sign indicator. */ + RT_GCC_EXTENSION uint16_t fSign : 1; +# endif + } sj64; +#endif + + /** 64-bit view. */ + uint64_t au64[1]; + /** 32-bit view. */ + uint32_t au32[2]; + /** 16-bit view. */ + uint16_t au16[5]; + /** 8-bit view. */ + uint8_t au8[10]; +} RTFLOAT80U2; +#pragma pack() +/** Pointer to a extended precision floating point format union, 2nd + * variant. */ +typedef RTFLOAT80U2 RT_FAR *PRTFLOAT80U2; +/** Pointer to a const extended precision floating point format union, 2nd + * variant. */ +typedef const RTFLOAT80U2 RT_FAR *PCRTFLOAT80U2; + +#endif /* uint16_t bitfields doesn't work */ + + +/** Generic function type. + * @see PFNRT + */ +typedef DECLCALLBACK(void) FNRT(void); + +/** Generic function pointer. + * With -pedantic, gcc-4 complains when casting a function to a data object, for + * example: + * + * @code + * void foo(void) + * { + * } + * + * void *bar = (void *)foo; + * @endcode + * + * The compiler would warn with "ISO C++ forbids casting between + * pointer-to-function and pointer-to-object". The purpose of this warning is + * not to bother the programmer but to point out that he is probably doing + * something dangerous, assigning a pointer to executable code to a data object. + */ +typedef FNRT *PFNRT; + +/** Millisecond interval. */ +typedef uint32_t RTMSINTERVAL; +/** Pointer to a millisecond interval. */ +typedef RTMSINTERVAL RT_FAR *PRTMSINTERVAL; +/** Pointer to a const millisecond interval. */ +typedef const RTMSINTERVAL RT_FAR *PCRTMSINTERVAL; + +/** Pointer to a time spec structure. */ +typedef struct RTTIMESPEC RT_FAR *PRTTIMESPEC; +/** Pointer to a const time spec structure. */ +typedef const struct RTTIMESPEC RT_FAR *PCRTTIMESPEC; + + + +/** @defgroup grp_rt_types_both Common Guest and Host Context Basic Types + * @{ + */ + +/** Signed integer which can contain both GC and HC pointers. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +typedef int32_t RTINTPTR; +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +typedef int64_t RTINTPTR; +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** Pointer to signed integer which can contain both GC and HC pointers. */ +typedef RTINTPTR RT_FAR *PRTINTPTR; +/** Pointer const to signed integer which can contain both GC and HC pointers. */ +typedef const RTINTPTR RT_FAR *PCRTINTPTR; +/** The maximum value the RTINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTINTPTR_MAX INT32_MAX +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTINTPTR_MAX INT64_MAX +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** The minimum value the RTINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTINTPTR_MIN INT32_MIN +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTINTPTR_MIN INT64_MIN +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif + +/** Unsigned integer which can contain both GC and HC pointers. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +typedef uint32_t RTUINTPTR; +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +typedef uint64_t RTUINTPTR; +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif +/** Pointer to unsigned integer which can contain both GC and HC pointers. */ +typedef RTUINTPTR RT_FAR *PRTUINTPTR; +/** Pointer const to unsigned integer which can contain both GC and HC pointers. */ +typedef const RTUINTPTR RT_FAR *PCRTUINTPTR; +/** The maximum value the RTUINTPTR type can hold. */ +#if (HC_ARCH_BITS == 32 && GC_ARCH_BITS == 32) || (HC_ARCH_BITS == 16 || GC_ARCH_BITS == 16) +# define RTUINTPTR_MAX UINT32_MAX +#elif (HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64) +# define RTUINTPTR_MAX UINT64_MAX +#else +# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values. +#endif + +/** Signed integer. */ +typedef int32_t RTINT; +/** Pointer to signed integer. */ +typedef RTINT RT_FAR *PRTINT; +/** Pointer to const signed integer. */ +typedef const RTINT RT_FAR *PCRTINT; + +/** Unsigned integer. */ +typedef uint32_t RTUINT; +/** Pointer to unsigned integer. */ +typedef RTUINT RT_FAR *PRTUINT; +/** Pointer to const unsigned integer. */ +typedef const RTUINT RT_FAR *PCRTUINT; + +/** A file offset / size (off_t). */ +typedef int64_t RTFOFF; +/** Pointer to a file offset / size. */ +typedef RTFOFF RT_FAR *PRTFOFF; +/** The max value for RTFOFF. */ +#define RTFOFF_MAX INT64_MAX +/** The min value for RTFOFF. */ +#define RTFOFF_MIN INT64_MIN + +/** File mode (see iprt/fs.h). */ +typedef uint32_t RTFMODE; +/** Pointer to file mode. */ +typedef RTFMODE RT_FAR *PRTFMODE; + +/** Device unix number. */ +typedef uint32_t RTDEV; +/** Pointer to a device unix number. */ +typedef RTDEV RT_FAR *PRTDEV; + +/** @name RTDEV Macros + * @{ */ +/** + * Our makedev macro. + * @returns RTDEV + * @param uMajor The major device number. + * @param uMinor The minor device number. + */ +#define RTDEV_MAKE(uMajor, uMinor) ((RTDEV)( ((RTDEV)(uMajor) << 24) | (uMinor & UINT32_C(0x00ffffff)) )) +/** + * Get the major device node number from an RTDEV type. + * @returns The major device number of @a uDev + * @param uDev The device number. + */ +#define RTDEV_MAJOR(uDev) ((uDev) >> 24) +/** + * Get the minor device node number from an RTDEV type. + * @returns The minor device number of @a uDev + * @param uDev The device number. + */ +#define RTDEV_MINOR(uDev) ((uDev) & UINT32_C(0x00ffffff)) +/** @} */ + +/** i-node number. */ +typedef uint64_t RTINODE; +/** Pointer to a i-node number. */ +typedef RTINODE RT_FAR *PRTINODE; + +/** User id. */ +typedef uint32_t RTUID; +/** Pointer to a user id. */ +typedef RTUID RT_FAR *PRTUID; +/** NIL user id. + * @todo check this for portability! */ +#define NIL_RTUID (~(RTUID)0) + +/** Group id. */ +typedef uint32_t RTGID; +/** Pointer to a group id. */ +typedef RTGID RT_FAR *PRTGID; +/** NIL group id. + * @todo check this for portability! */ +#define NIL_RTGID (~(RTGID)0) + +/** I/O Port. */ +typedef uint16_t RTIOPORT; +/** Pointer to I/O Port. */ +typedef RTIOPORT RT_FAR *PRTIOPORT; +/** Pointer to const I/O Port. */ +typedef const RTIOPORT RT_FAR *PCRTIOPORT; + +/** Selector. */ +typedef uint16_t RTSEL; +/** Pointer to selector. */ +typedef RTSEL RT_FAR *PRTSEL; +/** Pointer to const selector. */ +typedef const RTSEL RT_FAR *PCRTSEL; +/** Max selector value. */ +#define RTSEL_MAX UINT16_MAX + +/** Far 16-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR16 +{ + uint16_t off; + RTSEL sel; +} RTFAR16; +#pragma pack() +/** Pointer to Far 16-bit pointer. */ +typedef RTFAR16 RT_FAR *PRTFAR16; +/** Pointer to const Far 16-bit pointer. */ +typedef const RTFAR16 RT_FAR *PCRTFAR16; + +/** Far 32-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR32 +{ + uint32_t off; + RTSEL sel; +} RTFAR32; +#pragma pack() +/** Pointer to Far 32-bit pointer. */ +typedef RTFAR32 RT_FAR *PRTFAR32; +/** Pointer to const Far 32-bit pointer. */ +typedef const RTFAR32 RT_FAR *PCRTFAR32; + +/** Far 64-bit pointer. */ +#pragma pack(1) +typedef struct RTFAR64 +{ + uint64_t off; + RTSEL sel; +} RTFAR64; +#pragma pack() +/** Pointer to Far 64-bit pointer. */ +typedef RTFAR64 RT_FAR *PRTFAR64; +/** Pointer to const Far 64-bit pointer. */ +typedef const RTFAR64 RT_FAR *PCRTFAR64; + +/** @} */ + + +/** @defgroup grp_rt_types_hc Host Context Basic Types + * @{ + */ + +/** HC Natural signed integer. + * @deprecated silly type. */ +typedef int32_t RTHCINT; +/** Pointer to HC Natural signed integer. + * @deprecated silly type. */ +typedef RTHCINT RT_FAR *PRTHCINT; +/** Pointer to const HC Natural signed integer. + * @deprecated silly type. */ +typedef const RTHCINT RT_FAR *PCRTHCINT; + +/** HC Natural unsigned integer. + * @deprecated silly type. */ +typedef uint32_t RTHCUINT; +/** Pointer to HC Natural unsigned integer. + * @deprecated silly type. */ +typedef RTHCUINT RT_FAR *PRTHCUINT; +/** Pointer to const HC Natural unsigned integer. + * @deprecated silly type. */ +typedef const RTHCUINT RT_FAR *PCRTHCUINT; + + +/** Signed integer which can contain a HC pointer. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +typedef int32_t RTHCINTPTR; +#elif HC_ARCH_BITS == 64 +typedef int64_t RTHCINTPTR; +#else +# error Unsupported HC_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC pointer. */ +typedef RTHCINTPTR RT_FAR *PRTHCINTPTR; +/** Pointer to const signed integer which can contain a HC pointer. */ +typedef const RTHCINTPTR RT_FAR *PCRTHCINTPTR; +/** Max RTHCINTPTR value. */ +#if HC_ARCH_BITS == 32 +# define RTHCINTPTR_MAX INT32_MAX +#elif HC_ARCH_BITS == 64 +# define RTHCINTPTR_MAX INT64_MAX +#else +# define RTHCINTPTR_MAX INT16_MAX +#endif +/** Min RTHCINTPTR value. */ +#if HC_ARCH_BITS == 32 +# define RTHCINTPTR_MIN INT32_MIN +#elif HC_ARCH_BITS == 64 +# define RTHCINTPTR_MIN INT64_MIN +#else +# define RTHCINTPTR_MIN INT16_MIN +#endif + +/** Signed integer which can contain a HC ring-3 pointer. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +typedef int32_t RTR3INTPTR; +#elif R3_ARCH_BITS == 64 +typedef int64_t RTR3INTPTR; +#else +# error Unsupported R3_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC ring-3 pointer. */ +typedef RTR3INTPTR RT_FAR *PRTR3INTPTR; +/** Pointer to const signed integer which can contain a HC ring-3 pointer. */ +typedef const RTR3INTPTR RT_FAR *PCRTR3INTPTR; +/** Max RTR3INTPTR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3INTPTR_MAX INT32_MAX +#else +# define RTR3INTPTR_MAX INT64_MAX +#endif +/** Min RTR3INTPTR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3INTPTR_MIN INT32_MIN +#else +# define RTR3INTPTR_MIN INT64_MIN +#endif + +/** Signed integer which can contain a HC ring-0 pointer. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +typedef int32_t RTR0INTPTR; +#elif R0_ARCH_BITS == 64 +typedef int64_t RTR0INTPTR; +#else +# error Unsupported R0_ARCH_BITS value. +#endif +/** Pointer to signed integer which can contain a HC ring-0 pointer. */ +typedef RTR0INTPTR RT_FAR *PRTR0INTPTR; +/** Pointer to const signed integer which can contain a HC ring-0 pointer. */ +typedef const RTR0INTPTR RT_FAR *PCRTR0INTPTR; +/** Max RTR0INTPTR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0INTPTR_MAX INT32_MAX +#else +# define RTR0INTPTR_MAX INT64_MAX +#endif +/** Min RTHCINTPTR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0INTPTR_MIN INT32_MIN +#else +# define RTR0INTPTR_MIN INT64_MIN +#endif + + +/** Unsigned integer which can contain a HC pointer. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +typedef uint32_t RTHCUINTPTR; +#elif HC_ARCH_BITS == 64 +typedef uint64_t RTHCUINTPTR; +#else +# error Unsupported HC_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC pointer. */ +typedef RTHCUINTPTR RT_FAR *PRTHCUINTPTR; +/** Pointer to unsigned integer which can contain a HC pointer. */ +typedef const RTHCUINTPTR RT_FAR *PCRTHCUINTPTR; +/** Max RTHCUINTTPR value. */ +#if HC_ARCH_BITS == 32 || HC_ARCH_BITS == 16 +# define RTHCUINTPTR_MAX UINT32_MAX +#else +# define RTHCUINTPTR_MAX UINT64_MAX +#endif + +/** Unsigned integer which can contain a HC ring-3 pointer. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +typedef uint32_t RTR3UINTPTR; +#elif R3_ARCH_BITS == 64 +typedef uint64_t RTR3UINTPTR; +#else +# error Unsupported R3_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ +typedef RTR3UINTPTR RT_FAR *PRTR3UINTPTR; +/** Pointer to unsigned integer which can contain a HC ring-3 pointer. */ +typedef const RTR3UINTPTR RT_FAR *PCRTR3UINTPTR; +/** Max RTHCUINTTPR value. */ +#if R3_ARCH_BITS == 32 || R3_ARCH_BITS == 16 +# define RTR3UINTPTR_MAX UINT32_MAX +#else +# define RTR3UINTPTR_MAX UINT64_MAX +#endif + +/** Unsigned integer which can contain a HC ring-0 pointer. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +typedef uint32_t RTR0UINTPTR; +#elif R0_ARCH_BITS == 64 +typedef uint64_t RTR0UINTPTR; +#else +# error Unsupported R0_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ +typedef RTR0UINTPTR RT_FAR *PRTR0UINTPTR; +/** Pointer to unsigned integer which can contain a HC ring-0 pointer. */ +typedef const RTR0UINTPTR RT_FAR *PCRTR0UINTPTR; +/** Max RTR0UINTTPR value. */ +#if R0_ARCH_BITS == 32 || R0_ARCH_BITS == 16 +# define RTR0UINTPTR_MAX UINT32_MAX +#else +# define RTR0UINTPTR_MAX UINT64_MAX +#endif + + +/** Host Physical Memory Address. */ +typedef uint64_t RTHCPHYS; +/** Pointer to Host Physical Memory Address. */ +typedef RTHCPHYS RT_FAR *PRTHCPHYS; +/** Pointer to const Host Physical Memory Address. */ +typedef const RTHCPHYS RT_FAR *PCRTHCPHYS; +/** @def NIL_RTHCPHYS + * NIL HC Physical Address. + * NIL_RTHCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. + */ +#define NIL_RTHCPHYS (~(RTHCPHYS)0) +/** Max RTHCPHYS value. */ +#define RTHCPHYS_MAX UINT64_MAX + + +/** HC pointer. */ +#ifndef IN_RC +typedef void RT_FAR *RTHCPTR; +#else +typedef RTHCUINTPTR RTHCPTR; +#endif +/** Pointer to HC pointer. */ +typedef RTHCPTR RT_FAR *PRTHCPTR; +/** Pointer to const HC pointer. */ +typedef const RTHCPTR *PCRTHCPTR; +/** @def NIL_RTHCPTR + * NIL HC pointer. + */ +#define NIL_RTHCPTR ((RTHCPTR)0) +/** Max RTHCPTR value. */ +#define RTHCPTR_MAX ((RTHCPTR)RTHCUINTPTR_MAX) + + +/** HC ring-3 pointer. */ +#ifdef IN_RING3 +typedef void RT_FAR *RTR3PTR; +#else +typedef RTR3UINTPTR RTR3PTR; +#endif +/** Pointer to HC ring-3 pointer. */ +typedef RTR3PTR RT_FAR *PRTR3PTR; +/** Pointer to const HC ring-3 pointer. */ +typedef const RTR3PTR *PCRTR3PTR; +/** @def NIL_RTR3PTR + * NIL HC ring-3 pointer. + */ +#ifndef IN_RING3 +# define NIL_RTR3PTR ((RTR3PTR)0) +#else +# define NIL_RTR3PTR (NULL) +#endif +/** Max RTR3PTR value. */ +#define RTR3PTR_MAX ((RTR3PTR)RTR3UINTPTR_MAX) + +/** HC ring-0 pointer. */ +#ifdef IN_RING0 +typedef void RT_FAR *RTR0PTR; +#else +typedef RTR0UINTPTR RTR0PTR; +#endif +/** Pointer to HC ring-0 pointer. */ +typedef RTR0PTR RT_FAR *PRTR0PTR; +/** Pointer to const HC ring-0 pointer. */ +typedef const RTR0PTR *PCRTR0PTR; +/** @def NIL_RTR0PTR + * NIL HC ring-0 pointer. + */ +#ifndef IN_RING0 +# define NIL_RTR0PTR ((RTR0PTR)0) +#else +# define NIL_RTR0PTR (NULL) +#endif +/** Max RTR3PTR value. */ +#define RTR0PTR_MAX ((RTR0PTR)RTR0UINTPTR_MAX) + + +/** Unsigned integer register in the host context. */ +#if HC_ARCH_BITS == 32 +typedef uint32_t RTHCUINTREG; +#elif HC_ARCH_BITS == 64 +typedef uint64_t RTHCUINTREG; +#elif HC_ARCH_BITS == 16 +typedef uint16_t RTHCUINTREG; +#else +# error "Unsupported HC_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host context. */ +typedef RTHCUINTREG RT_FAR *PRTHCUINTREG; +/** Pointer to a const unsigned integer register in the host context. */ +typedef const RTHCUINTREG RT_FAR *PCRTHCUINTREG; + +/** Unsigned integer register in the host ring-3 context. */ +#if R3_ARCH_BITS == 32 +typedef uint32_t RTR3UINTREG; +#elif R3_ARCH_BITS == 64 +typedef uint64_t RTR3UINTREG; +#elif R3_ARCH_BITS == 16 +typedef uint16_t RTR3UINTREG; +#else +# error "Unsupported R3_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host ring-3 context. */ +typedef RTR3UINTREG RT_FAR *PRTR3UINTREG; +/** Pointer to a const unsigned integer register in the host ring-3 context. */ +typedef const RTR3UINTREG RT_FAR *PCRTR3UINTREG; + +/** Unsigned integer register in the host ring-3 context. */ +#if R0_ARCH_BITS == 32 +typedef uint32_t RTR0UINTREG; +#elif R0_ARCH_BITS == 64 +typedef uint64_t RTR0UINTREG; +#elif R0_ARCH_BITS == 16 +typedef uint16_t RTR0UINTREG; +#else +# error "Unsupported R3_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the host ring-3 context. */ +typedef RTR0UINTREG RT_FAR *PRTR0UINTREG; +/** Pointer to a const unsigned integer register in the host ring-3 context. */ +typedef const RTR0UINTREG RT_FAR *PCRTR0UINTREG; + +/** @} */ + + +/** @defgroup grp_rt_types_gc Guest Context Basic Types + * @{ + */ + +/** Natural signed integer in the GC. + * @deprecated silly type. */ +#if GC_ARCH_BITS == 32 +typedef int32_t RTGCINT; +#elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCINT. */ +typedef int64_t RTGCINT; +#endif +/** Pointer to natural signed integer in GC. + * @deprecated silly type. */ +typedef RTGCINT RT_FAR *PRTGCINT; +/** Pointer to const natural signed integer in GC. + * @deprecated silly type. */ +typedef const RTGCINT RT_FAR *PCRTGCINT; + +/** Natural unsigned integer in the GC. + * @deprecated silly type. */ +#if GC_ARCH_BITS == 32 +typedef uint32_t RTGCUINT; +#elif GC_ARCH_BITS == 64 /** @todo this isn't right, natural int is 32-bit, see RTHCUINT. */ +typedef uint64_t RTGCUINT; +#endif +/** Pointer to natural unsigned integer in GC. + * @deprecated silly type. */ +typedef RTGCUINT RT_FAR *PRTGCUINT; +/** Pointer to const natural unsigned integer in GC. + * @deprecated silly type. */ +typedef const RTGCUINT RT_FAR *PCRTGCUINT; + +/** Signed integer which can contain a GC pointer. */ +#if GC_ARCH_BITS == 32 +typedef int32_t RTGCINTPTR; +#elif GC_ARCH_BITS == 64 +typedef int64_t RTGCINTPTR; +#endif +/** Pointer to signed integer which can contain a GC pointer. */ +typedef RTGCINTPTR RT_FAR *PRTGCINTPTR; +/** Pointer to const signed integer which can contain a GC pointer. */ +typedef const RTGCINTPTR RT_FAR *PCRTGCINTPTR; + +/** Unsigned integer which can contain a GC pointer. */ +#if GC_ARCH_BITS == 32 +typedef uint32_t RTGCUINTPTR; +#elif GC_ARCH_BITS == 64 +typedef uint64_t RTGCUINTPTR; +#else +# error Unsupported GC_ARCH_BITS value. +#endif +/** Pointer to unsigned integer which can contain a GC pointer. */ +typedef RTGCUINTPTR RT_FAR *PRTGCUINTPTR; +/** Pointer to unsigned integer which can contain a GC pointer. */ +typedef const RTGCUINTPTR RT_FAR *PCRTGCUINTPTR; + +/** Unsigned integer which can contain a 32 bits GC pointer. */ +typedef uint32_t RTGCUINTPTR32; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef RTGCUINTPTR32 RT_FAR *PRTGCUINTPTR32; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef const RTGCUINTPTR32 RT_FAR *PCRTGCUINTPTR32; + +/** Unsigned integer which can contain a 64 bits GC pointer. */ +typedef uint64_t RTGCUINTPTR64; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef RTGCUINTPTR64 RT_FAR *PRTGCUINTPTR64; +/** Pointer to unsigned integer which can contain a 32 bits GC pointer. */ +typedef const RTGCUINTPTR64 RT_FAR *PCRTGCUINTPTR64; + +/** Guest Physical Memory Address.*/ +typedef uint64_t RTGCPHYS; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS RT_FAR *PRTGCPHYS; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS RT_FAR *PCRTGCPHYS; +/** @def NIL_RTGCPHYS + * NIL GC Physical Address. + * NIL_RTGCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS (~(RTGCPHYS)0U) +/** Max guest physical memory address value. */ +#define RTGCPHYS_MAX UINT64_MAX + + +/** Guest Physical Memory Address; limited to 32 bits.*/ +typedef uint32_t RTGCPHYS32; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS32 RT_FAR *PRTGCPHYS32; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS32 RT_FAR *PCRTGCPHYS32; +/** @def NIL_RTGCPHYS32 + * NIL GC Physical Address. + * NIL_RTGCPHYS32 is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS32 (~(RTGCPHYS32)0) + + +/** Guest Physical Memory Address; limited to 64 bits.*/ +typedef uint64_t RTGCPHYS64; +/** Pointer to Guest Physical Memory Address. */ +typedef RTGCPHYS64 RT_FAR *PRTGCPHYS64; +/** Pointer to const Guest Physical Memory Address. */ +typedef const RTGCPHYS64 RT_FAR *PCRTGCPHYS64; +/** @def NIL_RTGCPHYS64 + * NIL GC Physical Address. + * NIL_RTGCPHYS64 is used to signal an invalid physical address, similar + * to the NULL pointer. Note that this value may actually be valid in + * some contexts. + */ +#define NIL_RTGCPHYS64 (~(RTGCPHYS64)0) + +/** Guest context pointer, 32 bits. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in GC. + */ +typedef RTGCUINTPTR32 RTGCPTR32; +/** Pointer to a guest context pointer. */ +typedef RTGCPTR32 RT_FAR *PRTGCPTR32; +/** Pointer to a const guest context pointer. */ +typedef const RTGCPTR32 RT_FAR *PCRTGCPTR32; +/** @def NIL_RTGCPTR32 + * NIL GC pointer. + */ +#define NIL_RTGCPTR32 ((RTGCPTR32)0) + +/** Guest context pointer, 64 bits. + */ +typedef RTGCUINTPTR64 RTGCPTR64; +/** Pointer to a guest context pointer. */ +typedef RTGCPTR64 RT_FAR *PRTGCPTR64; +/** Pointer to a const guest context pointer. */ +typedef const RTGCPTR64 RT_FAR *PCRTGCPTR64; +/** @def NIL_RTGCPTR64 + * NIL GC pointer. + */ +#define NIL_RTGCPTR64 ((RTGCPTR64)0) + +/** Guest context pointer. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in GC. + */ +#if GC_ARCH_BITS == 64 +typedef RTGCPTR64 RTGCPTR; +/** Pointer to a guest context pointer. */ +typedef PRTGCPTR64 PRTGCPTR; +/** Pointer to a const guest context pointer. */ +typedef PCRTGCPTR64 PCRTGCPTR; +/** @def NIL_RTGCPTR + * NIL GC pointer. + */ +# define NIL_RTGCPTR NIL_RTGCPTR64 +/** Max RTGCPTR value. */ +# define RTGCPTR_MAX UINT64_MAX +#elif GC_ARCH_BITS == 32 +typedef RTGCPTR32 RTGCPTR; +/** Pointer to a guest context pointer. */ +typedef PRTGCPTR32 PRTGCPTR; +/** Pointer to a const guest context pointer. */ +typedef PCRTGCPTR32 PCRTGCPTR; +/** @def NIL_RTGCPTR + * NIL GC pointer. + */ +# define NIL_RTGCPTR NIL_RTGCPTR32 +/** Max RTGCPTR value. */ +# define RTGCPTR_MAX UINT32_MAX +#else +# error "Unsupported GC_ARCH_BITS!" +#endif + +/** Unsigned integer register in the guest context. */ +typedef uint32_t RTGCUINTREG32; +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG32 RT_FAR *PRTGCUINTREG32; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG32 RT_FAR *PCRTGCUINTREG32; + +typedef uint64_t RTGCUINTREG64; +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG64 RT_FAR *PRTGCUINTREG64; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG64 RT_FAR *PCRTGCUINTREG64; + +#if GC_ARCH_BITS == 64 +typedef RTGCUINTREG64 RTGCUINTREG; +#elif GC_ARCH_BITS == 32 +typedef RTGCUINTREG32 RTGCUINTREG; +#else +# error "Unsupported GC_ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the guest context. */ +typedef RTGCUINTREG RT_FAR *PRTGCUINTREG; +/** Pointer to a const unsigned integer register in the guest context. */ +typedef const RTGCUINTREG RT_FAR *PCRTGCUINTREG; + +/** @} */ + +/** @defgroup grp_rt_types_rc Raw mode Context Basic Types + * @{ + */ + +/** Raw mode context pointer; a 32 bits guest context pointer. + * Keep in mind that this type is an unsigned integer in + * HC and void pointer in RC. + */ +#ifdef IN_RC +typedef void RT_FAR *RTRCPTR; +#else +typedef uint32_t RTRCPTR; +#endif +/** Pointer to a raw mode context pointer. */ +typedef RTRCPTR RT_FAR *PRTRCPTR; +/** Pointer to a const raw mode context pointer. */ +typedef const RTRCPTR RT_FAR *PCRTRCPTR; +/** @def NIL_RTGCPTR + * NIL RC pointer. + */ +#ifndef IN_RC +# define NIL_RTRCPTR ((RTRCPTR)0) +#else +# define NIL_RTRCPTR (NULL) +#endif +/** @def RTRCPTR_MAX + * The maximum value a RTRCPTR can have. Mostly used as INVALID value. + */ +#define RTRCPTR_MAX ((RTRCPTR)UINT32_MAX) + +/** Raw mode context pointer, unsigned integer variant. */ +typedef int32_t RTRCINTPTR; +/** @def RTRCUINTPTR_MAX + * The maximum value a RTRCUINPTR can have. + */ +#define RTRCUINTPTR_MAX ((RTRCUINTPTR)UINT32_MAX) + +/** Raw mode context pointer, signed integer variant. */ +typedef uint32_t RTRCUINTPTR; +/** @def RTRCINTPTR_MIN + * The minimum value a RTRCINPTR can have. + */ +#define RTRCINTPTR_MIN ((RTRCINTPTR)INT32_MIN) +/** @def RTRCINTPTR_MAX + * The maximum value a RTRCINPTR can have. + */ +#define RTRCINTPTR_MAX ((RTRCINTPTR)INT32_MAX) + +/** @} */ + + +/** @defgroup grp_rt_types_cc Current Context Basic Types + * @{ + */ + +/** Current Context Physical Memory Address.*/ +#ifdef IN_RC +typedef RTGCPHYS RTCCPHYS; +#else +typedef RTHCPHYS RTCCPHYS; +#endif +/** Pointer to Current Context Physical Memory Address. */ +typedef RTCCPHYS RT_FAR *PRTCCPHYS; +/** Pointer to const Current Context Physical Memory Address. */ +typedef const RTCCPHYS RT_FAR *PCRTCCPHYS; +/** @def NIL_RTCCPHYS + * NIL CC Physical Address. + * NIL_RTCCPHYS is used to signal an invalid physical address, similar + * to the NULL pointer. + */ +#ifdef IN_RC +# define NIL_RTCCPHYS NIL_RTGCPHYS +#else +# define NIL_RTCCPHYS NIL_RTHCPHYS +#endif + +/** Unsigned integer register in the current context. */ +#if ARCH_BITS == 32 +typedef uint32_t RTCCUINTREG; +#elif ARCH_BITS == 64 +typedef uint64_t RTCCUINTREG; +#elif ARCH_BITS == 16 +typedef uint16_t RTCCUINTREG; +#else +# error "Unsupported ARCH_BITS!" +#endif +/** Pointer to an unsigned integer register in the current context. */ +typedef RTCCUINTREG RT_FAR *PRTCCUINTREG; +/** Pointer to a const unsigned integer register in the current context. */ +typedef RTCCUINTREG const RT_FAR *PCRTCCUINTREG; + +/** Signed integer register in the current context. */ +#if ARCH_BITS == 32 +typedef int32_t RTCCINTREG; +#elif ARCH_BITS == 64 +typedef int64_t RTCCINTREG; +#elif ARCH_BITS == 16 +typedef int16_t RTCCINTREG; +#endif +/** Pointer to a signed integer register in the current context. */ +typedef RTCCINTREG RT_FAR *PRTCCINTREG; +/** Pointer to a const signed integer register in the current context. */ +typedef RTCCINTREG const RT_FAR *PCRTCCINTREG; + +/** Unsigned integer register in the current context. + * @remarks This is for dealing with EAX in 16-bit mode. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +typedef uint32_t RTCCUINTXREG; +#else +typedef RTCCUINTREG RTCCUINTXREG; +#endif +/** Pointer to an unsigned integer register in the current context. */ +typedef RTCCUINTREG RT_FAR *PRTCCUINTXREG; +/** Pointer to a const unsigned integer register in the current context. */ +typedef RTCCUINTREG const RT_FAR *PCRTCCUINTXREG; + +/** Signed integer extended register in the current context. + * @remarks This is for dealing with EAX in 16-bit mode. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +typedef int32_t RTCCINTXREG; +#else +typedef RTCCINTREG RTCCINTXREG; +#endif +/** Pointer to a signed integer extended register in the current context. */ +typedef RTCCINTXREG RT_FAR *PRTCCINTXREG; +/** Pointer to a const signed integer extended register in the current + * context. */ +typedef RTCCINTXREG const RT_FAR *PCRTCCINTXREG; + +/** @def RTCCUINTREG_C + * Defines a constant of RTCCUINTREG type. + * @param a_Value Constant value */ +/** @def RTCCUINTREG_MAX + * Max value that RTCCUINTREG can hold. */ +/** @def RTCCUINTREG_FMT + * Generic IPRT format specifier for RTCCUINTREG. */ +/** @def RTCCUINTREG_XFMT + * Generic IPRT format specifier for RTCCUINTREG, hexadecimal. */ +/** @def RTCCINTREG_C + * Defines a constant of RTCCINTREG type. + * @param a_Value Constant value */ +/** @def RTCCINTREG_MAX + * Max value that RTCCINTREG can hold. */ +/** @def RTCCINTREG_MIN + * Min value that RTCCINTREG can hold. */ +/** @def RTCCINTREG_XFMT + * Generic IPRT format specifier for RTCCINTREG, hexadecimal. */ +#if ARCH_BITS == 32 +# define RTCCUINTREG_C(a_Value) UINT32_C(a_Value) +# define RTCCUINTREG_MAX UINT32_MAX +# define RTCCUINTREG_FMT "RU32" +# define RTCCUINTREG_XFMT "RX32" +# define RTCCINTREG_C(a_Value) INT32_C(a_Value) +# define RTCCINTREG_MAX INT32_MAX +# define RTCCINTREG_MIN INT32_MIN +# define RTCCINTREG_FMT "RI32" +# define RTCCINTREG_XFMT "RX32" +#elif ARCH_BITS == 64 +# define RTCCUINTREG_C(a_Value) UINT64_C(a_Value) +# define RTCCUINTREG_MAX UINT64_MAX +# define RTCCUINTREG_FMT "RU64" +# define RTCCUINTREG_XFMT "RX64" +# define RTCCINTREG_C(a_Value) INT64_C(a_Value) +# define RTCCINTREG_MAX INT64_MAX +# define RTCCINTREG_MIN INT64_MIN +# define RTCCINTREG_FMT "RI64" +# define RTCCINTREG_XFMT "RX64" +#elif ARCH_BITS == 16 +# define RTCCUINTREG_C(a_Value) UINT16_C(a_Value) +# define RTCCUINTREG_MAX UINT16_MAX +# define RTCCUINTREG_FMT "RU16" +# define RTCCUINTREG_XFMT "RX16" +# define RTCCINTREG_C(a_Value) INT16_C(a_Value) +# define RTCCINTREG_MAX INT16_MAX +# define RTCCINTREG_MIN INT16_MIN +# define RTCCINTREG_FMT "RI16" +# define RTCCINTREG_XFMT "RX16" +#else +# error "Unsupported ARCH_BITS!" +#endif +/** @def RTCCUINTXREG_C + * Defines a constant of RTCCUINTXREG type. + * @param a_Value Constant value */ +/** @def RTCCUINTXREG_MAX + * Max value that RTCCUINTXREG can hold. */ +/** @def RTCCUINTXREG_FMT + * Generic IPRT format specifier for RTCCUINTXREG. */ +/** @def RTCCUINTXREG_XFMT + * Generic IPRT format specifier for RTCCUINTXREG, hexadecimal. */ +/** @def RTCCINTXREG_C + * Defines a constant of RTCCINTXREG type. + * @param a_Value Constant value */ +/** @def RTCCINTXREG_MAX + * Max value that RTCCINTXREG can hold. */ +/** @def RTCCINTXREG_MIN + * Min value that RTCCINTXREG can hold. */ +/** @def RTCCINTXREG_FMT + * Generic IPRT format specifier for RTCCINTXREG. */ +/** @def RTCCINTXREG_XFMT + * Generic IPRT format specifier for RTCCINTXREG, hexadecimal. */ +#if ARCH_BITS == 16 && defined(RT_ARCH_X86) +# define RTCCUINTXREG_C(a_Value) UINT32_C(a_Value) +# define RTCCUINTXREG_MAX UINT32_MAX +# define RTCCUINTXREG_FMT "RU32" +# define RTCCUINTXREG_XFMT "RX32" +# define RTCCINTXREG_C(a_Value) INT32_C(a_Value) +# define RTCCINTXREG_MAX INT32_MAX +# define RTCCINTXREG_MIN INT32_MIN +# define RTCCINTXREG_FMT "RI32" +# define RTCCINTXREG_XFMT "RX32" +#else +# define RTCCUINTXREG_C(a_Value) RTCCUINTREG_C(a_Value) +# define RTCCUINTXREG_MAX RTCCUINTREG_MAX +# define RTCCUINTXREG_FMT RTCCUINTREG_FMT +# define RTCCUINTXREG_XFMT RTCCUINTREG_XFMT +# define RTCCINTXREG_C(a_Value) RTCCINTREG_C(a_Value) +# define RTCCINTXREG_MAX RTCCINTREG_MAX +# define RTCCINTXREG_MIN RTCCINTREG_MIN +# define RTCCINTXREG_FMT RTCCINTREG_FMT +# define RTCCINTXREG_XFMT RTCCINTREG_XFMT +#endif +/** @} */ + + + +/** Pointer to a big integer number. */ +typedef struct RTBIGNUM RT_FAR *PRTBIGNUM; +/** Pointer to a const big integer number. */ +typedef struct RTBIGNUM const RT_FAR *PCRTBIGNUM; + + +/** Pointer to a critical section. */ +typedef struct RTCRITSECT RT_FAR *PRTCRITSECT; +/** Pointer to a const critical section. */ +typedef const struct RTCRITSECT RT_FAR *PCRTCRITSECT; + +/** Pointer to a read/write critical section. */ +typedef struct RTCRITSECTRW RT_FAR *PRTCRITSECTRW; +/** Pointer to a const read/write critical section. */ +typedef const struct RTCRITSECTRW RT_FAR *PCRTCRITSECTRW; + + +/** Condition variable handle. */ +typedef R3PTRTYPE(struct RTCONDVARINTERNAL RT_FAR *) RTCONDVAR; +/** Pointer to a condition variable handle. */ +typedef RTCONDVAR RT_FAR *PRTCONDVAR; +/** Nil condition variable handle. */ +#define NIL_RTCONDVAR 0 + +/** Cryptographic (certificate) store handle. */ +typedef R3R0PTRTYPE(struct RTCRSTOREINT RT_FAR *) RTCRSTORE; +/** Pointer to a Cryptographic (certificate) store handle. */ +typedef RTCRSTORE RT_FAR *PRTCRSTORE; +/** Nil Cryptographic (certificate) store handle. */ +#define NIL_RTCRSTORE 0 + +/** Pointer to a const (store) certificate context. */ +typedef struct RTCRCERTCTX const RT_FAR *PCRTCRCERTCTX; + +/** Cryptographic message digest handle. */ +typedef R3R0PTRTYPE(struct RTCRDIGESTINT RT_FAR *) RTCRDIGEST; +/** Pointer to a cryptographic message digest handle. */ +typedef RTCRDIGEST RT_FAR *PRTCRDIGEST; +/** NIL cryptographic message digest handle. */ +#define NIL_RTCRDIGEST (0) + +/** Public key encryption schema handle. */ +typedef R3R0PTRTYPE(struct RTCRPKIXENCRYPTIONINT RT_FAR *) RTCRPKIXENCRYPTION; +/** Pointer to a public key encryption schema handle. */ +typedef RTCRPKIXENCRYPTION RT_FAR *PRTCRPKIXENCRYPTION; +/** NIL public key encryption schema handle */ +#define NIL_RTCRPKIXENCRYPTION (0) + +/** Public key signature schema handle. */ +typedef R3R0PTRTYPE(struct RTCRPKIXSIGNATUREINT RT_FAR *) RTCRPKIXSIGNATURE; +/** Pointer to a public key signature schema handle. */ +typedef RTCRPKIXSIGNATURE RT_FAR *PRTCRPKIXSIGNATURE; +/** NIL public key signature schema handle */ +#define NIL_RTCRPKIXSIGNATURE (0) + +/** X.509 certificate paths builder & validator handle. */ +typedef R3R0PTRTYPE(struct RTCRX509CERTPATHSINT RT_FAR *) RTCRX509CERTPATHS; +/** Pointer to a certificate paths builder & validator handle. */ +typedef RTCRX509CERTPATHS RT_FAR *PRTCRX509CERTPATHS; +/** Nil certificate paths builder & validator handle. */ +#define NIL_RTCRX509CERTPATHS 0 + +/** Directory handle. */ +typedef struct RTDIRINTERNAL *RTDIR; +/** Pointer to directory handle. */ +typedef RTDIR *PRTDIR; +/** NIL directory handle. */ +#define NIL_RTDIR ((RTDIR)0) + +/** File handle. */ +typedef R3R0PTRTYPE(struct RTFILEINT RT_FAR *) RTFILE; +/** Pointer to file handle. */ +typedef RTFILE RT_FAR *PRTFILE; +/** Nil file handle. */ +#define NIL_RTFILE ((RTFILE)~(RTHCINTPTR)0) + +/** Async I/O request handle. */ +typedef R3PTRTYPE(struct RTFILEAIOREQINTERNAL RT_FAR *) RTFILEAIOREQ; +/** Pointer to an async I/O request handle. */ +typedef RTFILEAIOREQ RT_FAR *PRTFILEAIOREQ; +/** Nil request handle. */ +#define NIL_RTFILEAIOREQ 0 + +/** Async I/O completion context handle. */ +typedef R3PTRTYPE(struct RTFILEAIOCTXINTERNAL RT_FAR *) RTFILEAIOCTX; +/** Pointer to an async I/O completion context handle. */ +typedef RTFILEAIOCTX RT_FAR *PRTFILEAIOCTX; +/** Nil context handle. */ +#define NIL_RTFILEAIOCTX 0 + +/** ISO image maker handle. */ +typedef struct RTFSISOMAKERINT RT_FAR *RTFSISOMAKER; +/** Pointer to an ISO image maker handle. */ +typedef RTFSISOMAKER RT_FAR *PRTFSISOMAKER; +/** NIL ISO maker handle. */ +#define NIL_RTFSISOMAKER ((RTFSISOMAKER)0) + +/** INI-file handle. */ +typedef struct RTINIFILEINT RT_FAR *RTINIFILE; +/** Pointer to an INI-file handle. */ +typedef RTINIFILE RT_FAR *PRTINIFILE; +/** NIL INI-file handle. */ +#define NIL_RTINIFILE ((RTINIFILE)0) + +/** Loader module handle. */ +typedef R3R0PTRTYPE(struct RTLDRMODINTERNAL RT_FAR *) RTLDRMOD; +/** Pointer to a loader module handle. */ +typedef RTLDRMOD RT_FAR *PRTLDRMOD; +/** Nil loader module handle. */ +#define NIL_RTLDRMOD 0 + +/** Lock validator class handle. */ +typedef R3R0PTRTYPE(struct RTLOCKVALCLASSINT RT_FAR *) RTLOCKVALCLASS; +/** Pointer to a lock validator class handle. */ +typedef RTLOCKVALCLASS RT_FAR *PRTLOCKVALCLASS; +/** Nil lock validator class handle. */ +#define NIL_RTLOCKVALCLASS ((RTLOCKVALCLASS)0) + +/** Ring-0 memory object handle. */ +typedef R0PTRTYPE(struct RTR0MEMOBJINTERNAL RT_FAR *) RTR0MEMOBJ; +/** Pointer to a Ring-0 memory object handle. */ +typedef RTR0MEMOBJ RT_FAR *PRTR0MEMOBJ; +/** Nil ring-0 memory object handle. */ +#define NIL_RTR0MEMOBJ 0 + +/** Native thread handle. */ +typedef RTHCUINTPTR RTNATIVETHREAD; +/** Pointer to an native thread handle. */ +typedef RTNATIVETHREAD RT_FAR *PRTNATIVETHREAD; +/** Nil native thread handle. */ +#define NIL_RTNATIVETHREAD (~(RTNATIVETHREAD)0) + +/** Pipe handle. */ +typedef R3R0PTRTYPE(struct RTPIPEINTERNAL RT_FAR *) RTPIPE; +/** Pointer to a pipe handle. */ +typedef RTPIPE RT_FAR *PRTPIPE; +/** Nil pipe handle. + * @remarks This is not 0 because of UNIX and OS/2 handle values. Take care! */ +#define NIL_RTPIPE ((RTPIPE)RTHCUINTPTR_MAX) + +/** @typedef RTPOLLSET + * Poll set handle. */ +typedef R3R0PTRTYPE(struct RTPOLLSETINTERNAL RT_FAR *) RTPOLLSET; +/** Pointer to a poll set handle. */ +typedef RTPOLLSET RT_FAR *PRTPOLLSET; +/** Nil poll set handle handle. */ +#define NIL_RTPOLLSET ((RTPOLLSET)0) + +/** Process identifier. */ +typedef uint32_t RTPROCESS; +/** Pointer to a process identifier. */ +typedef RTPROCESS RT_FAR *PRTPROCESS; +/** Nil process identifier. */ +#define NIL_RTPROCESS (~(RTPROCESS)0) + +/** Process ring-0 handle. */ +typedef RTR0UINTPTR RTR0PROCESS; +/** Pointer to a ring-0 process handle. */ +typedef RTR0PROCESS RT_FAR *PRTR0PROCESS; +/** Nil ring-0 process handle. */ +#define NIL_RTR0PROCESS (~(RTR0PROCESS)0) + +/** @typedef RTSEMEVENT + * Event Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMEVENTINTERNAL RT_FAR *) RTSEMEVENT; +/** Pointer to an event semaphore handle. */ +typedef RTSEMEVENT RT_FAR *PRTSEMEVENT; +/** Nil event semaphore handle. */ +#define NIL_RTSEMEVENT 0 + +/** @typedef RTSEMEVENTMULTI + * Event Multiple Release Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMEVENTMULTIINTERNAL RT_FAR *) RTSEMEVENTMULTI; +/** Pointer to an event multiple release semaphore handle. */ +typedef RTSEMEVENTMULTI RT_FAR *PRTSEMEVENTMULTI; +/** Nil multiple release event semaphore handle. */ +#define NIL_RTSEMEVENTMULTI 0 + +/** @typedef RTSEMFASTMUTEX + * Fast mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMFASTMUTEXINTERNAL RT_FAR *) RTSEMFASTMUTEX; +/** Pointer to a fast mutex semaphore handle. */ +typedef RTSEMFASTMUTEX RT_FAR *PRTSEMFASTMUTEX; +/** Nil fast mutex semaphore handle. */ +#define NIL_RTSEMFASTMUTEX 0 + +/** @typedef RTSEMMUTEX + * Mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMMUTEXINTERNAL RT_FAR *) RTSEMMUTEX; +/** Pointer to a mutex semaphore handle. */ +typedef RTSEMMUTEX RT_FAR *PRTSEMMUTEX; +/** Nil mutex semaphore handle. */ +#define NIL_RTSEMMUTEX 0 + +/** @typedef RTSEMSPINMUTEX + * Spinning mutex Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMSPINMUTEXINTERNAL RT_FAR *) RTSEMSPINMUTEX; +/** Pointer to a spinning mutex semaphore handle. */ +typedef RTSEMSPINMUTEX RT_FAR *PRTSEMSPINMUTEX; +/** Nil spinning mutex semaphore handle. */ +#define NIL_RTSEMSPINMUTEX 0 + +/** @typedef RTSEMRW + * Read/Write Semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMRWINTERNAL RT_FAR *) RTSEMRW; +/** Pointer to a read/write semaphore handle. */ +typedef RTSEMRW RT_FAR *PRTSEMRW; +/** Nil read/write semaphore handle. */ +#define NIL_RTSEMRW 0 + +/** @typedef RTSEMXROADS + * Crossroads semaphore handle. */ +typedef R3R0PTRTYPE(struct RTSEMXROADSINTERNAL RT_FAR *) RTSEMXROADS; +/** Pointer to a crossroads semaphore handle. */ +typedef RTSEMXROADS RT_FAR *PRTSEMXROADS; +/** Nil crossroads semaphore handle. */ +#define NIL_RTSEMXROADS ((RTSEMXROADS)0) + +/** Spinlock handle. */ +typedef R3R0PTRTYPE(struct RTSPINLOCKINTERNAL RT_FAR *) RTSPINLOCK; +/** Pointer to a spinlock handle. */ +typedef RTSPINLOCK RT_FAR *PRTSPINLOCK; +/** Nil spinlock handle. */ +#define NIL_RTSPINLOCK 0 + +/** Socket handle. */ +typedef R3R0PTRTYPE(struct RTSOCKETINT RT_FAR *) RTSOCKET; +/** Pointer to socket handle. */ +typedef RTSOCKET RT_FAR *PRTSOCKET; +/** Nil socket handle. */ +#define NIL_RTSOCKET ((RTSOCKET)0) + +/** Pointer to a RTTCPSERVER handle. */ +typedef struct RTTCPSERVER RT_FAR *PRTTCPSERVER; +/** Pointer to a RTTCPSERVER handle. */ +typedef PRTTCPSERVER RT_FAR *PPRTTCPSERVER; +/** Nil RTTCPSERVER handle. */ +#define NIL_RTTCPSERVER ((PRTTCPSERVER)0) + +/** Pointer to a RTUDPSERVER handle. */ +typedef struct RTUDPSERVER RT_FAR *PRTUDPSERVER; +/** Pointer to a RTUDPSERVER handle. */ +typedef PRTUDPSERVER RT_FAR *PPRTUDPSERVER; +/** Nil RTUDPSERVER handle. */ +#define NIL_RTUDPSERVER ((PRTUDPSERVER)0) + +/** Thread handle.*/ +typedef R3R0PTRTYPE(struct RTTHREADINT RT_FAR *) RTTHREAD; +/** Pointer to thread handle. */ +typedef RTTHREAD RT_FAR *PRTTHREAD; +/** Nil thread handle. */ +#define NIL_RTTHREAD 0 + +/** Thread context switching hook handle. */ +typedef R0PTRTYPE(struct RTTHREADCTXHOOKINT RT_FAR *) RTTHREADCTXHOOK; +/** Pointer to Thread context switching hook handle. */ +typedef RTTHREADCTXHOOK RT_FAR *PRTTHREADCTXHOOK; +/** Nil Thread context switching hook handle. */ +#define NIL_RTTHREADCTXHOOK ((RTTHREADCTXHOOK)0) + +/** A TLS index. */ +typedef RTHCINTPTR RTTLS; +/** Pointer to a TLS index. */ +typedef RTTLS RT_FAR *PRTTLS; +/** Pointer to a const TLS index. */ +typedef RTTLS const RT_FAR *PCRTTLS; +/** NIL TLS index value. */ +#define NIL_RTTLS ((RTTLS)-1) + +/** Trace buffer handle. + * @remarks This is not a R3/R0 type like most other handles! + */ +typedef struct RTTRACEBUFINT RT_FAR *RTTRACEBUF; +/** Pointer to a trace buffer handle. */ +typedef RTTRACEBUF RT_FAR *PRTTRACEBUF; +/** Nil trace buffer handle. */ +#define NIL_RTTRACEBUF ((RTTRACEBUF)0) +/** The handle of the default trace buffer. + * This can be used with any of the RTTraceBufAdd APIs. */ +#define RTTRACEBUF_DEFAULT ((RTTRACEBUF)-2) + +/** Handle to a simple heap. */ +typedef R3R0PTRTYPE(struct RTHEAPSIMPLEINTERNAL RT_FAR *) RTHEAPSIMPLE; +/** Pointer to a handle to a simple heap. */ +typedef RTHEAPSIMPLE RT_FAR *PRTHEAPSIMPLE; +/** NIL simple heap handle. */ +#define NIL_RTHEAPSIMPLE ((RTHEAPSIMPLE)0) + +/** Handle to an offset based heap. */ +typedef R3R0PTRTYPE(struct RTHEAPOFFSETINTERNAL RT_FAR *) RTHEAPOFFSET; +/** Pointer to a handle to an offset based heap. */ +typedef RTHEAPOFFSET RT_FAR *PRTHEAPOFFSET; +/** NIL offset based heap handle. */ +#define NIL_RTHEAPOFFSET ((RTHEAPOFFSET)0) + +/** Handle to an environment block. */ +typedef R3PTRTYPE(struct RTENVINTERNAL RT_FAR *) RTENV; +/** Pointer to a handle to an environment block. */ +typedef RTENV RT_FAR *PRTENV; +/** NIL simple heap handle. */ +#define NIL_RTENV ((RTENV)0) + +/** A CPU identifier. + * @remarks This doesn't have to correspond to the APIC ID (intel/amd). Nor + * does it have to correspond to the bits in the affinity mask, at + * least not until we've sorted out Windows NT. */ +typedef uint32_t RTCPUID; +/** Pointer to a CPU identifier. */ +typedef RTCPUID RT_FAR *PRTCPUID; +/** Pointer to a const CPU identifier. */ +typedef RTCPUID const RT_FAR *PCRTCPUID; +/** Nil CPU Id. */ +#define NIL_RTCPUID ((RTCPUID)~0) + +/** The maximum number of CPUs a set can contain and IPRT is able + * to reference. (Should be max of support arch/platforms.) + * @remarks Must be a multiple of 64 (see RTCPUSET). */ +#if defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64) +# define RTCPUSET_MAX_CPUS 256 +#elif defined(RT_ARCH_SPARC) || defined(RT_ARCH_SPARC64) +# define RTCPUSET_MAX_CPUS 1024 +#else +# define RTCPUSET_MAX_CPUS 64 +#endif +/** A CPU set. + * @note Treat this as an opaque type and always use RTCpuSet* for + * manipulating it. */ +typedef struct RTCPUSET +{ + /** The bitmap. */ + uint64_t bmSet[RTCPUSET_MAX_CPUS / 64]; +} RTCPUSET; +/** Pointer to a CPU set. */ +typedef RTCPUSET RT_FAR *PRTCPUSET; +/** Pointer to a const CPU set. */ +typedef RTCPUSET const RT_FAR *PCRTCPUSET; + +/** A handle table handle. */ +typedef R3R0PTRTYPE(struct RTHANDLETABLEINT RT_FAR *) RTHANDLETABLE; +/** A pointer to a handle table handle. */ +typedef RTHANDLETABLE RT_FAR *PRTHANDLETABLE; +/** @def NIL_RTHANDLETABLE + * NIL handle table handle. */ +#define NIL_RTHANDLETABLE ((RTHANDLETABLE)0) + +/** A handle to a low resolution timer. */ +typedef R3R0PTRTYPE(struct RTTIMERLRINT RT_FAR *) RTTIMERLR; +/** A pointer to a low resolution timer handle. */ +typedef RTTIMERLR RT_FAR *PRTTIMERLR; +/** @def NIL_RTTIMERLR + * NIL low resolution timer handle value. */ +#define NIL_RTTIMERLR ((RTTIMERLR)0) + +/** Handle to a random number generator. */ +typedef R3R0PTRTYPE(struct RTRANDINT RT_FAR *) RTRAND; +/** Pointer to a random number generator handle. */ +typedef RTRAND RT_FAR *PRTRAND; +/** NIL random number generator handle value. */ +#define NIL_RTRAND ((RTRAND)0) + +/** Debug address space handle. */ +typedef R3R0PTRTYPE(struct RTDBGASINT RT_FAR *) RTDBGAS; +/** Pointer to a debug address space handle. */ +typedef RTDBGAS RT_FAR *PRTDBGAS; +/** NIL debug address space handle. */ +#define NIL_RTDBGAS ((RTDBGAS)0) + +/** Debug module handle. */ +typedef R3R0PTRTYPE(struct RTDBGMODINT RT_FAR *) RTDBGMOD; +/** Pointer to a debug module handle. */ +typedef RTDBGMOD RT_FAR *PRTDBGMOD; +/** NIL debug module handle. */ +#define NIL_RTDBGMOD ((RTDBGMOD)0) + +/** Manifest handle. */ +typedef struct RTMANIFESTINT RT_FAR *RTMANIFEST; +/** Pointer to a manifest handle. */ +typedef RTMANIFEST RT_FAR *PRTMANIFEST; +/** NIL manifest handle. */ +#define NIL_RTMANIFEST ((RTMANIFEST)~(uintptr_t)0) + +/** Memory pool handle. */ +typedef R3R0PTRTYPE(struct RTMEMPOOLINT RT_FAR *) RTMEMPOOL; +/** Pointer to a memory pool handle. */ +typedef RTMEMPOOL RT_FAR *PRTMEMPOOL; +/** NIL memory pool handle. */ +#define NIL_RTMEMPOOL ((RTMEMPOOL)0) +/** The default memory pool handle. */ +#define RTMEMPOOL_DEFAULT ((RTMEMPOOL)-2) + +/** String cache handle. */ +typedef R3R0PTRTYPE(struct RTSTRCACHEINT RT_FAR *) RTSTRCACHE; +/** Pointer to a string cache handle. */ +typedef RTSTRCACHE RT_FAR *PRTSTRCACHE; +/** NIL string cache handle. */ +#define NIL_RTSTRCACHE ((RTSTRCACHE)0) +/** The default string cache handle. */ +#define RTSTRCACHE_DEFAULT ((RTSTRCACHE)-2) + + +/** Virtual Filesystem handle. */ +typedef struct RTVFSINTERNAL RT_FAR *RTVFS; +/** Pointer to a VFS handle. */ +typedef RTVFS RT_FAR *PRTVFS; +/** A NIL VFS handle. */ +#define NIL_RTVFS ((RTVFS)~(uintptr_t)0) + +/** Virtual Filesystem base object handle. */ +typedef struct RTVFSOBJINTERNAL RT_FAR *RTVFSOBJ; +/** Pointer to a VFS base object handle. */ +typedef RTVFSOBJ RT_FAR *PRTVFSOBJ; +/** A NIL VFS base object handle. */ +#define NIL_RTVFSOBJ ((RTVFSOBJ)~(uintptr_t)0) + +/** Virtual Filesystem directory handle. */ +typedef struct RTVFSDIRINTERNAL RT_FAR *RTVFSDIR; +/** Pointer to a VFS directory handle. */ +typedef RTVFSDIR RT_FAR *PRTVFSDIR; +/** A NIL VFS directory handle. */ +#define NIL_RTVFSDIR ((RTVFSDIR)~(uintptr_t)0) + +/** Virtual Filesystem filesystem stream handle. */ +typedef struct RTVFSFSSTREAMINTERNAL RT_FAR *RTVFSFSSTREAM; +/** Pointer to a VFS filesystem stream handle. */ +typedef RTVFSFSSTREAM RT_FAR *PRTVFSFSSTREAM; +/** A NIL VFS filesystem stream handle. */ +#define NIL_RTVFSFSSTREAM ((RTVFSFSSTREAM)~(uintptr_t)0) + +/** Virtual Filesystem I/O stream handle. */ +typedef struct RTVFSIOSTREAMINTERNAL RT_FAR *RTVFSIOSTREAM; +/** Pointer to a VFS I/O stream handle. */ +typedef RTVFSIOSTREAM RT_FAR *PRTVFSIOSTREAM; +/** A NIL VFS I/O stream handle. */ +#define NIL_RTVFSIOSTREAM ((RTVFSIOSTREAM)~(uintptr_t)0) + +/** Virtual Filesystem file handle. */ +typedef struct RTVFSFILEINTERNAL RT_FAR *RTVFSFILE; +/** Pointer to a VFS file handle. */ +typedef RTVFSFILE RT_FAR *PRTVFSFILE; +/** A NIL VFS file handle. */ +#define NIL_RTVFSFILE ((RTVFSFILE)~(uintptr_t)0) + +/** Virtual Filesystem symbolic link handle. */ +typedef struct RTVFSSYMLINKINTERNAL RT_FAR *RTVFSSYMLINK; +/** Pointer to a VFS symbolic link handle. */ +typedef RTVFSSYMLINK RT_FAR *PRTVFSSYMLINK; +/** A NIL VFS symbolic link handle. */ +#define NIL_RTVFSSYMLINK ((RTVFSSYMLINK)~(uintptr_t)0) + +/** Async I/O manager handle. */ +typedef struct RTAIOMGRINT RT_FAR *RTAIOMGR; +/** Pointer to a async I/O manager handle. */ +typedef RTAIOMGR RT_FAR *PRTAIOMGR; +/** A NIL async I/O manager handle. */ +#define NIL_RTAIOMGR ((RTAIOMGR)~(uintptr_t)0) + +/** Async I/O manager file handle. */ +typedef struct RTAIOMGRFILEINT RT_FAR *RTAIOMGRFILE; +/** Pointer to a async I/O manager file handle. */ +typedef RTAIOMGRFILE RT_FAR *PRTAIOMGRFILE; +/** A NIL async I/O manager file handle. */ +#define NIL_RTAIOMGRFILE ((RTAIOMGRFILE)~(uintptr_t)0) + +/** Kernel module information record handle. */ +typedef struct RTKRNLMODINFOINT RT_FAR *RTKRNLMODINFO; +/** Pointer to a kernel information record handle. */ +typedef RTKRNLMODINFO RT_FAR *PRTKRNLMODINFO; +/** A NIL kernel module information record handle. */ +#define NIL_RTKRNLMODINFO ((RTKRNLMODINFO)~(uintptr_t)0); + +/** + * Handle type. + * + * This is usually used together with RTHANDLEUNION. + */ +typedef enum RTHANDLETYPE +{ + /** The invalid zero value. */ + RTHANDLETYPE_INVALID = 0, + /** File handle. */ + RTHANDLETYPE_FILE, + /** Pipe handle */ + RTHANDLETYPE_PIPE, + /** Socket handle. */ + RTHANDLETYPE_SOCKET, + /** Thread handle. */ + RTHANDLETYPE_THREAD, + /** The end of the valid values. */ + RTHANDLETYPE_END, + /** The 32-bit type blow up. */ + RTHANDLETYPE_32BIT_HACK = 0x7fffffff +} RTHANDLETYPE; +/** Pointer to a handle type. */ +typedef RTHANDLETYPE RT_FAR *PRTHANDLETYPE; + +/** + * Handle union. + * + * This is usually used together with RTHANDLETYPE or as RTHANDLE. + */ +typedef union RTHANDLEUNION +{ + RTFILE hFile; /**< File handle. */ + RTPIPE hPipe; /**< Pipe handle. */ + RTSOCKET hSocket; /**< Socket handle. */ + RTTHREAD hThread; /**< Thread handle. */ + /** Generic integer handle value. + * Note that RTFILE is not yet pointer sized, so accessing it via this member + * isn't necessarily safe or fully portable. */ + RTHCUINTPTR uInt; +} RTHANDLEUNION; +/** Pointer to a handle union. */ +typedef RTHANDLEUNION RT_FAR *PRTHANDLEUNION; +/** Pointer to a const handle union. */ +typedef RTHANDLEUNION const RT_FAR *PCRTHANDLEUNION; + +/** + * Generic handle. + */ +typedef struct RTHANDLE +{ + /** The handle type. */ + RTHANDLETYPE enmType; + /** The handle value. */ + RTHANDLEUNION u; +} RTHANDLE; +/** Pointer to a generic handle. */ +typedef RTHANDLE RT_FAR *PRTHANDLE; +/** Pointer to a const generic handle. */ +typedef RTHANDLE const RT_FAR *PCRTHANDLE; + + +/** + * Standard handles. + * + * @remarks These have the correct file descriptor values for unixy systems and + * can be used directly in code specific to those platforms. + */ +typedef enum RTHANDLESTD +{ + /** Invalid standard handle. */ + RTHANDLESTD_INVALID = -1, + /** The standard input handle. */ + RTHANDLESTD_INPUT = 0, + /** The standard output handle. */ + RTHANDLESTD_OUTPUT, + /** The standard error handle. */ + RTHANDLESTD_ERROR, + /** The typical 32-bit type hack. */ + RTHANDLESTD_32BIT_HACK = 0x7fffffff +} RTHANDLESTD; + + +/** + * Error info. + * + * See RTErrInfo*. + */ +typedef struct RTERRINFO +{ + /** Flags, see RTERRINFO_FLAGS_XXX. */ + uint32_t fFlags; + /** The status code. */ + int32_t rc; + /** The size of the message */ + size_t cbMsg; + /** The error buffer. */ + char *pszMsg; + /** Reserved for future use. */ + void *apvReserved[2]; +} RTERRINFO; +/** Pointer to an error info structure. */ +typedef RTERRINFO RT_FAR *PRTERRINFO; +/** Pointer to a const error info structure. */ +typedef RTERRINFO const RT_FAR *PCRTERRINFO; + +/** + * Static error info structure, see RTErrInfoInitStatic. + */ +typedef struct RTERRINFOSTATIC +{ + /** The core error info. */ + RTERRINFO Core; + /** The static message buffer. */ + char szMsg[3072]; +} RTERRINFOSTATIC; +/** Pointer to a error info buffer. */ +typedef RTERRINFOSTATIC RT_FAR *PRTERRINFOSTATIC; +/** Pointer to a const static error info buffer. */ +typedef RTERRINFOSTATIC const RT_FAR *PCRTERRINFOSTATIC; + + +/** + * UUID data type. + * + * See RTUuid*. + * + * @remarks IPRT defines that the first three integers in the @c Gen struct + * interpretation are in little endian representation. This is + * different to many other UUID implementation, and requires + * conversion if you need to achieve consistent results. + */ +typedef union RTUUID +{ + /** 8-bit view. */ + uint8_t au8[16]; + /** 16-bit view. */ + uint16_t au16[8]; + /** 32-bit view. */ + uint32_t au32[4]; + /** 64-bit view. */ + uint64_t au64[2]; + /** The way the UUID is declared by the DCE specification. */ + struct + { + uint32_t u32TimeLow; + uint16_t u16TimeMid; + uint16_t u16TimeHiAndVersion; + uint8_t u8ClockSeqHiAndReserved; + uint8_t u8ClockSeqLow; + uint8_t au8Node[6]; + } Gen; +} RTUUID; +/** Pointer to UUID data. */ +typedef RTUUID RT_FAR *PRTUUID; +/** Pointer to readonly UUID data. */ +typedef const RTUUID RT_FAR *PCRTUUID; + +/** Initializes a RTUUID structure with all zeros (RTUuidIsNull() true). */ +#define RTUUID_INITIALIZE_NULL { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +/** UUID string maximum length. */ +#define RTUUID_STR_LENGTH 37 + + +/** Compression handle. */ +typedef struct RTZIPCOMP RT_FAR *PRTZIPCOMP; +/** Decompressor handle. */ +typedef struct RTZIPDECOMP RT_FAR *PRTZIPDECOMP; + + +/** + * Unicode Code Point. + */ +typedef uint32_t RTUNICP; +/** Pointer to an Unicode Code Point. */ +typedef RTUNICP RT_FAR *PRTUNICP; +/** Pointer to an Unicode Code Point. */ +typedef const RTUNICP RT_FAR *PCRTUNICP; +/** Max value a RTUNICP type can hold. */ +#define RTUNICP_MAX ( ~(RTUNICP)0 ) +/** Invalid code point. + * This is returned when encountered invalid encodings or invalid + * unicode code points. */ +#define RTUNICP_INVALID ( UINT32_C(0xfffffffe) ) + + +/** + * UTF-16 character. + * @remark wchar_t is not usable since it's compiler defined. + * @remark When we use the term character we're not talking about unicode code point, but + * the basic unit of the string encoding. Thus cwc - count of wide chars - means + * count of RTUTF16; cuc - count of unicode chars - means count of RTUNICP; + * and cch means count of the typedef 'char', which is assumed to be an octet. + */ +typedef uint16_t RTUTF16; +/** Pointer to a UTF-16 character. */ +typedef RTUTF16 RT_FAR *PRTUTF16; +/** Pointer to a const UTF-16 character. */ +typedef const RTUTF16 RT_FAR *PCRTUTF16; + + +/** + * String tuple to go with the RT_STR_TUPLE macro. + */ +typedef struct RTSTRTUPLE +{ + /** The string. */ + const char *psz; + /** The string length. */ + size_t cch; +} RTSTRTUPLE; +/** Pointer to a string tuple. */ +typedef RTSTRTUPLE RT_FAR *PRTSTRTUPLE; +/** Pointer to a const string tuple. */ +typedef RTSTRTUPLE const RT_FAR *PCRTSTRTUPLE; + +/** + * Wait for ever if we have to. + */ +#define RT_INDEFINITE_WAIT (~0U) + + +/** + * Generic process callback. + * + * @returns VBox status code. Failure will cancel the operation. + * @param uPercentage The percentage of the operation which has been completed. + * @param pvUser The user specified argument. + */ +typedef DECLCALLBACK(int) FNRTPROGRESS(unsigned uPrecentage, void *pvUser); +/** Pointer to a generic progress callback function, FNRTPROCESS(). */ +typedef FNRTPROGRESS *PFNRTPROGRESS; + +/** + * Generic vprintf-like callback function for dumpers. + * + * @param pvUser User argument. + * @param pszFormat The format string. + * @param va Arguments for the format string. + */ +typedef DECLCALLBACK(void) FNRTDUMPPRINTFV(void *pvUser, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0); +/** Pointer to a generic printf-like function for dumping. */ +typedef FNRTDUMPPRINTFV *PFNRTDUMPPRINTFV; + + +/** + * A point in a two dimentional coordinate system. + */ +typedef struct RTPOINT +{ + /** X coordinate. */ + int32_t x; + /** Y coordinate. */ + int32_t y; +} RTPOINT; +/** Pointer to a point. */ +typedef RTPOINT RT_FAR *PRTPOINT; +/** Pointer to a const point. */ +typedef const RTPOINT RT_FAR *PCRTPOINT; + + +/** + * Rectangle data type, double point. + */ +typedef struct RTRECT +{ + /** left X coordinate. */ + int32_t xLeft; + /** top Y coordinate. */ + int32_t yTop; + /** right X coordinate. (exclusive) */ + int32_t xRight; + /** bottom Y coordinate. (exclusive) */ + int32_t yBottom; +} RTRECT; +/** Pointer to a double point rectangle. */ +typedef RTRECT RT_FAR *PRTRECT; +/** Pointer to a const double point rectangle. */ +typedef const RTRECT RT_FAR *PCRTRECT; + + +/** + * Rectangle data type, point + size. + */ +typedef struct RTRECT2 +{ + /** X coordinate. + * Unless stated otherwise, this is the top left corner. */ + int32_t x; + /** Y coordinate. + * Unless stated otherwise, this is the top left corner. */ + int32_t y; + /** The width. + * Unless stated otherwise, this is to the right of (x,y) and will not + * be a negative number. */ + int32_t cx; + /** The height. + * Unless stated otherwise, this is down from (x,y) and will not be a + * negative number. */ + int32_t cy; +} RTRECT2; +/** Pointer to a point + size rectangle. */ +typedef RTRECT2 RT_FAR *PRTRECT2; +/** Pointer to a const point + size rectangle. */ +typedef const RTRECT2 RT_FAR *PCRTRECT2; + + +/** + * The size of a rectangle. + */ +typedef struct RTRECTSIZE +{ + /** The width (along the x-axis). */ + uint32_t cx; + /** The height (along the y-axis). */ + uint32_t cy; +} RTRECTSIZE; +/** Pointer to a rectangle size. */ +typedef RTRECTSIZE RT_FAR *PRTRECTSIZE; +/** Pointer to a const rectangle size. */ +typedef const RTRECTSIZE RT_FAR *PCRTRECTSIZE; + + +/** + * Ethernet MAC address. + * + * The first 24 bits make up the Organisationally Unique Identifier (OUI), + * where the first bit (little endian) indicates multicast (set) / unicast, + * and the second bit indicates locally (set) / global administered. If all + * bits are set, it's a broadcast. + */ +typedef union RTMAC +{ + /** @todo add a bitfield view of this stuff. */ + /** 8-bit view. */ + uint8_t au8[6]; + /** 16-bit view. */ + uint16_t au16[3]; +} RTMAC; +/** Pointer to a MAC address. */ +typedef RTMAC RT_FAR *PRTMAC; +/** Pointer to a readonly MAC address. */ +typedef const RTMAC RT_FAR *PCRTMAC; + + +/** Pointer to a lock validator record. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALRECEXCL RT_FAR *PRTLOCKVALRECEXCL; +/** Pointer to a record of one ownership share. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALRECSHRD RT_FAR *PRTLOCKVALRECSHRD; +/** Pointer to a lock validator source position. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALSRCPOS RT_FAR *PRTLOCKVALSRCPOS; +/** Pointer to a const lock validator source position. + * The structure definition is found in iprt/lockvalidator.h. */ +typedef struct RTLOCKVALSRCPOS const RT_FAR *PCRTLOCKVALSRCPOS; + +/** @name Special sub-class values. + * The range 16..UINT32_MAX is available to the user, the range 0..15 is + * reserved for the lock validator. In the user range the locks can only be + * taking in ascending order. + * @{ */ +/** Invalid value. */ +#define RTLOCKVAL_SUB_CLASS_INVALID UINT32_C(0) +/** Not allowed to be taken with any other locks in the same class. + * This is the recommended value. */ +#define RTLOCKVAL_SUB_CLASS_NONE UINT32_C(1) +/** Any order is allowed within the class. */ +#define RTLOCKVAL_SUB_CLASS_ANY UINT32_C(2) +/** The first user value. */ +#define RTLOCKVAL_SUB_CLASS_USER UINT32_C(16) +/** @} */ + + +/** + * Digest types. + */ +typedef enum RTDIGESTTYPE +{ + /** Invalid digest value. */ + RTDIGESTTYPE_INVALID = 0, + /** Unknown digest type. */ + RTDIGESTTYPE_UNKNOWN, + /** CRC32 checksum. */ + RTDIGESTTYPE_CRC32, + /** CRC64 checksum. */ + RTDIGESTTYPE_CRC64, + /** MD2 checksum (unsafe!). */ + RTDIGESTTYPE_MD2, + /** MD4 checksum (unsafe!!). */ + RTDIGESTTYPE_MD4, + /** MD5 checksum (unsafe!). */ + RTDIGESTTYPE_MD5, + /** SHA-1 checksum (unsafe!). */ + RTDIGESTTYPE_SHA1, + /** SHA-224 checksum. */ + RTDIGESTTYPE_SHA224, + /** SHA-256 checksum. */ + RTDIGESTTYPE_SHA256, + /** SHA-384 checksum. */ + RTDIGESTTYPE_SHA384, + /** SHA-512 checksum. */ + RTDIGESTTYPE_SHA512, + /** SHA-512/224 checksum. */ + RTDIGESTTYPE_SHA512T224, + /** SHA-512/256 checksum. */ + RTDIGESTTYPE_SHA512T256, + /** End of valid types. */ + RTDIGESTTYPE_END, + /** Usual 32-bit type blowup. */ + RTDIGESTTYPE_32BIT_HACK = 0x7fffffff +} RTDIGESTTYPE; + +/** + * Process exit codes. + */ +typedef enum RTEXITCODE +{ + /** Success. */ + RTEXITCODE_SUCCESS = 0, + /** General failure. */ + RTEXITCODE_FAILURE = 1, + /** Invalid arguments. */ + RTEXITCODE_SYNTAX = 2, + /** Initialization failure (usually IPRT, but could be used for other + * components as well). */ + RTEXITCODE_INIT = 3, + /** Test skipped. */ + RTEXITCODE_SKIPPED = 4, + /** The end of valid exit codes. */ + RTEXITCODE_END, + /** The usual 32-bit type hack. */ + RTEXITCODE_32BIT_HACK = 0x7fffffff +} RTEXITCODE; + +/** + * Range descriptor. + */ +typedef struct RTRANGE +{ + /** Start offset. */ + uint64_t offStart; + /** Range size. */ + size_t cbRange; +} RTRANGE; +/** Pointer to a range descriptor. */ +typedef RTRANGE RT_FAR *PRTRANGE; +/** Pointer to a readonly range descriptor. */ +typedef const RTRANGE RT_FAR *PCRTRANGE; + + +/** + * Generic pointer union. + */ +typedef union RTPTRUNION +{ + /** Pointer into the void. */ + void RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char RT_FAR *pch; + /** Pointer to char value. */ + unsigned char RT_FAR *puch; + /** Pointer to a int value. */ + int RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int RT_FAR *pu; + /** Pointer to a long value. */ + long RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + PRTUTF16 pwc; + /** Pointer to a UUID character. */ + PRTUUID pUuid; +} RTPTRUNION; +/** Pointer to a pointer union. */ +typedef RTPTRUNION RT_FAR *PRTPTRUNION; + +/** + * Generic const pointer union. + */ +typedef union RTCPTRUNION +{ + /** Pointer into the void. */ + void const RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char const RT_FAR *pch; + /** Pointer to char value. */ + unsigned char const RT_FAR *puch; + /** Pointer to a int value. */ + int const RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int const RT_FAR *pu; + /** Pointer to a long value. */ + long const RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long const RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t const RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t const RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t const RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t const RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + PCRTUTF16 pwc; + /** Pointer to a UUID character. */ + PCRTUUID pUuid; +} RTCPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTCPTRUNION RT_FAR *PRTCPTRUNION; + +/** + * Generic volatile pointer union. + */ +typedef union RTVPTRUNION +{ + /** Pointer into the void. */ + void volatile RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char volatile RT_FAR *pch; + /** Pointer to char value. */ + unsigned char volatile RT_FAR *puch; + /** Pointer to a int value. */ + int volatile RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int volatile RT_FAR *pu; + /** Pointer to a long value. */ + long volatile RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long volatile RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t volatile RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t volatile RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t volatile RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t volatile RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + RTUTF16 volatile RT_FAR *pwc; + /** Pointer to a UUID character. */ + RTUUID volatile RT_FAR *pUuid; +} RTVPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTVPTRUNION RT_FAR *PRTVPTRUNION; + +/** + * Generic const volatile pointer union. + */ +typedef union RTCVPTRUNION +{ + /** Pointer into the void. */ + void const volatile RT_FAR *pv; + /** As a signed integer. */ + intptr_t i; + /** As an unsigned integer. */ + intptr_t u; + /** Pointer to char value. */ + char const volatile RT_FAR *pch; + /** Pointer to char value. */ + unsigned char const volatile RT_FAR *puch; + /** Pointer to a int value. */ + int const volatile RT_FAR *pi; + /** Pointer to a unsigned int value. */ + unsigned int const volatile RT_FAR *pu; + /** Pointer to a long value. */ + long const volatile RT_FAR *pl; + /** Pointer to a long value. */ + unsigned long const volatile RT_FAR *pul; + /** Pointer to a 8-bit unsigned value. */ + uint8_t const volatile RT_FAR *pu8; + /** Pointer to a 16-bit unsigned value. */ + uint16_t const volatile RT_FAR *pu16; + /** Pointer to a 32-bit unsigned value. */ + uint32_t const volatile RT_FAR *pu32; + /** Pointer to a 64-bit unsigned value. */ + uint64_t const volatile RT_FAR *pu64; + /** Pointer to a UTF-16 character. */ + RTUTF16 const volatile RT_FAR *pwc; + /** Pointer to a UUID character. */ + RTUUID const volatile RT_FAR *pUuid; +} RTCVPTRUNION; +/** Pointer to a const pointer union. */ +typedef RTCVPTRUNION RT_FAR *PRTCVPTRUNION; + + + +#ifdef __cplusplus +/** + * Strict type validation helper class. + * + * See RTErrStrictType and RT_SUCCESS_NP. + */ +class RTErrStrictType2 +{ +protected: + /** The status code. */ + int32_t m_rc; + +public: + /** + * Constructor. + * @param rc IPRT style status code. + */ + RTErrStrictType2(int32_t rc) : m_rc(rc) + { + } + + /** + * Get the status code. + * @returns IPRT style status code. + */ + int32_t getValue() const + { + return m_rc; + } +}; +#endif /* __cplusplus */ +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/uint64.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/uint64.h @@ -0,0 +1,1330 @@ +/** @file + * IPRT - RTUINT64U methods for old 32-bit and 16-bit compilers. + */ + +/* + * Copyright (C) 2011-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_uint64_h +#define ___iprt_uint64_h + +#include +#include +#include + +RT_C_DECLS_BEGIN + +/** @defgroup grp_rt_uint64 RTUInt64 - 64-bit Unsigned Integer Methods for ancient compilers + * @ingroup grp_rt + * @{ + */ + + +/** + * Test if a 128-bit unsigned integer value is zero. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64IsZero(PRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + return pValue->s.Lo == 0 + && pValue->s.Hi == 0; +#else + return pValue->Words.w0 == 0 + && pValue->Words.w1 == 0 + && pValue->Words.w2 == 0 + && pValue->Words.w3 == 0; +#endif +} + + +/** + * Set a 128-bit unsigned integer value to zero. + * + * @returns pResult + * @param pResult The result variable. + */ +DECLINLINE(PRTUINT64U) RTUInt64SetZero(PRTUINT64U pResult) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = 0; + pResult->s.Lo = 0; +#else + pResult->Words.w0 = 0; + pResult->Words.w1 = 0; + pResult->Words.w2 = 0; + pResult->Words.w3 = 0; +#endif + return pResult; +} + + +/** + * Set a 32-bit unsigned integer value to the maximum value. + * + * @returns pResult + * @param pResult The result variable. + */ +DECLINLINE(PRTUINT64U) RTUInt64SetMax(PRTUINT64U pResult) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = UINT32_MAX; + pResult->s.Lo = UINT32_MAX; +#else + pResult->Words.w0 = UINT16_MAX; + pResult->Words.w1 = UINT16_MAX; + pResult->Words.w2 = UINT16_MAX; + pResult->Words.w3 = UINT16_MAX; +#endif + return pResult; +} + + + + +/** + * Adds two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Add(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi + pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo + pValue2->s.Lo; + if (pResult->s.Lo < pValue1->s.Lo) + pResult->s.Hi++; + return pResult; +} + + +/** + * Adds a 64-bit and a 32-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64AddU32(PRTUINT64U pResult, PCRTUINT64U pValue1, uint32_t uValue2) +{ + pResult->s.Hi = pValue1->s.Hi; + pResult->s.Lo = pValue1->s.Lo + uValue2; + if (pResult->s.Lo < pValue1->s.Lo) + pResult->s.Hi++; + return pResult; +} + + +/** + * Subtracts a 64-bit unsigned integer value from another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The minuend value. + * @param pValue2 The subtrahend value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Sub(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Lo = pValue1->s.Lo - pValue2->s.Lo; + pResult->s.Hi = pValue1->s.Hi - pValue2->s.Hi; + if (pResult->s.Lo > pValue1->s.Lo) + pResult->s.Hi--; + return pResult; +} + + +/** + * Multiplies two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Mul(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT32U uTmp; + + /* multiply all words in v1 by v2.w0. */ + pResult->s.Lo = (uint32_t)pValue1->Words.w0 * pValue2->Words.w0; + + uTmp.u = (uint32_t)pValue1->Words.w1 * pValue2->Words.w0; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w2 * pValue2->Words.w0; + pResult->Words.w3 += pValue1->Words.w3 * pValue2->Words.w0; + + /* multiply w0, w1 & w2 in v1 by v2.w1. */ + uTmp.u = (uint32_t)pValue1->Words.w0 * pValue2->Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w1 * pValue2->Words.w1; + pResult->Words.w3 += pValue1->Words.w2 * pValue2->Words.w1; + + /* multiply w0 & w1 in v1 by v2.w2. */ + pResult->s.Hi += (uint32_t)pValue1->Words.w0 * pValue2->Words.w2; + pResult->Words.w3 += pValue1->Words.w1 * pValue2->Words.w2; + + /* multiply w0 in v1 by v2.w3. */ + pResult->Words.w3 += pValue1->Words.w0 * pValue2->Words.w3; + + return pResult; +} + + +/** + * Multiplies an 64-bit unsigned integer by a 32-bit unsigned integer value. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64MulByU32(PRTUINT64U pResult, PCRTUINT64U pValue1, uint32_t uValue2) +{ + uint16_t const uLoValue2 = (uint16_t)uValue2; + uint16_t const uHiValue2 = (uint16_t)(uValue2 >> 16); + RTUINT32U uTmp; + + /* multiply all words in v1 by uLoValue1. */ + pResult->s.Lo = (uint32_t)pValue1->Words.w0 * uLoValue2; + + uTmp.u = (uint32_t)pValue1->Words.w1 * uLoValue2; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w2 * uLoValue2; + pResult->Words.w3 += pValue1->Words.w3 * uLoValue2; + + /* multiply w0, w1 & w2 in v1 by uHiValue2. */ + uTmp.u = (uint32_t)pValue1->Words.w0 * uHiValue2; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)pValue1->Words.w1 * uHiValue2; + pResult->Words.w3 += pValue1->Words.w2 * uHiValue2; + + return pResult; +} + + +/** + * Multiplies two 32-bit unsigned integer values with 64-bit precision. + * + * @returns pResult + * @param pResult The result variable. + * @param uValue1 The first value. 32-bit. + * @param uValue2 The second value, 32-bit. + */ +DECLINLINE(PRTUINT64U) RTUInt64MulU32ByU32(PRTUINT64U pResult, uint32_t uValue1, uint32_t uValue2) +{ + uint16_t const uLoValue1 = (uint16_t)uValue1; + uint16_t const uHiValue1 = (uint16_t)(uValue1 >> 16); + uint16_t const uLoValue2 = (uint16_t)uValue2; + uint16_t const uHiValue2 = (uint16_t)(uValue2 >> 16); + RTUINT32U uTmp; + + /* Multiply uLoValue1 and uHiValue1 by uLoValue1. */ + pResult->s.Lo = (uint32_t)uLoValue1 * uLoValue2; + + uTmp.u = (uint32_t)uHiValue1 * uLoValue2; + pResult->Words.w3 = 0; + pResult->Words.w2 = uTmp.Words.w1; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + /* Multiply uLoValue1 and uHiValue1 by uHiValue2. */ + uTmp.u = (uint32_t)uLoValue1 * uHiValue2; + pResult->Words.w1 += uTmp.Words.w0; + if (pResult->Words.w1 < uTmp.Words.w0) + if (pResult->Words.w2++ == UINT16_MAX) + pResult->Words.w3++; + + pResult->Words.w2 += uTmp.Words.w1; + if (pResult->Words.w2 < uTmp.Words.w1) + pResult->Words.w3++; + + pResult->s.Hi += (uint32_t)uHiValue1 * uHiValue2; + return pResult; +} + + +DECLINLINE(PRTUINT64U) RTUInt64DivRem(PRTUINT64U pQuotient, PRTUINT64U pRemainder, PCRTUINT64U pValue1, PCRTUINT64U pValue2); + +/** + * Divides a 64-bit unsigned integer value by another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Div(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + return RTUInt64DivRem(pResult, &Ignored, pValue1, pValue2); +} + + +/** + * Divides a 64-bit unsigned integer value by another, returning the remainder. + * + * @returns pResult + * @param pResult The result variable (remainder). + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Mod(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + RTUInt64DivRem(&Ignored, pResult, pValue1, pValue2); + return pResult; +} + + +/** + * Bitwise AND of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64And(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi & pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo & pValue2->s.Lo; + return pResult; +} + + +/** + * Bitwise OR of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Or( PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi | pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo | pValue2->s.Lo; + return pResult; +} + + +/** + * Bitwise XOR of two 64-bit unsigned integer values. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64Xor(PRTUINT64U pResult, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + pResult->s.Hi = pValue1->s.Hi ^ pValue2->s.Hi; + pResult->s.Lo = pValue1->s.Lo ^ pValue2->s.Lo; + return pResult; +} + + +/** + * Shifts a 64-bit unsigned integer value @a cBits to the left. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to shift. + * @param cBits The number of bits to shift it. + */ +DECLINLINE(PRTUINT64U) RTUInt64ShiftLeft(PRTUINT64U pResult, PCRTUINT64U pValue, int cBits) +{ + cBits &= 63; + if (cBits < 32) + { + pResult->s.Lo = pValue->s.Lo << cBits; + pResult->s.Hi = (pValue->s.Hi << cBits) | (pValue->s.Lo >> (32 - cBits)); + } + else + { + pResult->s.Lo = 0; + pResult->s.Hi = pValue->s.Lo << (cBits - 32); + } + return pResult; +} + + +/** + * Shifts a 64-bit unsigned integer value @a cBits to the right. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to shift. + * @param cBits The number of bits to shift it. + */ +DECLINLINE(PRTUINT64U) RTUInt64ShiftRight(PRTUINT64U pResult, PCRTUINT64U pValue, int cBits) +{ + cBits &= 63; + if (cBits < 32) + { + pResult->s.Hi = pValue->s.Hi >> cBits; + pResult->s.Lo = (pValue->s.Lo >> cBits) | (pValue->s.Hi << (32 - cBits)); + } + else + { + pResult->s.Hi = 0; + pResult->s.Lo = pValue->s.Hi >> (cBits - 32); + } + return pResult; +} + + +/** + * Boolean not (result 0 or 1). + * + * @returns pResult. + * @param pResult The result variable. + * @param pValue The value. + */ +DECLINLINE(PRTUINT64U) RTUInt64BooleanNot(PRTUINT64U pResult, PCRTUINT64U pValue) +{ + pResult->s.Lo = pValue->s.Lo || pValue->s.Hi ? 0 : 1; + pResult->s.Hi = 0; + return pResult; +} + + +/** + * Bitwise not (flips each bit of the 64 bits). + * + * @returns pResult. + * @param pResult The result variable. + * @param pValue The value. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitwiseNot(PRTUINT64U pResult, PCRTUINT64U pValue) +{ + pResult->s.Hi = ~pValue->s.Hi; + pResult->s.Lo = ~pValue->s.Lo; + return pResult; +} + + +/** + * Assigns one 64-bit unsigned integer value to another. + * + * @returns pResult + * @param pResult The result variable. + * @param pValue The value to assign. + */ +DECLINLINE(PRTUINT64U) RTUInt64Assign(PRTUINT64U pResult, PCRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + pResult->s.Hi = pValue->s.Hi; + pResult->s.Lo = pValue->s.Lo; +#else + pResult->Words.w0 = pValue->Words.w0; + pResult->Words.w1 = pValue->Words.w1; + pResult->Words.w2 = pValue->Words.w2; + pResult->Words.w3 = pValue->Words.w3; +#endif + return pResult; +} + + +/** + * Assigns a boolean value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param fValue The boolean value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBoolean(PRTUINT64U pValueResult, bool fValue) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = fValue; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = fValue; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 8-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u8Value The 8-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU8(PRTUINT64U pValueResult, uint8_t u8Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u8Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = u8Value; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 16-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u16Value The 16-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU16(PRTUINT64U pValueResult, uint16_t u16Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u16Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = u16Value; + pValueResult->Words.w1 = 0; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Assigns a 32-bit unsigned integer value to 64-bit unsigned integer. + * + * @returns pValueResult + * @param pValueResult The result variable. + * @param u32Value The 32-bit unsigned integer value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignU32(PRTUINT64U pValueResult, uint32_t u32Value) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Lo = u32Value; + pValueResult->s.Hi = 0; +#else + pValueResult->Words.w0 = (uint16_t)u32Value; + pValueResult->Words.w1 = u32Value >> 16; + pValueResult->Words.w2 = 0; + pValueResult->Words.w3 = 0; +#endif + return pValueResult; +} + + +/** + * Adds two 64-bit unsigned integer values, storing the result in the first. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAdd(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + uint32_t const uTmp = pValue1Result->s.Lo; + pValue1Result->s.Lo += pValue2->s.Lo; + if (pValue1Result->s.Lo < uTmp) + pValue1Result->s.Hi++; + pValue1Result->s.Hi += pValue2->s.Hi; + return pValue1Result; +} + + +/** + * Subtracts two 64-bit unsigned integer values, storing the result in the + * first. + * + * @returns pValue1Result. + * @param pValue1Result The minuend value and result. + * @param pValue2 The subtrahend value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignSub(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + uint32_t const uTmp = pValue1Result->s.Lo; + pValue1Result->s.Lo -= pValue2->s.Lo; + if (pValue1Result->s.Lo > uTmp) + pValue1Result->s.Hi--; + pValue1Result->s.Hi -= pValue2->s.Hi; + return pValue1Result; +} + + +/** + * Multiplies two 64-bit unsigned integer values, storing the result in the + * first. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignMul(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Result; + RTUInt64Mul(&Result, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Divides a 64-bit unsigned integer value by another, storing the result in + * the first. + * + * @returns pValue1Result. + * @param pValue1Result The dividend value and result. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignDiv(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Result; + RTUINT64U Ignored; + RTUInt64DivRem(&Result, &Ignored, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Divides a 64-bit unsigned integer value by another, storing the remainder in + * the first. + * + * @returns pValue1Result. + * @param pValue1Result The dividend value and result (remainder). + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignMod(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ + RTUINT64U Ignored; + RTUINT64U Result; + RTUInt64DivRem(&Ignored, &Result, pValue1Result, pValue2); + *pValue1Result = Result; + return pValue1Result; +} + + +/** + * Performs a bitwise AND of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAnd(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi &= pValue2->s.Hi; + pValue1Result->s.Lo &= pValue2->s.Lo; +#else + pValue1Result->Words.w0 &= pValue2->Words.w0; + pValue1Result->Words.w1 &= pValue2->Words.w1; + pValue1Result->Words.w2 &= pValue2->Words.w2; + pValue1Result->Words.w3 &= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * Performs a bitwise AND of a 64-bit unsigned integer value and a mask made + * up of the first N bits, assigning the result to the the 64-bit value. + * + * @returns pValueResult. + * @param pValueResult The value and result. + * @param cBits The number of bits to AND (counting from the first + * bit). + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignAndNFirstBits(PRTUINT64U pValueResult, unsigned cBits) +{ + if (cBits <= 32) + { + if (cBits != 32) + pValueResult->s.Lo &= (RT_BIT_32(cBits) - 1); + pValueResult->s.Hi = 0; + } + else if (cBits < 64) + pValueResult->s.Hi &= (RT_BIT_32(cBits - 32) - 1); + return pValueResult; +} + + +/** + * Performs a bitwise OR of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignOr(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi |= pValue2->s.Hi; + pValue1Result->s.Lo |= pValue2->s.Lo; +#else + pValue1Result->Words.w0 |= pValue2->Words.w0; + pValue1Result->Words.w1 |= pValue2->Words.w1; + pValue1Result->Words.w2 |= pValue2->Words.w2; + pValue1Result->Words.w3 |= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * ORs in a bit and assign the result to the input value. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param iBit The bit to set (0 based). + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignOrBit(PRTUINT64U pValue1Result, unsigned iBit) +{ +#if ARCH_BITS >= 32 + if (iBit >= 32) + pValue1Result->s.Hi |= RT_BIT_32(iBit - 32); + else + pValue1Result->s.Lo |= RT_BIT_32(iBit); +#else + if (iBit >= 32) + { + if (iBit >= 48) + pValue1Result->Words.w3 |= UINT16_C(1) << (iBit - 48); + else + pValue1Result->Words.w2 |= UINT16_C(1) << (iBit - 32); + } + else + { + if (iBit >= 16) + pValue1Result->Words.w1 |= UINT16_C(1) << (iBit - 16); + else + pValue1Result->Words.w0 |= UINT16_C(1) << (iBit); + } +#endif + return pValue1Result; +} + + + +/** + * Performs a bitwise XOR of two 64-bit unsigned integer values and assigned + * the result to the first one. + * + * @returns pValue1Result. + * @param pValue1Result The first value and result. + * @param pValue2 The second value. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignXor(PRTUINT64U pValue1Result, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + pValue1Result->s.Hi ^= pValue2->s.Hi; + pValue1Result->s.Lo ^= pValue2->s.Lo; +#else + pValue1Result->Words.w0 ^= pValue2->Words.w0; + pValue1Result->Words.w1 ^= pValue2->Words.w1; + pValue1Result->Words.w2 ^= pValue2->Words.w2; + pValue1Result->Words.w3 ^= pValue2->Words.w3; +#endif + return pValue1Result; +} + + +/** + * Performs a bitwise left shift on a 64-bit unsigned integer value, assigning + * the result to it. + * + * @returns pValueResult. + * @param pValueResult The first value and result. + * @param cBits The number of bits to shift. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignShiftLeft(PRTUINT64U pValueResult, int cBits) +{ + RTUINT64U const InVal = *pValueResult; + if (cBits > 0) + { + /* (left shift) */ + cBits &= 31; + if (cBits >= 32) + { + pValueResult->s.Lo = 0; + pValueResult->s.Hi = InVal.s.Lo << (cBits - 32); + } + else + { + pValueResult->s.Hi = InVal.s.Hi << cBits; + pValueResult->s.Hi |= InVal.s.Lo >> (32 - cBits); + pValueResult->s.Lo = InVal.s.Lo << cBits; + } + } + else if (cBits < 0) + { + /* (right shift) */ + cBits = -cBits; + cBits &= 31; + if (cBits >= 32) + { + pValueResult->s.Hi = 0; + pValueResult->s.Lo = InVal.s.Hi >> (cBits - 32); + } + else + { + pValueResult->s.Lo = InVal.s.Lo >> cBits; + pValueResult->s.Lo |= InVal.s.Hi << (32 - cBits); + pValueResult->s.Hi = InVal.s.Hi >> cBits; + } + } + return pValueResult; +} + + +/** + * Performs a bitwise left shift on a 64-bit unsigned integer value, assigning + * the result to it. + * + * @returns pValueResult. + * @param pValueResult The first value and result. + * @param cBits The number of bits to shift. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignShiftRight(PRTUINT64U pValueResult, int cBits) +{ + return RTUInt64AssignShiftLeft(pValueResult, -cBits); +} + + +/** + * Performs a bitwise NOT on a 64-bit unsigned integer value, assigning the + * result to it. + * + * @returns pValueResult + * @param pValueResult The value and result. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBitwiseNot(PRTUINT64U pValueResult) +{ +#if ARCH_BITS >= 32 + pValueResult->s.Hi = ~pValueResult->s.Hi; + pValueResult->s.Lo = ~pValueResult->s.Lo; +#else + pValueResult->Words.w0 = ~pValueResult->Words.w0; + pValueResult->Words.w1 = ~pValueResult->Words.w1; + pValueResult->Words.w2 = ~pValueResult->Words.w2; + pValueResult->Words.w3 = ~pValueResult->Words.w3; +#endif + return pValueResult; +} + + +/** + * Performs a boolean NOT on a 64-bit unsigned integer value, assigning the + * result to it. + * + * @returns pValueResult + * @param pValueResult The value and result. + */ +DECLINLINE(PRTUINT64U) RTUInt64AssignBooleanNot(PRTUINT64U pValueResult) +{ + return RTUInt64AssignBoolean(pValueResult, RTUInt64IsZero(pValueResult)); +} + + +/** + * Compares two 64-bit unsigned integer values. + * + * @retval 0 if equal. + * @retval -1 if the first value is smaller than the second. + * @retval 1 if the first value is larger than the second. + * + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(int) RTUInt64Compare(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + if (pValue1->s.Hi != pValue2->s.Hi) + return pValue1->s.Hi > pValue2->s.Hi ? 1 : -1; + if (pValue1->s.Lo != pValue2->s.Lo) + return pValue1->s.Lo > pValue2->s.Lo ? 1 : -1; + return 0; +#else + if (pValue1->Words.w3 != pValue2->Words.w3) + return pValue1->Words.w3 > pValue2->Words.w3 ? 1 : -1; + if (pValue1->Words.w2 != pValue2->Words.w2) + return pValue1->Words.w2 > pValue2->Words.w2 ? 1 : -1; + if (pValue1->Words.w1 != pValue2->Words.w1) + return pValue1->Words.w1 > pValue2->Words.w1 ? 1 : -1; + if (pValue1->Words.w0 != pValue2->Words.w0) + return pValue1->Words.w0 > pValue2->Words.w0 ? 1 : -1; + return 0; +#endif +} + + +/** + * Tests if a 64-bit unsigned integer value is smaller than another. + * + * @returns true if the first value is smaller, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsSmaller(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi < pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo < pValue2->s.Lo); +#else + return pValue1->Words.w3 < pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 < pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 < pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 < pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if a 32-bit unsigned integer value is larger than another. + * + * @returns true if the first value is larger, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsLarger(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi > pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo > pValue2->s.Lo); +#else + return pValue1->Words.w3 > pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 > pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 > pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 > pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if a 64-bit unsigned integer value is larger or equal than another. + * + * @returns true if the first value is larger or equal, false if not. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsLargerOrEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi > pValue2->s.Hi + || ( pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo >= pValue2->s.Lo); +#else + return pValue1->Words.w3 > pValue2->Words.w3 + || ( pValue1->Words.w3 == pValue2->Words.w3 + && ( pValue1->Words.w2 > pValue2->Words.w2 + || ( pValue1->Words.w2 == pValue2->Words.w2 + && ( pValue1->Words.w1 > pValue2->Words.w1 + || ( pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w0 >= pValue2->Words.w0))))); +#endif +} + + +/** + * Tests if two 64-bit unsigned integer values not equal. + * + * @returns true if equal, false if not equal. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ +#if ARCH_BITS >= 32 + return pValue1->s.Hi == pValue2->s.Hi + && pValue1->s.Lo == pValue2->s.Lo; +#else + return pValue1->Words.w0 == pValue2->Words.w0 + && pValue1->Words.w1 == pValue2->Words.w1 + && pValue1->Words.w2 == pValue2->Words.w2 + && pValue1->Words.w3 == pValue2->Words.w3; +#endif +} + + +/** + * Tests if two 64-bit unsigned integer values are not equal. + * + * @returns true if not equal, false if equal. + * @param pValue1 The first value. + * @param pValue2 The second value. + */ +DECLINLINE(bool) RTUInt64IsNotEqual(PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + return !RTUInt64IsEqual(pValue1, pValue2); +} + + +/** + * Sets a bit in a 64-bit unsigned integer type. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitSet(PRTUINT64U pValueResult, unsigned iBit) +{ + if (iBit < 32) + { +#if ARCH_BITS >= 32 + pValueResult->s.Lo |= RT_BIT_32(iBit); +#else + if (iBit < 16) + pValueResult->Words.w0 |= UINT16_C(1) << iBit; + else + pValueResult->Words.w1 |= UINT16_C(1) << (iBit - 32); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + pValueResult->s.Hi |= RT_BIT_32(iBit - 32); +#else + if (iBit < 48) + pValueResult->Words.w2 |= UINT16_C(1) << (iBit - 64); + else + pValueResult->Words.w3 |= UINT16_C(1) << (iBit - 96); +#endif + } + return pValueResult; +} + + +/** + * Sets a bit in a 64-bit unsigned integer type. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitClear(PRTUINT64U pValueResult, unsigned iBit) +{ + if (iBit < 32) + { +#if ARCH_BITS >= 32 + pValueResult->s.Lo &= ~RT_BIT_32(iBit); +#else + if (iBit < 48) + pValueResult->Words.w0 &= ~(UINT16_C(1) << (iBit)); + else + pValueResult->Words.w1 &= ~(UINT16_C(1) << (iBit - 32)); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + pValueResult->s.Hi &= ~RT_BIT_32(iBit - 32); +#else + if (iBit < 48) + pValueResult->Words.w2 &= ~(UINT16_C(1) << (iBit - 64)); + else + pValueResult->Words.w3 &= ~(UINT16_C(1) << (iBit - 96)); +#endif + } + return pValueResult; +} + + +/** + * Tests if a bit in a 64-bit unsigned integer value is set. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iBit The bit to test. + */ +DECLINLINE(bool) RTUInt64BitTest(PRTUINT64U pValueResult, unsigned iBit) +{ + bool fRc; + if (iBit < 32) + { +#if ARCH_BITS >= 32 + fRc = RT_BOOL(pValueResult->s.Lo & RT_BIT_32(iBit)); +#else + if (iBit < 16) + fRc = RT_BOOL(pValueResult->Words.w0 & (UINT16_C(1) << (iBit))); + else + fRc = RT_BOOL(pValueResult->Words.w1 & (UINT16_C(1) << (iBit - 16))); +#endif + } + else if (iBit < 64) + { +#if ARCH_BITS >= 32 + fRc = RT_BOOL(pValueResult->s.Hi & RT_BIT_32(iBit - 32)); +#else + if (iBit < 48) + fRc = RT_BOOL(pValueResult->Words.w2 & (UINT16_C(1) << (iBit - 32))); + else + fRc = RT_BOOL(pValueResult->Words.w3 & (UINT16_C(1) << (iBit - 48))); +#endif + } + else + fRc = false; + return fRc; +} + + +/** + * Set a range of bits a 64-bit unsigned integer value. + * + * @returns pValueResult. + * @param pValueResult The input and output value. + * @param iFirstBit The first bit to test. + * @param cBits The number of bits to set. + */ +DECLINLINE(PRTUINT64U) RTUInt64BitSetRange(PRTUINT64U pValueResult, unsigned iFirstBit, unsigned cBits) +{ + /* bounds check & fix. */ + if (iFirstBit < 64) + { + if (iFirstBit + cBits > 64) + cBits = 64 - iFirstBit; + +#if ARCH_BITS >= 32 + if (iFirstBit + cBits < 32) + pValueResult->s.Lo |= (RT_BIT_32(cBits) - 1) << iFirstBit; + else if (iFirstBit + cBits < 64 && iFirstBit >= 32) + pValueResult->s.Hi |= (RT_BIT_32(cBits) - 1) << (iFirstBit - 32); + else +#else + if (iFirstBit + cBits < 16) + pValueResult->Words.w0 |= ((UINT16_C(1) << cBits) - 1) << iFirstBit; + else if (iFirstBit + cBits < 32 && iFirstBit >= 16) + pValueResult->Words.w1 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 16); + else if (iFirstBit + cBits < 48 && iFirstBit >= 32) + pValueResult->Words.w2 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 32); + else if (iFirstBit + cBits < 64 && iFirstBit >= 48) + pValueResult->Words.w3 |= ((UINT16_C(1) << cBits) - 1) << (iFirstBit - 48); + else +#endif + while (cBits-- > 0) + RTUInt64BitSet(pValueResult, iFirstBit++); + } + return pValueResult; +} + + +/** + * Test if all the bits of a 64-bit unsigned integer value are set. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64BitAreAllSet(PRTUINT64U pValue) +{ +#if ARCH_BITS >= 32 + return pValue->s.Hi == UINT32_MAX + && pValue->s.Lo == UINT32_MAX; +#else + return pValue->Words.w0 == UINT16_MAX + && pValue->Words.w1 == UINT16_MAX + && pValue->Words.w2 == UINT16_MAX + && pValue->Words.w3 == UINT16_MAX; +#endif +} + + +/** + * Test if all the bits of a 64-bit unsigned integer value are clear. + * + * @returns true if they are, false if they aren't. + * @param pValue The input and output value. + */ +DECLINLINE(bool) RTUInt64BitAreAllClear(PRTUINT64U pValue) +{ + return RTUInt64IsZero(pValue); +} + + +DECLINLINE(unsigned) RTUInt64BitCount(PCRTUINT64U pValue) +{ + unsigned cBits; + if (pValue->s.Hi != 0) + { +#if ARCH_BITS >= 32 + cBits = 32 + ASMBitLastSetU32(pValue->s.Hi); +#else + if (pValue->Words.w3) + cBits = 48 + ASMBitLastSetU16(pValue->Words.w3); + else + cBits = 32 + ASMBitLastSetU16(pValue->Words.w2); +#endif + } + else + { +#if ARCH_BITS >= 32 + cBits = ASMBitLastSetU32(pValue->s.Lo); +#else + if (pValue->Words.w1) + cBits = 16 + ASMBitLastSetU16(pValue->Words.w1); + else + cBits = 0 + ASMBitLastSetU16(pValue->Words.w0); +#endif + } + return cBits; +} + + +/** + * Divides a 64-bit unsigned integer value by another, returning both quotient + * and remainder. + * + * @returns pQuotient, NULL if pValue2 is 0. + * @param pQuotient Where to return the quotient. + * @param pRemainder Where to return the remainder. + * @param pValue1 The dividend value. + * @param pValue2 The divisor value. + */ +DECLINLINE(PRTUINT64U) RTUInt64DivRem(PRTUINT64U pQuotient, PRTUINT64U pRemainder, PCRTUINT64U pValue1, PCRTUINT64U pValue2) +{ + int iDiff; + + /* + * Sort out all the special cases first. + */ + /* Divide by zero or 1? */ + if (!pValue2->s.Hi) + { + if (!pValue2->s.Lo) + return NULL; + + if (pValue2->s.Lo == 1) + { + RTUInt64SetZero(pRemainder); + *pQuotient = *pValue1; + return pQuotient; + } + /** @todo RTUInt64DivModByU32 */ + } + + /* Dividend is smaller? */ + iDiff = RTUInt64Compare(pValue1, pValue2); + if (iDiff < 0) + { + *pRemainder = *pValue1; + RTUInt64SetZero(pQuotient); + } + + /* The values are equal? */ + else if (iDiff == 0) + { + RTUInt64SetZero(pRemainder); + RTUInt64AssignU8(pQuotient, 1); + } + else + { + /* + * Prepare. + */ + unsigned iBitAdder = RTUInt64BitCount(pValue1) - RTUInt64BitCount(pValue2); + RTUINT64U NormDivisor = *pValue2; + if (iBitAdder) + { + RTUInt64ShiftLeft(&NormDivisor, pValue2, iBitAdder); + if (RTUInt64IsLarger(&NormDivisor, pValue1)) + { + RTUInt64AssignShiftRight(&NormDivisor, 1); + iBitAdder--; + } + } + else + NormDivisor = *pValue2; + + RTUInt64SetZero(pQuotient); + *pRemainder = *pValue1; + + /* + * Do the division. + */ + if (RTUInt64IsLargerOrEqual(pRemainder, pValue2)) + { + for (;;) + { + if (RTUInt64IsLargerOrEqual(pRemainder, &NormDivisor)) + { + RTUInt64AssignSub(pRemainder, &NormDivisor); + RTUInt64AssignOrBit(pQuotient, iBitAdder); + } + if (RTUInt64IsSmaller(pRemainder, pValue2)) + break; + RTUInt64AssignShiftRight(&NormDivisor, 1); + iBitAdder--; + } + } + } + return pQuotient; +} + + +/** @} */ + +RT_C_DECLS_END + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/uni.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/uni.h @@ -0,0 +1,478 @@ +/** @file + * IPRT - Unicode Code Points. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_uni_h +#define ___iprt_uni_h + +/** @defgroup grp_rt_uni RTUniCp - Unicode Code Points + * @ingroup grp_rt + * @{ + */ + +/** @def RTUNI_USE_WCTYPE + * Define RTUNI_USE_WCTYPE to not use the IPRT unicode data but the + * data which the C runtime library provides. */ +#ifdef DOXYGEN_RUNNING +# define RTUNI_USE_WCTYPE +#endif + +#include +#ifdef RTUNI_USE_WCTYPE +# include +#endif + +RT_C_DECLS_BEGIN + + +#ifndef RTUNI_USE_WCTYPE + +/** + * A unicode flags range. + * @internal + */ +typedef struct RTUNIFLAGSRANGE +{ + /** The first code point of the range. */ + RTUNICP BeginCP; + /** The last + 1 code point of the range. */ + RTUNICP EndCP; + /** Pointer to the array of case folded code points. */ + const uint8_t *pafFlags; +} RTUNIFLAGSRANGE; +/** Pointer to a flags range. + * @internal */ +typedef RTUNIFLAGSRANGE *PRTUNIFLAGSRANGE; +/** Pointer to a const flags range. + * @internal */ +typedef const RTUNIFLAGSRANGE *PCRTUNIFLAGSRANGE; + +/** + * A unicode case folded range. + * @internal + */ +typedef struct RTUNICASERANGE +{ + /** The first code point of the range. */ + RTUNICP BeginCP; + /** The last + 1 code point of the range. */ + RTUNICP EndCP; + /** Pointer to the array of case folded code points. */ + PCRTUNICP paFoldedCPs; +} RTUNICASERANGE; +/** Pointer to a case folded range. + * @internal */ +typedef RTUNICASERANGE *PRTUNICASERANGE; +/** Pointer to a const case folded range. + * @internal */ +typedef const RTUNICASERANGE *PCRTUNICASERANGE; + +/** @name Unicode Code Point Flags. + * @internal + * @{ */ +#define RTUNI_UPPER RT_BIT(0) +#define RTUNI_LOWER RT_BIT(1) +#define RTUNI_ALPHA RT_BIT(2) +#define RTUNI_XDIGIT RT_BIT(3) +#define RTUNI_DDIGIT RT_BIT(4) +#define RTUNI_WSPACE RT_BIT(5) +/*#define RTUNI_BSPACE RT_BIT(6) - later */ +/** When set, the codepoint requires further checking wrt NFC and NFD + * normalization. I.e. set when either of QC_NFD and QC_NFC are not Y. */ +#define RTUNI_QC_NFX RT_BIT(7) +/** @} */ + + +/** + * Array of flags ranges. + * @internal + */ +extern RTDATADECL(const RTUNIFLAGSRANGE) g_aRTUniFlagsRanges[]; + +/** + * Gets the flags for a unicode code point. + * + * @returns The flag mask. (RTUNI_*) + * @param CodePoint The unicode code point. + * @internal + */ +DECLINLINE(RTUNICP) rtUniCpFlags(RTUNICP CodePoint) +{ + PCRTUNIFLAGSRANGE pCur = &g_aRTUniFlagsRanges[0]; + do + { + if (pCur->EndCP > CodePoint) + { + if (pCur->BeginCP <= CodePoint) + return pCur->pafFlags[CodePoint - pCur->BeginCP]; + break; + } + pCur++; + } while (pCur->EndCP != RTUNICP_MAX); + return 0; +} + + +/** + * Checks if a unicode code point is upper case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsUpper(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_UPPER) != 0; +} + + +/** + * Checks if a unicode code point is lower case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsLower(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_LOWER) != 0; +} + + +/** + * Checks if a unicode code point is case foldable. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsFoldable(RTUNICP CodePoint) +{ + /* Right enough. */ + return (rtUniCpFlags(CodePoint) & (RTUNI_LOWER | RTUNI_UPPER)) != 0; +} + + +/** + * Checks if a unicode code point is alphabetic. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsAlphabetic(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_ALPHA) != 0; +} + + +/** + * Checks if a unicode code point is a decimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsDecDigit(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_DDIGIT) != 0; +} + + +/** + * Checks if a unicode code point is a hexadecimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsHexDigit(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_XDIGIT) != 0; +} + + +/** + * Checks if a unicode code point is white space. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsSpace(RTUNICP CodePoint) +{ + return (rtUniCpFlags(CodePoint) & RTUNI_WSPACE) != 0; +} + + + +/** + * Array of uppercase ranges. + * @internal + */ +extern RTDATADECL(const RTUNICASERANGE) g_aRTUniUpperRanges[]; + +/** + * Array of lowercase ranges. + * @internal + */ +extern RTDATADECL(const RTUNICASERANGE) g_aRTUniLowerRanges[]; + + +/** + * Folds a unicode code point using the specified range array. + * + * @returns FOlded code point. + * @param CodePoint The unicode code point to fold. + * @param pCur The case folding range to use. + */ +DECLINLINE(RTUNICP) rtUniCpFold(RTUNICP CodePoint, PCRTUNICASERANGE pCur) +{ + do + { + if (pCur->EndCP > CodePoint) + { + if (pCur->BeginCP <= CodePoint) + CodePoint = pCur->paFoldedCPs[CodePoint - pCur->BeginCP]; + break; + } + pCur++; + } while (pCur->EndCP != RTUNICP_MAX); + return CodePoint; +} + + +/** + * Folds a unicode code point to upper case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToUpper(RTUNICP CodePoint) +{ + return rtUniCpFold(CodePoint, &g_aRTUniUpperRanges[0]); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToLower(RTUNICP CodePoint) +{ + return rtUniCpFold(CodePoint, &g_aRTUniLowerRanges[0]); +} + + +#else /* RTUNI_USE_WCTYPE */ + + +/** + * Checks if a unicode code point is upper case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsUpper(RTUNICP CodePoint) +{ + return !!iswupper(CodePoint); +} + + +/** + * Checks if a unicode code point is lower case. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsLower(RTUNICP CodePoint) +{ + return !!iswlower(CodePoint); +} + + +/** + * Checks if a unicode code point is case foldable. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsFoldable(RTUNICP CodePoint) +{ + /* Right enough. */ + return iswupper(CodePoint) || iswlower(CodePoint); +} + + +/** + * Checks if a unicode code point is alphabetic. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsAlphabetic(RTUNICP CodePoint) +{ + return !!iswalpha(CodePoint); +} + + +/** + * Checks if a unicode code point is a decimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsDecDigit(RTUNICP CodePoint) +{ + return !!iswdigit(CodePoint); +} + + +/** + * Checks if a unicode code point is a hexadecimal digit. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsHexDigit(RTUNICP CodePoint) +{ + return !!iswxdigit(CodePoint); +} + + +/** + * Checks if a unicode code point is white space. + * + * @returns true if it is. + * @returns false if it isn't. + * @param CodePoint The code point. + */ +DECLINLINE(bool) RTUniCpIsSpace(RTUNICP CodePoint) +{ + return !!iswspace(CodePoint); +} + + +/** + * Folds a unicode code point to upper case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToUpper(RTUNICP CodePoint) +{ + return towupper(CodePoint); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(RTUNICP) RTUniCpToLower(RTUNICP CodePoint) +{ + return towlower(CodePoint); +} + + +#endif /* RTUNI_USE_WCTYPE */ + + +/** + * Frees a unicode string. + * + * @param pusz The string to free. + */ +RTDECL(void) RTUniFree(PRTUNICP pusz); + + +/** + * Checks if a code point valid. + * + * Any code point (defined or not) within the 17 unicode planes (0 thru 16), + * except surrogates will be considered valid code points by this function. + * + * @returns true if in range, false if not. + * @param CodePoint The unicode code point to validate. + */ +DECLINLINE(bool) RTUniCpIsValid(RTUNICP CodePoint) +{ + return CodePoint <= 0x00d7ff + || ( CodePoint <= 0x10ffff + && CodePoint >= 0x00e000); +} + + +/** + * Checks if the given code point is in the BMP range. + * + * Surrogates are not considered in the BMP range by this function. + * + * @returns true if in BMP, false if not. + * @param CodePoint The unicode code point to consider. + */ +DECLINLINE(bool) RTUniCpIsBMP(RTUNICP CodePoint) +{ + return CodePoint <= 0xd7ff + || ( CodePoint <= 0xffff + && CodePoint >= 0xe000); +} + + +/** + * Folds a unicode code point to lower case. + * + * @returns Folded code point. + * @param CodePoint The unicode code point to fold. + */ +DECLINLINE(size_t) RTUniCpCalcUtf8Len(RTUNICP CodePoint) +{ + if (CodePoint < 0x80) + return 1; + return 2 + + (CodePoint >= 0x00000800) + + (CodePoint >= 0x00010000) + + (CodePoint >= 0x00200000) + + (CodePoint >= 0x04000000) + + (CodePoint >= 0x80000000) /* illegal */; +} + + + +RT_C_DECLS_END +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/include/iprt/utf16.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/include/iprt/utf16.h @@ -0,0 +1,1332 @@ +/** @file + * IPRT - String Manipulation, UTF-16 encoding. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___iprt_utf16_h +#define ___iprt_utf16_h + +#include + +RT_C_DECLS_BEGIN + + +/** @defgroup rt_str_utf16 UTF-16 String Manipulation + * @ingroup grp_rt_str + * @{ + */ + +/** + * Allocates memory for UTF-16 string storage (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated UTF-16 string. The first wide char is + * always set to the string terminator char, the contents of the + * remainder of the memory is undefined. The string must be freed by + * calling RTUtf16Free. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY. Also consider + * RTUtf16AllocEx if an IPRT status code is required. + * + * @param cb How many bytes to allocate, will be rounded up + * to a multiple of two. If this is zero, we will + * allocate a terminator wide char anyway. + */ +#define RTUtf16Alloc(cb) RTUtf16AllocTag((cb), RTSTR_TAG) + +/** + * Allocates memory for UTF-16 string storage (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns Pointer to the allocated UTF-16 string. The first wide char is + * always set to the string terminator char, the contents of the + * remainder of the memory is undefined. The string must be freed by + * calling RTUtf16Free. + * + * NULL is returned if the allocation failed. Please translate this to + * VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY. Also consider + * RTUtf16AllocExTag if an IPRT status code is required. + * + * @param cb How many bytes to allocate, will be rounded up + * to a multiple of two. If this is zero, we will + * allocate a terminator wide char anyway. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(PRTUTF16) RTUtf16AllocTag(size_t cb, const char *pszTag); + +/** + * Reallocates the specified UTF-16 string (default tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_UTF16_MEMORY if we failed to reallocate the string, @a + * *ppwsz remains unchanged. + * + * @param ppwsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last RTUTF16 set to the + * terminator character so that when used for + * string truncation the result will be a valid + * C-style string (your job to keep it a valid + * UTF-16 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first RTUTF16 set to the terminator + * char so it will be a valid C-style string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTUtf16Free and @a *ppwsz will be set to NULL. + * + * When not zero, this will be rounded up to a + * multiple of two, and used as the new size of the + * memory backing the string, i.e. it includes the + * terminator (RTUTF16) char. + */ +#define RTUtf16Realloc(ppwsz, cbNew) RTUtf16ReallocTag((ppwsz), (cbNew), RTSTR_TAG) + +/** + * Reallocates the specified UTF-16 string (custom tag). + * + * You should normally not use this function, except if there is some very + * custom string handling you need doing that isn't covered by any of the other + * APIs. + * + * @returns VINF_SUCCESS. + * @retval VERR_NO_UTF16_MEMORY if we failed to reallocate the string, @a + * *ppwsz remains unchanged. + * + * @param ppwsz Pointer to the string variable containing the + * input and output string. + * + * When not freeing the string, the result will + * always have the last RTUTF16 set to the + * terminator character so that when used for + * string truncation the result will be a valid + * C-style string (your job to keep it a valid + * UTF-16 string). + * + * When the input string is NULL and we're supposed + * to reallocate, the returned string will also + * have the first RTUTF16 set to the terminator + * char so it will be a valid C-style string. + * + * @param cbNew When @a cbNew is zero, we'll behave like + * RTUtf16Free and @a *ppwsz will be set to NULL. + * + * When not zero, this will be rounded up to a + * multiple of two, and used as the new size of the + * memory backing the string, i.e. it includes the + * terminator (RTUTF16) char. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ReallocTag(PRTUTF16 *ppwsz, size_t cbNew, const char *pszTag); + +/** + * Free a UTF-16 string allocated by RTStrToUtf16(), RTStrToUtf16Ex(), + * RTLatin1ToUtf16(), RTLatin1ToUtf16Ex(), RTUtf16Dup() or RTUtf16DupEx(). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to free. NULL is accepted. + */ +RTDECL(void) RTUtf16Free(PRTUTF16 pwszString); + +/** + * Allocates a new copy of the specified UTF-16 string (default tag). + * + * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it. + * @returns NULL when out of memory. + * @param pwszString UTF-16 string to duplicate. + * @remark This function will not make any attempt to validate the encoding. + */ +#define RTUtf16Dup(pwszString) RTUtf16DupTag((pwszString), RTSTR_TAG) + +/** + * Allocates a new copy of the specified UTF-16 string (custom tag). + * + * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it. + * @returns NULL when out of memory. + * @param pwszString UTF-16 string to duplicate. + * @param pszTag Allocation tag used for statistics and such. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(PRTUTF16) RTUtf16DupTag(PCRTUTF16 pwszString, const char *pszTag); + +/** + * Allocates a new copy of the specified UTF-16 string (default tag). + * + * @returns iprt status code. + * @param ppwszString Receives pointer of the allocated UTF-16 string. + * The returned pointer must be freed using RTUtf16Free(). + * @param pwszString UTF-16 string to duplicate. + * @param cwcExtra Number of extra RTUTF16 items to allocate. + * @remark This function will not make any attempt to validate the encoding. + */ +#define RTUtf16DupEx(ppwszString, pwszString, cwcExtra) \ + RTUtf16DupExTag((ppwszString), (pwszString), (cwcExtra), RTSTR_TAG) + +/** + * Allocates a new copy of the specified UTF-16 string (custom tag). + * + * @returns iprt status code. + * @param ppwszString Receives pointer of the allocated UTF-16 string. + * The returned pointer must be freed using RTUtf16Free(). + * @param pwszString UTF-16 string to duplicate. + * @param cwcExtra Number of extra RTUTF16 items to allocate. + * @param pszTag Allocation tag used for statistics and such. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16DupExTag(PRTUTF16 *ppwszString, PCRTUTF16 pwszString, size_t cwcExtra, const char *pszTag); + +/** + * Returns the length of a UTF-16 string in UTF-16 characters + * without trailing '\\0'. + * + * Surrogate pairs counts as two UTF-16 characters here. Use RTUtf16CpCnt() + * to get the exact number of code points in the string. + * + * @returns The number of RTUTF16 items in the string. + * @param pwszString Pointer the UTF-16 string. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(size_t) RTUtf16Len(PCRTUTF16 pwszString); + +/** + * Find the length of a zero-terminated byte string, given a max string length. + * + * @returns The string length or cbMax. The returned length does not include + * the zero terminator if it was found. + * + * @param pwszString The string. + * @param cwcMax The max string length in RTUTF16s. + * @sa RTUtf16NLenEx, RTStrNLen. + */ +RTDECL(size_t) RTUtf16NLen(PCRTUTF16 pwszString, size_t cwcMax); + +/** + * Find the length of a zero-terminated byte string, given + * a max string length. + * + * @returns IPRT status code. + * @retval VINF_SUCCESS if the string has a length less than cchMax. + * @retval VERR_BUFFER_OVERFLOW if the end of the string wasn't found + * before cwcMax was reached. + * + * @param pwszString The string. + * @param cwcMax The max string length in RTUTF16s. + * @param pcwc Where to store the string length excluding the + * terminator. This is set to cwcMax if the terminator + * isn't found. + * @sa RTUtf16NLen, RTStrNLenEx. + */ +RTDECL(int) RTUtf16NLenEx(PCRTUTF16 pwszString, size_t cwcMax, size_t *pcwc); + +/** + * Find the zero terminator in a string with a limited length. + * + * @returns Pointer to the zero terminator. + * @returns NULL if the zero terminator was not found. + * + * @param pwszString The string. + * @param cwcMax The max string length. RTSTR_MAX is fine. + */ +RTDECL(PCRTUTF16) RTUtf16End(PCRTUTF16 pwszString, size_t cwcMax); + +/** + * Strips blankspaces from both ends of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16Strip(PRTUTF16 pwsz); + +/** + * Strips blankspaces from the start of the string. + * + * @returns Pointer to first non-blank char in the string. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16StripL(PCRTUTF16 pwsz); + +/** + * Strips blankspaces from the end of the string. + * + * @returns pwsz. + * @param pwsz The string to strip. + */ +RTDECL(PRTUTF16) RTUtf16StripR(PRTUTF16 pwsz); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTUtf16Copy(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc); + +/** + * String copy with overflow handling, ASCII source. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pszSrc The source string, pure ASCII. NULL is not OK. + */ +RTDECL(int) RTUtf16CopyAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc); + +/** + * String copy with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + * @param cwcSrcMax The maximum number of chars (not code points) to + * copy from the source string, not counting the + * terminator as usual. + */ +RTDECL(int) RTUtf16CopyEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + */ +RTDECL(int) RTUtf16Cat(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc); + +/** + * String concatenation with overflow handling, ASCII source. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pszSrc The source string, pure ASCII. NULL is not OK. + */ +RTDECL(int) RTUtf16CatAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc); + +/** + * String concatenation with overflow handling. + * + * @retval VINF_SUCCESS on success. + * @retval VERR_BUFFER_OVERFLOW if the destination buffer is too small. The + * buffer will contain as much of the string as it can hold, fully + * terminated. + * + * @param pwszDst The destination buffer. + * @param cwcDst The size of the destination buffer in RTUTF16s. + * @param pwszSrc The source string. NULL is not OK. + * @param cwcSrcMax The maximum number of UTF-16 chars (not code + * points) to copy from the source string, not + * counting the terminator as usual. + */ +RTDECL(int) RTUtf16CatEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax); + +/** + * Performs a case sensitive string compare between two UTF-16 strings. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16Cmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case sensitive string compare between an UTF-16 string and a pure + * ASCII string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, pure ASCII. Null is allowed. + * @remark This function will not make any attempt to validate the encoding. + */ +RTDECL(int) RTUtf16CmpAscii(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case sensitive string compare between an UTF-16 string and a UTF-8 + * string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, UTF-8. Null is allowed. + * @remarks NULL and empty strings are treated equally. + */ +RTDECL(int) RTUtf16CmpUtf8(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16ICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between two big endian UTF-16 + * strings. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First big endian UTF-16 string. Null is allowed. + * @param pwsz2 Second big endian UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16BigICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between an UTF-16 string and a + * UTF-8 string. + * + * @returns < 0 if the first string less than the second string.s + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, UTF-8. Null is allowed. + * @remarks NULL and empty strings are treated equally. + */ +RTDECL(int) RTUtf16ICmpUtf8(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between an UTF-16 string and a + * pure ASCII string. + * + * Since this compare only takes cares about the first 128 codepoints in + * unicode, no tables are needed and there aren't any real complications. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param psz2 Second string, pure ASCII. Null is allowed. + */ +RTDECL(int) RTUtf16ICmpAscii(PCRTUTF16 pwsz1, const char *psz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings + * using the current locale of the process (if applicable). + * + * This differs from RTUtf16ICmp() in that it will try, if a locale with the + * required data is available, to do a correct case-insensitive compare. It + * follows that it is more complex and thereby likely to be more expensive. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + */ +RTDECL(int) RTUtf16LocaleICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2); + +/** + * Performs a case insensitive string compare between two UTF-16 strings, + * stopping after N characters. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First UTF-16 string. Null is allowed. + * @param pwsz2 Second UTF-16 string. Null is allowed. + * @param cwcMax Maximum number of characters to compare. + */ +RTDECL(int) RTUtf16NICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2, size_t cwcMax); + +/** + * Performs a case insensitive string compare between two big endian UTF-16 + * strings, stopping after N characters. + * + * This is a simplified compare, as only the simplified lower/upper case folding + * specified by the unicode specs are used. It does not consider character pairs + * as they are used in some languages, just simple upper & lower case compares. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 First big endian UTF-16 string. Null is allowed. + * @param pwsz2 Second big endian UTF-16 string. Null is allowed. + * @param cwcMax Maximum number of characters to compare. + */ +RTDECL(int) RTUtf16BigNICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2, size_t cwcMax); + +/** + * Performs a case insensitive string compare between a UTF-16 string and a pure + * ASCII string, stopping after N characters. + * + * Since this compare only takes cares about the first 128 codepoints in + * unicode, no tables are needed and there aren't any real complications. + * + * @returns < 0 if the first string less than the second string. + * @returns 0 if the first string identical to the second string. + * @returns > 0 if the first string greater than the second string. + * @param pwsz1 The UTF-16 first string. Null is allowed. + * @param psz2 The pure ASCII second string. Null is allowed. + * @param cwcMax Maximum number of UTF-16 characters to compare. + */ +RTDECL(int) RTUtf16NICmpAscii(PCRTUTF16 pwsz1, const char *psz2, size_t cwcMax); + + +/** + * Folds a UTF-16 string to lowercase. + * + * This is a very simple folding; is uses the simple lowercase + * code point, it is not related to any locale just the most common + * lowercase codepoint setup by the unicode specs, and it will not + * create new surrogate pairs or remove existing ones. + * + * @returns Pointer to the passed in string. + * @param pwsz The string to fold. + */ +RTDECL(PRTUTF16) RTUtf16ToLower(PRTUTF16 pwsz); + +/** + * Folds a UTF-16 string to uppercase. + * + * This is a very simple folding; is uses the simple uppercase + * code point, it is not related to any locale just the most common + * uppercase codepoint setup by the unicode specs, and it will not + * create new surrogate pairs or remove existing ones. + * + * @returns Pointer to the passed in string. + * @param pwsz The string to fold. + */ +RTDECL(PRTUTF16) RTUtf16ToUpper(PRTUTF16 pwsz); + +/** + * Validates the UTF-16 encoding of the string. + * + * @returns iprt status code. + * @param pwsz The string. + */ +RTDECL(int) RTUtf16ValidateEncoding(PCRTUTF16 pwsz); + +/** + * Validates the UTF-16 encoding of the string. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length (/ size) in UTF-16 units. Use + * RTSTR_MAX to process the entire string. + * @param fFlags Combination of RTSTR_VALIDATE_ENCODING_XXX flags. + */ +RTDECL(int) RTUtf16ValidateEncodingEx(PCRTUTF16 pwsz, size_t cwc, uint32_t fFlags); + +/** + * Checks if the UTF-16 encoding is valid. + * + * @returns true / false. + * @param pwsz The string. + */ +RTDECL(bool) RTUtf16IsValidEncoding(PCRTUTF16 pwsz); + +/** + * Sanitise a (valid) UTF-16 string by replacing all characters outside a white + * list in-place by an ASCII replacement character. + * + * Surrogate paris will be replaced by two chars. + * + * @returns The number of code points replaced. In the case of an incorrectly + * encoded string -1 will be returned, and the string is not completely + * processed. In the case of puszValidPairs having an odd number of + * code points, -1 will be also return but without any modification to + * the string. + * @param pwsz The string to sanitise. + * @param puszValidPairs A zero-terminated array of pairs of Unicode points. + * Each pair is the start and end point of a range, + * and the union of these ranges forms the white list. + * @param chReplacement The ASCII replacement character. + * @sa RTStrPurgeComplementSet + */ +RTDECL(ssize_t) RTUtf16PurgeComplementSet(PRTUTF16 pwsz, PCRTUNICP puszValidPairs, char chReplacement); + + +/** + * Translate a UTF-16 string into a UTF-8 allocating the result buffer (default + * tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16ToUtf8(pwszString, ppszString) RTUtf16ToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16 string into a UTF-8 allocating the result buffer. + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translate a UTF-16BE string into a UTF-8 allocating the result buffer + * (default tag). + * + * This differs from RTUtf16ToUtf8 in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16BE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16BigToUtf8(pwszString, ppszString) RTUtf16BigToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16BE string into a UTF-8 allocating the result buffer. + * + * This differs from RTUtf16ToUtf8Tag in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16BE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16BigToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translate a UTF-16LE string into a UTF-8 allocating the result buffer + * (default tag). + * + * This differs from RTUtf16ToUtf8 in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16LE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16LittleToUtf8(pwszString, ppszString) RTUtf16LittleToUtf8Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16LE string into a UTF-8 allocating the result buffer. + * + * This differs from RTUtf16ToUtf8Tag in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString UTF-16LE string to convert. + * @param ppszString Receives pointer of allocated UTF-8 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16LittleToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + + +/** + * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16ToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16ToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly + * sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Translates UTF-16BE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (default tag). + * + * This differs from RTUtf16ToUtf8Ex in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16BE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16BigToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16BigToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16BE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (custom tag). + * + * This differs from RTUtf16ToUtf8ExTag in that the input is always a + * big-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16BE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16BigToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Translates UTF-16LE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (default tag). + * + * This differs from RTUtf16ToUtf8Ex in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16LE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16LittleToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16LittleToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16LE to UTF-8 using buffer provided by the caller or a + * fittingly sized buffer allocated by the function (custom tag). + * + * This differs from RTUtf16ToUtf8ExTag in that the input is always a + * little-endian string. + * + * @returns iprt status code. + * @param pwszString The UTF-16LE string to convert. + * @param cwcString The number of RTUTF16 items to translate from pwszString. + * The translation will stop when reaching cwcString or the terminator ('\\0'). + * Use RTSTR_MAX to translate the entire string. + * @param ppsz If cch is non-zero, this must either be pointing to a pointer to + * a buffer of the specified size, or pointer to a NULL pointer. + * If *ppsz is NULL or cch is zero a buffer of at least cch chars + * will be allocated to hold the translated string. + * If a buffer was requested it must be freed using RTStrFree(). + * @param cch The buffer size in chars (the type). This includes the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16LittleToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, + const char *pszTag); + +/** + * Calculates the length of the UTF-16 string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16ToUtf8() of the correct size. For most + * other purposes RTUtf16ToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16 string. + */ +RTDECL(size_t) RTUtf16CalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16BE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16BE + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16BigToUtf8() of the correct size. For most + * other purposes RTUtf16BigToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16BE string. + */ +RTDECL(size_t) RTUtf16BigCalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16LE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16LE + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16LittleToUtf8() of the correct size. For + * most other purposes RTUtf16LittleToUtf8Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16LE string. + */ +RTDECL(size_t) RTUtf16LittleCalcUtf8Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16 string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16CalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Calculates the length of the UTF-16BE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16BE + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16BigCalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Calculates the length of the UTF-16LE string in UTF-8 chars (bytes). + * + * This function will validate the string, and incorrectly encoded UTF-16LE + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16LittleCalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result + * buffer (default tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated Latin1 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + */ +#define RTUtf16ToLatin1(pwszString, ppszString) RTUtf16ToLatin1Tag((pwszString), (ppszString), RTSTR_TAG) + +/** + * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result + * buffer (custom tag). + * + * @returns iprt status code. + * @param pwszString UTF-16 string to convert. + * @param ppszString Receives pointer of allocated Latin1 string on + * success, and is always set to NULL on failure. + * The returned pointer must be freed using RTStrFree(). + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToLatin1Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag); + +/** + * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller + * or a fittingly sized buffer allocated by the function (default tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from + * pwszString. The translation will stop when reaching + * cwcString or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz Pointer to the pointer to the Latin-1 string. The + * buffer can optionally be preallocated by the caller. + * + * If cch is zero, *ppsz is undefined. + * + * If cch is non-zero and *ppsz is not NULL, then this + * will be used as the output buffer. + * VERR_BUFFER_OVERFLOW will be returned if this is + * insufficient. + * + * If cch is zero or *ppsz is NULL, then a buffer of + * sufficient size is allocated. cch can be used to + * specify a minimum size of this buffer. Use + * RTUtf16Free() to free the result. + * + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + */ +#define RTUtf16ToLatin1Ex(pwszString, cwcString, ppsz, cch, pcch) \ + RTUtf16ToLatin1ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG) + +/** + * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller + * or a fittingly sized buffer allocated by the function (custom tag). + * + * @returns iprt status code. + * @param pwszString The UTF-16 string to convert. + * @param cwcString The number of RTUTF16 items to translate from + * pwszString. The translation will stop when reaching + * cwcString or the terminator ('\\0'). Use RTSTR_MAX + * to translate the entire string. + * @param ppsz Pointer to the pointer to the Latin-1 string. The + * buffer can optionally be preallocated by the caller. + * + * If cch is zero, *ppsz is undefined. + * + * If cch is non-zero and *ppsz is not NULL, then this + * will be used as the output buffer. + * VERR_BUFFER_OVERFLOW will be returned if this is + * insufficient. + * + * If cch is zero or *ppsz is NULL, then a buffer of + * sufficient size is allocated. cch can be used to + * specify a minimum size of this buffer. Use + * RTUtf16Free() to free the result. + * + * @param cch The buffer size in chars (the type). This includes + * the terminator. + * @param pcch Where to store the length of the translated string, + * excluding the terminator. (Optional) + * + * This may be set under some error conditions, + * however, only for VERR_BUFFER_OVERFLOW and + * VERR_NO_STR_MEMORY will it contain a valid string + * length that can be used to resize the buffer. + * @param pszTag Allocation tag used for statistics and such. + */ +RTDECL(int) RTUtf16ToLatin1ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag); + +/** + * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars. + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. The primary purpose of this function is to + * help allocate buffers for RTUtf16ToLatin1() of the correct size. For most + * other purposes RTUtf16ToLatin1Ex() should be used. + * + * @returns Number of char (bytes). + * @returns 0 if the string was incorrectly encoded. + * @param pwsz The UTF-16 string. + */ +RTDECL(size_t) RTUtf16CalcLatin1Len(PCRTUTF16 pwsz); + +/** + * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars. + * + * This function will validate the string, and incorrectly encoded UTF-16 + * strings will be rejected. + * + * @returns iprt status code. + * @param pwsz The string. + * @param cwc The max string length. Use RTSTR_MAX to process the + * entire string. + * @param pcch Where to store the string length (in bytes). Optional. + * This is undefined on failure. + */ +RTDECL(int) RTUtf16CalcLatin1LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pwsz The string. + * + * @remark This is an internal worker for RTUtf16GetCp(). + */ +RTDECL(RTUNICP) RTUtf16GetCpInternal(PCRTUTF16 pwsz); + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark This is an internal worker for RTUtf16GetCpEx(). + */ +RTDECL(int) RTUtf16GetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp); + +/** + * Get the unicode code point at the given string position, big endian. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark This is an internal worker for RTUtf16BigGetCpEx(). + */ +RTDECL(int) RTUtf16BigGetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp); + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by pwsz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pwsz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-16 range. + * + * @remark This is an internal worker for RTUtf16GetCpEx(). + */ +RTDECL(PRTUTF16) RTUtf16PutCpInternal(PRTUTF16 pwsz, RTUNICP CodePoint); + +/** + * Get the unicode code point at the given string position. + * + * @returns unicode code point. + * @returns RTUNICP_INVALID if the encoding is invalid. + * @param pwsz The string. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or an endian indicator. + */ +DECLINLINE(RTUNICP) RTUtf16GetCp(PCRTUTF16 pwsz) +{ + const RTUTF16 wc = *pwsz; + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + return wc; + return RTUtf16GetCpInternal(pwsz); +} + +/** + * Get the unicode code point at the given string position. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(int) RTUtf16GetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp) +{ + const RTUTF16 wc = **ppwsz; + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + { + (*ppwsz)++; + *pCp = wc; + return VINF_SUCCESS; + } + return RTUtf16GetCpExInternal(ppwsz, pCp); +} + +/** + * Get the unicode code point at the given string position, big endian version. + * + * @returns iprt status code. + * @param ppwsz Pointer to the string pointer. This will be updated to + * point to the char following the current code point. + * @param pCp Where to store the code point. + * RTUNICP_INVALID is stored here on failure. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(int) RTUtf16BigGetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp) +{ +#ifdef RT_BIG_ENDIAN + return RTUtf16GetCpEx(ppwsz, pCp); +#else +# ifdef ___iprt_asm_h + const RTUTF16 wc = RT_BE2H_U16(**ppwsz); + if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe)) + { + (*ppwsz)++; + *pCp = wc; + return VINF_SUCCESS; + } +# endif + return RTUtf16BigGetCpExInternal(ppwsz, pCp); +#endif +} + +/** + * Put the unicode code point at the given string position + * and return the pointer to the char following it. + * + * This function will not consider anything at or following the + * buffer area pointed to by pwsz. It is therefore not suitable for + * inserting code points into a string, only appending/overwriting. + * + * @returns pointer to the char following the written code point. + * @param pwsz The string. + * @param CodePoint The code point to write. + * This should not be RTUNICP_INVALID or any other + * character out of the UTF-16 range. + * + * @remark We optimize this operation by using an inline function for + * everything which isn't a surrogate pair or and endian indicator. + */ +DECLINLINE(PRTUTF16) RTUtf16PutCp(PRTUTF16 pwsz, RTUNICP CodePoint) +{ + if (CodePoint < 0xd800 || (CodePoint > 0xd800 && CodePoint < 0xfffe)) + { + *pwsz++ = (RTUTF16)CodePoint; + return pwsz; + } + return RTUtf16PutCpInternal(pwsz, CodePoint); +} + +/** + * Skips ahead, past the current code point. + * + * @returns Pointer to the char after the current code point. + * @param pwsz Pointer to the current code point. + * @remark This will not move the next valid code point, only past the current one. + */ +DECLINLINE(PRTUTF16) RTUtf16NextCp(PCRTUTF16 pwsz) +{ + RTUNICP Cp; + RTUtf16GetCpEx(&pwsz, &Cp); + return (PRTUTF16)pwsz; +} + +/** + * Skips backwards, to the previous code point. + * + * @returns Pointer to the char after the current code point. + * @param pwszStart Pointer to the start of the string. + * @param pwsz Pointer to the current code point. + */ +RTDECL(PRTUTF16) RTUtf16PrevCp(PCRTUTF16 pwszStart, PCRTUTF16 pwsz); + + +/** + * Checks if the UTF-16 char is the high surrogate char (i.e. + * the 1st char in the pair). + * + * @returns true if it is. + * @returns false if it isn't. + * @param wc The character to investigate. + */ +DECLINLINE(bool) RTUtf16IsHighSurrogate(RTUTF16 wc) +{ + return wc >= 0xd800 && wc <= 0xdbff; +} + +/** + * Checks if the UTF-16 char is the low surrogate char (i.e. + * the 2nd char in the pair). + * + * @returns true if it is. + * @returns false if it isn't. + * @param wc The character to investigate. + */ +DECLINLINE(bool) RTUtf16IsLowSurrogate(RTUTF16 wc) +{ + return wc >= 0xdc00 && wc <= 0xdfff; +} + + +/** + * Checks if the two UTF-16 chars form a valid surrogate pair. + * + * @returns true if they do. + * @returns false if they doesn't. + * @param wcHigh The high (1st) character. + * @param wcLow The low (2nd) character. + */ +DECLINLINE(bool) RTUtf16IsSurrogatePair(RTUTF16 wcHigh, RTUTF16 wcLow) +{ + return RTUtf16IsHighSurrogate(wcHigh) + && RTUtf16IsLowSurrogate(wcLow); +} + +/** + * Formats a buffer stream as hex bytes. + * + * The default is no separating spaces or line breaks or anything. + * + * @returns IPRT status code. + * @retval VERR_INVALID_POINTER if any of the pointers are wrong. + * @retval VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes. + * + * @param pwszBuf Output string buffer. + * @param cwcBuf The size of the output buffer in RTUTF16 units. + * @param pv Pointer to the bytes to stringify. + * @param cb The number of bytes to stringify. + * @param fFlags Combination of RTSTRPRINTHEXBYTES_F_XXX values. + * @sa RTStrPrintHexBytes. + */ +RTDECL(int) RTUtf16PrintHexBytes(PRTUTF16 pwszBuf, size_t cwcBuf, void const *pv, size_t cb, uint32_t fFlags); + +/** @} */ + + +RT_C_DECLS_END + +/** @} */ + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/lnkops.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/lnkops.c @@ -0,0 +1,107 @@ +/** @file + * + * vboxsf -- VirtualBox Guest Additions for Linux: + * Operations for symbolic links. + */ + +/* + * Copyright (C) 2010-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#include "vfsmod.h" + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) +static const char *sf_follow_link(struct dentry *dentry, void **cookie) +# else +static void *sf_follow_link(struct dentry *dentry, struct nameidata *nd) +# endif +{ + struct inode *inode = dentry->d_inode; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + int error = -ENOMEM; + char *path = (char*)get_zeroed_page(GFP_KERNEL); + int rc; + + if (path) + { + error = 0; + rc = VbglR0SfReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, path); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfReadLink failed, caller=%s, rc=%Rrc\n", __func__, rc)); + free_page((unsigned long)path); + error = -EPROTO; + } + } +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) + return error ? ERR_PTR(error) : (*cookie = path); +# else + nd_set_link(nd, error ? ERR_PTR(error) : path); + return NULL; +# endif +} + +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0) +static void sf_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) +{ + char *page = nd_get_link(nd); + if (!IS_ERR(page)) + free_page((unsigned long)page); +} +# endif + +# else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) */ +static const char *sf_get_link(struct dentry *dentry, struct inode *inode, + struct delayed_call *done) +{ + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + char *path; + int rc; + + if (!dentry) + return ERR_PTR(-ECHILD); + path = kzalloc(PAGE_SIZE, GFP_KERNEL); + if (!path) + return ERR_PTR(-ENOMEM); + rc = VbglR0SfReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, path); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfReadLink failed, caller=%s, rc=%Rrc\n", __func__, rc)); + kfree(path); + return ERR_PTR(-EPROTO); + } + set_delayed_call(done, kfree_link, path); + return path; +} +# endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) */ + +struct inode_operations sf_lnk_iops = +{ +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) + .readlink = generic_readlink, +# endif +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) + .get_link = sf_get_link +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) + .follow_link = sf_follow_link, + .put_link = free_page_put_link, +# else + .follow_link = sf_follow_link, + .put_link = sf_put_link +# endif +}; + +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) */ --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/moddi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/moddi3.c @@ -0,0 +1,70 @@ +/* $NetBSD: moddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)moddi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: moddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Return remainder after dividing two signed quads. + * + * XXX we assume a % b < 0 iff a < 0, but this is actually machine-dependent. + */ +quad_t +__moddi3(a, b) + quad_t a, b; +{ + u_quad_t ua, ub, ur; + int neg = 0; + + ua = a; + ub = b; + + if (a < 0) + ua = -ua, neg ^= 1; + if (b < 0) + ub = -ub; + (void)__qdivrem(ua, ub, &ur); + if (neg) + ur = -ur; + return (ur); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/product-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/product-generated.h @@ -0,0 +1,10 @@ +#ifndef ___product_generated_h___ +#define ___product_generated_h___ + +#define VBOX_VENDOR "Oracle Corporation" +#define VBOX_VENDOR_SHORT "Oracle" +#define VBOX_PRODUCT "Oracle VM VirtualBox" +#define VBOX_BUILD_PUBLISHER "_Ubuntu" +#define VBOX_C_YEAR "2018" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/qdivrem.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/qdivrem.c @@ -0,0 +1,285 @@ +/* $NetBSD: qdivrem.c,v 1.12 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)qdivrem.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: qdivrem.c,v 1.12 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +/* + * Multiprecision divide. This algorithm is from Knuth vol. 2 (2nd ed), + * section 4.3.1, pp. 257--259. + */ + +#include "quad.h" + +#define B ((int)1 << HALF_BITS) /* digit base */ + +/* Combine two `digits' to make a single two-digit number. */ +#define COMBINE(a, b) (((u_int)(a) << HALF_BITS) | (b)) + +/* select a type for digits in base B: use unsigned short if they fit */ +#if UINT_MAX == 0xffffffffU && USHRT_MAX >= 0xffff +typedef unsigned short digit; +#else +typedef u_int digit; +#endif + +static void shl __P((digit *p, int len, int sh)); + +/* + * __qdivrem(u, v, rem) returns u/v and, optionally, sets *rem to u%v. + * + * We do this in base 2-sup-HALF_BITS, so that all intermediate products + * fit within u_int. As a consequence, the maximum length dividend and + * divisor are 4 `digits' in this base (they are shorter if they have + * leading zeros). + */ +u_quad_t +__qdivrem(uq, vq, arq) + u_quad_t uq, vq, *arq; +{ + union uu tmp; + digit *u, *v, *q; + digit v1, v2; + u_int qhat, rhat, t; + int m, n, d, j, i; + digit uspace[5], vspace[5], qspace[5]; + + /* + * Take care of special cases: divide by zero, and u < v. + */ + if (vq == 0) { + /* divide by zero. */ + static volatile const unsigned int zero = 0; + + tmp.ul[H] = tmp.ul[L] = 1 / zero; + if (arq) + *arq = uq; + return (tmp.q); + } + if (uq < vq) { + if (arq) + *arq = uq; + return (0); + } + u = &uspace[0]; + v = &vspace[0]; + q = &qspace[0]; + + /* + * Break dividend and divisor into digits in base B, then + * count leading zeros to determine m and n. When done, we + * will have: + * u = (u[1]u[2]...u[m+n]) sub B + * v = (v[1]v[2]...v[n]) sub B + * v[1] != 0 + * 1 < n <= 4 (if n = 1, we use a different division algorithm) + * m >= 0 (otherwise u < v, which we already checked) + * m + n = 4 + * and thus + * m = 4 - n <= 2 + */ + tmp.uq = uq; + u[0] = 0; + u[1] = (digit)HHALF(tmp.ul[H]); + u[2] = (digit)LHALF(tmp.ul[H]); + u[3] = (digit)HHALF(tmp.ul[L]); + u[4] = (digit)LHALF(tmp.ul[L]); + tmp.uq = vq; + v[1] = (digit)HHALF(tmp.ul[H]); + v[2] = (digit)LHALF(tmp.ul[H]); + v[3] = (digit)HHALF(tmp.ul[L]); + v[4] = (digit)LHALF(tmp.ul[L]); + for (n = 4; v[1] == 0; v++) { + if (--n == 1) { + u_int rbj; /* r*B+u[j] (not root boy jim) */ + digit q1, q2, q3, q4; + + /* + * Change of plan, per exercise 16. + * r = 0; + * for j = 1..4: + * q[j] = floor((r*B + u[j]) / v), + * r = (r*B + u[j]) % v; + * We unroll this completely here. + */ + t = v[2]; /* nonzero, by definition */ + q1 = (digit)(u[1] / t); + rbj = COMBINE(u[1] % t, u[2]); + q2 = (digit)(rbj / t); + rbj = COMBINE(rbj % t, u[3]); + q3 = (digit)(rbj / t); + rbj = COMBINE(rbj % t, u[4]); + q4 = (digit)(rbj / t); + if (arq) + *arq = rbj % t; + tmp.ul[H] = COMBINE(q1, q2); + tmp.ul[L] = COMBINE(q3, q4); + return (tmp.q); + } + } + + /* + * By adjusting q once we determine m, we can guarantee that + * there is a complete four-digit quotient at &qspace[1] when + * we finally stop. + */ + for (m = 4 - n; u[1] == 0; u++) + m--; + for (i = 4 - m; --i >= 0;) + q[i] = 0; + q += 4 - m; + + /* + * Here we run Program D, translated from MIX to C and acquiring + * a few minor changes. + * + * D1: choose multiplier 1 << d to ensure v[1] >= B/2. + */ + d = 0; + for (t = v[1]; t < B / 2; t <<= 1) + d++; + if (d > 0) { + shl(&u[0], m + n, d); /* u <<= d */ + shl(&v[1], n - 1, d); /* v <<= d */ + } + /* + * D2: j = 0. + */ + j = 0; + v1 = v[1]; /* for D3 -- note that v[1..n] are constant */ + v2 = v[2]; /* for D3 */ + do { + digit uj0, uj1, uj2; + + /* + * D3: Calculate qhat (\^q, in TeX notation). + * Let qhat = min((u[j]*B + u[j+1])/v[1], B-1), and + * let rhat = (u[j]*B + u[j+1]) mod v[1]. + * While rhat < B and v[2]*qhat > rhat*B+u[j+2], + * decrement qhat and increase rhat correspondingly. + * Note that if rhat >= B, v[2]*qhat < rhat*B. + */ + uj0 = u[j + 0]; /* for D3 only -- note that u[j+...] change */ + uj1 = u[j + 1]; /* for D3 only */ + uj2 = u[j + 2]; /* for D3 only */ + if (uj0 == v1) { + qhat = B; + rhat = uj1; + goto qhat_too_big; + } else { + u_int nn = COMBINE(uj0, uj1); + qhat = nn / v1; + rhat = nn % v1; + } + while (v2 * qhat > COMBINE(rhat, uj2)) { + qhat_too_big: + qhat--; + if ((rhat += v1) >= B) + break; + } + /* + * D4: Multiply and subtract. + * The variable `t' holds any borrows across the loop. + * We split this up so that we do not require v[0] = 0, + * and to eliminate a final special case. + */ + for (t = 0, i = n; i > 0; i--) { + t = u[i + j] - v[i] * qhat - t; + u[i + j] = (digit)LHALF(t); + t = (B - HHALF(t)) & (B - 1); + } + t = u[j] - t; + u[j] = (digit)LHALF(t); + /* + * D5: test remainder. + * There is a borrow if and only if HHALF(t) is nonzero; + * in that (rare) case, qhat was too large (by exactly 1). + * Fix it by adding v[1..n] to u[j..j+n]. + */ + if (HHALF(t)) { + qhat--; + for (t = 0, i = n; i > 0; i--) { /* D6: add back. */ + t += u[i + j] + v[i]; + u[i + j] = (digit)LHALF(t); + t = HHALF(t); + } + u[j] = (digit)LHALF(u[j] + t); + } + q[j] = (digit)qhat; + } while (++j <= m); /* D7: loop on j. */ + + /* + * If caller wants the remainder, we have to calculate it as + * u[m..m+n] >> d (this is at most n digits and thus fits in + * u[m+1..m+n], but we may need more source digits). + */ + if (arq) { + if (d) { + for (i = m + n; i > m; --i) + u[i] = (digit)(((u_int)u[i] >> d) | + LHALF((u_int)u[i - 1] << (HALF_BITS - d))); + u[i] = 0; + } + tmp.ul[H] = COMBINE(uspace[1], uspace[2]); + tmp.ul[L] = COMBINE(uspace[3], uspace[4]); + *arq = tmp.q; + } + + tmp.ul[H] = COMBINE(qspace[1], qspace[2]); + tmp.ul[L] = COMBINE(qspace[3], qspace[4]); + return (tmp.q); +} + +/* + * Shift p[0]..p[len] left `sh' bits, ignoring any bits that + * `fall out' the left (there never will be any such anyway). + * We may assume len >= 0. NOTE THAT THIS WRITES len+1 DIGITS. + */ +static void +shl(digit *p, int len, int sh) +{ + int i; + + for (i = 0; i < len; i++) + p[i] = (digit)(LHALF((u_int)p[i] << sh) | + ((u_int)p[i + 1] >> (HALF_BITS - sh))); + p[i] = (digit)(LHALF((u_int)p[i] << sh)); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/quad.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/quad.h @@ -0,0 +1,165 @@ +/* $NetBSD: quad.h,v 1.17 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)quad.h 8.1 (Berkeley) 6/4/93 + */ + +/* + * Quad arithmetic. + * + * This library makes the following assumptions: + * + * - The type long long (aka quad_t) exists. + * + * - A quad variable is exactly twice as long as `int'. + * + * - The machine's arithmetic is two's complement. + * + * This library can provide 128-bit arithmetic on a machine with 128-bit + * quads and 64-bit ints, for instance, or 96-bit arithmetic on machines + * with 48-bit ints. + */ + +#if 0 /* iprt */ +#include +#if !defined(_KERNEL) && !defined(_STANDALONE) +#include +#else +#include +#endif +#else /* iprt */ +# include +# include +# undef __P +# define __P(a) a +# undef __GNUC_PREREQ__ +# define __GNUC_PREREQ__(m1,m2) 1 +# if 1 /* ASSUMES: little endian */ +# define _QUAD_HIGHWORD 1 +# define _QUAD_LOWWORD 0 +# else +# define _QUAD_HIGHWORD 0 +# define _QUAD_LOWWORD 1 +# endif +# if !defined(RT_OS_LINUX) || !defined(__KERNEL__) /* (linux/types.h defines u_int) */ + typedef unsigned int u_int; +# endif +# if !defined(RT_OS_SOLARIS) + typedef int64_t quad_t; +# else +# define quad_t int64_t +# endif + typedef uint64_t u_quad_t; + typedef quad_t *qaddr_t; +#endif /* iprt */ + +/* + * Depending on the desired operation, we view a `long long' (aka quad_t) in + * one or more of the following formats. + */ +union uu { + quad_t q; /* as a (signed) quad */ + u_quad_t uq; /* as an unsigned quad */ + int sl[2]; /* as two signed ints */ + u_int ul[2]; /* as two unsigned ints */ +}; + +/* + * Define high and low parts of a quad_t. + */ +#define H _QUAD_HIGHWORD +#define L _QUAD_LOWWORD + +/* + * Total number of bits in a quad_t and in the pieces that make it up. + * These are used for shifting, and also below for halfword extraction + * and assembly. + */ +#define QUAD_BITS (sizeof(quad_t) * CHAR_BIT) +#define INT_BITS (sizeof(int) * CHAR_BIT) +#define HALF_BITS (sizeof(int) * CHAR_BIT / 2) + +/* + * Extract high and low shortwords from longword, and move low shortword of + * longword to upper half of long, i.e., produce the upper longword of + * ((quad_t)(x) << (number_of_bits_in_int/2)). (`x' must actually be u_int.) + * + * These are used in the multiply code, to split a longword into upper + * and lower halves, and to reassemble a product as a quad_t, shifted left + * (sizeof(int)*CHAR_BIT/2). + */ +#define HHALF(x) ((u_int)(x) >> HALF_BITS) +#define LHALF(x) ((u_int)(x) & (((int)1 << HALF_BITS) - 1)) +#define LHUP(x) ((u_int)(x) << HALF_BITS) + +/* + * XXX + * Compensate for gcc 1 vs gcc 2. Gcc 1 defines ?sh?di3's second argument + * as u_quad_t, while gcc 2 correctly uses int. Unfortunately, we still use + * both compilers. + */ +#if __GNUC_PREREQ__(2, 0) || defined(lint) +typedef unsigned int qshift_t; +#else +typedef u_quad_t qshift_t; +#endif + +RT_C_DECLS_BEGIN +quad_t __adddi3 __P((quad_t, quad_t)); +quad_t __anddi3 __P((quad_t, quad_t)); +quad_t __ashldi3 __P((quad_t, qshift_t)); +quad_t __ashrdi3 __P((quad_t, qshift_t)); +int __cmpdi2 __P((quad_t, quad_t )); +quad_t __divdi3 __P((quad_t, quad_t)); +quad_t __fixdfdi __P((double)); +quad_t __fixsfdi __P((float)); +u_quad_t __fixunsdfdi __P((double)); +u_quad_t __fixunssfdi __P((float)); +double __floatdidf __P((quad_t)); +float __floatdisf __P((quad_t)); +double __floatunsdidf __P((u_quad_t)); +quad_t __iordi3 __P((quad_t, quad_t)); +quad_t __lshldi3 __P((quad_t, qshift_t)); +quad_t __lshrdi3 __P((quad_t, qshift_t)); +quad_t __moddi3 __P((quad_t, quad_t)); +quad_t __muldi3 __P((quad_t, quad_t)); +quad_t __negdi2 __P((quad_t)); +quad_t __one_cmpldi2 __P((quad_t)); +u_quad_t __qdivrem __P((u_quad_t, u_quad_t, u_quad_t *)); +quad_t __subdi3 __P((quad_t, quad_t)); +int __ucmpdi2 __P((u_quad_t, u_quad_t)); +u_quad_t __udivdi3 __P((u_quad_t, u_quad_t )); +u_quad_t __umoddi3 __P((u_quad_t, u_quad_t )); +quad_t __xordi3 __P((quad_t, quad_t)); +RT_C_DECLS_END --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/r0drv/linux/the-linux-kernel.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/r0drv/linux/the-linux-kernel.h @@ -0,0 +1,452 @@ +/* $Id: the-linux-kernel.h $ */ +/** @file + * IPRT - Include all necessary headers for the Linux kernel. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#ifndef ___the_linux_kernel_h +#define ___the_linux_kernel_h + +/* + * Include iprt/types.h to install the bool wrappers. + * Then use the linux bool type for all the stuff include here. + */ +#include +#define bool linux_bool + +#if RT_GNUC_PREREQ(4, 6) +# pragma GCC diagnostic push +#endif +#if RT_GNUC_PREREQ(4, 2) +# pragma GCC diagnostic ignored "-Wunused-parameter" +# if !defined(__cplusplus) && RT_GNUC_PREREQ(4, 3) +# pragma GCC diagnostic ignored "-Wold-style-declaration" /* 2.6.18-411.0.0.0.1.el5/build/include/asm/apic.h:110: warning: 'inline' is not at beginning of declaration [-Wold-style-declaration] */ +# endif +#endif + +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 33) +# include +#else +# ifndef AUTOCONF_INCLUDED +# include +# endif +#endif + +/* We only support 2.4 and 2.6 series kernels */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0) +# error We only support 2.4 and 2.6 series kernels +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# error We only support 2.4 and 2.6 series kernels +#endif + +#if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) +# define MODVERSIONS +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 71) +# include +# endif +#endif +#ifndef KBUILD_STR +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) +# define KBUILD_STR(s) s +# else +# define KBUILD_STR(s) #s +# endif +#endif +# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) +# include /* for macro IS_ENABLED */ +# endif +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) +# include +#else /* older kernels */ +# include +#endif /* older kernels */ +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +# include +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 7) +# include +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16) +# include +# include +#endif +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 71) +# include +# include +#endif +/* For the basic additions module */ +#include +#include +#include +#include +#include +#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */ +# include +#endif +/* For the shared folders module */ +#include +#define wchar_t linux_wchar_t +#include +#undef wchar_t +#include +#include +#include +#include + +/* For thread-context hooks. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) && defined(CONFIG_PREEMPT_NOTIFIERS) +# include +#endif + +/* for workqueue / task queues. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +# include +#else +# include +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif + +/* for cr4_init_shadow() / cpu_tlbstate. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0) +# include +#endif + +/* for set_pages_x() */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) +# include +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 7, 0) +# include +#else +static inline void clac(void) { } +static inline void stac(void) { } +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# ifndef page_to_pfn +# define page_to_pfn(page) ((page) - mem_map) +# endif +#endif + +#ifndef DEFINE_WAIT +# define DEFINE_WAIT(name) DECLARE_WAITQUEUE(name, current) +#endif + +#ifndef __GFP_NOWARN +# define __GFP_NOWARN 0 +#endif + +/* + * 2.4 / early 2.6 compatibility wrappers + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 7) + +# ifndef MAX_JIFFY_OFFSET +# define MAX_JIFFY_OFFSET ((~0UL >> 1)-1) +# endif + +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 29) || LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + +DECLINLINE(unsigned int) jiffies_to_msecs(unsigned long cJiffies) +{ +# if HZ <= 1000 && !(1000 % HZ) + return (1000 / HZ) * cJiffies; +# elif HZ > 1000 && !(HZ % 1000) + return (cJiffies + (HZ / 1000) - 1) / (HZ / 1000); +# else + return (cJiffies * 1000) / HZ; +# endif +} + +DECLINLINE(unsigned long) msecs_to_jiffies(unsigned int cMillies) +{ +# if HZ > 1000 + if (cMillies > jiffies_to_msecs(MAX_JIFFY_OFFSET)) + return MAX_JIFFY_OFFSET; +# endif +# if HZ <= 1000 && !(1000 % HZ) + return (cMillies + (1000 / HZ) - 1) / (1000 / HZ); +# elif HZ > 1000 && !(HZ % 1000) + return cMillies * (HZ / 1000); +# else + return (cMillies * HZ + 999) / 1000; +# endif +} + +# endif /* < 2.4.29 || >= 2.6.0 */ + +#endif /* < 2.6.7 */ + +/* + * 2.4 compatibility wrappers + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) + +# define prepare_to_wait(q, wait, state) \ + do { \ + add_wait_queue(q, wait); \ + set_current_state(state); \ + } while (0) + +# define after_wait(wait) \ + do { \ + list_del_init(&(wait)->task_list); \ + } while (0) + +# define finish_wait(q, wait) \ + do { \ + set_current_state(TASK_RUNNING); \ + remove_wait_queue(q, wait); \ + } while (0) + +#else /* >= 2.6.0 */ + +# define after_wait(wait) do {} while (0) + +#endif /* >= 2.6.0 */ + +/** @def TICK_NSEC + * The time between ticks in nsec */ +#ifndef TICK_NSEC +# define TICK_NSEC (1000000000UL / HZ) +#endif + +/* + * This sucks soooo badly on x86! Why don't they export __PAGE_KERNEL_EXEC so PAGE_KERNEL_EXEC would be usable? + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(RT_ARCH_AMD64) +# define MY_PAGE_KERNEL_EXEC PAGE_KERNEL_EXEC +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(PAGE_KERNEL_EXEC) && defined(CONFIG_X86_PAE) +# ifdef __PAGE_KERNEL_EXEC + /* >= 2.6.27 */ +# define MY_PAGE_KERNEL_EXEC __pgprot(boot_cpu_has(X86_FEATURE_PGE) ? __PAGE_KERNEL_EXEC | _PAGE_GLOBAL : __PAGE_KERNEL_EXEC) +# else +# define MY_PAGE_KERNEL_EXEC __pgprot(boot_cpu_has(X86_FEATURE_PGE) ? _PAGE_KERNEL_EXEC | _PAGE_GLOBAL : _PAGE_KERNEL_EXEC) +# endif +#else +# define MY_PAGE_KERNEL_EXEC PAGE_KERNEL +#endif + + +/* + * The redhat hack section. + * - The current hacks are for 2.4.21-15.EL only. + */ +#ifndef NO_REDHAT_HACKS +/* accounting. */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# ifdef VM_ACCOUNT +# define USE_RHEL4_MUNMAP +# endif +# endif + +/* backported remap_page_range. */ +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# include +# ifdef tlb_vma /* probably not good enough... */ +# define HAVE_26_STYLE_REMAP_PAGE_RANGE 1 +# endif +# endif + +# ifndef RT_ARCH_AMD64 +/* In 2.6.9-22.ELsmp we have to call change_page_attr() twice when changing + * the page attributes from PAGE_KERNEL to something else, because there appears + * to be a bug in one of the many patches that redhat applied. + * It should be safe to do this on less buggy linux kernels too. ;-) + */ +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) \ + do { \ + if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) \ + change_page_attr(pPages, cPages, prot); \ + change_page_attr(pPages, cPages, prot); \ + } while (0) +# endif /* !RT_ARCH_AMD64 */ +#endif /* !NO_REDHAT_HACKS */ + +#ifndef MY_CHANGE_PAGE_ATTR +# ifdef RT_ARCH_AMD64 /** @todo This is a cheap hack, but it'll get around that 'else BUG();' in __change_page_attr(). */ +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) \ + do { \ + change_page_attr(pPages, cPages, PAGE_KERNEL_NOCACHE); \ + change_page_attr(pPages, cPages, prot); \ + } while (0) +# else +# define MY_CHANGE_PAGE_ATTR(pPages, cPages, prot) change_page_attr(pPages, cPages, prot) +# endif +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25) +# define MY_SET_PAGES_EXEC(pPages, cPages) set_pages_x(pPages, cPages) +# define MY_SET_PAGES_NOEXEC(pPages, cPages) set_pages_nx(pPages, cPages) +#else +# define MY_SET_PAGES_EXEC(pPages, cPages) \ + do { \ + if (pgprot_val(MY_PAGE_KERNEL_EXEC) != pgprot_val(PAGE_KERNEL)) \ + MY_CHANGE_PAGE_ATTR(pPages, cPages, MY_PAGE_KERNEL_EXEC); \ + } while (0) +# define MY_SET_PAGES_NOEXEC(pPages, cPages) \ + do { \ + if (pgprot_val(MY_PAGE_KERNEL_EXEC) != pgprot_val(PAGE_KERNEL)) \ + MY_CHANGE_PAGE_ATTR(pPages, cPages, PAGE_KERNEL); \ + } while (0) +#endif + +/** @def ONE_MSEC_IN_JIFFIES + * The number of jiffies that make up 1 millisecond. Must be at least 1! */ +#if HZ <= 1000 +# define ONE_MSEC_IN_JIFFIES 1 +#elif !(HZ % 1000) +# define ONE_MSEC_IN_JIFFIES (HZ / 1000) +#else +# define ONE_MSEC_IN_JIFFIES ((HZ + 999) / 1000) +# error "HZ is not a multiple of 1000, the GIP stuff won't work right!" +#endif + +/* + * Stop using the linux bool type. + */ +#undef bool + +#if RT_GNUC_PREREQ(4, 6) +# pragma GCC diagnostic pop +#endif + +/* + * There are post-2.6.24 kernels (confusingly with unchanged version number) + * which eliminate macros which were marked as deprecated. + */ +#ifndef __attribute_used__ +#define __attribute_used__ __used +#endif + +/** + * Hack for shortening pointers on linux so we can stuff more stuff into the + * task_struct::comm field. This is used by the semaphore code but put here + * because we don't have any better place atm. Don't use outside IPRT, please. + */ +#ifdef RT_ARCH_AMD64 +# define IPRT_DEBUG_SEMS_ADDRESS(addr) ( ((long)(addr) & (long)~UINT64_C(0xfffffff000000000)) ) +#else +# define IPRT_DEBUG_SEMS_ADDRESS(addr) ( (long)(addr) ) +#endif + +/** + * Puts semaphore info into the task_struct::comm field if IPRT_DEBUG_SEMS is + * defined. + */ +#ifdef IPRT_DEBUG_SEMS +# define IPRT_DEBUG_SEMS_STATE(pThis, chState) \ + snprintf(current->comm, sizeof(current->comm), "%c%lx", (chState), IPRT_DEBUG_SEMS_ADDRESS(pThis)); +#else +# define IPRT_DEBUG_SEMS_STATE(pThis, chState) do { } while (0) +#endif + +/** + * Puts semaphore info into the task_struct::comm field if IPRT_DEBUG_SEMS is + * defined. + */ +#ifdef IPRT_DEBUG_SEMS +# define IPRT_DEBUG_SEMS_STATE_RC(pThis, chState, rc) \ + snprintf(current->comm, sizeof(current->comm), "%c%lx:%d", (chState), IPRT_DEBUG_SEMS_ADDRESS(pThis), rc); +#else +# define IPRT_DEBUG_SEMS_STATE_RC(pThis, chState, rc) do { } while (0) +#endif + +/** @name Macros for preserving EFLAGS.AC on 3.19+/amd64 paranoid. + * The AMD 64 switch_to in macro in arch/x86/include/asm/switch_to.h stopped + * restoring flags. + * @{ */ +#if defined(CONFIG_X86_SMAP) || defined(RT_STRICT) || defined(IPRT_WITH_EFLAGS_AC_PRESERVING) +# include +# define IPRT_X86_EFL_AC RT_BIT(18) +# define IPRT_LINUX_SAVE_EFL_AC() RTCCUINTREG fSavedEfl = ASMGetFlags() +# define IPRT_LINUX_RESTORE_EFL_AC() ASMSetFlags(fSavedEfl) +# define IPRT_LINUX_RESTORE_EFL_ONLY_AC() ASMChangeFlags(~IPRT_X86_EFL_AC, fSavedEfl & IPRT_X86_EFL_AC) +#else +# define IPRT_LINUX_SAVE_EFL_AC() do { } while (0) +# define IPRT_LINUX_RESTORE_EFL_AC() do { } while (0) +# define IPRT_LINUX_RESTORE_EFL_ONLY_AC() do { } while (0) +#endif +/** @} */ + +/* + * There are some conflicting defines in iprt/param.h, sort them out here. + */ +#ifndef ___iprt_param_h +# undef PAGE_SIZE +# undef PAGE_OFFSET_MASK +# include +#endif + +/* + * Some global indicator macros. + */ +/** @def IPRT_LINUX_HAS_HRTIMER + * Whether the kernel support high resolution timers (Linux kernel versions + * 2.6.28 and later (hrtimer_add_expires_ns() & schedule_hrtimeout). */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) +# define IPRT_LINUX_HAS_HRTIMER +#endif + +/* + * Workqueue stuff, see initterm-r0drv-linux.c. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 41) +typedef struct work_struct RTR0LNXWORKQUEUEITEM; +#else +typedef struct tq_struct RTR0LNXWORKQUEUEITEM; +#endif +DECLHIDDEN(void) rtR0LnxWorkqueuePush(RTR0LNXWORKQUEUEITEM *pWork, void (*pfnWorker)(RTR0LNXWORKQUEUEITEM *)); +DECLHIDDEN(void) rtR0LnxWorkqueueFlush(void); + + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/regops.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/regops.c @@ -0,0 +1,730 @@ +/* $Id: regops.c $ */ +/** @file + * vboxsf - VBox Linux Shared Folders, Regular file inode and file operations. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +/* + * Limitations: only COW memory mapping is supported + */ + +#include "vfsmod.h" + +static void *alloc_bounce_buffer(size_t *tmp_sizep, PRTCCPHYS physp, size_t + xfer_size, const char *caller) +{ + size_t tmp_size; + void *tmp; + + /* try for big first. */ + tmp_size = RT_ALIGN_Z(xfer_size, PAGE_SIZE); + if (tmp_size > 16U*_1K) + tmp_size = 16U*_1K; + tmp = kmalloc(tmp_size, GFP_KERNEL); + if (!tmp) + { + /* fall back on a page sized buffer. */ + tmp = kmalloc(PAGE_SIZE, GFP_KERNEL); + if (!tmp) + { + LogRel(("%s: could not allocate bounce buffer for xfer_size=%zu %s\n", caller, xfer_size)); + return NULL; + } + tmp_size = PAGE_SIZE; + } + + *tmp_sizep = tmp_size; + *physp = virt_to_phys(tmp); + return tmp; +} + +static void free_bounce_buffer(void *tmp) +{ + kfree (tmp); +} + + +/* fops */ +static int sf_reg_read_aux(const char *caller, struct sf_glob_info *sf_g, + struct sf_reg_info *sf_r, void *buf, + uint32_t *nread, uint64_t pos) +{ + /** @todo bird: yes, kmap() and kmalloc() input only. Since the buffer is + * contiguous in physical memory (kmalloc or single page), we should + * use a physical address here to speed things up. */ + int rc = VbglR0SfRead(&client_handle, &sf_g->map, sf_r->handle, + pos, nread, buf, false /* already locked? */); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfRead failed. caller=%s, rc=%Rrc\n", caller, rc)); + return -EPROTO; + } + return 0; +} + +static int sf_reg_write_aux(const char *caller, struct sf_glob_info *sf_g, + struct sf_reg_info *sf_r, void *buf, + uint32_t *nwritten, uint64_t pos) +{ + /** @todo bird: yes, kmap() and kmalloc() input only. Since the buffer is + * contiguous in physical memory (kmalloc or single page), we should + * use a physical address here to speed things up. */ + int rc = VbglR0SfWrite(&client_handle, &sf_g->map, sf_r->handle, + pos, nwritten, buf, false /* already locked? */); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfWrite failed. caller=%s, rc=%Rrc\n", + caller, rc)); + return -EPROTO; + } + return 0; +} + +/** + * Read from a regular file. + * + * @param file the file + * @param buf the buffer + * @param size length of the buffer + * @param off offset within the file + * @returns the number of read bytes on success, Linux error code otherwise + */ +static ssize_t sf_reg_read(struct file *file, char *buf, size_t size, loff_t *off) +{ + int err; + void *tmp; + RTCCPHYS tmp_phys; + size_t tmp_size; + size_t left = size; + ssize_t total_bytes_read = 0; + struct inode *inode = GET_F_DENTRY(file)->d_inode; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_reg_info *sf_r = file->private_data; + loff_t pos = *off; + + TRACE(); + if (!S_ISREG(inode->i_mode)) + { + LogFunc(("read from non regular file %d\n", inode->i_mode)); + return -EINVAL; + } + + /** XXX Check read permission according to inode->i_mode! */ + + if (!size) + return 0; + + tmp = alloc_bounce_buffer(&tmp_size, &tmp_phys, size, __PRETTY_FUNCTION__); + if (!tmp) + return -ENOMEM; + + while (left) + { + uint32_t to_read, nread; + + to_read = tmp_size; + if (to_read > left) + to_read = (uint32_t) left; + + nread = to_read; + + err = sf_reg_read_aux(__func__, sf_g, sf_r, tmp, &nread, pos); + if (err) + goto fail; + + if (copy_to_user(buf, tmp, nread)) + { + err = -EFAULT; + goto fail; + } + + pos += nread; + left -= nread; + buf += nread; + total_bytes_read += nread; + if (nread != to_read) + break; + } + + *off += total_bytes_read; + free_bounce_buffer(tmp); + return total_bytes_read; + +fail: + free_bounce_buffer(tmp); + return err; +} + +/** + * Write to a regular file. + * + * @param file the file + * @param buf the buffer + * @param size length of the buffer + * @param off offset within the file + * @returns the number of written bytes on success, Linux error code otherwise + */ +static ssize_t sf_reg_write(struct file *file, const char *buf, size_t size, loff_t *off) +{ + int err; + void *tmp; + RTCCPHYS tmp_phys; + size_t tmp_size; + size_t left = size; + ssize_t total_bytes_written = 0; + struct inode *inode = GET_F_DENTRY(file)->d_inode; + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_reg_info *sf_r = file->private_data; + loff_t pos; + + TRACE(); + BUG_ON(!sf_i); + BUG_ON(!sf_g); + BUG_ON(!sf_r); + + if (!S_ISREG(inode->i_mode)) + { + LogFunc(("write to non regular file %d\n", inode->i_mode)); + return -EINVAL; + } + + pos = *off; + if (file->f_flags & O_APPEND) + { + pos = inode->i_size; + *off = pos; + } + + /** XXX Check write permission according to inode->i_mode! */ + + if (!size) + return 0; + + tmp = alloc_bounce_buffer(&tmp_size, &tmp_phys, size, __PRETTY_FUNCTION__); + if (!tmp) + return -ENOMEM; + + while (left) + { + uint32_t to_write, nwritten; + + to_write = tmp_size; + if (to_write > left) + to_write = (uint32_t) left; + + nwritten = to_write; + + if (copy_from_user(tmp, buf, to_write)) + { + err = -EFAULT; + goto fail; + } + + err = VbglR0SfWritePhysCont(&client_handle, &sf_g->map, sf_r->handle, + pos, &nwritten, tmp_phys); + err = RT_FAILURE(err) ? -EPROTO : 0; + if (err) + goto fail; + + pos += nwritten; + left -= nwritten; + buf += nwritten; + total_bytes_written += nwritten; + if (nwritten != to_write) + break; + } + + *off += total_bytes_written; + if (*off > inode->i_size) + inode->i_size = *off; + + sf_i->force_restat = 1; + free_bounce_buffer(tmp); + return total_bytes_written; + +fail: + free_bounce_buffer(tmp); + return err; +} + +/** + * Open a regular file. + * + * @param inode the inode + * @param file the file + * @returns 0 on success, Linux error code otherwise + */ +static int sf_reg_open(struct inode *inode, struct file *file) +{ + int rc, rc_linux = 0; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + struct sf_reg_info *sf_r; + SHFLCREATEPARMS params; + + TRACE(); + BUG_ON(!sf_g); + BUG_ON(!sf_i); + + LogFunc(("open %s\n", sf_i->path->String.utf8)); + + sf_r = kmalloc(sizeof(*sf_r), GFP_KERNEL); + if (!sf_r) + { + LogRelFunc(("could not allocate reg info\n")); + return -ENOMEM; + } + + /* Already open? */ + if (sf_i->handle != SHFL_HANDLE_NIL) + { + /* + * This inode was created with sf_create_aux(). Check the CreateFlags: + * O_CREAT, O_TRUNC: inherent true (file was just created). Not sure + * about the access flags (SHFL_CF_ACCESS_*). + */ + sf_i->force_restat = 1; + sf_r->handle = sf_i->handle; + sf_i->handle = SHFL_HANDLE_NIL; + sf_i->file = file; + file->private_data = sf_r; + return 0; + } + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + /* We check the value of params.Handle afterwards to find out if + * the call succeeded or failed, as the API does not seem to cleanly + * distinguish error and informational messages. + * + * Furthermore, we must set params.Handle to SHFL_HANDLE_NIL to + * make the shared folders host service use our fMode parameter */ + + if (file->f_flags & O_CREAT) + { + LogFunc(("O_CREAT set\n")); + params.CreateFlags |= SHFL_CF_ACT_CREATE_IF_NEW; + /* We ignore O_EXCL, as the Linux kernel seems to call create + beforehand itself, so O_EXCL should always fail. */ + if (file->f_flags & O_TRUNC) + { + LogFunc(("O_TRUNC set\n")); + params.CreateFlags |= SHFL_CF_ACT_OVERWRITE_IF_EXISTS; + } + else + params.CreateFlags |= SHFL_CF_ACT_OPEN_IF_EXISTS; + } + else + { + params.CreateFlags |= SHFL_CF_ACT_FAIL_IF_NEW; + if (file->f_flags & O_TRUNC) + { + LogFunc(("O_TRUNC set\n")); + params.CreateFlags |= SHFL_CF_ACT_OVERWRITE_IF_EXISTS; + } + } + + switch (file->f_flags & O_ACCMODE) + { + case O_RDONLY: + params.CreateFlags |= SHFL_CF_ACCESS_READ; + break; + + case O_WRONLY: + params.CreateFlags |= SHFL_CF_ACCESS_WRITE; + break; + + case O_RDWR: + params.CreateFlags |= SHFL_CF_ACCESS_READWRITE; + break; + + default: + BUG (); + } + + if (file->f_flags & O_APPEND) + { + LogFunc(("O_APPEND set\n")); + params.CreateFlags |= SHFL_CF_ACCESS_APPEND; + } + + params.Info.Attr.fMode = inode->i_mode; + LogFunc(("sf_reg_open: calling VbglR0SfCreate, file %s, flags=%#x, %#x\n", + sf_i->path->String.utf8 , file->f_flags, params.CreateFlags)); + rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, ¶ms); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfCreate failed flags=%d,%#x rc=%Rrc\n", + file->f_flags, params.CreateFlags, rc)); + kfree(sf_r); + return -RTErrConvertToErrno(rc); + } + + if (SHFL_HANDLE_NIL == params.Handle) + { + switch (params.Result) + { + case SHFL_PATH_NOT_FOUND: + case SHFL_FILE_NOT_FOUND: + rc_linux = -ENOENT; + break; + case SHFL_FILE_EXISTS: + rc_linux = -EEXIST; + break; + default: + break; + } + } + + sf_i->force_restat = 1; + sf_r->handle = params.Handle; + sf_i->file = file; + file->private_data = sf_r; + return rc_linux; +} + +/** + * Close a regular file. + * + * @param inode the inode + * @param file the file + * @returns 0 on success, Linux error code otherwise + */ +static int sf_reg_release(struct inode *inode, struct file *file) +{ + int rc; + struct sf_reg_info *sf_r; + struct sf_glob_info *sf_g; + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + + TRACE(); + sf_g = GET_GLOB_INFO(inode->i_sb); + sf_r = file->private_data; + + BUG_ON(!sf_g); + BUG_ON(!sf_r); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + /* See the smbfs source (file.c). mmap in particular can cause data to be + * written to the file after it is closed, which we can't cope with. We + * copy and paste the body of filemap_write_and_wait() here as it was not + * defined before 2.6.6 and not exported until quite a bit later. */ + /* filemap_write_and_wait(inode->i_mapping); */ + if ( inode->i_mapping->nrpages + && filemap_fdatawrite(inode->i_mapping) != -EIO) + filemap_fdatawait(inode->i_mapping); +#endif + rc = VbglR0SfClose(&client_handle, &sf_g->map, sf_r->handle); + if (RT_FAILURE(rc)) + LogFunc(("VbglR0SfClose failed rc=%Rrc\n", rc)); + + kfree(sf_r); + sf_i->file = NULL; + sf_i->handle = SHFL_HANDLE_NIL; + file->private_data = NULL; + return 0; +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +static int sf_reg_fault(struct vm_fault *vmf) +#elif LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) +static int sf_reg_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static struct page *sf_reg_nopage(struct vm_area_struct *vma, unsigned long vaddr, int *type) +# define SET_TYPE(t) *type = (t) +#else /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) */ +static struct page *sf_reg_nopage(struct vm_area_struct *vma, unsigned long vaddr, int unused) +# define SET_TYPE(t) +#endif +{ + struct page *page; + char *buf; + loff_t off; + uint32_t nread = PAGE_SIZE; + int err; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + struct vm_area_struct *vma = vmf->vma; +#endif + struct file *file = vma->vm_file; + struct inode *inode = GET_F_DENTRY(file)->d_inode; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_reg_info *sf_r = file->private_data; + + TRACE(); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + if (vmf->pgoff > vma->vm_end) + return VM_FAULT_SIGBUS; +#else + if (vaddr > vma->vm_end) + { + SET_TYPE(VM_FAULT_SIGBUS); + return NOPAGE_SIGBUS; + } +#endif + + /* Don't use GFP_HIGHUSER as long as sf_reg_read_aux() calls VbglR0SfRead() + * which works on virtual addresses. On Linux cannot reliably determine the + * physical address for high memory, see rtR0MemObjNativeLockKernel(). */ + page = alloc_page(GFP_USER); + if (!page) { + LogRelFunc(("failed to allocate page\n")); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + return VM_FAULT_OOM; +#else + SET_TYPE(VM_FAULT_OOM); + return NOPAGE_OOM; +#endif + } + + buf = kmap(page); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + off = (vmf->pgoff << PAGE_SHIFT); +#else + off = (vaddr - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT); +#endif + err = sf_reg_read_aux(__func__, sf_g, sf_r, buf, &nread, off); + if (err) + { + kunmap(page); + put_page(page); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + return VM_FAULT_SIGBUS; +#else + SET_TYPE(VM_FAULT_SIGBUS); + return NOPAGE_SIGBUS; +#endif + } + + BUG_ON (nread > PAGE_SIZE); + if (!nread) + { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + clear_user_page(page_address(page), vmf->pgoff, page); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + clear_user_page(page_address(page), vaddr, page); +#else + clear_user_page(page_address(page), vaddr); +#endif + } + else + memset(buf + nread, 0, PAGE_SIZE - nread); + + flush_dcache_page(page); + kunmap(page); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + vmf->page = page; + return 0; +#else + SET_TYPE(VM_FAULT_MAJOR); + return page; +#endif +} + +static struct vm_operations_struct sf_vma_ops = +{ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25) + .fault = sf_reg_fault +#else + .nopage = sf_reg_nopage +#endif +}; + +static int sf_reg_mmap(struct file *file, struct vm_area_struct *vma) +{ + TRACE(); + if (vma->vm_flags & VM_SHARED) + { + LogFunc(("shared mmapping not available\n")); + return -EINVAL; + } + + vma->vm_ops = &sf_vma_ops; + return 0; +} + +struct file_operations sf_reg_fops = +{ + .read = sf_reg_read, + .open = sf_reg_open, + .write = sf_reg_write, + .release = sf_reg_release, + .mmap = sf_reg_mmap, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31) +/** @todo This code is known to cause caching of data which should not be + * cached. Investigate. */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) + .splice_read = generic_file_splice_read, +# else + .sendfile = generic_file_sendfile, +# endif + .aio_read = generic_file_aio_read, + .aio_write = generic_file_aio_write, +# endif +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) + .fsync = noop_fsync, +# else + .fsync = simple_sync_file, +# endif + .llseek = generic_file_llseek, +#endif +}; + + +struct inode_operations sf_reg_iops = +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) + .revalidate = sf_inode_revalidate +#else + .getattr = sf_getattr, + .setattr = sf_setattr +#endif +}; + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int sf_readpage(struct file *file, struct page *page) +{ + struct inode *inode = GET_F_DENTRY(file)->d_inode; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_reg_info *sf_r = file->private_data; + uint32_t nread = PAGE_SIZE; + char *buf; + loff_t off = ((loff_t)page->index) << PAGE_SHIFT; + int ret; + + TRACE(); + + buf = kmap(page); + ret = sf_reg_read_aux(__func__, sf_g, sf_r, buf, &nread, off); + if (ret) + { + kunmap(page); + if (PageLocked(page)) + unlock_page(page); + return ret; + } + BUG_ON(nread > PAGE_SIZE); + memset(&buf[nread], 0, PAGE_SIZE - nread); + flush_dcache_page(page); + kunmap(page); + SetPageUptodate(page); + unlock_page(page); + return 0; +} + +static int +sf_writepage(struct page *page, struct writeback_control *wbc) +{ + struct address_space *mapping = page->mapping; + struct inode *inode = mapping->host; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_inode_info *sf_i = GET_INODE_INFO(inode); + struct file *file = sf_i->file; + struct sf_reg_info *sf_r = file->private_data; + char *buf; + uint32_t nwritten = PAGE_SIZE; + int end_index = inode->i_size >> PAGE_SHIFT; + loff_t off = ((loff_t) page->index) << PAGE_SHIFT; + int err; + + TRACE(); + + if (page->index >= end_index) + nwritten = inode->i_size & (PAGE_SIZE-1); + + buf = kmap(page); + + err = sf_reg_write_aux(__func__, sf_g, sf_r, buf, &nwritten, off); + if (err < 0) + { + ClearPageUptodate(page); + goto out; + } + + if (off > inode->i_size) + inode->i_size = off; + + if (PageError(page)) + ClearPageError(page); + err = 0; + +out: + kunmap(page); + + unlock_page(page); + return err; +} + +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) +int sf_write_begin(struct file *file, struct address_space *mapping, loff_t pos, + unsigned len, unsigned flags, struct page **pagep, void **fsdata) +{ + TRACE(); + + return simple_write_begin(file, mapping, pos, len, flags, pagep, fsdata); +} + +int sf_write_end(struct file *file, struct address_space *mapping, loff_t pos, + unsigned len, unsigned copied, struct page *page, void *fsdata) +{ + struct inode *inode = mapping->host; + struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb); + struct sf_reg_info *sf_r = file->private_data; + void *buf; + unsigned from = pos & (PAGE_SIZE - 1); + uint32_t nwritten = len; + int err; + + TRACE(); + + buf = kmap(page); + err = sf_reg_write_aux(__func__, sf_g, sf_r, buf+from, &nwritten, pos); + kunmap(page); + + if (!PageUptodate(page) && err == PAGE_SIZE) + SetPageUptodate(page); + + if (err >= 0) { + pos += nwritten; + if (pos > inode->i_size) + inode->i_size = pos; + } + + unlock_page(page); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) + put_page(page); +#else + page_cache_release(page); +#endif + + return nwritten; +} + +# endif /* KERNEL_VERSION >= 2.6.24 */ + +struct address_space_operations sf_reg_aops = +{ + .readpage = sf_readpage, + .writepage = sf_writepage, +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) + .write_begin = sf_write_begin, + .write_end = sf_write_end, +# else + .prepare_write = simple_prepare_write, + .commit_write = simple_commit_write, +# endif +}; +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/revision-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/revision-generated.h @@ -0,0 +1 @@ +#define VBOX_SVN_REV 120293 --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/udivdi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/udivdi3.c @@ -0,0 +1,56 @@ +/* $NetBSD: udivdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)udivdi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: udivdi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Divide two unsigned quads. + */ +u_quad_t +__udivdi3(a, b) + u_quad_t a, b; +{ + + return (__qdivrem(a, b, (u_quad_t *)0)); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/udivmoddi4.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/udivmoddi4.c @@ -0,0 +1,53 @@ +/* $Id: udivmoddi4.c $ */ +/** @file + * IPRT - __udivmoddi4 implementation + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + +#include +#include + +uint64_t __udivmoddi4(uint64_t u64A, uint64_t u64B, uint64_t *pu64R); + +/** + * __udivmoddi4() implementation to satisfy external references from 32-bit + * code generated by gcc-7 or later. + * + * @param u64A The divident value. + * @param u64B The divisor value. + * @param pu64R A pointer to the reminder. May be NULL. + * @returns u64A / u64B + */ +uint64_t __udivmoddi4(uint64_t u64A, uint64_t u64B, uint64_t *pu64R) +{ + RTUINT64U Divident; + RTUINT64U Divisor; + RTUINT64U Quotient; + RTUINT64U Reminder; + Divident.u = u64A; + Divisor.u = u64B; + RTUInt64DivRem(&Quotient, &Reminder, &Divident, &Divisor); + if (pu64R) + *pu64R = Reminder.u; + return Quotient.u; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/umoddi3.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/umoddi3.c @@ -0,0 +1,58 @@ +/* $NetBSD: umoddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $ */ + +/*- + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This software was developed by the Computer Systems Engineering group + * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and + * contributed to Berkeley. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/*#include +#if defined(LIBC_SCCS) && !defined(lint) +#if 0 +static char sccsid[] = "@(#)umoddi3.c 8.1 (Berkeley) 6/4/93"; +#else +__RCSID("$NetBSD: umoddi3.c,v 1.8 2005/12/11 12:24:37 christos Exp $"); +#endif +#endif*/ /* LIBC_SCCS and not lint */ + +#include "quad.h" + +/* + * Return remainder after dividing two unsigned quads. + */ +u_quad_t +__umoddi3(a, b) + u_quad_t a, b; +{ + u_quad_t r; + + (void)__qdivrem(a, b, &r); + return (r); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/utils.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/utils.c @@ -0,0 +1,907 @@ +/** @file + * + * vboxsf -- VirtualBox Guest Additions for Linux: + * Utility functions. + * Mainly conversion from/to VirtualBox/Linux data structures + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#include "vfsmod.h" +#include +#include +#include + +/* #define USE_VMALLOC */ + +/* + * sf_reg_aops and sf_backing_dev_info are just quick implementations to make + * sendfile work. For more information have a look at + * + * http://us1.samba.org/samba/ftp/cifs-cvs/ols2006-fs-tutorial-smf.odp + * + * and the sample implementation + * + * http://pserver.samba.org/samba/ftp/cifs-cvs/samplefs.tar.gz + */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +static void sf_ftime_from_timespec(time_t *time, RTTIMESPEC *ts) +{ + int64_t t = RTTimeSpecGetNano(ts); + + do_div(t, 1000000000); + *time = t; +} + +static void sf_timespec_from_ftime(RTTIMESPEC *ts, time_t *time) +{ + int64_t t = 1000000000 * *time; + RTTimeSpecSetNano(ts, t); +} +#else /* >= 2.6.0 */ +static void sf_ftime_from_timespec(struct timespec *tv, RTTIMESPEC *ts) +{ + int64_t t = RTTimeSpecGetNano(ts); + int64_t nsec; + + nsec = do_div(t, 1000000000); + tv->tv_sec = t; + tv->tv_nsec = nsec; +} + +static void sf_timespec_from_ftime(RTTIMESPEC *ts, struct timespec *tv) +{ + int64_t t = (int64_t)tv->tv_nsec + (int64_t)tv->tv_sec * 1000000000; + RTTimeSpecSetNano(ts, t); +} +#endif /* >= 2.6.0 */ + +/* set [inode] attributes based on [info], uid/gid based on [sf_g] */ +void sf_init_inode(struct sf_glob_info *sf_g, struct inode *inode, + PSHFLFSOBJINFO info) +{ + PSHFLFSOBJATTR attr; + int mode; + + TRACE(); + + attr = &info->Attr; + +#define mode_set(r) attr->fMode & (RTFS_UNIX_##r) ? (S_##r) : 0; + mode = mode_set(ISUID); + mode |= mode_set(ISGID); + + mode |= mode_set(IRUSR); + mode |= mode_set(IWUSR); + mode |= mode_set(IXUSR); + + mode |= mode_set(IRGRP); + mode |= mode_set(IWGRP); + mode |= mode_set(IXGRP); + + mode |= mode_set(IROTH); + mode |= mode_set(IWOTH); + mode |= mode_set(IXOTH); + +#undef mode_set + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + inode->i_mapping->a_ops = &sf_reg_aops; +# if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 19, 0) + /* XXX Was this ever necessary? */ + inode->i_mapping->backing_dev_info = &sf_g->bdi; +# endif +#endif + + if (RTFS_IS_DIRECTORY(attr->fMode)) + { + inode->i_mode = sf_g->dmode != ~0 ? (sf_g->dmode & 0777) : mode; + inode->i_mode &= ~sf_g->dmask; + inode->i_mode |= S_IFDIR; + inode->i_op = &sf_dir_iops; + inode->i_fop = &sf_dir_fops; + /* XXX: this probably should be set to the number of entries + in the directory plus two (. ..) */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) + set_nlink(inode, 1); +#else + inode->i_nlink = 1; +#endif + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + else if (RTFS_IS_SYMLINK(attr->fMode)) + { + inode->i_mode = sf_g->fmode != ~0 ? (sf_g->fmode & 0777): mode; + inode->i_mode &= ~sf_g->fmask; + inode->i_mode |= S_IFLNK; + inode->i_op = &sf_lnk_iops; +# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) + set_nlink(inode, 1); +# else + inode->i_nlink = 1; +# endif + } +#endif + else + { + inode->i_mode = sf_g->fmode != ~0 ? (sf_g->fmode & 0777): mode; + inode->i_mode &= ~sf_g->fmask; + inode->i_mode |= S_IFREG; + inode->i_op = &sf_reg_iops; + inode->i_fop = &sf_reg_fops; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) + set_nlink(inode, 1); +#else + inode->i_nlink = 1; +#endif + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + inode->i_uid = make_kuid(current_user_ns(), sf_g->uid); + inode->i_gid = make_kgid(current_user_ns(), sf_g->gid); +#else + inode->i_uid = sf_g->uid; + inode->i_gid = sf_g->gid; +#endif + + inode->i_size = info->cbObject; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) && !defined(KERNEL_FC6) + inode->i_blksize = 4096; +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 11) + inode->i_blkbits = 12; +#endif + /* i_blocks always in units of 512 bytes! */ + inode->i_blocks = (info->cbAllocated + 511) / 512; + + sf_ftime_from_timespec(&inode->i_atime, &info->AccessTime); + sf_ftime_from_timespec(&inode->i_ctime, &info->ChangeTime); + sf_ftime_from_timespec(&inode->i_mtime, &info->ModificationTime); +} + +int sf_stat(const char *caller, struct sf_glob_info *sf_g, + SHFLSTRING *path, PSHFLFSOBJINFO result, int ok_to_fail) +{ + int rc; + SHFLCREATEPARMS params; + NOREF(caller); + + TRACE(); + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + params.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW; + LogFunc(("sf_stat: calling VbglR0SfCreate, file %s, flags %#x\n", + path->String.utf8, params.CreateFlags)); + rc = VbglR0SfCreate(&client_handle, &sf_g->map, path, ¶ms); + if (rc == VERR_INVALID_NAME) + { + /* this can happen for names like 'foo*' on a Windows host */ + return -ENOENT; + } + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfCreate(%s) failed. caller=%s, rc=%Rrc\n", + path->String.utf8, rc, caller)); + return -EPROTO; + } + if (params.Result != SHFL_FILE_EXISTS) + { + if (!ok_to_fail) + LogFunc(("VbglR0SfCreate(%s) file does not exist. caller=%s, result=%d\n", + path->String.utf8, params.Result, caller)); + return -ENOENT; + } + + *result = params.Info; + return 0; +} + +/* this is called directly as iop on 2.4, indirectly as dop + [sf_dentry_revalidate] on 2.4/2.6, indirectly as iop through + [sf_getattr] on 2.6. the job is to find out whether dentry/inode is + still valid. the test is failed if [dentry] does not have an inode + or [sf_stat] is unsuccessful, otherwise we return success and + update inode attributes */ +int sf_inode_revalidate(struct dentry *dentry) +{ + int err; + struct sf_glob_info *sf_g; + struct sf_inode_info *sf_i; + SHFLFSOBJINFO info; + + TRACE(); + if (!dentry || !dentry->d_inode) + { + LogFunc(("no dentry(%p) or inode(%p)\n", dentry, dentry->d_inode)); + return -EINVAL; + } + + sf_g = GET_GLOB_INFO(dentry->d_inode->i_sb); + sf_i = GET_INODE_INFO(dentry->d_inode); + +#if 0 + printk("%s called by %p:%p\n", + sf_i->path->String.utf8, + __builtin_return_address (0), + __builtin_return_address (1)); +#endif + + BUG_ON(!sf_g); + BUG_ON(!sf_i); + + if (!sf_i->force_restat) + { + if (jiffies - dentry->d_time < sf_g->ttl) + return 0; + } + + err = sf_stat(__func__, sf_g, sf_i->path, &info, 1); + if (err) + return err; + + dentry->d_time = jiffies; + sf_init_inode(sf_g, dentry->d_inode, &info); + return 0; +} + +/* this is called during name resolution/lookup to check if the + [dentry] in the cache is still valid. the job is handled by + [sf_inode_revalidate] */ +static int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) +sf_dentry_revalidate(struct dentry *dentry, unsigned flags) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +sf_dentry_revalidate(struct dentry *dentry, struct nameidata *nd) +#else +sf_dentry_revalidate(struct dentry *dentry, int flags) +#endif +{ + TRACE(); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) + if (flags & LOOKUP_RCU) + return -ECHILD; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38) + /* see Documentation/filesystems/vfs.txt */ + if (nd && nd->flags & LOOKUP_RCU) + return -ECHILD; +#endif + + if (sf_inode_revalidate(dentry)) + return 0; + + return 1; +} + +/* on 2.6 this is a proxy for [sf_inode_revalidate] which (as a side + effect) updates inode attributes for [dentry] (given that [dentry] + has inode at all) from these new attributes we derive [kstat] via + [generic_fillattr] */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +int sf_getattr(const struct path *path, struct kstat *kstat, u32 request_mask, unsigned int flags) +# else +int sf_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *kstat) +# endif +{ + int err; +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + struct dentry *dentry = path->dentry; +# endif + + TRACE(); + err = sf_inode_revalidate(dentry); + if (err) + return err; + + generic_fillattr(dentry->d_inode, kstat); + return 0; +} + +int sf_setattr(struct dentry *dentry, struct iattr *iattr) +{ + struct sf_glob_info *sf_g; + struct sf_inode_info *sf_i; + SHFLCREATEPARMS params; + SHFLFSOBJINFO info; + uint32_t cbBuffer; + int rc, err; + + TRACE(); + + sf_g = GET_GLOB_INFO(dentry->d_inode->i_sb); + sf_i = GET_INODE_INFO(dentry->d_inode); + err = 0; + + RT_ZERO(params); + params.Handle = SHFL_HANDLE_NIL; + params.CreateFlags = SHFL_CF_ACT_OPEN_IF_EXISTS + | SHFL_CF_ACT_FAIL_IF_NEW + | SHFL_CF_ACCESS_ATTR_WRITE; + + /* this is at least required for Posix hosts */ + if (iattr->ia_valid & ATTR_SIZE) + params.CreateFlags |= SHFL_CF_ACCESS_WRITE; + + rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, ¶ms); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfCreate(%s) failed rc=%Rrc\n", + sf_i->path->String.utf8, rc)); + err = -RTErrConvertToErrno(rc); + goto fail2; + } + if (params.Result != SHFL_FILE_EXISTS) + { + LogFunc(("file %s does not exist\n", sf_i->path->String.utf8)); + err = -ENOENT; + goto fail1; + } + + /* Setting the file size and setting the other attributes has to be + * handled separately, see implementation of vbsfSetFSInfo() in + * vbsf.cpp */ + if (iattr->ia_valid & (ATTR_MODE | ATTR_ATIME | ATTR_MTIME)) + { +#define mode_set(r) ((iattr->ia_mode & (S_##r)) ? RTFS_UNIX_##r : 0) + + RT_ZERO(info); + if (iattr->ia_valid & ATTR_MODE) + { + info.Attr.fMode = mode_set(ISUID); + info.Attr.fMode |= mode_set(ISGID); + info.Attr.fMode |= mode_set(IRUSR); + info.Attr.fMode |= mode_set(IWUSR); + info.Attr.fMode |= mode_set(IXUSR); + info.Attr.fMode |= mode_set(IRGRP); + info.Attr.fMode |= mode_set(IWGRP); + info.Attr.fMode |= mode_set(IXGRP); + info.Attr.fMode |= mode_set(IROTH); + info.Attr.fMode |= mode_set(IWOTH); + info.Attr.fMode |= mode_set(IXOTH); + + if (iattr->ia_mode & S_IFDIR) + info.Attr.fMode |= RTFS_TYPE_DIRECTORY; + else + info.Attr.fMode |= RTFS_TYPE_FILE; + } + + if (iattr->ia_valid & ATTR_ATIME) + sf_timespec_from_ftime(&info.AccessTime, &iattr->ia_atime); + if (iattr->ia_valid & ATTR_MTIME) + sf_timespec_from_ftime(&info.ModificationTime, &iattr->ia_mtime); + /* ignore ctime (inode change time) as it can't be set from userland anyway */ + + cbBuffer = sizeof(info); + rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, params.Handle, + SHFL_INFO_SET | SHFL_INFO_FILE, &cbBuffer, + (PSHFLDIRINFO)&info); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfFsInfo(%s, FILE) failed rc=%Rrc\n", + sf_i->path->String.utf8, rc)); + err = -RTErrConvertToErrno(rc); + goto fail1; + } + } + + if (iattr->ia_valid & ATTR_SIZE) + { + RT_ZERO(info); + info.cbObject = iattr->ia_size; + cbBuffer = sizeof(info); + rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, params.Handle, + SHFL_INFO_SET | SHFL_INFO_SIZE, &cbBuffer, + (PSHFLDIRINFO)&info); + if (RT_FAILURE(rc)) + { + LogFunc(("VbglR0SfFsInfo(%s, SIZE) failed rc=%Rrc\n", + sf_i->path->String.utf8, rc)); + err = -RTErrConvertToErrno(rc); + goto fail1; + } + } + + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc)); + + return sf_inode_revalidate(dentry); + +fail1: + rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle); + if (RT_FAILURE(rc)) + LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc)); + +fail2: + return err; +} +#endif /* >= 2.6.0 */ + +static int sf_make_path(const char *caller, struct sf_inode_info *sf_i, + const char *d_name, size_t d_len, SHFLSTRING **result) +{ + size_t path_len, shflstring_len; + SHFLSTRING *tmp; + uint16_t p_len; + uint8_t *p_name; + int fRoot = 0; + + TRACE(); + p_len = sf_i->path->u16Length; + p_name = sf_i->path->String.utf8; + + if (p_len == 1 && *p_name == '/') + { + path_len = d_len + 1; + fRoot = 1; + } + else + { + /* lengths of constituents plus terminating zero plus slash */ + path_len = p_len + d_len + 2; + if (path_len > 0xffff) + { + LogFunc(("path too long. caller=%s, path_len=%zu\n", caller, path_len)); + return -ENAMETOOLONG; + } + } + + shflstring_len = offsetof(SHFLSTRING, String.utf8) + path_len; + tmp = kmalloc(shflstring_len, GFP_KERNEL); + if (!tmp) + { + LogRelFunc(("kmalloc failed, caller=%s\n", caller)); + return -ENOMEM; + } + tmp->u16Length = path_len - 1; + tmp->u16Size = path_len; + + if (fRoot) + memcpy(&tmp->String.utf8[0], d_name, d_len + 1); + else + { + memcpy(&tmp->String.utf8[0], p_name, p_len); + tmp->String.utf8[p_len] = '/'; + memcpy(&tmp->String.utf8[p_len + 1], d_name, d_len); + tmp->String.utf8[p_len + 1 + d_len] = '\0'; + } + + *result = tmp; + return 0; +} + +/** + * [dentry] contains string encoded in coding system that corresponds + * to [sf_g]->nls, we must convert it to UTF8 here and pass down to + * [sf_make_path] which will allocate SHFLSTRING and fill it in + */ +int sf_path_from_dentry(const char *caller, struct sf_glob_info *sf_g, + struct sf_inode_info *sf_i, struct dentry *dentry, + SHFLSTRING **result) +{ + int err; + const char *d_name; + size_t d_len; + const char *name; + size_t len = 0; + + TRACE(); + d_name = dentry->d_name.name; + d_len = dentry->d_name.len; + + if (sf_g->nls) + { + size_t in_len, i, out_bound_len; + const char *in; + char *out; + + in = d_name; + in_len = d_len; + + out_bound_len = PATH_MAX; + out = kmalloc(out_bound_len, GFP_KERNEL); + name = out; + + for (i = 0; i < d_len; ++i) + { + /* We renamed the linux kernel wchar_t type to linux_wchar_t in + the-linux-kernel.h, as it conflicts with the C++ type of that name. */ + linux_wchar_t uni; + int nb; + + nb = sf_g->nls->char2uni(in, in_len, &uni); + if (nb < 0) + { + LogFunc(("nls->char2uni failed %x %d\n", + *in, in_len)); + err = -EINVAL; + goto fail1; + } + in_len -= nb; + in += nb; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) + nb = utf32_to_utf8(uni, out, out_bound_len); +#else + nb = utf8_wctomb(out, uni, out_bound_len); +#endif + if (nb < 0) + { + LogFunc(("nls->uni2char failed %x %d\n", + uni, out_bound_len)); + err = -EINVAL; + goto fail1; + } + out_bound_len -= nb; + out += nb; + len += nb; + } + if (len >= PATH_MAX - 1) + { + err = -ENAMETOOLONG; + goto fail1; + } + + LogFunc(("result(%d) = %.*s\n", len, len, name)); + *out = 0; + } + else + { + name = d_name; + len = d_len; + } + + err = sf_make_path(caller, sf_i, name, len, result); + if (name != d_name) + kfree(name); + + return err; + +fail1: + kfree(name); + return err; +} + +int sf_nlscpy(struct sf_glob_info *sf_g, + char *name, size_t name_bound_len, + const unsigned char *utf8_name, size_t utf8_len) +{ + if (sf_g->nls) + { + const char *in; + char *out; + size_t out_len; + size_t out_bound_len; + size_t in_bound_len; + + in = utf8_name; + in_bound_len = utf8_len; + + out = name; + out_len = 0; + out_bound_len = name_bound_len; + + while (in_bound_len) + { + int nb; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) + unicode_t uni; + + nb = utf8_to_utf32(in, in_bound_len, &uni); +#else + linux_wchar_t uni; + + nb = utf8_mbtowc(&uni, in, in_bound_len); +#endif + if (nb < 0) + { + LogFunc(("utf8_mbtowc failed(%s) %x:%d\n", + (const char *) utf8_name, *in, in_bound_len)); + return -EINVAL; + } + in += nb; + in_bound_len -= nb; + + nb = sf_g->nls->uni2char(uni, out, out_bound_len); + if (nb < 0) + { + LogFunc(("nls->uni2char failed(%s) %x:%d\n", + utf8_name, uni, out_bound_len)); + return nb; + } + out += nb; + out_bound_len -= nb; + out_len += nb; + } + + *out = 0; + } + else + { + if (utf8_len + 1 > name_bound_len) + return -ENAMETOOLONG; + + memcpy(name, utf8_name, utf8_len + 1); + } + return 0; +} + +static struct sf_dir_buf *sf_dir_buf_alloc(void) +{ + struct sf_dir_buf *b; + + TRACE(); + b = kmalloc(sizeof(*b), GFP_KERNEL); + if (!b) + { + LogRelFunc(("could not alloc directory buffer\n")); + return NULL; + } + +#ifdef USE_VMALLOC + b->buf = vmalloc(DIR_BUFFER_SIZE); +#else + b->buf = kmalloc(DIR_BUFFER_SIZE, GFP_KERNEL); +#endif + if (!b->buf) + { + kfree(b); + LogRelFunc(("could not alloc directory buffer storage\n")); + return NULL; + } + + INIT_LIST_HEAD(&b->head); + b->cEntries = 0; + b->cbUsed = 0; + b->cbFree = DIR_BUFFER_SIZE; + return b; +} + +static void sf_dir_buf_free(struct sf_dir_buf *b) +{ + BUG_ON(!b || !b->buf); + + TRACE(); + list_del(&b->head); +#ifdef USE_VMALLOC + vfree(b->buf); +#else + kfree(b->buf); +#endif + kfree(b); +} + +/** + * Free the directory buffer. + */ +void sf_dir_info_free(struct sf_dir_info *p) +{ + struct list_head *list, *pos, *tmp; + + TRACE(); + list = &p->info_list; + list_for_each_safe(pos, tmp, list) + { + struct sf_dir_buf *b; + + b = list_entry(pos, struct sf_dir_buf, head); + sf_dir_buf_free(b); + } + kfree(p); +} + +/** + * Empty (but not free) the directory buffer. + */ +void sf_dir_info_empty(struct sf_dir_info *p) +{ + struct list_head *list, *pos, *tmp; + TRACE(); + list = &p->info_list; + list_for_each_safe(pos, tmp, list) + { + struct sf_dir_buf *b; + b = list_entry(pos, struct sf_dir_buf, head); + b->cEntries = 0; + b->cbUsed = 0; + b->cbFree = DIR_BUFFER_SIZE; + } +} + +/** + * Create a new directory buffer descriptor. + */ +struct sf_dir_info *sf_dir_info_alloc(void) +{ + struct sf_dir_info *p; + + TRACE(); + p = kmalloc(sizeof(*p), GFP_KERNEL); + if (!p) + { + LogRelFunc(("could not alloc directory info\n")); + return NULL; + } + + INIT_LIST_HEAD(&p->info_list); + return p; +} + +/** + * Search for an empty directory content buffer. + */ +static struct sf_dir_buf *sf_get_empty_dir_buf(struct sf_dir_info *sf_d) +{ + struct list_head *list, *pos; + + list = &sf_d->info_list; + list_for_each(pos, list) + { + struct sf_dir_buf *b; + + b = list_entry(pos, struct sf_dir_buf, head); + if (!b) + return NULL; + else + { + if (b->cbUsed == 0) + return b; + } + } + + return NULL; +} + +int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i, + struct sf_dir_info *sf_d, SHFLHANDLE handle) +{ + int err; + SHFLSTRING *mask; + struct sf_dir_buf *b; + + TRACE(); + err = sf_make_path(__func__, sf_i, "*", 1, &mask); + if (err) + goto fail0; + + for (;;) + { + int rc; + void *buf; + uint32_t cbSize; + uint32_t cEntries; + + b = sf_get_empty_dir_buf(sf_d); + if (!b) + { + b = sf_dir_buf_alloc(); + if (!b) + { + err = -ENOMEM; + LogRelFunc(("could not alloc directory buffer\n")); + goto fail1; + } + list_add(&b->head, &sf_d->info_list); + } + + buf = b->buf; + cbSize = b->cbFree; + + rc = VbglR0SfDirInfo(&client_handle, &sf_g->map, handle, mask, + 0, 0, &cbSize, buf, &cEntries); + switch (rc) + { + case VINF_SUCCESS: + RT_FALL_THRU(); + case VERR_NO_MORE_FILES: + break; + case VERR_NO_TRANSLATION: + LogFunc(("host could not translate entry\n")); + /* XXX */ + break; + default: + err = -RTErrConvertToErrno(rc); + LogFunc(("VbglR0SfDirInfo failed rc=%Rrc\n", rc)); + goto fail1; + } + + b->cEntries += cEntries; + b->cbFree -= cbSize; + b->cbUsed += cbSize; + + if (RT_FAILURE(rc)) + break; + } + err = 0; + +fail1: + kfree(mask); + +fail0: + return err; +} + +int sf_get_volume_info(struct super_block *sb, STRUCT_STATFS *stat) +{ + struct sf_glob_info *sf_g; + SHFLVOLINFO SHFLVolumeInfo; + uint32_t cbBuffer; + int rc; + + sf_g = GET_GLOB_INFO(sb); + cbBuffer = sizeof(SHFLVolumeInfo); + rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME, + &cbBuffer, (PSHFLDIRINFO)&SHFLVolumeInfo); + if (RT_FAILURE(rc)) + return -RTErrConvertToErrno(rc); + + stat->f_type = NFS_SUPER_MAGIC; /* XXX vboxsf type? */ + stat->f_bsize = SHFLVolumeInfo.ulBytesPerAllocationUnit; + stat->f_blocks = SHFLVolumeInfo.ullTotalAllocationBytes + / SHFLVolumeInfo.ulBytesPerAllocationUnit; + stat->f_bfree = SHFLVolumeInfo.ullAvailableAllocationBytes + / SHFLVolumeInfo.ulBytesPerAllocationUnit; + stat->f_bavail = SHFLVolumeInfo.ullAvailableAllocationBytes + / SHFLVolumeInfo.ulBytesPerAllocationUnit; + stat->f_files = 1000; + stat->f_ffree = 1000; /* don't return 0 here since the guest may think + * that it is not possible to create any more files */ + stat->f_fsid.val[0] = 0; + stat->f_fsid.val[1] = 0; + stat->f_namelen = 255; + return 0; +} + +struct dentry_operations sf_dentry_ops = +{ + .d_revalidate = sf_dentry_revalidate +}; + +int sf_init_backing_dev(struct sf_glob_info *sf_g) +{ + int rc = 0; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && LINUX_VERSION_CODE <= KERNEL_VERSION(3, 19, 0) + /* Each new shared folder map gets a new uint64_t identifier, + * allocated in sequence. We ASSUME the sequence will not wrap. */ + static uint64_t s_u64Sequence = 0; + uint64_t u64CurrentSequence = ASMAtomicIncU64(&s_u64Sequence); + + sf_g->bdi.ra_pages = 0; /* No readahead */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 12) + sf_g->bdi.capabilities = BDI_CAP_MAP_DIRECT /* MAP_SHARED */ + | BDI_CAP_MAP_COPY /* MAP_PRIVATE */ + | BDI_CAP_READ_MAP /* can be mapped for reading */ + | BDI_CAP_WRITE_MAP /* can be mapped for writing */ + | BDI_CAP_EXEC_MAP; /* can be mapped for execution */ +# endif /* >= 2.6.12 */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) + rc = bdi_init(&sf_g->bdi); +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26) + if (!rc) + rc = bdi_register(&sf_g->bdi, NULL, "vboxsf-%llu", + (unsigned long long)u64CurrentSequence); +# endif /* >= 2.6.26 */ +# endif /* >= 2.6.24 */ +#endif /* >= 2.6.0 && <= 3.19.0 */ + return rc; +} + +void sf_done_backing_dev(struct sf_glob_info *sf_g) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 24) && LINUX_VERSION_CODE <= KERNEL_VERSION(3, 19, 0) + bdi_destroy(&sf_g->bdi); /* includes bdi_unregister() */ +#endif +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/vbsfmount.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/vbsfmount.h @@ -0,0 +1,74 @@ +/** @file + * vboxsf -- VirtualBox Guest Additions for Linux: mount(2) parameter structure. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#ifndef VBFS_MOUNT_H +#define VBFS_MOUNT_H + +/* Linux constraints the size of data mount argument to PAGE_SIZE - 1. */ +#define MAX_HOST_NAME 256 +#define MAX_NLS_NAME 32 + +#define VBSF_MOUNT_SIGNATURE_BYTE_0 '\377' +#define VBSF_MOUNT_SIGNATURE_BYTE_1 '\376' +#define VBSF_MOUNT_SIGNATURE_BYTE_2 '\375' + +struct vbsf_mount_info_new +{ + /* + * The old version of the mount_info struct started with a + * char name[MAX_HOST_NAME] field, where name cannot be '\0'. + * So the new version of the mount_info struct starts with a + * nullchar field which is always 0 so that we can detect and + * reject the old structure being passed. + */ + char nullchar; + char signature[3]; /* signature */ + int length; /* length of the whole structure */ + char name[MAX_HOST_NAME]; /* share name */ + char nls_name[MAX_NLS_NAME];/* name of an I/O charset */ + int uid; /* user ID for all entries, default 0=root */ + int gid; /* group ID for all entries, default 0=root */ + int ttl; /* time to live */ + int dmode; /* mode for directories if != 0xffffffff */ + int fmode; /* mode for regular files if != 0xffffffff */ + int dmask; /* umask applied to directories */ + int fmask; /* umask applied to regular files */ +}; + +struct vbsf_mount_opts +{ + int uid; + int gid; + int ttl; + int dmode; + int fmode; + int dmask; + int fmask; + int ronly; + int sloppy; + int noexec; + int nodev; + int nosuid; + int remount; + char nls_name[MAX_NLS_NAME]; + char *convertcp; +}; + +/** Completes the mount operation by adding the new mount point to mtab if required. */ +int vbsfmount_complete(const char *host_name, const char *mount_point, + unsigned long flags, struct vbsf_mount_opts *opts); + +#endif /* vbsfmount.h */ --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/version-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/version-generated.h @@ -0,0 +1,13 @@ +#ifndef ___version_generated_h___ +#define ___version_generated_h___ + +#define VBOX_VERSION_MAJOR 5 +#define VBOX_VERSION_MINOR 2 +#define VBOX_VERSION_BUILD 6 +#define VBOX_VERSION_STRING_RAW "5.2.6" +#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu" +#define VBOX_API_VERSION_STRING "5_2" + +#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/vfsmod.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/vfsmod.c @@ -0,0 +1,654 @@ +/** @file + * + * vboxsf -- VirtualBox Guest Additions for Linux: + * Virtual File System for VirtualBox Shared Folders + * + * Module initialization/finalization + * File system registration/deregistration + * Superblock reading + * Few utility functions + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +/** + * @note Anyone wishing to make changes here might wish to take a look at + * http://www.atnf.csiro.au/people/rgooch/linux/vfs.txt + * which seems to be the closest there is to official documentation on + * writing filesystem drivers for Linux. + */ + +#include "vfsmod.h" +#include "version-generated.h" +#include "revision-generated.h" +#include "product-generated.h" +#include "VBoxGuestR0LibInternal.h" + +MODULE_DESCRIPTION(VBOX_PRODUCT " VFS Module for Host File System Access"); +MODULE_AUTHOR(VBOX_VENDOR); +MODULE_LICENSE("GPL"); +#ifdef MODULE_ALIAS_FS +MODULE_ALIAS_FS("vboxsf"); +#endif +#ifdef MODULE_VERSION +MODULE_VERSION(VBOX_VERSION_STRING " r" RT_XSTR(VBOX_SVN_REV)); +#endif + +/* globals */ +VBGLSFCLIENT client_handle; + +/* forward declarations */ +static struct super_operations sf_super_ops; + +/* allocate global info, try to map host share */ +static int sf_glob_alloc(struct vbsf_mount_info_new *info, struct sf_glob_info **sf_gp) +{ + int err, rc; + SHFLSTRING *str_name; + size_t name_len, str_len; + struct sf_glob_info *sf_g; + + TRACE(); + sf_g = kmalloc(sizeof(*sf_g), GFP_KERNEL); + if (!sf_g) + { + err = -ENOMEM; + LogRelFunc(("could not allocate memory for global info\n")); + goto fail0; + } + + RT_ZERO(*sf_g); + + if ( info->nullchar != '\0' + || info->signature[0] != VBSF_MOUNT_SIGNATURE_BYTE_0 + || info->signature[1] != VBSF_MOUNT_SIGNATURE_BYTE_1 + || info->signature[2] != VBSF_MOUNT_SIGNATURE_BYTE_2) + { + err = -EINVAL; + goto fail1; + } + + info->name[sizeof(info->name) - 1] = 0; + info->nls_name[sizeof(info->nls_name) - 1] = 0; + + name_len = strlen(info->name); + str_len = offsetof(SHFLSTRING, String.utf8) + name_len + 1; + str_name = kmalloc(str_len, GFP_KERNEL); + if (!str_name) + { + err = -ENOMEM; + LogRelFunc(("could not allocate memory for host name\n")); + goto fail1; + } + + str_name->u16Length = name_len; + str_name->u16Size = name_len + 1; + memcpy(str_name->String.utf8, info->name, name_len + 1); + +#define _IS_UTF8(_str) \ + (strcmp(_str, "utf8") == 0) +#define _IS_EMPTY(_str) \ + (strcmp(_str, "") == 0) + + /* Check if NLS charset is valid and not points to UTF8 table */ + if (info->nls_name[0]) + { + if (_IS_UTF8(info->nls_name)) + sf_g->nls = NULL; + else + { + sf_g->nls = load_nls(info->nls_name); + if (!sf_g->nls) + { + err = -EINVAL; + LogFunc(("failed to load nls %s\n", info->nls_name)); + kfree(str_name); + goto fail1; + } + } + } + else + { +#ifdef CONFIG_NLS_DEFAULT + /* If no NLS charset specified, try to load the default + * one if it's not points to UTF8. */ + if (!_IS_UTF8(CONFIG_NLS_DEFAULT) && !_IS_EMPTY(CONFIG_NLS_DEFAULT)) + sf_g->nls = load_nls_default(); + else + sf_g->nls = NULL; +#else + sf_g->nls = NULL; +#endif + +#undef _IS_UTF8 +#undef _IS_EMPTY + } + + rc = VbglR0SfMapFolder(&client_handle, str_name, &sf_g->map); + kfree(str_name); + + if (RT_FAILURE(rc)) + { + err = -EPROTO; + LogFunc(("VbglR0SfMapFolder failed rc=%d\n", rc)); + goto fail2; + } + + sf_g->ttl = info->ttl; + sf_g->uid = info->uid; + sf_g->gid = info->gid; + + if ((unsigned)info->length >= sizeof(struct vbsf_mount_info_new)) + { + /* new fields */ + sf_g->dmode = info->dmode; + sf_g->fmode = info->fmode; + sf_g->dmask = info->dmask; + sf_g->fmask = info->fmask; + } + else + { + sf_g->dmode = ~0; + sf_g->fmode = ~0; + } + + *sf_gp = sf_g; + return 0; + +fail2: + if (sf_g->nls) + unload_nls(sf_g->nls); + +fail1: + kfree(sf_g); + +fail0: + return err; +} + +/* unmap the share and free global info [sf_g] */ +static void +sf_glob_free(struct sf_glob_info *sf_g) +{ + int rc; + + TRACE(); + rc = VbglR0SfUnmapFolder(&client_handle, &sf_g->map); + if (RT_FAILURE(rc)) + LogFunc(("VbglR0SfUnmapFolder failed rc=%d\n", rc)); + + if (sf_g->nls) + unload_nls(sf_g->nls); + + kfree(sf_g); +} + +/** + * This is called (by sf_read_super_[24|26] when vfs mounts the fs and + * wants to read super_block. + * + * calls [sf_glob_alloc] to map the folder and allocate global + * information structure. + * + * initializes [sb], initializes root inode and dentry. + * + * should respect [flags] + */ +static int sf_read_super_aux(struct super_block *sb, void *data, int flags) +{ + int err; + struct dentry *droot; + struct inode *iroot; + struct sf_inode_info *sf_i; + struct sf_glob_info *sf_g; + SHFLFSOBJINFO fsinfo; + struct vbsf_mount_info_new *info; + bool fInodePut = true; + + TRACE(); + if (!data) + { + LogFunc(("no mount info specified\n")); + return -EINVAL; + } + + info = data; + + if (flags & MS_REMOUNT) + { + LogFunc(("remounting is not supported\n")); + return -ENOSYS; + } + + err = sf_glob_alloc(info, &sf_g); + if (err) + goto fail0; + + sf_i = kmalloc(sizeof (*sf_i), GFP_KERNEL); + if (!sf_i) + { + err = -ENOMEM; + LogRelFunc(("could not allocate memory for root inode info\n")); + goto fail1; + } + + sf_i->handle = SHFL_HANDLE_NIL; + sf_i->path = kmalloc(sizeof(SHFLSTRING) + 1, GFP_KERNEL); + if (!sf_i->path) + { + err = -ENOMEM; + LogRelFunc(("could not allocate memory for root inode path\n")); + goto fail2; + } + + sf_i->path->u16Length = 1; + sf_i->path->u16Size = 2; + sf_i->path->String.utf8[0] = '/'; + sf_i->path->String.utf8[1] = 0; + sf_i->force_reread = 0; + + err = sf_stat(__func__, sf_g, sf_i->path, &fsinfo, 0); + if (err) + { + LogFunc(("could not stat root of share\n")); + goto fail3; + } + + sb->s_magic = 0xface; + sb->s_blocksize = 1024; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 3) + /* Required for seek/sendfile. + * + * Must by less than or equal to INT64_MAX despite the fact that the + * declaration of this variable is unsigned long long. See determination + * of 'loff_t max' in fs/read_write.c / do_sendfile(). I don't know the + * correct limit but MAX_LFS_FILESIZE (8TB-1 on 32-bit boxes) takes the + * page cache into account and is the suggested limit. */ +# if defined MAX_LFS_FILESIZE + sb->s_maxbytes = MAX_LFS_FILESIZE; +# else + sb->s_maxbytes = 0x7fffffffffffffffULL; +# endif +#endif + sb->s_op = &sf_super_ops; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + iroot = iget_locked(sb, 0); +#else + iroot = iget(sb, 0); +#endif + if (!iroot) + { + err = -ENOMEM; /* XXX */ + LogFunc(("could not get root inode\n")); + goto fail3; + } + + if (sf_init_backing_dev(sf_g)) + { + err = -EINVAL; + LogFunc(("could not init bdi\n")); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + unlock_new_inode(iroot); +#endif + goto fail4; + } + + sf_init_inode(sf_g, iroot, &fsinfo); + SET_INODE_INFO(iroot, sf_i); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 25) + unlock_new_inode(iroot); +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + droot = d_make_root(iroot); +#else + droot = d_alloc_root(iroot); +#endif + if (!droot) + { + err = -ENOMEM; /* XXX */ + LogFunc(("d_alloc_root failed\n")); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0) + fInodePut = false; +#endif + goto fail5; + } + + sb->s_root = droot; + SET_GLOB_INFO(sb, sf_g); + return 0; + +fail5: + sf_done_backing_dev(sf_g); + +fail4: + if (fInodePut) + iput(iroot); + +fail3: + kfree(sf_i->path); + +fail2: + kfree(sf_i); + +fail1: + sf_glob_free(sf_g); + +fail0: + return err; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +static struct super_block * +sf_read_super_24(struct super_block *sb, void *data, int flags) +{ + int err; + + TRACE(); + err = sf_read_super_aux(sb, data, flags); + if (err) + return NULL; + + return sb; +} +#endif + +/* this is called when vfs is about to destroy the [inode]. all + resources associated with this [inode] must be cleared here */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36) +static void sf_clear_inode(struct inode *inode) +{ + struct sf_inode_info *sf_i; + + TRACE(); + sf_i = GET_INODE_INFO(inode); + if (!sf_i) + return; + + BUG_ON(!sf_i->path); + kfree(sf_i->path); + kfree(sf_i); + SET_INODE_INFO(inode, NULL); +} +#else +static void sf_evict_inode(struct inode *inode) +{ + struct sf_inode_info *sf_i; + + TRACE(); + truncate_inode_pages(&inode->i_data, 0); +# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) + clear_inode(inode); +# else + end_writeback(inode); +# endif + + sf_i = GET_INODE_INFO(inode); + if (!sf_i) + return; + + BUG_ON(!sf_i->path); + kfree(sf_i->path); + kfree(sf_i); + SET_INODE_INFO(inode, NULL); +} +#endif + +/* this is called by vfs when it wants to populate [inode] with data. + the only thing that is known about inode at this point is its index + hence we can't do anything here, and let lookup/whatever with the + job to properly fill then [inode] */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) +static void sf_read_inode(struct inode *inode) +{ +} +#endif + +/* vfs is done with [sb] (umount called) call [sf_glob_free] to unmap + the folder and free [sf_g] */ +static void sf_put_super(struct super_block *sb) +{ + struct sf_glob_info *sf_g; + + sf_g = GET_GLOB_INFO(sb); + BUG_ON(!sf_g); + sf_done_backing_dev(sf_g); + sf_glob_free(sf_g); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +static int sf_statfs(struct super_block *sb, STRUCT_STATFS *stat) +{ + return sf_get_volume_info(sb, stat); +} +#else +static int sf_statfs(struct dentry *dentry, STRUCT_STATFS *stat) +{ + struct super_block *sb = dentry->d_inode->i_sb; + return sf_get_volume_info(sb, stat); +} +#endif + +static int sf_remount_fs(struct super_block *sb, int *flags, char *data) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 23) + struct sf_glob_info *sf_g; + struct sf_inode_info *sf_i; + struct inode *iroot; + SHFLFSOBJINFO fsinfo; + int err; + + sf_g = GET_GLOB_INFO(sb); + BUG_ON(!sf_g); + if (data && data[0] != 0) + { + struct vbsf_mount_info_new *info = + (struct vbsf_mount_info_new *)data; + if ( info->signature[0] == VBSF_MOUNT_SIGNATURE_BYTE_0 + && info->signature[1] == VBSF_MOUNT_SIGNATURE_BYTE_1 + && info->signature[2] == VBSF_MOUNT_SIGNATURE_BYTE_2) + { + sf_g->uid = info->uid; + sf_g->gid = info->gid; + sf_g->ttl = info->ttl; + sf_g->dmode = info->dmode; + sf_g->fmode = info->fmode; + sf_g->dmask = info->dmask; + sf_g->fmask = info->fmask; + } + } + + iroot = ilookup(sb, 0); + if (!iroot) + return -ENOSYS; + + sf_i = GET_INODE_INFO(iroot); + err = sf_stat(__func__, sf_g, sf_i->path, &fsinfo, 0); + BUG_ON(err != 0); + sf_init_inode(sf_g, iroot, &fsinfo); + /*unlock_new_inode(iroot);*/ + return 0; +#else + return -ENOSYS; +#endif +} + +static struct super_operations sf_super_ops = +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36) + .clear_inode = sf_clear_inode, +#else + .evict_inode = sf_evict_inode, +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25) + .read_inode = sf_read_inode, +#endif + .put_super = sf_put_super, + .statfs = sf_statfs, + .remount_fs = sf_remount_fs +}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +static DECLARE_FSTYPE(vboxsf_fs_type, "vboxsf", sf_read_super_24, 0); +#else +static int +sf_read_super_26(struct super_block *sb, void *data, int flags) +{ + int err; + + TRACE(); + err = sf_read_super_aux(sb, data, flags); + if (err) + printk(KERN_DEBUG "sf_read_super_aux err=%d\n", err); + + return err; +} + +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) +static struct super_block *sf_get_sb(struct file_system_type *fs_type, int flags, + const char *dev_name, void *data) +{ + TRACE(); + return get_sb_nodev(fs_type, flags, data, sf_read_super_26); +} +# elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39) +static int sf_get_sb(struct file_system_type *fs_type, int flags, + const char *dev_name, void *data, struct vfsmount *mnt) +{ + TRACE(); + return get_sb_nodev(fs_type, flags, data, sf_read_super_26, mnt); +} +# else +static struct dentry *sf_mount(struct file_system_type *fs_type, int flags, + const char *dev_name, void *data) +{ + TRACE(); + return mount_nodev(fs_type, flags, data, sf_read_super_26); +} +# endif + +static struct file_system_type vboxsf_fs_type = +{ + .owner = THIS_MODULE, + .name = "vboxsf", +# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39) + .get_sb = sf_get_sb, +# else + .mount = sf_mount, +# endif + .kill_sb = kill_anon_super +}; +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +static int follow_symlinks = 0; +module_param(follow_symlinks, int, 0); +MODULE_PARM_DESC(follow_symlinks, "Let host resolve symlinks rather than showing them"); +#endif + +/* Module initialization/finalization handlers */ +static int __init init(void) +{ + int rcVBox; + int rcRet = 0; + int err; + + TRACE(); + + if (sizeof(struct vbsf_mount_info_new) > PAGE_SIZE) + { + printk(KERN_ERR + "Mount information structure is too large %lu\n" + "Must be less than or equal to %lu\n", + (unsigned long)sizeof (struct vbsf_mount_info_new), + (unsigned long)PAGE_SIZE); + return -EINVAL; + } + + err = register_filesystem(&vboxsf_fs_type); + if (err) + { + LogFunc(("register_filesystem err=%d\n", err)); + return err; + } + + rcVBox = VbglR0HGCMInit(); + if (RT_FAILURE(rcVBox)) + { + LogRelFunc(("VbglR0HGCMInit failed, rc=%d\n", rcVBox)); + rcRet = -EPROTO; + goto fail0; + } + + rcVBox = VbglR0SfConnect(&client_handle); + if (RT_FAILURE(rcVBox)) + { + LogRelFunc(("VbglR0SfConnect failed, rc=%d\n", rcVBox)); + rcRet = -EPROTO; + goto fail1; + } + + rcVBox = VbglR0SfSetUtf8(&client_handle); + if (RT_FAILURE(rcVBox)) + { + LogRelFunc(("VbglR0SfSetUtf8 failed, rc=%d\n", rcVBox)); + rcRet = -EPROTO; + goto fail2; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + if (!follow_symlinks) + { + rcVBox = VbglR0SfSetSymlinks(&client_handle); + if (RT_FAILURE(rcVBox)) + { + printk(KERN_WARNING + "vboxsf: Host unable to show symlinks, rc=%d\n", + rcVBox); + } + } +#endif + + printk(KERN_DEBUG + "vboxsf: Successfully loaded version " VBOX_VERSION_STRING + " (interface " RT_XSTR(VMMDEV_VERSION) ")\n"); + + return 0; + +fail2: + VbglR0SfDisconnect(&client_handle); + +fail1: + VbglR0HGCMTerminate(); + +fail0: + unregister_filesystem(&vboxsf_fs_type); + return rcRet; +} + +static void __exit fini(void) +{ + TRACE(); + + VbglR0SfDisconnect(&client_handle); + VbglR0HGCMTerminate(); + unregister_filesystem(&vboxsf_fs_type); +} + +module_init(init); +module_exit(fini); + +/* C++ hack */ +int __gxx_personality_v0 = 0xdeadbeef; --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxsf/vfsmod.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxsf/vfsmod.h @@ -0,0 +1,168 @@ +/** @file + * vboxsf - VirtualBox Guest Additions for Linux. + */ + +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + */ + +#ifndef VFSMOD_H +#define VFSMOD_H + +#define LOG_GROUP LOG_GROUP_SHARED_FOLDERS +#include "the-linux-kernel.h" +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# include +#endif + +#include +#include "vbsfmount.h" + +#define DIR_BUFFER_SIZE (16*_1K) + +/* per-shared folder information */ +struct sf_glob_info +{ + VBGLSFMAP map; + struct nls_table *nls; + int ttl; + int uid; + int gid; + int dmode; + int fmode; + int dmask; + int fmask; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) + struct backing_dev_info bdi; +#endif +}; + +/* per-inode information */ +struct sf_inode_info +{ + /* which file */ + SHFLSTRING *path; + /* some information was changed, update data on next revalidate */ + int force_restat; + /* directory content changed, update the whole directory on next sf_getdent */ + int force_reread; + /* file structure, only valid between open() and release() */ + struct file *file; + /* handle valid if a file was created with sf_create_aux until it will + * be opened with sf_reg_open() */ + SHFLHANDLE handle; +}; + +struct sf_dir_info +{ + struct list_head info_list; +}; + +struct sf_dir_buf +{ + size_t cEntries; + size_t cbFree; + size_t cbUsed; + void *buf; + struct list_head head; +}; + +struct sf_reg_info +{ + SHFLHANDLE handle; +}; + +/* globals */ +extern VBGLSFCLIENT client_handle; + +/* forward declarations */ +extern struct inode_operations sf_dir_iops; +extern struct inode_operations sf_lnk_iops; +extern struct inode_operations sf_reg_iops; +extern struct file_operations sf_dir_fops; +extern struct file_operations sf_reg_fops; +extern struct dentry_operations sf_dentry_ops; +extern struct address_space_operations sf_reg_aops; + +extern void sf_init_inode(struct sf_glob_info *sf_g, struct inode *inode, + PSHFLFSOBJINFO info); +extern int sf_stat(const char *caller, struct sf_glob_info *sf_g, + SHFLSTRING *path, PSHFLFSOBJINFO result, int ok_to_fail); +extern int sf_inode_revalidate(struct dentry *dentry); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +extern int sf_getattr(const struct path *path, struct kstat *kstat, + u32 request_mask, unsigned int query_flags); +# else +extern int sf_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *kstat); +#endif +extern int sf_setattr(struct dentry *dentry, struct iattr *iattr); +#endif +extern int sf_path_from_dentry(const char *caller, struct sf_glob_info *sf_g, + struct sf_inode_info *sf_i, struct dentry *dentry, + SHFLSTRING **result); +extern int sf_nlscpy(struct sf_glob_info *sf_g, + char *name, size_t name_bound_len, + const unsigned char *utf8_name, size_t utf8_len); +extern void sf_dir_info_free(struct sf_dir_info *p); +extern void sf_dir_info_empty(struct sf_dir_info *p); +extern struct sf_dir_info *sf_dir_info_alloc(void); +extern int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i, + struct sf_dir_info *sf_d, SHFLHANDLE handle); +extern int sf_init_backing_dev(struct sf_glob_info *sf_g); +extern void sf_done_backing_dev(struct sf_glob_info *sf_g); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# define STRUCT_STATFS struct statfs +#else +# define STRUCT_STATFS struct kstatfs +#endif +int sf_get_volume_info(struct super_block *sb,STRUCT_STATFS *stat); + +#ifdef __cplusplus +# define CMC_API __attribute__ ((cdecl, regparm (0))) +#else +# define CMC_API __attribute__ ((regparm (0))) +#endif + +#define TRACE() LogFunc(("tracepoint\n")) + +/* Following casts are here to prevent assignment of void * to + pointers of arbitrary type */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) +# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->u.generic_sbp) +# define SET_GLOB_INFO(sb, sf_g) (sb)->u.generic_sbp = sf_g +#else +# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->s_fs_info) +# define SET_GLOB_INFO(sb, sf_g) (sb)->s_fs_info = sf_g +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) || defined(KERNEL_FC6) +/* FC6 kernel 2.6.18, vanilla kernel 2.6.19+ */ +# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->i_private) +# define SET_INODE_INFO(i, sf_i) (i)->i_private = sf_i +#else +/* vanilla kernel up to 2.6.18 */ +# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->u.generic_ip) +# define SET_INODE_INFO(i, sf_i) (i)->u.generic_ip = sf_i +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) +# define GET_F_DENTRY(f) (f->f_path.dentry) +#else +# define GET_F_DENTRY(f) (f->f_dentry) +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/Makefile +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/Makefile @@ -0,0 +1,52 @@ +KBUILD_EXTMOD=${srctree}/ubuntu/vbox +# $Id: Makefile.module.kms $ +## @file +# VirtualBox Guest Additions Module Makefile. +# +# (For 2.6.x this file must be 'Makefile'!) +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# Linux kbuild sets this to our source directory if we are called from there +obj ?= $(CURDIR) +include $(obj)/Makefile.include.header + +BUILD = + +# We want to build on Linux 3.11 and later and on all EL 7 kernels. +ifneq ($(filter-out 1.% 2.% 3.0.% 3.1.% 3.2.% 3.3.% 3.4.% 3.5.% 3.6.% 3.7.% \ + 3.8.% 3.9.% 3.10.%,$(KERN_VER)),) + BUILD = 1 +endif +ifeq ($(filter-out %.el7.x86_64,$(KERN_VER)),) + BUILD = 1 +endif + +ifneq ($(BUILD),) + +MOD_NAME = vboxvideo +MOD_OBJS = hgsmi_base.o \ + modesetting.o vbox_drv.o vbox_fb.o vbox_irq.o vbox_main.o \ + vbox_mode.o vbox_ttm.o vbva_base.o vbox_prime.o vbox_hgsmi.o +MOD_INCL = -I$(KBUILD_EXTMOD) -Iinclude/drm + +include $(obj)/Makefile.include.footer + +else # ! wildcard $(KERN_INCL)/drm/drm_rect.h + + all: + install: + clean: + +endif # ! wildcard $(KERN_INCL)/drm/drm_rect.h --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/Makefile.include.footer +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/Makefile.include.footer @@ -0,0 +1,112 @@ +# $Id: Makefile.include.footer $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# See Makefile.include.header for details of how to use this. +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# override is required by the Debian guys +override MODULE = $(MOD_NAME) +OBJS = $(MOD_OBJS) + +KBUILD_VERBOSE ?= 1 +LINUX_VERBOSE = $(if $(KBUILD_VERBOSE),1,) + +# +# Compiler options +# +ifndef INCL + INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL)) + ifndef KBUILD_EXTMOD + KBUILD_EXTMOD := $(shell pwd) + endif + INCL += $(MOD_INCL) + export INCL +endif +KFLAGS := -D__KERNEL__ -DMODULE $(MOD_DEFS) +ifeq ($(BUILD_TYPE),debug) + KFLAGS += -DDEBUG -DDEBUG_$(subst $(subst _, ,_),_,$(USERNAME)) -DDEBUG_USERNAME=$(subst $(subst _, ,_),_,$(USERNAME)) +endif + +ifeq ($(KERN_VERSION), 24) +# +# 2.4 +# + +# Note: while 2.4 kernels could also do "proper" builds from kbuild, the make +# script needed to support it was somewhat different from 2.6. Since this +# script works and 2.4 is not a moving target we will not try do do things the +# "proper" way. + +ifeq ($(BUILD_TARGET_ARCH),amd64) + KFLAGS += -mcmodel=kernel +endif + +CFLAGS := -O2 -DVBOX_LINUX_2_4 $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) +MODULE_EXT := o + +# 2.4 Module linking +$(MODULE).o: $(OBJS) + $(LD) -o $@ -r $(OBJS) + +.PHONY: $(MODULE) +all: $(MODULE) +$(MODULE): $(MODULE).o + +install: $(MODULE) + @mkdir -p $(MODULE_DIR); \ + install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \ + PATH="$(PATH):/bin:/sbin" depmod -a; + +clean: + for f in $(sort $(dir $(OBJS))); do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done + rm -rf .$(MOD_NAME)* .tmp_ver* $(MOD_NAME).* Modules.symvers modules.order + +else # ! $(KERN_VERSION), 24 +# +# 2.6 and later +# + +MODULE_EXT := ko + +$(MODULE)-y := $(OBJS) + +# build defs +EXTRA_CFLAGS += $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG) + +.PHONY: $(MODULE) +all: $(MODULE) + +obj-m += $(MODULE).o + +JOBS := $(shell (getconf _NPROCESSORS_ONLN || grep -Ec '^processor|^CPU[0-9]' /proc/cpuinfo) 2>/dev/null) +ifeq ($(JOBS),0) + JOBS := 1 +endif + +# OL/UEK: disable module signing for external modules -- we don't have any private key +$(MODULE): + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) $(if $(JOBS),-j$(JOBS),) modules + +install: $(MODULE) + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) modules_install + +modules_install: install + +clean: + $(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) clean + +.PHONY: $(MODULE) install modules_install clean +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/Makefile.include.header +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/Makefile.include.header @@ -0,0 +1,158 @@ +# $Id: Makefile.include.header $ +## @file +# VirtualBox Guest Additions kernel module Makefile, common parts. +# +# (For 2.6.x, the main file must be called 'Makefile'!) +# + +# +# Copyright (C) 2006-2017 Oracle Corporation +# +# This file is part of VirtualBox Open Source Edition (OSE), as +# available from http://www.virtualbox.org. This file is free software; +# you can redistribute it and/or modify it under the terms of the GNU +# General Public License (GPL) as published by the Free Software +# Foundation, in version 2 as it comes in the "COPYING" file of the +# VirtualBox OSE distribution. VirtualBox OSE is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. +# + +# Testing: +# * Building with KERN_DIR set uses the value specified and +# the default value for the unspecified one if any. + +# +# These file should be included by the Makefiles for any kernel modules we +# build as part of the Guest Additions. The intended way of doing this is as +# follows: +# +# # Linux kbuild sets this to our source directory if we are called from +# # there +# obj ?= $(CURDIR) +# include $(obj)/Makefile.include.header +# MOD_NAME = +# MOD_OBJS = +# MOD_DEFS = +# MOD_INCL = +# MOD_CFLAGS = +# include $(obj)/Makefile.include.footer +# +# The kmk kBuild define KBUILD_TARGET_ARCH is available. +# + + +# +# First, figure out which architecture we're targeting and the build type. +# (We have to support basic cross building (ARCH=i386|x86_64).) +# While at it, warn about BUILD_* vars found to help with user problems. +# +ifeq ($(filter-out x86_64 amd64 AMD64,$(shell dpkg-architecture -qDEB_HOST_GNU_CPU)),) + BUILD_TARGET_ARCH_DEF := amd64 +else + BUILD_TARGET_ARCH_DEF := x86 +endif +ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),) + $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.) + BUILD_TARGET_ARCH := +endif +ifeq ($(BUILD_TARGET_ARCH),) + ifeq ($(ARCH),x86_64) + BUILD_TARGET_ARCH := amd64 + else + ifeq ($(ARCH),i386) + BUILD_TARGET_ARCH := x86 + else + BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF) + endif + endif +else + ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF)) + $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).) + endif +endif + +ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),) + $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.) + BUILD_TYPE := +endif +ifeq ($(BUILD_TYPE),) + BUILD_TYPE := release +else + ifneq ($(BUILD_TYPE),release) + $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).) + endif +endif +ifeq ($(USERNAME),) + USERNAME := noname +endif + +ifeq ($(KERNELRELEASE),) + + # + # building from this directory + # + + # kernel base directory + ifdef KERN_DIR + ifndef KERN_VER + ifeq ($(filter %/build,$(KERN_DIR)),) + $(error The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set) + endif + endif + endif + + ifndef KERN_VER + ifdef KERN_DIR + KERN_VER = $(notdir $(patsubst %/build,%,$(KERN_DIR))) + ifeq ($(shell expr $(KERN_VER) : '[0-9]*\.[0-9]*.[0-9]*'),0) + $(error The kernel build folder path must end in /build, or the variable KERN_VER must be set) + endif + endif + KERN_VER ?= $(shell uname -r) + endif + + # guess kernel major version (24 or later) + ifeq ($(shell if grep '"2\.4\.' /lib/modules/$(KERN_VER)/build/include/linux/version.h > /dev/null 2>&1; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + +else # neq($(KERNELRELEASE),) + + # + # building from kbuild (make -C M=`pwd`) + # + + # guess kernel version (24 or 26) + ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes) + KERN_VERSION := 24 + else + KERN_VERSION := 26 + endif + + KERN_VER := $(KERNELRELEASE) + +endif # neq($(KERNELRELEASE),) + +# Kernel build folder +KERN_DIR := $(srctree) +ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes) + $(error Error: unable to find the headers of the Linux kernel to build against. \ + Specify KERN_VER= (currently $(KERN_VER)) and run Make again) +endif +# Kernel include folder +KERN_INCL := $(KERN_DIR)/include +# module install folder +INSTALL_MOD_DIR ?= misc +MODULE_DIR := $(INSTALL_MOD_PATH)/lib/modules/$(KERN_VER)/$(INSTALL_MOD_DIR) + +# debug - show guesses. +ifdef DEBUG +$(warning dbg: INSTALL_MOD_PATH = $(INSTALL_MOD_PATH)) +$(warning dbg: INSTALL_MOD_DIR = $(INSTALL_MOD_DIR)) +$(warning dbg: KERN_DIR = $(KERN_DIR)) +$(warning dbg: KERN_INCL = $(KERN_INCL)) +$(warning dbg: KERN_VERSION = $(KERN_VERSION)) +$(warning dbg: MODULE_DIR = $(MODULE_DIR)) +endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/hgsmi_base.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/hgsmi_base.c @@ -0,0 +1,290 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "vbox_drv.h" +#include "vbox_err.h" +#include "vboxvideo_guest.h" +#include "vboxvideo_vbe.h" +#include "hgsmi_channels.h" +#include "hgsmi_ch_setup.h" + +/** Detect whether HGSMI is supported by the host. */ +bool VBoxHGSMIIsSupported(void) +{ + u16 DispiId; + + outw(VBE_DISPI_INDEX_ID, VBE_DISPI_IOPORT_INDEX); + outw(VBE_DISPI_ID_HGSMI, VBE_DISPI_IOPORT_DATA); + + DispiId = inw(VBE_DISPI_IOPORT_DATA); + + return (DispiId == VBE_DISPI_ID_HGSMI); +} + + +/** + * Inform the host of the location of the host flags in VRAM via an HGSMI command. + * @returns IPRT status value. + * @returns VERR_NOT_IMPLEMENTED if the host does not support the command. + * @returns VERR_NO_MEMORY if a heap allocation fails. + * @param ctx the context of the guest heap to use. + * @param location the offset chosen for the flags withing guest VRAM. + */ +int hgsmi_report_flags_location(struct gen_pool * ctx, u32 location) +{ + struct hgsmi_buffer_location *p; + + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_HGSMI, + HGSMI_CC_HOST_FLAGS_LOCATION); + if (!p) + return VERR_NO_MEMORY; + + /* Prepare data to be sent to the host. */ + p->location = location; + p->buf_len = sizeof(struct hgsmi_host_flags); + /* No need to check that the buffer is valid as we have just allocated it. */ + hgsmi_buffer_submit(ctx, p); + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + + return VINF_SUCCESS; +} + + +/** + * Notify the host of HGSMI-related guest capabilities via an HGSMI command. + * @returns IPRT status value. + * @returns VERR_NOT_IMPLEMENTED if the host does not support the command. + * @returns VERR_NO_MEMORY if a heap allocation fails. + * @param ctx the context of the guest heap to use. + * @param caps the capabilities to report, see struct vbva_caps. + */ +int hgsmi_send_caps_info(struct gen_pool * ctx, u32 caps) +{ + struct vbva_caps *p; + + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, VBVA_INFO_CAPS); + + if (!p) + return VERR_NO_MEMORY; + + /* Prepare data to be sent to the host. */ + p->rc = VERR_NOT_IMPLEMENTED; + p->caps = caps; + /* No need to check that the buffer is valid as we have just allocated it. */ + hgsmi_buffer_submit(ctx, p); + + WARN_ON_ONCE(RT_FAILURE(p->rc)); + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + return p->rc; +} + + +/** + * Get the information needed to map the basic communication structures in + * device memory into our address space. All pointer parameters are optional. + * + * @param cbVRAM how much video RAM is allocated to the device + * @param poffVRAMBaseMapping where to save the offset from the start of the + * device VRAM of the whole area to map + * @param pcbMapping where to save the mapping size + * @param poffGuestHeapMemory where to save the offset into the mapped area + * of the guest heap backing memory + * @param pcbGuestHeapMemory where to save the size of the guest heap + * backing memory + * @param poffHostFlags where to save the offset into the mapped area + * of the host flags + */ +void VBoxHGSMIGetBaseMappingInfo(u32 cbVRAM, + u32 *poffVRAMBaseMapping, + u32 *pcbMapping, + u32 *poffGuestHeapMemory, + u32 *pcbGuestHeapMemory, + u32 *poffHostFlags) +{ + if (poffVRAMBaseMapping) + *poffVRAMBaseMapping = cbVRAM - VBVA_ADAPTER_INFORMATION_SIZE; + if (pcbMapping) + *pcbMapping = VBVA_ADAPTER_INFORMATION_SIZE; + if (poffGuestHeapMemory) + *poffGuestHeapMemory = 0; + if (pcbGuestHeapMemory) + *pcbGuestHeapMemory = VBVA_ADAPTER_INFORMATION_SIZE + - sizeof(struct hgsmi_host_flags); + if (poffHostFlags) + *poffHostFlags = VBVA_ADAPTER_INFORMATION_SIZE + - sizeof(struct hgsmi_host_flags); +} + +/** + * Query the host for an HGSMI configuration parameter via an HGSMI command. + * @returns iprt status value + * @param ctx the context containing the heap used + * @param index the index of the parameter to query, + * @see struct vbva_conf32::index + * @param value_ret where to store the value of the parameter on success + */ +int hgsmi_query_conf(struct gen_pool * ctx, u32 index, u32 *value_ret) +{ + struct vbva_conf32 *p; + + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, + VBVA_QUERY_CONF32); + if (!p) + return VERR_NO_MEMORY; + + /* Prepare data to be sent to the host. */ + p->index = index; + p->value = U32_MAX; + /* No need to check that the buffer is valid as we have just allocated it. */ + hgsmi_buffer_submit(ctx, p); + *value_ret = p->value; + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + return VINF_SUCCESS; +} + +/** + * Pass the host a new mouse pointer shape via an HGSMI command. + * + * @returns success or failure + * @param ctx the context containing the heap to be used + * @param flags cursor flags, @see VMMDevReqMousePointer::flags + * @param hot_x horizontal position of the hot spot + * @param hot_y vertical position of the hot spot + * @param width width in pixels of the cursor + * @param height height in pixels of the cursor + * @param pixels pixel data, @see VMMDevReqMousePointer for the format + * @param len size in bytes of the pixel data + */ +int hgsmi_update_pointer_shape(struct gen_pool * ctx, u32 flags, + u32 hot_x, u32 hot_y, u32 width, u32 height, + u8 *pixels, u32 len) +{ + struct vbva_mouse_pointer_shape *p; + u32 pixel_len = 0; + int rc; + + if (flags & VBOX_MOUSE_POINTER_SHAPE) { + /* + * Size of the pointer data: + * sizeof (AND mask) + sizeof (XOR_MASK) + */ + pixel_len = ((((width + 7) / 8) * height + 3) & ~3) + + width * 4 * height; + if (pixel_len > len) + return VERR_INVALID_PARAMETER; + /* + * If shape is supplied, then always create the pointer visible. + * See comments in 'vboxUpdatePointerShape' + */ + flags |= VBOX_MOUSE_POINTER_VISIBLE; + } + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(*p) + pixel_len, HGSMI_CH_VBVA, + VBVA_MOUSE_POINTER_SHAPE); + if (!p) + return VERR_NO_MEMORY; + /* Prepare data to be sent to the host. */ + /* Will be updated by the host. */ + p->result = VINF_SUCCESS; + /* We have our custom flags in the field */ + p->flags = flags; + p->hot_x = hot_x; + p->hot_y = hot_y; + p->width = width; + p->height = height; + if (pixel_len) + /* Copy the actual pointer data. */ + memcpy (p->data, pixels, pixel_len); + /* No need to check that the buffer is valid as we have just allocated it. */ + hgsmi_buffer_submit(ctx, p); + rc = p->result; + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + return rc; +} + + +/** + * Report the guest cursor position. The host may wish to use this information + * to re-position its own cursor (though this is currently unlikely). The + * current host cursor position is returned. + * @param ctx The context containing the heap used. + * @param report_position Are we reporting a position? + * @param x Guest cursor X position. + * @param y Guest cursor Y position. + * @param x_host Host cursor X position is stored here. Optional. + * @param y_host Host cursor Y position is stored here. Optional. + * @returns iprt status code. + * @returns VERR_NO_MEMORY HGSMI heap allocation failed. + */ +int hgsmi_cursor_position(struct gen_pool * ctx, bool report_position, + u32 x, u32 y, u32 *x_host, u32 *y_host) +{ + struct vbva_cursor_position *p; + + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(*p), HGSMI_CH_VBVA, + VBVA_CURSOR_POSITION); + if (!p) + return VERR_NO_MEMORY; + /* Prepare data to be sent to the host. */ + p->report_position = report_position; + p->x = x; + p->y = y; + /* No need to check that the buffer is valid as we have just allocated it. */ + hgsmi_buffer_submit(ctx, p); + if (x_host) + *x_host = p->x; + if (y_host) + *y_host = p->y; + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + return VINF_SUCCESS; +} + + +/** + * @todo Mouse pointer position to be read from VMMDev memory, address of the + * memory region can be queried from VMMDev via an IOCTL. This VMMDev memory + * region will contain host information which is needed by the guest. + * + * Reading will not cause a switch to the host. + * + * Have to take into account: + * * synchronization: host must write to the memory only from EMT, + * large structures must be read under flag, which tells the host + * that the guest is currently reading the memory (OWNER flag?). + * * guest writes: may be allocate a page for the host info and make + * the page readonly for the guest. + * * the information should be available only for additions drivers. + * * VMMDev additions driver will inform the host which version of the info + * it expects, host must support all versions. + */ --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/hgsmi_ch_setup.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/hgsmi_ch_setup.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __HGSMI_CH_SETUP_H__ +#define __HGSMI_CH_SETUP_H__ + +#include "hgsmi_defs.h" + +/* HGSMI setup and configuration channel commands and data structures. */ +/* + * Tell the host the location of hgsmi_host_flags structure, where the host + * can write information about pending buffers, etc, and which can be quickly + * polled by the guest without a need to port IO. + */ +#define HGSMI_CC_HOST_FLAGS_LOCATION 0 + +struct hgsmi_buffer_location { + u32 location; + u32 buf_len; +}; +assert_compile_size(struct hgsmi_buffer_location, 8); + +/* HGSMI setup and configuration data structures. */ +/* host->guest commands pending, should be accessed under FIFO lock only */ +#define HGSMIHOSTFLAGS_COMMANDS_PENDING 0x01u +/* IRQ is fired, should be accessed under VGAState::lock only */ +#define HGSMIHOSTFLAGS_IRQ 0x02u +#ifdef VBOX_WITH_WDDM +/* one or more guest commands is completed, should be accessed under FIFO lock only */ +# define HGSMIHOSTFLAGS_GCOMMAND_COMPLETED 0x04u +/* watchdog timer interrupt flag (used for debugging), should be accessed under VGAState::lock only */ +# define HGSMIHOSTFLAGS_WATCHDOG 0x08u +#endif +/* vsync interrupt flag, should be accessed under VGAState::lock only */ +#define HGSMIHOSTFLAGS_VSYNC 0x10u +/** monitor hotplug flag, should be accessed under VGAState::lock only */ +#define HGSMIHOSTFLAGS_HOTPLUG 0x20u +/** + * Cursor capability state change flag, should be accessed under + * VGAState::lock only. @see struct vbva_conf32. + */ +#define HGSMIHOSTFLAGS_CURSOR_CAPABILITIES 0x40u + +struct hgsmi_host_flags { + /* + * Host flags can be accessed and modified in multiple threads + * concurrently, e.g. CrOpenGL HGCM and GUI threads when completing + * HGSMI 3D and Video Accel respectively, EMT thread when dealing with + * HGSMI command processing, etc. + * Besides settings/cleaning flags atomically, some flags have their + * own special sync restrictions, see comments for flags above. + */ + volatile u32 host_flags; + u32 reserved[3]; +}; +assert_compile_size(struct hgsmi_host_flags, 16); + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/hgsmi_channels.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/hgsmi_channels.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __HGSMI_CHANNELS_H__ +#define __HGSMI_CHANNELS_H__ + + +/* + * Each channel has an 8 bit identifier. There are a number of predefined + * (hardcoded) channels. + * + * HGSMI_CH_HGSMI channel can be used to map a string channel identifier + * to a free 16 bit numerical value. values are allocated in range + * [HGSMI_CH_STRING_FIRST;HGSMI_CH_STRING_LAST]. + */ + + +/* Predefined channel identifiers. Used internally by VBOX to simplify the channel setup. */ +/* A reserved channel value */ +#define HGSMI_CH_RESERVED 0x00 +/* HGCMI: setup and configuration */ +#define HGSMI_CH_HGSMI 0x01 +/* Graphics: VBVA */ +#define HGSMI_CH_VBVA 0x02 +/* Graphics: Seamless with a single guest region */ +#define HGSMI_CH_SEAMLESS 0x03 +/* Graphics: Seamless with separate host windows */ +#define HGSMI_CH_SEAMLESS2 0x04 +/* Graphics: OpenGL HW acceleration */ +#define HGSMI_CH_OPENGL 0x05 + + +/* Dynamically allocated channel identifiers. */ +/* The first channel index to be used for string mappings (inclusive) */ +#define HGSMI_CH_STRING_FIRST 0x20 +/* The last channel index for string mappings (inclusive) */ +#define HGSMI_CH_STRING_LAST 0xff + + +/* Check whether the channel identifier is allocated for a dynamic channel */ +#define HGSMI_IS_DYNAMIC_CHANNEL(_channel) (((u8)(_channel) & 0xE0) != 0) + + +#endif /* !__HGSMI_CHANNELS_H__*/ --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/hgsmi_context.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/hgsmi_context.h @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef ___VBox_Graphics_HGSMIContext_h___ +#define ___VBox_Graphics_HGSMIContext_h___ + +#include "HGSMI.h" +#include "hgsmi_ch_setup.h" +#include "vbox_err.h" + +#ifdef VBOX_WDDM_MINIPORT +# include "wddm/VBoxMPShgsmi.h" + typedef VBOXSHGSMI HGSMIGUESTCMDHEAP; +# define HGSMIGUESTCMDHEAP_GET(_p) (&(_p)->Heap) +#else + typedef HGSMIHEAP HGSMIGUESTCMDHEAP; +# define HGSMIGUESTCMDHEAP_GET(_p) (_p) +#endif + + +/** + * Structure grouping the context needed for submitting commands to the host + * via HGSMI + */ +typedef struct HGSMIGUESTCOMMANDCONTEXT { + /** Information about the memory heap located in VRAM from which data + * structures to be sent to the host are allocated. */ + HGSMIGUESTCMDHEAP heapCtx; + /** The I/O port used for submitting commands to the host by writing their + * offsets into the heap. */ + RTIOPORT port; +} HGSMIGUESTCOMMANDCONTEXT, *PHGSMIGUESTCOMMANDCONTEXT; + + +/** + * Structure grouping the context needed for receiving commands from the host + * via HGSMI + */ +typedef struct HGSMIHOSTCOMMANDCONTEXT { + /** Information about the memory area located in VRAM in which the host + * places data structures to be read by the guest. */ + HGSMIAREA areaCtx; + /** Convenience structure used for matching host commands to handlers. */ + /** @todo handlers are registered individually in code rather than just + * passing a static structure in order to gain extra flexibility. There is + * currently no expected usage case for this though. Is the additional + * complexity really justified? */ + HGSMICHANNELINFO channels; + /** Flag to indicate that one thread is currently processing the command + * queue. */ + volatile bool fHostCmdProcessing; + /* Pointer to the VRAM location where the HGSMI host flags are kept. */ + volatile struct hgsmi_host_flags *pfHostFlags; + /** The I/O port used for receiving commands from the host as offsets into + * the memory area and sending back confirmations (command completion, + * IRQ acknowlegement). */ + RTIOPORT port; +} HGSMIHOSTCOMMANDCONTEXT, *PHGSMIHOSTCOMMANDCONTEXT; + +/** @name HGSMI context initialisation APIs. + * @{ */ + +/** @todo we should provide a cleanup function too as part of the API */ +int VBoxHGSMISetupGuestContext(struct gen_pool * ctx, + void *pvGuestHeapMemory, + u32 cbGuestHeapMemory, + u32 offVRAMGuestHeapMemory, + const HGSMIENV *pEnv); +void VBoxHGSMISetupHostContext(PHGSMIHOSTCOMMANDCONTEXT ctx, + void *pvBaseMapping, + u32 offHostFlags, + void *pvHostAreaMapping, + u32 offVRAMHostArea, + u32 cbHostArea); + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/hgsmi_defs.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/hgsmi_defs.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef ___VBox_Graphics_HGSMIDefs_h +#define ___VBox_Graphics_HGSMIDefs_h + +#include "vbox_err.h" + +/* HGSMI uses 32 bit offsets and sizes. */ + +#define HGSMIOFFSET_VOID ((u32)~0) + +/* Describes a shared memory area buffer. + * Used for calculations with offsets and for buffers verification. + */ +typedef struct HGSMIAREA { + u8 *pu8Base; /* The starting address of the area. Corresponds to offset 'offBase'. */ + u32 offBase; /* The starting offset of the area. */ + u32 offLast; /* The last valid offset: + * offBase + cbArea - 1 - (sizeof(header) + sizeof(tail)). + */ + u32 cbArea; /* Size of the area. */ +} HGSMIAREA; + + +/* The buffer description flags. */ +#define HGSMI_BUFFER_HEADER_F_SEQ_MASK 0x03 /* Buffer sequence type mask. */ +#define HGSMI_BUFFER_HEADER_F_SEQ_SINGLE 0x00 /* Single buffer, not a part of a sequence. */ +#define HGSMI_BUFFER_HEADER_F_SEQ_START 0x01 /* The first buffer in a sequence. */ +#define HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE 0x02 /* A middle buffer in a sequence. */ +#define HGSMI_BUFFER_HEADER_F_SEQ_END 0x03 /* The last buffer in a sequence. */ + + +#pragma pack(1) /** @todo not necessary. use assert_compile_size instead. */ +/* 16 bytes buffer header. */ +typedef struct HGSMIBUFFERHEADER { + u32 u32DataSize; /* Size of data that follows the header. */ + + u8 u8Flags; /* The buffer description: HGSMI_BUFFER_HEADER_F_* */ + + u8 u8Channel; /* The channel the data must be routed to. */ + u16 u16ChannelInfo; /* Opaque to the HGSMI, used by the channel. */ + + union { + u8 au8Union[8]; /* Opaque placeholder to make the union 8 bytes. */ + + struct { /* HGSMI_BUFFER_HEADER_F_SEQ_SINGLE */ + u32 u32Reserved1; /* A reserved field, initialize to 0. */ + u32 u32Reserved2; /* A reserved field, initialize to 0. */ + } Buffer; + + struct { /* HGSMI_BUFFER_HEADER_F_SEQ_START */ + u32 u32SequenceNumber; /* The sequence number, the same for all buffers in the sequence. */ + u32 u32SequenceSize; /* The total size of the sequence. */ + } SequenceStart; + + struct { /* HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE and HGSMI_BUFFER_HEADER_F_SEQ_END */ + u32 u32SequenceNumber; /* The sequence number, the same for all buffers in the sequence. */ + u32 u32SequenceOffset; /* Data offset in the entire sequence. */ + } SequenceContinue; + } u; +} HGSMIBUFFERHEADER; + +/* 8 bytes buffer tail. */ +typedef struct HGSMIBUFFERTAIL { + u32 reserved; /* Reserved, must be initialized to 0. */ + u32 u32Checksum; /* Verifyer for the buffer header and offset and for first 4 bytes of the tail. */ +} HGSMIBUFFERTAIL; +#pragma pack() + +assert_compile_size(HGSMIBUFFERHEADER, 16); +assert_compile_size(HGSMIBUFFERTAIL, 8); + +/* The size of the array of channels. Array indexes are u8. Note: the value must not be changed. */ +#define HGSMI_NUMBER_OF_CHANNELS 0x100 + +typedef struct HGSMIENV { + /* Environment context pointer. */ + void *pvEnv; + + /* Allocate system memory. */ + void * (*pfnAlloc)(void *pvEnv, u32 len); + + /* Free system memory. */ + void (*pfnFree)(void *pvEnv, void *pv); +} HGSMIENV; + +#endif /* !___VBox_Graphics_HGSMIDefs_h */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/modesetting.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/modesetting.c @@ -0,0 +1,364 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "vboxvideo_guest.h" +#include "vboxvideo_vbe.h" +#include "hgsmi_channels.h" + +#ifndef VBOX_GUESTR3XF86MOD +# include "vbox_err.h" +#endif + +/** + * Gets the count of virtual monitors attached to the guest via an HGSMI + * command + * + * @returns the right count on success or 1 on failure. + * @param ctx the context containing the heap to use + */ +u32 VBoxHGSMIGetMonitorCount(struct gen_pool * ctx) +{ + /* Query the configured number of displays. */ + u32 cDisplays = 0; + hgsmi_query_conf(ctx, VBOX_VBVA_CONF32_MONITOR_COUNT, &cDisplays); + // LogFunc(("cDisplays = %d\n", cDisplays)); + if (cDisplays == 0 || cDisplays > VBOX_VIDEO_MAX_SCREENS) + /* Host reported some bad value. Continue in the 1 screen mode. */ + cDisplays = 1; + return cDisplays; +} + + +/** + * Returns the size of the video RAM in bytes. + * + * @returns the size + */ +u32 VBoxVideoGetVRAMSize(void) +{ + /** @note A 32bit read on this port returns the VRAM size. */ + return inl(VBE_DISPI_IOPORT_DATA); +} + + +/** + * Check whether this hardware allows the display width to have non-multiple- + * of-eight values. + * + * @returns true if any width is allowed, false otherwise. + */ +bool VBoxVideoAnyWidthAllowed(void) +{ + unsigned DispiId; + outw(VBE_DISPI_INDEX_ID, VBE_DISPI_IOPORT_INDEX); + outw(VBE_DISPI_ID_ANYX, VBE_DISPI_IOPORT_DATA); + DispiId = inw(VBE_DISPI_IOPORT_DATA); + return (DispiId == VBE_DISPI_ID_ANYX); +} + + +/** + * Tell the host about how VRAM is divided up between each screen via an HGSMI + * command. It is acceptable to specifiy identical data for each screen if + * they share a single framebuffer. + * + * @returns iprt status code, either VERR_NO_MEMORY or the status returned by + * @a pfnFill + * @todo What was I thinking of with that callback function? It + * would be much simpler to just pass in a structure in normal + * memory and copy it. + * @param ctx the context containing the heap to use + * @param u32Count the number of screens we are activating + * @param pfnFill a callback which initialises the VBVAINFOVIEW structures + * for all screens + * @param pvData context data for @a pfnFill + */ +int VBoxHGSMISendViewInfo(struct gen_pool * ctx, + u32 u32Count, + PFNHGSMIFILLVIEWINFO pfnFill, + void *pvData) +{ + int rc; + /* Issue the screen info command. */ + void *p = hgsmi_buffer_alloc(ctx, sizeof(VBVAINFOVIEW) * u32Count, + HGSMI_CH_VBVA, VBVA_INFO_VIEW); + if (p) { + VBVAINFOVIEW *pInfo = (VBVAINFOVIEW *)p; + rc = pfnFill(pvData, pInfo, u32Count); + if (RT_SUCCESS(rc)) + hgsmi_buffer_submit (ctx, p); + hgsmi_buffer_free(ctx, p); + } else + rc = VERR_NO_MEMORY; + return rc; +} + + +/** + * Set a video mode using port registers. This must be done for the first + * screen before every HGSMI modeset and also works when HGSM is not enabled. + * @param width the mode width + * @param height the mode height + * @param cVirtWidth the mode pitch + * @param bpp the colour depth of the mode + * @param flags flags for the mode. These will be or-ed with the + * default _ENABLED flag, so unless you are restoring + * a saved mode or have special requirements you can pass + * zero here. + * @param cx the horizontal panning offset + * @param cy the vertical panning offset + */ +void VBoxVideoSetModeRegisters(u16 width, u16 height, + u16 cVirtWidth, u16 bpp, + u16 flags, u16 cx, + u16 cy) +{ + /* set the mode characteristics */ + outw(VBE_DISPI_INDEX_XRES, VBE_DISPI_IOPORT_INDEX); + outw(width, VBE_DISPI_IOPORT_DATA); + outw(VBE_DISPI_INDEX_YRES, VBE_DISPI_IOPORT_INDEX); + outw(height, VBE_DISPI_IOPORT_DATA); + outw(VBE_DISPI_INDEX_VIRT_WIDTH, VBE_DISPI_IOPORT_INDEX); + outw(cVirtWidth, VBE_DISPI_IOPORT_DATA); + outw(VBE_DISPI_INDEX_BPP, VBE_DISPI_IOPORT_INDEX); + outw(bpp, VBE_DISPI_IOPORT_DATA); + /* enable the mode */ + outw(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_IOPORT_INDEX); + outw(flags | VBE_DISPI_ENABLED, VBE_DISPI_IOPORT_DATA); + /* Panning registers */ + outw(VBE_DISPI_INDEX_X_OFFSET, VBE_DISPI_IOPORT_INDEX); + outw(cx, VBE_DISPI_IOPORT_DATA); + outw(VBE_DISPI_INDEX_Y_OFFSET, VBE_DISPI_IOPORT_INDEX); + outw(cy, VBE_DISPI_IOPORT_DATA); + /** @todo read from the port to see if the mode switch was successful */ +} + + +/** + * Get the video mode for the first screen using the port registers. All + * parameters are optional + * @returns true if the VBE mode returned is active, false if we are in VGA + * mode + * @note If anyone else needs additional register values just extend the + * function with additional parameters and fix any existing callers. + * @param pcWidth where to store the mode width + * @param pcHeight where to store the mode height + * @param pcVirtWidth where to store the mode pitch + * @param pcBPP where to store the colour depth of the mode + * @param pfFlags where to store the flags for the mode + */ +bool VBoxVideoGetModeRegisters(u16 *pcWidth, u16 *pcHeight, + u16 *pcVirtWidth, u16 *pcBPP, + u16 *pfFlags) +{ + u16 flags; + + outw(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_IOPORT_INDEX); + flags = inw(VBE_DISPI_IOPORT_DATA); + if (pcWidth) { + outw(VBE_DISPI_INDEX_XRES, VBE_DISPI_IOPORT_INDEX); + *pcWidth = inw(VBE_DISPI_IOPORT_DATA); + } + if (pcHeight) { + outw(VBE_DISPI_INDEX_YRES, VBE_DISPI_IOPORT_INDEX); + *pcHeight = inw(VBE_DISPI_IOPORT_DATA); + } + if (pcVirtWidth) { + outw(VBE_DISPI_INDEX_VIRT_WIDTH, VBE_DISPI_IOPORT_INDEX); + *pcVirtWidth = inw(VBE_DISPI_IOPORT_DATA); + } + if (pcBPP) { + outw(VBE_DISPI_INDEX_BPP, VBE_DISPI_IOPORT_INDEX); + *pcBPP = inw(VBE_DISPI_IOPORT_DATA); + } + if (pfFlags) + *pfFlags = flags; + return (!!(flags & VBE_DISPI_ENABLED)); +} + + +/** + * Disable our extended graphics mode and go back to VGA mode. + */ +void VBoxVideoDisableVBE(void) +{ + outw(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_IOPORT_INDEX); + outw(0, VBE_DISPI_IOPORT_DATA); +} + + +/** + * Set a video mode via an HGSMI request. The views must have been + * initialised first using @a VBoxHGSMISendViewInfo and if the mode is being + * set on the first display then it must be set first using registers. + * @param ctx The context containing the heap to use. + * @param display the screen number + * @param origin_x the horizontal displacement relative to the first screen + * @param origin_y the vertical displacement relative to the first screen + * @param start_offset the offset of the visible area of the framebuffer + * relative to the framebuffer start + * @param pitch the offset in bytes between the starts of two adjecent + * scan lines in video RAM + * @param width the mode width + * @param height the mode height + * @param bpp the colour depth of the mode + * @param flags flags + */ +void hgsmi_process_display_info(struct gen_pool * ctx, + u32 display, + s32 origin_x, + s32 origin_y, + u32 start_offset, + u32 pitch, + u32 width, + u32 height, + u16 bpp, + u16 flags) +{ + /* Issue the screen info command. */ + void *p = hgsmi_buffer_alloc(ctx, + sizeof (VBVAINFOSCREEN), + HGSMI_CH_VBVA, + VBVA_INFO_SCREEN); + if (!p) { + // LogFunc(("HGSMIHeapAlloc failed\n")); + } else { + VBVAINFOSCREEN *pScreen = (VBVAINFOSCREEN *)p; + + pScreen->view_index = display; + pScreen->origin_x = origin_x; + pScreen->origin_y = origin_y; + pScreen->start_offset = start_offset; + pScreen->line_size = pitch; + pScreen->width = width; + pScreen->height = height; + pScreen->bits_per_pixel = bpp; + pScreen->flags = flags; + + hgsmi_buffer_submit(ctx, p); + + hgsmi_buffer_free(ctx, p); + } +} + + +/** Report the rectangle relative to which absolute pointer events should be + * expressed. This information remains valid until the next VBVA resize event + * for any screen, at which time it is reset to the bounding rectangle of all + * virtual screens. + * @param ctx The context containing the heap to use. + * @param origin_x Upper left X co-ordinate relative to the first screen. + * @param origin_y Upper left Y co-ordinate relative to the first screen. + * @param width Rectangle width. + * @param height Rectangle height. + * @returns iprt status code. + * @returns VERR_NO_MEMORY HGSMI heap allocation failed. + */ +int hgsmi_update_input_mapping(struct gen_pool * ctx, s32 origin_x, s32 origin_y, + u32 width, u32 height) +{ + int rc = VINF_SUCCESS; + struct vbva_report_input_mapping *p; + // Log(("%s: origin_x=%d, origin_y=%d, width=%u, height=%u\n", __PRETTY_FUNCTION__, (int)origin_x, (int)origin_x, + // (unsigned)width, (unsigned)height)); + + /* Allocate the IO buffer. */ + p = hgsmi_buffer_alloc(ctx, sizeof(struct vbva_report_input_mapping), HGSMI_CH_VBVA, + VBVA_REPORT_INPUT_MAPPING); + if (p) { + /* Prepare data to be sent to the host. */ + p->x = origin_x; + p->y = origin_y; + p->cx = width; + p->cy = height; + rc = hgsmi_buffer_submit(ctx, p); + /* Free the IO buffer. */ + hgsmi_buffer_free(ctx, p); + } else + rc = VERR_NO_MEMORY; + // LogFunc(("rc = %d\n", rc)); + return rc; +} + + +/** + * Get most recent video mode hints. + * @param ctx the context containing the heap to use + * @param screens the number of screens to query hints for, starting at 0. + * @param hints array of struct vbva_modehint structures for receiving the hints. + * @returns iprt status code + * @returns VERR_NO_MEMORY HGSMI heap allocation failed. + * @returns VERR_NOT_SUPPORTED Host does not support this command. + */ +int hgsmi_get_mode_hints(struct gen_pool * ctx, + unsigned screens, struct vbva_modehint *hints) +{ + int rc; + void *p; + + WARN_ON_ONCE(!((hints))); + if (WARN_ON(!hints)) + return VERR_INVALID_POINTER; + + p = hgsmi_buffer_alloc(ctx, sizeof(struct vbva_query_mode_hints) + + screens * sizeof(struct vbva_modehint), + HGSMI_CH_VBVA, VBVA_QUERY_MODE_HINTS); + if (!p) { + // LogFunc(("HGSMIHeapAlloc failed\n")); + return VERR_NO_MEMORY; + } else { + struct vbva_query_mode_hints *pQuery = p; + + pQuery->hints_queried_count = screens; + pQuery->cbHintStructureGuest = sizeof(struct vbva_modehint); + pQuery->rc = VERR_NOT_SUPPORTED; + + hgsmi_buffer_submit(ctx, p); + rc = pQuery->rc; + if (RT_SUCCESS(rc)) + memcpy(hints, ((u8 *)p) + sizeof(struct vbva_query_mode_hints), + screens * sizeof(struct vbva_modehint)); + + hgsmi_buffer_free(ctx, p); + } + return rc; +} + + +/** + * Query the supported flags in VBVAINFOSCREEN::flags. + * + * @returns The mask of VBVA_SCREEN_F_* flags or 0 if host does not support the request. + * @param ctx the context containing the heap to use + */ +u16 VBoxHGSMIGetScreenFlags(struct gen_pool * ctx) +{ + u32 flags = 0; + int rc = hgsmi_query_conf(ctx, VBOX_VBVA_CONF32_SCREEN_FLAGS, &flags); + // LogFunc(("flags = 0x%x rc %Rrc\n", flags, rc)); + if (RT_FAILURE(rc) || flags > U16_MAX) + flags = 0; + return (u16)flags; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/product-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/product-generated.h @@ -0,0 +1,10 @@ +#ifndef ___product_generated_h___ +#define ___product_generated_h___ + +#define VBOX_VENDOR "Oracle Corporation" +#define VBOX_VENDOR_SHORT "Oracle" +#define VBOX_PRODUCT "Oracle VM VirtualBox" +#define VBOX_BUILD_PUBLISHER "_Ubuntu" +#define VBOX_C_YEAR "2018" + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/revision-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/revision-generated.h @@ -0,0 +1 @@ +#define VBOX_SVN_REV 120293 --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_drv.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_drv.c @@ -0,0 +1,331 @@ +/* $Id: vbox_drv.c $ */ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_drv.c + * Copyright 2012 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * Authors: Dave Airlie + * Michael Thayer + */ +#include "vbox_drv.h" + +#include "version-generated.h" +#include "revision-generated.h" + +#include +#include +#include + +#include +#include + +int vbox_modeset = -1; + +MODULE_PARM_DESC(modeset, "Disable/Enable modesetting"); +module_param_named(modeset, vbox_modeset, int, 0400); + +static struct drm_driver driver; + +static const struct pci_device_id pciidlist[] = { { 0x80ee, 0xbeef, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { 0, 0, 0}, +}; +MODULE_DEVICE_TABLE(pci, pciidlist); + +static int vbox_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ + return drm_get_pci_dev(pdev, ent, &driver); +} + +static void vbox_pci_remove(struct pci_dev *pdev) +{ + struct drm_device *dev = pci_get_drvdata(pdev); + + drm_put_dev(dev); +} + +static int vbox_drm_freeze(struct drm_device *dev) +{ + drm_kms_helper_poll_disable(dev); + + pci_save_state(dev->pdev); + + console_lock(); + vbox_fbdev_set_suspend(dev, 1); + console_unlock(); + + return 0; +} + +static int vbox_drm_thaw(struct drm_device *dev) +{ + drm_mode_config_reset(dev); + drm_helper_resume_force_mode(dev); + + console_lock(); + vbox_fbdev_set_suspend(dev, 0); + console_unlock(); + + return 0; +} + +static int vbox_drm_resume(struct drm_device *dev) +{ + int ret; + + if (pci_enable_device(dev->pdev)) + return -EIO; + + ret = vbox_drm_thaw(dev); + if (ret) + return ret; + + drm_kms_helper_poll_enable(dev); + + return 0; +} + +static int vbox_pm_suspend(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *ddev = pci_get_drvdata(pdev); + int error; + + error = vbox_drm_freeze(ddev); + if (error) + return error; + + pci_disable_device(pdev); + pci_set_power_state(pdev, PCI_D3hot); + + return 0; +} + +static int vbox_pm_resume(struct device *dev) +{ + struct drm_device *ddev = pci_get_drvdata(to_pci_dev(dev)); + + return vbox_drm_resume(ddev); +} + +static int vbox_pm_freeze(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct drm_device *ddev = pci_get_drvdata(pdev); + + if (!ddev || !ddev->dev_private) + return -ENODEV; + + return vbox_drm_freeze(ddev); +} + +static int vbox_pm_thaw(struct device *dev) +{ + struct drm_device *ddev = pci_get_drvdata(to_pci_dev(dev)); + + return vbox_drm_thaw(ddev); +} + +static int vbox_pm_poweroff(struct device *dev) +{ + struct drm_device *ddev = pci_get_drvdata(to_pci_dev(dev)); + + return vbox_drm_freeze(ddev); +} + +static const struct dev_pm_ops vbox_pm_ops = { + .suspend = vbox_pm_suspend, + .resume = vbox_pm_resume, + .freeze = vbox_pm_freeze, + .thaw = vbox_pm_thaw, + .poweroff = vbox_pm_poweroff, + .restore = vbox_pm_resume, +}; + +static struct pci_driver vbox_pci_driver = { + .name = DRIVER_NAME, + .id_table = pciidlist, + .probe = vbox_pci_probe, + .remove = vbox_pci_remove, + .driver.pm = &vbox_pm_ops, +}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) && !defined(RHEL_74) +/* This works around a bug in X servers prior to 1.18.4, which sometimes + * submit more dirty rectangles than the kernel is willing to handle and + * then disable dirty rectangle handling altogether when they see the + * EINVAL error. I do not want the code to hang around forever, which is + * why I am limiting it to certain kernel versions. We can increase the + * limit if some distributions uses old X servers with new kernels. */ +long vbox_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + long rc = drm_ioctl(filp, cmd, arg); + + if (cmd == DRM_IOCTL_MODE_DIRTYFB && rc == -EINVAL) + return -EOVERFLOW; + + return rc; +} +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) && !RHEL_74 */ + +static const struct file_operations vbox_fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) && !defined(RHEL_74) + .unlocked_ioctl = vbox_ioctl, +#else + .unlocked_ioctl = drm_ioctl, +#endif + .mmap = vbox_mmap, + .poll = drm_poll, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) && !defined(RHEL_73) + .fasync = drm_fasync, +#endif +#ifdef CONFIG_COMPAT + .compat_ioctl = drm_compat_ioctl, +#endif + .read = drm_read, +}; + +static int vbox_master_set(struct drm_device *dev, + struct drm_file *file_priv, bool from_open) +{ + struct vbox_private *vbox = dev->dev_private; + + /* + * We do not yet know whether the new owner can handle hotplug, so we + * do not advertise dynamic modes on the first query and send a + * tentative hotplug notification after that to see if they query again. + */ + vbox->initial_mode_queried = false; + + mutex_lock(&vbox->hw_mutex); + /* + * Disable VBVA when someone releases master in case the next person + * tries tries to do VESA. + */ + /** @todo work out if anyone is likely to and whether it will work. */ + /* + * Update: we also disable it because if the new master does not do + * dirty rectangle reporting (e.g. old versions of Plymouth) then at + * least the first screen will still be updated. We enable it as soon + * as we receive a dirty rectangle report. + */ + vbox_disable_accel(vbox); + mutex_unlock(&vbox->hw_mutex); + + return 0; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) && !defined(RHEL_74) +static void vbox_master_drop(struct drm_device *dev, + struct drm_file *file_priv, bool from_release) +#else +static void vbox_master_drop(struct drm_device *dev, struct drm_file *file_priv) +#endif +{ + struct vbox_private *vbox = dev->dev_private; + + /* See vbox_master_set() */ + vbox->initial_mode_queried = false; + + mutex_lock(&vbox->hw_mutex); + vbox_disable_accel(vbox); + mutex_unlock(&vbox->hw_mutex); +} + +static struct drm_driver driver = { + .driver_features = + DRIVER_MODESET | DRIVER_GEM | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | + DRIVER_PRIME, + .dev_priv_size = 0, + + .load = vbox_driver_load, + .unload = vbox_driver_unload, + .lastclose = vbox_driver_lastclose, + .master_set = vbox_master_set, + .master_drop = vbox_master_drop, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) + .set_busid = drm_pci_set_busid, +# endif +#endif + + .fops = &vbox_fops, + .irq_handler = vbox_irq_handler, + .name = DRIVER_NAME, + .desc = DRIVER_DESC, + .date = DRIVER_DATE, + .major = DRIVER_MAJOR, + .minor = DRIVER_MINOR, + .patchlevel = DRIVER_PATCHLEVEL, + + .gem_free_object = vbox_gem_free_object, + .dumb_create = vbox_dumb_create, + .dumb_map_offset = vbox_dumb_mmap_offset, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) && !defined(RHEL_73) + .dumb_destroy = vbox_dumb_destroy, +#else + .dumb_destroy = drm_gem_dumb_destroy, +#endif + .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_pin = vbox_gem_prime_pin, + .gem_prime_unpin = vbox_gem_prime_unpin, + .gem_prime_get_sg_table = vbox_gem_prime_get_sg_table, + .gem_prime_import_sg_table = vbox_gem_prime_import_sg_table, + .gem_prime_vmap = vbox_gem_prime_vmap, + .gem_prime_vunmap = vbox_gem_prime_vunmap, + .gem_prime_mmap = vbox_gem_prime_mmap, +}; + +static int __init vbox_init(void) +{ +#if defined(CONFIG_VGA_CONSOLE) || LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) + if (vgacon_text_force() && vbox_modeset == -1) + return -EINVAL; +#endif + + if (vbox_modeset == 0) + return -EINVAL; + + return pci_register_driver(&vbox_pci_driver); +} + +static void __exit vbox_exit(void) +{ + pci_unregister_driver(&vbox_pci_driver); +} + +module_init(vbox_init); +module_exit(vbox_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL and additional rights"); +#ifdef MODULE_VERSION +MODULE_VERSION(VBOX_VERSION_STRING " r" __stringify(VBOX_SVN_REV)); +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_drv.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_drv.h @@ -0,0 +1,361 @@ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_drv.h + * Copyright 2012 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * Authors: Dave Airlie + * Michael Thayer + */ +#ifndef __VBOX_DRV_H__ +#define __VBOX_DRV_H__ + +#define LOG_GROUP LOG_GROUP_DEV_VGA + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) +# include +# include +#endif + +#include +#include +#include + +#if defined(RHEL_MAJOR) && defined(RHEL_MINOR) +# if RHEL_MAJOR == 7 && RHEL_MINOR >= 4 +# define RHEL_73 +# define RHEL_74 +# elif RHEL_MAJOR == 7 && RHEL_MINOR >= 3 +# define RHEL_73 +# endif +#endif + +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) +#include +#endif +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +#include +#endif + +#include +#include +#include +#include +#include + +#include "vboxvideo_guest.h" +#include "vboxvideo_vbe.h" +#include "hgsmi_ch_setup.h" + +#include "product-generated.h" + +#define DRIVER_AUTHOR VBOX_VENDOR + +#define DRIVER_NAME "vboxvideo" +#define DRIVER_DESC VBOX_PRODUCT " Graphics Card" +#define DRIVER_DATE "20130823" + +#define DRIVER_MAJOR 1 +#define DRIVER_MINOR 0 +#define DRIVER_PATCHLEVEL 0 + +#define VBOX_MAX_CURSOR_WIDTH 64 +#define VBOX_MAX_CURSOR_HEIGHT 64 +#define CURSOR_PIXEL_COUNT (VBOX_MAX_CURSOR_WIDTH * VBOX_MAX_CURSOR_HEIGHT) +#define CURSOR_DATA_SIZE (CURSOR_PIXEL_COUNT * 4 + CURSOR_PIXEL_COUNT / 8) + +#define VBOX_MAX_SCREENS 32 + +#define GUEST_HEAP_OFFSET(vbox) ((vbox)->full_vram_size - \ + VBVA_ADAPTER_INFORMATION_SIZE) +#define GUEST_HEAP_SIZE VBVA_ADAPTER_INFORMATION_SIZE +#define GUEST_HEAP_USABLE_SIZE (VBVA_ADAPTER_INFORMATION_SIZE - \ + sizeof(struct hgsmi_host_flags)) +#define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE + +struct vbox_fbdev; + +struct vbox_private { + struct drm_device *dev; + + u8 __iomem *guest_heap; + u8 __iomem *vbva_buffers; + struct gen_pool *guest_pool; + struct vbva_buf_context *vbva_info; + bool any_pitch; + unsigned int num_crtcs; + /** Amount of available VRAM, including space used for buffers. */ + u32 full_vram_size; + /** Amount of available VRAM, not including space used for buffers. */ + u32 available_vram_size; + /** Array of structures for receiving mode hints. */ + struct vbva_modehint *last_mode_hints; + + struct vbox_fbdev *fbdev; + + int fb_mtrr; + + struct { + struct drm_global_reference mem_global_ref; + struct ttm_bo_global_ref bo_global_ref; + struct ttm_bo_device bdev; + bool mm_initialised; + } ttm; + + struct mutex hw_mutex; /* protects modeset and accel/vbva accesses */ + bool isr_installed; + /** + * We decide whether or not user-space supports display hot-plug + * depending on whether they react to a hot-plug event after the initial + * mode query. + */ + bool initial_mode_queried; + struct work_struct hotplug_work; + u32 input_mapping_width; + u32 input_mapping_height; + /** + * Is user-space using an X.Org-style layout of one large frame-buffer + * encompassing all screen ones or is the fbdev console active? + */ + bool single_framebuffer; + u32 cursor_width; + u32 cursor_height; + u32 cursor_hot_x; + u32 cursor_hot_y; + size_t cursor_data_size; + u8 cursor_data[CURSOR_DATA_SIZE]; +}; + +#undef CURSOR_PIXEL_COUNT +#undef CURSOR_DATA_SIZE + +int vbox_driver_load(struct drm_device *dev, unsigned long flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +void vbox_driver_unload(struct drm_device *dev); +#else +int vbox_driver_unload(struct drm_device *dev); +#endif +void vbox_driver_lastclose(struct drm_device *dev); + +struct vbox_gem_object; + +#ifndef VGA_PORT_HGSMI_HOST +#define VGA_PORT_HGSMI_HOST 0x3b0 +#define VGA_PORT_HGSMI_GUEST 0x3d0 +#endif + +struct vbox_connector { + struct drm_connector base; + char name[32]; + struct vbox_crtc *vbox_crtc; + struct { + u32 width; + u32 height; + bool disconnected; + } mode_hint; +}; + +struct vbox_crtc { + struct drm_crtc base; + bool blanked; + bool disconnected; + unsigned int crtc_id; + u32 fb_offset; + bool cursor_enabled; + u32 x_hint; + u32 y_hint; +}; + +struct vbox_encoder { + struct drm_encoder base; +}; + +struct vbox_framebuffer { + struct drm_framebuffer base; + struct drm_gem_object *obj; +}; + +struct vbox_fbdev { + struct drm_fb_helper helper; + struct vbox_framebuffer afb; + int size; + struct ttm_bo_kmap_obj mapping; + int x1, y1, x2, y2; /* dirty rect */ + spinlock_t dirty_lock; +}; + +#define to_vbox_crtc(x) container_of(x, struct vbox_crtc, base) +#define to_vbox_connector(x) container_of(x, struct vbox_connector, base) +#define to_vbox_encoder(x) container_of(x, struct vbox_encoder, base) +#define to_vbox_framebuffer(x) container_of(x, struct vbox_framebuffer, base) + +int vbox_mode_init(struct drm_device *dev); +void vbox_mode_fini(struct drm_device *dev); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) +#define DRM_MODE_FB_CMD drm_mode_fb_cmd +#else +#define DRM_MODE_FB_CMD drm_mode_fb_cmd2 +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) && !defined(RHEL_73) +#define CRTC_FB(crtc) ((crtc)->fb) +#else +#define CRTC_FB(crtc) ((crtc)->primary->fb) +#endif + +void vbox_enable_accel(struct vbox_private *vbox); +void vbox_disable_accel(struct vbox_private *vbox); +void vbox_report_caps(struct vbox_private *vbox); + +void vbox_framebuffer_dirty_rectangles(struct drm_framebuffer *fb, + struct drm_clip_rect *rects, + unsigned int num_rects); + +int vbox_framebuffer_init(struct drm_device *dev, + struct vbox_framebuffer *vbox_fb, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) || defined(RHEL_73) + const +#endif + struct DRM_MODE_FB_CMD *mode_cmd, + struct drm_gem_object *obj); + +int vbox_fbdev_init(struct drm_device *dev); +void vbox_fbdev_fini(struct drm_device *dev); +void vbox_fbdev_set_suspend(struct drm_device *dev, int state); + +struct vbox_bo { + struct ttm_buffer_object bo; + struct ttm_placement placement; + struct ttm_bo_kmap_obj kmap; + struct drm_gem_object gem; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) && !defined(RHEL_73) + u32 placements[3]; +#else + struct ttm_place placements[3]; +#endif + int pin_count; +}; + +#define gem_to_vbox_bo(gobj) container_of((gobj), struct vbox_bo, gem) + +static inline struct vbox_bo *vbox_bo(struct ttm_buffer_object *bo) +{ + return container_of(bo, struct vbox_bo, bo); +} + +#define to_vbox_obj(x) container_of(x, struct vbox_gem_object, base) + +int vbox_dumb_create(struct drm_file *file, + struct drm_device *dev, + struct drm_mode_create_dumb *args); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) && !defined(RHEL_73) +int vbox_dumb_destroy(struct drm_file *file, + struct drm_device *dev, u32 handle); +#endif + +void vbox_gem_free_object(struct drm_gem_object *obj); +int vbox_dumb_mmap_offset(struct drm_file *file, + struct drm_device *dev, + u32 handle, u64 *offset); + +#define DRM_FILE_PAGE_OFFSET (0x10000000ULL >> PAGE_SHIFT) + +int vbox_mm_init(struct vbox_private *vbox); +void vbox_mm_fini(struct vbox_private *vbox); + +int vbox_bo_create(struct drm_device *dev, int size, int align, + u32 flags, struct vbox_bo **pvboxbo); + +int vbox_gem_create(struct drm_device *dev, + u32 size, bool iskernel, struct drm_gem_object **obj); + +int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr); +int vbox_bo_unpin(struct vbox_bo *bo); + +static inline int vbox_bo_reserve(struct vbox_bo *bo, bool no_wait) +{ + int ret; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) || defined(RHEL_74) + ret = ttm_bo_reserve(&bo->bo, true, no_wait, NULL); +#else + ret = ttm_bo_reserve(&bo->bo, true, no_wait, false, 0); +#endif + if (ret) { + if (ret != -ERESTARTSYS && ret != -EBUSY) + DRM_ERROR("reserve failed %p\n", bo); + return ret; + } + return 0; +} + +static inline void vbox_bo_unreserve(struct vbox_bo *bo) +{ + ttm_bo_unreserve(&bo->bo); +} + +void vbox_ttm_placement(struct vbox_bo *bo, int domain); +int vbox_bo_push_sysram(struct vbox_bo *bo); +int vbox_mmap(struct file *filp, struct vm_area_struct *vma); + +/* vbox_prime.c */ +int vbox_gem_prime_pin(struct drm_gem_object *obj); +void vbox_gem_prime_unpin(struct drm_gem_object *obj); +struct sg_table *vbox_gem_prime_get_sg_table(struct drm_gem_object *obj); +struct drm_gem_object *vbox_gem_prime_import_sg_table(struct drm_device *dev, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) && !defined(RHEL_73) + size_t size, +#else + struct dma_buf_attachment + *attach, +#endif + struct sg_table *table); +void *vbox_gem_prime_vmap(struct drm_gem_object *obj); +void vbox_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); +int vbox_gem_prime_mmap(struct drm_gem_object *obj, + struct vm_area_struct *area); + +/* vbox_irq.c */ +int vbox_irq_init(struct vbox_private *vbox); +void vbox_irq_fini(struct vbox_private *vbox); +void vbox_report_hotplug(struct vbox_private *vbox); +irqreturn_t vbox_irq_handler(int irq, void *arg); + +/* vbox_hgsmi.c */ +void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size, + u8 channel, u16 channel_info); +void hgsmi_buffer_free(struct gen_pool *guest_pool, void *buf); +int hgsmi_buffer_submit(struct gen_pool *guest_pool, void *buf); + +static inline void vbox_write_ioport(u16 index, u16 data) +{ + outw(index, VBE_DISPI_IOPORT_INDEX); + outw(data, VBE_DISPI_IOPORT_DATA); +} + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_err.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_err.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __VBOX_ERR_H__ +#define __VBOX_ERR_H__ + +/** @name VirtualBox error macros + * @{ */ + +#define VINF_SUCCESS 0 +#define VERR_INVALID_PARAMETER (-2) +#define VERR_INVALID_POINTER (-6) +#define VERR_NO_MEMORY (-8) +#define VERR_NOT_IMPLEMENTED (-12) +#define VERR_INVALID_FUNCTION (-36) +#define VERR_NOT_SUPPORTED (-37) +#define VERR_TOO_MUCH_DATA (-42) +#define VERR_NOT_FOUND (-78) +#define VERR_INVALID_STATE (-79) +#define VERR_OUT_OF_RESOURCES (-80) +#define VERR_ALREADY_EXISTS (-105) +#define VERR_INTERNAL_ERROR (-225) + +#define RT_SUCCESS_NP(rc) ( (int)(rc) >= VINF_SUCCESS ) +#define RT_SUCCESS(rc) ( likely(RT_SUCCESS_NP(rc)) ) +#define RT_FAILURE(rc) ( unlikely(!RT_SUCCESS_NP(rc)) ) + +/** @} */ + +/** @name VirtualBox assertions + * @{ */ + +/* Unlike BUILD_BUG_ON(), these can be used outside of functions. */ +extern int vbox_assert_var[1]; +#define assert_compile(expr) \ + extern int vbox_assert_var[1] __attribute__((__unused__)), \ + vbox_assert_var[(expr) ? 1 : 0] __attribute__((__unused__)) +#define assert_compile_size(type, size) \ + assert_compile(sizeof(type) == (size)) + +/** @} */ + +#endif --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_fb.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_fb.c @@ -0,0 +1,450 @@ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_fb.c + * Copyright 2012 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * Authors: Dave Airlie + * Michael Thayer +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include "vbox_drv.h" + +#define VBOX_DIRTY_DELAY (HZ / 30) +/** + * Tell the host about dirty rectangles to update. + */ +static void vbox_dirty_update(struct vbox_fbdev *fbdev, + int x, int y, int width, int height) +{ + struct drm_gem_object *obj; + struct vbox_bo *bo; + int ret = -EBUSY; + bool store_for_later = false; + int x2, y2; + unsigned long flags; + struct drm_clip_rect rect; + + obj = fbdev->afb.obj; + bo = gem_to_vbox_bo(obj); + + /* + * try and reserve the BO, if we fail with busy + * then the BO is being moved and we should + * store up the damage until later. + */ + if (drm_can_sleep()) + ret = vbox_bo_reserve(bo, true); + if (ret) { + if (ret != -EBUSY) + return; + + store_for_later = true; + } + + x2 = x + width - 1; + y2 = y + height - 1; + spin_lock_irqsave(&fbdev->dirty_lock, flags); + + if (fbdev->y1 < y) + y = fbdev->y1; + if (fbdev->y2 > y2) + y2 = fbdev->y2; + if (fbdev->x1 < x) + x = fbdev->x1; + if (fbdev->x2 > x2) + x2 = fbdev->x2; + + if (store_for_later) { + fbdev->x1 = x; + fbdev->x2 = x2; + fbdev->y1 = y; + fbdev->y2 = y2; + spin_unlock_irqrestore(&fbdev->dirty_lock, flags); + return; + } + + fbdev->x1 = INT_MAX; + fbdev->y1 = INT_MAX; + fbdev->x2 = 0; + fbdev->y2 = 0; + + spin_unlock_irqrestore(&fbdev->dirty_lock, flags); + + /* + * Not sure why the original code subtracted 1 here, but I will keep + * it that way to avoid unnecessary differences. + */ + rect.x1 = x; + rect.x2 = x2 + 1; + rect.y1 = y; + rect.y2 = y2 + 1; + vbox_framebuffer_dirty_rectangles(&fbdev->afb.base, &rect, 1); + + vbox_bo_unreserve(bo); +} + +#ifdef CONFIG_FB_DEFERRED_IO +static void vbox_deferred_io(struct fb_info *info, struct list_head *pagelist) +{ + struct vbox_fbdev *fbdev = info->par; + unsigned long start, end, min, max; + struct page *page; + int y1, y2; + + min = ULONG_MAX; + max = 0; + list_for_each_entry(page, pagelist, lru) { + start = page->index << PAGE_SHIFT; + end = start + PAGE_SIZE - 1; + min = min(min, start); + max = max(max, end); + } + + if (min < max) { + y1 = min / info->fix.line_length; + y2 = (max / info->fix.line_length) + 1; + DRM_INFO("%s: Calling dirty update: 0, %d, %d, %d\n", + __func__, y1, info->var.xres, y2 - y1 - 1); + vbox_dirty_update(fbdev, 0, y1, info->var.xres, y2 - y1 - 1); + } +} + +static struct fb_deferred_io vbox_defio = { + .delay = VBOX_DIRTY_DELAY, + .deferred_io = vbox_deferred_io, +}; +#endif + +static void vbox_fillrect(struct fb_info *info, const struct fb_fillrect *rect) +{ + struct vbox_fbdev *fbdev = info->par; + + sys_fillrect(info, rect); + vbox_dirty_update(fbdev, rect->dx, rect->dy, rect->width, rect->height); +} + +static void vbox_copyarea(struct fb_info *info, const struct fb_copyarea *area) +{ + struct vbox_fbdev *fbdev = info->par; + + sys_copyarea(info, area); + vbox_dirty_update(fbdev, area->dx, area->dy, area->width, area->height); +} + +static void vbox_imageblit(struct fb_info *info, const struct fb_image *image) +{ + struct vbox_fbdev *fbdev = info->par; + + sys_imageblit(info, image); + vbox_dirty_update(fbdev, image->dx, image->dy, image->width, + image->height); +} + +static struct fb_ops vboxfb_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, + .fb_fillrect = vbox_fillrect, + .fb_copyarea = vbox_copyarea, + .fb_imageblit = vbox_imageblit, + .fb_pan_display = drm_fb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, + .fb_debug_enter = drm_fb_helper_debug_enter, + .fb_debug_leave = drm_fb_helper_debug_leave, +}; + +static int vboxfb_create_object(struct vbox_fbdev *fbdev, + struct DRM_MODE_FB_CMD *mode_cmd, + struct drm_gem_object **gobj_p) +{ + struct drm_device *dev = fbdev->helper.dev; + u32 size; + struct drm_gem_object *gobj; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) + u32 pitch = mode_cmd->pitch; +#else + u32 pitch = mode_cmd->pitches[0]; +#endif + + int ret = 0; + + size = pitch * mode_cmd->height; + ret = vbox_gem_create(dev, size, true, &gobj); + if (ret) + return ret; + + *gobj_p = gobj; + return ret; +} + +static int vboxfb_create(struct drm_fb_helper *helper, + struct drm_fb_helper_surface_size *sizes) +{ + struct vbox_fbdev *fbdev = + container_of(helper, struct vbox_fbdev, helper); + struct drm_device *dev = fbdev->helper.dev; + struct DRM_MODE_FB_CMD mode_cmd; + struct drm_framebuffer *fb; + struct fb_info *info; + struct device *device = &dev->pdev->dev; + struct drm_gem_object *gobj = NULL; + struct vbox_bo *bo = NULL; + int size, ret; + u32 pitch; + + mode_cmd.width = sizes->surface_width; + mode_cmd.height = sizes->surface_height; + pitch = mode_cmd.width * ((sizes->surface_bpp + 7) / 8); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) + mode_cmd.bpp = sizes->surface_bpp; + mode_cmd.depth = sizes->surface_depth; + mode_cmd.pitch = pitch; +#else + mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp, + sizes->surface_depth); + mode_cmd.pitches[0] = pitch; +#endif + + size = pitch * mode_cmd.height; + + ret = vboxfb_create_object(fbdev, &mode_cmd, &gobj); + if (ret) { + DRM_ERROR("failed to create fbcon backing object %d\n", ret); + return ret; + } + + ret = vbox_framebuffer_init(dev, &fbdev->afb, &mode_cmd, gobj); + if (ret) + return ret; + + bo = gem_to_vbox_bo(gobj); + + ret = vbox_bo_reserve(bo, false); + if (ret) + return ret; + + ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, NULL); + if (ret) { + vbox_bo_unreserve(bo); + return ret; + } + + ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); + vbox_bo_unreserve(bo); + if (ret) { + DRM_ERROR("failed to kmap fbcon\n"); + return ret; + } + + info = framebuffer_alloc(0, device); + if (!info) + return -ENOMEM; + info->par = fbdev; + + fbdev->size = size; + + fb = &fbdev->afb.base; + fbdev->helper.fb = fb; + fbdev->helper.fbdev = info; + + strcpy(info->fix.id, "vboxdrmfb"); + + /* + * The last flag forces a mode set on VT switches even if the kernel + * does not think it is needed. + */ + info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT | + FBINFO_MISC_ALWAYS_SETPAR; + info->fbops = &vboxfb_ops; + + ret = fb_alloc_cmap(&info->cmap, 256, 0); + if (ret) + return -ENOMEM; + + /* + * This seems to be done for safety checking that the framebuffer + * is not registered twice by different drivers. + */ + info->apertures = alloc_apertures(1); + if (!info->apertures) + return -ENOMEM; + info->apertures->ranges[0].base = pci_resource_start(dev->pdev, 0); + info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0); + info->fix.smem_start = 0; + info->fix.smem_len = size; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format->depth); +#else + drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth); +#endif + drm_fb_helper_fill_var(info, &fbdev->helper, sizes->fb_width, + sizes->fb_height); + + info->screen_base = bo->kmap.virtual; + info->screen_size = size; + +#ifdef CONFIG_FB_DEFERRED_IO + info->fbdefio = &vbox_defio; + fb_deferred_io_init(info); +#endif + + info->pixmap.flags = FB_PIXMAP_SYSTEM; + + DRM_DEBUG_KMS("allocated %dx%d\n", fb->width, fb->height); + + return 0; +} + +static struct drm_fb_helper_funcs vbox_fb_helper_funcs = { + .fb_probe = vboxfb_create, +}; + +static void vbox_fbdev_destroy(struct drm_device *dev, struct vbox_fbdev *fbdev) +{ + struct fb_info *info; + struct vbox_framebuffer *afb = &fbdev->afb; + + if (fbdev->helper.fbdev) { + info = fbdev->helper.fbdev; + unregister_framebuffer(info); + if (info->cmap.len) + fb_dealloc_cmap(&info->cmap); + framebuffer_release(info); + } + + if (afb->obj) { + struct vbox_bo *bo = gem_to_vbox_bo(afb->obj); + + if (!vbox_bo_reserve(bo, false)) { + if (bo->kmap.virtual) + ttm_bo_kunmap(&bo->kmap); + /* + * QXL does this, but is it really needed before + * freeing? + */ + if (bo->pin_count) + vbox_bo_unpin(bo); + vbox_bo_unreserve(bo); + } + drm_gem_object_unreference_unlocked(afb->obj); + afb->obj = NULL; + } + drm_fb_helper_fini(&fbdev->helper); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) + drm_framebuffer_unregister_private(&afb->base); +#endif + drm_framebuffer_cleanup(&afb->base); +} + +int vbox_fbdev_init(struct drm_device *dev) +{ + struct vbox_private *vbox = dev->dev_private; + struct vbox_fbdev *fbdev; + int ret; + + fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL); + if (!fbdev) + return -ENOMEM; + + vbox->fbdev = fbdev; + spin_lock_init(&fbdev->dirty_lock); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) && !defined(RHEL_73) + fbdev->helper.funcs = &vbox_fb_helper_funcs; +#else + drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs); +#endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + ret = drm_fb_helper_init(dev, &fbdev->helper, vbox->num_crtcs); +#else + ret = + drm_fb_helper_init(dev, &fbdev->helper, vbox->num_crtcs, + vbox->num_crtcs); +#endif + if (ret) + goto free; + + ret = drm_fb_helper_single_add_all_connectors(&fbdev->helper); + if (ret) + goto fini; + + /* disable all the possible outputs/crtcs before entering KMS mode */ + drm_helper_disable_unused_functions(dev); + + ret = drm_fb_helper_initial_config(&fbdev->helper, 32); + if (ret) + goto fini; + + return 0; + +fini: + drm_fb_helper_fini(&fbdev->helper); +free: + kfree(fbdev); + vbox->fbdev = NULL; + + return ret; +} + +void vbox_fbdev_fini(struct drm_device *dev) +{ + struct vbox_private *vbox = dev->dev_private; + + if (!vbox->fbdev) + return; + + vbox_fbdev_destroy(dev, vbox->fbdev); + kfree(vbox->fbdev); + vbox->fbdev = NULL; +} + +void vbox_fbdev_set_suspend(struct drm_device *dev, int state) +{ + struct vbox_private *vbox = dev->dev_private; + + if (!vbox->fbdev) + return; + + fb_set_suspend(vbox->fbdev->helper.fbdev, state); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_hgsmi.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_hgsmi.c @@ -0,0 +1,126 @@ +/* + * Contributed by Hans de Goede + * + * Copyright (C) 2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "vbox_drv.h" +#include "vboxvideo_vbe.h" + +/* One-at-a-Time Hash from http://www.burtleburtle.net/bob/hash/doobs.html */ +static u32 hgsmi_hash_process(u32 hash, const u8 *data, int size) +{ + while (size--) { + hash += *data++; + hash += (hash << 10); + hash ^= (hash >> 6); + } + + return hash; +} + +static u32 hgsmi_hash_end(u32 hash) +{ + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return hash; +} + +/* Not really a checksum but that is the naming used in all vbox code */ +static u32 hgsmi_checksum(u32 offset, + const HGSMIBUFFERHEADER *header, + const HGSMIBUFFERTAIL *tail) +{ + u32 checksum; + + checksum = hgsmi_hash_process(0, (u8 *)&offset, sizeof(offset)); + checksum = hgsmi_hash_process(checksum, (u8 *)header, sizeof(*header)); + /* 4 -> Do not checksum the checksum itself */ + checksum = hgsmi_hash_process(checksum, (u8 *)tail, 4); + + return hgsmi_hash_end(checksum); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) +void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma) +{ + unsigned long vaddr = gen_pool_alloc(pool, size); + + if (vaddr) + *dma = gen_pool_virt_to_phys(pool, vaddr); + return (void *)vaddr; +} +#endif + +void *hgsmi_buffer_alloc(struct gen_pool *guest_pool, size_t size, + u8 channel, u16 channel_info) +{ + HGSMIBUFFERHEADER *h; + HGSMIBUFFERTAIL *t; + size_t total_size; + dma_addr_t offset; + + total_size = size + sizeof(HGSMIBUFFERHEADER) + sizeof(HGSMIBUFFERTAIL); + h = gen_pool_dma_alloc(guest_pool, total_size, &offset); + if (!h) + return NULL; + + t = (HGSMIBUFFERTAIL *)((u8 *)h + sizeof(HGSMIBUFFERHEADER) + size); + + h->u8Flags = HGSMI_BUFFER_HEADER_F_SEQ_SINGLE; + h->u32DataSize = size; + h->u8Channel = channel; + h->u16ChannelInfo = channel_info; + memset(&h->u.au8Union, 0, sizeof(h->u.au8Union)); + + t->reserved = 0; + t->u32Checksum = hgsmi_checksum(offset, h, t); + + return (u8 *)h + sizeof(HGSMIBUFFERHEADER); +} + +void hgsmi_buffer_free(struct gen_pool *guest_pool, void *buf) +{ + HGSMIBUFFERHEADER *h = + (HGSMIBUFFERHEADER *)((u8 *)buf - sizeof(HGSMIBUFFERHEADER)); + size_t total_size = h->u32DataSize + sizeof(HGSMIBUFFERHEADER) + + sizeof(HGSMIBUFFERTAIL); + + gen_pool_free(guest_pool, (unsigned long)h, total_size); +} + +int hgsmi_buffer_submit(struct gen_pool *guest_pool, void *buf) +{ + phys_addr_t offset; + + offset = gen_pool_virt_to_phys(guest_pool, (unsigned long)buf - + sizeof(HGSMIBUFFERHEADER)); + outl(offset, VGA_PORT_HGSMI_GUEST); + /* Make the compiler aware that the host has changed memory. */ + mb(); + + return VINF_SUCCESS; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_irq.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_irq.c @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2016-2017 Oracle Corporation + * This file is based on qxl_irq.c + * Copyright 2013 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Dave Airlie + * Alon Levy + * Michael Thayer + */ + +#include "vbox_drv.h" + +#include "vboxvideo.h" + +#include + +static void vbox_clear_irq(void) +{ + outl((u32)~0, VGA_PORT_HGSMI_HOST); +} + +static u32 vbox_get_flags(struct vbox_private *vbox) +{ + return readl(vbox->guest_heap + HOST_FLAGS_OFFSET); +} + +void vbox_report_hotplug(struct vbox_private *vbox) +{ + schedule_work(&vbox->hotplug_work); +} + +irqreturn_t vbox_irq_handler(int irq, void *arg) +{ + struct drm_device *dev = (struct drm_device *)arg; + struct vbox_private *vbox = (struct vbox_private *)dev->dev_private; + u32 host_flags = vbox_get_flags(vbox); + + if (!(host_flags & HGSMIHOSTFLAGS_IRQ)) + return IRQ_NONE; + + /* + * Due to a bug in the initial host implementation of hot-plug irqs, + * the hot-plug and cursor capability flags were never cleared. + * Fortunately we can tell when they would have been set by checking + * that the VSYNC flag is not set. + */ + if (host_flags & + (HGSMIHOSTFLAGS_HOTPLUG | HGSMIHOSTFLAGS_CURSOR_CAPABILITIES) && + !(host_flags & HGSMIHOSTFLAGS_VSYNC)) + vbox_report_hotplug(vbox); + + vbox_clear_irq(); + + return IRQ_HANDLED; +} + +/** + * Check that the position hints provided by the host are suitable for GNOME + * shell (i.e. all screens disjoint and hints for all enabled screens) and if + * not replace them with default ones. Providing valid hints improves the + * chances that we will get a known screen layout for pointer mapping. + */ +static void validate_or_set_position_hints(struct vbox_private *vbox) +{ + int i, j; + u16 currentx = 0; + bool valid = true; + + for (i = 0; i < vbox->num_crtcs; ++i) { + for (j = 0; j < i; ++j) { + struct vbva_modehint *hintsi = &vbox->last_mode_hints[i]; + struct vbva_modehint *hintsj = &vbox->last_mode_hints[j]; + + if (hintsi->fEnabled && hintsj->fEnabled) { + if (hintsi->dx >= 0xffff || + hintsi->dy >= 0xffff || + hintsj->dx >= 0xffff || + hintsj->dy >= 0xffff || + (hintsi->dx < + hintsj->dx + (hintsj->cx & 0x8fff) && + hintsi->dx + (hintsi->cx & 0x8fff) > + hintsj->dx) || + (hintsi->dy < + hintsj->dy + (hintsj->cy & 0x8fff) && + hintsi->dy + (hintsi->cy & 0x8fff) > + hintsj->dy)) + valid = false; + } + } + } + if (!valid) + for (i = 0; i < vbox->num_crtcs; ++i) { + if (vbox->last_mode_hints[i].fEnabled) { + vbox->last_mode_hints[i].dx = currentx; + vbox->last_mode_hints[i].dy = 0; + currentx += + vbox->last_mode_hints[i].cx & 0x8fff; + } + } +} + +/** + * Query the host for the most recent video mode hints. + */ +static void vbox_update_mode_hints(struct vbox_private *vbox) +{ + struct drm_device *dev = vbox->dev; + struct drm_connector *connector; + struct vbox_connector *vbox_connector; + struct vbva_modehint *hints; + u16 flags; + bool disconnected; + unsigned int crtc_id; + int rc; + + rc = hgsmi_get_mode_hints(vbox->guest_pool, vbox->num_crtcs, + vbox->last_mode_hints); + if (RT_FAILURE(rc)) { + DRM_ERROR("vboxvideo: hgsmi_get_mode_hints failed, rc=%i.\n", + rc); + return; + } + validate_or_set_position_hints(vbox); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) + drm_modeset_lock_all(dev); +#else + mutex_lock(&dev->mode_config.mutex); +#endif + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + vbox_connector = to_vbox_connector(connector); + hints = + &vbox->last_mode_hints[vbox_connector->vbox_crtc->crtc_id]; + if (hints->magic == VBVAMODEHINT_MAGIC) { + disconnected = !(hints->fEnabled); + crtc_id = vbox_connector->vbox_crtc->crtc_id; + flags = VBVA_SCREEN_F_ACTIVE + | (disconnected ? VBVA_SCREEN_F_DISABLED : + VBVA_SCREEN_F_BLANK); + vbox_connector->mode_hint.width = hints->cx; + vbox_connector->mode_hint.height = hints->cy; + vbox_connector->vbox_crtc->x_hint = hints->dx; + vbox_connector->vbox_crtc->y_hint = hints->dy; + vbox_connector->mode_hint.disconnected = disconnected; + if (vbox_connector->vbox_crtc->disconnected != + disconnected) { + hgsmi_process_display_info(vbox->guest_pool, + crtc_id, 0, 0, 0, + hints->cx * 4, + hints->cx, + hints->cy, 0, + flags); + vbox_connector->vbox_crtc->disconnected = + disconnected; + } + } + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) + drm_modeset_unlock_all(dev); +#else + mutex_unlock(&dev->mode_config.mutex); +#endif +} + +static void vbox_hotplug_worker(struct work_struct *work) +{ + struct vbox_private *vbox = container_of(work, struct vbox_private, + hotplug_work); + + vbox_update_mode_hints(vbox); + drm_kms_helper_hotplug_event(vbox->dev); +} + +int vbox_irq_init(struct vbox_private *vbox) +{ + int ret; + + vbox_update_mode_hints(vbox); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) || defined(RHEL_73) + ret = drm_irq_install(vbox->dev, vbox->dev->pdev->irq); +#else + ret = drm_irq_install(vbox->dev); +#endif + if (unlikely(ret != 0)) { + vbox_irq_fini(vbox); + DRM_ERROR("Failed installing irq: %d\n", ret); + return 1; + } + INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker); + vbox->isr_installed = true; + return 0; +} + +void vbox_irq_fini(struct vbox_private *vbox) +{ + if (vbox->isr_installed) { + drm_irq_uninstall(vbox->dev); + flush_work(&vbox->hotplug_work); + vbox->isr_installed = false; + } +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_main.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_main.c @@ -0,0 +1,562 @@ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_main.c + * Copyright 2012 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * Authors: Dave Airlie , + * Michael Thayer + */ +#include "vbox_drv.h" + +#include "vboxvideo_guest.h" +#include "vboxvideo_vbe.h" + +#include +#include + +static void vbox_user_framebuffer_destroy(struct drm_framebuffer *fb) +{ + struct vbox_framebuffer *vbox_fb = to_vbox_framebuffer(fb); + + if (vbox_fb->obj) + drm_gem_object_unreference_unlocked(vbox_fb->obj); + + drm_framebuffer_cleanup(fb); + kfree(fb); +} + +void vbox_enable_accel(struct vbox_private *vbox) +{ + unsigned int i; + struct VBVABUFFER *vbva; + + if (!vbox->vbva_info || !vbox->vbva_buffers) { + /* Should never happen... */ + DRM_ERROR("vboxvideo: failed to set up VBVA.\n"); + return; + } + + for (i = 0; i < vbox->num_crtcs; ++i) { + if (!vbox->vbva_info[i].vbva) { + vbva = (struct VBVABUFFER *) + ((u8 *)vbox->vbva_buffers + + i * VBVA_MIN_BUFFER_SIZE); + if (!vbva_enable(&vbox->vbva_info[i], + vbox->guest_pool, vbva, i)) { + /* very old host or driver error. */ + DRM_ERROR("vboxvideo: vbva_enable failed - heap allocation error.\n"); + return; + } + } + } +} + +void vbox_disable_accel(struct vbox_private *vbox) +{ + unsigned int i; + + for (i = 0; i < vbox->num_crtcs; ++i) + vbva_disable(&vbox->vbva_info[i], vbox->guest_pool, i); +} + +void vbox_report_caps(struct vbox_private *vbox) +{ + u32 caps = VBVACAPS_DISABLE_CURSOR_INTEGRATION + | VBVACAPS_IRQ | VBVACAPS_USE_VBVA_ONLY; + if (vbox->initial_mode_queried) + caps |= VBVACAPS_VIDEO_MODE_HINTS; + hgsmi_send_caps_info(vbox->guest_pool, caps); +} + +/** + * Send information about dirty rectangles to VBVA. If necessary we enable + * VBVA first, as this is normally disabled after a change of master in case + * the new master does not send dirty rectangle information (is this even + * allowed?) + */ +void vbox_framebuffer_dirty_rectangles(struct drm_framebuffer *fb, + struct drm_clip_rect *rects, + unsigned int num_rects) +{ + struct vbox_private *vbox = fb->dev->dev_private; + struct drm_crtc *crtc; + unsigned int i; + + mutex_lock(&vbox->hw_mutex); + list_for_each_entry(crtc, &fb->dev->mode_config.crtc_list, head) { + if (CRTC_FB(crtc) == fb) { + vbox_enable_accel(vbox); + for (i = 0; i < num_rects; ++i) { + VBVACMDHDR cmd_hdr; + unsigned int crtc_id = + to_vbox_crtc(crtc)->crtc_id; + + if ((rects[i].x1 > + crtc->x + crtc->hwmode.hdisplay) || + (rects[i].y1 > + crtc->y + crtc->hwmode.vdisplay) || + (rects[i].x2 < crtc->x) || + (rects[i].y2 < crtc->y)) + continue; + + cmd_hdr.x = (s16)rects[i].x1; + cmd_hdr.y = (s16)rects[i].y1; + cmd_hdr.w = (u16)rects[i].x2 - rects[i].x1; + cmd_hdr.h = (u16)rects[i].y2 - rects[i].y1; + + if (vbva_buffer_begin_update( + &vbox->vbva_info[crtc_id], + vbox->guest_pool)) { + VBoxVBVAWrite(&vbox->vbva_info[crtc_id], + vbox->guest_pool, + &cmd_hdr, + sizeof(cmd_hdr)); + vbva_buffer_end_update( + &vbox->vbva_info[crtc_id]); + } + } + } + } + mutex_unlock(&vbox->hw_mutex); +} + +static int vbox_user_framebuffer_dirty(struct drm_framebuffer *fb, + struct drm_file *file_priv, + unsigned int flags, unsigned int color, + struct drm_clip_rect *rects, + unsigned int num_rects) +{ + vbox_framebuffer_dirty_rectangles(fb, rects, num_rects); + + return 0; +} + +static const struct drm_framebuffer_funcs vbox_fb_funcs = { + .destroy = vbox_user_framebuffer_destroy, + .dirty = vbox_user_framebuffer_dirty, +}; + +int vbox_framebuffer_init(struct drm_device *dev, + struct vbox_framebuffer *vbox_fb, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) || defined(RHEL_73) + const +#endif + struct DRM_MODE_FB_CMD *mode_cmd, + struct drm_gem_object *obj) +{ + int ret; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + drm_helper_mode_fill_fb_struct(dev, &vbox_fb->base, mode_cmd); +#else + drm_helper_mode_fill_fb_struct(&vbox_fb->base, mode_cmd); +#endif + vbox_fb->obj = obj; + ret = drm_framebuffer_init(dev, &vbox_fb->base, &vbox_fb_funcs); + if (ret) { + DRM_ERROR("framebuffer init failed %d\n", ret); + return ret; + } + + return 0; +} + +static struct drm_framebuffer *vbox_user_framebuffer_create( + struct drm_device *dev, + struct drm_file *filp, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) || defined(RHEL_73) + const struct drm_mode_fb_cmd2 *mode_cmd) +#else + struct drm_mode_fb_cmd2 *mode_cmd) +#endif +{ + struct drm_gem_object *obj; + struct vbox_framebuffer *vbox_fb; + int ret; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) || defined(RHEL_74) + obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); +#else + obj = drm_gem_object_lookup(dev, filp, mode_cmd->handles[0]); +#endif + if (!obj) + return ERR_PTR(-ENOENT); + + vbox_fb = kzalloc(sizeof(*vbox_fb), GFP_KERNEL); + if (!vbox_fb) { + drm_gem_object_unreference_unlocked(obj); + return ERR_PTR(-ENOMEM); + } + + ret = vbox_framebuffer_init(dev, vbox_fb, mode_cmd, obj); + if (ret) { + drm_gem_object_unreference_unlocked(obj); + kfree(vbox_fb); + return ERR_PTR(ret); + } + + return &vbox_fb->base; +} + +static const struct drm_mode_config_funcs vbox_mode_funcs = { + .fb_create = vbox_user_framebuffer_create, +}; + +static void vbox_accel_fini(struct vbox_private *vbox) +{ + if (vbox->vbva_info) { + vbox_disable_accel(vbox); + kfree(vbox->vbva_info); + vbox->vbva_info = NULL; + } + if (vbox->vbva_buffers) { + pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers); + vbox->vbva_buffers = NULL; + } +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0) && !defined(RHEL_73) +#define pci_iomap_range(dev, bar, offset, maxlen) \ + ioremap(pci_resource_start(dev, bar) + (offset), maxlen) +#endif + +static int vbox_accel_init(struct vbox_private *vbox) +{ + unsigned int i; + + vbox->vbva_info = kcalloc(vbox->num_crtcs, sizeof(*vbox->vbva_info), + GFP_KERNEL); + if (!vbox->vbva_info) + return -ENOMEM; + + /* Take a command buffer for each screen from the end of usable VRAM. */ + vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE; + + vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0, + vbox->available_vram_size, + vbox->num_crtcs * + VBVA_MIN_BUFFER_SIZE); + if (!vbox->vbva_buffers) + return -ENOMEM; + + for (i = 0; i < vbox->num_crtcs; ++i) + VBoxVBVASetupBufferContext(&vbox->vbva_info[i], + vbox->available_vram_size + + i * VBVA_MIN_BUFFER_SIZE, + VBVA_MIN_BUFFER_SIZE); + + return 0; +} + +/** Do we support the 4.3 plus mode hint reporting interface? */ +static bool have_hgsmi_mode_hints(struct vbox_private *vbox) +{ + u32 have_hints, have_cursor; + int ret; + + ret = hgsmi_query_conf(vbox->guest_pool, + VBOX_VBVA_CONF32_MODE_HINT_REPORTING, + &have_hints); + if (RT_FAILURE(ret)) + return false; + + ret = hgsmi_query_conf(vbox->guest_pool, + VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING, + &have_cursor); + if (RT_FAILURE(ret)) + return false; + + return have_hints == VINF_SUCCESS && have_cursor == VINF_SUCCESS; +} + +/** + * Set up our heaps and data exchange buffers in VRAM before handing the rest + * to the memory manager. + */ +static int vbox_hw_init(struct vbox_private *vbox) +{ + int ret; + + vbox->full_vram_size = VBoxVideoGetVRAMSize(); + vbox->any_pitch = VBoxVideoAnyWidthAllowed(); + + DRM_INFO("VRAM %08x\n", vbox->full_vram_size); + + /* Map guest-heap at end of vram */ + vbox->guest_heap = + pci_iomap_range(vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox), + GUEST_HEAP_SIZE); + if (!vbox->guest_heap) + return -ENOMEM; + + /* Create guest-heap mem-pool use 2^4 = 16 byte chunks */ + vbox->guest_pool = gen_pool_create(4, -1); + if (!vbox->guest_pool) + return -ENOMEM; + + ret = gen_pool_add_virt(vbox->guest_pool, + (unsigned long)vbox->guest_heap, + GUEST_HEAP_OFFSET(vbox), + GUEST_HEAP_USABLE_SIZE, -1); + if (ret) + return ret; + + /* Reduce available VRAM size to reflect the guest heap. */ + vbox->available_vram_size = GUEST_HEAP_OFFSET(vbox); + /* Linux drm represents monitors as a 32-bit array. */ + vbox->num_crtcs = min_t(u32, VBoxHGSMIGetMonitorCount(vbox->guest_pool), + VBOX_MAX_SCREENS); + + if (!have_hgsmi_mode_hints(vbox)) + return -ENOTSUPP; + + vbox->last_mode_hints = + kcalloc(vbox->num_crtcs, sizeof(struct vbva_modehint), GFP_KERNEL); + if (!vbox->last_mode_hints) + return -ENOMEM; + + return vbox_accel_init(vbox); +} + +static void vbox_hw_fini(struct vbox_private *vbox) +{ + vbox_accel_fini(vbox); + kfree(vbox->last_mode_hints); + vbox->last_mode_hints = NULL; +} + +int vbox_driver_load(struct drm_device *dev, unsigned long flags) +{ + struct vbox_private *vbox; + int ret = 0; + + if (!VBoxHGSMIIsSupported()) + return -ENODEV; + + vbox = kzalloc(sizeof(*vbox), GFP_KERNEL); + if (!vbox) + return -ENOMEM; + + dev->dev_private = vbox; + vbox->dev = dev; + + mutex_init(&vbox->hw_mutex); + + ret = vbox_hw_init(vbox); + if (ret) + goto out_free; + + ret = vbox_mm_init(vbox); + if (ret) + goto out_free; + + drm_mode_config_init(dev); + + dev->mode_config.funcs = (void *)&vbox_mode_funcs; + dev->mode_config.min_width = 64; + dev->mode_config.min_height = 64; + dev->mode_config.preferred_depth = 24; + dev->mode_config.max_width = VBE_DISPI_MAX_XRES; + dev->mode_config.max_height = VBE_DISPI_MAX_YRES; + + ret = vbox_mode_init(dev); + if (ret) + goto out_free; + + ret = vbox_irq_init(vbox); + if (ret) + goto out_free; + + ret = vbox_fbdev_init(dev); + if (ret) + goto out_free; + + return 0; + +out_free: + vbox_driver_unload(dev); + return ret; +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +void vbox_driver_unload(struct drm_device *dev) +#else +int vbox_driver_unload(struct drm_device *dev) +#endif +{ + struct vbox_private *vbox = dev->dev_private; + + vbox_fbdev_fini(dev); + vbox_irq_fini(vbox); + vbox_mode_fini(dev); + if (dev->mode_config.funcs) + drm_mode_config_cleanup(dev); + + vbox_hw_fini(vbox); + vbox_mm_fini(vbox); + if (vbox->guest_pool) + gen_pool_destroy(vbox->guest_pool); + if (vbox->guest_heap) + pci_iounmap(dev->pdev, vbox->guest_heap); + kfree(vbox); + dev->dev_private = NULL; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + return 0; +#endif +} + +/** + * @note this is described in the DRM framework documentation. AST does not + * have it, but we get an oops on driver unload if it is not present. + */ +void vbox_driver_lastclose(struct drm_device *dev) +{ + struct vbox_private *vbox = dev->dev_private; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) || defined(RHEL_73) + if (vbox->fbdev) + drm_fb_helper_restore_fbdev_mode_unlocked(&vbox->fbdev->helper); +#else + drm_modeset_lock_all(dev); + if (vbox->fbdev) + drm_fb_helper_restore_fbdev_mode(&vbox->fbdev->helper); + drm_modeset_unlock_all(dev); +#endif +} + +int vbox_gem_create(struct drm_device *dev, + u32 size, bool iskernel, struct drm_gem_object **obj) +{ + struct vbox_bo *vboxbo; + int ret; + + *obj = NULL; + + size = roundup(size, PAGE_SIZE); + if (size == 0) + return -EINVAL; + + ret = vbox_bo_create(dev, size, 0, 0, &vboxbo); + if (ret) { + if (ret != -ERESTARTSYS) + DRM_ERROR("failed to allocate GEM object\n"); + return ret; + } + + *obj = &vboxbo->gem; + + return 0; +} + +int vbox_dumb_create(struct drm_file *file, + struct drm_device *dev, struct drm_mode_create_dumb *args) +{ + int ret; + struct drm_gem_object *gobj; + u32 handle; + + args->pitch = args->width * ((args->bpp + 7) / 8); + args->size = args->pitch * args->height; + + ret = vbox_gem_create(dev, args->size, false, &gobj); + if (ret) + return ret; + + ret = drm_gem_handle_create(file, gobj, &handle); + drm_gem_object_unreference_unlocked(gobj); + if (ret) + return ret; + + args->handle = handle; + + return 0; +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) && !defined(RHEL_73) +int vbox_dumb_destroy(struct drm_file *file, + struct drm_device *dev, u32 handle) +{ + return drm_gem_handle_delete(file, handle); +} +#endif + +static void vbox_bo_unref(struct vbox_bo **bo) +{ + struct ttm_buffer_object *tbo; + + if ((*bo) == NULL) + return; + + tbo = &((*bo)->bo); + ttm_bo_unref(&tbo); + if (!tbo) + *bo = NULL; +} + +void vbox_gem_free_object(struct drm_gem_object *obj) +{ + struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj); + + vbox_bo_unref(&vbox_bo); +} + +static inline u64 vbox_bo_mmap_offset(struct vbox_bo *bo) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) && !defined(RHEL_73) + return bo->bo.addr_space_offset; +#else + return drm_vma_node_offset_addr(&bo->bo.vma_node); +#endif +} + +int +vbox_dumb_mmap_offset(struct drm_file *file, + struct drm_device *dev, + u32 handle, u64 *offset) +{ + struct drm_gem_object *obj; + int ret; + struct vbox_bo *bo; + + mutex_lock(&dev->struct_mutex); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) || defined(RHEL_74) + obj = drm_gem_object_lookup(file, handle); +#else + obj = drm_gem_object_lookup(dev, file, handle); +#endif + if (!obj) { + ret = -ENOENT; + goto out_unlock; + } + + bo = gem_to_vbox_bo(obj); + *offset = vbox_bo_mmap_offset(bo); + + drm_gem_object_unreference(obj); + ret = 0; + +out_unlock: + mutex_unlock(&dev->struct_mutex); + return ret; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_mode.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_mode.c @@ -0,0 +1,911 @@ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_mode.c + * Copyright 2012 Red Hat Inc. + * Parts based on xf86-video-ast + * Copyright (c) 2005 ASPEED Technology Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + */ +/* + * Authors: Dave Airlie + * Michael Thayer + */ +#include "vbox_drv.h" +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) +#include +#endif + +#include "vboxvideo.h" +#include "hgsmi_channels.h" + +static int vbox_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv, + u32 handle, u32 width, u32 height, + s32 hot_x, s32 hot_y); +static int vbox_cursor_move(struct drm_crtc *crtc, int x, int y); + +/** + * Set a graphics mode. Poke any required values into registers, do an HGSMI + * mode set and tell the host we support advanced graphics functions. + */ +static void vbox_do_modeset(struct drm_crtc *crtc, + const struct drm_display_mode *mode) +{ + struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc); + struct vbox_private *vbox; + int width, height, bpp, pitch; + unsigned int crtc_id; + u16 flags; + s32 x_offset, y_offset; + + vbox = crtc->dev->dev_private; + width = mode->hdisplay ? mode->hdisplay : 640; + height = mode->vdisplay ? mode->vdisplay : 480; + crtc_id = vbox_crtc->crtc_id; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + bpp = crtc->enabled ? CRTC_FB(crtc)->format->cpp[0] * 8 : 32; + pitch = crtc->enabled ? CRTC_FB(crtc)->pitches[0] : width * bpp / 8; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) + bpp = crtc->enabled ? CRTC_FB(crtc)->bits_per_pixel : 32; + pitch = crtc->enabled ? CRTC_FB(crtc)->pitches[0] : width * bpp / 8; +#else + bpp = crtc->enabled ? CRTC_FB(crtc)->bits_per_pixel : 32; + pitch = crtc->enabled ? CRTC_FB(crtc)->pitch : width * bpp / 8; +#endif + x_offset = vbox->single_framebuffer ? crtc->x : vbox_crtc->x_hint; + y_offset = vbox->single_framebuffer ? crtc->y : vbox_crtc->y_hint; + + /* + * This is the old way of setting graphics modes. It assumed one screen + * and a frame-buffer at the start of video RAM. On older versions of + * VirtualBox, certain parts of the code still assume that the first + * screen is programmed this way, so try to fake it. + */ + if (vbox_crtc->crtc_id == 0 && crtc->enabled && + vbox_crtc->fb_offset / pitch < 0xffff - crtc->y && + vbox_crtc->fb_offset % (bpp / 8) == 0) + VBoxVideoSetModeRegisters( + width, height, pitch * 8 / bpp, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + CRTC_FB(crtc)->format->cpp[0] * 8, +#else + CRTC_FB(crtc)->bits_per_pixel, +#endif + 0, + vbox_crtc->fb_offset % pitch / bpp * 8 + crtc->x, + vbox_crtc->fb_offset / pitch + crtc->y); + + flags = VBVA_SCREEN_F_ACTIVE; + flags |= (crtc->enabled && !vbox_crtc->blanked) ? + 0 : VBVA_SCREEN_F_BLANK; + flags |= vbox_crtc->disconnected ? VBVA_SCREEN_F_DISABLED : 0; + hgsmi_process_display_info(vbox->guest_pool, vbox_crtc->crtc_id, + x_offset, y_offset, + crtc->x * bpp / 8 + crtc->y * pitch, + pitch, width, height, + vbox_crtc->blanked ? 0 : bpp, flags); +} + +static int vbox_set_view(struct drm_crtc *crtc) +{ + struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc); + struct vbox_private *vbox = crtc->dev->dev_private; + void *p; + + /* + * Tell the host about the view. This design originally targeted the + * Windows XP driver architecture and assumed that each screen would + * have a dedicated frame buffer with the command buffer following it, + * the whole being a "view". The host works out which screen a command + * buffer belongs to by checking whether it is in the first view, then + * whether it is in the second and so on. The first match wins. We + * cheat around this by making the first view be the managed memory + * plus the first command buffer, the second the same plus the second + * buffer and so on. + */ + p = hgsmi_buffer_alloc(vbox->guest_pool, sizeof(VBVAINFOVIEW), + HGSMI_CH_VBVA, VBVA_INFO_VIEW); + if (p) { + VBVAINFOVIEW *pInfo = (VBVAINFOVIEW *) p; + + pInfo->view_index = vbox_crtc->crtc_id; + pInfo->u32ViewOffset = vbox_crtc->fb_offset; + pInfo->u32ViewSize = + vbox->available_vram_size - vbox_crtc->fb_offset + + vbox_crtc->crtc_id * VBVA_MIN_BUFFER_SIZE; + pInfo->u32MaxScreenSize = + vbox->available_vram_size - vbox_crtc->fb_offset; + hgsmi_buffer_submit(vbox->guest_pool, p); + hgsmi_buffer_free(vbox->guest_pool, p); + } else { + return -ENOMEM; + } + + return 0; +} + +static void vbox_crtc_dpms(struct drm_crtc *crtc, int mode) +{ + struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc); + struct vbox_private *vbox = crtc->dev->dev_private; + + switch (mode) { + case DRM_MODE_DPMS_ON: + vbox_crtc->blanked = false; + break; + case DRM_MODE_DPMS_STANDBY: + case DRM_MODE_DPMS_SUSPEND: + case DRM_MODE_DPMS_OFF: + vbox_crtc->blanked = true; + break; + } + + mutex_lock(&vbox->hw_mutex); + vbox_do_modeset(crtc, &crtc->hwmode); + mutex_unlock(&vbox->hw_mutex); +} + +static bool vbox_crtc_mode_fixup(struct drm_crtc *crtc, + const struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + return true; +} + +/* + * Try to map the layout of virtual screens to the range of the input device. + * Return true if we need to re-set the crtc modes due to screen offset + * changes. + */ +static bool vbox_set_up_input_mapping(struct vbox_private *vbox) +{ + struct drm_crtc *crtci; + struct drm_connector *connectori; + struct drm_framebuffer *fb1 = NULL; + bool single_framebuffer = true; + bool old_single_framebuffer = vbox->single_framebuffer; + u16 width = 0, height = 0; + + /* + * Are we using an X.Org-style single large frame-buffer for all crtcs? + * If so then screen layout can be deduced from the crtc offsets. + * Same fall-back if this is the fbdev frame-buffer. + */ + list_for_each_entry(crtci, &vbox->dev->mode_config.crtc_list, head) { + if (!fb1) { + fb1 = CRTC_FB(crtci); + if (to_vbox_framebuffer(fb1) == &vbox->fbdev->afb) + break; + } else if (CRTC_FB(crtci) && fb1 != CRTC_FB(crtci)) { + single_framebuffer = false; + } + } + if (single_framebuffer) { + list_for_each_entry(crtci, &vbox->dev->mode_config.crtc_list, + head) { + if (to_vbox_crtc(crtci)->crtc_id == 0) { + vbox->single_framebuffer = true; + vbox->input_mapping_width = + CRTC_FB(crtci)->width; + vbox->input_mapping_height = + CRTC_FB(crtci)->height; + return old_single_framebuffer != + vbox->single_framebuffer; + } + } + } + /* Otherwise calculate the total span of all screens. */ + list_for_each_entry(connectori, &vbox->dev->mode_config.connector_list, + head) { + struct vbox_connector *vbox_connector = + to_vbox_connector(connectori); + struct vbox_crtc *vbox_crtc = vbox_connector->vbox_crtc; + + width = max_t(u16, width, vbox_crtc->x_hint + + vbox_connector->mode_hint.width); + height = max_t(u16, height, vbox_crtc->y_hint + + vbox_connector->mode_hint.height); + } + + vbox->single_framebuffer = false; + vbox->input_mapping_width = width; + vbox->input_mapping_height = height; + + return old_single_framebuffer != vbox->single_framebuffer; +} + +static int vbox_crtc_do_set_base(struct drm_crtc *crtc, + struct drm_framebuffer *old_fb, int x, int y) +{ + struct vbox_private *vbox = crtc->dev->dev_private; + struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc); + struct drm_gem_object *obj; + struct vbox_framebuffer *vbox_fb; + struct vbox_bo *bo; + int ret; + u64 gpu_addr; + + /* Unpin the previous fb. */ + if (old_fb) { + vbox_fb = to_vbox_framebuffer(old_fb); + obj = vbox_fb->obj; + bo = gem_to_vbox_bo(obj); + ret = vbox_bo_reserve(bo, false); + if (ret) + return ret; + + vbox_bo_unpin(bo); + vbox_bo_unreserve(bo); + } + + vbox_fb = to_vbox_framebuffer(CRTC_FB(crtc)); + obj = vbox_fb->obj; + bo = gem_to_vbox_bo(obj); + + ret = vbox_bo_reserve(bo, false); + if (ret) + return ret; + + ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr); + vbox_bo_unreserve(bo); + if (ret) + return ret; + + vbox_crtc->fb_offset = gpu_addr; + if (vbox_set_up_input_mapping(vbox)) { + struct drm_crtc *crtci; + + list_for_each_entry(crtci, &vbox->dev->mode_config.crtc_list, + head) { + vbox_set_view(crtc); + vbox_do_modeset(crtci, &crtci->mode); + } + } + + return 0; +} + +static int vbox_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, + struct drm_framebuffer *old_fb) +{ + return vbox_crtc_do_set_base(crtc, old_fb, x, y); +} + +static int vbox_crtc_mode_set(struct drm_crtc *crtc, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode, + int x, int y, struct drm_framebuffer *old_fb) +{ + struct vbox_private *vbox = crtc->dev->dev_private; + int rc = 0; + + vbox_crtc_mode_set_base(crtc, x, y, old_fb); + + mutex_lock(&vbox->hw_mutex); + rc = vbox_set_view(crtc); + if (!rc) + vbox_do_modeset(crtc, mode); + hgsmi_update_input_mapping(vbox->guest_pool, 0, 0, + vbox->input_mapping_width, + vbox->input_mapping_height); + mutex_unlock(&vbox->hw_mutex); + + return rc; +} + +static void vbox_crtc_disable(struct drm_crtc *crtc) +{ +} + +static void vbox_crtc_prepare(struct drm_crtc *crtc) +{ +} + +static void vbox_crtc_commit(struct drm_crtc *crtc) +{ +} + +static const struct drm_crtc_helper_funcs vbox_crtc_helper_funcs = { + .dpms = vbox_crtc_dpms, + .mode_fixup = vbox_crtc_mode_fixup, + .mode_set = vbox_crtc_mode_set, + /* .mode_set_base = vbox_crtc_mode_set_base, */ + .disable = vbox_crtc_disable, + .prepare = vbox_crtc_prepare, + .commit = vbox_crtc_commit, +}; + +static void vbox_crtc_reset(struct drm_crtc *crtc) +{ +} + +static void vbox_crtc_destroy(struct drm_crtc *crtc) +{ + drm_crtc_cleanup(crtc); + kfree(crtc); +} + +static const struct drm_crtc_funcs vbox_crtc_funcs = { + .cursor_move = vbox_cursor_move, + .cursor_set2 = vbox_cursor_set2, + .reset = vbox_crtc_reset, + .set_config = drm_crtc_helper_set_config, + /* .gamma_set = vbox_crtc_gamma_set, */ + .destroy = vbox_crtc_destroy, +}; + +static struct vbox_crtc *vbox_crtc_init(struct drm_device *dev, unsigned int i) +{ + struct vbox_crtc *vbox_crtc; + + vbox_crtc = kzalloc(sizeof(*vbox_crtc), GFP_KERNEL); + if (!vbox_crtc) + return NULL; + + vbox_crtc->crtc_id = i; + + drm_crtc_init(dev, &vbox_crtc->base, &vbox_crtc_funcs); + drm_mode_crtc_set_gamma_size(&vbox_crtc->base, 256); + drm_crtc_helper_add(&vbox_crtc->base, &vbox_crtc_helper_funcs); + + return vbox_crtc; +} + +static void vbox_encoder_destroy(struct drm_encoder *encoder) +{ + drm_encoder_cleanup(encoder); + kfree(encoder); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) && !defined(RHEL_73) +static struct drm_encoder *drm_encoder_find(struct drm_device *dev, u32 id) +{ + struct drm_mode_object *mo; + + mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER); + return mo ? obj_to_encoder(mo) : NULL; +} +#endif + +static struct drm_encoder *vbox_best_single_encoder(struct drm_connector + *connector) +{ + int enc_id = connector->encoder_ids[0]; + + /* pick the encoder ids */ + if (enc_id) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + return drm_encoder_find(connector->dev, NULL, enc_id); +#else + return drm_encoder_find(connector->dev, enc_id); +#endif + + return NULL; +} + +static const struct drm_encoder_funcs vbox_enc_funcs = { + .destroy = vbox_encoder_destroy, +}; + +static void vbox_encoder_dpms(struct drm_encoder *encoder, int mode) +{ +} + +static bool vbox_mode_fixup(struct drm_encoder *encoder, + const struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + return true; +} + +static void vbox_encoder_mode_set(struct drm_encoder *encoder, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ +} + +static void vbox_encoder_prepare(struct drm_encoder *encoder) +{ +} + +static void vbox_encoder_commit(struct drm_encoder *encoder) +{ +} + +static const struct drm_encoder_helper_funcs vbox_enc_helper_funcs = { + .dpms = vbox_encoder_dpms, + .mode_fixup = vbox_mode_fixup, + .prepare = vbox_encoder_prepare, + .commit = vbox_encoder_commit, + .mode_set = vbox_encoder_mode_set, +}; + +static struct drm_encoder *vbox_encoder_init(struct drm_device *dev, + unsigned int i) +{ + struct vbox_encoder *vbox_encoder; + + vbox_encoder = kzalloc(sizeof(*vbox_encoder), GFP_KERNEL); + if (!vbox_encoder) + return NULL; + + drm_encoder_init(dev, &vbox_encoder->base, &vbox_enc_funcs, + DRM_MODE_ENCODER_DAC +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) || defined(RHEL_73) + , NULL +#endif + ); + drm_encoder_helper_add(&vbox_encoder->base, &vbox_enc_helper_funcs); + + vbox_encoder->base.possible_crtcs = 1 << i; + return &vbox_encoder->base; +} + +/** + * Generate EDID data with a mode-unique serial number for the virtual + * monitor to try to persuade Unity that different modes correspond to + * different monitors and it should not try to force the same resolution on + * them. + */ +static void vbox_set_edid(struct drm_connector *connector, int width, + int height) +{ + enum { EDID_SIZE = 128 }; + unsigned char edid[EDID_SIZE] = { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* header */ + 0x58, 0x58, /* manufacturer (VBX) */ + 0x00, 0x00, /* product code */ + 0x00, 0x00, 0x00, 0x00, /* serial number goes here */ + 0x01, /* week of manufacture */ + 0x00, /* year of manufacture */ + 0x01, 0x03, /* EDID version */ + 0x80, /* capabilities - digital */ + 0x00, /* horiz. res in cm, zero for projectors */ + 0x00, /* vert. res in cm */ + 0x78, /* display gamma (120 == 2.2). */ + 0xEE, /* features (standby, suspend, off, RGB, std */ + /* colour space, preferred timing mode) */ + 0xEE, 0x91, 0xA3, 0x54, 0x4C, 0x99, 0x26, 0x0F, 0x50, 0x54, + /* chromaticity for standard colour space. */ + 0x00, 0x00, 0x00, /* no default timings */ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, /* no standard timings */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x02, 0x02, + 0x02, 0x02, + /* descriptor block 1 goes below */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* descriptor block 2, monitor ranges */ + 0x00, 0x00, 0x00, 0xFD, 0x00, + 0x00, 0xC8, 0x00, 0xC8, 0x64, 0x00, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, + /* 0-200Hz vertical, 0-200KHz horizontal, 1000MHz pixel clock */ + 0x20, + /* descriptor block 3, monitor name */ + 0x00, 0x00, 0x00, 0xFC, 0x00, + 'V', 'B', 'O', 'X', ' ', 'm', 'o', 'n', 'i', 't', 'o', 'r', + '\n', + /* descriptor block 4: dummy data */ + 0x00, 0x00, 0x00, 0x10, 0x00, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, + 0x00, /* number of extensions */ + 0x00 /* checksum goes here */ + }; + int clock = (width + 6) * (height + 6) * 60 / 10000; + unsigned int i, sum = 0; + + edid[12] = width & 0xff; + edid[13] = width >> 8; + edid[14] = height & 0xff; + edid[15] = height >> 8; + edid[54] = clock & 0xff; + edid[55] = clock >> 8; + edid[56] = width & 0xff; + edid[58] = (width >> 4) & 0xf0; + edid[59] = height & 0xff; + edid[61] = (height >> 4) & 0xf0; + for (i = 0; i < EDID_SIZE - 1; ++i) + sum += edid[i]; + edid[EDID_SIZE - 1] = (0x100 - (sum & 0xFF)) & 0xFF; + drm_mode_connector_update_edid_property(connector, (struct edid *)edid); +} + +static int vbox_get_modes(struct drm_connector *connector) +{ + struct vbox_connector *vbox_connector = NULL; + struct drm_display_mode *mode = NULL; + struct vbox_private *vbox = NULL; + unsigned int num_modes = 0; + int preferred_width, preferred_height; + + vbox_connector = to_vbox_connector(connector); + vbox = connector->dev->dev_private; + /* + * Heuristic: we do not want to tell the host that we support dynamic + * resizing unless we feel confident that the user space client using + * the video driver can handle hot-plug events. So the first time modes + * are queried after a "master" switch we tell the host that we do not, + * and immediately after we send the client a hot-plug notification as + * a test to see if they will respond and query again. + * That is also the reason why capabilities are reported to the host at + * this place in the code rather than elsewhere. + * We need to report the flags location before reporting the IRQ + * capability. + */ + hgsmi_report_flags_location(vbox->guest_pool, GUEST_HEAP_OFFSET(vbox) + + HOST_FLAGS_OFFSET); + if (vbox_connector->vbox_crtc->crtc_id == 0) + vbox_report_caps(vbox); + if (!vbox->initial_mode_queried) { + if (vbox_connector->vbox_crtc->crtc_id == 0) { + vbox->initial_mode_queried = true; + vbox_report_hotplug(vbox); + } + return drm_add_modes_noedid(connector, 800, 600); + } + num_modes = drm_add_modes_noedid(connector, 2560, 1600); + preferred_width = vbox_connector->mode_hint.width ? + vbox_connector->mode_hint.width : 1024; + preferred_height = vbox_connector->mode_hint.height ? + vbox_connector->mode_hint.height : 768; + mode = drm_cvt_mode(connector->dev, preferred_width, preferred_height, + 60, false, false, false); + if (mode) { + mode->type |= DRM_MODE_TYPE_PREFERRED; + drm_mode_probed_add(connector, mode); + ++num_modes; + } + vbox_set_edid(connector, preferred_width, preferred_height); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) || defined(RHEL_73) + if (vbox_connector->vbox_crtc->x_hint != -1) + drm_object_property_set_value(&connector->base, + vbox->dev->mode_config.suggested_x_property, + vbox_connector->vbox_crtc->x_hint); + else + drm_object_property_set_value(&connector->base, + vbox->dev->mode_config.suggested_x_property, 0); + + if (vbox_connector->vbox_crtc->y_hint != -1) + drm_object_property_set_value(&connector->base, + vbox->dev->mode_config.suggested_y_property, + vbox_connector->vbox_crtc->y_hint); + else + drm_object_property_set_value(&connector->base, + vbox->dev->mode_config.suggested_y_property, 0); +#endif + + return num_modes; +} + +static int vbox_mode_valid(struct drm_connector *connector, + struct drm_display_mode *mode) +{ + return MODE_OK; +} + +static void vbox_connector_destroy(struct drm_connector *connector) +{ + struct vbox_connector *vbox_connector = NULL; + + vbox_connector = to_vbox_connector(connector); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) && !defined(RHEL_73) + drm_sysfs_connector_remove(connector); +#else + drm_connector_unregister(connector); +#endif + drm_connector_cleanup(connector); + kfree(connector); +} + +static enum drm_connector_status +vbox_connector_detect(struct drm_connector *connector, bool force) +{ + struct vbox_connector *vbox_connector = NULL; + + (void)force; + vbox_connector = to_vbox_connector(connector); + + return vbox_connector->mode_hint.disconnected ? + connector_status_disconnected : connector_status_connected; +} + +static int vbox_fill_modes(struct drm_connector *connector, u32 max_x, + u32 max_y) +{ + struct vbox_connector *vbox_connector; + struct drm_device *dev; + struct drm_display_mode *mode, *iterator; + + vbox_connector = to_vbox_connector(connector); + dev = vbox_connector->base.dev; + list_for_each_entry_safe(mode, iterator, &connector->modes, head) { + list_del(&mode->head); + drm_mode_destroy(dev, mode); + } + + return drm_helper_probe_single_connector_modes(connector, max_x, max_y); +} + +static const struct drm_connector_helper_funcs vbox_connector_helper_funcs = { + .mode_valid = vbox_mode_valid, + .get_modes = vbox_get_modes, + .best_encoder = vbox_best_single_encoder, +}; + +static const struct drm_connector_funcs vbox_connector_funcs = { + .dpms = drm_helper_connector_dpms, + .detect = vbox_connector_detect, + .fill_modes = vbox_fill_modes, + .destroy = vbox_connector_destroy, +}; + +static int vbox_connector_init(struct drm_device *dev, + struct vbox_crtc *vbox_crtc, + struct drm_encoder *encoder) +{ + struct vbox_connector *vbox_connector; + struct drm_connector *connector; + + vbox_connector = kzalloc(sizeof(*vbox_connector), GFP_KERNEL); + if (!vbox_connector) + return -ENOMEM; + + connector = &vbox_connector->base; + vbox_connector->vbox_crtc = vbox_crtc; + + drm_connector_init(dev, connector, &vbox_connector_funcs, + DRM_MODE_CONNECTOR_VGA); + drm_connector_helper_add(connector, &vbox_connector_helper_funcs); + + connector->interlace_allowed = 0; + connector->doublescan_allowed = 0; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) || defined(RHEL_73) + drm_mode_create_suggested_offset_properties(dev); + drm_object_attach_property(&connector->base, + dev->mode_config.suggested_x_property, 0); + drm_object_attach_property(&connector->base, + dev->mode_config.suggested_y_property, 0); +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) && !defined(RHEL_73) + drm_sysfs_connector_add(connector); +#else + drm_connector_register(connector); +#endif + + drm_mode_connector_attach_encoder(connector, encoder); + + return 0; +} + +int vbox_mode_init(struct drm_device *dev) +{ + struct vbox_private *vbox = dev->dev_private; + struct drm_encoder *encoder; + struct vbox_crtc *vbox_crtc; + unsigned int i; + + /* vbox_cursor_init(dev); */ + for (i = 0; i < vbox->num_crtcs; ++i) { + vbox_crtc = vbox_crtc_init(dev, i); + if (!vbox_crtc) + return -ENOMEM; + encoder = vbox_encoder_init(dev, i); + if (!encoder) + return -ENOMEM; + vbox_connector_init(dev, vbox_crtc, encoder); + } + + return 0; +} + +void vbox_mode_fini(struct drm_device *dev) +{ + /* vbox_cursor_fini(dev); */ +} + +/** + * Copy the ARGB image and generate the mask, which is needed in case the host + * does not support ARGB cursors. The mask is a 1BPP bitmap with the bit set + * if the corresponding alpha value in the ARGB image is greater than 0xF0. + */ +static void copy_cursor_image(u8 *src, u8 *dst, u32 width, u32 height, + size_t mask_size) +{ + size_t line_size = (width + 7) / 8; + u32 i, j; + + memcpy(dst + mask_size, src, width * height * 4); + for (i = 0; i < height; ++i) + for (j = 0; j < width; ++j) + if (((u32 *)src)[i * width + j] > 0xf0000000) + dst[i * line_size + j / 8] |= (0x80 >> (j % 8)); +} + +static int vbox_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv, + u32 handle, u32 width, u32 height, + s32 hot_x, s32 hot_y) +{ + struct vbox_private *vbox = crtc->dev->dev_private; + struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc); + struct drm_gem_object *obj; + struct vbox_bo *bo; + int ret, rc; + struct ttm_bo_kmap_obj uobj_map; + u8 *src; + u8 *dst = NULL; + u32 caps = 0; + size_t data_size, mask_size; + bool src_isiomem; + + /* + * Re-set this regularly as in 5.0.20 and earlier the information was + * lost on save and restore. + */ + hgsmi_update_input_mapping(vbox->guest_pool, 0, 0, + vbox->input_mapping_width, + vbox->input_mapping_height); + if (!handle) { + bool cursor_enabled = false; + struct drm_crtc *crtci; + + /* Hide cursor. */ + vbox_crtc->cursor_enabled = false; + list_for_each_entry(crtci, &vbox->dev->mode_config.crtc_list, + head) + if (to_vbox_crtc(crtci)->cursor_enabled) + cursor_enabled = true; + + if (!cursor_enabled) + hgsmi_update_pointer_shape(vbox->guest_pool, 0, 0, 0, + 0, 0, NULL, 0); + return 0; + } + vbox_crtc->cursor_enabled = true; + if (width > VBOX_MAX_CURSOR_WIDTH || height > VBOX_MAX_CURSOR_HEIGHT || + width == 0 || height == 0) + return -EINVAL; + rc = hgsmi_query_conf(vbox->guest_pool, + VBOX_VBVA_CONF32_CURSOR_CAPABILITIES, &caps); + ret = rc == VINF_SUCCESS ? 0 : rc == VERR_NO_MEMORY ? -ENOMEM : -EINVAL; + if (ret) + return ret; + + if (!(caps & VBOX_VBVA_CURSOR_CAPABILITY_HARDWARE)) + /* + * -EINVAL means cursor_set2() not supported, -EAGAIN means + * retry at once. + */ + return -EBUSY; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) || defined(RHEL_74) + obj = drm_gem_object_lookup(file_priv, handle); +#else + obj = drm_gem_object_lookup(crtc->dev, file_priv, handle); +#endif + if (obj) { + bo = gem_to_vbox_bo(obj); + ret = vbox_bo_reserve(bo, false); + if (!ret) { + /* + * The mask must be calculated based on the alpha + * channel, one bit per ARGB word, and must be 32-bit + * padded. + */ + mask_size = ((width + 7) / 8 * height + 3) & ~3; + data_size = width * height * 4 + mask_size; + vbox->cursor_hot_x = min_t(u32, max(hot_x, 0), width); + vbox->cursor_hot_y = min_t(u32, max(hot_y, 0), height); + vbox->cursor_width = width; + vbox->cursor_height = height; + vbox->cursor_data_size = data_size; + dst = vbox->cursor_data; + ret = + ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, + &uobj_map); + if (!ret) { + src = + ttm_kmap_obj_virtual(&uobj_map, + &src_isiomem); + if (!src_isiomem) { + u32 flags = + VBOX_MOUSE_POINTER_VISIBLE | + VBOX_MOUSE_POINTER_SHAPE | + VBOX_MOUSE_POINTER_ALPHA; + copy_cursor_image(src, dst, width, + height, mask_size); + rc = hgsmi_update_pointer_shape( + vbox->guest_pool, flags, + vbox->cursor_hot_x, + vbox->cursor_hot_y, + width, height, dst, data_size); + ret = + rc == VINF_SUCCESS ? 0 : rc == + VERR_NO_MEMORY ? -ENOMEM : rc == + VERR_NOT_SUPPORTED ? -EBUSY : + -EINVAL; + } else { + DRM_ERROR("src cursor bo should be in main memory\n"); + } + ttm_bo_kunmap(&uobj_map); + } else { + vbox->cursor_data_size = 0; + } + vbox_bo_unreserve(bo); + } + drm_gem_object_unreference_unlocked(obj); + } else { + DRM_ERROR("Cannot find cursor object %x for crtc\n", handle); + ret = -ENOENT; + } + + return ret; +} + +static int vbox_cursor_move(struct drm_crtc *crtc, int x, int y) +{ + struct vbox_private *vbox = crtc->dev->dev_private; + u32 flags = VBOX_MOUSE_POINTER_VISIBLE | + VBOX_MOUSE_POINTER_SHAPE | VBOX_MOUSE_POINTER_ALPHA; + s32 crtc_x = + vbox->single_framebuffer ? crtc->x : to_vbox_crtc(crtc)->x_hint; + s32 crtc_y = + vbox->single_framebuffer ? crtc->y : to_vbox_crtc(crtc)->y_hint; + u32 host_x, host_y; + u32 hot_x = 0; + u32 hot_y = 0; + int rc; + + /* + * We compare these to unsigned later and don't + * need to handle negative. + */ + if (x + crtc_x < 0 || y + crtc_y < 0 || vbox->cursor_data_size == 0) + return 0; + + rc = hgsmi_cursor_position(vbox->guest_pool, true, x + crtc_x, + y + crtc_y, &host_x, &host_y); + /* Work around a bug after save and restore in 5.0.20 and earlier. */ + if (RT_FAILURE(rc) || (host_x == 0 && host_y == 0)) + return rc == VINF_SUCCESS ? 0 + : rc == VERR_NO_MEMORY ? -ENOMEM : -EINVAL; + if (x + crtc_x < host_x) + hot_x = min(host_x - x - crtc_x, vbox->cursor_width); + if (y + crtc_y < host_y) + hot_y = min(host_y - y - crtc_y, vbox->cursor_height); + if (hot_x == vbox->cursor_hot_x && hot_y == vbox->cursor_hot_y) + return 0; + vbox->cursor_hot_x = hot_x; + vbox->cursor_hot_y = hot_y; + rc = hgsmi_update_pointer_shape(vbox->guest_pool, flags, hot_x, hot_y, + vbox->cursor_width, + vbox->cursor_height, vbox->cursor_data, + vbox->cursor_data_size); + return rc == VINF_SUCCESS ? 0 : rc == VERR_NO_MEMORY ? -ENOMEM : rc == + VERR_NOT_SUPPORTED ? -EBUSY : -EINVAL; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_prime.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_prime.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2017 Oracle Corporation + * This file is based on ????.c? + * Copyright 2017 Canonical + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: Andreas Pokorny + */ + +#include "vbox_drv.h" + +/* + * Based on qxl_prime.c: + * Empty Implementations as there should not be any other driver for a virtual + * device that might share buffers with vboxvideo + */ + +int vbox_gem_prime_pin(struct drm_gem_object *obj) +{ + WARN_ONCE(1, "not implemented"); + return -ENOSYS; +} + +void vbox_gem_prime_unpin(struct drm_gem_object *obj) +{ + WARN_ONCE(1, "not implemented"); +} + +struct sg_table *vbox_gem_prime_get_sg_table(struct drm_gem_object *obj) +{ + WARN_ONCE(1, "not implemented"); + return ERR_PTR(-ENOSYS); +} + +struct drm_gem_object *vbox_gem_prime_import_sg_table(struct drm_device *dev, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) && !defined(RHEL_73) + size_t size, +#else + struct dma_buf_attachment + *attach, +#endif + struct sg_table *table) +{ + WARN_ONCE(1, "not implemented"); + return ERR_PTR(-ENOSYS); +} + +void *vbox_gem_prime_vmap(struct drm_gem_object *obj) +{ + WARN_ONCE(1, "not implemented"); + return ERR_PTR(-ENOSYS); +} + +void vbox_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) +{ + WARN_ONCE(1, "not implemented"); +} + +int vbox_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *area) +{ + WARN_ONCE(1, "not implemented"); + return -ENOSYS; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbox_ttm.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbox_ttm.c @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2013-2017 Oracle Corporation + * This file is based on ast_ttm.c + * Copyright 2012 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * + * Authors: Dave Airlie + * Michael Thayer + */ +#include "vbox_drv.h" +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) && !defined(RHEL_73) +#define PLACEMENT_FLAGS(placement) (placement) +#else +#define PLACEMENT_FLAGS(placement) ((placement).flags) +#endif + +static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) +{ + return container_of(bd, struct vbox_private, ttm.bdev); +} + +static int vbox_ttm_mem_global_init(struct drm_global_reference *ref) +{ + return ttm_mem_global_init(ref->object); +} + +static void vbox_ttm_mem_global_release(struct drm_global_reference *ref) +{ + ttm_mem_global_release(ref->object); +} + +/** + * Adds the vbox memory manager object/structures to the global memory manager. + */ +static int vbox_ttm_global_init(struct vbox_private *vbox) +{ + struct drm_global_reference *global_ref; + int r; + + global_ref = &vbox->ttm.mem_global_ref; + global_ref->global_type = DRM_GLOBAL_TTM_MEM; + global_ref->size = sizeof(struct ttm_mem_global); + global_ref->init = &vbox_ttm_mem_global_init; + global_ref->release = &vbox_ttm_mem_global_release; + r = drm_global_item_ref(global_ref); + if (r != 0) { + DRM_ERROR("Failed setting up TTM memory accounting subsystem.\n"); + return r; + } + + vbox->ttm.bo_global_ref.mem_glob = vbox->ttm.mem_global_ref.object; + global_ref = &vbox->ttm.bo_global_ref.ref; + global_ref->global_type = DRM_GLOBAL_TTM_BO; + global_ref->size = sizeof(struct ttm_bo_global); + global_ref->init = &ttm_bo_global_init; + global_ref->release = &ttm_bo_global_release; + + r = drm_global_item_ref(global_ref); + if (r != 0) { + DRM_ERROR("Failed setting up TTM BO subsystem.\n"); + drm_global_item_unref(&vbox->ttm.mem_global_ref); + return r; + } + + return 0; +} + +/** + * Removes the vbox memory manager object from the global memory manager. + */ +static void vbox_ttm_global_release(struct vbox_private *vbox) +{ + if (!vbox->ttm.mem_global_ref.release) + return; + + drm_global_item_unref(&vbox->ttm.bo_global_ref.ref); + drm_global_item_unref(&vbox->ttm.mem_global_ref); + vbox->ttm.mem_global_ref.release = NULL; +} + +static void vbox_bo_ttm_destroy(struct ttm_buffer_object *tbo) +{ + struct vbox_bo *bo; + + bo = container_of(tbo, struct vbox_bo, bo); + + drm_gem_object_release(&bo->gem); + kfree(bo); +} + +static bool vbox_ttm_bo_is_vbox_bo(struct ttm_buffer_object *bo) +{ + if (bo->destroy == &vbox_bo_ttm_destroy) + return true; + + return false; +} + +static int +vbox_bo_init_mem_type(struct ttm_bo_device *bdev, u32 type, + struct ttm_mem_type_manager *man) +{ + switch (type) { + case TTM_PL_SYSTEM: + man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; + man->available_caching = TTM_PL_MASK_CACHING; + man->default_caching = TTM_PL_FLAG_CACHED; + break; + case TTM_PL_VRAM: + man->func = &ttm_bo_manager_func; + man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_MAPPABLE; + man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; + man->default_caching = TTM_PL_FLAG_WC; + break; + default: + DRM_ERROR("Unsupported memory type %u\n", (unsigned int)type); + return -EINVAL; + } + + return 0; +} + +static void +vbox_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl) +{ + struct vbox_bo *vboxbo = vbox_bo(bo); + + if (!vbox_ttm_bo_is_vbox_bo(bo)) + return; + + vbox_ttm_placement(vboxbo, TTM_PL_FLAG_SYSTEM); + *pl = vboxbo->placement; +} + +static int vbox_bo_verify_access(struct ttm_buffer_object *bo, + struct file *filp) +{ + return 0; +} + +static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev, + struct ttm_mem_reg *mem) +{ + struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; + struct vbox_private *vbox = vbox_bdev(bdev); + + mem->bus.addr = NULL; + mem->bus.offset = 0; + mem->bus.size = mem->num_pages << PAGE_SHIFT; + mem->bus.base = 0; + mem->bus.is_iomem = false; + if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE)) + return -EINVAL; + switch (mem->mem_type) { + case TTM_PL_SYSTEM: + /* system memory */ + return 0; + case TTM_PL_VRAM: + mem->bus.offset = mem->start << PAGE_SHIFT; + mem->bus.base = pci_resource_start(vbox->dev->pdev, 0); + mem->bus.is_iomem = true; + break; + default: + return -EINVAL; + } + return 0; +} + +static void vbox_ttm_io_mem_free(struct ttm_bo_device *bdev, + struct ttm_mem_reg *mem) +{ +} + +static int vbox_bo_move(struct ttm_buffer_object *bo, + bool evict, bool interruptible, + bool no_wait_gpu, struct ttm_mem_reg *new_mem) +{ + int r; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) && !defined(RHEL_74) + r = ttm_bo_move_memcpy(bo, evict, no_wait_gpu, new_mem); +#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) && !defined(RHEL_74) + r = ttm_bo_move_memcpy(bo, evict, interruptible, no_wait_gpu, new_mem); +#else + r = ttm_bo_move_memcpy(bo, interruptible, no_wait_gpu, new_mem); +#endif + return r; +} + +static void vbox_ttm_backend_destroy(struct ttm_tt *tt) +{ + ttm_tt_fini(tt); + kfree(tt); +} + +static struct ttm_backend_func vbox_tt_backend_func = { + .destroy = &vbox_ttm_backend_destroy, +}; + +static struct ttm_tt *vbox_ttm_tt_create(struct ttm_bo_device *bdev, + unsigned long size, + u32 page_flags, + struct page *dummy_read_page) +{ + struct ttm_tt *tt; + + tt = kzalloc(sizeof(*tt), GFP_KERNEL); + if (!tt) + return NULL; + + tt->func = &vbox_tt_backend_func; + if (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) { + kfree(tt); + return NULL; + } + + return tt; +} + +static int vbox_ttm_tt_populate(struct ttm_tt *ttm) +{ + return ttm_pool_populate(ttm); +} + +static void vbox_ttm_tt_unpopulate(struct ttm_tt *ttm) +{ + ttm_pool_unpopulate(ttm); +} + +struct ttm_bo_driver vbox_bo_driver = { + .ttm_tt_create = vbox_ttm_tt_create, + .ttm_tt_populate = vbox_ttm_tt_populate, + .ttm_tt_unpopulate = vbox_ttm_tt_unpopulate, + .init_mem_type = vbox_bo_init_mem_type, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || defined(RHEL_74) + .eviction_valuable = ttm_bo_eviction_valuable, +#endif + .evict_flags = vbox_bo_evict_flags, + .move = vbox_bo_move, + .verify_access = vbox_bo_verify_access, + .io_mem_reserve = &vbox_ttm_io_mem_reserve, + .io_mem_free = &vbox_ttm_io_mem_free, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + .io_mem_pfn = ttm_bo_default_io_mem_pfn, +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)) \ + || defined(RHEL_74) + .lru_tail = &ttm_bo_default_lru_tail, + .swap_lru_tail = &ttm_bo_default_swap_lru_tail, +#endif +}; + +int vbox_mm_init(struct vbox_private *vbox) +{ + int ret; + struct drm_device *dev = vbox->dev; + struct ttm_bo_device *bdev = &vbox->ttm.bdev; + + ret = vbox_ttm_global_init(vbox); + if (ret) + return ret; + + ret = ttm_bo_device_init(&vbox->ttm.bdev, + vbox->ttm.bo_global_ref.ref.object, + &vbox_bo_driver, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) || defined(RHEL_73) + dev->anon_inode->i_mapping, +#endif + DRM_FILE_PAGE_OFFSET, true); + if (ret) { + DRM_ERROR("Error initialising bo driver; %d\n", ret); + return ret; + } + + ret = ttm_bo_init_mm(bdev, TTM_PL_VRAM, + vbox->available_vram_size >> PAGE_SHIFT); + if (ret) { + DRM_ERROR("Failed ttm VRAM init: %d\n", ret); + return ret; + } +#ifdef DRM_MTRR_WC + vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), + pci_resource_len(dev->pdev, 0), + DRM_MTRR_WC); +#else + vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0), + pci_resource_len(dev->pdev, 0)); +#endif + + vbox->ttm.mm_initialised = true; + + return 0; +} + +void vbox_mm_fini(struct vbox_private *vbox) +{ +#ifdef DRM_MTRR_WC + struct drm_device *dev = vbox->dev; +#endif + if (!vbox->ttm.mm_initialised) + return; + ttm_bo_device_release(&vbox->ttm.bdev); + + vbox_ttm_global_release(vbox); + +#ifdef DRM_MTRR_WC + drm_mtrr_del(vbox->fb_mtrr, + pci_resource_start(dev->pdev, 0), + pci_resource_len(dev->pdev, 0), DRM_MTRR_WC); +#else + arch_phys_wc_del(vbox->fb_mtrr); +#endif +} + +void vbox_ttm_placement(struct vbox_bo *bo, int domain) +{ + u32 c = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) && !defined(RHEL_73) + bo->placement.fpfn = 0; + bo->placement.lpfn = 0; +#else + unsigned int i; +#endif + + bo->placement.placement = bo->placements; + bo->placement.busy_placement = bo->placements; + + if (domain & TTM_PL_FLAG_VRAM) + PLACEMENT_FLAGS(bo->placements[c++]) = + TTM_PL_FLAG_WC | TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_VRAM; + if (domain & TTM_PL_FLAG_SYSTEM) + PLACEMENT_FLAGS(bo->placements[c++]) = + TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; + if (!c) + PLACEMENT_FLAGS(bo->placements[c++]) = + TTM_PL_MASK_CACHING | TTM_PL_FLAG_SYSTEM; + + bo->placement.num_placement = c; + bo->placement.num_busy_placement = c; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) + for (i = 0; i < c; ++i) { + bo->placements[i].fpfn = 0; + bo->placements[i].lpfn = 0; + } +#endif +} + +int vbox_bo_create(struct drm_device *dev, int size, int align, + u32 flags, struct vbox_bo **pvboxbo) +{ + struct vbox_private *vbox = dev->dev_private; + struct vbox_bo *vboxbo; + size_t acc_size; + int ret; + + vboxbo = kzalloc(sizeof(*vboxbo), GFP_KERNEL); + if (!vboxbo) + return -ENOMEM; + + ret = drm_gem_object_init(dev, &vboxbo->gem, size); + if (ret) { + kfree(vboxbo); + return ret; + } + + vboxbo->bo.bdev = &vbox->ttm.bdev; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0) && !defined(RHEL_73) + vboxbo->bo.bdev->dev_mapping = dev->dev_mapping; +#endif + + vbox_ttm_placement(vboxbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); + + acc_size = ttm_bo_dma_acc_size(&vbox->ttm.bdev, size, + sizeof(struct vbox_bo)); + + ret = ttm_bo_init(&vbox->ttm.bdev, &vboxbo->bo, size, + ttm_bo_type_device, &vboxbo->placement, + align >> PAGE_SHIFT, false, NULL, acc_size, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) + NULL, +#endif + NULL, vbox_bo_ttm_destroy); + if (ret) + return ret; + + *pvboxbo = vboxbo; + + return 0; +} + +static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo) +{ + return bo->bo.offset; +} + +int vbox_bo_pin(struct vbox_bo *bo, u32 pl_flag, u64 *gpu_addr) +{ + int i, ret; + + if (bo->pin_count) { + bo->pin_count++; + if (gpu_addr) + *gpu_addr = vbox_bo_gpu_offset(bo); + + return 0; + } + + vbox_ttm_placement(bo, pl_flag); + + for (i = 0; i < bo->placement.num_placement; i++) + PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; + + ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); + if (ret) + return ret; + + bo->pin_count = 1; + + if (gpu_addr) + *gpu_addr = vbox_bo_gpu_offset(bo); + + return 0; +} + +int vbox_bo_unpin(struct vbox_bo *bo) +{ + int i, ret; + + if (!bo->pin_count) { + DRM_ERROR("unpin bad %p\n", bo); + return 0; + } + bo->pin_count--; + if (bo->pin_count) + return 0; + + for (i = 0; i < bo->placement.num_placement; i++) + PLACEMENT_FLAGS(bo->placements[i]) &= ~TTM_PL_FLAG_NO_EVICT; + + ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); + if (ret) + return ret; + + return 0; +} + +/* + * Move a vbox-owned buffer object to system memory if no one else has it + * pinned. The caller must have pinned it previously, and this call will + * release the caller's pin. + */ +int vbox_bo_push_sysram(struct vbox_bo *bo) +{ + int i, ret; + + if (!bo->pin_count) { + DRM_ERROR("unpin bad %p\n", bo); + return 0; + } + bo->pin_count--; + if (bo->pin_count) + return 0; + + if (bo->kmap.virtual) + ttm_bo_kunmap(&bo->kmap); + + vbox_ttm_placement(bo, TTM_PL_FLAG_SYSTEM); + + for (i = 0; i < bo->placement.num_placement; i++) + PLACEMENT_FLAGS(bo->placements[i]) |= TTM_PL_FLAG_NO_EVICT; + + ret = ttm_bo_validate(&bo->bo, &bo->placement, false, false); + if (ret) { + DRM_ERROR("pushing to VRAM failed\n"); + return ret; + } + + return 0; +} + +int vbox_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct drm_file *file_priv; + struct vbox_private *vbox; + + if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET)) + return -EINVAL; + + file_priv = filp->private_data; + vbox = file_priv->minor->dev->dev_private; + + return ttm_bo_mmap(filp, vma, &vbox->ttm.bdev); +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vboxvideo.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vboxvideo.h @@ -0,0 +1,1945 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef ___VBox_Graphics_VBoxVideo_h +#define ___VBox_Graphics_VBoxVideo_h + +#include "vbox_err.h" + +/* this should be in sync with monitorCount in src/VBox/Main/xml/VirtualBox-settings-common.xsd */ +#define VBOX_VIDEO_MAX_SCREENS 64 + +/* + * The last 4096 bytes of the guest VRAM contains the generic info for all + * DualView chunks: sizes and offsets of chunks. This is filled by miniport. + * + * Last 4096 bytes of each chunk contain chunk specific data: framebuffer info, + * etc. This is used exclusively by the corresponding instance of a display driver. + * + * The VRAM layout: + * Last 4096 bytes - Adapter information area. + * 4096 bytes aligned miniport heap (value specified in the config rouded up). + * Slack - what left after dividing the VRAM. + * 4096 bytes aligned framebuffers: + * last 4096 bytes of each framebuffer is the display information area. + * + * The Virtual Graphics Adapter information in the guest VRAM is stored by the + * guest video driver using structures prepended by VBOXVIDEOINFOHDR. + * + * When the guest driver writes dword 0 to the VBE_DISPI_INDEX_VBOX_VIDEO + * the host starts to process the info. The first element at the start of + * the 4096 bytes region should be normally be a LINK that points to + * actual information chain. That way the guest driver can have some + * fixed layout of the information memory block and just rewrite + * the link to point to relevant memory chain. + * + * The processing stops at the END element. + * + * The host can access the memory only when the port IO is processed. + * All data that will be needed later must be copied from these 4096 bytes. + * But other VRAM can be used by host until the mode is disabled. + * + * The guest driver writes dword 0xffffffff to the VBE_DISPI_INDEX_VBOX_VIDEO + * to disable the mode. + * + * VBE_DISPI_INDEX_VBOX_VIDEO is used to read the configuration information + * from the host and issue commands to the host. + * + * The guest writes the VBE_DISPI_INDEX_VBOX_VIDEO index register, the the + * following operations with the VBE data register can be performed: + * + * Operation Result + * write 16 bit value NOP + * read 16 bit value count of monitors + * write 32 bit value sets the vbox command value and the command processed by the host + * read 32 bit value result of the last vbox command is returned + */ + +#define VBOX_VIDEO_PRIMARY_SCREEN 0 +#define VBOX_VIDEO_NO_SCREEN ~0 + +/** + * VBVA command header. + * + * @todo Where does this fit in? + */ +typedef struct VBVACMDHDR { + /** Coordinates of affected rectangle. */ + int16_t x; + int16_t y; + u16 w; + u16 h; +} VBVACMDHDR; +assert_compile_size(VBVACMDHDR, 8); + +/** @name VBVA ring defines. + * + * The VBVA ring buffer is suitable for transferring large (< 2GB) amount of + * data. For example big bitmaps which do not fit to the buffer. + * + * Guest starts writing to the buffer by initializing a record entry in the + * records queue. VBVA_F_RECORD_PARTIAL indicates that the record is being + * written. As data is written to the ring buffer, the guest increases off32End + * for the record. + * + * The host reads the records on flushes and processes all completed records. + * When host encounters situation when only a partial record presents and + * len_and_flags & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE - + * VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates + * off32Head. After that on each flush the host continues fetching the data + * until the record is completed. + * + */ +#define VBVA_RING_BUFFER_SIZE (4*1024*1024 - 1024) +#define VBVA_RING_BUFFER_THRESHOLD (4 * 1024) + +#define VBVA_MAX_RECORDS (64) + +#define VBVA_F_MODE_ENABLED 0x00000001u +#define VBVA_F_MODE_VRDP 0x00000002u +#define VBVA_F_MODE_VRDP_RESET 0x00000004u +#define VBVA_F_MODE_VRDP_ORDER_MASK 0x00000008u + +#define VBVA_F_STATE_PROCESSING 0x00010000u + +#define VBVA_F_RECORD_PARTIAL 0x80000000u + +/** + * VBVA record. + */ +typedef struct VBVARECORD { + /** The length of the record. Changed by guest. */ + u32 len_and_flags; +} VBVARECORD; +assert_compile_size(VBVARECORD, 4); + +/* The size of the information. */ +/* + * The minimum HGSMI heap size is PAGE_SIZE (4096 bytes) and is a restriction of the + * runtime heapsimple API. Use minimum 2 pages here, because the info area also may + * contain other data (for example struct hgsmi_host_flags structure). + */ +#ifndef VBOX_XPDM_MINIPORT +# define VBVA_ADAPTER_INFORMATION_SIZE (64*1024) +#else +#define VBVA_ADAPTER_INFORMATION_SIZE (16*1024) +#define VBVA_DISPLAY_INFORMATION_SIZE (64*1024) +#endif +#define VBVA_MIN_BUFFER_SIZE (64*1024) + + +/* The value for port IO to let the adapter to interpret the adapter memory. */ +#define VBOX_VIDEO_DISABLE_ADAPTER_MEMORY 0xFFFFFFFF + +/* The value for port IO to let the adapter to interpret the adapter memory. */ +#define VBOX_VIDEO_INTERPRET_ADAPTER_MEMORY 0x00000000 + +/* The value for port IO to let the adapter to interpret the display memory. + * The display number is encoded in low 16 bits. + */ +#define VBOX_VIDEO_INTERPRET_DISPLAY_MEMORY_BASE 0x00010000 + + +/* The end of the information. */ +#define VBOX_VIDEO_INFO_TYPE_END 0 +/* Instructs the host to fetch the next VBOXVIDEOINFOHDR at the given offset of VRAM. */ +#define VBOX_VIDEO_INFO_TYPE_LINK 1 +/* Information about a display memory position. */ +#define VBOX_VIDEO_INFO_TYPE_DISPLAY 2 +/* Information about a screen. */ +#define VBOX_VIDEO_INFO_TYPE_SCREEN 3 +/* Information about host notifications for the driver. */ +#define VBOX_VIDEO_INFO_TYPE_HOST_EVENTS 4 +/* Information about non-volatile guest VRAM heap. */ +#define VBOX_VIDEO_INFO_TYPE_NV_HEAP 5 +/* VBVA enable/disable. */ +#define VBOX_VIDEO_INFO_TYPE_VBVA_STATUS 6 +/* VBVA flush. */ +#define VBOX_VIDEO_INFO_TYPE_VBVA_FLUSH 7 +/* Query configuration value. */ +#define VBOX_VIDEO_INFO_TYPE_QUERY_CONF32 8 + + +#pragma pack(1) +typedef struct VBOXVIDEOINFOHDR { + u8 u8Type; + u8 u8Reserved; + u16 u16Length; +} VBOXVIDEOINFOHDR; + + +typedef struct VBOXVIDEOINFOLINK { + /* Relative offset in VRAM */ + s32 i32Offset; +} VBOXVIDEOINFOLINK; + + +/* Resides in adapter info memory. Describes a display VRAM chunk. */ +typedef struct VBOXVIDEOINFODISPLAY { + /* Index of the framebuffer assigned by guest. */ + u32 index; + + /* Absolute offset in VRAM of the framebuffer to be displayed on the monitor. */ + u32 offset; + + /* The size of the memory that can be used for the screen. */ + u32 u32FramebufferSize; + + /* The size of the memory that is used for the Display information. + * The information is at offset + u32FramebufferSize + */ + u32 u32InformationSize; + +} VBOXVIDEOINFODISPLAY; + + +/* Resides in display info area, describes the current video mode. */ +#define VBOX_VIDEO_INFO_SCREEN_F_NONE 0x00 +#define VBOX_VIDEO_INFO_SCREEN_F_ACTIVE 0x01 + +typedef struct VBOXVIDEOINFOSCREEN { + /* Physical X origin relative to the primary screen. */ + s32 xOrigin; + + /* Physical Y origin relative to the primary screen. */ + s32 yOrigin; + + /* The scan line size in bytes. */ + u32 line_size; + + /* Width of the screen. */ + u16 u16Width; + + /* Height of the screen. */ + u16 u16Height; + + /* Color depth. */ + u8 bitsPerPixel; + + /* VBOX_VIDEO_INFO_SCREEN_F_* */ + u8 u8Flags; +} VBOXVIDEOINFOSCREEN; + +/* The guest initializes the structure to 0. The positions of the structure in the + * display info area must not be changed, host will update the structure. Guest checks + * the events and modifies the structure as a response to host. + */ +#define VBOX_VIDEO_INFO_HOST_EVENTS_F_NONE 0x00000000 +#define VBOX_VIDEO_INFO_HOST_EVENTS_F_VRDP_RESET 0x00000080 + +typedef struct VBOXVIDEOINFOHOSTEVENTS { + /* Host events. */ + u32 fu32Events; +} VBOXVIDEOINFOHOSTEVENTS; + +/* Resides in adapter info memory. Describes the non-volatile VRAM heap. */ +typedef struct VBOXVIDEOINFONVHEAP { + /* Absolute offset in VRAM of the start of the heap. */ + u32 u32HeapOffset; + + /* The size of the heap. */ + u32 u32HeapSize; + +} VBOXVIDEOINFONVHEAP; + +/* Display information area. */ +typedef struct VBOXVIDEOINFOVBVASTATUS { + /* Absolute offset in VRAM of the start of the VBVA QUEUE. 0 to disable VBVA. */ + u32 u32QueueOffset; + + /* The size of the VBVA QUEUE. 0 to disable VBVA. */ + u32 u32QueueSize; + +} VBOXVIDEOINFOVBVASTATUS; + +typedef struct VBOXVIDEOINFOVBVAFLUSH { + u32 u32DataStart; + + u32 u32DataEnd; + +} VBOXVIDEOINFOVBVAFLUSH; + +#define VBOX_VIDEO_QCI32_MONITOR_COUNT 0 +#define VBOX_VIDEO_QCI32_OFFSCREEN_HEAP_SIZE 1 + +typedef struct VBOXVIDEOINFOQUERYCONF32 { + u32 index; + + u32 value; + +} VBOXVIDEOINFOQUERYCONF32; +#pragma pack() + +#ifdef VBOX_WITH_VIDEOHWACCEL +#pragma pack(1) + +#define VBOXVHWA_VERSION_MAJ 0 +#define VBOXVHWA_VERSION_MIN 0 +#define VBOXVHWA_VERSION_BLD 6 +#define VBOXVHWA_VERSION_RSV 0 + +typedef enum { + VBOXVHWACMD_TYPE_SURF_CANCREATE = 1, + VBOXVHWACMD_TYPE_SURF_CREATE, + VBOXVHWACMD_TYPE_SURF_DESTROY, + VBOXVHWACMD_TYPE_SURF_LOCK, + VBOXVHWACMD_TYPE_SURF_UNLOCK, + VBOXVHWACMD_TYPE_SURF_BLT, + VBOXVHWACMD_TYPE_SURF_FLIP, + VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, + VBOXVHWACMD_TYPE_SURF_OVERLAY_SETPOSITION, + VBOXVHWACMD_TYPE_SURF_COLORKEY_SET, + VBOXVHWACMD_TYPE_QUERY_INFO1, + VBOXVHWACMD_TYPE_QUERY_INFO2, + VBOXVHWACMD_TYPE_ENABLE, + VBOXVHWACMD_TYPE_DISABLE, + VBOXVHWACMD_TYPE_HH_CONSTRUCT, + VBOXVHWACMD_TYPE_HH_RESET +#ifdef VBOX_WITH_WDDM + , VBOXVHWACMD_TYPE_SURF_GETINFO + , VBOXVHWACMD_TYPE_SURF_COLORFILL +#endif + , VBOXVHWACMD_TYPE_HH_DISABLE + , VBOXVHWACMD_TYPE_HH_ENABLE + , VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN + , VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEEND + , VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM + , VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM +} VBOXVHWACMD_TYPE; + +/* the command processing was asynch, set by the host to indicate asynch command completion + * must not be cleared once set, the command completion is performed by issuing a host->guest completion command + * while keeping this flag unchanged */ +#define VBOXVHWACMD_FLAG_HG_ASYNCH 0x00010000 +/* asynch completion is performed by issuing the event */ +#define VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT 0x00000001 +/* issue interrupt on asynch completion */ +#define VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ 0x00000002 +/* guest does not do any op on completion of this command, the host may copy the command and indicate that it does not need the command anymore + * by setting the VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED flag */ +#define VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION 0x00000004 +/* the host has copied the VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION command and returned it to the guest */ +#define VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED 0x00020000 +/* this is the host->host cmd, i.e. a configuration command posted by the host to the framebuffer */ +#define VBOXVHWACMD_FLAG_HH_CMD 0x10000000 + +typedef struct VBOXVHWACMD { + VBOXVHWACMD_TYPE enmCmd; /* command type */ + volatile s32 rc; /* command result */ + s32 iDisplay; /* display index */ + volatile s32 Flags; /* ored VBOXVHWACMD_FLAG_xxx values */ + uint64_t GuestVBVAReserved1; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */ + uint64_t GuestVBVAReserved2; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */ + volatile u32 cRefs; + s32 Reserved; + union { + struct VBOXVHWACMD *pNext; + u32 offNext; + uint64_t Data; /* the body is 64-bit aligned */ + } u; + char body[1]; +} VBOXVHWACMD; + +#define VBOXVHWACMD_HEADSIZE() (RT_OFFSETOF(VBOXVHWACMD, body)) +#define VBOXVHWACMD_SIZE_FROMBODYSIZE(_s) (VBOXVHWACMD_HEADSIZE() + (_s)) +#define VBOXVHWACMD_SIZE(_tCmd) (VBOXVHWACMD_SIZE_FROMBODYSIZE(sizeof(_tCmd))) +typedef unsigned int VBOXVHWACMD_LENGTH; +typedef uint64_t VBOXVHWA_SURFHANDLE; +#define VBOXVHWA_SURFHANDLE_INVALID 0ULL +#define VBOXVHWACMD_BODY(_p, _t) ((_t*)(_p)->body) +#define VBOXVHWACMD_HEAD(_pb) ((VBOXVHWACMD*)((u8 *)(_pb) - RT_OFFSETOF(VBOXVHWACMD, body))) + +typedef struct VBOXVHWA_RECTL { + s32 left; + s32 top; + s32 right; + s32 bottom; +} VBOXVHWA_RECTL; + +typedef struct VBOXVHWA_COLORKEY { + u32 low; + u32 high; +} VBOXVHWA_COLORKEY; + +typedef struct VBOXVHWA_PIXELFORMAT { + u32 flags; + u32 fourCC; + union { + u32 rgbBitCount; + u32 yuvBitCount; + } c; + + union { + u32 rgbRBitMask; + u32 yuvYBitMask; + } m1; + + union { + u32 rgbGBitMask; + u32 yuvUBitMask; + } m2; + + union { + u32 rgbBBitMask; + u32 yuvVBitMask; + } m3; + + union { + u32 rgbABitMask; + } m4; + + u32 Reserved; +} VBOXVHWA_PIXELFORMAT; + +typedef struct VBOXVHWA_SURFACEDESC { + u32 flags; + u32 height; + u32 width; + u32 pitch; + u32 sizeX; + u32 sizeY; + u32 cBackBuffers; + u32 Reserved; + VBOXVHWA_COLORKEY DstOverlayCK; + VBOXVHWA_COLORKEY DstBltCK; + VBOXVHWA_COLORKEY SrcOverlayCK; + VBOXVHWA_COLORKEY SrcBltCK; + VBOXVHWA_PIXELFORMAT PixelFormat; + u32 surfCaps; + u32 Reserved2; + VBOXVHWA_SURFHANDLE hSurf; + uint64_t offSurface; +} VBOXVHWA_SURFACEDESC; + +typedef struct VBOXVHWA_BLTFX { + u32 flags; + u32 rop; + u32 rotationOp; + u32 rotation; + u32 fillColor; + u32 Reserved; + VBOXVHWA_COLORKEY DstCK; + VBOXVHWA_COLORKEY SrcCK; +} VBOXVHWA_BLTFX; + +typedef struct VBOXVHWA_OVERLAYFX { + u32 flags; + u32 Reserved1; + u32 fxFlags; + u32 Reserved2; + VBOXVHWA_COLORKEY DstCK; + VBOXVHWA_COLORKEY SrcCK; +} VBOXVHWA_OVERLAYFX; + +#define VBOXVHWA_CAPS_BLT 0x00000040 +#define VBOXVHWA_CAPS_BLTCOLORFILL 0x04000000 +#define VBOXVHWA_CAPS_BLTFOURCC 0x00000100 +#define VBOXVHWA_CAPS_BLTSTRETCH 0x00000200 +#define VBOXVHWA_CAPS_BLTQUEUE 0x00000080 + +#define VBOXVHWA_CAPS_OVERLAY 0x00000800 +#define VBOXVHWA_CAPS_OVERLAYFOURCC 0x00002000 +#define VBOXVHWA_CAPS_OVERLAYSTRETCH 0x00004000 +#define VBOXVHWA_CAPS_OVERLAYCANTCLIP 0x00001000 + +#define VBOXVHWA_CAPS_COLORKEY 0x00400000 +#define VBOXVHWA_CAPS_COLORKEYHWASSIST 0x01000000 + +#define VBOXVHWA_SCAPS_BACKBUFFER 0x00000004 +#define VBOXVHWA_SCAPS_COMPLEX 0x00000008 +#define VBOXVHWA_SCAPS_FLIP 0x00000010 +#define VBOXVHWA_SCAPS_FRONTBUFFER 0x00000020 +#define VBOXVHWA_SCAPS_OFFSCREENPLAIN 0x00000040 +#define VBOXVHWA_SCAPS_OVERLAY 0x00000080 +#define VBOXVHWA_SCAPS_PRIMARYSURFACE 0x00000200 +#define VBOXVHWA_SCAPS_SYSTEMMEMORY 0x00000800 +#define VBOXVHWA_SCAPS_VIDEOMEMORY 0x00004000 +#define VBOXVHWA_SCAPS_VISIBLE 0x00008000 +#define VBOXVHWA_SCAPS_LOCALVIDMEM 0x10000000 + +#define VBOXVHWA_PF_PALETTEINDEXED8 0x00000020 +#define VBOXVHWA_PF_RGB 0x00000040 +#define VBOXVHWA_PF_RGBTOYUV 0x00000100 +#define VBOXVHWA_PF_YUV 0x00000200 +#define VBOXVHWA_PF_FOURCC 0x00000004 + +#define VBOXVHWA_LOCK_DISCARDCONTENTS 0x00002000 + +#define VBOXVHWA_CFG_ENABLED 0x00000001 + +#define VBOXVHWA_SD_BACKBUFFERCOUNT 0x00000020 +#define VBOXVHWA_SD_CAPS 0x00000001 +#define VBOXVHWA_SD_CKDESTBLT 0x00004000 +#define VBOXVHWA_SD_CKDESTOVERLAY 0x00002000 +#define VBOXVHWA_SD_CKSRCBLT 0x00010000 +#define VBOXVHWA_SD_CKSRCOVERLAY 0x00008000 +#define VBOXVHWA_SD_HEIGHT 0x00000002 +#define VBOXVHWA_SD_PITCH 0x00000008 +#define VBOXVHWA_SD_PIXELFORMAT 0x00001000 +/*#define VBOXVHWA_SD_REFRESHRATE 0x00040000*/ +#define VBOXVHWA_SD_WIDTH 0x00000004 + +#define VBOXVHWA_CKEYCAPS_DESTBLT 0x00000001 +#define VBOXVHWA_CKEYCAPS_DESTBLTCLRSPACE 0x00000002 +#define VBOXVHWA_CKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004 +#define VBOXVHWA_CKEYCAPS_DESTBLTYUV 0x00000008 +#define VBOXVHWA_CKEYCAPS_DESTOVERLAY 0x00000010 +#define VBOXVHWA_CKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020 +#define VBOXVHWA_CKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040 +#define VBOXVHWA_CKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080 +#define VBOXVHWA_CKEYCAPS_DESTOVERLAYYUV 0x00000100 +#define VBOXVHWA_CKEYCAPS_SRCBLT 0x00000200 +#define VBOXVHWA_CKEYCAPS_SRCBLTCLRSPACE 0x00000400 +#define VBOXVHWA_CKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800 +#define VBOXVHWA_CKEYCAPS_SRCBLTYUV 0x00001000 +#define VBOXVHWA_CKEYCAPS_SRCOVERLAY 0x00002000 +#define VBOXVHWA_CKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000 +#define VBOXVHWA_CKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000 +#define VBOXVHWA_CKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000 +#define VBOXVHWA_CKEYCAPS_SRCOVERLAYYUV 0x00020000 +#define VBOXVHWA_CKEYCAPS_NOCOSTOVERLAY 0x00040000 + +#define VBOXVHWA_BLT_COLORFILL 0x00000400 +#define VBOXVHWA_BLT_DDFX 0x00000800 +#define VBOXVHWA_BLT_EXTENDED_FLAGS 0x40000000 +#define VBOXVHWA_BLT_EXTENDED_LINEAR_CONTENT 0x00000004 +#define VBOXVHWA_BLT_EXTENDED_PRESENTATION_STRETCHFACTOR 0x00000010 +#define VBOXVHWA_BLT_KEYDESTOVERRIDE 0x00004000 +#define VBOXVHWA_BLT_KEYSRCOVERRIDE 0x00010000 +#define VBOXVHWA_BLT_LAST_PRESENTATION 0x20000000 +#define VBOXVHWA_BLT_PRESENTATION 0x10000000 +#define VBOXVHWA_BLT_ROP 0x00020000 + + +#define VBOXVHWA_OVER_DDFX 0x00080000 +#define VBOXVHWA_OVER_HIDE 0x00000200 +#define VBOXVHWA_OVER_KEYDEST 0x00000400 +#define VBOXVHWA_OVER_KEYDESTOVERRIDE 0x00000800 +#define VBOXVHWA_OVER_KEYSRC 0x00001000 +#define VBOXVHWA_OVER_KEYSRCOVERRIDE 0x00002000 +#define VBOXVHWA_OVER_SHOW 0x00004000 + +#define VBOXVHWA_CKEY_COLORSPACE 0x00000001 +#define VBOXVHWA_CKEY_DESTBLT 0x00000002 +#define VBOXVHWA_CKEY_DESTOVERLAY 0x00000004 +#define VBOXVHWA_CKEY_SRCBLT 0x00000008 +#define VBOXVHWA_CKEY_SRCOVERLAY 0x00000010 + +#define VBOXVHWA_BLT_ARITHSTRETCHY 0x00000001 +#define VBOXVHWA_BLT_MIRRORLEFTRIGHT 0x00000002 +#define VBOXVHWA_BLT_MIRRORUPDOWN 0x00000004 + +#define VBOXVHWA_OVERFX_ARITHSTRETCHY 0x00000001 +#define VBOXVHWA_OVERFX_MIRRORLEFTRIGHT 0x00000002 +#define VBOXVHWA_OVERFX_MIRRORUPDOWN 0x00000004 + +#define VBOXVHWA_CAPS2_CANRENDERWINDOWED 0x00080000 +#define VBOXVHWA_CAPS2_WIDESURFACES 0x00001000 +#define VBOXVHWA_CAPS2_COPYFOURCC 0x00008000 +/*#define VBOXVHWA_CAPS2_FLIPINTERVAL 0x00200000*/ +/*#define VBOXVHWA_CAPS2_FLIPNOVSYNC 0x00400000*/ + + +#define VBOXVHWA_OFFSET64_VOID (UINT64_MAX) + +typedef struct VBOXVHWA_VERSION { + u32 maj; + u32 min; + u32 bld; + u32 reserved; +} VBOXVHWA_VERSION; + +#define VBOXVHWA_VERSION_INIT(_pv) do { \ + (_pv)->maj = VBOXVHWA_VERSION_MAJ; \ + (_pv)->min = VBOXVHWA_VERSION_MIN; \ + (_pv)->bld = VBOXVHWA_VERSION_BLD; \ + (_pv)->reserved = VBOXVHWA_VERSION_RSV; \ + } while(0) + +typedef struct VBOXVHWACMD_QUERYINFO1 { + union { + struct { + VBOXVHWA_VERSION guestVersion; + } in; + + struct { + u32 cfgFlags; + u32 caps; + + u32 caps2; + u32 colorKeyCaps; + + u32 stretchCaps; + u32 surfaceCaps; + + u32 numOverlays; + u32 curOverlays; + + u32 numFourCC; + u32 reserved; + } out; + } u; +} VBOXVHWACMD_QUERYINFO1; + +typedef struct VBOXVHWACMD_QUERYINFO2 { + u32 numFourCC; + u32 FourCC[1]; +} VBOXVHWACMD_QUERYINFO2; + +#define VBOXVHWAINFO2_SIZE(_cFourCC) RT_OFFSETOF(VBOXVHWACMD_QUERYINFO2, FourCC[_cFourCC]) + +typedef struct VBOXVHWACMD_SURF_CANCREATE { + VBOXVHWA_SURFACEDESC SurfInfo; + union { + struct { + u32 bIsDifferentPixelFormat; + u32 Reserved; + } in; + + struct { + s32 ErrInfo; + } out; + } u; +} VBOXVHWACMD_SURF_CANCREATE; + +typedef struct VBOXVHWACMD_SURF_CREATE { + VBOXVHWA_SURFACEDESC SurfInfo; +} VBOXVHWACMD_SURF_CREATE; + +#ifdef VBOX_WITH_WDDM +typedef struct VBOXVHWACMD_SURF_GETINFO { + VBOXVHWA_SURFACEDESC SurfInfo; +} VBOXVHWACMD_SURF_GETINFO; +#endif + +typedef struct VBOXVHWACMD_SURF_DESTROY { + union { + struct { + VBOXVHWA_SURFHANDLE hSurf; + } in; + } u; +} VBOXVHWACMD_SURF_DESTROY; + +typedef struct VBOXVHWACMD_SURF_LOCK { + union { + struct { + VBOXVHWA_SURFHANDLE hSurf; + uint64_t offSurface; + u32 flags; + u32 rectValid; + VBOXVHWA_RECTL rect; + } in; + } u; +} VBOXVHWACMD_SURF_LOCK; + +typedef struct VBOXVHWACMD_SURF_UNLOCK { + union { + struct { + VBOXVHWA_SURFHANDLE hSurf; + u32 xUpdatedMemValid; + u32 reserved; + VBOXVHWA_RECTL xUpdatedMemRect; + } in; + } u; +} VBOXVHWACMD_SURF_UNLOCK; + +typedef struct VBOXVHWACMD_SURF_BLT { + uint64_t DstGuestSurfInfo; + uint64_t SrcGuestSurfInfo; + union { + struct { + VBOXVHWA_SURFHANDLE hDstSurf; + uint64_t offDstSurface; + VBOXVHWA_RECTL dstRect; + VBOXVHWA_SURFHANDLE hSrcSurf; + uint64_t offSrcSurface; + VBOXVHWA_RECTL srcRect; + u32 flags; + u32 xUpdatedSrcMemValid; + VBOXVHWA_BLTFX desc; + VBOXVHWA_RECTL xUpdatedSrcMemRect; + } in; + } u; +} VBOXVHWACMD_SURF_BLT; + +#ifdef VBOX_WITH_WDDM +typedef struct VBOXVHWACMD_SURF_COLORFILL { + union { + struct { + VBOXVHWA_SURFHANDLE hSurf; + uint64_t offSurface; + u32 reserved; + u32 cRects; + VBOXVHWA_RECTL aRects[1]; + } in; + } u; +} VBOXVHWACMD_SURF_COLORFILL; +#endif + +typedef struct VBOXVHWACMD_SURF_FLIP { + uint64_t TargGuestSurfInfo; + uint64_t CurrGuestSurfInfo; + union { + struct { + VBOXVHWA_SURFHANDLE hTargSurf; + uint64_t offTargSurface; + VBOXVHWA_SURFHANDLE hCurrSurf; + uint64_t offCurrSurface; + u32 flags; + u32 xUpdatedTargMemValid; + VBOXVHWA_RECTL xUpdatedTargMemRect; + } in; + } u; +} VBOXVHWACMD_SURF_FLIP; + +typedef struct VBOXVHWACMD_SURF_COLORKEY_SET { + union { + struct { + VBOXVHWA_SURFHANDLE hSurf; + uint64_t offSurface; + VBOXVHWA_COLORKEY CKey; + u32 flags; + u32 reserved; + } in; + } u; +} VBOXVHWACMD_SURF_COLORKEY_SET; + +#define VBOXVHWACMD_SURF_OVERLAY_UPDATE_F_SRCMEMRECT 0x00000001 +#define VBOXVHWACMD_SURF_OVERLAY_UPDATE_F_DSTMEMRECT 0x00000002 + +typedef struct VBOXVHWACMD_SURF_OVERLAY_UPDATE { + union { + struct { + VBOXVHWA_SURFHANDLE hDstSurf; + uint64_t offDstSurface; + VBOXVHWA_RECTL dstRect; + VBOXVHWA_SURFHANDLE hSrcSurf; + uint64_t offSrcSurface; + VBOXVHWA_RECTL srcRect; + u32 flags; + u32 xFlags; + VBOXVHWA_OVERLAYFX desc; + VBOXVHWA_RECTL xUpdatedSrcMemRect; + VBOXVHWA_RECTL xUpdatedDstMemRect; + } in; + } u; +}VBOXVHWACMD_SURF_OVERLAY_UPDATE; + +typedef struct VBOXVHWACMD_SURF_OVERLAY_SETPOSITION { + union { + struct { + VBOXVHWA_SURFHANDLE hDstSurf; + uint64_t offDstSurface; + VBOXVHWA_SURFHANDLE hSrcSurf; + uint64_t offSrcSurface; + u32 xPos; + u32 yPos; + u32 flags; + u32 reserved; + } in; + } u; +} VBOXVHWACMD_SURF_OVERLAY_SETPOSITION; + +typedef struct VBOXVHWACMD_HH_CONSTRUCT { + void *pVM; + /* VRAM info for the backend to be able to properly translate VRAM offsets */ + void *pvVRAM; + u32 cbVRAM; +} VBOXVHWACMD_HH_CONSTRUCT; + +typedef struct VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM { + struct SSMHANDLE * pSSM; +} VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM; + +typedef struct VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM { + struct SSMHANDLE * pSSM; +} VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM; + +typedef void FNVBOXVHWA_HH_CALLBACK(void*); +typedef FNVBOXVHWA_HH_CALLBACK *PFNVBOXVHWA_HH_CALLBACK; + +#define VBOXVHWA_HH_CALLBACK_SET(_pCmd, _pfn, _parg) \ + do { \ + (_pCmd)->GuestVBVAReserved1 = (uint64_t)(uintptr_t)(_pfn); \ + (_pCmd)->GuestVBVAReserved2 = (uint64_t)(uintptr_t)(_parg); \ + }while(0) + +#define VBOXVHWA_HH_CALLBACK_GET(_pCmd) ((PFNVBOXVHWA_HH_CALLBACK)(_pCmd)->GuestVBVAReserved1) +#define VBOXVHWA_HH_CALLBACK_GET_ARG(_pCmd) ((void*)(_pCmd)->GuestVBVAReserved2) + +#pragma pack() +#endif /* #ifdef VBOX_WITH_VIDEOHWACCEL */ + +/* All structures are without alignment. */ +#pragma pack(1) + +typedef struct VBVAHOSTFLAGS { + u32 host_events; + u32 supported_orders; +} VBVAHOSTFLAGS; + +typedef struct VBVABUFFER { + VBVAHOSTFLAGS host_flags; + + /* The offset where the data start in the buffer. */ + u32 data_offset; + /* The offset where next data must be placed in the buffer. */ + u32 free_offset; + + /* The queue of record descriptions. */ + VBVARECORD records[VBVA_MAX_RECORDS]; + u32 first_record_index; + u32 free_record_index; + + /* Space to leave free in the buffer when large partial records are transferred. */ + u32 partial_write_tresh; + + u32 data_len; + u8 data[1]; /* variable size for the rest of the VBVABUFFER area in VRAM. */ +} VBVABUFFER; + +#define VBVA_MAX_RECORD_SIZE (128*_1M) + +/* guest->host commands */ +#define VBVA_QUERY_CONF32 1 +#define VBVA_SET_CONF32 2 +#define VBVA_INFO_VIEW 3 +#define VBVA_INFO_HEAP 4 +#define VBVA_FLUSH 5 +#define VBVA_INFO_SCREEN 6 +#define VBVA_ENABLE 7 +#define VBVA_MOUSE_POINTER_SHAPE 8 +#ifdef VBOX_WITH_VIDEOHWACCEL +# define VBVA_VHWA_CMD 9 +#endif /* # ifdef VBOX_WITH_VIDEOHWACCEL */ +#ifdef VBOX_WITH_VDMA +# define VBVA_VDMA_CTL 10 /* setup G<->H DMA channel info */ +# define VBVA_VDMA_CMD 11 /* G->H DMA command */ +#endif +#define VBVA_INFO_CAPS 12 /* informs host about HGSMI caps. see struct vbva_caps below */ +#define VBVA_SCANLINE_CFG 13 /* configures scanline, see VBVASCANLINECFG below */ +#define VBVA_SCANLINE_INFO 14 /* requests scanline info, see VBVASCANLINEINFO below */ +#define VBVA_CMDVBVA_SUBMIT 16 /* inform host about VBVA Command submission */ +#define VBVA_CMDVBVA_FLUSH 17 /* inform host about VBVA Command submission */ +#define VBVA_CMDVBVA_CTL 18 /* G->H DMA command */ +#define VBVA_QUERY_MODE_HINTS 19 /* Query most recent mode hints sent. */ +/** Report the guest virtual desktop position and size for mapping host and + * guest pointer positions. */ +#define VBVA_REPORT_INPUT_MAPPING 20 +/** Report the guest cursor position and query the host position. */ +#define VBVA_CURSOR_POSITION 21 + +/* host->guest commands */ +#define VBVAHG_EVENT 1 +#define VBVAHG_DISPLAY_CUSTOM 2 +#ifdef VBOX_WITH_VDMA +#define VBVAHG_SHGSMI_COMPLETION 3 +#endif + +#ifdef VBOX_WITH_VIDEOHWACCEL +#define VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE 1 +#pragma pack(1) +typedef struct VBVAHOSTCMDVHWACMDCOMPLETE { + u32 offCmd; +}VBVAHOSTCMDVHWACMDCOMPLETE; +#pragma pack() +#endif /* # ifdef VBOX_WITH_VIDEOHWACCEL */ + +#pragma pack(1) +typedef enum { + VBVAHOSTCMD_OP_EVENT = 1, + VBVAHOSTCMD_OP_CUSTOM +}VBVAHOSTCMD_OP_TYPE; + +typedef struct VBVAHOSTCMDEVENT { + uint64_t pEvent; +}VBVAHOSTCMDEVENT; + + +typedef struct VBVAHOSTCMD { + /* destination ID if >=0 specifies display index, otherwize the command is directed to the miniport */ + s32 iDstID; + s32 customOpCode; + union { + struct VBVAHOSTCMD *pNext; + u32 offNext; + uint64_t Data; /* the body is 64-bit aligned */ + } u; + char body[1]; +}VBVAHOSTCMD; + +#define VBVAHOSTCMD_SIZE(_size) (sizeof(VBVAHOSTCMD) + (_size)) +#define VBVAHOSTCMD_BODY(_pCmd, _tBody) ((_tBody*)(_pCmd)->body) +#define VBVAHOSTCMD_HDR(_pBody) ((VBVAHOSTCMD*)(((u8*)_pBody) - RT_OFFSETOF(VBVAHOSTCMD, body))) +#define VBVAHOSTCMD_HDRSIZE (RT_OFFSETOF(VBVAHOSTCMD, body)) + +#pragma pack() + +/* struct vbva_conf32::index */ +#define VBOX_VBVA_CONF32_MONITOR_COUNT 0 +#define VBOX_VBVA_CONF32_HOST_HEAP_SIZE 1 +/** Returns VINF_SUCCESS if the host can report mode hints via VBVA. + * Set value to VERR_NOT_SUPPORTED before calling. */ +#define VBOX_VBVA_CONF32_MODE_HINT_REPORTING 2 +/** Returns VINF_SUCCESS if the host can report guest cursor enabled status via + * VBVA. Set value to VERR_NOT_SUPPORTED before calling. */ +#define VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING 3 +/** Returns the currently available host cursor capabilities. Available if + * struct vbva_conf32::VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING returns success. + * @see VMMDevReqMouseStatus::mouseFeatures. */ +#define VBOX_VBVA_CONF32_CURSOR_CAPABILITIES 4 +/** Returns the supported flags in VBVAINFOSCREEN::u8Flags. */ +#define VBOX_VBVA_CONF32_SCREEN_FLAGS 5 +/** Returns the max size of VBVA record. */ +#define VBOX_VBVA_CONF32_MAX_RECORD_SIZE 6 + +typedef struct vbva_conf32 { + u32 index; + u32 value; +} vbva_conf32; + +/** Reserved for historical reasons. */ +#define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED0 BIT(0) +/** Guest cursor capability: can the host show a hardware cursor at the host + * pointer location? */ +#define VBOX_VBVA_CURSOR_CAPABILITY_HARDWARE BIT(1) +/** Reserved for historical reasons. */ +#define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED2 BIT(2) +/** Reserved for historical reasons. Must always be unset. */ +#define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED3 BIT(3) +/** Reserved for historical reasons. */ +#define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED4 BIT(4) +/** Reserved for historical reasons. */ +#define VBOX_VBVA_CURSOR_CAPABILITY_RESERVED5 BIT(5) + +typedef struct VBVAINFOVIEW { + /* Index of the screen, assigned by the guest. */ + u32 view_index; + + /* The screen offset in VRAM, the framebuffer starts here. */ + u32 u32ViewOffset; + + /* The size of the VRAM memory that can be used for the view. */ + u32 u32ViewSize; + + /* The recommended maximum size of the VRAM memory for the screen. */ + u32 u32MaxScreenSize; +} VBVAINFOVIEW; + +typedef struct VBVAINFOHEAP { + /* Absolute offset in VRAM of the start of the heap. */ + u32 u32HeapOffset; + + /* The size of the heap. */ + u32 u32HeapSize; + +} VBVAINFOHEAP; + +typedef struct VBVAFLUSH { + u32 reserved; + +} VBVAFLUSH; + +typedef struct VBVACMDVBVASUBMIT { + u32 reserved; +} VBVACMDVBVASUBMIT; + +/* flush is requested because due to guest command buffer overflow */ +#define VBVACMDVBVAFLUSH_F_GUEST_BUFFER_OVERFLOW 1 + +typedef struct VBVACMDVBVAFLUSH { + u32 flags; +} VBVACMDVBVAFLUSH; + + +/* VBVAINFOSCREEN::u8Flags */ +#define VBVA_SCREEN_F_NONE 0x0000 +#define VBVA_SCREEN_F_ACTIVE 0x0001 +/** The virtual monitor has been disabled by the guest and should be removed + * by the host and ignored for purposes of pointer position calculation. */ +#define VBVA_SCREEN_F_DISABLED 0x0002 +/** The virtual monitor has been blanked by the guest and should be blacked + * out by the host using width, height, etc values from the VBVAINFOSCREEN request. */ +#define VBVA_SCREEN_F_BLANK 0x0004 +/** The virtual monitor has been blanked by the guest and should be blacked + * out by the host using the previous mode values for width. height, etc. */ +#define VBVA_SCREEN_F_BLANK2 0x0008 + +typedef struct VBVAINFOSCREEN { + /* Which view contains the screen. */ + u32 view_index; + + /* Physical X origin relative to the primary screen. */ + s32 origin_x; + + /* Physical Y origin relative to the primary screen. */ + s32 origin_y; + + /* Offset of visible framebuffer relative to the framebuffer start. */ + u32 start_offset; + + /* The scan line size in bytes. */ + u32 line_size; + + /* Width of the screen. */ + u32 width; + + /* Height of the screen. */ + u32 height; + + /* Color depth. */ + u16 bits_per_pixel; + + /* VBVA_SCREEN_F_* */ + u16 flags; +} VBVAINFOSCREEN; + + +/* VBVAENABLE::flags */ +#define VBVA_F_NONE 0x00000000 +#define VBVA_F_ENABLE 0x00000001 +#define VBVA_F_DISABLE 0x00000002 +/* extended VBVA to be used with WDDM */ +#define VBVA_F_EXTENDED 0x00000004 +/* vbva offset is absolute VRAM offset */ +#define VBVA_F_ABSOFFSET 0x00000008 + +typedef struct VBVAENABLE { + u32 flags; + u32 offset; + s32 result; +} VBVAENABLE; + +typedef struct vbva_enable_ex { + VBVAENABLE base; + u32 screen_id; +} vbva_enable_ex; + + +typedef struct vbva_mouse_pointer_shape { + /* The host result. */ + s32 result; + + /* VBOX_MOUSE_POINTER_* bit flags. */ + u32 flags; + + /* X coordinate of the hot spot. */ + u32 hot_x; + + /* Y coordinate of the hot spot. */ + u32 hot_y; + + /* Width of the pointer in pixels. */ + u32 width; + + /* Height of the pointer in scanlines. */ + u32 height; + + /* Pointer data. + * + **** + * The data consists of 1 bpp AND mask followed by 32 bpp XOR (color) mask. + * + * For pointers without alpha channel the XOR mask pixels are 32 bit values: (lsb)BGR0(msb). + * For pointers with alpha channel the XOR mask consists of (lsb)BGRA(msb) 32 bit values. + * + * Guest driver must create the AND mask for pointers with alpha channel, so if host does not + * support alpha, the pointer could be displayed as a normal color pointer. The AND mask can + * be constructed from alpha values. For example alpha value >= 0xf0 means bit 0 in the AND mask. + * + * The AND mask is 1 bpp bitmap with byte aligned scanlines. Size of AND mask, + * therefore, is cbAnd = (width + 7) / 8 * height. The padding bits at the + * end of any scanline are undefined. + * + * The XOR mask follows the AND mask on the next 4 bytes aligned offset: + * u8 *pXor = pAnd + (cbAnd + 3) & ~3 + * Bytes in the gap between the AND and the XOR mask are undefined. + * XOR mask scanlines have no gap between them and size of XOR mask is: + * cXor = width * 4 * height. + **** + * + * Preallocate 4 bytes for accessing actual data as p->data. + */ + u8 data[4]; + +} vbva_mouse_pointer_shape; + +/** @name struct vbva_mouse_pointer_shape::flags + * @note The VBOX_MOUSE_POINTER_* flags are used in the guest video driver, + * values must be <= 0x8000 and must not be changed. (try make more sense + * of this, please). + * @{ + */ +/** pointer is visible */ +#define VBOX_MOUSE_POINTER_VISIBLE (0x0001) +/** pointer has alpha channel */ +#define VBOX_MOUSE_POINTER_ALPHA (0x0002) +/** pointerData contains new pointer shape */ +#define VBOX_MOUSE_POINTER_SHAPE (0x0004) +/** @} */ + +/* the guest driver can handle asynch guest cmd completion by reading the command offset from io port */ +#define VBVACAPS_COMPLETEGCMD_BY_IOREAD 0x00000001 +/* the guest driver can handle video adapter IRQs */ +#define VBVACAPS_IRQ 0x00000002 +/** The guest can read video mode hints sent via VBVA. */ +#define VBVACAPS_VIDEO_MODE_HINTS 0x00000004 +/** The guest can switch to a software cursor on demand. */ +#define VBVACAPS_DISABLE_CURSOR_INTEGRATION 0x00000008 +/** The guest does not depend on host handling the VBE registers. */ +#define VBVACAPS_USE_VBVA_ONLY 0x00000010 +typedef struct vbva_caps { + s32 rc; + u32 caps; +} vbva_caps; + +/* makes graphics device generate IRQ on VSYNC */ +#define VBVASCANLINECFG_ENABLE_VSYNC_IRQ 0x00000001 +/* guest driver may request the current scanline */ +#define VBVASCANLINECFG_ENABLE_SCANLINE_INFO 0x00000002 +/* request the current refresh period, returned in u32RefreshPeriodMs */ +#define VBVASCANLINECFG_QUERY_REFRESH_PERIOD 0x00000004 +/* set new refresh period specified in u32RefreshPeriodMs. + * if used with VBVASCANLINECFG_QUERY_REFRESH_PERIOD, + * u32RefreshPeriodMs is set to the previous refresh period on return */ +#define VBVASCANLINECFG_SET_REFRESH_PERIOD 0x00000008 + +typedef struct VBVASCANLINECFG { + s32 rc; + u32 flags; + u32 u32RefreshPeriodMs; + u32 reserved; +} VBVASCANLINECFG; + +typedef struct VBVASCANLINEINFO { + s32 rc; + u32 screen_id; + u32 u32InVBlank; + u32 u32ScanLine; +} VBVASCANLINEINFO; + +/** Query the most recent mode hints received from the host. */ +typedef struct vbva_query_mode_hints { + /** The maximum number of screens to return hints for. */ + u16 hints_queried_count; + /** The size of the mode hint structures directly following this one. */ + u16 cbHintStructureGuest; + /** The return code for the operation. Initialise to VERR_NOT_SUPPORTED. */ + s32 rc; +} vbva_query_mode_hints; + +/** Structure in which a mode hint is returned. The guest allocates an array + * of these immediately after the struct vbva_query_mode_hints structure. To accomodate + * future extensions, the struct vbva_query_mode_hints structure specifies the size of + * the struct vbva_modehint structures allocated by the guest, and the host only fills + * out structure elements which fit into that size. The host should fill any + * unused members (e.g. dx, dy) or structure space on the end with ~0. The + * whole structure can legally be set to ~0 to skip a screen. */ +typedef struct vbva_modehint { + u32 magic; + u32 cx; + u32 cy; + u32 bpp; /* Which has never been used... */ + u32 display; + u32 dx; /**< X offset into the virtual frame-buffer. */ + u32 dy; /**< Y offset into the virtual frame-buffer. */ + u32 fEnabled; /* Not flags. Add new members for new flags. */ +} vbva_modehint; + +#define VBVAMODEHINT_MAGIC 0x0801add9u + +/** Report the rectangle relative to which absolute pointer events should be + * expressed. This information remains valid until the next VBVA resize event + * for any screen, at which time it is reset to the bounding rectangle of all + * virtual screens and must be re-set. + * @see VBVA_REPORT_INPUT_MAPPING. */ +typedef struct vbva_report_input_mapping { + s32 x; /**< Upper left X co-ordinate relative to the first screen. */ + s32 y; /**< Upper left Y co-ordinate relative to the first screen. */ + u32 cx; /**< Rectangle width. */ + u32 cy; /**< Rectangle height. */ +} vbva_report_input_mapping; + +/** Report the guest cursor position and query the host one. The host may wish + * to use the guest information to re-position its own cursor (though this is + * currently unlikely). + * @see VBVA_CURSOR_POSITION */ +typedef struct vbva_cursor_position { + u32 report_position; /**< Are we reporting a position? */ + u32 x; /**< Guest cursor X position */ + u32 y; /**< Guest cursor Y position */ +} vbva_cursor_position; + +#pragma pack() + +typedef uint64_t VBOXVIDEOOFFSET; + +#define VBOXVIDEOOFFSET_VOID ((VBOXVIDEOOFFSET)~0) + +#pragma pack(1) + +/* + * VBOXSHGSMI made on top HGSMI and allows receiving notifications + * about G->H command completion + */ +/* SHGSMI command header */ +typedef struct VBOXSHGSMIHEADER { + uint64_t pvNext; /*<- completion processing queue */ + u32 flags; /*<- see VBOXSHGSMI_FLAG_XXX Flags */ + u32 cRefs; /*<- command referece count */ + uint64_t u64Info1; /*<- contents depends on the flags value */ + uint64_t u64Info2; /*<- contents depends on the flags value */ +} VBOXSHGSMIHEADER, *PVBOXSHGSMIHEADER; + +typedef enum { + VBOXVDMACMD_TYPE_UNDEFINED = 0, + VBOXVDMACMD_TYPE_DMA_PRESENT_BLT = 1, + VBOXVDMACMD_TYPE_DMA_BPB_TRANSFER, + VBOXVDMACMD_TYPE_DMA_BPB_FILL, + VBOXVDMACMD_TYPE_DMA_PRESENT_SHADOW2PRIMARY, + VBOXVDMACMD_TYPE_DMA_PRESENT_CLRFILL, + VBOXVDMACMD_TYPE_DMA_PRESENT_FLIP, + VBOXVDMACMD_TYPE_DMA_NOP, + VBOXVDMACMD_TYPE_CHROMIUM_CMD, /* chromium cmd */ + VBOXVDMACMD_TYPE_DMA_BPB_TRANSFER_VRAMSYS, + VBOXVDMACMD_TYPE_CHILD_STATUS_IRQ /* make the device notify child (monitor) state change IRQ */ +} VBOXVDMACMD_TYPE; + +#pragma pack() + +/* the command processing was asynch, set by the host to indicate asynch command completion + * must not be cleared once set, the command completion is performed by issuing a host->guest completion command + * while keeping this flag unchanged */ +#define VBOXSHGSMI_FLAG_HG_ASYNCH 0x00010000 +#if 0 +/* if set - asynch completion is performed by issuing the event, + * if cleared - asynch completion is performed by calling a callback */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_EVENT 0x00000001 +#endif +/* issue interrupt on asynch completion, used for critical G->H commands, + * i.e. for completion of which guest is waiting. */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ 0x00000002 +/* guest does not do any op on completion of this command, + * the host may copy the command and indicate that it does not need the command anymore + * by not setting VBOXSHGSMI_FLAG_HG_ASYNCH */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_NOCOMPLETION 0x00000004 +/* guest requires the command to be processed asynchronously, + * not setting VBOXSHGSMI_FLAG_HG_ASYNCH by the host in this case is treated as command failure */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_FORCE 0x00000008 +/* force IRQ on cmd completion */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ_FORCE 0x00000010 +/* an IRQ-level callback is associated with the command */ +#define VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ 0x00000020 +/* guest expects this command to be completed synchronously */ +#define VBOXSHGSMI_FLAG_GH_SYNCH 0x00000040 + + +static inline u8 * VBoxSHGSMIBufferData (const VBOXSHGSMIHEADER* pHeader) +{ + return (u8 *)pHeader + sizeof (VBOXSHGSMIHEADER); +} + +#define VBoxSHGSMIBufferHeaderSize() (sizeof (VBOXSHGSMIHEADER)) + +static inline PVBOXSHGSMIHEADER VBoxSHGSMIBufferHeader (const void *pvData) +{ + return (PVBOXSHGSMIHEADER)((u8 *)pvData - sizeof (VBOXSHGSMIHEADER)); +} + +#ifdef VBOX_WITH_VDMA +# pragma pack(1) + +/* VDMA - Video DMA */ + +/* VDMA Control API */ +/* VBOXVDMA_CTL::flags */ +typedef enum { + VBOXVDMA_CTL_TYPE_NONE = 0, + VBOXVDMA_CTL_TYPE_ENABLE, + VBOXVDMA_CTL_TYPE_DISABLE, + VBOXVDMA_CTL_TYPE_FLUSH, + VBOXVDMA_CTL_TYPE_WATCHDOG +} VBOXVDMA_CTL_TYPE; + +typedef struct VBOXVDMA_CTL { + VBOXVDMA_CTL_TYPE enmCtl; + u32 offset; + s32 result; +} VBOXVDMA_CTL, *PVBOXVDMA_CTL; + +typedef struct VBOXVDMA_RECTL { + int16_t left; + int16_t top; + u16 width; + u16 height; +} VBOXVDMA_RECTL, *PVBOXVDMA_RECTL; + +typedef enum { + VBOXVDMA_PIXEL_FORMAT_UNKNOWN = 0, + VBOXVDMA_PIXEL_FORMAT_R8G8B8 = 20, + VBOXVDMA_PIXEL_FORMAT_A8R8G8B8 = 21, + VBOXVDMA_PIXEL_FORMAT_X8R8G8B8 = 22, + VBOXVDMA_PIXEL_FORMAT_R5G6B5 = 23, + VBOXVDMA_PIXEL_FORMAT_X1R5G5B5 = 24, + VBOXVDMA_PIXEL_FORMAT_A1R5G5B5 = 25, + VBOXVDMA_PIXEL_FORMAT_A4R4G4B4 = 26, + VBOXVDMA_PIXEL_FORMAT_R3G3B2 = 27, + VBOXVDMA_PIXEL_FORMAT_A8 = 28, + VBOXVDMA_PIXEL_FORMAT_A8R3G3B2 = 29, + VBOXVDMA_PIXEL_FORMAT_X4R4G4B4 = 30, + VBOXVDMA_PIXEL_FORMAT_A2B10G10R10 = 31, + VBOXVDMA_PIXEL_FORMAT_A8B8G8R8 = 32, + VBOXVDMA_PIXEL_FORMAT_X8B8G8R8 = 33, + VBOXVDMA_PIXEL_FORMAT_G16R16 = 34, + VBOXVDMA_PIXEL_FORMAT_A2R10G10B10 = 35, + VBOXVDMA_PIXEL_FORMAT_A16B16G16R16 = 36, + VBOXVDMA_PIXEL_FORMAT_A8P8 = 40, + VBOXVDMA_PIXEL_FORMAT_P8 = 41, + VBOXVDMA_PIXEL_FORMAT_L8 = 50, + VBOXVDMA_PIXEL_FORMAT_A8L8 = 51, + VBOXVDMA_PIXEL_FORMAT_A4L4 = 52, + VBOXVDMA_PIXEL_FORMAT_V8U8 = 60, + VBOXVDMA_PIXEL_FORMAT_L6V5U5 = 61, + VBOXVDMA_PIXEL_FORMAT_X8L8V8U8 = 62, + VBOXVDMA_PIXEL_FORMAT_Q8W8V8U8 = 63, + VBOXVDMA_PIXEL_FORMAT_V16U16 = 64, + VBOXVDMA_PIXEL_FORMAT_W11V11U10 = 65, + VBOXVDMA_PIXEL_FORMAT_A2W10V10U10 = 67 +} VBOXVDMA_PIXEL_FORMAT; + +typedef struct VBOXVDMA_SURF_DESC { + u32 width; + u32 height; + VBOXVDMA_PIXEL_FORMAT format; + u32 bpp; + u32 pitch; + u32 flags; +} VBOXVDMA_SURF_DESC, *PVBOXVDMA_SURF_DESC; + +/*typedef uint64_t VBOXVDMAPHADDRESS;*/ +typedef uint64_t VBOXVDMASURFHANDLE; + +/* region specified as a rectangle, otherwize it is a size of memory pointed to by phys address */ +#define VBOXVDMAOPERAND_FLAGS_RECTL 0x1 +/* Surface handle is valid */ +#define VBOXVDMAOPERAND_FLAGS_PRIMARY 0x2 +/* address is offset in VRAM */ +#define VBOXVDMAOPERAND_FLAGS_VRAMOFFSET 0x4 + + +/* VBOXVDMACBUF_DR::phBuf specifies offset in VRAM */ +#define VBOXVDMACBUF_FLAG_BUF_VRAM_OFFSET 0x00000001 +/* command buffer follows the VBOXVDMACBUF_DR in VRAM, VBOXVDMACBUF_DR::phBuf is ignored */ +#define VBOXVDMACBUF_FLAG_BUF_FOLLOWS_DR 0x00000002 + +/* + * We can not submit the DMA command via VRAM since we do not have control over + * DMA command buffer [de]allocation, i.e. we only control the buffer contents. + * In other words the system may call one of our callbacks to fill a command buffer + * with the necessary commands and then discard the buffer w/o any notification. + * + * We have only DMA command buffer physical address at submission time. + * + * so the only way is to */ +typedef struct VBOXVDMACBUF_DR { + u16 flags; + u16 cbBuf; + /* RT_SUCCESS() - on success + * VERR_INTERRUPTED - on preemption + * VERR_xxx - on error */ + s32 rc; + union { + uint64_t phBuf; + VBOXVIDEOOFFSET offVramBuf; + } Location; + uint64_t aGuestData[7]; +} VBOXVDMACBUF_DR, *PVBOXVDMACBUF_DR; + +#define VBOXVDMACBUF_DR_TAIL(_pCmd, _t) ( (_t*)(((u8*)(_pCmd)) + sizeof (VBOXVDMACBUF_DR)) ) +#define VBOXVDMACBUF_DR_FROM_TAIL(_pCmd) ( (VBOXVDMACBUF_DR*)(((u8*)(_pCmd)) - sizeof (VBOXVDMACBUF_DR)) ) + +typedef struct VBOXVDMACMD { + VBOXVDMACMD_TYPE enmType; + u32 u32CmdSpecific; +} VBOXVDMACMD, *PVBOXVDMACMD; + +#define VBOXVDMACMD_HEADER_SIZE() sizeof (VBOXVDMACMD) +#define VBOXVDMACMD_SIZE_FROMBODYSIZE(_s) (VBOXVDMACMD_HEADER_SIZE() + (_s)) +#define VBOXVDMACMD_SIZE(_t) (VBOXVDMACMD_SIZE_FROMBODYSIZE(sizeof (_t))) +#define VBOXVDMACMD_BODY(_pCmd, _t) ( (_t*)(((u8*)(_pCmd)) + VBOXVDMACMD_HEADER_SIZE()) ) +#define VBOXVDMACMD_BODY_SIZE(_s) ( (_s) - VBOXVDMACMD_HEADER_SIZE() ) +#define VBOXVDMACMD_FROM_BODY(_pCmd) ( (VBOXVDMACMD*)(((u8*)(_pCmd)) - VBOXVDMACMD_HEADER_SIZE()) ) +#define VBOXVDMACMD_BODY_FIELD_OFFSET(_ot, _t, _f) ( (_ot)(uintptr_t)( VBOXVDMACMD_BODY(0, u8) + RT_OFFSETOF(_t, _f) ) ) + +typedef struct VBOXVDMACMD_DMA_PRESENT_BLT { + VBOXVIDEOOFFSET offSrc; + VBOXVIDEOOFFSET offDst; + VBOXVDMA_SURF_DESC srcDesc; + VBOXVDMA_SURF_DESC dstDesc; + VBOXVDMA_RECTL srcRectl; + VBOXVDMA_RECTL dstRectl; + u32 reserved; + u32 cDstSubRects; + VBOXVDMA_RECTL aDstSubRects[1]; +} VBOXVDMACMD_DMA_PRESENT_BLT, *PVBOXVDMACMD_DMA_PRESENT_BLT; + +typedef struct VBOXVDMACMD_DMA_PRESENT_SHADOW2PRIMARY { + VBOXVDMA_RECTL Rect; +} VBOXVDMACMD_DMA_PRESENT_SHADOW2PRIMARY, *PVBOXVDMACMD_DMA_PRESENT_SHADOW2PRIMARY; + + +#define VBOXVDMACMD_DMA_BPB_TRANSFER_F_SRC_VRAMOFFSET 0x00000001 +#define VBOXVDMACMD_DMA_BPB_TRANSFER_F_DST_VRAMOFFSET 0x00000002 + +typedef struct VBOXVDMACMD_DMA_BPB_TRANSFER { + u32 cbTransferSize; + u32 flags; + union { + uint64_t phBuf; + VBOXVIDEOOFFSET offVramBuf; + } Src; + union { + uint64_t phBuf; + VBOXVIDEOOFFSET offVramBuf; + } Dst; +} VBOXVDMACMD_DMA_BPB_TRANSFER, *PVBOXVDMACMD_DMA_BPB_TRANSFER; + +#define VBOXVDMACMD_SYSMEMEL_F_PAGELIST 0x00000001 + +typedef struct VBOXVDMACMD_SYSMEMEL { + u32 cPages; + u32 flags; + uint64_t phBuf[1]; +} VBOXVDMACMD_SYSMEMEL, *PVBOXVDMACMD_SYSMEMEL; + +#define VBOXVDMACMD_SYSMEMEL_NEXT(_pEl) (((_pEl)->flags & VBOXVDMACMD_SYSMEMEL_F_PAGELIST) ? \ + ((PVBOXVDMACMD_SYSMEMEL)(((u8*)(_pEl))+RT_OFFSETOF(VBOXVDMACMD_SYSMEMEL, phBuf[(_pEl)->cPages]))) \ + : \ + ((_pEl)+1) + +#define VBOXVDMACMD_DMA_BPB_TRANSFER_VRAMSYS_SYS2VRAM 0x00000001 + +typedef struct VBOXVDMACMD_DMA_BPB_TRANSFER_VRAMSYS { + u32 cTransferPages; + u32 flags; + VBOXVIDEOOFFSET offVramBuf; + VBOXVDMACMD_SYSMEMEL FirstEl; +} VBOXVDMACMD_DMA_BPB_TRANSFER_VRAMSYS, *PVBOXVDMACMD_DMA_BPB_TRANSFER_VRAMSYS; + +typedef struct VBOXVDMACMD_DMA_BPB_FILL { + VBOXVIDEOOFFSET offSurf; + u32 cbFillSize; + u32 u32FillPattern; +} VBOXVDMACMD_DMA_BPB_FILL, *PVBOXVDMACMD_DMA_BPB_FILL; + +#define VBOXVDMA_CHILD_STATUS_F_CONNECTED 0x01 +#define VBOXVDMA_CHILD_STATUS_F_DISCONNECTED 0x02 +#define VBOXVDMA_CHILD_STATUS_F_ROTATED 0x04 + +typedef struct VBOXVDMA_CHILD_STATUS { + u32 iChild; + u8 flags; + u8 u8RotationAngle; + u16 u16Reserved; +} VBOXVDMA_CHILD_STATUS, *PVBOXVDMA_CHILD_STATUS; + +/* apply the aInfos are applied to all targets, the iTarget is ignored */ +#define VBOXVDMACMD_CHILD_STATUS_IRQ_F_APPLY_TO_ALL 0x00000001 + +typedef struct VBOXVDMACMD_CHILD_STATUS_IRQ { + u32 cInfos; + u32 flags; + VBOXVDMA_CHILD_STATUS aInfos[1]; +} VBOXVDMACMD_CHILD_STATUS_IRQ, *PVBOXVDMACMD_CHILD_STATUS_IRQ; + +# pragma pack() +#endif /* #ifdef VBOX_WITH_VDMA */ + +#pragma pack(1) +typedef struct VBOXVDMACMD_CHROMIUM_BUFFER { + VBOXVIDEOOFFSET offBuffer; + u32 buffer_length; + u32 u32GuestData; + uint64_t u64GuestData; +} VBOXVDMACMD_CHROMIUM_BUFFER, *PVBOXVDMACMD_CHROMIUM_BUFFER; + +typedef struct VBOXVDMACMD_CHROMIUM_CMD { + u32 cBuffers; + u32 reserved; + VBOXVDMACMD_CHROMIUM_BUFFER aBuffers[1]; +} VBOXVDMACMD_CHROMIUM_CMD, *PVBOXVDMACMD_CHROMIUM_CMD; + +typedef enum { + VBOXVDMACMD_CHROMIUM_CTL_TYPE_UNKNOWN = 0, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_SAVESTATE_BEGIN, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_SAVESTATE_END, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_MAINCB, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRCONNECT, + VBOXVDMACMD_CHROMIUM_CTL_TYPE_SIZEHACK = 0x7fffffff +} VBOXVDMACMD_CHROMIUM_CTL_TYPE; + +typedef struct VBOXVDMACMD_CHROMIUM_CTL { + VBOXVDMACMD_CHROMIUM_CTL_TYPE enmType; + u32 cbCmd; +} VBOXVDMACMD_CHROMIUM_CTL, *PVBOXVDMACMD_CHROMIUM_CTL; + + +typedef struct PDMIDISPLAYVBVACALLBACKS *HCRHGSMICMDCOMPLETION; +typedef int FNCRHGSMICMDCOMPLETION(HCRHGSMICMDCOMPLETION hCompletion, PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc); +typedef FNCRHGSMICMDCOMPLETION *PFNCRHGSMICMDCOMPLETION; + +/* tells whether 3D backend has some 3D overlay data displayed */ +typedef bool FNCROGLHASDATA(void); +typedef FNCROGLHASDATA *PFNCROGLHASDATA; + +/* same as PFNCROGLHASDATA, but for specific screen */ +typedef bool FNCROGLHASDATAFORSCREEN(u32 i32ScreenID); +typedef FNCROGLHASDATAFORSCREEN *PFNCROGLHASDATAFORSCREEN; + +/* callbacks chrogl gives to main */ +typedef struct CR_MAIN_INTERFACE { + PFNCROGLHASDATA pfnHasData; + PFNCROGLHASDATAFORSCREEN pfnHasDataForScreen; +} CR_MAIN_INTERFACE; + +typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP_MAINCB { + VBOXVDMACMD_CHROMIUM_CTL Hdr; + /*in*/ + HCRHGSMICMDCOMPLETION hCompletion; + PFNCRHGSMICMDCOMPLETION pfnCompletion; + /*out*/ + CR_MAIN_INTERFACE MainInterface; +} VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP_MAINCB, *PVBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP_MAINCB; + +typedef struct VBOXCRCON_SERVER *HVBOXCRCON_SERVER; +typedef struct PDMIDISPLAYVBVACALLBACKS* HVBOXCRCON_CLIENT; + +typedef struct VBOXCRCON_3DRGN_CLIENT* HVBOXCRCON_3DRGN_CLIENT; +typedef struct VBOXCRCON_3DRGN_ASYNCCLIENT* HVBOXCRCON_3DRGN_ASYNCCLIENT; + +/* server callbacks */ +/* submit chromium cmd */ +typedef int FNVBOXCRCON_SVR_CRCMD(HVBOXCRCON_SERVER hServer, PVBOXVDMACMD_CHROMIUM_CMD pCmd, u32 cbCmd); +typedef FNVBOXCRCON_SVR_CRCMD *PFNVBOXCRCON_SVR_CRCMD; + +/* submit chromium control cmd */ +typedef int FNVBOXCRCON_SVR_CRCTL(HVBOXCRCON_SERVER hServer, PVBOXVDMACMD_CHROMIUM_CTL pCtl, u32 cbCmd); +typedef FNVBOXCRCON_SVR_CRCTL *PFNVBOXCRCON_SVR_CRCTL; + +/* request 3D data. + * The protocol is the following: + * 1. if there is no 3D data displayed on screen, returns VINF_EOF immediately w/o calling any PFNVBOXCRCON_3DRGN_XXX callbacks + * 2. otherwise calls PFNVBOXCRCON_3DRGN_ONSUBMIT, submits the "regions get" request to the CrOpenGL server to process it asynchronously and returns VINF_SUCCESS + * 2.a on "regions get" request processing calls PFNVBOXCRCON_3DRGN_BEGIN, + * 2.b then PFNVBOXCRCON_3DRGN_REPORT zero or more times for each 3D region, + * 2.c and then PFNVBOXCRCON_3DRGN_END + * 3. returns VERR_XXX code on failure + * */ +typedef int FNVBOXCRCON_SVR_3DRGN_GET(HVBOXCRCON_SERVER hServer, HVBOXCRCON_3DRGN_CLIENT hRgnClient, u32 idScreen); +typedef FNVBOXCRCON_SVR_3DRGN_GET *PFNVBOXCRCON_SVR_3DRGN_GET; + +/* 3D Regions Client callbacks */ +/* called from the PFNVBOXCRCON_SVR_3DRGN_GET callback in case server has 3D data and is going to process the request asynchronously, + * see comments for PFNVBOXCRCON_SVR_3DRGN_GET above */ +typedef int FNVBOXCRCON_3DRGN_ONSUBMIT(HVBOXCRCON_3DRGN_CLIENT hRgnClient, u32 idScreen, HVBOXCRCON_3DRGN_ASYNCCLIENT *phRgnAsyncClient); +typedef FNVBOXCRCON_3DRGN_ONSUBMIT *PFNVBOXCRCON_3DRGN_ONSUBMIT; + +/* called from the "regions get" command processing thread, to indicate that the "regions get" is started. + * see comments for PFNVBOXCRCON_SVR_3DRGN_GET above */ +typedef int FNVBOXCRCON_3DRGN_BEGIN(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, u32 idScreen); +typedef FNVBOXCRCON_3DRGN_BEGIN *PFNVBOXCRCON_3DRGN_BEGIN; + +/* called from the "regions get" command processing thread, to report a 3D region. + * see comments for PFNVBOXCRCON_SVR_3DRGN_GET above */ +typedef int FNVBOXCRCON_3DRGN_REPORT(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, u32 idScreen, void *pvData, u32 cbStride, const void *pRect); +typedef FNVBOXCRCON_3DRGN_REPORT *PFNVBOXCRCON_3DRGN_REPORT; + +/* called from the "regions get" command processing thread, to indicate that the "regions get" is completed. + * see comments for PFNVBOXCRCON_SVR_3DRGN_GET above */ +typedef int FNVBOXCRCON_3DRGN_END(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, u32 idScreen); +typedef FNVBOXCRCON_3DRGN_END *PFNVBOXCRCON_3DRGN_END; + + +/* client callbacks */ +/* complete chromium cmd */ +typedef int FNVBOXCRCON_CLT_CRCTL_COMPLETE(HVBOXCRCON_CLIENT hClient, PVBOXVDMACMD_CHROMIUM_CTL pCtl, int rc); +typedef FNVBOXCRCON_CLT_CRCTL_COMPLETE *PFNVBOXCRCON_CLT_CRCTL_COMPLETE; + +/* complete chromium control cmd */ +typedef int FNVBOXCRCON_CLT_CRCMD_COMPLETE(HVBOXCRCON_CLIENT hClient, PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc); +typedef FNVBOXCRCON_CLT_CRCMD_COMPLETE *PFNVBOXCRCON_CLT_CRCMD_COMPLETE; + +typedef struct VBOXCRCON_SERVER_CALLBACKS { + HVBOXCRCON_SERVER hServer; + PFNVBOXCRCON_SVR_CRCMD pfnCrCmd; + PFNVBOXCRCON_SVR_CRCTL pfnCrCtl; + PFNVBOXCRCON_SVR_3DRGN_GET pfn3DRgnGet; +} VBOXCRCON_SERVER_CALLBACKS, *PVBOXCRCON_SERVER_CALLBACKS; + +typedef struct VBOXCRCON_CLIENT_CALLBACKS { + HVBOXCRCON_CLIENT hClient; + PFNVBOXCRCON_CLT_CRCMD_COMPLETE pfnCrCmdComplete; + PFNVBOXCRCON_CLT_CRCTL_COMPLETE pfnCrCtlComplete; + PFNVBOXCRCON_3DRGN_ONSUBMIT pfn3DRgnOnSubmit; + PFNVBOXCRCON_3DRGN_BEGIN pfn3DRgnBegin; + PFNVBOXCRCON_3DRGN_REPORT pfn3DRgnReport; + PFNVBOXCRCON_3DRGN_END pfn3DRgnEnd; +} VBOXCRCON_CLIENT_CALLBACKS, *PVBOXCRCON_CLIENT_CALLBACKS; + +/* issued by Main to establish connection between Main and CrOpenGL service */ +typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRCONNECT { + VBOXVDMACMD_CHROMIUM_CTL Hdr; + /*input (filled by Client) :*/ + /*class VMMDev*/void *pVMMDev; + VBOXCRCON_CLIENT_CALLBACKS ClientCallbacks; + /*output (filled by Server) :*/ + VBOXCRCON_SERVER_CALLBACKS ServerCallbacks; +} VBOXVDMACMD_CHROMIUM_CTL_CRCONNECT, *PVBOXVDMACMD_CHROMIUM_CTL_CRCONNECT; + +/* ring command buffer dr */ +#define VBOXCMDVBVA_STATE_SUBMITTED 1 +#define VBOXCMDVBVA_STATE_CANCELLED 2 +#define VBOXCMDVBVA_STATE_IN_PROGRESS 3 +/* the "completed" state is signalled via the ring buffer values */ + +/* CrHgsmi command */ +#define VBOXCMDVBVA_OPTYPE_CRCMD 1 +/* blit command that does blitting of allocations identified by VRAM offset or host id + * for VRAM-offset ones the size and format are same as primary */ +#define VBOXCMDVBVA_OPTYPE_BLT 2 +/* flip */ +#define VBOXCMDVBVA_OPTYPE_FLIP 3 +/* ColorFill */ +#define VBOXCMDVBVA_OPTYPE_CLRFILL 4 +/* allocation paging transfer request */ +#define VBOXCMDVBVA_OPTYPE_PAGING_TRANSFER 5 +/* allocation paging fill request */ +#define VBOXCMDVBVA_OPTYPE_PAGING_FILL 6 +/* same as VBOXCMDVBVA_OPTYPE_NOP, but contains VBOXCMDVBVA_HDR data */ +#define VBOXCMDVBVA_OPTYPE_NOPCMD 7 +/* actual command is stored in guest system memory */ +#define VBOXCMDVBVA_OPTYPE_SYSMEMCMD 8 +/* complex command - i.e. can contain multiple commands + * i.e. the VBOXCMDVBVA_OPTYPE_COMPLEXCMD VBOXCMDVBVA_HDR is followed + * by one or more VBOXCMDVBVA_HDR commands. + * Each command's size is specified in it's VBOXCMDVBVA_HDR's u32FenceID field */ +#define VBOXCMDVBVA_OPTYPE_COMPLEXCMD 9 + +/* nop - is a one-bit command. The buffer size to skip is determined by VBVA buffer size */ +#define VBOXCMDVBVA_OPTYPE_NOP 0x80 + +/* u8Flags flags */ +/* transfer from RAM to Allocation */ +#define VBOXCMDVBVA_OPF_PAGING_TRANSFER_IN 0x80 + +#define VBOXCMDVBVA_OPF_BLT_TYPE_SAMEDIM_A8R8G8B8 0 +#define VBOXCMDVBVA_OPF_BLT_TYPE_GENERIC_A8R8G8B8 1 +#define VBOXCMDVBVA_OPF_BLT_TYPE_OFFPRIMSZFMT_OR_ID 2 + +#define VBOXCMDVBVA_OPF_BLT_TYPE_MASK 3 + + +#define VBOXCMDVBVA_OPF_CLRFILL_TYPE_GENERIC_A8R8G8B8 0 + +#define VBOXCMDVBVA_OPF_CLRFILL_TYPE_MASK 1 + + +/* blit direction is from first operand to second */ +#define VBOXCMDVBVA_OPF_BLT_DIR_IN_2 0x10 +/* operand 1 contains host id */ +#define VBOXCMDVBVA_OPF_OPERAND1_ISID 0x20 +/* operand 2 contains host id */ +#define VBOXCMDVBVA_OPF_OPERAND2_ISID 0x40 +/* primary hint id is src */ +#define VBOXCMDVBVA_OPF_PRIMARY_HINT_SRC 0x80 + +/* trying to make the header as small as possible, + * we'd have pretty few op codes actually, so 8bit is quite enough, + * we will be able to extend it in any way. */ +typedef struct VBOXCMDVBVA_HDR { + /* one VBOXCMDVBVA_OPTYPE_XXX, except NOP, see comments above */ + u8 u8OpCode; + /* command-specific + * VBOXCMDVBVA_OPTYPE_CRCMD - must be null + * VBOXCMDVBVA_OPTYPE_BLT - OR-ed VBOXCMDVBVA_OPF_ALLOC_XXX flags + * VBOXCMDVBVA_OPTYPE_PAGING_TRANSFER - must be null + * VBOXCMDVBVA_OPTYPE_PAGING_FILL - must be null + * VBOXCMDVBVA_OPTYPE_NOPCMD - must be null + * VBOXCMDVBVA_OPTYPE_NOP - not applicable (as the entire VBOXCMDVBVA_HDR is not valid) */ + u8 u8Flags; + /* one of VBOXCMDVBVA_STATE_XXX*/ + volatile u8 u8State; + union { + /* result, 0 on success, otherwise contains the failure code TBD */ + int8_t i8Result; + u8 u8PrimaryID; + } u; + union { + /* complex command (VBOXCMDVBVA_OPTYPE_COMPLEXCMD) element data */ + struct { + /* command length */ + u16 u16CbCmdHost; + /* guest-specific data, host expects it to be NULL */ + u16 u16CbCmdGuest; + } complexCmdEl; + /* DXGK DDI fence ID */ + u32 u32FenceID; + } u2; +} VBOXCMDVBVA_HDR; + +typedef u32 VBOXCMDVBVAOFFSET; +typedef uint64_t VBOXCMDVBVAPHADDR; +typedef u32 VBOXCMDVBVAPAGEIDX; + +typedef struct VBOXCMDVBVA_CRCMD_BUFFER { + u32 buffer_length; + VBOXCMDVBVAOFFSET offBuffer; +} VBOXCMDVBVA_CRCMD_BUFFER; + +typedef struct VBOXCMDVBVA_CRCMD_CMD { + u32 cBuffers; + VBOXCMDVBVA_CRCMD_BUFFER aBuffers[1]; +} VBOXCMDVBVA_CRCMD_CMD; + +typedef struct VBOXCMDVBVA_CRCMD { + VBOXCMDVBVA_HDR Hdr; + VBOXCMDVBVA_CRCMD_CMD Cmd; +} VBOXCMDVBVA_CRCMD; + +typedef struct VBOXCMDVBVA_ALLOCINFO { + union { + VBOXCMDVBVAOFFSET offVRAM; + u32 id; + } u; +} VBOXCMDVBVA_ALLOCINFO; + +typedef struct VBOXCMDVBVA_ALLOCDESC { + VBOXCMDVBVA_ALLOCINFO Info; + u16 u16Width; + u16 u16Height; +} VBOXCMDVBVA_ALLOCDESC; + +typedef struct VBOXCMDVBVA_RECT { + /** Coordinates of affected rectangle. */ + int16_t xLeft; + int16_t yTop; + int16_t xRight; + int16_t yBottom; +} VBOXCMDVBVA_RECT; + +typedef struct VBOXCMDVBVA_POINT { + int16_t x; + int16_t y; +} VBOXCMDVBVA_POINT; + +typedef struct VBOXCMDVBVA_BLT_HDR { + VBOXCMDVBVA_HDR Hdr; + VBOXCMDVBVA_POINT Pos; +} VBOXCMDVBVA_BLT_HDR; + +typedef struct VBOXCMDVBVA_BLT_PRIMARY { + VBOXCMDVBVA_BLT_HDR Hdr; + VBOXCMDVBVA_ALLOCINFO alloc; + /* the rects count is determined from the command size */ + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_BLT_PRIMARY; + +typedef struct VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8 { + VBOXCMDVBVA_BLT_HDR Hdr; + VBOXCMDVBVA_ALLOCDESC alloc; + /* the rects count is determined from the command size */ + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8; + +typedef struct VBOXCMDVBVA_BLT_OFFPRIMSZFMT_OR_ID { + VBOXCMDVBVA_BLT_HDR Hdr; + VBOXCMDVBVA_ALLOCINFO alloc; + u32 id; + /* the rects count is determined from the command size */ + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_BLT_OFFPRIMSZFMT_OR_ID; + +typedef struct VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8 { + VBOXCMDVBVA_BLT_HDR Hdr; + VBOXCMDVBVA_ALLOCDESC alloc1; + VBOXCMDVBVA_ALLOCINFO info2; + /* the rects count is determined from the command size */ + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_BLT_SAMEDIM_A8R8G8B8; + +typedef struct VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8 { + VBOXCMDVBVA_BLT_HDR Hdr; + VBOXCMDVBVA_ALLOCDESC alloc1; + VBOXCMDVBVA_ALLOCDESC alloc2; + /* the rects count is determined from the command size */ + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8; + +#define VBOXCMDVBVA_SIZEOF_BLTSTRUCT_MAX (sizeof (VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8)) + +typedef struct VBOXCMDVBVA_FLIP { + VBOXCMDVBVA_HDR Hdr; + VBOXCMDVBVA_ALLOCINFO src; + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_FLIP; + +#define VBOXCMDVBVA_SIZEOF_FLIPSTRUCT_MIN (RT_OFFSETOF(VBOXCMDVBVA_FLIP, aRects)) + +typedef struct VBOXCMDVBVA_CLRFILL_HDR { + VBOXCMDVBVA_HDR Hdr; + u32 u32Color; +} VBOXCMDVBVA_CLRFILL_HDR; + +typedef struct VBOXCMDVBVA_CLRFILL_PRIMARY { + VBOXCMDVBVA_CLRFILL_HDR Hdr; + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_CLRFILL_PRIMARY; + +typedef struct VBOXCMDVBVA_CLRFILL_GENERIC_A8R8G8B8 { + VBOXCMDVBVA_CLRFILL_HDR Hdr; + VBOXCMDVBVA_ALLOCDESC dst; + VBOXCMDVBVA_RECT aRects[1]; +} VBOXCMDVBVA_CLRFILL_GENERIC_A8R8G8B8; + +#define VBOXCMDVBVA_SIZEOF_CLRFILLSTRUCT_MAX (sizeof (VBOXCMDVBVA_CLRFILL_GENERIC_A8R8G8B8)) + +#if 0 +#define VBOXCMDVBVA_SYSMEMEL_CPAGES_MAX 0x1000 + +typedef struct VBOXCMDVBVA_SYSMEMEL { + u32 cPagesAfterFirst : 12; + u32 iPage1 : 20; + u32 iPage2; +} VBOXCMDVBVA_SYSMEMEL; +#endif + +typedef struct VBOXCMDVBVA_PAGING_TRANSFER_DATA { + /* for now can only contain offVRAM. + * paging transfer can NOT be initiated for allocations having host 3D object (hostID) associated */ + VBOXCMDVBVA_ALLOCINFO Alloc; + VBOXCMDVBVAPAGEIDX aPageNumbers[1]; +} VBOXCMDVBVA_PAGING_TRANSFER_DATA; + +typedef struct VBOXCMDVBVA_PAGING_TRANSFER { + VBOXCMDVBVA_HDR Hdr; + VBOXCMDVBVA_PAGING_TRANSFER_DATA Data; +} VBOXCMDVBVA_PAGING_TRANSFER; + +typedef struct VBOXCMDVBVA_PAGING_FILL { + VBOXCMDVBVA_HDR Hdr; + u32 u32CbFill; + u32 u32Pattern; + /* paging transfer can NOT be initiated for allocations having host 3D object (hostID) associated */ + VBOXCMDVBVAOFFSET offVRAM; +} VBOXCMDVBVA_PAGING_FILL; + +typedef struct VBOXCMDVBVA_SYSMEMCMD { + VBOXCMDVBVA_HDR Hdr; + VBOXCMDVBVAPHADDR phCmd; +} VBOXCMDVBVA_SYSMEMCMD; + +#define VBOXCMDVBVACTL_TYPE_ENABLE 1 +#define VBOXCMDVBVACTL_TYPE_3DCTL 2 +#define VBOXCMDVBVACTL_TYPE_RESIZE 3 + +typedef struct VBOXCMDVBVA_CTL { + u32 u32Type; + s32 result; +} VBOXCMDVBVA_CTL; + +typedef struct VBOXCMDVBVA_CTL_ENABLE { + VBOXCMDVBVA_CTL Hdr; + VBVAENABLE Enable; +} VBOXCMDVBVA_CTL_ENABLE; + +#define VBOXCMDVBVA_SCREENMAP_SIZE(_elType) ((VBOX_VIDEO_MAX_SCREENS + sizeof (_elType) - 1) / sizeof (_elType)) +#define VBOXCMDVBVA_SCREENMAP_DECL(_elType, _name) _elType _name[VBOXCMDVBVA_SCREENMAP_SIZE(_elType)] + +typedef struct VBOXCMDVBVA_RESIZE_ENTRY { + VBVAINFOSCREEN Screen; + VBOXCMDVBVA_SCREENMAP_DECL(u32, aTargetMap); +} VBOXCMDVBVA_RESIZE_ENTRY; + +typedef struct VBOXCMDVBVA_RESIZE { + VBOXCMDVBVA_RESIZE_ENTRY aEntries[1]; +} VBOXCMDVBVA_RESIZE; + +typedef struct VBOXCMDVBVA_CTL_RESIZE { + VBOXCMDVBVA_CTL Hdr; + VBOXCMDVBVA_RESIZE Resize; +} VBOXCMDVBVA_CTL_RESIZE; + +#define VBOXCMDVBVA3DCTL_TYPE_CONNECT 1 +#define VBOXCMDVBVA3DCTL_TYPE_DISCONNECT 2 +#define VBOXCMDVBVA3DCTL_TYPE_CMD 3 + +typedef struct VBOXCMDVBVA_3DCTL { + u32 u32Type; + u32 u32CmdClientId; +} VBOXCMDVBVA_3DCTL; + +typedef struct VBOXCMDVBVA_3DCTL_CONNECT { + VBOXCMDVBVA_3DCTL Hdr; + u32 u32MajorVersion; + u32 u32MinorVersion; + uint64_t u64Pid; +} VBOXCMDVBVA_3DCTL_CONNECT; + +typedef struct VBOXCMDVBVA_3DCTL_CMD { + VBOXCMDVBVA_3DCTL Hdr; + VBOXCMDVBVA_HDR Cmd; +} VBOXCMDVBVA_3DCTL_CMD; + +typedef struct VBOXCMDVBVA_CTL_3DCTL_CMD { + VBOXCMDVBVA_CTL Hdr; + VBOXCMDVBVA_3DCTL_CMD Cmd; +} VBOXCMDVBVA_CTL_3DCTL_CMD; + +typedef struct VBOXCMDVBVA_CTL_3DCTL_CONNECT { + VBOXCMDVBVA_CTL Hdr; + VBOXCMDVBVA_3DCTL_CONNECT Connect; +} VBOXCMDVBVA_CTL_3DCTL_CONNECT; + +typedef struct VBOXCMDVBVA_CTL_3DCTL { + VBOXCMDVBVA_CTL Hdr; + VBOXCMDVBVA_3DCTL Ctl; +} VBOXCMDVBVA_CTL_3DCTL; + +#pragma pack() + + +#ifdef VBOXVDMA_WITH_VBVA +# pragma pack(1) + +typedef struct VBOXVDMAVBVACMD { + u32 offCmd; +} VBOXVDMAVBVACMD; + +#pragma pack() +#endif + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vboxvideo_guest.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vboxvideo_guest.h @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef ___VBox_Graphics_VBoxVideoGuest_h___ +#define ___VBox_Graphics_VBoxVideoGuest_h___ + +#include "vbox_err.h" +#include "vbox_drv.h" +#include "vboxvideo.h" + + +/** + * Structure grouping the context needed for sending graphics acceleration + * information to the host via VBVA. Each screen has its own VBVA buffer. + */ +typedef struct vbva_buf_context { + /** Offset of the buffer in the VRAM section for the screen */ + u32 buffer_offset; + /** Length of the buffer in bytes */ + u32 buffer_length; + /** This flag is set if we wrote to the buffer faster than the host could + * read it. */ + bool buffer_overflow; + /** The VBVA record that we are currently preparing for the host, NULL if + * none. */ + struct VBVARECORD *record; + /** Pointer to the VBVA buffer mapped into the current address space. Will + * be NULL if VBVA is not enabled. */ + struct VBVABUFFER *vbva; +} vbva_buf_context, *PVBVABUFFERCONTEXT; + +/** @name base HGSMI APIs + * @{ */ + +bool VBoxHGSMIIsSupported(void); +void VBoxHGSMIGetBaseMappingInfo(u32 cbVRAM, + u32 *poffVRAMBaseMapping, + u32 *pcbMapping, + u32 *poffGuestHeapMemory, + u32 *pcbGuestHeapMemory, + u32 *poffHostFlags); +int hgsmi_report_flags_location(struct gen_pool * ctx, + u32 location); +int hgsmi_send_caps_info(struct gen_pool * ctx, + u32 caps); +void VBoxHGSMIGetHostAreaMapping(struct gen_pool * ctx, + u32 cbVRAM, + u32 offVRAMBaseMapping, + u32 *poffVRAMHostArea, + u32 *pcbHostArea); +int VBoxHGSMISendHostCtxInfo(struct gen_pool * ctx, + u32 offVRAMFlagsLocation, + u32 caps, + u32 offVRAMHostArea, + u32 cbHostArea); +int hgsmi_query_conf(struct gen_pool * ctx, + u32 index, u32 *value_ret); +int VBoxQueryConfHGSMIDef(struct gen_pool * ctx, + u32 index, u32 u32DefValue, u32 *value_ret); +int hgsmi_update_pointer_shape(struct gen_pool * ctx, + u32 flags, + u32 hot_x, + u32 hot_y, + u32 width, + u32 height, + u8 *pixels, + u32 len); +int hgsmi_cursor_position(struct gen_pool * ctx, bool report_position, u32 x, u32 y, + u32 *x_host, u32 *y_host); + +/** @} */ + +/** @name VBVA APIs + * @{ */ +bool vbva_enable(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + struct VBVABUFFER *vbva, s32 screen); +void vbva_disable(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + s32 screen); +bool vbva_buffer_begin_update(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx); +void vbva_buffer_end_update(struct vbva_buf_context * ctx); +bool VBoxVBVAWrite(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + const void *pv, u32 len); +bool VBoxVBVAOrderSupported(struct vbva_buf_context * ctx, unsigned code); +void VBoxVBVASetupBufferContext(struct vbva_buf_context * ctx, + u32 buffer_offset, + u32 buffer_length); + +/** @} */ + +/** @name Modesetting APIs + * @{ */ + +u32 VBoxHGSMIGetMonitorCount(struct gen_pool * ctx); +u32 VBoxVideoGetVRAMSize(void); +bool VBoxVideoAnyWidthAllowed(void); +u16 VBoxHGSMIGetScreenFlags(struct gen_pool * ctx); + +struct VBVAINFOVIEW; +/** + * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise + * the @a VBVAINFOVIEW structure for each screen. + * + * @returns iprt status code + * @param pvData context data for the callback, passed to @a + * VBoxHGSMISendViewInfo along with the callback + * @param pInfo array of @a VBVAINFOVIEW structures to be filled in + * @todo explicitly pass the array size + */ +typedef int FNHGSMIFILLVIEWINFO(void *pvData, + struct VBVAINFOVIEW *pInfo, + u32 cViews); +/** Pointer to a FNHGSMIFILLVIEWINFO callback */ +typedef FNHGSMIFILLVIEWINFO *PFNHGSMIFILLVIEWINFO; + +int VBoxHGSMISendViewInfo(struct gen_pool * ctx, + u32 u32Count, + PFNHGSMIFILLVIEWINFO pfnFill, + void *pvData); +void VBoxVideoSetModeRegisters(u16 width, u16 height, + u16 cVirtWidth, u16 bpp, + u16 flags, + u16 cx, u16 cy); +bool VBoxVideoGetModeRegisters(u16 *pcWidth, + u16 *pcHeight, + u16 *pcVirtWidth, + u16 *pcBPP, + u16 *pfFlags); +void VBoxVideoDisableVBE(void); +void hgsmi_process_display_info(struct gen_pool * ctx, + u32 display, + s32 origin_x, + s32 origin_y, + u32 start_offset, + u32 pitch, + u32 width, + u32 height, + u16 bpp, + u16 flags); +int hgsmi_update_input_mapping(struct gen_pool * ctx, s32 origin_x, s32 origin_y, + u32 width, u32 height); +int hgsmi_get_mode_hints(struct gen_pool * ctx, + unsigned screens, struct vbva_modehint *hints); + +/** @} */ + + +#endif + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vboxvideo_vbe.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vboxvideo_vbe.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef ___VBox_Graphics_VBoxVideoVBE_h +#define ___VBox_Graphics_VBoxVideoVBE_h + +/* GUEST <-> HOST Communication API */ + +/** @todo FIXME: Either dynamicly ask host for this or put somewhere high in + * physical memory like 0xE0000000. */ + +#define VBE_DISPI_BANK_ADDRESS 0xA0000 +#define VBE_DISPI_BANK_SIZE_KB 64 + +#define VBE_DISPI_MAX_XRES 16384 +#define VBE_DISPI_MAX_YRES 16384 +#define VBE_DISPI_MAX_BPP 32 + +#define VBE_DISPI_IOPORT_INDEX 0x01CE +#define VBE_DISPI_IOPORT_DATA 0x01CF + +#define VBE_DISPI_IOPORT_DAC_WRITE_INDEX 0x03C8 +#define VBE_DISPI_IOPORT_DAC_DATA 0x03C9 + +#define VBE_DISPI_INDEX_ID 0x0 +#define VBE_DISPI_INDEX_XRES 0x1 +#define VBE_DISPI_INDEX_YRES 0x2 +#define VBE_DISPI_INDEX_BPP 0x3 +#define VBE_DISPI_INDEX_ENABLE 0x4 +#define VBE_DISPI_INDEX_BANK 0x5 +#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 +#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 +#define VBE_DISPI_INDEX_X_OFFSET 0x8 +#define VBE_DISPI_INDEX_Y_OFFSET 0x9 +#define VBE_DISPI_INDEX_VBOX_VIDEO 0xa +#define VBE_DISPI_INDEX_FB_BASE_HI 0xb + +#define VBE_DISPI_ID0 0xB0C0 +#define VBE_DISPI_ID1 0xB0C1 +#define VBE_DISPI_ID2 0xB0C2 +#define VBE_DISPI_ID3 0xB0C3 +#define VBE_DISPI_ID4 0xB0C4 + +#define VBE_DISPI_ID_VBOX_VIDEO 0xBE00 +/* The VBOX interface id. Indicates support for VBVA shared memory interface. */ +#define VBE_DISPI_ID_HGSMI 0xBE01 +#define VBE_DISPI_ID_ANYX 0xBE02 + +#define VBE_DISPI_DISABLED 0x00 +#define VBE_DISPI_ENABLED 0x01 +#define VBE_DISPI_GETCAPS 0x02 +#define VBE_DISPI_8BIT_DAC 0x20 +/** @note this definition is a BOCHS legacy, used only in the video BIOS + * code and ignored by the emulated hardware. */ +#define VBE_DISPI_LFB_ENABLED 0x40 +#define VBE_DISPI_NOCLEARMEM 0x80 + +#define VGA_PORT_HGSMI_HOST 0x3b0 +#define VGA_PORT_HGSMI_GUEST 0x3d0 + +#endif /* !___VBox_Graphics_VBoxVideoVBE_h */ + --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/vbva_base.c +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/vbva_base.c @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2006-2017 Oracle Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "vboxvideo_guest.h" +#include "vbox_err.h" +#include "hgsmi_channels.h" + +/* + * There is a hardware ring buffer in the graphics device video RAM, formerly + * in the VBox VMMDev PCI memory space. + * All graphics commands go there serialized by vbva_buffer_begin_update. + * and vbva_buffer_end_update. + * + * free_offset is writing position. data_offset is reading position. + * free_offset == data_offset means buffer is empty. + * There must be always gap between data_offset and free_offset when data + * are in the buffer. + * Guest only changes free_offset, host changes data_offset. + */ + +/* Forward declarations of internal functions. */ +static void vbva_buffer_flush(struct gen_pool * ctx); +static void vbva_buffer_place_data_at(struct vbva_buf_context * ctx, const void *p, + u32 len, u32 offset); +static bool vbva_write(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + const void *p, u32 len); + + +static bool vbva_inform_host(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + s32 screen, bool enable) +{ + bool ret = false; + +#if 0 /* All callers check this */ + if (ppdev->bHGSMISupported) +#endif + { + void *p = hgsmi_buffer_alloc(pHGSMICtx, + sizeof (struct vbva_enable_ex), + HGSMI_CH_VBVA, + VBVA_ENABLE); + if (!p) { + // LogFunc(("HGSMIHeapAlloc failed\n")); + } else { + struct vbva_enable_ex *pEnable = p; + + pEnable->base.flags = enable? VBVA_F_ENABLE: VBVA_F_DISABLE; + pEnable->base.offset = ctx->buffer_offset; + pEnable->base.result = VERR_NOT_SUPPORTED; + if (screen >= 0) { + pEnable->base.flags |= VBVA_F_EXTENDED | VBVA_F_ABSOFFSET; + pEnable->screen_id = screen; + } + + hgsmi_buffer_submit(pHGSMICtx, p); + + if (enable) { + ret = RT_SUCCESS(pEnable->base.result); + } else { + ret = true; + } + + hgsmi_buffer_free(pHGSMICtx, p); + } + } + + return ret; +} + +/* + * Public hardware buffer methods. + */ +bool vbva_enable(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + VBVABUFFER *vbva, s32 screen) +{ + bool ret = false; + + // LogFlowFunc(("vbva %p\n", vbva)); + +#if 0 /* All callers check this */ + if (ppdev->bHGSMISupported) +#endif + { + // LogFunc(("vbva %p vbva off 0x%x\n", vbva, ctx->buffer_offset)); + + vbva->host_flags.host_events = 0; + vbva->host_flags.supported_orders = 0; + vbva->data_offset = 0; + vbva->free_offset = 0; + memset(vbva->records, 0, sizeof (vbva->records)); + vbva->first_record_index = 0; + vbva->free_record_index = 0; + vbva->partial_write_tresh = 256; + vbva->data_len = ctx->buffer_length - sizeof (VBVABUFFER) + sizeof (vbva->data); + + ctx->buffer_overflow = false; + ctx->record = NULL; + ctx->vbva = vbva; + + ret = vbva_inform_host(ctx, pHGSMICtx, screen, true); + } + + if (!ret) { + vbva_disable(ctx, pHGSMICtx, screen); + } + + return ret; +} + +void vbva_disable(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + s32 screen) +{ + // LogFlowFunc(("\n")); + + ctx->buffer_overflow = false; + ctx->record = NULL; + ctx->vbva = NULL; + + vbva_inform_host(ctx, pHGSMICtx, screen, false); + + return; +} + +bool vbva_buffer_begin_update(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx) +{ + bool ret = false; + + // LogFunc(("flags = 0x%08X\n", ctx->vbva? ctx->vbva->host_events: -1)); + + if ( ctx->vbva + && (ctx->vbva->host_flags.host_events & VBVA_F_MODE_ENABLED)) { + u32 next; + + WARN_ON_ONCE(!((!ctx->buffer_overflow))); + WARN_ON_ONCE(!((ctx->record == NULL))); + + next = (ctx->vbva->free_record_index + 1) % VBVA_MAX_RECORDS; + + if (next == ctx->vbva->first_record_index) { + /* All slots in the records queue are used. */ + vbva_buffer_flush (pHGSMICtx); + } + + if (next == ctx->vbva->first_record_index) { + /* Even after flush there is no place. Fail the request. */ + // LogFunc(("no space in the queue of records!!! first %d, last %d\n", + // ctx->vbva->first_record_index, ctx->vbva->free_record_index)); + } else { + /* Initialize the record. */ + VBVARECORD *record = &ctx->vbva->records[ctx->vbva->free_record_index]; + + record->len_and_flags = VBVA_F_RECORD_PARTIAL; + + ctx->vbva->free_record_index = next; + + // LogFunc(("next = %d\n", next)); + + /* Remember which record we are using. */ + ctx->record = record; + + ret = true; + } + } + + return ret; +} + +void vbva_buffer_end_update(struct vbva_buf_context * ctx) +{ + VBVARECORD *record; + + // LogFunc(("\n")); + + WARN_ON_ONCE(!((ctx->vbva))); + + record = ctx->record; + WARN_ON_ONCE(!((record && (record->len_and_flags & VBVA_F_RECORD_PARTIAL)))); + + /* Mark the record completed. */ + record->len_and_flags &= ~VBVA_F_RECORD_PARTIAL; + + ctx->buffer_overflow = false; + ctx->record = NULL; + + return; +} + +/* + * Private operations. + */ +static u32 vbva_buffer_available (const VBVABUFFER *vbva) +{ + s32 diff = vbva->data_offset - vbva->free_offset; + + return diff > 0? diff: vbva->data_len + diff; +} + +static void vbva_buffer_flush(struct gen_pool * ctx) +{ + /* Issue the flush command. */ + void *p = hgsmi_buffer_alloc(ctx, + sizeof (VBVAFLUSH), + HGSMI_CH_VBVA, + VBVA_FLUSH); + if (!p) { + // LogFunc(("HGSMIHeapAlloc failed\n")); + } else { + VBVAFLUSH *pFlush = (VBVAFLUSH *)p; + + pFlush->reserved = 0; + + hgsmi_buffer_submit(ctx, p); + + hgsmi_buffer_free(ctx, p); + } + + return; +} + +static void vbva_buffer_place_data_at(struct vbva_buf_context * ctx, const void *p, + u32 len, u32 offset) +{ + VBVABUFFER *vbva = ctx->vbva; + u32 bytes_till_boundary = vbva->data_len - offset; + u8 *dst = &vbva->data[offset]; + s32 diff = len - bytes_till_boundary; + + if (diff <= 0) { + /* Chunk will not cross buffer boundary. */ + memcpy (dst, p, len); + } else { + /* Chunk crosses buffer boundary. */ + memcpy (dst, p, bytes_till_boundary); + memcpy (&vbva->data[0], (u8 *)p + bytes_till_boundary, diff); + } + + return; +} + +static bool vbva_write(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + const void *p, u32 len) +{ + VBVARECORD *record; + u32 available; + + u32 cbWritten = 0; + + VBVABUFFER *vbva = ctx->vbva; + WARN_ON_ONCE(!((vbva))); + + if (!vbva || ctx->buffer_overflow) { + return false; + } + + WARN_ON_ONCE(!((vbva->first_record_index != vbva->free_record_index))); + + record = ctx->record; + WARN_ON_ONCE(!((record && (record->len_and_flags & VBVA_F_RECORD_PARTIAL)))); + + // LogFunc(("%d\n", len)); + + available = vbva_buffer_available (vbva); + + while (len > 0) { + u32 chunk = len; + + // LogFunc(("vbva->free_offset %d, record->len_and_flags 0x%08X, available %d, len %d, cbWritten %d\n", + // vbva->free_offset, record->len_and_flags, available, len, cbWritten)); + + if (chunk >= available) { + // LogFunc(("1) avail %d, chunk %d\n", available, chunk)); + + vbva_buffer_flush (pHGSMICtx); + + available = vbva_buffer_available (vbva); + + if (chunk >= available) { + // LogFunc(("no place for %d bytes. Only %d bytes available after flush. Going to partial writes.\n", + // len, available)); + + if (available <= vbva->partial_write_tresh) { + // LogFunc(("Buffer overflow!!!\n")); + ctx->buffer_overflow = true; + WARN_ON_ONCE(!((false))); + return false; + } + + chunk = available - vbva->partial_write_tresh; + } + } + + WARN_ON_ONCE(!((chunk <= len))); + WARN_ON_ONCE(!((chunk <= vbva_buffer_available (vbva)))); + + vbva_buffer_place_data_at (ctx, (u8 *)p + cbWritten, chunk, vbva->free_offset); + + vbva->free_offset = (vbva->free_offset + chunk) % vbva->data_len; + record->len_and_flags += chunk; + available -= chunk; + + len -= chunk; + cbWritten += chunk; + } + + return true; +} + +/* + * Public writer to the hardware buffer. + */ +bool VBoxVBVAWrite(struct vbva_buf_context * ctx, + struct gen_pool * pHGSMICtx, + const void *pv, u32 len) +{ + return vbva_write (ctx, pHGSMICtx, pv, len); +} + +bool VBoxVBVAOrderSupported(struct vbva_buf_context * ctx, unsigned code) +{ + VBVABUFFER *vbva = ctx->vbva; + + if (!vbva) { + return false; + } + + if (vbva->host_flags.supported_orders & (1 << code)) { + return true; + } + + return false; +} + +void VBoxVBVASetupBufferContext(struct vbva_buf_context * ctx, + u32 buffer_offset, + u32 buffer_length) +{ + ctx->buffer_offset = buffer_offset; + ctx->buffer_length = buffer_length; +} --- linux-aws-4.15.0.orig/ubuntu/vbox/vboxvideo/version-generated.h +++ linux-aws-4.15.0/ubuntu/vbox/vboxvideo/version-generated.h @@ -0,0 +1,13 @@ +#ifndef ___version_generated_h___ +#define ___version_generated_h___ + +#define VBOX_VERSION_MAJOR 5 +#define VBOX_VERSION_MINOR 2 +#define VBOX_VERSION_BUILD 6 +#define VBOX_VERSION_STRING_RAW "5.2.6" +#define VBOX_VERSION_STRING "5.2.6_KernelUbuntu" +#define VBOX_API_VERSION_STRING "5_2" + +#define VBOX_PRIVATE_BUILD_DESC "Private build by buildd" + +#endif --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/Makefile +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/Makefile @@ -0,0 +1,15 @@ +obj-m := xr_usb_serial_common.o + +KERNELDIR ?= /lib/modules/$(shell uname -r)/build +PWD := $(shell pwd) + +EXTRA_CFLAGS := -DDEBUG=0 + +all: + $(MAKE) -C $(KERNELDIR) M=$(PWD) + +modules_install: + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install + +clean: + rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions vtty --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/README.txt +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/README.txt @@ -0,0 +1,50 @@ +Exar USB Serial Driver +====================== +Version 1A, 1/9/2015 + +This driver will work with any USB UART function in these Exar devices: + XR21V1410/1412/1414 + XR21B1411 + XR21B1420/1422/1424 + XR22801/802/804 + +The source code has been tested on various Linux kernels from 3.6.x to 3.17.x. +This may also work with newer kernels as well. + + +Installation +------------ + +* Compile and install the common usb serial driver module + + # make + # insmod ./xr_usb_serial_common.ko + + +* Plug the device into the USB host. You should see up to four devices created, + typically /dev/ttyXRUSB[0-3]. + + +Tips for Debugging +------------------ + +* Check that the USB UART is detected by the system + + # lsusb + +* Check that the CDC-ACM driver was not installed for the Exar USB UART + + # ls /dev/tty* + + To remove the CDC-ACM driver and install the driver: + + # rmmod cdc-acm + # modprobe -r usbserial + # modprobe usbserial + # insmod ./xr_usb_serial_common.ko + + +Technical Support +----------------- +Send any technical questions/issues to uarttechsupport@exar.com. + --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/xr_usb_serial_common.c +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/xr_usb_serial_common.c @@ -0,0 +1,1802 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + /* + * Copyright (c) 2015 Exar Corporation, Inc. + * + * This driver will work with any USB UART function in these Exar devices: + * XR21V1410/1412/1414 + * XR21B1411 + * XR21B1420/1422/1424 + * XR22801/802/804 + * + * The driver has been tested on various kernel versions from 3.6.x to 3.17.x. + * This driver may work on newer versions as well. There is a different driver available + * from www.exar.com that will work with kernel versions 2.6.18 to 3.4.x. + * + * ChangeLog: + * Version 1A - Initial released version. + */ + +//#undef DEBUG +#undef VERBOSE_DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "linux/version.h" + +#include "xr_usb_serial_common.h" +#include "xr_usb_serial_ioctl.h" + + +#define DRIVER_AUTHOR "" +#define DRIVER_DESC "Exar USB UART (serial port) driver" + +static struct usb_driver xr_usb_serial_driver; +static struct tty_driver *xr_usb_serial_tty_driver; +static struct xr_usb_serial *xr_usb_serial_table[XR_USB_SERIAL_TTY_MINORS]; + +static DEFINE_MUTEX(xr_usb_serial_table_lock); + +/* + * xr_usb_serial_table accessors + */ + +/* + * Look up an XR_USB_SERIAL structure by index. If found and not disconnected, increment + * its refcount and return it with its mutex held. + */ +static struct xr_usb_serial *xr_usb_serial_get_by_index(unsigned index) +{ + struct xr_usb_serial *xr_usb_serial; + + mutex_lock(&xr_usb_serial_table_lock); + xr_usb_serial = xr_usb_serial_table[index]; + if (xr_usb_serial) { + mutex_lock(&xr_usb_serial->mutex); + if (xr_usb_serial->disconnected) { + mutex_unlock(&xr_usb_serial->mutex); + xr_usb_serial = NULL; + } else { + tty_port_get(&xr_usb_serial->port); + mutex_unlock(&xr_usb_serial->mutex); + } + } + mutex_unlock(&xr_usb_serial_table_lock); + return xr_usb_serial; +} + +/* + * Try to find an available minor number and if found, associate it with 'xr_usb_serial'. + */ +static int xr_usb_serial_alloc_minor(struct xr_usb_serial *xr_usb_serial) +{ + int minor; + + mutex_lock(&xr_usb_serial_table_lock); + for (minor = 0; minor < XR_USB_SERIAL_TTY_MINORS; minor++) { + if (!xr_usb_serial_table[minor]) { + xr_usb_serial_table[minor] = xr_usb_serial; + break; + } + } + mutex_unlock(&xr_usb_serial_table_lock); + + return minor; +} + +/* Release the minor number associated with 'xr_usb_serial'. */ +static void xr_usb_serial_release_minor(struct xr_usb_serial *xr_usb_serial) +{ + mutex_lock(&xr_usb_serial_table_lock); + xr_usb_serial_table[xr_usb_serial->minor] = NULL; + mutex_unlock(&xr_usb_serial_table_lock); +} + +/* + * Functions for XR_USB_SERIAL control messages. + */ + +static int xr_usb_serial_ctrl_msg(struct xr_usb_serial *xr_usb_serial, int request, int value, + void *buf, int len) +{ + int retval = usb_control_msg(xr_usb_serial->dev, usb_sndctrlpipe(xr_usb_serial->dev, 0), + request, USB_RT_XR_USB_SERIAL, value, + xr_usb_serial->control->altsetting[0].desc.bInterfaceNumber, + buf, len, 5000); + dev_dbg(&xr_usb_serial->control->dev, + "%s - rq 0x%02x, val %#x, len %#x, result %d\n", + __func__, request, value, len, retval); + return retval < 0 ? retval : 0; +} + +#include "xr_usb_serial_hal.c" + + +/* + * Write buffer management. + * All of these assume proper locks taken by the caller. + */ + +static int xr_usb_serial_wb_alloc(struct xr_usb_serial *xr_usb_serial) +{ + int i, wbn; + struct xr_usb_serial_wb *wb; + + wbn = 0; + i = 0; + for (;;) { + wb = &xr_usb_serial->wb[wbn]; + if (!wb->use) { + wb->use = 1; + return wbn; + } + wbn = (wbn + 1) % XR_USB_SERIAL_NW; + if (++i >= XR_USB_SERIAL_NW) + return -1; + } +} + +static int xr_usb_serial_wb_is_avail(struct xr_usb_serial *xr_usb_serial) +{ + int i, n; + unsigned long flags; + + n = XR_USB_SERIAL_NW; + spin_lock_irqsave(&xr_usb_serial->write_lock, flags); + for (i = 0; i < XR_USB_SERIAL_NW; i++) + n -= xr_usb_serial->wb[i].use; + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + return n; +} + +/* + * Finish write. Caller must hold xr_usb_serial->write_lock + */ +static void xr_usb_serial_write_done(struct xr_usb_serial *xr_usb_serial, struct xr_usb_serial_wb *wb) +{ + wb->use = 0; + xr_usb_serial->transmitting--; + usb_autopm_put_interface_async(xr_usb_serial->control); +} + +/* + * Poke write. + * + * the caller is responsible for locking + */ + +static int xr_usb_serial_start_wb(struct xr_usb_serial *xr_usb_serial, struct xr_usb_serial_wb *wb) +{ + int rc; + + xr_usb_serial->transmitting++; + + wb->urb->transfer_buffer = wb->buf; + wb->urb->transfer_dma = wb->dmah; + wb->urb->transfer_buffer_length = wb->len; + wb->urb->dev = xr_usb_serial->dev; + + rc = usb_submit_urb(wb->urb, GFP_ATOMIC); + if (rc < 0) { + dev_err(&xr_usb_serial->data->dev, + "%s - usb_submit_urb(write bulk) failed: %d\n", + __func__, rc); + xr_usb_serial_write_done(xr_usb_serial, wb); + } + return rc; +} + +/* + * attributes exported through sysfs + */ +static ssize_t show_caps +(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + + return sprintf(buf, "%d", xr_usb_serial->ctrl_caps); +} +static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL); + +static ssize_t show_country_codes +(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + + memcpy(buf, xr_usb_serial->country_codes, xr_usb_serial->country_code_size); + return xr_usb_serial->country_code_size; +} + +static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL); + +static ssize_t show_country_rel_date +(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + + return sprintf(buf, "%d", xr_usb_serial->country_rel_date); +} + +static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL); + +static ssize_t set_rs485_422_en(struct device *dev, + struct device_attribute *attr, const char *buf, + size_t count) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + int error, value = 0; + + error = kstrtoint(buf, 0, &value); + if (error) + return error; + + if (value == 0) { + xr_usb_serial->rs485_422_en = false; + } else if (value == 1) { + // RS485,RS422 HD/FD mode + xr_usb_serial->rs485_422_en = true; + } + + return count; +} + +static ssize_t show_rs485_422_en(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + + if (xr_usb_serial->rs485_422_en == false) { + return sprintf(buf, "0"); + } else if (xr_usb_serial->rs485_422_en == true) { + // RS485,RS422 HD/FD mode + return sprintf(buf, "1"); + } + return 0; +} + +static DEVICE_ATTR(bRS485_422_en, 0644, show_rs485_422_en, set_rs485_422_en); + +/* + * Interrupt handlers for various XR_USB_SERIAL device responses + */ + +/* control interface reports status changes with "interrupt" transfers */ +static void xr_usb_serial_ctrl_irq(struct urb *urb) +{ + struct xr_usb_serial *xr_usb_serial = urb->context; + struct usb_cdc_notification *dr = urb->transfer_buffer; + struct tty_struct *tty; + unsigned char *data; + int newctrl; + int retval; + int status = urb->status; + int i; + unsigned char *p; + + switch (status) { + case 0: + p = (unsigned char *)(urb->transfer_buffer); + for(i=0;iactual_length;i++) + { + dev_dbg(&xr_usb_serial->control->dev,"0x%02x\n",p[i]); + } + /* success */ + break; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + /* this urb is terminated, clean up */ + dev_dbg(&xr_usb_serial->control->dev, + "%s - urb shutting down with status: %d\n", + __func__, status); + return; + default: + dev_dbg(&xr_usb_serial->control->dev, + "%s - nonzero urb status received: %d\n", + __func__, status); + goto exit; + } + + usb_mark_last_busy(xr_usb_serial->dev); + + data = (unsigned char *)(dr + 1); + switch (dr->bNotificationType) { + case USB_CDC_NOTIFY_NETWORK_CONNECTION: + dev_dbg(&xr_usb_serial->control->dev, "%s - network connection: %d\n", + __func__, dr->wValue); + break; + + case USB_CDC_NOTIFY_SERIAL_STATE: +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) + newctrl = get_unaligned_le16(data); + if (!xr_usb_serial->clocal && (xr_usb_serial->ctrlin & ~newctrl & XR_USB_SERIAL_CTRL_DCD)) { + dev_dbg(&xr_usb_serial->control->dev, "%s - calling hangup\n", + __func__); + tty_port_tty_hangup(&xr_usb_serial->port, false); + } +#else + tty = tty_port_tty_get(&xr_usb_serial->port); + newctrl = get_unaligned_le16(data); + if (tty) + { + if (!xr_usb_serial->clocal && + (xr_usb_serial->ctrlin & ~newctrl & XR_USB_SERIAL_CTRL_DCD)) { + dev_dbg(&xr_usb_serial->control->dev, + "%s - calling hangup\n", __func__); + tty_hangup(tty); + } + tty_kref_put(tty); + } +#endif + xr_usb_serial->ctrlin = newctrl; + + dev_dbg(&xr_usb_serial->control->dev, + "%s - input control lines: dcd%c dsr%c break%c " + "ring%c framing%c parity%c overrun%c\n", + __func__, + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_DCD ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_DSR ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_BRK ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_RI ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_FRAMING ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_PARITY ? '+' : '-', + xr_usb_serial->ctrlin & XR_USB_SERIAL_CTRL_OVERRUN ? '+' : '-'); + break; + + default: + dev_dbg(&xr_usb_serial->control->dev, + "%s - unknown notification %d received: index %d " + "len %d data0 %d data1 %d\n", + __func__, + dr->bNotificationType, dr->wIndex, + dr->wLength, data[0], data[1]); + break; + } +exit: + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval) + dev_err(&xr_usb_serial->control->dev, "%s - usb_submit_urb failed: %d\n", + __func__, retval); +} + +static int xr_usb_serial_submit_read_urb(struct xr_usb_serial *xr_usb_serial, int index, gfp_t mem_flags) +{ + int res; + + if (!test_and_clear_bit(index, &xr_usb_serial->read_urbs_free)) + return 0; + + dev_vdbg(&xr_usb_serial->data->dev, "%s - urb %d\n", __func__, index); + + res = usb_submit_urb(xr_usb_serial->read_urbs[index], mem_flags); + if (res) { + if (res != -EPERM) { + dev_err(&xr_usb_serial->data->dev, + "%s - usb_submit_urb failed: %d\n", + __func__, res); + } + set_bit(index, &xr_usb_serial->read_urbs_free); + return res; + } + + return 0; +} + +static int xr_usb_serial_submit_read_urbs(struct xr_usb_serial *xr_usb_serial, gfp_t mem_flags) +{ + int res; + int i; + + for (i = 0; i < xr_usb_serial->rx_buflimit; ++i) { + res = xr_usb_serial_submit_read_urb(xr_usb_serial, i, mem_flags); + if (res) + return res; + } + + return 0; +} +static void xr_usb_serial_process_read_urb(struct xr_usb_serial *xr_usb_serial, struct urb *urb) +{ + struct tty_struct *tty; + if (!urb->actual_length) + return; +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) + tty_insert_flip_string(&xr_usb_serial->port, urb->transfer_buffer, + urb->actual_length); + tty_flip_buffer_push(&xr_usb_serial->port); +#else + tty = tty_port_tty_get(&xr_usb_serial->port); + if (!tty) + return; + tty_insert_flip_string(tty, urb->transfer_buffer, urb->actual_length); + tty_flip_buffer_push(tty); + + tty_kref_put(tty); +#endif +} + +static void xr_usb_serial_read_bulk_callback(struct urb *urb) +{ + struct xr_usb_serial_rb *rb = urb->context; + struct xr_usb_serial *xr_usb_serial = rb->instance; + unsigned long flags; + + dev_vdbg(&xr_usb_serial->data->dev, "%s - urb %d, len %d\n", __func__, + rb->index, urb->actual_length); + set_bit(rb->index, &xr_usb_serial->read_urbs_free); + + if (!xr_usb_serial->dev) { + dev_dbg(&xr_usb_serial->data->dev, "%s - disconnected\n", __func__); + return; + } + usb_mark_last_busy(xr_usb_serial->dev); + + if (urb->status) { + dev_dbg(&xr_usb_serial->data->dev, "%s - non-zero urb status: %d\n", + __func__, urb->status); + return; + } + xr_usb_serial_process_read_urb(xr_usb_serial, urb); + + /* throttle device if requested by tty */ + spin_lock_irqsave(&xr_usb_serial->read_lock, flags); + xr_usb_serial->throttled = xr_usb_serial->throttle_req; + if (!xr_usb_serial->throttled && !xr_usb_serial->susp_count) { + spin_unlock_irqrestore(&xr_usb_serial->read_lock, flags); + xr_usb_serial_submit_read_urb(xr_usb_serial, rb->index, GFP_ATOMIC); + } else { + spin_unlock_irqrestore(&xr_usb_serial->read_lock, flags); + } +} + +/* data interface wrote those outgoing bytes */ +static void xr_usb_serial_write_bulk(struct urb *urb) +{ + struct xr_usb_serial_wb *wb = urb->context; + struct xr_usb_serial *xr_usb_serial = wb->instance; + unsigned long flags; + + if (urb->status || (urb->actual_length != urb->transfer_buffer_length)) + dev_vdbg(&xr_usb_serial->data->dev, "%s - len %d/%d, status %d\n", + __func__, + urb->actual_length, + urb->transfer_buffer_length, + urb->status); + + spin_lock_irqsave(&xr_usb_serial->write_lock, flags); + xr_usb_serial_write_done(xr_usb_serial, wb); + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + schedule_work(&xr_usb_serial->work); +} + +static void xr_usb_serial_softint(struct work_struct *work) +{ + struct xr_usb_serial *xr_usb_serial = container_of(work, struct xr_usb_serial, work); + struct tty_struct *tty; + + dev_vdbg(&xr_usb_serial->data->dev, "%s\n", __func__); +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) + tty_port_tty_wakeup(&xr_usb_serial->port); +#else + tty = tty_port_tty_get(&xr_usb_serial->port); + if (!tty) + return; + tty_wakeup(tty); + tty_kref_put(tty); +#endif +} + +/* + * TTY handlers + */ + +static int xr_usb_serial_tty_install(struct tty_driver *driver, struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial; + int retval; + + dev_dbg(tty->dev, "%s\n", __func__); + + xr_usb_serial = xr_usb_serial_get_by_index(tty->index); + if (!xr_usb_serial) + return -ENODEV; + + retval = tty_standard_install(driver, tty); + if (retval) + goto error_init_termios; + + tty->driver_data = xr_usb_serial; + + return 0; + +error_init_termios: + tty_port_put(&xr_usb_serial->port); + return retval; +} + +static int xr_usb_serial_tty_open(struct tty_struct *tty, struct file *filp) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + + dev_dbg(tty->dev, "%s\n", __func__); + + return tty_port_open(&xr_usb_serial->port, tty, filp); +} + +static int xr_usb_serial_port_activate(struct tty_port *port, struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); + int retval = -ENODEV; + + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + + mutex_lock(&xr_usb_serial->mutex); + if (xr_usb_serial->disconnected) + goto disconnected; + + retval = usb_autopm_get_interface(xr_usb_serial->control); + if (retval) + goto error_get_interface; + + /* + * FIXME: Why do we need this? Allocating 64K of physically contiguous + * memory is really nasty... + */ + set_bit(TTY_NO_WRITE_SPLIT, &tty->flags); + xr_usb_serial->control->needs_remote_wakeup = 1; + + xr_usb_serial->ctrlurb->dev = xr_usb_serial->dev; + if (usb_submit_urb(xr_usb_serial->ctrlurb, GFP_KERNEL)) { + dev_err(&xr_usb_serial->control->dev, + "%s - usb_submit_urb(ctrl irq) failed\n", __func__); + goto error_submit_urb; + } + + xr_usb_serial->ctrlout = XR_USB_SERIAL_CTRL_DTR | XR_USB_SERIAL_CTRL_RTS; + if (xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout) < 0 && + (xr_usb_serial->ctrl_caps & USB_CDC_CAP_LINE)) + goto error_set_control; + + usb_autopm_put_interface(xr_usb_serial->control); + + /* + * Unthrottle device in case the TTY was closed while throttled. + */ + spin_lock_irq(&xr_usb_serial->read_lock); + xr_usb_serial->throttled = 0; + xr_usb_serial->throttle_req = 0; + spin_unlock_irq(&xr_usb_serial->read_lock); + + if (xr_usb_serial_submit_read_urbs(xr_usb_serial, GFP_KERNEL)) + goto error_submit_read_urbs; + + mutex_unlock(&xr_usb_serial->mutex); + + return 0; + +error_submit_read_urbs: + xr_usb_serial->ctrlout = 0; + xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout); +error_set_control: + usb_kill_urb(xr_usb_serial->ctrlurb); +error_submit_urb: + usb_autopm_put_interface(xr_usb_serial->control); +error_get_interface: +disconnected: + mutex_unlock(&xr_usb_serial->mutex); + return retval; +} + +static void xr_usb_serial_port_destruct(struct tty_port *port) +{ + struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); + + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) + tty_unregister_device(xr_usb_serial_tty_driver, xr_usb_serial->minor); + #endif + xr_usb_serial_release_minor(xr_usb_serial); + usb_put_intf(xr_usb_serial->control); + kfree(xr_usb_serial->country_codes); + kfree(xr_usb_serial); +} + +static void xr_usb_serial_port_shutdown(struct tty_port *port) +{ + struct xr_usb_serial *xr_usb_serial = container_of(port, struct xr_usb_serial, port); + int i; + + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + + mutex_lock(&xr_usb_serial->mutex); + if (!xr_usb_serial->disconnected) { + usb_autopm_get_interface(xr_usb_serial->control); + xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout = 0); + usb_kill_urb(xr_usb_serial->ctrlurb); + for (i = 0; i < XR_USB_SERIAL_NW; i++) + usb_kill_urb(xr_usb_serial->wb[i].urb); + for (i = 0; i < xr_usb_serial->rx_buflimit; i++) + usb_kill_urb(xr_usb_serial->read_urbs[i]); + xr_usb_serial->control->needs_remote_wakeup = 0; + usb_autopm_put_interface(xr_usb_serial->control); + } + mutex_unlock(&xr_usb_serial->mutex); +} + +static void xr_usb_serial_tty_cleanup(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + tty_port_put(&xr_usb_serial->port); +} + +static void xr_usb_serial_tty_hangup(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + tty_port_hangup(&xr_usb_serial->port); +} + +static void xr_usb_serial_tty_close(struct tty_struct *tty, struct file *filp) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + tty_port_close(&xr_usb_serial->port, tty, filp); +} + +static int xr_usb_serial_tty_write(struct tty_struct *tty, + const unsigned char *buf, int count) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + int stat; + unsigned long flags; + int wbn; + struct xr_usb_serial_wb *wb; + + if (!count) + return 0; + + dev_vdbg(&xr_usb_serial->data->dev, "%s - count %d\n", __func__, count); + + spin_lock_irqsave(&xr_usb_serial->write_lock, flags); + wbn = xr_usb_serial_wb_alloc(xr_usb_serial); + if (wbn < 0) { + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + return 0; + } + wb = &xr_usb_serial->wb[wbn]; + + if (!xr_usb_serial->dev) { + wb->use = 0; + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + return -ENODEV; + } + + count = (count > xr_usb_serial->writesize) ? xr_usb_serial->writesize : count; + dev_vdbg(&xr_usb_serial->data->dev, "%s - write %d\n", __func__, count); + memcpy(wb->buf, buf, count); + wb->len = count; + + usb_autopm_get_interface_async(xr_usb_serial->control); + if (xr_usb_serial->susp_count) { + if (!xr_usb_serial->delayed_wb) + xr_usb_serial->delayed_wb = wb; + else + usb_autopm_put_interface_async(xr_usb_serial->control); + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + return count; /* A white lie */ + } + usb_mark_last_busy(xr_usb_serial->dev); + + stat = xr_usb_serial_start_wb(xr_usb_serial, wb); + spin_unlock_irqrestore(&xr_usb_serial->write_lock, flags); + + if (stat < 0) + return stat; + return count; +} + +static int xr_usb_serial_tty_write_room(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + /* + * Do not let the line discipline to know that we have a reserve, + * or it might get too enthusiastic. + */ + return xr_usb_serial_wb_is_avail(xr_usb_serial) ? xr_usb_serial->writesize : 0; +} + +static int xr_usb_serial_tty_chars_in_buffer(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + /* + * if the device was unplugged then any remaining characters fell out + * of the connector ;) + */ + if (xr_usb_serial->disconnected) + return 0; + /* + * This is inaccurate (overcounts), but it works. + */ + return (XR_USB_SERIAL_NW - xr_usb_serial_wb_is_avail(xr_usb_serial)) * xr_usb_serial->writesize; +} + +static void xr_usb_serial_tty_throttle(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + + spin_lock_irq(&xr_usb_serial->read_lock); + xr_usb_serial->throttle_req = 1; + spin_unlock_irq(&xr_usb_serial->read_lock); +} + +static void xr_usb_serial_tty_unthrottle(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + unsigned int was_throttled; + + spin_lock_irq(&xr_usb_serial->read_lock); + was_throttled = xr_usb_serial->throttled; + xr_usb_serial->throttled = 0; + xr_usb_serial->throttle_req = 0; + spin_unlock_irq(&xr_usb_serial->read_lock); + + if (was_throttled) + xr_usb_serial_submit_read_urbs(xr_usb_serial, GFP_KERNEL); +} + +static int xr_usb_serial_tty_break_ctl(struct tty_struct *tty, int state) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + int retval; + + retval = xr_usb_serial_send_break(xr_usb_serial, state ? 0xffff : 0); + if (retval < 0) + dev_dbg(&xr_usb_serial->control->dev, "%s - send break failed\n", + __func__); + return retval; +} + +static int xr_usb_serial_tty_tiocmget(struct tty_struct *tty) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmget\n"); + return xr_usb_serial_tiocmget(xr_usb_serial); + +} + +static int xr_usb_serial_tty_tiocmset(struct tty_struct *tty, + unsigned int set, unsigned int clear) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tty_tiocmset set=0x%x clear=0x%x\n",set,clear); + return xr_usb_serial_tiocmset(xr_usb_serial,set,clear); + +} + +static int get_serial_info(struct xr_usb_serial *xr_usb_serial, struct serial_struct __user *info) +{ + struct serial_struct tmp; + + if (!info) + return -EINVAL; + + memset(&tmp, 0, sizeof(tmp)); + tmp.flags = ASYNC_LOW_LATENCY; + tmp.xmit_fifo_size = xr_usb_serial->writesize; + tmp.baud_base = le32_to_cpu(xr_usb_serial->line.dwDTERate); + tmp.close_delay = xr_usb_serial->port.close_delay / 10; + tmp.closing_wait = xr_usb_serial->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ? + ASYNC_CLOSING_WAIT_NONE : + xr_usb_serial->port.closing_wait / 10; + + if (copy_to_user(info, &tmp, sizeof(tmp))) + return -EFAULT; + else + return 0; +} + +static int set_serial_info(struct xr_usb_serial *xr_usb_serial, + struct serial_struct __user *newinfo) +{ + struct serial_struct new_serial; + unsigned int closing_wait, close_delay; + int retval = 0; + + if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) + return -EFAULT; + + close_delay = new_serial.close_delay * 10; + closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ? + ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10; + + mutex_lock(&xr_usb_serial->port.mutex); + + if (!capable(CAP_SYS_ADMIN)) { + if ((close_delay != xr_usb_serial->port.close_delay) || + (closing_wait != xr_usb_serial->port.closing_wait)) + retval = -EPERM; + else + retval = -EOPNOTSUPP; + } else { + xr_usb_serial->port.close_delay = close_delay; + xr_usb_serial->port.closing_wait = closing_wait; + } + + mutex_unlock(&xr_usb_serial->port.mutex); + return retval; +} + +static int xr_usb_serial_tty_ioctl(struct tty_struct *tty, + unsigned int cmd, unsigned long arg) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; + int rv = -ENOIOCTLCMD; + unsigned int channel, reg, val; + + short *data; + switch (cmd) { + case TIOCGSERIAL: /* gets serial port data */ + rv = get_serial_info(xr_usb_serial, (struct serial_struct __user *) arg); + break; + case TIOCSSERIAL: + rv = set_serial_info(xr_usb_serial, (struct serial_struct __user *) arg); + break; + case XR_USB_SERIAL_GET_REG: + if (get_user(channel, (int __user *)arg)) + return -EFAULT; + if (get_user(reg, (int __user *)(arg + sizeof(int)))) + return -EFAULT; + + data = kmalloc(2, GFP_KERNEL); + if (data == NULL) { + dev_err(&xr_usb_serial->control->dev, "%s - Cannot allocate USB buffer.\n", __func__); + return -ENOMEM; + } + + if (channel == -1) + { + rv = xr_usb_serial_get_reg(xr_usb_serial,reg, data); + } + else + { + rv = xr_usb_serial_get_reg_ext(xr_usb_serial,channel,reg, data); + } + if (rv != 1) { + dev_err(&xr_usb_serial->control->dev, "Cannot get register (%d)\n", rv); + kfree(data); + return -EFAULT; + } + if (put_user(le16_to_cpu(*data), (int __user *)(arg + 2 * sizeof(int)))) + { + dev_err(&xr_usb_serial->control->dev, "Cannot put user result\n"); + kfree(data); + return -EFAULT; + } + rv = 0; + kfree(data); + break; + + case XR_USB_SERIAL_SET_REG: + if (get_user(channel, (int __user *)arg)) + return -EFAULT; + if (get_user(reg, (int __user *)(arg + sizeof(int)))) + return -EFAULT; + if (get_user(val, (int __user *)(arg + 2 * sizeof(int)))) + return -EFAULT; + + if (channel == -1) + { + rv = xr_usb_serial_set_reg(xr_usb_serial,reg, val); + } + else + { + rv = xr_usb_serial_set_reg_ext(xr_usb_serial,channel,reg, val); + + } + if (rv < 0) + return -EFAULT; + rv = 0; + break; + case XR_USB_SERIAL_LOOPBACK: + if (get_user(channel, (int __user *)arg)) + return -EFAULT; + if (channel == -1) + channel = xr_usb_serial->channel; + rv = xr_usb_serial_set_loopback(xr_usb_serial,channel); + if (rv < 0) + return -EFAULT; + rv = 0; + break; + + } + + return rv; +} + +static void xr_usb_serial_tty_set_termios(struct tty_struct *tty, + struct ktermios *termios_old) +{ + struct xr_usb_serial *xr_usb_serial = tty->driver_data; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) + struct ktermios *termios = tty->termios; +#else + struct ktermios *termios = &tty->termios; +#endif + unsigned int cflag = termios->c_cflag; + struct usb_cdc_line_coding newline; + int newctrl = xr_usb_serial->ctrlout; + xr_usb_serial_disable(xr_usb_serial); + newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty)); + newline.bCharFormat = termios->c_cflag & CSTOPB ? 1 : 0; + newline.bParityType = termios->c_cflag & PARENB ? + (termios->c_cflag & PARODD ? 1 : 2) + + (termios->c_cflag & CMSPAR ? 2 : 0) : 0; + switch (termios->c_cflag & CSIZE) { + case CS5:/*using CS5 replace of the 9 bit data mode*/ + newline.bDataBits = 9; + break; + case CS6: + newline.bDataBits = 6; + break; + case CS7: + newline.bDataBits = 7; + break; + case CS8: + default: + newline.bDataBits = 8; + break; + } + /* FIXME: Needs to clear unsupported bits in the termios */ + xr_usb_serial->clocal = ((termios->c_cflag & CLOCAL) != 0); + + if (!newline.dwDTERate) { + newline.dwDTERate = xr_usb_serial->line.dwDTERate; + newctrl &= ~XR_USB_SERIAL_CTRL_DTR; + } else + newctrl |= XR_USB_SERIAL_CTRL_DTR; + + if (newctrl != xr_usb_serial->ctrlout) + xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout = newctrl); + + xr_usb_serial_set_flow_mode(xr_usb_serial,tty,cflag);/*set the serial flow mode*/ + + if (memcmp(&xr_usb_serial->line, &newline, sizeof newline)) + { + memcpy(&xr_usb_serial->line, &newline, sizeof newline); + dev_dbg(&xr_usb_serial->control->dev, "%s - set line: %d %d %d %d\n", + __func__, + le32_to_cpu(newline.dwDTERate), + newline.bCharFormat, newline.bParityType, + newline.bDataBits); + xr_usb_serial_set_line(xr_usb_serial, &xr_usb_serial->line); + } + xr_usb_serial_enable(xr_usb_serial); +} + +static const struct tty_port_operations xr_usb_serial_port_ops = { + .shutdown = xr_usb_serial_port_shutdown, + .activate = xr_usb_serial_port_activate, + .destruct = xr_usb_serial_port_destruct, +}; + +/* + * USB probe and disconnect routines. + */ + +/* Little helpers: write/read buffers free */ +static void xr_usb_serial_write_buffers_free(struct xr_usb_serial *xr_usb_serial) +{ + int i; + struct xr_usb_serial_wb *wb; + struct usb_device *usb_dev = interface_to_usbdev(xr_usb_serial->control); + + for (wb = &xr_usb_serial->wb[0], i = 0; i < XR_USB_SERIAL_NW; i++, wb++) + usb_free_coherent(usb_dev, xr_usb_serial->writesize, wb->buf, wb->dmah); +} + +static void xr_usb_serial_read_buffers_free(struct xr_usb_serial *xr_usb_serial) +{ + struct usb_device *usb_dev = interface_to_usbdev(xr_usb_serial->control); + int i; + + for (i = 0; i < xr_usb_serial->rx_buflimit; i++) + usb_free_coherent(usb_dev, xr_usb_serial->readsize, + xr_usb_serial->read_buffers[i].base, xr_usb_serial->read_buffers[i].dma); +} + +/* Little helper: write buffers allocate */ +static int xr_usb_serial_write_buffers_alloc(struct xr_usb_serial *xr_usb_serial) +{ + int i; + struct xr_usb_serial_wb *wb; + + for (wb = &xr_usb_serial->wb[0], i = 0; i < XR_USB_SERIAL_NW; i++, wb++) { + wb->buf = usb_alloc_coherent(xr_usb_serial->dev, xr_usb_serial->writesize, GFP_KERNEL, + &wb->dmah); + if (!wb->buf) { + while (i != 0) { + --i; + --wb; + usb_free_coherent(xr_usb_serial->dev, xr_usb_serial->writesize, + wb->buf, wb->dmah); + } + return -ENOMEM; + } + } + return 0; +} + +static int xr_usb_serial_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + struct usb_cdc_union_desc *union_header = NULL; + struct usb_cdc_country_functional_desc *cfd = NULL; + unsigned char *buffer = intf->altsetting->extra; + int buflen = intf->altsetting->extralen; + struct usb_interface *control_interface; + struct usb_interface *data_interface; + struct usb_endpoint_descriptor *epctrl = NULL; + struct usb_endpoint_descriptor *epread = NULL; + struct usb_endpoint_descriptor *epwrite = NULL; + struct usb_device *usb_dev = interface_to_usbdev(intf); + struct xr_usb_serial *xr_usb_serial; + int minor; + int ctrlsize, readsize; + u8 *buf; + u8 ac_management_function = 0; + u8 call_management_function = 0; + int call_interface_num = -1; + int data_interface_num = -1; + unsigned long quirks; + int num_rx_buf; + int i; + int combined_interfaces = 0; + struct device *tty_dev; + int rv = -ENOMEM; + + /* normal quirks */ + quirks = (unsigned long)id->driver_info; + + if (quirks == IGNORE_DEVICE) + return -ENODEV; + + num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : XR_USB_SERIAL_NR; + + dev_dbg(&intf->dev, "USB_device_id idVendor:%04x, idProduct %04x\n",id->idVendor,id->idProduct); + + /* handle quirks deadly to normal probing*/ + if (quirks == NO_UNION_NORMAL) { + data_interface = usb_ifnum_to_if(usb_dev, 1); + control_interface = usb_ifnum_to_if(usb_dev, 0); + goto skip_normal_probe; + } + + /* normal probing*/ + if (!buffer) { + dev_err(&intf->dev, "Weird descriptor references\n"); + return -EINVAL; + } + + if (!buflen) { + if (intf->cur_altsetting->endpoint && + intf->cur_altsetting->endpoint->extralen && + intf->cur_altsetting->endpoint->extra) { + dev_dbg(&intf->dev, + "Seeking extra descriptors on endpoint\n"); + buflen = intf->cur_altsetting->endpoint->extralen; + buffer = intf->cur_altsetting->endpoint->extra; + } else { + dev_err(&intf->dev, + "Zero length descriptor references\n"); + return -EINVAL; + } + } + + while (buflen > 0) { + if (buffer[1] != USB_DT_CS_INTERFACE) { + dev_err(&intf->dev, "skipping garbage\n"); + goto next_desc; + } + + switch (buffer[2]) { + case USB_CDC_UNION_TYPE: /* we've found it */ + if (union_header) { + dev_err(&intf->dev, "More than one " + "union descriptor, skipping ...\n"); + goto next_desc; + } + union_header = (struct usb_cdc_union_desc *)buffer; + break; + case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/ + cfd = (struct usb_cdc_country_functional_desc *)buffer; + break; + case USB_CDC_HEADER_TYPE: /* maybe check version */ + break; /* for now we ignore it */ + case USB_CDC_ACM_TYPE: + ac_management_function = buffer[3]; + break; + case USB_CDC_CALL_MANAGEMENT_TYPE: + call_management_function = buffer[3]; + call_interface_num = buffer[4]; + if ((quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3) + dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n"); + break; + default: + /* there are LOTS more CDC descriptors that + * could legitimately be found here. + */ + dev_dbg(&intf->dev, "Ignoring descriptor: " + "type %02x, length %d\n", + buffer[2], buffer[0]); + break; + } +next_desc: + buflen -= buffer[0]; + buffer += buffer[0]; + } + + if (!union_header) { + if (call_interface_num > 0) { + dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n"); + /* quirks for Droids MuIn LCD */ + if (quirks & NO_DATA_INTERFACE) + data_interface = usb_ifnum_to_if(usb_dev, 0); + else + data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num)); + control_interface = intf; + } else { + if (intf->cur_altsetting->desc.bNumEndpoints != 3) { + dev_dbg(&intf->dev,"No union descriptor, giving up\n"); + return -ENODEV; + } else { + dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n"); + combined_interfaces = 1; + control_interface = data_interface = intf; + goto look_for_collapsed_interface; + } + } + } else { + control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0); + data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0)); + if (!control_interface || !data_interface) { + dev_dbg(&intf->dev, "no interfaces\n"); + return -ENODEV; + } + } + + if (data_interface_num != call_interface_num) + dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n"); + + if (control_interface == data_interface) { + /* some broken devices designed for windows work this way */ + dev_warn(&intf->dev,"Control and data interfaces are not separated!\n"); + combined_interfaces = 1; + /* a popular other OS doesn't use it */ + quirks |= NO_CAP_LINE; + if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) { + dev_err(&intf->dev, "This needs exactly 3 endpoints\n"); + return -EINVAL; + } +look_for_collapsed_interface: + for (i = 0; i < 3; i++) { + struct usb_endpoint_descriptor *ep; + ep = &data_interface->cur_altsetting->endpoint[i].desc; + + if (usb_endpoint_is_int_in(ep)) + epctrl = ep; + else if (usb_endpoint_is_bulk_out(ep)) + epwrite = ep; + else if (usb_endpoint_is_bulk_in(ep)) + epread = ep; + else + return -EINVAL; + } + if (!epctrl || !epread || !epwrite) + return -ENODEV; + else + goto made_compressed_probe; + } + +skip_normal_probe: + + /*workaround for switched interfaces */ + if (data_interface->cur_altsetting->desc.bInterfaceClass + != CDC_DATA_INTERFACE_TYPE) { + if (control_interface->cur_altsetting->desc.bInterfaceClass + == CDC_DATA_INTERFACE_TYPE) { + struct usb_interface *t; + dev_dbg(&intf->dev, + "Your device has switched interfaces.\n"); + t = control_interface; + control_interface = data_interface; + data_interface = t; + } else { + return -EINVAL; + } + } + + /* Accept probe requests only for the control interface */ + if (!combined_interfaces && intf != control_interface) + return -ENODEV; + + if (!combined_interfaces && usb_interface_claimed(data_interface)) { + /* valid in this context */ + dev_dbg(&intf->dev, "The data interface isn't available\n"); + return -EBUSY; + } + + + if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 || + control_interface->cur_altsetting->desc.bNumEndpoints == 0) + return -EINVAL; + + epctrl = &control_interface->cur_altsetting->endpoint[0].desc; + epread = &data_interface->cur_altsetting->endpoint[0].desc; + epwrite = &data_interface->cur_altsetting->endpoint[1].desc; + + + /* workaround for switched endpoints */ + if (!usb_endpoint_dir_in(epread)) { + /* descriptors are swapped */ + struct usb_endpoint_descriptor *t; + dev_dbg(&intf->dev, + "The data interface has switched endpoints\n"); + t = epread; + epread = epwrite; + epwrite = t; + } +made_compressed_probe: + dev_dbg(&intf->dev, "interfaces are valid\n"); + + xr_usb_serial = kzalloc(sizeof(struct xr_usb_serial), GFP_KERNEL); + if (xr_usb_serial == NULL) { + dev_err(&intf->dev, "out of memory (xr_usb_serial kzalloc)\n"); + goto alloc_fail; + } + + minor = xr_usb_serial_alloc_minor(xr_usb_serial); + if (minor == XR_USB_SERIAL_TTY_MINORS) { + dev_err(&intf->dev, "no more free xr_usb_serial devices\n"); + kfree(xr_usb_serial); + return -ENODEV; + } + + ctrlsize = usb_endpoint_maxp(epctrl); + readsize = usb_endpoint_maxp(epread) * + (quirks == SINGLE_RX_URB ? 1 : 2); + xr_usb_serial->combined_interfaces = combined_interfaces; + xr_usb_serial->writesize = usb_endpoint_maxp(epwrite) * 20; + xr_usb_serial->control = control_interface; + xr_usb_serial->data = data_interface; + xr_usb_serial->minor = minor; + xr_usb_serial->dev = usb_dev; + xr_usb_serial->ctrl_caps = ac_management_function; + if (quirks & NO_CAP_LINE) + xr_usb_serial->ctrl_caps &= ~USB_CDC_CAP_LINE; + xr_usb_serial->ctrlsize = ctrlsize; + xr_usb_serial->readsize = readsize; + xr_usb_serial->rx_buflimit = num_rx_buf; + INIT_WORK(&xr_usb_serial->work, xr_usb_serial_softint); + spin_lock_init(&xr_usb_serial->write_lock); + spin_lock_init(&xr_usb_serial->read_lock); + mutex_init(&xr_usb_serial->mutex); + xr_usb_serial->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress); + xr_usb_serial->is_int_ep = usb_endpoint_xfer_int(epread); + if (xr_usb_serial->is_int_ep) + xr_usb_serial->bInterval = epread->bInterval; + tty_port_init(&xr_usb_serial->port); + xr_usb_serial->port.ops = &xr_usb_serial_port_ops; + xr_usb_serial->DeviceVendor = id->idVendor; + xr_usb_serial->DeviceProduct = id->idProduct; + #if 0 + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1410) + {//map the serial port A B C D to blocknum 0 1 2 3 for the xr21v141x device + xr_usb_serial->channel = epwrite->bEndpointAddress - 1; + } + else if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1420) + {//map the serial port A B C D to blocknum 0 2 4 6 for the xr21B142x device + xr_usb_serial->channel = (epwrite->bEndpointAddress - 4)*2; + } + else + { + xr_usb_serial->channel = epwrite->bEndpointAddress; + } + #else + xr_usb_serial->channel = epwrite->bEndpointAddress; + dev_dbg(&intf->dev, "epwrite->bEndpointAddress =%d\n",epwrite->bEndpointAddress); + #endif + buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &xr_usb_serial->ctrl_dma); + if (!buf) { + dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n"); + goto alloc_fail2; + } + xr_usb_serial->ctrl_buffer = buf; + + if (xr_usb_serial_write_buffers_alloc(xr_usb_serial) < 0) { + dev_err(&intf->dev, "out of memory (write buffer alloc)\n"); + goto alloc_fail4; + } + + xr_usb_serial->ctrlurb = usb_alloc_urb(0, GFP_KERNEL); + if (!xr_usb_serial->ctrlurb) { + dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n"); + goto alloc_fail5; + } + for (i = 0; i < num_rx_buf; i++) { + struct xr_usb_serial_rb *rb = &(xr_usb_serial->read_buffers[i]); + struct urb *urb; + + rb->base = usb_alloc_coherent(xr_usb_serial->dev, readsize, GFP_KERNEL, + &rb->dma); + if (!rb->base) { + dev_err(&intf->dev, "out of memory " + "(read bufs usb_alloc_coherent)\n"); + goto alloc_fail6; + } + rb->index = i; + rb->instance = xr_usb_serial; + + urb = usb_alloc_urb(0, GFP_KERNEL); + if (!urb) { + dev_err(&intf->dev, + "out of memory (read urbs usb_alloc_urb)\n"); + goto alloc_fail6; + } + urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + urb->transfer_dma = rb->dma; + if (xr_usb_serial->is_int_ep) { + usb_fill_int_urb(urb, xr_usb_serial->dev, + xr_usb_serial->rx_endpoint, + rb->base, + xr_usb_serial->readsize, + xr_usb_serial_read_bulk_callback, rb, + xr_usb_serial->bInterval); + } else { + usb_fill_bulk_urb(urb, xr_usb_serial->dev, + xr_usb_serial->rx_endpoint, + rb->base, + xr_usb_serial->readsize, + xr_usb_serial_read_bulk_callback, rb); + } + + xr_usb_serial->read_urbs[i] = urb; + __set_bit(i, &xr_usb_serial->read_urbs_free); + } + for (i = 0; i < XR_USB_SERIAL_NW; i++) { + struct xr_usb_serial_wb *snd = &(xr_usb_serial->wb[i]); + + snd->urb = usb_alloc_urb(0, GFP_KERNEL); + if (snd->urb == NULL) { + dev_err(&intf->dev, + "out of memory (write urbs usb_alloc_urb)\n"); + goto alloc_fail7; + } + + if (usb_endpoint_xfer_int(epwrite)) + usb_fill_int_urb(snd->urb, usb_dev, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) + usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress), +#else + usb_sndintpipe(usb_dev, epwrite->bEndpointAddress), +#endif + NULL, xr_usb_serial->writesize, xr_usb_serial_write_bulk, snd, epwrite->bInterval); + else + usb_fill_bulk_urb(snd->urb, usb_dev, + usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress), + NULL, xr_usb_serial->writesize, xr_usb_serial_write_bulk, snd); + snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + snd->instance = xr_usb_serial; + } + + usb_set_intfdata(intf, xr_usb_serial); + + xr_usb_serial->rs485_422_en = false; //default enable rs232 + i = device_create_file(&intf->dev, &dev_attr_bRS485_422_en); + if (i < 0) + goto alloc_fail7; + + i = device_create_file(&intf->dev, &dev_attr_bmCapabilities); + if (i < 0) + goto alloc_fail8; + + if (cfd) { /* export the country data */ + xr_usb_serial->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL); + if (!xr_usb_serial->country_codes) + goto skip_countries; + xr_usb_serial->country_code_size = cfd->bLength - 4; + memcpy(xr_usb_serial->country_codes, (u8 *)&cfd->wCountyCode0, + cfd->bLength - 4); + xr_usb_serial->country_rel_date = cfd->iCountryCodeRelDate; + + i = device_create_file(&intf->dev, &dev_attr_wCountryCodes); + if (i < 0) { + kfree(xr_usb_serial->country_codes); + xr_usb_serial->country_codes = NULL; + xr_usb_serial->country_code_size = 0; + goto skip_countries; + } + + i = device_create_file(&intf->dev, + &dev_attr_iCountryCodeRelDate); + if (i < 0) { + device_remove_file(&intf->dev, &dev_attr_wCountryCodes); + kfree(xr_usb_serial->country_codes); + xr_usb_serial->country_codes = NULL; + xr_usb_serial->country_code_size = 0; + goto skip_countries; + } + } + +skip_countries: + usb_fill_int_urb(xr_usb_serial->ctrlurb, usb_dev, + usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress), + xr_usb_serial->ctrl_buffer, ctrlsize, xr_usb_serial_ctrl_irq, xr_usb_serial, + /* works around buggy devices */ + epctrl->bInterval ? epctrl->bInterval : 0xff); + xr_usb_serial->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + xr_usb_serial->ctrlurb->transfer_dma = xr_usb_serial->ctrl_dma; + + dev_info(&intf->dev, "ttyXR_USB_SERIAL%d: USB XR_USB_SERIAL device\n", minor); + + xr_usb_serial_pre_setup(xr_usb_serial); + + xr_usb_serial_set_control(xr_usb_serial, xr_usb_serial->ctrlout); + + xr_usb_serial->line.dwDTERate = cpu_to_le32(9600); + xr_usb_serial->line.bDataBits = 8; + xr_usb_serial_set_line(xr_usb_serial, &xr_usb_serial->line); + + usb_driver_claim_interface(&xr_usb_serial_driver, data_interface, xr_usb_serial); + usb_set_intfdata(data_interface, xr_usb_serial); + + usb_get_intf(control_interface); +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0) + tty_register_device(xr_usb_serial_tty_driver, minor, &control_interface->dev); +#else + tty_dev = tty_port_register_device(&xr_usb_serial->port, xr_usb_serial_tty_driver, minor, + &control_interface->dev); + if (IS_ERR(tty_dev)) { + rv = PTR_ERR(tty_dev); + goto alloc_fail9; + } +#endif + + return 0; +alloc_fail9: + if (xr_usb_serial->country_codes) { + device_remove_file(&xr_usb_serial->control->dev, + &dev_attr_wCountryCodes); + device_remove_file(&xr_usb_serial->control->dev, + &dev_attr_iCountryCodeRelDate); + } + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bmCapabilities); +alloc_fail8: + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bRS485_422_en); +alloc_fail7: + usb_set_intfdata(intf, NULL); + for (i = 0; i < XR_USB_SERIAL_NW; i++) + usb_free_urb(xr_usb_serial->wb[i].urb); +alloc_fail6: + for (i = 0; i < num_rx_buf; i++) + usb_free_urb(xr_usb_serial->read_urbs[i]); + xr_usb_serial_read_buffers_free(xr_usb_serial); + usb_free_urb(xr_usb_serial->ctrlurb); +alloc_fail5: + xr_usb_serial_write_buffers_free(xr_usb_serial); +alloc_fail4: + usb_free_coherent(usb_dev, ctrlsize, xr_usb_serial->ctrl_buffer, xr_usb_serial->ctrl_dma); +alloc_fail2: + xr_usb_serial_release_minor(xr_usb_serial); + kfree(xr_usb_serial); +alloc_fail: + return rv; +} + +static void stop_data_traffic(struct xr_usb_serial *xr_usb_serial) +{ + int i; + + dev_dbg(&xr_usb_serial->control->dev, "%s\n", __func__); + + usb_kill_urb(xr_usb_serial->ctrlurb); + for (i = 0; i < XR_USB_SERIAL_NW; i++) + usb_kill_urb(xr_usb_serial->wb[i].urb); + for (i = 0; i < xr_usb_serial->rx_buflimit; i++) + usb_kill_urb(xr_usb_serial->read_urbs[i]); + + cancel_work_sync(&xr_usb_serial->work); +} + +static void xr_usb_serial_disconnect(struct usb_interface *intf) +{ + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + struct usb_device *usb_dev = interface_to_usbdev(intf); + struct tty_struct *tty; + int i; + + dev_dbg(&intf->dev, "%s\n", __func__); + + /* sibling interface is already cleaning up */ + if (!xr_usb_serial) + return; + + mutex_lock(&xr_usb_serial->mutex); + xr_usb_serial->disconnected = true; + if (xr_usb_serial->country_codes) { + device_remove_file(&xr_usb_serial->control->dev, + &dev_attr_wCountryCodes); + device_remove_file(&xr_usb_serial->control->dev, + &dev_attr_iCountryCodeRelDate); + } + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bmCapabilities); + device_remove_file(&xr_usb_serial->control->dev, &dev_attr_bRS485_422_en); + usb_set_intfdata(xr_usb_serial->control, NULL); + usb_set_intfdata(xr_usb_serial->data, NULL); + mutex_unlock(&xr_usb_serial->mutex); + + tty = tty_port_tty_get(&xr_usb_serial->port); + if (tty) { + tty_vhangup(tty); + tty_kref_put(tty); + } + stop_data_traffic(xr_usb_serial); +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 7, 0) + tty_unregister_device(xr_usb_serial_tty_driver, xr_usb_serial->minor); +#endif + + usb_free_urb(xr_usb_serial->ctrlurb); + for (i = 0; i < XR_USB_SERIAL_NW; i++) + usb_free_urb(xr_usb_serial->wb[i].urb); + for (i = 0; i < xr_usb_serial->rx_buflimit; i++) + usb_free_urb(xr_usb_serial->read_urbs[i]); + xr_usb_serial_write_buffers_free(xr_usb_serial); + usb_free_coherent(usb_dev, xr_usb_serial->ctrlsize, xr_usb_serial->ctrl_buffer, xr_usb_serial->ctrl_dma); + xr_usb_serial_read_buffers_free(xr_usb_serial); + + if (!xr_usb_serial->combined_interfaces) + usb_driver_release_interface(&xr_usb_serial_driver, intf == xr_usb_serial->control ? + xr_usb_serial->data : xr_usb_serial->control); + + tty_port_put(&xr_usb_serial->port); +} + +#ifdef CONFIG_PM +static int xr_usb_serial_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + int cnt; + + if (PMSG_IS_AUTO(message)) { + int b; + + spin_lock_irq(&xr_usb_serial->write_lock); + b = xr_usb_serial->transmitting; + spin_unlock_irq(&xr_usb_serial->write_lock); + if (b) + return -EBUSY; + } + + spin_lock_irq(&xr_usb_serial->read_lock); + spin_lock(&xr_usb_serial->write_lock); + cnt = xr_usb_serial->susp_count++; + spin_unlock(&xr_usb_serial->write_lock); + spin_unlock_irq(&xr_usb_serial->read_lock); + + if (cnt) + return 0; + + if (test_bit(ASYNCB_INITIALIZED, &xr_usb_serial->port.flags)) + stop_data_traffic(xr_usb_serial); + + return 0; +} + +static int xr_usb_serial_resume(struct usb_interface *intf) +{ + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + struct xr_usb_serial_wb *wb; + int rv = 0; + int cnt; + + spin_lock_irq(&xr_usb_serial->read_lock); + xr_usb_serial->susp_count -= 1; + cnt = xr_usb_serial->susp_count; + spin_unlock_irq(&xr_usb_serial->read_lock); + + if (cnt) + return 0; + + if (test_bit(ASYNCB_INITIALIZED, &xr_usb_serial->port.flags)) { + rv = usb_submit_urb(xr_usb_serial->ctrlurb, GFP_NOIO); + + spin_lock_irq(&xr_usb_serial->write_lock); + if (xr_usb_serial->delayed_wb) { + wb = xr_usb_serial->delayed_wb; + xr_usb_serial->delayed_wb = NULL; + spin_unlock_irq(&xr_usb_serial->write_lock); + xr_usb_serial_start_wb(xr_usb_serial, wb); + } else { + spin_unlock_irq(&xr_usb_serial->write_lock); + } + + /* + * delayed error checking because we must + * do the write path at all cost + */ + if (rv < 0) + goto err_out; + + rv = xr_usb_serial_submit_read_urbs(xr_usb_serial, GFP_NOIO); + } + +err_out: + return rv; +} + +static int xr_usb_serial_reset_resume(struct usb_interface *intf) +{ + struct xr_usb_serial *xr_usb_serial = usb_get_intfdata(intf); + struct tty_struct *tty; + if (test_bit(ASYNCB_INITIALIZED, &xr_usb_serial->port.flags)){ +#if LINUX_VERSION_CODE > KERNEL_VERSION(3, 9, 0) + tty_port_tty_hangup(&xr_usb_serial->port, false); +#else + tty = tty_port_tty_get(&xr_usb_serial->port); + if (tty) { + tty_hangup(tty); + tty_kref_put(tty); + } +#endif + } + return xr_usb_serial_resume(intf); +} + +#endif /* CONFIG_PM */ + +/* + * USB driver structure. + */ +static const struct usb_device_id xr_usb_serial_ids[] = { + { USB_DEVICE(0x04e2, 0x1410)}, + { USB_DEVICE(0x04e2, 0x1411)}, + { USB_DEVICE(0x04e2, 0x1412)}, + { USB_DEVICE(0x04e2, 0x1414)}, + { USB_DEVICE(0x04e2, 0x1420)}, + { USB_DEVICE(0x04e2, 0x1421)}, + { USB_DEVICE(0x04e2, 0x1422)}, + { USB_DEVICE(0x04e2, 0x1424)}, + { USB_DEVICE(0x04e2, 0x1400)}, + { USB_DEVICE(0x04e2, 0x1401)}, + { USB_DEVICE(0x04e2, 0x1402)}, + { USB_DEVICE(0x04e2, 0x1403)}, + { } +}; + +MODULE_DEVICE_TABLE(usb, xr_usb_serial_ids); + +static struct usb_driver xr_usb_serial_driver = { + .name = "cdc_xr_usb_serial", + .probe = xr_usb_serial_probe, + .disconnect = xr_usb_serial_disconnect, +#ifdef CONFIG_PM + .suspend = xr_usb_serial_suspend, + .resume = xr_usb_serial_resume, + .reset_resume = xr_usb_serial_reset_resume, +#endif + .id_table = xr_usb_serial_ids, +#ifdef CONFIG_PM + .supports_autosuspend = 1, +#endif + .disable_hub_initiated_lpm = 1, +}; + +/* + * TTY driver structures. + */ + +static const struct tty_operations xr_usb_serial_ops = { + .install = xr_usb_serial_tty_install, + .open = xr_usb_serial_tty_open, + .close = xr_usb_serial_tty_close, + .cleanup = xr_usb_serial_tty_cleanup, + .hangup = xr_usb_serial_tty_hangup, + .write = xr_usb_serial_tty_write, + .write_room = xr_usb_serial_tty_write_room, + .ioctl = xr_usb_serial_tty_ioctl, + .throttle = xr_usb_serial_tty_throttle, + .unthrottle = xr_usb_serial_tty_unthrottle, + .chars_in_buffer = xr_usb_serial_tty_chars_in_buffer, + .break_ctl = xr_usb_serial_tty_break_ctl, + .set_termios = xr_usb_serial_tty_set_termios, + .tiocmget = xr_usb_serial_tty_tiocmget, + .tiocmset = xr_usb_serial_tty_tiocmset, +}; + +/* + * Init / exit. + */ + +static int __init xr_usb_serial_init(void) +{ + int retval; + xr_usb_serial_tty_driver = alloc_tty_driver(XR_USB_SERIAL_TTY_MINORS); + if (!xr_usb_serial_tty_driver) + return -ENOMEM; + xr_usb_serial_tty_driver->driver_name = "xr_usb_serial", + xr_usb_serial_tty_driver->name = "ttyXRUSB", + xr_usb_serial_tty_driver->major = XR_USB_SERIAL_TTY_MAJOR, + xr_usb_serial_tty_driver->minor_start = 0, + xr_usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL, + xr_usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL, + xr_usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; + xr_usb_serial_tty_driver->init_termios = tty_std_termios; + xr_usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | + HUPCL | CLOCAL; + tty_set_operations(xr_usb_serial_tty_driver, &xr_usb_serial_ops); + + retval = tty_register_driver(xr_usb_serial_tty_driver); + if (retval) { + put_tty_driver(xr_usb_serial_tty_driver); + return retval; + } + + retval = usb_register(&xr_usb_serial_driver); + if (retval) { + tty_unregister_driver(xr_usb_serial_tty_driver); + put_tty_driver(xr_usb_serial_tty_driver); + return retval; + } + + printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n"); + + return 0; +} + +static void __exit xr_usb_serial_exit(void) +{ + usb_deregister(&xr_usb_serial_driver); + tty_unregister_driver(xr_usb_serial_tty_driver); + put_tty_driver(xr_usb_serial_tty_driver); +} + +module_init(xr_usb_serial_init); +module_exit(xr_usb_serial_exit); + +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); +MODULE_ALIAS_CHARDEV_MAJOR(XR_USB_SERIAL_TTY_MAJOR); --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/xr_usb_serial_common.h +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/xr_usb_serial_common.h @@ -0,0 +1,187 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * CMSPAR, some architectures can't have space and mark parity. + */ + +#ifndef CMSPAR +#define CMSPAR 0 +#endif + +/* + * Major and minor numbers. + */ + +#define XR_USB_SERIAL_TTY_MAJOR 266 +#define XR_USB_SERIAL_TTY_MINORS 32 + +/* + * Requests. + */ + +#define USB_RT_XR_USB_SERIAL (USB_TYPE_CLASS | USB_RECIP_INTERFACE) + +/* + * Output control lines. + */ + +#define XR_USB_SERIAL_CTRL_DTR 0x01 +#define XR_USB_SERIAL_CTRL_RTS 0x02 + +/* + * Input control lines and line errors. + */ + +#define XR_USB_SERIAL_CTRL_DCD 0x01 +#define XR_USB_SERIAL_CTRL_DSR 0x02 +#define XR_USB_SERIAL_CTRL_BRK 0x04 +#define XR_USB_SERIAL_CTRL_RI 0x08 + +#define XR_USB_SERIAL_CTRL_FRAMING 0x10 +#define XR_USB_SERIAL_CTRL_PARITY 0x20 +#define XR_USB_SERIAL_CTRL_OVERRUN 0x40 + +/* + * Internal driver structures. + */ + +/* + * The only reason to have several buffers is to accommodate assumptions + * in line disciplines. They ask for empty space amount, receive our URB size, + * and proceed to issue several 1-character writes, assuming they will fit. + * The very first write takes a complete URB. Fortunately, this only happens + * when processing onlcr, so we only need 2 buffers. These values must be + * powers of 2. + */ +#define XR_USB_SERIAL_NW 16 +#define XR_USB_SERIAL_NR 16 + +struct xr_usb_serial_wb { + unsigned char *buf; + dma_addr_t dmah; + int len; + int use; + struct urb *urb; + struct xr_usb_serial *instance; +}; + +struct xr_usb_serial_rb { + int size; + unsigned char *base; + dma_addr_t dma; + int index; + struct xr_usb_serial *instance; +}; + +struct reg_addr_map { + unsigned int uart_enable_addr; + unsigned int uart_format_addr; + unsigned int uart_flow_addr; + unsigned int uart_loopback_addr; + unsigned int uart_xon_char_addr; + unsigned int uart_xoff_char_addr; + unsigned int uart_gpio_mode_addr; + unsigned int uart_gpio_dir_addr; + unsigned int uart_gpio_set_addr; + unsigned int uart_gpio_clr_addr; + unsigned int uart_gpio_status_addr; + unsigned int tx_break_addr; + unsigned int uart_custom_driver; + unsigned int uart_low_latency; +}; + +struct xr_usb_serial { + struct usb_device *dev; /* the corresponding usb device */ + struct usb_interface *control; /* control interface */ + struct usb_interface *data; /* data interface */ + struct tty_port port; /* our tty port data */ + struct urb *ctrlurb; /* urbs */ + u8 *ctrl_buffer; /* buffers of urbs */ + dma_addr_t ctrl_dma; /* dma handles of buffers */ + u8 *country_codes; /* country codes from device */ + unsigned int country_code_size; /* size of this buffer */ + unsigned int country_rel_date; /* release date of version */ + struct xr_usb_serial_wb wb[XR_USB_SERIAL_NW]; + unsigned long read_urbs_free; + struct urb *read_urbs[XR_USB_SERIAL_NR]; + struct xr_usb_serial_rb read_buffers[XR_USB_SERIAL_NR]; + int rx_buflimit; + int rx_endpoint; + spinlock_t read_lock; + int write_used; /* number of non-empty write buffers */ + int transmitting; + spinlock_t write_lock; + struct mutex mutex; + bool disconnected; + struct usb_cdc_line_coding line; /* bits, stop, parity */ + struct work_struct work; /* work queue entry for line discipline waking up */ + unsigned int ctrlin; /* input control lines (DCD, DSR, RI, break, overruns) */ + unsigned int ctrlout; /* output control lines (DTR, RTS) */ + unsigned int writesize; /* max packet size for the output bulk endpoint */ + unsigned int readsize,ctrlsize; /* buffer sizes for freeing */ + unsigned int minor; /* xr_usb_serial minor number */ + unsigned char clocal; /* termios CLOCAL */ + unsigned int ctrl_caps; /* control capabilities from the class specific header */ + unsigned int susp_count; /* number of suspended interfaces */ + unsigned int combined_interfaces:1; /* control and data collapsed */ + unsigned int is_int_ep:1; /* interrupt endpoints contrary to spec used */ + unsigned int throttled:1; /* actually throttled */ + unsigned int throttle_req:1; /* throttle requested */ + u8 bInterval; + struct xr_usb_serial_wb *delayed_wb; /* write queued for a device about to be woken */ + unsigned int channel; + unsigned short DeviceVendor; + unsigned short DeviceProduct; + struct reg_addr_map reg_map; + bool rs485_422_en; +}; + +#define CDC_DATA_INTERFACE_TYPE 0x0a + +/* constants describing various quirks and errors */ +#define NO_UNION_NORMAL 1 +#define SINGLE_RX_URB 2 +#define NO_CAP_LINE 4 +#define NOT_A_MODEM 8 +#define NO_DATA_INTERFACE 16 +#define IGNORE_DEVICE 32 + + +#define UART_ENABLE_TX 1 +#define UART_ENABLE_RX 2 + +#define UART_GPIO_CLR_DTR 0x8 +#define UART_GPIO_SET_DTR 0x8 +#define UART_GPIO_CLR_RTS 0x20 +#define UART_GPIO_SET_RTS 0x20 + +#define LOOPBACK_ENABLE_TX_RX 1 +#define LOOPBACK_ENABLE_RTS_CTS 2 +#define LOOPBACK_ENABLE_DTR_DSR 4 + +#define UART_FLOW_MODE_NONE 0x0 +#define UART_FLOW_MODE_HW 0x1 +#define UART_FLOW_MODE_SW 0x2 + +#define UART_GPIO_MODE_SEL_GPIO 0x0 +#define UART_GPIO_MODE_SEL_RTS_CTS 0x1 + +#define XR2280x_FUNC_MGR_OFFSET 0x40 + + + + --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/xr_usb_serial_hal.c +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/xr_usb_serial_hal.c @@ -0,0 +1,724 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define XR_SET_MAP_XR2280X 5 +#define XR_GET_MAP_XR2280X 5 + +#define XR_SET_MAP_XR21B142X 0 +#define XR_GET_MAP_XR21B142X 0 + +#define XR_SET_MAP_XR21V141X 0 +#define XR_GET_MAP_XR21V141X 1 + +#define XR_SET_MAP_XR21B1411 0 +#define XR_GET_MAP_XR21B1411 1 + + +int xr_usb_serial_set_reg(struct xr_usb_serial *xr_usb_serial,int regnum, int value) +{ + int result; + int channel = 0; + dev_dbg(&xr_usb_serial->control->dev, "%s Channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) + { + int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR2280X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR, /* request_type */ + value, /* request value */ + XR2280xaddr, /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + + } + else if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + + if(xr_usb_serial->channel) + channel = xr_usb_serial->channel - 1; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21V141X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR, /* request_type */ + value, /* request value */ + regnum | (channel << 8), /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else if(xr_usb_serial->DeviceProduct == 0x1411) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21B1411, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR , /* request_type */ + value, /* request value */ + regnum , /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else if((xr_usb_serial->DeviceProduct == 0x1420)|| + (xr_usb_serial->DeviceProduct == 0x1422)|| + (xr_usb_serial->DeviceProduct == 0x1424)) + + { + + channel = (xr_usb_serial->channel - 4)*2; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21B142X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR | 1, /* request_type */ + value, /* request value */ + regnum | (channel << 8), /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else + { + result = -1; + } + if(result < 0) + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + return result; + + +} +int xr_usb_serial_set_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,int regnum, int value) +{ + int result; + int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%02x = 0x%02x\n", __func__,channel,regnum, value); + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR2280X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR, /* request_type */ + value, /* request value */ + XR2280xaddr, /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + + } + else if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21V141X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR, /* request_type */ + value, /* request value */ + regnum | (channel << 8), /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else if(xr_usb_serial->DeviceProduct == 0x1411) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21B1411, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR , /* request_type */ + value, /* request value */ + regnum , /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else if((xr_usb_serial->DeviceProduct == 0x1420)|| + (xr_usb_serial->DeviceProduct == 0x1422)|| + (xr_usb_serial->DeviceProduct == 0x1424)) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_sndctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_SET_MAP_XR21B142X, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR | 1, /* request_type */ + value, /* request value */ + regnum | (channel << 8), /* index */ + NULL, /* data */ + 0, /* size */ + 5000); /* timeout */ + } + else + { + result = -1; + } + if(result < 0) + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + return result; + + +} + +int xr_usb_serial_get_reg(struct xr_usb_serial *xr_usb_serial,int regnum, short *value) +{ + int result; + int channel = 0; + + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) + { + int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR2280X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR , /* request_type */ + 0, /* request value */ + XR2280xaddr, /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + + + + } + else if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + if(xr_usb_serial->channel) + channel = xr_usb_serial->channel -1; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21V141X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR, /* request_type */ + 0, /* request value */ + regnum | (channel << 8), /* index */ + value, /* data */ + 1, /* size */ + 5000); /* timeout */ + } + else if(xr_usb_serial->DeviceProduct == 0x1411) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21B1411, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR, /* request_type */ + 0, /* request value */ + regnum, /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + } + else if((xr_usb_serial->DeviceProduct == 0x1420)|| + (xr_usb_serial->DeviceProduct == 0x1422)|| + (xr_usb_serial->DeviceProduct == 0x1424)) + + { + channel = (xr_usb_serial->channel -4)*2; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21B142X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR | 1, /* request_type */ + 0, /* request value */ + regnum | (channel << 8), /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + } + else + { + result = -1; + } + + if(result < 0) + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d Reg 0x%x Error:%d\n", __func__,channel,regnum,result); + else + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); + + return result; + +} + + +int xr_usb_serial_get_reg_ext(struct xr_usb_serial *xr_usb_serial,int channel,int regnum, short *value) +{ + int result; + int XR2280xaddr = XR2280x_FUNC_MGR_OFFSET + regnum; + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) + { + + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR2280X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR , /* request_type */ + 0, /* request value */ + XR2280xaddr, /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + + + + } + else if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + unsigned char reg_value = 0; + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21V141X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR, /* request_type */ + 0, /* request value */ + regnum | (channel << 8), /* index */ + ®_value, /* data */ + 1, /* size */ + 5000); /* timeout */ + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_get_reg_ext reg:%x\n",reg_value); + *value = reg_value; + } + else if(xr_usb_serial->DeviceProduct == 0x1411) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21B1411, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR , /* request_type */ + 0, /* request value */ + regnum | (channel << 8), /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + } + else if((xr_usb_serial->DeviceProduct == 0x1420)|| + (xr_usb_serial->DeviceProduct == 0x1422)|| + (xr_usb_serial->DeviceProduct == 0x1424)) + { + result = usb_control_msg(xr_usb_serial->dev, /* usb device */ + usb_rcvctrlpipe(xr_usb_serial->dev, 0), /* endpoint pipe */ + XR_GET_MAP_XR21B142X, /* request */ + USB_DIR_IN | USB_TYPE_VENDOR | 1, /* request_type */ + 0, /* request value */ + regnum | (channel << 8), /* index */ + value, /* data */ + 2, /* size */ + 5000); /* timeout */ + } + else + { + result = -1; + } + + if(result < 0) + dev_dbg(&xr_usb_serial->control->dev, "%s Error:%d\n", __func__,result); + else + dev_dbg(&xr_usb_serial->control->dev, "%s channel:%d 0x%x = 0x%04x\n", __func__,channel,regnum, *value); + + return result; + +} + +struct xr21v141x_baud_rate +{ + unsigned int tx; + unsigned int rx0; + unsigned int rx1; +}; + +static struct xr21v141x_baud_rate xr21v141x_baud_rates[] = { + { 0x000, 0x000, 0x000 }, + { 0x000, 0x000, 0x000 }, + { 0x100, 0x000, 0x100 }, + { 0x020, 0x400, 0x020 }, + { 0x010, 0x100, 0x010 }, + { 0x208, 0x040, 0x208 }, + { 0x104, 0x820, 0x108 }, + { 0x844, 0x210, 0x884 }, + { 0x444, 0x110, 0x444 }, + { 0x122, 0x888, 0x224 }, + { 0x912, 0x448, 0x924 }, + { 0x492, 0x248, 0x492 }, + { 0x252, 0x928, 0x292 }, + { 0X94A, 0X4A4, 0XA52 }, + { 0X52A, 0XAA4, 0X54A }, + { 0XAAA, 0x954, 0X4AA }, + { 0XAAA, 0x554, 0XAAA }, + { 0x555, 0XAD4, 0X5AA }, + { 0XB55, 0XAB4, 0X55A }, + { 0X6B5, 0X5AC, 0XB56 }, + { 0X5B5, 0XD6C, 0X6D6 }, + { 0XB6D, 0XB6A, 0XDB6 }, + { 0X76D, 0X6DA, 0XBB6 }, + { 0XEDD, 0XDDA, 0X76E }, + { 0XDDD, 0XBBA, 0XEEE }, + { 0X7BB, 0XF7A, 0XDDE }, + { 0XF7B, 0XEF6, 0X7DE }, + { 0XDF7, 0XBF6, 0XF7E }, + { 0X7F7, 0XFEE, 0XEFE }, + { 0XFDF, 0XFBE, 0X7FE }, + { 0XF7F, 0XEFE, 0XFFE }, + { 0XFFF, 0XFFE, 0XFFD }, +}; +#define UART_CLOCK_DIVISOR_0 0x004 +#define UART_CLOCK_DIVISOR_1 0x005 +#define UART_CLOCK_DIVISOR_2 0x006 +#define UART_TX_CLOCK_MASK_0 0x007 +#define UART_TX_CLOCK_MASK_1 0x008 +#define UART_RX_CLOCK_MASK_0 0x009 +#define UART_RX_CLOCK_MASK_1 0x00a + +static int xr21v141x_set_baud_rate(struct xr_usb_serial *xr_usb_serial, unsigned int rate) +{ + unsigned int divisor = 48000000 / rate; + unsigned int i = ((32 * 48000000) / rate) & 0x1f; + unsigned int tx_mask = xr21v141x_baud_rates[i].tx; + unsigned int rx_mask = (divisor & 1) ? xr21v141x_baud_rates[i].rx1 : xr21v141x_baud_rates[i].rx0; + + dev_dbg(&xr_usb_serial->control->dev, "Setting baud rate to %d: i=%u div=%u tx=%03x rx=%03x\n", rate, i, divisor, tx_mask, rx_mask); + + xr_usb_serial_set_reg(xr_usb_serial,UART_CLOCK_DIVISOR_0, (divisor >> 0) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_CLOCK_DIVISOR_1, (divisor >> 8) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_CLOCK_DIVISOR_2, (divisor >> 16) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_TX_CLOCK_MASK_0, (tx_mask >> 0) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_TX_CLOCK_MASK_1, (tx_mask >> 8) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_RX_CLOCK_MASK_0, (rx_mask >> 0) & 0xff); + xr_usb_serial_set_reg(xr_usb_serial,UART_RX_CLOCK_MASK_1, (rx_mask >> 8) & 0xff); + + return 0; +} +/* devices aren't required to support these requests. + * the cdc xr_usb_serial descriptor tells whether they do... + */ +int xr_usb_serial_set_control(struct xr_usb_serial *xr_usb_serial, unsigned int control) +{ + int ret = 0; + + if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + if (control & XR_USB_SERIAL_CTRL_DTR) + xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_clr_addr, 0x08); + else + xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_set_addr, 0x08); + + if (control & XR_USB_SERIAL_CTRL_RTS) + xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_clr_addr, 0x20); + else + xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_set_addr, 0x20); + } + else + { + ret = xr_usb_serial_ctrl_msg(xr_usb_serial, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0); + } + + return ret; +} + +int xr_usb_serial_set_line(struct xr_usb_serial *xr_usb_serial, struct usb_cdc_line_coding* line) + { + int ret = 0; + unsigned int format_size; + unsigned int format_parity; + unsigned int format_stop; + if((xr_usb_serial->DeviceProduct == 0x1410) || + (xr_usb_serial->DeviceProduct == 0x1412) || + (xr_usb_serial->DeviceProduct == 0x1414)) + { + xr21v141x_set_baud_rate(xr_usb_serial,line->dwDTERate); + format_size = line->bDataBits; + format_parity = line->bParityType; + format_stop = line->bCharFormat; + xr_usb_serial_set_reg(xr_usb_serial, + xr_usb_serial->reg_map.uart_format_addr, + (format_size << 0) | (format_parity << 4) | (format_stop << 7) ); + + } + else + { + ret = xr_usb_serial_ctrl_msg(xr_usb_serial, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line)); + } + return ret; + } + int xr_usb_serial_set_flow_mode(struct xr_usb_serial *xr_usb_serial, + struct tty_struct *tty, unsigned int cflag) + { + unsigned int flow; + unsigned int gpio_mode; + + if (cflag & CRTSCTS) + { + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:hardware\n"); + flow = UART_FLOW_MODE_HW; + gpio_mode = UART_GPIO_MODE_SEL_RTS_CTS; + } + else if (I_IXOFF(tty) || I_IXON(tty)) + { + unsigned char start_char = START_CHAR(tty); + unsigned char stop_char = STOP_CHAR(tty); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:software\n"); + flow = UART_FLOW_MODE_SW; + gpio_mode = UART_GPIO_MODE_SEL_GPIO; + + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_xon_char_addr, start_char); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_xoff_char_addr, stop_char); + } + else + { + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_set_flow_mode:none\n"); + flow = UART_FLOW_MODE_NONE; + gpio_mode = UART_GPIO_MODE_SEL_GPIO; + } + // rs485,rs422 FD/HD mode + if (xr_usb_serial->rs485_422_en) { + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, 0x00); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0x0B); + } else { + //rs232, default mode + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_flow_addr, flow); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, gpio_mode); + } + return 0; + + + } + +int xr_usb_serial_send_break(struct xr_usb_serial *xr_usb_serial, int state) +{ + int ret = 0; + if((xr_usb_serial->DeviceProduct == 0x1410)|| + (xr_usb_serial->DeviceProduct == 0x1412)|| + (xr_usb_serial->DeviceProduct == 0x1414)) + { + if(state) + ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.tx_break_addr,0xffff); + else + ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.tx_break_addr,0); + } + else + { + ret = xr_usb_serial_ctrl_msg(xr_usb_serial, USB_CDC_REQ_SEND_BREAK, state, NULL, 0); + } + return ret; +} + +#define URM_REG_BLOCK 4 +#define URM_ENABLE_BASE 0x010 +#define URM_ENABLE_0_TX 0x001 +#define URM_ENABLE_0_RX 0x002 + +int xr_usb_serial_enable(struct xr_usb_serial *xr_usb_serial) +{ + int ret = 0; + int channel = xr_usb_serial->channel; + if((xr_usb_serial->DeviceProduct == 0x1410)|| + (xr_usb_serial->DeviceProduct == 0x1412)|| + (xr_usb_serial->DeviceProduct == 0x1414)) + { + ret = xr_usb_serial_set_reg_ext(xr_usb_serial,URM_REG_BLOCK,URM_ENABLE_BASE + channel,URM_ENABLE_0_TX); + ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_enable_addr,UART_ENABLE_TX | UART_ENABLE_RX); + ret = xr_usb_serial_set_reg_ext(xr_usb_serial,URM_REG_BLOCK,URM_ENABLE_BASE + channel,URM_ENABLE_0_TX | URM_ENABLE_0_RX); + } + else + { + ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_enable_addr,UART_ENABLE_TX | UART_ENABLE_RX); + } + + return ret; +} +int xr_usb_serial_disable(struct xr_usb_serial *xr_usb_serial) +{ + int ret = 0; + int channel = xr_usb_serial->channel; + ret = xr_usb_serial_set_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_enable_addr,0); + if((xr_usb_serial->DeviceProduct == 0x1410)|| + (xr_usb_serial->DeviceProduct == 0x1412)|| + (xr_usb_serial->DeviceProduct == 0x1414)) + { + ret = xr_usb_serial_set_reg_ext(xr_usb_serial,URM_REG_BLOCK,URM_ENABLE_BASE + channel,URM_ENABLE_0_TX); + } + + return ret; +} +int xr_usb_serial_set_loopback(struct xr_usb_serial *xr_usb_serial, int channel) +{ + int ret = 0; + xr_usb_serial_disable(xr_usb_serial); + ret = xr_usb_serial_set_reg_ext(xr_usb_serial,channel, + xr_usb_serial->reg_map.uart_loopback_addr,0x07); + xr_usb_serial_enable(xr_usb_serial); + return ret; +} + + +static int xr_usb_serial_tiocmget(struct xr_usb_serial *xr_usb_serial) + +{ + short data; + int result; + result = xr_usb_serial_get_reg(xr_usb_serial,xr_usb_serial->reg_map.uart_gpio_status_addr, &data); + dev_dbg(&xr_usb_serial->control->dev, "xr_usb_serial_tiocmget uart_gpio_status_addr:0x%04x\n",data); + if (result) + return ((data & 0x8) ? 0: TIOCM_DTR) | ((data & 0x20) ? 0:TIOCM_RTS ) | ((data & 0x4) ? 0:TIOCM_DSR) | ((data & 0x1) ? 0 : TIOCM_RI) | ((data & 0x2) ? 0:TIOCM_CD) | ((data & 0x10) ? 0 : TIOCM_CTS); + else + return -EFAULT; +} +static int xr_usb_serial_tiocmset(struct xr_usb_serial *xr_usb_serial, + + unsigned int set, unsigned int clear) + +{ + unsigned int newctrl = 0; + newctrl = xr_usb_serial->ctrlout; + + set = (set & TIOCM_DTR ? XR_USB_SERIAL_CTRL_DTR : 0) | (set & TIOCM_RTS ? XR_USB_SERIAL_CTRL_RTS : 0); + + clear = (clear & TIOCM_DTR ? XR_USB_SERIAL_CTRL_DTR : 0) | (clear & TIOCM_RTS ? XR_USB_SERIAL_CTRL_RTS : 0); + + newctrl = (newctrl & ~clear) | set; + + if (xr_usb_serial->ctrlout == newctrl) + return 0; + + xr_usb_serial->ctrlout = newctrl; + + if (newctrl & XR_USB_SERIAL_CTRL_DTR) + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_clr_addr, 0x08); + else + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_set_addr, 0x08); + + if (newctrl & XR_USB_SERIAL_CTRL_RTS) + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_clr_addr, 0x20); + else + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_set_addr, 0x20); + + return 0; +} + + +static struct reg_addr_map xr21b140x_reg_map; +static struct reg_addr_map xr21b1411_reg_map; +static struct reg_addr_map xr21v141x_reg_map; +static struct reg_addr_map xr21b142x_reg_map; + +static void init_xr21b140x_reg_map(void) +{ + xr21b140x_reg_map.uart_enable_addr = 0x00; + xr21b140x_reg_map.uart_format_addr = 0x05; + xr21b140x_reg_map.uart_flow_addr = 0x06; + xr21b140x_reg_map.uart_loopback_addr = 0x16; + xr21b140x_reg_map.uart_xon_char_addr = 0x07; + xr21b140x_reg_map.uart_xoff_char_addr = 0x08; + xr21b140x_reg_map.uart_gpio_mode_addr = 0x0c; + xr21b140x_reg_map.uart_gpio_dir_addr = 0x0d; + xr21b140x_reg_map.uart_gpio_set_addr = 0x0e; + xr21b140x_reg_map.uart_gpio_clr_addr = 0x0f; + xr21b140x_reg_map.uart_gpio_status_addr = 0x10; + xr21b140x_reg_map.tx_break_addr = 0x0a; + xr21b140x_reg_map.uart_custom_driver = 0x41; +} + +static void init_xr21b1411_reg_map(void) +{ + xr21b1411_reg_map.uart_enable_addr = 0xc00; + xr21b1411_reg_map.uart_flow_addr = 0xc06; + xr21b1411_reg_map.uart_loopback_addr = 0xc16; + xr21b1411_reg_map.uart_xon_char_addr = 0xc07; + xr21b1411_reg_map.uart_xoff_char_addr = 0xc08; + xr21b1411_reg_map.uart_gpio_mode_addr = 0xc0c; + xr21b1411_reg_map.uart_gpio_dir_addr = 0xc0d; + xr21b1411_reg_map.uart_gpio_set_addr = 0xc0e; + xr21b1411_reg_map.uart_gpio_clr_addr = 0xc0f; + xr21b1411_reg_map.uart_gpio_status_addr = 0xc10; + xr21b1411_reg_map.tx_break_addr = 0xc0a; + xr21b1411_reg_map.uart_custom_driver = 0x20d; +} + +static void init_xr21v141x_reg_map(void) +{ + xr21v141x_reg_map.uart_enable_addr = 0x03; + xr21v141x_reg_map.uart_format_addr = 0x0b; + xr21v141x_reg_map.uart_flow_addr = 0x0c; + xr21v141x_reg_map.uart_loopback_addr = 0x12; + xr21v141x_reg_map.uart_xon_char_addr = 0x10; + xr21v141x_reg_map.uart_xoff_char_addr = 0x11; + xr21v141x_reg_map.uart_gpio_mode_addr = 0x1a; + xr21v141x_reg_map.uart_gpio_dir_addr = 0x1b; + xr21v141x_reg_map.uart_gpio_set_addr = 0x1d; + xr21v141x_reg_map.uart_gpio_clr_addr = 0x1e; + xr21v141x_reg_map.uart_gpio_status_addr = 0x1f; + xr21v141x_reg_map.tx_break_addr = 0x14; +} +static void init_xr21b142x_reg_map(void) +{ + xr21b142x_reg_map.uart_enable_addr = 0x00; + xr21b142x_reg_map.uart_flow_addr = 0x06; + xr21b142x_reg_map.uart_loopback_addr = 0x16; + xr21b142x_reg_map.uart_xon_char_addr = 0x07; + xr21b142x_reg_map.uart_xoff_char_addr = 0x08; + xr21b142x_reg_map.uart_gpio_mode_addr = 0x0c; + xr21b142x_reg_map.uart_gpio_dir_addr = 0x0d; + xr21b142x_reg_map.uart_gpio_set_addr = 0x0e; + xr21b142x_reg_map.uart_gpio_clr_addr = 0x0f; + xr21b142x_reg_map.uart_gpio_status_addr = 0x10; + xr21b140x_reg_map.tx_break_addr = 0x0a; + xr21b140x_reg_map.uart_custom_driver = 0x60; + xr21b140x_reg_map.uart_low_latency = 0x46; +} + +int xr_usb_serial_pre_setup(struct xr_usb_serial *xr_usb_serial) +{ + int ret = 0; + + init_xr21b140x_reg_map(); + init_xr21b1411_reg_map(); + init_xr21v141x_reg_map(); + init_xr21b142x_reg_map(); + if((xr_usb_serial->DeviceProduct&0xfff0) == 0x1400) + { + memcpy(&(xr_usb_serial->reg_map),&xr21b140x_reg_map,sizeof(struct reg_addr_map)); + + } + else if(xr_usb_serial->DeviceProduct == 0x1411) + { + memcpy(&(xr_usb_serial->reg_map),&xr21b1411_reg_map,sizeof(struct reg_addr_map)); + } + else if((xr_usb_serial->DeviceProduct == 0x1410)|| + (xr_usb_serial->DeviceProduct == 0x1412)|| + (xr_usb_serial->DeviceProduct == 0x1414)) + { + memcpy(&(xr_usb_serial->reg_map),&xr21v141x_reg_map,sizeof(struct reg_addr_map)); + } + else if((xr_usb_serial->DeviceProduct == 0x1420)|| + (xr_usb_serial->DeviceProduct == 0x1422)|| + (xr_usb_serial->DeviceProduct == 0x1424)) + { + memcpy(&(xr_usb_serial->reg_map),&xr21b142x_reg_map,sizeof(struct reg_addr_map)); + } + else + { + ret = -1; + } + if(xr_usb_serial->reg_map.uart_custom_driver) + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_custom_driver, 1); + + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_mode_addr, 0); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_dir_addr, 0x28); + xr_usb_serial_set_reg(xr_usb_serial, xr_usb_serial->reg_map.uart_gpio_set_addr, UART_GPIO_SET_DTR | UART_GPIO_SET_RTS); + + return ret; + +} + + + --- linux-aws-4.15.0.orig/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h +++ linux-aws-4.15.0/ubuntu/xr-usb-serial/xr_usb_serial_ioctl.h @@ -0,0 +1,31 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#define XR_USB_SERIAL_IOC_MAGIC 'v' + +#define XR_USB_SERIAL_GET_REG _IOWR(XR_USB_SERIAL_IOC_MAGIC, 1, int) +#define XR_USB_SERIAL_SET_REG _IOWR(XR_USB_SERIAL_IOC_MAGIC, 2, int) +#define XR_USB_SERIAL_SET_ADDRESS_MATCH _IO(XR_USB_SERIAL_IOC_MAGIC, 3) +#define XR_USB_SERIAL_SET_PRECISE_FLAGS _IO(XR_USB_SERIAL_IOC_MAGIC, 4) +#define XR_USB_SERIAL_TEST_MODE _IO(XR_USB_SERIAL_IOC_MAGIC, 5) +#define XR_USB_SERIAL_LOOPBACK _IO(XR_USB_SERIAL_IOC_MAGIC, 6) + +#define VZ_ADDRESS_UNICAST_S 0 +#define VZ_ADDRESS_BROADCAST_S 8 +#define VZ_ADDRESS_MATCH(U, B) (0x8000000 | ((B) << VZ_ADDRESS_BROADCAST_S) | ((U) << VZ_ADDRESS_UNICAST_S)) +#define VZ_ADDRESS_MATCH_DISABLE 0 --- linux-aws-4.15.0.orig/zfs/AUTHORS +++ linux-aws-4.15.0/zfs/AUTHORS @@ -0,0 +1,95 @@ +Brian Behlendorf is the principal developer of the ZFS on Linux port. +He works full time as a computer scientist at Lawrence Livermore +National Laboratory on the ZFS and Lustre filesystems. However, +this port would not have been possible without the help of many +others who have contributed their time, effort, and insight. + + Brian Behlendorf + +First and foremost the hard working ZFS developers at Sun/Oracle. +They are responsible for the bulk of the code in this project and +without their efforts there never would have been a ZFS filesystem. + + The ZFS Development Team at Sun/Oracle + +Next all the developers at KQ Infotech who implemented a prototype +ZFS Posix Layer (ZPL). Their implementation provided an excellent +reference for adding the ZPL functionality. + + Anand Mitra + Anurag Agarwal + Neependra Khare + Prasad Joshi + Rohan Puri + Sandip Divekar + Shoaib + Shrirang + +Additionally the following individuals have all made contributions +to the project and deserve to be acknowledged. + + Albert Lee + Alejandro R. Sedeño + Alex Zhuravlev + Alexander Eremin + Alexander Stetsenko + Alexey Shvetsov + Andreas Dilger + Andrew Reid + Andrew Stormont + Andrew Tselischev + Andriy Gapon + Aniruddha Shankar + Bill Pijewski + Chris Dunlap + Chris Dunlop + Chris Siden + Chris Wedgwood + Christian Kohlschütter + Christopher Siden + Craig Sanders + Cyril Plisko + Dan McDonald + Daniel Verite + Darik Horn + Eric Schrock + Etienne Dechamps + Fajar A. Nugraha + Frederik Wessels + Garrett D'Amore + George Wilson + Gordon Ross + Gregor Kopka + Gunnar Beutner + James H + Javen Wu + Jeremy Gill + Jorgen Lundman + KORN Andras + Kyle Fuller + Manuel Amador (Rudd-O) + Martin Matuska + Massimo Maggi + Matthew Ahrens + Michael Martin + Mike Harsch + Ned Bass + Oleg Stepura + P.SCH + Pawel Jakub Dawidek + Prakash Surya + Prasad Joshi + Ricardo M. Correia + Richard Laager + Richard Lowe + Richard Yao + Rohan Puri + Shampavman + Simon Klinkert + Suman Chakravartula + Tim Haley + Turbo Fredriksson + Xin Li + Yuxuan Shui + Zachary Bedell + nordaux --- linux-aws-4.15.0.orig/zfs/COPYRIGHT +++ linux-aws-4.15.0/zfs/COPYRIGHT @@ -0,0 +1,33 @@ +The majority of the code in the ZFS on Linux port comes from OpenSolaris +which has been released under the terms of the CDDL open source license. +This includes the core ZFS code, libavl, libnvpair, libefi, libunicode, +and libutil. The original OpenSolaris source can be downloaded from: + +http://dlc.sun.com/osol/on/downloads/b121/on-src.tar.bz2 + +Files which do not originate from OpenSolaris are noted in the file header +and attributed properly. These exceptions include, but are not limited +to, the vdev_disk.c and zvol.c implementation which are licensed under +the CDDL. + +The zpios test code is originally derived from the Lustre pios test code +which is licensed under the GPLv2. As such the heavily modified zpios +kernel test code also remains licensed under the GPLv2. + +The latest stable and development versions of this port can be downloaded +from the official ZFS on Linux site located at: + +http://zfsonlinux.org/ + +This ZFS on Linux port was produced at the Lawrence Livermore National +Laboratory (LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) +between the U.S. Department of Energy (DOE) and Lawrence Livermore +National Security, LLC (LLNS) for the operation of LLNL. It has been +approved for release under LLNL-CODE-403049. + +Unless otherwise noted, all files in this distribution are released +under the Common Development and Distribution License (CDDL). +Exceptions are noted within the associated source files. See the file +OPENSOLARIS.LICENSE for more information. + +Refer to the git commit log for authoritative copyright attribution. --- linux-aws-4.15.0.orig/zfs/DISCLAIMER +++ linux-aws-4.15.0/zfs/DISCLAIMER @@ -0,0 +1,24 @@ +This work was produced at the Lawrence Livermore National Laboratory +(LLNL) under Contract No. DE-AC52-07NA27344 (Contract 44) between +the U.S. Department of Energy (DOE) and Lawrence Livermore National +Security, LLC (LLNS) for the operation of LLNL. + +This work was prepared as an account of work sponsored by an agency of +the United States Government. Neither the United States Government nor +Lawrence Livermore National Security, LLC nor any of their employees, +makes any warranty, express or implied, or assumes any liability or +responsibility for the accuracy, completeness, or usefulness of any +information, apparatus, product, or process disclosed, or represents +that its use would not infringe privately-owned rights. + +Reference herein to any specific commercial products, process, or +services by trade name, trademark, manufacturer or otherwise does +not necessarily constitute or imply its endorsement, recommendation, +or favoring by the United States Government or Lawrence Livermore +National Security, LLC. The views and opinions of authors expressed +herein do not necessarily state or reflect those of the United States +Government or Lawrence Livermore National Security, LLC, and shall +not be used for advertising or product endorsement purposes. + +The precise terms and conditions for copying, distribution, and +modification are specified in the file OPENSOLARIS.LICENSE. --- linux-aws-4.15.0.orig/zfs/META +++ linux-aws-4.15.0/zfs/META @@ -0,0 +1,8 @@ +Meta: 1 +Name: zfs +Branch: 1.0 +Version: 0.7.5 +Release: 1ubuntu1 +Release-Tags: relext +License: CDDL +Author: OpenZFS on Linux --- linux-aws-4.15.0.orig/zfs/Makefile.am +++ linux-aws-4.15.0/zfs/Makefile.am @@ -0,0 +1,97 @@ +ACLOCAL_AMFLAGS = -I config + +include config/rpm.am +include config/deb.am +include config/tgz.am + + +if CONFIG_USER + +endif +if CONFIG_KERNEL +SUBDIRS = module include + +extradir = @prefix@/src/zfs-$(VERSION) +extra_HEADERS = zfs.release.in zfs_config.h.in + +kerneldir = @prefix@/src/zfs-$(VERSION)/$(LINUX_VERSION) +nodist_kernel_HEADERS = zfs.release zfs_config.h module/$(LINUX_SYMBOLS) +endif + +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = autogen.sh copy-builtin +EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am +EXTRA_DIST += META DISCLAIMER COPYRIGHT README.markdown OPENSOLARIS.LICENSE + +distclean-local:: + -$(RM) -R autom4te*.cache + -find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ + -o -name .pc -o -name .hg -o -name .git \) -prune -o \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name '.script-config' -o -size 0 \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \ + -o -name 'Makefile' -o -name 'Module.symvers' \ + -o -name '*.order' -o -name '*.markers' \) \ + -type f -print | xargs $(RM) + +dist-hook: + sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ + $(distdir)/META + +checkstyle: cstyle shellcheck flake8 commitcheck + +commitcheck: + @if git rev-parse --git-dir > /dev/null 2>&1; then \ + scripts/commitcheck.sh; \ + fi + +cstyle: + @find ${top_srcdir} -name '*.[hc]' ! -name 'zfs_config.*' \ + ! -name '*.mod.c' -type f -exec scripts/cstyle.pl -cpP {} \+ + +shellcheck: + @if type shellcheck > /dev/null 2>&1; then \ + shellcheck --exclude=SC1090 --format=gcc scripts/paxcheck.sh \ + scripts/zloop.sh \ + scripts/zfs-tests.sh \ + scripts/zfs.sh \ + scripts/commitcheck.sh \ + $$(find cmd/zed/zed.d/*.sh -type f) \ + $$(find cmd/zpool/zpool.d/* -executable); \ + fi + +lint: cppcheck paxcheck + +cppcheck: + @if type cppcheck > /dev/null 2>&1; then \ + cppcheck --quiet --force --error-exitcode=2 \ + --suppressions-list=.github/suppressions.txt \ + -UHAVE_SSE2 -UHAVE_AVX512F \ + ${top_srcdir}; \ + fi + +paxcheck: + @if type scanelf > /dev/null 2>&1; then \ + scripts/paxcheck.sh ${top_srcdir}; \ + fi + +flake8: + @if type flake8 > /dev/null 2>&1; then \ + flake8 ${top_srcdir}; \ + fi + +ctags: + $(RM) tags + find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags + +etags: + $(RM) TAGS + find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a + +tags: ctags etags + +pkg: @DEFAULT_PACKAGE@ +pkg-dkms: @DEFAULT_PACKAGE@-dkms +pkg-kmod: @DEFAULT_PACKAGE@-kmod +pkg-utils: @DEFAULT_PACKAGE@-utils --- linux-aws-4.15.0.orig/zfs/Makefile.in +++ linux-aws-4.15.0/zfs/Makefile.in @@ -0,0 +1,1380 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +############################################################################### +# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for RPM packages. +############################################################################### + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__extra_HEADERS_DIST) \ + $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = zfs_config.h +CONFIG_CLEAN_FILES = module/Makefile module/avl/Makefile \ + module/nvpair/Makefile module/unicode/Makefile \ + module/zcommon/Makefile module/zfs/Makefile \ + module/zpios/Makefile module/icp/Makefile zfs.release +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__extra_HEADERS_DIST = zfs.release.in zfs_config.h.in +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(extradir)" "$(DESTDIR)$(kerneldir)" +HEADERS = $(extra_HEADERS) $(nodist_kernel_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)zfs_config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = module include +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config/deb.am \ + $(srcdir)/config/rpm.am $(srcdir)/config/tgz.am \ + $(srcdir)/zfs.release.in $(srcdir)/zfs_config.h.in \ + $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \ + $(top_srcdir)/config/config.sub \ + $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \ + $(top_srcdir)/config/missing $(top_srcdir)/module/Makefile.in \ + $(top_srcdir)/module/avl/Makefile.in \ + $(top_srcdir)/module/icp/Makefile.in \ + $(top_srcdir)/module/nvpair/Makefile.in \ + $(top_srcdir)/module/unicode/Makefile.in \ + $(top_srcdir)/module/zcommon/Makefile.in \ + $(top_srcdir)/module/zfs/Makefile.in \ + $(top_srcdir)/module/zpios/Makefile.in AUTHORS config/compile \ + config/config.guess config/config.sub config/install-sh \ + config/ltmain.sh config/missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +ACLOCAL_AMFLAGS = -I config +@CONFIG_KERNEL_TRUE@SUBDIRS = module include +@CONFIG_KERNEL_TRUE@extradir = @prefix@/src/zfs-$(VERSION) +@CONFIG_KERNEL_TRUE@extra_HEADERS = zfs.release.in zfs_config.h.in +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/$(LINUX_VERSION) +@CONFIG_KERNEL_TRUE@nodist_kernel_HEADERS = zfs.release zfs_config.h module/$(LINUX_SYMBOLS) +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = autogen.sh copy-builtin config/config.awk config/rpm.am \ + config/deb.am config/tgz.am META DISCLAIMER COPYRIGHT \ + README.markdown OPENSOLARIS.LICENSE +all: zfs_config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/config/rpm.am $(srcdir)/config/deb.am $(srcdir)/config/tgz.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/config/rpm.am $(srcdir)/config/deb.am $(srcdir)/config/tgz.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +zfs_config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/zfs_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status zfs_config.h +$(srcdir)/zfs_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f zfs_config.h stamp-h1 +module/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/avl/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/avl/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/nvpair/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/nvpair/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/unicode/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/unicode/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/zcommon/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/zcommon/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/zfs/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/zfs/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/zpios/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/zpios/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +module/icp/Makefile: $(top_builddir)/config.status $(top_srcdir)/module/icp/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +zfs.release: $(top_builddir)/config.status $(srcdir)/zfs.release.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-extraHEADERS: $(extra_HEADERS) + @$(NORMAL_INSTALL) + @list='$(extra_HEADERS)'; test -n "$(extradir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(extradir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(extradir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(extradir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(extradir)" || exit $$?; \ + done + +uninstall-extraHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(extra_HEADERS)'; test -n "$(extradir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(extradir)'; $(am__uninstall_files_from_dir) +install-nodist_kernelHEADERS: $(nodist_kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-nodist_kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) zfs_config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(extradir)" "$(DESTDIR)$(kerneldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-extraHEADERS install-nodist_kernelHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-extraHEADERS uninstall-nodist_kernelHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ + dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-local distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-extraHEADERS install-html install-html-am install-info \ + install-info-am install-man install-nodist_kernelHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-extraHEADERS uninstall-nodist_kernelHEADERS + +.PRECIOUS: Makefile + + +srpm-kmod: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common + +srpm-dkms: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common + +srpm-utils: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common + +srpm: srpm-kmod srpm-dkms srpm-utils +srpms: srpm-kmod srpm-dkms srpm-utils + +rpm-kmod: srpm-kmod + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common + +rpm-dkms: srpm-dkms + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common + +rpm-utils: srpm-utils + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common + +rpm: rpm-kmod rpm-dkms rpm-utils +rpms: rpm-kmod rpm-dkms rpm-utils + +rpm-local: + @(if test "${HAVE_RPMBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${RPMBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${RPMBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + mkdir -p $(rpmbuild)/TMP && \ + mkdir -p $(rpmbuild)/BUILD && \ + mkdir -p $(rpmbuild)/RPMS && \ + mkdir -p $(rpmbuild)/SRPMS && \ + mkdir -p $(rpmbuild)/SPECS && \ + cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \ + mkdir -p $(rpmbuild)/SOURCES && \ + cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \ + cp $(distdir).tar.gz $(rpmbuild)/SOURCES) + +srpm-common: dist + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C $(RPMBUILD) \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \ + cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \ + rm -R $$rpmbuild) + +rpm-common: + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C ${RPMBUILD} \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) --rebuild $$rpmpkg || exit 1; \ + cp $$rpmbuild/RPMS/*/* . || exit 1; \ + rm -R $$rpmbuild) +deb-local: + @(if test "${HAVE_DPKGBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${DPKGBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${DPKGBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +deb-kmod: deb-local rpm-kmod + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-dkms: deb-local rpm-dkms + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-dkms-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-dkms-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-utils: deb-local rpm-utils + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + pkg2=libnvpair1-$${version}.$${arch}.rpm; \ + pkg3=libuutil1-$${version}.$${arch}.rpm; \ + pkg4=libzfs2-$${version}.$${arch}.rpm; \ + pkg5=libzpool2-$${version}.$${arch}.rpm; \ + pkg6=libzfs2-devel-$${version}.$${arch}.rpm; \ + pkg7=$${name}-test-$${version}.$${arch}.rpm; \ + pkg8=$${name}-dracut-$${version}.$${arch}.rpm; \ + pkg9=$${name}-initramfs-$${version}.$${arch}.rpm; \ + path_prepend=`mktemp -d /tmp/intercept.XXX`; \ + echo "#$(SHELL)" > $${path_prepend}/dh_shlibdeps; \ + echo "`which dh_shlibdeps` -- \ + -xlibuutil1linux -xlibnvpair1linux -xlibzfs2linux -xlibzpool2linux" \ + >> $${path_prepend}/dh_shlibdeps; \ + chmod +x $${path_prepend}/dh_shlibdeps; \ + env PATH=$${path_prepend}:$${PATH} \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb \ + $$pkg1 $$pkg2 $$pkg3 $$pkg4 $$pkg5 $$pkg6 $$pkg7 \ + $$pkg8 $$pkg9; \ + $(RM) $${path_prepend}/dh_shlibdeps; \ + rmdir $${path_prepend}; \ + $(RM) $$pkg1 $$pkg2 $$pkg3 $$pkg4 $$pkg5 $$pkg6 $$pkg7 \ + $$pkg8 $$pkg9; + +deb: deb-kmod deb-dkms deb-utils +tgz-local: + @(if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +tgz-kmod: tgz-local rpm-kmod +@CONFIG_KERNEL_TRUE@ name=${PACKAGE}; \ +@CONFIG_KERNEL_TRUE@ version=${VERSION}-${RELEASE}; \ +@CONFIG_KERNEL_TRUE@ arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ +@CONFIG_KERNEL_TRUE@ pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ +@CONFIG_KERNEL_TRUE@ fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ +@CONFIG_KERNEL_TRUE@ $(RM) $$pkg1 + +tgz-utils: tgz-local rpm-utils +@CONFIG_USER_TRUE@ name=${PACKAGE}; \ +@CONFIG_USER_TRUE@ version=${VERSION}-${RELEASE}; \ +@CONFIG_USER_TRUE@ arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ +@CONFIG_USER_TRUE@ pkg1=$${name}-$${version}.$${arch}.rpm; \ +@CONFIG_USER_TRUE@ pkg2=$${name}-devel-$${version}.$${arch}.rpm; \ +@CONFIG_USER_TRUE@ pkg3=$${name}-test-$${version}.$${arch}.rpm; \ +@CONFIG_USER_TRUE@ fakeroot $(ALIEN) --scripts --to-tgz $$pkg1 $$pkg2 $$pkg3; \ +@CONFIG_USER_TRUE@ $(RM) $$pkg1 $$pkg2 $$pkg3 + +tgz: tgz-kmod tgz-utils + +distclean-local:: + -$(RM) -R autom4te*.cache + -find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ + -o -name .pc -o -name .hg -o -name .git \) -prune -o \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name '.script-config' -o -size 0 \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \ + -o -name 'Makefile' -o -name 'Module.symvers' \ + -o -name '*.order' -o -name '*.markers' \) \ + -type f -print | xargs $(RM) + +dist-hook: + sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ + $(distdir)/META + +checkstyle: cstyle shellcheck flake8 commitcheck + +commitcheck: + @if git rev-parse --git-dir > /dev/null 2>&1; then \ + scripts/commitcheck.sh; \ + fi + +cstyle: + @find ${top_srcdir} -name '*.[hc]' ! -name 'zfs_config.*' \ + ! -name '*.mod.c' -type f -exec scripts/cstyle.pl -cpP {} \+ + +shellcheck: + @if type shellcheck > /dev/null 2>&1; then \ + shellcheck --exclude=SC1090 --format=gcc scripts/paxcheck.sh \ + scripts/zloop.sh \ + scripts/zfs-tests.sh \ + scripts/zfs.sh \ + scripts/commitcheck.sh \ + $$(find cmd/zed/zed.d/*.sh -type f) \ + $$(find cmd/zpool/zpool.d/* -executable); \ + fi + +lint: cppcheck paxcheck + +cppcheck: + @if type cppcheck > /dev/null 2>&1; then \ + cppcheck --quiet --force --error-exitcode=2 \ + --suppressions-list=.github/suppressions.txt \ + -UHAVE_SSE2 -UHAVE_AVX512F \ + ${top_srcdir}; \ + fi + +paxcheck: + @if type scanelf > /dev/null 2>&1; then \ + scripts/paxcheck.sh ${top_srcdir}; \ + fi + +flake8: + @if type flake8 > /dev/null 2>&1; then \ + flake8 ${top_srcdir}; \ + fi + +ctags: + $(RM) tags + find $(top_srcdir) -name .git -prune -o -name '*.[hc]' | xargs ctags + +etags: + $(RM) TAGS + find $(top_srcdir) -name .pc -prune -o -name '*.[hc]' | xargs etags -a + +tags: ctags etags + +pkg: @DEFAULT_PACKAGE@ +pkg-dkms: @DEFAULT_PACKAGE@-dkms +pkg-kmod: @DEFAULT_PACKAGE@-kmod +pkg-utils: @DEFAULT_PACKAGE@-utils + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/OPENSOLARIS.LICENSE +++ linux-aws-4.15.0/zfs/OPENSOLARIS.LICENSE @@ -0,0 +1,384 @@ +Unless otherwise noted, all files in this distribution are released +under the Common Development and Distribution License (CDDL). +Exceptions are noted within the associated source files. + +-------------------------------------------------------------------- + + +COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0 + +1. Definitions. + + 1.1. "Contributor" means each individual or entity that creates + or contributes to the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Software, prior Modifications used by a Contributor (if any), + and the Modifications made by that particular Contributor. + + 1.3. "Covered Software" means (a) the Original Software, or (b) + Modifications, or (c) the combination of files containing + Original Software with files containing Modifications, in + each case including portions thereof. + + 1.4. "Executable" means the Covered Software in any form other + than Source Code. + + 1.5. "Initial Developer" means the individual or entity that first + makes Original Software available under this License. + + 1.6. "Larger Work" means a work which combines Covered Software or + portions thereof with code not governed by the terms of this + License. + + 1.7. "License" means this document. + + 1.8. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed + herein. + + 1.9. "Modifications" means the Source Code and Executable form of + any of the following: + + A. Any file that results from an addition to, deletion from or + modification of the contents of a file containing Original + Software or previous Modifications; + + B. Any new file that contains any part of the Original + Software or previous Modifications; or + + C. Any new file that is contributed or otherwise made + available under the terms of this License. + + 1.10. "Original Software" means the Source Code and Executable + form of computer software code that is originally released + under this License. + + 1.11. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, + process, and apparatus claims, in any patent Licensable by + grantor. + + 1.12. "Source Code" means (a) the common form of computer software + code in which modifications are made and (b) associated + documentation included in or with such code. + + 1.13. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms + of, this License. For legal entities, "You" includes any + entity which controls, is controlled by, or is under common + control with You. For purposes of this definition, + "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty + percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants. + + 2.1. The Initial Developer Grant. + + Conditioned upon Your compliance with Section 3.1 below and + subject to third party intellectual property claims, the Initial + Developer hereby grants You a world-wide, royalty-free, + non-exclusive license: + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer, to use, + reproduce, modify, display, perform, sublicense and + distribute the Original Software (or portions thereof), + with or without Modifications, and/or as part of a Larger + Work; and + + (b) under Patent Claims infringed by the making, using or + selling of Original Software, to make, have made, use, + practice, sell, and offer for sale, and/or otherwise + dispose of the Original Software (or portions thereof). + + (c) The licenses granted in Sections 2.1(a) and (b) are + effective on the date Initial Developer first distributes + or otherwise makes the Original Software available to a + third party under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: (1) for code that You delete from the Original + Software, or (2) for infringements caused by: (i) the + modification of the Original Software, or (ii) the + combination of the Original Software with other software + or devices. + + 2.2. Contributor Grant. + + Conditioned upon Your compliance with Section 3.1 below and + subject to third party intellectual property claims, each + Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor to use, reproduce, + modify, display, perform, sublicense and distribute the + Modifications created by such Contributor (or portions + thereof), either on an unmodified basis, with other + Modifications, as Covered Software and/or as part of a + Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either + alone and/or in combination with its Contributor Version + (or portions of such combination), to make, use, sell, + offer for sale, have made, and/or otherwise dispose of: + (1) Modifications made by that Contributor (or portions + thereof); and (2) the combination of Modifications made by + that Contributor with its Contributor Version (or portions + of such combination). + + (c) The licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first distributes or + otherwise makes the Modifications available to a third + party. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: (1) for any code that Contributor has deleted + from the Contributor Version; (2) for infringements caused + by: (i) third party modifications of Contributor Version, + or (ii) the combination of Modifications made by that + Contributor with other software (except as part of the + Contributor Version) or other devices; or (3) under Patent + Claims infringed by Covered Software in the absence of + Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1. Availability of Source Code. + + Any Covered Software that You distribute or otherwise make + available in Executable form must also be made available in Source + Code form and that Source Code form must be distributed only under + the terms of this License. You must include a copy of this + License with every copy of the Source Code form of the Covered + Software You distribute or otherwise make available. You must + inform recipients of any such Covered Software in Executable form + as to how they can obtain such Covered Software in Source Code + form in a reasonable manner on or through a medium customarily + used for software exchange. + + 3.2. Modifications. + + The Modifications that You create or to which You contribute are + governed by the terms of this License. You represent that You + believe Your Modifications are Your original creation(s) and/or + You have sufficient rights to grant the rights conveyed by this + License. + + 3.3. Required Notices. + + You must include a notice in each of Your Modifications that + identifies You as the Contributor of the Modification. You may + not remove or alter any copyright, patent or trademark notices + contained within the Covered Software, or any notices of licensing + or any descriptive text giving attribution to any Contributor or + the Initial Developer. + + 3.4. Application of Additional Terms. + + You may not offer or impose any terms on any Covered Software in + Source Code form that alters or restricts the applicable version + of this License or the recipients' rights hereunder. You may + choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of + Covered Software. However, you may do so only on Your own behalf, + and not on behalf of the Initial Developer or any Contributor. + You must make it absolutely clear that any such warranty, support, + indemnity or liability obligation is offered by You alone, and You + hereby agree to indemnify the Initial Developer and every + Contributor for any liability incurred by the Initial Developer or + such Contributor as a result of warranty, support, indemnity or + liability terms You offer. + + 3.5. Distribution of Executable Versions. + + You may distribute the Executable form of the Covered Software + under the terms of this License or under the terms of a license of + Your choice, which may contain terms different from this License, + provided that You are in compliance with the terms of this License + and that the license for the Executable form does not attempt to + limit or alter the recipient's rights in the Source Code form from + the rights set forth in this License. If You distribute the + Covered Software in Executable form under a different license, You + must make it absolutely clear that any terms which differ from + this License are offered by You alone, not by the Initial + Developer or Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred + by the Initial Developer or such Contributor as a result of any + such terms You offer. + + 3.6. Larger Works. + + You may create a Larger Work by combining Covered Software with + other code not governed by the terms of this License and + distribute the Larger Work as a single product. In such a case, + You must make sure the requirements of this License are fulfilled + for the Covered Software. + +4. Versions of the License. + + 4.1. New Versions. + + Sun Microsystems, Inc. is the initial license steward and may + publish revised and/or new versions of this License from time to + time. Each version will be given a distinguishing version number. + Except as provided in Section 4.3, no one other than the license + steward has the right to modify this License. + + 4.2. Effect of New Versions. + + You may always continue to use, distribute or otherwise make the + Covered Software available under the terms of the version of the + License under which You originally received the Covered Software. + If the Initial Developer includes a notice in the Original + Software prohibiting it from being distributed or otherwise made + available under any subsequent version of the License, You must + distribute and make the Covered Software available under the terms + of the version of the License under which You originally received + the Covered Software. Otherwise, You may also choose to use, + distribute or otherwise make the Covered Software available under + the terms of any subsequent version of the License published by + the license steward. + + 4.3. Modified Versions. + + When You are an Initial Developer and You want to create a new + license for Your Original Software, You may create and use a + modified version of this License if You: (a) rename the license + and remove any references to the name of the license steward + (except to note that the license differs from this License); and + (b) otherwise make it clear that the license contains terms which + differ from this License. + +5. DISCLAIMER OF WARRANTY. + + COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" + BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED + SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR + PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND + PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY + COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE + INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY + NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF + WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS + DISCLAIMER. + +6. TERMINATION. + + 6.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to + cure such breach within 30 days of becoming aware of the breach. + Provisions which, by their nature, must remain in effect beyond + the termination of this License shall survive. + + 6.2. If You assert a patent infringement claim (excluding + declaratory judgment actions) against Initial Developer or a + Contributor (the Initial Developer or Contributor against whom You + assert such claim is referred to as "Participant") alleging that + the Participant Software (meaning the Contributor Version where + the Participant is a Contributor or the Original Software where + the Participant is the Initial Developer) directly or indirectly + infringes any patent, then any and all rights granted directly or + indirectly to You by such Participant, the Initial Developer (if + the Initial Developer is not the Participant) and all Contributors + under Sections 2.1 and/or 2.2 of this License shall, upon 60 days + notice from Participant terminate prospectively and automatically + at the expiration of such 60 day notice period, unless if within + such 60 day period You withdraw Your claim with respect to the + Participant Software against such Participant either unilaterally + or pursuant to a written agreement with Participant. + + 6.3. In the event of termination under Sections 6.1 or 6.2 above, + all end user licenses that have been validly granted by You or any + distributor hereunder prior to termination (excluding licenses + granted to You by any distributor) shall survive termination. + +7. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE + INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF + COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE + LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR + CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT + LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK + STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL + INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT + APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO + NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR + CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT + APPLY TO YOU. + +8. U.S. GOVERNMENT END USERS. + + The Covered Software is a "commercial item," as that term is + defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial + computer software" (as that term is defined at 48 + C.F.R. 252.227-7014(a)(1)) and "commercial computer software + documentation" as such terms are used in 48 C.F.R. 12.212 + (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 + C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all + U.S. Government End Users acquire Covered Software with only those + rights set forth herein. This U.S. Government Rights clause is in + lieu of, and supersedes, any other FAR, DFAR, or other clause or + provision that addresses Government rights in computer software + under this License. + +9. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed + by the law of the jurisdiction specified in a notice contained + within the Original Software (except to the extent applicable law, + if any, provides otherwise), excluding such jurisdiction's + conflict-of-law provisions. Any litigation relating to this + License shall be subject to the jurisdiction of the courts located + in the jurisdiction and venue specified in a notice contained + within the Original Software, with the losing party responsible + for costs, including, without limitation, court costs and + reasonable attorneys' fees and expenses. The application of the + United Nations Convention on Contracts for the International Sale + of Goods is expressly excluded. Any law or regulation which + provides that the language of a contract shall be construed + against the drafter shall not apply to this License. You agree + that You alone are responsible for compliance with the United + States export administration regulations (and the export control + laws and regulation of any other countries) when You use, + distribute or otherwise make available any Covered Software. + +10. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or + indirectly, out of its utilization of rights under this License + and You agree to work with Initial Developer and Contributors to + distribute such responsibility on an equitable basis. Nothing + herein is intended or shall be deemed to constitute any admission + of liability. + +-------------------------------------------------------------------- + +NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND +DISTRIBUTION LICENSE (CDDL) + +For Covered Software in this distribution, this License shall +be governed by the laws of the State of California (excluding +conflict-of-law provisions). + +Any litigation relating to this License shall be subject to the +jurisdiction of the Federal Courts of the Northern District of +California and the state courts of the State of California, with +venue lying in Santa Clara County, California. --- linux-aws-4.15.0.orig/zfs/README.markdown +++ linux-aws-4.15.0/zfs/README.markdown @@ -0,0 +1,19 @@ +

+ZFS is an advanced file system and volume manager which was originally +developed for Solaris and is now maintained by the Illumos community. + +ZFS on Linux, which is also known as ZoL, is currently feature complete. It +includes fully functional and stable SPA, DMU, ZVOL, and ZPL layers. And it's native! + +# Official Resources + * [Site](http://zfsonlinux.org) + * [Wiki](https://github.com/zfsonlinux/zfs/wiki) + * [Mailing lists](https://github.com/zfsonlinux/zfs/wiki/Mailing-Lists) + * [OpenZFS site](http://open-zfs.org/) + +# Installation +Full documentation for installing ZoL on your favorite Linux distribution can +be found at [our site](http://zfsonlinux.org/). + +# Contribute & Develop +We have a separate document with [contribution guidelines](./.github/CONTRIBUTING.md). \ No newline at end of file --- linux-aws-4.15.0.orig/zfs/aclocal.m4 +++ linux-aws-4.15.0/zfs/aclocal.m4 @@ -0,0 +1,1319 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([config/always-arch.m4]) +m4_include([config/always-no-bool-compare.m4]) +m4_include([config/always-no-unused-but-set-variable.m4]) +m4_include([config/dkms.m4]) +m4_include([config/kernel-acl.m4]) +m4_include([config/kernel-aio-fsync.m4]) +m4_include([config/kernel-automount.m4]) +m4_include([config/kernel-bdev-block-device-operations.m4]) +m4_include([config/kernel-bdev-logical-size.m4]) +m4_include([config/kernel-bdev-physical-size.m4]) +m4_include([config/kernel-bdi.m4]) +m4_include([config/kernel-bio-bvec-iter.m4]) +m4_include([config/kernel-bio-end-io-t-args.m4]) +m4_include([config/kernel-bio-failfast.m4]) +m4_include([config/kernel-bio-op.m4]) +m4_include([config/kernel-bio-rw-barrier.m4]) +m4_include([config/kernel-bio-rw-discard.m4]) +m4_include([config/kernel-bio_set_dev.m4]) +m4_include([config/kernel-blk-queue-bdi.m4]) +m4_include([config/kernel-blk-queue-flush.m4]) +m4_include([config/kernel-blk-queue-max-hw-sectors.m4]) +m4_include([config/kernel-blk-queue-max-segments.m4]) +m4_include([config/kernel-blk-queue-unplug.m4]) +m4_include([config/kernel-blkdev-get-by-path.m4]) +m4_include([config/kernel-blkdev-get.m4]) +m4_include([config/kernel-block-device-operations-release-void.m4]) +m4_include([config/kernel-clear-inode.m4]) +m4_include([config/kernel-commit-metadata.m4]) +m4_include([config/kernel-create-nameidata.m4]) +m4_include([config/kernel-current-time.m4]) +m4_include([config/kernel-current_bio_tail.m4]) +m4_include([config/kernel-d-make-root.m4]) +m4_include([config/kernel-d-obtain-alias.m4]) +m4_include([config/kernel-d-prune-aliases.m4]) +m4_include([config/kernel-declare-event-class.m4]) +m4_include([config/kernel-dentry-operations.m4]) +m4_include([config/kernel-dirty-inode.m4]) +m4_include([config/kernel-discard-granularity.m4]) +m4_include([config/kernel-elevator-change.m4]) +m4_include([config/kernel-encode-fh-inode.m4]) +m4_include([config/kernel-evict-inode.m4]) +m4_include([config/kernel-fallocate.m4]) +m4_include([config/kernel-file-dentry.m4]) +m4_include([config/kernel-file-inode.m4]) +m4_include([config/kernel-fmode-t.m4]) +m4_include([config/kernel-follow-down-one.m4]) +m4_include([config/kernel-fpu.m4]) +m4_include([config/kernel-fsync.m4]) +m4_include([config/kernel-generic_io_acct.m4]) +m4_include([config/kernel-generic_readlink.m4]) +m4_include([config/kernel-get-disk-ro.m4]) +m4_include([config/kernel-get-gendisk.m4]) +m4_include([config/kernel-get-link.m4]) +m4_include([config/kernel-inode-getattr.m4]) +m4_include([config/kernel-inode-set-flags.m4]) +m4_include([config/kernel-insert-inode-locked.m4]) +m4_include([config/kernel-invalidate-bdev-args.m4]) +m4_include([config/kernel-is_owner_or_cap.m4]) +m4_include([config/kernel-kmap-atomic-args.m4]) +m4_include([config/kernel-kuid-helpers.m4]) +m4_include([config/kernel-lookup-bdev.m4]) +m4_include([config/kernel-lookup-nameidata.m4]) +m4_include([config/kernel-lseek-execute.m4]) +m4_include([config/kernel-mk-request-fn.m4]) +m4_include([config/kernel-mkdir-umode-t.m4]) +m4_include([config/kernel-mod-param.m4]) +m4_include([config/kernel-mount-nodev.m4]) +m4_include([config/kernel-objtool.m4]) +m4_include([config/kernel-open-bdev-exclusive.m4]) +m4_include([config/kernel-put-link.m4]) +m4_include([config/kernel-rename.m4]) +m4_include([config/kernel-security-inode-init.m4]) +m4_include([config/kernel-set-nlink.m4]) +m4_include([config/kernel-setattr-prepare.m4]) +m4_include([config/kernel-sget-args.m4]) +m4_include([config/kernel-show-options.m4]) +m4_include([config/kernel-shrink.m4]) +m4_include([config/kernel-submit_bio.m4]) +m4_include([config/kernel-super-userns.m4]) +m4_include([config/kernel-tmpfile.m4]) +m4_include([config/kernel-truncate-range.m4]) +m4_include([config/kernel-truncate-setsize.m4]) +m4_include([config/kernel-vfs-iterate.m4]) +m4_include([config/kernel-vfs-rw-iterate.m4]) +m4_include([config/kernel-vm_node_stat.m4]) +m4_include([config/kernel-xattr-handler.m4]) +m4_include([config/kernel.m4]) +m4_include([config/libtool.m4]) +m4_include([config/ltoptions.m4]) +m4_include([config/ltsugar.m4]) +m4_include([config/ltversion.m4]) +m4_include([config/lt~obsolete.m4]) +m4_include([config/mount-helper.m4]) +m4_include([config/toolchain-simd.m4]) +m4_include([config/user-dracut.m4]) +m4_include([config/user-frame-larger-than.m4]) +m4_include([config/user-libattr.m4]) +m4_include([config/user-libblkid.m4]) +m4_include([config/user-libtirpc.m4]) +m4_include([config/user-libudev.m4]) +m4_include([config/user-libuuid.m4]) +m4_include([config/user-makedev.m4]) +m4_include([config/user-no-format-truncation.m4]) +m4_include([config/user-runstatedir.m4]) +m4_include([config/user-systemd.m4]) +m4_include([config/user-sysvinit.m4]) +m4_include([config/user-udev.m4]) +m4_include([config/user-zlib.m4]) +m4_include([config/user.m4]) +m4_include([config/zfs-build.m4]) +m4_include([config/zfs-meta.m4]) --- linux-aws-4.15.0.orig/zfs/autogen.sh +++ linux-aws-4.15.0/zfs/autogen.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +autoreconf -fiv +rm -Rf autom4te.cache --- linux-aws-4.15.0.orig/zfs/config/Rules.am +++ linux-aws-4.15.0/zfs/config/Rules.am @@ -0,0 +1,16 @@ +DEFAULT_INCLUDES = -include ${top_builddir}/zfs_config.h + +AM_LIBTOOLFLAGS = --silent +AM_CFLAGS = ${DEBUG_CFLAGS} -Wall -Wstrict-prototypes +AM_CFLAGS += ${NO_UNUSED_BUT_SET_VARIABLE} +AM_CFLAGS += ${NO_BOOL_COMPARE} +AM_CFLAGS += -fno-strict-aliasing +AM_CFLAGS += -std=gnu99 +AM_CPPFLAGS = -D_GNU_SOURCE -D__EXTENSIONS__ -D_REENTRANT +AM_CPPFLAGS += -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64 +AM_CPPFLAGS += -D_LARGEFILE64_SOURCE -DHAVE_LARGE_STACKS=1 +AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\" +AM_CPPFLAGS += -DLIBEXECDIR=\"$(libexecdir)\" +AM_CPPFLAGS += -DRUNSTATEDIR=\"$(runstatedir)\" +AM_CPPFLAGS += -DSBINDIR=\"$(sbindir)\" +AM_CPPFLAGS += -DSYSCONFDIR=\"$(sysconfdir)\" --- linux-aws-4.15.0.orig/zfs/config/always-arch.m4 +++ linux-aws-4.15.0/zfs/config/always-arch.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # Set the target arch for libspl atomic implementation and the icp +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [ + AC_MSG_CHECKING(for target asm dir) + TARGET_ARCH=`echo ${target_cpu} | sed -e s/i.86/i386/` + + case $TARGET_ARCH in + i386|x86_64) + TARGET_ASM_DIR=asm-${TARGET_ARCH} + ;; + *) + TARGET_ASM_DIR=asm-generic + ;; + esac + + AC_SUBST([TARGET_ASM_DIR]) + AM_CONDITIONAL([TARGET_ASM_X86_64], test $TARGET_ASM_DIR = asm-x86_64) + AM_CONDITIONAL([TARGET_ASM_I386], test $TARGET_ASM_DIR = asm-i386) + AM_CONDITIONAL([TARGET_ASM_GENERIC], test $TARGET_ASM_DIR = asm-generic) + AC_MSG_RESULT([$TARGET_ASM_DIR]) +]) --- linux-aws-4.15.0.orig/zfs/config/always-no-bool-compare.m4 +++ linux-aws-4.15.0/zfs/config/always-no-bool-compare.m4 @@ -0,0 +1,27 @@ +dnl # +dnl # Check if gcc supports -Wno-bool-compare option. +dnl # +dnl # We actually invoke gcc with the -Wbool-compare option +dnl # and infer the 'no-' version does or doesn't exist based upon +dnl # the results. This is required because when checking any of +dnl # no- prefixed options gcc always returns success. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE], [ + AC_MSG_CHECKING([for -Wno-bool-compare support]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wbool-compare" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [ + NO_BOOL_COMPARE=-Wno-bool-compare + AC_MSG_RESULT([yes]) + ], + [ + NO_BOOL_COMPARE= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_BOOL_COMPARE]) +]) --- linux-aws-4.15.0.orig/zfs/config/always-no-unused-but-set-variable.m4 +++ linux-aws-4.15.0/zfs/config/always-no-unused-but-set-variable.m4 @@ -0,0 +1,27 @@ +dnl # +dnl # Check if gcc supports -Wno-unused-but-set-variable option. +dnl # +dnl # We actually invoke gcc with the -Wunused-but-set-variable option +dnl # and infer the 'no-' version does or doesn't exist based upon +dnl # the results. This is required because when checking any of +dnl # no- prefixed options gcc always returns success. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE], [ + AC_MSG_CHECKING([for -Wno-unused-but-set-variable support]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wunused-but-set-variable" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [ + NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable + AC_MSG_RESULT([yes]) + ], + [ + NO_UNUSED_BUT_SET_VARIABLE= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE]) +]) --- linux-aws-4.15.0.orig/zfs/config/compile +++ linux-aws-4.15.0/zfs/config/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/zfs/config/config.awk +++ linux-aws-4.15.0/zfs/config/config.awk @@ -0,0 +1,15 @@ +# Remove default preprocessor define's from config.h +# PACKAGE +# PACKAGE_BUGREPORT +# PACKAGE_NAME +# PACKAGE_STRING +# PACKAGE_TARNAME +# PACKAGE_VERSION +# STDC_HEADERS +# VERSION + +BEGIN { RS = "" ; FS = "\n" } \ + !/.#define PACKAGE./ && \ + !/.#define VERSION./ && \ + !/.#define STDC_HEADERS./ \ + { print $0"\n" } --- linux-aws-4.15.0.orig/zfs/config/config.guess +++ linux-aws-4.15.0/zfs/config/config.guess @@ -0,0 +1,1463 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2017 Free Software Foundation, Inc. + +timestamp='2017-11-07' + +# This file 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 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2017 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:MidnightBSD:*:*) + echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + *:Redox:*:*) + echo ${UNAME_MACHINE}-unknown-redox + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = hppa2.0w ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: --- linux-aws-4.15.0.orig/zfs/config/config.sub +++ linux-aws-4.15.0/zfs/config/config.sub @@ -0,0 +1,1848 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2017 Free Software Foundation, Inc. + +timestamp='2017-11-23' + +# This file 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 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2017 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | wasm32 \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | wasm32-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2*) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + wasm32) + basic_machine=wasm32-unknown + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: --- linux-aws-4.15.0.orig/zfs/config/deb.am +++ linux-aws-4.15.0/zfs/config/deb.am @@ -0,0 +1,68 @@ +deb-local: + @(if test "${HAVE_DPKGBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${DPKGBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${DPKGBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +deb-kmod: deb-local rpm-kmod + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + + +deb-dkms: deb-local rpm-dkms + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-dkms-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-dkms-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb $$pkg1; \ + $(RM) $$pkg1 + +deb-utils: deb-local rpm-utils + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + pkg2=libnvpair1-$${version}.$${arch}.rpm; \ + pkg3=libuutil1-$${version}.$${arch}.rpm; \ + pkg4=libzfs2-$${version}.$${arch}.rpm; \ + pkg5=libzpool2-$${version}.$${arch}.rpm; \ + pkg6=libzfs2-devel-$${version}.$${arch}.rpm; \ + pkg7=$${name}-test-$${version}.$${arch}.rpm; \ + pkg8=$${name}-dracut-$${version}.$${arch}.rpm; \ + pkg9=$${name}-initramfs-$${version}.$${arch}.rpm; \ +## Arguments need to be passed to dh_shlibdeps. Alien provides no mechanism +## to do this, so we install a shim onto the path which calls the real +## dh_shlibdeps with the required arguments. + path_prepend=`mktemp -d /tmp/intercept.XXX`; \ + echo "#$(SHELL)" > $${path_prepend}/dh_shlibdeps; \ + echo "`which dh_shlibdeps` -- \ + -xlibuutil1linux -xlibnvpair1linux -xlibzfs2linux -xlibzpool2linux" \ + >> $${path_prepend}/dh_shlibdeps; \ +## These -x arguments are passed to dpkg-shlibdeps, which exclude the +## Debianized packages from the auto-generated dependencies of the new debs, +## which should NOT be mixed with the alien-generated debs created here + chmod +x $${path_prepend}/dh_shlibdeps; \ + env PATH=$${path_prepend}:$${PATH} \ + fakeroot $(ALIEN) --bump=0 --scripts --to-deb \ + $$pkg1 $$pkg2 $$pkg3 $$pkg4 $$pkg5 $$pkg6 $$pkg7 \ + $$pkg8 $$pkg9; \ + $(RM) $${path_prepend}/dh_shlibdeps; \ + rmdir $${path_prepend}; \ + $(RM) $$pkg1 $$pkg2 $$pkg3 $$pkg4 $$pkg5 $$pkg6 $$pkg7 \ + $$pkg8 $$pkg9; + +deb: deb-kmod deb-dkms deb-utils --- linux-aws-4.15.0.orig/zfs/config/dkms.m4 +++ linux-aws-4.15.0/zfs/config/dkms.m4 @@ -0,0 +1,14 @@ +dnl # +dnl # Prevent manual building in DKMS source tree. +dnl # +AC_DEFUN([ZFS_AC_DKMS_INHIBIT], [ + AC_MSG_CHECKING([for dkms.conf file]) + AS_IF([test -e dkms.conf], [ + AC_MSG_ERROR([ + *** ZFS should not be manually built in the DKMS source tree. + *** Remove all ZFS packages before compiling the ZoL sources. + *** Running "make install" breaks ZFS packages.]) + ], [ + AC_MSG_RESULT([not found]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/install-sh +++ linux-aws-4.15.0/zfs/config/install-sh @@ -0,0 +1,508 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2014-09-12.12; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/zfs/config/kernel-acl.m4 +++ linux-aws-4.15.0/zfs/config/kernel-acl.m4 @@ -0,0 +1,325 @@ +dnl # +dnl # Check if posix_acl_release can be used from a ZFS_META_LICENSED +dnl # module. The is_owner_or_cap macro was replaced by +dnl # inode_owner_or_capable +dnl # +AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_RELEASE], [ + AC_MSG_CHECKING([whether posix_acl_release() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + ],[ + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_RELEASE, 1, + [posix_acl_release() is available]) + + AC_MSG_CHECKING([whether posix_acl_release() is GPL-only]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + ],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_RELEASE_GPL_ONLY, 1, + [posix_acl_release() is GPL-only]) + ]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.14 API change, +dnl # set_cached_acl() and forget_cached_acl() changed from inline to +dnl # EXPORT_SYMBOL. In the former case, they may not be usable because of +dnl # posix_acl_release. In the latter case, we can always use them. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SET_CACHED_ACL_USABLE], [ + AC_MSG_CHECKING([whether set_cached_acl() is usable]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct inode *ip = NULL; + struct posix_acl *acl = posix_acl_alloc(1, 0); + set_cached_acl(ip, ACL_TYPE_ACCESS, acl); + forget_cached_acl(ip, ACL_TYPE_ACCESS); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SET_CACHED_ACL_USABLE, 1, + [posix_acl_release() is usable]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.1 API change, +dnl # posix_acl_chmod_masq() is not exported anymore and posix_acl_chmod() +dnl # was introduced to replace it. +dnl # +dnl # 3.14 API change, +dnl # posix_acl_chmod() is changed to __posix_acl_chmod() +dnl # +AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_CHMOD], [ + AC_MSG_CHECKING([whether posix_acl_chmod exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + posix_acl_chmod(NULL, 0, 0) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_CHMOD, 1, [posix_acl_chmod() exists]) + ],[ + AC_MSG_RESULT(no) + ]) + + AC_MSG_CHECKING([whether __posix_acl_chmod exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + __posix_acl_chmod(NULL, 0, 0) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___POSIX_ACL_CHMOD, 1, [__posix_acl_chmod() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.1 API change, +dnl # posix_acl_equiv_mode now wants an umode_t* instead of a mode_t* +dnl # +AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T], [ + AC_MSG_CHECKING([whether posix_acl_equiv_mode() wants umode_t]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + umode_t tmp; + posix_acl_equiv_mode(NULL,&tmp); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T, 1, + [ posix_acl_equiv_mode wants umode_t*]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.8 API change, +dnl # The function posix_acl_valid now must be passed a namespace. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_VALID_WITH_NS], [ + AC_MSG_CHECKING([whether posix_acl_valid() wants user namespace]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + struct user_namespace *user_ns = NULL; + const struct posix_acl *acl = NULL; + int error; + + error = posix_acl_valid(user_ns, acl); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_VALID_WITH_NS, 1, + [posix_acl_valid() wants user namespace]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.27 API change, +dnl # Check if inode_operations contains the function permission +dnl # and expects the nameidata structure to have been removed. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION], [ + AC_MSG_CHECKING([whether iops->permission() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int permission_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PERMISSION, 1, [iops->permission() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.26 API change, +dnl # Check if inode_operations contains the function permission +dnl # and expects the nameidata structure to be passed. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION_WITH_NAMEIDATA], [ + AC_MSG_CHECKING([whether iops->permission() wants nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int permission_fn(struct inode *inode, int mask, + struct nameidata *nd) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PERMISSION, 1, [iops->permission() exists]) + AC_DEFINE(HAVE_PERMISSION_WITH_NAMEIDATA, 1, + [iops->permission() with nameidata exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.32 API change, +dnl # Check if inode_operations contains the function check_acl +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_CHECK_ACL], [ + AC_MSG_CHECKING([whether iops->check_acl() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int check_acl_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CHECK_ACL, 1, [iops->check_acl() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.38 API change, +dnl # The function check_acl gained a new parameter: flags +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_CHECK_ACL_WITH_FLAGS], [ + AC_MSG_CHECKING([whether iops->check_acl() wants flags]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int check_acl_fn(struct inode *inode, int mask, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CHECK_ACL, 1, [iops->check_acl() exists]) + AC_DEFINE(HAVE_CHECK_ACL_WITH_FLAGS, 1, + [iops->check_acl() wants flags]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.1 API change, +dnl # Check if inode_operations contains the function get_acl +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [ + AC_MSG_CHECKING([whether iops->get_acl() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + struct posix_acl *get_acl_fn(struct inode *inode, int type) + { return NULL; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .get_acl = get_acl_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GET_ACL, 1, [iops->get_acl() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.14 API change, +dnl # Check if inode_operations contains the function set_acl +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL], [ + AC_MSG_CHECKING([whether iops->set_acl() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int set_acl_fn(struct inode *inode, struct posix_acl *acl, int type) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .set_acl = set_acl_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SET_ACL, 1, [iops->set_acl() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.7 API change, +dnl # The kernel get_acl will now check cache before calling i_op->get_acl and +dnl # do set_cached_acl after that, so i_op->get_acl don't need to do that +dnl # anymore. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE], [ + AC_MSG_CHECKING([whether uncached_acl_sentinel() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + void *sentinel __attribute__ ((unused)) = uncached_acl_sentinel(NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_GET_ACL_HANDLE_CACHE, 1, [uncached_acl_sentinel() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-aio-fsync.m4 +++ linux-aws-4.15.0/zfs/config/kernel-aio-fsync.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # Linux 4.9-rc5+ ABI, removal of the .aio_fsync field +dnl # +AC_DEFUN([ZFS_AC_KERNEL_AIO_FSYNC], [ + AC_MSG_CHECKING([whether fops->aio_fsync() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + static const struct file_operations + fops __attribute__ ((unused)) = { + .aio_fsync = NULL, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_AIO_FSYNC, 1, [fops->aio_fsync() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + --- linux-aws-4.15.0.orig/zfs/config/kernel-automount.m4 +++ linux-aws-4.15.0/zfs/config/kernel-automount.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 2.6.37 API change +dnl # The dops->d_automount() dentry operation was added as a clean +dnl # solution to handling automounts. Prior to this cifs/nfs clients +dnl # which required automount support would abuse the follow_link() +dnl # operation on directories for this purpose. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_AUTOMOUNT], [ + AC_MSG_CHECKING([whether dops->d_automount() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + struct vfsmount *d_automount(struct path *p) { return NULL; } + struct dentry_operations dops __attribute__ ((unused)) = { + .d_automount = d_automount, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_AUTOMOUNT, 1, [dops->automount() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bdev-block-device-operations.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bdev-block-device-operations.m4 @@ -0,0 +1,34 @@ +dnl # +dnl # 2.6.x API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS], [ + AC_MSG_CHECKING([block device operation prototypes]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + + int blk_open(struct block_device *bdev, fmode_t mode) + { return 0; } + int blk_ioctl(struct block_device *bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + int blk_compat_ioctl(struct block_device * bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = blk_open, + .release = NULL, + .ioctl = blk_ioctl, + .compat_ioctl = blk_compat_ioctl, + }; + ],[ + ],[ + AC_MSG_RESULT(struct block_device) + AC_DEFINE(HAVE_BDEV_BLOCK_DEVICE_OPERATIONS, 1, + [struct block_device_operations use bdevs]) + ],[ + AC_MSG_RESULT(struct inode) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bdev-logical-size.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bdev-logical-size.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # 2.6.30 API change +dnl # bdev_hardsect_size() replaced with bdev_logical_block_size(). While +dnl # it has been true for a while that there was no strict 1:1 mapping +dnl # between physical sector size and logical block size this change makes +dnl # it explicit. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE], [ + AC_MSG_CHECKING([whether bdev_logical_block_size() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct block_device *bdev = NULL; + bdev_logical_block_size(bdev); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BDEV_LOGICAL_BLOCK_SIZE, 1, + [bdev_logical_block_size() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bdev-physical-size.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bdev-physical-size.m4 @@ -0,0 +1,39 @@ +dnl # +dnl # 2.6.30 API change +dnl # +dnl # The bdev_physical_block_size() interface was added to provide a way +dnl # to determine the smallest write which can be performed without a +dnl # read-modify-write operation. From the kernel documentation: +dnl # +dnl # What: /sys/block//queue/physical_block_size +dnl # Date: May 2009 +dnl # Contact: Martin K. Petersen +dnl # Description: +dnl # This is the smallest unit the storage device can write +dnl # without resorting to read-modify-write operation. It is +dnl # usually the same as the logical block size but may be +dnl # bigger. One example is SATA drives with 4KB sectors +dnl # that expose a 512-byte logical block size to the +dnl # operating system. +dnl # +dnl # Unfortunately, this interface isn't entirely reliable because +dnl # drives are sometimes known to misreport this value. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BDEV_PHYSICAL_BLOCK_SIZE], [ + AC_MSG_CHECKING([whether bdev_physical_block_size() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct block_device *bdev = NULL; + bdev_physical_block_size(bdev); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BDEV_PHYSICAL_BLOCK_SIZE, 1, + [bdev_physical_block_size() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bdi.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bdi.m4 @@ -0,0 +1,57 @@ +dnl # +dnl # 2.6.32 - 2.6.33, bdi_setup_and_register() is not exported. +dnl # 2.6.34 - 3.19, bdi_setup_and_register() takes 3 arguments. +dnl # 4.0 - 4.11, bdi_setup_and_register() takes 2 arguments. +dnl # 4.12 - x.y, super_setup_bdi_name() new interface. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BDI], [ + AC_MSG_CHECKING([whether super_setup_bdi_name() exists]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + struct super_block sb; + ], [ + char *name = "bdi"; + atomic_long_t zfs_bdi_seq; + int error __attribute__((unused)) = + super_setup_bdi_name(&sb, "%.28s-%ld", name, atomic_long_inc_return(&zfs_bdi_seq)); + ], [super_setup_bdi_name], [fs/super.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SUPER_SETUP_BDI_NAME, 1, + [super_setup_bdi_name() exits]) + ], [ + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether bdi_setup_and_register() wants 2 args]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + struct backing_dev_info bdi; + ], [ + char *name = "bdi"; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name); + ], [bdi_setup_and_register], [mm/backing-dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_BDI_SETUP_AND_REGISTER, 1, + [bdi_setup_and_register() wants 2 args]) + ], [ + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether bdi_setup_and_register() wants 3 args]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + struct backing_dev_info bdi; + ], [ + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + ], [bdi_setup_and_register], [mm/backing-dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARGS_BDI_SETUP_AND_REGISTER, 1, + [bdi_setup_and_register() wants 3 args]) + ], [ + AC_MSG_RESULT(no) + ]) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-bvec-iter.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-bvec-iter.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 3.14 API change, +dnl # Immutable biovecs. A number of fields of struct bio are moved to +dnl # struct bvec_iter. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BIO_BVEC_ITER], [ + AC_MSG_CHECKING([whether bio has bi_iter]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct bio bio; + bio.bi_iter.bi_sector = 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_BVEC_ITER, 1, [bio has bi_iter]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-end-io-t-args.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-end-io-t-args.m4 @@ -0,0 +1,46 @@ +dnl # +dnl # 4.3 API change +dnl # Error argument dropped from bio_endio in favor of newly introduced +dnl # bio->bi_error. This also replaces bio->bi_flags value BIO_UPTODATE. +dnl # Introduced by torvalds/linux@4246a0b63bd8f56a1469b12eafeb875b1041a451 +dnl # ("block: add a bi_error field to struct bio"). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BIO_END_IO_T_ARGS], [ + AC_MSG_CHECKING([whether bio_end_io_t wants 1 arg]) + ZFS_LINUX_TRY_COMPILE([ + #include + + void wanted_end_io(struct bio *bio) { return; } + + bio_end_io_t *end_io __attribute__ ((unused)) = wanted_end_io; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_BIO_END_IO_T, 1, + [bio_end_io_t wants 1 arg]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.13 API change +dnl # The bio->bi_error field was replaced with bio->bi_status which is an +dnl # enum which describes all possible error types. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_STATUS], [ + AC_MSG_CHECKING([whether bio->bi_status exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct bio bio __attribute__ ((unused)); + blk_status_t status __attribute__ ((unused)) = BLK_STS_OK; + + bio.bi_status = status; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_BI_STATUS, 1, [bio->bi_status exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-failfast.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-failfast.m4 @@ -0,0 +1,39 @@ +dnl # +dnl # Preferred interface for setting FAILFAST on a bio: +dnl # 2.6.28-2.6.35: BIO_RW_FAILFAST_{DEV|TRANSPORT|DRIVER} +dnl # >= 2.6.36: REQ_FAILFAST_{DEV|TRANSPORT|DRIVER} +dnl # + +AC_DEFUN([ZFS_AC_KERNEL_BIO_FAILFAST_DTD], [ + AC_MSG_CHECKING([whether BIO_RW_FAILFAST_* are defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int flags __attribute__ ((unused)); + flags = ((1 << BIO_RW_FAILFAST_DEV) | + (1 << BIO_RW_FAILFAST_TRANSPORT) | + (1 << BIO_RW_FAILFAST_DRIVER)); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_RW_FAILFAST_DTD, 1, + [BIO_RW_FAILFAST_* are defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_REQ_FAILFAST_MASK], [ + AC_MSG_CHECKING([whether REQ_FAILFAST_MASK is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int flags __attribute__ ((unused)); + flags = REQ_FAILFAST_MASK; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_REQ_FAILFAST_MASK, 1, + [REQ_FAILFAST_MASK is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-op.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-op.m4 @@ -0,0 +1,84 @@ +dnl # +dnl # Linux 4.8 API, +dnl # +dnl # The bio_op() helper was introduced as a replacement for explicitly +dnl # checking the bio->bi_rw flags. The following checks are used to +dnl # detect if a specific operation is supported. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_REQ_OP_DISCARD], [ + AC_MSG_CHECKING([whether REQ_OP_DISCARD is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int op __attribute__ ((unused)) = REQ_OP_DISCARD; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_REQ_OP_DISCARD, 1, + [REQ_OP_DISCARD is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_REQ_OP_SECURE_ERASE], [ + AC_MSG_CHECKING([whether REQ_OP_SECURE_ERASE is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int op __attribute__ ((unused)) = REQ_OP_SECURE_ERASE; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_REQ_OP_SECURE_ERASE, 1, + [REQ_OP_SECURE_ERASE is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + + +AC_DEFUN([ZFS_AC_KERNEL_REQ_OP_FLUSH], [ + AC_MSG_CHECKING([whether REQ_OP_FLUSH is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int op __attribute__ ((unused)) = REQ_OP_FLUSH; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_REQ_OP_FLUSH, 1, + [REQ_OP_FLUSH is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_OPF], [ + AC_MSG_CHECKING([whether bio->bi_opf is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct bio bio __attribute__ ((unused)); + bio.bi_opf = 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_BI_OPF, 1, [bio->bi_opf is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS], [ + AC_MSG_CHECKING([whether bio_set_op_attrs is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct bio *bio __attribute__ ((unused)) = NULL; + + bio_set_op_attrs(bio, 0, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_SET_OP_ATTRS, 1, + [bio_set_op_attrs is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-rw-barrier.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-rw-barrier.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # Interface for issuing a discard bio: +dnl # 2.6.28-2.6.35: BIO_RW_BARRIER +dnl # 2.6.36-3.x: REQ_BARRIER +dnl # + +dnl # Since REQ_BARRIER is a preprocessor definition, there is no need for an +dnl # autotools check for it. Also, REQ_BARRIER existed in the request layer +dnl # until torvalds/linux@7b6d91daee5cac6402186ff224c3af39d79f4a0e unified the +dnl # request layer and bio layer flags, so it would be wrong to assume that +dnl # the APIs are mutually exclusive contrary to the typical case. +AC_DEFUN([ZFS_AC_KERNEL_BIO_RW_BARRIER], [ + AC_MSG_CHECKING([whether BIO_RW_BARRIER is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int flags __attribute__ ((unused)); + flags = BIO_RW_BARRIER; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_RW_BARRIER, 1, [BIO_RW_BARRIER is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio-rw-discard.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio-rw-discard.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # Interface for issuing a discard bio: +dnl # 2.6.28-2.6.35: BIO_RW_DISCARD +dnl # 2.6.36-3.x: REQ_DISCARD +dnl # + +dnl # Since REQ_DISCARD is a preprocessor definition, there is no need for an +dnl # autotools check for it. Also, REQ_DISCARD existed in the request layer +dnl # until torvalds/linux@7b6d91daee5cac6402186ff224c3af39d79f4a0e unified the +dnl # request layer and bio layer flags, so it would be wrong to assume that +dnl # the APIs are mutually exclusive contrary to the typical case. +AC_DEFUN([ZFS_AC_KERNEL_BIO_RW_DISCARD], [ + AC_MSG_CHECKING([whether BIO_RW_DISCARD is defined]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int flags __attribute__ ((unused)); + flags = BIO_RW_DISCARD; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_RW_DISCARD, 1, [BIO_RW_DISCARD is defined]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-bio_set_dev.m4 +++ linux-aws-4.15.0/zfs/config/kernel-bio_set_dev.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # Linux 4.14 API, +dnl # +dnl # The bio_set_dev() helper was introduced as part of the transition +dnl # to have struct gendisk in struct bio. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BIO_SET_DEV], [ + AC_MSG_CHECKING([whether bio_set_dev() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + struct block_device *bdev = NULL; + struct bio *bio = NULL; + bio_set_dev(bio, bdev); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BIO_SET_DEV, 1, [bio_set_dev() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blk-queue-bdi.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blk-queue-bdi.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 2.6.32 - 4.11, statically allocated bdi in request_queue +dnl # 4.12 - x.y, dynamically allocated bdi in request_queue +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_BDI], [ + AC_MSG_CHECKING([whether blk_queue bdi is dynamic]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct request_queue q; + struct backing_dev_info bdi; + q.backing_dev_info = &bdi; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_BDI_DYNAMIC, 1, + [blk queue backing_dev_info is dynamic]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blk-queue-flush.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blk-queue-flush.m4 @@ -0,0 +1,85 @@ +dnl # +dnl # 2.6.36 API change +dnl # In 2.6.36 kernels the blk_queue_ordered() interface has been +dnl # replaced by the simpler blk_queue_flush(). However, while the +dnl # old interface was available to all the new one is GPL-only. +dnl # Thus in addition to detecting if this function is available +dnl # we determine if it is GPL-only. If the GPL-only interface is +dnl # there we implement our own compatibility function, otherwise +dnl # we use the function. The hope is that long term this function +dnl # will be opened up. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_FLUSH], [ + AC_MSG_CHECKING([whether blk_queue_flush() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_FLUSH, 1, + [blk_queue_flush() is available]) + + AC_MSG_CHECKING([whether blk_queue_flush() is GPL-only]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + ],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_FLUSH_GPL_ONLY, 1, + [blk_queue_flush() is GPL-only]) + ]) + ],[ + AC_MSG_RESULT(no) + ]) + + dnl # + dnl # 4.7 API change + dnl # Replace blk_queue_flush with blk_queue_write_cache + dnl # + AC_MSG_CHECKING([whether blk_queue_write_cache() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + ],[ + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_WRITE_CACHE, 1, + [blk_queue_write_cache() exists]) + + AC_MSG_CHECKING([whether blk_queue_write_cache() is GPL-only]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + ],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY, 1, + [blk_queue_write_cache() is GPL-only]) + ]) + ],[ + AC_MSG_RESULT(no) + ]) + + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blk-queue-max-hw-sectors.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blk-queue-max-hw-sectors.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # 2.6.34 API change +dnl # blk_queue_max_hw_sectors() replaces blk_queue_max_sectors(). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS], [ + AC_MSG_CHECKING([whether blk_queue_max_hw_sectors() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct request_queue *q = NULL; + (void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_MAX_HW_SECTORS, 1, + [blk_queue_max_hw_sectors() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blk-queue-max-segments.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blk-queue-max-segments.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 2.6.34 API change +dnl # blk_queue_max_segments() consolidates blk_queue_max_hw_segments() +dnl # and blk_queue_max_phys_segments(). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS], [ + AC_MSG_CHECKING([whether blk_queue_max_segments() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct request_queue *q = NULL; + (void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_MAX_SEGMENTS, 1, + [blk_queue_max_segments() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blk-queue-unplug.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blk-queue-unplug.m4 @@ -0,0 +1,44 @@ +dnl # +dnl # 2.6.32-2.6.35 API - The BIO_RW_UNPLUG enum can be used as a hint +dnl # to unplug the queue. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BIO_RW_UNPLUG], [ + AC_MSG_CHECKING([whether the BIO_RW_UNPLUG enum is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + extern enum bio_rw_flags rw; + + rw = BIO_RW_UNPLUG; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG, 1, + [BIO_RW_UNPLUG is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BLK_PLUG], [ + AC_MSG_CHECKING([whether struct blk_plug is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct blk_plug plug; + + blk_start_plug(&plug); + blk_finish_plug(&plug); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_HAVE_BLK_PLUG, 1, + [struct blk_plug is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blkdev-get-by-path.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blkdev-get-by-path.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 2.6.38 API change +dnl # open_bdev_exclusive() changed to blkdev_get_by_path() +dnl # close_bdev_exclusive() changed to blkdev_put() +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], + [AC_MSG_CHECKING([whether blkdev_get_by_path() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + blkdev_get_by_path(NULL, 0, NULL); + ], [blkdev_get_by_path], [fs/block_dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLKDEV_GET_BY_PATH, 1, + [blkdev_get_by_path() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-blkdev-get.m4 +++ linux-aws-4.15.0/zfs/config/kernel-blkdev-get.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 2.6.37 API change +dnl # Added 3rd argument for the active holder, previously this was +dnl # hardcoded to NULL. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_3ARG_BLKDEV_GET], [ + AC_MSG_CHECKING([whether blkdev_get() wants 3 args]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct block_device *bdev = NULL; + (void) blkdev_get(bdev, 0, NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_3ARG_BLKDEV_GET, 1, [blkdev_get() wants 3 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-block-device-operations-release-void.m4 +++ linux-aws-4.15.0/zfs/config/kernel-block-device-operations-release-void.m4 @@ -0,0 +1,29 @@ +dnl # +dnl # 3.10.x API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [ + AC_MSG_CHECKING([whether block_device_operations.release is void]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + + void blk_release(struct gendisk *g, fmode_t mode) { return; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = NULL, + .release = blk_release, + .ioctl = NULL, + .compat_ioctl = NULL, + }; + ],[ + ],[ + AC_MSG_RESULT(void) + AC_DEFINE(HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID, 1, + [struct block_device_operations.release returns void]) + ],[ + AC_MSG_RESULT(int) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-clear-inode.m4 +++ linux-aws-4.15.0/zfs/config/kernel-clear-inode.m4 @@ -0,0 +1,34 @@ +dnl # +dnl # 3.5.0 API change +dnl # torvalds/linux@dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430 and +dnl # torvalds/linux@7994e6f7254354e03028a11f98a27bd67dace9f1 reworked +dnl # where inode_sync_wait() is called. +dnl # +dnl # Prior to these changes it would occur in end_writeback() but due +dnl # to various issues (described in the above commits) it has been +dnl # moved to evict(). This changes the ordering is which sync occurs +dnl # but otherwise doesn't impact the zpl implementation. +dnl # +dnl # The major impact here is the renaming of end_writeback() to +dnl # clear_inode(). However, care must be taken when detecting this +dnl # API change because as recently as 2.6.35 there was a clear_inode() +dnl # function. However, it was made obsolete by the evict_inode() API +dnl # change at the same time. +dnl # +dnl # Therefore, to ensure we have the correct API we only allow the +dnl # clear_inode() compatibility code to be defined iff the evict_inode() +dnl # functionality is also detected. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CLEAR_INODE], + [AC_MSG_CHECKING([whether clear_inode() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + clear_inode(NULL); + ], [clear_inode], [fs/inode.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CLEAR_INODE, 1, [clear_inode() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-commit-metadata.m4 +++ linux-aws-4.15.0/zfs/config/kernel-commit-metadata.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 2.6.33 API change +dnl # Added eops->commit_metadata() callback to allow the underlying +dnl # filesystem to determine the most efficient way to commit the inode. +dnl # Prior to this the nfs server would issue an explicit fsync(). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_COMMIT_METADATA], [ + AC_MSG_CHECKING([whether eops->commit_metadata() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + int commit_metadata(struct inode *inode) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .commit_metadata = commit_metadata, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_COMMIT_METADATA, 1, + [eops->commit_metadata() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-create-nameidata.m4 +++ linux-aws-4.15.0/zfs/config/kernel-create-nameidata.m4 @@ -0,0 +1,29 @@ +dnl # +dnl # 3.6 API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CREATE_NAMEIDATA], [ + AC_MSG_CHECKING([whether iops->create() passes nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + + #ifdef HAVE_MKDIR_UMODE_T + int inode_create(struct inode *inode ,struct dentry *dentry, + umode_t umode, struct nameidata *nidata) { return 0; } + #else + int inode_create(struct inode *inode,struct dentry *dentry, + int umode, struct nameidata * nidata) { return 0; } + #endif + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .create = inode_create, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CREATE_NAMEIDATA, 1, + [iops->create() passes nameidata]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-current-time.m4 +++ linux-aws-4.15.0/zfs/config/kernel-current-time.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 4.9, current_time() added +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CURRENT_TIME], + [AC_MSG_CHECKING([whether current_time() exists]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + struct inode ip; + struct timespec now __attribute__ ((unused)); + + now = current_time(&ip); + ], [current_time], [fs/inode.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CURRENT_TIME, 1, [current_time() exists]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-current_bio_tail.m4 +++ linux-aws-4.15.0/zfs/config/kernel-current_bio_tail.m4 @@ -0,0 +1,33 @@ +dnl # +dnl # 2.6.34 API change +dnl # current->bio_tail and current->bio_list were struct bio pointers prior to +dnl # Linux 2.6.34. They were refactored into a struct bio_list pointer called +dnl # current->bio_list in Linux 2.6.34. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CURRENT_BIO_TAIL], [ + AC_MSG_CHECKING([whether current->bio_tail exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + current->bio_tail = (struct bio **) NULL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CURRENT_BIO_TAIL, 1, + [current->bio_tail exists]) + ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether current->bio_list exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + current->bio_list = (struct bio_list *) NULL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CURRENT_BIO_LIST, 1, + [current->bio_list exists]) + ],[ + AC_MSG_ERROR(no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-d-make-root.m4 +++ linux-aws-4.15.0/zfs/config/kernel-d-make-root.m4 @@ -0,0 +1,17 @@ +dnl # +dnl # 3.4.0 API change +dnl # Added d_make_root() to replace previous d_alloc_root() function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_D_MAKE_ROOT], + [AC_MSG_CHECKING([whether d_make_root() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + d_make_root(NULL); + ], [d_make_root], [fs/dcache.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_D_MAKE_ROOT, 1, [d_make_root() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-d-obtain-alias.m4 +++ linux-aws-4.15.0/zfs/config/kernel-d-obtain-alias.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 2.6.28 API change +dnl # Added d_obtain_alias() helper function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_D_OBTAIN_ALIAS], + [AC_MSG_CHECKING([whether d_obtain_alias() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + d_obtain_alias(NULL); + ], [d_obtain_alias], [fs/dcache.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_D_OBTAIN_ALIAS, 1, + [d_obtain_alias() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-d-prune-aliases.m4 +++ linux-aws-4.15.0/zfs/config/kernel-d-prune-aliases.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 2.6.12 API change +dnl # d_prune_aliases() helper function available. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_D_PRUNE_ALIASES], + [AC_MSG_CHECKING([whether d_prune_aliases() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + struct inode *ip = NULL; + d_prune_aliases(ip); + ], [d_prune_aliases], [fs/dcache.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_D_PRUNE_ALIASES, 1, + [d_prune_aliases() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-declare-event-class.m4 +++ linux-aws-4.15.0/zfs/config/kernel-declare-event-class.m4 @@ -0,0 +1,59 @@ +dnl # +dnl # Ensure the DECLARE_EVENT_CLASS macro is available to non-GPL modules. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_DECLARE_EVENT_CLASS], [ + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-I\$(src)" + + AC_MSG_CHECKING([whether DECLARE_EVENT_CLASS() is available]) + ZFS_LINUX_TRY_COMPILE_HEADER([ + #include + MODULE_LICENSE(ZFS_META_LICENSE); + + #define CREATE_TRACE_POINTS + #include "conftest.h" + ],[ + trace_zfs_autoconf_event_one(1UL); + trace_zfs_autoconf_event_two(2UL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DECLARE_EVENT_CLASS, 1, + [DECLARE_EVENT_CLASS() is available]) + ],[ + AC_MSG_RESULT(no) + ],[ + #if !defined(_CONFTEST_H) || defined(TRACE_HEADER_MULTI_READ) + #define _CONFTEST_H + + #undef TRACE_SYSTEM + #define TRACE_SYSTEM zfs + #include + + DECLARE_EVENT_CLASS(zfs_autoconf_event_class, + TP_PROTO(unsigned long i), + TP_ARGS(i), + TP_STRUCT__entry( + __field(unsigned long, i) + ), + TP_fast_assign( + __entry->i = i; + ), + TP_printk("i = %lu", __entry->i) + ); + + #define DEFINE_AUTOCONF_EVENT(name) \ + DEFINE_EVENT(zfs_autoconf_event_class, name, \ + TP_PROTO(unsigned long i), \ + TP_ARGS(i)) + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_one); + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_two); + + #endif /* _CONFTEST_H */ + + #undef TRACE_INCLUDE_PATH + #define TRACE_INCLUDE_PATH . + #define TRACE_INCLUDE_FILE conftest + #include + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-dentry-operations.m4 +++ linux-aws-4.15.0/zfs/config/kernel-dentry-operations.m4 @@ -0,0 +1,87 @@ +dnl # +dnl # 3.6 API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA], [ + AC_MSG_CHECKING([whether dops->d_revalidate() takes struct nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int revalidate (struct dentry *dentry, + struct nameidata *nidata) { return 0; } + + static const struct dentry_operations + dops __attribute__ ((unused)) = { + .d_revalidate = revalidate, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_D_REVALIDATE_NAMEIDATA, 1, + [dops->d_revalidate() operation takes nameidata]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.30 API change +dnl # The 'struct dentry_operations' was constified in the dentry structure. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONST_DENTRY_OPERATIONS], [ + AC_MSG_CHECKING([whether dentry uses const struct dentry_operations]) + ZFS_LINUX_TRY_COMPILE([ + #include + + const struct dentry_operations test_d_op = { + .d_revalidate = NULL, + }; + ],[ + struct dentry d __attribute__ ((unused)); + + d.d_op = &test_d_op; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CONST_DENTRY_OPERATIONS, 1, + [dentry uses const struct dentry_operations]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.38 API change +dnl # Added d_set_d_op() helper function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_D_SET_D_OP], + [AC_MSG_CHECKING([whether d_set_d_op() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + d_set_d_op(NULL, NULL); + ], [d_set_d_op], [fs/dcache.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_D_SET_D_OP, 1, + [d_set_d_op() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 2.6.38 API chage +dnl # Added sb->s_d_op default dentry_operations member +dnl # +AC_DEFUN([ZFS_AC_KERNEL_S_D_OP], + [AC_MSG_CHECKING([whether super_block has s_d_op]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct super_block sb __attribute__ ((unused)); + sb.s_d_op = NULL; + ], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_S_D_OP, 1, [struct super_block has s_d_op]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-dirty-inode.m4 +++ linux-aws-4.15.0/zfs/config/kernel-dirty-inode.m4 @@ -0,0 +1,26 @@ +dnl # +dnl # 3.0 API change +dnl # The sops->dirty_inode() callbacks were updated to take a flags +dnl # argument. This allows the greater control over whether the +dnl # filesystem needs to push out a transaction or not. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_DIRTY_INODE_WITH_FLAGS], [ + AC_MSG_CHECKING([whether sops->dirty_inode() wants flags]) + ZFS_LINUX_TRY_COMPILE([ + #include + + void dirty_inode(struct inode *a, int b) { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .dirty_inode = dirty_inode, + }; + ],[ + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_DIRTY_INODE_WITH_FLAGS, 1, + [sops->dirty_inode() wants flags]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-discard-granularity.m4 +++ linux-aws-4.15.0/zfs/config/kernel-discard-granularity.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 2.6.33 API change +dnl # Discard granularity and alignment restrictions may now be set. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_DISCARD_GRANULARITY], [ + AC_MSG_CHECKING([whether ql->discard_granularity is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct queue_limits ql __attribute__ ((unused)); + + ql.discard_granularity = 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DISCARD_GRANULARITY, 1, + [ql->discard_granularity is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-elevator-change.m4 +++ linux-aws-4.15.0/zfs/config/kernel-elevator-change.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # 2.6.36 API change +dnl # Verify the elevator_change() symbol is available. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_ELEVATOR_CHANGE], [ + AC_MSG_CHECKING([whether elevator_change() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + int ret; + struct request_queue *q = NULL; + char *elevator = NULL; + ret = elevator_change(q, elevator); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ELEVATOR_CHANGE, 1, + [elevator_change() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-encode-fh-inode.m4 +++ linux-aws-4.15.0/zfs/config/kernel-encode-fh-inode.m4 @@ -0,0 +1,24 @@ +dnl # +dnl # 3.5.0 API change +dnl # torvalds/linux@b0b0382bb4904965a9e9fca77ad87514dfda0d1c changed the +dnl # ->encode_fh() callback to pass the child inode and its parents inode +dnl # rather than a dentry and a boolean saying whether we want the parent. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_ENCODE_FH_WITH_INODE], [ + AC_MSG_CHECKING([whether eops->encode_fh() wants inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + int encode_fh(struct inode *inode, __u32 *fh, int *max_len, + struct inode *parent) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .encode_fh = encode_fh, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ENCODE_FH_WITH_INODE, 1, + [eops->encode_fh() wants child and parent inodes]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-evict-inode.m4 +++ linux-aws-4.15.0/zfs/config/kernel-evict-inode.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # 2.6.36 API change +dnl # The sops->delete_inode() and sops->clear_inode() callbacks have +dnl # replaced by a single sops->evict_inode() callback. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_EVICT_INODE], [ + AC_MSG_CHECKING([whether sops->evict_inode() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + void evict_inode (struct inode * t) { return; } + static struct super_operations sops __attribute__ ((unused)) = { + .evict_inode = evict_inode, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_EVICT_INODE, 1, [sops->evict_inode() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-fallocate.m4 +++ linux-aws-4.15.0/zfs/config/kernel-fallocate.m4 @@ -0,0 +1,56 @@ +dnl # +dnl # Linux 2.6.38 - 3.x API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FILE_FALLOCATE], [ + AC_MSG_CHECKING([whether fops->fallocate() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + long test_fallocate(struct file *file, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 2.6.x - 2.6.37 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_FALLOCATE], [ + AC_MSG_CHECKING([whether iops->fallocate() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + long test_fallocate(struct inode *inode, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct inode_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # The fallocate callback was moved from the inode_operations +dnl # structure to the file_operations structure. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FALLOCATE], [ + ZFS_AC_KERNEL_FILE_FALLOCATE + ZFS_AC_KERNEL_INODE_FALLOCATE +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-file-dentry.m4 +++ linux-aws-4.15.0/zfs/config/kernel-file-dentry.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 4.1 API change +dnl # struct access file->f_path.dentry was replaced by accessor function +dnl # since fix torvalds/linux@4bacc9c9234c ("overlayfs: Make f_path always +dnl # point to the overlay and f_inode to the underlay"). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FILE_DENTRY], [ + AC_MSG_CHECKING([whether file_dentry() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct file *f = NULL; + file_dentry(f); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_DENTRY, 1, [file_dentry() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-file-inode.m4 +++ linux-aws-4.15.0/zfs/config/kernel-file-inode.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 3.19 API change +dnl # struct access f->f_dentry->d_inode was replaced by accessor function +dnl # file_inode(f) +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FILE_INODE], [ + AC_MSG_CHECKING([whether file_inode() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct file *f = NULL; + file_inode(f); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_INODE, 1, [file_inode() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-fmode-t.m4 +++ linux-aws-4.15.0/zfs/config/kernel-fmode-t.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 2.6.28 API change, +dnl # check if fmode_t typedef is defined +dnl # +AC_DEFUN([ZFS_AC_KERNEL_TYPE_FMODE_T], + [AC_MSG_CHECKING([whether kernel defines fmode_t]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + fmode_t *ptr __attribute__ ((unused)); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_FMODE_T, 1, + [kernel defines fmode_t]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-follow-down-one.m4 +++ linux-aws-4.15.0/zfs/config/kernel-follow-down-one.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 2.6.38 API change +dnl # follow_down() renamed follow_down_one(). The original follow_down() +dnl # symbol still exists but will traverse down all the layers. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FOLLOW_DOWN_ONE], [ + AC_MSG_CHECKING([whether follow_down_one() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct path *p = NULL; + follow_down_one(p); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FOLLOW_DOWN_ONE, 1, + [follow_down_one() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-fpu.m4 +++ linux-aws-4.15.0/zfs/config/kernel-fpu.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 4.2 API change +dnl # asm/i387.h is replaced by asm/fpu/api.h +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FPU], [ + AC_MSG_CHECKING([whether asm/fpu/api.h exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + __kernel_fpu_begin(); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FPU_API_H, 1, [kernel has interface]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-fsync.m4 +++ linux-aws-4.15.0/zfs/config/kernel-fsync.m4 @@ -0,0 +1,74 @@ +dnl # +dnl # Linux 2.6.x - 2.6.34 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FSYNC_WITH_DENTRY], [ + ZFS_LINUX_TRY_COMPILE([ + #include + + int test_fsync(struct file *f, struct dentry *dentry, int x) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + ],[ + ],[ + AC_MSG_RESULT([dentry]) + AC_DEFINE(HAVE_FSYNC_WITH_DENTRY, 1, + [fops->fsync() with dentry]) + ],[ + ]) +]) + +dnl # +dnl # Linux 2.6.35 - Linux 3.0 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY], [ + ZFS_LINUX_TRY_COMPILE([ + #include + + int test_fsync(struct file *f, int x) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + ],[ + ],[ + AC_MSG_RESULT([no dentry]) + AC_DEFINE(HAVE_FSYNC_WITHOUT_DENTRY, 1, + [fops->fsync() without dentry]) + ],[ + ]) +]) + +dnl # +dnl # Linux 3.1 - 3.x API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FSYNC_RANGE], [ + ZFS_LINUX_TRY_COMPILE([ + #include + + int test_fsync(struct file *f, loff_t a, loff_t b, int c) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + ],[ + ],[ + AC_MSG_RESULT([range]) + AC_DEFINE(HAVE_FSYNC_RANGE, 1, + [fops->fsync() with range]) + ],[ + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_FSYNC], [ + AC_MSG_CHECKING([whether fops->fsync() wants]) + ZFS_AC_KERNEL_FSYNC_WITH_DENTRY + ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY + ZFS_AC_KERNEL_FSYNC_RANGE +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-generic_io_acct.m4 +++ linux-aws-4.15.0/zfs/config/kernel-generic_io_acct.m4 @@ -0,0 +1,53 @@ +dnl # +dnl # 3.19 API addition +dnl # +dnl # torvalds/linux@394ffa503bc40e32d7f54a9b817264e81ce131b4 allows us to +dnl # increment iostat counters without generic_make_request(). +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT_3ARG], [ + AC_MSG_CHECKING([whether 3 arg generic IO accounting symbols are available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + + void (*generic_start_io_acct_f)(int, unsigned long, + struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(int, struct hd_struct *, + unsigned long) = &generic_end_io_acct; + ], [ + generic_start_io_acct(0, 0, NULL); + generic_end_io_acct(0, NULL, 0); + ], [generic_start_io_acct], [block/bio.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1, + [generic_start_io_acct()/generic_end_io_acct() available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 4.14 API, +dnl # +dnl # generic_start_io_acct/generic_end_io_acct now require request_queue to be +dnl # provided. No functional changes, but preparation for inflight accounting +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT_4ARG], [ + AC_MSG_CHECKING([whether 4 arg generic IO accounting symbols are available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + + void (*generic_start_io_acct_f)(struct request_queue *, int, + unsigned long, struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(struct request_queue *, int, + struct hd_struct *, unsigned long) = &generic_end_io_acct; + ], [ + generic_start_io_acct(NULL, 0, 0, NULL); + generic_end_io_acct(NULL, 0, NULL, 0); + ], [generic_start_io_acct], [block/bio.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1, + [generic_start_io_acct()/generic_end_io_acct() 4 arg available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-generic_readlink.m4 +++ linux-aws-4.15.0/zfs/config/kernel-generic_readlink.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # 4.10 API +dnl # +dnl # NULL inode_operations.readlink implies generic_readlink(), which +dnl # has been made static. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GENERIC_READLINK_GLOBAL], [ + AC_MSG_CHECKING([whether generic_readlink is global]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + int i __attribute__ ((unused)); + + i = generic_readlink(NULL, NULL, 0); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_GENERIC_READLINK, 1, + [generic_readlink is global]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-get-disk-ro.m4 +++ linux-aws-4.15.0/zfs/config/kernel-get-disk-ro.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # 2.6.x API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GET_DISK_RO], [ + AC_MSG_CHECKING([whether get_disk_ro() is available]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct gendisk *disk = NULL; + (void) get_disk_ro(disk); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GET_DISK_RO, 1, + [blk_disk_ro() is available]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-get-gendisk.m4 +++ linux-aws-4.15.0/zfs/config/kernel-get-gendisk.m4 @@ -0,0 +1,17 @@ +dnl # +dnl # 2.6.34 API change +dnl # Verify the get_gendisk() symbol is available. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GET_GENDISK], + [AC_MSG_CHECKING([whether get_gendisk() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + get_gendisk(0, NULL); + ], [get_gendisk], [block/genhd.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GET_GENDISK, 1, [get_gendisk() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-get-link.m4 +++ linux-aws-4.15.0/zfs/config/kernel-get-link.m4 @@ -0,0 +1,100 @@ +dnl # +dnl # Supported get_link() interfaces checked newest to oldest. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FOLLOW_LINK], [ + dnl # + dnl # 4.2 API change + dnl # - This kernel retired the nameidata structure. + dnl # + AC_MSG_CHECKING([whether iops->follow_link() passes cookie]) + ZFS_LINUX_TRY_COMPILE([ + #include + const char *follow_link(struct dentry *de, + void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FOLLOW_LINK_COOKIE, 1, + [iops->follow_link() cookie]) + ],[ + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether iops->follow_link() passes nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + void *follow_link(struct dentry *de, struct + nameidata *nd) { return (void *)NULL; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FOLLOW_LINK_NAMEIDATA, 1, + [iops->follow_link() nameidata]) + ],[ + AC_MSG_ERROR(no; please file a bug report) + ]) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_GET_LINK], [ + dnl # + dnl # 4.5 API change + dnl # The get_link interface has added a delayed done call and + dnl # used it to retire the put_link() interface. + dnl # + AC_MSG_CHECKING([whether iops->get_link() passes delayed]) + ZFS_LINUX_TRY_COMPILE([ + #include + const char *get_link(struct dentry *de, struct inode *ip, + struct delayed_call *done) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GET_LINK_DELAYED, 1, + [iops->get_link() delayed]) + ],[ + dnl # + dnl # 4.5 API change + dnl # The follow_link() interface has been replaced by + dnl # get_link() which behaves the same as before except: + dnl # - An inode is passed as a separate argument + dnl # - When called in RCU mode a NULL dentry is passed. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether iops->get_link() passes cookie]) + ZFS_LINUX_TRY_COMPILE([ + #include + const char *get_link(struct dentry *de, struct + inode *ip, void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GET_LINK_COOKIE, 1, + [iops->get_link() cookie]) + ],[ + dnl # + dnl # Check for the follow_link APIs. + dnl # + AC_MSG_RESULT(no) + ZFS_AC_KERNEL_FOLLOW_LINK + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-inode-getattr.m4 +++ linux-aws-4.15.0/zfs/config/kernel-inode-getattr.m4 @@ -0,0 +1,67 @@ +dnl # +dnl # Linux 4.11 API +dnl # See torvalds/linux@a528d35 +dnl # +AC_DEFUN([ZFS_AC_PATH_KERNEL_IOPS_GETATTR], [ + AC_MSG_CHECKING([whether iops->getattr() takes a path]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int test_getattr( + const struct path *p, struct kstat *k, + u32 request_mask, unsigned int query_flags) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PATH_IOPS_GETATTR, 1, + [iops->getattr() takes a path]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + + + +dnl # +dnl # Linux 3.9 - 4.10 API +dnl # +AC_DEFUN([ZFS_AC_VFSMOUNT_KERNEL_IOPS_GETATTR], [ + AC_MSG_CHECKING([whether iops->getattr() takes a vfsmount]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int test_getattr( + struct vfsmount *mnt, struct dentry *d, + struct kstat *k) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_VFSMOUNT_IOPS_GETATTR, 1, + [iops->getattr() takes a vfsmount]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + + +dnl # +dnl # The interface of the getattr callback from the inode_operations +dnl # structure changed. Also, the interface of the simple_getattr() +dnl # function provided by the kernel changed. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR], [ + ZFS_AC_PATH_KERNEL_IOPS_GETATTR + ZFS_AC_VFSMOUNT_KERNEL_IOPS_GETATTR +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-inode-set-flags.m4 +++ linux-aws-4.15.0/zfs/config/kernel-inode-set-flags.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 3.15 API change +dnl # inode_set_flags introduced to set i_flags +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_SET_FLAGS], [ + AC_MSG_CHECKING([whether inode_set_flags() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode inode; + inode_set_flags(&inode, S_IMMUTABLE, S_IMMUTABLE); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_SET_FLAGS, 1, [inode_set_flags() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-insert-inode-locked.m4 +++ linux-aws-4.15.0/zfs/config/kernel-insert-inode-locked.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 2.6.28 API change +dnl # Added insert_inode_locked() helper function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INSERT_INODE_LOCKED], + [AC_MSG_CHECKING([whether insert_inode_locked() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + insert_inode_locked(NULL); + ], [insert_inode_locked], [fs/inode.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INSERT_INODE_LOCKED, 1, + [insert_inode_locked() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-invalidate-bdev-args.m4 +++ linux-aws-4.15.0/zfs/config/kernel-invalidate-bdev-args.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 2.6.22 API change +dnl # Unused destroy_dirty_buffers arg removed from prototype. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS], [ + AC_MSG_CHECKING([whether invalidate_bdev() wants 1 arg]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct block_device *bdev = NULL; + invalidate_bdev(bdev); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_INVALIDATE_BDEV, 1, + [invalidate_bdev() wants 1 arg]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-is_owner_or_cap.m4 +++ linux-aws-4.15.0/zfs/config/kernel-is_owner_or_cap.m4 @@ -0,0 +1,36 @@ +dnl # +dnl # 2.6.39 API change, +dnl # The is_owner_or_cap() macro was renamed to inode_owner_or_capable(), +dnl # This is used for permission checks in the xattr and file attribute call +dnl # paths. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_INODE_OWNER_OR_CAPABLE], [ + AC_MSG_CHECKING([whether inode_owner_or_capable() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode *ip = NULL; + (void) inode_owner_or_capable(ip); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_OWNER_OR_CAPABLE, 1, + [inode_owner_or_capable() exists]) + ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether is_owner_or_cap() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + struct inode *ip = NULL; + (void) is_owner_or_cap(ip); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_IS_OWNER_OR_CAP, 1, + [is_owner_or_cap() exists]) + ],[ + AC_MSG_ERROR(no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-kmap-atomic-args.m4 +++ linux-aws-4.15.0/zfs/config/kernel-kmap-atomic-args.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 2.6.37 API change +dnl # kmap_atomic changed from assigning hard-coded named slot to using +dnl # push/pop based dynamical allocation. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_KMAP_ATOMIC_ARGS], [ + AC_MSG_CHECKING([whether kmap_atomic wants 1 args]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct page page; + kmap_atomic(&page); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_KMAP_ATOMIC, 1, + [kmap_atomic wants 1 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-kuid-helpers.m4 +++ linux-aws-4.15.0/zfs/config/kernel-kuid-helpers.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # 3.5 API change, +dnl # Since usernamespaces were introduced in kernel version 3.5, it +dnl # became necessary to go through one more level of indirection +dnl # when dealing with uid/gid - namely the kuid type. +dnl # +dnl # +AC_DEFUN([ZFS_AC_KERNEL_KUID_HELPERS], [ + AC_MSG_CHECKING([whether i_(uid|gid)_(read|write) exist]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode *ip = NULL; + (void) i_uid_read(ip); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KUID_HELPERS, 1, + [i_(uid|gid)_(read|write) exist]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-lookup-bdev.m4 +++ linux-aws-4.15.0/zfs/config/kernel-lookup-bdev.m4 @@ -0,0 +1,29 @@ +dnl # +dnl # 2.6.27, lookup_bdev() was exported. +dnl # 4.4.0-6.21 - x.y on Ubuntu, lookup_bdev() takes 2 arguments. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_BDEV], + [AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + lookup_bdev(NULL); + ], [lookup_bdev], [fs/block_dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, [lookup_bdev() wants 1 arg]) + ], [ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether lookup_bdev() wants 2 args]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + lookup_bdev(NULL, FMODE_READ); + ], [lookup_bdev], [fs/block_dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_2ARGS_LOOKUP_BDEV, 1, + [lookup_bdev() wants 2 args]) + ], [ + AC_MSG_RESULT(no) + ]) + ]) +]) \ No newline at end of file --- linux-aws-4.15.0.orig/zfs/config/kernel-lookup-nameidata.m4 +++ linux-aws-4.15.0/zfs/config/kernel-lookup-nameidata.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # 3.6 API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_LOOKUP_NAMEIDATA], [ + AC_MSG_CHECKING([whether iops->lookup() passes nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + + struct dentry *inode_lookup(struct inode *inode, + struct dentry *dentry, struct nameidata *nidata) + { return NULL; } + + static const struct inode_operations iops + __attribute__ ((unused)) = { + .lookup = inode_lookup, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_LOOKUP_NAMEIDATA, 1, + [iops->lookup() passes nameidata]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-lseek-execute.m4 +++ linux-aws-4.15.0/zfs/config/kernel-lseek-execute.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 3.11 API change +dnl # lseek_execute helper exported +dnl # +AC_DEFUN([ZFS_AC_KERNEL_LSEEK_EXECUTE], + [AC_MSG_CHECKING([whether lseek_execute() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + struct file *fp __attribute__ ((unused)) = NULL; + struct inode *ip __attribute__ ((unused)) = NULL; + loff_t offset __attribute__ ((unused)) = 0; + loff_t maxsize __attribute__ ((unused)) = 0; + + lseek_execute(fp, ip, offset, maxsize); + ], [lseek_exclusive], [fs/read_write.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_LSEEK_EXECUTE, 1, + [lseek_execute() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-mk-request-fn.m4 +++ linux-aws-4.15.0/zfs/config/kernel-mk-request-fn.m4 @@ -0,0 +1,65 @@ +dnl # +dnl # Linux 3.2 API Change +dnl # make_request_fn returns void instead of int. +dnl # +dnl # Linux 4.4 API Change +dnl # make_request_fn returns blk_qc_t. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ + AC_MSG_CHECKING([whether make_request_fn() returns int]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int make_request(struct request_queue *q, struct bio *bio) + { + return (0); + } + ],[ + blk_queue_make_request(NULL, &make_request); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(MAKE_REQUEST_FN_RET, int, + [make_request_fn() returns int]) + AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_INT, 1, + [Noting that make_request_fn() returns int]) + ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether make_request_fn() returns void]) + ZFS_LINUX_TRY_COMPILE([ + #include + + void make_request(struct request_queue *q, struct bio *bio) + { + return; + } + ],[ + blk_queue_make_request(NULL, &make_request); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(MAKE_REQUEST_FN_RET, void, + [make_request_fn() returns void]) + ],[ + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether make_request_fn() returns blk_qc_t]) + ZFS_LINUX_TRY_COMPILE([ + #include + + blk_qc_t make_request(struct request_queue *q, struct bio *bio) + { + return (BLK_QC_T_NONE); + } + ],[ + blk_queue_make_request(NULL, &make_request); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t, + [make_request_fn() returns blk_qc_t]) + AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1, + [Noting that make_request_fn() returns blk_qc_t]) + ],[ + AC_MSG_ERROR(no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new) + ]) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-mkdir-umode-t.m4 +++ linux-aws-4.15.0/zfs/config/kernel-mkdir-umode-t.m4 @@ -0,0 +1,29 @@ +dnl # +dnl # 3.3 API change +dnl # The VFS .create, .mkdir and .mknod callbacks were updated to take a +dnl # umode_t type rather than an int. The expectation is that any backport +dnl # would also change all three prototypes. However, if it turns out that +dnl # some distribution doesn't backport the whole thing this could be +dnl # broken apart in to three separate checks. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_MKDIR_UMODE_T], [ + AC_MSG_CHECKING([whether iops->create()/mkdir()/mknod() take umode_t]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int mkdir(struct inode *inode, struct dentry *dentry, + umode_t umode) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .mkdir = mkdir, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MKDIR_UMODE_T, 1, + [iops->create()/mkdir()/mknod() take umode_t]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-mod-param.m4 +++ linux-aws-4.15.0/zfs/config/kernel-mod-param.m4 @@ -0,0 +1,30 @@ +dnl # +dnl # Grsecurity kernel API change +dnl # constified parameters of module_param_call() methods +dnl # +AC_DEFUN([ZFS_AC_KERNEL_MODULE_PARAM_CALL_CONST], [ + AC_MSG_CHECKING([whether module_param_call() is hardened]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + int param_get(char *b, const struct kernel_param *kp) + { + return (0); + } + + int param_set(const char *b, const struct kernel_param *kp) + { + return (0); + } + + module_param_call(p, param_set, param_get, NULL, 0644); + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(MODULE_PARAM_CALL_CONST, 1, + [hardened module_param_call]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-mount-nodev.m4 +++ linux-aws-4.15.0/zfs/config/kernel-mount-nodev.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 2.6.39 API change +dnl # The .get_sb callback has been replaced by a .mount callback +dnl # in the file_system_type structure. When using the new +dnl # interface the caller must now use the mount_nodev() helper. +dnl # This updated callback and helper no longer pass the vfsmount. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_MOUNT_NODEV], + [AC_MSG_CHECKING([whether mount_nodev() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + mount_nodev(NULL, 0, NULL, NULL); + ], [mount_nodev], [fs/super.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MOUNT_NODEV, 1, [mount_nodev() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-objtool.m4 +++ linux-aws-4.15.0/zfs/config/kernel-objtool.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 4.6 API for compile-time stack validation +dnl # +AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [ + AC_MSG_CHECKING([for compile-time stack validation (objtool)]) + ZFS_LINUX_TRY_COMPILE([ + #undef __ASSEMBLY__ + #include + ],[ + #if !defined(FRAME_BEGIN) + CTASSERT(1); + #endif + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1, [kernel does stack verification]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-open-bdev-exclusive.m4 +++ linux-aws-4.15.0/zfs/config/kernel-open-bdev-exclusive.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 2.6.28 API change +dnl # open/close_bdev_excl() renamed to open/close_bdev_exclusive() +dnl # +AC_DEFUN([ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE], + [AC_MSG_CHECKING([whether open_bdev_exclusive() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + open_bdev_exclusive(NULL, 0, NULL); + ], [open_bdev_exclusive], [fs/block_dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OPEN_BDEV_EXCLUSIVE, 1, + [open_bdev_exclusive() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-put-link.m4 +++ linux-aws-4.15.0/zfs/config/kernel-put-link.m4 @@ -0,0 +1,60 @@ +dnl # +dnl # Supported symlink APIs +dnl # +AC_DEFUN([ZFS_AC_KERNEL_PUT_LINK], [ + dnl # + dnl # 4.5 API change + dnl # get_link() uses delayed done, there is no put_link() interface. + dnl # + ZFS_LINUX_TRY_COMPILE([ + #if !defined(HAVE_GET_LINK_DELAYED) + #error "Expecting get_link() delayed done" + #endif + ],[ + ],[ + AC_DEFINE(HAVE_PUT_LINK_DELAYED, 1, [iops->put_link() delayed]) + ],[ + dnl # + dnl # 4.2 API change + dnl # This kernel retired the nameidata structure. + dnl # + AC_MSG_CHECKING([whether iops->put_link() passes cookie]) + ZFS_LINUX_TRY_COMPILE([ + #include + void put_link(struct inode *ip, void *cookie) + { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PUT_LINK_COOKIE, 1, + [iops->put_link() cookie]) + ],[ + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether iops->put_link() passes nameidata]) + ZFS_LINUX_TRY_COMPILE([ + #include + void put_link(struct dentry *de, struct + nameidata *nd, void *ptr) { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PUT_LINK_NAMEIDATA, 1, + [iops->put_link() nameidata]) + ],[ + AC_MSG_ERROR(no; please file a bug report) + ]) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-rename.m4 +++ linux-aws-4.15.0/zfs/config/kernel-rename.m4 @@ -0,0 +1,25 @@ +dnl # +dnl # 4.9 API change, +dnl # iops->rename2() merged into iops->rename(), and iops->rename() now wants +dnl # flags. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_RENAME_WANTS_FLAGS], [ + AC_MSG_CHECKING([whether iops->rename() wants flags]) + ZFS_LINUX_TRY_COMPILE([ + #include + int rename_fn(struct inode *sip, struct dentry *sdp, + struct inode *tip, struct dentry *tdp, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .rename = rename_fn, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_RENAME_WANTS_FLAGS, 1, [iops->rename() wants flags]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-security-inode-init.m4 +++ linux-aws-4.15.0/zfs/config/kernel-security-inode-init.m4 @@ -0,0 +1,55 @@ +dnl # +dnl # 2.6.39 API change +dnl # The security_inode_init_security() function now takes an additional +dnl # qstr argument which must be passed in from the dentry if available. +dnl # Passing a NULL is safe when no qstr is available the relevant +dnl # security checks will just be skipped. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_6ARGS_SECURITY_INODE_INIT_SECURITY], [ + AC_MSG_CHECKING([whether security_inode_init_security wants 6 args]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + char *name __attribute__ ((unused)) = NULL; + void *value __attribute__ ((unused)) = NULL; + size_t len __attribute__ ((unused)) = 0; + + security_inode_init_security(ip, dip, str, &name, &value, &len); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY, 1, + [security_inode_init_security wants 6 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.2 API change +dnl # The security_inode_init_security() API has been changed to include +dnl # a filesystem specific callback to write security extended attributes. +dnl # This was done to support the initialization of multiple LSM xattrs +dnl # and the EVM xattr. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CALLBACK_SECURITY_INODE_INIT_SECURITY], [ + AC_MSG_CHECKING([whether security_inode_init_security wants callback]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + initxattrs func __attribute__ ((unused)) = NULL; + + security_inode_init_security(ip, dip, str, func, NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY, 1, + [security_inode_init_security wants callback]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-set-nlink.m4 +++ linux-aws-4.15.0/zfs/config/kernel-set-nlink.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # Linux v3.2-rc1 API change +dnl # SHA: bfe8684869601dacfcb2cd69ef8cfd9045f62170 +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SET_NLINK], [ + AC_MSG_CHECKING([whether set_nlink() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct inode node; + unsigned int link = 0; + (void) set_nlink(&node, link); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SET_NLINK, 1, + [set_nlink() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-setattr-prepare.m4 +++ linux-aws-4.15.0/zfs/config/kernel-setattr-prepare.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 4.9 API change +dnl # The inode_change_ok() function has been renamed setattr_prepare() +dnl # and updated to take a dentry rather than an inode. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SETATTR_PREPARE], + [AC_MSG_CHECKING([whether setattr_prepare() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + struct dentry *dentry = NULL; + struct iattr *attr = NULL; + int error; + + error = setattr_prepare(dentry, attr); + ], [setattr_prepare], [fs/attr.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SETATTR_PREPARE, 1, + [setattr_prepare() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-sget-args.m4 +++ linux-aws-4.15.0/zfs/config/kernel-sget-args.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 3.6 API change, +dnl # 'sget' now takes the mount flags as an argument. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_5ARG_SGET], + [AC_MSG_CHECKING([whether sget() wants 5 args]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct file_system_type *type = NULL; + int (*test)(struct super_block *,void *) = NULL; + int (*set)(struct super_block *,void *) = NULL; + int flags = 0; + void *data = NULL; + (void) sget(type, test, set, flags, data); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_5ARG_SGET, 1, [sget() wants 5 args]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + --- linux-aws-4.15.0.orig/zfs/config/kernel-show-options.m4 +++ linux-aws-4.15.0/zfs/config/kernel-show-options.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # Linux 3.3 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SHOW_OPTIONS], [ + AC_MSG_CHECKING([whether sops->show_options() wants dentry]) + + ZFS_LINUX_TRY_COMPILE([ + #include + + int show_options (struct seq_file * x, struct dentry * y) { return 0; }; + static struct super_operations sops __attribute__ ((unused)) = { + .show_options = show_options, + }; + ],[ + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_SHOW_OPTIONS_WITH_DENTRY, 1, + [sops->show_options() with dentry]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-shrink.m4 +++ linux-aws-4.15.0/zfs/config/kernel-shrink.m4 @@ -0,0 +1,133 @@ +dnl # +dnl # 3.1 API change +dnl # The super_block structure now stores a per-filesystem shrinker. +dnl # This interface is preferable because it can be used to specifically +dnl # target only the zfs filesystem for pruning. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SHRINK], [ + AC_MSG_CHECKING([whether super_block has s_shrink]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int shrink(struct shrinker *s, struct shrink_control *sc) + { return 0; } + + static const struct super_block + sb __attribute__ ((unused)) = { + .s_shrink.shrink = shrink, + .s_shrink.seeks = DEFAULT_SEEKS, + .s_shrink.batch = 0, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SHRINK, 1, [struct super_block has s_shrink]) + + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.3 API change +dnl # The super_block structure was changed to use an hlist_node instead +dnl # of a list_head for the .s_instance linkage. +dnl # +dnl # This was done in part to resolve a race in the iterate_supers_type() +dnl # function which was introduced in Linux 3.0 kernel. The iterator +dnl # was supposed to provide a safe way to call an arbitrary function on +dnl # all super blocks of a specific type. Unfortunately, because a +dnl # list_head was used it was possible for iterate_supers_type() to +dnl # get stuck spinning a super block which was just deactivated. +dnl # +dnl # This can occur because when the list head is removed from the +dnl # fs_supers list it is reinitialized to point to itself. If the +dnl # iterate_supers_type() function happened to be processing the +dnl # removed list_head it will get stuck spinning on that list_head. +dnl # +dnl # To resolve the issue for existing 3.0 - 3.2 kernels we detect when +dnl # a list_head is used. Then to prevent the spinning from occurring +dnl # the .next pointer is set to the fs_supers list_head which ensures +dnl # the iterate_supers_type() function will always terminate. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_S_INSTANCES_LIST_HEAD], [ + AC_MSG_CHECKING([whether super_block has s_instances list_head]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct super_block sb __attribute__ ((unused)); + + INIT_LIST_HEAD(&sb.s_instances); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_S_INSTANCES_LIST_HEAD, 1, + [struct super_block has s_instances list_head]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_NR_CACHED_OBJECTS], [ + AC_MSG_CHECKING([whether sops->nr_cached_objects() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int nr_cached_objects(struct super_block *sb) { return 0; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .nr_cached_objects = nr_cached_objects, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NR_CACHED_OBJECTS, 1, + [sops->nr_cached_objects() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_FREE_CACHED_OBJECTS], [ + AC_MSG_CHECKING([whether sops->free_cached_objects() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + + void free_cached_objects(struct super_block *sb, int x) + { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .free_cached_objects = free_cached_objects, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FREE_CACHED_OBJECTS, 1, + [sops->free_cached_objects() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 3.12 API change +dnl # The nid member was added to struct shrink_control to support +dnl # NUMA-aware shrinkers. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SHRINK_CONTROL_HAS_NID], [ + AC_MSG_CHECKING([whether shrink_control has nid]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct shrink_control sc __attribute__ ((unused)); + unsigned long scnidsize __attribute__ ((unused)) = + sizeof(sc.nid); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(SHRINK_CONTROL_HAS_NID, 1, + [struct shrink_control has nid]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-submit_bio.m4 +++ linux-aws-4.15.0/zfs/config/kernel-submit_bio.m4 @@ -0,0 +1,20 @@ +dnl # +dnl # 4.8 API change +dnl # The rw argument has been removed from submit_bio/submit_bio_wait. +dnl # Callers are now expected to set bio->bi_rw instead of passing it in. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SUBMIT_BIO], [ + AC_MSG_CHECKING([whether submit_bio() wants 1 arg]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + blk_qc_t blk_qc; + struct bio *bio = NULL; + blk_qc = submit_bio(bio); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_SUBMIT_BIO, 1, [submit_bio() wants 1 arg]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-super-userns.m4 +++ linux-aws-4.15.0/zfs/config/kernel-super-userns.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # 4.8 API change +dnl # struct user_namespace was added to struct super_block as +dnl # super->s_user_ns member +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SUPER_USER_NS], [ + AC_MSG_CHECKING([whether super_block->s_user_ns exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + struct super_block super; + super.s_user_ns = (struct user_namespace *)NULL; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SUPER_USER_NS, 1, + [super_block->s_user_ns exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-tmpfile.m4 +++ linux-aws-4.15.0/zfs/config/kernel-tmpfile.m4 @@ -0,0 +1,23 @@ +dnl # +dnl # 3.11 API change +dnl # Add support for i_op->tmpfile +dnl # +AC_DEFUN([ZFS_AC_KERNEL_TMPFILE], [ + AC_MSG_CHECKING([whether i_op->tmpfile() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + int tmpfile(struct inode *inode, struct dentry *dentry, + umode_t mode) { return 0; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .tmpfile = tmpfile, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TMPFILE, 1, + [i_op->tmpfile() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-truncate-range.m4 +++ linux-aws-4.15.0/zfs/config/kernel-truncate-range.m4 @@ -0,0 +1,24 @@ +dnl # +dnl # 3.5.0 API change +dnl # torvalds/linux@17cf28afea2a1112f240a3a2da8af883be024811 removed +dnl # truncate_range(). The file hole punching functionality is now +dnl # provided by fallocate() +dnl # +AC_DEFUN([ZFS_AC_KERNEL_TRUNCATE_RANGE], [ + AC_MSG_CHECKING([whether iops->truncate_range() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + void truncate_range(struct inode *inode, loff_t start, + loff_t end) { return; } + static struct inode_operations iops __attribute__ ((unused)) = { + .truncate_range = truncate_range, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_INODE_TRUNCATE_RANGE, 1, + [iops->truncate_range() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-truncate-setsize.m4 +++ linux-aws-4.15.0/zfs/config/kernel-truncate-setsize.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # 2.6.35 API change +dnl # Added truncate_setsize() helper function. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_TRUNCATE_SETSIZE], + [AC_MSG_CHECKING([whether truncate_setsize() is available]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include + ], [ + truncate_setsize(NULL, 0); + ], [truncate_setsize], [mm/truncate.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TRUNCATE_SETSIZE, 1, + [truncate_setsize() is available]) + ], [ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-vfs-iterate.m4 +++ linux-aws-4.15.0/zfs/config/kernel-vfs-iterate.m4 @@ -0,0 +1,64 @@ +AC_DEFUN([ZFS_AC_KERNEL_VFS_ITERATE], [ + dnl # + dnl # 4.7 API change + dnl # + AC_MSG_CHECKING([whether fops->iterate_shared() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate_shared = iterate, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_VFS_ITERATE_SHARED, 1, + [fops->iterate_shared() is available]) + ],[ + AC_MSG_RESULT(no) + + dnl # + dnl # 3.11 API change + dnl # + AC_MSG_CHECKING([whether fops->iterate() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate = iterate, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_VFS_ITERATE, 1, + [fops->iterate() is available]) + ],[ + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether fops->readdir() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + int readdir(struct file *filp, void *entry, filldir_t func) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .readdir = readdir, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_VFS_READDIR, 1, + [fops->readdir() is available]) + ],[ + AC_MSG_ERROR(no; file a bug report with ZFSOnLinux) + ]) + ]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-vfs-rw-iterate.m4 +++ linux-aws-4.15.0/zfs/config/kernel-vfs-rw-iterate.m4 @@ -0,0 +1,68 @@ +dnl # +dnl # Linux 3.16 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_VFS_RW_ITERATE], + [AC_MSG_CHECKING([whether fops->read/write_iter() are available]) + ZFS_LINUX_TRY_COMPILE([ + #include + + ssize_t test_read(struct kiocb *kiocb, struct iov_iter *to) + { return 0; } + ssize_t test_write(struct kiocb *kiocb, struct iov_iter *from) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .read_iter = test_read, + .write_iter = test_write, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_VFS_RW_ITERATE, 1, + [fops->read/write_iter() are available]) + + ZFS_AC_KERNEL_NEW_SYNC_READ + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 4.1 API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_NEW_SYNC_READ], + [AC_MSG_CHECKING([whether new_sync_read() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + new_sync_read(NULL, NULL, 0, NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NEW_SYNC_READ, 1, + [new_sync_read() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Linux 4.1.x API +dnl # +AC_DEFUN([ZFS_AC_KERNEL_GENERIC_WRITE_CHECKS], + [AC_MSG_CHECKING([whether generic_write_checks() takes kiocb]) + ZFS_LINUX_TRY_COMPILE([ + #include + + ],[ + struct kiocb *iocb = NULL; + struct iov_iter *iov = NULL; + generic_write_checks(iocb, iov); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GENERIC_WRITE_CHECKS_KIOCB, 1, + [generic_write_checks() takes kiocb]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-vm_node_stat.m4 +++ linux-aws-4.15.0/zfs/config/kernel-vm_node_stat.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # 4.8 API change +dnl # kernel vm counters change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_VM_NODE_STAT], [ + AC_MSG_CHECKING([whether to use vm_node_stat based fn's]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS; + long x __attribute__ ((unused)) = + atomic_long_read(&vm_node_stat[0]); + (void) global_node_page_state(0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(ZFS_GLOBAL_NODE_PAGE_STATE, 1, + [using global_node_page_state()]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/kernel-xattr-handler.m4 +++ linux-aws-4.15.0/zfs/config/kernel-xattr-handler.m4 @@ -0,0 +1,417 @@ +dnl # +dnl # 2.6.35 API change, +dnl # The 'struct xattr_handler' was constified in the generic +dnl # super_block structure. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONST_XATTR_HANDLER], [ + AC_MSG_CHECKING([whether super_block uses const struct xattr_handler]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + const struct xattr_handler xattr_test_handler = { + .prefix = "test", + .get = NULL, + .set = NULL, + }; + + const struct xattr_handler *xattr_handlers[] = { + &xattr_test_handler, + }; + + const struct super_block sb __attribute__ ((unused)) = { + .s_xattr = xattr_handlers, + }; + ],[ + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_CONST_XATTR_HANDLER, 1, + [super_block uses const struct xattr_handler]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # 4.5 API change, +dnl # struct xattr_handler added new member "name". +dnl # xattr_handler which matches to whole name rather than prefix should use +dnl # "name" instead of "prefix", e.g. "system.posix_acl_access" +dnl # +AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_NAME], [ + AC_MSG_CHECKING([whether xattr_handler has name]) + ZFS_LINUX_TRY_COMPILE([ + #include + + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .name = XATTR_NAME_POSIX_ACL_ACCESS, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_HANDLER_NAME, 1, + [xattr_handler has name]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # 4.9 API change, +dnl # iops->{set,get,remove}xattr and generic_{set,get,remove}xattr are +dnl # removed. xattr operations will directly go through sb->s_xattr. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR], [ + AC_MSG_CHECKING([whether generic_setxattr() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .setxattr = generic_setxattr + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GENERIC_SETXATTR, 1, + [generic_setxattr() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # Supported xattr handler get() interfaces checked newest to oldest. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_GET], [ + dnl # + dnl # 4.7 API change, + dnl # The xattr_handler->get() callback was changed to take both + dnl # dentry and inode. + dnl # + AC_MSG_CHECKING([whether xattr_handler->get() wants both dentry and inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_GET_DENTRY_INODE, 1, + [xattr_handler->get() wants both dentry and inode]) + ],[ + dnl # + dnl # 4.4 API change, + dnl # The xattr_handler->get() callback was changed to take a + dnl # attr_handler, and handler_flags argument was removed and + dnl # should be accessed by handler->flags. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether xattr_handler->get() wants xattr_handler]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_GET_HANDLER, 1, + [xattr_handler->get() wants xattr_handler]) + ],[ + dnl # + dnl # 2.6.33 API change, + dnl # The xattr_handler->get() callback was changed to take + dnl # a dentry instead of an inode, and a handler_flags + dnl # argument was added. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether xattr_handler->get() wants dentry]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int get(struct dentry *dentry, const char *name, + void *buffer, size_t size, int handler_flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_GET_DENTRY, 1, + [xattr_handler->get() wants dentry]) + ],[ + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether xattr_handler->get() wants inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int get(struct inode *ip, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_GET_INODE, 1, + [xattr_handler->get() wants inode]) + ],[ + AC_MSG_ERROR([no; please file a bug report]) + ]) + ]) + ]) + ]) +]) + +dnl # +dnl # Supported xattr handler set() interfaces checked newest to oldest. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_SET], [ + dnl # + dnl # 4.7 API change, + dnl # The xattr_handler->set() callback was changed to take both + dnl # dentry and inode. + dnl # + AC_MSG_CHECKING([whether xattr_handler->set() wants both dentry and inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, const void *buffer, + size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_SET_DENTRY_INODE, 1, + [xattr_handler->set() wants both dentry and inode]) + ],[ + dnl # + dnl # 4.4 API change, + dnl # The xattr_handler->set() callback was changed to take a + dnl # xattr_handler, and handler_flags argument was removed and + dnl # should be accessed by handler->flags. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether xattr_handler->set() wants xattr_handler]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_SET_HANDLER, 1, + [xattr_handler->set() wants xattr_handler]) + ],[ + dnl # + dnl # 2.6.33 API change, + dnl # The xattr_handler->set() callback was changed to take a + dnl # dentry instead of an inode, and a handler_flags + dnl # argument was added. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING([whether xattr_handler->set() wants dentry]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int set(struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_SET_DENTRY, 1, + [xattr_handler->set() wants dentry]) + ],[ + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether xattr_handler->set() wants inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + + int set(struct inode *ip, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_SET_INODE, 1, + [xattr_handler->set() wants inode]) + ],[ + AC_MSG_ERROR([no; please file a bug report]) + ]) + ]) + ]) + ]) +]) + +dnl # +dnl # Supported xattr handler list() interfaces checked newest to oldest. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_XATTR_HANDLER_LIST], [ + dnl # 4.5 API change, + dnl # The xattr_handler->list() callback was changed to take only a + dnl # dentry and it only needs to return if it's accessible. + AC_MSG_CHECKING([whether xattr_handler->list() wants simple]) + ZFS_LINUX_TRY_COMPILE([ + #include + + bool list(struct dentry *dentry) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_LIST_SIMPLE, 1, + [xattr_handler->list() wants simple]) + ],[ + dnl # + dnl # 4.4 API change, + dnl # The xattr_handler->list() callback was changed to take a + dnl # xattr_handler, and handler_flags argument was removed + dnl # and should be accessed by handler->flags. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether xattr_handler->list() wants xattr_handler]) + ZFS_LINUX_TRY_COMPILE([ + #include + + size_t list(const struct xattr_handler *handler, + struct dentry *dentry, char *list, size_t list_size, + const char *name, size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_LIST_HANDLER, 1, + [xattr_handler->list() wants xattr_handler]) + ],[ + dnl # + dnl # 2.6.33 API change, + dnl # The xattr_handler->list() callback was changed + dnl # to take a dentry instead of an inode, and a + dnl # handler_flags argument was added. + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether xattr_handler->list() wants dentry]) + ZFS_LINUX_TRY_COMPILE([ + #include + + size_t list(struct dentry *dentry, + char *list, size_t list_size, + const char *name, size_t name_len, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_LIST_DENTRY, 1, + [xattr_handler->list() wants dentry]) + ],[ + dnl # + dnl # 2.6.32 API + dnl # + AC_MSG_RESULT(no) + AC_MSG_CHECKING( + [whether xattr_handler->list() wants inode]) + ZFS_LINUX_TRY_COMPILE([ + #include + + size_t list(struct inode *ip, char *lst, + size_t list_size, const char *name, + size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_XATTR_LIST_INODE, 1, + [xattr_handler->list() wants inode]) + ],[ + AC_MSG_ERROR( + [no; please file a bug report]) + ]) + ]) + ]) + ]) +]) + +dnl # +dnl # 3.7 API change, +dnl # The posix_acl_{from,to}_xattr functions gained a new +dnl # parameter: user_ns +dnl # +AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_FROM_XATTR_USERNS], [ + AC_MSG_CHECKING([whether posix_acl_from_xattr() needs user_ns]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + ],[ + posix_acl_from_xattr(&init_user_ns, NULL, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_POSIX_ACL_FROM_XATTR_USERNS, 1, + [posix_acl_from_xattr() needs user_ns]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + --- linux-aws-4.15.0.orig/zfs/config/kernel.m4 +++ linux-aws-4.15.0/zfs/config/kernel.m4 @@ -0,0 +1,823 @@ +dnl # +dnl # Default ZFS kernel configuration +dnl # +AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ + ZFS_AC_KERNEL + ZFS_AC_SPL + ZFS_AC_QAT + ZFS_AC_TEST_MODULE + ZFS_AC_KERNEL_OBJTOOL + ZFS_AC_KERNEL_CONFIG + ZFS_AC_KERNEL_DECLARE_EVENT_CLASS + ZFS_AC_KERNEL_CURRENT_BIO_TAIL + ZFS_AC_KERNEL_SUPER_USER_NS + ZFS_AC_KERNEL_SUBMIT_BIO + ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS + ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID + ZFS_AC_KERNEL_TYPE_FMODE_T + ZFS_AC_KERNEL_3ARG_BLKDEV_GET + ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH + ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE + ZFS_AC_KERNEL_LOOKUP_BDEV + ZFS_AC_KERNEL_INVALIDATE_BDEV_ARGS + ZFS_AC_KERNEL_BDEV_LOGICAL_BLOCK_SIZE + ZFS_AC_KERNEL_BDEV_PHYSICAL_BLOCK_SIZE + ZFS_AC_KERNEL_BIO_BVEC_ITER + ZFS_AC_KERNEL_BIO_FAILFAST_DTD + ZFS_AC_KERNEL_BIO_SET_DEV + ZFS_AC_KERNEL_REQ_FAILFAST_MASK + ZFS_AC_KERNEL_REQ_OP_DISCARD + ZFS_AC_KERNEL_REQ_OP_SECURE_ERASE + ZFS_AC_KERNEL_REQ_OP_FLUSH + ZFS_AC_KERNEL_BIO_BI_OPF + ZFS_AC_KERNEL_BIO_END_IO_T_ARGS + ZFS_AC_KERNEL_BIO_BI_STATUS + ZFS_AC_KERNEL_BIO_RW_BARRIER + ZFS_AC_KERNEL_BIO_RW_DISCARD + ZFS_AC_KERNEL_BLK_QUEUE_BDI + ZFS_AC_KERNEL_BLK_QUEUE_FLUSH + ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS + ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS + ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BIO_RW_UNPLUG + ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BLK_PLUG + ZFS_AC_KERNEL_GET_DISK_RO + ZFS_AC_KERNEL_GET_GENDISK + ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS + ZFS_AC_KERNEL_GENERIC_READLINK_GLOBAL + ZFS_AC_KERNEL_DISCARD_GRANULARITY + ZFS_AC_KERNEL_CONST_XATTR_HANDLER + ZFS_AC_KERNEL_XATTR_HANDLER_NAME + ZFS_AC_KERNEL_XATTR_HANDLER_GET + ZFS_AC_KERNEL_XATTR_HANDLER_SET + ZFS_AC_KERNEL_XATTR_HANDLER_LIST + ZFS_AC_KERNEL_INODE_OWNER_OR_CAPABLE + ZFS_AC_KERNEL_POSIX_ACL_FROM_XATTR_USERNS + ZFS_AC_KERNEL_POSIX_ACL_RELEASE + ZFS_AC_KERNEL_SET_CACHED_ACL_USABLE + ZFS_AC_KERNEL_POSIX_ACL_CHMOD + ZFS_AC_KERNEL_POSIX_ACL_EQUIV_MODE_WANTS_UMODE_T + ZFS_AC_KERNEL_POSIX_ACL_VALID_WITH_NS + ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION + ZFS_AC_KERNEL_INODE_OPERATIONS_PERMISSION_WITH_NAMEIDATA + ZFS_AC_KERNEL_INODE_OPERATIONS_CHECK_ACL + ZFS_AC_KERNEL_INODE_OPERATIONS_CHECK_ACL_WITH_FLAGS + ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL + ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL + ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR + ZFS_AC_KERNEL_INODE_SET_FLAGS + ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE + ZFS_AC_KERNEL_SHOW_OPTIONS + ZFS_AC_KERNEL_FILE_INODE + ZFS_AC_KERNEL_FILE_DENTRY + ZFS_AC_KERNEL_FSYNC + ZFS_AC_KERNEL_EVICT_INODE + ZFS_AC_KERNEL_DIRTY_INODE_WITH_FLAGS + ZFS_AC_KERNEL_NR_CACHED_OBJECTS + ZFS_AC_KERNEL_FREE_CACHED_OBJECTS + ZFS_AC_KERNEL_FALLOCATE + ZFS_AC_KERNEL_AIO_FSYNC + ZFS_AC_KERNEL_MKDIR_UMODE_T + ZFS_AC_KERNEL_LOOKUP_NAMEIDATA + ZFS_AC_KERNEL_CREATE_NAMEIDATA + ZFS_AC_KERNEL_GET_LINK + ZFS_AC_KERNEL_PUT_LINK + ZFS_AC_KERNEL_TMPFILE + ZFS_AC_KERNEL_TRUNCATE_RANGE + ZFS_AC_KERNEL_AUTOMOUNT + ZFS_AC_KERNEL_ENCODE_FH_WITH_INODE + ZFS_AC_KERNEL_COMMIT_METADATA + ZFS_AC_KERNEL_CLEAR_INODE + ZFS_AC_KERNEL_SETATTR_PREPARE + ZFS_AC_KERNEL_INSERT_INODE_LOCKED + ZFS_AC_KERNEL_D_MAKE_ROOT + ZFS_AC_KERNEL_D_OBTAIN_ALIAS + ZFS_AC_KERNEL_D_PRUNE_ALIASES + ZFS_AC_KERNEL_D_SET_D_OP + ZFS_AC_KERNEL_D_REVALIDATE_NAMEIDATA + ZFS_AC_KERNEL_CONST_DENTRY_OPERATIONS + ZFS_AC_KERNEL_TRUNCATE_SETSIZE + ZFS_AC_KERNEL_6ARGS_SECURITY_INODE_INIT_SECURITY + ZFS_AC_KERNEL_CALLBACK_SECURITY_INODE_INIT_SECURITY + ZFS_AC_KERNEL_MOUNT_NODEV + ZFS_AC_KERNEL_SHRINK + ZFS_AC_KERNEL_SHRINK_CONTROL_HAS_NID + ZFS_AC_KERNEL_S_INSTANCES_LIST_HEAD + ZFS_AC_KERNEL_S_D_OP + ZFS_AC_KERNEL_BDI + ZFS_AC_KERNEL_SET_NLINK + ZFS_AC_KERNEL_ELEVATOR_CHANGE + ZFS_AC_KERNEL_5ARG_SGET + ZFS_AC_KERNEL_LSEEK_EXECUTE + ZFS_AC_KERNEL_VFS_ITERATE + ZFS_AC_KERNEL_VFS_RW_ITERATE + ZFS_AC_KERNEL_GENERIC_WRITE_CHECKS + ZFS_AC_KERNEL_KMAP_ATOMIC_ARGS + ZFS_AC_KERNEL_FOLLOW_DOWN_ONE + ZFS_AC_KERNEL_MAKE_REQUEST_FN + ZFS_AC_KERNEL_GENERIC_IO_ACCT_3ARG + ZFS_AC_KERNEL_GENERIC_IO_ACCT_4ARG + ZFS_AC_KERNEL_FPU + ZFS_AC_KERNEL_KUID_HELPERS + ZFS_AC_KERNEL_MODULE_PARAM_CALL_CONST + ZFS_AC_KERNEL_RENAME_WANTS_FLAGS + ZFS_AC_KERNEL_HAVE_GENERIC_SETXATTR + ZFS_AC_KERNEL_CURRENT_TIME + ZFS_AC_KERNEL_VM_NODE_STAT + + AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + ]) + AC_SUBST(KERNELMAKE_PARAMS) + + + dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other + dnl # compiler options are added by the kernel build system. + KERNELCPPFLAGS="$KERNELCPPFLAGS -std=gnu99" + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wno-declaration-after-statement" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_BOOL_COMPARE" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\"" + + AC_SUBST(KERNELCPPFLAGS) +]) + +dnl # +dnl # Detect name used for Module.symvers file in kernel +dnl # +AC_DEFUN([ZFS_AC_MODULE_SYMVERS], [ + modpost=$LINUX/scripts/Makefile.modpost + AC_MSG_CHECKING([kernel file name for module symbols]) + AS_IF([test "x$enable_linux_builtin" != xyes -a -f "$modpost"], [ + AS_IF([grep -q Modules.symvers $modpost], [ + LINUX_SYMBOLS=Modules.symvers + ], [ + LINUX_SYMBOLS=Module.symvers + ]) + + AS_IF([test ! -f "$LINUX_OBJ/$LINUX_SYMBOLS"], [ + AC_MSG_ERROR([ + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source.]) + ]) + ], [ + LINUX_SYMBOLS=NONE + ]) + AC_MSG_RESULT($LINUX_SYMBOLS) + AC_SUBST(LINUX_SYMBOLS) +]) + +dnl # +dnl # Detect the kernel to be built against +dnl # +AC_DEFUN([ZFS_AC_KERNEL], [ + AC_ARG_WITH([linux], + AS_HELP_STRING([--with-linux=PATH], + [Path to kernel source]), + [kernelsrc="$withval"]) + + AC_ARG_WITH(linux-obj, + AS_HELP_STRING([--with-linux-obj=PATH], + [Path to kernel build objects]), + [kernelbuild="$withval"]) + + AC_MSG_CHECKING([kernel source directory]) + AS_IF([test -z "$kernelsrc"], [ + AS_IF([test -e "/lib/modules/$(uname -r)/source"], [ + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + ], [test -e "/lib/modules/$(uname -r)/build"], [ + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + ], [ + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + ]) + + AS_IF([test -n "$sourcelink" && test -e ${sourcelink}], [ + kernelsrc=`readlink -f ${sourcelink}` + ], [ + kernelsrc="[Not found]" + ]) + ], [ + AS_IF([test "$kernelsrc" = "NONE"], [ + kernsrcver=NONE + ]) + withlinux=yes + ]) + + AC_MSG_RESULT([$kernelsrc]) + AS_IF([test ! -d "$kernelsrc"], [ + AC_MSG_ERROR([ + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option.]) + ]) + + AC_MSG_CHECKING([kernel build directory]) + AS_IF([test -z "$kernelbuild"], [ + AS_IF([test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"], [ + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + ], [test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}], [ + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + ], [test -d ${kernelsrc}-obj/${target_cpu}/default], [ + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + ], [test -d `dirname ${kernelsrc}`/build-${target_cpu}], [ + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + ], [ + kernelbuild=${kernelsrc} + ]) + ]) + AC_MSG_RESULT([$kernelbuild]) + + AC_MSG_CHECKING([kernel source version]) + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + AS_IF([test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1], [ + utsrelease=linux/version.h + ], [test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2], [ + utsrelease=linux/utsrelease.h + ], [test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3], [ + utsrelease=generated/utsrelease.h + ]) + + AS_IF([test "$utsrelease"], [ + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + AS_IF([test -z "$kernsrcver"], [ + AC_MSG_RESULT([Not found]) + AC_MSG_ERROR([*** Cannot determine kernel version.]) + ]) + ], [ + AC_MSG_RESULT([Not found]) + if test "x$enable_linux_builtin" != xyes; then + AC_MSG_ERROR([*** Cannot find UTS_RELEASE definition.]) + else + AC_MSG_ERROR([ + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree.]) + fi + ]) + + AC_MSG_RESULT([$kernsrcver]) + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + AC_SUBST(LINUX) + AC_SUBST(LINUX_OBJ) + AC_SUBST(LINUX_VERSION) + + ZFS_AC_MODULE_SYMVERS +]) + + +dnl # +dnl # Detect the SPL module to be built against +dnl # +AC_DEFUN([ZFS_AC_SPL], [ + AC_ARG_WITH([spl], + AS_HELP_STRING([--with-spl=PATH], + [Path to spl source]), + AS_IF([test "$withval" = "yes"], + AC_MSG_ERROR([--with-spl=PATH requires a PATH]), + [splsrc="$withval"])) + + AC_ARG_WITH([spl-obj], + AS_HELP_STRING([--with-spl-obj=PATH], + [Path to spl build objects]), + [splbuild="$withval"]) + + AC_ARG_WITH([spl-timeout], + AS_HELP_STRING([--with-spl-timeout=SECS], + [Wait SECS for SPL header and symver file @<:@default=0@:>@]), + [timeout="$withval"], [timeout=0]) + + dnl # + dnl # The existence of spl.release.in is used to identify a valid + dnl # source directory. In order of preference: + dnl # + splsrc0="/var/lib/dkms/spl/${VERSION}/build" + splsrc1="/usr/local/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc2="/usr/local/src/spl-${VERSION}" + splsrc3="/usr/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc4="/usr/src/spl-${VERSION}" + splsrc5="../spl/" + splsrc6="$LINUX" + + AC_MSG_CHECKING([spl source directory]) + AS_IF([test -z "${splsrc}"], [ + [all_spl_sources=" + ${splsrc0} + ${splsrc1} + ${splsrc2} + ${splsrc3} + ${splsrc4} + ${splsrc5} + ${splsrc6}"], + AS_IF([ test -e "${splsrc0}/spl.release.in"], [ + splsrc=${splsrc0} + ], [ test -e "${splsrc1}/spl.release.in"], [ + splsrc=${splsrc1} + ], [ test -e "${splsrc2}/spl.release.in"], [ + splsrc=${splsrc2} + ], [ test -e "${splsrc3}/spl.release.in"], [ + splsrc=$(readlink -f "${splsrc3}") + ], [ test -e "${splsrc4}/spl.release.in" ], [ + splsrc=${splsrc4} + ], [ test -e "${splsrc5}/spl.release.in"], [ + splsrc=$(readlink -f "${splsrc5}") + ], [ test -e "${splsrc6}/spl.release.in" ], [ + splsrc=${splsrc6} + ], [ + splsrc="[Not found]" + ]) + ], [ + [all_spl_sources="$withval"], + AS_IF([test "$splsrc" = "NONE"], [ + splbuild=NONE + splsrcver=NONE + ]) + ]) + + AC_MSG_RESULT([$splsrc]) + AS_IF([ test ! -e "$splsrc/spl.release.in"], [ + AC_MSG_ERROR([ + *** Please make sure the kmod spl devel package for your distribution + *** is installed then try again. If that fails you can specify the + *** location of the spl source with the '--with-spl=PATH' option. + *** The spl version must match the version of ZFS you are building, + *** ${VERSION}. Failed to find spl.release.in in the following: + $all_spl_sources]) + ]) + + dnl # + dnl # The existence of the spl_config.h is used to identify a valid + dnl # spl object directory. In many cases the object and source + dnl # directory are the same, however the objects may also reside + dnl # is a subdirectory named after the kernel version. + dnl # + dnl # This file is supposed to be available after DKMS finishes + dnl # building the SPL kernel module for the target kernel. The + dnl # '--with-spl-timeout' option can be passed to pause here, + dnl # waiting for the file to appear from a concurrently building + dnl # SPL package. + dnl # + AC_MSG_CHECKING([spl build directory]) + + all_spl_config_locs="${splsrc}/${LINUX_VERSION} + ${splsrc}" + + while true; do + AS_IF([test -z "$splbuild"], [ + AS_IF([ test -e "${splsrc}/${LINUX_VERSION}/spl_config.h" ], [ + splbuild="${splsrc}/${LINUX_VERSION}" + ], [ test -e "${splsrc}/spl_config.h" ], [ + splbuild="${splsrc}" + ], [ find -L "${splsrc}" -name spl_config.h 2> /dev/null | grep -wq spl_config.h ], [ + splbuild=$(find -L "${splsrc}" -name spl_config.h | sed 's,/spl_config.h,,') + ], [ + splbuild="[Not found]" + ]) + ]) + AS_IF([test -e "$splbuild/spl_config.h" -o $timeout -le 0], [ + break; + ], [ + sleep 1 + timeout=$((timeout-1)) + ]) + done + + AC_MSG_RESULT([$splbuild]) + AS_IF([ ! test -e "$splbuild/spl_config.h"], [ + AC_MSG_ERROR([ + *** Please make sure the kmod spl devel package for your + *** distribution is installed then try again. If that fails you + *** can specify the location of the spl objects with the + *** '--with-spl-obj=PATH' option. Failed to find spl_config.h in + *** any of the following: + $all_spl_config_locs]) + ]) + + AC_MSG_CHECKING([spl source version]) + AS_IF([test -r $splbuild/spl_config.h && + fgrep -q SPL_META_VERSION $splbuild/spl_config.h], [ + + splsrcver=`(echo "#include "; + echo "splsrcver=SPL_META_VERSION-SPL_META_RELEASE") | + cpp -I $splbuild | + grep "^splsrcver=" | tr -d \" | cut -d= -f2` + ]) + + AS_IF([test -z "$splsrcver"], [ + AC_MSG_RESULT([Not found]) + AC_MSG_ERROR([ + *** Cannot determine the version of the spl source. + *** Please prepare the spl source before running this script]) + ]) + + AC_MSG_RESULT([$splsrcver]) + + SPL=${splsrc} + SPL_OBJ=${splbuild} + SPL_VERSION=${splsrcver} + + AC_SUBST(SPL) + AC_SUBST(SPL_OBJ) + AC_SUBST(SPL_VERSION) + + dnl # + dnl # Detect the name used for the SPL Module.symvers file. If one + dnl # does not exist this is likely because the SPL has been configured + dnl # but not built. The '--with-spl-timeout' option can be passed + dnl # to pause here, waiting for the file to appear from a concurrently + dnl # building SPL package. If the file does not appear in time, a good + dnl # guess is made as to what this file will be named based on what it + dnl # is named in the kernel build products. This file will first be + dnl # used at link time so if the guess is wrong the build will fail + dnl # then. This unfortunately means the ZFS package does not contain a + dnl # reliable mechanism to detect symbols exported by the SPL at + dnl # configure time. + dnl # + AC_MSG_CHECKING([spl file name for module symbols]) + SPL_SYMBOLS=NONE + + while true; do + AS_IF([test -r $SPL_OBJ/Module.symvers], [ + SPL_SYMBOLS=Module.symvers + ], [test -r $SPL_OBJ/Modules.symvers], [ + SPL_SYMBOLS=Modules.symvers + ], [test -r $SPL_OBJ/module/Module.symvers], [ + SPL_SYMBOLS=Module.symvers + ], [test -r $SPL_OBJ/module/Modules.symvers], [ + SPL_SYMBOLS=Modules.symvers + ]) + + AS_IF([test $SPL_SYMBOLS != NONE -o $timeout -le 0], [ + break; + ], [ + sleep 1 + timeout=$((timeout-1)) + ]) + done + + AS_IF([test "$SPL_SYMBOLS" = NONE], [ + SPL_SYMBOLS=$LINUX_SYMBOLS + ]) + + AC_MSG_RESULT([$SPL_SYMBOLS]) + AC_SUBST(SPL_SYMBOLS) +]) + +dnl # +dnl # Detect the QAT module to be built against +dnl # QAT provides hardware acceleration for data compression: +dnl # https://01.org/intel-quickassist-technology +dnl # * Download and install QAT driver from the above link +dnl # * Start QAT driver in your system: +dnl # service qat_service start +dnl # * Enable QAT in ZFS, e.g.: +dnl # ./configure --with-qat=/QAT1.6 +dnl # make +dnl # * Set GZIP compression in ZFS dataset: +dnl # zfs set compression = gzip +dnl # Then the data written to this ZFS pool is compressed +dnl # by QAT accelerator automatically, and de-compressed by +dnl # QAT when read from the pool. +dnl # * Get QAT hardware statistics by: +dnl # cat /proc/icp_dh895xcc_dev/qat +dnl # * To disable QAT: +dnl # insmod zfs.ko zfs_qat_disable=1 +dnl # +AC_DEFUN([ZFS_AC_QAT], [ + AC_ARG_WITH([qat], + AS_HELP_STRING([--with-qat=PATH], + [Path to qat source]), + AS_IF([test "$withval" = "yes"], + AC_MSG_ERROR([--with-qat=PATH requires a PATH]), + [qatsrc="$withval"])) + + AC_ARG_WITH([qat-obj], + AS_HELP_STRING([--with-qat-obj=PATH], + [Path to qat build objects]), + [qatbuild="$withval"]) + + AS_IF([test ! -z "${qatsrc}"], [ + AC_MSG_CHECKING([qat source directory]) + AC_MSG_RESULT([$qatsrc]) + QAT_SRC="${qatsrc}/quickassist" + AS_IF([ test ! -e "$QAT_SRC/include/cpa.h"], [ + AC_MSG_ERROR([ + *** Please make sure the qat driver package is installed + *** and specify the location of the qat source with the + *** '--with-qat=PATH' option then try again. Failed to + *** find cpa.h in: + ${QAT_SRC}/include]) + ]) + ]) + + AS_IF([test ! -z "${qatsrc}"], [ + AC_MSG_CHECKING([qat build directory]) + AS_IF([test -z "$qatbuild"], [ + qatbuild="${qatsrc}/build" + ]) + + AC_MSG_RESULT([$qatbuild]) + QAT_OBJ=${qatbuild} + AS_IF([ ! test -e "$QAT_OBJ/icp_qa_al.ko" && ! test -e "$QAT_OBJ/qat_api.ko"], [ + AC_MSG_ERROR([ + *** Please make sure the qat driver is installed then try again. + *** Failed to find icp_qa_al.ko or qat_api.ko in: + $QAT_OBJ]) + ]) + + AC_SUBST(QAT_SRC) + AC_SUBST(QAT_OBJ) + + AC_DEFINE(HAVE_QAT, 1, + [qat is enabled and existed]) + ]) + + dnl # + dnl # Detect the name used for the QAT Module.symvers file. + dnl # + AS_IF([test ! -z "${qatsrc}"], [ + AC_MSG_CHECKING([qat file for module symbols]) + QAT_SYMBOLS=$QAT_SRC/lookaside/access_layer/src/Module.symvers + + AS_IF([test -r $QAT_SYMBOLS], [ + AC_MSG_RESULT([$QAT_SYMBOLS]) + AC_SUBST(QAT_SYMBOLS) + ],[ + AC_MSG_ERROR([ + *** Please make sure the qat driver is installed then try again. + *** Failed to find Module.symvers in: + $QAT_SYMBOLS]) + ]) + ]) + ]) +]) + +dnl # +dnl # Basic toolchain sanity check. +dnl # +AC_DEFUN([ZFS_AC_TEST_MODULE], [ + AC_MSG_CHECKING([whether modules can be built]) + ZFS_LINUX_TRY_COMPILE([],[],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + if test "x$enable_linux_builtin" != xyes; then + AC_MSG_ERROR([*** Unable to build an empty module.]) + else + AC_MSG_ERROR([ + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree.]) + fi + ]) +]) + +dnl # +dnl # Certain kernel build options are not supported. These must be +dnl # detected at configure time and cause a build failure. Otherwise +dnl # modules may be successfully built that behave incorrectly. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [ + AS_IF([test "x$cross_compiling" != xyes], [ + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([ + #include "$LINUX/include/linux/license.h" + ], [ + return !license_is_gpl_compatible("$ZFS_META_LICENSE"); + ]) + ], [ + AC_DEFINE([ZFS_IS_GPL_COMPATIBLE], [1], + [Define to 1 if GPL-only symbols can be used]) + ], [ + ]) + ]) + + ZFS_AC_KERNEL_CONFIG_THREAD_SIZE + ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC +]) + +dnl # +dnl # Check configured THREAD_SIZE +dnl # +dnl # The stack size will vary by architecture, but as of Linux 3.15 on x86_64 +dnl # the default thread stack size was increased to 16K from 8K. Therefore, +dnl # on newer kernels and some architectures stack usage optimizations can be +dnl # conditionally applied to improve performance without negatively impacting +dnl # stability. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONFIG_THREAD_SIZE], [ + AC_MSG_CHECKING([whether kernel was built with 16K or larger stacks]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + #if (THREAD_SIZE < 16384) + #error "THREAD_SIZE is less than 16K" + #endif + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_LARGE_STACKS, 1, [kernel has large stacks]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # Check CONFIG_DEBUG_LOCK_ALLOC +dnl # +dnl # This is typically only set for debug kernels because it comes with +dnl # a performance penalty. However, when it is set it maps the non-GPL +dnl # symbol mutex_lock() to the GPL-only mutex_lock_nested() symbol. +dnl # This will cause a failure at link time which we'd rather know about +dnl # at compile time. +dnl # +dnl # Since we plan to pursue making mutex_lock_nested() a non-GPL symbol +dnl # with the upstream community we add a check to detect this case. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [ + + ZFS_LINUX_CONFIG([DEBUG_LOCK_ALLOC], [ + AC_MSG_CHECKING([whether mutex_lock() is GPL-only]) + tmp_flags="$EXTRA_KCFLAGS" + ZFS_LINUX_TRY_COMPILE([ + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct mutex lock; + + mutex_init(&lock); + mutex_lock(&lock); + mutex_unlock(&lock); + ],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(yes) + AC_MSG_ERROR([ + *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible + *** with the CDDL license and will prevent the module linking stage + *** from succeeding. You must rebuild your kernel without this + *** option enabled.]) + ]) + EXTRA_KCFLAGS="$tmp_flags" + ], []) +]) + +dnl # +dnl # ZFS_LINUX_CONFTEST_H +dnl # +AC_DEFUN([ZFS_LINUX_CONFTEST_H], [ +cat - <<_ACEOF >conftest.h +$1 +_ACEOF +]) + +dnl # +dnl # ZFS_LINUX_CONFTEST_C +dnl # +AC_DEFUN([ZFS_LINUX_CONFTEST_C], [ +cat confdefs.h - <<_ACEOF >conftest.c +$1 +_ACEOF +]) + +dnl # +dnl # ZFS_LANG_PROGRAM(C)([PROLOGUE], [BODY]) +dnl # +m4_define([ZFS_LANG_PROGRAM], [ +$1 +int +main (void) +{ +dnl Do *not* indent the following line: there may be CPP directives. +dnl Don't move the `;' right after for the same reason. +$2 + ; + return 0; +} +]) + +dnl # +dnl # ZFS_LINUX_COMPILE_IFELSE / like AC_COMPILE_IFELSE +dnl # +AC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [ + m4_ifvaln([$1], [ZFS_LINUX_CONFTEST_C([$1])]) + m4_ifvaln([$6], [ZFS_LINUX_CONFTEST_H([$6])], [ZFS_LINUX_CONFTEST_H([])]) + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + AS_IF( + [AC_TRY_COMMAND(cp conftest.c conftest.h build && make [$2] -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag) >/dev/null && AC_TRY_COMMAND([$3])], + [$4], + [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])] + ) + rm -Rf build +]) + +dnl # +dnl # ZFS_LINUX_TRY_COMPILE like AC_TRY_COMPILE +dnl # +AC_DEFUN([ZFS_LINUX_TRY_COMPILE], + [ZFS_LINUX_COMPILE_IFELSE( + [AC_LANG_SOURCE([ZFS_LANG_PROGRAM([[$1]], [[$2]])])], + [modules], + [test -s build/conftest.o], + [$3], [$4]) +]) + +dnl # +dnl # ZFS_LINUX_CONFIG +dnl # +AC_DEFUN([ZFS_LINUX_CONFIG], + [AC_MSG_CHECKING([whether kernel was built with CONFIG_$1]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + #ifndef CONFIG_$1 + #error CONFIG_$1 not #defined + #endif + ],[ + AC_MSG_RESULT([yes]) + $2 + ],[ + AC_MSG_RESULT([no]) + $3 + ]) +]) + +dnl # +dnl # ZFS_CHECK_SYMBOL_EXPORT +dnl # check symbol exported or not +dnl # +AC_DEFUN([ZFS_CHECK_SYMBOL_EXPORT], [ + grep -q -E '[[[:space:]]]$1[[[:space:]]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in $2; do + grep -q -E "EXPORT_SYMBOL.*($1)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + $4 + else : + $3 + fi + else : + $3 + fi +]) + +dnl # +dnl # ZFS_LINUX_TRY_COMPILE_SYMBOL +dnl # like ZFS_LINUX_TRY_COMPILE, except ZFS_CHECK_SYMBOL_EXPORT +dnl # is called if not compiling for builtin +dnl # +AC_DEFUN([ZFS_LINUX_TRY_COMPILE_SYMBOL], [ + ZFS_LINUX_TRY_COMPILE([$1], [$2], [rc=0], [rc=1]) + if test $rc -ne 0; then : + $6 + else + if test "x$enable_linux_builtin" != xyes; then + ZFS_CHECK_SYMBOL_EXPORT([$3], [$4], [rc=0], [rc=1]) + fi + if test $rc -ne 0; then : + $6 + else : + $5 + fi + fi +]) + +dnl # +dnl # ZFS_LINUX_TRY_COMPILE_HEADER +dnl # like ZFS_LINUX_TRY_COMPILE, except the contents conftest.h are +dnl # provided via the fifth parameter +dnl # +AC_DEFUN([ZFS_LINUX_TRY_COMPILE_HEADER], + [ZFS_LINUX_COMPILE_IFELSE( + [AC_LANG_SOURCE([ZFS_LANG_PROGRAM([[$1]], [[$2]])])], + [modules], + [test -s build/conftest.o], + [$3], [$4], [$5]) +]) --- linux-aws-4.15.0.orig/zfs/config/libtool.m4 +++ linux-aws-4.15.0/zfs/config/libtool.m4 @@ -0,0 +1,8387 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS --- linux-aws-4.15.0.orig/zfs/config/ltmain.sh +++ linux-aws-4.15.0/zfs/config/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: --- linux-aws-4.15.0.orig/zfs/config/ltoptions.m4 +++ linux-aws-4.15.0/zfs/config/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) --- linux-aws-4.15.0.orig/zfs/config/ltsugar.m4 +++ linux-aws-4.15.0/zfs/config/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) --- linux-aws-4.15.0.orig/zfs/config/ltversion.m4 +++ linux-aws-4.15.0/zfs/config/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) --- linux-aws-4.15.0.orig/zfs/config/lt~obsolete.m4 +++ linux-aws-4.15.0/zfs/config/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) --- linux-aws-4.15.0.orig/zfs/config/missing +++ linux-aws-4.15.0/zfs/config/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# 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, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: --- linux-aws-4.15.0.orig/zfs/config/mount-helper.m4 +++ linux-aws-4.15.0/zfs/config/mount-helper.m4 @@ -0,0 +1,8 @@ +AC_DEFUN([ZFS_AC_CONFIG_USER_MOUNT_HELPER], [ + AC_ARG_WITH(mounthelperdir, + AC_HELP_STRING([--with-mounthelperdir=DIR], + [install mount.zfs in dir [[/sbin]]]), + mounthelperdir=$withval,mounthelperdir=/sbin) + + AC_SUBST(mounthelperdir) +]) --- linux-aws-4.15.0.orig/zfs/config/rpm.am +++ linux-aws-4.15.0/zfs/config/rpm.am @@ -0,0 +1,87 @@ +############################################################################### +# Copyright (C) 2007-2013 Lawrence Livermore National Security, LLC. +# Copyright (C) 2007 The Regents of the University of California. +# Written by Brian Behlendorf . +############################################################################### +# Build targets for RPM packages. +############################################################################### + +srpm-kmod: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_KMOD}' srpm-common + +srpm-dkms: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_DKMS}' srpm-common + +srpm-utils: + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${SRPM_DEFINE_COMMON} ${SRPM_DEFINE_UTIL}' srpm-common + +srpm: srpm-kmod srpm-dkms srpm-utils +srpms: srpm-kmod srpm-dkms srpm-utils + +rpm-kmod: srpm-kmod + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-kmod" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_KMOD}' rpm-common + +rpm-dkms: srpm-dkms + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-dkms" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_DKMS}' rpm-common + +rpm-utils: srpm-utils + $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" \ + def='${RPM_DEFINE_COMMON} ${RPM_DEFINE_UTIL}' rpm-common + +rpm: rpm-kmod rpm-dkms rpm-utils +rpms: rpm-kmod rpm-dkms rpm-utils + +rpm-local: + @(if test "${HAVE_RPMBUILD}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${RPMBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${RPMBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + mkdir -p $(rpmbuild)/TMP && \ + mkdir -p $(rpmbuild)/BUILD && \ + mkdir -p $(rpmbuild)/RPMS && \ + mkdir -p $(rpmbuild)/SRPMS && \ + mkdir -p $(rpmbuild)/SPECS && \ + cp ${RPM_SPEC_DIR}/$(rpmspec) $(rpmbuild)/SPECS && \ + mkdir -p $(rpmbuild)/SOURCES && \ + cp $(top_srcdir)/scripts/kmodtool $(rpmbuild)/SOURCES && \ + cp $(distdir).tar.gz $(rpmbuild)/SOURCES) + +srpm-common: dist + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C $(RPMBUILD) \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \ + cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \ + rm -R $$rpmbuild) + +rpm-common: + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=$(pkg)-$(VERSION)-$(RELEASE)$$dist*src.rpm; \ + rpmspec=$(pkg).spec; \ + rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \ + $(MAKE) $(AM_MAKEFLAGS) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + LANG=C ${RPMBUILD} \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) --rebuild $$rpmpkg || exit 1; \ + cp $$rpmbuild/RPMS/*/* . || exit 1; \ + rm -R $$rpmbuild) --- linux-aws-4.15.0.orig/zfs/config/tgz.am +++ linux-aws-4.15.0/zfs/config/tgz.am @@ -0,0 +1,32 @@ +tgz-local: + @(if test "${HAVE_ALIEN}" = "no"; then \ + echo -e "\n" \ + "*** Required util ${ALIEN} missing. Please install the\n" \ + "*** package for your distribution which provides ${ALIEN},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi) + +tgz-kmod: tgz-local rpm-kmod +if CONFIG_KERNEL + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-kmod-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=kmod-$${name}*$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --scripts --to-tgz $$pkg1; \ + $(RM) $$pkg1 +endif + +tgz-utils: tgz-local rpm-utils +if CONFIG_USER + name=${PACKAGE}; \ + version=${VERSION}-${RELEASE}; \ + arch=`$(RPM) -qp $${name}-$${version}.src.rpm --qf %{arch} | tail -1`; \ + pkg1=$${name}-$${version}.$${arch}.rpm; \ + pkg2=$${name}-devel-$${version}.$${arch}.rpm; \ + pkg3=$${name}-test-$${version}.$${arch}.rpm; \ + fakeroot $(ALIEN) --scripts --to-tgz $$pkg1 $$pkg2 $$pkg3; \ + $(RM) $$pkg1 $$pkg2 $$pkg3 +endif + +tgz: tgz-kmod tgz-utils --- linux-aws-4.15.0.orig/zfs/config/toolchain-simd.m4 +++ linux-aws-4.15.0/zfs/config/toolchain-simd.m4 @@ -0,0 +1,361 @@ +dnl # +dnl # Checks if host toolchain supports SIMD instructions +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [ + case "$host_cpu" in + x86_64 | x86 | i686) + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2 + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER + ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL + ;; + esac +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE], [ + AC_MSG_CHECKING([whether host toolchain supports SSE]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + __asm__ __volatile__("xorps %xmm0, %xmm1"); + } + ]])], [ + AC_DEFINE([HAVE_SSE], 1, [Define if host toolchain supports SSE]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2], [ + AC_MSG_CHECKING([whether host toolchain supports SSE2]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + __asm__ __volatile__("pxor %xmm0, %xmm1"); + } + ]])], [ + AC_DEFINE([HAVE_SSE2], 1, [Define if host toolchain supports SSE2]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3], [ + AC_MSG_CHECKING([whether host toolchain supports SSE3]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + char v[16]; + __asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0])); + } + ]])], [ + AC_DEFINE([HAVE_SSE3], 1, [Define if host toolchain supports SSE3]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSSE3], [ + AC_MSG_CHECKING([whether host toolchain supports SSSE3]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + __asm__ __volatile__("pshufb %xmm0,%xmm1"); + } + ]])], [ + AC_DEFINE([HAVE_SSSE3], 1, [Define if host toolchain supports SSSE3]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_1], [ + AC_MSG_CHECKING([whether host toolchain supports SSE4.1]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + __asm__ __volatile__("pmaxsb %xmm0,%xmm1"); + } + ]])], [ + AC_DEFINE([HAVE_SSE4_1], 1, [Define if host toolchain supports SSE4.1]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE4_2], [ + AC_MSG_CHECKING([whether host toolchain supports SSE4.2]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + __asm__ __volatile__("pcmpgtq %xmm0, %xmm1"); + } + ]])], [ + AC_DEFINE([HAVE_SSE4_2], 1, [Define if host toolchain supports SSE4.2]) + AC_MSG_RESULT([yes]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX], [ + AC_MSG_CHECKING([whether host toolchain supports AVX]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + void main() + { + char v[32]; + __asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0])); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX], 1, [Define if host toolchain supports AVX]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX2], [ + AC_MSG_CHECKING([whether host toolchain supports AVX2]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX2], 1, [Define if host toolchain supports AVX2]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512F], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512F]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512F], 1, [Define if host toolchain supports AVX512F]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512CD], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512CD]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vplzcntd %zmm0,%zmm1"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512CD], 1, [Define if host toolchain supports AVX512CD]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512DQ], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512DQ]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512DQ], 1, [Define if host toolchain supports AVX512DQ]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512BW], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512BW]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512BW], 1, [Define if host toolchain supports AVX512BW]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512IFMA], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512IFMA]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512IFMA], 1, [Define if host toolchain supports AVX512IFMA]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VBMI], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512VBMI]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512VBMI], 1, [Define if host toolchain supports AVX512VBMI]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512PF], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512PF]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512PF], 1, [Define if host toolchain supports AVX512PF]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512ER], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512ER]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vexp2pd %zmm0,%zmm1"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512ER], 1, [Define if host toolchain supports AVX512ER]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) + +dnl # +dnl # ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL +dnl # +AC_DEFUN([ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_AVX512VL], [ + AC_MSG_CHECKING([whether host toolchain supports AVX512VL]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([ + [ + void main() + { + __asm__ __volatile__("vpabsq %zmm0,%zmm1"); + } + ]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_AVX512VL], 1, [Define if host toolchain supports AVX512VL]) + ], [ + AC_MSG_RESULT([no]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-dracut.m4 +++ linux-aws-4.15.0/zfs/config/user-dracut.m4 @@ -0,0 +1,22 @@ +AC_DEFUN([ZFS_AC_CONFIG_USER_DRACUT], [ + AC_MSG_CHECKING(for dracut directory) + AC_ARG_WITH([dracutdir], + AC_HELP_STRING([--with-dracutdir=DIR], + [install dracut helpers @<:@default=check@:>@]), + [dracutdir=$withval], + [dracutdir=check]) + + AS_IF([test "x$dracutdir" = xcheck], [ + path1=/usr/share/dracut + path2=/usr/lib/dracut + default=$path2 + + AS_IF([test -d "$path1"], [dracutdir="$path1"], [ + AS_IF([test -d "$path2"], [dracutdir="$path2"], + [dracutdir="$default"]) + ]) + ]) + + AC_SUBST(dracutdir) + AC_MSG_RESULT([$dracutdir]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-frame-larger-than.m4 +++ linux-aws-4.15.0/zfs/config/user-frame-larger-than.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # Check if gcc supports -Wframe-larger-than= option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN], [ + AC_MSG_CHECKING([for -Wframe-larger-than= support]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wframe-larger-than=1024" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [ + FRAME_LARGER_THAN=-Wframe-larger-than=1024 + AC_MSG_RESULT([yes]) + ], + [ + FRAME_LARGER_THAN= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([FRAME_LARGER_THAN]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-libattr.m4 +++ linux-aws-4.15.0/zfs/config/user-libattr.m4 @@ -0,0 +1,12 @@ +dnl # +dnl # Check for libattr +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_LIBATTR], [ + LIBATTR= + + AC_CHECK_HEADER([attr/xattr.h], [], [AC_MSG_FAILURE([ + *** attr/xattr.h missing, libattr-devel package required])]) + + AC_SUBST([LIBATTR], ["-lattr"]) + AC_DEFINE([HAVE_LIBATTR], 1, [Define if you have libattr]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-libblkid.m4 +++ linux-aws-4.15.0/zfs/config/user-libblkid.m4 @@ -0,0 +1,13 @@ +dnl # +dnl # Check for libblkid. Basic support for detecting ZFS pools +dnl # has existing in blkid since 2008. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [ + LIBBLKID= + + AC_CHECK_HEADER([blkid/blkid.h], [], [AC_MSG_FAILURE([ + *** blkid.h missing, libblkid-devel package required])]) + + AC_SUBST([LIBBLKID], ["-lblkid"]) + AC_DEFINE([HAVE_LIBBLKID], 1, [Define if you have libblkid]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-libtirpc.m4 +++ linux-aws-4.15.0/zfs/config/user-libtirpc.m4 @@ -0,0 +1,30 @@ +dnl # +dnl # Check for libtirpc - may be needed for xdr functionality +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_LIBTIRPC], [ + AC_ARG_WITH([tirpc], + [AS_HELP_STRING([--with-tirpc], + [use tirpc for xdr encoding @<:@default=check@:>@])], + [], + [with_tirpc=check]) + + LIBTIRPC= + LIBTIRPC_CFLAGS= + + AS_IF([test "x$with_tirpc" != xno], + [AC_CHECK_LIB([tirpc], [xdrmem_create], + [AC_SUBST([LIBTIRPC], [-ltirpc]) + AC_SUBST([LIBTIRPC_CFLAGS], [-I/usr/include/tirpc]) + AC_DEFINE([HAVE_LIBTIRPC], [1], [Define if you have libtirpc]) + ], + [if test "x$with_tirpc" != xcheck; then + AC_MSG_FAILURE( + [--with-tirpc was given, but test for tirpc failed]) + fi + AC_SEARCH_LIBS([xdrmem_create], [tirpc], [], [ + AC_MSG_FAILURE([xdrmem_create() requires tirpc or libc])]) + ])], + [AC_SEARCH_LIBS([xdrmem_create], [tirpc], [], [ + AC_MSG_FAILURE([xdrmem_create() requires libc])]) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-libudev.m4 +++ linux-aws-4.15.0/zfs/config/user-libudev.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # Check for libudev - needed for vdev auto-online and auto-replace +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_LIBUDEV], [ + LIBUDEV= + + AC_CHECK_HEADER([libudev.h], [ + user_libudev=yes + AC_SUBST([LIBUDEV], ["-ludev"]) + AC_DEFINE([HAVE_LIBUDEV], 1, [Define if you have libudev]) + ], [ + user_libudev=no + ]) + + AC_SEARCH_LIBS([udev_device_get_is_initialized], [udev], [ + AC_DEFINE([HAVE_LIBUDEV_UDEV_DEVICE_GET_IS_INITIALIZED], 1, [ + Define if udev_device_get_is_initialized is available])], []) + +]) --- linux-aws-4.15.0.orig/zfs/config/user-libuuid.m4 +++ linux-aws-4.15.0/zfs/config/user-libuuid.m4 @@ -0,0 +1,18 @@ +dnl # +dnl # Check for libuuid +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_LIBUUID], [ + LIBUUID= + + AC_CHECK_HEADER([uuid/uuid.h], [], [AC_MSG_FAILURE([ + *** uuid/uuid.h missing, libuuid-devel package required])]) + + AC_SEARCH_LIBS([uuid_generate], [uuid], [], [AC_MSG_FAILURE([ + *** uuid_generate() missing, libuuid-devel package required])]) + + AC_SEARCH_LIBS([uuid_is_null], [uuid], [], [AC_MSG_FAILURE([ + *** uuid_is_null() missing, libuuid-devel package required])]) + + AC_SUBST([LIBUUID], ["-luuid"]) + AC_DEFINE([HAVE_LIBUUID], 1, [Define if you have libuuid]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-makedev.m4 +++ linux-aws-4.15.0/zfs/config/user-makedev.m4 @@ -0,0 +1,39 @@ +dnl # +dnl # glibc 2.25 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS], [ + AC_MSG_CHECKING([makedev() is declared in sys/sysmacros.h]) + AC_TRY_COMPILE( + [ + #include + ],[ + int k; + k = makedev(0,0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MAKEDEV_IN_SYSMACROS, 1, + [makedev() is declared in sys/sysmacros.h]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # +dnl # glibc X < Y < 2.25 +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV], [ + AC_MSG_CHECKING([makedev() is declared in sys/mkdev.h]) + AC_TRY_COMPILE( + [ + #include + ],[ + int k; + k = makedev(0,0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MAKEDEV_IN_MKDEV, 1, + [makedev() is declared in sys/mkdev.h]) + ],[ + AC_MSG_RESULT(no) + ]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-no-format-truncation.m4 +++ linux-aws-4.15.0/zfs/config/user-no-format-truncation.m4 @@ -0,0 +1,22 @@ +dnl # +dnl # Check if gcc supports -Wno-format-truncation option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION], [ + AC_MSG_CHECKING([for -Wno-format-truncation support]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wno-format-truncation" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [ + NO_FORMAT_TRUNCATION=-Wno-format-truncation + AC_MSG_RESULT([yes]) + ], + [ + NO_FORMAT_TRUNCATION= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_FORMAT_TRUNCATION]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-runstatedir.m4 +++ linux-aws-4.15.0/zfs/config/user-runstatedir.m4 @@ -0,0 +1,6 @@ +dnl For backwards compatibility; runstatedir added in autoconf 2.70. +AC_DEFUN([ZFS_AC_CONFIG_USER_RUNSTATEDIR], [ + if test "x$runstatedir" = x; then + AC_SUBST([runstatedir], ['${localstatedir}/run']) + fi +]) --- linux-aws-4.15.0.orig/zfs/config/user-systemd.m4 +++ linux-aws-4.15.0/zfs/config/user-systemd.m4 @@ -0,0 +1,35 @@ +AC_DEFUN([ZFS_AC_CONFIG_USER_SYSTEMD], [ + AC_ARG_ENABLE(systemd, + AC_HELP_STRING([--enable-systemd], + [install systemd unit/preset files [[default: yes]]]), + [],enable_systemd=yes) + + AC_ARG_WITH(systemdunitdir, + AC_HELP_STRING([--with-systemdunitdir=DIR], + [install systemd unit files in dir [[/usr/lib/systemd/system]]]), + systemdunitdir=$withval,systemdunitdir=/usr/lib/systemd/system) + + AC_ARG_WITH(systemdpresetdir, + AC_HELP_STRING([--with-systemdpresetdir=DIR], + [install systemd preset files in dir [[/usr/lib/systemd/system-preset]]]), + systemdpresetdir=$withval,systemdpresetdir=/usr/lib/systemd/system-preset) + + AC_ARG_WITH(systemdmodulesloaddir, + AC_HELP_STRING([--with-systemdmodulesloaddir=DIR], + [install systemd module load files into dir [[/usr/lib/modules-load.d]]]), + systemdmoduleloaddir=$withval,systemdmodulesloaddir=/usr/lib/modules-load.d) + + + AS_IF([test "x$enable_systemd" = xyes], + [ + ZFS_INIT_SYSTEMD=systemd + ZFS_MODULE_LOAD=modules-load.d + modulesloaddir=$systemdmodulesloaddir + ]) + + AC_SUBST(ZFS_INIT_SYSTEMD) + AC_SUBST(ZFS_MODULE_LOAD) + AC_SUBST(systemdunitdir) + AC_SUBST(systemdpresetdir) + AC_SUBST(modulesloaddir) +]) --- linux-aws-4.15.0.orig/zfs/config/user-sysvinit.m4 +++ linux-aws-4.15.0/zfs/config/user-sysvinit.m4 @@ -0,0 +1,11 @@ +AC_DEFUN([ZFS_AC_CONFIG_USER_SYSVINIT], [ + AC_ARG_ENABLE(sysvinit, + AC_HELP_STRING([--enable-sysvinit], + [install SysV init scripts [default: yes]]), + [],enable_sysvinit=yes) + + AS_IF([test "x$enable_sysvinit" = xyes], + [ZFS_INIT_SYSV=init.d]) + + AC_SUBST(ZFS_INIT_SYSV) +]) --- linux-aws-4.15.0.orig/zfs/config/user-udev.m4 +++ linux-aws-4.15.0/zfs/config/user-udev.m4 @@ -0,0 +1,29 @@ +AC_DEFUN([ZFS_AC_CONFIG_USER_UDEV], [ + AC_MSG_CHECKING(for udev directories) + AC_ARG_WITH(udevdir, + AC_HELP_STRING([--with-udevdir=DIR], + [install udev helpers @<:@default=check@:>@]), + [udevdir=$withval], + [udevdir=check]) + + AS_IF([test "x$udevdir" = xcheck], [ + path1=/lib/udev + path2=/usr/lib/udev + default=$path2 + + AS_IF([test -d "$path1"], [udevdir="$path1"], [ + AS_IF([test -d "$path2"], [udevdir="$path2"], + [udevdir="$default"]) + ]) + ]) + + AC_ARG_WITH(udevruledir, + AC_HELP_STRING([--with-udevruledir=DIR], + [install udev rules [[UDEVDIR/rules.d]]]), + [udevruledir=$withval], + [udevruledir="${udevdir}/rules.d"]) + + AC_SUBST(udevdir) + AC_SUBST(udevruledir) + AC_MSG_RESULT([$udevdir;$udevruledir]) +]) --- linux-aws-4.15.0.orig/zfs/config/user-zlib.m4 +++ linux-aws-4.15.0/zfs/config/user-zlib.m4 @@ -0,0 +1,21 @@ +dnl # +dnl # Check for zlib +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER_ZLIB], [ + ZLIB= + + AC_CHECK_HEADER([zlib.h], [], [AC_MSG_FAILURE([ + *** zlib.h missing, zlib-devel package required])]) + + AC_SEARCH_LIBS([compress2], [z], [], [AC_MSG_FAILURE([ + *** compress2() missing, zlib-devel package required])]) + + AC_SEARCH_LIBS([uncompress], [z], [], [AC_MSG_FAILURE([ + *** uncompress() missing, zlib-devel package required])]) + + AC_SEARCH_LIBS([crc32], [z], [], [AC_MSG_FAILURE([ + *** crc32() missing, zlib-devel package required])]) + + AC_SUBST([ZLIB], ["-lz"]) + AC_DEFINE([HAVE_ZLIB], 1, [Define if you have zlib]) +]) --- linux-aws-4.15.0.orig/zfs/config/user.m4 +++ linux-aws-4.15.0/zfs/config/user.m4 @@ -0,0 +1,38 @@ +dnl # +dnl # Default ZFS user configuration +dnl # +AC_DEFUN([ZFS_AC_CONFIG_USER], [ + ZFS_AC_DKMS_INHIBIT + ZFS_AC_CONFIG_USER_MOUNT_HELPER + ZFS_AC_CONFIG_USER_UDEV + ZFS_AC_CONFIG_USER_SYSTEMD + ZFS_AC_CONFIG_USER_SYSVINIT + ZFS_AC_CONFIG_USER_DRACUT + ZFS_AC_CONFIG_USER_ZLIB + ZFS_AC_CONFIG_USER_LIBUUID + ZFS_AC_CONFIG_USER_LIBTIRPC + ZFS_AC_CONFIG_USER_LIBBLKID + ZFS_AC_CONFIG_USER_LIBATTR + ZFS_AC_CONFIG_USER_LIBUDEV + ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN + ZFS_AC_CONFIG_USER_RUNSTATEDIR + ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS + ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV + ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION + + ZFS_AC_TEST_FRAMEWORK + + AC_CHECK_FUNCS([mlockall]) +]) + +dnl # +dnl # Setup the environment for the ZFS Test Suite. Currently only +dnl # Linux sytle systems are supported but this infrastructure can +dnl # be extended to support other platforms if needed. +dnl # +AC_DEFUN([ZFS_AC_TEST_FRAMEWORK], [ + ZONENAME="echo global" + AC_SUBST(ZONENAME) + + AC_SUBST(RM) +]) --- linux-aws-4.15.0.orig/zfs/config/zfs-build.m4 +++ linux-aws-4.15.0/zfs/config/zfs-build.m4 @@ -0,0 +1,333 @@ +AC_DEFUN([ZFS_AC_LICENSE], [ + AC_MSG_CHECKING([zfs author]) + AC_MSG_RESULT([$ZFS_META_AUTHOR]) + + AC_MSG_CHECKING([zfs license]) + AC_MSG_RESULT([$ZFS_META_LICENSE]) +]) + +AC_DEFUN([ZFS_AC_DEBUG], [ + AC_MSG_CHECKING([whether debugging is enabled]) + AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [Enable generic debug support @<:@default=no@:>@])], + [], + [enable_debug=no]) + + AS_IF([test "x$enable_debug" = xyes], + [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" + HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_STACKFLAGS="-fstack-check" + DEBUG_ZFS="_with_debug" + AC_DEFINE(ZFS_DEBUG, 1, [zfs debugging enabled]) + ], + [ + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG " + HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG " + DEBUG_CFLAGS="-DNDEBUG" + DEBUG_STACKFLAGS="" + DEBUG_ZFS="_without_debug" + ]) + + AC_SUBST(DEBUG_CFLAGS) + AC_SUBST(DEBUG_STACKFLAGS) + AC_SUBST(DEBUG_ZFS) + AC_MSG_RESULT([$enable_debug]) +]) + +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ + ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE + ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE + ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD + ZFS_AC_CONFIG_ALWAYS_ARCH +]) + +AC_DEFUN([ZFS_AC_CONFIG], [ + ZFS_CONFIG=all + AC_ARG_WITH([config], + AS_HELP_STRING([--with-config=CONFIG], + [Config file 'kernel|user|all|srpm']), + [ZFS_CONFIG="$withval"]) + AC_ARG_ENABLE([linux-builtin], + [AC_HELP_STRING([--enable-linux-builtin], + [Configure for builtin in-tree kernel modules @<:@default=no@:>@])], + [], + [enable_linux_builtin=no]) + + AC_MSG_CHECKING([zfs config]) + AC_MSG_RESULT([$ZFS_CONFIG]); + AC_SUBST(ZFS_CONFIG) + + ZFS_AC_CONFIG_ALWAYS + + case "$ZFS_CONFIG" in + kernel) ZFS_AC_CONFIG_KERNEL ;; + user) ZFS_AC_CONFIG_USER ;; + all) ZFS_AC_CONFIG_USER + ZFS_AC_CONFIG_KERNEL ;; + srpm) ;; + *) + AC_MSG_RESULT([Error!]) + AC_MSG_ERROR([Bad value "$ZFS_CONFIG" for --with-config, + user kernel|user|all|srpm]) ;; + esac + + AM_CONDITIONAL([CONFIG_USER], + [test "$ZFS_CONFIG" = user -o "$ZFS_CONFIG" = all]) + AM_CONDITIONAL([CONFIG_KERNEL], + [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] && + [test "x$enable_linux_builtin" != xyes ]) + AM_CONDITIONAL([WANT_DEVNAME2DEVID], + [test "x$user_libudev" = xyes ]) + AM_CONDITIONAL([CONFIG_QAT], + [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] && + [test "x$qatsrc" != x ]) +]) + +dnl # +dnl # Check for rpm+rpmbuild to build RPM packages. If these tools +dnl # are missing it is non-fatal but you will not be able to build +dnl # RPM packages and will be warned if you try too. +dnl # +dnl # By default the generic spec file will be used because it requires +dnl # minimal dependencies. Distribution specific spec files can be +dnl # placed under the 'rpm/' directory and enabled using +dnl # the --with-spec= configure option. +dnl # +AC_DEFUN([ZFS_AC_RPM], [ + RPM=rpm + RPMBUILD=rpmbuild + + AC_MSG_CHECKING([whether $RPM is available]) + AS_IF([tmp=$($RPM --version 2>/dev/null)], [ + RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }') + HAVE_RPM=yes + AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)]) + ],[ + HAVE_RPM=no + AC_MSG_RESULT([$HAVE_RPM]) + ]) + + AC_MSG_CHECKING([whether $RPMBUILD is available]) + AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [ + RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }') + HAVE_RPMBUILD=yes + AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)]) + ],[ + HAVE_RPMBUILD=no + AC_MSG_RESULT([$HAVE_RPMBUILD]) + ]) + + RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"' + RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS)' + RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"' + RPM_DEFINE_DKMS= + + SRPM_DEFINE_COMMON='--define "build_src_rpm 1"' + SRPM_DEFINE_UTIL= + SRPM_DEFINE_KMOD= + SRPM_DEFINE_DKMS= + + RPM_SPEC_DIR="rpm/generic" + AC_ARG_WITH([spec], + AS_HELP_STRING([--with-spec=SPEC], + [Spec files 'generic|redhat']), + [RPM_SPEC_DIR="rpm/$withval"]) + + AC_MSG_CHECKING([whether spec files are available]) + AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)]) + + AC_SUBST(HAVE_RPM) + AC_SUBST(RPM) + AC_SUBST(RPM_VERSION) + + AC_SUBST(HAVE_RPMBUILD) + AC_SUBST(RPMBUILD) + AC_SUBST(RPMBUILD_VERSION) + + AC_SUBST(RPM_SPEC_DIR) + AC_SUBST(RPM_DEFINE_UTIL) + AC_SUBST(RPM_DEFINE_KMOD) + AC_SUBST(RPM_DEFINE_DKMS) + AC_SUBST(RPM_DEFINE_COMMON) + AC_SUBST(SRPM_DEFINE_UTIL) + AC_SUBST(SRPM_DEFINE_KMOD) + AC_SUBST(SRPM_DEFINE_DKMS) + AC_SUBST(SRPM_DEFINE_COMMON) +]) + +dnl # +dnl # Check for dpkg+dpkg-buildpackage to build DEB packages. If these +dnl # tools are missing it is non-fatal but you will not be able to build +dnl # DEB packages and will be warned if you try too. +dnl # +AC_DEFUN([ZFS_AC_DPKG], [ + DPKG=dpkg + DPKGBUILD=dpkg-buildpackage + + AC_MSG_CHECKING([whether $DPKG is available]) + AS_IF([tmp=$($DPKG --version 2>/dev/null)], [ + DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }') + HAVE_DPKG=yes + AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)]) + ],[ + HAVE_DPKG=no + AC_MSG_RESULT([$HAVE_DPKG]) + ]) + + AC_MSG_CHECKING([whether $DPKGBUILD is available]) + AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [ + DPKGBUILD_VERSION=$(echo $tmp | \ + $AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.') + HAVE_DPKGBUILD=yes + AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)]) + ],[ + HAVE_DPKGBUILD=no + AC_MSG_RESULT([$HAVE_DPKGBUILD]) + ]) + + AC_SUBST(HAVE_DPKG) + AC_SUBST(DPKG) + AC_SUBST(DPKG_VERSION) + + AC_SUBST(HAVE_DPKGBUILD) + AC_SUBST(DPKGBUILD) + AC_SUBST(DPKGBUILD_VERSION) +]) + +dnl # +dnl # Until native packaging for various different packing systems +dnl # can be added the least we can do is attempt to use alien to +dnl # convert the RPM packages to the needed package type. This is +dnl # a hack but so far it has worked reasonable well. +dnl # +AC_DEFUN([ZFS_AC_ALIEN], [ + ALIEN=alien + + AC_MSG_CHECKING([whether $ALIEN is available]) + AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [ + ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }') + HAVE_ALIEN=yes + AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)]) + ],[ + HAVE_ALIEN=no + AC_MSG_RESULT([$HAVE_ALIEN]) + ]) + + AC_SUBST(HAVE_ALIEN) + AC_SUBST(ALIEN) + AC_SUBST(ALIEN_VERSION) +]) + +dnl # +dnl # Using the VENDOR tag from config.guess set the default +dnl # package type for 'make pkg': (rpm | deb | tgz) +dnl # +AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ + AC_MSG_CHECKING([linux distribution]) + if test -f /etc/toss-release ; then + VENDOR=toss ; + elif test -f /etc/fedora-release ; then + VENDOR=fedora ; + elif test -f /etc/redhat-release ; then + VENDOR=redhat ; + elif test -f /etc/gentoo-release ; then + VENDOR=gentoo ; + elif test -f /etc/arch-release ; then + VENDOR=arch ; + elif test -f /etc/SuSE-release ; then + VENDOR=sles ; + elif test -f /etc/slackware-version ; then + VENDOR=slackware ; + elif test -f /etc/lunar.release ; then + VENDOR=lunar ; + elif test -f /etc/lsb-release ; then + VENDOR=ubuntu ; + elif test -f /etc/debian_version ; then + VENDOR=debian ; + elif test -f /etc/alpine-release ; then + VENDOR=alpine ; + else + VENDOR= ; + fi + AC_MSG_RESULT([$VENDOR]) + AC_SUBST(VENDOR) + + AC_MSG_CHECKING([default package type]) + case "$VENDOR" in + toss) DEFAULT_PACKAGE=rpm ;; + redhat) DEFAULT_PACKAGE=rpm ;; + fedora) DEFAULT_PACKAGE=rpm ;; + gentoo) DEFAULT_PACKAGE=tgz ;; + alpine) DEFAULT_PACKAGE=tgz ;; + arch) DEFAULT_PACKAGE=tgz ;; + sles) DEFAULT_PACKAGE=rpm ;; + slackware) DEFAULT_PACKAGE=tgz ;; + lunar) DEFAULT_PACKAGE=tgz ;; + ubuntu) DEFAULT_PACKAGE=deb ;; + debian) DEFAULT_PACKAGE=deb ;; + *) DEFAULT_PACKAGE=rpm ;; + esac + AC_MSG_RESULT([$DEFAULT_PACKAGE]) + AC_SUBST(DEFAULT_PACKAGE) + + DEFAULT_INIT_DIR=$sysconfdir/init.d + AC_MSG_CHECKING([default init directory]) + AC_MSG_RESULT([$DEFAULT_INIT_DIR]) + AC_SUBST(DEFAULT_INIT_DIR) + + AC_MSG_CHECKING([default init script type]) + case "$VENDOR" in + toss) DEFAULT_INIT_SCRIPT=redhat ;; + redhat) DEFAULT_INIT_SCRIPT=redhat ;; + fedora) DEFAULT_INIT_SCRIPT=fedora ;; + gentoo) DEFAULT_INIT_SCRIPT=openrc ;; + alpine) DEFAULT_INIT_SCRIPT=openrc ;; + arch) DEFAULT_INIT_SCRIPT=lsb ;; + sles) DEFAULT_INIT_SCRIPT=lsb ;; + slackware) DEFAULT_INIT_SCRIPT=lsb ;; + lunar) DEFAULT_INIT_SCRIPT=lunar ;; + ubuntu) DEFAULT_INIT_SCRIPT=lsb ;; + debian) DEFAULT_INIT_SCRIPT=lsb ;; + *) DEFAULT_INIT_SCRIPT=lsb ;; + esac + AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT]) + AC_SUBST(DEFAULT_INIT_SCRIPT) + + AC_MSG_CHECKING([default init config direectory]) + case "$VENDOR" in + alpine) DEFAULT_INITCONF_DIR=/etc/conf.d ;; + gentoo) DEFAULT_INITCONF_DIR=/etc/conf.d ;; + toss) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + redhat) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + fedora) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + sles) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + ubuntu) DEFAULT_INITCONF_DIR=/etc/default ;; + debian) DEFAULT_INITCONF_DIR=/etc/default ;; + *) DEFAULT_INITCONF_DIR=/etc/default ;; + esac + AC_MSG_RESULT([$DEFAULT_INITCONF_DIR]) + AC_SUBST(DEFAULT_INITCONF_DIR) + + AC_MSG_CHECKING([whether initramfs-tools is available]) + if test -d /usr/share/initramfs-tools ; then + DEFINE_INITRAMFS='--define "_initramfs 1"' + AC_MSG_RESULT([yes]) + else + DEFINE_INITRAMFS='' + AC_MSG_RESULT([no]) + fi + AC_SUBST(DEFINE_INITRAMFS) +]) + +dnl # +dnl # Default ZFS package configuration +dnl # +AC_DEFUN([ZFS_AC_PACKAGE], [ + ZFS_AC_DEFAULT_PACKAGE + ZFS_AC_RPM + ZFS_AC_DPKG + ZFS_AC_ALIEN +]) --- linux-aws-4.15.0.orig/zfs/config/zfs-meta.m4 +++ linux-aws-4.15.0/zfs/config/zfs-meta.m4 @@ -0,0 +1,205 @@ +dnl # +dnl # DESCRIPTION: +dnl # Read meta data from the META file or the debian/changelog file if it +dnl # exists. When building from a git repository the ZFS_META_RELEASE field +dnl # will be overwritten if there is an annotated tag matching the form +dnl # ZFS_META_NAME-ZFS_META_VERSION-*. This allows for working builds to be +dnl # uniquely identified using the git commit hash. +dnl # +dnl # The META file format is as follows: +dnl # ^[ ]*KEY:[ \t]+VALUE$ +dnl # +dnl # In other words: +dnl # - KEY is separated from VALUE by a colon and one or more spaces/tabs. +dnl # - KEY and VALUE are case sensitive. +dnl # - Leading spaces are ignored. +dnl # - First match wins for duplicate keys. +dnl # +dnl # A line can be commented out by preceding it with a '#' (or technically +dnl # any non-space character since that will prevent the regex from +dnl # matching). +dnl # +dnl # WARNING: +dnl # Placing a colon followed by a space or tab (ie, ":[ \t]+") within the +dnl # VALUE will prematurely terminate the string since that sequence is +dnl # used as the awk field separator. +dnl # +dnl # KEYS: +dnl # The following META keys are recognized: +dnl # Name, Version, Release, Date, Author, LT_Current, LT_Revision, LT_Age +dnl # +dnl # Written by Chris Dunlap . +dnl # Modified by Brian Behlendorf . +dnl # +AC_DEFUN([ZFS_AC_META], [ + + AH_BOTTOM([ +#undef PACKAGE +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION +#undef STDC_HEADERS +#undef VERSION]) + + AC_PROG_AWK + AC_MSG_CHECKING([metadata]) + + META="$srcdir/META" + _zfs_ac_meta_type="none" + if test -f "$META"; then + _zfs_ac_meta_type="META file" + _dpkg_parsechangelog=$(dpkg-parsechangelog 2>/dev/null) + + ZFS_META_NAME=_ZFS_AC_META_GETVAL([(Name|Project|Package)]); + if test -n "$ZFS_META_NAME"; then + AC_DEFINE_UNQUOTED([ZFS_META_NAME], ["$ZFS_META_NAME"], + [Define the project name.] + ) + AC_SUBST([ZFS_META_NAME]) + fi + + ZFS_META_VERSION=_ZFS_AC_META_GETVAL([Version]); + if test -n "$ZFS_META_VERSION"; then + AC_DEFINE_UNQUOTED([ZFS_META_VERSION], ["$ZFS_META_VERSION"], + [Define the project version.] + ) + AC_SUBST([ZFS_META_VERSION]) + fi + + if test -n "${_dpkg_parsechangelog}"; then + _dpkg_version=$(echo "${_dpkg_parsechangelog}" \ + | $AWK '$[]1 == "Version:" { print $[]2; }' \ + | cut -d- -f1) + if test "${_dpkg_version}" != "$ZFS_META_VERSION"; then + AC_MSG_ERROR([ + *** Version $ZFS_META_VERSION in the META file is different than + *** version $_dpkg_version in the debian/changelog file. DKMS and DEB + *** packaging require that these files have the same version. + ]) + fi + fi + + ZFS_META_RELEASE=_ZFS_AC_META_GETVAL([Release]); + + if test -n "${_dpkg_parsechangelog}"; then + _dpkg_release=$(echo "${_dpkg_parsechangelog}" \ + | $AWK '$[]1 == "Version:" { print $[]2; }' \ + | cut -d- -f2-) + if test -n "${_dpkg_release}"; then + ZFS_META_RELEASE=${_dpkg_release} + _zfs_ac_meta_type="dpkg-parsechangelog" + fi + elif test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then + _match="${ZFS_META_NAME}-${ZFS_META_VERSION}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + ZFS_META_RELEASE=${_release} + _zfs_ac_meta_type="git describe" + else + _match="${ZFS_META_NAME}-${ZFS_META_VERSION}-${ZFS_META_RELEASE}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + ZFS_META_RELEASE=${_release} + _zfs_ac_meta_type="git describe" + fi + fi + fi + + if test -n "$ZFS_META_RELEASE"; then + AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], ["$ZFS_META_RELEASE"], + [Define the project release.] + ) + AC_SUBST([ZFS_META_RELEASE]) + + RELEASE="$ZFS_META_RELEASE" + AC_SUBST([RELEASE]) + fi + + ZFS_META_LICENSE=_ZFS_AC_META_GETVAL([License]); + if test -n "$ZFS_META_LICENSE"; then + AC_DEFINE_UNQUOTED([ZFS_META_LICENSE], ["$ZFS_META_LICENSE"], + [Define the project license.] + ) + AC_SUBST([ZFS_META_LICENSE]) + fi + + if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then + ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION" + test -n "$ZFS_META_RELEASE" && + ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE" + AC_DEFINE_UNQUOTED([ZFS_META_ALIAS], + ["$ZFS_META_ALIAS"], + [Define the project alias string.] + ) + AC_SUBST([ZFS_META_ALIAS]) + fi + + ZFS_META_DATA=_ZFS_AC_META_GETVAL([Date]); + if test -n "$ZFS_META_DATA"; then + AC_DEFINE_UNQUOTED([ZFS_META_DATA], ["$ZFS_META_DATA"], + [Define the project release date.] + ) + AC_SUBST([ZFS_META_DATA]) + fi + + ZFS_META_AUTHOR=_ZFS_AC_META_GETVAL([Author]); + if test -n "$ZFS_META_AUTHOR"; then + AC_DEFINE_UNQUOTED([ZFS_META_AUTHOR], ["$ZFS_META_AUTHOR"], + [Define the project author.] + ) + AC_SUBST([ZFS_META_AUTHOR]) + fi + + m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$]) + ZFS_META_LT_CURRENT=_ZFS_AC_META_GETVAL([LT_Current]); + ZFS_META_LT_REVISION=_ZFS_AC_META_GETVAL([LT_Revision]); + ZFS_META_LT_AGE=_ZFS_AC_META_GETVAL([LT_Age]); + if test -n "$ZFS_META_LT_CURRENT" \ + -o -n "$ZFS_META_LT_REVISION" \ + -o -n "$ZFS_META_LT_AGE"; then + test -n "$ZFS_META_LT_CURRENT" || ZFS_META_LT_CURRENT="0" + test -n "$ZFS_META_LT_REVISION" || ZFS_META_LT_REVISION="0" + test -n "$ZFS_META_LT_AGE" || ZFS_META_LT_AGE="0" + AC_DEFINE_UNQUOTED([ZFS_META_LT_CURRENT], + ["$ZFS_META_LT_CURRENT"], + [Define the libtool library 'current' + version information.] + ) + AC_DEFINE_UNQUOTED([ZFS_META_LT_REVISION], + ["$ZFS_META_LT_REVISION"], + [Define the libtool library 'revision' + version information.] + ) + AC_DEFINE_UNQUOTED([ZFS_META_LT_AGE], ["$ZFS_META_LT_AGE"], + [Define the libtool library 'age' + version information.] + ) + AC_SUBST([ZFS_META_LT_CURRENT]) + AC_SUBST([ZFS_META_LT_REVISION]) + AC_SUBST([ZFS_META_LT_AGE]) + fi + fi + + AC_MSG_RESULT([$_zfs_ac_meta_type]) + ] +) + +dnl # _ZFS_AC_META_GETVAL (KEY_NAME_OR_REGEX) +dnl # +dnl # Returns the META VALUE associated with the given KEY_NAME_OR_REGEX expr. +dnl # +dnl # Despite their resemblance to line noise, +dnl # the "@<:@" and "@:>@" constructs are quadrigraphs for "[" and "]". +dnl # +dnl # +dnl # The "$[]1" and "$[]2" constructs prevent M4 parameter expansion +dnl # so a literal $1 and $2 will be passed to the resulting awk script, +dnl # whereas the "$1" will undergo M4 parameter expansion for the META key. +dnl # +AC_DEFUN([_ZFS_AC_META_GETVAL], + [`$AWK -F ':@<:@ \t@:>@+' '$[]1 ~ /^ *$1$/ { print $[]2; exit }' $META`]dnl +) --- linux-aws-4.15.0.orig/zfs/configure +++ linux-aws-4.15.0/zfs/configure @@ -0,0 +1,42916 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for zfs 0.7.5. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='zfs' +PACKAGE_TARNAME='zfs' +PACKAGE_VERSION='0.7.5' +PACKAGE_STRING='zfs 0.7.5' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +DEBUG_ZFS +DEBUG_STACKFLAGS +DEBUG_CFLAGS +CONFIG_QAT_FALSE +CONFIG_QAT_TRUE +WANT_DEVNAME2DEVID_FALSE +WANT_DEVNAME2DEVID_TRUE +CONFIG_KERNEL_FALSE +CONFIG_KERNEL_TRUE +CONFIG_USER_FALSE +CONFIG_USER_TRUE +RM +ZONENAME +NO_FORMAT_TRUNCATION +FRAME_LARGER_THAN +LIBUDEV +LIBATTR +LIBBLKID +LIBTIRPC_CFLAGS +LIBTIRPC +LIBUUID +ZLIB +dracutdir +ZFS_INIT_SYSV +modulesloaddir +systemdpresetdir +systemdunitdir +ZFS_MODULE_LOAD +ZFS_INIT_SYSTEMD +udevruledir +udevdir +mounthelperdir +KERNELCPPFLAGS +KERNELMAKE_PARAMS +QAT_SYMBOLS +QAT_OBJ +QAT_SRC +SPL_SYMBOLS +SPL_VERSION +SPL_OBJ +SPL +LINUX_SYMBOLS +LINUX_VERSION +LINUX_OBJ +LINUX +TARGET_ASM_GENERIC_FALSE +TARGET_ASM_GENERIC_TRUE +TARGET_ASM_I386_FALSE +TARGET_ASM_I386_TRUE +TARGET_ASM_X86_64_FALSE +TARGET_ASM_X86_64_TRUE +TARGET_ASM_DIR +NO_BOOL_COMPARE +NO_UNUSED_BUT_SET_VARIABLE +ZFS_CONFIG +ALIEN_VERSION +ALIEN +HAVE_ALIEN +DPKGBUILD_VERSION +DPKGBUILD +HAVE_DPKGBUILD +DPKG_VERSION +DPKG +HAVE_DPKG +SRPM_DEFINE_COMMON +SRPM_DEFINE_DKMS +SRPM_DEFINE_KMOD +SRPM_DEFINE_UTIL +RPM_DEFINE_COMMON +RPM_DEFINE_DKMS +RPM_DEFINE_KMOD +RPM_DEFINE_UTIL +RPM_SPEC_DIR +RPMBUILD_VERSION +RPMBUILD +HAVE_RPMBUILD +RPM_VERSION +RPM +HAVE_RPM +DEFINE_INITRAMFS +DEFAULT_INITCONF_DIR +DEFAULT_INIT_SCRIPT +DEFAULT_INIT_DIR +DEFAULT_PACKAGE +VENDOR +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +ZFS_META_LT_AGE +ZFS_META_LT_REVISION +ZFS_META_LT_CURRENT +ZFS_META_AUTHOR +ZFS_META_DATA +ZFS_META_ALIAS +ZFS_META_LICENSE +RELEASE +ZFS_META_RELEASE +ZFS_META_VERSION +ZFS_META_NAME +AWK +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +with_spec +with_config +enable_linux_builtin +with_linux +with_linux_obj +with_spl +with_spl_obj +with_spl_timeout +with_qat +with_qat_obj +with_mounthelperdir +with_udevdir +with_udevruledir +enable_systemd +with_systemdunitdir +with_systemdpresetdir +with_systemdmodulesloaddir +enable_sysvinit +with_dracutdir +with_tirpc +enable_debug +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +LT_SYS_LIBRARY_PATH +CPP +CCAS +CCASFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures zfs 0.7.5 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/zfs] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of zfs 0.7.5:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-linux-builtin Configure for builtin in-tree kernel modules + [default=no] + --enable-systemd install systemd unit/preset files [[default: yes]] + --enable-sysvinit install SysV init scripts [default: yes] + --enable-debug Enable generic debug support [default=no] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-spec=SPEC Spec files 'generic|redhat' + --with-config=CONFIG Config file 'kernel|user|all|srpm' + --with-linux=PATH Path to kernel source + --with-linux-obj=PATH Path to kernel build objects + --with-spl=PATH Path to spl source + --with-spl-obj=PATH Path to spl build objects + --with-spl-timeout=SECS Wait SECS for SPL header and symver file [default=0] + --with-qat=PATH Path to qat source + --with-qat-obj=PATH Path to qat build objects + --with-mounthelperdir=DIR + install mount.zfs in dir [[/sbin]] + --with-udevdir=DIR install udev helpers [default=check] + --with-udevruledir=DIR install udev rules [[UDEVDIR/rules.d]] + --with-systemdunitdir=DIR + install systemd unit files in dir + [[/usr/lib/systemd/system]] + --with-systemdpresetdir=DIR + install systemd preset files in dir + [[/usr/lib/systemd/system-preset]] + --with-systemdmodulesloaddir=DIR + install systemd module load files into dir + [[/usr/lib/modules-load.d]] + --with-dracutdir=DIR install dracut helpers [default=check] + --with-tirpc use tirpc for xdr encoding [default=check] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +zfs configure 0.7.5 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by zfs $as_me 0.7.5, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking metadata" >&5 +$as_echo_n "checking metadata... " >&6; } + + META="$srcdir/META" + _zfs_ac_meta_type="none" + if test -f "$META"; then + _zfs_ac_meta_type="META file" + _dpkg_parsechangelog=$(dpkg-parsechangelog 2>/dev/null) + + ZFS_META_NAME=`$AWK -F ':[ \t]+' '$1 ~ /^ *(Name|Project|Package)$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_NAME"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_NAME "$ZFS_META_NAME" +_ACEOF + + + fi + + ZFS_META_VERSION=`$AWK -F ':[ \t]+' '$1 ~ /^ *Version$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_VERSION"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_VERSION "$ZFS_META_VERSION" +_ACEOF + + + fi + + if test -n "${_dpkg_parsechangelog}"; then + _dpkg_version=$(echo "${_dpkg_parsechangelog}" \ + | $AWK '$1 == "Version:" { print $2; }' \ + | cut -d- -f1) + if test "${_dpkg_version}" != "$ZFS_META_VERSION"; then + as_fn_error $? " + *** Version $ZFS_META_VERSION in the META file is different than + *** version $_dpkg_version in the debian/changelog file. DKMS and DEB + *** packaging require that these files have the same version. + " "$LINENO" 5 + fi + fi + + ZFS_META_RELEASE=`$AWK -F ':[ \t]+' '$1 ~ /^ *Release$/ { print $2; exit }' $META`; + + if test -n "${_dpkg_parsechangelog}"; then + _dpkg_release=$(echo "${_dpkg_parsechangelog}" \ + | $AWK '$1 == "Version:" { print $2; }' \ + | cut -d- -f2-) + if test -n "${_dpkg_release}"; then + ZFS_META_RELEASE=${_dpkg_release} + _zfs_ac_meta_type="dpkg-parsechangelog" + fi + elif test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then + _match="${ZFS_META_NAME}-${ZFS_META_VERSION}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + ZFS_META_RELEASE=${_release} + _zfs_ac_meta_type="git describe" + else + _match="${ZFS_META_NAME}-${ZFS_META_VERSION}-${ZFS_META_RELEASE}" + _alias=$(git describe --match=${_match} 2>/dev/null) + _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g') + if test -n "${_release}"; then + ZFS_META_RELEASE=${_release} + _zfs_ac_meta_type="git describe" + fi + fi + fi + + if test -n "$ZFS_META_RELEASE"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_RELEASE "$ZFS_META_RELEASE" +_ACEOF + + + + RELEASE="$ZFS_META_RELEASE" + + fi + + ZFS_META_LICENSE=`$AWK -F ':[ \t]+' '$1 ~ /^ *License$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_LICENSE"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_LICENSE "$ZFS_META_LICENSE" +_ACEOF + + + fi + + if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then + ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION" + test -n "$ZFS_META_RELEASE" && + ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE" + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_ALIAS "$ZFS_META_ALIAS" +_ACEOF + + + fi + + ZFS_META_DATA=`$AWK -F ':[ \t]+' '$1 ~ /^ *Date$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_DATA"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_DATA "$ZFS_META_DATA" +_ACEOF + + + fi + + ZFS_META_AUTHOR=`$AWK -F ':[ \t]+' '$1 ~ /^ *Author$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_AUTHOR"; then + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_AUTHOR "$ZFS_META_AUTHOR" +_ACEOF + + + fi + + + ZFS_META_LT_CURRENT=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Current$/ { print $2; exit }' $META`; + ZFS_META_LT_REVISION=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Revision$/ { print $2; exit }' $META`; + ZFS_META_LT_AGE=`$AWK -F ':[ \t]+' '$1 ~ /^ *LT_Age$/ { print $2; exit }' $META`; + if test -n "$ZFS_META_LT_CURRENT" \ + -o -n "$ZFS_META_LT_REVISION" \ + -o -n "$ZFS_META_LT_AGE"; then + test -n "$ZFS_META_LT_CURRENT" || ZFS_META_LT_CURRENT="0" + test -n "$ZFS_META_LT_REVISION" || ZFS_META_LT_REVISION="0" + test -n "$ZFS_META_LT_AGE" || ZFS_META_LT_AGE="0" + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_LT_CURRENT "$ZFS_META_LT_CURRENT" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_LT_REVISION "$ZFS_META_LT_REVISION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define ZFS_META_LT_AGE "$ZFS_META_LT_AGE" +_ACEOF + + + + + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_zfs_ac_meta_type" >&5 +$as_echo "$_zfs_ac_meta_type" >&6; } + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='zfs' + VERSION='0.7.5' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +ac_config_headers="$ac_config_headers zfs_config.h" + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking zfs author" >&5 +$as_echo_n "checking zfs author... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZFS_META_AUTHOR" >&5 +$as_echo "$ZFS_META_AUTHOR" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking zfs license" >&5 +$as_echo_n "checking zfs license... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZFS_META_LICENSE" >&5 +$as_echo "$ZFS_META_LICENSE" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linux distribution" >&5 +$as_echo_n "checking linux distribution... " >&6; } + if test -f /etc/toss-release ; then + VENDOR=toss ; + elif test -f /etc/fedora-release ; then + VENDOR=fedora ; + elif test -f /etc/redhat-release ; then + VENDOR=redhat ; + elif test -f /etc/gentoo-release ; then + VENDOR=gentoo ; + elif test -f /etc/arch-release ; then + VENDOR=arch ; + elif test -f /etc/SuSE-release ; then + VENDOR=sles ; + elif test -f /etc/slackware-version ; then + VENDOR=slackware ; + elif test -f /etc/lunar.release ; then + VENDOR=lunar ; + elif test -f /etc/lsb-release ; then + VENDOR=ubuntu ; + elif test -f /etc/debian_version ; then + VENDOR=debian ; + elif test -f /etc/alpine-release ; then + VENDOR=alpine ; + else + VENDOR= ; + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VENDOR" >&5 +$as_echo "$VENDOR" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking default package type" >&5 +$as_echo_n "checking default package type... " >&6; } + case "$VENDOR" in + toss) DEFAULT_PACKAGE=rpm ;; + redhat) DEFAULT_PACKAGE=rpm ;; + fedora) DEFAULT_PACKAGE=rpm ;; + gentoo) DEFAULT_PACKAGE=tgz ;; + alpine) DEFAULT_PACKAGE=tgz ;; + arch) DEFAULT_PACKAGE=tgz ;; + sles) DEFAULT_PACKAGE=rpm ;; + slackware) DEFAULT_PACKAGE=tgz ;; + lunar) DEFAULT_PACKAGE=tgz ;; + ubuntu) DEFAULT_PACKAGE=deb ;; + debian) DEFAULT_PACKAGE=deb ;; + *) DEFAULT_PACKAGE=rpm ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEFAULT_PACKAGE" >&5 +$as_echo "$DEFAULT_PACKAGE" >&6; } + + + DEFAULT_INIT_DIR=$sysconfdir/init.d + { $as_echo "$as_me:${as_lineno-$LINENO}: checking default init directory" >&5 +$as_echo_n "checking default init directory... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEFAULT_INIT_DIR" >&5 +$as_echo "$DEFAULT_INIT_DIR" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking default init script type" >&5 +$as_echo_n "checking default init script type... " >&6; } + case "$VENDOR" in + toss) DEFAULT_INIT_SCRIPT=redhat ;; + redhat) DEFAULT_INIT_SCRIPT=redhat ;; + fedora) DEFAULT_INIT_SCRIPT=fedora ;; + gentoo) DEFAULT_INIT_SCRIPT=openrc ;; + alpine) DEFAULT_INIT_SCRIPT=openrc ;; + arch) DEFAULT_INIT_SCRIPT=lsb ;; + sles) DEFAULT_INIT_SCRIPT=lsb ;; + slackware) DEFAULT_INIT_SCRIPT=lsb ;; + lunar) DEFAULT_INIT_SCRIPT=lunar ;; + ubuntu) DEFAULT_INIT_SCRIPT=lsb ;; + debian) DEFAULT_INIT_SCRIPT=lsb ;; + *) DEFAULT_INIT_SCRIPT=lsb ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEFAULT_INIT_SCRIPT" >&5 +$as_echo "$DEFAULT_INIT_SCRIPT" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking default init config direectory" >&5 +$as_echo_n "checking default init config direectory... " >&6; } + case "$VENDOR" in + alpine) DEFAULT_INITCONF_DIR=/etc/conf.d ;; + gentoo) DEFAULT_INITCONF_DIR=/etc/conf.d ;; + toss) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + redhat) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + fedora) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + sles) DEFAULT_INITCONF_DIR=/etc/sysconfig ;; + ubuntu) DEFAULT_INITCONF_DIR=/etc/default ;; + debian) DEFAULT_INITCONF_DIR=/etc/default ;; + *) DEFAULT_INITCONF_DIR=/etc/default ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEFAULT_INITCONF_DIR" >&5 +$as_echo "$DEFAULT_INITCONF_DIR" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether initramfs-tools is available" >&5 +$as_echo_n "checking whether initramfs-tools is available... " >&6; } + if test -d /usr/share/initramfs-tools ; then + DEFINE_INITRAMFS='--define "_initramfs 1"' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + DEFINE_INITRAMFS='' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + + + + RPM=rpm + RPMBUILD=rpmbuild + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $RPM is available" >&5 +$as_echo_n "checking whether $RPM is available... " >&6; } + if tmp=$($RPM --version 2>/dev/null); then : + + RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $3 }') + HAVE_RPM=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPM ($RPM_VERSION)" >&5 +$as_echo "$HAVE_RPM ($RPM_VERSION)" >&6; } + +else + + HAVE_RPM=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPM" >&5 +$as_echo "$HAVE_RPM" >&6; } + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $RPMBUILD is available" >&5 +$as_echo_n "checking whether $RPMBUILD is available... " >&6; } + if tmp=$($RPMBUILD --version 2>/dev/null); then : + + RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $3 }') + HAVE_RPMBUILD=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPMBUILD ($RPMBUILD_VERSION)" >&5 +$as_echo "$HAVE_RPMBUILD ($RPMBUILD_VERSION)" >&6; } + +else + + HAVE_RPMBUILD=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_RPMBUILD" >&5 +$as_echo "$HAVE_RPMBUILD" >&6; } + +fi + + RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"' + RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS)' + RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"' + RPM_DEFINE_DKMS= + + SRPM_DEFINE_COMMON='--define "build_src_rpm 1"' + SRPM_DEFINE_UTIL= + SRPM_DEFINE_KMOD= + SRPM_DEFINE_DKMS= + + RPM_SPEC_DIR="rpm/generic" + +# Check whether --with-spec was given. +if test "${with_spec+set}" = set; then : + withval=$with_spec; RPM_SPEC_DIR="rpm/$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether spec files are available" >&5 +$as_echo_n "checking whether spec files are available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($RPM_SPEC_DIR/*.spec.in)" >&5 +$as_echo "yes ($RPM_SPEC_DIR/*.spec.in)" >&6; } + + + + + + + + + + + + + + + + + + + + + DPKG=dpkg + DPKGBUILD=dpkg-buildpackage + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $DPKG is available" >&5 +$as_echo_n "checking whether $DPKG is available... " >&6; } + if tmp=$($DPKG --version 2>/dev/null); then : + + DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $7 }') + HAVE_DPKG=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKG ($DPKG_VERSION)" >&5 +$as_echo "$HAVE_DPKG ($DPKG_VERSION)" >&6; } + +else + + HAVE_DPKG=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKG" >&5 +$as_echo "$HAVE_DPKG" >&6; } + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $DPKGBUILD is available" >&5 +$as_echo_n "checking whether $DPKGBUILD is available... " >&6; } + if tmp=$($DPKGBUILD --version 2>/dev/null); then : + + DPKGBUILD_VERSION=$(echo $tmp | \ + $AWK '/Debian/ { print $4 }' | cut -f-4 -d'.') + HAVE_DPKGBUILD=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKGBUILD ($DPKGBUILD_VERSION)" >&5 +$as_echo "$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)" >&6; } + +else + + HAVE_DPKGBUILD=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_DPKGBUILD" >&5 +$as_echo "$HAVE_DPKGBUILD" >&6; } + +fi + + + + + + + + + + + ALIEN=alien + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $ALIEN is available" >&5 +$as_echo_n "checking whether $ALIEN is available... " >&6; } + if tmp=$($ALIEN --version 2>/dev/null); then : + + ALIEN_VERSION=$(echo $tmp | $AWK '{ print $3 }') + HAVE_ALIEN=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_ALIEN ($ALIEN_VERSION)" >&5 +$as_echo "$HAVE_ALIEN ($ALIEN_VERSION)" >&6; } + +else + + HAVE_ALIEN=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_ALIEN" >&5 +$as_echo "$HAVE_ALIEN" >&6; } + +fi + + + + + + + + ZFS_CONFIG=all + +# Check whether --with-config was given. +if test "${with_config+set}" = set; then : + withval=$with_config; ZFS_CONFIG="$withval" +fi + + # Check whether --enable-linux-builtin was given. +if test "${enable_linux_builtin+set}" = set; then : + enableval=$enable_linux_builtin; +else + enable_linux_builtin=no +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking zfs config" >&5 +$as_echo_n "checking zfs config... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZFS_CONFIG" >&5 +$as_echo "$ZFS_CONFIG" >&6; }; + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wno-unused-but-set-variable support" >&5 +$as_echo_n "checking for -Wno-unused-but-set-variable support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wunused-but-set-variable" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + NO_UNUSED_BUT_SET_VARIABLE= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wno-bool-compare support" >&5 +$as_echo_n "checking for -Wno-bool-compare support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wbool-compare" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + NO_BOOL_COMPARE=-Wno-bool-compare + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + NO_BOOL_COMPARE= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + case "$host_cpu" in + x86_64 | x86 | i686) + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSE" >&5 +$as_echo_n "checking whether host toolchain supports SSE... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + __asm__ __volatile__("xorps %xmm0, %xmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSE2" >&5 +$as_echo_n "checking whether host toolchain supports SSE2... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + __asm__ __volatile__("pxor %xmm0, %xmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSE2 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSE3" >&5 +$as_echo_n "checking whether host toolchain supports SSE3... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + char v[16]; + __asm__ __volatile__("lddqu %0,%%xmm0" :: "m"(v[0])); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSE3 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSSE3" >&5 +$as_echo_n "checking whether host toolchain supports SSSE3... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + __asm__ __volatile__("pshufb %xmm0,%xmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSSE3 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSE4.1" >&5 +$as_echo_n "checking whether host toolchain supports SSE4.1... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + __asm__ __volatile__("pmaxsb %xmm0,%xmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSE4_1 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports SSE4.2" >&5 +$as_echo_n "checking whether host toolchain supports SSE4.2... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + __asm__ __volatile__("pcmpgtq %xmm0, %xmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + +$as_echo "#define HAVE_SSE4_2 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX" >&5 +$as_echo_n "checking whether host toolchain supports AVX... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void main() + { + char v[32]; + __asm__ __volatile__("vmovdqa %0,%%ymm0" :: "m"(v[0])); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX2" >&5 +$as_echo_n "checking whether host toolchain supports AVX2... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpshufb %ymm0,%ymm1,%ymm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX2 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512F" >&5 +$as_echo_n "checking whether host toolchain supports AVX512F... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpandd %zmm0,%zmm1,%zmm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512F 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512CD" >&5 +$as_echo_n "checking whether host toolchain supports AVX512CD... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vplzcntd %zmm0,%zmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512CD 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512DQ" >&5 +$as_echo_n "checking whether host toolchain supports AVX512DQ... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vandpd %zmm0,%zmm1,%zmm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512DQ 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512BW" >&5 +$as_echo_n "checking whether host toolchain supports AVX512BW... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpshufb %zmm0,%zmm1,%zmm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512BW 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512IFMA" >&5 +$as_echo_n "checking whether host toolchain supports AVX512IFMA... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpmadd52luq %zmm0,%zmm1,%zmm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512IFMA 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512VBMI" >&5 +$as_echo_n "checking whether host toolchain supports AVX512VBMI... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpermb %zmm0,%zmm1,%zmm2"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512VBMI 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512PF" >&5 +$as_echo_n "checking whether host toolchain supports AVX512PF... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vgatherpf0dps (%rsi,%zmm0,4){%k1}"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512PF 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512ER" >&5 +$as_echo_n "checking whether host toolchain supports AVX512ER... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vexp2pd %zmm0,%zmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512ER 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host toolchain supports AVX512VL" >&5 +$as_echo_n "checking whether host toolchain supports AVX512VL... " >&6; } + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + void main() + { + __asm__ __volatile__("vpabsq %zmm0,%zmm1"); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AVX512VL 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for target asm dir" >&5 +$as_echo_n "checking for target asm dir... " >&6; } + TARGET_ARCH=`echo ${target_cpu} | sed -e s/i.86/i386/` + + case $TARGET_ARCH in + i386|x86_64) + TARGET_ASM_DIR=asm-${TARGET_ARCH} + ;; + *) + TARGET_ASM_DIR=asm-generic + ;; + esac + + + if test $TARGET_ASM_DIR = asm-x86_64; then + TARGET_ASM_X86_64_TRUE= + TARGET_ASM_X86_64_FALSE='#' +else + TARGET_ASM_X86_64_TRUE='#' + TARGET_ASM_X86_64_FALSE= +fi + + if test $TARGET_ASM_DIR = asm-i386; then + TARGET_ASM_I386_TRUE= + TARGET_ASM_I386_FALSE='#' +else + TARGET_ASM_I386_TRUE='#' + TARGET_ASM_I386_FALSE= +fi + + if test $TARGET_ASM_DIR = asm-generic; then + TARGET_ASM_GENERIC_TRUE= + TARGET_ASM_GENERIC_FALSE='#' +else + TARGET_ASM_GENERIC_TRUE='#' + TARGET_ASM_GENERIC_FALSE= +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_ASM_DIR" >&5 +$as_echo "$TARGET_ASM_DIR" >&6; } + + + + case "$ZFS_CONFIG" in + kernel) + + +# Check whether --with-linux was given. +if test "${with_linux+set}" = set; then : + withval=$with_linux; kernelsrc="$withval" +fi + + + +# Check whether --with-linux-obj was given. +if test "${with_linux_obj+set}" = set; then : + withval=$with_linux_obj; kernelbuild="$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source directory" >&5 +$as_echo_n "checking kernel source directory... " >&6; } + if test -z "$kernelsrc"; then : + + if test -e "/lib/modules/$(uname -r)/source"; then : + + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + +elif test -e "/lib/modules/$(uname -r)/build"; then : + + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + +else + + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + +fi + + if test -n "$sourcelink" && test -e ${sourcelink}; then : + + kernelsrc=`readlink -f ${sourcelink}` + +else + + kernelsrc="Not found" + +fi + +else + + if test "$kernelsrc" = "NONE"; then : + + kernsrcver=NONE + +fi + withlinux=yes + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelsrc" >&5 +$as_echo "$kernelsrc" >&6; } + if test ! -d "$kernelsrc"; then : + + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option." "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel build directory" >&5 +$as_echo_n "checking kernel build directory... " >&6; } + if test -z "$kernelbuild"; then : + + if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then : + + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + +elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then : + + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + +elif test -d ${kernelsrc}-obj/${target_cpu}/default; then : + + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + +elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then : + + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + +else + + kernelbuild=${kernelsrc} + +fi + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelbuild" >&5 +$as_echo "$kernelbuild" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source version" >&5 +$as_echo_n "checking kernel source version... " >&6; } + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then : + + utsrelease=linux/version.h + +elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then : + + utsrelease=linux/utsrelease.h + +elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then : + + utsrelease=generated/utsrelease.h + +fi + + if test "$utsrelease"; then : + + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + if test -z "$kernsrcver"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? "*** Cannot determine kernel version." "$LINENO" 5 + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Cannot find UTS_RELEASE definition." "$LINENO" 5 + else + as_fn_error $? " + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree." "$LINENO" 5 + fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernsrcver" >&5 +$as_echo "$kernsrcver" >&6; } + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + + + + + + modpost=$LINUX/scripts/Makefile.modpost + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel file name for module symbols" >&5 +$as_echo_n "checking kernel file name for module symbols... " >&6; } + if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then : + + if grep -q Modules.symvers $modpost; then : + + LINUX_SYMBOLS=Modules.symvers + +else + + LINUX_SYMBOLS=Module.symvers + +fi + + if test ! -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then : + + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source." "$LINENO" 5 + +fi + +else + + LINUX_SYMBOLS=NONE + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINUX_SYMBOLS" >&5 +$as_echo "$LINUX_SYMBOLS" >&6; } + + + + + +# Check whether --with-spl was given. +if test "${with_spl+set}" = set; then : + withval=$with_spl; if test "$withval" = "yes"; then : + as_fn_error $? "--with-spl=PATH requires a PATH" "$LINENO" 5 +else + splsrc="$withval" +fi +fi + + + +# Check whether --with-spl-obj was given. +if test "${with_spl_obj+set}" = set; then : + withval=$with_spl_obj; splbuild="$withval" +fi + + + +# Check whether --with-spl-timeout was given. +if test "${with_spl_timeout+set}" = set; then : + withval=$with_spl_timeout; timeout="$withval" +else + timeout=0 +fi + + + splsrc0="/var/lib/dkms/spl/${VERSION}/build" + splsrc1="/usr/local/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc2="/usr/local/src/spl-${VERSION}" + splsrc3="/usr/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc4="/usr/src/spl-${VERSION}" + splsrc5="../spl/" + splsrc6="$LINUX" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl source directory" >&5 +$as_echo_n "checking spl source directory... " >&6; } + if test -z "${splsrc}"; then : + + all_spl_sources=" + ${splsrc0} + ${splsrc1} + ${splsrc2} + ${splsrc3} + ${splsrc4} + ${splsrc5} + ${splsrc6}", + if test -e "${splsrc0}/spl.release.in"; then : + + splsrc=${splsrc0} + +elif test -e "${splsrc1}/spl.release.in"; then : + + splsrc=${splsrc1} + +elif test -e "${splsrc2}/spl.release.in"; then : + + splsrc=${splsrc2} + +elif test -e "${splsrc3}/spl.release.in"; then : + + splsrc=$(readlink -f "${splsrc3}") + +elif test -e "${splsrc4}/spl.release.in" ; then : + + splsrc=${splsrc4} + +elif test -e "${splsrc5}/spl.release.in"; then : + + splsrc=$(readlink -f "${splsrc5}") + +elif test -e "${splsrc6}/spl.release.in" ; then : + + splsrc=${splsrc6} + +else + + splsrc="Not found" + +fi + +else + + all_spl_sources="$withval", + if test "$splsrc" = "NONE"; then : + + splbuild=NONE + splsrcver=NONE + +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splsrc" >&5 +$as_echo "$splsrc" >&6; } + if test ! -e "$splsrc/spl.release.in"; then : + + as_fn_error $? " + *** Please make sure the kmod spl devel package for your distribution + *** is installed then try again. If that fails you can specify the + *** location of the spl source with the '--with-spl=PATH' option. + *** The spl version must match the version of ZFS you are building, + *** ${VERSION}. Failed to find spl.release.in in the following: + $all_spl_sources" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl build directory" >&5 +$as_echo_n "checking spl build directory... " >&6; } + + all_spl_config_locs="${splsrc}/${LINUX_VERSION} + ${splsrc}" + + while true; do + if test -z "$splbuild"; then : + + if test -e "${splsrc}/${LINUX_VERSION}/spl_config.h" ; then : + + splbuild="${splsrc}/${LINUX_VERSION}" + +elif test -e "${splsrc}/spl_config.h" ; then : + + splbuild="${splsrc}" + +elif find -L "${splsrc}" -name spl_config.h 2> /dev/null | grep -wq spl_config.h ; then : + + splbuild=$(find -L "${splsrc}" -name spl_config.h | sed 's,/spl_config.h,,') + +else + + splbuild="Not found" + +fi + +fi + if test -e "$splbuild/spl_config.h" -o $timeout -le 0; then : + + break; + +else + + sleep 1 + timeout=$((timeout-1)) + +fi + done + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splbuild" >&5 +$as_echo "$splbuild" >&6; } + if ! test -e "$splbuild/spl_config.h"; then : + + as_fn_error $? " + *** Please make sure the kmod spl devel package for your + *** distribution is installed then try again. If that fails you + *** can specify the location of the spl objects with the + *** '--with-spl-obj=PATH' option. Failed to find spl_config.h in + *** any of the following: + $all_spl_config_locs" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl source version" >&5 +$as_echo_n "checking spl source version... " >&6; } + if test -r $splbuild/spl_config.h && + fgrep -q SPL_META_VERSION $splbuild/spl_config.h; then : + + + splsrcver=`(echo "#include "; + echo "splsrcver=SPL_META_VERSION-SPL_META_RELEASE") | + cpp -I $splbuild | + grep "^splsrcver=" | tr -d \" | cut -d= -f2` + +fi + + if test -z "$splsrcver"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? " + *** Cannot determine the version of the spl source. + *** Please prepare the spl source before running this script" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splsrcver" >&5 +$as_echo "$splsrcver" >&6; } + + SPL=${splsrc} + SPL_OBJ=${splbuild} + SPL_VERSION=${splsrcver} + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl file name for module symbols" >&5 +$as_echo_n "checking spl file name for module symbols... " >&6; } + SPL_SYMBOLS=NONE + + while true; do + if test -r $SPL_OBJ/Module.symvers; then : + + SPL_SYMBOLS=Module.symvers + +elif test -r $SPL_OBJ/Modules.symvers; then : + + SPL_SYMBOLS=Modules.symvers + +elif test -r $SPL_OBJ/module/Module.symvers; then : + + SPL_SYMBOLS=Module.symvers + +elif test -r $SPL_OBJ/module/Modules.symvers; then : + + SPL_SYMBOLS=Modules.symvers + +fi + + if test $SPL_SYMBOLS != NONE -o $timeout -le 0; then : + + break; + +else + + sleep 1 + timeout=$((timeout-1)) + +fi + done + + if test "$SPL_SYMBOLS" = NONE; then : + + SPL_SYMBOLS=$LINUX_SYMBOLS + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPL_SYMBOLS" >&5 +$as_echo "$SPL_SYMBOLS" >&6; } + + + + +# Check whether --with-qat was given. +if test "${with_qat+set}" = set; then : + withval=$with_qat; if test "$withval" = "yes"; then : + as_fn_error $? "--with-qat=PATH requires a PATH" "$LINENO" 5 +else + qatsrc="$withval" +fi +fi + + + +# Check whether --with-qat-obj was given. +if test "${with_qat_obj+set}" = set; then : + withval=$with_qat_obj; qatbuild="$withval" +fi + + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat source directory" >&5 +$as_echo_n "checking qat source directory... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qatsrc" >&5 +$as_echo "$qatsrc" >&6; } + QAT_SRC="${qatsrc}/quickassist" + if test ! -e "$QAT_SRC/include/cpa.h"; then : + + as_fn_error $? " + *** Please make sure the qat driver package is installed + *** and specify the location of the qat source with the + *** '--with-qat=PATH' option then try again. Failed to + *** find cpa.h in: + ${QAT_SRC}/include" "$LINENO" 5 + +fi + +fi + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat build directory" >&5 +$as_echo_n "checking qat build directory... " >&6; } + if test -z "$qatbuild"; then : + + qatbuild="${qatsrc}/build" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qatbuild" >&5 +$as_echo "$qatbuild" >&6; } + QAT_OBJ=${qatbuild} + if ! test -e "$QAT_OBJ/icp_qa_al.ko" && ! test -e "$QAT_OBJ/qat_api.ko"; then : + + as_fn_error $? " + *** Please make sure the qat driver is installed then try again. + *** Failed to find icp_qa_al.ko or qat_api.ko in: + $QAT_OBJ" "$LINENO" 5 + +fi + + + + + +$as_echo "#define HAVE_QAT 1" >>confdefs.h + + +fi + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat file for module symbols" >&5 +$as_echo_n "checking qat file for module symbols... " >&6; } + QAT_SYMBOLS=$QAT_SRC/lookaside/access_layer/src/Module.symvers + + if test -r $QAT_SYMBOLS; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QAT_SYMBOLS" >&5 +$as_echo "$QAT_SYMBOLS" >&6; } + + +else + + as_fn_error $? " + *** Please make sure the qat driver is installed then try again. + *** Failed to find Module.symvers in: + $QAT_SYMBOLS" "$LINENO" 5 + +fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether modules can be built" >&5 +$as_echo_n "checking whether modules can be built... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Unable to build an empty module." "$LINENO" 5 + else + as_fn_error $? " + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree." "$LINENO" 5 + fi + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compile-time stack validation (objtool)" >&5 +$as_echo_n "checking for compile-time stack validation (objtool)... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #undef __ASSEMBLY__ + #include + +int +main (void) +{ + + #if !defined(FRAME_BEGIN) + CTASSERT(1); + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_OBJTOOL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + if test "x$cross_compiling" != xyes; then : + + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include "$LINUX/include/linux/license.h" + +int +main () +{ + + return !license_is_gpl_compatible("$ZFS_META_LICENSE"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + + +$as_echo "#define ZFS_IS_GPL_COMPATIBLE 1" >>confdefs.h + + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel was built with 16K or larger stacks" >&5 +$as_echo_n "checking whether kernel was built with 16K or larger stacks... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + #if (THREAD_SIZE < 16384) + #error "THREAD_SIZE is less than 16K" + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LARGE_STACKS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel was built with CONFIG_DEBUG_LOCK_ALLOC" >&5 +$as_echo_n "checking whether kernel was built with CONFIG_DEBUG_LOCK_ALLOC... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + #ifndef CONFIG_DEBUG_LOCK_ALLOC + #error CONFIG_DEBUG_LOCK_ALLOC not #defined + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mutex_lock() is GPL-only" >&5 +$as_echo_n "checking whether mutex_lock() is GPL-only... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct mutex lock; + + mutex_init(&lock); + mutex_lock(&lock); + mutex_unlock(&lock); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? " + *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible + *** with the CDDL license and will prevent the module linking stage + *** from succeeding. You must rebuild your kernel without this + *** option enabled." "$LINENO" 5 + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + + +fi + rm -Rf build + + + + + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-I\$(src)" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether DECLARE_EVENT_CLASS() is available" >&5 +$as_echo_n "checking whether DECLARE_EVENT_CLASS() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + MODULE_LICENSE(ZFS_META_LICENSE); + + #define CREATE_TRACE_POINTS + #include "conftest.h" + +int +main (void) +{ + + trace_zfs_autoconf_event_one(1UL); + trace_zfs_autoconf_event_two(2UL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + + #if !defined(_CONFTEST_H) || defined(TRACE_HEADER_MULTI_READ) + #define _CONFTEST_H + + #undef TRACE_SYSTEM + #define TRACE_SYSTEM zfs + #include + + DECLARE_EVENT_CLASS(zfs_autoconf_event_class, + TP_PROTO(unsigned long i), + TP_ARGS(i), + TP_STRUCT__entry( + __field(unsigned long, i) + ), + TP_fast_assign( + __entry->i = i; + ), + TP_printk("i = %lu", __entry->i) + ); + + #define DEFINE_AUTOCONF_EVENT(name) \ + DEFINE_EVENT(zfs_autoconf_event_class, name, \ + TP_PROTO(unsigned long i), \ + TP_ARGS(i)) + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_one); + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_two); + + #endif /* _CONFTEST_H */ + + #undef TRACE_INCLUDE_PATH + #define TRACE_INCLUDE_PATH . + #define TRACE_INCLUDE_FILE conftest + #include + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DECLARE_EVENT_CLASS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current->bio_tail exists" >&5 +$as_echo_n "checking whether current->bio_tail exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + current->bio_tail = (struct bio **) NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_BIO_TAIL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current->bio_list exists" >&5 +$as_echo_n "checking whether current->bio_list exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + current->bio_list = (struct bio_list *) NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_BIO_LIST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block->s_user_ns exists" >&5 +$as_echo_n "checking whether super_block->s_user_ns exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct super_block super; + super.s_user_ns = (struct user_namespace *)NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SUPER_USER_NS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether submit_bio() wants 1 arg" >&5 +$as_echo_n "checking whether submit_bio() wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + blk_qc_t blk_qc; + struct bio *bio = NULL; + blk_qc = submit_bio(bio); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_SUBMIT_BIO 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking block device operation prototypes" >&5 +$as_echo_n "checking block device operation prototypes... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int blk_open(struct block_device *bdev, fmode_t mode) + { return 0; } + int blk_ioctl(struct block_device *bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + int blk_compat_ioctl(struct block_device * bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = blk_open, + .release = NULL, + .ioctl = blk_ioctl, + .compat_ioctl = blk_compat_ioctl, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: struct block_device" >&5 +$as_echo "struct block_device" >&6; } + +$as_echo "#define HAVE_BDEV_BLOCK_DEVICE_OPERATIONS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: struct inode" >&5 +$as_echo "struct inode" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether block_device_operations.release is void" >&5 +$as_echo_n "checking whether block_device_operations.release is void... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void blk_release(struct gendisk *g, fmode_t mode) { return; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = NULL, + .release = blk_release, + .ioctl = NULL, + .compat_ioctl = NULL, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5 +$as_echo "void" >&6; } + +$as_echo "#define HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5 +$as_echo "int" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel defines fmode_t" >&5 +$as_echo_n "checking whether kernel defines fmode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + fmode_t *ptr __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blkdev_get() wants 3 args" >&5 +$as_echo_n "checking whether blkdev_get() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + (void) blkdev_get(bdev, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARG_BLKDEV_GET 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blkdev_get_by_path() is available" >&5 +$as_echo_n "checking whether blkdev_get_by_path() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + blkdev_get_by_path(NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]blkdev_get_by_path[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(blkdev_get_by_path)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLKDEV_GET_BY_PATH 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open_bdev_exclusive() is available" >&5 +$as_echo_n "checking whether open_bdev_exclusive() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + open_bdev_exclusive(NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]open_bdev_exclusive[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(open_bdev_exclusive)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_OPEN_BDEV_EXCLUSIVE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 1 arg" >&5 +$as_echo_n "checking whether lookup_bdev() wants 1 arg... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 2 args" >&5 +$as_echo_n "checking whether lookup_bdev() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL, FMODE_READ); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 2 args" >&5 +$as_echo_n "checking whether lookup_bdev() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL, FMODE_READ); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether invalidate_bdev() wants 1 arg" >&5 +$as_echo_n "checking whether invalidate_bdev() wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + invalidate_bdev(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_INVALIDATE_BDEV 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdev_logical_block_size() is available" >&5 +$as_echo_n "checking whether bdev_logical_block_size() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + bdev_logical_block_size(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BDEV_LOGICAL_BLOCK_SIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdev_physical_block_size() is available" >&5 +$as_echo_n "checking whether bdev_physical_block_size() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + bdev_physical_block_size(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BDEV_PHYSICAL_BLOCK_SIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio has bi_iter" >&5 +$as_echo_n "checking whether bio has bi_iter... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio; + bio.bi_iter.bi_sector = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BVEC_ITER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_FAILFAST_* are defined" >&5 +$as_echo_n "checking whether BIO_RW_FAILFAST_* are defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = ((1 << BIO_RW_FAILFAST_DEV) | + (1 << BIO_RW_FAILFAST_TRANSPORT) | + (1 << BIO_RW_FAILFAST_DRIVER)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_FAILFAST_DTD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_set_dev() exists" >&5 +$as_echo_n "checking whether bio_set_dev() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + struct bio *bio = NULL; + bio_set_dev(bio, bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_SET_DEV 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_FAILFAST_MASK is defined" >&5 +$as_echo_n "checking whether REQ_FAILFAST_MASK is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = REQ_FAILFAST_MASK; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_FAILFAST_MASK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_DISCARD is defined" >&5 +$as_echo_n "checking whether REQ_OP_DISCARD is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_DISCARD; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_DISCARD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_SECURE_ERASE is defined" >&5 +$as_echo_n "checking whether REQ_OP_SECURE_ERASE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_SECURE_ERASE; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_SECURE_ERASE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_FLUSH is defined" >&5 +$as_echo_n "checking whether REQ_OP_FLUSH is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_FLUSH; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_FLUSH 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_opf is defined" >&5 +$as_echo_n "checking whether bio->bi_opf is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio __attribute__ ((unused)); + bio.bi_opf = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BI_OPF 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_end_io_t wants 1 arg" >&5 +$as_echo_n "checking whether bio_end_io_t wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void wanted_end_io(struct bio *bio) { return; } + + bio_end_io_t *end_io __attribute__ ((unused)) = wanted_end_io; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_BIO_END_IO_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_status exists" >&5 +$as_echo_n "checking whether bio->bi_status exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio __attribute__ ((unused)); + blk_status_t status __attribute__ ((unused)) = BLK_STS_OK; + + bio.bi_status = status; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BI_STATUS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_BARRIER is defined" >&5 +$as_echo_n "checking whether BIO_RW_BARRIER is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = BIO_RW_BARRIER; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_BARRIER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_DISCARD is defined" >&5 +$as_echo_n "checking whether BIO_RW_DISCARD is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = BIO_RW_DISCARD; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_DISCARD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue bdi is dynamic" >&5 +$as_echo_n "checking whether blk_queue bdi is dynamic... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue q; + struct backing_dev_info bdi; + q.backing_dev_info = &bdi; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_BDI_DYNAMIC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_flush() is available" >&5 +$as_echo_n "checking whether blk_queue_flush() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_FLUSH 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_flush() is GPL-only" >&5 +$as_echo_n "checking whether blk_queue_flush() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_FLUSH_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_write_cache() exists" >&5 +$as_echo_n "checking whether blk_queue_write_cache() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + +int +main (void) +{ + + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_WRITE_CACHE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_write_cache() is GPL-only" >&5 +$as_echo_n "checking whether blk_queue_write_cache() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_max_hw_sectors() is available" >&5 +$as_echo_n "checking whether blk_queue_max_hw_sectors() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_MAX_HW_SECTORS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_max_segments() is available" >&5 +$as_echo_n "checking whether blk_queue_max_segments() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_MAX_SEGMENTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the BIO_RW_UNPLUG enum is available" >&5 +$as_echo_n "checking whether the BIO_RW_UNPLUG enum is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + extern enum bio_rw_flags rw; + + rw = BIO_RW_UNPLUG; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct blk_plug is available" >&5 +$as_echo_n "checking whether struct blk_plug is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct blk_plug plug; + + blk_start_plug(&plug); + blk_finish_plug(&plug); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_HAVE_BLK_PLUG 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether get_disk_ro() is available" >&5 +$as_echo_n "checking whether get_disk_ro() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct gendisk *disk = NULL; + (void) get_disk_ro(disk); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_DISK_RO 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether get_gendisk() is available" >&5 +$as_echo_n "checking whether get_gendisk() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + get_gendisk(0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]get_gendisk[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/genhd.c; do + grep -q -E "EXPORT_SYMBOL.*(get_gendisk)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_GENDISK 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_set_op_attrs is available" >&5 +$as_echo_n "checking whether bio_set_op_attrs is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio *bio __attribute__ ((unused)) = NULL; + + bio_set_op_attrs(bio, 0, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_SET_OP_ATTRS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_readlink is global" >&5 +$as_echo_n "checking whether generic_readlink is global... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int i __attribute__ ((unused)); + + i = generic_readlink(NULL, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_READLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ql->discard_granularity is available" >&5 +$as_echo_n "checking whether ql->discard_granularity is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct queue_limits ql __attribute__ ((unused)); + + ql.discard_granularity = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DISCARD_GRANULARITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block uses const struct xattr_handler" >&5 +$as_echo_n "checking whether super_block uses const struct xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + const struct xattr_handler xattr_test_handler = { + .prefix = "test", + .get = NULL, + .set = NULL, + }; + + const struct xattr_handler *xattr_handlers[] = { + &xattr_test_handler, + }; + + const struct super_block sb __attribute__ ((unused)) = { + .s_xattr = xattr_handlers, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CONST_XATTR_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler has name" >&5 +$as_echo_n "checking whether xattr_handler has name... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .name = XATTR_NAME_POSIX_ACL_ACCESS, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_HANDLER_NAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants both dentry and inode" >&5 +$as_echo_n "checking whether xattr_handler->get() wants both dentry and inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_DENTRY_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->get() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->get() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(struct dentry *dentry, const char *name, + void *buffer, size_t size, int handler_flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->get() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(struct inode *ip, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants both dentry and inode" >&5 +$as_echo_n "checking whether xattr_handler->set() wants both dentry and inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, const void *buffer, + size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_DENTRY_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->set() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->set() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->set() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(struct inode *ip, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants simple" >&5 +$as_echo_n "checking whether xattr_handler->list() wants simple... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + bool list(struct dentry *dentry) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_SIMPLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->list() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(const struct xattr_handler *handler, + struct dentry *dentry, char *list, size_t list_size, + const char *name, size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->list() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(struct dentry *dentry, + char *list, size_t list_size, + const char *name, size_t name_len, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->list() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(struct inode *ip, char *lst, + size_t list_size, const char *name, + size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_owner_or_capable() exists" >&5 +$as_echo_n "checking whether inode_owner_or_capable() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) inode_owner_or_capable(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_OWNER_OR_CAPABLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether is_owner_or_cap() exists" >&5 +$as_echo_n "checking whether is_owner_or_cap() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) is_owner_or_cap(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_IS_OWNER_OR_CAP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_from_xattr() needs user_ns" >&5 +$as_echo_n "checking whether posix_acl_from_xattr() needs user_ns... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + +int +main (void) +{ + + posix_acl_from_xattr(&init_user_ns, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_FROM_XATTR_USERNS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_release() is available" >&5 +$as_echo_n "checking whether posix_acl_release() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + +int +main (void) +{ + + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_RELEASE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_release() is GPL-only" >&5 +$as_echo_n "checking whether posix_acl_release() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_RELEASE_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_cached_acl() is usable" >&5 +$as_echo_n "checking whether set_cached_acl() is usable... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct inode *ip = NULL; + struct posix_acl *acl = posix_acl_alloc(1, 0); + set_cached_acl(ip, ACL_TYPE_ACCESS, acl); + forget_cached_acl(ip, ACL_TYPE_ACCESS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_CACHED_ACL_USABLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_chmod exists" >&5 +$as_echo_n "checking whether posix_acl_chmod exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + posix_acl_chmod(NULL, 0, 0) + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_CHMOD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __posix_acl_chmod exists" >&5 +$as_echo_n "checking whether __posix_acl_chmod exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + __posix_acl_chmod(NULL, 0, 0) + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE___POSIX_ACL_CHMOD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_equiv_mode() wants umode_t" >&5 +$as_echo_n "checking whether posix_acl_equiv_mode() wants umode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + umode_t tmp; + posix_acl_equiv_mode(NULL,&tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_valid() wants user namespace" >&5 +$as_echo_n "checking whether posix_acl_valid() wants user namespace... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct user_namespace *user_ns = NULL; + const struct posix_acl *acl = NULL; + int error; + + error = posix_acl_valid(user_ns, acl); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_VALID_WITH_NS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->permission() exists" >&5 +$as_echo_n "checking whether iops->permission() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int permission_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PERMISSION 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->permission() wants nameidata" >&5 +$as_echo_n "checking whether iops->permission() wants nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int permission_fn(struct inode *inode, int mask, + struct nameidata *nd) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PERMISSION 1" >>confdefs.h + + +$as_echo "#define HAVE_PERMISSION_WITH_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->check_acl() exists" >&5 +$as_echo_n "checking whether iops->check_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int check_acl_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CHECK_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->check_acl() wants flags" >&5 +$as_echo_n "checking whether iops->check_acl() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int check_acl_fn(struct inode *inode, int mask, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CHECK_ACL 1" >>confdefs.h + + +$as_echo "#define HAVE_CHECK_ACL_WITH_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_acl() exists" >&5 +$as_echo_n "checking whether iops->get_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + struct posix_acl *get_acl_fn(struct inode *inode, int type) + { return NULL; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .get_acl = get_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->set_acl() exists" >&5 +$as_echo_n "checking whether iops->set_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set_acl_fn(struct inode *inode, struct posix_acl *acl, int type) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .set_acl = set_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->getattr() takes a path" >&5 +$as_echo_n "checking whether iops->getattr() takes a path... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_getattr( + const struct path *p, struct kstat *k, + u32 request_mask, unsigned int query_flags) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PATH_IOPS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->getattr() takes a vfsmount" >&5 +$as_echo_n "checking whether iops->getattr() takes a vfsmount... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_getattr( + struct vfsmount *mnt, struct dentry *d, + struct kstat *k) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFSMOUNT_IOPS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_set_flags() exists" >&5 +$as_echo_n "checking whether inode_set_flags() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode inode; + inode_set_flags(&inode, S_IMMUTABLE, S_IMMUTABLE); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_SET_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uncached_acl_sentinel() exists" >&5 +$as_echo_n "checking whether uncached_acl_sentinel() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + void *sentinel __attribute__ ((unused)) = uncached_acl_sentinel(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_GET_ACL_HANDLE_CACHE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->show_options() wants dentry" >&5 +$as_echo_n "checking whether sops->show_options() wants dentry... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int show_options (struct seq_file * x, struct dentry * y) { return 0; }; + static struct super_operations sops __attribute__ ((unused)) = { + .show_options = show_options, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHOW_OPTIONS_WITH_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether file_inode() is available" >&5 +$as_echo_n "checking whether file_inode() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *f = NULL; + file_inode(f); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether file_dentry() is available" >&5 +$as_echo_n "checking whether file_dentry() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *f = NULL; + file_dentry(f); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fsync() wants" >&5 +$as_echo_n "checking whether fops->fsync() wants... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, struct dentry *dentry, int x) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dentry" >&5 +$as_echo "dentry" >&6; } + +$as_echo "#define HAVE_FSYNC_WITH_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, int x) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no dentry" >&5 +$as_echo "no dentry" >&6; } + +$as_echo "#define HAVE_FSYNC_WITHOUT_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, loff_t a, loff_t b, int c) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: range" >&5 +$as_echo "range" >&6; } + +$as_echo "#define HAVE_FSYNC_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->evict_inode() exists" >&5 +$as_echo_n "checking whether sops->evict_inode() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void evict_inode (struct inode * t) { return; } + static struct super_operations sops __attribute__ ((unused)) = { + .evict_inode = evict_inode, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_EVICT_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->dirty_inode() wants flags" >&5 +$as_echo_n "checking whether sops->dirty_inode() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void dirty_inode(struct inode *a, int b) { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .dirty_inode = dirty_inode, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DIRTY_INODE_WITH_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->nr_cached_objects() exists" >&5 +$as_echo_n "checking whether sops->nr_cached_objects() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int nr_cached_objects(struct super_block *sb) { return 0; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .nr_cached_objects = nr_cached_objects, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_NR_CACHED_OBJECTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->free_cached_objects() exists" >&5 +$as_echo_n "checking whether sops->free_cached_objects() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void free_cached_objects(struct super_block *sb, int x) + { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .free_cached_objects = free_cached_objects, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FREE_CACHED_OBJECTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + long test_fallocate(struct file *file, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->fallocate() exists" >&5 +$as_echo_n "checking whether iops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + long test_fallocate(struct inode *inode, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct inode_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->aio_fsync() exists" >&5 +$as_echo_n "checking whether fops->aio_fsync() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + static const struct file_operations + fops __attribute__ ((unused)) = { + .aio_fsync = NULL, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_AIO_FSYNC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->create()/mkdir()/mknod() take umode_t" >&5 +$as_echo_n "checking whether iops->create()/mkdir()/mknod() take umode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int mkdir(struct inode *inode, struct dentry *dentry, + umode_t umode) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .mkdir = mkdir, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MKDIR_UMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->lookup() passes nameidata" >&5 +$as_echo_n "checking whether iops->lookup() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + struct dentry *inode_lookup(struct inode *inode, + struct dentry *dentry, struct nameidata *nidata) + { return NULL; } + + static const struct inode_operations iops + __attribute__ ((unused)) = { + .lookup = inode_lookup, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LOOKUP_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->create() passes nameidata" >&5 +$as_echo_n "checking whether iops->create() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + #ifdef HAVE_MKDIR_UMODE_T + int inode_create(struct inode *inode ,struct dentry *dentry, + umode_t umode, struct nameidata *nidata) { return 0; } + #else + int inode_create(struct inode *inode,struct dentry *dentry, + int umode, struct nameidata * nidata) { return 0; } + #endif + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .create = inode_create, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CREATE_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_link() passes delayed" >&5 +$as_echo_n "checking whether iops->get_link() passes delayed... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *get_link(struct dentry *de, struct inode *ip, + struct delayed_call *done) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_LINK_DELAYED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_link() passes cookie" >&5 +$as_echo_n "checking whether iops->get_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *get_link(struct dentry *de, struct + inode *ip, void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->follow_link() passes cookie" >&5 +$as_echo_n "checking whether iops->follow_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *follow_link(struct dentry *de, + void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->follow_link() passes nameidata" >&5 +$as_echo_n "checking whether iops->follow_link() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void *follow_link(struct dentry *de, struct + nameidata *nd) { return (void *)NULL; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_LINK_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(HAVE_GET_LINK_DELAYED) + #error "Expecting get_link() delayed done" + #endif + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_PUT_LINK_DELAYED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->put_link() passes cookie" >&5 +$as_echo_n "checking whether iops->put_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void put_link(struct inode *ip, void *cookie) + { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PUT_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->put_link() passes nameidata" >&5 +$as_echo_n "checking whether iops->put_link() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void put_link(struct dentry *de, struct + nameidata *nd, void *ptr) { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PUT_LINK_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether i_op->tmpfile() exists" >&5 +$as_echo_n "checking whether i_op->tmpfile() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int tmpfile(struct inode *inode, struct dentry *dentry, + umode_t mode) { return 0; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .tmpfile = tmpfile, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_TMPFILE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->truncate_range() exists" >&5 +$as_echo_n "checking whether iops->truncate_range() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void truncate_range(struct inode *inode, loff_t start, + loff_t end) { return; } + static struct inode_operations iops __attribute__ ((unused)) = { + .truncate_range = truncate_range, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_TRUNCATE_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dops->d_automount() exists" >&5 +$as_echo_n "checking whether dops->d_automount() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct vfsmount *d_automount(struct path *p) { return NULL; } + struct dentry_operations dops __attribute__ ((unused)) = { + .d_automount = d_automount, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AUTOMOUNT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether eops->encode_fh() wants inode" >&5 +$as_echo_n "checking whether eops->encode_fh() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int encode_fh(struct inode *inode, __u32 *fh, int *max_len, + struct inode *parent) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .encode_fh = encode_fh, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_ENCODE_FH_WITH_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether eops->commit_metadata() exists" >&5 +$as_echo_n "checking whether eops->commit_metadata() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int commit_metadata(struct inode *inode) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .commit_metadata = commit_metadata, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_COMMIT_METADATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether clear_inode() is available" >&5 +$as_echo_n "checking whether clear_inode() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + clear_inode(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]clear_inode[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(clear_inode)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CLEAR_INODE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setattr_prepare() is available" >&5 +$as_echo_n "checking whether setattr_prepare() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct dentry *dentry = NULL; + struct iattr *attr = NULL; + int error; + + error = setattr_prepare(dentry, attr); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]setattr_prepare[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/attr.c; do + grep -q -E "EXPORT_SYMBOL.*(setattr_prepare)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SETATTR_PREPARE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether insert_inode_locked() is available" >&5 +$as_echo_n "checking whether insert_inode_locked() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + insert_inode_locked(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]insert_inode_locked[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(insert_inode_locked)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INSERT_INODE_LOCKED 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_make_root() is available" >&5 +$as_echo_n "checking whether d_make_root() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_make_root(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_make_root[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_make_root)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_MAKE_ROOT 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_obtain_alias() is available" >&5 +$as_echo_n "checking whether d_obtain_alias() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_obtain_alias(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_obtain_alias[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_obtain_alias)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_OBTAIN_ALIAS 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_prune_aliases() is available" >&5 +$as_echo_n "checking whether d_prune_aliases() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + d_prune_aliases(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_prune_aliases[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_prune_aliases)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_PRUNE_ALIASES 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_set_d_op() is available" >&5 +$as_echo_n "checking whether d_set_d_op() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_set_d_op(NULL, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_set_d_op[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_set_d_op)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_SET_D_OP 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dops->d_revalidate() takes struct nameidata" >&5 +$as_echo_n "checking whether dops->d_revalidate() takes struct nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int revalidate (struct dentry *dentry, + struct nameidata *nidata) { return 0; } + + static const struct dentry_operations + dops __attribute__ ((unused)) = { + .d_revalidate = revalidate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_REVALIDATE_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dentry uses const struct dentry_operations" >&5 +$as_echo_n "checking whether dentry uses const struct dentry_operations... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + const struct dentry_operations test_d_op = { + .d_revalidate = NULL, + }; + +int +main (void) +{ + + struct dentry d __attribute__ ((unused)); + + d.d_op = &test_d_op; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CONST_DENTRY_OPERATIONS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether truncate_setsize() is available" >&5 +$as_echo_n "checking whether truncate_setsize() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + truncate_setsize(NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]truncate_setsize[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/truncate.c; do + grep -q -E "EXPORT_SYMBOL.*(truncate_setsize)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_TRUNCATE_SETSIZE 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether security_inode_init_security wants 6 args" >&5 +$as_echo_n "checking whether security_inode_init_security wants 6 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + char *name __attribute__ ((unused)) = NULL; + void *value __attribute__ ((unused)) = NULL; + size_t len __attribute__ ((unused)) = 0; + + security_inode_init_security(ip, dip, str, &name, &value, &len); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether security_inode_init_security wants callback" >&5 +$as_echo_n "checking whether security_inode_init_security wants callback... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + initxattrs func __attribute__ ((unused)) = NULL; + + security_inode_init_security(ip, dip, str, func, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mount_nodev() is available" >&5 +$as_echo_n "checking whether mount_nodev() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + mount_nodev(NULL, 0, NULL, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]mount_nodev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/super.c; do + grep -q -E "EXPORT_SYMBOL.*(mount_nodev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MOUNT_NODEV 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_shrink" >&5 +$as_echo_n "checking whether super_block has s_shrink... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrink(struct shrinker *s, struct shrink_control *sc) + { return 0; } + + static const struct super_block + sb __attribute__ ((unused)) = { + .s_shrink.shrink = shrink, + .s_shrink.seeks = DEFAULT_SEEKS, + .s_shrink.batch = 0, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHRINK 1" >>confdefs.h + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether shrink_control has nid" >&5 +$as_echo_n "checking whether shrink_control has nid... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct shrink_control sc __attribute__ ((unused)); + unsigned long scnidsize __attribute__ ((unused)) = + sizeof(sc.nid); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define SHRINK_CONTROL_HAS_NID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_instances list_head" >&5 +$as_echo_n "checking whether super_block has s_instances list_head... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct super_block sb __attribute__ ((unused)); + + INIT_LIST_HEAD(&sb.s_instances); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_S_INSTANCES_LIST_HEAD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_d_op" >&5 +$as_echo_n "checking whether super_block has s_d_op... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct super_block sb __attribute__ ((unused)); + sb.s_d_op = NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_S_D_OP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_setup_bdi_name() exists" >&5 +$as_echo_n "checking whether super_setup_bdi_name() exists... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct super_block sb; + +int +main (void) +{ + + char *name = "bdi"; + atomic_long_t zfs_bdi_seq; + int error __attribute__((unused)) = + super_setup_bdi_name(&sb, "%.28s-%ld", name, atomic_long_inc_return(&zfs_bdi_seq)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 2 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]super_setup_bdi_name[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/super.c; do + grep -q -E "EXPORT_SYMBOL.*(super_setup_bdi_name)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 2 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SUPER_SETUP_BDI_NAME 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_nlink() is available" >&5 +$as_echo_n "checking whether set_nlink() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode node; + unsigned int link = 0; + (void) set_nlink(&node, link); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_NLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether elevator_change() is available" >&5 +$as_echo_n "checking whether elevator_change() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + int ret; + struct request_queue *q = NULL; + char *elevator = NULL; + ret = elevator_change(q, elevator); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_ELEVATOR_CHANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sget() wants 5 args" >&5 +$as_echo_n "checking whether sget() wants 5 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file_system_type *type = NULL; + int (*test)(struct super_block *,void *) = NULL; + int (*set)(struct super_block *,void *) = NULL; + int flags = 0; + void *data = NULL; + (void) sget(type, test, set, flags, data); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_5ARG_SGET 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lseek_execute() is available" >&5 +$as_echo_n "checking whether lseek_execute() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *fp __attribute__ ((unused)) = NULL; + struct inode *ip __attribute__ ((unused)) = NULL; + loff_t offset __attribute__ ((unused)) = 0; + loff_t maxsize __attribute__ ((unused)) = 0; + + lseek_execute(fp, ip, offset, maxsize); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lseek_exclusive[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/read_write.c; do + grep -q -E "EXPORT_SYMBOL.*(lseek_exclusive)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LSEEK_EXECUTE 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->iterate_shared() is available" >&5 +$as_echo_n "checking whether fops->iterate_shared() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate_shared = iterate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_ITERATE_SHARED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->iterate() is available" >&5 +$as_echo_n "checking whether fops->iterate() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate = iterate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_ITERATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->readdir() is available" >&5 +$as_echo_n "checking whether fops->readdir() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int readdir(struct file *filp, void *entry, filldir_t func) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .readdir = readdir, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_READDIR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; file a bug report with ZFSOnLinux" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->read/write_iter() are available" >&5 +$as_echo_n "checking whether fops->read/write_iter() are available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + ssize_t test_read(struct kiocb *kiocb, struct iov_iter *to) + { return 0; } + ssize_t test_write(struct kiocb *kiocb, struct iov_iter *from) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .read_iter = test_read, + .write_iter = test_write, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_RW_ITERATE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether new_sync_read() is available" >&5 +$as_echo_n "checking whether new_sync_read() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + new_sync_read(NULL, NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_NEW_SYNC_READ 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_write_checks() takes kiocb" >&5 +$as_echo_n "checking whether generic_write_checks() takes kiocb... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + +int +main (void) +{ + + struct kiocb *iocb = NULL; + struct iov_iter *iov = NULL; + generic_write_checks(iocb, iov); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_WRITE_CHECKS_KIOCB 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kmap_atomic wants 1 args" >&5 +$as_echo_n "checking whether kmap_atomic wants 1 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct page page; + kmap_atomic(&page); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_KMAP_ATOMIC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether follow_down_one() is available" >&5 +$as_echo_n "checking whether follow_down_one() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct path *p = NULL; + follow_down_one(p); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_DOWN_ONE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns int" >&5 +$as_echo_n "checking whether make_request_fn() returns int... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int make_request(struct request_queue *q, struct bio *bio) + { + return (0); + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET int" >>confdefs.h + + +$as_echo "#define HAVE_MAKE_REQUEST_FN_RET_INT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns void" >&5 +$as_echo_n "checking whether make_request_fn() returns void... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void make_request(struct request_queue *q, struct bio *bio) + { + return; + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET void" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns blk_qc_t" >&5 +$as_echo_n "checking whether make_request_fn() returns blk_qc_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + blk_qc_t make_request(struct request_queue *q, struct bio *bio) + { + return (BLK_QC_T_NONE); + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET blk_qc_t" >>confdefs.h + + +$as_echo "#define HAVE_MAKE_REQUEST_FN_RET_QC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether 3 arg generic IO accounting symbols are available" >&5 +$as_echo_n "checking whether 3 arg generic IO accounting symbols are available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void (*generic_start_io_acct_f)(int, unsigned long, + struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(int, struct hd_struct *, + unsigned long) = &generic_end_io_acct; + +int +main (void) +{ + + generic_start_io_acct(0, 0, NULL); + generic_end_io_acct(0, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]generic_start_io_acct[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/bio.c; do + grep -q -E "EXPORT_SYMBOL.*(generic_start_io_acct)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_IO_ACCT_3ARG 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether 4 arg generic IO accounting symbols are available" >&5 +$as_echo_n "checking whether 4 arg generic IO accounting symbols are available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void (*generic_start_io_acct_f)(struct request_queue *, int, + unsigned long, struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(struct request_queue *, int, + struct hd_struct *, unsigned long) = &generic_end_io_acct; + +int +main (void) +{ + + generic_start_io_acct(NULL, 0, 0, NULL); + generic_end_io_acct(NULL, 0, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]generic_start_io_acct[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/bio.c; do + grep -q -E "EXPORT_SYMBOL.*(generic_start_io_acct)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_IO_ACCT_4ARG 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether asm/fpu/api.h exists" >&5 +$as_echo_n "checking whether asm/fpu/api.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + __kernel_fpu_begin(); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FPU_API_H 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether i_(uid|gid)_(read|write) exist" >&5 +$as_echo_n "checking whether i_(uid|gid)_(read|write) exist... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) i_uid_read(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KUID_HELPERS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether module_param_call() is hardened" >&5 +$as_echo_n "checking whether module_param_call() is hardened... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + int param_get(char *b, const struct kernel_param *kp) + { + return (0); + } + + int param_set(const char *b, const struct kernel_param *kp) + { + return (0); + } + + module_param_call(p, param_set, param_get, NULL, 0644); + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MODULE_PARAM_CALL_CONST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->rename() wants flags" >&5 +$as_echo_n "checking whether iops->rename() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int rename_fn(struct inode *sip, struct dentry *sdp, + struct inode *tip, struct dentry *tdp, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .rename = rename_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RENAME_WANTS_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_setxattr() exists" >&5 +$as_echo_n "checking whether generic_setxattr() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .setxattr = generic_setxattr + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_SETXATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current_time() exists" >&5 +$as_echo_n "checking whether current_time() exists... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode ip; + struct timespec now __attribute__ ((unused)); + + now = current_time(&ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]current_time[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(current_time)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_TIME 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use vm_node_stat based fn's" >&5 +$as_echo_n "checking whether to use vm_node_stat based fn's... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS; + long x __attribute__ ((unused)) = + atomic_long_read(&vm_node_stat[0]); + (void) global_node_page_state(0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ZFS_GLOBAL_NODE_PAGE_STATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + if test "$LINUX_OBJ" != "$LINUX"; then : + + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + +fi + + + + KERNELCPPFLAGS="$KERNELCPPFLAGS -std=gnu99" + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wno-declaration-after-statement" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_BOOL_COMPARE" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\"" + + + ;; + user) + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dkms.conf file" >&5 +$as_echo_n "checking for dkms.conf file... " >&6; } + if test -e dkms.conf; then : + + as_fn_error $? " + *** ZFS should not be manually built in the DKMS source tree. + *** Remove all ZFS packages before compiling the ZoL sources. + *** Running \"make install\" breaks ZFS packages." "$LINENO" 5 + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + +fi + + + +# Check whether --with-mounthelperdir was given. +if test "${with_mounthelperdir+set}" = set; then : + withval=$with_mounthelperdir; mounthelperdir=$withval +else + mounthelperdir=/sbin +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for udev directories" >&5 +$as_echo_n "checking for udev directories... " >&6; } + +# Check whether --with-udevdir was given. +if test "${with_udevdir+set}" = set; then : + withval=$with_udevdir; udevdir=$withval +else + udevdir=check +fi + + + if test "x$udevdir" = xcheck; then : + + path1=/lib/udev + path2=/usr/lib/udev + default=$path2 + + if test -d "$path1"; then : + udevdir="$path1" +else + + if test -d "$path2"; then : + udevdir="$path2" +else + udevdir="$default" +fi + +fi + +fi + + +# Check whether --with-udevruledir was given. +if test "${with_udevruledir+set}" = set; then : + withval=$with_udevruledir; udevruledir=$withval +else + udevruledir="${udevdir}/rules.d" +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $udevdir;$udevruledir" >&5 +$as_echo "$udevdir;$udevruledir" >&6; } + + + # Check whether --enable-systemd was given. +if test "${enable_systemd+set}" = set; then : + enableval=$enable_systemd; +else + enable_systemd=yes +fi + + + +# Check whether --with-systemdunitdir was given. +if test "${with_systemdunitdir+set}" = set; then : + withval=$with_systemdunitdir; systemdunitdir=$withval +else + systemdunitdir=/usr/lib/systemd/system +fi + + + +# Check whether --with-systemdpresetdir was given. +if test "${with_systemdpresetdir+set}" = set; then : + withval=$with_systemdpresetdir; systemdpresetdir=$withval +else + systemdpresetdir=/usr/lib/systemd/system-preset +fi + + + +# Check whether --with-systemdmodulesloaddir was given. +if test "${with_systemdmodulesloaddir+set}" = set; then : + withval=$with_systemdmodulesloaddir; systemdmoduleloaddir=$withval +else + systemdmodulesloaddir=/usr/lib/modules-load.d +fi + + + + if test "x$enable_systemd" = xyes; then : + + ZFS_INIT_SYSTEMD=systemd + ZFS_MODULE_LOAD=modules-load.d + modulesloaddir=$systemdmodulesloaddir + +fi + + + + + + + + + # Check whether --enable-sysvinit was given. +if test "${enable_sysvinit+set}" = set; then : + enableval=$enable_sysvinit; +else + enable_sysvinit=yes +fi + + + if test "x$enable_sysvinit" = xyes; then : + ZFS_INIT_SYSV=init.d +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dracut directory" >&5 +$as_echo_n "checking for dracut directory... " >&6; } + +# Check whether --with-dracutdir was given. +if test "${with_dracutdir+set}" = set; then : + withval=$with_dracutdir; dracutdir=$withval +else + dracutdir=check +fi + + + if test "x$dracutdir" = xcheck; then : + + path1=/usr/share/dracut + path2=/usr/lib/dracut + default=$path2 + + if test -d "$path1"; then : + dracutdir="$path1" +else + + if test -d "$path2"; then : + dracutdir="$path2" +else + dracutdir="$default" +fi + +fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dracutdir" >&5 +$as_echo "$dracutdir" >&6; } + + + ZLIB= + + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** zlib.h missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing compress2" >&5 +$as_echo_n "checking for library containing compress2... " >&6; } +if ${ac_cv_search_compress2+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress2 (); +int +main () +{ +return compress2 (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_compress2=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_compress2+:} false; then : + break +fi +done +if ${ac_cv_search_compress2+:} false; then : + +else + ac_cv_search_compress2=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_compress2" >&5 +$as_echo "$ac_cv_search_compress2" >&6; } +ac_res=$ac_cv_search_compress2 +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** compress2() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uncompress" >&5 +$as_echo_n "checking for library containing uncompress... " >&6; } +if ${ac_cv_search_uncompress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uncompress (); +int +main () +{ +return uncompress (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uncompress=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uncompress+:} false; then : + break +fi +done +if ${ac_cv_search_uncompress+:} false; then : + +else + ac_cv_search_uncompress=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uncompress" >&5 +$as_echo "$ac_cv_search_uncompress" >&6; } +ac_res=$ac_cv_search_uncompress +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uncompress() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crc32" >&5 +$as_echo_n "checking for library containing crc32... " >&6; } +if ${ac_cv_search_crc32+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char crc32 (); +int +main () +{ +return crc32 (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_crc32=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_crc32+:} false; then : + break +fi +done +if ${ac_cv_search_crc32+:} false; then : + +else + ac_cv_search_crc32=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crc32" >&5 +$as_echo "$ac_cv_search_crc32" >&6; } +ac_res=$ac_cv_search_crc32 +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** crc32() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + ZLIB="-lz" + + +$as_echo "#define HAVE_ZLIB 1" >>confdefs.h + + + + LIBUUID= + + ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid/uuid.h missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_generate" >&5 +$as_echo_n "checking for library containing uuid_generate... " >&6; } +if ${ac_cv_search_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' uuid; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uuid_generate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uuid_generate+:} false; then : + break +fi +done +if ${ac_cv_search_uuid_generate+:} false; then : + +else + ac_cv_search_uuid_generate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uuid_generate" >&5 +$as_echo "$ac_cv_search_uuid_generate" >&6; } +ac_res=$ac_cv_search_uuid_generate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid_generate() missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_is_null" >&5 +$as_echo_n "checking for library containing uuid_is_null... " >&6; } +if ${ac_cv_search_uuid_is_null+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_is_null (); +int +main () +{ +return uuid_is_null (); + ; + return 0; +} +_ACEOF +for ac_lib in '' uuid; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uuid_is_null=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uuid_is_null+:} false; then : + break +fi +done +if ${ac_cv_search_uuid_is_null+:} false; then : + +else + ac_cv_search_uuid_is_null=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uuid_is_null" >&5 +$as_echo "$ac_cv_search_uuid_is_null" >&6; } +ac_res=$ac_cv_search_uuid_is_null +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid_is_null() missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + LIBUUID="-luuid" + + +$as_echo "#define HAVE_LIBUUID 1" >>confdefs.h + + + + +# Check whether --with-tirpc was given. +if test "${with_tirpc+set}" = set; then : + withval=$with_tirpc; +else + with_tirpc=check +fi + + + LIBTIRPC= + LIBTIRPC_CFLAGS= + + if test "x$with_tirpc" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xdrmem_create in -ltirpc" >&5 +$as_echo_n "checking for xdrmem_create in -ltirpc... " >&6; } +if ${ac_cv_lib_tirpc_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltirpc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tirpc_xdrmem_create=yes +else + ac_cv_lib_tirpc_xdrmem_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tirpc_xdrmem_create" >&5 +$as_echo "$ac_cv_lib_tirpc_xdrmem_create" >&6; } +if test "x$ac_cv_lib_tirpc_xdrmem_create" = xyes; then : + LIBTIRPC=-ltirpc + + LIBTIRPC_CFLAGS=-I/usr/include/tirpc + + +$as_echo "#define HAVE_LIBTIRPC 1" >>confdefs.h + + +else + if test "x$with_tirpc" != xcheck; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "--with-tirpc was given, but test for tirpc failed +See \`config.log' for more details" "$LINENO" 5; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing xdrmem_create" >&5 +$as_echo_n "checking for library containing xdrmem_create... " >&6; } +if ${ac_cv_search_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +for ac_lib in '' tirpc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_xdrmem_create=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_xdrmem_create+:} false; then : + break +fi +done +if ${ac_cv_search_xdrmem_create+:} false; then : + +else + ac_cv_search_xdrmem_create=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_xdrmem_create" >&5 +$as_echo "$ac_cv_search_xdrmem_create" >&6; } +ac_res=$ac_cv_search_xdrmem_create +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xdrmem_create() requires tirpc or libc +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing xdrmem_create" >&5 +$as_echo_n "checking for library containing xdrmem_create... " >&6; } +if ${ac_cv_search_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +for ac_lib in '' tirpc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_xdrmem_create=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_xdrmem_create+:} false; then : + break +fi +done +if ${ac_cv_search_xdrmem_create+:} false; then : + +else + ac_cv_search_xdrmem_create=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_xdrmem_create" >&5 +$as_echo "$ac_cv_search_xdrmem_create" >&6; } +ac_res=$ac_cv_search_xdrmem_create +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xdrmem_create() requires libc +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + + + LIBBLKID= + + ac_fn_c_check_header_mongrel "$LINENO" "blkid/blkid.h" "ac_cv_header_blkid_blkid_h" "$ac_includes_default" +if test "x$ac_cv_header_blkid_blkid_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** blkid.h missing, libblkid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + LIBBLKID="-lblkid" + + +$as_echo "#define HAVE_LIBBLKID 1" >>confdefs.h + + + + LIBATTR= + + ac_fn_c_check_header_mongrel "$LINENO" "attr/xattr.h" "ac_cv_header_attr_xattr_h" "$ac_includes_default" +if test "x$ac_cv_header_attr_xattr_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** attr/xattr.h missing, libattr-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + LIBATTR="-lattr" + + +$as_echo "#define HAVE_LIBATTR 1" >>confdefs.h + + + + LIBUDEV= + + ac_fn_c_check_header_mongrel "$LINENO" "libudev.h" "ac_cv_header_libudev_h" "$ac_includes_default" +if test "x$ac_cv_header_libudev_h" = xyes; then : + + user_libudev=yes + LIBUDEV="-ludev" + + +$as_echo "#define HAVE_LIBUDEV 1" >>confdefs.h + + +else + + user_libudev=no + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing udev_device_get_is_initialized" >&5 +$as_echo_n "checking for library containing udev_device_get_is_initialized... " >&6; } +if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char udev_device_get_is_initialized (); +int +main () +{ +return udev_device_get_is_initialized (); + ; + return 0; +} +_ACEOF +for ac_lib in '' udev; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_udev_device_get_is_initialized=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + break +fi +done +if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + +else + ac_cv_search_udev_device_get_is_initialized=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_udev_device_get_is_initialized" >&5 +$as_echo "$ac_cv_search_udev_device_get_is_initialized" >&6; } +ac_res=$ac_cv_search_udev_device_get_is_initialized +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + +$as_echo "#define HAVE_LIBUDEV_UDEV_DEVICE_GET_IS_INITIALIZED 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wframe-larger-than= support" >&5 +$as_echo_n "checking for -Wframe-larger-than= support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wframe-larger-than=1024" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + FRAME_LARGER_THAN=-Wframe-larger-than=1024 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + FRAME_LARGER_THAN= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + if test "x$runstatedir" = x; then + runstatedir='${localstatedir}/run' + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking makedev() is declared in sys/sysmacros.h" >&5 +$as_echo_n "checking makedev() is declared in sys/sysmacros.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + int k; + k = makedev(0,0); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MAKEDEV_IN_SYSMACROS 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking makedev() is declared in sys/mkdev.h" >&5 +$as_echo_n "checking makedev() is declared in sys/mkdev.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + int k; + k = makedev(0,0); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MAKEDEV_IN_MKDEV 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wno-format-truncation support" >&5 +$as_echo_n "checking for -Wno-format-truncation support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wno-format-truncation" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + NO_FORMAT_TRUNCATION=-Wno-format-truncation + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + NO_FORMAT_TRUNCATION= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + + ZONENAME="echo global" + + + + + + for ac_func in mlockall +do : + ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall" +if test "x$ac_cv_func_mlockall" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MLOCKALL 1 +_ACEOF + +fi +done + + ;; + all) + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dkms.conf file" >&5 +$as_echo_n "checking for dkms.conf file... " >&6; } + if test -e dkms.conf; then : + + as_fn_error $? " + *** ZFS should not be manually built in the DKMS source tree. + *** Remove all ZFS packages before compiling the ZoL sources. + *** Running \"make install\" breaks ZFS packages." "$LINENO" 5 + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + +fi + + + +# Check whether --with-mounthelperdir was given. +if test "${with_mounthelperdir+set}" = set; then : + withval=$with_mounthelperdir; mounthelperdir=$withval +else + mounthelperdir=/sbin +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for udev directories" >&5 +$as_echo_n "checking for udev directories... " >&6; } + +# Check whether --with-udevdir was given. +if test "${with_udevdir+set}" = set; then : + withval=$with_udevdir; udevdir=$withval +else + udevdir=check +fi + + + if test "x$udevdir" = xcheck; then : + + path1=/lib/udev + path2=/usr/lib/udev + default=$path2 + + if test -d "$path1"; then : + udevdir="$path1" +else + + if test -d "$path2"; then : + udevdir="$path2" +else + udevdir="$default" +fi + +fi + +fi + + +# Check whether --with-udevruledir was given. +if test "${with_udevruledir+set}" = set; then : + withval=$with_udevruledir; udevruledir=$withval +else + udevruledir="${udevdir}/rules.d" +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $udevdir;$udevruledir" >&5 +$as_echo "$udevdir;$udevruledir" >&6; } + + + # Check whether --enable-systemd was given. +if test "${enable_systemd+set}" = set; then : + enableval=$enable_systemd; +else + enable_systemd=yes +fi + + + +# Check whether --with-systemdunitdir was given. +if test "${with_systemdunitdir+set}" = set; then : + withval=$with_systemdunitdir; systemdunitdir=$withval +else + systemdunitdir=/usr/lib/systemd/system +fi + + + +# Check whether --with-systemdpresetdir was given. +if test "${with_systemdpresetdir+set}" = set; then : + withval=$with_systemdpresetdir; systemdpresetdir=$withval +else + systemdpresetdir=/usr/lib/systemd/system-preset +fi + + + +# Check whether --with-systemdmodulesloaddir was given. +if test "${with_systemdmodulesloaddir+set}" = set; then : + withval=$with_systemdmodulesloaddir; systemdmoduleloaddir=$withval +else + systemdmodulesloaddir=/usr/lib/modules-load.d +fi + + + + if test "x$enable_systemd" = xyes; then : + + ZFS_INIT_SYSTEMD=systemd + ZFS_MODULE_LOAD=modules-load.d + modulesloaddir=$systemdmodulesloaddir + +fi + + + + + + + + + # Check whether --enable-sysvinit was given. +if test "${enable_sysvinit+set}" = set; then : + enableval=$enable_sysvinit; +else + enable_sysvinit=yes +fi + + + if test "x$enable_sysvinit" = xyes; then : + ZFS_INIT_SYSV=init.d +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dracut directory" >&5 +$as_echo_n "checking for dracut directory... " >&6; } + +# Check whether --with-dracutdir was given. +if test "${with_dracutdir+set}" = set; then : + withval=$with_dracutdir; dracutdir=$withval +else + dracutdir=check +fi + + + if test "x$dracutdir" = xcheck; then : + + path1=/usr/share/dracut + path2=/usr/lib/dracut + default=$path2 + + if test -d "$path1"; then : + dracutdir="$path1" +else + + if test -d "$path2"; then : + dracutdir="$path2" +else + dracutdir="$default" +fi + +fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dracutdir" >&5 +$as_echo "$dracutdir" >&6; } + + + ZLIB= + + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** zlib.h missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing compress2" >&5 +$as_echo_n "checking for library containing compress2... " >&6; } +if ${ac_cv_search_compress2+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress2 (); +int +main () +{ +return compress2 (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_compress2=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_compress2+:} false; then : + break +fi +done +if ${ac_cv_search_compress2+:} false; then : + +else + ac_cv_search_compress2=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_compress2" >&5 +$as_echo "$ac_cv_search_compress2" >&6; } +ac_res=$ac_cv_search_compress2 +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** compress2() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uncompress" >&5 +$as_echo_n "checking for library containing uncompress... " >&6; } +if ${ac_cv_search_uncompress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uncompress (); +int +main () +{ +return uncompress (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uncompress=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uncompress+:} false; then : + break +fi +done +if ${ac_cv_search_uncompress+:} false; then : + +else + ac_cv_search_uncompress=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uncompress" >&5 +$as_echo "$ac_cv_search_uncompress" >&6; } +ac_res=$ac_cv_search_uncompress +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uncompress() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crc32" >&5 +$as_echo_n "checking for library containing crc32... " >&6; } +if ${ac_cv_search_crc32+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char crc32 (); +int +main () +{ +return crc32 (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_crc32=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_crc32+:} false; then : + break +fi +done +if ${ac_cv_search_crc32+:} false; then : + +else + ac_cv_search_crc32=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crc32" >&5 +$as_echo "$ac_cv_search_crc32" >&6; } +ac_res=$ac_cv_search_crc32 +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** crc32() missing, zlib-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + ZLIB="-lz" + + +$as_echo "#define HAVE_ZLIB 1" >>confdefs.h + + + + LIBUUID= + + ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default" +if test "x$ac_cv_header_uuid_uuid_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid/uuid.h missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_generate" >&5 +$as_echo_n "checking for library containing uuid_generate... " >&6; } +if ${ac_cv_search_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' uuid; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uuid_generate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uuid_generate+:} false; then : + break +fi +done +if ${ac_cv_search_uuid_generate+:} false; then : + +else + ac_cv_search_uuid_generate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uuid_generate" >&5 +$as_echo "$ac_cv_search_uuid_generate" >&6; } +ac_res=$ac_cv_search_uuid_generate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid_generate() missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_is_null" >&5 +$as_echo_n "checking for library containing uuid_is_null... " >&6; } +if ${ac_cv_search_uuid_is_null+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_is_null (); +int +main () +{ +return uuid_is_null (); + ; + return 0; +} +_ACEOF +for ac_lib in '' uuid; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_uuid_is_null=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_uuid_is_null+:} false; then : + break +fi +done +if ${ac_cv_search_uuid_is_null+:} false; then : + +else + ac_cv_search_uuid_is_null=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_uuid_is_null" >&5 +$as_echo "$ac_cv_search_uuid_is_null" >&6; } +ac_res=$ac_cv_search_uuid_is_null +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** uuid_is_null() missing, libuuid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + LIBUUID="-luuid" + + +$as_echo "#define HAVE_LIBUUID 1" >>confdefs.h + + + + +# Check whether --with-tirpc was given. +if test "${with_tirpc+set}" = set; then : + withval=$with_tirpc; +else + with_tirpc=check +fi + + + LIBTIRPC= + LIBTIRPC_CFLAGS= + + if test "x$with_tirpc" != xno; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xdrmem_create in -ltirpc" >&5 +$as_echo_n "checking for xdrmem_create in -ltirpc... " >&6; } +if ${ac_cv_lib_tirpc_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltirpc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tirpc_xdrmem_create=yes +else + ac_cv_lib_tirpc_xdrmem_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tirpc_xdrmem_create" >&5 +$as_echo "$ac_cv_lib_tirpc_xdrmem_create" >&6; } +if test "x$ac_cv_lib_tirpc_xdrmem_create" = xyes; then : + LIBTIRPC=-ltirpc + + LIBTIRPC_CFLAGS=-I/usr/include/tirpc + + +$as_echo "#define HAVE_LIBTIRPC 1" >>confdefs.h + + +else + if test "x$with_tirpc" != xcheck; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "--with-tirpc was given, but test for tirpc failed +See \`config.log' for more details" "$LINENO" 5; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing xdrmem_create" >&5 +$as_echo_n "checking for library containing xdrmem_create... " >&6; } +if ${ac_cv_search_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +for ac_lib in '' tirpc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_xdrmem_create=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_xdrmem_create+:} false; then : + break +fi +done +if ${ac_cv_search_xdrmem_create+:} false; then : + +else + ac_cv_search_xdrmem_create=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_xdrmem_create" >&5 +$as_echo "$ac_cv_search_xdrmem_create" >&6; } +ac_res=$ac_cv_search_xdrmem_create +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xdrmem_create() requires tirpc or libc +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing xdrmem_create" >&5 +$as_echo_n "checking for library containing xdrmem_create... " >&6; } +if ${ac_cv_search_xdrmem_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char xdrmem_create (); +int +main () +{ +return xdrmem_create (); + ; + return 0; +} +_ACEOF +for ac_lib in '' tirpc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_xdrmem_create=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_xdrmem_create+:} false; then : + break +fi +done +if ${ac_cv_search_xdrmem_create+:} false; then : + +else + ac_cv_search_xdrmem_create=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_xdrmem_create" >&5 +$as_echo "$ac_cv_search_xdrmem_create" >&6; } +ac_res=$ac_cv_search_xdrmem_create +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "xdrmem_create() requires libc +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + + + LIBBLKID= + + ac_fn_c_check_header_mongrel "$LINENO" "blkid/blkid.h" "ac_cv_header_blkid_blkid_h" "$ac_includes_default" +if test "x$ac_cv_header_blkid_blkid_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** blkid.h missing, libblkid-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + LIBBLKID="-lblkid" + + +$as_echo "#define HAVE_LIBBLKID 1" >>confdefs.h + + + + LIBATTR= + + ac_fn_c_check_header_mongrel "$LINENO" "attr/xattr.h" "ac_cv_header_attr_xattr_h" "$ac_includes_default" +if test "x$ac_cv_header_attr_xattr_h" = xyes; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? " + *** attr/xattr.h missing, libattr-devel package required +See \`config.log' for more details" "$LINENO" 5; } +fi + + + + LIBATTR="-lattr" + + +$as_echo "#define HAVE_LIBATTR 1" >>confdefs.h + + + + LIBUDEV= + + ac_fn_c_check_header_mongrel "$LINENO" "libudev.h" "ac_cv_header_libudev_h" "$ac_includes_default" +if test "x$ac_cv_header_libudev_h" = xyes; then : + + user_libudev=yes + LIBUDEV="-ludev" + + +$as_echo "#define HAVE_LIBUDEV 1" >>confdefs.h + + +else + + user_libudev=no + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing udev_device_get_is_initialized" >&5 +$as_echo_n "checking for library containing udev_device_get_is_initialized... " >&6; } +if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char udev_device_get_is_initialized (); +int +main () +{ +return udev_device_get_is_initialized (); + ; + return 0; +} +_ACEOF +for ac_lib in '' udev; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_udev_device_get_is_initialized=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + break +fi +done +if ${ac_cv_search_udev_device_get_is_initialized+:} false; then : + +else + ac_cv_search_udev_device_get_is_initialized=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_udev_device_get_is_initialized" >&5 +$as_echo "$ac_cv_search_udev_device_get_is_initialized" >&6; } +ac_res=$ac_cv_search_udev_device_get_is_initialized +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + +$as_echo "#define HAVE_LIBUDEV_UDEV_DEVICE_GET_IS_INITIALIZED 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wframe-larger-than= support" >&5 +$as_echo_n "checking for -Wframe-larger-than= support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wframe-larger-than=1024" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + FRAME_LARGER_THAN=-Wframe-larger-than=1024 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + FRAME_LARGER_THAN= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + if test "x$runstatedir" = x; then + runstatedir='${localstatedir}/run' + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking makedev() is declared in sys/sysmacros.h" >&5 +$as_echo_n "checking makedev() is declared in sys/sysmacros.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + int k; + k = makedev(0,0); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MAKEDEV_IN_SYSMACROS 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking makedev() is declared in sys/mkdev.h" >&5 +$as_echo_n "checking makedev() is declared in sys/mkdev.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + int k; + k = makedev(0,0); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MAKEDEV_IN_MKDEV 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wno-format-truncation support" >&5 +$as_echo_n "checking for -Wno-format-truncation support... " >&6; } + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wno-format-truncation" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + NO_FORMAT_TRUNCATION=-Wno-format-truncation + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + NO_FORMAT_TRUNCATION= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$saved_flags" + + + + + ZONENAME="echo global" + + + + + + for ac_func in mlockall +do : + ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall" +if test "x$ac_cv_func_mlockall" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MLOCKALL 1 +_ACEOF + +fi +done + + + + + +# Check whether --with-linux was given. +if test "${with_linux+set}" = set; then : + withval=$with_linux; kernelsrc="$withval" +fi + + + +# Check whether --with-linux-obj was given. +if test "${with_linux_obj+set}" = set; then : + withval=$with_linux_obj; kernelbuild="$withval" +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source directory" >&5 +$as_echo_n "checking kernel source directory... " >&6; } + if test -z "$kernelsrc"; then : + + if test -e "/lib/modules/$(uname -r)/source"; then : + + headersdir="/lib/modules/$(uname -r)/source" + sourcelink=$(readlink -f "$headersdir") + +elif test -e "/lib/modules/$(uname -r)/build"; then : + + headersdir="/lib/modules/$(uname -r)/build" + sourcelink=$(readlink -f "$headersdir") + +else + + sourcelink=$(ls -1d /usr/src/kernels/* \ + /usr/src/linux-* \ + 2>/dev/null | grep -v obj | tail -1) + +fi + + if test -n "$sourcelink" && test -e ${sourcelink}; then : + + kernelsrc=`readlink -f ${sourcelink}` + +else + + kernelsrc="Not found" + +fi + +else + + if test "$kernelsrc" = "NONE"; then : + + kernsrcver=NONE + +fi + withlinux=yes + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelsrc" >&5 +$as_echo "$kernelsrc" >&6; } + if test ! -d "$kernelsrc"; then : + + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed and then try again. If that fails, you can specify the + *** location of the kernel source with the '--with-linux=PATH' option." "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel build directory" >&5 +$as_echo_n "checking kernel build directory... " >&6; } + if test -z "$kernelbuild"; then : + + if test x$withlinux != xyes -a -e "/lib/modules/$(uname -r)/build"; then : + + kernelbuild=`readlink -f /lib/modules/$(uname -r)/build` + +elif test -d ${kernelsrc}-obj/${target_cpu}/${target_cpu}; then : + + kernelbuild=${kernelsrc}-obj/${target_cpu}/${target_cpu} + +elif test -d ${kernelsrc}-obj/${target_cpu}/default; then : + + kernelbuild=${kernelsrc}-obj/${target_cpu}/default + +elif test -d `dirname ${kernelsrc}`/build-${target_cpu}; then : + + kernelbuild=`dirname ${kernelsrc}`/build-${target_cpu} + +else + + kernelbuild=${kernelsrc} + +fi + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernelbuild" >&5 +$as_echo "$kernelbuild" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel source version" >&5 +$as_echo_n "checking kernel source version... " >&6; } + utsrelease1=$kernelbuild/include/linux/version.h + utsrelease2=$kernelbuild/include/linux/utsrelease.h + utsrelease3=$kernelbuild/include/generated/utsrelease.h + if test -r $utsrelease1 && fgrep -q UTS_RELEASE $utsrelease1; then : + + utsrelease=linux/version.h + +elif test -r $utsrelease2 && fgrep -q UTS_RELEASE $utsrelease2; then : + + utsrelease=linux/utsrelease.h + +elif test -r $utsrelease3 && fgrep -q UTS_RELEASE $utsrelease3; then : + + utsrelease=generated/utsrelease.h + +fi + + if test "$utsrelease"; then : + + kernsrcver=`(echo "#include <$utsrelease>"; + echo "kernsrcver=UTS_RELEASE") | + cpp -I $kernelbuild/include | + grep "^kernsrcver=" | cut -d \" -f 2` + + if test -z "$kernsrcver"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? "*** Cannot determine kernel version." "$LINENO" 5 + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Cannot find UTS_RELEASE definition." "$LINENO" 5 + else + as_fn_error $? " + *** Cannot find UTS_RELEASE definition. + *** Please run 'make prepare' inside the kernel source tree." "$LINENO" 5 + fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kernsrcver" >&5 +$as_echo "$kernsrcver" >&6; } + + LINUX=${kernelsrc} + LINUX_OBJ=${kernelbuild} + LINUX_VERSION=${kernsrcver} + + + + + + + modpost=$LINUX/scripts/Makefile.modpost + { $as_echo "$as_me:${as_lineno-$LINENO}: checking kernel file name for module symbols" >&5 +$as_echo_n "checking kernel file name for module symbols... " >&6; } + if test "x$enable_linux_builtin" != xyes -a -f "$modpost"; then : + + if grep -q Modules.symvers $modpost; then : + + LINUX_SYMBOLS=Modules.symvers + +else + + LINUX_SYMBOLS=Module.symvers + +fi + + if test ! -f "$LINUX_OBJ/$LINUX_SYMBOLS"; then : + + as_fn_error $? " + *** Please make sure the kernel devel package for your distribution + *** is installed. If you are building with a custom kernel, make sure the + *** kernel is configured, built, and the '--with-linux=PATH' configure + *** option refers to the location of the kernel source." "$LINENO" 5 + +fi + +else + + LINUX_SYMBOLS=NONE + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINUX_SYMBOLS" >&5 +$as_echo "$LINUX_SYMBOLS" >&6; } + + + + + +# Check whether --with-spl was given. +if test "${with_spl+set}" = set; then : + withval=$with_spl; if test "$withval" = "yes"; then : + as_fn_error $? "--with-spl=PATH requires a PATH" "$LINENO" 5 +else + splsrc="$withval" +fi +fi + + + +# Check whether --with-spl-obj was given. +if test "${with_spl_obj+set}" = set; then : + withval=$with_spl_obj; splbuild="$withval" +fi + + + +# Check whether --with-spl-timeout was given. +if test "${with_spl_timeout+set}" = set; then : + withval=$with_spl_timeout; timeout="$withval" +else + timeout=0 +fi + + + splsrc0="/var/lib/dkms/spl/${VERSION}/build" + splsrc1="/usr/local/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc2="/usr/local/src/spl-${VERSION}" + splsrc3="/usr/src/spl-${VERSION}/${LINUX_VERSION}" + splsrc4="/usr/src/spl-${VERSION}" + splsrc5="../spl/" + splsrc6="$LINUX" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl source directory" >&5 +$as_echo_n "checking spl source directory... " >&6; } + if test -z "${splsrc}"; then : + + all_spl_sources=" + ${splsrc0} + ${splsrc1} + ${splsrc2} + ${splsrc3} + ${splsrc4} + ${splsrc5} + ${splsrc6}", + if test -e "${splsrc0}/spl.release.in"; then : + + splsrc=${splsrc0} + +elif test -e "${splsrc1}/spl.release.in"; then : + + splsrc=${splsrc1} + +elif test -e "${splsrc2}/spl.release.in"; then : + + splsrc=${splsrc2} + +elif test -e "${splsrc3}/spl.release.in"; then : + + splsrc=$(readlink -f "${splsrc3}") + +elif test -e "${splsrc4}/spl.release.in" ; then : + + splsrc=${splsrc4} + +elif test -e "${splsrc5}/spl.release.in"; then : + + splsrc=$(readlink -f "${splsrc5}") + +elif test -e "${splsrc6}/spl.release.in" ; then : + + splsrc=${splsrc6} + +else + + splsrc="Not found" + +fi + +else + + all_spl_sources="$withval", + if test "$splsrc" = "NONE"; then : + + splbuild=NONE + splsrcver=NONE + +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splsrc" >&5 +$as_echo "$splsrc" >&6; } + if test ! -e "$splsrc/spl.release.in"; then : + + as_fn_error $? " + *** Please make sure the kmod spl devel package for your distribution + *** is installed then try again. If that fails you can specify the + *** location of the spl source with the '--with-spl=PATH' option. + *** The spl version must match the version of ZFS you are building, + *** ${VERSION}. Failed to find spl.release.in in the following: + $all_spl_sources" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl build directory" >&5 +$as_echo_n "checking spl build directory... " >&6; } + + all_spl_config_locs="${splsrc}/${LINUX_VERSION} + ${splsrc}" + + while true; do + if test -z "$splbuild"; then : + + if test -e "${splsrc}/${LINUX_VERSION}/spl_config.h" ; then : + + splbuild="${splsrc}/${LINUX_VERSION}" + +elif test -e "${splsrc}/spl_config.h" ; then : + + splbuild="${splsrc}" + +elif find -L "${splsrc}" -name spl_config.h 2> /dev/null | grep -wq spl_config.h ; then : + + splbuild=$(find -L "${splsrc}" -name spl_config.h | sed 's,/spl_config.h,,') + +else + + splbuild="Not found" + +fi + +fi + if test -e "$splbuild/spl_config.h" -o $timeout -le 0; then : + + break; + +else + + sleep 1 + timeout=$((timeout-1)) + +fi + done + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splbuild" >&5 +$as_echo "$splbuild" >&6; } + if ! test -e "$splbuild/spl_config.h"; then : + + as_fn_error $? " + *** Please make sure the kmod spl devel package for your + *** distribution is installed then try again. If that fails you + *** can specify the location of the spl objects with the + *** '--with-spl-obj=PATH' option. Failed to find spl_config.h in + *** any of the following: + $all_spl_config_locs" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl source version" >&5 +$as_echo_n "checking spl source version... " >&6; } + if test -r $splbuild/spl_config.h && + fgrep -q SPL_META_VERSION $splbuild/spl_config.h; then : + + + splsrcver=`(echo "#include "; + echo "splsrcver=SPL_META_VERSION-SPL_META_RELEASE") | + cpp -I $splbuild | + grep "^splsrcver=" | tr -d \" | cut -d= -f2` + +fi + + if test -z "$splsrcver"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not found" >&5 +$as_echo "Not found" >&6; } + as_fn_error $? " + *** Cannot determine the version of the spl source. + *** Please prepare the spl source before running this script" "$LINENO" 5 + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $splsrcver" >&5 +$as_echo "$splsrcver" >&6; } + + SPL=${splsrc} + SPL_OBJ=${splbuild} + SPL_VERSION=${splsrcver} + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking spl file name for module symbols" >&5 +$as_echo_n "checking spl file name for module symbols... " >&6; } + SPL_SYMBOLS=NONE + + while true; do + if test -r $SPL_OBJ/Module.symvers; then : + + SPL_SYMBOLS=Module.symvers + +elif test -r $SPL_OBJ/Modules.symvers; then : + + SPL_SYMBOLS=Modules.symvers + +elif test -r $SPL_OBJ/module/Module.symvers; then : + + SPL_SYMBOLS=Module.symvers + +elif test -r $SPL_OBJ/module/Modules.symvers; then : + + SPL_SYMBOLS=Modules.symvers + +fi + + if test $SPL_SYMBOLS != NONE -o $timeout -le 0; then : + + break; + +else + + sleep 1 + timeout=$((timeout-1)) + +fi + done + + if test "$SPL_SYMBOLS" = NONE; then : + + SPL_SYMBOLS=$LINUX_SYMBOLS + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPL_SYMBOLS" >&5 +$as_echo "$SPL_SYMBOLS" >&6; } + + + + +# Check whether --with-qat was given. +if test "${with_qat+set}" = set; then : + withval=$with_qat; if test "$withval" = "yes"; then : + as_fn_error $? "--with-qat=PATH requires a PATH" "$LINENO" 5 +else + qatsrc="$withval" +fi +fi + + + +# Check whether --with-qat-obj was given. +if test "${with_qat_obj+set}" = set; then : + withval=$with_qat_obj; qatbuild="$withval" +fi + + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat source directory" >&5 +$as_echo_n "checking qat source directory... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qatsrc" >&5 +$as_echo "$qatsrc" >&6; } + QAT_SRC="${qatsrc}/quickassist" + if test ! -e "$QAT_SRC/include/cpa.h"; then : + + as_fn_error $? " + *** Please make sure the qat driver package is installed + *** and specify the location of the qat source with the + *** '--with-qat=PATH' option then try again. Failed to + *** find cpa.h in: + ${QAT_SRC}/include" "$LINENO" 5 + +fi + +fi + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat build directory" >&5 +$as_echo_n "checking qat build directory... " >&6; } + if test -z "$qatbuild"; then : + + qatbuild="${qatsrc}/build" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $qatbuild" >&5 +$as_echo "$qatbuild" >&6; } + QAT_OBJ=${qatbuild} + if ! test -e "$QAT_OBJ/icp_qa_al.ko" && ! test -e "$QAT_OBJ/qat_api.ko"; then : + + as_fn_error $? " + *** Please make sure the qat driver is installed then try again. + *** Failed to find icp_qa_al.ko or qat_api.ko in: + $QAT_OBJ" "$LINENO" 5 + +fi + + + + + +$as_echo "#define HAVE_QAT 1" >>confdefs.h + + +fi + + if test ! -z "${qatsrc}"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking qat file for module symbols" >&5 +$as_echo_n "checking qat file for module symbols... " >&6; } + QAT_SYMBOLS=$QAT_SRC/lookaside/access_layer/src/Module.symvers + + if test -r $QAT_SYMBOLS; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QAT_SYMBOLS" >&5 +$as_echo "$QAT_SYMBOLS" >&6; } + + +else + + as_fn_error $? " + *** Please make sure the qat driver is installed then try again. + *** Failed to find Module.symvers in: + $QAT_SYMBOLS" "$LINENO" 5 + +fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether modules can be built" >&5 +$as_echo_n "checking whether modules can be built... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + +int +main (void) +{ + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "x$enable_linux_builtin" != xyes; then + as_fn_error $? "*** Unable to build an empty module." "$LINENO" 5 + else + as_fn_error $? " + *** Unable to build an empty module. + *** Please run 'make scripts' inside the kernel source tree." "$LINENO" 5 + fi + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compile-time stack validation (objtool)" >&5 +$as_echo_n "checking for compile-time stack validation (objtool)... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #undef __ASSEMBLY__ + #include + +int +main (void) +{ + + #if !defined(FRAME_BEGIN) + CTASSERT(1); + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_OBJTOOL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + if test "x$cross_compiling" != xyes; then : + + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include "$LINUX/include/linux/license.h" + +int +main () +{ + + return !license_is_gpl_compatible("$ZFS_META_LICENSE"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + + +$as_echo "#define ZFS_IS_GPL_COMPATIBLE 1" >>confdefs.h + + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel was built with 16K or larger stacks" >&5 +$as_echo_n "checking whether kernel was built with 16K or larger stacks... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + #if (THREAD_SIZE < 16384) + #error "THREAD_SIZE is less than 16K" + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LARGE_STACKS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel was built with CONFIG_DEBUG_LOCK_ALLOC" >&5 +$as_echo_n "checking whether kernel was built with CONFIG_DEBUG_LOCK_ALLOC... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + #ifndef CONFIG_DEBUG_LOCK_ALLOC + #error CONFIG_DEBUG_LOCK_ALLOC not #defined + #endif + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mutex_lock() is GPL-only" >&5 +$as_echo_n "checking whether mutex_lock() is GPL-only... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct mutex lock; + + mutex_init(&lock); + mutex_lock(&lock); + mutex_unlock(&lock); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + as_fn_error $? " + *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible + *** with the CDDL license and will prevent the module linking stage + *** from succeeding. You must rebuild your kernel without this + *** option enabled." "$LINENO" 5 + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + + +fi + rm -Rf build + + + + + + + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="-I\$(src)" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether DECLARE_EVENT_CLASS() is available" >&5 +$as_echo_n "checking whether DECLARE_EVENT_CLASS() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + MODULE_LICENSE(ZFS_META_LICENSE); + + #define CREATE_TRACE_POINTS + #include "conftest.h" + +int +main (void) +{ + + trace_zfs_autoconf_event_one(1UL); + trace_zfs_autoconf_event_two(2UL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + + #if !defined(_CONFTEST_H) || defined(TRACE_HEADER_MULTI_READ) + #define _CONFTEST_H + + #undef TRACE_SYSTEM + #define TRACE_SYSTEM zfs + #include + + DECLARE_EVENT_CLASS(zfs_autoconf_event_class, + TP_PROTO(unsigned long i), + TP_ARGS(i), + TP_STRUCT__entry( + __field(unsigned long, i) + ), + TP_fast_assign( + __entry->i = i; + ), + TP_printk("i = %lu", __entry->i) + ); + + #define DEFINE_AUTOCONF_EVENT(name) \ + DEFINE_EVENT(zfs_autoconf_event_class, name, \ + TP_PROTO(unsigned long i), \ + TP_ARGS(i)) + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_one); + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_two); + + #endif /* _CONFTEST_H */ + + #undef TRACE_INCLUDE_PATH + #define TRACE_INCLUDE_PATH . + #define TRACE_INCLUDE_FILE conftest + #include + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DECLARE_EVENT_CLASS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current->bio_tail exists" >&5 +$as_echo_n "checking whether current->bio_tail exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + current->bio_tail = (struct bio **) NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_BIO_TAIL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current->bio_list exists" >&5 +$as_echo_n "checking whether current->bio_list exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + current->bio_list = (struct bio_list *) NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_BIO_LIST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block->s_user_ns exists" >&5 +$as_echo_n "checking whether super_block->s_user_ns exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct super_block super; + super.s_user_ns = (struct user_namespace *)NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SUPER_USER_NS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether submit_bio() wants 1 arg" >&5 +$as_echo_n "checking whether submit_bio() wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + blk_qc_t blk_qc; + struct bio *bio = NULL; + blk_qc = submit_bio(bio); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_SUBMIT_BIO 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking block device operation prototypes" >&5 +$as_echo_n "checking block device operation prototypes... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int blk_open(struct block_device *bdev, fmode_t mode) + { return 0; } + int blk_ioctl(struct block_device *bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + int blk_compat_ioctl(struct block_device * bdev, fmode_t mode, + unsigned x, unsigned long y) { return 0; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = blk_open, + .release = NULL, + .ioctl = blk_ioctl, + .compat_ioctl = blk_compat_ioctl, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: struct block_device" >&5 +$as_echo "struct block_device" >&6; } + +$as_echo "#define HAVE_BDEV_BLOCK_DEVICE_OPERATIONS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: struct inode" >&5 +$as_echo "struct inode" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether block_device_operations.release is void" >&5 +$as_echo_n "checking whether block_device_operations.release is void... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void blk_release(struct gendisk *g, fmode_t mode) { return; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = NULL, + .release = blk_release, + .ioctl = NULL, + .compat_ioctl = NULL, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5 +$as_echo "void" >&6; } + +$as_echo "#define HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5 +$as_echo "int" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kernel defines fmode_t" >&5 +$as_echo_n "checking whether kernel defines fmode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + fmode_t *ptr __attribute__ ((unused)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blkdev_get() wants 3 args" >&5 +$as_echo_n "checking whether blkdev_get() wants 3 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + (void) blkdev_get(bdev, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARG_BLKDEV_GET 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blkdev_get_by_path() is available" >&5 +$as_echo_n "checking whether blkdev_get_by_path() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + blkdev_get_by_path(NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]blkdev_get_by_path[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(blkdev_get_by_path)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLKDEV_GET_BY_PATH 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open_bdev_exclusive() is available" >&5 +$as_echo_n "checking whether open_bdev_exclusive() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + open_bdev_exclusive(NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]open_bdev_exclusive[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(open_bdev_exclusive)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_OPEN_BDEV_EXCLUSIVE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 1 arg" >&5 +$as_echo_n "checking whether lookup_bdev() wants 1 arg... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 2 args" >&5 +$as_echo_n "checking whether lookup_bdev() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL, FMODE_READ); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lookup_bdev() wants 2 args" >&5 +$as_echo_n "checking whether lookup_bdev() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + lookup_bdev(NULL, FMODE_READ); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lookup_bdev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/block_dev.c; do + grep -q -E "EXPORT_SYMBOL.*(lookup_bdev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_LOOKUP_BDEV 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether invalidate_bdev() wants 1 arg" >&5 +$as_echo_n "checking whether invalidate_bdev() wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + invalidate_bdev(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_INVALIDATE_BDEV 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdev_logical_block_size() is available" >&5 +$as_echo_n "checking whether bdev_logical_block_size() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + bdev_logical_block_size(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BDEV_LOGICAL_BLOCK_SIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdev_physical_block_size() is available" >&5 +$as_echo_n "checking whether bdev_physical_block_size() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + bdev_physical_block_size(bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BDEV_PHYSICAL_BLOCK_SIZE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio has bi_iter" >&5 +$as_echo_n "checking whether bio has bi_iter... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio; + bio.bi_iter.bi_sector = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BVEC_ITER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_FAILFAST_* are defined" >&5 +$as_echo_n "checking whether BIO_RW_FAILFAST_* are defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = ((1 << BIO_RW_FAILFAST_DEV) | + (1 << BIO_RW_FAILFAST_TRANSPORT) | + (1 << BIO_RW_FAILFAST_DRIVER)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_FAILFAST_DTD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_set_dev() exists" >&5 +$as_echo_n "checking whether bio_set_dev() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct block_device *bdev = NULL; + struct bio *bio = NULL; + bio_set_dev(bio, bdev); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_SET_DEV 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_FAILFAST_MASK is defined" >&5 +$as_echo_n "checking whether REQ_FAILFAST_MASK is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = REQ_FAILFAST_MASK; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_FAILFAST_MASK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_DISCARD is defined" >&5 +$as_echo_n "checking whether REQ_OP_DISCARD is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_DISCARD; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_DISCARD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_SECURE_ERASE is defined" >&5 +$as_echo_n "checking whether REQ_OP_SECURE_ERASE is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_SECURE_ERASE; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_SECURE_ERASE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether REQ_OP_FLUSH is defined" >&5 +$as_echo_n "checking whether REQ_OP_FLUSH is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int op __attribute__ ((unused)) = REQ_OP_FLUSH; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_REQ_OP_FLUSH 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_opf is defined" >&5 +$as_echo_n "checking whether bio->bi_opf is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio __attribute__ ((unused)); + bio.bi_opf = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BI_OPF 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_end_io_t wants 1 arg" >&5 +$as_echo_n "checking whether bio_end_io_t wants 1 arg... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void wanted_end_io(struct bio *bio) { return; } + + bio_end_io_t *end_io __attribute__ ((unused)) = wanted_end_io; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_BIO_END_IO_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio->bi_status exists" >&5 +$as_echo_n "checking whether bio->bi_status exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio bio __attribute__ ((unused)); + blk_status_t status __attribute__ ((unused)) = BLK_STS_OK; + + bio.bi_status = status; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_BI_STATUS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_BARRIER is defined" >&5 +$as_echo_n "checking whether BIO_RW_BARRIER is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = BIO_RW_BARRIER; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_BARRIER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether BIO_RW_DISCARD is defined" >&5 +$as_echo_n "checking whether BIO_RW_DISCARD is defined... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int flags __attribute__ ((unused)); + flags = BIO_RW_DISCARD; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_RW_DISCARD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue bdi is dynamic" >&5 +$as_echo_n "checking whether blk_queue bdi is dynamic... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue q; + struct backing_dev_info bdi; + q.backing_dev_info = &bdi; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_BDI_DYNAMIC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_flush() is available" >&5 +$as_echo_n "checking whether blk_queue_flush() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_FLUSH 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_flush() is GPL-only" >&5 +$as_echo_n "checking whether blk_queue_flush() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_flush(q, REQ_FLUSH); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_FLUSH_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_write_cache() exists" >&5 +$as_echo_n "checking whether blk_queue_write_cache() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + +int +main (void) +{ + + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_WRITE_CACHE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_write_cache() is GPL-only" >&5 +$as_echo_n "checking whether blk_queue_write_cache() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct request_queue *q = NULL; + blk_queue_write_cache(q, true, true); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_max_hw_sectors() is available" >&5 +$as_echo_n "checking whether blk_queue_max_hw_sectors() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_MAX_HW_SECTORS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether blk_queue_max_segments() is available" >&5 +$as_echo_n "checking whether blk_queue_max_segments() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct request_queue *q = NULL; + (void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_MAX_SEGMENTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the BIO_RW_UNPLUG enum is available" >&5 +$as_echo_n "checking whether the BIO_RW_UNPLUG enum is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + extern enum bio_rw_flags rw; + + rw = BIO_RW_UNPLUG; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct blk_plug is available" >&5 +$as_echo_n "checking whether struct blk_plug is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct blk_plug plug; + + blk_start_plug(&plug); + blk_finish_plug(&plug); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BLK_QUEUE_HAVE_BLK_PLUG 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether get_disk_ro() is available" >&5 +$as_echo_n "checking whether get_disk_ro() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct gendisk *disk = NULL; + (void) get_disk_ro(disk); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_DISK_RO 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether get_gendisk() is available" >&5 +$as_echo_n "checking whether get_gendisk() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + get_gendisk(0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]get_gendisk[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/genhd.c; do + grep -q -E "EXPORT_SYMBOL.*(get_gendisk)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_GENDISK 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bio_set_op_attrs is available" >&5 +$as_echo_n "checking whether bio_set_op_attrs is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct bio *bio __attribute__ ((unused)) = NULL; + + bio_set_op_attrs(bio, 0, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_BIO_SET_OP_ATTRS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_readlink is global" >&5 +$as_echo_n "checking whether generic_readlink is global... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + int i __attribute__ ((unused)); + + i = generic_readlink(NULL, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_READLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ql->discard_granularity is available" >&5 +$as_echo_n "checking whether ql->discard_granularity is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct queue_limits ql __attribute__ ((unused)); + + ql.discard_granularity = 0; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DISCARD_GRANULARITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block uses const struct xattr_handler" >&5 +$as_echo_n "checking whether super_block uses const struct xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + const struct xattr_handler xattr_test_handler = { + .prefix = "test", + .get = NULL, + .set = NULL, + }; + + const struct xattr_handler *xattr_handlers[] = { + &xattr_test_handler, + }; + + const struct super_block sb __attribute__ ((unused)) = { + .s_xattr = xattr_handlers, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CONST_XATTR_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler has name" >&5 +$as_echo_n "checking whether xattr_handler has name... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .name = XATTR_NAME_POSIX_ACL_ACCESS, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_HANDLER_NAME 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants both dentry and inode" >&5 +$as_echo_n "checking whether xattr_handler->get() wants both dentry and inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_DENTRY_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->get() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->get() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(struct dentry *dentry, const char *name, + void *buffer, size_t size, int handler_flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->get() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->get() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int get(struct inode *ip, const char *name, + void *buffer, size_t size) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .get = get, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_GET_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants both dentry and inode" >&5 +$as_echo_n "checking whether xattr_handler->set() wants both dentry and inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, struct inode *inode, + const char *name, const void *buffer, + size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_DENTRY_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->set() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->set() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(struct dentry *dentry, const char *name, + const void *buffer, size_t size, int flags, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->set() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->set() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set(struct inode *ip, const char *name, + const void *buffer, size_t size, int flags) + { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .set = set, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_SET_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants simple" >&5 +$as_echo_n "checking whether xattr_handler->list() wants simple... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + bool list(struct dentry *dentry) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_SIMPLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants xattr_handler" >&5 +$as_echo_n "checking whether xattr_handler->list() wants xattr_handler... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(const struct xattr_handler *handler, + struct dentry *dentry, char *list, size_t list_size, + const char *name, size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_HANDLER 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants dentry" >&5 +$as_echo_n "checking whether xattr_handler->list() wants dentry... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(struct dentry *dentry, + char *list, size_t list_size, + const char *name, size_t name_len, + int handler_flags) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether xattr_handler->list() wants inode" >&5 +$as_echo_n "checking whether xattr_handler->list() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + size_t list(struct inode *ip, char *lst, + size_t list_size, const char *name, + size_t name_len) { return 0; } + static const struct xattr_handler + xops __attribute__ ((unused)) = { + .list = list, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_XATTR_LIST_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_owner_or_capable() exists" >&5 +$as_echo_n "checking whether inode_owner_or_capable() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) inode_owner_or_capable(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_OWNER_OR_CAPABLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether is_owner_or_cap() exists" >&5 +$as_echo_n "checking whether is_owner_or_cap() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) is_owner_or_cap(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_IS_OWNER_OR_CAP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_from_xattr() needs user_ns" >&5 +$as_echo_n "checking whether posix_acl_from_xattr() needs user_ns... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + +int +main (void) +{ + + posix_acl_from_xattr(&init_user_ns, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_FROM_XATTR_USERNS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_release() is available" >&5 +$as_echo_n "checking whether posix_acl_release() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + +int +main (void) +{ + + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_RELEASE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_release() is GPL-only" >&5 +$as_echo_n "checking whether posix_acl_release() is GPL-only... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct posix_acl* tmp = posix_acl_alloc(1, 0); + posix_acl_release(tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_RELEASE_GPL_ONLY 1" >>confdefs.h + + + + +fi + rm -Rf build + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_cached_acl() is usable" >&5 +$as_echo_n "checking whether set_cached_acl() is usable... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + +int +main (void) +{ + + struct inode *ip = NULL; + struct posix_acl *acl = posix_acl_alloc(1, 0); + set_cached_acl(ip, ACL_TYPE_ACCESS, acl); + forget_cached_acl(ip, ACL_TYPE_ACCESS); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_CACHED_ACL_USABLE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_chmod exists" >&5 +$as_echo_n "checking whether posix_acl_chmod exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + posix_acl_chmod(NULL, 0, 0) + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_CHMOD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __posix_acl_chmod exists" >&5 +$as_echo_n "checking whether __posix_acl_chmod exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + __posix_acl_chmod(NULL, 0, 0) + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE___POSIX_ACL_CHMOD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_equiv_mode() wants umode_t" >&5 +$as_echo_n "checking whether posix_acl_equiv_mode() wants umode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + umode_t tmp; + posix_acl_equiv_mode(NULL,&tmp); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_acl_valid() wants user namespace" >&5 +$as_echo_n "checking whether posix_acl_valid() wants user namespace... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + struct user_namespace *user_ns = NULL; + const struct posix_acl *acl = NULL; + int error; + + error = posix_acl_valid(user_ns, acl); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_POSIX_ACL_VALID_WITH_NS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->permission() exists" >&5 +$as_echo_n "checking whether iops->permission() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int permission_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PERMISSION 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->permission() wants nameidata" >&5 +$as_echo_n "checking whether iops->permission() wants nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int permission_fn(struct inode *inode, int mask, + struct nameidata *nd) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .permission = permission_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PERMISSION 1" >>confdefs.h + + +$as_echo "#define HAVE_PERMISSION_WITH_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->check_acl() exists" >&5 +$as_echo_n "checking whether iops->check_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int check_acl_fn(struct inode *inode, int mask) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CHECK_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->check_acl() wants flags" >&5 +$as_echo_n "checking whether iops->check_acl() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int check_acl_fn(struct inode *inode, int mask, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .check_acl = check_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CHECK_ACL 1" >>confdefs.h + + +$as_echo "#define HAVE_CHECK_ACL_WITH_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_acl() exists" >&5 +$as_echo_n "checking whether iops->get_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + struct posix_acl *get_acl_fn(struct inode *inode, int type) + { return NULL; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .get_acl = get_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->set_acl() exists" >&5 +$as_echo_n "checking whether iops->set_acl() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int set_acl_fn(struct inode *inode, struct posix_acl *acl, int type) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .set_acl = set_acl_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_ACL 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->getattr() takes a path" >&5 +$as_echo_n "checking whether iops->getattr() takes a path... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_getattr( + const struct path *p, struct kstat *k, + u32 request_mask, unsigned int query_flags) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PATH_IOPS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->getattr() takes a vfsmount" >&5 +$as_echo_n "checking whether iops->getattr() takes a vfsmount... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_getattr( + struct vfsmount *mnt, struct dentry *d, + struct kstat *k) + { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .getattr = test_getattr, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFSMOUNT_IOPS_GETATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether inode_set_flags() exists" >&5 +$as_echo_n "checking whether inode_set_flags() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode inode; + inode_set_flags(&inode, S_IMMUTABLE, S_IMMUTABLE); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_SET_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uncached_acl_sentinel() exists" >&5 +$as_echo_n "checking whether uncached_acl_sentinel() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + void *sentinel __attribute__ ((unused)) = uncached_acl_sentinel(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KERNEL_GET_ACL_HANDLE_CACHE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->show_options() wants dentry" >&5 +$as_echo_n "checking whether sops->show_options() wants dentry... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int show_options (struct seq_file * x, struct dentry * y) { return 0; }; + static struct super_operations sops __attribute__ ((unused)) = { + .show_options = show_options, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHOW_OPTIONS_WITH_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether file_inode() is available" >&5 +$as_echo_n "checking whether file_inode() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *f = NULL; + file_inode(f); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether file_dentry() is available" >&5 +$as_echo_n "checking whether file_dentry() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *f = NULL; + file_dentry(f); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fsync() wants" >&5 +$as_echo_n "checking whether fops->fsync() wants... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, struct dentry *dentry, int x) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dentry" >&5 +$as_echo "dentry" >&6; } + +$as_echo "#define HAVE_FSYNC_WITH_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, int x) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no dentry" >&5 +$as_echo "no dentry" >&6; } + +$as_echo "#define HAVE_FSYNC_WITHOUT_DENTRY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int test_fsync(struct file *f, loff_t a, loff_t b, int c) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fsync = test_fsync, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: range" >&5 +$as_echo "range" >&6; } + +$as_echo "#define HAVE_FSYNC_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->evict_inode() exists" >&5 +$as_echo_n "checking whether sops->evict_inode() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void evict_inode (struct inode * t) { return; } + static struct super_operations sops __attribute__ ((unused)) = { + .evict_inode = evict_inode, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_EVICT_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->dirty_inode() wants flags" >&5 +$as_echo_n "checking whether sops->dirty_inode() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void dirty_inode(struct inode *a, int b) { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .dirty_inode = dirty_inode, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_DIRTY_INODE_WITH_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->nr_cached_objects() exists" >&5 +$as_echo_n "checking whether sops->nr_cached_objects() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int nr_cached_objects(struct super_block *sb) { return 0; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .nr_cached_objects = nr_cached_objects, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_NR_CACHED_OBJECTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sops->free_cached_objects() exists" >&5 +$as_echo_n "checking whether sops->free_cached_objects() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void free_cached_objects(struct super_block *sb, int x) + { return; } + + static const struct super_operations + sops __attribute__ ((unused)) = { + .free_cached_objects = free_cached_objects, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FREE_CACHED_OBJECTS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->fallocate() exists" >&5 +$as_echo_n "checking whether fops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + long test_fallocate(struct file *file, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->fallocate() exists" >&5 +$as_echo_n "checking whether iops->fallocate() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + long test_fallocate(struct inode *inode, int mode, + loff_t offset, loff_t len) { return 0; } + + static const struct inode_operations + fops __attribute__ ((unused)) = { + .fallocate = test_fallocate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_FALLOCATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->aio_fsync() exists" >&5 +$as_echo_n "checking whether fops->aio_fsync() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + static const struct file_operations + fops __attribute__ ((unused)) = { + .aio_fsync = NULL, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FILE_AIO_FSYNC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->create()/mkdir()/mknod() take umode_t" >&5 +$as_echo_n "checking whether iops->create()/mkdir()/mknod() take umode_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int mkdir(struct inode *inode, struct dentry *dentry, + umode_t umode) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .mkdir = mkdir, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MKDIR_UMODE_T 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->lookup() passes nameidata" >&5 +$as_echo_n "checking whether iops->lookup() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + struct dentry *inode_lookup(struct inode *inode, + struct dentry *dentry, struct nameidata *nidata) + { return NULL; } + + static const struct inode_operations iops + __attribute__ ((unused)) = { + .lookup = inode_lookup, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LOOKUP_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->create() passes nameidata" >&5 +$as_echo_n "checking whether iops->create() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + #ifdef HAVE_MKDIR_UMODE_T + int inode_create(struct inode *inode ,struct dentry *dentry, + umode_t umode, struct nameidata *nidata) { return 0; } + #else + int inode_create(struct inode *inode,struct dentry *dentry, + int umode, struct nameidata * nidata) { return 0; } + #endif + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .create = inode_create, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CREATE_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_link() passes delayed" >&5 +$as_echo_n "checking whether iops->get_link() passes delayed... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *get_link(struct dentry *de, struct inode *ip, + struct delayed_call *done) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_LINK_DELAYED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->get_link() passes cookie" >&5 +$as_echo_n "checking whether iops->get_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *get_link(struct dentry *de, struct + inode *ip, void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .get_link = get_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GET_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->follow_link() passes cookie" >&5 +$as_echo_n "checking whether iops->follow_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + const char *follow_link(struct dentry *de, + void **cookie) { return "symlink"; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->follow_link() passes nameidata" >&5 +$as_echo_n "checking whether iops->follow_link() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void *follow_link(struct dentry *de, struct + nameidata *nd) { return (void *)NULL; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .follow_link = follow_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_LINK_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #if !defined(HAVE_GET_LINK_DELAYED) + #error "Expecting get_link() delayed done" + #endif + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + +$as_echo "#define HAVE_PUT_LINK_DELAYED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->put_link() passes cookie" >&5 +$as_echo_n "checking whether iops->put_link() passes cookie... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void put_link(struct inode *ip, void *cookie) + { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PUT_LINK_COOKIE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->put_link() passes nameidata" >&5 +$as_echo_n "checking whether iops->put_link() passes nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void put_link(struct dentry *de, struct + nameidata *nd, void *ptr) { return; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .put_link = put_link, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_PUT_LINK_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; please file a bug report" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether i_op->tmpfile() exists" >&5 +$as_echo_n "checking whether i_op->tmpfile() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int tmpfile(struct inode *inode, struct dentry *dentry, + umode_t mode) { return 0; } + static struct inode_operations + iops __attribute__ ((unused)) = { + .tmpfile = tmpfile, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_TMPFILE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->truncate_range() exists" >&5 +$as_echo_n "checking whether iops->truncate_range() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + void truncate_range(struct inode *inode, loff_t start, + loff_t end) { return; } + static struct inode_operations iops __attribute__ ((unused)) = { + .truncate_range = truncate_range, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INODE_TRUNCATE_RANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dops->d_automount() exists" >&5 +$as_echo_n "checking whether dops->d_automount() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct vfsmount *d_automount(struct path *p) { return NULL; } + struct dentry_operations dops __attribute__ ((unused)) = { + .d_automount = d_automount, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_AUTOMOUNT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether eops->encode_fh() wants inode" >&5 +$as_echo_n "checking whether eops->encode_fh() wants inode... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int encode_fh(struct inode *inode, __u32 *fh, int *max_len, + struct inode *parent) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .encode_fh = encode_fh, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_ENCODE_FH_WITH_INODE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether eops->commit_metadata() exists" >&5 +$as_echo_n "checking whether eops->commit_metadata() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int commit_metadata(struct inode *inode) { return 0; } + static struct export_operations eops __attribute__ ((unused))={ + .commit_metadata = commit_metadata, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_COMMIT_METADATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether clear_inode() is available" >&5 +$as_echo_n "checking whether clear_inode() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + clear_inode(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]clear_inode[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(clear_inode)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CLEAR_INODE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setattr_prepare() is available" >&5 +$as_echo_n "checking whether setattr_prepare() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct dentry *dentry = NULL; + struct iattr *attr = NULL; + int error; + + error = setattr_prepare(dentry, attr); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]setattr_prepare[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/attr.c; do + grep -q -E "EXPORT_SYMBOL.*(setattr_prepare)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SETATTR_PREPARE 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether insert_inode_locked() is available" >&5 +$as_echo_n "checking whether insert_inode_locked() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + insert_inode_locked(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]insert_inode_locked[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(insert_inode_locked)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_INSERT_INODE_LOCKED 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_make_root() is available" >&5 +$as_echo_n "checking whether d_make_root() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_make_root(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_make_root[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_make_root)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_MAKE_ROOT 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_obtain_alias() is available" >&5 +$as_echo_n "checking whether d_obtain_alias() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_obtain_alias(NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_obtain_alias[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_obtain_alias)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_OBTAIN_ALIAS 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_prune_aliases() is available" >&5 +$as_echo_n "checking whether d_prune_aliases() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + d_prune_aliases(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_prune_aliases[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_prune_aliases)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_PRUNE_ALIASES 1" >>confdefs.h + + + fi + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether d_set_d_op() is available" >&5 +$as_echo_n "checking whether d_set_d_op() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + d_set_d_op(NULL, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]d_set_d_op[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/dcache.c; do + grep -q -E "EXPORT_SYMBOL.*(d_set_d_op)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_SET_D_OP 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dops->d_revalidate() takes struct nameidata" >&5 +$as_echo_n "checking whether dops->d_revalidate() takes struct nameidata... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int revalidate (struct dentry *dentry, + struct nameidata *nidata) { return 0; } + + static const struct dentry_operations + dops __attribute__ ((unused)) = { + .d_revalidate = revalidate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_D_REVALIDATE_NAMEIDATA 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dentry uses const struct dentry_operations" >&5 +$as_echo_n "checking whether dentry uses const struct dentry_operations... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + const struct dentry_operations test_d_op = { + .d_revalidate = NULL, + }; + +int +main (void) +{ + + struct dentry d __attribute__ ((unused)); + + d.d_op = &test_d_op; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CONST_DENTRY_OPERATIONS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether truncate_setsize() is available" >&5 +$as_echo_n "checking whether truncate_setsize() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + truncate_setsize(NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]truncate_setsize[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/truncate.c; do + grep -q -E "EXPORT_SYMBOL.*(truncate_setsize)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_TRUNCATE_SETSIZE 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether security_inode_init_security wants 6 args" >&5 +$as_echo_n "checking whether security_inode_init_security wants 6 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + char *name __attribute__ ((unused)) = NULL; + void *value __attribute__ ((unused)) = NULL; + size_t len __attribute__ ((unused)) = 0; + + security_inode_init_security(ip, dip, str, &name, &value, &len); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether security_inode_init_security wants callback" >&5 +$as_echo_n "checking whether security_inode_init_security wants callback... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip __attribute__ ((unused)) = NULL; + struct inode *dip __attribute__ ((unused)) = NULL; + const struct qstr *str __attribute__ ((unused)) = NULL; + initxattrs func __attribute__ ((unused)) = NULL; + + security_inode_init_security(ip, dip, str, func, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mount_nodev() is available" >&5 +$as_echo_n "checking whether mount_nodev() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + mount_nodev(NULL, 0, NULL, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]mount_nodev[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/super.c; do + grep -q -E "EXPORT_SYMBOL.*(mount_nodev)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_MOUNT_NODEV 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_shrink" >&5 +$as_echo_n "checking whether super_block has s_shrink... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int shrink(struct shrinker *s, struct shrink_control *sc) + { return 0; } + + static const struct super_block + sb __attribute__ ((unused)) = { + .s_shrink.shrink = shrink, + .s_shrink.seeks = DEFAULT_SEEKS, + .s_shrink.batch = 0, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SHRINK 1" >>confdefs.h + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether shrink_control has nid" >&5 +$as_echo_n "checking whether shrink_control has nid... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct shrink_control sc __attribute__ ((unused)); + unsigned long scnidsize __attribute__ ((unused)) = + sizeof(sc.nid); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define SHRINK_CONTROL_HAS_NID 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_instances list_head" >&5 +$as_echo_n "checking whether super_block has s_instances list_head... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct super_block sb __attribute__ ((unused)); + + INIT_LIST_HEAD(&sb.s_instances); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_S_INSTANCES_LIST_HEAD 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_block has s_d_op" >&5 +$as_echo_n "checking whether super_block has s_d_op... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct super_block sb __attribute__ ((unused)); + sb.s_d_op = NULL; + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_S_D_OP 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether super_setup_bdi_name() exists" >&5 +$as_echo_n "checking whether super_setup_bdi_name() exists... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct super_block sb; + +int +main (void) +{ + + char *name = "bdi"; + atomic_long_t zfs_bdi_seq; + int error __attribute__((unused)) = + super_setup_bdi_name(&sb, "%.28s-%ld", name, atomic_long_inc_return(&zfs_bdi_seq)); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 2 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]super_setup_bdi_name[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/super.c; do + grep -q -E "EXPORT_SYMBOL.*(super_setup_bdi_name)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 2 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 2 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether bdi_setup_and_register() wants 3 args" >&5 +$as_echo_n "checking whether bdi_setup_and_register() wants 3 args... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + struct backing_dev_info bdi; + +int +main (void) +{ + + char *name = "bdi"; + unsigned int cap = BDI_CAP_MAP_COPY; + int error __attribute__((unused)) = + bdi_setup_and_register(&bdi, name, cap); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in mm/backing-dev.c; do + grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_3ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_2ARGS_BDI_SETUP_AND_REGISTER 1" >>confdefs.h + + + fi + fi + + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SUPER_SETUP_BDI_NAME 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether set_nlink() is available" >&5 +$as_echo_n "checking whether set_nlink() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode node; + unsigned int link = 0; + (void) set_nlink(&node, link); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_SET_NLINK 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether elevator_change() is available" >&5 +$as_echo_n "checking whether elevator_change() is available... " >&6; } + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + int ret; + struct request_queue *q = NULL; + char *elevator = NULL; + ret = elevator_change(q, elevator); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_ELEVATOR_CHANGE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + EXTRA_KCFLAGS="$tmp_flags" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sget() wants 5 args" >&5 +$as_echo_n "checking whether sget() wants 5 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file_system_type *type = NULL; + int (*test)(struct super_block *,void *) = NULL; + int (*set)(struct super_block *,void *) = NULL; + int flags = 0; + void *data = NULL; + (void) sget(type, test, set, flags, data); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_5ARG_SGET 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lseek_execute() is available" >&5 +$as_echo_n "checking whether lseek_execute() is available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct file *fp __attribute__ ((unused)) = NULL; + struct inode *ip __attribute__ ((unused)) = NULL; + loff_t offset __attribute__ ((unused)) = 0; + loff_t maxsize __attribute__ ((unused)) = 0; + + lseek_execute(fp, ip, offset, maxsize); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]lseek_exclusive[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/read_write.c; do + grep -q -E "EXPORT_SYMBOL.*(lseek_exclusive)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LSEEK_EXECUTE 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->iterate_shared() is available" >&5 +$as_echo_n "checking whether fops->iterate_shared() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate_shared = iterate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_ITERATE_SHARED 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->iterate() is available" >&5 +$as_echo_n "checking whether fops->iterate() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int iterate(struct file *filp, struct dir_context * context) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .iterate = iterate, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_ITERATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->readdir() is available" >&5 +$as_echo_n "checking whether fops->readdir() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int readdir(struct file *filp, void *entry, filldir_t func) + { return 0; } + + static const struct file_operations fops + __attribute__ ((unused)) = { + .readdir = readdir, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_READDIR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no; file a bug report with ZFSOnLinux" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fops->read/write_iter() are available" >&5 +$as_echo_n "checking whether fops->read/write_iter() are available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + ssize_t test_read(struct kiocb *kiocb, struct iov_iter *to) + { return 0; } + ssize_t test_write(struct kiocb *kiocb, struct iov_iter *from) + { return 0; } + + static const struct file_operations + fops __attribute__ ((unused)) = { + .read_iter = test_read, + .write_iter = test_write, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_VFS_RW_ITERATE 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether new_sync_read() is available" >&5 +$as_echo_n "checking whether new_sync_read() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + new_sync_read(NULL, NULL, 0, NULL); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_NEW_SYNC_READ 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_write_checks() takes kiocb" >&5 +$as_echo_n "checking whether generic_write_checks() takes kiocb... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + +int +main (void) +{ + + struct kiocb *iocb = NULL; + struct iov_iter *iov = NULL; + generic_write_checks(iocb, iov); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_WRITE_CHECKS_KIOCB 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether kmap_atomic wants 1 args" >&5 +$as_echo_n "checking whether kmap_atomic wants 1 args... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct page page; + kmap_atomic(&page); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_1ARG_KMAP_ATOMIC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether follow_down_one() is available" >&5 +$as_echo_n "checking whether follow_down_one() is available... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct path *p = NULL; + follow_down_one(p); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FOLLOW_DOWN_ONE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns int" >&5 +$as_echo_n "checking whether make_request_fn() returns int... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + int make_request(struct request_queue *q, struct bio *bio) + { + return (0); + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET int" >>confdefs.h + + +$as_echo "#define HAVE_MAKE_REQUEST_FN_RET_INT 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns void" >&5 +$as_echo_n "checking whether make_request_fn() returns void... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void make_request(struct request_queue *q, struct bio *bio) + { + return; + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET void" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make_request_fn() returns blk_qc_t" >&5 +$as_echo_n "checking whether make_request_fn() returns blk_qc_t... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + blk_qc_t make_request(struct request_queue *q, struct bio *bio) + { + return (BLK_QC_T_NONE); + } + +int +main (void) +{ + + blk_queue_make_request(NULL, &make_request); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MAKE_REQUEST_FN_RET blk_qc_t" >>confdefs.h + + +$as_echo "#define HAVE_MAKE_REQUEST_FN_RET_QC 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + as_fn_error $? "no - Please file a bug report at + https://github.com/zfsonlinux/zfs/issues/new" "$LINENO" 5 + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether 3 arg generic IO accounting symbols are available" >&5 +$as_echo_n "checking whether 3 arg generic IO accounting symbols are available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void (*generic_start_io_acct_f)(int, unsigned long, + struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(int, struct hd_struct *, + unsigned long) = &generic_end_io_acct; + +int +main (void) +{ + + generic_start_io_acct(0, 0, NULL); + generic_end_io_acct(0, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]generic_start_io_acct[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/bio.c; do + grep -q -E "EXPORT_SYMBOL.*(generic_start_io_acct)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_IO_ACCT_3ARG 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether 4 arg generic IO accounting symbols are available" >&5 +$as_echo_n "checking whether 4 arg generic IO accounting symbols are available... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + + void (*generic_start_io_acct_f)(struct request_queue *, int, + unsigned long, struct hd_struct *) = &generic_start_io_acct; + void (*generic_end_io_acct_f)(struct request_queue *, int, + struct hd_struct *, unsigned long) = &generic_end_io_acct; + +int +main (void) +{ + + generic_start_io_acct(NULL, 0, 0, NULL); + generic_end_io_acct(NULL, 0, NULL, 0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]generic_start_io_acct[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in block/bio.c; do + grep -q -E "EXPORT_SYMBOL.*(generic_start_io_acct)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_IO_ACCT_4ARG 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether asm/fpu/api.h exists" >&5 +$as_echo_n "checking whether asm/fpu/api.h exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + __kernel_fpu_begin(); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_FPU_API_H 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether i_(uid|gid)_(read|write) exist" >&5 +$as_echo_n "checking whether i_(uid|gid)_(read|write) exist... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode *ip = NULL; + (void) i_uid_read(ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_KUID_HELPERS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether module_param_call() is hardened" >&5 +$as_echo_n "checking whether module_param_call() is hardened... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + int param_get(char *b, const struct kernel_param *kp) + { + return (0); + } + + int param_set(const char *b, const struct kernel_param *kp) + { + return (0); + } + + module_param_call(p, param_set, param_get, NULL, 0644); + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define MODULE_PARAM_CALL_CONST 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iops->rename() wants flags" >&5 +$as_echo_n "checking whether iops->rename() wants flags... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + int rename_fn(struct inode *sip, struct dentry *sdp, + struct inode *tip, struct dentry *tdp, + unsigned int flags) { return 0; } + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .rename = rename_fn, + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_RENAME_WANTS_FLAGS 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic_setxattr() exists" >&5 +$as_echo_n "checking whether generic_setxattr() exists... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + + static const struct inode_operations + iops __attribute__ ((unused)) = { + .setxattr = generic_setxattr + }; + +int +main (void) +{ + + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_GENERIC_SETXATTR 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether current_time() exists" >&5 +$as_echo_n "checking whether current_time() exists... " >&6; } + + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + +int +main (void) +{ + + struct inode ip; + struct timespec now __attribute__ ((unused)); + + now = current_time(&ip); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + rc=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + rc=1 + + +fi + rm -Rf build + + + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else + if test "x$enable_linux_builtin" != xyes; then + + grep -q -E '[[:space:]]current_time[[:space:]]' \ + $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null + rc=$? + if test $rc -ne 0; then + export=0 + for file in fs/inode.c; do + grep -q -E "EXPORT_SYMBOL.*(current_time)" \ + "$LINUX/$file" 2>/dev/null + rc=$? + if test $rc -eq 0; then + export=1 + break; + fi + done + if test $export -eq 0; then : + rc=1 + else : + rc=0 + fi + else : + rc=0 + fi + + fi + if test $rc -ne 0; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + else : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_CURRENT_TIME 1" >>confdefs.h + + + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use vm_node_stat based fn's" >&5 +$as_echo_n "checking whether to use vm_node_stat based fn's... " >&6; } + + +cat confdefs.h - <<_ACEOF >conftest.c + + + #include + #include + +int +main (void) +{ + + int a __attribute__ ((unused)) = NR_VM_NODE_STAT_ITEMS; + long x __attribute__ ((unused)) = + atomic_long_read(&vm_node_stat[0]); + (void) global_node_page_state(0); + + ; + return 0; +} + +_ACEOF + + + +cat - <<_ACEOF >conftest.h + +_ACEOF + + + rm -Rf build && mkdir -p build && touch build/conftest.mod.c + echo "obj-m := conftest.o" >build/Makefile + modpost_flag='' + test "x$enable_linux_builtin" = xyes && modpost_flag='modpost=true' # fake modpost stage + if { ac_try='cp conftest.c conftest.h build && make modules -C $LINUX_OBJ EXTRA_CFLAGS="-Werror $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build $modpost_flag' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null && { ac_try='test -s build/conftest.o' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ZFS_GLOBAL_NODE_PAGE_STATE 1" >>confdefs.h + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + + +fi + rm -Rf build + + + + + if test "$LINUX_OBJ" != "$LINUX"; then : + + KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + +fi + + + + KERNELCPPFLAGS="$KERNELCPPFLAGS -std=gnu99" + KERNELCPPFLAGS="$KERNELCPPFLAGS -Wno-declaration-after-statement" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE" + KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_BOOL_COMPARE" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL" + KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\"" + + + ;; + srpm) ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Error!" >&5 +$as_echo "Error!" >&6; } + as_fn_error $? "Bad value \"$ZFS_CONFIG\" for --with-config, + user kernel|user|all|srpm" "$LINENO" 5 ;; + esac + + if test "$ZFS_CONFIG" = user -o "$ZFS_CONFIG" = all; then + CONFIG_USER_TRUE= + CONFIG_USER_FALSE='#' +else + CONFIG_USER_TRUE='#' + CONFIG_USER_FALSE= +fi + + if test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all && + test "x$enable_linux_builtin" != xyes ; then + CONFIG_KERNEL_TRUE= + CONFIG_KERNEL_FALSE='#' +else + CONFIG_KERNEL_TRUE='#' + CONFIG_KERNEL_FALSE= +fi + + if test "x$user_libudev" = xyes ; then + WANT_DEVNAME2DEVID_TRUE= + WANT_DEVNAME2DEVID_FALSE='#' +else + WANT_DEVNAME2DEVID_TRUE='#' + WANT_DEVNAME2DEVID_FALSE= +fi + + if test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all && + test "x$qatsrc" != x ; then + CONFIG_QAT_TRUE= + CONFIG_QAT_FALSE='#' +else + CONFIG_QAT_TRUE='#' + CONFIG_QAT_FALSE= +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether debugging is enabled" >&5 +$as_echo_n "checking whether debugging is enabled... " >&6; } + # Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; +else + enable_debug=no +fi + + + if test "x$enable_debug" = xyes; then : + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" + HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_STACKFLAGS="-fstack-check" + DEBUG_ZFS="_with_debug" + +$as_echo "#define ZFS_DEBUG 1" >>confdefs.h + + +else + + KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG " + HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG " + DEBUG_CFLAGS="-DNDEBUG" + DEBUG_STACKFLAGS="" + DEBUG_ZFS="_without_debug" + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_debug" >&5 +$as_echo "$enable_debug" >&6; } + + +ac_config_files="$ac_config_files Makefile module/Makefile module/avl/Makefile module/nvpair/Makefile module/unicode/Makefile module/zcommon/Makefile module/zfs/Makefile module/zpios/Makefile module/icp/Makefile include/Makefile include/linux/Makefile include/sys/Makefile include/sys/fs/Makefile include/sys/fm/Makefile include/sys/fm/fs/Makefile include/sys/crypto/Makefile include/sys/sysevent/Makefile zfs.release" + + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${TARGET_ASM_X86_64_TRUE}" && test -z "${TARGET_ASM_X86_64_FALSE}"; then + as_fn_error $? "conditional \"TARGET_ASM_X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${TARGET_ASM_I386_TRUE}" && test -z "${TARGET_ASM_I386_FALSE}"; then + as_fn_error $? "conditional \"TARGET_ASM_I386\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${TARGET_ASM_GENERIC_TRUE}" && test -z "${TARGET_ASM_GENERIC_FALSE}"; then + as_fn_error $? "conditional \"TARGET_ASM_GENERIC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_USER_TRUE}" && test -z "${CONFIG_USER_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_USER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_KERNEL_TRUE}" && test -z "${CONFIG_KERNEL_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_KERNEL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WANT_DEVNAME2DEVID_TRUE}" && test -z "${WANT_DEVNAME2DEVID_FALSE}"; then + as_fn_error $? "conditional \"WANT_DEVNAME2DEVID\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_QAT_TRUE}" && test -z "${CONFIG_QAT_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_QAT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by zfs $as_me 0.7.5, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +zfs config.status 0.7.5 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "zfs_config.h") CONFIG_HEADERS="$CONFIG_HEADERS zfs_config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "module/Makefile") CONFIG_FILES="$CONFIG_FILES module/Makefile" ;; + "module/avl/Makefile") CONFIG_FILES="$CONFIG_FILES module/avl/Makefile" ;; + "module/nvpair/Makefile") CONFIG_FILES="$CONFIG_FILES module/nvpair/Makefile" ;; + "module/unicode/Makefile") CONFIG_FILES="$CONFIG_FILES module/unicode/Makefile" ;; + "module/zcommon/Makefile") CONFIG_FILES="$CONFIG_FILES module/zcommon/Makefile" ;; + "module/zfs/Makefile") CONFIG_FILES="$CONFIG_FILES module/zfs/Makefile" ;; + "module/zpios/Makefile") CONFIG_FILES="$CONFIG_FILES module/zpios/Makefile" ;; + "module/icp/Makefile") CONFIG_FILES="$CONFIG_FILES module/icp/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "include/linux/Makefile") CONFIG_FILES="$CONFIG_FILES include/linux/Makefile" ;; + "include/sys/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/Makefile" ;; + "include/sys/fs/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/fs/Makefile" ;; + "include/sys/fm/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/fm/Makefile" ;; + "include/sys/fm/fs/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/fm/fs/Makefile" ;; + "include/sys/crypto/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/crypto/Makefile" ;; + "include/sys/sysevent/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/sysevent/Makefile" ;; + "zfs.release") CONFIG_FILES="$CONFIG_FILES zfs.release" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "zfs_config.h":H) + (mv zfs_config.h zfs_config.h.tmp && + awk -f ${ac_srcdir}/config/config.awk zfs_config.h.tmp >zfs_config.h && + rm zfs_config.h.tmp) || exit 1 ;; + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool 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 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + --- linux-aws-4.15.0.orig/zfs/configure.ac +++ linux-aws-4.15.0/zfs/configure.ac @@ -0,0 +1,81 @@ +/* + * This file is part of the ZFS Linux port. + * + * Copyright (c) 2009 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory + * Written by: + * Brian Behlendorf , + * Herb Wartens , + * Jim Garlick + * LLNL-CODE-403049 + * + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +AC_INIT(m4_esyscmd(grep Name META | cut -d ':' -f 2 | tr -d ' \n'), + m4_esyscmd(grep Version META | cut -d ':' -f 2 | tr -d ' \n')) +AC_LANG(C) +ZFS_AC_META +AC_CONFIG_AUX_DIR([config]) +AC_CONFIG_MACRO_DIR([config]) +AC_CANONICAL_SYSTEM +AM_MAINTAINER_MODE +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +AM_INIT_AUTOMAKE([subdir-objects]) +AC_CONFIG_HEADERS([zfs_config.h], [ + (mv zfs_config.h zfs_config.h.tmp && + awk -f ${ac_srcdir}/config/config.awk zfs_config.h.tmp >zfs_config.h && + rm zfs_config.h.tmp) || exit 1]) + +AC_PROG_INSTALL +AC_PROG_CC +AC_PROG_LIBTOOL +AM_PROG_AS +AM_PROG_CC_C_O + +ZFS_AC_LICENSE +ZFS_AC_PACKAGE +ZFS_AC_CONFIG +ZFS_AC_DEBUG + +AC_CONFIG_FILES([ + Makefile + module/Makefile + module/avl/Makefile + module/nvpair/Makefile + module/unicode/Makefile + module/zcommon/Makefile + module/zfs/Makefile + module/zpios/Makefile + module/icp/Makefile + include/Makefile + include/linux/Makefile + include/sys/Makefile + include/sys/fs/Makefile + include/sys/fm/Makefile + include/sys/fm/fs/Makefile + include/sys/crypto/Makefile + include/sys/sysevent/Makefile + zfs.release +]) + + +AC_OUTPUT --- linux-aws-4.15.0.orig/zfs/cp +++ linux-aws-4.15.0/zfs/cp @@ -0,0 +1,2 @@ +#!/bin/sh +cp "$@" --- linux-aws-4.15.0.orig/zfs/dkms.conf +++ linux-aws-4.15.0/zfs/dkms.conf @@ -0,0 +1,93 @@ +BUILD_DEPENDS[0]="spl" +AUTOINSTALL="yes" +PACKAGE_NAME="zfs" +PACKAGE_VERSION="0.7.5" +PRE_BUILD="configure + --prefix=/usr + --with-config=kernel + --with-linux=$( + case `lsb_release -is` in + (Debian) + if [[ -e ${kernel_source_dir/%build/source} ]] + then + echo ${kernel_source_dir/%build/source} + else + # A kpkg exception for Proxmox 2.0 + echo ${kernel_source_dir} + fi + ;; + (*) + echo ${kernel_source_dir} + ;; + esac + ) + --with-linux-obj=${kernel_source_dir} + --with-spl=${source_tree}/spl-${PACKAGE_VERSION} + --with-spl-obj=${dkms_tree}/spl/${PACKAGE_VERSION}/${kernelver}/${arch} + $( + [[ -r /etc/default/zfs ]] \ + && source /etc/default/zfs \ + && shopt -q -s extglob \ + && \ + { + if [[ ${ZFS_DKMS_ENABLE_DEBUG,,} == @(y|yes) ]] + then + echo --enable-debug + fi + if [[ ${ZFS_DKMS_ENABLE_DEBUG_DMU_TX,,} == @(y|yes) ]] + then + echo --enable-debug-dmu-tx + fi + } + ) + --with-spl-timeout=600 +" +POST_BUILD="cp + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/zfs_config.h + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/module/Module.symvers + ${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/${kernelver}/${arch}/ +" +REMAKE_INITRD="$( + if [ -e /usr/share/initramfs-tools/hooks/zfs \ + -o -e /usr/share/dracut/modules.d/90zfs ] + then + echo -n yes + else + echo -n no + fi +)" +MAKE[0]="make" +STRIP[0]="$( + [[ -r /etc/default/zfs ]] \ + && source /etc/default/zfs \ + && shopt -q -s extglob \ + && [[ ${ZFS_DKMS_DISABLE_STRIP,,} == @(y|yes) ]] \ + && echo -n no +)" +STRIP[1]="${STRIP[0]}" +STRIP[2]="${STRIP[0]}" +STRIP[3]="${STRIP[0]}" +STRIP[4]="${STRIP[0]}" +STRIP[5]="${STRIP[0]}" +STRIP[6]="${STRIP[0]}" +BUILT_MODULE_NAME[0]="zavl" +BUILT_MODULE_LOCATION[0]="module/avl/" +DEST_MODULE_LOCATION[0]="/extra/zfs/zavl" +BUILT_MODULE_NAME[1]="zcommon" +BUILT_MODULE_LOCATION[1]="module/zcommon/" +DEST_MODULE_LOCATION[1]="/extra/zfs/zcommon" +BUILT_MODULE_NAME[2]="znvpair" +BUILT_MODULE_LOCATION[2]="module/nvpair/" +DEST_MODULE_LOCATION[2]="/extra/zfs/znvpair" +BUILT_MODULE_NAME[3]="zpios" +BUILT_MODULE_LOCATION[3]="module/zpios/" +DEST_MODULE_LOCATION[3]="/extra/zfs/zpios" +BUILT_MODULE_NAME[4]="zunicode" +BUILT_MODULE_LOCATION[4]="module/unicode/" +DEST_MODULE_LOCATION[4]="/extra/zfs/zunicode" +BUILT_MODULE_NAME[5]="zfs" +BUILT_MODULE_LOCATION[5]="module/zfs/" +DEST_MODULE_LOCATION[5]="/extra/zfs/zfs" +BUILT_MODULE_NAME[6]="icp" +BUILT_MODULE_LOCATION[6]="module/icp/" +DEST_MODULE_LOCATION[6]="/extra/zfs/icp" --- linux-aws-4.15.0.orig/zfs/include/Makefile.am +++ linux-aws-4.15.0/zfs/include/Makefile.am @@ -0,0 +1,34 @@ +SUBDIRS = linux sys + +COMMON_H = \ + $(top_srcdir)/include/zfeature_common.h \ + $(top_srcdir)/include/zfs_comutil.h \ + $(top_srcdir)/include/zfs_deleg.h \ + $(top_srcdir)/include/zfs_fletcher.h \ + $(top_srcdir)/include/zfs_namecheck.h \ + $(top_srcdir)/include/zfs_prop.h \ + $(top_srcdir)/include/zpios-ctl.h + +KERNEL_H = \ + $(top_srcdir)/include/zpios-internal.h + +USER_H = \ + $(top_srcdir)/include/libnvpair.h \ + $(top_srcdir)/include/libuutil_common.h \ + $(top_srcdir)/include/libuutil.h \ + $(top_srcdir)/include/libuutil_impl.h \ + $(top_srcdir)/include/libzfs.h \ + $(top_srcdir)/include/libzfs_core.h \ + $(top_srcdir)/include/libzfs_impl.h + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/Makefile.in +++ linux-aws-4.15.0/zfs/include/Makefile.in @@ -0,0 +1,938 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/zfeature_common.h \ + $(top_srcdir)/include/zfs_comutil.h \ + $(top_srcdir)/include/zfs_deleg.h \ + $(top_srcdir)/include/zfs_fletcher.h \ + $(top_srcdir)/include/zfs_namecheck.h \ + $(top_srcdir)/include/zfs_prop.h \ + $(top_srcdir)/include/zpios-ctl.h \ + $(top_srcdir)/include/zpios-internal.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/zfeature_common.h \ + $(top_srcdir)/include/zfs_comutil.h \ + $(top_srcdir)/include/zfs_deleg.h \ + $(top_srcdir)/include/zfs_fletcher.h \ + $(top_srcdir)/include/zfs_namecheck.h \ + $(top_srcdir)/include/zfs_prop.h \ + $(top_srcdir)/include/zpios-ctl.h \ + $(top_srcdir)/include/libnvpair.h \ + $(top_srcdir)/include/libuutil_common.h \ + $(top_srcdir)/include/libuutil.h \ + $(top_srcdir)/include/libuutil_impl.h \ + $(top_srcdir)/include/libzfs.h \ + $(top_srcdir)/include/libzfs_core.h \ + $(top_srcdir)/include/libzfs_impl.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +SUBDIRS = linux sys +COMMON_H = \ + $(top_srcdir)/include/zfeature_common.h \ + $(top_srcdir)/include/zfs_comutil.h \ + $(top_srcdir)/include/zfs_deleg.h \ + $(top_srcdir)/include/zfs_fletcher.h \ + $(top_srcdir)/include/zfs_namecheck.h \ + $(top_srcdir)/include/zfs_prop.h \ + $(top_srcdir)/include/zpios-ctl.h + +KERNEL_H = \ + $(top_srcdir)/include/zpios-internal.h + +USER_H = \ + $(top_srcdir)/include/libnvpair.h \ + $(top_srcdir)/include/libuutil_common.h \ + $(top_srcdir)/include/libuutil.h \ + $(top_srcdir)/include/libuutil_impl.h \ + $(top_srcdir)/include/libzfs.h \ + $(top_srcdir)/include/libzfs_core.h \ + $(top_srcdir)/include/libzfs_impl.h + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-kernelHEADERS install-libzfsHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/libnvpair.h +++ linux-aws-4.15.0/zfs/include/libnvpair.h @@ -0,0 +1,194 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _LIBNVPAIR_H +#define _LIBNVPAIR_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * All interfaces described in this file are private to Solaris, and + * are subject to change at any time and without notice. The public + * nvlist/nvpair interfaces, as documented in manpage sections 3NVPAIR, + * are all imported from included above. + */ + +extern int nvpair_value_match(nvpair_t *, int, char *, char **); +extern int nvpair_value_match_regex(nvpair_t *, int, char *, regex_t *, + char **); + +extern void nvlist_print(FILE *, nvlist_t *); +extern void dump_nvlist(nvlist_t *, int); + +/* + * Private nvlist printing interface that allows the caller some control + * over output rendering (as opposed to nvlist_print and dump_nvlist). + * + * Obtain an opaque nvlist_prtctl_t cookie using nvlist_prtctl_alloc + * (NULL on failure); on return the cookie is set up for default formatting + * and rendering. Quote the cookie in subsequent customisation functions and + * then pass the cookie to nvlist_prt to render the nvlist. Finally, + * use nvlist_prtctl_free to release the cookie. + * + * For all nvlist_lookup_xxx and nvlist_lookup_xxx_array functions + * we have a corresponding brace of functions that appoint replacement + * rendering functions: + * + * extern void nvlist_prtctl_xxx(nvlist_prtctl_t, + * void (*)(nvlist_prtctl_t ctl, void *private, const char *name, + * xxxtype value)) + * + * and + * + * extern void nvlist_prtctl_xxx_array(nvlist_prtctl_t, + * void (*)(nvlist_prtctl_t ctl, void *private, const char *name, + * xxxtype value, uint_t count)) + * + * where xxxtype is the C datatype corresponding to xxx, eg int8_t for "int8" + * and char * for "string". The function that is appointed to render the + * specified datatype receives as arguments the cookie, the nvlist + * member name, the value of that member (or a pointer for array function), + * and (for array rendering functions) a count of the number of elements. + */ + +typedef struct nvlist_prtctl *nvlist_prtctl_t; /* opaque */ + +enum nvlist_indent_mode { + NVLIST_INDENT_ABS, /* Absolute indentation */ + NVLIST_INDENT_TABBED /* Indent with tabstops */ +}; + +extern nvlist_prtctl_t nvlist_prtctl_alloc(void); +extern void nvlist_prtctl_free(nvlist_prtctl_t); +extern void nvlist_prt(nvlist_t *, nvlist_prtctl_t); + +/* Output stream */ +extern void nvlist_prtctl_setdest(nvlist_prtctl_t, FILE *); +extern FILE *nvlist_prtctl_getdest(nvlist_prtctl_t); + +/* Indentation mode, start indent, indent increment; default tabbed/0/1 */ +extern void nvlist_prtctl_setindent(nvlist_prtctl_t, enum nvlist_indent_mode, + int, int); +extern void nvlist_prtctl_doindent(nvlist_prtctl_t, int); + +enum nvlist_prtctl_fmt { + NVLIST_FMT_MEMBER_NAME, /* name fmt; default "%s = " */ + NVLIST_FMT_MEMBER_POSTAMBLE, /* after nvlist member; default "\n" */ + NVLIST_FMT_BTWN_ARRAY /* between array members; default " " */ +}; + +extern void nvlist_prtctl_setfmt(nvlist_prtctl_t, enum nvlist_prtctl_fmt, + const char *); +extern void nvlist_prtctl_dofmt(nvlist_prtctl_t, enum nvlist_prtctl_fmt, ...); + +/* + * Function prototypes for interfaces that appoint a new rendering function + * for single-valued nvlist members. + * + * A replacement function receives arguments as follows: + * + * nvlist_prtctl_t Print control structure; do not change preferences + * for this object from a print callback function. + * + * void * The function-private cookie argument registered + * when the replacement function was appointed. + * + * nvlist_t * The full nvlist that is being processed. The + * rendering function is called to render a single + * member (name and value passed as below) but it may + * want to reference or incorporate other aspects of + * the full nvlist. + * + * const char * Member name to render + * + * valtype Value of the member to render + * + * The function must return non-zero if it has rendered output for this + * member, or 0 if it wants to default to standard rendering for this + * one member. + */ + +#define NVLIST_PRINTCTL_SVDECL(funcname, valtype) \ + extern void funcname(nvlist_prtctl_t, \ + int (*)(nvlist_prtctl_t, void *, nvlist_t *, const char *, valtype), \ + void *) + +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_boolean, int); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_boolean_value, boolean_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_byte, uchar_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_int8, int8_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_uint8, uint8_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_int16, int16_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_uint16, uint16_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_int32, int32_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_uint32, uint32_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_int64, int64_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_uint64, uint64_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_double, double); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_string, char *); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_hrtime, hrtime_t); +NVLIST_PRINTCTL_SVDECL(nvlist_prtctlop_nvlist, nvlist_t *); + +#undef NVLIST_PRINTCTL_SVDECL /* was just for "clarity" above */ + +/* + * Function prototypes for interfaces that appoint a new rendering function + * for array-valued nvlist members. + * + * One additional argument is taken: uint_t for the number of array elements + * + * Return values as above. + */ +#define NVLIST_PRINTCTL_AVDECL(funcname, vtype) \ + extern void funcname(nvlist_prtctl_t, \ + int (*)(nvlist_prtctl_t, void *, nvlist_t *, const char *, vtype, uint_t), \ + void *) + +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_boolean_array, boolean_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_byte_array, uchar_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_int8_array, int8_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_uint8_array, uint8_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_int16_array, int16_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_uint16_array, uint16_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_int32_array, int32_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_uint32_array, uint32_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_int64_array, int64_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_uint64_array, uint64_t *); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_string_array, char **); +NVLIST_PRINTCTL_AVDECL(nvlist_prtctlop_nvlist_array, nvlist_t **); + +#undef NVLIST_PRINTCTL_AVDECL /* was just for "clarity" above */ + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBNVPAIR_H */ --- linux-aws-4.15.0.orig/zfs/include/libuutil.h +++ linux-aws-4.15.0/zfs/include/libuutil.h @@ -0,0 +1,384 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _LIBUUTIL_H +#define _LIBUUTIL_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Standard flags codes. + */ +#define UU_DEFAULT 0 + +/* + * Standard error codes. + */ +#define UU_ERROR_NONE 0 /* no error */ +#define UU_ERROR_INVALID_ARGUMENT 1 /* invalid argument */ +#define UU_ERROR_UNKNOWN_FLAG 2 /* passed flag invalid */ +#define UU_ERROR_NO_MEMORY 3 /* out of memory */ +#define UU_ERROR_CALLBACK_FAILED 4 /* callback-initiated error */ +#define UU_ERROR_NOT_SUPPORTED 5 /* operation not supported */ +#define UU_ERROR_EMPTY 6 /* no value provided */ +#define UU_ERROR_UNDERFLOW 7 /* value is too small */ +#define UU_ERROR_OVERFLOW 8 /* value is too value */ +#define UU_ERROR_INVALID_CHAR 9 /* value contains unexpected char */ +#define UU_ERROR_INVALID_DIGIT 10 /* value contains digit not in base */ + +#define UU_ERROR_SYSTEM 99 /* underlying system error */ +#define UU_ERROR_UNKNOWN 100 /* error status not known */ + +/* + * Standard program exit codes. + */ +#define UU_EXIT_OK (*(uu_exit_ok())) +#define UU_EXIT_FATAL (*(uu_exit_fatal())) +#define UU_EXIT_USAGE (*(uu_exit_usage())) + +/* + * Exit status profiles. + */ +#define UU_PROFILE_DEFAULT 0 +#define UU_PROFILE_LAUNCHER 1 + +/* + * Error reporting functions. + */ +uint32_t uu_error(void); +const char *uu_strerror(uint32_t); + +/* + * Program notification functions. + */ +extern void uu_alt_exit(int); +extern const char *uu_setpname(char *); +extern const char *uu_getpname(void); +/*PRINTFLIKE1*/ +extern void uu_warn(const char *, ...); +extern void uu_vwarn(const char *, va_list); +/*PRINTFLIKE1*/ +extern void uu_die(const char *, ...) __NORETURN; +extern void uu_vdie(const char *, va_list) __NORETURN; +/*PRINTFLIKE2*/ +extern void uu_xdie(int, const char *, ...) __NORETURN; +extern void uu_vxdie(int, const char *, va_list) __NORETURN; + +/* + * Exit status functions (not to be used directly) + */ +extern int *uu_exit_ok(void); +extern int *uu_exit_fatal(void); +extern int *uu_exit_usage(void); + +/* + * Debug print facility functions. + */ +typedef struct uu_dprintf uu_dprintf_t; + +typedef enum { + UU_DPRINTF_SILENT, + UU_DPRINTF_FATAL, + UU_DPRINTF_WARNING, + UU_DPRINTF_NOTICE, + UU_DPRINTF_INFO, + UU_DPRINTF_DEBUG +} uu_dprintf_severity_t; + +extern uu_dprintf_t *uu_dprintf_create(const char *, uu_dprintf_severity_t, + uint_t); +/*PRINTFLIKE3*/ +extern void uu_dprintf(uu_dprintf_t *, uu_dprintf_severity_t, + const char *, ...); +extern void uu_dprintf_destroy(uu_dprintf_t *); +extern const char *uu_dprintf_getname(uu_dprintf_t *); + +/* + * Identifier test flags and function. + */ +#define UU_NAME_DOMAIN 0x1 /* allow SUNW, or com.sun, prefix */ +#define UU_NAME_PATH 0x2 /* allow '/'-delimited paths */ + +int uu_check_name(const char *, uint_t); + +/* + * File creation functions. + */ +extern int uu_open_tmp(const char *dir, uint_t uflags); + +/* + * Convenience functions. + */ +#define UU_NELEM(a) (sizeof (a) / sizeof ((a)[0])) + +/*PRINTFLIKE1*/ +extern char *uu_msprintf(const char *format, ...); +extern void *uu_zalloc(size_t); +extern char *uu_strdup(const char *); +extern void uu_free(void *); + +extern boolean_t uu_strcaseeq(const char *a, const char *b); +extern boolean_t uu_streq(const char *a, const char *b); +extern char *uu_strndup(const char *s, size_t n); +extern boolean_t uu_strbw(const char *a, const char *b); +extern void *uu_memdup(const void *buf, size_t sz); +extern void uu_dump(FILE *out, const char *prefix, const void *buf, size_t len); + +/* + * Comparison function type definition. + * Developers should be careful in their use of the _private argument. If you + * break interface guarantees, you get undefined behavior. + */ +typedef int uu_compare_fn_t(const void *__left, const void *__right, + void *__private); + +/* + * Walk variant flags. + * A data structure need not provide support for all variants and + * combinations. Refer to the appropriate documentation. + */ +#define UU_WALK_ROBUST 0x00000001 /* walk can survive removes */ +#define UU_WALK_REVERSE 0x00000002 /* reverse walk order */ + +#define UU_WALK_PREORDER 0x00000010 /* walk tree in pre-order */ +#define UU_WALK_POSTORDER 0x00000020 /* walk tree in post-order */ + +/* + * Walk callback function return codes. + */ +#define UU_WALK_ERROR -1 +#define UU_WALK_NEXT 0 +#define UU_WALK_DONE 1 + +/* + * Walk callback function type definition. + */ +typedef int uu_walk_fn_t(void *_elem, void *_private); + +/* + * lists: opaque structures + */ +typedef struct uu_list_pool uu_list_pool_t; +typedef struct uu_list uu_list_t; + +typedef struct uu_list_node { + uintptr_t uln_opaque[2]; +} uu_list_node_t; + +typedef struct uu_list_walk uu_list_walk_t; + +typedef uintptr_t uu_list_index_t; + +/* + * lists: interface + * + * basic usage: + * typedef struct foo { + * ... + * uu_list_node_t foo_node; + * ... + * } foo_t; + * + * static int + * foo_compare(void *l_arg, void *r_arg, void *private) + * { + * foo_t *l = l_arg; + * foo_t *r = r_arg; + * + * if (... l greater than r ...) + * return (1); + * if (... l less than r ...) + * return (-1); + * return (0); + * } + * + * ... + * // at initialization time + * foo_pool = uu_list_pool_create("foo_pool", + * sizeof (foo_t), offsetof(foo_t, foo_node), foo_compare, + * debugging? 0 : UU_AVL_POOL_DEBUG); + * ... + */ +uu_list_pool_t *uu_list_pool_create(const char *, size_t, size_t, + uu_compare_fn_t *, uint32_t); +#define UU_LIST_POOL_DEBUG 0x00000001 + +void uu_list_pool_destroy(uu_list_pool_t *); + +/* + * usage: + * + * foo_t *a; + * a = malloc(sizeof(*a)); + * uu_list_node_init(a, &a->foo_list, pool); + * ... + * uu_list_node_fini(a, &a->foo_list, pool); + * free(a); + */ +void uu_list_node_init(void *, uu_list_node_t *, uu_list_pool_t *); +void uu_list_node_fini(void *, uu_list_node_t *, uu_list_pool_t *); + +uu_list_t *uu_list_create(uu_list_pool_t *, void *_parent, uint32_t); +#define UU_LIST_DEBUG 0x00000001 +#define UU_LIST_SORTED 0x00000002 /* list is sorted */ + +void uu_list_destroy(uu_list_t *); /* list must be empty */ + +size_t uu_list_numnodes(uu_list_t *); + +void *uu_list_first(uu_list_t *); +void *uu_list_last(uu_list_t *); + +void *uu_list_next(uu_list_t *, void *); +void *uu_list_prev(uu_list_t *, void *); + +int uu_list_walk(uu_list_t *, uu_walk_fn_t *, void *, uint32_t); + +uu_list_walk_t *uu_list_walk_start(uu_list_t *, uint32_t); +void *uu_list_walk_next(uu_list_walk_t *); +void uu_list_walk_end(uu_list_walk_t *); + +void *uu_list_find(uu_list_t *, void *, void *, uu_list_index_t *); +void uu_list_insert(uu_list_t *, void *, uu_list_index_t); + +void *uu_list_nearest_next(uu_list_t *, uu_list_index_t); +void *uu_list_nearest_prev(uu_list_t *, uu_list_index_t); + +void *uu_list_teardown(uu_list_t *, void **); + +void uu_list_remove(uu_list_t *, void *); + +/* + * lists: interfaces for non-sorted lists only + */ +int uu_list_insert_before(uu_list_t *, void *_target, void *_elem); +int uu_list_insert_after(uu_list_t *, void *_target, void *_elem); + +/* + * avl trees: opaque structures + */ +typedef struct uu_avl_pool uu_avl_pool_t; +typedef struct uu_avl uu_avl_t; + +typedef struct uu_avl_node { +#ifdef _LP64 + uintptr_t uan_opaque[3]; +#else + uintptr_t uan_opaque[4]; +#endif +} uu_avl_node_t; + +typedef struct uu_avl_walk uu_avl_walk_t; + +typedef uintptr_t uu_avl_index_t; + +/* + * avl trees: interface + * + * basic usage: + * typedef struct foo { + * ... + * uu_avl_node_t foo_node; + * ... + * } foo_t; + * + * static int + * foo_compare(void *l_arg, void *r_arg, void *private) + * { + * foo_t *l = l_arg; + * foo_t *r = r_arg; + * + * if (... l greater than r ...) + * return (1); + * if (... l less than r ...) + * return (-1); + * return (0); + * } + * + * ... + * // at initialization time + * foo_pool = uu_avl_pool_create("foo_pool", + * sizeof (foo_t), offsetof(foo_t, foo_node), foo_compare, + * debugging? 0 : UU_AVL_POOL_DEBUG); + * ... + */ +uu_avl_pool_t *uu_avl_pool_create(const char *, size_t, size_t, + uu_compare_fn_t *, uint32_t); +#define UU_AVL_POOL_DEBUG 0x00000001 + +void uu_avl_pool_destroy(uu_avl_pool_t *); + +/* + * usage: + * + * foo_t *a; + * a = malloc(sizeof(*a)); + * uu_avl_node_init(a, &a->foo_avl, pool); + * ... + * uu_avl_node_fini(a, &a->foo_avl, pool); + * free(a); + */ +void uu_avl_node_init(void *, uu_avl_node_t *, uu_avl_pool_t *); +void uu_avl_node_fini(void *, uu_avl_node_t *, uu_avl_pool_t *); + +uu_avl_t *uu_avl_create(uu_avl_pool_t *, void *_parent, uint32_t); +#define UU_AVL_DEBUG 0x00000001 + +void uu_avl_destroy(uu_avl_t *); /* list must be empty */ + +size_t uu_avl_numnodes(uu_avl_t *); + +void *uu_avl_first(uu_avl_t *); +void *uu_avl_last(uu_avl_t *); + +void *uu_avl_next(uu_avl_t *, void *); +void *uu_avl_prev(uu_avl_t *, void *); + +int uu_avl_walk(uu_avl_t *, uu_walk_fn_t *, void *, uint32_t); + +uu_avl_walk_t *uu_avl_walk_start(uu_avl_t *, uint32_t); +void *uu_avl_walk_next(uu_avl_walk_t *); +void uu_avl_walk_end(uu_avl_walk_t *); + +void *uu_avl_find(uu_avl_t *, void *, void *, uu_avl_index_t *); +void uu_avl_insert(uu_avl_t *, void *, uu_avl_index_t); + +void *uu_avl_nearest_next(uu_avl_t *, uu_avl_index_t); +void *uu_avl_nearest_prev(uu_avl_t *, uu_avl_index_t); + +void *uu_avl_teardown(uu_avl_t *, void **); + +void uu_avl_remove(uu_avl_t *, void *); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBUUTIL_H */ --- linux-aws-4.15.0.orig/zfs/include/libuutil_common.h +++ linux-aws-4.15.0/zfs/include/libuutil_common.h @@ -0,0 +1,35 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _LIBUUTIL_COMMON_H +#define _LIBUUTIL_COMMON_H + + + +#include +#include + +#endif /* _LIBUUTIL_COMMON_H */ --- linux-aws-4.15.0.orig/zfs/include/libuutil_impl.h +++ linux-aws-4.15.0/zfs/include/libuutil_impl.h @@ -0,0 +1,181 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _LIBUUTIL_IMPL_H +#define _LIBUUTIL_IMPL_H + + + +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void uu_set_error(uint_t); + + +/*PRINTFLIKE1*/ +void uu_panic(const char *format, ...); + + +struct uu_dprintf { + char *uud_name; + uu_dprintf_severity_t uud_severity; + uint_t uud_flags; +}; + +/* + * For debugging purposes, libuutil keeps around linked lists of all uu_lists + * and uu_avls, along with pointers to their parents. These can cause false + * negatives when looking for memory leaks, so we encode the pointers by + * storing them with swapped endianness; this is not perfect, but it's about + * the best we can do without wasting a lot of space. + */ +#ifdef _LP64 +#define UU_PTR_ENCODE(ptr) BSWAP_64((uintptr_t)(void *)(ptr)) +#else +#define UU_PTR_ENCODE(ptr) BSWAP_32((uintptr_t)(void *)(ptr)) +#endif + +#define UU_PTR_DECODE(ptr) ((void *)UU_PTR_ENCODE(ptr)) + +/* + * uu_list structures + */ +typedef struct uu_list_node_impl { + struct uu_list_node_impl *uln_next; + struct uu_list_node_impl *uln_prev; +} uu_list_node_impl_t; + +struct uu_list_walk { + uu_list_walk_t *ulw_next; + uu_list_walk_t *ulw_prev; + + uu_list_t *ulw_list; + int8_t ulw_dir; + uint8_t ulw_robust; + uu_list_node_impl_t *ulw_next_result; +}; + +struct uu_list { + uintptr_t ul_next_enc; + uintptr_t ul_prev_enc; + + uu_list_pool_t *ul_pool; + uintptr_t ul_parent_enc; /* encoded parent pointer */ + size_t ul_offset; + size_t ul_numnodes; + uint8_t ul_debug; + uint8_t ul_sorted; + uint8_t ul_index; /* mark for uu_list_index_ts */ + + uu_list_node_impl_t ul_null_node; + uu_list_walk_t ul_null_walk; /* for robust walkers */ +}; + +#define UU_LIST_PTR(ptr) ((uu_list_t *)UU_PTR_DECODE(ptr)) + +#define UU_LIST_POOL_MAXNAME 64 + +struct uu_list_pool { + uu_list_pool_t *ulp_next; + uu_list_pool_t *ulp_prev; + + char ulp_name[UU_LIST_POOL_MAXNAME]; + size_t ulp_nodeoffset; + size_t ulp_objsize; + uu_compare_fn_t *ulp_cmp; + uint8_t ulp_debug; + uint8_t ulp_last_index; + pthread_mutex_t ulp_lock; /* protects null_list */ + uu_list_t ulp_null_list; +}; + +/* + * uu_avl structures + */ +typedef struct avl_node uu_avl_node_impl_t; + +struct uu_avl_walk { + uu_avl_walk_t *uaw_next; + uu_avl_walk_t *uaw_prev; + + uu_avl_t *uaw_avl; + void *uaw_next_result; + int8_t uaw_dir; + uint8_t uaw_robust; +}; + +struct uu_avl { + uintptr_t ua_next_enc; + uintptr_t ua_prev_enc; + + uu_avl_pool_t *ua_pool; + uintptr_t ua_parent_enc; + uint8_t ua_debug; + uint8_t ua_index; /* mark for uu_avl_index_ts */ + + struct avl_tree ua_tree; + uu_avl_walk_t ua_null_walk; +}; + +#define UU_AVL_PTR(x) ((uu_avl_t *)UU_PTR_DECODE(x)) + +#define UU_AVL_POOL_MAXNAME 64 + +struct uu_avl_pool { + uu_avl_pool_t *uap_next; + uu_avl_pool_t *uap_prev; + + char uap_name[UU_AVL_POOL_MAXNAME]; + size_t uap_nodeoffset; + size_t uap_objsize; + uu_compare_fn_t *uap_cmp; + uint8_t uap_debug; + uint8_t uap_last_index; + pthread_mutex_t uap_lock; /* protects null_avl */ + uu_avl_t uap_null_avl; +}; + +/* + * atfork() handlers + */ +void uu_avl_lockup(void); +void uu_avl_release(void); + +void uu_list_lockup(void); +void uu_list_release(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBUUTIL_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/libzfs.h +++ linux-aws-4.15.0/zfs/include/libzfs.h @@ -0,0 +1,889 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2016, Intel Corporation. + * Copyright 2016 Nexenta Systems, Inc. + * Copyright (c) 2017 Datto Inc. + */ + +#ifndef _LIBZFS_H +#define _LIBZFS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Miscellaneous ZFS constants + */ +#define ZFS_MAXPROPLEN MAXPATHLEN +#define ZPOOL_MAXPROPLEN MAXPATHLEN + +/* + * Default device paths + */ +#define DISK_ROOT "/dev" +#define UDISK_ROOT "/dev/disk" +#define ZVOL_ROOT "/dev/zvol" + +/* + * Default wait time for a device name to be created. + */ +#define DISK_LABEL_WAIT (30 * 1000) /* 30 seconds */ + +#define IMPORT_ORDER_PREFERRED_1 1 +#define IMPORT_ORDER_PREFERRED_2 2 +#define IMPORT_ORDER_SCAN_OFFSET 10 +#define IMPORT_ORDER_DEFAULT 100 +#define DEFAULT_IMPORT_PATH_SIZE 9 +extern char *zpool_default_import_path[DEFAULT_IMPORT_PATH_SIZE]; + +/* + * libzfs errors + */ +typedef enum zfs_error { + EZFS_SUCCESS = 0, /* no error -- success */ + EZFS_NOMEM = 2000, /* out of memory */ + EZFS_BADPROP, /* invalid property value */ + EZFS_PROPREADONLY, /* cannot set readonly property */ + EZFS_PROPTYPE, /* property does not apply to dataset type */ + EZFS_PROPNONINHERIT, /* property is not inheritable */ + EZFS_PROPSPACE, /* bad quota or reservation */ + EZFS_BADTYPE, /* dataset is not of appropriate type */ + EZFS_BUSY, /* pool or dataset is busy */ + EZFS_EXISTS, /* pool or dataset already exists */ + EZFS_NOENT, /* no such pool or dataset */ + EZFS_BADSTREAM, /* bad backup stream */ + EZFS_DSREADONLY, /* dataset is readonly */ + EZFS_VOLTOOBIG, /* volume is too large for 32-bit system */ + EZFS_INVALIDNAME, /* invalid dataset name */ + EZFS_BADRESTORE, /* unable to restore to destination */ + EZFS_BADBACKUP, /* backup failed */ + EZFS_BADTARGET, /* bad attach/detach/replace target */ + EZFS_NODEVICE, /* no such device in pool */ + EZFS_BADDEV, /* invalid device to add */ + EZFS_NOREPLICAS, /* no valid replicas */ + EZFS_RESILVERING, /* currently resilvering */ + EZFS_BADVERSION, /* unsupported version */ + EZFS_POOLUNAVAIL, /* pool is currently unavailable */ + EZFS_DEVOVERFLOW, /* too many devices in one vdev */ + EZFS_BADPATH, /* must be an absolute path */ + EZFS_CROSSTARGET, /* rename or clone across pool or dataset */ + EZFS_ZONED, /* used improperly in local zone */ + EZFS_MOUNTFAILED, /* failed to mount dataset */ + EZFS_UMOUNTFAILED, /* failed to unmount dataset */ + EZFS_UNSHARENFSFAILED, /* unshare(1M) failed */ + EZFS_SHARENFSFAILED, /* share(1M) failed */ + EZFS_PERM, /* permission denied */ + EZFS_NOSPC, /* out of space */ + EZFS_FAULT, /* bad address */ + EZFS_IO, /* I/O error */ + EZFS_INTR, /* signal received */ + EZFS_ISSPARE, /* device is a hot spare */ + EZFS_INVALCONFIG, /* invalid vdev configuration */ + EZFS_RECURSIVE, /* recursive dependency */ + EZFS_NOHISTORY, /* no history object */ + EZFS_POOLPROPS, /* couldn't retrieve pool props */ + EZFS_POOL_NOTSUP, /* ops not supported for this type of pool */ + EZFS_POOL_INVALARG, /* invalid argument for this pool operation */ + EZFS_NAMETOOLONG, /* dataset name is too long */ + EZFS_OPENFAILED, /* open of device failed */ + EZFS_NOCAP, /* couldn't get capacity */ + EZFS_LABELFAILED, /* write of label failed */ + EZFS_BADWHO, /* invalid permission who */ + EZFS_BADPERM, /* invalid permission */ + EZFS_BADPERMSET, /* invalid permission set name */ + EZFS_NODELEGATION, /* delegated administration is disabled */ + EZFS_UNSHARESMBFAILED, /* failed to unshare over smb */ + EZFS_SHARESMBFAILED, /* failed to share over smb */ + EZFS_BADCACHE, /* bad cache file */ + EZFS_ISL2CACHE, /* device is for the level 2 ARC */ + EZFS_VDEVNOTSUP, /* unsupported vdev type */ + EZFS_NOTSUP, /* ops not supported on this dataset */ + EZFS_ACTIVE_SPARE, /* pool has active shared spare devices */ + EZFS_UNPLAYED_LOGS, /* log device has unplayed logs */ + EZFS_REFTAG_RELE, /* snapshot release: tag not found */ + EZFS_REFTAG_HOLD, /* snapshot hold: tag already exists */ + EZFS_TAGTOOLONG, /* snapshot hold/rele: tag too long */ + EZFS_PIPEFAILED, /* pipe create failed */ + EZFS_THREADCREATEFAILED, /* thread create failed */ + EZFS_POSTSPLIT_ONLINE, /* onlining a disk after splitting it */ + EZFS_SCRUBBING, /* currently scrubbing */ + EZFS_NO_SCRUB, /* no active scrub */ + EZFS_DIFF, /* general failure of zfs diff */ + EZFS_DIFFDATA, /* bad zfs diff data */ + EZFS_POOLREADONLY, /* pool is in read-only mode */ + EZFS_SCRUB_PAUSED, /* scrub currently paused */ + EZFS_ACTIVE_POOL, /* pool is imported on a different system */ + EZFS_UNKNOWN +} zfs_error_t; + +/* + * The following data structures are all part + * of the zfs_allow_t data structure which is + * used for printing 'allow' permissions. + * It is a linked list of zfs_allow_t's which + * then contain avl tree's for user/group/sets/... + * and each one of the entries in those trees have + * avl tree's for the permissions they belong to and + * whether they are local,descendent or local+descendent + * permissions. The AVL trees are used primarily for + * sorting purposes, but also so that we can quickly find + * a given user and or permission. + */ +typedef struct zfs_perm_node { + avl_node_t z_node; + char z_pname[MAXPATHLEN]; +} zfs_perm_node_t; + +typedef struct zfs_allow_node { + avl_node_t z_node; + char z_key[MAXPATHLEN]; /* name, such as joe */ + avl_tree_t z_localdescend; /* local+descendent perms */ + avl_tree_t z_local; /* local permissions */ + avl_tree_t z_descend; /* descendent permissions */ +} zfs_allow_node_t; + +typedef struct zfs_allow { + struct zfs_allow *z_next; + char z_setpoint[MAXPATHLEN]; + avl_tree_t z_sets; + avl_tree_t z_crperms; + avl_tree_t z_user; + avl_tree_t z_group; + avl_tree_t z_everyone; +} zfs_allow_t; + +/* + * Basic handle types + */ +typedef struct zfs_handle zfs_handle_t; +typedef struct zpool_handle zpool_handle_t; +typedef struct libzfs_handle libzfs_handle_t; + +/* + * Library initialization + */ +extern libzfs_handle_t *libzfs_init(void); +extern void libzfs_fini(libzfs_handle_t *); + +extern libzfs_handle_t *zpool_get_handle(zpool_handle_t *); +extern libzfs_handle_t *zfs_get_handle(zfs_handle_t *); + +extern void libzfs_print_on_error(libzfs_handle_t *, boolean_t); + +extern void zfs_save_arguments(int argc, char **, char *, int); +extern int zpool_log_history(libzfs_handle_t *, const char *); + +extern int libzfs_errno(libzfs_handle_t *); +extern const char *libzfs_error_init(int); +extern const char *libzfs_error_action(libzfs_handle_t *); +extern const char *libzfs_error_description(libzfs_handle_t *); +extern int zfs_standard_error(libzfs_handle_t *, int, const char *); +extern void libzfs_mnttab_init(libzfs_handle_t *); +extern void libzfs_mnttab_fini(libzfs_handle_t *); +extern void libzfs_mnttab_cache(libzfs_handle_t *, boolean_t); +extern int libzfs_mnttab_find(libzfs_handle_t *, const char *, + struct mnttab *); +extern void libzfs_mnttab_add(libzfs_handle_t *, const char *, + const char *, const char *); +extern void libzfs_mnttab_remove(libzfs_handle_t *, const char *); + +/* + * Basic handle functions + */ +extern zpool_handle_t *zpool_open(libzfs_handle_t *, const char *); +extern zpool_handle_t *zpool_open_canfail(libzfs_handle_t *, const char *); +extern void zpool_close(zpool_handle_t *); +extern const char *zpool_get_name(zpool_handle_t *); +extern int zpool_get_state(zpool_handle_t *); +extern char *zpool_state_to_name(vdev_state_t, vdev_aux_t); +extern const char *zpool_pool_state_to_name(pool_state_t); +extern void zpool_free_handles(libzfs_handle_t *); + +/* + * Iterate over all active pools in the system. + */ +typedef int (*zpool_iter_f)(zpool_handle_t *, void *); +extern int zpool_iter(libzfs_handle_t *, zpool_iter_f, void *); +extern boolean_t zpool_skip_pool(const char *); + +/* + * Functions to create and destroy pools + */ +extern int zpool_create(libzfs_handle_t *, const char *, nvlist_t *, + nvlist_t *, nvlist_t *); +extern int zpool_destroy(zpool_handle_t *, const char *); +extern int zpool_add(zpool_handle_t *, nvlist_t *); + +typedef struct splitflags { + /* do not split, but return the config that would be split off */ + int dryrun : 1; + + /* after splitting, import the pool */ + int import : 1; + int name_flags; +} splitflags_t; + +/* + * Functions to manipulate pool and vdev state + */ +extern int zpool_scan(zpool_handle_t *, pool_scan_func_t, pool_scrub_cmd_t); +extern int zpool_clear(zpool_handle_t *, const char *, nvlist_t *); +extern int zpool_reguid(zpool_handle_t *); +extern int zpool_reopen(zpool_handle_t *); + +extern int zpool_sync_one(zpool_handle_t *, void *); + +extern int zpool_vdev_online(zpool_handle_t *, const char *, int, + vdev_state_t *); +extern int zpool_vdev_offline(zpool_handle_t *, const char *, boolean_t); +extern int zpool_vdev_attach(zpool_handle_t *, const char *, + const char *, nvlist_t *, int); +extern int zpool_vdev_detach(zpool_handle_t *, const char *); +extern int zpool_vdev_remove(zpool_handle_t *, const char *); +extern int zpool_vdev_split(zpool_handle_t *, char *, nvlist_t **, nvlist_t *, + splitflags_t); + +extern int zpool_vdev_fault(zpool_handle_t *, uint64_t, vdev_aux_t); +extern int zpool_vdev_degrade(zpool_handle_t *, uint64_t, vdev_aux_t); +extern int zpool_vdev_clear(zpool_handle_t *, uint64_t); + +extern nvlist_t *zpool_find_vdev(zpool_handle_t *, const char *, boolean_t *, + boolean_t *, boolean_t *); +extern nvlist_t *zpool_find_vdev_by_physpath(zpool_handle_t *, const char *, + boolean_t *, boolean_t *, boolean_t *); +extern int zpool_label_disk_wait(char *, int); +extern int zpool_label_disk(libzfs_handle_t *, zpool_handle_t *, char *); +extern uint64_t zpool_vdev_path_to_guid(zpool_handle_t *zhp, const char *path); + +int zfs_dev_is_dm(char *dev_name); +int zfs_dev_is_whole_disk(char *dev_name); +char *zfs_get_underlying_path(char *dev_name); +char *zfs_get_enclosure_sysfs_path(char *dev_name); + +/* + * Functions to manage pool properties + */ +extern int zpool_set_prop(zpool_handle_t *, const char *, const char *); +extern int zpool_get_prop(zpool_handle_t *, zpool_prop_t, char *, + size_t proplen, zprop_source_t *, boolean_t literal); +extern uint64_t zpool_get_prop_int(zpool_handle_t *, zpool_prop_t, + zprop_source_t *); + +extern const char *zpool_prop_to_name(zpool_prop_t); +extern const char *zpool_prop_values(zpool_prop_t); + +/* + * Pool health statistics. + */ +typedef enum { + /* + * The following correspond to faults as defined in the (fault.fs.zfs.*) + * event namespace. Each is associated with a corresponding message ID. + */ + ZPOOL_STATUS_CORRUPT_CACHE, /* corrupt /kernel/drv/zpool.cache */ + ZPOOL_STATUS_MISSING_DEV_R, /* missing device with replicas */ + ZPOOL_STATUS_MISSING_DEV_NR, /* missing device with no replicas */ + ZPOOL_STATUS_CORRUPT_LABEL_R, /* bad device label with replicas */ + ZPOOL_STATUS_CORRUPT_LABEL_NR, /* bad device label with no replicas */ + ZPOOL_STATUS_BAD_GUID_SUM, /* sum of device guids didn't match */ + ZPOOL_STATUS_CORRUPT_POOL, /* pool metadata is corrupted */ + ZPOOL_STATUS_CORRUPT_DATA, /* data errors in user (meta)data */ + ZPOOL_STATUS_FAILING_DEV, /* device experiencing errors */ + ZPOOL_STATUS_VERSION_NEWER, /* newer on-disk version */ + ZPOOL_STATUS_HOSTID_MISMATCH, /* last accessed by another system */ + ZPOOL_STATUS_HOSTID_ACTIVE, /* currently active on another system */ + ZPOOL_STATUS_HOSTID_REQUIRED, /* multihost=on and hostid=0 */ + ZPOOL_STATUS_IO_FAILURE_WAIT, /* failed I/O, failmode 'wait' */ + ZPOOL_STATUS_IO_FAILURE_CONTINUE, /* failed I/O, failmode 'continue' */ + ZPOOL_STATUS_BAD_LOG, /* cannot read log chain(s) */ + ZPOOL_STATUS_ERRATA, /* informational errata available */ + + /* + * If the pool has unsupported features but can still be opened in + * read-only mode, its status is ZPOOL_STATUS_UNSUP_FEAT_WRITE. If the + * pool has unsupported features but cannot be opened at all, its + * status is ZPOOL_STATUS_UNSUP_FEAT_READ. + */ + ZPOOL_STATUS_UNSUP_FEAT_READ, /* unsupported features for read */ + ZPOOL_STATUS_UNSUP_FEAT_WRITE, /* unsupported features for write */ + + /* + * These faults have no corresponding message ID. At the time we are + * checking the status, the original reason for the FMA fault (I/O or + * checksum errors) has been lost. + */ + ZPOOL_STATUS_FAULTED_DEV_R, /* faulted device with replicas */ + ZPOOL_STATUS_FAULTED_DEV_NR, /* faulted device with no replicas */ + + /* + * The following are not faults per se, but still an error possibly + * requiring administrative attention. There is no corresponding + * message ID. + */ + ZPOOL_STATUS_VERSION_OLDER, /* older legacy on-disk version */ + ZPOOL_STATUS_FEAT_DISABLED, /* supported features are disabled */ + ZPOOL_STATUS_RESILVERING, /* device being resilvered */ + ZPOOL_STATUS_OFFLINE_DEV, /* device offline */ + ZPOOL_STATUS_REMOVED_DEV, /* removed device */ + + /* + * Finally, the following indicates a healthy pool. + */ + ZPOOL_STATUS_OK +} zpool_status_t; + +extern unsigned long get_system_hostid(void); +extern zpool_status_t zpool_get_status(zpool_handle_t *, char **, + zpool_errata_t *); +extern zpool_status_t zpool_import_status(nvlist_t *, char **, + zpool_errata_t *); +extern void zpool_dump_ddt(const ddt_stat_t *dds, const ddt_histogram_t *ddh); + +/* + * Statistics and configuration functions. + */ +extern nvlist_t *zpool_get_config(zpool_handle_t *, nvlist_t **); +extern nvlist_t *zpool_get_features(zpool_handle_t *); +extern int zpool_refresh_stats(zpool_handle_t *, boolean_t *); +extern int zpool_get_errlog(zpool_handle_t *, nvlist_t **); + +/* + * Import and export functions + */ +extern int zpool_export(zpool_handle_t *, boolean_t, const char *); +extern int zpool_export_force(zpool_handle_t *, const char *); +extern int zpool_import(libzfs_handle_t *, nvlist_t *, const char *, + char *altroot); +extern int zpool_import_props(libzfs_handle_t *, nvlist_t *, const char *, + nvlist_t *, int); +extern void zpool_print_unsup_feat(nvlist_t *config); + +/* + * Search for pools to import + */ + +typedef struct importargs { + char **path; /* a list of paths to search */ + int paths; /* number of paths to search */ + char *poolname; /* name of a pool to find */ + uint64_t guid; /* guid of a pool to find */ + char *cachefile; /* cachefile to use for import */ + int can_be_active : 1; /* can the pool be active? */ + int unique : 1; /* does 'poolname' already exist? */ + int exists : 1; /* set on return if pool already exists */ + int scan : 1; /* prefer scanning to libblkid cache */ +} importargs_t; + +extern nvlist_t *zpool_search_import(libzfs_handle_t *, importargs_t *); +extern int zpool_tryimport(libzfs_handle_t *hdl, char *target, + nvlist_t **configp, importargs_t *args); + +/* legacy pool search routines */ +extern nvlist_t *zpool_find_import(libzfs_handle_t *, int, char **); +extern nvlist_t *zpool_find_import_cached(libzfs_handle_t *, const char *, + char *, uint64_t); + +/* + * Miscellaneous pool functions + */ +struct zfs_cmd; + +extern const char *zfs_history_event_names[]; + +typedef enum { + VDEV_NAME_PATH = 1 << 0, + VDEV_NAME_GUID = 1 << 1, + VDEV_NAME_FOLLOW_LINKS = 1 << 2, + VDEV_NAME_TYPE_ID = 1 << 3, +} vdev_name_t; + +extern char *zpool_vdev_name(libzfs_handle_t *, zpool_handle_t *, nvlist_t *, + int name_flags); +extern int zpool_upgrade(zpool_handle_t *, uint64_t); +extern int zpool_get_history(zpool_handle_t *, nvlist_t **); +extern int zpool_history_unpack(char *, uint64_t, uint64_t *, + nvlist_t ***, uint_t *); +extern int zpool_events_next(libzfs_handle_t *, nvlist_t **, int *, unsigned, + int); +extern int zpool_events_clear(libzfs_handle_t *, int *); +extern int zpool_events_seek(libzfs_handle_t *, uint64_t, int); +extern void zpool_obj_to_path(zpool_handle_t *, uint64_t, uint64_t, char *, + size_t len); +extern int zfs_ioctl(libzfs_handle_t *, int, struct zfs_cmd *); +extern int zpool_get_physpath(zpool_handle_t *, char *, size_t); +extern void zpool_explain_recover(libzfs_handle_t *, const char *, int, + nvlist_t *); + +/* + * Basic handle manipulations. These functions do not create or destroy the + * underlying datasets, only the references to them. + */ +extern zfs_handle_t *zfs_open(libzfs_handle_t *, const char *, int); +extern zfs_handle_t *zfs_handle_dup(zfs_handle_t *); +extern void zfs_close(zfs_handle_t *); +extern zfs_type_t zfs_get_type(const zfs_handle_t *); +extern const char *zfs_get_name(const zfs_handle_t *); +extern zpool_handle_t *zfs_get_pool_handle(const zfs_handle_t *); +extern const char *zfs_get_pool_name(const zfs_handle_t *); + +/* + * Property management functions. Some functions are shared with the kernel, + * and are found in sys/fs/zfs.h. + */ + +/* + * zfs dataset property management + */ +extern const char *zfs_prop_default_string(zfs_prop_t); +extern uint64_t zfs_prop_default_numeric(zfs_prop_t); +extern const char *zfs_prop_column_name(zfs_prop_t); +extern boolean_t zfs_prop_align_right(zfs_prop_t); + +extern nvlist_t *zfs_valid_proplist(libzfs_handle_t *, zfs_type_t, + nvlist_t *, uint64_t, zfs_handle_t *, zpool_handle_t *, const char *); + +extern const char *zfs_prop_to_name(zfs_prop_t); +extern int zfs_prop_set(zfs_handle_t *, const char *, const char *); +extern int zfs_prop_set_list(zfs_handle_t *, nvlist_t *); +extern int zfs_prop_get(zfs_handle_t *, zfs_prop_t, char *, size_t, + zprop_source_t *, char *, size_t, boolean_t); +extern int zfs_prop_get_recvd(zfs_handle_t *, const char *, char *, size_t, + boolean_t); +extern int zfs_prop_get_numeric(zfs_handle_t *, zfs_prop_t, uint64_t *, + zprop_source_t *, char *, size_t); +extern int zfs_prop_get_userquota_int(zfs_handle_t *zhp, const char *propname, + uint64_t *propvalue); +extern int zfs_prop_get_userquota(zfs_handle_t *zhp, const char *propname, + char *propbuf, int proplen, boolean_t literal); +extern int zfs_prop_get_written_int(zfs_handle_t *zhp, const char *propname, + uint64_t *propvalue); +extern int zfs_prop_get_written(zfs_handle_t *zhp, const char *propname, + char *propbuf, int proplen, boolean_t literal); +extern int zfs_prop_get_feature(zfs_handle_t *zhp, const char *propname, + char *buf, size_t len); +extern uint64_t getprop_uint64(zfs_handle_t *, zfs_prop_t, char **); +extern uint64_t zfs_prop_get_int(zfs_handle_t *, zfs_prop_t); +extern int zfs_prop_inherit(zfs_handle_t *, const char *, boolean_t); +extern const char *zfs_prop_values(zfs_prop_t); +extern int zfs_prop_is_string(zfs_prop_t prop); +extern nvlist_t *zfs_get_user_props(zfs_handle_t *); +extern nvlist_t *zfs_get_recvd_props(zfs_handle_t *); +extern nvlist_t *zfs_get_clones_nvl(zfs_handle_t *); + +typedef struct zprop_list { + int pl_prop; + char *pl_user_prop; + struct zprop_list *pl_next; + boolean_t pl_all; + size_t pl_width; + size_t pl_recvd_width; + boolean_t pl_fixed; +} zprop_list_t; + +extern int zfs_expand_proplist(zfs_handle_t *, zprop_list_t **, boolean_t, + boolean_t); +extern void zfs_prune_proplist(zfs_handle_t *, uint8_t *); + +#define ZFS_MOUNTPOINT_NONE "none" +#define ZFS_MOUNTPOINT_LEGACY "legacy" + +#define ZFS_FEATURE_DISABLED "disabled" +#define ZFS_FEATURE_ENABLED "enabled" +#define ZFS_FEATURE_ACTIVE "active" + +#define ZFS_UNSUPPORTED_INACTIVE "inactive" +#define ZFS_UNSUPPORTED_READONLY "readonly" + +/* + * zpool property management + */ +extern int zpool_expand_proplist(zpool_handle_t *, zprop_list_t **); +extern int zpool_prop_get_feature(zpool_handle_t *, const char *, char *, + size_t); +extern const char *zpool_prop_default_string(zpool_prop_t); +extern uint64_t zpool_prop_default_numeric(zpool_prop_t); +extern const char *zpool_prop_column_name(zpool_prop_t); +extern boolean_t zpool_prop_align_right(zpool_prop_t); + +/* + * Functions shared by zfs and zpool property management. + */ +extern int zprop_iter(zprop_func func, void *cb, boolean_t show_all, + boolean_t ordered, zfs_type_t type); +extern int zprop_get_list(libzfs_handle_t *, char *, zprop_list_t **, + zfs_type_t); +extern void zprop_free_list(zprop_list_t *); + +#define ZFS_GET_NCOLS 5 + +typedef enum { + GET_COL_NONE, + GET_COL_NAME, + GET_COL_PROPERTY, + GET_COL_VALUE, + GET_COL_RECVD, + GET_COL_SOURCE +} zfs_get_column_t; + +/* + * Functions for printing zfs or zpool properties + */ +typedef struct zprop_get_cbdata { + int cb_sources; + zfs_get_column_t cb_columns[ZFS_GET_NCOLS]; + int cb_colwidths[ZFS_GET_NCOLS + 1]; + boolean_t cb_scripted; + boolean_t cb_literal; + boolean_t cb_first; + zprop_list_t *cb_proplist; + zfs_type_t cb_type; +} zprop_get_cbdata_t; + +void zprop_print_one_property(const char *, zprop_get_cbdata_t *, + const char *, const char *, zprop_source_t, const char *, + const char *); + +/* + * Iterator functions. + */ +typedef int (*zfs_iter_f)(zfs_handle_t *, void *); +extern int zfs_iter_root(libzfs_handle_t *, zfs_iter_f, void *); +extern int zfs_iter_children(zfs_handle_t *, zfs_iter_f, void *); +extern int zfs_iter_dependents(zfs_handle_t *, boolean_t, zfs_iter_f, void *); +extern int zfs_iter_filesystems(zfs_handle_t *, zfs_iter_f, void *); +extern int zfs_iter_snapshots(zfs_handle_t *, boolean_t, zfs_iter_f, void *); +extern int zfs_iter_snapshots_sorted(zfs_handle_t *, zfs_iter_f, void *); +extern int zfs_iter_snapspec(zfs_handle_t *, const char *, zfs_iter_f, void *); +extern int zfs_iter_bookmarks(zfs_handle_t *, zfs_iter_f, void *); + +typedef struct get_all_cb { + zfs_handle_t **cb_handles; + size_t cb_alloc; + size_t cb_used; + boolean_t cb_verbose; + int (*cb_getone)(zfs_handle_t *, void *); +} get_all_cb_t; + +void libzfs_add_handle(get_all_cb_t *, zfs_handle_t *); +int libzfs_dataset_cmp(const void *, const void *); + +/* + * Functions to create and destroy datasets. + */ +extern int zfs_create(libzfs_handle_t *, const char *, zfs_type_t, + nvlist_t *); +extern int zfs_create_ancestors(libzfs_handle_t *, const char *); +extern int zfs_destroy(zfs_handle_t *, boolean_t); +extern int zfs_destroy_snaps(zfs_handle_t *, char *, boolean_t); +extern int zfs_destroy_snaps_nvl(libzfs_handle_t *, nvlist_t *, boolean_t); +extern int zfs_clone(zfs_handle_t *, const char *, nvlist_t *); +extern int zfs_snapshot(libzfs_handle_t *, const char *, boolean_t, nvlist_t *); +extern int zfs_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, + nvlist_t *props); +extern int zfs_rollback(zfs_handle_t *, zfs_handle_t *, boolean_t); +extern int zfs_rename(zfs_handle_t *, const char *, boolean_t, boolean_t); + +typedef struct sendflags { + /* print informational messages (ie, -v was specified) */ + boolean_t verbose; + + /* recursive send (ie, -R) */ + boolean_t replicate; + + /* for incrementals, do all intermediate snapshots */ + boolean_t doall; + + /* if dataset is a clone, do incremental from its origin */ + boolean_t fromorigin; + + /* do deduplication */ + boolean_t dedup; + + /* send properties (ie, -p) */ + boolean_t props; + + /* do not send (no-op, ie. -n) */ + boolean_t dryrun; + + /* parsable verbose output (ie. -P) */ + boolean_t parsable; + + /* show progress (ie. -v) */ + boolean_t progress; + + /* large blocks (>128K) are permitted */ + boolean_t largeblock; + + /* WRITE_EMBEDDED records of type DATA are permitted */ + boolean_t embed_data; + + /* compressed WRITE records are permitted */ + boolean_t compress; +} sendflags_t; + +typedef boolean_t (snapfilter_cb_t)(zfs_handle_t *, void *); + +extern int zfs_send(zfs_handle_t *, const char *, const char *, + sendflags_t *, int, snapfilter_cb_t, void *, nvlist_t **); +extern int zfs_send_one(zfs_handle_t *, const char *, int, enum lzc_send_flags); +extern int zfs_send_resume(libzfs_handle_t *, sendflags_t *, int outfd, + const char *); +extern nvlist_t *zfs_send_resume_token_to_nvlist(libzfs_handle_t *hdl, + const char *token); + +extern int zfs_promote(zfs_handle_t *); +extern int zfs_hold(zfs_handle_t *, const char *, const char *, + boolean_t, int); +extern int zfs_hold_nvl(zfs_handle_t *, int, nvlist_t *); +extern int zfs_release(zfs_handle_t *, const char *, const char *, boolean_t); +extern int zfs_get_holds(zfs_handle_t *, nvlist_t **); +extern uint64_t zvol_volsize_to_reservation(uint64_t, nvlist_t *); + +typedef int (*zfs_userspace_cb_t)(void *arg, const char *domain, + uid_t rid, uint64_t space); + +extern int zfs_userspace(zfs_handle_t *, zfs_userquota_prop_t, + zfs_userspace_cb_t, void *); + +extern int zfs_get_fsacl(zfs_handle_t *, nvlist_t **); +extern int zfs_set_fsacl(zfs_handle_t *, boolean_t, nvlist_t *); + +typedef struct recvflags { + /* print informational messages (ie, -v was specified) */ + boolean_t verbose; + + /* the destination is a prefix, not the exact fs (ie, -d) */ + boolean_t isprefix; + + /* + * Only the tail of the sent snapshot path is appended to the + * destination to determine the received snapshot name (ie, -e). + */ + boolean_t istail; + + /* do not actually do the recv, just check if it would work (ie, -n) */ + boolean_t dryrun; + + /* rollback/destroy filesystems as necessary (eg, -F) */ + boolean_t force; + + /* set "canmount=off" on all modified filesystems */ + boolean_t canmountoff; + + /* + * Mark the file systems as "resumable" and do not destroy them if the + * receive is interrupted + */ + boolean_t resumable; + + /* byteswap flag is used internally; callers need not specify */ + boolean_t byteswap; + + /* do not mount file systems as they are extracted (private) */ + boolean_t nomount; +} recvflags_t; + +extern int zfs_receive(libzfs_handle_t *, const char *, nvlist_t *, + recvflags_t *, int, avl_tree_t *); + +typedef enum diff_flags { + ZFS_DIFF_PARSEABLE = 0x1, + ZFS_DIFF_TIMESTAMP = 0x2, + ZFS_DIFF_CLASSIFY = 0x4 +} diff_flags_t; + +extern int zfs_show_diffs(zfs_handle_t *, int, const char *, const char *, + int); + +/* + * Miscellaneous functions. + */ +extern const char *zfs_type_to_name(zfs_type_t); +extern void zfs_refresh_properties(zfs_handle_t *); +extern int zfs_name_valid(const char *, zfs_type_t); +extern zfs_handle_t *zfs_path_to_zhandle(libzfs_handle_t *, char *, zfs_type_t); +extern boolean_t zfs_dataset_exists(libzfs_handle_t *, const char *, + zfs_type_t); +extern int zfs_spa_version(zfs_handle_t *, int *); +extern boolean_t zfs_bookmark_exists(const char *path); +extern int zfs_append_partition(char *path, size_t max_len); +extern int zfs_resolve_shortname(const char *name, char *path, size_t pathlen); +extern int zfs_strcmp_pathname(char *name, char *cmp_name, int wholedisk); +extern int zfs_path_order(char *path, int *order); + +/* + * Mount support functions. + */ +extern boolean_t is_mounted(libzfs_handle_t *, const char *special, char **); +extern boolean_t zfs_is_mounted(zfs_handle_t *, char **); +extern int zfs_mount(zfs_handle_t *, const char *, int); +extern int zfs_unmount(zfs_handle_t *, const char *, int); +extern int zfs_unmountall(zfs_handle_t *, int); + +/* + * Share support functions. + */ +extern boolean_t zfs_is_shared(zfs_handle_t *); +extern int zfs_share(zfs_handle_t *); +extern int zfs_unshare(zfs_handle_t *); + +/* + * Protocol-specific share support functions. + */ +extern boolean_t zfs_is_shared_nfs(zfs_handle_t *, char **); +extern boolean_t zfs_is_shared_smb(zfs_handle_t *, char **); +extern int zfs_share_nfs(zfs_handle_t *); +extern int zfs_share_smb(zfs_handle_t *); +extern int zfs_shareall(zfs_handle_t *); +extern int zfs_unshare_nfs(zfs_handle_t *, const char *); +extern int zfs_unshare_smb(zfs_handle_t *, const char *); +extern int zfs_unshareall_nfs(zfs_handle_t *); +extern int zfs_unshareall_smb(zfs_handle_t *); +extern int zfs_unshareall_bypath(zfs_handle_t *, const char *); +extern int zfs_unshareall_bytype(zfs_handle_t *, const char *, const char *); +extern int zfs_unshareall(zfs_handle_t *); +extern int zfs_deleg_share_nfs(libzfs_handle_t *, char *, char *, char *, + void *, void *, int, zfs_share_op_t); + +/* + * Formats for iostat numbers. Examples: "12K", "30ms", "4B", "2321234", "-". + * + * ZFS_NICENUM_1024: Print kilo, mega, tera, peta, exa.. + * ZFS_NICENUM_BYTES: Print single bytes ("13B"), kilo, mega, tera... + * ZFS_NICENUM_TIME: Print nanosecs, microsecs, millisecs, seconds... + * ZFS_NICENUM_RAW: Print the raw number without any formatting + * ZFS_NICENUM_RAWTIME: Same as RAW, but print dashes ('-') for zero. + */ +enum zfs_nicenum_format { + ZFS_NICENUM_1024 = 0, + ZFS_NICENUM_BYTES = 1, + ZFS_NICENUM_TIME = 2, + ZFS_NICENUM_RAW = 3, + ZFS_NICENUM_RAWTIME = 4 +}; + +/* + * Utility function to convert a number to a human-readable form. + */ +extern void zfs_nicenum(uint64_t, char *, size_t); +extern void zfs_nicenum_format(uint64_t num, char *buf, size_t buflen, + enum zfs_nicenum_format type); + + +extern void zfs_nicetime(uint64_t, char *, size_t); +extern void zfs_nicebytes(uint64_t, char *, size_t); +extern int zfs_nicestrtonum(libzfs_handle_t *, const char *, uint64_t *); + +/* + * Utility functions to run an external process. + */ +#define STDOUT_VERBOSE 0x01 +#define STDERR_VERBOSE 0x02 +#define NO_DEFAULT_PATH 0x04 /* Don't use $PATH to lookup the command */ + +int libzfs_run_process(const char *, char **, int flags); +int libzfs_run_process_get_stdout(const char *path, char *argv[], char *env[], + char **lines[], int *lines_cnt); +int libzfs_run_process_get_stdout_nopath(const char *path, char *argv[], + char *env[], char **lines[], int *lines_cnt); + +void libzfs_free_str_array(char **strs, int count); + +int libzfs_envvar_is_set(char *envvar); + +/* + * Given a device or file, determine if it is part of a pool. + */ +extern int zpool_in_use(libzfs_handle_t *, int, pool_state_t *, char **, + boolean_t *); + +/* + * Label manipulation. + */ +extern int zpool_read_label(int, nvlist_t **, int *); +extern int zpool_clear_label(int); + +/* + * Management interfaces for SMB ACL files + */ + +int zfs_smb_acl_add(libzfs_handle_t *, char *, char *, char *); +int zfs_smb_acl_remove(libzfs_handle_t *, char *, char *, char *); +int zfs_smb_acl_purge(libzfs_handle_t *, char *, char *); +int zfs_smb_acl_rename(libzfs_handle_t *, char *, char *, char *, char *); + +/* + * Enable and disable datasets within a pool by mounting/unmounting and + * sharing/unsharing them. + */ +extern int zpool_enable_datasets(zpool_handle_t *, const char *, int); +extern int zpool_disable_datasets(zpool_handle_t *, boolean_t); + +/* + * Mappings between vdev and FRU. + */ +extern void libzfs_fru_refresh(libzfs_handle_t *); +extern const char *libzfs_fru_lookup(libzfs_handle_t *, const char *); +extern const char *libzfs_fru_devpath(libzfs_handle_t *, const char *); +extern boolean_t libzfs_fru_compare(libzfs_handle_t *, const char *, + const char *); +extern boolean_t libzfs_fru_notself(libzfs_handle_t *, const char *); +extern int zpool_fru_set(zpool_handle_t *, uint64_t, const char *); + +/* + * Support for Linux libudev derived persistent device strings + */ +extern boolean_t is_mpath_whole_disk(const char *); +extern void update_vdev_config_dev_strs(nvlist_t *); +extern char *zfs_strip_partition(char *); +extern char *zfs_strip_partition_path(char *); + +#ifdef HAVE_LIBUDEV +struct udev_device; + +extern boolean_t udev_is_mpath(struct udev_device *dev); +extern int zfs_device_get_devid(struct udev_device *, char *, size_t); +extern int zfs_device_get_physical(struct udev_device *, char *, size_t); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBZFS_H */ --- linux-aws-4.15.0.orig/zfs/include/libzfs_core.h +++ linux-aws-4.15.0/zfs/include/libzfs_core.h @@ -0,0 +1,102 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright (c) 2017 Datto Inc. + * Copyright 2017 RackTop Systems. + */ + +#ifndef _LIBZFS_CORE_H +#define _LIBZFS_CORE_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int libzfs_core_init(void); +void libzfs_core_fini(void); + +/* + * NB: this type should be kept binary compatible with dmu_objset_type_t. + */ +enum lzc_dataset_type { + LZC_DATSET_TYPE_ZFS = 2, + LZC_DATSET_TYPE_ZVOL +}; + +int lzc_snapshot(nvlist_t *, nvlist_t *, nvlist_t **); +int lzc_create(const char *, enum lzc_dataset_type, nvlist_t *); +int lzc_clone(const char *, const char *, nvlist_t *); +int lzc_promote(const char *, char *, int); +int lzc_destroy_snaps(nvlist_t *, boolean_t, nvlist_t **); +int lzc_bookmark(nvlist_t *, nvlist_t **); +int lzc_get_bookmarks(const char *, nvlist_t *, nvlist_t **); +int lzc_destroy_bookmarks(nvlist_t *, nvlist_t **); + +int lzc_snaprange_space(const char *, const char *, uint64_t *); + +int lzc_hold(nvlist_t *, int, nvlist_t **); +int lzc_release(nvlist_t *, nvlist_t **); +int lzc_get_holds(const char *, nvlist_t **); + +enum lzc_send_flags { + LZC_SEND_FLAG_EMBED_DATA = 1 << 0, + LZC_SEND_FLAG_LARGE_BLOCK = 1 << 1, + LZC_SEND_FLAG_COMPRESS = 1 << 2 +}; + +int lzc_send(const char *, const char *, int, enum lzc_send_flags); +int lzc_send_resume(const char *, const char *, int, + enum lzc_send_flags, uint64_t, uint64_t); +int lzc_send_space(const char *, const char *, enum lzc_send_flags, uint64_t *); + +struct dmu_replay_record; + +int lzc_receive(const char *, nvlist_t *, const char *, boolean_t, int); +int lzc_receive_resumable(const char *, nvlist_t *, const char *, + boolean_t, int); +int lzc_receive_with_header(const char *, nvlist_t *, const char *, boolean_t, + boolean_t, int, const struct dmu_replay_record *); +int lzc_receive_one(const char *, nvlist_t *, const char *, boolean_t, + boolean_t, int, const struct dmu_replay_record *, int, uint64_t *, + uint64_t *, uint64_t *, nvlist_t **); +int lzc_receive_with_cmdprops(const char *, nvlist_t *, nvlist_t *, + const char *, boolean_t, boolean_t, int, const struct dmu_replay_record *, + int, uint64_t *, uint64_t *, uint64_t *, nvlist_t **); + +boolean_t lzc_exists(const char *); + +int lzc_rollback(const char *, char *, int); +int lzc_rollback_to(const char *, const char *); + +int lzc_sync(const char *, nvlist_t *, nvlist_t **); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBZFS_CORE_H */ --- linux-aws-4.15.0.orig/zfs/include/libzfs_impl.h +++ linux-aws-4.15.0/zfs/include/libzfs_impl.h @@ -0,0 +1,217 @@ +/* + * CDDL HEADER SART + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +#ifndef _LIBZFS_IMPL_H +#define _LIBZFS_IMPL_H + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if defined(HAVE_LIBTOPO) +#include +#endif /* HAVE_LIBTOPO */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct libzfs_fru { + char *zf_device; + char *zf_fru; + struct libzfs_fru *zf_chain; + struct libzfs_fru *zf_next; +} libzfs_fru_t; + +struct libzfs_handle { + int libzfs_error; + int libzfs_fd; + FILE *libzfs_mnttab; + FILE *libzfs_sharetab; + zpool_handle_t *libzfs_pool_handles; + uu_avl_pool_t *libzfs_ns_avlpool; + uu_avl_t *libzfs_ns_avl; + uint64_t libzfs_ns_gen; + int libzfs_desc_active; + char libzfs_action[1024]; + char libzfs_desc[1024]; + int libzfs_printerr; + int libzfs_storeerr; /* stuff error messages into buffer */ + void *libzfs_sharehdl; /* libshare handle */ + uint_t libzfs_shareflags; + boolean_t libzfs_mnttab_enable; + avl_tree_t libzfs_mnttab_cache; + int libzfs_pool_iter; +#if defined(HAVE_LIBTOPO) + topo_hdl_t *libzfs_topo_hdl; + libzfs_fru_t **libzfs_fru_hash; + libzfs_fru_t *libzfs_fru_list; +#endif /* HAVE_LIBTOPO */ + char libzfs_chassis_id[256]; +}; + +#define ZFSSHARE_MISS 0x01 /* Didn't find entry in cache */ + +struct zfs_handle { + libzfs_handle_t *zfs_hdl; + zpool_handle_t *zpool_hdl; + char zfs_name[ZFS_MAX_DATASET_NAME_LEN]; + zfs_type_t zfs_type; /* type including snapshot */ + zfs_type_t zfs_head_type; /* type excluding snapshot */ + dmu_objset_stats_t zfs_dmustats; + nvlist_t *zfs_props; + nvlist_t *zfs_user_props; + nvlist_t *zfs_recvd_props; + boolean_t zfs_mntcheck; + char *zfs_mntopts; + uint8_t *zfs_props_table; +}; + +/* + * This is different from checking zfs_type, because it will also catch + * snapshots of volumes. + */ +#define ZFS_IS_VOLUME(zhp) ((zhp)->zfs_head_type == ZFS_TYPE_VOLUME) + +struct zpool_handle { + libzfs_handle_t *zpool_hdl; + zpool_handle_t *zpool_next; + char zpool_name[ZFS_MAX_DATASET_NAME_LEN]; + int zpool_state; + size_t zpool_config_size; + nvlist_t *zpool_config; + nvlist_t *zpool_old_config; + nvlist_t *zpool_props; + diskaddr_t zpool_start_block; +}; + +typedef enum { + PROTO_NFS = 0, + PROTO_SMB = 1, + PROTO_END = 2 +} zfs_share_proto_t; + +/* + * The following can be used as a bitmask and any new values + * added must preserve that capability. + */ +typedef enum { + SHARED_NOT_SHARED = 0x0, + SHARED_NFS = 0x2, + SHARED_SMB = 0x4 +} zfs_share_type_t; + +#define CONFIG_BUF_MINSIZE 262144 + +int zfs_error(libzfs_handle_t *, int, const char *); +int zfs_error_fmt(libzfs_handle_t *, int, const char *, ...); +void zfs_error_aux(libzfs_handle_t *, const char *, ...); +void *zfs_alloc(libzfs_handle_t *, size_t); +void *zfs_realloc(libzfs_handle_t *, void *, size_t, size_t); +char *zfs_asprintf(libzfs_handle_t *, const char *, ...); +char *zfs_strdup(libzfs_handle_t *, const char *); +int no_memory(libzfs_handle_t *); + +int zfs_standard_error(libzfs_handle_t *, int, const char *); +int zfs_standard_error_fmt(libzfs_handle_t *, int, const char *, ...); +int zpool_standard_error(libzfs_handle_t *, int, const char *); +int zpool_standard_error_fmt(libzfs_handle_t *, int, const char *, ...); + +zfs_handle_t *make_dataset_handle_zc(libzfs_handle_t *, zfs_cmd_t *); +zfs_handle_t *make_dataset_simple_handle_zc(zfs_handle_t *, zfs_cmd_t *); + +int zprop_parse_value(libzfs_handle_t *, nvpair_t *, int, zfs_type_t, + nvlist_t *, char **, uint64_t *, const char *); +int zprop_expand_list(libzfs_handle_t *hdl, zprop_list_t **plp, + zfs_type_t type); + +/* + * Use this changelist_gather() flag to force attempting mounts + * on each change node regardless of whether or not it is currently + * mounted. + */ +#define CL_GATHER_MOUNT_ALWAYS 1 + +typedef struct prop_changelist prop_changelist_t; + +int zcmd_alloc_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, size_t); +int zcmd_write_src_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *); +int zcmd_write_conf_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t *); +int zcmd_expand_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *); +int zcmd_read_dst_nvlist(libzfs_handle_t *, zfs_cmd_t *, nvlist_t **); +void zcmd_free_nvlists(zfs_cmd_t *); + +int changelist_prefix(prop_changelist_t *); +int changelist_postfix(prop_changelist_t *); +void changelist_rename(prop_changelist_t *, const char *, const char *); +void changelist_remove(prop_changelist_t *, const char *); +void changelist_free(prop_changelist_t *); +prop_changelist_t *changelist_gather(zfs_handle_t *, zfs_prop_t, int, int); +int changelist_unshare(prop_changelist_t *, zfs_share_proto_t *); +int changelist_haszonedchild(prop_changelist_t *); + +void remove_mountpoint(zfs_handle_t *); +int create_parents(libzfs_handle_t *, char *, int); +boolean_t isa_child_of(const char *dataset, const char *parent); + +zfs_handle_t *make_dataset_handle(libzfs_handle_t *, const char *); +zfs_handle_t *make_bookmark_handle(zfs_handle_t *, const char *, + nvlist_t *props); + +int zpool_open_silent(libzfs_handle_t *, const char *, zpool_handle_t **); + +boolean_t zpool_name_valid(libzfs_handle_t *, boolean_t, const char *); + +int zfs_validate_name(libzfs_handle_t *hdl, const char *path, int type, + boolean_t modifying); + +void namespace_clear(libzfs_handle_t *); + +/* + * libshare (sharemgr) interfaces used internally. + */ + +extern int zfs_init_libshare(libzfs_handle_t *, int); +extern void zfs_uninit_libshare(libzfs_handle_t *); +extern int zfs_parse_options(char *, zfs_share_proto_t); + +extern int zfs_unshare_proto(zfs_handle_t *, + const char *, zfs_share_proto_t *); + +extern void libzfs_fru_clear(libzfs_handle_t *, boolean_t); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBZFS_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/Makefile.am +++ linux-aws-4.15.0/zfs/include/linux/Makefile.am @@ -0,0 +1,26 @@ +COMMON_H = + +KERNEL_H = \ + $(top_srcdir)/include/linux/dcache_compat.h \ + $(top_srcdir)/include/linux/xattr_compat.h \ + $(top_srcdir)/include/linux/vfs_compat.h \ + $(top_srcdir)/include/linux/blkdev_compat.h \ + $(top_srcdir)/include/linux/utsname_compat.h \ + $(top_srcdir)/include/linux/kmap_compat.h \ + $(top_srcdir)/include/linux/simd_x86.h \ + $(top_srcdir)/include/linux/simd_aarch64.h \ + $(top_srcdir)/include/linux/mod_compat.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/linux +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/linux +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/linux/Makefile.in +++ linux-aws-4.15.0/zfs/include/linux/Makefile.in @@ -0,0 +1,800 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/linux +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(libzfs_HEADERS) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/linux/dcache_compat.h \ + $(top_srcdir)/include/linux/xattr_compat.h \ + $(top_srcdir)/include/linux/vfs_compat.h \ + $(top_srcdir)/include/linux/blkdev_compat.h \ + $(top_srcdir)/include/linux/utsname_compat.h \ + $(top_srcdir)/include/linux/kmap_compat.h \ + $(top_srcdir)/include/linux/simd_x86.h \ + $(top_srcdir)/include/linux/simd_aarch64.h \ + $(top_srcdir)/include/linux/mod_compat.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +COMMON_H = +KERNEL_H = \ + $(top_srcdir)/include/linux/dcache_compat.h \ + $(top_srcdir)/include/linux/xattr_compat.h \ + $(top_srcdir)/include/linux/vfs_compat.h \ + $(top_srcdir)/include/linux/blkdev_compat.h \ + $(top_srcdir)/include/linux/utsname_compat.h \ + $(top_srcdir)/include/linux/kmap_compat.h \ + $(top_srcdir)/include/linux/simd_x86.h \ + $(top_srcdir)/include/linux/simd_aarch64.h \ + $(top_srcdir)/include/linux/mod_compat.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/linux +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/linux +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/linux/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/linux/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS \ + install-libzfsHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/linux/blkdev_compat.h +++ linux-aws-4.15.0/zfs/include/linux/blkdev_compat.h @@ -0,0 +1,623 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * LLNL-CODE-403049. + */ + +#ifndef _ZFS_BLKDEV_H +#define _ZFS_BLKDEV_H + +#include +#include +#include + +#ifndef HAVE_FMODE_T +typedef unsigned __bitwise__ fmode_t; +#endif /* HAVE_FMODE_T */ + +/* + * 4.7 - 4.x API, + * The blk_queue_write_cache() interface has replaced blk_queue_flush() + * interface. However, the new interface is GPL-only thus we implement + * our own trivial wrapper when the GPL-only version is detected. + * + * 2.6.36 - 4.6 API, + * The blk_queue_flush() interface has replaced blk_queue_ordered() + * interface. However, while the old interface was available to all the + * new one is GPL-only. Thus if the GPL-only version is detected we + * implement our own trivial helper. + * + * 2.6.x - 2.6.35 + * Legacy blk_queue_ordered() interface. + */ +static inline void +blk_queue_set_write_cache(struct request_queue *q, bool wc, bool fua) +{ +#if defined(HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY) + spin_lock_irq(q->queue_lock); + if (wc) + queue_flag_set(QUEUE_FLAG_WC, q); + else + queue_flag_clear(QUEUE_FLAG_WC, q); + if (fua) + queue_flag_set(QUEUE_FLAG_FUA, q); + else + queue_flag_clear(QUEUE_FLAG_FUA, q); + spin_unlock_irq(q->queue_lock); +#elif defined(HAVE_BLK_QUEUE_WRITE_CACHE) + blk_queue_write_cache(q, wc, fua); +#elif defined(HAVE_BLK_QUEUE_FLUSH_GPL_ONLY) + if (wc) + q->flush_flags |= REQ_FLUSH; + if (fua) + q->flush_flags |= REQ_FUA; +#elif defined(HAVE_BLK_QUEUE_FLUSH) + blk_queue_flush(q, (wc ? REQ_FLUSH : 0) | (fua ? REQ_FUA : 0)); +#else + blk_queue_ordered(q, QUEUE_ORDERED_DRAIN, NULL); +#endif +} + +/* + * Most of the blk_* macros were removed in 2.6.36. Ostensibly this was + * done to improve readability and allow easier grepping. However, from + * a portability stand point the macros are helpful. Therefore the needed + * macros are redefined here if they are missing from the kernel. + */ +#ifndef blk_fs_request +#define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) +#endif + +/* + * 2.6.27 API change, + * The blk_queue_stackable() queue flag was added in 2.6.27 to handle dm + * stacking drivers. Prior to this request stacking drivers were detected + * by checking (q->request_fn == NULL), for earlier kernels we revert to + * this legacy behavior. + */ +#ifndef blk_queue_stackable +#define blk_queue_stackable(q) ((q)->request_fn == NULL) +#endif + +/* + * 2.6.34 API change, + * The blk_queue_max_hw_sectors() function replaces blk_queue_max_sectors(). + */ +#ifndef HAVE_BLK_QUEUE_MAX_HW_SECTORS +#define blk_queue_max_hw_sectors __blk_queue_max_hw_sectors +static inline void +__blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_sectors) +{ + blk_queue_max_sectors(q, max_hw_sectors); +} +#endif + +/* + * 2.6.34 API change, + * The blk_queue_max_segments() function consolidates + * blk_queue_max_hw_segments() and blk_queue_max_phys_segments(). + */ +#ifndef HAVE_BLK_QUEUE_MAX_SEGMENTS +#define blk_queue_max_segments __blk_queue_max_segments +static inline void +__blk_queue_max_segments(struct request_queue *q, unsigned short max_segments) +{ + blk_queue_max_phys_segments(q, max_segments); + blk_queue_max_hw_segments(q, max_segments); +} +#endif + +static inline void +blk_queue_set_read_ahead(struct request_queue *q, unsigned long ra_pages) +{ +#ifdef HAVE_BLK_QUEUE_BDI_DYNAMIC + q->backing_dev_info->ra_pages = ra_pages; +#else + q->backing_dev_info.ra_pages = ra_pages; +#endif +} + +#ifndef HAVE_GET_DISK_RO +static inline int +get_disk_ro(struct gendisk *disk) +{ + int policy = 0; + + if (disk->part[0]) + policy = disk->part[0]->policy; + + return (policy); +} +#endif /* HAVE_GET_DISK_RO */ + +#ifdef HAVE_BIO_BVEC_ITER +#define BIO_BI_SECTOR(bio) (bio)->bi_iter.bi_sector +#define BIO_BI_SIZE(bio) (bio)->bi_iter.bi_size +#define BIO_BI_IDX(bio) (bio)->bi_iter.bi_idx +#define BIO_BI_SKIP(bio) (bio)->bi_iter.bi_bvec_done +#define bio_for_each_segment4(bv, bvp, b, i) \ + bio_for_each_segment((bv), (b), (i)) +typedef struct bvec_iter bvec_iterator_t; +#else +#define BIO_BI_SECTOR(bio) (bio)->bi_sector +#define BIO_BI_SIZE(bio) (bio)->bi_size +#define BIO_BI_IDX(bio) (bio)->bi_idx +#define BIO_BI_SKIP(bio) (0) +#define bio_for_each_segment4(bv, bvp, b, i) \ + bio_for_each_segment((bvp), (b), (i)) +typedef int bvec_iterator_t; +#endif + +/* + * Portable helper for correctly setting the FAILFAST flags. The + * correct usage has changed 3 times from 2.6.12 to 2.6.38. + */ +static inline void +bio_set_flags_failfast(struct block_device *bdev, int *flags) +{ +#ifdef CONFIG_BUG + /* + * Disable FAILFAST for loopback devices because of the + * following incorrect BUG_ON() in loop_make_request(). + * This support is also disabled for md devices because the + * test suite layers md devices on top of loopback devices. + * This may be removed when the loopback driver is fixed. + * + * BUG_ON(!lo || (rw != READ && rw != WRITE)); + */ + if ((MAJOR(bdev->bd_dev) == LOOP_MAJOR) || + (MAJOR(bdev->bd_dev) == MD_MAJOR)) + return; + +#ifdef BLOCK_EXT_MAJOR + if (MAJOR(bdev->bd_dev) == BLOCK_EXT_MAJOR) + return; +#endif /* BLOCK_EXT_MAJOR */ +#endif /* CONFIG_BUG */ + +#if defined(HAVE_BIO_RW_FAILFAST_DTD) + /* BIO_RW_FAILFAST_* preferred interface from 2.6.28 - 2.6.35 */ + *flags |= ( + (1 << BIO_RW_FAILFAST_DEV) | + (1 << BIO_RW_FAILFAST_TRANSPORT) | + (1 << BIO_RW_FAILFAST_DRIVER)); +#elif defined(HAVE_REQ_FAILFAST_MASK) + /* + * REQ_FAILFAST_* preferred interface from 2.6.36 - 2.6.xx, + * the BIO_* and REQ_* flags were unified under REQ_* flags. + */ + *flags |= REQ_FAILFAST_MASK; +#else +#error "Undefined block IO FAILFAST interface." +#endif +} + +/* + * Maximum disk label length, it may be undefined for some kernels. + */ +#ifndef DISK_NAME_LEN +#define DISK_NAME_LEN 32 +#endif /* DISK_NAME_LEN */ + +#ifdef HAVE_BIO_BI_STATUS +static inline int +bi_status_to_errno(blk_status_t status) +{ + switch (status) { + case BLK_STS_OK: + return (0); + case BLK_STS_NOTSUPP: + return (EOPNOTSUPP); + case BLK_STS_TIMEOUT: + return (ETIMEDOUT); + case BLK_STS_NOSPC: + return (ENOSPC); + case BLK_STS_TRANSPORT: + return (ENOLINK); + case BLK_STS_TARGET: + return (EREMOTEIO); + case BLK_STS_NEXUS: + return (EBADE); + case BLK_STS_MEDIUM: + return (ENODATA); + case BLK_STS_PROTECTION: + return (EILSEQ); + case BLK_STS_RESOURCE: + return (ENOMEM); + case BLK_STS_AGAIN: + return (EAGAIN); + case BLK_STS_IOERR: + return (EIO); + default: + return (EIO); + } +} + +static inline blk_status_t +errno_to_bi_status(int error) +{ + switch (error) { + case 0: + return (BLK_STS_OK); + case EOPNOTSUPP: + return (BLK_STS_NOTSUPP); + case ETIMEDOUT: + return (BLK_STS_TIMEOUT); + case ENOSPC: + return (BLK_STS_NOSPC); + case ENOLINK: + return (BLK_STS_TRANSPORT); + case EREMOTEIO: + return (BLK_STS_TARGET); + case EBADE: + return (BLK_STS_NEXUS); + case ENODATA: + return (BLK_STS_MEDIUM); + case EILSEQ: + return (BLK_STS_PROTECTION); + case ENOMEM: + return (BLK_STS_RESOURCE); + case EAGAIN: + return (BLK_STS_AGAIN); + case EIO: + return (BLK_STS_IOERR); + default: + return (BLK_STS_IOERR); + } +} +#endif /* HAVE_BIO_BI_STATUS */ + +/* + * 4.3 API change + * The bio_endio() prototype changed slightly. These are helper + * macro's to ensure the prototype and invocation are handled. + */ +#ifdef HAVE_1ARG_BIO_END_IO_T +#ifdef HAVE_BIO_BI_STATUS +#define BIO_END_IO_ERROR(bio) bi_status_to_errno(bio->bi_status) +#define BIO_END_IO_PROTO(fn, x, z) static void fn(struct bio *x) +#define BIO_END_IO(bio, error) bio_set_bi_status(bio, error) +static inline void +bio_set_bi_status(struct bio *bio, int error) +{ + ASSERT3S(error, <=, 0); + bio->bi_status = errno_to_bi_status(-error); + bio_endio(bio); +} +#else +#define BIO_END_IO_ERROR(bio) (-(bio->bi_error)) +#define BIO_END_IO_PROTO(fn, x, z) static void fn(struct bio *x) +#define BIO_END_IO(bio, error) bio_set_bi_error(bio, error) +static inline void +bio_set_bi_error(struct bio *bio, int error) +{ + ASSERT3S(error, <=, 0); + bio->bi_error = error; + bio_endio(bio); +} +#endif /* HAVE_BIO_BI_STATUS */ + +#else +#define BIO_END_IO_PROTO(fn, x, z) static void fn(struct bio *x, int z) +#define BIO_END_IO(bio, error) bio_endio(bio, error); +#endif /* HAVE_1ARG_BIO_END_IO_T */ + +/* + * 2.6.38 - 2.6.x API, + * blkdev_get_by_path() + * blkdev_put() + * + * 2.6.28 - 2.6.37 API, + * open_bdev_exclusive() + * close_bdev_exclusive() + * + * 2.6.12 - 2.6.27 API, + * open_bdev_excl() + * close_bdev_excl() + * + * Used to exclusively open a block device from within the kernel. + */ +#if defined(HAVE_BLKDEV_GET_BY_PATH) +#define vdev_bdev_open(path, md, hld) blkdev_get_by_path(path, \ + (md) | FMODE_EXCL, hld) +#define vdev_bdev_close(bdev, md) blkdev_put(bdev, (md) | FMODE_EXCL) +#elif defined(HAVE_OPEN_BDEV_EXCLUSIVE) +#define vdev_bdev_open(path, md, hld) open_bdev_exclusive(path, md, hld) +#define vdev_bdev_close(bdev, md) close_bdev_exclusive(bdev, md) +#else +#define vdev_bdev_open(path, md, hld) open_bdev_excl(path, md, hld) +#define vdev_bdev_close(bdev, md) close_bdev_excl(bdev) +#endif /* HAVE_BLKDEV_GET_BY_PATH | HAVE_OPEN_BDEV_EXCLUSIVE */ + +/* + * 2.6.22 API change + * The function invalidate_bdev() lost it's second argument because + * it was unused. + */ +#ifdef HAVE_1ARG_INVALIDATE_BDEV +#define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev) +#else +#define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev, 1) +#endif /* HAVE_1ARG_INVALIDATE_BDEV */ + +/* + * 2.6.27 API change + * The function was exported for use, prior to this it existed but the + * symbol was not exported. + * + * 4.4.0-6.21 API change for Ubuntu + * lookup_bdev() gained a second argument, FMODE_*, to check inode permissions. + */ +#ifdef HAVE_1ARG_LOOKUP_BDEV +#define vdev_lookup_bdev(path) lookup_bdev(path) +#else +#ifdef HAVE_2ARGS_LOOKUP_BDEV +#define vdev_lookup_bdev(path) lookup_bdev(path, 0) +#else +#define vdev_lookup_bdev(path) ERR_PTR(-ENOTSUP) +#endif /* HAVE_2ARGS_LOOKUP_BDEV */ +#endif /* HAVE_1ARG_LOOKUP_BDEV */ + +/* + * 2.6.30 API change + * To ensure good performance preferentially use the physical block size + * for proper alignment. The physical size is supposed to be the internal + * sector size used by the device. This is often 4096 byte for AF devices, + * while a smaller 512 byte logical size is supported for compatibility. + * + * Unfortunately, many drives still misreport their physical sector size. + * For devices which are known to lie you may need to manually set this + * at pool creation time with 'zpool create -o ashift=12 ...'. + * + * When the physical block size interface isn't available, we fall back to + * the logical block size interface and then the older hard sector size. + */ +#ifdef HAVE_BDEV_PHYSICAL_BLOCK_SIZE +#define vdev_bdev_block_size(bdev) bdev_physical_block_size(bdev) +#else +#ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE +#define vdev_bdev_block_size(bdev) bdev_logical_block_size(bdev) +#else +#define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev) +#endif /* HAVE_BDEV_LOGICAL_BLOCK_SIZE */ +#endif /* HAVE_BDEV_PHYSICAL_BLOCK_SIZE */ + +#ifndef HAVE_BIO_SET_OP_ATTRS +/* + * Kernels without bio_set_op_attrs use bi_rw for the bio flags. + */ +static inline void +bio_set_op_attrs(struct bio *bio, unsigned rw, unsigned flags) +{ + bio->bi_rw |= rw | flags; +} +#endif + +/* + * bio_set_flush - Set the appropriate flags in a bio to guarantee + * data are on non-volatile media on completion. + * + * 2.6.X - 2.6.36 API, + * WRITE_BARRIER - Tells the block layer to commit all previously submitted + * writes to stable storage before this one is started and that the current + * write is on stable storage upon completion. Also prevents reordering + * on both sides of the current operation. + * + * 2.6.37 - 4.8 API, + * Introduce WRITE_FLUSH, WRITE_FUA, and WRITE_FLUSH_FUA flags as a + * replacement for WRITE_BARRIER to allow expressing richer semantics + * to the block layer. It's up to the block layer to implement the + * semantics correctly. Use the WRITE_FLUSH_FUA flag combination. + * + * 4.8 - 4.9 API, + * REQ_FLUSH was renamed to REQ_PREFLUSH. For consistency with previous + * ZoL releases, prefer the WRITE_FLUSH_FUA flag set if it's available. + * + * 4.10 API, + * The read/write flags and their modifiers, including WRITE_FLUSH, + * WRITE_FUA and WRITE_FLUSH_FUA were removed from fs.h in + * torvalds/linux@70fd7614 and replaced by direct flag modification + * of the REQ_ flags in bio->bi_opf. Use REQ_PREFLUSH. + */ +static inline void +bio_set_flush(struct bio *bio) +{ +#if defined(REQ_PREFLUSH) /* >= 4.10 */ + bio_set_op_attrs(bio, 0, REQ_PREFLUSH); +#elif defined(WRITE_FLUSH_FUA) /* >= 2.6.37 and <= 4.9 */ + bio_set_op_attrs(bio, 0, WRITE_FLUSH_FUA); +#elif defined(WRITE_BARRIER) /* < 2.6.37 */ + bio_set_op_attrs(bio, 0, WRITE_BARRIER); +#else +#error "Allowing the build will cause bio_set_flush requests to be ignored." +#endif +} + +/* + * 4.8 - 4.x API, + * REQ_OP_FLUSH + * + * 4.8-rc0 - 4.8-rc1, + * REQ_PREFLUSH + * + * 2.6.36 - 4.7 API, + * REQ_FLUSH + * + * 2.6.x - 2.6.35 API, + * HAVE_BIO_RW_BARRIER + * + * Used to determine if a cache flush has been requested. This check has + * been left intentionally broad in order to cover both a legacy flush + * and the new preflush behavior introduced in Linux 4.8. This is correct + * in all cases but may have a performance impact for some kernels. It + * has the advantage of minimizing kernel specific changes in the zvol code. + * + */ +static inline boolean_t +bio_is_flush(struct bio *bio) +{ +#if defined(HAVE_REQ_OP_FLUSH) && defined(HAVE_BIO_BI_OPF) + return ((bio_op(bio) == REQ_OP_FLUSH) || (bio->bi_opf & REQ_PREFLUSH)); +#elif defined(REQ_PREFLUSH) && defined(HAVE_BIO_BI_OPF) + return (bio->bi_opf & REQ_PREFLUSH); +#elif defined(REQ_PREFLUSH) && !defined(HAVE_BIO_BI_OPF) + return (bio->bi_rw & REQ_PREFLUSH); +#elif defined(REQ_FLUSH) + return (bio->bi_rw & REQ_FLUSH); +#elif defined(HAVE_BIO_RW_BARRIER) + return (bio->bi_rw & (1 << BIO_RW_BARRIER)); +#else +#error "Allowing the build will cause flush requests to be ignored." +#endif +} + +/* + * 4.8 - 4.x API, + * REQ_FUA flag moved to bio->bi_opf + * + * 2.6.x - 4.7 API, + * REQ_FUA + */ +static inline boolean_t +bio_is_fua(struct bio *bio) +{ +#if defined(HAVE_BIO_BI_OPF) + return (bio->bi_opf & REQ_FUA); +#elif defined(REQ_FUA) + return (bio->bi_rw & REQ_FUA); +#else +#error "Allowing the build will cause fua requests to be ignored." +#endif +} + +/* + * 4.8 - 4.x API, + * REQ_OP_DISCARD + * + * 2.6.36 - 4.7 API, + * REQ_DISCARD + * + * 2.6.28 - 2.6.35 API, + * BIO_RW_DISCARD + * + * In all cases the normal I/O path is used for discards. The only + * difference is how the kernel tags individual I/Os as discards. + * + * Note that 2.6.32 era kernels provide both BIO_RW_DISCARD and REQ_DISCARD, + * where BIO_RW_DISCARD is the correct interface. Therefore, it is important + * that the HAVE_BIO_RW_DISCARD check occur before the REQ_DISCARD check. + */ +static inline boolean_t +bio_is_discard(struct bio *bio) +{ +#if defined(HAVE_REQ_OP_DISCARD) + return (bio_op(bio) == REQ_OP_DISCARD); +#elif defined(HAVE_BIO_RW_DISCARD) + return (bio->bi_rw & (1 << BIO_RW_DISCARD)); +#elif defined(REQ_DISCARD) + return (bio->bi_rw & REQ_DISCARD); +#else +/* potentially triggering the DMU_MAX_ACCESS assertion. */ +#error "Allowing the build will cause discard requests to become writes." +#endif +} + +/* + * 4.8 - 4.x API, + * REQ_OP_SECURE_ERASE + * + * 2.6.36 - 4.7 API, + * REQ_SECURE + * + * 2.6.x - 2.6.35 API, + * Unsupported by kernel + */ +static inline boolean_t +bio_is_secure_erase(struct bio *bio) +{ +#if defined(HAVE_REQ_OP_SECURE_ERASE) + return (bio_op(bio) == REQ_OP_SECURE_ERASE); +#elif defined(REQ_SECURE) + return (bio->bi_rw & REQ_SECURE); +#else + return (0); +#endif +} + +/* + * 2.6.33 API change + * Discard granularity and alignment restrictions may now be set. For + * older kernels which do not support this it is safe to skip it. + */ +#ifdef HAVE_DISCARD_GRANULARITY +static inline void +blk_queue_discard_granularity(struct request_queue *q, unsigned int dg) +{ + q->limits.discard_granularity = dg; +} +#else +#define blk_queue_discard_granularity(x, dg) ((void)0) +#endif /* HAVE_DISCARD_GRANULARITY */ + +/* + * Default Linux IO Scheduler, + * Setting the scheduler to noop will allow the Linux IO scheduler to + * still perform front and back merging, while leaving the request + * ordering and prioritization to the ZFS IO scheduler. + */ +#define VDEV_SCHEDULER "noop" + +/* + * A common holder for vdev_bdev_open() is used to relax the exclusive open + * semantics slightly. Internal vdev disk callers may pass VDEV_HOLDER to + * allow them to open the device multiple times. Other kernel callers and + * user space processes which don't pass this value will get EBUSY. This is + * currently required for the correct operation of hot spares. + */ +#define VDEV_HOLDER ((void *)0x2401de7) + +static inline void +blk_generic_start_io_acct(struct request_queue *q, int rw, + unsigned long sectors, struct hd_struct *part) +{ +#if defined(HAVE_GENERIC_IO_ACCT_3ARG) + generic_start_io_acct(rw, sectors, part); +#elif defined(HAVE_GENERIC_IO_ACCT_4ARG) + generic_start_io_acct(q, rw, sectors, part); +#endif +} + +static inline void +blk_generic_end_io_acct(struct request_queue *q, int rw, + struct hd_struct *part, unsigned long start_time) +{ +#if defined(HAVE_GENERIC_IO_ACCT_3ARG) + generic_end_io_acct(rw, part, start_time); +#elif defined(HAVE_GENERIC_IO_ACCT_4ARG) + generic_end_io_acct(q, rw, part, start_time); +#endif +} + +#endif /* _ZFS_BLKDEV_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/dcache_compat.h +++ linux-aws-4.15.0/zfs/include/linux/dcache_compat.h @@ -0,0 +1,83 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + */ + +#ifndef _ZFS_DCACHE_H +#define _ZFS_DCACHE_H + +#include + +#define dname(dentry) ((char *)((dentry)->d_name.name)) +#define dlen(dentry) ((int)((dentry)->d_name.len)) + +#ifndef HAVE_D_MAKE_ROOT +#define d_make_root(inode) d_alloc_root(inode) +#endif /* HAVE_D_MAKE_ROOT */ + +/* + * 2.6.30 API change, + * The const keyword was added to the 'struct dentry_operations' in + * the dentry structure. To handle this we define an appropriate + * dentry_operations_t typedef which can be used. + */ +#ifdef HAVE_CONST_DENTRY_OPERATIONS +typedef const struct dentry_operations dentry_operations_t; +#else +typedef struct dentry_operations dentry_operations_t; +#endif + +/* + * 2.6.38 API change, + * Added d_set_d_op() helper function which sets some flags in + * dentry->d_flags based on which operations are defined. + */ +#ifndef HAVE_D_SET_D_OP +static inline void +d_set_d_op(struct dentry *dentry, dentry_operations_t *op) +{ + dentry->d_op = op; +} +#endif /* HAVE_D_SET_D_OP */ + +/* + * 2.6.38 API addition, + * Added d_clear_d_op() helper function which clears some flags and the + * registered dentry->d_op table. This is required because d_set_d_op() + * issues a warning when the dentry operations table is already set. + * For the .zfs control directory to work properly we must be able to + * override the default operations table and register custom .d_automount + * and .d_revalidate callbacks. + */ +static inline void +d_clear_d_op(struct dentry *dentry) +{ +#ifdef HAVE_D_SET_D_OP + dentry->d_op = NULL; + dentry->d_flags &= ~( + DCACHE_OP_HASH | DCACHE_OP_COMPARE | + DCACHE_OP_REVALIDATE | DCACHE_OP_DELETE); +#endif /* HAVE_D_SET_D_OP */ +} + +#endif /* _ZFS_DCACHE_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/kmap_compat.h +++ linux-aws-4.15.0/zfs/include/linux/kmap_compat.h @@ -0,0 +1,40 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + */ + +#ifndef _ZFS_KMAP_H +#define _ZFS_KMAP_H + +#include + +#ifdef HAVE_1ARG_KMAP_ATOMIC +/* 2.6.37 API change */ +#define zfs_kmap_atomic(page, km_type) kmap_atomic(page) +#define zfs_kunmap_atomic(addr, km_type) kunmap_atomic(addr) +#else +#define zfs_kmap_atomic(page, km_type) kmap_atomic(page, km_type) +#define zfs_kunmap_atomic(addr, km_type) kunmap_atomic(addr, km_type) +#endif + +#endif /* _ZFS_KMAP_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/mod_compat.h +++ linux-aws-4.15.0/zfs/include/linux/mod_compat.h @@ -0,0 +1,39 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2016 Gvozden Neskovic . + */ + +#ifndef _MOD_COMPAT_H +#define _MOD_COMPAT_H + +#include +#include + +/* Grsecurity kernel API change */ +#ifdef MODULE_PARAM_CALL_CONST +typedef const struct kernel_param zfs_kernel_param_t; +#else +typedef struct kernel_param zfs_kernel_param_t; +#endif + +#endif /* _MOD_COMPAT_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/simd_aarch64.h +++ linux-aws-4.15.0/zfs/include/linux/simd_aarch64.h @@ -0,0 +1,62 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau . + */ + +/* + * USER API: + * + * Kernel fpu methods: + * kfpu_begin() + * kfpu_end() + */ + +#ifndef _SIMD_AARCH64_H +#define _SIMD_AARCH64_H + +#include + +#if defined(__aarch64__) + +#include + +#if defined(_KERNEL) +#include +#define kfpu_begin() \ +{ \ + kernel_neon_begin(); \ +} +#define kfpu_end() \ +{ \ + kernel_neon_end(); \ +} +#else +/* + * fpu dummy methods for userspace + */ +#define kfpu_begin() do {} while (0) +#define kfpu_end() do {} while (0) +#endif /* defined(_KERNEL) */ + +#endif /* __aarch64__ */ + +#endif /* _SIMD_AARCH64_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/simd_x86.h +++ linux-aws-4.15.0/zfs/include/linux/simd_x86.h @@ -0,0 +1,609 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Neskovic . + */ + +/* + * USER API: + * + * Kernel fpu methods: + * kfpu_begin() + * kfpu_end() + * + * SIMD support: + * + * Following functions should be called to determine whether CPU feature + * is supported. All functions are usable in kernel and user space. + * If a SIMD algorithm is using more than one instruction set + * all relevant feature test functions should be called. + * + * Supported features: + * zfs_sse_available() + * zfs_sse2_available() + * zfs_sse3_available() + * zfs_ssse3_available() + * zfs_sse4_1_available() + * zfs_sse4_2_available() + * + * zfs_avx_available() + * zfs_avx2_available() + * + * zfs_bmi1_available() + * zfs_bmi2_available() + * + * zfs_avx512f_available() + * zfs_avx512cd_available() + * zfs_avx512er_available() + * zfs_avx512pf_available() + * zfs_avx512bw_available() + * zfs_avx512dq_available() + * zfs_avx512vl_available() + * zfs_avx512ifma_available() + * zfs_avx512vbmi_available() + * + * NOTE(AVX-512VL): If using AVX-512 instructions with 128Bit registers + * also add zfs_avx512vl_available() to feature check. + */ + +#ifndef _SIMD_X86_H +#define _SIMD_X86_H + +#include + +/* only for __x86 */ +#if defined(__x86) + +#include + +#if defined(_KERNEL) +#include +#else +#include +#endif + +#if defined(_KERNEL) +#if defined(HAVE_FPU_API_H) +#include +#include +#define kfpu_begin() \ +{ \ + preempt_disable(); \ + __kernel_fpu_begin(); \ +} +#define kfpu_end() \ +{ \ + __kernel_fpu_end(); \ + preempt_enable(); \ +} +#else +#include +#include +#define kfpu_begin() kernel_fpu_begin() +#define kfpu_end() kernel_fpu_end() +#endif /* defined(HAVE_FPU_API_H) */ +#else +/* + * fpu dummy methods for userspace + */ +#define kfpu_begin() do {} while (0) +#define kfpu_end() do {} while (0) +#endif /* defined(_KERNEL) */ + +/* + * CPUID feature tests for user-space. Linux kernel provides an interface for + * CPU feature testing. + */ +#if !defined(_KERNEL) + +/* + * x86 registers used implicitly by CPUID + */ +typedef enum cpuid_regs { + EAX = 0, + EBX, + ECX, + EDX, + CPUID_REG_CNT = 4 +} cpuid_regs_t; + +/* + * List of instruction sets identified by CPUID + */ +typedef enum cpuid_inst_sets { + SSE = 0, + SSE2, + SSE3, + SSSE3, + SSE4_1, + SSE4_2, + OSXSAVE, + AVX, + AVX2, + BMI1, + BMI2, + AVX512F, + AVX512CD, + AVX512DQ, + AVX512BW, + AVX512IFMA, + AVX512VBMI, + AVX512PF, + AVX512ER, + AVX512VL +} cpuid_inst_sets_t; + +/* + * Instruction set descriptor. + */ +typedef struct cpuid_feature_desc { + uint32_t leaf; /* CPUID leaf */ + uint32_t subleaf; /* CPUID sub-leaf */ + uint32_t flag; /* bit mask of the feature */ + cpuid_regs_t reg; /* which CPUID return register to test */ +} cpuid_feature_desc_t; + +#define _AVX512F_BIT (1U << 16) +#define _AVX512CD_BIT (_AVX512F_BIT | (1U << 28)) +#define _AVX512DQ_BIT (_AVX512F_BIT | (1U << 17)) +#define _AVX512BW_BIT (_AVX512F_BIT | (1U << 30)) +#define _AVX512IFMA_BIT (_AVX512F_BIT | (1U << 21)) +#define _AVX512VBMI_BIT (1U << 1) /* AVX512F_BIT is on another leaf */ +#define _AVX512PF_BIT (_AVX512F_BIT | (1U << 26)) +#define _AVX512ER_BIT (_AVX512F_BIT | (1U << 27)) +#define _AVX512VL_BIT (1U << 31) /* if used also check other levels */ + +/* + * Descriptions of supported instruction sets + */ +static const cpuid_feature_desc_t cpuid_features[] = { + [SSE] = {1U, 0U, 1U << 25, EDX }, + [SSE2] = {1U, 0U, 1U << 26, EDX }, + [SSE3] = {1U, 0U, 1U << 0, ECX }, + [SSSE3] = {1U, 0U, 1U << 9, ECX }, + [SSE4_1] = {1U, 0U, 1U << 19, ECX }, + [SSE4_2] = {1U, 0U, 1U << 20, ECX }, + [OSXSAVE] = {1U, 0U, 1U << 27, ECX }, + [AVX] = {1U, 0U, 1U << 28, ECX }, + [AVX2] = {7U, 0U, 1U << 5, EBX }, + [BMI1] = {7U, 0U, 1U << 3, EBX }, + [BMI2] = {7U, 0U, 1U << 8, EBX }, + [AVX512F] = {7U, 0U, _AVX512F_BIT, EBX }, + [AVX512CD] = {7U, 0U, _AVX512CD_BIT, EBX }, + [AVX512DQ] = {7U, 0U, _AVX512DQ_BIT, EBX }, + [AVX512BW] = {7U, 0U, _AVX512BW_BIT, EBX }, + [AVX512IFMA] = {7U, 0U, _AVX512IFMA_BIT, EBX }, + [AVX512VBMI] = {7U, 0U, _AVX512VBMI_BIT, ECX }, + [AVX512PF] = {7U, 0U, _AVX512PF_BIT, EBX }, + [AVX512ER] = {7U, 0U, _AVX512ER_BIT, EBX }, + [AVX512VL] = {7U, 0U, _AVX512ER_BIT, EBX } +}; + +/* + * Check if OS supports AVX and AVX2 by checking XCR0 + * Only call this function if CPUID indicates that AVX feature is + * supported by the CPU, otherwise it might be an illegal instruction. + */ +static inline uint64_t +xgetbv(uint32_t index) +{ + uint32_t eax, edx; + /* xgetbv - instruction byte code */ + __asm__ __volatile__(".byte 0x0f; .byte 0x01; .byte 0xd0" + : "=a" (eax), "=d" (edx) + : "c" (index)); + + return ((((uint64_t)edx)<<32) | (uint64_t)eax); +} + +/* + * Check if CPU supports a feature + */ +static inline boolean_t +__cpuid_check_feature(const cpuid_feature_desc_t *desc) +{ + uint32_t r[CPUID_REG_CNT]; + + if (__get_cpuid_max(0, NULL) >= desc->leaf) { + /* + * __cpuid_count is needed to properly check + * for AVX2. It is a macro, so return parameters + * are passed by value. + */ + __cpuid_count(desc->leaf, desc->subleaf, + r[EAX], r[EBX], r[ECX], r[EDX]); + return ((r[desc->reg] & desc->flag) == desc->flag); + } + return (B_FALSE); +} + +#define CPUID_FEATURE_CHECK(name, id) \ +static inline boolean_t \ +__cpuid_has_ ## name(void) \ +{ \ + return (__cpuid_check_feature(&cpuid_features[id])); \ +} + +/* + * Define functions for user-space CPUID features testing + */ +CPUID_FEATURE_CHECK(sse, SSE); +CPUID_FEATURE_CHECK(sse2, SSE2); +CPUID_FEATURE_CHECK(sse3, SSE3); +CPUID_FEATURE_CHECK(ssse3, SSSE3); +CPUID_FEATURE_CHECK(sse4_1, SSE4_1); +CPUID_FEATURE_CHECK(sse4_2, SSE4_2); +CPUID_FEATURE_CHECK(avx, AVX); +CPUID_FEATURE_CHECK(avx2, AVX2); +CPUID_FEATURE_CHECK(osxsave, OSXSAVE); +CPUID_FEATURE_CHECK(bmi1, BMI1); +CPUID_FEATURE_CHECK(bmi2, BMI2); +CPUID_FEATURE_CHECK(avx512f, AVX512F); +CPUID_FEATURE_CHECK(avx512cd, AVX512CD); +CPUID_FEATURE_CHECK(avx512dq, AVX512DQ); +CPUID_FEATURE_CHECK(avx512bw, AVX512BW); +CPUID_FEATURE_CHECK(avx512ifma, AVX512IFMA); +CPUID_FEATURE_CHECK(avx512vbmi, AVX512VBMI); +CPUID_FEATURE_CHECK(avx512pf, AVX512PF); +CPUID_FEATURE_CHECK(avx512er, AVX512ER); +CPUID_FEATURE_CHECK(avx512vl, AVX512VL); + +#endif /* !defined(_KERNEL) */ + + +/* + * Detect register set support + */ +static inline boolean_t +__simd_state_enabled(const uint64_t state) +{ + boolean_t has_osxsave; + uint64_t xcr0; + +#if defined(_KERNEL) && defined(X86_FEATURE_OSXSAVE) + has_osxsave = !!boot_cpu_has(X86_FEATURE_OSXSAVE); +#elif defined(_KERNEL) && !defined(X86_FEATURE_OSXSAVE) + has_osxsave = B_FALSE; +#else + has_osxsave = __cpuid_has_osxsave(); +#endif + + if (!has_osxsave) + return (B_FALSE); + + xcr0 = xgetbv(0); + return ((xcr0 & state) == state); +} + +#define _XSTATE_SSE_AVX (0x2 | 0x4) +#define _XSTATE_AVX512 (0xE0 | _XSTATE_SSE_AVX) + +#define __ymm_enabled() __simd_state_enabled(_XSTATE_SSE_AVX) +#define __zmm_enabled() __simd_state_enabled(_XSTATE_AVX512) + + +/* + * Check if SSE instruction set is available + */ +static inline boolean_t +zfs_sse_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_XMM)); +#else + return (__cpuid_has_sse()); +#endif +} + +/* + * Check if SSE2 instruction set is available + */ +static inline boolean_t +zfs_sse2_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_XMM2)); +#else + return (__cpuid_has_sse2()); +#endif +} + +/* + * Check if SSE3 instruction set is available + */ +static inline boolean_t +zfs_sse3_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_XMM3)); +#else + return (__cpuid_has_sse3()); +#endif +} + +/* + * Check if SSSE3 instruction set is available + */ +static inline boolean_t +zfs_ssse3_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_SSSE3)); +#else + return (__cpuid_has_ssse3()); +#endif +} + +/* + * Check if SSE4.1 instruction set is available + */ +static inline boolean_t +zfs_sse4_1_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_XMM4_1)); +#else + return (__cpuid_has_sse4_1()); +#endif +} + +/* + * Check if SSE4.2 instruction set is available + */ +static inline boolean_t +zfs_sse4_2_available(void) +{ +#if defined(_KERNEL) + return (!!boot_cpu_has(X86_FEATURE_XMM4_2)); +#else + return (__cpuid_has_sse4_2()); +#endif +} + +/* + * Check if AVX instruction set is available + */ +static inline boolean_t +zfs_avx_available(void) +{ + boolean_t has_avx; +#if defined(_KERNEL) + has_avx = !!boot_cpu_has(X86_FEATURE_AVX); +#else + has_avx = __cpuid_has_avx(); +#endif + + return (has_avx && __ymm_enabled()); +} + +/* + * Check if AVX2 instruction set is available + */ +static inline boolean_t +zfs_avx2_available(void) +{ + boolean_t has_avx2; +#if defined(_KERNEL) && defined(X86_FEATURE_AVX2) + has_avx2 = !!boot_cpu_has(X86_FEATURE_AVX2); +#elif defined(_KERNEL) && !defined(X86_FEATURE_AVX2) + has_avx2 = B_FALSE; +#else + has_avx2 = __cpuid_has_avx2(); +#endif + + return (has_avx2 && __ymm_enabled()); +} + +/* + * Check if BMI1 instruction set is available + */ +static inline boolean_t +zfs_bmi1_available(void) +{ +#if defined(_KERNEL) && defined(X86_FEATURE_BMI1) + return (!!boot_cpu_has(X86_FEATURE_BMI1)); +#elif defined(_KERNEL) && !defined(X86_FEATURE_BMI1) + return (B_FALSE); +#else + return (__cpuid_has_bmi1()); +#endif +} + +/* + * Check if BMI2 instruction set is available + */ +static inline boolean_t +zfs_bmi2_available(void) +{ +#if defined(_KERNEL) && defined(X86_FEATURE_BMI2) + return (!!boot_cpu_has(X86_FEATURE_BMI2)); +#elif defined(_KERNEL) && !defined(X86_FEATURE_BMI2) + return (B_FALSE); +#else + return (__cpuid_has_bmi2()); +#endif +} + + +/* + * AVX-512 family of instruction sets: + * + * AVX512F Foundation + * AVX512CD Conflict Detection Instructions + * AVX512ER Exponential and Reciprocal Instructions + * AVX512PF Prefetch Instructions + * + * AVX512BW Byte and Word Instructions + * AVX512DQ Double-word and Quadword Instructions + * AVX512VL Vector Length Extensions + * + * AVX512IFMA Integer Fused Multiply Add (Not supported by kernel 4.4) + * AVX512VBMI Vector Byte Manipulation Instructions + */ + + +/* Check if AVX512F instruction set is available */ +static inline boolean_t +zfs_avx512f_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512F) + has_avx512 = !!boot_cpu_has(X86_FEATURE_AVX512F); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512f(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512CD instruction set is available */ +static inline boolean_t +zfs_avx512cd_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512CD) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512CD); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512cd(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512ER instruction set is available */ +static inline boolean_t +zfs_avx512er_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512ER) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512ER); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512er(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512PF instruction set is available */ +static inline boolean_t +zfs_avx512pf_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512PF) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512PF); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512pf(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512BW instruction set is available */ +static inline boolean_t +zfs_avx512bw_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512BW) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512BW); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512bw(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512DQ instruction set is available */ +static inline boolean_t +zfs_avx512dq_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512DQ) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512DQ); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512dq(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512VL instruction set is available */ +static inline boolean_t +zfs_avx512vl_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512VL) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512VL); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512vl(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512IFMA instruction set is available */ +static inline boolean_t +zfs_avx512ifma_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512IFMA) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512IFMA); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512ifma(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +/* Check if AVX512VBMI instruction set is available */ +static inline boolean_t +zfs_avx512vbmi_available(void) +{ + boolean_t has_avx512 = B_FALSE; + +#if defined(_KERNEL) && defined(X86_FEATURE_AVX512VBMI) + has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && + boot_cpu_has(X86_FEATURE_AVX512VBMI); +#elif !defined(_KERNEL) + has_avx512 = __cpuid_has_avx512f() && + __cpuid_has_avx512vbmi(); +#endif + + return (has_avx512 && __zmm_enabled()); +} + +#endif /* defined(__x86) */ + +#endif /* _SIMD_X86_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/utsname_compat.h +++ linux-aws-4.15.0/zfs/include/linux/utsname_compat.h @@ -0,0 +1,29 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#ifndef _ZFS_UTSNAME_H +#define _ZFS_UTSNAME_H + +#include + +typedef struct new_utsname utsname_t; + +#endif /* _ZFS_UTSNAME_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/vfs_compat.h +++ linux-aws-4.15.0/zfs/include/linux/vfs_compat.h @@ -0,0 +1,581 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Copyright (C) 2015 Jörg Thalheim. + */ + +#ifndef _ZFS_VFS_H +#define _ZFS_VFS_H + +#include +#include +#include + +/* + * 2.6.28 API change, + * Added insert_inode_locked() helper function, prior to this most callers + * used insert_inode_hash(). The older method doesn't check for collisions + * in the inode_hashtable but it still acceptible for use. + */ +#ifndef HAVE_INSERT_INODE_LOCKED +static inline int +insert_inode_locked(struct inode *ip) +{ + insert_inode_hash(ip); + return (0); +} +#endif /* HAVE_INSERT_INODE_LOCKED */ + +/* + * 2.6.35 API change, + * Add truncate_setsize() if it is not exported by the Linux kernel. + * + * Truncate the inode and pages associated with the inode. The pages are + * unmapped and removed from cache. + */ +#ifndef HAVE_TRUNCATE_SETSIZE +static inline void +truncate_setsize(struct inode *ip, loff_t new) +{ + struct address_space *mapping = ip->i_mapping; + + i_size_write(ip, new); + + unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); + truncate_inode_pages(mapping, new); + unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1); +} +#endif /* HAVE_TRUNCATE_SETSIZE */ + +/* + * 2.6.32 - 2.6.33, bdi_setup_and_register() is not available. + * 2.6.34 - 3.19, bdi_setup_and_register() takes 3 arguments. + * 4.0 - 4.11, bdi_setup_and_register() takes 2 arguments. + * 4.12 - x.y, super_setup_bdi_name() new interface. + */ +#if defined(HAVE_SUPER_SETUP_BDI_NAME) +extern atomic_long_t zfs_bdi_seq; + +static inline int +zpl_bdi_setup(struct super_block *sb, char *name) +{ + return super_setup_bdi_name(sb, "%.28s-%ld", name, + atomic_long_inc_return(&zfs_bdi_seq)); +} +static inline void +zpl_bdi_destroy(struct super_block *sb) +{ +} +#elif defined(HAVE_2ARGS_BDI_SETUP_AND_REGISTER) +static inline int +zpl_bdi_setup(struct super_block *sb, char *name) +{ + struct backing_dev_info *bdi; + int error; + + bdi = kmem_zalloc(sizeof (struct backing_dev_info), KM_SLEEP); + error = bdi_setup_and_register(bdi, name); + if (error) { + kmem_free(bdi, sizeof (struct backing_dev_info)); + return (error); + } + + sb->s_bdi = bdi; + + return (0); +} +static inline void +zpl_bdi_destroy(struct super_block *sb) +{ + struct backing_dev_info *bdi = sb->s_bdi; + + bdi_destroy(bdi); + kmem_free(bdi, sizeof (struct backing_dev_info)); + sb->s_bdi = NULL; +} +#elif defined(HAVE_3ARGS_BDI_SETUP_AND_REGISTER) +static inline int +zpl_bdi_setup(struct super_block *sb, char *name) +{ + struct backing_dev_info *bdi; + int error; + + bdi = kmem_zalloc(sizeof (struct backing_dev_info), KM_SLEEP); + error = bdi_setup_and_register(bdi, name, BDI_CAP_MAP_COPY); + if (error) { + kmem_free(sb->s_bdi, sizeof (struct backing_dev_info)); + return (error); + } + + sb->s_bdi = bdi; + + return (0); +} +static inline void +zpl_bdi_destroy(struct super_block *sb) +{ + struct backing_dev_info *bdi = sb->s_bdi; + + bdi_destroy(bdi); + kmem_free(bdi, sizeof (struct backing_dev_info)); + sb->s_bdi = NULL; +} +#else +extern atomic_long_t zfs_bdi_seq; + +static inline int +zpl_bdi_setup(struct super_block *sb, char *name) +{ + struct backing_dev_info *bdi; + int error; + + bdi = kmem_zalloc(sizeof (struct backing_dev_info), KM_SLEEP); + bdi->name = name; + bdi->capabilities = BDI_CAP_MAP_COPY; + + error = bdi_init(bdi); + if (error) { + kmem_free(bdi, sizeof (struct backing_dev_info)); + return (error); + } + + error = bdi_register(bdi, NULL, "%.28s-%ld", name, + atomic_long_inc_return(&zfs_bdi_seq)); + if (error) { + bdi_destroy(bdi); + kmem_free(bdi, sizeof (struct backing_dev_info)); + return (error); + } + + sb->s_bdi = bdi; + + return (0); +} +static inline void +zpl_bdi_destroy(struct super_block *sb) +{ + struct backing_dev_info *bdi = sb->s_bdi; + + bdi_destroy(bdi); + kmem_free(bdi, sizeof (struct backing_dev_info)); + sb->s_bdi = NULL; +} +#endif + +/* + * 2.6.38 API change, + * LOOKUP_RCU flag introduced to distinguish rcu-walk from ref-walk cases. + */ +#ifndef LOOKUP_RCU +#define LOOKUP_RCU 0x0 +#endif /* LOOKUP_RCU */ + +/* + * 3.2-rc1 API change, + * Add set_nlink() if it is not exported by the Linux kernel. + * + * i_nlink is read-only in Linux 3.2, but it can be set directly in + * earlier kernels. + */ +#ifndef HAVE_SET_NLINK +static inline void +set_nlink(struct inode *inode, unsigned int nlink) +{ + inode->i_nlink = nlink; +} +#endif /* HAVE_SET_NLINK */ + +/* + * 3.3 API change, + * The VFS .create, .mkdir and .mknod callbacks were updated to take a + * umode_t type rather than an int. To cleanly handle both definitions + * the zpl_umode_t type is introduced and set accordingly. + */ +#ifdef HAVE_MKDIR_UMODE_T +typedef umode_t zpl_umode_t; +#else +typedef int zpl_umode_t; +#endif + +/* + * 3.5 API change, + * The clear_inode() function replaces end_writeback() and introduces an + * ordering change regarding when the inode_sync_wait() occurs. See the + * configure check in config/kernel-clear-inode.m4 for full details. + */ +#if defined(HAVE_EVICT_INODE) && !defined(HAVE_CLEAR_INODE) +#define clear_inode(ip) end_writeback(ip) +#endif /* HAVE_EVICT_INODE && !HAVE_CLEAR_INODE */ + +/* + * 3.6 API change, + * The sget() helper function now takes the mount flags as an argument. + */ +#ifdef HAVE_5ARG_SGET +#define zpl_sget(type, cmp, set, fl, mtd) sget(type, cmp, set, fl, mtd) +#else +#define zpl_sget(type, cmp, set, fl, mtd) sget(type, cmp, set, mtd) +#endif /* HAVE_5ARG_SGET */ + +#if defined(SEEK_HOLE) && defined(SEEK_DATA) && !defined(HAVE_LSEEK_EXECUTE) +static inline loff_t +lseek_execute( + struct file *filp, + struct inode *inode, + loff_t offset, + loff_t maxsize) +{ + if (offset < 0 && !(filp->f_mode & FMODE_UNSIGNED_OFFSET)) + return (-EINVAL); + + if (offset > maxsize) + return (-EINVAL); + + if (offset != filp->f_pos) { + spin_lock(&filp->f_lock); + filp->f_pos = offset; + filp->f_version = 0; + spin_unlock(&filp->f_lock); + } + + return (offset); +} +#endif /* SEEK_HOLE && SEEK_DATA && !HAVE_LSEEK_EXECUTE */ + +#if defined(CONFIG_FS_POSIX_ACL) +/* + * These functions safely approximates the behavior of posix_acl_release() + * which cannot be used because it calls the GPL-only symbol kfree_rcu(). + * The in-kernel version, which can access the RCU, frees the ACLs after + * the grace period expires. Because we're unsure how long that grace + * period may be this implementation conservatively delays for 60 seconds. + * This is several orders of magnitude larger than expected grace period. + * At 60 seconds the kernel will also begin issuing RCU stall warnings. + */ +#include + +#if defined(HAVE_POSIX_ACL_RELEASE) && !defined(HAVE_POSIX_ACL_RELEASE_GPL_ONLY) +#define zpl_posix_acl_release(arg) posix_acl_release(arg) +#else +void zpl_posix_acl_release_impl(struct posix_acl *); + +static inline void +zpl_posix_acl_release(struct posix_acl *acl) +{ + if ((acl == NULL) || (acl == ACL_NOT_CACHED)) + return; + + if (atomic_dec_and_test(&acl->a_refcount)) + zpl_posix_acl_release_impl(acl); +} +#endif /* HAVE_POSIX_ACL_RELEASE */ + +#ifdef HAVE_SET_CACHED_ACL_USABLE +#define zpl_set_cached_acl(ip, ty, n) set_cached_acl(ip, ty, n) +#define zpl_forget_cached_acl(ip, ty) forget_cached_acl(ip, ty) +#else +static inline void +zpl_set_cached_acl(struct inode *ip, int type, struct posix_acl *newer) +{ + struct posix_acl *older = NULL; + + spin_lock(&ip->i_lock); + + if ((newer != ACL_NOT_CACHED) && (newer != NULL)) + posix_acl_dup(newer); + + switch (type) { + case ACL_TYPE_ACCESS: + older = ip->i_acl; + rcu_assign_pointer(ip->i_acl, newer); + break; + case ACL_TYPE_DEFAULT: + older = ip->i_default_acl; + rcu_assign_pointer(ip->i_default_acl, newer); + break; + } + + spin_unlock(&ip->i_lock); + + zpl_posix_acl_release(older); +} + +static inline void +zpl_forget_cached_acl(struct inode *ip, int type) +{ + zpl_set_cached_acl(ip, type, (struct posix_acl *)ACL_NOT_CACHED); +} +#endif /* HAVE_SET_CACHED_ACL_USABLE */ + +#ifndef HAVE___POSIX_ACL_CHMOD +#ifdef HAVE_POSIX_ACL_CHMOD +#define __posix_acl_chmod(acl, gfp, mode) posix_acl_chmod(acl, gfp, mode) +#define __posix_acl_create(acl, gfp, mode) posix_acl_create(acl, gfp, mode) +#else +static inline int +__posix_acl_chmod(struct posix_acl **acl, int flags, umode_t umode) +{ + struct posix_acl *oldacl = *acl; + mode_t mode = umode; + int error; + + *acl = posix_acl_clone(*acl, flags); + zpl_posix_acl_release(oldacl); + + if (!(*acl)) + return (-ENOMEM); + + error = posix_acl_chmod_masq(*acl, mode); + if (error) { + zpl_posix_acl_release(*acl); + *acl = NULL; + } + + return (error); +} + +static inline int +__posix_acl_create(struct posix_acl **acl, int flags, umode_t *umodep) +{ + struct posix_acl *oldacl = *acl; + mode_t mode = *umodep; + int error; + + *acl = posix_acl_clone(*acl, flags); + zpl_posix_acl_release(oldacl); + + if (!(*acl)) + return (-ENOMEM); + + error = posix_acl_create_masq(*acl, &mode); + *umodep = mode; + + if (error < 0) { + zpl_posix_acl_release(*acl); + *acl = NULL; + } + + return (error); +} +#endif /* HAVE_POSIX_ACL_CHMOD */ +#endif /* HAVE___POSIX_ACL_CHMOD */ + +#ifdef HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T +typedef umode_t zpl_equivmode_t; +#else +typedef mode_t zpl_equivmode_t; +#endif /* HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T */ + +/* + * 4.8 API change, + * posix_acl_valid() now must be passed a namespace, the namespace from + * from super block associated with the given inode is used for this purpose. + */ +#ifdef HAVE_POSIX_ACL_VALID_WITH_NS +#define zpl_posix_acl_valid(ip, acl) posix_acl_valid(ip->i_sb->s_user_ns, acl) +#else +#define zpl_posix_acl_valid(ip, acl) posix_acl_valid(acl) +#endif + +#endif /* CONFIG_FS_POSIX_ACL */ + +/* + * 2.6.38 API change, + * The is_owner_or_cap() function was renamed to inode_owner_or_capable(). + */ +#ifdef HAVE_INODE_OWNER_OR_CAPABLE +#define zpl_inode_owner_or_capable(ip) inode_owner_or_capable(ip) +#else +#define zpl_inode_owner_or_capable(ip) is_owner_or_cap(ip) +#endif /* HAVE_INODE_OWNER_OR_CAPABLE */ + +/* + * 3.19 API change + * struct access f->f_dentry->d_inode was replaced by accessor function + * file_inode(f) + */ +#ifndef HAVE_FILE_INODE +static inline struct inode *file_inode(const struct file *f) +{ + return (f->f_dentry->d_inode); +} +#endif /* HAVE_FILE_INODE */ + +/* + * 4.1 API change + * struct access file->f_path.dentry was replaced by accessor function + * file_dentry(f) + */ +#ifndef HAVE_FILE_DENTRY +static inline struct dentry *file_dentry(const struct file *f) +{ + return (f->f_path.dentry); +} +#endif /* HAVE_FILE_DENTRY */ + +#ifdef HAVE_KUID_HELPERS +static inline uid_t zfs_uid_read_impl(struct inode *ip) +{ +#ifdef HAVE_SUPER_USER_NS + return (from_kuid(ip->i_sb->s_user_ns, ip->i_uid)); +#else + return (from_kuid(kcred->user_ns, ip->i_uid)); +#endif +} + +static inline uid_t zfs_uid_read(struct inode *ip) +{ + return (zfs_uid_read_impl(ip)); +} + +static inline gid_t zfs_gid_read_impl(struct inode *ip) +{ +#ifdef HAVE_SUPER_USER_NS + return (from_kgid(ip->i_sb->s_user_ns, ip->i_gid)); +#else + return (from_kgid(kcred->user_ns, ip->i_gid)); +#endif +} + +static inline gid_t zfs_gid_read(struct inode *ip) +{ + return (zfs_gid_read_impl(ip)); +} + +static inline void zfs_uid_write(struct inode *ip, uid_t uid) +{ +#ifdef HAVE_SUPER_USER_NS + ip->i_uid = make_kuid(ip->i_sb->s_user_ns, uid); +#else + ip->i_uid = make_kuid(kcred->user_ns, uid); +#endif +} + +static inline void zfs_gid_write(struct inode *ip, gid_t gid) +{ +#ifdef HAVE_SUPER_USER_NS + ip->i_gid = make_kgid(ip->i_sb->s_user_ns, gid); +#else + ip->i_gid = make_kgid(kcred->user_ns, gid); +#endif +} + +#else +static inline uid_t zfs_uid_read(struct inode *ip) +{ + return (ip->i_uid); +} + +static inline gid_t zfs_gid_read(struct inode *ip) +{ + return (ip->i_gid); +} + +static inline void zfs_uid_write(struct inode *ip, uid_t uid) +{ + ip->i_uid = uid; +} + +static inline void zfs_gid_write(struct inode *ip, gid_t gid) +{ + ip->i_gid = gid; +} +#endif + +/* + * 2.6.38 API change + */ +#ifdef HAVE_FOLLOW_DOWN_ONE +#define zpl_follow_down_one(path) follow_down_one(path) +#define zpl_follow_up(path) follow_up(path) +#else +#define zpl_follow_down_one(path) follow_down(path) +#define zpl_follow_up(path) follow_up(path) +#endif + +/* + * 4.9 API change + */ +#ifndef HAVE_SETATTR_PREPARE +static inline int +setattr_prepare(struct dentry *dentry, struct iattr *ia) +{ + return (inode_change_ok(dentry->d_inode, ia)); +} +#endif + +/* + * 4.11 API change + * These macros are defined by kernel 4.11. We define them so that the same + * code builds under kernels < 4.11 and >= 4.11. The macros are set to 0 so + * that it will create obvious failures if they are accidentally used when built + * against a kernel >= 4.11. + */ + +#ifndef STATX_BASIC_STATS +#define STATX_BASIC_STATS 0 +#endif + +#ifndef AT_STATX_SYNC_AS_STAT +#define AT_STATX_SYNC_AS_STAT 0 +#endif + +/* + * 4.11 API change + * 4.11 takes struct path *, < 4.11 takes vfsmount * + */ + +#ifdef HAVE_VFSMOUNT_IOPS_GETATTR +#define ZPL_GETATTR_WRAPPER(func) \ +static int \ +func(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) \ +{ \ + struct path path = { .mnt = mnt, .dentry = dentry }; \ + return func##_impl(&path, stat, STATX_BASIC_STATS, \ + AT_STATX_SYNC_AS_STAT); \ +} +#elif defined(HAVE_PATH_IOPS_GETATTR) +#define ZPL_GETATTR_WRAPPER(func) \ +static int \ +func(const struct path *path, struct kstat *stat, u32 request_mask, \ + unsigned int query_flags) \ +{ \ + return (func##_impl(path, stat, request_mask, query_flags)); \ +} +#else +#error +#endif + +/* + * 4.9 API change + * Preferred interface to get the current FS time. + */ +#if !defined(HAVE_CURRENT_TIME) +static inline struct timespec +current_time(struct inode *ip) +{ + return (timespec_trunc(current_kernel_time(), ip->i_sb->s_time_gran)); +} +#endif + +#endif /* _ZFS_VFS_H */ --- linux-aws-4.15.0.orig/zfs/include/linux/xattr_compat.h +++ linux-aws-4.15.0/zfs/include/linux/xattr_compat.h @@ -0,0 +1,251 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + */ + +#ifndef _ZFS_XATTR_H +#define _ZFS_XATTR_H + +#include + +/* + * 2.6.35 API change, + * The const keyword was added to the 'struct xattr_handler' in the + * generic Linux super_block structure. To handle this we define an + * appropriate xattr_handler_t typedef which can be used. This was + * the preferred solution because it keeps the code clean and readable. + */ +#ifdef HAVE_CONST_XATTR_HANDLER +typedef const struct xattr_handler xattr_handler_t; +#else +typedef struct xattr_handler xattr_handler_t; +#endif + +/* + * 3.7 API change, + * Preferred XATTR_NAME_* definitions introduced, these are mapped to + * the previous definitions for older kernels. + */ +#ifndef XATTR_NAME_POSIX_ACL_DEFAULT +#define XATTR_NAME_POSIX_ACL_DEFAULT POSIX_ACL_XATTR_DEFAULT +#endif + +#ifndef XATTR_NAME_POSIX_ACL_ACCESS +#define XATTR_NAME_POSIX_ACL_ACCESS POSIX_ACL_XATTR_ACCESS +#endif + +/* + * 4.5 API change, + */ +#if defined(HAVE_XATTR_LIST_SIMPLE) +#define ZPL_XATTR_LIST_WRAPPER(fn) \ +static bool \ +fn(struct dentry *dentry) \ +{ \ + return (!!__ ## fn(dentry->d_inode, NULL, 0, NULL, 0)); \ +} +/* + * 4.4 API change, + */ +#elif defined(HAVE_XATTR_LIST_DENTRY) +#define ZPL_XATTR_LIST_WRAPPER(fn) \ +static size_t \ +fn(struct dentry *dentry, char *list, size_t list_size, \ + const char *name, size_t name_len, int type) \ +{ \ + return (__ ## fn(dentry->d_inode, \ + list, list_size, name, name_len)); \ +} +/* + * 2.6.33 API change, + */ +#elif defined(HAVE_XATTR_LIST_HANDLER) +#define ZPL_XATTR_LIST_WRAPPER(fn) \ +static size_t \ +fn(const struct xattr_handler *handler, struct dentry *dentry, \ + char *list, size_t list_size, const char *name, size_t name_len) \ +{ \ + return (__ ## fn(dentry->d_inode, \ + list, list_size, name, name_len)); \ +} +/* + * 2.6.32 API + */ +#elif defined(HAVE_XATTR_LIST_INODE) +#define ZPL_XATTR_LIST_WRAPPER(fn) \ +static size_t \ +fn(struct inode *ip, char *list, size_t list_size, \ + const char *name, size_t name_len) \ +{ \ + return (__ ## fn(ip, list, list_size, name, name_len)); \ +} +#endif + +/* + * 4.7 API change, + * The xattr_handler->get() callback was changed to take a both dentry and + * inode, because the dentry might not be attached to an inode yet. + */ +#if defined(HAVE_XATTR_GET_DENTRY_INODE) +#define ZPL_XATTR_GET_WRAPPER(fn) \ +static int \ +fn(const struct xattr_handler *handler, struct dentry *dentry, \ + struct inode *inode, const char *name, void *buffer, size_t size) \ +{ \ + return (__ ## fn(inode, name, buffer, size)); \ +} +/* + * 4.4 API change, + * The xattr_handler->get() callback was changed to take a xattr_handler, + * and handler_flags argument was removed and should be accessed by + * handler->flags. + */ +#elif defined(HAVE_XATTR_GET_HANDLER) +#define ZPL_XATTR_GET_WRAPPER(fn) \ +static int \ +fn(const struct xattr_handler *handler, struct dentry *dentry, \ + const char *name, void *buffer, size_t size) \ +{ \ + return (__ ## fn(dentry->d_inode, name, buffer, size)); \ +} +/* + * 2.6.33 API change, + * The xattr_handler->get() callback was changed to take a dentry + * instead of an inode, and a handler_flags argument was added. + */ +#elif defined(HAVE_XATTR_GET_DENTRY) +#define ZPL_XATTR_GET_WRAPPER(fn) \ +static int \ +fn(struct dentry *dentry, const char *name, void *buffer, size_t size, \ + int unused_handler_flags) \ +{ \ + return (__ ## fn(dentry->d_inode, name, buffer, size)); \ +} +/* + * 2.6.32 API + */ +#elif defined(HAVE_XATTR_GET_INODE) +#define ZPL_XATTR_GET_WRAPPER(fn) \ +static int \ +fn(struct inode *ip, const char *name, void *buffer, size_t size) \ +{ \ + return (__ ## fn(ip, name, buffer, size)); \ +} +#endif + +/* + * 4.7 API change, + * The xattr_handler->set() callback was changed to take a both dentry and + * inode, because the dentry might not be attached to an inode yet. + */ +#if defined(HAVE_XATTR_SET_DENTRY_INODE) +#define ZPL_XATTR_SET_WRAPPER(fn) \ +static int \ +fn(const struct xattr_handler *handler, struct dentry *dentry, \ + struct inode *inode, const char *name, const void *buffer, \ + size_t size, int flags) \ +{ \ + return (__ ## fn(inode, name, buffer, size, flags)); \ +} +/* + * 4.4 API change, + * The xattr_handler->set() callback was changed to take a xattr_handler, + * and handler_flags argument was removed and should be accessed by + * handler->flags. + */ +#elif defined(HAVE_XATTR_SET_HANDLER) +#define ZPL_XATTR_SET_WRAPPER(fn) \ +static int \ +fn(const struct xattr_handler *handler, struct dentry *dentry, \ + const char *name, const void *buffer, size_t size, int flags) \ +{ \ + return (__ ## fn(dentry->d_inode, name, buffer, size, flags)); \ +} +/* + * 2.6.33 API change, + * The xattr_handler->set() callback was changed to take a dentry + * instead of an inode, and a handler_flags argument was added. + */ +#elif defined(HAVE_XATTR_SET_DENTRY) +#define ZPL_XATTR_SET_WRAPPER(fn) \ +static int \ +fn(struct dentry *dentry, const char *name, const void *buffer, \ + size_t size, int flags, int unused_handler_flags) \ +{ \ + return (__ ## fn(dentry->d_inode, name, buffer, size, flags)); \ +} +/* + * 2.6.32 API + */ +#elif defined(HAVE_XATTR_SET_INODE) +#define ZPL_XATTR_SET_WRAPPER(fn) \ +static int \ +fn(struct inode *ip, const char *name, const void *buffer, \ + size_t size, int flags) \ +{ \ + return (__ ## fn(ip, name, buffer, size, flags)); \ +} +#endif + +#ifdef HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY +#define zpl_security_inode_init_security(ip, dip, qstr, nm, val, len) \ + security_inode_init_security(ip, dip, qstr, nm, val, len) +#else +#define zpl_security_inode_init_security(ip, dip, qstr, nm, val, len) \ + security_inode_init_security(ip, dip, nm, val, len) +#endif /* HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY */ + +/* + * Linux 3.7 API change. posix_acl_{from,to}_xattr gained the user_ns + * parameter. All callers are expected to pass the &init_user_ns which + * is available through the init credential (kcred). + */ +#ifdef HAVE_POSIX_ACL_FROM_XATTR_USERNS +static inline struct posix_acl * +zpl_acl_from_xattr(const void *value, int size) +{ + return (posix_acl_from_xattr(kcred->user_ns, value, size)); +} + +static inline int +zpl_acl_to_xattr(struct posix_acl *acl, void *value, int size) +{ + return (posix_acl_to_xattr(kcred->user_ns, acl, value, size)); +} + +#else + +static inline struct posix_acl * +zpl_acl_from_xattr(const void *value, int size) +{ + return (posix_acl_from_xattr(value, size)); +} + +static inline int +zpl_acl_to_xattr(struct posix_acl *acl, void *value, int size) +{ + return (posix_acl_to_xattr(acl, value, size)); +} +#endif /* HAVE_POSIX_ACL_FROM_XATTR_USERNS */ + +#endif /* _ZFS_XATTR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/Makefile.am @@ -0,0 +1,135 @@ +SUBDIRS = fm fs crypto sysevent + +COMMON_H = \ + $(top_srcdir)/include/sys/abd.h \ + $(top_srcdir)/include/sys/arc.h \ + $(top_srcdir)/include/sys/arc_impl.h \ + $(top_srcdir)/include/sys/avl.h \ + $(top_srcdir)/include/sys/avl_impl.h \ + $(top_srcdir)/include/sys/blkptr.h \ + $(top_srcdir)/include/sys/bplist.h \ + $(top_srcdir)/include/sys/bpobj.h \ + $(top_srcdir)/include/sys/bptree.h \ + $(top_srcdir)/include/sys/bqueue.h \ + $(top_srcdir)/include/sys/dbuf.h \ + $(top_srcdir)/include/sys/ddt.h \ + $(top_srcdir)/include/sys/dmu.h \ + $(top_srcdir)/include/sys/dmu_impl.h \ + $(top_srcdir)/include/sys/dmu_objset.h \ + $(top_srcdir)/include/sys/dmu_send.h \ + $(top_srcdir)/include/sys/dmu_traverse.h \ + $(top_srcdir)/include/sys/dmu_tx.h \ + $(top_srcdir)/include/sys/dmu_zfetch.h \ + $(top_srcdir)/include/sys/dnode.h \ + $(top_srcdir)/include/sys/dsl_bookmark.h \ + $(top_srcdir)/include/sys/dsl_dataset.h \ + $(top_srcdir)/include/sys/dsl_deadlist.h \ + $(top_srcdir)/include/sys/dsl_deleg.h \ + $(top_srcdir)/include/sys/dsl_destroy.h \ + $(top_srcdir)/include/sys/dsl_dir.h \ + $(top_srcdir)/include/sys/dsl_pool.h \ + $(top_srcdir)/include/sys/dsl_prop.h \ + $(top_srcdir)/include/sys/dsl_scan.h \ + $(top_srcdir)/include/sys/dsl_synctask.h \ + $(top_srcdir)/include/sys/dsl_userhold.h \ + $(top_srcdir)/include/sys/edonr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/metaslab.h \ + $(top_srcdir)/include/sys/metaslab_impl.h \ + $(top_srcdir)/include/sys/mmp.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/multilist.h \ + $(top_srcdir)/include/sys/nvpair.h \ + $(top_srcdir)/include/sys/nvpair_impl.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/range_tree.h \ + $(top_srcdir)/include/sys/refcount.h \ + $(top_srcdir)/include/sys/rrwlock.h \ + $(top_srcdir)/include/sys/sa.h \ + $(top_srcdir)/include/sys/sa_impl.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sha2.h \ + $(top_srcdir)/include/sys/skein.h \ + $(top_srcdir)/include/sys/spa_boot.h \ + $(top_srcdir)/include/sys/space_map.h \ + $(top_srcdir)/include/sys/space_reftree.h \ + $(top_srcdir)/include/sys/spa.h \ + $(top_srcdir)/include/sys/spa_impl.h \ + $(top_srcdir)/include/sys/spa_checksum.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/trace.h \ + $(top_srcdir)/include/sys/trace_acl.h \ + $(top_srcdir)/include/sys/trace_arc.h \ + $(top_srcdir)/include/sys/trace_common.h \ + $(top_srcdir)/include/sys/trace_dbgmsg.h \ + $(top_srcdir)/include/sys/trace_dbuf.h \ + $(top_srcdir)/include/sys/trace_dmu.h \ + $(top_srcdir)/include/sys/trace_dnode.h \ + $(top_srcdir)/include/sys/trace_multilist.h \ + $(top_srcdir)/include/sys/trace_txg.h \ + $(top_srcdir)/include/sys/trace_zil.h \ + $(top_srcdir)/include/sys/trace_zio.h \ + $(top_srcdir)/include/sys/trace_zrlock.h \ + $(top_srcdir)/include/sys/txg.h \ + $(top_srcdir)/include/sys/txg_impl.h \ + $(top_srcdir)/include/sys/u8_textprep_data.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uberblock.h \ + $(top_srcdir)/include/sys/uberblock_impl.h \ + $(top_srcdir)/include/sys/uio_impl.h \ + $(top_srcdir)/include/sys/unique.h \ + $(top_srcdir)/include/sys/uuid.h \ + $(top_srcdir)/include/sys/vdev_disk.h \ + $(top_srcdir)/include/sys/vdev_file.h \ + $(top_srcdir)/include/sys/vdev.h \ + $(top_srcdir)/include/sys/vdev_impl.h \ + $(top_srcdir)/include/sys/vdev_raidz.h \ + $(top_srcdir)/include/sys/vdev_raidz_impl.h \ + $(top_srcdir)/include/sys/xvattr.h \ + $(top_srcdir)/include/sys/zap.h \ + $(top_srcdir)/include/sys/zap_impl.h \ + $(top_srcdir)/include/sys/zap_leaf.h \ + $(top_srcdir)/include/sys/zfeature.h \ + $(top_srcdir)/include/sys/zfs_acl.h \ + $(top_srcdir)/include/sys/zfs_context.h \ + $(top_srcdir)/include/sys/zfs_ctldir.h \ + $(top_srcdir)/include/sys/zfs_debug.h \ + $(top_srcdir)/include/sys/zfs_delay.h \ + $(top_srcdir)/include/sys/zfs_dir.h \ + $(top_srcdir)/include/sys/zfs_fuid.h \ + $(top_srcdir)/include/sys/zfs_ratelimit.h \ + $(top_srcdir)/include/sys/zfs_rlock.h \ + $(top_srcdir)/include/sys/zfs_sa.h \ + $(top_srcdir)/include/sys/zfs_stat.h \ + $(top_srcdir)/include/sys/zfs_vfsops.h \ + $(top_srcdir)/include/sys/zfs_vnops.h \ + $(top_srcdir)/include/sys/zfs_znode.h \ + $(top_srcdir)/include/sys/zil.h \ + $(top_srcdir)/include/sys/zil_impl.h \ + $(top_srcdir)/include/sys/zio_checksum.h \ + $(top_srcdir)/include/sys/zio_compress.h \ + $(top_srcdir)/include/sys/zio.h \ + $(top_srcdir)/include/sys/zio_impl.h \ + $(top_srcdir)/include/sys/zio_priority.h \ + $(top_srcdir)/include/sys/zrlock.h + +KERNEL_H = \ + $(top_srcdir)/include/sys/zfs_ioctl.h \ + $(top_srcdir)/include/sys/zfs_onexit.h \ + ${top_srcdir}/include/sys/zpl.h \ + $(top_srcdir)/include/sys/zvol.h + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/Makefile.in @@ -0,0 +1,1244 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/abd.h \ + $(top_srcdir)/include/sys/arc.h \ + $(top_srcdir)/include/sys/arc_impl.h \ + $(top_srcdir)/include/sys/avl.h \ + $(top_srcdir)/include/sys/avl_impl.h \ + $(top_srcdir)/include/sys/blkptr.h \ + $(top_srcdir)/include/sys/bplist.h \ + $(top_srcdir)/include/sys/bpobj.h \ + $(top_srcdir)/include/sys/bptree.h \ + $(top_srcdir)/include/sys/bqueue.h \ + $(top_srcdir)/include/sys/dbuf.h \ + $(top_srcdir)/include/sys/ddt.h \ + $(top_srcdir)/include/sys/dmu.h \ + $(top_srcdir)/include/sys/dmu_impl.h \ + $(top_srcdir)/include/sys/dmu_objset.h \ + $(top_srcdir)/include/sys/dmu_send.h \ + $(top_srcdir)/include/sys/dmu_traverse.h \ + $(top_srcdir)/include/sys/dmu_tx.h \ + $(top_srcdir)/include/sys/dmu_zfetch.h \ + $(top_srcdir)/include/sys/dnode.h \ + $(top_srcdir)/include/sys/dsl_bookmark.h \ + $(top_srcdir)/include/sys/dsl_dataset.h \ + $(top_srcdir)/include/sys/dsl_deadlist.h \ + $(top_srcdir)/include/sys/dsl_deleg.h \ + $(top_srcdir)/include/sys/dsl_destroy.h \ + $(top_srcdir)/include/sys/dsl_dir.h \ + $(top_srcdir)/include/sys/dsl_pool.h \ + $(top_srcdir)/include/sys/dsl_prop.h \ + $(top_srcdir)/include/sys/dsl_scan.h \ + $(top_srcdir)/include/sys/dsl_synctask.h \ + $(top_srcdir)/include/sys/dsl_userhold.h \ + $(top_srcdir)/include/sys/edonr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/metaslab.h \ + $(top_srcdir)/include/sys/metaslab_impl.h \ + $(top_srcdir)/include/sys/mmp.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/multilist.h \ + $(top_srcdir)/include/sys/nvpair.h \ + $(top_srcdir)/include/sys/nvpair_impl.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/range_tree.h \ + $(top_srcdir)/include/sys/refcount.h \ + $(top_srcdir)/include/sys/rrwlock.h \ + $(top_srcdir)/include/sys/sa.h \ + $(top_srcdir)/include/sys/sa_impl.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sha2.h \ + $(top_srcdir)/include/sys/skein.h \ + $(top_srcdir)/include/sys/spa_boot.h \ + $(top_srcdir)/include/sys/space_map.h \ + $(top_srcdir)/include/sys/space_reftree.h \ + $(top_srcdir)/include/sys/spa.h \ + $(top_srcdir)/include/sys/spa_impl.h \ + $(top_srcdir)/include/sys/spa_checksum.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/trace.h \ + $(top_srcdir)/include/sys/trace_acl.h \ + $(top_srcdir)/include/sys/trace_arc.h \ + $(top_srcdir)/include/sys/trace_common.h \ + $(top_srcdir)/include/sys/trace_dbgmsg.h \ + $(top_srcdir)/include/sys/trace_dbuf.h \ + $(top_srcdir)/include/sys/trace_dmu.h \ + $(top_srcdir)/include/sys/trace_dnode.h \ + $(top_srcdir)/include/sys/trace_multilist.h \ + $(top_srcdir)/include/sys/trace_txg.h \ + $(top_srcdir)/include/sys/trace_zil.h \ + $(top_srcdir)/include/sys/trace_zio.h \ + $(top_srcdir)/include/sys/trace_zrlock.h \ + $(top_srcdir)/include/sys/txg.h \ + $(top_srcdir)/include/sys/txg_impl.h \ + $(top_srcdir)/include/sys/u8_textprep_data.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uberblock.h \ + $(top_srcdir)/include/sys/uberblock_impl.h \ + $(top_srcdir)/include/sys/uio_impl.h \ + $(top_srcdir)/include/sys/unique.h \ + $(top_srcdir)/include/sys/uuid.h \ + $(top_srcdir)/include/sys/vdev_disk.h \ + $(top_srcdir)/include/sys/vdev_file.h \ + $(top_srcdir)/include/sys/vdev.h \ + $(top_srcdir)/include/sys/vdev_impl.h \ + $(top_srcdir)/include/sys/vdev_raidz.h \ + $(top_srcdir)/include/sys/vdev_raidz_impl.h \ + $(top_srcdir)/include/sys/xvattr.h \ + $(top_srcdir)/include/sys/zap.h \ + $(top_srcdir)/include/sys/zap_impl.h \ + $(top_srcdir)/include/sys/zap_leaf.h \ + $(top_srcdir)/include/sys/zfeature.h \ + $(top_srcdir)/include/sys/zfs_acl.h \ + $(top_srcdir)/include/sys/zfs_context.h \ + $(top_srcdir)/include/sys/zfs_ctldir.h \ + $(top_srcdir)/include/sys/zfs_debug.h \ + $(top_srcdir)/include/sys/zfs_delay.h \ + $(top_srcdir)/include/sys/zfs_dir.h \ + $(top_srcdir)/include/sys/zfs_fuid.h \ + $(top_srcdir)/include/sys/zfs_ratelimit.h \ + $(top_srcdir)/include/sys/zfs_rlock.h \ + $(top_srcdir)/include/sys/zfs_sa.h \ + $(top_srcdir)/include/sys/zfs_stat.h \ + $(top_srcdir)/include/sys/zfs_vfsops.h \ + $(top_srcdir)/include/sys/zfs_vnops.h \ + $(top_srcdir)/include/sys/zfs_znode.h \ + $(top_srcdir)/include/sys/zil.h \ + $(top_srcdir)/include/sys/zil_impl.h \ + $(top_srcdir)/include/sys/zio_checksum.h \ + $(top_srcdir)/include/sys/zio_compress.h \ + $(top_srcdir)/include/sys/zio.h \ + $(top_srcdir)/include/sys/zio_impl.h \ + $(top_srcdir)/include/sys/zio_priority.h \ + $(top_srcdir)/include/sys/zrlock.h \ + $(top_srcdir)/include/sys/zfs_ioctl.h \ + $(top_srcdir)/include/sys/zfs_onexit.h \ + ${top_srcdir}/include/sys/zpl.h \ + $(top_srcdir)/include/sys/zvol.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/sys/abd.h \ + $(top_srcdir)/include/sys/arc.h \ + $(top_srcdir)/include/sys/arc_impl.h \ + $(top_srcdir)/include/sys/avl.h \ + $(top_srcdir)/include/sys/avl_impl.h \ + $(top_srcdir)/include/sys/blkptr.h \ + $(top_srcdir)/include/sys/bplist.h \ + $(top_srcdir)/include/sys/bpobj.h \ + $(top_srcdir)/include/sys/bptree.h \ + $(top_srcdir)/include/sys/bqueue.h \ + $(top_srcdir)/include/sys/dbuf.h \ + $(top_srcdir)/include/sys/ddt.h \ + $(top_srcdir)/include/sys/dmu.h \ + $(top_srcdir)/include/sys/dmu_impl.h \ + $(top_srcdir)/include/sys/dmu_objset.h \ + $(top_srcdir)/include/sys/dmu_send.h \ + $(top_srcdir)/include/sys/dmu_traverse.h \ + $(top_srcdir)/include/sys/dmu_tx.h \ + $(top_srcdir)/include/sys/dmu_zfetch.h \ + $(top_srcdir)/include/sys/dnode.h \ + $(top_srcdir)/include/sys/dsl_bookmark.h \ + $(top_srcdir)/include/sys/dsl_dataset.h \ + $(top_srcdir)/include/sys/dsl_deadlist.h \ + $(top_srcdir)/include/sys/dsl_deleg.h \ + $(top_srcdir)/include/sys/dsl_destroy.h \ + $(top_srcdir)/include/sys/dsl_dir.h \ + $(top_srcdir)/include/sys/dsl_pool.h \ + $(top_srcdir)/include/sys/dsl_prop.h \ + $(top_srcdir)/include/sys/dsl_scan.h \ + $(top_srcdir)/include/sys/dsl_synctask.h \ + $(top_srcdir)/include/sys/dsl_userhold.h \ + $(top_srcdir)/include/sys/edonr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/metaslab.h \ + $(top_srcdir)/include/sys/metaslab_impl.h \ + $(top_srcdir)/include/sys/mmp.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/multilist.h \ + $(top_srcdir)/include/sys/nvpair.h \ + $(top_srcdir)/include/sys/nvpair_impl.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/range_tree.h \ + $(top_srcdir)/include/sys/refcount.h \ + $(top_srcdir)/include/sys/rrwlock.h \ + $(top_srcdir)/include/sys/sa.h \ + $(top_srcdir)/include/sys/sa_impl.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sha2.h \ + $(top_srcdir)/include/sys/skein.h \ + $(top_srcdir)/include/sys/spa_boot.h \ + $(top_srcdir)/include/sys/space_map.h \ + $(top_srcdir)/include/sys/space_reftree.h \ + $(top_srcdir)/include/sys/spa.h \ + $(top_srcdir)/include/sys/spa_impl.h \ + $(top_srcdir)/include/sys/spa_checksum.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/trace.h \ + $(top_srcdir)/include/sys/trace_acl.h \ + $(top_srcdir)/include/sys/trace_arc.h \ + $(top_srcdir)/include/sys/trace_common.h \ + $(top_srcdir)/include/sys/trace_dbgmsg.h \ + $(top_srcdir)/include/sys/trace_dbuf.h \ + $(top_srcdir)/include/sys/trace_dmu.h \ + $(top_srcdir)/include/sys/trace_dnode.h \ + $(top_srcdir)/include/sys/trace_multilist.h \ + $(top_srcdir)/include/sys/trace_txg.h \ + $(top_srcdir)/include/sys/trace_zil.h \ + $(top_srcdir)/include/sys/trace_zio.h \ + $(top_srcdir)/include/sys/trace_zrlock.h \ + $(top_srcdir)/include/sys/txg.h \ + $(top_srcdir)/include/sys/txg_impl.h \ + $(top_srcdir)/include/sys/u8_textprep_data.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uberblock.h \ + $(top_srcdir)/include/sys/uberblock_impl.h \ + $(top_srcdir)/include/sys/uio_impl.h \ + $(top_srcdir)/include/sys/unique.h \ + $(top_srcdir)/include/sys/uuid.h \ + $(top_srcdir)/include/sys/vdev_disk.h \ + $(top_srcdir)/include/sys/vdev_file.h \ + $(top_srcdir)/include/sys/vdev.h \ + $(top_srcdir)/include/sys/vdev_impl.h \ + $(top_srcdir)/include/sys/vdev_raidz.h \ + $(top_srcdir)/include/sys/vdev_raidz_impl.h \ + $(top_srcdir)/include/sys/xvattr.h \ + $(top_srcdir)/include/sys/zap.h \ + $(top_srcdir)/include/sys/zap_impl.h \ + $(top_srcdir)/include/sys/zap_leaf.h \ + $(top_srcdir)/include/sys/zfeature.h \ + $(top_srcdir)/include/sys/zfs_acl.h \ + $(top_srcdir)/include/sys/zfs_context.h \ + $(top_srcdir)/include/sys/zfs_ctldir.h \ + $(top_srcdir)/include/sys/zfs_debug.h \ + $(top_srcdir)/include/sys/zfs_delay.h \ + $(top_srcdir)/include/sys/zfs_dir.h \ + $(top_srcdir)/include/sys/zfs_fuid.h \ + $(top_srcdir)/include/sys/zfs_ratelimit.h \ + $(top_srcdir)/include/sys/zfs_rlock.h \ + $(top_srcdir)/include/sys/zfs_sa.h \ + $(top_srcdir)/include/sys/zfs_stat.h \ + $(top_srcdir)/include/sys/zfs_vfsops.h \ + $(top_srcdir)/include/sys/zfs_vnops.h \ + $(top_srcdir)/include/sys/zfs_znode.h \ + $(top_srcdir)/include/sys/zil.h \ + $(top_srcdir)/include/sys/zil_impl.h \ + $(top_srcdir)/include/sys/zio_checksum.h \ + $(top_srcdir)/include/sys/zio_compress.h \ + $(top_srcdir)/include/sys/zio.h \ + $(top_srcdir)/include/sys/zio_impl.h \ + $(top_srcdir)/include/sys/zio_priority.h \ + $(top_srcdir)/include/sys/zrlock.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +SUBDIRS = fm fs crypto sysevent +COMMON_H = \ + $(top_srcdir)/include/sys/abd.h \ + $(top_srcdir)/include/sys/arc.h \ + $(top_srcdir)/include/sys/arc_impl.h \ + $(top_srcdir)/include/sys/avl.h \ + $(top_srcdir)/include/sys/avl_impl.h \ + $(top_srcdir)/include/sys/blkptr.h \ + $(top_srcdir)/include/sys/bplist.h \ + $(top_srcdir)/include/sys/bpobj.h \ + $(top_srcdir)/include/sys/bptree.h \ + $(top_srcdir)/include/sys/bqueue.h \ + $(top_srcdir)/include/sys/dbuf.h \ + $(top_srcdir)/include/sys/ddt.h \ + $(top_srcdir)/include/sys/dmu.h \ + $(top_srcdir)/include/sys/dmu_impl.h \ + $(top_srcdir)/include/sys/dmu_objset.h \ + $(top_srcdir)/include/sys/dmu_send.h \ + $(top_srcdir)/include/sys/dmu_traverse.h \ + $(top_srcdir)/include/sys/dmu_tx.h \ + $(top_srcdir)/include/sys/dmu_zfetch.h \ + $(top_srcdir)/include/sys/dnode.h \ + $(top_srcdir)/include/sys/dsl_bookmark.h \ + $(top_srcdir)/include/sys/dsl_dataset.h \ + $(top_srcdir)/include/sys/dsl_deadlist.h \ + $(top_srcdir)/include/sys/dsl_deleg.h \ + $(top_srcdir)/include/sys/dsl_destroy.h \ + $(top_srcdir)/include/sys/dsl_dir.h \ + $(top_srcdir)/include/sys/dsl_pool.h \ + $(top_srcdir)/include/sys/dsl_prop.h \ + $(top_srcdir)/include/sys/dsl_scan.h \ + $(top_srcdir)/include/sys/dsl_synctask.h \ + $(top_srcdir)/include/sys/dsl_userhold.h \ + $(top_srcdir)/include/sys/edonr.h \ + $(top_srcdir)/include/sys/efi_partition.h \ + $(top_srcdir)/include/sys/metaslab.h \ + $(top_srcdir)/include/sys/metaslab_impl.h \ + $(top_srcdir)/include/sys/mmp.h \ + $(top_srcdir)/include/sys/mntent.h \ + $(top_srcdir)/include/sys/multilist.h \ + $(top_srcdir)/include/sys/nvpair.h \ + $(top_srcdir)/include/sys/nvpair_impl.h \ + $(top_srcdir)/include/sys/pathname.h \ + $(top_srcdir)/include/sys/policy.h \ + $(top_srcdir)/include/sys/range_tree.h \ + $(top_srcdir)/include/sys/refcount.h \ + $(top_srcdir)/include/sys/rrwlock.h \ + $(top_srcdir)/include/sys/sa.h \ + $(top_srcdir)/include/sys/sa_impl.h \ + $(top_srcdir)/include/sys/sdt.h \ + $(top_srcdir)/include/sys/sha2.h \ + $(top_srcdir)/include/sys/skein.h \ + $(top_srcdir)/include/sys/spa_boot.h \ + $(top_srcdir)/include/sys/space_map.h \ + $(top_srcdir)/include/sys/space_reftree.h \ + $(top_srcdir)/include/sys/spa.h \ + $(top_srcdir)/include/sys/spa_impl.h \ + $(top_srcdir)/include/sys/spa_checksum.h \ + $(top_srcdir)/include/sys/sysevent.h \ + $(top_srcdir)/include/sys/trace.h \ + $(top_srcdir)/include/sys/trace_acl.h \ + $(top_srcdir)/include/sys/trace_arc.h \ + $(top_srcdir)/include/sys/trace_common.h \ + $(top_srcdir)/include/sys/trace_dbgmsg.h \ + $(top_srcdir)/include/sys/trace_dbuf.h \ + $(top_srcdir)/include/sys/trace_dmu.h \ + $(top_srcdir)/include/sys/trace_dnode.h \ + $(top_srcdir)/include/sys/trace_multilist.h \ + $(top_srcdir)/include/sys/trace_txg.h \ + $(top_srcdir)/include/sys/trace_zil.h \ + $(top_srcdir)/include/sys/trace_zio.h \ + $(top_srcdir)/include/sys/trace_zrlock.h \ + $(top_srcdir)/include/sys/txg.h \ + $(top_srcdir)/include/sys/txg_impl.h \ + $(top_srcdir)/include/sys/u8_textprep_data.h \ + $(top_srcdir)/include/sys/u8_textprep.h \ + $(top_srcdir)/include/sys/uberblock.h \ + $(top_srcdir)/include/sys/uberblock_impl.h \ + $(top_srcdir)/include/sys/uio_impl.h \ + $(top_srcdir)/include/sys/unique.h \ + $(top_srcdir)/include/sys/uuid.h \ + $(top_srcdir)/include/sys/vdev_disk.h \ + $(top_srcdir)/include/sys/vdev_file.h \ + $(top_srcdir)/include/sys/vdev.h \ + $(top_srcdir)/include/sys/vdev_impl.h \ + $(top_srcdir)/include/sys/vdev_raidz.h \ + $(top_srcdir)/include/sys/vdev_raidz_impl.h \ + $(top_srcdir)/include/sys/xvattr.h \ + $(top_srcdir)/include/sys/zap.h \ + $(top_srcdir)/include/sys/zap_impl.h \ + $(top_srcdir)/include/sys/zap_leaf.h \ + $(top_srcdir)/include/sys/zfeature.h \ + $(top_srcdir)/include/sys/zfs_acl.h \ + $(top_srcdir)/include/sys/zfs_context.h \ + $(top_srcdir)/include/sys/zfs_ctldir.h \ + $(top_srcdir)/include/sys/zfs_debug.h \ + $(top_srcdir)/include/sys/zfs_delay.h \ + $(top_srcdir)/include/sys/zfs_dir.h \ + $(top_srcdir)/include/sys/zfs_fuid.h \ + $(top_srcdir)/include/sys/zfs_ratelimit.h \ + $(top_srcdir)/include/sys/zfs_rlock.h \ + $(top_srcdir)/include/sys/zfs_sa.h \ + $(top_srcdir)/include/sys/zfs_stat.h \ + $(top_srcdir)/include/sys/zfs_vfsops.h \ + $(top_srcdir)/include/sys/zfs_vnops.h \ + $(top_srcdir)/include/sys/zfs_znode.h \ + $(top_srcdir)/include/sys/zil.h \ + $(top_srcdir)/include/sys/zil_impl.h \ + $(top_srcdir)/include/sys/zio_checksum.h \ + $(top_srcdir)/include/sys/zio_compress.h \ + $(top_srcdir)/include/sys/zio.h \ + $(top_srcdir)/include/sys/zio_impl.h \ + $(top_srcdir)/include/sys/zio_priority.h \ + $(top_srcdir)/include/sys/zrlock.h + +KERNEL_H = \ + $(top_srcdir)/include/sys/zfs_ioctl.h \ + $(top_srcdir)/include/sys/zfs_onexit.h \ + ${top_srcdir}/include/sys/zpl.h \ + $(top_srcdir)/include/sys/zvol.h + +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-kernelHEADERS install-libzfsHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/abd.h +++ linux-aws-4.15.0/zfs/include/sys/abd.h @@ -0,0 +1,179 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Chunwei Chen. All rights reserved. + * Copyright (c) 2016 by Delphix. All rights reserved. + */ + +#ifndef _ABD_H +#define _ABD_H + +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum abd_flags { + ABD_FLAG_LINEAR = 1 << 0, /* is buffer linear (or scattered)? */ + ABD_FLAG_OWNER = 1 << 1, /* does it own its data buffers? */ + ABD_FLAG_META = 1 << 2, /* does this represent FS metadata? */ + ABD_FLAG_MULTI_ZONE = 1 << 3, /* pages split over memory zones */ + ABD_FLAG_MULTI_CHUNK = 1 << 4 /* pages split over multiple chunks */ +} abd_flags_t; + +typedef struct abd { + abd_flags_t abd_flags; + uint_t abd_size; /* excludes scattered abd_offset */ + struct abd *abd_parent; + refcount_t abd_children; + union { + struct abd_scatter { + uint_t abd_offset; + uint_t abd_nents; + struct scatterlist *abd_sgl; + } abd_scatter; + struct abd_linear { + void *abd_buf; + } abd_linear; + } abd_u; +} abd_t; + +typedef int abd_iter_func_t(void *buf, size_t len, void *private); +typedef int abd_iter_func2_t(void *bufa, void *bufb, size_t len, void *private); + +extern int zfs_abd_scatter_enabled; + +static inline boolean_t +abd_is_linear(abd_t *abd) +{ + return ((abd->abd_flags & ABD_FLAG_LINEAR) != 0 ? B_TRUE : B_FALSE); +} + +/* + * Allocations and deallocations + */ + +abd_t *abd_alloc(size_t, boolean_t); +abd_t *abd_alloc_linear(size_t, boolean_t); +abd_t *abd_alloc_for_io(size_t, boolean_t); +abd_t *abd_alloc_sametype(abd_t *, size_t); +void abd_free(abd_t *); +abd_t *abd_get_offset(abd_t *, size_t); +abd_t *abd_get_offset_size(abd_t *, size_t, size_t); +abd_t *abd_get_from_buf(void *, size_t); +void abd_put(abd_t *); + +/* + * Conversion to and from a normal buffer + */ + +void *abd_to_buf(abd_t *); +void *abd_borrow_buf(abd_t *, size_t); +void *abd_borrow_buf_copy(abd_t *, size_t); +void abd_return_buf(abd_t *, void *, size_t); +void abd_return_buf_copy(abd_t *, void *, size_t); +void abd_take_ownership_of_buf(abd_t *, boolean_t); +void abd_release_ownership_of_buf(abd_t *); + +/* + * ABD operations + */ + +int abd_iterate_func(abd_t *, size_t, size_t, abd_iter_func_t *, void *); +int abd_iterate_func2(abd_t *, abd_t *, size_t, size_t, size_t, + abd_iter_func2_t *, void *); +void abd_copy_off(abd_t *, abd_t *, size_t, size_t, size_t); +void abd_copy_from_buf_off(abd_t *, const void *, size_t, size_t); +void abd_copy_to_buf_off(void *, abd_t *, size_t, size_t); +int abd_cmp(abd_t *, abd_t *); +int abd_cmp_buf_off(abd_t *, const void *, size_t, size_t); +void abd_zero_off(abd_t *, size_t, size_t); + +#if defined(_KERNEL) && defined(HAVE_SPL) +unsigned int abd_scatter_bio_map_off(struct bio *, abd_t *, unsigned int, + size_t); +unsigned long abd_nr_pages_off(abd_t *, unsigned int, size_t); +#endif + +void abd_raidz_gen_iterate(abd_t **cabds, abd_t *dabd, + ssize_t csize, ssize_t dsize, const unsigned parity, + void (*func_raidz_gen)(void **, const void *, size_t, size_t)); +void abd_raidz_rec_iterate(abd_t **cabds, abd_t **tabds, + ssize_t tsize, const unsigned parity, + void (*func_raidz_rec)(void **t, const size_t tsize, void **c, + const unsigned *mul), + const unsigned *mul); + +/* + * Wrappers for calls with offsets of 0 + */ + +static inline void +abd_copy(abd_t *dabd, abd_t *sabd, size_t size) +{ + abd_copy_off(dabd, sabd, 0, 0, size); +} + +static inline void +abd_copy_from_buf(abd_t *abd, const void *buf, size_t size) +{ + abd_copy_from_buf_off(abd, buf, 0, size); +} + +static inline void +abd_copy_to_buf(void* buf, abd_t *abd, size_t size) +{ + abd_copy_to_buf_off(buf, abd, 0, size); +} + +static inline int +abd_cmp_buf(abd_t *abd, const void *buf, size_t size) +{ + return (abd_cmp_buf_off(abd, buf, 0, size)); +} + +static inline void +abd_zero(abd_t *abd, size_t size) +{ + abd_zero_off(abd, 0, size); +} + +/* + * Module lifecycle + */ + +void abd_init(void); +void abd_fini(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _ABD_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/arc.h +++ linux-aws-4.15.0/zfs/include/sys/arc.h @@ -0,0 +1,275 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + */ + +#ifndef _SYS_ARC_H +#define _SYS_ARC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +/* + * Used by arc_flush() to inform arc_evict_state() that it should evict + * all available buffers from the arc state being passed in. + */ +#define ARC_EVICT_ALL -1ULL + +#define HDR_SET_LSIZE(hdr, x) do { \ + ASSERT(IS_P2ALIGNED(x, 1U << SPA_MINBLOCKSHIFT)); \ + (hdr)->b_lsize = ((x) >> SPA_MINBLOCKSHIFT); \ +_NOTE(CONSTCOND) } while (0) + +#define HDR_SET_PSIZE(hdr, x) do { \ + ASSERT(IS_P2ALIGNED((x), 1U << SPA_MINBLOCKSHIFT)); \ + (hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \ +_NOTE(CONSTCOND) } while (0) + +#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT) +#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT) + +typedef struct arc_buf_hdr arc_buf_hdr_t; +typedef struct arc_buf arc_buf_t; +typedef struct arc_prune arc_prune_t; +typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *private); +typedef void arc_prune_func_t(int64_t bytes, void *private); + +/* Shared module parameters */ +extern int zfs_arc_average_blocksize; + +/* generic arc_done_func_t's which you can use */ +arc_done_func_t arc_bcopy_func; +arc_done_func_t arc_getbuf_func; + +/* generic arc_prune_func_t wrapper for callbacks */ +struct arc_prune { + arc_prune_func_t *p_pfunc; + void *p_private; + uint64_t p_adjust; + list_node_t p_node; + refcount_t p_refcnt; +}; + +typedef enum arc_strategy { + ARC_STRATEGY_META_ONLY = 0, /* Evict only meta data buffers */ + ARC_STRATEGY_META_BALANCED = 1, /* Evict data buffers if needed */ +} arc_strategy_t; + +typedef enum arc_flags +{ + /* + * Public flags that can be passed into the ARC by external consumers. + */ + ARC_FLAG_WAIT = 1 << 0, /* perform sync I/O */ + ARC_FLAG_NOWAIT = 1 << 1, /* perform async I/O */ + ARC_FLAG_PREFETCH = 1 << 2, /* I/O is a prefetch */ + ARC_FLAG_CACHED = 1 << 3, /* I/O was in cache */ + ARC_FLAG_L2CACHE = 1 << 4, /* cache in L2ARC */ + ARC_FLAG_PREDICTIVE_PREFETCH = 1 << 5, /* I/O from zfetch */ + + /* + * Private ARC flags. These flags are private ARC only flags that + * will show up in b_flags in the arc_hdr_buf_t. These flags should + * only be set by ARC code. + */ + ARC_FLAG_IN_HASH_TABLE = 1 << 6, /* buffer is hashed */ + ARC_FLAG_IO_IN_PROGRESS = 1 << 7, /* I/O in progress */ + ARC_FLAG_IO_ERROR = 1 << 8, /* I/O failed for buf */ + ARC_FLAG_INDIRECT = 1 << 9, /* indirect block */ + /* Indicates that block was read with ASYNC priority. */ + ARC_FLAG_PRIO_ASYNC_READ = 1 << 10, + ARC_FLAG_L2_WRITING = 1 << 11, /* write in progress */ + ARC_FLAG_L2_EVICTED = 1 << 12, /* evicted during I/O */ + ARC_FLAG_L2_WRITE_HEAD = 1 << 13, /* head of write list */ + /* indicates that the buffer contains metadata (otherwise, data) */ + ARC_FLAG_BUFC_METADATA = 1 << 14, + + /* Flags specifying whether optional hdr struct fields are defined */ + ARC_FLAG_HAS_L1HDR = 1 << 15, + ARC_FLAG_HAS_L2HDR = 1 << 16, + + /* + * Indicates the arc_buf_hdr_t's b_pdata matches the on-disk data. + * This allows the l2arc to use the blkptr's checksum to verify + * the data without having to store the checksum in the hdr. + */ + ARC_FLAG_COMPRESSED_ARC = 1 << 17, + ARC_FLAG_SHARED_DATA = 1 << 18, + + /* + * The arc buffer's compression mode is stored in the top 7 bits of the + * flags field, so these dummy flags are included so that MDB can + * interpret the enum properly. + */ + ARC_FLAG_COMPRESS_0 = 1 << 24, + ARC_FLAG_COMPRESS_1 = 1 << 25, + ARC_FLAG_COMPRESS_2 = 1 << 26, + ARC_FLAG_COMPRESS_3 = 1 << 27, + ARC_FLAG_COMPRESS_4 = 1 << 28, + ARC_FLAG_COMPRESS_5 = 1 << 29, + ARC_FLAG_COMPRESS_6 = 1 << 30 + +} arc_flags_t; + +typedef enum arc_buf_flags { + ARC_BUF_FLAG_SHARED = 1 << 0, + ARC_BUF_FLAG_COMPRESSED = 1 << 1 +} arc_buf_flags_t; + +struct arc_buf { + arc_buf_hdr_t *b_hdr; + arc_buf_t *b_next; + kmutex_t b_evict_lock; + void *b_data; + arc_buf_flags_t b_flags; +}; + +typedef enum arc_buf_contents { + ARC_BUFC_INVALID, /* invalid type */ + ARC_BUFC_DATA, /* buffer contains data */ + ARC_BUFC_METADATA, /* buffer contains metadata */ + ARC_BUFC_NUMTYPES +} arc_buf_contents_t; + +/* + * The following breakdows of arc_size exist for kstat only. + */ +typedef enum arc_space_type { + ARC_SPACE_DATA, + ARC_SPACE_META, + ARC_SPACE_HDRS, + ARC_SPACE_L2HDRS, + ARC_SPACE_DBUF, + ARC_SPACE_DNODE, + ARC_SPACE_BONUS, + ARC_SPACE_NUMTYPES +} arc_space_type_t; + +typedef enum arc_state_type { + ARC_STATE_ANON, + ARC_STATE_MRU, + ARC_STATE_MRU_GHOST, + ARC_STATE_MFU, + ARC_STATE_MFU_GHOST, + ARC_STATE_L2C_ONLY, + ARC_STATE_NUMTYPES +} arc_state_type_t; + +typedef struct arc_buf_info { + arc_state_type_t abi_state_type; + arc_buf_contents_t abi_state_contents; + uint32_t abi_flags; + uint32_t abi_bufcnt; + uint64_t abi_size; + uint64_t abi_spa; + uint64_t abi_access; + uint32_t abi_mru_hits; + uint32_t abi_mru_ghost_hits; + uint32_t abi_mfu_hits; + uint32_t abi_mfu_ghost_hits; + uint32_t abi_l2arc_hits; + uint32_t abi_holds; + uint64_t abi_l2arc_dattr; + uint64_t abi_l2arc_asize; + enum zio_compress abi_l2arc_compress; +} arc_buf_info_t; + +void arc_space_consume(uint64_t space, arc_space_type_t type); +void arc_space_return(uint64_t space, arc_space_type_t type); +boolean_t arc_is_metadata(arc_buf_t *buf); +enum zio_compress arc_get_compression(arc_buf_t *buf); +int arc_decompress(arc_buf_t *buf); +arc_buf_t *arc_alloc_buf(spa_t *spa, void *tag, arc_buf_contents_t type, + int32_t size); +arc_buf_t *arc_alloc_compressed_buf(spa_t *spa, void *tag, + uint64_t psize, uint64_t lsize, enum zio_compress compression_type); +arc_buf_t *arc_loan_buf(spa_t *spa, boolean_t is_metadata, int size); +arc_buf_t *arc_loan_compressed_buf(spa_t *spa, uint64_t psize, uint64_t lsize, + enum zio_compress compression_type); +void arc_return_buf(arc_buf_t *buf, void *tag); +void arc_loan_inuse_buf(arc_buf_t *buf, void *tag); +void arc_buf_destroy(arc_buf_t *buf, void *tag); +void arc_buf_info(arc_buf_t *buf, arc_buf_info_t *abi, int state_index); +uint64_t arc_buf_size(arc_buf_t *buf); +uint64_t arc_buf_lsize(arc_buf_t *buf); +void arc_release(arc_buf_t *buf, void *tag); +int arc_released(arc_buf_t *buf); +void arc_buf_sigsegv(int sig, siginfo_t *si, void *unused); +void arc_buf_freeze(arc_buf_t *buf); +void arc_buf_thaw(arc_buf_t *buf); +#ifdef ZFS_DEBUG +int arc_referenced(arc_buf_t *buf); +#endif + +int arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, + arc_done_func_t *done, void *private, zio_priority_t priority, int flags, + arc_flags_t *arc_flags, const zbookmark_phys_t *zb); +zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg, + blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, const zio_prop_t *zp, + arc_done_func_t *ready, arc_done_func_t *child_ready, + arc_done_func_t *physdone, arc_done_func_t *done, + void *private, zio_priority_t priority, int zio_flags, + const zbookmark_phys_t *zb); + +arc_prune_t *arc_add_prune_callback(arc_prune_func_t *func, void *private); +void arc_remove_prune_callback(arc_prune_t *p); +void arc_freed(spa_t *spa, const blkptr_t *bp); + +void arc_flush(spa_t *spa, boolean_t retry); +void arc_tempreserve_clear(uint64_t reserve); +int arc_tempreserve_space(uint64_t reserve, uint64_t txg); + +uint64_t arc_target_bytes(void); +void arc_init(void); +void arc_fini(void); + +/* + * Level 2 ARC + */ + +void l2arc_add_vdev(spa_t *spa, vdev_t *vd); +void l2arc_remove_vdev(vdev_t *vd); +boolean_t l2arc_vdev_present(vdev_t *vd); +void l2arc_init(void); +void l2arc_fini(void); +void l2arc_start(void); +void l2arc_stop(void); + +#ifndef _KERNEL +extern boolean_t arc_watch; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ARC_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/arc_impl.h +++ linux-aws-4.15.0/zfs/include/sys/arc_impl.h @@ -0,0 +1,245 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright 2013 Nexenta Systems, Inc. All rights reserved. + */ + +#ifndef _SYS_ARC_IMPL_H +#define _SYS_ARC_IMPL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Note that buffers can be in one of 6 states: + * ARC_anon - anonymous (discussed below) + * ARC_mru - recently used, currently cached + * ARC_mru_ghost - recentely used, no longer in cache + * ARC_mfu - frequently used, currently cached + * ARC_mfu_ghost - frequently used, no longer in cache + * ARC_l2c_only - exists in L2ARC but not other states + * When there are no active references to the buffer, they are + * are linked onto a list in one of these arc states. These are + * the only buffers that can be evicted or deleted. Within each + * state there are multiple lists, one for meta-data and one for + * non-meta-data. Meta-data (indirect blocks, blocks of dnodes, + * etc.) is tracked separately so that it can be managed more + * explicitly: favored over data, limited explicitly. + * + * Anonymous buffers are buffers that are not associated with + * a DVA. These are buffers that hold dirty block copies + * before they are written to stable storage. By definition, + * they are "ref'd" and are considered part of arc_mru + * that cannot be freed. Generally, they will acquire a DVA + * as they are written and migrate onto the arc_mru list. + * + * The ARC_l2c_only state is for buffers that are in the second + * level ARC but no longer in any of the ARC_m* lists. The second + * level ARC itself may also contain buffers that are in any of + * the ARC_m* states - meaning that a buffer can exist in two + * places. The reason for the ARC_l2c_only state is to keep the + * buffer header in the hash table, so that reads that hit the + * second level ARC benefit from these fast lookups. + */ + +typedef struct arc_state { + /* + * list of evictable buffers + */ + multilist_t *arcs_list[ARC_BUFC_NUMTYPES]; + /* + * total amount of evictable data in this state + */ + refcount_t arcs_esize[ARC_BUFC_NUMTYPES]; + /* + * total amount of data in this state; this includes: evictable, + * non-evictable, ARC_BUFC_DATA, and ARC_BUFC_METADATA. + */ + refcount_t arcs_size; + /* + * supports the "dbufs" kstat + */ + arc_state_type_t arcs_state; +} arc_state_t; + +typedef struct arc_callback arc_callback_t; + +struct arc_callback { + void *acb_private; + arc_done_func_t *acb_done; + arc_buf_t *acb_buf; + boolean_t acb_compressed; + zio_t *acb_zio_dummy; + arc_callback_t *acb_next; +}; + +typedef struct arc_write_callback arc_write_callback_t; + +struct arc_write_callback { + void *awcb_private; + arc_done_func_t *awcb_ready; + arc_done_func_t *awcb_children_ready; + arc_done_func_t *awcb_physdone; + arc_done_func_t *awcb_done; + arc_buf_t *awcb_buf; +}; + +/* + * ARC buffers are separated into multiple structs as a memory saving measure: + * - Common fields struct, always defined, and embedded within it: + * - L2-only fields, always allocated but undefined when not in L2ARC + * - L1-only fields, only allocated when in L1ARC + * + * Buffer in L1 Buffer only in L2 + * +------------------------+ +------------------------+ + * | arc_buf_hdr_t | | arc_buf_hdr_t | + * | | | | + * | | | | + * | | | | + * +------------------------+ +------------------------+ + * | l2arc_buf_hdr_t | | l2arc_buf_hdr_t | + * | (undefined if L1-only) | | | + * +------------------------+ +------------------------+ + * | l1arc_buf_hdr_t | + * | | + * | | + * | | + * | | + * +------------------------+ + * + * Because it's possible for the L2ARC to become extremely large, we can wind + * up eating a lot of memory in L2ARC buffer headers, so the size of a header + * is minimized by only allocating the fields necessary for an L1-cached buffer + * when a header is actually in the L1 cache. The sub-headers (l1arc_buf_hdr and + * l2arc_buf_hdr) are embedded rather than allocated separately to save a couple + * words in pointers. arc_hdr_realloc() is used to switch a header between + * these two allocation states. + */ +typedef struct l1arc_buf_hdr { + kmutex_t b_freeze_lock; + zio_cksum_t *b_freeze_cksum; + + arc_buf_t *b_buf; + uint32_t b_bufcnt; + /* for waiting on writes to complete */ + kcondvar_t b_cv; + uint8_t b_byteswap; + + + /* protected by arc state mutex */ + arc_state_t *b_state; + multilist_node_t b_arc_node; + + /* updated atomically */ + clock_t b_arc_access; + uint32_t b_mru_hits; + uint32_t b_mru_ghost_hits; + uint32_t b_mfu_hits; + uint32_t b_mfu_ghost_hits; + uint32_t b_l2_hits; + + /* self protecting */ + refcount_t b_refcnt; + + arc_callback_t *b_acb; + abd_t *b_pabd; +} l1arc_buf_hdr_t; + +typedef struct l2arc_dev { + vdev_t *l2ad_vdev; /* vdev */ + spa_t *l2ad_spa; /* spa */ + uint64_t l2ad_hand; /* next write location */ + uint64_t l2ad_start; /* first addr on device */ + uint64_t l2ad_end; /* last addr on device */ + boolean_t l2ad_first; /* first sweep through */ + boolean_t l2ad_writing; /* currently writing */ + kmutex_t l2ad_mtx; /* lock for buffer list */ + list_t l2ad_buflist; /* buffer list */ + list_node_t l2ad_node; /* device list node */ + refcount_t l2ad_alloc; /* allocated bytes */ +} l2arc_dev_t; + +typedef struct l2arc_buf_hdr { + /* protected by arc_buf_hdr mutex */ + l2arc_dev_t *b_dev; /* L2ARC device */ + uint64_t b_daddr; /* disk address, offset byte */ + uint32_t b_hits; + + list_node_t b_l2node; +} l2arc_buf_hdr_t; + +typedef struct l2arc_write_callback { + l2arc_dev_t *l2wcb_dev; /* device info */ + arc_buf_hdr_t *l2wcb_head; /* head of write buflist */ +} l2arc_write_callback_t; + +struct arc_buf_hdr { + /* protected by hash lock */ + dva_t b_dva; + uint64_t b_birth; + + arc_buf_contents_t b_type; + arc_buf_hdr_t *b_hash_next; + arc_flags_t b_flags; + + /* + * This field stores the size of the data buffer after + * compression, and is set in the arc's zio completion handlers. + * It is in units of SPA_MINBLOCKSIZE (e.g. 1 == 512 bytes). + * + * While the block pointers can store up to 32MB in their psize + * field, we can only store up to 32MB minus 512B. This is due + * to the bp using a bias of 1, whereas we use a bias of 0 (i.e. + * a field of zeros represents 512B in the bp). We can't use a + * bias of 1 since we need to reserve a psize of zero, here, to + * represent holes and embedded blocks. + * + * This isn't a problem in practice, since the maximum size of a + * buffer is limited to 16MB, so we never need to store 32MB in + * this field. Even in the upstream illumos code base, the + * maximum size of a buffer is limited to 16MB. + */ + uint16_t b_psize; + + /* + * This field stores the size of the data buffer before + * compression, and cannot change once set. It is in units + * of SPA_MINBLOCKSIZE (e.g. 2 == 1024 bytes) + */ + uint16_t b_lsize; /* immutable */ + uint64_t b_spa; /* immutable */ + + /* L2ARC fields. Undefined when not in L2ARC. */ + l2arc_buf_hdr_t b_l2hdr; + /* L1ARC fields. Undefined when in l2arc_only state */ + l1arc_buf_hdr_t b_l1hdr; +}; +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ARC_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/avl.h +++ linux-aws-4.15.0/zfs/include/sys/avl.h @@ -0,0 +1,325 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#ifndef _AVL_H +#define _AVL_H + +/* + * This is a private header file. Applications should not directly include + * this file. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/* + * This is a generic implementation of AVL trees for use in the Solaris kernel. + * The interfaces provide an efficient way of implementing an ordered set of + * data structures. + * + * AVL trees provide an alternative to using an ordered linked list. Using AVL + * trees will usually be faster, however they requires more storage. An ordered + * linked list in general requires 2 pointers in each data structure. The + * AVL tree implementation uses 3 pointers. The following chart gives the + * approximate performance of operations with the different approaches: + * + * Operation Link List AVL tree + * --------- -------- -------- + * lookup O(n) O(log(n)) + * + * insert 1 node constant constant + * + * delete 1 node constant between constant and O(log(n)) + * + * delete all nodes O(n) O(n) + * + * visit the next + * or prev node constant between constant and O(log(n)) + * + * + * The data structure nodes are anchored at an "avl_tree_t" (the equivalent + * of a list header) and the individual nodes will have a field of + * type "avl_node_t" (corresponding to list pointers). + * + * The type "avl_index_t" is used to indicate a position in the list for + * certain calls. + * + * The usage scenario is generally: + * + * 1. Create the list/tree with: avl_create() + * + * followed by any mixture of: + * + * 2a. Insert nodes with: avl_add(), or avl_find() and avl_insert() + * + * 2b. Visited elements with: + * avl_first() - returns the lowest valued node + * avl_last() - returns the highest valued node + * AVL_NEXT() - given a node go to next higher one + * AVL_PREV() - given a node go to previous lower one + * + * 2c. Find the node with the closest value either less than or greater + * than a given value with avl_nearest(). + * + * 2d. Remove individual nodes from the list/tree with avl_remove(). + * + * and finally when the list is being destroyed + * + * 3. Use avl_destroy_nodes() to quickly process/free up any remaining nodes. + * Note that once you use avl_destroy_nodes(), you can no longer + * use any routine except avl_destroy_nodes() and avl_destoy(). + * + * 4. Use avl_destroy() to destroy the AVL tree itself. + * + * Any locking for multiple thread access is up to the user to provide, just + * as is needed for any linked list implementation. + */ + +/* + * AVL comparator helpers + */ +#define AVL_ISIGN(a) (((a) > 0) - ((a) < 0)) +#define AVL_CMP(a, b) (((a) > (b)) - ((a) < (b))) +#define AVL_PCMP(a, b) \ + (((uintptr_t)(a) > (uintptr_t)(b)) - ((uintptr_t)(a) < (uintptr_t)(b))) + +/* + * Type used for the root of the AVL tree. + */ +typedef struct avl_tree avl_tree_t; + +/* + * The data nodes in the AVL tree must have a field of this type. + */ +typedef struct avl_node avl_node_t; + +/* + * An opaque type used to locate a position in the tree where a node + * would be inserted. + */ +typedef uintptr_t avl_index_t; + + +/* + * Direction constants used for avl_nearest(). + */ +#define AVL_BEFORE (0) +#define AVL_AFTER (1) + + +/* + * Prototypes + * + * Where not otherwise mentioned, "void *" arguments are a pointer to the + * user data structure which must contain a field of type avl_node_t. + * + * Also assume the user data structures looks like: + * stuct my_type { + * ... + * avl_node_t my_link; + * ... + * }; + */ + +/* + * Initialize an AVL tree. Arguments are: + * + * tree - the tree to be initialized + * compar - function to compare two nodes, it must return exactly: -1, 0, or +1 + * -1 for <, 0 for ==, and +1 for > + * size - the value of sizeof(struct my_type) + * offset - the value of OFFSETOF(struct my_type, my_link) + */ +extern void avl_create(avl_tree_t *tree, + int (*compar) (const void *, const void *), size_t size, size_t offset); + + +/* + * Find a node with a matching value in the tree. Returns the matching node + * found. If not found, it returns NULL and then if "where" is not NULL it sets + * "where" for use with avl_insert() or avl_nearest(). + * + * node - node that has the value being looked for + * where - position for use with avl_nearest() or avl_insert(), may be NULL + */ +extern void *avl_find(avl_tree_t *tree, const void *node, avl_index_t *where); + +/* + * Insert a node into the tree. + * + * node - the node to insert + * where - position as returned from avl_find() + */ +extern void avl_insert(avl_tree_t *tree, void *node, avl_index_t where); + +/* + * Insert "new_data" in "tree" in the given "direction" either after + * or before the data "here". + * + * This might be useful for avl clients caching recently accessed + * data to avoid doing avl_find() again for insertion. + * + * new_data - new data to insert + * here - existing node in "tree" + * direction - either AVL_AFTER or AVL_BEFORE the data "here". + */ +extern void avl_insert_here(avl_tree_t *tree, void *new_data, void *here, + int direction); + + +/* + * Return the first or last valued node in the tree. Will return NULL + * if the tree is empty. + * + */ +extern void *avl_first(avl_tree_t *tree); +extern void *avl_last(avl_tree_t *tree); + + +/* + * Return the next or previous valued node in the tree. + * AVL_NEXT() will return NULL if at the last node. + * AVL_PREV() will return NULL if at the first node. + * + * node - the node from which the next or previous node is found + */ +#define AVL_NEXT(tree, node) avl_walk(tree, node, AVL_AFTER) +#define AVL_PREV(tree, node) avl_walk(tree, node, AVL_BEFORE) + + +/* + * Find the node with the nearest value either greater or less than + * the value from a previous avl_find(). Returns the node or NULL if + * there isn't a matching one. + * + * where - position as returned from avl_find() + * direction - either AVL_BEFORE or AVL_AFTER + * + * EXAMPLE get the greatest node that is less than a given value: + * + * avl_tree_t *tree; + * struct my_data look_for_value = {....}; + * struct my_data *node; + * struct my_data *less; + * avl_index_t where; + * + * node = avl_find(tree, &look_for_value, &where); + * if (node != NULL) + * less = AVL_PREV(tree, node); + * else + * less = avl_nearest(tree, where, AVL_BEFORE); + */ +extern void *avl_nearest(avl_tree_t *tree, avl_index_t where, int direction); + + +/* + * Add a single node to the tree. + * The node must not be in the tree, and it must not + * compare equal to any other node already in the tree. + * + * node - the node to add + */ +extern void avl_add(avl_tree_t *tree, void *node); + + +/* + * Remove a single node from the tree. The node must be in the tree. + * + * node - the node to remove + */ +extern void avl_remove(avl_tree_t *tree, void *node); + +/* + * Reinsert a node only if its order has changed relative to its nearest + * neighbors. To optimize performance avl_update_lt() checks only the previous + * node and avl_update_gt() checks only the next node. Use avl_update_lt() and + * avl_update_gt() only if you know the direction in which the order of the + * node may change. + */ +extern boolean_t avl_update(avl_tree_t *, void *); +extern boolean_t avl_update_lt(avl_tree_t *, void *); +extern boolean_t avl_update_gt(avl_tree_t *, void *); + +/* + * Swaps the contents of the two trees. + */ +extern void avl_swap(avl_tree_t *tree1, avl_tree_t *tree2); + +/* + * Return the number of nodes in the tree + */ +extern ulong_t avl_numnodes(avl_tree_t *tree); + +/* + * Return B_TRUE if there are zero nodes in the tree, B_FALSE otherwise. + */ +extern boolean_t avl_is_empty(avl_tree_t *tree); + +/* + * Used to destroy any remaining nodes in a tree. The cookie argument should + * be initialized to NULL before the first call. Returns a node that has been + * removed from the tree and may be free()'d. Returns NULL when the tree is + * empty. + * + * Once you call avl_destroy_nodes(), you can only continuing calling it and + * finally avl_destroy(). No other AVL routines will be valid. + * + * cookie - a "void *" used to save state between calls to avl_destroy_nodes() + * + * EXAMPLE: + * avl_tree_t *tree; + * struct my_data *node; + * void *cookie; + * + * cookie = NULL; + * while ((node = avl_destroy_nodes(tree, &cookie)) != NULL) + * free(node); + * avl_destroy(tree); + */ +extern void *avl_destroy_nodes(avl_tree_t *tree, void **cookie); + + +/* + * Final destroy of an AVL tree. Arguments are: + * + * tree - the empty tree to destroy + */ +extern void avl_destroy(avl_tree_t *tree); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _AVL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/avl_impl.h +++ linux-aws-4.15.0/zfs/include/sys/avl_impl.h @@ -0,0 +1,164 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _AVL_IMPL_H +#define _AVL_IMPL_H + + + +/* + * This is a private header file. Applications should not directly include + * this file. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * generic AVL tree implementation for kernel use + * + * There are 5 pieces of information stored for each node in an AVL tree + * + * pointer to less than child + * pointer to greater than child + * a pointer to the parent of this node + * an indication [0/1] of which child I am of my parent + * a "balance" (-1, 0, +1) indicating which child tree is taller + * + * Since they only need 3 bits, the last two fields are packed into the + * bottom bits of the parent pointer on 64 bit machines to save on space. + */ + +#ifndef _LP64 + +struct avl_node { + struct avl_node *avl_child[2]; /* left/right children */ + struct avl_node *avl_parent; /* this node's parent */ + unsigned short avl_child_index; /* my index in parent's avl_child[] */ + short avl_balance; /* balance value: -1, 0, +1 */ +}; + +#define AVL_XPARENT(n) ((n)->avl_parent) +#define AVL_SETPARENT(n, p) ((n)->avl_parent = (p)) + +#define AVL_XCHILD(n) ((n)->avl_child_index) +#define AVL_SETCHILD(n, c) ((n)->avl_child_index = (unsigned short)(c)) + +#define AVL_XBALANCE(n) ((n)->avl_balance) +#define AVL_SETBALANCE(n, b) ((n)->avl_balance = (short)(b)) + +#else /* _LP64 */ + +/* + * for 64 bit machines, avl_pcb contains parent pointer, balance and child_index + * values packed in the following manner: + * + * |63 3| 2 |1 0 | + * |-------------------------------------|-----------------|-------------| + * | avl_parent hi order bits | avl_child_index | avl_balance | + * | | | + 1 | + * |-------------------------------------|-----------------|-------------| + * + */ +struct avl_node { + struct avl_node *avl_child[2]; /* left/right children nodes */ + uintptr_t avl_pcb; /* parent, child_index, balance */ +}; + +/* + * macros to extract/set fields in avl_pcb + * + * pointer to the parent of the current node is the high order bits + */ +#define AVL_XPARENT(n) ((struct avl_node *)((n)->avl_pcb & ~7)) +#define AVL_SETPARENT(n, p) \ + ((n)->avl_pcb = (((n)->avl_pcb & 7) | (uintptr_t)(p))) + +/* + * index of this node in its parent's avl_child[]: bit #2 + */ +#define AVL_XCHILD(n) (((n)->avl_pcb >> 2) & 1) +#define AVL_SETCHILD(n, c) \ + ((n)->avl_pcb = (uintptr_t)(((n)->avl_pcb & ~4) | ((c) << 2))) + +/* + * balance indication for a node, lowest 2 bits. A valid balance is + * -1, 0, or +1, and is encoded by adding 1 to the value to get the + * unsigned values of 0, 1, 2. + */ +#define AVL_XBALANCE(n) ((int)(((n)->avl_pcb & 3) - 1)) +#define AVL_SETBALANCE(n, b) \ + ((n)->avl_pcb = (uintptr_t)((((n)->avl_pcb & ~3) | ((b) + 1)))) + +#endif /* _LP64 */ + + + +/* + * switch between a node and data pointer for a given tree + * the value of "o" is tree->avl_offset + */ +#define AVL_NODE2DATA(n, o) ((void *)((uintptr_t)(n) - (o))) +#define AVL_DATA2NODE(d, o) ((struct avl_node *)((uintptr_t)(d) + (o))) + + + +/* + * macros used to create/access an avl_index_t + */ +#define AVL_INDEX2NODE(x) ((avl_node_t *)((x) & ~1)) +#define AVL_INDEX2CHILD(x) ((x) & 1) +#define AVL_MKINDEX(n, c) ((avl_index_t)(n) | (c)) + + +/* + * The tree structure. The fields avl_root, avl_compar, and avl_offset come + * first since they are needed for avl_find(). We want them to fit into + * a single 64 byte cache line to make avl_find() as fast as possible. + */ +struct avl_tree { + struct avl_node *avl_root; /* root node in tree */ + int (*avl_compar)(const void *, const void *); + size_t avl_offset; /* offsetof(type, avl_link_t field) */ + ulong_t avl_numnodes; /* number of nodes in the tree */ + size_t avl_size; /* sizeof user type struct */ +}; + + +/* + * This will only by used via AVL_NEXT() or AVL_PREV() + */ +extern void *avl_walk(struct avl_tree *, void *, int); + +#ifdef __cplusplus +} +#endif + +#endif /* _AVL_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/blkptr.h +++ linux-aws-4.15.0/zfs/include/sys/blkptr.h @@ -0,0 +1,39 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_BLKPTR_H +#define _SYS_BLKPTR_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void encode_embedded_bp_compressed(blkptr_t *, void *, + enum zio_compress, int, int); +void decode_embedded_bp_compressed(const blkptr_t *, void *); +int decode_embedded_bp(const blkptr_t *, void *, int); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_BLKPTR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/bplist.h +++ linux-aws-4.15.0/zfs/include/sys/bplist.h @@ -0,0 +1,57 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_BPLIST_H +#define _SYS_BPLIST_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct bplist_entry { + blkptr_t bpe_blk; + list_node_t bpe_node; +} bplist_entry_t; + +typedef struct bplist { + kmutex_t bpl_lock; + list_t bpl_list; +} bplist_t; + +typedef int bplist_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx); + +void bplist_create(bplist_t *bpl); +void bplist_destroy(bplist_t *bpl); +void bplist_append(bplist_t *bpl, const blkptr_t *bp); +void bplist_iterate(bplist_t *bpl, bplist_itor_t *func, + void *arg, dmu_tx_t *tx); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_BPLIST_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/bpobj.h +++ linux-aws-4.15.0/zfs/include/sys/bpobj.h @@ -0,0 +1,93 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_BPOBJ_H +#define _SYS_BPOBJ_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct bpobj_phys { + /* + * This is the bonus buffer for the dead lists. The object's + * contents is an array of bpo_entries blkptr_t's, representing + * a total of bpo_bytes physical space. + */ + uint64_t bpo_num_blkptrs; + uint64_t bpo_bytes; + uint64_t bpo_comp; + uint64_t bpo_uncomp; + uint64_t bpo_subobjs; + uint64_t bpo_num_subobjs; +} bpobj_phys_t; + +#define BPOBJ_SIZE_V0 (2 * sizeof (uint64_t)) +#define BPOBJ_SIZE_V1 (4 * sizeof (uint64_t)) + +typedef struct bpobj { + kmutex_t bpo_lock; + objset_t *bpo_os; + uint64_t bpo_object; + int bpo_epb; + uint8_t bpo_havecomp; + uint8_t bpo_havesubobj; + bpobj_phys_t *bpo_phys; + dmu_buf_t *bpo_dbuf; + dmu_buf_t *bpo_cached_dbuf; +} bpobj_t; + +typedef int bpobj_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx); + +uint64_t bpobj_alloc(objset_t *mos, int blocksize, dmu_tx_t *tx); +uint64_t bpobj_alloc_empty(objset_t *os, int blocksize, dmu_tx_t *tx); +void bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx); +void bpobj_decr_empty(objset_t *os, dmu_tx_t *tx); + +int bpobj_open(bpobj_t *bpo, objset_t *mos, uint64_t object); +void bpobj_close(bpobj_t *bpo); + +int bpobj_iterate(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx); +int bpobj_iterate_nofree(bpobj_t *bpo, bpobj_itor_t func, void *, dmu_tx_t *); + +void bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx); +void bpobj_enqueue(bpobj_t *bpo, const blkptr_t *bp, dmu_tx_t *tx); + +int bpobj_space(bpobj_t *bpo, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +int bpobj_space_range(bpobj_t *bpo, uint64_t mintxg, uint64_t maxtxg, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_BPOBJ_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/bptree.h +++ linux-aws-4.15.0/zfs/include/sys/bptree.h @@ -0,0 +1,65 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_BPTREE_H +#define _SYS_BPTREE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct bptree_phys { + uint64_t bt_begin; + uint64_t bt_end; + uint64_t bt_bytes; + uint64_t bt_comp; + uint64_t bt_uncomp; +} bptree_phys_t; + +typedef struct bptree_entry_phys { + blkptr_t be_bp; + uint64_t be_birth_txg; /* only delete blocks born after this txg */ + zbookmark_phys_t be_zb; /* holds traversal resume point if needed */ +} bptree_entry_phys_t; + +typedef int bptree_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx); + +uint64_t bptree_alloc(objset_t *os, dmu_tx_t *tx); +int bptree_free(objset_t *os, uint64_t obj, dmu_tx_t *tx); +boolean_t bptree_is_empty(objset_t *os, uint64_t obj); + +void bptree_add(objset_t *os, uint64_t obj, blkptr_t *bp, uint64_t birth_txg, + uint64_t bytes, uint64_t comp, uint64_t uncomp, dmu_tx_t *tx); + +int bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, + bptree_itor_t func, void *arg, dmu_tx_t *tx); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_BPTREE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/bqueue.h +++ linux-aws-4.15.0/zfs/include/sys/bqueue.h @@ -0,0 +1,54 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#ifndef _BQUEUE_H +#define _BQUEUE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct bqueue { + list_t bq_list; + kmutex_t bq_lock; + kcondvar_t bq_add_cv; + kcondvar_t bq_pop_cv; + uint64_t bq_size; + uint64_t bq_maxsize; + size_t bq_node_offset; +} bqueue_t; + +typedef struct bqueue_node { + list_node_t bqn_node; + uint64_t bqn_size; +} bqueue_node_t; + + +int bqueue_init(bqueue_t *, uint64_t, size_t); +void bqueue_destroy(bqueue_t *); +void bqueue_enqueue(bqueue_t *, void *, uint64_t); +void *bqueue_dequeue(bqueue_t *); +boolean_t bqueue_empty(bqueue_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _BQUEUE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/crypto/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/crypto/Makefile.am @@ -0,0 +1,20 @@ +COMMON_H = \ + $(top_srcdir)/include/sys/crypto/api.h \ + $(top_srcdir)/include/sys/crypto/common.h \ + $(top_srcdir)/include/sys/crypto/icp.h + +KERNEL_H = + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys/crypto +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/crypto +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/crypto/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/crypto/Makefile.in @@ -0,0 +1,791 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/crypto +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/crypto/api.h \ + $(top_srcdir)/include/sys/crypto/common.h \ + $(top_srcdir)/include/sys/crypto/icp.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/sys/crypto/api.h \ + $(top_srcdir)/include/sys/crypto/common.h \ + $(top_srcdir)/include/sys/crypto/icp.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +COMMON_H = \ + $(top_srcdir)/include/sys/crypto/api.h \ + $(top_srcdir)/include/sys/crypto/common.h \ + $(top_srcdir)/include/sys/crypto/icp.h + +KERNEL_H = +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys/crypto +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/crypto +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/crypto/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/crypto/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS \ + install-libzfsHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/crypto/api.h +++ linux-aws-4.15.0/zfs/include/sys/crypto/api.h @@ -0,0 +1,425 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_API_H +#define _SYS_CRYPTO_API_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef long crypto_req_id_t; +typedef void *crypto_bc_t; +typedef void *crypto_context_t; +typedef void *crypto_ctx_template_t; + +typedef uint32_t crypto_call_flag_t; + +/* crypto_call_flag's values */ +#define CRYPTO_ALWAYS_QUEUE 0x00000001 /* ALWAYS queue the req. */ +#define CRYPTO_NOTIFY_OPDONE 0x00000002 /* Notify intermediate steps */ +#define CRYPTO_SKIP_REQID 0x00000004 /* Skip request ID generation */ +#define CRYPTO_RESTRICTED 0x00000008 /* cannot use restricted prov */ + +typedef struct { + crypto_call_flag_t cr_flag; + void (*cr_callback_func)(void *, int); + void *cr_callback_arg; + crypto_req_id_t cr_reqid; +} crypto_call_req_t; + +/* + * Returns the mechanism type corresponding to a mechanism name. + */ + +#define CRYPTO_MECH_INVALID ((uint64_t)-1) +extern crypto_mech_type_t crypto_mech2id(crypto_mech_name_t name); + +/* + * Create and destroy context templates. + */ +extern int crypto_create_ctx_template(crypto_mechanism_t *mech, + crypto_key_t *key, crypto_ctx_template_t *tmpl, int kmflag); +extern void crypto_destroy_ctx_template(crypto_ctx_template_t tmpl); + +/* + * Single and multi-part digest operations. + */ +extern int crypto_digest(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_data_t *digest, crypto_call_req_t *cr); +extern int crypto_digest_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_data_t *, + crypto_call_req_t *); +extern int crypto_digest_init(crypto_mechanism_t *mech, crypto_context_t *ctxp, + crypto_call_req_t *cr); +extern int crypto_digest_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_context_t *, crypto_call_req_t *); +extern int crypto_digest_update(crypto_context_t ctx, crypto_data_t *data, + crypto_call_req_t *cr); +extern int crypto_digest_final(crypto_context_t ctx, crypto_data_t *digest, + crypto_call_req_t *cr); + +/* + * Single and multi-part MAC operations. + */ +extern int crypto_mac(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *mac, + crypto_call_req_t *cr); +extern int crypto_mac_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_key_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_mac_verify(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *mac, + crypto_call_req_t *cr); +extern int crypto_mac_verify_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_key_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_mac_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, crypto_call_req_t *cr); +extern int crypto_mac_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_context_t *, crypto_call_req_t *); +extern int crypto_mac_update(crypto_context_t ctx, crypto_data_t *data, + crypto_call_req_t *cr); +extern int crypto_mac_final(crypto_context_t ctx, crypto_data_t *data, + crypto_call_req_t *cr); + +/* + * Single and multi-part sign with private key operations. + */ +extern int crypto_sign(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_data_t *data, crypto_ctx_template_t tmpl, + crypto_data_t *signature, crypto_call_req_t *cr); +extern int crypto_sign_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_sign_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, crypto_call_req_t *cr); +extern int crypto_sign_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_context_t *, crypto_call_req_t *); +extern int crypto_sign_update(crypto_context_t ctx, crypto_data_t *data, + crypto_call_req_t *cr); +extern int crypto_sign_final(crypto_context_t ctx, crypto_data_t *signature, + crypto_call_req_t *cr); +extern int crypto_sign_recover_init_prov(crypto_provider_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_ctx_template_t tmpl, crypto_context_t *, crypto_call_req_t *); +extern int crypto_sign_recover(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_data_t *data, crypto_ctx_template_t tmpl, crypto_data_t *signature, + crypto_call_req_t *cr); +extern int crypto_sign_recover_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); + +/* + * Single and multi-part verify with public key operations. + */ +extern int crypto_verify(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_data_t *data, crypto_ctx_template_t tmpl, crypto_data_t *signature, + crypto_call_req_t *cr); +extern int crypto_verify_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_verify_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, crypto_call_req_t *cr); +extern int crypto_verify_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_context_t *, crypto_call_req_t *); +extern int crypto_verify_update(crypto_context_t ctx, crypto_data_t *data, + crypto_call_req_t *cr); +extern int crypto_verify_final(crypto_context_t ctx, crypto_data_t *signature, + crypto_call_req_t *cr); +extern int crypto_verify_recover_init_prov(crypto_provider_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_ctx_template_t tmpl, crypto_context_t *, crypto_call_req_t *); +extern int crypto_verify_recover(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_data_t *signature, crypto_ctx_template_t tmpl, crypto_data_t *data, + crypto_call_req_t *cr); +extern int crypto_verify_recover_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); + +/* + * Single and multi-part encryption operations. + */ +extern int crypto_encrypt(crypto_mechanism_t *mech, crypto_data_t *plaintext, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *ciphertext, + crypto_call_req_t *cr); +extern int crypto_encrypt_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_key_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_encrypt_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, crypto_call_req_t *cr); +extern int crypto_encrypt_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_context_t *, crypto_call_req_t *); +extern int crypto_encrypt_update(crypto_context_t ctx, + crypto_data_t *plaintext, crypto_data_t *ciphertext, + crypto_call_req_t *cr); +extern int crypto_encrypt_final(crypto_context_t ctx, + crypto_data_t *ciphertext, crypto_call_req_t *cr); + +/* + * Single and multi-part decryption operations. + */ +extern int crypto_decrypt(crypto_mechanism_t *mech, crypto_data_t *ciphertext, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *plaintext, + crypto_call_req_t *cr); +extern int crypto_decrypt_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_key_t *, + crypto_ctx_template_t, crypto_data_t *, crypto_call_req_t *); +extern int crypto_decrypt_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *cr); +extern int crypto_decrypt_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_context_t *, crypto_call_req_t *); +extern int crypto_decrypt_update(crypto_context_t ctx, + crypto_data_t *ciphertext, crypto_data_t *plaintext, + crypto_call_req_t *cr); +extern int crypto_decrypt_final(crypto_context_t ctx, crypto_data_t *plaintext, + crypto_call_req_t *cr); + +/* + * Single and multi-part encrypt/MAC dual operations. + */ +extern int crypto_encrypt_mac(crypto_mechanism_t *encr_mech, + crypto_mechanism_t *mac_mech, crypto_data_t *pt, + crypto_key_t *encr_key, crypto_key_t *mac_key, + crypto_ctx_template_t encr_tmpl, crypto_ctx_template_t mac_tmpl, + crypto_dual_data_t *ct, crypto_data_t *mac, crypto_call_req_t *cr); +extern int crypto_encrypt_mac_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_mechanism_t *, crypto_data_t *, + crypto_key_t *, crypto_key_t *, crypto_ctx_template_t, + crypto_ctx_template_t, crypto_dual_data_t *, crypto_data_t *, + crypto_call_req_t *); +extern int crypto_encrypt_mac_init(crypto_mechanism_t *encr_mech, + crypto_mechanism_t *mac_mech, crypto_key_t *encr_key, + crypto_key_t *mac_key, crypto_ctx_template_t encr_tmpl, + crypto_ctx_template_t mac_tmpl, crypto_context_t *ctxp, + crypto_call_req_t *cr); +extern int crypto_encrypt_mac_init_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_mechanism_t *, crypto_key_t *, crypto_key_t *, + crypto_ctx_template_t, crypto_ctx_template_t, crypto_context_t *, + crypto_call_req_t *); +extern int crypto_encrypt_mac_update(crypto_context_t ctx, + crypto_data_t *pt, crypto_dual_data_t *ct, crypto_call_req_t *cr); +extern int crypto_encrypt_mac_final(crypto_context_t ctx, + crypto_dual_data_t *ct, crypto_data_t *mac, crypto_call_req_t *cr); + +/* + * Single and multi-part MAC/decrypt dual operations. + */ +extern int crypto_mac_decrypt(crypto_mechanism_t *mac_mech, + crypto_mechanism_t *decr_mech, crypto_dual_data_t *ct, + crypto_key_t *mac_key, crypto_key_t *decr_key, + crypto_ctx_template_t mac_tmpl, crypto_ctx_template_t decr_tmpl, + crypto_data_t *mac, crypto_data_t *pt, crypto_call_req_t *cr); +extern int crypto_mac_decrypt_prov(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *mac_mech, crypto_mechanism_t *decr_mech, + crypto_dual_data_t *ct, crypto_key_t *mac_key, crypto_key_t *decr_key, + crypto_ctx_template_t mac_tmpl, crypto_ctx_template_t decr_tmpl, + crypto_data_t *mac, crypto_data_t *pt, crypto_call_req_t *cr); +extern int crypto_mac_verify_decrypt(crypto_mechanism_t *mac_mech, + crypto_mechanism_t *decr_mech, crypto_dual_data_t *ct, + crypto_key_t *mac_key, crypto_key_t *decr_key, + crypto_ctx_template_t mac_tmpl, crypto_ctx_template_t decr_tmpl, + crypto_data_t *mac, crypto_data_t *pt, crypto_call_req_t *cr); +extern int crypto_mac_verify_decrypt_prov(crypto_provider_t, + crypto_session_id_t, crypto_mechanism_t *mac_mech, + crypto_mechanism_t *decr_mech, crypto_dual_data_t *ct, + crypto_key_t *mac_key, crypto_key_t *decr_key, + crypto_ctx_template_t mac_tmpl, crypto_ctx_template_t decr_tmpl, + crypto_data_t *mac, crypto_data_t *pt, crypto_call_req_t *cr); +extern int crypto_mac_decrypt_init(crypto_mechanism_t *mac_mech, + crypto_mechanism_t *decr_mech, crypto_key_t *mac_key, + crypto_key_t *decr_key, crypto_ctx_template_t mac_tmpl, + crypto_ctx_template_t decr_tmpl, crypto_context_t *ctxp, + crypto_call_req_t *cr); +extern int crypto_mac_decrypt_init_prov(crypto_provider_t, + crypto_session_id_t, crypto_mechanism_t *mac_mech, + crypto_mechanism_t *decr_mech, crypto_key_t *mac_key, + crypto_key_t *decr_key, crypto_ctx_template_t mac_tmpl, + crypto_ctx_template_t decr_tmpl, crypto_context_t *ctxp, + crypto_call_req_t *cr); +extern int crypto_mac_decrypt_update(crypto_context_t ctx, + crypto_dual_data_t *ct, crypto_data_t *pt, crypto_call_req_t *cr); +extern int crypto_mac_decrypt_final(crypto_context_t ctx, crypto_data_t *mac, + crypto_data_t *pt, crypto_call_req_t *cr); + +/* Session Management */ +extern int crypto_session_open(crypto_provider_t, crypto_session_id_t *, + crypto_call_req_t *); +extern int crypto_session_close(crypto_provider_t, crypto_session_id_t, + crypto_call_req_t *); +extern int crypto_session_login(crypto_provider_t, crypto_session_id_t, + crypto_user_type_t, char *, size_t, crypto_call_req_t *); +extern int crypto_session_logout(crypto_provider_t, crypto_session_id_t, + crypto_call_req_t *); + +/* Object Management */ +extern int crypto_object_copy(crypto_provider_t, crypto_session_id_t, + crypto_object_id_t, crypto_object_attribute_t *, uint_t, + crypto_object_id_t *, crypto_call_req_t *); +extern int crypto_object_create(crypto_provider_t, crypto_session_id_t, + crypto_object_attribute_t *, uint_t, crypto_object_id_t *, + crypto_call_req_t *); +extern int crypto_object_destroy(crypto_provider_t, crypto_session_id_t, + crypto_object_id_t, crypto_call_req_t *); +extern int crypto_object_get_attribute_value(crypto_provider_t, + crypto_session_id_t, crypto_object_id_t, crypto_object_attribute_t *, + uint_t, crypto_call_req_t *); +extern int crypto_object_get_size(crypto_provider_t, crypto_session_id_t, + crypto_object_id_t, size_t *, crypto_call_req_t *); +extern int crypto_object_find_final(crypto_provider_t, void *, + crypto_call_req_t *); +extern int crypto_object_find_init(crypto_provider_t, crypto_session_id_t, + crypto_object_attribute_t *, uint_t, void **, crypto_call_req_t *); +extern int crypto_object_find(crypto_provider_t, void *, crypto_object_id_t *, + uint_t *, uint_t, crypto_call_req_t *); +extern int crypto_object_set_attribute_value(crypto_provider_t, + crypto_session_id_t, crypto_object_id_t, crypto_object_attribute_t *, + uint_t, crypto_call_req_t *); + +/* Key Management */ +extern int crypto_key_derive(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_object_attribute_t *, + uint_t, crypto_object_id_t *, crypto_call_req_t *); +extern int crypto_key_generate(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_object_attribute_t *, uint_t, + crypto_object_id_t *, crypto_call_req_t *); +extern int crypto_key_generate_pair(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_object_attribute_t *, uint_t, + crypto_object_attribute_t *, uint_t, crypto_object_id_t *, + crypto_object_id_t *, crypto_call_req_t *); +extern int crypto_key_unwrap(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, uchar_t *, size_t *, + crypto_object_attribute_t *, uint_t, crypto_object_id_t *, + crypto_call_req_t *); +extern int crypto_key_wrap(crypto_provider_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_object_id_t *, uchar_t *, + size_t *, crypto_call_req_t *); +extern int crypto_key_check_prov(crypto_provider_t, crypto_mechanism_t *mech, + crypto_key_t *key); +extern int crypto_key_check(crypto_mechanism_t *mech, crypto_key_t *key); + + +/* + * Routines to cancel a single asynchronous request or all asynchronous + * requests associated with a particular context. + */ +extern void crypto_cancel_req(crypto_req_id_t req); +extern void crypto_cancel_ctx(crypto_context_t ctx); + +/* + * crypto_get_mech_list(9F) allocates and returns the list of currently + * supported cryptographic mechanisms. + */ +extern crypto_mech_name_t *crypto_get_mech_list(uint_t *count, int kmflag); +extern void crypto_free_mech_list(crypto_mech_name_t *mech_names, + uint_t count); + +extern crypto_provider_t crypto_get_provider(char *, char *, char *); +extern int crypto_get_provinfo(crypto_provider_t, crypto_provider_ext_info_t *); +extern void crypto_release_provider(crypto_provider_t); + +/* + * A kernel consumer can request to be notified when some particular event + * occurs. The valid events, callback function type, and functions to + * be called to register or unregister for notification are defined below. + */ + +#define CRYPTO_EVENT_MECHS_CHANGED 0x00000001 +#define CRYPTO_EVENT_PROVIDER_REGISTERED 0x00000002 +#define CRYPTO_EVENT_PROVIDER_UNREGISTERED 0x00000004 + +typedef enum { + CRYPTO_MECH_ADDED = 1, + CRYPTO_MECH_REMOVED +} crypto_event_change_t; + +/* The event_arg argument structure for CRYPTO_EVENT_PROVIDERS_CHANGE event */ +typedef struct crypto_notify_event_change { + crypto_mech_name_t ec_mech_name; + crypto_provider_type_t ec_provider_type; + crypto_event_change_t ec_change; +} crypto_notify_event_change_t; + +typedef void *crypto_notify_handle_t; +typedef void (*crypto_notify_callback_t)(uint32_t event_mask, void *event_arg); + +extern crypto_notify_handle_t crypto_notify_events( + crypto_notify_callback_t nf, uint32_t event_mask); +extern void crypto_unnotify_events(crypto_notify_handle_t); + +/* + * crypto_bufcall(9F) group of routines. + */ +extern crypto_bc_t crypto_bufcall_alloc(void); +extern int crypto_bufcall_free(crypto_bc_t bc); +extern int crypto_bufcall(crypto_bc_t bc, void (*func)(void *arg), void *arg); +extern int crypto_unbufcall(crypto_bc_t bc); + +/* + * To obtain the list of key size ranges supported by a mechanism. + */ + +#define CRYPTO_MECH_USAGE_ENCRYPT 0x00000001 +#define CRYPTO_MECH_USAGE_DECRYPT 0x00000002 +#define CRYPTO_MECH_USAGE_MAC 0x00000004 + +typedef uint32_t crypto_mech_usage_t; + +typedef struct crypto_mechanism_info { + size_t mi_min_key_size; + size_t mi_max_key_size; + crypto_keysize_unit_t mi_keysize_unit; /* for mi_xxx_key_size */ + crypto_mech_usage_t mi_usage; +} crypto_mechanism_info_t; + +#ifdef _SYSCALL32 + +typedef struct crypto_mechanism_info32 { + size32_t mi_min_key_size; + size32_t mi_max_key_size; + crypto_keysize_unit_t mi_keysize_unit; /* for mi_xxx_key_size */ + crypto_mech_usage_t mi_usage; +} crypto_mechanism_info32_t; + +#endif /* _SYSCALL32 */ + +extern int crypto_get_all_mech_info(crypto_mech_type_t, + crypto_mechanism_info_t **, uint_t *, int); +extern void crypto_free_all_mech_info(crypto_mechanism_info_t *, uint_t); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_API_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/crypto/common.h +++ linux-aws-4.15.0/zfs/include/sys/crypto/common.h @@ -0,0 +1,583 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +#ifndef _SYS_CRYPTO_COMMON_H +#define _SYS_CRYPTO_COMMON_H + +/* + * Header file for the common data structures of the cryptographic framework + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Cryptographic Mechanisms */ + +#define CRYPTO_MAX_MECH_NAME 32 +typedef char crypto_mech_name_t[CRYPTO_MAX_MECH_NAME]; + +typedef uint64_t crypto_mech_type_t; + +typedef struct crypto_mechanism { + crypto_mech_type_t cm_type; /* mechanism type */ + caddr_t cm_param; /* mech. parameter */ + size_t cm_param_len; /* mech. parameter len */ +} crypto_mechanism_t; + +#ifdef _SYSCALL32 + +typedef struct crypto_mechanism32 { + crypto_mech_type_t cm_type; /* mechanism type */ + caddr32_t cm_param; /* mech. parameter */ + size32_t cm_param_len; /* mech. parameter len */ +} crypto_mechanism32_t; + +#endif /* _SYSCALL32 */ + +/* CK_AES_CTR_PARAMS provides parameters to the CKM_AES_CTR mechanism */ +typedef struct CK_AES_CTR_PARAMS { + ulong_t ulCounterBits; + uint8_t cb[16]; +} CK_AES_CTR_PARAMS; + +/* CK_AES_CCM_PARAMS provides parameters to the CKM_AES_CCM mechanism */ +typedef struct CK_AES_CCM_PARAMS { + ulong_t ulMACSize; + ulong_t ulNonceSize; + ulong_t ulAuthDataSize; + ulong_t ulDataSize; /* used for plaintext or ciphertext */ + uchar_t *nonce; + uchar_t *authData; +} CK_AES_CCM_PARAMS; + +/* CK_AES_GCM_PARAMS provides parameters to the CKM_AES_GCM mechanism */ +typedef struct CK_AES_GCM_PARAMS { + uchar_t *pIv; + ulong_t ulIvLen; + ulong_t ulIvBits; + uchar_t *pAAD; + ulong_t ulAADLen; + ulong_t ulTagBits; +} CK_AES_GCM_PARAMS; + +/* CK_AES_GMAC_PARAMS provides parameters to the CKM_AES_GMAC mechanism */ +typedef struct CK_AES_GMAC_PARAMS { + uchar_t *pIv; + uchar_t *pAAD; + ulong_t ulAADLen; +} CK_AES_GMAC_PARAMS; + +/* + * CK_ECDH1_DERIVE_PARAMS provides the parameters to the + * CKM_ECDH1_KEY_DERIVE mechanism + */ +typedef struct CK_ECDH1_DERIVE_PARAMS { + ulong_t kdf; + ulong_t ulSharedDataLen; + uchar_t *pSharedData; + ulong_t ulPublicDataLen; + uchar_t *pPublicData; +} CK_ECDH1_DERIVE_PARAMS; + +#ifdef _SYSCALL32 + +/* needed for 32-bit applications running on 64-bit kernels */ +typedef struct CK_AES_CTR_PARAMS32 { + uint32_t ulCounterBits; + uint8_t cb[16]; +} CK_AES_CTR_PARAMS32; + +/* needed for 32-bit applications running on 64-bit kernels */ +typedef struct CK_AES_CCM_PARAMS32 { + uint32_t ulMACSize; + uint32_t ulNonceSize; + uint32_t ulAuthDataSize; + uint32_t ulDataSize; + caddr32_t nonce; + caddr32_t authData; +} CK_AES_CCM_PARAMS32; + +/* needed for 32-bit applications running on 64-bit kernels */ +typedef struct CK_AES_GCM_PARAMS32 { + caddr32_t pIv; + uint32_t ulIvLen; + uint32_t ulIvBits; + caddr32_t pAAD; + uint32_t ulAADLen; + uint32_t ulTagBits; +} CK_AES_GCM_PARAMS32; + +/* needed for 32-bit applications running on 64-bit kernels */ +typedef struct CK_AES_GMAC_PARAMS32 { + caddr32_t pIv; + caddr32_t pAAD; + uint32_t ulAADLen; +} CK_AES_GMAC_PARAMS32; + +typedef struct CK_ECDH1_DERIVE_PARAMS32 { + uint32_t kdf; + uint32_t ulSharedDataLen; + caddr32_t pSharedData; + uint32_t ulPublicDataLen; + caddr32_t pPublicData; +} CK_ECDH1_DERIVE_PARAMS32; + +#endif /* _SYSCALL32 */ + +/* + * The measurement unit bit flag for a mechanism's minimum or maximum key size. + * The unit are mechanism dependent. It can be in bits or in bytes. + */ +typedef uint32_t crypto_keysize_unit_t; + +/* + * The following bit flags are valid in cm_mech_flags field in + * the crypto_mech_info_t structure of the SPI. + * + * Only the first two bit flags are valid in mi_keysize_unit + * field in the crypto_mechanism_info_t structure of the API. + */ +#define CRYPTO_KEYSIZE_UNIT_IN_BITS 0x00000001 +#define CRYPTO_KEYSIZE_UNIT_IN_BYTES 0x00000002 +#define CRYPTO_CAN_SHARE_OPSTATE 0x00000004 /* supports sharing */ + + +/* Mechanisms supported out-of-the-box */ +#define SUN_CKM_MD4 "CKM_MD4" +#define SUN_CKM_MD5 "CKM_MD5" +#define SUN_CKM_MD5_HMAC "CKM_MD5_HMAC" +#define SUN_CKM_MD5_HMAC_GENERAL "CKM_MD5_HMAC_GENERAL" +#define SUN_CKM_SHA1 "CKM_SHA_1" +#define SUN_CKM_SHA1_HMAC "CKM_SHA_1_HMAC" +#define SUN_CKM_SHA1_HMAC_GENERAL "CKM_SHA_1_HMAC_GENERAL" +#define SUN_CKM_SHA256 "CKM_SHA256" +#define SUN_CKM_SHA256_HMAC "CKM_SHA256_HMAC" +#define SUN_CKM_SHA256_HMAC_GENERAL "CKM_SHA256_HMAC_GENERAL" +#define SUN_CKM_SHA384 "CKM_SHA384" +#define SUN_CKM_SHA384_HMAC "CKM_SHA384_HMAC" +#define SUN_CKM_SHA384_HMAC_GENERAL "CKM_SHA384_HMAC_GENERAL" +#define SUN_CKM_SHA512 "CKM_SHA512" +#define SUN_CKM_SHA512_HMAC "CKM_SHA512_HMAC" +#define SUN_CKM_SHA512_HMAC_GENERAL "CKM_SHA512_HMAC_GENERAL" +#define SUN_CKM_SHA512_224 "CKM_SHA512_224" +#define SUN_CKM_SHA512_256 "CKM_SHA512_256" +#define SUN_CKM_DES_CBC "CKM_DES_CBC" +#define SUN_CKM_DES3_CBC "CKM_DES3_CBC" +#define SUN_CKM_DES_ECB "CKM_DES_ECB" +#define SUN_CKM_DES3_ECB "CKM_DES3_ECB" +#define SUN_CKM_BLOWFISH_CBC "CKM_BLOWFISH_CBC" +#define SUN_CKM_BLOWFISH_ECB "CKM_BLOWFISH_ECB" +#define SUN_CKM_AES_CBC "CKM_AES_CBC" +#define SUN_CKM_AES_ECB "CKM_AES_ECB" +#define SUN_CKM_AES_CTR "CKM_AES_CTR" +#define SUN_CKM_AES_CCM "CKM_AES_CCM" +#define SUN_CKM_AES_GCM "CKM_AES_GCM" +#define SUN_CKM_AES_GMAC "CKM_AES_GMAC" +#define SUN_CKM_AES_CFB128 "CKM_AES_CFB128" +#define SUN_CKM_RC4 "CKM_RC4" +#define SUN_CKM_RSA_PKCS "CKM_RSA_PKCS" +#define SUN_CKM_RSA_X_509 "CKM_RSA_X_509" +#define SUN_CKM_MD5_RSA_PKCS "CKM_MD5_RSA_PKCS" +#define SUN_CKM_SHA1_RSA_PKCS "CKM_SHA1_RSA_PKCS" +#define SUN_CKM_SHA256_RSA_PKCS "CKM_SHA256_RSA_PKCS" +#define SUN_CKM_SHA384_RSA_PKCS "CKM_SHA384_RSA_PKCS" +#define SUN_CKM_SHA512_RSA_PKCS "CKM_SHA512_RSA_PKCS" +#define SUN_CKM_EC_KEY_PAIR_GEN "CKM_EC_KEY_PAIR_GEN" +#define SUN_CKM_ECDH1_DERIVE "CKM_ECDH1_DERIVE" +#define SUN_CKM_ECDSA_SHA1 "CKM_ECDSA_SHA1" +#define SUN_CKM_ECDSA "CKM_ECDSA" + +/* Shared operation context format for CKM_RC4 */ +typedef struct { +#if defined(__amd64) + uint32_t i, j; + uint32_t arr[256]; + uint32_t flag; +#else + uchar_t arr[256]; + uchar_t i, j; +#endif /* __amd64 */ + uint64_t pad; /* For 64-bit alignment */ +} arcfour_state_t; + +/* Data arguments of cryptographic operations */ + +typedef enum crypto_data_format { + CRYPTO_DATA_RAW = 1, + CRYPTO_DATA_UIO, +} crypto_data_format_t; + +typedef struct crypto_data { + crypto_data_format_t cd_format; /* Format identifier */ + off_t cd_offset; /* Offset from the beginning */ + size_t cd_length; /* # of bytes in use */ + caddr_t cd_miscdata; /* ancillary data */ + union { + /* Raw format */ + iovec_t cdu_raw; /* Pointer and length */ + + /* uio scatter-gather format */ + uio_t *cdu_uio; + + } cdu; /* Crypto Data Union */ +} crypto_data_t; + +#define cd_raw cdu.cdu_raw +#define cd_uio cdu.cdu_uio +#define cd_mp cdu.cdu_mp + +typedef struct crypto_dual_data { + crypto_data_t dd_data; /* The data */ + off_t dd_offset2; /* Used by dual operation */ + size_t dd_len2; /* # of bytes to take */ +} crypto_dual_data_t; + +#define dd_format dd_data.cd_format +#define dd_offset1 dd_data.cd_offset +#define dd_len1 dd_data.cd_length +#define dd_miscdata dd_data.cd_miscdata +#define dd_raw dd_data.cd_raw +#define dd_uio dd_data.cd_uio +#define dd_mp dd_data.cd_mp + +/* The keys, and their contents */ + +typedef enum { + CRYPTO_KEY_RAW = 1, /* ck_data is a cleartext key */ + CRYPTO_KEY_REFERENCE, /* ck_obj_id is an opaque reference */ + CRYPTO_KEY_ATTR_LIST /* ck_attrs is a list of object attributes */ +} crypto_key_format_t; + +typedef uint64_t crypto_attr_type_t; + +/* Attribute types to use for passing a RSA public key or a private key. */ +#define SUN_CKA_MODULUS 0x00000120 +#define SUN_CKA_MODULUS_BITS 0x00000121 +#define SUN_CKA_PUBLIC_EXPONENT 0x00000122 +#define SUN_CKA_PRIVATE_EXPONENT 0x00000123 +#define SUN_CKA_PRIME_1 0x00000124 +#define SUN_CKA_PRIME_2 0x00000125 +#define SUN_CKA_EXPONENT_1 0x00000126 +#define SUN_CKA_EXPONENT_2 0x00000127 +#define SUN_CKA_COEFFICIENT 0x00000128 +#define SUN_CKA_PRIME 0x00000130 +#define SUN_CKA_SUBPRIME 0x00000131 +#define SUN_CKA_BASE 0x00000132 + +#define CKK_EC 0x00000003 +#define CKK_GENERIC_SECRET 0x00000010 +#define CKK_RC4 0x00000012 +#define CKK_AES 0x0000001F +#define CKK_DES 0x00000013 +#define CKK_DES2 0x00000014 +#define CKK_DES3 0x00000015 + +#define CKO_PUBLIC_KEY 0x00000002 +#define CKO_PRIVATE_KEY 0x00000003 +#define CKA_CLASS 0x00000000 +#define CKA_VALUE 0x00000011 +#define CKA_KEY_TYPE 0x00000100 +#define CKA_VALUE_LEN 0x00000161 +#define CKA_EC_PARAMS 0x00000180 +#define CKA_EC_POINT 0x00000181 + +typedef uint32_t crypto_object_id_t; + +typedef struct crypto_object_attribute { + crypto_attr_type_t oa_type; /* attribute type */ + caddr_t oa_value; /* attribute value */ + ssize_t oa_value_len; /* length of attribute value */ +} crypto_object_attribute_t; + +typedef struct crypto_key { + crypto_key_format_t ck_format; /* format identifier */ + union { + /* for CRYPTO_KEY_RAW ck_format */ + struct { + uint_t cku_v_length; /* # of bits in ck_data */ + void *cku_v_data; /* ptr to key value */ + } cku_key_value; + + /* for CRYPTO_KEY_REFERENCE ck_format */ + crypto_object_id_t cku_key_id; /* reference to object key */ + + /* for CRYPTO_KEY_ATTR_LIST ck_format */ + struct { + uint_t cku_a_count; /* number of attributes */ + crypto_object_attribute_t *cku_a_oattr; + } cku_key_attrs; + } cku_data; /* Crypto Key union */ +} crypto_key_t; + +#ifdef _SYSCALL32 + +typedef struct crypto_object_attribute32 { + uint64_t oa_type; /* attribute type */ + caddr32_t oa_value; /* attribute value */ + ssize32_t oa_value_len; /* length of attribute value */ +} crypto_object_attribute32_t; + +typedef struct crypto_key32 { + crypto_key_format_t ck_format; /* format identifier */ + union { + /* for CRYPTO_KEY_RAW ck_format */ + struct { + uint32_t cku_v_length; /* # of bytes in ck_data */ + caddr32_t cku_v_data; /* ptr to key value */ + } cku_key_value; + + /* for CRYPTO_KEY_REFERENCE ck_format */ + crypto_object_id_t cku_key_id; /* reference to object key */ + + /* for CRYPTO_KEY_ATTR_LIST ck_format */ + struct { + uint32_t cku_a_count; /* number of attributes */ + caddr32_t cku_a_oattr; + } cku_key_attrs; + } cku_data; /* Crypto Key union */ +} crypto_key32_t; + +#endif /* _SYSCALL32 */ + +#define ck_data cku_data.cku_key_value.cku_v_data +#define ck_length cku_data.cku_key_value.cku_v_length +#define ck_obj_id cku_data.cku_key_id +#define ck_count cku_data.cku_key_attrs.cku_a_count +#define ck_attrs cku_data.cku_key_attrs.cku_a_oattr + +/* + * Raw key lengths are expressed in number of bits. + * The following macro returns the minimum number of + * bytes that can contain the specified number of bits. + * Round up without overflowing the integer type. + */ +#define CRYPTO_BITS2BYTES(n) ((n) == 0 ? 0 : (((n) - 1) >> 3) + 1) +#define CRYPTO_BYTES2BITS(n) ((n) << 3) + +/* Providers */ + +typedef enum { + CRYPTO_HW_PROVIDER = 0, + CRYPTO_SW_PROVIDER, + CRYPTO_LOGICAL_PROVIDER +} crypto_provider_type_t; + +typedef uint32_t crypto_provider_id_t; +#define KCF_PROVID_INVALID ((uint32_t)-1) + +typedef struct crypto_provider_entry { + crypto_provider_id_t pe_provider_id; + uint_t pe_mechanism_count; +} crypto_provider_entry_t; + +typedef struct crypto_dev_list_entry { + char le_dev_name[MAXNAMELEN]; + uint_t le_dev_instance; + uint_t le_mechanism_count; +} crypto_dev_list_entry_t; + +/* User type for authentication ioctls and SPI entry points */ + +typedef enum crypto_user_type { + CRYPTO_SO = 0, + CRYPTO_USER +} crypto_user_type_t; + +/* Version for provider management ioctls and SPI entry points */ + +typedef struct crypto_version { + uchar_t cv_major; + uchar_t cv_minor; +} crypto_version_t; + +/* session data structure opaque to the consumer */ +typedef void *crypto_session_t; + +/* provider data structure opaque to the consumer */ +typedef void *crypto_provider_t; + +/* Limits used by both consumers and providers */ +#define CRYPTO_EXT_SIZE_LABEL 32 +#define CRYPTO_EXT_SIZE_MANUF 32 +#define CRYPTO_EXT_SIZE_MODEL 16 +#define CRYPTO_EXT_SIZE_SERIAL 16 +#define CRYPTO_EXT_SIZE_TIME 16 + +typedef struct crypto_provider_ext_info { + uchar_t ei_label[CRYPTO_EXT_SIZE_LABEL]; + uchar_t ei_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; + uchar_t ei_model[CRYPTO_EXT_SIZE_MODEL]; + uchar_t ei_serial_number[CRYPTO_EXT_SIZE_SERIAL]; + ulong_t ei_flags; + ulong_t ei_max_session_count; + ulong_t ei_max_pin_len; + ulong_t ei_min_pin_len; + ulong_t ei_total_public_memory; + ulong_t ei_free_public_memory; + ulong_t ei_total_private_memory; + ulong_t ei_free_private_memory; + crypto_version_t ei_hardware_version; + crypto_version_t ei_firmware_version; + uchar_t ei_time[CRYPTO_EXT_SIZE_TIME]; + int ei_hash_max_input_len; + int ei_hmac_max_input_len; +} crypto_provider_ext_info_t; + +typedef uint_t crypto_session_id_t; + +typedef enum cmd_type { + COPY_FROM_DATA, + COPY_TO_DATA, + COMPARE_TO_DATA, + MD5_DIGEST_DATA, + SHA1_DIGEST_DATA, + SHA2_DIGEST_DATA, + GHASH_DATA +} cmd_type_t; + +#define CRYPTO_DO_UPDATE 0x01 +#define CRYPTO_DO_FINAL 0x02 +#define CRYPTO_DO_MD5 0x04 +#define CRYPTO_DO_SHA1 0x08 +#define CRYPTO_DO_SIGN 0x10 +#define CRYPTO_DO_VERIFY 0x20 +#define CRYPTO_DO_SHA2 0x40 + +#define PROVIDER_OWNS_KEY_SCHEDULE 0x00000001 + +/* + * Common cryptographic status and error codes. + */ +#define CRYPTO_SUCCESS 0x00000000 +#define CRYPTO_CANCEL 0x00000001 +#define CRYPTO_HOST_MEMORY 0x00000002 +#define CRYPTO_GENERAL_ERROR 0x00000003 +#define CRYPTO_FAILED 0x00000004 +#define CRYPTO_ARGUMENTS_BAD 0x00000005 +#define CRYPTO_ATTRIBUTE_READ_ONLY 0x00000006 +#define CRYPTO_ATTRIBUTE_SENSITIVE 0x00000007 +#define CRYPTO_ATTRIBUTE_TYPE_INVALID 0x00000008 +#define CRYPTO_ATTRIBUTE_VALUE_INVALID 0x00000009 +#define CRYPTO_CANCELED 0x0000000A +#define CRYPTO_DATA_INVALID 0x0000000B +#define CRYPTO_DATA_LEN_RANGE 0x0000000C +#define CRYPTO_DEVICE_ERROR 0x0000000D +#define CRYPTO_DEVICE_MEMORY 0x0000000E +#define CRYPTO_DEVICE_REMOVED 0x0000000F +#define CRYPTO_ENCRYPTED_DATA_INVALID 0x00000010 +#define CRYPTO_ENCRYPTED_DATA_LEN_RANGE 0x00000011 +#define CRYPTO_KEY_HANDLE_INVALID 0x00000012 +#define CRYPTO_KEY_SIZE_RANGE 0x00000013 +#define CRYPTO_KEY_TYPE_INCONSISTENT 0x00000014 +#define CRYPTO_KEY_NOT_NEEDED 0x00000015 +#define CRYPTO_KEY_CHANGED 0x00000016 +#define CRYPTO_KEY_NEEDED 0x00000017 +#define CRYPTO_KEY_INDIGESTIBLE 0x00000018 +#define CRYPTO_KEY_FUNCTION_NOT_PERMITTED 0x00000019 +#define CRYPTO_KEY_NOT_WRAPPABLE 0x0000001A +#define CRYPTO_KEY_UNEXTRACTABLE 0x0000001B +#define CRYPTO_MECHANISM_INVALID 0x0000001C +#define CRYPTO_MECHANISM_PARAM_INVALID 0x0000001D +#define CRYPTO_OBJECT_HANDLE_INVALID 0x0000001E +#define CRYPTO_OPERATION_IS_ACTIVE 0x0000001F +#define CRYPTO_OPERATION_NOT_INITIALIZED 0x00000020 +#define CRYPTO_PIN_INCORRECT 0x00000021 +#define CRYPTO_PIN_INVALID 0x00000022 +#define CRYPTO_PIN_LEN_RANGE 0x00000023 +#define CRYPTO_PIN_EXPIRED 0x00000024 +#define CRYPTO_PIN_LOCKED 0x00000025 +#define CRYPTO_SESSION_CLOSED 0x00000026 +#define CRYPTO_SESSION_COUNT 0x00000027 +#define CRYPTO_SESSION_HANDLE_INVALID 0x00000028 +#define CRYPTO_SESSION_READ_ONLY 0x00000029 +#define CRYPTO_SESSION_EXISTS 0x0000002A +#define CRYPTO_SESSION_READ_ONLY_EXISTS 0x0000002B +#define CRYPTO_SESSION_READ_WRITE_SO_EXISTS 0x0000002C +#define CRYPTO_SIGNATURE_INVALID 0x0000002D +#define CRYPTO_SIGNATURE_LEN_RANGE 0x0000002E +#define CRYPTO_TEMPLATE_INCOMPLETE 0x0000002F +#define CRYPTO_TEMPLATE_INCONSISTENT 0x00000030 +#define CRYPTO_UNWRAPPING_KEY_HANDLE_INVALID 0x00000031 +#define CRYPTO_UNWRAPPING_KEY_SIZE_RANGE 0x00000032 +#define CRYPTO_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x00000033 +#define CRYPTO_USER_ALREADY_LOGGED_IN 0x00000034 +#define CRYPTO_USER_NOT_LOGGED_IN 0x00000035 +#define CRYPTO_USER_PIN_NOT_INITIALIZED 0x00000036 +#define CRYPTO_USER_TYPE_INVALID 0x00000037 +#define CRYPTO_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000038 +#define CRYPTO_USER_TOO_MANY_TYPES 0x00000039 +#define CRYPTO_WRAPPED_KEY_INVALID 0x0000003A +#define CRYPTO_WRAPPED_KEY_LEN_RANGE 0x0000003B +#define CRYPTO_WRAPPING_KEY_HANDLE_INVALID 0x0000003C +#define CRYPTO_WRAPPING_KEY_SIZE_RANGE 0x0000003D +#define CRYPTO_WRAPPING_KEY_TYPE_INCONSISTENT 0x0000003E +#define CRYPTO_RANDOM_SEED_NOT_SUPPORTED 0x0000003F +#define CRYPTO_RANDOM_NO_RNG 0x00000040 +#define CRYPTO_DOMAIN_PARAMS_INVALID 0x00000041 +#define CRYPTO_BUFFER_TOO_SMALL 0x00000042 +#define CRYPTO_INFORMATION_SENSITIVE 0x00000043 +#define CRYPTO_NOT_SUPPORTED 0x00000044 + +#define CRYPTO_QUEUED 0x00000045 +#define CRYPTO_BUFFER_TOO_BIG 0x00000046 +#define CRYPTO_INVALID_CONTEXT 0x00000047 +#define CRYPTO_INVALID_MAC 0x00000048 +#define CRYPTO_MECH_NOT_SUPPORTED 0x00000049 +#define CRYPTO_INCONSISTENT_ATTRIBUTE 0x0000004A +#define CRYPTO_NO_PERMISSION 0x0000004B +#define CRYPTO_INVALID_PROVIDER_ID 0x0000004C +#define CRYPTO_VERSION_MISMATCH 0x0000004D +#define CRYPTO_BUSY 0x0000004E +#define CRYPTO_UNKNOWN_PROVIDER 0x0000004F +#define CRYPTO_MODVERIFICATION_FAILED 0x00000050 +#define CRYPTO_OLD_CTX_TEMPLATE 0x00000051 +#define CRYPTO_WEAK_KEY 0x00000052 +#define CRYPTO_FIPS140_ERROR 0x00000053 +/* + * Don't forget to update CRYPTO_LAST_ERROR and the error_number_table[] + * in kernelUtil.c when new error code is added. + */ +#define CRYPTO_LAST_ERROR 0x00000053 + +/* + * Special values that can be used to indicate that information is unavailable + * or that there is not practical limit. These values can be used + * by fields of the SPI crypto_provider_ext_info(9S) structure. + * The value of CRYPTO_UNAVAILABLE_INFO should be the same as + * CK_UNAVAILABLE_INFO in the PKCS#11 spec. + */ +#define CRYPTO_UNAVAILABLE_INFO ((ulong_t)(-1)) +#define CRYPTO_EFFECTIVELY_INFINITE 0x0 + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_COMMON_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/crypto/icp.h +++ linux-aws-4.15.0/zfs/include/sys/crypto/icp.h @@ -0,0 +1,47 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2016, Datto, Inc. All rights reserved. + */ + +#ifndef _SYS_CRYPTO_ALGS_H +#define _SYS_CRYPTO_ALGS_H + +int aes_mod_init(void); +int aes_mod_fini(void); + +int edonr_mod_init(void); +int edonr_mod_fini(void); + +int sha1_mod_init(void); +int sha1_mod_fini(void); + +int sha2_mod_init(void); +int sha2_mod_fini(void); + +int skein_mod_init(void); +int skein_mod_fini(void); + +int icp_init(void); +void icp_fini(void); + +#endif /* _SYS_CRYPTO_ALGS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dbuf.h +++ linux-aws-4.15.0/zfs/include/sys/dbuf.h @@ -0,0 +1,404 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_DBUF_H +#define _SYS_DBUF_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define IN_DMU_SYNC 2 + +/* + * define flags for dbuf_read + */ + +#define DB_RF_MUST_SUCCEED (1 << 0) +#define DB_RF_CANFAIL (1 << 1) +#define DB_RF_HAVESTRUCT (1 << 2) +#define DB_RF_NOPREFETCH (1 << 3) +#define DB_RF_NEVERWAIT (1 << 4) +#define DB_RF_CACHED (1 << 5) + +/* + * The simplified state transition diagram for dbufs looks like: + * + * +----> READ ----+ + * | | + * | V + * (alloc)-->UNCACHED CACHED-->EVICTING-->(free) + * | ^ ^ + * | | | + * +----> FILL ----+ | + * | | + * | | + * +--------> NOFILL -------+ + * + * DB_SEARCH is an invalid state for a dbuf. It is used by dbuf_free_range + * to find all dbufs in a range of a dnode and must be less than any other + * dbuf_states_t (see comment on dn_dbufs in dnode.h). + */ +typedef enum dbuf_states { + DB_SEARCH = -1, + DB_UNCACHED, + DB_FILL, + DB_NOFILL, + DB_READ, + DB_CACHED, + DB_EVICTING +} dbuf_states_t; + +struct dnode; +struct dmu_tx; + +/* + * level = 0 means the user data + * level = 1 means the single indirect block + * etc. + */ + +struct dmu_buf_impl; + +typedef enum override_states { + DR_NOT_OVERRIDDEN, + DR_IN_DMU_SYNC, + DR_OVERRIDDEN +} override_states_t; + +typedef struct dbuf_dirty_record { + /* link on our parents dirty list */ + list_node_t dr_dirty_node; + + /* transaction group this data will sync in */ + uint64_t dr_txg; + + /* zio of outstanding write IO */ + zio_t *dr_zio; + + /* pointer back to our dbuf */ + struct dmu_buf_impl *dr_dbuf; + + /* pointer to next dirty record */ + struct dbuf_dirty_record *dr_next; + + /* pointer to parent dirty record */ + struct dbuf_dirty_record *dr_parent; + + /* How much space was changed to dsl_pool_dirty_space() for this? */ + unsigned int dr_accounted; + + /* A copy of the bp that points to us */ + blkptr_t dr_bp_copy; + + union dirty_types { + struct dirty_indirect { + + /* protect access to list */ + kmutex_t dr_mtx; + + /* Our list of dirty children */ + list_t dr_children; + } di; + struct dirty_leaf { + + /* + * dr_data is set when we dirty the buffer + * so that we can retain the pointer even if it + * gets COW'd in a subsequent transaction group. + */ + arc_buf_t *dr_data; + blkptr_t dr_overridden_by; + override_states_t dr_override_state; + uint8_t dr_copies; + boolean_t dr_nopwrite; + } dl; + } dt; +} dbuf_dirty_record_t; + +typedef struct dmu_buf_impl { + /* + * The following members are immutable, with the exception of + * db.db_data, which is protected by db_mtx. + */ + + /* the publicly visible structure */ + dmu_buf_t db; + + /* the objset we belong to */ + struct objset *db_objset; + + /* + * handle to safely access the dnode we belong to (NULL when evicted) + */ + struct dnode_handle *db_dnode_handle; + + /* + * our parent buffer; if the dnode points to us directly, + * db_parent == db_dnode_handle->dnh_dnode->dn_dbuf + * only accessed by sync thread ??? + * (NULL when evicted) + * May change from NULL to non-NULL under the protection of db_mtx + * (see dbuf_check_blkptr()) + */ + struct dmu_buf_impl *db_parent; + + /* + * link for hash table of all dmu_buf_impl_t's + */ + struct dmu_buf_impl *db_hash_next; + + /* our block number */ + uint64_t db_blkid; + + /* + * Pointer to the blkptr_t which points to us. May be NULL if we + * don't have one yet. (NULL when evicted) + */ + blkptr_t *db_blkptr; + + /* + * Our indirection level. Data buffers have db_level==0. + * Indirect buffers which point to data buffers have + * db_level==1. etc. Buffers which contain dnodes have + * db_level==0, since the dnodes are stored in a file. + */ + uint8_t db_level; + + /* db_mtx protects the members below */ + kmutex_t db_mtx; + + /* + * Current state of the buffer + */ + dbuf_states_t db_state; + + /* + * Refcount accessed by dmu_buf_{hold,rele}. + * If nonzero, the buffer can't be destroyed. + * Protected by db_mtx. + */ + refcount_t db_holds; + + /* buffer holding our data */ + arc_buf_t *db_buf; + + kcondvar_t db_changed; + dbuf_dirty_record_t *db_data_pending; + + /* pointer to most recent dirty record for this buffer */ + dbuf_dirty_record_t *db_last_dirty; + + /* + * Our link on the owner dnodes's dn_dbufs list. + * Protected by its dn_dbufs_mtx. + */ + avl_node_t db_link; + + /* + * Link in dbuf_cache. + */ + multilist_node_t db_cache_link; + + /* Data which is unique to data (leaf) blocks: */ + + /* User callback information. */ + dmu_buf_user_t *db_user; + + /* + * Evict user data as soon as the dirty and reference + * counts are equal. + */ + uint8_t db_user_immediate_evict; + + /* + * This block was freed while a read or write was + * active. + */ + uint8_t db_freed_in_flight; + + /* + * dnode_evict_dbufs() or dnode_evict_bonus() tried to + * evict this dbuf, but couldn't due to outstanding + * references. Evict once the refcount drops to 0. + */ + uint8_t db_pending_evict; + + uint8_t db_dirtycnt; +} dmu_buf_impl_t; + +/* Note: the dbuf hash table is exposed only for the mdb module */ +#define DBUF_MUTEXES 8192 +#define DBUF_HASH_MUTEX(h, idx) (&(h)->hash_mutexes[(idx) & (DBUF_MUTEXES-1)]) +typedef struct dbuf_hash_table { + uint64_t hash_table_mask; + dmu_buf_impl_t **hash_table; + kmutex_t hash_mutexes[DBUF_MUTEXES]; +} dbuf_hash_table_t; + +uint64_t dbuf_whichblock(const struct dnode *di, const int64_t level, + const uint64_t offset); + +void dbuf_create_bonus(struct dnode *dn); +int dbuf_spill_set_blksz(dmu_buf_t *db, uint64_t blksz, dmu_tx_t *tx); + +void dbuf_rm_spill(struct dnode *dn, dmu_tx_t *tx); + +dmu_buf_impl_t *dbuf_hold(struct dnode *dn, uint64_t blkid, void *tag); +dmu_buf_impl_t *dbuf_hold_level(struct dnode *dn, int level, uint64_t blkid, + void *tag); +int dbuf_hold_impl(struct dnode *dn, uint8_t level, uint64_t blkid, + boolean_t fail_sparse, boolean_t fail_uncached, + void *tag, dmu_buf_impl_t **dbp); + +void dbuf_prefetch(struct dnode *dn, int64_t level, uint64_t blkid, + zio_priority_t prio, arc_flags_t aflags); + +void dbuf_add_ref(dmu_buf_impl_t *db, void *tag); +boolean_t dbuf_try_add_ref(dmu_buf_t *db, objset_t *os, uint64_t obj, + uint64_t blkid, void *tag); +uint64_t dbuf_refcount(dmu_buf_impl_t *db); + +void dbuf_rele(dmu_buf_impl_t *db, void *tag); +void dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag); + +dmu_buf_impl_t *dbuf_find(struct objset *os, uint64_t object, uint8_t level, + uint64_t blkid); + +int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags); +void dmu_buf_will_not_fill(dmu_buf_t *db, dmu_tx_t *tx); +void dmu_buf_will_fill(dmu_buf_t *db, dmu_tx_t *tx); +void dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx); +void dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx); +dbuf_dirty_record_t *dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx); +arc_buf_t *dbuf_loan_arcbuf(dmu_buf_impl_t *db); +void dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data, + bp_embedded_type_t etype, enum zio_compress comp, + int uncompressed_size, int compressed_size, int byteorder, dmu_tx_t *tx); + +void dbuf_destroy(dmu_buf_impl_t *db); + +void dbuf_unoverride(dbuf_dirty_record_t *dr); +void dbuf_sync_list(list_t *list, int level, dmu_tx_t *tx); +void dbuf_release_bp(dmu_buf_impl_t *db); + +void dbuf_free_range(struct dnode *dn, uint64_t start, uint64_t end, + struct dmu_tx *); + +void dbuf_new_size(dmu_buf_impl_t *db, int size, dmu_tx_t *tx); + +void dbuf_stats_init(dbuf_hash_table_t *hash); +void dbuf_stats_destroy(void); + +#define DB_DNODE(_db) ((_db)->db_dnode_handle->dnh_dnode) +#define DB_DNODE_LOCK(_db) ((_db)->db_dnode_handle->dnh_zrlock) +#define DB_DNODE_ENTER(_db) (zrl_add(&DB_DNODE_LOCK(_db))) +#define DB_DNODE_EXIT(_db) (zrl_remove(&DB_DNODE_LOCK(_db))) +#define DB_DNODE_HELD(_db) (!zrl_is_zero(&DB_DNODE_LOCK(_db))) + +void dbuf_init(void); +void dbuf_fini(void); + +boolean_t dbuf_is_metadata(dmu_buf_impl_t *db); + +#define DBUF_GET_BUFC_TYPE(_db) \ + (dbuf_is_metadata(_db) ? ARC_BUFC_METADATA : ARC_BUFC_DATA) + +#define DBUF_IS_CACHEABLE(_db) \ + ((_db)->db_objset->os_primary_cache == ZFS_CACHE_ALL || \ + (dbuf_is_metadata(_db) && \ + ((_db)->db_objset->os_primary_cache == ZFS_CACHE_METADATA))) + +#define DBUF_IS_L2CACHEABLE(_db) \ + ((_db)->db_objset->os_secondary_cache == ZFS_CACHE_ALL || \ + (dbuf_is_metadata(_db) && \ + ((_db)->db_objset->os_secondary_cache == ZFS_CACHE_METADATA))) + +#define DNODE_LEVEL_IS_L2CACHEABLE(_dn, _level) \ + ((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_ALL || \ + (((_level) > 0 || \ + DMU_OT_IS_METADATA((_dn)->dn_handle->dnh_dnode->dn_type)) && \ + ((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_METADATA))) + +#ifdef ZFS_DEBUG + +/* + * There should be a ## between the string literal and fmt, to make it + * clear that we're joining two strings together, but gcc does not + * support that preprocessor token. + */ +#define dprintf_dbuf(dbuf, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char __db_buf[32]; \ + uint64_t __db_obj = (dbuf)->db.db_object; \ + if (__db_obj == DMU_META_DNODE_OBJECT) \ + (void) strcpy(__db_buf, "mdn"); \ + else \ + (void) snprintf(__db_buf, sizeof (__db_buf), "%lld", \ + (u_longlong_t)__db_obj); \ + dprintf_ds((dbuf)->db_objset->os_dsl_dataset, \ + "obj=%s lvl=%u blkid=%lld " fmt, \ + __db_buf, (dbuf)->db_level, \ + (u_longlong_t)(dbuf)->db_blkid, __VA_ARGS__); \ + } \ +_NOTE(CONSTCOND) } while (0) + +#define dprintf_dbuf_bp(db, bp, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char *__blkbuf = kmem_alloc(BP_SPRINTF_LEN, KM_SLEEP); \ + snprintf_blkptr(__blkbuf, BP_SPRINTF_LEN, bp); \ + dprintf_dbuf(db, fmt " %s\n", __VA_ARGS__, __blkbuf); \ + kmem_free(__blkbuf, BP_SPRINTF_LEN); \ + } \ +_NOTE(CONSTCOND) } while (0) + +#define DBUF_VERIFY(db) dbuf_verify(db) + +#else + +#define dprintf_dbuf(db, fmt, ...) +#define dprintf_dbuf_bp(db, bp, fmt, ...) +#define DBUF_VERIFY(db) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DBUF_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/ddt.h +++ linux-aws-4.15.0/zfs/include/sys/ddt.h @@ -0,0 +1,250 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DDT_H +#define _SYS_DDT_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct abd; + +/* + * On-disk DDT formats, in the desired search order (newest version first). + */ +enum ddt_type { + DDT_TYPE_ZAP = 0, + DDT_TYPES +}; + +/* + * DDT classes, in the desired search order (highest replication level first). + */ +enum ddt_class { + DDT_CLASS_DITTO = 0, + DDT_CLASS_DUPLICATE, + DDT_CLASS_UNIQUE, + DDT_CLASSES +}; + +#define DDT_TYPE_CURRENT 0 + +#define DDT_COMPRESS_BYTEORDER_MASK 0x80 +#define DDT_COMPRESS_FUNCTION_MASK 0x7f + +/* + * On-disk ddt entry: key (name) and physical storage (value). + */ +typedef struct ddt_key { + zio_cksum_t ddk_cksum; /* 256-bit block checksum */ + /* + * Encoded with logical & physical size, and compression, as follows: + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * | 0 | 0 | 0 | comp | PSIZE | LSIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + */ + uint64_t ddk_prop; +} ddt_key_t; + +#define DDK_GET_LSIZE(ddk) \ + BF64_GET_SB((ddk)->ddk_prop, 0, 16, SPA_MINBLOCKSHIFT, 1) +#define DDK_SET_LSIZE(ddk, x) \ + BF64_SET_SB((ddk)->ddk_prop, 0, 16, SPA_MINBLOCKSHIFT, 1, x) + +#define DDK_GET_PSIZE(ddk) \ + BF64_GET_SB((ddk)->ddk_prop, 16, 16, SPA_MINBLOCKSHIFT, 1) +#define DDK_SET_PSIZE(ddk, x) \ + BF64_SET_SB((ddk)->ddk_prop, 16, 16, SPA_MINBLOCKSHIFT, 1, x) + +#define DDK_GET_COMPRESS(ddk) BF64_GET((ddk)->ddk_prop, 32, 8) +#define DDK_SET_COMPRESS(ddk, x) BF64_SET((ddk)->ddk_prop, 32, 8, x) + +#define DDT_KEY_WORDS (sizeof (ddt_key_t) / sizeof (uint64_t)) + +typedef struct ddt_phys { + dva_t ddp_dva[SPA_DVAS_PER_BP]; + uint64_t ddp_refcnt; + uint64_t ddp_phys_birth; +} ddt_phys_t; + +enum ddt_phys_type { + DDT_PHYS_DITTO = 0, + DDT_PHYS_SINGLE = 1, + DDT_PHYS_DOUBLE = 2, + DDT_PHYS_TRIPLE = 3, + DDT_PHYS_TYPES +}; + +/* + * In-core ddt entry + */ +struct ddt_entry { + ddt_key_t dde_key; + ddt_phys_t dde_phys[DDT_PHYS_TYPES]; + zio_t *dde_lead_zio[DDT_PHYS_TYPES]; + struct abd *dde_repair_abd; + enum ddt_type dde_type; + enum ddt_class dde_class; + uint8_t dde_loading; + uint8_t dde_loaded; + kcondvar_t dde_cv; + avl_node_t dde_node; +}; + +/* + * In-core ddt + */ +struct ddt { + kmutex_t ddt_lock; + avl_tree_t ddt_tree; + avl_tree_t ddt_repair_tree; + enum zio_checksum ddt_checksum; + spa_t *ddt_spa; + objset_t *ddt_os; + uint64_t ddt_stat_object; + uint64_t ddt_object[DDT_TYPES][DDT_CLASSES]; + ddt_histogram_t ddt_histogram[DDT_TYPES][DDT_CLASSES]; + ddt_histogram_t ddt_histogram_cache[DDT_TYPES][DDT_CLASSES]; + ddt_object_t ddt_object_stats[DDT_TYPES][DDT_CLASSES]; + avl_node_t ddt_node; +}; + +/* + * In-core and on-disk bookmark for DDT walks + */ +typedef struct ddt_bookmark { + uint64_t ddb_class; + uint64_t ddb_type; + uint64_t ddb_checksum; + uint64_t ddb_cursor; +} ddt_bookmark_t; + +/* + * Ops vector to access a specific DDT object type. + */ +typedef struct ddt_ops { + char ddt_op_name[32]; + int (*ddt_op_create)(objset_t *os, uint64_t *object, dmu_tx_t *tx, + boolean_t prehash); + int (*ddt_op_destroy)(objset_t *os, uint64_t object, dmu_tx_t *tx); + int (*ddt_op_lookup)(objset_t *os, uint64_t object, ddt_entry_t *dde); + void (*ddt_op_prefetch)(objset_t *os, uint64_t object, + ddt_entry_t *dde); + int (*ddt_op_update)(objset_t *os, uint64_t object, ddt_entry_t *dde, + dmu_tx_t *tx); + int (*ddt_op_remove)(objset_t *os, uint64_t object, ddt_entry_t *dde, + dmu_tx_t *tx); + int (*ddt_op_walk)(objset_t *os, uint64_t object, ddt_entry_t *dde, + uint64_t *walk); + int (*ddt_op_count)(objset_t *os, uint64_t object, uint64_t *count); +} ddt_ops_t; + +#define DDT_NAMELEN 80 + +extern void ddt_object_name(ddt_t *ddt, enum ddt_type type, + enum ddt_class class, char *name); +extern int ddt_object_walk(ddt_t *ddt, enum ddt_type type, + enum ddt_class class, uint64_t *walk, ddt_entry_t *dde); +extern int ddt_object_count(ddt_t *ddt, enum ddt_type type, + enum ddt_class class, uint64_t *count); +extern int ddt_object_info(ddt_t *ddt, enum ddt_type type, + enum ddt_class class, dmu_object_info_t *); +extern boolean_t ddt_object_exists(ddt_t *ddt, enum ddt_type type, + enum ddt_class class); + +extern void ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp, + uint64_t txg); +extern void ddt_bp_create(enum zio_checksum checksum, const ddt_key_t *ddk, + const ddt_phys_t *ddp, blkptr_t *bp); + +extern void ddt_key_fill(ddt_key_t *ddk, const blkptr_t *bp); + +extern void ddt_phys_fill(ddt_phys_t *ddp, const blkptr_t *bp); +extern void ddt_phys_clear(ddt_phys_t *ddp); +extern void ddt_phys_addref(ddt_phys_t *ddp); +extern void ddt_phys_decref(ddt_phys_t *ddp); +extern void ddt_phys_free(ddt_t *ddt, ddt_key_t *ddk, ddt_phys_t *ddp, + uint64_t txg); +extern ddt_phys_t *ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp); +extern uint64_t ddt_phys_total_refcnt(const ddt_entry_t *dde); + +extern void ddt_stat_add(ddt_stat_t *dst, const ddt_stat_t *src, uint64_t neg); + +extern void ddt_histogram_add(ddt_histogram_t *dst, const ddt_histogram_t *src); +extern void ddt_histogram_stat(ddt_stat_t *dds, const ddt_histogram_t *ddh); +extern boolean_t ddt_histogram_empty(const ddt_histogram_t *ddh); +extern void ddt_get_dedup_object_stats(spa_t *spa, ddt_object_t *ddo); +extern void ddt_get_dedup_histogram(spa_t *spa, ddt_histogram_t *ddh); +extern void ddt_get_dedup_stats(spa_t *spa, ddt_stat_t *dds_total); + +extern uint64_t ddt_get_dedup_dspace(spa_t *spa); +extern uint64_t ddt_get_pool_dedup_ratio(spa_t *spa); + +extern int ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde, + ddt_phys_t *ddp_willref); +extern int ddt_ditto_copies_present(ddt_entry_t *dde); + +extern size_t ddt_compress(void *src, uchar_t *dst, size_t s_len, size_t d_len); +extern void ddt_decompress(uchar_t *src, void *dst, size_t s_len, size_t d_len); + +extern ddt_t *ddt_select(spa_t *spa, const blkptr_t *bp); +extern void ddt_enter(ddt_t *ddt); +extern void ddt_exit(ddt_t *ddt); +extern void ddt_init(void); +extern void ddt_fini(void); +extern ddt_entry_t *ddt_lookup(ddt_t *ddt, const blkptr_t *bp, boolean_t add); +extern void ddt_prefetch(spa_t *spa, const blkptr_t *bp); +extern void ddt_remove(ddt_t *ddt, ddt_entry_t *dde); + +extern boolean_t ddt_class_contains(spa_t *spa, enum ddt_class max_class, + const blkptr_t *bp); + +extern ddt_entry_t *ddt_repair_start(ddt_t *ddt, const blkptr_t *bp); +extern void ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde); + +extern int ddt_entry_compare(const void *x1, const void *x2); + +extern void ddt_create(spa_t *spa); +extern int ddt_load(spa_t *spa); +extern void ddt_unload(spa_t *spa); +extern void ddt_sync(spa_t *spa, uint64_t txg); +extern int ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde); +extern int ddt_object_update(ddt_t *ddt, enum ddt_type type, + enum ddt_class class, ddt_entry_t *dde, dmu_tx_t *tx); + +extern const ddt_ops_t ddt_zap_ops; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DDT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu.h +++ linux-aws-4.15.0/zfs/include/sys/dmu.h @@ -0,0 +1,979 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright 2014 HybridCluster. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#ifndef _SYS_DMU_H +#define _SYS_DMU_H + +/* + * This file describes the interface that the DMU provides for its + * consumers. + * + * The DMU also interacts with the SPA. That interface is described in + * dmu_spa.h. + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct page; +struct vnode; +struct spa; +struct zilog; +struct zio; +struct blkptr; +struct zap_cursor; +struct dsl_dataset; +struct dsl_pool; +struct dnode; +struct drr_begin; +struct drr_end; +struct zbookmark_phys; +struct spa; +struct nvlist; +struct arc_buf; +struct zio_prop; +struct sa_handle; + +typedef struct objset objset_t; +typedef struct dmu_tx dmu_tx_t; +typedef struct dsl_dir dsl_dir_t; +typedef struct dnode dnode_t; + +typedef enum dmu_object_byteswap { + DMU_BSWAP_UINT8, + DMU_BSWAP_UINT16, + DMU_BSWAP_UINT32, + DMU_BSWAP_UINT64, + DMU_BSWAP_ZAP, + DMU_BSWAP_DNODE, + DMU_BSWAP_OBJSET, + DMU_BSWAP_ZNODE, + DMU_BSWAP_OLDACL, + DMU_BSWAP_ACL, + /* + * Allocating a new byteswap type number makes the on-disk format + * incompatible with any other format that uses the same number. + * + * Data can usually be structured to work with one of the + * DMU_BSWAP_UINT* or DMU_BSWAP_ZAP types. + */ + DMU_BSWAP_NUMFUNCS +} dmu_object_byteswap_t; + +#define DMU_OT_NEWTYPE 0x80 +#define DMU_OT_METADATA 0x40 +#define DMU_OT_BYTESWAP_MASK 0x3f + +/* + * Defines a uint8_t object type. Object types specify if the data + * in the object is metadata (boolean) and how to byteswap the data + * (dmu_object_byteswap_t). + */ +#define DMU_OT(byteswap, metadata) \ + (DMU_OT_NEWTYPE | \ + ((metadata) ? DMU_OT_METADATA : 0) | \ + ((byteswap) & DMU_OT_BYTESWAP_MASK)) + +#define DMU_OT_IS_VALID(ot) (((ot) & DMU_OT_NEWTYPE) ? \ + ((ot) & DMU_OT_BYTESWAP_MASK) < DMU_BSWAP_NUMFUNCS : \ + (ot) < DMU_OT_NUMTYPES) + +#define DMU_OT_IS_METADATA(ot) (((ot) & DMU_OT_NEWTYPE) ? \ + ((ot) & DMU_OT_METADATA) : \ + dmu_ot[(int)(ot)].ot_metadata) + +/* + * These object types use bp_fill != 1 for their L0 bp's. Therefore they can't + * have their data embedded (i.e. use a BP_IS_EMBEDDED() bp), because bp_fill + * is repurposed for embedded BPs. + */ +#define DMU_OT_HAS_FILL(ot) \ + ((ot) == DMU_OT_DNODE || (ot) == DMU_OT_OBJSET) + +#define DMU_OT_BYTESWAP(ot) (((ot) & DMU_OT_NEWTYPE) ? \ + ((ot) & DMU_OT_BYTESWAP_MASK) : \ + dmu_ot[(int)(ot)].ot_byteswap) + +typedef enum dmu_object_type { + DMU_OT_NONE, + /* general: */ + DMU_OT_OBJECT_DIRECTORY, /* ZAP */ + DMU_OT_OBJECT_ARRAY, /* UINT64 */ + DMU_OT_PACKED_NVLIST, /* UINT8 (XDR by nvlist_pack/unpack) */ + DMU_OT_PACKED_NVLIST_SIZE, /* UINT64 */ + DMU_OT_BPOBJ, /* UINT64 */ + DMU_OT_BPOBJ_HDR, /* UINT64 */ + /* spa: */ + DMU_OT_SPACE_MAP_HEADER, /* UINT64 */ + DMU_OT_SPACE_MAP, /* UINT64 */ + /* zil: */ + DMU_OT_INTENT_LOG, /* UINT64 */ + /* dmu: */ + DMU_OT_DNODE, /* DNODE */ + DMU_OT_OBJSET, /* OBJSET */ + /* dsl: */ + DMU_OT_DSL_DIR, /* UINT64 */ + DMU_OT_DSL_DIR_CHILD_MAP, /* ZAP */ + DMU_OT_DSL_DS_SNAP_MAP, /* ZAP */ + DMU_OT_DSL_PROPS, /* ZAP */ + DMU_OT_DSL_DATASET, /* UINT64 */ + /* zpl: */ + DMU_OT_ZNODE, /* ZNODE */ + DMU_OT_OLDACL, /* Old ACL */ + DMU_OT_PLAIN_FILE_CONTENTS, /* UINT8 */ + DMU_OT_DIRECTORY_CONTENTS, /* ZAP */ + DMU_OT_MASTER_NODE, /* ZAP */ + DMU_OT_UNLINKED_SET, /* ZAP */ + /* zvol: */ + DMU_OT_ZVOL, /* UINT8 */ + DMU_OT_ZVOL_PROP, /* ZAP */ + /* other; for testing only! */ + DMU_OT_PLAIN_OTHER, /* UINT8 */ + DMU_OT_UINT64_OTHER, /* UINT64 */ + DMU_OT_ZAP_OTHER, /* ZAP */ + /* new object types: */ + DMU_OT_ERROR_LOG, /* ZAP */ + DMU_OT_SPA_HISTORY, /* UINT8 */ + DMU_OT_SPA_HISTORY_OFFSETS, /* spa_his_phys_t */ + DMU_OT_POOL_PROPS, /* ZAP */ + DMU_OT_DSL_PERMS, /* ZAP */ + DMU_OT_ACL, /* ACL */ + DMU_OT_SYSACL, /* SYSACL */ + DMU_OT_FUID, /* FUID table (Packed NVLIST UINT8) */ + DMU_OT_FUID_SIZE, /* FUID table size UINT64 */ + DMU_OT_NEXT_CLONES, /* ZAP */ + DMU_OT_SCAN_QUEUE, /* ZAP */ + DMU_OT_USERGROUP_USED, /* ZAP */ + DMU_OT_USERGROUP_QUOTA, /* ZAP */ + DMU_OT_USERREFS, /* ZAP */ + DMU_OT_DDT_ZAP, /* ZAP */ + DMU_OT_DDT_STATS, /* ZAP */ + DMU_OT_SA, /* System attr */ + DMU_OT_SA_MASTER_NODE, /* ZAP */ + DMU_OT_SA_ATTR_REGISTRATION, /* ZAP */ + DMU_OT_SA_ATTR_LAYOUTS, /* ZAP */ + DMU_OT_SCAN_XLATE, /* ZAP */ + DMU_OT_DEDUP, /* fake dedup BP from ddt_bp_create() */ + DMU_OT_DEADLIST, /* ZAP */ + DMU_OT_DEADLIST_HDR, /* UINT64 */ + DMU_OT_DSL_CLONES, /* ZAP */ + DMU_OT_BPOBJ_SUBOBJ, /* UINT64 */ + /* + * Do not allocate new object types here. Doing so makes the on-disk + * format incompatible with any other format that uses the same object + * type number. + * + * When creating an object which does not have one of the above types + * use the DMU_OTN_* type with the correct byteswap and metadata + * values. + * + * The DMU_OTN_* types do not have entries in the dmu_ot table, + * use the DMU_OT_IS_METDATA() and DMU_OT_BYTESWAP() macros instead + * of indexing into dmu_ot directly (this works for both DMU_OT_* types + * and DMU_OTN_* types). + */ + DMU_OT_NUMTYPES, + + /* + * Names for valid types declared with DMU_OT(). + */ + DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE), + DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE), + DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE), + DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE), + DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE), + DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE), + DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE), + DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE), + DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE), + DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE), +} dmu_object_type_t; + +typedef enum txg_how { + TXG_WAIT = 1, + TXG_NOWAIT, + TXG_WAITED, +} txg_how_t; + +void byteswap_uint64_array(void *buf, size_t size); +void byteswap_uint32_array(void *buf, size_t size); +void byteswap_uint16_array(void *buf, size_t size); +void byteswap_uint8_array(void *buf, size_t size); +void zap_byteswap(void *buf, size_t size); +void zfs_oldacl_byteswap(void *buf, size_t size); +void zfs_acl_byteswap(void *buf, size_t size); +void zfs_znode_byteswap(void *buf, size_t size); + +#define DS_FIND_SNAPSHOTS (1<<0) +#define DS_FIND_CHILDREN (1<<1) +#define DS_FIND_SERIALIZE (1<<2) + +/* + * The maximum number of bytes that can be accessed as part of one + * operation, including metadata. + */ +#define DMU_MAX_ACCESS (64 * 1024 * 1024) /* 64MB */ +#define DMU_MAX_DELETEBLKCNT (20480) /* ~5MB of indirect blocks */ + +#define DMU_USERUSED_OBJECT (-1ULL) +#define DMU_GROUPUSED_OBJECT (-2ULL) + +/* + * Zap prefix for object accounting in DMU_{USER,GROUP}USED_OBJECT. + */ +#define DMU_OBJACCT_PREFIX "obj-" +#define DMU_OBJACCT_PREFIX_LEN 4 + +/* + * artificial blkids for bonus buffer and spill blocks + */ +#define DMU_BONUS_BLKID (-1ULL) +#define DMU_SPILL_BLKID (-2ULL) +/* + * Public routines to create, destroy, open, and close objsets. + */ +int dmu_objset_hold(const char *name, void *tag, objset_t **osp); +int dmu_objset_own(const char *name, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp); +void dmu_objset_rele(objset_t *os, void *tag); +void dmu_objset_disown(objset_t *os, void *tag); +int dmu_objset_open_ds(struct dsl_dataset *ds, objset_t **osp); + +void dmu_objset_evict_dbufs(objset_t *os); +int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags, + void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg); +int dmu_objset_clone(const char *name, const char *origin); +int dsl_destroy_snapshots_nvl(struct nvlist *snaps, boolean_t defer, + struct nvlist *errlist); +int dmu_objset_snapshot_one(const char *fsname, const char *snapname); +int dmu_objset_snapshot_tmp(const char *, const char *, int); +int dmu_objset_find(char *name, int func(const char *, void *), void *arg, + int flags); +void dmu_objset_byteswap(void *buf, size_t size); +int dsl_dataset_rename_snapshot(const char *fsname, + const char *oldsnapname, const char *newsnapname, boolean_t recursive); + +typedef struct dmu_buf { + uint64_t db_object; /* object that this buffer is part of */ + uint64_t db_offset; /* byte offset in this object */ + uint64_t db_size; /* size of buffer in bytes */ + void *db_data; /* data in buffer */ +} dmu_buf_t; + +/* + * The names of zap entries in the DIRECTORY_OBJECT of the MOS. + */ +#define DMU_POOL_DIRECTORY_OBJECT 1 +#define DMU_POOL_CONFIG "config" +#define DMU_POOL_FEATURES_FOR_WRITE "features_for_write" +#define DMU_POOL_FEATURES_FOR_READ "features_for_read" +#define DMU_POOL_FEATURE_DESCRIPTIONS "feature_descriptions" +#define DMU_POOL_FEATURE_ENABLED_TXG "feature_enabled_txg" +#define DMU_POOL_ROOT_DATASET "root_dataset" +#define DMU_POOL_SYNC_BPOBJ "sync_bplist" +#define DMU_POOL_ERRLOG_SCRUB "errlog_scrub" +#define DMU_POOL_ERRLOG_LAST "errlog_last" +#define DMU_POOL_SPARES "spares" +#define DMU_POOL_DEFLATE "deflate" +#define DMU_POOL_HISTORY "history" +#define DMU_POOL_PROPS "pool_props" +#define DMU_POOL_L2CACHE "l2cache" +#define DMU_POOL_TMP_USERREFS "tmp_userrefs" +#define DMU_POOL_DDT "DDT-%s-%s-%s" +#define DMU_POOL_DDT_STATS "DDT-statistics" +#define DMU_POOL_CREATION_VERSION "creation_version" +#define DMU_POOL_SCAN "scan" +#define DMU_POOL_FREE_BPOBJ "free_bpobj" +#define DMU_POOL_BPTREE_OBJ "bptree_obj" +#define DMU_POOL_EMPTY_BPOBJ "empty_bpobj" +#define DMU_POOL_CHECKSUM_SALT "org.illumos:checksum_salt" +#define DMU_POOL_VDEV_ZAP_MAP "com.delphix:vdev_zap_map" + +/* + * Allocate an object from this objset. The range of object numbers + * available is (0, DN_MAX_OBJECT). Object 0 is the meta-dnode. + * + * The transaction must be assigned to a txg. The newly allocated + * object will be "held" in the transaction (ie. you can modify the + * newly allocated object in this transaction). + * + * dmu_object_alloc() chooses an object and returns it in *objectp. + * + * dmu_object_claim() allocates a specific object number. If that + * number is already allocated, it fails and returns EEXIST. + * + * Return 0 on success, or ENOSPC or EEXIST as specified above. + */ +uint64_t dmu_object_alloc(objset_t *os, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx); +uint64_t dmu_object_alloc_dnsize(objset_t *os, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonus_type, int bonus_len, + int dnodesize, dmu_tx_t *tx); +int dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx); +int dmu_object_claim_dnsize(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonus_type, int bonus_len, + int dnodesize, dmu_tx_t *tx); +int dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *txp); +int dmu_object_reclaim_dnsize(objset_t *os, uint64_t object, + dmu_object_type_t ot, int blocksize, dmu_object_type_t bonustype, + int bonuslen, int dnodesize, dmu_tx_t *txp); + +/* + * Free an object from this objset. + * + * The object's data will be freed as well (ie. you don't need to call + * dmu_free(object, 0, -1, tx)). + * + * The object need not be held in the transaction. + * + * If there are any holds on this object's buffers (via dmu_buf_hold()), + * or tx holds on the object (via dmu_tx_hold_object()), you can not + * free it; it fails and returns EBUSY. + * + * If the object is not allocated, it fails and returns ENOENT. + * + * Return 0 on success, or EBUSY or ENOENT as specified above. + */ +int dmu_object_free(objset_t *os, uint64_t object, dmu_tx_t *tx); + +/* + * Find the next allocated or free object. + * + * The objectp parameter is in-out. It will be updated to be the next + * object which is allocated. Ignore objects which have not been + * modified since txg. + * + * XXX Can only be called on a objset with no dirty data. + * + * Returns 0 on success, or ENOENT if there are no more objects. + */ +int dmu_object_next(objset_t *os, uint64_t *objectp, + boolean_t hole, uint64_t txg); + +/* + * Set the data blocksize for an object. + * + * The object cannot have any blocks allcated beyond the first. If + * the first block is allocated already, the new size must be greater + * than the current block size. If these conditions are not met, + * ENOTSUP will be returned. + * + * Returns 0 on success, or EBUSY if there are any holds on the object + * contents, or ENOTSUP as described above. + */ +int dmu_object_set_blocksize(objset_t *os, uint64_t object, uint64_t size, + int ibs, dmu_tx_t *tx); + +/* + * Set the checksum property on a dnode. The new checksum algorithm will + * apply to all newly written blocks; existing blocks will not be affected. + */ +void dmu_object_set_checksum(objset_t *os, uint64_t object, uint8_t checksum, + dmu_tx_t *tx); + +/* + * Set the compress property on a dnode. The new compression algorithm will + * apply to all newly written blocks; existing blocks will not be affected. + */ +void dmu_object_set_compress(objset_t *os, uint64_t object, uint8_t compress, + dmu_tx_t *tx); + +void +dmu_write_embedded(objset_t *os, uint64_t object, uint64_t offset, + void *data, uint8_t etype, uint8_t comp, int uncompressed_size, + int compressed_size, int byteorder, dmu_tx_t *tx); + +/* + * Decide how to write a block: checksum, compression, number of copies, etc. + */ +#define WP_NOFILL 0x1 +#define WP_DMU_SYNC 0x2 +#define WP_SPILL 0x4 + +void dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, + struct zio_prop *zp); +/* + * The bonus data is accessed more or less like a regular buffer. + * You must dmu_bonus_hold() to get the buffer, which will give you a + * dmu_buf_t with db_offset==-1ULL, and db_size = the size of the bonus + * data. As with any normal buffer, you must call dmu_buf_read() to + * read db_data, dmu_buf_will_dirty() before modifying it, and the + * object must be held in an assigned transaction before calling + * dmu_buf_will_dirty. You may use dmu_buf_set_user() on the bonus + * buffer as well. You must release what you hold with dmu_buf_rele(). + * + * Returns ENOENT, EIO, or 0. + */ +int dmu_bonus_hold(objset_t *os, uint64_t object, void *tag, dmu_buf_t **); +int dmu_bonus_max(void); +int dmu_set_bonus(dmu_buf_t *, int, dmu_tx_t *); +int dmu_set_bonustype(dmu_buf_t *, dmu_object_type_t, dmu_tx_t *); +dmu_object_type_t dmu_get_bonustype(dmu_buf_t *); +int dmu_rm_spill(objset_t *, uint64_t, dmu_tx_t *); + +/* + * Special spill buffer support used by "SA" framework + */ + +int dmu_spill_hold_by_bonus(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp); +int dmu_spill_hold_by_dnode(dnode_t *dn, uint32_t flags, + void *tag, dmu_buf_t **dbp); +int dmu_spill_hold_existing(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp); + +/* + * Obtain the DMU buffer from the specified object which contains the + * specified offset. dmu_buf_hold() puts a "hold" on the buffer, so + * that it will remain in memory. You must release the hold with + * dmu_buf_rele(). You must not access the dmu_buf_t after releasing + * what you hold. You must have a hold on any dmu_buf_t* you pass to the DMU. + * + * You must call dmu_buf_read, dmu_buf_will_dirty, or dmu_buf_will_fill + * on the returned buffer before reading or writing the buffer's + * db_data. The comments for those routines describe what particular + * operations are valid after calling them. + * + * The object number must be a valid, allocated object number. + */ +int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset, + void *tag, dmu_buf_t **, int flags); +int dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset, + void *tag, dmu_buf_t **dbp, int flags); + +/* + * Add a reference to a dmu buffer that has already been held via + * dmu_buf_hold() in the current context. + */ +void dmu_buf_add_ref(dmu_buf_t *db, void* tag); + +/* + * Attempt to add a reference to a dmu buffer that is in an unknown state, + * using a pointer that may have been invalidated by eviction processing. + * The request will succeed if the passed in dbuf still represents the + * same os/object/blkid, is ineligible for eviction, and has at least + * one hold by a user other than the syncer. + */ +boolean_t dmu_buf_try_add_ref(dmu_buf_t *, objset_t *os, uint64_t object, + uint64_t blkid, void *tag); + +void dmu_buf_rele(dmu_buf_t *db, void *tag); +uint64_t dmu_buf_refcount(dmu_buf_t *db); + +/* + * dmu_buf_hold_array holds the DMU buffers which contain all bytes in a + * range of an object. A pointer to an array of dmu_buf_t*'s is + * returned (in *dbpp). + * + * dmu_buf_rele_array releases the hold on an array of dmu_buf_t*'s, and + * frees the array. The hold on the array of buffers MUST be released + * with dmu_buf_rele_array. You can NOT release the hold on each buffer + * individually with dmu_buf_rele. + */ +int dmu_buf_hold_array_by_bonus(dmu_buf_t *db, uint64_t offset, + uint64_t length, boolean_t read, void *tag, + int *numbufsp, dmu_buf_t ***dbpp); +void dmu_buf_rele_array(dmu_buf_t **, int numbufs, void *tag); + +typedef void dmu_buf_evict_func_t(void *user_ptr); + +/* + * A DMU buffer user object may be associated with a dbuf for the + * duration of its lifetime. This allows the user of a dbuf (client) + * to attach private data to a dbuf (e.g. in-core only data such as a + * dnode_children_t, zap_t, or zap_leaf_t) and be optionally notified + * when that dbuf has been evicted. Clients typically respond to the + * eviction notification by freeing their private data, thus ensuring + * the same lifetime for both dbuf and private data. + * + * The mapping from a dmu_buf_user_t to any client private data is the + * client's responsibility. All current consumers of the API with private + * data embed a dmu_buf_user_t as the first member of the structure for + * their private data. This allows conversions between the two types + * with a simple cast. Since the DMU buf user API never needs access + * to the private data, other strategies can be employed if necessary + * or convenient for the client (e.g. using container_of() to do the + * conversion for private data that cannot have the dmu_buf_user_t as + * its first member). + * + * Eviction callbacks are executed without the dbuf mutex held or any + * other type of mechanism to guarantee that the dbuf is still available. + * For this reason, users must assume the dbuf has already been freed + * and not reference the dbuf from the callback context. + * + * Users requesting "immediate eviction" are notified as soon as the dbuf + * is only referenced by dirty records (dirties == holds). Otherwise the + * notification occurs after eviction processing for the dbuf begins. + */ +typedef struct dmu_buf_user { + /* + * Asynchronous user eviction callback state. + */ + taskq_ent_t dbu_tqent; + + /* + * This instance's eviction function pointers. + * + * dbu_evict_func_sync is called synchronously and then + * dbu_evict_func_async is executed asynchronously on a taskq. + */ + dmu_buf_evict_func_t *dbu_evict_func_sync; + dmu_buf_evict_func_t *dbu_evict_func_async; +#ifdef ZFS_DEBUG + /* + * Pointer to user's dbuf pointer. NULL for clients that do + * not associate a dbuf with their user data. + * + * The dbuf pointer is cleared upon eviction so as to catch + * use-after-evict bugs in clients. + */ + dmu_buf_t **dbu_clear_on_evict_dbufp; +#endif +} dmu_buf_user_t; + +/* + * Initialize the given dmu_buf_user_t instance with the eviction function + * evict_func, to be called when the user is evicted. + * + * NOTE: This function should only be called once on a given dmu_buf_user_t. + * To allow enforcement of this, dbu must already be zeroed on entry. + */ +/*ARGSUSED*/ +static inline void +dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func_sync, + dmu_buf_evict_func_t *evict_func_async, dmu_buf_t **clear_on_evict_dbufp) +{ + ASSERT(dbu->dbu_evict_func_sync == NULL); + ASSERT(dbu->dbu_evict_func_async == NULL); + + /* must have at least one evict func */ + IMPLY(evict_func_sync == NULL, evict_func_async != NULL); + dbu->dbu_evict_func_sync = evict_func_sync; + dbu->dbu_evict_func_async = evict_func_async; + taskq_init_ent(&dbu->dbu_tqent); +#ifdef ZFS_DEBUG + dbu->dbu_clear_on_evict_dbufp = clear_on_evict_dbufp; +#endif +} + +/* + * Attach user data to a dbuf and mark it for normal (when the dbuf's + * data is cleared or its reference count goes to zero) eviction processing. + * + * Returns NULL on success, or the existing user if another user currently + * owns the buffer. + */ +void *dmu_buf_set_user(dmu_buf_t *db, dmu_buf_user_t *user); + +/* + * Attach user data to a dbuf and mark it for immediate (its dirty and + * reference counts are equal) eviction processing. + * + * Returns NULL on success, or the existing user if another user currently + * owns the buffer. + */ +void *dmu_buf_set_user_ie(dmu_buf_t *db, dmu_buf_user_t *user); + +/* + * Replace the current user of a dbuf. + * + * If given the current user of a dbuf, replaces the dbuf's user with + * "new_user" and returns the user data pointer that was replaced. + * Otherwise returns the current, and unmodified, dbuf user pointer. + */ +void *dmu_buf_replace_user(dmu_buf_t *db, + dmu_buf_user_t *old_user, dmu_buf_user_t *new_user); + +/* + * Remove the specified user data for a DMU buffer. + * + * Returns the user that was removed on success, or the current user if + * another user currently owns the buffer. + */ +void *dmu_buf_remove_user(dmu_buf_t *db, dmu_buf_user_t *user); + +/* + * Returns the user data (dmu_buf_user_t *) associated with this dbuf. + */ +void *dmu_buf_get_user(dmu_buf_t *db); + +objset_t *dmu_buf_get_objset(dmu_buf_t *db); +dnode_t *dmu_buf_dnode_enter(dmu_buf_t *db); +void dmu_buf_dnode_exit(dmu_buf_t *db); + +/* Block until any in-progress dmu buf user evictions complete. */ +void dmu_buf_user_evict_wait(void); + +/* + * Returns the blkptr associated with this dbuf, or NULL if not set. + */ +struct blkptr *dmu_buf_get_blkptr(dmu_buf_t *db); + +/* + * Indicate that you are going to modify the buffer's data (db_data). + * + * The transaction (tx) must be assigned to a txg (ie. you've called + * dmu_tx_assign()). The buffer's object must be held in the tx + * (ie. you've called dmu_tx_hold_object(tx, db->db_object)). + */ +void dmu_buf_will_dirty(dmu_buf_t *db, dmu_tx_t *tx); + +/* + * You must create a transaction, then hold the objects which you will + * (or might) modify as part of this transaction. Then you must assign + * the transaction to a transaction group. Once the transaction has + * been assigned, you can modify buffers which belong to held objects as + * part of this transaction. You can't modify buffers before the + * transaction has been assigned; you can't modify buffers which don't + * belong to objects which this transaction holds; you can't hold + * objects once the transaction has been assigned. You may hold an + * object which you are going to free (with dmu_object_free()), but you + * don't have to. + * + * You can abort the transaction before it has been assigned. + * + * Note that you may hold buffers (with dmu_buf_hold) at any time, + * regardless of transaction state. + */ + +#define DMU_NEW_OBJECT (-1ULL) +#define DMU_OBJECT_END (-1ULL) + +dmu_tx_t *dmu_tx_create(objset_t *os); +void dmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len); +void dmu_tx_hold_write_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, + int len); +void dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off, + uint64_t len); +void dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, + uint64_t len); +void dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t object, int add, const char *name); +void dmu_tx_hold_zap_by_dnode(dmu_tx_t *tx, dnode_t *dn, int add, + const char *name); +void dmu_tx_hold_bonus(dmu_tx_t *tx, uint64_t object); +void dmu_tx_hold_bonus_by_dnode(dmu_tx_t *tx, dnode_t *dn); +void dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object); +void dmu_tx_hold_sa(dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow); +void dmu_tx_hold_sa_create(dmu_tx_t *tx, int total_size); +void dmu_tx_abort(dmu_tx_t *tx); +int dmu_tx_assign(dmu_tx_t *tx, enum txg_how txg_how); +void dmu_tx_wait(dmu_tx_t *tx); +void dmu_tx_commit(dmu_tx_t *tx); +void dmu_tx_mark_netfree(dmu_tx_t *tx); + +/* + * To register a commit callback, dmu_tx_callback_register() must be called. + * + * dcb_data is a pointer to caller private data that is passed on as a + * callback parameter. The caller is responsible for properly allocating and + * freeing it. + * + * When registering a callback, the transaction must be already created, but + * it cannot be committed or aborted. It can be assigned to a txg or not. + * + * The callback will be called after the transaction has been safely written + * to stable storage and will also be called if the dmu_tx is aborted. + * If there is any error which prevents the transaction from being committed to + * disk, the callback will be called with a value of error != 0. + */ +typedef void dmu_tx_callback_func_t(void *dcb_data, int error); + +void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func, + void *dcb_data); + +/* + * Free up the data blocks for a defined range of a file. If size is + * -1, the range from offset to end-of-file is freed. + */ +int dmu_free_range(objset_t *os, uint64_t object, uint64_t offset, + uint64_t size, dmu_tx_t *tx); +int dmu_free_long_range(objset_t *os, uint64_t object, uint64_t offset, + uint64_t size); +int dmu_free_long_object(objset_t *os, uint64_t object); + +/* + * Convenience functions. + * + * Canfail routines will return 0 on success, or an errno if there is a + * nonrecoverable I/O error. + */ +#define DMU_READ_PREFETCH 0 /* prefetch */ +#define DMU_READ_NO_PREFETCH 1 /* don't prefetch */ +int dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + void *buf, uint32_t flags); +int dmu_read_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, void *buf, + uint32_t flags); +void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + const void *buf, dmu_tx_t *tx); +void dmu_write_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, + const void *buf, dmu_tx_t *tx); +void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + dmu_tx_t *tx); +#ifdef _KERNEL +#include +int dmu_read_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size); +int dmu_read_uio_dbuf(dmu_buf_t *zdb, struct uio *uio, uint64_t size); +int dmu_read_uio_dnode(dnode_t *dn, struct uio *uio, uint64_t size); +int dmu_write_uio(objset_t *os, uint64_t object, struct uio *uio, uint64_t size, + dmu_tx_t *tx); +int dmu_write_uio_dbuf(dmu_buf_t *zdb, struct uio *uio, uint64_t size, + dmu_tx_t *tx); +int dmu_write_uio_dnode(dnode_t *dn, struct uio *uio, uint64_t size, + dmu_tx_t *tx); +#endif +struct arc_buf *dmu_request_arcbuf(dmu_buf_t *handle, int size); +void dmu_return_arcbuf(struct arc_buf *buf); +void dmu_assign_arcbuf(dmu_buf_t *handle, uint64_t offset, struct arc_buf *buf, + dmu_tx_t *tx); +#ifdef HAVE_UIO_ZEROCOPY +int dmu_xuio_init(struct xuio *uio, int niov); +void dmu_xuio_fini(struct xuio *uio); +int dmu_xuio_add(struct xuio *uio, struct arc_buf *abuf, offset_t off, + size_t n); +int dmu_xuio_cnt(struct xuio *uio); +struct arc_buf *dmu_xuio_arcbuf(struct xuio *uio, int i); +void dmu_xuio_clear(struct xuio *uio, int i); +#endif /* HAVE_UIO_ZEROCOPY */ +void xuio_stat_wbuf_copied(void); +void xuio_stat_wbuf_nocopy(void); + +extern int zfs_prefetch_disable; +extern int zfs_max_recordsize; + +/* + * Asynchronously try to read in the data. + */ +void dmu_prefetch(objset_t *os, uint64_t object, int64_t level, uint64_t offset, + uint64_t len, enum zio_priority pri); + +typedef struct dmu_object_info { + /* All sizes are in bytes unless otherwise indicated. */ + uint32_t doi_data_block_size; + uint32_t doi_metadata_block_size; + dmu_object_type_t doi_type; + dmu_object_type_t doi_bonus_type; + uint64_t doi_bonus_size; + uint8_t doi_indirection; /* 2 = dnode->indirect->data */ + uint8_t doi_checksum; + uint8_t doi_compress; + uint8_t doi_nblkptr; + uint8_t doi_pad[4]; + uint64_t doi_dnodesize; + uint64_t doi_physical_blocks_512; /* data + metadata, 512b blks */ + uint64_t doi_max_offset; + uint64_t doi_fill_count; /* number of non-empty blocks */ +} dmu_object_info_t; + +typedef void (*const arc_byteswap_func_t)(void *buf, size_t size); + +typedef struct dmu_object_type_info { + dmu_object_byteswap_t ot_byteswap; + boolean_t ot_metadata; + char *ot_name; +} dmu_object_type_info_t; + +typedef const struct dmu_object_byteswap_info { + arc_byteswap_func_t ob_func; + char *ob_name; +} dmu_object_byteswap_info_t; + +extern const dmu_object_type_info_t dmu_ot[DMU_OT_NUMTYPES]; +extern const dmu_object_byteswap_info_t dmu_ot_byteswap[DMU_BSWAP_NUMFUNCS]; + +/* + * Get information on a DMU object. + * + * Return 0 on success or ENOENT if object is not allocated. + * + * If doi is NULL, just indicates whether the object exists. + */ +int dmu_object_info(objset_t *os, uint64_t object, dmu_object_info_t *doi); +void __dmu_object_info_from_dnode(struct dnode *dn, dmu_object_info_t *doi); +/* Like dmu_object_info, but faster if you have a held dnode in hand. */ +void dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi); +/* Like dmu_object_info, but faster if you have a held dbuf in hand. */ +void dmu_object_info_from_db(dmu_buf_t *db, dmu_object_info_t *doi); +/* + * Like dmu_object_info_from_db, but faster still when you only care about + * the size. This is specifically optimized for zfs_getattr(). + */ +void dmu_object_size_from_db(dmu_buf_t *db, uint32_t *blksize, + u_longlong_t *nblk512); + +void dmu_object_dnsize_from_db(dmu_buf_t *db, int *dnsize); + +typedef struct dmu_objset_stats { + uint64_t dds_num_clones; /* number of clones of this */ + uint64_t dds_creation_txg; + uint64_t dds_guid; + dmu_objset_type_t dds_type; + uint8_t dds_is_snapshot; + uint8_t dds_inconsistent; + char dds_origin[ZFS_MAX_DATASET_NAME_LEN]; +} dmu_objset_stats_t; + +/* + * Get stats on a dataset. + */ +void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat); + +/* + * Add entries to the nvlist for all the objset's properties. See + * zfs_prop_table[] and zfs(1m) for details on the properties. + */ +void dmu_objset_stats(objset_t *os, struct nvlist *nv); + +/* + * Get the space usage statistics for statvfs(). + * + * refdbytes is the amount of space "referenced" by this objset. + * availbytes is the amount of space available to this objset, taking + * into account quotas & reservations, assuming that no other objsets + * use the space first. These values correspond to the 'referenced' and + * 'available' properties, described in the zfs(1m) manpage. + * + * usedobjs and availobjs are the number of objects currently allocated, + * and available. + */ +void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, + uint64_t *usedobjsp, uint64_t *availobjsp); + +/* + * The fsid_guid is a 56-bit ID that can change to avoid collisions. + * (Contrast with the ds_guid which is a 64-bit ID that will never + * change, so there is a small probability that it will collide.) + */ +uint64_t dmu_objset_fsid_guid(objset_t *os); + +/* + * Get the [cm]time for an objset's snapshot dir + */ +timestruc_t dmu_objset_snap_cmtime(objset_t *os); + +int dmu_objset_is_snapshot(objset_t *os); + +extern struct spa *dmu_objset_spa(objset_t *os); +extern struct zilog *dmu_objset_zil(objset_t *os); +extern struct dsl_pool *dmu_objset_pool(objset_t *os); +extern struct dsl_dataset *dmu_objset_ds(objset_t *os); +extern void dmu_objset_name(objset_t *os, char *buf); +extern dmu_objset_type_t dmu_objset_type(objset_t *os); +extern uint64_t dmu_objset_id(objset_t *os); +extern uint64_t dmu_objset_dnodesize(objset_t *os); +extern zfs_sync_type_t dmu_objset_syncprop(objset_t *os); +extern zfs_logbias_op_t dmu_objset_logbias(objset_t *os); +extern int dmu_snapshot_list_next(objset_t *os, int namelen, char *name, + uint64_t *id, uint64_t *offp, boolean_t *case_conflict); +extern int dmu_snapshot_lookup(objset_t *os, const char *name, uint64_t *val); +extern int dmu_snapshot_realname(objset_t *os, char *name, char *real, + int maxlen, boolean_t *conflict); +extern int dmu_dir_list_next(objset_t *os, int namelen, char *name, + uint64_t *idp, uint64_t *offp); + +typedef int objset_used_cb_t(dmu_object_type_t bonustype, + void *bonus, uint64_t *userp, uint64_t *groupp); +extern void dmu_objset_register_type(dmu_objset_type_t ost, + objset_used_cb_t *cb); +extern void dmu_objset_set_user(objset_t *os, void *user_ptr); +extern void *dmu_objset_get_user(objset_t *os); + +/* + * Return the txg number for the given assigned transaction. + */ +uint64_t dmu_tx_get_txg(dmu_tx_t *tx); + +/* + * Synchronous write. + * If a parent zio is provided this function initiates a write on the + * provided buffer as a child of the parent zio. + * In the absence of a parent zio, the write is completed synchronously. + * At write completion, blk is filled with the bp of the written block. + * Note that while the data covered by this function will be on stable + * storage when the write completes this new data does not become a + * permanent part of the file until the associated transaction commits. + */ + +/* + * {zfs,zvol,ztest}_get_done() args + */ +typedef struct zgd { + struct zilog *zgd_zilog; + struct blkptr *zgd_bp; + dmu_buf_t *zgd_db; + struct rl *zgd_rl; + void *zgd_private; +} zgd_t; + +typedef void dmu_sync_cb_t(zgd_t *arg, int error); +int dmu_sync(struct zio *zio, uint64_t txg, dmu_sync_cb_t *done, zgd_t *zgd); + +/* + * Find the next hole or data block in file starting at *off + * Return found offset in *off. Return ESRCH for end of file. + */ +int dmu_offset_next(objset_t *os, uint64_t object, boolean_t hole, + uint64_t *off); + +/* + * Initial setup and final teardown. + */ +extern void dmu_init(void); +extern void dmu_fini(void); + +typedef void (*dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp, + uint64_t object, uint64_t offset, int len); +void dmu_traverse_objset(objset_t *os, uint64_t txg_start, + dmu_traverse_cb_t cb, void *arg); + +int dmu_diff(const char *tosnap_name, const char *fromsnap_name, + struct vnode *vp, offset_t *offp); + +/* CRC64 table */ +#define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL /* ECMA-182, reflected form */ +extern uint64_t zfs_crc64_table[256]; + +extern int zfs_mdcomp_disable; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DMU_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_impl.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_impl.h @@ -0,0 +1,287 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DMU_IMPL_H +#define _SYS_DMU_IMPL_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This is the locking strategy for the DMU. Numbers in parenthesis are + * cases that use that lock order, referenced below: + * + * ARC is self-contained + * bplist is self-contained + * refcount is self-contained + * txg is self-contained (hopefully!) + * zst_lock + * zf_rwlock + * + * XXX try to improve evicting path? + * + * dp_config_rwlock > os_obj_lock > dn_struct_rwlock > + * dn_dbufs_mtx > hash_mutexes > db_mtx > dd_lock > leafs + * + * dp_config_rwlock + * must be held before: everything + * protects dd namespace changes + * protects property changes globally + * held from: + * dsl_dir_open/r: + * dsl_dir_create_sync/w: + * dsl_dir_sync_destroy/w: + * dsl_dir_rename_sync/w: + * dsl_prop_changed_notify/r: + * + * os_obj_lock + * must be held before: + * everything except dp_config_rwlock + * protects os_obj_next + * held from: + * dmu_object_alloc: dn_dbufs_mtx, db_mtx, hash_mutexes, dn_struct_rwlock + * + * dn_struct_rwlock + * must be held before: + * everything except dp_config_rwlock and os_obj_lock + * protects structure of dnode (eg. nlevels) + * db_blkptr can change when syncing out change to nlevels + * dn_maxblkid + * dn_nlevels + * dn_*blksz* + * phys nlevels, maxblkid, physical blkptr_t's (?) + * held from: + * callers of dbuf_read_impl, dbuf_hold[_impl], dbuf_prefetch + * dmu_object_info_from_dnode: dn_dirty_mtx (dn_datablksz) + * dbuf_read_impl: db_mtx, dmu_zfetch() + * dmu_zfetch: zf_rwlock/r, zst_lock, dbuf_prefetch() + * dbuf_new_size: db_mtx + * dbuf_dirty: db_mtx + * dbuf_findbp: (callers, phys? - the real need) + * dbuf_create: dn_dbufs_mtx, hash_mutexes, db_mtx (phys?) + * dbuf_prefetch: dn_dirty_mtx, hash_mutexes, db_mtx, dn_dbufs_mtx + * dbuf_hold_impl: hash_mutexes, db_mtx, dn_dbufs_mtx, dbuf_findbp() + * dnode_sync/w (increase_indirection): db_mtx (phys) + * dnode_set_blksz/w: dn_dbufs_mtx (dn_*blksz*) + * dnode_new_blkid/w: (dn_maxblkid) + * dnode_free_range/w: dn_dirty_mtx (dn_maxblkid) + * dnode_next_offset: (phys) + * + * dn_dbufs_mtx + * must be held before: + * db_mtx, hash_mutexes + * protects: + * dn_dbufs + * dn_evicted + * held from: + * dmu_evict_user: db_mtx (dn_dbufs) + * dbuf_free_range: db_mtx (dn_dbufs) + * dbuf_remove_ref: db_mtx, callees: + * dbuf_hash_remove: hash_mutexes, db_mtx + * dbuf_create: hash_mutexes, db_mtx (dn_dbufs) + * dnode_set_blksz: (dn_dbufs) + * + * hash_mutexes (global) + * must be held before: + * db_mtx + * protects dbuf_hash_table (global) and db_hash_next + * held from: + * dbuf_find: db_mtx + * dbuf_hash_insert: db_mtx + * dbuf_hash_remove: db_mtx + * + * db_mtx (meta-leaf) + * must be held before: + * dn_mtx, dn_dirty_mtx, dd_lock (leaf mutexes) + * protects: + * db_state + * db_holds + * db_buf + * db_changed + * db_data_pending + * db_dirtied + * db_link + * db_dirty_node (??) + * db_dirtycnt + * db_d.* + * db.* + * held from: + * dbuf_dirty: dn_mtx, dn_dirty_mtx + * dbuf_dirty->dsl_dir_willuse_space: dd_lock + * dbuf_dirty->dbuf_new_block->dsl_dataset_block_freeable: dd_lock + * dbuf_undirty: dn_dirty_mtx (db_d) + * dbuf_write_done: dn_dirty_mtx (db_state) + * dbuf_* + * dmu_buf_update_user: none (db_d) + * dmu_evict_user: none (db_d) (maybe can eliminate) + * dbuf_find: none (db_holds) + * dbuf_hash_insert: none (db_holds) + * dmu_buf_read_array_impl: none (db_state, db_changed) + * dmu_sync: none (db_dirty_node, db_d) + * dnode_reallocate: none (db) + * + * dn_mtx (leaf) + * protects: + * dn_dirty_dbufs + * dn_ranges + * phys accounting + * dn_allocated_txg + * dn_free_txg + * dn_assigned_txg + * dd_assigned_tx + * dn_notxholds + * dn_dirtyctx + * dn_dirtyctx_firstset + * (dn_phys copy fields?) + * (dn_phys contents?) + * held from: + * dnode_* + * dbuf_dirty: none + * dbuf_sync: none (phys accounting) + * dbuf_undirty: none (dn_ranges, dn_dirty_dbufs) + * dbuf_write_done: none (phys accounting) + * dmu_object_info_from_dnode: none (accounting) + * dmu_tx_commit: none + * dmu_tx_hold_object_impl: none + * dmu_tx_try_assign: dn_notxholds(cv) + * dmu_tx_unassign: none + * + * dd_lock + * must be held before: + * ds_lock + * ancestors' dd_lock + * protects: + * dd_prop_cbs + * dd_sync_* + * dd_used_bytes + * dd_tempreserved + * dd_space_towrite + * dd_myname + * dd_phys accounting? + * held from: + * dsl_dir_* + * dsl_prop_changed_notify: none (dd_prop_cbs) + * dsl_prop_register: none (dd_prop_cbs) + * dsl_prop_unregister: none (dd_prop_cbs) + * + * os_lock (leaf) + * protects: + * os_dirty_dnodes + * os_free_dnodes + * os_dnodes + * os_downgraded_dbufs + * dn_dirtyblksz + * dn_dirty_link + * held from: + * dnode_create: none (os_dnodes) + * dnode_destroy: none (os_dnodes) + * dnode_setdirty: none (dn_dirtyblksz, os_*_dnodes) + * dnode_free: none (dn_dirtyblksz, os_*_dnodes) + * + * ds_lock + * protects: + * ds_objset + * ds_open_refcount + * ds_snapname + * ds_phys accounting + * ds_phys userrefs zapobj + * ds_reserved + * held from: + * dsl_dataset_* + * + * dr_mtx (leaf) + * protects: + * dr_children + * held from: + * dbuf_dirty + * dbuf_undirty + * dbuf_sync_indirect + * dnode_new_blkid + */ + +struct objset; +struct dmu_pool; + +typedef struct dmu_xuio { + int next; + int cnt; + struct arc_buf **bufs; + iovec_t *iovp; +} dmu_xuio_t; + +/* + * The list of data whose inclusion in a send stream can be pending from + * one call to backup_cb to another. Multiple calls to dump_free() and + * dump_freeobjects() can be aggregated into a single DRR_FREE or + * DRR_FREEOBJECTS replay record. + */ +typedef enum { + PENDING_NONE, + PENDING_FREE, + PENDING_FREEOBJECTS +} dmu_pendop_t; + +typedef struct dmu_sendarg { + list_node_t dsa_link; + dmu_replay_record_t *dsa_drr; + vnode_t *dsa_vp; + int dsa_outfd; + proc_t *dsa_proc; + offset_t *dsa_off; + objset_t *dsa_os; + zio_cksum_t dsa_zc; + uint64_t dsa_toguid; + int dsa_err; + dmu_pendop_t dsa_pending_op; + uint64_t dsa_featureflags; + uint64_t dsa_last_data_object; + uint64_t dsa_last_data_offset; + uint64_t dsa_resume_object; + uint64_t dsa_resume_offset; + boolean_t dsa_sent_begin; + boolean_t dsa_sent_end; +} dmu_sendarg_t; + +void dmu_object_zapify(objset_t *, uint64_t, dmu_object_type_t, dmu_tx_t *); +void dmu_object_free_zapified(objset_t *, uint64_t, dmu_tx_t *); +int dmu_buf_hold_noread(objset_t *, uint64_t, uint64_t, + void *, dmu_buf_t **); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DMU_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_objset.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_objset.h @@ -0,0 +1,214 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#ifndef _SYS_DMU_OBJSET_H +#define _SYS_DMU_OBJSET_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern krwlock_t os_lock; + +struct dsl_pool; +struct dsl_dataset; +struct dmu_tx; + +#define OBJSET_PHYS_SIZE 2048 +#define OBJSET_OLD_PHYS_SIZE 1024 + +#define OBJSET_BUF_HAS_USERUSED(buf) \ + (arc_buf_size(buf) > OBJSET_OLD_PHYS_SIZE) + +#define OBJSET_FLAG_USERACCOUNTING_COMPLETE (1ULL<<0) +#define OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE (1ULL<<1) + +typedef struct objset_phys { + dnode_phys_t os_meta_dnode; + zil_header_t os_zil_header; + uint64_t os_type; + uint64_t os_flags; + char os_pad[OBJSET_PHYS_SIZE - sizeof (dnode_phys_t)*3 - + sizeof (zil_header_t) - sizeof (uint64_t)*2]; + dnode_phys_t os_userused_dnode; + dnode_phys_t os_groupused_dnode; +} objset_phys_t; + +typedef int (*dmu_objset_upgrade_cb_t)(objset_t *); + +struct objset { + /* Immutable: */ + struct dsl_dataset *os_dsl_dataset; + spa_t *os_spa; + arc_buf_t *os_phys_buf; + objset_phys_t *os_phys; + /* + * The following "special" dnodes have no parent, are exempt + * from dnode_move(), and are not recorded in os_dnodes, but they + * root their descendents in this objset using handles anyway, so + * that all access to dnodes from dbufs consistently uses handles. + */ + dnode_handle_t os_meta_dnode; + dnode_handle_t os_userused_dnode; + dnode_handle_t os_groupused_dnode; + zilog_t *os_zil; + + list_node_t os_evicting_node; + + /* can change, under dsl_dir's locks: */ + uint64_t os_dnodesize; /* default dnode size for new objects */ + enum zio_checksum os_checksum; + enum zio_compress os_compress; + uint8_t os_copies; + enum zio_checksum os_dedup_checksum; + boolean_t os_dedup_verify; + zfs_logbias_op_t os_logbias; + zfs_cache_type_t os_primary_cache; + zfs_cache_type_t os_secondary_cache; + zfs_sync_type_t os_sync; + zfs_redundant_metadata_type_t os_redundant_metadata; + int os_recordsize; + + /* + * Pointer is constant; the blkptr it points to is protected by + * os_dsl_dataset->ds_bp_rwlock + */ + blkptr_t *os_rootbp; + + /* no lock needed: */ + struct dmu_tx *os_synctx; /* XXX sketchy */ + zil_header_t os_zil_header; + multilist_t *os_synced_dnodes; + uint64_t os_flags; + uint64_t os_freed_dnodes; + boolean_t os_rescan_dnodes; + + /* Protected by os_obj_lock */ + kmutex_t os_obj_lock; + uint64_t os_obj_next_chunk; + + /* Per-CPU next object to allocate, protected by atomic ops. */ + uint64_t *os_obj_next_percpu; + int os_obj_next_percpu_len; + + /* Protected by os_lock */ + kmutex_t os_lock; + multilist_t *os_dirty_dnodes[TXG_SIZE]; + list_t os_dnodes; + list_t os_downgraded_dbufs; + + /* Protects changes to DMU_{USER,GROUP}USED_OBJECT */ + kmutex_t os_userused_lock; + + /* stuff we store for the user */ + kmutex_t os_user_ptr_lock; + void *os_user_ptr; + sa_os_t *os_sa; + + /* kernel thread to upgrade this dataset */ + kmutex_t os_upgrade_lock; + taskqid_t os_upgrade_id; + dmu_objset_upgrade_cb_t os_upgrade_cb; + boolean_t os_upgrade_exit; + int os_upgrade_status; +}; + +#define DMU_META_OBJSET 0 +#define DMU_META_DNODE_OBJECT 0 +#define DMU_OBJECT_IS_SPECIAL(obj) ((int64_t)(obj) <= 0) +#define DMU_META_DNODE(os) ((os)->os_meta_dnode.dnh_dnode) +#define DMU_USERUSED_DNODE(os) ((os)->os_userused_dnode.dnh_dnode) +#define DMU_GROUPUSED_DNODE(os) ((os)->os_groupused_dnode.dnh_dnode) + +#define DMU_OS_IS_L2CACHEABLE(os) \ + ((os)->os_secondary_cache == ZFS_CACHE_ALL || \ + (os)->os_secondary_cache == ZFS_CACHE_METADATA) + +/* called from zpl */ +int dmu_objset_hold(const char *name, void *tag, objset_t **osp); +int dmu_objset_own(const char *name, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp); +int dmu_objset_own_obj(struct dsl_pool *dp, uint64_t obj, + dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp); +void dmu_objset_refresh_ownership(objset_t *os, void *tag); +void dmu_objset_rele(objset_t *os, void *tag); +void dmu_objset_disown(objset_t *os, void *tag); +int dmu_objset_from_ds(struct dsl_dataset *ds, objset_t **osp); + +void dmu_objset_stats(objset_t *os, nvlist_t *nv); +void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat); +void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, + uint64_t *usedobjsp, uint64_t *availobjsp); +uint64_t dmu_objset_fsid_guid(objset_t *os); +int dmu_objset_find_dp(struct dsl_pool *dp, uint64_t ddobj, + int func(struct dsl_pool *, struct dsl_dataset *, void *), + void *arg, int flags); +void dmu_objset_evict_dbufs(objset_t *os); +timestruc_t dmu_objset_snap_cmtime(objset_t *os); + +/* called from dsl */ +void dmu_objset_sync(objset_t *os, zio_t *zio, dmu_tx_t *tx); +boolean_t dmu_objset_is_dirty(objset_t *os, uint64_t txg); +objset_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds, + blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx); +int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp, + objset_t **osp); +void dmu_objset_evict(objset_t *os); +void dmu_objset_do_userquota_updates(objset_t *os, dmu_tx_t *tx); +void dmu_objset_userquota_get_ids(dnode_t *dn, boolean_t before, dmu_tx_t *tx); +boolean_t dmu_objset_userused_enabled(objset_t *os); +int dmu_objset_userspace_upgrade(objset_t *os); +boolean_t dmu_objset_userspace_present(objset_t *os); +boolean_t dmu_objset_userobjused_enabled(objset_t *os); +boolean_t dmu_objset_userobjspace_upgradable(objset_t *os); +void dmu_objset_userobjspace_upgrade(objset_t *os); +boolean_t dmu_objset_userobjspace_present(objset_t *os); + +int dmu_fsname(const char *snapname, char *buf); + +void dmu_objset_evict_done(objset_t *os); +void dmu_objset_willuse_space(objset_t *os, int64_t space, dmu_tx_t *tx); + +void dmu_objset_init(void); +void dmu_objset_fini(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DMU_OBJSET_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_send.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_send.h @@ -0,0 +1,80 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + */ + +#ifndef _DMU_SEND_H +#define _DMU_SEND_H + +#include +#include + +struct vnode; +struct dsl_dataset; +struct drr_begin; +struct avl_tree; +struct dmu_replay_record; + +extern const char *recv_clone_name; + +int dmu_send(const char *tosnap, const char *fromsnap, boolean_t embedok, + boolean_t large_block_ok, boolean_t compressok, int outfd, + uint64_t resumeobj, uint64_t resumeoff, struct vnode *vp, offset_t *off); +int dmu_send_estimate(struct dsl_dataset *ds, struct dsl_dataset *fromds, + boolean_t stream_compressed, uint64_t *sizep); +int dmu_send_estimate_from_txg(struct dsl_dataset *ds, uint64_t fromtxg, + boolean_t stream_compressed, uint64_t *sizep); +int dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap, + boolean_t embedok, boolean_t large_block_ok, boolean_t compressok, + int outfd, struct vnode *vp, offset_t *off); + +typedef struct dmu_recv_cookie { + struct dsl_dataset *drc_ds; + struct dmu_replay_record *drc_drr_begin; + struct drr_begin *drc_drrb; + const char *drc_tofs; + const char *drc_tosnap; + boolean_t drc_newfs; + boolean_t drc_byteswap; + boolean_t drc_force; + boolean_t drc_resumable; + boolean_t drc_clone; + struct avl_tree *drc_guid_to_ds_map; + zio_cksum_t drc_cksum; + uint64_t drc_newsnapobj; + void *drc_owner; + cred_t *drc_cred; +} dmu_recv_cookie_t; + +int dmu_recv_begin(char *tofs, char *tosnap, + struct dmu_replay_record *drr_begin, + boolean_t force, boolean_t resumable, char *origin, dmu_recv_cookie_t *drc); +int dmu_recv_stream(dmu_recv_cookie_t *drc, struct vnode *vp, offset_t *voffp, + int cleanup_fd, uint64_t *action_handlep); +int dmu_recv_end(dmu_recv_cookie_t *drc, void *owner); +boolean_t dmu_objset_is_receiving(objset_t *os); + +#endif /* _DMU_SEND_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_traverse.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_traverse.h @@ -0,0 +1,69 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DMU_TRAVERSE_H +#define _SYS_DMU_TRAVERSE_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dnode_phys; +struct dsl_dataset; +struct zilog; +struct arc_buf; + +typedef int (blkptr_cb_t)(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const struct dnode_phys *dnp, void *arg); + +#define TRAVERSE_PRE (1<<0) +#define TRAVERSE_POST (1<<1) +#define TRAVERSE_PREFETCH_METADATA (1<<2) +#define TRAVERSE_PREFETCH_DATA (1<<3) +#define TRAVERSE_PREFETCH (TRAVERSE_PREFETCH_METADATA | TRAVERSE_PREFETCH_DATA) +#define TRAVERSE_HARD (1<<4) + +/* Special traverse error return value to indicate skipping of children */ +#define TRAVERSE_VISIT_NO_CHILDREN -1 + +int traverse_dataset(struct dsl_dataset *ds, + uint64_t txg_start, int flags, blkptr_cb_t func, void *arg); +int traverse_dataset_resume(struct dsl_dataset *ds, uint64_t txg_start, + zbookmark_phys_t *resume, int flags, blkptr_cb_t func, void *arg); +int traverse_dataset_destroyed(spa_t *spa, blkptr_t *blkptr, + uint64_t txg_start, zbookmark_phys_t *resume, int flags, + blkptr_cb_t func, void *arg); +int traverse_pool(spa_t *spa, + uint64_t txg_start, int flags, blkptr_cb_t func, void *arg); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DMU_TRAVERSE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_tx.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_tx.h @@ -0,0 +1,180 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DMU_TX_H +#define _SYS_DMU_TX_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dmu_buf_impl; +struct dmu_tx_hold; +struct dnode_link; +struct dsl_pool; +struct dnode; +struct dsl_dir; + +struct dmu_tx { + /* + * No synchronization is needed because a tx can only be handled + * by one thread. + */ + list_t tx_holds; /* list of dmu_tx_hold_t */ + objset_t *tx_objset; + struct dsl_dir *tx_dir; + struct dsl_pool *tx_pool; + uint64_t tx_txg; + uint64_t tx_lastsnap_txg; + uint64_t tx_lasttried_txg; + txg_handle_t tx_txgh; + void *tx_tempreserve_cookie; + struct dmu_tx_hold *tx_needassign_txh; + + /* list of dmu_tx_callback_t on this dmu_tx */ + list_t tx_callbacks; + + /* placeholder for syncing context, doesn't need specific holds */ + boolean_t tx_anyobj; + + /* has this transaction already been delayed? */ + boolean_t tx_waited; + + /* transaction is marked as being a "net free" of space */ + boolean_t tx_netfree; + + /* time this transaction was created */ + hrtime_t tx_start; + + /* need to wait for sufficient dirty space */ + boolean_t tx_wait_dirty; + + int tx_err; +}; + +enum dmu_tx_hold_type { + THT_NEWOBJECT, + THT_WRITE, + THT_BONUS, + THT_FREE, + THT_ZAP, + THT_SPACE, + THT_SPILL, + THT_NUMTYPES +}; + +typedef struct dmu_tx_hold { + dmu_tx_t *txh_tx; + list_node_t txh_node; + struct dnode *txh_dnode; + refcount_t txh_space_towrite; + refcount_t txh_memory_tohold; + enum dmu_tx_hold_type txh_type; + uint64_t txh_arg1; + uint64_t txh_arg2; +} dmu_tx_hold_t; + +typedef struct dmu_tx_callback { + list_node_t dcb_node; /* linked to tx_callbacks list */ + dmu_tx_callback_func_t *dcb_func; /* caller function pointer */ + void *dcb_data; /* caller private data */ +} dmu_tx_callback_t; + +/* + * Used for dmu tx kstat. + */ +typedef struct dmu_tx_stats { + kstat_named_t dmu_tx_assigned; + kstat_named_t dmu_tx_delay; + kstat_named_t dmu_tx_error; + kstat_named_t dmu_tx_suspended; + kstat_named_t dmu_tx_group; + kstat_named_t dmu_tx_memory_reserve; + kstat_named_t dmu_tx_memory_reclaim; + kstat_named_t dmu_tx_dirty_throttle; + kstat_named_t dmu_tx_dirty_delay; + kstat_named_t dmu_tx_dirty_over_max; + kstat_named_t dmu_tx_quota; +} dmu_tx_stats_t; + +extern dmu_tx_stats_t dmu_tx_stats; + +#define DMU_TX_STAT_INCR(stat, val) \ + atomic_add_64(&dmu_tx_stats.stat.value.ui64, (val)); +#define DMU_TX_STAT_BUMP(stat) \ + DMU_TX_STAT_INCR(stat, 1); + +/* + * These routines are defined in dmu.h, and are called by the user. + */ +dmu_tx_t *dmu_tx_create(objset_t *dd); +int dmu_tx_assign(dmu_tx_t *tx, txg_how_t txg_how); +void dmu_tx_commit(dmu_tx_t *tx); +void dmu_tx_abort(dmu_tx_t *tx); +uint64_t dmu_tx_get_txg(dmu_tx_t *tx); +struct dsl_pool *dmu_tx_pool(dmu_tx_t *tx); +void dmu_tx_wait(dmu_tx_t *tx); + +void dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *dcb_func, + void *dcb_data); +void dmu_tx_do_callbacks(list_t *cb_list, int error); + +/* + * These routines are defined in dmu_spa.h, and are called by the SPA. + */ +extern dmu_tx_t *dmu_tx_create_assigned(struct dsl_pool *dp, uint64_t txg); + +/* + * These routines are only called by the DMU. + */ +dmu_tx_t *dmu_tx_create_dd(dsl_dir_t *dd); +int dmu_tx_is_syncing(dmu_tx_t *tx); +int dmu_tx_private_ok(dmu_tx_t *tx); +void dmu_tx_add_new_object(dmu_tx_t *tx, dnode_t *dn); +void dmu_tx_dirty_buf(dmu_tx_t *tx, struct dmu_buf_impl *db); +void dmu_tx_hold_space(dmu_tx_t *tx, uint64_t space); + +#ifdef ZFS_DEBUG +#define DMU_TX_DIRTY_BUF(tx, db) dmu_tx_dirty_buf(tx, db) +#else +#define DMU_TX_DIRTY_BUF(tx, db) +#endif + +void dmu_tx_init(void); +void dmu_tx_fini(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DMU_TX_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dmu_zfetch.h +++ linux-aws-4.15.0/zfs/include/sys/dmu_zfetch.h @@ -0,0 +1,76 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#ifndef _DMU_ZFETCH_H +#define _DMU_ZFETCH_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern unsigned long zfetch_array_rd_sz; + +struct dnode; /* so we can reference dnode */ + +typedef struct zstream { + uint64_t zs_blkid; /* expect next access at this blkid */ + uint64_t zs_pf_blkid; /* next block to prefetch */ + + /* + * We will next prefetch the L1 indirect block of this level-0 + * block id. + */ + uint64_t zs_ipf_blkid; + + kmutex_t zs_lock; /* protects stream */ + hrtime_t zs_atime; /* time last prefetch issued */ + list_node_t zs_node; /* link for zf_stream */ +} zstream_t; + +typedef struct zfetch { + krwlock_t zf_rwlock; /* protects zfetch structure */ + list_t zf_stream; /* list of zstream_t's */ + struct dnode *zf_dnode; /* dnode that owns this zfetch */ +} zfetch_t; + +void zfetch_init(void); +void zfetch_fini(void); + +void dmu_zfetch_init(zfetch_t *, struct dnode *); +void dmu_zfetch_fini(zfetch_t *); +void dmu_zfetch(zfetch_t *, uint64_t, uint64_t, boolean_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* _DMU_ZFETCH_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dnode.h +++ linux-aws-4.15.0/zfs/include/sys/dnode.h @@ -0,0 +1,538 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_DNODE_H +#define _SYS_DNODE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * dnode_hold() flags. + */ +#define DNODE_MUST_BE_ALLOCATED 1 +#define DNODE_MUST_BE_FREE 2 + +/* + * dnode_next_offset() flags. + */ +#define DNODE_FIND_HOLE 1 +#define DNODE_FIND_BACKWARDS 2 +#define DNODE_FIND_HAVELOCK 4 + +/* + * Fixed constants. + */ +#define DNODE_SHIFT 9 /* 512 bytes */ +#define DN_MIN_INDBLKSHIFT 12 /* 4k */ +/* + * If we ever increase this value beyond 20, we need to revisit all logic that + * does x << level * ebps to handle overflow. With a 1M indirect block size, + * 4 levels of indirect blocks would not be able to guarantee addressing an + * entire object, so 5 levels will be used, but 5 * (20 - 7) = 65. + */ +#define DN_MAX_INDBLKSHIFT 17 /* 128k */ +#define DNODE_BLOCK_SHIFT 14 /* 16k */ +#define DNODE_CORE_SIZE 64 /* 64 bytes for dnode sans blkptrs */ +#define DN_MAX_OBJECT_SHIFT 48 /* 256 trillion (zfs_fid_t limit) */ +#define DN_MAX_OFFSET_SHIFT 64 /* 2^64 bytes in a dnode */ + +/* + * dnode id flags + * + * Note: a file will never ever have its + * ids moved from bonus->spill + * and only in a crypto environment would it be on spill + */ +#define DN_ID_CHKED_BONUS 0x1 +#define DN_ID_CHKED_SPILL 0x2 +#define DN_ID_OLD_EXIST 0x4 +#define DN_ID_NEW_EXIST 0x8 + +/* + * Derived constants. + */ +#define DNODE_MIN_SIZE (1 << DNODE_SHIFT) +#define DNODE_MAX_SIZE (1 << DNODE_BLOCK_SHIFT) +#define DNODE_BLOCK_SIZE (1 << DNODE_BLOCK_SHIFT) +#define DNODE_MIN_SLOTS (DNODE_MIN_SIZE >> DNODE_SHIFT) +#define DNODE_MAX_SLOTS (DNODE_MAX_SIZE >> DNODE_SHIFT) +#define DN_BONUS_SIZE(dnsize) ((dnsize) - DNODE_CORE_SIZE - \ + (1 << SPA_BLKPTRSHIFT)) +#define DN_SLOTS_TO_BONUSLEN(slots) DN_BONUS_SIZE((slots) << DNODE_SHIFT) +#define DN_OLD_MAX_BONUSLEN (DN_BONUS_SIZE(DNODE_MIN_SIZE)) +#define DN_MAX_NBLKPTR ((DNODE_MIN_SIZE - DNODE_CORE_SIZE) >> SPA_BLKPTRSHIFT) +#define DN_MAX_OBJECT (1ULL << DN_MAX_OBJECT_SHIFT) +#define DN_ZERO_BONUSLEN (DN_BONUS_SIZE(DNODE_MAX_SIZE) + 1) +#define DN_KILL_SPILLBLK (1) + +#define DN_SLOT_UNINIT ((void *)NULL) /* Uninitialized */ +#define DN_SLOT_FREE ((void *)1UL) /* Free slot */ +#define DN_SLOT_ALLOCATED ((void *)2UL) /* Allocated slot */ +#define DN_SLOT_INTERIOR ((void *)3UL) /* Interior allocated slot */ +#define DN_SLOT_IS_PTR(dn) ((void *)dn > DN_SLOT_INTERIOR) +#define DN_SLOT_IS_VALID(dn) ((void *)dn != NULL) + +#define DNODES_PER_BLOCK_SHIFT (DNODE_BLOCK_SHIFT - DNODE_SHIFT) +#define DNODES_PER_BLOCK (1ULL << DNODES_PER_BLOCK_SHIFT) + +/* + * This is inaccurate if the indblkshift of the particular object is not the + * max. But it's only used by userland to calculate the zvol reservation. + */ +#define DNODES_PER_LEVEL_SHIFT (DN_MAX_INDBLKSHIFT - SPA_BLKPTRSHIFT) +#define DNODES_PER_LEVEL (1ULL << DNODES_PER_LEVEL_SHIFT) + +#define DN_MAX_LEVELS (DIV_ROUND_UP(DN_MAX_OFFSET_SHIFT - SPA_MINBLOCKSHIFT, \ + DN_MIN_INDBLKSHIFT - SPA_BLKPTRSHIFT) + 1) + +#define DN_BONUS(dnp) ((void*)((dnp)->dn_bonus + \ + (((dnp)->dn_nblkptr - 1) * sizeof (blkptr_t)))) + +#define DN_USED_BYTES(dnp) (((dnp)->dn_flags & DNODE_FLAG_USED_BYTES) ? \ + (dnp)->dn_used : (dnp)->dn_used << SPA_MINBLOCKSHIFT) + +#define EPB(blkshift, typeshift) (1 << (blkshift - typeshift)) + +struct dmu_buf_impl; +struct objset; +struct zio; + +enum dnode_dirtycontext { + DN_UNDIRTIED, + DN_DIRTY_OPEN, + DN_DIRTY_SYNC +}; + +/* Is dn_used in bytes? if not, it's in multiples of SPA_MINBLOCKSIZE */ +#define DNODE_FLAG_USED_BYTES (1 << 0) +#define DNODE_FLAG_USERUSED_ACCOUNTED (1 << 1) + +/* Does dnode have a SA spill blkptr in bonus? */ +#define DNODE_FLAG_SPILL_BLKPTR (1 << 2) + +/* User/Group dnode accounting */ +#define DNODE_FLAG_USEROBJUSED_ACCOUNTED (1 << 3) + +typedef struct dnode_phys { + uint8_t dn_type; /* dmu_object_type_t */ + uint8_t dn_indblkshift; /* ln2(indirect block size) */ + uint8_t dn_nlevels; /* 1=dn_blkptr->data blocks */ + uint8_t dn_nblkptr; /* length of dn_blkptr */ + uint8_t dn_bonustype; /* type of data in bonus buffer */ + uint8_t dn_checksum; /* ZIO_CHECKSUM type */ + uint8_t dn_compress; /* ZIO_COMPRESS type */ + uint8_t dn_flags; /* DNODE_FLAG_* */ + uint16_t dn_datablkszsec; /* data block size in 512b sectors */ + uint16_t dn_bonuslen; /* length of dn_bonus */ + uint8_t dn_extra_slots; /* # of subsequent slots consumed */ + uint8_t dn_pad2[3]; + + /* accounting is protected by dn_dirty_mtx */ + uint64_t dn_maxblkid; /* largest allocated block ID */ + uint64_t dn_used; /* bytes (or sectors) of disk space */ + + uint64_t dn_pad3[4]; + + /* + * The tail region is 448 bytes for a 512 byte dnode, and + * correspondingly larger for larger dnode sizes. The spill + * block pointer, when present, is always at the end of the tail + * region. There are three ways this space may be used, using + * a 512 byte dnode for this diagram: + * + * 0 64 128 192 256 320 384 448 (offset) + * +---------------+---------------+---------------+-------+ + * | dn_blkptr[0] | dn_blkptr[1] | dn_blkptr[2] | / | + * +---------------+---------------+---------------+-------+ + * | dn_blkptr[0] | dn_bonus[0..319] | + * +---------------+-----------------------+---------------+ + * | dn_blkptr[0] | dn_bonus[0..191] | dn_spill | + * +---------------+-----------------------+---------------+ + */ + union { + blkptr_t dn_blkptr[1+DN_OLD_MAX_BONUSLEN/sizeof (blkptr_t)]; + struct { + blkptr_t __dn_ignore1; + uint8_t dn_bonus[DN_OLD_MAX_BONUSLEN]; + }; + struct { + blkptr_t __dn_ignore2; + uint8_t __dn_ignore3[DN_OLD_MAX_BONUSLEN - + sizeof (blkptr_t)]; + blkptr_t dn_spill; + }; + }; +} dnode_phys_t; + +#define DN_SPILL_BLKPTR(dnp) (blkptr_t *)((char *)(dnp) + \ + (((dnp)->dn_extra_slots + 1) << DNODE_SHIFT) - (1 << SPA_BLKPTRSHIFT)) + +struct dnode { + /* + * Protects the structure of the dnode, including the number of levels + * of indirection (dn_nlevels), dn_maxblkid, and dn_next_* + */ + krwlock_t dn_struct_rwlock; + + /* Our link on dn_objset->os_dnodes list; protected by os_lock. */ + list_node_t dn_link; + + /* immutable: */ + struct objset *dn_objset; + uint64_t dn_object; + struct dmu_buf_impl *dn_dbuf; + struct dnode_handle *dn_handle; + dnode_phys_t *dn_phys; /* pointer into dn->dn_dbuf->db.db_data */ + + /* + * Copies of stuff in dn_phys. They're valid in the open + * context (eg. even before the dnode is first synced). + * Where necessary, these are protected by dn_struct_rwlock. + */ + dmu_object_type_t dn_type; /* object type */ + uint16_t dn_bonuslen; /* bonus length */ + uint8_t dn_bonustype; /* bonus type */ + uint8_t dn_nblkptr; /* number of blkptrs (immutable) */ + uint8_t dn_checksum; /* ZIO_CHECKSUM type */ + uint8_t dn_compress; /* ZIO_COMPRESS type */ + uint8_t dn_nlevels; + uint8_t dn_indblkshift; + uint8_t dn_datablkshift; /* zero if blksz not power of 2! */ + uint8_t dn_moved; /* Has this dnode been moved? */ + uint16_t dn_datablkszsec; /* in 512b sectors */ + uint32_t dn_datablksz; /* in bytes */ + uint64_t dn_maxblkid; + uint8_t dn_next_type[TXG_SIZE]; + uint8_t dn_num_slots; /* metadnode slots consumed on disk */ + uint8_t dn_next_nblkptr[TXG_SIZE]; + uint8_t dn_next_nlevels[TXG_SIZE]; + uint8_t dn_next_indblkshift[TXG_SIZE]; + uint8_t dn_next_bonustype[TXG_SIZE]; + uint8_t dn_rm_spillblk[TXG_SIZE]; /* for removing spill blk */ + uint16_t dn_next_bonuslen[TXG_SIZE]; + uint32_t dn_next_blksz[TXG_SIZE]; /* next block size in bytes */ + + /* protected by dn_dbufs_mtx; declared here to fill 32-bit hole */ + uint32_t dn_dbufs_count; /* count of dn_dbufs */ + + /* protected by os_lock: */ + multilist_node_t dn_dirty_link[TXG_SIZE]; /* next on dataset's dirty */ + + /* protected by dn_mtx: */ + kmutex_t dn_mtx; + list_t dn_dirty_records[TXG_SIZE]; + struct range_tree *dn_free_ranges[TXG_SIZE]; + uint64_t dn_allocated_txg; + uint64_t dn_free_txg; + uint64_t dn_assigned_txg; + kcondvar_t dn_notxholds; + enum dnode_dirtycontext dn_dirtyctx; + uint8_t *dn_dirtyctx_firstset; /* dbg: contents meaningless */ + + /* protected by own devices */ + refcount_t dn_tx_holds; + refcount_t dn_holds; + + kmutex_t dn_dbufs_mtx; + /* + * Descendent dbufs, ordered by dbuf_compare. Note that dn_dbufs + * can contain multiple dbufs of the same (level, blkid) when a + * dbuf is marked DB_EVICTING without being removed from + * dn_dbufs. To maintain the avl invariant that there cannot be + * duplicate entries, we order the dbufs by an arbitrary value - + * their address in memory. This means that dn_dbufs cannot be used to + * directly look up a dbuf. Instead, callers must use avl_walk, have + * a reference to the dbuf, or look up a non-existent node with + * db_state = DB_SEARCH (see dbuf_free_range for an example). + */ + avl_tree_t dn_dbufs; + + /* protected by dn_struct_rwlock */ + struct dmu_buf_impl *dn_bonus; /* bonus buffer dbuf */ + + boolean_t dn_have_spill; /* have spill or are spilling */ + + /* parent IO for current sync write */ + zio_t *dn_zio; + + /* used in syncing context */ + uint64_t dn_oldused; /* old phys used bytes */ + uint64_t dn_oldflags; /* old phys dn_flags */ + uint64_t dn_olduid, dn_oldgid; + uint64_t dn_newuid, dn_newgid; + int dn_id_flags; + + /* holds prefetch structure */ + struct zfetch dn_zfetch; +}; + +/* + * Adds a level of indirection between the dbuf and the dnode to avoid + * iterating descendent dbufs in dnode_move(). Handles are not allocated + * individually, but as an array of child dnodes in dnode_hold_impl(). + */ +typedef struct dnode_handle { + /* Protects dnh_dnode from modification by dnode_move(). */ + zrlock_t dnh_zrlock; + dnode_t *dnh_dnode; +} dnode_handle_t; + +typedef struct dnode_children { + dmu_buf_user_t dnc_dbu; /* User evict data */ + size_t dnc_count; /* number of children */ + dnode_handle_t dnc_children[]; /* sized dynamically */ +} dnode_children_t; + +typedef struct free_range { + avl_node_t fr_node; + uint64_t fr_blkid; + uint64_t fr_nblks; +} free_range_t; + +void dnode_special_open(struct objset *dd, dnode_phys_t *dnp, + uint64_t object, dnode_handle_t *dnh); +void dnode_special_close(dnode_handle_t *dnh); + +void dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx); +void dnode_setbonus_type(dnode_t *dn, dmu_object_type_t, dmu_tx_t *tx); +void dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx); + +int dnode_hold(struct objset *dd, uint64_t object, + void *ref, dnode_t **dnp); +int dnode_hold_impl(struct objset *dd, uint64_t object, int flag, int dn_slots, + void *ref, dnode_t **dnp); +boolean_t dnode_add_ref(dnode_t *dn, void *ref); +void dnode_rele(dnode_t *dn, void *ref); +void dnode_rele_and_unlock(dnode_t *dn, void *tag); +void dnode_setdirty(dnode_t *dn, dmu_tx_t *tx); +void dnode_sync(dnode_t *dn, dmu_tx_t *tx); +void dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, + dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx); +void dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, + dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx); +void dnode_free(dnode_t *dn, dmu_tx_t *tx); +void dnode_byteswap(dnode_phys_t *dnp); +void dnode_buf_byteswap(void *buf, size_t size); +void dnode_verify(dnode_t *dn); +int dnode_set_blksz(dnode_t *dn, uint64_t size, int ibs, dmu_tx_t *tx); +void dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx); +void dnode_diduse_space(dnode_t *dn, int64_t space); +void dnode_new_blkid(dnode_t *dn, uint64_t blkid, dmu_tx_t *tx, boolean_t); +uint64_t dnode_block_freed(dnode_t *dn, uint64_t blkid); +void dnode_init(void); +void dnode_fini(void); +int dnode_next_offset(dnode_t *dn, int flags, uint64_t *off, + int minlvl, uint64_t blkfill, uint64_t txg); +void dnode_evict_dbufs(dnode_t *dn); +void dnode_evict_bonus(dnode_t *dn); + +#define DNODE_IS_CACHEABLE(_dn) \ + ((_dn)->dn_objset->os_primary_cache == ZFS_CACHE_ALL || \ + (DMU_OT_IS_METADATA((_dn)->dn_type) && \ + (_dn)->dn_objset->os_primary_cache == ZFS_CACHE_METADATA)) + +#define DNODE_META_IS_CACHEABLE(_dn) \ + ((_dn)->dn_objset->os_primary_cache == ZFS_CACHE_ALL || \ + (_dn)->dn_objset->os_primary_cache == ZFS_CACHE_METADATA) + +/* + * Used for dnodestats kstat. + */ +typedef struct dnode_stats { + /* + * Number of failed attempts to hold a meta dnode dbuf. + */ + kstat_named_t dnode_hold_dbuf_hold; + /* + * Number of failed attempts to read a meta dnode dbuf. + */ + kstat_named_t dnode_hold_dbuf_read; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was able + * to hold the requested object number which was allocated. This is + * the common case when looking up any allocated object number. + */ + kstat_named_t dnode_hold_alloc_hits; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was not + * able to hold the request object number because it was not allocated. + */ + kstat_named_t dnode_hold_alloc_misses; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) was not + * able to hold the request object number because the object number + * refers to an interior large dnode slot. + */ + kstat_named_t dnode_hold_alloc_interior; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) needed + * to retry acquiring slot zrl locks due to contention. + */ + kstat_named_t dnode_hold_alloc_lock_retry; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) did not + * need to create the dnode because another thread did so after + * dropping the read lock but before acquiring the write lock. + */ + kstat_named_t dnode_hold_alloc_lock_misses; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_ALLOCATED) found + * a free dnode instantiated by dnode_create() but not yet allocated + * by dnode_allocate(). + */ + kstat_named_t dnode_hold_alloc_type_none; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was able + * to hold the requested range of free dnode slots. + */ + kstat_named_t dnode_hold_free_hits; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was not + * able to hold the requested range of free dnode slots because + * at least one slot was allocated. + */ + kstat_named_t dnode_hold_free_misses; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) was not + * able to hold the requested range of free dnode slots because + * after acquiring the zrl lock at least one slot was allocated. + */ + kstat_named_t dnode_hold_free_lock_misses; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) needed + * to retry acquiring slot zrl locks due to contention. + */ + kstat_named_t dnode_hold_free_lock_retry; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) requested + * a range of dnode slots which were held by another thread. + */ + kstat_named_t dnode_hold_free_refcount; + /* + * Number of times dnode_hold(..., DNODE_MUST_BE_FREE) requested + * a range of dnode slots which would overflow the dnode_phys_t. + */ + kstat_named_t dnode_hold_free_overflow; + /* + * Number of times a dnode_hold(...) was attempted on a dnode + * which had already been unlinked in an earlier txg. + */ + kstat_named_t dnode_hold_free_txg; + /* + * Number of new dnodes allocated by dnode_allocate(). + */ + kstat_named_t dnode_allocate; + /* + * Number of dnodes re-allocated by dnode_reallocate(). + */ + kstat_named_t dnode_reallocate; + /* + * Number of meta dnode dbufs evicted. + */ + kstat_named_t dnode_buf_evict; + /* + * Number of times dmu_object_alloc*() reached the end of the existing + * object ID chunk and advanced to a new one. + */ + kstat_named_t dnode_alloc_next_chunk; + /* + * Number of times multiple threads attempted to allocate a dnode + * from the same block of free dnodes. + */ + kstat_named_t dnode_alloc_race; + /* + * Number of times dmu_object_alloc*() was forced to advance to the + * next meta dnode dbuf due to an error from dmu_object_next(). + */ + kstat_named_t dnode_alloc_next_block; + /* + * Statistics for tracking dnodes which have been moved. + */ + kstat_named_t dnode_move_invalid; + kstat_named_t dnode_move_recheck1; + kstat_named_t dnode_move_recheck2; + kstat_named_t dnode_move_special; + kstat_named_t dnode_move_handle; + kstat_named_t dnode_move_rwlock; + kstat_named_t dnode_move_active; +} dnode_stats_t; + +extern dnode_stats_t dnode_stats; + +#define DNODE_STAT_INCR(stat, val) \ + atomic_add_64(&dnode_stats.stat.value.ui64, (val)); +#define DNODE_STAT_BUMP(stat) \ + DNODE_STAT_INCR(stat, 1); + +#ifdef ZFS_DEBUG + +/* + * There should be a ## between the string literal and fmt, to make it + * clear that we're joining two strings together, but that piece of shit + * gcc doesn't support that preprocessor token. + */ +#define dprintf_dnode(dn, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char __db_buf[32]; \ + uint64_t __db_obj = (dn)->dn_object; \ + if (__db_obj == DMU_META_DNODE_OBJECT) \ + (void) strcpy(__db_buf, "mdn"); \ + else \ + (void) snprintf(__db_buf, sizeof (__db_buf), "%lld", \ + (u_longlong_t)__db_obj);\ + dprintf_ds((dn)->dn_objset->os_dsl_dataset, "obj=%s " fmt, \ + __db_buf, __VA_ARGS__); \ + } \ +_NOTE(CONSTCOND) } while (0) + +#define DNODE_VERIFY(dn) dnode_verify(dn) +#define FREE_VERIFY(db, start, end, tx) free_verify(db, start, end, tx) + +#else + +#define dprintf_dnode(db, fmt, ...) +#define DNODE_VERIFY(dn) +#define FREE_VERIFY(db, start, end, tx) + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DNODE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_bookmark.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_bookmark.h @@ -0,0 +1,51 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DSL_BOOKMARK_H +#define _SYS_DSL_BOOKMARK_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_pool; +struct dsl_dataset; + +/* + * On disk zap object. + */ +typedef struct zfs_bookmark_phys { + uint64_t zbm_guid; /* guid of bookmarked dataset */ + uint64_t zbm_creation_txg; /* birth transaction group */ + uint64_t zbm_creation_time; /* bookmark creation time */ +} zfs_bookmark_phys_t; + +int dsl_bookmark_create(nvlist_t *, nvlist_t *); +int dsl_get_bookmarks(const char *, nvlist_t *, nvlist_t *); +int dsl_get_bookmarks_impl(dsl_dataset_t *, nvlist_t *, nvlist_t *); +int dsl_bookmark_destroy(nvlist_t *, nvlist_t *); +int dsl_bookmark_lookup(struct dsl_pool *, const char *, + struct dsl_dataset *, zfs_bookmark_phys_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_BOOKMARK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_dataset.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_dataset.h @@ -0,0 +1,366 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_DSL_DATASET_H +#define _SYS_DSL_DATASET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_dataset; +struct dsl_dir; +struct dsl_pool; + +#define DS_FLAG_INCONSISTENT (1ULL<<0) +#define DS_IS_INCONSISTENT(ds) \ + (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_INCONSISTENT) + +/* + * Do not allow this dataset to be promoted. + */ +#define DS_FLAG_NOPROMOTE (1ULL<<1) + +/* + * DS_FLAG_UNIQUE_ACCURATE is set if ds_unique_bytes has been correctly + * calculated for head datasets (starting with SPA_VERSION_UNIQUE_ACCURATE, + * refquota/refreservations). + */ +#define DS_FLAG_UNIQUE_ACCURATE (1ULL<<2) + +/* + * DS_FLAG_DEFER_DESTROY is set after 'zfs destroy -d' has been called + * on a dataset. This allows the dataset to be destroyed using 'zfs release'. + */ +#define DS_FLAG_DEFER_DESTROY (1ULL<<3) +#define DS_IS_DEFER_DESTROY(ds) \ + (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_DEFER_DESTROY) + +/* + * DS_FIELD_* are strings that are used in the "extensified" dataset zap object. + * They should be of the format :. + */ + +/* + * This field's value is the object ID of a zap object which contains the + * bookmarks of this dataset. If it is present, then this dataset is counted + * in the refcount of the SPA_FEATURES_BOOKMARKS feature. + */ +#define DS_FIELD_BOOKMARK_NAMES "com.delphix:bookmarks" + +/* + * This field is present (with value=0) if this dataset may contain large + * dnodes (>512B). If it is present, then this dataset is counted in the + * refcount of the SPA_FEATURE_LARGE_DNODE feature. + */ +#define DS_FIELD_LARGE_DNODE "org.zfsonlinux:large_dnode" + +/* + * These fields are set on datasets that are in the middle of a resumable + * receive, and allow the sender to resume the send if it is interrupted. + */ +#define DS_FIELD_RESUME_FROMGUID "com.delphix:resume_fromguid" +#define DS_FIELD_RESUME_TONAME "com.delphix:resume_toname" +#define DS_FIELD_RESUME_TOGUID "com.delphix:resume_toguid" +#define DS_FIELD_RESUME_OBJECT "com.delphix:resume_object" +#define DS_FIELD_RESUME_OFFSET "com.delphix:resume_offset" +#define DS_FIELD_RESUME_BYTES "com.delphix:resume_bytes" +#define DS_FIELD_RESUME_LARGEBLOCK "com.delphix:resume_largeblockok" +#define DS_FIELD_RESUME_EMBEDOK "com.delphix:resume_embedok" +#define DS_FIELD_RESUME_COMPRESSOK "com.delphix:resume_compressok" + +/* + * DS_FLAG_CI_DATASET is set if the dataset contains a file system whose + * name lookups should be performed case-insensitively. + */ +#define DS_FLAG_CI_DATASET (1ULL<<16) + +#define DS_CREATE_FLAG_NODIRTY (1ULL<<24) + +typedef struct dsl_dataset_phys { + uint64_t ds_dir_obj; /* DMU_OT_DSL_DIR */ + uint64_t ds_prev_snap_obj; /* DMU_OT_DSL_DATASET */ + uint64_t ds_prev_snap_txg; + uint64_t ds_next_snap_obj; /* DMU_OT_DSL_DATASET */ + uint64_t ds_snapnames_zapobj; /* DMU_OT_DSL_DS_SNAP_MAP 0 for snaps */ + uint64_t ds_num_children; /* clone/snap children; ==0 for head */ + uint64_t ds_creation_time; /* seconds since 1970 */ + uint64_t ds_creation_txg; + uint64_t ds_deadlist_obj; /* DMU_OT_DEADLIST */ + /* + * ds_referenced_bytes, ds_compressed_bytes, and ds_uncompressed_bytes + * include all blocks referenced by this dataset, including those + * shared with any other datasets. + */ + uint64_t ds_referenced_bytes; + uint64_t ds_compressed_bytes; + uint64_t ds_uncompressed_bytes; + uint64_t ds_unique_bytes; /* only relevant to snapshots */ + /* + * The ds_fsid_guid is a 56-bit ID that can change to avoid + * collisions. The ds_guid is a 64-bit ID that will never + * change, so there is a small probability that it will collide. + */ + uint64_t ds_fsid_guid; + uint64_t ds_guid; + uint64_t ds_flags; /* DS_FLAG_* */ + blkptr_t ds_bp; + uint64_t ds_next_clones_obj; /* DMU_OT_DSL_CLONES */ + uint64_t ds_props_obj; /* DMU_OT_DSL_PROPS for snaps */ + uint64_t ds_userrefs_obj; /* DMU_OT_USERREFS */ + uint64_t ds_pad[5]; /* pad out to 320 bytes for good measure */ +} dsl_dataset_phys_t; + +typedef struct dsl_dataset { + dmu_buf_user_t ds_dbu; + rrwlock_t ds_bp_rwlock; /* Protects ds_phys->ds_bp */ + + /* Immutable: */ + struct dsl_dir *ds_dir; + dmu_buf_t *ds_dbuf; + uint64_t ds_object; + uint64_t ds_fsid_guid; + boolean_t ds_is_snapshot; + + /* only used in syncing context, only valid for non-snapshots: */ + struct dsl_dataset *ds_prev; + uint64_t ds_bookmarks; /* DMU_OTN_ZAP_METADATA */ + + /* has internal locking: */ + dsl_deadlist_t ds_deadlist; + bplist_t ds_pending_deadlist; + + /* protected by lock on pool's dp_dirty_datasets list */ + txg_node_t ds_dirty_link; + list_node_t ds_synced_link; + + /* + * ds_phys->ds_ is also protected by ds_lock. + * Protected by ds_lock: + */ + kmutex_t ds_lock; + objset_t *ds_objset; + uint64_t ds_userrefs; + void *ds_owner; + + /* + * Long holds prevent the ds from being destroyed; they allow the + * ds to remain held even after dropping the dp_config_rwlock. + * Owning counts as a long hold. See the comments above + * dsl_pool_hold() for details. + */ + refcount_t ds_longholds; + + /* no locking; only for making guesses */ + uint64_t ds_trysnap_txg; + + /* for objset_open() */ + kmutex_t ds_opening_lock; + + uint64_t ds_reserved; /* cached refreservation */ + uint64_t ds_quota; /* cached refquota */ + + kmutex_t ds_sendstream_lock; + list_t ds_sendstreams; + + /* + * When in the middle of a resumable receive, tracks how much + * progress we have made. + */ + uint64_t ds_resume_object[TXG_SIZE]; + uint64_t ds_resume_offset[TXG_SIZE]; + uint64_t ds_resume_bytes[TXG_SIZE]; + + /* Protected by our dsl_dir's dd_lock */ + list_t ds_prop_cbs; + + /* + * For ZFEATURE_FLAG_PER_DATASET features, set if this dataset + * uses this feature. + */ + uint8_t ds_feature_inuse[SPA_FEATURES]; + + /* + * Set if we need to activate the feature on this dataset this txg + * (used only in syncing context). + */ + uint8_t ds_feature_activation_needed[SPA_FEATURES]; + + /* Protected by ds_lock; keep at end of struct for better locality */ + char ds_snapname[ZFS_MAX_DATASET_NAME_LEN]; +} dsl_dataset_t; + +static inline dsl_dataset_phys_t * +dsl_dataset_phys(dsl_dataset_t *ds) +{ + return (ds->ds_dbuf->db_data); +} + +/* + * The max length of a temporary tag prefix is the number of hex digits + * required to express UINT64_MAX plus one for the hyphen. + */ +#define MAX_TAG_PREFIX_LEN 17 + +#define dsl_dataset_is_snapshot(ds) \ + (dsl_dataset_phys(ds)->ds_num_children != 0) + +#define DS_UNIQUE_IS_ACCURATE(ds) \ + ((dsl_dataset_phys(ds)->ds_flags & DS_FLAG_UNIQUE_ACCURATE) != 0) + +int dsl_dataset_hold(struct dsl_pool *dp, const char *name, void *tag, + dsl_dataset_t **dsp); +boolean_t dsl_dataset_try_add_ref(struct dsl_pool *dp, dsl_dataset_t *ds, + void *tag); +int dsl_dataset_hold_obj(struct dsl_pool *dp, uint64_t dsobj, void *tag, + dsl_dataset_t **); +void dsl_dataset_rele(dsl_dataset_t *ds, void *tag); +int dsl_dataset_own(struct dsl_pool *dp, const char *name, + void *tag, dsl_dataset_t **dsp); +int dsl_dataset_own_obj(struct dsl_pool *dp, uint64_t dsobj, + void *tag, dsl_dataset_t **dsp); +void dsl_dataset_disown(dsl_dataset_t *ds, void *tag); +void dsl_dataset_name(dsl_dataset_t *ds, char *name); +boolean_t dsl_dataset_tryown(dsl_dataset_t *ds, void *tag); +int dsl_dataset_namelen(dsl_dataset_t *ds); +boolean_t dsl_dataset_has_owner(dsl_dataset_t *ds); +uint64_t dsl_dataset_create_sync(dsl_dir_t *pds, const char *lastname, + dsl_dataset_t *origin, uint64_t flags, cred_t *, dmu_tx_t *); +uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin, + uint64_t flags, dmu_tx_t *tx); +int dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors); +int dsl_dataset_promote(const char *name, char *conflsnap); +int dsl_dataset_rename_snapshot(const char *fsname, + const char *oldsnapname, const char *newsnapname, boolean_t recursive); +int dsl_dataset_snapshot_tmp(const char *fsname, const char *snapname, + minor_t cleanup_minor, const char *htag); + +blkptr_t *dsl_dataset_get_blkptr(dsl_dataset_t *ds); + +spa_t *dsl_dataset_get_spa(dsl_dataset_t *ds); + +boolean_t dsl_dataset_modified_since_snap(dsl_dataset_t *ds, + dsl_dataset_t *snap); + +void dsl_dataset_sync(dsl_dataset_t *ds, zio_t *zio, dmu_tx_t *tx); +void dsl_dataset_sync_done(dsl_dataset_t *ds, dmu_tx_t *tx); + +void dsl_dataset_block_born(dsl_dataset_t *ds, const blkptr_t *bp, + dmu_tx_t *tx); +int dsl_dataset_block_kill(dsl_dataset_t *ds, const blkptr_t *bp, + dmu_tx_t *tx, boolean_t async); +int dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name, + uint64_t *value); + +void dsl_dataset_dirty(dsl_dataset_t *ds, dmu_tx_t *tx); +void dsl_dataset_stats(dsl_dataset_t *ds, nvlist_t *nv); +void dsl_dataset_fast_stat(dsl_dataset_t *ds, dmu_objset_stats_t *stat); +void dsl_dataset_space(dsl_dataset_t *ds, + uint64_t *refdbytesp, uint64_t *availbytesp, + uint64_t *usedobjsp, uint64_t *availobjsp); +uint64_t dsl_dataset_fsid_guid(dsl_dataset_t *ds); +int dsl_dataset_space_written(dsl_dataset_t *oldsnap, dsl_dataset_t *new, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +int dsl_dataset_space_wouldfree(dsl_dataset_t *firstsnap, dsl_dataset_t *last, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +boolean_t dsl_dataset_is_dirty(dsl_dataset_t *ds); + +int dsl_dsobj_to_dsname(char *pname, uint64_t obj, char *buf); + +int dsl_dataset_check_quota(dsl_dataset_t *ds, boolean_t check_quota, + uint64_t asize, uint64_t inflight, uint64_t *used, + uint64_t *ref_rsrv); +int dsl_dataset_set_refquota(const char *dsname, zprop_source_t source, + uint64_t quota); +int dsl_dataset_set_refreservation(const char *dsname, zprop_source_t source, + uint64_t reservation); + +boolean_t dsl_dataset_is_before(dsl_dataset_t *later, dsl_dataset_t *earlier, + uint64_t earlier_txg); +void dsl_dataset_long_hold(dsl_dataset_t *ds, void *tag); +void dsl_dataset_long_rele(dsl_dataset_t *ds, void *tag); +boolean_t dsl_dataset_long_held(dsl_dataset_t *ds); + +int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx); +void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone, + dsl_dataset_t *origin_head, dmu_tx_t *tx); +int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname, + dmu_tx_t *tx, boolean_t recv, uint64_t cnt, cred_t *cr); +void dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname, + dmu_tx_t *tx); + +void dsl_dataset_remove_from_next_clones(dsl_dataset_t *ds, uint64_t obj, + dmu_tx_t *tx); +void dsl_dataset_recalc_head_uniq(dsl_dataset_t *ds); +int dsl_dataset_get_snapname(dsl_dataset_t *ds); +int dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name, + uint64_t *value); +int dsl_dataset_snap_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx, + boolean_t adj_cnt); +void dsl_dataset_set_refreservation_sync_impl(dsl_dataset_t *ds, + zprop_source_t source, uint64_t value, dmu_tx_t *tx); +void dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx); +boolean_t dsl_dataset_is_zapified(dsl_dataset_t *ds); +boolean_t dsl_dataset_has_resume_receive_state(dsl_dataset_t *ds); +int dsl_dataset_rollback(const char *fsname, const char *tosnap, void *owner, + nvlist_t *result); + +void dsl_dataset_deactivate_feature(uint64_t dsobj, + spa_feature_t f, dmu_tx_t *tx); + +#ifdef ZFS_DEBUG +#define dprintf_ds(ds, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char *__ds_name = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); \ + dsl_dataset_name(ds, __ds_name); \ + dprintf("ds=%s " fmt, __ds_name, __VA_ARGS__); \ + kmem_free(__ds_name, ZFS_MAX_DATASET_NAME_LEN); \ + } \ +_NOTE(CONSTCOND) } while (0) +#else +#define dprintf_ds(dd, fmt, ...) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_DATASET_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_deadlist.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_deadlist.h @@ -0,0 +1,87 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_DSL_DEADLIST_H +#define _SYS_DSL_DEADLIST_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dmu_buf; +struct dsl_dataset; + +typedef struct dsl_deadlist_phys { + uint64_t dl_used; + uint64_t dl_comp; + uint64_t dl_uncomp; + uint64_t dl_pad[37]; /* pad out to 320b for future expansion */ +} dsl_deadlist_phys_t; + +typedef struct dsl_deadlist { + objset_t *dl_os; + uint64_t dl_object; + avl_tree_t dl_tree; + boolean_t dl_havetree; + struct dmu_buf *dl_dbuf; + dsl_deadlist_phys_t *dl_phys; + kmutex_t dl_lock; + + /* if it's the old on-disk format: */ + bpobj_t dl_bpobj; + boolean_t dl_oldfmt; +} dsl_deadlist_t; + +typedef struct dsl_deadlist_entry { + avl_node_t dle_node; + uint64_t dle_mintxg; + bpobj_t dle_bpobj; +} dsl_deadlist_entry_t; + +void dsl_deadlist_open(dsl_deadlist_t *dl, objset_t *os, uint64_t object); +void dsl_deadlist_close(dsl_deadlist_t *dl); +uint64_t dsl_deadlist_alloc(objset_t *os, dmu_tx_t *tx); +void dsl_deadlist_free(objset_t *os, uint64_t dlobj, dmu_tx_t *tx); +void dsl_deadlist_insert(dsl_deadlist_t *dl, const blkptr_t *bp, dmu_tx_t *tx); +void dsl_deadlist_add_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx); +void dsl_deadlist_remove_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx); +uint64_t dsl_deadlist_clone(dsl_deadlist_t *dl, uint64_t maxtxg, + uint64_t mrs_obj, dmu_tx_t *tx); +void dsl_deadlist_space(dsl_deadlist_t *dl, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +void dsl_deadlist_space_range(dsl_deadlist_t *dl, + uint64_t mintxg, uint64_t maxtxg, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +void dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx); +void dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg, + dmu_tx_t *tx); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_DEADLIST_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_deleg.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_deleg.h @@ -0,0 +1,84 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DSL_DELEG_H +#define _SYS_DSL_DELEG_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZFS_DELEG_PERM_NONE "" +#define ZFS_DELEG_PERM_CREATE "create" +#define ZFS_DELEG_PERM_DESTROY "destroy" +#define ZFS_DELEG_PERM_SNAPSHOT "snapshot" +#define ZFS_DELEG_PERM_ROLLBACK "rollback" +#define ZFS_DELEG_PERM_CLONE "clone" +#define ZFS_DELEG_PERM_PROMOTE "promote" +#define ZFS_DELEG_PERM_RENAME "rename" +#define ZFS_DELEG_PERM_MOUNT "mount" +#define ZFS_DELEG_PERM_SHARE "share" +#define ZFS_DELEG_PERM_SEND "send" +#define ZFS_DELEG_PERM_RECEIVE "receive" +#define ZFS_DELEG_PERM_ALLOW "allow" +#define ZFS_DELEG_PERM_USERPROP "userprop" +#define ZFS_DELEG_PERM_VSCAN "vscan" +#define ZFS_DELEG_PERM_USERQUOTA "userquota" +#define ZFS_DELEG_PERM_GROUPQUOTA "groupquota" +#define ZFS_DELEG_PERM_USEROBJQUOTA "userobjquota" +#define ZFS_DELEG_PERM_GROUPOBJQUOTA "groupobjquota" +#define ZFS_DELEG_PERM_USERUSED "userused" +#define ZFS_DELEG_PERM_GROUPUSED "groupused" +#define ZFS_DELEG_PERM_USEROBJUSED "userobjused" +#define ZFS_DELEG_PERM_GROUPOBJUSED "groupobjused" +#define ZFS_DELEG_PERM_HOLD "hold" +#define ZFS_DELEG_PERM_RELEASE "release" +#define ZFS_DELEG_PERM_DIFF "diff" +#define ZFS_DELEG_PERM_BOOKMARK "bookmark" + +/* + * Note: the names of properties that are marked delegatable are also + * valid delegated permissions + */ + +int dsl_deleg_get(const char *ddname, nvlist_t **nvp); +int dsl_deleg_set(const char *ddname, nvlist_t *nvp, boolean_t unset); +int dsl_deleg_access(const char *ddname, const char *perm, cred_t *cr); +int dsl_deleg_access_impl(struct dsl_dataset *ds, const char *perm, cred_t *cr); +void dsl_deleg_set_create_perms(dsl_dir_t *dd, dmu_tx_t *tx, cred_t *cr); +int dsl_deleg_can_allow(char *ddname, nvlist_t *nvp, cred_t *cr); +int dsl_deleg_can_unallow(char *ddname, nvlist_t *nvp, cred_t *cr); +int dsl_deleg_destroy(objset_t *os, uint64_t zapobj, dmu_tx_t *tx); +boolean_t dsl_delegation_on(objset_t *os); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_DELEG_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_destroy.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_destroy.h @@ -0,0 +1,53 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_DSL_DESTROY_H +#define _SYS_DSL_DESTROY_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct nvlist; +struct dsl_dataset; +struct dmu_tx; + +int dsl_destroy_snapshots_nvl(struct nvlist *, boolean_t, + struct nvlist *); +int dsl_destroy_snapshot(const char *, boolean_t); +int dsl_destroy_head(const char *); +int dsl_destroy_head_check_impl(struct dsl_dataset *, int); +void dsl_destroy_head_sync_impl(struct dsl_dataset *, struct dmu_tx *); +int dsl_destroy_inconsistent(const char *, void *); +int dsl_destroy_snapshot_check_impl(struct dsl_dataset *, boolean_t); +void dsl_destroy_snapshot_sync_impl(struct dsl_dataset *, + boolean_t, struct dmu_tx *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_DESTROY_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_dir.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_dir.h @@ -0,0 +1,192 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2014, Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_DSL_DIR_H +#define _SYS_DSL_DIR_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_dataset; + +/* + * DD_FIELD_* are strings that are used in the "extensified" dsl_dir zap object. + * They should be of the format :. + */ + +#define DD_FIELD_FILESYSTEM_COUNT "com.joyent:filesystem_count" +#define DD_FIELD_SNAPSHOT_COUNT "com.joyent:snapshot_count" + +typedef enum dd_used { + DD_USED_HEAD, + DD_USED_SNAP, + DD_USED_CHILD, + DD_USED_CHILD_RSRV, + DD_USED_REFRSRV, + DD_USED_NUM +} dd_used_t; + +#define DD_FLAG_USED_BREAKDOWN (1<<0) + +typedef struct dsl_dir_phys { + uint64_t dd_creation_time; /* not actually used */ + uint64_t dd_head_dataset_obj; + uint64_t dd_parent_obj; + uint64_t dd_origin_obj; + uint64_t dd_child_dir_zapobj; + /* + * how much space our children are accounting for; for leaf + * datasets, == physical space used by fs + snaps + */ + uint64_t dd_used_bytes; + uint64_t dd_compressed_bytes; + uint64_t dd_uncompressed_bytes; + /* Administrative quota setting */ + uint64_t dd_quota; + /* Administrative reservation setting */ + uint64_t dd_reserved; + uint64_t dd_props_zapobj; + uint64_t dd_deleg_zapobj; /* dataset delegation permissions */ + uint64_t dd_flags; + uint64_t dd_used_breakdown[DD_USED_NUM]; + uint64_t dd_clones; /* dsl_dir objects */ + uint64_t dd_pad[13]; /* pad out to 256 bytes for good measure */ +} dsl_dir_phys_t; + +struct dsl_dir { + dmu_buf_user_t dd_dbu; + + /* These are immutable; no lock needed: */ + uint64_t dd_object; + dsl_pool_t *dd_pool; + + /* Stable until user eviction; no lock needed: */ + dmu_buf_t *dd_dbuf; + + /* protected by lock on pool's dp_dirty_dirs list */ + txg_node_t dd_dirty_link; + + /* protected by dp_config_rwlock */ + dsl_dir_t *dd_parent; + + /* Protected by dd_lock */ + kmutex_t dd_lock; + list_t dd_props; /* list of dsl_prop_record_t's */ + timestruc_t dd_snap_cmtime; /* last time snapshot namespace changed */ + uint64_t dd_origin_txg; + + /* gross estimate of space used by in-flight tx's */ + uint64_t dd_tempreserved[TXG_SIZE]; + /* amount of space we expect to write; == amount of dirty data */ + int64_t dd_space_towrite[TXG_SIZE]; + + /* protected by dd_lock; keep at end of struct for better locality */ + char dd_myname[ZFS_MAX_DATASET_NAME_LEN]; +}; + +static inline dsl_dir_phys_t * +dsl_dir_phys(dsl_dir_t *dd) +{ + return (dd->dd_dbuf->db_data); +} + +void dsl_dir_rele(dsl_dir_t *dd, void *tag); +void dsl_dir_async_rele(dsl_dir_t *dd, void *tag); +int dsl_dir_hold(dsl_pool_t *dp, const char *name, void *tag, + dsl_dir_t **, const char **tail); +int dsl_dir_hold_obj(dsl_pool_t *dp, uint64_t ddobj, + const char *tail, void *tag, dsl_dir_t **); +void dsl_dir_name(dsl_dir_t *dd, char *buf); +int dsl_dir_namelen(dsl_dir_t *dd); +uint64_t dsl_dir_create_sync(dsl_pool_t *dp, dsl_dir_t *pds, + const char *name, dmu_tx_t *tx); +void dsl_dir_stats(dsl_dir_t *dd, nvlist_t *nv); +uint64_t dsl_dir_space_available(dsl_dir_t *dd, + dsl_dir_t *ancestor, int64_t delta, int ondiskonly); +void dsl_dir_dirty(dsl_dir_t *dd, dmu_tx_t *tx); +void dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx); +int dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t mem, + uint64_t asize, boolean_t netfree, void **tr_cookiep, dmu_tx_t *tx); +void dsl_dir_tempreserve_clear(void *tr_cookie, dmu_tx_t *tx); +void dsl_dir_willuse_space(dsl_dir_t *dd, int64_t space, dmu_tx_t *tx); +void dsl_dir_diduse_space(dsl_dir_t *dd, dd_used_t type, + int64_t used, int64_t compressed, int64_t uncompressed, dmu_tx_t *tx); +void dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta, + dd_used_t oldtype, dd_used_t newtype, dmu_tx_t *tx); +int dsl_dir_set_quota(const char *ddname, zprop_source_t source, + uint64_t quota); +int dsl_dir_set_reservation(const char *ddname, zprop_source_t source, + uint64_t reservation); +int dsl_dir_activate_fs_ss_limit(const char *); +int dsl_fs_ss_limit_check(dsl_dir_t *, uint64_t, zfs_prop_t, dsl_dir_t *, + cred_t *); +void dsl_fs_ss_count_adjust(dsl_dir_t *, int64_t, const char *, dmu_tx_t *); +int dsl_dir_rename(const char *oldname, const char *newname); +int dsl_dir_transfer_possible(dsl_dir_t *sdd, dsl_dir_t *tdd, + uint64_t fs_cnt, uint64_t ss_cnt, uint64_t space, cred_t *); +boolean_t dsl_dir_is_clone(dsl_dir_t *dd); +void dsl_dir_new_refreservation(dsl_dir_t *dd, struct dsl_dataset *ds, + uint64_t reservation, cred_t *cr, dmu_tx_t *tx); +void dsl_dir_snap_cmtime_update(dsl_dir_t *dd); +timestruc_t dsl_dir_snap_cmtime(dsl_dir_t *dd); +void dsl_dir_set_reservation_sync_impl(dsl_dir_t *dd, uint64_t value, + dmu_tx_t *tx); +void dsl_dir_zapify(dsl_dir_t *dd, dmu_tx_t *tx); +boolean_t dsl_dir_is_zapified(dsl_dir_t *dd); + +/* internal reserved dir name */ +#define MOS_DIR_NAME "$MOS" +#define ORIGIN_DIR_NAME "$ORIGIN" +#define XLATION_DIR_NAME "$XLATION" +#define FREE_DIR_NAME "$FREE" +#define LEAK_DIR_NAME "$LEAK" + +#ifdef ZFS_DEBUG +#define dprintf_dd(dd, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char *__ds_name = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); \ + dsl_dir_name(dd, __ds_name); \ + dprintf("dd=%s " fmt, __ds_name, __VA_ARGS__); \ + kmem_free(__ds_name, ZFS_MAX_DATASET_NAME_LEN); \ + } \ +_NOTE(CONSTCOND) } while (0) +#else +#define dprintf_dd(dd, fmt, ...) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_DIR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_pool.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_pool.h @@ -0,0 +1,183 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017 by Delphix. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. + */ + +#ifndef _SYS_DSL_POOL_H +#define _SYS_DSL_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int zfs_txg_synctime_ms; + +struct objset; +struct dsl_dir; +struct dsl_dataset; +struct dsl_pool; +struct dmu_tx; +struct dsl_scan; + +extern unsigned long zfs_dirty_data_max; +extern unsigned long zfs_dirty_data_max_max; +extern unsigned long zfs_dirty_data_sync; +extern int zfs_dirty_data_max_percent; +extern int zfs_dirty_data_max_max_percent; +extern int zfs_delay_min_dirty_percent; +extern unsigned long zfs_delay_scale; + +/* These macros are for indexing into the zfs_all_blkstats_t. */ +#define DMU_OT_DEFERRED DMU_OT_NONE +#define DMU_OT_OTHER DMU_OT_NUMTYPES /* place holder for DMU_OT() types */ +#define DMU_OT_TOTAL (DMU_OT_NUMTYPES + 1) + +typedef struct zfs_blkstat { + uint64_t zb_count; + uint64_t zb_asize; + uint64_t zb_lsize; + uint64_t zb_psize; + uint64_t zb_gangs; + uint64_t zb_ditto_2_of_2_samevdev; + uint64_t zb_ditto_2_of_3_samevdev; + uint64_t zb_ditto_3_of_3_samevdev; +} zfs_blkstat_t; + +typedef struct zfs_all_blkstats { + zfs_blkstat_t zab_type[DN_MAX_LEVELS + 1][DMU_OT_TOTAL + 1]; +} zfs_all_blkstats_t; + + +typedef struct dsl_pool { + /* Immutable */ + spa_t *dp_spa; + struct objset *dp_meta_objset; + struct dsl_dir *dp_root_dir; + struct dsl_dir *dp_mos_dir; + struct dsl_dir *dp_free_dir; + struct dsl_dir *dp_leak_dir; + struct dsl_dataset *dp_origin_snap; + uint64_t dp_root_dir_obj; + struct taskq *dp_iput_taskq; + + /* No lock needed - sync context only */ + blkptr_t dp_meta_rootbp; + uint64_t dp_tmp_userrefs_obj; + bpobj_t dp_free_bpobj; + uint64_t dp_bptree_obj; + uint64_t dp_empty_bpobj; + + struct dsl_scan *dp_scan; + + /* Uses dp_lock */ + kmutex_t dp_lock; + kcondvar_t dp_spaceavail_cv; + uint64_t dp_dirty_pertxg[TXG_SIZE]; + uint64_t dp_dirty_total; + uint64_t dp_long_free_dirty_pertxg[TXG_SIZE]; + uint64_t dp_mos_used_delta; + uint64_t dp_mos_compressed_delta; + uint64_t dp_mos_uncompressed_delta; + + /* + * Time of most recently scheduled (furthest in the future) + * wakeup for delayed transactions. + */ + hrtime_t dp_last_wakeup; + + /* Has its own locking */ + tx_state_t dp_tx; + txg_list_t dp_dirty_datasets; + txg_list_t dp_dirty_zilogs; + txg_list_t dp_dirty_dirs; + txg_list_t dp_sync_tasks; + taskq_t *dp_sync_taskq; + + /* + * Protects administrative changes (properties, namespace) + * + * It is only held for write in syncing context. Therefore + * syncing context does not need to ever have it for read, since + * nobody else could possibly have it for write. + */ + rrwlock_t dp_config_rwlock; + + zfs_all_blkstats_t *dp_blkstats; +} dsl_pool_t; + +int dsl_pool_init(spa_t *spa, uint64_t txg, dsl_pool_t **dpp); +int dsl_pool_open(dsl_pool_t *dp); +void dsl_pool_close(dsl_pool_t *dp); +dsl_pool_t *dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg); +void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg); +void dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg); +int dsl_pool_sync_context(dsl_pool_t *dp); +uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree); +uint64_t dsl_pool_adjustedfree(dsl_pool_t *dp, boolean_t netfree); +void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx); +void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg); +void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp); +void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg, + const blkptr_t *bpp); +void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx); +void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx); +void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx); +void dsl_pool_mos_diduse_space(dsl_pool_t *dp, + int64_t used, int64_t comp, int64_t uncomp); +boolean_t dsl_pool_need_dirty_delay(dsl_pool_t *dp); +void dsl_pool_config_enter(dsl_pool_t *dp, void *tag); +void dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag); +void dsl_pool_config_exit(dsl_pool_t *dp, void *tag); +boolean_t dsl_pool_config_held(dsl_pool_t *dp); +boolean_t dsl_pool_config_held_writer(dsl_pool_t *dp); + +taskq_t *dsl_pool_iput_taskq(dsl_pool_t *dp); + +int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj, + const char *tag, uint64_t now, dmu_tx_t *tx); +int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, + const char *tag, dmu_tx_t *tx); +void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp); +int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **); +int dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp); +void dsl_pool_rele(dsl_pool_t *dp, void *tag); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_POOL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_prop.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_prop.h @@ -0,0 +1,117 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DSL_PROP_H +#define _SYS_DSL_PROP_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_dataset; +struct dsl_dir; + +/* The callback func may not call into the DMU or DSL! */ +typedef void (dsl_prop_changed_cb_t)(void *arg, uint64_t newval); + +typedef struct dsl_prop_record { + list_node_t pr_node; /* link on dd_props */ + const char *pr_propname; + list_t pr_cbs; +} dsl_prop_record_t; + +typedef struct dsl_prop_cb_record { + list_node_t cbr_pr_node; /* link on pr_cbs */ + list_node_t cbr_ds_node; /* link on ds_prop_cbs */ + dsl_prop_record_t *cbr_pr; + struct dsl_dataset *cbr_ds; + dsl_prop_changed_cb_t *cbr_func; + void *cbr_arg; +} dsl_prop_cb_record_t; + +typedef struct dsl_props_arg { + nvlist_t *pa_props; + zprop_source_t pa_source; +} dsl_props_arg_t; + +void dsl_prop_init(dsl_dir_t *dd); +void dsl_prop_fini(dsl_dir_t *dd); +int dsl_prop_register(struct dsl_dataset *ds, const char *propname, + dsl_prop_changed_cb_t *callback, void *cbarg); +int dsl_prop_unregister(struct dsl_dataset *ds, const char *propname, + dsl_prop_changed_cb_t *callback, void *cbarg); +void dsl_prop_unregister_all(struct dsl_dataset *ds, void *cbarg); +void dsl_prop_notify_all(struct dsl_dir *dd); +boolean_t dsl_prop_hascb(struct dsl_dataset *ds); + +int dsl_prop_get(const char *ddname, const char *propname, + int intsz, int numints, void *buf, char *setpoint); +int dsl_prop_get_integer(const char *ddname, const char *propname, + uint64_t *valuep, char *setpoint); +int dsl_prop_get_all(objset_t *os, nvlist_t **nvp); +int dsl_prop_get_received(const char *dsname, nvlist_t **nvp); +int dsl_prop_get_ds(struct dsl_dataset *ds, const char *propname, + int intsz, int numints, void *buf, char *setpoint); +int dsl_prop_get_int_ds(struct dsl_dataset *ds, const char *propname, + uint64_t *valuep); +int dsl_prop_get_dd(struct dsl_dir *dd, const char *propname, + int intsz, int numints, void *buf, char *setpoint, + boolean_t snapshot); + +void dsl_props_set_sync_impl(struct dsl_dataset *ds, zprop_source_t source, + nvlist_t *props, dmu_tx_t *tx); +void dsl_prop_set_sync_impl(struct dsl_dataset *ds, const char *propname, + zprop_source_t source, int intsz, int numints, const void *value, + dmu_tx_t *tx); +int dsl_props_set(const char *dsname, zprop_source_t source, nvlist_t *nvl); +int dsl_prop_set_int(const char *dsname, const char *propname, + zprop_source_t source, uint64_t value); +int dsl_prop_set_string(const char *dsname, const char *propname, + zprop_source_t source, const char *value); +int dsl_prop_inherit(const char *dsname, const char *propname, + zprop_source_t source); + +int dsl_prop_predict(dsl_dir_t *dd, const char *propname, + zprop_source_t source, uint64_t value, uint64_t *newvalp); + +/* flag first receive on or after SPA_VERSION_RECVD_PROPS */ +boolean_t dsl_prop_get_hasrecvd(const char *dsname); +int dsl_prop_set_hasrecvd(const char *dsname); +void dsl_prop_unset_hasrecvd(const char *dsname); + +void dsl_prop_nvlist_add_uint64(nvlist_t *nv, zfs_prop_t prop, uint64_t value); +void dsl_prop_nvlist_add_string(nvlist_t *nv, + zfs_prop_t prop, const char *value); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_PROP_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_scan.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_scan.h @@ -0,0 +1,150 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright (c) 2017 Datto Inc. + */ + +#ifndef _SYS_DSL_SCAN_H +#define _SYS_DSL_SCAN_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct objset; +struct dsl_dir; +struct dsl_dataset; +struct dsl_pool; +struct dmu_tx; + +/* + * All members of this structure must be uint64_t, for byteswap + * purposes. + */ +typedef struct dsl_scan_phys { + uint64_t scn_func; /* pool_scan_func_t */ + uint64_t scn_state; /* dsl_scan_state_t */ + uint64_t scn_queue_obj; + uint64_t scn_min_txg; + uint64_t scn_max_txg; + uint64_t scn_cur_min_txg; + uint64_t scn_cur_max_txg; + uint64_t scn_start_time; + uint64_t scn_end_time; + uint64_t scn_to_examine; /* total bytes to be scanned */ + uint64_t scn_examined; /* bytes scanned so far */ + uint64_t scn_to_process; + uint64_t scn_processed; + uint64_t scn_errors; /* scan I/O error count */ + uint64_t scn_ddt_class_max; + ddt_bookmark_t scn_ddt_bookmark; + zbookmark_phys_t scn_bookmark; + uint64_t scn_flags; /* dsl_scan_flags_t */ +} dsl_scan_phys_t; + +#define SCAN_PHYS_NUMINTS (sizeof (dsl_scan_phys_t) / sizeof (uint64_t)) + +typedef enum dsl_scan_flags { + DSF_VISIT_DS_AGAIN = 1<<0, + DSF_SCRUB_PAUSED = 1<<1, +} dsl_scan_flags_t; + +#define DSL_SCAN_FLAGS_MASK (DSF_VISIT_DS_AGAIN) + +/* + * Every pool will have one dsl_scan_t and this structure will contain + * in-memory information about the scan and a pointer to the on-disk + * representation (i.e. dsl_scan_phys_t). Most of the state of the scan + * is contained on-disk to allow the scan to resume in the event of a reboot + * or panic. This structure maintains information about the behavior of a + * running scan, some caching information, and how it should traverse the pool. + * + * The following members of this structure direct the behavior of the scan: + * + * scn_suspending - a scan that cannot be completed in a single txg or + * has exceeded its allotted time will need to suspend. + * When this flag is set the scanner will stop traversing + * the pool and write out the current state to disk. + * + * scn_restart_txg - directs the scanner to either restart or start a + * a scan at the specified txg value. + * + * scn_done_txg - when a scan completes its traversal it will set + * the completion txg to the next txg. This is necessary + * to ensure that any blocks that were freed during + * the scan but have not yet been processed (i.e deferred + * frees) are accounted for. + * + * This structure also maintains information about deferred frees which are + * a special kind of traversal. Deferred free can exist in either a bptree or + * a bpobj structure. The scn_is_bptree flag will indicate the type of + * deferred free that is in progress. If the deferred free is part of an + * asynchronous destroy then the scn_async_destroying flag will be set. + */ +typedef struct dsl_scan { + struct dsl_pool *scn_dp; + + boolean_t scn_suspending; + uint64_t scn_restart_txg; + uint64_t scn_done_txg; + uint64_t scn_sync_start_time; + zio_t *scn_zio_root; + + /* for freeing blocks */ + boolean_t scn_is_bptree; + boolean_t scn_async_destroying; + boolean_t scn_async_stalled; + uint64_t scn_visited_this_txg; + + dsl_scan_phys_t scn_phys; +} dsl_scan_t; + +int dsl_scan_init(struct dsl_pool *dp, uint64_t txg); +void dsl_scan_fini(struct dsl_pool *dp); +void dsl_scan_sync(struct dsl_pool *, dmu_tx_t *); +int dsl_scan_cancel(struct dsl_pool *); +int dsl_scan(struct dsl_pool *, pool_scan_func_t); +boolean_t dsl_scan_scrubbing(const struct dsl_pool *dp); +int dsl_scrub_set_pause_resume(const struct dsl_pool *dp, pool_scrub_cmd_t cmd); +void dsl_resilver_restart(struct dsl_pool *, uint64_t txg); +boolean_t dsl_scan_resilvering(struct dsl_pool *dp); +boolean_t dsl_dataset_unstable(struct dsl_dataset *ds); +void dsl_scan_ddt_entry(dsl_scan_t *scn, enum zio_checksum checksum, + ddt_entry_t *dde, dmu_tx_t *tx); +void dsl_scan_ds_destroyed(struct dsl_dataset *ds, struct dmu_tx *tx); +void dsl_scan_ds_snapshotted(struct dsl_dataset *ds, struct dmu_tx *tx); +void dsl_scan_ds_clone_swapped(struct dsl_dataset *ds1, struct dsl_dataset *ds2, + struct dmu_tx *tx); +boolean_t dsl_scan_active(dsl_scan_t *scn); +boolean_t dsl_scan_is_paused_scrub(const dsl_scan_t *scn); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_SCAN_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_synctask.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_synctask.h @@ -0,0 +1,93 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_DSL_SYNCTASK_H +#define _SYS_DSL_SYNCTASK_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_pool; + +typedef int (dsl_checkfunc_t)(void *, dmu_tx_t *); +typedef void (dsl_syncfunc_t)(void *, dmu_tx_t *); + +typedef enum zfs_space_check { + /* + * Normal space check: if there is less than 3.2% free space, + * the operation will fail. Operations which are logically + * creating things should use this (e.g. "zfs create", "zfs snapshot"). + * User writes (via the ZPL / ZVOL) also fail at this point. + */ + ZFS_SPACE_CHECK_NORMAL, + + /* + * Space check allows use of half the slop space. If there + * is less than 1.6% free space, the operation will fail. Most + * operations should use this (e.g. "zfs set", "zfs rename"), + * because we want them to succeed even after user writes are failing, + * so that they can be used as part of the space recovery process. + */ + ZFS_SPACE_CHECK_RESERVED, + + /* + * No space check is performed. Only operations which we expect to + * result in a net reduction in space should use this + * (e.g. "zfs destroy". Setting quotas & reservations also uses + * this because it needs to circumvent the quota/reservation checks). + * + * See also the comments above spa_slop_shift. + */ + ZFS_SPACE_CHECK_NONE, +} zfs_space_check_t; + +typedef struct dsl_sync_task { + txg_node_t dst_node; + struct dsl_pool *dst_pool; + uint64_t dst_txg; + int dst_space; + zfs_space_check_t dst_space_check; + dsl_checkfunc_t *dst_checkfunc; + dsl_syncfunc_t *dst_syncfunc; + void *dst_arg; + int dst_error; + boolean_t dst_nowaiter; +} dsl_sync_task_t; + +void dsl_sync_task_sync(dsl_sync_task_t *, dmu_tx_t *); +int dsl_sync_task(const char *, dsl_checkfunc_t *, + dsl_syncfunc_t *, void *, int, zfs_space_check_t); +void dsl_sync_task_nowait(struct dsl_pool *, dsl_syncfunc_t *, + void *, int, zfs_space_check_t, dmu_tx_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_SYNCTASK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/dsl_userhold.h +++ linux-aws-4.15.0/zfs/include/sys/dsl_userhold.h @@ -0,0 +1,57 @@ + +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + */ + +#ifndef _SYS_DSL_USERHOLD_H +#define _SYS_DSL_USERHOLD_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_pool; +struct dsl_dataset; +struct dmu_tx; + +int dsl_dataset_user_hold(nvlist_t *holds, minor_t cleanup_minor, + nvlist_t *errlist); +int dsl_dataset_user_release(nvlist_t *holds, nvlist_t *errlist); +int dsl_dataset_get_holds(const char *dsname, nvlist_t *nvl); +void dsl_dataset_user_release_tmp(struct dsl_pool *dp, nvlist_t *holds); +int dsl_dataset_user_hold_check_one(struct dsl_dataset *ds, const char *htag, + boolean_t temphold, struct dmu_tx *tx); +void dsl_dataset_user_hold_sync_one(struct dsl_dataset *ds, const char *htag, + minor_t minor, uint64_t now, struct dmu_tx *tx); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_DSL_USERHOLD_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/edonr.h +++ linux-aws-4.15.0/zfs/include/sys/edonr.h @@ -0,0 +1,98 @@ +/* + * IDI,NTNU + * + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + * + * Copyright (C) 2009, 2010, Jorn Amundsen + * + * Tweaked Edon-R implementation for SUPERCOP, based on NIST API. + * + * $Id: edonr.h 517 2013-02-17 20:34:39Z joern $ + */ +/* + * Portions copyright (c) 2013, Saso Kiselkov, All rights reserved + */ + +#ifndef _SYS_EDONR_H_ +#define _SYS_EDONR_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _KERNEL +#include +#else +#include /* uint32_t... */ +#include /* size_t ... */ +#endif + +/* + * EdonR allows to call EdonRUpdate() consecutively only if the total length + * of stored unprocessed data and the new supplied data is less than or equal + * to the BLOCK_SIZE on which the compression functions operates. + * Otherwise an assertion failure is invoked. + */ + +/* Specific algorithm definitions */ +#define EdonR224_DIGEST_SIZE 28 +#define EdonR224_BLOCK_SIZE 64 +#define EdonR256_DIGEST_SIZE 32 +#define EdonR256_BLOCK_SIZE 64 +#define EdonR384_DIGEST_SIZE 48 +#define EdonR384_BLOCK_SIZE 128 +#define EdonR512_DIGEST_SIZE 64 +#define EdonR512_BLOCK_SIZE 128 + +#define EdonR256_BLOCK_BITSIZE 512 +#define EdonR512_BLOCK_BITSIZE 1024 + +typedef struct { + uint32_t DoublePipe[16]; + uint8_t LastPart[EdonR256_BLOCK_SIZE * 2]; +} EdonRData256; +typedef struct { + uint64_t DoublePipe[16]; + uint8_t LastPart[EdonR512_BLOCK_SIZE * 2]; +} EdonRData512; + +typedef struct { + size_t hashbitlen; + + /* + algorithm specific parameters */ + int unprocessed_bits; + uint64_t bits_processed; + union { + EdonRData256 p256[1]; + EdonRData512 p512[1]; + } pipe[1]; +} EdonRState; + +void EdonRInit(EdonRState *state, size_t hashbitlen); +void EdonRUpdate(EdonRState *state, const uint8_t *data, size_t databitlen); +void EdonRFinal(EdonRState *state, uint8_t *hashval); +void EdonRHash(size_t hashbitlen, const uint8_t *data, size_t databitlen, + uint8_t *hashval); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_EDONR_H_ */ --- linux-aws-4.15.0.orig/zfs/include/sys/efi_partition.h +++ linux-aws-4.15.0/zfs/include/sys/efi_partition.h @@ -0,0 +1,381 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. + */ + +#ifndef _SYS_EFI_PARTITION_H +#define _SYS_EFI_PARTITION_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * GUID Partition Table Header + */ + +#define EFI_MIN_LABEL_SIZE 92 +#define EFI_LABEL_SIZE 512 +#define LEN_EFI_PAD (EFI_LABEL_SIZE - \ + ((5 * sizeof (diskaddr_t)) + \ + (7 * sizeof (uint_t)) + \ + (8 * sizeof (char)) + \ + (1 * (sizeof (struct uuid))))) + +#define EFI_SIGNATURE 0x5452415020494645ULL + +/* EFI Guid Partition Table Header -- little endian on-disk format */ +typedef struct efi_gpt { + uint64_t efi_gpt_Signature; + uint_t efi_gpt_Revision; + uint_t efi_gpt_HeaderSize; + uint_t efi_gpt_HeaderCRC32; + uint_t efi_gpt_Reserved1; + diskaddr_t efi_gpt_MyLBA; + diskaddr_t efi_gpt_AlternateLBA; + diskaddr_t efi_gpt_FirstUsableLBA; + diskaddr_t efi_gpt_LastUsableLBA; + struct uuid efi_gpt_DiskGUID; + diskaddr_t efi_gpt_PartitionEntryLBA; + uint_t efi_gpt_NumberOfPartitionEntries; + uint_t efi_gpt_SizeOfPartitionEntry; + uint_t efi_gpt_PartitionEntryArrayCRC32; + char efi_gpt_Reserved2[LEN_EFI_PAD]; +} efi_gpt_t; + +/* EFI Guid Partition Entry Attributes -- little endian format */ +typedef struct efi_gpe_Attrs { + uint32_t PartitionAttrs :16, + Reserved2 :16; + uint32_t Reserved1 :31, + RequiredPartition :1; +} efi_gpe_Attrs_t; + +/* + * 6a96237f-1dd2-11b2-99a6-080020736631 V_UNASSIGNED (not used as such) + * 6a82cb45-1dd2-11b2-99a6-080020736631 V_BOOT + * 6a85cf4d-1dd2-11b2-99a6-080020736631 V_ROOT + * 6a87c46f-1dd2-11b2-99a6-080020736631 V_SWAP + * 6a898cc3-1dd2-11b2-99a6-080020736631 V_USR + * 6a8b642b-1dd2-11b2-99a6-080020736631 V_BACKUP + * 6a8d2ac7-1dd2-11b2-99a6-080020736631 V_STAND (not used) + * 6a8ef2e9-1dd2-11b2-99a6-080020736631 V_VAR + * 6a90ba39-1dd2-11b2-99a6-080020736631 V_HOME + * 6a9283a5-1dd2-11b2-99a6-080020736631 V_ALTSCTR + * 6a945a3b-1dd2-11b2-99a6-080020736631 V_CACHE + */ + +#define EFI_UNUSED { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, \ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } +#define EFI_RESV1 { 0x6a96237f, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_BOOT { 0x6a82cb45, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_ROOT { 0x6a85cf4d, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_SWAP { 0x6a87c46f, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_USR { 0x6a898cc3, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_BACKUP { 0x6a8b642b, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_RESV2 { 0x6a8d2ac7, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_VAR { 0x6a8ef2e9, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_HOME { 0x6a90ba39, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_ALTSCTR { 0x6a9283a5, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_RESERVED { 0x6a945a3b, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_SYSTEM { 0xC12A7328, 0xF81F, 0x11d2, 0xBA, 0x4B, \ + { 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B } } +#define EFI_LEGACY_MBR { 0x024DEE41, 0x33E7, 0x11d3, 0x9D, 0x69, \ + { 0x00, 0x08, 0xC7, 0x81, 0xF3, 0x9F } } +#define EFI_SYMC_PUB { 0x6a9630d1, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_SYMC_CDS { 0x6a980767, 0x1dd2, 0x11b2, 0x99, 0xa6, \ + { 0x08, 0x00, 0x20, 0x73, 0x66, 0x31 } } +#define EFI_MSFT_RESV { 0xE3C9E316, 0x0B5C, 0x4DB8, 0x81, 0x7D, \ + { 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE } } +#define EFI_DELL_BASIC { 0xebd0a0a2, 0xb9e5, 0x4433, 0x87, 0xc0, \ + { 0x68, 0xb6, 0xb7, 0x26, 0x99, 0xc7 } } +#define EFI_DELL_RAID { 0xa19d880f, 0x05fc, 0x4d3b, 0xa0, 0x06, \ + { 0x74, 0x3f, 0x0f, 0x84, 0x91, 0x1e } } +#define EFI_DELL_SWAP { 0x0657fd6d, 0xa4ab, 0x43c4, 0x84, 0xe5, \ + { 0x09, 0x33, 0xc8, 0x4b, 0x4f, 0x4f } } +#define EFI_DELL_LVM { 0xe6d6d379, 0xf507, 0x44c2, 0xa2, 0x3c, \ + { 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28 } } +#define EFI_DELL_RESV { 0x8da63339, 0x0007, 0x60c0, 0xc4, 0x36, \ + { 0x08, 0x3a, 0xc8, 0x23, 0x09, 0x08 } } +#define EFI_AAPL_HFS { 0x48465300, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_UFS { 0x55465300, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_FREEBSD_BOOT { 0x83bd6b9d, 0x7f41, 0x11dc, 0xbe, 0x0b, \ + { 0x00, 0x15, 0x60, 0xb8, 0x4f, 0x0f } } +#define EFI_FREEBSD_SWAP { 0x516e7cb5, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ + { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } +#define EFI_FREEBSD_UFS { 0x516e7cb6, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ + { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } +#define EFI_FREEBSD_VINUM { 0x516e7cb8, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ + { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } +#define EFI_FREEBSD_ZFS { 0x516e7cba, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ + { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } + +/* From Wikipedia */ + +#define EFI_BIOS_BOOT { 0x21686148, 0x6449, 0x6e6f, 0x74, 0x4e, \ + { 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 } } +#define EFI_INTC_RS { 0xd3bfe2de, 0x3daf, 0x11df, 0xba, 0x40, \ + { 0xe3, 0xa5, 0x56, 0xd8, 0x95, 0x93 } } +#define EFI_SNE_BOOT { 0xf4019732, 0x066e, 0x4e12, 0x82, 0x73, \ + { 0x34, 0x6c, 0x56, 0x41, 0x49, 0x4f } } +#define EFI_LENOVO_BOOT { 0xbfbfafe7, 0xa34f, 0x448a, 0x9a, 0x5b, \ + { 0x62, 0x13, 0xeb, 0x73, 0x6c, 0x22 } } +#define EFI_MSFT_LDMM { 0x5808c8aa, 0x7e8f, 0x42e0, 0x85, 0xd2, \ + { 0xe1, 0xe9, 0x04, 0x34, 0xcf, 0xb3 } } +#define EFI_MSFT_LDMD { 0xaf9b60a0, 0x1431, 0x4f62, 0xbc, 0x68, \ + { 0x33, 0x11, 0x71, 0x4a, 0x69, 0xad } } +#define EFI_MSFT_RE { 0xde94bba4, 0x06d1, 0x4d40, 0xa1, 0x6a, \ + { 0xbf, 0xd5, 0x01, 0x79, 0xd6, 0xac } } +#define EFI_IBM_GPFS { 0x37affc90, 0xef7d, 0x4e96, 0x91, 0xc3, \ + { 0x2d, 0x7a, 0xe0, 0x55, 0xb1, 0x74 } } +#define EFI_MSFT_STORAGESPACES { 0xe75caf8f, 0xf680, 0x4cee, 0xaf, 0xa3, \ + { 0xb0, 0x01, 0xe5, 0x6e, 0xfc, 0x2d } } +#define EFI_HPQ_DATA { 0x75894c1e, 0x3aeb, 0x11d3, 0xb7, 0xc1, \ + { 0x7b, 0x03, 0xa0, 0x00, 0x00, 0x00 } } +#define EFI_HPQ_SVC { 0xe2a1e728, 0x32e3, 0x11d6, 0xa6, 0x82, \ + { 0x7b, 0x03, 0xa0, 0x00, 0x00, 0x00 } } +#define EFI_RHT_DATA { 0x0fc63daf, 0x8483, 0x4772, 0x8e, 0x79, \ + { 0x3d, 0x69, 0xd8, 0x47, 0x7d, 0xe4 } } +#define EFI_RHT_HOME { 0x933ac7e1, 0x2eb4, 0x4f13, 0xb8, 0x44, \ + { 0x0e, 0x14, 0xe2, 0xae, 0xf9, 0x15 } } +#define EFI_RHT_SRV { 0x3b8f8425, 0x20e0, 0x4f3b, 0x90, 0x7f, \ + { 0x1a, 0x25, 0xa7, 0x6f, 0x98, 0xe8 } } +#define EFI_RHT_DMCRYPT { 0x7ffec5c9, 0x2d00, 0x49b7, 0x89, 0x41, \ + { 0x3e, 0xa1, 0x0a, 0x55, 0x86, 0xb7 } } +#define EFI_RHT_LUKS { 0xca7d7ccb, 0x63ed, 0x4c53, 0x86, 0x1c, \ + { 0x17, 0x42, 0x53, 0x60, 0x59, 0xcc } } +#define EFI_FREEBSD_DISKLABEL { 0x516e7cb4, 0x6ecf, 0x11d6, 0x8f, 0xf8, \ + { 0x00, 0x02, 0x2d, 0x09, 0x71, 0x2b } } +#define EFI_AAPL_RAID { 0x52414944, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_RAIDOFFLINE { 0x52414944, 0x5f4f, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_BOOT { 0x426f6f74, 0x0000, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_LABEL { 0x4c616265, 0x6c00, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_TVRECOVERY { 0x5265636f, 0x7665, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_AAPL_CORESTORAGE { 0x53746f72, 0x6167, 0x11aa, 0xaa, 0x11, \ + { 0x00, 0x30, 0x65, 0x43, 0xec, 0xac } } +#define EFI_NETBSD_SWAP { 0x49f48d32, 0xb10e, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_NETBSD_FFS { 0x49f48d5a, 0xb10e, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_NETBSD_LFS { 0x49f48d82, 0xb10e, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_NETBSD_RAID { 0x49f48daa, 0xb10e, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_NETBSD_CAT { 0x2db519c4, 0xb10f, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_NETBSD_CRYPT { 0x2db519ec, 0xb10f, 0x11dc, 0xb9, 0x9b, \ + { 0x00, 0x19, 0xd1, 0x87, 0x96, 0x48 } } +#define EFI_GOOG_KERN { 0xfe3a2a5d, 0x4f32, 0x41a7, 0xb7, 0x25, \ + { 0xac, 0xcc, 0x32, 0x85, 0xa3, 0x09 } } +#define EFI_GOOG_ROOT { 0x3cb8e202, 0x3b7e, 0x47dd, 0x8a, 0x3c, \ + { 0x7f, 0xf2, 0xa1, 0x3c, 0xfc, 0xec } } +#define EFI_GOOG_RESV { 0x2e0a753d, 0x9e48, 0x43b0, 0x83, 0x37, \ + { 0xb1, 0x51, 0x92, 0xcb, 0x1b, 0x5e } } +#define EFI_HAIKU_BFS { 0x42465331, 0x3ba3, 0x10f1, 0x80, 0x2a, \ + { 0x48, 0x61, 0x69, 0x6b, 0x75, 0x21 } } +#define EFI_MIDNIGHTBSD_BOOT { 0x85d5e45e, 0x237c, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_MIDNIGHTBSD_DATA { 0x85d5e45a, 0x237c, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_MIDNIGHTBSD_SWAP { 0x85d5e45b, 0x237c, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_MIDNIGHTBSD_UFS { 0x0394ef8b, 0x237e, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_MIDNIGHTBSD_VINUM { 0x85d5e45c, 0x237c, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_MIDNIGHTBSD_ZFS { 0x85d5e45d, 0x237c, 0x11e1, 0xb4, 0xb3, \ + { 0xe8, 0x9a, 0x8f, 0x7f, 0xc3, 0xa7 } } +#define EFI_CEPH_JOURNAL { 0x45b0969e, 0x9b03, 0x4f30, 0xb4, 0xc6, \ + { 0xb4, 0xb8, 0x0c, 0xef, 0xf1, 0x06 } } +#define EFI_CEPH_DMCRYPTJOURNAL { 0x45b0969e, 0x9b03, 0x4f30, 0xb4, 0xc6, \ + { 0x5e, 0xc0, 0x0c, 0xef, 0xf1, 0x06 } } +#define EFI_CEPH_OSD { 0x4fbd7e29, 0x9d25, 0x41b8, 0xaf, 0xd0, \ + { 0x06, 0x2c, 0x0c, 0xef, 0xf0, 0x5d } } +#define EFI_CEPH_DMCRYPTOSD { 0x4fbd7e29, 0x9d25, 0x41b8, 0xaf, 0xd0, \ + { 0x5e, 0xc0, 0x0c, 0xef, 0xf0, 0x5d } } +#define EFI_CEPH_CREATE { 0x89c57f98, 0x2fe5, 0x4dc0, 0x89, 0xc1, \ + { 0xf3, 0xad, 0x0c, 0xef, 0xf2, 0xbe } } +#define EFI_CEPH_DMCRYPTCREATE { 0x89c57f98, 0x2fe5, 0x4dc0, 0x89, 0xc1, \ + { 0x5e, 0xc0, 0x0c, 0xef, 0xf2, 0xbe } } +#define EFI_OPENBSD_DISKLABEL { 0x824cc7a0, 0x36a8, 0x11e3, 0x89, 0x0a, \ + { 0x95, 0x25, 0x19, 0xad, 0x3f, 0x61 } } +#define EFI_BBRY_QNX { 0xcef5a9ad, 0x73bc, 0x4601, 0x89, 0xf3, \ + { 0xcd, 0xee, 0xee, 0xe3, 0x21, 0xa1 } } +#define EFI_BELL_PLAN9 { 0xc91818f9, 0x8025, 0x47af, 0x89, 0xd2, \ + { 0xf0, 0x30, 0xd7, 0x00, 0x0c, 0x2c } } +#define EFI_VMW_KCORE { 0x9d275380, 0x40ad, 0x11db, 0xbf, 0x97, \ + { 0x00, 0x0c, 0x29, 0x11, 0xd1, 0xb8 } } +#define EFI_VMW_VMFS { 0xaa31e02a, 0x400f, 0x11db, 0x95, 0x90, \ + { 0x00, 0x0c, 0x29, 0x11, 0xd1, 0xb8 } } +#define EFI_VMW_RESV { 0x9198effc, 0x31c0, 0x11db, 0x8f, 0x78, \ + { 0x00, 0x0c, 0x29, 0x11, 0xd1, 0xb8 } } + +/* From GPT fdisk */ + +#define EFI_RHT_ROOTX86 { 0x44479540, 0xf297, 0x41b2, 0x9a, 0xf7, \ + { 0xd1, 0x31, 0xd5, 0xf0, 0x45, 0x8a } } +#define EFI_RHT_ROOTAMD64 { 0x4f68bce3, 0xe8cd, 0x4db1, 0x96, 0xe7, \ + { 0xfb, 0xca, 0xf9, 0x84, 0xb7, 0x09 } } +#define EFI_RHT_ROOTARM { 0x69dad710, 0x2ce4, 0x4e3c, 0xb1, 0x6c, \ + { 0x21, 0xa1, 0xd4, 0x9a, 0xbe, 0xd3 } } +#define EFI_RHT_ROOTARM64 { 0xb921b045, 0x1df0, 0x41c3, 0xaf, 0x44, \ + { 0x4c, 0x6f, 0x28, 0x0d, 0x3f, 0xae } } +#define EFI_ACRONIS_SECUREZONE { 0x0311fc50, 0x01ca, 0x4725, 0xad, 0x77, \ + { 0x9a, 0xdb, 0xb2, 0x0a, 0xce, 0x98 } } +#define EFI_ONIE_BOOT { 0x7412f7d5, 0xa156, 0x4b13, 0x81, 0xdc, \ + { 0x86, 0x71, 0x74, 0x92, 0x93, 0x25 } } +#define EFI_ONIE_CONFIG { 0xd4e6e2cd, 0x4469, 0x46f3, 0xb5, 0xcb, \ + { 0x1b, 0xff, 0x57, 0xaf, 0xc1, 0x49 } } +#define EFI_IBM_PPRPBOOT { 0x9e1a2d38, 0xc612, 0x4316, 0xaa, 0x26, \ + { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b } } +#define EFI_FREEDESKTOP_BOOT { 0xbc13c2ff, 0x59e6, 0x4262, 0xa3, 0x52, \ + { 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 } } + +/* minimum # of bytes for partition table entries, per EFI spec */ +#define EFI_MIN_ARRAY_SIZE (16 * 1024) + +#define EFI_PART_NAME_LEN 36 + +/* size of the "reserved" partition, in blocks */ +#define EFI_MIN_RESV_SIZE (16 * 1024) + +/* EFI Guid Partition Entry */ +typedef struct efi_gpe { + struct uuid efi_gpe_PartitionTypeGUID; + struct uuid efi_gpe_UniquePartitionGUID; + diskaddr_t efi_gpe_StartingLBA; + diskaddr_t efi_gpe_EndingLBA; + efi_gpe_Attrs_t efi_gpe_Attributes; + ushort_t efi_gpe_PartitionName[EFI_PART_NAME_LEN]; +} efi_gpe_t; + +/* + * passed to the useful (we hope) routines (efi_alloc_and_read and + * efi_write) that take this VTOC-like struct. These routines handle + * converting this struct into the EFI struct, generate UUIDs and + * checksums, and perform any necessary byte-swapping to the on-disk + * format. + */ +/* Solaris library abstraction for EFI partitons */ +typedef struct dk_part { + diskaddr_t p_start; /* starting LBA */ + diskaddr_t p_size; /* size in blocks */ + struct uuid p_guid; /* partion type GUID */ + ushort_t p_tag; /* converted to part'n type GUID */ + ushort_t p_flag; /* attributes */ + char p_name[EFI_PART_NAME_LEN]; /* partition name */ + struct uuid p_uguid; /* unique partition GUID */ + uint_t p_resv[8]; /* future use - set to zero */ +} dk_part_t; + +/* Solaris library abstraction for an EFI GPT */ +#define EFI_VERSION102 0x00010002 +#define EFI_VERSION100 0x00010000 +#define EFI_VERSION_CURRENT EFI_VERSION100 +typedef struct dk_gpt { + uint_t efi_version; /* set to EFI_VERSION_CURRENT */ + uint_t efi_nparts; /* number of partitions below */ + uint_t efi_part_size; /* size of each partition entry */ + /* efi_part_size is unused */ + uint_t efi_lbasize; /* size of block in bytes */ + diskaddr_t efi_last_lba; /* last block on the disk */ + diskaddr_t efi_first_u_lba; /* first block after labels */ + diskaddr_t efi_last_u_lba; /* last block before backup labels */ + struct uuid efi_disk_uguid; /* unique disk GUID */ + uint_t efi_flags; + uint_t efi_reserved1; /* future use - set to zero */ + diskaddr_t efi_altern_lba; /* lba of alternate GPT header */ + uint_t efi_reserved[12]; /* future use - set to zero */ + struct dk_part efi_parts[1]; /* array of partitions */ +} dk_gpt_t; + +/* possible values for "efi_flags" */ +#define EFI_GPT_PRIMARY_CORRUPT 0x1 /* primary label corrupt */ + +/* the private ioctl between libefi and the driver */ +typedef struct dk_efi { + diskaddr_t dki_lba; /* starting block */ + len_t dki_length; /* length in bytes */ + union { + efi_gpt_t *_dki_data; + uint64_t _dki_data_64; + } dki_un; +#define dki_data dki_un._dki_data +#define dki_data_64 dki_un._dki_data_64 +} dk_efi_t; + +struct partition64 { + struct uuid p_type; + uint_t p_partno; + uint_t p_resv1; + diskaddr_t p_start; + diskaddr_t p_size; +}; + +/* + * Number of EFI partitions + */ +#if defined(__linux__) +#define EFI_NUMPAR 128 /* Expected by parted-1.8.1 */ +#else +#define EFI_NUMPAR 9 +#endif + +#ifndef _KERNEL +extern int efi_alloc_and_init(int, uint32_t, struct dk_gpt **); +extern int efi_alloc_and_read(int, struct dk_gpt **); +extern int efi_write(int, struct dk_gpt *); +extern int efi_rescan(int); +extern void efi_free(struct dk_gpt *); +extern int efi_type(int); +extern void efi_err_check(struct dk_gpt *); +extern int efi_auto_sense(int fd, struct dk_gpt **); +extern int efi_use_whole_disk(int fd); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_EFI_PARTITION_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/fm/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/fm/Makefile.am @@ -0,0 +1,21 @@ +SUBDIRS = fs + +COMMON_H = \ + $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h + +KERNEL_H = + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys/fm +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/fm/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/fm/Makefile.in @@ -0,0 +1,905 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/fm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +SUBDIRS = fs +COMMON_H = \ + $(top_srcdir)/include/sys/fm/protocol.h \ + $(top_srcdir)/include/sys/fm/util.h + +KERNEL_H = +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys/fm +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/fm/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/fm/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-kernelHEADERS install-libzfsHEADERS install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/fm/fs/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/fm/fs/Makefile.am @@ -0,0 +1,18 @@ +COMMON_H = \ + $(top_srcdir)/include/sys/fm/fs/zfs.h + +KERNEL_H = + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys/fm/fs +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm/fs +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/fm/fs/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/fm/fs/Makefile.in @@ -0,0 +1,785 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/fm/fs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/fm/fs/zfs.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/sys/fm/fs/zfs.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +COMMON_H = \ + $(top_srcdir)/include/sys/fm/fs/zfs.h + +KERNEL_H = +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys/fm/fs +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm/fs +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/fm/fs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/fm/fs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS \ + install-libzfsHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/fm/fs/zfs.h +++ linux-aws-4.15.0/zfs/include/sys/fm/fs/zfs.h @@ -0,0 +1,118 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_FM_FS_ZFS_H +#define _SYS_FM_FS_ZFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZFS_ERROR_CLASS "fs.zfs" + +#define FM_EREPORT_ZFS_CHECKSUM "checksum" +#define FM_EREPORT_ZFS_IO "io" +#define FM_EREPORT_ZFS_DATA "data" +#define FM_EREPORT_ZFS_DELAY "delay" +#define FM_EREPORT_ZFS_POOL "zpool" +#define FM_EREPORT_ZFS_DEVICE_UNKNOWN "vdev.unknown" +#define FM_EREPORT_ZFS_DEVICE_OPEN_FAILED "vdev.open_failed" +#define FM_EREPORT_ZFS_DEVICE_CORRUPT_DATA "vdev.corrupt_data" +#define FM_EREPORT_ZFS_DEVICE_NO_REPLICAS "vdev.no_replicas" +#define FM_EREPORT_ZFS_DEVICE_BAD_GUID_SUM "vdev.bad_guid_sum" +#define FM_EREPORT_ZFS_DEVICE_TOO_SMALL "vdev.too_small" +#define FM_EREPORT_ZFS_DEVICE_BAD_LABEL "vdev.bad_label" +#define FM_EREPORT_ZFS_DEVICE_BAD_ASHIFT "vdev.bad_ashift" +#define FM_EREPORT_ZFS_IO_FAILURE "io_failure" +#define FM_EREPORT_ZFS_PROBE_FAILURE "probe_failure" +#define FM_EREPORT_ZFS_LOG_REPLAY "log_replay" +#define FM_EREPORT_ZFS_CONFIG_CACHE_WRITE "config_cache_write" + +#define FM_EREPORT_PAYLOAD_ZFS_POOL "pool" +#define FM_EREPORT_PAYLOAD_ZFS_POOL_FAILMODE "pool_failmode" +#define FM_EREPORT_PAYLOAD_ZFS_POOL_GUID "pool_guid" +#define FM_EREPORT_PAYLOAD_ZFS_POOL_CONTEXT "pool_context" +#define FM_EREPORT_PAYLOAD_ZFS_POOL_STATE "pool_state" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_GUID "vdev_guid" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_TYPE "vdev_type" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_PATH "vdev_path" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_PHYSPATH "vdev_physpath" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_ENC_SYSFS_PATH "vdev_enc_sysfs_path" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_DEVID "vdev_devid" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_FRU "vdev_fru" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_STATE "vdev_state" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_LASTSTATE "vdev_laststate" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_ASHIFT "vdev_ashift" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_COMP_TS "vdev_complete_ts" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_DELTA_TS "vdev_delta_ts" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_SPARE_PATHS "vdev_spare_paths" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_SPARE_GUIDS "vdev_spare_guids" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_READ_ERRORS "vdev_read_errors" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_WRITE_ERRORS "vdev_write_errors" +#define FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_ERRORS "vdev_cksum_errors" +#define FM_EREPORT_PAYLOAD_ZFS_PARENT_GUID "parent_guid" +#define FM_EREPORT_PAYLOAD_ZFS_PARENT_TYPE "parent_type" +#define FM_EREPORT_PAYLOAD_ZFS_PARENT_PATH "parent_path" +#define FM_EREPORT_PAYLOAD_ZFS_PARENT_DEVID "parent_devid" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJSET "zio_objset" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJECT "zio_object" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_LEVEL "zio_level" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_BLKID "zio_blkid" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_ERR "zio_err" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_OFFSET "zio_offset" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_SIZE "zio_size" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS "zio_flags" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_STAGE "zio_stage" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_PIPELINE "zio_pipeline" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_DELAY "zio_delay" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_TIMESTAMP "zio_timestamp" +#define FM_EREPORT_PAYLOAD_ZFS_ZIO_DELTA "zio_delta" +#define FM_EREPORT_PAYLOAD_ZFS_PREV_STATE "prev_state" +#define FM_EREPORT_PAYLOAD_ZFS_CKSUM_EXPECTED "cksum_expected" +#define FM_EREPORT_PAYLOAD_ZFS_CKSUM_ACTUAL "cksum_actual" +#define FM_EREPORT_PAYLOAD_ZFS_CKSUM_ALGO "cksum_algorithm" +#define FM_EREPORT_PAYLOAD_ZFS_CKSUM_BYTESWAP "cksum_byteswap" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_OFFSET_RANGES "bad_ranges" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_MIN_GAP "bad_ranges_min_gap" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_SETS "bad_range_sets" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_CLEARS "bad_range_clears" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_SET_BITS "bad_set_bits" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_BITS "bad_cleared_bits" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_SET_HISTOGRAM "bad_set_histogram" +#define FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_HISTOGRAM "bad_cleared_histogram" + +#define FM_EREPORT_FAILMODE_WAIT "wait" +#define FM_EREPORT_FAILMODE_CONTINUE "continue" +#define FM_EREPORT_FAILMODE_PANIC "panic" + +#define FM_RESOURCE_REMOVED "removed" +#define FM_RESOURCE_AUTOREPLACE "autoreplace" +#define FM_RESOURCE_STATECHANGE "statechange" + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FM_FS_ZFS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/fm/protocol.h +++ linux-aws-4.15.0/zfs/include/sys/fm/protocol.h @@ -0,0 +1,370 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FM_PROTOCOL_H +#define _SYS_FM_PROTOCOL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _KERNEL +#include +#include +#else +#include +#include +#endif +#include + +/* FM common member names */ +#define FM_CLASS "class" +#define FM_VERSION "version" + +/* FM protocol category 1 class names */ +#define FM_EREPORT_CLASS "ereport" +#define FM_FAULT_CLASS "fault" +#define FM_DEFECT_CLASS "defect" +#define FM_RSRC_CLASS "resource" +#define FM_LIST_EVENT "list" +#define FM_IREPORT_CLASS "ireport" +#define FM_SYSEVENT_CLASS "sysevent" + +/* FM list.* event class values */ +#define FM_LIST_SUSPECT_CLASS FM_LIST_EVENT ".suspect" +#define FM_LIST_ISOLATED_CLASS FM_LIST_EVENT ".isolated" +#define FM_LIST_REPAIRED_CLASS FM_LIST_EVENT ".repaired" +#define FM_LIST_UPDATED_CLASS FM_LIST_EVENT ".updated" +#define FM_LIST_RESOLVED_CLASS FM_LIST_EVENT ".resolved" + +/* ereport class subcategory values */ +#define FM_ERROR_CPU "cpu" +#define FM_ERROR_IO "io" + +/* ereport version and payload member names */ +#define FM_EREPORT_VERS0 0 +#define FM_EREPORT_VERSION FM_EREPORT_VERS0 + +/* ereport payload member names */ +#define FM_EREPORT_DETECTOR "detector" +#define FM_EREPORT_ENA "ena" +#define FM_EREPORT_TIME "time" +#define FM_EREPORT_EID "eid" + +/* list.* event payload member names */ +#define FM_LIST_EVENT_SIZE "list-sz" + +/* ireport.* event payload member names */ +#define FM_IREPORT_DETECTOR "detector" +#define FM_IREPORT_UUID "uuid" +#define FM_IREPORT_PRIORITY "pri" +#define FM_IREPORT_ATTRIBUTES "attr" + +/* + * list.suspect, isolated, updated, repaired and resolved + * versions/payload member names. + */ +#define FM_SUSPECT_UUID "uuid" +#define FM_SUSPECT_DIAG_CODE "code" +#define FM_SUSPECT_DIAG_TIME "diag-time" +#define FM_SUSPECT_DE "de" +#define FM_SUSPECT_FAULT_LIST "fault-list" +#define FM_SUSPECT_FAULT_SZ "fault-list-sz" +#define FM_SUSPECT_FAULT_STATUS "fault-status" +#define FM_SUSPECT_INJECTED "__injected" +#define FM_SUSPECT_MESSAGE "message" +#define FM_SUSPECT_RETIRE "retire" +#define FM_SUSPECT_RESPONSE "response" +#define FM_SUSPECT_SEVERITY "severity" + +#define FM_SUSPECT_VERS0 0 +#define FM_SUSPECT_VERSION FM_SUSPECT_VERS0 + +#define FM_SUSPECT_FAULTY 0x1 +#define FM_SUSPECT_UNUSABLE 0x2 +#define FM_SUSPECT_NOT_PRESENT 0x4 +#define FM_SUSPECT_DEGRADED 0x8 +#define FM_SUSPECT_REPAIRED 0x10 +#define FM_SUSPECT_REPLACED 0x20 +#define FM_SUSPECT_ACQUITTED 0x40 + +/* fault event versions and payload member names */ +#define FM_FAULT_VERS0 0 +#define FM_FAULT_VERSION FM_FAULT_VERS0 + +#define FM_FAULT_ASRU "asru" +#define FM_FAULT_FRU "fru" +#define FM_FAULT_FRU_LABEL "fru-label" +#define FM_FAULT_CERTAINTY "certainty" +#define FM_FAULT_RESOURCE "resource" +#define FM_FAULT_LOCATION "location" + +/* resource event versions and payload member names */ +#define FM_RSRC_VERS0 0 +#define FM_RSRC_VERSION FM_RSRC_VERS0 +#define FM_RSRC_RESOURCE "resource" + +/* resource.fm.asru.* payload member names */ +#define FM_RSRC_ASRU_UUID "uuid" +#define FM_RSRC_ASRU_CODE "code" +#define FM_RSRC_ASRU_FAULTY "faulty" +#define FM_RSRC_ASRU_REPAIRED "repaired" +#define FM_RSRC_ASRU_REPLACED "replaced" +#define FM_RSRC_ASRU_ACQUITTED "acquitted" +#define FM_RSRC_ASRU_RESOLVED "resolved" +#define FM_RSRC_ASRU_UNUSABLE "unusable" +#define FM_RSRC_ASRU_EVENT "event" + +/* resource.fm.xprt.* versions and payload member names */ +#define FM_RSRC_XPRT_VERS0 0 +#define FM_RSRC_XPRT_VERSION FM_RSRC_XPRT_VERS0 +#define FM_RSRC_XPRT_UUID "uuid" +#define FM_RSRC_XPRT_SUBCLASS "subclass" +#define FM_RSRC_XPRT_FAULT_STATUS "fault-status" +#define FM_RSRC_XPRT_FAULT_HAS_ASRU "fault-has-asru" + +/* + * FM ENA Format Macros + */ +#define ENA_FORMAT_MASK 0x3 +#define ENA_FORMAT(ena) ((ena) & ENA_FORMAT_MASK) + +/* ENA format types */ +#define FM_ENA_FMT0 0 +#define FM_ENA_FMT1 1 +#define FM_ENA_FMT2 2 + +/* Format 1 */ +#define ENA_FMT1_GEN_MASK 0x00000000000003FCull +#define ENA_FMT1_ID_MASK 0xFFFFFFFFFFFFFC00ull +#define ENA_FMT1_CPUID_MASK 0x00000000000FFC00ull +#define ENA_FMT1_TIME_MASK 0xFFFFFFFFFFF00000ull +#define ENA_FMT1_GEN_SHFT 2 +#define ENA_FMT1_ID_SHFT 10 +#define ENA_FMT1_CPUID_SHFT ENA_FMT1_ID_SHFT +#define ENA_FMT1_TIME_SHFT 20 + +/* Format 2 */ +#define ENA_FMT2_GEN_MASK 0x00000000000003FCull +#define ENA_FMT2_ID_MASK 0xFFFFFFFFFFFFFC00ull +#define ENA_FMT2_TIME_MASK ENA_FMT2_ID_MASK +#define ENA_FMT2_GEN_SHFT 2 +#define ENA_FMT2_ID_SHFT 10 +#define ENA_FMT2_TIME_SHFT ENA_FMT2_ID_SHFT + +/* Common FMRI type names */ +#define FM_FMRI_AUTHORITY "authority" +#define FM_FMRI_SCHEME "scheme" +#define FM_FMRI_SVC_AUTHORITY "svc-authority" +#define FM_FMRI_FACILITY "facility" + +/* FMRI authority-type member names */ +#define FM_FMRI_AUTH_CHASSIS "chassis-id" +#define FM_FMRI_AUTH_PRODUCT_SN "product-sn" +#define FM_FMRI_AUTH_PRODUCT "product-id" +#define FM_FMRI_AUTH_DOMAIN "domain-id" +#define FM_FMRI_AUTH_SERVER "server-id" +#define FM_FMRI_AUTH_HOST "host-id" + +#define FM_AUTH_VERS0 0 +#define FM_FMRI_AUTH_VERSION FM_AUTH_VERS0 + +/* scheme name values */ +#define FM_FMRI_SCHEME_FMD "fmd" +#define FM_FMRI_SCHEME_DEV "dev" +#define FM_FMRI_SCHEME_HC "hc" +#define FM_FMRI_SCHEME_SVC "svc" +#define FM_FMRI_SCHEME_CPU "cpu" +#define FM_FMRI_SCHEME_MEM "mem" +#define FM_FMRI_SCHEME_MOD "mod" +#define FM_FMRI_SCHEME_PKG "pkg" +#define FM_FMRI_SCHEME_LEGACY "legacy-hc" +#define FM_FMRI_SCHEME_ZFS "zfs" +#define FM_FMRI_SCHEME_SW "sw" + +/* Scheme versions */ +#define FMD_SCHEME_VERSION0 0 +#define FM_FMD_SCHEME_VERSION FMD_SCHEME_VERSION0 +#define DEV_SCHEME_VERSION0 0 +#define FM_DEV_SCHEME_VERSION DEV_SCHEME_VERSION0 +#define FM_HC_VERS0 0 +#define FM_HC_SCHEME_VERSION FM_HC_VERS0 +#define CPU_SCHEME_VERSION0 0 +#define CPU_SCHEME_VERSION1 1 +#define FM_CPU_SCHEME_VERSION CPU_SCHEME_VERSION1 +#define MEM_SCHEME_VERSION0 0 +#define FM_MEM_SCHEME_VERSION MEM_SCHEME_VERSION0 +#define MOD_SCHEME_VERSION0 0 +#define FM_MOD_SCHEME_VERSION MOD_SCHEME_VERSION0 +#define PKG_SCHEME_VERSION0 0 +#define FM_PKG_SCHEME_VERSION PKG_SCHEME_VERSION0 +#define LEGACY_SCHEME_VERSION0 0 +#define FM_LEGACY_SCHEME_VERSION LEGACY_SCHEME_VERSION0 +#define SVC_SCHEME_VERSION0 0 +#define FM_SVC_SCHEME_VERSION SVC_SCHEME_VERSION0 +#define ZFS_SCHEME_VERSION0 0 +#define FM_ZFS_SCHEME_VERSION ZFS_SCHEME_VERSION0 +#define SW_SCHEME_VERSION0 0 +#define FM_SW_SCHEME_VERSION SW_SCHEME_VERSION0 + +/* hc scheme member names */ +#define FM_FMRI_HC_SERIAL_ID "serial" +#define FM_FMRI_HC_PART "part" +#define FM_FMRI_HC_REVISION "revision" +#define FM_FMRI_HC_ROOT "hc-root" +#define FM_FMRI_HC_LIST_SZ "hc-list-sz" +#define FM_FMRI_HC_LIST "hc-list" +#define FM_FMRI_HC_SPECIFIC "hc-specific" + +/* facility member names */ +#define FM_FMRI_FACILITY_NAME "facility-name" +#define FM_FMRI_FACILITY_TYPE "facility-type" + +/* hc-list version and member names */ +#define FM_FMRI_HC_NAME "hc-name" +#define FM_FMRI_HC_ID "hc-id" + +#define HC_LIST_VERSION0 0 +#define FM_HC_LIST_VERSION HC_LIST_VERSION0 + +/* hc-specific member names */ +#define FM_FMRI_HC_SPECIFIC_OFFSET "offset" +#define FM_FMRI_HC_SPECIFIC_PHYSADDR "physaddr" + +/* fmd module scheme member names */ +#define FM_FMRI_FMD_NAME "mod-name" +#define FM_FMRI_FMD_VERSION "mod-version" + +/* dev scheme member names */ +#define FM_FMRI_DEV_ID "devid" +#define FM_FMRI_DEV_TGTPTLUN0 "target-port-l0id" +#define FM_FMRI_DEV_PATH "device-path" + +/* pkg scheme member names */ +#define FM_FMRI_PKG_BASEDIR "pkg-basedir" +#define FM_FMRI_PKG_INST "pkg-inst" +#define FM_FMRI_PKG_VERSION "pkg-version" + +/* svc scheme member names */ +#define FM_FMRI_SVC_NAME "svc-name" +#define FM_FMRI_SVC_INSTANCE "svc-instance" +#define FM_FMRI_SVC_CONTRACT_ID "svc-contract-id" + +/* svc-authority member names */ +#define FM_FMRI_SVC_AUTH_SCOPE "scope" +#define FM_FMRI_SVC_AUTH_SYSTEM_FQN "system-fqn" + +/* cpu scheme member names */ +#define FM_FMRI_CPU_ID "cpuid" +#define FM_FMRI_CPU_SERIAL_ID "serial" +#define FM_FMRI_CPU_MASK "cpumask" +#define FM_FMRI_CPU_VID "cpuvid" +#define FM_FMRI_CPU_CPUFRU "cpufru" +#define FM_FMRI_CPU_CACHE_INDEX "cacheindex" +#define FM_FMRI_CPU_CACHE_WAY "cacheway" +#define FM_FMRI_CPU_CACHE_BIT "cachebit" +#define FM_FMRI_CPU_CACHE_TYPE "cachetype" + +#define FM_FMRI_CPU_CACHE_TYPE_L2 0 +#define FM_FMRI_CPU_CACHE_TYPE_L3 1 + +/* legacy-hc scheme member names */ +#define FM_FMRI_LEGACY_HC "component" +#define FM_FMRI_LEGACY_HC_PREFIX FM_FMRI_SCHEME_HC":///" \ + FM_FMRI_LEGACY_HC"=" + +/* mem scheme member names */ +#define FM_FMRI_MEM_UNUM "unum" +#define FM_FMRI_MEM_SERIAL_ID "serial" +#define FM_FMRI_MEM_PHYSADDR "physaddr" +#define FM_FMRI_MEM_MEMCONFIG "memconfig" +#define FM_FMRI_MEM_OFFSET "offset" + +/* mod scheme member names */ +#define FM_FMRI_MOD_PKG "mod-pkg" +#define FM_FMRI_MOD_NAME "mod-name" +#define FM_FMRI_MOD_ID "mod-id" +#define FM_FMRI_MOD_DESC "mod-desc" + +/* zfs scheme member names */ +#define FM_FMRI_ZFS_POOL "pool" +#define FM_FMRI_ZFS_VDEV "vdev" + +/* sw scheme member names - extra indentation for members of an nvlist */ +#define FM_FMRI_SW_OBJ "object" +#define FM_FMRI_SW_OBJ_PATH "path" +#define FM_FMRI_SW_OBJ_ROOT "root" +#define FM_FMRI_SW_OBJ_PKG "pkg" +#define FM_FMRI_SW_SITE "site" +#define FM_FMRI_SW_SITE_TOKEN "token" +#define FM_FMRI_SW_SITE_MODULE "module" +#define FM_FMRI_SW_SITE_FILE "file" +#define FM_FMRI_SW_SITE_LINE "line" +#define FM_FMRI_SW_SITE_FUNC "func" +#define FM_FMRI_SW_CTXT "context" +#define FM_FMRI_SW_CTXT_ORIGIN "origin" +#define FM_FMRI_SW_CTXT_EXECNAME "execname" +#define FM_FMRI_SW_CTXT_PID "pid" +#define FM_FMRI_SW_CTXT_ZONE "zone" +#define FM_FMRI_SW_CTXT_CTID "ctid" +#define FM_FMRI_SW_CTXT_STACK "stack" +#define FM_NVA_FREE 0 /* free allocator on nvlist_destroy */ +#define FM_NVA_RETAIN 1 /* keep allocator on nvlist_destroy */ + +extern nv_alloc_t *fm_nva_xcreate(char *, size_t); +extern void fm_nva_xdestroy(nv_alloc_t *); +extern nvlist_t *fm_nvlist_create(nv_alloc_t *); +extern void fm_nvlist_destroy(nvlist_t *, int); +extern void fm_ereport_set(nvlist_t *, int, const char *, uint64_t, + const nvlist_t *, ...); +extern void fm_payload_set(nvlist_t *, ...); +extern int i_fm_payload_set(nvlist_t *, const char *, va_list); +extern void fm_fmri_hc_set(nvlist_t *, int, const nvlist_t *, nvlist_t *, + int, ...); +extern void fm_fmri_dev_set(nvlist_t *, int, const nvlist_t *, const char *, + const char *, const char *); +extern void fm_fmri_de_set(nvlist_t *, int, const nvlist_t *, const char *); +extern void fm_fmri_cpu_set(nvlist_t *, int, const nvlist_t *, uint32_t, + uint8_t *, const char *); +extern void fm_fmri_mem_set(nvlist_t *, int, const nvlist_t *, const char *, + const char *, uint64_t); +extern void fm_fmri_zfs_set(nvlist_t *, int, uint64_t, uint64_t); +extern void fm_fmri_hc_create(nvlist_t *, int, const nvlist_t *, nvlist_t *, + nvlist_t *, int, ...); + +extern uint64_t fm_ena_increment(uint64_t); +extern uint64_t fm_ena_generate(uint64_t, uchar_t); +extern uint64_t fm_ena_generate_cpu(uint64_t, processorid_t, uchar_t); +extern uint64_t fm_ena_generation_get(uint64_t); +extern uchar_t fm_ena_format_get(uint64_t); +extern uint64_t fm_ena_id_get(uint64_t); +extern uint64_t fm_ena_time_get(uint64_t); +extern void fm_erpt_dropped_increment(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FM_PROTOCOL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/fm/util.h +++ linux-aws-4.15.0/zfs/include/sys/fm/util.h @@ -0,0 +1,118 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FM_UTIL_H +#define _SYS_FM_UTIL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* + * Shared user/kernel definitions for class length, error channel name, + * and kernel event publisher string. + */ +#define FM_MAX_CLASS 100 +#define FM_ERROR_CHAN "com.sun:fm:error" +#define FM_PUB "fm" + +/* + * ereport dump device transport support + * + * Ereports are written out to the dump device at a proscribed offset from the + * end, similar to in-transit log messages. The ereports are represented as a + * erpt_dump_t header followed by ed_size bytes of packed native nvlist data. + * + * NOTE: All of these constants and the header must be defined so they have the + * same representation for *both* 32-bit and 64-bit producers and consumers. + */ +#define ERPT_MAGIC 0xf00d4eddU +#define ERPT_MAX_ERRS 16 +#define ERPT_DATA_SZ (6 * 1024) +#define ERPT_EVCH_MAX 256 +#define ERPT_HIWAT 64 + +typedef struct erpt_dump { + uint32_t ed_magic; /* ERPT_MAGIC or zero to indicate end */ + uint32_t ed_chksum; /* checksum32() of packed nvlist data */ + uint32_t ed_size; /* ereport (nvl) fixed buf size */ + uint32_t ed_pad; /* reserved for future use */ + hrtime_t ed_hrt_nsec; /* hrtime of this ereport */ + hrtime_t ed_hrt_base; /* hrtime sample corresponding to ed_tod_base */ + struct { + uint64_t sec; /* seconds since gettimeofday() Epoch */ + uint64_t nsec; /* nanoseconds past ed_tod_base.sec */ + } ed_tod_base; +} erpt_dump_t; + +#ifdef _KERNEL + +#define ZEVENT_SHUTDOWN 0x1 + +typedef void zevent_cb_t(nvlist_t *, nvlist_t *); + +typedef struct zevent_s { + nvlist_t *ev_nvl; /* protected by the zevent_lock */ + nvlist_t *ev_detector; /* " */ + list_t ev_ze_list; /* " */ + list_node_t ev_node; /* " */ + zevent_cb_t *ev_cb; /* " */ + uint64_t ev_eid; +} zevent_t; + +typedef struct zfs_zevent { + zevent_t *ze_zevent; /* protected by the zevent_lock */ + list_node_t ze_node; /* " */ + uint64_t ze_dropped; /* " */ +} zfs_zevent_t; + +extern void fm_init(void); +extern void fm_fini(void); +extern void fm_nvprint(nvlist_t *); +extern void zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector); +extern int zfs_zevent_post(nvlist_t *, nvlist_t *, zevent_cb_t *); +extern void zfs_zevent_drain_all(int *); +extern int zfs_zevent_fd_hold(int, minor_t *, zfs_zevent_t **); +extern void zfs_zevent_fd_rele(int); +extern int zfs_zevent_next(zfs_zevent_t *, nvlist_t **, uint64_t *, uint64_t *); +extern int zfs_zevent_wait(zfs_zevent_t *); +extern int zfs_zevent_seek(zfs_zevent_t *, uint64_t); +extern void zfs_zevent_init(zfs_zevent_t **); +extern void zfs_zevent_destroy(zfs_zevent_t *); + +#else + +static inline void fm_init(void) { } +static inline void fm_fini(void) { } + +#endif /* _KERNEL */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FM_UTIL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/fs/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/fs/Makefile.am @@ -0,0 +1,18 @@ +COMMON_H = \ + $(top_srcdir)/include/sys/fs/zfs.h + +KERNEL_H = + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys/fs +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fs +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/fs/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/fs/Makefile.in @@ -0,0 +1,785 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/fs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/fs/zfs.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = $(top_srcdir)/include/sys/fs/zfs.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +COMMON_H = \ + $(top_srcdir)/include/sys/fs/zfs.h + +KERNEL_H = +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys/fs +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fs +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/fs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/fs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS \ + install-libzfsHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/fs/zfs.h +++ linux-aws-4.15.0/zfs/include/sys/fs/zfs.h @@ -0,0 +1,1212 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2013, 2017 Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright (c) 2017 Datto Inc. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#ifndef _SYS_FS_ZFS_H +#define _SYS_FS_ZFS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types and constants shared between userland and the kernel. + */ + +/* + * Each dataset can be one of the following types. These constants can be + * combined into masks that can be passed to various functions. + */ +typedef enum { + ZFS_TYPE_FILESYSTEM = (1 << 0), + ZFS_TYPE_SNAPSHOT = (1 << 1), + ZFS_TYPE_VOLUME = (1 << 2), + ZFS_TYPE_POOL = (1 << 3), + ZFS_TYPE_BOOKMARK = (1 << 4) +} zfs_type_t; + +/* + * NB: lzc_dataset_type should be updated whenever a new objset type is added, + * if it represents a real type of a dataset that can be created from userland. + */ +typedef enum dmu_objset_type { + DMU_OST_NONE, + DMU_OST_META, + DMU_OST_ZFS, + DMU_OST_ZVOL, + DMU_OST_OTHER, /* For testing only! */ + DMU_OST_ANY, /* Be careful! */ + DMU_OST_NUMTYPES +} dmu_objset_type_t; + +#define ZFS_TYPE_DATASET \ + (ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME | ZFS_TYPE_SNAPSHOT) + +/* + * All of these include the terminating NUL byte. + */ +#define ZAP_MAXNAMELEN 256 +#define ZAP_MAXVALUELEN (1024 * 8) +#define ZAP_OLDMAXVALUELEN 1024 +#define ZFS_MAX_DATASET_NAME_LEN 256 + +/* + * Dataset properties are identified by these constants and must be added to + * the end of this list to ensure that external consumers are not affected + * by the change. If you make any changes to this list, be sure to update + * the property table in module/zcommon/zfs_prop.c. + */ +typedef enum { + ZFS_PROP_BAD = -1, + ZFS_PROP_TYPE = 0, + ZFS_PROP_CREATION, + ZFS_PROP_USED, + ZFS_PROP_AVAILABLE, + ZFS_PROP_REFERENCED, + ZFS_PROP_COMPRESSRATIO, + ZFS_PROP_MOUNTED, + ZFS_PROP_ORIGIN, + ZFS_PROP_QUOTA, + ZFS_PROP_RESERVATION, + ZFS_PROP_VOLSIZE, + ZFS_PROP_VOLBLOCKSIZE, + ZFS_PROP_RECORDSIZE, + ZFS_PROP_MOUNTPOINT, + ZFS_PROP_SHARENFS, + ZFS_PROP_CHECKSUM, + ZFS_PROP_COMPRESSION, + ZFS_PROP_ATIME, + ZFS_PROP_DEVICES, + ZFS_PROP_EXEC, + ZFS_PROP_SETUID, + ZFS_PROP_READONLY, + ZFS_PROP_ZONED, + ZFS_PROP_SNAPDIR, + ZFS_PROP_PRIVATE, /* not exposed to user, temporary */ + ZFS_PROP_ACLINHERIT, + ZFS_PROP_CREATETXG, + ZFS_PROP_NAME, /* not exposed to the user */ + ZFS_PROP_CANMOUNT, + ZFS_PROP_ISCSIOPTIONS, /* not exposed to the user */ + ZFS_PROP_XATTR, + ZFS_PROP_NUMCLONES, /* not exposed to the user */ + ZFS_PROP_COPIES, + ZFS_PROP_VERSION, + ZFS_PROP_UTF8ONLY, + ZFS_PROP_NORMALIZE, + ZFS_PROP_CASE, + ZFS_PROP_VSCAN, + ZFS_PROP_NBMAND, + ZFS_PROP_SHARESMB, + ZFS_PROP_REFQUOTA, + ZFS_PROP_REFRESERVATION, + ZFS_PROP_GUID, + ZFS_PROP_PRIMARYCACHE, + ZFS_PROP_SECONDARYCACHE, + ZFS_PROP_USEDSNAP, + ZFS_PROP_USEDDS, + ZFS_PROP_USEDCHILD, + ZFS_PROP_USEDREFRESERV, + ZFS_PROP_USERACCOUNTING, /* not exposed to the user */ + ZFS_PROP_STMF_SHAREINFO, /* not exposed to the user */ + ZFS_PROP_DEFER_DESTROY, + ZFS_PROP_USERREFS, + ZFS_PROP_LOGBIAS, + ZFS_PROP_UNIQUE, /* not exposed to the user */ + ZFS_PROP_OBJSETID, /* not exposed to the user */ + ZFS_PROP_DEDUP, + ZFS_PROP_MLSLABEL, + ZFS_PROP_SYNC, + ZFS_PROP_DNODESIZE, + ZFS_PROP_REFRATIO, + ZFS_PROP_WRITTEN, + ZFS_PROP_CLONES, + ZFS_PROP_LOGICALUSED, + ZFS_PROP_LOGICALREFERENCED, + ZFS_PROP_INCONSISTENT, /* not exposed to the user */ + ZFS_PROP_VOLMODE, + ZFS_PROP_FILESYSTEM_LIMIT, + ZFS_PROP_SNAPSHOT_LIMIT, + ZFS_PROP_FILESYSTEM_COUNT, + ZFS_PROP_SNAPSHOT_COUNT, + ZFS_PROP_SNAPDEV, + ZFS_PROP_ACLTYPE, + ZFS_PROP_SELINUX_CONTEXT, + ZFS_PROP_SELINUX_FSCONTEXT, + ZFS_PROP_SELINUX_DEFCONTEXT, + ZFS_PROP_SELINUX_ROOTCONTEXT, + ZFS_PROP_RELATIME, + ZFS_PROP_REDUNDANT_METADATA, + ZFS_PROP_OVERLAY, + ZFS_PROP_PREV_SNAP, + ZFS_PROP_RECEIVE_RESUME_TOKEN, + ZFS_NUM_PROPS +} zfs_prop_t; + +typedef enum { + ZFS_PROP_USERUSED, + ZFS_PROP_USERQUOTA, + ZFS_PROP_GROUPUSED, + ZFS_PROP_GROUPQUOTA, + ZFS_PROP_USEROBJUSED, + ZFS_PROP_USEROBJQUOTA, + ZFS_PROP_GROUPOBJUSED, + ZFS_PROP_GROUPOBJQUOTA, + ZFS_NUM_USERQUOTA_PROPS +} zfs_userquota_prop_t; + +extern const char *zfs_userquota_prop_prefixes[ZFS_NUM_USERQUOTA_PROPS]; + +/* + * Pool properties are identified by these constants and must be added to the + * end of this list to ensure that external consumers are not affected + * by the change. If you make any changes to this list, be sure to update + * the property table in module/zcommon/zpool_prop.c. + */ +typedef enum { + ZPOOL_PROP_NAME, + ZPOOL_PROP_SIZE, + ZPOOL_PROP_CAPACITY, + ZPOOL_PROP_ALTROOT, + ZPOOL_PROP_HEALTH, + ZPOOL_PROP_GUID, + ZPOOL_PROP_VERSION, + ZPOOL_PROP_BOOTFS, + ZPOOL_PROP_DELEGATION, + ZPOOL_PROP_AUTOREPLACE, + ZPOOL_PROP_CACHEFILE, + ZPOOL_PROP_FAILUREMODE, + ZPOOL_PROP_LISTSNAPS, + ZPOOL_PROP_AUTOEXPAND, + ZPOOL_PROP_DEDUPDITTO, + ZPOOL_PROP_DEDUPRATIO, + ZPOOL_PROP_FREE, + ZPOOL_PROP_ALLOCATED, + ZPOOL_PROP_READONLY, + ZPOOL_PROP_ASHIFT, + ZPOOL_PROP_COMMENT, + ZPOOL_PROP_EXPANDSZ, + ZPOOL_PROP_FREEING, + ZPOOL_PROP_FRAGMENTATION, + ZPOOL_PROP_LEAKED, + ZPOOL_PROP_MAXBLOCKSIZE, + ZPOOL_PROP_TNAME, + ZPOOL_PROP_MAXDNODESIZE, + ZPOOL_PROP_MULTIHOST, + ZPOOL_NUM_PROPS +} zpool_prop_t; + +/* Small enough to not hog a whole line of printout in zpool(1M). */ +#define ZPROP_MAX_COMMENT 32 + +#define ZPROP_CONT -2 +#define ZPROP_INVAL -1 + +#define ZPROP_VALUE "value" +#define ZPROP_SOURCE "source" + +typedef enum { + ZPROP_SRC_NONE = 0x1, + ZPROP_SRC_DEFAULT = 0x2, + ZPROP_SRC_TEMPORARY = 0x4, + ZPROP_SRC_LOCAL = 0x8, + ZPROP_SRC_INHERITED = 0x10, + ZPROP_SRC_RECEIVED = 0x20 +} zprop_source_t; + +#define ZPROP_SRC_ALL 0x3f + +#define ZPROP_SOURCE_VAL_RECVD "$recvd" +#define ZPROP_N_MORE_ERRORS "N_MORE_ERRORS" + +/* + * Dataset flag implemented as a special entry in the props zap object + * indicating that the dataset has received properties on or after + * SPA_VERSION_RECVD_PROPS. The first such receive blows away local properties + * just as it did in earlier versions, and thereafter, local properties are + * preserved. + */ +#define ZPROP_HAS_RECVD "$hasrecvd" + +typedef enum { + ZPROP_ERR_NOCLEAR = 0x1, /* failure to clear existing props */ + ZPROP_ERR_NORESTORE = 0x2 /* failure to restore props on error */ +} zprop_errflags_t; + +typedef int (*zprop_func)(int, void *); + +/* + * Properties to be set on the root file system of a new pool + * are stuffed into their own nvlist, which is then included in + * the properties nvlist with the pool properties. + */ +#define ZPOOL_ROOTFS_PROPS "root-props-nvl" + +/* + * Dataset property functions shared between libzfs and kernel. + */ +const char *zfs_prop_default_string(zfs_prop_t); +uint64_t zfs_prop_default_numeric(zfs_prop_t); +boolean_t zfs_prop_readonly(zfs_prop_t); +boolean_t zfs_prop_inheritable(zfs_prop_t); +boolean_t zfs_prop_setonce(zfs_prop_t); +const char *zfs_prop_to_name(zfs_prop_t); +zfs_prop_t zfs_name_to_prop(const char *); +boolean_t zfs_prop_user(const char *); +boolean_t zfs_prop_userquota(const char *); +boolean_t zfs_prop_written(const char *); +int zfs_prop_index_to_string(zfs_prop_t, uint64_t, const char **); +int zfs_prop_string_to_index(zfs_prop_t, const char *, uint64_t *); +uint64_t zfs_prop_random_value(zfs_prop_t, uint64_t seed); +boolean_t zfs_prop_valid_for_type(int, zfs_type_t, boolean_t); + +/* + * Pool property functions shared between libzfs and kernel. + */ +zpool_prop_t zpool_name_to_prop(const char *); +const char *zpool_prop_to_name(zpool_prop_t); +const char *zpool_prop_default_string(zpool_prop_t); +uint64_t zpool_prop_default_numeric(zpool_prop_t); +boolean_t zpool_prop_readonly(zpool_prop_t); +boolean_t zpool_prop_feature(const char *); +boolean_t zpool_prop_unsupported(const char *); +int zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **); +int zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *); +uint64_t zpool_prop_random_value(zpool_prop_t, uint64_t seed); + +/* + * Definitions for the Delegation. + */ +typedef enum { + ZFS_DELEG_WHO_UNKNOWN = 0, + ZFS_DELEG_USER = 'u', + ZFS_DELEG_USER_SETS = 'U', + ZFS_DELEG_GROUP = 'g', + ZFS_DELEG_GROUP_SETS = 'G', + ZFS_DELEG_EVERYONE = 'e', + ZFS_DELEG_EVERYONE_SETS = 'E', + ZFS_DELEG_CREATE = 'c', + ZFS_DELEG_CREATE_SETS = 'C', + ZFS_DELEG_NAMED_SET = 's', + ZFS_DELEG_NAMED_SET_SETS = 'S' +} zfs_deleg_who_type_t; + +typedef enum { + ZFS_DELEG_NONE = 0, + ZFS_DELEG_PERM_LOCAL = 1, + ZFS_DELEG_PERM_DESCENDENT = 2, + ZFS_DELEG_PERM_LOCALDESCENDENT = 3, + ZFS_DELEG_PERM_CREATE = 4 +} zfs_deleg_inherit_t; + +#define ZFS_DELEG_PERM_UID "uid" +#define ZFS_DELEG_PERM_GID "gid" +#define ZFS_DELEG_PERM_GROUPS "groups" + +#define ZFS_MLSLABEL_DEFAULT "none" + +#define ZFS_SMB_ACL_SRC "src" +#define ZFS_SMB_ACL_TARGET "target" + +typedef enum { + ZFS_CANMOUNT_OFF = 0, + ZFS_CANMOUNT_ON = 1, + ZFS_CANMOUNT_NOAUTO = 2 +} zfs_canmount_type_t; + +typedef enum { + ZFS_LOGBIAS_LATENCY = 0, + ZFS_LOGBIAS_THROUGHPUT = 1 +} zfs_logbias_op_t; + +typedef enum zfs_share_op { + ZFS_SHARE_NFS = 0, + ZFS_UNSHARE_NFS = 1, + ZFS_SHARE_SMB = 2, + ZFS_UNSHARE_SMB = 3 +} zfs_share_op_t; + +typedef enum zfs_smb_acl_op { + ZFS_SMB_ACL_ADD, + ZFS_SMB_ACL_REMOVE, + ZFS_SMB_ACL_RENAME, + ZFS_SMB_ACL_PURGE +} zfs_smb_acl_op_t; + +typedef enum zfs_cache_type { + ZFS_CACHE_NONE = 0, + ZFS_CACHE_METADATA = 1, + ZFS_CACHE_ALL = 2 +} zfs_cache_type_t; + +typedef enum { + ZFS_SYNC_STANDARD = 0, + ZFS_SYNC_ALWAYS = 1, + ZFS_SYNC_DISABLED = 2 +} zfs_sync_type_t; + +typedef enum { + ZFS_XATTR_OFF = 0, + ZFS_XATTR_DIR = 1, + ZFS_XATTR_SA = 2 +} zfs_xattr_type_t; + +typedef enum { + ZFS_DNSIZE_LEGACY = 0, + ZFS_DNSIZE_AUTO = 1, + ZFS_DNSIZE_1K = 1024, + ZFS_DNSIZE_2K = 2048, + ZFS_DNSIZE_4K = 4096, + ZFS_DNSIZE_8K = 8192, + ZFS_DNSIZE_16K = 16384 +} zfs_dnsize_type_t; + +typedef enum { + ZFS_REDUNDANT_METADATA_ALL, + ZFS_REDUNDANT_METADATA_MOST +} zfs_redundant_metadata_type_t; + +typedef enum { + ZFS_VOLMODE_DEFAULT = 0, + ZFS_VOLMODE_GEOM = 1, + ZFS_VOLMODE_DEV = 2, + ZFS_VOLMODE_NONE = 3 +} zfs_volmode_t; + +/* + * On-disk version number. + */ +#define SPA_VERSION_1 1ULL +#define SPA_VERSION_2 2ULL +#define SPA_VERSION_3 3ULL +#define SPA_VERSION_4 4ULL +#define SPA_VERSION_5 5ULL +#define SPA_VERSION_6 6ULL +#define SPA_VERSION_7 7ULL +#define SPA_VERSION_8 8ULL +#define SPA_VERSION_9 9ULL +#define SPA_VERSION_10 10ULL +#define SPA_VERSION_11 11ULL +#define SPA_VERSION_12 12ULL +#define SPA_VERSION_13 13ULL +#define SPA_VERSION_14 14ULL +#define SPA_VERSION_15 15ULL +#define SPA_VERSION_16 16ULL +#define SPA_VERSION_17 17ULL +#define SPA_VERSION_18 18ULL +#define SPA_VERSION_19 19ULL +#define SPA_VERSION_20 20ULL +#define SPA_VERSION_21 21ULL +#define SPA_VERSION_22 22ULL +#define SPA_VERSION_23 23ULL +#define SPA_VERSION_24 24ULL +#define SPA_VERSION_25 25ULL +#define SPA_VERSION_26 26ULL +#define SPA_VERSION_27 27ULL +#define SPA_VERSION_28 28ULL +#define SPA_VERSION_5000 5000ULL + +/* + * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk + * format change. Go to usr/src/grub/grub-0.97/stage2/{zfs-include/, fsys_zfs*}, + * and do the appropriate changes. Also bump the version number in + * usr/src/grub/capability. + */ +#define SPA_VERSION SPA_VERSION_5000 +#define SPA_VERSION_STRING "5000" + +/* + * Symbolic names for the changes that caused a SPA_VERSION switch. + * Used in the code when checking for presence or absence of a feature. + * Feel free to define multiple symbolic names for each version if there + * were multiple changes to on-disk structures during that version. + * + * NOTE: When checking the current SPA_VERSION in your code, be sure + * to use spa_version() since it reports the version of the + * last synced uberblock. Checking the in-flight version can + * be dangerous in some cases. + */ +#define SPA_VERSION_INITIAL SPA_VERSION_1 +#define SPA_VERSION_DITTO_BLOCKS SPA_VERSION_2 +#define SPA_VERSION_SPARES SPA_VERSION_3 +#define SPA_VERSION_RAIDZ2 SPA_VERSION_3 +#define SPA_VERSION_BPOBJ_ACCOUNT SPA_VERSION_3 +#define SPA_VERSION_RAIDZ_DEFLATE SPA_VERSION_3 +#define SPA_VERSION_DNODE_BYTES SPA_VERSION_3 +#define SPA_VERSION_ZPOOL_HISTORY SPA_VERSION_4 +#define SPA_VERSION_GZIP_COMPRESSION SPA_VERSION_5 +#define SPA_VERSION_BOOTFS SPA_VERSION_6 +#define SPA_VERSION_SLOGS SPA_VERSION_7 +#define SPA_VERSION_DELEGATED_PERMS SPA_VERSION_8 +#define SPA_VERSION_FUID SPA_VERSION_9 +#define SPA_VERSION_REFRESERVATION SPA_VERSION_9 +#define SPA_VERSION_REFQUOTA SPA_VERSION_9 +#define SPA_VERSION_UNIQUE_ACCURATE SPA_VERSION_9 +#define SPA_VERSION_L2CACHE SPA_VERSION_10 +#define SPA_VERSION_NEXT_CLONES SPA_VERSION_11 +#define SPA_VERSION_ORIGIN SPA_VERSION_11 +#define SPA_VERSION_DSL_SCRUB SPA_VERSION_11 +#define SPA_VERSION_SNAP_PROPS SPA_VERSION_12 +#define SPA_VERSION_USED_BREAKDOWN SPA_VERSION_13 +#define SPA_VERSION_PASSTHROUGH_X SPA_VERSION_14 +#define SPA_VERSION_USERSPACE SPA_VERSION_15 +#define SPA_VERSION_STMF_PROP SPA_VERSION_16 +#define SPA_VERSION_RAIDZ3 SPA_VERSION_17 +#define SPA_VERSION_USERREFS SPA_VERSION_18 +#define SPA_VERSION_HOLES SPA_VERSION_19 +#define SPA_VERSION_ZLE_COMPRESSION SPA_VERSION_20 +#define SPA_VERSION_DEDUP SPA_VERSION_21 +#define SPA_VERSION_RECVD_PROPS SPA_VERSION_22 +#define SPA_VERSION_SLIM_ZIL SPA_VERSION_23 +#define SPA_VERSION_SA SPA_VERSION_24 +#define SPA_VERSION_SCAN SPA_VERSION_25 +#define SPA_VERSION_DIR_CLONES SPA_VERSION_26 +#define SPA_VERSION_DEADLISTS SPA_VERSION_26 +#define SPA_VERSION_FAST_SNAP SPA_VERSION_27 +#define SPA_VERSION_MULTI_REPLACE SPA_VERSION_28 +#define SPA_VERSION_BEFORE_FEATURES SPA_VERSION_28 +#define SPA_VERSION_FEATURES SPA_VERSION_5000 + +#define SPA_VERSION_IS_SUPPORTED(v) \ + (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \ + ((v) >= SPA_VERSION_FEATURES && (v) <= SPA_VERSION)) + +/* + * ZPL version - rev'd whenever an incompatible on-disk format change + * occurs. This is independent of SPA/DMU/ZAP versioning. You must + * also update the version_table[] and help message in zfs_prop.c. + * + * When changing, be sure to teach GRUB how to read the new format! + * See usr/src/grub/grub-0.97/stage2/{zfs-include/,fsys_zfs*} + */ +#define ZPL_VERSION_1 1ULL +#define ZPL_VERSION_2 2ULL +#define ZPL_VERSION_3 3ULL +#define ZPL_VERSION_4 4ULL +#define ZPL_VERSION_5 5ULL +#define ZPL_VERSION ZPL_VERSION_5 +#define ZPL_VERSION_STRING "5" + +#define ZPL_VERSION_INITIAL ZPL_VERSION_1 +#define ZPL_VERSION_DIRENT_TYPE ZPL_VERSION_2 +#define ZPL_VERSION_FUID ZPL_VERSION_3 +#define ZPL_VERSION_NORMALIZATION ZPL_VERSION_3 +#define ZPL_VERSION_SYSATTR ZPL_VERSION_3 +#define ZPL_VERSION_USERSPACE ZPL_VERSION_4 +#define ZPL_VERSION_SA ZPL_VERSION_5 + +/* Rewind request information */ +#define ZPOOL_NO_REWIND 1 /* No policy - default behavior */ +#define ZPOOL_NEVER_REWIND 2 /* Do not search for best txg or rewind */ +#define ZPOOL_TRY_REWIND 4 /* Search for best txg, but do not rewind */ +#define ZPOOL_DO_REWIND 8 /* Rewind to best txg w/in deferred frees */ +#define ZPOOL_EXTREME_REWIND 16 /* Allow extreme measures to find best txg */ +#define ZPOOL_REWIND_MASK 28 /* All the possible rewind bits */ +#define ZPOOL_REWIND_POLICIES 31 /* All the possible policy bits */ + +typedef struct zpool_rewind_policy { + uint32_t zrp_request; /* rewind behavior requested */ + uint64_t zrp_maxmeta; /* max acceptable meta-data errors */ + uint64_t zrp_maxdata; /* max acceptable data errors */ + uint64_t zrp_txg; /* specific txg to load */ +} zpool_rewind_policy_t; + +/* + * The following are configuration names used in the nvlist describing a pool's + * configuration. + */ +#define ZPOOL_CONFIG_VERSION "version" +#define ZPOOL_CONFIG_POOL_NAME "name" +#define ZPOOL_CONFIG_POOL_STATE "state" +#define ZPOOL_CONFIG_POOL_TXG "txg" +#define ZPOOL_CONFIG_POOL_GUID "pool_guid" +#define ZPOOL_CONFIG_CREATE_TXG "create_txg" +#define ZPOOL_CONFIG_TOP_GUID "top_guid" +#define ZPOOL_CONFIG_VDEV_TREE "vdev_tree" +#define ZPOOL_CONFIG_TYPE "type" +#define ZPOOL_CONFIG_CHILDREN "children" +#define ZPOOL_CONFIG_ID "id" +#define ZPOOL_CONFIG_GUID "guid" +#define ZPOOL_CONFIG_PATH "path" +#define ZPOOL_CONFIG_DEVID "devid" +#define ZPOOL_CONFIG_METASLAB_ARRAY "metaslab_array" +#define ZPOOL_CONFIG_METASLAB_SHIFT "metaslab_shift" +#define ZPOOL_CONFIG_ASHIFT "ashift" +#define ZPOOL_CONFIG_ASIZE "asize" +#define ZPOOL_CONFIG_DTL "DTL" +#define ZPOOL_CONFIG_SCAN_STATS "scan_stats" /* not stored on disk */ +#define ZPOOL_CONFIG_VDEV_STATS "vdev_stats" /* not stored on disk */ + +/* container nvlist of extended stats */ +#define ZPOOL_CONFIG_VDEV_STATS_EX "vdev_stats_ex" + +/* Active queue read/write stats */ +#define ZPOOL_CONFIG_VDEV_SYNC_R_ACTIVE_QUEUE "vdev_sync_r_active_queue" +#define ZPOOL_CONFIG_VDEV_SYNC_W_ACTIVE_QUEUE "vdev_sync_w_active_queue" +#define ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE "vdev_async_r_active_queue" +#define ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE "vdev_async_w_active_queue" +#define ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE "vdev_async_scrub_active_queue" + +/* Queue sizes */ +#define ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE "vdev_sync_r_pend_queue" +#define ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE "vdev_sync_w_pend_queue" +#define ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE "vdev_async_r_pend_queue" +#define ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE "vdev_async_w_pend_queue" +#define ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE "vdev_async_scrub_pend_queue" + +/* Latency read/write histogram stats */ +#define ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO "vdev_tot_r_lat_histo" +#define ZPOOL_CONFIG_VDEV_TOT_W_LAT_HISTO "vdev_tot_w_lat_histo" +#define ZPOOL_CONFIG_VDEV_DISK_R_LAT_HISTO "vdev_disk_r_lat_histo" +#define ZPOOL_CONFIG_VDEV_DISK_W_LAT_HISTO "vdev_disk_w_lat_histo" +#define ZPOOL_CONFIG_VDEV_SYNC_R_LAT_HISTO "vdev_sync_r_lat_histo" +#define ZPOOL_CONFIG_VDEV_SYNC_W_LAT_HISTO "vdev_sync_w_lat_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_R_LAT_HISTO "vdev_async_r_lat_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO "vdev_async_w_lat_histo" +#define ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO "vdev_scrub_histo" + +/* Request size histograms */ +#define ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO "vdev_sync_ind_r_histo" +#define ZPOOL_CONFIG_VDEV_SYNC_IND_W_HISTO "vdev_sync_ind_w_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_IND_R_HISTO "vdev_async_ind_r_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_IND_W_HISTO "vdev_async_ind_w_histo" +#define ZPOOL_CONFIG_VDEV_IND_SCRUB_HISTO "vdev_ind_scrub_histo" +#define ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO "vdev_sync_agg_r_histo" +#define ZPOOL_CONFIG_VDEV_SYNC_AGG_W_HISTO "vdev_sync_agg_w_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_R_HISTO "vdev_async_agg_r_histo" +#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_W_HISTO "vdev_async_agg_w_histo" +#define ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO "vdev_agg_scrub_histo" + +/* vdev enclosure sysfs path */ +#define ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH "vdev_enc_sysfs_path" + +#define ZPOOL_CONFIG_WHOLE_DISK "whole_disk" +#define ZPOOL_CONFIG_ERRCOUNT "error_count" +#define ZPOOL_CONFIG_NOT_PRESENT "not_present" +#define ZPOOL_CONFIG_SPARES "spares" +#define ZPOOL_CONFIG_IS_SPARE "is_spare" +#define ZPOOL_CONFIG_NPARITY "nparity" +#define ZPOOL_CONFIG_HOSTID "hostid" +#define ZPOOL_CONFIG_HOSTNAME "hostname" +#define ZPOOL_CONFIG_LOADED_TIME "initial_load_time" +#define ZPOOL_CONFIG_UNSPARE "unspare" +#define ZPOOL_CONFIG_PHYS_PATH "phys_path" +#define ZPOOL_CONFIG_IS_LOG "is_log" +#define ZPOOL_CONFIG_L2CACHE "l2cache" +#define ZPOOL_CONFIG_HOLE_ARRAY "hole_array" +#define ZPOOL_CONFIG_VDEV_CHILDREN "vdev_children" +#define ZPOOL_CONFIG_IS_HOLE "is_hole" +#define ZPOOL_CONFIG_DDT_HISTOGRAM "ddt_histogram" +#define ZPOOL_CONFIG_DDT_OBJ_STATS "ddt_object_stats" +#define ZPOOL_CONFIG_DDT_STATS "ddt_stats" +#define ZPOOL_CONFIG_SPLIT "splitcfg" +#define ZPOOL_CONFIG_ORIG_GUID "orig_guid" +#define ZPOOL_CONFIG_SPLIT_GUID "split_guid" +#define ZPOOL_CONFIG_SPLIT_LIST "guid_list" +#define ZPOOL_CONFIG_REMOVING "removing" +#define ZPOOL_CONFIG_RESILVER_TXG "resilver_txg" +#define ZPOOL_CONFIG_COMMENT "comment" +#define ZPOOL_CONFIG_SUSPENDED "suspended" /* not stored on disk */ +#define ZPOOL_CONFIG_TIMESTAMP "timestamp" /* not stored on disk */ +#define ZPOOL_CONFIG_BOOTFS "bootfs" /* not stored on disk */ +#define ZPOOL_CONFIG_MISSING_DEVICES "missing_vdevs" /* not stored on disk */ +#define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */ +#define ZPOOL_CONFIG_REWIND_INFO "rewind_info" /* not stored on disk */ +#define ZPOOL_CONFIG_UNSUP_FEAT "unsup_feat" /* not stored on disk */ +#define ZPOOL_CONFIG_ENABLED_FEAT "enabled_feat" /* not stored on disk */ +#define ZPOOL_CONFIG_CAN_RDONLY "can_rdonly" /* not stored on disk */ +#define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read" +#define ZPOOL_CONFIG_FEATURE_STATS "feature_stats" /* not stored on disk */ +#define ZPOOL_CONFIG_ERRATA "errata" /* not stored on disk */ +#define ZPOOL_CONFIG_VDEV_TOP_ZAP "com.delphix:vdev_zap_top" +#define ZPOOL_CONFIG_VDEV_LEAF_ZAP "com.delphix:vdev_zap_leaf" +#define ZPOOL_CONFIG_HAS_PER_VDEV_ZAPS "com.delphix:has_per_vdev_zaps" +#define ZPOOL_CONFIG_MMP_STATE "mmp_state" /* not stored on disk */ +#define ZPOOL_CONFIG_MMP_TXG "mmp_txg" /* not stored on disk */ +#define ZPOOL_CONFIG_MMP_HOSTNAME "mmp_hostname" /* not stored on disk */ +#define ZPOOL_CONFIG_MMP_HOSTID "mmp_hostid" /* not stored on disk */ + +/* + * The persistent vdev state is stored as separate values rather than a single + * 'vdev_state' entry. This is because a device can be in multiple states, such + * as offline and degraded. + */ +#define ZPOOL_CONFIG_OFFLINE "offline" +#define ZPOOL_CONFIG_FAULTED "faulted" +#define ZPOOL_CONFIG_DEGRADED "degraded" +#define ZPOOL_CONFIG_REMOVED "removed" +#define ZPOOL_CONFIG_FRU "fru" +#define ZPOOL_CONFIG_AUX_STATE "aux_state" + +/* Rewind policy parameters */ +#define ZPOOL_REWIND_POLICY "rewind-policy" +#define ZPOOL_REWIND_REQUEST "rewind-request" +#define ZPOOL_REWIND_REQUEST_TXG "rewind-request-txg" +#define ZPOOL_REWIND_META_THRESH "rewind-meta-thresh" +#define ZPOOL_REWIND_DATA_THRESH "rewind-data-thresh" + +/* Rewind data discovered */ +#define ZPOOL_CONFIG_LOAD_TIME "rewind_txg_ts" +#define ZPOOL_CONFIG_LOAD_DATA_ERRORS "verify_data_errors" +#define ZPOOL_CONFIG_REWIND_TIME "seconds_of_rewind" + +#define VDEV_TYPE_ROOT "root" +#define VDEV_TYPE_MIRROR "mirror" +#define VDEV_TYPE_REPLACING "replacing" +#define VDEV_TYPE_RAIDZ "raidz" +#define VDEV_TYPE_DISK "disk" +#define VDEV_TYPE_FILE "file" +#define VDEV_TYPE_MISSING "missing" +#define VDEV_TYPE_HOLE "hole" +#define VDEV_TYPE_SPARE "spare" +#define VDEV_TYPE_LOG "log" +#define VDEV_TYPE_L2CACHE "l2cache" + +/* + * This is needed in userland to report the minimum necessary device size. + */ +#define SPA_MINDEVSIZE (64ULL << 20) + +/* + * Set if the fragmentation has not yet been calculated. This can happen + * because the space maps have not been upgraded or the histogram feature + * is not enabled. + */ +#define ZFS_FRAG_INVALID UINT64_MAX + +/* + * The location of the pool configuration repository, shared between kernel and + * userland. + */ +#define ZPOOL_CACHE "/etc/zfs/zpool.cache" + +/* + * vdev states are ordered from least to most healthy. + * A vdev that's CANT_OPEN or below is considered unusable. + */ +typedef enum vdev_state { + VDEV_STATE_UNKNOWN = 0, /* Uninitialized vdev */ + VDEV_STATE_CLOSED, /* Not currently open */ + VDEV_STATE_OFFLINE, /* Not allowed to open */ + VDEV_STATE_REMOVED, /* Explicitly removed from system */ + VDEV_STATE_CANT_OPEN, /* Tried to open, but failed */ + VDEV_STATE_FAULTED, /* External request to fault device */ + VDEV_STATE_DEGRADED, /* Replicated vdev with unhealthy kids */ + VDEV_STATE_HEALTHY /* Presumed good */ +} vdev_state_t; + +#define VDEV_STATE_ONLINE VDEV_STATE_HEALTHY + +/* + * vdev aux states. When a vdev is in the CANT_OPEN state, the aux field + * of the vdev stats structure uses these constants to distinguish why. + */ +typedef enum vdev_aux { + VDEV_AUX_NONE, /* no error */ + VDEV_AUX_OPEN_FAILED, /* ldi_open_*() or vn_open() failed */ + VDEV_AUX_CORRUPT_DATA, /* bad label or disk contents */ + VDEV_AUX_NO_REPLICAS, /* insufficient number of replicas */ + VDEV_AUX_BAD_GUID_SUM, /* vdev guid sum doesn't match */ + VDEV_AUX_TOO_SMALL, /* vdev size is too small */ + VDEV_AUX_BAD_LABEL, /* the label is OK but invalid */ + VDEV_AUX_VERSION_NEWER, /* on-disk version is too new */ + VDEV_AUX_VERSION_OLDER, /* on-disk version is too old */ + VDEV_AUX_UNSUP_FEAT, /* unsupported features */ + VDEV_AUX_SPARED, /* hot spare used in another pool */ + VDEV_AUX_ERR_EXCEEDED, /* too many errors */ + VDEV_AUX_IO_FAILURE, /* experienced I/O failure */ + VDEV_AUX_BAD_LOG, /* cannot read log chain(s) */ + VDEV_AUX_EXTERNAL, /* external diagnosis or forced fault */ + VDEV_AUX_SPLIT_POOL, /* vdev was split off into another pool */ + VDEV_AUX_BAD_ASHIFT, /* vdev ashift is invalid */ + VDEV_AUX_EXTERNAL_PERSIST, /* persistent forced fault */ + VDEV_AUX_ACTIVE, /* vdev active on a different host */ +} vdev_aux_t; + +/* + * pool state. The following states are written to disk as part of the normal + * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE. The remaining + * states are software abstractions used at various levels to communicate + * pool state. + */ +typedef enum pool_state { + POOL_STATE_ACTIVE = 0, /* In active use */ + POOL_STATE_EXPORTED, /* Explicitly exported */ + POOL_STATE_DESTROYED, /* Explicitly destroyed */ + POOL_STATE_SPARE, /* Reserved for hot spare use */ + POOL_STATE_L2CACHE, /* Level 2 ARC device */ + POOL_STATE_UNINITIALIZED, /* Internal spa_t state */ + POOL_STATE_UNAVAIL, /* Internal libzfs state */ + POOL_STATE_POTENTIALLY_ACTIVE /* Internal libzfs state */ +} pool_state_t; + +/* + * mmp state. The following states provide additional detail describing + * why a pool couldn't be safely imported. + */ +typedef enum mmp_state { + MMP_STATE_ACTIVE = 0, /* In active use */ + MMP_STATE_INACTIVE, /* Inactive and safe to import */ + MMP_STATE_NO_HOSTID /* System hostid is not set */ +} mmp_state_t; + +/* + * Scan Functions. + */ +typedef enum pool_scan_func { + POOL_SCAN_NONE, + POOL_SCAN_SCRUB, + POOL_SCAN_RESILVER, + POOL_SCAN_FUNCS +} pool_scan_func_t; + +/* + * Used to control scrub pause and resume. + */ +typedef enum pool_scrub_cmd { + POOL_SCRUB_NORMAL = 0, + POOL_SCRUB_PAUSE, + POOL_SCRUB_FLAGS_END +} pool_scrub_cmd_t; + + +/* + * ZIO types. Needed to interpret vdev statistics below. + */ +typedef enum zio_type { + ZIO_TYPE_NULL = 0, + ZIO_TYPE_READ, + ZIO_TYPE_WRITE, + ZIO_TYPE_FREE, + ZIO_TYPE_CLAIM, + ZIO_TYPE_IOCTL, + ZIO_TYPES +} zio_type_t; + +/* + * Pool statistics. Note: all fields should be 64-bit because this + * is passed between kernel and userland as an nvlist uint64 array. + */ +typedef struct pool_scan_stat { + /* values stored on disk */ + uint64_t pss_func; /* pool_scan_func_t */ + uint64_t pss_state; /* dsl_scan_state_t */ + uint64_t pss_start_time; /* scan start time */ + uint64_t pss_end_time; /* scan end time */ + uint64_t pss_to_examine; /* total bytes to scan */ + uint64_t pss_examined; /* total examined bytes */ + uint64_t pss_to_process; /* total bytes to process */ + uint64_t pss_processed; /* total processed bytes */ + uint64_t pss_errors; /* scan errors */ + + /* values not stored on disk */ + uint64_t pss_pass_exam; /* examined bytes per scan pass */ + uint64_t pss_pass_start; /* start time of a scan pass */ + uint64_t pss_pass_scrub_pause; /* pause time of a scurb pass */ + /* cumulative time scrub spent paused, needed for rate calculation */ + uint64_t pss_pass_scrub_spent_paused; +} pool_scan_stat_t; + +typedef enum dsl_scan_state { + DSS_NONE, + DSS_SCANNING, + DSS_FINISHED, + DSS_CANCELED, + DSS_NUM_STATES +} dsl_scan_state_t; + +/* + * Errata described by http://zfsonlinux.org/msg/ZFS-8000-ER. The ordering + * of this enum must be maintained to ensure the errata identifiers map to + * the correct documentation. New errata may only be appended to the list + * and must contain corresponding documentation at the above link. + */ +typedef enum zpool_errata { + ZPOOL_ERRATA_NONE, + ZPOOL_ERRATA_ZOL_2094_SCRUB, + ZPOOL_ERRATA_ZOL_2094_ASYNC_DESTROY, +} zpool_errata_t; + +/* + * Vdev statistics. Note: all fields should be 64-bit because this + * is passed between kernel and userland as an nvlist uint64 array. + */ +typedef struct vdev_stat { + hrtime_t vs_timestamp; /* time since vdev load */ + uint64_t vs_state; /* vdev state */ + uint64_t vs_aux; /* see vdev_aux_t */ + uint64_t vs_alloc; /* space allocated */ + uint64_t vs_space; /* total capacity */ + uint64_t vs_dspace; /* deflated capacity */ + uint64_t vs_rsize; /* replaceable dev size */ + uint64_t vs_esize; /* expandable dev size */ + uint64_t vs_ops[ZIO_TYPES]; /* operation count */ + uint64_t vs_bytes[ZIO_TYPES]; /* bytes read/written */ + uint64_t vs_read_errors; /* read errors */ + uint64_t vs_write_errors; /* write errors */ + uint64_t vs_checksum_errors; /* checksum errors */ + uint64_t vs_self_healed; /* self-healed bytes */ + uint64_t vs_scan_removing; /* removing? */ + uint64_t vs_scan_processed; /* scan processed bytes */ + uint64_t vs_fragmentation; /* device fragmentation */ + +} vdev_stat_t; + +/* + * Extended stats + * + * These are stats which aren't included in the original iostat output. For + * convenience, they are grouped together in vdev_stat_ex, although each stat + * is individually exported as an nvlist. + */ +typedef struct vdev_stat_ex { + /* Number of ZIOs issued to disk and waiting to finish */ + uint64_t vsx_active_queue[ZIO_PRIORITY_NUM_QUEUEABLE]; + + /* Number of ZIOs pending to be issued to disk */ + uint64_t vsx_pend_queue[ZIO_PRIORITY_NUM_QUEUEABLE]; + + /* + * Below are the histograms for various latencies. Buckets are in + * units of nanoseconds. + */ + + /* + * 2^37 nanoseconds = 134s. Timeouts will probably start kicking in + * before this. + */ +#define VDEV_L_HISTO_BUCKETS 37 /* Latency histo buckets */ +#define VDEV_RQ_HISTO_BUCKETS 25 /* Request size histo buckets */ + + + /* Amount of time in ZIO queue (ns) */ + uint64_t vsx_queue_histo[ZIO_PRIORITY_NUM_QUEUEABLE] + [VDEV_L_HISTO_BUCKETS]; + + /* Total ZIO latency (ns). Includes queuing and disk access time */ + uint64_t vsx_total_histo[ZIO_TYPES][VDEV_L_HISTO_BUCKETS]; + + /* Amount of time to read/write the disk (ns) */ + uint64_t vsx_disk_histo[ZIO_TYPES][VDEV_L_HISTO_BUCKETS]; + + /* "lookup the bucket for a value" histogram macros */ +#define HISTO(val, buckets) (val != 0 ? MIN(highbit64(val) - 1, \ + buckets - 1) : 0) +#define L_HISTO(a) HISTO(a, VDEV_L_HISTO_BUCKETS) +#define RQ_HISTO(a) HISTO(a, VDEV_RQ_HISTO_BUCKETS) + + /* Physical IO histogram */ + uint64_t vsx_ind_histo[ZIO_PRIORITY_NUM_QUEUEABLE] + [VDEV_RQ_HISTO_BUCKETS]; + + /* Delegated (aggregated) physical IO histogram */ + uint64_t vsx_agg_histo[ZIO_PRIORITY_NUM_QUEUEABLE] + [VDEV_RQ_HISTO_BUCKETS]; + +} vdev_stat_ex_t; + +/* + * DDT statistics. Note: all fields should be 64-bit because this + * is passed between kernel and userland as an nvlist uint64 array. + */ +typedef struct ddt_object { + uint64_t ddo_count; /* number of elements in ddt */ + uint64_t ddo_dspace; /* size of ddt on disk */ + uint64_t ddo_mspace; /* size of ddt in-core */ +} ddt_object_t; + +typedef struct ddt_stat { + uint64_t dds_blocks; /* blocks */ + uint64_t dds_lsize; /* logical size */ + uint64_t dds_psize; /* physical size */ + uint64_t dds_dsize; /* deflated allocated size */ + uint64_t dds_ref_blocks; /* referenced blocks */ + uint64_t dds_ref_lsize; /* referenced lsize * refcnt */ + uint64_t dds_ref_psize; /* referenced psize * refcnt */ + uint64_t dds_ref_dsize; /* referenced dsize * refcnt */ +} ddt_stat_t; + +typedef struct ddt_histogram { + ddt_stat_t ddh_stat[64]; /* power-of-two histogram buckets */ +} ddt_histogram_t; + +#define ZVOL_DRIVER "zvol" +#define ZFS_DRIVER "zfs" +#define ZFS_DEV "/dev/zfs" +#define ZFS_SHARETAB "/etc/dfs/sharetab" + +#define ZFS_SUPER_MAGIC 0x2fc12fc1 + +/* general zvol path */ +#define ZVOL_DIR "/dev" + +#define ZVOL_MAJOR 230 +#define ZVOL_MINOR_BITS 4 +#define ZVOL_MINOR_MASK ((1U << ZVOL_MINOR_BITS) - 1) +#define ZVOL_MINORS (1 << 4) +#define ZVOL_DEV_NAME "zd" + +#define ZVOL_PROP_NAME "name" +#define ZVOL_DEFAULT_BLOCKSIZE 8192 + +/* + * /dev/zfs ioctl numbers. + */ +typedef enum zfs_ioc { + /* + * Illumos - 71/128 numbers reserved. + */ + ZFS_IOC_FIRST = ('Z' << 8), + ZFS_IOC = ZFS_IOC_FIRST, + ZFS_IOC_POOL_CREATE = ZFS_IOC_FIRST, + ZFS_IOC_POOL_DESTROY, + ZFS_IOC_POOL_IMPORT, + ZFS_IOC_POOL_EXPORT, + ZFS_IOC_POOL_CONFIGS, + ZFS_IOC_POOL_STATS, + ZFS_IOC_POOL_TRYIMPORT, + ZFS_IOC_POOL_SCAN, + ZFS_IOC_POOL_FREEZE, + ZFS_IOC_POOL_UPGRADE, + ZFS_IOC_POOL_GET_HISTORY, + ZFS_IOC_VDEV_ADD, + ZFS_IOC_VDEV_REMOVE, + ZFS_IOC_VDEV_SET_STATE, + ZFS_IOC_VDEV_ATTACH, + ZFS_IOC_VDEV_DETACH, + ZFS_IOC_VDEV_SETPATH, + ZFS_IOC_VDEV_SETFRU, + ZFS_IOC_OBJSET_STATS, + ZFS_IOC_OBJSET_ZPLPROPS, + ZFS_IOC_DATASET_LIST_NEXT, + ZFS_IOC_SNAPSHOT_LIST_NEXT, + ZFS_IOC_SET_PROP, + ZFS_IOC_CREATE, + ZFS_IOC_DESTROY, + ZFS_IOC_ROLLBACK, + ZFS_IOC_RENAME, + ZFS_IOC_RECV, + ZFS_IOC_SEND, + ZFS_IOC_INJECT_FAULT, + ZFS_IOC_CLEAR_FAULT, + ZFS_IOC_INJECT_LIST_NEXT, + ZFS_IOC_ERROR_LOG, + ZFS_IOC_CLEAR, + ZFS_IOC_PROMOTE, + ZFS_IOC_SNAPSHOT, + ZFS_IOC_DSOBJ_TO_DSNAME, + ZFS_IOC_OBJ_TO_PATH, + ZFS_IOC_POOL_SET_PROPS, + ZFS_IOC_POOL_GET_PROPS, + ZFS_IOC_SET_FSACL, + ZFS_IOC_GET_FSACL, + ZFS_IOC_SHARE, + ZFS_IOC_INHERIT_PROP, + ZFS_IOC_SMB_ACL, + ZFS_IOC_USERSPACE_ONE, + ZFS_IOC_USERSPACE_MANY, + ZFS_IOC_USERSPACE_UPGRADE, + ZFS_IOC_HOLD, + ZFS_IOC_RELEASE, + ZFS_IOC_GET_HOLDS, + ZFS_IOC_OBJSET_RECVD_PROPS, + ZFS_IOC_VDEV_SPLIT, + ZFS_IOC_NEXT_OBJ, + ZFS_IOC_DIFF, + ZFS_IOC_TMP_SNAPSHOT, + ZFS_IOC_OBJ_TO_STATS, + ZFS_IOC_SPACE_WRITTEN, + ZFS_IOC_SPACE_SNAPS, + ZFS_IOC_DESTROY_SNAPS, + ZFS_IOC_POOL_REGUID, + ZFS_IOC_POOL_REOPEN, + ZFS_IOC_SEND_PROGRESS, + ZFS_IOC_LOG_HISTORY, + ZFS_IOC_SEND_NEW, + ZFS_IOC_SEND_SPACE, + ZFS_IOC_CLONE, + ZFS_IOC_BOOKMARK, + ZFS_IOC_GET_BOOKMARKS, + ZFS_IOC_DESTROY_BOOKMARKS, + ZFS_IOC_RECV_NEW, + ZFS_IOC_POOL_SYNC, + + /* + * Linux - 3/64 numbers reserved. + */ + ZFS_IOC_LINUX = ('Z' << 8) + 0x80, + ZFS_IOC_EVENTS_NEXT, + ZFS_IOC_EVENTS_CLEAR, + ZFS_IOC_EVENTS_SEEK, + + /* + * FreeBSD - 1/64 numbers reserved. + */ + ZFS_IOC_FREEBSD = ('Z' << 8) + 0xC0, + + ZFS_IOC_LAST +} zfs_ioc_t; + +/* + * zvol ioctl to get dataset name + */ +#define BLKZNAME _IOR(0x12, 125, char[ZFS_MAX_DATASET_NAME_LEN]) + +/* + * Internal SPA load state. Used by FMA diagnosis engine. + */ +typedef enum { + SPA_LOAD_NONE, /* no load in progress */ + SPA_LOAD_OPEN, /* normal open */ + SPA_LOAD_IMPORT, /* import in progress */ + SPA_LOAD_TRYIMPORT, /* tryimport in progress */ + SPA_LOAD_RECOVER, /* recovery requested */ + SPA_LOAD_ERROR, /* load failed */ + SPA_LOAD_CREATE /* creation in progress */ +} spa_load_state_t; + +/* + * Bookmark name values. + */ +#define ZPOOL_ERR_LIST "error list" +#define ZPOOL_ERR_DATASET "dataset" +#define ZPOOL_ERR_OBJECT "object" + +#define HIS_MAX_RECORD_LEN (MAXPATHLEN + MAXPATHLEN + 1) + +/* + * The following are names used in the nvlist describing + * the pool's history log. + */ +#define ZPOOL_HIST_RECORD "history record" +#define ZPOOL_HIST_TIME "history time" +#define ZPOOL_HIST_CMD "history command" +#define ZPOOL_HIST_WHO "history who" +#define ZPOOL_HIST_ZONE "history zone" +#define ZPOOL_HIST_HOST "history hostname" +#define ZPOOL_HIST_TXG "history txg" +#define ZPOOL_HIST_INT_EVENT "history internal event" +#define ZPOOL_HIST_INT_STR "history internal str" +#define ZPOOL_HIST_INT_NAME "internal_name" +#define ZPOOL_HIST_IOCTL "ioctl" +#define ZPOOL_HIST_INPUT_NVL "in_nvl" +#define ZPOOL_HIST_OUTPUT_NVL "out_nvl" +#define ZPOOL_HIST_DSNAME "dsname" +#define ZPOOL_HIST_DSID "dsid" + +/* + * Flags for ZFS_IOC_VDEV_SET_STATE + */ +#define ZFS_ONLINE_CHECKREMOVE 0x1 +#define ZFS_ONLINE_UNSPARE 0x2 +#define ZFS_ONLINE_FORCEFAULT 0x4 +#define ZFS_ONLINE_EXPAND 0x8 +#define ZFS_OFFLINE_TEMPORARY 0x1 + +/* + * Flags for ZFS_IOC_POOL_IMPORT + */ +#define ZFS_IMPORT_NORMAL 0x0 +#define ZFS_IMPORT_VERBATIM 0x1 +#define ZFS_IMPORT_ANY_HOST 0x2 +#define ZFS_IMPORT_MISSING_LOG 0x4 +#define ZFS_IMPORT_ONLY 0x8 +#define ZFS_IMPORT_TEMP_NAME 0x10 +#define ZFS_IMPORT_SKIP_MMP 0x20 + +/* + * Sysevent payload members. ZFS will generate the following sysevents with the + * given payloads: + * + * ESC_ZFS_RESILVER_START + * ESC_ZFS_RESILVER_END + * ESC_ZFS_POOL_DESTROY + * ESC_ZFS_POOL_REGUID + * + * ZFS_EV_POOL_NAME DATA_TYPE_STRING + * ZFS_EV_POOL_GUID DATA_TYPE_UINT64 + * + * ESC_ZFS_VDEV_REMOVE + * ESC_ZFS_VDEV_CLEAR + * ESC_ZFS_VDEV_CHECK + * + * ZFS_EV_POOL_NAME DATA_TYPE_STRING + * ZFS_EV_POOL_GUID DATA_TYPE_UINT64 + * ZFS_EV_VDEV_PATH DATA_TYPE_STRING (optional) + * ZFS_EV_VDEV_GUID DATA_TYPE_UINT64 + * + * ESC_ZFS_HISTORY_EVENT + * + * ZFS_EV_POOL_NAME DATA_TYPE_STRING + * ZFS_EV_POOL_GUID DATA_TYPE_UINT64 + * ZFS_EV_HIST_TIME DATA_TYPE_UINT64 (optional) + * ZFS_EV_HIST_CMD DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_WHO DATA_TYPE_UINT64 (optional) + * ZFS_EV_HIST_ZONE DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_HOST DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_TXG DATA_TYPE_UINT64 (optional) + * ZFS_EV_HIST_INT_EVENT DATA_TYPE_UINT64 (optional) + * ZFS_EV_HIST_INT_STR DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_INT_NAME DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_IOCTL DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_DSNAME DATA_TYPE_STRING (optional) + * ZFS_EV_HIST_DSID DATA_TYPE_UINT64 (optional) + * + * The ZFS_EV_HIST_* members will correspond to the ZPOOL_HIST_* members in the + * history log nvlist. The keynames will be free of any spaces or other + * characters that could be potentially unexpected to consumers of the + * sysevents. + */ +#define ZFS_EV_POOL_NAME "pool_name" +#define ZFS_EV_POOL_GUID "pool_guid" +#define ZFS_EV_VDEV_PATH "vdev_path" +#define ZFS_EV_VDEV_GUID "vdev_guid" +#define ZFS_EV_HIST_TIME "history_time" +#define ZFS_EV_HIST_CMD "history_command" +#define ZFS_EV_HIST_WHO "history_who" +#define ZFS_EV_HIST_ZONE "history_zone" +#define ZFS_EV_HIST_HOST "history_hostname" +#define ZFS_EV_HIST_TXG "history_txg" +#define ZFS_EV_HIST_INT_EVENT "history_internal_event" +#define ZFS_EV_HIST_INT_STR "history_internal_str" +#define ZFS_EV_HIST_INT_NAME "history_internal_name" +#define ZFS_EV_HIST_IOCTL "history_ioctl" +#define ZFS_EV_HIST_DSNAME "history_dsname" +#define ZFS_EV_HIST_DSID "history_dsid" + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/metaslab.h +++ linux-aws-4.15.0/zfs/include/sys/metaslab.h @@ -0,0 +1,114 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + */ + +#ifndef _SYS_METASLAB_H +#define _SYS_METASLAB_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct metaslab_ops { + uint64_t (*msop_alloc)(metaslab_t *, uint64_t); +} metaslab_ops_t; + + +extern metaslab_ops_t *zfs_metaslab_ops; + +int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t, + metaslab_t **); +void metaslab_fini(metaslab_t *); + +void metaslab_load_wait(metaslab_t *); +int metaslab_load(metaslab_t *); +void metaslab_unload(metaslab_t *); + +void metaslab_sync(metaslab_t *, uint64_t); +void metaslab_sync_done(metaslab_t *, uint64_t); +void metaslab_sync_reassess(metaslab_group_t *); +uint64_t metaslab_block_maxsize(metaslab_t *); + +#define METASLAB_HINTBP_FAVOR 0x0 +#define METASLAB_HINTBP_AVOID 0x1 +#define METASLAB_GANG_HEADER 0x2 +#define METASLAB_GANG_CHILD 0x4 +#define METASLAB_ASYNC_ALLOC 0x8 +#define METASLAB_DONT_THROTTLE 0x10 +#define METASLAB_FASTWRITE 0x20 + +int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t, + blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *); +void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t); +int metaslab_claim(spa_t *, const blkptr_t *, uint64_t); +void metaslab_check_free(spa_t *, const blkptr_t *); +void metaslab_fastwrite_mark(spa_t *, const blkptr_t *); +void metaslab_fastwrite_unmark(spa_t *, const blkptr_t *); + +void metaslab_alloc_trace_init(void); +void metaslab_alloc_trace_fini(void); +void metaslab_trace_init(zio_alloc_list_t *); +void metaslab_trace_fini(zio_alloc_list_t *); + +metaslab_class_t *metaslab_class_create(spa_t *, metaslab_ops_t *); +void metaslab_class_destroy(metaslab_class_t *); +int metaslab_class_validate(metaslab_class_t *); +void metaslab_class_histogram_verify(metaslab_class_t *); +uint64_t metaslab_class_fragmentation(metaslab_class_t *); +uint64_t metaslab_class_expandable_space(metaslab_class_t *); +boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, + zio_t *, int); +void metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *); + +void metaslab_class_space_update(metaslab_class_t *, int64_t, int64_t, + int64_t, int64_t); +uint64_t metaslab_class_get_alloc(metaslab_class_t *); +uint64_t metaslab_class_get_space(metaslab_class_t *); +uint64_t metaslab_class_get_dspace(metaslab_class_t *); +uint64_t metaslab_class_get_deferred(metaslab_class_t *); + +metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *); +void metaslab_group_destroy(metaslab_group_t *); +void metaslab_group_activate(metaslab_group_t *); +void metaslab_group_passivate(metaslab_group_t *); +boolean_t metaslab_group_initialized(metaslab_group_t *); +uint64_t metaslab_group_get_space(metaslab_group_t *); +void metaslab_group_histogram_verify(metaslab_group_t *); +uint64_t metaslab_group_fragmentation(metaslab_group_t *); +void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *); +void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int); +void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_METASLAB_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/metaslab_impl.h +++ linux-aws-4.15.0/zfs/include/sys/metaslab_impl.h @@ -0,0 +1,375 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + */ + +#ifndef _SYS_METASLAB_IMPL_H +#define _SYS_METASLAB_IMPL_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Metaslab allocation tracing record. + */ +typedef struct metaslab_alloc_trace { + list_node_t mat_list_node; + metaslab_group_t *mat_mg; + metaslab_t *mat_msp; + uint64_t mat_size; + uint64_t mat_weight; + uint32_t mat_dva_id; + uint64_t mat_offset; +} metaslab_alloc_trace_t; + +/* + * Used by the metaslab allocation tracing facility to indicate + * error conditions. These errors are stored to the offset member + * of the metaslab_alloc_trace_t record and displayed by mdb. + */ +typedef enum trace_alloc_type { + TRACE_ALLOC_FAILURE = -1ULL, + TRACE_TOO_SMALL = -2ULL, + TRACE_FORCE_GANG = -3ULL, + TRACE_NOT_ALLOCATABLE = -4ULL, + TRACE_GROUP_FAILURE = -5ULL, + TRACE_ENOSPC = -6ULL, + TRACE_CONDENSING = -7ULL, + TRACE_VDEV_ERROR = -8ULL +} trace_alloc_type_t; + +#define METASLAB_WEIGHT_PRIMARY (1ULL << 63) +#define METASLAB_WEIGHT_SECONDARY (1ULL << 62) +#define METASLAB_WEIGHT_TYPE (1ULL << 61) +#define METASLAB_ACTIVE_MASK \ + (METASLAB_WEIGHT_PRIMARY | METASLAB_WEIGHT_SECONDARY) + +/* + * The metaslab weight is used to encode the amount of free space in a + * metaslab, such that the "best" metaslab appears first when sorting the + * metaslabs by weight. The weight (and therefore the "best" metaslab) can + * be determined in two different ways: by computing a weighted sum of all + * the free space in the metaslab (a space based weight) or by counting only + * the free segments of the largest size (a segment based weight). We prefer + * the segment based weight because it reflects how the free space is + * comprised, but we cannot always use it -- legacy pools do not have the + * space map histogram information necessary to determine the largest + * contiguous regions. Pools that have the space map histogram determine + * the segment weight by looking at each bucket in the histogram and + * determining the free space whose size in bytes is in the range: + * [2^i, 2^(i+1)) + * We then encode the largest index, i, that contains regions into the + * segment-weighted value. + * + * Space-based weight: + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * |PS1| weighted-free space | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * PS - indicates primary and secondary activation + * space - the fragmentation-weighted space + * + * Segment-based weight: + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * |PS0| idx| count of segments in region | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * PS - indicates primary and secondary activation + * idx - index for the highest bucket in the histogram + * count - number of segments in the specified bucket + */ +#define WEIGHT_GET_ACTIVE(weight) BF64_GET((weight), 62, 2) +#define WEIGHT_SET_ACTIVE(weight, x) BF64_SET((weight), 62, 2, x) + +#define WEIGHT_IS_SPACEBASED(weight) \ + ((weight) == 0 || BF64_GET((weight), 61, 1)) +#define WEIGHT_SET_SPACEBASED(weight) BF64_SET((weight), 61, 1, 1) + +/* + * These macros are only applicable to segment-based weighting. + */ +#define WEIGHT_GET_INDEX(weight) BF64_GET((weight), 55, 6) +#define WEIGHT_SET_INDEX(weight, x) BF64_SET((weight), 55, 6, x) +#define WEIGHT_GET_COUNT(weight) BF64_GET((weight), 0, 55) +#define WEIGHT_SET_COUNT(weight, x) BF64_SET((weight), 0, 55, x) + +/* + * A metaslab class encompasses a category of allocatable top-level vdevs. + * Each top-level vdev is associated with a metaslab group which defines + * the allocatable region for that vdev. Examples of these categories include + * "normal" for data block allocations (i.e. main pool allocations) or "log" + * for allocations designated for intent log devices (i.e. slog devices). + * When a block allocation is requested from the SPA it is associated with a + * metaslab_class_t, and only top-level vdevs (i.e. metaslab groups) belonging + * to the class can be used to satisfy that request. Allocations are done + * by traversing the metaslab groups that are linked off of the mc_rotor field. + * This rotor points to the next metaslab group where allocations will be + * attempted. Allocating a block is a 3 step process -- select the metaslab + * group, select the metaslab, and then allocate the block. The metaslab + * class defines the low-level block allocator that will be used as the + * final step in allocation. These allocators are pluggable allowing each class + * to use a block allocator that best suits that class. + */ +struct metaslab_class { + kmutex_t mc_lock; + spa_t *mc_spa; + metaslab_group_t *mc_rotor; + metaslab_ops_t *mc_ops; + uint64_t mc_aliquot; + + /* + * Track the number of metaslab groups that have been initialized + * and can accept allocations. An initialized metaslab group is + * one has been completely added to the config (i.e. we have + * updated the MOS config and the space has been added to the pool). + */ + uint64_t mc_groups; + + /* + * Toggle to enable/disable the allocation throttle. + */ + boolean_t mc_alloc_throttle_enabled; + + /* + * The allocation throttle works on a reservation system. Whenever + * an asynchronous zio wants to perform an allocation it must + * first reserve the number of blocks that it wants to allocate. + * If there aren't sufficient slots available for the pending zio + * then that I/O is throttled until more slots free up. The current + * number of reserved allocations is maintained by the mc_alloc_slots + * refcount. The mc_alloc_max_slots value determines the maximum + * number of allocations that the system allows. Gang blocks are + * allowed to reserve slots even if we've reached the maximum + * number of allocations allowed. + */ + uint64_t mc_alloc_max_slots; + refcount_t mc_alloc_slots; + + uint64_t mc_alloc_groups; /* # of allocatable groups */ + + uint64_t mc_alloc; /* total allocated space */ + uint64_t mc_deferred; /* total deferred frees */ + uint64_t mc_space; /* total space (alloc + free) */ + uint64_t mc_dspace; /* total deflated space */ + uint64_t mc_histogram[RANGE_TREE_HISTOGRAM_SIZE]; +}; + +/* + * Metaslab groups encapsulate all the allocatable regions (i.e. metaslabs) + * of a top-level vdev. They are linked together to form a circular linked + * list and can belong to only one metaslab class. Metaslab groups may become + * ineligible for allocations for a number of reasons such as limited free + * space, fragmentation, or going offline. When this happens the allocator will + * simply find the next metaslab group in the linked list and attempt + * to allocate from that group instead. + */ +struct metaslab_group { + kmutex_t mg_lock; + avl_tree_t mg_metaslab_tree; + uint64_t mg_aliquot; + boolean_t mg_allocatable; /* can we allocate? */ + + /* + * A metaslab group is considered to be initialized only after + * we have updated the MOS config and added the space to the pool. + * We only allow allocation attempts to a metaslab group if it + * has been initialized. + */ + boolean_t mg_initialized; + + uint64_t mg_free_capacity; /* percentage free */ + int64_t mg_bias; + int64_t mg_activation_count; + metaslab_class_t *mg_class; + vdev_t *mg_vd; + taskq_t *mg_taskq; + metaslab_group_t *mg_prev; + metaslab_group_t *mg_next; + + /* + * Each metaslab group can handle mg_max_alloc_queue_depth allocations + * which are tracked by mg_alloc_queue_depth. It's possible for a + * metaslab group to handle more allocations than its max. This + * can occur when gang blocks are required or when other groups + * are unable to handle their share of allocations. + */ + uint64_t mg_max_alloc_queue_depth; + refcount_t mg_alloc_queue_depth; + + /* + * A metalab group that can no longer allocate the minimum block + * size will set mg_no_free_space. Once a metaslab group is out + * of space then its share of work must be distributed to other + * groups. + */ + boolean_t mg_no_free_space; + + uint64_t mg_allocations; + uint64_t mg_failed_allocations; + uint64_t mg_fragmentation; + uint64_t mg_histogram[RANGE_TREE_HISTOGRAM_SIZE]; +}; + +/* + * This value defines the number of elements in the ms_lbas array. The value + * of 64 was chosen as it covers all power of 2 buckets up to UINT64_MAX. + * This is the equivalent of highbit(UINT64_MAX). + */ +#define MAX_LBAS 64 + +/* + * Each metaslab maintains a set of in-core trees to track metaslab + * operations. The in-core free tree (ms_tree) contains the list of + * free segments which are eligible for allocation. As blocks are + * allocated, the allocated segments are removed from the ms_tree and + * added to a per txg allocation tree (ms_alloctree). This allows us to + * process all allocations in syncing context where it is safe to update + * the on-disk space maps. Frees are also processed in syncing context. + * Most frees are generated from syncing context, and those that are not + * are held in the spa_free_bplist for processing in syncing context. + * An additional set of in-core trees is maintained to track deferred + * frees (ms_defertree). Once a block is freed it will move from the + * ms_freedtree to the ms_defertree. A deferred free means that a block + * has been freed but cannot be used by the pool until TXG_DEFER_SIZE + * transactions groups later. For example, a block that is freed in txg + * 50 will not be available for reallocation until txg 52 (50 + + * TXG_DEFER_SIZE). This provides a safety net for uberblock rollback. + * A pool could be safely rolled back TXG_DEFERS_SIZE transactions + * groups and ensure that no block has been reallocated. + * + * The simplified transition diagram looks like this: + * + * + * ALLOCATE + * | + * V + * free segment (ms_tree) -----> ms_alloctree[4] ----> (write to space map) + * ^ + * | ms_freeingtree <--- FREE + * | | + * | v + * | ms_freedtree + * | | + * +-------- ms_defertree[2] <-------+---------> (write to space map) + * + * + * Each metaslab's space is tracked in a single space map in the MOS, + * which is only updated in syncing context. Each time we sync a txg, + * we append the allocs and frees from that txg to the space map. The + * pool space is only updated once all metaslabs have finished syncing. + * + * To load the in-core free tree we read the space map from disk. This + * object contains a series of alloc and free records that are combined + * to make up the list of all free segments in this metaslab. These + * segments are represented in-core by the ms_tree and are stored in an + * AVL tree. + * + * As the space map grows (as a result of the appends) it will + * eventually become space-inefficient. When the metaslab's in-core + * free tree is zfs_condense_pct/100 times the size of the minimal + * on-disk representation, we rewrite it in its minimized form. If a + * metaslab needs to condense then we must set the ms_condensing flag to + * ensure that allocations are not performed on the metaslab that is + * being written. + */ +struct metaslab { + kmutex_t ms_lock; + kcondvar_t ms_load_cv; + space_map_t *ms_sm; + uint64_t ms_id; + uint64_t ms_start; + uint64_t ms_size; + uint64_t ms_fragmentation; + + range_tree_t *ms_alloctree[TXG_SIZE]; + range_tree_t *ms_tree; + + /* + * The following range trees are accessed only from syncing context. + * ms_free*tree only have entries while syncing, and are empty + * between syncs. + */ + range_tree_t *ms_freeingtree; /* to free this syncing txg */ + range_tree_t *ms_freedtree; /* already freed this syncing txg */ + range_tree_t *ms_defertree[TXG_DEFER_SIZE]; + + boolean_t ms_condensing; /* condensing? */ + boolean_t ms_condense_wanted; + + /* + * We must hold both ms_lock and ms_group->mg_lock in order to + * modify ms_loaded. + */ + boolean_t ms_loaded; + boolean_t ms_loading; + + int64_t ms_deferspace; /* sum of ms_defermap[] space */ + uint64_t ms_weight; /* weight vs. others in group */ + uint64_t ms_activation_weight; /* activation weight */ + + /* + * Track of whenever a metaslab is selected for loading or allocation. + * We use this value to determine how long the metaslab should + * stay cached. + */ + uint64_t ms_selected_txg; + + uint64_t ms_alloc_txg; /* last successful alloc (debug only) */ + uint64_t ms_max_size; /* maximum allocatable size */ + + /* + * The metaslab block allocators can optionally use a size-ordered + * range tree and/or an array of LBAs. Not all allocators use + * this functionality. The ms_size_tree should always contain the + * same number of segments as the ms_tree. The only difference + * is that the ms_size_tree is ordered by segment sizes. + */ + avl_tree_t ms_size_tree; + uint64_t ms_lbas[MAX_LBAS]; + + metaslab_group_t *ms_group; /* metaslab group */ + avl_node_t ms_group_node; /* node in metaslab group tree */ + txg_node_t ms_txg_node; /* per-txg dirty metaslab links */ +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_METASLAB_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/mmp.h +++ linux-aws-4.15.0/zfs/include/sys/mmp.h @@ -0,0 +1,64 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2017 by Lawrence Livermore National Security, LLC. + */ + +#ifndef _SYS_MMP_H +#define _SYS_MMP_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MMP_MIN_INTERVAL 100 /* ms */ +#define MMP_DEFAULT_INTERVAL 1000 /* ms */ +#define MMP_DEFAULT_IMPORT_INTERVALS 10 +#define MMP_DEFAULT_FAIL_INTERVALS 5 + +typedef struct mmp_thread { + kmutex_t mmp_thread_lock; /* protect thread mgmt fields */ + kcondvar_t mmp_thread_cv; + kthread_t *mmp_thread; + uint8_t mmp_thread_exiting; + kmutex_t mmp_io_lock; /* protect below */ + hrtime_t mmp_last_write; /* last successful MMP write */ + uint64_t mmp_delay; /* decaying avg ns between MMP writes */ + uberblock_t mmp_ub; /* last ub written by sync */ + zio_t *mmp_zio_root; /* root of mmp write zios */ +} mmp_thread_t; + + +extern void mmp_init(struct spa *spa); +extern void mmp_fini(struct spa *spa); +extern void mmp_thread_start(struct spa *spa); +extern void mmp_thread_stop(struct spa *spa); +extern void mmp_update_uberblock(struct spa *spa, struct uberblock *ub); +extern void mmp_signal_all_threads(void); + +/* Global tuning */ +extern ulong_t zfs_multihost_interval; +extern uint_t zfs_multihost_fail_intervals; +extern uint_t zfs_multihost_import_intervals; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MMP_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/mntent.h +++ linux-aws-4.15.0/zfs/include/sys/mntent.h @@ -0,0 +1,103 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T + * All Rights Reserved + */ + +#ifndef _SYS_MNTENT_H +#define _SYS_MNTENT_H + +#define MNTTYPE_ZFS "zfs" /* ZFS file system */ + +#define MOUNT_SUCCESS 0x00 /* Success */ +#define MOUNT_USAGE 0x01 /* Invalid invocation or permissions */ +#define MOUNT_SYSERR 0x02 /* System error (ENOMEM, etc) */ +#define MOUNT_SOFTWARE 0x04 /* Internal mount bug */ +#define MOUNT_USER 0x08 /* Interrupted by user (EINTR) */ +#define MOUNT_FILEIO 0x10 /* Error updating/locking /etc/mtab */ +#define MOUNT_FAIL 0x20 /* Mount failed */ +#define MOUNT_SOMEOK 0x40 /* At least on mount succeeded */ +#define MOUNT_BUSY 0x80 /* Mount failed due to EBUSY */ + +#define MNTOPT_ASYNC "async" /* all I/O is asynchronous */ +#define MNTOPT_ATIME "atime" /* update atime for files */ +#define MNTOPT_NOATIME "noatime" /* do not update atime for files */ +#define MNTOPT_AUTO "auto" /* automount */ +#define MNTOPT_NOAUTO "noauto" /* do not automount */ +#define MNTOPT_CONTEXT "context" /* selinux context */ +#define MNTOPT_FSCONTEXT "fscontext" /* selinux fscontext */ +#define MNTOPT_DEFCONTEXT "defcontext" /* selinux defcontext */ +#define MNTOPT_ROOTCONTEXT "rootcontext" /* selinux rootcontext */ +#define MNTOPT_DEFAULTS "defaults" /* defaults */ +#define MNTOPT_DEVICES "dev" /* device-special allowed */ +#define MNTOPT_NODEVICES "nodev" /* device-special disallowed */ +#define MNTOPT_DIRATIME "diratime" /* update atime for dirs */ +#define MNTOPT_NODIRATIME "nodiratime" /* do not update atime for dirs */ +#define MNTOPT_DIRSYNC "dirsync" /* do dir updates synchronously */ +#define MNTOPT_EXEC "exec" /* enable executables */ +#define MNTOPT_NOEXEC "noexec" /* disable executables */ +#define MNTOPT_GROUP "group" /* allow group mount */ +#define MNTOPT_NOGROUP "nogroup" /* do not allow group mount */ +#define MNTOPT_IVERSION "iversion" /* update inode version */ +#define MNTOPT_NOIVERSION "noiversion" /* do not update inode version */ +#define MNTOPT_NBMAND "mand" /* allow non-blocking mandatory locks */ +#define MNTOPT_NONBMAND "nomand" /* deny non-blocking mandatory locks */ +#define MNTOPT_NETDEV "_netdev" /* network device */ +#define MNTOPT_NOFAIL "nofail" /* no failure */ +#define MNTOPT_RELATIME "relatime" /* allow relative time updates */ +#define MNTOPT_NORELATIME "norelatime" /* do not allow relative time updates */ +#define MNTOPT_STRICTATIME "strictatime" /* strict access time updates */ +#define MNTOPT_NOSTRICTATIME "nostrictatime" /* No strict access time updates */ +#define MNTOPT_LAZYTIME "lazytime" /* Defer access time writing */ +#define MNTOPT_SETUID "suid" /* Both setuid and devices allowed */ +#define MNTOPT_NOSETUID "nosuid" /* Neither setuid nor devices allowed */ +#define MNTOPT_OWNER "owner" /* allow owner mount */ +#define MNTOPT_NOOWNER "noowner" /* do not allow owner mount */ +#define MNTOPT_REMOUNT "remount" /* change mount options */ +#define MNTOPT_RO "ro" /* read only */ +#define MNTOPT_RW "rw" /* read/write */ +#define MNTOPT_SYNC "sync" /* all I/O is synchronous */ +#define MNTOPT_USER "user" /* allow user mount */ +#define MNTOPT_NOUSER "nouser" /* do not allow user mount */ +#define MNTOPT_USERS "users" /* allow user mount */ +#define MNTOPT_NOUSERS "nousers" /* do not allow user mount */ +#define MNTOPT_SUB "sub" /* allow mounts on subdirs */ +#define MNTOPT_NOSUB "nosub" /* do not allow mounts on subdirs */ +#define MNTOPT_QUIET "quiet" /* quiet mount */ +#define MNTOPT_LOUD "loud" /* verbose mount */ +#define MNTOPT_BIND "bind" /* remount part of a tree */ +#define MNTOPT_RBIND "rbind" /* include subtrees */ +#define MNTOPT_DIRXATTR "dirxattr" /* enable directory xattrs */ +#define MNTOPT_SAXATTR "saxattr" /* enable system-attribute xattrs */ +#define MNTOPT_XATTR "xattr" /* enable extended attributes */ +#define MNTOPT_NOXATTR "noxattr" /* disable extended attributes */ +#define MNTOPT_COMMENT "comment" /* comment */ +#define MNTOPT_ZFSUTIL "zfsutil" /* called by zfs utility */ +#define MNTOPT_ACL "acl" /* passed by util-linux-2.24 mount */ +#define MNTOPT_NOACL "noacl" /* likewise */ +#define MNTOPT_POSIXACL "posixacl" /* likewise */ +#define MNTOPT_MNTPOINT "mntpoint" /* mount point hint */ + +#endif /* _SYS_MNTENT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/multilist.h +++ linux-aws-4.15.0/zfs/include/sys/multilist.h @@ -0,0 +1,105 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2013, 2017 by Delphix. All rights reserved. + */ + +#ifndef _SYS_MULTILIST_H +#define _SYS_MULTILIST_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef list_node_t multilist_node_t; +typedef struct multilist multilist_t; +typedef struct multilist_sublist multilist_sublist_t; +typedef unsigned int multilist_sublist_index_func_t(multilist_t *, void *); + +struct multilist_sublist { + /* + * The mutex used internally to implement thread safe insertions + * and removals to this individual sublist. It can also be locked + * by a consumer using multilist_sublist_{lock,unlock}, which is + * useful if a consumer needs to traverse the list in a thread + * safe manner. + */ + kmutex_t mls_lock; + /* + * The actual list object containing all objects in this sublist. + */ + list_t mls_list; + /* + * Pad to cache line, in an effort to try and prevent cache line + * contention. + */ +} ____cacheline_aligned; + +struct multilist { + /* + * This is used to get to the multilist_node_t structure given + * the void *object contained on the list. + */ + size_t ml_offset; + /* + * The number of sublists used internally by this multilist. + */ + uint64_t ml_num_sublists; + /* + * The array of pointers to the actual sublists. + */ + multilist_sublist_t *ml_sublists; + /* + * Pointer to function which determines the sublist to use + * when inserting and removing objects from this multilist. + * Please see the comment above multilist_create for details. + */ + multilist_sublist_index_func_t *ml_index_func; +}; + +void multilist_destroy(multilist_t *); +multilist_t *multilist_create(size_t, size_t, multilist_sublist_index_func_t *); + +void multilist_insert(multilist_t *, void *); +void multilist_remove(multilist_t *, void *); +int multilist_is_empty(multilist_t *); + +unsigned int multilist_get_num_sublists(multilist_t *); +unsigned int multilist_get_random_index(multilist_t *); + +multilist_sublist_t *multilist_sublist_lock(multilist_t *, unsigned int); +multilist_sublist_t *multilist_sublist_lock_obj(multilist_t *, void *); +void multilist_sublist_unlock(multilist_sublist_t *); + +void multilist_sublist_insert_head(multilist_sublist_t *, void *); +void multilist_sublist_insert_tail(multilist_sublist_t *, void *); +void multilist_sublist_move_forward(multilist_sublist_t *mls, void *obj); +void multilist_sublist_remove(multilist_sublist_t *, void *); + +void *multilist_sublist_head(multilist_sublist_t *); +void *multilist_sublist_tail(multilist_sublist_t *); +void *multilist_sublist_next(multilist_sublist_t *, void *); +void *multilist_sublist_prev(multilist_sublist_t *, void *); + +void multilist_link_init(multilist_node_t *); +int multilist_link_active(multilist_node_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MULTILIST_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/nvpair.h +++ linux-aws-4.15.0/zfs/include/sys/nvpair.h @@ -0,0 +1,352 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#ifndef _SYS_NVPAIR_H +#define _SYS_NVPAIR_H + +#include +#include +#include +#include + +#if defined(_KERNEL) && !defined(_BOOT) +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + DATA_TYPE_UNKNOWN = 0, + DATA_TYPE_BOOLEAN, + DATA_TYPE_BYTE, + DATA_TYPE_INT16, + DATA_TYPE_UINT16, + DATA_TYPE_INT32, + DATA_TYPE_UINT32, + DATA_TYPE_INT64, + DATA_TYPE_UINT64, + DATA_TYPE_STRING, + DATA_TYPE_BYTE_ARRAY, + DATA_TYPE_INT16_ARRAY, + DATA_TYPE_UINT16_ARRAY, + DATA_TYPE_INT32_ARRAY, + DATA_TYPE_UINT32_ARRAY, + DATA_TYPE_INT64_ARRAY, + DATA_TYPE_UINT64_ARRAY, + DATA_TYPE_STRING_ARRAY, + DATA_TYPE_HRTIME, + DATA_TYPE_NVLIST, + DATA_TYPE_NVLIST_ARRAY, + DATA_TYPE_BOOLEAN_VALUE, + DATA_TYPE_INT8, + DATA_TYPE_UINT8, + DATA_TYPE_BOOLEAN_ARRAY, + DATA_TYPE_INT8_ARRAY, +#if !defined(_KERNEL) + DATA_TYPE_UINT8_ARRAY, + DATA_TYPE_DOUBLE +#else + DATA_TYPE_UINT8_ARRAY +#endif +} data_type_t; + +typedef struct nvpair { + int32_t nvp_size; /* size of this nvpair */ + int16_t nvp_name_sz; /* length of name string */ + int16_t nvp_reserve; /* not used */ + int32_t nvp_value_elem; /* number of elements for array types */ + data_type_t nvp_type; /* type of value */ + /* name string */ + /* aligned ptr array for string arrays */ + /* aligned array of data for value */ +} nvpair_t; + +/* nvlist header */ +typedef struct nvlist { + int32_t nvl_version; + uint32_t nvl_nvflag; /* persistent flags */ + uint64_t nvl_priv; /* ptr to private data if not packed */ + uint32_t nvl_flag; + int32_t nvl_pad; /* currently not used, for alignment */ +} nvlist_t; + +/* nvp implementation version */ +#define NV_VERSION 0 + +/* nvlist pack encoding */ +#define NV_ENCODE_NATIVE 0 +#define NV_ENCODE_XDR 1 + +/* nvlist persistent unique name flags, stored in nvl_nvflags */ +#define NV_UNIQUE_NAME 0x1 +#define NV_UNIQUE_NAME_TYPE 0x2 + +/* nvlist lookup pairs related flags */ +#define NV_FLAG_NOENTOK 0x1 + +/* convenience macros */ +#define NV_ALIGN(x) (((ulong_t)(x) + 7ul) & ~7ul) +#define NV_ALIGN4(x) (((x) + 3) & ~3) + +#define NVP_SIZE(nvp) ((nvp)->nvp_size) +#define NVP_NAME(nvp) ((char *)(nvp) + sizeof (nvpair_t)) +#define NVP_TYPE(nvp) ((nvp)->nvp_type) +#define NVP_NELEM(nvp) ((nvp)->nvp_value_elem) +#define NVP_VALUE(nvp) ((char *)(nvp) + NV_ALIGN(sizeof (nvpair_t) \ + + (nvp)->nvp_name_sz)) + +#define NVL_VERSION(nvl) ((nvl)->nvl_version) +#define NVL_SIZE(nvl) ((nvl)->nvl_size) +#define NVL_FLAG(nvl) ((nvl)->nvl_flag) + +/* NV allocator framework */ +typedef struct nv_alloc_ops nv_alloc_ops_t; + +typedef struct nv_alloc { + const nv_alloc_ops_t *nva_ops; + void *nva_arg; +} nv_alloc_t; + +struct nv_alloc_ops { + int (*nv_ao_init)(nv_alloc_t *, va_list); + void (*nv_ao_fini)(nv_alloc_t *); + void *(*nv_ao_alloc)(nv_alloc_t *, size_t); + void (*nv_ao_free)(nv_alloc_t *, void *, size_t); + void (*nv_ao_reset)(nv_alloc_t *); +}; + +extern const nv_alloc_ops_t *nv_fixed_ops; +extern nv_alloc_t *nv_alloc_nosleep; + +#if defined(_KERNEL) && !defined(_BOOT) +extern nv_alloc_t *nv_alloc_sleep; +extern nv_alloc_t *nv_alloc_pushpage; +#endif + +int nv_alloc_init(nv_alloc_t *, const nv_alloc_ops_t *, /* args */ ...); +void nv_alloc_reset(nv_alloc_t *); +void nv_alloc_fini(nv_alloc_t *); + +/* list management */ +int nvlist_alloc(nvlist_t **, uint_t, int); +void nvlist_free(nvlist_t *); +int nvlist_size(nvlist_t *, size_t *, int); +int nvlist_pack(nvlist_t *, char **, size_t *, int, int); +int nvlist_unpack(char *, size_t, nvlist_t **, int); +int nvlist_dup(nvlist_t *, nvlist_t **, int); +int nvlist_merge(nvlist_t *, nvlist_t *, int); + +uint_t nvlist_nvflag(nvlist_t *); + +int nvlist_xalloc(nvlist_t **, uint_t, nv_alloc_t *); +int nvlist_xpack(nvlist_t *, char **, size_t *, int, nv_alloc_t *); +int nvlist_xunpack(char *, size_t, nvlist_t **, nv_alloc_t *); +int nvlist_xdup(nvlist_t *, nvlist_t **, nv_alloc_t *); +nv_alloc_t *nvlist_lookup_nv_alloc(nvlist_t *); + +int nvlist_add_nvpair(nvlist_t *, nvpair_t *); +int nvlist_add_boolean(nvlist_t *, const char *); +int nvlist_add_boolean_value(nvlist_t *, const char *, boolean_t); +int nvlist_add_byte(nvlist_t *, const char *, uchar_t); +int nvlist_add_int8(nvlist_t *, const char *, int8_t); +int nvlist_add_uint8(nvlist_t *, const char *, uint8_t); +int nvlist_add_int16(nvlist_t *, const char *, int16_t); +int nvlist_add_uint16(nvlist_t *, const char *, uint16_t); +int nvlist_add_int32(nvlist_t *, const char *, int32_t); +int nvlist_add_uint32(nvlist_t *, const char *, uint32_t); +int nvlist_add_int64(nvlist_t *, const char *, int64_t); +int nvlist_add_uint64(nvlist_t *, const char *, uint64_t); +int nvlist_add_string(nvlist_t *, const char *, const char *); +int nvlist_add_nvlist(nvlist_t *, const char *, nvlist_t *); +int nvlist_add_boolean_array(nvlist_t *, const char *, boolean_t *, uint_t); +int nvlist_add_byte_array(nvlist_t *, const char *, uchar_t *, uint_t); +int nvlist_add_int8_array(nvlist_t *, const char *, int8_t *, uint_t); +int nvlist_add_uint8_array(nvlist_t *, const char *, uint8_t *, uint_t); +int nvlist_add_int16_array(nvlist_t *, const char *, int16_t *, uint_t); +int nvlist_add_uint16_array(nvlist_t *, const char *, uint16_t *, uint_t); +int nvlist_add_int32_array(nvlist_t *, const char *, int32_t *, uint_t); +int nvlist_add_uint32_array(nvlist_t *, const char *, uint32_t *, uint_t); +int nvlist_add_int64_array(nvlist_t *, const char *, int64_t *, uint_t); +int nvlist_add_uint64_array(nvlist_t *, const char *, uint64_t *, uint_t); +int nvlist_add_string_array(nvlist_t *, const char *, char *const *, uint_t); +int nvlist_add_nvlist_array(nvlist_t *, const char *, nvlist_t **, uint_t); +int nvlist_add_hrtime(nvlist_t *, const char *, hrtime_t); +#if !defined(_KERNEL) +int nvlist_add_double(nvlist_t *, const char *, double); +#endif + +int nvlist_remove(nvlist_t *, const char *, data_type_t); +int nvlist_remove_all(nvlist_t *, const char *); +int nvlist_remove_nvpair(nvlist_t *, nvpair_t *); + +int nvlist_lookup_boolean(nvlist_t *, const char *); +int nvlist_lookup_boolean_value(nvlist_t *, const char *, boolean_t *); +int nvlist_lookup_byte(nvlist_t *, const char *, uchar_t *); +int nvlist_lookup_int8(nvlist_t *, const char *, int8_t *); +int nvlist_lookup_uint8(nvlist_t *, const char *, uint8_t *); +int nvlist_lookup_int16(nvlist_t *, const char *, int16_t *); +int nvlist_lookup_uint16(nvlist_t *, const char *, uint16_t *); +int nvlist_lookup_int32(nvlist_t *, const char *, int32_t *); +int nvlist_lookup_uint32(nvlist_t *, const char *, uint32_t *); +int nvlist_lookup_int64(nvlist_t *, const char *, int64_t *); +int nvlist_lookup_uint64(nvlist_t *, const char *, uint64_t *); +int nvlist_lookup_string(nvlist_t *, const char *, char **); +int nvlist_lookup_nvlist(nvlist_t *, const char *, nvlist_t **); +int nvlist_lookup_boolean_array(nvlist_t *, const char *, + boolean_t **, uint_t *); +int nvlist_lookup_byte_array(nvlist_t *, const char *, uchar_t **, uint_t *); +int nvlist_lookup_int8_array(nvlist_t *, const char *, int8_t **, uint_t *); +int nvlist_lookup_uint8_array(nvlist_t *, const char *, uint8_t **, uint_t *); +int nvlist_lookup_int16_array(nvlist_t *, const char *, int16_t **, uint_t *); +int nvlist_lookup_uint16_array(nvlist_t *, const char *, uint16_t **, uint_t *); +int nvlist_lookup_int32_array(nvlist_t *, const char *, int32_t **, uint_t *); +int nvlist_lookup_uint32_array(nvlist_t *, const char *, uint32_t **, uint_t *); +int nvlist_lookup_int64_array(nvlist_t *, const char *, int64_t **, uint_t *); +int nvlist_lookup_uint64_array(nvlist_t *, const char *, uint64_t **, uint_t *); +int nvlist_lookup_string_array(nvlist_t *, const char *, char ***, uint_t *); +int nvlist_lookup_nvlist_array(nvlist_t *, const char *, + nvlist_t ***, uint_t *); +int nvlist_lookup_hrtime(nvlist_t *, const char *, hrtime_t *); +int nvlist_lookup_pairs(nvlist_t *, int, ...); +#if !defined(_KERNEL) +int nvlist_lookup_double(nvlist_t *, const char *, double *); +#endif + +int nvlist_lookup_nvpair(nvlist_t *, const char *, nvpair_t **); +int nvlist_lookup_nvpair_embedded_index(nvlist_t *, const char *, nvpair_t **, + int *, char **); +boolean_t nvlist_exists(nvlist_t *, const char *); +boolean_t nvlist_empty(nvlist_t *); + +/* processing nvpair */ +nvpair_t *nvlist_next_nvpair(nvlist_t *, nvpair_t *); +nvpair_t *nvlist_prev_nvpair(nvlist_t *, nvpair_t *); +char *nvpair_name(nvpair_t *); +data_type_t nvpair_type(nvpair_t *); +int nvpair_type_is_array(nvpair_t *); +int nvpair_value_boolean_value(nvpair_t *, boolean_t *); +int nvpair_value_byte(nvpair_t *, uchar_t *); +int nvpair_value_int8(nvpair_t *, int8_t *); +int nvpair_value_uint8(nvpair_t *, uint8_t *); +int nvpair_value_int16(nvpair_t *, int16_t *); +int nvpair_value_uint16(nvpair_t *, uint16_t *); +int nvpair_value_int32(nvpair_t *, int32_t *); +int nvpair_value_uint32(nvpair_t *, uint32_t *); +int nvpair_value_int64(nvpair_t *, int64_t *); +int nvpair_value_uint64(nvpair_t *, uint64_t *); +int nvpair_value_string(nvpair_t *, char **); +int nvpair_value_nvlist(nvpair_t *, nvlist_t **); +int nvpair_value_boolean_array(nvpair_t *, boolean_t **, uint_t *); +int nvpair_value_byte_array(nvpair_t *, uchar_t **, uint_t *); +int nvpair_value_int8_array(nvpair_t *, int8_t **, uint_t *); +int nvpair_value_uint8_array(nvpair_t *, uint8_t **, uint_t *); +int nvpair_value_int16_array(nvpair_t *, int16_t **, uint_t *); +int nvpair_value_uint16_array(nvpair_t *, uint16_t **, uint_t *); +int nvpair_value_int32_array(nvpair_t *, int32_t **, uint_t *); +int nvpair_value_uint32_array(nvpair_t *, uint32_t **, uint_t *); +int nvpair_value_int64_array(nvpair_t *, int64_t **, uint_t *); +int nvpair_value_uint64_array(nvpair_t *, uint64_t **, uint_t *); +int nvpair_value_string_array(nvpair_t *, char ***, uint_t *); +int nvpair_value_nvlist_array(nvpair_t *, nvlist_t ***, uint_t *); +int nvpair_value_hrtime(nvpair_t *, hrtime_t *); +#if !defined(_KERNEL) +int nvpair_value_double(nvpair_t *, double *); +#endif + +nvlist_t *fnvlist_alloc(void); +void fnvlist_free(nvlist_t *); +size_t fnvlist_size(nvlist_t *); +char *fnvlist_pack(nvlist_t *, size_t *); +void fnvlist_pack_free(char *, size_t); +nvlist_t *fnvlist_unpack(char *, size_t); +nvlist_t *fnvlist_dup(nvlist_t *); +void fnvlist_merge(nvlist_t *, nvlist_t *); +size_t fnvlist_num_pairs(nvlist_t *); + +void fnvlist_add_boolean(nvlist_t *, const char *); +void fnvlist_add_boolean_value(nvlist_t *, const char *, boolean_t); +void fnvlist_add_byte(nvlist_t *, const char *, uchar_t); +void fnvlist_add_int8(nvlist_t *, const char *, int8_t); +void fnvlist_add_uint8(nvlist_t *, const char *, uint8_t); +void fnvlist_add_int16(nvlist_t *, const char *, int16_t); +void fnvlist_add_uint16(nvlist_t *, const char *, uint16_t); +void fnvlist_add_int32(nvlist_t *, const char *, int32_t); +void fnvlist_add_uint32(nvlist_t *, const char *, uint32_t); +void fnvlist_add_int64(nvlist_t *, const char *, int64_t); +void fnvlist_add_uint64(nvlist_t *, const char *, uint64_t); +void fnvlist_add_string(nvlist_t *, const char *, const char *); +void fnvlist_add_nvlist(nvlist_t *, const char *, nvlist_t *); +void fnvlist_add_nvpair(nvlist_t *, nvpair_t *); +void fnvlist_add_boolean_array(nvlist_t *, const char *, boolean_t *, uint_t); +void fnvlist_add_byte_array(nvlist_t *, const char *, uchar_t *, uint_t); +void fnvlist_add_int8_array(nvlist_t *, const char *, int8_t *, uint_t); +void fnvlist_add_uint8_array(nvlist_t *, const char *, uint8_t *, uint_t); +void fnvlist_add_int16_array(nvlist_t *, const char *, int16_t *, uint_t); +void fnvlist_add_uint16_array(nvlist_t *, const char *, uint16_t *, uint_t); +void fnvlist_add_int32_array(nvlist_t *, const char *, int32_t *, uint_t); +void fnvlist_add_uint32_array(nvlist_t *, const char *, uint32_t *, uint_t); +void fnvlist_add_int64_array(nvlist_t *, const char *, int64_t *, uint_t); +void fnvlist_add_uint64_array(nvlist_t *, const char *, uint64_t *, uint_t); +void fnvlist_add_string_array(nvlist_t *, const char *, char * const *, uint_t); +void fnvlist_add_nvlist_array(nvlist_t *, const char *, nvlist_t **, uint_t); + +void fnvlist_remove(nvlist_t *, const char *); +void fnvlist_remove_nvpair(nvlist_t *, nvpair_t *); + +nvpair_t *fnvlist_lookup_nvpair(nvlist_t *nvl, const char *name); +boolean_t fnvlist_lookup_boolean(nvlist_t *nvl, const char *name); +boolean_t fnvlist_lookup_boolean_value(nvlist_t *nvl, const char *name); +uchar_t fnvlist_lookup_byte(nvlist_t *nvl, const char *name); +int8_t fnvlist_lookup_int8(nvlist_t *nvl, const char *name); +int16_t fnvlist_lookup_int16(nvlist_t *nvl, const char *name); +int32_t fnvlist_lookup_int32(nvlist_t *nvl, const char *name); +int64_t fnvlist_lookup_int64(nvlist_t *nvl, const char *name); +uint8_t fnvlist_lookup_uint8(nvlist_t *nvl, const char *name); +uint16_t fnvlist_lookup_uint16(nvlist_t *nvl, const char *name); +uint32_t fnvlist_lookup_uint32(nvlist_t *nvl, const char *name); +uint64_t fnvlist_lookup_uint64(nvlist_t *nvl, const char *name); +char *fnvlist_lookup_string(nvlist_t *nvl, const char *name); +nvlist_t *fnvlist_lookup_nvlist(nvlist_t *nvl, const char *name); + +boolean_t fnvpair_value_boolean_value(nvpair_t *nvp); +uchar_t fnvpair_value_byte(nvpair_t *nvp); +int8_t fnvpair_value_int8(nvpair_t *nvp); +int16_t fnvpair_value_int16(nvpair_t *nvp); +int32_t fnvpair_value_int32(nvpair_t *nvp); +int64_t fnvpair_value_int64(nvpair_t *nvp); +uint8_t fnvpair_value_uint8(nvpair_t *nvp); +uint16_t fnvpair_value_uint16(nvpair_t *nvp); +uint32_t fnvpair_value_uint32(nvpair_t *nvp); +uint64_t fnvpair_value_uint64(nvpair_t *nvp); +char *fnvpair_value_string(nvpair_t *nvp); +nvlist_t *fnvpair_value_nvlist(nvpair_t *nvp); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_NVPAIR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/nvpair_impl.h +++ linux-aws-4.15.0/zfs/include/sys/nvpair_impl.h @@ -0,0 +1,73 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _NVPAIR_IMPL_H +#define _NVPAIR_IMPL_H + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* + * The structures here provided for information and debugging purposes only + * may be changed in the future. + */ + +/* + * implementation linked list for pre-packed data + */ +typedef struct i_nvp i_nvp_t; + +struct i_nvp { + union { + uint64_t _nvi_align; /* ensure alignment */ + struct { + i_nvp_t *_nvi_next; /* pointer to next nvpair */ + i_nvp_t *_nvi_prev; /* pointer to prev nvpair */ + } _nvi; + } _nvi_un; + nvpair_t nvi_nvp; /* nvpair */ +}; +#define nvi_next _nvi_un._nvi._nvi_next +#define nvi_prev _nvi_un._nvi._nvi_prev + +typedef struct { + i_nvp_t *nvp_list; /* linked list of nvpairs */ + i_nvp_t *nvp_last; /* last nvpair */ + i_nvp_t *nvp_curr; /* current walker nvpair */ + nv_alloc_t *nvp_nva; /* pluggable allocator */ + uint32_t nvp_stat; /* internal state */ +} nvpriv_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _NVPAIR_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/pathname.h +++ linux-aws-4.15.0/zfs/include/sys/pathname.h @@ -0,0 +1,70 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * Portions of this source code were derived from Berkeley 4.3 BSD + * under license from the Regents of the University of California. + */ + +#ifndef _SYS_PATHNAME_H +#define _SYS_PATHNAME_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pathname structure. + * System calls that operate on path names gather the path name + * from the system call into this structure and reduce it by + * peeling off translated components. If a symbolic link is + * encountered the new path name to be translated is also + * assembled in this structure. + * + * By convention pn_buf is not changed once it's been set to point + * to the underlying storage; routines which manipulate the pathname + * do so by changing pn_path and pn_pathlen. pn_pathlen is redundant + * since the path name is null-terminated, but is provided to make + * some computations faster. + */ +typedef struct pathname { + char *pn_buf; /* underlying storage */ + char *pn_path; /* remaining pathname */ + size_t pn_pathlen; /* remaining length */ + size_t pn_bufsize; /* total size of pn_buf */ +} pathname_t; + +extern void pn_alloc(struct pathname *); +extern void pn_alloc_sz(struct pathname *, size_t); +extern void pn_free(struct pathname *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_PATHNAME_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/policy.h +++ linux-aws-4.15.0/zfs/include/sys/policy.h @@ -0,0 +1,60 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2015, Joyent, Inc. All rights reserved. + * Copyright (c) 2016, Lawrence Livermore National Security, LLC. + */ + +#ifndef _SYS_POLICY_H +#define _SYS_POLICY_H + +#ifdef _KERNEL + +#include +#include +#include +#include + +int secpolicy_nfs(const cred_t *); +int secpolicy_sys_config(const cred_t *, boolean_t); +int secpolicy_vnode_access2(const cred_t *, struct inode *, + uid_t, mode_t, mode_t); +int secpolicy_vnode_any_access(const cred_t *, struct inode *, uid_t); +int secpolicy_vnode_chown(const cred_t *, uid_t); +int secpolicy_vnode_create_gid(const cred_t *); +int secpolicy_vnode_remove(const cred_t *); +int secpolicy_vnode_setdac(const cred_t *, uid_t); +int secpolicy_vnode_setid_retain(const cred_t *, boolean_t); +int secpolicy_vnode_setids_setgids(const cred_t *, gid_t); +int secpolicy_zinject(const cred_t *); +int secpolicy_zfs(const cred_t *); +void secpolicy_setid_clear(vattr_t *, cred_t *); +int secpolicy_setid_setsticky_clear(struct inode *, vattr_t *, + const vattr_t *, cred_t *); +int secpolicy_xvattr(xvattr_t *, uid_t, cred_t *, vtype_t); +int secpolicy_vnode_setattr(cred_t *, struct inode *, struct vattr *, + const struct vattr *, int, int (void *, int, cred_t *), void *); +int secpolicy_basic_link(const cred_t *); + +#endif /* _KERNEL */ +#endif /* _SYS_POLICY_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/range_tree.h +++ linux-aws-4.15.0/zfs/include/sys/range_tree.h @@ -0,0 +1,97 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_RANGE_TREE_H +#define _SYS_RANGE_TREE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define RANGE_TREE_HISTOGRAM_SIZE 64 + +typedef struct range_tree_ops range_tree_ops_t; + +typedef struct range_tree { + avl_tree_t rt_root; /* offset-ordered segment AVL tree */ + uint64_t rt_space; /* sum of all segments in the map */ + range_tree_ops_t *rt_ops; + void *rt_arg; + + /* + * The rt_histogram maintains a histogram of ranges. Each bucket, + * rt_histogram[i], contains the number of ranges whose size is: + * 2^i <= size of range in bytes < 2^(i+1) + */ + uint64_t rt_histogram[RANGE_TREE_HISTOGRAM_SIZE]; + kmutex_t *rt_lock; /* pointer to lock that protects map */ +} range_tree_t; + +typedef struct range_seg { + avl_node_t rs_node; /* AVL node */ + avl_node_t rs_pp_node; /* AVL picker-private node */ + uint64_t rs_start; /* starting offset of this segment */ + uint64_t rs_end; /* ending offset (non-inclusive) */ +} range_seg_t; + +struct range_tree_ops { + void (*rtop_create)(range_tree_t *rt, void *arg); + void (*rtop_destroy)(range_tree_t *rt, void *arg); + void (*rtop_add)(range_tree_t *rt, range_seg_t *rs, void *arg); + void (*rtop_remove)(range_tree_t *rt, range_seg_t *rs, void *arg); + void (*rtop_vacate)(range_tree_t *rt, void *arg); +}; + +typedef void range_tree_func_t(void *arg, uint64_t start, uint64_t size); + +void range_tree_init(void); +void range_tree_fini(void); +range_tree_t *range_tree_create(range_tree_ops_t *ops, void *arg, kmutex_t *lp); +void range_tree_destroy(range_tree_t *rt); +boolean_t range_tree_contains(range_tree_t *rt, uint64_t start, uint64_t size); +uint64_t range_tree_space(range_tree_t *rt); +void range_tree_verify(range_tree_t *rt, uint64_t start, uint64_t size); +void range_tree_swap(range_tree_t **rtsrc, range_tree_t **rtdst); +void range_tree_stat_verify(range_tree_t *rt); + +void range_tree_add(void *arg, uint64_t start, uint64_t size); +void range_tree_remove(void *arg, uint64_t start, uint64_t size); +void range_tree_clear(range_tree_t *rt, uint64_t start, uint64_t size); + +void range_tree_vacate(range_tree_t *rt, range_tree_func_t *func, void *arg); +void range_tree_walk(range_tree_t *rt, range_tree_func_t *func, void *arg); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_RANGE_TREE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/refcount.h +++ linux-aws-4.15.0/zfs/include/sys/refcount.h @@ -0,0 +1,130 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#ifndef _SYS_REFCOUNT_H +#define _SYS_REFCOUNT_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * If the reference is held only by the calling function and not any + * particular object, use FTAG (which is a string) for the holder_tag. + * Otherwise, use the object that holds the reference. + */ +#define FTAG ((char *)__func__) + +/* + * Starting with 4.11, torvalds/linux@f405df5, the linux kernel defines a + * refcount_t type of its own. The macro below effectively changes references + * in the ZFS code from refcount_t to zfs_refcount_t at compile time, so that + * existing code need not be altered, reducing conflicts when landing openZFS + * patches. + */ + +#define refcount_t zfs_refcount_t +#define refcount_add zfs_refcount_add + +#ifdef ZFS_DEBUG +typedef struct reference { + list_node_t ref_link; + void *ref_holder; + uint64_t ref_number; + uint8_t *ref_removed; +} reference_t; + +typedef struct refcount { + kmutex_t rc_mtx; + boolean_t rc_tracked; + list_t rc_list; + list_t rc_removed; + uint64_t rc_count; + uint64_t rc_removed_count; +} zfs_refcount_t; + +/* Note: refcount_t must be initialized with refcount_create[_untracked]() */ + +void refcount_create(refcount_t *rc); +void refcount_create_untracked(refcount_t *rc); +void refcount_create_tracked(refcount_t *rc); +void refcount_destroy(refcount_t *rc); +void refcount_destroy_many(refcount_t *rc, uint64_t number); +int refcount_is_zero(refcount_t *rc); +int64_t refcount_count(refcount_t *rc); +int64_t zfs_refcount_add(refcount_t *rc, void *holder_tag); +int64_t refcount_remove(refcount_t *rc, void *holder_tag); +int64_t refcount_add_many(refcount_t *rc, uint64_t number, void *holder_tag); +int64_t refcount_remove_many(refcount_t *rc, uint64_t number, void *holder_tag); +void refcount_transfer(refcount_t *dst, refcount_t *src); +void refcount_transfer_ownership(refcount_t *, void *, void *); +boolean_t refcount_held(refcount_t *, void *); +boolean_t refcount_not_held(refcount_t *, void *); + +void refcount_init(void); +void refcount_fini(void); + +#else /* ZFS_DEBUG */ + +typedef struct refcount { + uint64_t rc_count; +} refcount_t; + +#define refcount_create(rc) ((rc)->rc_count = 0) +#define refcount_create_untracked(rc) ((rc)->rc_count = 0) +#define refcount_create_tracked(rc) ((rc)->rc_count = 0) +#define refcount_destroy(rc) ((rc)->rc_count = 0) +#define refcount_destroy_many(rc, number) ((rc)->rc_count = 0) +#define refcount_is_zero(rc) ((rc)->rc_count == 0) +#define refcount_count(rc) ((rc)->rc_count) +#define zfs_refcount_add(rc, holder) atomic_inc_64_nv(&(rc)->rc_count) +#define refcount_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count) +#define refcount_add_many(rc, number, holder) \ + atomic_add_64_nv(&(rc)->rc_count, number) +#define refcount_remove_many(rc, number, holder) \ + atomic_add_64_nv(&(rc)->rc_count, -number) +#define refcount_transfer(dst, src) { \ + uint64_t __tmp = (src)->rc_count; \ + atomic_add_64(&(src)->rc_count, -__tmp); \ + atomic_add_64(&(dst)->rc_count, __tmp); \ +} +#define refcount_transfer_ownership(rc, current_holder, new_holder) (void)0 +#define refcount_held(rc, holder) ((rc)->rc_count > 0) +#define refcount_not_held(rc, holder) (B_TRUE) + +#define refcount_init() +#define refcount_fini() + +#endif /* ZFS_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_REFCOUNT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/rrwlock.h +++ linux-aws-4.15.0/zfs/include/sys/rrwlock.h @@ -0,0 +1,115 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#ifndef _SYS_RR_RW_LOCK_H +#define _SYS_RR_RW_LOCK_H + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/* + * A reader-writer lock implementation that allows re-entrant reads, but + * still gives writers priority on "new" reads. + * + * See rrwlock.c for more details about the implementation. + * + * Fields of the rrwlock_t structure: + * - rr_lock: protects modification and reading of rrwlock_t fields + * - rr_cv: cv for waking up readers or waiting writers + * - rr_writer: thread id of the current writer + * - rr_anon_rount: number of active anonymous readers + * - rr_linked_rcount: total number of non-anonymous active readers + * - rr_writer_wanted: a writer wants the lock + */ +typedef struct rrwlock { + kmutex_t rr_lock; + kcondvar_t rr_cv; + kthread_t *rr_writer; + refcount_t rr_anon_rcount; + refcount_t rr_linked_rcount; + boolean_t rr_writer_wanted; + boolean_t rr_track_all; +} rrwlock_t; + +/* + * 'tag' is used in reference counting tracking. The + * 'tag' must be the same in a rrw_enter() as in its + * corresponding rrw_exit(). + */ +void rrw_init(rrwlock_t *rrl, boolean_t track_all); +void rrw_destroy(rrwlock_t *rrl); +void rrw_enter(rrwlock_t *rrl, krw_t rw, void *tag); +void rrw_enter_read(rrwlock_t *rrl, void *tag); +void rrw_enter_read_prio(rrwlock_t *rrl, void *tag); +void rrw_enter_write(rrwlock_t *rrl); +void rrw_exit(rrwlock_t *rrl, void *tag); +boolean_t rrw_held(rrwlock_t *rrl, krw_t rw); +void rrw_tsd_destroy(void *arg); + +#define RRW_READ_HELD(x) rrw_held(x, RW_READER) +#define RRW_WRITE_HELD(x) rrw_held(x, RW_WRITER) +#define RRW_LOCK_HELD(x) \ + (rrw_held(x, RW_WRITER) || rrw_held(x, RW_READER)) + +/* + * A reader-mostly lock implementation, tuning above reader-writer locks + * for hightly parallel read acquisitions, pessimizing write acquisitions. + * + * This should be a prime number. See comment in rrwlock.c near + * RRM_TD_LOCK() for details. + */ +#define RRM_NUM_LOCKS 17 +typedef struct rrmlock { + rrwlock_t locks[RRM_NUM_LOCKS]; +} rrmlock_t; + +void rrm_init(rrmlock_t *rrl, boolean_t track_all); +void rrm_destroy(rrmlock_t *rrl); +void rrm_enter(rrmlock_t *rrl, krw_t rw, void *tag); +void rrm_enter_read(rrmlock_t *rrl, void *tag); +void rrm_enter_write(rrmlock_t *rrl); +void rrm_exit(rrmlock_t *rrl, void *tag); +boolean_t rrm_held(rrmlock_t *rrl, krw_t rw); + +#define RRM_READ_HELD(x) rrm_held(x, RW_READER) +#define RRM_WRITE_HELD(x) rrm_held(x, RW_WRITER) +#define RRM_LOCK_HELD(x) \ + (rrm_held(x, RW_WRITER) || rrm_held(x, RW_READER)) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_RR_RW_LOCK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sa.h +++ linux-aws-4.15.0/zfs/include/sys/sa.h @@ -0,0 +1,173 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_SA_H +#define _SYS_SA_H + +#include + +/* + * Currently available byteswap functions. + * If it all possible new attributes should used + * one of the already defined byteswap functions. + * If a new byteswap function is added then the + * ZPL/Pool version will need to be bumped. + */ + +typedef enum sa_bswap_type { + SA_UINT64_ARRAY, + SA_UINT32_ARRAY, + SA_UINT16_ARRAY, + SA_UINT8_ARRAY, + SA_ACL, +} sa_bswap_type_t; + +typedef uint16_t sa_attr_type_t; + +/* + * Attribute to register support for. + */ +typedef struct sa_attr_reg { + char *sa_name; /* attribute name */ + uint16_t sa_length; + sa_bswap_type_t sa_byteswap; /* bswap functon enum */ + sa_attr_type_t sa_attr; /* filled in during registration */ +} sa_attr_reg_t; + + +typedef void (sa_data_locator_t)(void **, uint32_t *, uint32_t, + boolean_t, void *userptr); + +/* + * array of attributes to store. + * + * This array should be treated as opaque/private data. + * The SA_BULK_ADD_ATTR() macro should be used for manipulating + * the array. + * + * When sa_replace_all_by_template() is used the attributes + * will be stored in the order defined in the array, except that + * the attributes may be split between the bonus and the spill buffer + * + */ +typedef struct sa_bulk_attr { + void *sa_data; + sa_data_locator_t *sa_data_func; + uint16_t sa_length; + sa_attr_type_t sa_attr; + /* the following are private to the sa framework */ + void *sa_addr; + uint16_t sa_buftype; + uint16_t sa_size; +} sa_bulk_attr_t; + +/* + * The on-disk format of sa_hdr_phys_t limits SA lengths to 16-bit values. + */ +#define SA_ATTR_MAX_LEN UINT16_MAX + +/* + * special macro for adding entries for bulk attr support + * bulk - sa_bulk_attr_t + * count - integer that will be incremented during each add + * attr - attribute to manipulate + * func - function for accessing data. + * data - pointer to data. + * len - length of data + */ + +#define SA_ADD_BULK_ATTR(b, idx, attr, func, data, len) \ +{ \ + ASSERT3U(len, <=, SA_ATTR_MAX_LEN); \ + b[idx].sa_attr = attr;\ + b[idx].sa_data_func = func; \ + b[idx].sa_data = data; \ + b[idx++].sa_length = len; \ +} + +typedef struct sa_os sa_os_t; + +typedef enum sa_handle_type { + SA_HDL_SHARED, + SA_HDL_PRIVATE +} sa_handle_type_t; + +struct sa_handle; +typedef void *sa_lookup_tab_t; +typedef struct sa_handle sa_handle_t; + +typedef void (sa_update_cb_t)(sa_handle_t *, dmu_tx_t *tx); + +int sa_handle_get(objset_t *, uint64_t, void *userp, + sa_handle_type_t, sa_handle_t **); +int sa_handle_get_from_db(objset_t *, dmu_buf_t *, void *userp, + sa_handle_type_t, sa_handle_t **); +void sa_handle_destroy(sa_handle_t *); +int sa_buf_hold(objset_t *, uint64_t, void *, dmu_buf_t **); +void sa_buf_rele(dmu_buf_t *, void *); +int sa_lookup(sa_handle_t *, sa_attr_type_t, void *buf, uint32_t buflen); +int sa_update(sa_handle_t *, sa_attr_type_t, void *buf, + uint32_t buflen, dmu_tx_t *); +int sa_remove(sa_handle_t *, sa_attr_type_t, dmu_tx_t *); +int sa_bulk_lookup(sa_handle_t *, sa_bulk_attr_t *, int count); +int sa_bulk_lookup_locked(sa_handle_t *, sa_bulk_attr_t *, int count); +int sa_bulk_update(sa_handle_t *, sa_bulk_attr_t *, int count, dmu_tx_t *); +int sa_size(sa_handle_t *, sa_attr_type_t, int *); +void sa_object_info(sa_handle_t *, dmu_object_info_t *); +void sa_object_size(sa_handle_t *, uint32_t *, u_longlong_t *); +void *sa_get_userdata(sa_handle_t *); +void sa_set_userp(sa_handle_t *, void *); +dmu_buf_t *sa_get_db(sa_handle_t *); +uint64_t sa_handle_object(sa_handle_t *); +boolean_t sa_attr_would_spill(sa_handle_t *, sa_attr_type_t, int size); +void sa_spill_rele(sa_handle_t *); +void sa_register_update_callback(objset_t *, sa_update_cb_t *); +int sa_setup(objset_t *, uint64_t, sa_attr_reg_t *, int, sa_attr_type_t **); +void sa_tear_down(objset_t *); +int sa_replace_all_by_template(sa_handle_t *, sa_bulk_attr_t *, + int, dmu_tx_t *); +int sa_replace_all_by_template_locked(sa_handle_t *, sa_bulk_attr_t *, + int, dmu_tx_t *); +boolean_t sa_enabled(objset_t *); +void sa_cache_init(void); +void sa_cache_fini(void); +int sa_set_sa_object(objset_t *, uint64_t); +int sa_hdrsize(void *); +void sa_handle_lock(sa_handle_t *); +void sa_handle_unlock(sa_handle_t *); + +#ifdef _KERNEL +int sa_lookup_uio(sa_handle_t *, sa_attr_type_t, uio_t *); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SA_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sa_impl.h +++ linux-aws-4.15.0/zfs/include/sys/sa_impl.h @@ -0,0 +1,289 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_SA_IMPL_H +#define _SYS_SA_IMPL_H + +#include +#include +#include + +/* + * Array of known attributes and their + * various characteristics. + */ +typedef struct sa_attr_table { + sa_attr_type_t sa_attr; + uint8_t sa_registered; + uint16_t sa_length; + sa_bswap_type_t sa_byteswap; + char *sa_name; +} sa_attr_table_t; + +/* + * Zap attribute format for attribute registration + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * | unused | len | bswap | attr num | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * Zap attribute format for layout information. + * + * layout information is stored as an array of attribute numbers + * The name of the attribute is the layout number (0, 1, 2, ...) + * + * 16 0 + * +---- ---+ + * | attr # | + * +--------+ + * | attr # | + * +--- ----+ + * ...... + * + */ + +#define ATTR_BSWAP(x) BF32_GET(x, 16, 8) +#define ATTR_LENGTH(x) BF32_GET(x, 24, 16) +#define ATTR_NUM(x) BF32_GET(x, 0, 16) +#define ATTR_ENCODE(x, attr, length, bswap) \ +{ \ + BF64_SET(x, 24, 16, length); \ + BF64_SET(x, 16, 8, bswap); \ + BF64_SET(x, 0, 16, attr); \ +} + +#define TOC_OFF(x) BF32_GET(x, 0, 23) +#define TOC_ATTR_PRESENT(x) BF32_GET(x, 31, 1) +#define TOC_LEN_IDX(x) BF32_GET(x, 24, 4) +#define TOC_ATTR_ENCODE(x, len_idx, offset) \ +{ \ + BF32_SET(x, 31, 1, 1); \ + BF32_SET(x, 24, 7, len_idx); \ + BF32_SET(x, 0, 24, offset); \ +} + +#define SA_LAYOUTS "LAYOUTS" +#define SA_REGISTRY "REGISTRY" + +/* + * Each unique layout will have their own table + * sa_lot (layout_table) + */ +typedef struct sa_lot { + avl_node_t lot_num_node; + avl_node_t lot_hash_node; + uint64_t lot_num; + uint64_t lot_hash; + sa_attr_type_t *lot_attrs; /* array of attr #'s */ + uint32_t lot_var_sizes; /* how many aren't fixed size */ + uint32_t lot_attr_count; /* total attr count */ + list_t lot_idx_tab; /* should be only a couple of entries */ + int lot_instance; /* used with lot_hash to identify entry */ +} sa_lot_t; + +/* index table of offsets */ +typedef struct sa_idx_tab { + list_node_t sa_next; + sa_lot_t *sa_layout; + uint16_t *sa_variable_lengths; + refcount_t sa_refcount; + uint32_t *sa_idx_tab; /* array of offsets */ +} sa_idx_tab_t; + +/* + * Since the offset/index information into the actual data + * will usually be identical we can share that information with + * all handles that have the exact same offsets. + * + * You would typically only have a large number of different table of + * contents if you had a several variable sized attributes. + * + * Two AVL trees are used to track the attribute layout numbers. + * one is keyed by number and will be consulted when a DMU_OT_SA + * object is first read. The second tree is keyed by the hash signature + * of the attributes and will be consulted when an attribute is added + * to determine if we already have an instance of that layout. Both + * of these tree's are interconnected. The only difference is that + * when an entry is found in the "hash" tree the list of attributes will + * need to be compared against the list of attributes you have in hand. + * The assumption is that typically attributes will just be updated and + * adding a completely new attribute is a very rare operation. + */ +struct sa_os { + kmutex_t sa_lock; + boolean_t sa_need_attr_registration; + boolean_t sa_force_spill; + uint64_t sa_master_obj; + uint64_t sa_reg_attr_obj; + uint64_t sa_layout_attr_obj; + int sa_num_attrs; + sa_attr_table_t *sa_attr_table; /* private attr table */ + sa_update_cb_t *sa_update_cb; + avl_tree_t sa_layout_num_tree; /* keyed by layout number */ + avl_tree_t sa_layout_hash_tree; /* keyed by layout hash value */ + int sa_user_table_sz; + sa_attr_type_t *sa_user_table; /* user name->attr mapping table */ +}; + +/* + * header for all bonus and spill buffers. + * + * The header has a fixed portion with a variable number + * of "lengths" depending on the number of variable sized + * attributes which are determined by the "layout number" + */ + +#define SA_MAGIC 0x2F505A /* ZFS SA */ +typedef struct sa_hdr_phys { + uint32_t sa_magic; + /* + * Encoded with hdrsize and layout number as follows: + * 16 10 0 + * +--------+-------+ + * | hdrsz |layout | + * +--------+-------+ + * + * Bits 0-10 are the layout number + * Bits 11-16 are the size of the header. + * The hdrsize is the number * 8 + * + * For example. + * hdrsz of 1 ==> 8 byte header + * 2 ==> 16 byte header + * + */ + uint16_t sa_layout_info; + uint16_t sa_lengths[1]; /* optional sizes for variable length attrs */ + /* ... Data follows the lengths. */ +} sa_hdr_phys_t; + +#define SA_HDR_LAYOUT_NUM(hdr) BF32_GET(hdr->sa_layout_info, 0, 10) +#define SA_HDR_SIZE(hdr) BF32_GET_SB(hdr->sa_layout_info, 10, 6, 3, 0) +#define SA_HDR_LAYOUT_INFO_ENCODE(x, num, size) \ +{ \ + BF32_SET_SB(x, 10, 6, 3, 0, size); \ + BF32_SET(x, 0, 10, num); \ +} + +typedef enum sa_buf_type { + SA_BONUS = 1, + SA_SPILL = 2 +} sa_buf_type_t; + +typedef enum sa_data_op { + SA_LOOKUP, + SA_UPDATE, + SA_ADD, + SA_REPLACE, + SA_REMOVE +} sa_data_op_t; + +/* + * Opaque handle used for most sa functions + * + * This needs to be kept as small as possible. + */ + +struct sa_handle { + dmu_buf_user_t sa_dbu; + kmutex_t sa_lock; + dmu_buf_t *sa_bonus; + dmu_buf_t *sa_spill; + objset_t *sa_os; + void *sa_userp; + sa_idx_tab_t *sa_bonus_tab; /* idx of bonus */ + sa_idx_tab_t *sa_spill_tab; /* only present if spill activated */ +}; + +#define SA_GET_DB(hdl, type) \ + (dmu_buf_impl_t *)((type == SA_BONUS) ? hdl->sa_bonus : hdl->sa_spill) + +#define SA_GET_HDR(hdl, type) \ + ((sa_hdr_phys_t *)((dmu_buf_impl_t *)(SA_GET_DB(hdl, \ + type))->db.db_data)) + +#define SA_IDX_TAB_GET(hdl, type) \ + (type == SA_BONUS ? hdl->sa_bonus_tab : hdl->sa_spill_tab) + +#define IS_SA_BONUSTYPE(a) \ + ((a == DMU_OT_SA) ? B_TRUE : B_FALSE) + +#define SA_BONUSTYPE_FROM_DB(db) \ + (dmu_get_bonustype((dmu_buf_t *)db)) + +#define SA_BLKPTR_SPACE (DN_OLD_MAX_BONUSLEN - sizeof (blkptr_t)) + +#define SA_LAYOUT_NUM(x, type) \ + ((!IS_SA_BONUSTYPE(type) ? 0 : (((IS_SA_BONUSTYPE(type)) && \ + ((SA_HDR_LAYOUT_NUM(x)) == 0)) ? 1 : SA_HDR_LAYOUT_NUM(x)))) + + +#define SA_REGISTERED_LEN(sa, attr) sa->sa_attr_table[attr].sa_length + +#define SA_ATTR_LEN(sa, idx, attr, hdr) ((SA_REGISTERED_LEN(sa, attr) == 0) ?\ + hdr->sa_lengths[TOC_LEN_IDX(idx->sa_idx_tab[attr])] : \ + SA_REGISTERED_LEN(sa, attr)) + +#define SA_SET_HDR(hdr, num, size) \ + { \ + hdr->sa_magic = SA_MAGIC; \ + SA_HDR_LAYOUT_INFO_ENCODE(hdr->sa_layout_info, num, size); \ + } + +#define SA_ATTR_INFO(sa, idx, hdr, attr, bulk, type, hdl) \ + { \ + bulk.sa_size = SA_ATTR_LEN(sa, idx, attr, hdr); \ + bulk.sa_buftype = type; \ + bulk.sa_addr = \ + (void *)((uintptr_t)TOC_OFF(idx->sa_idx_tab[attr]) + \ + (uintptr_t)hdr); \ +} + +#define SA_HDR_SIZE_MATCH_LAYOUT(hdr, tb) \ + (SA_HDR_SIZE(hdr) == (sizeof (sa_hdr_phys_t) + \ + (tb->lot_var_sizes > 1 ? P2ROUNDUP((tb->lot_var_sizes - 1) * \ + sizeof (uint16_t), 8) : 0))) + +int sa_add_impl(sa_handle_t *, sa_attr_type_t, + uint32_t, sa_data_locator_t, void *, dmu_tx_t *); + +void sa_register_update_callback_locked(objset_t *, sa_update_cb_t *); +int sa_size_locked(sa_handle_t *, sa_attr_type_t, int *); + +void sa_default_locator(void **, uint32_t *, uint32_t, boolean_t, void *); +int sa_attr_size(sa_os_t *, sa_idx_tab_t *, sa_attr_type_t, + uint16_t *, sa_hdr_phys_t *); + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SA_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sdt.h +++ linux-aws-4.15.0/zfs/include/sys/sdt.h @@ -0,0 +1,58 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SDT_H +#define _SYS_SDT_H + +#ifndef _KERNEL + +#define ZFS_PROBE(a) ((void) 0) +#define ZFS_PROBE1(a, c) ((void) 0) +#define ZFS_PROBE2(a, c, e) ((void) 0) +#define ZFS_PROBE3(a, c, e, g) ((void) 0) +#define ZFS_PROBE4(a, c, e, g, i) ((void) 0) + +#endif /* _KERNEL */ + +/* + * The set-error SDT probe is extra static, in that we declare its fake + * function literally, rather than with the DTRACE_PROBE1() macro. This is + * necessary so that SET_ERROR() can evaluate to a value, which wouldn't + * be possible if it required multiple statements (to declare the function + * and then call it). + * + * SET_ERROR() uses the comma operator so that it can be used without much + * additional code. For example, "return (EINVAL);" becomes + * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated + * twice, so it should not have side effects (e.g. something like: + * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice). + */ +extern void __set_error(const char *file, const char *func, int line, int err); +#undef SET_ERROR +#define SET_ERROR(err) \ + (__set_error(__FILE__, __func__, __LINE__, err), err) + +#endif /* _SYS_SDT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sha2.h +++ linux-aws-4.15.0/zfs/include/sys/sha2.h @@ -0,0 +1,155 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* Copyright 2013 Saso Kiselkov. All rights reserved. */ + +#ifndef _SYS_SHA2_H +#define _SYS_SHA2_H + +#ifdef _KERNEL +#include /* for uint_* */ +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define SHA2_HMAC_MIN_KEY_LEN 1 /* SHA2-HMAC min key length in bytes */ +#define SHA2_HMAC_MAX_KEY_LEN INT_MAX /* SHA2-HMAC max key length in bytes */ + +#define SHA256_DIGEST_LENGTH 32 /* SHA256 digest length in bytes */ +#define SHA384_DIGEST_LENGTH 48 /* SHA384 digest length in bytes */ +#define SHA512_DIGEST_LENGTH 64 /* SHA512 digest length in bytes */ + +/* Truncated versions of SHA-512 according to FIPS-180-4, section 5.3.6 */ +#define SHA512_224_DIGEST_LENGTH 28 /* SHA512/224 digest length */ +#define SHA512_256_DIGEST_LENGTH 32 /* SHA512/256 digest length */ + +#define SHA256_HMAC_BLOCK_SIZE 64 /* SHA256-HMAC block size */ +#define SHA512_HMAC_BLOCK_SIZE 128 /* SHA512-HMAC block size */ + +#define SHA256 0 +#define SHA256_HMAC 1 +#define SHA256_HMAC_GEN 2 +#define SHA384 3 +#define SHA384_HMAC 4 +#define SHA384_HMAC_GEN 5 +#define SHA512 6 +#define SHA512_HMAC 7 +#define SHA512_HMAC_GEN 8 +#define SHA512_224 9 +#define SHA512_256 10 + +/* + * SHA2 context. + * The contents of this structure are a private interface between the + * Init/Update/Final calls of the functions defined below. + * Callers must never attempt to read or write any of the fields + * in this structure directly. + */ +typedef struct { + uint32_t algotype; /* Algorithm Type */ + + /* state (ABCDEFGH) */ + union { + uint32_t s32[8]; /* for SHA256 */ + uint64_t s64[8]; /* for SHA384/512 */ + } state; + /* number of bits */ + union { + uint32_t c32[2]; /* for SHA256 , modulo 2^64 */ + uint64_t c64[2]; /* for SHA384/512, modulo 2^128 */ + } count; + union { + uint8_t buf8[128]; /* undigested input */ + uint32_t buf32[32]; /* realigned input */ + uint64_t buf64[16]; /* realigned input */ + } buf_un; +} SHA2_CTX; + +typedef SHA2_CTX SHA256_CTX; +typedef SHA2_CTX SHA384_CTX; +typedef SHA2_CTX SHA512_CTX; + +extern void SHA2Init(uint64_t mech, SHA2_CTX *); + +extern void SHA2Update(SHA2_CTX *, const void *, size_t); + +extern void SHA2Final(void *, SHA2_CTX *); + +extern void SHA256Init(SHA256_CTX *); + +extern void SHA256Update(SHA256_CTX *, const void *, size_t); + +extern void SHA256Final(void *, SHA256_CTX *); + +extern void SHA384Init(SHA384_CTX *); + +extern void SHA384Update(SHA384_CTX *, const void *, size_t); + +extern void SHA384Final(void *, SHA384_CTX *); + +extern void SHA512Init(SHA512_CTX *); + +extern void SHA512Update(SHA512_CTX *, const void *, size_t); + +extern void SHA512Final(void *, SHA512_CTX *); + +#ifdef _SHA2_IMPL +/* + * The following types/functions are all private to the implementation + * of the SHA2 functions and must not be used by consumers of the interface + */ + +/* + * List of support mechanisms in this module. + * + * It is important to note that in the module, division or modulus calculations + * are used on the enumerated type to determine which mechanism is being used; + * therefore, changing the order or additional mechanisms should be done + * carefully + */ +typedef enum sha2_mech_type { + SHA256_MECH_INFO_TYPE, /* SUN_CKM_SHA256 */ + SHA256_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC */ + SHA256_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA256_HMAC_GENERAL */ + SHA384_MECH_INFO_TYPE, /* SUN_CKM_SHA384 */ + SHA384_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC */ + SHA384_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA384_HMAC_GENERAL */ + SHA512_MECH_INFO_TYPE, /* SUN_CKM_SHA512 */ + SHA512_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC */ + SHA512_HMAC_GEN_MECH_INFO_TYPE, /* SUN_CKM_SHA512_HMAC_GENERAL */ + SHA512_224_MECH_INFO_TYPE, /* SUN_CKM_SHA512_224 */ + SHA512_256_MECH_INFO_TYPE /* SUN_CKM_SHA512_256 */ +} sha2_mech_type_t; + +#endif /* _SHA2_IMPL */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SHA2_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/skein.h +++ linux-aws-4.15.0/zfs/include/sys/skein.h @@ -0,0 +1,183 @@ +/* + * Interface declarations for Skein hashing. + * Source code author: Doug Whiting, 2008. + * This algorithm and source code is released to the public domain. + * + * The following compile-time switches may be defined to control some + * tradeoffs between speed, code size, error checking, and security. + * + * The "default" note explains what happens when the switch is not defined. + * + * SKEIN_DEBUG -- make callouts from inside Skein code + * to examine/display intermediate values. + * [default: no callouts (no overhead)] + * + * SKEIN_ERR_CHECK -- how error checking is handled inside Skein + * code. If not defined, most error checking + * is disabled (for performance). Otherwise, + * the switch value is interpreted as: + * 0: use assert() to flag errors + * 1: return SKEIN_FAIL to flag errors + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ +#ifndef _SYS_SKEIN_H_ +#define _SYS_SKEIN_H_ + +#ifdef _KERNEL +#include /* get size_t definition */ +#else +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + SKEIN_SUCCESS = 0, /* return codes from Skein calls */ + SKEIN_FAIL = 1, + SKEIN_BAD_HASHLEN = 2 +}; + +#define SKEIN_MODIFIER_WORDS (2) /* number of modifier (tweak) words */ + +#define SKEIN_256_STATE_WORDS (4) +#define SKEIN_512_STATE_WORDS (8) +#define SKEIN1024_STATE_WORDS (16) +#define SKEIN_MAX_STATE_WORDS (16) + +#define SKEIN_256_STATE_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BYTES (8 * SKEIN1024_STATE_WORDS) + +#define SKEIN_256_STATE_BITS (64 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_STATE_BITS (64 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_STATE_BITS (64 * SKEIN1024_STATE_WORDS) + +#define SKEIN_256_BLOCK_BYTES (8 * SKEIN_256_STATE_WORDS) +#define SKEIN_512_BLOCK_BYTES (8 * SKEIN_512_STATE_WORDS) +#define SKEIN1024_BLOCK_BYTES (8 * SKEIN1024_STATE_WORDS) + +typedef struct { + size_t hashBitLen; /* size of hash result, in bits */ + size_t bCnt; /* current byte count in buffer b[] */ + /* tweak words: T[0]=byte cnt, T[1]=flags */ + uint64_t T[SKEIN_MODIFIER_WORDS]; +} Skein_Ctxt_Hdr_t; + +typedef struct { /* 256-bit Skein hash context structure */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + uint64_t X[SKEIN_256_STATE_WORDS]; /* chaining variables */ + /* partial block buffer (8-byte aligned) */ + uint8_t b[SKEIN_256_BLOCK_BYTES]; +} Skein_256_Ctxt_t; + +typedef struct { /* 512-bit Skein hash context structure */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + uint64_t X[SKEIN_512_STATE_WORDS]; /* chaining variables */ + /* partial block buffer (8-byte aligned) */ + uint8_t b[SKEIN_512_BLOCK_BYTES]; +} Skein_512_Ctxt_t; + +typedef struct { /* 1024-bit Skein hash context structure */ + Skein_Ctxt_Hdr_t h; /* common header context variables */ + uint64_t X[SKEIN1024_STATE_WORDS]; /* chaining variables */ + /* partial block buffer (8-byte aligned) */ + uint8_t b[SKEIN1024_BLOCK_BYTES]; +} Skein1024_Ctxt_t; + +/* Skein APIs for (incremental) "straight hashing" */ +int Skein_256_Init(Skein_256_Ctxt_t *ctx, size_t hashBitLen); +int Skein_512_Init(Skein_512_Ctxt_t *ctx, size_t hashBitLen); +int Skein1024_Init(Skein1024_Ctxt_t *ctx, size_t hashBitLen); + +int Skein_256_Update(Skein_256_Ctxt_t *ctx, const uint8_t *msg, + size_t msgByteCnt); +int Skein_512_Update(Skein_512_Ctxt_t *ctx, const uint8_t *msg, + size_t msgByteCnt); +int Skein1024_Update(Skein1024_Ctxt_t *ctx, const uint8_t *msg, + size_t msgByteCnt); + +int Skein_256_Final(Skein_256_Ctxt_t *ctx, uint8_t *hashVal); +int Skein_512_Final(Skein_512_Ctxt_t *ctx, uint8_t *hashVal); +int Skein1024_Final(Skein1024_Ctxt_t *ctx, uint8_t *hashVal); + +/* + * Skein APIs for "extended" initialization: MAC keys, tree hashing. + * After an InitExt() call, just use Update/Final calls as with Init(). + * + * Notes: Same parameters as _Init() calls, plus treeInfo/key/keyBytes. + * When keyBytes == 0 and treeInfo == SKEIN_SEQUENTIAL, + * the results of InitExt() are identical to calling Init(). + * The function Init() may be called once to "precompute" the IV for + * a given hashBitLen value, then by saving a copy of the context + * the IV computation may be avoided in later calls. + * Similarly, the function InitExt() may be called once per MAC key + * to precompute the MAC IV, then a copy of the context saved and + * reused for each new MAC computation. + */ +int Skein_256_InitExt(Skein_256_Ctxt_t *ctx, size_t hashBitLen, + uint64_t treeInfo, const uint8_t *key, size_t keyBytes); +int Skein_512_InitExt(Skein_512_Ctxt_t *ctx, size_t hashBitLen, + uint64_t treeInfo, const uint8_t *key, size_t keyBytes); +int Skein1024_InitExt(Skein1024_Ctxt_t *ctx, size_t hashBitLen, + uint64_t treeInfo, const uint8_t *key, size_t keyBytes); + +/* + * Skein APIs for MAC and tree hash: + * Final_Pad: pad, do final block, but no OUTPUT type + * Output: do just the output stage + */ +int Skein_256_Final_Pad(Skein_256_Ctxt_t *ctx, uint8_t *hashVal); +int Skein_512_Final_Pad(Skein_512_Ctxt_t *ctx, uint8_t *hashVal); +int Skein1024_Final_Pad(Skein1024_Ctxt_t *ctx, uint8_t *hashVal); + +#ifndef SKEIN_TREE_HASH +#define SKEIN_TREE_HASH (1) +#endif +#if SKEIN_TREE_HASH +int Skein_256_Output(Skein_256_Ctxt_t *ctx, uint8_t *hashVal); +int Skein_512_Output(Skein_512_Ctxt_t *ctx, uint8_t *hashVal); +int Skein1024_Output(Skein1024_Ctxt_t *ctx, uint8_t *hashVal); +#endif + +/* + * When you initialize a Skein KCF hashing method you can pass this param + * structure in cm_param to fine-tune the algorithm's defaults. + */ +typedef struct skein_param { + size_t sp_digest_bitlen; /* length of digest in bits */ +} skein_param_t; + +/* Module definitions */ +#ifdef SKEIN_MODULE_IMPL +#define CKM_SKEIN_256 "CKM_SKEIN_256" +#define CKM_SKEIN_512 "CKM_SKEIN_512" +#define CKM_SKEIN1024 "CKM_SKEIN1024" +#define CKM_SKEIN_256_MAC "CKM_SKEIN_256_MAC" +#define CKM_SKEIN_512_MAC "CKM_SKEIN_512_MAC" +#define CKM_SKEIN1024_MAC "CKM_SKEIN1024_MAC" + +typedef enum skein_mech_type { + SKEIN_256_MECH_INFO_TYPE, + SKEIN_512_MECH_INFO_TYPE, + SKEIN1024_MECH_INFO_TYPE, + SKEIN_256_MAC_MECH_INFO_TYPE, + SKEIN_512_MAC_MECH_INFO_TYPE, + SKEIN1024_MAC_MECH_INFO_TYPE +} skein_mech_type_t; + +#define VALID_SKEIN_DIGEST_MECH(__mech) \ + ((int)(__mech) >= SKEIN_256_MECH_INFO_TYPE && \ + (__mech) <= SKEIN1024_MECH_INFO_TYPE) +#define VALID_SKEIN_MAC_MECH(__mech) \ + ((int)(__mech) >= SKEIN_256_MAC_MECH_INFO_TYPE && \ + (__mech) <= SKEIN1024_MAC_MECH_INFO_TYPE) +#endif /* SKEIN_MODULE_IMPL */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SKEIN_H_ */ --- linux-aws-4.15.0.orig/zfs/include/sys/spa.h +++ linux-aws-4.15.0/zfs/include/sys/spa.h @@ -0,0 +1,950 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2017 Joyent, Inc. + * Copyright (c) 2017 Datto Inc. + */ + +#ifndef _SYS_SPA_H +#define _SYS_SPA_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Forward references that lots of things need. + */ +typedef struct spa spa_t; +typedef struct vdev vdev_t; +typedef struct metaslab metaslab_t; +typedef struct metaslab_group metaslab_group_t; +typedef struct metaslab_class metaslab_class_t; +typedef struct zio zio_t; +typedef struct zilog zilog_t; +typedef struct spa_aux_vdev spa_aux_vdev_t; +typedef struct ddt ddt_t; +typedef struct ddt_entry ddt_entry_t; +typedef struct zbookmark_phys zbookmark_phys_t; + +struct dsl_pool; +struct dsl_dataset; + +/* + * General-purpose 32-bit and 64-bit bitfield encodings. + */ +#define BF32_DECODE(x, low, len) P2PHASE((x) >> (low), 1U << (len)) +#define BF64_DECODE(x, low, len) P2PHASE((x) >> (low), 1ULL << (len)) +#define BF32_ENCODE(x, low, len) (P2PHASE((x), 1U << (len)) << (low)) +#define BF64_ENCODE(x, low, len) (P2PHASE((x), 1ULL << (len)) << (low)) + +#define BF32_GET(x, low, len) BF32_DECODE(x, low, len) +#define BF64_GET(x, low, len) BF64_DECODE(x, low, len) + +#define BF32_SET(x, low, len, val) do { \ + ASSERT3U(val, <, 1U << (len)); \ + ASSERT3U(low + len, <=, 32); \ + (x) ^= BF32_ENCODE((x >> low) ^ (val), low, len); \ +_NOTE(CONSTCOND) } while (0) + +#define BF64_SET(x, low, len, val) do { \ + ASSERT3U(val, <, 1ULL << (len)); \ + ASSERT3U(low + len, <=, 64); \ + ((x) ^= BF64_ENCODE((x >> low) ^ (val), low, len)); \ +_NOTE(CONSTCOND) } while (0) + +#define BF32_GET_SB(x, low, len, shift, bias) \ + ((BF32_GET(x, low, len) + (bias)) << (shift)) +#define BF64_GET_SB(x, low, len, shift, bias) \ + ((BF64_GET(x, low, len) + (bias)) << (shift)) + +#define BF32_SET_SB(x, low, len, shift, bias, val) do { \ + ASSERT(IS_P2ALIGNED(val, 1U << shift)); \ + ASSERT3S((val) >> (shift), >=, bias); \ + BF32_SET(x, low, len, ((val) >> (shift)) - (bias)); \ +_NOTE(CONSTCOND) } while (0) +#define BF64_SET_SB(x, low, len, shift, bias, val) do { \ + ASSERT(IS_P2ALIGNED(val, 1ULL << shift)); \ + ASSERT3S((val) >> (shift), >=, bias); \ + BF64_SET(x, low, len, ((val) >> (shift)) - (bias)); \ +_NOTE(CONSTCOND) } while (0) + +/* + * We currently support block sizes from 512 bytes to 16MB. + * The benefits of larger blocks, and thus larger IO, need to be weighed + * against the cost of COWing a giant block to modify one byte, and the + * large latency of reading or writing a large block. + * + * Note that although blocks up to 16MB are supported, the recordsize + * property can not be set larger than zfs_max_recordsize (default 1MB). + * See the comment near zfs_max_recordsize in dsl_dataset.c for details. + * + * Note that although the LSIZE field of the blkptr_t can store sizes up + * to 32MB, the dnode's dn_datablkszsec can only store sizes up to + * 32MB - 512 bytes. Therefore, we limit SPA_MAXBLOCKSIZE to 16MB. + */ +#define SPA_MINBLOCKSHIFT 9 +#define SPA_OLD_MAXBLOCKSHIFT 17 +#define SPA_MAXBLOCKSHIFT 24 +#define SPA_MINBLOCKSIZE (1ULL << SPA_MINBLOCKSHIFT) +#define SPA_OLD_MAXBLOCKSIZE (1ULL << SPA_OLD_MAXBLOCKSHIFT) +#define SPA_MAXBLOCKSIZE (1ULL << SPA_MAXBLOCKSHIFT) + +/* + * Alignment Shift (ashift) is an immutable, internal top-level vdev property + * which can only be set at vdev creation time. Physical writes are always done + * according to it, which makes 2^ashift the smallest possible IO on a vdev. + * + * We currently allow values ranging from 512 bytes (2^9 = 512) to 64 KiB + * (2^16 = 65,536). + */ +#define ASHIFT_MIN 9 +#define ASHIFT_MAX 16 + +/* + * Size of block to hold the configuration data (a packed nvlist) + */ +#define SPA_CONFIG_BLOCKSIZE (1ULL << 14) + +/* + * The DVA size encodings for LSIZE and PSIZE support blocks up to 32MB. + * The ASIZE encoding should be at least 64 times larger (6 more bits) + * to support up to 4-way RAID-Z mirror mode with worst-case gang block + * overhead, three DVAs per bp, plus one more bit in case we do anything + * else that expands the ASIZE. + */ +#define SPA_LSIZEBITS 16 /* LSIZE up to 32M (2^16 * 512) */ +#define SPA_PSIZEBITS 16 /* PSIZE up to 32M (2^16 * 512) */ +#define SPA_ASIZEBITS 24 /* ASIZE up to 64 times larger */ + +#define SPA_COMPRESSBITS 7 + +/* + * All SPA data is represented by 128-bit data virtual addresses (DVAs). + * The members of the dva_t should be considered opaque outside the SPA. + */ +typedef struct dva { + uint64_t dva_word[2]; +} dva_t; + + +/* + * Some checksums/hashes need a 256-bit initialization salt. This salt is kept + * secret and is suitable for use in MAC algorithms as the key. + */ +typedef struct zio_cksum_salt { + uint8_t zcs_bytes[32]; +} zio_cksum_salt_t; + +/* + * Each block is described by its DVAs, time of birth, checksum, etc. + * The word-by-word, bit-by-bit layout of the blkptr is as follows: + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 0 | vdev1 | GRID | ASIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 1 |G| offset1 | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 2 | vdev2 | GRID | ASIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 3 |G| offset2 | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 4 | vdev3 | GRID | ASIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 5 |G| offset3 | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 6 |BDX|lvl| type | cksum |E| comp| PSIZE | LSIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 7 | padding | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 8 | padding | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 9 | physical birth txg | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * a | logical birth txg | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * b | fill count | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * c | checksum[0] | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * d | checksum[1] | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * e | checksum[2] | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * f | checksum[3] | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * Legend: + * + * vdev virtual device ID + * offset offset into virtual device + * LSIZE logical size + * PSIZE physical size (after compression) + * ASIZE allocated size (including RAID-Z parity and gang block headers) + * GRID RAID-Z layout information (reserved for future use) + * cksum checksum function + * comp compression function + * G gang block indicator + * B byteorder (endianness) + * D dedup + * X encryption (on version 30, which is not supported) + * E blkptr_t contains embedded data (see below) + * lvl level of indirection + * type DMU object type + * phys birth txg of block allocation; zero if same as logical birth txg + * log. birth transaction group in which the block was logically born + * fill count number of non-zero blocks under this bp + * checksum[4] 256-bit checksum of the data this bp describes + */ + +/* + * "Embedded" blkptr_t's don't actually point to a block, instead they + * have a data payload embedded in the blkptr_t itself. See the comment + * in blkptr.c for more details. + * + * The blkptr_t is laid out as follows: + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 0 | payload | + * 1 | payload | + * 2 | payload | + * 3 | payload | + * 4 | payload | + * 5 | payload | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 6 |BDX|lvl| type | etype |E| comp| PSIZE| LSIZE | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * 7 | payload | + * 8 | payload | + * 9 | payload | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * a | logical birth txg | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * b | payload | + * c | payload | + * d | payload | + * e | payload | + * f | payload | + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * Legend: + * + * payload contains the embedded data + * B (byteorder) byteorder (endianness) + * D (dedup) padding (set to zero) + * X encryption (set to zero; see above) + * E (embedded) set to one + * lvl indirection level + * type DMU object type + * etype how to interpret embedded data (BP_EMBEDDED_TYPE_*) + * comp compression function of payload + * PSIZE size of payload after compression, in bytes + * LSIZE logical size of payload, in bytes + * note that 25 bits is enough to store the largest + * "normal" BP's LSIZE (2^16 * 2^9) in bytes + * log. birth transaction group in which the block was logically born + * + * Note that LSIZE and PSIZE are stored in bytes, whereas for non-embedded + * bp's they are stored in units of SPA_MINBLOCKSHIFT. + * Generally, the generic BP_GET_*() macros can be used on embedded BP's. + * The B, D, X, lvl, type, and comp fields are stored the same as with normal + * BP's so the BP_SET_* macros can be used with them. etype, PSIZE, LSIZE must + * be set with the BPE_SET_* macros. BP_SET_EMBEDDED() should be called before + * other macros, as they assert that they are only used on BP's of the correct + * "embedded-ness". + */ + +#define BPE_GET_ETYPE(bp) \ + (ASSERT(BP_IS_EMBEDDED(bp)), \ + BF64_GET((bp)->blk_prop, 40, 8)) +#define BPE_SET_ETYPE(bp, t) do { \ + ASSERT(BP_IS_EMBEDDED(bp)); \ + BF64_SET((bp)->blk_prop, 40, 8, t); \ +_NOTE(CONSTCOND) } while (0) + +#define BPE_GET_LSIZE(bp) \ + (ASSERT(BP_IS_EMBEDDED(bp)), \ + BF64_GET_SB((bp)->blk_prop, 0, 25, 0, 1)) +#define BPE_SET_LSIZE(bp, x) do { \ + ASSERT(BP_IS_EMBEDDED(bp)); \ + BF64_SET_SB((bp)->blk_prop, 0, 25, 0, 1, x); \ +_NOTE(CONSTCOND) } while (0) + +#define BPE_GET_PSIZE(bp) \ + (ASSERT(BP_IS_EMBEDDED(bp)), \ + BF64_GET_SB((bp)->blk_prop, 25, 7, 0, 1)) +#define BPE_SET_PSIZE(bp, x) do { \ + ASSERT(BP_IS_EMBEDDED(bp)); \ + BF64_SET_SB((bp)->blk_prop, 25, 7, 0, 1, x); \ +_NOTE(CONSTCOND) } while (0) + +typedef enum bp_embedded_type { + BP_EMBEDDED_TYPE_DATA, + BP_EMBEDDED_TYPE_RESERVED, /* Reserved for an unintegrated feature. */ + NUM_BP_EMBEDDED_TYPES = BP_EMBEDDED_TYPE_RESERVED +} bp_embedded_type_t; + +#define BPE_NUM_WORDS 14 +#define BPE_PAYLOAD_SIZE (BPE_NUM_WORDS * sizeof (uint64_t)) +#define BPE_IS_PAYLOADWORD(bp, wp) \ + ((wp) != &(bp)->blk_prop && (wp) != &(bp)->blk_birth) + +#define SPA_BLKPTRSHIFT 7 /* blkptr_t is 128 bytes */ +#define SPA_DVAS_PER_BP 3 /* Number of DVAs in a bp */ + +/* + * A block is a hole when it has either 1) never been written to, or + * 2) is zero-filled. In both cases, ZFS can return all zeroes for all reads + * without physically allocating disk space. Holes are represented in the + * blkptr_t structure by zeroed blk_dva. Correct checking for holes is + * done through the BP_IS_HOLE macro. For holes, the logical size, level, + * DMU object type, and birth times are all also stored for holes that + * were written to at some point (i.e. were punched after having been filled). + */ +typedef struct blkptr { + dva_t blk_dva[SPA_DVAS_PER_BP]; /* Data Virtual Addresses */ + uint64_t blk_prop; /* size, compression, type, etc */ + uint64_t blk_pad[2]; /* Extra space for the future */ + uint64_t blk_phys_birth; /* txg when block was allocated */ + uint64_t blk_birth; /* transaction group at birth */ + uint64_t blk_fill; /* fill count */ + zio_cksum_t blk_cksum; /* 256-bit checksum */ +} blkptr_t; + +/* + * Macros to get and set fields in a bp or DVA. + */ +#define DVA_GET_ASIZE(dva) \ + BF64_GET_SB((dva)->dva_word[0], 0, SPA_ASIZEBITS, SPA_MINBLOCKSHIFT, 0) +#define DVA_SET_ASIZE(dva, x) \ + BF64_SET_SB((dva)->dva_word[0], 0, SPA_ASIZEBITS, \ + SPA_MINBLOCKSHIFT, 0, x) + +#define DVA_GET_GRID(dva) BF64_GET((dva)->dva_word[0], 24, 8) +#define DVA_SET_GRID(dva, x) BF64_SET((dva)->dva_word[0], 24, 8, x) + +#define DVA_GET_VDEV(dva) BF64_GET((dva)->dva_word[0], 32, 32) +#define DVA_SET_VDEV(dva, x) BF64_SET((dva)->dva_word[0], 32, 32, x) + +#define DVA_GET_OFFSET(dva) \ + BF64_GET_SB((dva)->dva_word[1], 0, 63, SPA_MINBLOCKSHIFT, 0) +#define DVA_SET_OFFSET(dva, x) \ + BF64_SET_SB((dva)->dva_word[1], 0, 63, SPA_MINBLOCKSHIFT, 0, x) + +#define DVA_GET_GANG(dva) BF64_GET((dva)->dva_word[1], 63, 1) +#define DVA_SET_GANG(dva, x) BF64_SET((dva)->dva_word[1], 63, 1, x) + +#define BP_GET_LSIZE(bp) \ + (BP_IS_EMBEDDED(bp) ? \ + (BPE_GET_ETYPE(bp) == BP_EMBEDDED_TYPE_DATA ? BPE_GET_LSIZE(bp) : 0): \ + BF64_GET_SB((bp)->blk_prop, 0, SPA_LSIZEBITS, SPA_MINBLOCKSHIFT, 1)) +#define BP_SET_LSIZE(bp, x) do { \ + ASSERT(!BP_IS_EMBEDDED(bp)); \ + BF64_SET_SB((bp)->blk_prop, \ + 0, SPA_LSIZEBITS, SPA_MINBLOCKSHIFT, 1, x); \ +_NOTE(CONSTCOND) } while (0) + +#define BP_GET_PSIZE(bp) \ + (BP_IS_EMBEDDED(bp) ? 0 : \ + BF64_GET_SB((bp)->blk_prop, 16, SPA_PSIZEBITS, SPA_MINBLOCKSHIFT, 1)) +#define BP_SET_PSIZE(bp, x) do { \ + ASSERT(!BP_IS_EMBEDDED(bp)); \ + BF64_SET_SB((bp)->blk_prop, \ + 16, SPA_PSIZEBITS, SPA_MINBLOCKSHIFT, 1, x); \ +_NOTE(CONSTCOND) } while (0) + +#define BP_GET_COMPRESS(bp) \ + BF64_GET((bp)->blk_prop, 32, SPA_COMPRESSBITS) +#define BP_SET_COMPRESS(bp, x) \ + BF64_SET((bp)->blk_prop, 32, SPA_COMPRESSBITS, x) + +#define BP_IS_EMBEDDED(bp) BF64_GET((bp)->blk_prop, 39, 1) +#define BP_SET_EMBEDDED(bp, x) BF64_SET((bp)->blk_prop, 39, 1, x) + +#define BP_GET_CHECKSUM(bp) \ + (BP_IS_EMBEDDED(bp) ? ZIO_CHECKSUM_OFF : \ + BF64_GET((bp)->blk_prop, 40, 8)) +#define BP_SET_CHECKSUM(bp, x) do { \ + ASSERT(!BP_IS_EMBEDDED(bp)); \ + BF64_SET((bp)->blk_prop, 40, 8, x); \ +_NOTE(CONSTCOND) } while (0) + +#define BP_GET_TYPE(bp) BF64_GET((bp)->blk_prop, 48, 8) +#define BP_SET_TYPE(bp, x) BF64_SET((bp)->blk_prop, 48, 8, x) + +#define BP_GET_LEVEL(bp) BF64_GET((bp)->blk_prop, 56, 5) +#define BP_SET_LEVEL(bp, x) BF64_SET((bp)->blk_prop, 56, 5, x) + +#define BP_GET_DEDUP(bp) BF64_GET((bp)->blk_prop, 62, 1) +#define BP_SET_DEDUP(bp, x) BF64_SET((bp)->blk_prop, 62, 1, x) + +#define BP_GET_BYTEORDER(bp) BF64_GET((bp)->blk_prop, 63, 1) +#define BP_SET_BYTEORDER(bp, x) BF64_SET((bp)->blk_prop, 63, 1, x) + +#define BP_PHYSICAL_BIRTH(bp) \ + (BP_IS_EMBEDDED(bp) ? 0 : \ + (bp)->blk_phys_birth ? (bp)->blk_phys_birth : (bp)->blk_birth) + +#define BP_SET_BIRTH(bp, logical, physical) \ +{ \ + ASSERT(!BP_IS_EMBEDDED(bp)); \ + (bp)->blk_birth = (logical); \ + (bp)->blk_phys_birth = ((logical) == (physical) ? 0 : (physical)); \ +} + +#define BP_GET_FILL(bp) (BP_IS_EMBEDDED(bp) ? 1 : (bp)->blk_fill) + +#define BP_IS_METADATA(bp) \ + (BP_GET_LEVEL(bp) > 0 || DMU_OT_IS_METADATA(BP_GET_TYPE(bp))) + +#define BP_GET_ASIZE(bp) \ + (BP_IS_EMBEDDED(bp) ? 0 : \ + DVA_GET_ASIZE(&(bp)->blk_dva[0]) + \ + DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \ + DVA_GET_ASIZE(&(bp)->blk_dva[2])) + +#define BP_GET_UCSIZE(bp) \ + (BP_IS_METADATA(bp) ? BP_GET_PSIZE(bp) : BP_GET_LSIZE(bp)) + +#define BP_GET_NDVAS(bp) \ + (BP_IS_EMBEDDED(bp) ? 0 : \ + !!DVA_GET_ASIZE(&(bp)->blk_dva[0]) + \ + !!DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \ + !!DVA_GET_ASIZE(&(bp)->blk_dva[2])) + +#define BP_COUNT_GANG(bp) \ + (BP_IS_EMBEDDED(bp) ? 0 : \ + (DVA_GET_GANG(&(bp)->blk_dva[0]) + \ + DVA_GET_GANG(&(bp)->blk_dva[1]) + \ + DVA_GET_GANG(&(bp)->blk_dva[2]))) + +#define DVA_EQUAL(dva1, dva2) \ + ((dva1)->dva_word[1] == (dva2)->dva_word[1] && \ + (dva1)->dva_word[0] == (dva2)->dva_word[0]) + +#define BP_EQUAL(bp1, bp2) \ + (BP_PHYSICAL_BIRTH(bp1) == BP_PHYSICAL_BIRTH(bp2) && \ + (bp1)->blk_birth == (bp2)->blk_birth && \ + DVA_EQUAL(&(bp1)->blk_dva[0], &(bp2)->blk_dva[0]) && \ + DVA_EQUAL(&(bp1)->blk_dva[1], &(bp2)->blk_dva[1]) && \ + DVA_EQUAL(&(bp1)->blk_dva[2], &(bp2)->blk_dva[2])) + + +#define DVA_IS_VALID(dva) (DVA_GET_ASIZE(dva) != 0) + +#define BP_IDENTITY(bp) (ASSERT(!BP_IS_EMBEDDED(bp)), &(bp)->blk_dva[0]) +#define BP_IS_GANG(bp) \ + (BP_IS_EMBEDDED(bp) ? B_FALSE : DVA_GET_GANG(BP_IDENTITY(bp))) +#define DVA_IS_EMPTY(dva) ((dva)->dva_word[0] == 0ULL && \ + (dva)->dva_word[1] == 0ULL) +#define BP_IS_HOLE(bp) \ + (!BP_IS_EMBEDDED(bp) && DVA_IS_EMPTY(BP_IDENTITY(bp))) + +/* BP_IS_RAIDZ(bp) assumes no block compression */ +#define BP_IS_RAIDZ(bp) (DVA_GET_ASIZE(&(bp)->blk_dva[0]) > \ + BP_GET_PSIZE(bp)) + +#define BP_ZERO(bp) \ +{ \ + (bp)->blk_dva[0].dva_word[0] = 0; \ + (bp)->blk_dva[0].dva_word[1] = 0; \ + (bp)->blk_dva[1].dva_word[0] = 0; \ + (bp)->blk_dva[1].dva_word[1] = 0; \ + (bp)->blk_dva[2].dva_word[0] = 0; \ + (bp)->blk_dva[2].dva_word[1] = 0; \ + (bp)->blk_prop = 0; \ + (bp)->blk_pad[0] = 0; \ + (bp)->blk_pad[1] = 0; \ + (bp)->blk_phys_birth = 0; \ + (bp)->blk_birth = 0; \ + (bp)->blk_fill = 0; \ + ZIO_SET_CHECKSUM(&(bp)->blk_cksum, 0, 0, 0, 0); \ +} + +#ifdef _BIG_ENDIAN +#define ZFS_HOST_BYTEORDER (0ULL) +#else +#define ZFS_HOST_BYTEORDER (1ULL) +#endif + +#define BP_SHOULD_BYTESWAP(bp) (BP_GET_BYTEORDER(bp) != ZFS_HOST_BYTEORDER) + +#define BP_SPRINTF_LEN 320 + +/* + * This macro allows code sharing between zfs, libzpool, and mdb. + * 'func' is either snprintf() or mdb_snprintf(). + * 'ws' (whitespace) can be ' ' for single-line format, '\n' for multi-line. + */ +#define SNPRINTF_BLKPTR(func, ws, buf, size, bp, type, checksum, compress) \ +{ \ + static const char *copyname[] = \ + { "zero", "single", "double", "triple" }; \ + int len = 0; \ + int copies = 0; \ + int d; \ + \ + if (bp == NULL) { \ + len += func(buf + len, size - len, ""); \ + } else if (BP_IS_HOLE(bp)) { \ + len += func(buf + len, size - len, \ + "HOLE [L%llu %s] " \ + "size=%llxL birth=%lluL", \ + (u_longlong_t)BP_GET_LEVEL(bp), \ + type, \ + (u_longlong_t)BP_GET_LSIZE(bp), \ + (u_longlong_t)bp->blk_birth); \ + } else if (BP_IS_EMBEDDED(bp)) { \ + len = func(buf + len, size - len, \ + "EMBEDDED [L%llu %s] et=%u %s " \ + "size=%llxL/%llxP birth=%lluL", \ + (u_longlong_t)BP_GET_LEVEL(bp), \ + type, \ + (int)BPE_GET_ETYPE(bp), \ + compress, \ + (u_longlong_t)BPE_GET_LSIZE(bp), \ + (u_longlong_t)BPE_GET_PSIZE(bp), \ + (u_longlong_t)bp->blk_birth); \ + } else { \ + for (d = 0; d < BP_GET_NDVAS(bp); d++) { \ + const dva_t *dva = &bp->blk_dva[d]; \ + if (DVA_IS_VALID(dva)) \ + copies++; \ + len += func(buf + len, size - len, \ + "DVA[%d]=<%llu:%llx:%llx>%c", d, \ + (u_longlong_t)DVA_GET_VDEV(dva), \ + (u_longlong_t)DVA_GET_OFFSET(dva), \ + (u_longlong_t)DVA_GET_ASIZE(dva), \ + ws); \ + } \ + if (BP_IS_GANG(bp) && \ + DVA_GET_ASIZE(&bp->blk_dva[2]) <= \ + DVA_GET_ASIZE(&bp->blk_dva[1]) / 2) \ + copies--; \ + len += func(buf + len, size - len, \ + "[L%llu %s] %s %s %s %s %s %s%c" \ + "size=%llxL/%llxP birth=%lluL/%lluP fill=%llu%c" \ + "cksum=%llx:%llx:%llx:%llx", \ + (u_longlong_t)BP_GET_LEVEL(bp), \ + type, \ + checksum, \ + compress, \ + BP_GET_BYTEORDER(bp) == 0 ? "BE" : "LE", \ + BP_IS_GANG(bp) ? "gang" : "contiguous", \ + BP_GET_DEDUP(bp) ? "dedup" : "unique", \ + copyname[copies], \ + ws, \ + (u_longlong_t)BP_GET_LSIZE(bp), \ + (u_longlong_t)BP_GET_PSIZE(bp), \ + (u_longlong_t)bp->blk_birth, \ + (u_longlong_t)BP_PHYSICAL_BIRTH(bp), \ + (u_longlong_t)BP_GET_FILL(bp), \ + ws, \ + (u_longlong_t)bp->blk_cksum.zc_word[0], \ + (u_longlong_t)bp->blk_cksum.zc_word[1], \ + (u_longlong_t)bp->blk_cksum.zc_word[2], \ + (u_longlong_t)bp->blk_cksum.zc_word[3]); \ + } \ + ASSERT(len < size); \ +} + +#define BP_GET_BUFC_TYPE(bp) \ + (BP_IS_METADATA(bp) ? ARC_BUFC_METADATA : ARC_BUFC_DATA) + +typedef enum spa_import_type { + SPA_IMPORT_EXISTING, + SPA_IMPORT_ASSEMBLE +} spa_import_type_t; + +/* state manipulation functions */ +extern int spa_open(const char *pool, spa_t **, void *tag); +extern int spa_open_rewind(const char *pool, spa_t **, void *tag, + nvlist_t *policy, nvlist_t **config); +extern int spa_get_stats(const char *pool, nvlist_t **config, char *altroot, + size_t buflen); +extern int spa_create(const char *pool, nvlist_t *config, nvlist_t *props, + nvlist_t *zplprops); +extern int spa_import(char *pool, nvlist_t *config, nvlist_t *props, + uint64_t flags); +extern nvlist_t *spa_tryimport(nvlist_t *tryconfig); +extern int spa_destroy(char *pool); +extern int spa_export(char *pool, nvlist_t **oldconfig, boolean_t force, + boolean_t hardforce); +extern int spa_reset(char *pool); +extern void spa_async_request(spa_t *spa, int flag); +extern void spa_async_unrequest(spa_t *spa, int flag); +extern void spa_async_suspend(spa_t *spa); +extern void spa_async_resume(spa_t *spa); +extern spa_t *spa_inject_addref(char *pool); +extern void spa_inject_delref(spa_t *spa); +extern void spa_scan_stat_init(spa_t *spa); +extern int spa_scan_get_stats(spa_t *spa, pool_scan_stat_t *ps); + +#define SPA_ASYNC_CONFIG_UPDATE 0x01 +#define SPA_ASYNC_REMOVE 0x02 +#define SPA_ASYNC_PROBE 0x04 +#define SPA_ASYNC_RESILVER_DONE 0x08 +#define SPA_ASYNC_RESILVER 0x10 +#define SPA_ASYNC_AUTOEXPAND 0x20 +#define SPA_ASYNC_REMOVE_DONE 0x40 +#define SPA_ASYNC_REMOVE_STOP 0x80 + +/* + * Controls the behavior of spa_vdev_remove(). + */ +#define SPA_REMOVE_UNSPARE 0x01 +#define SPA_REMOVE_DONE 0x02 + +/* device manipulation */ +extern int spa_vdev_add(spa_t *spa, nvlist_t *nvroot); +extern int spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, + int replacing); +extern int spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid, + int replace_done); +extern int spa_vdev_remove(spa_t *spa, uint64_t guid, boolean_t unspare); +extern boolean_t spa_vdev_remove_active(spa_t *spa); +extern int spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath); +extern int spa_vdev_setfru(spa_t *spa, uint64_t guid, const char *newfru); +extern int spa_vdev_split_mirror(spa_t *spa, char *newname, nvlist_t *config, + nvlist_t *props, boolean_t exp); + +/* spare state (which is global across all pools) */ +extern void spa_spare_add(vdev_t *vd); +extern void spa_spare_remove(vdev_t *vd); +extern boolean_t spa_spare_exists(uint64_t guid, uint64_t *pool, int *refcnt); +extern void spa_spare_activate(vdev_t *vd); + +/* L2ARC state (which is global across all pools) */ +extern void spa_l2cache_add(vdev_t *vd); +extern void spa_l2cache_remove(vdev_t *vd); +extern boolean_t spa_l2cache_exists(uint64_t guid, uint64_t *pool); +extern void spa_l2cache_activate(vdev_t *vd); +extern void spa_l2cache_drop(spa_t *spa); + +/* scanning */ +extern int spa_scan(spa_t *spa, pool_scan_func_t func); +extern int spa_scan_stop(spa_t *spa); +extern int spa_scrub_pause_resume(spa_t *spa, pool_scrub_cmd_t flag); + +/* spa syncing */ +extern void spa_sync(spa_t *spa, uint64_t txg); /* only for DMU use */ +extern void spa_sync_allpools(void); + +extern int zfs_sync_pass_deferred_free; + +/* spa namespace global mutex */ +extern kmutex_t spa_namespace_lock; + +/* + * SPA configuration functions in spa_config.c + */ + +#define SPA_CONFIG_UPDATE_POOL 0 +#define SPA_CONFIG_UPDATE_VDEVS 1 + +extern void spa_config_sync(spa_t *, boolean_t, boolean_t); +extern void spa_config_load(void); +extern nvlist_t *spa_all_configs(uint64_t *); +extern void spa_config_set(spa_t *spa, nvlist_t *config); +extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg, + int getstats); +extern void spa_config_update(spa_t *spa, int what); + +/* + * Miscellaneous SPA routines in spa_misc.c + */ + +/* Namespace manipulation */ +extern spa_t *spa_lookup(const char *name); +extern spa_t *spa_add(const char *name, nvlist_t *config, const char *altroot); +extern void spa_remove(spa_t *spa); +extern spa_t *spa_next(spa_t *prev); + +/* Refcount functions */ +extern void spa_open_ref(spa_t *spa, void *tag); +extern void spa_close(spa_t *spa, void *tag); +extern void spa_async_close(spa_t *spa, void *tag); +extern boolean_t spa_refcount_zero(spa_t *spa); + +#define SCL_NONE 0x00 +#define SCL_CONFIG 0x01 +#define SCL_STATE 0x02 +#define SCL_L2ARC 0x04 /* hack until L2ARC 2.0 */ +#define SCL_ALLOC 0x08 +#define SCL_ZIO 0x10 +#define SCL_FREE 0x20 +#define SCL_VDEV 0x40 +#define SCL_LOCKS 7 +#define SCL_ALL ((1 << SCL_LOCKS) - 1) +#define SCL_STATE_ALL (SCL_STATE | SCL_L2ARC | SCL_ZIO) + +/* Historical pool statistics */ +typedef struct spa_stats_history { + kmutex_t lock; + uint64_t count; + uint64_t size; + kstat_t *kstat; + void *private; + list_t list; +} spa_stats_history_t; + +typedef struct spa_stats { + spa_stats_history_t read_history; + spa_stats_history_t txg_history; + spa_stats_history_t tx_assign_histogram; + spa_stats_history_t io_history; + spa_stats_history_t mmp_history; +} spa_stats_t; + +typedef enum txg_state { + TXG_STATE_BIRTH = 0, + TXG_STATE_OPEN = 1, + TXG_STATE_QUIESCED = 2, + TXG_STATE_WAIT_FOR_SYNC = 3, + TXG_STATE_SYNCED = 4, + TXG_STATE_COMMITTED = 5, +} txg_state_t; + +typedef struct txg_stat { + vdev_stat_t vs1; + vdev_stat_t vs2; + uint64_t txg; + uint64_t ndirty; +} txg_stat_t; + +extern void spa_stats_init(spa_t *spa); +extern void spa_stats_destroy(spa_t *spa); +extern void spa_read_history_add(spa_t *spa, const zbookmark_phys_t *zb, + uint32_t aflags); +extern void spa_txg_history_add(spa_t *spa, uint64_t txg, hrtime_t birth_time); +extern int spa_txg_history_set(spa_t *spa, uint64_t txg, + txg_state_t completed_state, hrtime_t completed_time); +extern txg_stat_t *spa_txg_history_init_io(spa_t *, uint64_t, + struct dsl_pool *); +extern void spa_txg_history_fini_io(spa_t *, txg_stat_t *); +extern void spa_tx_assign_add_nsecs(spa_t *spa, uint64_t nsecs); +extern void spa_mmp_history_add(uint64_t txg, uint64_t timestamp, + uint64_t mmp_delay, vdev_t *vd, int label); + +/* Pool configuration locks */ +extern int spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw); +extern void spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw); +extern void spa_config_exit(spa_t *spa, int locks, void *tag); +extern int spa_config_held(spa_t *spa, int locks, krw_t rw); + +/* Pool vdev add/remove lock */ +extern uint64_t spa_vdev_enter(spa_t *spa); +extern uint64_t spa_vdev_config_enter(spa_t *spa); +extern void spa_vdev_config_exit(spa_t *spa, vdev_t *vd, uint64_t txg, + int error, char *tag); +extern int spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error); + +/* Pool vdev state change lock */ +extern void spa_vdev_state_enter(spa_t *spa, int oplock); +extern int spa_vdev_state_exit(spa_t *spa, vdev_t *vd, int error); + +/* Log state */ +typedef enum spa_log_state { + SPA_LOG_UNKNOWN = 0, /* unknown log state */ + SPA_LOG_MISSING, /* missing log(s) */ + SPA_LOG_CLEAR, /* clear the log(s) */ + SPA_LOG_GOOD, /* log(s) are good */ +} spa_log_state_t; + +extern spa_log_state_t spa_get_log_state(spa_t *spa); +extern void spa_set_log_state(spa_t *spa, spa_log_state_t state); +extern int spa_offline_log(spa_t *spa); + +/* Log claim callback */ +extern void spa_claim_notify(zio_t *zio); +extern void spa_deadman(void *); + +/* Accessor functions */ +extern boolean_t spa_shutting_down(spa_t *spa); +extern struct dsl_pool *spa_get_dsl(spa_t *spa); +extern boolean_t spa_is_initializing(spa_t *spa); +extern blkptr_t *spa_get_rootblkptr(spa_t *spa); +extern void spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp); +extern void spa_altroot(spa_t *, char *, size_t); +extern int spa_sync_pass(spa_t *spa); +extern char *spa_name(spa_t *spa); +extern uint64_t spa_guid(spa_t *spa); +extern uint64_t spa_load_guid(spa_t *spa); +extern uint64_t spa_last_synced_txg(spa_t *spa); +extern uint64_t spa_first_txg(spa_t *spa); +extern uint64_t spa_syncing_txg(spa_t *spa); +extern uint64_t spa_final_dirty_txg(spa_t *spa); +extern uint64_t spa_version(spa_t *spa); +extern pool_state_t spa_state(spa_t *spa); +extern spa_load_state_t spa_load_state(spa_t *spa); +extern uint64_t spa_freeze_txg(spa_t *spa); +extern uint64_t spa_get_worst_case_asize(spa_t *spa, uint64_t lsize); +extern uint64_t spa_get_dspace(spa_t *spa); +extern uint64_t spa_get_slop_space(spa_t *spa); +extern void spa_update_dspace(spa_t *spa); +extern uint64_t spa_version(spa_t *spa); +extern boolean_t spa_deflate(spa_t *spa); +extern metaslab_class_t *spa_normal_class(spa_t *spa); +extern metaslab_class_t *spa_log_class(spa_t *spa); +extern void spa_evicting_os_register(spa_t *, objset_t *os); +extern void spa_evicting_os_deregister(spa_t *, objset_t *os); +extern void spa_evicting_os_wait(spa_t *spa); +extern int spa_max_replication(spa_t *spa); +extern int spa_prev_software_version(spa_t *spa); +extern uint8_t spa_get_failmode(spa_t *spa); +extern boolean_t spa_suspended(spa_t *spa); +extern uint64_t spa_bootfs(spa_t *spa); +extern uint64_t spa_delegation(spa_t *spa); +extern objset_t *spa_meta_objset(spa_t *spa); +extern uint64_t spa_deadman_synctime(spa_t *spa); + +/* Miscellaneous support routines */ +extern void spa_activate_mos_feature(spa_t *spa, const char *feature, + dmu_tx_t *tx); +extern void spa_deactivate_mos_feature(spa_t *spa, const char *feature); +extern int spa_rename(const char *oldname, const char *newname); +extern spa_t *spa_by_guid(uint64_t pool_guid, uint64_t device_guid); +extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid); +extern char *spa_strdup(const char *); +extern void spa_strfree(char *); +extern uint64_t spa_get_random(uint64_t range); +extern uint64_t spa_generate_guid(spa_t *spa); +extern void snprintf_blkptr(char *buf, size_t buflen, const blkptr_t *bp); +extern void spa_freeze(spa_t *spa); +extern int spa_change_guid(spa_t *spa); +extern void spa_upgrade(spa_t *spa, uint64_t version); +extern void spa_evict_all(void); +extern vdev_t *spa_lookup_by_guid(spa_t *spa, uint64_t guid, + boolean_t l2cache); +extern boolean_t spa_has_spare(spa_t *, uint64_t guid); +extern uint64_t dva_get_dsize_sync(spa_t *spa, const dva_t *dva); +extern uint64_t bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp); +extern uint64_t bp_get_dsize(spa_t *spa, const blkptr_t *bp); +extern boolean_t spa_has_slogs(spa_t *spa); +extern boolean_t spa_is_root(spa_t *spa); +extern boolean_t spa_writeable(spa_t *spa); +extern boolean_t spa_has_pending_synctask(spa_t *spa); +extern int spa_maxblocksize(spa_t *spa); +extern int spa_maxdnodesize(spa_t *spa); +extern void zfs_blkptr_verify(spa_t *spa, const blkptr_t *bp); +extern boolean_t spa_multihost(spa_t *spa); +extern unsigned long spa_get_hostid(void); + +extern int spa_mode(spa_t *spa); +extern uint64_t zfs_strtonum(const char *str, char **nptr); + +extern char *spa_his_ievent_table[]; + +extern void spa_history_create_obj(spa_t *spa, dmu_tx_t *tx); +extern int spa_history_get(spa_t *spa, uint64_t *offset, uint64_t *len_read, + char *his_buf); +extern int spa_history_log(spa_t *spa, const char *his_buf); +extern int spa_history_log_nvl(spa_t *spa, nvlist_t *nvl); +extern void spa_history_log_version(spa_t *spa, const char *operation, + dmu_tx_t *tx); +extern void spa_history_log_internal(spa_t *spa, const char *operation, + dmu_tx_t *tx, const char *fmt, ...); +extern void spa_history_log_internal_ds(struct dsl_dataset *ds, const char *op, + dmu_tx_t *tx, const char *fmt, ...); +extern void spa_history_log_internal_dd(dsl_dir_t *dd, const char *operation, + dmu_tx_t *tx, const char *fmt, ...); + +/* error handling */ +struct zbookmark_phys; +extern void spa_log_error(spa_t *spa, zio_t *zio); +extern void zfs_ereport_post(const char *class, spa_t *spa, vdev_t *vd, + zio_t *zio, uint64_t stateoroffset, uint64_t length); +extern nvlist_t *zfs_event_create(spa_t *spa, vdev_t *vd, const char *type, + const char *name, nvlist_t *aux); +extern void zfs_post_remove(spa_t *spa, vdev_t *vd); +extern void zfs_post_state_change(spa_t *spa, vdev_t *vd, uint64_t laststate); +extern void zfs_post_autoreplace(spa_t *spa, vdev_t *vd); +extern uint64_t spa_get_errlog_size(spa_t *spa); +extern int spa_get_errlog(spa_t *spa, void *uaddr, size_t *count); +extern void spa_errlog_rotate(spa_t *spa); +extern void spa_errlog_drain(spa_t *spa); +extern void spa_errlog_sync(spa_t *spa, uint64_t txg); +extern void spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub); + +/* vdev cache */ +extern void vdev_cache_stat_init(void); +extern void vdev_cache_stat_fini(void); + +/* Initialization and termination */ +extern void spa_init(int flags); +extern void spa_fini(void); +extern void spa_boot_init(void); + +/* properties */ +extern int spa_prop_set(spa_t *spa, nvlist_t *nvp); +extern int spa_prop_get(spa_t *spa, nvlist_t **nvp); +extern void spa_prop_clear_bootfs(spa_t *spa, uint64_t obj, dmu_tx_t *tx); +extern void spa_configfile_set(spa_t *, nvlist_t *, boolean_t); + +/* asynchronous event notification */ +extern void spa_event_notify(spa_t *spa, vdev_t *vdev, nvlist_t *hist_nvl, + const char *name); + +#ifdef ZFS_DEBUG +#define dprintf_bp(bp, fmt, ...) do { \ + if (zfs_flags & ZFS_DEBUG_DPRINTF) { \ + char *__blkbuf = kmem_alloc(BP_SPRINTF_LEN, KM_SLEEP); \ + snprintf_blkptr(__blkbuf, BP_SPRINTF_LEN, (bp)); \ + dprintf(fmt " %s\n", __VA_ARGS__, __blkbuf); \ + kmem_free(__blkbuf, BP_SPRINTF_LEN); \ + } \ +_NOTE(CONSTCOND) } while (0) +#else +#define dprintf_bp(bp, fmt, ...) +#endif + +extern boolean_t spa_debug_enabled(spa_t *spa); +#define spa_dbgmsg(spa, ...) \ +{ \ + if (spa_debug_enabled(spa)) \ + zfs_dbgmsg(__VA_ARGS__); \ +} + +extern int spa_mode_global; /* mode, e.g. FREAD | FWRITE */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SPA_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/spa_boot.h +++ linux-aws-4.15.0/zfs/include/sys/spa_boot.h @@ -0,0 +1,42 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SPA_BOOT_H +#define _SYS_SPA_BOOT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern char *spa_get_bootprop(char *prop); +extern void spa_free_bootprop(char *prop); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SPA_BOOT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/spa_checksum.h +++ linux-aws-4.15.0/zfs/include/sys/spa_checksum.h @@ -0,0 +1,72 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SPA_CHECKSUM_H +#define _SPA_CHECKSUM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Each block has a 256-bit checksum -- strong enough for cryptographic hashes. + */ +typedef struct zio_cksum { + uint64_t zc_word[4]; +} zio_cksum_t; + +#define ZIO_SET_CHECKSUM(zcp, w0, w1, w2, w3) \ +{ \ + (zcp)->zc_word[0] = w0; \ + (zcp)->zc_word[1] = w1; \ + (zcp)->zc_word[2] = w2; \ + (zcp)->zc_word[3] = w3; \ +} + +#define ZIO_CHECKSUM_EQUAL(zc1, zc2) \ + (0 == (((zc1).zc_word[0] - (zc2).zc_word[0]) | \ + ((zc1).zc_word[1] - (zc2).zc_word[1]) | \ + ((zc1).zc_word[2] - (zc2).zc_word[2]) | \ + ((zc1).zc_word[3] - (zc2).zc_word[3]))) + +#define ZIO_CHECKSUM_IS_ZERO(zc) \ + (0 == ((zc)->zc_word[0] | (zc)->zc_word[1] | \ + (zc)->zc_word[2] | (zc)->zc_word[3])) + +#define ZIO_CHECKSUM_BSWAP(zcp) \ +{ \ + (zcp)->zc_word[0] = BSWAP_64((zcp)->zc_word[0]); \ + (zcp)->zc_word[1] = BSWAP_64((zcp)->zc_word[1]); \ + (zcp)->zc_word[2] = BSWAP_64((zcp)->zc_word[2]); \ + (zcp)->zc_word[3] = BSWAP_64((zcp)->zc_word[3]); \ +} + +#ifdef __cplusplus +} +#endif + +#endif --- linux-aws-4.15.0.orig/zfs/include/sys/spa_impl.h +++ linux-aws-4.15.0/zfs/include/sys/spa_impl.h @@ -0,0 +1,305 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2017 Datto Inc. + */ + +#ifndef _SYS_SPA_IMPL_H +#define _SYS_SPA_IMPL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct spa_error_entry { + zbookmark_phys_t se_bookmark; + char *se_name; + avl_node_t se_avl; +} spa_error_entry_t; + +typedef struct spa_history_phys { + uint64_t sh_pool_create_len; /* ending offset of zpool create */ + uint64_t sh_phys_max_off; /* physical EOF */ + uint64_t sh_bof; /* logical BOF */ + uint64_t sh_eof; /* logical EOF */ + uint64_t sh_records_lost; /* num of records overwritten */ +} spa_history_phys_t; + +struct spa_aux_vdev { + uint64_t sav_object; /* MOS object for device list */ + nvlist_t *sav_config; /* cached device config */ + vdev_t **sav_vdevs; /* devices */ + int sav_count; /* number devices */ + boolean_t sav_sync; /* sync the device list */ + nvlist_t **sav_pending; /* pending device additions */ + uint_t sav_npending; /* # pending devices */ +}; + +typedef struct spa_config_lock { + kmutex_t scl_lock; + kthread_t *scl_writer; + int scl_write_wanted; + kcondvar_t scl_cv; + refcount_t scl_count; +} spa_config_lock_t; + +typedef struct spa_config_dirent { + list_node_t scd_link; + char *scd_path; +} spa_config_dirent_t; + +typedef enum zio_taskq_type { + ZIO_TASKQ_ISSUE = 0, + ZIO_TASKQ_ISSUE_HIGH, + ZIO_TASKQ_INTERRUPT, + ZIO_TASKQ_INTERRUPT_HIGH, + ZIO_TASKQ_TYPES +} zio_taskq_type_t; + +/* + * State machine for the zpool-poolname process. The states transitions + * are done as follows: + * + * From To Routine + * PROC_NONE -> PROC_CREATED spa_activate() + * PROC_CREATED -> PROC_ACTIVE spa_thread() + * PROC_ACTIVE -> PROC_DEACTIVATE spa_deactivate() + * PROC_DEACTIVATE -> PROC_GONE spa_thread() + * PROC_GONE -> PROC_NONE spa_deactivate() + */ +typedef enum spa_proc_state { + SPA_PROC_NONE, /* spa_proc = &p0, no process created */ + SPA_PROC_CREATED, /* spa_activate() has proc, is waiting */ + SPA_PROC_ACTIVE, /* taskqs created, spa_proc set */ + SPA_PROC_DEACTIVATE, /* spa_deactivate() requests process exit */ + SPA_PROC_GONE /* spa_thread() is exiting, spa_proc = &p0 */ +} spa_proc_state_t; + +typedef struct spa_taskqs { + uint_t stqs_count; + taskq_t **stqs_taskq; +} spa_taskqs_t; + +typedef enum spa_all_vdev_zap_action { + AVZ_ACTION_NONE = 0, + AVZ_ACTION_DESTROY, /* Destroy all per-vdev ZAPs and the AVZ. */ + AVZ_ACTION_REBUILD, /* Populate the new AVZ, see spa_avz_rebuild */ + AVZ_ACTION_INITIALIZE +} spa_avz_action_t; + +struct spa { + /* + * Fields protected by spa_namespace_lock. + */ + char spa_name[ZFS_MAX_DATASET_NAME_LEN]; /* pool name */ + char *spa_comment; /* comment */ + avl_node_t spa_avl; /* node in spa_namespace_avl */ + nvlist_t *spa_config; /* last synced config */ + nvlist_t *spa_config_syncing; /* currently syncing config */ + nvlist_t *spa_config_splitting; /* config for splitting */ + nvlist_t *spa_load_info; /* info and errors from load */ + uint64_t spa_config_txg; /* txg of last config change */ + int spa_sync_pass; /* iterate-to-convergence */ + pool_state_t spa_state; /* pool state */ + int spa_inject_ref; /* injection references */ + uint8_t spa_sync_on; /* sync threads are running */ + spa_load_state_t spa_load_state; /* current load operation */ + uint64_t spa_import_flags; /* import specific flags */ + spa_taskqs_t spa_zio_taskq[ZIO_TYPES][ZIO_TASKQ_TYPES]; + dsl_pool_t *spa_dsl_pool; + boolean_t spa_is_initializing; /* true while opening pool */ + metaslab_class_t *spa_normal_class; /* normal data class */ + metaslab_class_t *spa_log_class; /* intent log data class */ + uint64_t spa_first_txg; /* first txg after spa_open() */ + uint64_t spa_final_txg; /* txg of export/destroy */ + uint64_t spa_freeze_txg; /* freeze pool at this txg */ + uint64_t spa_load_max_txg; /* best initial ub_txg */ + uint64_t spa_claim_max_txg; /* highest claimed birth txg */ + timespec_t spa_loaded_ts; /* 1st successful open time */ + objset_t *spa_meta_objset; /* copy of dp->dp_meta_objset */ + kmutex_t spa_evicting_os_lock; /* Evicting objset list lock */ + list_t spa_evicting_os_list; /* Objsets being evicted. */ + kcondvar_t spa_evicting_os_cv; /* Objset Eviction Completion */ + txg_list_t spa_vdev_txg_list; /* per-txg dirty vdev list */ + vdev_t *spa_root_vdev; /* top-level vdev container */ + int spa_min_ashift; /* of vdevs in normal class */ + int spa_max_ashift; /* of vdevs in normal class */ + uint64_t spa_config_guid; /* config pool guid */ + uint64_t spa_load_guid; /* spa_load initialized guid */ + uint64_t spa_last_synced_guid; /* last synced guid */ + list_t spa_config_dirty_list; /* vdevs with dirty config */ + list_t spa_state_dirty_list; /* vdevs with dirty state */ + kmutex_t spa_alloc_lock; + avl_tree_t spa_alloc_tree; + spa_aux_vdev_t spa_spares; /* hot spares */ + spa_aux_vdev_t spa_l2cache; /* L2ARC cache devices */ + nvlist_t *spa_label_features; /* Features for reading MOS */ + uint64_t spa_config_object; /* MOS object for pool config */ + uint64_t spa_config_generation; /* config generation number */ + uint64_t spa_syncing_txg; /* txg currently syncing */ + bpobj_t spa_deferred_bpobj; /* deferred-free bplist */ + bplist_t spa_free_bplist[TXG_SIZE]; /* bplist of stuff to free */ + zio_cksum_salt_t spa_cksum_salt; /* secret salt for cksum */ + /* checksum context templates */ + kmutex_t spa_cksum_tmpls_lock; + void *spa_cksum_tmpls[ZIO_CHECKSUM_FUNCTIONS]; + uberblock_t spa_ubsync; /* last synced uberblock */ + uberblock_t spa_uberblock; /* current uberblock */ + boolean_t spa_extreme_rewind; /* rewind past deferred frees */ + uint64_t spa_last_io; /* lbolt of last non-scan I/O */ + kmutex_t spa_scrub_lock; /* resilver/scrub lock */ + uint64_t spa_scrub_inflight; /* in-flight scrub I/Os */ + kcondvar_t spa_scrub_io_cv; /* scrub I/O completion */ + uint8_t spa_scrub_active; /* active or suspended? */ + uint8_t spa_scrub_type; /* type of scrub we're doing */ + uint8_t spa_scrub_finished; /* indicator to rotate logs */ + uint8_t spa_scrub_started; /* started since last boot */ + uint8_t spa_scrub_reopen; /* scrub doing vdev_reopen */ + uint64_t spa_scan_pass_start; /* start time per pass/reboot */ + uint64_t spa_scan_pass_scrub_pause; /* scrub pause time */ + uint64_t spa_scan_pass_scrub_spent_paused; /* total paused */ + uint64_t spa_scan_pass_exam; /* examined bytes per pass */ + kmutex_t spa_async_lock; /* protect async state */ + kthread_t *spa_async_thread; /* thread doing async task */ + int spa_async_suspended; /* async tasks suspended */ + kcondvar_t spa_async_cv; /* wait for thread_exit() */ + uint16_t spa_async_tasks; /* async task mask */ + char *spa_root; /* alternate root directory */ + uint64_t spa_ena; /* spa-wide ereport ENA */ + int spa_last_open_failed; /* error if last open failed */ + uint64_t spa_last_ubsync_txg; /* "best" uberblock txg */ + uint64_t spa_last_ubsync_txg_ts; /* timestamp from that ub */ + uint64_t spa_load_txg; /* ub txg that loaded */ + uint64_t spa_load_txg_ts; /* timestamp from that ub */ + uint64_t spa_load_meta_errors; /* verify metadata err count */ + uint64_t spa_load_data_errors; /* verify data err count */ + uint64_t spa_verify_min_txg; /* start txg of verify scrub */ + kmutex_t spa_errlog_lock; /* error log lock */ + uint64_t spa_errlog_last; /* last error log object */ + uint64_t spa_errlog_scrub; /* scrub error log object */ + kmutex_t spa_errlist_lock; /* error list/ereport lock */ + avl_tree_t spa_errlist_last; /* last error list */ + avl_tree_t spa_errlist_scrub; /* scrub error list */ + uint64_t spa_deflate; /* should we deflate? */ + uint64_t spa_history; /* history object */ + kmutex_t spa_history_lock; /* history lock */ + vdev_t *spa_pending_vdev; /* pending vdev additions */ + kmutex_t spa_props_lock; /* property lock */ + uint64_t spa_pool_props_object; /* object for properties */ + uint64_t spa_bootfs; /* default boot filesystem */ + uint64_t spa_failmode; /* failure mode for the pool */ + uint64_t spa_delegation; /* delegation on/off */ + list_t spa_config_list; /* previous cache file(s) */ + /* per-CPU array of root of async I/O: */ + zio_t **spa_async_zio_root; + zio_t *spa_suspend_zio_root; /* root of all suspended I/O */ + kmutex_t spa_suspend_lock; /* protects suspend_zio_root */ + kcondvar_t spa_suspend_cv; /* notification of resume */ + uint8_t spa_suspended; /* pool is suspended */ + uint8_t spa_claiming; /* pool is doing zil_claim() */ + boolean_t spa_debug; /* debug enabled? */ + boolean_t spa_is_root; /* pool is root */ + int spa_minref; /* num refs when first opened */ + int spa_mode; /* FREAD | FWRITE */ + spa_log_state_t spa_log_state; /* log state */ + uint64_t spa_autoexpand; /* lun expansion on/off */ + ddt_t *spa_ddt[ZIO_CHECKSUM_FUNCTIONS]; /* in-core DDTs */ + uint64_t spa_ddt_stat_object; /* DDT statistics */ + uint64_t spa_dedup_dspace; /* Cache get_dedup_dspace() */ + uint64_t spa_dedup_ditto; /* dedup ditto threshold */ + uint64_t spa_dedup_checksum; /* default dedup checksum */ + uint64_t spa_dspace; /* dspace in normal class */ + kmutex_t spa_vdev_top_lock; /* dueling offline/remove */ + kmutex_t spa_proc_lock; /* protects spa_proc* */ + kcondvar_t spa_proc_cv; /* spa_proc_state transitions */ + spa_proc_state_t spa_proc_state; /* see definition */ + proc_t *spa_proc; /* "zpool-poolname" process */ + uint64_t spa_did; /* if procp != p0, did of t1 */ + boolean_t spa_autoreplace; /* autoreplace set in open */ + int spa_vdev_locks; /* locks grabbed */ + uint64_t spa_creation_version; /* version at pool creation */ + uint64_t spa_prev_software_version; /* See ub_software_version */ + uint64_t spa_feat_for_write_obj; /* required to write to pool */ + uint64_t spa_feat_for_read_obj; /* required to read from pool */ + uint64_t spa_feat_desc_obj; /* Feature descriptions */ + uint64_t spa_feat_enabled_txg_obj; /* Feature enabled txg */ + kmutex_t spa_feat_stats_lock; /* protects spa_feat_stats */ + nvlist_t *spa_feat_stats; /* Cache of enabled features */ + /* cache feature refcounts */ + uint64_t spa_feat_refcount_cache[SPA_FEATURES]; + taskqid_t spa_deadman_tqid; /* Task id */ + uint64_t spa_deadman_calls; /* number of deadman calls */ + hrtime_t spa_sync_starttime; /* starting time of spa_sync */ + uint64_t spa_deadman_synctime; /* deadman expiration timer */ + uint64_t spa_all_vdev_zaps; /* ZAP of per-vd ZAP obj #s */ + spa_avz_action_t spa_avz_action; /* destroy/rebuild AVZ? */ + uint64_t spa_errata; /* errata issues detected */ + spa_stats_t spa_stats; /* assorted spa statistics */ + hrtime_t spa_ccw_fail_time; /* Conf cache write fail time */ + taskq_t *spa_zvol_taskq; /* Taskq for minor management */ + uint64_t spa_multihost; /* multihost aware (mmp) */ + mmp_thread_t spa_mmp; /* multihost mmp thread */ + + /* + * spa_refcount & spa_config_lock must be the last elements + * because refcount_t changes size based on compilation options. + * In order for the MDB module to function correctly, the other + * fields must remain in the same location. + */ + spa_config_lock_t spa_config_lock[SCL_LOCKS]; /* config changes */ + refcount_t spa_refcount; /* number of opens */ + + taskq_t *spa_upgrade_taskq; /* taskq for upgrade jobs */ +}; + +extern char *spa_config_path; + +extern void spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q, + task_func_t *func, void *arg, uint_t flags, taskq_ent_t *ent); +extern void spa_taskq_dispatch_sync(spa_t *, zio_type_t t, zio_taskq_type_t q, + task_func_t *func, void *arg, uint_t flags); + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SPA_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/space_map.h +++ linux-aws-4.15.0/zfs/include/sys/space_map.h @@ -0,0 +1,164 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_SPACE_MAP_H +#define _SYS_SPACE_MAP_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The size of the space map object has increased to include a histogram. + * The SPACE_MAP_SIZE_V0 designates the original size and is used to + * maintain backward compatibility. + */ +#define SPACE_MAP_SIZE_V0 (3 * sizeof (uint64_t)) +#define SPACE_MAP_HISTOGRAM_SIZE 32 + +/* + * The space_map_phys is the on-disk representation of the space map. + * Consumers of space maps should never reference any of the members of this + * structure directly. These members may only be updated in syncing context. + * + * Note the smp_object is no longer used but remains in the structure + * for backward compatibility. + */ +typedef struct space_map_phys { + uint64_t smp_object; /* on-disk space map object */ + uint64_t smp_objsize; /* size of the object */ + uint64_t smp_alloc; /* space allocated from the map */ + uint64_t smp_pad[5]; /* reserved */ + + /* + * The smp_histogram maintains a histogram of free regions. Each + * bucket, smp_histogram[i], contains the number of free regions + * whose size is: + * 2^(i+sm_shift) <= size of free region in bytes < 2^(i+sm_shift+1) + */ + uint64_t smp_histogram[SPACE_MAP_HISTOGRAM_SIZE]; +} space_map_phys_t; + +/* + * The space map object defines a region of space, its size, how much is + * allocated, and the on-disk object that stores this information. + * Consumers of space maps may only access the members of this structure. + */ +typedef struct space_map { + uint64_t sm_start; /* start of map */ + uint64_t sm_size; /* size of map */ + uint8_t sm_shift; /* unit shift */ + uint64_t sm_length; /* synced length */ + uint64_t sm_alloc; /* synced space allocated */ + objset_t *sm_os; /* objset for this map */ + uint64_t sm_object; /* object id for this map */ + uint32_t sm_blksz; /* block size for space map */ + dmu_buf_t *sm_dbuf; /* space_map_phys_t dbuf */ + space_map_phys_t *sm_phys; /* on-disk space map */ + kmutex_t *sm_lock; /* pointer to lock that protects map */ +} space_map_t; + +/* + * debug entry + * + * 1 3 10 50 + * ,---+--------+------------+---------------------------------. + * | 1 | action | syncpass | txg (lower bits) | + * `---+--------+------------+---------------------------------' + * 63 62 60 59 50 49 0 + * + * + * non-debug entry + * + * 1 47 1 15 + * ,-----------------------------------------------------------. + * | 0 | offset (sm_shift units) | type | run | + * `-----------------------------------------------------------' + * 63 62 17 16 15 0 + */ + +/* All this stuff takes and returns bytes */ +#define SM_RUN_DECODE(x) (BF64_DECODE(x, 0, 15) + 1) +#define SM_RUN_ENCODE(x) BF64_ENCODE((x) - 1, 0, 15) +#define SM_TYPE_DECODE(x) BF64_DECODE(x, 15, 1) +#define SM_TYPE_ENCODE(x) BF64_ENCODE(x, 15, 1) +#define SM_OFFSET_DECODE(x) BF64_DECODE(x, 16, 47) +#define SM_OFFSET_ENCODE(x) BF64_ENCODE(x, 16, 47) +#define SM_DEBUG_DECODE(x) BF64_DECODE(x, 63, 1) +#define SM_DEBUG_ENCODE(x) BF64_ENCODE(x, 63, 1) + +#define SM_DEBUG_ACTION_DECODE(x) BF64_DECODE(x, 60, 3) +#define SM_DEBUG_ACTION_ENCODE(x) BF64_ENCODE(x, 60, 3) + +#define SM_DEBUG_SYNCPASS_DECODE(x) BF64_DECODE(x, 50, 10) +#define SM_DEBUG_SYNCPASS_ENCODE(x) BF64_ENCODE(x, 50, 10) + +#define SM_DEBUG_TXG_DECODE(x) BF64_DECODE(x, 0, 50) +#define SM_DEBUG_TXG_ENCODE(x) BF64_ENCODE(x, 0, 50) + +#define SM_RUN_MAX SM_RUN_DECODE(~0ULL) + +typedef enum { + SM_ALLOC, + SM_FREE +} maptype_t; + +int space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype); + +void space_map_histogram_clear(space_map_t *sm); +void space_map_histogram_add(space_map_t *sm, range_tree_t *rt, + dmu_tx_t *tx); + +void space_map_update(space_map_t *sm); + +uint64_t space_map_object(space_map_t *sm); +uint64_t space_map_allocated(space_map_t *sm); +uint64_t space_map_length(space_map_t *sm); + +void space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype, + dmu_tx_t *tx); +void space_map_truncate(space_map_t *sm, dmu_tx_t *tx); +uint64_t space_map_alloc(objset_t *os, dmu_tx_t *tx); +void space_map_free(space_map_t *sm, dmu_tx_t *tx); + +int space_map_open(space_map_t **smp, objset_t *os, uint64_t object, + uint64_t start, uint64_t size, uint8_t shift, kmutex_t *lp); +void space_map_close(space_map_t *sm); + +int64_t space_map_alloc_delta(space_map_t *sm); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SPACE_MAP_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/space_reftree.h +++ linux-aws-4.15.0/zfs/include/sys/space_reftree.h @@ -0,0 +1,57 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_SPACE_REFTREE_H +#define _SYS_SPACE_REFTREE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct space_ref { + avl_node_t sr_node; /* AVL node */ + uint64_t sr_offset; /* range offset (start or end) */ + int64_t sr_refcnt; /* associated reference count */ +} space_ref_t; + +void space_reftree_create(avl_tree_t *t); +void space_reftree_destroy(avl_tree_t *t); +void space_reftree_add_seg(avl_tree_t *t, uint64_t start, uint64_t end, + int64_t refcnt); +void space_reftree_add_map(avl_tree_t *t, range_tree_t *rt, int64_t refcnt); +void space_reftree_generate_map(avl_tree_t *t, range_tree_t *rt, + int64_t minref); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SPACE_REFTREE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sysevent.h +++ linux-aws-4.15.0/zfs/include/sys/sysevent.h @@ -0,0 +1,36 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SYSEVENT_H +#define _SYS_SYSEVENT_H + +#include + +typedef struct sysevent { + nvlist_t *resource; +} sysevent_t; + +#endif --- linux-aws-4.15.0.orig/zfs/include/sys/sysevent/Makefile.am +++ linux-aws-4.15.0/zfs/include/sys/sysevent/Makefile.am @@ -0,0 +1,19 @@ +COMMON_H = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h \ + $(top_srcdir)/include/sys/sysevent/dev.h + +KERNEL_H = + +USER_H = + +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) + +if CONFIG_USER +libzfsdir = $(includedir)/libzfs/sys/sysevent +libzfs_HEADERS = $(COMMON_H) $(USER_H) +endif + +if CONFIG_KERNEL +kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/sysevent +kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +endif --- linux-aws-4.15.0.orig/zfs/include/sys/sysevent/Makefile.in +++ linux-aws-4.15.0/zfs/include/sys/sysevent/Makefile.in @@ -0,0 +1,790 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include/sys/sysevent +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/always-arch.m4 \ + $(top_srcdir)/config/always-no-bool-compare.m4 \ + $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \ + $(top_srcdir)/config/dkms.m4 \ + $(top_srcdir)/config/kernel-acl.m4 \ + $(top_srcdir)/config/kernel-aio-fsync.m4 \ + $(top_srcdir)/config/kernel-automount.m4 \ + $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \ + $(top_srcdir)/config/kernel-bdev-logical-size.m4 \ + $(top_srcdir)/config/kernel-bdev-physical-size.m4 \ + $(top_srcdir)/config/kernel-bdi.m4 \ + $(top_srcdir)/config/kernel-bio-bvec-iter.m4 \ + $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \ + $(top_srcdir)/config/kernel-bio-failfast.m4 \ + $(top_srcdir)/config/kernel-bio-op.m4 \ + $(top_srcdir)/config/kernel-bio-rw-barrier.m4 \ + $(top_srcdir)/config/kernel-bio-rw-discard.m4 \ + $(top_srcdir)/config/kernel-bio_set_dev.m4 \ + $(top_srcdir)/config/kernel-blk-queue-bdi.m4 \ + $(top_srcdir)/config/kernel-blk-queue-flush.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-hw-sectors.m4 \ + $(top_srcdir)/config/kernel-blk-queue-max-segments.m4 \ + $(top_srcdir)/config/kernel-blk-queue-unplug.m4 \ + $(top_srcdir)/config/kernel-blkdev-get-by-path.m4 \ + $(top_srcdir)/config/kernel-blkdev-get.m4 \ + $(top_srcdir)/config/kernel-block-device-operations-release-void.m4 \ + $(top_srcdir)/config/kernel-clear-inode.m4 \ + $(top_srcdir)/config/kernel-commit-metadata.m4 \ + $(top_srcdir)/config/kernel-create-nameidata.m4 \ + $(top_srcdir)/config/kernel-current-time.m4 \ + $(top_srcdir)/config/kernel-current_bio_tail.m4 \ + $(top_srcdir)/config/kernel-d-make-root.m4 \ + $(top_srcdir)/config/kernel-d-obtain-alias.m4 \ + $(top_srcdir)/config/kernel-d-prune-aliases.m4 \ + $(top_srcdir)/config/kernel-declare-event-class.m4 \ + $(top_srcdir)/config/kernel-dentry-operations.m4 \ + $(top_srcdir)/config/kernel-dirty-inode.m4 \ + $(top_srcdir)/config/kernel-discard-granularity.m4 \ + $(top_srcdir)/config/kernel-elevator-change.m4 \ + $(top_srcdir)/config/kernel-encode-fh-inode.m4 \ + $(top_srcdir)/config/kernel-evict-inode.m4 \ + $(top_srcdir)/config/kernel-fallocate.m4 \ + $(top_srcdir)/config/kernel-file-dentry.m4 \ + $(top_srcdir)/config/kernel-file-inode.m4 \ + $(top_srcdir)/config/kernel-fmode-t.m4 \ + $(top_srcdir)/config/kernel-follow-down-one.m4 \ + $(top_srcdir)/config/kernel-fpu.m4 \ + $(top_srcdir)/config/kernel-fsync.m4 \ + $(top_srcdir)/config/kernel-generic_io_acct.m4 \ + $(top_srcdir)/config/kernel-generic_readlink.m4 \ + $(top_srcdir)/config/kernel-get-disk-ro.m4 \ + $(top_srcdir)/config/kernel-get-gendisk.m4 \ + $(top_srcdir)/config/kernel-get-link.m4 \ + $(top_srcdir)/config/kernel-inode-getattr.m4 \ + $(top_srcdir)/config/kernel-inode-set-flags.m4 \ + $(top_srcdir)/config/kernel-insert-inode-locked.m4 \ + $(top_srcdir)/config/kernel-invalidate-bdev-args.m4 \ + $(top_srcdir)/config/kernel-is_owner_or_cap.m4 \ + $(top_srcdir)/config/kernel-kmap-atomic-args.m4 \ + $(top_srcdir)/config/kernel-kuid-helpers.m4 \ + $(top_srcdir)/config/kernel-lookup-bdev.m4 \ + $(top_srcdir)/config/kernel-lookup-nameidata.m4 \ + $(top_srcdir)/config/kernel-lseek-execute.m4 \ + $(top_srcdir)/config/kernel-mk-request-fn.m4 \ + $(top_srcdir)/config/kernel-mkdir-umode-t.m4 \ + $(top_srcdir)/config/kernel-mod-param.m4 \ + $(top_srcdir)/config/kernel-mount-nodev.m4 \ + $(top_srcdir)/config/kernel-objtool.m4 \ + $(top_srcdir)/config/kernel-open-bdev-exclusive.m4 \ + $(top_srcdir)/config/kernel-put-link.m4 \ + $(top_srcdir)/config/kernel-rename.m4 \ + $(top_srcdir)/config/kernel-security-inode-init.m4 \ + $(top_srcdir)/config/kernel-set-nlink.m4 \ + $(top_srcdir)/config/kernel-setattr-prepare.m4 \ + $(top_srcdir)/config/kernel-sget-args.m4 \ + $(top_srcdir)/config/kernel-show-options.m4 \ + $(top_srcdir)/config/kernel-shrink.m4 \ + $(top_srcdir)/config/kernel-submit_bio.m4 \ + $(top_srcdir)/config/kernel-super-userns.m4 \ + $(top_srcdir)/config/kernel-tmpfile.m4 \ + $(top_srcdir)/config/kernel-truncate-range.m4 \ + $(top_srcdir)/config/kernel-truncate-setsize.m4 \ + $(top_srcdir)/config/kernel-vfs-iterate.m4 \ + $(top_srcdir)/config/kernel-vfs-rw-iterate.m4 \ + $(top_srcdir)/config/kernel-vm_node_stat.m4 \ + $(top_srcdir)/config/kernel-xattr-handler.m4 \ + $(top_srcdir)/config/kernel.m4 $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/mount-helper.m4 \ + $(top_srcdir)/config/toolchain-simd.m4 \ + $(top_srcdir)/config/user-dracut.m4 \ + $(top_srcdir)/config/user-frame-larger-than.m4 \ + $(top_srcdir)/config/user-libattr.m4 \ + $(top_srcdir)/config/user-libblkid.m4 \ + $(top_srcdir)/config/user-libtirpc.m4 \ + $(top_srcdir)/config/user-libudev.m4 \ + $(top_srcdir)/config/user-libuuid.m4 \ + $(top_srcdir)/config/user-makedev.m4 \ + $(top_srcdir)/config/user-no-format-truncation.m4 \ + $(top_srcdir)/config/user-runstatedir.m4 \ + $(top_srcdir)/config/user-systemd.m4 \ + $(top_srcdir)/config/user-sysvinit.m4 \ + $(top_srcdir)/config/user-udev.m4 \ + $(top_srcdir)/config/user-zlib.m4 $(top_srcdir)/config/user.m4 \ + $(top_srcdir)/config/zfs-build.m4 \ + $(top_srcdir)/config/zfs-meta.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__kernel_HEADERS_DIST) \ + $(am__libzfs_HEADERS_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/zfs_config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__kernel_HEADERS_DIST = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h \ + $(top_srcdir)/include/sys/sysevent/dev.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)" +am__libzfs_HEADERS_DIST = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h \ + $(top_srcdir)/include/sys/sysevent/dev.h +HEADERS = $(kernel_HEADERS) $(libzfs_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALIEN = @ALIEN@ +ALIEN_VERSION = @ALIEN_VERSION@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEBUG_STACKFLAGS = @DEBUG_STACKFLAGS@ +DEBUG_ZFS = @DEBUG_ZFS@ +DEFAULT_INITCONF_DIR = @DEFAULT_INITCONF_DIR@ +DEFAULT_INIT_DIR = @DEFAULT_INIT_DIR@ +DEFAULT_INIT_SCRIPT = @DEFAULT_INIT_SCRIPT@ +DEFAULT_PACKAGE = @DEFAULT_PACKAGE@ +DEFINE_INITRAMFS = @DEFINE_INITRAMFS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DPKG = @DPKG@ +DPKGBUILD = @DPKGBUILD@ +DPKGBUILD_VERSION = @DPKGBUILD_VERSION@ +DPKG_VERSION = @DPKG_VERSION@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FRAME_LARGER_THAN = @FRAME_LARGER_THAN@ +GREP = @GREP@ +HAVE_ALIEN = @HAVE_ALIEN@ +HAVE_DPKG = @HAVE_DPKG@ +HAVE_DPKGBUILD = @HAVE_DPKGBUILD@ +HAVE_RPM = @HAVE_RPM@ +HAVE_RPMBUILD = @HAVE_RPMBUILD@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KERNELCPPFLAGS = @KERNELCPPFLAGS@ +KERNELMAKE_PARAMS = @KERNELMAKE_PARAMS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBATTR = @LIBATTR@ +LIBBLKID = @LIBBLKID@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTIRPC = @LIBTIRPC@ +LIBTIRPC_CFLAGS = @LIBTIRPC_CFLAGS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV = @LIBUDEV@ +LIBUUID = @LIBUUID@ +LINUX = @LINUX@ +LINUX_OBJ = @LINUX_OBJ@ +LINUX_SYMBOLS = @LINUX_SYMBOLS@ +LINUX_VERSION = @LINUX_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_BOOL_COMPARE = @NO_BOOL_COMPARE@ +NO_FORMAT_TRUNCATION = @NO_FORMAT_TRUNCATION@ +NO_UNUSED_BUT_SET_VARIABLE = @NO_UNUSED_BUT_SET_VARIABLE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +QAT_OBJ = @QAT_OBJ@ +QAT_SRC = @QAT_SRC@ +QAT_SYMBOLS = @QAT_SYMBOLS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +RM = @RM@ +RPM = @RPM@ +RPMBUILD = @RPMBUILD@ +RPMBUILD_VERSION = @RPMBUILD_VERSION@ +RPM_DEFINE_COMMON = @RPM_DEFINE_COMMON@ +RPM_DEFINE_DKMS = @RPM_DEFINE_DKMS@ +RPM_DEFINE_KMOD = @RPM_DEFINE_KMOD@ +RPM_DEFINE_UTIL = @RPM_DEFINE_UTIL@ +RPM_SPEC_DIR = @RPM_SPEC_DIR@ +RPM_VERSION = @RPM_VERSION@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPL = @SPL@ +SPL_OBJ = @SPL_OBJ@ +SPL_SYMBOLS = @SPL_SYMBOLS@ +SPL_VERSION = @SPL_VERSION@ +SRPM_DEFINE_COMMON = @SRPM_DEFINE_COMMON@ +SRPM_DEFINE_DKMS = @SRPM_DEFINE_DKMS@ +SRPM_DEFINE_KMOD = @SRPM_DEFINE_KMOD@ +SRPM_DEFINE_UTIL = @SRPM_DEFINE_UTIL@ +STRIP = @STRIP@ +TARGET_ASM_DIR = @TARGET_ASM_DIR@ +VENDOR = @VENDOR@ +VERSION = @VERSION@ +ZFS_CONFIG = @ZFS_CONFIG@ +ZFS_INIT_SYSTEMD = @ZFS_INIT_SYSTEMD@ +ZFS_INIT_SYSV = @ZFS_INIT_SYSV@ +ZFS_META_ALIAS = @ZFS_META_ALIAS@ +ZFS_META_AUTHOR = @ZFS_META_AUTHOR@ +ZFS_META_DATA = @ZFS_META_DATA@ +ZFS_META_LICENSE = @ZFS_META_LICENSE@ +ZFS_META_LT_AGE = @ZFS_META_LT_AGE@ +ZFS_META_LT_CURRENT = @ZFS_META_LT_CURRENT@ +ZFS_META_LT_REVISION = @ZFS_META_LT_REVISION@ +ZFS_META_NAME = @ZFS_META_NAME@ +ZFS_META_RELEASE = @ZFS_META_RELEASE@ +ZFS_META_VERSION = @ZFS_META_VERSION@ +ZFS_MODULE_LOAD = @ZFS_MODULE_LOAD@ +ZLIB = @ZLIB@ +ZONENAME = @ZONENAME@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dracutdir = @dracutdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesloaddir = @modulesloaddir@ +mounthelperdir = @mounthelperdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +systemdpresetdir = @systemdpresetdir@ +systemdunitdir = @systemdunitdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +udevruledir = @udevruledir@ +COMMON_H = \ + $(top_srcdir)/include/sys/sysevent/eventdefs.h \ + $(top_srcdir)/include/sys/sysevent/dev.h + +KERNEL_H = +USER_H = +EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) +@CONFIG_USER_TRUE@libzfsdir = $(includedir)/libzfs/sys/sysevent +@CONFIG_USER_TRUE@libzfs_HEADERS = $(COMMON_H) $(USER_H) +@CONFIG_KERNEL_TRUE@kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/sysevent +@CONFIG_KERNEL_TRUE@kernel_HEADERS = $(COMMON_H) $(KERNEL_H) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/sysevent/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/sys/sysevent/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-kernelHEADERS: $(kernel_HEADERS) + @$(NORMAL_INSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(kerneldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(kerneldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(kerneldir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(kerneldir)" || exit $$?; \ + done + +uninstall-kernelHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(kernel_HEADERS)'; test -n "$(kerneldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(kerneldir)'; $(am__uninstall_files_from_dir) +install-libzfsHEADERS: $(libzfs_HEADERS) + @$(NORMAL_INSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libzfsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libzfsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libzfsdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libzfsdir)" || exit $$?; \ + done + +uninstall-libzfsHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libzfs_HEADERS)'; test -n "$(libzfsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libzfsdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(kerneldir)" "$(DESTDIR)$(libzfsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-kernelHEADERS install-libzfsHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-kernelHEADERS \ + install-libzfsHEADERS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-kernelHEADERS uninstall-libzfsHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: --- linux-aws-4.15.0.orig/zfs/include/sys/sysevent/dev.h +++ linux-aws-4.15.0/zfs/include/sys/sysevent/dev.h @@ -0,0 +1,261 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SYSEVENT_DEV_H +#define _SYS_SYSEVENT_DEV_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Event schema for EC_DEV_ADD/ESC_DISK + * + * Event Class - EC_DEV_ADD + * Event Sub-Class - ESC_DISK + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev name to the raw device. + * The name does not include the slice number component. + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * Attribute Name - DEV_PROP_PREFIX + * Attribute Type - data type of the devinfo_node_property + * Attribute Value - value of the devinfo_node_property + * + * + * Event schema for EC_DEV_ADD/ESC_NETWORK + * + * Event Class - EC_DEV_ADD + * Event Sub-Class - ESC_NETWORK + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev name associated with the device if exists. + * /dev name associated with the driver for DLPI + * Style-2 only drivers. + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * Attribute Name - DEV_PROP_PREFIX + * Attribute Type - data type of the devinfo_node_property + * Attribute Value - value of the devinfo_node_property + * + * + * Event schema for EC_DEV_ADD/ESC_PRINTER + * + * Event Class - EC_DEV_ADD + * Event Sub-Class - ESC_PRINTER + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev/printers name associated with the device + * if exists. + * /dev name associated with the device if it exists + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * Attribute Name - DEV_PROP_PREFIX + * Attribute Type - data type of the devinfo_node_property + * Attribute Value - value of the devinfo_node_property + * + * + * Event schema for EC_DEV_REMOVE/ESC_DISK + * + * Event Class - EC_DEV_REMOVE + * Event Sub-Class - ESC_DISK + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev name to the raw device. + * The name does not include the slice number component. + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * + * Event schema for EC_DEV_REMOVE/ESC_NETWORK + * + * Event Class - EC_DEV_REMOVE + * Event Sub-Class - ESC_NETWORK + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev name associated with the device if exists. + * /dev name associated with the driver for DLPI + * Style-2 only drivers. + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * + * Event schema for EC_DEV_REMOVE/ESC_PRINTER + * + * Event Class - EC_DEV_REMOVE + * Event Sub-Class - ESC_PRINTER + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - /dev/printers name associated with the device + * if exists. + * /dev name associated with the device if it exists + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path of the device without the "/devices" + * prefix. + * + * Attribute Name - DEV_DRIVER_NAME + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - driver name + * + * Attribute Name - DEV_INSTANCE + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - driver instance number + * + * + * Event schema for EC_DEV_BRANCH/ESC_DEV_BRANCH_ADD or ESC_DEV_BRANCH_REMOVE + * + * Event Class - EC_DEV_BRANCH + * Event Sub-Class - ESC_DEV_BRANCH_ADD or ESC_DEV_BRANCH_REMOVE + * + * Attribute Name - EV_VERSION + * Attribute Type - DATA_TYPE_INT32 + * Attribute Value - event version number + * + * Attribute Name - DEV_PHYS_PATH + * Attribute Type - DATA_TYPE_STRING + * Attribute Value - physical path to the root node of the device subtree + * without the "/devices" prefix. + */ + +#define EV_VERSION "version" +#define DEV_PHYS_PATH "phys_path" +#define DEV_NAME "dev_name" +#define DEV_DRIVER_NAME "driver_name" +#define DEV_INSTANCE "instance" +#define DEV_PROP_PREFIX "prop-" + +#ifdef __linux__ +#define DEV_IDENTIFIER "devid" +#define DEV_PATH "path" +#define DEV_IS_PART "is_slice" +#define DEV_SIZE "dev_size" +#endif /* __linux__ */ + +#define EV_V1 1 + +/* maximum number of devinfo node properties added to the event */ +#define MAX_PROP_COUNT 100 + +/* only properties with size less than PROP_LEN_LIMIT are added to the event */ +#define PROP_LEN_LIMIT 1024 + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SYSEVENT_DEV_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/sysevent/eventdefs.h +++ linux-aws-4.15.0/zfs/include/sys/sysevent/eventdefs.h @@ -0,0 +1,128 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * Copyright 2017 Joyent, Inc. + */ + +#ifndef _SYS_SYSEVENT_EVENTDEFS_H +#define _SYS_SYSEVENT_EVENTDEFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * eventdefs.h contains public definitions for sysevent types (classes + * and subclasses). All additions/removal/changes are subject + * to PSARC approval. + */ + +/* Sysevent Class definitions */ +#define EC_NONE "EC_none" +#define EC_PRIV "EC_priv" +#define EC_PLATFORM "EC_platform" /* events private to platform */ +#define EC_DR "EC_dr" /* Dynamic reconfiguration event class */ +#define EC_ENV "EC_env" /* Environmental monitor event class */ +#define EC_DOMAIN "EC_domain" /* Domain event class */ +#define EC_AP_DRIVER "EC_ap_driver" /* Alternate Pathing event class */ +#define EC_IPMP "EC_ipmp" /* IP Multipathing event class */ +#define EC_DEV_ADD "EC_dev_add" /* device add event class */ +#define EC_DEV_REMOVE "EC_dev_remove" /* device remove event class */ +#define EC_DEV_BRANCH "EC_dev_branch" /* device tree branch event class */ +#define EC_DEV_STATUS "EC_dev_status" /* device status event class */ +#define EC_FM "EC_fm" /* FMA error report event */ +#define EC_ZFS "EC_zfs" /* ZFS event */ +#define EC_DATALINK "EC_datalink" /* datalink event */ +#define EC_VRRP "EC_vrrp" /* VRRP event */ + +/* + * EC_DEV_ADD and EC_DEV_REMOVE subclass definitions - supporting attributes + * (name/value pairs) are found in sys/sysevent/dev.h + */ +#define ESC_DISK "disk" /* disk device */ +#define ESC_NETWORK "network" /* network interface */ +#define ESC_PRINTER "printer" /* printer device */ +#define ESC_LOFI "lofi" /* lofi device */ + +/* + * EC_DEV_BRANCH subclass definitions - supporting attributes (name/value pairs) + * are found in sys/sysevent/dev.h + */ + +/* device tree branch added */ +#define ESC_DEV_BRANCH_ADD "dev_branch_add" + +/* device tree branch removed */ +#define ESC_DEV_BRANCH_REMOVE "dev_branch_remove" + +/* + * EC_DEV_STATUS subclass definitions + * + * device capacity dynamically changed + */ +#define ESC_DEV_DLE "dev_dle" + +/* LUN has received an eject request from the user */ +#define ESC_DEV_EJECT_REQUEST "dev_eject_request" + +/* FMA Fault and Error event protocol subclass */ +#define ESC_FM_ERROR "error" +#define ESC_FM_ERROR_REPLAY "error_replay" + +/* + * ZFS subclass definitions. supporting attributes (name/value paris) are found + * in sys/fs/zfs.h + */ +#define ESC_ZFS_RESILVER_START "resilver_start" +#define ESC_ZFS_RESILVER_FINISH "resilver_finish" +#define ESC_ZFS_VDEV_REMOVE "vdev_remove" +#define ESC_ZFS_VDEV_REMOVE_AUX "vdev_remove_aux" +#define ESC_ZFS_VDEV_REMOVE_DEV "vdev_remove_dev" +#define ESC_ZFS_POOL_CREATE "pool_create" +#define ESC_ZFS_POOL_DESTROY "pool_destroy" +#define ESC_ZFS_POOL_IMPORT "pool_import" +#define ESC_ZFS_POOL_EXPORT "pool_export" +#define ESC_ZFS_VDEV_ADD "vdev_add" +#define ESC_ZFS_VDEV_ATTACH "vdev_attach" +#define ESC_ZFS_VDEV_CLEAR "vdev_clear" +#define ESC_ZFS_VDEV_CHECK "vdev_check" +#define ESC_ZFS_VDEV_ONLINE "vdev_online" +#define ESC_ZFS_CONFIG_SYNC "config_sync" +#define ESC_ZFS_SCRUB_START "scrub_start" +#define ESC_ZFS_SCRUB_FINISH "scrub_finish" +#define ESC_ZFS_VDEV_SPARE "vdev_spare" +#define ESC_ZFS_VDEV_AUTOEXPAND "vdev_autoexpand" +#define ESC_ZFS_BOOTFS_VDEV_ATTACH "bootfs_vdev_attach" +#define ESC_ZFS_POOL_REGUID "pool_reguid" +#define ESC_ZFS_HISTORY_EVENT "history_event" + +/* + * datalink subclass definitions. + */ +#define ESC_DATALINK_PHYS_ADD "datalink_phys_add" /* new physical link */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SYSEVENT_EVENTDEFS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace.h +++ linux-aws-4.15.0/zfs/include/sys/trace.h @@ -0,0 +1,68 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#if !defined(_TRACE_ZFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ZFS_H + +#include +#include + +/* + * The sys/trace_dbgmsg.h header defines tracepoint events for + * dprintf(), dbgmsg(), and SET_ERROR(). + */ +#define _SYS_TRACE_DBGMSG_INDIRECT +#include +#undef _SYS_TRACE_DBGMSG_INDIRECT + +/* + * Redefine the DTRACE_PROBE* functions to use Linux tracepoints + */ +#undef DTRACE_PROBE1 +#define DTRACE_PROBE1(name, t1, arg1) \ + trace_zfs_##name((arg1)) + +#undef DTRACE_PROBE2 +#define DTRACE_PROBE2(name, t1, arg1, t2, arg2) \ + trace_zfs_##name((arg1), (arg2)) + +#undef DTRACE_PROBE3 +#define DTRACE_PROBE3(name, t1, arg1, t2, arg2, t3, arg3) \ + trace_zfs_##name((arg1), (arg2), (arg3)) + +#undef DTRACE_PROBE4 +#define DTRACE_PROBE4(name, t1, arg1, t2, arg2, t3, arg3, t4, arg4) \ + trace_zfs_##name((arg1), (arg2), (arg3), (arg4)) + +#endif /* _TRACE_ZFS_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_acl.h +++ linux-aws-4.15.0/zfs/include/sys/trace_acl.h @@ -0,0 +1,158 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_acl + +#if !defined(_TRACE_ACL_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ACL_H + +#include +#include +#include + +/* + * Generic support for three argument tracepoints of the form: + * + * DTRACE_PROBE3(..., + * znode_t *, ..., + * zfs_ace_hdr_t *, ..., + * uint32_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_ace_class, + TP_PROTO(znode_t *zn, zfs_ace_hdr_t *ace, uint32_t mask_matched), + TP_ARGS(zn, ace, mask_matched), + TP_STRUCT__entry( + __field(uint64_t, z_id) + __field(uint8_t, z_unlinked) + __field(uint8_t, z_atime_dirty) + __field(uint8_t, z_zn_prefetch) + __field(uint8_t, z_moved) + __field(uint_t, z_blksz) + __field(uint_t, z_seq) + __field(uint64_t, z_mapcnt) + __field(uint64_t, z_size) + __field(uint64_t, z_pflags) + __field(uint32_t, z_sync_cnt) + __field(mode_t, z_mode) + __field(boolean_t, z_is_sa) + __field(boolean_t, z_is_mapped) + __field(boolean_t, z_is_ctldir) + __field(boolean_t, z_is_stale) + + __field(uint32_t, i_uid) + __field(uint32_t, i_gid) + __field(unsigned long, i_ino) + __field(unsigned int, i_nlink) + __field(u64, i_version) + __field(loff_t, i_size) + __field(unsigned int, i_blkbits) + __field(unsigned short, i_bytes) + __field(umode_t, i_mode) + __field(__u32, i_generation) + + __field(uint16_t, z_type) + __field(uint16_t, z_flags) + __field(uint32_t, z_access_mask) + + __field(uint32_t, mask_matched) + ), + TP_fast_assign( + __entry->z_id = zn->z_id; + __entry->z_unlinked = zn->z_unlinked; + __entry->z_atime_dirty = zn->z_atime_dirty; + __entry->z_zn_prefetch = zn->z_zn_prefetch; + __entry->z_moved = zn->z_moved; + __entry->z_blksz = zn->z_blksz; + __entry->z_seq = zn->z_seq; + __entry->z_mapcnt = zn->z_mapcnt; + __entry->z_size = zn->z_size; + __entry->z_pflags = zn->z_pflags; + __entry->z_sync_cnt = zn->z_sync_cnt; + __entry->z_mode = zn->z_mode; + __entry->z_is_sa = zn->z_is_sa; + __entry->z_is_mapped = zn->z_is_mapped; + __entry->z_is_ctldir = zn->z_is_ctldir; + __entry->z_is_stale = zn->z_is_stale; + + __entry->i_uid = KUID_TO_SUID(ZTOI(zn)->i_uid); + __entry->i_gid = KGID_TO_SGID(ZTOI(zn)->i_gid); + __entry->i_ino = zn->z_inode.i_ino; + __entry->i_nlink = zn->z_inode.i_nlink; + __entry->i_version = zn->z_inode.i_version; + __entry->i_size = zn->z_inode.i_size; + __entry->i_blkbits = zn->z_inode.i_blkbits; + __entry->i_bytes = zn->z_inode.i_bytes; + __entry->i_mode = zn->z_inode.i_mode; + __entry->i_generation = zn->z_inode.i_generation; + + __entry->z_type = ace->z_type; + __entry->z_flags = ace->z_flags; + __entry->z_access_mask = ace->z_access_mask; + + __entry->mask_matched = mask_matched; + ), + TP_printk("zn { id %llu unlinked %u atime_dirty %u " + "zn_prefetch %u moved %u blksz %u seq %u " + "mapcnt %llu size %llu pflags %llu " + "sync_cnt %u mode 0x%x is_sa %d " + "is_mapped %d is_ctldir %d is_stale %d inode { " + "uid %u gid %u ino %lu nlink %u version %llu size %lli " + "blkbits %u bytes %u mode 0x%x generation %x } } " + "ace { type %u flags %u access_mask %u } mask_matched %u", + __entry->z_id, __entry->z_unlinked, __entry->z_atime_dirty, + __entry->z_zn_prefetch, __entry->z_moved, __entry->z_blksz, + __entry->z_seq, __entry->z_mapcnt, __entry->z_size, + __entry->z_pflags, __entry->z_sync_cnt, __entry->z_mode, + __entry->z_is_sa, __entry->z_is_mapped, + __entry->z_is_ctldir, __entry->z_is_stale, __entry->i_uid, + __entry->i_gid, __entry->i_ino, __entry->i_nlink, + __entry->i_version, __entry->i_size, __entry->i_blkbits, + __entry->i_bytes, __entry->i_mode, __entry->i_generation, + __entry->z_type, __entry->z_flags, __entry->z_access_mask, + __entry->mask_matched) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_ACE_EVENT(name) \ +DEFINE_EVENT(zfs_ace_class, name, \ + TP_PROTO(znode_t *zn, zfs_ace_hdr_t *ace, uint32_t mask_matched), \ + TP_ARGS(zn, ace, mask_matched)) +/* END CSTYLED */ +DEFINE_ACE_EVENT(zfs_zfs__ace__denies); +DEFINE_ACE_EVENT(zfs_zfs__ace__allows); + +#endif /* _TRACE_ACL_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_acl +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_arc.h +++ linux-aws-4.15.0/zfs/include/sys/trace_arc.h @@ -0,0 +1,364 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#include + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_arc + +#if !defined(_TRACE_ARC_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ARC_H + +#include +#include +#include /* For ZIO macros */ + +/* + * Generic support for one argument tracepoints of the form: + * + * DTRACE_PROBE1(..., + * arc_buf_hdr_t *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_arc_buf_hdr_class, + TP_PROTO(arc_buf_hdr_t *ab), + TP_ARGS(ab), + TP_STRUCT__entry( + __array(uint64_t, hdr_dva_word, 2) + __field(uint64_t, hdr_birth) + __field(uint32_t, hdr_flags) + __field(uint32_t, hdr_bufcnt) + __field(arc_buf_contents_t, hdr_type) + __field(uint16_t, hdr_psize) + __field(uint16_t, hdr_lsize) + __field(uint64_t, hdr_spa) + __field(arc_state_type_t, hdr_state_type) + __field(clock_t, hdr_access) + __field(uint32_t, hdr_mru_hits) + __field(uint32_t, hdr_mru_ghost_hits) + __field(uint32_t, hdr_mfu_hits) + __field(uint32_t, hdr_mfu_ghost_hits) + __field(uint32_t, hdr_l2_hits) + __field(int64_t, hdr_refcount) + ), + TP_fast_assign( + __entry->hdr_dva_word[0] = ab->b_dva.dva_word[0]; + __entry->hdr_dva_word[1] = ab->b_dva.dva_word[1]; + __entry->hdr_birth = ab->b_birth; + __entry->hdr_flags = ab->b_flags; + __entry->hdr_bufcnt = ab->b_l1hdr.b_bufcnt; + __entry->hdr_psize = ab->b_psize; + __entry->hdr_lsize = ab->b_lsize; + __entry->hdr_spa = ab->b_spa; + __entry->hdr_state_type = ab->b_l1hdr.b_state->arcs_state; + __entry->hdr_access = ab->b_l1hdr.b_arc_access; + __entry->hdr_mru_hits = ab->b_l1hdr.b_mru_hits; + __entry->hdr_mru_ghost_hits = ab->b_l1hdr.b_mru_ghost_hits; + __entry->hdr_mfu_hits = ab->b_l1hdr.b_mfu_hits; + __entry->hdr_mfu_ghost_hits = ab->b_l1hdr.b_mfu_ghost_hits; + __entry->hdr_l2_hits = ab->b_l1hdr.b_l2_hits; + __entry->hdr_refcount = ab->b_l1hdr.b_refcnt.rc_count; + ), + TP_printk("hdr { dva 0x%llx:0x%llx birth %llu " + "flags 0x%x bufcnt %u type %u psize %u lsize %u spa %llu " + "state_type %u access %lu mru_hits %u mru_ghost_hits %u " + "mfu_hits %u mfu_ghost_hits %u l2_hits %u refcount %lli }", + __entry->hdr_dva_word[0], __entry->hdr_dva_word[1], + __entry->hdr_birth, __entry->hdr_flags, + __entry->hdr_bufcnt, __entry->hdr_type, __entry->hdr_psize, + __entry->hdr_lsize, __entry->hdr_spa, __entry->hdr_state_type, + __entry->hdr_access, __entry->hdr_mru_hits, + __entry->hdr_mru_ghost_hits, __entry->hdr_mfu_hits, + __entry->hdr_mfu_ghost_hits, __entry->hdr_l2_hits, + __entry->hdr_refcount) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_ARC_BUF_HDR_EVENT(name) \ +DEFINE_EVENT(zfs_arc_buf_hdr_class, name, \ + TP_PROTO(arc_buf_hdr_t *ab), \ + TP_ARGS(ab)) +/* END CSTYLED */ +DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__hit); +DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__evict); +DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__delete); +DEFINE_ARC_BUF_HDR_EVENT(zfs_new_state__mru); +DEFINE_ARC_BUF_HDR_EVENT(zfs_new_state__mfu); +DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__sync__wait__for__async); +DEFINE_ARC_BUF_HDR_EVENT(zfs_arc__demand__hit__predictive__prefetch); +DEFINE_ARC_BUF_HDR_EVENT(zfs_l2arc__hit); +DEFINE_ARC_BUF_HDR_EVENT(zfs_l2arc__miss); + +/* + * Generic support for two argument tracepoints of the form: + * + * DTRACE_PROBE2(..., + * vdev_t *, ..., + * zio_t *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_l2arc_rw_class, + TP_PROTO(vdev_t *vd, zio_t *zio), + TP_ARGS(vd, zio), + TP_STRUCT__entry( + __field(uint64_t, vdev_id) + __field(uint64_t, vdev_guid) + __field(uint64_t, vdev_state) + ZIO_TP_STRUCT_ENTRY + ), + TP_fast_assign( + __entry->vdev_id = vd->vdev_id; + __entry->vdev_guid = vd->vdev_guid; + __entry->vdev_state = vd->vdev_state; + ZIO_TP_FAST_ASSIGN + ), + TP_printk("vdev { id %llu guid %llu state %llu } " + ZIO_TP_PRINTK_FMT, __entry->vdev_id, __entry->vdev_guid, + __entry->vdev_state, ZIO_TP_PRINTK_ARGS) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_L2ARC_RW_EVENT(name) \ +DEFINE_EVENT(zfs_l2arc_rw_class, name, \ + TP_PROTO(vdev_t *vd, zio_t *zio), \ + TP_ARGS(vd, zio)) +/* END CSTYLED */ +DEFINE_L2ARC_RW_EVENT(zfs_l2arc__read); +DEFINE_L2ARC_RW_EVENT(zfs_l2arc__write); + + +/* + * Generic support for two argument tracepoints of the form: + * + * DTRACE_PROBE2(..., + * zio_t *, ..., + * l2arc_write_callback_t *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_l2arc_iodone_class, + TP_PROTO(zio_t *zio, l2arc_write_callback_t *cb), + TP_ARGS(zio, cb), + TP_STRUCT__entry(ZIO_TP_STRUCT_ENTRY), + TP_fast_assign(ZIO_TP_FAST_ASSIGN), + TP_printk(ZIO_TP_PRINTK_FMT, ZIO_TP_PRINTK_ARGS) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_L2ARC_IODONE_EVENT(name) \ +DEFINE_EVENT(zfs_l2arc_iodone_class, name, \ + TP_PROTO(zio_t *zio, l2arc_write_callback_t *cb), \ + TP_ARGS(zio, cb)) +/* END CSTYLED */ +DEFINE_L2ARC_IODONE_EVENT(zfs_l2arc__iodone); + + +/* + * Generic support for four argument tracepoints of the form: + * + * DTRACE_PROBE4(..., + * arc_buf_hdr_t *, ..., + * const blkptr_t *, + * uint64_t, + * const zbookmark_phys_t *); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_arc_miss_class, + TP_PROTO(arc_buf_hdr_t *hdr, + const blkptr_t *bp, uint64_t size, const zbookmark_phys_t *zb), + TP_ARGS(hdr, bp, size, zb), + TP_STRUCT__entry( + __array(uint64_t, hdr_dva_word, 2) + __field(uint64_t, hdr_birth) + __field(uint32_t, hdr_flags) + __field(uint32_t, hdr_bufcnt) + __field(arc_buf_contents_t, hdr_type) + __field(uint16_t, hdr_psize) + __field(uint16_t, hdr_lsize) + __field(uint64_t, hdr_spa) + __field(arc_state_type_t, hdr_state_type) + __field(clock_t, hdr_access) + __field(uint32_t, hdr_mru_hits) + __field(uint32_t, hdr_mru_ghost_hits) + __field(uint32_t, hdr_mfu_hits) + __field(uint32_t, hdr_mfu_ghost_hits) + __field(uint32_t, hdr_l2_hits) + __field(int64_t, hdr_refcount) + + __array(uint64_t, bp_dva0, 2) + __array(uint64_t, bp_dva1, 2) + __array(uint64_t, bp_dva2, 2) + __array(uint64_t, bp_cksum, 4) + + __field(uint64_t, bp_lsize) + + __field(uint64_t, zb_objset) + __field(uint64_t, zb_object) + __field(int64_t, zb_level) + __field(uint64_t, zb_blkid) + ), + TP_fast_assign( + __entry->hdr_dva_word[0] = hdr->b_dva.dva_word[0]; + __entry->hdr_dva_word[1] = hdr->b_dva.dva_word[1]; + __entry->hdr_birth = hdr->b_birth; + __entry->hdr_flags = hdr->b_flags; + __entry->hdr_bufcnt = hdr->b_l1hdr.b_bufcnt; + __entry->hdr_psize = hdr->b_psize; + __entry->hdr_lsize = hdr->b_lsize; + __entry->hdr_spa = hdr->b_spa; + __entry->hdr_state_type = hdr->b_l1hdr.b_state->arcs_state; + __entry->hdr_access = hdr->b_l1hdr.b_arc_access; + __entry->hdr_mru_hits = hdr->b_l1hdr.b_mru_hits; + __entry->hdr_mru_ghost_hits = hdr->b_l1hdr.b_mru_ghost_hits; + __entry->hdr_mfu_hits = hdr->b_l1hdr.b_mfu_hits; + __entry->hdr_mfu_ghost_hits = hdr->b_l1hdr.b_mfu_ghost_hits; + __entry->hdr_l2_hits = hdr->b_l1hdr.b_l2_hits; + __entry->hdr_refcount = hdr->b_l1hdr.b_refcnt.rc_count; + + __entry->bp_dva0[0] = bp->blk_dva[0].dva_word[0]; + __entry->bp_dva0[1] = bp->blk_dva[0].dva_word[1]; + __entry->bp_dva1[0] = bp->blk_dva[1].dva_word[0]; + __entry->bp_dva1[1] = bp->blk_dva[1].dva_word[1]; + __entry->bp_dva2[0] = bp->blk_dva[2].dva_word[0]; + __entry->bp_dva2[1] = bp->blk_dva[2].dva_word[1]; + __entry->bp_cksum[0] = bp->blk_cksum.zc_word[0]; + __entry->bp_cksum[1] = bp->blk_cksum.zc_word[1]; + __entry->bp_cksum[2] = bp->blk_cksum.zc_word[2]; + __entry->bp_cksum[3] = bp->blk_cksum.zc_word[3]; + + __entry->bp_lsize = size; + + __entry->zb_objset = zb->zb_objset; + __entry->zb_object = zb->zb_object; + __entry->zb_level = zb->zb_level; + __entry->zb_blkid = zb->zb_blkid; + ), + TP_printk("hdr { dva 0x%llx:0x%llx birth %llu " + "flags 0x%x bufcnt %u psize %u lsize %u spa %llu state_type %u " + "access %lu mru_hits %u mru_ghost_hits %u mfu_hits %u " + "mfu_ghost_hits %u l2_hits %u refcount %lli } " + "bp { dva0 0x%llx:0x%llx dva1 0x%llx:0x%llx dva2 " + "0x%llx:0x%llx cksum 0x%llx:0x%llx:0x%llx:0x%llx " + "lsize %llu } zb { objset %llu object %llu level %lli " + "blkid %llu }", + __entry->hdr_dva_word[0], __entry->hdr_dva_word[1], + __entry->hdr_birth, __entry->hdr_flags, + __entry->hdr_bufcnt, __entry->hdr_psize, __entry->hdr_lsize, + __entry->hdr_spa, __entry->hdr_state_type, __entry->hdr_access, + __entry->hdr_mru_hits, __entry->hdr_mru_ghost_hits, + __entry->hdr_mfu_hits, __entry->hdr_mfu_ghost_hits, + __entry->hdr_l2_hits, __entry->hdr_refcount, + __entry->bp_dva0[0], __entry->bp_dva0[1], + __entry->bp_dva1[0], __entry->bp_dva1[1], + __entry->bp_dva2[0], __entry->bp_dva2[1], + __entry->bp_cksum[0], __entry->bp_cksum[1], + __entry->bp_cksum[2], __entry->bp_cksum[3], + __entry->bp_lsize, __entry->zb_objset, __entry->zb_object, + __entry->zb_level, __entry->zb_blkid) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_ARC_MISS_EVENT(name) \ +DEFINE_EVENT(zfs_arc_miss_class, name, \ + TP_PROTO(arc_buf_hdr_t *hdr, \ + const blkptr_t *bp, uint64_t size, const zbookmark_phys_t *zb), \ + TP_ARGS(hdr, bp, size, zb)) +/* END CSTYLED */ +DEFINE_ARC_MISS_EVENT(zfs_arc__miss); + +/* + * Generic support for four argument tracepoints of the form: + * + * DTRACE_PROBE4(..., + * l2arc_dev_t *, ..., + * list_t *, ..., + * uint64_t, ..., + * boolean_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_l2arc_evict_class, + TP_PROTO(l2arc_dev_t *dev, + list_t *buflist, uint64_t taddr, boolean_t all), + TP_ARGS(dev, buflist, taddr, all), + TP_STRUCT__entry( + __field(uint64_t, vdev_id) + __field(uint64_t, vdev_guid) + __field(uint64_t, vdev_state) + + __field(uint64_t, l2ad_hand) + __field(uint64_t, l2ad_start) + __field(uint64_t, l2ad_end) + __field(boolean_t, l2ad_first) + __field(boolean_t, l2ad_writing) + + __field(uint64_t, taddr) + __field(boolean_t, all) + ), + TP_fast_assign( + __entry->vdev_id = dev->l2ad_vdev->vdev_id; + __entry->vdev_guid = dev->l2ad_vdev->vdev_guid; + __entry->vdev_state = dev->l2ad_vdev->vdev_state; + + __entry->l2ad_hand = dev->l2ad_hand; + __entry->l2ad_start = dev->l2ad_start; + __entry->l2ad_end = dev->l2ad_end; + __entry->l2ad_first = dev->l2ad_first; + __entry->l2ad_writing = dev->l2ad_writing; + + __entry->taddr = taddr; + __entry->all = all; + ), + TP_printk("l2ad { vdev { id %llu guid %llu state %llu } " + "hand %llu start %llu end %llu " + "first %d writing %d } taddr %llu all %d", + __entry->vdev_id, __entry->vdev_guid, __entry->vdev_state, + __entry->l2ad_hand, __entry->l2ad_start, + __entry->l2ad_end, __entry->l2ad_first, __entry->l2ad_writing, + __entry->taddr, __entry->all) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_L2ARC_EVICT_EVENT(name) \ +DEFINE_EVENT(zfs_l2arc_evict_class, name, \ + TP_PROTO(l2arc_dev_t *dev, \ + list_t *buflist, uint64_t taddr, boolean_t all), \ + TP_ARGS(dev, buflist, taddr, all)) +/* END CSTYLED */ +DEFINE_L2ARC_EVICT_EVENT(zfs_l2arc__evict); + +#endif /* _TRACE_ARC_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_arc +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_common.h +++ linux-aws-4.15.0/zfs/include/sys/trace_common.h @@ -0,0 +1,112 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * This file contains commonly used trace macros. Feel free to add and use + * them in your tracepoint headers. + */ + +#ifndef _SYS_TRACE_COMMON_H +#define _SYS_TRACE_COMMON_H +#include + +/* ZIO macros */ +#define ZIO_TP_STRUCT_ENTRY \ + __field(zio_type_t, zio_type) \ + __field(int, zio_cmd) \ + __field(zio_priority_t, zio_priority) \ + __field(uint64_t, zio_size) \ + __field(uint64_t, zio_orig_size) \ + __field(uint64_t, zio_offset) \ + __field(hrtime_t, zio_timestamp) \ + __field(hrtime_t, zio_delta) \ + __field(uint64_t, zio_delay) \ + __field(enum zio_flag, zio_flags) \ + __field(enum zio_stage, zio_stage) \ + __field(enum zio_stage, zio_pipeline) \ + __field(enum zio_flag, zio_orig_flags) \ + __field(enum zio_stage, zio_orig_stage) \ + __field(enum zio_stage, zio_orig_pipeline) \ + __field(uint8_t, zio_reexecute) \ + __field(uint64_t, zio_txg) \ + __field(int, zio_error) \ + __field(uint64_t, zio_ena) \ + \ + __field(enum zio_checksum, zp_checksum) \ + __field(enum zio_compress, zp_compress) \ + __field(dmu_object_type_t, zp_type) \ + __field(uint8_t, zp_level) \ + __field(uint8_t, zp_copies) \ + __field(boolean_t, zp_dedup) \ + __field(boolean_t, zp_dedup_verify) \ + __field(boolean_t, zp_nopwrite) + +#define ZIO_TP_FAST_ASSIGN \ + __entry->zio_type = zio->io_type; \ + __entry->zio_cmd = zio->io_cmd; \ + __entry->zio_priority = zio->io_priority; \ + __entry->zio_size = zio->io_size; \ + __entry->zio_orig_size = zio->io_orig_size; \ + __entry->zio_offset = zio->io_offset; \ + __entry->zio_timestamp = zio->io_timestamp; \ + __entry->zio_delta = zio->io_delta; \ + __entry->zio_delay = zio->io_delay; \ + __entry->zio_flags = zio->io_flags; \ + __entry->zio_stage = zio->io_stage; \ + __entry->zio_pipeline = zio->io_pipeline; \ + __entry->zio_orig_flags = zio->io_orig_flags; \ + __entry->zio_orig_stage = zio->io_orig_stage; \ + __entry->zio_orig_pipeline = zio->io_orig_pipeline; \ + __entry->zio_reexecute = zio->io_reexecute; \ + __entry->zio_txg = zio->io_txg; \ + __entry->zio_error = zio->io_error; \ + __entry->zio_ena = zio->io_ena; \ + \ + __entry->zp_checksum = zio->io_prop.zp_checksum; \ + __entry->zp_compress = zio->io_prop.zp_compress; \ + __entry->zp_type = zio->io_prop.zp_type; \ + __entry->zp_level = zio->io_prop.zp_level; \ + __entry->zp_copies = zio->io_prop.zp_copies; \ + __entry->zp_dedup = zio->io_prop.zp_dedup; \ + __entry->zp_nopwrite = zio->io_prop.zp_nopwrite; \ + __entry->zp_dedup_verify = zio->io_prop.zp_dedup_verify; + +#define ZIO_TP_PRINTK_FMT \ + "zio { type %u cmd %i prio %u size %llu orig_size %llu " \ + "offset %llu timestamp %llu delta %llu delay %llu " \ + "flags 0x%x stage 0x%x pipeline 0x%x orig_flags 0x%x " \ + "orig_stage 0x%x orig_pipeline 0x%x reexecute %u " \ + "txg %llu error %d ena %llu prop { checksum %u compress %u " \ + "type %u level %u copies %u dedup %u dedup_verify %u nopwrite %u } }" + +#define ZIO_TP_PRINTK_ARGS \ + __entry->zio_type, __entry->zio_cmd, __entry->zio_priority, \ + __entry->zio_size, __entry->zio_orig_size, __entry->zio_offset, \ + __entry->zio_timestamp, __entry->zio_delta, __entry->zio_delay, \ + __entry->zio_flags, __entry->zio_stage, __entry->zio_pipeline, \ + __entry->zio_orig_flags, __entry->zio_orig_stage, \ + __entry->zio_orig_pipeline, __entry->zio_reexecute, \ + __entry->zio_txg, __entry->zio_error, __entry->zio_ena, \ + __entry->zp_checksum, __entry->zp_compress, __entry->zp_type, \ + __entry->zp_level, __entry->zp_copies, __entry->zp_dedup, \ + __entry->zp_dedup_verify, __entry->zp_nopwrite + +#endif /* _SYS_TRACE_COMMON_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_dbgmsg.h +++ linux-aws-4.15.0/zfs/include/sys/trace_dbgmsg.h @@ -0,0 +1,65 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* Do not include this file directly. Please use instead. */ +#ifndef _SYS_TRACE_DBGMSG_INDIRECT +#error "trace_dbgmsg.h included directly" +#endif + +/* + * This file defines tracepoint events for use by the dbgmsg(), + * dprintf(), and SET_ERROR() interfaces. These are grouped here because + * they all provide a way to store simple messages in the debug log (as + * opposed to events used by the DTRACE_PROBE interfaces which typically + * dump structured data). + * + * This header is included inside the trace.h multiple inclusion guard, + * and it is guarded above against direct inclusion, so it and need not + * be guarded separately. + */ + +/* + * Generic support for one argument tracepoints of the form: + * + * DTRACE_PROBE1(..., + * const char *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_dprintf_class, + TP_PROTO(const char *msg), + TP_ARGS(msg), + TP_STRUCT__entry( + __string(msg, msg) + ), + TP_fast_assign( + __assign_str(msg, msg); + ), + TP_printk("%s", __get_str(msg)) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_DPRINTF_EVENT(name) \ +DEFINE_EVENT(zfs_dprintf_class, name, \ + TP_PROTO(const char *msg), \ + TP_ARGS(msg)) +/* END CSTYLED */ +DEFINE_DPRINTF_EVENT(zfs_zfs__dprintf); --- linux-aws-4.15.0.orig/zfs/include/sys/trace_dbuf.h +++ linux-aws-4.15.0/zfs/include/sys/trace_dbuf.h @@ -0,0 +1,145 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_dbuf + +#if !defined(_TRACE_DBUF_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DBUF_H + +#include +#include + +#ifndef TRACE_DBUF_MSG_MAX +#define TRACE_DBUF_MSG_MAX 512 +#endif + +/* + * Generic support for two argument tracepoints of the form: + * + * DTRACE_PROBE2(..., + * dmu_buf_impl_t *, ..., + * zio_t *, ...); + */ + +#define DBUF_TP_STRUCT_ENTRY \ + __dynamic_array(char, os_spa, TRACE_DBUF_MSG_MAX) \ + __field(uint64_t, ds_object) \ + __field(uint64_t, db_object) \ + __field(uint64_t, db_level) \ + __field(uint64_t, db_blkid) \ + __field(uint64_t, db_offset) \ + __field(uint64_t, db_size) \ + __field(uint64_t, db_state) \ + __field(int64_t, db_holds) \ + __dynamic_array(char, msg, TRACE_DBUF_MSG_MAX) + +#define DBUF_TP_FAST_ASSIGN \ + if (db != NULL) { \ + __assign_str(os_spa, \ + spa_name(DB_DNODE(db)->dn_objset->os_spa)); \ + \ + __entry->ds_object = db->db_objset->os_dsl_dataset ? \ + db->db_objset->os_dsl_dataset->ds_object : 0; \ + \ + __entry->db_object = db->db.db_object; \ + __entry->db_level = db->db_level; \ + __entry->db_blkid = db->db_blkid; \ + __entry->db_offset = db->db.db_offset; \ + __entry->db_size = db->db.db_size; \ + __entry->db_state = db->db_state; \ + __entry->db_holds = refcount_count(&db->db_holds); \ + snprintf(__get_str(msg), TRACE_DBUF_MSG_MAX, \ + DBUF_TP_PRINTK_FMT, DBUF_TP_PRINTK_ARGS); \ + } else { \ + __assign_str(os_spa, "NULL") \ + __entry->ds_object = 0; \ + __entry->db_object = 0; \ + __entry->db_level = 0; \ + __entry->db_blkid = 0; \ + __entry->db_offset = 0; \ + __entry->db_size = 0; \ + __entry->db_state = 0; \ + __entry->db_holds = 0; \ + snprintf(__get_str(msg), TRACE_DBUF_MSG_MAX, \ + "dbuf { NULL }"); \ + } + +#define DBUF_TP_PRINTK_FMT \ + "dbuf { spa \"%s\" objset %llu object %llu level %llu " \ + "blkid %llu offset %llu size %llu state %llu holds %lld }" + +#define DBUF_TP_PRINTK_ARGS \ + __get_str(os_spa), __entry->ds_object, \ + __entry->db_object, __entry->db_level, \ + __entry->db_blkid, __entry->db_offset, \ + __entry->db_size, __entry->db_state, __entry->db_holds + +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_dbuf_class, + TP_PROTO(dmu_buf_impl_t *db, zio_t *zio), + TP_ARGS(db, zio), + TP_STRUCT__entry(DBUF_TP_STRUCT_ENTRY), + TP_fast_assign(DBUF_TP_FAST_ASSIGN), + TP_printk("%s", __get_str(msg)) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_DBUF_EVENT(name) \ +DEFINE_EVENT(zfs_dbuf_class, name, \ + TP_PROTO(dmu_buf_impl_t *db, zio_t *zio), \ + TP_ARGS(db, zio)) +/* END CSTYLED */ +DEFINE_DBUF_EVENT(zfs_blocked__read); + +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_dbuf_evict_one_class, + TP_PROTO(dmu_buf_impl_t *db, multilist_sublist_t *mls), + TP_ARGS(db, mls), + TP_STRUCT__entry(DBUF_TP_STRUCT_ENTRY), + TP_fast_assign(DBUF_TP_FAST_ASSIGN), + TP_printk("%s", __get_str(msg)) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_DBUF_EVICT_ONE_EVENT(name) \ +DEFINE_EVENT(zfs_dbuf_evict_one_class, name, \ + TP_PROTO(dmu_buf_impl_t *db, multilist_sublist_t *mls), \ + TP_ARGS(db, mls)) +/* END CSTYLED */ +DEFINE_DBUF_EVICT_ONE_EVENT(zfs_dbuf__evict__one); + +#endif /* _TRACE_DBUF_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_dbuf +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_dmu.h +++ linux-aws-4.15.0/zfs/include/sys/trace_dmu.h @@ -0,0 +1,128 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_dmu + +#if !defined(_TRACE_DMU_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DMU_H + +#include +#include + +/* + * Generic support for three argument tracepoints of the form: + * + * DTRACE_PROBE3(..., + * dmu_tx_t *, ..., + * uint64_t, ..., + * uint64_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_delay_mintime_class, + TP_PROTO(dmu_tx_t *tx, uint64_t dirty, uint64_t min_tx_time), + TP_ARGS(tx, dirty, min_tx_time), + TP_STRUCT__entry( + __field(uint64_t, tx_txg) + __field(uint64_t, tx_lastsnap_txg) + __field(uint64_t, tx_lasttried_txg) + __field(boolean_t, tx_anyobj) + __field(boolean_t, tx_waited) + __field(hrtime_t, tx_start) + __field(boolean_t, tx_wait_dirty) + __field(int, tx_err) + __field(uint64_t, min_tx_time) + __field(uint64_t, dirty) + ), + TP_fast_assign( + __entry->tx_txg = tx->tx_txg; + __entry->tx_lastsnap_txg = tx->tx_lastsnap_txg; + __entry->tx_lasttried_txg = tx->tx_lasttried_txg; + __entry->tx_anyobj = tx->tx_anyobj; + __entry->tx_waited = tx->tx_waited; + __entry->tx_start = tx->tx_start; + __entry->tx_wait_dirty = tx->tx_wait_dirty; + __entry->tx_err = tx->tx_err; + __entry->dirty = dirty; + __entry->min_tx_time = min_tx_time; + ), + TP_printk("tx { txg %llu lastsnap_txg %llu tx_lasttried_txg %llu " + "anyobj %d waited %d start %llu wait_dirty %d err %i " + "} dirty %llu min_tx_time %llu", + __entry->tx_txg, __entry->tx_lastsnap_txg, + __entry->tx_lasttried_txg, __entry->tx_anyobj, __entry->tx_waited, + __entry->tx_start, __entry->tx_wait_dirty, __entry->tx_err, + __entry->dirty, __entry->min_tx_time) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_DELAY_MINTIME_EVENT(name) \ +DEFINE_EVENT(zfs_delay_mintime_class, name, \ + TP_PROTO(dmu_tx_t *tx, uint64_t dirty, uint64_t min_tx_time), \ + TP_ARGS(tx, dirty, min_tx_time)) +/* END CSTYLED */ +DEFINE_DELAY_MINTIME_EVENT(zfs_delay__mintime); + +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_free_long_range_class, + TP_PROTO(uint64_t long_free_dirty_all_txgs, uint64_t chunk_len, \ + uint64_t txg), + TP_ARGS(long_free_dirty_all_txgs, chunk_len, txg), + TP_STRUCT__entry( + __field(uint64_t, long_free_dirty_all_txgs) + __field(uint64_t, chunk_len) + __field(uint64_t, txg) + ), + TP_fast_assign( + __entry->long_free_dirty_all_txgs = long_free_dirty_all_txgs; + __entry->chunk_len = chunk_len; + __entry->txg = txg; + ), + TP_printk("long_free_dirty_all_txgs %llu chunk_len %llu txg %llu", + __entry->long_free_dirty_all_txgs, + __entry->chunk_len, __entry->txg) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_FREE_LONG_RANGE_EVENT(name) \ +DEFINE_EVENT(zfs_free_long_range_class, name, \ + TP_PROTO(uint64_t long_free_dirty_all_txgs, \ + uint64_t chunk_len, uint64_t txg), \ + TP_ARGS(long_free_dirty_all_txgs, chunk_len, txg)) +/* END CSTYLED */ +DEFINE_FREE_LONG_RANGE_EVENT(zfs_free__long__range); + +#endif /* _TRACE_DMU_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_dmu +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_dnode.h +++ linux-aws-4.15.0/zfs/include/sys/trace_dnode.h @@ -0,0 +1,123 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_dnode + +#if !defined(_TRACE_DNODE_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DNODE_H + +#include +#include + +/* + * Generic support for three argument tracepoints of the form: + * + * DTRACE_PROBE3(..., + * dnode_t *, ..., + * int64_t, ..., + * uint32_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_dnode_move_class, + TP_PROTO(dnode_t *dn, int64_t refcount, uint32_t dbufs), + TP_ARGS(dn, refcount, dbufs), + TP_STRUCT__entry( + __field(uint64_t, dn_object) + __field(dmu_object_type_t, dn_type) + __field(uint16_t, dn_bonuslen) + __field(uint8_t, dn_bonustype) + __field(uint8_t, dn_nblkptr) + __field(uint8_t, dn_checksum) + __field(uint8_t, dn_compress) + __field(uint8_t, dn_nlevels) + __field(uint8_t, dn_indblkshift) + __field(uint8_t, dn_datablkshift) + __field(uint8_t, dn_moved) + __field(uint16_t, dn_datablkszsec) + __field(uint32_t, dn_datablksz) + __field(uint64_t, dn_maxblkid) + __field(int64_t, dn_tx_holds) + __field(int64_t, dn_holds) + __field(boolean_t, dn_have_spill) + + __field(int64_t, refcount) + __field(uint32_t, dbufs) + ), + TP_fast_assign( + __entry->dn_object = dn->dn_object; + __entry->dn_type = dn->dn_type; + __entry->dn_bonuslen = dn->dn_bonuslen; + __entry->dn_bonustype = dn->dn_bonustype; + __entry->dn_nblkptr = dn->dn_nblkptr; + __entry->dn_checksum = dn->dn_checksum; + __entry->dn_compress = dn->dn_compress; + __entry->dn_nlevels = dn->dn_nlevels; + __entry->dn_indblkshift = dn->dn_indblkshift; + __entry->dn_datablkshift = dn->dn_datablkshift; + __entry->dn_moved = dn->dn_moved; + __entry->dn_datablkszsec = dn->dn_datablkszsec; + __entry->dn_datablksz = dn->dn_datablksz; + __entry->dn_maxblkid = dn->dn_maxblkid; + __entry->dn_tx_holds = dn->dn_tx_holds.rc_count; + __entry->dn_holds = dn->dn_holds.rc_count; + __entry->dn_have_spill = dn->dn_have_spill; + + __entry->refcount = refcount; + __entry->dbufs = dbufs; + ), + TP_printk("dn { object %llu type %d bonuslen %u bonustype %u " + "nblkptr %u checksum %u compress %u nlevels %u indblkshift %u " + "datablkshift %u moved %u datablkszsec %u datablksz %u " + "maxblkid %llu tx_holds %lli holds %lli have_spill %d } " + "refcount %lli dbufs %u", + __entry->dn_object, __entry->dn_type, __entry->dn_bonuslen, + __entry->dn_bonustype, __entry->dn_nblkptr, __entry->dn_checksum, + __entry->dn_compress, __entry->dn_nlevels, __entry->dn_indblkshift, + __entry->dn_datablkshift, __entry->dn_moved, + __entry->dn_datablkszsec, __entry->dn_datablksz, + __entry->dn_maxblkid, __entry->dn_tx_holds, __entry->dn_holds, + __entry->dn_have_spill, __entry->refcount, __entry->dbufs) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_DNODE_MOVE_EVENT(name) \ +DEFINE_EVENT(zfs_dnode_move_class, name, \ + TP_PROTO(dnode_t *dn, int64_t refcount, uint32_t dbufs), \ + TP_ARGS(dn, refcount, dbufs)) +/* END CSTYLED */ +DEFINE_DNODE_MOVE_EVENT(zfs_dnode__move); + +#endif /* _TRACE_DNODE_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_dnode +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_multilist.h +++ linux-aws-4.15.0/zfs/include/sys/trace_multilist.h @@ -0,0 +1,82 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_multilist + +#if !defined(_TRACE_MULTILIST_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_MULTILIST_H + +#include +#include + +/* + * Generic support for three argument tracepoints of the form: + * + * DTRACE_PROBE3(..., + * multilist_t *, ..., + * unsigned int, ..., + * void *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_multilist_insert_remove_class, + TP_PROTO(multilist_t *ml, unsigned sublist_idx, void *obj), + TP_ARGS(ml, sublist_idx, obj), + TP_STRUCT__entry( + __field(size_t, ml_offset) + __field(uint64_t, ml_num_sublists) + + __field(unsigned int, sublist_idx) + ), + TP_fast_assign( + __entry->ml_offset = ml->ml_offset; + __entry->ml_num_sublists = ml->ml_num_sublists; + + __entry->sublist_idx = sublist_idx; + ), + TP_printk("ml { offset %ld numsublists %llu sublistidx %u } ", + __entry->ml_offset, __entry->ml_num_sublists, __entry->sublist_idx) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_MULTILIST_INSERT_REMOVE_EVENT(name) \ +DEFINE_EVENT(zfs_multilist_insert_remove_class, name, \ + TP_PROTO(multilist_t *ml, unsigned int sublist_idx, void *obj), \ + TP_ARGS(ml, sublist_idx, obj)) +/* END CSTYLED */ +DEFINE_MULTILIST_INSERT_REMOVE_EVENT(zfs_multilist__insert); +DEFINE_MULTILIST_INSERT_REMOVE_EVENT(zfs_multilist__remove); + +#endif /* _TRACE_MULTILIST_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_multilist +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_txg.h +++ linux-aws-4.15.0/zfs/include/sys/trace_txg.h @@ -0,0 +1,78 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_txg + +#if !defined(_TRACE_TXG_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_TXG_H + +#include +#include + +/* + * Generic support for two argument tracepoints of the form: + * + * DTRACE_PROBE2(..., + * dsl_pool_t *, ..., + * uint64_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_txg_class, + TP_PROTO(dsl_pool_t *dp, uint64_t txg), + TP_ARGS(dp, txg), + TP_STRUCT__entry( + __field(uint64_t, txg) + ), + TP_fast_assign( + __entry->txg = txg; + ), + TP_printk("txg %llu", __entry->txg) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_TXG_EVENT(name) \ +DEFINE_EVENT(zfs_txg_class, name, \ + TP_PROTO(dsl_pool_t *dp, uint64_t txg), \ + TP_ARGS(dp, txg)) +/* END CSTYLED */ +DEFINE_TXG_EVENT(zfs_dsl_pool_sync__done); +DEFINE_TXG_EVENT(zfs_txg__quiescing); +DEFINE_TXG_EVENT(zfs_txg__opened); +DEFINE_TXG_EVENT(zfs_txg__syncing); +DEFINE_TXG_EVENT(zfs_txg__synced); +DEFINE_TXG_EVENT(zfs_txg__quiesced); + +#endif /* _TRACE_TXG_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_txg +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_zil.h +++ linux-aws-4.15.0/zfs/include/sys/trace_zil.h @@ -0,0 +1,129 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_zil + +#if !defined(_TRACE_ZIL_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ZIL_H + +#include +#include + +/* + * Generic support for one argument tracepoints of the form: + * + * DTRACE_PROBE1(..., + * zilog_t *, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_zil_class, + TP_PROTO(zilog_t *zilog), + TP_ARGS(zilog), + TP_STRUCT__entry( + __field(uint64_t, zl_lr_seq) + __field(uint64_t, zl_commit_lr_seq) + __field(uint64_t, zl_destroy_txg) + __field(uint64_t, zl_replaying_seq) + __field(uint32_t, zl_suspend) + __field(uint8_t, zl_suspending) + __field(uint8_t, zl_keep_first) + __field(uint8_t, zl_replay) + __field(uint8_t, zl_stop_sync) + __field(uint8_t, zl_writer) + __field(uint8_t, zl_logbias) + __field(uint8_t, zl_sync) + __field(int, zl_parse_error) + __field(uint64_t, zl_parse_blk_seq) + __field(uint64_t, zl_parse_lr_seq) + __field(uint64_t, zl_parse_blk_count) + __field(uint64_t, zl_parse_lr_count) + __field(uint64_t, zl_next_batch) + __field(uint64_t, zl_com_batch) + __field(uint64_t, zl_cur_used) + __field(clock_t, zl_replay_time) + __field(uint64_t, zl_replay_blks) + ), + TP_fast_assign( + __entry->zl_lr_seq = zilog->zl_lr_seq; + __entry->zl_commit_lr_seq = zilog->zl_commit_lr_seq; + __entry->zl_destroy_txg = zilog->zl_destroy_txg; + __entry->zl_replaying_seq = zilog->zl_replaying_seq; + __entry->zl_suspend = zilog->zl_suspend; + __entry->zl_suspending = zilog->zl_suspending; + __entry->zl_keep_first = zilog->zl_keep_first; + __entry->zl_replay = zilog->zl_replay; + __entry->zl_stop_sync = zilog->zl_stop_sync; + __entry->zl_writer = zilog->zl_writer; + __entry->zl_logbias = zilog->zl_logbias; + __entry->zl_sync = zilog->zl_sync; + __entry->zl_parse_error = zilog->zl_parse_error; + __entry->zl_parse_blk_seq = zilog->zl_parse_blk_seq; + __entry->zl_parse_lr_seq = zilog->zl_parse_lr_seq; + __entry->zl_parse_blk_count = zilog->zl_parse_blk_count; + __entry->zl_parse_lr_count = zilog->zl_parse_lr_count; + __entry->zl_next_batch = zilog->zl_next_batch; + __entry->zl_com_batch = zilog->zl_com_batch; + __entry->zl_cur_used = zilog->zl_cur_used; + __entry->zl_replay_time = zilog->zl_replay_time; + __entry->zl_replay_blks = zilog->zl_replay_blks; + ), + TP_printk("zl { lr_seq %llu commit_lr_seq %llu destroy_txg %llu " + "replaying_seq %llu suspend %u suspending %u keep_first %u " + "replay %u stop_sync %u writer %u logbias %u sync %u " + "parse_error %u parse_blk_seq %llu parse_lr_seq %llu " + "parse_blk_count %llu parse_lr_count %llu next_batch %llu " + "com_batch %llu cur_used %llu replay_time %lu replay_blks %llu }", + __entry->zl_lr_seq, __entry->zl_commit_lr_seq, + __entry->zl_destroy_txg, __entry->zl_replaying_seq, + __entry->zl_suspend, __entry->zl_suspending, __entry->zl_keep_first, + __entry->zl_replay, __entry->zl_stop_sync, __entry->zl_writer, + __entry->zl_logbias, __entry->zl_sync, __entry->zl_parse_error, + __entry->zl_parse_blk_seq, __entry->zl_parse_lr_seq, + __entry->zl_parse_blk_count, __entry->zl_parse_lr_count, + __entry->zl_next_batch, __entry->zl_com_batch, __entry->zl_cur_used, + __entry->zl_replay_time, __entry->zl_replay_blks) +); +/* END CSTYLED */ + +/* BEGIN CSTYLED */ +#define DEFINE_ZIL_EVENT(name) \ +DEFINE_EVENT(zfs_zil_class, name, \ + TP_PROTO(zilog_t *zilog), \ + TP_ARGS(zilog)) +DEFINE_ZIL_EVENT(zfs_zil__cw1); +DEFINE_ZIL_EVENT(zfs_zil__cw2); +/* END CSTYLED */ + +#endif /* _TRACE_ZIL_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_zil +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_zio.h +++ linux-aws-4.15.0/zfs/include/sys/trace_zio.h @@ -0,0 +1,89 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#include + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_zio + +#if !defined(_TRACE_ZIO_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ZIO_H + +#include +#include +#include /* For ZIO macros */ + +/* BEGIN CSTYLED */ +TRACE_EVENT(zfs_zio__delay__miss, + TP_PROTO(zio_t *zio, hrtime_t now), + TP_ARGS(zio, now), + TP_STRUCT__entry( + ZIO_TP_STRUCT_ENTRY + __field(hrtime_t, now) + ), + TP_fast_assign( + ZIO_TP_FAST_ASSIGN + __entry->now = now; + ), + TP_printk("now %llu " ZIO_TP_PRINTK_FMT, __entry->now, + ZIO_TP_PRINTK_ARGS) +); + +TRACE_EVENT(zfs_zio__delay__hit, + TP_PROTO(zio_t *zio, hrtime_t now, hrtime_t diff), + TP_ARGS(zio, now, diff), + TP_STRUCT__entry( + ZIO_TP_STRUCT_ENTRY + __field(hrtime_t, now) + __field(hrtime_t, diff) + ), + TP_fast_assign( + ZIO_TP_FAST_ASSIGN + __entry->now = now; + __entry->diff = diff; + ), + TP_printk("now %llu diff %llu " ZIO_TP_PRINTK_FMT, __entry->now, + __entry->diff, ZIO_TP_PRINTK_ARGS) +); + +TRACE_EVENT(zfs_zio__delay__skip, + TP_PROTO(zio_t *zio), + TP_ARGS(zio), + TP_STRUCT__entry(ZIO_TP_STRUCT_ENTRY), + TP_fast_assign(ZIO_TP_FAST_ASSIGN), + TP_printk(ZIO_TP_PRINTK_FMT, ZIO_TP_PRINTK_ARGS) +); +/* END CSTYLED */ + +#endif /* _TRACE_ZIO_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_zio +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/trace_zrlock.h +++ linux-aws-4.15.0/zfs/include/sys/trace_zrlock.h @@ -0,0 +1,88 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_DECLARE_EVENT_CLASS) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM zfs + +#undef TRACE_SYSTEM_VAR +#define TRACE_SYSTEM_VAR zfs_zrlock + +#if !defined(_TRACE_ZRLOCK_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_ZRLOCK_H + +#include +#include + +/* + * Generic support for two argument tracepoints of the form: + * + * DTRACE_PROBE2(..., + * zrlock_t *, ..., + * uint32_t, ...); + */ +/* BEGIN CSTYLED */ +DECLARE_EVENT_CLASS(zfs_zrlock_class, + TP_PROTO(zrlock_t *zrl, uint32_t n), + TP_ARGS(zrl, n), + TP_STRUCT__entry( + __field(int32_t, refcount) +#ifdef ZFS_DEBUG + __field(pid_t, owner_pid) + __string(caller, zrl->zr_caller) +#endif + __field(uint32_t, n) + ), + TP_fast_assign( + __entry->refcount = zrl->zr_refcount; +#ifdef ZFS_DEBUG + __entry->owner_pid = zrl->zr_owner ? zrl->zr_owner->pid : 0; + __assign_str(caller, zrl->zr_caller); +#endif + __entry->n = n; + ), +#ifdef ZFS_DEBUG + TP_printk("zrl { refcount %d owner_pid %d caller %s } n %u", + __entry->refcount, __entry->owner_pid, __get_str(caller), + __entry->n) +#else + TP_printk("zrl { refcount %d } n %u", + __entry->refcount, __entry->n) +#endif +); +/* END_CSTYLED */ + +#define DEFINE_ZRLOCK_EVENT(name) \ +DEFINE_EVENT(zfs_zrlock_class, name, \ + TP_PROTO(zrlock_t *zrl, uint32_t n), \ + TP_ARGS(zrl, n)) +DEFINE_ZRLOCK_EVENT(zfs_zrlock__reentry); + +#endif /* _TRACE_ZRLOCK_H */ + +#undef TRACE_INCLUDE_PATH +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_PATH sys +#define TRACE_INCLUDE_FILE trace_zrlock +#include + +#endif /* _KERNEL && HAVE_DECLARE_EVENT_CLASS */ --- linux-aws-4.15.0.orig/zfs/include/sys/txg.h +++ linux-aws-4.15.0/zfs/include/sys/txg.h @@ -0,0 +1,140 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +#ifndef _SYS_TXG_H +#define _SYS_TXG_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define TXG_CONCURRENT_STATES 3 /* open, quiescing, syncing */ +#define TXG_SIZE 4 /* next power of 2 */ +#define TXG_MASK (TXG_SIZE - 1) /* mask for size */ +#define TXG_INITIAL TXG_SIZE /* initial txg */ +#define TXG_IDX (txg & TXG_MASK) + +/* Number of txgs worth of frees we defer adding to in-core spacemaps */ +#define TXG_DEFER_SIZE 2 + +typedef struct tx_cpu tx_cpu_t; + +typedef struct txg_handle { + tx_cpu_t *th_cpu; + uint64_t th_txg; +} txg_handle_t; + +typedef struct txg_node { + struct txg_node *tn_next[TXG_SIZE]; + uint8_t tn_member[TXG_SIZE]; +} txg_node_t; + +typedef struct txg_list { + kmutex_t tl_lock; + size_t tl_offset; + spa_t *tl_spa; + txg_node_t *tl_head[TXG_SIZE]; +} txg_list_t; + +struct dsl_pool; + +extern void txg_init(struct dsl_pool *dp, uint64_t txg); +extern void txg_fini(struct dsl_pool *dp); +extern void txg_sync_start(struct dsl_pool *dp); +extern void txg_sync_stop(struct dsl_pool *dp); +extern uint64_t txg_hold_open(struct dsl_pool *dp, txg_handle_t *txghp); +extern void txg_rele_to_quiesce(txg_handle_t *txghp); +extern void txg_rele_to_sync(txg_handle_t *txghp); +extern void txg_register_callbacks(txg_handle_t *txghp, list_t *tx_callbacks); + +extern void txg_delay(struct dsl_pool *dp, uint64_t txg, hrtime_t delta, + hrtime_t resolution); +extern void txg_kick(struct dsl_pool *dp); + +/* + * Wait until the given transaction group has finished syncing. + * Try to make this happen as soon as possible (eg. kick off any + * necessary syncs immediately). If txg==0, wait for the currently open + * txg to finish syncing. + */ +extern void txg_wait_synced(struct dsl_pool *dp, uint64_t txg); + +/* + * Wait until the given transaction group, or one after it, is + * the open transaction group. Try to make this happen as soon + * as possible (eg. kick off any necessary syncs immediately). + * If txg == 0, wait for the next open txg. + */ +extern void txg_wait_open(struct dsl_pool *dp, uint64_t txg); + +/* + * Returns TRUE if we are "backed up" waiting for the syncing + * transaction to complete; otherwise returns FALSE. + */ +extern boolean_t txg_stalled(struct dsl_pool *dp); + +/* returns TRUE if someone is waiting for the next txg to sync */ +extern boolean_t txg_sync_waiting(struct dsl_pool *dp); + +extern void txg_verify(spa_t *spa, uint64_t txg); + +/* + * Wait for pending commit callbacks of already-synced transactions to finish + * processing. + */ +extern void txg_wait_callbacks(struct dsl_pool *dp); + +/* + * Per-txg object lists. + */ + +#define TXG_CLEAN(txg) ((txg) - 1) + +extern void txg_list_create(txg_list_t *tl, spa_t *spa, size_t offset); +extern void txg_list_destroy(txg_list_t *tl); +extern boolean_t txg_list_empty(txg_list_t *tl, uint64_t txg); +extern boolean_t txg_all_lists_empty(txg_list_t *tl); +extern boolean_t txg_list_add(txg_list_t *tl, void *p, uint64_t txg); +extern boolean_t txg_list_add_tail(txg_list_t *tl, void *p, uint64_t txg); +extern void *txg_list_remove(txg_list_t *tl, uint64_t txg); +extern void *txg_list_remove_this(txg_list_t *tl, void *p, uint64_t txg); +extern boolean_t txg_list_member(txg_list_t *tl, void *p, uint64_t txg); +extern void *txg_list_head(txg_list_t *tl, uint64_t txg); +extern void *txg_list_next(txg_list_t *tl, void *p, uint64_t txg); + +/* Global tuning */ +extern int zfs_txg_timeout; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_TXG_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/txg_impl.h +++ linux-aws-4.15.0/zfs/include/sys/txg_impl.h @@ -0,0 +1,124 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_TXG_IMPL_H +#define _SYS_TXG_IMPL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The tx_cpu structure is a per-cpu structure that is used to track + * the number of active transaction holds (tc_count). As transactions + * are assigned into a transaction group the appropriate tc_count is + * incremented to indicate that there are pending changes that have yet + * to quiesce. Consumers evenutally call txg_rele_to_sync() to decrement + * the tc_count. A transaction group is not considered quiesced until all + * tx_cpu structures have reached a tc_count of zero. + * + * This structure is a per-cpu structure by design. Updates to this structure + * are frequent and concurrent. Having a single structure would result in + * heavy lock contention so a per-cpu design was implemented. With the fanned + * out mutex design, consumers only need to lock the mutex associated with + * thread's cpu. + * + * The tx_cpu contains two locks, the tc_lock and tc_open_lock. + * The tc_lock is used to protect all members of the tx_cpu structure with + * the exception of the tc_open_lock. This lock should only be held for a + * short period of time, typically when updating the value of tc_count. + * + * The tc_open_lock protects the tx_open_txg member of the tx_state structure. + * This lock is used to ensure that transactions are only assigned into + * the current open transaction group. In order to move the current open + * transaction group to the quiesce phase, the txg_quiesce thread must + * grab all tc_open_locks, increment the tx_open_txg, and drop the locks. + * The tc_open_lock is held until the transaction is assigned into the + * transaction group. Typically, this is a short operation but if throttling + * is occurring it may be held for longer periods of time. + */ +struct tx_cpu { + kmutex_t tc_open_lock; /* protects tx_open_txg */ + kmutex_t tc_lock; /* protects the rest of this struct */ + kcondvar_t tc_cv[TXG_SIZE]; + uint64_t tc_count[TXG_SIZE]; /* tx hold count on each txg */ + list_t tc_callbacks[TXG_SIZE]; /* commit cb list */ + char tc_pad[8]; /* pad to fill 3 cache lines */ +}; + +/* + * The tx_state structure maintains the state information about the different + * stages of the pool's transcation groups. A per pool tx_state structure + * is used to track this information. The tx_state structure also points to + * an array of tx_cpu structures (described above). Although the tx_sync_lock + * is used to protect the members of this structure, it is not used to + * protect the tx_open_txg. Instead a special lock in the tx_cpu structure + * is used. Readers of tx_open_txg must grab the per-cpu tc_open_lock. + * Any thread wishing to update tx_open_txg must grab the tc_open_lock on + * every cpu (see txg_quiesce()). + */ +typedef struct tx_state { + tx_cpu_t *tx_cpu; /* protects access to tx_open_txg */ + kmutex_t tx_sync_lock; /* protects the rest of this struct */ + + uint64_t tx_open_txg; /* currently open txg id */ + uint64_t tx_quiesced_txg; /* quiesced txg waiting for sync */ + uint64_t tx_syncing_txg; /* currently syncing txg id */ + uint64_t tx_synced_txg; /* last synced txg id */ + + hrtime_t tx_open_time; /* start time of tx_open_txg */ + + uint64_t tx_sync_txg_waiting; /* txg we're waiting to sync */ + uint64_t tx_quiesce_txg_waiting; /* txg we're waiting to open */ + + kcondvar_t tx_sync_more_cv; + kcondvar_t tx_sync_done_cv; + kcondvar_t tx_quiesce_more_cv; + kcondvar_t tx_quiesce_done_cv; + kcondvar_t tx_timeout_cv; + kcondvar_t tx_exit_cv; /* wait for all threads to exit */ + + uint8_t tx_threads; /* number of threads */ + uint8_t tx_exiting; /* set when we're exiting */ + + kthread_t *tx_sync_thread; + kthread_t *tx_quiesce_thread; + + taskq_t *tx_commit_cb_taskq; /* commit callback taskq */ +} tx_state_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_TXG_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/u8_textprep.h +++ linux-aws-4.15.0/zfs/include/sys/u8_textprep.h @@ -0,0 +1,113 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_U8_TEXTPREP_H +#define _SYS_U8_TEXTPREP_H + + + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Unicode encoding conversion functions and their macros. + */ +#define UCONV_IN_BIG_ENDIAN 0x0001 +#define UCONV_OUT_BIG_ENDIAN 0x0002 +#define UCONV_IN_SYSTEM_ENDIAN 0x0004 +#define UCONV_OUT_SYSTEM_ENDIAN 0x0008 +#define UCONV_IN_LITTLE_ENDIAN 0x0010 +#define UCONV_OUT_LITTLE_ENDIAN 0x0020 +#define UCONV_IGNORE_NULL 0x0040 +#define UCONV_IN_ACCEPT_BOM 0x0080 +#define UCONV_OUT_EMIT_BOM 0x0100 + +extern int uconv_u16tou32(const uint16_t *, size_t *, uint32_t *, size_t *, + int); +extern int uconv_u16tou8(const uint16_t *, size_t *, uchar_t *, size_t *, int); +extern int uconv_u32tou16(const uint32_t *, size_t *, uint16_t *, size_t *, + int); +extern int uconv_u32tou8(const uint32_t *, size_t *, uchar_t *, size_t *, int); +extern int uconv_u8tou16(const uchar_t *, size_t *, uint16_t *, size_t *, int); +extern int uconv_u8tou32(const uchar_t *, size_t *, uint32_t *, size_t *, int); + +/* + * UTF-8 text preparation functions and their macros. + * + * Among the macros defined, U8_CANON_DECOMP, U8_COMPAT_DECOMP, and + * U8_CANON_COMP are not public interfaces and must not be used directly + * at the flag input argument. + */ +#define U8_STRCMP_CS (0x00000001) +#define U8_STRCMP_CI_UPPER (0x00000002) +#define U8_STRCMP_CI_LOWER (0x00000004) + +#define U8_CANON_DECOMP (0x00000010) +#define U8_COMPAT_DECOMP (0x00000020) +#define U8_CANON_COMP (0x00000040) + +#define U8_STRCMP_NFD (U8_CANON_DECOMP) +#define U8_STRCMP_NFC (U8_CANON_DECOMP | U8_CANON_COMP) +#define U8_STRCMP_NFKD (U8_COMPAT_DECOMP) +#define U8_STRCMP_NFKC (U8_COMPAT_DECOMP | U8_CANON_COMP) + +#define U8_TEXTPREP_TOUPPER (U8_STRCMP_CI_UPPER) +#define U8_TEXTPREP_TOLOWER (U8_STRCMP_CI_LOWER) + +#define U8_TEXTPREP_NFD (U8_STRCMP_NFD) +#define U8_TEXTPREP_NFC (U8_STRCMP_NFC) +#define U8_TEXTPREP_NFKD (U8_STRCMP_NFKD) +#define U8_TEXTPREP_NFKC (U8_STRCMP_NFKC) + +#define U8_TEXTPREP_IGNORE_NULL (0x00010000) +#define U8_TEXTPREP_IGNORE_INVALID (0x00020000) +#define U8_TEXTPREP_NOWAIT (0x00040000) + +#define U8_UNICODE_320 (0) +#define U8_UNICODE_500 (1) +#define U8_UNICODE_LATEST (U8_UNICODE_500) + +#define U8_VALIDATE_ENTIRE (0x00100000) +#define U8_VALIDATE_CHECK_ADDITIONAL (0x00200000) +#define U8_VALIDATE_UCS2_RANGE (0x00400000) + +#define U8_ILLEGAL_CHAR (-1) +#define U8_OUT_OF_RANGE_CHAR (-2) + +extern int u8_validate(char *, size_t, char **, int, int *); +extern int u8_strcmp(const char *, const char *, size_t, int, size_t, int *); +extern size_t u8_textprep_str(char *, size_t *, char *, size_t *, int, size_t, + int *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_U8_TEXTPREP_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/u8_textprep_data.h +++ linux-aws-4.15.0/zfs/include/sys/u8_textprep_data.h @@ -0,0 +1,35376 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright (c) 1991-2006 Unicode, Inc. All rights reserved. Distributed under + * the Terms of Use in http://www.unicode.org/copyright.html. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of the Unicode data files and any associated documentation (the + * "Data Files") or Unicode software and any associated documentation (the + * "Software") to deal in the Data Files or Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Data Files or Software, and + * to permit persons to whom the Data Files or Software are furnished to do so, + * provided that (a) the above copyright notice(s) and this permission notice + * appear with all copies of the Data Files or Software, (b) both the above + * copyright notice(s) and this permission notice appear in associated + * documentation, and (c) there is clear notice in each modified Data File or + * in the Software as well as in the documentation associated with the Data + * File(s) or Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR + * CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall not + * be used in advertising or otherwise to promote the sale, use or other + * dealings in these Data Files or Software without prior written authorization + * of the copyright holder. + * + * Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be + * registered in some jurisdictions. All other trademarks and registered + * trademarks mentioned herein are the property of their respective owners. + */ +/* + * This file has been modified by Sun Microsystems, Inc. + */ + +#ifndef _SYS_U8_TEXTPREP_DATA_H +#define _SYS_U8_TEXTPREP_DATA_H + + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * To get to the combining class data, composition mappings, decomposition + * mappings, and case conversion mappings of Unicode, the data structures + * formulated and their meanings are like the following: + * + * Each UTF-8 character is seen as a 4-byte entity so that U+0061 (or 0x61 in + * UTF-8) would be seen as 0x00 0x00 0x00 0x61. Similarly, U+1D15E would be + * 0xF0 0x9D 0x85 0x9E in UTF-8. + * + * The first byte (MSB) value is an index to the b1_tbl, such as + * u8_common_b1_tbl and u8_composition_b1_tbl tables. A b1_tbl has + * indices to b2_tbl tables that have indices to b3_tbl. Each b3_tbl has + * either indices to b4_tbl or indices to b4_tbl and base values for + * displacement calculations later by using the u8_displacement_t type at + * below. Each b4_tbl table then has indices to the final tables. + * + * As an example, if we have a character with code value of U+1D15E which is + * 0xF0 0x9D 0x85 0x9E in UTF-8, the target decomposition character bytes + * that will be mapped by the mapping procedure would be the ones between + * the start_index and the end_index computed as like the following: + * + * b2_tbl_id = u8_common_b1_tbl[0][0xF0]; + * b3_tbl_id = u8_decomp_b2_tbl[0][b2_tbl_id][0x9D]; + * b4_tbl_id = u8_decomp_b3_tbl[0][b3_tbl_id][0x85].tbl_id; + * b4_base = u8_decomp_b3_tbl[0][b3_tbl_id][0x85].base; + * if (b4_tbl_id >= 0x8000) { + * b4_tbl_id -= 0x8000; + * start_index = u8_decomp_b4_16bit_tbl[0][b4_tbl_id][0x9E]; + * end_index = u8_decomp_b4_16bit_tbl[0][b4_tbl_id][0x9E + 1]; + * } else { + * start_index = u8_decomp_b4_tbl[0][b4_tbl_id][0x9E]; + * end_index = u8_decomp_b4_tbl[0][b4_tbl_id][0x9E + 1]; + * } + * + * The start_index and the end_index can be used to retrieve the bytes + * possibly of multiple UTF-8 characters from the final tables. + * + * The "[0]" at the above indicates this is for Unicode Version 3.2.0 data + * as of today. Consequently, the "[1]" indicates another Unicode version + * data and it is Unicode 5.0.0 as of today. + * + * The mapping procedures and the data structures are more or less similar or + * alike among different mappings. You might want to read the u8_textprep.c + * for specific details. + * + * The tool programs created and used to generate the tables in this file are + * saved at PSARC/2007/149/materials/ as tools.tar.gz file. + */ + +/* The following is a component type for the b4_tbl vectors. */ +typedef struct { + uint16_t tbl_id; + uint16_t base; +} u8_displacement_t; + +/* + * The U8_TBL_ELEMENT_NOT_DEF macro indicates a byte that is not defined or + * used. The U8_TBL_ELEMENT_FILLER indicates the end of a UTF-8 character at + * the final tables. + */ +#define U8_TBL_ELEMENT_NOT_DEF (0xff) +#define N_ U8_TBL_ELEMENT_NOT_DEF + +#define U8_TBL_ELEMENT_FILLER (0xf7) +#define FIL_ U8_TBL_ELEMENT_FILLER + +/* + * The common b1_tbl for combining class, decompositions, tolower, and + * toupper case conversion mappings. + */ +static const uchar_t u8_common_b1_tbl[2][256] = { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, +}; + +static const uchar_t u8_combining_class_b2_tbl[2][2][256] = { + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 5, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 6, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, 5, N_, N_, N_, N_, 6, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 7, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 8, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + +}; + +static const uchar_t u8_combining_class_b3_tbl[2][9][256] = { + { + { /* Third byte table 0. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 0, 1, N_, N_, + N_, N_, 2, N_, N_, N_, 3, 4, + N_, 5, N_, 6, 7, 8, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 1. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, N_, 19, + N_, 20, N_, 21, N_, 22, N_, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 2. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 32, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 33, N_, N_, 34, + N_, N_, 35, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 3. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, 36, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 4. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 37, N_, 38, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 5. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 39, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 40, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 6. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 41, 42, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 7. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 8. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + }, + { + { /* Third byte table 0. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 0, 1, N_, N_, + N_, N_, 2, N_, N_, N_, 3, 4, + 5, 6, N_, 7, 8, 9, N_, 10, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 1. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, N_, 21, + N_, 22, 23, 24, N_, 25, N_, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 2. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 35, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 36, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 37, N_, N_, 38, + N_, N_, 39, N_, 40, N_, N_, N_, + 41, N_, N_, N_, 42, 43, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 44, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 3. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, 45, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 4. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 46, N_, 47, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 5. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 48, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 6. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, 49, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 50, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 7. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 51, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { /* Third byte table 8. */ + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 52, 53, N_, + N_, 54, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + }, +}; + +/* + * Unlike other b4_tbl, the b4_tbl for combining class data has + * the combining class values not indices to the final tables. + */ +static const uchar_t u8_combining_class_b4_tbl[2][55][256] = { + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 232, 220, 220, + 220, 220, 232, 216, 220, 220, 220, 220, + 220, 202, 202, 220, 220, 220, 220, 202, + 202, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 1, 1, 1, 1, + 1, 220, 220, 220, 220, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 240, 230, 220, + 220, 220, 230, 230, 230, 220, 220, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 234, 234, 233, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 220, 230, 230, 230, 230, 220, 230, + 230, 230, 222, 220, 230, 230, 230, 230, + 230, 230, 0, 220, 220, 220, 220, 220, + 230, 230, 220, 230, 230, 222, 228, 230, + 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 0, 20, 21, 22, 0, 23, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 25, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 28, 29, 30, 31, + 32, 33, 34, 230, 230, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 230, + 230, 230, 230, 220, 230, 0, 0, 230, + 230, 0, 220, 230, 230, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 220, 230, 230, 220, 230, 230, 220, + 220, 220, 230, 220, 220, 230, 220, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 220, 230, 220, 230, 220, 230, + 220, 230, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 230, 220, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 84, 91, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 103, 103, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 118, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 122, 122, 122, 122, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 220, + 0, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 132, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 130, 0, 230, 230, 9, 0, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 1, 1, 230, 230, 230, 230, + 1, 1, 1, 230, 230, 0, 0, 0, + 0, 230, 0, 0, 0, 1, 1, 230, + 220, 230, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 218, 228, 232, 222, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 41. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 216, 1, + 1, 1, 0, 0, 0, 226, 216, 216, + 216, 216, 216, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 220, 220, 220, 220, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 42. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 220, 0, 0, 230, 230, 230, + 230, 230, 220, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 43. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 44. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 45. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 46. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 47. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 48. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 49. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 50. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 51. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 52. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 53. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 54. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + }, + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 232, 220, 220, + 220, 220, 232, 216, 220, 220, 220, 220, + 220, 202, 202, 220, 220, 220, 220, 202, + 202, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 1, 1, 1, 1, + 1, 220, 220, 220, 220, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 240, 230, 220, + 220, 220, 230, 230, 230, 220, 220, 0, + 230, 230, 230, 220, 220, 220, 220, 230, + 232, 220, 220, 230, 233, 234, 234, 233, + 234, 234, 233, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 220, 230, 230, 230, 230, 220, 230, + 230, 230, 222, 220, 230, 230, 230, 230, + 230, 230, 220, 220, 220, 220, 220, 220, + 230, 230, 220, 230, 230, 222, 228, 230, + 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 19, 20, 21, 22, 0, 23, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 25, 0, 230, 220, 0, 18, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 28, 29, 30, 31, + 32, 33, 34, 230, 230, 220, 220, 230, + 230, 230, 230, 230, 220, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 230, + 230, 230, 230, 220, 230, 0, 0, 230, + 230, 0, 220, 230, 230, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 220, 230, 230, 220, 230, 230, 220, + 220, 220, 230, 220, 220, 230, 220, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 220, 230, 220, 230, 220, 230, + 220, 230, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 230, 230, 230, + 230, 230, 220, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 230, 220, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 84, 91, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 103, 103, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 118, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 122, 122, 122, 122, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 220, + 0, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 132, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 130, 0, 230, 230, 9, 0, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 230, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 41. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, + 220, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 42. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 43. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 220, 230, 230, 230, + 230, 230, 230, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 44. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 220, 230, 230, 230, 230, 230, + 230, 230, 220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 220, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 45. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 1, 1, 230, 230, 230, 230, + 1, 1, 1, 230, 230, 0, 0, 0, + 0, 230, 0, 0, 0, 1, 1, 230, + 220, 230, 1, 1, 220, 220, 220, 220, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 46. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 218, 228, 232, 222, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 47. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 48. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 49. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 50. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 51. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 1, 220, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 52. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 216, 1, + 1, 1, 0, 0, 0, 226, 216, 216, + 216, 216, 216, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 220, 220, 220, 220, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 53. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 220, 0, 0, 230, 230, 230, + 230, 230, 220, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + { /* Fourth byte table 54. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }, + }, +}; + +static const uchar_t u8_composition_b1_tbl[2][256] = { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, +}; + +static const uchar_t u8_composition_b2_tbl[2][1][256] = { + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + +}; + +static const u8_displacement_t u8_composition_b3_tbl[2][5][256] = { + { + { /* Third byte table 0. */ + { 0x8000, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 2470 }, + { 0x8001, 2491 }, { 1, 2871 }, { 2, 2959 }, + { 3, 3061 }, { 4, 3212 }, { 5, 3226 }, + { N_, 0 }, { 6, 3270 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0x8002, 3277 }, + { 7, 3774 }, { 8, 3949 }, { 9, 4198 }, + { N_, 0 }, { 10, 4265 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 11, 4293 }, { 12, 4312 }, { N_, 0 }, + { 13, 4326 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 14, 4347 }, + { N_, 0 }, { N_, 0 }, { 15, 4374 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 16, 4391 }, + { 17, 4416 }, { 18, 4425 }, { N_, 0 }, + { 19, 4451 }, { 20, 4460 }, { 21, 4469 }, + { N_, 0 }, { 22, 4503 }, { N_, 0 }, + { 23, 4529 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 24, 4563 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 25, 4572 }, { 26, 4588 }, + { 27, 4620 }, { 28, 4666 }, { 0x8003, 4682 }, + { 0x8004, 5254 }, { 29, 5616 }, { 30, 5646 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 31, 5684 }, + { 32, 5708 }, { 33, 5732 }, { 34, 5780 }, + { 35, 5900 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 36, 6012 }, { 37, 6241 }, { 38, 6358 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + }, + { + { /* Third byte table 0. */ + { 0x8000, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 2470 }, + { 0x8001, 2491 }, { 1, 2871 }, { 2, 2959 }, + { 3, 3061 }, { 4, 3212 }, { 5, 3226 }, + { N_, 0 }, { 6, 3270 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0x8002, 3277 }, + { 7, 3774 }, { 8, 3949 }, { 9, 4198 }, + { N_, 0 }, { 10, 4265 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 11, 4293 }, { 12, 4312 }, { N_, 0 }, + { 13, 4326 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 14, 4347 }, + { N_, 0 }, { N_, 0 }, { 15, 4374 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 16, 4391 }, + { 17, 4416 }, { 18, 4425 }, { N_, 0 }, + { 19, 4451 }, { 20, 4460 }, { 21, 4469 }, + { N_, 0 }, { 22, 4503 }, { N_, 0 }, + { 23, 4529 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 24, 4563 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 25, 4572 }, { 26, 4662 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 27, 4671 }, { 28, 4687 }, + { 29, 4719 }, { 30, 4765 }, { 0x8003, 4781 }, + { 0x8004, 5353 }, { 31, 5715 }, { 32, 5745 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 33, 5783 }, + { 34, 5807 }, { 35, 5831 }, { 36, 5879 }, + { 37, 5999 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 38, 6111 }, { 39, 6340 }, { 40, 6457 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + }, +}; + +static const uchar_t u8_composition_b4_tbl[2][41][257] = { + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 73, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 38, 46, 46, 46, 46, + 46, 54, 62, 62, 62, 62, 62, 62, + 62, 70, 78, 86, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 108, 144, 144, 144, 144, 144, 144, 144, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 14, 22, 30, 30, 30, 30, 30, 37, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 15, 70, 70, + 70, 70, 112, 133, 154, 154, 154, 162, + 162, 162, 162, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 20, 20, 20, 27, 27, 46, 59, + 66, 91, 91, 98, 98, 98, 98, 105, + 105, 105, 105, 105, 130, 130, 130, 130, + 137, 137, 137, 137, 144, 144, 151, 151, + 151, 164, 164, 164, 171, 171, 190, 203, + 210, 235, 235, 242, 242, 242, 242, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 25, 25, 25, + 32, 32, 32, 32, 39, 39, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 60, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 21, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 14, 14, 14, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, + 9, 18, 18, 18, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, + 25, 25, 25, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 25, 25, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 16, 16, 16, 16, + 16, 16, 16, 24, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 38, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 16, + 16, 16, 16, 16, 16, 16, 16, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 16, 16, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 16, 16, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 8, 8, 8, + 8, 16, 16, 16, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 32, 32, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 8, 16, 16, + 16, 24, 24, 24, 24, 24, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 40, 40, 40, 48, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 64, 72, 72, 72, 80, + 88, 88, 88, 96, 104, 112, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 16, 16, 16, 24, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 40, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 56, 56, 56, 56, 56, + 56, 64, 72, 72, 80, 80, 80, 80, + 80, 80, 80, 88, 96, 104, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 18, 18, 27, 27, + 36, 36, 45, 45, 54, 54, 63, 63, + 72, 72, 81, 81, 90, 90, 99, 99, + 108, 108, 117, 117, 117, 126, 126, 135, + 135, 144, 144, 144, 144, 144, 144, 144, + 161, 161, 161, 178, 178, 178, 195, 195, + 195, 212, 212, 212, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 18, + 18, 18, 18, 18, 27, 27, 36, 36, + 45, 45, 54, 54, 63, 63, 72, 72, + 81, 81, 90, 90, 99, 99, 108, 108, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 18, 18, 27, + 27, 36, 36, 36, 36, 36, 36, 36, + 53, 53, 53, 70, 70, 70, 87, 87, + 87, 104, 104, 104, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, + 130, 139, 148, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + }, + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 73, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 38, 46, 46, 46, 46, + 46, 54, 62, 62, 62, 62, 62, 62, + 62, 70, 78, 86, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 108, 144, 144, 144, 144, 144, 144, 144, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, + 151, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 14, 22, 30, 30, 30, 30, 30, 37, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 15, 70, 70, + 70, 70, 112, 133, 154, 154, 154, 162, + 162, 162, 162, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 20, 20, 20, 27, 27, 46, 59, + 66, 91, 91, 98, 98, 98, 98, 105, + 105, 105, 105, 105, 130, 130, 130, 130, + 137, 137, 137, 137, 144, 144, 151, 151, + 151, 164, 164, 164, 171, 171, 190, 203, + 210, 235, 235, 242, 242, 242, 242, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, + 249, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 25, 25, 25, + 32, 32, 32, 32, 39, 39, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 60, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 21, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 14, 14, 14, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, + 9, 18, 18, 18, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, + 25, 25, 25, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 25, 25, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, + 18, 18, 27, 27, 36, 36, 45, 45, + 45, 45, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 63, 63, 72, 72, 81, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 16, 16, 16, 16, + 16, 16, 16, 24, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 38, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 16, + 16, 16, 16, 16, 16, 16, 16, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 16, 16, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 16, 16, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 8, 8, 8, + 8, 16, 16, 16, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 32, 32, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 8, 16, 16, + 16, 24, 24, 24, 24, 24, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 40, 40, 40, 48, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 64, 72, 72, 72, 80, + 88, 88, 88, 96, 104, 112, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, + 120, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 16, 16, 16, 24, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 40, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 56, 56, 56, 56, 56, + 56, 64, 72, 72, 80, 80, 80, 80, + 80, 80, 80, 88, 96, 104, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 18, 18, 27, 27, + 36, 36, 45, 45, 54, 54, 63, 63, + 72, 72, 81, 81, 90, 90, 99, 99, + 108, 108, 117, 117, 117, 126, 126, 135, + 135, 144, 144, 144, 144, 144, 144, 144, + 161, 161, 161, 178, 178, 178, 195, 195, + 195, 212, 212, 212, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, + 229, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 18, + 18, 18, 18, 18, 27, 27, 36, 36, + 45, 45, 54, 54, 63, 63, 72, 72, + 81, 81, 90, 90, 99, 99, 108, 108, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, + 117, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 18, 18, 27, + 27, 36, 36, 36, 36, 36, 36, 36, + 53, 53, 53, 70, 70, 70, 87, 87, + 87, 104, 104, 104, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, + 130, 139, 148, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, + }, + }, +}; + +static const uint16_t u8_composition_b4_16bit_tbl[2][5][257] = { + { + { /* Fourth byte 16-bit table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 16, 24, + 24, 24, 124, 146, 177, 219, 327, 335, + 379, 427, 521, 528, 562, 602, 624, 683, + 782, 797, 797, 849, 894, 941, 1061, 1076, + 1118, 1133, 1193, 1233, 1233, 1233, 1233, 1233, + 1233, 1233, 1333, 1355, 1386, 1428, 1536, 1544, + 1588, 1643, 1731, 1744, 1778, 1818, 1840, 1899, + 1998, 2013, 2013, 2065, 2110, 2164, 2284, 2299, + 2348, 2363, 2430, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, + }, + { /* Fourth byte 16-bit table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 29, 36, 43, 56, + 64, 64, 64, 93, 93, 93, 93, 93, + 101, 101, 101, 101, 101, 130, 151, 158, + 158, 165, 165, 165, 165, 190, 190, 190, + 190, 190, 190, 219, 219, 226, 233, 246, + 254, 254, 254, 283, 283, 283, 283, 283, + 291, 291, 291, 291, 291, 320, 341, 348, + 348, 355, 355, 355, 355, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, + }, + { /* Fourth byte 16-bit table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 49, 49, 49, 77, 77, + 112, 112, 160, 160, 160, 160, 160, 160, + 188, 188, 196, 196, 196, 196, 237, 237, + 237, 237, 272, 272, 272, 280, 280, 288, + 288, 288, 344, 344, 344, 344, 372, 372, + 414, 414, 469, 469, 469, 469, 469, 469, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, + }, + { /* Fourth byte 16-bit table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29, 58, 66, 74, 82, 90, 98, + 106, 135, 164, 172, 180, 188, 196, 204, + 212, 227, 242, 242, 242, 242, 242, 242, + 242, 257, 272, 272, 272, 272, 272, 272, + 272, 301, 330, 338, 346, 354, 362, 370, + 378, 407, 436, 444, 452, 460, 468, 476, + 484, 506, 528, 528, 528, 528, 528, 528, + 528, 550, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, + }, + { /* Fourth byte 16-bit table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 30, 30, 30, 30, 30, 30, + 30, 45, 60, 60, 60, 60, 60, 60, + 60, 82, 104, 104, 104, 104, 104, 104, + 104, 104, 126, 126, 126, 126, 126, 126, + 126, 155, 184, 192, 200, 208, 216, 224, + 232, 261, 290, 298, 306, 314, 322, 330, + 338, 346, 346, 346, 346, 354, 354, 354, + 354, 354, 354, 354, 354, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, + }, + }, + { + { /* Fourth byte 16-bit table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8, 16, 24, + 24, 24, 124, 146, 177, 219, 327, 335, + 379, 427, 521, 528, 562, 602, 624, 683, + 782, 797, 797, 849, 894, 941, 1061, 1076, + 1118, 1133, 1193, 1233, 1233, 1233, 1233, 1233, + 1233, 1233, 1333, 1355, 1386, 1428, 1536, 1544, + 1588, 1643, 1731, 1744, 1778, 1818, 1840, 1899, + 1998, 2013, 2013, 2065, 2110, 2164, 2284, 2299, + 2348, 2363, 2430, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, + 2470, + }, + { /* Fourth byte 16-bit table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 29, 36, 43, 56, + 64, 64, 64, 93, 93, 93, 93, 93, + 101, 101, 101, 101, 101, 130, 151, 158, + 158, 165, 165, 165, 165, 190, 190, 190, + 190, 190, 190, 219, 219, 226, 233, 246, + 254, 254, 254, 283, 283, 283, 283, 283, + 291, 291, 291, 291, 291, 320, 341, 348, + 348, 355, 355, 355, 355, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, + 380, + }, + { /* Fourth byte 16-bit table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 49, 49, 49, 77, 77, + 112, 112, 160, 160, 160, 160, 160, 160, + 188, 188, 196, 196, 196, 196, 237, 237, + 237, 237, 272, 272, 272, 280, 280, 288, + 288, 288, 344, 344, 344, 344, 372, 372, + 414, 414, 469, 469, 469, 469, 469, 469, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, + 497, + }, + { /* Fourth byte 16-bit table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 29, 58, 66, 74, 82, 90, 98, + 106, 135, 164, 172, 180, 188, 196, 204, + 212, 227, 242, 242, 242, 242, 242, 242, + 242, 257, 272, 272, 272, 272, 272, 272, + 272, 301, 330, 338, 346, 354, 362, 370, + 378, 407, 436, 444, 452, 460, 468, 476, + 484, 506, 528, 528, 528, 528, 528, 528, + 528, 550, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, 572, 572, 572, 572, 572, 572, 572, + 572, + }, + { /* Fourth byte 16-bit table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 30, 30, 30, 30, 30, 30, + 30, 45, 60, 60, 60, 60, 60, 60, + 60, 82, 104, 104, 104, 104, 104, 104, + 104, 104, 126, 126, 126, 126, 126, 126, + 126, 155, 184, 192, 200, 208, 216, 224, + 232, 261, 290, 298, 306, 314, 322, 330, + 338, 346, 346, 346, 346, 354, 354, 354, + 354, 354, 354, 354, 354, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, + }, + }, +}; + +static const uchar_t u8_composition_final_tbl[2][6623] = { + { + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_, + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_, + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAF, FIL_, + 0x10, 0xCC, 0x86, FIL_, 0xC4, 0x82, FIL_, 0xCC, + 0x87, FIL_, 0xC8, 0xA6, FIL_, 0xCC, 0x8F, FIL_, + 0xC8, 0x80, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x82, + FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x81, FIL_, 0xCC, + 0x80, FIL_, 0xC3, 0x80, FIL_, 0xCC, 0x83, FIL_, + 0xC3, 0x83, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, + 0xA0, FIL_, 0xCC, 0xA5, FIL_, 0xE1, 0xB8, 0x80, + FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x82, FIL_, 0xCC, + 0x84, FIL_, 0xC4, 0x80, FIL_, 0xCC, 0x88, FIL_, + 0xC3, 0x84, FIL_, 0xCC, 0x8A, FIL_, 0xC3, 0x85, + FIL_, 0xCC, 0xA8, FIL_, 0xC4, 0x84, FIL_, 0xCC, + 0x89, FIL_, 0xE1, 0xBA, 0xA2, FIL_, 0xCC, 0x8C, + FIL_, 0xC7, 0x8D, FIL_, 0x03, 0xCC, 0x87, FIL_, + 0xE1, 0xB8, 0x82, FIL_, 0xCC, 0xB1, FIL_, 0xE1, + 0xB8, 0x86, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0x84, FIL_, 0x05, 0xCC, 0xA7, FIL_, 0xC3, 0x87, + FIL_, 0xCC, 0x81, FIL_, 0xC4, 0x86, FIL_, 0xCC, + 0x8C, FIL_, 0xC4, 0x8C, FIL_, 0xCC, 0x87, FIL_, + 0xC4, 0x8A, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0x88, + FIL_, 0x06, 0xCC, 0xB1, FIL_, 0xE1, 0xB8, 0x8E, + FIL_, 0xCC, 0xA7, FIL_, 0xE1, 0xB8, 0x90, FIL_, + 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0x92, FIL_, 0xCC, + 0x87, FIL_, 0xE1, 0xB8, 0x8A, FIL_, 0xCC, 0x8C, + FIL_, 0xC4, 0x8E, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB8, 0x8C, FIL_, 0x11, 0xCC, 0x80, FIL_, 0xC3, + 0x88, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x89, FIL_, + 0xCC, 0x82, FIL_, 0xC3, 0x8A, FIL_, 0xCC, 0x88, + FIL_, 0xC3, 0x8B, FIL_, 0xCC, 0xA7, FIL_, 0xC8, + 0xA8, FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x86, FIL_, + 0xCC, 0x8F, FIL_, 0xC8, 0x84, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBA, 0xBA, FIL_, 0xCC, 0xB0, FIL_, + 0xE1, 0xB8, 0x9A, FIL_, 0xCC, 0xAD, FIL_, 0xE1, + 0xB8, 0x98, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBA, + 0xBC, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0xB8, + FIL_, 0xCC, 0x84, FIL_, 0xC4, 0x92, FIL_, 0xCC, + 0x86, FIL_, 0xC4, 0x94, FIL_, 0xCC, 0x87, FIL_, + 0xC4, 0x96, FIL_, 0xCC, 0xA8, FIL_, 0xC4, 0x98, + FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0x9A, FIL_, 0x01, + 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0x9E, FIL_, 0x07, + 0xCC, 0x8C, FIL_, 0xC7, 0xA6, FIL_, 0xCC, 0x87, + FIL_, 0xC4, 0xA0, FIL_, 0xCC, 0x84, FIL_, 0xE1, + 0xB8, 0xA0, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0x9C, + FIL_, 0xCC, 0x81, FIL_, 0xC7, 0xB4, FIL_, 0xCC, + 0xA7, FIL_, 0xC4, 0xA2, FIL_, 0xCC, 0x86, FIL_, + 0xC4, 0x9E, FIL_, 0x07, 0xCC, 0xAE, FIL_, 0xE1, + 0xB8, 0xAA, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB8, + 0xA2, FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xB8, 0xA6, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, 0xA4, FIL_, + 0xCC, 0xA7, FIL_, 0xE1, 0xB8, 0xA8, FIL_, 0xCC, + 0x8C, FIL_, 0xC8, 0x9E, FIL_, 0xCC, 0x82, FIL_, + 0xC4, 0xA4, FIL_, 0x0F, 0xCC, 0x84, FIL_, 0xC4, + 0xAA, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0x8C, FIL_, + 0xCC, 0xA8, FIL_, 0xC4, 0xAE, FIL_, 0xCC, 0x83, + FIL_, 0xC4, 0xA8, FIL_, 0xCC, 0x88, FIL_, 0xC3, + 0x8F, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x8D, FIL_, + 0xCC, 0x8F, FIL_, 0xC8, 0x88, FIL_, 0xCC, 0x86, + FIL_, 0xC4, 0xAC, FIL_, 0xCC, 0x91, FIL_, 0xC8, + 0x8A, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x8F, FIL_, + 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x88, FIL_, 0xCC, + 0x87, FIL_, 0xC4, 0xB0, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xBB, 0x8A, FIL_, 0xCC, 0xB0, FIL_, 0xE1, + 0xB8, 0xAC, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x8E, + FIL_, 0x01, 0xCC, 0x82, FIL_, 0xC4, 0xB4, FIL_, + 0x05, 0xCC, 0x8C, FIL_, 0xC7, 0xA8, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB8, 0xB4, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB8, 0xB0, FIL_, 0xCC, 0xA7, FIL_, + 0xC4, 0xB6, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB2, FIL_, 0x06, 0xCC, 0xA7, FIL_, 0xC4, 0xBB, + FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0xBD, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB8, 0xBA, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xB8, 0xB6, FIL_, 0xCC, 0xAD, FIL_, + 0xE1, 0xB8, 0xBC, FIL_, 0xCC, 0x81, FIL_, 0xC4, + 0xB9, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, 0xB8, + 0xBE, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x82, + FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0x80, FIL_, + 0x09, 0xCC, 0x80, FIL_, 0xC7, 0xB8, FIL_, 0xCC, + 0xAD, FIL_, 0xE1, 0xB9, 0x8A, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0x84, FIL_, 0xCC, 0xB1, FIL_, + 0xE1, 0xB9, 0x88, FIL_, 0xCC, 0x83, FIL_, 0xC3, + 0x91, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x86, + FIL_, 0xCC, 0x81, FIL_, 0xC5, 0x83, FIL_, 0xCC, + 0xA7, FIL_, 0xC5, 0x85, FIL_, 0xCC, 0x8C, FIL_, + 0xC5, 0x87, FIL_, 0x10, 0xCC, 0xA8, FIL_, 0xC7, + 0xAA, FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x8E, FIL_, + 0xCC, 0x80, FIL_, 0xC3, 0x92, FIL_, 0xCC, 0x9B, + FIL_, 0xC6, 0xA0, FIL_, 0xCC, 0x8F, FIL_, 0xC8, + 0x8C, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x93, FIL_, + 0xCC, 0x87, FIL_, 0xC8, 0xAE, FIL_, 0xCC, 0x8C, + FIL_, 0xC7, 0x91, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xBB, 0x8C, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x94, + FIL_, 0xCC, 0x84, FIL_, 0xC5, 0x8C, FIL_, 0xCC, + 0x83, FIL_, 0xC3, 0x95, FIL_, 0xCC, 0x86, FIL_, + 0xC5, 0x8E, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0x96, + FIL_, 0xCC, 0x8B, FIL_, 0xC5, 0x90, FIL_, 0xCC, + 0x89, FIL_, 0xE1, 0xBB, 0x8E, FIL_, 0x02, 0xCC, + 0x87, FIL_, 0xE1, 0xB9, 0x96, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0x94, FIL_, 0x08, 0xCC, 0x91, + FIL_, 0xC8, 0x92, FIL_, 0xCC, 0xA7, FIL_, 0xC5, + 0x96, FIL_, 0xCC, 0x8C, FIL_, 0xC5, 0x98, FIL_, + 0xCC, 0xB1, FIL_, 0xE1, 0xB9, 0x9E, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xB9, 0x9A, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0x98, FIL_, 0xCC, 0x81, FIL_, + 0xC5, 0x94, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x90, + FIL_, 0x07, 0xCC, 0x81, FIL_, 0xC5, 0x9A, FIL_, + 0xCC, 0x82, FIL_, 0xC5, 0x9C, FIL_, 0xCC, 0xA7, + FIL_, 0xC5, 0x9E, FIL_, 0xCC, 0x8C, FIL_, 0xC5, + 0xA0, FIL_, 0xCC, 0xA6, FIL_, 0xC8, 0x98, FIL_, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xA0, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xB9, 0xA2, FIL_, 0x07, 0xCC, + 0x8C, FIL_, 0xC5, 0xA4, FIL_, 0xCC, 0xB1, FIL_, + 0xE1, 0xB9, 0xAE, FIL_, 0xCC, 0xA6, FIL_, 0xC8, + 0x9A, FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0xA2, FIL_, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xAA, FIL_, 0xCC, + 0xAD, FIL_, 0xE1, 0xB9, 0xB0, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xB9, 0xAC, FIL_, 0x13, 0xCC, 0xA8, + FIL_, 0xC5, 0xB2, FIL_, 0xCC, 0x83, FIL_, 0xC5, + 0xA8, FIL_, 0xCC, 0x84, FIL_, 0xC5, 0xAA, FIL_, + 0xCC, 0x81, FIL_, 0xC3, 0x9A, FIL_, 0xCC, 0x86, + FIL_, 0xC5, 0xAC, FIL_, 0xCC, 0x8A, FIL_, 0xC5, + 0xAE, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0x99, FIL_, + 0xCC, 0x91, FIL_, 0xC8, 0x96, FIL_, 0xCC, 0x8B, + FIL_, 0xC5, 0xB0, FIL_, 0xCC, 0xA4, FIL_, 0xE1, + 0xB9, 0xB2, FIL_, 0xCC, 0xB0, FIL_, 0xE1, 0xB9, + 0xB4, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x94, FIL_, + 0xCC, 0xAD, FIL_, 0xE1, 0xB9, 0xB6, FIL_, 0xCC, + 0x9B, FIL_, 0xC6, 0xAF, FIL_, 0xCC, 0x82, FIL_, + 0xC3, 0x9B, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0x9C, + FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x93, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBB, 0xA4, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0xA6, FIL_, 0x02, 0xCC, 0x83, + FIL_, 0xE1, 0xB9, 0xBC, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xB9, 0xBE, FIL_, 0x06, 0xCC, 0x82, FIL_, + 0xC5, 0xB4, FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xBA, + 0x84, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xBA, 0x86, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0x88, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0x82, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBA, 0x80, FIL_, 0x02, 0xCC, + 0x87, FIL_, 0xE1, 0xBA, 0x8A, FIL_, 0xCC, 0x88, + FIL_, 0xE1, 0xBA, 0x8C, FIL_, 0x09, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0xB6, FIL_, 0xCC, 0x87, FIL_, + 0xE1, 0xBA, 0x8E, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xBB, 0xB4, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x9D, + FIL_, 0xCC, 0x84, FIL_, 0xC8, 0xB2, FIL_, 0xCC, + 0x82, FIL_, 0xC5, 0xB6, FIL_, 0xCC, 0x88, FIL_, + 0xC5, 0xB8, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBB, + 0xB2, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0xB8, + FIL_, 0x06, 0xCC, 0x87, FIL_, 0xC5, 0xBB, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0x92, FIL_, 0xCC, + 0x8C, FIL_, 0xC5, 0xBD, FIL_, 0xCC, 0xB1, FIL_, + 0xE1, 0xBA, 0x94, FIL_, 0xCC, 0x82, FIL_, 0xE1, + 0xBA, 0x90, FIL_, 0xCC, 0x81, FIL_, 0xC5, 0xB9, + FIL_, 0x10, 0xCC, 0x8C, FIL_, 0xC7, 0x8E, FIL_, + 0xCC, 0x8F, FIL_, 0xC8, 0x81, FIL_, 0xCC, 0xA8, + FIL_, 0xC4, 0x85, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xBA, 0xA1, FIL_, 0xCC, 0x86, FIL_, 0xC4, 0x83, + FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xA3, FIL_, + 0xCC, 0x84, FIL_, 0xC4, 0x81, FIL_, 0xCC, 0x91, + FIL_, 0xC8, 0x83, FIL_, 0xCC, 0x8A, FIL_, 0xC3, + 0xA5, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0xA4, FIL_, + 0xCC, 0x83, FIL_, 0xC3, 0xA3, FIL_, 0xCC, 0x82, + FIL_, 0xC3, 0xA2, FIL_, 0xCC, 0x81, FIL_, 0xC3, + 0xA1, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0xA0, FIL_, + 0xCC, 0x87, FIL_, 0xC8, 0xA7, FIL_, 0xCC, 0xA5, + FIL_, 0xE1, 0xB8, 0x81, FIL_, 0x03, 0xCC, 0xB1, + FIL_, 0xE1, 0xB8, 0x87, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xB8, 0x85, FIL_, 0xCC, 0x87, FIL_, 0xE1, + 0xB8, 0x83, FIL_, 0x05, 0xCC, 0x87, FIL_, 0xC4, + 0x8B, FIL_, 0xCC, 0xA7, FIL_, 0xC3, 0xA7, FIL_, + 0xCC, 0x82, FIL_, 0xC4, 0x89, FIL_, 0xCC, 0x8C, + FIL_, 0xC4, 0x8D, FIL_, 0xCC, 0x81, FIL_, 0xC4, + 0x87, FIL_, 0x06, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, + 0x93, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0x8B, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, 0x8D, FIL_, + 0xCC, 0xB1, FIL_, 0xE1, 0xB8, 0x8F, FIL_, 0xCC, + 0xA7, FIL_, 0xE1, 0xB8, 0x91, FIL_, 0xCC, 0x8C, + FIL_, 0xC4, 0x8F, FIL_, 0x11, 0xCC, 0xA8, FIL_, + 0xC4, 0x99, FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0x9B, + FIL_, 0xCC, 0x87, FIL_, 0xC4, 0x97, FIL_, 0xCC, + 0x88, FIL_, 0xC3, 0xAB, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xBA, 0xB9, FIL_, 0xCC, 0xB0, FIL_, 0xE1, + 0xB8, 0x9B, FIL_, 0xCC, 0x84, FIL_, 0xC4, 0x93, + FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0x99, FIL_, + 0xCC, 0x83, FIL_, 0xE1, 0xBA, 0xBD, FIL_, 0xCC, + 0x86, FIL_, 0xC4, 0x95, FIL_, 0xCC, 0xA7, FIL_, + 0xC8, 0xA9, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, + 0xBB, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x85, FIL_, + 0xCC, 0x81, FIL_, 0xC3, 0xA9, FIL_, 0xCC, 0x91, + FIL_, 0xC8, 0x87, FIL_, 0xCC, 0x80, FIL_, 0xC3, + 0xA8, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0xAA, FIL_, + 0x01, 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0x9F, FIL_, + 0x07, 0xCC, 0x86, FIL_, 0xC4, 0x9F, FIL_, 0xCC, + 0xA7, FIL_, 0xC4, 0xA3, FIL_, 0xCC, 0x81, FIL_, + 0xC7, 0xB5, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0x9D, + FIL_, 0xCC, 0x87, FIL_, 0xC4, 0xA1, FIL_, 0xCC, + 0x8C, FIL_, 0xC7, 0xA7, FIL_, 0xCC, 0x84, FIL_, + 0xE1, 0xB8, 0xA1, FIL_, 0x08, 0xCC, 0x8C, FIL_, + 0xC8, 0x9F, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0xA5, + FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xB8, 0xA7, FIL_, + 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0xA3, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xBA, 0x96, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xB8, 0xA5, FIL_, 0xCC, 0xA7, FIL_, + 0xE1, 0xB8, 0xA9, FIL_, 0xCC, 0xAE, FIL_, 0xE1, + 0xB8, 0xAB, FIL_, 0x0E, 0xCC, 0x81, FIL_, 0xC3, + 0xAD, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0xAC, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0x8B, FIL_, 0xCC, + 0x8C, FIL_, 0xC7, 0x90, FIL_, 0xCC, 0x89, FIL_, + 0xE1, 0xBB, 0x89, FIL_, 0xCC, 0x91, FIL_, 0xC8, + 0x8B, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x89, FIL_, + 0xCC, 0x82, FIL_, 0xC3, 0xAE, FIL_, 0xCC, 0xB0, + FIL_, 0xE1, 0xB8, 0xAD, FIL_, 0xCC, 0xA8, FIL_, + 0xC4, 0xAF, FIL_, 0xCC, 0x86, FIL_, 0xC4, 0xAD, + FIL_, 0xCC, 0x84, FIL_, 0xC4, 0xAB, FIL_, 0xCC, + 0x83, FIL_, 0xC4, 0xA9, FIL_, 0xCC, 0x88, FIL_, + 0xC3, 0xAF, FIL_, 0x02, 0xCC, 0x82, FIL_, 0xC4, + 0xB5, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0xB0, FIL_, + 0x05, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, 0xB3, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xB1, FIL_, 0xCC, + 0xA7, FIL_, 0xC4, 0xB7, FIL_, 0xCC, 0x8C, FIL_, + 0xC7, 0xA9, FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB8, + 0xB5, FIL_, 0x06, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB7, FIL_, 0xCC, 0x81, FIL_, 0xC4, 0xBA, FIL_, + 0xCC, 0xA7, FIL_, 0xC4, 0xBC, FIL_, 0xCC, 0x8C, + FIL_, 0xC4, 0xBE, FIL_, 0xCC, 0xB1, FIL_, 0xE1, + 0xB8, 0xBB, FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, + 0xBD, FIL_, 0x03, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, + 0x83, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xBF, + FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0x81, FIL_, + 0x09, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x87, FIL_, + 0xCC, 0x83, FIL_, 0xC3, 0xB1, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0x85, FIL_, 0xCC, 0xB1, FIL_, + 0xE1, 0xB9, 0x89, FIL_, 0xCC, 0x81, FIL_, 0xC5, + 0x84, FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0x86, FIL_, + 0xCC, 0xAD, FIL_, 0xE1, 0xB9, 0x8B, FIL_, 0xCC, + 0x8C, FIL_, 0xC5, 0x88, FIL_, 0xCC, 0x80, FIL_, + 0xC7, 0xB9, FIL_, 0x10, 0xCC, 0x89, FIL_, 0xE1, + 0xBB, 0x8F, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0xB3, + FIL_, 0xCC, 0x80, FIL_, 0xC3, 0xB2, FIL_, 0xCC, + 0x87, FIL_, 0xC8, 0xAF, FIL_, 0xCC, 0x8F, FIL_, + 0xC8, 0x8D, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, + 0x8D, FIL_, 0xCC, 0x84, FIL_, 0xC5, 0x8D, FIL_, + 0xCC, 0x8C, FIL_, 0xC7, 0x92, FIL_, 0xCC, 0x86, + FIL_, 0xC5, 0x8F, FIL_, 0xCC, 0x8B, FIL_, 0xC5, + 0x91, FIL_, 0xCC, 0x9B, FIL_, 0xC6, 0xA1, FIL_, + 0xCC, 0x91, FIL_, 0xC8, 0x8F, FIL_, 0xCC, 0xA8, + FIL_, 0xC7, 0xAB, FIL_, 0xCC, 0x88, FIL_, 0xC3, + 0xB6, FIL_, 0xCC, 0x83, FIL_, 0xC3, 0xB5, FIL_, + 0xCC, 0x82, FIL_, 0xC3, 0xB4, FIL_, 0x02, 0xCC, + 0x87, FIL_, 0xE1, 0xB9, 0x97, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0x95, FIL_, 0x08, 0xCC, 0xB1, + FIL_, 0xE1, 0xB9, 0x9F, FIL_, 0xCC, 0x87, FIL_, + 0xE1, 0xB9, 0x99, FIL_, 0xCC, 0x81, FIL_, 0xC5, + 0x95, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x91, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x9B, FIL_, 0xCC, + 0x8C, FIL_, 0xC5, 0x99, FIL_, 0xCC, 0x91, FIL_, + 0xC8, 0x93, FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0x97, + FIL_, 0x07, 0xCC, 0xA6, FIL_, 0xC8, 0x99, FIL_, + 0xCC, 0x8C, FIL_, 0xC5, 0xA1, FIL_, 0xCC, 0x81, + FIL_, 0xC5, 0x9B, FIL_, 0xCC, 0x87, FIL_, 0xE1, + 0xB9, 0xA1, FIL_, 0xCC, 0x82, FIL_, 0xC5, 0x9D, + FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0x9F, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xB9, 0xA3, FIL_, 0x08, 0xCC, + 0x88, FIL_, 0xE1, 0xBA, 0x97, FIL_, 0xCC, 0xAD, + FIL_, 0xE1, 0xB9, 0xB1, FIL_, 0xCC, 0xB1, FIL_, + 0xE1, 0xB9, 0xAF, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB9, 0xAD, FIL_, 0xCC, 0x8C, FIL_, 0xC5, 0xA5, + FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0xA3, FIL_, 0xCC, + 0x87, FIL_, 0xE1, 0xB9, 0xAB, FIL_, 0xCC, 0xA6, + FIL_, 0xC8, 0x9B, FIL_, 0x13, 0xCC, 0x81, FIL_, + 0xC3, 0xBA, FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x97, + FIL_, 0xCC, 0x83, FIL_, 0xC5, 0xA9, FIL_, 0xCC, + 0x8F, FIL_, 0xC8, 0x95, FIL_, 0xCC, 0xA8, FIL_, + 0xC5, 0xB3, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0xBB, + FIL_, 0xCC, 0x88, FIL_, 0xC3, 0xBC, FIL_, 0xCC, + 0x80, FIL_, 0xC3, 0xB9, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xBB, 0xA5, FIL_, 0xCC, 0xA4, FIL_, 0xE1, + 0xB9, 0xB3, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, + 0xA7, FIL_, 0xCC, 0xB0, FIL_, 0xE1, 0xB9, 0xB5, + FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB9, 0xB7, FIL_, + 0xCC, 0x9B, FIL_, 0xC6, 0xB0, FIL_, 0xCC, 0x84, + FIL_, 0xC5, 0xAB, FIL_, 0xCC, 0x8B, FIL_, 0xC5, + 0xB1, FIL_, 0xCC, 0x86, FIL_, 0xC5, 0xAD, FIL_, + 0xCC, 0x8C, FIL_, 0xC7, 0x94, FIL_, 0xCC, 0x8A, + FIL_, 0xC5, 0xAF, FIL_, 0x02, 0xCC, 0x83, FIL_, + 0xE1, 0xB9, 0xBD, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB9, 0xBF, FIL_, 0x07, 0xCC, 0x82, FIL_, 0xC5, + 0xB5, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBA, 0x81, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0x83, FIL_, + 0xCC, 0x88, FIL_, 0xE1, 0xBA, 0x85, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBA, 0x89, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xBA, 0x87, FIL_, 0xCC, 0x8A, FIL_, + 0xE1, 0xBA, 0x98, FIL_, 0x02, 0xCC, 0x87, FIL_, + 0xE1, 0xBA, 0x8B, FIL_, 0xCC, 0x88, FIL_, 0xE1, + 0xBA, 0x8D, FIL_, 0x0A, 0xCC, 0x87, FIL_, 0xE1, + 0xBA, 0x8F, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, + 0xB9, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0xB3, + FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0xB7, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xB5, FIL_, 0xCC, + 0x82, FIL_, 0xC5, 0xB7, FIL_, 0xCC, 0x84, FIL_, + 0xC8, 0xB3, FIL_, 0xCC, 0x8A, FIL_, 0xE1, 0xBA, + 0x99, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0xBF, FIL_, + 0xCC, 0x81, FIL_, 0xC3, 0xBD, FIL_, 0x06, 0xCC, + 0x8C, FIL_, 0xC5, 0xBE, FIL_, 0xCC, 0x87, FIL_, + 0xC5, 0xBC, FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xBA, + 0x95, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0x93, + FIL_, 0xCC, 0x81, FIL_, 0xC5, 0xBA, FIL_, 0xCC, + 0x82, FIL_, 0xE1, 0xBA, 0x91, FIL_, 0x03, 0xCC, + 0x80, FIL_, 0xE1, 0xBF, 0xAD, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x81, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x85, FIL_, 0x04, 0xCC, 0x89, FIL_, 0xE1, + 0xBA, 0xA8, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBA, + 0xAA, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xA4, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBA, 0xA6, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC7, 0x9E, FIL_, 0x01, + 0xCC, 0x81, FIL_, 0xC7, 0xBA, FIL_, 0x02, 0xCC, + 0x84, FIL_, 0xC7, 0xA2, FIL_, 0xCC, 0x81, FIL_, + 0xC7, 0xBC, FIL_, 0x01, 0xCC, 0x81, FIL_, 0xE1, + 0xB8, 0x88, FIL_, 0x04, 0xCC, 0x81, FIL_, 0xE1, + 0xBA, 0xBE, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBB, + 0x80, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0x84, + FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x82, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xAE, FIL_, + 0x04, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0x96, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBB, 0x90, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBB, 0x92, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0x94, FIL_, 0x03, 0xCC, 0x84, + FIL_, 0xC8, 0xAC, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xB9, 0x8C, FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xB9, + 0x8E, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xAA, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xC7, 0xBE, FIL_, + 0x04, 0xCC, 0x80, FIL_, 0xC7, 0x9B, FIL_, 0xCC, + 0x84, FIL_, 0xC7, 0x95, FIL_, 0xCC, 0x8C, FIL_, + 0xC7, 0x99, FIL_, 0xCC, 0x81, FIL_, 0xC7, 0x97, + FIL_, 0x04, 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xA9, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBA, 0xA7, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xA5, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBA, 0xAB, FIL_, 0x01, 0xCC, + 0x84, FIL_, 0xC7, 0x9F, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xC7, 0xBB, FIL_, 0x02, 0xCC, 0x84, FIL_, + 0xC7, 0xA3, FIL_, 0xCC, 0x81, FIL_, 0xC7, 0xBD, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x89, + FIL_, 0x04, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x83, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xBF, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0x81, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBB, 0x85, FIL_, 0x01, 0xCC, + 0x81, FIL_, 0xE1, 0xB8, 0xAF, FIL_, 0x04, 0xCC, + 0x83, FIL_, 0xE1, 0xBB, 0x97, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0x95, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBB, 0x93, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBB, 0x91, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, + 0xB9, 0x8D, FIL_, 0xCC, 0x84, FIL_, 0xC8, 0xAD, + FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xB9, 0x8F, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xAB, FIL_, 0x01, + 0xCC, 0x81, FIL_, 0xC7, 0xBF, FIL_, 0x04, 0xCC, + 0x81, FIL_, 0xC7, 0x98, FIL_, 0xCC, 0x84, FIL_, + 0xC7, 0x96, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x9A, + FIL_, 0xCC, 0x80, FIL_, 0xC7, 0x9C, FIL_, 0x04, + 0xCC, 0x80, FIL_, 0xE1, 0xBA, 0xB0, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBA, 0xAE, FIL_, 0xCC, 0x83, + FIL_, 0xE1, 0xBA, 0xB4, FIL_, 0xCC, 0x89, FIL_, + 0xE1, 0xBA, 0xB2, FIL_, 0x04, 0xCC, 0x80, FIL_, + 0xE1, 0xBA, 0xB1, FIL_, 0xCC, 0x83, FIL_, 0xE1, + 0xBA, 0xB5, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, + 0xAF, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xB3, + FIL_, 0x02, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x96, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xB8, 0x94, FIL_, + 0x02, 0xCC, 0x80, FIL_, 0xE1, 0xB8, 0x95, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x97, FIL_, 0x02, + 0xCC, 0x80, FIL_, 0xE1, 0xB9, 0x90, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xB9, 0x92, FIL_, 0x02, 0xCC, + 0x80, FIL_, 0xE1, 0xB9, 0x91, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0x93, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA4, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA5, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA6, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA7, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0xB8, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0xB9, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xE1, 0xB9, 0xBA, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xE1, 0xB9, 0xBB, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xBA, 0x9B, FIL_, 0x05, 0xCC, 0x80, + FIL_, 0xE1, 0xBB, 0x9C, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBB, 0x9A, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xBB, 0xA2, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, + 0xA0, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x9E, + FIL_, 0x05, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0xA1, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBB, 0x9B, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xA3, FIL_, 0xCC, + 0x89, FIL_, 0xE1, 0xBB, 0x9F, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBB, 0x9D, FIL_, 0x05, 0xCC, 0x83, + FIL_, 0xE1, 0xBB, 0xAE, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xBB, 0xB0, FIL_, 0xCC, 0x89, FIL_, 0xE1, + 0xBB, 0xAC, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBB, + 0xA8, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0xAA, + FIL_, 0x05, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xB1, + FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0xAF, FIL_, + 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0xAD, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBB, 0xA9, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBB, 0xAB, FIL_, 0x01, 0xCC, 0x8C, + FIL_, 0xC7, 0xAE, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xC7, 0xAC, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, + 0xAD, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, 0xA0, + FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, 0xA1, FIL_, + 0x01, 0xCC, 0x86, FIL_, 0xE1, 0xB8, 0x9C, FIL_, + 0x01, 0xCC, 0x86, FIL_, 0xE1, 0xB8, 0x9D, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xB0, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xC8, 0xB1, FIL_, 0x01, 0xCC, + 0x8C, FIL_, 0xC7, 0xAF, FIL_, 0x07, 0xCC, 0x93, + FIL_, 0xE1, 0xBC, 0x88, FIL_, 0xCC, 0x94, FIL_, + 0xE1, 0xBC, 0x89, FIL_, 0xCC, 0x81, FIL_, 0xCE, + 0x86, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xBC, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBE, 0xBA, FIL_, + 0xCC, 0x84, FIL_, 0xE1, 0xBE, 0xB9, FIL_, 0xCC, + 0x86, FIL_, 0xE1, 0xBE, 0xB8, FIL_, 0x04, 0xCC, + 0x81, FIL_, 0xCE, 0x88, FIL_, 0xCC, 0x94, FIL_, + 0xE1, 0xBC, 0x99, FIL_, 0xCC, 0x93, FIL_, 0xE1, + 0xBC, 0x98, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, + 0x88, FIL_, 0x05, 0xCC, 0x94, FIL_, 0xE1, 0xBC, + 0xA9, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0x8A, + FIL_, 0xCC, 0x81, FIL_, 0xCE, 0x89, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBF, 0x8C, FIL_, 0xCC, 0x93, + FIL_, 0xE1, 0xBC, 0xA8, FIL_, 0x07, 0xCC, 0x81, + FIL_, 0xCE, 0x8A, FIL_, 0xCC, 0x88, FIL_, 0xCE, + 0xAA, FIL_, 0xCC, 0x86, FIL_, 0xE1, 0xBF, 0x98, + FIL_, 0xCC, 0x84, FIL_, 0xE1, 0xBF, 0x99, FIL_, + 0xCC, 0x93, FIL_, 0xE1, 0xBC, 0xB8, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBC, 0xB9, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBF, 0x9A, FIL_, 0x04, 0xCC, 0x94, + FIL_, 0xE1, 0xBD, 0x89, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBF, 0xB8, FIL_, 0xCC, 0x81, FIL_, 0xCE, + 0x8C, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBD, 0x88, + FIL_, 0x01, 0xCC, 0x94, FIL_, 0xE1, 0xBF, 0xAC, + FIL_, 0x06, 0xCC, 0x81, FIL_, 0xCE, 0x8E, FIL_, + 0xCC, 0x86, FIL_, 0xE1, 0xBF, 0xA8, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBD, 0x99, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBF, 0xAA, FIL_, 0xCC, 0x84, FIL_, + 0xE1, 0xBF, 0xA9, FIL_, 0xCC, 0x88, FIL_, 0xCE, + 0xAB, FIL_, 0x05, 0xCC, 0x80, FIL_, 0xE1, 0xBF, + 0xBA, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0x8F, FIL_, + 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xBC, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBD, 0xA9, FIL_, 0xCC, 0x93, + FIL_, 0xE1, 0xBD, 0xA8, FIL_, 0x01, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0xB4, FIL_, 0x01, 0xCD, 0x85, + FIL_, 0xE1, 0xBF, 0x84, FIL_, 0x08, 0xCC, 0x81, + FIL_, 0xCE, 0xAC, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBD, 0xB0, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBC, + 0x80, FIL_, 0xCC, 0x94, FIL_, 0xE1, 0xBC, 0x81, + FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBE, 0xB6, FIL_, + 0xCC, 0x86, FIL_, 0xE1, 0xBE, 0xB0, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xB3, FIL_, 0xCC, 0x84, + FIL_, 0xE1, 0xBE, 0xB1, FIL_, 0x04, 0xCC, 0x81, + FIL_, 0xCE, 0xAD, FIL_, 0xCC, 0x94, FIL_, 0xE1, + 0xBC, 0x91, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, + 0xB2, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBC, 0x90, + FIL_, 0x06, 0xCC, 0x81, FIL_, 0xCE, 0xAE, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xB4, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBF, 0x83, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x86, FIL_, 0xCC, 0x94, FIL_, + 0xE1, 0xBC, 0xA1, FIL_, 0xCC, 0x93, FIL_, 0xE1, + 0xBC, 0xA0, FIL_, 0x08, 0xCD, 0x82, FIL_, 0xE1, + 0xBF, 0x96, FIL_, 0xCC, 0x86, FIL_, 0xE1, 0xBF, + 0x90, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBC, 0xB0, + FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xAF, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBC, 0xB1, FIL_, 0xCC, 0x84, + FIL_, 0xE1, 0xBF, 0x91, FIL_, 0xCC, 0x88, FIL_, + 0xCF, 0x8A, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, + 0xB6, FIL_, 0x04, 0xCC, 0x81, FIL_, 0xCF, 0x8C, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xB8, FIL_, + 0xCC, 0x93, FIL_, 0xE1, 0xBD, 0x80, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBD, 0x81, FIL_, 0x02, 0xCC, + 0x93, FIL_, 0xE1, 0xBF, 0xA4, FIL_, 0xCC, 0x94, + FIL_, 0xE1, 0xBF, 0xA5, FIL_, 0x08, 0xCC, 0x93, + FIL_, 0xE1, 0xBD, 0x90, FIL_, 0xCC, 0x94, FIL_, + 0xE1, 0xBD, 0x91, FIL_, 0xCC, 0x86, FIL_, 0xE1, + 0xBF, 0xA0, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, + 0xA6, FIL_, 0xCC, 0x84, FIL_, 0xE1, 0xBF, 0xA1, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xBA, FIL_, + 0xCC, 0x81, FIL_, 0xCF, 0x8D, FIL_, 0xCC, 0x88, + FIL_, 0xCF, 0x8B, FIL_, 0x06, 0xCC, 0x94, FIL_, + 0xE1, 0xBD, 0xA1, FIL_, 0xCD, 0x85, FIL_, 0xE1, + 0xBF, 0xB3, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, + 0xBC, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, 0xB6, + FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBD, 0xA0, FIL_, + 0xCC, 0x81, FIL_, 0xCF, 0x8E, FIL_, 0x03, 0xCD, + 0x82, FIL_, 0xE1, 0xBF, 0x97, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBF, 0x92, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x90, FIL_, 0x03, 0xCC, 0x80, FIL_, 0xE1, + 0xBF, 0xA2, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xB0, + FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, 0xA7, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xB4, FIL_, + 0x02, 0xCC, 0x88, FIL_, 0xCF, 0x94, FIL_, 0xCC, + 0x81, FIL_, 0xCF, 0x93, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD0, 0x87, FIL_, 0x02, 0xCC, 0x86, FIL_, + 0xD3, 0x90, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0x92, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xD0, 0x83, FIL_, + 0x03, 0xCC, 0x86, FIL_, 0xD3, 0x96, FIL_, 0xCC, + 0x80, FIL_, 0xD0, 0x80, FIL_, 0xCC, 0x88, FIL_, + 0xD0, 0x81, FIL_, 0x02, 0xCC, 0x88, FIL_, 0xD3, + 0x9C, FIL_, 0xCC, 0x86, FIL_, 0xD3, 0x81, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9E, FIL_, 0x04, + 0xCC, 0x80, FIL_, 0xD0, 0x8D, FIL_, 0xCC, 0x88, + FIL_, 0xD3, 0xA4, FIL_, 0xCC, 0x86, FIL_, 0xD0, + 0x99, FIL_, 0xCC, 0x84, FIL_, 0xD3, 0xA2, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xD0, 0x8C, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xA6, FIL_, 0x04, 0xCC, + 0x86, FIL_, 0xD0, 0x8E, FIL_, 0xCC, 0x8B, FIL_, + 0xD3, 0xB2, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0xB0, + FIL_, 0xCC, 0x84, FIL_, 0xD3, 0xAE, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xB4, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xB8, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD3, 0xAC, FIL_, 0x02, 0xCC, 0x86, FIL_, + 0xD3, 0x91, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0x93, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xD1, 0x93, FIL_, + 0x03, 0xCC, 0x80, FIL_, 0xD1, 0x90, FIL_, 0xCC, + 0x88, FIL_, 0xD1, 0x91, FIL_, 0xCC, 0x86, FIL_, + 0xD3, 0x97, FIL_, 0x02, 0xCC, 0x88, FIL_, 0xD3, + 0x9D, FIL_, 0xCC, 0x86, FIL_, 0xD3, 0x82, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9F, FIL_, 0x04, + 0xCC, 0x88, FIL_, 0xD3, 0xA5, FIL_, 0xCC, 0x86, + FIL_, 0xD0, 0xB9, FIL_, 0xCC, 0x80, FIL_, 0xD1, + 0x9D, FIL_, 0xCC, 0x84, FIL_, 0xD3, 0xA3, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xD1, 0x9C, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xA7, FIL_, 0x04, 0xCC, + 0x84, FIL_, 0xD3, 0xAF, FIL_, 0xCC, 0x86, FIL_, + 0xD1, 0x9E, FIL_, 0xCC, 0x8B, FIL_, 0xD3, 0xB3, + FIL_, 0xCC, 0x88, FIL_, 0xD3, 0xB1, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xB5, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xB9, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD3, 0xAD, FIL_, 0x01, 0xCC, 0x88, FIL_, + 0xD1, 0x97, FIL_, 0x01, 0xCC, 0x8F, FIL_, 0xD1, + 0xB6, FIL_, 0x01, 0xCC, 0x8F, FIL_, 0xD1, 0xB7, + FIL_, 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9A, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9B, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xAA, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xAB, FIL_, 0x03, 0xD9, 0x94, + FIL_, 0xD8, 0xA3, FIL_, 0xD9, 0x93, FIL_, 0xD8, + 0xA2, FIL_, 0xD9, 0x95, FIL_, 0xD8, 0xA5, FIL_, + 0x01, 0xD9, 0x94, FIL_, 0xD8, 0xA4, FIL_, 0x01, + 0xD9, 0x94, FIL_, 0xD8, 0xA6, FIL_, 0x01, 0xD9, + 0x94, FIL_, 0xDB, 0x82, FIL_, 0x01, 0xD9, 0x94, + FIL_, 0xDB, 0x93, FIL_, 0x01, 0xD9, 0x94, FIL_, + 0xDB, 0x80, FIL_, 0x01, 0xE0, 0xA4, 0xBC, FIL_, + 0xE0, 0xA4, 0xA9, FIL_, 0x01, 0xE0, 0xA4, 0xBC, + FIL_, 0xE0, 0xA4, 0xB1, FIL_, 0x01, 0xE0, 0xA4, + 0xBC, FIL_, 0xE0, 0xA4, 0xB4, FIL_, 0x02, 0xE0, + 0xA6, 0xBE, FIL_, 0xE0, 0xA7, 0x8B, FIL_, 0xE0, + 0xA7, 0x97, FIL_, 0xE0, 0xA7, 0x8C, FIL_, 0x03, + 0xE0, 0xAD, 0x97, FIL_, 0xE0, 0xAD, 0x8C, FIL_, + 0xE0, 0xAC, 0xBE, FIL_, 0xE0, 0xAD, 0x8B, FIL_, + 0xE0, 0xAD, 0x96, FIL_, 0xE0, 0xAD, 0x88, FIL_, + 0x01, 0xE0, 0xAF, 0x97, FIL_, 0xE0, 0xAE, 0x94, + FIL_, 0x02, 0xE0, 0xAE, 0xBE, FIL_, 0xE0, 0xAF, + 0x8A, FIL_, 0xE0, 0xAF, 0x97, FIL_, 0xE0, 0xAF, + 0x8C, FIL_, 0x01, 0xE0, 0xAE, 0xBE, FIL_, 0xE0, + 0xAF, 0x8B, FIL_, 0x01, 0xE0, 0xB1, 0x96, FIL_, + 0xE0, 0xB1, 0x88, FIL_, 0x01, 0xE0, 0xB3, 0x95, + FIL_, 0xE0, 0xB3, 0x80, FIL_, 0x03, 0xE0, 0xB3, + 0x95, FIL_, 0xE0, 0xB3, 0x87, FIL_, 0xE0, 0xB3, + 0x82, FIL_, 0xE0, 0xB3, 0x8A, FIL_, 0xE0, 0xB3, + 0x96, FIL_, 0xE0, 0xB3, 0x88, FIL_, 0x01, 0xE0, + 0xB3, 0x95, FIL_, 0xE0, 0xB3, 0x8B, FIL_, 0x02, + 0xE0, 0xB4, 0xBE, FIL_, 0xE0, 0xB5, 0x8A, FIL_, + 0xE0, 0xB5, 0x97, FIL_, 0xE0, 0xB5, 0x8C, FIL_, + 0x01, 0xE0, 0xB4, 0xBE, FIL_, 0xE0, 0xB5, 0x8B, + FIL_, 0x03, 0xE0, 0xB7, 0x8F, FIL_, 0xE0, 0xB7, + 0x9C, FIL_, 0xE0, 0xB7, 0x8A, FIL_, 0xE0, 0xB7, + 0x9A, FIL_, 0xE0, 0xB7, 0x9F, FIL_, 0xE0, 0xB7, + 0x9E, FIL_, 0x01, 0xE0, 0xB7, 0x8A, FIL_, 0xE0, + 0xB7, 0x9D, FIL_, 0x01, 0xE1, 0x80, 0xAE, FIL_, + 0xE1, 0x80, 0xA6, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xE1, 0xB8, 0xB8, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xE1, 0xB8, 0xB9, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xE1, 0xB9, 0x9C, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xE1, 0xB9, 0x9D, FIL_, 0x01, 0xCC, 0x87, FIL_, + 0xE1, 0xB9, 0xA8, FIL_, 0x01, 0xCC, 0x87, FIL_, + 0xE1, 0xB9, 0xA9, FIL_, 0x02, 0xCC, 0x86, FIL_, + 0xE1, 0xBA, 0xB6, FIL_, 0xCC, 0x82, FIL_, 0xE1, + 0xBA, 0xAC, FIL_, 0x02, 0xCC, 0x86, FIL_, 0xE1, + 0xBA, 0xB7, FIL_, 0xCC, 0x82, FIL_, 0xE1, 0xBA, + 0xAD, FIL_, 0x01, 0xCC, 0x82, FIL_, 0xE1, 0xBB, + 0x86, FIL_, 0x01, 0xCC, 0x82, FIL_, 0xE1, 0xBB, + 0x87, FIL_, 0x01, 0xCC, 0x82, FIL_, 0xE1, 0xBB, + 0x98, FIL_, 0x01, 0xCC, 0x82, FIL_, 0xE1, 0xBB, + 0x99, FIL_, 0x04, 0xCC, 0x80, FIL_, 0xE1, 0xBC, + 0x82, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x84, + FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x80, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0x86, FIL_, 0x04, + 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0x87, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0x83, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBC, 0x85, FIL_, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x81, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x82, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x83, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x84, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x85, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x86, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x87, FIL_, 0x04, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x88, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBC, 0x8A, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBC, + 0x8E, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x8C, + FIL_, 0x04, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x8D, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0x8B, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0x8F, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x89, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8A, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8B, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8C, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8D, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8E, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x8F, FIL_, 0x02, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0x92, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBC, 0x94, FIL_, 0x02, 0xCC, 0x80, + FIL_, 0xE1, 0xBC, 0x93, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBC, 0x95, FIL_, 0x02, 0xCC, 0x80, FIL_, + 0xE1, 0xBC, 0x9A, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBC, 0x9C, FIL_, 0x02, 0xCC, 0x80, FIL_, 0xE1, + 0xBC, 0x9B, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, + 0x9D, FIL_, 0x04, 0xCD, 0x82, FIL_, 0xE1, 0xBC, + 0xA6, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x90, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xA4, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xA2, FIL_, 0x04, + 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xA3, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBC, 0xA5, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBC, 0xA7, FIL_, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x91, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x92, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x93, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x94, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x95, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x96, FIL_, 0x01, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0x97, FIL_, 0x04, 0xCD, 0x82, FIL_, + 0xE1, 0xBC, 0xAE, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBC, 0xAC, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, + 0x98, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xAA, + FIL_, 0x04, 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0xAF, + FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x99, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xAD, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0xAB, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9A, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9B, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9C, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9D, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9E, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0x9F, FIL_, 0x03, 0xCC, + 0x81, FIL_, 0xE1, 0xBC, 0xB4, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBC, 0xB6, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBC, 0xB2, FIL_, 0x03, 0xCC, 0x81, FIL_, + 0xE1, 0xBC, 0xB5, FIL_, 0xCD, 0x82, FIL_, 0xE1, + 0xBC, 0xB7, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, + 0xB3, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, 0xBC, + 0xBC, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xBA, + FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0xBE, FIL_, + 0x03, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xBB, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0xBF, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBC, 0xBD, FIL_, 0x02, 0xCC, + 0x80, FIL_, 0xE1, 0xBD, 0x82, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBD, 0x84, FIL_, 0x02, 0xCC, 0x80, + FIL_, 0xE1, 0xBD, 0x83, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBD, 0x85, FIL_, 0x02, 0xCC, 0x81, FIL_, + 0xE1, 0xBD, 0x8C, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBD, 0x8A, FIL_, 0x02, 0xCC, 0x81, FIL_, 0xE1, + 0xBD, 0x8D, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, + 0x8B, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, 0xBD, + 0x94, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0x96, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0x92, FIL_, + 0x03, 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0x97, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0x95, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBD, 0x93, FIL_, 0x03, 0xCC, + 0x81, FIL_, 0xE1, 0xBD, 0x9D, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBD, 0x9F, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBD, 0x9B, FIL_, 0x04, 0xCC, 0x81, FIL_, + 0xE1, 0xBD, 0xA4, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBD, 0xA2, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBD, + 0xA6, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA0, + FIL_, 0x04, 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0xA7, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0xA5, FIL_, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA1, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBD, 0xA3, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA2, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA3, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA4, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA5, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA6, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA7, FIL_, 0x04, 0xCC, + 0x81, FIL_, 0xE1, 0xBD, 0xAC, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBD, 0xAA, FIL_, 0xCD, 0x82, FIL_, + 0xE1, 0xBD, 0xAE, FIL_, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xA8, FIL_, 0x04, 0xCC, 0x81, FIL_, 0xE1, + 0xBD, 0xAD, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, + 0xA9, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0xAF, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xAB, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAA, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAB, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAC, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAD, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAE, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xAF, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xB2, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0x82, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xB2, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xB7, FIL_, + 0x03, 0xCD, 0x82, FIL_, 0xE1, 0xBF, 0x8F, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0x8D, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBF, 0x8E, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBF, 0x87, FIL_, 0x01, 0xCD, + 0x85, FIL_, 0xE1, 0xBF, 0xB7, FIL_, 0x03, 0xCC, + 0x80, FIL_, 0xE1, 0xBF, 0x9D, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x9F, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBF, 0x9E, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x86, 0x9A, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x86, 0x9B, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x86, 0xAE, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x87, 0x8D, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x87, 0x8F, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x87, 0x8E, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x88, 0x84, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x88, 0x89, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x88, 0x8C, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x88, 0xA4, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x88, 0xA6, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0x81, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0x84, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0x87, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0x89, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xAD, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xA2, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB0, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB1, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB4, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB5, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB8, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x89, 0xB9, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x80, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x81, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xA0, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xA1, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x84, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x85, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x88, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0x89, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xA2, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xA3, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0xAC, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0xAD, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0xAE, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8A, 0xAF, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xAA, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xAB, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xAC, FIL_, 0x01, 0xCC, 0xB8, FIL_, + 0xE2, 0x8B, 0xAD, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x82, 0x94, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x81, 0x8C, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x81, 0x8E, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0x90, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0x92, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, + 0x94, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x81, 0x96, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x81, 0x98, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x81, 0x9A, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x81, 0x9C, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x81, 0x9E, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xA0, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xA2, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, + 0xA5, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x81, 0xA7, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x81, 0xA9, FIL_, 0x02, 0xE3, 0x82, 0x9A, + FIL_, 0xE3, 0x81, 0xB1, FIL_, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x81, 0xB0, FIL_, 0x02, 0xE3, 0x82, + 0x9A, FIL_, 0xE3, 0x81, 0xB4, FIL_, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x81, 0xB3, FIL_, 0x02, 0xE3, + 0x82, 0x9A, FIL_, 0xE3, 0x81, 0xB7, FIL_, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x81, 0xB6, FIL_, 0x02, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xB9, FIL_, + 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x81, 0xBA, FIL_, + 0x02, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xBC, + FIL_, 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x81, 0xBD, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, + 0x9E, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x83, 0xB4, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x82, 0xAC, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x82, 0xAE, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x82, 0xB0, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x82, 0xB2, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0xB4, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0xB6, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, + 0xB8, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x82, 0xBA, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x82, 0xBC, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x82, 0xBE, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x83, 0x80, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x83, 0x82, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0x85, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0x87, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, + 0x89, FIL_, 0x02, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x83, 0x90, FIL_, 0xE3, 0x82, 0x9A, FIL_, 0xE3, + 0x83, 0x91, FIL_, 0x02, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x83, 0x93, FIL_, 0xE3, 0x82, 0x9A, FIL_, + 0xE3, 0x83, 0x94, FIL_, 0x02, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x83, 0x96, FIL_, 0xE3, 0x82, 0x9A, + FIL_, 0xE3, 0x83, 0x97, FIL_, 0x02, 0xE3, 0x82, + 0x9A, FIL_, 0xE3, 0x83, 0x9A, FIL_, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x83, 0x99, FIL_, 0x02, 0xE3, + 0x82, 0x9A, FIL_, 0xE3, 0x83, 0x9D, FIL_, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x83, 0x9C, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0xB7, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0xB8, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, + 0xB9, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x83, 0xBA, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x83, 0xBE, FIL_, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, + }, + { + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_, + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_, + 0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAF, FIL_, + 0x10, 0xCC, 0xA5, FIL_, 0xE1, 0xB8, 0x80, FIL_, + 0xCC, 0x87, FIL_, 0xC8, 0xA6, FIL_, 0xCC, 0x83, + FIL_, 0xC3, 0x83, FIL_, 0xCC, 0x91, FIL_, 0xC8, + 0x82, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x80, FIL_, + 0xCC, 0x8A, FIL_, 0xC3, 0x85, FIL_, 0xCC, 0x88, + FIL_, 0xC3, 0x84, FIL_, 0xCC, 0x89, FIL_, 0xE1, + 0xBA, 0xA2, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, + 0xA0, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x8D, FIL_, + 0xCC, 0x80, FIL_, 0xC3, 0x80, FIL_, 0xCC, 0x81, + FIL_, 0xC3, 0x81, FIL_, 0xCC, 0x82, FIL_, 0xC3, + 0x82, FIL_, 0xCC, 0xA8, FIL_, 0xC4, 0x84, FIL_, + 0xCC, 0x86, FIL_, 0xC4, 0x82, FIL_, 0xCC, 0x84, + FIL_, 0xC4, 0x80, FIL_, 0x03, 0xCC, 0xB1, FIL_, + 0xE1, 0xB8, 0x86, FIL_, 0xCC, 0x87, FIL_, 0xE1, + 0xB8, 0x82, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0x84, FIL_, 0x05, 0xCC, 0xA7, FIL_, 0xC3, 0x87, + FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0x8C, FIL_, 0xCC, + 0x81, FIL_, 0xC4, 0x86, FIL_, 0xCC, 0x82, FIL_, + 0xC4, 0x88, FIL_, 0xCC, 0x87, FIL_, 0xC4, 0x8A, + FIL_, 0x06, 0xCC, 0xA7, FIL_, 0xE1, 0xB8, 0x90, + FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0x8E, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB8, 0x8E, FIL_, 0xCC, 0xAD, + FIL_, 0xE1, 0xB8, 0x92, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xB8, 0x8C, FIL_, 0xCC, 0x87, FIL_, 0xE1, + 0xB8, 0x8A, FIL_, 0x11, 0xCC, 0x84, FIL_, 0xC4, + 0x92, FIL_, 0xCC, 0x86, FIL_, 0xC4, 0x94, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0xB8, FIL_, 0xCC, + 0x91, FIL_, 0xC8, 0x86, FIL_, 0xCC, 0x82, FIL_, + 0xC3, 0x8A, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x84, + FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0x98, FIL_, + 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xBA, FIL_, 0xCC, + 0xA7, FIL_, 0xC8, 0xA8, FIL_, 0xCC, 0x8C, FIL_, + 0xC4, 0x9A, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0x88, + FIL_, 0xCC, 0xA8, FIL_, 0xC4, 0x98, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBA, 0xBC, FIL_, 0xCC, 0x87, + FIL_, 0xC4, 0x96, FIL_, 0xCC, 0x81, FIL_, 0xC3, + 0x89, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0x8B, FIL_, + 0xCC, 0xB0, FIL_, 0xE1, 0xB8, 0x9A, FIL_, 0x01, + 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0x9E, FIL_, 0x07, + 0xCC, 0x8C, FIL_, 0xC7, 0xA6, FIL_, 0xCC, 0x86, + FIL_, 0xC4, 0x9E, FIL_, 0xCC, 0x82, FIL_, 0xC4, + 0x9C, FIL_, 0xCC, 0xA7, FIL_, 0xC4, 0xA2, FIL_, + 0xCC, 0x84, FIL_, 0xE1, 0xB8, 0xA0, FIL_, 0xCC, + 0x81, FIL_, 0xC7, 0xB4, FIL_, 0xCC, 0x87, FIL_, + 0xC4, 0xA0, FIL_, 0x07, 0xCC, 0x87, FIL_, 0xE1, + 0xB8, 0xA2, FIL_, 0xCC, 0xA7, FIL_, 0xE1, 0xB8, + 0xA8, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0xA4, FIL_, + 0xCC, 0x88, FIL_, 0xE1, 0xB8, 0xA6, FIL_, 0xCC, + 0x8C, FIL_, 0xC8, 0x9E, FIL_, 0xCC, 0xAE, FIL_, + 0xE1, 0xB8, 0xAA, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB8, 0xA4, FIL_, 0x0F, 0xCC, 0xB0, FIL_, 0xE1, + 0xB8, 0xAC, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x8F, + FIL_, 0xCC, 0x80, FIL_, 0xC3, 0x8C, FIL_, 0xCC, + 0x89, FIL_, 0xE1, 0xBB, 0x88, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xBB, 0x8A, FIL_, 0xCC, 0x91, FIL_, + 0xC8, 0x8A, FIL_, 0xCC, 0x88, FIL_, 0xC3, 0x8F, + FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x8E, FIL_, 0xCC, + 0x81, FIL_, 0xC3, 0x8D, FIL_, 0xCC, 0x83, FIL_, + 0xC4, 0xA8, FIL_, 0xCC, 0x87, FIL_, 0xC4, 0xB0, + FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x88, FIL_, 0xCC, + 0xA8, FIL_, 0xC4, 0xAE, FIL_, 0xCC, 0x86, FIL_, + 0xC4, 0xAC, FIL_, 0xCC, 0x84, FIL_, 0xC4, 0xAA, + FIL_, 0x01, 0xCC, 0x82, FIL_, 0xC4, 0xB4, FIL_, + 0x05, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xB0, FIL_, + 0xCC, 0x8C, FIL_, 0xC7, 0xA8, FIL_, 0xCC, 0xB1, + FIL_, 0xE1, 0xB8, 0xB4, FIL_, 0xCC, 0xA7, FIL_, + 0xC4, 0xB6, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB2, FIL_, 0x06, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB6, FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0xBD, FIL_, + 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0xBC, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB8, 0xBA, FIL_, 0xCC, 0xA7, + FIL_, 0xC4, 0xBB, FIL_, 0xCC, 0x81, FIL_, 0xC4, + 0xB9, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, 0xB8, + 0xBE, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0x80, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x82, FIL_, + 0x09, 0xCC, 0x83, FIL_, 0xC3, 0x91, FIL_, 0xCC, + 0x81, FIL_, 0xC5, 0x83, FIL_, 0xCC, 0xA7, FIL_, + 0xC5, 0x85, FIL_, 0xCC, 0x8C, FIL_, 0xC5, 0x87, + FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0x84, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x86, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB9, 0x88, FIL_, 0xCC, 0xAD, + FIL_, 0xE1, 0xB9, 0x8A, FIL_, 0xCC, 0x80, FIL_, + 0xC7, 0xB8, FIL_, 0x10, 0xCC, 0x89, FIL_, 0xE1, + 0xBB, 0x8E, FIL_, 0xCC, 0x84, FIL_, 0xC5, 0x8C, + FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x94, FIL_, 0xCC, + 0x86, FIL_, 0xC5, 0x8E, FIL_, 0xCC, 0x83, FIL_, + 0xC3, 0x95, FIL_, 0xCC, 0x8B, FIL_, 0xC5, 0x90, + FIL_, 0xCC, 0x88, FIL_, 0xC3, 0x96, FIL_, 0xCC, + 0x9B, FIL_, 0xC6, 0xA0, FIL_, 0xCC, 0x91, FIL_, + 0xC8, 0x8E, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x91, + FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x8C, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBB, 0x8C, FIL_, 0xCC, 0x80, + FIL_, 0xC3, 0x92, FIL_, 0xCC, 0xA8, FIL_, 0xC7, + 0xAA, FIL_, 0xCC, 0x87, FIL_, 0xC8, 0xAE, FIL_, + 0xCC, 0x81, FIL_, 0xC3, 0x93, FIL_, 0x02, 0xCC, + 0x87, FIL_, 0xE1, 0xB9, 0x96, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0x94, FIL_, 0x08, 0xCC, 0xA7, + FIL_, 0xC5, 0x96, FIL_, 0xCC, 0x8C, FIL_, 0xC5, + 0x98, FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x92, FIL_, + 0xCC, 0x8F, FIL_, 0xC8, 0x90, FIL_, 0xCC, 0x81, + FIL_, 0xC5, 0x94, FIL_, 0xCC, 0x87, FIL_, 0xE1, + 0xB9, 0x98, FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB9, + 0x9E, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x9A, + FIL_, 0x07, 0xCC, 0xA6, FIL_, 0xC8, 0x98, FIL_, + 0xCC, 0x81, FIL_, 0xC5, 0x9A, FIL_, 0xCC, 0x82, + FIL_, 0xC5, 0x9C, FIL_, 0xCC, 0xA7, FIL_, 0xC5, + 0x9E, FIL_, 0xCC, 0x8C, FIL_, 0xC5, 0xA0, FIL_, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xA0, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xB9, 0xA2, FIL_, 0x07, 0xCC, + 0xA6, FIL_, 0xC8, 0x9A, FIL_, 0xCC, 0x87, FIL_, + 0xE1, 0xB9, 0xAA, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB9, 0xAC, FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB9, + 0xAE, FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB9, 0xB0, + FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0xA2, FIL_, 0xCC, + 0x8C, FIL_, 0xC5, 0xA4, FIL_, 0x13, 0xCC, 0x8A, + FIL_, 0xC5, 0xAE, FIL_, 0xCC, 0x88, FIL_, 0xC3, + 0x9C, FIL_, 0xCC, 0x8B, FIL_, 0xC5, 0xB0, FIL_, + 0xCC, 0xAD, FIL_, 0xE1, 0xB9, 0xB6, FIL_, 0xCC, + 0xA8, FIL_, 0xC5, 0xB2, FIL_, 0xCC, 0x8C, FIL_, + 0xC7, 0x93, FIL_, 0xCC, 0x80, FIL_, 0xC3, 0x99, + FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x94, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBB, 0xA4, FIL_, 0xCC, 0xA4, + FIL_, 0xE1, 0xB9, 0xB2, FIL_, 0xCC, 0x81, FIL_, + 0xC3, 0x9A, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0x9B, + FIL_, 0xCC, 0xB0, FIL_, 0xE1, 0xB9, 0xB4, FIL_, + 0xCC, 0x83, FIL_, 0xC5, 0xA8, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0xA6, FIL_, 0xCC, 0x84, FIL_, + 0xC5, 0xAA, FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x96, + FIL_, 0xCC, 0x86, FIL_, 0xC5, 0xAC, FIL_, 0xCC, + 0x9B, FIL_, 0xC6, 0xAF, FIL_, 0x02, 0xCC, 0xA3, + FIL_, 0xE1, 0xB9, 0xBE, FIL_, 0xCC, 0x83, FIL_, + 0xE1, 0xB9, 0xBC, FIL_, 0x06, 0xCC, 0x88, FIL_, + 0xE1, 0xBA, 0x84, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBA, 0x82, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBA, + 0x80, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0x88, + FIL_, 0xCC, 0x82, FIL_, 0xC5, 0xB4, FIL_, 0xCC, + 0x87, FIL_, 0xE1, 0xBA, 0x86, FIL_, 0x02, 0xCC, + 0x88, FIL_, 0xE1, 0xBA, 0x8C, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xBA, 0x8A, FIL_, 0x09, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0xB6, FIL_, 0xCC, 0xA3, FIL_, + 0xE1, 0xBB, 0xB4, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBB, 0xB2, FIL_, 0xCC, 0x88, FIL_, 0xC5, 0xB8, + FIL_, 0xCC, 0x81, FIL_, 0xC3, 0x9D, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBB, 0xB8, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xBA, 0x8E, FIL_, 0xCC, 0x84, FIL_, + 0xC8, 0xB2, FIL_, 0xCC, 0x82, FIL_, 0xC5, 0xB6, + FIL_, 0x06, 0xCC, 0x82, FIL_, 0xE1, 0xBA, 0x90, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0x92, FIL_, + 0xCC, 0xB1, FIL_, 0xE1, 0xBA, 0x94, FIL_, 0xCC, + 0x8C, FIL_, 0xC5, 0xBD, FIL_, 0xCC, 0x87, FIL_, + 0xC5, 0xBB, FIL_, 0xCC, 0x81, FIL_, 0xC5, 0xB9, + FIL_, 0x10, 0xCC, 0xA3, FIL_, 0xE1, 0xBA, 0xA1, + FIL_, 0xCC, 0xA8, FIL_, 0xC4, 0x85, FIL_, 0xCC, + 0x81, FIL_, 0xC3, 0xA1, FIL_, 0xCC, 0x82, FIL_, + 0xC3, 0xA2, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, + 0xA3, FIL_, 0xCC, 0x83, FIL_, 0xC3, 0xA3, FIL_, + 0xCC, 0x8C, FIL_, 0xC7, 0x8E, FIL_, 0xCC, 0x8A, + FIL_, 0xC3, 0xA5, FIL_, 0xCC, 0x88, FIL_, 0xC3, + 0xA4, FIL_, 0xCC, 0x87, FIL_, 0xC8, 0xA7, FIL_, + 0xCC, 0x91, FIL_, 0xC8, 0x83, FIL_, 0xCC, 0xA5, + FIL_, 0xE1, 0xB8, 0x81, FIL_, 0xCC, 0x84, FIL_, + 0xC4, 0x81, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x81, + FIL_, 0xCC, 0x86, FIL_, 0xC4, 0x83, FIL_, 0xCC, + 0x80, FIL_, 0xC3, 0xA0, FIL_, 0x03, 0xCC, 0xA3, + FIL_, 0xE1, 0xB8, 0x85, FIL_, 0xCC, 0x87, FIL_, + 0xE1, 0xB8, 0x83, FIL_, 0xCC, 0xB1, FIL_, 0xE1, + 0xB8, 0x87, FIL_, 0x05, 0xCC, 0x87, FIL_, 0xC4, + 0x8B, FIL_, 0xCC, 0x8C, FIL_, 0xC4, 0x8D, FIL_, + 0xCC, 0x82, FIL_, 0xC4, 0x89, FIL_, 0xCC, 0x81, + FIL_, 0xC4, 0x87, FIL_, 0xCC, 0xA7, FIL_, 0xC3, + 0xA7, FIL_, 0x06, 0xCC, 0x87, FIL_, 0xE1, 0xB8, + 0x8B, FIL_, 0xCC, 0xA7, FIL_, 0xE1, 0xB8, 0x91, + FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB8, 0x8F, FIL_, + 0xCC, 0xA3, FIL_, 0xE1, 0xB8, 0x8D, FIL_, 0xCC, + 0x8C, FIL_, 0xC4, 0x8F, FIL_, 0xCC, 0xAD, FIL_, + 0xE1, 0xB8, 0x93, FIL_, 0x11, 0xCC, 0x80, FIL_, + 0xC3, 0xA8, FIL_, 0xCC, 0x81, FIL_, 0xC3, 0xA9, + FIL_, 0xCC, 0x82, FIL_, 0xC3, 0xAA, FIL_, 0xCC, + 0x88, FIL_, 0xC3, 0xAB, FIL_, 0xCC, 0x84, FIL_, + 0xC4, 0x93, FIL_, 0xCC, 0x86, FIL_, 0xC4, 0x95, + FIL_, 0xCC, 0x87, FIL_, 0xC4, 0x97, FIL_, 0xCC, + 0xA8, FIL_, 0xC4, 0x99, FIL_, 0xCC, 0x8C, FIL_, + 0xC4, 0x9B, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x85, + FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x87, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBA, 0xB9, FIL_, 0xCC, 0xA7, + FIL_, 0xC8, 0xA9, FIL_, 0xCC, 0x83, FIL_, 0xE1, + 0xBA, 0xBD, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, + 0xBB, FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0x99, + FIL_, 0xCC, 0xB0, FIL_, 0xE1, 0xB8, 0x9B, FIL_, + 0x01, 0xCC, 0x87, FIL_, 0xE1, 0xB8, 0x9F, FIL_, + 0x07, 0xCC, 0x86, FIL_, 0xC4, 0x9F, FIL_, 0xCC, + 0x87, FIL_, 0xC4, 0xA1, FIL_, 0xCC, 0x82, FIL_, + 0xC4, 0x9D, FIL_, 0xCC, 0x84, FIL_, 0xE1, 0xB8, + 0xA1, FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0xA7, FIL_, + 0xCC, 0xA7, FIL_, 0xC4, 0xA3, FIL_, 0xCC, 0x81, + FIL_, 0xC7, 0xB5, FIL_, 0x08, 0xCC, 0xA7, FIL_, + 0xE1, 0xB8, 0xA9, FIL_, 0xCC, 0xB1, FIL_, 0xE1, + 0xBA, 0x96, FIL_, 0xCC, 0x8C, FIL_, 0xC8, 0x9F, + FIL_, 0xCC, 0xAE, FIL_, 0xE1, 0xB8, 0xAB, FIL_, + 0xCC, 0x88, FIL_, 0xE1, 0xB8, 0xA7, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xB8, 0xA5, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB8, 0xA3, FIL_, 0xCC, 0x82, FIL_, + 0xC4, 0xA5, FIL_, 0x0E, 0xCC, 0x88, FIL_, 0xC3, + 0xAF, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x89, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0x8B, FIL_, + 0xCC, 0x82, FIL_, 0xC3, 0xAE, FIL_, 0xCC, 0x81, + FIL_, 0xC3, 0xAD, FIL_, 0xCC, 0x80, FIL_, 0xC3, + 0xAC, FIL_, 0xCC, 0x83, FIL_, 0xC4, 0xA9, FIL_, + 0xCC, 0x84, FIL_, 0xC4, 0xAB, FIL_, 0xCC, 0x86, + FIL_, 0xC4, 0xAD, FIL_, 0xCC, 0xA8, FIL_, 0xC4, + 0xAF, FIL_, 0xCC, 0xB0, FIL_, 0xE1, 0xB8, 0xAD, + FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x90, FIL_, 0xCC, + 0x91, FIL_, 0xC8, 0x8B, FIL_, 0xCC, 0x8F, FIL_, + 0xC8, 0x89, FIL_, 0x02, 0xCC, 0x8C, FIL_, 0xC7, + 0xB0, FIL_, 0xCC, 0x82, FIL_, 0xC4, 0xB5, FIL_, + 0x05, 0xCC, 0xB1, FIL_, 0xE1, 0xB8, 0xB5, FIL_, + 0xCC, 0xA7, FIL_, 0xC4, 0xB7, FIL_, 0xCC, 0x8C, + FIL_, 0xC7, 0xA9, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xB8, 0xB1, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB3, FIL_, 0x06, 0xCC, 0xA3, FIL_, 0xE1, 0xB8, + 0xB7, FIL_, 0xCC, 0xAD, FIL_, 0xE1, 0xB8, 0xBD, + FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB8, 0xBB, FIL_, + 0xCC, 0xA7, FIL_, 0xC4, 0xBC, FIL_, 0xCC, 0x81, + FIL_, 0xC4, 0xBA, FIL_, 0xCC, 0x8C, FIL_, 0xC4, + 0xBE, FIL_, 0x03, 0xCC, 0x87, FIL_, 0xE1, 0xB9, + 0x81, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x83, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xBF, FIL_, + 0x09, 0xCC, 0x80, FIL_, 0xC7, 0xB9, FIL_, 0xCC, + 0xAD, FIL_, 0xE1, 0xB9, 0x8B, FIL_, 0xCC, 0x83, + FIL_, 0xC3, 0xB1, FIL_, 0xCC, 0x81, FIL_, 0xC5, + 0x84, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0x87, + FIL_, 0xCC, 0xB1, FIL_, 0xE1, 0xB9, 0x89, FIL_, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0x85, FIL_, 0xCC, + 0xA7, FIL_, 0xC5, 0x86, FIL_, 0xCC, 0x8C, FIL_, + 0xC5, 0x88, FIL_, 0x10, 0xCC, 0xA3, FIL_, 0xE1, + 0xBB, 0x8D, FIL_, 0xCC, 0x87, FIL_, 0xC8, 0xAF, + FIL_, 0xCC, 0x80, FIL_, 0xC3, 0xB2, FIL_, 0xCC, + 0x91, FIL_, 0xC8, 0x8F, FIL_, 0xCC, 0x89, FIL_, + 0xE1, 0xBB, 0x8F, FIL_, 0xCC, 0x88, FIL_, 0xC3, + 0xB6, FIL_, 0xCC, 0x83, FIL_, 0xC3, 0xB5, FIL_, + 0xCC, 0x81, FIL_, 0xC3, 0xB3, FIL_, 0xCC, 0x8C, + FIL_, 0xC7, 0x92, FIL_, 0xCC, 0xA8, FIL_, 0xC7, + 0xAB, FIL_, 0xCC, 0x9B, FIL_, 0xC6, 0xA1, FIL_, + 0xCC, 0x84, FIL_, 0xC5, 0x8D, FIL_, 0xCC, 0x86, + FIL_, 0xC5, 0x8F, FIL_, 0xCC, 0x8B, FIL_, 0xC5, + 0x91, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0xB4, FIL_, + 0xCC, 0x8F, FIL_, 0xC8, 0x8D, FIL_, 0x02, 0xCC, + 0x87, FIL_, 0xE1, 0xB9, 0x97, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0x95, FIL_, 0x08, 0xCC, 0x8C, + FIL_, 0xC5, 0x99, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB9, 0x9B, FIL_, 0xCC, 0x81, FIL_, 0xC5, 0x95, + FIL_, 0xCC, 0xA7, FIL_, 0xC5, 0x97, FIL_, 0xCC, + 0xB1, FIL_, 0xE1, 0xB9, 0x9F, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0x99, FIL_, 0xCC, 0x91, FIL_, + 0xC8, 0x93, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x91, + FIL_, 0x07, 0xCC, 0xA7, FIL_, 0xC5, 0x9F, FIL_, + 0xCC, 0x82, FIL_, 0xC5, 0x9D, FIL_, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA1, FIL_, 0xCC, 0xA6, FIL_, + 0xC8, 0x99, FIL_, 0xCC, 0x81, FIL_, 0xC5, 0x9B, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, 0xA3, FIL_, + 0xCC, 0x8C, FIL_, 0xC5, 0xA1, FIL_, 0x08, 0xCC, + 0xA6, FIL_, 0xC8, 0x9B, FIL_, 0xCC, 0xAD, FIL_, + 0xE1, 0xB9, 0xB1, FIL_, 0xCC, 0xB1, FIL_, 0xE1, + 0xB9, 0xAF, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xB9, + 0xAD, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xAB, + FIL_, 0xCC, 0x8C, FIL_, 0xC5, 0xA5, FIL_, 0xCC, + 0xA7, FIL_, 0xC5, 0xA3, FIL_, 0xCC, 0x88, FIL_, + 0xE1, 0xBA, 0x97, FIL_, 0x13, 0xCC, 0x8A, FIL_, + 0xC5, 0xAF, FIL_, 0xCC, 0x8F, FIL_, 0xC8, 0x95, + FIL_, 0xCC, 0x8C, FIL_, 0xC7, 0x94, FIL_, 0xCC, + 0x80, FIL_, 0xC3, 0xB9, FIL_, 0xCC, 0x9B, FIL_, + 0xC6, 0xB0, FIL_, 0xCC, 0x82, FIL_, 0xC3, 0xBB, + FIL_, 0xCC, 0x81, FIL_, 0xC3, 0xBA, FIL_, 0xCC, + 0x88, FIL_, 0xC3, 0xBC, FIL_, 0xCC, 0x83, FIL_, + 0xC5, 0xA9, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, + 0xA7, FIL_, 0xCC, 0x84, FIL_, 0xC5, 0xAB, FIL_, + 0xCC, 0x86, FIL_, 0xC5, 0xAD, FIL_, 0xCC, 0xAD, + FIL_, 0xE1, 0xB9, 0xB7, FIL_, 0xCC, 0x8B, FIL_, + 0xC5, 0xB1, FIL_, 0xCC, 0xA8, FIL_, 0xC5, 0xB3, + FIL_, 0xCC, 0x91, FIL_, 0xC8, 0x97, FIL_, 0xCC, + 0xA4, FIL_, 0xE1, 0xB9, 0xB3, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xBB, 0xA5, FIL_, 0xCC, 0xB0, FIL_, + 0xE1, 0xB9, 0xB5, FIL_, 0x02, 0xCC, 0x83, FIL_, + 0xE1, 0xB9, 0xBD, FIL_, 0xCC, 0xA3, FIL_, 0xE1, + 0xB9, 0xBF, FIL_, 0x07, 0xCC, 0x8A, FIL_, 0xE1, + 0xBA, 0x98, FIL_, 0xCC, 0x87, FIL_, 0xE1, 0xBA, + 0x87, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0x83, + FIL_, 0xCC, 0x82, FIL_, 0xC5, 0xB5, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBA, 0x81, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xBA, 0x89, FIL_, 0xCC, 0x88, FIL_, + 0xE1, 0xBA, 0x85, FIL_, 0x02, 0xCC, 0x87, FIL_, + 0xE1, 0xBA, 0x8B, FIL_, 0xCC, 0x88, FIL_, 0xE1, + 0xBA, 0x8D, FIL_, 0x0A, 0xCC, 0x87, FIL_, 0xE1, + 0xBA, 0x8F, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, + 0xB5, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0xB7, + FIL_, 0xCC, 0x8A, FIL_, 0xE1, 0xBA, 0x99, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0xB3, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBB, 0xB9, FIL_, 0xCC, 0x88, + FIL_, 0xC3, 0xBF, FIL_, 0xCC, 0x81, FIL_, 0xC3, + 0xBD, FIL_, 0xCC, 0x84, FIL_, 0xC8, 0xB3, FIL_, + 0xCC, 0x82, FIL_, 0xC5, 0xB7, FIL_, 0x06, 0xCC, + 0xB1, FIL_, 0xE1, 0xBA, 0x95, FIL_, 0xCC, 0xA3, + FIL_, 0xE1, 0xBA, 0x93, FIL_, 0xCC, 0x82, FIL_, + 0xE1, 0xBA, 0x91, FIL_, 0xCC, 0x81, FIL_, 0xC5, + 0xBA, FIL_, 0xCC, 0x87, FIL_, 0xC5, 0xBC, FIL_, + 0xCC, 0x8C, FIL_, 0xC5, 0xBE, FIL_, 0x03, 0xCC, + 0x80, FIL_, 0xE1, 0xBF, 0xAD, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x81, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x85, FIL_, 0x04, 0xCC, 0x83, FIL_, 0xE1, + 0xBA, 0xAA, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, + 0xA4, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xA8, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBA, 0xA6, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC7, 0x9E, FIL_, 0x01, + 0xCC, 0x81, FIL_, 0xC7, 0xBA, FIL_, 0x02, 0xCC, + 0x84, FIL_, 0xC7, 0xA2, FIL_, 0xCC, 0x81, FIL_, + 0xC7, 0xBC, FIL_, 0x01, 0xCC, 0x81, FIL_, 0xE1, + 0xB8, 0x88, FIL_, 0x04, 0xCC, 0x83, FIL_, 0xE1, + 0xBB, 0x84, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBB, + 0x80, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x82, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xBE, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0xAE, FIL_, + 0x04, 0xCC, 0x81, FIL_, 0xE1, 0xBB, 0x90, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0x92, FIL_, 0xCC, + 0x89, FIL_, 0xE1, 0xBB, 0x94, FIL_, 0xCC, 0x83, + FIL_, 0xE1, 0xBB, 0x96, FIL_, 0x03, 0xCC, 0x84, + FIL_, 0xC8, 0xAC, FIL_, 0xCC, 0x88, FIL_, 0xE1, + 0xB9, 0x8E, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xB9, + 0x8C, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xAA, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xC7, 0xBE, FIL_, + 0x04, 0xCC, 0x80, FIL_, 0xC7, 0x9B, FIL_, 0xCC, + 0x84, FIL_, 0xC7, 0x95, FIL_, 0xCC, 0x8C, FIL_, + 0xC7, 0x99, FIL_, 0xCC, 0x81, FIL_, 0xC7, 0x97, + FIL_, 0x04, 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xA5, + FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBA, 0xAB, FIL_, + 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xA9, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBA, 0xA7, FIL_, 0x01, 0xCC, + 0x84, FIL_, 0xC7, 0x9F, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xC7, 0xBB, FIL_, 0x02, 0xCC, 0x81, FIL_, + 0xC7, 0xBD, FIL_, 0xCC, 0x84, FIL_, 0xC7, 0xA3, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x89, + FIL_, 0x04, 0xCC, 0x89, FIL_, 0xE1, 0xBB, 0x83, + FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0x85, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0x81, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBA, 0xBF, FIL_, 0x01, 0xCC, + 0x81, FIL_, 0xE1, 0xB8, 0xAF, FIL_, 0x04, 0xCC, + 0x80, FIL_, 0xE1, 0xBB, 0x93, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBB, 0x91, FIL_, 0xCC, 0x83, FIL_, + 0xE1, 0xBB, 0x97, FIL_, 0xCC, 0x89, FIL_, 0xE1, + 0xBB, 0x95, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, + 0xB9, 0x8D, FIL_, 0xCC, 0x88, FIL_, 0xE1, 0xB9, + 0x8F, FIL_, 0xCC, 0x84, FIL_, 0xC8, 0xAD, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xAB, FIL_, 0x01, + 0xCC, 0x81, FIL_, 0xC7, 0xBF, FIL_, 0x04, 0xCC, + 0x8C, FIL_, 0xC7, 0x9A, FIL_, 0xCC, 0x84, FIL_, + 0xC7, 0x96, FIL_, 0xCC, 0x80, FIL_, 0xC7, 0x9C, + FIL_, 0xCC, 0x81, FIL_, 0xC7, 0x98, FIL_, 0x04, + 0xCC, 0x81, FIL_, 0xE1, 0xBA, 0xAE, FIL_, 0xCC, + 0x83, FIL_, 0xE1, 0xBA, 0xB4, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBA, 0xB2, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBA, 0xB0, FIL_, 0x04, 0xCC, 0x83, FIL_, + 0xE1, 0xBA, 0xB5, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBA, 0xB1, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBA, + 0xAF, FIL_, 0xCC, 0x89, FIL_, 0xE1, 0xBA, 0xB3, + FIL_, 0x02, 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x96, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xB8, 0x94, FIL_, + 0x02, 0xCC, 0x80, FIL_, 0xE1, 0xB8, 0x95, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xB8, 0x97, FIL_, 0x02, + 0xCC, 0x80, FIL_, 0xE1, 0xB9, 0x90, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xB9, 0x92, FIL_, 0x02, 0xCC, + 0x81, FIL_, 0xE1, 0xB9, 0x93, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xB9, 0x91, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA4, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA5, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA6, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xB9, 0xA7, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0xB8, FIL_, 0x01, 0xCC, 0x81, + FIL_, 0xE1, 0xB9, 0xB9, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xE1, 0xB9, 0xBA, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xE1, 0xB9, 0xBB, FIL_, 0x01, 0xCC, 0x87, + FIL_, 0xE1, 0xBA, 0x9B, FIL_, 0x05, 0xCC, 0x80, + FIL_, 0xE1, 0xBB, 0x9C, FIL_, 0xCC, 0x89, FIL_, + 0xE1, 0xBB, 0x9E, FIL_, 0xCC, 0x83, FIL_, 0xE1, + 0xBB, 0xA0, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBB, + 0x9A, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xA2, + FIL_, 0x05, 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0xA1, + FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xA3, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBB, 0x9B, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBB, 0x9D, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0x9F, FIL_, 0x05, 0xCC, 0x81, + FIL_, 0xE1, 0xBB, 0xA8, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBB, 0xAA, FIL_, 0xCC, 0x89, FIL_, 0xE1, + 0xBB, 0xAC, FIL_, 0xCC, 0x83, FIL_, 0xE1, 0xBB, + 0xAE, FIL_, 0xCC, 0xA3, FIL_, 0xE1, 0xBB, 0xB0, + FIL_, 0x05, 0xCC, 0x80, FIL_, 0xE1, 0xBB, 0xAB, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBB, 0xA9, FIL_, + 0xCC, 0x83, FIL_, 0xE1, 0xBB, 0xAF, FIL_, 0xCC, + 0xA3, FIL_, 0xE1, 0xBB, 0xB1, FIL_, 0xCC, 0x89, + FIL_, 0xE1, 0xBB, 0xAD, FIL_, 0x01, 0xCC, 0x8C, + FIL_, 0xC7, 0xAE, FIL_, 0x01, 0xCC, 0x84, FIL_, + 0xC7, 0xAC, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, + 0xAD, FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, 0xA0, + FIL_, 0x01, 0xCC, 0x84, FIL_, 0xC7, 0xA1, FIL_, + 0x01, 0xCC, 0x86, FIL_, 0xE1, 0xB8, 0x9C, FIL_, + 0x01, 0xCC, 0x86, FIL_, 0xE1, 0xB8, 0x9D, FIL_, + 0x01, 0xCC, 0x84, FIL_, 0xC8, 0xB0, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xC8, 0xB1, FIL_, 0x01, 0xCC, + 0x8C, FIL_, 0xC7, 0xAF, FIL_, 0x07, 0xCC, 0x93, + FIL_, 0xE1, 0xBC, 0x88, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x86, FIL_, 0xCC, 0x86, FIL_, 0xE1, 0xBE, + 0xB8, FIL_, 0xCC, 0x84, FIL_, 0xE1, 0xBE, 0xB9, + FIL_, 0xCC, 0x94, FIL_, 0xE1, 0xBC, 0x89, FIL_, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xBC, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBE, 0xBA, FIL_, 0x04, 0xCC, + 0x94, FIL_, 0xE1, 0xBC, 0x99, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBF, 0x88, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x88, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBC, + 0x98, FIL_, 0x05, 0xCD, 0x85, FIL_, 0xE1, 0xBF, + 0x8C, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0x89, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0x8A, FIL_, 0xCC, + 0x93, FIL_, 0xE1, 0xBC, 0xA8, FIL_, 0xCC, 0x94, + FIL_, 0xE1, 0xBC, 0xA9, FIL_, 0x07, 0xCC, 0x80, + FIL_, 0xE1, 0xBF, 0x9A, FIL_, 0xCC, 0x84, FIL_, + 0xE1, 0xBF, 0x99, FIL_, 0xCC, 0x93, FIL_, 0xE1, + 0xBC, 0xB8, FIL_, 0xCC, 0x94, FIL_, 0xE1, 0xBC, + 0xB9, FIL_, 0xCC, 0x86, FIL_, 0xE1, 0xBF, 0x98, + FIL_, 0xCC, 0x81, FIL_, 0xCE, 0x8A, FIL_, 0xCC, + 0x88, FIL_, 0xCE, 0xAA, FIL_, 0x04, 0xCC, 0x81, + FIL_, 0xCE, 0x8C, FIL_, 0xCC, 0x94, FIL_, 0xE1, + 0xBD, 0x89, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBD, + 0x88, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0xB8, + FIL_, 0x01, 0xCC, 0x94, FIL_, 0xE1, 0xBF, 0xAC, + FIL_, 0x06, 0xCC, 0x94, FIL_, 0xE1, 0xBD, 0x99, + FIL_, 0xCC, 0x86, FIL_, 0xE1, 0xBF, 0xA8, FIL_, + 0xCC, 0x88, FIL_, 0xCE, 0xAB, FIL_, 0xCC, 0x84, + FIL_, 0xE1, 0xBF, 0xA9, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x8E, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, + 0xAA, FIL_, 0x05, 0xCC, 0x93, FIL_, 0xE1, 0xBD, + 0xA8, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xBC, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0xBA, FIL_, + 0xCC, 0x94, FIL_, 0xE1, 0xBD, 0xA9, FIL_, 0xCC, + 0x81, FIL_, 0xCE, 0x8F, FIL_, 0x01, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0xB4, FIL_, 0x01, 0xCD, 0x85, + FIL_, 0xE1, 0xBF, 0x84, FIL_, 0x08, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0xB3, FIL_, 0xCC, 0x84, FIL_, + 0xE1, 0xBE, 0xB1, FIL_, 0xCC, 0x86, FIL_, 0xE1, + 0xBE, 0xB0, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, + 0xB0, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xAC, FIL_, + 0xCC, 0x94, FIL_, 0xE1, 0xBC, 0x81, FIL_, 0xCC, + 0x93, FIL_, 0xE1, 0xBC, 0x80, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBE, 0xB6, FIL_, 0x04, 0xCC, 0x93, + FIL_, 0xE1, 0xBC, 0x90, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBD, 0xB2, FIL_, 0xCC, 0x94, FIL_, 0xE1, + 0xBC, 0x91, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xAD, + FIL_, 0x06, 0xCC, 0x94, FIL_, 0xE1, 0xBC, 0xA1, + FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xAE, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBF, 0x83, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x86, FIL_, 0xCC, 0x93, FIL_, + 0xE1, 0xBC, 0xA0, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBD, 0xB4, FIL_, 0x08, 0xCC, 0x88, FIL_, 0xCF, + 0x8A, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xAF, FIL_, + 0xCC, 0x93, FIL_, 0xE1, 0xBC, 0xB0, FIL_, 0xCC, + 0x94, FIL_, 0xE1, 0xBC, 0xB1, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBD, 0xB6, FIL_, 0xCC, 0x86, FIL_, + 0xE1, 0xBF, 0x90, FIL_, 0xCC, 0x84, FIL_, 0xE1, + 0xBF, 0x91, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, + 0x96, FIL_, 0x04, 0xCC, 0x93, FIL_, 0xE1, 0xBD, + 0x80, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xB8, + FIL_, 0xCC, 0x94, FIL_, 0xE1, 0xBD, 0x81, FIL_, + 0xCC, 0x81, FIL_, 0xCF, 0x8C, FIL_, 0x02, 0xCC, + 0x93, FIL_, 0xE1, 0xBF, 0xA4, FIL_, 0xCC, 0x94, + FIL_, 0xE1, 0xBF, 0xA5, FIL_, 0x08, 0xCC, 0x81, + FIL_, 0xCF, 0x8D, FIL_, 0xCC, 0x94, FIL_, 0xE1, + 0xBD, 0x91, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, + 0xA6, FIL_, 0xCC, 0x88, FIL_, 0xCF, 0x8B, FIL_, + 0xCC, 0x84, FIL_, 0xE1, 0xBF, 0xA1, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBD, 0xBA, FIL_, 0xCC, 0x93, + FIL_, 0xE1, 0xBD, 0x90, FIL_, 0xCC, 0x86, FIL_, + 0xE1, 0xBF, 0xA0, FIL_, 0x06, 0xCC, 0x80, FIL_, + 0xE1, 0xBD, 0xBC, FIL_, 0xCC, 0x94, FIL_, 0xE1, + 0xBD, 0xA1, FIL_, 0xCC, 0x93, FIL_, 0xE1, 0xBD, + 0xA0, FIL_, 0xCC, 0x81, FIL_, 0xCF, 0x8E, FIL_, + 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xB3, FIL_, 0xCD, + 0x82, FIL_, 0xE1, 0xBF, 0xB6, FIL_, 0x03, 0xCC, + 0x80, FIL_, 0xE1, 0xBF, 0x92, FIL_, 0xCD, 0x82, + FIL_, 0xE1, 0xBF, 0x97, FIL_, 0xCC, 0x81, FIL_, + 0xCE, 0x90, FIL_, 0x03, 0xCD, 0x82, FIL_, 0xE1, + 0xBF, 0xA7, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, + 0xA2, FIL_, 0xCC, 0x81, FIL_, 0xCE, 0xB0, FIL_, + 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xB4, FIL_, + 0x02, 0xCC, 0x88, FIL_, 0xCF, 0x94, FIL_, 0xCC, + 0x81, FIL_, 0xCF, 0x93, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD0, 0x87, FIL_, 0x02, 0xCC, 0x88, FIL_, + 0xD3, 0x92, FIL_, 0xCC, 0x86, FIL_, 0xD3, 0x90, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xD0, 0x83, FIL_, + 0x03, 0xCC, 0x88, FIL_, 0xD0, 0x81, FIL_, 0xCC, + 0x80, FIL_, 0xD0, 0x80, FIL_, 0xCC, 0x86, FIL_, + 0xD3, 0x96, FIL_, 0x02, 0xCC, 0x86, FIL_, 0xD3, + 0x81, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0x9C, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9E, FIL_, 0x04, + 0xCC, 0x84, FIL_, 0xD3, 0xA2, FIL_, 0xCC, 0x88, + FIL_, 0xD3, 0xA4, FIL_, 0xCC, 0x86, FIL_, 0xD0, + 0x99, FIL_, 0xCC, 0x80, FIL_, 0xD0, 0x8D, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xD0, 0x8C, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xA6, FIL_, 0x04, 0xCC, + 0x8B, FIL_, 0xD3, 0xB2, FIL_, 0xCC, 0x88, FIL_, + 0xD3, 0xB0, FIL_, 0xCC, 0x86, FIL_, 0xD0, 0x8E, + FIL_, 0xCC, 0x84, FIL_, 0xD3, 0xAE, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xB4, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xB8, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD3, 0xAC, FIL_, 0x02, 0xCC, 0x86, FIL_, + 0xD3, 0x91, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0x93, + FIL_, 0x01, 0xCC, 0x81, FIL_, 0xD1, 0x93, FIL_, + 0x03, 0xCC, 0x80, FIL_, 0xD1, 0x90, FIL_, 0xCC, + 0x86, FIL_, 0xD3, 0x97, FIL_, 0xCC, 0x88, FIL_, + 0xD1, 0x91, FIL_, 0x02, 0xCC, 0x86, FIL_, 0xD3, + 0x82, FIL_, 0xCC, 0x88, FIL_, 0xD3, 0x9D, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9F, FIL_, 0x04, + 0xCC, 0x86, FIL_, 0xD0, 0xB9, FIL_, 0xCC, 0x88, + FIL_, 0xD3, 0xA5, FIL_, 0xCC, 0x84, FIL_, 0xD3, + 0xA3, FIL_, 0xCC, 0x80, FIL_, 0xD1, 0x9D, FIL_, + 0x01, 0xCC, 0x81, FIL_, 0xD1, 0x9C, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xA7, FIL_, 0x04, 0xCC, + 0x8B, FIL_, 0xD3, 0xB3, FIL_, 0xCC, 0x84, FIL_, + 0xD3, 0xAF, FIL_, 0xCC, 0x86, FIL_, 0xD1, 0x9E, + FIL_, 0xCC, 0x88, FIL_, 0xD3, 0xB1, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xB5, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xB9, FIL_, 0x01, 0xCC, 0x88, + FIL_, 0xD3, 0xAD, FIL_, 0x01, 0xCC, 0x88, FIL_, + 0xD1, 0x97, FIL_, 0x01, 0xCC, 0x8F, FIL_, 0xD1, + 0xB6, FIL_, 0x01, 0xCC, 0x8F, FIL_, 0xD1, 0xB7, + FIL_, 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9A, FIL_, + 0x01, 0xCC, 0x88, FIL_, 0xD3, 0x9B, FIL_, 0x01, + 0xCC, 0x88, FIL_, 0xD3, 0xAA, FIL_, 0x01, 0xCC, + 0x88, FIL_, 0xD3, 0xAB, FIL_, 0x03, 0xD9, 0x94, + FIL_, 0xD8, 0xA3, FIL_, 0xD9, 0x95, FIL_, 0xD8, + 0xA5, FIL_, 0xD9, 0x93, FIL_, 0xD8, 0xA2, FIL_, + 0x01, 0xD9, 0x94, FIL_, 0xD8, 0xA4, FIL_, 0x01, + 0xD9, 0x94, FIL_, 0xD8, 0xA6, FIL_, 0x01, 0xD9, + 0x94, FIL_, 0xDB, 0x82, FIL_, 0x01, 0xD9, 0x94, + FIL_, 0xDB, 0x93, FIL_, 0x01, 0xD9, 0x94, FIL_, + 0xDB, 0x80, FIL_, 0x01, 0xE0, 0xA4, 0xBC, FIL_, + 0xE0, 0xA4, 0xA9, FIL_, 0x01, 0xE0, 0xA4, 0xBC, + FIL_, 0xE0, 0xA4, 0xB1, FIL_, 0x01, 0xE0, 0xA4, + 0xBC, FIL_, 0xE0, 0xA4, 0xB4, FIL_, 0x02, 0xE0, + 0xA6, 0xBE, FIL_, 0xE0, 0xA7, 0x8B, FIL_, 0xE0, + 0xA7, 0x97, FIL_, 0xE0, 0xA7, 0x8C, FIL_, 0x03, + 0xE0, 0xAD, 0x96, FIL_, 0xE0, 0xAD, 0x88, FIL_, + 0xE0, 0xAC, 0xBE, FIL_, 0xE0, 0xAD, 0x8B, FIL_, + 0xE0, 0xAD, 0x97, FIL_, 0xE0, 0xAD, 0x8C, FIL_, + 0x01, 0xE0, 0xAF, 0x97, FIL_, 0xE0, 0xAE, 0x94, + FIL_, 0x02, 0xE0, 0xAF, 0x97, FIL_, 0xE0, 0xAF, + 0x8C, FIL_, 0xE0, 0xAE, 0xBE, FIL_, 0xE0, 0xAF, + 0x8A, FIL_, 0x01, 0xE0, 0xAE, 0xBE, FIL_, 0xE0, + 0xAF, 0x8B, FIL_, 0x01, 0xE0, 0xB1, 0x96, FIL_, + 0xE0, 0xB1, 0x88, FIL_, 0x01, 0xE0, 0xB3, 0x95, + FIL_, 0xE0, 0xB3, 0x80, FIL_, 0x03, 0xE0, 0xB3, + 0x82, FIL_, 0xE0, 0xB3, 0x8A, FIL_, 0xE0, 0xB3, + 0x96, FIL_, 0xE0, 0xB3, 0x88, FIL_, 0xE0, 0xB3, + 0x95, FIL_, 0xE0, 0xB3, 0x87, FIL_, 0x01, 0xE0, + 0xB3, 0x95, FIL_, 0xE0, 0xB3, 0x8B, FIL_, 0x02, + 0xE0, 0xB4, 0xBE, FIL_, 0xE0, 0xB5, 0x8A, FIL_, + 0xE0, 0xB5, 0x97, FIL_, 0xE0, 0xB5, 0x8C, FIL_, + 0x01, 0xE0, 0xB4, 0xBE, FIL_, 0xE0, 0xB5, 0x8B, + FIL_, 0x03, 0xE0, 0xB7, 0x9F, FIL_, 0xE0, 0xB7, + 0x9E, FIL_, 0xE0, 0xB7, 0x8A, FIL_, 0xE0, 0xB7, + 0x9A, FIL_, 0xE0, 0xB7, 0x8F, FIL_, 0xE0, 0xB7, + 0x9C, FIL_, 0x01, 0xE0, 0xB7, 0x8A, FIL_, 0xE0, + 0xB7, 0x9D, FIL_, 0x01, 0xE1, 0x80, 0xAE, FIL_, + 0xE1, 0x80, 0xA6, FIL_, 0x01, 0xE1, 0xAC, 0xB5, + FIL_, 0xE1, 0xAC, 0x86, FIL_, 0x01, 0xE1, 0xAC, + 0xB5, FIL_, 0xE1, 0xAC, 0x88, FIL_, 0x01, 0xE1, + 0xAC, 0xB5, FIL_, 0xE1, 0xAC, 0x8A, FIL_, 0x01, + 0xE1, 0xAC, 0xB5, FIL_, 0xE1, 0xAC, 0x8C, FIL_, + 0x01, 0xE1, 0xAC, 0xB5, FIL_, 0xE1, 0xAC, 0x8E, + FIL_, 0x01, 0xE1, 0xAC, 0xB5, FIL_, 0xE1, 0xAC, + 0x92, FIL_, 0x01, 0xE1, 0xAC, 0xB5, FIL_, 0xE1, + 0xAC, 0xBB, FIL_, 0x01, 0xE1, 0xAC, 0xB5, FIL_, + 0xE1, 0xAC, 0xBD, FIL_, 0x01, 0xE1, 0xAC, 0xB5, + FIL_, 0xE1, 0xAD, 0x80, FIL_, 0x01, 0xE1, 0xAC, + 0xB5, FIL_, 0xE1, 0xAD, 0x81, FIL_, 0x01, 0xE1, + 0xAC, 0xB5, FIL_, 0xE1, 0xAD, 0x83, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xE1, 0xB8, 0xB8, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xE1, 0xB8, 0xB9, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xE1, 0xB9, 0x9C, FIL_, 0x01, + 0xCC, 0x84, FIL_, 0xE1, 0xB9, 0x9D, FIL_, 0x01, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xA8, FIL_, 0x01, + 0xCC, 0x87, FIL_, 0xE1, 0xB9, 0xA9, FIL_, 0x02, + 0xCC, 0x86, FIL_, 0xE1, 0xBA, 0xB6, FIL_, 0xCC, + 0x82, FIL_, 0xE1, 0xBA, 0xAC, FIL_, 0x02, 0xCC, + 0x82, FIL_, 0xE1, 0xBA, 0xAD, FIL_, 0xCC, 0x86, + FIL_, 0xE1, 0xBA, 0xB7, FIL_, 0x01, 0xCC, 0x82, + FIL_, 0xE1, 0xBB, 0x86, FIL_, 0x01, 0xCC, 0x82, + FIL_, 0xE1, 0xBB, 0x87, FIL_, 0x01, 0xCC, 0x82, + FIL_, 0xE1, 0xBB, 0x98, FIL_, 0x01, 0xCC, 0x82, + FIL_, 0xE1, 0xBB, 0x99, FIL_, 0x04, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0x80, FIL_, 0xCD, 0x82, FIL_, + 0xE1, 0xBC, 0x86, FIL_, 0xCC, 0x80, FIL_, 0xE1, + 0xBC, 0x82, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, + 0x84, FIL_, 0x04, 0xCD, 0x82, FIL_, 0xE1, 0xBC, + 0x87, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x85, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0x83, FIL_, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x81, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x82, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x83, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x84, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x85, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x86, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x87, FIL_, 0x04, + 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x8C, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0x8A, FIL_, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0x88, FIL_, 0xCD, 0x82, FIL_, + 0xE1, 0xBC, 0x8E, FIL_, 0x04, 0xCC, 0x80, FIL_, + 0xE1, 0xBC, 0x8B, FIL_, 0xCD, 0x82, FIL_, 0xE1, + 0xBC, 0x8F, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, + 0x8D, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x89, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8A, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8B, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8C, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8D, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8E, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x8F, + FIL_, 0x02, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0x92, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x94, FIL_, + 0x02, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0x93, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0x95, FIL_, 0x02, + 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0x9A, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBC, 0x9C, FIL_, 0x02, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0x9B, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBC, 0x9D, FIL_, 0x04, 0xCC, 0x80, + FIL_, 0xE1, 0xBC, 0xA2, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBC, 0xA4, FIL_, 0xCD, 0x82, FIL_, 0xE1, + 0xBC, 0xA6, FIL_, 0xCD, 0x85, FIL_, 0xE1, 0xBE, + 0x90, FIL_, 0x04, 0xCD, 0x85, FIL_, 0xE1, 0xBE, + 0x91, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xA5, + FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0xA7, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xA3, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x92, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x93, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x94, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x95, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x96, FIL_, 0x01, + 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x97, FIL_, 0x04, + 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xAC, FIL_, 0xCC, + 0x80, FIL_, 0xE1, 0xBC, 0xAA, FIL_, 0xCD, 0x85, + FIL_, 0xE1, 0xBE, 0x98, FIL_, 0xCD, 0x82, FIL_, + 0xE1, 0xBC, 0xAE, FIL_, 0x04, 0xCD, 0x82, FIL_, + 0xE1, 0xBC, 0xAF, FIL_, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0x99, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, + 0xAD, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xAB, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9A, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9B, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9C, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9D, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9E, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0x9F, + FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xB4, + FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xB2, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBC, 0xB6, FIL_, 0x03, + 0xCC, 0x80, FIL_, 0xE1, 0xBC, 0xB3, FIL_, 0xCD, + 0x82, FIL_, 0xE1, 0xBC, 0xB7, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBC, 0xB5, FIL_, 0x03, 0xCC, 0x81, + FIL_, 0xE1, 0xBC, 0xBC, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBC, 0xBA, FIL_, 0xCD, 0x82, FIL_, 0xE1, + 0xBC, 0xBE, FIL_, 0x03, 0xCC, 0x80, FIL_, 0xE1, + 0xBC, 0xBB, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBC, + 0xBF, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBC, 0xBD, + FIL_, 0x02, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0x82, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0x84, FIL_, + 0x02, 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0x85, FIL_, + 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0x83, FIL_, 0x02, + 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0x8A, FIL_, 0xCC, + 0x81, FIL_, 0xE1, 0xBD, 0x8C, FIL_, 0x02, 0xCC, + 0x80, FIL_, 0xE1, 0xBD, 0x8B, FIL_, 0xCC, 0x81, + FIL_, 0xE1, 0xBD, 0x8D, FIL_, 0x03, 0xCD, 0x82, + FIL_, 0xE1, 0xBD, 0x96, FIL_, 0xCC, 0x80, FIL_, + 0xE1, 0xBD, 0x92, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBD, 0x94, FIL_, 0x03, 0xCC, 0x80, FIL_, 0xE1, + 0xBD, 0x93, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBD, + 0x97, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0x95, + FIL_, 0x03, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0x9B, + FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0x9F, FIL_, + 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0x9D, FIL_, 0x04, + 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0xA6, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA0, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBD, 0xA2, FIL_, 0xCC, 0x81, FIL_, + 0xE1, 0xBD, 0xA4, FIL_, 0x04, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0xA1, FIL_, 0xCD, 0x82, FIL_, 0xE1, + 0xBD, 0xA7, FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBD, + 0xA5, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xA3, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA2, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA3, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA4, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA5, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA6, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBE, 0xA7, + FIL_, 0x04, 0xCC, 0x80, FIL_, 0xE1, 0xBD, 0xAA, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBD, 0xAC, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBD, 0xAE, FIL_, 0xCD, + 0x85, FIL_, 0xE1, 0xBE, 0xA8, FIL_, 0x04, 0xCD, + 0x82, FIL_, 0xE1, 0xBD, 0xAF, FIL_, 0xCC, 0x80, + FIL_, 0xE1, 0xBD, 0xAB, FIL_, 0xCD, 0x85, FIL_, + 0xE1, 0xBE, 0xA9, FIL_, 0xCC, 0x81, FIL_, 0xE1, + 0xBD, 0xAD, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAA, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAB, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAC, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAD, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAE, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xAF, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xB2, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBF, 0x82, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBF, 0xB2, FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, + 0xBE, 0xB7, FIL_, 0x03, 0xCC, 0x81, FIL_, 0xE1, + 0xBF, 0x8E, FIL_, 0xCC, 0x80, FIL_, 0xE1, 0xBF, + 0x8D, FIL_, 0xCD, 0x82, FIL_, 0xE1, 0xBF, 0x8F, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0x87, + FIL_, 0x01, 0xCD, 0x85, FIL_, 0xE1, 0xBF, 0xB7, + FIL_, 0x03, 0xCC, 0x80, FIL_, 0xE1, 0xBF, 0x9D, + FIL_, 0xCC, 0x81, FIL_, 0xE1, 0xBF, 0x9E, FIL_, + 0xCD, 0x82, FIL_, 0xE1, 0xBF, 0x9F, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x86, 0x9A, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x86, 0x9B, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x86, 0xAE, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x87, 0x8D, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x87, 0x8F, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x87, 0x8E, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x88, 0x84, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x88, 0x89, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x88, 0x8C, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x88, 0xA4, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x88, 0xA6, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0x81, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0x84, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0x87, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0x89, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAD, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA2, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB0, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB1, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB4, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB5, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB8, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xB9, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x80, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x81, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xA0, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xA1, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x84, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x85, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x88, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0x89, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xA2, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xA3, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0xAC, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0xAD, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0xAE, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8A, 0xAF, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xAA, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xAB, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xAC, FIL_, 0x01, + 0xCC, 0xB8, FIL_, 0xE2, 0x8B, 0xAD, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0x94, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0x8C, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, + 0x8E, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x81, 0x90, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x81, 0x92, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x81, 0x94, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x81, 0x96, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x81, 0x98, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0x9A, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0x9C, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, + 0x9E, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x81, 0xA0, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x81, 0xA2, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x81, 0xA5, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x81, 0xA7, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x81, 0xA9, FIL_, 0x02, + 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x81, 0xB1, FIL_, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xB0, FIL_, + 0x02, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, 0xB3, + FIL_, 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x81, 0xB4, + FIL_, 0x02, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x81, + 0xB6, FIL_, 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x81, + 0xB7, FIL_, 0x02, 0xE3, 0x82, 0x9A, FIL_, 0xE3, + 0x81, 0xBA, FIL_, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x81, 0xB9, FIL_, 0x02, 0xE3, 0x82, 0x9A, FIL_, + 0xE3, 0x81, 0xBD, FIL_, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x81, 0xBC, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x82, 0x9E, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x83, 0xB4, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x82, 0xAC, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0xAE, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0xB0, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, + 0xB2, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x82, 0xB4, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x82, 0xB6, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x82, 0xB8, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x82, 0xBA, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x82, 0xBC, FIL_, 0x01, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x82, 0xBE, FIL_, + 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0x80, + FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, + 0x82, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x83, 0x85, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x83, 0x87, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x83, 0x89, FIL_, 0x02, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x83, 0x90, FIL_, 0xE3, 0x82, + 0x9A, FIL_, 0xE3, 0x83, 0x91, FIL_, 0x02, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x83, 0x93, FIL_, 0xE3, + 0x82, 0x9A, FIL_, 0xE3, 0x83, 0x94, FIL_, 0x02, + 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x83, 0x97, FIL_, + 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0x96, FIL_, + 0x02, 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x83, 0x9A, + FIL_, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, 0x99, + FIL_, 0x02, 0xE3, 0x82, 0x99, FIL_, 0xE3, 0x83, + 0x9C, FIL_, 0xE3, 0x82, 0x9A, FIL_, 0xE3, 0x83, + 0x9D, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, 0xE3, + 0x83, 0xB7, FIL_, 0x01, 0xE3, 0x82, 0x99, FIL_, + 0xE3, 0x83, 0xB8, FIL_, 0x01, 0xE3, 0x82, 0x99, + FIL_, 0xE3, 0x83, 0xB9, FIL_, 0x01, 0xE3, 0x82, + 0x99, FIL_, 0xE3, 0x83, 0xBA, FIL_, 0x01, 0xE3, + 0x82, 0x99, FIL_, 0xE3, 0x83, 0xBE, FIL_, + }, +}; + +static const uchar_t u8_decomp_b2_tbl[2][2][256] = { + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 5, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 6, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 7, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 1, 2, 3, 4, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 5, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, 6, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 7, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + +}; + +static const u8_displacement_t u8_decomp_b3_tbl[2][8][256] = { + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 0 }, + { 1, 35 }, { 2, 247 }, { 3, 474 }, + { 4, 693 }, { 5, 709 }, { 6, 951 }, + { N_, 0 }, { 7, 1139 }, { 8, 1152 }, + { N_, 0 }, { 9, 1177 }, { 10, 1199 }, + { 11, 1295 }, { 12, 1360 }, { 13, 1405 }, + { N_, 0 }, { 14, 1450 }, { N_, 0 }, + { N_, 0 }, { 15, 1620 }, { N_, 0 }, + { 16, 1624 }, { 17, 1649 }, { N_, 0 }, + { 18, 1665 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 19, 1680 }, + { 20, 1701 }, { N_, 0 }, { 21, 1757 }, + { 22, 1792 }, { 23, 1806 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 24, 1834 }, + { 25, 1869 }, { 26, 1876 }, { N_, 0 }, + { 27, 1897 }, { N_, 0 }, { 28, 1904 }, + { N_, 0 }, { 29, 1942 }, { N_, 0 }, + { 30, 1963 }, { 31, 1994 }, { N_, 0 }, + { 32, 2000 }, { 33, 2006 }, { 34, 2018 }, + { 35, 2021 }, { 36, 2109 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 37, 2158 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 0x8000, 2165 }, { 0x8001, 2445 }, + { 0x8002, 2741 }, { 0x8003, 3029 }, { 0x8004, 3337 }, + { 0x8005, 3725 }, { 0x8006, 4053 }, { 0x8007, 4536 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 38, 4895 }, + { 39, 4964 }, { 40, 4999 }, { N_, 0 }, + { 41, 5018 }, { 42, 5098 }, { 43, 5230 }, + { 44, 5248 }, { 45, 5266 }, { 46, 5326 }, + { 47, 5410 }, { 48, 5470 }, { 49, 5518 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 50, 5526 }, { 51, 5596 }, + { 52, 5767 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 53, 5810 }, { 54, 5822 }, { N_, 0 }, + { 55, 5830 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 56, 5836 }, { 57, 5839 }, { 58, 5842 }, + { 59, 6034 }, { 60, 6226 }, { 61, 6418 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 62, 6484 }, + { 63, 6497 }, { 64, 6672 }, { 65, 6770 }, + { 66, 6923 }, { 67, 6968 }, { 68, 7160 }, + { N_, 0 }, { 0x8008, 7247 }, { 69, 7597 }, + { 70, 7773 }, { 71, 7950 }, { 0x8009, 8142 }, + { 0x800A, 8919 }, { 72, 9351 }, { 73, 9522 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 5. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0x800B, 9743 }, + { 0x800C, 9999 }, { 0x800D, 10255 }, { 0x800E, 10511 }, + { 74, 10767 }, { 75, 10967 }, { N_, 0 }, + { N_, 0 }, { 76, 11139 }, { 77, 11303 }, + { 78, 11468 }, { 79, 11576 }, { 0x800F, 11740 }, + { 0x8010, 12006 }, { 0x8011, 12280 }, { 0x8012, 12546 }, + { 80, 12812 }, { 0x8013, 13060 }, { 0x8014, 13348 }, + { 81, 13720 }, { 82, 13898 }, { 83, 13933 }, + { 84, 14045 }, { 85, 14197 }, { 86, 14347 }, + { 87, 14410 }, { 88, 14540 }, { 89, 14729 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 6. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 90, 14829 }, { 91, 14912 }, + { 92, 14969 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 93, 14982 }, { 94, 15046 }, { 95, 15109 }, + { 96, 15163 }, { 97, 15225 }, { 98, 15282 }, + { 99, 15341 }, { 100, 15405 }, { 101, 15469 }, + { 102, 15533 }, { 103, 15597 }, { 104, 15681 }, + { 105, 15812 }, { 106, 15942 }, { 107, 16072 }, + { 108, 16202 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 7. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 0x8015, 16273 }, { 0x8016, 16536 }, + { 0x8017, 16799 }, { 0x8018, 17064 }, { 0x8019, 17329 }, + { 0x801A, 17601 }, { 0x801B, 17878 }, { 0x801C, 18147 }, + { 109, 18419 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + }, + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 0 }, + { 1, 35 }, { 2, 247 }, { 3, 474 }, + { 4, 693 }, { 5, 709 }, { 6, 951 }, + { N_, 0 }, { 7, 1139 }, { 8, 1152 }, + { N_, 0 }, { 9, 1177 }, { 10, 1199 }, + { 11, 1295 }, { 12, 1362 }, { 13, 1407 }, + { N_, 0 }, { 14, 1452 }, { N_, 0 }, + { N_, 0 }, { 15, 1622 }, { N_, 0 }, + { 16, 1626 }, { 17, 1651 }, { N_, 0 }, + { 18, 1667 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 19, 1682 }, + { 20, 1703 }, { N_, 0 }, { 21, 1759 }, + { 22, 1794 }, { 23, 1808 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 24, 1836 }, + { 25, 1871 }, { 26, 1878 }, { N_, 0 }, + { 27, 1899 }, { N_, 0 }, { 28, 1906 }, + { N_, 0 }, { 29, 1944 }, { N_, 0 }, + { 30, 1965 }, { 31, 1996 }, { N_, 0 }, + { 32, 2002 }, { 33, 2008 }, { 34, 2020 }, + { 35, 2023 }, { 36, 2111 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 37, 2160 }, + { N_, 0 }, { N_, 0 }, { 38, 2167 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 39, 2170 }, { 40, 2226 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 41, 2247 }, { 42, 2268 }, { 43, 2340 }, + { N_, 0 }, { 0x8000, 2414 }, { 0x8001, 2694 }, + { 0x8002, 2990 }, { 0x8003, 3278 }, { 0x8004, 3586 }, + { 0x8005, 3974 }, { 0x8006, 4302 }, { 0x8007, 4785 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 44, 5144 }, + { 45, 5213 }, { 46, 5248 }, { N_, 0 }, + { 47, 5273 }, { 48, 5358 }, { 49, 5490 }, + { 50, 5508 }, { 51, 5526 }, { 52, 5586 }, + { 53, 5670 }, { 54, 5730 }, { 55, 5778 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 56, 5786 }, { 57, 5856 }, + { 58, 6027 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 59, 6070 }, { 60, 6082 }, { N_, 0 }, + { 61, 6090 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 62, 6096 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 63, 6099 }, { 64, 6102 }, { 65, 6105 }, + { 66, 6297 }, { 67, 6489 }, { 68, 6681 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 69, 6747 }, + { 70, 6760 }, { 71, 6935 }, { 72, 7033 }, + { 73, 7186 }, { 74, 7231 }, { 75, 7423 }, + { N_, 0 }, { 0x8008, 7510 }, { 76, 7891 }, + { 77, 8103 }, { 78, 8280 }, { 0x8009, 8482 }, + { 0x800A, 9259 }, { 79, 9701 }, { 80, 9872 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 5. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0x800B, 10106 }, + { 0x800C, 10362 }, { 0x800D, 10618 }, { 0x800E, 10874 }, + { 81, 11130 }, { 82, 11330 }, { 0x800F, 11566 }, + { 83, 11822 }, { 84, 11932 }, { 85, 12096 }, + { 86, 12261 }, { 87, 12369 }, { 0x8010, 12533 }, + { 0x8011, 12799 }, { 0x8012, 13073 }, { 0x8013, 13339 }, + { 88, 13605 }, { 0x8014, 13853 }, { 0x8015, 14141 }, + { 89, 14513 }, { 90, 14691 }, { 91, 14746 }, + { 92, 14860 }, { 93, 15012 }, { 94, 15162 }, + { 95, 15225 }, { 96, 15355 }, { 97, 15544 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 6. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 98, 15644 }, { 99, 15727 }, + { 100, 15784 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 101, 15797 }, { 102, 15861 }, { 103, 15924 }, + { 104, 15978 }, { 105, 16041 }, { 106, 16098 }, + { 107, 16157 }, { 108, 16221 }, { 109, 16285 }, + { 110, 16349 }, { 111, 16413 }, { 112, 16501 }, + { 113, 16632 }, { 114, 16762 }, { 115, 16892 }, + { 116, 17022 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + { /* Third byte table 7. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 0x8016, 17097 }, { 0x8017, 17360 }, + { 0x8018, 17623 }, { 0x8019, 17888 }, { 0x801A, 18153 }, + { 0x801B, 18425 }, { 0x801C, 18702 }, { 0x801D, 18971 }, + { 117, 19243 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, + }, + }, +}; + +static const uchar_t u8_decomp_b4_tbl[2][118][257] = { + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 5, 5, 5, 5, 5, + 8, 8, 8, 9, 10, 13, 15, 15, + 15, 18, 19, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 24, + 28, 32, 36, 40, 44, 48, 52, 56, + 60, 60, 64, 68, 72, 76, 80, 84, + 84, 84, 88, 92, 96, 100, 104, 104, + 104, 108, 112, 116, 120, 124, 128, 128, + 132, 136, 140, 144, 148, 152, 156, 160, + 164, 164, 168, 172, 176, 180, 184, 188, + 188, 188, 192, 196, 200, 204, 208, 208, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 64, 64, 68, 72, 76, 80, 84, + 88, 92, 96, 100, 104, 108, 112, 116, + 120, 124, 128, 132, 136, 140, 144, 144, + 144, 148, 152, 156, 160, 164, 168, 172, + 176, 180, 180, 182, 184, 188, 192, 196, + 200, 200, 204, 208, 212, 216, 220, 224, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 7, 11, 15, 19, + 23, 27, 30, 30, 30, 34, 38, 42, + 46, 50, 54, 54, 54, 58, 62, 66, + 70, 74, 78, 82, 86, 90, 94, 98, + 102, 106, 110, 114, 118, 122, 126, 126, + 126, 130, 134, 138, 142, 146, 150, 154, + 158, 162, 166, 170, 174, 178, 182, 186, + 190, 194, 198, 202, 206, 210, 214, 218, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 12, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 8, 12, + 14, 16, 18, 20, 22, 24, 28, 32, + 36, 40, 44, 48, 52, 56, 62, 68, + 74, 80, 86, 92, 98, 104, 104, 110, + 116, 122, 128, 133, 138, 138, 138, 142, + 146, 150, 154, 158, 162, 168, 174, 179, + 184, 188, 190, 192, 194, 198, 202, 202, + 202, 206, 210, 216, 222, 227, 232, 237, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 112, 112, 116, + 120, 120, 120, 120, 120, 120, 120, 124, + 128, 132, 136, 142, 148, 154, 160, 164, + 168, 174, 180, 184, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 3, 4, 5, 7, 9, 11, + 12, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 20, 21, 22, 23, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 6, 9, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 17, 17, 17, + 17, 17, 17, 20, 20, 20, 20, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 14, 19, + 22, 27, 32, 37, 37, 42, 42, 47, + 52, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 64, 69, 74, 79, 84, + 89, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 10, 15, 20, 25, + 25, 27, 29, 31, 41, 51, 53, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 57, 59, 61, 61, 63, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 15, 15, 15, + 20, 20, 20, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 15, 15, 15, + 20, 20, 20, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 40, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 15, 20, 25, 30, 30, 30, 35, + 40, 40, 40, 45, 50, 55, 60, 65, + 70, 70, 70, 75, 80, 85, 90, 95, + 100, 100, 100, 105, 110, 115, 120, 125, + 130, 135, 140, 145, 150, 155, 160, 160, + 160, 165, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 10, 15, 20, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 8, + 12, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 5, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 14, 14, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 21, 28, 35, 42, 49, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 21, 28, 28, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 14, 21, 21, 21, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 28, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, + 14, 21, 21, 28, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 14, 24, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 14, 14, + 14, 14, 14, 21, 21, 21, 21, 21, + 28, 28, 28, 28, 28, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 49, 49, 56, 63, + 72, 79, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 21, 21, + 21, 21, 21, 28, 28, 28, 28, 28, + 35, 35, 35, 35, 35, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 21, 21, 21, 21, + 21, 21, 24, 24, 24, 24, 24, 24, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 28, 30, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 34, 34, 34, 34, 40, 49, 49, 55, + 64, 64, 64, 64, 64, 66, 66, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 4, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 18, 18, 18, 18, 18, 18, 18, 18, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 20, 21, 21, 21, 22, 23, 24, + 25, 26, 27, 28, 31, 32, 33, 34, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 14, 15, 16, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, + }, + { /* Fourth byte table 41. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 7, 10, 10, 13, 16, + 18, 18, 21, 22, 23, 24, 25, 26, + 28, 29, 30, 31, 32, 32, 33, 35, + 35, 35, 36, 37, 38, 39, 40, 40, + 40, 42, 45, 47, 47, 48, 48, 51, + 51, 52, 52, 54, 58, 59, 60, 60, + 61, 62, 63, 63, 64, 65, 67, 69, + 71, 73, 74, 74, 74, 74, 76, 78, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, + }, + { /* Fourth byte table 42. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 3, 3, 4, 5, + 6, 7, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 13, 18, 23, 28, + 33, 38, 43, 48, 53, 58, 63, 68, + 72, 73, 75, 78, 80, 81, 83, 86, + 90, 92, 93, 95, 98, 99, 100, 101, + 102, 103, 105, 108, 110, 111, 113, 116, + 120, 122, 123, 125, 128, 129, 130, 131, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, + }, + { /* Fourth byte table 43. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 44. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 12, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 45. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 12, 12, 12, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 24, 24, 30, + 30, 30, 30, 30, 30, 36, 45, 45, + 51, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 46. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 6, 6, 12, 12, 12, + 18, 18, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 28, 28, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 40, 44, + 48, 54, 60, 60, 60, 66, 72, 72, + 72, 78, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, + }, + { /* Fourth byte table 47. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 12, 12, 18, 24, 24, + 24, 30, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 42, 48, 54, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 48. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 24, 24, 24, + 24, 24, 24, 30, 36, 42, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 49. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 50. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 11, 13, 15, 17, 19, 21, + 23, 25, 27, 29, 31, 34, 37, 40, + 43, 46, 49, 52, 55, 58, 62, 66, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, + }, + { /* Fourth byte table 51. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 53, 56, 59, 62, 65, 68, + 71, 74, 77, 80, 83, 86, 89, 92, + 95, 98, 101, 104, 107, 110, 113, 116, + 119, 122, 125, 128, 131, 134, 137, 140, + 143, 146, 149, 152, 155, 158, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, + }, + { /* Fourth byte table 52. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, + }, + { /* Fourth byte table 53. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, + }, + { /* Fourth byte table 54. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 5, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 55. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 56. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 57. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 58. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 59. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 60. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 61. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, + }, + { /* Fourth byte table 62. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, + 4, 7, 10, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 63. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 14, + 14, 21, 21, 28, 28, 35, 35, 42, + 42, 49, 49, 56, 56, 63, 63, 70, + 70, 77, 77, 84, 84, 84, 91, 91, + 98, 98, 105, 105, 105, 105, 105, 105, + 105, 112, 119, 119, 126, 133, 133, 140, + 147, 147, 154, 161, 161, 168, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, + }, + { /* Fourth byte table 64. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 11, 15, 15, 22, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 35, 35, 42, + 42, 49, 49, 56, 56, 63, 63, 70, + 70, 77, 77, 84, 84, 91, 91, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, + }, + { /* Fourth byte table 65. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 14, 14, 14, 21, 21, + 28, 28, 35, 35, 35, 35, 35, 35, + 35, 42, 49, 49, 56, 63, 63, 70, + 77, 77, 84, 91, 91, 98, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 112, 112, 112, + 119, 126, 133, 140, 140, 140, 140, 147, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, + }, + { /* Fourth byte table 66. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 67. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 68. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 45, 45, 45, 48, 51, 54, 57, 60, + 63, 66, 69, 72, 75, 78, 81, 84, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 69. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 15, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 22, 24, 26, 28, 30, 32, + 34, 36, 38, 40, 42, 44, 46, 48, + 50, 53, 56, 59, 62, 65, 68, 71, + 74, 77, 80, 83, 86, 89, 92, 98, + 104, 110, 116, 122, 128, 134, 140, 146, + 152, 158, 164, 170, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, + }, + { /* Fourth byte table 70. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 149, 151, 153, 155, 157, 159, + 161, 163, 165, 167, 169, 171, 173, 175, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, + }, + { /* Fourth byte table 71. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 41, 46, 51, 51, 51, 51, + 51, 54, 57, 60, 63, 66, 69, 72, + 75, 78, 81, 84, 87, 90, 93, 96, + 99, 102, 105, 108, 111, 114, 117, 120, + 123, 126, 129, 132, 135, 138, 141, 144, + 147, 150, 153, 156, 159, 162, 165, 168, + 171, 174, 177, 180, 183, 186, 189, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 72. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 7, 9, 11, 13, 15, + 17, 20, 24, 26, 28, 31, 34, 36, + 38, 40, 43, 46, 49, 52, 55, 57, + 59, 61, 63, 65, 68, 70, 72, 74, + 77, 80, 82, 85, 88, 91, 93, 96, + 101, 107, 109, 112, 115, 118, 121, 128, + 136, 138, 140, 143, 145, 147, 149, 152, + 154, 156, 158, 160, 162, 165, 167, 169, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, + }, + { /* Fourth byte table 73. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 10, 12, 14, 16, 22, + 25, 27, 29, 31, 33, 35, 37, 39, + 41, 43, 45, 48, 50, 52, 55, 58, + 60, 64, 67, 69, 71, 73, 75, 75, + 75, 79, 83, 87, 91, 95, 99, 103, + 107, 111, 116, 121, 126, 131, 136, 141, + 146, 151, 156, 161, 166, 171, 176, 181, + 186, 191, 196, 201, 206, 211, 216, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, + 221, + }, + { /* Fourth byte table 74. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 56, + 56, 60, 60, 64, 64, 64, 68, 72, + 76, 80, 84, 88, 92, 96, 100, 104, + 104, 108, 108, 112, 112, 112, 116, 120, + 120, 120, 120, 124, 128, 132, 136, 136, + 136, 140, 144, 148, 152, 156, 160, 164, + 168, 172, 176, 180, 184, 188, 192, 196, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, + }, + { /* Fourth byte table 75. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, + 172, + }, + { /* Fourth byte table 76. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 9, 12, 14, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 20, 24, 28, 32, + 36, 36, 36, 36, 36, 36, 41, 41, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 64, 65, 70, 75, 82, 89, 94, + 99, 104, 109, 114, 119, 124, 129, 134, + 134, 139, 144, 149, 154, 159, 159, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, + }, + { /* Fourth byte table 77. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 20, 20, 25, + 30, 35, 40, 45, 50, 55, 60, 65, + 69, 71, 73, 75, 77, 79, 81, 83, + 85, 87, 89, 91, 93, 95, 97, 99, + 101, 103, 105, 107, 109, 111, 113, 115, + 117, 119, 121, 123, 125, 127, 129, 131, + 133, 135, 137, 139, 141, 143, 145, 147, + 149, 151, 153, 155, 157, 159, 161, 163, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, + }, + { /* Fourth byte table 78. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 76, 80, 82, + 84, 86, 88, 90, 92, 94, 96, 98, + 100, 104, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, + }, + { /* Fourth byte table 79. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 4, 6, 8, + 10, 12, 14, 16, 18, 20, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 54, 60, 66, 72, 78, + 84, 90, 96, 102, 108, 114, 120, 126, + 132, 138, 144, 150, 156, 158, 160, 162, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, + }, + { /* Fourth byte table 80. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, + }, + { /* Fourth byte table 81. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 54, 60, 68, 76, 84, 92, 100, + 108, 116, 122, 155, 170, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, + }, + { /* Fourth byte table 82. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 5, 8, 9, 10, 11, 12, + 13, 14, 17, 20, 23, 26, 29, 32, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 83. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 15, 15, + 15, 15, 18, 21, 24, 27, 28, 29, + 30, 31, 34, 35, 35, 36, 37, 38, + 39, 42, 43, 44, 45, 46, 49, 52, + 53, 54, 55, 56, 57, 58, 59, 60, + 60, 61, 62, 63, 64, 64, 64, 64, + 64, 67, 71, 74, 74, 77, 77, 80, + 84, 87, 91, 94, 98, 101, 105, 108, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, + }, + { /* Fourth byte table 84. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 6, 10, 14, 18, 22, 26, + 30, 34, 38, 42, 46, 50, 52, 54, + 56, 58, 60, 62, 64, 66, 68, 70, + 72, 74, 76, 78, 80, 82, 84, 86, + 88, 90, 92, 94, 96, 98, 100, 102, + 104, 106, 108, 110, 112, 114, 116, 118, + 120, 122, 124, 126, 128, 130, 132, 134, + 136, 138, 140, 142, 144, 146, 148, 150, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, + }, + { /* Fourth byte table 85. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, + 96, 98, 100, 102, 104, 106, 112, 118, + 124, 130, 136, 142, 146, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, + }, + { /* Fourth byte table 86. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 87. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 34, 37, 40, 43, 46, 49, 52, 55, + 58, 61, 64, 67, 70, 73, 76, 79, + 82, 85, 88, 91, 94, 97, 100, 103, + 106, 109, 112, 115, 118, 121, 124, 127, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 88. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, + }, + { /* Fourth byte table 89. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 6, 9, 12, 15, + 18, 18, 18, 21, 24, 27, 30, 33, + 36, 36, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 57, 60, 63, 63, 63, + 63, 65, 67, 69, 72, 74, 76, 79, + 79, 82, 85, 88, 91, 94, 97, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, + }, + { /* Fourth byte table 90. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 18, 31, 44, 57, 70, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, + }, + { /* Fourth byte table 91. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 18, 31, 44, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 92. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 93. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 94. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 95. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 29, 30, + 31, 31, 31, 32, 32, 32, 33, 34, + 34, 34, 35, 36, 37, 38, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 50, 51, 51, 52, 53, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 96. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 2, 3, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 97. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 6, + 7, 8, 9, 10, 10, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 18, 19, + 20, 21, 22, 23, 24, 25, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 53, 54, 55, 56, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 98. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 5, 6, + 6, 6, 6, 7, 8, 9, 10, 11, + 12, 13, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, + }, + { /* Fourth byte table 99. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 100. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 101. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 102. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 103. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 36, 36, 36, + 36, 38, 40, 42, 44, 46, 48, 50, + 52, 54, 56, 58, 60, 62, 64, 66, + 68, 70, 72, 74, 76, 78, 80, 82, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, + }, + { /* Fourth byte table 104. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 5, 7, 9, 11, 13, 15, + 17, 19, 21, 23, 25, 27, 29, 31, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 58, 60, 62, 64, + 66, 68, 70, 72, 74, 76, 78, 80, + 82, 84, 86, 88, 90, 92, 94, 96, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 123, 125, 127, 129, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, + }, + { /* Fourth byte table 105. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 85, 87, 89, 91, 93, 95, + 97, 99, 101, 103, 105, 107, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 106. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 85, 87, 89, 91, 93, 95, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 107. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 21, 23, 25, 27, 29, 31, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 86, 88, 90, 92, 94, 96, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 108. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 9, 11, 13, 15, + 17, 19, 21, 21, 21, 21, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, + }, + { /* Fourth byte table 109. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 9, 13, 17, 21, 25, 29, + 33, 37, 42, 46, 50, 54, 58, 62, + 66, 71, 75, 80, 85, 90, 94, 98, + 102, 106, 110, 114, 118, 122, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, + }, + { /* Fourth byte table 110. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 111. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 112. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 113. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 114. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 115. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 116. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 117. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + }, + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 5, 5, 5, 5, 5, + 8, 8, 8, 9, 10, 13, 15, 15, + 15, 18, 19, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 24, + 28, 32, 36, 40, 44, 48, 52, 56, + 60, 60, 64, 68, 72, 76, 80, 84, + 84, 84, 88, 92, 96, 100, 104, 104, + 104, 108, 112, 116, 120, 124, 128, 128, + 132, 136, 140, 144, 148, 152, 156, 160, + 164, 164, 168, 172, 176, 180, 184, 188, + 188, 188, 192, 196, 200, 204, 208, 208, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 64, 64, 68, 72, 76, 80, 84, + 88, 92, 96, 100, 104, 108, 112, 116, + 120, 124, 128, 132, 136, 140, 144, 144, + 144, 148, 152, 156, 160, 164, 168, 172, + 176, 180, 180, 182, 184, 188, 192, 196, + 200, 200, 204, 208, 212, 216, 220, 224, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 227, 227, + 227, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 7, 11, 15, 19, + 23, 27, 30, 30, 30, 34, 38, 42, + 46, 50, 54, 54, 54, 58, 62, 66, + 70, 74, 78, 82, 86, 90, 94, 98, + 102, 106, 110, 114, 118, 122, 126, 126, + 126, 130, 134, 138, 142, 146, 150, 154, + 158, 162, 166, 170, 174, 178, 182, 186, + 190, 194, 198, 202, 206, 210, 214, 218, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, + 219, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 12, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 8, 12, + 14, 16, 18, 20, 22, 24, 28, 32, + 36, 40, 44, 48, 52, 56, 62, 68, + 74, 80, 86, 92, 98, 104, 104, 110, + 116, 122, 128, 133, 138, 138, 138, 142, + 146, 150, 154, 158, 162, 168, 174, 179, + 184, 188, 190, 192, 194, 198, 202, 202, + 202, 206, 210, 216, 222, 227, 232, 237, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, + 242, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 112, 112, 116, + 120, 120, 120, 120, 120, 120, 120, 124, + 128, 132, 136, 142, 148, 154, 160, 164, + 168, 174, 180, 184, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, + 188, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 3, 4, 5, 7, 9, 11, + 12, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 20, 21, 22, 23, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 6, 9, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 17, 17, 17, + 17, 17, 17, 20, 20, 20, 20, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 14, 19, + 22, 27, 32, 37, 37, 42, 42, 47, + 52, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 64, 69, 74, 79, 84, + 89, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 10, 15, 20, 25, + 25, 27, 29, 31, 41, 51, 53, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 57, 59, 61, 61, 63, 65, 65, + 65, 65, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 15, 15, 15, + 20, 20, 20, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 15, 15, 15, + 20, 20, 20, 20, 20, 25, 30, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 40, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 15, 20, 25, 30, 30, 30, 35, + 40, 40, 40, 45, 50, 55, 60, 65, + 70, 70, 70, 75, 80, 85, 90, 95, + 100, 100, 100, 105, 110, 115, 120, 125, + 130, 135, 140, 145, 150, 155, 160, 160, + 160, 165, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 10, 15, 20, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 8, + 12, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 5, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 14, 14, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 21, 28, 35, 42, 49, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 21, 28, 28, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 14, 21, 21, 21, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 28, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, + 14, 21, 21, 28, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 14, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 14, 24, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 14, 14, + 14, 14, 14, 21, 21, 21, 21, 21, + 28, 28, 28, 28, 28, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 49, 49, 56, 63, + 72, 79, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 21, 21, + 21, 21, 21, 28, 28, 28, 28, 28, + 35, 35, 35, 35, 35, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 39. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 7, 14, 14, 21, 21, 28, 28, 35, + 35, 35, 35, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 49, 49, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 40. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 14, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 41. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 3, 4, + 4, 5, 6, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 16, 17, 19, 20, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 42. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 6, 8, 11, + 12, 13, 14, 16, 18, 20, 21, 21, + 22, 23, 25, 26, 28, 31, 34, 35, + 36, 37, 40, 42, 43, 46, 48, 50, + 52, 54, 56, 57, 58, 59, 60, 62, + 64, 66, 68, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, + }, + { /* Fourth byte table 43. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 3, 5, 7, + 9, 10, 12, 14, 16, 18, 20, 22, + 25, 27, 29, 32, 34, 36, 38, 40, + 42, 44, 46, 48, 50, 52, 54, 56, + 58, 61, 63, 65, 66, 68, 70, 72, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, + }, + { /* Fourth byte table 44. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 21, 21, 21, 21, + 21, 21, 24, 24, 24, 24, 24, 24, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 28, 30, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 34, 34, 34, 34, 40, 49, 49, 55, + 64, 64, 64, 64, 64, 66, 66, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, + }, + { /* Fourth byte table 45. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 4, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 18, 18, 18, 18, 18, 18, 18, 18, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 20, 21, 21, 21, 22, 23, 24, + 25, 26, 27, 28, 31, 32, 33, 34, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, + }, + { /* Fourth byte table 46. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 14, 15, 16, 17, + 17, 18, 19, 20, 21, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, + }, + { /* Fourth byte table 47. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 7, 10, 10, 13, 16, + 18, 18, 21, 22, 23, 24, 25, 26, + 28, 29, 30, 31, 32, 32, 33, 35, + 35, 35, 36, 37, 38, 39, 40, 40, + 40, 42, 45, 47, 47, 48, 48, 51, + 51, 52, 52, 54, 58, 59, 60, 60, + 61, 62, 63, 63, 64, 65, 67, 69, + 71, 73, 74, 74, 77, 79, 81, 83, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, + 85, + }, + { /* Fourth byte table 48. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 3, 3, 4, 5, + 6, 7, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 13, 18, 23, 28, + 33, 38, 43, 48, 53, 58, 63, 68, + 72, 73, 75, 78, 80, 81, 83, 86, + 90, 92, 93, 95, 98, 99, 100, 101, + 102, 103, 105, 108, 110, 111, 113, 116, + 120, 122, 123, 125, 128, 129, 130, 131, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, + }, + { /* Fourth byte table 49. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 50. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 12, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 51. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 12, 12, 12, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 24, 24, 30, + 30, 30, 30, 30, 30, 36, 45, 45, + 51, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 52. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 6, 6, 12, 12, 12, + 18, 18, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 28, 28, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 40, 44, + 48, 54, 60, 60, 60, 66, 72, 72, + 72, 78, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, + }, + { /* Fourth byte table 53. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 12, 12, 18, 24, 24, + 24, 30, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 42, 48, 54, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 54. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 24, 24, 24, + 24, 24, 24, 30, 36, 42, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 55. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 56. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 11, 13, 15, 17, 19, 21, + 23, 25, 27, 29, 31, 34, 37, 40, + 43, 46, 49, 52, 55, 58, 62, 66, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, + }, + { /* Fourth byte table 57. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 53, 56, 59, 62, 65, 68, + 71, 74, 77, 80, 83, 86, 89, 92, + 95, 98, 101, 104, 107, 110, 113, 116, + 119, 122, 125, 128, 131, 134, 137, 140, + 143, 146, 149, 152, 155, 158, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, + }, + { /* Fourth byte table 58. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, + }, + { /* Fourth byte table 59. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, + }, + { /* Fourth byte table 60. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 5, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 61. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, + }, + { /* Fourth byte table 62. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 63. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 64. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 65. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 66. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 67. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 68. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, + }, + { /* Fourth byte table 69. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, + 4, 7, 10, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 70. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 14, + 14, 21, 21, 28, 28, 35, 35, 42, + 42, 49, 49, 56, 56, 63, 63, 70, + 70, 77, 77, 84, 84, 84, 91, 91, + 98, 98, 105, 105, 105, 105, 105, 105, + 105, 112, 119, 119, 126, 133, 133, 140, + 147, 147, 154, 161, 161, 168, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, + 175, + }, + { /* Fourth byte table 71. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 11, 15, 15, 22, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 35, 35, 42, + 42, 49, 49, 56, 56, 63, 63, 70, + 70, 77, 77, 84, 84, 91, 91, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, + }, + { /* Fourth byte table 72. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 14, 14, 14, 21, 21, + 28, 28, 35, 35, 35, 35, 35, 35, + 35, 42, 49, 49, 56, 63, 63, 70, + 77, 77, 84, 91, 91, 98, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 112, 112, 112, + 119, 126, 133, 140, 140, 140, 140, 147, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, + 153, + }, + { /* Fourth byte table 73. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, + }, + { /* Fourth byte table 74. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, + 192, + }, + { /* Fourth byte table 75. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 45, 45, 45, 48, 51, 54, 57, 60, + 63, 66, 69, 72, 75, 78, 81, 84, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 76. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 15, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 23, 25, 27, 29, 31, 33, 35, + 37, 39, 41, 43, 45, 47, 49, 51, + 53, 56, 59, 62, 65, 68, 71, 74, + 77, 80, 83, 86, 89, 92, 95, 101, + 107, 113, 119, 125, 131, 137, 143, 149, + 155, 161, 167, 173, 179, 194, 206, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + 212, + }, + { /* Fourth byte table 77. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 149, 151, 153, 155, 157, 159, + 161, 163, 165, 167, 169, 171, 173, 175, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, + 177, + }, + { /* Fourth byte table 78. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 41, 46, 51, 53, 56, 58, + 61, 64, 67, 70, 73, 76, 79, 82, + 85, 88, 91, 94, 97, 100, 103, 106, + 109, 112, 115, 118, 121, 124, 127, 130, + 133, 136, 139, 142, 145, 148, 151, 154, + 157, 160, 163, 166, 169, 172, 175, 178, + 181, 184, 187, 190, 193, 196, 199, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 202, + 202, + }, + { /* Fourth byte table 79. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 7, 9, 11, 13, 15, + 17, 20, 24, 26, 28, 31, 34, 36, + 38, 40, 43, 46, 49, 52, 55, 57, + 59, 61, 63, 65, 68, 70, 72, 74, + 77, 80, 82, 85, 88, 91, 93, 96, + 101, 107, 109, 112, 115, 118, 121, 128, + 136, 138, 140, 143, 145, 147, 149, 152, + 154, 156, 158, 160, 162, 165, 167, 169, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, + 171, + }, + { /* Fourth byte table 80. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 10, 12, 14, 16, 22, + 25, 27, 29, 31, 33, 35, 37, 39, + 41, 43, 45, 48, 50, 52, 55, 58, + 60, 64, 67, 69, 71, 73, 75, 80, + 85, 89, 93, 97, 101, 105, 109, 113, + 117, 121, 126, 131, 136, 141, 146, 151, + 156, 161, 166, 171, 176, 181, 186, 191, + 196, 201, 206, 211, 216, 221, 226, 231, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, + 234, + }, + { /* Fourth byte table 81. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 56, + 56, 60, 60, 64, 64, 64, 68, 72, + 76, 80, 84, 88, 92, 96, 100, 104, + 104, 108, 108, 112, 112, 112, 116, 120, + 120, 120, 120, 124, 128, 132, 136, 136, + 136, 140, 144, 148, 152, 156, 160, 164, + 168, 172, 176, 180, 184, 188, 192, 196, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, + }, + { /* Fourth byte table 82. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 172, 172, 172, 172, + 172, 176, 180, 184, 188, 192, 196, 200, + 204, 208, 212, 216, 220, 224, 228, 232, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, + 236, + }, + { /* Fourth byte table 83. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 65, 70, 75, 79, 83, 87, 92, 97, + 102, 106, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, + 110, + }, + { /* Fourth byte table 84. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 9, 12, 14, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 20, 24, 28, 32, + 36, 36, 36, 36, 36, 36, 41, 41, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 64, 65, 70, 75, 82, 89, 94, + 99, 104, 109, 114, 119, 124, 129, 134, + 134, 139, 144, 149, 154, 159, 159, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, + }, + { /* Fourth byte table 85. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 10, 15, 20, 20, 25, + 30, 35, 40, 45, 50, 55, 60, 65, + 69, 71, 73, 75, 77, 79, 81, 83, + 85, 87, 89, 91, 93, 95, 97, 99, + 101, 103, 105, 107, 109, 111, 113, 115, + 117, 119, 121, 123, 125, 127, 129, 131, + 133, 135, 137, 139, 141, 143, 145, 147, + 149, 151, 153, 155, 157, 159, 161, 163, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, + 165, + }, + { /* Fourth byte table 86. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 76, 80, 82, + 84, 86, 88, 90, 92, 94, 96, 98, + 100, 104, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, + 108, + }, + { /* Fourth byte table 87. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 4, 6, 8, + 10, 12, 14, 16, 18, 20, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 54, 60, 66, 72, 78, + 84, 90, 96, 102, 108, 114, 120, 126, + 132, 138, 144, 150, 156, 158, 160, 162, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, + }, + { /* Fourth byte table 88. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, + 248, + }, + { /* Fourth byte table 89. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 54, 60, 68, 76, 84, 92, 100, + 108, 116, 122, 155, 170, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, + 178, + }, + { /* Fourth byte table 90. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 4, 7, 8, 9, 10, 11, + 14, 17, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 22, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 40, 43, 46, 49, 52, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, + }, + { /* Fourth byte table 91. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 15, 15, + 16, 17, 20, 23, 26, 29, 30, 31, + 32, 33, 36, 37, 37, 38, 39, 40, + 41, 44, 45, 46, 47, 48, 51, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 62, 63, 64, 65, 66, 66, 66, 66, + 66, 69, 73, 76, 76, 79, 79, 82, + 86, 89, 93, 96, 100, 103, 107, 110, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, + }, + { /* Fourth byte table 92. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 6, 10, 14, 18, 22, 26, + 30, 34, 38, 42, 46, 50, 52, 54, + 56, 58, 60, 62, 64, 66, 68, 70, + 72, 74, 76, 78, 80, 82, 84, 86, + 88, 90, 92, 94, 96, 98, 100, 102, + 104, 106, 108, 110, 112, 114, 116, 118, + 120, 122, 124, 126, 128, 130, 132, 134, + 136, 138, 140, 142, 144, 146, 148, 150, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, + }, + { /* Fourth byte table 93. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, + 96, 98, 100, 102, 104, 106, 112, 118, + 124, 130, 136, 142, 146, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, + 150, + }, + { /* Fourth byte table 94. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 95. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 34, 37, 40, 43, 46, 49, 52, 55, + 58, 61, 64, 67, 70, 73, 76, 79, + 82, 85, 88, 91, 94, 97, 100, 103, + 106, 109, 112, 115, 118, 121, 124, 127, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 96. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 144, 147, 150, 153, 156, 159, 162, 165, + 168, 171, 174, 177, 180, 183, 186, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, + 189, + }, + { /* Fourth byte table 97. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 6, 9, 12, 15, + 18, 18, 18, 21, 24, 27, 30, 33, + 36, 36, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 57, 60, 63, 63, 63, + 63, 65, 67, 69, 72, 74, 76, 79, + 79, 82, 85, 88, 91, 94, 97, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, + 100, + }, + { /* Fourth byte table 98. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, + 18, 31, 44, 57, 70, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, + }, + { /* Fourth byte table 99. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 18, 31, 44, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 100. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, + }, + { /* Fourth byte table 101. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 102. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 103. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 29, 30, + 31, 31, 31, 32, 32, 32, 33, 34, + 34, 34, 35, 36, 37, 38, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 50, 51, 51, 52, 53, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 104. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 105. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 6, + 7, 8, 9, 10, 10, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 18, 19, + 20, 21, 22, 23, 24, 25, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 53, 54, 55, 56, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 106. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 5, 6, + 6, 6, 6, 7, 8, 9, 10, 11, + 12, 13, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, + }, + { /* Fourth byte table 107. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 108. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 109. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 110. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 111. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 38, 40, 40, + 40, 42, 44, 46, 48, 50, 52, 54, + 56, 58, 60, 62, 64, 66, 68, 70, + 72, 74, 76, 78, 80, 82, 84, 86, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, + 88, + }, + { /* Fourth byte table 112. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 5, 7, 9, 11, 13, 15, + 17, 19, 21, 23, 25, 27, 29, 31, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 58, 60, 62, 64, + 66, 68, 70, 72, 74, 76, 78, 80, + 82, 84, 86, 88, 90, 92, 94, 96, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 123, 125, 127, 129, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, + 131, + }, + { /* Fourth byte table 113. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 85, 87, 89, 91, 93, 95, + 97, 99, 101, 103, 105, 107, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 114. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 85, 87, 89, 91, 93, 95, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 115. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 21, 23, 25, 27, 29, 31, + 33, 35, 37, 39, 41, 43, 45, 47, + 49, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 86, 88, 90, 92, 94, 96, + 98, 100, 102, 104, 106, 108, 110, 112, + 114, 116, 118, 120, 122, 124, 126, 128, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, + 130, + }, + { /* Fourth byte table 116. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 9, 11, 13, 15, + 17, 19, 21, 23, 25, 25, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, + }, + { /* Fourth byte table 117. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 9, 13, 17, 21, 25, 29, + 33, 37, 42, 46, 50, 54, 58, 62, + 66, 71, 75, 80, 85, 90, 94, 98, + 102, 106, 110, 114, 118, 122, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 127, + }, + }, +}; + +static const uint16_t u8_decomp_b4_16bit_tbl[2][30][257] = { + { + { /* Fourth byte 16-bit table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 38, 44, 48, 52, 56, 60, 64, + 68, 72, 76, 80, 84, 90, 96, 102, + 108, 112, 116, 120, 124, 130, 136, 140, + 144, 148, 152, 156, 160, 164, 168, 172, + 176, 180, 184, 188, 192, 196, 200, 206, + 212, 216, 220, 224, 228, 232, 236, 240, + 244, 250, 256, 260, 264, 268, 272, 276, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, + }, + { /* Fourth byte 16-bit table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 54, 60, 66, + 72, 78, 84, 90, 96, 100, 104, 108, + 112, 116, 120, 124, 128, 134, 140, 144, + 148, 152, 156, 160, 164, 170, 176, 182, + 188, 194, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 262, 268, 274, 280, 284, 288, 292, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, + }, + { /* Fourth byte 16-bit table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 107, 116, 116, 116, 116, + 116, 120, 124, 128, 132, 138, 144, 150, + 156, 162, 168, 174, 180, 186, 192, 198, + 204, 210, 216, 222, 228, 234, 240, 246, + 252, 256, 260, 264, 268, 272, 276, 282, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, + }, + { /* Fourth byte 16-bit table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 52, 56, 60, 64, 68, 72, 76, + 80, 86, 92, 98, 104, 110, 116, 122, + 128, 134, 140, 146, 152, 158, 164, 170, + 176, 182, 188, 194, 200, 204, 208, 212, + 216, 222, 228, 234, 240, 246, 252, 258, + 264, 270, 276, 280, 284, 288, 292, 296, + 300, 304, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, + }, + { /* Fourth byte 16-bit table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 17, 24, 31, 38, 45, + 52, 57, 62, 69, 76, 83, 90, 97, + 104, 109, 114, 121, 128, 135, 142, 142, + 142, 147, 152, 159, 166, 173, 180, 180, + 180, 185, 190, 197, 204, 211, 218, 225, + 232, 237, 242, 249, 256, 263, 270, 277, + 284, 289, 294, 301, 308, 315, 322, 329, + 336, 341, 346, 353, 360, 367, 374, 381, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, + }, + { /* Fourth byte 16-bit table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 17, 24, 31, 38, 38, + 38, 43, 48, 55, 62, 69, 76, 76, + 76, 81, 86, 93, 100, 107, 114, 121, + 128, 128, 133, 133, 140, 140, 147, 147, + 154, 159, 164, 171, 178, 185, 192, 199, + 206, 211, 216, 223, 230, 237, 244, 251, + 258, 263, 268, 273, 278, 283, 288, 293, + 298, 303, 308, 313, 318, 323, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, + }, + { /* Fourth byte 16-bit table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 23, 32, 41, 50, 59, + 68, 75, 82, 91, 100, 109, 118, 127, + 136, 143, 150, 159, 168, 177, 186, 195, + 204, 211, 218, 227, 236, 245, 254, 263, + 272, 279, 286, 295, 304, 313, 322, 331, + 340, 347, 354, 363, 372, 381, 390, 399, + 408, 413, 418, 425, 430, 437, 437, 442, + 449, 454, 459, 464, 469, 474, 477, 480, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, + }, + { /* Fourth byte 16-bit table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 14, 21, 26, 33, 33, 38, + 45, 50, 55, 60, 65, 70, 82, 94, + 106, 111, 116, 123, 130, 130, 130, 135, + 142, 147, 152, 157, 162, 162, 174, 186, + 198, 203, 208, 215, 222, 227, 232, 237, + 244, 249, 254, 259, 264, 269, 280, 291, + 293, 293, 293, 300, 305, 312, 312, 317, + 324, 329, 334, 339, 344, 349, 356, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, + }, + { /* Fourth byte 16-bit table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 15, 20, 25, 30, 35, + 40, 45, 50, 55, 60, 65, 70, 78, + 86, 94, 102, 110, 118, 126, 134, 142, + 150, 158, 166, 174, 182, 190, 190, 190, + 190, 195, 200, 205, 210, 215, 220, 225, + 230, 235, 240, 245, 250, 255, 260, 265, + 270, 275, 280, 285, 290, 295, 300, 305, + 310, 315, 320, 325, 330, 335, 340, 345, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, + }, + { /* Fourth byte 16-bit table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 27, 42, 51, 66, 75, 84, + 102, 114, 123, 132, 141, 153, 165, 177, + 189, 201, 213, 225, 243, 249, 267, 285, + 300, 312, 330, 348, 360, 369, 378, 390, + 402, 417, 432, 441, 450, 462, 471, 480, + 486, 492, 501, 510, 528, 540, 555, 573, + 585, 594, 603, 621, 633, 651, 660, 675, + 684, 696, 705, 717, 732, 744, 759, 771, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, + }, + { /* Fourth byte 16-bit table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 24, 33, 45, 54, 63, 72, + 87, 99, 105, 123, 132, 147, 159, 171, + 180, 189, 201, 207, 219, 234, 240, 258, + 267, 271, 275, 279, 283, 287, 291, 295, + 299, 303, 307, 312, 317, 322, 327, 332, + 337, 342, 347, 352, 357, 362, 367, 372, + 377, 382, 385, 387, 389, 392, 394, 396, + 396, 396, 396, 396, 402, 408, 414, 420, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, + }, + { /* Fourth byte 16-bit table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 34, 38, + 42, 46, 50, 54, 58, 62, 66, 70, + 74, 78, 82, 86, 90, 94, 98, 102, + 106, 110, 114, 118, 122, 126, 130, 134, + 138, 142, 146, 150, 154, 158, 162, 166, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 125, + 130, 135, 140, 145, 150, 156, 162, 168, + 174, 180, 186, 190, 194, 198, 202, 206, + 210, 214, 218, 222, 226, 230, 234, 238, + 242, 246, 250, 254, 258, 262, 266, 270, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, + }, + { /* Fourth byte 16-bit table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 98, 104, 110, 116, 122, 126, 130, 134, + 138, 142, 146, 150, 154, 158, 162, 166, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 130, 136, 140, 144, 148, 152, 156, 160, + 164, 168, 172, 176, 180, 184, 188, 192, + 196, 200, 204, 210, 216, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 54, 60, 66, 72, 78, 84, 90, + 96, 102, 108, 114, 120, 126, 132, 138, + 144, 150, 156, 162, 168, 174, 180, 186, + 192, 198, 204, 210, 216, 222, 228, 234, + 240, 246, 252, 258, 264, 270, 276, 282, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, + }, + { /* Fourth byte 16-bit table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 54, 60, 66, 72, 78, 84, 90, + 96, 96, 96, 102, 108, 114, 120, 126, + 132, 138, 144, 150, 156, 162, 168, 174, + 180, 186, 192, 198, 204, 210, 216, 222, + 228, 234, 240, 246, 252, 258, 264, 270, + 276, 282, 288, 294, 300, 306, 312, 318, + 324, 330, 336, 342, 348, 354, 360, 366, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, + }, + { /* Fourth byte 16-bit table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 17, 21, 25, 29, + 33, 37, 41, 45, 49, 53, 58, 62, + 66, 70, 74, 79, 83, 87, 91, 96, + 100, 104, 108, 112, 116, 121, 125, 129, + 133, 137, 141, 145, 149, 153, 157, 161, + 165, 169, 173, 177, 181, 185, 189, 193, + 197, 201, 205, 209, 213, 218, 222, 226, + 230, 235, 239, 243, 247, 251, 255, 259, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, + }, + { /* Fourth byte 16-bit table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 105, 109, 113, 117, 121, 125, + 129, 134, 139, 143, 147, 151, 155, 159, + 163, 167, 171, 175, 179, 184, 188, 192, + 196, 200, 205, 209, 213, 217, 221, 225, + 229, 233, 237, 241, 246, 250, 255, 259, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, + }, + { /* Fourth byte 16-bit table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 41, 45, 49, 53, 57, 61, + 66, 70, 75, 80, 84, 88, 92, 96, + 101, 106, 110, 114, 118, 122, 126, 130, + 134, 138, 142, 146, 150, 155, 159, 163, + 167, 171, 175, 179, 183, 187, 191, 195, + 199, 203, 207, 211, 215, 219, 223, 227, + 231, 236, 240, 244, 248, 252, 256, 261, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, + }, + { /* Fourth byte 16-bit table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 45, 49, 53, 57, 61, + 65, 69, 73, 77, 81, 85, 89, 93, + 97, 101, 105, 109, 113, 117, 122, 126, + 130, 134, 138, 142, 147, 151, 155, 159, + 163, 167, 171, 175, 179, 184, 188, 192, + 196, 201, 205, 209, 213, 217, 221, 225, + 230, 235, 240, 244, 249, 253, 257, 261, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, + }, + { /* Fourth byte 16-bit table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 29, + 33, 37, 41, 45, 49, 53, 58, 62, + 66, 71, 76, 80, 84, 88, 92, 96, + 100, 104, 108, 112, 117, 121, 126, 130, + 135, 139, 143, 147, 152, 156, 160, 165, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 227, 231, + 236, 240, 245, 249, 254, 259, 264, 268, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, + }, + { /* Fourth byte 16-bit table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 9, 14, 19, 24, 28, 32, + 36, 40, 44, 48, 52, 56, 61, 65, + 69, 73, 77, 82, 86, 91, 96, 100, + 104, 108, 112, 116, 120, 125, 130, 135, + 139, 143, 148, 152, 156, 160, 165, 169, + 173, 177, 181, 185, 190, 194, 198, 202, + 206, 210, 214, 219, 224, 228, 233, 237, + 242, 246, 250, 254, 259, 264, 268, 273, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, + }, + { /* Fourth byte 16-bit table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 9, 13, 17, 21, 25, 29, + 34, 39, 44, 49, 53, 57, 61, 65, + 69, 73, 77, 81, 85, 89, 93, 97, + 102, 106, 110, 114, 118, 122, 126, 130, + 134, 138, 142, 146, 150, 155, 160, 165, + 169, 173, 177, 181, 186, 190, 195, 199, + 203, 208, 213, 217, 221, 225, 229, 233, + 237, 241, 245, 249, 253, 257, 261, 265, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, + }, + { /* Fourth byte 16-bit table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 25, 29, + 33, 37, 41, 45, 50, 55, 59, 63, + 67, 71, 75, 79, 84, 88, 92, 96, + 100, 105, 110, 114, 118, 122, 127, 131, + 135, 140, 145, 149, 153, 157, 162, 166, + 170, 174, 178, 182, 186, 190, 195, 199, + 203, 207, 212, 216, 220, 224, 228, 233, + 238, 242, 246, 250, 255, 259, 264, 268, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, + }, + { /* Fourth byte 16-bit table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + }, + { + { /* Fourth byte 16-bit table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 38, 44, 48, 52, 56, 60, 64, + 68, 72, 76, 80, 84, 90, 96, 102, + 108, 112, 116, 120, 124, 130, 136, 140, + 144, 148, 152, 156, 160, 164, 168, 172, + 176, 180, 184, 188, 192, 196, 200, 206, + 212, 216, 220, 224, 228, 232, 236, 240, + 244, 250, 256, 260, 264, 268, 272, 276, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, + 280, + }, + { /* Fourth byte 16-bit table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 54, 60, 66, + 72, 78, 84, 90, 96, 100, 104, 108, + 112, 116, 120, 124, 128, 134, 140, 144, + 148, 152, 156, 160, 164, 170, 176, 182, + 188, 194, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 262, 268, 274, 280, 284, 288, 292, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, + }, + { /* Fourth byte 16-bit table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 107, 116, 116, 116, 116, + 116, 120, 124, 128, 132, 138, 144, 150, + 156, 162, 168, 174, 180, 186, 192, 198, + 204, 210, 216, 222, 228, 234, 240, 246, + 252, 256, 260, 264, 268, 272, 276, 282, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, + }, + { /* Fourth byte 16-bit table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 52, 56, 60, 64, 68, 72, 76, + 80, 86, 92, 98, 104, 110, 116, 122, + 128, 134, 140, 146, 152, 158, 164, 170, + 176, 182, 188, 194, 200, 204, 208, 212, + 216, 222, 228, 234, 240, 246, 252, 258, + 264, 270, 276, 280, 284, 288, 292, 296, + 300, 304, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, + 308, + }, + { /* Fourth byte 16-bit table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 17, 24, 31, 38, 45, + 52, 57, 62, 69, 76, 83, 90, 97, + 104, 109, 114, 121, 128, 135, 142, 142, + 142, 147, 152, 159, 166, 173, 180, 180, + 180, 185, 190, 197, 204, 211, 218, 225, + 232, 237, 242, 249, 256, 263, 270, 277, + 284, 289, 294, 301, 308, 315, 322, 329, + 336, 341, 346, 353, 360, 367, 374, 381, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, 388, 388, 388, 388, 388, 388, 388, + 388, + }, + { /* Fourth byte 16-bit table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 17, 24, 31, 38, 38, + 38, 43, 48, 55, 62, 69, 76, 76, + 76, 81, 86, 93, 100, 107, 114, 121, + 128, 128, 133, 133, 140, 140, 147, 147, + 154, 159, 164, 171, 178, 185, 192, 199, + 206, 211, 216, 223, 230, 237, 244, 251, + 258, 263, 268, 273, 278, 283, 288, 293, + 298, 303, 308, 313, 318, 323, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, 328, 328, 328, 328, 328, 328, 328, + 328, + }, + { /* Fourth byte 16-bit table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 14, 23, 32, 41, 50, 59, + 68, 75, 82, 91, 100, 109, 118, 127, + 136, 143, 150, 159, 168, 177, 186, 195, + 204, 211, 218, 227, 236, 245, 254, 263, + 272, 279, 286, 295, 304, 313, 322, 331, + 340, 347, 354, 363, 372, 381, 390, 399, + 408, 413, 418, 425, 430, 437, 437, 442, + 449, 454, 459, 464, 469, 474, 477, 480, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, + 483, + }, + { /* Fourth byte 16-bit table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 14, 21, 26, 33, 33, 38, + 45, 50, 55, 60, 65, 70, 82, 94, + 106, 111, 116, 123, 130, 130, 130, 135, + 142, 147, 152, 157, 162, 162, 174, 186, + 198, 203, 208, 215, 222, 227, 232, 237, + 244, 249, 254, 259, 264, 269, 280, 291, + 293, 293, 293, 300, 305, 312, 312, 317, + 324, 329, 334, 339, 344, 349, 356, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, + 359, + }, + { /* Fourth byte 16-bit table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 10, 15, 20, 25, 30, 35, + 40, 45, 50, 55, 60, 65, 70, 78, + 86, 94, 102, 110, 118, 126, 134, 142, + 150, 158, 166, 174, 182, 190, 207, 221, + 221, 226, 231, 236, 241, 246, 251, 256, + 261, 266, 271, 276, 281, 286, 291, 296, + 301, 306, 311, 316, 321, 326, 331, 336, + 341, 346, 351, 356, 361, 366, 371, 376, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, + 381, + }, + { /* Fourth byte 16-bit table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 27, 42, 51, 66, 75, 84, + 102, 114, 123, 132, 141, 153, 165, 177, + 189, 201, 213, 225, 243, 249, 267, 285, + 300, 312, 330, 348, 360, 369, 378, 390, + 402, 417, 432, 441, 450, 462, 471, 480, + 486, 492, 501, 510, 528, 540, 555, 573, + 585, 594, 603, 621, 633, 651, 660, 675, + 684, 696, 705, 717, 732, 744, 759, 771, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, 777, 777, 777, 777, 777, 777, 777, + 777, + }, + { /* Fourth byte 16-bit table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 24, 33, 45, 54, 63, 72, + 87, 99, 105, 123, 132, 147, 159, 171, + 180, 189, 201, 207, 219, 234, 240, 258, + 267, 271, 275, 279, 283, 287, 291, 295, + 299, 303, 307, 312, 317, 322, 327, 332, + 337, 342, 347, 352, 357, 362, 367, 372, + 377, 382, 385, 387, 389, 392, 394, 396, + 398, 401, 404, 406, 412, 418, 424, 430, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, + 442, + }, + { /* Fourth byte 16-bit table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 164, 168, 172, 176, 180, 184, 188, + 192, 196, 200, 204, 208, 212, 216, 220, + 224, 228, 232, 236, 240, 244, 248, 252, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, + }, + { /* Fourth byte 16-bit table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 34, 38, + 42, 46, 50, 54, 58, 62, 66, 70, + 74, 78, 82, 86, 90, 94, 98, 102, + 106, 110, 114, 118, 122, 126, 130, 134, + 138, 142, 146, 150, 154, 158, 162, 166, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 125, + 130, 135, 140, 145, 150, 156, 162, 168, + 174, 180, 186, 190, 194, 198, 202, 206, + 210, 214, 218, 222, 226, 230, 234, 238, + 242, 246, 250, 254, 258, 262, 266, 270, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, + 274, + }, + { /* Fourth byte 16-bit table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 98, 104, 110, 116, 122, 126, 130, 134, + 138, 142, 146, 150, 154, 158, 162, 166, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 130, 136, 140, 144, 148, 152, 156, 160, + 164, 168, 172, 176, 180, 184, 188, 192, + 196, 200, 204, 210, 216, 222, 226, 230, + 234, 238, 242, 246, 250, 254, 258, 262, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, + 266, + }, + { /* Fourth byte 16-bit table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 54, 60, 66, 72, 78, 84, 90, + 96, 102, 108, 114, 120, 126, 132, 138, + 144, 150, 156, 162, 168, 174, 180, 186, + 192, 198, 204, 210, 216, 222, 228, 234, + 240, 246, 252, 258, 264, 270, 276, 282, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, + 288, + }, + { /* Fourth byte 16-bit table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 12, 18, 24, 30, 36, 42, + 48, 54, 60, 66, 72, 78, 84, 90, + 96, 96, 96, 102, 108, 114, 120, 126, + 132, 138, 144, 150, 156, 162, 168, 174, + 180, 186, 192, 198, 204, 210, 216, 222, + 228, 234, 240, 246, 252, 258, 264, 270, + 276, 282, 288, 294, 300, 306, 312, 318, + 324, 330, 336, 342, 348, 354, 360, 366, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, + 372, + }, + { /* Fourth byte 16-bit table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 17, 21, 25, 29, + 33, 37, 41, 45, 49, 53, 58, 62, + 66, 70, 74, 79, 83, 87, 91, 96, + 100, 104, 108, 112, 116, 121, 125, 129, + 133, 137, 141, 145, 149, 153, 157, 161, + 165, 169, 173, 177, 181, 185, 189, 193, + 197, 201, 205, 209, 213, 218, 222, 226, + 230, 235, 239, 243, 247, 251, 255, 259, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, + }, + { /* Fourth byte 16-bit table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 105, 109, 113, 117, 121, 125, + 129, 134, 139, 143, 147, 151, 155, 159, + 163, 167, 171, 175, 179, 184, 188, 192, + 196, 200, 205, 209, 213, 217, 221, 225, + 229, 233, 237, 241, 246, 250, 255, 259, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, + 263, + }, + { /* Fourth byte 16-bit table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 41, 45, 49, 53, 57, 61, + 66, 70, 75, 80, 84, 88, 92, 96, + 101, 106, 110, 114, 118, 122, 126, 130, + 134, 138, 142, 146, 150, 155, 159, 163, + 167, 171, 175, 179, 183, 187, 191, 195, + 199, 203, 207, 211, 215, 219, 223, 227, + 231, 236, 240, 244, 248, 252, 256, 261, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, + }, + { /* Fourth byte 16-bit table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 45, 49, 53, 57, 61, + 65, 69, 73, 77, 81, 85, 89, 93, + 97, 101, 105, 109, 113, 117, 122, 126, + 130, 134, 138, 142, 147, 151, 155, 159, + 163, 167, 171, 175, 179, 184, 188, 192, + 196, 201, 205, 209, 213, 217, 221, 225, + 230, 235, 240, 244, 249, 253, 257, 261, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, + 265, + }, + { /* Fourth byte 16-bit table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 29, + 33, 37, 41, 45, 49, 53, 58, 62, + 66, 71, 76, 80, 84, 88, 92, 96, + 100, 104, 108, 112, 117, 121, 126, 130, + 135, 139, 143, 147, 152, 156, 160, 165, + 170, 174, 178, 182, 186, 190, 194, 198, + 202, 206, 210, 214, 218, 222, 227, 231, + 236, 240, 245, 249, 254, 259, 264, 268, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, + }, + { /* Fourth byte 16-bit table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 9, 14, 19, 24, 28, 32, + 36, 40, 44, 48, 52, 56, 61, 65, + 69, 73, 77, 82, 86, 91, 96, 100, + 104, 108, 112, 116, 120, 125, 130, 135, + 139, 143, 148, 152, 156, 160, 165, 169, + 173, 177, 181, 185, 190, 194, 198, 202, + 206, 210, 214, 219, 224, 228, 233, 237, + 242, 246, 250, 254, 259, 264, 268, 273, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, + 277, + }, + { /* Fourth byte 16-bit table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 9, 13, 17, 21, 25, 29, + 34, 39, 44, 49, 53, 57, 61, 65, + 69, 73, 77, 81, 85, 89, 93, 97, + 102, 106, 110, 114, 118, 122, 126, 130, + 134, 138, 142, 146, 150, 155, 160, 165, + 169, 173, 177, 181, 186, 190, 195, 199, + 203, 208, 213, 217, 221, 225, 229, 233, + 237, 241, 245, 249, 253, 257, 261, 265, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, + 269, + }, + { /* Fourth byte 16-bit table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 25, 29, + 33, 37, 41, 45, 50, 55, 59, 63, + 67, 71, 75, 79, 84, 88, 92, 96, + 100, 105, 110, 114, 118, 122, 127, 131, + 135, 140, 145, 149, 153, 157, 162, 166, + 170, 174, 178, 182, 186, 190, 195, 199, + 203, 207, 212, 216, 220, 224, 228, 233, + 238, 242, 246, 250, 255, 259, 264, 268, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, + 272, + }, + }, +}; + +static const uchar_t u8_decomp_final_tbl[2][19370] = { + { + 0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84, + 0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20, + 0xCC, 0xA7, 0x31, 0x6F, 0x31, 0xE2, 0x81, 0x84, + 0x34, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x33, 0xE2, + 0x81, 0x84, 0x34, 0xF6, 0x41, 0xCC, 0x80, 0xF6, + 0x41, 0xCC, 0x81, 0xF6, 0x41, 0xCC, 0x82, 0xF6, + 0x41, 0xCC, 0x83, 0xF6, 0x41, 0xCC, 0x88, 0xF6, + 0x41, 0xCC, 0x8A, 0xF6, 0x43, 0xCC, 0xA7, 0xF6, + 0x45, 0xCC, 0x80, 0xF6, 0x45, 0xCC, 0x81, 0xF6, + 0x45, 0xCC, 0x82, 0xF6, 0x45, 0xCC, 0x88, 0xF6, + 0x49, 0xCC, 0x80, 0xF6, 0x49, 0xCC, 0x81, 0xF6, + 0x49, 0xCC, 0x82, 0xF6, 0x49, 0xCC, 0x88, 0xF6, + 0x4E, 0xCC, 0x83, 0xF6, 0x4F, 0xCC, 0x80, 0xF6, + 0x4F, 0xCC, 0x81, 0xF6, 0x4F, 0xCC, 0x82, 0xF6, + 0x4F, 0xCC, 0x83, 0xF6, 0x4F, 0xCC, 0x88, 0xF6, + 0x55, 0xCC, 0x80, 0xF6, 0x55, 0xCC, 0x81, 0xF6, + 0x55, 0xCC, 0x82, 0xF6, 0x55, 0xCC, 0x88, 0xF6, + 0x59, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x80, 0xF6, + 0x61, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x82, 0xF6, + 0x61, 0xCC, 0x83, 0xF6, 0x61, 0xCC, 0x88, 0xF6, + 0x61, 0xCC, 0x8A, 0xF6, 0x63, 0xCC, 0xA7, 0xF6, + 0x65, 0xCC, 0x80, 0xF6, 0x65, 0xCC, 0x81, 0xF6, + 0x65, 0xCC, 0x82, 0xF6, 0x65, 0xCC, 0x88, 0xF6, + 0x69, 0xCC, 0x80, 0xF6, 0x69, 0xCC, 0x81, 0xF6, + 0x69, 0xCC, 0x82, 0xF6, 0x69, 0xCC, 0x88, 0xF6, + 0x6E, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x80, 0xF6, + 0x6F, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x82, 0xF6, + 0x6F, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x88, 0xF6, + 0x75, 0xCC, 0x80, 0xF6, 0x75, 0xCC, 0x81, 0xF6, + 0x75, 0xCC, 0x82, 0xF6, 0x75, 0xCC, 0x88, 0xF6, + 0x79, 0xCC, 0x81, 0xF6, 0x79, 0xCC, 0x88, 0xF6, + 0x41, 0xCC, 0x84, 0xF6, 0x61, 0xCC, 0x84, 0xF6, + 0x41, 0xCC, 0x86, 0xF6, 0x61, 0xCC, 0x86, 0xF6, + 0x41, 0xCC, 0xA8, 0xF6, 0x61, 0xCC, 0xA8, 0xF6, + 0x43, 0xCC, 0x81, 0xF6, 0x63, 0xCC, 0x81, 0xF6, + 0x43, 0xCC, 0x82, 0xF6, 0x63, 0xCC, 0x82, 0xF6, + 0x43, 0xCC, 0x87, 0xF6, 0x63, 0xCC, 0x87, 0xF6, + 0x43, 0xCC, 0x8C, 0xF6, 0x63, 0xCC, 0x8C, 0xF6, + 0x44, 0xCC, 0x8C, 0xF6, 0x64, 0xCC, 0x8C, 0xF6, + 0x45, 0xCC, 0x84, 0xF6, 0x65, 0xCC, 0x84, 0xF6, + 0x45, 0xCC, 0x86, 0xF6, 0x65, 0xCC, 0x86, 0xF6, + 0x45, 0xCC, 0x87, 0xF6, 0x65, 0xCC, 0x87, 0xF6, + 0x45, 0xCC, 0xA8, 0xF6, 0x65, 0xCC, 0xA8, 0xF6, + 0x45, 0xCC, 0x8C, 0xF6, 0x65, 0xCC, 0x8C, 0xF6, + 0x47, 0xCC, 0x82, 0xF6, 0x67, 0xCC, 0x82, 0xF6, + 0x47, 0xCC, 0x86, 0xF6, 0x67, 0xCC, 0x86, 0xF6, + 0x47, 0xCC, 0x87, 0xF6, 0x67, 0xCC, 0x87, 0xF6, + 0x47, 0xCC, 0xA7, 0xF6, 0x67, 0xCC, 0xA7, 0xF6, + 0x48, 0xCC, 0x82, 0xF6, 0x68, 0xCC, 0x82, 0xF6, + 0x49, 0xCC, 0x83, 0xF6, 0x69, 0xCC, 0x83, 0xF6, + 0x49, 0xCC, 0x84, 0xF6, 0x69, 0xCC, 0x84, 0xF6, + 0x49, 0xCC, 0x86, 0xF6, 0x69, 0xCC, 0x86, 0xF6, + 0x49, 0xCC, 0xA8, 0xF6, 0x69, 0xCC, 0xA8, 0xF6, + 0x49, 0xCC, 0x87, 0x49, 0x4A, 0x69, 0x6A, 0xF6, + 0x4A, 0xCC, 0x82, 0xF6, 0x6A, 0xCC, 0x82, 0xF6, + 0x4B, 0xCC, 0xA7, 0xF6, 0x6B, 0xCC, 0xA7, 0xF6, + 0x4C, 0xCC, 0x81, 0xF6, 0x6C, 0xCC, 0x81, 0xF6, + 0x4C, 0xCC, 0xA7, 0xF6, 0x6C, 0xCC, 0xA7, 0xF6, + 0x4C, 0xCC, 0x8C, 0xF6, 0x6C, 0xCC, 0x8C, 0x4C, + 0xC2, 0xB7, 0x6C, 0xC2, 0xB7, 0xF6, 0x4E, 0xCC, + 0x81, 0xF6, 0x6E, 0xCC, 0x81, 0xF6, 0x4E, 0xCC, + 0xA7, 0xF6, 0x6E, 0xCC, 0xA7, 0xF6, 0x4E, 0xCC, + 0x8C, 0xF6, 0x6E, 0xCC, 0x8C, 0xCA, 0xBC, 0x6E, + 0xF6, 0x4F, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, 0x84, + 0xF6, 0x4F, 0xCC, 0x86, 0xF6, 0x6F, 0xCC, 0x86, + 0xF6, 0x4F, 0xCC, 0x8B, 0xF6, 0x6F, 0xCC, 0x8B, + 0xF6, 0x52, 0xCC, 0x81, 0xF6, 0x72, 0xCC, 0x81, + 0xF6, 0x52, 0xCC, 0xA7, 0xF6, 0x72, 0xCC, 0xA7, + 0xF6, 0x52, 0xCC, 0x8C, 0xF6, 0x72, 0xCC, 0x8C, + 0xF6, 0x53, 0xCC, 0x81, 0xF6, 0x73, 0xCC, 0x81, + 0xF6, 0x53, 0xCC, 0x82, 0xF6, 0x73, 0xCC, 0x82, + 0xF6, 0x53, 0xCC, 0xA7, 0xF6, 0x73, 0xCC, 0xA7, + 0xF6, 0x53, 0xCC, 0x8C, 0xF6, 0x73, 0xCC, 0x8C, + 0xF6, 0x54, 0xCC, 0xA7, 0xF6, 0x74, 0xCC, 0xA7, + 0xF6, 0x54, 0xCC, 0x8C, 0xF6, 0x74, 0xCC, 0x8C, + 0xF6, 0x55, 0xCC, 0x83, 0xF6, 0x75, 0xCC, 0x83, + 0xF6, 0x55, 0xCC, 0x84, 0xF6, 0x75, 0xCC, 0x84, + 0xF6, 0x55, 0xCC, 0x86, 0xF6, 0x75, 0xCC, 0x86, + 0xF6, 0x55, 0xCC, 0x8A, 0xF6, 0x75, 0xCC, 0x8A, + 0xF6, 0x55, 0xCC, 0x8B, 0xF6, 0x75, 0xCC, 0x8B, + 0xF6, 0x55, 0xCC, 0xA8, 0xF6, 0x75, 0xCC, 0xA8, + 0xF6, 0x57, 0xCC, 0x82, 0xF6, 0x77, 0xCC, 0x82, + 0xF6, 0x59, 0xCC, 0x82, 0xF6, 0x79, 0xCC, 0x82, + 0xF6, 0x59, 0xCC, 0x88, 0xF6, 0x5A, 0xCC, 0x81, + 0xF6, 0x7A, 0xCC, 0x81, 0xF6, 0x5A, 0xCC, 0x87, + 0xF6, 0x7A, 0xCC, 0x87, 0xF6, 0x5A, 0xCC, 0x8C, + 0xF6, 0x7A, 0xCC, 0x8C, 0x73, 0xF6, 0x4F, 0xCC, + 0x9B, 0xF6, 0x6F, 0xCC, 0x9B, 0xF6, 0x55, 0xCC, + 0x9B, 0xF6, 0x75, 0xCC, 0x9B, 0x44, 0x5A, 0xCC, + 0x8C, 0x44, 0x7A, 0xCC, 0x8C, 0x64, 0x7A, 0xCC, + 0x8C, 0x4C, 0x4A, 0x4C, 0x6A, 0x6C, 0x6A, 0x4E, + 0x4A, 0x4E, 0x6A, 0x6E, 0x6A, 0xF6, 0x41, 0xCC, + 0x8C, 0xF6, 0x61, 0xCC, 0x8C, 0xF6, 0x49, 0xCC, + 0x8C, 0xF6, 0x69, 0xCC, 0x8C, 0xF6, 0x4F, 0xCC, + 0x8C, 0xF6, 0x6F, 0xCC, 0x8C, 0xF6, 0x55, 0xCC, + 0x8C, 0xF6, 0x75, 0xCC, 0x8C, 0xF6, 0x55, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x75, 0xCC, 0x88, 0xCC, + 0x84, 0xF6, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0x55, 0xCC, + 0x88, 0xCC, 0x8C, 0xF6, 0x75, 0xCC, 0x88, 0xCC, + 0x8C, 0xF6, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xF6, + 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xF6, 0x41, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x61, 0xCC, 0x88, 0xCC, + 0x84, 0xF6, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xF6, + 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xF6, 0xC3, 0x86, + 0xCC, 0x84, 0xF6, 0xC3, 0xA6, 0xCC, 0x84, 0xF6, + 0x47, 0xCC, 0x8C, 0xF6, 0x67, 0xCC, 0x8C, 0xF6, + 0x4B, 0xCC, 0x8C, 0xF6, 0x6B, 0xCC, 0x8C, 0xF6, + 0x4F, 0xCC, 0xA8, 0xF6, 0x6F, 0xCC, 0xA8, 0xF6, + 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0xA8, 0xCC, 0x84, 0xF6, 0xC6, 0xB7, 0xCC, 0x8C, + 0xF6, 0xCA, 0x92, 0xCC, 0x8C, 0xF6, 0x6A, 0xCC, + 0x8C, 0x44, 0x5A, 0x44, 0x7A, 0x64, 0x7A, 0xF6, + 0x47, 0xCC, 0x81, 0xF6, 0x67, 0xCC, 0x81, 0xF6, + 0x4E, 0xCC, 0x80, 0xF6, 0x6E, 0xCC, 0x80, 0xF6, + 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xF6, 0x61, 0xCC, + 0x8A, 0xCC, 0x81, 0xF6, 0xC3, 0x86, 0xCC, 0x81, + 0xF6, 0xC3, 0xA6, 0xCC, 0x81, 0xF6, 0xC3, 0x98, + 0xCC, 0x81, 0xF6, 0xC3, 0xB8, 0xCC, 0x81, 0xF6, + 0x41, 0xCC, 0x8F, 0xF6, 0x61, 0xCC, 0x8F, 0xF6, + 0x41, 0xCC, 0x91, 0xF6, 0x61, 0xCC, 0x91, 0xF6, + 0x45, 0xCC, 0x8F, 0xF6, 0x65, 0xCC, 0x8F, 0xF6, + 0x45, 0xCC, 0x91, 0xF6, 0x65, 0xCC, 0x91, 0xF6, + 0x49, 0xCC, 0x8F, 0xF6, 0x69, 0xCC, 0x8F, 0xF6, + 0x49, 0xCC, 0x91, 0xF6, 0x69, 0xCC, 0x91, 0xF6, + 0x4F, 0xCC, 0x8F, 0xF6, 0x6F, 0xCC, 0x8F, 0xF6, + 0x4F, 0xCC, 0x91, 0xF6, 0x6F, 0xCC, 0x91, 0xF6, + 0x52, 0xCC, 0x8F, 0xF6, 0x72, 0xCC, 0x8F, 0xF6, + 0x52, 0xCC, 0x91, 0xF6, 0x72, 0xCC, 0x91, 0xF6, + 0x55, 0xCC, 0x8F, 0xF6, 0x75, 0xCC, 0x8F, 0xF6, + 0x55, 0xCC, 0x91, 0xF6, 0x75, 0xCC, 0x91, 0xF6, + 0x53, 0xCC, 0xA6, 0xF6, 0x73, 0xCC, 0xA6, 0xF6, + 0x54, 0xCC, 0xA6, 0xF6, 0x74, 0xCC, 0xA6, 0xF6, + 0x48, 0xCC, 0x8C, 0xF6, 0x68, 0xCC, 0x8C, 0xF6, + 0x41, 0xCC, 0x87, 0xF6, 0x61, 0xCC, 0x87, 0xF6, + 0x45, 0xCC, 0xA7, 0xF6, 0x65, 0xCC, 0xA7, 0xF6, + 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x4F, 0xCC, 0x83, 0xCC, + 0x84, 0xF6, 0x6F, 0xCC, 0x83, 0xCC, 0x84, 0xF6, + 0x4F, 0xCC, 0x87, 0xF6, 0x6F, 0xCC, 0x87, 0xF6, + 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0x87, 0xCC, 0x84, 0xF6, 0x59, 0xCC, 0x84, 0xF6, + 0x79, 0xCC, 0x84, 0x68, 0xC9, 0xA6, 0x6A, 0x72, + 0xC9, 0xB9, 0xC9, 0xBB, 0xCA, 0x81, 0x77, 0x79, + 0x20, 0xCC, 0x86, 0x20, 0xCC, 0x87, 0x20, 0xCC, + 0x8A, 0x20, 0xCC, 0xA8, 0x20, 0xCC, 0x83, 0x20, + 0xCC, 0x8B, 0xC9, 0xA3, 0x6C, 0x73, 0x78, 0xCA, + 0x95, 0xF6, 0xCC, 0x80, 0xF6, 0xCC, 0x81, 0xF6, + 0xCC, 0x93, 0xF6, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0xCA, 0xB9, 0x20, 0xCD, 0x85, 0xF6, 0x3B, 0x20, + 0xCC, 0x81, 0xF5, 0x05, 0xC2, 0xA8, 0xCC, 0x81, + 0x20, 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0xCE, 0x91, + 0xCC, 0x81, 0xF6, 0xC2, 0xB7, 0xF6, 0xCE, 0x95, + 0xCC, 0x81, 0xF6, 0xCE, 0x97, 0xCC, 0x81, 0xF6, + 0xCE, 0x99, 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, + 0x81, 0xF6, 0xCE, 0xA5, 0xCC, 0x81, 0xF6, 0xCE, + 0xA9, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, 0x88, + 0xCC, 0x81, 0xF6, 0xCE, 0x99, 0xCC, 0x88, 0xF6, + 0xCE, 0xA5, 0xCC, 0x88, 0xF6, 0xCE, 0xB1, 0xCC, + 0x81, 0xF6, 0xCE, 0xB5, 0xCC, 0x81, 0xF6, 0xCE, + 0xB7, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, 0x81, + 0xF6, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0xCE, 0xB9, 0xCC, 0x88, 0xF6, 0xCF, 0x85, 0xCC, + 0x88, 0xF6, 0xCE, 0xBF, 0xCC, 0x81, 0xF6, 0xCF, + 0x85, 0xCC, 0x81, 0xF6, 0xCF, 0x89, 0xCC, 0x81, + 0xCE, 0xB2, 0xCE, 0xB8, 0xCE, 0xA5, 0xF5, 0x05, + 0xCF, 0x92, 0xCC, 0x81, 0xCE, 0xA5, 0xCC, 0x81, + 0xF5, 0x05, 0xCF, 0x92, 0xCC, 0x88, 0xCE, 0xA5, + 0xCC, 0x88, 0xCF, 0x86, 0xCF, 0x80, 0xCE, 0xBA, + 0xCF, 0x81, 0xCF, 0x82, 0xCE, 0x98, 0xCE, 0xB5, + 0xF6, 0xD0, 0x95, 0xCC, 0x80, 0xF6, 0xD0, 0x95, + 0xCC, 0x88, 0xF6, 0xD0, 0x93, 0xCC, 0x81, 0xF6, + 0xD0, 0x86, 0xCC, 0x88, 0xF6, 0xD0, 0x9A, 0xCC, + 0x81, 0xF6, 0xD0, 0x98, 0xCC, 0x80, 0xF6, 0xD0, + 0xA3, 0xCC, 0x86, 0xF6, 0xD0, 0x98, 0xCC, 0x86, + 0xF6, 0xD0, 0xB8, 0xCC, 0x86, 0xF6, 0xD0, 0xB5, + 0xCC, 0x80, 0xF6, 0xD0, 0xB5, 0xCC, 0x88, 0xF6, + 0xD0, 0xB3, 0xCC, 0x81, 0xF6, 0xD1, 0x96, 0xCC, + 0x88, 0xF6, 0xD0, 0xBA, 0xCC, 0x81, 0xF6, 0xD0, + 0xB8, 0xCC, 0x80, 0xF6, 0xD1, 0x83, 0xCC, 0x86, + 0xF6, 0xD1, 0xB4, 0xCC, 0x8F, 0xF6, 0xD1, 0xB5, + 0xCC, 0x8F, 0xF6, 0xD0, 0x96, 0xCC, 0x86, 0xF6, + 0xD0, 0xB6, 0xCC, 0x86, 0xF6, 0xD0, 0x90, 0xCC, + 0x86, 0xF6, 0xD0, 0xB0, 0xCC, 0x86, 0xF6, 0xD0, + 0x90, 0xCC, 0x88, 0xF6, 0xD0, 0xB0, 0xCC, 0x88, + 0xF6, 0xD0, 0x95, 0xCC, 0x86, 0xF6, 0xD0, 0xB5, + 0xCC, 0x86, 0xF6, 0xD3, 0x98, 0xCC, 0x88, 0xF6, + 0xD3, 0x99, 0xCC, 0x88, 0xF6, 0xD0, 0x96, 0xCC, + 0x88, 0xF6, 0xD0, 0xB6, 0xCC, 0x88, 0xF6, 0xD0, + 0x97, 0xCC, 0x88, 0xF6, 0xD0, 0xB7, 0xCC, 0x88, + 0xF6, 0xD0, 0x98, 0xCC, 0x84, 0xF6, 0xD0, 0xB8, + 0xCC, 0x84, 0xF6, 0xD0, 0x98, 0xCC, 0x88, 0xF6, + 0xD0, 0xB8, 0xCC, 0x88, 0xF6, 0xD0, 0x9E, 0xCC, + 0x88, 0xF6, 0xD0, 0xBE, 0xCC, 0x88, 0xF6, 0xD3, + 0xA8, 0xCC, 0x88, 0xF6, 0xD3, 0xA9, 0xCC, 0x88, + 0xF6, 0xD0, 0xAD, 0xCC, 0x88, 0xF6, 0xD1, 0x8D, + 0xCC, 0x88, 0xF6, 0xD0, 0xA3, 0xCC, 0x84, 0xF6, + 0xD1, 0x83, 0xCC, 0x84, 0xF6, 0xD0, 0xA3, 0xCC, + 0x88, 0xF6, 0xD1, 0x83, 0xCC, 0x88, 0xF6, 0xD0, + 0xA3, 0xCC, 0x8B, 0xF6, 0xD1, 0x83, 0xCC, 0x8B, + 0xF6, 0xD0, 0xA7, 0xCC, 0x88, 0xF6, 0xD1, 0x87, + 0xCC, 0x88, 0xF6, 0xD0, 0xAB, 0xCC, 0x88, 0xF6, + 0xD1, 0x8B, 0xCC, 0x88, 0xD5, 0xA5, 0xD6, 0x82, + 0xF6, 0xD8, 0xA7, 0xD9, 0x93, 0xF6, 0xD8, 0xA7, + 0xD9, 0x94, 0xF6, 0xD9, 0x88, 0xD9, 0x94, 0xF6, + 0xD8, 0xA7, 0xD9, 0x95, 0xF6, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xA7, 0xD9, 0xB4, 0xD9, 0x88, 0xD9, + 0xB4, 0xDB, 0x87, 0xD9, 0xB4, 0xD9, 0x8A, 0xD9, + 0xB4, 0xF6, 0xDB, 0x95, 0xD9, 0x94, 0xF6, 0xDB, + 0x81, 0xD9, 0x94, 0xF6, 0xDB, 0x92, 0xD9, 0x94, + 0xF6, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0xF6, + 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, + 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, + 0x95, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0x96, + 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0x97, 0xE0, + 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0x9C, 0xE0, 0xA4, + 0xBC, 0xF6, 0xE0, 0xA4, 0xA1, 0xE0, 0xA4, 0xBC, + 0xF6, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, 0xBC, 0xF6, + 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, + 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA7, + 0x87, 0xE0, 0xA6, 0xBE, 0xF6, 0xE0, 0xA7, 0x87, + 0xE0, 0xA7, 0x97, 0xF6, 0xE0, 0xA6, 0xA1, 0xE0, + 0xA6, 0xBC, 0xF6, 0xE0, 0xA6, 0xA2, 0xE0, 0xA6, + 0xBC, 0xF6, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, + 0xF6, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, 0xF6, + 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, + 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, 0xA8, + 0x97, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, 0xA8, 0x9C, + 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, 0xA8, 0xAB, 0xE0, + 0xA8, 0xBC, 0xF6, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, + 0x96, 0xF6, 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE, + 0xF6, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0xF6, + 0xE0, 0xAC, 0xA1, 0xE0, 0xAC, 0xBC, 0xF6, 0xE0, + 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0xF6, 0xE0, 0xAE, + 0x92, 0xE0, 0xAF, 0x97, 0xF6, 0xE0, 0xAF, 0x86, + 0xE0, 0xAE, 0xBE, 0xF6, 0xE0, 0xAF, 0x87, 0xE0, + 0xAE, 0xBE, 0xF6, 0xE0, 0xAF, 0x86, 0xE0, 0xAF, + 0x97, 0xF6, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, + 0xF6, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0xF6, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0xF6, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0xF6, 0xE0, 0xB3, + 0x86, 0xE0, 0xB3, 0x82, 0xF6, 0xE0, 0xB3, 0x86, + 0xE0, 0xB3, 0x82, 0xE0, 0xB3, 0x95, 0xF6, 0xE0, + 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0xF6, 0xE0, 0xB5, + 0x87, 0xE0, 0xB4, 0xBE, 0xF6, 0xE0, 0xB5, 0x86, + 0xE0, 0xB5, 0x97, 0xF6, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x8A, 0xF6, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, + 0x8F, 0xF6, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, + 0xE0, 0xB7, 0x8A, 0xF6, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x9F, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, + 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0xE0, 0xBA, + 0xAB, 0xE0, 0xBA, 0x99, 0xE0, 0xBA, 0xAB, 0xE0, + 0xBA, 0xA1, 0xE0, 0xBC, 0x8B, 0xF6, 0xE0, 0xBD, + 0x82, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x8C, + 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x91, 0xE0, + 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, + 0xB7, 0xF6, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, + 0xF6, 0xE0, 0xBD, 0x80, 0xE0, 0xBE, 0xB5, 0xF6, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, 0xF6, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xF6, 0xE0, 0xBE, + 0xB2, 0xE0, 0xBE, 0x80, 0xE0, 0xBE, 0xB2, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xF6, 0xE0, 0xBE, + 0xB3, 0xE0, 0xBE, 0x80, 0xE0, 0xBE, 0xB3, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xF6, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBE, 0x80, 0xF6, 0xE0, 0xBE, 0x92, + 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, 0x9C, 0xE0, + 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, + 0xB7, 0xF6, 0xE0, 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, + 0xF6, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, 0xB7, 0xF6, + 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0xF6, 0xE1, + 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0xF6, 0x41, 0xCC, + 0xA5, 0xF6, 0x61, 0xCC, 0xA5, 0xF6, 0x42, 0xCC, + 0x87, 0xF6, 0x62, 0xCC, 0x87, 0xF6, 0x42, 0xCC, + 0xA3, 0xF6, 0x62, 0xCC, 0xA3, 0xF6, 0x42, 0xCC, + 0xB1, 0xF6, 0x62, 0xCC, 0xB1, 0xF6, 0x43, 0xCC, + 0xA7, 0xCC, 0x81, 0xF6, 0x63, 0xCC, 0xA7, 0xCC, + 0x81, 0xF6, 0x44, 0xCC, 0x87, 0xF6, 0x64, 0xCC, + 0x87, 0xF6, 0x44, 0xCC, 0xA3, 0xF6, 0x64, 0xCC, + 0xA3, 0xF6, 0x44, 0xCC, 0xB1, 0xF6, 0x64, 0xCC, + 0xB1, 0xF6, 0x44, 0xCC, 0xA7, 0xF6, 0x64, 0xCC, + 0xA7, 0xF6, 0x44, 0xCC, 0xAD, 0xF6, 0x64, 0xCC, + 0xAD, 0xF6, 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xF6, + 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xF6, 0x45, 0xCC, + 0x84, 0xCC, 0x81, 0xF6, 0x65, 0xCC, 0x84, 0xCC, + 0x81, 0xF6, 0x45, 0xCC, 0xAD, 0xF6, 0x65, 0xCC, + 0xAD, 0xF6, 0x45, 0xCC, 0xB0, 0xF6, 0x65, 0xCC, + 0xB0, 0xF6, 0x45, 0xCC, 0xA7, 0xCC, 0x86, 0xF6, + 0x65, 0xCC, 0xA7, 0xCC, 0x86, 0xF6, 0x46, 0xCC, + 0x87, 0xF6, 0x66, 0xCC, 0x87, 0xF6, 0x47, 0xCC, + 0x84, 0xF6, 0x67, 0xCC, 0x84, 0xF6, 0x48, 0xCC, + 0x87, 0xF6, 0x68, 0xCC, 0x87, 0xF6, 0x48, 0xCC, + 0xA3, 0xF6, 0x68, 0xCC, 0xA3, 0xF6, 0x48, 0xCC, + 0x88, 0xF6, 0x68, 0xCC, 0x88, 0xF6, 0x48, 0xCC, + 0xA7, 0xF6, 0x68, 0xCC, 0xA7, 0xF6, 0x48, 0xCC, + 0xAE, 0xF6, 0x68, 0xCC, 0xAE, 0xF6, 0x49, 0xCC, + 0xB0, 0xF6, 0x69, 0xCC, 0xB0, 0xF6, 0x49, 0xCC, + 0x88, 0xCC, 0x81, 0xF6, 0x69, 0xCC, 0x88, 0xCC, + 0x81, 0xF6, 0x4B, 0xCC, 0x81, 0xF6, 0x6B, 0xCC, + 0x81, 0xF6, 0x4B, 0xCC, 0xA3, 0xF6, 0x6B, 0xCC, + 0xA3, 0xF6, 0x4B, 0xCC, 0xB1, 0xF6, 0x6B, 0xCC, + 0xB1, 0xF6, 0x4C, 0xCC, 0xA3, 0xF6, 0x6C, 0xCC, + 0xA3, 0xF6, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xF6, + 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xF6, 0x4C, 0xCC, + 0xB1, 0xF6, 0x6C, 0xCC, 0xB1, 0xF6, 0x4C, 0xCC, + 0xAD, 0xF6, 0x6C, 0xCC, 0xAD, 0xF6, 0x4D, 0xCC, + 0x81, 0xF6, 0x6D, 0xCC, 0x81, 0xF6, 0x4D, 0xCC, + 0x87, 0xF6, 0x6D, 0xCC, 0x87, 0xF6, 0x4D, 0xCC, + 0xA3, 0xF6, 0x6D, 0xCC, 0xA3, 0xF6, 0x4E, 0xCC, + 0x87, 0xF6, 0x6E, 0xCC, 0x87, 0xF6, 0x4E, 0xCC, + 0xA3, 0xF6, 0x6E, 0xCC, 0xA3, 0xF6, 0x4E, 0xCC, + 0xB1, 0xF6, 0x6E, 0xCC, 0xB1, 0xF6, 0x4E, 0xCC, + 0xAD, 0xF6, 0x6E, 0xCC, 0xAD, 0xF6, 0x4F, 0xCC, + 0x83, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x83, 0xCC, + 0x81, 0xF6, 0x4F, 0xCC, 0x83, 0xCC, 0x88, 0xF6, + 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xF6, 0x4F, 0xCC, + 0x84, 0xCC, 0x80, 0xF6, 0x6F, 0xCC, 0x84, 0xCC, + 0x80, 0xF6, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xF6, + 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xF6, 0x50, 0xCC, + 0x81, 0xF6, 0x70, 0xCC, 0x81, 0xF6, 0x50, 0xCC, + 0x87, 0xF6, 0x70, 0xCC, 0x87, 0xF6, 0x52, 0xCC, + 0x87, 0xF6, 0x72, 0xCC, 0x87, 0xF6, 0x52, 0xCC, + 0xA3, 0xF6, 0x72, 0xCC, 0xA3, 0xF6, 0x52, 0xCC, + 0xA3, 0xCC, 0x84, 0xF6, 0x72, 0xCC, 0xA3, 0xCC, + 0x84, 0xF6, 0x52, 0xCC, 0xB1, 0xF6, 0x72, 0xCC, + 0xB1, 0xF6, 0x53, 0xCC, 0x87, 0xF6, 0x73, 0xCC, + 0x87, 0xF6, 0x53, 0xCC, 0xA3, 0xF6, 0x73, 0xCC, + 0xA3, 0xF6, 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xF6, + 0x73, 0xCC, 0x81, 0xCC, 0x87, 0xF6, 0x53, 0xCC, + 0x8C, 0xCC, 0x87, 0xF6, 0x73, 0xCC, 0x8C, 0xCC, + 0x87, 0xF6, 0x53, 0xCC, 0xA3, 0xCC, 0x87, 0xF6, + 0x73, 0xCC, 0xA3, 0xCC, 0x87, 0xF6, 0x54, 0xCC, + 0x87, 0xF6, 0x74, 0xCC, 0x87, 0xF6, 0x54, 0xCC, + 0xA3, 0xF6, 0x74, 0xCC, 0xA3, 0xF6, 0x54, 0xCC, + 0xB1, 0xF6, 0x74, 0xCC, 0xB1, 0xF6, 0x54, 0xCC, + 0xAD, 0xF6, 0x74, 0xCC, 0xAD, 0xF6, 0x55, 0xCC, + 0xA4, 0xF6, 0x75, 0xCC, 0xA4, 0xF6, 0x55, 0xCC, + 0xB0, 0xF6, 0x75, 0xCC, 0xB0, 0xF6, 0x55, 0xCC, + 0xAD, 0xF6, 0x75, 0xCC, 0xAD, 0xF6, 0x55, 0xCC, + 0x83, 0xCC, 0x81, 0xF6, 0x75, 0xCC, 0x83, 0xCC, + 0x81, 0xF6, 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xF6, + 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xF6, 0x56, 0xCC, + 0x83, 0xF6, 0x76, 0xCC, 0x83, 0xF6, 0x56, 0xCC, + 0xA3, 0xF6, 0x76, 0xCC, 0xA3, 0xF6, 0x57, 0xCC, + 0x80, 0xF6, 0x77, 0xCC, 0x80, 0xF6, 0x57, 0xCC, + 0x81, 0xF6, 0x77, 0xCC, 0x81, 0xF6, 0x57, 0xCC, + 0x88, 0xF6, 0x77, 0xCC, 0x88, 0xF6, 0x57, 0xCC, + 0x87, 0xF6, 0x77, 0xCC, 0x87, 0xF6, 0x57, 0xCC, + 0xA3, 0xF6, 0x77, 0xCC, 0xA3, 0xF6, 0x58, 0xCC, + 0x87, 0xF6, 0x78, 0xCC, 0x87, 0xF6, 0x58, 0xCC, + 0x88, 0xF6, 0x78, 0xCC, 0x88, 0xF6, 0x59, 0xCC, + 0x87, 0xF6, 0x79, 0xCC, 0x87, 0xF6, 0x5A, 0xCC, + 0x82, 0xF6, 0x7A, 0xCC, 0x82, 0xF6, 0x5A, 0xCC, + 0xA3, 0xF6, 0x7A, 0xCC, 0xA3, 0xF6, 0x5A, 0xCC, + 0xB1, 0xF6, 0x7A, 0xCC, 0xB1, 0xF6, 0x68, 0xCC, + 0xB1, 0xF6, 0x74, 0xCC, 0x88, 0xF6, 0x77, 0xCC, + 0x8A, 0xF6, 0x79, 0xCC, 0x8A, 0x61, 0xCA, 0xBE, + 0xF5, 0x05, 0xC5, 0xBF, 0xCC, 0x87, 0x73, 0xCC, + 0x87, 0xF6, 0x41, 0xCC, 0xA3, 0xF6, 0x61, 0xCC, + 0xA3, 0xF6, 0x41, 0xCC, 0x89, 0xF6, 0x61, 0xCC, + 0x89, 0xF6, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xF6, + 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xF6, 0x41, 0xCC, + 0x82, 0xCC, 0x80, 0xF6, 0x61, 0xCC, 0x82, 0xCC, + 0x80, 0xF6, 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xF6, + 0x61, 0xCC, 0x82, 0xCC, 0x89, 0xF6, 0x41, 0xCC, + 0x82, 0xCC, 0x83, 0xF6, 0x61, 0xCC, 0x82, 0xCC, + 0x83, 0xF6, 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, + 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, 0x41, 0xCC, + 0x86, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x86, 0xCC, + 0x81, 0xF6, 0x41, 0xCC, 0x86, 0xCC, 0x80, 0xF6, + 0x61, 0xCC, 0x86, 0xCC, 0x80, 0xF6, 0x41, 0xCC, + 0x86, 0xCC, 0x89, 0xF6, 0x61, 0xCC, 0x86, 0xCC, + 0x89, 0xF6, 0x41, 0xCC, 0x86, 0xCC, 0x83, 0xF6, + 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xF6, 0x41, 0xCC, + 0xA3, 0xCC, 0x86, 0xF6, 0x61, 0xCC, 0xA3, 0xCC, + 0x86, 0xF6, 0x45, 0xCC, 0xA3, 0xF6, 0x65, 0xCC, + 0xA3, 0xF6, 0x45, 0xCC, 0x89, 0xF6, 0x65, 0xCC, + 0x89, 0xF6, 0x45, 0xCC, 0x83, 0xF6, 0x65, 0xCC, + 0x83, 0xF6, 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xF6, + 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xF6, 0x45, 0xCC, + 0x82, 0xCC, 0x80, 0xF6, 0x65, 0xCC, 0x82, 0xCC, + 0x80, 0xF6, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xF6, + 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xF6, 0x45, 0xCC, + 0x82, 0xCC, 0x83, 0xF6, 0x65, 0xCC, 0x82, 0xCC, + 0x83, 0xF6, 0x45, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, + 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, 0x49, 0xCC, + 0x89, 0xF6, 0x69, 0xCC, 0x89, 0xF6, 0x49, 0xCC, + 0xA3, 0xF6, 0x69, 0xCC, 0xA3, 0xF6, 0x4F, 0xCC, + 0xA3, 0xF6, 0x6F, 0xCC, 0xA3, 0xF6, 0x4F, 0xCC, + 0x89, 0xF6, 0x6F, 0xCC, 0x89, 0xF6, 0x4F, 0xCC, + 0x82, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x82, 0xCC, + 0x81, 0xF6, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xF6, + 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xF6, 0x4F, 0xCC, + 0x82, 0xCC, 0x89, 0xF6, 0x6F, 0xCC, 0x82, 0xCC, + 0x89, 0xF6, 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xF6, + 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xF6, 0x4F, 0xCC, + 0xA3, 0xCC, 0x82, 0xF6, 0x6F, 0xCC, 0xA3, 0xCC, + 0x82, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, 0xF6, + 0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0xF6, 0x4F, 0xCC, + 0x9B, 0xCC, 0x80, 0xF6, 0x6F, 0xCC, 0x9B, 0xCC, + 0x80, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, 0xF6, + 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xF6, 0x4F, 0xCC, + 0x9B, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x9B, 0xCC, + 0x83, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, 0xF6, + 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xF6, 0x55, 0xCC, + 0xA3, 0xF6, 0x75, 0xCC, 0xA3, 0xF6, 0x55, 0xCC, + 0x89, 0xF6, 0x75, 0xCC, 0x89, 0xF6, 0x55, 0xCC, + 0x9B, 0xCC, 0x81, 0xF6, 0x75, 0xCC, 0x9B, 0xCC, + 0x81, 0xF6, 0x55, 0xCC, 0x9B, 0xCC, 0x80, 0xF6, + 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xF6, 0x55, 0xCC, + 0x9B, 0xCC, 0x89, 0xF6, 0x75, 0xCC, 0x9B, 0xCC, + 0x89, 0xF6, 0x55, 0xCC, 0x9B, 0xCC, 0x83, 0xF6, + 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xF6, 0x55, 0xCC, + 0x9B, 0xCC, 0xA3, 0xF6, 0x75, 0xCC, 0x9B, 0xCC, + 0xA3, 0xF6, 0x59, 0xCC, 0x80, 0xF6, 0x79, 0xCC, + 0x80, 0xF6, 0x59, 0xCC, 0xA3, 0xF6, 0x79, 0xCC, + 0xA3, 0xF6, 0x59, 0xCC, 0x89, 0xF6, 0x79, 0xCC, + 0x89, 0xF6, 0x59, 0xCC, 0x83, 0xF6, 0x79, 0xCC, + 0x83, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xF6, 0xCE, + 0xB1, 0xCC, 0x94, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, + 0xCC, 0x80, 0xF6, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, + 0xF6, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xF6, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0x91, + 0xCC, 0x93, 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xF6, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0x91, 0xCC, + 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0x91, 0xCC, 0x93, + 0xCD, 0x82, 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCD, + 0x82, 0xF6, 0xCE, 0xB5, 0xCC, 0x93, 0xF6, 0xCE, + 0xB5, 0xCC, 0x94, 0xF6, 0xCE, 0xB5, 0xCC, 0x93, + 0xCC, 0x80, 0xF6, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, + 0xF6, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xF6, + 0xCE, 0x95, 0xCC, 0x93, 0xF6, 0xCE, 0x95, 0xCC, + 0x94, 0xF6, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, + 0xF6, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xF6, + 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, + 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, + 0xCC, 0x93, 0xF6, 0xCE, 0xB7, 0xCC, 0x94, 0xF6, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, 0xCC, + 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, 0xCC, 0x93, + 0xCD, 0x82, 0xF6, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, + 0x82, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xF6, 0xCE, + 0x97, 0xCC, 0x94, 0xF6, 0xCE, 0x97, 0xCC, 0x93, + 0xCC, 0x80, 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, + 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xF6, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCE, + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0xB9, + 0xCC, 0x93, 0xF6, 0xCE, 0xB9, 0xCC, 0x94, 0xF6, + 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, + 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0xB9, + 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, + 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, 0x93, + 0xCD, 0x82, 0xF6, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, + 0x82, 0xF6, 0xCE, 0x99, 0xCC, 0x93, 0xF6, 0xCE, + 0x99, 0xCC, 0x94, 0xF6, 0xCE, 0x99, 0xCC, 0x93, + 0xCC, 0x80, 0xF6, 0xCE, 0x99, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, + 0xF6, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xF6, + 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCE, + 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0xBF, + 0xCC, 0x93, 0xF6, 0xCE, 0xBF, 0xCC, 0x94, 0xF6, + 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, + 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0xBF, + 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xBF, 0xCC, + 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, 0x93, + 0xF6, 0xCE, 0x9F, 0xCC, 0x94, 0xF6, 0xCE, 0x9F, + 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0x9F, 0xCC, + 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0x9F, 0xCC, 0x93, + 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, + 0x81, 0xF6, 0xCF, 0x85, 0xCC, 0x93, 0xF6, 0xCF, + 0x85, 0xCC, 0x94, 0xF6, 0xCF, 0x85, 0xCC, 0x93, + 0xCC, 0x80, 0xF6, 0xCF, 0x85, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, + 0xF6, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xF6, + 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCF, + 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0xA5, + 0xCC, 0x94, 0xF6, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, + 0x80, 0xF6, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xF6, + 0xCF, 0x89, 0xCC, 0x93, 0xF6, 0xCF, 0x89, 0xCC, + 0x94, 0xF6, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, + 0xF6, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xF6, + 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCF, 0x89, 0xCC, + 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, + 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xF6, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, 0xCC, + 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, + 0xCC, 0x81, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, + 0x81, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, + 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xF6, + 0xCE, 0xB1, 0xCC, 0x80, 0xF6, 0xCE, 0xB1, 0xCC, + 0x81, 0xF6, 0xCE, 0xB5, 0xCC, 0x80, 0xF6, 0xCE, + 0xB5, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, 0xCC, 0x80, + 0xF6, 0xCE, 0xB7, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, + 0xCC, 0x80, 0xF6, 0xCE, 0xB9, 0xCC, 0x81, 0xF6, + 0xCE, 0xBF, 0xCC, 0x80, 0xF6, 0xCE, 0xBF, 0xCC, + 0x81, 0xF6, 0xCF, 0x85, 0xCC, 0x80, 0xF6, 0xCF, + 0x85, 0xCC, 0x81, 0xF6, 0xCF, 0x89, 0xCC, 0x80, + 0xF6, 0xCF, 0x89, 0xCC, 0x81, 0xF6, 0xCE, 0xB1, + 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, + 0x94, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, + 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCE, + 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xF6, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, + 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xF6, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, + 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, + 0x94, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, + 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xF6, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, + 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xF6, + 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, + 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCC, + 0x94, 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCC, + 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xF6, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, + 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xF6, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, + 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, + 0xCC, 0x86, 0xF6, 0xCE, 0xB1, 0xCC, 0x84, 0xF6, + 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, + 0xB1, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, 0x81, + 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCD, 0x82, 0xF6, + 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, + 0x91, 0xCC, 0x86, 0xF6, 0xCE, 0x91, 0xCC, 0x84, + 0xF6, 0xCE, 0x91, 0xCC, 0x80, 0xF6, 0xCE, 0x91, + 0xCC, 0x81, 0xF6, 0xCE, 0x91, 0xCD, 0x85, 0x20, + 0xCC, 0x93, 0xF6, 0xCE, 0xB9, 0x20, 0xCC, 0x93, + 0x20, 0xCD, 0x82, 0xF5, 0x05, 0xC2, 0xA8, 0xCD, + 0x82, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xF6, 0xCE, + 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, + 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, + 0x85, 0xF6, 0xCE, 0xB7, 0xCD, 0x82, 0xF6, 0xCE, + 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x95, + 0xCC, 0x80, 0xF6, 0xCE, 0x95, 0xCC, 0x81, 0xF6, + 0xCE, 0x97, 0xCC, 0x80, 0xF6, 0xCE, 0x97, 0xCC, + 0x81, 0xF6, 0xCE, 0x97, 0xCD, 0x85, 0xF5, 0x06, + 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0x20, 0xCC, 0x93, + 0xCC, 0x80, 0xF5, 0x06, 0xE1, 0xBE, 0xBF, 0xCC, + 0x81, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xF5, 0x06, + 0xE1, 0xBE, 0xBF, 0xCD, 0x82, 0x20, 0xCC, 0x93, + 0xCD, 0x82, 0xF6, 0xCE, 0xB9, 0xCC, 0x86, 0xF6, + 0xCE, 0xB9, 0xCC, 0x84, 0xF6, 0xCE, 0xB9, 0xCC, + 0x88, 0xCC, 0x80, 0xF6, 0xCE, 0xB9, 0xCC, 0x88, + 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCD, 0x82, 0xF6, + 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xF6, 0xCE, + 0x99, 0xCC, 0x86, 0xF6, 0xCE, 0x99, 0xCC, 0x84, + 0xF6, 0xCE, 0x99, 0xCC, 0x80, 0xF6, 0xCE, 0x99, + 0xCC, 0x81, 0xF5, 0x06, 0xE1, 0xBF, 0xBE, 0xCC, + 0x80, 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xF5, 0x06, + 0xE1, 0xBF, 0xBE, 0xCC, 0x81, 0x20, 0xCC, 0x94, + 0xCC, 0x81, 0xF5, 0x06, 0xE1, 0xBF, 0xBE, 0xCD, + 0x82, 0x20, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCF, + 0x85, 0xCC, 0x86, 0xF6, 0xCF, 0x85, 0xCC, 0x84, + 0xF6, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xF6, + 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0xCF, + 0x81, 0xCC, 0x93, 0xF6, 0xCF, 0x81, 0xCC, 0x94, + 0xF6, 0xCF, 0x85, 0xCD, 0x82, 0xF6, 0xCF, 0x85, + 0xCC, 0x88, 0xCD, 0x82, 0xF6, 0xCE, 0xA5, 0xCC, + 0x86, 0xF6, 0xCE, 0xA5, 0xCC, 0x84, 0xF6, 0xCE, + 0xA5, 0xCC, 0x80, 0xF6, 0xCE, 0xA5, 0xCC, 0x81, + 0xF6, 0xCE, 0xA1, 0xCC, 0x94, 0xF5, 0x05, 0xC2, + 0xA8, 0xCC, 0x80, 0x20, 0xCC, 0x88, 0xCC, 0x80, + 0xF5, 0x05, 0xC2, 0xA8, 0xCC, 0x81, 0x20, 0xCC, + 0x88, 0xCC, 0x81, 0xF6, 0x60, 0xF6, 0xCF, 0x89, + 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCD, + 0x85, 0xF6, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, + 0xF6, 0xCF, 0x89, 0xCD, 0x82, 0xF6, 0xCF, 0x89, + 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x9F, 0xCC, + 0x80, 0xF6, 0xCE, 0x9F, 0xCC, 0x81, 0xF6, 0xCE, + 0xA9, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, 0xCC, 0x81, + 0xF6, 0xCE, 0xA9, 0xCD, 0x85, 0xF5, 0x03, 0xC2, + 0xB4, 0x20, 0xCC, 0x81, 0x20, 0xCC, 0x94, 0xF5, + 0x04, 0xE2, 0x80, 0x82, 0x20, 0xF5, 0x04, 0xE2, + 0x80, 0x83, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xE2, 0x80, 0x90, 0x20, + 0xCC, 0xB3, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, + 0x20, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, + 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, + 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x21, + 0x21, 0x20, 0xCC, 0x85, 0x3F, 0x3F, 0x3F, 0x21, + 0x21, 0x3F, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x20, 0x30, + 0x69, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, + 0xE2, 0x88, 0x92, 0x3D, 0x28, 0x29, 0x6E, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x2B, 0xE2, 0x88, 0x92, 0x3D, 0x28, 0x29, + 0x52, 0x73, 0x61, 0x2F, 0x63, 0x61, 0x2F, 0x73, + 0x43, 0xC2, 0xB0, 0x43, 0x63, 0x2F, 0x6F, 0x63, + 0x2F, 0x75, 0xC6, 0x90, 0xC2, 0xB0, 0x46, 0x67, + 0x48, 0x48, 0x48, 0x68, 0xC4, 0xA7, 0x49, 0x49, + 0x4C, 0x6C, 0x4E, 0x4E, 0x6F, 0x50, 0x51, 0x52, + 0x52, 0x52, 0x53, 0x4D, 0x54, 0x45, 0x4C, 0x54, + 0x4D, 0x5A, 0xF6, 0xCE, 0xA9, 0x5A, 0xF6, 0x4B, + 0xF6, 0x41, 0xCC, 0x8A, 0x42, 0x43, 0x65, 0x45, + 0x46, 0x4D, 0x6F, 0xD7, 0x90, 0xD7, 0x91, 0xD7, + 0x92, 0xD7, 0x93, 0x69, 0xCE, 0xB3, 0xCE, 0x93, + 0xCE, 0xA0, 0xE2, 0x88, 0x91, 0x44, 0x64, 0x65, + 0x69, 0x6A, 0x31, 0xE2, 0x81, 0x84, 0x33, 0x32, + 0xE2, 0x81, 0x84, 0x33, 0x31, 0xE2, 0x81, 0x84, + 0x35, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x33, 0xE2, + 0x81, 0x84, 0x35, 0x34, 0xE2, 0x81, 0x84, 0x35, + 0x31, 0xE2, 0x81, 0x84, 0x36, 0x35, 0xE2, 0x81, + 0x84, 0x36, 0x31, 0xE2, 0x81, 0x84, 0x38, 0x33, + 0xE2, 0x81, 0x84, 0x38, 0x35, 0xE2, 0x81, 0x84, + 0x38, 0x37, 0xE2, 0x81, 0x84, 0x38, 0x31, 0xE2, + 0x81, 0x84, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x56, 0x56, 0x56, 0x49, 0x56, 0x49, 0x49, + 0x56, 0x49, 0x49, 0x49, 0x49, 0x58, 0x58, 0x58, + 0x49, 0x58, 0x49, 0x49, 0x4C, 0x43, 0x44, 0x4D, + 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x76, + 0x76, 0x76, 0x69, 0x76, 0x69, 0x69, 0x76, 0x69, + 0x69, 0x69, 0x69, 0x78, 0x78, 0x78, 0x69, 0x78, + 0x69, 0x69, 0x6C, 0x63, 0x64, 0x6D, 0xF6, 0xE2, + 0x86, 0x90, 0xCC, 0xB8, 0xF6, 0xE2, 0x86, 0x92, + 0xCC, 0xB8, 0xF6, 0xE2, 0x86, 0x94, 0xCC, 0xB8, + 0xF6, 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0xF6, 0xE2, + 0x87, 0x94, 0xCC, 0xB8, 0xF6, 0xE2, 0x87, 0x92, + 0xCC, 0xB8, 0xF6, 0xE2, 0x88, 0x83, 0xCC, 0xB8, + 0xF6, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0xF6, 0xE2, + 0x88, 0x8B, 0xCC, 0xB8, 0xF6, 0xE2, 0x88, 0xA3, + 0xCC, 0xB8, 0xF6, 0xE2, 0x88, 0xA5, 0xCC, 0xB8, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, + 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xF6, 0xE2, + 0x88, 0xBC, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0x83, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0x85, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0x88, 0xCC, 0xB8, 0xF6, 0x3D, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0xF6, 0x3C, + 0xCC, 0xB8, 0xF6, 0x3E, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xA4, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xA5, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xB2, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0xB3, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xB6, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xB7, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0x82, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x83, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x86, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0x87, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0xA2, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xA8, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0xAB, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xBC, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xBD, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0xB2, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xB3, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0xF6, 0xE3, + 0x80, 0x88, 0xF6, 0xE3, 0x80, 0x89, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x31, + 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x33, 0x31, + 0x34, 0x31, 0x35, 0x31, 0x36, 0x31, 0x37, 0x31, + 0x38, 0x31, 0x39, 0x32, 0x30, 0x28, 0x31, 0x29, + 0x28, 0x32, 0x29, 0x28, 0x33, 0x29, 0x28, 0x34, + 0x29, 0x28, 0x35, 0x29, 0x28, 0x36, 0x29, 0x28, + 0x37, 0x29, 0x28, 0x38, 0x29, 0x28, 0x39, 0x29, + 0x28, 0x31, 0x30, 0x29, 0x28, 0x31, 0x31, 0x29, + 0x28, 0x31, 0x32, 0x29, 0x28, 0x31, 0x33, 0x29, + 0x28, 0x31, 0x34, 0x29, 0x28, 0x31, 0x35, 0x29, + 0x28, 0x31, 0x36, 0x29, 0x28, 0x31, 0x37, 0x29, + 0x28, 0x31, 0x38, 0x29, 0x28, 0x31, 0x39, 0x29, + 0x28, 0x32, 0x30, 0x29, 0x31, 0x2E, 0x32, 0x2E, + 0x33, 0x2E, 0x34, 0x2E, 0x35, 0x2E, 0x36, 0x2E, + 0x37, 0x2E, 0x38, 0x2E, 0x39, 0x2E, 0x31, 0x30, + 0x2E, 0x31, 0x31, 0x2E, 0x31, 0x32, 0x2E, 0x31, + 0x33, 0x2E, 0x31, 0x34, 0x2E, 0x31, 0x35, 0x2E, + 0x31, 0x36, 0x2E, 0x31, 0x37, 0x2E, 0x31, 0x38, + 0x2E, 0x31, 0x39, 0x2E, 0x32, 0x30, 0x2E, 0x28, + 0x61, 0x29, 0x28, 0x62, 0x29, 0x28, 0x63, 0x29, + 0x28, 0x64, 0x29, 0x28, 0x65, 0x29, 0x28, 0x66, + 0x29, 0x28, 0x67, 0x29, 0x28, 0x68, 0x29, 0x28, + 0x69, 0x29, 0x28, 0x6A, 0x29, 0x28, 0x6B, 0x29, + 0x28, 0x6C, 0x29, 0x28, 0x6D, 0x29, 0x28, 0x6E, + 0x29, 0x28, 0x6F, 0x29, 0x28, 0x70, 0x29, 0x28, + 0x71, 0x29, 0x28, 0x72, 0x29, 0x28, 0x73, 0x29, + 0x28, 0x74, 0x29, 0x28, 0x75, 0x29, 0x28, 0x76, + 0x29, 0x28, 0x77, 0x29, 0x28, 0x78, 0x29, 0x28, + 0x79, 0x29, 0x28, 0x7A, 0x29, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x30, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x3A, 0x3A, + 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0xF6, 0xE2, + 0xAB, 0x9D, 0xCC, 0xB8, 0xE6, 0xAF, 0x8D, 0xE9, + 0xBE, 0x9F, 0xE4, 0xB8, 0x80, 0xE4, 0xB8, 0xA8, + 0xE4, 0xB8, 0xB6, 0xE4, 0xB8, 0xBF, 0xE4, 0xB9, + 0x99, 0xE4, 0xBA, 0x85, 0xE4, 0xBA, 0x8C, 0xE4, + 0xBA, 0xA0, 0xE4, 0xBA, 0xBA, 0xE5, 0x84, 0xBF, + 0xE5, 0x85, 0xA5, 0xE5, 0x85, 0xAB, 0xE5, 0x86, + 0x82, 0xE5, 0x86, 0x96, 0xE5, 0x86, 0xAB, 0xE5, + 0x87, 0xA0, 0xE5, 0x87, 0xB5, 0xE5, 0x88, 0x80, + 0xE5, 0x8A, 0x9B, 0xE5, 0x8B, 0xB9, 0xE5, 0x8C, + 0x95, 0xE5, 0x8C, 0x9A, 0xE5, 0x8C, 0xB8, 0xE5, + 0x8D, 0x81, 0xE5, 0x8D, 0x9C, 0xE5, 0x8D, 0xA9, + 0xE5, 0x8E, 0x82, 0xE5, 0x8E, 0xB6, 0xE5, 0x8F, + 0x88, 0xE5, 0x8F, 0xA3, 0xE5, 0x9B, 0x97, 0xE5, + 0x9C, 0x9F, 0xE5, 0xA3, 0xAB, 0xE5, 0xA4, 0x82, + 0xE5, 0xA4, 0x8A, 0xE5, 0xA4, 0x95, 0xE5, 0xA4, + 0xA7, 0xE5, 0xA5, 0xB3, 0xE5, 0xAD, 0x90, 0xE5, + 0xAE, 0x80, 0xE5, 0xAF, 0xB8, 0xE5, 0xB0, 0x8F, + 0xE5, 0xB0, 0xA2, 0xE5, 0xB0, 0xB8, 0xE5, 0xB1, + 0xAE, 0xE5, 0xB1, 0xB1, 0xE5, 0xB7, 0x9B, 0xE5, + 0xB7, 0xA5, 0xE5, 0xB7, 0xB1, 0xE5, 0xB7, 0xBE, + 0xE5, 0xB9, 0xB2, 0xE5, 0xB9, 0xBA, 0xE5, 0xB9, + 0xBF, 0xE5, 0xBB, 0xB4, 0xE5, 0xBB, 0xBE, 0xE5, + 0xBC, 0x8B, 0xE5, 0xBC, 0x93, 0xE5, 0xBD, 0x90, + 0xE5, 0xBD, 0xA1, 0xE5, 0xBD, 0xB3, 0xE5, 0xBF, + 0x83, 0xE6, 0x88, 0x88, 0xE6, 0x88, 0xB6, 0xE6, + 0x89, 0x8B, 0xE6, 0x94, 0xAF, 0xE6, 0x94, 0xB4, + 0xE6, 0x96, 0x87, 0xE6, 0x96, 0x97, 0xE6, 0x96, + 0xA4, 0xE6, 0x96, 0xB9, 0xE6, 0x97, 0xA0, 0xE6, + 0x97, 0xA5, 0xE6, 0x9B, 0xB0, 0xE6, 0x9C, 0x88, + 0xE6, 0x9C, 0xA8, 0xE6, 0xAC, 0xA0, 0xE6, 0xAD, + 0xA2, 0xE6, 0xAD, 0xB9, 0xE6, 0xAE, 0xB3, 0xE6, + 0xAF, 0x8B, 0xE6, 0xAF, 0x94, 0xE6, 0xAF, 0x9B, + 0xE6, 0xB0, 0x8F, 0xE6, 0xB0, 0x94, 0xE6, 0xB0, + 0xB4, 0xE7, 0x81, 0xAB, 0xE7, 0x88, 0xAA, 0xE7, + 0x88, 0xB6, 0xE7, 0x88, 0xBB, 0xE7, 0x88, 0xBF, + 0xE7, 0x89, 0x87, 0xE7, 0x89, 0x99, 0xE7, 0x89, + 0x9B, 0xE7, 0x8A, 0xAC, 0xE7, 0x8E, 0x84, 0xE7, + 0x8E, 0x89, 0xE7, 0x93, 0x9C, 0xE7, 0x93, 0xA6, + 0xE7, 0x94, 0x98, 0xE7, 0x94, 0x9F, 0xE7, 0x94, + 0xA8, 0xE7, 0x94, 0xB0, 0xE7, 0x96, 0x8B, 0xE7, + 0x96, 0x92, 0xE7, 0x99, 0xB6, 0xE7, 0x99, 0xBD, + 0xE7, 0x9A, 0xAE, 0xE7, 0x9A, 0xBF, 0xE7, 0x9B, + 0xAE, 0xE7, 0x9F, 0x9B, 0xE7, 0x9F, 0xA2, 0xE7, + 0x9F, 0xB3, 0xE7, 0xA4, 0xBA, 0xE7, 0xA6, 0xB8, + 0xE7, 0xA6, 0xBE, 0xE7, 0xA9, 0xB4, 0xE7, 0xAB, + 0x8B, 0xE7, 0xAB, 0xB9, 0xE7, 0xB1, 0xB3, 0xE7, + 0xB3, 0xB8, 0xE7, 0xBC, 0xB6, 0xE7, 0xBD, 0x91, + 0xE7, 0xBE, 0x8A, 0xE7, 0xBE, 0xBD, 0xE8, 0x80, + 0x81, 0xE8, 0x80, 0x8C, 0xE8, 0x80, 0x92, 0xE8, + 0x80, 0xB3, 0xE8, 0x81, 0xBF, 0xE8, 0x82, 0x89, + 0xE8, 0x87, 0xA3, 0xE8, 0x87, 0xAA, 0xE8, 0x87, + 0xB3, 0xE8, 0x87, 0xBC, 0xE8, 0x88, 0x8C, 0xE8, + 0x88, 0x9B, 0xE8, 0x88, 0x9F, 0xE8, 0x89, 0xAE, + 0xE8, 0x89, 0xB2, 0xE8, 0x89, 0xB8, 0xE8, 0x99, + 0x8D, 0xE8, 0x99, 0xAB, 0xE8, 0xA1, 0x80, 0xE8, + 0xA1, 0x8C, 0xE8, 0xA1, 0xA3, 0xE8, 0xA5, 0xBE, + 0xE8, 0xA6, 0x8B, 0xE8, 0xA7, 0x92, 0xE8, 0xA8, + 0x80, 0xE8, 0xB0, 0xB7, 0xE8, 0xB1, 0x86, 0xE8, + 0xB1, 0x95, 0xE8, 0xB1, 0xB8, 0xE8, 0xB2, 0x9D, + 0xE8, 0xB5, 0xA4, 0xE8, 0xB5, 0xB0, 0xE8, 0xB6, + 0xB3, 0xE8, 0xBA, 0xAB, 0xE8, 0xBB, 0x8A, 0xE8, + 0xBE, 0x9B, 0xE8, 0xBE, 0xB0, 0xE8, 0xBE, 0xB5, + 0xE9, 0x82, 0x91, 0xE9, 0x85, 0x89, 0xE9, 0x87, + 0x86, 0xE9, 0x87, 0x8C, 0xE9, 0x87, 0x91, 0xE9, + 0x95, 0xB7, 0xE9, 0x96, 0x80, 0xE9, 0x98, 0x9C, + 0xE9, 0x9A, 0xB6, 0xE9, 0x9A, 0xB9, 0xE9, 0x9B, + 0xA8, 0xE9, 0x9D, 0x91, 0xE9, 0x9D, 0x9E, 0xE9, + 0x9D, 0xA2, 0xE9, 0x9D, 0xA9, 0xE9, 0x9F, 0x8B, + 0xE9, 0x9F, 0xAD, 0xE9, 0x9F, 0xB3, 0xE9, 0xA0, + 0x81, 0xE9, 0xA2, 0xA8, 0xE9, 0xA3, 0x9B, 0xE9, + 0xA3, 0x9F, 0xE9, 0xA6, 0x96, 0xE9, 0xA6, 0x99, + 0xE9, 0xA6, 0xAC, 0xE9, 0xAA, 0xA8, 0xE9, 0xAB, + 0x98, 0xE9, 0xAB, 0x9F, 0xE9, 0xAC, 0xA5, 0xE9, + 0xAC, 0xAF, 0xE9, 0xAC, 0xB2, 0xE9, 0xAC, 0xBC, + 0xE9, 0xAD, 0x9A, 0xE9, 0xB3, 0xA5, 0xE9, 0xB9, + 0xB5, 0xE9, 0xB9, 0xBF, 0xE9, 0xBA, 0xA5, 0xE9, + 0xBA, 0xBB, 0xE9, 0xBB, 0x83, 0xE9, 0xBB, 0x8D, + 0xE9, 0xBB, 0x91, 0xE9, 0xBB, 0xB9, 0xE9, 0xBB, + 0xBD, 0xE9, 0xBC, 0x8E, 0xE9, 0xBC, 0x93, 0xE9, + 0xBC, 0xA0, 0xE9, 0xBC, 0xBB, 0xE9, 0xBD, 0x8A, + 0xE9, 0xBD, 0x92, 0xE9, 0xBE, 0x8D, 0xE9, 0xBE, + 0x9C, 0xE9, 0xBE, 0xA0, 0x20, 0xE3, 0x80, 0x92, + 0xE5, 0x8D, 0x81, 0xE5, 0x8D, 0x84, 0xE5, 0x8D, + 0x85, 0xF6, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x81, 0x91, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, + 0x93, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x95, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x97, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x99, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x81, 0xA1, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, + 0xA4, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xA6, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xA8, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xAF, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, + 0xF6, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, + 0x81, 0xB5, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, + 0xB5, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x81, 0xB8, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xB8, 0xE3, + 0x82, 0x9A, 0xF6, 0xE3, 0x81, 0xBB, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, + 0xF6, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x20, + 0xE3, 0x82, 0x99, 0x20, 0xE3, 0x82, 0x9A, 0xF6, + 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0xE3, 0x82, + 0x88, 0xE3, 0x82, 0x8A, 0xF6, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xAD, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xAF, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x82, 0xB7, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, + 0xB9, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xBB, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xBD, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xBF, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x83, 0x88, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x9A, 0xF6, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0xF6, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x83, + 0x9B, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x82, 0xA6, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x83, 0xAF, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x83, 0xBD, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB3, + 0xE3, 0x83, 0x88, 0xE1, 0x84, 0x80, 0xE1, 0x84, + 0x81, 0xE1, 0x86, 0xAA, 0xE1, 0x84, 0x82, 0xE1, + 0x86, 0xAC, 0xE1, 0x86, 0xAD, 0xE1, 0x84, 0x83, + 0xE1, 0x84, 0x84, 0xE1, 0x84, 0x85, 0xE1, 0x86, + 0xB0, 0xE1, 0x86, 0xB1, 0xE1, 0x86, 0xB2, 0xE1, + 0x86, 0xB3, 0xE1, 0x86, 0xB4, 0xE1, 0x86, 0xB5, + 0xE1, 0x84, 0x9A, 0xE1, 0x84, 0x86, 0xE1, 0x84, + 0x87, 0xE1, 0x84, 0x88, 0xE1, 0x84, 0xA1, 0xE1, + 0x84, 0x89, 0xE1, 0x84, 0x8A, 0xE1, 0x84, 0x8B, + 0xE1, 0x84, 0x8C, 0xE1, 0x84, 0x8D, 0xE1, 0x84, + 0x8E, 0xE1, 0x84, 0x8F, 0xE1, 0x84, 0x90, 0xE1, + 0x84, 0x91, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, + 0xE1, 0x85, 0xA2, 0xE1, 0x85, 0xA3, 0xE1, 0x85, + 0xA4, 0xE1, 0x85, 0xA5, 0xE1, 0x85, 0xA6, 0xE1, + 0x85, 0xA7, 0xE1, 0x85, 0xA8, 0xE1, 0x85, 0xA9, + 0xE1, 0x85, 0xAA, 0xE1, 0x85, 0xAB, 0xE1, 0x85, + 0xAC, 0xE1, 0x85, 0xAD, 0xE1, 0x85, 0xAE, 0xE1, + 0x85, 0xAF, 0xE1, 0x85, 0xB0, 0xE1, 0x85, 0xB1, + 0xE1, 0x85, 0xB2, 0xE1, 0x85, 0xB3, 0xE1, 0x85, + 0xB4, 0xE1, 0x85, 0xB5, 0xE1, 0x85, 0xA0, 0xE1, + 0x84, 0x94, 0xE1, 0x84, 0x95, 0xE1, 0x87, 0x87, + 0xE1, 0x87, 0x88, 0xE1, 0x87, 0x8C, 0xE1, 0x87, + 0x8E, 0xE1, 0x87, 0x93, 0xE1, 0x87, 0x97, 0xE1, + 0x87, 0x99, 0xE1, 0x84, 0x9C, 0xE1, 0x87, 0x9D, + 0xE1, 0x87, 0x9F, 0xE1, 0x84, 0x9D, 0xE1, 0x84, + 0x9E, 0xE1, 0x84, 0xA0, 0xE1, 0x84, 0xA2, 0xE1, + 0x84, 0xA3, 0xE1, 0x84, 0xA7, 0xE1, 0x84, 0xA9, + 0xE1, 0x84, 0xAB, 0xE1, 0x84, 0xAC, 0xE1, 0x84, + 0xAD, 0xE1, 0x84, 0xAE, 0xE1, 0x84, 0xAF, 0xE1, + 0x84, 0xB2, 0xE1, 0x84, 0xB6, 0xE1, 0x85, 0x80, + 0xE1, 0x85, 0x87, 0xE1, 0x85, 0x8C, 0xE1, 0x87, + 0xB1, 0xE1, 0x87, 0xB2, 0xE1, 0x85, 0x97, 0xE1, + 0x85, 0x98, 0xE1, 0x85, 0x99, 0xE1, 0x86, 0x84, + 0xE1, 0x86, 0x85, 0xE1, 0x86, 0x88, 0xE1, 0x86, + 0x91, 0xE1, 0x86, 0x92, 0xE1, 0x86, 0x94, 0xE1, + 0x86, 0x9E, 0xE1, 0x86, 0xA1, 0xE4, 0xB8, 0x80, + 0xE4, 0xBA, 0x8C, 0xE4, 0xB8, 0x89, 0xE5, 0x9B, + 0x9B, 0xE4, 0xB8, 0x8A, 0xE4, 0xB8, 0xAD, 0xE4, + 0xB8, 0x8B, 0xE7, 0x94, 0xB2, 0xE4, 0xB9, 0x99, + 0xE4, 0xB8, 0x99, 0xE4, 0xB8, 0x81, 0xE5, 0xA4, + 0xA9, 0xE5, 0x9C, 0xB0, 0xE4, 0xBA, 0xBA, 0x28, + 0xE1, 0x84, 0x80, 0x29, 0x28, 0xE1, 0x84, 0x82, + 0x29, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x28, 0xE1, + 0x84, 0x85, 0x29, 0x28, 0xE1, 0x84, 0x86, 0x29, + 0x28, 0xE1, 0x84, 0x87, 0x29, 0x28, 0xE1, 0x84, + 0x89, 0x29, 0x28, 0xE1, 0x84, 0x8B, 0x29, 0x28, + 0xE1, 0x84, 0x8C, 0x29, 0x28, 0xE1, 0x84, 0x8E, + 0x29, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x28, 0xE1, + 0x84, 0x90, 0x29, 0x28, 0xE1, 0x84, 0x91, 0x29, + 0x28, 0xE1, 0x84, 0x92, 0x29, 0x28, 0xE1, 0x84, + 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x86, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x87, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x90, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x91, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, + 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x28, 0xE4, 0xB8, + 0x80, 0x29, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x28, + 0xE4, 0xB8, 0x89, 0x29, 0x28, 0xE5, 0x9B, 0x9B, + 0x29, 0x28, 0xE4, 0xBA, 0x94, 0x29, 0x28, 0xE5, + 0x85, 0xAD, 0x29, 0x28, 0xE4, 0xB8, 0x83, 0x29, + 0x28, 0xE5, 0x85, 0xAB, 0x29, 0x28, 0xE4, 0xB9, + 0x9D, 0x29, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x28, + 0xE6, 0x9C, 0x88, 0x29, 0x28, 0xE7, 0x81, 0xAB, + 0x29, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x28, 0xE6, + 0x9C, 0xA8, 0x29, 0x28, 0xE9, 0x87, 0x91, 0x29, + 0x28, 0xE5, 0x9C, 0x9F, 0x29, 0x28, 0xE6, 0x97, + 0xA5, 0x29, 0x28, 0xE6, 0xA0, 0xAA, 0x29, 0x28, + 0xE6, 0x9C, 0x89, 0x29, 0x28, 0xE7, 0xA4, 0xBE, + 0x29, 0x28, 0xE5, 0x90, 0x8D, 0x29, 0x28, 0xE7, + 0x89, 0xB9, 0x29, 0x28, 0xE8, 0xB2, 0xA1, 0x29, + 0x28, 0xE7, 0xA5, 0x9D, 0x29, 0x28, 0xE5, 0x8A, + 0xB4, 0x29, 0x28, 0xE4, 0xBB, 0xA3, 0x29, 0x28, + 0xE5, 0x91, 0xBC, 0x29, 0x28, 0xE5, 0xAD, 0xA6, + 0x29, 0x28, 0xE7, 0x9B, 0xA3, 0x29, 0x28, 0xE4, + 0xBC, 0x81, 0x29, 0x28, 0xE8, 0xB3, 0x87, 0x29, + 0x28, 0xE5, 0x8D, 0x94, 0x29, 0x28, 0xE7, 0xA5, + 0xAD, 0x29, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x28, + 0xE8, 0x87, 0xAA, 0x29, 0x28, 0xE8, 0x87, 0xB3, + 0x29, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, 0x32, + 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, 0x32, + 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, 0x33, + 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, 0xE1, + 0x84, 0x80, 0xE1, 0x84, 0x82, 0xE1, 0x84, 0x83, + 0xE1, 0x84, 0x85, 0xE1, 0x84, 0x86, 0xE1, 0x84, + 0x87, 0xE1, 0x84, 0x89, 0xE1, 0x84, 0x8B, 0xE1, + 0x84, 0x8C, 0xE1, 0x84, 0x8E, 0xE1, 0x84, 0x8F, + 0xE1, 0x84, 0x90, 0xE1, 0x84, 0x91, 0xE1, 0x84, + 0x92, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0xE1, + 0x84, 0x82, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x83, + 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x85, 0xE1, 0x85, + 0xA1, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0xE1, + 0x84, 0x87, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x89, + 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + 0xA1, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0xE1, + 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x8F, + 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x90, 0xE1, 0x85, + 0xA1, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0xE1, + 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE4, 0xB8, 0x80, + 0xE4, 0xBA, 0x8C, 0xE4, 0xB8, 0x89, 0xE5, 0x9B, + 0x9B, 0xE4, 0xBA, 0x94, 0xE5, 0x85, 0xAD, 0xE4, + 0xB8, 0x83, 0xE5, 0x85, 0xAB, 0xE4, 0xB9, 0x9D, + 0xE5, 0x8D, 0x81, 0xE6, 0x9C, 0x88, 0xE7, 0x81, + 0xAB, 0xE6, 0xB0, 0xB4, 0xE6, 0x9C, 0xA8, 0xE9, + 0x87, 0x91, 0xE5, 0x9C, 0x9F, 0xE6, 0x97, 0xA5, + 0xE6, 0xA0, 0xAA, 0xE6, 0x9C, 0x89, 0xE7, 0xA4, + 0xBE, 0xE5, 0x90, 0x8D, 0xE7, 0x89, 0xB9, 0xE8, + 0xB2, 0xA1, 0xE7, 0xA5, 0x9D, 0xE5, 0x8A, 0xB4, + 0xE7, 0xA7, 0x98, 0xE7, 0x94, 0xB7, 0xE5, 0xA5, + 0xB3, 0xE9, 0x81, 0xA9, 0xE5, 0x84, 0xAA, 0xE5, + 0x8D, 0xB0, 0xE6, 0xB3, 0xA8, 0xE9, 0xA0, 0x85, + 0xE4, 0xBC, 0x91, 0xE5, 0x86, 0x99, 0xE6, 0xAD, + 0xA3, 0xE4, 0xB8, 0x8A, 0xE4, 0xB8, 0xAD, 0xE4, + 0xB8, 0x8B, 0xE5, 0xB7, 0xA6, 0xE5, 0x8F, 0xB3, + 0xE5, 0x8C, 0xBB, 0xE5, 0xAE, 0x97, 0xE5, 0xAD, + 0xA6, 0xE7, 0x9B, 0xA3, 0xE4, 0xBC, 0x81, 0xE8, + 0xB3, 0x87, 0xE5, 0x8D, 0x94, 0xE5, 0xA4, 0x9C, + 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, + 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, + 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, + 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x31, 0xE6, + 0x9C, 0x88, 0x32, 0xE6, 0x9C, 0x88, 0x33, 0xE6, + 0x9C, 0x88, 0x34, 0xE6, 0x9C, 0x88, 0x35, 0xE6, + 0x9C, 0x88, 0x36, 0xE6, 0x9C, 0x88, 0x37, 0xE6, + 0x9C, 0x88, 0x38, 0xE6, 0x9C, 0x88, 0x39, 0xE6, + 0x9C, 0x88, 0x31, 0x30, 0xE6, 0x9C, 0x88, 0x31, + 0x31, 0xE6, 0x9C, 0x88, 0x31, 0x32, 0xE6, 0x9C, + 0x88, 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xA4, 0xE3, + 0x82, 0xA6, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xAA, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0xB3, 0xE3, + 0x82, 0xB5, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xB9, + 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0xBD, 0xE3, 0x82, + 0xBF, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0x84, 0xE3, + 0x83, 0x86, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x8A, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x8C, 0xE3, 0x83, + 0x8D, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x8F, 0xE3, + 0x83, 0x92, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0x98, + 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0x9E, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0xA1, 0xE3, + 0x83, 0xA2, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xA6, + 0xE3, 0x83, 0xA8, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xAA, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xAC, 0xE3, + 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0xB0, + 0xE3, 0x83, 0xB1, 0xE3, 0x83, 0xB2, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, 0x82, + 0xA1, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, + 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x81, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA8, 0xE3, + 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xB9, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xA0, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0xAA, 0xE3, 0x82, 0xAB, 0xE3, 0x83, + 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAD, 0xE3, 0x83, + 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xBC, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, + 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xA0, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, + 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAD, 0xE3, 0x83, + 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x88, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, + 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x8D, 0xE3, 0x82, + 0xB1, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0xE3, + 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, + 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB5, 0xE3, + 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0xE3, + 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x82, + 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, + 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xBC, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x86, 0xE3, + 0x82, 0x99, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x8A, 0xE3, + 0x83, 0x8E, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x8F, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0x84, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBB, + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x84, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x95, 0xE3, 0x82, + 0xA3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x83, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xBD, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x92, 0xE3, 0x83, + 0x98, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB7, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0xE3, 0x83, + 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0x9E, 0xE3, + 0x82, 0xA4, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x9E, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0xE3, 0x83, + 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0xE3, + 0x83, 0x9E, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, + 0xE3, 0x83, 0xA7, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x9F, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA1, 0xE3, 0x82, + 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xA6, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xAA, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xA0, 0xE3, + 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x88, 0x30, 0xE7, 0x82, 0xB9, 0x31, 0xE7, + 0x82, 0xB9, 0x32, 0xE7, 0x82, 0xB9, 0x33, 0xE7, + 0x82, 0xB9, 0x34, 0xE7, 0x82, 0xB9, 0x35, 0xE7, + 0x82, 0xB9, 0x36, 0xE7, 0x82, 0xB9, 0x37, 0xE7, + 0x82, 0xB9, 0x38, 0xE7, 0x82, 0xB9, 0x39, 0xE7, + 0x82, 0xB9, 0x31, 0x30, 0xE7, 0x82, 0xB9, 0x31, + 0x31, 0xE7, 0x82, 0xB9, 0x31, 0x32, 0xE7, 0x82, + 0xB9, 0x31, 0x33, 0xE7, 0x82, 0xB9, 0x31, 0x34, + 0xE7, 0x82, 0xB9, 0x31, 0x35, 0xE7, 0x82, 0xB9, + 0x31, 0x36, 0xE7, 0x82, 0xB9, 0x31, 0x37, 0xE7, + 0x82, 0xB9, 0x31, 0x38, 0xE7, 0x82, 0xB9, 0x31, + 0x39, 0xE7, 0x82, 0xB9, 0x32, 0x30, 0xE7, 0x82, + 0xB9, 0x32, 0x31, 0xE7, 0x82, 0xB9, 0x32, 0x32, + 0xE7, 0x82, 0xB9, 0x32, 0x33, 0xE7, 0x82, 0xB9, + 0x32, 0x34, 0xE7, 0x82, 0xB9, 0x68, 0x50, 0x61, + 0x64, 0x61, 0x41, 0x55, 0x62, 0x61, 0x72, 0x6F, + 0x56, 0x70, 0x63, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, + 0x90, 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0xE5, + 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, 0xE6, 0x98, 0x8E, + 0xE6, 0xB2, 0xBB, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, + 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x70, + 0x41, 0x6E, 0x41, 0xCE, 0xBC, 0x41, 0x6D, 0x41, + 0x6B, 0x41, 0x4B, 0x42, 0x4D, 0x42, 0x47, 0x42, + 0x63, 0x61, 0x6C, 0x6B, 0x63, 0x61, 0x6C, 0x70, + 0x46, 0x6E, 0x46, 0xCE, 0xBC, 0x46, 0xCE, 0xBC, + 0x67, 0x6D, 0x67, 0x6B, 0x67, 0x48, 0x7A, 0x6B, + 0x48, 0x7A, 0x4D, 0x48, 0x7A, 0x47, 0x48, 0x7A, + 0x54, 0x48, 0x7A, 0xCE, 0xBC, 0x6C, 0x6D, 0x6C, + 0x64, 0x6C, 0x6B, 0x6C, 0x66, 0x6D, 0x6E, 0x6D, + 0xCE, 0xBC, 0x6D, 0x6D, 0x6D, 0x63, 0x6D, 0x6B, + 0x6D, 0x6D, 0x6D, 0x32, 0x63, 0x6D, 0x32, 0x6D, + 0x32, 0x6B, 0x6D, 0x32, 0x6D, 0x6D, 0x33, 0x63, + 0x6D, 0x33, 0x6D, 0x33, 0x6B, 0x6D, 0x33, 0x6D, + 0xE2, 0x88, 0x95, 0x73, 0x6D, 0xE2, 0x88, 0x95, + 0x73, 0x32, 0x50, 0x61, 0x6B, 0x50, 0x61, 0x4D, + 0x50, 0x61, 0x47, 0x50, 0x61, 0x72, 0x61, 0x64, + 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x72, + 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x70, + 0x73, 0x6E, 0x73, 0xCE, 0xBC, 0x73, 0x6D, 0x73, + 0x70, 0x56, 0x6E, 0x56, 0xCE, 0xBC, 0x56, 0x6D, + 0x56, 0x6B, 0x56, 0x4D, 0x56, 0x70, 0x57, 0x6E, + 0x57, 0xCE, 0xBC, 0x57, 0x6D, 0x57, 0x6B, 0x57, + 0x4D, 0x57, 0x6B, 0xCE, 0xA9, 0x4D, 0xCE, 0xA9, + 0x61, 0x2E, 0x6D, 0x2E, 0x42, 0x71, 0x63, 0x63, + 0x63, 0x64, 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, + 0x43, 0x6F, 0x2E, 0x64, 0x42, 0x47, 0x79, 0x68, + 0x61, 0x48, 0x50, 0x69, 0x6E, 0x4B, 0x4B, 0x4B, + 0x4D, 0x6B, 0x74, 0x6C, 0x6D, 0x6C, 0x6E, 0x6C, + 0x6F, 0x67, 0x6C, 0x78, 0x6D, 0x62, 0x6D, 0x69, + 0x6C, 0x6D, 0x6F, 0x6C, 0x50, 0x48, 0x70, 0x2E, + 0x6D, 0x2E, 0x50, 0x50, 0x4D, 0x50, 0x52, 0x73, + 0x72, 0x53, 0x76, 0x57, 0x62, 0x31, 0xE6, 0x97, + 0xA5, 0x32, 0xE6, 0x97, 0xA5, 0x33, 0xE6, 0x97, + 0xA5, 0x34, 0xE6, 0x97, 0xA5, 0x35, 0xE6, 0x97, + 0xA5, 0x36, 0xE6, 0x97, 0xA5, 0x37, 0xE6, 0x97, + 0xA5, 0x38, 0xE6, 0x97, 0xA5, 0x39, 0xE6, 0x97, + 0xA5, 0x31, 0x30, 0xE6, 0x97, 0xA5, 0x31, 0x31, + 0xE6, 0x97, 0xA5, 0x31, 0x32, 0xE6, 0x97, 0xA5, + 0x31, 0x33, 0xE6, 0x97, 0xA5, 0x31, 0x34, 0xE6, + 0x97, 0xA5, 0x31, 0x35, 0xE6, 0x97, 0xA5, 0x31, + 0x36, 0xE6, 0x97, 0xA5, 0x31, 0x37, 0xE6, 0x97, + 0xA5, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x31, 0x39, + 0xE6, 0x97, 0xA5, 0x32, 0x30, 0xE6, 0x97, 0xA5, + 0x32, 0x31, 0xE6, 0x97, 0xA5, 0x32, 0x32, 0xE6, + 0x97, 0xA5, 0x32, 0x33, 0xE6, 0x97, 0xA5, 0x32, + 0x34, 0xE6, 0x97, 0xA5, 0x32, 0x35, 0xE6, 0x97, + 0xA5, 0x32, 0x36, 0xE6, 0x97, 0xA5, 0x32, 0x37, + 0xE6, 0x97, 0xA5, 0x32, 0x38, 0xE6, 0x97, 0xA5, + 0x32, 0x39, 0xE6, 0x97, 0xA5, 0x33, 0x30, 0xE6, + 0x97, 0xA5, 0x33, 0x31, 0xE6, 0x97, 0xA5, 0xF6, + 0xE8, 0xB1, 0x88, 0xF6, 0xE6, 0x9B, 0xB4, 0xF6, + 0xE8, 0xBB, 0x8A, 0xF6, 0xE8, 0xB3, 0x88, 0xF6, + 0xE6, 0xBB, 0x91, 0xF6, 0xE4, 0xB8, 0xB2, 0xF6, + 0xE5, 0x8F, 0xA5, 0xF6, 0xE9, 0xBE, 0x9C, 0xF6, + 0xE9, 0xBE, 0x9C, 0xF6, 0xE5, 0xA5, 0x91, 0xF6, + 0xE9, 0x87, 0x91, 0xF6, 0xE5, 0x96, 0x87, 0xF6, + 0xE5, 0xA5, 0x88, 0xF6, 0xE6, 0x87, 0xB6, 0xF6, + 0xE7, 0x99, 0xA9, 0xF6, 0xE7, 0xBE, 0x85, 0xF6, + 0xE8, 0x98, 0xBF, 0xF6, 0xE8, 0x9E, 0xBA, 0xF6, + 0xE8, 0xA3, 0xB8, 0xF6, 0xE9, 0x82, 0x8F, 0xF6, + 0xE6, 0xA8, 0x82, 0xF6, 0xE6, 0xB4, 0x9B, 0xF6, + 0xE7, 0x83, 0x99, 0xF6, 0xE7, 0x8F, 0x9E, 0xF6, + 0xE8, 0x90, 0xBD, 0xF6, 0xE9, 0x85, 0xAA, 0xF6, + 0xE9, 0xA7, 0xB1, 0xF6, 0xE4, 0xBA, 0x82, 0xF6, + 0xE5, 0x8D, 0xB5, 0xF6, 0xE6, 0xAC, 0x84, 0xF6, + 0xE7, 0x88, 0x9B, 0xF6, 0xE8, 0x98, 0xAD, 0xF6, + 0xE9, 0xB8, 0x9E, 0xF6, 0xE5, 0xB5, 0x90, 0xF6, + 0xE6, 0xBF, 0xAB, 0xF6, 0xE8, 0x97, 0x8D, 0xF6, + 0xE8, 0xA5, 0xA4, 0xF6, 0xE6, 0x8B, 0x89, 0xF6, + 0xE8, 0x87, 0x98, 0xF6, 0xE8, 0xA0, 0x9F, 0xF6, + 0xE5, 0xBB, 0x8A, 0xF6, 0xE6, 0x9C, 0x97, 0xF6, + 0xE6, 0xB5, 0xAA, 0xF6, 0xE7, 0x8B, 0xBC, 0xF6, + 0xE9, 0x83, 0x8E, 0xF6, 0xE4, 0xBE, 0x86, 0xF6, + 0xE5, 0x86, 0xB7, 0xF6, 0xE5, 0x8B, 0x9E, 0xF6, + 0xE6, 0x93, 0x84, 0xF6, 0xE6, 0xAB, 0x93, 0xF6, + 0xE7, 0x88, 0x90, 0xF6, 0xE7, 0x9B, 0xA7, 0xF6, + 0xE8, 0x80, 0x81, 0xF6, 0xE8, 0x98, 0x86, 0xF6, + 0xE8, 0x99, 0x9C, 0xF6, 0xE8, 0xB7, 0xAF, 0xF6, + 0xE9, 0x9C, 0xB2, 0xF6, 0xE9, 0xAD, 0xAF, 0xF6, + 0xE9, 0xB7, 0xBA, 0xF6, 0xE7, 0xA2, 0x8C, 0xF6, + 0xE7, 0xA5, 0xBF, 0xF6, 0xE7, 0xB6, 0xA0, 0xF6, + 0xE8, 0x8F, 0x89, 0xF6, 0xE9, 0x8C, 0x84, 0xF6, + 0xE9, 0xB9, 0xBF, 0xF6, 0xE8, 0xAB, 0x96, 0xF6, + 0xE5, 0xA3, 0x9F, 0xF6, 0xE5, 0xBC, 0x84, 0xF6, + 0xE7, 0xB1, 0xA0, 0xF6, 0xE8, 0x81, 0xBE, 0xF6, + 0xE7, 0x89, 0xA2, 0xF6, 0xE7, 0xA3, 0x8A, 0xF6, + 0xE8, 0xB3, 0x82, 0xF6, 0xE9, 0x9B, 0xB7, 0xF6, + 0xE5, 0xA3, 0x98, 0xF6, 0xE5, 0xB1, 0xA2, 0xF6, + 0xE6, 0xA8, 0x93, 0xF6, 0xE6, 0xB7, 0x9A, 0xF6, + 0xE6, 0xBC, 0x8F, 0xF6, 0xE7, 0xB4, 0xAF, 0xF6, + 0xE7, 0xB8, 0xB7, 0xF6, 0xE9, 0x99, 0x8B, 0xF6, + 0xE5, 0x8B, 0x92, 0xF6, 0xE8, 0x82, 0x8B, 0xF6, + 0xE5, 0x87, 0x9C, 0xF6, 0xE5, 0x87, 0x8C, 0xF6, + 0xE7, 0xA8, 0x9C, 0xF6, 0xE7, 0xB6, 0xBE, 0xF6, + 0xE8, 0x8F, 0xB1, 0xF6, 0xE9, 0x99, 0xB5, 0xF6, + 0xE8, 0xAE, 0x80, 0xF6, 0xE6, 0x8B, 0x8F, 0xF6, + 0xE6, 0xA8, 0x82, 0xF6, 0xE8, 0xAB, 0xBE, 0xF6, + 0xE4, 0xB8, 0xB9, 0xF6, 0xE5, 0xAF, 0xA7, 0xF6, + 0xE6, 0x80, 0x92, 0xF6, 0xE7, 0x8E, 0x87, 0xF6, + 0xE7, 0x95, 0xB0, 0xF6, 0xE5, 0x8C, 0x97, 0xF6, + 0xE7, 0xA3, 0xBB, 0xF6, 0xE4, 0xBE, 0xBF, 0xF6, + 0xE5, 0xBE, 0xA9, 0xF6, 0xE4, 0xB8, 0x8D, 0xF6, + 0xE6, 0xB3, 0x8C, 0xF6, 0xE6, 0x95, 0xB8, 0xF6, + 0xE7, 0xB4, 0xA2, 0xF6, 0xE5, 0x8F, 0x83, 0xF6, + 0xE5, 0xA1, 0x9E, 0xF6, 0xE7, 0x9C, 0x81, 0xF6, + 0xE8, 0x91, 0x89, 0xF6, 0xE8, 0xAA, 0xAA, 0xF6, + 0xE6, 0xAE, 0xBA, 0xF6, 0xE8, 0xBE, 0xB0, 0xF6, + 0xE6, 0xB2, 0x88, 0xF6, 0xE6, 0x8B, 0xBE, 0xF6, + 0xE8, 0x8B, 0xA5, 0xF6, 0xE6, 0x8E, 0xA0, 0xF6, + 0xE7, 0x95, 0xA5, 0xF6, 0xE4, 0xBA, 0xAE, 0xF6, + 0xE5, 0x85, 0xA9, 0xF6, 0xE5, 0x87, 0x89, 0xF6, + 0xE6, 0xA2, 0x81, 0xF6, 0xE7, 0xB3, 0xA7, 0xF6, + 0xE8, 0x89, 0xAF, 0xF6, 0xE8, 0xAB, 0x92, 0xF6, + 0xE9, 0x87, 0x8F, 0xF6, 0xE5, 0x8B, 0xB5, 0xF6, + 0xE5, 0x91, 0x82, 0xF6, 0xE5, 0xA5, 0xB3, 0xF6, + 0xE5, 0xBB, 0xAC, 0xF6, 0xE6, 0x97, 0x85, 0xF6, + 0xE6, 0xBF, 0xBE, 0xF6, 0xE7, 0xA4, 0xAA, 0xF6, + 0xE9, 0x96, 0xAD, 0xF6, 0xE9, 0xA9, 0xAA, 0xF6, + 0xE9, 0xBA, 0x97, 0xF6, 0xE9, 0xBB, 0x8E, 0xF6, + 0xE5, 0x8A, 0x9B, 0xF6, 0xE6, 0x9B, 0x86, 0xF6, + 0xE6, 0xAD, 0xB7, 0xF6, 0xE8, 0xBD, 0xA2, 0xF6, + 0xE5, 0xB9, 0xB4, 0xF6, 0xE6, 0x86, 0x90, 0xF6, + 0xE6, 0x88, 0x80, 0xF6, 0xE6, 0x92, 0x9A, 0xF6, + 0xE6, 0xBC, 0xA3, 0xF6, 0xE7, 0x85, 0x89, 0xF6, + 0xE7, 0x92, 0x89, 0xF6, 0xE7, 0xA7, 0x8A, 0xF6, + 0xE7, 0xB7, 0xB4, 0xF6, 0xE8, 0x81, 0xAF, 0xF6, + 0xE8, 0xBC, 0xA6, 0xF6, 0xE8, 0x93, 0xAE, 0xF6, + 0xE9, 0x80, 0xA3, 0xF6, 0xE9, 0x8D, 0x8A, 0xF6, + 0xE5, 0x88, 0x97, 0xF6, 0xE5, 0x8A, 0xA3, 0xF6, + 0xE5, 0x92, 0xBD, 0xF6, 0xE7, 0x83, 0x88, 0xF6, + 0xE8, 0xA3, 0x82, 0xF6, 0xE8, 0xAA, 0xAA, 0xF6, + 0xE5, 0xBB, 0x89, 0xF6, 0xE5, 0xBF, 0xB5, 0xF6, + 0xE6, 0x8D, 0xBB, 0xF6, 0xE6, 0xAE, 0xAE, 0xF6, + 0xE7, 0xB0, 0xBE, 0xF6, 0xE7, 0x8D, 0xB5, 0xF6, + 0xE4, 0xBB, 0xA4, 0xF6, 0xE5, 0x9B, 0xB9, 0xF6, + 0xE5, 0xAF, 0xA7, 0xF6, 0xE5, 0xB6, 0xBA, 0xF6, + 0xE6, 0x80, 0x9C, 0xF6, 0xE7, 0x8E, 0xB2, 0xF6, + 0xE7, 0x91, 0xA9, 0xF6, 0xE7, 0xBE, 0x9A, 0xF6, + 0xE8, 0x81, 0x86, 0xF6, 0xE9, 0x88, 0xB4, 0xF6, + 0xE9, 0x9B, 0xB6, 0xF6, 0xE9, 0x9D, 0x88, 0xF6, + 0xE9, 0xA0, 0x98, 0xF6, 0xE4, 0xBE, 0x8B, 0xF6, + 0xE7, 0xA6, 0xAE, 0xF6, 0xE9, 0x86, 0xB4, 0xF6, + 0xE9, 0x9A, 0xB8, 0xF6, 0xE6, 0x83, 0xA1, 0xF6, + 0xE4, 0xBA, 0x86, 0xF6, 0xE5, 0x83, 0x9A, 0xF6, + 0xE5, 0xAF, 0xAE, 0xF6, 0xE5, 0xB0, 0xBF, 0xF6, + 0xE6, 0x96, 0x99, 0xF6, 0xE6, 0xA8, 0x82, 0xF6, + 0xE7, 0x87, 0x8E, 0xF6, 0xE7, 0x99, 0x82, 0xF6, + 0xE8, 0x93, 0xBC, 0xF6, 0xE9, 0x81, 0xBC, 0xF6, + 0xE9, 0xBE, 0x8D, 0xF6, 0xE6, 0x9A, 0x88, 0xF6, + 0xE9, 0x98, 0xAE, 0xF6, 0xE5, 0x8A, 0x89, 0xF6, + 0xE6, 0x9D, 0xBB, 0xF6, 0xE6, 0x9F, 0xB3, 0xF6, + 0xE6, 0xB5, 0x81, 0xF6, 0xE6, 0xBA, 0x9C, 0xF6, + 0xE7, 0x90, 0x89, 0xF6, 0xE7, 0x95, 0x99, 0xF6, + 0xE7, 0xA1, 0xAB, 0xF6, 0xE7, 0xB4, 0x90, 0xF6, + 0xE9, 0xA1, 0x9E, 0xF6, 0xE5, 0x85, 0xAD, 0xF6, + 0xE6, 0x88, 0xAE, 0xF6, 0xE9, 0x99, 0xB8, 0xF6, + 0xE5, 0x80, 0xAB, 0xF6, 0xE5, 0xB4, 0x99, 0xF6, + 0xE6, 0xB7, 0xAA, 0xF6, 0xE8, 0xBC, 0xAA, 0xF6, + 0xE5, 0xBE, 0x8B, 0xF6, 0xE6, 0x85, 0x84, 0xF6, + 0xE6, 0xA0, 0x97, 0xF6, 0xE7, 0x8E, 0x87, 0xF6, + 0xE9, 0x9A, 0x86, 0xF6, 0xE5, 0x88, 0xA9, 0xF6, + 0xE5, 0x90, 0x8F, 0xF6, 0xE5, 0xB1, 0xA5, 0xF6, + 0xE6, 0x98, 0x93, 0xF6, 0xE6, 0x9D, 0x8E, 0xF6, + 0xE6, 0xA2, 0xA8, 0xF6, 0xE6, 0xB3, 0xA5, 0xF6, + 0xE7, 0x90, 0x86, 0xF6, 0xE7, 0x97, 0xA2, 0xF6, + 0xE7, 0xBD, 0xB9, 0xF6, 0xE8, 0xA3, 0x8F, 0xF6, + 0xE8, 0xA3, 0xA1, 0xF6, 0xE9, 0x87, 0x8C, 0xF6, + 0xE9, 0x9B, 0xA2, 0xF6, 0xE5, 0x8C, 0xBF, 0xF6, + 0xE6, 0xBA, 0xBA, 0xF6, 0xE5, 0x90, 0x9D, 0xF6, + 0xE7, 0x87, 0x90, 0xF6, 0xE7, 0x92, 0x98, 0xF6, + 0xE8, 0x97, 0xBA, 0xF6, 0xE9, 0x9A, 0xA3, 0xF6, + 0xE9, 0xB1, 0x97, 0xF6, 0xE9, 0xBA, 0x9F, 0xF6, + 0xE6, 0x9E, 0x97, 0xF6, 0xE6, 0xB7, 0x8B, 0xF6, + 0xE8, 0x87, 0xA8, 0xF6, 0xE7, 0xAB, 0x8B, 0xF6, + 0xE7, 0xAC, 0xA0, 0xF6, 0xE7, 0xB2, 0x92, 0xF6, + 0xE7, 0x8B, 0x80, 0xF6, 0xE7, 0x82, 0x99, 0xF6, + 0xE8, 0xAD, 0x98, 0xF6, 0xE4, 0xBB, 0x80, 0xF6, + 0xE8, 0x8C, 0xB6, 0xF6, 0xE5, 0x88, 0xBA, 0xF6, + 0xE5, 0x88, 0x87, 0xF6, 0xE5, 0xBA, 0xA6, 0xF6, + 0xE6, 0x8B, 0x93, 0xF6, 0xE7, 0xB3, 0x96, 0xF6, + 0xE5, 0xAE, 0x85, 0xF6, 0xE6, 0xB4, 0x9E, 0xF6, + 0xE6, 0x9A, 0xB4, 0xF6, 0xE8, 0xBC, 0xBB, 0xF6, + 0xE8, 0xA1, 0x8C, 0xF6, 0xE9, 0x99, 0x8D, 0xF6, + 0xE8, 0xA6, 0x8B, 0xF6, 0xE5, 0xBB, 0x93, 0xF6, + 0xE5, 0x85, 0x80, 0xF6, 0xE5, 0x97, 0x80, 0xF6, + 0xE5, 0xA1, 0x9A, 0xF6, 0xE6, 0x99, 0xB4, 0xF6, + 0xE5, 0x87, 0x9E, 0xF6, 0xE7, 0x8C, 0xAA, 0xF6, + 0xE7, 0x9B, 0x8A, 0xF6, 0xE7, 0xA4, 0xBC, 0xF6, + 0xE7, 0xA5, 0x9E, 0xF6, 0xE7, 0xA5, 0xA5, 0xF6, + 0xE7, 0xA6, 0x8F, 0xF6, 0xE9, 0x9D, 0x96, 0xF6, + 0xE7, 0xB2, 0xBE, 0xF6, 0xE7, 0xBE, 0xBD, 0xF6, + 0xE8, 0x98, 0x92, 0xF6, 0xE8, 0xAB, 0xB8, 0xF6, + 0xE9, 0x80, 0xB8, 0xF6, 0xE9, 0x83, 0xBD, 0xF6, + 0xE9, 0xA3, 0xAF, 0xF6, 0xE9, 0xA3, 0xBC, 0xF6, + 0xE9, 0xA4, 0xA8, 0xF6, 0xE9, 0xB6, 0xB4, 0xF6, + 0xE4, 0xBE, 0xAE, 0xF6, 0xE5, 0x83, 0xA7, 0xF6, + 0xE5, 0x85, 0x8D, 0xF6, 0xE5, 0x8B, 0x89, 0xF6, + 0xE5, 0x8B, 0xA4, 0xF6, 0xE5, 0x8D, 0x91, 0xF6, + 0xE5, 0x96, 0x9D, 0xF6, 0xE5, 0x98, 0x86, 0xF6, + 0xE5, 0x99, 0xA8, 0xF6, 0xE5, 0xA1, 0x80, 0xF6, + 0xE5, 0xA2, 0xA8, 0xF6, 0xE5, 0xB1, 0xA4, 0xF6, + 0xE5, 0xB1, 0xAE, 0xF6, 0xE6, 0x82, 0x94, 0xF6, + 0xE6, 0x85, 0xA8, 0xF6, 0xE6, 0x86, 0x8E, 0xF6, + 0xE6, 0x87, 0xB2, 0xF6, 0xE6, 0x95, 0x8F, 0xF6, + 0xE6, 0x97, 0xA2, 0xF6, 0xE6, 0x9A, 0x91, 0xF6, + 0xE6, 0xA2, 0x85, 0xF6, 0xE6, 0xB5, 0xB7, 0xF6, + 0xE6, 0xB8, 0x9A, 0xF6, 0xE6, 0xBC, 0xA2, 0xF6, + 0xE7, 0x85, 0xAE, 0xF6, 0xE7, 0x88, 0xAB, 0xF6, + 0xE7, 0x90, 0xA2, 0xF6, 0xE7, 0xA2, 0x91, 0xF6, + 0xE7, 0xA4, 0xBE, 0xF6, 0xE7, 0xA5, 0x89, 0xF6, + 0xE7, 0xA5, 0x88, 0xF6, 0xE7, 0xA5, 0x90, 0xF6, + 0xE7, 0xA5, 0x96, 0xF6, 0xE7, 0xA5, 0x9D, 0xF6, + 0xE7, 0xA6, 0x8D, 0xF6, 0xE7, 0xA6, 0x8E, 0xF6, + 0xE7, 0xA9, 0x80, 0xF6, 0xE7, 0xAA, 0x81, 0xF6, + 0xE7, 0xAF, 0x80, 0xF6, 0xE7, 0xB7, 0xB4, 0xF6, + 0xE7, 0xB8, 0x89, 0xF6, 0xE7, 0xB9, 0x81, 0xF6, + 0xE7, 0xBD, 0xB2, 0xF6, 0xE8, 0x80, 0x85, 0xF6, + 0xE8, 0x87, 0xAD, 0xF6, 0xE8, 0x89, 0xB9, 0xF6, + 0xE8, 0x89, 0xB9, 0xF6, 0xE8, 0x91, 0x97, 0xF6, + 0xE8, 0xA4, 0x90, 0xF6, 0xE8, 0xA6, 0x96, 0xF6, + 0xE8, 0xAC, 0x81, 0xF6, 0xE8, 0xAC, 0xB9, 0xF6, + 0xE8, 0xB3, 0x93, 0xF6, 0xE8, 0xB4, 0x88, 0xF6, + 0xE8, 0xBE, 0xB6, 0xF6, 0xE9, 0x80, 0xB8, 0xF6, + 0xE9, 0x9B, 0xA3, 0xF6, 0xE9, 0x9F, 0xBF, 0xF6, + 0xE9, 0xA0, 0xBB, 0x66, 0x66, 0x66, 0x69, 0x66, + 0x6C, 0x66, 0x66, 0x69, 0x66, 0x66, 0x6C, 0x73, + 0x74, 0x73, 0x74, 0xD5, 0xB4, 0xD5, 0xB6, 0xD5, + 0xB4, 0xD5, 0xA5, 0xD5, 0xB4, 0xD5, 0xAB, 0xD5, + 0xBE, 0xD5, 0xB6, 0xD5, 0xB4, 0xD5, 0xAD, 0xF6, + 0xD7, 0x99, 0xD6, 0xB4, 0xF6, 0xD7, 0xB2, 0xD6, + 0xB7, 0xD7, 0xA2, 0xD7, 0x90, 0xD7, 0x93, 0xD7, + 0x94, 0xD7, 0x9B, 0xD7, 0x9C, 0xD7, 0x9D, 0xD7, + 0xA8, 0xD7, 0xAA, 0x2B, 0xF6, 0xD7, 0xA9, 0xD7, + 0x81, 0xF6, 0xD7, 0xA9, 0xD7, 0x82, 0xF6, 0xD7, + 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0xF6, 0xD7, 0xA9, + 0xD6, 0xBC, 0xD7, 0x82, 0xF6, 0xD7, 0x90, 0xD6, + 0xB7, 0xF6, 0xD7, 0x90, 0xD6, 0xB8, 0xF6, 0xD7, + 0x90, 0xD6, 0xBC, 0xF6, 0xD7, 0x91, 0xD6, 0xBC, + 0xF6, 0xD7, 0x92, 0xD6, 0xBC, 0xF6, 0xD7, 0x93, + 0xD6, 0xBC, 0xF6, 0xD7, 0x94, 0xD6, 0xBC, 0xF6, + 0xD7, 0x95, 0xD6, 0xBC, 0xF6, 0xD7, 0x96, 0xD6, + 0xBC, 0xF6, 0xD7, 0x98, 0xD6, 0xBC, 0xF6, 0xD7, + 0x99, 0xD6, 0xBC, 0xF6, 0xD7, 0x9A, 0xD6, 0xBC, + 0xF6, 0xD7, 0x9B, 0xD6, 0xBC, 0xF6, 0xD7, 0x9C, + 0xD6, 0xBC, 0xF6, 0xD7, 0x9E, 0xD6, 0xBC, 0xF6, + 0xD7, 0xA0, 0xD6, 0xBC, 0xF6, 0xD7, 0xA1, 0xD6, + 0xBC, 0xF6, 0xD7, 0xA3, 0xD6, 0xBC, 0xF6, 0xD7, + 0xA4, 0xD6, 0xBC, 0xF6, 0xD7, 0xA6, 0xD6, 0xBC, + 0xF6, 0xD7, 0xA7, 0xD6, 0xBC, 0xF6, 0xD7, 0xA8, + 0xD6, 0xBC, 0xF6, 0xD7, 0xA9, 0xD6, 0xBC, 0xF6, + 0xD7, 0xAA, 0xD6, 0xBC, 0xF6, 0xD7, 0x95, 0xD6, + 0xB9, 0xF6, 0xD7, 0x91, 0xD6, 0xBF, 0xF6, 0xD7, + 0x9B, 0xD6, 0xBF, 0xF6, 0xD7, 0xA4, 0xD6, 0xBF, + 0xD7, 0x90, 0xD7, 0x9C, 0xD9, 0xB1, 0xD9, 0xB1, + 0xD9, 0xBB, 0xD9, 0xBB, 0xD9, 0xBB, 0xD9, 0xBB, + 0xD9, 0xBE, 0xD9, 0xBE, 0xD9, 0xBE, 0xD9, 0xBE, + 0xDA, 0x80, 0xDA, 0x80, 0xDA, 0x80, 0xDA, 0x80, + 0xD9, 0xBA, 0xD9, 0xBA, 0xD9, 0xBA, 0xD9, 0xBA, + 0xD9, 0xBF, 0xD9, 0xBF, 0xD9, 0xBF, 0xD9, 0xBF, + 0xD9, 0xB9, 0xD9, 0xB9, 0xD9, 0xB9, 0xD9, 0xB9, + 0xDA, 0xA4, 0xDA, 0xA4, 0xDA, 0xA4, 0xDA, 0xA4, + 0xDA, 0xA6, 0xDA, 0xA6, 0xDA, 0xA6, 0xDA, 0xA6, + 0xDA, 0x84, 0xDA, 0x84, 0xDA, 0x84, 0xDA, 0x84, + 0xDA, 0x83, 0xDA, 0x83, 0xDA, 0x83, 0xDA, 0x83, + 0xDA, 0x86, 0xDA, 0x86, 0xDA, 0x86, 0xDA, 0x86, + 0xDA, 0x87, 0xDA, 0x87, 0xDA, 0x87, 0xDA, 0x87, + 0xDA, 0x8D, 0xDA, 0x8D, 0xDA, 0x8C, 0xDA, 0x8C, + 0xDA, 0x8E, 0xDA, 0x8E, 0xDA, 0x88, 0xDA, 0x88, + 0xDA, 0x98, 0xDA, 0x98, 0xDA, 0x91, 0xDA, 0x91, + 0xDA, 0xA9, 0xDA, 0xA9, 0xDA, 0xA9, 0xDA, 0xA9, + 0xDA, 0xAF, 0xDA, 0xAF, 0xDA, 0xAF, 0xDA, 0xAF, + 0xDA, 0xB3, 0xDA, 0xB3, 0xDA, 0xB3, 0xDA, 0xB3, + 0xDA, 0xB1, 0xDA, 0xB1, 0xDA, 0xB1, 0xDA, 0xB1, + 0xDA, 0xBA, 0xDA, 0xBA, 0xDA, 0xBB, 0xDA, 0xBB, + 0xDA, 0xBB, 0xDA, 0xBB, 0xDB, 0x95, 0xD9, 0x94, + 0xDB, 0x95, 0xD9, 0x94, 0xDB, 0x81, 0xDB, 0x81, + 0xDB, 0x81, 0xDB, 0x81, 0xDA, 0xBE, 0xDA, 0xBE, + 0xDA, 0xBE, 0xDA, 0xBE, 0xDB, 0x92, 0xDB, 0x92, + 0xDB, 0x92, 0xD9, 0x94, 0xDB, 0x92, 0xD9, 0x94, + 0xDA, 0xAD, 0xDA, 0xAD, 0xDA, 0xAD, 0xDA, 0xAD, + 0xDB, 0x87, 0xDB, 0x87, 0xDB, 0x86, 0xDB, 0x86, + 0xDB, 0x88, 0xDB, 0x88, 0xDB, 0x87, 0xD9, 0xB4, + 0xDB, 0x8B, 0xDB, 0x8B, 0xDB, 0x85, 0xDB, 0x85, + 0xDB, 0x89, 0xDB, 0x89, 0xDB, 0x90, 0xDB, 0x90, + 0xDB, 0x90, 0xDB, 0x90, 0xD9, 0x89, 0xD9, 0x89, + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0x8A, + 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x95, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x95, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x88, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x87, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x87, + 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x86, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x88, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x88, + 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x90, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x90, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x89, 0xDB, 0x8C, 0xDB, 0x8C, + 0xDB, 0x8C, 0xDB, 0x8C, 0xD9, 0x8A, 0xD9, 0x94, + 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x89, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x8A, 0xD8, 0xA8, 0xD8, 0xAC, 0xD8, 0xA8, + 0xD8, 0xAD, 0xD8, 0xA8, 0xD8, 0xAE, 0xD8, 0xA8, + 0xD9, 0x85, 0xD8, 0xA8, 0xD9, 0x89, 0xD8, 0xA8, + 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, 0xAC, 0xD8, 0xAA, + 0xD8, 0xAD, 0xD8, 0xAA, 0xD8, 0xAE, 0xD8, 0xAA, + 0xD9, 0x85, 0xD8, 0xAA, 0xD9, 0x89, 0xD8, 0xAA, + 0xD9, 0x8A, 0xD8, 0xAB, 0xD8, 0xAC, 0xD8, 0xAB, + 0xD9, 0x85, 0xD8, 0xAB, 0xD9, 0x89, 0xD8, 0xAB, + 0xD9, 0x8A, 0xD8, 0xAC, 0xD8, 0xAD, 0xD8, 0xAC, + 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD8, 0xAE, + 0xD8, 0xAD, 0xD8, 0xAE, 0xD9, 0x85, 0xD8, 0xB3, + 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xB3, + 0xD8, 0xAE, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xB5, + 0xD8, 0xAD, 0xD8, 0xB5, 0xD9, 0x85, 0xD8, 0xB6, + 0xD8, 0xAC, 0xD8, 0xB6, 0xD8, 0xAD, 0xD8, 0xB6, + 0xD8, 0xAE, 0xD8, 0xB6, 0xD9, 0x85, 0xD8, 0xB7, + 0xD8, 0xAD, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xB8, + 0xD9, 0x85, 0xD8, 0xB9, 0xD8, 0xAC, 0xD8, 0xB9, + 0xD9, 0x85, 0xD8, 0xBA, 0xD8, 0xAC, 0xD8, 0xBA, + 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAC, 0xD9, 0x81, + 0xD8, 0xAD, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x81, + 0xD9, 0x85, 0xD9, 0x81, 0xD9, 0x89, 0xD9, 0x81, + 0xD9, 0x8A, 0xD9, 0x82, 0xD8, 0xAD, 0xD9, 0x82, + 0xD9, 0x85, 0xD9, 0x82, 0xD9, 0x89, 0xD9, 0x82, + 0xD9, 0x8A, 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x83, + 0xD8, 0xAC, 0xD9, 0x83, 0xD8, 0xAD, 0xD9, 0x83, + 0xD8, 0xAE, 0xD9, 0x83, 0xD9, 0x84, 0xD9, 0x83, + 0xD9, 0x85, 0xD9, 0x83, 0xD9, 0x89, 0xD9, 0x83, + 0xD9, 0x8A, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x84, + 0xD8, 0xAD, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x84, + 0xD9, 0x85, 0xD9, 0x84, 0xD9, 0x89, 0xD9, 0x84, + 0xD9, 0x8A, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, + 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x89, 0xD9, 0x85, + 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x86, 0xD8, 0xAE, 0xD9, 0x86, + 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x89, 0xD9, 0x86, + 0xD9, 0x8A, 0xD9, 0x87, 0xD8, 0xAC, 0xD9, 0x87, + 0xD9, 0x85, 0xD9, 0x87, 0xD9, 0x89, 0xD9, 0x87, + 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xAE, 0xD9, 0x8A, + 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x89, 0xD9, 0x8A, + 0xD9, 0x8A, 0xD8, 0xB0, 0xD9, 0xB0, 0xD8, 0xB1, + 0xD9, 0xB0, 0xD9, 0x89, 0xD9, 0xB0, 0x20, 0xD9, + 0x8C, 0xD9, 0x91, 0x20, 0xD9, 0x8D, 0xD9, 0x91, + 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x20, 0xD9, 0x8F, + 0xD9, 0x91, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x20, + 0xD9, 0x91, 0xD9, 0xB0, 0xD9, 0x8A, 0xD9, 0x94, + 0xD8, 0xB1, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB2, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x86, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x89, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, + 0xD8, 0xA8, 0xD8, 0xB1, 0xD8, 0xA8, 0xD8, 0xB2, + 0xD8, 0xA8, 0xD9, 0x85, 0xD8, 0xA8, 0xD9, 0x86, + 0xD8, 0xA8, 0xD9, 0x89, 0xD8, 0xA8, 0xD9, 0x8A, + 0xD8, 0xAA, 0xD8, 0xB1, 0xD8, 0xAA, 0xD8, 0xB2, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAA, 0xD9, 0x86, + 0xD8, 0xAA, 0xD9, 0x89, 0xD8, 0xAA, 0xD9, 0x8A, + 0xD8, 0xAB, 0xD8, 0xB1, 0xD8, 0xAB, 0xD8, 0xB2, + 0xD8, 0xAB, 0xD9, 0x85, 0xD8, 0xAB, 0xD9, 0x86, + 0xD8, 0xAB, 0xD9, 0x89, 0xD8, 0xAB, 0xD9, 0x8A, + 0xD9, 0x81, 0xD9, 0x89, 0xD9, 0x81, 0xD9, 0x8A, + 0xD9, 0x82, 0xD9, 0x89, 0xD9, 0x82, 0xD9, 0x8A, + 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x83, 0xD9, 0x84, + 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x83, 0xD9, 0x89, + 0xD9, 0x83, 0xD9, 0x8A, 0xD9, 0x84, 0xD9, 0x85, + 0xD9, 0x84, 0xD9, 0x89, 0xD9, 0x84, 0xD9, 0x8A, + 0xD9, 0x85, 0xD8, 0xA7, 0xD9, 0x85, 0xD9, 0x85, + 0xD9, 0x86, 0xD8, 0xB1, 0xD9, 0x86, 0xD8, 0xB2, + 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x86, + 0xD9, 0x86, 0xD9, 0x89, 0xD9, 0x86, 0xD9, 0x8A, + 0xD9, 0x89, 0xD9, 0xB0, 0xD9, 0x8A, 0xD8, 0xB1, + 0xD9, 0x8A, 0xD8, 0xB2, 0xD9, 0x8A, 0xD9, 0x85, + 0xD9, 0x8A, 0xD9, 0x86, 0xD9, 0x8A, 0xD9, 0x89, + 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x94, + 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x87, 0xD8, 0xA8, 0xD8, 0xAC, 0xD8, 0xA8, + 0xD8, 0xAD, 0xD8, 0xA8, 0xD8, 0xAE, 0xD8, 0xA8, + 0xD9, 0x85, 0xD8, 0xA8, 0xD9, 0x87, 0xD8, 0xAA, + 0xD8, 0xAC, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAA, + 0xD8, 0xAE, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAA, + 0xD9, 0x87, 0xD8, 0xAB, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, + 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAE, + 0xD8, 0xAC, 0xD8, 0xAE, 0xD9, 0x85, 0xD8, 0xB3, + 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xB3, + 0xD8, 0xAE, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xB5, + 0xD8, 0xAD, 0xD8, 0xB5, 0xD8, 0xAE, 0xD8, 0xB5, + 0xD9, 0x85, 0xD8, 0xB6, 0xD8, 0xAC, 0xD8, 0xB6, + 0xD8, 0xAD, 0xD8, 0xB6, 0xD8, 0xAE, 0xD8, 0xB6, + 0xD9, 0x85, 0xD8, 0xB7, 0xD8, 0xAD, 0xD8, 0xB8, + 0xD9, 0x85, 0xD8, 0xB9, 0xD8, 0xAC, 0xD8, 0xB9, + 0xD9, 0x85, 0xD8, 0xBA, 0xD8, 0xAC, 0xD8, 0xBA, + 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAC, 0xD9, 0x81, + 0xD8, 0xAD, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x81, + 0xD9, 0x85, 0xD9, 0x82, 0xD8, 0xAD, 0xD9, 0x82, + 0xD9, 0x85, 0xD9, 0x83, 0xD8, 0xAC, 0xD9, 0x83, + 0xD8, 0xAD, 0xD9, 0x83, 0xD8, 0xAE, 0xD9, 0x83, + 0xD9, 0x84, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x84, + 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x84, + 0xD8, 0xAE, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x84, + 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, + 0xD9, 0x85, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x86, 0xD8, 0xAE, 0xD9, 0x86, + 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x87, 0xD9, 0x87, + 0xD8, 0xAC, 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x87, + 0xD9, 0xB0, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xAE, 0xD9, 0x8A, + 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x87, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x87, 0xD8, 0xA8, 0xD9, 0x85, 0xD8, 0xA8, + 0xD9, 0x87, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAA, + 0xD9, 0x87, 0xD8, 0xAB, 0xD9, 0x85, 0xD8, 0xAB, + 0xD9, 0x87, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xB3, + 0xD9, 0x87, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xB4, + 0xD9, 0x87, 0xD9, 0x83, 0xD9, 0x84, 0xD9, 0x83, + 0xD9, 0x85, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x86, + 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x87, 0xD9, 0x8A, + 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x87, 0xD9, 0x80, + 0xD9, 0x8E, 0xD9, 0x91, 0xD9, 0x80, 0xD9, 0x8F, + 0xD9, 0x91, 0xD9, 0x80, 0xD9, 0x90, 0xD9, 0x91, + 0xD8, 0xB7, 0xD9, 0x89, 0xD8, 0xB7, 0xD9, 0x8A, + 0xD8, 0xB9, 0xD9, 0x89, 0xD8, 0xB9, 0xD9, 0x8A, + 0xD8, 0xBA, 0xD9, 0x89, 0xD8, 0xBA, 0xD9, 0x8A, + 0xD8, 0xB3, 0xD9, 0x89, 0xD8, 0xB3, 0xD9, 0x8A, + 0xD8, 0xB4, 0xD9, 0x89, 0xD8, 0xB4, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x89, 0xD8, 0xAD, 0xD9, 0x8A, + 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xAE, 0xD9, 0x89, 0xD8, 0xAE, 0xD9, 0x8A, + 0xD8, 0xB5, 0xD9, 0x89, 0xD8, 0xB5, 0xD9, 0x8A, + 0xD8, 0xB6, 0xD9, 0x89, 0xD8, 0xB6, 0xD9, 0x8A, + 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, 0x85, + 0xD8, 0xB4, 0xD8, 0xB1, 0xD8, 0xB3, 0xD8, 0xB1, + 0xD8, 0xB5, 0xD8, 0xB1, 0xD8, 0xB6, 0xD8, 0xB1, + 0xD8, 0xB7, 0xD9, 0x89, 0xD8, 0xB7, 0xD9, 0x8A, + 0xD8, 0xB9, 0xD9, 0x89, 0xD8, 0xB9, 0xD9, 0x8A, + 0xD8, 0xBA, 0xD9, 0x89, 0xD8, 0xBA, 0xD9, 0x8A, + 0xD8, 0xB3, 0xD9, 0x89, 0xD8, 0xB3, 0xD9, 0x8A, + 0xD8, 0xB4, 0xD9, 0x89, 0xD8, 0xB4, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x89, 0xD8, 0xAD, 0xD9, 0x8A, + 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xAE, 0xD9, 0x89, 0xD8, 0xAE, 0xD9, 0x8A, + 0xD8, 0xB5, 0xD9, 0x89, 0xD8, 0xB5, 0xD9, 0x8A, + 0xD8, 0xB6, 0xD9, 0x89, 0xD8, 0xB6, 0xD9, 0x8A, + 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, 0x85, + 0xD8, 0xB4, 0xD8, 0xB1, 0xD8, 0xB3, 0xD8, 0xB1, + 0xD8, 0xB5, 0xD8, 0xB1, 0xD8, 0xB6, 0xD8, 0xB1, + 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, 0x85, + 0xD8, 0xB3, 0xD9, 0x87, 0xD8, 0xB4, 0xD9, 0x87, + 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xB3, 0xD8, 0xAC, + 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xB3, 0xD8, 0xAE, + 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB7, 0xD9, 0x85, + 0xD8, 0xB8, 0xD9, 0x85, 0xD8, 0xA7, 0xD9, 0x8B, + 0xD8, 0xA7, 0xD9, 0x8B, 0xD8, 0xAA, 0xD8, 0xAC, + 0xD9, 0x85, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, + 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, 0xAA, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAA, 0xD8, 0xAE, + 0xD9, 0x85, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAA, + 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD9, 0x85, + 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, + 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xAD, + 0xD9, 0x85, 0xD9, 0x89, 0xD8, 0xB3, 0xD8, 0xAD, + 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD8, 0xB3, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xB3, + 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xB3, 0xD9, 0x85, + 0xD8, 0xAD, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB3, + 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB5, 0xD8, 0xAD, + 0xD8, 0xAD, 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, + 0xD8, 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB4, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD9, 0x85, 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xB4, + 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, 0x85, + 0xD9, 0x85, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, + 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, 0xD8, 0xB6, + 0xD8, 0xAE, 0xD9, 0x85, 0xD8, 0xB6, 0xD8, 0xAE, + 0xD9, 0x85, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, + 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xB7, + 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB7, 0xD9, 0x85, + 0xD9, 0x8A, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, + 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB9, + 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB9, 0xD9, 0x85, + 0xD9, 0x89, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, + 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xBA, + 0xD9, 0x85, 0xD9, 0x89, 0xD9, 0x81, 0xD8, 0xAE, + 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x85, + 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x82, + 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x84, 0xD8, 0xAD, + 0xD9, 0x85, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, + 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, 0xD9, 0x84, + 0xD8, 0xAC, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xAC, + 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, + 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0xD9, 0x84, + 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x84, 0xD9, 0x85, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, + 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x85, + 0xD8, 0xAD, 0xD9, 0x8A, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, + 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD9, 0x85, + 0xD8, 0xAE, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAE, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, + 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x86, 0xD8, 0xAD, + 0xD9, 0x89, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, + 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x86, + 0xD8, 0xAC, 0xD9, 0x89, 0xD9, 0x86, 0xD9, 0x85, + 0xD9, 0x8A, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x89, + 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x8A, + 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xA8, 0xD8, 0xAE, + 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xAA, + 0xD8, 0xAE, 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, 0xAE, + 0xD9, 0x89, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x8A, + 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0xD8, 0xAC, + 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x89, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, + 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, 0xD8, 0xB5, + 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, + 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x84, + 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x85, + 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x82, 0xD9, 0x85, + 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x8A, + 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x84, + 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xB9, 0xD9, 0x85, + 0xD9, 0x8A, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x8A, + 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x85, + 0xD8, 0xAE, 0xD9, 0x8A, 0xD9, 0x84, 0xD8, 0xAC, + 0xD9, 0x85, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, + 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x86, + 0xD8, 0xAC, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x81, + 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xA8, 0xD8, 0xAD, + 0xD9, 0x8A, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, + 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xB5, + 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB3, 0xD8, 0xAE, + 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x8A, + 0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, 0xD9, 0x82, + 0xD9, 0x84, 0xDB, 0x92, 0xD8, 0xA7, 0xD9, 0x84, + 0xD9, 0x84, 0xD9, 0x87, 0xD8, 0xA7, 0xD9, 0x83, + 0xD8, 0xA8, 0xD8, 0xB1, 0xD9, 0x85, 0xD8, 0xAD, + 0xD9, 0x85, 0xD8, 0xAF, 0xD8, 0xB5, 0xD9, 0x84, + 0xD8, 0xB9, 0xD9, 0x85, 0xD8, 0xB1, 0xD8, 0xB3, + 0xD9, 0x88, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x84, + 0xD9, 0x8A, 0xD9, 0x87, 0xD9, 0x88, 0xD8, 0xB3, + 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xB5, 0xD9, 0x84, + 0xD9, 0x89, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, + 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, + 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, + 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, + 0x84, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x84, 0x20, + 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x84, + 0xD9, 0x87, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, + 0xD9, 0x84, 0x2E, 0x2E, 0xE2, 0x80, 0x94, 0xE2, + 0x80, 0x93, 0x5F, 0x5F, 0x28, 0x29, 0x7B, 0x7D, + 0xE3, 0x80, 0x94, 0xE3, 0x80, 0x95, 0xE3, 0x80, + 0x90, 0xE3, 0x80, 0x91, 0xE3, 0x80, 0x8A, 0xE3, + 0x80, 0x8B, 0xE3, 0x80, 0x88, 0xE3, 0x80, 0x89, + 0xE3, 0x80, 0x8C, 0xE3, 0x80, 0x8D, 0xE3, 0x80, + 0x8E, 0xE3, 0x80, 0x8F, 0x20, 0xCC, 0x85, 0x20, + 0xCC, 0x85, 0x20, 0xCC, 0x85, 0x20, 0xCC, 0x85, + 0x5F, 0x5F, 0x5F, 0x2C, 0xE3, 0x80, 0x81, 0x2E, + 0x3B, 0x3A, 0x3F, 0x21, 0xE2, 0x80, 0x94, 0x28, + 0x29, 0x7B, 0x7D, 0xE3, 0x80, 0x94, 0xE3, 0x80, + 0x95, 0x23, 0x26, 0x2A, 0x2B, 0x2D, 0x3C, 0x3E, + 0x3D, 0x5C, 0x24, 0x25, 0x40, 0x20, 0xD9, 0x8B, + 0xD9, 0x80, 0xD9, 0x8B, 0x20, 0xD9, 0x8C, 0x20, + 0xD9, 0x8D, 0x20, 0xD9, 0x8E, 0xD9, 0x80, 0xD9, + 0x8E, 0x20, 0xD9, 0x8F, 0xD9, 0x80, 0xD9, 0x8F, + 0x20, 0xD9, 0x90, 0xD9, 0x80, 0xD9, 0x90, 0x20, + 0xD9, 0x91, 0xD9, 0x80, 0xD9, 0x91, 0x20, 0xD9, + 0x92, 0xD9, 0x80, 0xD9, 0x92, 0xD8, 0xA1, 0xD8, + 0xA7, 0xD9, 0x93, 0xD8, 0xA7, 0xD9, 0x93, 0xD8, + 0xA7, 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0x94, 0xD9, + 0x88, 0xD9, 0x94, 0xD9, 0x88, 0xD9, 0x94, 0xD8, + 0xA7, 0xD9, 0x95, 0xD8, 0xA7, 0xD9, 0x95, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xA7, 0xD8, 0xA7, 0xD8, 0xA8, 0xD8, 0xA8, 0xD8, + 0xA8, 0xD8, 0xA8, 0xD8, 0xA9, 0xD8, 0xA9, 0xD8, + 0xAA, 0xD8, 0xAA, 0xD8, 0xAA, 0xD8, 0xAA, 0xD8, + 0xAB, 0xD8, 0xAB, 0xD8, 0xAB, 0xD8, 0xAB, 0xD8, + 0xAC, 0xD8, 0xAC, 0xD8, 0xAC, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD8, 0xAD, 0xD8, 0xAD, 0xD8, 0xAD, 0xD8, + 0xAE, 0xD8, 0xAE, 0xD8, 0xAE, 0xD8, 0xAE, 0xD8, + 0xAF, 0xD8, 0xAF, 0xD8, 0xB0, 0xD8, 0xB0, 0xD8, + 0xB1, 0xD8, 0xB1, 0xD8, 0xB2, 0xD8, 0xB2, 0xD8, + 0xB3, 0xD8, 0xB3, 0xD8, 0xB3, 0xD8, 0xB3, 0xD8, + 0xB4, 0xD8, 0xB4, 0xD8, 0xB4, 0xD8, 0xB4, 0xD8, + 0xB5, 0xD8, 0xB5, 0xD8, 0xB5, 0xD8, 0xB5, 0xD8, + 0xB6, 0xD8, 0xB6, 0xD8, 0xB6, 0xD8, 0xB6, 0xD8, + 0xB7, 0xD8, 0xB7, 0xD8, 0xB7, 0xD8, 0xB7, 0xD8, + 0xB8, 0xD8, 0xB8, 0xD8, 0xB8, 0xD8, 0xB8, 0xD8, + 0xB9, 0xD8, 0xB9, 0xD8, 0xB9, 0xD8, 0xB9, 0xD8, + 0xBA, 0xD8, 0xBA, 0xD8, 0xBA, 0xD8, 0xBA, 0xD9, + 0x81, 0xD9, 0x81, 0xD9, 0x81, 0xD9, 0x81, 0xD9, + 0x82, 0xD9, 0x82, 0xD9, 0x82, 0xD9, 0x82, 0xD9, + 0x83, 0xD9, 0x83, 0xD9, 0x83, 0xD9, 0x83, 0xD9, + 0x84, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x84, 0xD9, + 0x85, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + 0x86, 0xD9, 0x86, 0xD9, 0x86, 0xD9, 0x86, 0xD9, + 0x87, 0xD9, 0x87, 0xD9, 0x87, 0xD9, 0x87, 0xD9, + 0x88, 0xD9, 0x88, 0xD9, 0x89, 0xD9, 0x89, 0xD9, + 0x8A, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, + 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xD9, 0x84, 0xD8, + 0xA7, 0xD9, 0x93, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x94, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xD9, + 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xD9, 0x84, 0xD8, + 0xA7, 0xD9, 0x95, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x84, 0xD8, 0xA7, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, + 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, + 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, + 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, + 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, + 0x7E, 0xE2, 0xA6, 0x85, 0xE2, 0xA6, 0x86, 0xE3, + 0x80, 0x82, 0xE3, 0x80, 0x8C, 0xE3, 0x80, 0x8D, + 0xE3, 0x80, 0x81, 0xE3, 0x83, 0xBB, 0xE3, 0x83, + 0xB2, 0xE3, 0x82, 0xA1, 0xE3, 0x82, 0xA3, 0xE3, + 0x82, 0xA5, 0xE3, 0x82, 0xA7, 0xE3, 0x82, 0xA9, + 0xE3, 0x83, 0xA3, 0xE3, 0x83, 0xA5, 0xE3, 0x83, + 0xA7, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xA2, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xA6, + 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xAA, 0xE3, 0x82, + 0xAB, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, + 0x82, 0xB1, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB5, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xB9, 0xE3, 0x82, + 0xBB, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0xBF, 0xE3, + 0x83, 0x81, 0xE3, 0x83, 0x84, 0xE3, 0x83, 0x86, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x8A, 0xE3, 0x83, + 0x8B, 0xE3, 0x83, 0x8C, 0xE3, 0x83, 0x8D, 0xE3, + 0x83, 0x8E, 0xE3, 0x83, 0x8F, 0xE3, 0x83, 0x92, + 0xE3, 0x83, 0x95, 0xE3, 0x83, 0x98, 0xE3, 0x83, + 0x9B, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x9F, 0xE3, + 0x83, 0xA0, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xA2, + 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xA6, 0xE3, 0x83, + 0xA8, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xAA, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0x99, 0xE3, 0x82, 0x9A, 0xE1, 0x85, 0xA0, 0xE1, + 0x84, 0x80, 0xE1, 0x84, 0x81, 0xE1, 0x86, 0xAA, + 0xE1, 0x84, 0x82, 0xE1, 0x86, 0xAC, 0xE1, 0x86, + 0xAD, 0xE1, 0x84, 0x83, 0xE1, 0x84, 0x84, 0xE1, + 0x84, 0x85, 0xE1, 0x86, 0xB0, 0xE1, 0x86, 0xB1, + 0xE1, 0x86, 0xB2, 0xE1, 0x86, 0xB3, 0xE1, 0x86, + 0xB4, 0xE1, 0x86, 0xB5, 0xE1, 0x84, 0x9A, 0xE1, + 0x84, 0x86, 0xE1, 0x84, 0x87, 0xE1, 0x84, 0x88, + 0xE1, 0x84, 0xA1, 0xE1, 0x84, 0x89, 0xE1, 0x84, + 0x8A, 0xE1, 0x84, 0x8B, 0xE1, 0x84, 0x8C, 0xE1, + 0x84, 0x8D, 0xE1, 0x84, 0x8E, 0xE1, 0x84, 0x8F, + 0xE1, 0x84, 0x90, 0xE1, 0x84, 0x91, 0xE1, 0x84, + 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x85, 0xA2, 0xE1, + 0x85, 0xA3, 0xE1, 0x85, 0xA4, 0xE1, 0x85, 0xA5, + 0xE1, 0x85, 0xA6, 0xE1, 0x85, 0xA7, 0xE1, 0x85, + 0xA8, 0xE1, 0x85, 0xA9, 0xE1, 0x85, 0xAA, 0xE1, + 0x85, 0xAB, 0xE1, 0x85, 0xAC, 0xE1, 0x85, 0xAD, + 0xE1, 0x85, 0xAE, 0xE1, 0x85, 0xAF, 0xE1, 0x85, + 0xB0, 0xE1, 0x85, 0xB1, 0xE1, 0x85, 0xB2, 0xE1, + 0x85, 0xB3, 0xE1, 0x85, 0xB4, 0xE1, 0x85, 0xB5, + 0xC2, 0xA2, 0xC2, 0xA3, 0xC2, 0xAC, 0x20, 0xCC, + 0x84, 0xC2, 0xA6, 0xC2, 0xA5, 0xE2, 0x82, 0xA9, + 0xE2, 0x94, 0x82, 0xE2, 0x86, 0x90, 0xE2, 0x86, + 0x91, 0xE2, 0x86, 0x92, 0xE2, 0x86, 0x93, 0xE2, + 0x96, 0xA0, 0xE2, 0x97, 0x8B, 0xF6, 0xF0, 0x9D, + 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xF6, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF6, + 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xAE, 0xF6, 0xF0, 0x9D, 0x85, + 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + 0xAF, 0xF6, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xF6, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xB1, 0xF6, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, + 0xF6, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xF6, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, + 0x85, 0xA5, 0xF6, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xF6, + 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xAE, 0xF6, 0xF0, 0x9D, 0x86, + 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + 0xAF, 0xF6, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0x41, 0x42, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, + 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, + 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, + 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, + 0x65, 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x43, 0x44, 0x47, 0x4A, 0x4B, 0x4E, + 0x4F, 0x50, 0x51, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x66, + 0x68, 0x69, 0x6A, 0x6B, 0x6D, 0x6E, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x44, + 0x45, 0x46, 0x47, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, + 0x4F, 0x50, 0x51, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, + 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x44, 0x45, + 0x46, 0x47, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4F, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0xCE, 0x91, 0xCE, 0x92, 0xCE, 0x93, 0xCE, + 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, + 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xCE, + 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, 0xCE, + 0xA0, 0xCE, 0xA1, 0xCE, 0x98, 0xCE, 0xA3, 0xCE, + 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, 0xCE, + 0xA8, 0xCE, 0xA9, 0xE2, 0x88, 0x87, 0xCE, 0xB1, + 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, + 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, + 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, + 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, 0xCF, 0x81, + 0xCF, 0x82, 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, + 0xCF, 0x86, 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, + 0xE2, 0x88, 0x82, 0xCE, 0xB5, 0xCE, 0xB8, 0xCE, + 0xBA, 0xCF, 0x86, 0xCF, 0x81, 0xCF, 0x80, 0xCE, + 0x91, 0xCE, 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xCE, + 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, 0x98, 0xCE, + 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, + 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, + 0xA1, 0xCE, 0x98, 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, + 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, + 0xA9, 0xE2, 0x88, 0x87, 0xCE, 0xB1, 0xCE, 0xB2, + 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, + 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, + 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, + 0xCE, 0xBF, 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x82, + 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, 0xCF, 0x86, + 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, 0xE2, 0x88, + 0x82, 0xCE, 0xB5, 0xCE, 0xB8, 0xCE, 0xBA, 0xCF, + 0x86, 0xCF, 0x81, 0xCF, 0x80, 0xCE, 0x91, 0xCE, + 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, + 0x96, 0xCE, 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, + 0x9A, 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, + 0x9E, 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, + 0x98, 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, + 0xA6, 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xE2, + 0x88, 0x87, 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, + 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, + 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, + 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, + 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x82, 0xCF, 0x83, + 0xCF, 0x84, 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, + 0xCF, 0x88, 0xCF, 0x89, 0xE2, 0x88, 0x82, 0xCE, + 0xB5, 0xCE, 0xB8, 0xCE, 0xBA, 0xCF, 0x86, 0xCF, + 0x81, 0xCF, 0x80, 0xCE, 0x91, 0xCE, 0x92, 0xCE, + 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, + 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, + 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, + 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, 0x98, 0xCE, + 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, + 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xE2, 0x88, 0x87, + 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, + 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, + 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, + 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, + 0xCF, 0x81, 0xCF, 0x82, 0xCF, 0x83, 0xCF, 0x84, + 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, 0xCF, 0x88, + 0xCF, 0x89, 0xE2, 0x88, 0x82, 0xCE, 0xB5, 0xCE, + 0xB8, 0xCE, 0xBA, 0xCF, 0x86, 0xCF, 0x81, 0xCF, + 0x80, 0xCE, 0x91, 0xCE, 0x92, 0xCE, 0x93, 0xCE, + 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, + 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xCE, + 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, 0xCE, + 0xA0, 0xCE, 0xA1, 0xCE, 0x98, 0xCE, 0xA3, 0xCE, + 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, 0xCE, + 0xA8, 0xCE, 0xA9, 0xE2, 0x88, 0x87, 0xCE, 0xB1, + 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, + 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, + 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, + 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, 0xCF, 0x81, + 0xCF, 0x82, 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, + 0xCF, 0x86, 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, + 0xE2, 0x88, 0x82, 0xCE, 0xB5, 0xCE, 0xB8, 0xCE, + 0xBA, 0xCF, 0x86, 0xCF, 0x81, 0xCF, 0x80, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0xF6, 0xE4, 0xB8, 0xBD, 0xF6, 0xE4, 0xB8, + 0xB8, 0xF6, 0xE4, 0xB9, 0x81, 0xF6, 0xF0, 0xA0, + 0x84, 0xA2, 0xF6, 0xE4, 0xBD, 0xA0, 0xF6, 0xE4, + 0xBE, 0xAE, 0xF6, 0xE4, 0xBE, 0xBB, 0xF6, 0xE5, + 0x80, 0x82, 0xF6, 0xE5, 0x81, 0xBA, 0xF6, 0xE5, + 0x82, 0x99, 0xF6, 0xE5, 0x83, 0xA7, 0xF6, 0xE5, + 0x83, 0x8F, 0xF6, 0xE3, 0x92, 0x9E, 0xF6, 0xF0, + 0xA0, 0x98, 0xBA, 0xF6, 0xE5, 0x85, 0x8D, 0xF6, + 0xE5, 0x85, 0x94, 0xF6, 0xE5, 0x85, 0xA4, 0xF6, + 0xE5, 0x85, 0xB7, 0xF6, 0xF0, 0xA0, 0x94, 0x9C, + 0xF6, 0xE3, 0x92, 0xB9, 0xF6, 0xE5, 0x85, 0xA7, + 0xF6, 0xE5, 0x86, 0x8D, 0xF6, 0xF0, 0xA0, 0x95, + 0x8B, 0xF6, 0xE5, 0x86, 0x97, 0xF6, 0xE5, 0x86, + 0xA4, 0xF6, 0xE4, 0xBB, 0x8C, 0xF6, 0xE5, 0x86, + 0xAC, 0xF6, 0xE5, 0x86, 0xB5, 0xF6, 0xF0, 0xA9, + 0x87, 0x9F, 0xF6, 0xE5, 0x87, 0xB5, 0xF6, 0xE5, + 0x88, 0x83, 0xF6, 0xE3, 0x93, 0x9F, 0xF6, 0xE5, + 0x88, 0xBB, 0xF6, 0xE5, 0x89, 0x86, 0xF6, 0xE5, + 0x89, 0xB2, 0xF6, 0xE5, 0x89, 0xB7, 0xF6, 0xE3, + 0x94, 0x95, 0xF6, 0xE5, 0x8B, 0x87, 0xF6, 0xE5, + 0x8B, 0x89, 0xF6, 0xE5, 0x8B, 0xA4, 0xF6, 0xE5, + 0x8B, 0xBA, 0xF6, 0xE5, 0x8C, 0x85, 0xF6, 0xE5, + 0x8C, 0x86, 0xF6, 0xE5, 0x8C, 0x97, 0xF6, 0xE5, + 0x8D, 0x89, 0xF6, 0xE5, 0x8D, 0x91, 0xF6, 0xE5, + 0x8D, 0x9A, 0xF6, 0xE5, 0x8D, 0xB3, 0xF6, 0xE5, + 0x8D, 0xBD, 0xF6, 0xE5, 0x8D, 0xBF, 0xF6, 0xE5, + 0x8D, 0xBF, 0xF6, 0xE5, 0x8D, 0xBF, 0xF6, 0xF0, + 0xA0, 0xA8, 0xAC, 0xF6, 0xE7, 0x81, 0xB0, 0xF6, + 0xE5, 0x8F, 0x8A, 0xF6, 0xE5, 0x8F, 0x9F, 0xF6, + 0xF0, 0xA0, 0xAD, 0xA3, 0xF6, 0xE5, 0x8F, 0xAB, + 0xF6, 0xE5, 0x8F, 0xB1, 0xF6, 0xE5, 0x90, 0x86, + 0xF6, 0xE5, 0x92, 0x9E, 0xF6, 0xE5, 0x90, 0xB8, + 0xF6, 0xE5, 0x91, 0x88, 0xF6, 0xE5, 0x91, 0xA8, + 0xF6, 0xE5, 0x92, 0xA2, 0xF6, 0xE5, 0x93, 0xB6, + 0xF6, 0xE5, 0x94, 0x90, 0xF6, 0xE5, 0x95, 0x93, + 0xF6, 0xE5, 0x95, 0xA3, 0xF6, 0xE5, 0x96, 0x84, + 0xF6, 0xE5, 0x96, 0x84, 0xF6, 0xE5, 0x96, 0x99, + 0xF6, 0xE5, 0x96, 0xAB, 0xF6, 0xE5, 0x96, 0xB3, + 0xF6, 0xE5, 0x97, 0x82, 0xF6, 0xE5, 0x9C, 0x96, + 0xF6, 0xE5, 0x98, 0x86, 0xF6, 0xE5, 0x9C, 0x97, + 0xF6, 0xE5, 0x99, 0x91, 0xF6, 0xE5, 0x99, 0xB4, + 0xF6, 0xE5, 0x88, 0x87, 0xF6, 0xE5, 0xA3, 0xAE, + 0xF6, 0xE5, 0x9F, 0x8E, 0xF6, 0xE5, 0x9F, 0xB4, + 0xF6, 0xE5, 0xA0, 0x8D, 0xF6, 0xE5, 0x9E, 0x8B, + 0xF6, 0xE5, 0xA0, 0xB2, 0xF6, 0xE5, 0xA0, 0xB1, + 0xF6, 0xE5, 0xA2, 0xAC, 0xF6, 0xF0, 0xA1, 0x93, + 0xA4, 0xF6, 0xE5, 0xA3, 0xB2, 0xF6, 0xE5, 0xA3, + 0xB7, 0xF6, 0xE5, 0xA4, 0x86, 0xF6, 0xE5, 0xA4, + 0x9A, 0xF6, 0xE5, 0xA4, 0xA2, 0xF6, 0xE5, 0xA5, + 0xA2, 0xF6, 0xF0, 0xA1, 0x9A, 0xA8, 0xF6, 0xF0, + 0xA1, 0x9B, 0xAA, 0xF6, 0xE5, 0xA7, 0xAC, 0xF6, + 0xE5, 0xA8, 0x9B, 0xF6, 0xE5, 0xA8, 0xA7, 0xF6, + 0xE5, 0xA7, 0x98, 0xF6, 0xE5, 0xA9, 0xA6, 0xF6, + 0xE3, 0x9B, 0xAE, 0xF6, 0xE3, 0x9B, 0xBC, 0xF6, + 0xE5, 0xAC, 0x88, 0xF6, 0xE5, 0xAC, 0xBE, 0xF6, + 0xE5, 0xAC, 0xBE, 0xF6, 0xF0, 0xA1, 0xA7, 0x88, + 0xF6, 0xE5, 0xAF, 0x83, 0xF6, 0xE5, 0xAF, 0x98, + 0xF6, 0xE5, 0xAF, 0xA7, 0xF6, 0xE5, 0xAF, 0xB3, + 0xF6, 0xF0, 0xA1, 0xAC, 0x98, 0xF6, 0xE5, 0xAF, + 0xBF, 0xF6, 0xE5, 0xB0, 0x86, 0xF6, 0xE5, 0xBD, + 0x93, 0xF6, 0xE5, 0xB0, 0xA2, 0xF6, 0xE3, 0x9E, + 0x81, 0xF6, 0xE5, 0xB1, 0xA0, 0xF6, 0xE5, 0xB1, + 0xAE, 0xF6, 0xE5, 0xB3, 0x80, 0xF6, 0xE5, 0xB2, + 0x8D, 0xF6, 0xF0, 0xA1, 0xB7, 0xA4, 0xF6, 0xE5, + 0xB5, 0x83, 0xF6, 0xF0, 0xA1, 0xB7, 0xA6, 0xF6, + 0xE5, 0xB5, 0xAE, 0xF6, 0xE5, 0xB5, 0xAB, 0xF6, + 0xE5, 0xB5, 0xBC, 0xF6, 0xE5, 0xB7, 0xA1, 0xF6, + 0xE5, 0xB7, 0xA2, 0xF6, 0xE3, 0xA0, 0xAF, 0xF6, + 0xE5, 0xB7, 0xBD, 0xF6, 0xE5, 0xB8, 0xA8, 0xF6, + 0xE5, 0xB8, 0xBD, 0xF6, 0xE5, 0xB9, 0xA9, 0xF6, + 0xE3, 0xA1, 0xA2, 0xF6, 0xF0, 0xA2, 0x86, 0x83, + 0xF6, 0xE3, 0xA1, 0xBC, 0xF6, 0xE5, 0xBA, 0xB0, + 0xF6, 0xE5, 0xBA, 0xB3, 0xF6, 0xE5, 0xBA, 0xB6, + 0xF6, 0xE5, 0xBB, 0x8A, 0xF6, 0xF0, 0xAA, 0x8E, + 0x92, 0xF6, 0xE5, 0xBB, 0xBE, 0xF6, 0xF0, 0xA2, + 0x8C, 0xB1, 0xF6, 0xF0, 0xA2, 0x8C, 0xB1, 0xF6, + 0xE8, 0x88, 0x81, 0xF6, 0xE5, 0xBC, 0xA2, 0xF6, + 0xE5, 0xBC, 0xA2, 0xF6, 0xE3, 0xA3, 0x87, 0xF6, + 0xF0, 0xA3, 0x8A, 0xB8, 0xF6, 0xF0, 0xA6, 0x87, + 0x9A, 0xF6, 0xE5, 0xBD, 0xA2, 0xF6, 0xE5, 0xBD, + 0xAB, 0xF6, 0xE3, 0xA3, 0xA3, 0xF6, 0xE5, 0xBE, + 0x9A, 0xF6, 0xE5, 0xBF, 0x8D, 0xF6, 0xE5, 0xBF, + 0x97, 0xF6, 0xE5, 0xBF, 0xB9, 0xF6, 0xE6, 0x82, + 0x81, 0xF6, 0xE3, 0xA4, 0xBA, 0xF6, 0xE3, 0xA4, + 0x9C, 0xF6, 0xE6, 0x82, 0x94, 0xF6, 0xF0, 0xA2, + 0x9B, 0x94, 0xF6, 0xE6, 0x83, 0x87, 0xF6, 0xE6, + 0x85, 0x88, 0xF6, 0xE6, 0x85, 0x8C, 0xF6, 0xE6, + 0x85, 0x8E, 0xF6, 0xE6, 0x85, 0x8C, 0xF6, 0xE6, + 0x85, 0xBA, 0xF6, 0xE6, 0x86, 0x8E, 0xF6, 0xE6, + 0x86, 0xB2, 0xF6, 0xE6, 0x86, 0xA4, 0xF6, 0xE6, + 0x86, 0xAF, 0xF6, 0xE6, 0x87, 0x9E, 0xF6, 0xE6, + 0x87, 0xB2, 0xF6, 0xE6, 0x87, 0xB6, 0xF6, 0xE6, + 0x88, 0x90, 0xF6, 0xE6, 0x88, 0x9B, 0xF6, 0xE6, + 0x89, 0x9D, 0xF6, 0xE6, 0x8A, 0xB1, 0xF6, 0xE6, + 0x8B, 0x94, 0xF6, 0xE6, 0x8D, 0x90, 0xF6, 0xF0, + 0xA2, 0xAC, 0x8C, 0xF6, 0xE6, 0x8C, 0xBD, 0xF6, + 0xE6, 0x8B, 0xBC, 0xF6, 0xE6, 0x8D, 0xA8, 0xF6, + 0xE6, 0x8E, 0x83, 0xF6, 0xE6, 0x8F, 0xA4, 0xF6, + 0xF0, 0xA2, 0xAF, 0xB1, 0xF6, 0xE6, 0x90, 0xA2, + 0xF6, 0xE6, 0x8F, 0x85, 0xF6, 0xE6, 0x8E, 0xA9, + 0xF6, 0xE3, 0xA8, 0xAE, 0xF6, 0xE6, 0x91, 0xA9, + 0xF6, 0xE6, 0x91, 0xBE, 0xF6, 0xE6, 0x92, 0x9D, + 0xF6, 0xE6, 0x91, 0xB7, 0xF6, 0xE3, 0xA9, 0xAC, + 0xF6, 0xE6, 0x95, 0x8F, 0xF6, 0xE6, 0x95, 0xAC, + 0xF6, 0xF0, 0xA3, 0x80, 0x8A, 0xF6, 0xE6, 0x97, + 0xA3, 0xF6, 0xE6, 0x9B, 0xB8, 0xF6, 0xE6, 0x99, + 0x89, 0xF6, 0xE3, 0xAC, 0x99, 0xF6, 0xE6, 0x9A, + 0x91, 0xF6, 0xE3, 0xAC, 0x88, 0xF6, 0xE3, 0xAB, + 0xA4, 0xF6, 0xE5, 0x86, 0x92, 0xF6, 0xE5, 0x86, + 0x95, 0xF6, 0xE6, 0x9C, 0x80, 0xF6, 0xE6, 0x9A, + 0x9C, 0xF6, 0xE8, 0x82, 0xAD, 0xF6, 0xE4, 0x8F, + 0x99, 0xF6, 0xE6, 0x9C, 0x97, 0xF6, 0xE6, 0x9C, + 0x9B, 0xF6, 0xE6, 0x9C, 0xA1, 0xF6, 0xE6, 0x9D, + 0x9E, 0xF6, 0xE6, 0x9D, 0x93, 0xF6, 0xF0, 0xA3, + 0x8F, 0x83, 0xF6, 0xE3, 0xAD, 0x89, 0xF6, 0xE6, + 0x9F, 0xBA, 0xF6, 0xE6, 0x9E, 0x85, 0xF6, 0xE6, + 0xA1, 0x92, 0xF6, 0xE6, 0xA2, 0x85, 0xF6, 0xF0, + 0xA3, 0x91, 0xAD, 0xF6, 0xE6, 0xA2, 0x8E, 0xF6, + 0xE6, 0xA0, 0x9F, 0xF6, 0xE6, 0xA4, 0x94, 0xF6, + 0xE3, 0xAE, 0x9D, 0xF6, 0xE6, 0xA5, 0x82, 0xF6, + 0xE6, 0xA6, 0xA3, 0xF6, 0xE6, 0xA7, 0xAA, 0xF6, + 0xE6, 0xAA, 0xA8, 0xF6, 0xF0, 0xA3, 0x9A, 0xA3, + 0xF6, 0xE6, 0xAB, 0x9B, 0xF6, 0xE3, 0xB0, 0x98, + 0xF6, 0xE6, 0xAC, 0xA1, 0xF6, 0xF0, 0xA3, 0xA2, + 0xA7, 0xF6, 0xE6, 0xAD, 0x94, 0xF6, 0xE3, 0xB1, + 0x8E, 0xF6, 0xE6, 0xAD, 0xB2, 0xF6, 0xE6, 0xAE, + 0x9F, 0xF6, 0xE6, 0xAE, 0xBA, 0xF6, 0xE6, 0xAE, + 0xBB, 0xF6, 0xF0, 0xA3, 0xAA, 0x8D, 0xF6, 0xF0, + 0xA1, 0xB4, 0x8B, 0xF6, 0xF0, 0xA3, 0xAB, 0xBA, + 0xF6, 0xE6, 0xB1, 0x8E, 0xF6, 0xF0, 0xA3, 0xB2, + 0xBC, 0xF6, 0xE6, 0xB2, 0xBF, 0xF6, 0xE6, 0xB3, + 0x8D, 0xF6, 0xE6, 0xB1, 0xA7, 0xF6, 0xE6, 0xB4, + 0x96, 0xF6, 0xE6, 0xB4, 0xBE, 0xF6, 0xE6, 0xB5, + 0xB7, 0xF6, 0xE6, 0xB5, 0x81, 0xF6, 0xE6, 0xB5, + 0xA9, 0xF6, 0xE6, 0xB5, 0xB8, 0xF6, 0xE6, 0xB6, + 0x85, 0xF6, 0xF0, 0xA3, 0xB4, 0x9E, 0xF6, 0xE6, + 0xB4, 0xB4, 0xF6, 0xE6, 0xB8, 0xAF, 0xF6, 0xE6, + 0xB9, 0xAE, 0xF6, 0xE3, 0xB4, 0xB3, 0xF6, 0xE6, + 0xBB, 0x8B, 0xF6, 0xE6, 0xBB, 0x87, 0xF6, 0xF0, + 0xA3, 0xBB, 0x91, 0xF6, 0xE6, 0xB7, 0xB9, 0xF6, + 0xE6, 0xBD, 0xAE, 0xF6, 0xF0, 0xA3, 0xBD, 0x9E, + 0xF6, 0xF0, 0xA3, 0xBE, 0x8E, 0xF6, 0xE6, 0xBF, + 0x86, 0xF6, 0xE7, 0x80, 0xB9, 0xF6, 0xE7, 0x80, + 0x9E, 0xF6, 0xE7, 0x80, 0x9B, 0xF6, 0xE3, 0xB6, + 0x96, 0xF6, 0xE7, 0x81, 0x8A, 0xF6, 0xE7, 0x81, + 0xBD, 0xF6, 0xE7, 0x81, 0xB7, 0xF6, 0xE7, 0x82, + 0xAD, 0xF6, 0xF0, 0xA0, 0x94, 0xA5, 0xF6, 0xE7, + 0x85, 0x85, 0xF6, 0xF0, 0xA4, 0x89, 0xA3, 0xF6, + 0xE7, 0x86, 0x9C, 0xF6, 0xF0, 0xA4, 0x8E, 0xAB, + 0xF6, 0xE7, 0x88, 0xA8, 0xF6, 0xE7, 0x88, 0xB5, + 0xF6, 0xE7, 0x89, 0x90, 0xF6, 0xF0, 0xA4, 0x98, + 0x88, 0xF6, 0xE7, 0x8A, 0x80, 0xF6, 0xE7, 0x8A, + 0x95, 0xF6, 0xF0, 0xA4, 0x9C, 0xB5, 0xF6, 0xF0, + 0xA4, 0xA0, 0x94, 0xF6, 0xE7, 0x8D, 0xBA, 0xF6, + 0xE7, 0x8E, 0x8B, 0xF6, 0xE3, 0xBA, 0xAC, 0xF6, + 0xE7, 0x8E, 0xA5, 0xF6, 0xE3, 0xBA, 0xB8, 0xF6, + 0xE3, 0xBA, 0xB8, 0xF6, 0xE7, 0x91, 0x87, 0xF6, + 0xE7, 0x91, 0x9C, 0xF6, 0xE7, 0x91, 0xB1, 0xF6, + 0xE7, 0x92, 0x85, 0xF6, 0xE7, 0x93, 0x8A, 0xF6, + 0xE3, 0xBC, 0x9B, 0xF6, 0xE7, 0x94, 0xA4, 0xF6, + 0xF0, 0xA4, 0xB0, 0xB6, 0xF6, 0xE7, 0x94, 0xBE, + 0xF6, 0xF0, 0xA4, 0xB2, 0x92, 0xF6, 0xE7, 0x95, + 0xB0, 0xF6, 0xF0, 0xA2, 0x86, 0x9F, 0xF6, 0xE7, + 0x98, 0x90, 0xF6, 0xF0, 0xA4, 0xBE, 0xA1, 0xF6, + 0xF0, 0xA4, 0xBE, 0xB8, 0xF6, 0xF0, 0xA5, 0x81, + 0x84, 0xF6, 0xE3, 0xBF, 0xBC, 0xF6, 0xE4, 0x80, + 0x88, 0xF6, 0xE7, 0x9B, 0xB4, 0xF6, 0xF0, 0xA5, + 0x83, 0xB3, 0xF6, 0xF0, 0xA5, 0x83, 0xB2, 0xF6, + 0xF0, 0xA5, 0x84, 0x99, 0xF6, 0xF0, 0xA5, 0x84, + 0xB3, 0xF6, 0xE7, 0x9C, 0x9E, 0xF6, 0xE7, 0x9C, + 0x9F, 0xF6, 0xE7, 0x9C, 0x9F, 0xF6, 0xE7, 0x9D, + 0x8A, 0xF6, 0xE4, 0x80, 0xB9, 0xF6, 0xE7, 0x9E, + 0x8B, 0xF6, 0xE4, 0x81, 0x86, 0xF6, 0xE4, 0x82, + 0x96, 0xF6, 0xF0, 0xA5, 0x90, 0x9D, 0xF6, 0xE7, + 0xA1, 0x8E, 0xF6, 0xE7, 0xA2, 0x8C, 0xF6, 0xE7, + 0xA3, 0x8C, 0xF6, 0xE4, 0x83, 0xA3, 0xF6, 0xF0, + 0xA5, 0x98, 0xA6, 0xF6, 0xE7, 0xA5, 0x96, 0xF6, + 0xF0, 0xA5, 0x9A, 0x9A, 0xF6, 0xF0, 0xA5, 0x9B, + 0x85, 0xF6, 0xE7, 0xA6, 0x8F, 0xF6, 0xE7, 0xA7, + 0xAB, 0xF6, 0xE4, 0x84, 0xAF, 0xF6, 0xE7, 0xA9, + 0x80, 0xF6, 0xE7, 0xA9, 0x8A, 0xF6, 0xE7, 0xA9, + 0x8F, 0xF6, 0xF0, 0xA5, 0xA5, 0xBC, 0xF6, 0xF0, + 0xA5, 0xAA, 0xA7, 0xF6, 0xF0, 0xA5, 0xAA, 0xA7, + 0xF6, 0xE7, 0xAB, 0xAE, 0xF6, 0xE4, 0x88, 0x82, + 0xF6, 0xF0, 0xA5, 0xAE, 0xAB, 0xF6, 0xE7, 0xAF, + 0x86, 0xF6, 0xE7, 0xAF, 0x89, 0xF6, 0xE4, 0x88, + 0xA7, 0xF6, 0xF0, 0xA5, 0xB2, 0x80, 0xF6, 0xE7, + 0xB3, 0x92, 0xF6, 0xE4, 0x8A, 0xA0, 0xF6, 0xE7, + 0xB3, 0xA8, 0xF6, 0xE7, 0xB3, 0xA3, 0xF6, 0xE7, + 0xB4, 0x80, 0xF6, 0xF0, 0xA5, 0xBE, 0x86, 0xF6, + 0xE7, 0xB5, 0xA3, 0xF6, 0xE4, 0x8C, 0x81, 0xF6, + 0xE7, 0xB7, 0x87, 0xF6, 0xE7, 0xB8, 0x82, 0xF6, + 0xE7, 0xB9, 0x85, 0xF6, 0xE4, 0x8C, 0xB4, 0xF6, + 0xF0, 0xA6, 0x88, 0xA8, 0xF6, 0xF0, 0xA6, 0x89, + 0x87, 0xF6, 0xE4, 0x8D, 0x99, 0xF6, 0xF0, 0xA6, + 0x8B, 0x99, 0xF6, 0xE7, 0xBD, 0xBA, 0xF6, 0xF0, + 0xA6, 0x8C, 0xBE, 0xF6, 0xE7, 0xBE, 0x95, 0xF6, + 0xE7, 0xBF, 0xBA, 0xF6, 0xE8, 0x80, 0x85, 0xF6, + 0xF0, 0xA6, 0x93, 0x9A, 0xF6, 0xF0, 0xA6, 0x94, + 0xA3, 0xF6, 0xE8, 0x81, 0xA0, 0xF6, 0xF0, 0xA6, + 0x96, 0xA8, 0xF6, 0xE8, 0x81, 0xB0, 0xF6, 0xF0, + 0xA3, 0x8D, 0x9F, 0xF6, 0xE4, 0x8F, 0x95, 0xF6, + 0xE8, 0x82, 0xB2, 0xF6, 0xE8, 0x84, 0x83, 0xF6, + 0xE4, 0x90, 0x8B, 0xF6, 0xE8, 0x84, 0xBE, 0xF6, + 0xE5, 0xAA, 0xB5, 0xF6, 0xF0, 0xA6, 0x9E, 0xA7, + 0xF6, 0xF0, 0xA6, 0x9E, 0xB5, 0xF6, 0xF0, 0xA3, + 0x8E, 0x93, 0xF6, 0xF0, 0xA3, 0x8E, 0x9C, 0xF6, + 0xE8, 0x88, 0x81, 0xF6, 0xE8, 0x88, 0x84, 0xF6, + 0xE8, 0xBE, 0x9E, 0xF6, 0xE4, 0x91, 0xAB, 0xF6, + 0xE8, 0x8A, 0x91, 0xF6, 0xE8, 0x8A, 0x8B, 0xF6, + 0xE8, 0x8A, 0x9D, 0xF6, 0xE5, 0x8A, 0xB3, 0xF6, + 0xE8, 0x8A, 0xB1, 0xF6, 0xE8, 0x8A, 0xB3, 0xF6, + 0xE8, 0x8A, 0xBD, 0xF6, 0xE8, 0x8B, 0xA6, 0xF6, + 0xF0, 0xA6, 0xAC, 0xBC, 0xF6, 0xE8, 0x8B, 0xA5, + 0xF6, 0xE8, 0x8C, 0x9D, 0xF6, 0xE8, 0x8D, 0xA3, + 0xF6, 0xE8, 0x8E, 0xAD, 0xF6, 0xE8, 0x8C, 0xA3, + 0xF6, 0xE8, 0x8E, 0xBD, 0xF6, 0xE8, 0x8F, 0xA7, + 0xF6, 0xE8, 0x91, 0x97, 0xF6, 0xE8, 0x8D, 0x93, + 0xF6, 0xE8, 0x8F, 0x8A, 0xF6, 0xE8, 0x8F, 0x8C, + 0xF6, 0xE8, 0x8F, 0x9C, 0xF6, 0xF0, 0xA6, 0xB0, + 0xB6, 0xF6, 0xF0, 0xA6, 0xB5, 0xAB, 0xF6, 0xF0, + 0xA6, 0xB3, 0x95, 0xF6, 0xE4, 0x94, 0xAB, 0xF6, + 0xE8, 0x93, 0xB1, 0xF6, 0xE8, 0x93, 0xB3, 0xF6, + 0xE8, 0x94, 0x96, 0xF6, 0xF0, 0xA7, 0x8F, 0x8A, + 0xF6, 0xE8, 0x95, 0xA4, 0xF6, 0xF0, 0xA6, 0xBC, + 0xAC, 0xF6, 0xE4, 0x95, 0x9D, 0xF6, 0xE4, 0x95, + 0xA1, 0xF6, 0xF0, 0xA6, 0xBE, 0xB1, 0xF6, 0xF0, + 0xA7, 0x83, 0x92, 0xF6, 0xE4, 0x95, 0xAB, 0xF6, + 0xE8, 0x99, 0x90, 0xF6, 0xE8, 0x99, 0x9C, 0xF6, + 0xE8, 0x99, 0xA7, 0xF6, 0xE8, 0x99, 0xA9, 0xF6, + 0xE8, 0x9A, 0xA9, 0xF6, 0xE8, 0x9A, 0x88, 0xF6, + 0xE8, 0x9C, 0x8E, 0xF6, 0xE8, 0x9B, 0xA2, 0xF6, + 0xE8, 0x9D, 0xB9, 0xF6, 0xE8, 0x9C, 0xA8, 0xF6, + 0xE8, 0x9D, 0xAB, 0xF6, 0xE8, 0x9E, 0x86, 0xF6, + 0xE4, 0x97, 0x97, 0xF6, 0xE8, 0x9F, 0xA1, 0xF6, + 0xE8, 0xA0, 0x81, 0xF6, 0xE4, 0x97, 0xB9, 0xF6, + 0xE8, 0xA1, 0xA0, 0xF6, 0xE8, 0xA1, 0xA3, 0xF6, + 0xF0, 0xA7, 0x99, 0xA7, 0xF6, 0xE8, 0xA3, 0x97, + 0xF6, 0xE8, 0xA3, 0x9E, 0xF6, 0xE4, 0x98, 0xB5, + 0xF6, 0xE8, 0xA3, 0xBA, 0xF6, 0xE3, 0x92, 0xBB, + 0xF6, 0xF0, 0xA7, 0xA2, 0xAE, 0xF6, 0xF0, 0xA7, + 0xA5, 0xA6, 0xF6, 0xE4, 0x9A, 0xBE, 0xF6, 0xE4, + 0x9B, 0x87, 0xF6, 0xE8, 0xAA, 0xA0, 0xF6, 0xE8, + 0xAB, 0xAD, 0xF6, 0xE8, 0xAE, 0x8A, 0xF6, 0xE8, + 0xB1, 0x95, 0xF6, 0xF0, 0xA7, 0xB2, 0xA8, 0xF6, + 0xE8, 0xB2, 0xAB, 0xF6, 0xE8, 0xB3, 0x81, 0xF6, + 0xE8, 0xB4, 0x9B, 0xF6, 0xE8, 0xB5, 0xB7, 0xF6, + 0xF0, 0xA7, 0xBC, 0xAF, 0xF6, 0xF0, 0xA0, 0xA0, + 0x84, 0xF6, 0xE8, 0xB7, 0x8B, 0xF6, 0xE8, 0xB6, + 0xBC, 0xF6, 0xE8, 0xB7, 0xB0, 0xF6, 0xF0, 0xA0, + 0xA3, 0x9E, 0xF6, 0xE8, 0xBB, 0x94, 0xF6, 0xE8, + 0xBC, 0xB8, 0xF6, 0xF0, 0xA8, 0x97, 0x92, 0xF6, + 0xF0, 0xA8, 0x97, 0xAD, 0xF6, 0xE9, 0x82, 0x94, + 0xF6, 0xE9, 0x83, 0xB1, 0xF6, 0xE9, 0x84, 0x91, + 0xF6, 0xF0, 0xA8, 0x9C, 0xAE, 0xF6, 0xE9, 0x84, + 0x9B, 0xF6, 0xE9, 0x88, 0xB8, 0xF6, 0xE9, 0x8B, + 0x97, 0xF6, 0xE9, 0x8B, 0x98, 0xF6, 0xE9, 0x89, + 0xBC, 0xF6, 0xE9, 0x8F, 0xB9, 0xF6, 0xE9, 0x90, + 0x95, 0xF6, 0xF0, 0xA8, 0xAF, 0xBA, 0xF6, 0xE9, + 0x96, 0x8B, 0xF6, 0xE4, 0xA6, 0x95, 0xF6, 0xE9, + 0x96, 0xB7, 0xF6, 0xF0, 0xA8, 0xB5, 0xB7, 0xF6, + 0xE4, 0xA7, 0xA6, 0xF6, 0xE9, 0x9B, 0x83, 0xF6, + 0xE5, 0xB6, 0xB2, 0xF6, 0xE9, 0x9C, 0xA3, 0xF6, + 0xF0, 0xA9, 0x85, 0x85, 0xF6, 0xF0, 0xA9, 0x88, + 0x9A, 0xF6, 0xE4, 0xA9, 0xAE, 0xF6, 0xE4, 0xA9, + 0xB6, 0xF6, 0xE9, 0x9F, 0xA0, 0xF6, 0xF0, 0xA9, + 0x90, 0x8A, 0xF6, 0xE4, 0xAA, 0xB2, 0xF6, 0xF0, + 0xA9, 0x92, 0x96, 0xF6, 0xE9, 0xA0, 0x8B, 0xF6, + 0xE9, 0xA0, 0x8B, 0xF6, 0xE9, 0xA0, 0xA9, 0xF6, + 0xF0, 0xA9, 0x96, 0xB6, 0xF6, 0xE9, 0xA3, 0xA2, + 0xF6, 0xE4, 0xAC, 0xB3, 0xF6, 0xE9, 0xA4, 0xA9, + 0xF6, 0xE9, 0xA6, 0xA7, 0xF6, 0xE9, 0xA7, 0x82, + 0xF6, 0xE9, 0xA7, 0xBE, 0xF6, 0xE4, 0xAF, 0x8E, + 0xF6, 0xF0, 0xA9, 0xAC, 0xB0, 0xF6, 0xE9, 0xAC, + 0x92, 0xF6, 0xE9, 0xB1, 0x80, 0xF6, 0xE9, 0xB3, + 0xBD, 0xF6, 0xE4, 0xB3, 0x8E, 0xF6, 0xE4, 0xB3, + 0xAD, 0xF6, 0xE9, 0xB5, 0xA7, 0xF6, 0xF0, 0xAA, + 0x83, 0x8E, 0xF6, 0xE4, 0xB3, 0xB8, 0xF6, 0xF0, + 0xAA, 0x84, 0x85, 0xF6, 0xF0, 0xAA, 0x88, 0x8E, + 0xF6, 0xF0, 0xAA, 0x8A, 0x91, 0xF6, 0xE9, 0xBA, + 0xBB, 0xF6, 0xE4, 0xB5, 0x96, 0xF6, 0xE9, 0xBB, + 0xB9, 0xF6, 0xE9, 0xBB, 0xBE, 0xF6, 0xE9, 0xBC, + 0x85, 0xF6, 0xE9, 0xBC, 0x8F, 0xF6, 0xE9, 0xBC, + 0x96, 0xF6, 0xE9, 0xBC, 0xBB, 0xF6, 0xF0, 0xAA, + 0x98, 0x80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, + }, + { + 0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84, + 0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20, + 0xCC, 0xA7, 0x31, 0x6F, 0x31, 0xE2, 0x81, 0x84, + 0x34, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x33, 0xE2, + 0x81, 0x84, 0x34, 0xF6, 0x41, 0xCC, 0x80, 0xF6, + 0x41, 0xCC, 0x81, 0xF6, 0x41, 0xCC, 0x82, 0xF6, + 0x41, 0xCC, 0x83, 0xF6, 0x41, 0xCC, 0x88, 0xF6, + 0x41, 0xCC, 0x8A, 0xF6, 0x43, 0xCC, 0xA7, 0xF6, + 0x45, 0xCC, 0x80, 0xF6, 0x45, 0xCC, 0x81, 0xF6, + 0x45, 0xCC, 0x82, 0xF6, 0x45, 0xCC, 0x88, 0xF6, + 0x49, 0xCC, 0x80, 0xF6, 0x49, 0xCC, 0x81, 0xF6, + 0x49, 0xCC, 0x82, 0xF6, 0x49, 0xCC, 0x88, 0xF6, + 0x4E, 0xCC, 0x83, 0xF6, 0x4F, 0xCC, 0x80, 0xF6, + 0x4F, 0xCC, 0x81, 0xF6, 0x4F, 0xCC, 0x82, 0xF6, + 0x4F, 0xCC, 0x83, 0xF6, 0x4F, 0xCC, 0x88, 0xF6, + 0x55, 0xCC, 0x80, 0xF6, 0x55, 0xCC, 0x81, 0xF6, + 0x55, 0xCC, 0x82, 0xF6, 0x55, 0xCC, 0x88, 0xF6, + 0x59, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x80, 0xF6, + 0x61, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x82, 0xF6, + 0x61, 0xCC, 0x83, 0xF6, 0x61, 0xCC, 0x88, 0xF6, + 0x61, 0xCC, 0x8A, 0xF6, 0x63, 0xCC, 0xA7, 0xF6, + 0x65, 0xCC, 0x80, 0xF6, 0x65, 0xCC, 0x81, 0xF6, + 0x65, 0xCC, 0x82, 0xF6, 0x65, 0xCC, 0x88, 0xF6, + 0x69, 0xCC, 0x80, 0xF6, 0x69, 0xCC, 0x81, 0xF6, + 0x69, 0xCC, 0x82, 0xF6, 0x69, 0xCC, 0x88, 0xF6, + 0x6E, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x80, 0xF6, + 0x6F, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x82, 0xF6, + 0x6F, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x88, 0xF6, + 0x75, 0xCC, 0x80, 0xF6, 0x75, 0xCC, 0x81, 0xF6, + 0x75, 0xCC, 0x82, 0xF6, 0x75, 0xCC, 0x88, 0xF6, + 0x79, 0xCC, 0x81, 0xF6, 0x79, 0xCC, 0x88, 0xF6, + 0x41, 0xCC, 0x84, 0xF6, 0x61, 0xCC, 0x84, 0xF6, + 0x41, 0xCC, 0x86, 0xF6, 0x61, 0xCC, 0x86, 0xF6, + 0x41, 0xCC, 0xA8, 0xF6, 0x61, 0xCC, 0xA8, 0xF6, + 0x43, 0xCC, 0x81, 0xF6, 0x63, 0xCC, 0x81, 0xF6, + 0x43, 0xCC, 0x82, 0xF6, 0x63, 0xCC, 0x82, 0xF6, + 0x43, 0xCC, 0x87, 0xF6, 0x63, 0xCC, 0x87, 0xF6, + 0x43, 0xCC, 0x8C, 0xF6, 0x63, 0xCC, 0x8C, 0xF6, + 0x44, 0xCC, 0x8C, 0xF6, 0x64, 0xCC, 0x8C, 0xF6, + 0x45, 0xCC, 0x84, 0xF6, 0x65, 0xCC, 0x84, 0xF6, + 0x45, 0xCC, 0x86, 0xF6, 0x65, 0xCC, 0x86, 0xF6, + 0x45, 0xCC, 0x87, 0xF6, 0x65, 0xCC, 0x87, 0xF6, + 0x45, 0xCC, 0xA8, 0xF6, 0x65, 0xCC, 0xA8, 0xF6, + 0x45, 0xCC, 0x8C, 0xF6, 0x65, 0xCC, 0x8C, 0xF6, + 0x47, 0xCC, 0x82, 0xF6, 0x67, 0xCC, 0x82, 0xF6, + 0x47, 0xCC, 0x86, 0xF6, 0x67, 0xCC, 0x86, 0xF6, + 0x47, 0xCC, 0x87, 0xF6, 0x67, 0xCC, 0x87, 0xF6, + 0x47, 0xCC, 0xA7, 0xF6, 0x67, 0xCC, 0xA7, 0xF6, + 0x48, 0xCC, 0x82, 0xF6, 0x68, 0xCC, 0x82, 0xF6, + 0x49, 0xCC, 0x83, 0xF6, 0x69, 0xCC, 0x83, 0xF6, + 0x49, 0xCC, 0x84, 0xF6, 0x69, 0xCC, 0x84, 0xF6, + 0x49, 0xCC, 0x86, 0xF6, 0x69, 0xCC, 0x86, 0xF6, + 0x49, 0xCC, 0xA8, 0xF6, 0x69, 0xCC, 0xA8, 0xF6, + 0x49, 0xCC, 0x87, 0x49, 0x4A, 0x69, 0x6A, 0xF6, + 0x4A, 0xCC, 0x82, 0xF6, 0x6A, 0xCC, 0x82, 0xF6, + 0x4B, 0xCC, 0xA7, 0xF6, 0x6B, 0xCC, 0xA7, 0xF6, + 0x4C, 0xCC, 0x81, 0xF6, 0x6C, 0xCC, 0x81, 0xF6, + 0x4C, 0xCC, 0xA7, 0xF6, 0x6C, 0xCC, 0xA7, 0xF6, + 0x4C, 0xCC, 0x8C, 0xF6, 0x6C, 0xCC, 0x8C, 0x4C, + 0xC2, 0xB7, 0x6C, 0xC2, 0xB7, 0xF6, 0x4E, 0xCC, + 0x81, 0xF6, 0x6E, 0xCC, 0x81, 0xF6, 0x4E, 0xCC, + 0xA7, 0xF6, 0x6E, 0xCC, 0xA7, 0xF6, 0x4E, 0xCC, + 0x8C, 0xF6, 0x6E, 0xCC, 0x8C, 0xCA, 0xBC, 0x6E, + 0xF6, 0x4F, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, 0x84, + 0xF6, 0x4F, 0xCC, 0x86, 0xF6, 0x6F, 0xCC, 0x86, + 0xF6, 0x4F, 0xCC, 0x8B, 0xF6, 0x6F, 0xCC, 0x8B, + 0xF6, 0x52, 0xCC, 0x81, 0xF6, 0x72, 0xCC, 0x81, + 0xF6, 0x52, 0xCC, 0xA7, 0xF6, 0x72, 0xCC, 0xA7, + 0xF6, 0x52, 0xCC, 0x8C, 0xF6, 0x72, 0xCC, 0x8C, + 0xF6, 0x53, 0xCC, 0x81, 0xF6, 0x73, 0xCC, 0x81, + 0xF6, 0x53, 0xCC, 0x82, 0xF6, 0x73, 0xCC, 0x82, + 0xF6, 0x53, 0xCC, 0xA7, 0xF6, 0x73, 0xCC, 0xA7, + 0xF6, 0x53, 0xCC, 0x8C, 0xF6, 0x73, 0xCC, 0x8C, + 0xF6, 0x54, 0xCC, 0xA7, 0xF6, 0x74, 0xCC, 0xA7, + 0xF6, 0x54, 0xCC, 0x8C, 0xF6, 0x74, 0xCC, 0x8C, + 0xF6, 0x55, 0xCC, 0x83, 0xF6, 0x75, 0xCC, 0x83, + 0xF6, 0x55, 0xCC, 0x84, 0xF6, 0x75, 0xCC, 0x84, + 0xF6, 0x55, 0xCC, 0x86, 0xF6, 0x75, 0xCC, 0x86, + 0xF6, 0x55, 0xCC, 0x8A, 0xF6, 0x75, 0xCC, 0x8A, + 0xF6, 0x55, 0xCC, 0x8B, 0xF6, 0x75, 0xCC, 0x8B, + 0xF6, 0x55, 0xCC, 0xA8, 0xF6, 0x75, 0xCC, 0xA8, + 0xF6, 0x57, 0xCC, 0x82, 0xF6, 0x77, 0xCC, 0x82, + 0xF6, 0x59, 0xCC, 0x82, 0xF6, 0x79, 0xCC, 0x82, + 0xF6, 0x59, 0xCC, 0x88, 0xF6, 0x5A, 0xCC, 0x81, + 0xF6, 0x7A, 0xCC, 0x81, 0xF6, 0x5A, 0xCC, 0x87, + 0xF6, 0x7A, 0xCC, 0x87, 0xF6, 0x5A, 0xCC, 0x8C, + 0xF6, 0x7A, 0xCC, 0x8C, 0x73, 0xF6, 0x4F, 0xCC, + 0x9B, 0xF6, 0x6F, 0xCC, 0x9B, 0xF6, 0x55, 0xCC, + 0x9B, 0xF6, 0x75, 0xCC, 0x9B, 0x44, 0x5A, 0xCC, + 0x8C, 0x44, 0x7A, 0xCC, 0x8C, 0x64, 0x7A, 0xCC, + 0x8C, 0x4C, 0x4A, 0x4C, 0x6A, 0x6C, 0x6A, 0x4E, + 0x4A, 0x4E, 0x6A, 0x6E, 0x6A, 0xF6, 0x41, 0xCC, + 0x8C, 0xF6, 0x61, 0xCC, 0x8C, 0xF6, 0x49, 0xCC, + 0x8C, 0xF6, 0x69, 0xCC, 0x8C, 0xF6, 0x4F, 0xCC, + 0x8C, 0xF6, 0x6F, 0xCC, 0x8C, 0xF6, 0x55, 0xCC, + 0x8C, 0xF6, 0x75, 0xCC, 0x8C, 0xF6, 0x55, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x75, 0xCC, 0x88, 0xCC, + 0x84, 0xF6, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0x55, 0xCC, + 0x88, 0xCC, 0x8C, 0xF6, 0x75, 0xCC, 0x88, 0xCC, + 0x8C, 0xF6, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xF6, + 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xF6, 0x41, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x61, 0xCC, 0x88, 0xCC, + 0x84, 0xF6, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xF6, + 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xF6, 0xC3, 0x86, + 0xCC, 0x84, 0xF6, 0xC3, 0xA6, 0xCC, 0x84, 0xF6, + 0x47, 0xCC, 0x8C, 0xF6, 0x67, 0xCC, 0x8C, 0xF6, + 0x4B, 0xCC, 0x8C, 0xF6, 0x6B, 0xCC, 0x8C, 0xF6, + 0x4F, 0xCC, 0xA8, 0xF6, 0x6F, 0xCC, 0xA8, 0xF6, + 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0xA8, 0xCC, 0x84, 0xF6, 0xC6, 0xB7, 0xCC, 0x8C, + 0xF6, 0xCA, 0x92, 0xCC, 0x8C, 0xF6, 0x6A, 0xCC, + 0x8C, 0x44, 0x5A, 0x44, 0x7A, 0x64, 0x7A, 0xF6, + 0x47, 0xCC, 0x81, 0xF6, 0x67, 0xCC, 0x81, 0xF6, + 0x4E, 0xCC, 0x80, 0xF6, 0x6E, 0xCC, 0x80, 0xF6, + 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xF6, 0x61, 0xCC, + 0x8A, 0xCC, 0x81, 0xF6, 0xC3, 0x86, 0xCC, 0x81, + 0xF6, 0xC3, 0xA6, 0xCC, 0x81, 0xF6, 0xC3, 0x98, + 0xCC, 0x81, 0xF6, 0xC3, 0xB8, 0xCC, 0x81, 0xF6, + 0x41, 0xCC, 0x8F, 0xF6, 0x61, 0xCC, 0x8F, 0xF6, + 0x41, 0xCC, 0x91, 0xF6, 0x61, 0xCC, 0x91, 0xF6, + 0x45, 0xCC, 0x8F, 0xF6, 0x65, 0xCC, 0x8F, 0xF6, + 0x45, 0xCC, 0x91, 0xF6, 0x65, 0xCC, 0x91, 0xF6, + 0x49, 0xCC, 0x8F, 0xF6, 0x69, 0xCC, 0x8F, 0xF6, + 0x49, 0xCC, 0x91, 0xF6, 0x69, 0xCC, 0x91, 0xF6, + 0x4F, 0xCC, 0x8F, 0xF6, 0x6F, 0xCC, 0x8F, 0xF6, + 0x4F, 0xCC, 0x91, 0xF6, 0x6F, 0xCC, 0x91, 0xF6, + 0x52, 0xCC, 0x8F, 0xF6, 0x72, 0xCC, 0x8F, 0xF6, + 0x52, 0xCC, 0x91, 0xF6, 0x72, 0xCC, 0x91, 0xF6, + 0x55, 0xCC, 0x8F, 0xF6, 0x75, 0xCC, 0x8F, 0xF6, + 0x55, 0xCC, 0x91, 0xF6, 0x75, 0xCC, 0x91, 0xF6, + 0x53, 0xCC, 0xA6, 0xF6, 0x73, 0xCC, 0xA6, 0xF6, + 0x54, 0xCC, 0xA6, 0xF6, 0x74, 0xCC, 0xA6, 0xF6, + 0x48, 0xCC, 0x8C, 0xF6, 0x68, 0xCC, 0x8C, 0xF6, + 0x41, 0xCC, 0x87, 0xF6, 0x61, 0xCC, 0x87, 0xF6, + 0x45, 0xCC, 0xA7, 0xF6, 0x65, 0xCC, 0xA7, 0xF6, + 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0x88, 0xCC, 0x84, 0xF6, 0x4F, 0xCC, 0x83, 0xCC, + 0x84, 0xF6, 0x6F, 0xCC, 0x83, 0xCC, 0x84, 0xF6, + 0x4F, 0xCC, 0x87, 0xF6, 0x6F, 0xCC, 0x87, 0xF6, + 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xF6, 0x6F, 0xCC, + 0x87, 0xCC, 0x84, 0xF6, 0x59, 0xCC, 0x84, 0xF6, + 0x79, 0xCC, 0x84, 0x68, 0xC9, 0xA6, 0x6A, 0x72, + 0xC9, 0xB9, 0xC9, 0xBB, 0xCA, 0x81, 0x77, 0x79, + 0x20, 0xCC, 0x86, 0x20, 0xCC, 0x87, 0x20, 0xCC, + 0x8A, 0x20, 0xCC, 0xA8, 0x20, 0xCC, 0x83, 0x20, + 0xCC, 0x8B, 0xC9, 0xA3, 0x6C, 0x73, 0x78, 0xCA, + 0x95, 0xF6, 0xCC, 0x80, 0xF6, 0xCC, 0x81, 0xF6, + 0xCC, 0x93, 0xF6, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0xCA, 0xB9, 0x20, 0xCD, 0x85, 0xF6, 0x3B, 0x20, + 0xCC, 0x81, 0xF5, 0x05, 0xC2, 0xA8, 0xCC, 0x81, + 0x20, 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0xCE, 0x91, + 0xCC, 0x81, 0xF6, 0xC2, 0xB7, 0xF6, 0xCE, 0x95, + 0xCC, 0x81, 0xF6, 0xCE, 0x97, 0xCC, 0x81, 0xF6, + 0xCE, 0x99, 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, + 0x81, 0xF6, 0xCE, 0xA5, 0xCC, 0x81, 0xF6, 0xCE, + 0xA9, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, 0x88, + 0xCC, 0x81, 0xF6, 0xCE, 0x99, 0xCC, 0x88, 0xF6, + 0xCE, 0xA5, 0xCC, 0x88, 0xF6, 0xCE, 0xB1, 0xCC, + 0x81, 0xF6, 0xCE, 0xB5, 0xCC, 0x81, 0xF6, 0xCE, + 0xB7, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, 0x81, + 0xF6, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0xCE, 0xB9, 0xCC, 0x88, 0xF6, 0xCF, 0x85, 0xCC, + 0x88, 0xF6, 0xCE, 0xBF, 0xCC, 0x81, 0xF6, 0xCF, + 0x85, 0xCC, 0x81, 0xF6, 0xCF, 0x89, 0xCC, 0x81, + 0xCE, 0xB2, 0xCE, 0xB8, 0xCE, 0xA5, 0xF5, 0x05, + 0xCF, 0x92, 0xCC, 0x81, 0xCE, 0xA5, 0xCC, 0x81, + 0xF5, 0x05, 0xCF, 0x92, 0xCC, 0x88, 0xCE, 0xA5, + 0xCC, 0x88, 0xCF, 0x86, 0xCF, 0x80, 0xCE, 0xBA, + 0xCF, 0x81, 0xCF, 0x82, 0xCE, 0x98, 0xCE, 0xB5, + 0xCE, 0xA3, 0xF6, 0xD0, 0x95, 0xCC, 0x80, 0xF6, + 0xD0, 0x95, 0xCC, 0x88, 0xF6, 0xD0, 0x93, 0xCC, + 0x81, 0xF6, 0xD0, 0x86, 0xCC, 0x88, 0xF6, 0xD0, + 0x9A, 0xCC, 0x81, 0xF6, 0xD0, 0x98, 0xCC, 0x80, + 0xF6, 0xD0, 0xA3, 0xCC, 0x86, 0xF6, 0xD0, 0x98, + 0xCC, 0x86, 0xF6, 0xD0, 0xB8, 0xCC, 0x86, 0xF6, + 0xD0, 0xB5, 0xCC, 0x80, 0xF6, 0xD0, 0xB5, 0xCC, + 0x88, 0xF6, 0xD0, 0xB3, 0xCC, 0x81, 0xF6, 0xD1, + 0x96, 0xCC, 0x88, 0xF6, 0xD0, 0xBA, 0xCC, 0x81, + 0xF6, 0xD0, 0xB8, 0xCC, 0x80, 0xF6, 0xD1, 0x83, + 0xCC, 0x86, 0xF6, 0xD1, 0xB4, 0xCC, 0x8F, 0xF6, + 0xD1, 0xB5, 0xCC, 0x8F, 0xF6, 0xD0, 0x96, 0xCC, + 0x86, 0xF6, 0xD0, 0xB6, 0xCC, 0x86, 0xF6, 0xD0, + 0x90, 0xCC, 0x86, 0xF6, 0xD0, 0xB0, 0xCC, 0x86, + 0xF6, 0xD0, 0x90, 0xCC, 0x88, 0xF6, 0xD0, 0xB0, + 0xCC, 0x88, 0xF6, 0xD0, 0x95, 0xCC, 0x86, 0xF6, + 0xD0, 0xB5, 0xCC, 0x86, 0xF6, 0xD3, 0x98, 0xCC, + 0x88, 0xF6, 0xD3, 0x99, 0xCC, 0x88, 0xF6, 0xD0, + 0x96, 0xCC, 0x88, 0xF6, 0xD0, 0xB6, 0xCC, 0x88, + 0xF6, 0xD0, 0x97, 0xCC, 0x88, 0xF6, 0xD0, 0xB7, + 0xCC, 0x88, 0xF6, 0xD0, 0x98, 0xCC, 0x84, 0xF6, + 0xD0, 0xB8, 0xCC, 0x84, 0xF6, 0xD0, 0x98, 0xCC, + 0x88, 0xF6, 0xD0, 0xB8, 0xCC, 0x88, 0xF6, 0xD0, + 0x9E, 0xCC, 0x88, 0xF6, 0xD0, 0xBE, 0xCC, 0x88, + 0xF6, 0xD3, 0xA8, 0xCC, 0x88, 0xF6, 0xD3, 0xA9, + 0xCC, 0x88, 0xF6, 0xD0, 0xAD, 0xCC, 0x88, 0xF6, + 0xD1, 0x8D, 0xCC, 0x88, 0xF6, 0xD0, 0xA3, 0xCC, + 0x84, 0xF6, 0xD1, 0x83, 0xCC, 0x84, 0xF6, 0xD0, + 0xA3, 0xCC, 0x88, 0xF6, 0xD1, 0x83, 0xCC, 0x88, + 0xF6, 0xD0, 0xA3, 0xCC, 0x8B, 0xF6, 0xD1, 0x83, + 0xCC, 0x8B, 0xF6, 0xD0, 0xA7, 0xCC, 0x88, 0xF6, + 0xD1, 0x87, 0xCC, 0x88, 0xF6, 0xD0, 0xAB, 0xCC, + 0x88, 0xF6, 0xD1, 0x8B, 0xCC, 0x88, 0xD5, 0xA5, + 0xD6, 0x82, 0xF6, 0xD8, 0xA7, 0xD9, 0x93, 0xF6, + 0xD8, 0xA7, 0xD9, 0x94, 0xF6, 0xD9, 0x88, 0xD9, + 0x94, 0xF6, 0xD8, 0xA7, 0xD9, 0x95, 0xF6, 0xD9, + 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0xB4, 0xD9, + 0x88, 0xD9, 0xB4, 0xDB, 0x87, 0xD9, 0xB4, 0xD9, + 0x8A, 0xD9, 0xB4, 0xF6, 0xDB, 0x95, 0xD9, 0x94, + 0xF6, 0xDB, 0x81, 0xD9, 0x94, 0xF6, 0xDB, 0x92, + 0xD9, 0x94, 0xF6, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, + 0xBC, 0xF6, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, + 0xF6, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0xF6, + 0xE0, 0xA4, 0x95, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, + 0xA4, 0x96, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, + 0x97, 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0x9C, + 0xE0, 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0xA1, 0xE0, + 0xA4, 0xBC, 0xF6, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, + 0xBC, 0xF6, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, + 0xF6, 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0xF6, + 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0xF6, 0xE0, + 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0xF6, 0xE0, 0xA6, + 0xA1, 0xE0, 0xA6, 0xBC, 0xF6, 0xE0, 0xA6, 0xA2, + 0xE0, 0xA6, 0xBC, 0xF6, 0xE0, 0xA6, 0xAF, 0xE0, + 0xA6, 0xBC, 0xF6, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, + 0xBC, 0xF6, 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, + 0xF6, 0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0xF6, + 0xE0, 0xA8, 0x97, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, + 0xA8, 0x9C, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, 0xA8, + 0xAB, 0xE0, 0xA8, 0xBC, 0xF6, 0xE0, 0xAD, 0x87, + 0xE0, 0xAD, 0x96, 0xF6, 0xE0, 0xAD, 0x87, 0xE0, + 0xAC, 0xBE, 0xF6, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, + 0x97, 0xF6, 0xE0, 0xAC, 0xA1, 0xE0, 0xAC, 0xBC, + 0xF6, 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0xF6, + 0xE0, 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0xF6, 0xE0, + 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0xF6, 0xE0, 0xAF, + 0x87, 0xE0, 0xAE, 0xBE, 0xF6, 0xE0, 0xAF, 0x86, + 0xE0, 0xAF, 0x97, 0xF6, 0xE0, 0xB1, 0x86, 0xE0, + 0xB1, 0x96, 0xF6, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, + 0x95, 0xF6, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, + 0xF6, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0xF6, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xF6, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3, 0x95, + 0xF6, 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0xF6, + 0xE0, 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0xF6, 0xE0, + 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0xF6, 0xE0, 0xB7, + 0x99, 0xE0, 0xB7, 0x8A, 0xF6, 0xE0, 0xB7, 0x99, + 0xE0, 0xB7, 0x8F, 0xF6, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0xF6, 0xE0, 0xB7, + 0x99, 0xE0, 0xB7, 0x9F, 0xE0, 0xB9, 0x8D, 0xE0, + 0xB8, 0xB2, 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, + 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0xE0, 0xBA, + 0xAB, 0xE0, 0xBA, 0xA1, 0xE0, 0xBC, 0x8B, 0xF6, + 0xE0, 0xBD, 0x82, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, + 0xBD, 0x8C, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, + 0x91, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x96, + 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x9B, 0xE0, + 0xBE, 0xB7, 0xF6, 0xE0, 0xBD, 0x80, 0xE0, 0xBE, + 0xB5, 0xF6, 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, + 0xF6, 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xF6, + 0xE0, 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0xE0, 0xBE, + 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xF6, + 0xE0, 0xBE, 0xB3, 0xE0, 0xBE, 0x80, 0xE0, 0xBE, + 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xF6, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xF6, 0xE0, + 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, + 0x9C, 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, 0xA1, + 0xE0, 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, 0xA6, 0xE0, + 0xBE, 0xB7, 0xF6, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, + 0xB7, 0xF6, 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, + 0xF6, 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0xE1, + 0x83, 0x9C, 0xF6, 0xE1, 0xAC, 0x85, 0xE1, 0xAC, + 0xB5, 0xF6, 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, + 0xF6, 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0xF6, + 0xE1, 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0xF6, 0xE1, + 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0xF6, 0xE1, 0xAC, + 0x91, 0xE1, 0xAC, 0xB5, 0xF6, 0xE1, 0xAC, 0xBA, + 0xE1, 0xAC, 0xB5, 0xF6, 0xE1, 0xAC, 0xBC, 0xE1, + 0xAC, 0xB5, 0xF6, 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, + 0xB5, 0xF6, 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, + 0xF6, 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x41, + 0xC3, 0x86, 0x42, 0x44, 0x45, 0xC6, 0x8E, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0xC8, 0xA2, 0x50, 0x52, 0x54, 0x55, 0x57, 0x61, + 0xC9, 0x90, 0xC9, 0x91, 0xE1, 0xB4, 0x82, 0x62, + 0x64, 0x65, 0xC9, 0x99, 0xC9, 0x9B, 0xC9, 0x9C, + 0x67, 0x6B, 0x6D, 0xC5, 0x8B, 0x6F, 0xC9, 0x94, + 0xE1, 0xB4, 0x96, 0xE1, 0xB4, 0x97, 0x70, 0x74, + 0x75, 0xE1, 0xB4, 0x9D, 0xC9, 0xAF, 0x76, 0xE1, + 0xB4, 0xA5, 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, + 0xCF, 0x86, 0xCF, 0x87, 0x69, 0x72, 0x75, 0x76, + 0xCE, 0xB2, 0xCE, 0xB3, 0xCF, 0x81, 0xCF, 0x86, + 0xCF, 0x87, 0xD0, 0xBD, 0xC9, 0x92, 0x63, 0xC9, + 0x95, 0xC3, 0xB0, 0xC9, 0x9C, 0x66, 0xC9, 0x9F, + 0xC9, 0xA1, 0xC9, 0xA5, 0xC9, 0xA8, 0xC9, 0xA9, + 0xC9, 0xAA, 0xE1, 0xB5, 0xBB, 0xCA, 0x9D, 0xC9, + 0xAD, 0xE1, 0xB6, 0x85, 0xCA, 0x9F, 0xC9, 0xB1, + 0xC9, 0xB0, 0xC9, 0xB2, 0xC9, 0xB3, 0xC9, 0xB4, + 0xC9, 0xB5, 0xC9, 0xB8, 0xCA, 0x82, 0xCA, 0x83, + 0xC6, 0xAB, 0xCA, 0x89, 0xCA, 0x8A, 0xE1, 0xB4, + 0x9C, 0xCA, 0x8B, 0xCA, 0x8C, 0x7A, 0xCA, 0x90, + 0xCA, 0x91, 0xCA, 0x92, 0xCE, 0xB8, 0xF6, 0x41, + 0xCC, 0xA5, 0xF6, 0x61, 0xCC, 0xA5, 0xF6, 0x42, + 0xCC, 0x87, 0xF6, 0x62, 0xCC, 0x87, 0xF6, 0x42, + 0xCC, 0xA3, 0xF6, 0x62, 0xCC, 0xA3, 0xF6, 0x42, + 0xCC, 0xB1, 0xF6, 0x62, 0xCC, 0xB1, 0xF6, 0x43, + 0xCC, 0xA7, 0xCC, 0x81, 0xF6, 0x63, 0xCC, 0xA7, + 0xCC, 0x81, 0xF6, 0x44, 0xCC, 0x87, 0xF6, 0x64, + 0xCC, 0x87, 0xF6, 0x44, 0xCC, 0xA3, 0xF6, 0x64, + 0xCC, 0xA3, 0xF6, 0x44, 0xCC, 0xB1, 0xF6, 0x64, + 0xCC, 0xB1, 0xF6, 0x44, 0xCC, 0xA7, 0xF6, 0x64, + 0xCC, 0xA7, 0xF6, 0x44, 0xCC, 0xAD, 0xF6, 0x64, + 0xCC, 0xAD, 0xF6, 0x45, 0xCC, 0x84, 0xCC, 0x80, + 0xF6, 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xF6, 0x45, + 0xCC, 0x84, 0xCC, 0x81, 0xF6, 0x65, 0xCC, 0x84, + 0xCC, 0x81, 0xF6, 0x45, 0xCC, 0xAD, 0xF6, 0x65, + 0xCC, 0xAD, 0xF6, 0x45, 0xCC, 0xB0, 0xF6, 0x65, + 0xCC, 0xB0, 0xF6, 0x45, 0xCC, 0xA7, 0xCC, 0x86, + 0xF6, 0x65, 0xCC, 0xA7, 0xCC, 0x86, 0xF6, 0x46, + 0xCC, 0x87, 0xF6, 0x66, 0xCC, 0x87, 0xF6, 0x47, + 0xCC, 0x84, 0xF6, 0x67, 0xCC, 0x84, 0xF6, 0x48, + 0xCC, 0x87, 0xF6, 0x68, 0xCC, 0x87, 0xF6, 0x48, + 0xCC, 0xA3, 0xF6, 0x68, 0xCC, 0xA3, 0xF6, 0x48, + 0xCC, 0x88, 0xF6, 0x68, 0xCC, 0x88, 0xF6, 0x48, + 0xCC, 0xA7, 0xF6, 0x68, 0xCC, 0xA7, 0xF6, 0x48, + 0xCC, 0xAE, 0xF6, 0x68, 0xCC, 0xAE, 0xF6, 0x49, + 0xCC, 0xB0, 0xF6, 0x69, 0xCC, 0xB0, 0xF6, 0x49, + 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0x69, 0xCC, 0x88, + 0xCC, 0x81, 0xF6, 0x4B, 0xCC, 0x81, 0xF6, 0x6B, + 0xCC, 0x81, 0xF6, 0x4B, 0xCC, 0xA3, 0xF6, 0x6B, + 0xCC, 0xA3, 0xF6, 0x4B, 0xCC, 0xB1, 0xF6, 0x6B, + 0xCC, 0xB1, 0xF6, 0x4C, 0xCC, 0xA3, 0xF6, 0x6C, + 0xCC, 0xA3, 0xF6, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, + 0xF6, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xF6, 0x4C, + 0xCC, 0xB1, 0xF6, 0x6C, 0xCC, 0xB1, 0xF6, 0x4C, + 0xCC, 0xAD, 0xF6, 0x6C, 0xCC, 0xAD, 0xF6, 0x4D, + 0xCC, 0x81, 0xF6, 0x6D, 0xCC, 0x81, 0xF6, 0x4D, + 0xCC, 0x87, 0xF6, 0x6D, 0xCC, 0x87, 0xF6, 0x4D, + 0xCC, 0xA3, 0xF6, 0x6D, 0xCC, 0xA3, 0xF6, 0x4E, + 0xCC, 0x87, 0xF6, 0x6E, 0xCC, 0x87, 0xF6, 0x4E, + 0xCC, 0xA3, 0xF6, 0x6E, 0xCC, 0xA3, 0xF6, 0x4E, + 0xCC, 0xB1, 0xF6, 0x6E, 0xCC, 0xB1, 0xF6, 0x4E, + 0xCC, 0xAD, 0xF6, 0x6E, 0xCC, 0xAD, 0xF6, 0x4F, + 0xCC, 0x83, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x83, + 0xCC, 0x81, 0xF6, 0x4F, 0xCC, 0x83, 0xCC, 0x88, + 0xF6, 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xF6, 0x4F, + 0xCC, 0x84, 0xCC, 0x80, 0xF6, 0x6F, 0xCC, 0x84, + 0xCC, 0x80, 0xF6, 0x4F, 0xCC, 0x84, 0xCC, 0x81, + 0xF6, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xF6, 0x50, + 0xCC, 0x81, 0xF6, 0x70, 0xCC, 0x81, 0xF6, 0x50, + 0xCC, 0x87, 0xF6, 0x70, 0xCC, 0x87, 0xF6, 0x52, + 0xCC, 0x87, 0xF6, 0x72, 0xCC, 0x87, 0xF6, 0x52, + 0xCC, 0xA3, 0xF6, 0x72, 0xCC, 0xA3, 0xF6, 0x52, + 0xCC, 0xA3, 0xCC, 0x84, 0xF6, 0x72, 0xCC, 0xA3, + 0xCC, 0x84, 0xF6, 0x52, 0xCC, 0xB1, 0xF6, 0x72, + 0xCC, 0xB1, 0xF6, 0x53, 0xCC, 0x87, 0xF6, 0x73, + 0xCC, 0x87, 0xF6, 0x53, 0xCC, 0xA3, 0xF6, 0x73, + 0xCC, 0xA3, 0xF6, 0x53, 0xCC, 0x81, 0xCC, 0x87, + 0xF6, 0x73, 0xCC, 0x81, 0xCC, 0x87, 0xF6, 0x53, + 0xCC, 0x8C, 0xCC, 0x87, 0xF6, 0x73, 0xCC, 0x8C, + 0xCC, 0x87, 0xF6, 0x53, 0xCC, 0xA3, 0xCC, 0x87, + 0xF6, 0x73, 0xCC, 0xA3, 0xCC, 0x87, 0xF6, 0x54, + 0xCC, 0x87, 0xF6, 0x74, 0xCC, 0x87, 0xF6, 0x54, + 0xCC, 0xA3, 0xF6, 0x74, 0xCC, 0xA3, 0xF6, 0x54, + 0xCC, 0xB1, 0xF6, 0x74, 0xCC, 0xB1, 0xF6, 0x54, + 0xCC, 0xAD, 0xF6, 0x74, 0xCC, 0xAD, 0xF6, 0x55, + 0xCC, 0xA4, 0xF6, 0x75, 0xCC, 0xA4, 0xF6, 0x55, + 0xCC, 0xB0, 0xF6, 0x75, 0xCC, 0xB0, 0xF6, 0x55, + 0xCC, 0xAD, 0xF6, 0x75, 0xCC, 0xAD, 0xF6, 0x55, + 0xCC, 0x83, 0xCC, 0x81, 0xF6, 0x75, 0xCC, 0x83, + 0xCC, 0x81, 0xF6, 0x55, 0xCC, 0x84, 0xCC, 0x88, + 0xF6, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xF6, 0x56, + 0xCC, 0x83, 0xF6, 0x76, 0xCC, 0x83, 0xF6, 0x56, + 0xCC, 0xA3, 0xF6, 0x76, 0xCC, 0xA3, 0xF6, 0x57, + 0xCC, 0x80, 0xF6, 0x77, 0xCC, 0x80, 0xF6, 0x57, + 0xCC, 0x81, 0xF6, 0x77, 0xCC, 0x81, 0xF6, 0x57, + 0xCC, 0x88, 0xF6, 0x77, 0xCC, 0x88, 0xF6, 0x57, + 0xCC, 0x87, 0xF6, 0x77, 0xCC, 0x87, 0xF6, 0x57, + 0xCC, 0xA3, 0xF6, 0x77, 0xCC, 0xA3, 0xF6, 0x58, + 0xCC, 0x87, 0xF6, 0x78, 0xCC, 0x87, 0xF6, 0x58, + 0xCC, 0x88, 0xF6, 0x78, 0xCC, 0x88, 0xF6, 0x59, + 0xCC, 0x87, 0xF6, 0x79, 0xCC, 0x87, 0xF6, 0x5A, + 0xCC, 0x82, 0xF6, 0x7A, 0xCC, 0x82, 0xF6, 0x5A, + 0xCC, 0xA3, 0xF6, 0x7A, 0xCC, 0xA3, 0xF6, 0x5A, + 0xCC, 0xB1, 0xF6, 0x7A, 0xCC, 0xB1, 0xF6, 0x68, + 0xCC, 0xB1, 0xF6, 0x74, 0xCC, 0x88, 0xF6, 0x77, + 0xCC, 0x8A, 0xF6, 0x79, 0xCC, 0x8A, 0x61, 0xCA, + 0xBE, 0xF5, 0x05, 0xC5, 0xBF, 0xCC, 0x87, 0x73, + 0xCC, 0x87, 0xF6, 0x41, 0xCC, 0xA3, 0xF6, 0x61, + 0xCC, 0xA3, 0xF6, 0x41, 0xCC, 0x89, 0xF6, 0x61, + 0xCC, 0x89, 0xF6, 0x41, 0xCC, 0x82, 0xCC, 0x81, + 0xF6, 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xF6, 0x41, + 0xCC, 0x82, 0xCC, 0x80, 0xF6, 0x61, 0xCC, 0x82, + 0xCC, 0x80, 0xF6, 0x41, 0xCC, 0x82, 0xCC, 0x89, + 0xF6, 0x61, 0xCC, 0x82, 0xCC, 0x89, 0xF6, 0x41, + 0xCC, 0x82, 0xCC, 0x83, 0xF6, 0x61, 0xCC, 0x82, + 0xCC, 0x83, 0xF6, 0x41, 0xCC, 0xA3, 0xCC, 0x82, + 0xF6, 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, 0x41, + 0xCC, 0x86, 0xCC, 0x81, 0xF6, 0x61, 0xCC, 0x86, + 0xCC, 0x81, 0xF6, 0x41, 0xCC, 0x86, 0xCC, 0x80, + 0xF6, 0x61, 0xCC, 0x86, 0xCC, 0x80, 0xF6, 0x41, + 0xCC, 0x86, 0xCC, 0x89, 0xF6, 0x61, 0xCC, 0x86, + 0xCC, 0x89, 0xF6, 0x41, 0xCC, 0x86, 0xCC, 0x83, + 0xF6, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xF6, 0x41, + 0xCC, 0xA3, 0xCC, 0x86, 0xF6, 0x61, 0xCC, 0xA3, + 0xCC, 0x86, 0xF6, 0x45, 0xCC, 0xA3, 0xF6, 0x65, + 0xCC, 0xA3, 0xF6, 0x45, 0xCC, 0x89, 0xF6, 0x65, + 0xCC, 0x89, 0xF6, 0x45, 0xCC, 0x83, 0xF6, 0x65, + 0xCC, 0x83, 0xF6, 0x45, 0xCC, 0x82, 0xCC, 0x81, + 0xF6, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xF6, 0x45, + 0xCC, 0x82, 0xCC, 0x80, 0xF6, 0x65, 0xCC, 0x82, + 0xCC, 0x80, 0xF6, 0x45, 0xCC, 0x82, 0xCC, 0x89, + 0xF6, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xF6, 0x45, + 0xCC, 0x82, 0xCC, 0x83, 0xF6, 0x65, 0xCC, 0x82, + 0xCC, 0x83, 0xF6, 0x45, 0xCC, 0xA3, 0xCC, 0x82, + 0xF6, 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xF6, 0x49, + 0xCC, 0x89, 0xF6, 0x69, 0xCC, 0x89, 0xF6, 0x49, + 0xCC, 0xA3, 0xF6, 0x69, 0xCC, 0xA3, 0xF6, 0x4F, + 0xCC, 0xA3, 0xF6, 0x6F, 0xCC, 0xA3, 0xF6, 0x4F, + 0xCC, 0x89, 0xF6, 0x6F, 0xCC, 0x89, 0xF6, 0x4F, + 0xCC, 0x82, 0xCC, 0x81, 0xF6, 0x6F, 0xCC, 0x82, + 0xCC, 0x81, 0xF6, 0x4F, 0xCC, 0x82, 0xCC, 0x80, + 0xF6, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xF6, 0x4F, + 0xCC, 0x82, 0xCC, 0x89, 0xF6, 0x6F, 0xCC, 0x82, + 0xCC, 0x89, 0xF6, 0x4F, 0xCC, 0x82, 0xCC, 0x83, + 0xF6, 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xF6, 0x4F, + 0xCC, 0xA3, 0xCC, 0x82, 0xF6, 0x6F, 0xCC, 0xA3, + 0xCC, 0x82, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, + 0xF6, 0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0xF6, 0x4F, + 0xCC, 0x9B, 0xCC, 0x80, 0xF6, 0x6F, 0xCC, 0x9B, + 0xCC, 0x80, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, + 0xF6, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xF6, 0x4F, + 0xCC, 0x9B, 0xCC, 0x83, 0xF6, 0x6F, 0xCC, 0x9B, + 0xCC, 0x83, 0xF6, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, + 0xF6, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xF6, 0x55, + 0xCC, 0xA3, 0xF6, 0x75, 0xCC, 0xA3, 0xF6, 0x55, + 0xCC, 0x89, 0xF6, 0x75, 0xCC, 0x89, 0xF6, 0x55, + 0xCC, 0x9B, 0xCC, 0x81, 0xF6, 0x75, 0xCC, 0x9B, + 0xCC, 0x81, 0xF6, 0x55, 0xCC, 0x9B, 0xCC, 0x80, + 0xF6, 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xF6, 0x55, + 0xCC, 0x9B, 0xCC, 0x89, 0xF6, 0x75, 0xCC, 0x9B, + 0xCC, 0x89, 0xF6, 0x55, 0xCC, 0x9B, 0xCC, 0x83, + 0xF6, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xF6, 0x55, + 0xCC, 0x9B, 0xCC, 0xA3, 0xF6, 0x75, 0xCC, 0x9B, + 0xCC, 0xA3, 0xF6, 0x59, 0xCC, 0x80, 0xF6, 0x79, + 0xCC, 0x80, 0xF6, 0x59, 0xCC, 0xA3, 0xF6, 0x79, + 0xCC, 0xA3, 0xF6, 0x59, 0xCC, 0x89, 0xF6, 0x79, + 0xCC, 0x89, 0xF6, 0x59, 0xCC, 0x83, 0xF6, 0x79, + 0xCC, 0x83, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xF6, + 0xCE, 0xB1, 0xCC, 0x94, 0xF6, 0xCE, 0xB1, 0xCC, + 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0xB1, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, + 0x81, 0xF6, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xF6, + 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, + 0x91, 0xCC, 0x93, 0xF6, 0xCE, 0x91, 0xCC, 0x94, + 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xF6, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0x91, 0xCC, + 0x93, 0xCD, 0x82, 0xF6, 0xCE, 0x91, 0xCC, 0x94, + 0xCD, 0x82, 0xF6, 0xCE, 0xB5, 0xCC, 0x93, 0xF6, + 0xCE, 0xB5, 0xCC, 0x94, 0xF6, 0xCE, 0xB5, 0xCC, + 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0xB5, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, + 0x81, 0xF6, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCE, 0x95, 0xCC, 0x93, 0xF6, 0xCE, 0x95, + 0xCC, 0x94, 0xF6, 0xCE, 0x95, 0xCC, 0x93, 0xCC, + 0x80, 0xF6, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, + 0xF6, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xF6, + 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, + 0xB7, 0xCC, 0x93, 0xF6, 0xCE, 0xB7, 0xCC, 0x94, + 0xF6, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xF6, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, 0xCC, + 0x93, 0xCD, 0x82, 0xF6, 0xCE, 0xB7, 0xCC, 0x94, + 0xCD, 0x82, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xF6, + 0xCE, 0x97, 0xCC, 0x94, 0xF6, 0xCE, 0x97, 0xCC, + 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0x97, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCC, + 0x81, 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xF6, + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, + 0xB9, 0xCC, 0x93, 0xF6, 0xCE, 0xB9, 0xCC, 0x94, + 0xF6, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xF6, + 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, + 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, + 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCC, + 0x93, 0xCD, 0x82, 0xF6, 0xCE, 0xB9, 0xCC, 0x94, + 0xCD, 0x82, 0xF6, 0xCE, 0x99, 0xCC, 0x93, 0xF6, + 0xCE, 0x99, 0xCC, 0x94, 0xF6, 0xCE, 0x99, 0xCC, + 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0x99, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCE, 0x99, 0xCC, 0x93, 0xCC, + 0x81, 0xF6, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xF6, + 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, + 0xBF, 0xCC, 0x93, 0xF6, 0xCE, 0xBF, 0xCC, 0x94, + 0xF6, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xF6, + 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, + 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xBF, + 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, + 0x93, 0xF6, 0xCE, 0x9F, 0xCC, 0x94, 0xF6, 0xCE, + 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0x9F, + 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0x9F, 0xCC, + 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0x9F, 0xCC, 0x94, + 0xCC, 0x81, 0xF6, 0xCF, 0x85, 0xCC, 0x93, 0xF6, + 0xCF, 0x85, 0xCC, 0x94, 0xF6, 0xCF, 0x85, 0xCC, + 0x93, 0xCC, 0x80, 0xF6, 0xCF, 0x85, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCF, 0x85, 0xCC, 0x93, 0xCC, + 0x81, 0xF6, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, + 0xF6, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xF6, + 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, + 0xA5, 0xCC, 0x94, 0xF6, 0xCE, 0xA5, 0xCC, 0x94, + 0xCC, 0x80, 0xF6, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, + 0x81, 0xF6, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, + 0xF6, 0xCF, 0x89, 0xCC, 0x93, 0xF6, 0xCF, 0x89, + 0xCC, 0x94, 0xF6, 0xCF, 0x89, 0xCC, 0x93, 0xCC, + 0x80, 0xF6, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, + 0xF6, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xF6, + 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xF6, 0xCF, + 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xF6, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x82, 0xF6, 0xCE, 0xA9, 0xCC, + 0x93, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xF6, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, 0xCC, + 0x93, 0xCC, 0x81, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, + 0xCC, 0x81, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, + 0x82, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, + 0xF6, 0xCE, 0xB1, 0xCC, 0x80, 0xF6, 0xCE, 0xB1, + 0xCC, 0x81, 0xF6, 0xCE, 0xB5, 0xCC, 0x80, 0xF6, + 0xCE, 0xB5, 0xCC, 0x81, 0xF6, 0xCE, 0xB7, 0xCC, + 0x80, 0xF6, 0xCE, 0xB7, 0xCC, 0x81, 0xF6, 0xCE, + 0xB9, 0xCC, 0x80, 0xF6, 0xCE, 0xB9, 0xCC, 0x81, + 0xF6, 0xCE, 0xBF, 0xCC, 0x80, 0xF6, 0xCE, 0xBF, + 0xCC, 0x81, 0xF6, 0xCF, 0x85, 0xCC, 0x80, 0xF6, + 0xCF, 0x85, 0xCC, 0x81, 0xF6, 0xCF, 0x89, 0xCC, + 0x80, 0xF6, 0xCF, 0x89, 0xCC, 0x81, 0xF6, 0xCE, + 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, + 0xCC, 0x94, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xF6, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCD, + 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, + 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x91, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x91, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, + 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, + 0xCC, 0x94, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xF6, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCD, + 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, + 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0x97, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x97, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCF, + 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xF6, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xF6, + 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xF6, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xF6, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, + 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, + 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0xA9, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0xA9, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, + 0xB1, 0xCC, 0x86, 0xF6, 0xCE, 0xB1, 0xCC, 0x84, + 0xF6, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xF6, + 0xCE, 0xB1, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCC, + 0x81, 0xCD, 0x85, 0xF6, 0xCE, 0xB1, 0xCD, 0x82, + 0xF6, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xF6, + 0xCE, 0x91, 0xCC, 0x86, 0xF6, 0xCE, 0x91, 0xCC, + 0x84, 0xF6, 0xCE, 0x91, 0xCC, 0x80, 0xF6, 0xCE, + 0x91, 0xCC, 0x81, 0xF6, 0xCE, 0x91, 0xCD, 0x85, + 0x20, 0xCC, 0x93, 0xF6, 0xCE, 0xB9, 0x20, 0xCC, + 0x93, 0x20, 0xCD, 0x82, 0xF5, 0x05, 0xC2, 0xA8, + 0xCD, 0x82, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xF6, + 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCE, + 0xB7, 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCC, 0x81, + 0xCD, 0x85, 0xF6, 0xCE, 0xB7, 0xCD, 0x82, 0xF6, + 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, + 0x95, 0xCC, 0x80, 0xF6, 0xCE, 0x95, 0xCC, 0x81, + 0xF6, 0xCE, 0x97, 0xCC, 0x80, 0xF6, 0xCE, 0x97, + 0xCC, 0x81, 0xF6, 0xCE, 0x97, 0xCD, 0x85, 0xF5, + 0x06, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0x20, 0xCC, + 0x93, 0xCC, 0x80, 0xF5, 0x06, 0xE1, 0xBE, 0xBF, + 0xCC, 0x81, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xF5, + 0x06, 0xE1, 0xBE, 0xBF, 0xCD, 0x82, 0x20, 0xCC, + 0x93, 0xCD, 0x82, 0xF6, 0xCE, 0xB9, 0xCC, 0x86, + 0xF6, 0xCE, 0xB9, 0xCC, 0x84, 0xF6, 0xCE, 0xB9, + 0xCC, 0x88, 0xCC, 0x80, 0xF6, 0xCE, 0xB9, 0xCC, + 0x88, 0xCC, 0x81, 0xF6, 0xCE, 0xB9, 0xCD, 0x82, + 0xF6, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xF6, + 0xCE, 0x99, 0xCC, 0x86, 0xF6, 0xCE, 0x99, 0xCC, + 0x84, 0xF6, 0xCE, 0x99, 0xCC, 0x80, 0xF6, 0xCE, + 0x99, 0xCC, 0x81, 0xF5, 0x06, 0xE1, 0xBF, 0xBE, + 0xCC, 0x80, 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xF5, + 0x06, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, 0x20, 0xCC, + 0x94, 0xCC, 0x81, 0xF5, 0x06, 0xE1, 0xBF, 0xBE, + 0xCD, 0x82, 0x20, 0xCC, 0x94, 0xCD, 0x82, 0xF6, + 0xCF, 0x85, 0xCC, 0x86, 0xF6, 0xCF, 0x85, 0xCC, + 0x84, 0xF6, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, + 0xF6, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xF6, + 0xCF, 0x81, 0xCC, 0x93, 0xF6, 0xCF, 0x81, 0xCC, + 0x94, 0xF6, 0xCF, 0x85, 0xCD, 0x82, 0xF6, 0xCF, + 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xF6, 0xCE, 0xA5, + 0xCC, 0x86, 0xF6, 0xCE, 0xA5, 0xCC, 0x84, 0xF6, + 0xCE, 0xA5, 0xCC, 0x80, 0xF6, 0xCE, 0xA5, 0xCC, + 0x81, 0xF6, 0xCE, 0xA1, 0xCC, 0x94, 0xF5, 0x05, + 0xC2, 0xA8, 0xCC, 0x80, 0x20, 0xCC, 0x88, 0xCC, + 0x80, 0xF5, 0x05, 0xC2, 0xA8, 0xCC, 0x81, 0x20, + 0xCC, 0x88, 0xCC, 0x81, 0xF6, 0x60, 0xF6, 0xCF, + 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xF6, 0xCF, 0x89, + 0xCD, 0x85, 0xF6, 0xCF, 0x89, 0xCC, 0x81, 0xCD, + 0x85, 0xF6, 0xCF, 0x89, 0xCD, 0x82, 0xF6, 0xCF, + 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xF6, 0xCE, 0x9F, + 0xCC, 0x80, 0xF6, 0xCE, 0x9F, 0xCC, 0x81, 0xF6, + 0xCE, 0xA9, 0xCC, 0x80, 0xF6, 0xCE, 0xA9, 0xCC, + 0x81, 0xF6, 0xCE, 0xA9, 0xCD, 0x85, 0xF5, 0x03, + 0xC2, 0xB4, 0x20, 0xCC, 0x81, 0x20, 0xCC, 0x94, + 0xF5, 0x04, 0xE2, 0x80, 0x82, 0x20, 0xF5, 0x04, + 0xE2, 0x80, 0x83, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xE2, 0x80, 0x90, + 0x20, 0xCC, 0xB3, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, + 0x2E, 0x20, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, + 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, + 0x21, 0x21, 0x20, 0xCC, 0x85, 0x3F, 0x3F, 0x3F, + 0x21, 0x21, 0x3F, 0xE2, 0x80, 0xB2, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x20, + 0x30, 0x69, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x2B, 0xE2, 0x88, 0x92, 0x3D, 0x28, 0x29, 0x6E, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x2B, 0xE2, 0x88, 0x92, 0x3D, 0x28, + 0x29, 0x61, 0x65, 0x6F, 0x78, 0xC9, 0x99, 0x52, + 0x73, 0x61, 0x2F, 0x63, 0x61, 0x2F, 0x73, 0x43, + 0xC2, 0xB0, 0x43, 0x63, 0x2F, 0x6F, 0x63, 0x2F, + 0x75, 0xC6, 0x90, 0xC2, 0xB0, 0x46, 0x67, 0x48, + 0x48, 0x48, 0x68, 0xC4, 0xA7, 0x49, 0x49, 0x4C, + 0x6C, 0x4E, 0x4E, 0x6F, 0x50, 0x51, 0x52, 0x52, + 0x52, 0x53, 0x4D, 0x54, 0x45, 0x4C, 0x54, 0x4D, + 0x5A, 0xF6, 0xCE, 0xA9, 0x5A, 0xF6, 0x4B, 0xF6, + 0x41, 0xCC, 0x8A, 0x42, 0x43, 0x65, 0x45, 0x46, + 0x4D, 0x6F, 0xD7, 0x90, 0xD7, 0x91, 0xD7, 0x92, + 0xD7, 0x93, 0x69, 0x46, 0x41, 0x58, 0xCF, 0x80, + 0xCE, 0xB3, 0xCE, 0x93, 0xCE, 0xA0, 0xE2, 0x88, + 0x91, 0x44, 0x64, 0x65, 0x69, 0x6A, 0x31, 0xE2, + 0x81, 0x84, 0x33, 0x32, 0xE2, 0x81, 0x84, 0x33, + 0x31, 0xE2, 0x81, 0x84, 0x35, 0x32, 0xE2, 0x81, + 0x84, 0x35, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x34, + 0xE2, 0x81, 0x84, 0x35, 0x31, 0xE2, 0x81, 0x84, + 0x36, 0x35, 0xE2, 0x81, 0x84, 0x36, 0x31, 0xE2, + 0x81, 0x84, 0x38, 0x33, 0xE2, 0x81, 0x84, 0x38, + 0x35, 0xE2, 0x81, 0x84, 0x38, 0x37, 0xE2, 0x81, + 0x84, 0x38, 0x31, 0xE2, 0x81, 0x84, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x56, 0x56, 0x56, + 0x49, 0x56, 0x49, 0x49, 0x56, 0x49, 0x49, 0x49, + 0x49, 0x58, 0x58, 0x58, 0x49, 0x58, 0x49, 0x49, + 0x4C, 0x43, 0x44, 0x4D, 0x69, 0x69, 0x69, 0x69, + 0x69, 0x69, 0x69, 0x76, 0x76, 0x76, 0x69, 0x76, + 0x69, 0x69, 0x76, 0x69, 0x69, 0x69, 0x69, 0x78, + 0x78, 0x78, 0x69, 0x78, 0x69, 0x69, 0x6C, 0x63, + 0x64, 0x6D, 0xF6, 0xE2, 0x86, 0x90, 0xCC, 0xB8, + 0xF6, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0xF6, 0xE2, + 0x86, 0x94, 0xCC, 0xB8, 0xF6, 0xE2, 0x87, 0x90, + 0xCC, 0xB8, 0xF6, 0xE2, 0x87, 0x94, 0xCC, 0xB8, + 0xF6, 0xE2, 0x87, 0x92, 0xCC, 0xB8, 0xF6, 0xE2, + 0x88, 0x83, 0xCC, 0xB8, 0xF6, 0xE2, 0x88, 0x88, + 0xCC, 0xB8, 0xF6, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, + 0xF6, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0xF6, 0xE2, + 0x88, 0xA5, 0xCC, 0xB8, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAE, 0xE2, 0x88, + 0xAE, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xE2, + 0x88, 0xAE, 0xF6, 0xE2, 0x88, 0xBC, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0x83, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0x85, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0x88, + 0xCC, 0xB8, 0xF6, 0x3D, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xA1, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0x8D, + 0xCC, 0xB8, 0xF6, 0x3C, 0xCC, 0xB8, 0xF6, 0x3E, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xB2, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xB3, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xB6, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, 0xF6, 0xE2, + 0x89, 0xBA, 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xBB, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x82, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0x83, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0x86, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x87, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0xA9, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xAB, + 0xCC, 0xB8, 0xF6, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, + 0xF6, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0x91, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0x92, + 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xB2, 0xCC, 0xB8, + 0xF6, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8, 0xF6, 0xE2, + 0x8A, 0xB4, 0xCC, 0xB8, 0xF6, 0xE2, 0x8A, 0xB5, + 0xCC, 0xB8, 0xF6, 0xE3, 0x80, 0x88, 0xF6, 0xE3, + 0x80, 0x89, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x31, 0x30, 0x31, 0x31, 0x31, + 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, 0x31, + 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, 0x32, + 0x30, 0x28, 0x31, 0x29, 0x28, 0x32, 0x29, 0x28, + 0x33, 0x29, 0x28, 0x34, 0x29, 0x28, 0x35, 0x29, + 0x28, 0x36, 0x29, 0x28, 0x37, 0x29, 0x28, 0x38, + 0x29, 0x28, 0x39, 0x29, 0x28, 0x31, 0x30, 0x29, + 0x28, 0x31, 0x31, 0x29, 0x28, 0x31, 0x32, 0x29, + 0x28, 0x31, 0x33, 0x29, 0x28, 0x31, 0x34, 0x29, + 0x28, 0x31, 0x35, 0x29, 0x28, 0x31, 0x36, 0x29, + 0x28, 0x31, 0x37, 0x29, 0x28, 0x31, 0x38, 0x29, + 0x28, 0x31, 0x39, 0x29, 0x28, 0x32, 0x30, 0x29, + 0x31, 0x2E, 0x32, 0x2E, 0x33, 0x2E, 0x34, 0x2E, + 0x35, 0x2E, 0x36, 0x2E, 0x37, 0x2E, 0x38, 0x2E, + 0x39, 0x2E, 0x31, 0x30, 0x2E, 0x31, 0x31, 0x2E, + 0x31, 0x32, 0x2E, 0x31, 0x33, 0x2E, 0x31, 0x34, + 0x2E, 0x31, 0x35, 0x2E, 0x31, 0x36, 0x2E, 0x31, + 0x37, 0x2E, 0x31, 0x38, 0x2E, 0x31, 0x39, 0x2E, + 0x32, 0x30, 0x2E, 0x28, 0x61, 0x29, 0x28, 0x62, + 0x29, 0x28, 0x63, 0x29, 0x28, 0x64, 0x29, 0x28, + 0x65, 0x29, 0x28, 0x66, 0x29, 0x28, 0x67, 0x29, + 0x28, 0x68, 0x29, 0x28, 0x69, 0x29, 0x28, 0x6A, + 0x29, 0x28, 0x6B, 0x29, 0x28, 0x6C, 0x29, 0x28, + 0x6D, 0x29, 0x28, 0x6E, 0x29, 0x28, 0x6F, 0x29, + 0x28, 0x70, 0x29, 0x28, 0x71, 0x29, 0x28, 0x72, + 0x29, 0x28, 0x73, 0x29, 0x28, 0x74, 0x29, 0x28, + 0x75, 0x29, 0x28, 0x76, 0x29, 0x28, 0x77, 0x29, + 0x28, 0x78, 0x29, 0x28, 0x79, 0x29, 0x28, 0x7A, + 0x29, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x30, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAB, 0x3A, 0x3A, 0x3D, 0x3D, 0x3D, 0x3D, + 0x3D, 0x3D, 0xF6, 0xE2, 0xAB, 0x9D, 0xCC, 0xB8, + 0xE2, 0xB5, 0xA1, 0xE6, 0xAF, 0x8D, 0xE9, 0xBE, + 0x9F, 0xE4, 0xB8, 0x80, 0xE4, 0xB8, 0xA8, 0xE4, + 0xB8, 0xB6, 0xE4, 0xB8, 0xBF, 0xE4, 0xB9, 0x99, + 0xE4, 0xBA, 0x85, 0xE4, 0xBA, 0x8C, 0xE4, 0xBA, + 0xA0, 0xE4, 0xBA, 0xBA, 0xE5, 0x84, 0xBF, 0xE5, + 0x85, 0xA5, 0xE5, 0x85, 0xAB, 0xE5, 0x86, 0x82, + 0xE5, 0x86, 0x96, 0xE5, 0x86, 0xAB, 0xE5, 0x87, + 0xA0, 0xE5, 0x87, 0xB5, 0xE5, 0x88, 0x80, 0xE5, + 0x8A, 0x9B, 0xE5, 0x8B, 0xB9, 0xE5, 0x8C, 0x95, + 0xE5, 0x8C, 0x9A, 0xE5, 0x8C, 0xB8, 0xE5, 0x8D, + 0x81, 0xE5, 0x8D, 0x9C, 0xE5, 0x8D, 0xA9, 0xE5, + 0x8E, 0x82, 0xE5, 0x8E, 0xB6, 0xE5, 0x8F, 0x88, + 0xE5, 0x8F, 0xA3, 0xE5, 0x9B, 0x97, 0xE5, 0x9C, + 0x9F, 0xE5, 0xA3, 0xAB, 0xE5, 0xA4, 0x82, 0xE5, + 0xA4, 0x8A, 0xE5, 0xA4, 0x95, 0xE5, 0xA4, 0xA7, + 0xE5, 0xA5, 0xB3, 0xE5, 0xAD, 0x90, 0xE5, 0xAE, + 0x80, 0xE5, 0xAF, 0xB8, 0xE5, 0xB0, 0x8F, 0xE5, + 0xB0, 0xA2, 0xE5, 0xB0, 0xB8, 0xE5, 0xB1, 0xAE, + 0xE5, 0xB1, 0xB1, 0xE5, 0xB7, 0x9B, 0xE5, 0xB7, + 0xA5, 0xE5, 0xB7, 0xB1, 0xE5, 0xB7, 0xBE, 0xE5, + 0xB9, 0xB2, 0xE5, 0xB9, 0xBA, 0xE5, 0xB9, 0xBF, + 0xE5, 0xBB, 0xB4, 0xE5, 0xBB, 0xBE, 0xE5, 0xBC, + 0x8B, 0xE5, 0xBC, 0x93, 0xE5, 0xBD, 0x90, 0xE5, + 0xBD, 0xA1, 0xE5, 0xBD, 0xB3, 0xE5, 0xBF, 0x83, + 0xE6, 0x88, 0x88, 0xE6, 0x88, 0xB6, 0xE6, 0x89, + 0x8B, 0xE6, 0x94, 0xAF, 0xE6, 0x94, 0xB4, 0xE6, + 0x96, 0x87, 0xE6, 0x96, 0x97, 0xE6, 0x96, 0xA4, + 0xE6, 0x96, 0xB9, 0xE6, 0x97, 0xA0, 0xE6, 0x97, + 0xA5, 0xE6, 0x9B, 0xB0, 0xE6, 0x9C, 0x88, 0xE6, + 0x9C, 0xA8, 0xE6, 0xAC, 0xA0, 0xE6, 0xAD, 0xA2, + 0xE6, 0xAD, 0xB9, 0xE6, 0xAE, 0xB3, 0xE6, 0xAF, + 0x8B, 0xE6, 0xAF, 0x94, 0xE6, 0xAF, 0x9B, 0xE6, + 0xB0, 0x8F, 0xE6, 0xB0, 0x94, 0xE6, 0xB0, 0xB4, + 0xE7, 0x81, 0xAB, 0xE7, 0x88, 0xAA, 0xE7, 0x88, + 0xB6, 0xE7, 0x88, 0xBB, 0xE7, 0x88, 0xBF, 0xE7, + 0x89, 0x87, 0xE7, 0x89, 0x99, 0xE7, 0x89, 0x9B, + 0xE7, 0x8A, 0xAC, 0xE7, 0x8E, 0x84, 0xE7, 0x8E, + 0x89, 0xE7, 0x93, 0x9C, 0xE7, 0x93, 0xA6, 0xE7, + 0x94, 0x98, 0xE7, 0x94, 0x9F, 0xE7, 0x94, 0xA8, + 0xE7, 0x94, 0xB0, 0xE7, 0x96, 0x8B, 0xE7, 0x96, + 0x92, 0xE7, 0x99, 0xB6, 0xE7, 0x99, 0xBD, 0xE7, + 0x9A, 0xAE, 0xE7, 0x9A, 0xBF, 0xE7, 0x9B, 0xAE, + 0xE7, 0x9F, 0x9B, 0xE7, 0x9F, 0xA2, 0xE7, 0x9F, + 0xB3, 0xE7, 0xA4, 0xBA, 0xE7, 0xA6, 0xB8, 0xE7, + 0xA6, 0xBE, 0xE7, 0xA9, 0xB4, 0xE7, 0xAB, 0x8B, + 0xE7, 0xAB, 0xB9, 0xE7, 0xB1, 0xB3, 0xE7, 0xB3, + 0xB8, 0xE7, 0xBC, 0xB6, 0xE7, 0xBD, 0x91, 0xE7, + 0xBE, 0x8A, 0xE7, 0xBE, 0xBD, 0xE8, 0x80, 0x81, + 0xE8, 0x80, 0x8C, 0xE8, 0x80, 0x92, 0xE8, 0x80, + 0xB3, 0xE8, 0x81, 0xBF, 0xE8, 0x82, 0x89, 0xE8, + 0x87, 0xA3, 0xE8, 0x87, 0xAA, 0xE8, 0x87, 0xB3, + 0xE8, 0x87, 0xBC, 0xE8, 0x88, 0x8C, 0xE8, 0x88, + 0x9B, 0xE8, 0x88, 0x9F, 0xE8, 0x89, 0xAE, 0xE8, + 0x89, 0xB2, 0xE8, 0x89, 0xB8, 0xE8, 0x99, 0x8D, + 0xE8, 0x99, 0xAB, 0xE8, 0xA1, 0x80, 0xE8, 0xA1, + 0x8C, 0xE8, 0xA1, 0xA3, 0xE8, 0xA5, 0xBE, 0xE8, + 0xA6, 0x8B, 0xE8, 0xA7, 0x92, 0xE8, 0xA8, 0x80, + 0xE8, 0xB0, 0xB7, 0xE8, 0xB1, 0x86, 0xE8, 0xB1, + 0x95, 0xE8, 0xB1, 0xB8, 0xE8, 0xB2, 0x9D, 0xE8, + 0xB5, 0xA4, 0xE8, 0xB5, 0xB0, 0xE8, 0xB6, 0xB3, + 0xE8, 0xBA, 0xAB, 0xE8, 0xBB, 0x8A, 0xE8, 0xBE, + 0x9B, 0xE8, 0xBE, 0xB0, 0xE8, 0xBE, 0xB5, 0xE9, + 0x82, 0x91, 0xE9, 0x85, 0x89, 0xE9, 0x87, 0x86, + 0xE9, 0x87, 0x8C, 0xE9, 0x87, 0x91, 0xE9, 0x95, + 0xB7, 0xE9, 0x96, 0x80, 0xE9, 0x98, 0x9C, 0xE9, + 0x9A, 0xB6, 0xE9, 0x9A, 0xB9, 0xE9, 0x9B, 0xA8, + 0xE9, 0x9D, 0x91, 0xE9, 0x9D, 0x9E, 0xE9, 0x9D, + 0xA2, 0xE9, 0x9D, 0xA9, 0xE9, 0x9F, 0x8B, 0xE9, + 0x9F, 0xAD, 0xE9, 0x9F, 0xB3, 0xE9, 0xA0, 0x81, + 0xE9, 0xA2, 0xA8, 0xE9, 0xA3, 0x9B, 0xE9, 0xA3, + 0x9F, 0xE9, 0xA6, 0x96, 0xE9, 0xA6, 0x99, 0xE9, + 0xA6, 0xAC, 0xE9, 0xAA, 0xA8, 0xE9, 0xAB, 0x98, + 0xE9, 0xAB, 0x9F, 0xE9, 0xAC, 0xA5, 0xE9, 0xAC, + 0xAF, 0xE9, 0xAC, 0xB2, 0xE9, 0xAC, 0xBC, 0xE9, + 0xAD, 0x9A, 0xE9, 0xB3, 0xA5, 0xE9, 0xB9, 0xB5, + 0xE9, 0xB9, 0xBF, 0xE9, 0xBA, 0xA5, 0xE9, 0xBA, + 0xBB, 0xE9, 0xBB, 0x83, 0xE9, 0xBB, 0x8D, 0xE9, + 0xBB, 0x91, 0xE9, 0xBB, 0xB9, 0xE9, 0xBB, 0xBD, + 0xE9, 0xBC, 0x8E, 0xE9, 0xBC, 0x93, 0xE9, 0xBC, + 0xA0, 0xE9, 0xBC, 0xBB, 0xE9, 0xBD, 0x8A, 0xE9, + 0xBD, 0x92, 0xE9, 0xBE, 0x8D, 0xE9, 0xBE, 0x9C, + 0xE9, 0xBE, 0xA0, 0x20, 0xE3, 0x80, 0x92, 0xE5, + 0x8D, 0x81, 0xE5, 0x8D, 0x84, 0xE5, 0x8D, 0x85, + 0xF6, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x81, 0x8F, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, + 0x91, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x93, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x95, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x81, 0x97, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x81, 0x9F, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, + 0xA1, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xA4, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xA6, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xA8, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0xF6, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x81, + 0xB5, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xB5, + 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x81, 0xB8, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x81, 0xB8, 0xE3, 0x82, + 0x9A, 0xF6, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0xF6, + 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x20, 0xE3, + 0x82, 0x99, 0x20, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, + 0x82, 0x9D, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0x88, + 0xE3, 0x82, 0x8A, 0xF6, 0xE3, 0x82, 0xAB, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x82, 0xB5, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, + 0xB7, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xB9, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xBB, 0xE3, + 0x82, 0x99, 0xF6, 0xE3, 0x82, 0xBD, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x83, 0x86, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x9A, 0xF6, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, + 0xF6, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xF6, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, 0x9B, 0xE3, + 0x82, 0x9A, 0xF6, 0xE3, 0x82, 0xA6, 0xE3, 0x82, + 0x99, 0xF6, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, + 0xF6, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0xF6, + 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0xF6, 0xE3, + 0x83, 0xB2, 0xE3, 0x82, 0x99, 0xF6, 0xE3, 0x83, + 0xBD, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB3, 0xE3, + 0x83, 0x88, 0xE1, 0x84, 0x80, 0xE1, 0x84, 0x81, + 0xE1, 0x86, 0xAA, 0xE1, 0x84, 0x82, 0xE1, 0x86, + 0xAC, 0xE1, 0x86, 0xAD, 0xE1, 0x84, 0x83, 0xE1, + 0x84, 0x84, 0xE1, 0x84, 0x85, 0xE1, 0x86, 0xB0, + 0xE1, 0x86, 0xB1, 0xE1, 0x86, 0xB2, 0xE1, 0x86, + 0xB3, 0xE1, 0x86, 0xB4, 0xE1, 0x86, 0xB5, 0xE1, + 0x84, 0x9A, 0xE1, 0x84, 0x86, 0xE1, 0x84, 0x87, + 0xE1, 0x84, 0x88, 0xE1, 0x84, 0xA1, 0xE1, 0x84, + 0x89, 0xE1, 0x84, 0x8A, 0xE1, 0x84, 0x8B, 0xE1, + 0x84, 0x8C, 0xE1, 0x84, 0x8D, 0xE1, 0x84, 0x8E, + 0xE1, 0x84, 0x8F, 0xE1, 0x84, 0x90, 0xE1, 0x84, + 0x91, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, + 0x85, 0xA2, 0xE1, 0x85, 0xA3, 0xE1, 0x85, 0xA4, + 0xE1, 0x85, 0xA5, 0xE1, 0x85, 0xA6, 0xE1, 0x85, + 0xA7, 0xE1, 0x85, 0xA8, 0xE1, 0x85, 0xA9, 0xE1, + 0x85, 0xAA, 0xE1, 0x85, 0xAB, 0xE1, 0x85, 0xAC, + 0xE1, 0x85, 0xAD, 0xE1, 0x85, 0xAE, 0xE1, 0x85, + 0xAF, 0xE1, 0x85, 0xB0, 0xE1, 0x85, 0xB1, 0xE1, + 0x85, 0xB2, 0xE1, 0x85, 0xB3, 0xE1, 0x85, 0xB4, + 0xE1, 0x85, 0xB5, 0xE1, 0x85, 0xA0, 0xE1, 0x84, + 0x94, 0xE1, 0x84, 0x95, 0xE1, 0x87, 0x87, 0xE1, + 0x87, 0x88, 0xE1, 0x87, 0x8C, 0xE1, 0x87, 0x8E, + 0xE1, 0x87, 0x93, 0xE1, 0x87, 0x97, 0xE1, 0x87, + 0x99, 0xE1, 0x84, 0x9C, 0xE1, 0x87, 0x9D, 0xE1, + 0x87, 0x9F, 0xE1, 0x84, 0x9D, 0xE1, 0x84, 0x9E, + 0xE1, 0x84, 0xA0, 0xE1, 0x84, 0xA2, 0xE1, 0x84, + 0xA3, 0xE1, 0x84, 0xA7, 0xE1, 0x84, 0xA9, 0xE1, + 0x84, 0xAB, 0xE1, 0x84, 0xAC, 0xE1, 0x84, 0xAD, + 0xE1, 0x84, 0xAE, 0xE1, 0x84, 0xAF, 0xE1, 0x84, + 0xB2, 0xE1, 0x84, 0xB6, 0xE1, 0x85, 0x80, 0xE1, + 0x85, 0x87, 0xE1, 0x85, 0x8C, 0xE1, 0x87, 0xB1, + 0xE1, 0x87, 0xB2, 0xE1, 0x85, 0x97, 0xE1, 0x85, + 0x98, 0xE1, 0x85, 0x99, 0xE1, 0x86, 0x84, 0xE1, + 0x86, 0x85, 0xE1, 0x86, 0x88, 0xE1, 0x86, 0x91, + 0xE1, 0x86, 0x92, 0xE1, 0x86, 0x94, 0xE1, 0x86, + 0x9E, 0xE1, 0x86, 0xA1, 0xE4, 0xB8, 0x80, 0xE4, + 0xBA, 0x8C, 0xE4, 0xB8, 0x89, 0xE5, 0x9B, 0x9B, + 0xE4, 0xB8, 0x8A, 0xE4, 0xB8, 0xAD, 0xE4, 0xB8, + 0x8B, 0xE7, 0x94, 0xB2, 0xE4, 0xB9, 0x99, 0xE4, + 0xB8, 0x99, 0xE4, 0xB8, 0x81, 0xE5, 0xA4, 0xA9, + 0xE5, 0x9C, 0xB0, 0xE4, 0xBA, 0xBA, 0x28, 0xE1, + 0x84, 0x80, 0x29, 0x28, 0xE1, 0x84, 0x82, 0x29, + 0x28, 0xE1, 0x84, 0x83, 0x29, 0x28, 0xE1, 0x84, + 0x85, 0x29, 0x28, 0xE1, 0x84, 0x86, 0x29, 0x28, + 0xE1, 0x84, 0x87, 0x29, 0x28, 0xE1, 0x84, 0x89, + 0x29, 0x28, 0xE1, 0x84, 0x8B, 0x29, 0x28, 0xE1, + 0x84, 0x8C, 0x29, 0x28, 0xE1, 0x84, 0x8E, 0x29, + 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x28, 0xE1, 0x84, + 0x90, 0x29, 0x28, 0xE1, 0x84, 0x91, 0x29, 0x28, + 0xE1, 0x84, 0x92, 0x29, 0x28, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x82, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x83, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x85, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x86, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x87, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x89, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x8B, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x8E, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x8F, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x90, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x91, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xA1, 0x29, 0x28, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xAE, 0x29, 0x28, 0xE1, 0x84, 0x8B, + 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, + 0x85, 0xAE, 0x29, 0x28, 0xE4, 0xB8, 0x80, 0x29, + 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x28, 0xE4, 0xB8, + 0x89, 0x29, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x28, + 0xE4, 0xBA, 0x94, 0x29, 0x28, 0xE5, 0x85, 0xAD, + 0x29, 0x28, 0xE4, 0xB8, 0x83, 0x29, 0x28, 0xE5, + 0x85, 0xAB, 0x29, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x28, 0xE6, 0x9C, + 0x88, 0x29, 0x28, 0xE7, 0x81, 0xAB, 0x29, 0x28, + 0xE6, 0xB0, 0xB4, 0x29, 0x28, 0xE6, 0x9C, 0xA8, + 0x29, 0x28, 0xE9, 0x87, 0x91, 0x29, 0x28, 0xE5, + 0x9C, 0x9F, 0x29, 0x28, 0xE6, 0x97, 0xA5, 0x29, + 0x28, 0xE6, 0xA0, 0xAA, 0x29, 0x28, 0xE6, 0x9C, + 0x89, 0x29, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x28, + 0xE5, 0x90, 0x8D, 0x29, 0x28, 0xE7, 0x89, 0xB9, + 0x29, 0x28, 0xE8, 0xB2, 0xA1, 0x29, 0x28, 0xE7, + 0xA5, 0x9D, 0x29, 0x28, 0xE5, 0x8A, 0xB4, 0x29, + 0x28, 0xE4, 0xBB, 0xA3, 0x29, 0x28, 0xE5, 0x91, + 0xBC, 0x29, 0x28, 0xE5, 0xAD, 0xA6, 0x29, 0x28, + 0xE7, 0x9B, 0xA3, 0x29, 0x28, 0xE4, 0xBC, 0x81, + 0x29, 0x28, 0xE8, 0xB3, 0x87, 0x29, 0x28, 0xE5, + 0x8D, 0x94, 0x29, 0x28, 0xE7, 0xA5, 0xAD, 0x29, + 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x28, 0xE8, 0x87, + 0xAA, 0x29, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x50, + 0x54, 0x45, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, + 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, + 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, + 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, + 0xE1, 0x84, 0x80, 0xE1, 0x84, 0x82, 0xE1, 0x84, + 0x83, 0xE1, 0x84, 0x85, 0xE1, 0x84, 0x86, 0xE1, + 0x84, 0x87, 0xE1, 0x84, 0x89, 0xE1, 0x84, 0x8B, + 0xE1, 0x84, 0x8C, 0xE1, 0x84, 0x8E, 0xE1, 0x84, + 0x8F, 0xE1, 0x84, 0x90, 0xE1, 0x84, 0x91, 0xE1, + 0x84, 0x92, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, + 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0xE1, 0x84, + 0x83, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x85, 0xE1, + 0x85, 0xA1, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, + 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0xE1, 0x84, + 0x89, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x8B, 0xE1, + 0x85, 0xA1, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, + 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x84, + 0x8F, 0xE1, 0x85, 0xA1, 0xE1, 0x84, 0x90, 0xE1, + 0x85, 0xA1, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x84, + 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, + 0x84, 0x80, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, + 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + 0xB4, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0xE4, + 0xB8, 0x80, 0xE4, 0xBA, 0x8C, 0xE4, 0xB8, 0x89, + 0xE5, 0x9B, 0x9B, 0xE4, 0xBA, 0x94, 0xE5, 0x85, + 0xAD, 0xE4, 0xB8, 0x83, 0xE5, 0x85, 0xAB, 0xE4, + 0xB9, 0x9D, 0xE5, 0x8D, 0x81, 0xE6, 0x9C, 0x88, + 0xE7, 0x81, 0xAB, 0xE6, 0xB0, 0xB4, 0xE6, 0x9C, + 0xA8, 0xE9, 0x87, 0x91, 0xE5, 0x9C, 0x9F, 0xE6, + 0x97, 0xA5, 0xE6, 0xA0, 0xAA, 0xE6, 0x9C, 0x89, + 0xE7, 0xA4, 0xBE, 0xE5, 0x90, 0x8D, 0xE7, 0x89, + 0xB9, 0xE8, 0xB2, 0xA1, 0xE7, 0xA5, 0x9D, 0xE5, + 0x8A, 0xB4, 0xE7, 0xA7, 0x98, 0xE7, 0x94, 0xB7, + 0xE5, 0xA5, 0xB3, 0xE9, 0x81, 0xA9, 0xE5, 0x84, + 0xAA, 0xE5, 0x8D, 0xB0, 0xE6, 0xB3, 0xA8, 0xE9, + 0xA0, 0x85, 0xE4, 0xBC, 0x91, 0xE5, 0x86, 0x99, + 0xE6, 0xAD, 0xA3, 0xE4, 0xB8, 0x8A, 0xE4, 0xB8, + 0xAD, 0xE4, 0xB8, 0x8B, 0xE5, 0xB7, 0xA6, 0xE5, + 0x8F, 0xB3, 0xE5, 0x8C, 0xBB, 0xE5, 0xAE, 0x97, + 0xE5, 0xAD, 0xA6, 0xE7, 0x9B, 0xA3, 0xE4, 0xBC, + 0x81, 0xE8, 0xB3, 0x87, 0xE5, 0x8D, 0x94, 0xE5, + 0xA4, 0x9C, 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, + 0x33, 0x39, 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, + 0x34, 0x33, 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, + 0x34, 0x37, 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, + 0x31, 0xE6, 0x9C, 0x88, 0x32, 0xE6, 0x9C, 0x88, + 0x33, 0xE6, 0x9C, 0x88, 0x34, 0xE6, 0x9C, 0x88, + 0x35, 0xE6, 0x9C, 0x88, 0x36, 0xE6, 0x9C, 0x88, + 0x37, 0xE6, 0x9C, 0x88, 0x38, 0xE6, 0x9C, 0x88, + 0x39, 0xE6, 0x9C, 0x88, 0x31, 0x30, 0xE6, 0x9C, + 0x88, 0x31, 0x31, 0xE6, 0x9C, 0x88, 0x31, 0x32, + 0xE6, 0x9C, 0x88, 0x48, 0x67, 0x65, 0x72, 0x67, + 0x65, 0x56, 0x4C, 0x54, 0x44, 0xE3, 0x82, 0xA2, + 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xA6, 0xE3, 0x82, + 0xA8, 0xE3, 0x82, 0xAA, 0xE3, 0x82, 0xAB, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xB1, + 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB5, 0xE3, 0x82, + 0xB7, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xBB, 0xE3, + 0x82, 0xBD, 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0x81, + 0xE3, 0x83, 0x84, 0xE3, 0x83, 0x86, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0x8C, 0xE3, 0x83, 0x8D, 0xE3, 0x83, 0x8E, + 0xE3, 0x83, 0x8F, 0xE3, 0x83, 0x92, 0xE3, 0x83, + 0x95, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0x9B, 0xE3, + 0x83, 0x9E, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xA0, + 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xA2, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xA6, 0xE3, 0x83, 0xA8, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAD, 0xE3, 0x83, + 0xAF, 0xE3, 0x83, 0xB0, 0xE3, 0x83, 0xB1, 0xE3, + 0x83, 0xB2, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xA2, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0xA6, + 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xAF, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, + 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAA, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xAA, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0xE3, 0x82, + 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAA, 0xE3, + 0x82, 0xAB, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xAB, 0xE3, 0x83, + 0xAD, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x9E, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAD, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAD, + 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAD, 0xE3, 0x83, + 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x82, 0xAD, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0xE3, + 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0xA0, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, + 0x83, 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x8D, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xB3, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x8A, 0xE3, 0x82, 0xB3, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xB5, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0xA0, 0xE3, 0x82, 0xB7, 0xE3, 0x83, + 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, + 0x82, 0x99, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x81, 0xE3, 0x82, 0xBB, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xBF, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, + 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xE3, 0x82, + 0xB7, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0xE3, 0x83, + 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x84, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xBC, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, 0xE3, 0x83, + 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAC, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, + 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3, 0x82, + 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, + 0x9A, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, + 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x95, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, + 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x98, + 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xBD, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0x92, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0x84, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xBF, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0x9B, + 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x9B, 0xE3, 0x82, + 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x9B, 0xE3, 0x83, + 0xBC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x9E, 0xE3, + 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, 0xE3, + 0x83, 0x8F, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0x9E, 0xE3, 0x83, + 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x9F, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xAA, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xAC, + 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0xAC, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xAF, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x30, 0xE7, + 0x82, 0xB9, 0x31, 0xE7, 0x82, 0xB9, 0x32, 0xE7, + 0x82, 0xB9, 0x33, 0xE7, 0x82, 0xB9, 0x34, 0xE7, + 0x82, 0xB9, 0x35, 0xE7, 0x82, 0xB9, 0x36, 0xE7, + 0x82, 0xB9, 0x37, 0xE7, 0x82, 0xB9, 0x38, 0xE7, + 0x82, 0xB9, 0x39, 0xE7, 0x82, 0xB9, 0x31, 0x30, + 0xE7, 0x82, 0xB9, 0x31, 0x31, 0xE7, 0x82, 0xB9, + 0x31, 0x32, 0xE7, 0x82, 0xB9, 0x31, 0x33, 0xE7, + 0x82, 0xB9, 0x31, 0x34, 0xE7, 0x82, 0xB9, 0x31, + 0x35, 0xE7, 0x82, 0xB9, 0x31, 0x36, 0xE7, 0x82, + 0xB9, 0x31, 0x37, 0xE7, 0x82, 0xB9, 0x31, 0x38, + 0xE7, 0x82, 0xB9, 0x31, 0x39, 0xE7, 0x82, 0xB9, + 0x32, 0x30, 0xE7, 0x82, 0xB9, 0x32, 0x31, 0xE7, + 0x82, 0xB9, 0x32, 0x32, 0xE7, 0x82, 0xB9, 0x32, + 0x33, 0xE7, 0x82, 0xB9, 0x32, 0x34, 0xE7, 0x82, + 0xB9, 0x68, 0x50, 0x61, 0x64, 0x61, 0x41, 0x55, + 0x62, 0x61, 0x72, 0x6F, 0x56, 0x70, 0x63, 0x64, + 0x6D, 0x64, 0x6D, 0x32, 0x64, 0x6D, 0x33, 0x49, + 0x55, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0xE6, + 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0xE5, 0xA4, 0xA7, + 0xE6, 0xAD, 0xA3, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, + 0xBB, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, + 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x70, 0x41, 0x6E, + 0x41, 0xCE, 0xBC, 0x41, 0x6D, 0x41, 0x6B, 0x41, + 0x4B, 0x42, 0x4D, 0x42, 0x47, 0x42, 0x63, 0x61, + 0x6C, 0x6B, 0x63, 0x61, 0x6C, 0x70, 0x46, 0x6E, + 0x46, 0xCE, 0xBC, 0x46, 0xCE, 0xBC, 0x67, 0x6D, + 0x67, 0x6B, 0x67, 0x48, 0x7A, 0x6B, 0x48, 0x7A, + 0x4D, 0x48, 0x7A, 0x47, 0x48, 0x7A, 0x54, 0x48, + 0x7A, 0xCE, 0xBC, 0x6C, 0x6D, 0x6C, 0x64, 0x6C, + 0x6B, 0x6C, 0x66, 0x6D, 0x6E, 0x6D, 0xCE, 0xBC, + 0x6D, 0x6D, 0x6D, 0x63, 0x6D, 0x6B, 0x6D, 0x6D, + 0x6D, 0x32, 0x63, 0x6D, 0x32, 0x6D, 0x32, 0x6B, + 0x6D, 0x32, 0x6D, 0x6D, 0x33, 0x63, 0x6D, 0x33, + 0x6D, 0x33, 0x6B, 0x6D, 0x33, 0x6D, 0xE2, 0x88, + 0x95, 0x73, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x32, + 0x50, 0x61, 0x6B, 0x50, 0x61, 0x4D, 0x50, 0x61, + 0x47, 0x50, 0x61, 0x72, 0x61, 0x64, 0x72, 0x61, + 0x64, 0xE2, 0x88, 0x95, 0x73, 0x72, 0x61, 0x64, + 0xE2, 0x88, 0x95, 0x73, 0x32, 0x70, 0x73, 0x6E, + 0x73, 0xCE, 0xBC, 0x73, 0x6D, 0x73, 0x70, 0x56, + 0x6E, 0x56, 0xCE, 0xBC, 0x56, 0x6D, 0x56, 0x6B, + 0x56, 0x4D, 0x56, 0x70, 0x57, 0x6E, 0x57, 0xCE, + 0xBC, 0x57, 0x6D, 0x57, 0x6B, 0x57, 0x4D, 0x57, + 0x6B, 0xCE, 0xA9, 0x4D, 0xCE, 0xA9, 0x61, 0x2E, + 0x6D, 0x2E, 0x42, 0x71, 0x63, 0x63, 0x63, 0x64, + 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, 0x43, 0x6F, + 0x2E, 0x64, 0x42, 0x47, 0x79, 0x68, 0x61, 0x48, + 0x50, 0x69, 0x6E, 0x4B, 0x4B, 0x4B, 0x4D, 0x6B, + 0x74, 0x6C, 0x6D, 0x6C, 0x6E, 0x6C, 0x6F, 0x67, + 0x6C, 0x78, 0x6D, 0x62, 0x6D, 0x69, 0x6C, 0x6D, + 0x6F, 0x6C, 0x50, 0x48, 0x70, 0x2E, 0x6D, 0x2E, + 0x50, 0x50, 0x4D, 0x50, 0x52, 0x73, 0x72, 0x53, + 0x76, 0x57, 0x62, 0x56, 0xE2, 0x88, 0x95, 0x6D, + 0x41, 0xE2, 0x88, 0x95, 0x6D, 0x31, 0xE6, 0x97, + 0xA5, 0x32, 0xE6, 0x97, 0xA5, 0x33, 0xE6, 0x97, + 0xA5, 0x34, 0xE6, 0x97, 0xA5, 0x35, 0xE6, 0x97, + 0xA5, 0x36, 0xE6, 0x97, 0xA5, 0x37, 0xE6, 0x97, + 0xA5, 0x38, 0xE6, 0x97, 0xA5, 0x39, 0xE6, 0x97, + 0xA5, 0x31, 0x30, 0xE6, 0x97, 0xA5, 0x31, 0x31, + 0xE6, 0x97, 0xA5, 0x31, 0x32, 0xE6, 0x97, 0xA5, + 0x31, 0x33, 0xE6, 0x97, 0xA5, 0x31, 0x34, 0xE6, + 0x97, 0xA5, 0x31, 0x35, 0xE6, 0x97, 0xA5, 0x31, + 0x36, 0xE6, 0x97, 0xA5, 0x31, 0x37, 0xE6, 0x97, + 0xA5, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x31, 0x39, + 0xE6, 0x97, 0xA5, 0x32, 0x30, 0xE6, 0x97, 0xA5, + 0x32, 0x31, 0xE6, 0x97, 0xA5, 0x32, 0x32, 0xE6, + 0x97, 0xA5, 0x32, 0x33, 0xE6, 0x97, 0xA5, 0x32, + 0x34, 0xE6, 0x97, 0xA5, 0x32, 0x35, 0xE6, 0x97, + 0xA5, 0x32, 0x36, 0xE6, 0x97, 0xA5, 0x32, 0x37, + 0xE6, 0x97, 0xA5, 0x32, 0x38, 0xE6, 0x97, 0xA5, + 0x32, 0x39, 0xE6, 0x97, 0xA5, 0x33, 0x30, 0xE6, + 0x97, 0xA5, 0x33, 0x31, 0xE6, 0x97, 0xA5, 0x67, + 0x61, 0x6C, 0xF6, 0xE8, 0xB1, 0x88, 0xF6, 0xE6, + 0x9B, 0xB4, 0xF6, 0xE8, 0xBB, 0x8A, 0xF6, 0xE8, + 0xB3, 0x88, 0xF6, 0xE6, 0xBB, 0x91, 0xF6, 0xE4, + 0xB8, 0xB2, 0xF6, 0xE5, 0x8F, 0xA5, 0xF6, 0xE9, + 0xBE, 0x9C, 0xF6, 0xE9, 0xBE, 0x9C, 0xF6, 0xE5, + 0xA5, 0x91, 0xF6, 0xE9, 0x87, 0x91, 0xF6, 0xE5, + 0x96, 0x87, 0xF6, 0xE5, 0xA5, 0x88, 0xF6, 0xE6, + 0x87, 0xB6, 0xF6, 0xE7, 0x99, 0xA9, 0xF6, 0xE7, + 0xBE, 0x85, 0xF6, 0xE8, 0x98, 0xBF, 0xF6, 0xE8, + 0x9E, 0xBA, 0xF6, 0xE8, 0xA3, 0xB8, 0xF6, 0xE9, + 0x82, 0x8F, 0xF6, 0xE6, 0xA8, 0x82, 0xF6, 0xE6, + 0xB4, 0x9B, 0xF6, 0xE7, 0x83, 0x99, 0xF6, 0xE7, + 0x8F, 0x9E, 0xF6, 0xE8, 0x90, 0xBD, 0xF6, 0xE9, + 0x85, 0xAA, 0xF6, 0xE9, 0xA7, 0xB1, 0xF6, 0xE4, + 0xBA, 0x82, 0xF6, 0xE5, 0x8D, 0xB5, 0xF6, 0xE6, + 0xAC, 0x84, 0xF6, 0xE7, 0x88, 0x9B, 0xF6, 0xE8, + 0x98, 0xAD, 0xF6, 0xE9, 0xB8, 0x9E, 0xF6, 0xE5, + 0xB5, 0x90, 0xF6, 0xE6, 0xBF, 0xAB, 0xF6, 0xE8, + 0x97, 0x8D, 0xF6, 0xE8, 0xA5, 0xA4, 0xF6, 0xE6, + 0x8B, 0x89, 0xF6, 0xE8, 0x87, 0x98, 0xF6, 0xE8, + 0xA0, 0x9F, 0xF6, 0xE5, 0xBB, 0x8A, 0xF6, 0xE6, + 0x9C, 0x97, 0xF6, 0xE6, 0xB5, 0xAA, 0xF6, 0xE7, + 0x8B, 0xBC, 0xF6, 0xE9, 0x83, 0x8E, 0xF6, 0xE4, + 0xBE, 0x86, 0xF6, 0xE5, 0x86, 0xB7, 0xF6, 0xE5, + 0x8B, 0x9E, 0xF6, 0xE6, 0x93, 0x84, 0xF6, 0xE6, + 0xAB, 0x93, 0xF6, 0xE7, 0x88, 0x90, 0xF6, 0xE7, + 0x9B, 0xA7, 0xF6, 0xE8, 0x80, 0x81, 0xF6, 0xE8, + 0x98, 0x86, 0xF6, 0xE8, 0x99, 0x9C, 0xF6, 0xE8, + 0xB7, 0xAF, 0xF6, 0xE9, 0x9C, 0xB2, 0xF6, 0xE9, + 0xAD, 0xAF, 0xF6, 0xE9, 0xB7, 0xBA, 0xF6, 0xE7, + 0xA2, 0x8C, 0xF6, 0xE7, 0xA5, 0xBF, 0xF6, 0xE7, + 0xB6, 0xA0, 0xF6, 0xE8, 0x8F, 0x89, 0xF6, 0xE9, + 0x8C, 0x84, 0xF6, 0xE9, 0xB9, 0xBF, 0xF6, 0xE8, + 0xAB, 0x96, 0xF6, 0xE5, 0xA3, 0x9F, 0xF6, 0xE5, + 0xBC, 0x84, 0xF6, 0xE7, 0xB1, 0xA0, 0xF6, 0xE8, + 0x81, 0xBE, 0xF6, 0xE7, 0x89, 0xA2, 0xF6, 0xE7, + 0xA3, 0x8A, 0xF6, 0xE8, 0xB3, 0x82, 0xF6, 0xE9, + 0x9B, 0xB7, 0xF6, 0xE5, 0xA3, 0x98, 0xF6, 0xE5, + 0xB1, 0xA2, 0xF6, 0xE6, 0xA8, 0x93, 0xF6, 0xE6, + 0xB7, 0x9A, 0xF6, 0xE6, 0xBC, 0x8F, 0xF6, 0xE7, + 0xB4, 0xAF, 0xF6, 0xE7, 0xB8, 0xB7, 0xF6, 0xE9, + 0x99, 0x8B, 0xF6, 0xE5, 0x8B, 0x92, 0xF6, 0xE8, + 0x82, 0x8B, 0xF6, 0xE5, 0x87, 0x9C, 0xF6, 0xE5, + 0x87, 0x8C, 0xF6, 0xE7, 0xA8, 0x9C, 0xF6, 0xE7, + 0xB6, 0xBE, 0xF6, 0xE8, 0x8F, 0xB1, 0xF6, 0xE9, + 0x99, 0xB5, 0xF6, 0xE8, 0xAE, 0x80, 0xF6, 0xE6, + 0x8B, 0x8F, 0xF6, 0xE6, 0xA8, 0x82, 0xF6, 0xE8, + 0xAB, 0xBE, 0xF6, 0xE4, 0xB8, 0xB9, 0xF6, 0xE5, + 0xAF, 0xA7, 0xF6, 0xE6, 0x80, 0x92, 0xF6, 0xE7, + 0x8E, 0x87, 0xF6, 0xE7, 0x95, 0xB0, 0xF6, 0xE5, + 0x8C, 0x97, 0xF6, 0xE7, 0xA3, 0xBB, 0xF6, 0xE4, + 0xBE, 0xBF, 0xF6, 0xE5, 0xBE, 0xA9, 0xF6, 0xE4, + 0xB8, 0x8D, 0xF6, 0xE6, 0xB3, 0x8C, 0xF6, 0xE6, + 0x95, 0xB8, 0xF6, 0xE7, 0xB4, 0xA2, 0xF6, 0xE5, + 0x8F, 0x83, 0xF6, 0xE5, 0xA1, 0x9E, 0xF6, 0xE7, + 0x9C, 0x81, 0xF6, 0xE8, 0x91, 0x89, 0xF6, 0xE8, + 0xAA, 0xAA, 0xF6, 0xE6, 0xAE, 0xBA, 0xF6, 0xE8, + 0xBE, 0xB0, 0xF6, 0xE6, 0xB2, 0x88, 0xF6, 0xE6, + 0x8B, 0xBE, 0xF6, 0xE8, 0x8B, 0xA5, 0xF6, 0xE6, + 0x8E, 0xA0, 0xF6, 0xE7, 0x95, 0xA5, 0xF6, 0xE4, + 0xBA, 0xAE, 0xF6, 0xE5, 0x85, 0xA9, 0xF6, 0xE5, + 0x87, 0x89, 0xF6, 0xE6, 0xA2, 0x81, 0xF6, 0xE7, + 0xB3, 0xA7, 0xF6, 0xE8, 0x89, 0xAF, 0xF6, 0xE8, + 0xAB, 0x92, 0xF6, 0xE9, 0x87, 0x8F, 0xF6, 0xE5, + 0x8B, 0xB5, 0xF6, 0xE5, 0x91, 0x82, 0xF6, 0xE5, + 0xA5, 0xB3, 0xF6, 0xE5, 0xBB, 0xAC, 0xF6, 0xE6, + 0x97, 0x85, 0xF6, 0xE6, 0xBF, 0xBE, 0xF6, 0xE7, + 0xA4, 0xAA, 0xF6, 0xE9, 0x96, 0xAD, 0xF6, 0xE9, + 0xA9, 0xAA, 0xF6, 0xE9, 0xBA, 0x97, 0xF6, 0xE9, + 0xBB, 0x8E, 0xF6, 0xE5, 0x8A, 0x9B, 0xF6, 0xE6, + 0x9B, 0x86, 0xF6, 0xE6, 0xAD, 0xB7, 0xF6, 0xE8, + 0xBD, 0xA2, 0xF6, 0xE5, 0xB9, 0xB4, 0xF6, 0xE6, + 0x86, 0x90, 0xF6, 0xE6, 0x88, 0x80, 0xF6, 0xE6, + 0x92, 0x9A, 0xF6, 0xE6, 0xBC, 0xA3, 0xF6, 0xE7, + 0x85, 0x89, 0xF6, 0xE7, 0x92, 0x89, 0xF6, 0xE7, + 0xA7, 0x8A, 0xF6, 0xE7, 0xB7, 0xB4, 0xF6, 0xE8, + 0x81, 0xAF, 0xF6, 0xE8, 0xBC, 0xA6, 0xF6, 0xE8, + 0x93, 0xAE, 0xF6, 0xE9, 0x80, 0xA3, 0xF6, 0xE9, + 0x8D, 0x8A, 0xF6, 0xE5, 0x88, 0x97, 0xF6, 0xE5, + 0x8A, 0xA3, 0xF6, 0xE5, 0x92, 0xBD, 0xF6, 0xE7, + 0x83, 0x88, 0xF6, 0xE8, 0xA3, 0x82, 0xF6, 0xE8, + 0xAA, 0xAA, 0xF6, 0xE5, 0xBB, 0x89, 0xF6, 0xE5, + 0xBF, 0xB5, 0xF6, 0xE6, 0x8D, 0xBB, 0xF6, 0xE6, + 0xAE, 0xAE, 0xF6, 0xE7, 0xB0, 0xBE, 0xF6, 0xE7, + 0x8D, 0xB5, 0xF6, 0xE4, 0xBB, 0xA4, 0xF6, 0xE5, + 0x9B, 0xB9, 0xF6, 0xE5, 0xAF, 0xA7, 0xF6, 0xE5, + 0xB6, 0xBA, 0xF6, 0xE6, 0x80, 0x9C, 0xF6, 0xE7, + 0x8E, 0xB2, 0xF6, 0xE7, 0x91, 0xA9, 0xF6, 0xE7, + 0xBE, 0x9A, 0xF6, 0xE8, 0x81, 0x86, 0xF6, 0xE9, + 0x88, 0xB4, 0xF6, 0xE9, 0x9B, 0xB6, 0xF6, 0xE9, + 0x9D, 0x88, 0xF6, 0xE9, 0xA0, 0x98, 0xF6, 0xE4, + 0xBE, 0x8B, 0xF6, 0xE7, 0xA6, 0xAE, 0xF6, 0xE9, + 0x86, 0xB4, 0xF6, 0xE9, 0x9A, 0xB8, 0xF6, 0xE6, + 0x83, 0xA1, 0xF6, 0xE4, 0xBA, 0x86, 0xF6, 0xE5, + 0x83, 0x9A, 0xF6, 0xE5, 0xAF, 0xAE, 0xF6, 0xE5, + 0xB0, 0xBF, 0xF6, 0xE6, 0x96, 0x99, 0xF6, 0xE6, + 0xA8, 0x82, 0xF6, 0xE7, 0x87, 0x8E, 0xF6, 0xE7, + 0x99, 0x82, 0xF6, 0xE8, 0x93, 0xBC, 0xF6, 0xE9, + 0x81, 0xBC, 0xF6, 0xE9, 0xBE, 0x8D, 0xF6, 0xE6, + 0x9A, 0x88, 0xF6, 0xE9, 0x98, 0xAE, 0xF6, 0xE5, + 0x8A, 0x89, 0xF6, 0xE6, 0x9D, 0xBB, 0xF6, 0xE6, + 0x9F, 0xB3, 0xF6, 0xE6, 0xB5, 0x81, 0xF6, 0xE6, + 0xBA, 0x9C, 0xF6, 0xE7, 0x90, 0x89, 0xF6, 0xE7, + 0x95, 0x99, 0xF6, 0xE7, 0xA1, 0xAB, 0xF6, 0xE7, + 0xB4, 0x90, 0xF6, 0xE9, 0xA1, 0x9E, 0xF6, 0xE5, + 0x85, 0xAD, 0xF6, 0xE6, 0x88, 0xAE, 0xF6, 0xE9, + 0x99, 0xB8, 0xF6, 0xE5, 0x80, 0xAB, 0xF6, 0xE5, + 0xB4, 0x99, 0xF6, 0xE6, 0xB7, 0xAA, 0xF6, 0xE8, + 0xBC, 0xAA, 0xF6, 0xE5, 0xBE, 0x8B, 0xF6, 0xE6, + 0x85, 0x84, 0xF6, 0xE6, 0xA0, 0x97, 0xF6, 0xE7, + 0x8E, 0x87, 0xF6, 0xE9, 0x9A, 0x86, 0xF6, 0xE5, + 0x88, 0xA9, 0xF6, 0xE5, 0x90, 0x8F, 0xF6, 0xE5, + 0xB1, 0xA5, 0xF6, 0xE6, 0x98, 0x93, 0xF6, 0xE6, + 0x9D, 0x8E, 0xF6, 0xE6, 0xA2, 0xA8, 0xF6, 0xE6, + 0xB3, 0xA5, 0xF6, 0xE7, 0x90, 0x86, 0xF6, 0xE7, + 0x97, 0xA2, 0xF6, 0xE7, 0xBD, 0xB9, 0xF6, 0xE8, + 0xA3, 0x8F, 0xF6, 0xE8, 0xA3, 0xA1, 0xF6, 0xE9, + 0x87, 0x8C, 0xF6, 0xE9, 0x9B, 0xA2, 0xF6, 0xE5, + 0x8C, 0xBF, 0xF6, 0xE6, 0xBA, 0xBA, 0xF6, 0xE5, + 0x90, 0x9D, 0xF6, 0xE7, 0x87, 0x90, 0xF6, 0xE7, + 0x92, 0x98, 0xF6, 0xE8, 0x97, 0xBA, 0xF6, 0xE9, + 0x9A, 0xA3, 0xF6, 0xE9, 0xB1, 0x97, 0xF6, 0xE9, + 0xBA, 0x9F, 0xF6, 0xE6, 0x9E, 0x97, 0xF6, 0xE6, + 0xB7, 0x8B, 0xF6, 0xE8, 0x87, 0xA8, 0xF6, 0xE7, + 0xAB, 0x8B, 0xF6, 0xE7, 0xAC, 0xA0, 0xF6, 0xE7, + 0xB2, 0x92, 0xF6, 0xE7, 0x8B, 0x80, 0xF6, 0xE7, + 0x82, 0x99, 0xF6, 0xE8, 0xAD, 0x98, 0xF6, 0xE4, + 0xBB, 0x80, 0xF6, 0xE8, 0x8C, 0xB6, 0xF6, 0xE5, + 0x88, 0xBA, 0xF6, 0xE5, 0x88, 0x87, 0xF6, 0xE5, + 0xBA, 0xA6, 0xF6, 0xE6, 0x8B, 0x93, 0xF6, 0xE7, + 0xB3, 0x96, 0xF6, 0xE5, 0xAE, 0x85, 0xF6, 0xE6, + 0xB4, 0x9E, 0xF6, 0xE6, 0x9A, 0xB4, 0xF6, 0xE8, + 0xBC, 0xBB, 0xF6, 0xE8, 0xA1, 0x8C, 0xF6, 0xE9, + 0x99, 0x8D, 0xF6, 0xE8, 0xA6, 0x8B, 0xF6, 0xE5, + 0xBB, 0x93, 0xF6, 0xE5, 0x85, 0x80, 0xF6, 0xE5, + 0x97, 0x80, 0xF6, 0xE5, 0xA1, 0x9A, 0xF6, 0xE6, + 0x99, 0xB4, 0xF6, 0xE5, 0x87, 0x9E, 0xF6, 0xE7, + 0x8C, 0xAA, 0xF6, 0xE7, 0x9B, 0x8A, 0xF6, 0xE7, + 0xA4, 0xBC, 0xF6, 0xE7, 0xA5, 0x9E, 0xF6, 0xE7, + 0xA5, 0xA5, 0xF6, 0xE7, 0xA6, 0x8F, 0xF6, 0xE9, + 0x9D, 0x96, 0xF6, 0xE7, 0xB2, 0xBE, 0xF6, 0xE7, + 0xBE, 0xBD, 0xF6, 0xE8, 0x98, 0x92, 0xF6, 0xE8, + 0xAB, 0xB8, 0xF6, 0xE9, 0x80, 0xB8, 0xF6, 0xE9, + 0x83, 0xBD, 0xF6, 0xE9, 0xA3, 0xAF, 0xF6, 0xE9, + 0xA3, 0xBC, 0xF6, 0xE9, 0xA4, 0xA8, 0xF6, 0xE9, + 0xB6, 0xB4, 0xF6, 0xE4, 0xBE, 0xAE, 0xF6, 0xE5, + 0x83, 0xA7, 0xF6, 0xE5, 0x85, 0x8D, 0xF6, 0xE5, + 0x8B, 0x89, 0xF6, 0xE5, 0x8B, 0xA4, 0xF6, 0xE5, + 0x8D, 0x91, 0xF6, 0xE5, 0x96, 0x9D, 0xF6, 0xE5, + 0x98, 0x86, 0xF6, 0xE5, 0x99, 0xA8, 0xF6, 0xE5, + 0xA1, 0x80, 0xF6, 0xE5, 0xA2, 0xA8, 0xF6, 0xE5, + 0xB1, 0xA4, 0xF6, 0xE5, 0xB1, 0xAE, 0xF6, 0xE6, + 0x82, 0x94, 0xF6, 0xE6, 0x85, 0xA8, 0xF6, 0xE6, + 0x86, 0x8E, 0xF6, 0xE6, 0x87, 0xB2, 0xF6, 0xE6, + 0x95, 0x8F, 0xF6, 0xE6, 0x97, 0xA2, 0xF6, 0xE6, + 0x9A, 0x91, 0xF6, 0xE6, 0xA2, 0x85, 0xF6, 0xE6, + 0xB5, 0xB7, 0xF6, 0xE6, 0xB8, 0x9A, 0xF6, 0xE6, + 0xBC, 0xA2, 0xF6, 0xE7, 0x85, 0xAE, 0xF6, 0xE7, + 0x88, 0xAB, 0xF6, 0xE7, 0x90, 0xA2, 0xF6, 0xE7, + 0xA2, 0x91, 0xF6, 0xE7, 0xA4, 0xBE, 0xF6, 0xE7, + 0xA5, 0x89, 0xF6, 0xE7, 0xA5, 0x88, 0xF6, 0xE7, + 0xA5, 0x90, 0xF6, 0xE7, 0xA5, 0x96, 0xF6, 0xE7, + 0xA5, 0x9D, 0xF6, 0xE7, 0xA6, 0x8D, 0xF6, 0xE7, + 0xA6, 0x8E, 0xF6, 0xE7, 0xA9, 0x80, 0xF6, 0xE7, + 0xAA, 0x81, 0xF6, 0xE7, 0xAF, 0x80, 0xF6, 0xE7, + 0xB7, 0xB4, 0xF6, 0xE7, 0xB8, 0x89, 0xF6, 0xE7, + 0xB9, 0x81, 0xF6, 0xE7, 0xBD, 0xB2, 0xF6, 0xE8, + 0x80, 0x85, 0xF6, 0xE8, 0x87, 0xAD, 0xF6, 0xE8, + 0x89, 0xB9, 0xF6, 0xE8, 0x89, 0xB9, 0xF6, 0xE8, + 0x91, 0x97, 0xF6, 0xE8, 0xA4, 0x90, 0xF6, 0xE8, + 0xA6, 0x96, 0xF6, 0xE8, 0xAC, 0x81, 0xF6, 0xE8, + 0xAC, 0xB9, 0xF6, 0xE8, 0xB3, 0x93, 0xF6, 0xE8, + 0xB4, 0x88, 0xF6, 0xE8, 0xBE, 0xB6, 0xF6, 0xE9, + 0x80, 0xB8, 0xF6, 0xE9, 0x9B, 0xA3, 0xF6, 0xE9, + 0x9F, 0xBF, 0xF6, 0xE9, 0xA0, 0xBB, 0xF6, 0xE4, + 0xB8, 0xA6, 0xF6, 0xE5, 0x86, 0xB5, 0xF6, 0xE5, + 0x85, 0xA8, 0xF6, 0xE4, 0xBE, 0x80, 0xF6, 0xE5, + 0x85, 0x85, 0xF6, 0xE5, 0x86, 0x80, 0xF6, 0xE5, + 0x8B, 0x87, 0xF6, 0xE5, 0x8B, 0xBA, 0xF6, 0xE5, + 0x96, 0x9D, 0xF6, 0xE5, 0x95, 0x95, 0xF6, 0xE5, + 0x96, 0x99, 0xF6, 0xE5, 0x97, 0xA2, 0xF6, 0xE5, + 0xA1, 0x9A, 0xF6, 0xE5, 0xA2, 0xB3, 0xF6, 0xE5, + 0xA5, 0x84, 0xF6, 0xE5, 0xA5, 0x94, 0xF6, 0xE5, + 0xA9, 0xA2, 0xF6, 0xE5, 0xAC, 0xA8, 0xF6, 0xE5, + 0xBB, 0x92, 0xF6, 0xE5, 0xBB, 0x99, 0xF6, 0xE5, + 0xBD, 0xA9, 0xF6, 0xE5, 0xBE, 0xAD, 0xF6, 0xE6, + 0x83, 0x98, 0xF6, 0xE6, 0x85, 0x8E, 0xF6, 0xE6, + 0x84, 0x88, 0xF6, 0xE6, 0x86, 0x8E, 0xF6, 0xE6, + 0x85, 0xA0, 0xF6, 0xE6, 0x87, 0xB2, 0xF6, 0xE6, + 0x88, 0xB4, 0xF6, 0xE6, 0x8F, 0x84, 0xF6, 0xE6, + 0x90, 0x9C, 0xF6, 0xE6, 0x91, 0x92, 0xF6, 0xE6, + 0x95, 0x96, 0xF6, 0xE6, 0x99, 0xB4, 0xF6, 0xE6, + 0x9C, 0x97, 0xF6, 0xE6, 0x9C, 0x9B, 0xF6, 0xE6, + 0x9D, 0x96, 0xF6, 0xE6, 0xAD, 0xB9, 0xF6, 0xE6, + 0xAE, 0xBA, 0xF6, 0xE6, 0xB5, 0x81, 0xF6, 0xE6, + 0xBB, 0x9B, 0xF6, 0xE6, 0xBB, 0x8B, 0xF6, 0xE6, + 0xBC, 0xA2, 0xF6, 0xE7, 0x80, 0x9E, 0xF6, 0xE7, + 0x85, 0xAE, 0xF6, 0xE7, 0x9E, 0xA7, 0xF6, 0xE7, + 0x88, 0xB5, 0xF6, 0xE7, 0x8A, 0xAF, 0xF6, 0xE7, + 0x8C, 0xAA, 0xF6, 0xE7, 0x91, 0xB1, 0xF6, 0xE7, + 0x94, 0x86, 0xF6, 0xE7, 0x94, 0xBB, 0xF6, 0xE7, + 0x98, 0x9D, 0xF6, 0xE7, 0x98, 0x9F, 0xF6, 0xE7, + 0x9B, 0x8A, 0xF6, 0xE7, 0x9B, 0x9B, 0xF6, 0xE7, + 0x9B, 0xB4, 0xF6, 0xE7, 0x9D, 0x8A, 0xF6, 0xE7, + 0x9D, 0x80, 0xF6, 0xE7, 0xA3, 0x8C, 0xF6, 0xE7, + 0xAA, 0xB1, 0xF6, 0xE7, 0xAF, 0x80, 0xF6, 0xE7, + 0xB1, 0xBB, 0xF6, 0xE7, 0xB5, 0x9B, 0xF6, 0xE7, + 0xB7, 0xB4, 0xF6, 0xE7, 0xBC, 0xBE, 0xF6, 0xE8, + 0x80, 0x85, 0xF6, 0xE8, 0x8D, 0x92, 0xF6, 0xE8, + 0x8F, 0xAF, 0xF6, 0xE8, 0x9D, 0xB9, 0xF6, 0xE8, + 0xA5, 0x81, 0xF6, 0xE8, 0xA6, 0x86, 0xF6, 0xE8, + 0xA6, 0x96, 0xF6, 0xE8, 0xAA, 0xBF, 0xF6, 0xE8, + 0xAB, 0xB8, 0xF6, 0xE8, 0xAB, 0x8B, 0xF6, 0xE8, + 0xAC, 0x81, 0xF6, 0xE8, 0xAB, 0xBE, 0xF6, 0xE8, + 0xAB, 0xAD, 0xF6, 0xE8, 0xAC, 0xB9, 0xF6, 0xE8, + 0xAE, 0x8A, 0xF6, 0xE8, 0xB4, 0x88, 0xF6, 0xE8, + 0xBC, 0xB8, 0xF6, 0xE9, 0x81, 0xB2, 0xF6, 0xE9, + 0x86, 0x99, 0xF6, 0xE9, 0x89, 0xB6, 0xF6, 0xE9, + 0x99, 0xBC, 0xF6, 0xE9, 0x9B, 0xA3, 0xF6, 0xE9, + 0x9D, 0x96, 0xF6, 0xE9, 0x9F, 0x9B, 0xF6, 0xE9, + 0x9F, 0xBF, 0xF6, 0xE9, 0xA0, 0x8B, 0xF6, 0xE9, + 0xA0, 0xBB, 0xF6, 0xE9, 0xAC, 0x92, 0xF6, 0xE9, + 0xBE, 0x9C, 0xF6, 0xF0, 0xA2, 0xA1, 0x8A, 0xF6, + 0xF0, 0xA2, 0xA1, 0x84, 0xF6, 0xF0, 0xA3, 0x8F, + 0x95, 0xF6, 0xE3, 0xAE, 0x9D, 0xF6, 0xE4, 0x80, + 0x98, 0xF6, 0xE4, 0x80, 0xB9, 0xF6, 0xF0, 0xA5, + 0x89, 0x89, 0xF6, 0xF0, 0xA5, 0xB3, 0x90, 0xF6, + 0xF0, 0xA7, 0xBB, 0x93, 0xF6, 0xE9, 0xBD, 0x83, + 0xF6, 0xE9, 0xBE, 0x8E, 0x66, 0x66, 0x66, 0x69, + 0x66, 0x6C, 0x66, 0x66, 0x69, 0x66, 0x66, 0x6C, + 0x73, 0x74, 0x73, 0x74, 0xD5, 0xB4, 0xD5, 0xB6, + 0xD5, 0xB4, 0xD5, 0xA5, 0xD5, 0xB4, 0xD5, 0xAB, + 0xD5, 0xBE, 0xD5, 0xB6, 0xD5, 0xB4, 0xD5, 0xAD, + 0xF6, 0xD7, 0x99, 0xD6, 0xB4, 0xF6, 0xD7, 0xB2, + 0xD6, 0xB7, 0xD7, 0xA2, 0xD7, 0x90, 0xD7, 0x93, + 0xD7, 0x94, 0xD7, 0x9B, 0xD7, 0x9C, 0xD7, 0x9D, + 0xD7, 0xA8, 0xD7, 0xAA, 0x2B, 0xF6, 0xD7, 0xA9, + 0xD7, 0x81, 0xF6, 0xD7, 0xA9, 0xD7, 0x82, 0xF6, + 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0xF6, 0xD7, + 0xA9, 0xD6, 0xBC, 0xD7, 0x82, 0xF6, 0xD7, 0x90, + 0xD6, 0xB7, 0xF6, 0xD7, 0x90, 0xD6, 0xB8, 0xF6, + 0xD7, 0x90, 0xD6, 0xBC, 0xF6, 0xD7, 0x91, 0xD6, + 0xBC, 0xF6, 0xD7, 0x92, 0xD6, 0xBC, 0xF6, 0xD7, + 0x93, 0xD6, 0xBC, 0xF6, 0xD7, 0x94, 0xD6, 0xBC, + 0xF6, 0xD7, 0x95, 0xD6, 0xBC, 0xF6, 0xD7, 0x96, + 0xD6, 0xBC, 0xF6, 0xD7, 0x98, 0xD6, 0xBC, 0xF6, + 0xD7, 0x99, 0xD6, 0xBC, 0xF6, 0xD7, 0x9A, 0xD6, + 0xBC, 0xF6, 0xD7, 0x9B, 0xD6, 0xBC, 0xF6, 0xD7, + 0x9C, 0xD6, 0xBC, 0xF6, 0xD7, 0x9E, 0xD6, 0xBC, + 0xF6, 0xD7, 0xA0, 0xD6, 0xBC, 0xF6, 0xD7, 0xA1, + 0xD6, 0xBC, 0xF6, 0xD7, 0xA3, 0xD6, 0xBC, 0xF6, + 0xD7, 0xA4, 0xD6, 0xBC, 0xF6, 0xD7, 0xA6, 0xD6, + 0xBC, 0xF6, 0xD7, 0xA7, 0xD6, 0xBC, 0xF6, 0xD7, + 0xA8, 0xD6, 0xBC, 0xF6, 0xD7, 0xA9, 0xD6, 0xBC, + 0xF6, 0xD7, 0xAA, 0xD6, 0xBC, 0xF6, 0xD7, 0x95, + 0xD6, 0xB9, 0xF6, 0xD7, 0x91, 0xD6, 0xBF, 0xF6, + 0xD7, 0x9B, 0xD6, 0xBF, 0xF6, 0xD7, 0xA4, 0xD6, + 0xBF, 0xD7, 0x90, 0xD7, 0x9C, 0xD9, 0xB1, 0xD9, + 0xB1, 0xD9, 0xBB, 0xD9, 0xBB, 0xD9, 0xBB, 0xD9, + 0xBB, 0xD9, 0xBE, 0xD9, 0xBE, 0xD9, 0xBE, 0xD9, + 0xBE, 0xDA, 0x80, 0xDA, 0x80, 0xDA, 0x80, 0xDA, + 0x80, 0xD9, 0xBA, 0xD9, 0xBA, 0xD9, 0xBA, 0xD9, + 0xBA, 0xD9, 0xBF, 0xD9, 0xBF, 0xD9, 0xBF, 0xD9, + 0xBF, 0xD9, 0xB9, 0xD9, 0xB9, 0xD9, 0xB9, 0xD9, + 0xB9, 0xDA, 0xA4, 0xDA, 0xA4, 0xDA, 0xA4, 0xDA, + 0xA4, 0xDA, 0xA6, 0xDA, 0xA6, 0xDA, 0xA6, 0xDA, + 0xA6, 0xDA, 0x84, 0xDA, 0x84, 0xDA, 0x84, 0xDA, + 0x84, 0xDA, 0x83, 0xDA, 0x83, 0xDA, 0x83, 0xDA, + 0x83, 0xDA, 0x86, 0xDA, 0x86, 0xDA, 0x86, 0xDA, + 0x86, 0xDA, 0x87, 0xDA, 0x87, 0xDA, 0x87, 0xDA, + 0x87, 0xDA, 0x8D, 0xDA, 0x8D, 0xDA, 0x8C, 0xDA, + 0x8C, 0xDA, 0x8E, 0xDA, 0x8E, 0xDA, 0x88, 0xDA, + 0x88, 0xDA, 0x98, 0xDA, 0x98, 0xDA, 0x91, 0xDA, + 0x91, 0xDA, 0xA9, 0xDA, 0xA9, 0xDA, 0xA9, 0xDA, + 0xA9, 0xDA, 0xAF, 0xDA, 0xAF, 0xDA, 0xAF, 0xDA, + 0xAF, 0xDA, 0xB3, 0xDA, 0xB3, 0xDA, 0xB3, 0xDA, + 0xB3, 0xDA, 0xB1, 0xDA, 0xB1, 0xDA, 0xB1, 0xDA, + 0xB1, 0xDA, 0xBA, 0xDA, 0xBA, 0xDA, 0xBB, 0xDA, + 0xBB, 0xDA, 0xBB, 0xDA, 0xBB, 0xDB, 0x95, 0xD9, + 0x94, 0xDB, 0x95, 0xD9, 0x94, 0xDB, 0x81, 0xDB, + 0x81, 0xDB, 0x81, 0xDB, 0x81, 0xDA, 0xBE, 0xDA, + 0xBE, 0xDA, 0xBE, 0xDA, 0xBE, 0xDB, 0x92, 0xDB, + 0x92, 0xDB, 0x92, 0xD9, 0x94, 0xDB, 0x92, 0xD9, + 0x94, 0xDA, 0xAD, 0xDA, 0xAD, 0xDA, 0xAD, 0xDA, + 0xAD, 0xDB, 0x87, 0xDB, 0x87, 0xDB, 0x86, 0xDB, + 0x86, 0xDB, 0x88, 0xDB, 0x88, 0xDB, 0x87, 0xD9, + 0xB4, 0xDB, 0x8B, 0xDB, 0x8B, 0xDB, 0x85, 0xDB, + 0x85, 0xDB, 0x89, 0xDB, 0x89, 0xDB, 0x90, 0xDB, + 0x90, 0xDB, 0x90, 0xDB, 0x90, 0xD9, 0x89, 0xD9, + 0x89, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0xD9, + 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x95, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x95, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x87, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x87, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0xD9, + 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x88, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x88, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0xD9, + 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x90, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x89, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0xDB, 0x8C, 0xDB, + 0x8C, 0xDB, 0x8C, 0xDB, 0x8C, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x8A, 0xD8, 0xA8, 0xD8, 0xAC, 0xD8, + 0xA8, 0xD8, 0xAD, 0xD8, 0xA8, 0xD8, 0xAE, 0xD8, + 0xA8, 0xD9, 0x85, 0xD8, 0xA8, 0xD9, 0x89, 0xD8, + 0xA8, 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, 0xAC, 0xD8, + 0xAA, 0xD8, 0xAD, 0xD8, 0xAA, 0xD8, 0xAE, 0xD8, + 0xAA, 0xD9, 0x85, 0xD8, 0xAA, 0xD9, 0x89, 0xD8, + 0xAA, 0xD9, 0x8A, 0xD8, 0xAB, 0xD8, 0xAC, 0xD8, + 0xAB, 0xD9, 0x85, 0xD8, 0xAB, 0xD9, 0x89, 0xD8, + 0xAB, 0xD9, 0x8A, 0xD8, 0xAC, 0xD8, 0xAD, 0xD8, + 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD8, + 0xAE, 0xD8, 0xAD, 0xD8, 0xAE, 0xD9, 0x85, 0xD8, + 0xB3, 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, + 0xB3, 0xD8, 0xAE, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD8, 0xB5, 0xD9, 0x85, 0xD8, + 0xB6, 0xD8, 0xAC, 0xD8, 0xB6, 0xD8, 0xAD, 0xD8, + 0xB6, 0xD8, 0xAE, 0xD8, 0xB6, 0xD9, 0x85, 0xD8, + 0xB7, 0xD8, 0xAD, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, + 0xB8, 0xD9, 0x85, 0xD8, 0xB9, 0xD8, 0xAC, 0xD8, + 0xB9, 0xD9, 0x85, 0xD8, 0xBA, 0xD8, 0xAC, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAC, 0xD9, + 0x81, 0xD8, 0xAD, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, + 0x81, 0xD9, 0x85, 0xD9, 0x81, 0xD9, 0x89, 0xD9, + 0x81, 0xD9, 0x8A, 0xD9, 0x82, 0xD8, 0xAD, 0xD9, + 0x82, 0xD9, 0x85, 0xD9, 0x82, 0xD9, 0x89, 0xD9, + 0x82, 0xD9, 0x8A, 0xD9, 0x83, 0xD8, 0xA7, 0xD9, + 0x83, 0xD8, 0xAC, 0xD9, 0x83, 0xD8, 0xAD, 0xD9, + 0x83, 0xD8, 0xAE, 0xD9, 0x83, 0xD9, 0x84, 0xD9, + 0x83, 0xD9, 0x85, 0xD9, 0x83, 0xD9, 0x89, 0xD9, + 0x83, 0xD9, 0x8A, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, + 0x84, 0xD8, 0xAD, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, + 0x84, 0xD9, 0x85, 0xD9, 0x84, 0xD9, 0x89, 0xD9, + 0x84, 0xD9, 0x8A, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, + 0x85, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x89, 0xD9, + 0x85, 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, + 0x86, 0xD8, 0xAD, 0xD9, 0x86, 0xD8, 0xAE, 0xD9, + 0x86, 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x89, 0xD9, + 0x86, 0xD9, 0x8A, 0xD9, 0x87, 0xD8, 0xAC, 0xD9, + 0x87, 0xD9, 0x85, 0xD9, 0x87, 0xD9, 0x89, 0xD9, + 0x87, 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xAE, 0xD9, + 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x89, 0xD9, + 0x8A, 0xD9, 0x8A, 0xD8, 0xB0, 0xD9, 0xB0, 0xD8, + 0xB1, 0xD9, 0xB0, 0xD9, 0x89, 0xD9, 0xB0, 0x20, + 0xD9, 0x8C, 0xD9, 0x91, 0x20, 0xD9, 0x8D, 0xD9, + 0x91, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x20, 0xD9, + 0x8F, 0xD9, 0x91, 0x20, 0xD9, 0x90, 0xD9, 0x91, + 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xB1, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xB2, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x86, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x89, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x8A, 0xD8, 0xA8, 0xD8, 0xB1, 0xD8, 0xA8, 0xD8, + 0xB2, 0xD8, 0xA8, 0xD9, 0x85, 0xD8, 0xA8, 0xD9, + 0x86, 0xD8, 0xA8, 0xD9, 0x89, 0xD8, 0xA8, 0xD9, + 0x8A, 0xD8, 0xAA, 0xD8, 0xB1, 0xD8, 0xAA, 0xD8, + 0xB2, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAA, 0xD9, + 0x86, 0xD8, 0xAA, 0xD9, 0x89, 0xD8, 0xAA, 0xD9, + 0x8A, 0xD8, 0xAB, 0xD8, 0xB1, 0xD8, 0xAB, 0xD8, + 0xB2, 0xD8, 0xAB, 0xD9, 0x85, 0xD8, 0xAB, 0xD9, + 0x86, 0xD8, 0xAB, 0xD9, 0x89, 0xD8, 0xAB, 0xD9, + 0x8A, 0xD9, 0x81, 0xD9, 0x89, 0xD9, 0x81, 0xD9, + 0x8A, 0xD9, 0x82, 0xD9, 0x89, 0xD9, 0x82, 0xD9, + 0x8A, 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x83, 0xD9, + 0x84, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x83, 0xD9, + 0x89, 0xD9, 0x83, 0xD9, 0x8A, 0xD9, 0x84, 0xD9, + 0x85, 0xD9, 0x84, 0xD9, 0x89, 0xD9, 0x84, 0xD9, + 0x8A, 0xD9, 0x85, 0xD8, 0xA7, 0xD9, 0x85, 0xD9, + 0x85, 0xD9, 0x86, 0xD8, 0xB1, 0xD9, 0x86, 0xD8, + 0xB2, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x86, 0xD9, + 0x86, 0xD9, 0x86, 0xD9, 0x89, 0xD9, 0x86, 0xD9, + 0x8A, 0xD9, 0x89, 0xD9, 0xB0, 0xD9, 0x8A, 0xD8, + 0xB1, 0xD9, 0x8A, 0xD8, 0xB2, 0xD9, 0x8A, 0xD9, + 0x85, 0xD9, 0x8A, 0xD9, 0x86, 0xD9, 0x8A, 0xD9, + 0x89, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x87, 0xD8, 0xA8, 0xD8, 0xAC, 0xD8, + 0xA8, 0xD8, 0xAD, 0xD8, 0xA8, 0xD8, 0xAE, 0xD8, + 0xA8, 0xD9, 0x85, 0xD8, 0xA8, 0xD9, 0x87, 0xD8, + 0xAA, 0xD8, 0xAC, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, + 0xAA, 0xD8, 0xAE, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, + 0xAA, 0xD9, 0x87, 0xD8, 0xAB, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + 0xAD, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, + 0xAE, 0xD8, 0xAC, 0xD8, 0xAE, 0xD9, 0x85, 0xD8, + 0xB3, 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, + 0xB3, 0xD8, 0xAE, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD8, 0xB5, 0xD8, 0xAE, 0xD8, + 0xB5, 0xD9, 0x85, 0xD8, 0xB6, 0xD8, 0xAC, 0xD8, + 0xB6, 0xD8, 0xAD, 0xD8, 0xB6, 0xD8, 0xAE, 0xD8, + 0xB6, 0xD9, 0x85, 0xD8, 0xB7, 0xD8, 0xAD, 0xD8, + 0xB8, 0xD9, 0x85, 0xD8, 0xB9, 0xD8, 0xAC, 0xD8, + 0xB9, 0xD9, 0x85, 0xD8, 0xBA, 0xD8, 0xAC, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAC, 0xD9, + 0x81, 0xD8, 0xAD, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, + 0x81, 0xD9, 0x85, 0xD9, 0x82, 0xD8, 0xAD, 0xD9, + 0x82, 0xD9, 0x85, 0xD9, 0x83, 0xD8, 0xAC, 0xD9, + 0x83, 0xD8, 0xAD, 0xD9, 0x83, 0xD8, 0xAE, 0xD9, + 0x83, 0xD9, 0x84, 0xD9, 0x83, 0xD9, 0x85, 0xD9, + 0x84, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, + 0x84, 0xD8, 0xAE, 0xD9, 0x84, 0xD9, 0x85, 0xD9, + 0x84, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, + 0x85, 0xD9, 0x85, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, + 0x86, 0xD8, 0xAD, 0xD9, 0x86, 0xD8, 0xAE, 0xD9, + 0x86, 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x87, 0xD9, + 0x87, 0xD8, 0xAC, 0xD9, 0x87, 0xD9, 0x85, 0xD9, + 0x87, 0xD9, 0xB0, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xAE, 0xD9, + 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x87, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x87, 0xD8, 0xA8, 0xD9, 0x85, 0xD8, + 0xA8, 0xD9, 0x87, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, + 0xAA, 0xD9, 0x87, 0xD8, 0xAB, 0xD9, 0x85, 0xD8, + 0xAB, 0xD9, 0x87, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, + 0xB3, 0xD9, 0x87, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, + 0xB4, 0xD9, 0x87, 0xD9, 0x83, 0xD9, 0x84, 0xD9, + 0x83, 0xD9, 0x85, 0xD9, 0x84, 0xD9, 0x85, 0xD9, + 0x86, 0xD9, 0x85, 0xD9, 0x86, 0xD9, 0x87, 0xD9, + 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x87, 0xD9, + 0x80, 0xD9, 0x8E, 0xD9, 0x91, 0xD9, 0x80, 0xD9, + 0x8F, 0xD9, 0x91, 0xD9, 0x80, 0xD9, 0x90, 0xD9, + 0x91, 0xD8, 0xB7, 0xD9, 0x89, 0xD8, 0xB7, 0xD9, + 0x8A, 0xD8, 0xB9, 0xD9, 0x89, 0xD8, 0xB9, 0xD9, + 0x8A, 0xD8, 0xBA, 0xD9, 0x89, 0xD8, 0xBA, 0xD9, + 0x8A, 0xD8, 0xB3, 0xD9, 0x89, 0xD8, 0xB3, 0xD9, + 0x8A, 0xD8, 0xB4, 0xD9, 0x89, 0xD8, 0xB4, 0xD9, + 0x8A, 0xD8, 0xAD, 0xD9, 0x89, 0xD8, 0xAD, 0xD9, + 0x8A, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xAE, 0xD9, 0x89, 0xD8, 0xAE, 0xD9, + 0x8A, 0xD8, 0xB5, 0xD9, 0x89, 0xD8, 0xB5, 0xD9, + 0x8A, 0xD8, 0xB6, 0xD9, 0x89, 0xD8, 0xB6, 0xD9, + 0x8A, 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, + 0x85, 0xD8, 0xB4, 0xD8, 0xB1, 0xD8, 0xB3, 0xD8, + 0xB1, 0xD8, 0xB5, 0xD8, 0xB1, 0xD8, 0xB6, 0xD8, + 0xB1, 0xD8, 0xB7, 0xD9, 0x89, 0xD8, 0xB7, 0xD9, + 0x8A, 0xD8, 0xB9, 0xD9, 0x89, 0xD8, 0xB9, 0xD9, + 0x8A, 0xD8, 0xBA, 0xD9, 0x89, 0xD8, 0xBA, 0xD9, + 0x8A, 0xD8, 0xB3, 0xD9, 0x89, 0xD8, 0xB3, 0xD9, + 0x8A, 0xD8, 0xB4, 0xD9, 0x89, 0xD8, 0xB4, 0xD9, + 0x8A, 0xD8, 0xAD, 0xD9, 0x89, 0xD8, 0xAD, 0xD9, + 0x8A, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xAE, 0xD9, 0x89, 0xD8, 0xAE, 0xD9, + 0x8A, 0xD8, 0xB5, 0xD9, 0x89, 0xD8, 0xB5, 0xD9, + 0x8A, 0xD8, 0xB6, 0xD9, 0x89, 0xD8, 0xB6, 0xD9, + 0x8A, 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, + 0x85, 0xD8, 0xB4, 0xD8, 0xB1, 0xD8, 0xB3, 0xD8, + 0xB1, 0xD8, 0xB5, 0xD8, 0xB1, 0xD8, 0xB6, 0xD8, + 0xB1, 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, + 0x85, 0xD8, 0xB3, 0xD9, 0x87, 0xD8, 0xB4, 0xD9, + 0x87, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xB3, 0xD8, + 0xAC, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xB3, 0xD8, + 0xAE, 0xD8, 0xB4, 0xD8, 0xAC, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD8, 0xB4, 0xD8, 0xAE, 0xD8, 0xB7, 0xD9, + 0x85, 0xD8, 0xB8, 0xD9, 0x85, 0xD8, 0xA7, 0xD9, + 0x8B, 0xD8, 0xA7, 0xD9, 0x8B, 0xD8, 0xAA, 0xD8, + 0xAC, 0xD9, 0x85, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, + 0xAC, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, + 0xAA, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAA, 0xD8, + 0xAE, 0xD9, 0x85, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, + 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD9, + 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + 0xAD, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, + 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0xD8, 0xB3, 0xD8, + 0xAD, 0xD8, 0xAC, 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD8, 0xB3, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, + 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xB3, 0xD9, + 0x85, 0xD8, 0xAD, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0xD8, + 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB5, 0xD8, + 0xAD, 0xD8, 0xAD, 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, + 0xAD, 0xD8, 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0xD8, + 0xB4, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD9, 0x85, 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, + 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xB4, 0xD9, + 0x85, 0xD9, 0x85, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, + 0x85, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, 0xD8, + 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0xD8, 0xB6, 0xD8, + 0xAE, 0xD9, 0x85, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, + 0xAD, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, + 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB7, 0xD9, + 0x85, 0xD9, 0x8A, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, + 0x85, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x85, 0xD8, + 0xB9, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB9, 0xD9, + 0x85, 0xD9, 0x89, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, + 0x85, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0xD9, 0x81, 0xD8, + 0xAE, 0xD9, 0x85, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, + 0x85, 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, + 0x82, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x84, 0xD8, + 0xAD, 0xD9, 0x85, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, + 0x8A, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, 0xD9, + 0x84, 0xD8, 0xAC, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, + 0xAC, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, + 0x85, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0xD9, + 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x84, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, + 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0xD9, + 0x85, 0xD8, 0xAE, 0xD9, 0x85, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAE, 0xD9, 0x87, 0xD9, 0x85, 0xD8, + 0xAC, 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + 0x86, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x86, 0xD8, + 0xAD, 0xD9, 0x89, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, + 0x85, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, + 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0xD9, 0x86, 0xD9, + 0x85, 0xD9, 0x8A, 0xD9, 0x86, 0xD9, 0x85, 0xD9, + 0x89, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xA8, 0xD8, + 0xAE, 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0xD8, + 0xAA, 0xD8, 0xAE, 0xD9, 0x8A, 0xD8, 0xAA, 0xD8, + 0xAE, 0xD9, 0x89, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, + 0x8A, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0xD8, + 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x89, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, + 0x89, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0xD8, 0xB4, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, + 0x8A, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, + 0x84, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, + 0x85, 0xD9, 0x85, 0xD9, 0x8A, 0xD9, 0x82, 0xD9, + 0x85, 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, + 0x8A, 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, + 0x84, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xB9, 0xD9, + 0x85, 0xD9, 0x8A, 0xD9, 0x83, 0xD9, 0x85, 0xD9, + 0x8A, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, + 0x85, 0xD8, 0xAE, 0xD9, 0x8A, 0xD9, 0x84, 0xD8, + 0xAC, 0xD9, 0x85, 0xD9, 0x83, 0xD9, 0x85, 0xD9, + 0x85, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, + 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0xD9, + 0x81, 0xD9, 0x85, 0xD9, 0x8A, 0xD8, 0xA8, 0xD8, + 0xAD, 0xD9, 0x8A, 0xD9, 0x83, 0xD9, 0x85, 0xD9, + 0x85, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0xD8, 0xB3, 0xD8, + 0xAE, 0xD9, 0x8A, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, + 0x8A, 0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, 0xD9, + 0x82, 0xD9, 0x84, 0xDB, 0x92, 0xD8, 0xA7, 0xD9, + 0x84, 0xD9, 0x84, 0xD9, 0x87, 0xD8, 0xA7, 0xD9, + 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0xD9, 0x85, 0xD8, + 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0xD8, 0xB5, 0xD9, + 0x84, 0xD8, 0xB9, 0xD9, 0x85, 0xD8, 0xB1, 0xD8, + 0xB3, 0xD9, 0x88, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, + 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0xD9, 0x88, 0xD8, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xB5, 0xD9, + 0x84, 0xD9, 0x89, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, + 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, + 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, + 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, + 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x84, + 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, + 0x84, 0xD9, 0x87, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, + 0xA7, 0xD9, 0x84, 0x2C, 0xE3, 0x80, 0x81, 0xE3, + 0x80, 0x82, 0x3A, 0x3B, 0x21, 0x3F, 0xE3, 0x80, + 0x96, 0xE3, 0x80, 0x97, 0x2E, 0x2E, 0x2E, 0x2E, + 0x2E, 0xE2, 0x80, 0x94, 0xE2, 0x80, 0x93, 0x5F, + 0x5F, 0x28, 0x29, 0x7B, 0x7D, 0xE3, 0x80, 0x94, + 0xE3, 0x80, 0x95, 0xE3, 0x80, 0x90, 0xE3, 0x80, + 0x91, 0xE3, 0x80, 0x8A, 0xE3, 0x80, 0x8B, 0xE3, + 0x80, 0x88, 0xE3, 0x80, 0x89, 0xE3, 0x80, 0x8C, + 0xE3, 0x80, 0x8D, 0xE3, 0x80, 0x8E, 0xE3, 0x80, + 0x8F, 0x5B, 0x5D, 0x20, 0xCC, 0x85, 0x20, 0xCC, + 0x85, 0x20, 0xCC, 0x85, 0x20, 0xCC, 0x85, 0x5F, + 0x5F, 0x5F, 0x2C, 0xE3, 0x80, 0x81, 0x2E, 0x3B, + 0x3A, 0x3F, 0x21, 0xE2, 0x80, 0x94, 0x28, 0x29, + 0x7B, 0x7D, 0xE3, 0x80, 0x94, 0xE3, 0x80, 0x95, + 0x23, 0x26, 0x2A, 0x2B, 0x2D, 0x3C, 0x3E, 0x3D, + 0x5C, 0x24, 0x25, 0x40, 0x20, 0xD9, 0x8B, 0xD9, + 0x80, 0xD9, 0x8B, 0x20, 0xD9, 0x8C, 0x20, 0xD9, + 0x8D, 0x20, 0xD9, 0x8E, 0xD9, 0x80, 0xD9, 0x8E, + 0x20, 0xD9, 0x8F, 0xD9, 0x80, 0xD9, 0x8F, 0x20, + 0xD9, 0x90, 0xD9, 0x80, 0xD9, 0x90, 0x20, 0xD9, + 0x91, 0xD9, 0x80, 0xD9, 0x91, 0x20, 0xD9, 0x92, + 0xD9, 0x80, 0xD9, 0x92, 0xD8, 0xA1, 0xD8, 0xA7, + 0xD9, 0x93, 0xD8, 0xA7, 0xD9, 0x93, 0xD8, 0xA7, + 0xD9, 0x94, 0xD8, 0xA7, 0xD9, 0x94, 0xD9, 0x88, + 0xD9, 0x94, 0xD9, 0x88, 0xD9, 0x94, 0xD8, 0xA7, + 0xD9, 0x95, 0xD8, 0xA7, 0xD9, 0x95, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, + 0xD9, 0x94, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, + 0xD8, 0xA7, 0xD8, 0xA8, 0xD8, 0xA8, 0xD8, 0xA8, + 0xD8, 0xA8, 0xD8, 0xA9, 0xD8, 0xA9, 0xD8, 0xAA, + 0xD8, 0xAA, 0xD8, 0xAA, 0xD8, 0xAA, 0xD8, 0xAB, + 0xD8, 0xAB, 0xD8, 0xAB, 0xD8, 0xAB, 0xD8, 0xAC, + 0xD8, 0xAC, 0xD8, 0xAC, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD8, 0xAD, 0xD8, 0xAD, 0xD8, 0xAD, 0xD8, 0xAE, + 0xD8, 0xAE, 0xD8, 0xAE, 0xD8, 0xAE, 0xD8, 0xAF, + 0xD8, 0xAF, 0xD8, 0xB0, 0xD8, 0xB0, 0xD8, 0xB1, + 0xD8, 0xB1, 0xD8, 0xB2, 0xD8, 0xB2, 0xD8, 0xB3, + 0xD8, 0xB3, 0xD8, 0xB3, 0xD8, 0xB3, 0xD8, 0xB4, + 0xD8, 0xB4, 0xD8, 0xB4, 0xD8, 0xB4, 0xD8, 0xB5, + 0xD8, 0xB5, 0xD8, 0xB5, 0xD8, 0xB5, 0xD8, 0xB6, + 0xD8, 0xB6, 0xD8, 0xB6, 0xD8, 0xB6, 0xD8, 0xB7, + 0xD8, 0xB7, 0xD8, 0xB7, 0xD8, 0xB7, 0xD8, 0xB8, + 0xD8, 0xB8, 0xD8, 0xB8, 0xD8, 0xB8, 0xD8, 0xB9, + 0xD8, 0xB9, 0xD8, 0xB9, 0xD8, 0xB9, 0xD8, 0xBA, + 0xD8, 0xBA, 0xD8, 0xBA, 0xD8, 0xBA, 0xD9, 0x81, + 0xD9, 0x81, 0xD9, 0x81, 0xD9, 0x81, 0xD9, 0x82, + 0xD9, 0x82, 0xD9, 0x82, 0xD9, 0x82, 0xD9, 0x83, + 0xD9, 0x83, 0xD9, 0x83, 0xD9, 0x83, 0xD9, 0x84, + 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x85, + 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x86, + 0xD9, 0x86, 0xD9, 0x86, 0xD9, 0x86, 0xD9, 0x87, + 0xD9, 0x87, 0xD9, 0x87, 0xD9, 0x87, 0xD9, 0x88, + 0xD9, 0x88, 0xD9, 0x89, 0xD9, 0x89, 0xD9, 0x8A, + 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x8A, 0xD9, 0x84, + 0xD8, 0xA7, 0xD9, 0x93, 0xD9, 0x84, 0xD8, 0xA7, + 0xD9, 0x93, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xD9, 0x84, + 0xD8, 0xA7, 0xD9, 0x95, 0xD9, 0x84, 0xD8, 0xA7, + 0xD9, 0x95, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x84, + 0xD8, 0xA7, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, + 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, + 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, + 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, + 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, + 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, + 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, + 0xE2, 0xA6, 0x85, 0xE2, 0xA6, 0x86, 0xE3, 0x80, + 0x82, 0xE3, 0x80, 0x8C, 0xE3, 0x80, 0x8D, 0xE3, + 0x80, 0x81, 0xE3, 0x83, 0xBB, 0xE3, 0x83, 0xB2, + 0xE3, 0x82, 0xA1, 0xE3, 0x82, 0xA3, 0xE3, 0x82, + 0xA5, 0xE3, 0x82, 0xA7, 0xE3, 0x82, 0xA9, 0xE3, + 0x83, 0xA3, 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xA7, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0xBC, 0xE3, 0x82, + 0xA2, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xA6, 0xE3, + 0x82, 0xA8, 0xE3, 0x82, 0xAA, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, + 0xB1, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB5, 0xE3, + 0x82, 0xB7, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xBB, + 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0xBF, 0xE3, 0x83, + 0x81, 0xE3, 0x83, 0x84, 0xE3, 0x83, 0x86, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8B, + 0xE3, 0x83, 0x8C, 0xE3, 0x83, 0x8D, 0xE3, 0x83, + 0x8E, 0xE3, 0x83, 0x8F, 0xE3, 0x83, 0x92, 0xE3, + 0x83, 0x95, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0x9B, + 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x9F, 0xE3, 0x83, + 0xA0, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xA2, 0xE3, + 0x83, 0xA4, 0xE3, 0x83, 0xA6, 0xE3, 0x83, 0xA8, + 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xAA, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAD, 0xE3, + 0x83, 0xAF, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0x9A, 0xE1, 0x85, 0xA0, 0xE1, 0x84, + 0x80, 0xE1, 0x84, 0x81, 0xE1, 0x86, 0xAA, 0xE1, + 0x84, 0x82, 0xE1, 0x86, 0xAC, 0xE1, 0x86, 0xAD, + 0xE1, 0x84, 0x83, 0xE1, 0x84, 0x84, 0xE1, 0x84, + 0x85, 0xE1, 0x86, 0xB0, 0xE1, 0x86, 0xB1, 0xE1, + 0x86, 0xB2, 0xE1, 0x86, 0xB3, 0xE1, 0x86, 0xB4, + 0xE1, 0x86, 0xB5, 0xE1, 0x84, 0x9A, 0xE1, 0x84, + 0x86, 0xE1, 0x84, 0x87, 0xE1, 0x84, 0x88, 0xE1, + 0x84, 0xA1, 0xE1, 0x84, 0x89, 0xE1, 0x84, 0x8A, + 0xE1, 0x84, 0x8B, 0xE1, 0x84, 0x8C, 0xE1, 0x84, + 0x8D, 0xE1, 0x84, 0x8E, 0xE1, 0x84, 0x8F, 0xE1, + 0x84, 0x90, 0xE1, 0x84, 0x91, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xA1, 0xE1, 0x85, 0xA2, 0xE1, 0x85, + 0xA3, 0xE1, 0x85, 0xA4, 0xE1, 0x85, 0xA5, 0xE1, + 0x85, 0xA6, 0xE1, 0x85, 0xA7, 0xE1, 0x85, 0xA8, + 0xE1, 0x85, 0xA9, 0xE1, 0x85, 0xAA, 0xE1, 0x85, + 0xAB, 0xE1, 0x85, 0xAC, 0xE1, 0x85, 0xAD, 0xE1, + 0x85, 0xAE, 0xE1, 0x85, 0xAF, 0xE1, 0x85, 0xB0, + 0xE1, 0x85, 0xB1, 0xE1, 0x85, 0xB2, 0xE1, 0x85, + 0xB3, 0xE1, 0x85, 0xB4, 0xE1, 0x85, 0xB5, 0xC2, + 0xA2, 0xC2, 0xA3, 0xC2, 0xAC, 0x20, 0xCC, 0x84, + 0xC2, 0xA6, 0xC2, 0xA5, 0xE2, 0x82, 0xA9, 0xE2, + 0x94, 0x82, 0xE2, 0x86, 0x90, 0xE2, 0x86, 0x91, + 0xE2, 0x86, 0x92, 0xE2, 0x86, 0x93, 0xE2, 0x96, + 0xA0, 0xE2, 0x97, 0x8B, 0xF6, 0xF0, 0x9D, 0x85, + 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xF6, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF6, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xAE, 0xF6, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, + 0xF6, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xF6, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xB1, 0xF6, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xF6, + 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, + 0xF6, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, + 0xA5, 0xF6, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xF6, 0xF0, + 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xAE, 0xF6, 0xF0, 0x9D, 0x86, 0xB9, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, + 0xF6, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, + 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, 0x44, + 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, + 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, + 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, + 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, + 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, + 0x41, 0x43, 0x44, 0x47, 0x4A, 0x4B, 0x4E, 0x4F, + 0x50, 0x51, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x66, 0x68, + 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x44, + 0x45, 0x46, 0x47, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, + 0x4F, 0x50, 0x51, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, + 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, + 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x44, 0x45, + 0x46, 0x47, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4F, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, + 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, + 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, + 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7A, 0xC4, 0xB1, 0xC8, 0xB7, 0xCE, 0x91, 0xCE, + 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, + 0x96, 0xCE, 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, + 0x9A, 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, + 0x9E, 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, + 0x98, 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, + 0xA6, 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xE2, + 0x88, 0x87, 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, + 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, + 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, + 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, + 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x82, 0xCF, 0x83, + 0xCF, 0x84, 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, + 0xCF, 0x88, 0xCF, 0x89, 0xE2, 0x88, 0x82, 0xCE, + 0xB5, 0xCE, 0xB8, 0xCE, 0xBA, 0xCF, 0x86, 0xCF, + 0x81, 0xCF, 0x80, 0xCE, 0x91, 0xCE, 0x92, 0xCE, + 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, + 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, + 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, + 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, 0x98, 0xCE, + 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, + 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xE2, 0x88, 0x87, + 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, + 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, + 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, + 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, + 0xCF, 0x81, 0xCF, 0x82, 0xCF, 0x83, 0xCF, 0x84, + 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, 0xCF, 0x88, + 0xCF, 0x89, 0xE2, 0x88, 0x82, 0xCE, 0xB5, 0xCE, + 0xB8, 0xCE, 0xBA, 0xCF, 0x86, 0xCF, 0x81, 0xCF, + 0x80, 0xCE, 0x91, 0xCE, 0x92, 0xCE, 0x93, 0xCE, + 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, + 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xCE, + 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, 0xCE, + 0xA0, 0xCE, 0xA1, 0xCE, 0x98, 0xCE, 0xA3, 0xCE, + 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, 0xCE, + 0xA8, 0xCE, 0xA9, 0xE2, 0x88, 0x87, 0xCE, 0xB1, + 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, + 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, + 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, + 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, 0xCF, 0x81, + 0xCF, 0x82, 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, + 0xCF, 0x86, 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, + 0xE2, 0x88, 0x82, 0xCE, 0xB5, 0xCE, 0xB8, 0xCE, + 0xBA, 0xCF, 0x86, 0xCF, 0x81, 0xCF, 0x80, 0xCE, + 0x91, 0xCE, 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xCE, + 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, 0x98, 0xCE, + 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, + 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, + 0xA1, 0xCE, 0x98, 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, + 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, + 0xA9, 0xE2, 0x88, 0x87, 0xCE, 0xB1, 0xCE, 0xB2, + 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, + 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, + 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, + 0xCE, 0xBF, 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x82, + 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, 0xCF, 0x86, + 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, 0xE2, 0x88, + 0x82, 0xCE, 0xB5, 0xCE, 0xB8, 0xCE, 0xBA, 0xCF, + 0x86, 0xCF, 0x81, 0xCF, 0x80, 0xCE, 0x91, 0xCE, + 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, + 0x96, 0xCE, 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, + 0x9A, 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, + 0x9E, 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, + 0x98, 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, + 0xA6, 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xE2, + 0x88, 0x87, 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, + 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, + 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, + 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, + 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x82, 0xCF, 0x83, + 0xCF, 0x84, 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, + 0xCF, 0x88, 0xCF, 0x89, 0xE2, 0x88, 0x82, 0xCE, + 0xB5, 0xCE, 0xB8, 0xCE, 0xBA, 0xCF, 0x86, 0xCF, + 0x81, 0xCF, 0x80, 0xCF, 0x9C, 0xCF, 0x9D, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0xF6, 0xE4, 0xB8, 0xBD, 0xF6, 0xE4, 0xB8, + 0xB8, 0xF6, 0xE4, 0xB9, 0x81, 0xF6, 0xF0, 0xA0, + 0x84, 0xA2, 0xF6, 0xE4, 0xBD, 0xA0, 0xF6, 0xE4, + 0xBE, 0xAE, 0xF6, 0xE4, 0xBE, 0xBB, 0xF6, 0xE5, + 0x80, 0x82, 0xF6, 0xE5, 0x81, 0xBA, 0xF6, 0xE5, + 0x82, 0x99, 0xF6, 0xE5, 0x83, 0xA7, 0xF6, 0xE5, + 0x83, 0x8F, 0xF6, 0xE3, 0x92, 0x9E, 0xF6, 0xF0, + 0xA0, 0x98, 0xBA, 0xF6, 0xE5, 0x85, 0x8D, 0xF6, + 0xE5, 0x85, 0x94, 0xF6, 0xE5, 0x85, 0xA4, 0xF6, + 0xE5, 0x85, 0xB7, 0xF6, 0xF0, 0xA0, 0x94, 0x9C, + 0xF6, 0xE3, 0x92, 0xB9, 0xF6, 0xE5, 0x85, 0xA7, + 0xF6, 0xE5, 0x86, 0x8D, 0xF6, 0xF0, 0xA0, 0x95, + 0x8B, 0xF6, 0xE5, 0x86, 0x97, 0xF6, 0xE5, 0x86, + 0xA4, 0xF6, 0xE4, 0xBB, 0x8C, 0xF6, 0xE5, 0x86, + 0xAC, 0xF6, 0xE5, 0x86, 0xB5, 0xF6, 0xF0, 0xA9, + 0x87, 0x9F, 0xF6, 0xE5, 0x87, 0xB5, 0xF6, 0xE5, + 0x88, 0x83, 0xF6, 0xE3, 0x93, 0x9F, 0xF6, 0xE5, + 0x88, 0xBB, 0xF6, 0xE5, 0x89, 0x86, 0xF6, 0xE5, + 0x89, 0xB2, 0xF6, 0xE5, 0x89, 0xB7, 0xF6, 0xE3, + 0x94, 0x95, 0xF6, 0xE5, 0x8B, 0x87, 0xF6, 0xE5, + 0x8B, 0x89, 0xF6, 0xE5, 0x8B, 0xA4, 0xF6, 0xE5, + 0x8B, 0xBA, 0xF6, 0xE5, 0x8C, 0x85, 0xF6, 0xE5, + 0x8C, 0x86, 0xF6, 0xE5, 0x8C, 0x97, 0xF6, 0xE5, + 0x8D, 0x89, 0xF6, 0xE5, 0x8D, 0x91, 0xF6, 0xE5, + 0x8D, 0x9A, 0xF6, 0xE5, 0x8D, 0xB3, 0xF6, 0xE5, + 0x8D, 0xBD, 0xF6, 0xE5, 0x8D, 0xBF, 0xF6, 0xE5, + 0x8D, 0xBF, 0xF6, 0xE5, 0x8D, 0xBF, 0xF6, 0xF0, + 0xA0, 0xA8, 0xAC, 0xF6, 0xE7, 0x81, 0xB0, 0xF6, + 0xE5, 0x8F, 0x8A, 0xF6, 0xE5, 0x8F, 0x9F, 0xF6, + 0xF0, 0xA0, 0xAD, 0xA3, 0xF6, 0xE5, 0x8F, 0xAB, + 0xF6, 0xE5, 0x8F, 0xB1, 0xF6, 0xE5, 0x90, 0x86, + 0xF6, 0xE5, 0x92, 0x9E, 0xF6, 0xE5, 0x90, 0xB8, + 0xF6, 0xE5, 0x91, 0x88, 0xF6, 0xE5, 0x91, 0xA8, + 0xF6, 0xE5, 0x92, 0xA2, 0xF6, 0xE5, 0x93, 0xB6, + 0xF6, 0xE5, 0x94, 0x90, 0xF6, 0xE5, 0x95, 0x93, + 0xF6, 0xE5, 0x95, 0xA3, 0xF6, 0xE5, 0x96, 0x84, + 0xF6, 0xE5, 0x96, 0x84, 0xF6, 0xE5, 0x96, 0x99, + 0xF6, 0xE5, 0x96, 0xAB, 0xF6, 0xE5, 0x96, 0xB3, + 0xF6, 0xE5, 0x97, 0x82, 0xF6, 0xE5, 0x9C, 0x96, + 0xF6, 0xE5, 0x98, 0x86, 0xF6, 0xE5, 0x9C, 0x97, + 0xF6, 0xE5, 0x99, 0x91, 0xF6, 0xE5, 0x99, 0xB4, + 0xF6, 0xE5, 0x88, 0x87, 0xF6, 0xE5, 0xA3, 0xAE, + 0xF6, 0xE5, 0x9F, 0x8E, 0xF6, 0xE5, 0x9F, 0xB4, + 0xF6, 0xE5, 0xA0, 0x8D, 0xF6, 0xE5, 0x9E, 0x8B, + 0xF6, 0xE5, 0xA0, 0xB2, 0xF6, 0xE5, 0xA0, 0xB1, + 0xF6, 0xE5, 0xA2, 0xAC, 0xF6, 0xF0, 0xA1, 0x93, + 0xA4, 0xF6, 0xE5, 0xA3, 0xB2, 0xF6, 0xE5, 0xA3, + 0xB7, 0xF6, 0xE5, 0xA4, 0x86, 0xF6, 0xE5, 0xA4, + 0x9A, 0xF6, 0xE5, 0xA4, 0xA2, 0xF6, 0xE5, 0xA5, + 0xA2, 0xF6, 0xF0, 0xA1, 0x9A, 0xA8, 0xF6, 0xF0, + 0xA1, 0x9B, 0xAA, 0xF6, 0xE5, 0xA7, 0xAC, 0xF6, + 0xE5, 0xA8, 0x9B, 0xF6, 0xE5, 0xA8, 0xA7, 0xF6, + 0xE5, 0xA7, 0x98, 0xF6, 0xE5, 0xA9, 0xA6, 0xF6, + 0xE3, 0x9B, 0xAE, 0xF6, 0xE3, 0x9B, 0xBC, 0xF6, + 0xE5, 0xAC, 0x88, 0xF6, 0xE5, 0xAC, 0xBE, 0xF6, + 0xE5, 0xAC, 0xBE, 0xF6, 0xF0, 0xA1, 0xA7, 0x88, + 0xF6, 0xE5, 0xAF, 0x83, 0xF6, 0xE5, 0xAF, 0x98, + 0xF6, 0xE5, 0xAF, 0xA7, 0xF6, 0xE5, 0xAF, 0xB3, + 0xF6, 0xF0, 0xA1, 0xAC, 0x98, 0xF6, 0xE5, 0xAF, + 0xBF, 0xF6, 0xE5, 0xB0, 0x86, 0xF6, 0xE5, 0xBD, + 0x93, 0xF6, 0xE5, 0xB0, 0xA2, 0xF6, 0xE3, 0x9E, + 0x81, 0xF6, 0xE5, 0xB1, 0xA0, 0xF6, 0xE5, 0xB1, + 0xAE, 0xF6, 0xE5, 0xB3, 0x80, 0xF6, 0xE5, 0xB2, + 0x8D, 0xF6, 0xF0, 0xA1, 0xB7, 0xA4, 0xF6, 0xE5, + 0xB5, 0x83, 0xF6, 0xF0, 0xA1, 0xB7, 0xA6, 0xF6, + 0xE5, 0xB5, 0xAE, 0xF6, 0xE5, 0xB5, 0xAB, 0xF6, + 0xE5, 0xB5, 0xBC, 0xF6, 0xE5, 0xB7, 0xA1, 0xF6, + 0xE5, 0xB7, 0xA2, 0xF6, 0xE3, 0xA0, 0xAF, 0xF6, + 0xE5, 0xB7, 0xBD, 0xF6, 0xE5, 0xB8, 0xA8, 0xF6, + 0xE5, 0xB8, 0xBD, 0xF6, 0xE5, 0xB9, 0xA9, 0xF6, + 0xE3, 0xA1, 0xA2, 0xF6, 0xF0, 0xA2, 0x86, 0x83, + 0xF6, 0xE3, 0xA1, 0xBC, 0xF6, 0xE5, 0xBA, 0xB0, + 0xF6, 0xE5, 0xBA, 0xB3, 0xF6, 0xE5, 0xBA, 0xB6, + 0xF6, 0xE5, 0xBB, 0x8A, 0xF6, 0xF0, 0xAA, 0x8E, + 0x92, 0xF6, 0xE5, 0xBB, 0xBE, 0xF6, 0xF0, 0xA2, + 0x8C, 0xB1, 0xF6, 0xF0, 0xA2, 0x8C, 0xB1, 0xF6, + 0xE8, 0x88, 0x81, 0xF6, 0xE5, 0xBC, 0xA2, 0xF6, + 0xE5, 0xBC, 0xA2, 0xF6, 0xE3, 0xA3, 0x87, 0xF6, + 0xF0, 0xA3, 0x8A, 0xB8, 0xF6, 0xF0, 0xA6, 0x87, + 0x9A, 0xF6, 0xE5, 0xBD, 0xA2, 0xF6, 0xE5, 0xBD, + 0xAB, 0xF6, 0xE3, 0xA3, 0xA3, 0xF6, 0xE5, 0xBE, + 0x9A, 0xF6, 0xE5, 0xBF, 0x8D, 0xF6, 0xE5, 0xBF, + 0x97, 0xF6, 0xE5, 0xBF, 0xB9, 0xF6, 0xE6, 0x82, + 0x81, 0xF6, 0xE3, 0xA4, 0xBA, 0xF6, 0xE3, 0xA4, + 0x9C, 0xF6, 0xE6, 0x82, 0x94, 0xF6, 0xF0, 0xA2, + 0x9B, 0x94, 0xF6, 0xE6, 0x83, 0x87, 0xF6, 0xE6, + 0x85, 0x88, 0xF6, 0xE6, 0x85, 0x8C, 0xF6, 0xE6, + 0x85, 0x8E, 0xF6, 0xE6, 0x85, 0x8C, 0xF6, 0xE6, + 0x85, 0xBA, 0xF6, 0xE6, 0x86, 0x8E, 0xF6, 0xE6, + 0x86, 0xB2, 0xF6, 0xE6, 0x86, 0xA4, 0xF6, 0xE6, + 0x86, 0xAF, 0xF6, 0xE6, 0x87, 0x9E, 0xF6, 0xE6, + 0x87, 0xB2, 0xF6, 0xE6, 0x87, 0xB6, 0xF6, 0xE6, + 0x88, 0x90, 0xF6, 0xE6, 0x88, 0x9B, 0xF6, 0xE6, + 0x89, 0x9D, 0xF6, 0xE6, 0x8A, 0xB1, 0xF6, 0xE6, + 0x8B, 0x94, 0xF6, 0xE6, 0x8D, 0x90, 0xF6, 0xF0, + 0xA2, 0xAC, 0x8C, 0xF6, 0xE6, 0x8C, 0xBD, 0xF6, + 0xE6, 0x8B, 0xBC, 0xF6, 0xE6, 0x8D, 0xA8, 0xF6, + 0xE6, 0x8E, 0x83, 0xF6, 0xE6, 0x8F, 0xA4, 0xF6, + 0xF0, 0xA2, 0xAF, 0xB1, 0xF6, 0xE6, 0x90, 0xA2, + 0xF6, 0xE6, 0x8F, 0x85, 0xF6, 0xE6, 0x8E, 0xA9, + 0xF6, 0xE3, 0xA8, 0xAE, 0xF6, 0xE6, 0x91, 0xA9, + 0xF6, 0xE6, 0x91, 0xBE, 0xF6, 0xE6, 0x92, 0x9D, + 0xF6, 0xE6, 0x91, 0xB7, 0xF6, 0xE3, 0xA9, 0xAC, + 0xF6, 0xE6, 0x95, 0x8F, 0xF6, 0xE6, 0x95, 0xAC, + 0xF6, 0xF0, 0xA3, 0x80, 0x8A, 0xF6, 0xE6, 0x97, + 0xA3, 0xF6, 0xE6, 0x9B, 0xB8, 0xF6, 0xE6, 0x99, + 0x89, 0xF6, 0xE3, 0xAC, 0x99, 0xF6, 0xE6, 0x9A, + 0x91, 0xF6, 0xE3, 0xAC, 0x88, 0xF6, 0xE3, 0xAB, + 0xA4, 0xF6, 0xE5, 0x86, 0x92, 0xF6, 0xE5, 0x86, + 0x95, 0xF6, 0xE6, 0x9C, 0x80, 0xF6, 0xE6, 0x9A, + 0x9C, 0xF6, 0xE8, 0x82, 0xAD, 0xF6, 0xE4, 0x8F, + 0x99, 0xF6, 0xE6, 0x9C, 0x97, 0xF6, 0xE6, 0x9C, + 0x9B, 0xF6, 0xE6, 0x9C, 0xA1, 0xF6, 0xE6, 0x9D, + 0x9E, 0xF6, 0xE6, 0x9D, 0x93, 0xF6, 0xF0, 0xA3, + 0x8F, 0x83, 0xF6, 0xE3, 0xAD, 0x89, 0xF6, 0xE6, + 0x9F, 0xBA, 0xF6, 0xE6, 0x9E, 0x85, 0xF6, 0xE6, + 0xA1, 0x92, 0xF6, 0xE6, 0xA2, 0x85, 0xF6, 0xF0, + 0xA3, 0x91, 0xAD, 0xF6, 0xE6, 0xA2, 0x8E, 0xF6, + 0xE6, 0xA0, 0x9F, 0xF6, 0xE6, 0xA4, 0x94, 0xF6, + 0xE3, 0xAE, 0x9D, 0xF6, 0xE6, 0xA5, 0x82, 0xF6, + 0xE6, 0xA6, 0xA3, 0xF6, 0xE6, 0xA7, 0xAA, 0xF6, + 0xE6, 0xAA, 0xA8, 0xF6, 0xF0, 0xA3, 0x9A, 0xA3, + 0xF6, 0xE6, 0xAB, 0x9B, 0xF6, 0xE3, 0xB0, 0x98, + 0xF6, 0xE6, 0xAC, 0xA1, 0xF6, 0xF0, 0xA3, 0xA2, + 0xA7, 0xF6, 0xE6, 0xAD, 0x94, 0xF6, 0xE3, 0xB1, + 0x8E, 0xF6, 0xE6, 0xAD, 0xB2, 0xF6, 0xE6, 0xAE, + 0x9F, 0xF6, 0xE6, 0xAE, 0xBA, 0xF6, 0xE6, 0xAE, + 0xBB, 0xF6, 0xF0, 0xA3, 0xAA, 0x8D, 0xF6, 0xF0, + 0xA1, 0xB4, 0x8B, 0xF6, 0xF0, 0xA3, 0xAB, 0xBA, + 0xF6, 0xE6, 0xB1, 0x8E, 0xF6, 0xF0, 0xA3, 0xB2, + 0xBC, 0xF6, 0xE6, 0xB2, 0xBF, 0xF6, 0xE6, 0xB3, + 0x8D, 0xF6, 0xE6, 0xB1, 0xA7, 0xF6, 0xE6, 0xB4, + 0x96, 0xF6, 0xE6, 0xB4, 0xBE, 0xF6, 0xE6, 0xB5, + 0xB7, 0xF6, 0xE6, 0xB5, 0x81, 0xF6, 0xE6, 0xB5, + 0xA9, 0xF6, 0xE6, 0xB5, 0xB8, 0xF6, 0xE6, 0xB6, + 0x85, 0xF6, 0xF0, 0xA3, 0xB4, 0x9E, 0xF6, 0xE6, + 0xB4, 0xB4, 0xF6, 0xE6, 0xB8, 0xAF, 0xF6, 0xE6, + 0xB9, 0xAE, 0xF6, 0xE3, 0xB4, 0xB3, 0xF6, 0xE6, + 0xBB, 0x8B, 0xF6, 0xE6, 0xBB, 0x87, 0xF6, 0xF0, + 0xA3, 0xBB, 0x91, 0xF6, 0xE6, 0xB7, 0xB9, 0xF6, + 0xE6, 0xBD, 0xAE, 0xF6, 0xF0, 0xA3, 0xBD, 0x9E, + 0xF6, 0xF0, 0xA3, 0xBE, 0x8E, 0xF6, 0xE6, 0xBF, + 0x86, 0xF6, 0xE7, 0x80, 0xB9, 0xF6, 0xE7, 0x80, + 0x9E, 0xF6, 0xE7, 0x80, 0x9B, 0xF6, 0xE3, 0xB6, + 0x96, 0xF6, 0xE7, 0x81, 0x8A, 0xF6, 0xE7, 0x81, + 0xBD, 0xF6, 0xE7, 0x81, 0xB7, 0xF6, 0xE7, 0x82, + 0xAD, 0xF6, 0xF0, 0xA0, 0x94, 0xA5, 0xF6, 0xE7, + 0x85, 0x85, 0xF6, 0xF0, 0xA4, 0x89, 0xA3, 0xF6, + 0xE7, 0x86, 0x9C, 0xF6, 0xF0, 0xA4, 0x8E, 0xAB, + 0xF6, 0xE7, 0x88, 0xA8, 0xF6, 0xE7, 0x88, 0xB5, + 0xF6, 0xE7, 0x89, 0x90, 0xF6, 0xF0, 0xA4, 0x98, + 0x88, 0xF6, 0xE7, 0x8A, 0x80, 0xF6, 0xE7, 0x8A, + 0x95, 0xF6, 0xF0, 0xA4, 0x9C, 0xB5, 0xF6, 0xF0, + 0xA4, 0xA0, 0x94, 0xF6, 0xE7, 0x8D, 0xBA, 0xF6, + 0xE7, 0x8E, 0x8B, 0xF6, 0xE3, 0xBA, 0xAC, 0xF6, + 0xE7, 0x8E, 0xA5, 0xF6, 0xE3, 0xBA, 0xB8, 0xF6, + 0xE3, 0xBA, 0xB8, 0xF6, 0xE7, 0x91, 0x87, 0xF6, + 0xE7, 0x91, 0x9C, 0xF6, 0xE7, 0x91, 0xB1, 0xF6, + 0xE7, 0x92, 0x85, 0xF6, 0xE7, 0x93, 0x8A, 0xF6, + 0xE3, 0xBC, 0x9B, 0xF6, 0xE7, 0x94, 0xA4, 0xF6, + 0xF0, 0xA4, 0xB0, 0xB6, 0xF6, 0xE7, 0x94, 0xBE, + 0xF6, 0xF0, 0xA4, 0xB2, 0x92, 0xF6, 0xE7, 0x95, + 0xB0, 0xF6, 0xF0, 0xA2, 0x86, 0x9F, 0xF6, 0xE7, + 0x98, 0x90, 0xF6, 0xF0, 0xA4, 0xBE, 0xA1, 0xF6, + 0xF0, 0xA4, 0xBE, 0xB8, 0xF6, 0xF0, 0xA5, 0x81, + 0x84, 0xF6, 0xE3, 0xBF, 0xBC, 0xF6, 0xE4, 0x80, + 0x88, 0xF6, 0xE7, 0x9B, 0xB4, 0xF6, 0xF0, 0xA5, + 0x83, 0xB3, 0xF6, 0xF0, 0xA5, 0x83, 0xB2, 0xF6, + 0xF0, 0xA5, 0x84, 0x99, 0xF6, 0xF0, 0xA5, 0x84, + 0xB3, 0xF6, 0xE7, 0x9C, 0x9E, 0xF6, 0xE7, 0x9C, + 0x9F, 0xF6, 0xE7, 0x9C, 0x9F, 0xF6, 0xE7, 0x9D, + 0x8A, 0xF6, 0xE4, 0x80, 0xB9, 0xF6, 0xE7, 0x9E, + 0x8B, 0xF6, 0xE4, 0x81, 0x86, 0xF6, 0xE4, 0x82, + 0x96, 0xF6, 0xF0, 0xA5, 0x90, 0x9D, 0xF6, 0xE7, + 0xA1, 0x8E, 0xF6, 0xE7, 0xA2, 0x8C, 0xF6, 0xE7, + 0xA3, 0x8C, 0xF6, 0xE4, 0x83, 0xA3, 0xF6, 0xF0, + 0xA5, 0x98, 0xA6, 0xF6, 0xE7, 0xA5, 0x96, 0xF6, + 0xF0, 0xA5, 0x9A, 0x9A, 0xF6, 0xF0, 0xA5, 0x9B, + 0x85, 0xF6, 0xE7, 0xA6, 0x8F, 0xF6, 0xE7, 0xA7, + 0xAB, 0xF6, 0xE4, 0x84, 0xAF, 0xF6, 0xE7, 0xA9, + 0x80, 0xF6, 0xE7, 0xA9, 0x8A, 0xF6, 0xE7, 0xA9, + 0x8F, 0xF6, 0xF0, 0xA5, 0xA5, 0xBC, 0xF6, 0xF0, + 0xA5, 0xAA, 0xA7, 0xF6, 0xF0, 0xA5, 0xAA, 0xA7, + 0xF6, 0xE7, 0xAB, 0xAE, 0xF6, 0xE4, 0x88, 0x82, + 0xF6, 0xF0, 0xA5, 0xAE, 0xAB, 0xF6, 0xE7, 0xAF, + 0x86, 0xF6, 0xE7, 0xAF, 0x89, 0xF6, 0xE4, 0x88, + 0xA7, 0xF6, 0xF0, 0xA5, 0xB2, 0x80, 0xF6, 0xE7, + 0xB3, 0x92, 0xF6, 0xE4, 0x8A, 0xA0, 0xF6, 0xE7, + 0xB3, 0xA8, 0xF6, 0xE7, 0xB3, 0xA3, 0xF6, 0xE7, + 0xB4, 0x80, 0xF6, 0xF0, 0xA5, 0xBE, 0x86, 0xF6, + 0xE7, 0xB5, 0xA3, 0xF6, 0xE4, 0x8C, 0x81, 0xF6, + 0xE7, 0xB7, 0x87, 0xF6, 0xE7, 0xB8, 0x82, 0xF6, + 0xE7, 0xB9, 0x85, 0xF6, 0xE4, 0x8C, 0xB4, 0xF6, + 0xF0, 0xA6, 0x88, 0xA8, 0xF6, 0xF0, 0xA6, 0x89, + 0x87, 0xF6, 0xE4, 0x8D, 0x99, 0xF6, 0xF0, 0xA6, + 0x8B, 0x99, 0xF6, 0xE7, 0xBD, 0xBA, 0xF6, 0xF0, + 0xA6, 0x8C, 0xBE, 0xF6, 0xE7, 0xBE, 0x95, 0xF6, + 0xE7, 0xBF, 0xBA, 0xF6, 0xE8, 0x80, 0x85, 0xF6, + 0xF0, 0xA6, 0x93, 0x9A, 0xF6, 0xF0, 0xA6, 0x94, + 0xA3, 0xF6, 0xE8, 0x81, 0xA0, 0xF6, 0xF0, 0xA6, + 0x96, 0xA8, 0xF6, 0xE8, 0x81, 0xB0, 0xF6, 0xF0, + 0xA3, 0x8D, 0x9F, 0xF6, 0xE4, 0x8F, 0x95, 0xF6, + 0xE8, 0x82, 0xB2, 0xF6, 0xE8, 0x84, 0x83, 0xF6, + 0xE4, 0x90, 0x8B, 0xF6, 0xE8, 0x84, 0xBE, 0xF6, + 0xE5, 0xAA, 0xB5, 0xF6, 0xF0, 0xA6, 0x9E, 0xA7, + 0xF6, 0xF0, 0xA6, 0x9E, 0xB5, 0xF6, 0xF0, 0xA3, + 0x8E, 0x93, 0xF6, 0xF0, 0xA3, 0x8E, 0x9C, 0xF6, + 0xE8, 0x88, 0x81, 0xF6, 0xE8, 0x88, 0x84, 0xF6, + 0xE8, 0xBE, 0x9E, 0xF6, 0xE4, 0x91, 0xAB, 0xF6, + 0xE8, 0x8A, 0x91, 0xF6, 0xE8, 0x8A, 0x8B, 0xF6, + 0xE8, 0x8A, 0x9D, 0xF6, 0xE5, 0x8A, 0xB3, 0xF6, + 0xE8, 0x8A, 0xB1, 0xF6, 0xE8, 0x8A, 0xB3, 0xF6, + 0xE8, 0x8A, 0xBD, 0xF6, 0xE8, 0x8B, 0xA6, 0xF6, + 0xF0, 0xA6, 0xAC, 0xBC, 0xF6, 0xE8, 0x8B, 0xA5, + 0xF6, 0xE8, 0x8C, 0x9D, 0xF6, 0xE8, 0x8D, 0xA3, + 0xF6, 0xE8, 0x8E, 0xAD, 0xF6, 0xE8, 0x8C, 0xA3, + 0xF6, 0xE8, 0x8E, 0xBD, 0xF6, 0xE8, 0x8F, 0xA7, + 0xF6, 0xE8, 0x91, 0x97, 0xF6, 0xE8, 0x8D, 0x93, + 0xF6, 0xE8, 0x8F, 0x8A, 0xF6, 0xE8, 0x8F, 0x8C, + 0xF6, 0xE8, 0x8F, 0x9C, 0xF6, 0xF0, 0xA6, 0xB0, + 0xB6, 0xF6, 0xF0, 0xA6, 0xB5, 0xAB, 0xF6, 0xF0, + 0xA6, 0xB3, 0x95, 0xF6, 0xE4, 0x94, 0xAB, 0xF6, + 0xE8, 0x93, 0xB1, 0xF6, 0xE8, 0x93, 0xB3, 0xF6, + 0xE8, 0x94, 0x96, 0xF6, 0xF0, 0xA7, 0x8F, 0x8A, + 0xF6, 0xE8, 0x95, 0xA4, 0xF6, 0xF0, 0xA6, 0xBC, + 0xAC, 0xF6, 0xE4, 0x95, 0x9D, 0xF6, 0xE4, 0x95, + 0xA1, 0xF6, 0xF0, 0xA6, 0xBE, 0xB1, 0xF6, 0xF0, + 0xA7, 0x83, 0x92, 0xF6, 0xE4, 0x95, 0xAB, 0xF6, + 0xE8, 0x99, 0x90, 0xF6, 0xE8, 0x99, 0x9C, 0xF6, + 0xE8, 0x99, 0xA7, 0xF6, 0xE8, 0x99, 0xA9, 0xF6, + 0xE8, 0x9A, 0xA9, 0xF6, 0xE8, 0x9A, 0x88, 0xF6, + 0xE8, 0x9C, 0x8E, 0xF6, 0xE8, 0x9B, 0xA2, 0xF6, + 0xE8, 0x9D, 0xB9, 0xF6, 0xE8, 0x9C, 0xA8, 0xF6, + 0xE8, 0x9D, 0xAB, 0xF6, 0xE8, 0x9E, 0x86, 0xF6, + 0xE4, 0x97, 0x97, 0xF6, 0xE8, 0x9F, 0xA1, 0xF6, + 0xE8, 0xA0, 0x81, 0xF6, 0xE4, 0x97, 0xB9, 0xF6, + 0xE8, 0xA1, 0xA0, 0xF6, 0xE8, 0xA1, 0xA3, 0xF6, + 0xF0, 0xA7, 0x99, 0xA7, 0xF6, 0xE8, 0xA3, 0x97, + 0xF6, 0xE8, 0xA3, 0x9E, 0xF6, 0xE4, 0x98, 0xB5, + 0xF6, 0xE8, 0xA3, 0xBA, 0xF6, 0xE3, 0x92, 0xBB, + 0xF6, 0xF0, 0xA7, 0xA2, 0xAE, 0xF6, 0xF0, 0xA7, + 0xA5, 0xA6, 0xF6, 0xE4, 0x9A, 0xBE, 0xF6, 0xE4, + 0x9B, 0x87, 0xF6, 0xE8, 0xAA, 0xA0, 0xF6, 0xE8, + 0xAB, 0xAD, 0xF6, 0xE8, 0xAE, 0x8A, 0xF6, 0xE8, + 0xB1, 0x95, 0xF6, 0xF0, 0xA7, 0xB2, 0xA8, 0xF6, + 0xE8, 0xB2, 0xAB, 0xF6, 0xE8, 0xB3, 0x81, 0xF6, + 0xE8, 0xB4, 0x9B, 0xF6, 0xE8, 0xB5, 0xB7, 0xF6, + 0xF0, 0xA7, 0xBC, 0xAF, 0xF6, 0xF0, 0xA0, 0xA0, + 0x84, 0xF6, 0xE8, 0xB7, 0x8B, 0xF6, 0xE8, 0xB6, + 0xBC, 0xF6, 0xE8, 0xB7, 0xB0, 0xF6, 0xF0, 0xA0, + 0xA3, 0x9E, 0xF6, 0xE8, 0xBB, 0x94, 0xF6, 0xE8, + 0xBC, 0xB8, 0xF6, 0xF0, 0xA8, 0x97, 0x92, 0xF6, + 0xF0, 0xA8, 0x97, 0xAD, 0xF6, 0xE9, 0x82, 0x94, + 0xF6, 0xE9, 0x83, 0xB1, 0xF6, 0xE9, 0x84, 0x91, + 0xF6, 0xF0, 0xA8, 0x9C, 0xAE, 0xF6, 0xE9, 0x84, + 0x9B, 0xF6, 0xE9, 0x88, 0xB8, 0xF6, 0xE9, 0x8B, + 0x97, 0xF6, 0xE9, 0x8B, 0x98, 0xF6, 0xE9, 0x89, + 0xBC, 0xF6, 0xE9, 0x8F, 0xB9, 0xF6, 0xE9, 0x90, + 0x95, 0xF6, 0xF0, 0xA8, 0xAF, 0xBA, 0xF6, 0xE9, + 0x96, 0x8B, 0xF6, 0xE4, 0xA6, 0x95, 0xF6, 0xE9, + 0x96, 0xB7, 0xF6, 0xF0, 0xA8, 0xB5, 0xB7, 0xF6, + 0xE4, 0xA7, 0xA6, 0xF6, 0xE9, 0x9B, 0x83, 0xF6, + 0xE5, 0xB6, 0xB2, 0xF6, 0xE9, 0x9C, 0xA3, 0xF6, + 0xF0, 0xA9, 0x85, 0x85, 0xF6, 0xF0, 0xA9, 0x88, + 0x9A, 0xF6, 0xE4, 0xA9, 0xAE, 0xF6, 0xE4, 0xA9, + 0xB6, 0xF6, 0xE9, 0x9F, 0xA0, 0xF6, 0xF0, 0xA9, + 0x90, 0x8A, 0xF6, 0xE4, 0xAA, 0xB2, 0xF6, 0xF0, + 0xA9, 0x92, 0x96, 0xF6, 0xE9, 0xA0, 0x8B, 0xF6, + 0xE9, 0xA0, 0x8B, 0xF6, 0xE9, 0xA0, 0xA9, 0xF6, + 0xF0, 0xA9, 0x96, 0xB6, 0xF6, 0xE9, 0xA3, 0xA2, + 0xF6, 0xE4, 0xAC, 0xB3, 0xF6, 0xE9, 0xA4, 0xA9, + 0xF6, 0xE9, 0xA6, 0xA7, 0xF6, 0xE9, 0xA7, 0x82, + 0xF6, 0xE9, 0xA7, 0xBE, 0xF6, 0xE4, 0xAF, 0x8E, + 0xF6, 0xF0, 0xA9, 0xAC, 0xB0, 0xF6, 0xE9, 0xAC, + 0x92, 0xF6, 0xE9, 0xB1, 0x80, 0xF6, 0xE9, 0xB3, + 0xBD, 0xF6, 0xE4, 0xB3, 0x8E, 0xF6, 0xE4, 0xB3, + 0xAD, 0xF6, 0xE9, 0xB5, 0xA7, 0xF6, 0xF0, 0xAA, + 0x83, 0x8E, 0xF6, 0xE4, 0xB3, 0xB8, 0xF6, 0xF0, + 0xAA, 0x84, 0x85, 0xF6, 0xF0, 0xAA, 0x88, 0x8E, + 0xF6, 0xF0, 0xAA, 0x8A, 0x91, 0xF6, 0xE9, 0xBA, + 0xBB, 0xF6, 0xE4, 0xB5, 0x96, 0xF6, 0xE9, 0xBB, + 0xB9, 0xF6, 0xE9, 0xBB, 0xBE, 0xF6, 0xE9, 0xBC, + 0x85, 0xF6, 0xE9, 0xBC, 0x8F, 0xF6, 0xE9, 0xBC, + 0x96, 0xF6, 0xE9, 0xBC, 0xBB, 0xF6, 0xF0, 0xAA, + 0x98, 0x80, + }, +}; + +static const uchar_t u8_case_common_b2_tbl[2][2][256] = { + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, 1, 2, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 3, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 4, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + { + { + 0, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, 1, 2, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, 3, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + { + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + 4, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + N_, N_, N_, N_, N_, N_, N_, N_, + }, + + }, + +}; + +static const u8_displacement_t u8_tolower_b3_tbl[2][5][256] = { + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { 0, 0 }, + { 1, 60 }, { 2, 123 }, { 3, 185 }, { 4, 257 }, + { 5, 321 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 6, 373 }, { 7, 439 }, + { 8, 465 }, { 9, 561 }, { 10, 593 }, { 11, 649 }, + { 12, 703 }, { 13, 749 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 14, 795 }, { 15, 891 }, { 16, 987 }, { 17, 1068 }, + { 18, 1155 }, { 19, 1245 }, { 20, 1299 }, { 21, 1386 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 22, 1443 }, { 23, 1448 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 24, 1496 }, { 25, 1526 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 26, 1574 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 27, 1652 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + }, + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { 0, 0 }, + { 1, 60 }, { 2, 123 }, { 3, 185 }, { 4, 257 }, + { 5, 321 }, { 6, 383 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 7, 401 }, { 8, 467 }, + { 9, 505 }, { 10, 601 }, { 11, 633 }, { 12, 689 }, + { 13, 753 }, { 14, 803 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 15, 849 }, { 16, 945 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 17, 963 }, { 18, 1059 }, { 19, 1155 }, { 20, 1236 }, + { 21, 1323 }, { 22, 1413 }, { 23, 1467 }, { 24, 1554 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 25, 1611 }, { 26, 1619 }, { 27, 1667 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 28, 1670 }, { 29, 1700 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 30, 1748 }, { 31, 1889 }, { 32, 1911 }, { 33, 2007 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 34, 2061 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 35, 2139 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + }, +}; + +static const uchar_t u8_tolower_b4_tbl[2][36][257] = { + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 48, 50, 52, 54, 56, 58, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 49, 49, 51, 51, 53, 53, 55, + 55, 55, 57, 57, 59, 59, 61, 61, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 8, 10, 10, 12, 12, 14, + 14, 16, 16, 18, 18, 20, 20, 22, + 22, 24, 24, 26, 26, 28, 28, 30, + 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, + 46, 48, 48, 50, 50, 52, 52, 54, + 54, 56, 58, 58, 60, 60, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 4, 4, 6, 6, 8, + 10, 10, 12, 14, 16, 16, 16, 18, + 20, 22, 24, 24, 26, 28, 28, 30, + 32, 34, 34, 34, 34, 36, 38, 38, + 40, 42, 42, 44, 44, 46, 46, 48, + 50, 50, 52, 52, 52, 54, 54, 56, + 58, 58, 60, 62, 64, 64, 66, 66, + 68, 70, 70, 70, 70, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 4, 4, + 6, 8, 8, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 28, 30, + 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, + 46, 46, 48, 50, 50, 52, 52, 54, + 56, 58, 58, 60, 60, 62, 62, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 50, 50, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 2, 4, 6, 8, 8, 10, 10, 12, + 14, 14, 16, 18, 20, 22, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 48, 50, 52, 54, 56, + 58, 60, 62, 64, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 24, 24, 24, 24, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 50, 50, 52, 52, 54, 54, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 14, 16, 16, 18, 18, 20, 20, 22, + 22, 24, 24, 26, 26, 28, 28, 30, + 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, + 46, 48, 48, 50, 50, 52, 52, 52, + 52, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 18, 20, 22, 24, 26, 28, + 30, 32, 34, 36, 38, 40, 42, 44, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 90, 90, 93, 93, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 90, 90, 93, 93, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 36, 36, 39, 39, 42, 42, 45, + 45, 48, 48, 51, 51, 54, 54, 57, + 57, 60, 60, 63, 63, 66, 66, 69, + 69, 72, 72, 75, 75, 78, 78, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 60, 63, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 69, 72, 75, 78, 81, 84, 87, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 21, 21, 24, 24, 27, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 33, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 75, 78, 81, 84, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 18, 21, 24, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 30, 33, 36, 39, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 2, 2, 2, 3, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, + 6, 9, 12, 15, 18, 21, 24, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 48, 51, 54, 57, 60, 63, 66, + 69, 72, 75, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, + 152, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + }, + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 48, 50, 52, 54, 56, 58, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 49, 49, 51, 51, 53, 53, 55, + 55, 55, 57, 57, 59, 59, 61, 61, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 8, 10, 10, 12, 12, 14, + 14, 16, 16, 18, 18, 20, 20, 22, + 22, 24, 24, 26, 26, 28, 28, 30, + 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, + 46, 48, 48, 50, 50, 52, 52, 54, + 54, 56, 58, 58, 60, 60, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 4, 4, 6, 6, 8, + 10, 10, 12, 14, 16, 16, 16, 18, + 20, 22, 24, 24, 26, 28, 28, 30, + 32, 34, 34, 34, 34, 36, 38, 38, + 40, 42, 42, 44, 44, 46, 46, 48, + 50, 50, 52, 52, 52, 54, 54, 56, + 58, 58, 60, 62, 64, 64, 66, 66, + 68, 70, 70, 70, 70, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 4, 4, + 6, 8, 8, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 28, 30, + 30, 32, 32, 34, 34, 36, 36, 38, + 38, 40, 40, 42, 42, 44, 44, 46, + 46, 46, 48, 50, 50, 52, 52, 54, + 56, 58, 58, 60, 60, 62, 62, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 50, 50, 52, 52, 52, 52, 52, + 52, 52, 52, 55, 57, 57, 59, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 6, 8, 10, + 10, 12, 12, 14, 14, 16, 16, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 2, 4, 6, 8, 8, 10, 10, 12, + 14, 14, 16, 18, 20, 22, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 48, 50, 52, 54, 56, + 58, 60, 62, 64, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 24, 24, 24, 24, 26, 26, 26, + 28, 28, 30, 32, 32, 32, 34, 36, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, + 80, 82, 84, 86, 88, 90, 92, 94, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 50, 50, 52, 52, 54, 54, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 4, 6, 6, 8, 8, + 10, 10, 12, 12, 14, 14, 16, 16, + 16, 18, 18, 20, 20, 22, 22, 24, + 24, 26, 26, 28, 28, 30, 30, 32, + 32, 34, 34, 36, 36, 38, 38, 40, + 40, 42, 42, 44, 44, 46, 46, 48, + 48, 50, 50, 52, 52, 54, 54, 56, + 56, 58, 58, 60, 60, 62, 62, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 12, 12, 14, 14, 16, + 16, 18, 18, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 22, 24, 26, 28, 30, 32, + 34, 36, 38, 40, 42, 44, 46, 48, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 90, 90, 93, 93, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 90, 90, 93, 93, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 36, 36, 39, 39, 42, 42, 45, + 45, 48, 48, 51, 51, 54, 54, 57, + 57, 60, 60, 63, 63, 66, 66, 69, + 69, 72, 72, 75, 75, 78, 78, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, + 81, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 60, 63, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 69, 72, 75, 78, 81, 84, 87, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 21, 21, 24, 24, 27, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 33, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 75, 78, 81, 84, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 18, 21, 24, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 30, 33, 36, 39, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 2, 2, 2, 3, 5, 5, 5, 5, + 5, 5, 5, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, + 6, 9, 12, 15, 18, 21, 24, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 117, + 120, 123, 126, 129, 132, 135, 138, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, + 141, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 5, 8, 10, 10, 10, + 13, 13, 16, 16, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 57, 57, 60, + 60, 63, 63, 66, 66, 69, 69, 72, + 72, 75, 75, 78, 78, 81, 81, 84, + 84, 87, 87, 90, 90, 93, 93, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 3, 6, 6, 9, 9, 12, + 12, 15, 15, 18, 18, 21, 21, 24, + 24, 27, 27, 30, 30, 33, 33, 36, + 36, 39, 39, 42, 42, 45, 45, 48, + 48, 51, 51, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 48, 51, 54, 57, 60, 63, 66, + 69, 72, 75, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140, 144, 148, 152, 156, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, + }, + }, +}; + +static const uchar_t u8_tolower_final_tbl[2][2299] = { + { + 0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3, + 0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7, + 0xC3, 0xA8, 0xC3, 0xA9, 0xC3, 0xAA, 0xC3, 0xAB, + 0xC3, 0xAC, 0xC3, 0xAD, 0xC3, 0xAE, 0xC3, 0xAF, + 0xC3, 0xB0, 0xC3, 0xB1, 0xC3, 0xB2, 0xC3, 0xB3, + 0xC3, 0xB4, 0xC3, 0xB5, 0xC3, 0xB6, 0xC3, 0xB8, + 0xC3, 0xB9, 0xC3, 0xBA, 0xC3, 0xBB, 0xC3, 0xBC, + 0xC3, 0xBD, 0xC3, 0xBE, 0xC4, 0x81, 0xC4, 0x83, + 0xC4, 0x85, 0xC4, 0x87, 0xC4, 0x89, 0xC4, 0x8B, + 0xC4, 0x8D, 0xC4, 0x8F, 0xC4, 0x91, 0xC4, 0x93, + 0xC4, 0x95, 0xC4, 0x97, 0xC4, 0x99, 0xC4, 0x9B, + 0xC4, 0x9D, 0xC4, 0x9F, 0xC4, 0xA1, 0xC4, 0xA3, + 0xC4, 0xA5, 0xC4, 0xA7, 0xC4, 0xA9, 0xC4, 0xAB, + 0xC4, 0xAD, 0xC4, 0xAF, 0x69, 0xC4, 0xB3, 0xC4, + 0xB5, 0xC4, 0xB7, 0xC4, 0xBA, 0xC4, 0xBC, 0xC4, + 0xBE, 0xC5, 0x80, 0xC5, 0x82, 0xC5, 0x84, 0xC5, + 0x86, 0xC5, 0x88, 0xC5, 0x8B, 0xC5, 0x8D, 0xC5, + 0x8F, 0xC5, 0x91, 0xC5, 0x93, 0xC5, 0x95, 0xC5, + 0x97, 0xC5, 0x99, 0xC5, 0x9B, 0xC5, 0x9D, 0xC5, + 0x9F, 0xC5, 0xA1, 0xC5, 0xA3, 0xC5, 0xA5, 0xC5, + 0xA7, 0xC5, 0xA9, 0xC5, 0xAB, 0xC5, 0xAD, 0xC5, + 0xAF, 0xC5, 0xB1, 0xC5, 0xB3, 0xC5, 0xB5, 0xC5, + 0xB7, 0xC3, 0xBF, 0xC5, 0xBA, 0xC5, 0xBC, 0xC5, + 0xBE, 0xC9, 0x93, 0xC6, 0x83, 0xC6, 0x85, 0xC9, + 0x94, 0xC6, 0x88, 0xC9, 0x96, 0xC9, 0x97, 0xC6, + 0x8C, 0xC7, 0x9D, 0xC9, 0x99, 0xC9, 0x9B, 0xC6, + 0x92, 0xC9, 0xA0, 0xC9, 0xA3, 0xC9, 0xA9, 0xC9, + 0xA8, 0xC6, 0x99, 0xC9, 0xAF, 0xC9, 0xB2, 0xC9, + 0xB5, 0xC6, 0xA1, 0xC6, 0xA3, 0xC6, 0xA5, 0xCA, + 0x80, 0xC6, 0xA8, 0xCA, 0x83, 0xC6, 0xAD, 0xCA, + 0x88, 0xC6, 0xB0, 0xCA, 0x8A, 0xCA, 0x8B, 0xC6, + 0xB4, 0xC6, 0xB6, 0xCA, 0x92, 0xC6, 0xB9, 0xC6, + 0xBD, 0xC7, 0x86, 0xC7, 0x86, 0xC7, 0x89, 0xC7, + 0x89, 0xC7, 0x8C, 0xC7, 0x8C, 0xC7, 0x8E, 0xC7, + 0x90, 0xC7, 0x92, 0xC7, 0x94, 0xC7, 0x96, 0xC7, + 0x98, 0xC7, 0x9A, 0xC7, 0x9C, 0xC7, 0x9F, 0xC7, + 0xA1, 0xC7, 0xA3, 0xC7, 0xA5, 0xC7, 0xA7, 0xC7, + 0xA9, 0xC7, 0xAB, 0xC7, 0xAD, 0xC7, 0xAF, 0xC7, + 0xB3, 0xC7, 0xB3, 0xC7, 0xB5, 0xC6, 0x95, 0xC6, + 0xBF, 0xC7, 0xB9, 0xC7, 0xBB, 0xC7, 0xBD, 0xC7, + 0xBF, 0xC8, 0x81, 0xC8, 0x83, 0xC8, 0x85, 0xC8, + 0x87, 0xC8, 0x89, 0xC8, 0x8B, 0xC8, 0x8D, 0xC8, + 0x8F, 0xC8, 0x91, 0xC8, 0x93, 0xC8, 0x95, 0xC8, + 0x97, 0xC8, 0x99, 0xC8, 0x9B, 0xC8, 0x9D, 0xC8, + 0x9F, 0xC6, 0x9E, 0xC8, 0xA3, 0xC8, 0xA5, 0xC8, + 0xA7, 0xC8, 0xA9, 0xC8, 0xAB, 0xC8, 0xAD, 0xC8, + 0xAF, 0xC8, 0xB1, 0xC8, 0xB3, 0xCE, 0xAC, 0xCE, + 0xAD, 0xCE, 0xAE, 0xCE, 0xAF, 0xCF, 0x8C, 0xCF, + 0x8D, 0xCF, 0x8E, 0xCE, 0xB1, 0xCE, 0xB2, 0xCE, + 0xB3, 0xCE, 0xB4, 0xCE, 0xB5, 0xCE, 0xB6, 0xCE, + 0xB7, 0xCE, 0xB8, 0xCE, 0xB9, 0xCE, 0xBA, 0xCE, + 0xBB, 0xCE, 0xBC, 0xCE, 0xBD, 0xCE, 0xBE, 0xCE, + 0xBF, 0xCF, 0x80, 0xCF, 0x81, 0xCF, 0x83, 0xCF, + 0x84, 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, 0xCF, + 0x88, 0xCF, 0x89, 0xCF, 0x8A, 0xCF, 0x8B, 0xCF, + 0x99, 0xCF, 0x9B, 0xCF, 0x9D, 0xCF, 0x9F, 0xCF, + 0xA1, 0xCF, 0xA3, 0xCF, 0xA5, 0xCF, 0xA7, 0xCF, + 0xA9, 0xCF, 0xAB, 0xCF, 0xAD, 0xCF, 0xAF, 0xCE, + 0xB8, 0xD1, 0x90, 0xD1, 0x91, 0xD1, 0x92, 0xD1, + 0x93, 0xD1, 0x94, 0xD1, 0x95, 0xD1, 0x96, 0xD1, + 0x97, 0xD1, 0x98, 0xD1, 0x99, 0xD1, 0x9A, 0xD1, + 0x9B, 0xD1, 0x9C, 0xD1, 0x9D, 0xD1, 0x9E, 0xD1, + 0x9F, 0xD0, 0xB0, 0xD0, 0xB1, 0xD0, 0xB2, 0xD0, + 0xB3, 0xD0, 0xB4, 0xD0, 0xB5, 0xD0, 0xB6, 0xD0, + 0xB7, 0xD0, 0xB8, 0xD0, 0xB9, 0xD0, 0xBA, 0xD0, + 0xBB, 0xD0, 0xBC, 0xD0, 0xBD, 0xD0, 0xBE, 0xD0, + 0xBF, 0xD1, 0x80, 0xD1, 0x81, 0xD1, 0x82, 0xD1, + 0x83, 0xD1, 0x84, 0xD1, 0x85, 0xD1, 0x86, 0xD1, + 0x87, 0xD1, 0x88, 0xD1, 0x89, 0xD1, 0x8A, 0xD1, + 0x8B, 0xD1, 0x8C, 0xD1, 0x8D, 0xD1, 0x8E, 0xD1, + 0x8F, 0xD1, 0xA1, 0xD1, 0xA3, 0xD1, 0xA5, 0xD1, + 0xA7, 0xD1, 0xA9, 0xD1, 0xAB, 0xD1, 0xAD, 0xD1, + 0xAF, 0xD1, 0xB1, 0xD1, 0xB3, 0xD1, 0xB5, 0xD1, + 0xB7, 0xD1, 0xB9, 0xD1, 0xBB, 0xD1, 0xBD, 0xD1, + 0xBF, 0xD2, 0x81, 0xD2, 0x8B, 0xD2, 0x8D, 0xD2, + 0x8F, 0xD2, 0x91, 0xD2, 0x93, 0xD2, 0x95, 0xD2, + 0x97, 0xD2, 0x99, 0xD2, 0x9B, 0xD2, 0x9D, 0xD2, + 0x9F, 0xD2, 0xA1, 0xD2, 0xA3, 0xD2, 0xA5, 0xD2, + 0xA7, 0xD2, 0xA9, 0xD2, 0xAB, 0xD2, 0xAD, 0xD2, + 0xAF, 0xD2, 0xB1, 0xD2, 0xB3, 0xD2, 0xB5, 0xD2, + 0xB7, 0xD2, 0xB9, 0xD2, 0xBB, 0xD2, 0xBD, 0xD2, + 0xBF, 0xD3, 0x82, 0xD3, 0x84, 0xD3, 0x86, 0xD3, + 0x88, 0xD3, 0x8A, 0xD3, 0x8C, 0xD3, 0x8E, 0xD3, + 0x91, 0xD3, 0x93, 0xD3, 0x95, 0xD3, 0x97, 0xD3, + 0x99, 0xD3, 0x9B, 0xD3, 0x9D, 0xD3, 0x9F, 0xD3, + 0xA1, 0xD3, 0xA3, 0xD3, 0xA5, 0xD3, 0xA7, 0xD3, + 0xA9, 0xD3, 0xAB, 0xD3, 0xAD, 0xD3, 0xAF, 0xD3, + 0xB1, 0xD3, 0xB3, 0xD3, 0xB5, 0xD3, 0xB9, 0xD4, + 0x81, 0xD4, 0x83, 0xD4, 0x85, 0xD4, 0x87, 0xD4, + 0x89, 0xD4, 0x8B, 0xD4, 0x8D, 0xD4, 0x8F, 0xD5, + 0xA1, 0xD5, 0xA2, 0xD5, 0xA3, 0xD5, 0xA4, 0xD5, + 0xA5, 0xD5, 0xA6, 0xD5, 0xA7, 0xD5, 0xA8, 0xD5, + 0xA9, 0xD5, 0xAA, 0xD5, 0xAB, 0xD5, 0xAC, 0xD5, + 0xAD, 0xD5, 0xAE, 0xD5, 0xAF, 0xD5, 0xB0, 0xD5, + 0xB1, 0xD5, 0xB2, 0xD5, 0xB3, 0xD5, 0xB4, 0xD5, + 0xB5, 0xD5, 0xB6, 0xD5, 0xB7, 0xD5, 0xB8, 0xD5, + 0xB9, 0xD5, 0xBA, 0xD5, 0xBB, 0xD5, 0xBC, 0xD5, + 0xBD, 0xD5, 0xBE, 0xD5, 0xBF, 0xD6, 0x80, 0xD6, + 0x81, 0xD6, 0x82, 0xD6, 0x83, 0xD6, 0x84, 0xD6, + 0x85, 0xD6, 0x86, 0xE1, 0xB8, 0x81, 0xE1, 0xB8, + 0x83, 0xE1, 0xB8, 0x85, 0xE1, 0xB8, 0x87, 0xE1, + 0xB8, 0x89, 0xE1, 0xB8, 0x8B, 0xE1, 0xB8, 0x8D, + 0xE1, 0xB8, 0x8F, 0xE1, 0xB8, 0x91, 0xE1, 0xB8, + 0x93, 0xE1, 0xB8, 0x95, 0xE1, 0xB8, 0x97, 0xE1, + 0xB8, 0x99, 0xE1, 0xB8, 0x9B, 0xE1, 0xB8, 0x9D, + 0xE1, 0xB8, 0x9F, 0xE1, 0xB8, 0xA1, 0xE1, 0xB8, + 0xA3, 0xE1, 0xB8, 0xA5, 0xE1, 0xB8, 0xA7, 0xE1, + 0xB8, 0xA9, 0xE1, 0xB8, 0xAB, 0xE1, 0xB8, 0xAD, + 0xE1, 0xB8, 0xAF, 0xE1, 0xB8, 0xB1, 0xE1, 0xB8, + 0xB3, 0xE1, 0xB8, 0xB5, 0xE1, 0xB8, 0xB7, 0xE1, + 0xB8, 0xB9, 0xE1, 0xB8, 0xBB, 0xE1, 0xB8, 0xBD, + 0xE1, 0xB8, 0xBF, 0xE1, 0xB9, 0x81, 0xE1, 0xB9, + 0x83, 0xE1, 0xB9, 0x85, 0xE1, 0xB9, 0x87, 0xE1, + 0xB9, 0x89, 0xE1, 0xB9, 0x8B, 0xE1, 0xB9, 0x8D, + 0xE1, 0xB9, 0x8F, 0xE1, 0xB9, 0x91, 0xE1, 0xB9, + 0x93, 0xE1, 0xB9, 0x95, 0xE1, 0xB9, 0x97, 0xE1, + 0xB9, 0x99, 0xE1, 0xB9, 0x9B, 0xE1, 0xB9, 0x9D, + 0xE1, 0xB9, 0x9F, 0xE1, 0xB9, 0xA1, 0xE1, 0xB9, + 0xA3, 0xE1, 0xB9, 0xA5, 0xE1, 0xB9, 0xA7, 0xE1, + 0xB9, 0xA9, 0xE1, 0xB9, 0xAB, 0xE1, 0xB9, 0xAD, + 0xE1, 0xB9, 0xAF, 0xE1, 0xB9, 0xB1, 0xE1, 0xB9, + 0xB3, 0xE1, 0xB9, 0xB5, 0xE1, 0xB9, 0xB7, 0xE1, + 0xB9, 0xB9, 0xE1, 0xB9, 0xBB, 0xE1, 0xB9, 0xBD, + 0xE1, 0xB9, 0xBF, 0xE1, 0xBA, 0x81, 0xE1, 0xBA, + 0x83, 0xE1, 0xBA, 0x85, 0xE1, 0xBA, 0x87, 0xE1, + 0xBA, 0x89, 0xE1, 0xBA, 0x8B, 0xE1, 0xBA, 0x8D, + 0xE1, 0xBA, 0x8F, 0xE1, 0xBA, 0x91, 0xE1, 0xBA, + 0x93, 0xE1, 0xBA, 0x95, 0xE1, 0xBA, 0xA1, 0xE1, + 0xBA, 0xA3, 0xE1, 0xBA, 0xA5, 0xE1, 0xBA, 0xA7, + 0xE1, 0xBA, 0xA9, 0xE1, 0xBA, 0xAB, 0xE1, 0xBA, + 0xAD, 0xE1, 0xBA, 0xAF, 0xE1, 0xBA, 0xB1, 0xE1, + 0xBA, 0xB3, 0xE1, 0xBA, 0xB5, 0xE1, 0xBA, 0xB7, + 0xE1, 0xBA, 0xB9, 0xE1, 0xBA, 0xBB, 0xE1, 0xBA, + 0xBD, 0xE1, 0xBA, 0xBF, 0xE1, 0xBB, 0x81, 0xE1, + 0xBB, 0x83, 0xE1, 0xBB, 0x85, 0xE1, 0xBB, 0x87, + 0xE1, 0xBB, 0x89, 0xE1, 0xBB, 0x8B, 0xE1, 0xBB, + 0x8D, 0xE1, 0xBB, 0x8F, 0xE1, 0xBB, 0x91, 0xE1, + 0xBB, 0x93, 0xE1, 0xBB, 0x95, 0xE1, 0xBB, 0x97, + 0xE1, 0xBB, 0x99, 0xE1, 0xBB, 0x9B, 0xE1, 0xBB, + 0x9D, 0xE1, 0xBB, 0x9F, 0xE1, 0xBB, 0xA1, 0xE1, + 0xBB, 0xA3, 0xE1, 0xBB, 0xA5, 0xE1, 0xBB, 0xA7, + 0xE1, 0xBB, 0xA9, 0xE1, 0xBB, 0xAB, 0xE1, 0xBB, + 0xAD, 0xE1, 0xBB, 0xAF, 0xE1, 0xBB, 0xB1, 0xE1, + 0xBB, 0xB3, 0xE1, 0xBB, 0xB5, 0xE1, 0xBB, 0xB7, + 0xE1, 0xBB, 0xB9, 0xE1, 0xBC, 0x80, 0xE1, 0xBC, + 0x81, 0xE1, 0xBC, 0x82, 0xE1, 0xBC, 0x83, 0xE1, + 0xBC, 0x84, 0xE1, 0xBC, 0x85, 0xE1, 0xBC, 0x86, + 0xE1, 0xBC, 0x87, 0xE1, 0xBC, 0x90, 0xE1, 0xBC, + 0x91, 0xE1, 0xBC, 0x92, 0xE1, 0xBC, 0x93, 0xE1, + 0xBC, 0x94, 0xE1, 0xBC, 0x95, 0xE1, 0xBC, 0xA0, + 0xE1, 0xBC, 0xA1, 0xE1, 0xBC, 0xA2, 0xE1, 0xBC, + 0xA3, 0xE1, 0xBC, 0xA4, 0xE1, 0xBC, 0xA5, 0xE1, + 0xBC, 0xA6, 0xE1, 0xBC, 0xA7, 0xE1, 0xBC, 0xB0, + 0xE1, 0xBC, 0xB1, 0xE1, 0xBC, 0xB2, 0xE1, 0xBC, + 0xB3, 0xE1, 0xBC, 0xB4, 0xE1, 0xBC, 0xB5, 0xE1, + 0xBC, 0xB6, 0xE1, 0xBC, 0xB7, 0xE1, 0xBD, 0x80, + 0xE1, 0xBD, 0x81, 0xE1, 0xBD, 0x82, 0xE1, 0xBD, + 0x83, 0xE1, 0xBD, 0x84, 0xE1, 0xBD, 0x85, 0xE1, + 0xBD, 0x91, 0xE1, 0xBD, 0x93, 0xE1, 0xBD, 0x95, + 0xE1, 0xBD, 0x97, 0xE1, 0xBD, 0xA0, 0xE1, 0xBD, + 0xA1, 0xE1, 0xBD, 0xA2, 0xE1, 0xBD, 0xA3, 0xE1, + 0xBD, 0xA4, 0xE1, 0xBD, 0xA5, 0xE1, 0xBD, 0xA6, + 0xE1, 0xBD, 0xA7, 0xE1, 0xBE, 0x80, 0xE1, 0xBE, + 0x81, 0xE1, 0xBE, 0x82, 0xE1, 0xBE, 0x83, 0xE1, + 0xBE, 0x84, 0xE1, 0xBE, 0x85, 0xE1, 0xBE, 0x86, + 0xE1, 0xBE, 0x87, 0xE1, 0xBE, 0x90, 0xE1, 0xBE, + 0x91, 0xE1, 0xBE, 0x92, 0xE1, 0xBE, 0x93, 0xE1, + 0xBE, 0x94, 0xE1, 0xBE, 0x95, 0xE1, 0xBE, 0x96, + 0xE1, 0xBE, 0x97, 0xE1, 0xBE, 0xA0, 0xE1, 0xBE, + 0xA1, 0xE1, 0xBE, 0xA2, 0xE1, 0xBE, 0xA3, 0xE1, + 0xBE, 0xA4, 0xE1, 0xBE, 0xA5, 0xE1, 0xBE, 0xA6, + 0xE1, 0xBE, 0xA7, 0xE1, 0xBE, 0xB0, 0xE1, 0xBE, + 0xB1, 0xE1, 0xBD, 0xB0, 0xE1, 0xBD, 0xB1, 0xE1, + 0xBE, 0xB3, 0xE1, 0xBD, 0xB2, 0xE1, 0xBD, 0xB3, + 0xE1, 0xBD, 0xB4, 0xE1, 0xBD, 0xB5, 0xE1, 0xBF, + 0x83, 0xE1, 0xBF, 0x90, 0xE1, 0xBF, 0x91, 0xE1, + 0xBD, 0xB6, 0xE1, 0xBD, 0xB7, 0xE1, 0xBF, 0xA0, + 0xE1, 0xBF, 0xA1, 0xE1, 0xBD, 0xBA, 0xE1, 0xBD, + 0xBB, 0xE1, 0xBF, 0xA5, 0xE1, 0xBD, 0xB8, 0xE1, + 0xBD, 0xB9, 0xE1, 0xBD, 0xBC, 0xE1, 0xBD, 0xBD, + 0xE1, 0xBF, 0xB3, 0xCF, 0x89, 0x6B, 0xC3, 0xA5, + 0xE2, 0x85, 0xB0, 0xE2, 0x85, 0xB1, 0xE2, 0x85, + 0xB2, 0xE2, 0x85, 0xB3, 0xE2, 0x85, 0xB4, 0xE2, + 0x85, 0xB5, 0xE2, 0x85, 0xB6, 0xE2, 0x85, 0xB7, + 0xE2, 0x85, 0xB8, 0xE2, 0x85, 0xB9, 0xE2, 0x85, + 0xBA, 0xE2, 0x85, 0xBB, 0xE2, 0x85, 0xBC, 0xE2, + 0x85, 0xBD, 0xE2, 0x85, 0xBE, 0xE2, 0x85, 0xBF, + 0xE2, 0x93, 0x90, 0xE2, 0x93, 0x91, 0xE2, 0x93, + 0x92, 0xE2, 0x93, 0x93, 0xE2, 0x93, 0x94, 0xE2, + 0x93, 0x95, 0xE2, 0x93, 0x96, 0xE2, 0x93, 0x97, + 0xE2, 0x93, 0x98, 0xE2, 0x93, 0x99, 0xE2, 0x93, + 0x9A, 0xE2, 0x93, 0x9B, 0xE2, 0x93, 0x9C, 0xE2, + 0x93, 0x9D, 0xE2, 0x93, 0x9E, 0xE2, 0x93, 0x9F, + 0xE2, 0x93, 0xA0, 0xE2, 0x93, 0xA1, 0xE2, 0x93, + 0xA2, 0xE2, 0x93, 0xA3, 0xE2, 0x93, 0xA4, 0xE2, + 0x93, 0xA5, 0xE2, 0x93, 0xA6, 0xE2, 0x93, 0xA7, + 0xE2, 0x93, 0xA8, 0xE2, 0x93, 0xA9, 0xEF, 0xBD, + 0x81, 0xEF, 0xBD, 0x82, 0xEF, 0xBD, 0x83, 0xEF, + 0xBD, 0x84, 0xEF, 0xBD, 0x85, 0xEF, 0xBD, 0x86, + 0xEF, 0xBD, 0x87, 0xEF, 0xBD, 0x88, 0xEF, 0xBD, + 0x89, 0xEF, 0xBD, 0x8A, 0xEF, 0xBD, 0x8B, 0xEF, + 0xBD, 0x8C, 0xEF, 0xBD, 0x8D, 0xEF, 0xBD, 0x8E, + 0xEF, 0xBD, 0x8F, 0xEF, 0xBD, 0x90, 0xEF, 0xBD, + 0x91, 0xEF, 0xBD, 0x92, 0xEF, 0xBD, 0x93, 0xEF, + 0xBD, 0x94, 0xEF, 0xBD, 0x95, 0xEF, 0xBD, 0x96, + 0xEF, 0xBD, 0x97, 0xEF, 0xBD, 0x98, 0xEF, 0xBD, + 0x99, 0xEF, 0xBD, 0x9A, 0xF0, 0x90, 0x90, 0xA8, + 0xF0, 0x90, 0x90, 0xA9, 0xF0, 0x90, 0x90, 0xAA, + 0xF0, 0x90, 0x90, 0xAB, 0xF0, 0x90, 0x90, 0xAC, + 0xF0, 0x90, 0x90, 0xAD, 0xF0, 0x90, 0x90, 0xAE, + 0xF0, 0x90, 0x90, 0xAF, 0xF0, 0x90, 0x90, 0xB0, + 0xF0, 0x90, 0x90, 0xB1, 0xF0, 0x90, 0x90, 0xB2, + 0xF0, 0x90, 0x90, 0xB3, 0xF0, 0x90, 0x90, 0xB4, + 0xF0, 0x90, 0x90, 0xB5, 0xF0, 0x90, 0x90, 0xB6, + 0xF0, 0x90, 0x90, 0xB7, 0xF0, 0x90, 0x90, 0xB8, + 0xF0, 0x90, 0x90, 0xB9, 0xF0, 0x90, 0x90, 0xBA, + 0xF0, 0x90, 0x90, 0xBB, 0xF0, 0x90, 0x90, 0xBC, + 0xF0, 0x90, 0x90, 0xBD, 0xF0, 0x90, 0x90, 0xBE, + 0xF0, 0x90, 0x90, 0xBF, 0xF0, 0x90, 0x91, 0x80, + 0xF0, 0x90, 0x91, 0x81, 0xF0, 0x90, 0x91, 0x82, + 0xF0, 0x90, 0x91, 0x83, 0xF0, 0x90, 0x91, 0x84, + 0xF0, 0x90, 0x91, 0x85, 0xF0, 0x90, 0x91, 0x86, + 0xF0, 0x90, 0x91, 0x87, 0xF0, 0x90, 0x91, 0x88, + 0xF0, 0x90, 0x91, 0x89, 0xF0, 0x90, 0x91, 0x8A, + 0xF0, 0x90, 0x91, 0x8B, 0xF0, 0x90, 0x91, 0x8C, + 0xF0, 0x90, 0x91, 0x8D, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, + }, + { + 0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3, + 0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7, + 0xC3, 0xA8, 0xC3, 0xA9, 0xC3, 0xAA, 0xC3, 0xAB, + 0xC3, 0xAC, 0xC3, 0xAD, 0xC3, 0xAE, 0xC3, 0xAF, + 0xC3, 0xB0, 0xC3, 0xB1, 0xC3, 0xB2, 0xC3, 0xB3, + 0xC3, 0xB4, 0xC3, 0xB5, 0xC3, 0xB6, 0xC3, 0xB8, + 0xC3, 0xB9, 0xC3, 0xBA, 0xC3, 0xBB, 0xC3, 0xBC, + 0xC3, 0xBD, 0xC3, 0xBE, 0xC4, 0x81, 0xC4, 0x83, + 0xC4, 0x85, 0xC4, 0x87, 0xC4, 0x89, 0xC4, 0x8B, + 0xC4, 0x8D, 0xC4, 0x8F, 0xC4, 0x91, 0xC4, 0x93, + 0xC4, 0x95, 0xC4, 0x97, 0xC4, 0x99, 0xC4, 0x9B, + 0xC4, 0x9D, 0xC4, 0x9F, 0xC4, 0xA1, 0xC4, 0xA3, + 0xC4, 0xA5, 0xC4, 0xA7, 0xC4, 0xA9, 0xC4, 0xAB, + 0xC4, 0xAD, 0xC4, 0xAF, 0x69, 0xC4, 0xB3, 0xC4, + 0xB5, 0xC4, 0xB7, 0xC4, 0xBA, 0xC4, 0xBC, 0xC4, + 0xBE, 0xC5, 0x80, 0xC5, 0x82, 0xC5, 0x84, 0xC5, + 0x86, 0xC5, 0x88, 0xC5, 0x8B, 0xC5, 0x8D, 0xC5, + 0x8F, 0xC5, 0x91, 0xC5, 0x93, 0xC5, 0x95, 0xC5, + 0x97, 0xC5, 0x99, 0xC5, 0x9B, 0xC5, 0x9D, 0xC5, + 0x9F, 0xC5, 0xA1, 0xC5, 0xA3, 0xC5, 0xA5, 0xC5, + 0xA7, 0xC5, 0xA9, 0xC5, 0xAB, 0xC5, 0xAD, 0xC5, + 0xAF, 0xC5, 0xB1, 0xC5, 0xB3, 0xC5, 0xB5, 0xC5, + 0xB7, 0xC3, 0xBF, 0xC5, 0xBA, 0xC5, 0xBC, 0xC5, + 0xBE, 0xC9, 0x93, 0xC6, 0x83, 0xC6, 0x85, 0xC9, + 0x94, 0xC6, 0x88, 0xC9, 0x96, 0xC9, 0x97, 0xC6, + 0x8C, 0xC7, 0x9D, 0xC9, 0x99, 0xC9, 0x9B, 0xC6, + 0x92, 0xC9, 0xA0, 0xC9, 0xA3, 0xC9, 0xA9, 0xC9, + 0xA8, 0xC6, 0x99, 0xC9, 0xAF, 0xC9, 0xB2, 0xC9, + 0xB5, 0xC6, 0xA1, 0xC6, 0xA3, 0xC6, 0xA5, 0xCA, + 0x80, 0xC6, 0xA8, 0xCA, 0x83, 0xC6, 0xAD, 0xCA, + 0x88, 0xC6, 0xB0, 0xCA, 0x8A, 0xCA, 0x8B, 0xC6, + 0xB4, 0xC6, 0xB6, 0xCA, 0x92, 0xC6, 0xB9, 0xC6, + 0xBD, 0xC7, 0x86, 0xC7, 0x86, 0xC7, 0x89, 0xC7, + 0x89, 0xC7, 0x8C, 0xC7, 0x8C, 0xC7, 0x8E, 0xC7, + 0x90, 0xC7, 0x92, 0xC7, 0x94, 0xC7, 0x96, 0xC7, + 0x98, 0xC7, 0x9A, 0xC7, 0x9C, 0xC7, 0x9F, 0xC7, + 0xA1, 0xC7, 0xA3, 0xC7, 0xA5, 0xC7, 0xA7, 0xC7, + 0xA9, 0xC7, 0xAB, 0xC7, 0xAD, 0xC7, 0xAF, 0xC7, + 0xB3, 0xC7, 0xB3, 0xC7, 0xB5, 0xC6, 0x95, 0xC6, + 0xBF, 0xC7, 0xB9, 0xC7, 0xBB, 0xC7, 0xBD, 0xC7, + 0xBF, 0xC8, 0x81, 0xC8, 0x83, 0xC8, 0x85, 0xC8, + 0x87, 0xC8, 0x89, 0xC8, 0x8B, 0xC8, 0x8D, 0xC8, + 0x8F, 0xC8, 0x91, 0xC8, 0x93, 0xC8, 0x95, 0xC8, + 0x97, 0xC8, 0x99, 0xC8, 0x9B, 0xC8, 0x9D, 0xC8, + 0x9F, 0xC6, 0x9E, 0xC8, 0xA3, 0xC8, 0xA5, 0xC8, + 0xA7, 0xC8, 0xA9, 0xC8, 0xAB, 0xC8, 0xAD, 0xC8, + 0xAF, 0xC8, 0xB1, 0xC8, 0xB3, 0xE2, 0xB1, 0xA5, + 0xC8, 0xBC, 0xC6, 0x9A, 0xE2, 0xB1, 0xA6, 0xC9, + 0x82, 0xC6, 0x80, 0xCA, 0x89, 0xCA, 0x8C, 0xC9, + 0x87, 0xC9, 0x89, 0xC9, 0x8B, 0xC9, 0x8D, 0xC9, + 0x8F, 0xCE, 0xAC, 0xCE, 0xAD, 0xCE, 0xAE, 0xCE, + 0xAF, 0xCF, 0x8C, 0xCF, 0x8D, 0xCF, 0x8E, 0xCE, + 0xB1, 0xCE, 0xB2, 0xCE, 0xB3, 0xCE, 0xB4, 0xCE, + 0xB5, 0xCE, 0xB6, 0xCE, 0xB7, 0xCE, 0xB8, 0xCE, + 0xB9, 0xCE, 0xBA, 0xCE, 0xBB, 0xCE, 0xBC, 0xCE, + 0xBD, 0xCE, 0xBE, 0xCE, 0xBF, 0xCF, 0x80, 0xCF, + 0x81, 0xCF, 0x83, 0xCF, 0x84, 0xCF, 0x85, 0xCF, + 0x86, 0xCF, 0x87, 0xCF, 0x88, 0xCF, 0x89, 0xCF, + 0x8A, 0xCF, 0x8B, 0xCF, 0x99, 0xCF, 0x9B, 0xCF, + 0x9D, 0xCF, 0x9F, 0xCF, 0xA1, 0xCF, 0xA3, 0xCF, + 0xA5, 0xCF, 0xA7, 0xCF, 0xA9, 0xCF, 0xAB, 0xCF, + 0xAD, 0xCF, 0xAF, 0xCE, 0xB8, 0xCF, 0xB8, 0xCF, + 0xB2, 0xCF, 0xBB, 0xCD, 0xBB, 0xCD, 0xBC, 0xCD, + 0xBD, 0xD1, 0x90, 0xD1, 0x91, 0xD1, 0x92, 0xD1, + 0x93, 0xD1, 0x94, 0xD1, 0x95, 0xD1, 0x96, 0xD1, + 0x97, 0xD1, 0x98, 0xD1, 0x99, 0xD1, 0x9A, 0xD1, + 0x9B, 0xD1, 0x9C, 0xD1, 0x9D, 0xD1, 0x9E, 0xD1, + 0x9F, 0xD0, 0xB0, 0xD0, 0xB1, 0xD0, 0xB2, 0xD0, + 0xB3, 0xD0, 0xB4, 0xD0, 0xB5, 0xD0, 0xB6, 0xD0, + 0xB7, 0xD0, 0xB8, 0xD0, 0xB9, 0xD0, 0xBA, 0xD0, + 0xBB, 0xD0, 0xBC, 0xD0, 0xBD, 0xD0, 0xBE, 0xD0, + 0xBF, 0xD1, 0x80, 0xD1, 0x81, 0xD1, 0x82, 0xD1, + 0x83, 0xD1, 0x84, 0xD1, 0x85, 0xD1, 0x86, 0xD1, + 0x87, 0xD1, 0x88, 0xD1, 0x89, 0xD1, 0x8A, 0xD1, + 0x8B, 0xD1, 0x8C, 0xD1, 0x8D, 0xD1, 0x8E, 0xD1, + 0x8F, 0xD1, 0xA1, 0xD1, 0xA3, 0xD1, 0xA5, 0xD1, + 0xA7, 0xD1, 0xA9, 0xD1, 0xAB, 0xD1, 0xAD, 0xD1, + 0xAF, 0xD1, 0xB1, 0xD1, 0xB3, 0xD1, 0xB5, 0xD1, + 0xB7, 0xD1, 0xB9, 0xD1, 0xBB, 0xD1, 0xBD, 0xD1, + 0xBF, 0xD2, 0x81, 0xD2, 0x8B, 0xD2, 0x8D, 0xD2, + 0x8F, 0xD2, 0x91, 0xD2, 0x93, 0xD2, 0x95, 0xD2, + 0x97, 0xD2, 0x99, 0xD2, 0x9B, 0xD2, 0x9D, 0xD2, + 0x9F, 0xD2, 0xA1, 0xD2, 0xA3, 0xD2, 0xA5, 0xD2, + 0xA7, 0xD2, 0xA9, 0xD2, 0xAB, 0xD2, 0xAD, 0xD2, + 0xAF, 0xD2, 0xB1, 0xD2, 0xB3, 0xD2, 0xB5, 0xD2, + 0xB7, 0xD2, 0xB9, 0xD2, 0xBB, 0xD2, 0xBD, 0xD2, + 0xBF, 0xD3, 0x8F, 0xD3, 0x82, 0xD3, 0x84, 0xD3, + 0x86, 0xD3, 0x88, 0xD3, 0x8A, 0xD3, 0x8C, 0xD3, + 0x8E, 0xD3, 0x91, 0xD3, 0x93, 0xD3, 0x95, 0xD3, + 0x97, 0xD3, 0x99, 0xD3, 0x9B, 0xD3, 0x9D, 0xD3, + 0x9F, 0xD3, 0xA1, 0xD3, 0xA3, 0xD3, 0xA5, 0xD3, + 0xA7, 0xD3, 0xA9, 0xD3, 0xAB, 0xD3, 0xAD, 0xD3, + 0xAF, 0xD3, 0xB1, 0xD3, 0xB3, 0xD3, 0xB5, 0xD3, + 0xB7, 0xD3, 0xB9, 0xD3, 0xBB, 0xD3, 0xBD, 0xD3, + 0xBF, 0xD4, 0x81, 0xD4, 0x83, 0xD4, 0x85, 0xD4, + 0x87, 0xD4, 0x89, 0xD4, 0x8B, 0xD4, 0x8D, 0xD4, + 0x8F, 0xD4, 0x91, 0xD4, 0x93, 0xD5, 0xA1, 0xD5, + 0xA2, 0xD5, 0xA3, 0xD5, 0xA4, 0xD5, 0xA5, 0xD5, + 0xA6, 0xD5, 0xA7, 0xD5, 0xA8, 0xD5, 0xA9, 0xD5, + 0xAA, 0xD5, 0xAB, 0xD5, 0xAC, 0xD5, 0xAD, 0xD5, + 0xAE, 0xD5, 0xAF, 0xD5, 0xB0, 0xD5, 0xB1, 0xD5, + 0xB2, 0xD5, 0xB3, 0xD5, 0xB4, 0xD5, 0xB5, 0xD5, + 0xB6, 0xD5, 0xB7, 0xD5, 0xB8, 0xD5, 0xB9, 0xD5, + 0xBA, 0xD5, 0xBB, 0xD5, 0xBC, 0xD5, 0xBD, 0xD5, + 0xBE, 0xD5, 0xBF, 0xD6, 0x80, 0xD6, 0x81, 0xD6, + 0x82, 0xD6, 0x83, 0xD6, 0x84, 0xD6, 0x85, 0xD6, + 0x86, 0xE2, 0xB4, 0x80, 0xE2, 0xB4, 0x81, 0xE2, + 0xB4, 0x82, 0xE2, 0xB4, 0x83, 0xE2, 0xB4, 0x84, + 0xE2, 0xB4, 0x85, 0xE2, 0xB4, 0x86, 0xE2, 0xB4, + 0x87, 0xE2, 0xB4, 0x88, 0xE2, 0xB4, 0x89, 0xE2, + 0xB4, 0x8A, 0xE2, 0xB4, 0x8B, 0xE2, 0xB4, 0x8C, + 0xE2, 0xB4, 0x8D, 0xE2, 0xB4, 0x8E, 0xE2, 0xB4, + 0x8F, 0xE2, 0xB4, 0x90, 0xE2, 0xB4, 0x91, 0xE2, + 0xB4, 0x92, 0xE2, 0xB4, 0x93, 0xE2, 0xB4, 0x94, + 0xE2, 0xB4, 0x95, 0xE2, 0xB4, 0x96, 0xE2, 0xB4, + 0x97, 0xE2, 0xB4, 0x98, 0xE2, 0xB4, 0x99, 0xE2, + 0xB4, 0x9A, 0xE2, 0xB4, 0x9B, 0xE2, 0xB4, 0x9C, + 0xE2, 0xB4, 0x9D, 0xE2, 0xB4, 0x9E, 0xE2, 0xB4, + 0x9F, 0xE2, 0xB4, 0xA0, 0xE2, 0xB4, 0xA1, 0xE2, + 0xB4, 0xA2, 0xE2, 0xB4, 0xA3, 0xE2, 0xB4, 0xA4, + 0xE2, 0xB4, 0xA5, 0xE1, 0xB8, 0x81, 0xE1, 0xB8, + 0x83, 0xE1, 0xB8, 0x85, 0xE1, 0xB8, 0x87, 0xE1, + 0xB8, 0x89, 0xE1, 0xB8, 0x8B, 0xE1, 0xB8, 0x8D, + 0xE1, 0xB8, 0x8F, 0xE1, 0xB8, 0x91, 0xE1, 0xB8, + 0x93, 0xE1, 0xB8, 0x95, 0xE1, 0xB8, 0x97, 0xE1, + 0xB8, 0x99, 0xE1, 0xB8, 0x9B, 0xE1, 0xB8, 0x9D, + 0xE1, 0xB8, 0x9F, 0xE1, 0xB8, 0xA1, 0xE1, 0xB8, + 0xA3, 0xE1, 0xB8, 0xA5, 0xE1, 0xB8, 0xA7, 0xE1, + 0xB8, 0xA9, 0xE1, 0xB8, 0xAB, 0xE1, 0xB8, 0xAD, + 0xE1, 0xB8, 0xAF, 0xE1, 0xB8, 0xB1, 0xE1, 0xB8, + 0xB3, 0xE1, 0xB8, 0xB5, 0xE1, 0xB8, 0xB7, 0xE1, + 0xB8, 0xB9, 0xE1, 0xB8, 0xBB, 0xE1, 0xB8, 0xBD, + 0xE1, 0xB8, 0xBF, 0xE1, 0xB9, 0x81, 0xE1, 0xB9, + 0x83, 0xE1, 0xB9, 0x85, 0xE1, 0xB9, 0x87, 0xE1, + 0xB9, 0x89, 0xE1, 0xB9, 0x8B, 0xE1, 0xB9, 0x8D, + 0xE1, 0xB9, 0x8F, 0xE1, 0xB9, 0x91, 0xE1, 0xB9, + 0x93, 0xE1, 0xB9, 0x95, 0xE1, 0xB9, 0x97, 0xE1, + 0xB9, 0x99, 0xE1, 0xB9, 0x9B, 0xE1, 0xB9, 0x9D, + 0xE1, 0xB9, 0x9F, 0xE1, 0xB9, 0xA1, 0xE1, 0xB9, + 0xA3, 0xE1, 0xB9, 0xA5, 0xE1, 0xB9, 0xA7, 0xE1, + 0xB9, 0xA9, 0xE1, 0xB9, 0xAB, 0xE1, 0xB9, 0xAD, + 0xE1, 0xB9, 0xAF, 0xE1, 0xB9, 0xB1, 0xE1, 0xB9, + 0xB3, 0xE1, 0xB9, 0xB5, 0xE1, 0xB9, 0xB7, 0xE1, + 0xB9, 0xB9, 0xE1, 0xB9, 0xBB, 0xE1, 0xB9, 0xBD, + 0xE1, 0xB9, 0xBF, 0xE1, 0xBA, 0x81, 0xE1, 0xBA, + 0x83, 0xE1, 0xBA, 0x85, 0xE1, 0xBA, 0x87, 0xE1, + 0xBA, 0x89, 0xE1, 0xBA, 0x8B, 0xE1, 0xBA, 0x8D, + 0xE1, 0xBA, 0x8F, 0xE1, 0xBA, 0x91, 0xE1, 0xBA, + 0x93, 0xE1, 0xBA, 0x95, 0xE1, 0xBA, 0xA1, 0xE1, + 0xBA, 0xA3, 0xE1, 0xBA, 0xA5, 0xE1, 0xBA, 0xA7, + 0xE1, 0xBA, 0xA9, 0xE1, 0xBA, 0xAB, 0xE1, 0xBA, + 0xAD, 0xE1, 0xBA, 0xAF, 0xE1, 0xBA, 0xB1, 0xE1, + 0xBA, 0xB3, 0xE1, 0xBA, 0xB5, 0xE1, 0xBA, 0xB7, + 0xE1, 0xBA, 0xB9, 0xE1, 0xBA, 0xBB, 0xE1, 0xBA, + 0xBD, 0xE1, 0xBA, 0xBF, 0xE1, 0xBB, 0x81, 0xE1, + 0xBB, 0x83, 0xE1, 0xBB, 0x85, 0xE1, 0xBB, 0x87, + 0xE1, 0xBB, 0x89, 0xE1, 0xBB, 0x8B, 0xE1, 0xBB, + 0x8D, 0xE1, 0xBB, 0x8F, 0xE1, 0xBB, 0x91, 0xE1, + 0xBB, 0x93, 0xE1, 0xBB, 0x95, 0xE1, 0xBB, 0x97, + 0xE1, 0xBB, 0x99, 0xE1, 0xBB, 0x9B, 0xE1, 0xBB, + 0x9D, 0xE1, 0xBB, 0x9F, 0xE1, 0xBB, 0xA1, 0xE1, + 0xBB, 0xA3, 0xE1, 0xBB, 0xA5, 0xE1, 0xBB, 0xA7, + 0xE1, 0xBB, 0xA9, 0xE1, 0xBB, 0xAB, 0xE1, 0xBB, + 0xAD, 0xE1, 0xBB, 0xAF, 0xE1, 0xBB, 0xB1, 0xE1, + 0xBB, 0xB3, 0xE1, 0xBB, 0xB5, 0xE1, 0xBB, 0xB7, + 0xE1, 0xBB, 0xB9, 0xE1, 0xBC, 0x80, 0xE1, 0xBC, + 0x81, 0xE1, 0xBC, 0x82, 0xE1, 0xBC, 0x83, 0xE1, + 0xBC, 0x84, 0xE1, 0xBC, 0x85, 0xE1, 0xBC, 0x86, + 0xE1, 0xBC, 0x87, 0xE1, 0xBC, 0x90, 0xE1, 0xBC, + 0x91, 0xE1, 0xBC, 0x92, 0xE1, 0xBC, 0x93, 0xE1, + 0xBC, 0x94, 0xE1, 0xBC, 0x95, 0xE1, 0xBC, 0xA0, + 0xE1, 0xBC, 0xA1, 0xE1, 0xBC, 0xA2, 0xE1, 0xBC, + 0xA3, 0xE1, 0xBC, 0xA4, 0xE1, 0xBC, 0xA5, 0xE1, + 0xBC, 0xA6, 0xE1, 0xBC, 0xA7, 0xE1, 0xBC, 0xB0, + 0xE1, 0xBC, 0xB1, 0xE1, 0xBC, 0xB2, 0xE1, 0xBC, + 0xB3, 0xE1, 0xBC, 0xB4, 0xE1, 0xBC, 0xB5, 0xE1, + 0xBC, 0xB6, 0xE1, 0xBC, 0xB7, 0xE1, 0xBD, 0x80, + 0xE1, 0xBD, 0x81, 0xE1, 0xBD, 0x82, 0xE1, 0xBD, + 0x83, 0xE1, 0xBD, 0x84, 0xE1, 0xBD, 0x85, 0xE1, + 0xBD, 0x91, 0xE1, 0xBD, 0x93, 0xE1, 0xBD, 0x95, + 0xE1, 0xBD, 0x97, 0xE1, 0xBD, 0xA0, 0xE1, 0xBD, + 0xA1, 0xE1, 0xBD, 0xA2, 0xE1, 0xBD, 0xA3, 0xE1, + 0xBD, 0xA4, 0xE1, 0xBD, 0xA5, 0xE1, 0xBD, 0xA6, + 0xE1, 0xBD, 0xA7, 0xE1, 0xBE, 0x80, 0xE1, 0xBE, + 0x81, 0xE1, 0xBE, 0x82, 0xE1, 0xBE, 0x83, 0xE1, + 0xBE, 0x84, 0xE1, 0xBE, 0x85, 0xE1, 0xBE, 0x86, + 0xE1, 0xBE, 0x87, 0xE1, 0xBE, 0x90, 0xE1, 0xBE, + 0x91, 0xE1, 0xBE, 0x92, 0xE1, 0xBE, 0x93, 0xE1, + 0xBE, 0x94, 0xE1, 0xBE, 0x95, 0xE1, 0xBE, 0x96, + 0xE1, 0xBE, 0x97, 0xE1, 0xBE, 0xA0, 0xE1, 0xBE, + 0xA1, 0xE1, 0xBE, 0xA2, 0xE1, 0xBE, 0xA3, 0xE1, + 0xBE, 0xA4, 0xE1, 0xBE, 0xA5, 0xE1, 0xBE, 0xA6, + 0xE1, 0xBE, 0xA7, 0xE1, 0xBE, 0xB0, 0xE1, 0xBE, + 0xB1, 0xE1, 0xBD, 0xB0, 0xE1, 0xBD, 0xB1, 0xE1, + 0xBE, 0xB3, 0xE1, 0xBD, 0xB2, 0xE1, 0xBD, 0xB3, + 0xE1, 0xBD, 0xB4, 0xE1, 0xBD, 0xB5, 0xE1, 0xBF, + 0x83, 0xE1, 0xBF, 0x90, 0xE1, 0xBF, 0x91, 0xE1, + 0xBD, 0xB6, 0xE1, 0xBD, 0xB7, 0xE1, 0xBF, 0xA0, + 0xE1, 0xBF, 0xA1, 0xE1, 0xBD, 0xBA, 0xE1, 0xBD, + 0xBB, 0xE1, 0xBF, 0xA5, 0xE1, 0xBD, 0xB8, 0xE1, + 0xBD, 0xB9, 0xE1, 0xBD, 0xBC, 0xE1, 0xBD, 0xBD, + 0xE1, 0xBF, 0xB3, 0xCF, 0x89, 0x6B, 0xC3, 0xA5, + 0xE2, 0x85, 0x8E, 0xE2, 0x85, 0xB0, 0xE2, 0x85, + 0xB1, 0xE2, 0x85, 0xB2, 0xE2, 0x85, 0xB3, 0xE2, + 0x85, 0xB4, 0xE2, 0x85, 0xB5, 0xE2, 0x85, 0xB6, + 0xE2, 0x85, 0xB7, 0xE2, 0x85, 0xB8, 0xE2, 0x85, + 0xB9, 0xE2, 0x85, 0xBA, 0xE2, 0x85, 0xBB, 0xE2, + 0x85, 0xBC, 0xE2, 0x85, 0xBD, 0xE2, 0x85, 0xBE, + 0xE2, 0x85, 0xBF, 0xE2, 0x86, 0x84, 0xE2, 0x93, + 0x90, 0xE2, 0x93, 0x91, 0xE2, 0x93, 0x92, 0xE2, + 0x93, 0x93, 0xE2, 0x93, 0x94, 0xE2, 0x93, 0x95, + 0xE2, 0x93, 0x96, 0xE2, 0x93, 0x97, 0xE2, 0x93, + 0x98, 0xE2, 0x93, 0x99, 0xE2, 0x93, 0x9A, 0xE2, + 0x93, 0x9B, 0xE2, 0x93, 0x9C, 0xE2, 0x93, 0x9D, + 0xE2, 0x93, 0x9E, 0xE2, 0x93, 0x9F, 0xE2, 0x93, + 0xA0, 0xE2, 0x93, 0xA1, 0xE2, 0x93, 0xA2, 0xE2, + 0x93, 0xA3, 0xE2, 0x93, 0xA4, 0xE2, 0x93, 0xA5, + 0xE2, 0x93, 0xA6, 0xE2, 0x93, 0xA7, 0xE2, 0x93, + 0xA8, 0xE2, 0x93, 0xA9, 0xE2, 0xB0, 0xB0, 0xE2, + 0xB0, 0xB1, 0xE2, 0xB0, 0xB2, 0xE2, 0xB0, 0xB3, + 0xE2, 0xB0, 0xB4, 0xE2, 0xB0, 0xB5, 0xE2, 0xB0, + 0xB6, 0xE2, 0xB0, 0xB7, 0xE2, 0xB0, 0xB8, 0xE2, + 0xB0, 0xB9, 0xE2, 0xB0, 0xBA, 0xE2, 0xB0, 0xBB, + 0xE2, 0xB0, 0xBC, 0xE2, 0xB0, 0xBD, 0xE2, 0xB0, + 0xBE, 0xE2, 0xB0, 0xBF, 0xE2, 0xB1, 0x80, 0xE2, + 0xB1, 0x81, 0xE2, 0xB1, 0x82, 0xE2, 0xB1, 0x83, + 0xE2, 0xB1, 0x84, 0xE2, 0xB1, 0x85, 0xE2, 0xB1, + 0x86, 0xE2, 0xB1, 0x87, 0xE2, 0xB1, 0x88, 0xE2, + 0xB1, 0x89, 0xE2, 0xB1, 0x8A, 0xE2, 0xB1, 0x8B, + 0xE2, 0xB1, 0x8C, 0xE2, 0xB1, 0x8D, 0xE2, 0xB1, + 0x8E, 0xE2, 0xB1, 0x8F, 0xE2, 0xB1, 0x90, 0xE2, + 0xB1, 0x91, 0xE2, 0xB1, 0x92, 0xE2, 0xB1, 0x93, + 0xE2, 0xB1, 0x94, 0xE2, 0xB1, 0x95, 0xE2, 0xB1, + 0x96, 0xE2, 0xB1, 0x97, 0xE2, 0xB1, 0x98, 0xE2, + 0xB1, 0x99, 0xE2, 0xB1, 0x9A, 0xE2, 0xB1, 0x9B, + 0xE2, 0xB1, 0x9C, 0xE2, 0xB1, 0x9D, 0xE2, 0xB1, + 0x9E, 0xE2, 0xB1, 0xA1, 0xC9, 0xAB, 0xE1, 0xB5, + 0xBD, 0xC9, 0xBD, 0xE2, 0xB1, 0xA8, 0xE2, 0xB1, + 0xAA, 0xE2, 0xB1, 0xAC, 0xE2, 0xB1, 0xB6, 0xE2, + 0xB2, 0x81, 0xE2, 0xB2, 0x83, 0xE2, 0xB2, 0x85, + 0xE2, 0xB2, 0x87, 0xE2, 0xB2, 0x89, 0xE2, 0xB2, + 0x8B, 0xE2, 0xB2, 0x8D, 0xE2, 0xB2, 0x8F, 0xE2, + 0xB2, 0x91, 0xE2, 0xB2, 0x93, 0xE2, 0xB2, 0x95, + 0xE2, 0xB2, 0x97, 0xE2, 0xB2, 0x99, 0xE2, 0xB2, + 0x9B, 0xE2, 0xB2, 0x9D, 0xE2, 0xB2, 0x9F, 0xE2, + 0xB2, 0xA1, 0xE2, 0xB2, 0xA3, 0xE2, 0xB2, 0xA5, + 0xE2, 0xB2, 0xA7, 0xE2, 0xB2, 0xA9, 0xE2, 0xB2, + 0xAB, 0xE2, 0xB2, 0xAD, 0xE2, 0xB2, 0xAF, 0xE2, + 0xB2, 0xB1, 0xE2, 0xB2, 0xB3, 0xE2, 0xB2, 0xB5, + 0xE2, 0xB2, 0xB7, 0xE2, 0xB2, 0xB9, 0xE2, 0xB2, + 0xBB, 0xE2, 0xB2, 0xBD, 0xE2, 0xB2, 0xBF, 0xE2, + 0xB3, 0x81, 0xE2, 0xB3, 0x83, 0xE2, 0xB3, 0x85, + 0xE2, 0xB3, 0x87, 0xE2, 0xB3, 0x89, 0xE2, 0xB3, + 0x8B, 0xE2, 0xB3, 0x8D, 0xE2, 0xB3, 0x8F, 0xE2, + 0xB3, 0x91, 0xE2, 0xB3, 0x93, 0xE2, 0xB3, 0x95, + 0xE2, 0xB3, 0x97, 0xE2, 0xB3, 0x99, 0xE2, 0xB3, + 0x9B, 0xE2, 0xB3, 0x9D, 0xE2, 0xB3, 0x9F, 0xE2, + 0xB3, 0xA1, 0xE2, 0xB3, 0xA3, 0xEF, 0xBD, 0x81, + 0xEF, 0xBD, 0x82, 0xEF, 0xBD, 0x83, 0xEF, 0xBD, + 0x84, 0xEF, 0xBD, 0x85, 0xEF, 0xBD, 0x86, 0xEF, + 0xBD, 0x87, 0xEF, 0xBD, 0x88, 0xEF, 0xBD, 0x89, + 0xEF, 0xBD, 0x8A, 0xEF, 0xBD, 0x8B, 0xEF, 0xBD, + 0x8C, 0xEF, 0xBD, 0x8D, 0xEF, 0xBD, 0x8E, 0xEF, + 0xBD, 0x8F, 0xEF, 0xBD, 0x90, 0xEF, 0xBD, 0x91, + 0xEF, 0xBD, 0x92, 0xEF, 0xBD, 0x93, 0xEF, 0xBD, + 0x94, 0xEF, 0xBD, 0x95, 0xEF, 0xBD, 0x96, 0xEF, + 0xBD, 0x97, 0xEF, 0xBD, 0x98, 0xEF, 0xBD, 0x99, + 0xEF, 0xBD, 0x9A, 0xF0, 0x90, 0x90, 0xA8, 0xF0, + 0x90, 0x90, 0xA9, 0xF0, 0x90, 0x90, 0xAA, 0xF0, + 0x90, 0x90, 0xAB, 0xF0, 0x90, 0x90, 0xAC, 0xF0, + 0x90, 0x90, 0xAD, 0xF0, 0x90, 0x90, 0xAE, 0xF0, + 0x90, 0x90, 0xAF, 0xF0, 0x90, 0x90, 0xB0, 0xF0, + 0x90, 0x90, 0xB1, 0xF0, 0x90, 0x90, 0xB2, 0xF0, + 0x90, 0x90, 0xB3, 0xF0, 0x90, 0x90, 0xB4, 0xF0, + 0x90, 0x90, 0xB5, 0xF0, 0x90, 0x90, 0xB6, 0xF0, + 0x90, 0x90, 0xB7, 0xF0, 0x90, 0x90, 0xB8, 0xF0, + 0x90, 0x90, 0xB9, 0xF0, 0x90, 0x90, 0xBA, 0xF0, + 0x90, 0x90, 0xBB, 0xF0, 0x90, 0x90, 0xBC, 0xF0, + 0x90, 0x90, 0xBD, 0xF0, 0x90, 0x90, 0xBE, 0xF0, + 0x90, 0x90, 0xBF, 0xF0, 0x90, 0x91, 0x80, 0xF0, + 0x90, 0x91, 0x81, 0xF0, 0x90, 0x91, 0x82, 0xF0, + 0x90, 0x91, 0x83, 0xF0, 0x90, 0x91, 0x84, 0xF0, + 0x90, 0x91, 0x85, 0xF0, 0x90, 0x91, 0x86, 0xF0, + 0x90, 0x91, 0x87, 0xF0, 0x90, 0x91, 0x88, 0xF0, + 0x90, 0x91, 0x89, 0xF0, 0x90, 0x91, 0x8A, 0xF0, + 0x90, 0x91, 0x8B, 0xF0, 0x90, 0x91, 0x8C, 0xF0, + 0x90, 0x91, 0x8D, 0xF0, 0x90, 0x91, 0x8E, 0xF0, + 0x90, 0x91, 0x8F, + }, +}; + +static const u8_displacement_t u8_toupper_b3_tbl[2][5][256] = { + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 0 }, { 1, 2 }, + { 2, 64 }, { 3, 125 }, { 4, 188 }, { 5, 226 }, + { 6, 288 }, { 7, 338 }, { 8, 364 }, { N_, 0 }, + { N_, 0 }, { 9, 376 }, { 10, 378 }, { 11, 416 }, + { 12, 486 }, { 13, 518 }, { 14, 614 }, { 15, 670 }, + { 16, 724 }, { 17, 740 }, { 18, 802 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 19, 816 }, { 20, 912 }, { 21, 1008 }, { 22, 1092 }, + { 23, 1179 }, { 24, 1269 }, { 25, 1365 }, { 26, 1448 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 27, 1469 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { 28, 1517 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 29, 1595 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 30, 1673 }, { 31, 1769 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + }, + { + { /* Third byte table 0. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { 0, 0 }, { 1, 2 }, + { 2, 64 }, { 3, 125 }, { 4, 188 }, { 5, 230 }, + { 6, 292 }, { 7, 344 }, { 8, 388 }, { N_, 0 }, + { N_, 0 }, { 9, 404 }, { 10, 412 }, { 11, 450 }, + { 12, 524 }, { 13, 556 }, { 14, 652 }, { 15, 708 }, + { 16, 772 }, { 17, 792 }, { 18, 854 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 1. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 19, 868 }, { N_, 0 }, { N_, 0 }, + { 20, 871 }, { 21, 967 }, { 22, 1063 }, { 23, 1147 }, + { 24, 1234 }, { 25, 1324 }, { 26, 1420 }, { 27, 1503 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 2. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 28, 1524 }, { 29, 1575 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { 30, 1578 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 31, 1656 }, { 32, 1704 }, { 33, 1816 }, { 34, 1912 }, + { 35, 1966 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 3. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { 36, 2080 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + { /* Third byte table 4. */ + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { 37, 2158 }, { 38, 2254 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + { N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 }, + }, + }, +}; + +static const uchar_t u8_toupper_b4_tbl[2][39][257] = { + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 49, 49, 51, 51, 53, 53, + 55, 55, 55, 57, 57, 59, 59, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, + 56, 56, 56, 58, 58, 60, 60, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 4, 4, + 4, 6, 6, 6, 6, 8, 8, 8, + 8, 8, 8, 10, 10, 10, 12, 12, + 12, 12, 14, 14, 14, 14, 14, 16, + 16, 16, 18, 18, 20, 20, 22, 22, + 22, 24, 24, 24, 24, 24, 26, 26, + 26, 28, 28, 28, 28, 30, 30, 32, + 32, 32, 34, 34, 34, 34, 36, 36, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 4, + 4, 6, 8, 8, 10, 12, 12, 14, + 14, 16, 16, 18, 18, 20, 20, 22, + 22, 24, 24, 26, 26, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 48, 50, 52, 52, 54, 54, + 54, 54, 56, 56, 58, 58, 60, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 32, 32, 34, 34, 36, 36, + 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 4, 4, 6, + 8, 8, 10, 10, 12, 12, 12, 12, + 12, 14, 14, 14, 16, 16, 16, 16, + 16, 18, 20, 20, 20, 20, 20, 20, + 22, 22, 22, 24, 24, 24, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 4, 4, 4, 4, + 4, 6, 6, 8, 10, 10, 10, 10, + 10, 10, 10, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 4, 6, + 8, 8, 10, 12, 14, 16, 18, 20, + 22, 24, 26, 28, 30, 32, 34, 36, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 30, 32, 34, 34, 34, 34, 36, 38, + 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 50, 52, 52, + 54, 54, 56, 56, 58, 58, 60, 60, + 62, 64, 66, 68, 68, 68, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 64, 66, 66, 68, 68, 70, 70, + 72, 72, 74, 74, 76, 76, 78, 78, + 80, 80, 82, 82, 84, 84, 86, 86, + 88, 88, 90, 90, 92, 92, 94, 94, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 4, 4, 6, + 6, 8, 8, 10, 10, 12, 12, 14, + 14, 14, 16, 16, 18, 18, 20, 20, + 22, 22, 24, 24, 26, 26, 28, 28, + 30, 30, 32, 32, 34, 34, 36, 36, + 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 50, 52, 52, + 52, 52, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 4, 6, 8, 10, 12, + 14, 16, 18, 20, 22, 24, 26, 28, + 30, 32, 34, 36, 38, 40, 42, 44, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 90, 90, 93, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 90, 90, 93, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 33, 33, 33, 33, 36, 36, 36, 36, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 60, 63, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 69, 72, 75, 78, 81, 84, 87, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 21, 21, 24, 24, 27, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 33, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 57, 60, 63, 66, 69, 72, 75, + 78, 81, 84, 87, 90, 93, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 75, 78, 78, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 6, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 12, 15, 15, 15, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 48, 51, 54, 57, 60, 63, 66, + 69, 72, 75, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, + }, + }, + { + { /* Fourth byte table 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, + }, + { /* Fourth byte table 1. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 2. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 49, 49, 51, 51, 53, 53, + 55, 55, 55, 57, 57, 59, 59, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, + }, + { /* Fourth byte table 3. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 4, 4, 6, 6, 8, + 8, 10, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, + 56, 56, 56, 58, 58, 60, 60, 62, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, + }, + { /* Fourth byte table 4. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 4, 4, 6, 6, + 6, 8, 8, 8, 8, 10, 10, 10, + 10, 10, 10, 12, 12, 12, 14, 14, + 14, 14, 16, 18, 18, 18, 18, 20, + 20, 20, 22, 22, 24, 24, 26, 26, + 26, 28, 28, 28, 28, 28, 30, 30, + 30, 32, 32, 32, 32, 34, 34, 36, + 36, 36, 38, 38, 38, 38, 40, 40, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, + }, + { /* Fourth byte table 5. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 4, + 4, 6, 8, 8, 10, 12, 12, 14, + 14, 16, 16, 18, 18, 20, 20, 22, + 22, 24, 24, 26, 26, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 48, 50, 52, 52, 54, 54, + 54, 54, 56, 56, 58, 58, 60, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 6. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 32, 32, 34, 34, 36, 36, + 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, + }, + { /* Fourth byte table 7. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 2, 2, 2, + 4, 4, 6, 6, 8, 8, 10, 10, + 12, 12, 12, 12, 14, 16, 16, 18, + 20, 20, 22, 22, 24, 24, 24, 24, + 24, 26, 26, 26, 28, 28, 28, 28, + 28, 30, 32, 32, 35, 35, 35, 35, + 37, 37, 37, 39, 39, 39, 41, 41, + 41, 41, 41, 41, 41, 41, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, + }, + { /* Fourth byte table 8. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 4, 4, 4, 4, + 4, 6, 8, 10, 12, 14, 14, 14, + 14, 14, 14, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, + }, + { /* Fourth byte table 9. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 4, 6, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, + }, + { /* Fourth byte table 10. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 4, 6, + 8, 8, 10, 12, 14, 16, 18, 20, + 22, 24, 26, 28, 30, 32, 34, 36, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, + }, + { /* Fourth byte table 11. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 30, 32, 34, 34, 34, 34, 36, 38, + 38, 38, 40, 40, 42, 42, 44, 44, + 46, 46, 48, 48, 50, 50, 52, 52, + 54, 54, 56, 56, 58, 58, 60, 60, + 62, 64, 66, 68, 68, 68, 70, 70, + 70, 72, 72, 72, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, + }, + { /* Fourth byte table 12. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, + }, + { /* Fourth byte table 13. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 20, 22, 24, 26, 28, 30, + 32, 34, 36, 38, 40, 42, 44, 46, + 48, 50, 52, 54, 56, 58, 60, 62, + 64, 64, 66, 66, 68, 68, 70, 70, + 72, 72, 74, 74, 76, 76, 78, 78, + 80, 80, 82, 82, 84, 84, 86, 86, + 88, 88, 90, 90, 92, 92, 94, 94, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 14. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, + }, + { /* Fourth byte table 15. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 4, 4, 6, + 6, 8, 8, 10, 10, 12, 12, 14, + 16, 16, 18, 18, 20, 20, 22, 22, + 24, 24, 26, 26, 28, 28, 30, 30, + 32, 32, 34, 34, 36, 36, 38, 38, + 40, 40, 42, 42, 44, 44, 46, 46, + 48, 48, 50, 50, 52, 52, 54, 54, + 56, 56, 58, 58, 60, 60, 62, 62, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + { /* Fourth byte table 16. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 4, 4, 6, 6, + 8, 8, 10, 10, 12, 12, 14, 14, + 16, 16, 18, 18, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, + }, + { /* Fourth byte table 17. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 4, 6, 8, 10, 12, + 14, 16, 18, 20, 22, 24, 26, 28, + 30, 32, 34, 36, 38, 40, 42, 44, + 46, 48, 50, 52, 54, 56, 58, 60, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, + }, + { /* Fourth byte table 18. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, + }, + { /* Fourth byte table 19. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 20. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 90, 90, 93, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 21. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 90, 90, 93, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 22. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 33, 33, 33, 33, 36, 36, 36, 36, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 84, + }, + { /* Fourth byte table 23. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, + 87, + }, + { /* Fourth byte table 24. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 45, 48, 51, 54, 57, 60, 63, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 69, 72, 75, 78, 81, 84, 87, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, + 90, + }, + { /* Fourth byte table 25. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 21, 21, 24, 24, 27, 27, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 33, 36, 39, 42, 45, 48, 51, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 57, 60, 63, 66, 69, 72, 75, + 78, 81, 84, 87, 90, 93, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 26. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 75, 78, 78, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, + 83, + }, + { /* Fourth byte table 27. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 6, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 12, 15, 15, 15, 15, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, + }, + { /* Fourth byte table 28. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 6, 9, 12, 15, 18, 21, 24, + 27, 30, 33, 36, 39, 42, 45, 48, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, + }, + { /* Fourth byte table 29. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, + }, + { /* Fourth byte table 30. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 31. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, + }, + { /* Fourth byte table 32. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 93, 93, 96, 96, 96, 96, 98, 100, + 100, 103, 103, 106, 106, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, + 112, + }, + { /* Fourth byte table 33. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 57, 57, + 60, 60, 63, 63, 66, 66, 69, 69, + 72, 72, 75, 75, 78, 78, 81, 81, + 84, 84, 87, 87, 90, 90, 93, 93, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 34. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 3, 6, 6, 9, 9, + 12, 12, 15, 15, 18, 18, 21, 21, + 24, 24, 27, 27, 30, 30, 33, 33, + 36, 36, 39, 39, 42, 42, 45, 45, + 48, 48, 51, 51, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, + }, + { /* Fourth byte table 35. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 6, 9, 12, 15, 18, 21, + 24, 27, 30, 33, 36, 39, 42, 45, + 48, 51, 54, 57, 60, 63, 66, 69, + 72, 75, 78, 81, 84, 87, 90, 93, + 96, 99, 102, 105, 108, 111, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, + }, + { /* Fourth byte table 36. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 6, 9, 12, 15, 18, + 21, 24, 27, 30, 33, 36, 39, 42, + 45, 48, 51, 54, 57, 60, 63, 66, + 69, 72, 75, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, + 78, + }, + { /* Fourth byte table 37. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 68, 72, 76, 80, 84, 88, 92, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, + 96, + }, + { /* Fourth byte table 38. */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, + }, + }, +}; + +static const uchar_t u8_toupper_final_tbl[2][2318] = { + { + 0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82, + 0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86, + 0xC3, 0x87, 0xC3, 0x88, 0xC3, 0x89, 0xC3, 0x8A, + 0xC3, 0x8B, 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, + 0xC3, 0x8F, 0xC3, 0x90, 0xC3, 0x91, 0xC3, 0x92, + 0xC3, 0x93, 0xC3, 0x94, 0xC3, 0x95, 0xC3, 0x96, + 0xC3, 0x98, 0xC3, 0x99, 0xC3, 0x9A, 0xC3, 0x9B, + 0xC3, 0x9C, 0xC3, 0x9D, 0xC3, 0x9E, 0xC5, 0xB8, + 0xC4, 0x80, 0xC4, 0x82, 0xC4, 0x84, 0xC4, 0x86, + 0xC4, 0x88, 0xC4, 0x8A, 0xC4, 0x8C, 0xC4, 0x8E, + 0xC4, 0x90, 0xC4, 0x92, 0xC4, 0x94, 0xC4, 0x96, + 0xC4, 0x98, 0xC4, 0x9A, 0xC4, 0x9C, 0xC4, 0x9E, + 0xC4, 0xA0, 0xC4, 0xA2, 0xC4, 0xA4, 0xC4, 0xA6, + 0xC4, 0xA8, 0xC4, 0xAA, 0xC4, 0xAC, 0xC4, 0xAE, + 0x49, 0xC4, 0xB2, 0xC4, 0xB4, 0xC4, 0xB6, 0xC4, + 0xB9, 0xC4, 0xBB, 0xC4, 0xBD, 0xC4, 0xBF, 0xC5, + 0x81, 0xC5, 0x83, 0xC5, 0x85, 0xC5, 0x87, 0xC5, + 0x8A, 0xC5, 0x8C, 0xC5, 0x8E, 0xC5, 0x90, 0xC5, + 0x92, 0xC5, 0x94, 0xC5, 0x96, 0xC5, 0x98, 0xC5, + 0x9A, 0xC5, 0x9C, 0xC5, 0x9E, 0xC5, 0xA0, 0xC5, + 0xA2, 0xC5, 0xA4, 0xC5, 0xA6, 0xC5, 0xA8, 0xC5, + 0xAA, 0xC5, 0xAC, 0xC5, 0xAE, 0xC5, 0xB0, 0xC5, + 0xB2, 0xC5, 0xB4, 0xC5, 0xB6, 0xC5, 0xB9, 0xC5, + 0xBB, 0xC5, 0xBD, 0x53, 0xC6, 0x82, 0xC6, 0x84, + 0xC6, 0x87, 0xC6, 0x8B, 0xC6, 0x91, 0xC7, 0xB6, + 0xC6, 0x98, 0xC8, 0xA0, 0xC6, 0xA0, 0xC6, 0xA2, + 0xC6, 0xA4, 0xC6, 0xA7, 0xC6, 0xAC, 0xC6, 0xAF, + 0xC6, 0xB3, 0xC6, 0xB5, 0xC6, 0xB8, 0xC6, 0xBC, + 0xC7, 0xB7, 0xC7, 0x84, 0xC7, 0x84, 0xC7, 0x87, + 0xC7, 0x87, 0xC7, 0x8A, 0xC7, 0x8A, 0xC7, 0x8D, + 0xC7, 0x8F, 0xC7, 0x91, 0xC7, 0x93, 0xC7, 0x95, + 0xC7, 0x97, 0xC7, 0x99, 0xC7, 0x9B, 0xC6, 0x8E, + 0xC7, 0x9E, 0xC7, 0xA0, 0xC7, 0xA2, 0xC7, 0xA4, + 0xC7, 0xA6, 0xC7, 0xA8, 0xC7, 0xAA, 0xC7, 0xAC, + 0xC7, 0xAE, 0xC7, 0xB1, 0xC7, 0xB1, 0xC7, 0xB4, + 0xC7, 0xB8, 0xC7, 0xBA, 0xC7, 0xBC, 0xC7, 0xBE, + 0xC8, 0x80, 0xC8, 0x82, 0xC8, 0x84, 0xC8, 0x86, + 0xC8, 0x88, 0xC8, 0x8A, 0xC8, 0x8C, 0xC8, 0x8E, + 0xC8, 0x90, 0xC8, 0x92, 0xC8, 0x94, 0xC8, 0x96, + 0xC8, 0x98, 0xC8, 0x9A, 0xC8, 0x9C, 0xC8, 0x9E, + 0xC8, 0xA2, 0xC8, 0xA4, 0xC8, 0xA6, 0xC8, 0xA8, + 0xC8, 0xAA, 0xC8, 0xAC, 0xC8, 0xAE, 0xC8, 0xB0, + 0xC8, 0xB2, 0xC6, 0x81, 0xC6, 0x86, 0xC6, 0x89, + 0xC6, 0x8A, 0xC6, 0x8F, 0xC6, 0x90, 0xC6, 0x93, + 0xC6, 0x94, 0xC6, 0x97, 0xC6, 0x96, 0xC6, 0x9C, + 0xC6, 0x9D, 0xC6, 0x9F, 0xC6, 0xA6, 0xC6, 0xA9, + 0xC6, 0xAE, 0xC6, 0xB1, 0xC6, 0xB2, 0xC6, 0xB7, + 0xCE, 0x99, 0xCE, 0x86, 0xCE, 0x88, 0xCE, 0x89, + 0xCE, 0x8A, 0xCE, 0x91, 0xCE, 0x92, 0xCE, 0x93, + 0xCE, 0x94, 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, + 0xCE, 0x98, 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, + 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, + 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, 0xA3, 0xCE, 0xA3, + 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, 0xCE, 0xA7, + 0xCE, 0xA8, 0xCE, 0xA9, 0xCE, 0xAA, 0xCE, 0xAB, + 0xCE, 0x8C, 0xCE, 0x8E, 0xCE, 0x8F, 0xCE, 0x92, + 0xCE, 0x98, 0xCE, 0xA6, 0xCE, 0xA0, 0xCF, 0x98, + 0xCF, 0x9A, 0xCF, 0x9C, 0xCF, 0x9E, 0xCF, 0xA0, + 0xCF, 0xA2, 0xCF, 0xA4, 0xCF, 0xA6, 0xCF, 0xA8, + 0xCF, 0xAA, 0xCF, 0xAC, 0xCF, 0xAE, 0xCE, 0x9A, + 0xCE, 0xA1, 0xCE, 0xA3, 0xCE, 0x95, 0xD0, 0x90, + 0xD0, 0x91, 0xD0, 0x92, 0xD0, 0x93, 0xD0, 0x94, + 0xD0, 0x95, 0xD0, 0x96, 0xD0, 0x97, 0xD0, 0x98, + 0xD0, 0x99, 0xD0, 0x9A, 0xD0, 0x9B, 0xD0, 0x9C, + 0xD0, 0x9D, 0xD0, 0x9E, 0xD0, 0x9F, 0xD0, 0xA0, + 0xD0, 0xA1, 0xD0, 0xA2, 0xD0, 0xA3, 0xD0, 0xA4, + 0xD0, 0xA5, 0xD0, 0xA6, 0xD0, 0xA7, 0xD0, 0xA8, + 0xD0, 0xA9, 0xD0, 0xAA, 0xD0, 0xAB, 0xD0, 0xAC, + 0xD0, 0xAD, 0xD0, 0xAE, 0xD0, 0xAF, 0xD0, 0x80, + 0xD0, 0x81, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0x84, + 0xD0, 0x85, 0xD0, 0x86, 0xD0, 0x87, 0xD0, 0x88, + 0xD0, 0x89, 0xD0, 0x8A, 0xD0, 0x8B, 0xD0, 0x8C, + 0xD0, 0x8D, 0xD0, 0x8E, 0xD0, 0x8F, 0xD1, 0xA0, + 0xD1, 0xA2, 0xD1, 0xA4, 0xD1, 0xA6, 0xD1, 0xA8, + 0xD1, 0xAA, 0xD1, 0xAC, 0xD1, 0xAE, 0xD1, 0xB0, + 0xD1, 0xB2, 0xD1, 0xB4, 0xD1, 0xB6, 0xD1, 0xB8, + 0xD1, 0xBA, 0xD1, 0xBC, 0xD1, 0xBE, 0xD2, 0x80, + 0xD2, 0x8A, 0xD2, 0x8C, 0xD2, 0x8E, 0xD2, 0x90, + 0xD2, 0x92, 0xD2, 0x94, 0xD2, 0x96, 0xD2, 0x98, + 0xD2, 0x9A, 0xD2, 0x9C, 0xD2, 0x9E, 0xD2, 0xA0, + 0xD2, 0xA2, 0xD2, 0xA4, 0xD2, 0xA6, 0xD2, 0xA8, + 0xD2, 0xAA, 0xD2, 0xAC, 0xD2, 0xAE, 0xD2, 0xB0, + 0xD2, 0xB2, 0xD2, 0xB4, 0xD2, 0xB6, 0xD2, 0xB8, + 0xD2, 0xBA, 0xD2, 0xBC, 0xD2, 0xBE, 0xD3, 0x81, + 0xD3, 0x83, 0xD3, 0x85, 0xD3, 0x87, 0xD3, 0x89, + 0xD3, 0x8B, 0xD3, 0x8D, 0xD3, 0x90, 0xD3, 0x92, + 0xD3, 0x94, 0xD3, 0x96, 0xD3, 0x98, 0xD3, 0x9A, + 0xD3, 0x9C, 0xD3, 0x9E, 0xD3, 0xA0, 0xD3, 0xA2, + 0xD3, 0xA4, 0xD3, 0xA6, 0xD3, 0xA8, 0xD3, 0xAA, + 0xD3, 0xAC, 0xD3, 0xAE, 0xD3, 0xB0, 0xD3, 0xB2, + 0xD3, 0xB4, 0xD3, 0xB8, 0xD4, 0x80, 0xD4, 0x82, + 0xD4, 0x84, 0xD4, 0x86, 0xD4, 0x88, 0xD4, 0x8A, + 0xD4, 0x8C, 0xD4, 0x8E, 0xD4, 0xB1, 0xD4, 0xB2, + 0xD4, 0xB3, 0xD4, 0xB4, 0xD4, 0xB5, 0xD4, 0xB6, + 0xD4, 0xB7, 0xD4, 0xB8, 0xD4, 0xB9, 0xD4, 0xBA, + 0xD4, 0xBB, 0xD4, 0xBC, 0xD4, 0xBD, 0xD4, 0xBE, + 0xD4, 0xBF, 0xD5, 0x80, 0xD5, 0x81, 0xD5, 0x82, + 0xD5, 0x83, 0xD5, 0x84, 0xD5, 0x85, 0xD5, 0x86, + 0xD5, 0x87, 0xD5, 0x88, 0xD5, 0x89, 0xD5, 0x8A, + 0xD5, 0x8B, 0xD5, 0x8C, 0xD5, 0x8D, 0xD5, 0x8E, + 0xD5, 0x8F, 0xD5, 0x90, 0xD5, 0x91, 0xD5, 0x92, + 0xD5, 0x93, 0xD5, 0x94, 0xD5, 0x95, 0xD5, 0x96, + 0xE1, 0xB8, 0x80, 0xE1, 0xB8, 0x82, 0xE1, 0xB8, + 0x84, 0xE1, 0xB8, 0x86, 0xE1, 0xB8, 0x88, 0xE1, + 0xB8, 0x8A, 0xE1, 0xB8, 0x8C, 0xE1, 0xB8, 0x8E, + 0xE1, 0xB8, 0x90, 0xE1, 0xB8, 0x92, 0xE1, 0xB8, + 0x94, 0xE1, 0xB8, 0x96, 0xE1, 0xB8, 0x98, 0xE1, + 0xB8, 0x9A, 0xE1, 0xB8, 0x9C, 0xE1, 0xB8, 0x9E, + 0xE1, 0xB8, 0xA0, 0xE1, 0xB8, 0xA2, 0xE1, 0xB8, + 0xA4, 0xE1, 0xB8, 0xA6, 0xE1, 0xB8, 0xA8, 0xE1, + 0xB8, 0xAA, 0xE1, 0xB8, 0xAC, 0xE1, 0xB8, 0xAE, + 0xE1, 0xB8, 0xB0, 0xE1, 0xB8, 0xB2, 0xE1, 0xB8, + 0xB4, 0xE1, 0xB8, 0xB6, 0xE1, 0xB8, 0xB8, 0xE1, + 0xB8, 0xBA, 0xE1, 0xB8, 0xBC, 0xE1, 0xB8, 0xBE, + 0xE1, 0xB9, 0x80, 0xE1, 0xB9, 0x82, 0xE1, 0xB9, + 0x84, 0xE1, 0xB9, 0x86, 0xE1, 0xB9, 0x88, 0xE1, + 0xB9, 0x8A, 0xE1, 0xB9, 0x8C, 0xE1, 0xB9, 0x8E, + 0xE1, 0xB9, 0x90, 0xE1, 0xB9, 0x92, 0xE1, 0xB9, + 0x94, 0xE1, 0xB9, 0x96, 0xE1, 0xB9, 0x98, 0xE1, + 0xB9, 0x9A, 0xE1, 0xB9, 0x9C, 0xE1, 0xB9, 0x9E, + 0xE1, 0xB9, 0xA0, 0xE1, 0xB9, 0xA2, 0xE1, 0xB9, + 0xA4, 0xE1, 0xB9, 0xA6, 0xE1, 0xB9, 0xA8, 0xE1, + 0xB9, 0xAA, 0xE1, 0xB9, 0xAC, 0xE1, 0xB9, 0xAE, + 0xE1, 0xB9, 0xB0, 0xE1, 0xB9, 0xB2, 0xE1, 0xB9, + 0xB4, 0xE1, 0xB9, 0xB6, 0xE1, 0xB9, 0xB8, 0xE1, + 0xB9, 0xBA, 0xE1, 0xB9, 0xBC, 0xE1, 0xB9, 0xBE, + 0xE1, 0xBA, 0x80, 0xE1, 0xBA, 0x82, 0xE1, 0xBA, + 0x84, 0xE1, 0xBA, 0x86, 0xE1, 0xBA, 0x88, 0xE1, + 0xBA, 0x8A, 0xE1, 0xBA, 0x8C, 0xE1, 0xBA, 0x8E, + 0xE1, 0xBA, 0x90, 0xE1, 0xBA, 0x92, 0xE1, 0xBA, + 0x94, 0xE1, 0xB9, 0xA0, 0xE1, 0xBA, 0xA0, 0xE1, + 0xBA, 0xA2, 0xE1, 0xBA, 0xA4, 0xE1, 0xBA, 0xA6, + 0xE1, 0xBA, 0xA8, 0xE1, 0xBA, 0xAA, 0xE1, 0xBA, + 0xAC, 0xE1, 0xBA, 0xAE, 0xE1, 0xBA, 0xB0, 0xE1, + 0xBA, 0xB2, 0xE1, 0xBA, 0xB4, 0xE1, 0xBA, 0xB6, + 0xE1, 0xBA, 0xB8, 0xE1, 0xBA, 0xBA, 0xE1, 0xBA, + 0xBC, 0xE1, 0xBA, 0xBE, 0xE1, 0xBB, 0x80, 0xE1, + 0xBB, 0x82, 0xE1, 0xBB, 0x84, 0xE1, 0xBB, 0x86, + 0xE1, 0xBB, 0x88, 0xE1, 0xBB, 0x8A, 0xE1, 0xBB, + 0x8C, 0xE1, 0xBB, 0x8E, 0xE1, 0xBB, 0x90, 0xE1, + 0xBB, 0x92, 0xE1, 0xBB, 0x94, 0xE1, 0xBB, 0x96, + 0xE1, 0xBB, 0x98, 0xE1, 0xBB, 0x9A, 0xE1, 0xBB, + 0x9C, 0xE1, 0xBB, 0x9E, 0xE1, 0xBB, 0xA0, 0xE1, + 0xBB, 0xA2, 0xE1, 0xBB, 0xA4, 0xE1, 0xBB, 0xA6, + 0xE1, 0xBB, 0xA8, 0xE1, 0xBB, 0xAA, 0xE1, 0xBB, + 0xAC, 0xE1, 0xBB, 0xAE, 0xE1, 0xBB, 0xB0, 0xE1, + 0xBB, 0xB2, 0xE1, 0xBB, 0xB4, 0xE1, 0xBB, 0xB6, + 0xE1, 0xBB, 0xB8, 0xE1, 0xBC, 0x88, 0xE1, 0xBC, + 0x89, 0xE1, 0xBC, 0x8A, 0xE1, 0xBC, 0x8B, 0xE1, + 0xBC, 0x8C, 0xE1, 0xBC, 0x8D, 0xE1, 0xBC, 0x8E, + 0xE1, 0xBC, 0x8F, 0xE1, 0xBC, 0x98, 0xE1, 0xBC, + 0x99, 0xE1, 0xBC, 0x9A, 0xE1, 0xBC, 0x9B, 0xE1, + 0xBC, 0x9C, 0xE1, 0xBC, 0x9D, 0xE1, 0xBC, 0xA8, + 0xE1, 0xBC, 0xA9, 0xE1, 0xBC, 0xAA, 0xE1, 0xBC, + 0xAB, 0xE1, 0xBC, 0xAC, 0xE1, 0xBC, 0xAD, 0xE1, + 0xBC, 0xAE, 0xE1, 0xBC, 0xAF, 0xE1, 0xBC, 0xB8, + 0xE1, 0xBC, 0xB9, 0xE1, 0xBC, 0xBA, 0xE1, 0xBC, + 0xBB, 0xE1, 0xBC, 0xBC, 0xE1, 0xBC, 0xBD, 0xE1, + 0xBC, 0xBE, 0xE1, 0xBC, 0xBF, 0xE1, 0xBD, 0x88, + 0xE1, 0xBD, 0x89, 0xE1, 0xBD, 0x8A, 0xE1, 0xBD, + 0x8B, 0xE1, 0xBD, 0x8C, 0xE1, 0xBD, 0x8D, 0xE1, + 0xBD, 0x99, 0xE1, 0xBD, 0x9B, 0xE1, 0xBD, 0x9D, + 0xE1, 0xBD, 0x9F, 0xE1, 0xBD, 0xA8, 0xE1, 0xBD, + 0xA9, 0xE1, 0xBD, 0xAA, 0xE1, 0xBD, 0xAB, 0xE1, + 0xBD, 0xAC, 0xE1, 0xBD, 0xAD, 0xE1, 0xBD, 0xAE, + 0xE1, 0xBD, 0xAF, 0xE1, 0xBE, 0xBA, 0xE1, 0xBE, + 0xBB, 0xE1, 0xBF, 0x88, 0xE1, 0xBF, 0x89, 0xE1, + 0xBF, 0x8A, 0xE1, 0xBF, 0x8B, 0xE1, 0xBF, 0x9A, + 0xE1, 0xBF, 0x9B, 0xE1, 0xBF, 0xB8, 0xE1, 0xBF, + 0xB9, 0xE1, 0xBF, 0xAA, 0xE1, 0xBF, 0xAB, 0xE1, + 0xBF, 0xBA, 0xE1, 0xBF, 0xBB, 0xE1, 0xBE, 0x88, + 0xE1, 0xBE, 0x89, 0xE1, 0xBE, 0x8A, 0xE1, 0xBE, + 0x8B, 0xE1, 0xBE, 0x8C, 0xE1, 0xBE, 0x8D, 0xE1, + 0xBE, 0x8E, 0xE1, 0xBE, 0x8F, 0xE1, 0xBE, 0x98, + 0xE1, 0xBE, 0x99, 0xE1, 0xBE, 0x9A, 0xE1, 0xBE, + 0x9B, 0xE1, 0xBE, 0x9C, 0xE1, 0xBE, 0x9D, 0xE1, + 0xBE, 0x9E, 0xE1, 0xBE, 0x9F, 0xE1, 0xBE, 0xA8, + 0xE1, 0xBE, 0xA9, 0xE1, 0xBE, 0xAA, 0xE1, 0xBE, + 0xAB, 0xE1, 0xBE, 0xAC, 0xE1, 0xBE, 0xAD, 0xE1, + 0xBE, 0xAE, 0xE1, 0xBE, 0xAF, 0xE1, 0xBE, 0xB8, + 0xE1, 0xBE, 0xB9, 0xE1, 0xBE, 0xBC, 0xCE, 0x99, + 0xE1, 0xBF, 0x8C, 0xE1, 0xBF, 0x98, 0xE1, 0xBF, + 0x99, 0xE1, 0xBF, 0xA8, 0xE1, 0xBF, 0xA9, 0xE1, + 0xBF, 0xAC, 0xE1, 0xBF, 0xBC, 0xE2, 0x85, 0xA0, + 0xE2, 0x85, 0xA1, 0xE2, 0x85, 0xA2, 0xE2, 0x85, + 0xA3, 0xE2, 0x85, 0xA4, 0xE2, 0x85, 0xA5, 0xE2, + 0x85, 0xA6, 0xE2, 0x85, 0xA7, 0xE2, 0x85, 0xA8, + 0xE2, 0x85, 0xA9, 0xE2, 0x85, 0xAA, 0xE2, 0x85, + 0xAB, 0xE2, 0x85, 0xAC, 0xE2, 0x85, 0xAD, 0xE2, + 0x85, 0xAE, 0xE2, 0x85, 0xAF, 0xE2, 0x92, 0xB6, + 0xE2, 0x92, 0xB7, 0xE2, 0x92, 0xB8, 0xE2, 0x92, + 0xB9, 0xE2, 0x92, 0xBA, 0xE2, 0x92, 0xBB, 0xE2, + 0x92, 0xBC, 0xE2, 0x92, 0xBD, 0xE2, 0x92, 0xBE, + 0xE2, 0x92, 0xBF, 0xE2, 0x93, 0x80, 0xE2, 0x93, + 0x81, 0xE2, 0x93, 0x82, 0xE2, 0x93, 0x83, 0xE2, + 0x93, 0x84, 0xE2, 0x93, 0x85, 0xE2, 0x93, 0x86, + 0xE2, 0x93, 0x87, 0xE2, 0x93, 0x88, 0xE2, 0x93, + 0x89, 0xE2, 0x93, 0x8A, 0xE2, 0x93, 0x8B, 0xE2, + 0x93, 0x8C, 0xE2, 0x93, 0x8D, 0xE2, 0x93, 0x8E, + 0xE2, 0x93, 0x8F, 0xEF, 0xBC, 0xA1, 0xEF, 0xBC, + 0xA2, 0xEF, 0xBC, 0xA3, 0xEF, 0xBC, 0xA4, 0xEF, + 0xBC, 0xA5, 0xEF, 0xBC, 0xA6, 0xEF, 0xBC, 0xA7, + 0xEF, 0xBC, 0xA8, 0xEF, 0xBC, 0xA9, 0xEF, 0xBC, + 0xAA, 0xEF, 0xBC, 0xAB, 0xEF, 0xBC, 0xAC, 0xEF, + 0xBC, 0xAD, 0xEF, 0xBC, 0xAE, 0xEF, 0xBC, 0xAF, + 0xEF, 0xBC, 0xB0, 0xEF, 0xBC, 0xB1, 0xEF, 0xBC, + 0xB2, 0xEF, 0xBC, 0xB3, 0xEF, 0xBC, 0xB4, 0xEF, + 0xBC, 0xB5, 0xEF, 0xBC, 0xB6, 0xEF, 0xBC, 0xB7, + 0xEF, 0xBC, 0xB8, 0xEF, 0xBC, 0xB9, 0xEF, 0xBC, + 0xBA, 0xF0, 0x90, 0x90, 0x80, 0xF0, 0x90, 0x90, + 0x81, 0xF0, 0x90, 0x90, 0x82, 0xF0, 0x90, 0x90, + 0x83, 0xF0, 0x90, 0x90, 0x84, 0xF0, 0x90, 0x90, + 0x85, 0xF0, 0x90, 0x90, 0x86, 0xF0, 0x90, 0x90, + 0x87, 0xF0, 0x90, 0x90, 0x88, 0xF0, 0x90, 0x90, + 0x89, 0xF0, 0x90, 0x90, 0x8A, 0xF0, 0x90, 0x90, + 0x8B, 0xF0, 0x90, 0x90, 0x8C, 0xF0, 0x90, 0x90, + 0x8D, 0xF0, 0x90, 0x90, 0x8E, 0xF0, 0x90, 0x90, + 0x8F, 0xF0, 0x90, 0x90, 0x90, 0xF0, 0x90, 0x90, + 0x91, 0xF0, 0x90, 0x90, 0x92, 0xF0, 0x90, 0x90, + 0x93, 0xF0, 0x90, 0x90, 0x94, 0xF0, 0x90, 0x90, + 0x95, 0xF0, 0x90, 0x90, 0x96, 0xF0, 0x90, 0x90, + 0x97, 0xF0, 0x90, 0x90, 0x98, 0xF0, 0x90, 0x90, + 0x99, 0xF0, 0x90, 0x90, 0x9A, 0xF0, 0x90, 0x90, + 0x9B, 0xF0, 0x90, 0x90, 0x9C, 0xF0, 0x90, 0x90, + 0x9D, 0xF0, 0x90, 0x90, 0x9E, 0xF0, 0x90, 0x90, + 0x9F, 0xF0, 0x90, 0x90, 0xA0, 0xF0, 0x90, 0x90, + 0xA1, 0xF0, 0x90, 0x90, 0xA2, 0xF0, 0x90, 0x90, + 0xA3, 0xF0, 0x90, 0x90, 0xA4, 0xF0, 0x90, 0x90, + 0xA5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + }, + { + 0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82, + 0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86, + 0xC3, 0x87, 0xC3, 0x88, 0xC3, 0x89, 0xC3, 0x8A, + 0xC3, 0x8B, 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, + 0xC3, 0x8F, 0xC3, 0x90, 0xC3, 0x91, 0xC3, 0x92, + 0xC3, 0x93, 0xC3, 0x94, 0xC3, 0x95, 0xC3, 0x96, + 0xC3, 0x98, 0xC3, 0x99, 0xC3, 0x9A, 0xC3, 0x9B, + 0xC3, 0x9C, 0xC3, 0x9D, 0xC3, 0x9E, 0xC5, 0xB8, + 0xC4, 0x80, 0xC4, 0x82, 0xC4, 0x84, 0xC4, 0x86, + 0xC4, 0x88, 0xC4, 0x8A, 0xC4, 0x8C, 0xC4, 0x8E, + 0xC4, 0x90, 0xC4, 0x92, 0xC4, 0x94, 0xC4, 0x96, + 0xC4, 0x98, 0xC4, 0x9A, 0xC4, 0x9C, 0xC4, 0x9E, + 0xC4, 0xA0, 0xC4, 0xA2, 0xC4, 0xA4, 0xC4, 0xA6, + 0xC4, 0xA8, 0xC4, 0xAA, 0xC4, 0xAC, 0xC4, 0xAE, + 0x49, 0xC4, 0xB2, 0xC4, 0xB4, 0xC4, 0xB6, 0xC4, + 0xB9, 0xC4, 0xBB, 0xC4, 0xBD, 0xC4, 0xBF, 0xC5, + 0x81, 0xC5, 0x83, 0xC5, 0x85, 0xC5, 0x87, 0xC5, + 0x8A, 0xC5, 0x8C, 0xC5, 0x8E, 0xC5, 0x90, 0xC5, + 0x92, 0xC5, 0x94, 0xC5, 0x96, 0xC5, 0x98, 0xC5, + 0x9A, 0xC5, 0x9C, 0xC5, 0x9E, 0xC5, 0xA0, 0xC5, + 0xA2, 0xC5, 0xA4, 0xC5, 0xA6, 0xC5, 0xA8, 0xC5, + 0xAA, 0xC5, 0xAC, 0xC5, 0xAE, 0xC5, 0xB0, 0xC5, + 0xB2, 0xC5, 0xB4, 0xC5, 0xB6, 0xC5, 0xB9, 0xC5, + 0xBB, 0xC5, 0xBD, 0x53, 0xC9, 0x83, 0xC6, 0x82, + 0xC6, 0x84, 0xC6, 0x87, 0xC6, 0x8B, 0xC6, 0x91, + 0xC7, 0xB6, 0xC6, 0x98, 0xC8, 0xBD, 0xC8, 0xA0, + 0xC6, 0xA0, 0xC6, 0xA2, 0xC6, 0xA4, 0xC6, 0xA7, + 0xC6, 0xAC, 0xC6, 0xAF, 0xC6, 0xB3, 0xC6, 0xB5, + 0xC6, 0xB8, 0xC6, 0xBC, 0xC7, 0xB7, 0xC7, 0x84, + 0xC7, 0x84, 0xC7, 0x87, 0xC7, 0x87, 0xC7, 0x8A, + 0xC7, 0x8A, 0xC7, 0x8D, 0xC7, 0x8F, 0xC7, 0x91, + 0xC7, 0x93, 0xC7, 0x95, 0xC7, 0x97, 0xC7, 0x99, + 0xC7, 0x9B, 0xC6, 0x8E, 0xC7, 0x9E, 0xC7, 0xA0, + 0xC7, 0xA2, 0xC7, 0xA4, 0xC7, 0xA6, 0xC7, 0xA8, + 0xC7, 0xAA, 0xC7, 0xAC, 0xC7, 0xAE, 0xC7, 0xB1, + 0xC7, 0xB1, 0xC7, 0xB4, 0xC7, 0xB8, 0xC7, 0xBA, + 0xC7, 0xBC, 0xC7, 0xBE, 0xC8, 0x80, 0xC8, 0x82, + 0xC8, 0x84, 0xC8, 0x86, 0xC8, 0x88, 0xC8, 0x8A, + 0xC8, 0x8C, 0xC8, 0x8E, 0xC8, 0x90, 0xC8, 0x92, + 0xC8, 0x94, 0xC8, 0x96, 0xC8, 0x98, 0xC8, 0x9A, + 0xC8, 0x9C, 0xC8, 0x9E, 0xC8, 0xA2, 0xC8, 0xA4, + 0xC8, 0xA6, 0xC8, 0xA8, 0xC8, 0xAA, 0xC8, 0xAC, + 0xC8, 0xAE, 0xC8, 0xB0, 0xC8, 0xB2, 0xC8, 0xBB, + 0xC9, 0x81, 0xC9, 0x86, 0xC9, 0x88, 0xC9, 0x8A, + 0xC9, 0x8C, 0xC9, 0x8E, 0xC6, 0x81, 0xC6, 0x86, + 0xC6, 0x89, 0xC6, 0x8A, 0xC6, 0x8F, 0xC6, 0x90, + 0xC6, 0x93, 0xC6, 0x94, 0xC6, 0x97, 0xC6, 0x96, + 0xE2, 0xB1, 0xA2, 0xC6, 0x9C, 0xC6, 0x9D, 0xC6, + 0x9F, 0xE2, 0xB1, 0xA4, 0xC6, 0xA6, 0xC6, 0xA9, + 0xC6, 0xAE, 0xC9, 0x84, 0xC6, 0xB1, 0xC6, 0xB2, + 0xC9, 0x85, 0xC6, 0xB7, 0xCE, 0x99, 0xCF, 0xBD, + 0xCF, 0xBE, 0xCF, 0xBF, 0xCE, 0x86, 0xCE, 0x88, + 0xCE, 0x89, 0xCE, 0x8A, 0xCE, 0x91, 0xCE, 0x92, + 0xCE, 0x93, 0xCE, 0x94, 0xCE, 0x95, 0xCE, 0x96, + 0xCE, 0x97, 0xCE, 0x98, 0xCE, 0x99, 0xCE, 0x9A, + 0xCE, 0x9B, 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, + 0xCE, 0x9F, 0xCE, 0xA0, 0xCE, 0xA1, 0xCE, 0xA3, + 0xCE, 0xA3, 0xCE, 0xA4, 0xCE, 0xA5, 0xCE, 0xA6, + 0xCE, 0xA7, 0xCE, 0xA8, 0xCE, 0xA9, 0xCE, 0xAA, + 0xCE, 0xAB, 0xCE, 0x8C, 0xCE, 0x8E, 0xCE, 0x8F, + 0xCE, 0x92, 0xCE, 0x98, 0xCE, 0xA6, 0xCE, 0xA0, + 0xCF, 0x98, 0xCF, 0x9A, 0xCF, 0x9C, 0xCF, 0x9E, + 0xCF, 0xA0, 0xCF, 0xA2, 0xCF, 0xA4, 0xCF, 0xA6, + 0xCF, 0xA8, 0xCF, 0xAA, 0xCF, 0xAC, 0xCF, 0xAE, + 0xCE, 0x9A, 0xCE, 0xA1, 0xCF, 0xB9, 0xCE, 0x95, + 0xCF, 0xB7, 0xCF, 0xBA, 0xD0, 0x90, 0xD0, 0x91, + 0xD0, 0x92, 0xD0, 0x93, 0xD0, 0x94, 0xD0, 0x95, + 0xD0, 0x96, 0xD0, 0x97, 0xD0, 0x98, 0xD0, 0x99, + 0xD0, 0x9A, 0xD0, 0x9B, 0xD0, 0x9C, 0xD0, 0x9D, + 0xD0, 0x9E, 0xD0, 0x9F, 0xD0, 0xA0, 0xD0, 0xA1, + 0xD0, 0xA2, 0xD0, 0xA3, 0xD0, 0xA4, 0xD0, 0xA5, + 0xD0, 0xA6, 0xD0, 0xA7, 0xD0, 0xA8, 0xD0, 0xA9, + 0xD0, 0xAA, 0xD0, 0xAB, 0xD0, 0xAC, 0xD0, 0xAD, + 0xD0, 0xAE, 0xD0, 0xAF, 0xD0, 0x80, 0xD0, 0x81, + 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0x84, 0xD0, 0x85, + 0xD0, 0x86, 0xD0, 0x87, 0xD0, 0x88, 0xD0, 0x89, + 0xD0, 0x8A, 0xD0, 0x8B, 0xD0, 0x8C, 0xD0, 0x8D, + 0xD0, 0x8E, 0xD0, 0x8F, 0xD1, 0xA0, 0xD1, 0xA2, + 0xD1, 0xA4, 0xD1, 0xA6, 0xD1, 0xA8, 0xD1, 0xAA, + 0xD1, 0xAC, 0xD1, 0xAE, 0xD1, 0xB0, 0xD1, 0xB2, + 0xD1, 0xB4, 0xD1, 0xB6, 0xD1, 0xB8, 0xD1, 0xBA, + 0xD1, 0xBC, 0xD1, 0xBE, 0xD2, 0x80, 0xD2, 0x8A, + 0xD2, 0x8C, 0xD2, 0x8E, 0xD2, 0x90, 0xD2, 0x92, + 0xD2, 0x94, 0xD2, 0x96, 0xD2, 0x98, 0xD2, 0x9A, + 0xD2, 0x9C, 0xD2, 0x9E, 0xD2, 0xA0, 0xD2, 0xA2, + 0xD2, 0xA4, 0xD2, 0xA6, 0xD2, 0xA8, 0xD2, 0xAA, + 0xD2, 0xAC, 0xD2, 0xAE, 0xD2, 0xB0, 0xD2, 0xB2, + 0xD2, 0xB4, 0xD2, 0xB6, 0xD2, 0xB8, 0xD2, 0xBA, + 0xD2, 0xBC, 0xD2, 0xBE, 0xD3, 0x81, 0xD3, 0x83, + 0xD3, 0x85, 0xD3, 0x87, 0xD3, 0x89, 0xD3, 0x8B, + 0xD3, 0x8D, 0xD3, 0x80, 0xD3, 0x90, 0xD3, 0x92, + 0xD3, 0x94, 0xD3, 0x96, 0xD3, 0x98, 0xD3, 0x9A, + 0xD3, 0x9C, 0xD3, 0x9E, 0xD3, 0xA0, 0xD3, 0xA2, + 0xD3, 0xA4, 0xD3, 0xA6, 0xD3, 0xA8, 0xD3, 0xAA, + 0xD3, 0xAC, 0xD3, 0xAE, 0xD3, 0xB0, 0xD3, 0xB2, + 0xD3, 0xB4, 0xD3, 0xB6, 0xD3, 0xB8, 0xD3, 0xBA, + 0xD3, 0xBC, 0xD3, 0xBE, 0xD4, 0x80, 0xD4, 0x82, + 0xD4, 0x84, 0xD4, 0x86, 0xD4, 0x88, 0xD4, 0x8A, + 0xD4, 0x8C, 0xD4, 0x8E, 0xD4, 0x90, 0xD4, 0x92, + 0xD4, 0xB1, 0xD4, 0xB2, 0xD4, 0xB3, 0xD4, 0xB4, + 0xD4, 0xB5, 0xD4, 0xB6, 0xD4, 0xB7, 0xD4, 0xB8, + 0xD4, 0xB9, 0xD4, 0xBA, 0xD4, 0xBB, 0xD4, 0xBC, + 0xD4, 0xBD, 0xD4, 0xBE, 0xD4, 0xBF, 0xD5, 0x80, + 0xD5, 0x81, 0xD5, 0x82, 0xD5, 0x83, 0xD5, 0x84, + 0xD5, 0x85, 0xD5, 0x86, 0xD5, 0x87, 0xD5, 0x88, + 0xD5, 0x89, 0xD5, 0x8A, 0xD5, 0x8B, 0xD5, 0x8C, + 0xD5, 0x8D, 0xD5, 0x8E, 0xD5, 0x8F, 0xD5, 0x90, + 0xD5, 0x91, 0xD5, 0x92, 0xD5, 0x93, 0xD5, 0x94, + 0xD5, 0x95, 0xD5, 0x96, 0xE2, 0xB1, 0xA3, 0xE1, + 0xB8, 0x80, 0xE1, 0xB8, 0x82, 0xE1, 0xB8, 0x84, + 0xE1, 0xB8, 0x86, 0xE1, 0xB8, 0x88, 0xE1, 0xB8, + 0x8A, 0xE1, 0xB8, 0x8C, 0xE1, 0xB8, 0x8E, 0xE1, + 0xB8, 0x90, 0xE1, 0xB8, 0x92, 0xE1, 0xB8, 0x94, + 0xE1, 0xB8, 0x96, 0xE1, 0xB8, 0x98, 0xE1, 0xB8, + 0x9A, 0xE1, 0xB8, 0x9C, 0xE1, 0xB8, 0x9E, 0xE1, + 0xB8, 0xA0, 0xE1, 0xB8, 0xA2, 0xE1, 0xB8, 0xA4, + 0xE1, 0xB8, 0xA6, 0xE1, 0xB8, 0xA8, 0xE1, 0xB8, + 0xAA, 0xE1, 0xB8, 0xAC, 0xE1, 0xB8, 0xAE, 0xE1, + 0xB8, 0xB0, 0xE1, 0xB8, 0xB2, 0xE1, 0xB8, 0xB4, + 0xE1, 0xB8, 0xB6, 0xE1, 0xB8, 0xB8, 0xE1, 0xB8, + 0xBA, 0xE1, 0xB8, 0xBC, 0xE1, 0xB8, 0xBE, 0xE1, + 0xB9, 0x80, 0xE1, 0xB9, 0x82, 0xE1, 0xB9, 0x84, + 0xE1, 0xB9, 0x86, 0xE1, 0xB9, 0x88, 0xE1, 0xB9, + 0x8A, 0xE1, 0xB9, 0x8C, 0xE1, 0xB9, 0x8E, 0xE1, + 0xB9, 0x90, 0xE1, 0xB9, 0x92, 0xE1, 0xB9, 0x94, + 0xE1, 0xB9, 0x96, 0xE1, 0xB9, 0x98, 0xE1, 0xB9, + 0x9A, 0xE1, 0xB9, 0x9C, 0xE1, 0xB9, 0x9E, 0xE1, + 0xB9, 0xA0, 0xE1, 0xB9, 0xA2, 0xE1, 0xB9, 0xA4, + 0xE1, 0xB9, 0xA6, 0xE1, 0xB9, 0xA8, 0xE1, 0xB9, + 0xAA, 0xE1, 0xB9, 0xAC, 0xE1, 0xB9, 0xAE, 0xE1, + 0xB9, 0xB0, 0xE1, 0xB9, 0xB2, 0xE1, 0xB9, 0xB4, + 0xE1, 0xB9, 0xB6, 0xE1, 0xB9, 0xB8, 0xE1, 0xB9, + 0xBA, 0xE1, 0xB9, 0xBC, 0xE1, 0xB9, 0xBE, 0xE1, + 0xBA, 0x80, 0xE1, 0xBA, 0x82, 0xE1, 0xBA, 0x84, + 0xE1, 0xBA, 0x86, 0xE1, 0xBA, 0x88, 0xE1, 0xBA, + 0x8A, 0xE1, 0xBA, 0x8C, 0xE1, 0xBA, 0x8E, 0xE1, + 0xBA, 0x90, 0xE1, 0xBA, 0x92, 0xE1, 0xBA, 0x94, + 0xE1, 0xB9, 0xA0, 0xE1, 0xBA, 0xA0, 0xE1, 0xBA, + 0xA2, 0xE1, 0xBA, 0xA4, 0xE1, 0xBA, 0xA6, 0xE1, + 0xBA, 0xA8, 0xE1, 0xBA, 0xAA, 0xE1, 0xBA, 0xAC, + 0xE1, 0xBA, 0xAE, 0xE1, 0xBA, 0xB0, 0xE1, 0xBA, + 0xB2, 0xE1, 0xBA, 0xB4, 0xE1, 0xBA, 0xB6, 0xE1, + 0xBA, 0xB8, 0xE1, 0xBA, 0xBA, 0xE1, 0xBA, 0xBC, + 0xE1, 0xBA, 0xBE, 0xE1, 0xBB, 0x80, 0xE1, 0xBB, + 0x82, 0xE1, 0xBB, 0x84, 0xE1, 0xBB, 0x86, 0xE1, + 0xBB, 0x88, 0xE1, 0xBB, 0x8A, 0xE1, 0xBB, 0x8C, + 0xE1, 0xBB, 0x8E, 0xE1, 0xBB, 0x90, 0xE1, 0xBB, + 0x92, 0xE1, 0xBB, 0x94, 0xE1, 0xBB, 0x96, 0xE1, + 0xBB, 0x98, 0xE1, 0xBB, 0x9A, 0xE1, 0xBB, 0x9C, + 0xE1, 0xBB, 0x9E, 0xE1, 0xBB, 0xA0, 0xE1, 0xBB, + 0xA2, 0xE1, 0xBB, 0xA4, 0xE1, 0xBB, 0xA6, 0xE1, + 0xBB, 0xA8, 0xE1, 0xBB, 0xAA, 0xE1, 0xBB, 0xAC, + 0xE1, 0xBB, 0xAE, 0xE1, 0xBB, 0xB0, 0xE1, 0xBB, + 0xB2, 0xE1, 0xBB, 0xB4, 0xE1, 0xBB, 0xB6, 0xE1, + 0xBB, 0xB8, 0xE1, 0xBC, 0x88, 0xE1, 0xBC, 0x89, + 0xE1, 0xBC, 0x8A, 0xE1, 0xBC, 0x8B, 0xE1, 0xBC, + 0x8C, 0xE1, 0xBC, 0x8D, 0xE1, 0xBC, 0x8E, 0xE1, + 0xBC, 0x8F, 0xE1, 0xBC, 0x98, 0xE1, 0xBC, 0x99, + 0xE1, 0xBC, 0x9A, 0xE1, 0xBC, 0x9B, 0xE1, 0xBC, + 0x9C, 0xE1, 0xBC, 0x9D, 0xE1, 0xBC, 0xA8, 0xE1, + 0xBC, 0xA9, 0xE1, 0xBC, 0xAA, 0xE1, 0xBC, 0xAB, + 0xE1, 0xBC, 0xAC, 0xE1, 0xBC, 0xAD, 0xE1, 0xBC, + 0xAE, 0xE1, 0xBC, 0xAF, 0xE1, 0xBC, 0xB8, 0xE1, + 0xBC, 0xB9, 0xE1, 0xBC, 0xBA, 0xE1, 0xBC, 0xBB, + 0xE1, 0xBC, 0xBC, 0xE1, 0xBC, 0xBD, 0xE1, 0xBC, + 0xBE, 0xE1, 0xBC, 0xBF, 0xE1, 0xBD, 0x88, 0xE1, + 0xBD, 0x89, 0xE1, 0xBD, 0x8A, 0xE1, 0xBD, 0x8B, + 0xE1, 0xBD, 0x8C, 0xE1, 0xBD, 0x8D, 0xE1, 0xBD, + 0x99, 0xE1, 0xBD, 0x9B, 0xE1, 0xBD, 0x9D, 0xE1, + 0xBD, 0x9F, 0xE1, 0xBD, 0xA8, 0xE1, 0xBD, 0xA9, + 0xE1, 0xBD, 0xAA, 0xE1, 0xBD, 0xAB, 0xE1, 0xBD, + 0xAC, 0xE1, 0xBD, 0xAD, 0xE1, 0xBD, 0xAE, 0xE1, + 0xBD, 0xAF, 0xE1, 0xBE, 0xBA, 0xE1, 0xBE, 0xBB, + 0xE1, 0xBF, 0x88, 0xE1, 0xBF, 0x89, 0xE1, 0xBF, + 0x8A, 0xE1, 0xBF, 0x8B, 0xE1, 0xBF, 0x9A, 0xE1, + 0xBF, 0x9B, 0xE1, 0xBF, 0xB8, 0xE1, 0xBF, 0xB9, + 0xE1, 0xBF, 0xAA, 0xE1, 0xBF, 0xAB, 0xE1, 0xBF, + 0xBA, 0xE1, 0xBF, 0xBB, 0xE1, 0xBE, 0x88, 0xE1, + 0xBE, 0x89, 0xE1, 0xBE, 0x8A, 0xE1, 0xBE, 0x8B, + 0xE1, 0xBE, 0x8C, 0xE1, 0xBE, 0x8D, 0xE1, 0xBE, + 0x8E, 0xE1, 0xBE, 0x8F, 0xE1, 0xBE, 0x98, 0xE1, + 0xBE, 0x99, 0xE1, 0xBE, 0x9A, 0xE1, 0xBE, 0x9B, + 0xE1, 0xBE, 0x9C, 0xE1, 0xBE, 0x9D, 0xE1, 0xBE, + 0x9E, 0xE1, 0xBE, 0x9F, 0xE1, 0xBE, 0xA8, 0xE1, + 0xBE, 0xA9, 0xE1, 0xBE, 0xAA, 0xE1, 0xBE, 0xAB, + 0xE1, 0xBE, 0xAC, 0xE1, 0xBE, 0xAD, 0xE1, 0xBE, + 0xAE, 0xE1, 0xBE, 0xAF, 0xE1, 0xBE, 0xB8, 0xE1, + 0xBE, 0xB9, 0xE1, 0xBE, 0xBC, 0xCE, 0x99, 0xE1, + 0xBF, 0x8C, 0xE1, 0xBF, 0x98, 0xE1, 0xBF, 0x99, + 0xE1, 0xBF, 0xA8, 0xE1, 0xBF, 0xA9, 0xE1, 0xBF, + 0xAC, 0xE1, 0xBF, 0xBC, 0xE2, 0x84, 0xB2, 0xE2, + 0x85, 0xA0, 0xE2, 0x85, 0xA1, 0xE2, 0x85, 0xA2, + 0xE2, 0x85, 0xA3, 0xE2, 0x85, 0xA4, 0xE2, 0x85, + 0xA5, 0xE2, 0x85, 0xA6, 0xE2, 0x85, 0xA7, 0xE2, + 0x85, 0xA8, 0xE2, 0x85, 0xA9, 0xE2, 0x85, 0xAA, + 0xE2, 0x85, 0xAB, 0xE2, 0x85, 0xAC, 0xE2, 0x85, + 0xAD, 0xE2, 0x85, 0xAE, 0xE2, 0x85, 0xAF, 0xE2, + 0x86, 0x83, 0xE2, 0x92, 0xB6, 0xE2, 0x92, 0xB7, + 0xE2, 0x92, 0xB8, 0xE2, 0x92, 0xB9, 0xE2, 0x92, + 0xBA, 0xE2, 0x92, 0xBB, 0xE2, 0x92, 0xBC, 0xE2, + 0x92, 0xBD, 0xE2, 0x92, 0xBE, 0xE2, 0x92, 0xBF, + 0xE2, 0x93, 0x80, 0xE2, 0x93, 0x81, 0xE2, 0x93, + 0x82, 0xE2, 0x93, 0x83, 0xE2, 0x93, 0x84, 0xE2, + 0x93, 0x85, 0xE2, 0x93, 0x86, 0xE2, 0x93, 0x87, + 0xE2, 0x93, 0x88, 0xE2, 0x93, 0x89, 0xE2, 0x93, + 0x8A, 0xE2, 0x93, 0x8B, 0xE2, 0x93, 0x8C, 0xE2, + 0x93, 0x8D, 0xE2, 0x93, 0x8E, 0xE2, 0x93, 0x8F, + 0xE2, 0xB0, 0x80, 0xE2, 0xB0, 0x81, 0xE2, 0xB0, + 0x82, 0xE2, 0xB0, 0x83, 0xE2, 0xB0, 0x84, 0xE2, + 0xB0, 0x85, 0xE2, 0xB0, 0x86, 0xE2, 0xB0, 0x87, + 0xE2, 0xB0, 0x88, 0xE2, 0xB0, 0x89, 0xE2, 0xB0, + 0x8A, 0xE2, 0xB0, 0x8B, 0xE2, 0xB0, 0x8C, 0xE2, + 0xB0, 0x8D, 0xE2, 0xB0, 0x8E, 0xE2, 0xB0, 0x8F, + 0xE2, 0xB0, 0x90, 0xE2, 0xB0, 0x91, 0xE2, 0xB0, + 0x92, 0xE2, 0xB0, 0x93, 0xE2, 0xB0, 0x94, 0xE2, + 0xB0, 0x95, 0xE2, 0xB0, 0x96, 0xE2, 0xB0, 0x97, + 0xE2, 0xB0, 0x98, 0xE2, 0xB0, 0x99, 0xE2, 0xB0, + 0x9A, 0xE2, 0xB0, 0x9B, 0xE2, 0xB0, 0x9C, 0xE2, + 0xB0, 0x9D, 0xE2, 0xB0, 0x9E, 0xE2, 0xB0, 0x9F, + 0xE2, 0xB0, 0xA0, 0xE2, 0xB0, 0xA1, 0xE2, 0xB0, + 0xA2, 0xE2, 0xB0, 0xA3, 0xE2, 0xB0, 0xA4, 0xE2, + 0xB0, 0xA5, 0xE2, 0xB0, 0xA6, 0xE2, 0xB0, 0xA7, + 0xE2, 0xB0, 0xA8, 0xE2, 0xB0, 0xA9, 0xE2, 0xB0, + 0xAA, 0xE2, 0xB0, 0xAB, 0xE2, 0xB0, 0xAC, 0xE2, + 0xB0, 0xAD, 0xE2, 0xB0, 0xAE, 0xE2, 0xB1, 0xA0, + 0xC8, 0xBA, 0xC8, 0xBE, 0xE2, 0xB1, 0xA7, 0xE2, + 0xB1, 0xA9, 0xE2, 0xB1, 0xAB, 0xE2, 0xB1, 0xB5, + 0xE2, 0xB2, 0x80, 0xE2, 0xB2, 0x82, 0xE2, 0xB2, + 0x84, 0xE2, 0xB2, 0x86, 0xE2, 0xB2, 0x88, 0xE2, + 0xB2, 0x8A, 0xE2, 0xB2, 0x8C, 0xE2, 0xB2, 0x8E, + 0xE2, 0xB2, 0x90, 0xE2, 0xB2, 0x92, 0xE2, 0xB2, + 0x94, 0xE2, 0xB2, 0x96, 0xE2, 0xB2, 0x98, 0xE2, + 0xB2, 0x9A, 0xE2, 0xB2, 0x9C, 0xE2, 0xB2, 0x9E, + 0xE2, 0xB2, 0xA0, 0xE2, 0xB2, 0xA2, 0xE2, 0xB2, + 0xA4, 0xE2, 0xB2, 0xA6, 0xE2, 0xB2, 0xA8, 0xE2, + 0xB2, 0xAA, 0xE2, 0xB2, 0xAC, 0xE2, 0xB2, 0xAE, + 0xE2, 0xB2, 0xB0, 0xE2, 0xB2, 0xB2, 0xE2, 0xB2, + 0xB4, 0xE2, 0xB2, 0xB6, 0xE2, 0xB2, 0xB8, 0xE2, + 0xB2, 0xBA, 0xE2, 0xB2, 0xBC, 0xE2, 0xB2, 0xBE, + 0xE2, 0xB3, 0x80, 0xE2, 0xB3, 0x82, 0xE2, 0xB3, + 0x84, 0xE2, 0xB3, 0x86, 0xE2, 0xB3, 0x88, 0xE2, + 0xB3, 0x8A, 0xE2, 0xB3, 0x8C, 0xE2, 0xB3, 0x8E, + 0xE2, 0xB3, 0x90, 0xE2, 0xB3, 0x92, 0xE2, 0xB3, + 0x94, 0xE2, 0xB3, 0x96, 0xE2, 0xB3, 0x98, 0xE2, + 0xB3, 0x9A, 0xE2, 0xB3, 0x9C, 0xE2, 0xB3, 0x9E, + 0xE2, 0xB3, 0xA0, 0xE2, 0xB3, 0xA2, 0xE1, 0x82, + 0xA0, 0xE1, 0x82, 0xA1, 0xE1, 0x82, 0xA2, 0xE1, + 0x82, 0xA3, 0xE1, 0x82, 0xA4, 0xE1, 0x82, 0xA5, + 0xE1, 0x82, 0xA6, 0xE1, 0x82, 0xA7, 0xE1, 0x82, + 0xA8, 0xE1, 0x82, 0xA9, 0xE1, 0x82, 0xAA, 0xE1, + 0x82, 0xAB, 0xE1, 0x82, 0xAC, 0xE1, 0x82, 0xAD, + 0xE1, 0x82, 0xAE, 0xE1, 0x82, 0xAF, 0xE1, 0x82, + 0xB0, 0xE1, 0x82, 0xB1, 0xE1, 0x82, 0xB2, 0xE1, + 0x82, 0xB3, 0xE1, 0x82, 0xB4, 0xE1, 0x82, 0xB5, + 0xE1, 0x82, 0xB6, 0xE1, 0x82, 0xB7, 0xE1, 0x82, + 0xB8, 0xE1, 0x82, 0xB9, 0xE1, 0x82, 0xBA, 0xE1, + 0x82, 0xBB, 0xE1, 0x82, 0xBC, 0xE1, 0x82, 0xBD, + 0xE1, 0x82, 0xBE, 0xE1, 0x82, 0xBF, 0xE1, 0x83, + 0x80, 0xE1, 0x83, 0x81, 0xE1, 0x83, 0x82, 0xE1, + 0x83, 0x83, 0xE1, 0x83, 0x84, 0xE1, 0x83, 0x85, + 0xEF, 0xBC, 0xA1, 0xEF, 0xBC, 0xA2, 0xEF, 0xBC, + 0xA3, 0xEF, 0xBC, 0xA4, 0xEF, 0xBC, 0xA5, 0xEF, + 0xBC, 0xA6, 0xEF, 0xBC, 0xA7, 0xEF, 0xBC, 0xA8, + 0xEF, 0xBC, 0xA9, 0xEF, 0xBC, 0xAA, 0xEF, 0xBC, + 0xAB, 0xEF, 0xBC, 0xAC, 0xEF, 0xBC, 0xAD, 0xEF, + 0xBC, 0xAE, 0xEF, 0xBC, 0xAF, 0xEF, 0xBC, 0xB0, + 0xEF, 0xBC, 0xB1, 0xEF, 0xBC, 0xB2, 0xEF, 0xBC, + 0xB3, 0xEF, 0xBC, 0xB4, 0xEF, 0xBC, 0xB5, 0xEF, + 0xBC, 0xB6, 0xEF, 0xBC, 0xB7, 0xEF, 0xBC, 0xB8, + 0xEF, 0xBC, 0xB9, 0xEF, 0xBC, 0xBA, 0xF0, 0x90, + 0x90, 0x80, 0xF0, 0x90, 0x90, 0x81, 0xF0, 0x90, + 0x90, 0x82, 0xF0, 0x90, 0x90, 0x83, 0xF0, 0x90, + 0x90, 0x84, 0xF0, 0x90, 0x90, 0x85, 0xF0, 0x90, + 0x90, 0x86, 0xF0, 0x90, 0x90, 0x87, 0xF0, 0x90, + 0x90, 0x88, 0xF0, 0x90, 0x90, 0x89, 0xF0, 0x90, + 0x90, 0x8A, 0xF0, 0x90, 0x90, 0x8B, 0xF0, 0x90, + 0x90, 0x8C, 0xF0, 0x90, 0x90, 0x8D, 0xF0, 0x90, + 0x90, 0x8E, 0xF0, 0x90, 0x90, 0x8F, 0xF0, 0x90, + 0x90, 0x90, 0xF0, 0x90, 0x90, 0x91, 0xF0, 0x90, + 0x90, 0x92, 0xF0, 0x90, 0x90, 0x93, 0xF0, 0x90, + 0x90, 0x94, 0xF0, 0x90, 0x90, 0x95, 0xF0, 0x90, + 0x90, 0x96, 0xF0, 0x90, 0x90, 0x97, 0xF0, 0x90, + 0x90, 0x98, 0xF0, 0x90, 0x90, 0x99, 0xF0, 0x90, + 0x90, 0x9A, 0xF0, 0x90, 0x90, 0x9B, 0xF0, 0x90, + 0x90, 0x9C, 0xF0, 0x90, 0x90, 0x9D, 0xF0, 0x90, + 0x90, 0x9E, 0xF0, 0x90, 0x90, 0x9F, 0xF0, 0x90, + 0x90, 0xA0, 0xF0, 0x90, 0x90, 0xA1, 0xF0, 0x90, + 0x90, 0xA2, 0xF0, 0x90, 0x90, 0xA3, 0xF0, 0x90, + 0x90, 0xA4, 0xF0, 0x90, 0x90, 0xA5, 0xF0, 0x90, + 0x90, 0xA6, 0xF0, 0x90, 0x90, 0xA7, + }, +}; + +#undef N_ +#undef FIL_ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_U8_TEXTPREP_DATA_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/uberblock.h +++ linux-aws-4.15.0/zfs/include/sys/uberblock.h @@ -0,0 +1,50 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_UBERBLOCK_H +#define _SYS_UBERBLOCK_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct uberblock uberblock_t; + +extern int uberblock_verify(uberblock_t *); +extern boolean_t uberblock_update(uberblock_t *ub, vdev_t *rvd, uint64_t txg, + uint64_t mmp_delay); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_UBERBLOCK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/uberblock_impl.h +++ linux-aws-4.15.0/zfs/include/sys/uberblock_impl.h @@ -0,0 +1,71 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017 by Delphix. All rights reserved. + */ + +#ifndef _SYS_UBERBLOCK_IMPL_H +#define _SYS_UBERBLOCK_IMPL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The uberblock version is incremented whenever an incompatible on-disk + * format change is made to the SPA, DMU, or ZAP. + * + * Note: the first two fields should never be moved. When a storage pool + * is opened, the uberblock must be read off the disk before the version + * can be checked. If the ub_version field is moved, we may not detect + * version mismatch. If the ub_magic field is moved, applications that + * expect the magic number in the first word won't work. + */ +#define UBERBLOCK_MAGIC 0x00bab10c /* oo-ba-bloc! */ +#define UBERBLOCK_SHIFT 10 /* up to 1K */ +#define MMP_MAGIC 0xa11cea11 /* all-see-all */ + +struct uberblock { + uint64_t ub_magic; /* UBERBLOCK_MAGIC */ + uint64_t ub_version; /* SPA_VERSION */ + uint64_t ub_txg; /* txg of last sync */ + uint64_t ub_guid_sum; /* sum of all vdev guids */ + uint64_t ub_timestamp; /* UTC time of last sync */ + blkptr_t ub_rootbp; /* MOS objset_phys_t */ + + /* highest SPA_VERSION supported by software that wrote this txg */ + uint64_t ub_software_version; + + /* Maybe missing in uberblocks we read, but always written */ + uint64_t ub_mmp_magic; /* MMP_MAGIC */ + uint64_t ub_mmp_delay; /* nanosec since last MMP write */ + uint64_t ub_mmp_seq; /* reserved for sequence number */ + uint64_t ub_checkpoint_txg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_UBERBLOCK_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/uio_impl.h +++ linux-aws-4.15.0/zfs/include/sys/uio_impl.h @@ -0,0 +1,49 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * University Copyright- Copyright (c) 1982, 1986, 1988 + * The Regents of the University of California + * All Rights Reserved + * + * University Acknowledgment- Portions of this document are derived from + * software developed by the University of California, Berkeley, and its + * contributors. + */ + +#ifndef _SYS_UIO_IMPL_H +#define _SYS_UIO_IMPL_H + +#include + +extern int uiomove(void *, size_t, enum uio_rw, uio_t *); +extern void uio_prefaultpages(ssize_t, uio_t *); +extern int uiocopy(void *, size_t, enum uio_rw, uio_t *, size_t *); +extern void uioskip(uio_t *, size_t); + +#endif /* _SYS_UIO_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/unique.h +++ linux-aws-4.15.0/zfs/include/sys/unique.h @@ -0,0 +1,57 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_UNIQUE_H +#define _SYS_UNIQUE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* The number of significant bits in each unique value. */ +#define UNIQUE_BITS 56 + +void unique_init(void); +void unique_fini(void); + +/* + * Return a new unique value (which will not be uniquified against until + * it is unique_insert()-ed). + */ +uint64_t unique_create(void); + +/* Return a unique value, which equals the one passed in if possible. */ +uint64_t unique_insert(uint64_t value); + +/* Indicate that this value no longer needs to be uniquified against. */ +void unique_remove(uint64_t value); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_UNIQUE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/uuid.h +++ linux-aws-4.15.0/zfs/include/sys/uuid.h @@ -0,0 +1,94 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_UUID_H +#define _SYS_UUID_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The copyright in this file is taken from the original Leach + * & Salz UUID specification, from which this implementation + * is derived. + */ + +/* + * Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. + * Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & + * Digital Equipment Corporation, Maynard, Mass. Copyright (c) 1998 + * Microsoft. To anyone who acknowledges that this file is provided + * "AS IS" without any express or implied warranty: permission to use, + * copy, modify, and distribute this file for any purpose is hereby + * granted without fee, provided that the above copyright notices and + * this notice appears in all source code copies, and that none of the + * names of Open Software Foundation, Inc., Hewlett-Packard Company, + * or Digital Equipment Corporation be used in advertising or + * publicity pertaining to distribution of the software without + * specific, written prior permission. Neither Open Software + * Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital + * Equipment Corporation makes any representations about the + * suitability of this software for any purpose. + */ + +#include +#include + +typedef struct { + uint8_t nodeID[6]; +} uuid_node_t; + +/* + * The uuid type used throughout when referencing uuids themselves + */ +struct uuid { + uint32_t time_low; + uint16_t time_mid; + uint16_t time_hi_and_version; + uint8_t clock_seq_hi_and_reserved; + uint8_t clock_seq_low; + uint8_t node_addr[6]; +}; + +#define UUID_PRINTABLE_STRING_LENGTH 37 + +/* + * Convert a uuid to/from little-endian format + */ +#define UUID_LE_CONVERT(dest, src) \ +{ \ + (dest) = (src); \ + (dest).time_low = LE_32((dest).time_low); \ + (dest).time_mid = LE_16((dest).time_mid); \ + (dest).time_hi_and_version = LE_16((dest).time_hi_and_version); \ +} + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_UUID_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev.h +++ linux-aws-4.15.0/zfs/include/sys/vdev.h @@ -0,0 +1,176 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_VDEV_H +#define _SYS_VDEV_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vdev_dtl_type { + DTL_MISSING, /* 0% replication: no copies of the data */ + DTL_PARTIAL, /* less than 100% replication: some copies missing */ + DTL_SCRUB, /* unable to fully repair during scrub/resilver */ + DTL_OUTAGE, /* temporarily missing (used to attempt detach) */ + DTL_TYPES +} vdev_dtl_type_t; + +extern int zfs_nocacheflush; + +extern int vdev_open(vdev_t *); +extern void vdev_open_children(vdev_t *); +extern int vdev_validate(vdev_t *, boolean_t); +extern void vdev_close(vdev_t *); +extern int vdev_create(vdev_t *, uint64_t txg, boolean_t isreplace); +extern void vdev_reopen(vdev_t *); +extern int vdev_validate_aux(vdev_t *vd); +extern zio_t *vdev_probe(vdev_t *vd, zio_t *pio); + +extern boolean_t vdev_is_bootable(vdev_t *vd); +extern vdev_t *vdev_lookup_top(spa_t *spa, uint64_t vdev); +extern vdev_t *vdev_lookup_by_guid(vdev_t *vd, uint64_t guid); +extern int vdev_count_leaves(spa_t *spa); +extern void vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t d, + uint64_t txg, uint64_t size); +extern boolean_t vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t d, + uint64_t txg, uint64_t size); +extern boolean_t vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t d); +extern boolean_t vdev_dtl_need_resilver(vdev_t *vd, uint64_t off, size_t size); +extern void vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, + int scrub_done); +extern boolean_t vdev_dtl_required(vdev_t *vd); +extern boolean_t vdev_resilver_needed(vdev_t *vd, + uint64_t *minp, uint64_t *maxp); +extern void vdev_destroy_unlink_zap(vdev_t *vd, uint64_t zapobj, + dmu_tx_t *tx); +extern uint64_t vdev_create_link_zap(vdev_t *vd, dmu_tx_t *tx); +extern void vdev_construct_zaps(vdev_t *vd, dmu_tx_t *tx); + +extern void vdev_hold(vdev_t *); +extern void vdev_rele(vdev_t *); + +extern int vdev_metaslab_init(vdev_t *vd, uint64_t txg); +extern void vdev_metaslab_fini(vdev_t *vd); +extern void vdev_metaslab_set_size(vdev_t *); +extern void vdev_expand(vdev_t *vd, uint64_t txg); +extern void vdev_split(vdev_t *vd); +extern void vdev_deadman(vdev_t *vd); + +extern void vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx); +extern void vdev_get_stats(vdev_t *vd, vdev_stat_t *vs); +extern void vdev_clear_stats(vdev_t *vd); +extern void vdev_stat_update(zio_t *zio, uint64_t psize); +extern void vdev_scan_stat_init(vdev_t *vd); +extern void vdev_propagate_state(vdev_t *vd); +extern void vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, + vdev_aux_t aux); + +extern void vdev_space_update(vdev_t *vd, + int64_t alloc_delta, int64_t defer_delta, int64_t space_delta); + +extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize); + +extern int vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux); +extern int vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux); +extern int vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, + vdev_state_t *); +extern int vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags); +extern void vdev_clear(spa_t *spa, vdev_t *vd); + +extern boolean_t vdev_is_dead(vdev_t *vd); +extern boolean_t vdev_readable(vdev_t *vd); +extern boolean_t vdev_writeable(vdev_t *vd); +extern boolean_t vdev_allocatable(vdev_t *vd); +extern boolean_t vdev_accessible(vdev_t *vd, zio_t *zio); + +extern void vdev_cache_init(vdev_t *vd); +extern void vdev_cache_fini(vdev_t *vd); +extern boolean_t vdev_cache_read(zio_t *zio); +extern void vdev_cache_write(zio_t *zio); +extern void vdev_cache_purge(vdev_t *vd); + +extern void vdev_queue_init(vdev_t *vd); +extern void vdev_queue_fini(vdev_t *vd); +extern zio_t *vdev_queue_io(zio_t *zio); +extern void vdev_queue_io_done(zio_t *zio); + +extern int vdev_queue_length(vdev_t *vd); +extern uint64_t vdev_queue_lastoffset(vdev_t *vd); +extern void vdev_queue_register_lastoffset(vdev_t *vd, zio_t *zio); + +extern void vdev_config_dirty(vdev_t *vd); +extern void vdev_config_clean(vdev_t *vd); +extern int vdev_config_sync(vdev_t **svd, int svdcount, uint64_t txg); + +extern void vdev_state_dirty(vdev_t *vd); +extern void vdev_state_clean(vdev_t *vd); + +typedef enum vdev_config_flag { + VDEV_CONFIG_SPARE = 1 << 0, + VDEV_CONFIG_L2CACHE = 1 << 1, + VDEV_CONFIG_REMOVING = 1 << 2, + VDEV_CONFIG_MOS = 1 << 3 +} vdev_config_flag_t; + +extern void vdev_top_config_generate(spa_t *spa, nvlist_t *config); +extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd, + boolean_t getstats, vdev_config_flag_t flags); + +/* + * Label routines + */ +struct uberblock; +extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset); +extern int vdev_label_number(uint64_t psise, uint64_t offset); +extern nvlist_t *vdev_label_read_config(vdev_t *vd, uint64_t txg); +extern void vdev_uberblock_load(vdev_t *, struct uberblock *, nvlist_t **); +extern void vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv); +extern void vdev_label_write(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t + offset, uint64_t size, zio_done_func_t *done, void *private, int flags); + +typedef enum { + VDEV_LABEL_CREATE, /* create/add a new device */ + VDEV_LABEL_REPLACE, /* replace an existing device */ + VDEV_LABEL_SPARE, /* add a new hot spare */ + VDEV_LABEL_REMOVE, /* remove an existing device */ + VDEV_LABEL_L2CACHE, /* add an L2ARC cache device */ + VDEV_LABEL_SPLIT /* generating new label for split-off dev */ +} vdev_labeltype_t; + +extern int vdev_label_init(vdev_t *vd, uint64_t txg, vdev_labeltype_t reason); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_VDEV_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev_disk.h +++ linux-aws-4.15.0/zfs/include/sys/vdev_disk.h @@ -0,0 +1,41 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * LLNL-CODE-403049. + */ + +#ifndef _SYS_VDEV_DISK_H +#define _SYS_VDEV_DISK_H + +#ifdef _KERNEL +#include + +typedef struct vdev_disk { + ddi_devid_t vd_devid; + char *vd_minor; + struct block_device *vd_bdev; +} vdev_disk_t; + +#endif /* _KERNEL */ +#endif /* _SYS_VDEV_DISK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev_file.h +++ linux-aws-4.15.0/zfs/include/sys/vdev_file.h @@ -0,0 +1,47 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_VDEV_FILE_H +#define _SYS_VDEV_FILE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vdev_file { + vnode_t *vf_vnode; +} vdev_file_t; + +extern void vdev_file_init(void); +extern void vdev_file_fini(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_VDEV_FILE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev_impl.h +++ linux-aws-4.15.0/zfs/include/sys/vdev_impl.h @@ -0,0 +1,391 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +#ifndef _SYS_VDEV_IMPL_H +#define _SYS_VDEV_IMPL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Virtual device descriptors. + * + * All storage pool operations go through the virtual device framework, + * which provides data replication and I/O scheduling. + */ + +/* + * Forward declarations that lots of things need. + */ +typedef struct vdev_queue vdev_queue_t; +typedef struct vdev_cache vdev_cache_t; +typedef struct vdev_cache_entry vdev_cache_entry_t; +struct abd; + +extern int zfs_vdev_queue_depth_pct; +extern uint32_t zfs_vdev_async_write_max_active; + +/* + * Virtual device operations + */ +typedef int vdev_open_func_t(vdev_t *vd, uint64_t *size, uint64_t *max_size, + uint64_t *ashift); +typedef void vdev_close_func_t(vdev_t *vd); +typedef uint64_t vdev_asize_func_t(vdev_t *vd, uint64_t psize); +typedef void vdev_io_start_func_t(zio_t *zio); +typedef void vdev_io_done_func_t(zio_t *zio); +typedef void vdev_state_change_func_t(vdev_t *vd, int, int); +typedef boolean_t vdev_need_resilver_func_t(vdev_t *vd, uint64_t, size_t); +typedef void vdev_hold_func_t(vdev_t *vd); +typedef void vdev_rele_func_t(vdev_t *vd); + +typedef const struct vdev_ops { + vdev_open_func_t *vdev_op_open; + vdev_close_func_t *vdev_op_close; + vdev_asize_func_t *vdev_op_asize; + vdev_io_start_func_t *vdev_op_io_start; + vdev_io_done_func_t *vdev_op_io_done; + vdev_state_change_func_t *vdev_op_state_change; + vdev_need_resilver_func_t *vdev_op_need_resilver; + vdev_hold_func_t *vdev_op_hold; + vdev_rele_func_t *vdev_op_rele; + char vdev_op_type[16]; + boolean_t vdev_op_leaf; +} vdev_ops_t; + +/* + * Virtual device properties + */ +struct vdev_cache_entry { + struct abd *ve_abd; + uint64_t ve_offset; + clock_t ve_lastused; + avl_node_t ve_offset_node; + avl_node_t ve_lastused_node; + uint32_t ve_hits; + uint16_t ve_missed_update; + zio_t *ve_fill_io; +}; + +struct vdev_cache { + avl_tree_t vc_offset_tree; + avl_tree_t vc_lastused_tree; + kmutex_t vc_lock; +}; + +typedef struct vdev_queue_class { + uint32_t vqc_active; + + /* + * Sorted by offset or timestamp, depending on if the queue is + * LBA-ordered vs FIFO. + */ + avl_tree_t vqc_queued_tree; +} vdev_queue_class_t; + +struct vdev_queue { + vdev_t *vq_vdev; + vdev_queue_class_t vq_class[ZIO_PRIORITY_NUM_QUEUEABLE]; + avl_tree_t vq_active_tree; + avl_tree_t vq_read_offset_tree; + avl_tree_t vq_write_offset_tree; + uint64_t vq_last_offset; + hrtime_t vq_io_complete_ts; /* time last i/o completed */ + hrtime_t vq_io_delta_ts; + zio_t vq_io_search; /* used as local for stack reduction */ + kmutex_t vq_lock; + uint64_t vq_lastoffset; +}; + +/* + * Virtual device descriptor + */ +struct vdev { + /* + * Common to all vdev types. + */ + uint64_t vdev_id; /* child number in vdev parent */ + uint64_t vdev_guid; /* unique ID for this vdev */ + uint64_t vdev_guid_sum; /* self guid + all child guids */ + uint64_t vdev_orig_guid; /* orig. guid prior to remove */ + uint64_t vdev_asize; /* allocatable device capacity */ + uint64_t vdev_min_asize; /* min acceptable asize */ + uint64_t vdev_max_asize; /* max acceptable asize */ + uint64_t vdev_ashift; /* block alignment shift */ + uint64_t vdev_state; /* see VDEV_STATE_* #defines */ + uint64_t vdev_prevstate; /* used when reopening a vdev */ + vdev_ops_t *vdev_ops; /* vdev operations */ + spa_t *vdev_spa; /* spa for this vdev */ + void *vdev_tsd; /* type-specific data */ + vnode_t *vdev_name_vp; /* vnode for pathname */ + vnode_t *vdev_devid_vp; /* vnode for devid */ + vdev_t *vdev_top; /* top-level vdev */ + vdev_t *vdev_parent; /* parent vdev */ + vdev_t **vdev_child; /* array of children */ + uint64_t vdev_children; /* number of children */ + vdev_stat_t vdev_stat; /* virtual device statistics */ + vdev_stat_ex_t vdev_stat_ex; /* extended statistics */ + boolean_t vdev_expanding; /* expand the vdev? */ + boolean_t vdev_reopening; /* reopen in progress? */ + boolean_t vdev_nonrot; /* true if solid state */ + int vdev_open_error; /* error on last open */ + kthread_t *vdev_open_thread; /* thread opening children */ + uint64_t vdev_crtxg; /* txg when top-level was added */ + + /* + * Top-level vdev state. + */ + uint64_t vdev_ms_array; /* metaslab array object */ + uint64_t vdev_ms_shift; /* metaslab size shift */ + uint64_t vdev_ms_count; /* number of metaslabs */ + metaslab_group_t *vdev_mg; /* metaslab group */ + metaslab_t **vdev_ms; /* metaslab array */ + uint64_t vdev_pending_fastwrite; /* allocated fastwrites */ + txg_list_t vdev_ms_list; /* per-txg dirty metaslab lists */ + txg_list_t vdev_dtl_list; /* per-txg dirty DTL lists */ + txg_node_t vdev_txg_node; /* per-txg dirty vdev linkage */ + boolean_t vdev_remove_wanted; /* async remove wanted? */ + boolean_t vdev_probe_wanted; /* async probe wanted? */ + list_node_t vdev_config_dirty_node; /* config dirty list */ + list_node_t vdev_state_dirty_node; /* state dirty list */ + uint64_t vdev_deflate_ratio; /* deflation ratio (x512) */ + uint64_t vdev_islog; /* is an intent log device */ + uint64_t vdev_removing; /* device is being removed? */ + boolean_t vdev_ishole; /* is a hole in the namespace */ + kmutex_t vdev_queue_lock; /* protects vdev_queue_depth */ + uint64_t vdev_top_zap; + + /* + * The queue depth parameters determine how many async writes are + * still pending (i.e. allocated by net yet issued to disk) per + * top-level (vdev_async_write_queue_depth) and the maximum allowed + * (vdev_max_async_write_queue_depth). These values only apply to + * top-level vdevs. + */ + uint64_t vdev_async_write_queue_depth; + uint64_t vdev_max_async_write_queue_depth; + + /* + * Leaf vdev state. + */ + range_tree_t *vdev_dtl[DTL_TYPES]; /* dirty time logs */ + space_map_t *vdev_dtl_sm; /* dirty time log space map */ + txg_node_t vdev_dtl_node; /* per-txg dirty DTL linkage */ + uint64_t vdev_dtl_object; /* DTL object */ + uint64_t vdev_psize; /* physical device capacity */ + uint64_t vdev_wholedisk; /* true if this is a whole disk */ + uint64_t vdev_offline; /* persistent offline state */ + uint64_t vdev_faulted; /* persistent faulted state */ + uint64_t vdev_degraded; /* persistent degraded state */ + uint64_t vdev_removed; /* persistent removed state */ + uint64_t vdev_resilver_txg; /* persistent resilvering state */ + uint64_t vdev_nparity; /* number of parity devices for raidz */ + char *vdev_path; /* vdev path (if any) */ + char *vdev_devid; /* vdev devid (if any) */ + char *vdev_physpath; /* vdev device path (if any) */ + char *vdev_enc_sysfs_path; /* enclosure sysfs path */ + char *vdev_fru; /* physical FRU location */ + uint64_t vdev_not_present; /* not present during import */ + uint64_t vdev_unspare; /* unspare when resilvering done */ + boolean_t vdev_nowritecache; /* true if flushwritecache failed */ + boolean_t vdev_checkremove; /* temporary online test */ + boolean_t vdev_forcefault; /* force online fault */ + boolean_t vdev_splitting; /* split or repair in progress */ + boolean_t vdev_delayed_close; /* delayed device close? */ + boolean_t vdev_tmpoffline; /* device taken offline temporarily? */ + boolean_t vdev_detached; /* device detached? */ + boolean_t vdev_cant_read; /* vdev is failing all reads */ + boolean_t vdev_cant_write; /* vdev is failing all writes */ + boolean_t vdev_isspare; /* was a hot spare */ + boolean_t vdev_isl2cache; /* was a l2cache device */ + boolean_t vdev_copy_uberblocks; /* post expand copy uberblocks */ + vdev_queue_t vdev_queue; /* I/O deadline schedule queue */ + vdev_cache_t vdev_cache; /* physical block cache */ + spa_aux_vdev_t *vdev_aux; /* for l2cache and spares vdevs */ + zio_t *vdev_probe_zio; /* root of current probe */ + vdev_aux_t vdev_label_aux; /* on-disk aux state */ + uint64_t vdev_leaf_zap; + hrtime_t vdev_mmp_pending; /* 0 if write finished */ + + /* + * For DTrace to work in userland (libzpool) context, these fields must + * remain at the end of the structure. DTrace will use the kernel's + * CTF definition for 'struct vdev', and since the size of a kmutex_t is + * larger in userland, the offsets for the rest of the fields would be + * incorrect. + */ + kmutex_t vdev_dtl_lock; /* vdev_dtl_{map,resilver} */ + kmutex_t vdev_stat_lock; /* vdev_stat */ + kmutex_t vdev_probe_lock; /* protects vdev_probe_zio */ + + /* + * We rate limit ZIO delay and ZIO checksum events, since they + * can flood ZED with tons of events when a drive is acting up. + */ +#define DELAYS_PER_SECOND 5 +#define CHECKSUMS_PER_SECOND 5 + zfs_ratelimit_t vdev_delay_rl; + zfs_ratelimit_t vdev_checksum_rl; +}; + +#define VDEV_RAIDZ_MAXPARITY 3 + +#define VDEV_PAD_SIZE (8 << 10) +/* 2 padding areas (vl_pad1 and vl_pad2) to skip */ +#define VDEV_SKIP_SIZE VDEV_PAD_SIZE * 2 +#define VDEV_PHYS_SIZE (112 << 10) +#define VDEV_UBERBLOCK_RING (128 << 10) + +/* + * MMP blocks occupy the last MMP_BLOCKS_PER_LABEL slots in the uberblock + * ring when MMP is enabled. + */ +#define MMP_BLOCKS_PER_LABEL 1 + +/* The largest uberblock we support is 8k. */ +#define MAX_UBERBLOCK_SHIFT (13) +#define VDEV_UBERBLOCK_SHIFT(vd) \ + MIN(MAX((vd)->vdev_top->vdev_ashift, UBERBLOCK_SHIFT), \ + MAX_UBERBLOCK_SHIFT) +#define VDEV_UBERBLOCK_COUNT(vd) \ + (VDEV_UBERBLOCK_RING >> VDEV_UBERBLOCK_SHIFT(vd)) +#define VDEV_UBERBLOCK_OFFSET(vd, n) \ + offsetof(vdev_label_t, vl_uberblock[(n) << VDEV_UBERBLOCK_SHIFT(vd)]) +#define VDEV_UBERBLOCK_SIZE(vd) (1ULL << VDEV_UBERBLOCK_SHIFT(vd)) + +typedef struct vdev_phys { + char vp_nvlist[VDEV_PHYS_SIZE - sizeof (zio_eck_t)]; + zio_eck_t vp_zbt; +} vdev_phys_t; + +typedef struct vdev_label { + char vl_pad1[VDEV_PAD_SIZE]; /* 8K */ + char vl_pad2[VDEV_PAD_SIZE]; /* 8K */ + vdev_phys_t vl_vdev_phys; /* 112K */ + char vl_uberblock[VDEV_UBERBLOCK_RING]; /* 128K */ +} vdev_label_t; /* 256K total */ + +/* + * vdev_dirty() flags + */ +#define VDD_METASLAB 0x01 +#define VDD_DTL 0x02 + +/* Offset of embedded boot loader region on each label */ +#define VDEV_BOOT_OFFSET (2 * sizeof (vdev_label_t)) +/* + * Size of embedded boot loader region on each label. + * The total size of the first two labels plus the boot area is 4MB. + */ +#define VDEV_BOOT_SIZE (7ULL << 19) /* 3.5M */ + +/* + * Size of label regions at the start and end of each leaf device. + */ +#define VDEV_LABEL_START_SIZE (2 * sizeof (vdev_label_t) + VDEV_BOOT_SIZE) +#define VDEV_LABEL_END_SIZE (2 * sizeof (vdev_label_t)) +#define VDEV_LABELS 4 +#define VDEV_BEST_LABEL VDEV_LABELS + +#define VDEV_ALLOC_LOAD 0 +#define VDEV_ALLOC_ADD 1 +#define VDEV_ALLOC_SPARE 2 +#define VDEV_ALLOC_L2CACHE 3 +#define VDEV_ALLOC_ROOTPOOL 4 +#define VDEV_ALLOC_SPLIT 5 +#define VDEV_ALLOC_ATTACH 6 + +/* + * Allocate or free a vdev + */ +extern vdev_t *vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, + vdev_ops_t *ops); +extern int vdev_alloc(spa_t *spa, vdev_t **vdp, nvlist_t *config, + vdev_t *parent, uint_t id, int alloctype); +extern void vdev_free(vdev_t *vd); + +/* + * Add or remove children and parents + */ +extern void vdev_add_child(vdev_t *pvd, vdev_t *cvd); +extern void vdev_remove_child(vdev_t *pvd, vdev_t *cvd); +extern void vdev_compact_children(vdev_t *pvd); +extern vdev_t *vdev_add_parent(vdev_t *cvd, vdev_ops_t *ops); +extern void vdev_remove_parent(vdev_t *cvd); + +/* + * vdev sync load and sync + */ +extern void vdev_load_log_state(vdev_t *nvd, vdev_t *ovd); +extern boolean_t vdev_log_state_valid(vdev_t *vd); +extern void vdev_load(vdev_t *vd); +extern int vdev_dtl_load(vdev_t *vd); +extern void vdev_sync(vdev_t *vd, uint64_t txg); +extern void vdev_sync_done(vdev_t *vd, uint64_t txg); +extern void vdev_dirty(vdev_t *vd, int flags, void *arg, uint64_t txg); +extern void vdev_dirty_leaves(vdev_t *vd, int flags, uint64_t txg); + +/* + * Available vdev types. + */ +extern vdev_ops_t vdev_root_ops; +extern vdev_ops_t vdev_mirror_ops; +extern vdev_ops_t vdev_replacing_ops; +extern vdev_ops_t vdev_raidz_ops; +extern vdev_ops_t vdev_disk_ops; +extern vdev_ops_t vdev_file_ops; +extern vdev_ops_t vdev_missing_ops; +extern vdev_ops_t vdev_hole_ops; +extern vdev_ops_t vdev_spare_ops; + +/* + * Common size functions + */ +extern uint64_t vdev_default_asize(vdev_t *vd, uint64_t psize); +extern uint64_t vdev_get_min_asize(vdev_t *vd); +extern void vdev_set_min_asize(vdev_t *vd); + +/* + * Global variables + */ +/* zdb uses this tunable, so it must be declared here to make lint happy. */ +extern int zfs_vdev_cache_size; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_VDEV_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev_raidz.h +++ linux-aws-4.15.0/zfs/include/sys/vdev_raidz.h @@ -0,0 +1,64 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Neskovic . + */ + +#ifndef _SYS_VDEV_RAIDZ_H +#define _SYS_VDEV_RAIDZ_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct zio; +struct raidz_map; +#if !defined(_KERNEL) +struct kernel_param {}; +#endif + +/* + * vdev_raidz interface + */ +struct raidz_map *vdev_raidz_map_alloc(struct zio *, uint64_t, uint64_t, + uint64_t); +void vdev_raidz_map_free(struct raidz_map *); +void vdev_raidz_generate_parity(struct raidz_map *); +int vdev_raidz_reconstruct(struct raidz_map *, const int *, int); + +/* + * vdev_raidz_math interface + */ +void vdev_raidz_math_init(void); +void vdev_raidz_math_fini(void); +struct raidz_impl_ops *vdev_raidz_math_get_ops(void); +int vdev_raidz_math_generate(struct raidz_map *); +int vdev_raidz_math_reconstruct(struct raidz_map *, const int *, const int *, + const int); +int vdev_raidz_impl_set(const char *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_VDEV_RAIDZ_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/vdev_raidz_impl.h +++ linux-aws-4.15.0/zfs/include/sys/vdev_raidz_impl.h @@ -0,0 +1,370 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden NeÅ¡ković. All rights reserved. + */ + +#ifndef _VDEV_RAIDZ_H +#define _VDEV_RAIDZ_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define CODE_P (0U) +#define CODE_Q (1U) +#define CODE_R (2U) + +#define PARITY_P (1U) +#define PARITY_PQ (2U) +#define PARITY_PQR (3U) + +#define TARGET_X (0U) +#define TARGET_Y (1U) +#define TARGET_Z (2U) + +/* + * Parity generation methods indexes + */ +enum raidz_math_gen_op { + RAIDZ_GEN_P = 0, + RAIDZ_GEN_PQ, + RAIDZ_GEN_PQR, + RAIDZ_GEN_NUM = 3 +}; +/* + * Data reconstruction methods indexes + */ +enum raidz_rec_op { + RAIDZ_REC_P = 0, + RAIDZ_REC_Q, + RAIDZ_REC_R, + RAIDZ_REC_PQ, + RAIDZ_REC_PR, + RAIDZ_REC_QR, + RAIDZ_REC_PQR, + RAIDZ_REC_NUM = 7 +}; + +extern const char *raidz_gen_name[RAIDZ_GEN_NUM]; +extern const char *raidz_rec_name[RAIDZ_REC_NUM]; + +/* + * Methods used to define raidz implementation + * + * @raidz_gen_f Parity generation function + * @par1 pointer to raidz_map + * @raidz_rec_f Data reconstruction function + * @par1 pointer to raidz_map + * @par2 array of reconstruction targets + * @will_work_f Function returns TRUE if impl. is supported on the system + * @init_impl_f Function is called once on init + * @fini_impl_f Function is called once on fini + */ +typedef void (*raidz_gen_f)(void *); +typedef int (*raidz_rec_f)(void *, const int *); +typedef boolean_t (*will_work_f)(void); +typedef void (*init_impl_f)(void); +typedef void (*fini_impl_f)(void); + +#define RAIDZ_IMPL_NAME_MAX (16) + +typedef struct raidz_impl_ops { + init_impl_f init; + fini_impl_f fini; + raidz_gen_f gen[RAIDZ_GEN_NUM]; /* Parity generate functions */ + raidz_rec_f rec[RAIDZ_REC_NUM]; /* Data reconstruction functions */ + will_work_f is_supported; /* Support check function */ + char name[RAIDZ_IMPL_NAME_MAX]; /* Name of the implementation */ +} raidz_impl_ops_t; + +typedef struct raidz_col { + size_t rc_devidx; /* child device index for I/O */ + size_t rc_offset; /* device offset */ + size_t rc_size; /* I/O size */ + abd_t *rc_abd; /* I/O data */ + void *rc_gdata; /* used to store the "good" version */ + int rc_error; /* I/O error for this device */ + unsigned int rc_tried; /* Did we attempt this I/O column? */ + unsigned int rc_skipped; /* Did we skip this I/O column? */ +} raidz_col_t; + +typedef struct raidz_map { + size_t rm_cols; /* Regular column count */ + size_t rm_scols; /* Count including skipped columns */ + size_t rm_bigcols; /* Number of oversized columns */ + size_t rm_asize; /* Actual total I/O size */ + size_t rm_missingdata; /* Count of missing data devices */ + size_t rm_missingparity; /* Count of missing parity devices */ + size_t rm_firstdatacol; /* First data column/parity count */ + size_t rm_nskip; /* Skipped sectors for padding */ + size_t rm_skipstart; /* Column index of padding start */ + abd_t *rm_abd_copy; /* rm_asize-buffer of copied data */ + size_t rm_reports; /* # of referencing checksum reports */ + unsigned int rm_freed; /* map no longer has referencing ZIO */ + unsigned int rm_ecksuminjected; /* checksum error was injected */ + raidz_impl_ops_t *rm_ops; /* RAIDZ math operations */ + raidz_col_t rm_col[1]; /* Flexible array of I/O columns */ +} raidz_map_t; + +#define RAIDZ_ORIGINAL_IMPL (INT_MAX) + +extern const raidz_impl_ops_t vdev_raidz_scalar_impl; +#if defined(__x86_64) && defined(HAVE_SSE2) /* only x86_64 for now */ +extern const raidz_impl_ops_t vdev_raidz_sse2_impl; +#endif +#if defined(__x86_64) && defined(HAVE_SSSE3) /* only x86_64 for now */ +extern const raidz_impl_ops_t vdev_raidz_ssse3_impl; +#endif +#if defined(__x86_64) && defined(HAVE_AVX2) /* only x86_64 for now */ +extern const raidz_impl_ops_t vdev_raidz_avx2_impl; +#endif +#if defined(__x86_64) && defined(HAVE_AVX512F) /* only x86_64 for now */ +extern const raidz_impl_ops_t vdev_raidz_avx512f_impl; +#endif +#if defined(__x86_64) && defined(HAVE_AVX512BW) /* only x86_64 for now */ +extern const raidz_impl_ops_t vdev_raidz_avx512bw_impl; +#endif +#if defined(__aarch64__) +extern const raidz_impl_ops_t vdev_raidz_aarch64_neon_impl; +extern const raidz_impl_ops_t vdev_raidz_aarch64_neonx2_impl; +#endif + +/* + * Commonly used raidz_map helpers + * + * raidz_parity Returns parity of the RAIDZ block + * raidz_ncols Returns number of columns the block spans + * raidz_nbigcols Returns number of big columns columns + * raidz_col_p Returns pointer to a column + * raidz_col_size Returns size of a column + * raidz_big_size Returns size of big columns + * raidz_short_size Returns size of short columns + */ +#define raidz_parity(rm) ((rm)->rm_firstdatacol) +#define raidz_ncols(rm) ((rm)->rm_cols) +#define raidz_nbigcols(rm) ((rm)->rm_bigcols) +#define raidz_col_p(rm, c) ((rm)->rm_col + (c)) +#define raidz_col_size(rm, c) ((rm)->rm_col[c].rc_size) +#define raidz_big_size(rm) (raidz_col_size(rm, CODE_P)) +#define raidz_short_size(rm) (raidz_col_size(rm, raidz_ncols(rm)-1)) + +/* + * Macro defines an RAIDZ parity generation method + * + * @code parity the function produce + * @impl name of the implementation + */ +#define _RAIDZ_GEN_WRAP(code, impl) \ +static void \ +impl ## _gen_ ## code(void *rmp) \ +{ \ + raidz_map_t *rm = (raidz_map_t *)rmp; \ + raidz_generate_## code ## _impl(rm); \ +} + +/* + * Macro defines an RAIDZ data reconstruction method + * + * @code parity the function produce + * @impl name of the implementation + */ +#define _RAIDZ_REC_WRAP(code, impl) \ +static int \ +impl ## _rec_ ## code(void *rmp, const int *tgtidx) \ +{ \ + raidz_map_t *rm = (raidz_map_t *)rmp; \ + return (raidz_reconstruct_## code ## _impl(rm, tgtidx)); \ +} + +/* + * Define all gen methods for an implementation + * + * @impl name of the implementation + */ +#define DEFINE_GEN_METHODS(impl) \ + _RAIDZ_GEN_WRAP(p, impl); \ + _RAIDZ_GEN_WRAP(pq, impl); \ + _RAIDZ_GEN_WRAP(pqr, impl) + +/* + * Define all rec functions for an implementation + * + * @impl name of the implementation + */ +#define DEFINE_REC_METHODS(impl) \ + _RAIDZ_REC_WRAP(p, impl); \ + _RAIDZ_REC_WRAP(q, impl); \ + _RAIDZ_REC_WRAP(r, impl); \ + _RAIDZ_REC_WRAP(pq, impl); \ + _RAIDZ_REC_WRAP(pr, impl); \ + _RAIDZ_REC_WRAP(qr, impl); \ + _RAIDZ_REC_WRAP(pqr, impl) + +#define RAIDZ_GEN_METHODS(impl) \ +{ \ + [RAIDZ_GEN_P] = & impl ## _gen_p, \ + [RAIDZ_GEN_PQ] = & impl ## _gen_pq, \ + [RAIDZ_GEN_PQR] = & impl ## _gen_pqr \ +} + +#define RAIDZ_REC_METHODS(impl) \ +{ \ + [RAIDZ_REC_P] = & impl ## _rec_p, \ + [RAIDZ_REC_Q] = & impl ## _rec_q, \ + [RAIDZ_REC_R] = & impl ## _rec_r, \ + [RAIDZ_REC_PQ] = & impl ## _rec_pq, \ + [RAIDZ_REC_PR] = & impl ## _rec_pr, \ + [RAIDZ_REC_QR] = & impl ## _rec_qr, \ + [RAIDZ_REC_PQR] = & impl ## _rec_pqr \ +} + + +typedef struct raidz_impl_kstat { + uint64_t gen[RAIDZ_GEN_NUM]; /* gen method speed B/s */ + uint64_t rec[RAIDZ_REC_NUM]; /* rec method speed B/s */ +} raidz_impl_kstat_t; + +/* + * Enumerate various multiplication constants + * used in reconstruction methods + */ +typedef enum raidz_mul_info { + /* Reconstruct Q */ + MUL_Q_X = 0, + /* Reconstruct R */ + MUL_R_X = 0, + /* Reconstruct PQ */ + MUL_PQ_X = 0, + MUL_PQ_Y = 1, + /* Reconstruct PR */ + MUL_PR_X = 0, + MUL_PR_Y = 1, + /* Reconstruct QR */ + MUL_QR_XQ = 0, + MUL_QR_X = 1, + MUL_QR_YQ = 2, + MUL_QR_Y = 3, + /* Reconstruct PQR */ + MUL_PQR_XP = 0, + MUL_PQR_XQ = 1, + MUL_PQR_XR = 2, + MUL_PQR_YU = 3, + MUL_PQR_YP = 4, + MUL_PQR_YQ = 5, + + MUL_CNT = 6 +} raidz_mul_info_t; + +/* + * Powers of 2 in the Galois field. + */ +extern const uint8_t vdev_raidz_pow2[256] __attribute__((aligned(256))); +/* Logs of 2 in the Galois field defined above. */ +extern const uint8_t vdev_raidz_log2[256] __attribute__((aligned(256))); + +/* + * Multiply a given number by 2 raised to the given power. + */ +static inline uint8_t +vdev_raidz_exp2(const uint8_t a, const unsigned exp) +{ + if (a == 0) + return (0); + + return (vdev_raidz_pow2[(exp + (unsigned)vdev_raidz_log2[a]) % 255]); +} + +/* + * Galois Field operations. + * + * gf_exp2 - computes 2 raised to the given power + * gf_exp2 - computes 4 raised to the given power + * gf_mul - multiplication + * gf_div - division + * gf_inv - multiplicative inverse + */ +typedef unsigned gf_t; +typedef unsigned gf_log_t; + +static inline gf_t +gf_mul(const gf_t a, const gf_t b) +{ + gf_log_t logsum; + + if (a == 0 || b == 0) + return (0); + + logsum = (gf_log_t)vdev_raidz_log2[a] + (gf_log_t)vdev_raidz_log2[b]; + + return ((gf_t)vdev_raidz_pow2[logsum % 255]); +} + +static inline gf_t +gf_div(const gf_t a, const gf_t b) +{ + gf_log_t logsum; + + ASSERT3U(b, >, 0); + if (a == 0) + return (0); + + logsum = (gf_log_t)255 + (gf_log_t)vdev_raidz_log2[a] - + (gf_log_t)vdev_raidz_log2[b]; + + return ((gf_t)vdev_raidz_pow2[logsum % 255]); +} + +static inline gf_t +gf_inv(const gf_t a) +{ + gf_log_t logsum; + + ASSERT3U(a, >, 0); + + logsum = (gf_log_t)255 - (gf_log_t)vdev_raidz_log2[a]; + + return ((gf_t)vdev_raidz_pow2[logsum]); +} + +static inline gf_t +gf_exp2(gf_log_t exp) +{ + return (vdev_raidz_pow2[exp % 255]); +} + +static inline gf_t +gf_exp4(gf_log_t exp) +{ + ASSERT3U(exp, <=, 255); + return ((gf_t)vdev_raidz_pow2[(2 * exp) % 255]); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _VDEV_RAIDZ_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/xvattr.h +++ linux-aws-4.15.0/zfs/include/sys/xvattr.h @@ -0,0 +1,330 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * University Copyright- Copyright (c) 1982, 1986, 1988 + * The Regents of the University of California + * All Rights Reserved + * + * University Acknowledgment- Portions of this document are derived from + * software developed by the University of California, Berkeley, and its + * contributors. + */ + +#ifndef _SYS_XVATTR_H +#define _SYS_XVATTR_H + +#include + +#define AV_SCANSTAMP_SZ 32 /* length of anti-virus scanstamp */ + +/* + * Structure of all optional attributes. + */ +typedef struct xoptattr { + timestruc_t xoa_createtime; /* Create time of file */ + uint8_t xoa_archive; + uint8_t xoa_system; + uint8_t xoa_readonly; + uint8_t xoa_hidden; + uint8_t xoa_nounlink; + uint8_t xoa_immutable; + uint8_t xoa_appendonly; + uint8_t xoa_nodump; + uint8_t xoa_opaque; + uint8_t xoa_av_quarantined; + uint8_t xoa_av_modified; + uint8_t xoa_av_scanstamp[AV_SCANSTAMP_SZ]; + uint8_t xoa_reparse; + uint64_t xoa_generation; + uint8_t xoa_offline; + uint8_t xoa_sparse; +} xoptattr_t; + +/* + * The xvattr structure is really a variable length structure that + * is made up of: + * - The classic vattr_t (xva_vattr) + * - a 32 bit quantity (xva_mapsize) that specifies the size of the + * attribute bitmaps in 32 bit words. + * - A pointer to the returned attribute bitmap (needed because the + * previous element, the requested attribute bitmap) is variable length. + * - The requested attribute bitmap, which is an array of 32 bit words. + * Callers use the XVA_SET_REQ() macro to set the bits corresponding to + * the attributes that are being requested. + * - The returned attribute bitmap, which is an array of 32 bit words. + * File systems that support optional attributes use the XVA_SET_RTN() + * macro to set the bits corresponding to the attributes that are being + * returned. + * - The xoptattr_t structure which contains the attribute values + * + * xva_mapsize determines how many words in the attribute bitmaps. + * Immediately following the attribute bitmaps is the xoptattr_t. + * xva_getxoptattr() is used to get the pointer to the xoptattr_t + * section. + */ + +#define XVA_MAPSIZE 3 /* Size of attr bitmaps */ +#define XVA_MAGIC 0x78766174 /* Magic # for verification */ + +/* + * The xvattr structure is an extensible structure which permits optional + * attributes to be requested/returned. File systems may or may not support + * optional attributes. They do so at their own discretion but if they do + * support optional attributes, they must register the VFSFT_XVATTR feature + * so that the optional attributes can be set/retrieved. + * + * The fields of the xvattr structure are: + * + * xva_vattr - The first element of an xvattr is a legacy vattr structure + * which includes the common attributes. If AT_XVATTR is set in the va_mask + * then the entire structure is treated as an xvattr. If AT_XVATTR is not + * set, then only the xva_vattr structure can be used. + * + * xva_magic - 0x78766174 (hex for "xvat"). Magic number for verification. + * + * xva_mapsize - Size of requested and returned attribute bitmaps. + * + * xva_rtnattrmapp - Pointer to xva_rtnattrmap[]. We need this since the + * size of the array before it, xva_reqattrmap[], could change which means + * the location of xva_rtnattrmap[] could change. This will allow unbundled + * file systems to find the location of xva_rtnattrmap[] when the sizes change. + * + * xva_reqattrmap[] - Array of requested attributes. Attributes are + * represented by a specific bit in a specific element of the attribute + * map array. Callers set the bits corresponding to the attributes + * that the caller wants to get/set. + * + * xva_rtnattrmap[] - Array of attributes that the file system was able to + * process. Not all file systems support all optional attributes. This map + * informs the caller which attributes the underlying file system was able + * to set/get. (Same structure as the requested attributes array in terms + * of each attribute corresponding to specific bits and array elements.) + * + * xva_xoptattrs - Structure containing values of optional attributes. + * These values are only valid if the corresponding bits in xva_reqattrmap + * are set and the underlying file system supports those attributes. + */ +typedef struct xvattr { + vattr_t xva_vattr; /* Embedded vattr structure */ + uint32_t xva_magic; /* Magic Number */ + uint32_t xva_mapsize; /* Size of attr bitmap (32-bit words) */ + uint32_t *xva_rtnattrmapp; /* Ptr to xva_rtnattrmap[] */ + uint32_t xva_reqattrmap[XVA_MAPSIZE]; /* Requested attrs */ + uint32_t xva_rtnattrmap[XVA_MAPSIZE]; /* Returned attrs */ + xoptattr_t xva_xoptattrs; /* Optional attributes */ +} xvattr_t; + +/* + * Attribute bits used in the extensible attribute's (xva's) attribute + * bitmaps. Note that the bitmaps are made up of a variable length number + * of 32-bit words. The convention is to use XAT{n}_{attrname} where "n" + * is the element in the bitmap (starting at 1). This convention is for + * the convenience of the maintainer to keep track of which element each + * attribute belongs to. + * + * NOTE THAT CONSUMERS MUST *NOT* USE THE XATn_* DEFINES DIRECTLY. CONSUMERS + * MUST USE THE XAT_* DEFINES. + */ +#define XAT0_INDEX 0LL /* Index into bitmap for XAT0 attrs */ +#define XAT0_CREATETIME 0x00000001 /* Create time of file */ +#define XAT0_ARCHIVE 0x00000002 /* Archive */ +#define XAT0_SYSTEM 0x00000004 /* System */ +#define XAT0_READONLY 0x00000008 /* Readonly */ +#define XAT0_HIDDEN 0x00000010 /* Hidden */ +#define XAT0_NOUNLINK 0x00000020 /* Nounlink */ +#define XAT0_IMMUTABLE 0x00000040 /* immutable */ +#define XAT0_APPENDONLY 0x00000080 /* appendonly */ +#define XAT0_NODUMP 0x00000100 /* nodump */ +#define XAT0_OPAQUE 0x00000200 /* opaque */ +#define XAT0_AV_QUARANTINED 0x00000400 /* anti-virus quarantine */ +#define XAT0_AV_MODIFIED 0x00000800 /* anti-virus modified */ +#define XAT0_AV_SCANSTAMP 0x00001000 /* anti-virus scanstamp */ +#define XAT0_REPARSE 0x00002000 /* FS reparse point */ +#define XAT0_GEN 0x00004000 /* object generation number */ +#define XAT0_OFFLINE 0x00008000 /* offline */ +#define XAT0_SPARSE 0x00010000 /* sparse */ + +#define XAT0_ALL_ATTRS (XAT0_CREATETIME|XAT0_ARCHIVE|XAT0_SYSTEM| \ + XAT0_READONLY|XAT0_HIDDEN|XAT0_NOUNLINK|XAT0_IMMUTABLE|XAT0_APPENDONLY| \ + XAT0_NODUMP|XAT0_OPAQUE|XAT0_AV_QUARANTINED| XAT0_AV_MODIFIED| \ + XAT0_AV_SCANSTAMP|XAT0_REPARSE|XATO_GEN|XAT0_OFFLINE|XAT0_SPARSE) + +/* Support for XAT_* optional attributes */ +#define XVA_MASK 0xffffffff /* Used to mask off 32 bits */ +#define XVA_SHFT 32 /* Used to shift index */ + +/* + * Used to pry out the index and attribute bits from the XAT_* attributes + * defined below. Note that we're masking things down to 32 bits then + * casting to uint32_t. + */ +#define XVA_INDEX(attr) ((uint32_t)(((attr) >> XVA_SHFT) & XVA_MASK)) +#define XVA_ATTRBIT(attr) ((uint32_t)((attr) & XVA_MASK)) + +/* + * The following defines present a "flat namespace" so that consumers don't + * need to keep track of which element belongs to which bitmap entry. + * + * NOTE THAT THESE MUST NEVER BE OR-ed TOGETHER + */ +#define XAT_CREATETIME ((XAT0_INDEX << XVA_SHFT) | XAT0_CREATETIME) +#define XAT_ARCHIVE ((XAT0_INDEX << XVA_SHFT) | XAT0_ARCHIVE) +#define XAT_SYSTEM ((XAT0_INDEX << XVA_SHFT) | XAT0_SYSTEM) +#define XAT_READONLY ((XAT0_INDEX << XVA_SHFT) | XAT0_READONLY) +#define XAT_HIDDEN ((XAT0_INDEX << XVA_SHFT) | XAT0_HIDDEN) +#define XAT_NOUNLINK ((XAT0_INDEX << XVA_SHFT) | XAT0_NOUNLINK) +#define XAT_IMMUTABLE ((XAT0_INDEX << XVA_SHFT) | XAT0_IMMUTABLE) +#define XAT_APPENDONLY ((XAT0_INDEX << XVA_SHFT) | XAT0_APPENDONLY) +#define XAT_NODUMP ((XAT0_INDEX << XVA_SHFT) | XAT0_NODUMP) +#define XAT_OPAQUE ((XAT0_INDEX << XVA_SHFT) | XAT0_OPAQUE) +#define XAT_AV_QUARANTINED ((XAT0_INDEX << XVA_SHFT) | XAT0_AV_QUARANTINED) +#define XAT_AV_MODIFIED ((XAT0_INDEX << XVA_SHFT) | XAT0_AV_MODIFIED) +#define XAT_AV_SCANSTAMP ((XAT0_INDEX << XVA_SHFT) | XAT0_AV_SCANSTAMP) +#define XAT_REPARSE ((XAT0_INDEX << XVA_SHFT) | XAT0_REPARSE) +#define XAT_GEN ((XAT0_INDEX << XVA_SHFT) | XAT0_GEN) +#define XAT_OFFLINE ((XAT0_INDEX << XVA_SHFT) | XAT0_OFFLINE) +#define XAT_SPARSE ((XAT0_INDEX << XVA_SHFT) | XAT0_SPARSE) + +/* + * The returned attribute map array (xva_rtnattrmap[]) is located past the + * requested attribute map array (xva_reqattrmap[]). Its location changes + * when the array sizes change. We use a separate pointer in a known location + * (xva_rtnattrmapp) to hold the location of xva_rtnattrmap[]. This is + * set in xva_init() + */ +#define XVA_RTNATTRMAP(xvap) ((xvap)->xva_rtnattrmapp) + +/* + * XVA_SET_REQ() sets an attribute bit in the proper element in the bitmap + * of requested attributes (xva_reqattrmap[]). + */ +#define XVA_SET_REQ(xvap, attr) \ + ASSERT((xvap)->xva_vattr.va_mask & AT_XVATTR); \ + ASSERT((xvap)->xva_magic == XVA_MAGIC); \ + (xvap)->xva_reqattrmap[XVA_INDEX(attr)] |= XVA_ATTRBIT(attr) +/* + * XVA_CLR_REQ() clears an attribute bit in the proper element in the bitmap + * of requested attributes (xva_reqattrmap[]). + */ +#define XVA_CLR_REQ(xvap, attr) \ + ASSERT((xvap)->xva_vattr.va_mask & AT_XVATTR); \ + ASSERT((xvap)->xva_magic == XVA_MAGIC); \ + (xvap)->xva_reqattrmap[XVA_INDEX(attr)] &= ~XVA_ATTRBIT(attr) + +/* + * XVA_SET_RTN() sets an attribute bit in the proper element in the bitmap + * of returned attributes (xva_rtnattrmap[]). + */ +#define XVA_SET_RTN(xvap, attr) \ + ASSERT((xvap)->xva_vattr.va_mask & AT_XVATTR); \ + ASSERT((xvap)->xva_magic == XVA_MAGIC); \ + (XVA_RTNATTRMAP(xvap))[XVA_INDEX(attr)] |= XVA_ATTRBIT(attr) + +/* + * XVA_ISSET_REQ() checks the requested attribute bitmap (xva_reqattrmap[]) + * to see of the corresponding attribute bit is set. If so, returns non-zero. + */ +#define XVA_ISSET_REQ(xvap, attr) \ + ((((xvap)->xva_vattr.va_mask & AT_XVATTR) && \ + ((xvap)->xva_magic == XVA_MAGIC) && \ + ((xvap)->xva_mapsize > XVA_INDEX(attr))) ? \ + ((xvap)->xva_reqattrmap[XVA_INDEX(attr)] & XVA_ATTRBIT(attr)) : 0) + +/* + * XVA_ISSET_RTN() checks the returned attribute bitmap (xva_rtnattrmap[]) + * to see of the corresponding attribute bit is set. If so, returns non-zero. + */ +#define XVA_ISSET_RTN(xvap, attr) \ + ((((xvap)->xva_vattr.va_mask & AT_XVATTR) && \ + ((xvap)->xva_magic == XVA_MAGIC) && \ + ((xvap)->xva_mapsize > XVA_INDEX(attr))) ? \ + ((XVA_RTNATTRMAP(xvap))[XVA_INDEX(attr)] & XVA_ATTRBIT(attr)) : 0) + +/* + * Zero out the structure, set the size of the requested/returned bitmaps, + * set AT_XVATTR in the embedded vattr_t's va_mask, and set up the pointer + * to the returned attributes array. + */ +static inline void +xva_init(xvattr_t *xvap) +{ + bzero(xvap, sizeof (xvattr_t)); + xvap->xva_mapsize = XVA_MAPSIZE; + xvap->xva_magic = XVA_MAGIC; + xvap->xva_vattr.va_mask = ATTR_XVATTR; + xvap->xva_rtnattrmapp = &(xvap->xva_rtnattrmap)[0]; +} + +/* + * If AT_XVATTR is set, returns a pointer to the embedded xoptattr_t + * structure. Otherwise, returns NULL. + */ +static inline xoptattr_t * +xva_getxoptattr(xvattr_t *xvap) +{ + xoptattr_t *xoap = NULL; + if (xvap->xva_vattr.va_mask & AT_XVATTR) + xoap = &xvap->xva_xoptattrs; + return (xoap); +} + +#define MODEMASK 07777 /* mode bits plus permission bits */ +#define PERMMASK 00777 /* permission bits */ + +/* + * VOP_ACCESS flags + */ +#define V_ACE_MASK 0x1 /* mask represents NFSv4 ACE permissions */ +#define V_APPEND 0x2 /* want to do append only check */ + +/* + * Structure used on VOP_GETSECATTR and VOP_SETSECATTR operations + */ + +typedef struct vsecattr { + uint_t vsa_mask; /* See below */ + int vsa_aclcnt; /* ACL entry count */ + void *vsa_aclentp; /* pointer to ACL entries */ + int vsa_dfaclcnt; /* default ACL entry count */ + void *vsa_dfaclentp; /* pointer to default ACL entries */ + size_t vsa_aclentsz; /* ACE size in bytes of vsa_aclentp */ + uint_t vsa_aclflags; /* ACE ACL flags */ +} vsecattr_t; + +/* vsa_mask values */ +#define VSA_ACL 0x0001 +#define VSA_ACLCNT 0x0002 +#define VSA_DFACL 0x0004 +#define VSA_DFACLCNT 0x0008 +#define VSA_ACE 0x0010 +#define VSA_ACECNT 0x0020 +#define VSA_ACE_ALLTYPES 0x0040 +#define VSA_ACE_ACLFLAGS 0x0080 /* get/set ACE ACL flags */ + +#endif /* _SYS_XVATTR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zap.h +++ linux-aws-4.15.0/zfs/include/sys/zap.h @@ -0,0 +1,502 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#ifndef _SYS_ZAP_H +#define _SYS_ZAP_H + +/* + * ZAP - ZFS Attribute Processor + * + * The ZAP is a module which sits on top of the DMU (Data Management + * Unit) and implements a higher-level storage primitive using DMU + * objects. Its primary consumer is the ZPL (ZFS Posix Layer). + * + * A "zapobj" is a DMU object which the ZAP uses to stores attributes. + * Users should use only zap routines to access a zapobj - they should + * not access the DMU object directly using DMU routines. + * + * The attributes stored in a zapobj are name-value pairs. The name is + * a zero-terminated string of up to ZAP_MAXNAMELEN bytes (including + * terminating NULL). The value is an array of integers, which may be + * 1, 2, 4, or 8 bytes long. The total space used by the array (number + * of integers * integer length) can be up to ZAP_MAXVALUELEN bytes. + * Note that an 8-byte integer value can be used to store the location + * (object number) of another dmu object (which may be itself a zapobj). + * Note that you can use a zero-length attribute to store a single bit + * of information - the attribute is present or not. + * + * The ZAP routines are thread-safe. However, you must observe the + * DMU's restriction that a transaction may not be operated on + * concurrently. + * + * Any of the routines that return an int may return an I/O error (EIO + * or ECHECKSUM). + * + * + * Implementation / Performance Notes: + * + * The ZAP is intended to operate most efficiently on attributes with + * short (49 bytes or less) names and single 8-byte values, for which + * the microzap will be used. The ZAP should be efficient enough so + * that the user does not need to cache these attributes. + * + * The ZAP's locking scheme makes its routines thread-safe. Operations + * on different zapobjs will be processed concurrently. Operations on + * the same zapobj which only read data will be processed concurrently. + * Operations on the same zapobj which modify data will be processed + * concurrently when there are many attributes in the zapobj (because + * the ZAP uses per-block locking - more than 128 * (number of cpus) + * small attributes will suffice). + */ + +/* + * We're using zero-terminated byte strings (ie. ASCII or UTF-8 C + * strings) for the names of attributes, rather than a byte string + * bounded by an explicit length. If some day we want to support names + * in character sets which have embedded zeros (eg. UTF-16, UTF-32), + * we'll have to add routines for using length-bounded strings. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Specifies matching criteria for ZAP lookups. + * MT_NORMALIZE Use ZAP normalization flags, which can include both + * unicode normalization and case-insensitivity. + * MT_MATCH_CASE Do case-sensitive lookups even if MT_NORMALIZE is + * specified and ZAP normalization flags include + * U8_TEXTPREP_TOUPPER. + */ +typedef enum matchtype { + MT_NORMALIZE = 1 << 0, + MT_MATCH_CASE = 1 << 1, +} matchtype_t; + +typedef enum zap_flags { + /* Use 64-bit hash value (serialized cursors will always use 64-bits) */ + ZAP_FLAG_HASH64 = 1 << 0, + /* Key is binary, not string (zap_add_uint64() can be used) */ + ZAP_FLAG_UINT64_KEY = 1 << 1, + /* + * First word of key (which must be an array of uint64) is + * already randomly distributed. + */ + ZAP_FLAG_PRE_HASHED_KEY = 1 << 2, +} zap_flags_t; + +/* + * Create a new zapobj with no attributes and return its object number. + */ +uint64_t zap_create(objset_t *ds, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx); +uint64_t zap_create_dnsize(objset_t *ds, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx); +uint64_t zap_create_norm(objset_t *ds, int normflags, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx); +uint64_t zap_create_norm_dnsize(objset_t *ds, int normflags, + dmu_object_type_t ot, dmu_object_type_t bonustype, int bonuslen, + int dnodesize, dmu_tx_t *tx); +uint64_t zap_create_flags(objset_t *os, int normflags, zap_flags_t flags, + dmu_object_type_t ot, int leaf_blockshift, int indirect_blockshift, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx); +uint64_t zap_create_flags_dnsize(objset_t *os, int normflags, + zap_flags_t flags, dmu_object_type_t ot, int leaf_blockshift, + int indirect_blockshift, dmu_object_type_t bonustype, int bonuslen, + int dnodesize, dmu_tx_t *tx); +uint64_t zap_create_link(objset_t *os, dmu_object_type_t ot, + uint64_t parent_obj, const char *name, dmu_tx_t *tx); +uint64_t zap_create_link_dnsize(objset_t *os, dmu_object_type_t ot, + uint64_t parent_obj, const char *name, int dnodesize, dmu_tx_t *tx); + +/* + * Initialize an already-allocated object. + */ +void mzap_create_impl(objset_t *os, uint64_t obj, int normflags, + zap_flags_t flags, dmu_tx_t *tx); + +/* + * Create a new zapobj with no attributes from the given (unallocated) + * object number. + */ +int zap_create_claim(objset_t *ds, uint64_t obj, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx); +int zap_create_claim_dnsize(objset_t *ds, uint64_t obj, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx); +int zap_create_claim_norm(objset_t *ds, uint64_t obj, + int normflags, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx); +int zap_create_claim_norm_dnsize(objset_t *ds, uint64_t obj, + int normflags, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx); + +/* + * The zapobj passed in must be a valid ZAP object for all of the + * following routines. + */ + +/* + * Destroy this zapobj and all its attributes. + * + * Frees the object number using dmu_object_free. + */ +int zap_destroy(objset_t *ds, uint64_t zapobj, dmu_tx_t *tx); + +/* + * Manipulate attributes. + * + * 'integer_size' is in bytes, and must be 1, 2, 4, or 8. + */ + +/* + * Retrieve the contents of the attribute with the given name. + * + * If the requested attribute does not exist, the call will fail and + * return ENOENT. + * + * If 'integer_size' is smaller than the attribute's integer size, the + * call will fail and return EINVAL. + * + * If 'integer_size' is equal to or larger than the attribute's integer + * size, the call will succeed and return 0. + * + * When converting to a larger integer size, the integers will be treated as + * unsigned (ie. no sign-extension will be performed). + * + * 'num_integers' is the length (in integers) of 'buf'. + * + * If the attribute is longer than the buffer, as many integers as will + * fit will be transferred to 'buf'. If the entire attribute was not + * transferred, the call will return EOVERFLOW. + */ +int zap_lookup(objset_t *ds, uint64_t zapobj, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf); + +/* + * If rn_len is nonzero, realname will be set to the name of the found + * entry (which may be different from the requested name if matchtype is + * not MT_EXACT). + * + * If normalization_conflictp is not NULL, it will be set if there is + * another name with the same case/unicode normalized form. + */ +int zap_lookup_norm(objset_t *ds, uint64_t zapobj, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf, + matchtype_t mt, char *realname, int rn_len, + boolean_t *normalization_conflictp); +int zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf); +int zap_contains(objset_t *ds, uint64_t zapobj, const char *name); +int zap_prefetch(objset_t *os, uint64_t zapobj, const char *name); +int zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints); + +int zap_lookup_by_dnode(dnode_t *dn, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf); +int zap_lookup_norm_by_dnode(dnode_t *dn, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf, + matchtype_t mt, char *realname, int rn_len, + boolean_t *ncp); + +int zap_count_write_by_dnode(dnode_t *dn, const char *name, + int add, refcount_t *towrite, refcount_t *tooverwrite); + +/* + * Create an attribute with the given name and value. + * + * If an attribute with the given name already exists, the call will + * fail and return EEXIST. + */ +int zap_add(objset_t *ds, uint64_t zapobj, const char *key, + int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx); +int zap_add_by_dnode(dnode_t *dn, const char *key, + int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx); +int zap_add_uint64(objset_t *ds, uint64_t zapobj, const uint64_t *key, + int key_numints, int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx); + +/* + * Set the attribute with the given name to the given value. If an + * attribute with the given name does not exist, it will be created. If + * an attribute with the given name already exists, the previous value + * will be overwritten. The integer_size may be different from the + * existing attribute's integer size, in which case the attribute's + * integer size will be updated to the new value. + */ +int zap_update(objset_t *ds, uint64_t zapobj, const char *name, + int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx); +int zap_update_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, + int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx); + +/* + * Get the length (in integers) and the integer size of the specified + * attribute. + * + * If the requested attribute does not exist, the call will fail and + * return ENOENT. + */ +int zap_length(objset_t *ds, uint64_t zapobj, const char *name, + uint64_t *integer_size, uint64_t *num_integers); +int zap_length_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, uint64_t *integer_size, uint64_t *num_integers); + +/* + * Remove the specified attribute. + * + * If the specified attribute does not exist, the call will fail and + * return ENOENT. + */ +int zap_remove(objset_t *ds, uint64_t zapobj, const char *name, dmu_tx_t *tx); +int zap_remove_norm(objset_t *ds, uint64_t zapobj, const char *name, + matchtype_t mt, dmu_tx_t *tx); +int zap_remove_by_dnode(dnode_t *dn, const char *name, dmu_tx_t *tx); +int zap_remove_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, dmu_tx_t *tx); + +/* + * Returns (in *count) the number of attributes in the specified zap + * object. + */ +int zap_count(objset_t *ds, uint64_t zapobj, uint64_t *count); + +/* + * Returns (in name) the name of the entry whose (value & mask) + * (za_first_integer) is value, or ENOENT if not found. The string + * pointed to by name must be at least 256 bytes long. If mask==0, the + * match must be exact (ie, same as mask=-1ULL). + */ +int zap_value_search(objset_t *os, uint64_t zapobj, + uint64_t value, uint64_t mask, char *name); + +/* + * Transfer all the entries from fromobj into intoobj. Only works on + * int_size=8 num_integers=1 values. Fails if there are any duplicated + * entries. + */ +int zap_join(objset_t *os, uint64_t fromobj, uint64_t intoobj, dmu_tx_t *tx); + +/* Same as zap_join, but set the values to 'value'. */ +int zap_join_key(objset_t *os, uint64_t fromobj, uint64_t intoobj, + uint64_t value, dmu_tx_t *tx); + +/* Same as zap_join, but add together any duplicated entries. */ +int zap_join_increment(objset_t *os, uint64_t fromobj, uint64_t intoobj, + dmu_tx_t *tx); + +/* + * Manipulate entries where the name + value are the "same" (the name is + * a stringified version of the value). + */ +int zap_add_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx); +int zap_remove_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx); +int zap_lookup_int(objset_t *os, uint64_t obj, uint64_t value); +int zap_increment_int(objset_t *os, uint64_t obj, uint64_t key, int64_t delta, + dmu_tx_t *tx); + +/* Here the key is an int and the value is a different int. */ +int zap_add_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t value, dmu_tx_t *tx); +int zap_update_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t value, dmu_tx_t *tx); +int zap_lookup_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t *valuep); + +int zap_increment(objset_t *os, uint64_t obj, const char *name, int64_t delta, + dmu_tx_t *tx); + +struct zap; +struct zap_leaf; +typedef struct zap_cursor { + /* This structure is opaque! */ + objset_t *zc_objset; + struct zap *zc_zap; + struct zap_leaf *zc_leaf; + uint64_t zc_zapobj; + uint64_t zc_serialized; + uint64_t zc_hash; + uint32_t zc_cd; +} zap_cursor_t; + +typedef struct { + int za_integer_length; + /* + * za_normalization_conflict will be set if there are additional + * entries with this normalized form (eg, "foo" and "Foo"). + */ + boolean_t za_normalization_conflict; + uint64_t za_num_integers; + uint64_t za_first_integer; /* no sign extension for <8byte ints */ + char za_name[ZAP_MAXNAMELEN]; +} zap_attribute_t; + +/* + * The interface for listing all the attributes of a zapobj can be + * thought of as cursor moving down a list of the attributes one by + * one. The cookie returned by the zap_cursor_serialize routine is + * persistent across system calls (and across reboot, even). + */ + +/* + * Initialize a zap cursor, pointing to the "first" attribute of the + * zapobj. You must _fini the cursor when you are done with it. + */ +void zap_cursor_init(zap_cursor_t *zc, objset_t *ds, uint64_t zapobj); +void zap_cursor_fini(zap_cursor_t *zc); + +/* + * Get the attribute currently pointed to by the cursor. Returns + * ENOENT if at the end of the attributes. + */ +int zap_cursor_retrieve(zap_cursor_t *zc, zap_attribute_t *za); + +/* + * Advance the cursor to the next attribute. + */ +void zap_cursor_advance(zap_cursor_t *zc); + +/* + * Get a persistent cookie pointing to the current position of the zap + * cursor. The low 4 bits in the cookie are always zero, and thus can + * be used as to differentiate a serialized cookie from a different type + * of value. The cookie will be less than 2^32 as long as there are + * fewer than 2^22 (4.2 million) entries in the zap object. + */ +uint64_t zap_cursor_serialize(zap_cursor_t *zc); + +/* + * Initialize a zap cursor pointing to the position recorded by + * zap_cursor_serialize (in the "serialized" argument). You can also + * use a "serialized" argument of 0 to start at the beginning of the + * zapobj (ie. zap_cursor_init_serialized(..., 0) is equivalent to + * zap_cursor_init(...).) + */ +void zap_cursor_init_serialized(zap_cursor_t *zc, objset_t *ds, + uint64_t zapobj, uint64_t serialized); + + +#define ZAP_HISTOGRAM_SIZE 10 + +typedef struct zap_stats { + /* + * Size of the pointer table (in number of entries). + * This is always a power of 2, or zero if it's a microzap. + * In general, it should be considerably greater than zs_num_leafs. + */ + uint64_t zs_ptrtbl_len; + + uint64_t zs_blocksize; /* size of zap blocks */ + + /* + * The number of blocks used. Note that some blocks may be + * wasted because old ptrtbl's and large name/value blocks are + * not reused. (Although their space is reclaimed, we don't + * reuse those offsets in the object.) + */ + uint64_t zs_num_blocks; + + /* + * Pointer table values from zap_ptrtbl in the zap_phys_t + */ + uint64_t zs_ptrtbl_nextblk; /* next (larger) copy start block */ + uint64_t zs_ptrtbl_blks_copied; /* number source blocks copied */ + uint64_t zs_ptrtbl_zt_blk; /* starting block number */ + uint64_t zs_ptrtbl_zt_numblks; /* number of blocks */ + uint64_t zs_ptrtbl_zt_shift; /* bits to index it */ + + /* + * Values of the other members of the zap_phys_t + */ + uint64_t zs_block_type; /* ZBT_HEADER */ + uint64_t zs_magic; /* ZAP_MAGIC */ + uint64_t zs_num_leafs; /* The number of leaf blocks */ + uint64_t zs_num_entries; /* The number of zap entries */ + uint64_t zs_salt; /* salt to stir into hash function */ + + /* + * Histograms. For all histograms, the last index + * (ZAP_HISTOGRAM_SIZE-1) includes any values which are greater + * than what can be represented. For example + * zs_leafs_with_n5_entries[ZAP_HISTOGRAM_SIZE-1] is the number + * of leafs with more than 45 entries. + */ + + /* + * zs_leafs_with_n_pointers[n] is the number of leafs with + * 2^n pointers to it. + */ + uint64_t zs_leafs_with_2n_pointers[ZAP_HISTOGRAM_SIZE]; + + /* + * zs_leafs_with_n_entries[n] is the number of leafs with + * [n*5, (n+1)*5) entries. In the current implementation, there + * can be at most 55 entries in any block, but there may be + * fewer if the name or value is large, or the block is not + * completely full. + */ + uint64_t zs_blocks_with_n5_entries[ZAP_HISTOGRAM_SIZE]; + + /* + * zs_leafs_n_tenths_full[n] is the number of leafs whose + * fullness is in the range [n/10, (n+1)/10). + */ + uint64_t zs_blocks_n_tenths_full[ZAP_HISTOGRAM_SIZE]; + + /* + * zs_entries_using_n_chunks[n] is the number of entries which + * consume n 24-byte chunks. (Note, large names/values only use + * one chunk, but contribute to zs_num_blocks_large.) + */ + uint64_t zs_entries_using_n_chunks[ZAP_HISTOGRAM_SIZE]; + + /* + * zs_buckets_with_n_entries[n] is the number of buckets (each + * leaf has 64 buckets) with n entries. + * zs_buckets_with_n_entries[1] should be very close to + * zs_num_entries. + */ + uint64_t zs_buckets_with_n_entries[ZAP_HISTOGRAM_SIZE]; +} zap_stats_t; + +/* + * Get statistics about a ZAP object. Note: you need to be aware of the + * internal implementation of the ZAP to correctly interpret some of the + * statistics. This interface shouldn't be relied on unless you really + * know what you're doing. + */ +int zap_get_stats(objset_t *ds, uint64_t zapobj, zap_stats_t *zs); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZAP_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zap_impl.h +++ linux-aws-4.15.0/zfs/include/sys/zap_impl.h @@ -0,0 +1,240 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#ifndef _SYS_ZAP_IMPL_H +#define _SYS_ZAP_IMPL_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int fzap_default_block_shift; + +#define ZAP_MAGIC 0x2F52AB2ABULL + +#define FZAP_BLOCK_SHIFT(zap) ((zap)->zap_f.zap_block_shift) + +#define MZAP_ENT_LEN 64 +#define MZAP_NAME_LEN (MZAP_ENT_LEN - 8 - 4 - 2) +#define MZAP_MAX_BLKSZ SPA_OLD_MAXBLOCKSIZE + +#define ZAP_NEED_CD (-1U) + +typedef struct mzap_ent_phys { + uint64_t mze_value; + uint32_t mze_cd; + uint16_t mze_pad; /* in case we want to chain them someday */ + char mze_name[MZAP_NAME_LEN]; +} mzap_ent_phys_t; + +typedef struct mzap_phys { + uint64_t mz_block_type; /* ZBT_MICRO */ + uint64_t mz_salt; + uint64_t mz_normflags; + uint64_t mz_pad[5]; + mzap_ent_phys_t mz_chunk[1]; + /* actually variable size depending on block size */ +} mzap_phys_t; + +typedef struct mzap_ent { + avl_node_t mze_node; + int mze_chunkid; + uint64_t mze_hash; + uint32_t mze_cd; /* copy from mze_phys->mze_cd */ +} mzap_ent_t; + +#define MZE_PHYS(zap, mze) \ + (&zap_m_phys(zap)->mz_chunk[(mze)->mze_chunkid]) + +/* + * The (fat) zap is stored in one object. It is an array of + * 1<= 6] [zap_leaf_t] [ptrtbl] ... + * + */ + +struct dmu_buf; +struct zap_leaf; + +#define ZBT_LEAF ((1ULL << 63) + 0) +#define ZBT_HEADER ((1ULL << 63) + 1) +#define ZBT_MICRO ((1ULL << 63) + 3) +/* any other values are ptrtbl blocks */ + +/* + * the embedded pointer table takes up half a block: + * block size / entry size (2^3) / 2 + */ +#define ZAP_EMBEDDED_PTRTBL_SHIFT(zap) (FZAP_BLOCK_SHIFT(zap) - 3 - 1) + +/* + * The embedded pointer table starts half-way through the block. Since + * the pointer table itself is half the block, it starts at (64-bit) + * word number (1<zap_dbuf->db_data); +} + +static inline mzap_phys_t * +zap_m_phys(zap_t *zap) +{ + return (zap->zap_dbuf->db_data); +} + +typedef struct zap_name { + zap_t *zn_zap; + int zn_key_intlen; + const void *zn_key_orig; + int zn_key_orig_numints; + const void *zn_key_norm; + int zn_key_norm_numints; + uint64_t zn_hash; + matchtype_t zn_matchtype; + int zn_normflags; + char zn_normbuf[ZAP_MAXNAMELEN]; +} zap_name_t; + +#define zap_f zap_u.zap_fat +#define zap_m zap_u.zap_micro + +boolean_t zap_match(zap_name_t *zn, const char *matchname); +int zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx, + krw_t lti, boolean_t fatreader, boolean_t adding, void *tag, zap_t **zapp); +void zap_unlockdir(zap_t *zap, void *tag); +void zap_evict_sync(void *dbu); +zap_name_t *zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt); +void zap_name_free(zap_name_t *zn); +int zap_hashbits(zap_t *zap); +uint32_t zap_maxcd(zap_t *zap); +uint64_t zap_getflags(zap_t *zap); + +#define ZAP_HASH_IDX(hash, n) (((n) == 0) ? 0 : ((hash) >> (64 - (n)))) + +void fzap_byteswap(void *buf, size_t size); +int fzap_count(zap_t *zap, uint64_t *count); +int fzap_lookup(zap_name_t *zn, + uint64_t integer_size, uint64_t num_integers, void *buf, + char *realname, int rn_len, boolean_t *normalization_conflictp); +void fzap_prefetch(zap_name_t *zn); +int fzap_add(zap_name_t *zn, uint64_t integer_size, uint64_t num_integers, + const void *val, void *tag, dmu_tx_t *tx); +int fzap_update(zap_name_t *zn, + int integer_size, uint64_t num_integers, const void *val, + void *tag, dmu_tx_t *tx); +int fzap_length(zap_name_t *zn, + uint64_t *integer_size, uint64_t *num_integers); +int fzap_remove(zap_name_t *zn, dmu_tx_t *tx); +int fzap_cursor_retrieve(zap_t *zap, zap_cursor_t *zc, zap_attribute_t *za); +void fzap_get_stats(zap_t *zap, zap_stats_t *zs); +void zap_put_leaf(struct zap_leaf *l); + +int fzap_add_cd(zap_name_t *zn, + uint64_t integer_size, uint64_t num_integers, + const void *val, uint32_t cd, void *tag, dmu_tx_t *tx); +void fzap_upgrade(zap_t *zap, dmu_tx_t *tx, zap_flags_t flags); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZAP_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zap_leaf.h +++ linux-aws-4.15.0/zfs/include/sys/zap_leaf.h @@ -0,0 +1,248 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#ifndef _SYS_ZAP_LEAF_H +#define _SYS_ZAP_LEAF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct zap; +struct zap_name; +struct zap_stats; + +#define ZAP_LEAF_MAGIC 0x2AB1EAF + +/* chunk size = 24 bytes */ +#define ZAP_LEAF_CHUNKSIZE 24 + +/* + * The amount of space available for chunks is: + * block size (1<l_bs) - hash entry size (2) * number of hash + * entries - header space (2*chunksize) + */ +#define ZAP_LEAF_NUMCHUNKS(l) \ + (((1<<(l)->l_bs) - 2*ZAP_LEAF_HASH_NUMENTRIES(l)) / \ + ZAP_LEAF_CHUNKSIZE - 2) + +/* + * The amount of space within the chunk available for the array is: + * chunk size - space for type (1) - space for next pointer (2) + */ +#define ZAP_LEAF_ARRAY_BYTES (ZAP_LEAF_CHUNKSIZE - 3) + +#define ZAP_LEAF_ARRAY_NCHUNKS(bytes) \ + (((bytes)+ZAP_LEAF_ARRAY_BYTES-1)/ZAP_LEAF_ARRAY_BYTES) + +/* + * Low water mark: when there are only this many chunks free, start + * growing the ptrtbl. Ideally, this should be larger than a + * "reasonably-sized" entry. 20 chunks is more than enough for the + * largest directory entry (MAXNAMELEN (256) byte name, 8-byte value), + * while still being only around 3% for 16k blocks. + */ +#define ZAP_LEAF_LOW_WATER (20) + +/* + * The leaf hash table has block size / 2^5 (32) number of entries, + * which should be more than enough for the maximum number of entries, + * which is less than block size / CHUNKSIZE (24) / minimum number of + * chunks per entry (3). + */ +#define ZAP_LEAF_HASH_SHIFT(l) ((l)->l_bs - 5) +#define ZAP_LEAF_HASH_NUMENTRIES(l) (1 << ZAP_LEAF_HASH_SHIFT(l)) + +/* + * The chunks start immediately after the hash table. The end of the + * hash table is at l_hash + HASH_NUMENTRIES, which we simply cast to a + * chunk_t. + */ +#define ZAP_LEAF_CHUNK(l, idx) \ + ((zap_leaf_chunk_t *) \ + (zap_leaf_phys(l)->l_hash + ZAP_LEAF_HASH_NUMENTRIES(l)))[idx] +#define ZAP_LEAF_ENTRY(l, idx) (&ZAP_LEAF_CHUNK(l, idx).l_entry) + +typedef enum zap_chunk_type { + ZAP_CHUNK_FREE = 253, + ZAP_CHUNK_ENTRY = 252, + ZAP_CHUNK_ARRAY = 251, + ZAP_CHUNK_TYPE_MAX = 250 +} zap_chunk_type_t; + +#define ZLF_ENTRIES_CDSORTED (1<<0) + +/* + * TAKE NOTE: + * If zap_leaf_phys_t is modified, zap_leaf_byteswap() must be modified. + */ +typedef struct zap_leaf_phys { + struct zap_leaf_header { + /* Public to ZAP */ + uint64_t lh_block_type; /* ZBT_LEAF */ + uint64_t lh_pad1; + uint64_t lh_prefix; /* hash prefix of this leaf */ + uint32_t lh_magic; /* ZAP_LEAF_MAGIC */ + uint16_t lh_nfree; /* number free chunks */ + uint16_t lh_nentries; /* number of entries */ + uint16_t lh_prefix_len; /* num bits used to id this */ + + /* Private to zap_leaf */ + uint16_t lh_freelist; /* chunk head of free list */ + uint8_t lh_flags; /* ZLF_* flags */ + uint8_t lh_pad2[11]; + } l_hdr; /* 2 24-byte chunks */ + + /* + * The header is followed by a hash table with + * ZAP_LEAF_HASH_NUMENTRIES(zap) entries. The hash table is + * followed by an array of ZAP_LEAF_NUMCHUNKS(zap) + * zap_leaf_chunk structures. These structures are accessed + * with the ZAP_LEAF_CHUNK() macro. + */ + + uint16_t l_hash[1]; +} zap_leaf_phys_t; + +typedef union zap_leaf_chunk { + struct zap_leaf_entry { + uint8_t le_type; /* always ZAP_CHUNK_ENTRY */ + uint8_t le_value_intlen; /* size of value's ints */ + uint16_t le_next; /* next entry in hash chain */ + uint16_t le_name_chunk; /* first chunk of the name */ + uint16_t le_name_numints; /* ints in name (incl null) */ + uint16_t le_value_chunk; /* first chunk of the value */ + uint16_t le_value_numints; /* value length in ints */ + uint32_t le_cd; /* collision differentiator */ + uint64_t le_hash; /* hash value of the name */ + } l_entry; + struct zap_leaf_array { + uint8_t la_type; /* always ZAP_CHUNK_ARRAY */ + uint8_t la_array[ZAP_LEAF_ARRAY_BYTES]; + uint16_t la_next; /* next blk or CHAIN_END */ + } l_array; + struct zap_leaf_free { + uint8_t lf_type; /* always ZAP_CHUNK_FREE */ + uint8_t lf_pad[ZAP_LEAF_ARRAY_BYTES]; + uint16_t lf_next; /* next in free list, or CHAIN_END */ + } l_free; +} zap_leaf_chunk_t; + +typedef struct zap_leaf { + dmu_buf_user_t l_dbu; + krwlock_t l_rwlock; + uint64_t l_blkid; /* 1<l_dbuf->db_data); +} + +typedef struct zap_entry_handle { + /* Set by zap_leaf and public to ZAP */ + uint64_t zeh_num_integers; + uint64_t zeh_hash; + uint32_t zeh_cd; + uint8_t zeh_integer_size; + + /* Private to zap_leaf */ + uint16_t zeh_fakechunk; + uint16_t *zeh_chunkp; + zap_leaf_t *zeh_leaf; +} zap_entry_handle_t; + +/* + * Return a handle to the named entry, or ENOENT if not found. The hash + * value must equal zap_hash(name). + */ +extern int zap_leaf_lookup(zap_leaf_t *l, + struct zap_name *zn, zap_entry_handle_t *zeh); + +/* + * Return a handle to the entry with this hash+cd, or the entry with the + * next closest hash+cd. + */ +extern int zap_leaf_lookup_closest(zap_leaf_t *l, + uint64_t hash, uint32_t cd, zap_entry_handle_t *zeh); + +/* + * Read the first num_integers in the attribute. Integer size + * conversion will be done without sign extension. Return EINVAL if + * integer_size is too small. Return EOVERFLOW if there are more than + * num_integers in the attribute. + */ +extern int zap_entry_read(const zap_entry_handle_t *zeh, + uint8_t integer_size, uint64_t num_integers, void *buf); + +extern int zap_entry_read_name(struct zap *zap, const zap_entry_handle_t *zeh, + uint16_t buflen, char *buf); + +/* + * Replace the value of an existing entry. + * + * May fail if it runs out of space (ENOSPC). + */ +extern int zap_entry_update(zap_entry_handle_t *zeh, + uint8_t integer_size, uint64_t num_integers, const void *buf); + +/* + * Remove an entry. + */ +extern void zap_entry_remove(zap_entry_handle_t *zeh); + +/* + * Create an entry. An equal entry must not exist, and this entry must + * belong in this leaf (according to its hash value). Fills in the + * entry handle on success. Returns 0 on success or ENOSPC on failure. + */ +extern int zap_entry_create(zap_leaf_t *l, struct zap_name *zn, uint32_t cd, + uint8_t integer_size, uint64_t num_integers, const void *buf, + zap_entry_handle_t *zeh); + +/* Determine whether there is another entry with the same normalized form. */ +extern boolean_t zap_entry_normalization_conflict(zap_entry_handle_t *zeh, + struct zap_name *zn, const char *name, struct zap *zap); + +/* + * Other stuff. + */ + +extern void zap_leaf_init(zap_leaf_t *l, boolean_t sort); +extern void zap_leaf_byteswap(zap_leaf_phys_t *buf, int len); +extern void zap_leaf_split(zap_leaf_t *l, zap_leaf_t *nl, boolean_t sort); +extern void zap_leaf_stats(struct zap *zap, zap_leaf_t *l, + struct zap_stats *zs); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZAP_LEAF_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfeature.h +++ linux-aws-4.15.0/zfs/include/sys/zfeature.h @@ -0,0 +1,73 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _SYS_ZFEATURE_H +#define _SYS_ZFEATURE_H + +#include +#include +#include "zfeature_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VALID_FEATURE_FID(fid) ((fid) >= 0 && (fid) < SPA_FEATURES) +#define VALID_FEATURE_OR_NONE(fid) ((fid) == SPA_FEATURE_NONE || \ + VALID_FEATURE_FID(fid)) + +struct spa; +struct dmu_tx; +struct objset; + +extern void spa_feature_create_zap_objects(struct spa *, struct dmu_tx *); +extern void spa_feature_enable(struct spa *, spa_feature_t, + struct dmu_tx *); +extern void spa_feature_incr(struct spa *, spa_feature_t, struct dmu_tx *); +extern void spa_feature_decr(struct spa *, spa_feature_t, struct dmu_tx *); +extern boolean_t spa_feature_is_enabled(struct spa *, spa_feature_t); +extern boolean_t spa_feature_is_active(struct spa *, spa_feature_t); +extern boolean_t spa_feature_enabled_txg(spa_t *spa, spa_feature_t fid, + uint64_t *txg); +extern uint64_t spa_feature_refcount(spa_t *, spa_feature_t, uint64_t); +extern boolean_t spa_features_check(spa_t *, boolean_t, nvlist_t *, nvlist_t *); + +/* + * These functions are only exported for zhack and zdb; normal callers should + * use the above interfaces. + */ +extern int feature_get_refcount(struct spa *, zfeature_info_t *, uint64_t *); +extern int feature_get_refcount_from_disk(spa_t *spa, zfeature_info_t *feature, + uint64_t *res); +extern void feature_enable_sync(struct spa *, zfeature_info_t *, + struct dmu_tx *); +extern void feature_sync(struct spa *, zfeature_info_t *, uint64_t, + struct dmu_tx *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZFEATURE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_acl.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_acl.h @@ -0,0 +1,247 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_ACL_H +#define _SYS_FS_ZFS_ACL_H + +#ifdef _KERNEL +#include +#include +#include +#endif +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct znode_phys; + +#define ACE_SLOT_CNT 6 +#define ZFS_ACL_VERSION_INITIAL 0ULL +#define ZFS_ACL_VERSION_FUID 1ULL +#define ZFS_ACL_VERSION ZFS_ACL_VERSION_FUID + +/* + * ZFS ACLs (Access Control Lists) are stored in various forms. + * + * Files created with ACL version ZFS_ACL_VERSION_INITIAL + * will all be created with fixed length ACEs of type + * zfs_oldace_t. + * + * Files with ACL version ZFS_ACL_VERSION_FUID will be created + * with various sized ACEs. The abstraction entries will utilize + * zfs_ace_hdr_t, normal user/group entries will use zfs_ace_t + * and some specialized CIFS ACEs will use zfs_object_ace_t. + */ + +/* + * All ACEs have a common hdr. For + * owner@, group@, and everyone@ this is all + * thats needed. + */ +typedef struct zfs_ace_hdr { + uint16_t z_type; + uint16_t z_flags; + uint32_t z_access_mask; +} zfs_ace_hdr_t; + +typedef zfs_ace_hdr_t zfs_ace_abstract_t; + +/* + * Standard ACE + */ +typedef struct zfs_ace { + zfs_ace_hdr_t z_hdr; + uint64_t z_fuid; +} zfs_ace_t; + +/* + * The following type only applies to ACE_ACCESS_ALLOWED|DENIED_OBJECT_ACE_TYPE + * and will only be set/retrieved in a CIFS context. + */ + +typedef struct zfs_object_ace { + zfs_ace_t z_ace; + uint8_t z_object_type[16]; /* object type */ + uint8_t z_inherit_type[16]; /* inherited object type */ +} zfs_object_ace_t; + +typedef struct zfs_oldace { + uint32_t z_fuid; /* "who" */ + uint32_t z_access_mask; /* access mask */ + uint16_t z_flags; /* flags, i.e inheritance */ + uint16_t z_type; /* type of entry allow/deny */ +} zfs_oldace_t; + +typedef struct zfs_acl_phys_v0 { + uint64_t z_acl_extern_obj; /* ext acl pieces */ + uint32_t z_acl_count; /* Number of ACEs */ + uint16_t z_acl_version; /* acl version */ + uint16_t z_acl_pad; /* pad */ + zfs_oldace_t z_ace_data[ACE_SLOT_CNT]; /* 6 standard ACEs */ +} zfs_acl_phys_v0_t; + +#define ZFS_ACE_SPACE (sizeof (zfs_oldace_t) * ACE_SLOT_CNT) + +/* + * Size of ACL count is always 2 bytes. + * Necessary to for dealing with both V0 ACL and V1 ACL layout + */ +#define ZFS_ACL_COUNT_SIZE (sizeof (uint16_t)) + +typedef struct zfs_acl_phys { + uint64_t z_acl_extern_obj; /* ext acl pieces */ + uint32_t z_acl_size; /* Number of bytes in ACL */ + uint16_t z_acl_version; /* acl version */ + uint16_t z_acl_count; /* ace count */ + uint8_t z_ace_data[ZFS_ACE_SPACE]; /* space for embedded ACEs */ +} zfs_acl_phys_t; + +typedef struct acl_ops { + uint32_t (*ace_mask_get) (void *acep); /* get access mask */ + void (*ace_mask_set) (void *acep, + uint32_t mask); /* set access mask */ + uint16_t (*ace_flags_get) (void *acep); /* get flags */ + void (*ace_flags_set) (void *acep, + uint16_t flags); /* set flags */ + uint16_t (*ace_type_get)(void *acep); /* get type */ + void (*ace_type_set)(void *acep, + uint16_t type); /* set type */ + uint64_t (*ace_who_get)(void *acep); /* get who/fuid */ + void (*ace_who_set)(void *acep, + uint64_t who); /* set who/fuid */ + size_t (*ace_size)(void *acep); /* how big is this ace */ + size_t (*ace_abstract_size)(void); /* sizeof abstract entry */ + int (*ace_mask_off)(void); /* off of access mask in ace */ + /* ptr to data if any */ + int (*ace_data)(void *acep, void **datap); +} acl_ops_t; + +/* + * A zfs_acl_t structure is composed of a list of zfs_acl_node_t's. + * Each node will have one or more ACEs associated with it. You will + * only have multiple nodes during a chmod operation. Normally only + * one node is required. + */ +typedef struct zfs_acl_node { + list_node_t z_next; /* Next chunk of ACEs */ + void *z_acldata; /* pointer into actual ACE(s) */ + void *z_allocdata; /* pointer to kmem allocated memory */ + size_t z_allocsize; /* Size of blob in bytes */ + size_t z_size; /* length of ACL data */ + uint64_t z_ace_count; /* number of ACEs in this acl node */ + int z_ace_idx; /* ace iterator positioned on */ +} zfs_acl_node_t; + +typedef struct zfs_acl { + uint64_t z_acl_count; /* Number of ACEs */ + size_t z_acl_bytes; /* Number of bytes in ACL */ + uint_t z_version; /* version of ACL */ + void *z_next_ace; /* pointer to next ACE */ + uint64_t z_hints; /* ACL hints (ZFS_INHERIT_ACE ...) */ + zfs_acl_node_t *z_curr_node; /* current node iterator is handling */ + list_t z_acl; /* chunks of ACE data */ + acl_ops_t *z_ops; /* ACL operations */ +} zfs_acl_t; + +typedef struct acl_locator_cb { + zfs_acl_t *cb_aclp; + zfs_acl_node_t *cb_acl_node; +} zfs_acl_locator_cb_t; + +#define ACL_DATA_ALLOCED 0x1 +#define ZFS_ACL_SIZE(aclcnt) (sizeof (ace_t) * (aclcnt)) + +struct zfs_fuid_info; + +typedef struct zfs_acl_ids { + uint64_t z_fuid; /* file owner fuid */ + uint64_t z_fgid; /* file group owner fuid */ + uint64_t z_mode; /* mode to set on create */ + zfs_acl_t *z_aclp; /* ACL to create with file */ + struct zfs_fuid_info *z_fuidp; /* for tracking fuids for log */ +} zfs_acl_ids_t; + +/* + * Property values for acl_mode and acl_inherit. + * + * acl_mode can take discard, noallow, groupmask and passthrough. + * whereas acl_inherit has secure instead of groupmask. + */ + +#define ZFS_ACL_DISCARD 0 +#define ZFS_ACL_NOALLOW 1 +#define ZFS_ACL_GROUPMASK 2 +#define ZFS_ACL_PASSTHROUGH 3 +#define ZFS_ACL_RESTRICTED 4 +#define ZFS_ACL_PASSTHROUGH_X 5 + +struct znode; +struct zfsvfs; + +#ifdef _KERNEL +int zfs_acl_ids_create(struct znode *, int, vattr_t *, + cred_t *, vsecattr_t *, zfs_acl_ids_t *); +void zfs_acl_ids_free(zfs_acl_ids_t *); +boolean_t zfs_acl_ids_overquota(struct zfsvfs *, zfs_acl_ids_t *); +int zfs_getacl(struct znode *, vsecattr_t *, boolean_t, cred_t *); +int zfs_setacl(struct znode *, vsecattr_t *, boolean_t, cred_t *); +void zfs_acl_rele(void *); +void zfs_oldace_byteswap(ace_t *, int); +void zfs_ace_byteswap(void *, size_t, boolean_t); +extern boolean_t zfs_has_access(struct znode *zp, cred_t *cr); +extern int zfs_zaccess(struct znode *, int, int, boolean_t, cred_t *); +int zfs_fastaccesschk_execute(struct znode *, cred_t *); +extern int zfs_zaccess_rwx(struct znode *, mode_t, int, cred_t *); +extern int zfs_zaccess_unix(struct znode *, mode_t, cred_t *); +extern int zfs_acl_access(struct znode *, int, cred_t *); +void zfs_acl_chmod_setattr(struct znode *, zfs_acl_t **, uint64_t); +int zfs_zaccess_delete(struct znode *, struct znode *, cred_t *); +int zfs_zaccess_rename(struct znode *, struct znode *, + struct znode *, struct znode *, cred_t *cr); +void zfs_acl_free(zfs_acl_t *); +int zfs_vsec_2_aclp(struct zfsvfs *, umode_t, vsecattr_t *, cred_t *, + struct zfs_fuid_info **, zfs_acl_t **); +int zfs_aclset_common(struct znode *, zfs_acl_t *, cred_t *, dmu_tx_t *); +uint64_t zfs_external_acl(struct znode *); +int zfs_znode_acl_version(struct znode *); +int zfs_acl_size(struct znode *, int *); +zfs_acl_t *zfs_acl_alloc(int); +zfs_acl_node_t *zfs_acl_node_alloc(size_t); +void zfs_acl_xform(struct znode *, zfs_acl_t *, cred_t *); +void zfs_acl_data_locator(void **, uint32_t *, uint32_t, boolean_t, void *); +uint64_t zfs_mode_compute(uint64_t, zfs_acl_t *, + uint64_t *, uint64_t, uint64_t); +int zfs_acl_chown_setattr(struct znode *); + +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _SYS_FS_ZFS_ACL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_context.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_context.h @@ -0,0 +1,796 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_ZFS_CONTEXT_H +#define _SYS_ZFS_CONTEXT_H + +#ifdef __KERNEL__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#else /* _KERNEL */ + +#define _SYS_MUTEX_H +#define _SYS_RWLOCK_H +#define _SYS_CONDVAR_H +#define _SYS_SYSTM_H +#define _SYS_T_LOCK_H +#define _SYS_VNODE_H +#define _SYS_VFS_H +#define _SYS_SUNDDI_H +#define _SYS_CALLB_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Stack + */ + +#define noinline __attribute__((noinline)) +#define likely(x) __builtin_expect((x), 1) + +/* + * Debugging + */ + +/* + * Note that we are not using the debugging levels. + */ + +#define CE_CONT 0 /* continuation */ +#define CE_NOTE 1 /* notice */ +#define CE_WARN 2 /* warning */ +#define CE_PANIC 3 /* panic */ +#define CE_IGNORE 4 /* print nothing */ + +/* + * ZFS debugging + */ + +extern void dprintf_setup(int *argc, char **argv); + +extern void cmn_err(int, const char *, ...); +extern void vcmn_err(int, const char *, va_list); +extern void panic(const char *, ...); +extern void vpanic(const char *, va_list); + +#define fm_panic panic + +extern int aok; + +/* + * DTrace SDT probes have different signatures in userland than they do in + * the kernel. If they're being used in kernel code, re-define them out of + * existence for their counterparts in libzpool. + * + * Here's an example of how to use the set-error probes in userland: + * zfs$target:::set-error /arg0 == EBUSY/ {stack();} + * + * Here's an example of how to use DTRACE_PROBE probes in userland: + * If there is a probe declared as follows: + * DTRACE_PROBE2(zfs__probe_name, uint64_t, blkid, dnode_t *, dn); + * Then you can use it as follows: + * zfs$target:::probe2 /copyinstr(arg0) == "zfs__probe_name"/ + * {printf("%u %p\n", arg1, arg2);} + */ + +#ifdef DTRACE_PROBE +#undef DTRACE_PROBE +#endif /* DTRACE_PROBE */ +#define DTRACE_PROBE(a) \ + ZFS_PROBE0(#a) + +#ifdef DTRACE_PROBE1 +#undef DTRACE_PROBE1 +#endif /* DTRACE_PROBE1 */ +#define DTRACE_PROBE1(a, b, c) \ + ZFS_PROBE1(#a, (unsigned long)c) + +#ifdef DTRACE_PROBE2 +#undef DTRACE_PROBE2 +#endif /* DTRACE_PROBE2 */ +#define DTRACE_PROBE2(a, b, c, d, e) \ + ZFS_PROBE2(#a, (unsigned long)c, (unsigned long)e) + +#ifdef DTRACE_PROBE3 +#undef DTRACE_PROBE3 +#endif /* DTRACE_PROBE3 */ +#define DTRACE_PROBE3(a, b, c, d, e, f, g) \ + ZFS_PROBE3(#a, (unsigned long)c, (unsigned long)e, (unsigned long)g) + +#ifdef DTRACE_PROBE4 +#undef DTRACE_PROBE4 +#endif /* DTRACE_PROBE4 */ +#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) \ + ZFS_PROBE4(#a, (unsigned long)c, (unsigned long)e, (unsigned long)g, \ + (unsigned long)i) + +/* + * Threads. TS_STACK_MIN is dictated by the minimum allowed pthread stack + * size. While TS_STACK_MAX is somewhat arbitrary, it was selected to be + * large enough for the expected stack depth while small enough to avoid + * exhausting address space with high thread counts. + */ +#define TS_MAGIC 0x72f158ab4261e538ull +#define TS_RUN 0x00000002 +#define TS_STACK_MIN MAX(PTHREAD_STACK_MIN, 32768) +#define TS_STACK_MAX (256 * 1024) + +/* in libzpool, p0 exists only to have its address taken */ +typedef struct proc { + uintptr_t this_is_never_used_dont_dereference_it; +} proc_t; + +extern struct proc p0; +#define curproc (&p0) + +typedef void (*thread_func_t)(void *); +typedef void (*thread_func_arg_t)(void *); +typedef pthread_t kt_did_t; + +#define kpreempt(x) ((void)0) + +typedef struct kthread { + kt_did_t t_tid; + thread_func_t t_func; + void * t_arg; + pri_t t_pri; +} kthread_t; + +#define curthread zk_thread_current() +#define getcomm() "unknown" +#define thread_exit zk_thread_exit +#define thread_create(stk, stksize, func, arg, len, pp, state, pri) \ + zk_thread_create(stk, stksize, (thread_func_t)func, arg, \ + len, NULL, state, pri, PTHREAD_CREATE_DETACHED) +#define thread_join(t) zk_thread_join(t) +#define newproc(f, a, cid, pri, ctp, pid) (ENOSYS) + +extern kthread_t *zk_thread_current(void); +extern void zk_thread_exit(void); +extern kthread_t *zk_thread_create(caddr_t stk, size_t stksize, + thread_func_t func, void *arg, uint64_t len, + proc_t *pp, int state, pri_t pri, int detachstate); +extern void zk_thread_join(kt_did_t tid); + +#define kpreempt_disable() ((void)0) +#define kpreempt_enable() ((void)0) + +#define PS_NONE -1 + +#define issig(why) (FALSE) +#define ISSIG(thr, why) (FALSE) + +/* + * Mutexes + */ +#define MTX_MAGIC 0x9522f51362a6e326ull +#define MTX_INIT ((void *)NULL) +#define MTX_DEST ((void *)-1UL) + +typedef struct kmutex { + void *m_owner; + uint64_t m_magic; + pthread_mutex_t m_lock; +} kmutex_t; + +#define MUTEX_DEFAULT 0 +#define MUTEX_NOLOCKDEP MUTEX_DEFAULT +#define MUTEX_HELD(m) ((m)->m_owner == curthread) +#define MUTEX_NOT_HELD(m) (!MUTEX_HELD(m)) + +extern void mutex_init(kmutex_t *mp, char *name, int type, void *cookie); +extern void mutex_destroy(kmutex_t *mp); +extern void mutex_enter(kmutex_t *mp); +extern void mutex_exit(kmutex_t *mp); +extern int mutex_tryenter(kmutex_t *mp); +extern void *mutex_owner(kmutex_t *mp); +extern int mutex_held(kmutex_t *mp); + +/* + * RW locks + */ +#define RW_MAGIC 0x4d31fb123648e78aull +#define RW_INIT ((void *)NULL) +#define RW_DEST ((void *)-1UL) + +typedef struct krwlock { + void *rw_owner; + void *rw_wr_owner; + uint64_t rw_magic; + pthread_rwlock_t rw_lock; + uint_t rw_readers; +} krwlock_t; + +typedef int krw_t; + +#define RW_READER 0 +#define RW_WRITER 1 +#define RW_DEFAULT RW_READER +#define RW_NOLOCKDEP RW_READER + +#define RW_READ_HELD(x) ((x)->rw_readers > 0) +#define RW_WRITE_HELD(x) ((x)->rw_wr_owner == curthread) +#define RW_LOCK_HELD(x) (RW_READ_HELD(x) || RW_WRITE_HELD(x)) + +#undef RW_LOCK_HELD +#define RW_LOCK_HELD(x) (RW_READ_HELD(x) || RW_WRITE_HELD(x)) + +#undef RW_LOCK_HELD +#define RW_LOCK_HELD(x) (RW_READ_HELD(x) || RW_WRITE_HELD(x)) + +extern void rw_init(krwlock_t *rwlp, char *name, int type, void *arg); +extern void rw_destroy(krwlock_t *rwlp); +extern void rw_enter(krwlock_t *rwlp, krw_t rw); +extern int rw_tryenter(krwlock_t *rwlp, krw_t rw); +extern int rw_tryupgrade(krwlock_t *rwlp); +extern void rw_exit(krwlock_t *rwlp); +#define rw_downgrade(rwlp) do { } while (0) + +extern uid_t crgetuid(cred_t *cr); +extern uid_t crgetruid(cred_t *cr); +extern gid_t crgetgid(cred_t *cr); +extern int crgetngroups(cred_t *cr); +extern gid_t *crgetgroups(cred_t *cr); + +/* + * Condition variables + */ +#define CV_MAGIC 0xd31ea9a83b1b30c4ull + +typedef struct kcondvar { + uint64_t cv_magic; + pthread_cond_t cv; +} kcondvar_t; + +#define CV_DEFAULT 0 +#define CALLOUT_FLAG_ABSOLUTE 0x2 + +extern void cv_init(kcondvar_t *cv, char *name, int type, void *arg); +extern void cv_destroy(kcondvar_t *cv); +extern void cv_wait(kcondvar_t *cv, kmutex_t *mp); +extern clock_t cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime); +extern clock_t cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, + hrtime_t res, int flag); +extern void cv_signal(kcondvar_t *cv); +extern void cv_broadcast(kcondvar_t *cv); +#define cv_timedwait_sig(cv, mp, at) cv_timedwait(cv, mp, at) +#define cv_wait_sig(cv, mp) cv_wait(cv, mp) +#define cv_wait_io(cv, mp) cv_wait(cv, mp) +#define cv_timedwait_sig_hires(cv, mp, t, r, f) \ + cv_timedwait_hires(cv, mp, t, r, f) + +/* + * Thread-specific data + */ +#define tsd_get(k) pthread_getspecific(k) +#define tsd_set(k, v) pthread_setspecific(k, v) +#define tsd_create(kp, d) pthread_key_create(kp, d) +#define tsd_destroy(kp) /* nothing */ + +/* + * Thread-specific data + */ +#define tsd_get(k) pthread_getspecific(k) +#define tsd_set(k, v) pthread_setspecific(k, v) +#define tsd_create(kp, d) pthread_key_create(kp, d) +#define tsd_destroy(kp) /* nothing */ + +/* + * kstat creation, installation and deletion + */ +extern kstat_t *kstat_create(const char *, int, + const char *, const char *, uchar_t, ulong_t, uchar_t); +extern void kstat_named_init(kstat_named_t *, const char *, uchar_t); +extern void kstat_install(kstat_t *); +extern void kstat_delete(kstat_t *); +extern void kstat_waitq_enter(kstat_io_t *); +extern void kstat_waitq_exit(kstat_io_t *); +extern void kstat_runq_enter(kstat_io_t *); +extern void kstat_runq_exit(kstat_io_t *); +extern void kstat_waitq_to_runq(kstat_io_t *); +extern void kstat_runq_back_to_waitq(kstat_io_t *); +extern void kstat_set_raw_ops(kstat_t *ksp, + int (*headers)(char *buf, size_t size), + int (*data)(char *buf, size_t size, void *data), + void *(*addr)(kstat_t *ksp, loff_t index)); + +/* + * Kernel memory + */ +#define KM_SLEEP UMEM_NOFAIL +#define KM_PUSHPAGE KM_SLEEP +#define KM_NOSLEEP UMEM_DEFAULT +#define KMC_NODEBUG UMC_NODEBUG +#define KMC_KMEM 0x0 +#define KMC_VMEM 0x0 +#define kmem_alloc(_s, _f) umem_alloc(_s, _f) +#define kmem_zalloc(_s, _f) umem_zalloc(_s, _f) +#define kmem_free(_b, _s) umem_free(_b, _s) +#define vmem_alloc(_s, _f) kmem_alloc(_s, _f) +#define vmem_zalloc(_s, _f) kmem_zalloc(_s, _f) +#define vmem_free(_b, _s) kmem_free(_b, _s) +#define kmem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i) \ + umem_cache_create(_a, _b, _c, _d, _e, _f, _g, _h, _i) +#define kmem_cache_destroy(_c) umem_cache_destroy(_c) +#define kmem_cache_alloc(_c, _f) umem_cache_alloc(_c, _f) +#define kmem_cache_free(_c, _b) umem_cache_free(_c, _b) +#define kmem_debugging() 0 +#define kmem_cache_reap_now(_c) umem_cache_reap_now(_c); +#define kmem_cache_set_move(_c, _cb) /* nothing */ +#define vmem_qcache_reap(_v) /* nothing */ +#define POINTER_INVALIDATE(_pp) /* nothing */ +#define POINTER_IS_VALID(_p) 0 + +extern vmem_t *zio_arena; + +typedef umem_cache_t kmem_cache_t; + +typedef enum kmem_cbrc { + KMEM_CBRC_YES, + KMEM_CBRC_NO, + KMEM_CBRC_LATER, + KMEM_CBRC_DONT_NEED, + KMEM_CBRC_DONT_KNOW +} kmem_cbrc_t; + +/* + * Task queues + */ + +#define TASKQ_NAMELEN 31 + +typedef uintptr_t taskqid_t; +typedef void (task_func_t)(void *); + +typedef struct taskq_ent { + struct taskq_ent *tqent_next; + struct taskq_ent *tqent_prev; + task_func_t *tqent_func; + void *tqent_arg; + uintptr_t tqent_flags; +} taskq_ent_t; + +typedef struct taskq { + char tq_name[TASKQ_NAMELEN + 1]; + kmutex_t tq_lock; + krwlock_t tq_threadlock; + kcondvar_t tq_dispatch_cv; + kcondvar_t tq_wait_cv; + kthread_t **tq_threadlist; + int tq_flags; + int tq_active; + int tq_nthreads; + int tq_nalloc; + int tq_minalloc; + int tq_maxalloc; + kcondvar_t tq_maxalloc_cv; + int tq_maxalloc_wait; + taskq_ent_t *tq_freelist; + taskq_ent_t tq_task; +} taskq_t; + +#define TQENT_FLAG_PREALLOC 0x1 /* taskq_dispatch_ent used */ + +#define TASKQ_PREPOPULATE 0x0001 +#define TASKQ_CPR_SAFE 0x0002 /* Use CPR safe protocol */ +#define TASKQ_DYNAMIC 0x0004 /* Use dynamic thread scheduling */ +#define TASKQ_THREADS_CPU_PCT 0x0008 /* Scale # threads by # cpus */ +#define TASKQ_DC_BATCH 0x0010 /* Mark threads as batch */ + +#define TQ_SLEEP KM_SLEEP /* Can block for memory */ +#define TQ_NOSLEEP KM_NOSLEEP /* cannot block for memory; may fail */ +#define TQ_NOQUEUE 0x02 /* Do not enqueue if can't dispatch */ +#define TQ_FRONT 0x08 /* Queue in front */ + +#define TASKQID_INVALID ((taskqid_t)0) + +extern taskq_t *system_taskq; +extern taskq_t *system_delay_taskq; + +extern taskq_t *taskq_create(const char *, int, pri_t, int, int, uint_t); +#define taskq_create_proc(a, b, c, d, e, p, f) \ + (taskq_create(a, b, c, d, e, f)) +#define taskq_create_sysdc(a, b, d, e, p, dc, f) \ + (taskq_create(a, b, maxclsyspri, d, e, f)) +extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t); +extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *, uint_t, + clock_t); +extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t, + taskq_ent_t *); +extern int taskq_empty_ent(taskq_ent_t *); +extern void taskq_init_ent(taskq_ent_t *); +extern void taskq_destroy(taskq_t *); +extern void taskq_wait(taskq_t *); +extern void taskq_wait_id(taskq_t *, taskqid_t); +extern void taskq_wait_outstanding(taskq_t *, taskqid_t); +extern int taskq_member(taskq_t *, kthread_t *); +extern int taskq_cancel_id(taskq_t *, taskqid_t); +extern void system_taskq_init(void); +extern void system_taskq_fini(void); + +#define XVA_MAPSIZE 3 +#define XVA_MAGIC 0x78766174 + +/* + * vnodes + */ +typedef struct vnode { + uint64_t v_size; + int v_fd; + char *v_path; + int v_dump_fd; +} vnode_t; + +extern char *vn_dumpdir; +#define AV_SCANSTAMP_SZ 32 /* length of anti-virus scanstamp */ + +typedef struct xoptattr { + timestruc_t xoa_createtime; /* Create time of file */ + uint8_t xoa_archive; + uint8_t xoa_system; + uint8_t xoa_readonly; + uint8_t xoa_hidden; + uint8_t xoa_nounlink; + uint8_t xoa_immutable; + uint8_t xoa_appendonly; + uint8_t xoa_nodump; + uint8_t xoa_settable; + uint8_t xoa_opaque; + uint8_t xoa_av_quarantined; + uint8_t xoa_av_modified; + uint8_t xoa_av_scanstamp[AV_SCANSTAMP_SZ]; + uint8_t xoa_reparse; + uint8_t xoa_offline; + uint8_t xoa_sparse; +} xoptattr_t; + +typedef struct vattr { + uint_t va_mask; /* bit-mask of attributes */ + u_offset_t va_size; /* file size in bytes */ +} vattr_t; + + +typedef struct xvattr { + vattr_t xva_vattr; /* Embedded vattr structure */ + uint32_t xva_magic; /* Magic Number */ + uint32_t xva_mapsize; /* Size of attr bitmap (32-bit words) */ + uint32_t *xva_rtnattrmapp; /* Ptr to xva_rtnattrmap[] */ + uint32_t xva_reqattrmap[XVA_MAPSIZE]; /* Requested attrs */ + uint32_t xva_rtnattrmap[XVA_MAPSIZE]; /* Returned attrs */ + xoptattr_t xva_xoptattrs; /* Optional attributes */ +} xvattr_t; + +typedef struct vsecattr { + uint_t vsa_mask; /* See below */ + int vsa_aclcnt; /* ACL entry count */ + void *vsa_aclentp; /* pointer to ACL entries */ + int vsa_dfaclcnt; /* default ACL entry count */ + void *vsa_dfaclentp; /* pointer to default ACL entries */ + size_t vsa_aclentsz; /* ACE size in bytes of vsa_aclentp */ +} vsecattr_t; + +#define AT_TYPE 0x00001 +#define AT_MODE 0x00002 +#define AT_UID 0x00004 +#define AT_GID 0x00008 +#define AT_FSID 0x00010 +#define AT_NODEID 0x00020 +#define AT_NLINK 0x00040 +#define AT_SIZE 0x00080 +#define AT_ATIME 0x00100 +#define AT_MTIME 0x00200 +#define AT_CTIME 0x00400 +#define AT_RDEV 0x00800 +#define AT_BLKSIZE 0x01000 +#define AT_NBLOCKS 0x02000 +#define AT_SEQ 0x08000 +#define AT_XVATTR 0x10000 + +#define CRCREAT 0 + +extern int fop_getattr(vnode_t *vp, vattr_t *vap); + +#define VOP_CLOSE(vp, f, c, o, cr, ct) vn_close(vp) +#define VOP_PUTPAGE(vp, of, sz, fl, cr, ct) 0 +#define VOP_GETATTR(vp, vap, fl, cr, ct) fop_getattr((vp), (vap)); + +#define VOP_FSYNC(vp, f, cr, ct) fsync((vp)->v_fd) + +#define VN_RELE(vp) vn_close(vp) + +extern int vn_open(char *path, int x1, int oflags, int mode, vnode_t **vpp, + int x2, int x3); +extern int vn_openat(char *path, int x1, int oflags, int mode, vnode_t **vpp, + int x2, int x3, vnode_t *vp, int fd); +extern int vn_rdwr(int uio, vnode_t *vp, void *addr, ssize_t len, + offset_t offset, int x1, int x2, rlim64_t x3, void *x4, ssize_t *residp); +extern void vn_close(vnode_t *vp); + +#define vn_remove(path, x1, x2) remove(path) +#define vn_rename(from, to, seg) rename((from), (to)) +#define vn_is_readonly(vp) B_FALSE + +extern vnode_t *rootdir; + +#include /* for FREAD, FWRITE, etc */ + +/* + * Random stuff + */ +#define ddi_get_lbolt() (gethrtime() >> 23) +#define ddi_get_lbolt64() (gethrtime() >> 23) +#define hz 119 /* frequency when using gethrtime() >> 23 for lbolt */ + +#define ddi_time_before(a, b) (a < b) +#define ddi_time_after(a, b) ddi_time_before(b, a) +#define ddi_time_before_eq(a, b) (!ddi_time_after(a, b)) +#define ddi_time_after_eq(a, b) ddi_time_before_eq(b, a) + +#define ddi_time_before64(a, b) (a < b) +#define ddi_time_after64(a, b) ddi_time_before64(b, a) +#define ddi_time_before_eq64(a, b) (!ddi_time_after64(a, b)) +#define ddi_time_after_eq64(a, b) ddi_time_before_eq64(b, a) + +extern void delay(clock_t ticks); + +#define SEC_TO_TICK(sec) ((sec) * hz) +#define MSEC_TO_TICK(msec) ((msec) / (MILLISEC / hz)) +#define USEC_TO_TICK(usec) ((usec) / (MICROSEC / hz)) +#define NSEC_TO_TICK(usec) ((usec) / (NANOSEC / hz)) + +#define gethrestime_sec() time(NULL) +#define gethrestime(t) \ + do {\ + (t)->tv_sec = gethrestime_sec();\ + (t)->tv_nsec = 0;\ + } while (0); + +#define max_ncpus 64 +#define boot_ncpus (sysconf(_SC_NPROCESSORS_ONLN)) + +/* + * Process priorities as defined by setpriority(2) and getpriority(2). + */ +#define minclsyspri 19 +#define maxclsyspri -20 +#define defclsyspri 0 + +#define CPU_SEQID ((uintptr_t)pthread_self() & (max_ncpus - 1)) + +#define kcred NULL +#define CRED() NULL + +#define ptob(x) ((x) * PAGESIZE) + +extern uint64_t physmem; + +extern int highbit64(uint64_t i); +extern int lowbit64(uint64_t i); +extern int highbit(ulong_t i); +extern int lowbit(ulong_t i); +extern int random_get_bytes(uint8_t *ptr, size_t len); +extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); + +extern void kernel_init(int); +extern void kernel_fini(void); +extern void thread_init(void); +extern void thread_fini(void); +extern void random_init(void); +extern void random_fini(void); + +struct spa; +extern void nicenum(uint64_t num, char *buf); +extern void show_pool_stats(struct spa *); +extern int set_global_var(char *arg); + +typedef struct callb_cpr { + kmutex_t *cc_lockp; +} callb_cpr_t; + +#define CALLB_CPR_INIT(cp, lockp, func, name) { \ + (cp)->cc_lockp = lockp; \ +} + +#define CALLB_CPR_SAFE_BEGIN(cp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ +} + +#define CALLB_CPR_SAFE_END(cp, lockp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ +} + +#define CALLB_CPR_EXIT(cp) { \ + ASSERT(MUTEX_HELD((cp)->cc_lockp)); \ + mutex_exit((cp)->cc_lockp); \ +} + +#define zone_dataset_visible(x, y) (1) +#define INGLOBALZONE(z) (1) + +extern char *kmem_vasprintf(const char *fmt, va_list adx); +extern char *kmem_asprintf(const char *fmt, ...); +#define strfree(str) kmem_free((str), strlen(str) + 1) + +/* + * Hostname information + */ +extern char hw_serial[]; /* for userland-emulated hostid access */ +extern int ddi_strtoul(const char *str, char **nptr, int base, + unsigned long *result); + +extern int ddi_strtoull(const char *str, char **nptr, int base, + u_longlong_t *result); + +typedef struct utsname utsname_t; +extern utsname_t *utsname(void); + +/* ZFS Boot Related stuff. */ + +struct _buf { + intptr_t _fd; +}; + +struct bootstat { + uint64_t st_size; +}; + +typedef struct ace_object { + uid_t a_who; + uint32_t a_access_mask; + uint16_t a_flags; + uint16_t a_type; + uint8_t a_obj_type[16]; + uint8_t a_inherit_obj_type[16]; +} ace_object_t; + + +#define ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x05 +#define ACE_ACCESS_DENIED_OBJECT_ACE_TYPE 0x06 +#define ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE 0x07 +#define ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE 0x08 + +extern struct _buf *kobj_open_file(char *name); +extern int kobj_read_file(struct _buf *file, char *buf, unsigned size, + unsigned off); +extern void kobj_close_file(struct _buf *file); +extern int kobj_get_filesize(struct _buf *file, uint64_t *size); +extern int zfs_secpolicy_snapshot_perms(const char *name, cred_t *cr); +extern int zfs_secpolicy_rename_perms(const char *from, const char *to, + cred_t *cr); +extern int zfs_secpolicy_destroy_perms(const char *name, cred_t *cr); +extern int secpolicy_zfs(const cred_t *cr); +extern zoneid_t getzoneid(void); + +/* SID stuff */ +typedef struct ksiddomain { + uint_t kd_ref; + uint_t kd_len; + char *kd_name; +} ksiddomain_t; + +ksiddomain_t *ksid_lookupdomain(const char *); +void ksiddomain_rele(ksiddomain_t *); + +#define DDI_SLEEP KM_SLEEP +#define ddi_log_sysevent(_a, _b, _c, _d, _e, _f, _g) \ + sysevent_post_event(_c, _d, _b, "libzpool", _e, _f) + +#define zfs_sleep_until(wakeup) \ + do { \ + hrtime_t delta = wakeup - gethrtime(); \ + struct timespec ts; \ + ts.tv_sec = delta / NANOSEC; \ + ts.tv_nsec = delta % NANOSEC; \ + (void) nanosleep(&ts, NULL); \ + } while (0) + +typedef int fstrans_cookie_t; + +extern fstrans_cookie_t spl_fstrans_mark(void); +extern void spl_fstrans_unmark(fstrans_cookie_t); +extern int __spl_pf_fstrans_check(void); + +#endif /* _KERNEL */ +#endif /* _SYS_ZFS_CONTEXT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_ctldir.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_ctldir.h @@ -0,0 +1,103 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * LLNL-CODE-403049. + * Rewritten for Linux by: + * Rohan Puri + * Brian Behlendorf + */ + +#ifndef _ZFS_CTLDIR_H +#define _ZFS_CTLDIR_H + +#include +#include +#include +#include + +#define ZFS_CTLDIR_NAME ".zfs" +#define ZFS_SNAPDIR_NAME "snapshot" +#define ZFS_SHAREDIR_NAME "shares" + +#define zfs_has_ctldir(zdp) \ + ((zdp)->z_id == ZTOZSB(zdp)->z_root && \ + (ZTOZSB(zdp)->z_ctldir != NULL)) +#define zfs_show_ctldir(zdp) \ + (zfs_has_ctldir(zdp) && \ + (ZTOZSB(zdp)->z_show_ctldir)) + +extern int zfs_expire_snapshot; + +/* zfsctl generic functions */ +extern int zfsctl_create(zfsvfs_t *); +extern void zfsctl_destroy(zfsvfs_t *); +extern struct inode *zfsctl_root(znode_t *); +extern void zfsctl_init(void); +extern void zfsctl_fini(void); +extern boolean_t zfsctl_is_node(struct inode *ip); +extern boolean_t zfsctl_is_snapdir(struct inode *ip); +extern int zfsctl_fid(struct inode *ip, fid_t *fidp); + +/* zfsctl '.zfs' functions */ +extern int zfsctl_root_lookup(struct inode *dip, char *name, + struct inode **ipp, int flags, cred_t *cr, int *direntflags, + pathname_t *realpnp); + +/* zfsctl '.zfs/snapshot' functions */ +extern int zfsctl_snapdir_lookup(struct inode *dip, char *name, + struct inode **ipp, int flags, cred_t *cr, int *direntflags, + pathname_t *realpnp); +extern int zfsctl_snapdir_rename(struct inode *sdip, char *sname, + struct inode *tdip, char *tname, cred_t *cr, int flags); +extern int zfsctl_snapdir_remove(struct inode *dip, char *name, cred_t *cr, + int flags); +extern int zfsctl_snapdir_mkdir(struct inode *dip, char *dirname, vattr_t *vap, + struct inode **ipp, cred_t *cr, int flags); +extern int zfsctl_snapshot_mount(struct path *path, int flags); +extern int zfsctl_snapshot_unmount(char *snapname, int flags); +extern int zfsctl_snapshot_unmount_delay(spa_t *spa, uint64_t objsetid, + int delay); +extern int zfsctl_snapdir_vget(struct super_block *sb, uint64_t objsetid, + int gen, struct inode **ipp); + +/* zfsctl '.zfs/shares' functions */ +extern int zfsctl_shares_lookup(struct inode *dip, char *name, + struct inode **ipp, int flags, cred_t *cr, int *direntflags, + pathname_t *realpnp); + +/* + * These inodes numbers are reserved for the .zfs control directory. + * It is important that they be no larger that 48-bits because only + * 6 bytes are reserved in the NFS file handle for the object number. + * However, they should be as large as possible to avoid conflicts + * with the objects which are assigned monotonically by the dmu. + */ +#define ZFSCTL_INO_ROOT 0x0000FFFFFFFFFFFFULL +#define ZFSCTL_INO_SHARES 0x0000FFFFFFFFFFFEULL +#define ZFSCTL_INO_SNAPDIR 0x0000FFFFFFFFFFFDULL +#define ZFSCTL_INO_SNAPDIRS 0x0000FFFFFFFFFFFCULL + +#define ZFSCTL_EXPIRE_SNAPSHOT 300 + +#endif /* _ZFS_CTLDIR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_debug.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_debug.h @@ -0,0 +1,84 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#ifndef _SYS_ZFS_DEBUG_H +#define _SYS_ZFS_DEBUG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +extern int zfs_flags; +extern int zfs_recover; +extern int zfs_free_leak_on_eio; + +#define ZFS_DEBUG_DPRINTF (1 << 0) +#define ZFS_DEBUG_DBUF_VERIFY (1 << 1) +#define ZFS_DEBUG_DNODE_VERIFY (1 << 2) +#define ZFS_DEBUG_SNAPNAMES (1 << 3) +#define ZFS_DEBUG_MODIFY (1 << 4) +#define ZFS_DEBUG_SPA (1 << 5) +#define ZFS_DEBUG_ZIO_FREE (1 << 6) +#define ZFS_DEBUG_HISTOGRAM_VERIFY (1 << 7) +#define ZFS_DEBUG_METASLAB_VERIFY (1 << 8) +#define ZFS_DEBUG_SET_ERROR (1 << 9) + +extern void __dprintf(const char *file, const char *func, + int line, const char *fmt, ...); +#define dprintf(...) \ + __dprintf(__FILE__, __func__, __LINE__, __VA_ARGS__) +#define zfs_dbgmsg(...) \ + __dprintf(__FILE__, __func__, __LINE__, __VA_ARGS__) + +extern void zfs_panic_recover(const char *fmt, ...); + +typedef struct zfs_dbgmsg { + list_node_t zdm_node; + time_t zdm_timestamp; + int zdm_size; + char zdm_msg[1]; /* variable length allocation */ +} zfs_dbgmsg_t; + +extern void zfs_dbgmsg_init(void); +extern void zfs_dbgmsg_fini(void); + +#ifndef _KERNEL +extern int dprintf_find_string(const char *string); +extern void zfs_dbgmsg_print(const char *tag); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZFS_DEBUG_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_delay.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_delay.h @@ -0,0 +1,41 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#ifndef _SYS_FS_ZFS_DELAY_H +#define _SYS_FS_ZFS_DELAY_H + +#include + +/* + * Generic wrapper to sleep until a given time. + */ +#define zfs_sleep_until(wakeup) \ + do { \ + hrtime_t delta = wakeup - gethrtime(); \ + \ + if (delta > 0) { \ + unsigned long delta_us; \ + delta_us = delta / (NANOSEC / MICROSEC); \ + usleep_range(delta_us, delta_us + 100); \ + } \ + } while (0) + +#endif /* _SYS_FS_ZFS_DELAY_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_dir.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_dir.h @@ -0,0 +1,75 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_FS_ZFS_DIR_H +#define _SYS_FS_ZFS_DIR_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* zfs_dirent_lock() flags */ +#define ZNEW 0x0001 /* entry should not exist */ +#define ZEXISTS 0x0002 /* entry should exist */ +#define ZSHARED 0x0004 /* shared access (zfs_dirlook()) */ +#define ZXATTR 0x0008 /* we want the xattr dir */ +#define ZRENAMING 0x0010 /* znode is being renamed */ +#define ZCILOOK 0x0020 /* case-insensitive lookup requested */ +#define ZCIEXACT 0x0040 /* c-i requires c-s match (rename) */ +#define ZHAVELOCK 0x0080 /* z_name_lock is already held */ + +/* mknode flags */ +#define IS_ROOT_NODE 0x01 /* create a root node */ +#define IS_XATTR 0x02 /* create an extended attribute node */ +#define IS_TMPFILE 0x04 /* create a tmpfile */ + +extern int zfs_dirent_lock(zfs_dirlock_t **, znode_t *, char *, znode_t **, + int, int *, pathname_t *); +extern void zfs_dirent_unlock(zfs_dirlock_t *); +extern int zfs_link_create(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int); +extern int zfs_link_destroy(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int, + boolean_t *); +extern int zfs_dirlook(znode_t *, char *, struct inode **, int, int *, + pathname_t *); +extern void zfs_mknode(znode_t *, vattr_t *, dmu_tx_t *, cred_t *, + uint_t, znode_t **, zfs_acl_ids_t *); +extern void zfs_rmnode(znode_t *); +extern void zfs_dl_name_switch(zfs_dirlock_t *dl, char *new, char **old); +extern boolean_t zfs_dirempty(znode_t *); +extern void zfs_unlinked_add(znode_t *, dmu_tx_t *); +extern void zfs_unlinked_drain(zfsvfs_t *zfsvfs); +extern int zfs_sticky_remove_access(znode_t *, znode_t *, cred_t *cr); +extern int zfs_get_xattrdir(znode_t *, struct inode **, cred_t *, int); +extern int zfs_make_xattrdir(znode_t *, vattr_t *, struct inode **, cred_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_DIR_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_fuid.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_fuid.h @@ -0,0 +1,131 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_FS_ZFS_FUID_H +#define _SYS_FS_ZFS_FUID_H + +#ifdef _KERNEL +#include +#include +#include +#include +#endif +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + ZFS_OWNER, + ZFS_GROUP, + ZFS_ACE_USER, + ZFS_ACE_GROUP +} zfs_fuid_type_t; + +/* + * Estimate space needed for one more fuid table entry. + * for now assume its current size + 1K + */ +#define FUID_SIZE_ESTIMATE(z) ((z)->z_fuid_size + (SPA_MINBLOCKSIZE << 1)) + +#define FUID_INDEX(x) ((x) >> 32) +#define FUID_RID(x) ((x) & 0xffffffff) +#define FUID_ENCODE(idx, rid) (((uint64_t)(idx) << 32) | (rid)) +/* + * FUIDs cause problems for the intent log + * we need to replay the creation of the FUID, + * but we can't count on the idmapper to be around + * and during replay the FUID index may be different than + * before. Also, if an ACL has 100 ACEs and 12 different + * domains we don't want to log 100 domain strings, but rather + * just the unique 12. + */ + +/* + * The FUIDs in the log will index into + * domain string table and the bottom half will be the rid. + * Used for mapping ephemeral uid/gid during ACL setting to FUIDs + */ +typedef struct zfs_fuid { + list_node_t z_next; + uint64_t z_id; /* uid/gid being converted to fuid */ + uint64_t z_domidx; /* index in AVL domain table */ + uint64_t z_logfuid; /* index for domain in log */ +} zfs_fuid_t; + +/* list of unique domains */ +typedef struct zfs_fuid_domain { + list_node_t z_next; + uint64_t z_domidx; /* AVL tree idx */ + const char *z_domain; /* domain string */ +} zfs_fuid_domain_t; + +/* + * FUID information necessary for logging create, setattr, and setacl. + */ +typedef struct zfs_fuid_info { + list_t z_fuids; + list_t z_domains; + uint64_t z_fuid_owner; + uint64_t z_fuid_group; + char **z_domain_table; /* Used during replay */ + uint32_t z_fuid_cnt; /* How many fuids in z_fuids */ + uint32_t z_domain_cnt; /* How many domains */ + size_t z_domain_str_sz; /* len of domain strings z_domain list */ +} zfs_fuid_info_t; + +#ifdef _KERNEL +struct znode; +extern uid_t zfs_fuid_map_id(zfsvfs_t *, uint64_t, cred_t *, zfs_fuid_type_t); +extern void zfs_fuid_node_add(zfs_fuid_info_t **, const char *, uint32_t, + uint64_t, uint64_t, zfs_fuid_type_t); +extern void zfs_fuid_destroy(zfsvfs_t *); +extern uint64_t zfs_fuid_create_cred(zfsvfs_t *, zfs_fuid_type_t, + cred_t *, zfs_fuid_info_t **); +extern uint64_t zfs_fuid_create(zfsvfs_t *, uint64_t, cred_t *, zfs_fuid_type_t, + zfs_fuid_info_t **); +extern void zfs_fuid_map_ids(struct znode *zp, cred_t *cr, + uid_t *uid, uid_t *gid); +extern zfs_fuid_info_t *zfs_fuid_info_alloc(void); +extern void zfs_fuid_info_free(zfs_fuid_info_t *); +extern boolean_t zfs_groupmember(zfsvfs_t *, uint64_t, cred_t *); +void zfs_fuid_sync(zfsvfs_t *, dmu_tx_t *); +extern int zfs_fuid_find_by_domain(zfsvfs_t *, const char *domain, + char **retdomain, boolean_t addok); +extern const char *zfs_fuid_find_by_idx(zfsvfs_t *zfsvfs, uint32_t idx); +extern void zfs_fuid_txhold(zfsvfs_t *zfsvfs, dmu_tx_t *tx); +#endif + +char *zfs_fuid_idx_domain(avl_tree_t *, uint32_t); +void zfs_fuid_avl_tree_create(avl_tree_t *, avl_tree_t *); +uint64_t zfs_fuid_table_load(objset_t *, uint64_t, avl_tree_t *, avl_tree_t *); +void zfs_fuid_table_destroy(avl_tree_t *, avl_tree_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_FUID_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_ioctl.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_ioctl.h @@ -0,0 +1,482 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright 2016 RackTop Systems. + * Copyright (c) 2017, Intel Corporation. + */ + +#ifndef _SYS_ZFS_IOCTL_H +#define _SYS_ZFS_IOCTL_H + +#include +#include +#include +#include +#include +#include + +#ifdef _KERNEL +#include +#endif /* _KERNEL */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The structures in this file are passed between userland and the + * kernel. Userland may be running a 32-bit process, while the kernel + * is 64-bit. Therefore, these structures need to compile the same in + * 32-bit and 64-bit. This means not using type "long", and adding + * explicit padding so that the 32-bit structure will not be packed more + * tightly than the 64-bit structure (which requires 64-bit alignment). + */ + +/* + * Property values for snapdir + */ +#define ZFS_SNAPDIR_HIDDEN 0 +#define ZFS_SNAPDIR_VISIBLE 1 + +/* + * Property values for snapdev + */ +#define ZFS_SNAPDEV_HIDDEN 0 +#define ZFS_SNAPDEV_VISIBLE 1 +/* + * Property values for acltype + */ +#define ZFS_ACLTYPE_OFF 0 +#define ZFS_ACLTYPE_POSIXACL 1 + +/* + * Field manipulation macros for the drr_versioninfo field of the + * send stream header. + */ + +/* + * Header types for zfs send streams. + */ +typedef enum drr_headertype { + DMU_SUBSTREAM = 0x1, + DMU_COMPOUNDSTREAM = 0x2 +} drr_headertype_t; + +#define DMU_GET_STREAM_HDRTYPE(vi) BF64_GET((vi), 0, 2) +#define DMU_SET_STREAM_HDRTYPE(vi, x) BF64_SET((vi), 0, 2, x) + +#define DMU_GET_FEATUREFLAGS(vi) BF64_GET((vi), 2, 30) +#define DMU_SET_FEATUREFLAGS(vi, x) BF64_SET((vi), 2, 30, x) + +/* + * Feature flags for zfs send streams (flags in drr_versioninfo) + */ + +#define DMU_BACKUP_FEATURE_DEDUP (1 << 0) +#define DMU_BACKUP_FEATURE_DEDUPPROPS (1 << 1) +#define DMU_BACKUP_FEATURE_SA_SPILL (1 << 2) +/* flags #3 - #15 are reserved for incompatible closed-source implementations */ +#define DMU_BACKUP_FEATURE_EMBED_DATA (1 << 16) +#define DMU_BACKUP_FEATURE_LZ4 (1 << 17) +/* flag #18 is reserved for a Delphix feature */ +#define DMU_BACKUP_FEATURE_LARGE_BLOCKS (1 << 19) +#define DMU_BACKUP_FEATURE_RESUMING (1 << 20) +/* flag #21 is reserved for a Delphix feature */ +#define DMU_BACKUP_FEATURE_COMPRESSED (1 << 22) +#define DMU_BACKUP_FEATURE_LARGE_DNODE (1 << 23) + +/* + * Mask of all supported backup features + */ +#define DMU_BACKUP_FEATURE_MASK (DMU_BACKUP_FEATURE_DEDUP | \ + DMU_BACKUP_FEATURE_DEDUPPROPS | DMU_BACKUP_FEATURE_SA_SPILL | \ + DMU_BACKUP_FEATURE_EMBED_DATA | DMU_BACKUP_FEATURE_LZ4 | \ + DMU_BACKUP_FEATURE_RESUMING | DMU_BACKUP_FEATURE_LARGE_BLOCKS | \ + DMU_BACKUP_FEATURE_COMPRESSED | DMU_BACKUP_FEATURE_LARGE_DNODE) + +/* Are all features in the given flag word currently supported? */ +#define DMU_STREAM_SUPPORTED(x) (!((x) & ~DMU_BACKUP_FEATURE_MASK)) + +typedef enum dmu_send_resume_token_version { + ZFS_SEND_RESUME_TOKEN_VERSION = 1 +} dmu_send_resume_token_version_t; + +/* + * The drr_versioninfo field of the dmu_replay_record has the + * following layout: + * + * 64 56 48 40 32 24 16 8 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * | reserved | feature-flags |C|S| + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * The low order two bits indicate the header type: SUBSTREAM (0x1) + * or COMPOUNDSTREAM (0x2). Using two bits for this is historical: + * this field used to be a version number, where the two version types + * were 1 and 2. Using two bits for this allows earlier versions of + * the code to be able to recognize send streams that don't use any + * of the features indicated by feature flags. + */ + +#define DMU_BACKUP_MAGIC 0x2F5bacbacULL + +/* + * Send stream flags. Bits 24-31 are reserved for vendor-specific + * implementations and should not be used. + */ +#define DRR_FLAG_CLONE (1<<0) +#define DRR_FLAG_CI_DATA (1<<1) +/* + * This send stream, if it is a full send, includes the FREE and FREEOBJECT + * records that are created by the sending process. This means that the send + * stream can be received as a clone, even though it is not an incremental. + * This is not implemented as a feature flag, because the receiving side does + * not need to have implemented it to receive this stream; it is fully backwards + * compatible. We need a flag, though, because full send streams without it + * cannot necessarily be received as a clone correctly. + */ +#define DRR_FLAG_FREERECORDS (1<<2) + +/* + * flags in the drr_checksumflags field in the DRR_WRITE and + * DRR_WRITE_BYREF blocks + */ +#define DRR_CHECKSUM_DEDUP (1<<0) + +#define DRR_IS_DEDUP_CAPABLE(flags) ((flags) & DRR_CHECKSUM_DEDUP) + +/* deal with compressed drr_write replay records */ +#define DRR_WRITE_COMPRESSED(drrw) ((drrw)->drr_compressiontype != 0) +#define DRR_WRITE_PAYLOAD_SIZE(drrw) \ + (DRR_WRITE_COMPRESSED(drrw) ? (drrw)->drr_compressed_size : \ + (drrw)->drr_logical_size) + +/* + * zfs ioctl command structure + */ +typedef struct dmu_replay_record { + enum { + DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS, + DRR_WRITE, DRR_FREE, DRR_END, DRR_WRITE_BYREF, + DRR_SPILL, DRR_WRITE_EMBEDDED, DRR_NUMTYPES + } drr_type; + uint32_t drr_payloadlen; + union { + struct drr_begin { + uint64_t drr_magic; + uint64_t drr_versioninfo; /* was drr_version */ + uint64_t drr_creation_time; + dmu_objset_type_t drr_type; + uint32_t drr_flags; + uint64_t drr_toguid; + uint64_t drr_fromguid; + char drr_toname[MAXNAMELEN]; + } drr_begin; + struct drr_end { + zio_cksum_t drr_checksum; + uint64_t drr_toguid; + } drr_end; + struct drr_object { + uint64_t drr_object; + dmu_object_type_t drr_type; + dmu_object_type_t drr_bonustype; + uint32_t drr_blksz; + uint32_t drr_bonuslen; + uint8_t drr_checksumtype; + uint8_t drr_compress; + uint8_t drr_dn_slots; + uint8_t drr_pad[5]; + uint64_t drr_toguid; + /* bonus content follows */ + } drr_object; + struct drr_freeobjects { + uint64_t drr_firstobj; + uint64_t drr_numobjs; + uint64_t drr_toguid; + } drr_freeobjects; + struct drr_write { + uint64_t drr_object; + dmu_object_type_t drr_type; + uint32_t drr_pad; + uint64_t drr_offset; + uint64_t drr_logical_size; + uint64_t drr_toguid; + uint8_t drr_checksumtype; + uint8_t drr_checksumflags; + uint8_t drr_compressiontype; + uint8_t drr_pad2[5]; + /* deduplication key */ + ddt_key_t drr_key; + /* only nonzero if drr_compressiontype is not 0 */ + uint64_t drr_compressed_size; + /* content follows */ + } drr_write; + struct drr_free { + uint64_t drr_object; + uint64_t drr_offset; + uint64_t drr_length; + uint64_t drr_toguid; + } drr_free; + struct drr_write_byref { + /* where to put the data */ + uint64_t drr_object; + uint64_t drr_offset; + uint64_t drr_length; + uint64_t drr_toguid; + /* where to find the prior copy of the data */ + uint64_t drr_refguid; + uint64_t drr_refobject; + uint64_t drr_refoffset; + /* properties of the data */ + uint8_t drr_checksumtype; + uint8_t drr_checksumflags; + uint8_t drr_pad2[6]; + ddt_key_t drr_key; /* deduplication key */ + } drr_write_byref; + struct drr_spill { + uint64_t drr_object; + uint64_t drr_length; + uint64_t drr_toguid; + uint64_t drr_pad[4]; /* needed for crypto */ + /* spill data follows */ + } drr_spill; + struct drr_write_embedded { + uint64_t drr_object; + uint64_t drr_offset; + /* logical length, should equal blocksize */ + uint64_t drr_length; + uint64_t drr_toguid; + uint8_t drr_compression; + uint8_t drr_etype; + uint8_t drr_pad[6]; + uint32_t drr_lsize; /* uncompressed size of payload */ + uint32_t drr_psize; /* compr. (real) size of payload */ + /* (possibly compressed) content follows */ + } drr_write_embedded; + + /* + * Nore: drr_checksum is overlaid with all record types + * except DRR_BEGIN. Therefore its (non-pad) members + * must not overlap with members from the other structs. + * We accomplish this by putting its members at the very + * end of the struct. + */ + struct drr_checksum { + uint64_t drr_pad[34]; + /* + * fletcher-4 checksum of everything preceding the + * checksum. + */ + zio_cksum_t drr_checksum; + } drr_checksum; + } drr_u; +} dmu_replay_record_t; + +/* diff record range types */ +typedef enum diff_type { + DDR_NONE = 0x1, + DDR_INUSE = 0x2, + DDR_FREE = 0x4 +} diff_type_t; + +/* + * The diff reports back ranges of free or in-use objects. + */ +typedef struct dmu_diff_record { + uint64_t ddr_type; + uint64_t ddr_first; + uint64_t ddr_last; +} dmu_diff_record_t; + +typedef struct zinject_record { + uint64_t zi_objset; + uint64_t zi_object; + uint64_t zi_start; + uint64_t zi_end; + uint64_t zi_guid; + uint32_t zi_level; + uint32_t zi_error; + uint64_t zi_type; + uint32_t zi_freq; + uint32_t zi_failfast; + char zi_func[MAXNAMELEN]; + uint32_t zi_iotype; + int32_t zi_duration; + uint64_t zi_timer; + uint64_t zi_nlanes; + uint32_t zi_cmd; + uint32_t zi_pad; +} zinject_record_t; + +#define ZINJECT_NULL 0x1 +#define ZINJECT_FLUSH_ARC 0x2 +#define ZINJECT_UNLOAD_SPA 0x4 + +#define ZEVENT_NONE 0x0 +#define ZEVENT_NONBLOCK 0x1 +#define ZEVENT_SIZE 1024 + +#define ZEVENT_SEEK_START 0 +#define ZEVENT_SEEK_END UINT64_MAX + +/* scaled frequency ranges */ +#define ZI_PERCENTAGE_MIN 4294UL +#define ZI_PERCENTAGE_MAX UINT32_MAX + +typedef enum zinject_type { + ZINJECT_UNINITIALIZED, + ZINJECT_DATA_FAULT, + ZINJECT_DEVICE_FAULT, + ZINJECT_LABEL_FAULT, + ZINJECT_IGNORED_WRITES, + ZINJECT_PANIC, + ZINJECT_DELAY_IO, +} zinject_type_t; + +typedef struct zfs_share { + uint64_t z_exportdata; + uint64_t z_sharedata; + uint64_t z_sharetype; /* 0 = share, 1 = unshare */ + uint64_t z_sharemax; /* max length of share string */ +} zfs_share_t; + +/* + * ZFS file systems may behave the usual, POSIX-compliant way, where + * name lookups are case-sensitive. They may also be set up so that + * all the name lookups are case-insensitive, or so that only some + * lookups, the ones that set an FIGNORECASE flag, are case-insensitive. + */ +typedef enum zfs_case { + ZFS_CASE_SENSITIVE, + ZFS_CASE_INSENSITIVE, + ZFS_CASE_MIXED +} zfs_case_t; + +/* + * Note: this struct must have the same layout in 32-bit and 64-bit, so + * that 32-bit processes (like /sbin/zfs) can pass it to the 64-bit + * kernel. Therefore, we add padding to it so that no "hidden" padding + * is automatically added on 64-bit (but not on 32-bit). + */ +typedef struct zfs_cmd { + char zc_name[MAXPATHLEN]; /* name of pool or dataset */ + uint64_t zc_nvlist_src; /* really (char *) */ + uint64_t zc_nvlist_src_size; + uint64_t zc_nvlist_dst; /* really (char *) */ + uint64_t zc_nvlist_dst_size; + boolean_t zc_nvlist_dst_filled; /* put an nvlist in dst? */ + int zc_pad2; + + /* + * The following members are for legacy ioctls which haven't been + * converted to the new method. + */ + uint64_t zc_history; /* really (char *) */ + char zc_value[MAXPATHLEN * 2]; + char zc_string[MAXNAMELEN]; + uint64_t zc_guid; + uint64_t zc_nvlist_conf; /* really (char *) */ + uint64_t zc_nvlist_conf_size; + uint64_t zc_cookie; + uint64_t zc_objset_type; + uint64_t zc_perm_action; + uint64_t zc_history_len; + uint64_t zc_history_offset; + uint64_t zc_obj; + uint64_t zc_iflags; /* internal to zfs(7fs) */ + zfs_share_t zc_share; + dmu_objset_stats_t zc_objset_stats; + struct drr_begin zc_begin_record; + zinject_record_t zc_inject_record; + uint32_t zc_defer_destroy; + uint32_t zc_flags; + uint64_t zc_action_handle; + int zc_cleanup_fd; + uint8_t zc_simple; + uint8_t zc_pad[3]; /* alignment */ + uint64_t zc_sendobj; + uint64_t zc_fromobj; + uint64_t zc_createtxg; + zfs_stat_t zc_stat; +} zfs_cmd_t; + +typedef struct zfs_useracct { + char zu_domain[256]; + uid_t zu_rid; + uint32_t zu_pad; + uint64_t zu_space; +} zfs_useracct_t; + +#define ZFSDEV_MAX_MINOR (1 << 16) +#define ZFS_MIN_MINOR (ZFSDEV_MAX_MINOR + 1) + +#define ZPOOL_EXPORT_AFTER_SPLIT 0x1 + +#ifdef _KERNEL + +typedef struct zfs_creat { + nvlist_t *zct_zplprops; + nvlist_t *zct_props; +} zfs_creat_t; + +extern int zfs_secpolicy_snapshot_perms(const char *name, cred_t *cr); +extern int zfs_secpolicy_rename_perms(const char *from, + const char *to, cred_t *cr); +extern int zfs_secpolicy_destroy_perms(const char *name, cred_t *cr); +extern int zfs_unmount_snap(const char *); +extern void zfs_destroy_unmount_origin(const char *); + +extern boolean_t dataset_name_hidden(const char *name); + +enum zfsdev_state_type { + ZST_ONEXIT, + ZST_ZEVENT, + ZST_ALL, +}; + +/* + * The zfsdev_state_t structure is managed as a singly-linked list + * from which items are never deleted. This allows for lock-free + * reading of the list so long as assignments to the zs_next and + * reads from zs_minor are performed atomically. Empty items are + * indicated by storing -1 into zs_minor. + */ +typedef struct zfsdev_state { + struct zfsdev_state *zs_next; /* next zfsdev_state_t link */ + struct file *zs_file; /* associated file struct */ + minor_t zs_minor; /* made up minor number */ + void *zs_onexit; /* onexit data */ + void *zs_zevent; /* zevent data */ +} zfsdev_state_t; + +extern void *zfsdev_get_state(minor_t minor, enum zfsdev_state_type which); +extern int zfsdev_getminor(struct file *filp, minor_t *minorp); +extern minor_t zfsdev_minor_alloc(void); + +#endif /* _KERNEL */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZFS_IOCTL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_onexit.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_onexit.h @@ -0,0 +1,66 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_ZFS_ONEXIT_H +#define _SYS_ZFS_ONEXIT_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _KERNEL + +typedef struct zfs_onexit { + kmutex_t zo_lock; + list_t zo_actions; +} zfs_onexit_t; + +typedef struct zfs_onexit_action_node { + list_node_t za_link; + void (*za_func)(void *); + void *za_data; +} zfs_onexit_action_node_t; + +extern void zfs_onexit_init(zfs_onexit_t **zo); +extern void zfs_onexit_destroy(zfs_onexit_t *zo); + +#endif + +extern int zfs_onexit_fd_hold(int fd, minor_t *minorp); +extern void zfs_onexit_fd_rele(int fd); +extern int zfs_onexit_add_cb(minor_t minor, void (*func)(void *), void *data, + uint64_t *action_handle); +extern int zfs_onexit_del_cb(minor_t minor, uint64_t action_handle, + boolean_t fire); +extern int zfs_onexit_cb_data(minor_t minor, uint64_t action_handle, + void **data); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZFS_ONEXIT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_ratelimit.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_ratelimit.h @@ -0,0 +1,38 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2016, Lawrence Livermore National Security, LLC. + */ + +#ifndef _SYS_ZFS_RATELIMIT_H +#define _SYS_ZFS_RATELIMIT_H + +#include + +typedef struct { + hrtime_t start; + unsigned int count; + unsigned int burst; /* Number to allow per interval */ + unsigned int interval; /* Interval length in seconds */ + kmutex_t lock; +} zfs_ratelimit_t; + +int zfs_ratelimit(zfs_ratelimit_t *rl); +void zfs_ratelimit_init(zfs_ratelimit_t *rl, unsigned int burst, + unsigned int interval); +void zfs_ratelimit_fini(zfs_ratelimit_t *rl); + +#endif /* _SYS_ZFS_RATELIMIT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_rlock.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_rlock.h @@ -0,0 +1,117 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_FS_ZFS_RLOCK_H +#define _SYS_FS_ZFS_RLOCK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#ifdef _KERNEL +#include +#else +#include +#endif + +typedef enum { + RL_READER, + RL_WRITER, + RL_APPEND +} rl_type_t; + +typedef struct zfs_rlock { + kmutex_t zr_mutex; /* protects changes to zr_avl */ + avl_tree_t zr_avl; /* avl tree of range locks */ + uint64_t *zr_size; /* points to znode->z_size */ + uint_t *zr_blksz; /* points to znode->z_blksz */ + uint64_t *zr_max_blksz; /* points to zfsvfs->z_max_blksz */ +} zfs_rlock_t; + +typedef struct rl { + zfs_rlock_t *r_zrl; + avl_node_t r_node; /* avl node link */ + uint64_t r_off; /* file range offset */ + uint64_t r_len; /* file range length */ + uint_t r_cnt; /* range reference count in tree */ + rl_type_t r_type; /* range type */ + kcondvar_t r_wr_cv; /* cv for waiting writers */ + kcondvar_t r_rd_cv; /* cv for waiting readers */ + uint8_t r_proxy; /* acting for original range */ + uint8_t r_write_wanted; /* writer wants to lock this range */ + uint8_t r_read_wanted; /* reader wants to lock this range */ + list_node_t rl_node; /* used for deferred release */ +} rl_t; + +/* + * Lock a range (offset, length) as either shared (RL_READER) + * or exclusive (RL_WRITER or RL_APPEND). RL_APPEND is a special type that + * is converted to RL_WRITER that specified to lock from the start of the + * end of file. Returns the range lock structure. + */ +rl_t *zfs_range_lock(zfs_rlock_t *zrl, uint64_t off, uint64_t len, + rl_type_t type); + +/* Unlock range and destroy range lock structure. */ +void zfs_range_unlock(rl_t *rl); + +/* + * Reduce range locked as RW_WRITER from whole file to specified range. + * Asserts the whole file was previously locked. + */ +void zfs_range_reduce(rl_t *rl, uint64_t off, uint64_t len); + +/* + * AVL comparison function used to order range locks + * Locks are ordered on the start offset of the range. + */ +int zfs_range_compare(const void *arg1, const void *arg2); + +static inline void +zfs_rlock_init(zfs_rlock_t *zrl) +{ + mutex_init(&zrl->zr_mutex, NULL, MUTEX_DEFAULT, NULL); + avl_create(&zrl->zr_avl, zfs_range_compare, + sizeof (rl_t), offsetof(rl_t, r_node)); + zrl->zr_size = NULL; + zrl->zr_blksz = NULL; + zrl->zr_max_blksz = NULL; +} + +static inline void +zfs_rlock_destroy(zfs_rlock_t *zrl) +{ + avl_destroy(&zrl->zr_avl); + mutex_destroy(&zrl->zr_mutex); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_RLOCK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_sa.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_sa.h @@ -0,0 +1,150 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_ZFS_SA_H +#define _SYS_ZFS_SA_H + +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include + + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This is the list of known attributes + * to the ZPL. The values of the actual + * attributes are not defined by the order + * the enums. It is controlled by the attribute + * registration mechanism. Two different file system + * could have different numeric values for the same + * attributes. this list is only used for dereferencing + * into the table that will hold the actual numeric value. + */ +typedef enum zpl_attr { + ZPL_ATIME, + ZPL_MTIME, + ZPL_CTIME, + ZPL_CRTIME, + ZPL_GEN, + ZPL_MODE, + ZPL_SIZE, + ZPL_PARENT, + ZPL_LINKS, + ZPL_XATTR, + ZPL_RDEV, + ZPL_FLAGS, + ZPL_UID, + ZPL_GID, + ZPL_PAD, + ZPL_ZNODE_ACL, + ZPL_DACL_COUNT, + ZPL_SYMLINK, + ZPL_SCANSTAMP, + ZPL_DACL_ACES, + ZPL_DXATTR, + ZPL_END +} zpl_attr_t; + +#define ZFS_OLD_ZNODE_PHYS_SIZE 0x108 +#define ZFS_SA_BASE_ATTR_SIZE (ZFS_OLD_ZNODE_PHYS_SIZE - \ + sizeof (zfs_acl_phys_t)) + +#define SA_MODE_OFFSET 0 +#define SA_SIZE_OFFSET 8 +#define SA_GEN_OFFSET 16 +#define SA_UID_OFFSET 24 +#define SA_GID_OFFSET 32 +#define SA_PARENT_OFFSET 40 + +extern sa_attr_reg_t zfs_attr_table[ZPL_END + 1]; +extern sa_attr_reg_t zfs_legacy_attr_table[ZPL_END + 1]; + +/* + * This is a deprecated data structure that only exists for + * dealing with file systems create prior to ZPL version 5. + */ +typedef struct znode_phys { + uint64_t zp_atime[2]; /* 0 - last file access time */ + uint64_t zp_mtime[2]; /* 16 - last file modification time */ + uint64_t zp_ctime[2]; /* 32 - last file change time */ + uint64_t zp_crtime[2]; /* 48 - creation time */ + uint64_t zp_gen; /* 64 - generation (txg of creation) */ + uint64_t zp_mode; /* 72 - file mode bits */ + uint64_t zp_size; /* 80 - size of file */ + uint64_t zp_parent; /* 88 - directory parent (`..') */ + uint64_t zp_links; /* 96 - number of links to file */ + uint64_t zp_xattr; /* 104 - DMU object for xattrs */ + uint64_t zp_rdev; /* 112 - dev_t for VBLK & VCHR files */ + uint64_t zp_flags; /* 120 - persistent flags */ + uint64_t zp_uid; /* 128 - file owner */ + uint64_t zp_gid; /* 136 - owning group */ + uint64_t zp_zap; /* 144 - extra attributes */ + uint64_t zp_pad[3]; /* 152 - future */ + zfs_acl_phys_t zp_acl; /* 176 - 263 ACL */ + /* + * Data may pad out any remaining bytes in the znode buffer, eg: + * + * |<---------------------- dnode_phys (512) ------------------------>| + * |<-- dnode (192) --->|<----------- "bonus" buffer (320) ---------->| + * |<---- znode (264) ---->|<---- data (56) ---->| + * + * At present, we use this space for the following: + * - symbolic links + * - 32-byte anti-virus scanstamp (regular files only) + */ +} znode_phys_t; + +#ifdef _KERNEL + +#define DXATTR_MAX_ENTRY_SIZE (32768) +#define DXATTR_MAX_SA_SIZE (SPA_OLD_MAXBLOCKSIZE >> 1) + +int zfs_sa_readlink(struct znode *, uio_t *); +void zfs_sa_symlink(struct znode *, char *link, int len, dmu_tx_t *); +void zfs_sa_get_scanstamp(struct znode *, xvattr_t *); +void zfs_sa_set_scanstamp(struct znode *, xvattr_t *, dmu_tx_t *); +int zfs_sa_get_xattr(struct znode *); +int zfs_sa_set_xattr(struct znode *); +void zfs_sa_upgrade(struct sa_handle *, dmu_tx_t *); +void zfs_sa_upgrade_txholds(dmu_tx_t *, struct znode *); +void zfs_sa_init(void); +void zfs_sa_fini(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZFS_SA_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_stat.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_stat.h @@ -0,0 +1,56 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_STAT_H +#define _SYS_FS_ZFS_STAT_H + +#ifdef _KERNEL +#include +#include +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A limited number of zpl level stats are retrievable + * with an ioctl. zfs diff is the current consumer. + */ +typedef struct zfs_stat { + uint64_t zs_gen; + uint64_t zs_mode; + uint64_t zs_links; + uint64_t zs_ctime[2]; +} zfs_stat_t; + +extern int zfs_obj_to_stats(objset_t *osp, uint64_t obj, zfs_stat_t *sb, + char *buf, int len); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_STAT_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_vfsops.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_vfsops.h @@ -0,0 +1,223 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_VFSOPS_H +#define _SYS_FS_ZFS_VFSOPS_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct zfsvfs zfsvfs_t; +struct znode; + +/* + * This structure emulates the vfs_t from other platforms. It's purpose + * is to faciliate the handling of mount options and minimize structural + * differences between the platforms. + */ +typedef struct vfs { + struct zfsvfs *vfs_data; + char *vfs_mntpoint; /* Primary mount point */ + uint64_t vfs_xattr; + boolean_t vfs_readonly; + boolean_t vfs_do_readonly; + boolean_t vfs_setuid; + boolean_t vfs_do_setuid; + boolean_t vfs_exec; + boolean_t vfs_do_exec; + boolean_t vfs_devices; + boolean_t vfs_do_devices; + boolean_t vfs_do_xattr; + boolean_t vfs_atime; + boolean_t vfs_do_atime; + boolean_t vfs_relatime; + boolean_t vfs_do_relatime; + boolean_t vfs_nbmand; + boolean_t vfs_do_nbmand; +} vfs_t; + +typedef struct zfs_mnt { + const char *mnt_osname; /* Objset name */ + char *mnt_data; /* Raw mount options */ +} zfs_mnt_t; + +struct zfsvfs { + vfs_t *z_vfs; /* generic fs struct */ + struct super_block *z_sb; /* generic super_block */ + struct zfsvfs *z_parent; /* parent fs */ + objset_t *z_os; /* objset reference */ + uint64_t z_flags; /* super_block flags */ + uint64_t z_root; /* id of root znode */ + uint64_t z_unlinkedobj; /* id of unlinked zapobj */ + uint64_t z_max_blksz; /* maximum block size for files */ + uint64_t z_fuid_obj; /* fuid table object number */ + uint64_t z_fuid_size; /* fuid table size */ + avl_tree_t z_fuid_idx; /* fuid tree keyed by index */ + avl_tree_t z_fuid_domain; /* fuid tree keyed by domain */ + krwlock_t z_fuid_lock; /* fuid lock */ + boolean_t z_fuid_loaded; /* fuid tables are loaded */ + boolean_t z_fuid_dirty; /* need to sync fuid table ? */ + struct zfs_fuid_info *z_fuid_replay; /* fuid info for replay */ + zilog_t *z_log; /* intent log pointer */ + uint_t z_acl_inherit; /* acl inheritance behavior */ + uint_t z_acl_type; /* type of ACL usable on this FS */ + zfs_case_t z_case; /* case-sense */ + boolean_t z_utf8; /* utf8-only */ + int z_norm; /* normalization flags */ + boolean_t z_atime; /* enable atimes mount option */ + boolean_t z_relatime; /* enable relatime mount option */ + boolean_t z_unmounted; /* unmounted */ + rrmlock_t z_teardown_lock; + krwlock_t z_teardown_inactive_lock; + list_t z_all_znodes; /* all znodes in the fs */ + uint64_t z_nr_znodes; /* number of znodes in the fs */ + unsigned long z_rollback_time; /* last online rollback time */ + unsigned long z_snap_defer_time; /* last snapshot unmount deferal */ + kmutex_t z_znodes_lock; /* lock for z_all_znodes */ + arc_prune_t *z_arc_prune; /* called by ARC to prune caches */ + struct inode *z_ctldir; /* .zfs directory inode */ + boolean_t z_show_ctldir; /* expose .zfs in the root dir */ + boolean_t z_issnap; /* true if this is a snapshot */ + boolean_t z_vscan; /* virus scan on/off */ + boolean_t z_use_fuids; /* version allows fuids */ + boolean_t z_replay; /* set during ZIL replay */ + boolean_t z_use_sa; /* version allow system attributes */ + boolean_t z_xattr_sa; /* allow xattrs to be stores as SA */ + uint64_t z_version; /* ZPL version */ + uint64_t z_shares_dir; /* hidden shares dir */ + kmutex_t z_lock; + uint64_t z_userquota_obj; + uint64_t z_groupquota_obj; + uint64_t z_userobjquota_obj; + uint64_t z_groupobjquota_obj; + uint64_t z_replay_eof; /* New end of file - replay only */ + sa_attr_type_t *z_attr_table; /* SA attr mapping->id */ + uint64_t z_hold_size; /* znode hold array size */ + avl_tree_t *z_hold_trees; /* znode hold trees */ + kmutex_t *z_hold_locks; /* znode hold locks */ +}; + +#define ZSB_XATTR 0x0001 /* Enable user xattrs */ + +/* + * Allow a maximum number of links. While ZFS does not internally limit + * this the inode->i_nlink member is defined as an unsigned int. To be + * safe we use 2^31-1 as the limit. + */ +#define ZFS_LINK_MAX ((1U << 31) - 1U) + +/* + * Normal filesystems (those not under .zfs/snapshot) have a total + * file ID size limited to 12 bytes (including the length field) due to + * NFSv2 protocol's limitation of 32 bytes for a filehandle. For historical + * reasons, this same limit is being imposed by the Solaris NFSv3 implementation + * (although the NFSv3 protocol actually permits a maximum of 64 bytes). It + * is not possible to expand beyond 12 bytes without abandoning support + * of NFSv2. + * + * For normal filesystems, we partition up the available space as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * + * We reserve only 48 bits for the object number, as this is the limit + * currently defined and imposed by the DMU. + */ +typedef struct zfid_short { + uint16_t zf_len; + uint8_t zf_object[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_gen[4]; /* gen[i] = gen >> (8 * i) */ +} zfid_short_t; + +/* + * Filesystems under .zfs/snapshot have a total file ID size of 22 bytes + * (including the length field). This makes files under .zfs/snapshot + * accessible by NFSv3 and NFSv4, but not NFSv2. + * + * For files under .zfs/snapshot, we partition up the available space + * as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * 6 bytes objset id (48 bits) + * 4 bytes currently just zero (32 bits) + * + * We reserve only 48 bits for the object number and objset id, as these are + * the limits currently defined and imposed by the DMU. + */ +typedef struct zfid_long { + zfid_short_t z_fid; + uint8_t zf_setid[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_setgen[4]; /* gen[i] = gen >> (8 * i) */ +} zfid_long_t; + +#define SHORT_FID_LEN (sizeof (zfid_short_t) - sizeof (uint16_t)) +#define LONG_FID_LEN (sizeof (zfid_long_t) - sizeof (uint16_t)) + +extern uint_t zfs_fsyncer_key; + +extern int zfs_suspend_fs(zfsvfs_t *zfsvfs); +extern int zfs_resume_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds); +extern int zfs_userspace_one(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + const char *domain, uint64_t rid, uint64_t *valuep); +extern int zfs_userspace_many(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + uint64_t *cookiep, void *vbuf, uint64_t *bufsizep); +extern int zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + const char *domain, uint64_t rid, uint64_t quota); +extern boolean_t zfs_owner_overquota(zfsvfs_t *zfsvfs, struct znode *, + boolean_t isgroup); +extern boolean_t zfs_fuid_overquota(zfsvfs_t *zfsvfs, boolean_t isgroup, + uint64_t fuid); +extern boolean_t zfs_fuid_overobjquota(zfsvfs_t *zfsvfs, boolean_t isgroup, + uint64_t fuid); +extern int zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers); +extern int zfsvfs_create(const char *name, zfsvfs_t **zfvp); +extern void zfsvfs_free(zfsvfs_t *zfsvfs); +extern int zfs_check_global_label(const char *dsname, const char *hexsl); + +extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs); +extern int zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent); +extern void zfs_preumount(struct super_block *sb); +extern int zfs_umount(struct super_block *sb); +extern int zfs_remount(struct super_block *sb, int *flags, zfs_mnt_t *zm); +extern int zfs_statvfs(struct dentry *dentry, struct kstatfs *statp); +extern int zfs_vget(struct super_block *sb, struct inode **ipp, fid_t *fidp); +extern int zfs_prune(struct super_block *sb, unsigned long nr_to_scan, + int *objects); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_VFSOPS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_vnops.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_vnops.h @@ -0,0 +1,89 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_VNOPS_H +#define _SYS_FS_ZFS_VNOPS_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern int zfs_open(struct inode *ip, int mode, int flag, cred_t *cr); +extern int zfs_close(struct inode *ip, int flag, cred_t *cr); +extern int zfs_holey(struct inode *ip, int cmd, loff_t *off); +extern int zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr); +extern int zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr); +extern int zfs_access(struct inode *ip, int mode, int flag, cred_t *cr); +extern int zfs_lookup(struct inode *dip, char *nm, struct inode **ipp, + int flags, cred_t *cr, int *direntflags, pathname_t *realpnp); +extern int zfs_create(struct inode *dip, char *name, vattr_t *vap, int excl, + int mode, struct inode **ipp, cred_t *cr, int flag, vsecattr_t *vsecp); +extern int zfs_tmpfile(struct inode *dip, vattr_t *vap, int excl, + int mode, struct inode **ipp, cred_t *cr, int flag, vsecattr_t *vsecp); +extern int zfs_remove(struct inode *dip, char *name, cred_t *cr, int flags); +extern int zfs_mkdir(struct inode *dip, char *dirname, vattr_t *vap, + struct inode **ipp, cred_t *cr, int flags, vsecattr_t *vsecp); +extern int zfs_rmdir(struct inode *dip, char *name, struct inode *cwd, + cred_t *cr, int flags); +extern int zfs_readdir(struct inode *ip, struct dir_context *ctx, cred_t *cr); +extern int zfs_fsync(struct inode *ip, int syncflag, cred_t *cr); +extern int zfs_getattr(struct inode *ip, vattr_t *vap, int flag, cred_t *cr); +extern int zfs_getattr_fast(struct inode *ip, struct kstat *sp); +extern int zfs_setattr(struct inode *ip, vattr_t *vap, int flag, cred_t *cr); +extern int zfs_rename(struct inode *sdip, char *snm, struct inode *tdip, + char *tnm, cred_t *cr, int flags); +extern int zfs_symlink(struct inode *dip, char *name, vattr_t *vap, + char *link, struct inode **ipp, cred_t *cr, int flags); +extern int zfs_readlink(struct inode *ip, uio_t *uio, cred_t *cr); +extern int zfs_link(struct inode *tdip, struct inode *sip, + char *name, cred_t *cr, int flags); +extern void zfs_inactive(struct inode *ip); +extern int zfs_space(struct inode *ip, int cmd, flock64_t *bfp, int flag, + offset_t offset, cred_t *cr); +extern int zfs_fid(struct inode *ip, fid_t *fidp); +extern int zfs_getsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, + cred_t *cr); +extern int zfs_setsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, + cred_t *cr); +extern int zfs_getpage(struct inode *ip, struct page *pl[], int nr_pages); +extern int zfs_putpage(struct inode *ip, struct page *pp, + struct writeback_control *wbc); +extern int zfs_dirty_inode(struct inode *ip, int flags); +extern int zfs_map(struct inode *ip, offset_t off, caddr_t *addrp, + size_t len, unsigned long vm_flags); +extern void zfs_iput_async(struct inode *ip); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_VNOPS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zfs_znode.h +++ linux-aws-4.15.0/zfs/include/sys/zfs_znode.h @@ -0,0 +1,366 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_ZNODE_H +#define _SYS_FS_ZFS_ZNODE_H + +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Additional file level attributes, that are stored + * in the upper half of zp_flags + */ +#define ZFS_READONLY 0x0000000100000000ull +#define ZFS_HIDDEN 0x0000000200000000ull +#define ZFS_SYSTEM 0x0000000400000000ull +#define ZFS_ARCHIVE 0x0000000800000000ull +#define ZFS_IMMUTABLE 0x0000001000000000ull +#define ZFS_NOUNLINK 0x0000002000000000ull +#define ZFS_APPENDONLY 0x0000004000000000ull +#define ZFS_NODUMP 0x0000008000000000ull +#define ZFS_OPAQUE 0x0000010000000000ull +#define ZFS_AV_QUARANTINED 0x0000020000000000ull +#define ZFS_AV_MODIFIED 0x0000040000000000ull +#define ZFS_REPARSE 0x0000080000000000ull +#define ZFS_OFFLINE 0x0000100000000000ull +#define ZFS_SPARSE 0x0000200000000000ull + +#define ZFS_ATTR_SET(zp, attr, value, pflags, tx) \ +{ \ + if (value) \ + pflags |= attr; \ + else \ + pflags &= ~attr; \ + VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(ZTOZSB(zp)), \ + &pflags, sizeof (pflags), tx)); \ +} + +/* + * Define special zfs pflags + */ +#define ZFS_XATTR 0x1 /* is an extended attribute */ +#define ZFS_INHERIT_ACE 0x2 /* ace has inheritable ACEs */ +#define ZFS_ACL_TRIVIAL 0x4 /* files ACL is trivial */ +#define ZFS_ACL_OBJ_ACE 0x8 /* ACL has CMPLX Object ACE */ +#define ZFS_ACL_PROTECTED 0x10 /* ACL protected */ +#define ZFS_ACL_DEFAULTED 0x20 /* ACL should be defaulted */ +#define ZFS_ACL_AUTO_INHERIT 0x40 /* ACL should be inherited */ +#define ZFS_BONUS_SCANSTAMP 0x80 /* Scanstamp in bonus area */ +#define ZFS_NO_EXECS_DENIED 0x100 /* exec was given to everyone */ + +#define SA_ZPL_ATIME(z) z->z_attr_table[ZPL_ATIME] +#define SA_ZPL_MTIME(z) z->z_attr_table[ZPL_MTIME] +#define SA_ZPL_CTIME(z) z->z_attr_table[ZPL_CTIME] +#define SA_ZPL_CRTIME(z) z->z_attr_table[ZPL_CRTIME] +#define SA_ZPL_GEN(z) z->z_attr_table[ZPL_GEN] +#define SA_ZPL_DACL_ACES(z) z->z_attr_table[ZPL_DACL_ACES] +#define SA_ZPL_XATTR(z) z->z_attr_table[ZPL_XATTR] +#define SA_ZPL_SYMLINK(z) z->z_attr_table[ZPL_SYMLINK] +#define SA_ZPL_RDEV(z) z->z_attr_table[ZPL_RDEV] +#define SA_ZPL_SCANSTAMP(z) z->z_attr_table[ZPL_SCANSTAMP] +#define SA_ZPL_UID(z) z->z_attr_table[ZPL_UID] +#define SA_ZPL_GID(z) z->z_attr_table[ZPL_GID] +#define SA_ZPL_PARENT(z) z->z_attr_table[ZPL_PARENT] +#define SA_ZPL_LINKS(z) z->z_attr_table[ZPL_LINKS] +#define SA_ZPL_MODE(z) z->z_attr_table[ZPL_MODE] +#define SA_ZPL_DACL_COUNT(z) z->z_attr_table[ZPL_DACL_COUNT] +#define SA_ZPL_FLAGS(z) z->z_attr_table[ZPL_FLAGS] +#define SA_ZPL_SIZE(z) z->z_attr_table[ZPL_SIZE] +#define SA_ZPL_ZNODE_ACL(z) z->z_attr_table[ZPL_ZNODE_ACL] +#define SA_ZPL_DXATTR(z) z->z_attr_table[ZPL_DXATTR] +#define SA_ZPL_PAD(z) z->z_attr_table[ZPL_PAD] + +/* + * Is ID ephemeral? + */ +#define IS_EPHEMERAL(x) (x > MAXUID) + +/* + * Should we use FUIDs? + */ +#define USE_FUIDS(version, os) (version >= ZPL_VERSION_FUID && \ + spa_version(dmu_objset_spa(os)) >= SPA_VERSION_FUID) +#define USE_SA(version, os) (version >= ZPL_VERSION_SA && \ + spa_version(dmu_objset_spa(os)) >= SPA_VERSION_SA) + +#define MASTER_NODE_OBJ 1 + +/* + * Special attributes for master node. + * "userquota@" and "groupquota@" are also valid (from + * zfs_userquota_prop_prefixes[]). + */ +#define ZFS_FSID "FSID" +#define ZFS_UNLINKED_SET "DELETE_QUEUE" +#define ZFS_ROOT_OBJ "ROOT" +#define ZPL_VERSION_STR "VERSION" +#define ZFS_FUID_TABLES "FUID" +#define ZFS_SHARES_DIR "SHARES" +#define ZFS_SA_ATTRS "SA_ATTRS" + +/* + * Convert mode bits (zp_mode) to BSD-style DT_* values for storing in + * the directory entries. On Linux systems this value is already + * defined correctly as part of the /usr/include/dirent.h header file. + */ +#ifndef IFTODT +#define IFTODT(mode) (((mode) & S_IFMT) >> 12) +#endif + +/* + * The directory entry has the type (currently unused on Solaris) in the + * top 4 bits, and the object number in the low 48 bits. The "middle" + * 12 bits are unused. + */ +#define ZFS_DIRENT_TYPE(de) BF64_GET(de, 60, 4) +#define ZFS_DIRENT_OBJ(de) BF64_GET(de, 0, 48) + +/* + * Directory entry locks control access to directory entries. + * They are used to protect creates, deletes, and renames. + * Each directory znode has a mutex and a list of locked names. + */ +#ifdef _KERNEL +typedef struct zfs_dirlock { + char *dl_name; /* directory entry being locked */ + uint32_t dl_sharecnt; /* 0 if exclusive, > 0 if shared */ + uint8_t dl_namelock; /* 1 if z_name_lock is NOT held */ + uint16_t dl_namesize; /* set if dl_name was allocated */ + kcondvar_t dl_cv; /* wait for entry to be unlocked */ + struct znode *dl_dzp; /* directory znode */ + struct zfs_dirlock *dl_next; /* next in z_dirlocks list */ +} zfs_dirlock_t; + +typedef struct znode { + uint64_t z_id; /* object ID for this znode */ + kmutex_t z_lock; /* znode modification lock */ + krwlock_t z_parent_lock; /* parent lock for directories */ + krwlock_t z_name_lock; /* "master" lock for dirent locks */ + zfs_dirlock_t *z_dirlocks; /* directory entry lock list */ + zfs_rlock_t z_range_lock; /* file range lock */ + uint8_t z_unlinked; /* file has been unlinked */ + uint8_t z_atime_dirty; /* atime needs to be synced */ + uint8_t z_zn_prefetch; /* Prefetch znodes? */ + uint8_t z_moved; /* Has this znode been moved? */ + uint_t z_blksz; /* block size in bytes */ + uint_t z_seq; /* modification sequence number */ + uint64_t z_mapcnt; /* number of pages mapped to file */ + uint64_t z_dnodesize; /* dnode size */ + uint64_t z_size; /* file size (cached) */ + uint64_t z_pflags; /* pflags (cached) */ + uint32_t z_sync_cnt; /* synchronous open count */ + mode_t z_mode; /* mode (cached) */ + kmutex_t z_acl_lock; /* acl data lock */ + zfs_acl_t *z_acl_cached; /* cached acl */ + krwlock_t z_xattr_lock; /* xattr data lock */ + nvlist_t *z_xattr_cached; /* cached xattrs */ + uint64_t z_xattr_parent; /* parent obj for this xattr */ + list_node_t z_link_node; /* all znodes in fs link */ + sa_handle_t *z_sa_hdl; /* handle to sa data */ + boolean_t z_is_sa; /* are we native sa? */ + boolean_t z_is_mapped; /* are we mmap'ed */ + boolean_t z_is_ctldir; /* are we .zfs entry */ + boolean_t z_is_stale; /* are we stale due to rollback? */ + struct inode z_inode; /* generic vfs inode */ +} znode_t; + +typedef struct znode_hold { + uint64_t zh_obj; /* object id */ + kmutex_t zh_lock; /* lock serializing object access */ + avl_node_t zh_node; /* avl tree linkage */ + refcount_t zh_refcount; /* active consumer reference count */ +} znode_hold_t; + +/* + * Range locking rules + * -------------------- + * 1. When truncating a file (zfs_create, zfs_setattr, zfs_space) the whole + * file range needs to be locked as RL_WRITER. Only then can the pages be + * freed etc and zp_size reset. zp_size must be set within range lock. + * 2. For writes and punching holes (zfs_write & zfs_space) just the range + * being written or freed needs to be locked as RL_WRITER. + * Multiple writes at the end of the file must coordinate zp_size updates + * to ensure data isn't lost. A compare and swap loop is currently used + * to ensure the file size is at least the offset last written. + * 3. For reads (zfs_read, zfs_get_data & zfs_putapage) just the range being + * read needs to be locked as RL_READER. A check against zp_size can then + * be made for reading beyond end of file. + */ + +/* + * Convert between znode pointers and inode pointers + */ +#define ZTOI(znode) (&((znode)->z_inode)) +#define ITOZ(inode) (container_of((inode), znode_t, z_inode)) +#define ZTOZSB(znode) ((zfsvfs_t *)(ZTOI(znode)->i_sb->s_fs_info)) +#define ITOZSB(inode) ((zfsvfs_t *)((inode)->i_sb->s_fs_info)) + +#define S_ISDEV(mode) (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode)) + +/* Called on entry to each ZFS vnode and vfs operation */ +#define ZFS_ENTER(zfsvfs) \ + { \ + rrm_enter_read(&(zfsvfs)->z_teardown_lock, FTAG); \ + if ((zfsvfs)->z_unmounted) { \ + ZFS_EXIT(zfsvfs); \ + return (EIO); \ + } \ + } + +/* Must be called before exiting the vop */ +#define ZFS_EXIT(zfsvfs) \ + { \ + rrm_exit(&(zfsvfs)->z_teardown_lock, FTAG); \ + } + +/* Verifies the znode is valid */ +#define ZFS_VERIFY_ZP(zp) \ + if ((zp)->z_sa_hdl == NULL) { \ + ZFS_EXIT(ZTOZSB(zp)); \ + return (EIO); \ + } + +/* + * Macros for dealing with dmu_buf_hold + */ +#define ZFS_OBJ_MTX_SZ 64 +#define ZFS_OBJ_MTX_MAX (1024 * 1024) +#define ZFS_OBJ_HASH(zfsvfs, obj) ((obj) & ((zfsvfs->z_hold_size) - 1)) + +extern unsigned int zfs_object_mutex_size; + +/* Encode ZFS stored time values from a struct timespec */ +#define ZFS_TIME_ENCODE(tp, stmp) \ +{ \ + (stmp)[0] = (uint64_t)(tp)->tv_sec; \ + (stmp)[1] = (uint64_t)(tp)->tv_nsec; \ +} + +/* Decode ZFS stored time values to a struct timespec */ +#define ZFS_TIME_DECODE(tp, stmp) \ +{ \ + (tp)->tv_sec = (time_t)(stmp)[0]; \ + (tp)->tv_nsec = (long)(stmp)[1]; \ +} + +/* + * Timestamp defines + */ +#define ACCESSED (ATTR_ATIME) +#define STATE_CHANGED (ATTR_CTIME) +#define CONTENT_MODIFIED (ATTR_MTIME | ATTR_CTIME) + +extern int zfs_init_fs(zfsvfs_t *, znode_t **); +extern void zfs_set_dataprop(objset_t *); +extern void zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *, + dmu_tx_t *tx); +extern void zfs_tstamp_update_setup(znode_t *, uint_t, uint64_t [2], + uint64_t [2]); +extern void zfs_grow_blocksize(znode_t *, uint64_t, dmu_tx_t *); +extern int zfs_freesp(znode_t *, uint64_t, uint64_t, int, boolean_t); +extern void zfs_znode_init(void); +extern void zfs_znode_fini(void); +extern int zfs_znode_hold_compare(const void *, const void *); +extern int zfs_zget(zfsvfs_t *, uint64_t, znode_t **); +extern int zfs_rezget(znode_t *); +extern void zfs_zinactive(znode_t *); +extern void zfs_znode_delete(znode_t *, dmu_tx_t *); +extern void zfs_remove_op_tables(void); +extern int zfs_create_op_tables(void); +extern int zfs_sync(struct super_block *, int, cred_t *); +extern dev_t zfs_cmpldev(uint64_t); +extern int zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value); +extern int zfs_get_stats(objset_t *os, nvlist_t *nv); +extern boolean_t zfs_get_vfs_flag_unmounted(objset_t *os); +extern void zfs_znode_dmu_fini(znode_t *); +extern int zfs_inode_alloc(struct super_block *, struct inode **ip); +extern void zfs_inode_destroy(struct inode *); +extern void zfs_inode_update(znode_t *); +extern void zfs_mark_inode_dirty(struct inode *); + +extern void zfs_log_create(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name, vsecattr_t *, zfs_fuid_info_t *, + vattr_t *vap); +extern int zfs_log_create_txtype(zil_create_t, vsecattr_t *vsecp, + vattr_t *vap); +extern void zfs_log_remove(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, char *name, uint64_t foid); +#define ZFS_NO_OBJECT 0 /* no object id */ +extern void zfs_log_link(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name); +extern void zfs_log_symlink(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name, char *link); +extern void zfs_log_rename(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *sdzp, char *sname, znode_t *tdzp, char *dname, znode_t *szp); +extern void zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, offset_t off, ssize_t len, int ioflag, + zil_callback_t callback, void *callback_data); +extern void zfs_log_truncate(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, uint64_t off, uint64_t len); +extern void zfs_log_setattr(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, vattr_t *vap, uint_t mask_applied, zfs_fuid_info_t *fuidp); +extern void zfs_log_acl(zilog_t *zilog, dmu_tx_t *tx, znode_t *zp, + vsecattr_t *vsecp, zfs_fuid_info_t *fuidp); +extern void zfs_xvattr_set(znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx); +extern void zfs_upgrade(zfsvfs_t *zfsvfs, dmu_tx_t *tx); +extern int zfs_create_share_dir(zfsvfs_t *zfsvfs, dmu_tx_t *tx); + +#if defined(HAVE_UIO_RW) +extern caddr_t zfs_map_page(page_t *, enum seg_rw); +extern void zfs_unmap_page(page_t *, caddr_t); +#endif /* HAVE_UIO_RW */ + +extern zil_get_data_t zfs_get_data; +extern zil_replay_func_t zfs_replay_vector[TX_MAX_TYPE]; +extern int zfsfstype; + +#endif /* _KERNEL */ + +extern int zfs_obj_to_path(objset_t *osp, uint64_t obj, char *buf, int len); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_ZNODE_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zil.h +++ linux-aws-4.15.0/zfs/include/sys/zil.h @@ -0,0 +1,517 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#ifndef _SYS_ZIL_H +#define _SYS_ZIL_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dsl_pool; +struct dsl_dataset; + +/* + * Intent log format: + * + * Each objset has its own intent log. The log header (zil_header_t) + * for objset N's intent log is kept in the Nth object of the SPA's + * intent_log objset. The log header points to a chain of log blocks, + * each of which contains log records (i.e., transactions) followed by + * a log block trailer (zil_trailer_t). The format of a log record + * depends on the record (or transaction) type, but all records begin + * with a common structure that defines the type, length, and txg. + */ + +/* + * Intent log header - this on disk structure holds fields to manage + * the log. All fields are 64 bit to easily handle cross architectures. + */ +typedef struct zil_header { + uint64_t zh_claim_txg; /* txg in which log blocks were claimed */ + uint64_t zh_replay_seq; /* highest replayed sequence number */ + blkptr_t zh_log; /* log chain */ + uint64_t zh_claim_blk_seq; /* highest claimed block sequence number */ + uint64_t zh_flags; /* header flags */ + uint64_t zh_claim_lr_seq; /* highest claimed lr sequence number */ + uint64_t zh_pad[3]; +} zil_header_t; + +/* + * zh_flags bit settings + */ +#define ZIL_REPLAY_NEEDED 0x1 /* replay needed - internal only */ +#define ZIL_CLAIM_LR_SEQ_VALID 0x2 /* zh_claim_lr_seq field is valid */ + +/* + * Log block chaining. + * + * Log blocks are chained together. Originally they were chained at the + * end of the block. For performance reasons the chain was moved to the + * beginning of the block which allows writes for only the data being used. + * The older position is supported for backwards compatability. + * + * The zio_eck_t contains a zec_cksum which for the intent log is + * the sequence number of this log block. A seq of 0 is invalid. + * The zec_cksum is checked by the SPA against the sequence + * number passed in the blk_cksum field of the blkptr_t + */ +typedef struct zil_chain { + uint64_t zc_pad; + blkptr_t zc_next_blk; /* next block in chain */ + uint64_t zc_nused; /* bytes in log block used */ + zio_eck_t zc_eck; /* block trailer */ +} zil_chain_t; + +#define ZIL_MIN_BLKSZ 4096ULL + +/* + * ziltest is by and large an ugly hack, but very useful in + * checking replay without tedious work. + * When running ziltest we want to keep all itx's and so maintain + * a single list in the zl_itxg[] that uses a high txg: ZILTEST_TXG + * We subtract TXG_CONCURRENT_STATES to allow for common code. + */ +#define ZILTEST_TXG (UINT64_MAX - TXG_CONCURRENT_STATES) + +/* + * The words of a log block checksum. + */ +#define ZIL_ZC_GUID_0 0 +#define ZIL_ZC_GUID_1 1 +#define ZIL_ZC_OBJSET 2 +#define ZIL_ZC_SEQ 3 + +typedef enum zil_create { + Z_FILE, + Z_DIR, + Z_XATTRDIR, +} zil_create_t; + +/* + * size of xvattr log section. + * its composed of lr_attr_t + xvattr bitmap + 2 64 bit timestamps + * for create time and a single 64 bit integer for all of the attributes, + * and 4 64 bit integers (32 bytes) for the scanstamp. + * + */ + +#define ZIL_XVAT_SIZE(mapsize) \ + sizeof (lr_attr_t) + (sizeof (uint32_t) * (mapsize - 1)) + \ + (sizeof (uint64_t) * 7) + +/* + * Size of ACL in log. The ACE data is padded out to properly align + * on 8 byte boundary. + */ + +#define ZIL_ACE_LENGTH(x) (roundup(x, sizeof (uint64_t))) + +/* + * Intent log transaction types and record structures + */ +#define TX_CREATE 1 /* Create file */ +#define TX_MKDIR 2 /* Make directory */ +#define TX_MKXATTR 3 /* Make XATTR directory */ +#define TX_SYMLINK 4 /* Create symbolic link to a file */ +#define TX_REMOVE 5 /* Remove file */ +#define TX_RMDIR 6 /* Remove directory */ +#define TX_LINK 7 /* Create hard link to a file */ +#define TX_RENAME 8 /* Rename a file */ +#define TX_WRITE 9 /* File write */ +#define TX_TRUNCATE 10 /* Truncate a file */ +#define TX_SETATTR 11 /* Set file attributes */ +#define TX_ACL_V0 12 /* Set old formatted ACL */ +#define TX_ACL 13 /* Set ACL */ +#define TX_CREATE_ACL 14 /* create with ACL */ +#define TX_CREATE_ATTR 15 /* create + attrs */ +#define TX_CREATE_ACL_ATTR 16 /* create with ACL + attrs */ +#define TX_MKDIR_ACL 17 /* mkdir with ACL */ +#define TX_MKDIR_ATTR 18 /* mkdir with attr */ +#define TX_MKDIR_ACL_ATTR 19 /* mkdir with ACL + attrs */ +#define TX_WRITE2 20 /* dmu_sync EALREADY write */ +#define TX_MAX_TYPE 21 /* Max transaction type */ + +/* + * The transactions for mkdir, symlink, remove, rmdir, link, and rename + * may have the following bit set, indicating the original request + * specified case-insensitive handling of names. + */ +#define TX_CI ((uint64_t)0x1 << 63) /* case-insensitive behavior requested */ + +/* + * Transactions for write, truncate, setattr, acl_v0, and acl can be logged + * out of order. For convenience in the code, all such records must have + * lr_foid at the same offset. + */ +#define TX_OOO(txtype) \ + ((txtype) == TX_WRITE || \ + (txtype) == TX_TRUNCATE || \ + (txtype) == TX_SETATTR || \ + (txtype) == TX_ACL_V0 || \ + (txtype) == TX_ACL || \ + (txtype) == TX_WRITE2) + +/* + * The number of dnode slots consumed by the object is stored in the 8 + * unused upper bits of the object ID. We subtract 1 from the value + * stored on disk for compatibility with implementations that don't + * support large dnodes. The slot count for a single-slot dnode will + * contain 0 for those bits to preserve the log record format for + * "small" dnodes. + */ +#define LR_FOID_GET_SLOTS(oid) (BF64_GET((oid), 56, 8) + 1) +#define LR_FOID_SET_SLOTS(oid, x) BF64_SET((oid), 56, 8, (x) - 1) +#define LR_FOID_GET_OBJ(oid) BF64_GET((oid), 0, DN_MAX_OBJECT_SHIFT) +#define LR_FOID_SET_OBJ(oid, x) BF64_SET((oid), 0, DN_MAX_OBJECT_SHIFT, (x)) + +/* + * Format of log records. + * The fields are carefully defined to allow them to be aligned + * and sized the same on sparc & intel architectures. + * Each log record has a common structure at the beginning. + * + * The log record on disk (lrc_seq) holds the sequence number of all log + * records which is used to ensure we don't replay the same record. + */ +typedef struct { /* common log record header */ + uint64_t lrc_txtype; /* intent log transaction type */ + uint64_t lrc_reclen; /* transaction record length */ + uint64_t lrc_txg; /* dmu transaction group number */ + uint64_t lrc_seq; /* see comment above */ +} lr_t; + +/* + * Common start of all out-of-order record types (TX_OOO() above). + */ +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* object id */ +} lr_ooo_t; + +/* + * Handle option extended vattr attributes. + * + * Whenever new attributes are added the version number + * will need to be updated as will code in + * zfs_log.c and zfs_replay.c + */ +typedef struct { + uint32_t lr_attr_masksize; /* number of elements in array */ + uint32_t lr_attr_bitmap; /* First entry of array */ + /* remainder of array and any additional fields */ +} lr_attr_t; + +/* + * log record for creates without optional ACL. + * This log record does support optional xvattr_t attributes. + */ +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_doid; /* object id of directory */ + uint64_t lr_foid; /* object id of created file object */ + uint64_t lr_mode; /* mode of object */ + uint64_t lr_uid; /* uid of object */ + uint64_t lr_gid; /* gid of object */ + uint64_t lr_gen; /* generation (txg of creation) */ + uint64_t lr_crtime[2]; /* creation time */ + uint64_t lr_rdev; /* rdev of object to create */ + /* name of object to create follows this */ + /* for symlinks, link content follows name */ + /* for creates with xvattr data, the name follows the xvattr info */ +} lr_create_t; + +/* + * FUID ACL record will be an array of ACEs from the original ACL. + * If this array includes ephemeral IDs, the record will also include + * an array of log-specific FUIDs to replace the ephemeral IDs. + * Only one copy of each unique domain will be present, so the log-specific + * FUIDs will use an index into a compressed domain table. On replay this + * information will be used to construct real FUIDs (and bypass idmap, + * since it may not be available). + */ + +/* + * Log record for creates with optional ACL + * This log record is also used for recording any FUID + * information needed for replaying the create. If the + * file doesn't have any actual ACEs then the lr_aclcnt + * would be zero. + * + * After lr_acl_flags, there are a lr_acl_bytes number of variable sized ace's. + * If create is also setting xvattr's, then acl data follows xvattr. + * If ACE FUIDs are needed then they will follow the xvattr_t. Following + * the FUIDs will be the domain table information. The FUIDs for the owner + * and group will be in lr_create. Name follows ACL data. + */ +typedef struct { + lr_create_t lr_create; /* common create portion */ + uint64_t lr_aclcnt; /* number of ACEs in ACL */ + uint64_t lr_domcnt; /* number of unique domains */ + uint64_t lr_fuidcnt; /* number of real fuids */ + uint64_t lr_acl_bytes; /* number of bytes in ACL */ + uint64_t lr_acl_flags; /* ACL flags */ +} lr_acl_create_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_doid; /* obj id of directory */ + /* name of object to remove follows this */ +} lr_remove_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_doid; /* obj id of directory */ + uint64_t lr_link_obj; /* obj id of link */ + /* name of object to link follows this */ +} lr_link_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_sdoid; /* obj id of source directory */ + uint64_t lr_tdoid; /* obj id of target directory */ + /* 2 strings: names of source and destination follow this */ +} lr_rename_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* file object to write */ + uint64_t lr_offset; /* offset to write to */ + uint64_t lr_length; /* user data length to write */ + uint64_t lr_blkoff; /* no longer used */ + blkptr_t lr_blkptr; /* spa block pointer for replay */ + /* write data will follow for small writes */ +} lr_write_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* object id of file to truncate */ + uint64_t lr_offset; /* offset to truncate from */ + uint64_t lr_length; /* length to truncate */ +} lr_truncate_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* file object to change attributes */ + uint64_t lr_mask; /* mask of attributes to set */ + uint64_t lr_mode; /* mode to set */ + uint64_t lr_uid; /* uid to set */ + uint64_t lr_gid; /* gid to set */ + uint64_t lr_size; /* size to set */ + uint64_t lr_atime[2]; /* access time */ + uint64_t lr_mtime[2]; /* modification time */ + /* optional attribute lr_attr_t may be here */ +} lr_setattr_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* obj id of file */ + uint64_t lr_aclcnt; /* number of acl entries */ + /* lr_aclcnt number of ace_t entries follow this */ +} lr_acl_v0_t; + +typedef struct { + lr_t lr_common; /* common portion of log record */ + uint64_t lr_foid; /* obj id of file */ + uint64_t lr_aclcnt; /* number of ACEs in ACL */ + uint64_t lr_domcnt; /* number of unique domains */ + uint64_t lr_fuidcnt; /* number of real fuids */ + uint64_t lr_acl_bytes; /* number of bytes in ACL */ + uint64_t lr_acl_flags; /* ACL flags */ + /* lr_acl_bytes number of variable sized ace's follows */ +} lr_acl_t; + +/* + * ZIL structure definitions, interface function prototype and globals. + */ + +/* + * Writes are handled in three different ways: + * + * WR_INDIRECT: + * In this mode, if we need to commit the write later, then the block + * is immediately written into the file system (using dmu_sync), + * and a pointer to the block is put into the log record. + * When the txg commits the block is linked in. + * This saves additionally writing the data into the log record. + * There are a few requirements for this to occur: + * - write is greater than zfs/zvol_immediate_write_sz + * - not using slogs (as slogs are assumed to always be faster + * than writing into the main pool) + * - the write occupies only one block + * WR_COPIED: + * If we know we'll immediately be committing the + * transaction (FSYNC or FDSYNC), then we allocate a larger + * log record here for the data and copy the data in. + * WR_NEED_COPY: + * Otherwise we don't allocate a buffer, and *if* we need to + * flush the write later then a buffer is allocated and + * we retrieve the data using the dmu. + */ +typedef enum { + WR_INDIRECT, /* indirect - a large write (dmu_sync() data */ + /* and put blkptr in log, rather than actual data) */ + WR_COPIED, /* immediate - data is copied into lr_write_t */ + WR_NEED_COPY, /* immediate - data needs to be copied if pushed */ + WR_NUM_STATES /* number of states */ +} itx_wr_state_t; + +typedef void (*zil_callback_t)(void *data); + +typedef struct itx { + list_node_t itx_node; /* linkage on zl_itx_list */ + void *itx_private; /* type-specific opaque data */ + itx_wr_state_t itx_wr_state; /* write state */ + uint8_t itx_sync; /* synchronous transaction */ + zil_callback_t itx_callback; /* Called when the itx is persistent */ + void *itx_callback_data; /* User data for the callback */ + size_t itx_size; /* allocated itx structure size */ + uint64_t itx_oid; /* object id */ + lr_t itx_lr; /* common part of log record */ + /* followed by type-specific part of lr_xx_t and its immediate data */ +} itx_t; + +/* + * Used for zil kstat. + */ +typedef struct zil_stats { + /* + * Number of times a ZIL commit (e.g. fsync) has been requested. + */ + kstat_named_t zil_commit_count; + + /* + * Number of times the ZIL has been flushed to stable storage. + * This is less than zil_commit_count when commits are "merged" + * (see the documentation above zil_commit()). + */ + kstat_named_t zil_commit_writer_count; + + /* + * Number of transactions (reads, writes, renames, etc.) + * that have been commited. + */ + kstat_named_t zil_itx_count; + + /* + * See the documentation for itx_wr_state_t above. + * Note that "bytes" accumulates the length of the transactions + * (i.e. data), not the actual log record sizes. + */ + kstat_named_t zil_itx_indirect_count; + kstat_named_t zil_itx_indirect_bytes; + kstat_named_t zil_itx_copied_count; + kstat_named_t zil_itx_copied_bytes; + kstat_named_t zil_itx_needcopy_count; + kstat_named_t zil_itx_needcopy_bytes; + + /* + * Transactions which have been allocated to the "normal" + * (i.e. not slog) storage pool. Note that "bytes" accumulate + * the actual log record sizes - which do not include the actual + * data in case of indirect writes. + */ + kstat_named_t zil_itx_metaslab_normal_count; + kstat_named_t zil_itx_metaslab_normal_bytes; + + /* + * Transactions which have been allocated to the "slog" storage pool. + * If there are no separate log devices, this is the same as the + * "normal" pool. + */ + kstat_named_t zil_itx_metaslab_slog_count; + kstat_named_t zil_itx_metaslab_slog_bytes; +} zil_stats_t; + +extern zil_stats_t zil_stats; + +#define ZIL_STAT_INCR(stat, val) \ + atomic_add_64(&zil_stats.stat.value.ui64, (val)); +#define ZIL_STAT_BUMP(stat) \ + ZIL_STAT_INCR(stat, 1); + +typedef int zil_parse_blk_func_t(zilog_t *zilog, blkptr_t *bp, void *arg, + uint64_t txg); +typedef int zil_parse_lr_func_t(zilog_t *zilog, lr_t *lr, void *arg, + uint64_t txg); +typedef int (*const zil_replay_func_t)(void *, char *, boolean_t); +typedef int zil_get_data_t(void *arg, lr_write_t *lr, char *dbuf, zio_t *zio); + +extern int zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, + zil_parse_lr_func_t *parse_lr_func, void *arg, uint64_t txg); + +extern void zil_init(void); +extern void zil_fini(void); + +extern zilog_t *zil_alloc(objset_t *os, zil_header_t *zh_phys); +extern void zil_free(zilog_t *zilog); + +extern zilog_t *zil_open(objset_t *os, zil_get_data_t *get_data); +extern void zil_close(zilog_t *zilog); + +extern void zil_replay(objset_t *os, void *arg, + zil_replay_func_t replay_func[TX_MAX_TYPE]); +extern boolean_t zil_replaying(zilog_t *zilog, dmu_tx_t *tx); +extern void zil_destroy(zilog_t *zilog, boolean_t keep_first); +extern void zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx); + +extern itx_t *zil_itx_create(uint64_t txtype, size_t lrsize); +extern void zil_itx_destroy(itx_t *itx); +extern void zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx); + +extern void zil_commit(zilog_t *zilog, uint64_t oid); + +extern int zil_vdev_offline(const char *osname, void *txarg); +extern int zil_claim(struct dsl_pool *dp, + struct dsl_dataset *ds, void *txarg); +extern int zil_check_log_chain(struct dsl_pool *dp, + struct dsl_dataset *ds, void *tx); +extern void zil_sync(zilog_t *zilog, dmu_tx_t *tx); +extern void zil_clean(zilog_t *zilog, uint64_t synced_txg); + +extern int zil_suspend(const char *osname, void **cookiep); +extern void zil_resume(void *cookie); + +extern void zil_add_block(zilog_t *zilog, const blkptr_t *bp); +extern int zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp); + +extern void zil_set_sync(zilog_t *zilog, uint64_t syncval); + +extern void zil_set_logbias(zilog_t *zilog, uint64_t slogval); + +extern int zil_replay_disable; + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZIL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zil_impl.h +++ linux-aws-4.15.0/zfs/include/sys/zil_impl.h @@ -0,0 +1,166 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#ifndef _SYS_ZIL_IMPL_H +#define _SYS_ZIL_IMPL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Log write buffer. + */ +typedef struct lwb { + zilog_t *lwb_zilog; /* back pointer to log struct */ + blkptr_t lwb_blk; /* on disk address of this log blk */ + boolean_t lwb_fastwrite; /* is blk marked for fastwrite? */ + boolean_t lwb_slog; /* lwb_blk is on SLOG device */ + int lwb_nused; /* # used bytes in buffer */ + int lwb_sz; /* size of block and buffer */ + char *lwb_buf; /* log write buffer */ + zio_t *lwb_zio; /* zio for this buffer */ + dmu_tx_t *lwb_tx; /* tx for log block allocation */ + uint64_t lwb_max_txg; /* highest txg in this lwb */ + list_node_t lwb_node; /* zilog->zl_lwb_list linkage */ +} lwb_t; + +/* + * Intent log transaction lists + */ +typedef struct itxs { + list_t i_sync_list; /* list of synchronous itxs */ + avl_tree_t i_async_tree; /* tree of foids for async itxs */ +} itxs_t; + +typedef struct itxg { + kmutex_t itxg_lock; /* lock for this structure */ + uint64_t itxg_txg; /* txg for this chain */ + itxs_t *itxg_itxs; /* sync and async itxs */ +} itxg_t; + +/* for async nodes we build up an AVL tree of lists of async itxs per file */ +typedef struct itx_async_node { + uint64_t ia_foid; /* file object id */ + list_t ia_list; /* list of async itxs for this foid */ + avl_node_t ia_node; /* AVL tree linkage */ +} itx_async_node_t; + +/* + * Vdev flushing: during a zil_commit(), we build up an AVL tree of the vdevs + * we've touched so we know which ones need a write cache flush at the end. + */ +typedef struct zil_vdev_node { + uint64_t zv_vdev; /* vdev to be flushed */ + avl_node_t zv_node; /* AVL tree linkage */ +} zil_vdev_node_t; + +#define ZIL_PREV_BLKS 16 + +/* + * Stable storage intent log management structure. One per dataset. + */ +struct zilog { + kmutex_t zl_lock; /* protects most zilog_t fields */ + struct dsl_pool *zl_dmu_pool; /* DSL pool */ + spa_t *zl_spa; /* handle for read/write log */ + const zil_header_t *zl_header; /* log header buffer */ + objset_t *zl_os; /* object set we're logging */ + zil_get_data_t *zl_get_data; /* callback to get object content */ + zio_t *zl_root_zio; /* log writer root zio */ + uint64_t zl_lr_seq; /* on-disk log record sequence number */ + uint64_t zl_commit_lr_seq; /* last committed on-disk lr seq */ + uint64_t zl_destroy_txg; /* txg of last zil_destroy() */ + uint64_t zl_replayed_seq[TXG_SIZE]; /* last replayed rec seq */ + uint64_t zl_replaying_seq; /* current replay seq number */ + uint32_t zl_suspend; /* log suspend count */ + kcondvar_t zl_cv_writer; /* log writer thread completion */ + kcondvar_t zl_cv_suspend; /* log suspend completion */ + uint8_t zl_suspending; /* log is currently suspending */ + uint8_t zl_keep_first; /* keep first log block in destroy */ + uint8_t zl_replay; /* replaying records while set */ + uint8_t zl_stop_sync; /* for debugging */ + uint8_t zl_writer; /* boolean: write setup in progress */ + uint8_t zl_logbias; /* latency or throughput */ + uint8_t zl_sync; /* synchronous or asynchronous */ + int zl_parse_error; /* last zil_parse() error */ + uint64_t zl_parse_blk_seq; /* highest blk seq on last parse */ + uint64_t zl_parse_lr_seq; /* highest lr seq on last parse */ + uint64_t zl_parse_blk_count; /* number of blocks parsed */ + uint64_t zl_parse_lr_count; /* number of log records parsed */ + uint64_t zl_next_batch; /* next batch number */ + uint64_t zl_com_batch; /* committed batch number */ + kcondvar_t zl_cv_batch[2]; /* batch condition variables */ + itxg_t zl_itxg[TXG_SIZE]; /* intent log txg chains */ + list_t zl_itx_commit_list; /* itx list to be committed */ + uint64_t zl_cur_used; /* current commit log size used */ + list_t zl_lwb_list; /* in-flight log write list */ + kmutex_t zl_vdev_lock; /* protects zl_vdev_tree */ + avl_tree_t zl_vdev_tree; /* vdevs to flush in zil_commit() */ + taskq_t *zl_clean_taskq; /* runs lwb and itx clean tasks */ + avl_tree_t zl_bp_tree; /* track bps during log parse */ + clock_t zl_replay_time; /* lbolt of when replay started */ + uint64_t zl_replay_blks; /* number of log blocks replayed */ + zil_header_t zl_old_header; /* debugging aid */ + uint_t zl_prev_blks[ZIL_PREV_BLKS]; /* size - sector rounded */ + uint_t zl_prev_rotor; /* rotor for zl_prev[] */ + txg_node_t zl_dirty_link; /* protected by dp_dirty_zilogs list */ +}; + +typedef struct zil_bp_node { + dva_t zn_dva; + avl_node_t zn_node; +} zil_bp_node_t; + +/* + * Maximum amount of write data that can be put into single log block. + */ +#define ZIL_MAX_LOG_DATA (SPA_OLD_MAXBLOCKSIZE - sizeof (zil_chain_t) - \ + sizeof (lr_write_t)) + +/* + * Maximum amount of log space we agree to waste to reduce number of + * WR_NEED_COPY chunks to reduce zl_get_data() overhead (~12%). + */ +#define ZIL_MAX_WASTE_SPACE (ZIL_MAX_LOG_DATA / 8) + +/* + * Maximum amount of write data for WR_COPIED. Fall back to WR_NEED_COPY + * as more space efficient if we can't fit at least two log records into + * maximum sized log block. + */ +#define ZIL_MAX_COPIED_DATA ((SPA_OLD_MAXBLOCKSIZE - \ + sizeof (zil_chain_t)) / 2 - sizeof (lr_write_t)) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZIL_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zio.h +++ linux-aws-4.15.0/zfs/include/sys/zio.h @@ -0,0 +1,624 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright 2016 Toomas Soome + */ + +#ifndef _ZIO_H +#define _ZIO_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Embedded checksum + */ +#define ZEC_MAGIC 0x210da7ab10c7a11ULL + +typedef struct zio_eck { + uint64_t zec_magic; /* for validation, endianness */ + zio_cksum_t zec_cksum; /* 256-bit checksum */ +} zio_eck_t; + +/* + * Gang block headers are self-checksumming and contain an array + * of block pointers. + */ +#define SPA_GANGBLOCKSIZE SPA_MINBLOCKSIZE +#define SPA_GBH_NBLKPTRS ((SPA_GANGBLOCKSIZE - \ + sizeof (zio_eck_t)) / sizeof (blkptr_t)) +#define SPA_GBH_FILLER ((SPA_GANGBLOCKSIZE - \ + sizeof (zio_eck_t) - \ + (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\ + sizeof (uint64_t)) + +typedef struct zio_gbh { + blkptr_t zg_blkptr[SPA_GBH_NBLKPTRS]; + uint64_t zg_filler[SPA_GBH_FILLER]; + zio_eck_t zg_tail; +} zio_gbh_phys_t; + +enum zio_checksum { + ZIO_CHECKSUM_INHERIT = 0, + ZIO_CHECKSUM_ON, + ZIO_CHECKSUM_OFF, + ZIO_CHECKSUM_LABEL, + ZIO_CHECKSUM_GANG_HEADER, + ZIO_CHECKSUM_ZILOG, + ZIO_CHECKSUM_FLETCHER_2, + ZIO_CHECKSUM_FLETCHER_4, + ZIO_CHECKSUM_SHA256, + ZIO_CHECKSUM_ZILOG2, + ZIO_CHECKSUM_NOPARITY, + ZIO_CHECKSUM_SHA512, + ZIO_CHECKSUM_SKEIN, + ZIO_CHECKSUM_EDONR, + ZIO_CHECKSUM_FUNCTIONS +}; + +/* + * The number of "legacy" compression functions which can be set on individual + * objects. + */ +#define ZIO_CHECKSUM_LEGACY_FUNCTIONS ZIO_CHECKSUM_ZILOG2 + +#define ZIO_CHECKSUM_ON_VALUE ZIO_CHECKSUM_FLETCHER_4 +#define ZIO_CHECKSUM_DEFAULT ZIO_CHECKSUM_ON + +#define ZIO_CHECKSUM_MASK 0xffULL +#define ZIO_CHECKSUM_VERIFY (1 << 8) + +#define ZIO_DEDUPCHECKSUM ZIO_CHECKSUM_SHA256 +#define ZIO_DEDUPDITTO_MIN 100 + +/* + * The number of "legacy" compression functions which can be set on individual + * objects. + */ +#define ZIO_COMPRESS_LEGACY_FUNCTIONS ZIO_COMPRESS_LZ4 + +/* + * The meaning of "compress = on" selected by the compression features enabled + * on a given pool. + */ +#define ZIO_COMPRESS_LEGACY_ON_VALUE ZIO_COMPRESS_LZJB +#define ZIO_COMPRESS_LZ4_ON_VALUE ZIO_COMPRESS_LZ4 + +#define ZIO_COMPRESS_DEFAULT ZIO_COMPRESS_OFF + +#define BOOTFS_COMPRESS_VALID(compress) \ + ((compress) == ZIO_COMPRESS_LZJB || \ + (compress) == ZIO_COMPRESS_LZ4 || \ + (compress) == ZIO_COMPRESS_GZIP_1 || \ + (compress) == ZIO_COMPRESS_GZIP_2 || \ + (compress) == ZIO_COMPRESS_GZIP_3 || \ + (compress) == ZIO_COMPRESS_GZIP_4 || \ + (compress) == ZIO_COMPRESS_GZIP_5 || \ + (compress) == ZIO_COMPRESS_GZIP_6 || \ + (compress) == ZIO_COMPRESS_GZIP_7 || \ + (compress) == ZIO_COMPRESS_GZIP_8 || \ + (compress) == ZIO_COMPRESS_GZIP_9 || \ + (compress) == ZIO_COMPRESS_ZLE || \ + (compress) == ZIO_COMPRESS_ON || \ + (compress) == ZIO_COMPRESS_OFF) + +/* + * Default Linux timeout for a sd device. + */ +#define ZIO_DELAY_MAX (30 * MILLISEC) + +#define ZIO_FAILURE_MODE_WAIT 0 +#define ZIO_FAILURE_MODE_CONTINUE 1 +#define ZIO_FAILURE_MODE_PANIC 2 + +enum zio_flag { + /* + * Flags inherited by gang, ddt, and vdev children, + * and that must be equal for two zios to aggregate + */ + ZIO_FLAG_DONT_AGGREGATE = 1 << 0, + ZIO_FLAG_IO_REPAIR = 1 << 1, + ZIO_FLAG_SELF_HEAL = 1 << 2, + ZIO_FLAG_RESILVER = 1 << 3, + ZIO_FLAG_SCRUB = 1 << 4, + ZIO_FLAG_SCAN_THREAD = 1 << 5, + ZIO_FLAG_PHYSICAL = 1 << 6, + +#define ZIO_FLAG_AGG_INHERIT (ZIO_FLAG_CANFAIL - 1) + + /* + * Flags inherited by ddt, gang, and vdev children. + */ + ZIO_FLAG_CANFAIL = 1 << 7, /* must be first for INHERIT */ + ZIO_FLAG_SPECULATIVE = 1 << 8, + ZIO_FLAG_CONFIG_WRITER = 1 << 9, + ZIO_FLAG_DONT_RETRY = 1 << 10, + ZIO_FLAG_DONT_CACHE = 1 << 11, + ZIO_FLAG_NODATA = 1 << 12, + ZIO_FLAG_INDUCE_DAMAGE = 1 << 13, + ZIO_FLAG_IO_ALLOCATING = 1 << 14, + +#define ZIO_FLAG_DDT_INHERIT (ZIO_FLAG_IO_RETRY - 1) +#define ZIO_FLAG_GANG_INHERIT (ZIO_FLAG_IO_RETRY - 1) + + /* + * Flags inherited by vdev children. + */ + ZIO_FLAG_IO_RETRY = 1 << 15, /* must be first for INHERIT */ + ZIO_FLAG_PROBE = 1 << 16, + ZIO_FLAG_TRYHARD = 1 << 17, + ZIO_FLAG_OPTIONAL = 1 << 18, + +#define ZIO_FLAG_VDEV_INHERIT (ZIO_FLAG_DONT_QUEUE - 1) + + /* + * Flags not inherited by any children. + */ + ZIO_FLAG_DONT_QUEUE = 1 << 19, /* must be first for INHERIT */ + ZIO_FLAG_DONT_PROPAGATE = 1 << 20, + ZIO_FLAG_IO_BYPASS = 1 << 21, + ZIO_FLAG_IO_REWRITE = 1 << 22, + ZIO_FLAG_RAW = 1 << 23, + ZIO_FLAG_GANG_CHILD = 1 << 24, + ZIO_FLAG_DDT_CHILD = 1 << 25, + ZIO_FLAG_GODFATHER = 1 << 26, + ZIO_FLAG_NOPWRITE = 1 << 27, + ZIO_FLAG_REEXECUTED = 1 << 28, + ZIO_FLAG_DELEGATED = 1 << 29, + ZIO_FLAG_FASTWRITE = 1 << 30 +}; + +#define ZIO_FLAG_MUSTSUCCEED 0 + +#define ZIO_DDT_CHILD_FLAGS(zio) \ + (((zio)->io_flags & ZIO_FLAG_DDT_INHERIT) | \ + ZIO_FLAG_DDT_CHILD | ZIO_FLAG_CANFAIL) + +#define ZIO_GANG_CHILD_FLAGS(zio) \ + (((zio)->io_flags & ZIO_FLAG_GANG_INHERIT) | \ + ZIO_FLAG_GANG_CHILD | ZIO_FLAG_CANFAIL) + +#define ZIO_VDEV_CHILD_FLAGS(zio) \ + (((zio)->io_flags & ZIO_FLAG_VDEV_INHERIT) | \ + ZIO_FLAG_CANFAIL) + +enum zio_child { + ZIO_CHILD_VDEV = 0, + ZIO_CHILD_GANG, + ZIO_CHILD_DDT, + ZIO_CHILD_LOGICAL, + ZIO_CHILD_TYPES +}; + +enum zio_wait_type { + ZIO_WAIT_READY = 0, + ZIO_WAIT_DONE, + ZIO_WAIT_TYPES +}; + +/* + * We'll take the unused errnos, 'EBADE' and 'EBADR' (from the Convergent + * graveyard) to indicate checksum errors and fragmentation. + */ +#define ECKSUM EBADE +#define EFRAGS EBADR + +typedef void zio_done_func_t(zio_t *zio); + +extern int zio_dva_throttle_enabled; +extern const char *zio_type_name[ZIO_TYPES]; + +/* + * A bookmark is a four-tuple that uniquely + * identifies any block in the pool. By convention, the meta-objset (MOS) + * is objset 0, and the meta-dnode is object 0. This covers all blocks + * except root blocks and ZIL blocks, which are defined as follows: + * + * Root blocks (objset_phys_t) are object 0, level -1: . + * ZIL blocks are bookmarked . + * dmu_sync()ed ZIL data blocks are bookmarked . + * dnode visit bookmarks are . + * + * Note: this structure is called a bookmark because its original purpose + * was to remember where to resume a pool-wide traverse. + * + * Note: this structure is passed between userland and the kernel, and is + * stored on disk (by virtue of being incorporated into other on-disk + * structures, e.g. dsl_scan_phys_t). + */ +struct zbookmark_phys { + uint64_t zb_objset; + uint64_t zb_object; + int64_t zb_level; + uint64_t zb_blkid; +}; + +#define SET_BOOKMARK(zb, objset, object, level, blkid) \ +{ \ + (zb)->zb_objset = objset; \ + (zb)->zb_object = object; \ + (zb)->zb_level = level; \ + (zb)->zb_blkid = blkid; \ +} + +#define ZB_DESTROYED_OBJSET (-1ULL) + +#define ZB_ROOT_OBJECT (0ULL) +#define ZB_ROOT_LEVEL (-1LL) +#define ZB_ROOT_BLKID (0ULL) + +#define ZB_ZIL_OBJECT (0ULL) +#define ZB_ZIL_LEVEL (-2LL) + +#define ZB_DNODE_LEVEL (-3LL) +#define ZB_DNODE_BLKID (0ULL) + +#define ZB_IS_ZERO(zb) \ + ((zb)->zb_objset == 0 && (zb)->zb_object == 0 && \ + (zb)->zb_level == 0 && (zb)->zb_blkid == 0) +#define ZB_IS_ROOT(zb) \ + ((zb)->zb_object == ZB_ROOT_OBJECT && \ + (zb)->zb_level == ZB_ROOT_LEVEL && \ + (zb)->zb_blkid == ZB_ROOT_BLKID) + +typedef struct zio_prop { + enum zio_checksum zp_checksum; + enum zio_compress zp_compress; + dmu_object_type_t zp_type; + uint8_t zp_level; + uint8_t zp_copies; + boolean_t zp_dedup; + boolean_t zp_dedup_verify; + boolean_t zp_nopwrite; +} zio_prop_t; + +typedef struct zio_cksum_report zio_cksum_report_t; + +typedef void zio_cksum_finish_f(zio_cksum_report_t *rep, + const abd_t *good_data); +typedef void zio_cksum_free_f(void *cbdata, size_t size); + +struct zio_bad_cksum; /* defined in zio_checksum.h */ +struct dnode_phys; +struct abd; + +struct zio_cksum_report { + struct zio_cksum_report *zcr_next; + nvlist_t *zcr_ereport; + nvlist_t *zcr_detector; + void *zcr_cbdata; + size_t zcr_cbinfo; /* passed to zcr_free() */ + uint64_t zcr_align; + uint64_t zcr_length; + zio_cksum_finish_f *zcr_finish; + zio_cksum_free_f *zcr_free; + + /* internal use only */ + struct zio_bad_cksum *zcr_ckinfo; /* information from failure */ +}; + +typedef void zio_vsd_cksum_report_f(zio_t *zio, zio_cksum_report_t *zcr, + void *arg); + +zio_vsd_cksum_report_f zio_vsd_default_cksum_report; + +typedef struct zio_vsd_ops { + zio_done_func_t *vsd_free; + zio_vsd_cksum_report_f *vsd_cksum_report; +} zio_vsd_ops_t; + +typedef struct zio_gang_node { + zio_gbh_phys_t *gn_gbh; + struct zio_gang_node *gn_child[SPA_GBH_NBLKPTRS]; +} zio_gang_node_t; + +typedef zio_t *zio_gang_issue_func_t(zio_t *zio, blkptr_t *bp, + zio_gang_node_t *gn, struct abd *data, uint64_t offset); + +typedef void zio_transform_func_t(zio_t *zio, struct abd *data, uint64_t size); + +typedef struct zio_transform { + struct abd *zt_orig_abd; + uint64_t zt_orig_size; + uint64_t zt_bufsize; + zio_transform_func_t *zt_transform; + struct zio_transform *zt_next; +} zio_transform_t; + +typedef int zio_pipe_stage_t(zio_t *zio); + +/* + * The io_reexecute flags are distinct from io_flags because the child must + * be able to propagate them to the parent. The normal io_flags are local + * to the zio, not protected by any lock, and not modifiable by children; + * the reexecute flags are protected by io_lock, modifiable by children, + * and always propagated -- even when ZIO_FLAG_DONT_PROPAGATE is set. + */ +#define ZIO_REEXECUTE_NOW 0x01 +#define ZIO_REEXECUTE_SUSPEND 0x02 + +typedef struct zio_alloc_list { + list_t zal_list; + uint64_t zal_size; +} zio_alloc_list_t; + +typedef struct zio_link { + zio_t *zl_parent; + zio_t *zl_child; + list_node_t zl_parent_node; + list_node_t zl_child_node; +} zio_link_t; + +struct zio { + /* Core information about this I/O */ + zbookmark_phys_t io_bookmark; + zio_prop_t io_prop; + zio_type_t io_type; + enum zio_child io_child_type; + int io_cmd; + zio_priority_t io_priority; + uint8_t io_reexecute; + uint8_t io_state[ZIO_WAIT_TYPES]; + uint64_t io_txg; + spa_t *io_spa; + blkptr_t *io_bp; + blkptr_t *io_bp_override; + blkptr_t io_bp_copy; + list_t io_parent_list; + list_t io_child_list; + zio_t *io_logical; + zio_transform_t *io_transform_stack; + + /* Callback info */ + zio_done_func_t *io_ready; + zio_done_func_t *io_children_ready; + zio_done_func_t *io_physdone; + zio_done_func_t *io_done; + void *io_private; + int64_t io_prev_space_delta; /* DMU private */ + blkptr_t io_bp_orig; + /* io_lsize != io_orig_size iff this is a raw write */ + uint64_t io_lsize; + + /* Data represented by this I/O */ + struct abd *io_abd; + struct abd *io_orig_abd; + uint64_t io_size; + uint64_t io_orig_size; + + /* Stuff for the vdev stack */ + vdev_t *io_vd; + void *io_vsd; + const zio_vsd_ops_t *io_vsd_ops; + + uint64_t io_offset; + hrtime_t io_timestamp; /* submitted at */ + hrtime_t io_queued_timestamp; + hrtime_t io_target_timestamp; + hrtime_t io_delta; /* vdev queue service delta */ + hrtime_t io_delay; /* Device access time (disk or */ + /* file). */ + avl_node_t io_queue_node; + avl_node_t io_offset_node; + avl_node_t io_alloc_node; + zio_alloc_list_t io_alloc_list; + + /* Internal pipeline state */ + enum zio_flag io_flags; + enum zio_stage io_stage; + enum zio_stage io_pipeline; + enum zio_flag io_orig_flags; + enum zio_stage io_orig_stage; + enum zio_stage io_orig_pipeline; + enum zio_stage io_pipeline_trace; + int io_error; + int io_child_error[ZIO_CHILD_TYPES]; + uint64_t io_children[ZIO_CHILD_TYPES][ZIO_WAIT_TYPES]; + uint64_t io_child_count; + uint64_t io_phys_children; + uint64_t io_parent_count; + uint64_t *io_stall; + zio_t *io_gang_leader; + zio_gang_node_t *io_gang_tree; + void *io_executor; + void *io_waiter; + kmutex_t io_lock; + kcondvar_t io_cv; + + /* FMA state */ + zio_cksum_report_t *io_cksum_report; + uint64_t io_ena; + + /* Taskq dispatching state */ + taskq_ent_t io_tqent; +}; + +extern int zio_bookmark_compare(const void *, const void *); + +extern zio_t *zio_null(zio_t *pio, spa_t *spa, vdev_t *vd, + zio_done_func_t *done, void *private, enum zio_flag flags); + +extern zio_t *zio_root(spa_t *spa, + zio_done_func_t *done, void *private, enum zio_flag flags); + +extern zio_t *zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, + struct abd *data, uint64_t lsize, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, const zbookmark_phys_t *zb); + +extern zio_t *zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, + struct abd *data, uint64_t size, uint64_t psize, const zio_prop_t *zp, + zio_done_func_t *ready, zio_done_func_t *children_ready, + zio_done_func_t *physdone, zio_done_func_t *done, + void *private, zio_priority_t priority, enum zio_flag flags, + const zbookmark_phys_t *zb); + +extern zio_t *zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, + struct abd *data, uint64_t size, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, zbookmark_phys_t *zb); + +extern void zio_write_override(zio_t *zio, blkptr_t *bp, int copies, + boolean_t nopwrite); + +extern void zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp); + +extern zio_t *zio_claim(zio_t *pio, spa_t *spa, uint64_t txg, + const blkptr_t *bp, + zio_done_func_t *done, void *private, enum zio_flag flags); + +extern zio_t *zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd, + zio_done_func_t *done, void *private, enum zio_flag flags); + +extern zio_t *zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset, + uint64_t size, struct abd *data, int checksum, + zio_done_func_t *done, void *private, zio_priority_t priority, + enum zio_flag flags, boolean_t labels); + +extern zio_t *zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset, + uint64_t size, struct abd *data, int checksum, + zio_done_func_t *done, void *private, zio_priority_t priority, + enum zio_flag flags, boolean_t labels); + +extern zio_t *zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg, + const blkptr_t *bp, enum zio_flag flags); + +extern int zio_alloc_zil(spa_t *spa, uint64_t txg, blkptr_t *new_bp, + uint64_t size, boolean_t *slog); +extern void zio_free_zil(spa_t *spa, uint64_t txg, blkptr_t *bp); +extern void zio_flush(zio_t *zio, vdev_t *vd); +extern void zio_shrink(zio_t *zio, uint64_t size); + +extern int zio_wait(zio_t *zio); +extern void zio_nowait(zio_t *zio); +extern void zio_execute(zio_t *zio); +extern void zio_interrupt(zio_t *zio); +extern void zio_delay_init(zio_t *zio); +extern void zio_delay_interrupt(zio_t *zio); + +extern zio_t *zio_walk_parents(zio_t *cio, zio_link_t **); +extern zio_t *zio_walk_children(zio_t *pio, zio_link_t **); +extern zio_t *zio_unique_parent(zio_t *cio); +extern void zio_add_child(zio_t *pio, zio_t *cio); + +extern void *zio_buf_alloc(size_t size); +extern void zio_buf_free(void *buf, size_t size); +extern void *zio_data_buf_alloc(size_t size); +extern void zio_data_buf_free(void *buf, size_t size); + +extern void zio_push_transform(zio_t *zio, struct abd *abd, uint64_t size, + uint64_t bufsize, zio_transform_func_t *transform); +extern void zio_pop_transforms(zio_t *zio); + +extern void zio_resubmit_stage_async(void *); + +extern zio_t *zio_vdev_child_io(zio_t *zio, blkptr_t *bp, vdev_t *vd, + uint64_t offset, struct abd *data, uint64_t size, int type, + zio_priority_t priority, enum zio_flag flags, + zio_done_func_t *done, void *private); + +extern zio_t *zio_vdev_delegated_io(vdev_t *vd, uint64_t offset, + struct abd *data, uint64_t size, int type, zio_priority_t priority, + enum zio_flag flags, zio_done_func_t *done, void *private); + +extern void zio_vdev_io_bypass(zio_t *zio); +extern void zio_vdev_io_reissue(zio_t *zio); +extern void zio_vdev_io_redone(zio_t *zio); + +extern void zio_checksum_verified(zio_t *zio); +extern int zio_worst_error(int e1, int e2); + +extern enum zio_checksum zio_checksum_select(enum zio_checksum child, + enum zio_checksum parent); +extern enum zio_checksum zio_checksum_dedup_select(spa_t *spa, + enum zio_checksum child, enum zio_checksum parent); +extern enum zio_compress zio_compress_select(spa_t *spa, + enum zio_compress child, enum zio_compress parent); + +extern void zio_suspend(spa_t *spa, zio_t *zio); +extern int zio_resume(spa_t *spa); +extern void zio_resume_wait(spa_t *spa); + +/* + * Initial setup and teardown. + */ +extern void zio_init(void); +extern void zio_fini(void); + +/* + * Fault injection + */ +struct zinject_record; +extern uint32_t zio_injection_enabled; +extern int zio_inject_fault(char *name, int flags, int *id, + struct zinject_record *record); +extern int zio_inject_list_next(int *id, char *name, size_t buflen, + struct zinject_record *record); +extern int zio_clear_fault(int id); +extern void zio_handle_panic_injection(spa_t *spa, char *tag, uint64_t type); +extern int zio_handle_fault_injection(zio_t *zio, int error); +extern int zio_handle_device_injection(vdev_t *vd, zio_t *zio, int error); +extern int zio_handle_label_injection(zio_t *zio, int error); +extern void zio_handle_ignored_writes(zio_t *zio); +extern hrtime_t zio_handle_io_delay(zio_t *zio); + +/* + * Checksum ereport functions + */ +extern void zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd, struct zio *zio, + uint64_t offset, uint64_t length, void *arg, struct zio_bad_cksum *info); +extern void zfs_ereport_finish_checksum(zio_cksum_report_t *report, + const abd_t *good_data, const abd_t *bad_data, boolean_t drop_if_identical); + +extern void zfs_ereport_free_checksum(zio_cksum_report_t *report); + +/* If we have the good data in hand, this function can be used */ +extern void zfs_ereport_post_checksum(spa_t *spa, vdev_t *vd, + struct zio *zio, uint64_t offset, uint64_t length, + const abd_t *good_data, const abd_t *bad_data, struct zio_bad_cksum *info); + +/* Called from spa_sync(), but primarily an injection handler */ +extern void spa_handle_ignored_writes(spa_t *spa); + +/* zbookmark_phys functions */ +boolean_t zbookmark_subtree_completed(const struct dnode_phys *dnp, + const zbookmark_phys_t *subtree_root, const zbookmark_phys_t *last_block); +int zbookmark_compare(uint16_t dbss1, uint8_t ibs1, uint16_t dbss2, + uint8_t ibs2, const zbookmark_phys_t *zb1, const zbookmark_phys_t *zb2); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZIO_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zio_checksum.h +++ linux-aws-4.15.0/zfs/include/sys/zio_checksum.h @@ -0,0 +1,144 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2016 by Delphix. All rights reserved. + * Copyright Saso Kiselkov 2013, All rights reserved. + */ + +#ifndef _SYS_ZIO_CHECKSUM_H +#define _SYS_ZIO_CHECKSUM_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct abd; + +/* + * Signature for checksum functions. + */ +typedef void zio_checksum_t(struct abd *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp); +typedef void *zio_checksum_tmpl_init_t(const zio_cksum_salt_t *salt); +typedef void zio_checksum_tmpl_free_t(void *ctx_template); + +typedef enum zio_checksum_flags { + /* Strong enough for metadata? */ + ZCHECKSUM_FLAG_METADATA = (1 << 1), + /* ZIO embedded checksum */ + ZCHECKSUM_FLAG_EMBEDDED = (1 << 2), + /* Strong enough for dedup (without verification)? */ + ZCHECKSUM_FLAG_DEDUP = (1 << 3), + /* Uses salt value */ + ZCHECKSUM_FLAG_SALTED = (1 << 4), + /* Strong enough for nopwrite? */ + ZCHECKSUM_FLAG_NOPWRITE = (1 << 5) +} zio_checksum_flags_t; + +typedef enum { + ZIO_CHECKSUM_NATIVE, + ZIO_CHECKSUM_BYTESWAP +} zio_byteorder_t; + +typedef struct zio_abd_checksum_data { + zio_byteorder_t acd_byteorder; + fletcher_4_ctx_t *acd_ctx; + zio_cksum_t *acd_zcp; + void *acd_private; +} zio_abd_checksum_data_t; + +typedef void zio_abd_checksum_init_t(zio_abd_checksum_data_t *); +typedef void zio_abd_checksum_fini_t(zio_abd_checksum_data_t *); +typedef int zio_abd_checksum_iter_t(void *, size_t, void *); + +typedef const struct zio_abd_checksum_func { + zio_abd_checksum_init_t *acf_init; + zio_abd_checksum_fini_t *acf_fini; + zio_abd_checksum_iter_t *acf_iter; +} zio_abd_checksum_func_t; + +/* + * Information about each checksum function. + */ +typedef const struct zio_checksum_info { + /* checksum function for each byteorder */ + zio_checksum_t *ci_func[2]; + zio_checksum_tmpl_init_t *ci_tmpl_init; + zio_checksum_tmpl_free_t *ci_tmpl_free; + zio_checksum_flags_t ci_flags; + char *ci_name; /* descriptive name */ +} zio_checksum_info_t; + +typedef struct zio_bad_cksum { + zio_cksum_t zbc_expected; + zio_cksum_t zbc_actual; + const char *zbc_checksum_name; + uint8_t zbc_byteswapped; + uint8_t zbc_injected; + uint8_t zbc_has_cksum; /* expected/actual valid */ +} zio_bad_cksum_t; + +extern zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS]; + +/* + * Checksum routines. + */ +extern zio_checksum_t abd_checksum_SHA256; +extern zio_checksum_t abd_checksum_SHA512_native; +extern zio_checksum_t abd_checksum_SHA512_byteswap; + +/* Skein */ +extern zio_checksum_t abd_checksum_skein_native; +extern zio_checksum_t abd_checksum_skein_byteswap; +extern zio_checksum_tmpl_init_t abd_checksum_skein_tmpl_init; +extern zio_checksum_tmpl_free_t abd_checksum_skein_tmpl_free; + +/* Edon-R */ +extern zio_checksum_t abd_checksum_edonr_native; +extern zio_checksum_t abd_checksum_edonr_byteswap; +extern zio_checksum_tmpl_init_t abd_checksum_edonr_tmpl_init; +extern zio_checksum_tmpl_free_t abd_checksum_edonr_tmpl_free; + +extern zio_abd_checksum_func_t fletcher_4_abd_ops; +extern zio_checksum_t abd_fletcher_4_native; +extern zio_checksum_t abd_fletcher_4_byteswap; + +extern int zio_checksum_equal(spa_t *, blkptr_t *, enum zio_checksum, + void *, uint64_t, uint64_t, zio_bad_cksum_t *); +extern void zio_checksum_compute(zio_t *, enum zio_checksum, + struct abd *, uint64_t); +extern int zio_checksum_error_impl(spa_t *, const blkptr_t *, enum zio_checksum, + struct abd *, uint64_t, uint64_t, zio_bad_cksum_t *); +extern int zio_checksum_error(zio_t *zio, zio_bad_cksum_t *out); +extern enum zio_checksum spa_dedup_checksum(spa_t *spa); +extern void zio_checksum_templates_free(spa_t *spa); +extern spa_feature_t zio_checksum_to_feature(enum zio_checksum cksum); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZIO_CHECKSUM_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zio_compress.h +++ linux-aws-4.15.0/zfs/include/sys/zio_compress.h @@ -0,0 +1,124 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * Copyright (c) 2015, 2016 by Delphix. All rights reserved. + */ + +#ifndef _SYS_ZIO_COMPRESS_H +#define _SYS_ZIO_COMPRESS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum zio_compress { + ZIO_COMPRESS_INHERIT = 0, + ZIO_COMPRESS_ON, + ZIO_COMPRESS_OFF, + ZIO_COMPRESS_LZJB, + ZIO_COMPRESS_EMPTY, + ZIO_COMPRESS_GZIP_1, + ZIO_COMPRESS_GZIP_2, + ZIO_COMPRESS_GZIP_3, + ZIO_COMPRESS_GZIP_4, + ZIO_COMPRESS_GZIP_5, + ZIO_COMPRESS_GZIP_6, + ZIO_COMPRESS_GZIP_7, + ZIO_COMPRESS_GZIP_8, + ZIO_COMPRESS_GZIP_9, + ZIO_COMPRESS_ZLE, + ZIO_COMPRESS_LZ4, + ZIO_COMPRESS_FUNCTIONS +}; + +/* Common signature for all zio compress functions. */ +typedef size_t zio_compress_func_t(void *src, void *dst, + size_t s_len, size_t d_len, int); +/* Common signature for all zio decompress functions. */ +typedef int zio_decompress_func_t(void *src, void *dst, + size_t s_len, size_t d_len, int); + +/* + * Common signature for all zio decompress functions using an ABD as input. + * This is helpful if you have both compressed ARC and scatter ABDs enabled, + * but is not a requirement for all compression algorithms. + */ +typedef int zio_decompress_abd_func_t(abd_t *src, void *dst, + size_t s_len, size_t d_len, int); +/* + * Information about each compression function. + */ +typedef const struct zio_compress_info { + char *ci_name; + int ci_level; + zio_compress_func_t *ci_compress; + zio_decompress_func_t *ci_decompress; +} zio_compress_info_t; + +extern zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS]; + +/* + * lz4 compression init & free + */ +extern void lz4_init(void); +extern void lz4_fini(void); + +/* + * Compression routines. + */ +extern size_t lzjb_compress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern int lzjb_decompress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern size_t gzip_compress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern int gzip_decompress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern size_t zle_compress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern int zle_decompress(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern size_t lz4_compress_zfs(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern int lz4_decompress_zfs(void *src, void *dst, size_t s_len, size_t d_len, + int level); +extern int lz4_decompress_abd(abd_t *src, void *dst, size_t s_len, size_t d_len, + int level); +/* + * Compress and decompress data if necessary. + */ +extern size_t zio_compress_data(enum zio_compress c, abd_t *src, void *dst, + size_t s_len); +extern int zio_decompress_data(enum zio_compress c, abd_t *src, void *dst, + size_t s_len, size_t d_len); +extern int zio_decompress_data_buf(enum zio_compress c, void *src, void *dst, + size_t s_len, size_t d_len); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZIO_COMPRESS_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zio_impl.h +++ linux-aws-4.15.0/zfs/include/sys/zio_impl.h @@ -0,0 +1,249 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#ifndef _ZIO_IMPL_H +#define _ZIO_IMPL_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * XXX -- Describe ZFS I/O pipeline here. Fill in as needed. + * + * The ZFS I/O pipeline is comprised of various stages which are defined + * in the zio_stage enum below. The individual stages are used to construct + * these basic I/O operations: Read, Write, Free, Claim, and Ioctl. + * + * I/O operations: (XXX - provide detail for each of the operations) + * + * Read: + * Write: + * Free: + * Claim: + * Ioctl: + * + * Although the most common pipeline are used by the basic I/O operations + * above, there are some helper pipelines (one could consider them + * sub-pipelines) which are used internally by the ZIO module and are + * explained below: + * + * Interlock Pipeline: + * The interlock pipeline is the most basic pipeline and is used by all + * of the I/O operations. The interlock pipeline does not perform any I/O + * and is used to coordinate the dependencies between I/Os that are being + * issued (i.e. the parent/child relationship). + * + * Vdev child Pipeline: + * The vdev child pipeline is responsible for performing the physical I/O. + * It is in this pipeline where the I/O are queued and possibly cached. + * + * In addition to performing I/O, the pipeline is also responsible for + * data transformations. The transformations performed are based on the + * specific properties that user may have selected and modify the + * behavior of the pipeline. Examples of supported transformations are + * compression, dedup, and nop writes. Transformations will either modify + * the data or the pipeline. This list below further describes each of + * the supported transformations: + * + * Compression: + * ZFS supports three different flavors of compression -- gzip, lzjb, and + * zle. Compression occurs as part of the write pipeline and is performed + * in the ZIO_STAGE_WRITE_BP_INIT stage. + * + * Dedup: + * Dedup reads are handled by the ZIO_STAGE_DDT_READ_START and + * ZIO_STAGE_DDT_READ_DONE stages. These stages are added to an existing + * read pipeline if the dedup bit is set on the block pointer. + * Writing a dedup block is performed by the ZIO_STAGE_DDT_WRITE stage + * and added to a write pipeline if a user has enabled dedup on that + * particular dataset. + * + * NOP Write: + * The NOP write feature is performed by the ZIO_STAGE_NOP_WRITE stage + * and is added to an existing write pipeline if a crypographically + * secure checksum (i.e. SHA256) is enabled and compression is turned on. + * The NOP write stage will compare the checksums of the current data + * on-disk (level-0 blocks only) and the data that is currently being written. + * If the checksum values are identical then the pipeline is converted to + * an interlock pipeline skipping block allocation and bypassing the + * physical I/O. The nop write feature can handle writes in either + * syncing or open context (i.e. zil writes) and as a result is mutually + * exclusive with dedup. + */ + +/* + * zio pipeline stage definitions + */ +enum zio_stage { + ZIO_STAGE_OPEN = 1 << 0, /* RWFCI */ + + ZIO_STAGE_READ_BP_INIT = 1 << 1, /* R---- */ + ZIO_STAGE_WRITE_BP_INIT = 1 << 2, /* -W--- */ + ZIO_STAGE_FREE_BP_INIT = 1 << 3, /* --F-- */ + ZIO_STAGE_ISSUE_ASYNC = 1 << 4, /* RWF-- */ + ZIO_STAGE_WRITE_COMPRESS = 1 << 5, /* -W--- */ + + ZIO_STAGE_CHECKSUM_GENERATE = 1 << 6, /* -W--- */ + + ZIO_STAGE_NOP_WRITE = 1 << 7, /* -W--- */ + + ZIO_STAGE_DDT_READ_START = 1 << 8, /* R---- */ + ZIO_STAGE_DDT_READ_DONE = 1 << 9, /* R---- */ + ZIO_STAGE_DDT_WRITE = 1 << 10, /* -W--- */ + ZIO_STAGE_DDT_FREE = 1 << 11, /* --F-- */ + + ZIO_STAGE_GANG_ASSEMBLE = 1 << 12, /* RWFC- */ + ZIO_STAGE_GANG_ISSUE = 1 << 13, /* RWFC- */ + + ZIO_STAGE_DVA_THROTTLE = 1 << 14, /* -W--- */ + ZIO_STAGE_DVA_ALLOCATE = 1 << 15, /* -W--- */ + ZIO_STAGE_DVA_FREE = 1 << 16, /* --F-- */ + ZIO_STAGE_DVA_CLAIM = 1 << 17, /* ---C- */ + + ZIO_STAGE_READY = 1 << 18, /* RWFCI */ + + ZIO_STAGE_VDEV_IO_START = 1 << 19, /* RW--I */ + ZIO_STAGE_VDEV_IO_DONE = 1 << 20, /* RW--I */ + ZIO_STAGE_VDEV_IO_ASSESS = 1 << 21, /* RW--I */ + + ZIO_STAGE_CHECKSUM_VERIFY = 1 << 22, /* R---- */ + + ZIO_STAGE_DONE = 1 << 23 /* RWFCI */ +}; + +#define ZIO_INTERLOCK_STAGES \ + (ZIO_STAGE_READY | \ + ZIO_STAGE_DONE) + +#define ZIO_INTERLOCK_PIPELINE \ + ZIO_INTERLOCK_STAGES + +#define ZIO_VDEV_IO_STAGES \ + (ZIO_STAGE_VDEV_IO_START | \ + ZIO_STAGE_VDEV_IO_DONE | \ + ZIO_STAGE_VDEV_IO_ASSESS) + +#define ZIO_VDEV_CHILD_PIPELINE \ + (ZIO_VDEV_IO_STAGES | \ + ZIO_STAGE_DONE) + +#define ZIO_READ_COMMON_STAGES \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_VDEV_IO_STAGES | \ + ZIO_STAGE_CHECKSUM_VERIFY) + +#define ZIO_READ_PHYS_PIPELINE \ + ZIO_READ_COMMON_STAGES + +#define ZIO_READ_PIPELINE \ + (ZIO_READ_COMMON_STAGES | \ + ZIO_STAGE_READ_BP_INIT) + +#define ZIO_DDT_CHILD_READ_PIPELINE \ + ZIO_READ_COMMON_STAGES + +#define ZIO_DDT_READ_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_READ_BP_INIT | \ + ZIO_STAGE_DDT_READ_START | \ + ZIO_STAGE_DDT_READ_DONE) + +#define ZIO_WRITE_COMMON_STAGES \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_VDEV_IO_STAGES | \ + ZIO_STAGE_ISSUE_ASYNC | \ + ZIO_STAGE_CHECKSUM_GENERATE) + +#define ZIO_WRITE_PHYS_PIPELINE \ + ZIO_WRITE_COMMON_STAGES + +#define ZIO_REWRITE_PIPELINE \ + (ZIO_WRITE_COMMON_STAGES | \ + ZIO_STAGE_WRITE_COMPRESS | \ + ZIO_STAGE_WRITE_BP_INIT) + +#define ZIO_WRITE_PIPELINE \ + (ZIO_WRITE_COMMON_STAGES | \ + ZIO_STAGE_WRITE_BP_INIT | \ + ZIO_STAGE_WRITE_COMPRESS | \ + ZIO_STAGE_DVA_THROTTLE | \ + ZIO_STAGE_DVA_ALLOCATE) + +#define ZIO_DDT_CHILD_WRITE_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_VDEV_IO_STAGES | \ + ZIO_STAGE_DVA_THROTTLE | \ + ZIO_STAGE_DVA_ALLOCATE) + +#define ZIO_DDT_WRITE_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_WRITE_BP_INIT | \ + ZIO_STAGE_ISSUE_ASYNC | \ + ZIO_STAGE_WRITE_COMPRESS | \ + ZIO_STAGE_CHECKSUM_GENERATE | \ + ZIO_STAGE_DDT_WRITE) + +#define ZIO_GANG_STAGES \ + (ZIO_STAGE_GANG_ASSEMBLE | \ + ZIO_STAGE_GANG_ISSUE) + +#define ZIO_FREE_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_FREE_BP_INIT | \ + ZIO_STAGE_DVA_FREE) + +#define ZIO_DDT_FREE_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_FREE_BP_INIT | \ + ZIO_STAGE_ISSUE_ASYNC | \ + ZIO_STAGE_DDT_FREE) + +#define ZIO_CLAIM_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_DVA_CLAIM) + +#define ZIO_IOCTL_PIPELINE \ + (ZIO_INTERLOCK_STAGES | \ + ZIO_STAGE_VDEV_IO_START | \ + ZIO_STAGE_VDEV_IO_ASSESS) + +#define ZIO_BLOCKING_STAGES \ + (ZIO_STAGE_DVA_ALLOCATE | \ + ZIO_STAGE_DVA_CLAIM | \ + ZIO_STAGE_VDEV_IO_START) + +extern void zio_inject_init(void); +extern void zio_inject_fini(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZIO_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zio_priority.h +++ linux-aws-4.15.0/zfs/include/sys/zio_priority.h @@ -0,0 +1,39 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ +#ifndef _ZIO_PRIORITY_H +#define _ZIO_PRIORITY_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum zio_priority { + ZIO_PRIORITY_SYNC_READ, + ZIO_PRIORITY_SYNC_WRITE, /* ZIL */ + ZIO_PRIORITY_ASYNC_READ, /* prefetch */ + ZIO_PRIORITY_ASYNC_WRITE, /* spa_sync() */ + ZIO_PRIORITY_SCRUB, /* asynchronous scrub/resilver reads */ + ZIO_PRIORITY_NUM_QUEUEABLE, + ZIO_PRIORITY_NOW, /* non-queued i/os (e.g. free) */ +} zio_priority_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _ZIO_PRIORITY_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zpl.h +++ linux-aws-4.15.0/zfs/include/sys/zpl.h @@ -0,0 +1,185 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011, Lawrence Livermore National Security, LLC. + */ + +#ifndef _SYS_ZPL_H +#define _SYS_ZPL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* zpl_inode.c */ +extern void zpl_vap_init(vattr_t *vap, struct inode *dir, + zpl_umode_t mode, cred_t *cr); + +extern const struct inode_operations zpl_inode_operations; +extern const struct inode_operations zpl_dir_inode_operations; +extern const struct inode_operations zpl_symlink_inode_operations; +extern const struct inode_operations zpl_special_inode_operations; +extern dentry_operations_t zpl_dentry_operations; + +/* zpl_file.c */ +extern ssize_t zpl_read_common(struct inode *ip, const char *buf, + size_t len, loff_t *ppos, uio_seg_t segment, int flags, + cred_t *cr); +extern ssize_t zpl_write_common(struct inode *ip, const char *buf, + size_t len, loff_t *ppos, uio_seg_t segment, int flags, + cred_t *cr); +#if defined(HAVE_FILE_FALLOCATE) || defined(HAVE_INODE_FALLOCATE) +extern long zpl_fallocate_common(struct inode *ip, int mode, + loff_t offset, loff_t len); +#endif /* defined(HAVE_FILE_FALLOCATE) || defined(HAVE_INODE_FALLOCATE) */ + +extern const struct address_space_operations zpl_address_space_operations; +extern const struct file_operations zpl_file_operations; +extern const struct file_operations zpl_dir_file_operations; + +/* zpl_super.c */ +extern void zpl_prune_sb(int64_t nr_to_scan, void *arg); + +extern const struct super_operations zpl_super_operations; +extern const struct export_operations zpl_export_operations; +extern struct file_system_type zpl_fs_type; + +/* zpl_xattr.c */ +extern ssize_t zpl_xattr_list(struct dentry *dentry, char *buf, size_t size); +extern int zpl_xattr_security_init(struct inode *ip, struct inode *dip, + const struct qstr *qstr); +#if defined(CONFIG_FS_POSIX_ACL) +extern int zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type); +extern struct posix_acl *zpl_get_acl(struct inode *ip, int type); +#if !defined(HAVE_GET_ACL) +#if defined(HAVE_CHECK_ACL_WITH_FLAGS) +extern int zpl_check_acl(struct inode *inode, int mask, unsigned int flags); +#elif defined(HAVE_CHECK_ACL) +extern int zpl_check_acl(struct inode *inode, int mask); +#elif defined(HAVE_PERMISSION_WITH_NAMEIDATA) +extern int zpl_permission(struct inode *ip, int mask, struct nameidata *nd); +#elif defined(HAVE_PERMISSION) +extern int zpl_permission(struct inode *ip, int mask); +#endif /* HAVE_CHECK_ACL | HAVE_PERMISSION */ +#endif /* HAVE_GET_ACL */ + +extern int zpl_init_acl(struct inode *ip, struct inode *dir); +extern int zpl_chmod_acl(struct inode *ip); +#else +static inline int +zpl_init_acl(struct inode *ip, struct inode *dir) +{ + return (0); +} + +static inline int +zpl_chmod_acl(struct inode *ip) +{ + return (0); +} +#endif /* CONFIG_FS_POSIX_ACL */ + +extern xattr_handler_t *zpl_xattr_handlers[]; + +/* zpl_ctldir.c */ +extern const struct file_operations zpl_fops_root; +extern const struct inode_operations zpl_ops_root; + +extern const struct file_operations zpl_fops_snapdir; +extern const struct inode_operations zpl_ops_snapdir; +#ifdef HAVE_AUTOMOUNT +extern const struct dentry_operations zpl_dops_snapdirs; +#else +extern const struct inode_operations zpl_ops_snapdirs; +#endif /* HAVE_AUTOMOUNT */ + +extern const struct file_operations zpl_fops_shares; +extern const struct inode_operations zpl_ops_shares; + +#if defined(HAVE_VFS_ITERATE) || defined(HAVE_VFS_ITERATE_SHARED) + +#define DIR_CONTEXT_INIT(_dirent, _actor, _pos) { \ + .actor = _actor, \ + .pos = _pos, \ +} + +#else + +typedef struct dir_context { + void *dirent; + const filldir_t actor; + loff_t pos; +} dir_context_t; + +#define DIR_CONTEXT_INIT(_dirent, _actor, _pos) { \ + .dirent = _dirent, \ + .actor = _actor, \ + .pos = _pos, \ +} + +static inline bool +dir_emit(struct dir_context *ctx, const char *name, int namelen, + uint64_t ino, unsigned type) +{ + return (!ctx->actor(ctx->dirent, name, namelen, ctx->pos, ino, type)); +} + +static inline bool +dir_emit_dot(struct file *file, struct dir_context *ctx) +{ + return (ctx->actor(ctx->dirent, ".", 1, ctx->pos, + file_inode(file)->i_ino, DT_DIR) == 0); +} + +static inline bool +dir_emit_dotdot(struct file *file, struct dir_context *ctx) +{ + return (ctx->actor(ctx->dirent, "..", 2, ctx->pos, + parent_ino(file_dentry(file)), DT_DIR) == 0); +} + +static inline bool +dir_emit_dots(struct file *file, struct dir_context *ctx) +{ + if (ctx->pos == 0) { + if (!dir_emit_dot(file, ctx)) + return (false); + ctx->pos = 1; + } + if (ctx->pos == 1) { + if (!dir_emit_dotdot(file, ctx)) + return (false); + ctx->pos = 2; + } + return (true); +} +#endif /* HAVE_VFS_ITERATE */ + +#endif /* _SYS_ZPL_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zrlock.h +++ linux-aws-4.15.0/zfs/include/sys/zrlock.h @@ -0,0 +1,63 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015 by Delphix. All rights reserved. + */ + +#ifndef _SYS_ZRLOCK_H +#define _SYS_ZRLOCK_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct zrlock { + kmutex_t zr_mtx; + volatile int32_t zr_refcount; + kcondvar_t zr_cv; + uint16_t zr_pad; +#ifdef ZFS_DEBUG + kthread_t *zr_owner; + const char *zr_caller; +#endif +} zrlock_t; + +extern void zrl_init(zrlock_t *); +extern void zrl_destroy(zrlock_t *); +#define zrl_add(_z) zrl_add_impl((_z), __func__) +extern void zrl_add_impl(zrlock_t *, const char *); +extern void zrl_remove(zrlock_t *); +extern int zrl_tryenter(zrlock_t *); +extern void zrl_exit(zrlock_t *); +extern int zrl_is_zero(zrlock_t *); +extern int zrl_is_locked(zrlock_t *); +#ifdef ZFS_DEBUG +extern kthread_t *zrl_owner(zrlock_t *); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_ZRLOCK_H */ --- linux-aws-4.15.0.orig/zfs/include/sys/zvol.h +++ linux-aws-4.15.0/zfs/include/sys/zvol.h @@ -0,0 +1,62 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + */ + +#ifndef _SYS_ZVOL_H +#define _SYS_ZVOL_H + +#include + +#define ZVOL_OBJ 1ULL +#define ZVOL_ZAP_OBJ 2ULL + +#define SPEC_MAXOFFSET_T ((1LL << ((NBBY * sizeof (daddr32_t)) + \ + DEV_BSHIFT - 1)) - 1) + +extern void zvol_create_minors(spa_t *spa, const char *name, boolean_t async); +extern void zvol_remove_minors(spa_t *spa, const char *name, boolean_t async); +extern void zvol_rename_minors(spa_t *spa, const char *oldname, + const char *newname, boolean_t async); + +#ifdef _KERNEL +typedef struct zvol_state zvol_state_t; + +extern int zvol_check_volsize(uint64_t volsize, uint64_t blocksize); +extern int zvol_check_volblocksize(const char *name, uint64_t volblocksize); +extern int zvol_get_stats(objset_t *os, nvlist_t *nv); +extern boolean_t zvol_is_zvol(const char *); +extern void zvol_create_cb(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx); +extern int zvol_set_volsize(const char *, uint64_t); +extern int zvol_set_volblocksize(const char *, uint64_t); +extern int zvol_set_snapdev(const char *, zprop_source_t, uint64_t); +extern int zvol_set_volmode(const char *, zprop_source_t, uint64_t); +extern zvol_state_t *zvol_suspend(const char *); +extern int zvol_resume(zvol_state_t *); +extern void *zvol_tag(zvol_state_t *); + +extern int zvol_init(void); +extern void zvol_fini(void); +#endif /* _KERNEL */ +#endif /* _SYS_ZVOL_H */ --- linux-aws-4.15.0.orig/zfs/include/zfeature_common.h +++ linux-aws-4.15.0/zfs/include/zfeature_common.h @@ -0,0 +1,104 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + */ + +#ifndef _ZFEATURE_COMMON_H +#define _ZFEATURE_COMMON_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct zfeature_info; + +typedef enum spa_feature { + SPA_FEATURE_NONE = -1, + SPA_FEATURE_ASYNC_DESTROY, + SPA_FEATURE_EMPTY_BPOBJ, + SPA_FEATURE_LZ4_COMPRESS, + SPA_FEATURE_MULTI_VDEV_CRASH_DUMP, + SPA_FEATURE_SPACEMAP_HISTOGRAM, + SPA_FEATURE_ENABLED_TXG, + SPA_FEATURE_HOLE_BIRTH, + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_EMBEDDED_DATA, + SPA_FEATURE_BOOKMARKS, + SPA_FEATURE_FS_SS_LIMIT, + SPA_FEATURE_LARGE_BLOCKS, + SPA_FEATURE_LARGE_DNODE, + SPA_FEATURE_SHA512, + SPA_FEATURE_SKEIN, + SPA_FEATURE_EDONR, + SPA_FEATURE_USEROBJ_ACCOUNTING, + SPA_FEATURES +} spa_feature_t; + +#define SPA_FEATURE_DISABLED (-1ULL) + +typedef enum zfeature_flags { + /* Can open pool readonly even if this feature is not supported. */ + ZFEATURE_FLAG_READONLY_COMPAT = (1 << 0), + /* Is this feature necessary to read the MOS? */ + ZFEATURE_FLAG_MOS = (1 << 1), + /* Activate this feature at the same time it is enabled. */ + ZFEATURE_FLAG_ACTIVATE_ON_ENABLE = (1 << 2), + /* Each dataset has a field set if it has ever used this feature. */ + ZFEATURE_FLAG_PER_DATASET = (1 << 3) +} zfeature_flags_t; + +typedef struct zfeature_info { + spa_feature_t fi_feature; + const char *fi_uname; /* User-facing feature name */ + const char *fi_guid; /* On-disk feature identifier */ + const char *fi_desc; /* Feature description */ + zfeature_flags_t fi_flags; + /* array of dependencies, terminated by SPA_FEATURE_NONE */ + const spa_feature_t *fi_depends; +} zfeature_info_t; + +typedef int (zfeature_func_t)(zfeature_info_t *, void *); + +#define ZFS_FEATURE_DEBUG + +extern zfeature_info_t spa_feature_table[SPA_FEATURES]; + +extern boolean_t zfeature_is_valid_guid(const char *); + +extern boolean_t zfeature_is_supported(const char *); +extern int zfeature_lookup_name(const char *, spa_feature_t *); +extern boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t); + +extern void zpool_feature_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFEATURE_COMMON_H */ --- linux-aws-4.15.0.orig/zfs/include/zfs_comutil.h +++ linux-aws-4.15.0/zfs/include/zfs_comutil.h @@ -0,0 +1,48 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#ifndef _ZFS_COMUTIL_H +#define _ZFS_COMUTIL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern boolean_t zfs_allocatable_devs(nvlist_t *); +extern void zpool_get_rewind_policy(nvlist_t *, zpool_rewind_policy_t *); + +extern int zfs_zpl_version_map(int spa_version); +extern int zfs_spa_version_map(int zpl_version); +#define ZFS_NUM_LEGACY_HISTORY_EVENTS 41 +extern const char *zfs_history_event_names[ZFS_NUM_LEGACY_HISTORY_EVENTS]; + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_COMUTIL_H */ --- linux-aws-4.15.0.orig/zfs/include/zfs_deleg.h +++ linux-aws-4.15.0/zfs/include/zfs_deleg.h @@ -0,0 +1,93 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2010 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _ZFS_DELEG_H +#define _ZFS_DELEG_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZFS_DELEG_SET_NAME_CHR '@' /* set name lead char */ +#define ZFS_DELEG_FIELD_SEP_CHR '$' /* field separator */ + +/* + * Max name length for a delegation attribute + */ +#define ZFS_MAX_DELEG_NAME 128 + +#define ZFS_DELEG_LOCAL 'l' +#define ZFS_DELEG_DESCENDENT 'd' +#define ZFS_DELEG_NA '-' + +typedef enum { + ZFS_DELEG_NOTE_CREATE, + ZFS_DELEG_NOTE_DESTROY, + ZFS_DELEG_NOTE_SNAPSHOT, + ZFS_DELEG_NOTE_ROLLBACK, + ZFS_DELEG_NOTE_CLONE, + ZFS_DELEG_NOTE_PROMOTE, + ZFS_DELEG_NOTE_RENAME, + ZFS_DELEG_NOTE_SEND, + ZFS_DELEG_NOTE_RECEIVE, + ZFS_DELEG_NOTE_ALLOW, + ZFS_DELEG_NOTE_USERPROP, + ZFS_DELEG_NOTE_MOUNT, + ZFS_DELEG_NOTE_SHARE, + ZFS_DELEG_NOTE_USERQUOTA, + ZFS_DELEG_NOTE_GROUPQUOTA, + ZFS_DELEG_NOTE_USERUSED, + ZFS_DELEG_NOTE_GROUPUSED, + ZFS_DELEG_NOTE_USEROBJQUOTA, + ZFS_DELEG_NOTE_GROUPOBJQUOTA, + ZFS_DELEG_NOTE_USEROBJUSED, + ZFS_DELEG_NOTE_GROUPOBJUSED, + ZFS_DELEG_NOTE_HOLD, + ZFS_DELEG_NOTE_RELEASE, + ZFS_DELEG_NOTE_DIFF, + ZFS_DELEG_NOTE_BOOKMARK, + ZFS_DELEG_NOTE_NONE +} zfs_deleg_note_t; + +typedef struct zfs_deleg_perm_tab { + char *z_perm; + zfs_deleg_note_t z_note; +} zfs_deleg_perm_tab_t; + +extern zfs_deleg_perm_tab_t zfs_deleg_perm_tab[]; + +int zfs_deleg_verify_nvlist(nvlist_t *nvlist); +void zfs_deleg_whokey(char *attr, zfs_deleg_who_type_t type, + char checkflag, void *data); +const char *zfs_deleg_canonicalize_perm(const char *perm); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_DELEG_H */ --- linux-aws-4.15.0.orig/zfs/include/zfs_fletcher.h +++ linux-aws-4.15.0/zfs/include/zfs_fletcher.h @@ -0,0 +1,154 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +#ifndef _ZFS_FLETCHER_H +#define _ZFS_FLETCHER_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * fletcher checksum functions + * + * Note: Fletcher checksum methods expect buffer size to be 4B aligned. This + * limitation stems from the algorithm design. Performing incremental checksum + * without said alignment would yield different results. Therefore, the code + * includes assertions for the size alignment. + * For compatibility, it is required that some code paths calculate checksum of + * non-aligned buffer sizes. For this purpose, `fletcher_4_native_varsize()` + * checksum method is added. This method will ignore last (size % 4) bytes of + * the data buffer. + */ +void fletcher_init(zio_cksum_t *); +void fletcher_2_native(const void *, uint64_t, const void *, zio_cksum_t *); +void fletcher_2_byteswap(const void *, uint64_t, const void *, zio_cksum_t *); +void fletcher_4_native(const void *, uint64_t, const void *, zio_cksum_t *); +int fletcher_2_incremental_native(void *, size_t, void *); +int fletcher_2_incremental_byteswap(void *, size_t, void *); +void fletcher_4_native_varsize(const void *, uint64_t, zio_cksum_t *); +void fletcher_4_byteswap(const void *, uint64_t, const void *, zio_cksum_t *); +int fletcher_4_incremental_native(void *, size_t, void *); +int fletcher_4_incremental_byteswap(void *, size_t, void *); +int fletcher_4_impl_set(const char *selector); +void fletcher_4_init(void); +void fletcher_4_fini(void); + + + +/* Internal fletcher ctx */ + +typedef struct zfs_fletcher_superscalar { + uint64_t v[4]; +} zfs_fletcher_superscalar_t; + +typedef struct zfs_fletcher_sse { + uint64_t v[2] __attribute__((aligned(16))); +} zfs_fletcher_sse_t; + +typedef struct zfs_fletcher_avx { + uint64_t v[4] __attribute__((aligned(32))); +} zfs_fletcher_avx_t; + +typedef struct zfs_fletcher_avx512 { + uint64_t v[8] __attribute__((aligned(64))); +} zfs_fletcher_avx512_t; + +typedef struct zfs_fletcher_aarch64_neon { + uint64_t v[2] __attribute__((aligned(16))); +} zfs_fletcher_aarch64_neon_t; + + +typedef union fletcher_4_ctx { + zio_cksum_t scalar; + zfs_fletcher_superscalar_t superscalar[4]; + +#if defined(HAVE_SSE2) || (defined(HAVE_SSE2) && defined(HAVE_SSSE3)) + zfs_fletcher_sse_t sse[4]; +#endif +#if defined(HAVE_AVX) && defined(HAVE_AVX2) + zfs_fletcher_avx_t avx[4]; +#endif +#if defined(__x86_64) && defined(HAVE_AVX512F) + zfs_fletcher_avx512_t avx512[4]; +#endif +#if defined(__aarch64__) + zfs_fletcher_aarch64_neon_t aarch64_neon[4]; +#endif +} fletcher_4_ctx_t; + +/* + * fletcher checksum struct + */ +typedef void (*fletcher_4_init_f)(fletcher_4_ctx_t *); +typedef void (*fletcher_4_fini_f)(fletcher_4_ctx_t *, zio_cksum_t *); +typedef void (*fletcher_4_compute_f)(fletcher_4_ctx_t *, + const void *, uint64_t); + +typedef struct fletcher_4_func { + fletcher_4_init_f init_native; + fletcher_4_fini_f fini_native; + fletcher_4_compute_f compute_native; + fletcher_4_init_f init_byteswap; + fletcher_4_fini_f fini_byteswap; + fletcher_4_compute_f compute_byteswap; + boolean_t (*valid)(void); + const char *name; +} fletcher_4_ops_t; + +extern const fletcher_4_ops_t fletcher_4_superscalar_ops; +extern const fletcher_4_ops_t fletcher_4_superscalar4_ops; + +#if defined(HAVE_SSE2) +extern const fletcher_4_ops_t fletcher_4_sse2_ops; +#endif + +#if defined(HAVE_SSE2) && defined(HAVE_SSSE3) +extern const fletcher_4_ops_t fletcher_4_ssse3_ops; +#endif + +#if defined(HAVE_AVX) && defined(HAVE_AVX2) +extern const fletcher_4_ops_t fletcher_4_avx2_ops; +#endif + +#if defined(__x86_64) && defined(HAVE_AVX512F) +extern const fletcher_4_ops_t fletcher_4_avx512f_ops; +#endif + +#if defined(__aarch64__) +extern const fletcher_4_ops_t fletcher_4_aarch64_neon_ops; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_FLETCHER_H */ --- linux-aws-4.15.0.orig/zfs/include/zfs_namecheck.h +++ linux-aws-4.15.0/zfs/include/zfs_namecheck.h @@ -0,0 +1,62 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#ifndef _ZFS_NAMECHECK_H +#define _ZFS_NAMECHECK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + NAME_ERR_LEADING_SLASH, /* name begins with leading slash */ + NAME_ERR_EMPTY_COMPONENT, /* name contains an empty component */ + NAME_ERR_TRAILING_SLASH, /* name ends with a slash */ + NAME_ERR_INVALCHAR, /* invalid character found */ + NAME_ERR_MULTIPLE_DELIMITERS, /* multiple '@'/'#' delimiters found */ + NAME_ERR_NOLETTER, /* pool doesn't begin with a letter */ + NAME_ERR_RESERVED, /* entire name is reserved */ + NAME_ERR_DISKLIKE, /* reserved disk name (c[0-9].*) */ + NAME_ERR_TOOLONG, /* name is too long */ + NAME_ERR_NO_AT, /* permission set is missing '@' */ +} namecheck_err_t; + +#define ZFS_PERMSET_MAXLEN 64 + +int pool_namecheck(const char *, namecheck_err_t *, char *); +int entity_namecheck(const char *, namecheck_err_t *, char *); +int dataset_namecheck(const char *, namecheck_err_t *, char *); +int mountpoint_namecheck(const char *, namecheck_err_t *); +int zfs_component_namecheck(const char *, namecheck_err_t *, char *); +int permset_namecheck(const char *, namecheck_err_t *, char *); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_NAMECHECK_H */ --- linux-aws-4.15.0.orig/zfs/include/zfs_prop.h +++ linux-aws-4.15.0/zfs/include/zfs_prop.h @@ -0,0 +1,129 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _ZFS_PROP_H +#define _ZFS_PROP_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * For index types (e.g. compression and checksum), we want the numeric value + * in the kernel, but the string value in userland. + */ +typedef enum { + PROP_TYPE_NUMBER, /* numeric value */ + PROP_TYPE_STRING, /* string value */ + PROP_TYPE_INDEX /* numeric value indexed by string */ +} zprop_type_t; + +typedef enum { + PROP_DEFAULT, + PROP_READONLY, + PROP_INHERIT, + /* + * ONETIME properties are a sort of conglomeration of READONLY + * and INHERIT. They can be set only during object creation, + * after that they are READONLY. If not explicitly set during + * creation, they can be inherited. + */ + PROP_ONETIME +} zprop_attr_t; + +typedef struct zfs_index { + const char *pi_name; + uint64_t pi_value; +} zprop_index_t; + +typedef struct { + const char *pd_name; /* human-readable property name */ + int pd_propnum; /* property number */ + zprop_type_t pd_proptype; /* string, boolean, index, number */ + const char *pd_strdefault; /* default for strings */ + uint64_t pd_numdefault; /* for boolean / index / number */ + zprop_attr_t pd_attr; /* default, readonly, inherit */ + int pd_types; /* bitfield of valid dataset types */ + /* fs | vol | snap; or pool */ + const char *pd_values; /* string telling acceptable values */ + const char *pd_colname; /* column header for "zfs list" */ + boolean_t pd_rightalign; /* column alignment for "zfs list" */ + boolean_t pd_visible; /* do we list this property with the */ + /* "zfs get" help message */ + const zprop_index_t *pd_table; /* for index properties, a table */ + /* defining the possible values */ + size_t pd_table_size; /* number of entries in pd_table[] */ +} zprop_desc_t; + +/* + * zfs dataset property functions + */ +void zfs_prop_init(void); +zprop_type_t zfs_prop_get_type(zfs_prop_t); +boolean_t zfs_prop_delegatable(zfs_prop_t prop); +zprop_desc_t *zfs_prop_get_table(void); + +/* + * zpool property functions + */ +void zpool_prop_init(void); +zprop_type_t zpool_prop_get_type(zpool_prop_t); +zprop_desc_t *zpool_prop_get_table(void); + +/* + * Common routines to initialize property tables + */ +void zprop_register_impl(int, const char *, zprop_type_t, uint64_t, + const char *, zprop_attr_t, int, const char *, const char *, + boolean_t, boolean_t, const zprop_index_t *); +void zprop_register_string(int, const char *, const char *, + zprop_attr_t attr, int, const char *, const char *); +void zprop_register_number(int, const char *, uint64_t, zprop_attr_t, int, + const char *, const char *); +void zprop_register_index(int, const char *, uint64_t, zprop_attr_t, int, + const char *, const char *, const zprop_index_t *); +void zprop_register_hidden(int, const char *, zprop_type_t, zprop_attr_t, + int, const char *); + +/* + * Common routines for zfs and zpool property management + */ +int zprop_iter_common(zprop_func, void *, boolean_t, boolean_t, zfs_type_t); +int zprop_name_to_prop(const char *, zfs_type_t); +int zprop_string_to_index(int, const char *, uint64_t *, zfs_type_t); +int zprop_index_to_string(int, uint64_t, const char **, zfs_type_t); +uint64_t zprop_random_value(int, uint64_t, zfs_type_t); +const char *zprop_values(int, zfs_type_t); +size_t zprop_width(int, boolean_t *, zfs_type_t); +boolean_t zprop_valid_for_type(int, zfs_type_t, boolean_t); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZFS_PROP_H */ --- linux-aws-4.15.0.orig/zfs/include/zpios-ctl.h +++ linux-aws-4.15.0/zfs/include/zpios-ctl.h @@ -0,0 +1,206 @@ +/* + * ZPIOS is a heavily modified version of the original PIOS test code. + * It is designed to have the test code running in the Linux kernel + * against ZFS while still being flexibly controlled from user space. + * + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * LLNL-CODE-403049 + * + * Original PIOS Test Code + * Copyright (C) 2004 Cluster File Systems, Inc. + * Written by Peter Braam + * Atul Vidwansa + * Milind Dumbare + * + * This file is part of ZFS on Linux. + * For details, see . + * + * ZPIOS 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. + * + * ZPIOS 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. + * + * You should have received a copy of the GNU General Public License along + * with ZPIOS. If not, see . + * + * Copyright (c) 2015, Intel Corporation. + */ + +#ifndef _ZPIOS_CTL_H +#define _ZPIOS_CTL_H + +/* + * Contains shared definitions which both the userspace + * and kernelspace portions of zpios must agree on. + */ +#ifndef _KERNEL +#include +#endif + +#define ZPIOS_NAME "zpios" +#define ZPIOS_DEV "/dev/zpios" + +#define DMU_IO 0x01 + +#define DMU_WRITE 0x0001 +#define DMU_READ 0x0002 +#define DMU_VERIFY 0x0004 +#define DMU_REMOVE 0x0008 +#define DMU_FPP 0x0010 +#define DMU_WRITE_ZC 0x0020 /* Incompatible w/DMU_VERIFY */ +#define DMU_READ_ZC 0x0040 /* Incompatible w/DMU_VERIFY */ +#define DMU_WRITE_NOWAIT 0x0080 +#define DMU_READ_NOPF 0x0100 + +#define ZPIOS_NAME_SIZE 16 +#define ZPIOS_PATH_SIZE 128 + +#define PHASE_PRE_RUN "pre-run" +#define PHASE_PRE_CREATE "pre-create" +#define PHASE_PRE_WRITE "pre-write" +#define PHASE_PRE_READ "pre-read" +#define PHASE_PRE_REMOVE "pre-remove" +#define PHASE_POST_RUN "post-run" +#define PHASE_POST_CREATE "post-create" +#define PHASE_POST_WRITE "post-write" +#define PHASE_POST_READ "post-read" +#define PHASE_POST_REMOVE "post-remove" + +#define ZPIOS_CFG_MAGIC 0x87237190U +typedef struct zpios_cfg { + uint32_t cfg_magic; /* Unique magic */ + int32_t cfg_cmd; /* Config command */ + int32_t cfg_arg1; /* Config command arg 1 */ + int32_t cfg_rc1; /* Config response 1 */ +} zpios_cfg_t; + +typedef struct zpios_timespec { + uint32_t ts_sec; + uint32_t ts_nsec; +} zpios_timespec_t; + +typedef struct zpios_time { + zpios_timespec_t start; + zpios_timespec_t stop; + zpios_timespec_t delta; +} zpios_time_t; + +typedef struct zpios_stats { + zpios_time_t total_time; + zpios_time_t cr_time; + zpios_time_t rm_time; + zpios_time_t wr_time; + zpios_time_t rd_time; + uint64_t wr_data; + uint64_t wr_chunks; + uint64_t rd_data; + uint64_t rd_chunks; +} zpios_stats_t; + +#define ZPIOS_CMD_MAGIC 0x49715385U +typedef struct zpios_cmd { + uint32_t cmd_magic; /* Unique magic */ + uint32_t cmd_id; /* Run ID */ + char cmd_pool[ZPIOS_NAME_SIZE]; /* Pool name */ + uint64_t cmd_chunk_size; /* Chunk size */ + uint32_t cmd_thread_count; /* Thread count */ + uint32_t cmd_region_count; /* Region count */ + uint64_t cmd_region_size; /* Region size */ + uint64_t cmd_offset; /* Region offset */ + uint32_t cmd_region_noise; /* Region noise */ + uint32_t cmd_chunk_noise; /* Chunk noise */ + uint32_t cmd_thread_delay; /* Thread delay */ + uint32_t cmd_flags; /* Test flags */ + uint32_t cmd_block_size; /* ZFS block size */ + char cmd_pre[ZPIOS_PATH_SIZE]; /* Pre-exec hook */ + char cmd_post[ZPIOS_PATH_SIZE]; /* Post-exec hook */ + char cmd_log[ZPIOS_PATH_SIZE]; /* Requested log dir */ + uint64_t cmd_data_size; /* Opaque data size */ + char cmd_data_str[0]; /* Opaque data region */ +} zpios_cmd_t; + +/* Valid ioctls */ +#define ZPIOS_CFG _IOWR('f', 101, zpios_cfg_t) +#define ZPIOS_CMD _IOWR('f', 102, zpios_cmd_t) + +/* Valid configuration commands */ +#define ZPIOS_CFG_BUFFER_CLEAR 0x001 /* Clear text buffer */ +#define ZPIOS_CFG_BUFFER_SIZE 0x002 /* Resize text buffer */ + +#ifndef NSEC_PER_SEC +#define NSEC_PER_SEC 1000000000L +#endif + +static inline +void +zpios_timespec_normalize(zpios_timespec_t *ts, uint32_t sec, uint32_t nsec) +{ + while (nsec >= NSEC_PER_SEC) { + nsec -= NSEC_PER_SEC; + sec++; + } + while (((int32_t)nsec) < 0) { + nsec += NSEC_PER_SEC; + sec--; + } + ts->ts_sec = sec; + ts->ts_nsec = nsec; +} + +static inline +zpios_timespec_t +zpios_timespec_add(zpios_timespec_t lhs, zpios_timespec_t rhs) +{ + zpios_timespec_t ts_delta; + zpios_timespec_normalize(&ts_delta, lhs.ts_sec + rhs.ts_sec, + lhs.ts_nsec + rhs.ts_nsec); + return (ts_delta); +} + +static inline +zpios_timespec_t +zpios_timespec_sub(zpios_timespec_t lhs, zpios_timespec_t rhs) +{ + zpios_timespec_t ts_delta; + zpios_timespec_normalize(&ts_delta, lhs.ts_sec - rhs.ts_sec, + lhs.ts_nsec - rhs.ts_nsec); + return (ts_delta); +} + +#ifdef _KERNEL + +static inline +zpios_timespec_t +zpios_timespec_now(void) +{ + zpios_timespec_t zts_now; + struct timespec ts_now; + + ts_now = current_kernel_time(); + zts_now.ts_sec = ts_now.tv_sec; + zts_now.ts_nsec = ts_now.tv_nsec; + + return (zts_now); +} + +#else + +static inline +double +zpios_timespec_to_double(zpios_timespec_t ts) +{ + return + ((double)(ts.ts_sec) + + ((double)(ts.ts_nsec) / (double)(NSEC_PER_SEC))); +} + +#endif /* _KERNEL */ + +#endif /* _ZPIOS_CTL_H */ --- linux-aws-4.15.0.orig/zfs/include/zpios-internal.h +++ linux-aws-4.15.0/zfs/include/zpios-internal.h @@ -0,0 +1,115 @@ +/* + * ZPIOS is a heavily modified version of the original PIOS test code. + * It is designed to have the test code running in the Linux kernel + * against ZFS while still being flexibly controlled from user space. + * + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * LLNL-CODE-403049 + * + * Original PIOS Test Code + * Copyright (C) 2004 Cluster File Systems, Inc. + * Written by Peter Braam + * Atul Vidwansa + * Milind Dumbare + * + * This file is part of ZFS on Linux. + * For details, see . + * + * ZPIOS 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. + * + * ZPIOS 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. + * + * You should have received a copy of the GNU General Public License along + * with ZPIOS. If not, see . + * + * Copyright (c) 2015, Intel Corporation. + */ + +#ifndef _ZPIOS_INTERNAL_H +#define _ZPIOS_INTERNAL_H + +#include "zpios-ctl.h" + +#define OBJ_SIZE 64 + +struct run_args; + +typedef struct dmu_obj { + objset_t *os; + uint64_t obj; +} dmu_obj_t; + +/* thread doing the IO data */ +typedef struct thread_data { + struct run_args *run_args; + int thread_no; + int rc; + zpios_stats_t stats; + kmutex_t lock; +} thread_data_t; + +/* region for IO data */ +typedef struct zpios_region { + __u64 wr_offset; + __u64 rd_offset; + __u64 init_offset; + __u64 max_offset; + dmu_obj_t obj; + zpios_stats_t stats; + kmutex_t lock; +} zpios_region_t; + +/* arguments for one run */ +typedef struct run_args { + /* Config args */ + int id; + char pool[ZPIOS_NAME_SIZE]; + __u64 chunk_size; + __u32 thread_count; + __u32 region_count; + __u64 region_size; + __u64 offset; + __u32 region_noise; + __u32 chunk_noise; + __u32 thread_delay; + __u32 flags; + __u32 block_size; + char pre[ZPIOS_PATH_SIZE]; + char post[ZPIOS_PATH_SIZE]; + char log[ZPIOS_PATH_SIZE]; + + /* Control data */ + objset_t *os; + wait_queue_head_t waitq; + volatile uint64_t threads_done; + kmutex_t lock_work; + kmutex_t lock_ctl; + __u32 region_next; + + /* Results data */ + struct file *file; + zpios_stats_t stats; + + thread_data_t **threads; + zpios_region_t regions[0]; /* Must be last element */ +} run_args_t; + +#define ZPIOS_INFO_BUFFER_SIZE 65536 +#define ZPIOS_INFO_BUFFER_REDZONE 1024 + +typedef struct zpios_info { + spinlock_t info_lock; + int info_size; + char *info_buffer; + char *info_head; /* Internal kernel use only */ +} zpios_info_t; + +#endif /* _ZPIOS_INTERNAL_H */ --- linux-aws-4.15.0.orig/zfs/module/Makefile.in +++ linux-aws-4.15.0/zfs/module/Makefile.in @@ -0,0 +1,83 @@ +subdir-m += avl +subdir-m += nvpair +subdir-m += unicode +subdir-m += zcommon +subdir-m += zfs +subdir-m += zpios +subdir-m += icp + +INSTALL_MOD_DIR ?= extra + +ZFS_MODULE_CFLAGS += -include @SPL_OBJ@/spl_config.h +ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h +ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ +@CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include +@CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@ +export ZFS_MODULE_CFLAGS + +SUBDIR_TARGETS = icp + +modules: + @# Make the exported SPL symbols available to these modules. + @# They may be in the root of SPL_OBJ when building against + @# installed devel headers, or they may be in the module + @# subdirectory when building against the spl source tree. + @if [ -f @SPL_OBJ@/@SPL_SYMBOLS@ ]; then \ + cp @SPL_OBJ@/@SPL_SYMBOLS@ .; \ + elif [ -f @SPL_OBJ@/module/@SPL_SYMBOLS@ ]; then \ + cp @SPL_OBJ@/module/@SPL_SYMBOLS@ .; \ + else \ + echo -e "\n" \ + "*** Missing spl symbols ensure you have built the spl:\n" \ + "*** - @SPL_OBJ@/@SPL_SYMBOLS@, or\n" \ + "*** - @SPL_OBJ@/module/@SPL_SYMBOLS@\n"; \ + exit 1; \ + fi + list='$(SUBDIR_TARGETS)'; for targetdir in $$list; do \ + $(MAKE) -C $$targetdir; \ + done + $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_ZFS=m $@ + +clean: + @# Only cleanup the kernel build directories when CONFIG_KERNEL + @# is defined. This indicates that kernel modules should be built. +@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@ + + if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi + if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi + if [ -f Module.markers ]; then $(RM) Module.markers; fi + +modules_install: + @# Install the kernel modules + $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` $@ \ + INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \ + INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \ + KERNELRELEASE=@LINUX_VERSION@ + @# Remove extraneous build products when packaging + kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ + if [ -n "$(DESTDIR)" ]; then \ + find $$kmoddir -name 'modules.*' | xargs $(RM); \ + fi + sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \ + if [ -f $$sysmap ]; then \ + depmod -ae -F $$sysmap @LINUX_VERSION@; \ + fi + +modules_uninstall: + @# Uninstall the kernel modules + kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@ + list='$(subdir-m)'; for subdir in $$list; do \ + $(RM) -R $$kmoddir/$(INSTALL_MOD_DIR)/$$subdir; \ + done + +distdir: + list='$(subdir-m)'; for subdir in $$list; do \ + (cd @top_srcdir@/module && find $$subdir -name '*.c' -o -name '*.h' -o -name '*.S' |\ + xargs cp --parents -t $$distdir); \ + done + +distclean maintainer-clean: clean +install: modules_install +uninstall: modules_uninstall +all: modules +check: --- linux-aws-4.15.0.orig/zfs/module/avl/Makefile.in +++ linux-aws-4.15.0/zfs/module/avl/Makefile.in @@ -0,0 +1,10 @@ +src = @abs_top_srcdir@/module/avl +obj = @abs_builddir@ + +MODULE := zavl + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += avl.o --- linux-aws-4.15.0.orig/zfs/module/avl/avl.c +++ linux-aws-4.15.0/zfs/module/avl/avl.c @@ -0,0 +1,1096 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +/* + * AVL - generic AVL tree implementation for kernel use + * + * A complete description of AVL trees can be found in many CS textbooks. + * + * Here is a very brief overview. An AVL tree is a binary search tree that is + * almost perfectly balanced. By "almost" perfectly balanced, we mean that at + * any given node, the left and right subtrees are allowed to differ in height + * by at most 1 level. + * + * This relaxation from a perfectly balanced binary tree allows doing + * insertion and deletion relatively efficiently. Searching the tree is + * still a fast operation, roughly O(log(N)). + * + * The key to insertion and deletion is a set of tree manipulations called + * rotations, which bring unbalanced subtrees back into the semi-balanced state. + * + * This implementation of AVL trees has the following peculiarities: + * + * - The AVL specific data structures are physically embedded as fields + * in the "using" data structures. To maintain generality the code + * must constantly translate between "avl_node_t *" and containing + * data structure "void *"s by adding/subtracting the avl_offset. + * + * - Since the AVL data is always embedded in other structures, there is + * no locking or memory allocation in the AVL routines. This must be + * provided for by the enclosing data structure's semantics. Typically, + * avl_insert()/_add()/_remove()/avl_insert_here() require some kind of + * exclusive write lock. Other operations require a read lock. + * + * - The implementation uses iteration instead of explicit recursion, + * since it is intended to run on limited size kernel stacks. Since + * there is no recursion stack present to move "up" in the tree, + * there is an explicit "parent" link in the avl_node_t. + * + * - The left/right children pointers of a node are in an array. + * In the code, variables (instead of constants) are used to represent + * left and right indices. The implementation is written as if it only + * dealt with left handed manipulations. By changing the value assigned + * to "left", the code also works for right handed trees. The + * following variables/terms are frequently used: + * + * int left; // 0 when dealing with left children, + * // 1 for dealing with right children + * + * int left_heavy; // -1 when left subtree is taller at some node, + * // +1 when right subtree is taller + * + * int right; // will be the opposite of left (0 or 1) + * int right_heavy;// will be the opposite of left_heavy (-1 or 1) + * + * int direction; // 0 for "<" (ie. left child); 1 for ">" (right) + * + * Though it is a little more confusing to read the code, the approach + * allows using half as much code (and hence cache footprint) for tree + * manipulations and eliminates many conditional branches. + * + * - The avl_index_t is an opaque "cookie" used to find nodes at or + * adjacent to where a new value would be inserted in the tree. The value + * is a modified "avl_node_t *". The bottom bit (normally 0 for a + * pointer) is set to indicate if that the new node has a value greater + * than the value of the indicated "avl_node_t *". + * + * Note - in addition to userland (e.g. libavl and libutil) and the kernel + * (e.g. genunix), avl.c is compiled into ld.so and kmdb's genunix module, + * which each have their own compilation environments and subsequent + * requirements. Each of these environments must be considered when adding + * dependencies from avl.c. + */ + +#include +#include +#include +#include +#include + +/* + * Small arrays to translate between balance (or diff) values and child indices. + * + * Code that deals with binary tree data structures will randomly use + * left and right children when examining a tree. C "if()" statements + * which evaluate randomly suffer from very poor hardware branch prediction. + * In this code we avoid some of the branch mispredictions by using the + * following translation arrays. They replace random branches with an + * additional memory reference. Since the translation arrays are both very + * small the data should remain efficiently in cache. + */ +static const int avl_child2balance[2] = {-1, 1}; +static const int avl_balance2child[] = {0, 0, 1}; + + +/* + * Walk from one node to the previous valued node (ie. an infix walk + * towards the left). At any given node we do one of 2 things: + * + * - If there is a left child, go to it, then to it's rightmost descendant. + * + * - otherwise we return through parent nodes until we've come from a right + * child. + * + * Return Value: + * NULL - if at the end of the nodes + * otherwise next node + */ +void * +avl_walk(avl_tree_t *tree, void *oldnode, int left) +{ + size_t off = tree->avl_offset; + avl_node_t *node = AVL_DATA2NODE(oldnode, off); + int right = 1 - left; + int was_child; + + + /* + * nowhere to walk to if tree is empty + */ + if (node == NULL) + return (NULL); + + /* + * Visit the previous valued node. There are two possibilities: + * + * If this node has a left child, go down one left, then all + * the way right. + */ + if (node->avl_child[left] != NULL) { + for (node = node->avl_child[left]; + node->avl_child[right] != NULL; + node = node->avl_child[right]) + ; + /* + * Otherwise, return thru left children as far as we can. + */ + } else { + for (;;) { + was_child = AVL_XCHILD(node); + node = AVL_XPARENT(node); + if (node == NULL) + return (NULL); + if (was_child == right) + break; + } + } + + return (AVL_NODE2DATA(node, off)); +} + +/* + * Return the lowest valued node in a tree or NULL. + * (leftmost child from root of tree) + */ +void * +avl_first(avl_tree_t *tree) +{ + avl_node_t *node; + avl_node_t *prev = NULL; + size_t off = tree->avl_offset; + + for (node = tree->avl_root; node != NULL; node = node->avl_child[0]) + prev = node; + + if (prev != NULL) + return (AVL_NODE2DATA(prev, off)); + return (NULL); +} + +/* + * Return the highest valued node in a tree or NULL. + * (rightmost child from root of tree) + */ +void * +avl_last(avl_tree_t *tree) +{ + avl_node_t *node; + avl_node_t *prev = NULL; + size_t off = tree->avl_offset; + + for (node = tree->avl_root; node != NULL; node = node->avl_child[1]) + prev = node; + + if (prev != NULL) + return (AVL_NODE2DATA(prev, off)); + return (NULL); +} + +/* + * Access the node immediately before or after an insertion point. + * + * "avl_index_t" is a (avl_node_t *) with the bottom bit indicating a child + * + * Return value: + * NULL: no node in the given direction + * "void *" of the found tree node + */ +void * +avl_nearest(avl_tree_t *tree, avl_index_t where, int direction) +{ + int child = AVL_INDEX2CHILD(where); + avl_node_t *node = AVL_INDEX2NODE(where); + void *data; + size_t off = tree->avl_offset; + + if (node == NULL) { + ASSERT(tree->avl_root == NULL); + return (NULL); + } + data = AVL_NODE2DATA(node, off); + if (child != direction) + return (data); + + return (avl_walk(tree, data, direction)); +} + + +/* + * Search for the node which contains "value". The algorithm is a + * simple binary tree search. + * + * return value: + * NULL: the value is not in the AVL tree + * *where (if not NULL) is set to indicate the insertion point + * "void *" of the found tree node + */ +void * +avl_find(avl_tree_t *tree, const void *value, avl_index_t *where) +{ + avl_node_t *node; + avl_node_t *prev = NULL; + int child = 0; + int diff; + size_t off = tree->avl_offset; + + for (node = tree->avl_root; node != NULL; + node = node->avl_child[child]) { + + prev = node; + + diff = tree->avl_compar(value, AVL_NODE2DATA(node, off)); + ASSERT(-1 <= diff && diff <= 1); + if (diff == 0) { +#ifdef DEBUG + if (where != NULL) + *where = 0; +#endif + return (AVL_NODE2DATA(node, off)); + } + child = avl_balance2child[1 + diff]; + + } + + if (where != NULL) + *where = AVL_MKINDEX(prev, child); + + return (NULL); +} + + +/* + * Perform a rotation to restore balance at the subtree given by depth. + * + * This routine is used by both insertion and deletion. The return value + * indicates: + * 0 : subtree did not change height + * !0 : subtree was reduced in height + * + * The code is written as if handling left rotations, right rotations are + * symmetric and handled by swapping values of variables right/left[_heavy] + * + * On input balance is the "new" balance at "node". This value is either + * -2 or +2. + */ +static int +avl_rotation(avl_tree_t *tree, avl_node_t *node, int balance) +{ + int left = !(balance < 0); /* when balance = -2, left will be 0 */ + int right = 1 - left; + int left_heavy = balance >> 1; + int right_heavy = -left_heavy; + avl_node_t *parent = AVL_XPARENT(node); + avl_node_t *child = node->avl_child[left]; + avl_node_t *cright; + avl_node_t *gchild; + avl_node_t *gright; + avl_node_t *gleft; + int which_child = AVL_XCHILD(node); + int child_bal = AVL_XBALANCE(child); + + /* BEGIN CSTYLED */ + /* + * case 1 : node is overly left heavy, the left child is balanced or + * also left heavy. This requires the following rotation. + * + * (node bal:-2) + * / \ + * / \ + * (child bal:0 or -1) + * / \ + * / \ + * cright + * + * becomes: + * + * (child bal:1 or 0) + * / \ + * / \ + * (node bal:-1 or 0) + * / \ + * / \ + * cright + * + * we detect this situation by noting that child's balance is not + * right_heavy. + */ + /* END CSTYLED */ + if (child_bal != right_heavy) { + + /* + * compute new balance of nodes + * + * If child used to be left heavy (now balanced) we reduced + * the height of this sub-tree -- used in "return...;" below + */ + child_bal += right_heavy; /* adjust towards right */ + + /* + * move "cright" to be node's left child + */ + cright = child->avl_child[right]; + node->avl_child[left] = cright; + if (cright != NULL) { + AVL_SETPARENT(cright, node); + AVL_SETCHILD(cright, left); + } + + /* + * move node to be child's right child + */ + child->avl_child[right] = node; + AVL_SETBALANCE(node, -child_bal); + AVL_SETCHILD(node, right); + AVL_SETPARENT(node, child); + + /* + * update the pointer into this subtree + */ + AVL_SETBALANCE(child, child_bal); + AVL_SETCHILD(child, which_child); + AVL_SETPARENT(child, parent); + if (parent != NULL) + parent->avl_child[which_child] = child; + else + tree->avl_root = child; + + return (child_bal == 0); + } + + /* BEGIN CSTYLED */ + /* + * case 2 : When node is left heavy, but child is right heavy we use + * a different rotation. + * + * (node b:-2) + * / \ + * / \ + * / \ + * (child b:+1) + * / \ + * / \ + * (gchild b: != 0) + * / \ + * / \ + * gleft gright + * + * becomes: + * + * (gchild b:0) + * / \ + * / \ + * / \ + * (child b:?) (node b:?) + * / \ / \ + * / \ / \ + * gleft gright + * + * computing the new balances is more complicated. As an example: + * if gchild was right_heavy, then child is now left heavy + * else it is balanced + */ + /* END CSTYLED */ + gchild = child->avl_child[right]; + gleft = gchild->avl_child[left]; + gright = gchild->avl_child[right]; + + /* + * move gright to left child of node and + * + * move gleft to right child of node + */ + node->avl_child[left] = gright; + if (gright != NULL) { + AVL_SETPARENT(gright, node); + AVL_SETCHILD(gright, left); + } + + child->avl_child[right] = gleft; + if (gleft != NULL) { + AVL_SETPARENT(gleft, child); + AVL_SETCHILD(gleft, right); + } + + /* + * move child to left child of gchild and + * + * move node to right child of gchild and + * + * fixup parent of all this to point to gchild + */ + balance = AVL_XBALANCE(gchild); + gchild->avl_child[left] = child; + AVL_SETBALANCE(child, (balance == right_heavy ? left_heavy : 0)); + AVL_SETPARENT(child, gchild); + AVL_SETCHILD(child, left); + + gchild->avl_child[right] = node; + AVL_SETBALANCE(node, (balance == left_heavy ? right_heavy : 0)); + AVL_SETPARENT(node, gchild); + AVL_SETCHILD(node, right); + + AVL_SETBALANCE(gchild, 0); + AVL_SETPARENT(gchild, parent); + AVL_SETCHILD(gchild, which_child); + if (parent != NULL) + parent->avl_child[which_child] = gchild; + else + tree->avl_root = gchild; + + return (1); /* the new tree is always shorter */ +} + + +/* + * Insert a new node into an AVL tree at the specified (from avl_find()) place. + * + * Newly inserted nodes are always leaf nodes in the tree, since avl_find() + * searches out to the leaf positions. The avl_index_t indicates the node + * which will be the parent of the new node. + * + * After the node is inserted, a single rotation further up the tree may + * be necessary to maintain an acceptable AVL balance. + */ +void +avl_insert(avl_tree_t *tree, void *new_data, avl_index_t where) +{ + avl_node_t *node; + avl_node_t *parent = AVL_INDEX2NODE(where); + int old_balance; + int new_balance; + int which_child = AVL_INDEX2CHILD(where); + size_t off = tree->avl_offset; + + ASSERT(tree); +#ifdef _LP64 + ASSERT(((uintptr_t)new_data & 0x7) == 0); +#endif + + node = AVL_DATA2NODE(new_data, off); + + /* + * First, add the node to the tree at the indicated position. + */ + ++tree->avl_numnodes; + + node->avl_child[0] = NULL; + node->avl_child[1] = NULL; + + AVL_SETCHILD(node, which_child); + AVL_SETBALANCE(node, 0); + AVL_SETPARENT(node, parent); + if (parent != NULL) { + ASSERT(parent->avl_child[which_child] == NULL); + parent->avl_child[which_child] = node; + } else { + ASSERT(tree->avl_root == NULL); + tree->avl_root = node; + } + /* + * Now, back up the tree modifying the balance of all nodes above the + * insertion point. If we get to a highly unbalanced ancestor, we + * need to do a rotation. If we back out of the tree we are done. + * If we brought any subtree into perfect balance (0), we are also done. + */ + for (;;) { + node = parent; + if (node == NULL) + return; + + /* + * Compute the new balance + */ + old_balance = AVL_XBALANCE(node); + new_balance = old_balance + avl_child2balance[which_child]; + + /* + * If we introduced equal balance, then we are done immediately + */ + if (new_balance == 0) { + AVL_SETBALANCE(node, 0); + return; + } + + /* + * If both old and new are not zero we went + * from -1 to -2 balance, do a rotation. + */ + if (old_balance != 0) + break; + + AVL_SETBALANCE(node, new_balance); + parent = AVL_XPARENT(node); + which_child = AVL_XCHILD(node); + } + + /* + * perform a rotation to fix the tree and return + */ + (void) avl_rotation(tree, node, new_balance); +} + +/* + * Insert "new_data" in "tree" in the given "direction" either after or + * before (AVL_AFTER, AVL_BEFORE) the data "here". + * + * Insertions can only be done at empty leaf points in the tree, therefore + * if the given child of the node is already present we move to either + * the AVL_PREV or AVL_NEXT and reverse the insertion direction. Since + * every other node in the tree is a leaf, this always works. + * + * To help developers using this interface, we assert that the new node + * is correctly ordered at every step of the way in DEBUG kernels. + */ +void +avl_insert_here( + avl_tree_t *tree, + void *new_data, + void *here, + int direction) +{ + avl_node_t *node; + int child = direction; /* rely on AVL_BEFORE == 0, AVL_AFTER == 1 */ +#ifdef DEBUG + int diff; +#endif + + ASSERT(tree != NULL); + ASSERT(new_data != NULL); + ASSERT(here != NULL); + ASSERT(direction == AVL_BEFORE || direction == AVL_AFTER); + + /* + * If corresponding child of node is not NULL, go to the neighboring + * node and reverse the insertion direction. + */ + node = AVL_DATA2NODE(here, tree->avl_offset); + +#ifdef DEBUG + diff = tree->avl_compar(new_data, here); + ASSERT(-1 <= diff && diff <= 1); + ASSERT(diff != 0); + ASSERT(diff > 0 ? child == 1 : child == 0); +#endif + + if (node->avl_child[child] != NULL) { + node = node->avl_child[child]; + child = 1 - child; + while (node->avl_child[child] != NULL) { +#ifdef DEBUG + diff = tree->avl_compar(new_data, + AVL_NODE2DATA(node, tree->avl_offset)); + ASSERT(-1 <= diff && diff <= 1); + ASSERT(diff != 0); + ASSERT(diff > 0 ? child == 1 : child == 0); +#endif + node = node->avl_child[child]; + } +#ifdef DEBUG + diff = tree->avl_compar(new_data, + AVL_NODE2DATA(node, tree->avl_offset)); + ASSERT(-1 <= diff && diff <= 1); + ASSERT(diff != 0); + ASSERT(diff > 0 ? child == 1 : child == 0); +#endif + } + ASSERT(node->avl_child[child] == NULL); + + avl_insert(tree, new_data, AVL_MKINDEX(node, child)); +} + +/* + * Add a new node to an AVL tree. + */ +void +avl_add(avl_tree_t *tree, void *new_node) +{ + avl_index_t where = 0; + + /* + * This is unfortunate. We want to call panic() here, even for + * non-DEBUG kernels. In userland, however, we can't depend on anything + * in libc or else the rtld build process gets confused. So, all we can + * do in userland is resort to a normal ASSERT(). + */ + if (avl_find(tree, new_node, &where) != NULL) +#ifdef _KERNEL + panic("avl_find() succeeded inside avl_add()"); +#else + ASSERT(0); +#endif + avl_insert(tree, new_node, where); +} + +/* + * Delete a node from the AVL tree. Deletion is similar to insertion, but + * with 2 complications. + * + * First, we may be deleting an interior node. Consider the following subtree: + * + * d c c + * / \ / \ / \ + * b e b e b e + * / \ / \ / + * a c a a + * + * When we are deleting node (d), we find and bring up an adjacent valued leaf + * node, say (c), to take the interior node's place. In the code this is + * handled by temporarily swapping (d) and (c) in the tree and then using + * common code to delete (d) from the leaf position. + * + * Secondly, an interior deletion from a deep tree may require more than one + * rotation to fix the balance. This is handled by moving up the tree through + * parents and applying rotations as needed. The return value from + * avl_rotation() is used to detect when a subtree did not change overall + * height due to a rotation. + */ +void +avl_remove(avl_tree_t *tree, void *data) +{ + avl_node_t *delete; + avl_node_t *parent; + avl_node_t *node; + avl_node_t tmp; + int old_balance; + int new_balance; + int left; + int right; + int which_child; + size_t off = tree->avl_offset; + + ASSERT(tree); + + delete = AVL_DATA2NODE(data, off); + + /* + * Deletion is easiest with a node that has at most 1 child. + * We swap a node with 2 children with a sequentially valued + * neighbor node. That node will have at most 1 child. Note this + * has no effect on the ordering of the remaining nodes. + * + * As an optimization, we choose the greater neighbor if the tree + * is right heavy, otherwise the left neighbor. This reduces the + * number of rotations needed. + */ + if (delete->avl_child[0] != NULL && delete->avl_child[1] != NULL) { + + /* + * choose node to swap from whichever side is taller + */ + old_balance = AVL_XBALANCE(delete); + left = avl_balance2child[old_balance + 1]; + right = 1 - left; + + /* + * get to the previous value'd node + * (down 1 left, as far as possible right) + */ + for (node = delete->avl_child[left]; + node->avl_child[right] != NULL; + node = node->avl_child[right]) + ; + + /* + * create a temp placeholder for 'node' + * move 'node' to delete's spot in the tree + */ + tmp = *node; + + *node = *delete; + if (node->avl_child[left] == node) + node->avl_child[left] = &tmp; + + parent = AVL_XPARENT(node); + if (parent != NULL) + parent->avl_child[AVL_XCHILD(node)] = node; + else + tree->avl_root = node; + AVL_SETPARENT(node->avl_child[left], node); + AVL_SETPARENT(node->avl_child[right], node); + + /* + * Put tmp where node used to be (just temporary). + * It always has a parent and at most 1 child. + */ + delete = &tmp; + parent = AVL_XPARENT(delete); + parent->avl_child[AVL_XCHILD(delete)] = delete; + which_child = (delete->avl_child[1] != 0); + if (delete->avl_child[which_child] != NULL) + AVL_SETPARENT(delete->avl_child[which_child], delete); + } + + + /* + * Here we know "delete" is at least partially a leaf node. It can + * be easily removed from the tree. + */ + ASSERT(tree->avl_numnodes > 0); + --tree->avl_numnodes; + parent = AVL_XPARENT(delete); + which_child = AVL_XCHILD(delete); + if (delete->avl_child[0] != NULL) + node = delete->avl_child[0]; + else + node = delete->avl_child[1]; + + /* + * Connect parent directly to node (leaving out delete). + */ + if (node != NULL) { + AVL_SETPARENT(node, parent); + AVL_SETCHILD(node, which_child); + } + if (parent == NULL) { + tree->avl_root = node; + return; + } + parent->avl_child[which_child] = node; + + + /* + * Since the subtree is now shorter, begin adjusting parent balances + * and performing any needed rotations. + */ + do { + + /* + * Move up the tree and adjust the balance + * + * Capture the parent and which_child values for the next + * iteration before any rotations occur. + */ + node = parent; + old_balance = AVL_XBALANCE(node); + new_balance = old_balance - avl_child2balance[which_child]; + parent = AVL_XPARENT(node); + which_child = AVL_XCHILD(node); + + /* + * If a node was in perfect balance but isn't anymore then + * we can stop, since the height didn't change above this point + * due to a deletion. + */ + if (old_balance == 0) { + AVL_SETBALANCE(node, new_balance); + break; + } + + /* + * If the new balance is zero, we don't need to rotate + * else + * need a rotation to fix the balance. + * If the rotation doesn't change the height + * of the sub-tree we have finished adjusting. + */ + if (new_balance == 0) + AVL_SETBALANCE(node, new_balance); + else if (!avl_rotation(tree, node, new_balance)) + break; + } while (parent != NULL); +} + +#define AVL_REINSERT(tree, obj) \ + avl_remove((tree), (obj)); \ + avl_add((tree), (obj)) + +boolean_t +avl_update_lt(avl_tree_t *t, void *obj) +{ + void *neighbor; + + ASSERT(((neighbor = AVL_NEXT(t, obj)) == NULL) || + (t->avl_compar(obj, neighbor) <= 0)); + + neighbor = AVL_PREV(t, obj); + if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) < 0)) { + AVL_REINSERT(t, obj); + return (B_TRUE); + } + + return (B_FALSE); +} + +boolean_t +avl_update_gt(avl_tree_t *t, void *obj) +{ + void *neighbor; + + ASSERT(((neighbor = AVL_PREV(t, obj)) == NULL) || + (t->avl_compar(obj, neighbor) >= 0)); + + neighbor = AVL_NEXT(t, obj); + if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) > 0)) { + AVL_REINSERT(t, obj); + return (B_TRUE); + } + + return (B_FALSE); +} + +boolean_t +avl_update(avl_tree_t *t, void *obj) +{ + void *neighbor; + + neighbor = AVL_PREV(t, obj); + if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) < 0)) { + AVL_REINSERT(t, obj); + return (B_TRUE); + } + + neighbor = AVL_NEXT(t, obj); + if ((neighbor != NULL) && (t->avl_compar(obj, neighbor) > 0)) { + AVL_REINSERT(t, obj); + return (B_TRUE); + } + + return (B_FALSE); +} + +void +avl_swap(avl_tree_t *tree1, avl_tree_t *tree2) +{ + avl_node_t *temp_node; + ulong_t temp_numnodes; + + ASSERT3P(tree1->avl_compar, ==, tree2->avl_compar); + ASSERT3U(tree1->avl_offset, ==, tree2->avl_offset); + ASSERT3U(tree1->avl_size, ==, tree2->avl_size); + + temp_node = tree1->avl_root; + temp_numnodes = tree1->avl_numnodes; + tree1->avl_root = tree2->avl_root; + tree1->avl_numnodes = tree2->avl_numnodes; + tree2->avl_root = temp_node; + tree2->avl_numnodes = temp_numnodes; +} + +/* + * initialize a new AVL tree + */ +void +avl_create(avl_tree_t *tree, int (*compar) (const void *, const void *), + size_t size, size_t offset) +{ + ASSERT(tree); + ASSERT(compar); + ASSERT(size > 0); + ASSERT(size >= offset + sizeof (avl_node_t)); +#ifdef _LP64 + ASSERT((offset & 0x7) == 0); +#endif + + tree->avl_compar = compar; + tree->avl_root = NULL; + tree->avl_numnodes = 0; + tree->avl_size = size; + tree->avl_offset = offset; +} + +/* + * Delete a tree. + */ +/* ARGSUSED */ +void +avl_destroy(avl_tree_t *tree) +{ + ASSERT(tree); + ASSERT(tree->avl_numnodes == 0); + ASSERT(tree->avl_root == NULL); +} + + +/* + * Return the number of nodes in an AVL tree. + */ +ulong_t +avl_numnodes(avl_tree_t *tree) +{ + ASSERT(tree); + return (tree->avl_numnodes); +} + +boolean_t +avl_is_empty(avl_tree_t *tree) +{ + ASSERT(tree); + return (tree->avl_numnodes == 0); +} + +#define CHILDBIT (1L) + +/* + * Post-order tree walk used to visit all tree nodes and destroy the tree + * in post order. This is used for destroying a tree without paying any cost + * for rebalancing it. + * + * example: + * + * void *cookie = NULL; + * my_data_t *node; + * + * while ((node = avl_destroy_nodes(tree, &cookie)) != NULL) + * free(node); + * avl_destroy(tree); + * + * The cookie is really an avl_node_t to the current node's parent and + * an indication of which child you looked at last. + * + * On input, a cookie value of CHILDBIT indicates the tree is done. + */ +void * +avl_destroy_nodes(avl_tree_t *tree, void **cookie) +{ + avl_node_t *node; + avl_node_t *parent; + int child; + void *first; + size_t off = tree->avl_offset; + + /* + * Initial calls go to the first node or it's right descendant. + */ + if (*cookie == NULL) { + first = avl_first(tree); + + /* + * deal with an empty tree + */ + if (first == NULL) { + *cookie = (void *)CHILDBIT; + return (NULL); + } + + node = AVL_DATA2NODE(first, off); + parent = AVL_XPARENT(node); + goto check_right_side; + } + + /* + * If there is no parent to return to we are done. + */ + parent = (avl_node_t *)((uintptr_t)(*cookie) & ~CHILDBIT); + if (parent == NULL) { + if (tree->avl_root != NULL) { + ASSERT(tree->avl_numnodes == 1); + tree->avl_root = NULL; + tree->avl_numnodes = 0; + } + return (NULL); + } + + /* + * Remove the child pointer we just visited from the parent and tree. + */ + child = (uintptr_t)(*cookie) & CHILDBIT; + parent->avl_child[child] = NULL; + ASSERT(tree->avl_numnodes > 1); + --tree->avl_numnodes; + + /* + * If we just did a right child or there isn't one, go up to parent. + */ + if (child == 1 || parent->avl_child[1] == NULL) { + node = parent; + parent = AVL_XPARENT(parent); + goto done; + } + + /* + * Do parent's right child, then leftmost descendent. + */ + node = parent->avl_child[1]; + while (node->avl_child[0] != NULL) { + parent = node; + node = node->avl_child[0]; + } + + /* + * If here, we moved to a left child. It may have one + * child on the right (when balance == +1). + */ +check_right_side: + if (node->avl_child[1] != NULL) { + ASSERT(AVL_XBALANCE(node) == 1); + parent = node; + node = node->avl_child[1]; + ASSERT(node->avl_child[0] == NULL && + node->avl_child[1] == NULL); + } else { + ASSERT(AVL_XBALANCE(node) <= 0); + } + +done: + if (parent == NULL) { + *cookie = (void *)CHILDBIT; + ASSERT(node == tree->avl_root); + } else { + *cookie = (void *)((uintptr_t)parent | AVL_XCHILD(node)); + } + + return (AVL_NODE2DATA(node, off)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +static int __init +avl_init(void) +{ + return (0); +} + +static void __exit +avl_fini(void) +{ +} + +module_init(avl_init); +module_exit(avl_fini); + +MODULE_DESCRIPTION("Generic AVL tree implementation"); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE(ZFS_META_LICENSE); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); + +EXPORT_SYMBOL(avl_create); +EXPORT_SYMBOL(avl_find); +EXPORT_SYMBOL(avl_insert); +EXPORT_SYMBOL(avl_insert_here); +EXPORT_SYMBOL(avl_walk); +EXPORT_SYMBOL(avl_first); +EXPORT_SYMBOL(avl_last); +EXPORT_SYMBOL(avl_nearest); +EXPORT_SYMBOL(avl_add); +EXPORT_SYMBOL(avl_swap); +EXPORT_SYMBOL(avl_is_empty); +EXPORT_SYMBOL(avl_remove); +EXPORT_SYMBOL(avl_numnodes); +EXPORT_SYMBOL(avl_destroy_nodes); +EXPORT_SYMBOL(avl_destroy); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/Makefile.in +++ linux-aws-4.15.0/zfs/module/icp/Makefile.in @@ -0,0 +1,93 @@ +src = @abs_top_srcdir@/module/icp +obj = @abs_builddir@ + +MODULE := icp + +TARGET_ASM_DIR = @TARGET_ASM_DIR@ + +ifeq ($(TARGET_ASM_DIR), asm-x86_64) +ASM_SOURCES := asm-x86_64/aes/aeskey.o +ASM_SOURCES += asm-x86_64/aes/aes_amd64.o +ASM_SOURCES += asm-x86_64/aes/aes_intel.o +ASM_SOURCES += asm-x86_64/modes/gcm_intel.o +ASM_SOURCES += asm-x86_64/sha1/sha1-x86_64.o +ASM_SOURCES += asm-x86_64/sha2/sha256_impl.o +ASM_SOURCES += asm-x86_64/sha2/sha512_impl.o +endif + +ifeq ($(TARGET_ASM_DIR), asm-i386) +ASM_SOURCES := +endif + +ifeq ($(TARGET_ASM_DIR), asm-generic) +ASM_SOURCES := +endif + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ +EXTRA_AFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +ccflags-y += -I$(src)/include +asflags-y += -I$(src)/include +asflags-y += $(ZFS_MODULE_CFLAGS) + +$(MODULE)-objs += illumos-crypto.o +$(MODULE)-objs += api/kcf_cipher.o +$(MODULE)-objs += api/kcf_digest.o +$(MODULE)-objs += api/kcf_mac.o +$(MODULE)-objs += api/kcf_miscapi.o +$(MODULE)-objs += api/kcf_ctxops.o +$(MODULE)-objs += core/kcf_callprov.o +$(MODULE)-objs += core/kcf_prov_tabs.o +$(MODULE)-objs += core/kcf_sched.o +$(MODULE)-objs += core/kcf_mech_tabs.o +$(MODULE)-objs += core/kcf_prov_lib.o +$(MODULE)-objs += spi/kcf_spi.o +$(MODULE)-objs += io/aes.o +$(MODULE)-objs += io/edonr_mod.o +$(MODULE)-objs += io/sha1_mod.o +$(MODULE)-objs += io/sha2_mod.o +$(MODULE)-objs += io/skein_mod.o +$(MODULE)-objs += os/modhash.o +$(MODULE)-objs += os/modconf.o +$(MODULE)-objs += algs/modes/cbc.o +$(MODULE)-objs += algs/modes/ccm.o +$(MODULE)-objs += algs/modes/ctr.o +$(MODULE)-objs += algs/modes/ecb.o +$(MODULE)-objs += algs/modes/gcm.o +$(MODULE)-objs += algs/modes/modes.o +$(MODULE)-objs += algs/aes/aes_impl.o +$(MODULE)-objs += algs/aes/aes_modes.o +$(MODULE)-objs += algs/edonr/edonr.o +$(MODULE)-objs += algs/sha1/sha1.o +$(MODULE)-objs += algs/sha2/sha2.o +$(MODULE)-objs += algs/sha1/sha1.o +$(MODULE)-objs += algs/skein/skein.o +$(MODULE)-objs += algs/skein/skein_block.o +$(MODULE)-objs += algs/skein/skein_iv.o +$(MODULE)-objs += $(ASM_SOURCES) + +ICP_DIRS = \ + api \ + core \ + spi \ + io \ + os \ + algs \ + algs/aes \ + algs/edonr \ + algs/modes \ + algs/sha1 \ + algs/sha2 \ + algs/skein \ + asm-x86_64 \ + asm-x86_64/aes \ + asm-x86_64/modes \ + asm-x86_64/sha1 \ + asm-x86_64/sha2 \ + asm-i386 \ + asm-generic + +all: + mkdir -p $(ICP_DIRS) --- linux-aws-4.15.0.orig/zfs/module/icp/algs/aes/aes_impl.c +++ linux-aws-4.15.0/zfs/module/icp/algs/aes/aes_impl.c @@ -0,0 +1,1618 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#if defined(_KERNEL) && defined(__amd64) +#include + +#define KPREEMPT_DISABLE kfpu_begin() +#define KPREEMPT_ENABLE kfpu_end() + +#else +#define KPREEMPT_DISABLE +#define KPREEMPT_ENABLE +#endif /* _KERNEL */ + +#include +#include +#include +#include + + + +/* + * This file is derived from the file rijndael-alg-fst.c taken from the + * "optimized C code v3.0" on the "rijndael home page" + * http://www.iaik.tu-graz.ac.at/research/krypto/AES/old/~rijmen/rijndael/ + * pointed by the NIST web-site http://csrc.nist.gov/archive/aes/ + * + * The following note is from the original file: + */ + +/* + * rijndael-alg-fst.c + * + * @version 3.0 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto + * + * This code is hereby placed in the public domain. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(__amd64) + +/* These functions are used to execute amd64 instructions for AMD or Intel: */ +extern int rijndael_key_setup_enc_amd64(uint32_t rk[], + const uint32_t cipherKey[], int keyBits); +extern int rijndael_key_setup_dec_amd64(uint32_t rk[], + const uint32_t cipherKey[], int keyBits); +extern void aes_encrypt_amd64(const uint32_t rk[], int Nr, + const uint32_t pt[4], uint32_t ct[4]); +extern void aes_decrypt_amd64(const uint32_t rk[], int Nr, + const uint32_t ct[4], uint32_t pt[4]); + +/* These functions are used to execute Intel-specific AES-NI instructions: */ +extern int rijndael_key_setup_enc_intel(uint32_t rk[], + const uint32_t cipherKey[], uint64_t keyBits); +extern int rijndael_key_setup_dec_intel(uint32_t rk[], + const uint32_t cipherKey[], uint64_t keyBits); +extern void aes_encrypt_intel(const uint32_t rk[], int Nr, + const uint32_t pt[4], uint32_t ct[4]); +extern void aes_decrypt_intel(const uint32_t rk[], int Nr, + const uint32_t ct[4], uint32_t pt[4]); + +static int intel_aes_instructions_present(void); + +#define AES_ENCRYPT_IMPL(a, b, c, d, e) rijndael_encrypt(a, b, c, d, e) +#define AES_DECRYPT_IMPL(a, b, c, d, e) rijndael_decrypt(a, b, c, d, e) + +#else /* Generic C implementation */ + +#define AES_ENCRYPT_IMPL(a, b, c, d, e) rijndael_encrypt(a, b, c, d) +#define AES_DECRYPT_IMPL(a, b, c, d, e) rijndael_decrypt(a, b, c, d) +#define rijndael_key_setup_enc_raw rijndael_key_setup_enc +#endif /* __amd64 */ + +#if defined(_LITTLE_ENDIAN) && !defined(__amd64) +#define AES_BYTE_SWAP +#endif + + +#if !defined(__amd64) +/* + * Constant tables + */ + +/* + * Te0[x] = S [x].[02, 01, 01, 03]; + * Te1[x] = S [x].[03, 02, 01, 01]; + * Te2[x] = S [x].[01, 03, 02, 01]; + * Te3[x] = S [x].[01, 01, 03, 02]; + * Te4[x] = S [x].[01, 01, 01, 01]; + * + * Td0[x] = Si[x].[0e, 09, 0d, 0b]; + * Td1[x] = Si[x].[0b, 0e, 09, 0d]; + * Td2[x] = Si[x].[0d, 0b, 0e, 09]; + * Td3[x] = Si[x].[09, 0d, 0b, 0e]; + * Td4[x] = Si[x].[01, 01, 01, 01]; + */ + +/* Encrypt Sbox constants (for the substitute bytes operation) */ + +static const uint32_t Te0[256] = +{ + 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, + 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, + 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, + 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, + 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, + 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, + 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, + 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, + 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, + 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, + 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, + 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, + 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, + 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, + 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, + 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, + 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, + 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, + 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, + 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, + 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, + 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, + 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, + 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, + 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, + 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, + 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, + 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, + 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, + 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, + 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, + 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, + 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, + 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, + 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, + 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, + 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, + 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, + 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, + 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, + 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, + 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, + 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, + 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, + 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, + 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, + 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, + 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, + 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, + 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, + 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, + 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, + 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, + 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, + 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, + 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, + 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, + 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, + 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, + 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, + 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, + 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, + 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, + 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU +}; + + +static const uint32_t Te1[256] = +{ + 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, + 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, + 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, + 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, + 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, + 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, + 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, + 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, + 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, + 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, + 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, + 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, + 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, + 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, + 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, + 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, + 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, + 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, + 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, + 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, + 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, + 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, + 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, + 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, + 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, + 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, + 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, + 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, + 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, + 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, + 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, + 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, + 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, + 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, + 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, + 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, + 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, + 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, + 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, + 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, + 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, + 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, + 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, + 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, + 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, + 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, + 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, + 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, + 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, + 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, + 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, + 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, + 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, + 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, + 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, + 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, + 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, + 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, + 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, + 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, + 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, + 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, + 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, + 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U +}; + + +static const uint32_t Te2[256] = +{ + 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, + 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, + 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, + 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, + 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, + 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, + 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, + 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, + 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, + 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, + 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, + 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, + 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, + 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, + 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, + 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, + 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, + 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, + 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, + 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, + 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, + 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, + 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, + 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, + 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, + 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, + 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, + 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, + 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, + 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, + 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, + 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, + 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, + 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, + 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, + 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, + 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, + 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, + 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, + 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, + 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, + 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, + 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, + 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, + 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, + 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, + 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, + 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, + 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, + 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, + 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, + 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, + 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, + 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, + 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, + 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, + 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, + 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, + 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, + 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, + 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, + 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, + 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, + 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U +}; + + +static const uint32_t Te3[256] = +{ + 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, + 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, + 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, + 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, + 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, + 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, + 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, + 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, + 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, + 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, + 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, + 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, + 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, + 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, + 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, + 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, + 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, + 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, + 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, + 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, + 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, + 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, + 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, + 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, + 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, + 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, + 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, + 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, + 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, + 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, + 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, + 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, + 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, + 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, + 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, + 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, + 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, + 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, + 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, + 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, + 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, + 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, + 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, + 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, + 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, + 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, + 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, + 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, + 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, + 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, + 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, + 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, + 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, + 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, + 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, + 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, + 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, + 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, + 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, + 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, + 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, + 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, + 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, + 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU +}; + +static const uint32_t Te4[256] = +{ + 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU, + 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U, + 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU, + 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U, + 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU, + 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U, + 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU, + 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U, + 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U, + 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU, + 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U, + 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U, + 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U, + 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU, + 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U, + 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U, + 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU, + 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U, + 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U, + 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U, + 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU, + 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU, + 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U, + 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU, + 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU, + 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U, + 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU, + 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U, + 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU, + 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U, + 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U, + 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U, + 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU, + 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U, + 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU, + 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U, + 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU, + 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U, + 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U, + 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU, + 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU, + 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU, + 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U, + 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U, + 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU, + 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U, + 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU, + 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U, + 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU, + 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U, + 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU, + 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU, + 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U, + 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU, + 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U, + 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU, + 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U, + 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U, + 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U, + 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU, + 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU, + 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U, + 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU, + 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U +}; + +/* Decrypt Sbox constants (for the substitute bytes operation) */ + +static const uint32_t Td0[256] = +{ + 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, + 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, + 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, + 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, + 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, + 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, + 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, + 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, + 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, + 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, + 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, + 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, + 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, + 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, + 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, + 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, + 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, + 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, + 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, + 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, + 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, + 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, + 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, + 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, + 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, + 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, + 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, + 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, + 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, + 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, + 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, + 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, + 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, + 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, + 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, + 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, + 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, + 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, + 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, + 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, + 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, + 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, + 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, + 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, + 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, + 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, + 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, + 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, + 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, + 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, + 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, + 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, + 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, + 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, + 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, + 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, + 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, + 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, + 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, + 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, + 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, + 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, + 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, + 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U +}; + +static const uint32_t Td1[256] = +{ + 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, + 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, + 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, + 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, + 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, + 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, + 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, + 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, + 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, + 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, + 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, + 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, + 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, + 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, + 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, + 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, + 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, + 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, + 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, + 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, + 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, + 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, + 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, + 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, + 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, + 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, + 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, + 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, + 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, + 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, + 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, + 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, + 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, + 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, + 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, + 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, + 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, + 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, + 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, + 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, + 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, + 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, + 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, + 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, + 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, + 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, + 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, + 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, + 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, + 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, + 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, + 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, + 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, + 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, + 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, + 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, + 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, + 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, + 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, + 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, + 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, + 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, + 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, + 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U +}; + +static const uint32_t Td2[256] = +{ + 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, + 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, + 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, + 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, + 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, + 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, + 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, + 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, + 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, + 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, + 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, + 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, + 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, + 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, + 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, + 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, + 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, + 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, + 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, + 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, + 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, + 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, + 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, + 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, + 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, + 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, + 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, + 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, + 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, + 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, + 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, + 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, + 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, + 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, + 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, + 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, + 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, + 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, + 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, + 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, + 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, + 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, + 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, + 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, + 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, + 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, + 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, + 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, + 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, + 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, + 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, + 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, + 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, + 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, + 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, + 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, + 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, + 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, + 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, + 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, + 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, + 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, + 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, + 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U +}; + +static const uint32_t Td3[256] = +{ + 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, + 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, + 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, + 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, + 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, + 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, + 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, + 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, + 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, + 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, + 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, + 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, + 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, + 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, + 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, + 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, + 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, + 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, + 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, + 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, + 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, + 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, + 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, + 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, + 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, + 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, + 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, + 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, + 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, + 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, + 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, + 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, + 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, + 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, + 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, + 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, + 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, + 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, + 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, + 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, + 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, + 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, + 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, + 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, + 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, + 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, + 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, + 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, + 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, + 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, + 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, + 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, + 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, + 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, + 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, + 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, + 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, + 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, + 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, + 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, + 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, + 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, + 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, + 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U +}; + +static const uint32_t Td4[256] = +{ + 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U, + 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U, + 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU, + 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU, + 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U, + 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U, + 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U, + 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU, + 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U, + 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU, + 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU, + 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU, + 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U, + 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U, + 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U, + 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U, + 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U, + 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U, + 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU, + 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U, + 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U, + 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU, + 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U, + 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U, + 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U, + 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU, + 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U, + 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U, + 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU, + 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U, + 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U, + 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU, + 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U, + 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU, + 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU, + 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U, + 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U, + 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U, + 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U, + 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU, + 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U, + 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U, + 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU, + 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU, + 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU, + 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U, + 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU, + 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U, + 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U, + 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U, + 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U, + 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU, + 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U, + 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU, + 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU, + 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU, + 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU, + 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U, + 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU, + 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U, + 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU, + 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U, + 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U, + 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU +}; + +/* Rcon is Round Constant; used for encryption key expansion */ +static const uint32_t rcon[RC_LENGTH] = +{ + /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ + 0x01000000, 0x02000000, 0x04000000, 0x08000000, + 0x10000000, 0x20000000, 0x40000000, 0x80000000, + 0x1B000000, 0x36000000 +}; + + +/* + * Expand the cipher key into the encryption key schedule. + * + * Return the number of rounds for the given cipher key size. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk AES key schedule 32-bit array to be initialized + * cipherKey User key + * keyBits AES key size (128, 192, or 256 bits) + */ +static int +rijndael_key_setup_enc_raw(uint32_t rk[], const uint32_t cipherKey[], + int keyBits) +{ + int i = 0; + uint32_t temp; + + rk[0] = cipherKey[0]; + rk[1] = cipherKey[1]; + rk[2] = cipherKey[2]; + rk[3] = cipherKey[3]; + + if (keyBits == 128) { + for (;;) { + temp = rk[3]; + rk[4] = rk[0] ^ + (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ + (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ + (Te4[temp & 0xff] & 0x0000ff00) ^ + (Te4[temp >> 24] & 0x000000ff) ^ + rcon[i]; + rk[5] = rk[1] ^ rk[4]; + rk[6] = rk[2] ^ rk[5]; + rk[7] = rk[3] ^ rk[6]; + + if (++i == 10) { + return (10); + } + rk += 4; + } + } + + rk[4] = cipherKey[4]; + rk[5] = cipherKey[5]; + + if (keyBits == 192) { + for (;;) { + temp = rk[5]; + rk[6] = rk[0] ^ + (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ + (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ + (Te4[temp & 0xff] & 0x0000ff00) ^ + (Te4[temp >> 24] & 0x000000ff) ^ + rcon[i]; + rk[7] = rk[1] ^ rk[6]; + rk[8] = rk[2] ^ rk[7]; + rk[9] = rk[3] ^ rk[8]; + + if (++i == 8) { + return (12); + } + + rk[10] = rk[4] ^ rk[9]; + rk[11] = rk[5] ^ rk[10]; + rk += 6; + } + } + + rk[6] = cipherKey[6]; + rk[7] = cipherKey[7]; + + if (keyBits == 256) { + for (;;) { + temp = rk[7]; + rk[8] = rk[0] ^ + (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ + (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ + (Te4[temp & 0xff] & 0x0000ff00) ^ + (Te4[temp >> 24] & 0x000000ff) ^ + rcon[i]; + rk[9] = rk[1] ^ rk[8]; + rk[10] = rk[2] ^ rk[9]; + rk[11] = rk[3] ^ rk[10]; + + if (++i == 7) { + return (14); + } + temp = rk[11]; + rk[12] = rk[4] ^ + (Te4[temp >> 24] & 0xff000000) ^ + (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^ + (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^ + (Te4[temp & 0xff] & 0x000000ff); + rk[13] = rk[5] ^ rk[12]; + rk[14] = rk[6] ^ rk[13]; + rk[15] = rk[7] ^ rk[14]; + + rk += 8; + } + } + + return (0); +} +#endif /* !__amd64 */ + +#if defined(__amd64) + +/* + * Expand the 32-bit AES cipher key array into the encryption and decryption + * key schedules. + * + * Parameters: + * key AES key schedule to be initialized + * keyarr32 User key + * keyBits AES key size (128, 192, or 256 bits) + */ +static void +aes_setupkeys(aes_key_t *key, const uint32_t *keyarr32, int keybits) +{ + if (intel_aes_instructions_present()) { + key->flags = INTEL_AES_NI_CAPABLE; + KPREEMPT_DISABLE; + key->nr = rijndael_key_setup_enc_intel(&(key->encr_ks.ks32[0]), + keyarr32, keybits); + key->nr = rijndael_key_setup_dec_intel(&(key->decr_ks.ks32[0]), + keyarr32, keybits); + KPREEMPT_ENABLE; + } else { + key->flags = 0; + key->nr = rijndael_key_setup_enc_amd64(&(key->encr_ks.ks32[0]), + keyarr32, keybits); + key->nr = rijndael_key_setup_dec_amd64(&(key->decr_ks.ks32[0]), + keyarr32, keybits); + } + + key->type = AES_32BIT_KS; +} + +/* + * Encrypt one block of data. The block is assumed to be an array + * of four uint32_t values, so copy for alignment (and byte-order + * reversal for little endian systems might be necessary on the + * input and output byte streams. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk Key schedule, of aes_ks_t (60 32-bit integers) + * Nr Number of rounds + * pt Input block (plain text) + * ct Output block (crypto text). Can overlap with pt + * flags Indicates whether we're on Intel AES-NI-capable hardware + */ +static void +rijndael_encrypt(const uint32_t rk[], int Nr, const uint32_t pt[4], + uint32_t ct[4], int flags) +{ + if (flags & INTEL_AES_NI_CAPABLE) { + KPREEMPT_DISABLE; + aes_encrypt_intel(rk, Nr, pt, ct); + KPREEMPT_ENABLE; + } else { + aes_encrypt_amd64(rk, Nr, pt, ct); + } +} + +/* + * Decrypt one block of data. The block is assumed to be an array + * of four uint32_t values, so copy for alignment (and byte-order + * reversal for little endian systems might be necessary on the + * input and output byte streams. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk Key schedule, of aes_ks_t (60 32-bit integers) + * Nr Number of rounds + * ct Input block (crypto text) + * pt Output block (plain text). Can overlap with pt + * flags Indicates whether we're on Intel AES-NI-capable hardware + */ +static void +rijndael_decrypt(const uint32_t rk[], int Nr, const uint32_t ct[4], + uint32_t pt[4], int flags) +{ + if (flags & INTEL_AES_NI_CAPABLE) { + KPREEMPT_DISABLE; + aes_decrypt_intel(rk, Nr, ct, pt); + KPREEMPT_ENABLE; + } else { + aes_decrypt_amd64(rk, Nr, ct, pt); + } +} + + +#else /* generic C implementation */ + +/* + * Expand the cipher key into the decryption key schedule. + * Return the number of rounds for the given cipher key size. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk AES key schedule 32-bit array to be initialized + * cipherKey User key + * keyBits AES key size (128, 192, or 256 bits) + */ +static int +rijndael_key_setup_dec(uint32_t rk[], const uint32_t cipherKey[], int keyBits) +{ + int Nr, i, j; + uint32_t temp; + + /* expand the cipher key: */ + Nr = rijndael_key_setup_enc_raw(rk, cipherKey, keyBits); + + /* invert the order of the round keys: */ + for (i = 0, j = 4 * Nr; i < j; i += 4, j -= 4) { + temp = rk[i]; + rk[i] = rk[j]; + rk[j] = temp; + temp = rk[i + 1]; + rk[i + 1] = rk[j + 1]; + rk[j + 1] = temp; + temp = rk[i + 2]; + rk[i + 2] = rk[j + 2]; + rk[j + 2] = temp; + temp = rk[i + 3]; + rk[i + 3] = rk[j + 3]; + rk[j + 3] = temp; + } + + /* + * apply the inverse MixColumn transform to all + * round keys but the first and the last: + */ + for (i = 1; i < Nr; i++) { + rk += 4; + rk[0] = Td0[Te4[rk[0] >> 24] & 0xff] ^ + Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^ + Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^ + Td3[Te4[rk[0] & 0xff] & 0xff]; + rk[1] = Td0[Te4[rk[1] >> 24] & 0xff] ^ + Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^ + Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^ + Td3[Te4[rk[1] & 0xff] & 0xff]; + rk[2] = Td0[Te4[rk[2] >> 24] & 0xff] ^ + Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^ + Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^ + Td3[Te4[rk[2] & 0xff] & 0xff]; + rk[3] = Td0[Te4[rk[3] >> 24] & 0xff] ^ + Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^ + Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^ + Td3[Te4[rk[3] & 0xff] & 0xff]; + } + + return (Nr); +} + + +/* + * Expand the 32-bit AES cipher key array into the encryption and decryption + * key schedules. + * + * Parameters: + * key AES key schedule to be initialized + * keyarr32 User key + * keyBits AES key size (128, 192, or 256 bits) + */ +static void +aes_setupkeys(aes_key_t *key, const uint32_t *keyarr32, int keybits) +{ + key->nr = rijndael_key_setup_enc(&(key->encr_ks.ks32[0]), keyarr32, + keybits); + key->nr = rijndael_key_setup_dec(&(key->decr_ks.ks32[0]), keyarr32, + keybits); + key->type = AES_32BIT_KS; +} + + +/* + * Encrypt one block of data. The block is assumed to be an array + * of four uint32_t values, so copy for alignment (and byte-order + * reversal for little endian systems might be necessary on the + * input and output byte streams. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk Key schedule, of aes_ks_t (60 32-bit integers) + * Nr Number of rounds + * pt Input block (plain text) + * ct Output block (crypto text). Can overlap with pt + */ +static void +rijndael_encrypt(const uint32_t rk[], int Nr, const uint32_t pt[4], + uint32_t ct[4]) +{ + uint32_t s0, s1, s2, s3, t0, t1, t2, t3; + int r; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + + s0 = pt[0] ^ rk[0]; + s1 = pt[1] ^ rk[1]; + s2 = pt[2] ^ rk[2]; + s3 = pt[3] ^ rk[3]; + + /* + * Nr - 1 full rounds: + */ + + r = Nr >> 1; + + for (;;) { + t0 = Te0[s0 >> 24] ^ + Te1[(s1 >> 16) & 0xff] ^ + Te2[(s2 >> 8) & 0xff] ^ + Te3[s3 & 0xff] ^ + rk[4]; + + t1 = Te0[s1 >> 24] ^ + Te1[(s2 >> 16) & 0xff] ^ + Te2[(s3 >> 8) & 0xff] ^ + Te3[s0 & 0xff] ^ + rk[5]; + + t2 = Te0[s2 >> 24] ^ + Te1[(s3 >> 16) & 0xff] ^ + Te2[(s0 >> 8) & 0xff] ^ + Te3[s1 & 0xff] ^ + rk[6]; + + t3 = Te0[s3 >> 24] ^ + Te1[(s0 >> 16) & 0xff] ^ + Te2[(s1 >> 8) & 0xff] ^ + Te3[s2 & 0xff] ^ + rk[7]; + + rk += 8; + + if (--r == 0) { + break; + } + + s0 = Te0[t0 >> 24] ^ + Te1[(t1 >> 16) & 0xff] ^ + Te2[(t2 >> 8) & 0xff] ^ + Te3[t3 & 0xff] ^ + rk[0]; + + s1 = Te0[t1 >> 24] ^ + Te1[(t2 >> 16) & 0xff] ^ + Te2[(t3 >> 8) & 0xff] ^ + Te3[t0 & 0xff] ^ + rk[1]; + + s2 = Te0[t2 >> 24] ^ + Te1[(t3 >> 16) & 0xff] ^ + Te2[(t0 >> 8) & 0xff] ^ + Te3[t1 & 0xff] ^ + rk[2]; + + s3 = Te0[t3 >> 24] ^ + Te1[(t0 >> 16) & 0xff] ^ + Te2[(t1 >> 8) & 0xff] ^ + Te3[t2 & 0xff] ^ + rk[3]; + } + + /* + * apply last round and + * map cipher state to byte array block: + */ + + s0 = (Te4[(t0 >> 24)] & 0xff000000) ^ + (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ + (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ + (Te4[t3 & 0xff] & 0x000000ff) ^ + rk[0]; + ct[0] = s0; + + s1 = (Te4[(t1 >> 24)] & 0xff000000) ^ + (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ + (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ + (Te4[t0 & 0xff] & 0x000000ff) ^ + rk[1]; + ct[1] = s1; + + s2 = (Te4[(t2 >> 24)] & 0xff000000) ^ + (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ + (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ + (Te4[t1 & 0xff] & 0x000000ff) ^ + rk[2]; + ct[2] = s2; + + s3 = (Te4[(t3 >> 24)] & 0xff000000) ^ + (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ + (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ + (Te4[t2 & 0xff] & 0x000000ff) ^ + rk[3]; + ct[3] = s3; +} + + +/* + * Decrypt one block of data. The block is assumed to be an array + * of four uint32_t values, so copy for alignment (and byte-order + * reversal for little endian systems might be necessary on the + * input and output byte streams. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4*(Nr + 1). + * + * Parameters: + * rk Key schedule, of aes_ks_t (60 32-bit integers) + * Nr Number of rounds + * ct Input block (crypto text) + * pt Output block (plain text). Can overlap with pt + */ +static void +rijndael_decrypt(const uint32_t rk[], int Nr, const uint32_t ct[4], + uint32_t pt[4]) +{ + uint32_t s0, s1, s2, s3, t0, t1, t2, t3; + int r; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + s0 = ct[0] ^ rk[0]; + s1 = ct[1] ^ rk[1]; + s2 = ct[2] ^ rk[2]; + s3 = ct[3] ^ rk[3]; + + /* + * Nr - 1 full rounds: + */ + + r = Nr >> 1; + + for (;;) { + t0 = Td0[s0 >> 24] ^ + Td1[(s3 >> 16) & 0xff] ^ + Td2[(s2 >> 8) & 0xff] ^ + Td3[s1 & 0xff] ^ + rk[4]; + + t1 = Td0[s1 >> 24] ^ + Td1[(s0 >> 16) & 0xff] ^ + Td2[(s3 >> 8) & 0xff] ^ + Td3[s2 & 0xff] ^ + rk[5]; + + t2 = Td0[s2 >> 24] ^ + Td1[(s1 >> 16) & 0xff] ^ + Td2[(s0 >> 8) & 0xff] ^ + Td3[s3 & 0xff] ^ + rk[6]; + + t3 = Td0[s3 >> 24] ^ + Td1[(s2 >> 16) & 0xff] ^ + Td2[(s1 >> 8) & 0xff] ^ + Td3[s0 & 0xff] ^ + rk[7]; + + rk += 8; + + if (--r == 0) { + break; + } + + s0 = Td0[t0 >> 24] ^ + Td1[(t3 >> 16) & 0xff] ^ + Td2[(t2 >> 8) & 0xff] ^ + Td3[t1 & 0xff] ^ + rk[0]; + + s1 = Td0[t1 >> 24] ^ + Td1[(t0 >> 16) & 0xff] ^ + Td2[(t3 >> 8) & 0xff] ^ + Td3[t2 & 0xff] ^ + rk[1]; + + s2 = Td0[t2 >> 24] ^ + Td1[(t1 >> 16) & 0xff] ^ + Td2[(t0 >> 8) & 0xff] ^ + Td3[t3 & 0xff] ^ + rk[2]; + + s3 = Td0[t3 >> 24] ^ + Td1[(t2 >> 16) & 0xff] ^ + Td2[(t1 >> 8) & 0xff] ^ + Td3[t0 & 0xff] ^ + rk[3]; + } + + /* + * apply last round and + * map cipher state to byte array block: + */ + + s0 = (Td4[t0 >> 24] & 0xff000000) ^ + (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ + (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ + (Td4[t1 & 0xff] & 0x000000ff) ^ + rk[0]; + pt[0] = s0; + + s1 = (Td4[t1 >> 24] & 0xff000000) ^ + (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ + (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ + (Td4[t2 & 0xff] & 0x000000ff) ^ + rk[1]; + pt[1] = s1; + + s2 = (Td4[t2 >> 24] & 0xff000000) ^ + (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ + (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ + (Td4[t3 & 0xff] & 0x000000ff) ^ + rk[2]; + pt[2] = s2; + + s3 = (Td4[t3 >> 24] & 0xff000000) ^ + (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ + (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ + (Td4[t0 & 0xff] & 0x000000ff) ^ + rk[3]; + pt[3] = s3; +} +#endif /* __amd64 */ + + +/* + * Initialize AES encryption and decryption key schedules. + * + * Parameters: + * cipherKey User key + * keyBits AES key size (128, 192, or 256 bits) + * keysched AES key schedule to be initialized, of type aes_key_t. + * Allocated by aes_alloc_keysched(). + */ +void +aes_init_keysched(const uint8_t *cipherKey, uint_t keyBits, void *keysched) +{ + aes_key_t *newbie = keysched; + uint_t keysize, i, j; + union { + uint64_t ka64[4]; + uint32_t ka32[8]; + } keyarr; + + switch (keyBits) { + case 128: + newbie->nr = 10; + break; + + case 192: + newbie->nr = 12; + break; + + case 256: + newbie->nr = 14; + break; + + default: + /* should never get here */ + return; + } + keysize = CRYPTO_BITS2BYTES(keyBits); + + /* + * For _LITTLE_ENDIAN machines (except AMD64), reverse every + * 4 bytes in the key. On _BIG_ENDIAN and AMD64, copy the key + * without reversing bytes. + * For AMD64, do not byte swap for aes_setupkeys(). + * + * SPARCv8/v9 uses a key schedule array with 64-bit elements. + * X86/AMD64 uses a key schedule array with 32-bit elements. + */ +#ifndef AES_BYTE_SWAP + if (IS_P2ALIGNED(cipherKey, sizeof (uint64_t))) { + for (i = 0, j = 0; j < keysize; i++, j += 8) { + /* LINTED: pointer alignment */ + keyarr.ka64[i] = *((uint64_t *)&cipherKey[j]); + } + } else { + bcopy(cipherKey, keyarr.ka32, keysize); + } + +#else /* byte swap */ + for (i = 0, j = 0; j < keysize; i++, j += 4) { + keyarr.ka32[i] = htonl(*(uint32_t *)(void *)&cipherKey[j]); + } +#endif + + aes_setupkeys(newbie, keyarr.ka32, keyBits); +} + + +/* + * Encrypt one block using AES. + * Align if needed and (for x86 32-bit only) byte-swap. + * + * Parameters: + * ks Key schedule, of type aes_key_t + * pt Input block (plain text) + * ct Output block (crypto text). Can overlap with pt + */ +int +aes_encrypt_block(const void *ks, const uint8_t *pt, uint8_t *ct) +{ + aes_key_t *ksch = (aes_key_t *)ks; + +#ifndef AES_BYTE_SWAP + if (IS_P2ALIGNED2(pt, ct, sizeof (uint32_t))) { + /* LINTED: pointer alignment */ + AES_ENCRYPT_IMPL(&ksch->encr_ks.ks32[0], ksch->nr, + /* LINTED: pointer alignment */ + (uint32_t *)pt, (uint32_t *)ct, ksch->flags); + } else { +#endif + uint32_t buffer[AES_BLOCK_LEN / sizeof (uint32_t)]; + + /* Copy input block into buffer */ +#ifndef AES_BYTE_SWAP + bcopy(pt, &buffer, AES_BLOCK_LEN); + +#else /* byte swap */ + buffer[0] = htonl(*(uint32_t *)(void *)&pt[0]); + buffer[1] = htonl(*(uint32_t *)(void *)&pt[4]); + buffer[2] = htonl(*(uint32_t *)(void *)&pt[8]); + buffer[3] = htonl(*(uint32_t *)(void *)&pt[12]); +#endif + + AES_ENCRYPT_IMPL(&ksch->encr_ks.ks32[0], ksch->nr, + buffer, buffer, ksch->flags); + + /* Copy result from buffer to output block */ +#ifndef AES_BYTE_SWAP + bcopy(&buffer, ct, AES_BLOCK_LEN); + } + +#else /* byte swap */ + *(uint32_t *)(void *)&ct[0] = htonl(buffer[0]); + *(uint32_t *)(void *)&ct[4] = htonl(buffer[1]); + *(uint32_t *)(void *)&ct[8] = htonl(buffer[2]); + *(uint32_t *)(void *)&ct[12] = htonl(buffer[3]); +#endif + return (CRYPTO_SUCCESS); +} + + +/* + * Decrypt one block using AES. + * Align and byte-swap if needed. + * + * Parameters: + * ks Key schedule, of type aes_key_t + * ct Input block (crypto text) + * pt Output block (plain text). Can overlap with pt + */ +int +aes_decrypt_block(const void *ks, const uint8_t *ct, uint8_t *pt) +{ + aes_key_t *ksch = (aes_key_t *)ks; + +#ifndef AES_BYTE_SWAP + if (IS_P2ALIGNED2(ct, pt, sizeof (uint32_t))) { + /* LINTED: pointer alignment */ + AES_DECRYPT_IMPL(&ksch->decr_ks.ks32[0], ksch->nr, + /* LINTED: pointer alignment */ + (uint32_t *)ct, (uint32_t *)pt, ksch->flags); + } else { +#endif + uint32_t buffer[AES_BLOCK_LEN / sizeof (uint32_t)]; + + /* Copy input block into buffer */ +#ifndef AES_BYTE_SWAP + bcopy(ct, &buffer, AES_BLOCK_LEN); + +#else /* byte swap */ + buffer[0] = htonl(*(uint32_t *)(void *)&ct[0]); + buffer[1] = htonl(*(uint32_t *)(void *)&ct[4]); + buffer[2] = htonl(*(uint32_t *)(void *)&ct[8]); + buffer[3] = htonl(*(uint32_t *)(void *)&ct[12]); +#endif + + AES_DECRYPT_IMPL(&ksch->decr_ks.ks32[0], ksch->nr, + buffer, buffer, ksch->flags); + + /* Copy result from buffer to output block */ +#ifndef AES_BYTE_SWAP + bcopy(&buffer, pt, AES_BLOCK_LEN); + } + +#else /* byte swap */ + *(uint32_t *)(void *)&pt[0] = htonl(buffer[0]); + *(uint32_t *)(void *)&pt[4] = htonl(buffer[1]); + *(uint32_t *)(void *)&pt[8] = htonl(buffer[2]); + *(uint32_t *)(void *)&pt[12] = htonl(buffer[3]); +#endif + + return (CRYPTO_SUCCESS); +} + + +/* + * Allocate key schedule for AES. + * + * Return the pointer and set size to the number of bytes allocated. + * Memory allocated must be freed by the caller when done. + * + * Parameters: + * size Size of key schedule allocated, in bytes + * kmflag Flag passed to kmem_alloc(9F); ignored in userland. + */ +/* ARGSUSED */ +void * +aes_alloc_keysched(size_t *size, int kmflag) +{ + aes_key_t *keysched; + + keysched = (aes_key_t *)kmem_alloc(sizeof (aes_key_t), kmflag); + if (keysched != NULL) { + *size = sizeof (aes_key_t); + return (keysched); + } + return (NULL); +} + + +#ifdef __amd64 + +#define INTEL_AESNI_FLAG (1 << 25) + +/* + * Return 1 if executing on Intel with AES-NI instructions, + * otherwise 0 (i.e., Intel without AES-NI or AMD64). + * Cache the result, as the CPU can't change. + */ +static int +intel_aes_instructions_present(void) +{ + static int cached_result = -1; + unsigned eax, ebx, ecx, edx; + unsigned func, subfunc; + + if (cached_result == -1) { /* first time */ + /* check for an intel cpu */ + func = 0; + subfunc = 0; + + __asm__ __volatile__( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a"(func), "c"(subfunc)); + + if (memcmp((char *)(&ebx), "Genu", 4) == 0 && + memcmp((char *)(&edx), "ineI", 4) == 0 && + memcmp((char *)(&ecx), "ntel", 4) == 0) { + func = 1; + subfunc = 0; + + /* check for aes-ni instruction set */ + __asm__ __volatile__( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a"(func), "c"(subfunc)); + + cached_result = !!(ecx & INTEL_AESNI_FLAG); + } else { + cached_result = 0; + } + } + + return (cached_result); +} + +#endif /* __amd64 */ --- linux-aws-4.15.0.orig/zfs/module/icp/algs/aes/aes_modes.c +++ linux-aws-4.15.0/zfs/module/icp/algs/aes/aes_modes.c @@ -0,0 +1,135 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include + +/* Copy a 16-byte AES block from "in" to "out" */ +void +aes_copy_block(uint8_t *in, uint8_t *out) +{ + if (IS_P2ALIGNED2(in, out, sizeof (uint32_t))) { + /* LINTED: pointer alignment */ + *(uint32_t *)&out[0] = *(uint32_t *)&in[0]; + /* LINTED: pointer alignment */ + *(uint32_t *)&out[4] = *(uint32_t *)&in[4]; + /* LINTED: pointer alignment */ + *(uint32_t *)&out[8] = *(uint32_t *)&in[8]; + /* LINTED: pointer alignment */ + *(uint32_t *)&out[12] = *(uint32_t *)&in[12]; + } else { + AES_COPY_BLOCK(in, out); + } +} + + +/* XOR a 16-byte AES block of data into dst */ +void +aes_xor_block(uint8_t *data, uint8_t *dst) +{ + if (IS_P2ALIGNED2(dst, data, sizeof (uint32_t))) { + /* LINTED: pointer alignment */ + *(uint32_t *)&dst[0] ^= *(uint32_t *)&data[0]; + /* LINTED: pointer alignment */ + *(uint32_t *)&dst[4] ^= *(uint32_t *)&data[4]; + /* LINTED: pointer alignment */ + *(uint32_t *)&dst[8] ^= *(uint32_t *)&data[8]; + /* LINTED: pointer alignment */ + *(uint32_t *)&dst[12] ^= *(uint32_t *)&data[12]; + } else { + AES_XOR_BLOCK(data, dst); + } +} + + +/* + * Encrypt multiple blocks of data according to mode. + */ +int +aes_encrypt_contiguous_blocks(void *ctx, char *data, size_t length, + crypto_data_t *out) +{ + aes_ctx_t *aes_ctx = ctx; + int rv; + + if (aes_ctx->ac_flags & CTR_MODE) { + rv = ctr_mode_contiguous_blocks(ctx, data, length, out, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + } else if (aes_ctx->ac_flags & CCM_MODE) { + rv = ccm_mode_encrypt_contiguous_blocks(ctx, data, length, + out, AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + rv = gcm_mode_encrypt_contiguous_blocks(ctx, data, length, + out, AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + } else if (aes_ctx->ac_flags & CBC_MODE) { + rv = cbc_encrypt_contiguous_blocks(ctx, + data, length, out, AES_BLOCK_LEN, aes_encrypt_block, + aes_copy_block, aes_xor_block); + } else { + rv = ecb_cipher_contiguous_blocks(ctx, data, length, out, + AES_BLOCK_LEN, aes_encrypt_block); + } + return (rv); +} + + +/* + * Decrypt multiple blocks of data according to mode. + */ +int +aes_decrypt_contiguous_blocks(void *ctx, char *data, size_t length, + crypto_data_t *out) +{ + aes_ctx_t *aes_ctx = ctx; + int rv; + + if (aes_ctx->ac_flags & CTR_MODE) { + rv = ctr_mode_contiguous_blocks(ctx, data, length, out, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + if (rv == CRYPTO_DATA_LEN_RANGE) + rv = CRYPTO_ENCRYPTED_DATA_LEN_RANGE; + } else if (aes_ctx->ac_flags & CCM_MODE) { + rv = ccm_mode_decrypt_contiguous_blocks(ctx, data, length, + out, AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + rv = gcm_mode_decrypt_contiguous_blocks(ctx, data, length, + out, AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + } else if (aes_ctx->ac_flags & CBC_MODE) { + rv = cbc_decrypt_contiguous_blocks(ctx, data, length, out, + AES_BLOCK_LEN, aes_decrypt_block, aes_copy_block, + aes_xor_block); + } else { + rv = ecb_cipher_contiguous_blocks(ctx, data, length, out, + AES_BLOCK_LEN, aes_decrypt_block); + if (rv == CRYPTO_DATA_LEN_RANGE) + rv = CRYPTO_ENCRYPTED_DATA_LEN_RANGE; + } + return (rv); +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/edonr/edonr.c +++ linux-aws-4.15.0/zfs/module/icp/algs/edonr/edonr.c @@ -0,0 +1,751 @@ +/* + * IDI,NTNU + * + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + * + * Copyright (C) 2009, 2010, Jorn Amundsen + * Tweaked Edon-R implementation for SUPERCOP, based on NIST API. + * + * $Id: edonr.c 517 2013-02-17 20:34:39Z joern $ + */ +/* + * Portions copyright (c) 2013, Saso Kiselkov, All rights reserved + */ + +/* determine where we can get bcopy/bzero declarations */ +#ifdef _KERNEL +#include +#else +#include +#endif +#include +#include + +/* big endian support, provides no-op's if run on little endian hosts */ +#include "edonr_byteorder.h" + +#define hashState224(x) ((x)->pipe->p256) +#define hashState256(x) ((x)->pipe->p256) +#define hashState384(x) ((x)->pipe->p512) +#define hashState512(x) ((x)->pipe->p512) + +/* shift and rotate shortcuts */ +#define shl(x, n) ((x) << n) +#define shr(x, n) ((x) >> n) + +#define rotl32(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) +#define rotr32(x, n) (((x) >> (n)) | ((x) << (32 - (n)))) + +#define rotl64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) +#define rotr64(x, n) (((x) >> (n)) | ((x) << (64 - (n)))) + +#if !defined(__C99_RESTRICT) +#define restrict /* restrict */ +#endif + +#define EDONR_VALID_HASHBITLEN(x) \ + ((x) == 512 || (x) == 384 || (x) == 256 || (x) == 224) + +/* EdonR224 initial double chaining pipe */ +static const uint32_t i224p2[16] = { + 0x00010203ul, 0x04050607ul, 0x08090a0bul, 0x0c0d0e0ful, + 0x10111213ul, 0x14151617ul, 0x18191a1bul, 0x1c1d1e1ful, + 0x20212223ul, 0x24252627ul, 0x28292a2bul, 0x2c2d2e2ful, + 0x30313233ul, 0x34353637ul, 0x38393a3bul, 0x3c3d3e3ful, +}; + +/* EdonR256 initial double chaining pipe */ +static const uint32_t i256p2[16] = { + 0x40414243ul, 0x44454647ul, 0x48494a4bul, 0x4c4d4e4ful, + 0x50515253ul, 0x54555657ul, 0x58595a5bul, 0x5c5d5e5ful, + 0x60616263ul, 0x64656667ul, 0x68696a6bul, 0x6c6d6e6ful, + 0x70717273ul, 0x74757677ul, 0x78797a7bul, 0x7c7d7e7ful, +}; + +/* EdonR384 initial double chaining pipe */ +static const uint64_t i384p2[16] = { + 0x0001020304050607ull, 0x08090a0b0c0d0e0full, + 0x1011121314151617ull, 0x18191a1b1c1d1e1full, + 0x2021222324252627ull, 0x28292a2b2c2d2e2full, + 0x3031323334353637ull, 0x38393a3b3c3d3e3full, + 0x4041424344454647ull, 0x48494a4b4c4d4e4full, + 0x5051525354555657ull, 0x58595a5b5c5d5e5full, + 0x6061626364656667ull, 0x68696a6b6c6d6e6full, + 0x7071727374757677ull, 0x78797a7b7c7d7e7full +}; + +/* EdonR512 initial double chaining pipe */ +static const uint64_t i512p2[16] = { + 0x8081828384858687ull, 0x88898a8b8c8d8e8full, + 0x9091929394959697ull, 0x98999a9b9c9d9e9full, + 0xa0a1a2a3a4a5a6a7ull, 0xa8a9aaabacadaeafull, + 0xb0b1b2b3b4b5b6b7ull, 0xb8b9babbbcbdbebfull, + 0xc0c1c2c3c4c5c6c7ull, 0xc8c9cacbcccdcecfull, + 0xd0d1d2d3d4d5d6d7ull, 0xd8d9dadbdcdddedfull, + 0xe0e1e2e3e4e5e6e7ull, 0xe8e9eaebecedeeefull, + 0xf0f1f2f3f4f5f6f7ull, 0xf8f9fafbfcfdfeffull +}; + +/* + * First Latin Square + * 0 7 1 3 2 4 6 5 + * 4 1 7 6 3 0 5 2 + * 7 0 4 2 5 3 1 6 + * 1 4 0 5 6 2 7 3 + * 2 3 6 7 1 5 0 4 + * 5 2 3 1 7 6 4 0 + * 3 6 5 0 4 7 2 1 + * 6 5 2 4 0 1 3 7 + */ +#define LS1_256(c, x0, x1, x2, x3, x4, x5, x6, x7) \ +{ \ + uint32_t x04, x17, x23, x56, x07, x26; \ + x04 = x0+x4, x17 = x1+x7, x07 = x04+x17; \ + s0 = c + x07 + x2; \ + s1 = rotl32(x07 + x3, 4); \ + s2 = rotl32(x07 + x6, 8); \ + x23 = x2 + x3; \ + s5 = rotl32(x04 + x23 + x5, 22); \ + x56 = x5 + x6; \ + s6 = rotl32(x17 + x56 + x0, 24); \ + x26 = x23+x56; \ + s3 = rotl32(x26 + x7, 13); \ + s4 = rotl32(x26 + x1, 17); \ + s7 = rotl32(x26 + x4, 29); \ +} + +#define LS1_512(c, x0, x1, x2, x3, x4, x5, x6, x7) \ +{ \ + uint64_t x04, x17, x23, x56, x07, x26; \ + x04 = x0+x4, x17 = x1+x7, x07 = x04+x17; \ + s0 = c + x07 + x2; \ + s1 = rotl64(x07 + x3, 5); \ + s2 = rotl64(x07 + x6, 15); \ + x23 = x2 + x3; \ + s5 = rotl64(x04 + x23 + x5, 40); \ + x56 = x5 + x6; \ + s6 = rotl64(x17 + x56 + x0, 50); \ + x26 = x23+x56; \ + s3 = rotl64(x26 + x7, 22); \ + s4 = rotl64(x26 + x1, 31); \ + s7 = rotl64(x26 + x4, 59); \ +} + +/* + * Second Orthogonal Latin Square + * 0 4 2 3 1 6 5 7 + * 7 6 3 2 5 4 1 0 + * 5 3 1 6 0 2 7 4 + * 1 0 5 4 3 7 2 6 + * 2 1 0 7 4 5 6 3 + * 3 5 7 0 6 1 4 2 + * 4 7 6 1 2 0 3 5 + * 6 2 4 5 7 3 0 1 + */ +#define LS2_256(c, y0, y1, y2, y3, y4, y5, y6, y7) \ +{ \ + uint32_t y01, y25, y34, y67, y04, y05, y27, y37; \ + y01 = y0+y1, y25 = y2+y5, y05 = y01+y25; \ + t0 = ~c + y05 + y7; \ + t2 = rotl32(y05 + y3, 9); \ + y34 = y3+y4, y04 = y01+y34; \ + t1 = rotl32(y04 + y6, 5); \ + t4 = rotl32(y04 + y5, 15); \ + y67 = y6+y7, y37 = y34+y67; \ + t3 = rotl32(y37 + y2, 11); \ + t7 = rotl32(y37 + y0, 27); \ + y27 = y25+y67; \ + t5 = rotl32(y27 + y4, 20); \ + t6 = rotl32(y27 + y1, 25); \ +} + +#define LS2_512(c, y0, y1, y2, y3, y4, y5, y6, y7) \ +{ \ + uint64_t y01, y25, y34, y67, y04, y05, y27, y37; \ + y01 = y0+y1, y25 = y2+y5, y05 = y01+y25; \ + t0 = ~c + y05 + y7; \ + t2 = rotl64(y05 + y3, 19); \ + y34 = y3+y4, y04 = y01+y34; \ + t1 = rotl64(y04 + y6, 10); \ + t4 = rotl64(y04 + y5, 36); \ + y67 = y6+y7, y37 = y34+y67; \ + t3 = rotl64(y37 + y2, 29); \ + t7 = rotl64(y37 + y0, 55); \ + y27 = y25+y67; \ + t5 = rotl64(y27 + y4, 44); \ + t6 = rotl64(y27 + y1, 48); \ +} + +#define quasi_exform256(r0, r1, r2, r3, r4, r5, r6, r7) \ +{ \ + uint32_t s04, s17, s23, s56, t01, t25, t34, t67; \ + s04 = s0 ^ s4, t01 = t0 ^ t1; \ + r0 = (s04 ^ s1) + (t01 ^ t5); \ + t67 = t6 ^ t7; \ + r1 = (s04 ^ s7) + (t2 ^ t67); \ + s23 = s2 ^ s3; \ + r7 = (s23 ^ s5) + (t4 ^ t67); \ + t34 = t3 ^ t4; \ + r3 = (s23 ^ s4) + (t0 ^ t34); \ + s56 = s5 ^ s6; \ + r5 = (s3 ^ s56) + (t34 ^ t6); \ + t25 = t2 ^ t5; \ + r6 = (s2 ^ s56) + (t25 ^ t7); \ + s17 = s1 ^ s7; \ + r4 = (s0 ^ s17) + (t1 ^ t25); \ + r2 = (s17 ^ s6) + (t01 ^ t3); \ +} + +#define quasi_exform512(r0, r1, r2, r3, r4, r5, r6, r7) \ +{ \ + uint64_t s04, s17, s23, s56, t01, t25, t34, t67; \ + s04 = s0 ^ s4, t01 = t0 ^ t1; \ + r0 = (s04 ^ s1) + (t01 ^ t5); \ + t67 = t6 ^ t7; \ + r1 = (s04 ^ s7) + (t2 ^ t67); \ + s23 = s2 ^ s3; \ + r7 = (s23 ^ s5) + (t4 ^ t67); \ + t34 = t3 ^ t4; \ + r3 = (s23 ^ s4) + (t0 ^ t34); \ + s56 = s5 ^ s6; \ + r5 = (s3 ^ s56) + (t34 ^ t6); \ + t25 = t2 ^ t5; \ + r6 = (s2 ^ s56) + (t25 ^ t7); \ + s17 = s1 ^ s7; \ + r4 = (s0 ^ s17) + (t1 ^ t25); \ + r2 = (s17 ^ s6) + (t01 ^ t3); \ +} + +static size_t +Q256(size_t bitlen, const uint32_t *data, uint32_t *restrict p) +{ + size_t bl; + + for (bl = bitlen; bl >= EdonR256_BLOCK_BITSIZE; + bl -= EdonR256_BLOCK_BITSIZE, data += 16) { + uint32_t s0, s1, s2, s3, s4, s5, s6, s7, t0, t1, t2, t3, t4, + t5, t6, t7; + uint32_t p0, p1, p2, p3, p4, p5, p6, p7, q0, q1, q2, q3, q4, + q5, q6, q7; + const uint32_t defix = 0xaaaaaaaa; +#if defined(MACHINE_IS_BIG_ENDIAN) + uint32_t swp0, swp1, swp2, swp3, swp4, swp5, swp6, swp7, swp8, + swp9, swp10, swp11, swp12, swp13, swp14, swp15; +#define d(j) swp ## j +#define s32(j) ld_swap32((uint32_t *)data + j, swp ## j) +#else +#define d(j) data[j] +#endif + + /* First row of quasigroup e-transformations */ +#if defined(MACHINE_IS_BIG_ENDIAN) + s32(8); + s32(9); + s32(10); + s32(11); + s32(12); + s32(13); + s32(14); + s32(15); +#endif + LS1_256(defix, d(15), d(14), d(13), d(12), d(11), d(10), d(9), + d(8)); +#if defined(MACHINE_IS_BIG_ENDIAN) + s32(0); + s32(1); + s32(2); + s32(3); + s32(4); + s32(5); + s32(6); + s32(7); +#undef s32 +#endif + LS2_256(defix, d(0), d(1), d(2), d(3), d(4), d(5), d(6), d(7)); + quasi_exform256(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_256(defix, d(8), d(9), d(10), d(11), d(12), d(13), d(14), + d(15)); + quasi_exform256(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Second row of quasigroup e-transformations */ + LS1_256(defix, p[8], p[9], p[10], p[11], p[12], p[13], p[14], + p[15]); + LS2_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform256(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_256(defix, q0, q1, q2, q3, q4, q5, q6, q7); + quasi_exform256(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Third row of quasigroup e-transformations */ + LS1_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_256(defix, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); + quasi_exform256(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_256(defix, q0, q1, q2, q3, q4, q5, q6, q7); + LS2_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform256(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Fourth row of quasigroup e-transformations */ + LS1_256(defix, d(7), d(6), d(5), d(4), d(3), d(2), d(1), d(0)); + LS2_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform256(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_256(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_256(defix, q0, q1, q2, q3, q4, q5, q6, q7); + quasi_exform256(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Edon-R tweak on the original SHA-3 Edon-R submission. */ + p[0] ^= d(8) ^ p0; + p[1] ^= d(9) ^ p1; + p[2] ^= d(10) ^ p2; + p[3] ^= d(11) ^ p3; + p[4] ^= d(12) ^ p4; + p[5] ^= d(13) ^ p5; + p[6] ^= d(14) ^ p6; + p[7] ^= d(15) ^ p7; + p[8] ^= d(0) ^ q0; + p[9] ^= d(1) ^ q1; + p[10] ^= d(2) ^ q2; + p[11] ^= d(3) ^ q3; + p[12] ^= d(4) ^ q4; + p[13] ^= d(5) ^ q5; + p[14] ^= d(6) ^ q6; + p[15] ^= d(7) ^ q7; + } + +#undef d + return (bitlen - bl); +} + +/* + * Why is this #pragma here? + * + * Checksum functions like this one can go over the stack frame size check + * Linux imposes on 32-bit platforms (-Wframe-larger-than=1024). We can + * safely ignore the compiler error since we know that in ZoL, that + * the function will be called from a worker thread that won't be using + * much stack. The only function that goes over the 1k limit is Q512(), + * which only goes over it by a hair (1248 bytes on ARM32). + */ +#include /* for _ILP32 */ +#ifdef _ILP32 /* We're 32-bit, assume small stack frames */ +#pragma GCC diagnostic ignored "-Wframe-larger-than=" +#endif + +#if defined(__IBMC__) && defined(_AIX) && defined(__64BIT__) +static inline size_t +#else +static size_t +#endif +Q512(size_t bitlen, const uint64_t *data, uint64_t *restrict p) +{ + size_t bl; + + for (bl = bitlen; bl >= EdonR512_BLOCK_BITSIZE; + bl -= EdonR512_BLOCK_BITSIZE, data += 16) { + uint64_t s0, s1, s2, s3, s4, s5, s6, s7, t0, t1, t2, t3, t4, + t5, t6, t7; + uint64_t p0, p1, p2, p3, p4, p5, p6, p7, q0, q1, q2, q3, q4, + q5, q6, q7; + const uint64_t defix = 0xaaaaaaaaaaaaaaaaull; +#if defined(MACHINE_IS_BIG_ENDIAN) + uint64_t swp0, swp1, swp2, swp3, swp4, swp5, swp6, swp7, swp8, + swp9, swp10, swp11, swp12, swp13, swp14, swp15; +#define d(j) swp##j +#define s64(j) ld_swap64((uint64_t *)data+j, swp##j) +#else +#define d(j) data[j] +#endif + + /* First row of quasigroup e-transformations */ +#if defined(MACHINE_IS_BIG_ENDIAN) + s64(8); + s64(9); + s64(10); + s64(11); + s64(12); + s64(13); + s64(14); + s64(15); +#endif + LS1_512(defix, d(15), d(14), d(13), d(12), d(11), d(10), d(9), + d(8)); +#if defined(MACHINE_IS_BIG_ENDIAN) + s64(0); + s64(1); + s64(2); + s64(3); + s64(4); + s64(5); + s64(6); + s64(7); +#undef s64 +#endif + LS2_512(defix, d(0), d(1), d(2), d(3), d(4), d(5), d(6), d(7)); + quasi_exform512(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_512(defix, d(8), d(9), d(10), d(11), d(12), d(13), d(14), + d(15)); + quasi_exform512(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Second row of quasigroup e-transformations */ + LS1_512(defix, p[8], p[9], p[10], p[11], p[12], p[13], p[14], + p[15]); + LS2_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform512(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_512(defix, q0, q1, q2, q3, q4, q5, q6, q7); + quasi_exform512(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Third row of quasigroup e-transformations */ + LS1_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_512(defix, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); + quasi_exform512(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_512(defix, q0, q1, q2, q3, q4, q5, q6, q7); + LS2_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform512(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Fourth row of quasigroup e-transformations */ + LS1_512(defix, d(7), d(6), d(5), d(4), d(3), d(2), d(1), d(0)); + LS2_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + quasi_exform512(p0, p1, p2, p3, p4, p5, p6, p7); + + LS1_512(defix, p0, p1, p2, p3, p4, p5, p6, p7); + LS2_512(defix, q0, q1, q2, q3, q4, q5, q6, q7); + quasi_exform512(q0, q1, q2, q3, q4, q5, q6, q7); + + /* Edon-R tweak on the original SHA-3 Edon-R submission. */ + p[0] ^= d(8) ^ p0; + p[1] ^= d(9) ^ p1; + p[2] ^= d(10) ^ p2; + p[3] ^= d(11) ^ p3; + p[4] ^= d(12) ^ p4; + p[5] ^= d(13) ^ p5; + p[6] ^= d(14) ^ p6; + p[7] ^= d(15) ^ p7; + p[8] ^= d(0) ^ q0; + p[9] ^= d(1) ^ q1; + p[10] ^= d(2) ^ q2; + p[11] ^= d(3) ^ q3; + p[12] ^= d(4) ^ q4; + p[13] ^= d(5) ^ q5; + p[14] ^= d(6) ^ q6; + p[15] ^= d(7) ^ q7; + } + +#undef d + return (bitlen - bl); +} + +void +EdonRInit(EdonRState *state, size_t hashbitlen) +{ + ASSERT(EDONR_VALID_HASHBITLEN(hashbitlen)); + switch (hashbitlen) { + case 224: + state->hashbitlen = 224; + state->bits_processed = 0; + state->unprocessed_bits = 0; + bcopy(i224p2, hashState224(state)->DoublePipe, + 16 * sizeof (uint32_t)); + break; + + case 256: + state->hashbitlen = 256; + state->bits_processed = 0; + state->unprocessed_bits = 0; + bcopy(i256p2, hashState256(state)->DoublePipe, + 16 * sizeof (uint32_t)); + break; + + case 384: + state->hashbitlen = 384; + state->bits_processed = 0; + state->unprocessed_bits = 0; + bcopy(i384p2, hashState384(state)->DoublePipe, + 16 * sizeof (uint64_t)); + break; + + case 512: + state->hashbitlen = 512; + state->bits_processed = 0; + state->unprocessed_bits = 0; + bcopy(i512p2, hashState224(state)->DoublePipe, + 16 * sizeof (uint64_t)); + break; + } +} + + +void +EdonRUpdate(EdonRState *state, const uint8_t *data, size_t databitlen) +{ + uint32_t *data32; + uint64_t *data64; + + size_t bits_processed; + + ASSERT(EDONR_VALID_HASHBITLEN(state->hashbitlen)); + switch (state->hashbitlen) { + case 224: + case 256: + if (state->unprocessed_bits > 0) { + /* LastBytes = databitlen / 8 */ + int LastBytes = (int)databitlen >> 3; + + ASSERT(state->unprocessed_bits + databitlen <= + EdonR256_BLOCK_SIZE * 8); + + bcopy(data, hashState256(state)->LastPart + + (state->unprocessed_bits >> 3), LastBytes); + state->unprocessed_bits += (int)databitlen; + databitlen = state->unprocessed_bits; + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data32 = (uint32_t *)hashState256(state)->LastPart; + } else + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data32 = (uint32_t *)data; + + bits_processed = Q256(databitlen, data32, + hashState256(state)->DoublePipe); + state->bits_processed += bits_processed; + databitlen -= bits_processed; + state->unprocessed_bits = (int)databitlen; + if (databitlen > 0) { + /* LastBytes = Ceil(databitlen / 8) */ + int LastBytes = + ((~(((-(int)databitlen) >> 3) & 0x01ff)) + + 1) & 0x01ff; + + data32 += bits_processed >> 5; /* byte size update */ + bcopy(data32, hashState256(state)->LastPart, LastBytes); + } + break; + + case 384: + case 512: + if (state->unprocessed_bits > 0) { + /* LastBytes = databitlen / 8 */ + int LastBytes = (int)databitlen >> 3; + + ASSERT(state->unprocessed_bits + databitlen <= + EdonR512_BLOCK_SIZE * 8); + + bcopy(data, hashState512(state)->LastPart + + (state->unprocessed_bits >> 3), LastBytes); + state->unprocessed_bits += (int)databitlen; + databitlen = state->unprocessed_bits; + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data64 = (uint64_t *)hashState512(state)->LastPart; + } else + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data64 = (uint64_t *)data; + + bits_processed = Q512(databitlen, data64, + hashState512(state)->DoublePipe); + state->bits_processed += bits_processed; + databitlen -= bits_processed; + state->unprocessed_bits = (int)databitlen; + if (databitlen > 0) { + /* LastBytes = Ceil(databitlen / 8) */ + int LastBytes = + ((~(((-(int)databitlen) >> 3) & 0x03ff)) + + 1) & 0x03ff; + + data64 += bits_processed >> 6; /* byte size update */ + bcopy(data64, hashState512(state)->LastPart, LastBytes); + } + break; + } +} + +void +EdonRFinal(EdonRState *state, uint8_t *hashval) +{ + uint32_t *data32; + uint64_t *data64, num_bits; + + size_t databitlen; + int LastByte, PadOnePosition; + + num_bits = state->bits_processed + state->unprocessed_bits; + ASSERT(EDONR_VALID_HASHBITLEN(state->hashbitlen)); + switch (state->hashbitlen) { + case 224: + case 256: + LastByte = (int)state->unprocessed_bits >> 3; + PadOnePosition = 7 - (state->unprocessed_bits & 0x07); + hashState256(state)->LastPart[LastByte] = + (hashState256(state)->LastPart[LastByte] + & (0xff << (PadOnePosition + 1))) ^ + (0x01 << PadOnePosition); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data64 = (uint64_t *)hashState256(state)->LastPart; + + if (state->unprocessed_bits < 448) { + (void) memset((hashState256(state)->LastPart) + + LastByte + 1, 0x00, + EdonR256_BLOCK_SIZE - LastByte - 9); + databitlen = EdonR256_BLOCK_SIZE * 8; +#if defined(MACHINE_IS_BIG_ENDIAN) + st_swap64(num_bits, data64 + 7); +#else + data64[7] = num_bits; +#endif + } else { + (void) memset((hashState256(state)->LastPart) + + LastByte + 1, 0x00, + EdonR256_BLOCK_SIZE * 2 - LastByte - 9); + databitlen = EdonR256_BLOCK_SIZE * 16; +#if defined(MACHINE_IS_BIG_ENDIAN) + st_swap64(num_bits, data64 + 15); +#else + data64[15] = num_bits; +#endif + } + + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data32 = (uint32_t *)hashState256(state)->LastPart; + state->bits_processed += Q256(databitlen, data32, + hashState256(state)->DoublePipe); + break; + + case 384: + case 512: + LastByte = (int)state->unprocessed_bits >> 3; + PadOnePosition = 7 - (state->unprocessed_bits & 0x07); + hashState512(state)->LastPart[LastByte] = + (hashState512(state)->LastPart[LastByte] + & (0xff << (PadOnePosition + 1))) ^ + (0x01 << PadOnePosition); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + data64 = (uint64_t *)hashState512(state)->LastPart; + + if (state->unprocessed_bits < 960) { + (void) memset((hashState512(state)->LastPart) + + LastByte + 1, 0x00, + EdonR512_BLOCK_SIZE - LastByte - 9); + databitlen = EdonR512_BLOCK_SIZE * 8; +#if defined(MACHINE_IS_BIG_ENDIAN) + st_swap64(num_bits, data64 + 15); +#else + data64[15] = num_bits; +#endif + } else { + (void) memset((hashState512(state)->LastPart) + + LastByte + 1, 0x00, + EdonR512_BLOCK_SIZE * 2 - LastByte - 9); + databitlen = EdonR512_BLOCK_SIZE * 16; +#if defined(MACHINE_IS_BIG_ENDIAN) + st_swap64(num_bits, data64 + 31); +#else + data64[31] = num_bits; +#endif + } + + state->bits_processed += Q512(databitlen, data64, + hashState512(state)->DoublePipe); + break; + } + + switch (state->hashbitlen) { + case 224: { +#if defined(MACHINE_IS_BIG_ENDIAN) + uint32_t *d32 = (uint32_t *)hashval; + uint32_t *s32 = hashState224(state)->DoublePipe + 9; + int j; + + for (j = 0; j < EdonR224_DIGEST_SIZE >> 2; j++) + st_swap32(s32[j], d32 + j); +#else + bcopy(hashState256(state)->DoublePipe + 9, hashval, + EdonR224_DIGEST_SIZE); +#endif + break; + } + case 256: { +#if defined(MACHINE_IS_BIG_ENDIAN) + uint32_t *d32 = (uint32_t *)hashval; + uint32_t *s32 = hashState224(state)->DoublePipe + 8; + int j; + + for (j = 0; j < EdonR256_DIGEST_SIZE >> 2; j++) + st_swap32(s32[j], d32 + j); +#else + bcopy(hashState256(state)->DoublePipe + 8, hashval, + EdonR256_DIGEST_SIZE); +#endif + break; + } + case 384: { +#if defined(MACHINE_IS_BIG_ENDIAN) + uint64_t *d64 = (uint64_t *)hashval; + uint64_t *s64 = hashState384(state)->DoublePipe + 10; + int j; + + for (j = 0; j < EdonR384_DIGEST_SIZE >> 3; j++) + st_swap64(s64[j], d64 + j); +#else + bcopy(hashState384(state)->DoublePipe + 10, hashval, + EdonR384_DIGEST_SIZE); +#endif + break; + } + case 512: { +#if defined(MACHINE_IS_BIG_ENDIAN) + uint64_t *d64 = (uint64_t *)hashval; + uint64_t *s64 = hashState512(state)->DoublePipe + 8; + int j; + + for (j = 0; j < EdonR512_DIGEST_SIZE >> 3; j++) + st_swap64(s64[j], d64 + j); +#else + bcopy(hashState512(state)->DoublePipe + 8, hashval, + EdonR512_DIGEST_SIZE); +#endif + break; + } + } +} + + +void +EdonRHash(size_t hashbitlen, const uint8_t *data, size_t databitlen, + uint8_t *hashval) +{ + EdonRState state; + + EdonRInit(&state, hashbitlen); + EdonRUpdate(&state, data, databitlen); + EdonRFinal(&state, hashval); +} + +#ifdef _KERNEL +EXPORT_SYMBOL(EdonRInit); +EXPORT_SYMBOL(EdonRUpdate); +EXPORT_SYMBOL(EdonRHash); +EXPORT_SYMBOL(EdonRFinal); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/algs/edonr/edonr_byteorder.h +++ linux-aws-4.15.0/zfs/module/icp/algs/edonr/edonr_byteorder.h @@ -0,0 +1,216 @@ +/* + * IDI,NTNU + * + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + * + * Copyright (C) 2009, 2010, Jorn Amundsen + * + * C header file to determine compile machine byte order. Take care when cross + * compiling. + * + * $Id: byteorder.h 517 2013-02-17 20:34:39Z joern $ + */ +/* + * Portions copyright (c) 2013, Saso Kiselkov, All rights reserved + */ + +#ifndef _CRYPTO_EDONR_BYTEORDER_H +#define _CRYPTO_EDONR_BYTEORDER_H + + +#include + +#if defined(__BYTE_ORDER) +#if (__BYTE_ORDER == __BIG_ENDIAN) +#define MACHINE_IS_BIG_ENDIAN +#elif (__BYTE_ORDER == __LITTLE_ENDIAN) +#define MACHINE_IS_LITTLE_ENDIAN +#endif +#elif defined(BYTE_ORDER) +#if (BYTE_ORDER == BIG_ENDIAN) +#define MACHINE_IS_BIG_ENDIAN +#elif (BYTE_ORDER == LITTLE_ENDIAN) +#define MACHINE_IS_LITTLE_ENDIAN +#endif +#endif /* __BYTE_ORDER || BYTE_ORDER */ + +#if !defined(MACHINE_IS_BIG_ENDIAN) && !defined(MACHINE_IS_LITTLE_ENDIAN) +#if defined(_BIG_ENDIAN) || defined(_MIPSEB) +#define MACHINE_IS_BIG_ENDIAN +#endif +#if defined(_LITTLE_ENDIAN) || defined(_MIPSEL) +#define MACHINE_IS_LITTLE_ENDIAN +#endif +#endif /* !MACHINE_IS_BIG_ENDIAN && !MACHINE_IS_LITTLE_ENDIAN */ + +#if !defined(MACHINE_IS_BIG_ENDIAN) && !defined(MACHINE_IS_LITTLE_ENDIAN) +#error unknown machine byte sex +#endif + +#define BYTEORDER_INCLUDED + +#if defined(MACHINE_IS_BIG_ENDIAN) +/* + * Byte swapping macros for big endian architectures and compilers, + * add as appropriate for other architectures and/or compilers. + * + * ld_swap64(src,dst) : uint64_t dst = *(src) + * st_swap64(src,dst) : *(dst) = uint64_t src + */ + +#if defined(__PPC__) || defined(_ARCH_PPC) + +#if defined(__64BIT__) +#if defined(_ARCH_PWR7) +#define aix_ld_swap64(s64, d64)\ + __asm__("ldbrx %0,0,%1" : "=r"(d64) : "r"(s64)) +#define aix_st_swap64(s64, d64)\ + __asm__ volatile("stdbrx %1,0,%0" : : "r"(d64), "r"(s64)) +#else +#define aix_ld_swap64(s64, d64) \ +{ \ + uint64_t *s4 = 0, h; /* initialize to zero for gcc warning */ \ + \ + __asm__("addi %0,%3,4;lwbrx %1,0,%3;lwbrx %2,0,%0;rldimi %1,%2,32,0"\ + : "+r"(s4), "=r"(d64), "=r"(h) : "b"(s64)); \ +} + +#define aix_st_swap64(s64, d64) \ +{ \ + uint64_t *s4 = 0, h; /* initialize to zero for gcc warning */ \ + h = (s64) >> 32; \ + __asm__ volatile("addi %0,%3,4;stwbrx %1,0,%3;stwbrx %2,0,%0" \ + : "+r"(s4) : "r"(s64), "r"(h), "b"(d64)); \ +} +#endif /* 64BIT && PWR7 */ +#else +#define aix_ld_swap64(s64, d64) \ +{ \ + uint32_t *s4 = 0, h, l; /* initialize to zero for gcc warning */\ + __asm__("addi %0,%3,4;lwbrx %1,0,%3;lwbrx %2,0,%0" \ + : "+r"(s4), "=r"(l), "=r"(h) : "b"(s64)); \ + d64 = ((uint64_t)h<<32) | l; \ +} + +#define aix_st_swap64(s64, d64) \ +{ \ + uint32_t *s4 = 0, h, l; /* initialize to zero for gcc warning */\ + l = (s64) & 0xfffffffful, h = (s64) >> 32; \ + __asm__ volatile("addi %0,%3,4;stwbrx %1,0,%3;stwbrx %2,0,%0" \ + : "+r"(s4) : "r"(l), "r"(h), "b"(d64)); \ +} +#endif /* __64BIT__ */ +#define aix_ld_swap32(s32, d32)\ + __asm__("lwbrx %0,0,%1" : "=r"(d32) : "r"(s32)) +#define aix_st_swap32(s32, d32)\ + __asm__ volatile("stwbrx %1,0,%0" : : "r"(d32), "r"(s32)) +#define ld_swap32(s, d) aix_ld_swap32(s, d) +#define st_swap32(s, d) aix_st_swap32(s, d) +#define ld_swap64(s, d) aix_ld_swap64(s, d) +#define st_swap64(s, d) aix_st_swap64(s, d) +#endif /* __PPC__ || _ARCH_PPC */ + +#if defined(__sparc) +#if !defined(__arch64__) && !defined(__sparcv8) && defined(__sparcv9) +#define __arch64__ +#endif +#if defined(__GNUC__) || (defined(__SUNPRO_C) && __SUNPRO_C > 0x590) +/* need Sun Studio C 5.10 and above for GNU inline assembly */ +#if defined(__arch64__) +#define sparc_ld_swap64(s64, d64) \ + __asm__("ldxa [%1]0x88,%0" : "=r"(d64) : "r"(s64)) +#define sparc_st_swap64(s64, d64) \ + __asm__ volatile("stxa %0,[%1]0x88" : : "r"(s64), "r"(d64)) +#define st_swap64(s, d) sparc_st_swap64(s, d) +#else +#define sparc_ld_swap64(s64, d64) \ +{ \ + uint32_t *s4, h, l; \ + __asm__("add %3,4,%0\n\tlda [%3]0x88,%1\n\tlda [%0]0x88,%2" \ + : "+r"(s4), "=r"(l), "=r"(h) : "r"(s64)); \ + d64 = ((uint64_t)h<<32) | l; \ +} +#define sparc_st_swap64(s64, d64) \ +{ \ + uint32_t *s4, h, l; \ + l = (s64) & 0xfffffffful, h = (s64) >> 32; \ + __asm__ volatile("add %3,4,%0\n\tsta %1,[%3]0x88\n\tsta %2,[%0]0x88"\ + : "+r"(s4) : "r"(l), "r"(h), "r"(d64)); \ +} +#endif /* sparc64 */ +#define sparc_ld_swap32(s32, d32)\ + __asm__("lda [%1]0x88,%0" : "=r"(d32) : "r"(s32)) +#define sparc_st_swap32(s32, d32)\ + __asm__ volatile("sta %0,[%1]0x88" : : "r"(s32), "r"(d32)) +#define ld_swap32(s, d) sparc_ld_swap32(s, d) +#define st_swap32(s, d) sparc_st_swap32(s, d) +#define ld_swap64(s, d) sparc_ld_swap64(s, d) +#define st_swap64(s, d) sparc_st_swap64(s, d) +#endif /* GCC || Sun Studio C > 5.9 */ +#endif /* sparc */ + +/* GCC fallback */ +#if ((__GNUC__ >= 4) || defined(__PGIC__)) && !defined(ld_swap32) +#define ld_swap32(s, d) (d = __builtin_bswap32(*(s))) +#define st_swap32(s, d) (*(d) = __builtin_bswap32(s)) +#endif /* GCC4/PGIC && !swap32 */ +#if ((__GNUC__ >= 4) || defined(__PGIC__)) && !defined(ld_swap64) +#define ld_swap64(s, d) (d = __builtin_bswap64(*(s))) +#define st_swap64(s, d) (*(d) = __builtin_bswap64(s)) +#endif /* GCC4/PGIC && !swap64 */ + +/* generic fallback */ +#if !defined(ld_swap32) +#define ld_swap32(s, d) \ + (d = (*(s) >> 24) | (*(s) >> 8 & 0xff00) | \ + (*(s) << 8 & 0xff0000) | (*(s) << 24)) +#define st_swap32(s, d) \ + (*(d) = ((s) >> 24) | ((s) >> 8 & 0xff00) | \ + ((s) << 8 & 0xff0000) | ((s) << 24)) +#endif +#if !defined(ld_swap64) +#define ld_swap64(s, d) \ + (d = (*(s) >> 56) | (*(s) >> 40 & 0xff00) | \ + (*(s) >> 24 & 0xff0000) | (*(s) >> 8 & 0xff000000) | \ + (*(s) & 0xff000000) << 8 | (*(s) & 0xff0000) << 24 | \ + (*(s) & 0xff00) << 40 | *(s) << 56) +#define st_swap64(s, d) \ + (*(d) = ((s) >> 56) | ((s) >> 40 & 0xff00) | \ + ((s) >> 24 & 0xff0000) | ((s) >> 8 & 0xff000000) | \ + ((s) & 0xff000000) << 8 | ((s) & 0xff0000) << 24 | \ + ((s) & 0xff00) << 40 | (s) << 56) +#endif + +#endif /* MACHINE_IS_BIG_ENDIAN */ + + +#if defined(MACHINE_IS_LITTLE_ENDIAN) +/* replace swaps with simple assignments on little endian systems */ +#undef ld_swap32 +#undef st_swap32 +#define ld_swap32(s, d) (d = *(s)) +#define st_swap32(s, d) (*(d) = s) +#undef ld_swap64 +#undef st_swap64 +#define ld_swap64(s, d) (d = *(s)) +#define st_swap64(s, d) (*(d) = s) +#endif /* MACHINE_IS_LITTLE_ENDIAN */ + +#endif /* _CRYPTO_EDONR_BYTEORDER_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/cbc.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/cbc.c @@ -0,0 +1,305 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +/* + * Algorithm independent CBC functions. + */ +int +cbc_encrypt_contiguous_blocks(cbc_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*encrypt)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + + if (length + ctx->cbc_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->cbc_remainder + ctx->cbc_remainder_len, + length); + ctx->cbc_remainder_len += length; + ctx->cbc_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = (uint8_t *)ctx->cbc_iv; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + do { + /* Unprocessed data from last call. */ + if (ctx->cbc_remainder_len > 0) { + need = block_size - ctx->cbc_remainder_len; + + if (need > remainder) + return (CRYPTO_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->cbc_remainder) + [ctx->cbc_remainder_len], need); + + blockp = (uint8_t *)ctx->cbc_remainder; + } else { + blockp = datap; + } + + if (out == NULL) { + /* + * XOR the previous cipher block or IV with the + * current clear block. + */ + xor_block(lastp, blockp); + encrypt(ctx->cbc_keysched, blockp, blockp); + + ctx->cbc_lastp = blockp; + lastp = blockp; + + if (ctx->cbc_remainder_len > 0) { + bcopy(blockp, ctx->cbc_copy_to, + ctx->cbc_remainder_len); + bcopy(blockp + ctx->cbc_remainder_len, datap, + need); + } + } else { + /* + * XOR the previous cipher block or IV with the + * current clear block. + */ + xor_block(blockp, lastp); + encrypt(ctx->cbc_keysched, lastp, lastp); + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + /* copy block to where it belongs */ + if (out_data_1_len == block_size) { + copy_block(lastp, out_data_1); + } else { + bcopy(lastp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(lastp + out_data_1_len, + out_data_2, + block_size - out_data_1_len); + } + } + /* update offset */ + out->cd_offset += block_size; + } + + /* Update pointer to next block of data to be processed. */ + if (ctx->cbc_remainder_len != 0) { + datap += need; + ctx->cbc_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->cbc_remainder, remainder); + ctx->cbc_remainder_len = remainder; + ctx->cbc_copy_to = datap; + goto out; + } + ctx->cbc_copy_to = NULL; + + } while (remainder > 0); + +out: + /* + * Save the last encrypted block in the context. + */ + if (ctx->cbc_lastp != NULL) { + copy_block((uint8_t *)ctx->cbc_lastp, (uint8_t *)ctx->cbc_iv); + ctx->cbc_lastp = (uint8_t *)ctx->cbc_iv; + } + + return (CRYPTO_SUCCESS); +} + +#define OTHER(a, ctx) \ + (((a) == (ctx)->cbc_lastblock) ? (ctx)->cbc_iv : (ctx)->cbc_lastblock) + +/* ARGSUSED */ +int +cbc_decrypt_contiguous_blocks(cbc_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*decrypt)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + + if (length + ctx->cbc_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->cbc_remainder + ctx->cbc_remainder_len, + length); + ctx->cbc_remainder_len += length; + ctx->cbc_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = ctx->cbc_lastp; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + do { + /* Unprocessed data from last call. */ + if (ctx->cbc_remainder_len > 0) { + need = block_size - ctx->cbc_remainder_len; + + if (need > remainder) + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->cbc_remainder) + [ctx->cbc_remainder_len], need); + + blockp = (uint8_t *)ctx->cbc_remainder; + } else { + blockp = datap; + } + + /* LINTED: pointer alignment */ + copy_block(blockp, (uint8_t *)OTHER((uint64_t *)lastp, ctx)); + + if (out != NULL) { + decrypt(ctx->cbc_keysched, blockp, + (uint8_t *)ctx->cbc_remainder); + blockp = (uint8_t *)ctx->cbc_remainder; + } else { + decrypt(ctx->cbc_keysched, blockp, blockp); + } + + /* + * XOR the previous cipher block or IV with the + * currently decrypted block. + */ + xor_block(lastp, blockp); + + /* LINTED: pointer alignment */ + lastp = (uint8_t *)OTHER((uint64_t *)lastp, ctx); + + if (out != NULL) { + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + bcopy(blockp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(blockp + out_data_1_len, out_data_2, + block_size - out_data_1_len); + } + + /* update offset */ + out->cd_offset += block_size; + + } else if (ctx->cbc_remainder_len > 0) { + /* copy temporary block to where it belongs */ + bcopy(blockp, ctx->cbc_copy_to, ctx->cbc_remainder_len); + bcopy(blockp + ctx->cbc_remainder_len, datap, need); + } + + /* Update pointer to next block of data to be processed. */ + if (ctx->cbc_remainder_len != 0) { + datap += need; + ctx->cbc_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->cbc_remainder, remainder); + ctx->cbc_remainder_len = remainder; + ctx->cbc_lastp = lastp; + ctx->cbc_copy_to = datap; + return (CRYPTO_SUCCESS); + } + ctx->cbc_copy_to = NULL; + + } while (remainder > 0); + + ctx->cbc_lastp = lastp; + return (CRYPTO_SUCCESS); +} + +int +cbc_init_ctx(cbc_ctx_t *cbc_ctx, char *param, size_t param_len, + size_t block_size, void (*copy_block)(uint8_t *, uint64_t *)) +{ + /* + * Copy IV into context. + * + * If cm_param == NULL then the IV comes from the + * cd_miscdata field in the crypto_data structure. + */ + if (param != NULL) { + ASSERT(param_len == block_size); + copy_block((uchar_t *)param, cbc_ctx->cbc_iv); + } + + cbc_ctx->cbc_lastp = (uint8_t *)&cbc_ctx->cbc_iv[0]; + cbc_ctx->cbc_flags |= CBC_MODE; + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +void * +cbc_alloc_ctx(int kmflag) +{ + cbc_ctx_t *cbc_ctx; + + if ((cbc_ctx = kmem_zalloc(sizeof (cbc_ctx_t), kmflag)) == NULL) + return (NULL); + + cbc_ctx->cbc_flags = CBC_MODE; + return (cbc_ctx); +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/ccm.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/ccm.c @@ -0,0 +1,920 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +#if defined(__i386) || defined(__amd64) +#include +#define UNALIGNED_POINTERS_PERMITTED +#endif + +/* + * Encrypt multiple blocks of data in CCM mode. Decrypt for CCM mode + * is done in another function. + */ +int +ccm_mode_encrypt_contiguous_blocks(ccm_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + uint64_t counter; + uint8_t *mac_buf; + + if (length + ctx->ccm_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->ccm_remainder + ctx->ccm_remainder_len, + length); + ctx->ccm_remainder_len += length; + ctx->ccm_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = (uint8_t *)ctx->ccm_cb; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + mac_buf = (uint8_t *)ctx->ccm_mac_buf; + + do { + /* Unprocessed data from last call. */ + if (ctx->ccm_remainder_len > 0) { + need = block_size - ctx->ccm_remainder_len; + + if (need > remainder) + return (CRYPTO_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->ccm_remainder) + [ctx->ccm_remainder_len], need); + + blockp = (uint8_t *)ctx->ccm_remainder; + } else { + blockp = datap; + } + + /* + * do CBC MAC + * + * XOR the previous cipher block current clear block. + * mac_buf always contain previous cipher block. + */ + xor_block(blockp, mac_buf); + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + + /* ccm_cb is the counter block */ + encrypt_block(ctx->ccm_keysched, (uint8_t *)ctx->ccm_cb, + (uint8_t *)ctx->ccm_tmp); + + lastp = (uint8_t *)ctx->ccm_tmp; + + /* + * Increment counter. Counter bits are confined + * to the bottom 64 bits of the counter block. + */ +#ifdef _LITTLE_ENDIAN + counter = ntohll(ctx->ccm_cb[1] & ctx->ccm_counter_mask); + counter = htonll(counter + 1); +#else + counter = ctx->ccm_cb[1] & ctx->ccm_counter_mask; + counter++; +#endif /* _LITTLE_ENDIAN */ + counter &= ctx->ccm_counter_mask; + ctx->ccm_cb[1] = + (ctx->ccm_cb[1] & ~(ctx->ccm_counter_mask)) | counter; + + /* + * XOR encrypted counter block with the current clear block. + */ + xor_block(blockp, lastp); + + ctx->ccm_processed_data_len += block_size; + + if (out == NULL) { + if (ctx->ccm_remainder_len > 0) { + bcopy(blockp, ctx->ccm_copy_to, + ctx->ccm_remainder_len); + bcopy(blockp + ctx->ccm_remainder_len, datap, + need); + } + } else { + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + /* copy block to where it belongs */ + if (out_data_1_len == block_size) { + copy_block(lastp, out_data_1); + } else { + bcopy(lastp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(lastp + out_data_1_len, + out_data_2, + block_size - out_data_1_len); + } + } + /* update offset */ + out->cd_offset += block_size; + } + + /* Update pointer to next block of data to be processed. */ + if (ctx->ccm_remainder_len != 0) { + datap += need; + ctx->ccm_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->ccm_remainder, remainder); + ctx->ccm_remainder_len = remainder; + ctx->ccm_copy_to = datap; + goto out; + } + ctx->ccm_copy_to = NULL; + + } while (remainder > 0); + +out: + return (CRYPTO_SUCCESS); +} + +void +calculate_ccm_mac(ccm_ctx_t *ctx, uint8_t *ccm_mac, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *)) +{ + uint64_t counter; + uint8_t *counterp, *mac_buf; + int i; + + mac_buf = (uint8_t *)ctx->ccm_mac_buf; + + /* first counter block start with index 0 */ + counter = 0; + ctx->ccm_cb[1] = (ctx->ccm_cb[1] & ~(ctx->ccm_counter_mask)) | counter; + + counterp = (uint8_t *)ctx->ccm_tmp; + encrypt_block(ctx->ccm_keysched, (uint8_t *)ctx->ccm_cb, counterp); + + /* calculate XOR of MAC with first counter block */ + for (i = 0; i < ctx->ccm_mac_len; i++) { + ccm_mac[i] = mac_buf[i] ^ counterp[i]; + } +} + +/* ARGSUSED */ +int +ccm_encrypt_final(ccm_ctx_t *ctx, crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint8_t *lastp, *mac_buf, *ccm_mac_p, *macp = NULL; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + int i; + + if (out->cd_length < (ctx->ccm_remainder_len + ctx->ccm_mac_len)) { + return (CRYPTO_DATA_LEN_RANGE); + } + + /* + * When we get here, the number of bytes of payload processed + * plus whatever data remains, if any, + * should be the same as the number of bytes that's being + * passed in the argument during init time. + */ + if ((ctx->ccm_processed_data_len + ctx->ccm_remainder_len) + != (ctx->ccm_data_len)) { + return (CRYPTO_DATA_LEN_RANGE); + } + + mac_buf = (uint8_t *)ctx->ccm_mac_buf; + + if (ctx->ccm_remainder_len > 0) { + + /* ccm_mac_input_buf is not used for encryption */ + macp = (uint8_t *)ctx->ccm_mac_input_buf; + bzero(macp, block_size); + + /* copy remainder to temporary buffer */ + bcopy(ctx->ccm_remainder, macp, ctx->ccm_remainder_len); + + /* calculate the CBC MAC */ + xor_block(macp, mac_buf); + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + + /* calculate the counter mode */ + lastp = (uint8_t *)ctx->ccm_tmp; + encrypt_block(ctx->ccm_keysched, (uint8_t *)ctx->ccm_cb, lastp); + + /* XOR with counter block */ + for (i = 0; i < ctx->ccm_remainder_len; i++) { + macp[i] ^= lastp[i]; + } + ctx->ccm_processed_data_len += ctx->ccm_remainder_len; + } + + /* Calculate the CCM MAC */ + ccm_mac_p = (uint8_t *)ctx->ccm_tmp; + calculate_ccm_mac(ctx, ccm_mac_p, encrypt_block); + + crypto_init_ptrs(out, &iov_or_mp, &offset); + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, + ctx->ccm_remainder_len + ctx->ccm_mac_len); + + if (ctx->ccm_remainder_len > 0) { + + /* copy temporary block to where it belongs */ + if (out_data_2 == NULL) { + /* everything will fit in out_data_1 */ + bcopy(macp, out_data_1, ctx->ccm_remainder_len); + bcopy(ccm_mac_p, out_data_1 + ctx->ccm_remainder_len, + ctx->ccm_mac_len); + } else { + + if (out_data_1_len < ctx->ccm_remainder_len) { + + size_t data_2_len_used; + + bcopy(macp, out_data_1, out_data_1_len); + + data_2_len_used = ctx->ccm_remainder_len + - out_data_1_len; + + bcopy((uint8_t *)macp + out_data_1_len, + out_data_2, data_2_len_used); + bcopy(ccm_mac_p, out_data_2 + data_2_len_used, + ctx->ccm_mac_len); + } else { + bcopy(macp, out_data_1, out_data_1_len); + if (out_data_1_len == ctx->ccm_remainder_len) { + /* mac will be in out_data_2 */ + bcopy(ccm_mac_p, out_data_2, + ctx->ccm_mac_len); + } else { + size_t len_not_used = out_data_1_len - + ctx->ccm_remainder_len; + /* + * part of mac in will be in + * out_data_1, part of the mac will be + * in out_data_2 + */ + bcopy(ccm_mac_p, + out_data_1 + ctx->ccm_remainder_len, + len_not_used); + bcopy(ccm_mac_p + len_not_used, + out_data_2, + ctx->ccm_mac_len - len_not_used); + + } + } + } + } else { + /* copy block to where it belongs */ + bcopy(ccm_mac_p, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(ccm_mac_p + out_data_1_len, out_data_2, + block_size - out_data_1_len); + } + } + out->cd_offset += ctx->ccm_remainder_len + ctx->ccm_mac_len; + ctx->ccm_remainder_len = 0; + return (CRYPTO_SUCCESS); +} + +/* + * This will only deal with decrypting the last block of the input that + * might not be a multiple of block length. + */ +void +ccm_decrypt_incomplete_block(ccm_ctx_t *ctx, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *)) +{ + uint8_t *datap, *outp, *counterp; + int i; + + datap = (uint8_t *)ctx->ccm_remainder; + outp = &((ctx->ccm_pt_buf)[ctx->ccm_processed_data_len]); + + counterp = (uint8_t *)ctx->ccm_tmp; + encrypt_block(ctx->ccm_keysched, (uint8_t *)ctx->ccm_cb, counterp); + + /* XOR with counter block */ + for (i = 0; i < ctx->ccm_remainder_len; i++) { + outp[i] = datap[i] ^ counterp[i]; + } +} + +/* + * This will decrypt the cipher text. However, the plaintext won't be + * returned to the caller. It will be returned when decrypt_final() is + * called if the MAC matches + */ +/* ARGSUSED */ +int +ccm_mode_decrypt_contiguous_blocks(ccm_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *cbp; + uint64_t counter; + size_t pt_len, total_decrypted_len, mac_len, pm_len, pd_len; + uint8_t *resultp; + + + pm_len = ctx->ccm_processed_mac_len; + + if (pm_len > 0) { + uint8_t *tmp; + /* + * all ciphertext has been processed, just waiting for + * part of the value of the mac + */ + if ((pm_len + length) > ctx->ccm_mac_len) { + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + } + tmp = (uint8_t *)ctx->ccm_mac_input_buf; + + bcopy(datap, tmp + pm_len, length); + + ctx->ccm_processed_mac_len += length; + return (CRYPTO_SUCCESS); + } + + /* + * If we decrypt the given data, what total amount of data would + * have been decrypted? + */ + pd_len = ctx->ccm_processed_data_len; + total_decrypted_len = pd_len + length + ctx->ccm_remainder_len; + + if (total_decrypted_len > + (ctx->ccm_data_len + ctx->ccm_mac_len)) { + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + } + + pt_len = ctx->ccm_data_len; + + if (total_decrypted_len > pt_len) { + /* + * part of the input will be the MAC, need to isolate that + * to be dealt with later. The left-over data in + * ccm_remainder_len from last time will not be part of the + * MAC. Otherwise, it would have already been taken out + * when this call is made last time. + */ + size_t pt_part = pt_len - pd_len - ctx->ccm_remainder_len; + + mac_len = length - pt_part; + + ctx->ccm_processed_mac_len = mac_len; + bcopy(data + pt_part, ctx->ccm_mac_input_buf, mac_len); + + if (pt_part + ctx->ccm_remainder_len < block_size) { + /* + * since this is last of the ciphertext, will + * just decrypt with it here + */ + bcopy(datap, &((uint8_t *)ctx->ccm_remainder) + [ctx->ccm_remainder_len], pt_part); + ctx->ccm_remainder_len += pt_part; + ccm_decrypt_incomplete_block(ctx, encrypt_block); + ctx->ccm_processed_data_len += ctx->ccm_remainder_len; + ctx->ccm_remainder_len = 0; + return (CRYPTO_SUCCESS); + } else { + /* let rest of the code handle this */ + length = pt_part; + } + } else if (length + ctx->ccm_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->ccm_remainder + ctx->ccm_remainder_len, + length); + ctx->ccm_remainder_len += length; + ctx->ccm_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + do { + /* Unprocessed data from last call. */ + if (ctx->ccm_remainder_len > 0) { + need = block_size - ctx->ccm_remainder_len; + + if (need > remainder) + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->ccm_remainder) + [ctx->ccm_remainder_len], need); + + blockp = (uint8_t *)ctx->ccm_remainder; + } else { + blockp = datap; + } + + /* Calculate the counter mode, ccm_cb is the counter block */ + cbp = (uint8_t *)ctx->ccm_tmp; + encrypt_block(ctx->ccm_keysched, (uint8_t *)ctx->ccm_cb, cbp); + + /* + * Increment counter. + * Counter bits are confined to the bottom 64 bits + */ +#ifdef _LITTLE_ENDIAN + counter = ntohll(ctx->ccm_cb[1] & ctx->ccm_counter_mask); + counter = htonll(counter + 1); +#else + counter = ctx->ccm_cb[1] & ctx->ccm_counter_mask; + counter++; +#endif /* _LITTLE_ENDIAN */ + counter &= ctx->ccm_counter_mask; + ctx->ccm_cb[1] = + (ctx->ccm_cb[1] & ~(ctx->ccm_counter_mask)) | counter; + + /* XOR with the ciphertext */ + xor_block(blockp, cbp); + + /* Copy the plaintext to the "holding buffer" */ + resultp = (uint8_t *)ctx->ccm_pt_buf + + ctx->ccm_processed_data_len; + copy_block(cbp, resultp); + + ctx->ccm_processed_data_len += block_size; + + ctx->ccm_lastp = blockp; + + /* Update pointer to next block of data to be processed. */ + if (ctx->ccm_remainder_len != 0) { + datap += need; + ctx->ccm_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->ccm_remainder, remainder); + ctx->ccm_remainder_len = remainder; + ctx->ccm_copy_to = datap; + if (ctx->ccm_processed_mac_len > 0) { + /* + * not expecting anymore ciphertext, just + * compute plaintext for the remaining input + */ + ccm_decrypt_incomplete_block(ctx, + encrypt_block); + ctx->ccm_processed_data_len += remainder; + ctx->ccm_remainder_len = 0; + } + goto out; + } + ctx->ccm_copy_to = NULL; + + } while (remainder > 0); + +out: + return (CRYPTO_SUCCESS); +} + +int +ccm_decrypt_final(ccm_ctx_t *ctx, crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t mac_remain, pt_len; + uint8_t *pt, *mac_buf, *macp, *ccm_mac_p; + int rv; + + pt_len = ctx->ccm_data_len; + + /* Make sure output buffer can fit all of the plaintext */ + if (out->cd_length < pt_len) { + return (CRYPTO_DATA_LEN_RANGE); + } + + pt = ctx->ccm_pt_buf; + mac_remain = ctx->ccm_processed_data_len; + mac_buf = (uint8_t *)ctx->ccm_mac_buf; + + macp = (uint8_t *)ctx->ccm_tmp; + + while (mac_remain > 0) { + + if (mac_remain < block_size) { + bzero(macp, block_size); + bcopy(pt, macp, mac_remain); + mac_remain = 0; + } else { + copy_block(pt, macp); + mac_remain -= block_size; + pt += block_size; + } + + /* calculate the CBC MAC */ + xor_block(macp, mac_buf); + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + } + + /* Calculate the CCM MAC */ + ccm_mac_p = (uint8_t *)ctx->ccm_tmp; + calculate_ccm_mac((ccm_ctx_t *)ctx, ccm_mac_p, encrypt_block); + + /* compare the input CCM MAC value with what we calculated */ + if (bcmp(ctx->ccm_mac_input_buf, ccm_mac_p, ctx->ccm_mac_len)) { + /* They don't match */ + return (CRYPTO_INVALID_MAC); + } else { + rv = crypto_put_output_data(ctx->ccm_pt_buf, out, pt_len); + if (rv != CRYPTO_SUCCESS) + return (rv); + out->cd_offset += pt_len; + } + return (CRYPTO_SUCCESS); +} + +int +ccm_validate_args(CK_AES_CCM_PARAMS *ccm_param, boolean_t is_encrypt_init) +{ + size_t macSize, nonceSize; + uint8_t q; + uint64_t maxValue; + + /* + * Check the length of the MAC. The only valid + * lengths for the MAC are: 4, 6, 8, 10, 12, 14, 16 + */ + macSize = ccm_param->ulMACSize; + if ((macSize < 4) || (macSize > 16) || ((macSize % 2) != 0)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + + /* Check the nonce length. Valid values are 7, 8, 9, 10, 11, 12, 13 */ + nonceSize = ccm_param->ulNonceSize; + if ((nonceSize < 7) || (nonceSize > 13)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + + /* q is the length of the field storing the length, in bytes */ + q = (uint8_t)((15 - nonceSize) & 0xFF); + + + /* + * If it is decrypt, need to make sure size of ciphertext is at least + * bigger than MAC len + */ + if ((!is_encrypt_init) && (ccm_param->ulDataSize < macSize)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + + /* + * Check to make sure the length of the payload is within the + * range of values allowed by q + */ + if (q < 8) { + maxValue = (1ULL << (q * 8)) - 1; + } else { + maxValue = ULONG_MAX; + } + + if (ccm_param->ulDataSize > maxValue) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + return (CRYPTO_SUCCESS); +} + +/* + * Format the first block used in CBC-MAC (B0) and the initial counter + * block based on formatting functions and counter generation functions + * specified in RFC 3610 and NIST publication 800-38C, appendix A + * + * b0 is the first block used in CBC-MAC + * cb0 is the first counter block + * + * It's assumed that the arguments b0 and cb0 are preallocated AES blocks + * + */ +static void +ccm_format_initial_blocks(uchar_t *nonce, ulong_t nonceSize, + ulong_t authDataSize, uint8_t *b0, ccm_ctx_t *aes_ctx) +{ + uint64_t payloadSize; + uint8_t t, q, have_adata = 0; + size_t limit; + int i, j, k; + uint64_t mask = 0; + uint8_t *cb; + + q = (uint8_t)((15 - nonceSize) & 0xFF); + t = (uint8_t)((aes_ctx->ccm_mac_len) & 0xFF); + + /* Construct the first octet of b0 */ + if (authDataSize > 0) { + have_adata = 1; + } + b0[0] = (have_adata << 6) | (((t - 2) / 2) << 3) | (q - 1); + + /* copy the nonce value into b0 */ + bcopy(nonce, &(b0[1]), nonceSize); + + /* store the length of the payload into b0 */ + bzero(&(b0[1+nonceSize]), q); + + payloadSize = aes_ctx->ccm_data_len; + limit = 8 < q ? 8 : q; + + for (i = 0, j = 0, k = 15; i < limit; i++, j += 8, k--) { + b0[k] = (uint8_t)((payloadSize >> j) & 0xFF); + } + + /* format the counter block */ + + cb = (uint8_t *)aes_ctx->ccm_cb; + + cb[0] = 0x07 & (q-1); /* first byte */ + + /* copy the nonce value into the counter block */ + bcopy(nonce, &(cb[1]), nonceSize); + + bzero(&(cb[1+nonceSize]), q); + + /* Create the mask for the counter field based on the size of nonce */ + q <<= 3; + while (q-- > 0) { + mask |= (1ULL << q); + } + +#ifdef _LITTLE_ENDIAN + mask = htonll(mask); +#endif + aes_ctx->ccm_counter_mask = mask; + + /* + * During calculation, we start using counter block 1, we will + * set it up right here. + * We can just set the last byte to have the value 1, because + * even with the biggest nonce of 13, the last byte of the + * counter block will be used for the counter value. + */ + cb[15] = 0x01; +} + +/* + * Encode the length of the associated data as + * specified in RFC 3610 and NIST publication 800-38C, appendix A + */ +static void +encode_adata_len(ulong_t auth_data_len, uint8_t *encoded, size_t *encoded_len) +{ +#ifdef UNALIGNED_POINTERS_PERMITTED + uint32_t *lencoded_ptr; +#ifdef _LP64 + uint64_t *llencoded_ptr; +#endif +#endif /* UNALIGNED_POINTERS_PERMITTED */ + + if (auth_data_len < ((1ULL<<16) - (1ULL<<8))) { + /* 0 < a < (2^16-2^8) */ + *encoded_len = 2; + encoded[0] = (auth_data_len & 0xff00) >> 8; + encoded[1] = auth_data_len & 0xff; + + } else if ((auth_data_len >= ((1ULL<<16) - (1ULL<<8))) && + (auth_data_len < (1ULL << 31))) { + /* (2^16-2^8) <= a < 2^32 */ + *encoded_len = 6; + encoded[0] = 0xff; + encoded[1] = 0xfe; +#ifdef UNALIGNED_POINTERS_PERMITTED + lencoded_ptr = (uint32_t *)&encoded[2]; + *lencoded_ptr = htonl(auth_data_len); +#else + encoded[2] = (auth_data_len & 0xff000000) >> 24; + encoded[3] = (auth_data_len & 0xff0000) >> 16; + encoded[4] = (auth_data_len & 0xff00) >> 8; + encoded[5] = auth_data_len & 0xff; +#endif /* UNALIGNED_POINTERS_PERMITTED */ + +#ifdef _LP64 + } else { + /* 2^32 <= a < 2^64 */ + *encoded_len = 10; + encoded[0] = 0xff; + encoded[1] = 0xff; +#ifdef UNALIGNED_POINTERS_PERMITTED + llencoded_ptr = (uint64_t *)&encoded[2]; + *llencoded_ptr = htonl(auth_data_len); +#else + encoded[2] = (auth_data_len & 0xff00000000000000) >> 56; + encoded[3] = (auth_data_len & 0xff000000000000) >> 48; + encoded[4] = (auth_data_len & 0xff0000000000) >> 40; + encoded[5] = (auth_data_len & 0xff00000000) >> 32; + encoded[6] = (auth_data_len & 0xff000000) >> 24; + encoded[7] = (auth_data_len & 0xff0000) >> 16; + encoded[8] = (auth_data_len & 0xff00) >> 8; + encoded[9] = auth_data_len & 0xff; +#endif /* UNALIGNED_POINTERS_PERMITTED */ +#endif /* _LP64 */ + } +} + +/* + * The following function should be call at encrypt or decrypt init time + * for AES CCM mode. + */ +int +ccm_init(ccm_ctx_t *ctx, unsigned char *nonce, size_t nonce_len, + unsigned char *auth_data, size_t auth_data_len, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint8_t *mac_buf, *datap, *ivp, *authp; + size_t remainder, processed; + uint8_t encoded_a[10]; /* max encoded auth data length is 10 octets */ + size_t encoded_a_len = 0; + + mac_buf = (uint8_t *)&(ctx->ccm_mac_buf); + + /* + * Format the 1st block for CBC-MAC and construct the + * 1st counter block. + * + * aes_ctx->ccm_iv is used for storing the counter block + * mac_buf will store b0 at this time. + */ + ccm_format_initial_blocks(nonce, nonce_len, + auth_data_len, mac_buf, ctx); + + /* The IV for CBC MAC for AES CCM mode is always zero */ + ivp = (uint8_t *)ctx->ccm_tmp; + bzero(ivp, block_size); + + xor_block(ivp, mac_buf); + + /* encrypt the nonce */ + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + + /* take care of the associated data, if any */ + if (auth_data_len == 0) { + return (CRYPTO_SUCCESS); + } + + encode_adata_len(auth_data_len, encoded_a, &encoded_a_len); + + remainder = auth_data_len; + + /* 1st block: it contains encoded associated data, and some data */ + authp = (uint8_t *)ctx->ccm_tmp; + bzero(authp, block_size); + bcopy(encoded_a, authp, encoded_a_len); + processed = block_size - encoded_a_len; + if (processed > auth_data_len) { + /* in case auth_data is very small */ + processed = auth_data_len; + } + bcopy(auth_data, authp+encoded_a_len, processed); + /* xor with previous buffer */ + xor_block(authp, mac_buf); + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + remainder -= processed; + if (remainder == 0) { + /* a small amount of associated data, it's all done now */ + return (CRYPTO_SUCCESS); + } + + do { + if (remainder < block_size) { + /* + * There's not a block full of data, pad rest of + * buffer with zero + */ + bzero(authp, block_size); + bcopy(&(auth_data[processed]), authp, remainder); + datap = (uint8_t *)authp; + remainder = 0; + } else { + datap = (uint8_t *)(&(auth_data[processed])); + processed += block_size; + remainder -= block_size; + } + + xor_block(datap, mac_buf); + encrypt_block(ctx->ccm_keysched, mac_buf, mac_buf); + + } while (remainder > 0); + + return (CRYPTO_SUCCESS); +} + +int +ccm_init_ctx(ccm_ctx_t *ccm_ctx, char *param, int kmflag, + boolean_t is_encrypt_init, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + int rv; + CK_AES_CCM_PARAMS *ccm_param; + + if (param != NULL) { + ccm_param = (CK_AES_CCM_PARAMS *)param; + + if ((rv = ccm_validate_args(ccm_param, + is_encrypt_init)) != 0) { + return (rv); + } + + ccm_ctx->ccm_mac_len = ccm_param->ulMACSize; + if (is_encrypt_init) { + ccm_ctx->ccm_data_len = ccm_param->ulDataSize; + } else { + ccm_ctx->ccm_data_len = + ccm_param->ulDataSize - ccm_ctx->ccm_mac_len; + ccm_ctx->ccm_processed_mac_len = 0; + } + ccm_ctx->ccm_processed_data_len = 0; + + ccm_ctx->ccm_flags |= CCM_MODE; + } else { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + goto out; + } + + if (ccm_init(ccm_ctx, ccm_param->nonce, ccm_param->ulNonceSize, + ccm_param->authData, ccm_param->ulAuthDataSize, block_size, + encrypt_block, xor_block) != 0) { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + goto out; + } + if (!is_encrypt_init) { + /* allocate buffer for storing decrypted plaintext */ + ccm_ctx->ccm_pt_buf = vmem_alloc(ccm_ctx->ccm_data_len, + kmflag); + if (ccm_ctx->ccm_pt_buf == NULL) { + rv = CRYPTO_HOST_MEMORY; + } + } +out: + return (rv); +} + +void * +ccm_alloc_ctx(int kmflag) +{ + ccm_ctx_t *ccm_ctx; + + if ((ccm_ctx = kmem_zalloc(sizeof (ccm_ctx_t), kmflag)) == NULL) + return (NULL); + + ccm_ctx->ccm_flags = CCM_MODE; + return (ccm_ctx); +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/ctr.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/ctr.c @@ -0,0 +1,238 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include + +/* + * Encrypt and decrypt multiple blocks of data in counter mode. + */ +int +ctr_mode_contiguous_blocks(ctr_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*cipher)(const void *ks, const uint8_t *pt, uint8_t *ct), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + uint64_t lower_counter, upper_counter; + + if (length + ctx->ctr_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->ctr_remainder + ctx->ctr_remainder_len, + length); + ctx->ctr_remainder_len += length; + ctx->ctr_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = (uint8_t *)ctx->ctr_cb; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + do { + /* Unprocessed data from last call. */ + if (ctx->ctr_remainder_len > 0) { + need = block_size - ctx->ctr_remainder_len; + + if (need > remainder) + return (CRYPTO_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->ctr_remainder) + [ctx->ctr_remainder_len], need); + + blockp = (uint8_t *)ctx->ctr_remainder; + } else { + blockp = datap; + } + + /* ctr_cb is the counter block */ + cipher(ctx->ctr_keysched, (uint8_t *)ctx->ctr_cb, + (uint8_t *)ctx->ctr_tmp); + + lastp = (uint8_t *)ctx->ctr_tmp; + + /* + * Increment Counter. + */ + lower_counter = ntohll(ctx->ctr_cb[1] & ctx->ctr_lower_mask); + lower_counter = htonll(lower_counter + 1); + lower_counter &= ctx->ctr_lower_mask; + ctx->ctr_cb[1] = (ctx->ctr_cb[1] & ~(ctx->ctr_lower_mask)) | + lower_counter; + + /* wrap around */ + if (lower_counter == 0) { + upper_counter = + ntohll(ctx->ctr_cb[0] & ctx->ctr_upper_mask); + upper_counter = htonll(upper_counter + 1); + upper_counter &= ctx->ctr_upper_mask; + ctx->ctr_cb[0] = + (ctx->ctr_cb[0] & ~(ctx->ctr_upper_mask)) | + upper_counter; + } + + /* + * XOR encrypted counter block with the current clear block. + */ + xor_block(blockp, lastp); + + if (out == NULL) { + if (ctx->ctr_remainder_len > 0) { + bcopy(lastp, ctx->ctr_copy_to, + ctx->ctr_remainder_len); + bcopy(lastp + ctx->ctr_remainder_len, datap, + need); + } + } else { + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + /* copy block to where it belongs */ + bcopy(lastp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(lastp + out_data_1_len, out_data_2, + block_size - out_data_1_len); + } + /* update offset */ + out->cd_offset += block_size; + } + + /* Update pointer to next block of data to be processed. */ + if (ctx->ctr_remainder_len != 0) { + datap += need; + ctx->ctr_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->ctr_remainder, remainder); + ctx->ctr_remainder_len = remainder; + ctx->ctr_copy_to = datap; + goto out; + } + ctx->ctr_copy_to = NULL; + + } while (remainder > 0); + +out: + return (CRYPTO_SUCCESS); +} + +int +ctr_mode_final(ctr_ctx_t *ctx, crypto_data_t *out, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *)) +{ + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + uint8_t *p; + int i; + + if (out->cd_length < ctx->ctr_remainder_len) + return (CRYPTO_DATA_LEN_RANGE); + + encrypt_block(ctx->ctr_keysched, (uint8_t *)ctx->ctr_cb, + (uint8_t *)ctx->ctr_tmp); + + lastp = (uint8_t *)ctx->ctr_tmp; + p = (uint8_t *)ctx->ctr_remainder; + for (i = 0; i < ctx->ctr_remainder_len; i++) { + p[i] ^= lastp[i]; + } + + crypto_init_ptrs(out, &iov_or_mp, &offset); + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, ctx->ctr_remainder_len); + + bcopy(p, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy((uint8_t *)p + out_data_1_len, + out_data_2, ctx->ctr_remainder_len - out_data_1_len); + } + out->cd_offset += ctx->ctr_remainder_len; + ctx->ctr_remainder_len = 0; + return (CRYPTO_SUCCESS); +} + +int +ctr_init_ctx(ctr_ctx_t *ctr_ctx, ulong_t count, uint8_t *cb, + void (*copy_block)(uint8_t *, uint8_t *)) +{ + uint64_t upper_mask = 0; + uint64_t lower_mask = 0; + + if (count == 0 || count > 128) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + /* upper 64 bits of the mask */ + if (count >= 64) { + count -= 64; + upper_mask = (count == 64) ? UINT64_MAX : (1ULL << count) - 1; + lower_mask = UINT64_MAX; + } else { + /* now the lower 63 bits */ + lower_mask = (1ULL << count) - 1; + } + ctr_ctx->ctr_lower_mask = htonll(lower_mask); + ctr_ctx->ctr_upper_mask = htonll(upper_mask); + + copy_block(cb, (uchar_t *)ctr_ctx->ctr_cb); + ctr_ctx->ctr_lastp = (uint8_t *)&ctr_ctx->ctr_cb[0]; + ctr_ctx->ctr_flags |= CTR_MODE; + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +void * +ctr_alloc_ctx(int kmflag) +{ + ctr_ctx_t *ctr_ctx; + + if ((ctr_ctx = kmem_zalloc(sizeof (ctr_ctx_t), kmflag)) == NULL) + return (NULL); + + ctr_ctx->ctr_flags = CTR_MODE; + return (ctr_ctx); +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/ecb.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/ecb.c @@ -0,0 +1,143 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +/* + * Algorithm independent ECB functions. + */ +int +ecb_cipher_contiguous_blocks(ecb_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*cipher)(const void *ks, const uint8_t *pt, uint8_t *ct)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + + if (length + ctx->ecb_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->ecb_remainder + ctx->ecb_remainder_len, + length); + ctx->ecb_remainder_len += length; + ctx->ecb_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = (uint8_t *)ctx->ecb_iv; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + do { + /* Unprocessed data from last call. */ + if (ctx->ecb_remainder_len > 0) { + need = block_size - ctx->ecb_remainder_len; + + if (need > remainder) + return (CRYPTO_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->ecb_remainder) + [ctx->ecb_remainder_len], need); + + blockp = (uint8_t *)ctx->ecb_remainder; + } else { + blockp = datap; + } + + if (out == NULL) { + cipher(ctx->ecb_keysched, blockp, blockp); + + ctx->ecb_lastp = blockp; + lastp = blockp; + + if (ctx->ecb_remainder_len > 0) { + bcopy(blockp, ctx->ecb_copy_to, + ctx->ecb_remainder_len); + bcopy(blockp + ctx->ecb_remainder_len, datap, + need); + } + } else { + cipher(ctx->ecb_keysched, blockp, lastp); + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + /* copy block to where it belongs */ + bcopy(lastp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(lastp + out_data_1_len, out_data_2, + block_size - out_data_1_len); + } + /* update offset */ + out->cd_offset += block_size; + } + + /* Update pointer to next block of data to be processed. */ + if (ctx->ecb_remainder_len != 0) { + datap += need; + ctx->ecb_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->ecb_remainder, remainder); + ctx->ecb_remainder_len = remainder; + ctx->ecb_copy_to = datap; + goto out; + } + ctx->ecb_copy_to = NULL; + + } while (remainder > 0); + +out: + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +void * +ecb_alloc_ctx(int kmflag) +{ + ecb_ctx_t *ecb_ctx; + + if ((ecb_ctx = kmem_zalloc(sizeof (ecb_ctx_t), kmflag)) == NULL) + return (NULL); + + ecb_ctx->ecb_flags = ECB_MODE; + return (ecb_ctx); +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/gcm.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/gcm.c @@ -0,0 +1,748 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#if defined(_KERNEL) && defined(__amd64) +#include + +#define KPREEMPT_DISABLE kfpu_begin() +#define KPREEMPT_ENABLE kfpu_end() + +#else +#define KPREEMPT_DISABLE +#define KPREEMPT_ENABLE +#endif /* _KERNEL */ + +#include +#include +#include +#include +#include + +#ifdef __amd64 + +extern void gcm_mul_pclmulqdq(uint64_t *x_in, uint64_t *y, uint64_t *res); +static int intel_pclmulqdq_instruction_present(void); +#endif /* __amd64 */ + +struct aes_block { + uint64_t a; + uint64_t b; +}; + + +/* + * gcm_mul() + * Perform a carry-less multiplication (that is, use XOR instead of the + * multiply operator) on *x_in and *y and place the result in *res. + * + * Byte swap the input (*x_in and *y) and the output (*res). + * + * Note: x_in, y, and res all point to 16-byte numbers (an array of two + * 64-bit integers). + */ +void +gcm_mul(uint64_t *x_in, uint64_t *y, uint64_t *res) +{ +#ifdef __amd64 + if (intel_pclmulqdq_instruction_present()) { + KPREEMPT_DISABLE; + gcm_mul_pclmulqdq(x_in, y, res); + KPREEMPT_ENABLE; + } else +#endif /* __amd64 */ + { + static const uint64_t R = 0xe100000000000000ULL; + struct aes_block z = {0, 0}; + struct aes_block v; + uint64_t x; + int i, j; + + v.a = ntohll(y[0]); + v.b = ntohll(y[1]); + + for (j = 0; j < 2; j++) { + x = ntohll(x_in[j]); + for (i = 0; i < 64; i++, x <<= 1) { + if (x & 0x8000000000000000ULL) { + z.a ^= v.a; + z.b ^= v.b; + } + if (v.b & 1ULL) { + v.b = (v.a << 63)|(v.b >> 1); + v.a = (v.a >> 1) ^ R; + } else { + v.b = (v.a << 63)|(v.b >> 1); + v.a = v.a >> 1; + } + } + } + res[0] = htonll(z.a); + res[1] = htonll(z.b); + } +} + + +#define GHASH(c, d, t) \ + xor_block((uint8_t *)(d), (uint8_t *)(c)->gcm_ghash); \ + gcm_mul((uint64_t *)(void *)(c)->gcm_ghash, (c)->gcm_H, \ + (uint64_t *)(void *)(t)); + + +/* + * Encrypt multiple blocks of data in GCM mode. Decrypt for GCM mode + * is done in another function. + */ +int +gcm_mode_encrypt_contiguous_blocks(gcm_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t remainder = length; + size_t need = 0; + uint8_t *datap = (uint8_t *)data; + uint8_t *blockp; + uint8_t *lastp; + void *iov_or_mp; + offset_t offset; + uint8_t *out_data_1; + uint8_t *out_data_2; + size_t out_data_1_len; + uint64_t counter; + uint64_t counter_mask = ntohll(0x00000000ffffffffULL); + + if (length + ctx->gcm_remainder_len < block_size) { + /* accumulate bytes here and return */ + bcopy(datap, + (uint8_t *)ctx->gcm_remainder + ctx->gcm_remainder_len, + length); + ctx->gcm_remainder_len += length; + ctx->gcm_copy_to = datap; + return (CRYPTO_SUCCESS); + } + + lastp = (uint8_t *)ctx->gcm_cb; + if (out != NULL) + crypto_init_ptrs(out, &iov_or_mp, &offset); + + do { + /* Unprocessed data from last call. */ + if (ctx->gcm_remainder_len > 0) { + need = block_size - ctx->gcm_remainder_len; + + if (need > remainder) + return (CRYPTO_DATA_LEN_RANGE); + + bcopy(datap, &((uint8_t *)ctx->gcm_remainder) + [ctx->gcm_remainder_len], need); + + blockp = (uint8_t *)ctx->gcm_remainder; + } else { + blockp = datap; + } + + /* + * Increment counter. Counter bits are confined + * to the bottom 32 bits of the counter block. + */ + counter = ntohll(ctx->gcm_cb[1] & counter_mask); + counter = htonll(counter + 1); + counter &= counter_mask; + ctx->gcm_cb[1] = (ctx->gcm_cb[1] & ~counter_mask) | counter; + + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_cb, + (uint8_t *)ctx->gcm_tmp); + xor_block(blockp, (uint8_t *)ctx->gcm_tmp); + + lastp = (uint8_t *)ctx->gcm_tmp; + + ctx->gcm_processed_data_len += block_size; + + if (out == NULL) { + if (ctx->gcm_remainder_len > 0) { + bcopy(blockp, ctx->gcm_copy_to, + ctx->gcm_remainder_len); + bcopy(blockp + ctx->gcm_remainder_len, datap, + need); + } + } else { + crypto_get_ptrs(out, &iov_or_mp, &offset, &out_data_1, + &out_data_1_len, &out_data_2, block_size); + + /* copy block to where it belongs */ + if (out_data_1_len == block_size) { + copy_block(lastp, out_data_1); + } else { + bcopy(lastp, out_data_1, out_data_1_len); + if (out_data_2 != NULL) { + bcopy(lastp + out_data_1_len, + out_data_2, + block_size - out_data_1_len); + } + } + /* update offset */ + out->cd_offset += block_size; + } + + /* add ciphertext to the hash */ + GHASH(ctx, ctx->gcm_tmp, ctx->gcm_ghash); + + /* Update pointer to next block of data to be processed. */ + if (ctx->gcm_remainder_len != 0) { + datap += need; + ctx->gcm_remainder_len = 0; + } else { + datap += block_size; + } + + remainder = (size_t)&data[length] - (size_t)datap; + + /* Incomplete last block. */ + if (remainder > 0 && remainder < block_size) { + bcopy(datap, ctx->gcm_remainder, remainder); + ctx->gcm_remainder_len = remainder; + ctx->gcm_copy_to = datap; + goto out; + } + ctx->gcm_copy_to = NULL; + + } while (remainder > 0); +out: + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +int +gcm_encrypt_final(gcm_ctx_t *ctx, crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint64_t counter_mask = ntohll(0x00000000ffffffffULL); + uint8_t *ghash, *macp = NULL; + int i, rv; + + if (out->cd_length < + (ctx->gcm_remainder_len + ctx->gcm_tag_len)) { + return (CRYPTO_DATA_LEN_RANGE); + } + + ghash = (uint8_t *)ctx->gcm_ghash; + + if (ctx->gcm_remainder_len > 0) { + uint64_t counter; + uint8_t *tmpp = (uint8_t *)ctx->gcm_tmp; + + /* + * Here is where we deal with data that is not a + * multiple of the block size. + */ + + /* + * Increment counter. + */ + counter = ntohll(ctx->gcm_cb[1] & counter_mask); + counter = htonll(counter + 1); + counter &= counter_mask; + ctx->gcm_cb[1] = (ctx->gcm_cb[1] & ~counter_mask) | counter; + + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_cb, + (uint8_t *)ctx->gcm_tmp); + + macp = (uint8_t *)ctx->gcm_remainder; + bzero(macp + ctx->gcm_remainder_len, + block_size - ctx->gcm_remainder_len); + + /* XOR with counter block */ + for (i = 0; i < ctx->gcm_remainder_len; i++) { + macp[i] ^= tmpp[i]; + } + + /* add ciphertext to the hash */ + GHASH(ctx, macp, ghash); + + ctx->gcm_processed_data_len += ctx->gcm_remainder_len; + } + + ctx->gcm_len_a_len_c[1] = + htonll(CRYPTO_BYTES2BITS(ctx->gcm_processed_data_len)); + GHASH(ctx, ctx->gcm_len_a_len_c, ghash); + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_J0, + (uint8_t *)ctx->gcm_J0); + xor_block((uint8_t *)ctx->gcm_J0, ghash); + + if (ctx->gcm_remainder_len > 0) { + rv = crypto_put_output_data(macp, out, ctx->gcm_remainder_len); + if (rv != CRYPTO_SUCCESS) + return (rv); + } + out->cd_offset += ctx->gcm_remainder_len; + ctx->gcm_remainder_len = 0; + rv = crypto_put_output_data(ghash, out, ctx->gcm_tag_len); + if (rv != CRYPTO_SUCCESS) + return (rv); + out->cd_offset += ctx->gcm_tag_len; + + return (CRYPTO_SUCCESS); +} + +/* + * This will only deal with decrypting the last block of the input that + * might not be a multiple of block length. + */ +static void +gcm_decrypt_incomplete_block(gcm_ctx_t *ctx, size_t block_size, size_t index, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint8_t *datap, *outp, *counterp; + uint64_t counter; + uint64_t counter_mask = ntohll(0x00000000ffffffffULL); + int i; + + /* + * Increment counter. + * Counter bits are confined to the bottom 32 bits + */ + counter = ntohll(ctx->gcm_cb[1] & counter_mask); + counter = htonll(counter + 1); + counter &= counter_mask; + ctx->gcm_cb[1] = (ctx->gcm_cb[1] & ~counter_mask) | counter; + + datap = (uint8_t *)ctx->gcm_remainder; + outp = &((ctx->gcm_pt_buf)[index]); + counterp = (uint8_t *)ctx->gcm_tmp; + + /* authentication tag */ + bzero((uint8_t *)ctx->gcm_tmp, block_size); + bcopy(datap, (uint8_t *)ctx->gcm_tmp, ctx->gcm_remainder_len); + + /* add ciphertext to the hash */ + GHASH(ctx, ctx->gcm_tmp, ctx->gcm_ghash); + + /* decrypt remaining ciphertext */ + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_cb, counterp); + + /* XOR with counter block */ + for (i = 0; i < ctx->gcm_remainder_len; i++) { + outp[i] = datap[i] ^ counterp[i]; + } +} + +/* ARGSUSED */ +int +gcm_mode_decrypt_contiguous_blocks(gcm_ctx_t *ctx, char *data, size_t length, + crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t new_len; + uint8_t *new; + + /* + * Copy contiguous ciphertext input blocks to plaintext buffer. + * Ciphertext will be decrypted in the final. + */ + if (length > 0) { + new_len = ctx->gcm_pt_buf_len + length; + new = vmem_alloc(new_len, ctx->gcm_kmflag); + bcopy(ctx->gcm_pt_buf, new, ctx->gcm_pt_buf_len); + vmem_free(ctx->gcm_pt_buf, ctx->gcm_pt_buf_len); + if (new == NULL) + return (CRYPTO_HOST_MEMORY); + + ctx->gcm_pt_buf = new; + ctx->gcm_pt_buf_len = new_len; + bcopy(data, &ctx->gcm_pt_buf[ctx->gcm_processed_data_len], + length); + ctx->gcm_processed_data_len += length; + } + + ctx->gcm_remainder_len = 0; + return (CRYPTO_SUCCESS); +} + +int +gcm_decrypt_final(gcm_ctx_t *ctx, crypto_data_t *out, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + size_t pt_len; + size_t remainder; + uint8_t *ghash; + uint8_t *blockp; + uint8_t *cbp; + uint64_t counter; + uint64_t counter_mask = ntohll(0x00000000ffffffffULL); + int processed = 0, rv; + + ASSERT(ctx->gcm_processed_data_len == ctx->gcm_pt_buf_len); + + pt_len = ctx->gcm_processed_data_len - ctx->gcm_tag_len; + ghash = (uint8_t *)ctx->gcm_ghash; + blockp = ctx->gcm_pt_buf; + remainder = pt_len; + while (remainder > 0) { + /* Incomplete last block */ + if (remainder < block_size) { + bcopy(blockp, ctx->gcm_remainder, remainder); + ctx->gcm_remainder_len = remainder; + /* + * not expecting anymore ciphertext, just + * compute plaintext for the remaining input + */ + gcm_decrypt_incomplete_block(ctx, block_size, + processed, encrypt_block, xor_block); + ctx->gcm_remainder_len = 0; + goto out; + } + /* add ciphertext to the hash */ + GHASH(ctx, blockp, ghash); + + /* + * Increment counter. + * Counter bits are confined to the bottom 32 bits + */ + counter = ntohll(ctx->gcm_cb[1] & counter_mask); + counter = htonll(counter + 1); + counter &= counter_mask; + ctx->gcm_cb[1] = (ctx->gcm_cb[1] & ~counter_mask) | counter; + + cbp = (uint8_t *)ctx->gcm_tmp; + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_cb, cbp); + + /* XOR with ciphertext */ + xor_block(cbp, blockp); + + processed += block_size; + blockp += block_size; + remainder -= block_size; + } +out: + ctx->gcm_len_a_len_c[1] = htonll(CRYPTO_BYTES2BITS(pt_len)); + GHASH(ctx, ctx->gcm_len_a_len_c, ghash); + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_J0, + (uint8_t *)ctx->gcm_J0); + xor_block((uint8_t *)ctx->gcm_J0, ghash); + + /* compare the input authentication tag with what we calculated */ + if (bcmp(&ctx->gcm_pt_buf[pt_len], ghash, ctx->gcm_tag_len)) { + /* They don't match */ + return (CRYPTO_INVALID_MAC); + } else { + rv = crypto_put_output_data(ctx->gcm_pt_buf, out, pt_len); + if (rv != CRYPTO_SUCCESS) + return (rv); + out->cd_offset += pt_len; + } + return (CRYPTO_SUCCESS); +} + +static int +gcm_validate_args(CK_AES_GCM_PARAMS *gcm_param) +{ + size_t tag_len; + + /* + * Check the length of the authentication tag (in bits). + */ + tag_len = gcm_param->ulTagBits; + switch (tag_len) { + case 32: + case 64: + case 96: + case 104: + case 112: + case 120: + case 128: + break; + default: + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + + if (gcm_param->ulIvLen == 0) + return (CRYPTO_MECHANISM_PARAM_INVALID); + + return (CRYPTO_SUCCESS); +} + +static void +gcm_format_initial_blocks(uchar_t *iv, ulong_t iv_len, + gcm_ctx_t *ctx, size_t block_size, + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint8_t *cb; + ulong_t remainder = iv_len; + ulong_t processed = 0; + uint8_t *datap, *ghash; + uint64_t len_a_len_c[2]; + + ghash = (uint8_t *)ctx->gcm_ghash; + cb = (uint8_t *)ctx->gcm_cb; + if (iv_len == 12) { + bcopy(iv, cb, 12); + cb[12] = 0; + cb[13] = 0; + cb[14] = 0; + cb[15] = 1; + /* J0 will be used again in the final */ + copy_block(cb, (uint8_t *)ctx->gcm_J0); + } else { + /* GHASH the IV */ + do { + if (remainder < block_size) { + bzero(cb, block_size); + bcopy(&(iv[processed]), cb, remainder); + datap = (uint8_t *)cb; + remainder = 0; + } else { + datap = (uint8_t *)(&(iv[processed])); + processed += block_size; + remainder -= block_size; + } + GHASH(ctx, datap, ghash); + } while (remainder > 0); + + len_a_len_c[0] = 0; + len_a_len_c[1] = htonll(CRYPTO_BYTES2BITS(iv_len)); + GHASH(ctx, len_a_len_c, ctx->gcm_J0); + + /* J0 will be used again in the final */ + copy_block((uint8_t *)ctx->gcm_J0, (uint8_t *)cb); + } +} + +/* + * The following function is called at encrypt or decrypt init time + * for AES GCM mode. + */ +int +gcm_init(gcm_ctx_t *ctx, unsigned char *iv, size_t iv_len, + unsigned char *auth_data, size_t auth_data_len, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + uint8_t *ghash, *datap, *authp; + size_t remainder, processed; + + /* encrypt zero block to get subkey H */ + bzero(ctx->gcm_H, sizeof (ctx->gcm_H)); + encrypt_block(ctx->gcm_keysched, (uint8_t *)ctx->gcm_H, + (uint8_t *)ctx->gcm_H); + + gcm_format_initial_blocks(iv, iv_len, ctx, block_size, + copy_block, xor_block); + + authp = (uint8_t *)ctx->gcm_tmp; + ghash = (uint8_t *)ctx->gcm_ghash; + bzero(authp, block_size); + bzero(ghash, block_size); + + processed = 0; + remainder = auth_data_len; + do { + if (remainder < block_size) { + /* + * There's not a block full of data, pad rest of + * buffer with zero + */ + bzero(authp, block_size); + bcopy(&(auth_data[processed]), authp, remainder); + datap = (uint8_t *)authp; + remainder = 0; + } else { + datap = (uint8_t *)(&(auth_data[processed])); + processed += block_size; + remainder -= block_size; + } + + /* add auth data to the hash */ + GHASH(ctx, datap, ghash); + + } while (remainder > 0); + + return (CRYPTO_SUCCESS); +} + +int +gcm_init_ctx(gcm_ctx_t *gcm_ctx, char *param, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + int rv; + CK_AES_GCM_PARAMS *gcm_param; + + if (param != NULL) { + gcm_param = (CK_AES_GCM_PARAMS *)(void *)param; + + if ((rv = gcm_validate_args(gcm_param)) != 0) { + return (rv); + } + + gcm_ctx->gcm_tag_len = gcm_param->ulTagBits; + gcm_ctx->gcm_tag_len >>= 3; + gcm_ctx->gcm_processed_data_len = 0; + + /* these values are in bits */ + gcm_ctx->gcm_len_a_len_c[0] + = htonll(CRYPTO_BYTES2BITS(gcm_param->ulAADLen)); + + rv = CRYPTO_SUCCESS; + gcm_ctx->gcm_flags |= GCM_MODE; + } else { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + goto out; + } + + if (gcm_init(gcm_ctx, gcm_param->pIv, gcm_param->ulIvLen, + gcm_param->pAAD, gcm_param->ulAADLen, block_size, + encrypt_block, copy_block, xor_block) != 0) { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + } +out: + return (rv); +} + +int +gmac_init_ctx(gcm_ctx_t *gcm_ctx, char *param, size_t block_size, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)) +{ + int rv; + CK_AES_GMAC_PARAMS *gmac_param; + + if (param != NULL) { + gmac_param = (CK_AES_GMAC_PARAMS *)(void *)param; + + gcm_ctx->gcm_tag_len = CRYPTO_BITS2BYTES(AES_GMAC_TAG_BITS); + gcm_ctx->gcm_processed_data_len = 0; + + /* these values are in bits */ + gcm_ctx->gcm_len_a_len_c[0] + = htonll(CRYPTO_BYTES2BITS(gmac_param->ulAADLen)); + + rv = CRYPTO_SUCCESS; + gcm_ctx->gcm_flags |= GMAC_MODE; + } else { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + goto out; + } + + if (gcm_init(gcm_ctx, gmac_param->pIv, AES_GMAC_IV_LEN, + gmac_param->pAAD, gmac_param->ulAADLen, block_size, + encrypt_block, copy_block, xor_block) != 0) { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + } +out: + return (rv); +} + +void * +gcm_alloc_ctx(int kmflag) +{ + gcm_ctx_t *gcm_ctx; + + if ((gcm_ctx = kmem_zalloc(sizeof (gcm_ctx_t), kmflag)) == NULL) + return (NULL); + + gcm_ctx->gcm_flags = GCM_MODE; + return (gcm_ctx); +} + +void * +gmac_alloc_ctx(int kmflag) +{ + gcm_ctx_t *gcm_ctx; + + if ((gcm_ctx = kmem_zalloc(sizeof (gcm_ctx_t), kmflag)) == NULL) + return (NULL); + + gcm_ctx->gcm_flags = GMAC_MODE; + return (gcm_ctx); +} + +void +gcm_set_kmflag(gcm_ctx_t *ctx, int kmflag) +{ + ctx->gcm_kmflag = kmflag; +} + + +#ifdef __amd64 + +#define INTEL_PCLMULQDQ_FLAG (1 << 1) + +/* + * Return 1 if executing on Intel with PCLMULQDQ instructions, + * otherwise 0 (i.e., Intel without PCLMULQDQ or AMD64). + * Cache the result, as the CPU can't change. + * + * Note: the userland version uses getisax(). The kernel version uses + * is_x86_featureset(). + */ +static int +intel_pclmulqdq_instruction_present(void) +{ + static int cached_result = -1; + unsigned eax, ebx, ecx, edx; + unsigned func, subfunc; + + if (cached_result == -1) { /* first time */ + /* check for an intel cpu */ + func = 0; + subfunc = 0; + + __asm__ __volatile__( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a"(func), "c"(subfunc)); + + if (memcmp((char *)(&ebx), "Genu", 4) == 0 && + memcmp((char *)(&edx), "ineI", 4) == 0 && + memcmp((char *)(&ecx), "ntel", 4) == 0) { + func = 1; + subfunc = 0; + + /* check for aes-ni instruction set */ + __asm__ __volatile__( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a"(func), "c"(subfunc)); + + cached_result = !!(ecx & INTEL_PCLMULQDQ_FLAG); + } else { + cached_result = 0; + } + } + + return (cached_result); +} + +#endif /* __amd64 */ --- linux-aws-4.15.0.orig/zfs/module/icp/algs/modes/modes.c +++ linux-aws-4.15.0/zfs/module/icp/algs/modes/modes.c @@ -0,0 +1,159 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +/* + * Initialize by setting iov_or_mp to point to the current iovec or mp, + * and by setting current_offset to an offset within the current iovec or mp. + */ +void +crypto_init_ptrs(crypto_data_t *out, void **iov_or_mp, offset_t *current_offset) +{ + offset_t offset; + + switch (out->cd_format) { + case CRYPTO_DATA_RAW: + *current_offset = out->cd_offset; + break; + + case CRYPTO_DATA_UIO: { + uio_t *uiop = out->cd_uio; + uintptr_t vec_idx; + + offset = out->cd_offset; + for (vec_idx = 0; vec_idx < uiop->uio_iovcnt && + offset >= uiop->uio_iov[vec_idx].iov_len; + offset -= uiop->uio_iov[vec_idx++].iov_len) + ; + + *current_offset = offset; + *iov_or_mp = (void *)vec_idx; + break; + } + } /* end switch */ +} + +/* + * Get pointers for where in the output to copy a block of encrypted or + * decrypted data. The iov_or_mp argument stores a pointer to the current + * iovec or mp, and offset stores an offset into the current iovec or mp. + */ +void +crypto_get_ptrs(crypto_data_t *out, void **iov_or_mp, offset_t *current_offset, + uint8_t **out_data_1, size_t *out_data_1_len, uint8_t **out_data_2, + size_t amt) +{ + offset_t offset; + + switch (out->cd_format) { + case CRYPTO_DATA_RAW: { + iovec_t *iov; + + offset = *current_offset; + iov = &out->cd_raw; + if ((offset + amt) <= iov->iov_len) { + /* one block fits */ + *out_data_1 = (uint8_t *)iov->iov_base + offset; + *out_data_1_len = amt; + *out_data_2 = NULL; + *current_offset = offset + amt; + } + break; + } + + case CRYPTO_DATA_UIO: { + uio_t *uio = out->cd_uio; + iovec_t *iov; + offset_t offset; + uintptr_t vec_idx; + uint8_t *p; + + offset = *current_offset; + vec_idx = (uintptr_t)(*iov_or_mp); + iov = (iovec_t *)&uio->uio_iov[vec_idx]; + p = (uint8_t *)iov->iov_base + offset; + *out_data_1 = p; + + if (offset + amt <= iov->iov_len) { + /* can fit one block into this iov */ + *out_data_1_len = amt; + *out_data_2 = NULL; + *current_offset = offset + amt; + } else { + /* one block spans two iovecs */ + *out_data_1_len = iov->iov_len - offset; + if (vec_idx == uio->uio_iovcnt) + return; + vec_idx++; + iov = (iovec_t *)&uio->uio_iov[vec_idx]; + *out_data_2 = (uint8_t *)iov->iov_base; + *current_offset = amt - *out_data_1_len; + } + *iov_or_mp = (void *)vec_idx; + break; + } + } /* end switch */ +} + +void +crypto_free_mode_ctx(void *ctx) +{ + common_ctx_t *common_ctx = (common_ctx_t *)ctx; + + switch (common_ctx->cc_flags & + (ECB_MODE|CBC_MODE|CTR_MODE|CCM_MODE|GCM_MODE|GMAC_MODE)) { + case ECB_MODE: + kmem_free(common_ctx, sizeof (ecb_ctx_t)); + break; + + case CBC_MODE: + kmem_free(common_ctx, sizeof (cbc_ctx_t)); + break; + + case CTR_MODE: + kmem_free(common_ctx, sizeof (ctr_ctx_t)); + break; + + case CCM_MODE: + if (((ccm_ctx_t *)ctx)->ccm_pt_buf != NULL) + vmem_free(((ccm_ctx_t *)ctx)->ccm_pt_buf, + ((ccm_ctx_t *)ctx)->ccm_data_len); + + kmem_free(ctx, sizeof (ccm_ctx_t)); + break; + + case GCM_MODE: + case GMAC_MODE: + if (((gcm_ctx_t *)ctx)->gcm_pt_buf != NULL) + vmem_free(((gcm_ctx_t *)ctx)->gcm_pt_buf, + ((gcm_ctx_t *)ctx)->gcm_pt_buf_len); + + kmem_free(ctx, sizeof (gcm_ctx_t)); + } +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/sha1/sha1.c +++ linux-aws-4.15.0/zfs/module/icp/algs/sha1/sha1.c @@ -0,0 +1,838 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * The basic framework for this code came from the reference + * implementation for MD5. That implementation is Copyright (C) + * 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. + * + * License to copy and use this software is granted provided that it + * is identified as the "RSA Data Security, Inc. MD5 Message-Digest + * Algorithm" in all material mentioning or referencing this software + * or this function. + * + * License is also granted to make and use derivative works provided + * that such works are identified as "derived from the RSA Data + * Security, Inc. MD5 Message-Digest Algorithm" in all material + * mentioning or referencing the derived work. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + * + * NOTE: Cleaned-up and optimized, version of SHA1, based on the FIPS 180-1 + * standard, available at http://www.itl.nist.gov/fipspubs/fip180-1.htm + * Not as fast as one would like -- further optimizations are encouraged + * and appreciated. + */ + +#include +#include +#include + +#ifdef _LITTLE_ENDIAN +#include +#define HAVE_HTONL +#endif + +#define _RESTRICT_KYWD + +static void Encode(uint8_t *, const uint32_t *, size_t); + +#if defined(__sparc) + +#define SHA1_TRANSFORM(ctx, in) \ + SHA1Transform((ctx)->state[0], (ctx)->state[1], (ctx)->state[2], \ + (ctx)->state[3], (ctx)->state[4], (ctx), (in)) + +static void SHA1Transform(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, + SHA1_CTX *, const uint8_t *); + +#elif defined(__amd64) + +#define SHA1_TRANSFORM(ctx, in) sha1_block_data_order((ctx), (in), 1) +#define SHA1_TRANSFORM_BLOCKS(ctx, in, num) sha1_block_data_order((ctx), \ + (in), (num)) + +void sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t num_blocks); + +#else + +#define SHA1_TRANSFORM(ctx, in) SHA1Transform((ctx), (in)) + +static void SHA1Transform(SHA1_CTX *, const uint8_t *); + +#endif + + +static uint8_t PADDING[64] = { 0x80, /* all zeros */ }; + +/* + * F, G, and H are the basic SHA1 functions. + */ +#define F(b, c, d) (((b) & (c)) | ((~b) & (d))) +#define G(b, c, d) ((b) ^ (c) ^ (d)) +#define H(b, c, d) (((b) & (c)) | (((b)|(c)) & (d))) + +/* + * ROTATE_LEFT rotates x left n bits. + */ + +#if defined(__GNUC__) && defined(_LP64) +static __inline__ uint64_t +ROTATE_LEFT(uint64_t value, uint32_t n) +{ + uint32_t t32; + + t32 = (uint32_t)value; + return ((t32 << n) | (t32 >> (32 - n))); +} + +#else + +#define ROTATE_LEFT(x, n) \ + (((x) << (n)) | ((x) >> ((sizeof (x) * NBBY)-(n)))) + +#endif + + +/* + * SHA1Init() + * + * purpose: initializes the sha1 context and begins and sha1 digest operation + * input: SHA1_CTX * : the context to initializes. + * output: void + */ + +void +SHA1Init(SHA1_CTX *ctx) +{ + ctx->count[0] = ctx->count[1] = 0; + + /* + * load magic initialization constants. Tell lint + * that these constants are unsigned by using U. + */ + + ctx->state[0] = 0x67452301U; + ctx->state[1] = 0xefcdab89U; + ctx->state[2] = 0x98badcfeU; + ctx->state[3] = 0x10325476U; + ctx->state[4] = 0xc3d2e1f0U; +} + +void +SHA1Update(SHA1_CTX *ctx, const void *inptr, size_t input_len) +{ + uint32_t i, buf_index, buf_len; + const uint8_t *input = inptr; +#if defined(__amd64) + uint32_t block_count; +#endif /* __amd64 */ + + /* check for noop */ + if (input_len == 0) + return; + + /* compute number of bytes mod 64 */ + buf_index = (ctx->count[1] >> 3) & 0x3F; + + /* update number of bits */ + if ((ctx->count[1] += (input_len << 3)) < (input_len << 3)) + ctx->count[0]++; + + ctx->count[0] += (input_len >> 29); + + buf_len = 64 - buf_index; + + /* transform as many times as possible */ + i = 0; + if (input_len >= buf_len) { + + /* + * general optimization: + * + * only do initial bcopy() and SHA1Transform() if + * buf_index != 0. if buf_index == 0, we're just + * wasting our time doing the bcopy() since there + * wasn't any data left over from a previous call to + * SHA1Update(). + */ + + if (buf_index) { + bcopy(input, &ctx->buf_un.buf8[buf_index], buf_len); + SHA1_TRANSFORM(ctx, ctx->buf_un.buf8); + i = buf_len; + } + +#if !defined(__amd64) + for (; i + 63 < input_len; i += 64) + SHA1_TRANSFORM(ctx, &input[i]); +#else + block_count = (input_len - i) >> 6; + if (block_count > 0) { + SHA1_TRANSFORM_BLOCKS(ctx, &input[i], block_count); + i += block_count << 6; + } +#endif /* !__amd64 */ + + /* + * general optimization: + * + * if i and input_len are the same, return now instead + * of calling bcopy(), since the bcopy() in this case + * will be an expensive nop. + */ + + if (input_len == i) + return; + + buf_index = 0; + } + + /* buffer remaining input */ + bcopy(&input[i], &ctx->buf_un.buf8[buf_index], input_len - i); +} + +/* + * SHA1Final() + * + * purpose: ends an sha1 digest operation, finalizing the message digest and + * zeroing the context. + * input: uchar_t * : A buffer to store the digest. + * : The function actually uses void* because many + * : callers pass things other than uchar_t here. + * SHA1_CTX * : the context to finalize, save, and zero + * output: void + */ + +void +SHA1Final(void *digest, SHA1_CTX *ctx) +{ + uint8_t bitcount_be[sizeof (ctx->count)]; + uint32_t index = (ctx->count[1] >> 3) & 0x3f; + + /* store bit count, big endian */ + Encode(bitcount_be, ctx->count, sizeof (bitcount_be)); + + /* pad out to 56 mod 64 */ + SHA1Update(ctx, PADDING, ((index < 56) ? 56 : 120) - index); + + /* append length (before padding) */ + SHA1Update(ctx, bitcount_be, sizeof (bitcount_be)); + + /* store state in digest */ + Encode(digest, ctx->state, sizeof (ctx->state)); + + /* zeroize sensitive information */ + bzero(ctx, sizeof (*ctx)); +} + + +#if !defined(__amd64) + +typedef uint32_t sha1word; + +/* + * sparc optimization: + * + * on the sparc, we can load big endian 32-bit data easily. note that + * special care must be taken to ensure the address is 32-bit aligned. + * in the interest of speed, we don't check to make sure, since + * careful programming can guarantee this for us. + */ + +#if defined(_BIG_ENDIAN) +#define LOAD_BIG_32(addr) (*(uint32_t *)(addr)) + +#elif defined(HAVE_HTONL) +#define LOAD_BIG_32(addr) htonl(*((uint32_t *)(addr))) + +#else +/* little endian -- will work on big endian, but slowly */ +#define LOAD_BIG_32(addr) \ + (((addr)[0] << 24) | ((addr)[1] << 16) | ((addr)[2] << 8) | (addr)[3]) +#endif /* _BIG_ENDIAN */ + +/* + * SHA1Transform() + */ +#if defined(W_ARRAY) +#define W(n) w[n] +#else /* !defined(W_ARRAY) */ +#define W(n) w_ ## n +#endif /* !defined(W_ARRAY) */ + +#if defined(__sparc) + + +/* + * sparc register window optimization: + * + * `a', `b', `c', `d', and `e' are passed into SHA1Transform + * explicitly since it increases the number of registers available to + * the compiler. under this scheme, these variables can be held in + * %i0 - %i4, which leaves more local and out registers available. + * + * purpose: sha1 transformation -- updates the digest based on `block' + * input: uint32_t : bytes 1 - 4 of the digest + * uint32_t : bytes 5 - 8 of the digest + * uint32_t : bytes 9 - 12 of the digest + * uint32_t : bytes 12 - 16 of the digest + * uint32_t : bytes 16 - 20 of the digest + * SHA1_CTX * : the context to update + * uint8_t [64]: the block to use to update the digest + * output: void + */ + + +void +SHA1Transform(uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e, + SHA1_CTX *ctx, const uint8_t blk[64]) +{ + /* + * sparc optimization: + * + * while it is somewhat counter-intuitive, on sparc, it is + * more efficient to place all the constants used in this + * function in an array and load the values out of the array + * than to manually load the constants. this is because + * setting a register to a 32-bit value takes two ops in most + * cases: a `sethi' and an `or', but loading a 32-bit value + * from memory only takes one `ld' (or `lduw' on v9). while + * this increases memory usage, the compiler can find enough + * other things to do while waiting to keep the pipeline does + * not stall. additionally, it is likely that many of these + * constants are cached so that later accesses do not even go + * out to the bus. + * + * this array is declared `static' to keep the compiler from + * having to bcopy() this array onto the stack frame of + * SHA1Transform() each time it is called -- which is + * unacceptably expensive. + * + * the `const' is to ensure that callers are good citizens and + * do not try to munge the array. since these routines are + * going to be called from inside multithreaded kernelland, + * this is a good safety check. -- `sha1_consts' will end up in + * .rodata. + * + * unfortunately, loading from an array in this manner hurts + * performance under Intel. So, there is a macro, + * SHA1_CONST(), used in SHA1Transform(), that either expands to + * a reference to this array, or to the actual constant, + * depending on what platform this code is compiled for. + */ + + + static const uint32_t sha1_consts[] = { + SHA1_CONST_0, SHA1_CONST_1, SHA1_CONST_2, SHA1_CONST_3 + }; + + + /* + * general optimization: + * + * use individual integers instead of using an array. this is a + * win, although the amount it wins by seems to vary quite a bit. + */ + + + uint32_t w_0, w_1, w_2, w_3, w_4, w_5, w_6, w_7; + uint32_t w_8, w_9, w_10, w_11, w_12, w_13, w_14, w_15; + + + /* + * sparc optimization: + * + * if `block' is already aligned on a 4-byte boundary, use + * LOAD_BIG_32() directly. otherwise, bcopy() into a + * buffer that *is* aligned on a 4-byte boundary and then do + * the LOAD_BIG_32() on that buffer. benchmarks have shown + * that using the bcopy() is better than loading the bytes + * individually and doing the endian-swap by hand. + * + * even though it's quite tempting to assign to do: + * + * blk = bcopy(ctx->buf_un.buf32, blk, sizeof (ctx->buf_un.buf32)); + * + * and only have one set of LOAD_BIG_32()'s, the compiler + * *does not* like that, so please resist the urge. + */ + + + if ((uintptr_t)blk & 0x3) { /* not 4-byte aligned? */ + bcopy(blk, ctx->buf_un.buf32, sizeof (ctx->buf_un.buf32)); + w_15 = LOAD_BIG_32(ctx->buf_un.buf32 + 15); + w_14 = LOAD_BIG_32(ctx->buf_un.buf32 + 14); + w_13 = LOAD_BIG_32(ctx->buf_un.buf32 + 13); + w_12 = LOAD_BIG_32(ctx->buf_un.buf32 + 12); + w_11 = LOAD_BIG_32(ctx->buf_un.buf32 + 11); + w_10 = LOAD_BIG_32(ctx->buf_un.buf32 + 10); + w_9 = LOAD_BIG_32(ctx->buf_un.buf32 + 9); + w_8 = LOAD_BIG_32(ctx->buf_un.buf32 + 8); + w_7 = LOAD_BIG_32(ctx->buf_un.buf32 + 7); + w_6 = LOAD_BIG_32(ctx->buf_un.buf32 + 6); + w_5 = LOAD_BIG_32(ctx->buf_un.buf32 + 5); + w_4 = LOAD_BIG_32(ctx->buf_un.buf32 + 4); + w_3 = LOAD_BIG_32(ctx->buf_un.buf32 + 3); + w_2 = LOAD_BIG_32(ctx->buf_un.buf32 + 2); + w_1 = LOAD_BIG_32(ctx->buf_un.buf32 + 1); + w_0 = LOAD_BIG_32(ctx->buf_un.buf32 + 0); + } else { + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_15 = LOAD_BIG_32(blk + 60); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_14 = LOAD_BIG_32(blk + 56); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_13 = LOAD_BIG_32(blk + 52); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_12 = LOAD_BIG_32(blk + 48); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_11 = LOAD_BIG_32(blk + 44); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_10 = LOAD_BIG_32(blk + 40); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_9 = LOAD_BIG_32(blk + 36); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_8 = LOAD_BIG_32(blk + 32); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_7 = LOAD_BIG_32(blk + 28); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_6 = LOAD_BIG_32(blk + 24); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_5 = LOAD_BIG_32(blk + 20); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_4 = LOAD_BIG_32(blk + 16); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_3 = LOAD_BIG_32(blk + 12); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_2 = LOAD_BIG_32(blk + 8); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_1 = LOAD_BIG_32(blk + 4); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w_0 = LOAD_BIG_32(blk + 0); + } +#else /* !defined(__sparc) */ + +void /* CSTYLED */ +SHA1Transform(SHA1_CTX *ctx, const uint8_t blk[64]) +{ + /* CSTYLED */ + sha1word a = ctx->state[0]; + sha1word b = ctx->state[1]; + sha1word c = ctx->state[2]; + sha1word d = ctx->state[3]; + sha1word e = ctx->state[4]; + +#if defined(W_ARRAY) + sha1word w[16]; +#else /* !defined(W_ARRAY) */ + sha1word w_0, w_1, w_2, w_3, w_4, w_5, w_6, w_7; + sha1word w_8, w_9, w_10, w_11, w_12, w_13, w_14, w_15; +#endif /* !defined(W_ARRAY) */ + + W(0) = LOAD_BIG_32((void *)(blk + 0)); + W(1) = LOAD_BIG_32((void *)(blk + 4)); + W(2) = LOAD_BIG_32((void *)(blk + 8)); + W(3) = LOAD_BIG_32((void *)(blk + 12)); + W(4) = LOAD_BIG_32((void *)(blk + 16)); + W(5) = LOAD_BIG_32((void *)(blk + 20)); + W(6) = LOAD_BIG_32((void *)(blk + 24)); + W(7) = LOAD_BIG_32((void *)(blk + 28)); + W(8) = LOAD_BIG_32((void *)(blk + 32)); + W(9) = LOAD_BIG_32((void *)(blk + 36)); + W(10) = LOAD_BIG_32((void *)(blk + 40)); + W(11) = LOAD_BIG_32((void *)(blk + 44)); + W(12) = LOAD_BIG_32((void *)(blk + 48)); + W(13) = LOAD_BIG_32((void *)(blk + 52)); + W(14) = LOAD_BIG_32((void *)(blk + 56)); + W(15) = LOAD_BIG_32((void *)(blk + 60)); + +#endif /* !defined(__sparc) */ + + /* + * general optimization: + * + * even though this approach is described in the standard as + * being slower algorithmically, it is 30-40% faster than the + * "faster" version under SPARC, because this version has more + * of the constraints specified at compile-time and uses fewer + * variables (and therefore has better register utilization) + * than its "speedier" brother. (i've tried both, trust me) + * + * for either method given in the spec, there is an "assignment" + * phase where the following takes place: + * + * tmp = (main_computation); + * e = d; d = c; c = rotate_left(b, 30); b = a; a = tmp; + * + * we can make the algorithm go faster by not doing this work, + * but just pretending that `d' is now `e', etc. this works + * really well and obviates the need for a temporary variable. + * however, we still explicitly perform the rotate action, + * since it is cheaper on SPARC to do it once than to have to + * do it over and over again. + */ + + /* round 1 */ + e = ROTATE_LEFT(a, 5) + F(b, c, d) + e + W(0) + SHA1_CONST(0); /* 0 */ + b = ROTATE_LEFT(b, 30); + + d = ROTATE_LEFT(e, 5) + F(a, b, c) + d + W(1) + SHA1_CONST(0); /* 1 */ + a = ROTATE_LEFT(a, 30); + + c = ROTATE_LEFT(d, 5) + F(e, a, b) + c + W(2) + SHA1_CONST(0); /* 2 */ + e = ROTATE_LEFT(e, 30); + + b = ROTATE_LEFT(c, 5) + F(d, e, a) + b + W(3) + SHA1_CONST(0); /* 3 */ + d = ROTATE_LEFT(d, 30); + + a = ROTATE_LEFT(b, 5) + F(c, d, e) + a + W(4) + SHA1_CONST(0); /* 4 */ + c = ROTATE_LEFT(c, 30); + + e = ROTATE_LEFT(a, 5) + F(b, c, d) + e + W(5) + SHA1_CONST(0); /* 5 */ + b = ROTATE_LEFT(b, 30); + + d = ROTATE_LEFT(e, 5) + F(a, b, c) + d + W(6) + SHA1_CONST(0); /* 6 */ + a = ROTATE_LEFT(a, 30); + + c = ROTATE_LEFT(d, 5) + F(e, a, b) + c + W(7) + SHA1_CONST(0); /* 7 */ + e = ROTATE_LEFT(e, 30); + + b = ROTATE_LEFT(c, 5) + F(d, e, a) + b + W(8) + SHA1_CONST(0); /* 8 */ + d = ROTATE_LEFT(d, 30); + + a = ROTATE_LEFT(b, 5) + F(c, d, e) + a + W(9) + SHA1_CONST(0); /* 9 */ + c = ROTATE_LEFT(c, 30); + + e = ROTATE_LEFT(a, 5) + F(b, c, d) + e + W(10) + SHA1_CONST(0); /* 10 */ + b = ROTATE_LEFT(b, 30); + + d = ROTATE_LEFT(e, 5) + F(a, b, c) + d + W(11) + SHA1_CONST(0); /* 11 */ + a = ROTATE_LEFT(a, 30); + + c = ROTATE_LEFT(d, 5) + F(e, a, b) + c + W(12) + SHA1_CONST(0); /* 12 */ + e = ROTATE_LEFT(e, 30); + + b = ROTATE_LEFT(c, 5) + F(d, e, a) + b + W(13) + SHA1_CONST(0); /* 13 */ + d = ROTATE_LEFT(d, 30); + + a = ROTATE_LEFT(b, 5) + F(c, d, e) + a + W(14) + SHA1_CONST(0); /* 14 */ + c = ROTATE_LEFT(c, 30); + + e = ROTATE_LEFT(a, 5) + F(b, c, d) + e + W(15) + SHA1_CONST(0); /* 15 */ + b = ROTATE_LEFT(b, 30); + + W(0) = ROTATE_LEFT((W(13) ^ W(8) ^ W(2) ^ W(0)), 1); /* 16 */ + d = ROTATE_LEFT(e, 5) + F(a, b, c) + d + W(0) + SHA1_CONST(0); + a = ROTATE_LEFT(a, 30); + + W(1) = ROTATE_LEFT((W(14) ^ W(9) ^ W(3) ^ W(1)), 1); /* 17 */ + c = ROTATE_LEFT(d, 5) + F(e, a, b) + c + W(1) + SHA1_CONST(0); + e = ROTATE_LEFT(e, 30); + + W(2) = ROTATE_LEFT((W(15) ^ W(10) ^ W(4) ^ W(2)), 1); /* 18 */ + b = ROTATE_LEFT(c, 5) + F(d, e, a) + b + W(2) + SHA1_CONST(0); + d = ROTATE_LEFT(d, 30); + + W(3) = ROTATE_LEFT((W(0) ^ W(11) ^ W(5) ^ W(3)), 1); /* 19 */ + a = ROTATE_LEFT(b, 5) + F(c, d, e) + a + W(3) + SHA1_CONST(0); + c = ROTATE_LEFT(c, 30); + + /* round 2 */ + W(4) = ROTATE_LEFT((W(1) ^ W(12) ^ W(6) ^ W(4)), 1); /* 20 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(4) + SHA1_CONST(1); + b = ROTATE_LEFT(b, 30); + + W(5) = ROTATE_LEFT((W(2) ^ W(13) ^ W(7) ^ W(5)), 1); /* 21 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(5) + SHA1_CONST(1); + a = ROTATE_LEFT(a, 30); + + W(6) = ROTATE_LEFT((W(3) ^ W(14) ^ W(8) ^ W(6)), 1); /* 22 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(6) + SHA1_CONST(1); + e = ROTATE_LEFT(e, 30); + + W(7) = ROTATE_LEFT((W(4) ^ W(15) ^ W(9) ^ W(7)), 1); /* 23 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(7) + SHA1_CONST(1); + d = ROTATE_LEFT(d, 30); + + W(8) = ROTATE_LEFT((W(5) ^ W(0) ^ W(10) ^ W(8)), 1); /* 24 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(8) + SHA1_CONST(1); + c = ROTATE_LEFT(c, 30); + + W(9) = ROTATE_LEFT((W(6) ^ W(1) ^ W(11) ^ W(9)), 1); /* 25 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(9) + SHA1_CONST(1); + b = ROTATE_LEFT(b, 30); + + W(10) = ROTATE_LEFT((W(7) ^ W(2) ^ W(12) ^ W(10)), 1); /* 26 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(10) + SHA1_CONST(1); + a = ROTATE_LEFT(a, 30); + + W(11) = ROTATE_LEFT((W(8) ^ W(3) ^ W(13) ^ W(11)), 1); /* 27 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(11) + SHA1_CONST(1); + e = ROTATE_LEFT(e, 30); + + W(12) = ROTATE_LEFT((W(9) ^ W(4) ^ W(14) ^ W(12)), 1); /* 28 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(12) + SHA1_CONST(1); + d = ROTATE_LEFT(d, 30); + + W(13) = ROTATE_LEFT((W(10) ^ W(5) ^ W(15) ^ W(13)), 1); /* 29 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(13) + SHA1_CONST(1); + c = ROTATE_LEFT(c, 30); + + W(14) = ROTATE_LEFT((W(11) ^ W(6) ^ W(0) ^ W(14)), 1); /* 30 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(14) + SHA1_CONST(1); + b = ROTATE_LEFT(b, 30); + + W(15) = ROTATE_LEFT((W(12) ^ W(7) ^ W(1) ^ W(15)), 1); /* 31 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(15) + SHA1_CONST(1); + a = ROTATE_LEFT(a, 30); + + W(0) = ROTATE_LEFT((W(13) ^ W(8) ^ W(2) ^ W(0)), 1); /* 32 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(0) + SHA1_CONST(1); + e = ROTATE_LEFT(e, 30); + + W(1) = ROTATE_LEFT((W(14) ^ W(9) ^ W(3) ^ W(1)), 1); /* 33 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(1) + SHA1_CONST(1); + d = ROTATE_LEFT(d, 30); + + W(2) = ROTATE_LEFT((W(15) ^ W(10) ^ W(4) ^ W(2)), 1); /* 34 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(2) + SHA1_CONST(1); + c = ROTATE_LEFT(c, 30); + + W(3) = ROTATE_LEFT((W(0) ^ W(11) ^ W(5) ^ W(3)), 1); /* 35 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(3) + SHA1_CONST(1); + b = ROTATE_LEFT(b, 30); + + W(4) = ROTATE_LEFT((W(1) ^ W(12) ^ W(6) ^ W(4)), 1); /* 36 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(4) + SHA1_CONST(1); + a = ROTATE_LEFT(a, 30); + + W(5) = ROTATE_LEFT((W(2) ^ W(13) ^ W(7) ^ W(5)), 1); /* 37 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(5) + SHA1_CONST(1); + e = ROTATE_LEFT(e, 30); + + W(6) = ROTATE_LEFT((W(3) ^ W(14) ^ W(8) ^ W(6)), 1); /* 38 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(6) + SHA1_CONST(1); + d = ROTATE_LEFT(d, 30); + + W(7) = ROTATE_LEFT((W(4) ^ W(15) ^ W(9) ^ W(7)), 1); /* 39 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(7) + SHA1_CONST(1); + c = ROTATE_LEFT(c, 30); + + /* round 3 */ + W(8) = ROTATE_LEFT((W(5) ^ W(0) ^ W(10) ^ W(8)), 1); /* 40 */ + e = ROTATE_LEFT(a, 5) + H(b, c, d) + e + W(8) + SHA1_CONST(2); + b = ROTATE_LEFT(b, 30); + + W(9) = ROTATE_LEFT((W(6) ^ W(1) ^ W(11) ^ W(9)), 1); /* 41 */ + d = ROTATE_LEFT(e, 5) + H(a, b, c) + d + W(9) + SHA1_CONST(2); + a = ROTATE_LEFT(a, 30); + + W(10) = ROTATE_LEFT((W(7) ^ W(2) ^ W(12) ^ W(10)), 1); /* 42 */ + c = ROTATE_LEFT(d, 5) + H(e, a, b) + c + W(10) + SHA1_CONST(2); + e = ROTATE_LEFT(e, 30); + + W(11) = ROTATE_LEFT((W(8) ^ W(3) ^ W(13) ^ W(11)), 1); /* 43 */ + b = ROTATE_LEFT(c, 5) + H(d, e, a) + b + W(11) + SHA1_CONST(2); + d = ROTATE_LEFT(d, 30); + + W(12) = ROTATE_LEFT((W(9) ^ W(4) ^ W(14) ^ W(12)), 1); /* 44 */ + a = ROTATE_LEFT(b, 5) + H(c, d, e) + a + W(12) + SHA1_CONST(2); + c = ROTATE_LEFT(c, 30); + + W(13) = ROTATE_LEFT((W(10) ^ W(5) ^ W(15) ^ W(13)), 1); /* 45 */ + e = ROTATE_LEFT(a, 5) + H(b, c, d) + e + W(13) + SHA1_CONST(2); + b = ROTATE_LEFT(b, 30); + + W(14) = ROTATE_LEFT((W(11) ^ W(6) ^ W(0) ^ W(14)), 1); /* 46 */ + d = ROTATE_LEFT(e, 5) + H(a, b, c) + d + W(14) + SHA1_CONST(2); + a = ROTATE_LEFT(a, 30); + + W(15) = ROTATE_LEFT((W(12) ^ W(7) ^ W(1) ^ W(15)), 1); /* 47 */ + c = ROTATE_LEFT(d, 5) + H(e, a, b) + c + W(15) + SHA1_CONST(2); + e = ROTATE_LEFT(e, 30); + + W(0) = ROTATE_LEFT((W(13) ^ W(8) ^ W(2) ^ W(0)), 1); /* 48 */ + b = ROTATE_LEFT(c, 5) + H(d, e, a) + b + W(0) + SHA1_CONST(2); + d = ROTATE_LEFT(d, 30); + + W(1) = ROTATE_LEFT((W(14) ^ W(9) ^ W(3) ^ W(1)), 1); /* 49 */ + a = ROTATE_LEFT(b, 5) + H(c, d, e) + a + W(1) + SHA1_CONST(2); + c = ROTATE_LEFT(c, 30); + + W(2) = ROTATE_LEFT((W(15) ^ W(10) ^ W(4) ^ W(2)), 1); /* 50 */ + e = ROTATE_LEFT(a, 5) + H(b, c, d) + e + W(2) + SHA1_CONST(2); + b = ROTATE_LEFT(b, 30); + + W(3) = ROTATE_LEFT((W(0) ^ W(11) ^ W(5) ^ W(3)), 1); /* 51 */ + d = ROTATE_LEFT(e, 5) + H(a, b, c) + d + W(3) + SHA1_CONST(2); + a = ROTATE_LEFT(a, 30); + + W(4) = ROTATE_LEFT((W(1) ^ W(12) ^ W(6) ^ W(4)), 1); /* 52 */ + c = ROTATE_LEFT(d, 5) + H(e, a, b) + c + W(4) + SHA1_CONST(2); + e = ROTATE_LEFT(e, 30); + + W(5) = ROTATE_LEFT((W(2) ^ W(13) ^ W(7) ^ W(5)), 1); /* 53 */ + b = ROTATE_LEFT(c, 5) + H(d, e, a) + b + W(5) + SHA1_CONST(2); + d = ROTATE_LEFT(d, 30); + + W(6) = ROTATE_LEFT((W(3) ^ W(14) ^ W(8) ^ W(6)), 1); /* 54 */ + a = ROTATE_LEFT(b, 5) + H(c, d, e) + a + W(6) + SHA1_CONST(2); + c = ROTATE_LEFT(c, 30); + + W(7) = ROTATE_LEFT((W(4) ^ W(15) ^ W(9) ^ W(7)), 1); /* 55 */ + e = ROTATE_LEFT(a, 5) + H(b, c, d) + e + W(7) + SHA1_CONST(2); + b = ROTATE_LEFT(b, 30); + + W(8) = ROTATE_LEFT((W(5) ^ W(0) ^ W(10) ^ W(8)), 1); /* 56 */ + d = ROTATE_LEFT(e, 5) + H(a, b, c) + d + W(8) + SHA1_CONST(2); + a = ROTATE_LEFT(a, 30); + + W(9) = ROTATE_LEFT((W(6) ^ W(1) ^ W(11) ^ W(9)), 1); /* 57 */ + c = ROTATE_LEFT(d, 5) + H(e, a, b) + c + W(9) + SHA1_CONST(2); + e = ROTATE_LEFT(e, 30); + + W(10) = ROTATE_LEFT((W(7) ^ W(2) ^ W(12) ^ W(10)), 1); /* 58 */ + b = ROTATE_LEFT(c, 5) + H(d, e, a) + b + W(10) + SHA1_CONST(2); + d = ROTATE_LEFT(d, 30); + + W(11) = ROTATE_LEFT((W(8) ^ W(3) ^ W(13) ^ W(11)), 1); /* 59 */ + a = ROTATE_LEFT(b, 5) + H(c, d, e) + a + W(11) + SHA1_CONST(2); + c = ROTATE_LEFT(c, 30); + + /* round 4 */ + W(12) = ROTATE_LEFT((W(9) ^ W(4) ^ W(14) ^ W(12)), 1); /* 60 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(12) + SHA1_CONST(3); + b = ROTATE_LEFT(b, 30); + + W(13) = ROTATE_LEFT((W(10) ^ W(5) ^ W(15) ^ W(13)), 1); /* 61 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(13) + SHA1_CONST(3); + a = ROTATE_LEFT(a, 30); + + W(14) = ROTATE_LEFT((W(11) ^ W(6) ^ W(0) ^ W(14)), 1); /* 62 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(14) + SHA1_CONST(3); + e = ROTATE_LEFT(e, 30); + + W(15) = ROTATE_LEFT((W(12) ^ W(7) ^ W(1) ^ W(15)), 1); /* 63 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(15) + SHA1_CONST(3); + d = ROTATE_LEFT(d, 30); + + W(0) = ROTATE_LEFT((W(13) ^ W(8) ^ W(2) ^ W(0)), 1); /* 64 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(0) + SHA1_CONST(3); + c = ROTATE_LEFT(c, 30); + + W(1) = ROTATE_LEFT((W(14) ^ W(9) ^ W(3) ^ W(1)), 1); /* 65 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(1) + SHA1_CONST(3); + b = ROTATE_LEFT(b, 30); + + W(2) = ROTATE_LEFT((W(15) ^ W(10) ^ W(4) ^ W(2)), 1); /* 66 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(2) + SHA1_CONST(3); + a = ROTATE_LEFT(a, 30); + + W(3) = ROTATE_LEFT((W(0) ^ W(11) ^ W(5) ^ W(3)), 1); /* 67 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(3) + SHA1_CONST(3); + e = ROTATE_LEFT(e, 30); + + W(4) = ROTATE_LEFT((W(1) ^ W(12) ^ W(6) ^ W(4)), 1); /* 68 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(4) + SHA1_CONST(3); + d = ROTATE_LEFT(d, 30); + + W(5) = ROTATE_LEFT((W(2) ^ W(13) ^ W(7) ^ W(5)), 1); /* 69 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(5) + SHA1_CONST(3); + c = ROTATE_LEFT(c, 30); + + W(6) = ROTATE_LEFT((W(3) ^ W(14) ^ W(8) ^ W(6)), 1); /* 70 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(6) + SHA1_CONST(3); + b = ROTATE_LEFT(b, 30); + + W(7) = ROTATE_LEFT((W(4) ^ W(15) ^ W(9) ^ W(7)), 1); /* 71 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(7) + SHA1_CONST(3); + a = ROTATE_LEFT(a, 30); + + W(8) = ROTATE_LEFT((W(5) ^ W(0) ^ W(10) ^ W(8)), 1); /* 72 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(8) + SHA1_CONST(3); + e = ROTATE_LEFT(e, 30); + + W(9) = ROTATE_LEFT((W(6) ^ W(1) ^ W(11) ^ W(9)), 1); /* 73 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(9) + SHA1_CONST(3); + d = ROTATE_LEFT(d, 30); + + W(10) = ROTATE_LEFT((W(7) ^ W(2) ^ W(12) ^ W(10)), 1); /* 74 */ + a = ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(10) + SHA1_CONST(3); + c = ROTATE_LEFT(c, 30); + + W(11) = ROTATE_LEFT((W(8) ^ W(3) ^ W(13) ^ W(11)), 1); /* 75 */ + e = ROTATE_LEFT(a, 5) + G(b, c, d) + e + W(11) + SHA1_CONST(3); + b = ROTATE_LEFT(b, 30); + + W(12) = ROTATE_LEFT((W(9) ^ W(4) ^ W(14) ^ W(12)), 1); /* 76 */ + d = ROTATE_LEFT(e, 5) + G(a, b, c) + d + W(12) + SHA1_CONST(3); + a = ROTATE_LEFT(a, 30); + + W(13) = ROTATE_LEFT((W(10) ^ W(5) ^ W(15) ^ W(13)), 1); /* 77 */ + c = ROTATE_LEFT(d, 5) + G(e, a, b) + c + W(13) + SHA1_CONST(3); + e = ROTATE_LEFT(e, 30); + + W(14) = ROTATE_LEFT((W(11) ^ W(6) ^ W(0) ^ W(14)), 1); /* 78 */ + b = ROTATE_LEFT(c, 5) + G(d, e, a) + b + W(14) + SHA1_CONST(3); + d = ROTATE_LEFT(d, 30); + + W(15) = ROTATE_LEFT((W(12) ^ W(7) ^ W(1) ^ W(15)), 1); /* 79 */ + + ctx->state[0] += ROTATE_LEFT(b, 5) + G(c, d, e) + a + W(15) + + SHA1_CONST(3); + ctx->state[1] += b; + ctx->state[2] += ROTATE_LEFT(c, 30); + ctx->state[3] += d; + ctx->state[4] += e; + + /* zeroize sensitive information */ + W(0) = W(1) = W(2) = W(3) = W(4) = W(5) = W(6) = W(7) = W(8) = 0; + W(9) = W(10) = W(11) = W(12) = W(13) = W(14) = W(15) = 0; +} +#endif /* !__amd64 */ + + +/* + * Encode() + * + * purpose: to convert a list of numbers from little endian to big endian + * input: uint8_t * : place to store the converted big endian numbers + * uint32_t * : place to get numbers to convert from + * size_t : the length of the input in bytes + * output: void + */ + +static void +Encode(uint8_t *_RESTRICT_KYWD output, const uint32_t *_RESTRICT_KYWD input, + size_t len) +{ + size_t i, j; + +#if defined(__sparc) + if (IS_P2ALIGNED(output, sizeof (uint32_t))) { + for (i = 0, j = 0; j < len; i++, j += 4) { + /* LINTED E_BAD_PTR_CAST_ALIGN */ + *((uint32_t *)(output + j)) = input[i]; + } + } else { +#endif /* little endian -- will work on big endian, but slowly */ + + for (i = 0, j = 0; j < len; i++, j += 4) { + output[j] = (input[i] >> 24) & 0xff; + output[j + 1] = (input[i] >> 16) & 0xff; + output[j + 2] = (input[i] >> 8) & 0xff; + output[j + 3] = input[i] & 0xff; + } +#if defined(__sparc) + } +#endif +} --- linux-aws-4.15.0.orig/zfs/module/icp/algs/sha2/sha2.c +++ linux-aws-4.15.0/zfs/module/icp/algs/sha2/sha2.c @@ -0,0 +1,960 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +/* + * The basic framework for this code came from the reference + * implementation for MD5. That implementation is Copyright (C) + * 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. + * + * License to copy and use this software is granted provided that it + * is identified as the "RSA Data Security, Inc. MD5 Message-Digest + * Algorithm" in all material mentioning or referencing this software + * or this function. + * + * License is also granted to make and use derivative works provided + * that such works are identified as "derived from the RSA Data + * Security, Inc. MD5 Message-Digest Algorithm" in all material + * mentioning or referencing the derived work. + * + * RSA Data Security, Inc. makes no representations concerning either + * the merchantability of this software or the suitability of this + * software for any particular purpose. It is provided "as is" + * without express or implied warranty of any kind. + * + * These notices must be retained in any copies of any part of this + * documentation and/or software. + * + * NOTE: Cleaned-up and optimized, version of SHA2, based on the FIPS 180-2 + * standard, available at + * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf + * Not as fast as one would like -- further optimizations are encouraged + * and appreciated. + */ + +#include +#define _SHA2_IMPL +#include +#include + +#define _RESTRICT_KYWD + +#ifdef _LITTLE_ENDIAN +#include +#define HAVE_HTONL +#endif +#include /* for _ILP32 */ + +static void Encode(uint8_t *, uint32_t *, size_t); +static void Encode64(uint8_t *, uint64_t *, size_t); + +#if defined(__amd64) +#define SHA512Transform(ctx, in) SHA512TransformBlocks((ctx), (in), 1) +#define SHA256Transform(ctx, in) SHA256TransformBlocks((ctx), (in), 1) + +void SHA512TransformBlocks(SHA2_CTX *ctx, const void *in, size_t num); +void SHA256TransformBlocks(SHA2_CTX *ctx, const void *in, size_t num); + +#else +static void SHA256Transform(SHA2_CTX *, const uint8_t *); +static void SHA512Transform(SHA2_CTX *, const uint8_t *); +#endif /* __amd64 */ + +static uint8_t PADDING[128] = { 0x80, /* all zeros */ }; + +/* + * The low-level checksum routines use a lot of stack space. On systems where + * small stacks are enforced (like 32-bit kernel builds), insert compiler memory + * barriers to reduce stack frame size. This can reduce the SHA512Transform() + * stack frame usage from 3k to <1k on ARM32, for example. + */ +#if defined(_ILP32) || defined(__powerpc) /* small stack */ +#define SMALL_STACK_MEMORY_BARRIER asm volatile("": : :"memory"); +#else +#define SMALL_STACK_MEMORY_BARRIER +#endif + +/* Ch and Maj are the basic SHA2 functions. */ +#define Ch(b, c, d) (((b) & (c)) ^ ((~b) & (d))) +#define Maj(b, c, d) (((b) & (c)) ^ ((b) & (d)) ^ ((c) & (d))) + +/* Rotates x right n bits. */ +#define ROTR(x, n) \ + (((x) >> (n)) | ((x) << ((sizeof (x) * NBBY)-(n)))) + +/* Shift x right n bits */ +#define SHR(x, n) ((x) >> (n)) + +/* SHA256 Functions */ +#define BIGSIGMA0_256(x) (ROTR((x), 2) ^ ROTR((x), 13) ^ ROTR((x), 22)) +#define BIGSIGMA1_256(x) (ROTR((x), 6) ^ ROTR((x), 11) ^ ROTR((x), 25)) +#define SIGMA0_256(x) (ROTR((x), 7) ^ ROTR((x), 18) ^ SHR((x), 3)) +#define SIGMA1_256(x) (ROTR((x), 17) ^ ROTR((x), 19) ^ SHR((x), 10)) + +#define SHA256ROUND(a, b, c, d, e, f, g, h, i, w) \ + T1 = h + BIGSIGMA1_256(e) + Ch(e, f, g) + SHA256_CONST(i) + w; \ + d += T1; \ + T2 = BIGSIGMA0_256(a) + Maj(a, b, c); \ + h = T1 + T2 + +/* SHA384/512 Functions */ +#define BIGSIGMA0(x) (ROTR((x), 28) ^ ROTR((x), 34) ^ ROTR((x), 39)) +#define BIGSIGMA1(x) (ROTR((x), 14) ^ ROTR((x), 18) ^ ROTR((x), 41)) +#define SIGMA0(x) (ROTR((x), 1) ^ ROTR((x), 8) ^ SHR((x), 7)) +#define SIGMA1(x) (ROTR((x), 19) ^ ROTR((x), 61) ^ SHR((x), 6)) +#define SHA512ROUND(a, b, c, d, e, f, g, h, i, w) \ + T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + SHA512_CONST(i) + w; \ + d += T1; \ + T2 = BIGSIGMA0(a) + Maj(a, b, c); \ + h = T1 + T2; \ + SMALL_STACK_MEMORY_BARRIER; + +/* + * sparc optimization: + * + * on the sparc, we can load big endian 32-bit data easily. note that + * special care must be taken to ensure the address is 32-bit aligned. + * in the interest of speed, we don't check to make sure, since + * careful programming can guarantee this for us. + */ + +#if defined(_BIG_ENDIAN) +#define LOAD_BIG_32(addr) (*(uint32_t *)(addr)) +#define LOAD_BIG_64(addr) (*(uint64_t *)(addr)) + +#elif defined(HAVE_HTONL) +#define LOAD_BIG_32(addr) htonl(*((uint32_t *)(addr))) +#define LOAD_BIG_64(addr) htonll(*((uint64_t *)(addr))) + +#else +/* little endian -- will work on big endian, but slowly */ +#define LOAD_BIG_32(addr) \ + (((addr)[0] << 24) | ((addr)[1] << 16) | ((addr)[2] << 8) | (addr)[3]) +#define LOAD_BIG_64(addr) \ + (((uint64_t)(addr)[0] << 56) | ((uint64_t)(addr)[1] << 48) | \ + ((uint64_t)(addr)[2] << 40) | ((uint64_t)(addr)[3] << 32) | \ + ((uint64_t)(addr)[4] << 24) | ((uint64_t)(addr)[5] << 16) | \ + ((uint64_t)(addr)[6] << 8) | (uint64_t)(addr)[7]) +#endif /* _BIG_ENDIAN */ + + +#if !defined(__amd64) +/* SHA256 Transform */ + +static void +SHA256Transform(SHA2_CTX *ctx, const uint8_t *blk) +{ + uint32_t a = ctx->state.s32[0]; + uint32_t b = ctx->state.s32[1]; + uint32_t c = ctx->state.s32[2]; + uint32_t d = ctx->state.s32[3]; + uint32_t e = ctx->state.s32[4]; + uint32_t f = ctx->state.s32[5]; + uint32_t g = ctx->state.s32[6]; + uint32_t h = ctx->state.s32[7]; + + uint32_t w0, w1, w2, w3, w4, w5, w6, w7; + uint32_t w8, w9, w10, w11, w12, w13, w14, w15; + uint32_t T1, T2; + +#if defined(__sparc) + static const uint32_t sha256_consts[] = { + SHA256_CONST_0, SHA256_CONST_1, SHA256_CONST_2, + SHA256_CONST_3, SHA256_CONST_4, SHA256_CONST_5, + SHA256_CONST_6, SHA256_CONST_7, SHA256_CONST_8, + SHA256_CONST_9, SHA256_CONST_10, SHA256_CONST_11, + SHA256_CONST_12, SHA256_CONST_13, SHA256_CONST_14, + SHA256_CONST_15, SHA256_CONST_16, SHA256_CONST_17, + SHA256_CONST_18, SHA256_CONST_19, SHA256_CONST_20, + SHA256_CONST_21, SHA256_CONST_22, SHA256_CONST_23, + SHA256_CONST_24, SHA256_CONST_25, SHA256_CONST_26, + SHA256_CONST_27, SHA256_CONST_28, SHA256_CONST_29, + SHA256_CONST_30, SHA256_CONST_31, SHA256_CONST_32, + SHA256_CONST_33, SHA256_CONST_34, SHA256_CONST_35, + SHA256_CONST_36, SHA256_CONST_37, SHA256_CONST_38, + SHA256_CONST_39, SHA256_CONST_40, SHA256_CONST_41, + SHA256_CONST_42, SHA256_CONST_43, SHA256_CONST_44, + SHA256_CONST_45, SHA256_CONST_46, SHA256_CONST_47, + SHA256_CONST_48, SHA256_CONST_49, SHA256_CONST_50, + SHA256_CONST_51, SHA256_CONST_52, SHA256_CONST_53, + SHA256_CONST_54, SHA256_CONST_55, SHA256_CONST_56, + SHA256_CONST_57, SHA256_CONST_58, SHA256_CONST_59, + SHA256_CONST_60, SHA256_CONST_61, SHA256_CONST_62, + SHA256_CONST_63 + }; +#endif /* __sparc */ + + if ((uintptr_t)blk & 0x3) { /* not 4-byte aligned? */ + bcopy(blk, ctx->buf_un.buf32, sizeof (ctx->buf_un.buf32)); + blk = (uint8_t *)ctx->buf_un.buf32; + } + + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w0 = LOAD_BIG_32(blk + 4 * 0); + SHA256ROUND(a, b, c, d, e, f, g, h, 0, w0); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w1 = LOAD_BIG_32(blk + 4 * 1); + SHA256ROUND(h, a, b, c, d, e, f, g, 1, w1); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w2 = LOAD_BIG_32(blk + 4 * 2); + SHA256ROUND(g, h, a, b, c, d, e, f, 2, w2); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w3 = LOAD_BIG_32(blk + 4 * 3); + SHA256ROUND(f, g, h, a, b, c, d, e, 3, w3); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w4 = LOAD_BIG_32(blk + 4 * 4); + SHA256ROUND(e, f, g, h, a, b, c, d, 4, w4); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w5 = LOAD_BIG_32(blk + 4 * 5); + SHA256ROUND(d, e, f, g, h, a, b, c, 5, w5); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w6 = LOAD_BIG_32(blk + 4 * 6); + SHA256ROUND(c, d, e, f, g, h, a, b, 6, w6); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w7 = LOAD_BIG_32(blk + 4 * 7); + SHA256ROUND(b, c, d, e, f, g, h, a, 7, w7); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w8 = LOAD_BIG_32(blk + 4 * 8); + SHA256ROUND(a, b, c, d, e, f, g, h, 8, w8); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w9 = LOAD_BIG_32(blk + 4 * 9); + SHA256ROUND(h, a, b, c, d, e, f, g, 9, w9); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w10 = LOAD_BIG_32(blk + 4 * 10); + SHA256ROUND(g, h, a, b, c, d, e, f, 10, w10); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w11 = LOAD_BIG_32(blk + 4 * 11); + SHA256ROUND(f, g, h, a, b, c, d, e, 11, w11); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w12 = LOAD_BIG_32(blk + 4 * 12); + SHA256ROUND(e, f, g, h, a, b, c, d, 12, w12); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w13 = LOAD_BIG_32(blk + 4 * 13); + SHA256ROUND(d, e, f, g, h, a, b, c, 13, w13); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w14 = LOAD_BIG_32(blk + 4 * 14); + SHA256ROUND(c, d, e, f, g, h, a, b, 14, w14); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w15 = LOAD_BIG_32(blk + 4 * 15); + SHA256ROUND(b, c, d, e, f, g, h, a, 15, w15); + + w0 = SIGMA1_256(w14) + w9 + SIGMA0_256(w1) + w0; + SHA256ROUND(a, b, c, d, e, f, g, h, 16, w0); + w1 = SIGMA1_256(w15) + w10 + SIGMA0_256(w2) + w1; + SHA256ROUND(h, a, b, c, d, e, f, g, 17, w1); + w2 = SIGMA1_256(w0) + w11 + SIGMA0_256(w3) + w2; + SHA256ROUND(g, h, a, b, c, d, e, f, 18, w2); + w3 = SIGMA1_256(w1) + w12 + SIGMA0_256(w4) + w3; + SHA256ROUND(f, g, h, a, b, c, d, e, 19, w3); + w4 = SIGMA1_256(w2) + w13 + SIGMA0_256(w5) + w4; + SHA256ROUND(e, f, g, h, a, b, c, d, 20, w4); + w5 = SIGMA1_256(w3) + w14 + SIGMA0_256(w6) + w5; + SHA256ROUND(d, e, f, g, h, a, b, c, 21, w5); + w6 = SIGMA1_256(w4) + w15 + SIGMA0_256(w7) + w6; + SHA256ROUND(c, d, e, f, g, h, a, b, 22, w6); + w7 = SIGMA1_256(w5) + w0 + SIGMA0_256(w8) + w7; + SHA256ROUND(b, c, d, e, f, g, h, a, 23, w7); + w8 = SIGMA1_256(w6) + w1 + SIGMA0_256(w9) + w8; + SHA256ROUND(a, b, c, d, e, f, g, h, 24, w8); + w9 = SIGMA1_256(w7) + w2 + SIGMA0_256(w10) + w9; + SHA256ROUND(h, a, b, c, d, e, f, g, 25, w9); + w10 = SIGMA1_256(w8) + w3 + SIGMA0_256(w11) + w10; + SHA256ROUND(g, h, a, b, c, d, e, f, 26, w10); + w11 = SIGMA1_256(w9) + w4 + SIGMA0_256(w12) + w11; + SHA256ROUND(f, g, h, a, b, c, d, e, 27, w11); + w12 = SIGMA1_256(w10) + w5 + SIGMA0_256(w13) + w12; + SHA256ROUND(e, f, g, h, a, b, c, d, 28, w12); + w13 = SIGMA1_256(w11) + w6 + SIGMA0_256(w14) + w13; + SHA256ROUND(d, e, f, g, h, a, b, c, 29, w13); + w14 = SIGMA1_256(w12) + w7 + SIGMA0_256(w15) + w14; + SHA256ROUND(c, d, e, f, g, h, a, b, 30, w14); + w15 = SIGMA1_256(w13) + w8 + SIGMA0_256(w0) + w15; + SHA256ROUND(b, c, d, e, f, g, h, a, 31, w15); + + w0 = SIGMA1_256(w14) + w9 + SIGMA0_256(w1) + w0; + SHA256ROUND(a, b, c, d, e, f, g, h, 32, w0); + w1 = SIGMA1_256(w15) + w10 + SIGMA0_256(w2) + w1; + SHA256ROUND(h, a, b, c, d, e, f, g, 33, w1); + w2 = SIGMA1_256(w0) + w11 + SIGMA0_256(w3) + w2; + SHA256ROUND(g, h, a, b, c, d, e, f, 34, w2); + w3 = SIGMA1_256(w1) + w12 + SIGMA0_256(w4) + w3; + SHA256ROUND(f, g, h, a, b, c, d, e, 35, w3); + w4 = SIGMA1_256(w2) + w13 + SIGMA0_256(w5) + w4; + SHA256ROUND(e, f, g, h, a, b, c, d, 36, w4); + w5 = SIGMA1_256(w3) + w14 + SIGMA0_256(w6) + w5; + SHA256ROUND(d, e, f, g, h, a, b, c, 37, w5); + w6 = SIGMA1_256(w4) + w15 + SIGMA0_256(w7) + w6; + SHA256ROUND(c, d, e, f, g, h, a, b, 38, w6); + w7 = SIGMA1_256(w5) + w0 + SIGMA0_256(w8) + w7; + SHA256ROUND(b, c, d, e, f, g, h, a, 39, w7); + w8 = SIGMA1_256(w6) + w1 + SIGMA0_256(w9) + w8; + SHA256ROUND(a, b, c, d, e, f, g, h, 40, w8); + w9 = SIGMA1_256(w7) + w2 + SIGMA0_256(w10) + w9; + SHA256ROUND(h, a, b, c, d, e, f, g, 41, w9); + w10 = SIGMA1_256(w8) + w3 + SIGMA0_256(w11) + w10; + SHA256ROUND(g, h, a, b, c, d, e, f, 42, w10); + w11 = SIGMA1_256(w9) + w4 + SIGMA0_256(w12) + w11; + SHA256ROUND(f, g, h, a, b, c, d, e, 43, w11); + w12 = SIGMA1_256(w10) + w5 + SIGMA0_256(w13) + w12; + SHA256ROUND(e, f, g, h, a, b, c, d, 44, w12); + w13 = SIGMA1_256(w11) + w6 + SIGMA0_256(w14) + w13; + SHA256ROUND(d, e, f, g, h, a, b, c, 45, w13); + w14 = SIGMA1_256(w12) + w7 + SIGMA0_256(w15) + w14; + SHA256ROUND(c, d, e, f, g, h, a, b, 46, w14); + w15 = SIGMA1_256(w13) + w8 + SIGMA0_256(w0) + w15; + SHA256ROUND(b, c, d, e, f, g, h, a, 47, w15); + + w0 = SIGMA1_256(w14) + w9 + SIGMA0_256(w1) + w0; + SHA256ROUND(a, b, c, d, e, f, g, h, 48, w0); + w1 = SIGMA1_256(w15) + w10 + SIGMA0_256(w2) + w1; + SHA256ROUND(h, a, b, c, d, e, f, g, 49, w1); + w2 = SIGMA1_256(w0) + w11 + SIGMA0_256(w3) + w2; + SHA256ROUND(g, h, a, b, c, d, e, f, 50, w2); + w3 = SIGMA1_256(w1) + w12 + SIGMA0_256(w4) + w3; + SHA256ROUND(f, g, h, a, b, c, d, e, 51, w3); + w4 = SIGMA1_256(w2) + w13 + SIGMA0_256(w5) + w4; + SHA256ROUND(e, f, g, h, a, b, c, d, 52, w4); + w5 = SIGMA1_256(w3) + w14 + SIGMA0_256(w6) + w5; + SHA256ROUND(d, e, f, g, h, a, b, c, 53, w5); + w6 = SIGMA1_256(w4) + w15 + SIGMA0_256(w7) + w6; + SHA256ROUND(c, d, e, f, g, h, a, b, 54, w6); + w7 = SIGMA1_256(w5) + w0 + SIGMA0_256(w8) + w7; + SHA256ROUND(b, c, d, e, f, g, h, a, 55, w7); + w8 = SIGMA1_256(w6) + w1 + SIGMA0_256(w9) + w8; + SHA256ROUND(a, b, c, d, e, f, g, h, 56, w8); + w9 = SIGMA1_256(w7) + w2 + SIGMA0_256(w10) + w9; + SHA256ROUND(h, a, b, c, d, e, f, g, 57, w9); + w10 = SIGMA1_256(w8) + w3 + SIGMA0_256(w11) + w10; + SHA256ROUND(g, h, a, b, c, d, e, f, 58, w10); + w11 = SIGMA1_256(w9) + w4 + SIGMA0_256(w12) + w11; + SHA256ROUND(f, g, h, a, b, c, d, e, 59, w11); + w12 = SIGMA1_256(w10) + w5 + SIGMA0_256(w13) + w12; + SHA256ROUND(e, f, g, h, a, b, c, d, 60, w12); + w13 = SIGMA1_256(w11) + w6 + SIGMA0_256(w14) + w13; + SHA256ROUND(d, e, f, g, h, a, b, c, 61, w13); + w14 = SIGMA1_256(w12) + w7 + SIGMA0_256(w15) + w14; + SHA256ROUND(c, d, e, f, g, h, a, b, 62, w14); + w15 = SIGMA1_256(w13) + w8 + SIGMA0_256(w0) + w15; + SHA256ROUND(b, c, d, e, f, g, h, a, 63, w15); + + ctx->state.s32[0] += a; + ctx->state.s32[1] += b; + ctx->state.s32[2] += c; + ctx->state.s32[3] += d; + ctx->state.s32[4] += e; + ctx->state.s32[5] += f; + ctx->state.s32[6] += g; + ctx->state.s32[7] += h; +} + + +/* SHA384 and SHA512 Transform */ + +static void +SHA512Transform(SHA2_CTX *ctx, const uint8_t *blk) +{ + + uint64_t a = ctx->state.s64[0]; + uint64_t b = ctx->state.s64[1]; + uint64_t c = ctx->state.s64[2]; + uint64_t d = ctx->state.s64[3]; + uint64_t e = ctx->state.s64[4]; + uint64_t f = ctx->state.s64[5]; + uint64_t g = ctx->state.s64[6]; + uint64_t h = ctx->state.s64[7]; + + uint64_t w0, w1, w2, w3, w4, w5, w6, w7; + uint64_t w8, w9, w10, w11, w12, w13, w14, w15; + uint64_t T1, T2; + +#if defined(__sparc) + static const uint64_t sha512_consts[] = { + SHA512_CONST_0, SHA512_CONST_1, SHA512_CONST_2, + SHA512_CONST_3, SHA512_CONST_4, SHA512_CONST_5, + SHA512_CONST_6, SHA512_CONST_7, SHA512_CONST_8, + SHA512_CONST_9, SHA512_CONST_10, SHA512_CONST_11, + SHA512_CONST_12, SHA512_CONST_13, SHA512_CONST_14, + SHA512_CONST_15, SHA512_CONST_16, SHA512_CONST_17, + SHA512_CONST_18, SHA512_CONST_19, SHA512_CONST_20, + SHA512_CONST_21, SHA512_CONST_22, SHA512_CONST_23, + SHA512_CONST_24, SHA512_CONST_25, SHA512_CONST_26, + SHA512_CONST_27, SHA512_CONST_28, SHA512_CONST_29, + SHA512_CONST_30, SHA512_CONST_31, SHA512_CONST_32, + SHA512_CONST_33, SHA512_CONST_34, SHA512_CONST_35, + SHA512_CONST_36, SHA512_CONST_37, SHA512_CONST_38, + SHA512_CONST_39, SHA512_CONST_40, SHA512_CONST_41, + SHA512_CONST_42, SHA512_CONST_43, SHA512_CONST_44, + SHA512_CONST_45, SHA512_CONST_46, SHA512_CONST_47, + SHA512_CONST_48, SHA512_CONST_49, SHA512_CONST_50, + SHA512_CONST_51, SHA512_CONST_52, SHA512_CONST_53, + SHA512_CONST_54, SHA512_CONST_55, SHA512_CONST_56, + SHA512_CONST_57, SHA512_CONST_58, SHA512_CONST_59, + SHA512_CONST_60, SHA512_CONST_61, SHA512_CONST_62, + SHA512_CONST_63, SHA512_CONST_64, SHA512_CONST_65, + SHA512_CONST_66, SHA512_CONST_67, SHA512_CONST_68, + SHA512_CONST_69, SHA512_CONST_70, SHA512_CONST_71, + SHA512_CONST_72, SHA512_CONST_73, SHA512_CONST_74, + SHA512_CONST_75, SHA512_CONST_76, SHA512_CONST_77, + SHA512_CONST_78, SHA512_CONST_79 + }; +#endif /* __sparc */ + + + if ((uintptr_t)blk & 0x7) { /* not 8-byte aligned? */ + bcopy(blk, ctx->buf_un.buf64, sizeof (ctx->buf_un.buf64)); + blk = (uint8_t *)ctx->buf_un.buf64; + } + + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w0 = LOAD_BIG_64(blk + 8 * 0); + SHA512ROUND(a, b, c, d, e, f, g, h, 0, w0); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w1 = LOAD_BIG_64(blk + 8 * 1); + SHA512ROUND(h, a, b, c, d, e, f, g, 1, w1); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w2 = LOAD_BIG_64(blk + 8 * 2); + SHA512ROUND(g, h, a, b, c, d, e, f, 2, w2); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w3 = LOAD_BIG_64(blk + 8 * 3); + SHA512ROUND(f, g, h, a, b, c, d, e, 3, w3); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w4 = LOAD_BIG_64(blk + 8 * 4); + SHA512ROUND(e, f, g, h, a, b, c, d, 4, w4); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w5 = LOAD_BIG_64(blk + 8 * 5); + SHA512ROUND(d, e, f, g, h, a, b, c, 5, w5); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w6 = LOAD_BIG_64(blk + 8 * 6); + SHA512ROUND(c, d, e, f, g, h, a, b, 6, w6); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w7 = LOAD_BIG_64(blk + 8 * 7); + SHA512ROUND(b, c, d, e, f, g, h, a, 7, w7); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w8 = LOAD_BIG_64(blk + 8 * 8); + SHA512ROUND(a, b, c, d, e, f, g, h, 8, w8); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w9 = LOAD_BIG_64(blk + 8 * 9); + SHA512ROUND(h, a, b, c, d, e, f, g, 9, w9); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w10 = LOAD_BIG_64(blk + 8 * 10); + SHA512ROUND(g, h, a, b, c, d, e, f, 10, w10); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w11 = LOAD_BIG_64(blk + 8 * 11); + SHA512ROUND(f, g, h, a, b, c, d, e, 11, w11); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w12 = LOAD_BIG_64(blk + 8 * 12); + SHA512ROUND(e, f, g, h, a, b, c, d, 12, w12); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w13 = LOAD_BIG_64(blk + 8 * 13); + SHA512ROUND(d, e, f, g, h, a, b, c, 13, w13); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w14 = LOAD_BIG_64(blk + 8 * 14); + SHA512ROUND(c, d, e, f, g, h, a, b, 14, w14); + /* LINTED E_BAD_PTR_CAST_ALIGN */ + w15 = LOAD_BIG_64(blk + 8 * 15); + SHA512ROUND(b, c, d, e, f, g, h, a, 15, w15); + + w0 = SIGMA1(w14) + w9 + SIGMA0(w1) + w0; + SHA512ROUND(a, b, c, d, e, f, g, h, 16, w0); + w1 = SIGMA1(w15) + w10 + SIGMA0(w2) + w1; + SHA512ROUND(h, a, b, c, d, e, f, g, 17, w1); + w2 = SIGMA1(w0) + w11 + SIGMA0(w3) + w2; + SHA512ROUND(g, h, a, b, c, d, e, f, 18, w2); + w3 = SIGMA1(w1) + w12 + SIGMA0(w4) + w3; + SHA512ROUND(f, g, h, a, b, c, d, e, 19, w3); + w4 = SIGMA1(w2) + w13 + SIGMA0(w5) + w4; + SHA512ROUND(e, f, g, h, a, b, c, d, 20, w4); + w5 = SIGMA1(w3) + w14 + SIGMA0(w6) + w5; + SHA512ROUND(d, e, f, g, h, a, b, c, 21, w5); + w6 = SIGMA1(w4) + w15 + SIGMA0(w7) + w6; + SHA512ROUND(c, d, e, f, g, h, a, b, 22, w6); + w7 = SIGMA1(w5) + w0 + SIGMA0(w8) + w7; + SHA512ROUND(b, c, d, e, f, g, h, a, 23, w7); + w8 = SIGMA1(w6) + w1 + SIGMA0(w9) + w8; + SHA512ROUND(a, b, c, d, e, f, g, h, 24, w8); + w9 = SIGMA1(w7) + w2 + SIGMA0(w10) + w9; + SHA512ROUND(h, a, b, c, d, e, f, g, 25, w9); + w10 = SIGMA1(w8) + w3 + SIGMA0(w11) + w10; + SHA512ROUND(g, h, a, b, c, d, e, f, 26, w10); + w11 = SIGMA1(w9) + w4 + SIGMA0(w12) + w11; + SHA512ROUND(f, g, h, a, b, c, d, e, 27, w11); + w12 = SIGMA1(w10) + w5 + SIGMA0(w13) + w12; + SHA512ROUND(e, f, g, h, a, b, c, d, 28, w12); + w13 = SIGMA1(w11) + w6 + SIGMA0(w14) + w13; + SHA512ROUND(d, e, f, g, h, a, b, c, 29, w13); + w14 = SIGMA1(w12) + w7 + SIGMA0(w15) + w14; + SHA512ROUND(c, d, e, f, g, h, a, b, 30, w14); + w15 = SIGMA1(w13) + w8 + SIGMA0(w0) + w15; + SHA512ROUND(b, c, d, e, f, g, h, a, 31, w15); + + w0 = SIGMA1(w14) + w9 + SIGMA0(w1) + w0; + SHA512ROUND(a, b, c, d, e, f, g, h, 32, w0); + w1 = SIGMA1(w15) + w10 + SIGMA0(w2) + w1; + SHA512ROUND(h, a, b, c, d, e, f, g, 33, w1); + w2 = SIGMA1(w0) + w11 + SIGMA0(w3) + w2; + SHA512ROUND(g, h, a, b, c, d, e, f, 34, w2); + w3 = SIGMA1(w1) + w12 + SIGMA0(w4) + w3; + SHA512ROUND(f, g, h, a, b, c, d, e, 35, w3); + w4 = SIGMA1(w2) + w13 + SIGMA0(w5) + w4; + SHA512ROUND(e, f, g, h, a, b, c, d, 36, w4); + w5 = SIGMA1(w3) + w14 + SIGMA0(w6) + w5; + SHA512ROUND(d, e, f, g, h, a, b, c, 37, w5); + w6 = SIGMA1(w4) + w15 + SIGMA0(w7) + w6; + SHA512ROUND(c, d, e, f, g, h, a, b, 38, w6); + w7 = SIGMA1(w5) + w0 + SIGMA0(w8) + w7; + SHA512ROUND(b, c, d, e, f, g, h, a, 39, w7); + w8 = SIGMA1(w6) + w1 + SIGMA0(w9) + w8; + SHA512ROUND(a, b, c, d, e, f, g, h, 40, w8); + w9 = SIGMA1(w7) + w2 + SIGMA0(w10) + w9; + SHA512ROUND(h, a, b, c, d, e, f, g, 41, w9); + w10 = SIGMA1(w8) + w3 + SIGMA0(w11) + w10; + SHA512ROUND(g, h, a, b, c, d, e, f, 42, w10); + w11 = SIGMA1(w9) + w4 + SIGMA0(w12) + w11; + SHA512ROUND(f, g, h, a, b, c, d, e, 43, w11); + w12 = SIGMA1(w10) + w5 + SIGMA0(w13) + w12; + SHA512ROUND(e, f, g, h, a, b, c, d, 44, w12); + w13 = SIGMA1(w11) + w6 + SIGMA0(w14) + w13; + SHA512ROUND(d, e, f, g, h, a, b, c, 45, w13); + w14 = SIGMA1(w12) + w7 + SIGMA0(w15) + w14; + SHA512ROUND(c, d, e, f, g, h, a, b, 46, w14); + w15 = SIGMA1(w13) + w8 + SIGMA0(w0) + w15; + SHA512ROUND(b, c, d, e, f, g, h, a, 47, w15); + + w0 = SIGMA1(w14) + w9 + SIGMA0(w1) + w0; + SHA512ROUND(a, b, c, d, e, f, g, h, 48, w0); + w1 = SIGMA1(w15) + w10 + SIGMA0(w2) + w1; + SHA512ROUND(h, a, b, c, d, e, f, g, 49, w1); + w2 = SIGMA1(w0) + w11 + SIGMA0(w3) + w2; + SHA512ROUND(g, h, a, b, c, d, e, f, 50, w2); + w3 = SIGMA1(w1) + w12 + SIGMA0(w4) + w3; + SHA512ROUND(f, g, h, a, b, c, d, e, 51, w3); + w4 = SIGMA1(w2) + w13 + SIGMA0(w5) + w4; + SHA512ROUND(e, f, g, h, a, b, c, d, 52, w4); + w5 = SIGMA1(w3) + w14 + SIGMA0(w6) + w5; + SHA512ROUND(d, e, f, g, h, a, b, c, 53, w5); + w6 = SIGMA1(w4) + w15 + SIGMA0(w7) + w6; + SHA512ROUND(c, d, e, f, g, h, a, b, 54, w6); + w7 = SIGMA1(w5) + w0 + SIGMA0(w8) + w7; + SHA512ROUND(b, c, d, e, f, g, h, a, 55, w7); + w8 = SIGMA1(w6) + w1 + SIGMA0(w9) + w8; + SHA512ROUND(a, b, c, d, e, f, g, h, 56, w8); + w9 = SIGMA1(w7) + w2 + SIGMA0(w10) + w9; + SHA512ROUND(h, a, b, c, d, e, f, g, 57, w9); + w10 = SIGMA1(w8) + w3 + SIGMA0(w11) + w10; + SHA512ROUND(g, h, a, b, c, d, e, f, 58, w10); + w11 = SIGMA1(w9) + w4 + SIGMA0(w12) + w11; + SHA512ROUND(f, g, h, a, b, c, d, e, 59, w11); + w12 = SIGMA1(w10) + w5 + SIGMA0(w13) + w12; + SHA512ROUND(e, f, g, h, a, b, c, d, 60, w12); + w13 = SIGMA1(w11) + w6 + SIGMA0(w14) + w13; + SHA512ROUND(d, e, f, g, h, a, b, c, 61, w13); + w14 = SIGMA1(w12) + w7 + SIGMA0(w15) + w14; + SHA512ROUND(c, d, e, f, g, h, a, b, 62, w14); + w15 = SIGMA1(w13) + w8 + SIGMA0(w0) + w15; + SHA512ROUND(b, c, d, e, f, g, h, a, 63, w15); + + w0 = SIGMA1(w14) + w9 + SIGMA0(w1) + w0; + SHA512ROUND(a, b, c, d, e, f, g, h, 64, w0); + w1 = SIGMA1(w15) + w10 + SIGMA0(w2) + w1; + SHA512ROUND(h, a, b, c, d, e, f, g, 65, w1); + w2 = SIGMA1(w0) + w11 + SIGMA0(w3) + w2; + SHA512ROUND(g, h, a, b, c, d, e, f, 66, w2); + w3 = SIGMA1(w1) + w12 + SIGMA0(w4) + w3; + SHA512ROUND(f, g, h, a, b, c, d, e, 67, w3); + w4 = SIGMA1(w2) + w13 + SIGMA0(w5) + w4; + SHA512ROUND(e, f, g, h, a, b, c, d, 68, w4); + w5 = SIGMA1(w3) + w14 + SIGMA0(w6) + w5; + SHA512ROUND(d, e, f, g, h, a, b, c, 69, w5); + w6 = SIGMA1(w4) + w15 + SIGMA0(w7) + w6; + SHA512ROUND(c, d, e, f, g, h, a, b, 70, w6); + w7 = SIGMA1(w5) + w0 + SIGMA0(w8) + w7; + SHA512ROUND(b, c, d, e, f, g, h, a, 71, w7); + w8 = SIGMA1(w6) + w1 + SIGMA0(w9) + w8; + SHA512ROUND(a, b, c, d, e, f, g, h, 72, w8); + w9 = SIGMA1(w7) + w2 + SIGMA0(w10) + w9; + SHA512ROUND(h, a, b, c, d, e, f, g, 73, w9); + w10 = SIGMA1(w8) + w3 + SIGMA0(w11) + w10; + SHA512ROUND(g, h, a, b, c, d, e, f, 74, w10); + w11 = SIGMA1(w9) + w4 + SIGMA0(w12) + w11; + SHA512ROUND(f, g, h, a, b, c, d, e, 75, w11); + w12 = SIGMA1(w10) + w5 + SIGMA0(w13) + w12; + SHA512ROUND(e, f, g, h, a, b, c, d, 76, w12); + w13 = SIGMA1(w11) + w6 + SIGMA0(w14) + w13; + SHA512ROUND(d, e, f, g, h, a, b, c, 77, w13); + w14 = SIGMA1(w12) + w7 + SIGMA0(w15) + w14; + SHA512ROUND(c, d, e, f, g, h, a, b, 78, w14); + w15 = SIGMA1(w13) + w8 + SIGMA0(w0) + w15; + SHA512ROUND(b, c, d, e, f, g, h, a, 79, w15); + + ctx->state.s64[0] += a; + ctx->state.s64[1] += b; + ctx->state.s64[2] += c; + ctx->state.s64[3] += d; + ctx->state.s64[4] += e; + ctx->state.s64[5] += f; + ctx->state.s64[6] += g; + ctx->state.s64[7] += h; + +} +#endif /* !__amd64 */ + + +/* + * Encode() + * + * purpose: to convert a list of numbers from little endian to big endian + * input: uint8_t * : place to store the converted big endian numbers + * uint32_t * : place to get numbers to convert from + * size_t : the length of the input in bytes + * output: void + */ + +static void +Encode(uint8_t *_RESTRICT_KYWD output, uint32_t *_RESTRICT_KYWD input, + size_t len) +{ + size_t i, j; + +#if defined(__sparc) + if (IS_P2ALIGNED(output, sizeof (uint32_t))) { + for (i = 0, j = 0; j < len; i++, j += 4) { + /* LINTED E_BAD_PTR_CAST_ALIGN */ + *((uint32_t *)(output + j)) = input[i]; + } + } else { +#endif /* little endian -- will work on big endian, but slowly */ + for (i = 0, j = 0; j < len; i++, j += 4) { + output[j] = (input[i] >> 24) & 0xff; + output[j + 1] = (input[i] >> 16) & 0xff; + output[j + 2] = (input[i] >> 8) & 0xff; + output[j + 3] = input[i] & 0xff; + } +#if defined(__sparc) + } +#endif +} + +static void +Encode64(uint8_t *_RESTRICT_KYWD output, uint64_t *_RESTRICT_KYWD input, + size_t len) +{ + size_t i, j; + +#if defined(__sparc) + if (IS_P2ALIGNED(output, sizeof (uint64_t))) { + for (i = 0, j = 0; j < len; i++, j += 8) { + /* LINTED E_BAD_PTR_CAST_ALIGN */ + *((uint64_t *)(output + j)) = input[i]; + } + } else { +#endif /* little endian -- will work on big endian, but slowly */ + for (i = 0, j = 0; j < len; i++, j += 8) { + + output[j] = (input[i] >> 56) & 0xff; + output[j + 1] = (input[i] >> 48) & 0xff; + output[j + 2] = (input[i] >> 40) & 0xff; + output[j + 3] = (input[i] >> 32) & 0xff; + output[j + 4] = (input[i] >> 24) & 0xff; + output[j + 5] = (input[i] >> 16) & 0xff; + output[j + 6] = (input[i] >> 8) & 0xff; + output[j + 7] = input[i] & 0xff; + } +#if defined(__sparc) + } +#endif +} + + +void +SHA2Init(uint64_t mech, SHA2_CTX *ctx) +{ + + switch (mech) { + case SHA256_MECH_INFO_TYPE: + case SHA256_HMAC_MECH_INFO_TYPE: + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + ctx->state.s32[0] = 0x6a09e667U; + ctx->state.s32[1] = 0xbb67ae85U; + ctx->state.s32[2] = 0x3c6ef372U; + ctx->state.s32[3] = 0xa54ff53aU; + ctx->state.s32[4] = 0x510e527fU; + ctx->state.s32[5] = 0x9b05688cU; + ctx->state.s32[6] = 0x1f83d9abU; + ctx->state.s32[7] = 0x5be0cd19U; + break; + case SHA384_MECH_INFO_TYPE: + case SHA384_HMAC_MECH_INFO_TYPE: + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + ctx->state.s64[0] = 0xcbbb9d5dc1059ed8ULL; + ctx->state.s64[1] = 0x629a292a367cd507ULL; + ctx->state.s64[2] = 0x9159015a3070dd17ULL; + ctx->state.s64[3] = 0x152fecd8f70e5939ULL; + ctx->state.s64[4] = 0x67332667ffc00b31ULL; + ctx->state.s64[5] = 0x8eb44a8768581511ULL; + ctx->state.s64[6] = 0xdb0c2e0d64f98fa7ULL; + ctx->state.s64[7] = 0x47b5481dbefa4fa4ULL; + break; + case SHA512_MECH_INFO_TYPE: + case SHA512_HMAC_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + ctx->state.s64[0] = 0x6a09e667f3bcc908ULL; + ctx->state.s64[1] = 0xbb67ae8584caa73bULL; + ctx->state.s64[2] = 0x3c6ef372fe94f82bULL; + ctx->state.s64[3] = 0xa54ff53a5f1d36f1ULL; + ctx->state.s64[4] = 0x510e527fade682d1ULL; + ctx->state.s64[5] = 0x9b05688c2b3e6c1fULL; + ctx->state.s64[6] = 0x1f83d9abfb41bd6bULL; + ctx->state.s64[7] = 0x5be0cd19137e2179ULL; + break; + case SHA512_224_MECH_INFO_TYPE: + ctx->state.s64[0] = 0x8C3D37C819544DA2ULL; + ctx->state.s64[1] = 0x73E1996689DCD4D6ULL; + ctx->state.s64[2] = 0x1DFAB7AE32FF9C82ULL; + ctx->state.s64[3] = 0x679DD514582F9FCFULL; + ctx->state.s64[4] = 0x0F6D2B697BD44DA8ULL; + ctx->state.s64[5] = 0x77E36F7304C48942ULL; + ctx->state.s64[6] = 0x3F9D85A86A1D36C8ULL; + ctx->state.s64[7] = 0x1112E6AD91D692A1ULL; + break; + case SHA512_256_MECH_INFO_TYPE: + ctx->state.s64[0] = 0x22312194FC2BF72CULL; + ctx->state.s64[1] = 0x9F555FA3C84C64C2ULL; + ctx->state.s64[2] = 0x2393B86B6F53B151ULL; + ctx->state.s64[3] = 0x963877195940EABDULL; + ctx->state.s64[4] = 0x96283EE2A88EFFE3ULL; + ctx->state.s64[5] = 0xBE5E1E2553863992ULL; + ctx->state.s64[6] = 0x2B0199FC2C85B8AAULL; + ctx->state.s64[7] = 0x0EB72DDC81C52CA2ULL; + break; +#ifdef _KERNEL + default: + cmn_err(CE_PANIC, + "sha2_init: failed to find a supported algorithm: 0x%x", + (uint32_t)mech); + +#endif /* _KERNEL */ + } + + ctx->algotype = (uint32_t)mech; + ctx->count.c64[0] = ctx->count.c64[1] = 0; +} + +#ifndef _KERNEL + +// #pragma inline(SHA256Init, SHA384Init, SHA512Init) +void +SHA256Init(SHA256_CTX *ctx) +{ + SHA2Init(SHA256, ctx); +} + +void +SHA384Init(SHA384_CTX *ctx) +{ + SHA2Init(SHA384, ctx); +} + +void +SHA512Init(SHA512_CTX *ctx) +{ + SHA2Init(SHA512, ctx); +} + +#endif /* _KERNEL */ + +/* + * SHA2Update() + * + * purpose: continues an sha2 digest operation, using the message block + * to update the context. + * input: SHA2_CTX * : the context to update + * void * : the message block + * size_t : the length of the message block, in bytes + * output: void + */ + +void +SHA2Update(SHA2_CTX *ctx, const void *inptr, size_t input_len) +{ + uint32_t i, buf_index, buf_len, buf_limit; + const uint8_t *input = inptr; + uint32_t algotype = ctx->algotype; +#if defined(__amd64) + uint32_t block_count; +#endif /* !__amd64 */ + + + /* check for noop */ + if (input_len == 0) + return; + + if (algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) { + buf_limit = 64; + + /* compute number of bytes mod 64 */ + buf_index = (ctx->count.c32[1] >> 3) & 0x3F; + + /* update number of bits */ + if ((ctx->count.c32[1] += (input_len << 3)) < (input_len << 3)) + ctx->count.c32[0]++; + + ctx->count.c32[0] += (input_len >> 29); + + } else { + buf_limit = 128; + + /* compute number of bytes mod 128 */ + buf_index = (ctx->count.c64[1] >> 3) & 0x7F; + + /* update number of bits */ + if ((ctx->count.c64[1] += (input_len << 3)) < (input_len << 3)) + ctx->count.c64[0]++; + + ctx->count.c64[0] += (input_len >> 29); + } + + buf_len = buf_limit - buf_index; + + /* transform as many times as possible */ + i = 0; + if (input_len >= buf_len) { + + /* + * general optimization: + * + * only do initial bcopy() and SHA2Transform() if + * buf_index != 0. if buf_index == 0, we're just + * wasting our time doing the bcopy() since there + * wasn't any data left over from a previous call to + * SHA2Update(). + */ + if (buf_index) { + bcopy(input, &ctx->buf_un.buf8[buf_index], buf_len); + if (algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) + SHA256Transform(ctx, ctx->buf_un.buf8); + else + SHA512Transform(ctx, ctx->buf_un.buf8); + + i = buf_len; + } + +#if !defined(__amd64) + if (algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) { + for (; i + buf_limit - 1 < input_len; i += buf_limit) { + SHA256Transform(ctx, &input[i]); + } + } else { + for (; i + buf_limit - 1 < input_len; i += buf_limit) { + SHA512Transform(ctx, &input[i]); + } + } + +#else + if (algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) { + block_count = (input_len - i) >> 6; + if (block_count > 0) { + SHA256TransformBlocks(ctx, &input[i], + block_count); + i += block_count << 6; + } + } else { + block_count = (input_len - i) >> 7; + if (block_count > 0) { + SHA512TransformBlocks(ctx, &input[i], + block_count); + i += block_count << 7; + } + } +#endif /* !__amd64 */ + + /* + * general optimization: + * + * if i and input_len are the same, return now instead + * of calling bcopy(), since the bcopy() in this case + * will be an expensive noop. + */ + + if (input_len == i) + return; + + buf_index = 0; + } + + /* buffer remaining input */ + bcopy(&input[i], &ctx->buf_un.buf8[buf_index], input_len - i); +} + + +/* + * SHA2Final() + * + * purpose: ends an sha2 digest operation, finalizing the message digest and + * zeroing the context. + * input: uchar_t * : a buffer to store the digest + * : The function actually uses void* because many + * : callers pass things other than uchar_t here. + * SHA2_CTX * : the context to finalize, save, and zero + * output: void + */ + +void +SHA2Final(void *digest, SHA2_CTX *ctx) +{ + uint8_t bitcount_be[sizeof (ctx->count.c32)]; + uint8_t bitcount_be64[sizeof (ctx->count.c64)]; + uint32_t index; + uint32_t algotype = ctx->algotype; + + if (algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) { + index = (ctx->count.c32[1] >> 3) & 0x3f; + Encode(bitcount_be, ctx->count.c32, sizeof (bitcount_be)); + SHA2Update(ctx, PADDING, ((index < 56) ? 56 : 120) - index); + SHA2Update(ctx, bitcount_be, sizeof (bitcount_be)); + Encode(digest, ctx->state.s32, sizeof (ctx->state.s32)); + } else { + index = (ctx->count.c64[1] >> 3) & 0x7f; + Encode64(bitcount_be64, ctx->count.c64, + sizeof (bitcount_be64)); + SHA2Update(ctx, PADDING, ((index < 112) ? 112 : 240) - index); + SHA2Update(ctx, bitcount_be64, sizeof (bitcount_be64)); + if (algotype <= SHA384_HMAC_GEN_MECH_INFO_TYPE) { + ctx->state.s64[6] = ctx->state.s64[7] = 0; + Encode64(digest, ctx->state.s64, + sizeof (uint64_t) * 6); + } else if (algotype == SHA512_224_MECH_INFO_TYPE) { + uint8_t last[sizeof (uint64_t)]; + /* + * Since SHA-512/224 doesn't align well to 64-bit + * boundaries, we must do the encoding in three steps: + * 1) encode the three 64-bit words that fit neatly + * 2) encode the last 64-bit word to a temp buffer + * 3) chop out the lower 32-bits from the temp buffer + * and append them to the digest + */ + Encode64(digest, ctx->state.s64, sizeof (uint64_t) * 3); + Encode64(last, &ctx->state.s64[3], sizeof (uint64_t)); + bcopy(last, (uint8_t *)digest + 24, 4); + } else if (algotype == SHA512_256_MECH_INFO_TYPE) { + Encode64(digest, ctx->state.s64, sizeof (uint64_t) * 4); + } else { + Encode64(digest, ctx->state.s64, + sizeof (ctx->state.s64)); + } + } + + /* zeroize sensitive information */ + bzero(ctx, sizeof (*ctx)); +} + + + +#ifdef _KERNEL +EXPORT_SYMBOL(SHA2Init); +EXPORT_SYMBOL(SHA2Update); +EXPORT_SYMBOL(SHA2Final); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/algs/skein/skein.c +++ linux-aws-4.15.0/zfs/module/icp/algs/skein/skein.c @@ -0,0 +1,921 @@ +/* + * Implementation of the Skein hash function. + * Source code author: Doug Whiting, 2008. + * This algorithm and source code is released to the public domain. + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ + +#define SKEIN_PORT_CODE /* instantiate any code in skein_port.h */ + +#include +#include +#include /* get the Skein API definitions */ +#include "skein_impl.h" /* get internal definitions */ + +/* External function to process blkCnt (nonzero) full block(s) of data. */ +void Skein_256_Process_Block(Skein_256_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd); +void Skein_512_Process_Block(Skein_512_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd); +void Skein1024_Process_Block(Skein1024_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd); + +/* 256-bit Skein */ +/* init the context for a straight hashing operation */ +int +Skein_256_Init(Skein_256_Ctxt_t *ctx, size_t hashBitLen) +{ + union { + uint8_t b[SKEIN_256_STATE_BYTES]; + uint64_t w[SKEIN_256_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + + switch (hashBitLen) { /* use pre-computed values, where available */ +#ifndef SKEIN_NO_PRECOMP + case 256: + bcopy(SKEIN_256_IV_256, ctx->X, sizeof (ctx->X)); + break; + case 224: + bcopy(SKEIN_256_IV_224, ctx->X, sizeof (ctx->X)); + break; + case 160: + bcopy(SKEIN_256_IV_160, ctx->X, sizeof (ctx->X)); + break; + case 128: + bcopy(SKEIN_256_IV_128, ctx->X, sizeof (ctx->X)); + break; +#endif + default: + /* here if there is no precomputed IV value available */ + /* + * build/process the config block, type == CONFIG (could be + * precomputed) + */ + /* set tweaks: T0=0; T1=CFG | FINAL */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + /* set the schema, version */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + /* hash result length in bits */ + cfg.w[1] = Skein_Swap64(hashBitLen); + cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); + /* zero pad config block */ + bzero(&cfg.w[3], sizeof (cfg) - 3 * sizeof (cfg.w[0])); + + /* compute the initial chaining values from config block */ + /* zero the chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + Skein_256_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + break; + } + /* + * The chaining vars ctx->X are now initialized for the given + * hashBitLen. + * Set up to process the data message portion of the hash (default) + */ + Skein_Start_New_Type(ctx, MSG); /* T0=0, T1= MSG type */ + + return (SKEIN_SUCCESS); +} + +/* init the context for a MAC and/or tree hash operation */ +/* + * [identical to Skein_256_Init() when keyBytes == 0 && + * treeInfo == SKEIN_CFG_TREE_INFO_SEQUENTIAL] + */ +int +Skein_256_InitExt(Skein_256_Ctxt_t *ctx, size_t hashBitLen, uint64_t treeInfo, + const uint8_t *key, size_t keyBytes) +{ + union { + uint8_t b[SKEIN_256_STATE_BYTES]; + uint64_t w[SKEIN_256_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + Skein_Assert(keyBytes == 0 || key != NULL, SKEIN_FAIL); + + /* compute the initial chaining values ctx->X[], based on key */ + if (keyBytes == 0) { /* is there a key? */ + /* no key: use all zeroes as key for config block */ + bzero(ctx->X, sizeof (ctx->X)); + } else { /* here to pre-process a key */ + + Skein_assert(sizeof (cfg.b) >= sizeof (ctx->X)); + /* do a mini-Init right here */ + /* set output hash bit count = state size */ + ctx->h.hashBitLen = 8 * sizeof (ctx->X); + /* set tweaks: T0 = 0; T1 = KEY type */ + Skein_Start_New_Type(ctx, KEY); + /* zero the initial chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + /* hash the key */ + (void) Skein_256_Update(ctx, key, keyBytes); + /* put result into cfg.b[] */ + (void) Skein_256_Final_Pad(ctx, cfg.b); + /* copy over into ctx->X[] */ + bcopy(cfg.b, ctx->X, sizeof (cfg.b)); +#if SKEIN_NEED_SWAP + { + uint_t i; + /* convert key bytes to context words */ + for (i = 0; i < SKEIN_256_STATE_WORDS; i++) + ctx->X[i] = Skein_Swap64(ctx->X[i]); + } +#endif + } + /* + * build/process the config block, type == CONFIG (could be + * precomputed for each key) + */ + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + bzero(&cfg.w, sizeof (cfg.w)); /* pre-pad cfg.w[] with zeroes */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ + /* tree hash config info (or SKEIN_CFG_TREE_INFO_SEQUENTIAL) */ + cfg.w[2] = Skein_Swap64(treeInfo); + + Skein_Show_Key(256, &ctx->h, key, keyBytes); + + /* compute the initial chaining values from config block */ + Skein_256_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + + /* The chaining vars ctx->X are now initialized */ + /* Set up to process the data message portion of the hash (default) */ + ctx->h.bCnt = 0; /* buffer b[] starts out empty */ + Skein_Start_New_Type(ctx, MSG); + + return (SKEIN_SUCCESS); +} + +/* process the input bytes */ +int +Skein_256_Update(Skein_256_Ctxt_t *ctx, const uint8_t *msg, size_t msgByteCnt) +{ + size_t n; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); + + /* process full blocks, if any */ + if (msgByteCnt + ctx->h.bCnt > SKEIN_256_BLOCK_BYTES) { + /* finish up any buffered message data */ + if (ctx->h.bCnt) { + /* # bytes free in buffer b[] */ + n = SKEIN_256_BLOCK_BYTES - ctx->h.bCnt; + if (n) { + /* check on our logic here */ + Skein_assert(n < msgByteCnt); + bcopy(msg, &ctx->b[ctx->h.bCnt], n); + msgByteCnt -= n; + msg += n; + ctx->h.bCnt += n; + } + Skein_assert(ctx->h.bCnt == SKEIN_256_BLOCK_BYTES); + Skein_256_Process_Block(ctx, ctx->b, 1, + SKEIN_256_BLOCK_BYTES); + ctx->h.bCnt = 0; + } + /* + * now process any remaining full blocks, directly from input + * message data + */ + if (msgByteCnt > SKEIN_256_BLOCK_BYTES) { + /* number of full blocks to process */ + n = (msgByteCnt - 1) / SKEIN_256_BLOCK_BYTES; + Skein_256_Process_Block(ctx, msg, n, + SKEIN_256_BLOCK_BYTES); + msgByteCnt -= n * SKEIN_256_BLOCK_BYTES; + msg += n * SKEIN_256_BLOCK_BYTES; + } + Skein_assert(ctx->h.bCnt == 0); + } + + /* copy any remaining source message data bytes into b[] */ + if (msgByteCnt) { + Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES); + bcopy(msg, &ctx->b[ctx->h.bCnt], msgByteCnt); + ctx->h.bCnt += msgByteCnt; + } + + return (SKEIN_SUCCESS); +} + +/* finalize the hash computation and output the result */ +int +Skein_256_Final(Skein_256_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN_256_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); + + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN_256_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN_256_BLOCK_BYTES - ctx->h.bCnt); + + /* process the final block */ + Skein_256_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN_256_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein_256_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN_256_BLOCK_BYTES; + if (n >= SKEIN_256_BLOCK_BYTES) + n = SKEIN_256_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN_256_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(256, &ctx->h, n, + hashVal + i * SKEIN_256_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} + +/* 512-bit Skein */ + +/* init the context for a straight hashing operation */ +int +Skein_512_Init(Skein_512_Ctxt_t *ctx, size_t hashBitLen) +{ + union { + uint8_t b[SKEIN_512_STATE_BYTES]; + uint64_t w[SKEIN_512_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + + switch (hashBitLen) { /* use pre-computed values, where available */ +#ifndef SKEIN_NO_PRECOMP + case 512: + bcopy(SKEIN_512_IV_512, ctx->X, sizeof (ctx->X)); + break; + case 384: + bcopy(SKEIN_512_IV_384, ctx->X, sizeof (ctx->X)); + break; + case 256: + bcopy(SKEIN_512_IV_256, ctx->X, sizeof (ctx->X)); + break; + case 224: + bcopy(SKEIN_512_IV_224, ctx->X, sizeof (ctx->X)); + break; +#endif + default: + /* + * here if there is no precomputed IV value available + * build/process the config block, type == CONFIG (could be + * precomputed) + */ + /* set tweaks: T0=0; T1=CFG | FINAL */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + /* set the schema, version */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + /* hash result length in bits */ + cfg.w[1] = Skein_Swap64(hashBitLen); + cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); + /* zero pad config block */ + bzero(&cfg.w[3], sizeof (cfg) - 3 * sizeof (cfg.w[0])); + + /* compute the initial chaining values from config block */ + /* zero the chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + Skein_512_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + break; + } + + /* + * The chaining vars ctx->X are now initialized for the given + * hashBitLen. Set up to process the data message portion of the + * hash (default) + */ + Skein_Start_New_Type(ctx, MSG); /* T0=0, T1= MSG type */ + + return (SKEIN_SUCCESS); +} + +/* init the context for a MAC and/or tree hash operation */ +/* + * [identical to Skein_512_Init() when keyBytes == 0 && + * treeInfo == SKEIN_CFG_TREE_INFO_SEQUENTIAL] + */ +int +Skein_512_InitExt(Skein_512_Ctxt_t *ctx, size_t hashBitLen, uint64_t treeInfo, + const uint8_t *key, size_t keyBytes) +{ + union { + uint8_t b[SKEIN_512_STATE_BYTES]; + uint64_t w[SKEIN_512_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + Skein_Assert(keyBytes == 0 || key != NULL, SKEIN_FAIL); + + /* compute the initial chaining values ctx->X[], based on key */ + if (keyBytes == 0) { /* is there a key? */ + /* no key: use all zeroes as key for config block */ + bzero(ctx->X, sizeof (ctx->X)); + } else { /* here to pre-process a key */ + + Skein_assert(sizeof (cfg.b) >= sizeof (ctx->X)); + /* do a mini-Init right here */ + /* set output hash bit count = state size */ + ctx->h.hashBitLen = 8 * sizeof (ctx->X); + /* set tweaks: T0 = 0; T1 = KEY type */ + Skein_Start_New_Type(ctx, KEY); + /* zero the initial chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + (void) Skein_512_Update(ctx, key, keyBytes); /* hash the key */ + /* put result into cfg.b[] */ + (void) Skein_512_Final_Pad(ctx, cfg.b); + /* copy over into ctx->X[] */ + bcopy(cfg.b, ctx->X, sizeof (cfg.b)); +#if SKEIN_NEED_SWAP + { + uint_t i; + /* convert key bytes to context words */ + for (i = 0; i < SKEIN_512_STATE_WORDS; i++) + ctx->X[i] = Skein_Swap64(ctx->X[i]); + } +#endif + } + /* + * build/process the config block, type == CONFIG (could be + * precomputed for each key) + */ + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + bzero(&cfg.w, sizeof (cfg.w)); /* pre-pad cfg.w[] with zeroes */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + cfg.w[1] = Skein_Swap64(hashBitLen); /* hash result length in bits */ + /* tree hash config info (or SKEIN_CFG_TREE_INFO_SEQUENTIAL) */ + cfg.w[2] = Skein_Swap64(treeInfo); + + Skein_Show_Key(512, &ctx->h, key, keyBytes); + + /* compute the initial chaining values from config block */ + Skein_512_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + + /* The chaining vars ctx->X are now initialized */ + /* Set up to process the data message portion of the hash (default) */ + ctx->h.bCnt = 0; /* buffer b[] starts out empty */ + Skein_Start_New_Type(ctx, MSG); + + return (SKEIN_SUCCESS); +} + +/* process the input bytes */ +int +Skein_512_Update(Skein_512_Ctxt_t *ctx, const uint8_t *msg, size_t msgByteCnt) +{ + size_t n; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); + + /* process full blocks, if any */ + if (msgByteCnt + ctx->h.bCnt > SKEIN_512_BLOCK_BYTES) { + /* finish up any buffered message data */ + if (ctx->h.bCnt) { + /* # bytes free in buffer b[] */ + n = SKEIN_512_BLOCK_BYTES - ctx->h.bCnt; + if (n) { + /* check on our logic here */ + Skein_assert(n < msgByteCnt); + bcopy(msg, &ctx->b[ctx->h.bCnt], n); + msgByteCnt -= n; + msg += n; + ctx->h.bCnt += n; + } + Skein_assert(ctx->h.bCnt == SKEIN_512_BLOCK_BYTES); + Skein_512_Process_Block(ctx, ctx->b, 1, + SKEIN_512_BLOCK_BYTES); + ctx->h.bCnt = 0; + } + /* + * now process any remaining full blocks, directly from input + * message data + */ + if (msgByteCnt > SKEIN_512_BLOCK_BYTES) { + /* number of full blocks to process */ + n = (msgByteCnt - 1) / SKEIN_512_BLOCK_BYTES; + Skein_512_Process_Block(ctx, msg, n, + SKEIN_512_BLOCK_BYTES); + msgByteCnt -= n * SKEIN_512_BLOCK_BYTES; + msg += n * SKEIN_512_BLOCK_BYTES; + } + Skein_assert(ctx->h.bCnt == 0); + } + + /* copy any remaining source message data bytes into b[] */ + if (msgByteCnt) { + Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES); + bcopy(msg, &ctx->b[ctx->h.bCnt], msgByteCnt); + ctx->h.bCnt += msgByteCnt; + } + + return (SKEIN_SUCCESS); +} + +/* finalize the hash computation and output the result */ +int +Skein_512_Final(Skein_512_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN_512_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); + + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); + + /* process the final block */ + Skein_512_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN_512_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein_512_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN_512_BLOCK_BYTES; + if (n >= SKEIN_512_BLOCK_BYTES) + n = SKEIN_512_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN_512_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(512, &ctx->h, n, + hashVal + i * SKEIN_512_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} + +/* 1024-bit Skein */ + +/* init the context for a straight hashing operation */ +int +Skein1024_Init(Skein1024_Ctxt_t *ctx, size_t hashBitLen) +{ + union { + uint8_t b[SKEIN1024_STATE_BYTES]; + uint64_t w[SKEIN1024_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + + switch (hashBitLen) { /* use pre-computed values, where available */ +#ifndef SKEIN_NO_PRECOMP + case 512: + bcopy(SKEIN1024_IV_512, ctx->X, sizeof (ctx->X)); + break; + case 384: + bcopy(SKEIN1024_IV_384, ctx->X, sizeof (ctx->X)); + break; + case 1024: + bcopy(SKEIN1024_IV_1024, ctx->X, sizeof (ctx->X)); + break; +#endif + default: + /* here if there is no precomputed IV value available */ + /* + * build/process the config block, type == CONFIG (could be + * precomputed) + */ + /* set tweaks: T0=0; T1=CFG | FINAL */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + /* set the schema, version */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + /* hash result length in bits */ + cfg.w[1] = Skein_Swap64(hashBitLen); + cfg.w[2] = Skein_Swap64(SKEIN_CFG_TREE_INFO_SEQUENTIAL); + /* zero pad config block */ + bzero(&cfg.w[3], sizeof (cfg) - 3 * sizeof (cfg.w[0])); + + /* compute the initial chaining values from config block */ + /* zero the chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + Skein1024_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + break; + } + + /* + * The chaining vars ctx->X are now initialized for the given + * hashBitLen. Set up to process the data message portion of the hash + * (default) + */ + Skein_Start_New_Type(ctx, MSG); /* T0=0, T1= MSG type */ + + return (SKEIN_SUCCESS); +} + +/* init the context for a MAC and/or tree hash operation */ +/* + * [identical to Skein1024_Init() when keyBytes == 0 && + * treeInfo == SKEIN_CFG_TREE_INFO_SEQUENTIAL] + */ +int +Skein1024_InitExt(Skein1024_Ctxt_t *ctx, size_t hashBitLen, uint64_t treeInfo, + const uint8_t *key, size_t keyBytes) +{ + union { + uint8_t b[SKEIN1024_STATE_BYTES]; + uint64_t w[SKEIN1024_STATE_WORDS]; + } cfg; /* config block */ + + Skein_Assert(hashBitLen > 0, SKEIN_BAD_HASHLEN); + Skein_Assert(keyBytes == 0 || key != NULL, SKEIN_FAIL); + + /* compute the initial chaining values ctx->X[], based on key */ + if (keyBytes == 0) { /* is there a key? */ + /* no key: use all zeroes as key for config block */ + bzero(ctx->X, sizeof (ctx->X)); + } else { /* here to pre-process a key */ + Skein_assert(sizeof (cfg.b) >= sizeof (ctx->X)); + /* do a mini-Init right here */ + /* set output hash bit count = state size */ + ctx->h.hashBitLen = 8 * sizeof (ctx->X); + /* set tweaks: T0 = 0; T1 = KEY type */ + Skein_Start_New_Type(ctx, KEY); + /* zero the initial chaining variables */ + bzero(ctx->X, sizeof (ctx->X)); + (void) Skein1024_Update(ctx, key, keyBytes); /* hash the key */ + /* put result into cfg.b[] */ + (void) Skein1024_Final_Pad(ctx, cfg.b); + /* copy over into ctx->X[] */ + bcopy(cfg.b, ctx->X, sizeof (cfg.b)); +#if SKEIN_NEED_SWAP + { + uint_t i; + /* convert key bytes to context words */ + for (i = 0; i < SKEIN1024_STATE_WORDS; i++) + ctx->X[i] = Skein_Swap64(ctx->X[i]); + } +#endif + } + /* + * build/process the config block, type == CONFIG (could be + * precomputed for each key) + */ + ctx->h.hashBitLen = hashBitLen; /* output hash bit count */ + Skein_Start_New_Type(ctx, CFG_FINAL); + + bzero(&cfg.w, sizeof (cfg.w)); /* pre-pad cfg.w[] with zeroes */ + cfg.w[0] = Skein_Swap64(SKEIN_SCHEMA_VER); + /* hash result length in bits */ + cfg.w[1] = Skein_Swap64(hashBitLen); + /* tree hash config info (or SKEIN_CFG_TREE_INFO_SEQUENTIAL) */ + cfg.w[2] = Skein_Swap64(treeInfo); + + Skein_Show_Key(1024, &ctx->h, key, keyBytes); + + /* compute the initial chaining values from config block */ + Skein1024_Process_Block(ctx, cfg.b, 1, SKEIN_CFG_STR_LEN); + + /* The chaining vars ctx->X are now initialized */ + /* Set up to process the data message portion of the hash (default) */ + ctx->h.bCnt = 0; /* buffer b[] starts out empty */ + Skein_Start_New_Type(ctx, MSG); + + return (SKEIN_SUCCESS); +} + +/* process the input bytes */ +int +Skein1024_Update(Skein1024_Ctxt_t *ctx, const uint8_t *msg, size_t msgByteCnt) +{ + size_t n; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); + + /* process full blocks, if any */ + if (msgByteCnt + ctx->h.bCnt > SKEIN1024_BLOCK_BYTES) { + /* finish up any buffered message data */ + if (ctx->h.bCnt) { + /* # bytes free in buffer b[] */ + n = SKEIN1024_BLOCK_BYTES - ctx->h.bCnt; + if (n) { + /* check on our logic here */ + Skein_assert(n < msgByteCnt); + bcopy(msg, &ctx->b[ctx->h.bCnt], n); + msgByteCnt -= n; + msg += n; + ctx->h.bCnt += n; + } + Skein_assert(ctx->h.bCnt == SKEIN1024_BLOCK_BYTES); + Skein1024_Process_Block(ctx, ctx->b, 1, + SKEIN1024_BLOCK_BYTES); + ctx->h.bCnt = 0; + } + /* + * now process any remaining full blocks, directly from + * input message data + */ + if (msgByteCnt > SKEIN1024_BLOCK_BYTES) { + /* number of full blocks to process */ + n = (msgByteCnt - 1) / SKEIN1024_BLOCK_BYTES; + Skein1024_Process_Block(ctx, msg, n, + SKEIN1024_BLOCK_BYTES); + msgByteCnt -= n * SKEIN1024_BLOCK_BYTES; + msg += n * SKEIN1024_BLOCK_BYTES; + } + Skein_assert(ctx->h.bCnt == 0); + } + + /* copy any remaining source message data bytes into b[] */ + if (msgByteCnt) { + Skein_assert(msgByteCnt + ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES); + bcopy(msg, &ctx->b[ctx->h.bCnt], msgByteCnt); + ctx->h.bCnt += msgByteCnt; + } + + return (SKEIN_SUCCESS); +} + +/* finalize the hash computation and output the result */ +int +Skein1024_Final(Skein1024_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN1024_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); + + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN1024_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN1024_BLOCK_BYTES - ctx->h.bCnt); + + /* process the final block */ + Skein1024_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN1024_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein1024_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN1024_BLOCK_BYTES; + if (n >= SKEIN1024_BLOCK_BYTES) + n = SKEIN1024_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN1024_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(1024, &ctx->h, n, + hashVal + i * SKEIN1024_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} + +/* Functions to support MAC/tree hashing */ +/* (this code is identical for Optimized and Reference versions) */ + +/* finalize the hash computation and output the block, no OUTPUT stage */ +int +Skein_256_Final_Pad(Skein_256_Ctxt_t *ctx, uint8_t *hashVal) +{ + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); + + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN_256_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN_256_BLOCK_BYTES - ctx->h.bCnt); + /* process the final block */ + Skein_256_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* "output" the state bytes */ + Skein_Put64_LSB_First(hashVal, ctx->X, SKEIN_256_BLOCK_BYTES); + + return (SKEIN_SUCCESS); +} + +/* finalize the hash computation and output the block, no OUTPUT stage */ +int +Skein_512_Final_Pad(Skein_512_Ctxt_t *ctx, uint8_t *hashVal) +{ + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); + + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; /* tag as the final block */ + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN_512_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN_512_BLOCK_BYTES - ctx->h.bCnt); + /* process the final block */ + Skein_512_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* "output" the state bytes */ + Skein_Put64_LSB_First(hashVal, ctx->X, SKEIN_512_BLOCK_BYTES); + + return (SKEIN_SUCCESS); +} + +/* finalize the hash computation and output the block, no OUTPUT stage */ +int +Skein1024_Final_Pad(Skein1024_Ctxt_t *ctx, uint8_t *hashVal) +{ + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); + + /* tag as the final block */ + ctx->h.T[1] |= SKEIN_T1_FLAG_FINAL; + /* zero pad b[] if necessary */ + if (ctx->h.bCnt < SKEIN1024_BLOCK_BYTES) + bzero(&ctx->b[ctx->h.bCnt], + SKEIN1024_BLOCK_BYTES - ctx->h.bCnt); + /* process the final block */ + Skein1024_Process_Block(ctx, ctx->b, 1, ctx->h.bCnt); + + /* "output" the state bytes */ + Skein_Put64_LSB_First(hashVal, ctx->X, SKEIN1024_BLOCK_BYTES); + + return (SKEIN_SUCCESS); +} + +#if SKEIN_TREE_HASH +/* just do the OUTPUT stage */ +int +Skein_256_Output(Skein_256_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN_256_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_256_BLOCK_BYTES, SKEIN_FAIL); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN_256_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein_256_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN_256_BLOCK_BYTES; + if (n >= SKEIN_256_BLOCK_BYTES) + n = SKEIN_256_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN_256_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(256, &ctx->h, n, + hashVal + i * SKEIN_256_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} + +/* just do the OUTPUT stage */ +int +Skein_512_Output(Skein_512_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN_512_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN_512_BLOCK_BYTES, SKEIN_FAIL); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN_512_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein_512_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN_512_BLOCK_BYTES; + if (n >= SKEIN_512_BLOCK_BYTES) + n = SKEIN_512_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN_512_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(256, &ctx->h, n, + hashVal + i * SKEIN_512_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} + +/* just do the OUTPUT stage */ +int +Skein1024_Output(Skein1024_Ctxt_t *ctx, uint8_t *hashVal) +{ + size_t i, n, byteCnt; + uint64_t X[SKEIN1024_STATE_WORDS]; + + /* catch uninitialized context */ + Skein_Assert(ctx->h.bCnt <= SKEIN1024_BLOCK_BYTES, SKEIN_FAIL); + + /* now output the result */ + /* total number of output bytes */ + byteCnt = (ctx->h.hashBitLen + 7) >> 3; + + /* run Threefish in "counter mode" to generate output */ + /* zero out b[], so it can hold the counter */ + bzero(ctx->b, sizeof (ctx->b)); + /* keep a local copy of counter mode "key" */ + bcopy(ctx->X, X, sizeof (X)); + for (i = 0; i * SKEIN1024_BLOCK_BYTES < byteCnt; i++) { + /* build the counter block */ + uint64_t tmp = Skein_Swap64((uint64_t)i); + bcopy(&tmp, ctx->b, sizeof (tmp)); + Skein_Start_New_Type(ctx, OUT_FINAL); + /* run "counter mode" */ + Skein1024_Process_Block(ctx, ctx->b, 1, sizeof (uint64_t)); + /* number of output bytes left to go */ + n = byteCnt - i * SKEIN1024_BLOCK_BYTES; + if (n >= SKEIN1024_BLOCK_BYTES) + n = SKEIN1024_BLOCK_BYTES; + Skein_Put64_LSB_First(hashVal + i * SKEIN1024_BLOCK_BYTES, + ctx->X, n); /* "output" the ctr mode bytes */ + Skein_Show_Final(256, &ctx->h, n, + hashVal + i * SKEIN1024_BLOCK_BYTES); + /* restore the counter mode key for next time */ + bcopy(X, ctx->X, sizeof (X)); + } + return (SKEIN_SUCCESS); +} +#endif + +#ifdef _KERNEL +EXPORT_SYMBOL(Skein_512_Init); +EXPORT_SYMBOL(Skein_512_InitExt); +EXPORT_SYMBOL(Skein_512_Update); +EXPORT_SYMBOL(Skein_512_Final); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/algs/skein/skein_block.c +++ linux-aws-4.15.0/zfs/module/icp/algs/skein/skein_block.c @@ -0,0 +1,790 @@ +/* + * Implementation of the Skein block functions. + * Source code author: Doug Whiting, 2008. + * This algorithm and source code is released to the public domain. + * Compile-time switches: + * SKEIN_USE_ASM -- set bits (256/512/1024) to select which + * versions use ASM code for block processing + * [default: use C for all block sizes] + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ + +#include +#include "skein_impl.h" +#include /* for _ILP32 */ + +#ifndef SKEIN_USE_ASM +#define SKEIN_USE_ASM (0) /* default is all C code (no ASM) */ +#endif + +#ifndef SKEIN_LOOP +/* + * The low-level checksum routines use a lot of stack space. On systems where + * small stacks frame are enforced (like 32-bit kernel builds), do not unroll + * checksum calculations to save stack space. + * + * Even with no loops unrolled, we still can exceed the 1k stack frame limit + * in Skein1024_Process_Block() (it hits 1272 bytes on ARM32). We can + * safely ignore it though, since that the checksum functions will be called + * from a worker thread that won't be using much stack. That's why we have + * the #pragma here to ignore the warning. + */ +#if defined(_ILP32) || defined(__powerpc) /* Assume small stack */ +#pragma GCC diagnostic ignored "-Wframe-larger-than=" +/* + * We're running on 32-bit, don't unroll loops to save stack frame space + * + * Due to the ways the calculations on SKEIN_LOOP are done in + * Skein_*_Process_Block(), a value of 111 disables unrolling loops + * in any of those functions. + */ +#define SKEIN_LOOP 111 +#else +/* We're compiling with large stacks */ +#define SKEIN_LOOP 001 /* default: unroll 256 and 512, but not 1024 */ +#endif +#endif + +/* some useful definitions for code here */ +#define BLK_BITS (WCNT*64) +#define KW_TWK_BASE (0) +#define KW_KEY_BASE (3) +#define ks (kw + KW_KEY_BASE) +#define ts (kw + KW_TWK_BASE) + +/* no debugging in Illumos version */ +#define DebugSaveTweak(ctx) + +/* Skein_256 */ +#if !(SKEIN_USE_ASM & 256) +void +Skein_256_Process_Block(Skein_256_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd) +{ + enum { + WCNT = SKEIN_256_STATE_WORDS + }; +#undef RCNT +#define RCNT (SKEIN_256_ROUNDS_TOTAL / 8) + +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_256 (((SKEIN_LOOP) / 100) % 10) +#else +#define SKEIN_UNROLL_256 (0) +#endif + +#if SKEIN_UNROLL_256 +#if (RCNT % SKEIN_UNROLL_256) +#error "Invalid SKEIN_UNROLL_256" /* sanity check on unroll count */ +#endif + size_t r; + /* key schedule words : chaining vars + tweak + "rotation" */ + uint64_t kw[WCNT + 4 + RCNT * 2]; +#else + uint64_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ +#endif + /* local copy of context vars, for speed */ + uint64_t X0, X1, X2, X3; + uint64_t w[WCNT]; /* local copy of input block */ +#ifdef SKEIN_DEBUG + /* use for debugging (help compiler put Xn in registers) */ + const uint64_t *Xptr[4]; + Xptr[0] = &X0; + Xptr[1] = &X1; + Xptr[2] = &X2; + Xptr[3] = &X3; +#endif + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + ts[0] = ctx->h.T[0]; + ts[1] = ctx->h.T[1]; + do { + /* + * this implementation only supports 2**64 input bytes + * (no carry out here) + */ + ts[0] += byteCntAdd; /* update processed length */ + + /* precompute the key schedule for this block */ + ks[0] = ctx->X[0]; + ks[1] = ctx->X[1]; + ks[2] = ctx->X[2]; + ks[3] = ctx->X[3]; + ks[4] = ks[0] ^ ks[1] ^ ks[2] ^ ks[3] ^ SKEIN_KS_PARITY; + + ts[2] = ts[0] ^ ts[1]; + + /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); + DebugSaveTweak(ctx); + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); + + X0 = w[0] + ks[0]; /* do the first full key injection */ + X1 = w[1] + ks[1] + ts[0]; + X2 = w[2] + ks[2] + ts[1]; + X3 = w[3] + ks[3]; + + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, + Xptr); /* show starting state values */ + + blkPtr += SKEIN_256_BLOCK_BYTES; + + /* run the rounds */ + +#define Round256(p0, p1, p2, p3, ROT, rNum) \ + X##p0 += X##p1; X##p1 = RotL_64(X##p1, ROT##_0); X##p1 ^= X##p0; \ + X##p2 += X##p3; X##p3 = RotL_64(X##p3, ROT##_1); X##p3 ^= X##p2; \ + +#if SKEIN_UNROLL_256 == 0 +#define R256(p0, p1, p2, p3, ROT, rNum) /* fully unrolled */ \ + Round256(p0, p1, p2, p3, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rNum, Xptr); + +#define I256(R) \ + X0 += ks[((R) + 1) % 5]; /* inject the key schedule value */ \ + X1 += ks[((R) + 2) % 5] + ts[((R) + 1) % 3]; \ + X2 += ks[((R) + 3) % 5] + ts[((R) + 2) % 3]; \ + X3 += ks[((R) + 4) % 5] + (R) + 1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R256(p0, p1, p2, p3, ROT, rNum) \ + Round256(p0, p1, p2, p3, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rNum, Xptr); + +#define I256(R) \ + X0 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X1 += ks[r + (R) + 1] + ts[r + (R) + 0]; \ + X2 += ks[r + (R) + 2] + ts[r + (R) + 1]; \ + X3 += ks[r + (R) + 3] + r + (R); \ + ks[r + (R) + 4] = ks[r + (R) - 1]; /* rotate key schedule */ \ + ts[r + (R) + 2] = ts[r + (R) - 1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + /* loop thru it */ + for (r = 1; r < 2 * RCNT; r += 2 * SKEIN_UNROLL_256) +#endif + { +#define R256_8_rounds(R) \ + R256(0, 1, 2, 3, R_256_0, 8 * (R) + 1); \ + R256(0, 3, 2, 1, R_256_1, 8 * (R) + 2); \ + R256(0, 1, 2, 3, R_256_2, 8 * (R) + 3); \ + R256(0, 3, 2, 1, R_256_3, 8 * (R) + 4); \ + I256(2 * (R)); \ + R256(0, 1, 2, 3, R_256_4, 8 * (R) + 5); \ + R256(0, 3, 2, 1, R_256_5, 8 * (R) + 6); \ + R256(0, 1, 2, 3, R_256_6, 8 * (R) + 7); \ + R256(0, 3, 2, 1, R_256_7, 8 * (R) + 8); \ + I256(2 * (R) + 1); + + R256_8_rounds(0); + +#define R256_Unroll_R(NN) \ + ((SKEIN_UNROLL_256 == 0 && SKEIN_256_ROUNDS_TOTAL / 8 > (NN)) || \ + (SKEIN_UNROLL_256 > (NN))) + +#if R256_Unroll_R(1) + R256_8_rounds(1); +#endif +#if R256_Unroll_R(2) + R256_8_rounds(2); +#endif +#if R256_Unroll_R(3) + R256_8_rounds(3); +#endif +#if R256_Unroll_R(4) + R256_8_rounds(4); +#endif +#if R256_Unroll_R(5) + R256_8_rounds(5); +#endif +#if R256_Unroll_R(6) + R256_8_rounds(6); +#endif +#if R256_Unroll_R(7) + R256_8_rounds(7); +#endif +#if R256_Unroll_R(8) + R256_8_rounds(8); +#endif +#if R256_Unroll_R(9) + R256_8_rounds(9); +#endif +#if R256_Unroll_R(10) + R256_8_rounds(10); +#endif +#if R256_Unroll_R(11) + R256_8_rounds(11); +#endif +#if R256_Unroll_R(12) + R256_8_rounds(12); +#endif +#if R256_Unroll_R(13) + R256_8_rounds(13); +#endif +#if R256_Unroll_R(14) + R256_8_rounds(14); +#endif +#if (SKEIN_UNROLL_256 > 14) +#error "need more unrolling in Skein_256_Process_Block" +#endif + } + /* + * do the final "feedforward" xor, update context chaining vars + */ + ctx->X[0] = X0 ^ w[0]; + ctx->X[1] = X1 ^ w[1]; + ctx->X[2] = X2 ^ w[2]; + ctx->X[3] = X3 ^ w[3]; + + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); + + ts[1] &= ~SKEIN_T1_FLAG_FIRST; + } while (--blkCnt); + ctx->h.T[0] = ts[0]; + ctx->h.T[1] = ts[1]; +} + +#if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) +size_t +Skein_256_Process_Block_CodeSize(void) +{ + return ((uint8_t *)Skein_256_Process_Block_CodeSize) - + ((uint8_t *)Skein_256_Process_Block); +} + +uint_t +Skein_256_Unroll_Cnt(void) +{ + return (SKEIN_UNROLL_256); +} +#endif +#endif + +/* Skein_512 */ +#if !(SKEIN_USE_ASM & 512) +void +Skein_512_Process_Block(Skein_512_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd) +{ + enum { + WCNT = SKEIN_512_STATE_WORDS + }; +#undef RCNT +#define RCNT (SKEIN_512_ROUNDS_TOTAL / 8) + +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_512 (((SKEIN_LOOP) / 10) % 10) +#else +#define SKEIN_UNROLL_512 (0) +#endif + +#if SKEIN_UNROLL_512 +#if (RCNT % SKEIN_UNROLL_512) +#error "Invalid SKEIN_UNROLL_512" /* sanity check on unroll count */ +#endif + size_t r; + /* key schedule words : chaining vars + tweak + "rotation" */ + uint64_t kw[WCNT + 4 + RCNT * 2]; +#else + uint64_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ +#endif + /* local copy of vars, for speed */ + uint64_t X0, X1, X2, X3, X4, X5, X6, X7; + uint64_t w[WCNT]; /* local copy of input block */ +#ifdef SKEIN_DEBUG + /* use for debugging (help compiler put Xn in registers) */ + const uint64_t *Xptr[8]; + Xptr[0] = &X0; + Xptr[1] = &X1; + Xptr[2] = &X2; + Xptr[3] = &X3; + Xptr[4] = &X4; + Xptr[5] = &X5; + Xptr[6] = &X6; + Xptr[7] = &X7; +#endif + + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + ts[0] = ctx->h.T[0]; + ts[1] = ctx->h.T[1]; + do { + /* + * this implementation only supports 2**64 input bytes + * (no carry out here) + */ + ts[0] += byteCntAdd; /* update processed length */ + + /* precompute the key schedule for this block */ + ks[0] = ctx->X[0]; + ks[1] = ctx->X[1]; + ks[2] = ctx->X[2]; + ks[3] = ctx->X[3]; + ks[4] = ctx->X[4]; + ks[5] = ctx->X[5]; + ks[6] = ctx->X[6]; + ks[7] = ctx->X[7]; + ks[8] = ks[0] ^ ks[1] ^ ks[2] ^ ks[3] ^ + ks[4] ^ ks[5] ^ ks[6] ^ ks[7] ^ SKEIN_KS_PARITY; + + ts[2] = ts[0] ^ ts[1]; + + /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); + DebugSaveTweak(ctx); + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); + + X0 = w[0] + ks[0]; /* do the first full key injection */ + X1 = w[1] + ks[1]; + X2 = w[2] + ks[2]; + X3 = w[3] + ks[3]; + X4 = w[4] + ks[4]; + X5 = w[5] + ks[5] + ts[0]; + X6 = w[6] + ks[6] + ts[1]; + X7 = w[7] + ks[7]; + + blkPtr += SKEIN_512_BLOCK_BYTES; + + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, + Xptr); + /* run the rounds */ +#define Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + X##p0 += X##p1; X##p1 = RotL_64(X##p1, ROT##_0); X##p1 ^= X##p0;\ + X##p2 += X##p3; X##p3 = RotL_64(X##p3, ROT##_1); X##p3 ^= X##p2;\ + X##p4 += X##p5; X##p5 = RotL_64(X##p5, ROT##_2); X##p5 ^= X##p4;\ + X##p6 += X##p7; X##p7 = RotL_64(X##p7, ROT##_3); X##p7 ^= X##p6; + +#if SKEIN_UNROLL_512 == 0 +#define R512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) /* unrolled */ \ + Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rNum, Xptr); + +#define I512(R) \ + X0 += ks[((R) + 1) % 9]; /* inject the key schedule value */\ + X1 += ks[((R) + 2) % 9]; \ + X2 += ks[((R) + 3) % 9]; \ + X3 += ks[((R) + 4) % 9]; \ + X4 += ks[((R) + 5) % 9]; \ + X5 += ks[((R) + 6) % 9] + ts[((R) + 1) % 3]; \ + X6 += ks[((R) + 7) % 9] + ts[((R) + 2) % 3]; \ + X7 += ks[((R) + 8) % 9] + (R) + 1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Round512(p0, p1, p2, p3, p4, p5, p6, p7, ROT, rNum) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rNum, Xptr); + +#define I512(R) \ + X0 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X1 += ks[r + (R) + 1]; \ + X2 += ks[r + (R) + 2]; \ + X3 += ks[r + (R) + 3]; \ + X4 += ks[r + (R) + 4]; \ + X5 += ks[r + (R) + 5] + ts[r + (R) + 0]; \ + X6 += ks[r + (R) + 6] + ts[r + (R) + 1]; \ + X7 += ks[r + (R) + 7] + r + (R); \ + ks[r + (R)+8] = ks[r + (R) - 1]; /* rotate key schedule */\ + ts[r + (R)+2] = ts[r + (R) - 1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + /* loop thru it */ + for (r = 1; r < 2 * RCNT; r += 2 * SKEIN_UNROLL_512) +#endif /* end of looped code definitions */ + { +#define R512_8_rounds(R) /* do 8 full rounds */ \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_0, 8 * (R) + 1); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_1, 8 * (R) + 2); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_2, 8 * (R) + 3); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_3, 8 * (R) + 4); \ + I512(2 * (R)); \ + R512(0, 1, 2, 3, 4, 5, 6, 7, R_512_4, 8 * (R) + 5); \ + R512(2, 1, 4, 7, 6, 5, 0, 3, R_512_5, 8 * (R) + 6); \ + R512(4, 1, 6, 3, 0, 5, 2, 7, R_512_6, 8 * (R) + 7); \ + R512(6, 1, 0, 7, 2, 5, 4, 3, R_512_7, 8 * (R) + 8); \ + I512(2*(R) + 1); /* and key injection */ + + R512_8_rounds(0); + +#define R512_Unroll_R(NN) \ + ((SKEIN_UNROLL_512 == 0 && SKEIN_512_ROUNDS_TOTAL / 8 > (NN)) || \ + (SKEIN_UNROLL_512 > (NN))) + +#if R512_Unroll_R(1) + R512_8_rounds(1); +#endif +#if R512_Unroll_R(2) + R512_8_rounds(2); +#endif +#if R512_Unroll_R(3) + R512_8_rounds(3); +#endif +#if R512_Unroll_R(4) + R512_8_rounds(4); +#endif +#if R512_Unroll_R(5) + R512_8_rounds(5); +#endif +#if R512_Unroll_R(6) + R512_8_rounds(6); +#endif +#if R512_Unroll_R(7) + R512_8_rounds(7); +#endif +#if R512_Unroll_R(8) + R512_8_rounds(8); +#endif +#if R512_Unroll_R(9) + R512_8_rounds(9); +#endif +#if R512_Unroll_R(10) + R512_8_rounds(10); +#endif +#if R512_Unroll_R(11) + R512_8_rounds(11); +#endif +#if R512_Unroll_R(12) + R512_8_rounds(12); +#endif +#if R512_Unroll_R(13) + R512_8_rounds(13); +#endif +#if R512_Unroll_R(14) + R512_8_rounds(14); +#endif +#if (SKEIN_UNROLL_512 > 14) +#error "need more unrolling in Skein_512_Process_Block" +#endif + } + + /* + * do the final "feedforward" xor, update context chaining vars + */ + ctx->X[0] = X0 ^ w[0]; + ctx->X[1] = X1 ^ w[1]; + ctx->X[2] = X2 ^ w[2]; + ctx->X[3] = X3 ^ w[3]; + ctx->X[4] = X4 ^ w[4]; + ctx->X[5] = X5 ^ w[5]; + ctx->X[6] = X6 ^ w[6]; + ctx->X[7] = X7 ^ w[7]; + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); + + ts[1] &= ~SKEIN_T1_FLAG_FIRST; + } while (--blkCnt); + ctx->h.T[0] = ts[0]; + ctx->h.T[1] = ts[1]; +} + +#if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) +size_t +Skein_512_Process_Block_CodeSize(void) +{ + return ((uint8_t *)Skein_512_Process_Block_CodeSize) - + ((uint8_t *)Skein_512_Process_Block); +} + +uint_t +Skein_512_Unroll_Cnt(void) +{ + return (SKEIN_UNROLL_512); +} +#endif +#endif + +/* Skein1024 */ +#if !(SKEIN_USE_ASM & 1024) +void +Skein1024_Process_Block(Skein1024_Ctxt_t *ctx, const uint8_t *blkPtr, + size_t blkCnt, size_t byteCntAdd) +{ + /* do it in C, always looping (unrolled is bigger AND slower!) */ + enum { + WCNT = SKEIN1024_STATE_WORDS + }; +#undef RCNT +#define RCNT (SKEIN1024_ROUNDS_TOTAL/8) + +#ifdef SKEIN_LOOP /* configure how much to unroll the loop */ +#define SKEIN_UNROLL_1024 ((SKEIN_LOOP)%10) +#else +#define SKEIN_UNROLL_1024 (0) +#endif + +#if (SKEIN_UNROLL_1024 != 0) +#if (RCNT % SKEIN_UNROLL_1024) +#error "Invalid SKEIN_UNROLL_1024" /* sanity check on unroll count */ +#endif + size_t r; + /* key schedule words : chaining vars + tweak + "rotation" */ + uint64_t kw[WCNT + 4 + RCNT * 2]; +#else + uint64_t kw[WCNT + 4]; /* key schedule words : chaining vars + tweak */ +#endif + + /* local copy of vars, for speed */ + uint64_t X00, X01, X02, X03, X04, X05, X06, X07, X08, X09, X10, X11, + X12, X13, X14, X15; + uint64_t w[WCNT]; /* local copy of input block */ +#ifdef SKEIN_DEBUG + /* use for debugging (help compiler put Xn in registers) */ + const uint64_t *Xptr[16]; + Xptr[0] = &X00; + Xptr[1] = &X01; + Xptr[2] = &X02; + Xptr[3] = &X03; + Xptr[4] = &X04; + Xptr[5] = &X05; + Xptr[6] = &X06; + Xptr[7] = &X07; + Xptr[8] = &X08; + Xptr[9] = &X09; + Xptr[10] = &X10; + Xptr[11] = &X11; + Xptr[12] = &X12; + Xptr[13] = &X13; + Xptr[14] = &X14; + Xptr[15] = &X15; +#endif + + Skein_assert(blkCnt != 0); /* never call with blkCnt == 0! */ + ts[0] = ctx->h.T[0]; + ts[1] = ctx->h.T[1]; + do { + /* + * this implementation only supports 2**64 input bytes + * (no carry out here) + */ + ts[0] += byteCntAdd; /* update processed length */ + + /* precompute the key schedule for this block */ + ks[0] = ctx->X[0]; + ks[1] = ctx->X[1]; + ks[2] = ctx->X[2]; + ks[3] = ctx->X[3]; + ks[4] = ctx->X[4]; + ks[5] = ctx->X[5]; + ks[6] = ctx->X[6]; + ks[7] = ctx->X[7]; + ks[8] = ctx->X[8]; + ks[9] = ctx->X[9]; + ks[10] = ctx->X[10]; + ks[11] = ctx->X[11]; + ks[12] = ctx->X[12]; + ks[13] = ctx->X[13]; + ks[14] = ctx->X[14]; + ks[15] = ctx->X[15]; + ks[16] = ks[0] ^ ks[1] ^ ks[2] ^ ks[3] ^ + ks[4] ^ ks[5] ^ ks[6] ^ ks[7] ^ + ks[8] ^ ks[9] ^ ks[10] ^ ks[11] ^ + ks[12] ^ ks[13] ^ ks[14] ^ ks[15] ^ SKEIN_KS_PARITY; + + ts[2] = ts[0] ^ ts[1]; + + /* get input block in little-endian format */ + Skein_Get64_LSB_First(w, blkPtr, WCNT); + DebugSaveTweak(ctx); + Skein_Show_Block(BLK_BITS, &ctx->h, ctx->X, blkPtr, w, ks, ts); + + X00 = w[0] + ks[0]; /* do the first full key injection */ + X01 = w[1] + ks[1]; + X02 = w[2] + ks[2]; + X03 = w[3] + ks[3]; + X04 = w[4] + ks[4]; + X05 = w[5] + ks[5]; + X06 = w[6] + ks[6]; + X07 = w[7] + ks[7]; + X08 = w[8] + ks[8]; + X09 = w[9] + ks[9]; + X10 = w[10] + ks[10]; + X11 = w[11] + ks[11]; + X12 = w[12] + ks[12]; + X13 = w[13] + ks[13] + ts[0]; + X14 = w[14] + ks[14] + ts[1]; + X15 = w[15] + ks[15]; + + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INITIAL, + Xptr); + +#define Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, \ + pD, pE, pF, ROT, rNum) \ + X##p0 += X##p1; X##p1 = RotL_64(X##p1, ROT##_0); X##p1 ^= X##p0;\ + X##p2 += X##p3; X##p3 = RotL_64(X##p3, ROT##_1); X##p3 ^= X##p2;\ + X##p4 += X##p5; X##p5 = RotL_64(X##p5, ROT##_2); X##p5 ^= X##p4;\ + X##p6 += X##p7; X##p7 = RotL_64(X##p7, ROT##_3); X##p7 ^= X##p6;\ + X##p8 += X##p9; X##p9 = RotL_64(X##p9, ROT##_4); X##p9 ^= X##p8;\ + X##pA += X##pB; X##pB = RotL_64(X##pB, ROT##_5); X##pB ^= X##pA;\ + X##pC += X##pD; X##pD = RotL_64(X##pD, ROT##_6); X##pD ^= X##pC;\ + X##pE += X##pF; X##pF = RotL_64(X##pF, ROT##_7); X##pF ^= X##pE; + +#if SKEIN_UNROLL_1024 == 0 +#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, \ + pE, pF, ROT, rn) \ + Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, \ + pD, pE, pF, ROT, rn) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, rn, Xptr); + +#define I1024(R) \ + X00 += ks[((R) + 1) % 17]; /* inject the key schedule value */\ + X01 += ks[((R) + 2) % 17]; \ + X02 += ks[((R) + 3) % 17]; \ + X03 += ks[((R) + 4) % 17]; \ + X04 += ks[((R) + 5) % 17]; \ + X05 += ks[((R) + 6) % 17]; \ + X06 += ks[((R) + 7) % 17]; \ + X07 += ks[((R) + 8) % 17]; \ + X08 += ks[((R) + 9) % 17]; \ + X09 += ks[((R) + 10) % 17]; \ + X10 += ks[((R) + 11) % 17]; \ + X11 += ks[((R) + 12) % 17]; \ + X12 += ks[((R) + 13) % 17]; \ + X13 += ks[((R) + 14) % 17] + ts[((R) + 1) % 3]; \ + X14 += ks[((R) + 15) % 17] + ts[((R) + 2) % 3]; \ + X15 += ks[((R) + 16) % 17] + (R) +1; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); +#else /* looping version */ +#define R1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, pD, \ + pE, pF, ROT, rn) \ + Round1024(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, pA, pB, pC, \ + pD, pE, pF, ROT, rn) \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, 4 * (r - 1) + rn, Xptr); + +#define I1024(R) \ + X00 += ks[r + (R) + 0]; /* inject the key schedule value */ \ + X01 += ks[r + (R) + 1]; \ + X02 += ks[r + (R) + 2]; \ + X03 += ks[r + (R) + 3]; \ + X04 += ks[r + (R) + 4]; \ + X05 += ks[r + (R) + 5]; \ + X06 += ks[r + (R) + 6]; \ + X07 += ks[r + (R) + 7]; \ + X08 += ks[r + (R) + 8]; \ + X09 += ks[r + (R) + 9]; \ + X10 += ks[r + (R) + 10]; \ + X11 += ks[r + (R) + 11]; \ + X12 += ks[r + (R) + 12]; \ + X13 += ks[r + (R) + 13] + ts[r + (R) + 0]; \ + X14 += ks[r + (R) + 14] + ts[r + (R) + 1]; \ + X15 += ks[r + (R) + 15] + r + (R); \ + ks[r + (R) + 16] = ks[r + (R) - 1]; /* rotate key schedule */\ + ts[r + (R) + 2] = ts[r + (R) - 1]; \ + Skein_Show_R_Ptr(BLK_BITS, &ctx->h, SKEIN_RND_KEY_INJECT, Xptr); + + /* loop thru it */ + for (r = 1; r <= 2 * RCNT; r += 2 * SKEIN_UNROLL_1024) +#endif + { +#define R1024_8_rounds(R) /* do 8 full rounds */ \ + R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, \ + 14, 15, R1024_0, 8 * (R) + 1); \ + R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, 05, \ + 08, 01, R1024_1, 8 * (R) + 2); \ + R1024(00, 07, 02, 05, 04, 03, 06, 01, 12, 15, 14, 13, 08, 11, \ + 10, 09, R1024_2, 8 * (R) + 3); \ + R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, 03, \ + 12, 07, R1024_3, 8 * (R) + 4); \ + I1024(2 * (R)); \ + R1024(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, \ + 14, 15, R1024_4, 8 * (R) + 5); \ + R1024(00, 09, 02, 13, 06, 11, 04, 15, 10, 07, 12, 03, 14, 05, \ + 08, 01, R1024_5, 8 * (R) + 6); \ + R1024(00, 07, 02, 05, 04, 03, 06, 01, 12, 15, 14, 13, 08, 11, \ + 10, 09, R1024_6, 8 * (R) + 7); \ + R1024(00, 15, 02, 11, 06, 13, 04, 09, 14, 01, 08, 05, 10, 03, \ + 12, 07, R1024_7, 8 * (R) + 8); \ + I1024(2 * (R) + 1); + + R1024_8_rounds(0); + +#define R1024_Unroll_R(NN) \ + ((SKEIN_UNROLL_1024 == 0 && SKEIN1024_ROUNDS_TOTAL/8 > (NN)) || \ + (SKEIN_UNROLL_1024 > (NN))) + +#if R1024_Unroll_R(1) + R1024_8_rounds(1); +#endif +#if R1024_Unroll_R(2) + R1024_8_rounds(2); +#endif +#if R1024_Unroll_R(3) + R1024_8_rounds(3); +#endif +#if R1024_Unroll_R(4) + R1024_8_rounds(4); +#endif +#if R1024_Unroll_R(5) + R1024_8_rounds(5); +#endif +#if R1024_Unroll_R(6) + R1024_8_rounds(6); +#endif +#if R1024_Unroll_R(7) + R1024_8_rounds(7); +#endif +#if R1024_Unroll_R(8) + R1024_8_rounds(8); +#endif +#if R1024_Unroll_R(9) + R1024_8_rounds(9); +#endif +#if R1024_Unroll_R(10) + R1024_8_rounds(10); +#endif +#if R1024_Unroll_R(11) + R1024_8_rounds(11); +#endif +#if R1024_Unroll_R(12) + R1024_8_rounds(12); +#endif +#if R1024_Unroll_R(13) + R1024_8_rounds(13); +#endif +#if R1024_Unroll_R(14) + R1024_8_rounds(14); +#endif +#if (SKEIN_UNROLL_1024 > 14) +#error "need more unrolling in Skein_1024_Process_Block" +#endif + } + /* + * do the final "feedforward" xor, update context chaining vars + */ + + ctx->X[0] = X00 ^ w[0]; + ctx->X[1] = X01 ^ w[1]; + ctx->X[2] = X02 ^ w[2]; + ctx->X[3] = X03 ^ w[3]; + ctx->X[4] = X04 ^ w[4]; + ctx->X[5] = X05 ^ w[5]; + ctx->X[6] = X06 ^ w[6]; + ctx->X[7] = X07 ^ w[7]; + ctx->X[8] = X08 ^ w[8]; + ctx->X[9] = X09 ^ w[9]; + ctx->X[10] = X10 ^ w[10]; + ctx->X[11] = X11 ^ w[11]; + ctx->X[12] = X12 ^ w[12]; + ctx->X[13] = X13 ^ w[13]; + ctx->X[14] = X14 ^ w[14]; + ctx->X[15] = X15 ^ w[15]; + + Skein_Show_Round(BLK_BITS, &ctx->h, SKEIN_RND_FEED_FWD, ctx->X); + + ts[1] &= ~SKEIN_T1_FLAG_FIRST; + blkPtr += SKEIN1024_BLOCK_BYTES; + } while (--blkCnt); + ctx->h.T[0] = ts[0]; + ctx->h.T[1] = ts[1]; +} + +#if defined(SKEIN_CODE_SIZE) || defined(SKEIN_PERF) +size_t +Skein1024_Process_Block_CodeSize(void) +{ + return ((uint8_t *)Skein1024_Process_Block_CodeSize) - + ((uint8_t *)Skein1024_Process_Block); +} + +uint_t +Skein1024_Unroll_Cnt(void) +{ + return (SKEIN_UNROLL_1024); +} +#endif +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/algs/skein/skein_impl.h +++ linux-aws-4.15.0/zfs/module/icp/algs/skein/skein_impl.h @@ -0,0 +1,289 @@ +/* + * Internal definitions for Skein hashing. + * Source code author: Doug Whiting, 2008. + * This algorithm and source code is released to the public domain. + * + * The following compile-time switches may be defined to control some + * tradeoffs between speed, code size, error checking, and security. + * + * The "default" note explains what happens when the switch is not defined. + * + * SKEIN_DEBUG -- make callouts from inside Skein code + * to examine/display intermediate values. + * [default: no callouts (no overhead)] + * + * SKEIN_ERR_CHECK -- how error checking is handled inside Skein + * code. If not defined, most error checking + * is disabled (for performance). Otherwise, + * the switch value is interpreted as: + * 0: use assert() to flag errors + * 1: return SKEIN_FAIL to flag errors + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ + +#ifndef _SKEIN_IMPL_H_ +#define _SKEIN_IMPL_H_ + +#include +#include "skein_impl.h" +#include "skein_port.h" + +/* determine where we can get bcopy/bzero declarations */ +#ifdef _KERNEL +#include +#else +#include +#endif + +/* + * "Internal" Skein definitions + * -- not needed for sequential hashing API, but will be + * helpful for other uses of Skein (e.g., tree hash mode). + * -- included here so that they can be shared between + * reference and optimized code. + */ + +/* tweak word T[1]: bit field starting positions */ +/* offset 64 because it's the second word */ +#define SKEIN_T1_BIT(BIT) ((BIT) - 64) + +/* bits 112..118: level in hash tree */ +#define SKEIN_T1_POS_TREE_LVL SKEIN_T1_BIT(112) +/* bit 119: partial final input byte */ +#define SKEIN_T1_POS_BIT_PAD SKEIN_T1_BIT(119) +/* bits 120..125: type field */ +#define SKEIN_T1_POS_BLK_TYPE SKEIN_T1_BIT(120) +/* bits 126: first block flag */ +#define SKEIN_T1_POS_FIRST SKEIN_T1_BIT(126) +/* bit 127: final block flag */ +#define SKEIN_T1_POS_FINAL SKEIN_T1_BIT(127) + +/* tweak word T[1]: flag bit definition(s) */ +#define SKEIN_T1_FLAG_FIRST (((uint64_t)1) << SKEIN_T1_POS_FIRST) +#define SKEIN_T1_FLAG_FINAL (((uint64_t)1) << SKEIN_T1_POS_FINAL) +#define SKEIN_T1_FLAG_BIT_PAD (((uint64_t)1) << SKEIN_T1_POS_BIT_PAD) + +/* tweak word T[1]: tree level bit field mask */ +#define SKEIN_T1_TREE_LVL_MASK (((uint64_t)0x7F) << SKEIN_T1_POS_TREE_LVL) +#define SKEIN_T1_TREE_LEVEL(n) (((uint64_t)(n)) << SKEIN_T1_POS_TREE_LVL) + +/* tweak word T[1]: block type field */ +#define SKEIN_BLK_TYPE_KEY (0) /* key, for MAC and KDF */ +#define SKEIN_BLK_TYPE_CFG (4) /* configuration block */ +#define SKEIN_BLK_TYPE_PERS (8) /* personalization string */ +#define SKEIN_BLK_TYPE_PK (12) /* public key (for signature hashing) */ +#define SKEIN_BLK_TYPE_KDF (16) /* key identifier for KDF */ +#define SKEIN_BLK_TYPE_NONCE (20) /* nonce for PRNG */ +#define SKEIN_BLK_TYPE_MSG (48) /* message processing */ +#define SKEIN_BLK_TYPE_OUT (63) /* output stage */ +#define SKEIN_BLK_TYPE_MASK (63) /* bit field mask */ + +#define SKEIN_T1_BLK_TYPE(T) \ + (((uint64_t)(SKEIN_BLK_TYPE_##T)) << SKEIN_T1_POS_BLK_TYPE) +/* key, for MAC and KDF */ +#define SKEIN_T1_BLK_TYPE_KEY SKEIN_T1_BLK_TYPE(KEY) +/* configuration block */ +#define SKEIN_T1_BLK_TYPE_CFG SKEIN_T1_BLK_TYPE(CFG) +/* personalization string */ +#define SKEIN_T1_BLK_TYPE_PERS SKEIN_T1_BLK_TYPE(PERS) +/* public key (for digital signature hashing) */ +#define SKEIN_T1_BLK_TYPE_PK SKEIN_T1_BLK_TYPE(PK) +/* key identifier for KDF */ +#define SKEIN_T1_BLK_TYPE_KDF SKEIN_T1_BLK_TYPE(KDF) +/* nonce for PRNG */ +#define SKEIN_T1_BLK_TYPE_NONCE SKEIN_T1_BLK_TYPE(NONCE) +/* message processing */ +#define SKEIN_T1_BLK_TYPE_MSG SKEIN_T1_BLK_TYPE(MSG) +/* output stage */ +#define SKEIN_T1_BLK_TYPE_OUT SKEIN_T1_BLK_TYPE(OUT) +/* field bit mask */ +#define SKEIN_T1_BLK_TYPE_MASK SKEIN_T1_BLK_TYPE(MASK) + +#define SKEIN_T1_BLK_TYPE_CFG_FINAL \ + (SKEIN_T1_BLK_TYPE_CFG | SKEIN_T1_FLAG_FINAL) +#define SKEIN_T1_BLK_TYPE_OUT_FINAL \ + (SKEIN_T1_BLK_TYPE_OUT | SKEIN_T1_FLAG_FINAL) + +#define SKEIN_VERSION (1) + +#ifndef SKEIN_ID_STRING_LE /* allow compile-time personalization */ +#define SKEIN_ID_STRING_LE (0x33414853) /* "SHA3" (little-endian) */ +#endif + +#define SKEIN_MK_64(hi32, lo32) ((lo32) + (((uint64_t)(hi32)) << 32)) +#define SKEIN_SCHEMA_VER SKEIN_MK_64(SKEIN_VERSION, SKEIN_ID_STRING_LE) +#define SKEIN_KS_PARITY SKEIN_MK_64(0x1BD11BDA, 0xA9FC1A22) + +#define SKEIN_CFG_STR_LEN (4*8) + +/* bit field definitions in config block treeInfo word */ +#define SKEIN_CFG_TREE_LEAF_SIZE_POS (0) +#define SKEIN_CFG_TREE_NODE_SIZE_POS (8) +#define SKEIN_CFG_TREE_MAX_LEVEL_POS (16) + +#define SKEIN_CFG_TREE_LEAF_SIZE_MSK \ + (((uint64_t)0xFF) << SKEIN_CFG_TREE_LEAF_SIZE_POS) +#define SKEIN_CFG_TREE_NODE_SIZE_MSK \ + (((uint64_t)0xFF) << SKEIN_CFG_TREE_NODE_SIZE_POS) +#define SKEIN_CFG_TREE_MAX_LEVEL_MSK \ + (((uint64_t)0xFF) << SKEIN_CFG_TREE_MAX_LEVEL_POS) + +#define SKEIN_CFG_TREE_INFO(leaf, node, maxLvl) \ + ((((uint64_t)(leaf)) << SKEIN_CFG_TREE_LEAF_SIZE_POS) | \ + (((uint64_t)(node)) << SKEIN_CFG_TREE_NODE_SIZE_POS) | \ + (((uint64_t)(maxLvl)) << SKEIN_CFG_TREE_MAX_LEVEL_POS)) + +/* use as treeInfo in InitExt() call for sequential processing */ +#define SKEIN_CFG_TREE_INFO_SEQUENTIAL SKEIN_CFG_TREE_INFO(0, 0, 0) + +/* + * Skein macros for getting/setting tweak words, etc. + * These are useful for partial input bytes, hash tree init/update, etc. + */ +#define Skein_Get_Tweak(ctxPtr, TWK_NUM) ((ctxPtr)->h.T[TWK_NUM]) +#define Skein_Set_Tweak(ctxPtr, TWK_NUM, tVal) \ + do { \ + (ctxPtr)->h.T[TWK_NUM] = (tVal); \ + _NOTE(CONSTCOND) \ + } while (0) + +#define Skein_Get_T0(ctxPtr) Skein_Get_Tweak(ctxPtr, 0) +#define Skein_Get_T1(ctxPtr) Skein_Get_Tweak(ctxPtr, 1) +#define Skein_Set_T0(ctxPtr, T0) Skein_Set_Tweak(ctxPtr, 0, T0) +#define Skein_Set_T1(ctxPtr, T1) Skein_Set_Tweak(ctxPtr, 1, T1) + +/* set both tweak words at once */ +#define Skein_Set_T0_T1(ctxPtr, T0, T1) \ + do { \ + Skein_Set_T0(ctxPtr, (T0)); \ + Skein_Set_T1(ctxPtr, (T1)); \ + _NOTE(CONSTCOND) \ + } while (0) + +#define Skein_Set_Type(ctxPtr, BLK_TYPE) \ + Skein_Set_T1(ctxPtr, SKEIN_T1_BLK_TYPE_##BLK_TYPE) + +/* + * set up for starting with a new type: h.T[0]=0; h.T[1] = NEW_TYPE; h.bCnt=0; + */ +#define Skein_Start_New_Type(ctxPtr, BLK_TYPE) \ + do { \ + Skein_Set_T0_T1(ctxPtr, 0, SKEIN_T1_FLAG_FIRST | \ + SKEIN_T1_BLK_TYPE_ ## BLK_TYPE); \ + (ctxPtr)->h.bCnt = 0; \ + _NOTE(CONSTCOND) \ + } while (0) + +#define Skein_Clear_First_Flag(hdr) \ + do { \ + (hdr).T[1] &= ~SKEIN_T1_FLAG_FIRST; \ + _NOTE(CONSTCOND) \ + } while (0) +#define Skein_Set_Bit_Pad_Flag(hdr) \ + do { \ + (hdr).T[1] |= SKEIN_T1_FLAG_BIT_PAD; \ + _NOTE(CONSTCOND) \ + } while (0) + +#define Skein_Set_Tree_Level(hdr, height) \ + do { \ + (hdr).T[1] |= SKEIN_T1_TREE_LEVEL(height); \ + _NOTE(CONSTCOND) \ + } while (0) + +/* + * "Internal" Skein definitions for debugging and error checking + * Note: in Illumos we always disable debugging features. + */ +#define Skein_Show_Block(bits, ctx, X, blkPtr, wPtr, ksEvenPtr, ksOddPtr) +#define Skein_Show_Round(bits, ctx, r, X) +#define Skein_Show_R_Ptr(bits, ctx, r, X_ptr) +#define Skein_Show_Final(bits, ctx, cnt, outPtr) +#define Skein_Show_Key(bits, ctx, key, keyBytes) + +/* run-time checks (e.g., bad params, uninitialized context)? */ +#ifndef SKEIN_ERR_CHECK +/* default: ignore all Asserts, for performance */ +#define Skein_Assert(x, retCode) +#define Skein_assert(x) +#elif defined(SKEIN_ASSERT) +#include +#define Skein_Assert(x, retCode) ASSERT(x) +#define Skein_assert(x) ASSERT(x) +#else +#include +/* caller error */ +#define Skein_Assert(x, retCode) \ + do { \ + if (!(x)) \ + return (retCode); \ + _NOTE(CONSTCOND) \ + } while (0) +/* internal error */ +#define Skein_assert(x) ASSERT(x) +#endif + +/* + * Skein block function constants (shared across Ref and Opt code) + */ +enum { + /* Skein_256 round rotation constants */ + R_256_0_0 = 14, R_256_0_1 = 16, + R_256_1_0 = 52, R_256_1_1 = 57, + R_256_2_0 = 23, R_256_2_1 = 40, + R_256_3_0 = 5, R_256_3_1 = 37, + R_256_4_0 = 25, R_256_4_1 = 33, + R_256_5_0 = 46, R_256_5_1 = 12, + R_256_6_0 = 58, R_256_6_1 = 22, + R_256_7_0 = 32, R_256_7_1 = 32, + + /* Skein_512 round rotation constants */ + R_512_0_0 = 46, R_512_0_1 = 36, R_512_0_2 = 19, R_512_0_3 = 37, + R_512_1_0 = 33, R_512_1_1 = 27, R_512_1_2 = 14, R_512_1_3 = 42, + R_512_2_0 = 17, R_512_2_1 = 49, R_512_2_2 = 36, R_512_2_3 = 39, + R_512_3_0 = 44, R_512_3_1 = 9, R_512_3_2 = 54, R_512_3_3 = 56, + R_512_4_0 = 39, R_512_4_1 = 30, R_512_4_2 = 34, R_512_4_3 = 24, + R_512_5_0 = 13, R_512_5_1 = 50, R_512_5_2 = 10, R_512_5_3 = 17, + R_512_6_0 = 25, R_512_6_1 = 29, R_512_6_2 = 39, R_512_6_3 = 43, + R_512_7_0 = 8, R_512_7_1 = 35, R_512_7_2 = 56, R_512_7_3 = 22, + + /* Skein1024 round rotation constants */ + R1024_0_0 = 24, R1024_0_1 = 13, R1024_0_2 = 8, R1024_0_3 = + 47, R1024_0_4 = 8, R1024_0_5 = 17, R1024_0_6 = 22, R1024_0_7 = 37, + R1024_1_0 = 38, R1024_1_1 = 19, R1024_1_2 = 10, R1024_1_3 = + 55, R1024_1_4 = 49, R1024_1_5 = 18, R1024_1_6 = 23, R1024_1_7 = 52, + R1024_2_0 = 33, R1024_2_1 = 4, R1024_2_2 = 51, R1024_2_3 = + 13, R1024_2_4 = 34, R1024_2_5 = 41, R1024_2_6 = 59, R1024_2_7 = 17, + R1024_3_0 = 5, R1024_3_1 = 20, R1024_3_2 = 48, R1024_3_3 = + 41, R1024_3_4 = 47, R1024_3_5 = 28, R1024_3_6 = 16, R1024_3_7 = 25, + R1024_4_0 = 41, R1024_4_1 = 9, R1024_4_2 = 37, R1024_4_3 = + 31, R1024_4_4 = 12, R1024_4_5 = 47, R1024_4_6 = 44, R1024_4_7 = 30, + R1024_5_0 = 16, R1024_5_1 = 34, R1024_5_2 = 56, R1024_5_3 = + 51, R1024_5_4 = 4, R1024_5_5 = 53, R1024_5_6 = 42, R1024_5_7 = 41, + R1024_6_0 = 31, R1024_6_1 = 44, R1024_6_2 = 47, R1024_6_3 = + 46, R1024_6_4 = 19, R1024_6_5 = 42, R1024_6_6 = 44, R1024_6_7 = 25, + R1024_7_0 = 9, R1024_7_1 = 48, R1024_7_2 = 35, R1024_7_3 = + 52, R1024_7_4 = 23, R1024_7_5 = 31, R1024_7_6 = 37, R1024_7_7 = 20 +}; + +/* number of rounds for the different block sizes */ +#define SKEIN_256_ROUNDS_TOTAL (72) +#define SKEIN_512_ROUNDS_TOTAL (72) +#define SKEIN1024_ROUNDS_TOTAL (80) + + +extern const uint64_t SKEIN_256_IV_128[]; +extern const uint64_t SKEIN_256_IV_160[]; +extern const uint64_t SKEIN_256_IV_224[]; +extern const uint64_t SKEIN_256_IV_256[]; +extern const uint64_t SKEIN_512_IV_128[]; +extern const uint64_t SKEIN_512_IV_160[]; +extern const uint64_t SKEIN_512_IV_224[]; +extern const uint64_t SKEIN_512_IV_256[]; +extern const uint64_t SKEIN_512_IV_384[]; +extern const uint64_t SKEIN_512_IV_512[]; +extern const uint64_t SKEIN1024_IV_384[]; +extern const uint64_t SKEIN1024_IV_512[]; +extern const uint64_t SKEIN1024_IV_1024[]; + +#endif /* _SKEIN_IMPL_H_ */ --- linux-aws-4.15.0.orig/zfs/module/icp/algs/skein/skein_iv.c +++ linux-aws-4.15.0/zfs/module/icp/algs/skein/skein_iv.c @@ -0,0 +1,185 @@ +/* + * Pre-computed Skein IVs + * + * NOTE: these values are not "magic" constants, but + * are generated using the Threefish block function. + * They are pre-computed here only for speed; i.e., to + * avoid the need for a Threefish call during Init(). + * + * The IV for any fixed hash length may be pre-computed. + * Only the most common values are included here. + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ +/* + * Illumos implementation note: these constants are for Skein v1.3 as per: + * http://www.skein-hash.info/sites/default/files/skein1.3.pdf + */ + +#include /* get Skein macros and types */ +#include "skein_impl.h" /* get internal definitions */ + +#define MK_64 SKEIN_MK_64 + +/* blkSize = 256 bits. hashSize = 128 bits */ +const uint64_t SKEIN_256_IV_128[] = { + MK_64(0xE1111906, 0x964D7260), + MK_64(0x883DAAA7, 0x7C8D811C), + MK_64(0x10080DF4, 0x91960F7A), + MK_64(0xCCF7DDE5, 0xB45BC1C2) +}; + +/* blkSize = 256 bits. hashSize = 160 bits */ +const uint64_t SKEIN_256_IV_160[] = { + MK_64(0x14202314, 0x72825E98), + MK_64(0x2AC4E9A2, 0x5A77E590), + MK_64(0xD47A5856, 0x8838D63E), + MK_64(0x2DD2E496, 0x8586AB7D) +}; + +/* blkSize = 256 bits. hashSize = 224 bits */ +const uint64_t SKEIN_256_IV_224[] = { + MK_64(0xC6098A8C, 0x9AE5EA0B), + MK_64(0x876D5686, 0x08C5191C), + MK_64(0x99CB88D7, 0xD7F53884), + MK_64(0x384BDDB1, 0xAEDDB5DE) +}; + +/* blkSize = 256 bits. hashSize = 256 bits */ +const uint64_t SKEIN_256_IV_256[] = { + MK_64(0xFC9DA860, 0xD048B449), + MK_64(0x2FCA6647, 0x9FA7D833), + MK_64(0xB33BC389, 0x6656840F), + MK_64(0x6A54E920, 0xFDE8DA69) +}; + +/* blkSize = 512 bits. hashSize = 128 bits */ +const uint64_t SKEIN_512_IV_128[] = { + MK_64(0xA8BC7BF3, 0x6FBF9F52), + MK_64(0x1E9872CE, 0xBD1AF0AA), + MK_64(0x309B1790, 0xB32190D3), + MK_64(0xBCFBB854, 0x3F94805C), + MK_64(0x0DA61BCD, 0x6E31B11B), + MK_64(0x1A18EBEA, 0xD46A32E3), + MK_64(0xA2CC5B18, 0xCE84AA82), + MK_64(0x6982AB28, 0x9D46982D) +}; + +/* blkSize = 512 bits. hashSize = 160 bits */ +const uint64_t SKEIN_512_IV_160[] = { + MK_64(0x28B81A2A, 0xE013BD91), + MK_64(0xC2F11668, 0xB5BDF78F), + MK_64(0x1760D8F3, 0xF6A56F12), + MK_64(0x4FB74758, 0x8239904F), + MK_64(0x21EDE07F, 0x7EAF5056), + MK_64(0xD908922E, 0x63ED70B8), + MK_64(0xB8EC76FF, 0xECCB52FA), + MK_64(0x01A47BB8, 0xA3F27A6E) +}; + +/* blkSize = 512 bits. hashSize = 224 bits */ +const uint64_t SKEIN_512_IV_224[] = { + MK_64(0xCCD06162, 0x48677224), + MK_64(0xCBA65CF3, 0xA92339EF), + MK_64(0x8CCD69D6, 0x52FF4B64), + MK_64(0x398AED7B, 0x3AB890B4), + MK_64(0x0F59D1B1, 0x457D2BD0), + MK_64(0x6776FE65, 0x75D4EB3D), + MK_64(0x99FBC70E, 0x997413E9), + MK_64(0x9E2CFCCF, 0xE1C41EF7) +}; + +/* blkSize = 512 bits. hashSize = 256 bits */ +const uint64_t SKEIN_512_IV_256[] = { + MK_64(0xCCD044A1, 0x2FDB3E13), + MK_64(0xE8359030, 0x1A79A9EB), + MK_64(0x55AEA061, 0x4F816E6F), + MK_64(0x2A2767A4, 0xAE9B94DB), + MK_64(0xEC06025E, 0x74DD7683), + MK_64(0xE7A436CD, 0xC4746251), + MK_64(0xC36FBAF9, 0x393AD185), + MK_64(0x3EEDBA18, 0x33EDFC13) +}; + +/* blkSize = 512 bits. hashSize = 384 bits */ +const uint64_t SKEIN_512_IV_384[] = { + MK_64(0xA3F6C6BF, 0x3A75EF5F), + MK_64(0xB0FEF9CC, 0xFD84FAA4), + MK_64(0x9D77DD66, 0x3D770CFE), + MK_64(0xD798CBF3, 0xB468FDDA), + MK_64(0x1BC4A666, 0x8A0E4465), + MK_64(0x7ED7D434, 0xE5807407), + MK_64(0x548FC1AC, 0xD4EC44D6), + MK_64(0x266E1754, 0x6AA18FF8) +}; + +/* blkSize = 512 bits. hashSize = 512 bits */ +const uint64_t SKEIN_512_IV_512[] = { + MK_64(0x4903ADFF, 0x749C51CE), + MK_64(0x0D95DE39, 0x9746DF03), + MK_64(0x8FD19341, 0x27C79BCE), + MK_64(0x9A255629, 0xFF352CB1), + MK_64(0x5DB62599, 0xDF6CA7B0), + MK_64(0xEABE394C, 0xA9D5C3F4), + MK_64(0x991112C7, 0x1A75B523), + MK_64(0xAE18A40B, 0x660FCC33) +}; + +/* blkSize = 1024 bits. hashSize = 384 bits */ +const uint64_t SKEIN1024_IV_384[] = { + MK_64(0x5102B6B8, 0xC1894A35), + MK_64(0xFEEBC9E3, 0xFE8AF11A), + MK_64(0x0C807F06, 0xE32BED71), + MK_64(0x60C13A52, 0xB41A91F6), + MK_64(0x9716D35D, 0xD4917C38), + MK_64(0xE780DF12, 0x6FD31D3A), + MK_64(0x797846B6, 0xC898303A), + MK_64(0xB172C2A8, 0xB3572A3B), + MK_64(0xC9BC8203, 0xA6104A6C), + MK_64(0x65909338, 0xD75624F4), + MK_64(0x94BCC568, 0x4B3F81A0), + MK_64(0x3EBBF51E, 0x10ECFD46), + MK_64(0x2DF50F0B, 0xEEB08542), + MK_64(0x3B5A6530, 0x0DBC6516), + MK_64(0x484B9CD2, 0x167BBCE1), + MK_64(0x2D136947, 0xD4CBAFEA) +}; + +/* blkSize = 1024 bits. hashSize = 512 bits */ +const uint64_t SKEIN1024_IV_512[] = { + MK_64(0xCAEC0E5D, 0x7C1B1B18), + MK_64(0xA01B0E04, 0x5F03E802), + MK_64(0x33840451, 0xED912885), + MK_64(0x374AFB04, 0xEAEC2E1C), + MK_64(0xDF25A0E2, 0x813581F7), + MK_64(0xE4004093, 0x8B12F9D2), + MK_64(0xA662D539, 0xC2ED39B6), + MK_64(0xFA8B85CF, 0x45D8C75A), + MK_64(0x8316ED8E, 0x29EDE796), + MK_64(0x053289C0, 0x2E9F91B8), + MK_64(0xC3F8EF1D, 0x6D518B73), + MK_64(0xBDCEC3C4, 0xD5EF332E), + MK_64(0x549A7E52, 0x22974487), + MK_64(0x67070872, 0x5B749816), + MK_64(0xB9CD28FB, 0xF0581BD1), + MK_64(0x0E2940B8, 0x15804974) +}; + +/* blkSize = 1024 bits. hashSize = 1024 bits */ +const uint64_t SKEIN1024_IV_1024[] = { + MK_64(0xD593DA07, 0x41E72355), + MK_64(0x15B5E511, 0xAC73E00C), + MK_64(0x5180E5AE, 0xBAF2C4F0), + MK_64(0x03BD41D3, 0xFCBCAFAF), + MK_64(0x1CAEC6FD, 0x1983A898), + MK_64(0x6E510B8B, 0xCDD0589F), + MK_64(0x77E2BDFD, 0xC6394ADA), + MK_64(0xC11E1DB5, 0x24DCB0A3), + MK_64(0xD6D14AF9, 0xC6329AB5), + MK_64(0x6A9B0BFC, 0x6EB67E0D), + MK_64(0x9243C60D, 0xCCFF1332), + MK_64(0x1A1F1DDE, 0x743F02D4), + MK_64(0x0996753C, 0x10ED0BB8), + MK_64(0x6572DD22, 0xF2B4969A), + MK_64(0x61FD3062, 0xD00A579A), + MK_64(0x1DE0536E, 0x8682E539) +}; --- linux-aws-4.15.0.orig/zfs/module/icp/algs/skein/skein_port.h +++ linux-aws-4.15.0/zfs/module/icp/algs/skein/skein_port.h @@ -0,0 +1,128 @@ +/* + * Platform-specific definitions for Skein hash function. + * + * Source code author: Doug Whiting, 2008. + * + * This algorithm and source code is released to the public domain. + * + * Many thanks to Brian Gladman for his portable header files. + * + * To port Skein to an "unsupported" platform, change the definitions + * in this file appropriately. + */ +/* Copyright 2013 Doug Whiting. This code is released to the public domain. */ + +#ifndef _SKEIN_PORT_H_ +#define _SKEIN_PORT_H_ + +#include /* get integer type definitions */ +#include /* for bcopy() */ + +#ifndef RotL_64 +#define RotL_64(x, N) (((x) << (N)) | ((x) >> (64 - (N)))) +#endif + +/* + * Skein is "natively" little-endian (unlike SHA-xxx), for optimal + * performance on x86 CPUs. The Skein code requires the following + * definitions for dealing with endianness: + * + * SKEIN_NEED_SWAP: 0 for little-endian, 1 for big-endian + * Skein_Put64_LSB_First + * Skein_Get64_LSB_First + * Skein_Swap64 + * + * If SKEIN_NEED_SWAP is defined at compile time, it is used here + * along with the portable versions of Put64/Get64/Swap64, which + * are slow in general. + * + * Otherwise, an "auto-detect" of endianness is attempted below. + * If the default handling doesn't work well, the user may insert + * platform-specific code instead (e.g., for big-endian CPUs). + * + */ +#ifndef SKEIN_NEED_SWAP /* compile-time "override" for endianness? */ + +#include /* get endianness selection */ + +#define PLATFORM_MUST_ALIGN _ALIGNMENT_REQUIRED +#if defined(_BIG_ENDIAN) +/* here for big-endian CPUs */ +#define SKEIN_NEED_SWAP (1) +#else +/* here for x86 and x86-64 CPUs (and other detected little-endian CPUs) */ +#define SKEIN_NEED_SWAP (0) +#if PLATFORM_MUST_ALIGN == 0 /* ok to use "fast" versions? */ +#define Skein_Put64_LSB_First(dst08, src64, bCnt) bcopy(src64, dst08, bCnt) +#define Skein_Get64_LSB_First(dst64, src08, wCnt) \ + bcopy(src08, dst64, 8 * (wCnt)) +#endif +#endif + +#endif /* ifndef SKEIN_NEED_SWAP */ + +/* + * Provide any definitions still needed. + */ +#ifndef Skein_Swap64 /* swap for big-endian, nop for little-endian */ +#if SKEIN_NEED_SWAP +#define Skein_Swap64(w64) \ + (((((uint64_t)(w64)) & 0xFF) << 56) | \ + (((((uint64_t)(w64)) >> 8) & 0xFF) << 48) | \ + (((((uint64_t)(w64)) >> 16) & 0xFF) << 40) | \ + (((((uint64_t)(w64)) >> 24) & 0xFF) << 32) | \ + (((((uint64_t)(w64)) >> 32) & 0xFF) << 24) | \ + (((((uint64_t)(w64)) >> 40) & 0xFF) << 16) | \ + (((((uint64_t)(w64)) >> 48) & 0xFF) << 8) | \ + (((((uint64_t)(w64)) >> 56) & 0xFF))) +#else +#define Skein_Swap64(w64) (w64) +#endif +#endif /* ifndef Skein_Swap64 */ + +#ifndef Skein_Put64_LSB_First +void +Skein_Put64_LSB_First(uint8_t *dst, const uint64_t *src, size_t bCnt) +#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ +{ + /* + * this version is fully portable (big-endian or little-endian), + * but slow + */ + size_t n; + + for (n = 0; n < bCnt; n++) + dst[n] = (uint8_t)(src[n >> 3] >> (8 * (n & 7))); +} +#else +; /* output only the function prototype */ +#endif +#endif /* ifndef Skein_Put64_LSB_First */ + +#ifndef Skein_Get64_LSB_First +void +Skein_Get64_LSB_First(uint64_t *dst, const uint8_t *src, size_t wCnt) +#ifdef SKEIN_PORT_CODE /* instantiate the function code here? */ +{ + /* + * this version is fully portable (big-endian or little-endian), + * but slow + */ + size_t n; + + for (n = 0; n < 8 * wCnt; n += 8) + dst[n / 8] = (((uint64_t)src[n])) + + (((uint64_t)src[n + 1]) << 8) + + (((uint64_t)src[n + 2]) << 16) + + (((uint64_t)src[n + 3]) << 24) + + (((uint64_t)src[n + 4]) << 32) + + (((uint64_t)src[n + 5]) << 40) + + (((uint64_t)src[n + 6]) << 48) + + (((uint64_t)src[n + 7]) << 56); +} +#else +; /* output only the function prototype */ +#endif +#endif /* ifndef Skein_Get64_LSB_First */ + +#endif /* _SKEIN_PORT_H_ */ --- linux-aws-4.15.0.orig/zfs/module/icp/api/kcf_cipher.c +++ linux-aws-4.15.0/zfs/module/icp/api/kcf_cipher.c @@ -0,0 +1,935 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include + +#define CRYPTO_OPS_OFFSET(f) offsetof(crypto_ops_t, co_##f) +#define CRYPTO_CIPHER_OFFSET(f) offsetof(crypto_cipher_ops_t, f) + +/* + * Encryption and decryption routines. + */ + +/* + * The following are the possible returned values common to all the routines + * below. The applicability of some of these return values depends on the + * presence of the arguments. + * + * CRYPTO_SUCCESS: The operation completed successfully. + * CRYPTO_QUEUED: A request was submitted successfully. The callback + * routine will be called when the operation is done. + * CRYPTO_INVALID_MECH_NUMBER, CRYPTO_INVALID_MECH_PARAM, or + * CRYPTO_INVALID_MECH for problems with the 'mech'. + * CRYPTO_INVALID_DATA for bogus 'data' + * CRYPTO_HOST_MEMORY for failure to allocate memory to handle this work. + * CRYPTO_INVALID_CONTEXT: Not a valid context. + * CRYPTO_BUSY: Cannot process the request now. Schedule a + * crypto_bufcall(), or try later. + * CRYPTO_NOT_SUPPORTED and CRYPTO_MECH_NOT_SUPPORTED: No provider is + * capable of a function or a mechanism. + * CRYPTO_INVALID_KEY: bogus 'key' argument. + * CRYPTO_INVALID_PLAINTEXT: bogus 'plaintext' argument. + * CRYPTO_INVALID_CIPHERTEXT: bogus 'ciphertext' argument. + */ + +/* + * crypto_cipher_init_prov() + * + * Arguments: + * + * pd: provider descriptor + * sid: session id + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * tmpl: a crypto_ctx_template_t, opaque template of a context of an + * encryption or decryption with the 'mech' using 'key'. + * 'tmpl' is created by a previous call to + * crypto_create_ctx_template(). + * ctxp: Pointer to a crypto_context_t. + * func: CRYPTO_FG_ENCRYPT or CRYPTO_FG_DECRYPT. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * This is a common function invoked internally by both + * crypto_encrypt_init() and crypto_decrypt_init(). + * Asynchronously submits a request for, or synchronously performs the + * initialization of an encryption or a decryption operation. + * When possible and applicable, will internally use the pre-expanded key + * schedule from the context template, tmpl. + * When complete and successful, 'ctxp' will contain a crypto_context_t + * valid for later calls to encrypt_update() and encrypt_final(), or + * decrypt_update() and decrypt_final(). + * The caller should hold a reference on the specified provider + * descriptor before calling this function. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +static int +crypto_cipher_init_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_key_t *key, + crypto_spi_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq, crypto_func_group_t func) +{ + int error; + crypto_ctx_t *ctx; + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + if (func == CRYPTO_FG_ENCRYPT) { + error = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_ENCRYPT); + } else { + error = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_DECRYPT); + } + + if (error != CRYPTO_SUCCESS) + return (error); + } + + /* Allocate and initialize the canonical context */ + if ((ctx = kcf_new_ctx(crq, real_provider, sid)) == NULL) { + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + return (CRYPTO_HOST_MEMORY); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, real_provider, &lmech); + + if (func == CRYPTO_FG_ENCRYPT) + error = KCF_PROV_ENCRYPT_INIT(real_provider, ctx, + &lmech, key, tmpl, KCF_SWFP_RHNDL(crq)); + else { + ASSERT(func == CRYPTO_FG_DECRYPT); + + error = KCF_PROV_DECRYPT_INIT(real_provider, ctx, + &lmech, key, tmpl, KCF_SWFP_RHNDL(crq)); + } + KCF_PROV_INCRSTATS(pd, error); + + goto done; + } + + /* Check if context sharing is possible */ + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + key->ck_format == CRYPTO_KEY_RAW && + KCF_CAN_SHARE_OPSTATE(pd, mech->cm_type)) { + kcf_context_t *tctxp = (kcf_context_t *)ctx; + kcf_provider_desc_t *tpd = NULL; + crypto_mech_info_t *sinfo; + + if ((kcf_get_sw_prov(mech->cm_type, &tpd, &tctxp->kc_mech, + B_FALSE) == CRYPTO_SUCCESS)) { + int tlen; + + sinfo = &(KCF_TO_PROV_MECHINFO(tpd, mech->cm_type)); + /* + * key->ck_length from the consumer is always in bits. + * We convert it to be in the same unit registered by + * the provider in order to do a comparison. + */ + if (sinfo->cm_mech_flags & CRYPTO_KEYSIZE_UNIT_IN_BYTES) + tlen = key->ck_length >> 3; + else + tlen = key->ck_length; + /* + * Check if the software provider can support context + * sharing and support this key length. + */ + if ((sinfo->cm_mech_flags & CRYPTO_CAN_SHARE_OPSTATE) && + (tlen >= sinfo->cm_min_key_length) && + (tlen <= sinfo->cm_max_key_length)) { + ctx->cc_flags = CRYPTO_INIT_OPSTATE; + tctxp->kc_sw_prov_desc = tpd; + } else + KCF_PROV_REFRELE(tpd); + } + } + + if (func == CRYPTO_FG_ENCRYPT) { + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_INIT, sid, + mech, key, NULL, NULL, tmpl); + } else { + ASSERT(func == CRYPTO_FG_DECRYPT); + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_INIT, sid, + mech, key, NULL, NULL, tmpl); + } + + error = kcf_submit_request(real_provider, ctx, crq, ¶ms, + B_FALSE); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + +done: + if ((error == CRYPTO_SUCCESS) || (error == CRYPTO_QUEUED)) + *ctxp = (crypto_context_t)ctx; + else { + /* Release the hold done in kcf_new_ctx(). */ + KCF_CONTEXT_REFRELE((kcf_context_t *)ctx->cc_framework_private); + } + + return (error); +} + +/* + * Same as crypto_cipher_init_prov(), but relies on the scheduler to pick + * an appropriate provider. See crypto_cipher_init_prov() comments for more + * details. + */ +static int +crypto_cipher_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq, crypto_func_group_t func) +{ + int error; + kcf_mech_entry_t *me; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, func, CHECK_RESTRICT(crq), 0)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + error = crypto_cipher_init_prov(pd, pd->pd_sid, mech, key, + spi_ctx_tmpl, ctxp, crq, func); + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_encrypt_prov() + * + * Arguments: + * pd: provider descriptor + * sid: session id + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * plaintext: The message to be encrypted + * ciphertext: Storage for the encrypted message. The length needed + * depends on the mechanism, and the plaintext's size. + * tmpl: a crypto_ctx_template_t, opaque template of a context of an + * encryption with the 'mech' using 'key'. 'tmpl' is created by + * a previous call to crypto_create_ctx_template(). + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * single-part encryption of 'plaintext' with the mechanism 'mech', using + * the key 'key'. + * When complete and successful, 'ciphertext' will contain the encrypted + * message. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_encrypt_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_data_t *plaintext, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_data_t *ciphertext, + crypto_call_req_t *crq) +{ + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + int error; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + error = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_ENCRYPT_ATOMIC); + + if (error != CRYPTO_SUCCESS) + return (error); + } + + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, sid, mech, key, + plaintext, ciphertext, tmpl); + + error = kcf_submit_request(real_provider, NULL, crq, ¶ms, B_FALSE); + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + return (error); +} + +/* + * Same as crypto_encrypt_prov(), but relies on the scheduler to pick + * a provider. See crypto_encrypt_prov() for more details. + */ +int +crypto_encrypt(crypto_mechanism_t *mech, crypto_data_t *plaintext, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *ciphertext, + crypto_call_req_t *crq) +{ + int error; + kcf_mech_entry_t *me; + kcf_req_params_t params; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, CRYPTO_FG_ENCRYPT_ATOMIC, CHECK_RESTRICT(crq), + plaintext->cd_length)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); + + error = KCF_PROV_ENCRYPT_ATOMIC(pd, pd->pd_sid, &lmech, key, + plaintext, ciphertext, spi_ctx_tmpl, KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, pd->pd_sid, + mech, key, plaintext, ciphertext, spi_ctx_tmpl); + error = kcf_submit_request(pd, NULL, crq, ¶ms, B_FALSE); + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_encrypt_init_prov() + * + * Calls crypto_cipher_init_prov() to initialize an encryption operation. + */ +int +crypto_encrypt_init_prov(crypto_provider_t pd, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + return (crypto_cipher_init_prov(pd, sid, mech, key, tmpl, ctxp, crq, + CRYPTO_FG_ENCRYPT)); +} + +/* + * crypto_encrypt_init() + * + * Calls crypto_cipher_init() to initialize an encryption operation + */ +int +crypto_encrypt_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + return (crypto_cipher_init(mech, key, tmpl, ctxp, crq, + CRYPTO_FG_ENCRYPT)); +} + +/* + * crypto_encrypt_update() + * + * Arguments: + * context: A crypto_context_t initialized by encrypt_init(). + * plaintext: The message part to be encrypted + * ciphertext: Storage for the encrypted message part. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * part of an encryption operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_encrypt_update(crypto_context_t context, crypto_data_t *plaintext, + crypto_data_t *ciphertext, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_ENCRYPT_UPDATE(pd, ctx, plaintext, + ciphertext, NULL); + KCF_PROV_INCRSTATS(pd, error); + return (error); + } + + /* Check if we should use a software provider for small jobs */ + if ((ctx->cc_flags & CRYPTO_USE_OPSTATE) && cr == NULL) { + if (plaintext->cd_length < kcf_ctx->kc_mech->me_threshold && + kcf_ctx->kc_sw_prov_desc != NULL && + KCF_IS_PROV_USABLE(kcf_ctx->kc_sw_prov_desc)) { + pd = kcf_ctx->kc_sw_prov_desc; + } + } + + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_UPDATE, + ctx->cc_session, NULL, NULL, plaintext, ciphertext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + + return (error); +} + +/* + * crypto_encrypt_final() + * + * Arguments: + * context: A crypto_context_t initialized by encrypt_init(). + * ciphertext: Storage for the last part of encrypted message + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * final part of an encryption operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_encrypt_final(crypto_context_t context, crypto_data_t *ciphertext, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_ENCRYPT_FINAL(pd, ctx, ciphertext, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_FINAL, + ctx->cc_session, NULL, NULL, NULL, ciphertext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +/* + * crypto_decrypt_prov() + * + * Arguments: + * pd: provider descriptor + * sid: session id + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * ciphertext: The message to be encrypted + * plaintext: Storage for the encrypted message. The length needed + * depends on the mechanism, and the plaintext's size. + * tmpl: a crypto_ctx_template_t, opaque template of a context of an + * encryption with the 'mech' using 'key'. 'tmpl' is created by + * a previous call to crypto_create_ctx_template(). + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * single-part decryption of 'ciphertext' with the mechanism 'mech', using + * the key 'key'. + * When complete and successful, 'plaintext' will contain the decrypted + * message. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_decrypt_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_data_t *ciphertext, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_data_t *plaintext, + crypto_call_req_t *crq) +{ + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + int rv; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + rv = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_DECRYPT_ATOMIC); + + if (rv != CRYPTO_SUCCESS) + return (rv); + } + + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, sid, mech, key, + ciphertext, plaintext, tmpl); + + rv = kcf_submit_request(real_provider, NULL, crq, ¶ms, B_FALSE); + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + return (rv); +} + +/* + * Same as crypto_decrypt_prov(), but relies on the KCF scheduler to + * choose a provider. See crypto_decrypt_prov() comments for more + * information. + */ +int +crypto_decrypt(crypto_mechanism_t *mech, crypto_data_t *ciphertext, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *plaintext, + crypto_call_req_t *crq) +{ + int error; + kcf_mech_entry_t *me; + kcf_req_params_t params; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, CRYPTO_FG_DECRYPT_ATOMIC, CHECK_RESTRICT(crq), + ciphertext->cd_length)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); + + error = KCF_PROV_DECRYPT_ATOMIC(pd, pd->pd_sid, &lmech, key, + ciphertext, plaintext, spi_ctx_tmpl, KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, pd->pd_sid, + mech, key, ciphertext, plaintext, spi_ctx_tmpl); + error = kcf_submit_request(pd, NULL, crq, ¶ms, B_FALSE); + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_decrypt_init_prov() + * + * Calls crypto_cipher_init_prov() to initialize a decryption operation + */ +int +crypto_decrypt_init_prov(crypto_provider_t pd, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + return (crypto_cipher_init_prov(pd, sid, mech, key, tmpl, ctxp, crq, + CRYPTO_FG_DECRYPT)); +} + +/* + * crypto_decrypt_init() + * + * Calls crypto_cipher_init() to initialize a decryption operation + */ +int +crypto_decrypt_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + return (crypto_cipher_init(mech, key, tmpl, ctxp, crq, + CRYPTO_FG_DECRYPT)); +} + +/* + * crypto_decrypt_update() + * + * Arguments: + * context: A crypto_context_t initialized by decrypt_init(). + * ciphertext: The message part to be decrypted + * plaintext: Storage for the decrypted message part. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * part of an decryption operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_decrypt_update(crypto_context_t context, crypto_data_t *ciphertext, + crypto_data_t *plaintext, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DECRYPT_UPDATE(pd, ctx, ciphertext, + plaintext, NULL); + KCF_PROV_INCRSTATS(pd, error); + return (error); + } + + /* Check if we should use a software provider for small jobs */ + if ((ctx->cc_flags & CRYPTO_USE_OPSTATE) && cr == NULL) { + if (ciphertext->cd_length < kcf_ctx->kc_mech->me_threshold && + kcf_ctx->kc_sw_prov_desc != NULL && + KCF_IS_PROV_USABLE(kcf_ctx->kc_sw_prov_desc)) { + pd = kcf_ctx->kc_sw_prov_desc; + } + } + + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_UPDATE, + ctx->cc_session, NULL, NULL, ciphertext, plaintext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + + return (error); +} + +/* + * crypto_decrypt_final() + * + * Arguments: + * context: A crypto_context_t initialized by decrypt_init(). + * plaintext: Storage for the last part of the decrypted message + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * final part of a decryption operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_decrypt_final(crypto_context_t context, crypto_data_t *plaintext, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DECRYPT_FINAL(pd, ctx, plaintext, + NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_FINAL, + ctx->cc_session, NULL, NULL, NULL, plaintext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +/* + * See comments for crypto_encrypt_update(). + */ +int +crypto_encrypt_single(crypto_context_t context, crypto_data_t *plaintext, + crypto_data_t *ciphertext, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_ENCRYPT(pd, ctx, plaintext, + ciphertext, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_ENCRYPT_OPS_PARAMS(¶ms, KCF_OP_SINGLE, pd->pd_sid, + NULL, NULL, plaintext, ciphertext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +/* + * See comments for crypto_decrypt_update(). + */ +int +crypto_decrypt_single(crypto_context_t context, crypto_data_t *ciphertext, + crypto_data_t *plaintext, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DECRYPT(pd, ctx, ciphertext, + plaintext, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DECRYPT_OPS_PARAMS(¶ms, KCF_OP_SINGLE, pd->pd_sid, + NULL, NULL, ciphertext, plaintext, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(crypto_cipher_init_prov); +EXPORT_SYMBOL(crypto_cipher_init); +EXPORT_SYMBOL(crypto_encrypt_prov); +EXPORT_SYMBOL(crypto_encrypt); +EXPORT_SYMBOL(crypto_encrypt_init_prov); +EXPORT_SYMBOL(crypto_encrypt_init); +EXPORT_SYMBOL(crypto_encrypt_update); +EXPORT_SYMBOL(crypto_encrypt_final); +EXPORT_SYMBOL(crypto_decrypt_prov); +EXPORT_SYMBOL(crypto_decrypt); +EXPORT_SYMBOL(crypto_decrypt_init_prov); +EXPORT_SYMBOL(crypto_decrypt_init); +EXPORT_SYMBOL(crypto_decrypt_update); +EXPORT_SYMBOL(crypto_decrypt_final); +EXPORT_SYMBOL(crypto_encrypt_single); +EXPORT_SYMBOL(crypto_decrypt_single); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/api/kcf_ctxops.c +++ linux-aws-4.15.0/zfs/module/icp/api/kcf_ctxops.c @@ -0,0 +1,151 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Crypto contexts manipulation routines + */ + +/* + * crypto_create_ctx_template() + * + * Arguments: + * + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * ptmpl: a storage for the opaque crypto_ctx_template_t, allocated and + * initialized by the software provider this routine is + * dispatched to. + * kmflag: KM_SLEEP/KM_NOSLEEP mem. alloc. flag. + * + * Description: + * Redirects the call to the software provider of the specified + * mechanism. That provider will allocate and pre-compute/pre-expand + * the context template, reusable by later calls to crypto_xxx_init(). + * The size and address of that provider context template are stored + * in an internal structure, kcf_ctx_template_t. The address of that + * structure is given back to the caller in *ptmpl. + * + * Context: + * Process or interrupt. + * + * Returns: + * CRYPTO_SUCCESS when the context template is successfully created. + * CRYPTO_HOST_MEMEORY: mem alloc failure + * CRYPTO_ARGUMENTS_BAD: NULL storage for the ctx template. + * RYPTO_MECHANISM_INVALID: invalid mechanism 'mech'. + */ +int +crypto_create_ctx_template(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t *ptmpl, int kmflag) +{ + int error; + kcf_mech_entry_t *me; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_mechanism_t prov_mech; + + /* A few args validation */ + + if (ptmpl == NULL) + return (CRYPTO_ARGUMENTS_BAD); + + if (mech == NULL) + return (CRYPTO_MECHANISM_INVALID); + + error = kcf_get_sw_prov(mech->cm_type, &pd, &me, B_TRUE); + if (error != CRYPTO_SUCCESS) + return (error); + + if ((ctx_tmpl = (kcf_ctx_template_t *)kmem_alloc( + sizeof (kcf_ctx_template_t), kmflag)) == NULL) { + KCF_PROV_REFRELE(pd); + return (CRYPTO_HOST_MEMORY); + } + + /* Pass a mechtype that the provider understands */ + prov_mech.cm_type = KCF_TO_PROV_MECHNUM(pd, mech->cm_type); + prov_mech.cm_param = mech->cm_param; + prov_mech.cm_param_len = mech->cm_param_len; + + error = KCF_PROV_CREATE_CTX_TEMPLATE(pd, &prov_mech, key, + &(ctx_tmpl->ct_prov_tmpl), &(ctx_tmpl->ct_size), KCF_RHNDL(kmflag)); + + if (error == CRYPTO_SUCCESS) { + ctx_tmpl->ct_generation = me->me_gen_swprov; + *ptmpl = ctx_tmpl; + } else { + kmem_free(ctx_tmpl, sizeof (kcf_ctx_template_t)); + } + KCF_PROV_REFRELE(pd); + + return (error); +} + +/* + * crypto_destroy_ctx_template() + * + * Arguments: + * + * tmpl: an opaque crypto_ctx_template_t previously created by + * crypto_create_ctx_template() + * + * Description: + * Frees the inbedded crypto_spi_ctx_template_t, then the + * kcf_ctx_template_t. + * + * Context: + * Process or interrupt. + * + */ +void +crypto_destroy_ctx_template(crypto_ctx_template_t tmpl) +{ + kcf_ctx_template_t *ctx_tmpl = (kcf_ctx_template_t *)tmpl; + + if (ctx_tmpl == NULL) + return; + + ASSERT(ctx_tmpl->ct_prov_tmpl != NULL); + + bzero(ctx_tmpl->ct_prov_tmpl, ctx_tmpl->ct_size); + kmem_free(ctx_tmpl->ct_prov_tmpl, ctx_tmpl->ct_size); + kmem_free(ctx_tmpl, sizeof (kcf_ctx_template_t)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(crypto_create_ctx_template); +EXPORT_SYMBOL(crypto_destroy_ctx_template); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/api/kcf_digest.c +++ linux-aws-4.15.0/zfs/module/icp/api/kcf_digest.c @@ -0,0 +1,494 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include + +#define CRYPTO_OPS_OFFSET(f) offsetof(crypto_ops_t, co_##f) +#define CRYPTO_DIGEST_OFFSET(f) offsetof(crypto_digest_ops_t, f) + +/* + * Message digest routines + */ + +/* + * The following are the possible returned values common to all the routines + * below. The applicability of some of these return values depends on the + * presence of the arguments. + * + * CRYPTO_SUCCESS: The operation completed successfully. + * CRYPTO_QUEUED: A request was submitted successfully. The callback + * routine will be called when the operation is done. + * CRYPTO_MECHANISM_INVALID or CRYPTO_INVALID_MECH_PARAM + * for problems with the 'mech'. + * CRYPTO_INVALID_DATA for bogus 'data' + * CRYPTO_HOST_MEMORY for failure to allocate memory to handle this work. + * CRYPTO_INVALID_CONTEXT: Not a valid context. + * CRYPTO_BUSY: Cannot process the request now. Schedule a + * crypto_bufcall(), or try later. + * CRYPTO_NOT_SUPPORTED and CRYPTO_MECH_NOT_SUPPORTED: + * No provider is capable of a function or a mechanism. + */ + + +/* + * crypto_digest_prov() + * + * Arguments: + * pd: pointer to the descriptor of the provider to use for this + * operation. + * sid: provider session id. + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * data: The message to be digested. + * digest: Storage for the digest. The length needed depends on the + * mechanism. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * digesting operation of 'data' on the specified + * provider with the specified session. + * When complete and successful, 'digest' will contain the digest value. + * The caller should hold a reference on the specified provider + * descriptor before calling this function. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_digest_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_data_t *data, crypto_data_t *digest, + crypto_call_req_t *crq) +{ + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + int rv; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + rv = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), + pd, &real_provider, CRYPTO_FG_DIGEST_ATOMIC); + + if (rv != CRYPTO_SUCCESS) + return (rv); + } + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, sid, mech, NULL, + data, digest); + + /* no crypto context to carry between multiple parts. */ + rv = kcf_submit_request(real_provider, NULL, crq, ¶ms, B_FALSE); + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + return (rv); +} + + +/* + * Same as crypto_digest_prov(), but relies on the KCF scheduler to + * choose a provider. See crypto_digest_prov() comments for more information. + */ +int +crypto_digest(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_data_t *digest, crypto_call_req_t *crq) +{ + int error; + kcf_provider_desc_t *pd; + kcf_req_params_t params; + kcf_prov_tried_t *list = NULL; + +retry: + /* The pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, NULL, &error, list, + CRYPTO_FG_DIGEST_ATOMIC, CHECK_RESTRICT(crq), + data->cd_length)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); + error = KCF_PROV_DIGEST_ATOMIC(pd, pd->pd_sid, &lmech, data, + digest, KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + (pd->pd_flags & CRYPTO_HASH_NO_UPDATE) && + (data->cd_length > pd->pd_hash_limit)) { + error = CRYPTO_BUFFER_TOO_BIG; + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, + pd->pd_sid, mech, NULL, data, digest); + + /* no crypto context to carry between multiple parts. */ + error = kcf_submit_request(pd, NULL, crq, ¶ms, + B_FALSE); + } + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_digest_init_prov() + * + * pd: pointer to the descriptor of the provider to use for this + * operation. + * sid: provider session id. + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * ctxp: Pointer to a crypto_context_t. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * initialization of a message digest operation on the specified + * provider with the specified session. + * When complete and successful, 'ctxp' will contain a crypto_context_t + * valid for later calls to digest_update() and digest_final(). + * The caller should hold a reference on the specified provider + * descriptor before calling this function. + */ +int +crypto_digest_init_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_context_t *ctxp, crypto_call_req_t *crq) +{ + int error; + crypto_ctx_t *ctx; + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + error = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_DIGEST); + + if (error != CRYPTO_SUCCESS) + return (error); + } + + /* Allocate and initialize the canonical context */ + if ((ctx = kcf_new_ctx(crq, real_provider, sid)) == NULL) { + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + return (CRYPTO_HOST_MEMORY); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, real_provider, &lmech); + error = KCF_PROV_DIGEST_INIT(real_provider, ctx, &lmech, + KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_INIT, sid, + mech, NULL, NULL, NULL); + error = kcf_submit_request(real_provider, ctx, crq, ¶ms, + B_FALSE); + } + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + if ((error == CRYPTO_SUCCESS) || (error == CRYPTO_QUEUED)) + *ctxp = (crypto_context_t)ctx; + else { + /* Release the hold done in kcf_new_ctx(). */ + KCF_CONTEXT_REFRELE((kcf_context_t *)ctx->cc_framework_private); + } + + return (error); +} + +/* + * Same as crypto_digest_init_prov(), but relies on the KCF scheduler + * to choose a provider. See crypto_digest_init_prov() comments for + * more information. + */ +int +crypto_digest_init(crypto_mechanism_t *mech, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + int error; + kcf_provider_desc_t *pd; + kcf_prov_tried_t *list = NULL; + +retry: + /* The pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, NULL, &error, + list, CRYPTO_FG_DIGEST, CHECK_RESTRICT(crq), 0)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + (pd->pd_flags & CRYPTO_HASH_NO_UPDATE)) { + /* + * The hardware provider has limited digest support. + * So, we fallback early here to using a software provider. + * + * XXX - need to enhance to do the fallback later in + * crypto_digest_update() if the size of accumulated input data + * exceeds the maximum size digestable by hardware provider. + */ + error = CRYPTO_BUFFER_TOO_BIG; + } else { + error = crypto_digest_init_prov(pd, pd->pd_sid, + mech, ctxp, crq); + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_digest_update() + * + * Arguments: + * context: A crypto_context_t initialized by digest_init(). + * data: The part of message to be digested. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * part of a message digest operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_digest_update(crypto_context_t context, crypto_data_t *data, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DIGEST_UPDATE(pd, ctx, data, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_UPDATE, + ctx->cc_session, NULL, NULL, data, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + return (error); +} + +/* + * crypto_digest_final() + * + * Arguments: + * context: A crypto_context_t initialized by digest_init(). + * digest: The storage for the digest. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * final part of a message digest operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_digest_final(crypto_context_t context, crypto_data_t *digest, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DIGEST_FINAL(pd, ctx, digest, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_FINAL, + ctx->cc_session, NULL, NULL, NULL, digest); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +/* + * Performs a digest update on the specified key. Note that there is + * no k-API crypto_digest_key() equivalent of this function. + */ +int +crypto_digest_key_prov(crypto_context_t context, crypto_key_t *key, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DIGEST_KEY(pd, ctx, key, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_DIGEST_KEY, + ctx->cc_session, NULL, key, NULL, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + return (error); +} + +/* + * See comments for crypto_digest_update() and crypto_digest_final(). + */ +int +crypto_digest_single(crypto_context_t context, crypto_data_t *data, + crypto_data_t *digest, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_DIGEST(pd, ctx, data, digest, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_SINGLE, pd->pd_sid, + NULL, NULL, data, digest); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(crypto_digest_prov); +EXPORT_SYMBOL(crypto_digest); +EXPORT_SYMBOL(crypto_digest_init_prov); +EXPORT_SYMBOL(crypto_digest_init); +EXPORT_SYMBOL(crypto_digest_update); +EXPORT_SYMBOL(crypto_digest_final); +EXPORT_SYMBOL(crypto_digest_key_prov); +EXPORT_SYMBOL(crypto_digest_single); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/api/kcf_mac.c +++ linux-aws-4.15.0/zfs/module/icp/api/kcf_mac.c @@ -0,0 +1,648 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include + +#define CRYPTO_OPS_OFFSET(f) offsetof(crypto_ops_t, co_##f) +#define CRYPTO_MAC_OFFSET(f) offsetof(crypto_mac_ops_t, f) + +/* + * Message authentication codes routines. + */ + +/* + * The following are the possible returned values common to all the routines + * below. The applicability of some of these return values depends on the + * presence of the arguments. + * + * CRYPTO_SUCCESS: The operation completed successfully. + * CRYPTO_QUEUED: A request was submitted successfully. The callback + * routine will be called when the operation is done. + * CRYPTO_INVALID_MECH_NUMBER, CRYPTO_INVALID_MECH_PARAM, or + * CRYPTO_INVALID_MECH for problems with the 'mech'. + * CRYPTO_INVALID_DATA for bogus 'data' + * CRYPTO_HOST_MEMORY for failure to allocate memory to handle this work. + * CRYPTO_INVALID_CONTEXT: Not a valid context. + * CRYPTO_BUSY: Cannot process the request now. Schedule a + * crypto_bufcall(), or try later. + * CRYPTO_NOT_SUPPORTED and CRYPTO_MECH_NOT_SUPPORTED: No provider is + * capable of a function or a mechanism. + * CRYPTO_INVALID_KEY: bogus 'key' argument. + * CRYPTO_INVALID_MAC: bogus 'mac' argument. + */ + +/* + * crypto_mac_prov() + * + * Arguments: + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * data: The message to compute the MAC for. + * mac: Storage for the MAC. The length needed depends on the mechanism. + * tmpl: a crypto_ctx_template_t, opaque template of a context of a + * MAC with the 'mech' using 'key'. 'tmpl' is created by + * a previous call to crypto_create_ctx_template(). + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * single-part message authentication of 'data' with the mechanism + * 'mech', using * the key 'key', on the specified provider with + * the specified session id. + * When complete and successful, 'mac' will contain the message + * authentication code. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'crq'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_mac_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_data_t *data, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_data_t *mac, crypto_call_req_t *crq) +{ + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + int rv; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + rv = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_MAC_ATOMIC); + + if (rv != CRYPTO_SUCCESS) + return (rv); + } + + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, sid, mech, key, + data, mac, tmpl); + rv = kcf_submit_request(real_provider, NULL, crq, ¶ms, B_FALSE); + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + return (rv); +} + +/* + * Same as crypto_mac_prov(), but relies on the KCF scheduler to choose + * a provider. See crypto_mac() comments for more information. + */ +int +crypto_mac(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *mac, + crypto_call_req_t *crq) +{ + int error; + kcf_mech_entry_t *me; + kcf_req_params_t params; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* The pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, CRYPTO_FG_MAC_ATOMIC, CHECK_RESTRICT(crq), + data->cd_length)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); + + error = KCF_PROV_MAC_ATOMIC(pd, pd->pd_sid, &lmech, key, data, + mac, spi_ctx_tmpl, KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + (pd->pd_flags & CRYPTO_HASH_NO_UPDATE) && + (data->cd_length > pd->pd_hash_limit)) { + /* + * XXX - We need a check to see if this is indeed + * a HMAC. So far, all kernel clients use + * this interface only for HMAC. So, this is fine + * for now. + */ + error = CRYPTO_BUFFER_TOO_BIG; + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, + pd->pd_sid, mech, key, data, mac, spi_ctx_tmpl); + + error = kcf_submit_request(pd, NULL, crq, ¶ms, + KCF_ISDUALREQ(crq)); + } + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * Single part operation to compute the MAC corresponding to the specified + * 'data' and to verify that it matches the MAC specified by 'mac'. + * The other arguments are the same as the function crypto_mac_prov(). + */ +int +crypto_mac_verify_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_data_t *data, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_data_t *mac, crypto_call_req_t *crq) +{ + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + int rv; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + rv = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_MAC_ATOMIC); + + if (rv != CRYPTO_SUCCESS) + return (rv); + } + + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_MAC_VERIFY_ATOMIC, sid, mech, + key, data, mac, tmpl); + rv = kcf_submit_request(real_provider, NULL, crq, ¶ms, B_FALSE); + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + return (rv); +} + +/* + * Same as crypto_mac_verify_prov(), but relies on the KCF scheduler to choose + * a provider. See crypto_mac_verify_prov() comments for more information. + */ +int +crypto_mac_verify(crypto_mechanism_t *mech, crypto_data_t *data, + crypto_key_t *key, crypto_ctx_template_t tmpl, crypto_data_t *mac, + crypto_call_req_t *crq) +{ + int error; + kcf_mech_entry_t *me; + kcf_req_params_t params; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* The pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, CRYPTO_FG_MAC_ATOMIC, CHECK_RESTRICT(crq), + data->cd_length)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); + + error = KCF_PROV_MAC_VERIFY_ATOMIC(pd, pd->pd_sid, &lmech, key, + data, mac, spi_ctx_tmpl, KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, error); + } else { + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + (pd->pd_flags & CRYPTO_HASH_NO_UPDATE) && + (data->cd_length > pd->pd_hash_limit)) { + /* see comments in crypto_mac() */ + error = CRYPTO_BUFFER_TOO_BIG; + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, + KCF_OP_MAC_VERIFY_ATOMIC, pd->pd_sid, mech, + key, data, mac, spi_ctx_tmpl); + + error = kcf_submit_request(pd, NULL, crq, ¶ms, + KCF_ISDUALREQ(crq)); + } + } + + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_mac_init_prov() + * + * Arguments: + * pd: pointer to the descriptor of the provider to use for this + * operation. + * sid: provider session id. + * mech: crypto_mechanism_t pointer. + * mech_type is a valid value previously returned by + * crypto_mech2id(); + * When the mech's parameter is not NULL, its definition depends + * on the standard definition of the mechanism. + * key: pointer to a crypto_key_t structure. + * tmpl: a crypto_ctx_template_t, opaque template of a context of a + * MAC with the 'mech' using 'key'. 'tmpl' is created by + * a previous call to crypto_create_ctx_template(). + * ctxp: Pointer to a crypto_context_t. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs the + * initialization of a MAC operation on the specified provider with + * the specified session. + * When possible and applicable, will internally use the pre-computed MAC + * context from the context template, tmpl. + * When complete and successful, 'ctxp' will contain a crypto_context_t + * valid for later calls to mac_update() and mac_final(). + * The caller should hold a reference on the specified provider + * descriptor before calling this function. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_mac_init_prov(crypto_provider_t provider, crypto_session_id_t sid, + crypto_mechanism_t *mech, crypto_key_t *key, crypto_spi_ctx_template_t tmpl, + crypto_context_t *ctxp, crypto_call_req_t *crq) +{ + int rv; + crypto_ctx_t *ctx; + kcf_req_params_t params; + kcf_provider_desc_t *pd = provider; + kcf_provider_desc_t *real_provider = pd; + + ASSERT(KCF_PROV_REFHELD(pd)); + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + rv = kcf_get_hardware_provider(mech->cm_type, + CRYPTO_MECH_INVALID, CHECK_RESTRICT(crq), pd, + &real_provider, CRYPTO_FG_MAC); + + if (rv != CRYPTO_SUCCESS) + return (rv); + } + + /* Allocate and initialize the canonical context */ + if ((ctx = kcf_new_ctx(crq, real_provider, sid)) == NULL) { + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + return (CRYPTO_HOST_MEMORY); + } + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(crq, pd)) { + crypto_mechanism_t lmech; + + lmech = *mech; + KCF_SET_PROVIDER_MECHNUM(mech->cm_type, real_provider, &lmech); + rv = KCF_PROV_MAC_INIT(real_provider, ctx, &lmech, key, tmpl, + KCF_SWFP_RHNDL(crq)); + KCF_PROV_INCRSTATS(pd, rv); + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_INIT, sid, mech, key, + NULL, NULL, tmpl); + rv = kcf_submit_request(real_provider, ctx, crq, ¶ms, + B_FALSE); + } + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) + KCF_PROV_REFRELE(real_provider); + + if ((rv == CRYPTO_SUCCESS) || (rv == CRYPTO_QUEUED)) + *ctxp = (crypto_context_t)ctx; + else { + /* Release the hold done in kcf_new_ctx(). */ + KCF_CONTEXT_REFRELE((kcf_context_t *)ctx->cc_framework_private); + } + + return (rv); +} + +/* + * Same as crypto_mac_init_prov(), but relies on the KCF scheduler to + * choose a provider. See crypto_mac_init_prov() comments for more + * information. + */ +int +crypto_mac_init(crypto_mechanism_t *mech, crypto_key_t *key, + crypto_ctx_template_t tmpl, crypto_context_t *ctxp, + crypto_call_req_t *crq) +{ + int error; + kcf_mech_entry_t *me; + kcf_provider_desc_t *pd; + kcf_ctx_template_t *ctx_tmpl; + crypto_spi_ctx_template_t spi_ctx_tmpl = NULL; + kcf_prov_tried_t *list = NULL; + +retry: + /* The pd is returned held */ + if ((pd = kcf_get_mech_provider(mech->cm_type, &me, &error, + list, CRYPTO_FG_MAC, CHECK_RESTRICT(crq), 0)) == NULL) { + if (list != NULL) + kcf_free_triedlist(list); + return (error); + } + + /* + * For SW providers, check the validity of the context template + * It is very rare that the generation number mis-matches, so + * is acceptable to fail here, and let the consumer recover by + * freeing this tmpl and create a new one for the key and new SW + * provider + */ + + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + ((ctx_tmpl = (kcf_ctx_template_t *)tmpl) != NULL)) { + if (ctx_tmpl->ct_generation != me->me_gen_swprov) { + if (list != NULL) + kcf_free_triedlist(list); + KCF_PROV_REFRELE(pd); + return (CRYPTO_OLD_CTX_TEMPLATE); + } else { + spi_ctx_tmpl = ctx_tmpl->ct_prov_tmpl; + } + } + + if (pd->pd_prov_type == CRYPTO_HW_PROVIDER && + (pd->pd_flags & CRYPTO_HASH_NO_UPDATE)) { + /* + * The hardware provider has limited HMAC support. + * So, we fallback early here to using a software provider. + * + * XXX - need to enhance to do the fallback later in + * crypto_mac_update() if the size of accumulated input data + * exceeds the maximum size digestable by hardware provider. + */ + error = CRYPTO_BUFFER_TOO_BIG; + } else { + error = crypto_mac_init_prov(pd, pd->pd_sid, mech, key, + spi_ctx_tmpl, ctxp, crq); + } + if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && + IS_RECOVERABLE(error)) { + /* Add pd to the linked list of providers tried. */ + if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) + goto retry; + } + + if (list != NULL) + kcf_free_triedlist(list); + + KCF_PROV_REFRELE(pd); + return (error); +} + +/* + * crypto_mac_update() + * + * Arguments: + * context: A crypto_context_t initialized by mac_init(). + * data: The message part to be MAC'ed + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * part of a MAC operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_mac_update(crypto_context_t context, crypto_data_t *data, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + kcf_req_params_t params; + int rv; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + rv = KCF_PROV_MAC_UPDATE(pd, ctx, data, NULL); + KCF_PROV_INCRSTATS(pd, rv); + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_UPDATE, + ctx->cc_session, NULL, NULL, data, NULL, NULL); + rv = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + return (rv); +} + +/* + * crypto_mac_final() + * + * Arguments: + * context: A crypto_context_t initialized by mac_init(). + * mac: Storage for the message authentication code. + * cr: crypto_call_req_t calling conditions and call back info. + * + * Description: + * Asynchronously submits a request for, or synchronously performs a + * part of a message authentication operation. + * + * Context: + * Process or interrupt, according to the semantics dictated by the 'cr'. + * + * Returns: + * See comment in the beginning of the file. + */ +int +crypto_mac_final(crypto_context_t context, crypto_data_t *mac, + crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + kcf_req_params_t params; + int rv; + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + ASSERT(pd->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + rv = KCF_PROV_MAC_FINAL(pd, ctx, mac, NULL); + KCF_PROV_INCRSTATS(pd, rv); + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_FINAL, + ctx->cc_session, NULL, NULL, NULL, mac, NULL); + rv = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(rv, kcf_ctx); + return (rv); +} + +/* + * See comments for crypto_mac_update() and crypto_mac_final(). + */ +int +crypto_mac_single(crypto_context_t context, crypto_data_t *data, + crypto_data_t *mac, crypto_call_req_t *cr) +{ + crypto_ctx_t *ctx = (crypto_ctx_t *)context; + kcf_context_t *kcf_ctx; + kcf_provider_desc_t *pd; + int error; + kcf_req_params_t params; + + + if ((ctx == NULL) || + ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || + ((pd = kcf_ctx->kc_prov_desc) == NULL)) { + return (CRYPTO_INVALID_CONTEXT); + } + + + /* The fast path for SW providers. */ + if (CHECK_FASTPATH(cr, pd)) { + error = KCF_PROV_MAC(pd, ctx, data, mac, NULL); + KCF_PROV_INCRSTATS(pd, error); + } else { + KCF_WRAP_MAC_OPS_PARAMS(¶ms, KCF_OP_SINGLE, pd->pd_sid, + NULL, NULL, data, mac, NULL); + error = kcf_submit_request(pd, ctx, cr, ¶ms, B_FALSE); + } + + /* Release the hold done in kcf_new_ctx() during init step. */ + KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); + return (error); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(crypto_mac_prov); +EXPORT_SYMBOL(crypto_mac); +EXPORT_SYMBOL(crypto_mac_verify_prov); +EXPORT_SYMBOL(crypto_mac_verify); +EXPORT_SYMBOL(crypto_mac_init_prov); +EXPORT_SYMBOL(crypto_mac_init); +EXPORT_SYMBOL(crypto_mac_update); +EXPORT_SYMBOL(crypto_mac_final); +EXPORT_SYMBOL(crypto_mac_single); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/api/kcf_miscapi.c +++ linux-aws-4.15.0/zfs/module/icp/api/kcf_miscapi.c @@ -0,0 +1,127 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include + +/* + * All event subscribers are put on a list. kcf_notify_list_lock + * protects changes to this list. + * + * The following locking order is maintained in the code - The + * global kcf_notify_list_lock followed by the individual lock + * in a kcf_ntfy_elem structure (kn_lock). + */ +kmutex_t ntfy_list_lock; +kcondvar_t ntfy_list_cv; /* cv the service thread waits on */ +static kcf_ntfy_elem_t *ntfy_list_head; + +/* + * crypto_mech2id() + * + * Arguments: + * . mechname: A null-terminated string identifying the mechanism name. + * + * Description: + * Walks the mechanisms tables, looking for an entry that matches the + * mechname. Once it find it, it builds the 64-bit mech_type and returns + * it. If there are no hardware or software providers for the mechanism, + * but there is an unloaded software provider, this routine will attempt + * to load it. + * + * Context: + * Process and interruption. + * + * Returns: + * The unique mechanism identified by 'mechname', if found. + * CRYPTO_MECH_INVALID otherwise. + */ +crypto_mech_type_t +crypto_mech2id(char *mechname) +{ + return (crypto_mech2id_common(mechname, B_TRUE)); +} + +/* + * We walk the notification list and do the callbacks. + */ +void +kcf_walk_ntfylist(uint32_t event, void *event_arg) +{ + kcf_ntfy_elem_t *nep; + int nelem = 0; + + mutex_enter(&ntfy_list_lock); + + /* + * Count how many clients are on the notification list. We need + * this count to ensure that clients which joined the list after we + * have started this walk, are not wrongly notified. + */ + for (nep = ntfy_list_head; nep != NULL; nep = nep->kn_next) + nelem++; + + for (nep = ntfy_list_head; (nep != NULL && nelem); nep = nep->kn_next) { + nelem--; + + /* + * Check if this client is interested in the + * event. + */ + if (!(nep->kn_event_mask & event)) + continue; + + mutex_enter(&nep->kn_lock); + nep->kn_state = NTFY_RUNNING; + mutex_exit(&nep->kn_lock); + mutex_exit(&ntfy_list_lock); + + /* + * We invoke the callback routine with no locks held. Another + * client could have joined the list meanwhile. This is fine + * as we maintain nelem as stated above. The NULL check in the + * for loop guards against shrinkage. Also, any callers of + * crypto_unnotify_events() at this point cv_wait till kn_state + * changes to NTFY_WAITING. Hence, nep is assured to be valid. + */ + (*nep->kn_func)(event, event_arg); + + mutex_enter(&nep->kn_lock); + nep->kn_state = NTFY_WAITING; + cv_broadcast(&nep->kn_cv); + mutex_exit(&nep->kn_lock); + + mutex_enter(&ntfy_list_lock); + } + + mutex_exit(&ntfy_list_lock); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(crypto_mech2id); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aes_amd64.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aes_amd64.S @@ -0,0 +1,906 @@ +/* + * --------------------------------------------------------------------------- + * Copyright (c) 1998-2007, Brian Gladman, Worcester, UK. All rights reserved. + * + * LICENSE TERMS + * + * The free distribution and use of this software is allowed (with or without + * changes) provided that: + * + * 1. source code distributions include the above copyright notice, this + * list of conditions and the following disclaimer; + * + * 2. binary distributions include the above copyright notice, this list + * of conditions and the following disclaimer in their documentation; + * + * 3. the name of the copyright holder is not used to endorse products + * built using this software without specific written permission. + * + * DISCLAIMER + * + * This software is provided 'as is' with no explicit or implied warranties + * in respect of its properties, including, but not limited to, correctness + * and/or fitness for purpose. + * --------------------------------------------------------------------------- + * Issue 20/12/2007 + * + * I am grateful to Dag Arne Osvik for many discussions of the techniques that + * can be used to optimise AES assembler code on AMD64/EM64T architectures. + * Some of the techniques used in this implementation are the result of + * suggestions made by him for which I am most grateful. + * + * An AES implementation for AMD64 processors using the YASM assembler. This + * implementation provides only encryption, decryption and hence requires key + * scheduling support in C. It uses 8k bytes of tables but its encryption and + * decryption performance is very close to that obtained using large tables. + * It can use either MS Windows or Gnu/Linux/OpenSolaris OS calling conventions, + * which are as follows: + * ms windows gnu/linux/opensolaris os + * + * in_blk rcx rdi + * out_blk rdx rsi + * context (cx) r8 rdx + * + * preserved rsi - + rbx, rbp, rsp, r12, r13, r14 & r15 + * registers rdi - on both + * + * destroyed - rsi + rax, rcx, rdx, r8, r9, r10 & r11 + * registers - rdi on both + * + * The convention used here is that for gnu/linux/opensolaris os. + * + * This code provides the standard AES block size (128 bits, 16 bytes) and the + * three standard AES key sizes (128, 192 and 256 bits). It has the same call + * interface as my C implementation. It uses the Microsoft C AMD64 calling + * conventions in which the three parameters are placed in rcx, rdx and r8 + * respectively. The rbx, rsi, rdi, rbp and r12..r15 registers are preserved. + * + * OpenSolaris Note: + * Modified to use GNU/Linux/Solaris calling conventions. + * That is parameters are placed in rdi, rsi, rdx, and rcx, respectively. + * + * AES_RETURN aes_encrypt(const unsigned char in_blk[], + * unsigned char out_blk[], const aes_encrypt_ctx cx[1])/ + * + * AES_RETURN aes_decrypt(const unsigned char in_blk[], + * unsigned char out_blk[], const aes_decrypt_ctx cx[1])/ + * + * AES_RETURN aes_encrypt_key(const unsigned char key[], + * const aes_encrypt_ctx cx[1])/ + * + * AES_RETURN aes_decrypt_key(const unsigned char key[], + * const aes_decrypt_ctx cx[1])/ + * + * AES_RETURN aes_encrypt_key(const unsigned char key[], + * unsigned int len, const aes_decrypt_ctx cx[1])/ + * + * AES_RETURN aes_decrypt_key(const unsigned char key[], + * unsigned int len, const aes_decrypt_ctx cx[1])/ + * + * where is 128, 102 or 256. In the last two calls the length can be in + * either bits or bytes. + * + * Comment in/out the following lines to obtain the desired subroutines. These + * selections MUST match those in the C header file aesopt.h + */ +#define AES_REV_DKS /* define if key decryption schedule is reversed */ + +#define LAST_ROUND_TABLES /* define for the faster version using extra tables */ + +/* + * The encryption key schedule has the following in memory layout where N is the + * number of rounds (10, 12 or 14): + * + * lo: | input key (round 0) | / each round is four 32-bit words + * | encryption round 1 | + * | encryption round 2 | + * .... + * | encryption round N-1 | + * hi: | encryption round N | + * + * The decryption key schedule is normally set up so that it has the same + * layout as above by actually reversing the order of the encryption key + * schedule in memory (this happens when AES_REV_DKS is set): + * + * lo: | decryption round 0 | = | encryption round N | + * | decryption round 1 | = INV_MIX_COL[ | encryption round N-1 | ] + * | decryption round 2 | = INV_MIX_COL[ | encryption round N-2 | ] + * .... .... + * | decryption round N-1 | = INV_MIX_COL[ | encryption round 1 | ] + * hi: | decryption round N | = | input key (round 0) | + * + * with rounds except the first and last modified using inv_mix_column() + * But if AES_REV_DKS is NOT set the order of keys is left as it is for + * encryption so that it has to be accessed in reverse when used for + * decryption (although the inverse mix column modifications are done) + * + * lo: | decryption round 0 | = | input key (round 0) | + * | decryption round 1 | = INV_MIX_COL[ | encryption round 1 | ] + * | decryption round 2 | = INV_MIX_COL[ | encryption round 2 | ] + * .... .... + * | decryption round N-1 | = INV_MIX_COL[ | encryption round N-1 | ] + * hi: | decryption round N | = | encryption round N | + * + * This layout is faster when the assembler key scheduling provided here + * is used. + * + * End of user defines + */ + +/* + * --------------------------------------------------------------------------- + * OpenSolaris OS modifications + * + * This source originates from Brian Gladman file aes_amd64.asm + * in http://fp.gladman.plus.com/AES/aes-src-04-03-08.zip + * with these changes: + * + * 1. Removed MS Windows-specific code within DLL_EXPORT, _SEH_, and + * !__GNUC__ ifdefs. Also removed ENCRYPTION, DECRYPTION, + * AES_128, AES_192, AES_256, AES_VAR ifdefs. + * + * 2. Translate yasm/nasm %define and .macro definitions to cpp(1) #define + * + * 3. Translate yasm/nasm %ifdef/%ifndef to cpp(1) #ifdef + * + * 4. Translate Intel/yasm/nasm syntax to ATT/OpenSolaris as(1) syntax + * (operands reversed, literals prefixed with "$", registers prefixed with "%", + * and "[register+offset]", addressing changed to "offset(register)", + * parenthesis in constant expressions "()" changed to square brackets "[]", + * "." removed from local (numeric) labels, and other changes. + * Examples: + * Intel/yasm/nasm Syntax ATT/OpenSolaris Syntax + * mov rax,(4*20h) mov $[4*0x20],%rax + * mov rax,[ebx+20h] mov 0x20(%ebx),%rax + * lea rax,[ebx+ecx] lea (%ebx,%ecx),%rax + * sub rax,[ebx+ecx*4-20h] sub -0x20(%ebx,%ecx,4),%rax + * + * 5. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, lint(1B) guards, and dummy C function + * definitions for lint. + * + * 6. Renamed functions and reordered parameters to match OpenSolaris: + * Original Gladman interface: + * int aes_encrypt(const unsigned char *in, + * unsigned char *out, const aes_encrypt_ctx cx[1])/ + * int aes_decrypt(const unsigned char *in, + * unsigned char *out, const aes_encrypt_ctx cx[1])/ + * Note: aes_encrypt_ctx contains ks, a 60 element array of uint32_t, + * and a union type, inf., containing inf.l, a uint32_t and + * inf.b, a 4-element array of uint32_t. Only b[0] in the array (aka "l") is + * used and contains the key schedule length * 16 where key schedule length is + * 10, 12, or 14 bytes. + * + * OpenSolaris OS interface: + * void aes_encrypt_amd64(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4])/ + * void aes_decrypt_amd64(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4])/ + * typedef union {uint64_t ks64[(MAX_AES_NR + 1) * 4]/ + * uint32_t ks32[(MAX_AES_NR + 1) * 4]/ } aes_ks_t/ + * Note: ks is the AES key schedule, Nr is number of rounds, pt is plain text, + * ct is crypto text, and MAX_AES_NR is 14. + * For the x86 64-bit architecture, OpenSolaris OS uses ks32 instead of ks64. + */ + +#if defined(lint) || defined(__lint) + +#include +/* ARGSUSED */ +void +aes_encrypt_amd64(const uint32_t rk[], int Nr, const uint32_t pt[4], + uint32_t ct[4]) { +} +/* ARGSUSED */ +void +aes_decrypt_amd64(const uint32_t rk[], int Nr, const uint32_t ct[4], + uint32_t pt[4]) { +} + + +#else + +#define _ASM +#include + +#define KS_LENGTH 60 + +#define raxd eax +#define rdxd edx +#define rcxd ecx +#define rbxd ebx +#define rsid esi +#define rdid edi + +#define raxb al +#define rdxb dl +#define rcxb cl +#define rbxb bl +#define rsib sil +#define rdib dil + +// finite field multiplies by {02}, {04} and {08} + +#define f2(x) [[x<<1]^[[[x>>7]&1]*0x11b]] +#define f4(x) [[x<<2]^[[[x>>6]&1]*0x11b]^[[[x>>6]&2]*0x11b]] +#define f8(x) [[x<<3]^[[[x>>5]&1]*0x11b]^[[[x>>5]&2]*0x11b]^[[[x>>5]&4]*0x11b]] + +// finite field multiplies required in table generation + +#define f3(x) [[f2(x)] ^ [x]] +#define f9(x) [[f8(x)] ^ [x]] +#define fb(x) [[f8(x)] ^ [f2(x)] ^ [x]] +#define fd(x) [[f8(x)] ^ [f4(x)] ^ [x]] +#define fe(x) [[f8(x)] ^ [f4(x)] ^ [f2(x)]] + +// macros for expanding S-box data + +#define u8(x) [f2(x)], [x], [x], [f3(x)], [f2(x)], [x], [x], [f3(x)] +#define v8(x) [fe(x)], [f9(x)], [fd(x)], [fb(x)], [fe(x)], [f9(x)], [fd(x)], [x] +#define w8(x) [x], 0, 0, 0, [x], 0, 0, 0 + +#define enc_vals(x) \ + .byte x(0x63),x(0x7c),x(0x77),x(0x7b),x(0xf2),x(0x6b),x(0x6f),x(0xc5); \ + .byte x(0x30),x(0x01),x(0x67),x(0x2b),x(0xfe),x(0xd7),x(0xab),x(0x76); \ + .byte x(0xca),x(0x82),x(0xc9),x(0x7d),x(0xfa),x(0x59),x(0x47),x(0xf0); \ + .byte x(0xad),x(0xd4),x(0xa2),x(0xaf),x(0x9c),x(0xa4),x(0x72),x(0xc0); \ + .byte x(0xb7),x(0xfd),x(0x93),x(0x26),x(0x36),x(0x3f),x(0xf7),x(0xcc); \ + .byte x(0x34),x(0xa5),x(0xe5),x(0xf1),x(0x71),x(0xd8),x(0x31),x(0x15); \ + .byte x(0x04),x(0xc7),x(0x23),x(0xc3),x(0x18),x(0x96),x(0x05),x(0x9a); \ + .byte x(0x07),x(0x12),x(0x80),x(0xe2),x(0xeb),x(0x27),x(0xb2),x(0x75); \ + .byte x(0x09),x(0x83),x(0x2c),x(0x1a),x(0x1b),x(0x6e),x(0x5a),x(0xa0); \ + .byte x(0x52),x(0x3b),x(0xd6),x(0xb3),x(0x29),x(0xe3),x(0x2f),x(0x84); \ + .byte x(0x53),x(0xd1),x(0x00),x(0xed),x(0x20),x(0xfc),x(0xb1),x(0x5b); \ + .byte x(0x6a),x(0xcb),x(0xbe),x(0x39),x(0x4a),x(0x4c),x(0x58),x(0xcf); \ + .byte x(0xd0),x(0xef),x(0xaa),x(0xfb),x(0x43),x(0x4d),x(0x33),x(0x85); \ + .byte x(0x45),x(0xf9),x(0x02),x(0x7f),x(0x50),x(0x3c),x(0x9f),x(0xa8); \ + .byte x(0x51),x(0xa3),x(0x40),x(0x8f),x(0x92),x(0x9d),x(0x38),x(0xf5); \ + .byte x(0xbc),x(0xb6),x(0xda),x(0x21),x(0x10),x(0xff),x(0xf3),x(0xd2); \ + .byte x(0xcd),x(0x0c),x(0x13),x(0xec),x(0x5f),x(0x97),x(0x44),x(0x17); \ + .byte x(0xc4),x(0xa7),x(0x7e),x(0x3d),x(0x64),x(0x5d),x(0x19),x(0x73); \ + .byte x(0x60),x(0x81),x(0x4f),x(0xdc),x(0x22),x(0x2a),x(0x90),x(0x88); \ + .byte x(0x46),x(0xee),x(0xb8),x(0x14),x(0xde),x(0x5e),x(0x0b),x(0xdb); \ + .byte x(0xe0),x(0x32),x(0x3a),x(0x0a),x(0x49),x(0x06),x(0x24),x(0x5c); \ + .byte x(0xc2),x(0xd3),x(0xac),x(0x62),x(0x91),x(0x95),x(0xe4),x(0x79); \ + .byte x(0xe7),x(0xc8),x(0x37),x(0x6d),x(0x8d),x(0xd5),x(0x4e),x(0xa9); \ + .byte x(0x6c),x(0x56),x(0xf4),x(0xea),x(0x65),x(0x7a),x(0xae),x(0x08); \ + .byte x(0xba),x(0x78),x(0x25),x(0x2e),x(0x1c),x(0xa6),x(0xb4),x(0xc6); \ + .byte x(0xe8),x(0xdd),x(0x74),x(0x1f),x(0x4b),x(0xbd),x(0x8b),x(0x8a); \ + .byte x(0x70),x(0x3e),x(0xb5),x(0x66),x(0x48),x(0x03),x(0xf6),x(0x0e); \ + .byte x(0x61),x(0x35),x(0x57),x(0xb9),x(0x86),x(0xc1),x(0x1d),x(0x9e); \ + .byte x(0xe1),x(0xf8),x(0x98),x(0x11),x(0x69),x(0xd9),x(0x8e),x(0x94); \ + .byte x(0x9b),x(0x1e),x(0x87),x(0xe9),x(0xce),x(0x55),x(0x28),x(0xdf); \ + .byte x(0x8c),x(0xa1),x(0x89),x(0x0d),x(0xbf),x(0xe6),x(0x42),x(0x68); \ + .byte x(0x41),x(0x99),x(0x2d),x(0x0f),x(0xb0),x(0x54),x(0xbb),x(0x16) + +#define dec_vals(x) \ + .byte x(0x52),x(0x09),x(0x6a),x(0xd5),x(0x30),x(0x36),x(0xa5),x(0x38); \ + .byte x(0xbf),x(0x40),x(0xa3),x(0x9e),x(0x81),x(0xf3),x(0xd7),x(0xfb); \ + .byte x(0x7c),x(0xe3),x(0x39),x(0x82),x(0x9b),x(0x2f),x(0xff),x(0x87); \ + .byte x(0x34),x(0x8e),x(0x43),x(0x44),x(0xc4),x(0xde),x(0xe9),x(0xcb); \ + .byte x(0x54),x(0x7b),x(0x94),x(0x32),x(0xa6),x(0xc2),x(0x23),x(0x3d); \ + .byte x(0xee),x(0x4c),x(0x95),x(0x0b),x(0x42),x(0xfa),x(0xc3),x(0x4e); \ + .byte x(0x08),x(0x2e),x(0xa1),x(0x66),x(0x28),x(0xd9),x(0x24),x(0xb2); \ + .byte x(0x76),x(0x5b),x(0xa2),x(0x49),x(0x6d),x(0x8b),x(0xd1),x(0x25); \ + .byte x(0x72),x(0xf8),x(0xf6),x(0x64),x(0x86),x(0x68),x(0x98),x(0x16); \ + .byte x(0xd4),x(0xa4),x(0x5c),x(0xcc),x(0x5d),x(0x65),x(0xb6),x(0x92); \ + .byte x(0x6c),x(0x70),x(0x48),x(0x50),x(0xfd),x(0xed),x(0xb9),x(0xda); \ + .byte x(0x5e),x(0x15),x(0x46),x(0x57),x(0xa7),x(0x8d),x(0x9d),x(0x84); \ + .byte x(0x90),x(0xd8),x(0xab),x(0x00),x(0x8c),x(0xbc),x(0xd3),x(0x0a); \ + .byte x(0xf7),x(0xe4),x(0x58),x(0x05),x(0xb8),x(0xb3),x(0x45),x(0x06); \ + .byte x(0xd0),x(0x2c),x(0x1e),x(0x8f),x(0xca),x(0x3f),x(0x0f),x(0x02); \ + .byte x(0xc1),x(0xaf),x(0xbd),x(0x03),x(0x01),x(0x13),x(0x8a),x(0x6b); \ + .byte x(0x3a),x(0x91),x(0x11),x(0x41),x(0x4f),x(0x67),x(0xdc),x(0xea); \ + .byte x(0x97),x(0xf2),x(0xcf),x(0xce),x(0xf0),x(0xb4),x(0xe6),x(0x73); \ + .byte x(0x96),x(0xac),x(0x74),x(0x22),x(0xe7),x(0xad),x(0x35),x(0x85); \ + .byte x(0xe2),x(0xf9),x(0x37),x(0xe8),x(0x1c),x(0x75),x(0xdf),x(0x6e); \ + .byte x(0x47),x(0xf1),x(0x1a),x(0x71),x(0x1d),x(0x29),x(0xc5),x(0x89); \ + .byte x(0x6f),x(0xb7),x(0x62),x(0x0e),x(0xaa),x(0x18),x(0xbe),x(0x1b); \ + .byte x(0xfc),x(0x56),x(0x3e),x(0x4b),x(0xc6),x(0xd2),x(0x79),x(0x20); \ + .byte x(0x9a),x(0xdb),x(0xc0),x(0xfe),x(0x78),x(0xcd),x(0x5a),x(0xf4); \ + .byte x(0x1f),x(0xdd),x(0xa8),x(0x33),x(0x88),x(0x07),x(0xc7),x(0x31); \ + .byte x(0xb1),x(0x12),x(0x10),x(0x59),x(0x27),x(0x80),x(0xec),x(0x5f); \ + .byte x(0x60),x(0x51),x(0x7f),x(0xa9),x(0x19),x(0xb5),x(0x4a),x(0x0d); \ + .byte x(0x2d),x(0xe5),x(0x7a),x(0x9f),x(0x93),x(0xc9),x(0x9c),x(0xef); \ + .byte x(0xa0),x(0xe0),x(0x3b),x(0x4d),x(0xae),x(0x2a),x(0xf5),x(0xb0); \ + .byte x(0xc8),x(0xeb),x(0xbb),x(0x3c),x(0x83),x(0x53),x(0x99),x(0x61); \ + .byte x(0x17),x(0x2b),x(0x04),x(0x7e),x(0xba),x(0x77),x(0xd6),x(0x26); \ + .byte x(0xe1),x(0x69),x(0x14),x(0x63),x(0x55),x(0x21),x(0x0c),x(0x7d) + +#define tptr %rbp /* table pointer */ +#define kptr %r8 /* key schedule pointer */ +#define fofs 128 /* adjust offset in key schedule to keep |disp| < 128 */ +#define fk_ref(x, y) -16*x+fofs+4*y(kptr) + +#ifdef AES_REV_DKS +#define rofs 128 +#define ik_ref(x, y) -16*x+rofs+4*y(kptr) + +#else +#define rofs -128 +#define ik_ref(x, y) 16*x+rofs+4*y(kptr) +#endif /* AES_REV_DKS */ + +#define tab_0(x) (tptr,x,8) +#define tab_1(x) 3(tptr,x,8) +#define tab_2(x) 2(tptr,x,8) +#define tab_3(x) 1(tptr,x,8) +#define tab_f(x) 1(tptr,x,8) +#define tab_i(x) 7(tptr,x,8) + +#define ff_rnd(p1, p2, p3, p4, round) /* normal forward round */ \ + mov fk_ref(round,0), p1; \ + mov fk_ref(round,1), p2; \ + mov fk_ref(round,2), p3; \ + mov fk_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + shr $16, %eax; \ + xor tab_0(%rsi), p1; \ + xor tab_1(%rdi), p4; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + xor tab_2(%rsi), p3; \ + xor tab_3(%rdi), p2; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + shr $16, %ebx; \ + xor tab_0(%rsi), p2; \ + xor tab_1(%rdi), p1; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + xor tab_2(%rsi), p4; \ + xor tab_3(%rdi), p3; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + shr $16, %ecx; \ + xor tab_0(%rsi), p3; \ + xor tab_1(%rdi), p2; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + xor tab_2(%rsi), p1; \ + xor tab_3(%rdi), p4; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + shr $16, %edx; \ + xor tab_0(%rsi), p4; \ + xor tab_1(%rdi), p3; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + xor tab_2(%rsi), p2; \ + xor tab_3(%rdi), p1; \ + \ + mov p1, %eax; \ + mov p2, %ebx; \ + mov p3, %ecx; \ + mov p4, %edx + +#ifdef LAST_ROUND_TABLES + +#define fl_rnd(p1, p2, p3, p4, round) /* last forward round */ \ + add $2048, tptr; \ + mov fk_ref(round,0), p1; \ + mov fk_ref(round,1), p2; \ + mov fk_ref(round,2), p3; \ + mov fk_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + shr $16, %eax; \ + xor tab_0(%rsi), p1; \ + xor tab_1(%rdi), p4; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + xor tab_2(%rsi), p3; \ + xor tab_3(%rdi), p2; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + shr $16, %ebx; \ + xor tab_0(%rsi), p2; \ + xor tab_1(%rdi), p1; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + xor tab_2(%rsi), p4; \ + xor tab_3(%rdi), p3; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + shr $16, %ecx; \ + xor tab_0(%rsi), p3; \ + xor tab_1(%rdi), p2; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + xor tab_2(%rsi), p1; \ + xor tab_3(%rdi), p4; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + shr $16, %edx; \ + xor tab_0(%rsi), p4; \ + xor tab_1(%rdi), p3; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + xor tab_2(%rsi), p2; \ + xor tab_3(%rdi), p1 + +#else + +#define fl_rnd(p1, p2, p3, p4, round) /* last forward round */ \ + mov fk_ref(round,0), p1; \ + mov fk_ref(round,1), p2; \ + mov fk_ref(round,2), p3; \ + mov fk_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + shr $16, %eax; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + xor %esi, p1; \ + rol $8, %edi; \ + xor %edi, p4; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p3; \ + xor %edi, p2; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + shr $16, %ebx; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + xor %esi, p2; \ + rol $8, %edi; \ + xor %edi, p1; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p4; \ + xor %edi, p3; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + shr $16, %ecx; \ + xor %esi, p3; \ + rol $8, %edi; \ + xor %edi, p2; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p1; \ + xor %edi, p4; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + shr $16, %edx; \ + xor %esi, p4; \ + rol $8, %edi; \ + xor %edi, p3; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + movzx tab_f(%rsi), %esi; \ + movzx tab_f(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p2; \ + xor %edi, p1 + +#endif /* LAST_ROUND_TABLES */ + +#define ii_rnd(p1, p2, p3, p4, round) /* normal inverse round */ \ + mov ik_ref(round,0), p1; \ + mov ik_ref(round,1), p2; \ + mov ik_ref(round,2), p3; \ + mov ik_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + shr $16, %eax; \ + xor tab_0(%rsi), p1; \ + xor tab_1(%rdi), p2; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + xor tab_2(%rsi), p3; \ + xor tab_3(%rdi), p4; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + shr $16, %ebx; \ + xor tab_0(%rsi), p2; \ + xor tab_1(%rdi), p3; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + xor tab_2(%rsi), p4; \ + xor tab_3(%rdi), p1; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + shr $16, %ecx; \ + xor tab_0(%rsi), p3; \ + xor tab_1(%rdi), p4; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + xor tab_2(%rsi), p1; \ + xor tab_3(%rdi), p2; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + shr $16, %edx; \ + xor tab_0(%rsi), p4; \ + xor tab_1(%rdi), p1; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + xor tab_2(%rsi), p2; \ + xor tab_3(%rdi), p3; \ + \ + mov p1, %eax; \ + mov p2, %ebx; \ + mov p3, %ecx; \ + mov p4, %edx + +#ifdef LAST_ROUND_TABLES + +#define il_rnd(p1, p2, p3, p4, round) /* last inverse round */ \ + add $2048, tptr; \ + mov ik_ref(round,0), p1; \ + mov ik_ref(round,1), p2; \ + mov ik_ref(round,2), p3; \ + mov ik_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + shr $16, %eax; \ + xor tab_0(%rsi), p1; \ + xor tab_1(%rdi), p2; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + xor tab_2(%rsi), p3; \ + xor tab_3(%rdi), p4; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + shr $16, %ebx; \ + xor tab_0(%rsi), p2; \ + xor tab_1(%rdi), p3; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + xor tab_2(%rsi), p4; \ + xor tab_3(%rdi), p1; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + shr $16, %ecx; \ + xor tab_0(%rsi), p3; \ + xor tab_1(%rdi), p4; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + xor tab_2(%rsi), p1; \ + xor tab_3(%rdi), p2; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + shr $16, %edx; \ + xor tab_0(%rsi), p4; \ + xor tab_1(%rdi), p1; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + xor tab_2(%rsi), p2; \ + xor tab_3(%rdi), p3 + +#else + +#define il_rnd(p1, p2, p3, p4, round) /* last inverse round */ \ + mov ik_ref(round,0), p1; \ + mov ik_ref(round,1), p2; \ + mov ik_ref(round,2), p3; \ + mov ik_ref(round,3), p4; \ + \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + shr $16, %eax; \ + xor %esi, p1; \ + rol $8, %edi; \ + xor %edi, p2; \ + movzx %al, %esi; \ + movzx %ah, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p3; \ + xor %edi, p4; \ + \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + shr $16, %ebx; \ + xor %esi, p2; \ + rol $8, %edi; \ + xor %edi, p3; \ + movzx %bl, %esi; \ + movzx %bh, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p4; \ + xor %edi, p1; \ + \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + shr $16, %ecx; \ + xor %esi, p3; \ + rol $8, %edi; \ + xor %edi, p4; \ + movzx %cl, %esi; \ + movzx %ch, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p1; \ + xor %edi, p2; \ + \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + shr $16, %edx; \ + xor %esi, p4; \ + rol $8, %edi; \ + xor %edi, p1; \ + movzx %dl, %esi; \ + movzx %dh, %edi; \ + movzx tab_i(%rsi), %esi; \ + movzx tab_i(%rdi), %edi; \ + rol $16, %esi; \ + rol $24, %edi; \ + xor %esi, p2; \ + xor %edi, p3 + +#endif /* LAST_ROUND_TABLES */ + +/* + * OpenSolaris OS: + * void aes_encrypt_amd64(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4])/ + * + * Original interface: + * int aes_encrypt(const unsigned char *in, + * unsigned char *out, const aes_encrypt_ctx cx[1])/ + */ +.data +.align 64 +enc_tab: + enc_vals(u8) +#ifdef LAST_ROUND_TABLES + // Last Round Tables: + enc_vals(w8) +#endif + + +ENTRY_NP(aes_encrypt_amd64) +#ifdef GLADMAN_INTERFACE + // Original interface + sub $[4*8], %rsp // gnu/linux/opensolaris binary interface + mov %rsi, (%rsp) // output pointer (P2) + mov %rdx, %r8 // context (P3) + + mov %rbx, 1*8(%rsp) // P1: input pointer in rdi + mov %rbp, 2*8(%rsp) // P2: output pointer in (rsp) + mov %r12, 3*8(%rsp) // P3: context in r8 + movzx 4*KS_LENGTH(kptr), %esi // Get byte key length * 16 + +#else + // OpenSolaris OS interface + sub $[4*8], %rsp // Make room on stack to save registers + mov %rcx, (%rsp) // Save output pointer (P4) on stack + mov %rdi, %r8 // context (P1) + mov %rdx, %rdi // P3: save input pointer + shl $4, %esi // P2: esi byte key length * 16 + + mov %rbx, 1*8(%rsp) // Save registers + mov %rbp, 2*8(%rsp) + mov %r12, 3*8(%rsp) + // P1: context in r8 + // P2: byte key length * 16 in esi + // P3: input pointer in rdi + // P4: output pointer in (rsp) +#endif /* GLADMAN_INTERFACE */ + + lea enc_tab(%rip), tptr + sub $fofs, kptr + + // Load input block into registers + mov (%rdi), %eax + mov 1*4(%rdi), %ebx + mov 2*4(%rdi), %ecx + mov 3*4(%rdi), %edx + + xor fofs(kptr), %eax + xor fofs+4(kptr), %ebx + xor fofs+8(kptr), %ecx + xor fofs+12(kptr), %edx + + lea (kptr,%rsi), kptr + // Jump based on byte key length * 16: + cmp $[10*16], %esi + je 3f + cmp $[12*16], %esi + je 2f + cmp $[14*16], %esi + je 1f + mov $-1, %rax // error + jmp 4f + + // Perform normal forward rounds +1: ff_rnd(%r9d, %r10d, %r11d, %r12d, 13) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 12) +2: ff_rnd(%r9d, %r10d, %r11d, %r12d, 11) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 10) +3: ff_rnd(%r9d, %r10d, %r11d, %r12d, 9) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 8) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 7) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 6) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 5) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 4) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 3) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 2) + ff_rnd(%r9d, %r10d, %r11d, %r12d, 1) + fl_rnd(%r9d, %r10d, %r11d, %r12d, 0) + + // Copy results + mov (%rsp), %rbx + mov %r9d, (%rbx) + mov %r10d, 4(%rbx) + mov %r11d, 8(%rbx) + mov %r12d, 12(%rbx) + xor %rax, %rax +4: // Restore registers + mov 1*8(%rsp), %rbx + mov 2*8(%rsp), %rbp + mov 3*8(%rsp), %r12 + add $[4*8], %rsp + ret + + SET_SIZE(aes_encrypt_amd64) + +/* + * OpenSolaris OS: + * void aes_decrypt_amd64(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4])/ + * + * Original interface: + * int aes_decrypt(const unsigned char *in, + * unsigned char *out, const aes_encrypt_ctx cx[1])/ + */ +.data +.align 64 +dec_tab: + dec_vals(v8) +#ifdef LAST_ROUND_TABLES + // Last Round Tables: + dec_vals(w8) +#endif + + +ENTRY_NP(aes_decrypt_amd64) +#ifdef GLADMAN_INTERFACE + // Original interface + sub $[4*8], %rsp // gnu/linux/opensolaris binary interface + mov %rsi, (%rsp) // output pointer (P2) + mov %rdx, %r8 // context (P3) + + mov %rbx, 1*8(%rsp) // P1: input pointer in rdi + mov %rbp, 2*8(%rsp) // P2: output pointer in (rsp) + mov %r12, 3*8(%rsp) // P3: context in r8 + movzx 4*KS_LENGTH(kptr), %esi // Get byte key length * 16 + +#else + // OpenSolaris OS interface + sub $[4*8], %rsp // Make room on stack to save registers + mov %rcx, (%rsp) // Save output pointer (P4) on stack + mov %rdi, %r8 // context (P1) + mov %rdx, %rdi // P3: save input pointer + shl $4, %esi // P2: esi byte key length * 16 + + mov %rbx, 1*8(%rsp) // Save registers + mov %rbp, 2*8(%rsp) + mov %r12, 3*8(%rsp) + // P1: context in r8 + // P2: byte key length * 16 in esi + // P3: input pointer in rdi + // P4: output pointer in (rsp) +#endif /* GLADMAN_INTERFACE */ + + lea dec_tab(%rip), tptr + sub $rofs, kptr + + // Load input block into registers + mov (%rdi), %eax + mov 1*4(%rdi), %ebx + mov 2*4(%rdi), %ecx + mov 3*4(%rdi), %edx + +#ifdef AES_REV_DKS + mov kptr, %rdi + lea (kptr,%rsi), kptr +#else + lea (kptr,%rsi), %rdi +#endif + + xor rofs(%rdi), %eax + xor rofs+4(%rdi), %ebx + xor rofs+8(%rdi), %ecx + xor rofs+12(%rdi), %edx + + // Jump based on byte key length * 16: + cmp $[10*16], %esi + je 3f + cmp $[12*16], %esi + je 2f + cmp $[14*16], %esi + je 1f + mov $-1, %rax // error + jmp 4f + + // Perform normal inverse rounds +1: ii_rnd(%r9d, %r10d, %r11d, %r12d, 13) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 12) +2: ii_rnd(%r9d, %r10d, %r11d, %r12d, 11) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 10) +3: ii_rnd(%r9d, %r10d, %r11d, %r12d, 9) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 8) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 7) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 6) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 5) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 4) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 3) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 2) + ii_rnd(%r9d, %r10d, %r11d, %r12d, 1) + il_rnd(%r9d, %r10d, %r11d, %r12d, 0) + + // Copy results + mov (%rsp), %rbx + mov %r9d, (%rbx) + mov %r10d, 4(%rbx) + mov %r11d, 8(%rbx) + mov %r12d, 12(%rbx) + xor %rax, %rax +4: // Restore registers + mov 1*8(%rsp), %rbx + mov 2*8(%rsp), %rbp + mov 3*8(%rsp), %r12 + add $[4*8], %rsp + ret + + SET_SIZE(aes_decrypt_amd64) +#endif /* lint || __lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aes_intel.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aes_intel.S @@ -0,0 +1,749 @@ +/* + * ==================================================================== + * Written by Intel Corporation for the OpenSSL project to add support + * for Intel AES-NI instructions. Rights for redistribution and usage + * in source and binary forms are granted according to the OpenSSL + * license. + * + * Author: Huang Ying + * Vinodh Gopal + * Kahraman Akdemir + * + * Intel AES-NI is a new set of Single Instruction Multiple Data (SIMD) + * instructions that are going to be introduced in the next generation + * of Intel processor, as of 2009. These instructions enable fast and + * secure data encryption and decryption, using the Advanced Encryption + * Standard (AES), defined by FIPS Publication number 197. The + * architecture introduces six instructions that offer full hardware + * support for AES. Four of them support high performance data + * encryption and decryption, and the other two instructions support + * the AES key expansion procedure. + * ==================================================================== + */ + +/* + * ==================================================================== + * Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + */ + +/* + * ==================================================================== + * OpenSolaris OS modifications + * + * This source originates as files aes-intel.S and eng_aesni_asm.pl, in + * patches sent sent Dec. 9, 2008 and Dec. 24, 2008, respectively, by + * Huang Ying of Intel to the openssl-dev mailing list under the subject + * of "Add support to Intel AES-NI instruction set for x86_64 platform". + * + * This OpenSolaris version has these major changes from the original source: + * + * 1. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, lint(1B) guards, and dummy C function + * definitions for lint. + * + * 2. Formatted code, added comments, and added #includes and #defines. + * + * 3. If bit CR0.TS is set, clear and set the TS bit, after and before + * calling kpreempt_disable() and kpreempt_enable(). + * If the TS bit is not set, Save and restore %xmm registers at the beginning + * and end of function calls (%xmm* registers are not saved and restored by + * during kernel thread preemption). + * + * 4. Renamed functions, reordered parameters, and changed return value + * to match OpenSolaris: + * + * OpenSSL interface: + * int intel_AES_set_encrypt_key(const unsigned char *userKey, + * const int bits, AES_KEY *key); + * int intel_AES_set_decrypt_key(const unsigned char *userKey, + * const int bits, AES_KEY *key); + * Return values for above are non-zero on error, 0 on success. + * + * void intel_AES_encrypt(const unsigned char *in, unsigned char *out, + * const AES_KEY *key); + * void intel_AES_decrypt(const unsigned char *in, unsigned char *out, + * const AES_KEY *key); + * typedef struct aes_key_st { + * unsigned int rd_key[4 *(AES_MAXNR + 1)]; + * int rounds; + * unsigned int pad[3]; + * } AES_KEY; + * Note: AES_LONG is undefined (that is, Intel uses 32-bit key schedules + * (ks32) instead of 64-bit (ks64). + * Number of rounds (aka round count) is at offset 240 of AES_KEY. + * + * OpenSolaris OS interface (#ifdefs removed for readability): + * int rijndael_key_setup_dec_intel(uint32_t rk[], + * const uint32_t cipherKey[], uint64_t keyBits); + * int rijndael_key_setup_enc_intel(uint32_t rk[], + * const uint32_t cipherKey[], uint64_t keyBits); + * Return values for above are 0 on error, number of rounds on success. + * + * void aes_encrypt_intel(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4]); + * void aes_decrypt_intel(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4]); + * typedef union {uint64_t ks64[(MAX_AES_NR + 1) * 4]; + * uint32_t ks32[(MAX_AES_NR + 1) * 4]; } aes_ks_t; + * + * typedef union { + * uint32_t ks32[((MAX_AES_NR) + 1) * (MAX_AES_NB)]; + * } aes_ks_t; + * typedef struct aes_key { + * aes_ks_t encr_ks, decr_ks; + * long double align128; + * int flags, nr, type; + * } aes_key_t; + * + * Note: ks is the AES key schedule, Nr is number of rounds, pt is plain text, + * ct is crypto text, and MAX_AES_NR is 14. + * For the x86 64-bit architecture, OpenSolaris OS uses ks32 instead of ks64. + * + * Note2: aes_ks_t must be aligned on a 0 mod 128 byte boundary. + * + * ==================================================================== + */ + + +#if defined(lint) || defined(__lint) + +#include + +/* ARGSUSED */ +void +aes_encrypt_intel(const uint32_t rk[], int Nr, const uint32_t pt[4], + uint32_t ct[4]) { +} +/* ARGSUSED */ +void +aes_decrypt_intel(const uint32_t rk[], int Nr, const uint32_t ct[4], + uint32_t pt[4]) { +} +/* ARGSUSED */ +int +rijndael_key_setup_enc_intel(uint32_t rk[], const uint32_t cipherKey[], + uint64_t keyBits) { + return (0); +} +/* ARGSUSED */ +int +rijndael_key_setup_dec_intel(uint32_t rk[], const uint32_t cipherKey[], + uint64_t keyBits) { + return (0); +} + + +#else /* lint */ + +#define _ASM +#include + + +/* + * _key_expansion_128(), * _key_expansion_192a(), _key_expansion_192b(), + * _key_expansion_256a(), _key_expansion_256b() + * + * Helper functions called by rijndael_key_setup_inc_intel(). + * Also used indirectly by rijndael_key_setup_dec_intel(). + * + * Input: + * %xmm0 User-provided cipher key + * %xmm1 Round constant + * Output: + * (%rcx) AES key + */ + +ENTRY_NP2(_key_expansion_128, _key_expansion_256a) +_key_expansion_128_local: +_key_expansion_256a_local: + pshufd $0b11111111, %xmm1, %xmm1 + shufps $0b00010000, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + shufps $0b10001100, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + pxor %xmm1, %xmm0 + movaps %xmm0, (%rcx) + add $0x10, %rcx + ret + nop +SET_SIZE(_key_expansion_128) +SET_SIZE(_key_expansion_256a) + + +ENTRY_NP(_key_expansion_192a) +_key_expansion_192a_local: + pshufd $0b01010101, %xmm1, %xmm1 + shufps $0b00010000, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + shufps $0b10001100, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + pxor %xmm1, %xmm0 + + movaps %xmm2, %xmm5 + movaps %xmm2, %xmm6 + pslldq $4, %xmm5 + pshufd $0b11111111, %xmm0, %xmm3 + pxor %xmm3, %xmm2 + pxor %xmm5, %xmm2 + + movaps %xmm0, %xmm1 + shufps $0b01000100, %xmm0, %xmm6 + movaps %xmm6, (%rcx) + shufps $0b01001110, %xmm2, %xmm1 + movaps %xmm1, 0x10(%rcx) + add $0x20, %rcx + ret +SET_SIZE(_key_expansion_192a) + + +ENTRY_NP(_key_expansion_192b) +_key_expansion_192b_local: + pshufd $0b01010101, %xmm1, %xmm1 + shufps $0b00010000, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + shufps $0b10001100, %xmm0, %xmm4 + pxor %xmm4, %xmm0 + pxor %xmm1, %xmm0 + + movaps %xmm2, %xmm5 + pslldq $4, %xmm5 + pshufd $0b11111111, %xmm0, %xmm3 + pxor %xmm3, %xmm2 + pxor %xmm5, %xmm2 + + movaps %xmm0, (%rcx) + add $0x10, %rcx + ret +SET_SIZE(_key_expansion_192b) + + +ENTRY_NP(_key_expansion_256b) +_key_expansion_256b_local: + pshufd $0b10101010, %xmm1, %xmm1 + shufps $0b00010000, %xmm2, %xmm4 + pxor %xmm4, %xmm2 + shufps $0b10001100, %xmm2, %xmm4 + pxor %xmm4, %xmm2 + pxor %xmm1, %xmm2 + movaps %xmm2, (%rcx) + add $0x10, %rcx + ret +SET_SIZE(_key_expansion_256b) + + +/* + * rijndael_key_setup_enc_intel() + * Expand the cipher key into the encryption key schedule. + * + * For kernel code, caller is responsible for ensuring kpreempt_disable() + * has been called. This is because %xmm registers are not saved/restored. + * Clear and set the CR0.TS bit on entry and exit, respectively, if TS is set + * on entry. Otherwise, if TS is not set, save and restore %xmm registers + * on the stack. + * + * OpenSolaris interface: + * int rijndael_key_setup_enc_intel(uint32_t rk[], const uint32_t cipherKey[], + * uint64_t keyBits); + * Return value is 0 on error, number of rounds on success. + * + * Original Intel OpenSSL interface: + * int intel_AES_set_encrypt_key(const unsigned char *userKey, + * const int bits, AES_KEY *key); + * Return value is non-zero on error, 0 on success. + */ + +#ifdef OPENSSL_INTERFACE +#define rijndael_key_setup_enc_intel intel_AES_set_encrypt_key +#define rijndael_key_setup_dec_intel intel_AES_set_decrypt_key + +#define USERCIPHERKEY rdi /* P1, 64 bits */ +#define KEYSIZE32 esi /* P2, 32 bits */ +#define KEYSIZE64 rsi /* P2, 64 bits */ +#define AESKEY rdx /* P3, 64 bits */ + +#else /* OpenSolaris Interface */ +#define AESKEY rdi /* P1, 64 bits */ +#define USERCIPHERKEY rsi /* P2, 64 bits */ +#define KEYSIZE32 edx /* P3, 32 bits */ +#define KEYSIZE64 rdx /* P3, 64 bits */ +#endif /* OPENSSL_INTERFACE */ + +#define ROUNDS32 KEYSIZE32 /* temp */ +#define ROUNDS64 KEYSIZE64 /* temp */ +#define ENDAESKEY USERCIPHERKEY /* temp */ + +ENTRY_NP(rijndael_key_setup_enc_intel) +rijndael_key_setup_enc_intel_local: + FRAME_BEGIN + // NULL pointer sanity check + test %USERCIPHERKEY, %USERCIPHERKEY + jz .Lenc_key_invalid_param + test %AESKEY, %AESKEY + jz .Lenc_key_invalid_param + + movups (%USERCIPHERKEY), %xmm0 // user key (first 16 bytes) + movaps %xmm0, (%AESKEY) + lea 0x10(%AESKEY), %rcx // key addr + pxor %xmm4, %xmm4 // xmm4 is assumed 0 in _key_expansion_x + + cmp $256, %KEYSIZE32 + jnz .Lenc_key192 + + // AES 256: 14 rounds in encryption key schedule +#ifdef OPENSSL_INTERFACE + mov $14, %ROUNDS32 + movl %ROUNDS32, 240(%AESKEY) // key.rounds = 14 +#endif /* OPENSSL_INTERFACE */ + + movups 0x10(%USERCIPHERKEY), %xmm2 // other user key (2nd 16 bytes) + movaps %xmm2, (%rcx) + add $0x10, %rcx + + aeskeygenassist $0x1, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x1, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x2, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x2, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x4, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x4, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x8, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x8, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x10, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x10, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x20, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + aeskeygenassist $0x20, %xmm0, %xmm1 + call _key_expansion_256b_local + aeskeygenassist $0x40, %xmm2, %xmm1 // expand the key + call _key_expansion_256a_local + +#ifdef OPENSSL_INTERFACE + xor %rax, %rax // return 0 (OK) +#else /* Open Solaris Interface */ + mov $14, %rax // return # rounds = 14 +#endif + FRAME_END + ret + +.align 4 +.Lenc_key192: + cmp $192, %KEYSIZE32 + jnz .Lenc_key128 + + // AES 192: 12 rounds in encryption key schedule +#ifdef OPENSSL_INTERFACE + mov $12, %ROUNDS32 + movl %ROUNDS32, 240(%AESKEY) // key.rounds = 12 +#endif /* OPENSSL_INTERFACE */ + + movq 0x10(%USERCIPHERKEY), %xmm2 // other user key + aeskeygenassist $0x1, %xmm2, %xmm1 // expand the key + call _key_expansion_192a_local + aeskeygenassist $0x2, %xmm2, %xmm1 // expand the key + call _key_expansion_192b_local + aeskeygenassist $0x4, %xmm2, %xmm1 // expand the key + call _key_expansion_192a_local + aeskeygenassist $0x8, %xmm2, %xmm1 // expand the key + call _key_expansion_192b_local + aeskeygenassist $0x10, %xmm2, %xmm1 // expand the key + call _key_expansion_192a_local + aeskeygenassist $0x20, %xmm2, %xmm1 // expand the key + call _key_expansion_192b_local + aeskeygenassist $0x40, %xmm2, %xmm1 // expand the key + call _key_expansion_192a_local + aeskeygenassist $0x80, %xmm2, %xmm1 // expand the key + call _key_expansion_192b_local + +#ifdef OPENSSL_INTERFACE + xor %rax, %rax // return 0 (OK) +#else /* OpenSolaris Interface */ + mov $12, %rax // return # rounds = 12 +#endif + FRAME_END + ret + +.align 4 +.Lenc_key128: + cmp $128, %KEYSIZE32 + jnz .Lenc_key_invalid_key_bits + + // AES 128: 10 rounds in encryption key schedule +#ifdef OPENSSL_INTERFACE + mov $10, %ROUNDS32 + movl %ROUNDS32, 240(%AESKEY) // key.rounds = 10 +#endif /* OPENSSL_INTERFACE */ + + aeskeygenassist $0x1, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x2, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x4, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x8, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x10, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x20, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x40, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x80, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x1b, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + aeskeygenassist $0x36, %xmm0, %xmm1 // expand the key + call _key_expansion_128_local + +#ifdef OPENSSL_INTERFACE + xor %rax, %rax // return 0 (OK) +#else /* OpenSolaris Interface */ + mov $10, %rax // return # rounds = 10 +#endif + FRAME_END + ret + +.Lenc_key_invalid_param: +#ifdef OPENSSL_INTERFACE + mov $-1, %rax // user key or AES key pointer is NULL + FRAME_END + ret +#else + /* FALLTHROUGH */ +#endif /* OPENSSL_INTERFACE */ + +.Lenc_key_invalid_key_bits: +#ifdef OPENSSL_INTERFACE + mov $-2, %rax // keysize is invalid +#else /* Open Solaris Interface */ + xor %rax, %rax // a key pointer is NULL or invalid keysize +#endif /* OPENSSL_INTERFACE */ + FRAME_END + ret + SET_SIZE(rijndael_key_setup_enc_intel) + + +/* + * rijndael_key_setup_dec_intel() + * Expand the cipher key into the decryption key schedule. + * + * For kernel code, caller is responsible for ensuring kpreempt_disable() + * has been called. This is because %xmm registers are not saved/restored. + * Clear and set the CR0.TS bit on entry and exit, respectively, if TS is set + * on entry. Otherwise, if TS is not set, save and restore %xmm registers + * on the stack. + * + * OpenSolaris interface: + * int rijndael_key_setup_dec_intel(uint32_t rk[], const uint32_t cipherKey[], + * uint64_t keyBits); + * Return value is 0 on error, number of rounds on success. + * P1->P2, P2->P3, P3->P1 + * + * Original Intel OpenSSL interface: + * int intel_AES_set_decrypt_key(const unsigned char *userKey, + * const int bits, AES_KEY *key); + * Return value is non-zero on error, 0 on success. + */ + +ENTRY_NP(rijndael_key_setup_dec_intel) +FRAME_BEGIN + // Generate round keys used for encryption + call rijndael_key_setup_enc_intel_local + test %rax, %rax +#ifdef OPENSSL_INTERFACE + jnz .Ldec_key_exit // Failed if returned non-0 +#else /* OpenSolaris Interface */ + jz .Ldec_key_exit // Failed if returned 0 +#endif /* OPENSSL_INTERFACE */ + + /* + * Convert round keys used for encryption + * to a form usable for decryption + */ +#ifndef OPENSSL_INTERFACE /* OpenSolaris Interface */ + mov %rax, %ROUNDS64 // set # rounds (10, 12, or 14) + // (already set for OpenSSL) +#endif + + lea 0x10(%AESKEY), %rcx // key addr + shl $4, %ROUNDS32 + add %AESKEY, %ROUNDS64 + mov %ROUNDS64, %ENDAESKEY + +.align 4 +.Ldec_key_reorder_loop: + movaps (%AESKEY), %xmm0 + movaps (%ROUNDS64), %xmm1 + movaps %xmm0, (%ROUNDS64) + movaps %xmm1, (%AESKEY) + lea 0x10(%AESKEY), %AESKEY + lea -0x10(%ROUNDS64), %ROUNDS64 + cmp %AESKEY, %ROUNDS64 + ja .Ldec_key_reorder_loop + +.align 4 +.Ldec_key_inv_loop: + movaps (%rcx), %xmm0 + // Convert an encryption round key to a form usable for decryption + // with the "AES Inverse Mix Columns" instruction + aesimc %xmm0, %xmm1 + movaps %xmm1, (%rcx) + lea 0x10(%rcx), %rcx + cmp %ENDAESKEY, %rcx + jnz .Ldec_key_inv_loop + +.Ldec_key_exit: + // OpenSolaris: rax = # rounds (10, 12, or 14) or 0 for error + // OpenSSL: rax = 0 for OK, or non-zero for error + FRAME_END + ret + SET_SIZE(rijndael_key_setup_dec_intel) + + +/* + * aes_encrypt_intel() + * Encrypt a single block (in and out can overlap). + * + * For kernel code, caller is responsible for ensuring kpreempt_disable() + * has been called. This is because %xmm registers are not saved/restored. + * Clear and set the CR0.TS bit on entry and exit, respectively, if TS is set + * on entry. Otherwise, if TS is not set, save and restore %xmm registers + * on the stack. + * + * Temporary register usage: + * %xmm0 State + * %xmm1 Key + * + * Original OpenSolaris Interface: + * void aes_encrypt_intel(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4]) + * + * Original Intel OpenSSL Interface: + * void intel_AES_encrypt(const unsigned char *in, unsigned char *out, + * const AES_KEY *key) + */ + +#ifdef OPENSSL_INTERFACE +#define aes_encrypt_intel intel_AES_encrypt +#define aes_decrypt_intel intel_AES_decrypt + +#define INP rdi /* P1, 64 bits */ +#define OUTP rsi /* P2, 64 bits */ +#define KEYP rdx /* P3, 64 bits */ + +/* No NROUNDS parameter--offset 240 from KEYP saved in %ecx: */ +#define NROUNDS32 ecx /* temporary, 32 bits */ +#define NROUNDS cl /* temporary, 8 bits */ + +#else /* OpenSolaris Interface */ +#define KEYP rdi /* P1, 64 bits */ +#define NROUNDS esi /* P2, 32 bits */ +#define INP rdx /* P3, 64 bits */ +#define OUTP rcx /* P4, 64 bits */ +#endif /* OPENSSL_INTERFACE */ + +#define STATE xmm0 /* temporary, 128 bits */ +#define KEY xmm1 /* temporary, 128 bits */ + + +ENTRY_NP(aes_encrypt_intel) + + movups (%INP), %STATE // input + movaps (%KEYP), %KEY // key +#ifdef OPENSSL_INTERFACE + mov 240(%KEYP), %NROUNDS32 // round count +#else /* OpenSolaris Interface */ + /* Round count is already present as P2 in %rsi/%esi */ +#endif /* OPENSSL_INTERFACE */ + + pxor %KEY, %STATE // round 0 + lea 0x30(%KEYP), %KEYP + cmp $12, %NROUNDS + jb .Lenc128 + lea 0x20(%KEYP), %KEYP + je .Lenc192 + + // AES 256 + lea 0x20(%KEYP), %KEYP + movaps -0x60(%KEYP), %KEY + aesenc %KEY, %STATE + movaps -0x50(%KEYP), %KEY + aesenc %KEY, %STATE + +.align 4 +.Lenc192: + // AES 192 and 256 + movaps -0x40(%KEYP), %KEY + aesenc %KEY, %STATE + movaps -0x30(%KEYP), %KEY + aesenc %KEY, %STATE + +.align 4 +.Lenc128: + // AES 128, 192, and 256 + movaps -0x20(%KEYP), %KEY + aesenc %KEY, %STATE + movaps -0x10(%KEYP), %KEY + aesenc %KEY, %STATE + movaps (%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x10(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x20(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x30(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x40(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x50(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x60(%KEYP), %KEY + aesenc %KEY, %STATE + movaps 0x70(%KEYP), %KEY + aesenclast %KEY, %STATE // last round + movups %STATE, (%OUTP) // output + + ret + SET_SIZE(aes_encrypt_intel) + + +/* + * aes_decrypt_intel() + * Decrypt a single block (in and out can overlap). + * + * For kernel code, caller is responsible for ensuring kpreempt_disable() + * has been called. This is because %xmm registers are not saved/restored. + * Clear and set the CR0.TS bit on entry and exit, respectively, if TS is set + * on entry. Otherwise, if TS is not set, save and restore %xmm registers + * on the stack. + * + * Temporary register usage: + * %xmm0 State + * %xmm1 Key + * + * Original OpenSolaris Interface: + * void aes_decrypt_intel(const aes_ks_t *ks, int Nr, + * const uint32_t pt[4], uint32_t ct[4])/ + * + * Original Intel OpenSSL Interface: + * void intel_AES_decrypt(const unsigned char *in, unsigned char *out, + * const AES_KEY *key); + */ +ENTRY_NP(aes_decrypt_intel) + + movups (%INP), %STATE // input + movaps (%KEYP), %KEY // key +#ifdef OPENSSL_INTERFACE + mov 240(%KEYP), %NROUNDS32 // round count +#else /* OpenSolaris Interface */ + /* Round count is already present as P2 in %rsi/%esi */ +#endif /* OPENSSL_INTERFACE */ + + pxor %KEY, %STATE // round 0 + lea 0x30(%KEYP), %KEYP + cmp $12, %NROUNDS + jb .Ldec128 + lea 0x20(%KEYP), %KEYP + je .Ldec192 + + // AES 256 + lea 0x20(%KEYP), %KEYP + movaps -0x60(%KEYP), %KEY + aesdec %KEY, %STATE + movaps -0x50(%KEYP), %KEY + aesdec %KEY, %STATE + +.align 4 +.Ldec192: + // AES 192 and 256 + movaps -0x40(%KEYP), %KEY + aesdec %KEY, %STATE + movaps -0x30(%KEYP), %KEY + aesdec %KEY, %STATE + +.align 4 +.Ldec128: + // AES 128, 192, and 256 + movaps -0x20(%KEYP), %KEY + aesdec %KEY, %STATE + movaps -0x10(%KEYP), %KEY + aesdec %KEY, %STATE + movaps (%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x10(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x20(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x30(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x40(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x50(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x60(%KEYP), %KEY + aesdec %KEY, %STATE + movaps 0x70(%KEYP), %KEY + aesdeclast %KEY, %STATE // last round + movups %STATE, (%OUTP) // output + + ret + SET_SIZE(aes_decrypt_intel) + +#endif /* lint || __lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aeskey.c +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aeskey.c @@ -0,0 +1,580 @@ +/* + * --------------------------------------------------------------------------- + * Copyright (c) 1998-2007, Brian Gladman, Worcester, UK. All rights reserved. + * + * LICENSE TERMS + * + * The free distribution and use of this software is allowed (with or without + * changes) provided that: + * + * 1. source code distributions include the above copyright notice, this + * list of conditions and the following disclaimer; + * + * 2. binary distributions include the above copyright notice, this list + * of conditions and the following disclaimer in their documentation; + * + * 3. the name of the copyright holder is not used to endorse products + * built using this software without specific written permission. + * + * DISCLAIMER + * + * This software is provided 'as is' with no explicit or implied warranties + * in respect of its properties, including, but not limited to, correctness + * and/or fitness for purpose. + * --------------------------------------------------------------------------- + * Issue Date: 20/12/2007 + */ + +#include +#include "aesopt.h" +#include "aestab.h" +#include "aestab2.h" + +/* + * Initialise the key schedule from the user supplied key. The key + * length can be specified in bytes, with legal values of 16, 24 + * and 32, or in bits, with legal values of 128, 192 and 256. These + * values correspond with Nk values of 4, 6 and 8 respectively. + * + * The following macros implement a single cycle in the key + * schedule generation process. The number of cycles needed + * for each cx->n_col and nk value is: + * + * nk = 4 5 6 7 8 + * ------------------------------ + * cx->n_col = 4 10 9 8 7 7 + * cx->n_col = 5 14 11 10 9 9 + * cx->n_col = 6 19 15 12 11 11 + * cx->n_col = 7 21 19 16 13 14 + * cx->n_col = 8 29 23 19 17 14 + */ + +/* + * OpenSolaris changes + * 1. Added header files aes_impl.h and aestab2.h + * 2. Changed uint_8t and uint_32t to uint8_t and uint32_t + * 3. Remove code under ifdef USE_VIA_ACE_IF_PRESENT (always undefined) + * 4. Removed always-defined ifdefs FUNCS_IN_C, ENC_KEYING_IN_C, + * AES_128, AES_192, AES_256, AES_VAR defines + * 5. Changed aes_encrypt_key* aes_decrypt_key* functions to "static void" + * 6. Changed N_COLS to MAX_AES_NB + * 7. Replaced functions aes_encrypt_key and aes_decrypt_key with + * OpenSolaris-compatible functions rijndael_key_setup_enc_amd64 and + * rijndael_key_setup_dec_amd64 + * 8. cstyled code and removed lint warnings + */ + +#if defined(REDUCE_CODE_SIZE) +#define ls_box ls_sub + uint32_t ls_sub(const uint32_t t, const uint32_t n); +#define inv_mcol im_sub + uint32_t im_sub(const uint32_t x); +#ifdef ENC_KS_UNROLL +#undef ENC_KS_UNROLL +#endif +#ifdef DEC_KS_UNROLL +#undef DEC_KS_UNROLL +#endif +#endif /* REDUCE_CODE_SIZE */ + + +#define ke4(k, i) \ +{ k[4 * (i) + 4] = ss[0] ^= ls_box(ss[3], 3) ^ t_use(r, c)[i]; \ + k[4 * (i) + 5] = ss[1] ^= ss[0]; \ + k[4 * (i) + 6] = ss[2] ^= ss[1]; \ + k[4 * (i) + 7] = ss[3] ^= ss[2]; \ +} + +static void +aes_encrypt_key128(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[4]; + + rk[0] = ss[0] = word_in(key, 0); + rk[1] = ss[1] = word_in(key, 1); + rk[2] = ss[2] = word_in(key, 2); + rk[3] = ss[3] = word_in(key, 3); + +#ifdef ENC_KS_UNROLL + ke4(rk, 0); ke4(rk, 1); + ke4(rk, 2); ke4(rk, 3); + ke4(rk, 4); ke4(rk, 5); + ke4(rk, 6); ke4(rk, 7); + ke4(rk, 8); +#else + { + uint32_t i; + for (i = 0; i < 9; ++i) + ke4(rk, i); + } +#endif /* ENC_KS_UNROLL */ + ke4(rk, 9); +} + + +#define kef6(k, i) \ +{ k[6 * (i) + 6] = ss[0] ^= ls_box(ss[5], 3) ^ t_use(r, c)[i]; \ + k[6 * (i) + 7] = ss[1] ^= ss[0]; \ + k[6 * (i) + 8] = ss[2] ^= ss[1]; \ + k[6 * (i) + 9] = ss[3] ^= ss[2]; \ +} + +#define ke6(k, i) \ +{ kef6(k, i); \ + k[6 * (i) + 10] = ss[4] ^= ss[3]; \ + k[6 * (i) + 11] = ss[5] ^= ss[4]; \ +} + +static void +aes_encrypt_key192(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[6]; + + rk[0] = ss[0] = word_in(key, 0); + rk[1] = ss[1] = word_in(key, 1); + rk[2] = ss[2] = word_in(key, 2); + rk[3] = ss[3] = word_in(key, 3); + rk[4] = ss[4] = word_in(key, 4); + rk[5] = ss[5] = word_in(key, 5); + +#ifdef ENC_KS_UNROLL + ke6(rk, 0); ke6(rk, 1); + ke6(rk, 2); ke6(rk, 3); + ke6(rk, 4); ke6(rk, 5); + ke6(rk, 6); +#else + { + uint32_t i; + for (i = 0; i < 7; ++i) + ke6(rk, i); + } +#endif /* ENC_KS_UNROLL */ + kef6(rk, 7); +} + + + +#define kef8(k, i) \ +{ k[8 * (i) + 8] = ss[0] ^= ls_box(ss[7], 3) ^ t_use(r, c)[i]; \ + k[8 * (i) + 9] = ss[1] ^= ss[0]; \ + k[8 * (i) + 10] = ss[2] ^= ss[1]; \ + k[8 * (i) + 11] = ss[3] ^= ss[2]; \ +} + +#define ke8(k, i) \ +{ kef8(k, i); \ + k[8 * (i) + 12] = ss[4] ^= ls_box(ss[3], 0); \ + k[8 * (i) + 13] = ss[5] ^= ss[4]; \ + k[8 * (i) + 14] = ss[6] ^= ss[5]; \ + k[8 * (i) + 15] = ss[7] ^= ss[6]; \ +} + +static void +aes_encrypt_key256(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[8]; + + rk[0] = ss[0] = word_in(key, 0); + rk[1] = ss[1] = word_in(key, 1); + rk[2] = ss[2] = word_in(key, 2); + rk[3] = ss[3] = word_in(key, 3); + rk[4] = ss[4] = word_in(key, 4); + rk[5] = ss[5] = word_in(key, 5); + rk[6] = ss[6] = word_in(key, 6); + rk[7] = ss[7] = word_in(key, 7); + +#ifdef ENC_KS_UNROLL + ke8(rk, 0); ke8(rk, 1); + ke8(rk, 2); ke8(rk, 3); + ke8(rk, 4); ke8(rk, 5); +#else + { + uint32_t i; + for (i = 0; i < 6; ++i) + ke8(rk, i); + } +#endif /* ENC_KS_UNROLL */ + kef8(rk, 6); +} + + +/* + * Expand the cipher key into the encryption key schedule. + * + * Return the number of rounds for the given cipher key size. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4 * (Nr + 1). + * + * Parameters: + * rk AES key schedule 32-bit array to be initialized + * cipherKey User key + * keyBits AES key size (128, 192, or 256 bits) + */ +int +rijndael_key_setup_enc_amd64(uint32_t rk[], const uint32_t cipherKey[], + int keyBits) +{ + switch (keyBits) { + case 128: + aes_encrypt_key128((unsigned char *)&cipherKey[0], rk); + return (10); + case 192: + aes_encrypt_key192((unsigned char *)&cipherKey[0], rk); + return (12); + case 256: + aes_encrypt_key256((unsigned char *)&cipherKey[0], rk); + return (14); + default: /* should never get here */ + break; + } + + return (0); +} + + +/* this is used to store the decryption round keys */ +/* in forward or reverse order */ + +#ifdef AES_REV_DKS +#define v(n, i) ((n) - (i) + 2 * ((i) & 3)) +#else +#define v(n, i) (i) +#endif + +#if DEC_ROUND == NO_TABLES +#define ff(x) (x) +#else +#define ff(x) inv_mcol(x) +#if defined(dec_imvars) +#define d_vars dec_imvars +#endif +#endif /* FUNCS_IN_C & DEC_KEYING_IN_C */ + + +#define k4e(k, i) \ +{ k[v(40, (4 * (i)) + 4)] = ss[0] ^= ls_box(ss[3], 3) ^ t_use(r, c)[i]; \ + k[v(40, (4 * (i)) + 5)] = ss[1] ^= ss[0]; \ + k[v(40, (4 * (i)) + 6)] = ss[2] ^= ss[1]; \ + k[v(40, (4 * (i)) + 7)] = ss[3] ^= ss[2]; \ +} + +#if 1 + +#define kdf4(k, i) \ +{ ss[0] = ss[0] ^ ss[2] ^ ss[1] ^ ss[3]; \ + ss[1] = ss[1] ^ ss[3]; \ + ss[2] = ss[2] ^ ss[3]; \ + ss[4] = ls_box(ss[(i + 3) % 4], 3) ^ t_use(r, c)[i]; \ + ss[i % 4] ^= ss[4]; \ + ss[4] ^= k[v(40, (4 * (i)))]; k[v(40, (4 * (i)) + 4)] = ff(ss[4]); \ + ss[4] ^= k[v(40, (4 * (i)) + 1)]; k[v(40, (4 * (i)) + 5)] = ff(ss[4]); \ + ss[4] ^= k[v(40, (4 * (i)) + 2)]; k[v(40, (4 * (i)) + 6)] = ff(ss[4]); \ + ss[4] ^= k[v(40, (4 * (i)) + 3)]; k[v(40, (4 * (i)) + 7)] = ff(ss[4]); \ +} + +#define kd4(k, i) \ +{ ss[4] = ls_box(ss[(i + 3) % 4], 3) ^ t_use(r, c)[i]; \ + ss[i % 4] ^= ss[4]; ss[4] = ff(ss[4]); \ + k[v(40, (4 * (i)) + 4)] = ss[4] ^= k[v(40, (4 * (i)))]; \ + k[v(40, (4 * (i)) + 5)] = ss[4] ^= k[v(40, (4 * (i)) + 1)]; \ + k[v(40, (4 * (i)) + 6)] = ss[4] ^= k[v(40, (4 * (i)) + 2)]; \ + k[v(40, (4 * (i)) + 7)] = ss[4] ^= k[v(40, (4 * (i)) + 3)]; \ +} + +#define kdl4(k, i) \ +{ ss[4] = ls_box(ss[(i + 3) % 4], 3) ^ t_use(r, c)[i]; \ + ss[i % 4] ^= ss[4]; \ + k[v(40, (4 * (i)) + 4)] = (ss[0] ^= ss[1]) ^ ss[2] ^ ss[3]; \ + k[v(40, (4 * (i)) + 5)] = ss[1] ^ ss[3]; \ + k[v(40, (4 * (i)) + 6)] = ss[0]; \ + k[v(40, (4 * (i)) + 7)] = ss[1]; \ +} + +#else + +#define kdf4(k, i) \ +{ ss[0] ^= ls_box(ss[3], 3) ^ t_use(r, c)[i]; \ + k[v(40, (4 * (i)) + 4)] = ff(ss[0]); \ + ss[1] ^= ss[0]; k[v(40, (4 * (i)) + 5)] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[v(40, (4 * (i)) + 6)] = ff(ss[2]); \ + ss[3] ^= ss[2]; k[v(40, (4 * (i)) + 7)] = ff(ss[3]); \ +} + +#define kd4(k, i) \ +{ ss[4] = ls_box(ss[3], 3) ^ t_use(r, c)[i]; \ + ss[0] ^= ss[4]; \ + ss[4] = ff(ss[4]); \ + k[v(40, (4 * (i)) + 4)] = ss[4] ^= k[v(40, (4 * (i)))]; \ + ss[1] ^= ss[0]; \ + k[v(40, (4 * (i)) + 5)] = ss[4] ^= k[v(40, (4 * (i)) + 1)]; \ + ss[2] ^= ss[1]; \ + k[v(40, (4 * (i)) + 6)] = ss[4] ^= k[v(40, (4 * (i)) + 2)]; \ + ss[3] ^= ss[2]; \ + k[v(40, (4 * (i)) + 7)] = ss[4] ^= k[v(40, (4 * (i)) + 3)]; \ +} + +#define kdl4(k, i) \ +{ ss[0] ^= ls_box(ss[3], 3) ^ t_use(r, c)[i]; \ + k[v(40, (4 * (i)) + 4)] = ss[0]; \ + ss[1] ^= ss[0]; k[v(40, (4 * (i)) + 5)] = ss[1]; \ + ss[2] ^= ss[1]; k[v(40, (4 * (i)) + 6)] = ss[2]; \ + ss[3] ^= ss[2]; k[v(40, (4 * (i)) + 7)] = ss[3]; \ +} + +#endif + +static void +aes_decrypt_key128(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[5]; +#if defined(d_vars) + d_vars; +#endif + rk[v(40, (0))] = ss[0] = word_in(key, 0); + rk[v(40, (1))] = ss[1] = word_in(key, 1); + rk[v(40, (2))] = ss[2] = word_in(key, 2); + rk[v(40, (3))] = ss[3] = word_in(key, 3); + +#ifdef DEC_KS_UNROLL + kdf4(rk, 0); kd4(rk, 1); + kd4(rk, 2); kd4(rk, 3); + kd4(rk, 4); kd4(rk, 5); + kd4(rk, 6); kd4(rk, 7); + kd4(rk, 8); kdl4(rk, 9); +#else + { + uint32_t i; + for (i = 0; i < 10; ++i) + k4e(rk, i); +#if !(DEC_ROUND == NO_TABLES) + for (i = MAX_AES_NB; i < 10 * MAX_AES_NB; ++i) + rk[i] = inv_mcol(rk[i]); +#endif + } +#endif /* DEC_KS_UNROLL */ +} + + + +#define k6ef(k, i) \ +{ k[v(48, (6 * (i)) + 6)] = ss[0] ^= ls_box(ss[5], 3) ^ t_use(r, c)[i]; \ + k[v(48, (6 * (i)) + 7)] = ss[1] ^= ss[0]; \ + k[v(48, (6 * (i)) + 8)] = ss[2] ^= ss[1]; \ + k[v(48, (6 * (i)) + 9)] = ss[3] ^= ss[2]; \ +} + +#define k6e(k, i) \ +{ k6ef(k, i); \ + k[v(48, (6 * (i)) + 10)] = ss[4] ^= ss[3]; \ + k[v(48, (6 * (i)) + 11)] = ss[5] ^= ss[4]; \ +} + +#define kdf6(k, i) \ +{ ss[0] ^= ls_box(ss[5], 3) ^ t_use(r, c)[i]; \ + k[v(48, (6 * (i)) + 6)] = ff(ss[0]); \ + ss[1] ^= ss[0]; k[v(48, (6 * (i)) + 7)] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[v(48, (6 * (i)) + 8)] = ff(ss[2]); \ + ss[3] ^= ss[2]; k[v(48, (6 * (i)) + 9)] = ff(ss[3]); \ + ss[4] ^= ss[3]; k[v(48, (6 * (i)) + 10)] = ff(ss[4]); \ + ss[5] ^= ss[4]; k[v(48, (6 * (i)) + 11)] = ff(ss[5]); \ +} + +#define kd6(k, i) \ +{ ss[6] = ls_box(ss[5], 3) ^ t_use(r, c)[i]; \ + ss[0] ^= ss[6]; ss[6] = ff(ss[6]); \ + k[v(48, (6 * (i)) + 6)] = ss[6] ^= k[v(48, (6 * (i)))]; \ + ss[1] ^= ss[0]; \ + k[v(48, (6 * (i)) + 7)] = ss[6] ^= k[v(48, (6 * (i)) + 1)]; \ + ss[2] ^= ss[1]; \ + k[v(48, (6 * (i)) + 8)] = ss[6] ^= k[v(48, (6 * (i)) + 2)]; \ + ss[3] ^= ss[2]; \ + k[v(48, (6 * (i)) + 9)] = ss[6] ^= k[v(48, (6 * (i)) + 3)]; \ + ss[4] ^= ss[3]; \ + k[v(48, (6 * (i)) + 10)] = ss[6] ^= k[v(48, (6 * (i)) + 4)]; \ + ss[5] ^= ss[4]; \ + k[v(48, (6 * (i)) + 11)] = ss[6] ^= k[v(48, (6 * (i)) + 5)]; \ +} + +#define kdl6(k, i) \ +{ ss[0] ^= ls_box(ss[5], 3) ^ t_use(r, c)[i]; \ + k[v(48, (6 * (i)) + 6)] = ss[0]; \ + ss[1] ^= ss[0]; k[v(48, (6 * (i)) + 7)] = ss[1]; \ + ss[2] ^= ss[1]; k[v(48, (6 * (i)) + 8)] = ss[2]; \ + ss[3] ^= ss[2]; k[v(48, (6 * (i)) + 9)] = ss[3]; \ +} + +static void +aes_decrypt_key192(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[7]; +#if defined(d_vars) + d_vars; +#endif + rk[v(48, (0))] = ss[0] = word_in(key, 0); + rk[v(48, (1))] = ss[1] = word_in(key, 1); + rk[v(48, (2))] = ss[2] = word_in(key, 2); + rk[v(48, (3))] = ss[3] = word_in(key, 3); + +#ifdef DEC_KS_UNROLL + ss[4] = word_in(key, 4); + rk[v(48, (4))] = ff(ss[4]); + ss[5] = word_in(key, 5); + rk[v(48, (5))] = ff(ss[5]); + kdf6(rk, 0); kd6(rk, 1); + kd6(rk, 2); kd6(rk, 3); + kd6(rk, 4); kd6(rk, 5); + kd6(rk, 6); kdl6(rk, 7); +#else + rk[v(48, (4))] = ss[4] = word_in(key, 4); + rk[v(48, (5))] = ss[5] = word_in(key, 5); + { + uint32_t i; + + for (i = 0; i < 7; ++i) + k6e(rk, i); + k6ef(rk, 7); +#if !(DEC_ROUND == NO_TABLES) + for (i = MAX_AES_NB; i < 12 * MAX_AES_NB; ++i) + rk[i] = inv_mcol(rk[i]); +#endif + } +#endif +} + + + +#define k8ef(k, i) \ +{ k[v(56, (8 * (i)) + 8)] = ss[0] ^= ls_box(ss[7], 3) ^ t_use(r, c)[i]; \ + k[v(56, (8 * (i)) + 9)] = ss[1] ^= ss[0]; \ + k[v(56, (8 * (i)) + 10)] = ss[2] ^= ss[1]; \ + k[v(56, (8 * (i)) + 11)] = ss[3] ^= ss[2]; \ +} + +#define k8e(k, i) \ +{ k8ef(k, i); \ + k[v(56, (8 * (i)) + 12)] = ss[4] ^= ls_box(ss[3], 0); \ + k[v(56, (8 * (i)) + 13)] = ss[5] ^= ss[4]; \ + k[v(56, (8 * (i)) + 14)] = ss[6] ^= ss[5]; \ + k[v(56, (8 * (i)) + 15)] = ss[7] ^= ss[6]; \ +} + +#define kdf8(k, i) \ +{ ss[0] ^= ls_box(ss[7], 3) ^ t_use(r, c)[i]; \ + k[v(56, (8 * (i)) + 8)] = ff(ss[0]); \ + ss[1] ^= ss[0]; k[v(56, (8 * (i)) + 9)] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[v(56, (8 * (i)) + 10)] = ff(ss[2]); \ + ss[3] ^= ss[2]; k[v(56, (8 * (i)) + 11)] = ff(ss[3]); \ + ss[4] ^= ls_box(ss[3], 0); k[v(56, (8 * (i)) + 12)] = ff(ss[4]); \ + ss[5] ^= ss[4]; k[v(56, (8 * (i)) + 13)] = ff(ss[5]); \ + ss[6] ^= ss[5]; k[v(56, (8 * (i)) + 14)] = ff(ss[6]); \ + ss[7] ^= ss[6]; k[v(56, (8 * (i)) + 15)] = ff(ss[7]); \ +} + +#define kd8(k, i) \ +{ ss[8] = ls_box(ss[7], 3) ^ t_use(r, c)[i]; \ + ss[0] ^= ss[8]; \ + ss[8] = ff(ss[8]); \ + k[v(56, (8 * (i)) + 8)] = ss[8] ^= k[v(56, (8 * (i)))]; \ + ss[1] ^= ss[0]; \ + k[v(56, (8 * (i)) + 9)] = ss[8] ^= k[v(56, (8 * (i)) + 1)]; \ + ss[2] ^= ss[1]; \ + k[v(56, (8 * (i)) + 10)] = ss[8] ^= k[v(56, (8 * (i)) + 2)]; \ + ss[3] ^= ss[2]; \ + k[v(56, (8 * (i)) + 11)] = ss[8] ^= k[v(56, (8 * (i)) + 3)]; \ + ss[8] = ls_box(ss[3], 0); \ + ss[4] ^= ss[8]; \ + ss[8] = ff(ss[8]); \ + k[v(56, (8 * (i)) + 12)] = ss[8] ^= k[v(56, (8 * (i)) + 4)]; \ + ss[5] ^= ss[4]; \ + k[v(56, (8 * (i)) + 13)] = ss[8] ^= k[v(56, (8 * (i)) + 5)]; \ + ss[6] ^= ss[5]; \ + k[v(56, (8 * (i)) + 14)] = ss[8] ^= k[v(56, (8 * (i)) + 6)]; \ + ss[7] ^= ss[6]; \ + k[v(56, (8 * (i)) + 15)] = ss[8] ^= k[v(56, (8 * (i)) + 7)]; \ +} + +#define kdl8(k, i) \ +{ ss[0] ^= ls_box(ss[7], 3) ^ t_use(r, c)[i]; \ + k[v(56, (8 * (i)) + 8)] = ss[0]; \ + ss[1] ^= ss[0]; k[v(56, (8 * (i)) + 9)] = ss[1]; \ + ss[2] ^= ss[1]; k[v(56, (8 * (i)) + 10)] = ss[2]; \ + ss[3] ^= ss[2]; k[v(56, (8 * (i)) + 11)] = ss[3]; \ +} + +static void +aes_decrypt_key256(const unsigned char *key, uint32_t rk[]) +{ + uint32_t ss[9]; +#if defined(d_vars) + d_vars; +#endif + rk[v(56, (0))] = ss[0] = word_in(key, 0); + rk[v(56, (1))] = ss[1] = word_in(key, 1); + rk[v(56, (2))] = ss[2] = word_in(key, 2); + rk[v(56, (3))] = ss[3] = word_in(key, 3); + +#ifdef DEC_KS_UNROLL + ss[4] = word_in(key, 4); + rk[v(56, (4))] = ff(ss[4]); + ss[5] = word_in(key, 5); + rk[v(56, (5))] = ff(ss[5]); + ss[6] = word_in(key, 6); + rk[v(56, (6))] = ff(ss[6]); + ss[7] = word_in(key, 7); + rk[v(56, (7))] = ff(ss[7]); + kdf8(rk, 0); kd8(rk, 1); + kd8(rk, 2); kd8(rk, 3); + kd8(rk, 4); kd8(rk, 5); + kdl8(rk, 6); +#else + rk[v(56, (4))] = ss[4] = word_in(key, 4); + rk[v(56, (5))] = ss[5] = word_in(key, 5); + rk[v(56, (6))] = ss[6] = word_in(key, 6); + rk[v(56, (7))] = ss[7] = word_in(key, 7); + { + uint32_t i; + + for (i = 0; i < 6; ++i) + k8e(rk, i); + k8ef(rk, 6); +#if !(DEC_ROUND == NO_TABLES) + for (i = MAX_AES_NB; i < 14 * MAX_AES_NB; ++i) + rk[i] = inv_mcol(rk[i]); +#endif + } +#endif /* DEC_KS_UNROLL */ +} + + +/* + * Expand the cipher key into the decryption key schedule. + * + * Return the number of rounds for the given cipher key size. + * The size of the key schedule depends on the number of rounds + * (which can be computed from the size of the key), i.e. 4 * (Nr + 1). + * + * Parameters: + * rk AES key schedule 32-bit array to be initialized + * cipherKey User key + * keyBits AES key size (128, 192, or 256 bits) + */ +int +rijndael_key_setup_dec_amd64(uint32_t rk[], const uint32_t cipherKey[], + int keyBits) +{ + switch (keyBits) { + case 128: + aes_decrypt_key128((unsigned char *)&cipherKey[0], rk); + return (10); + case 192: + aes_decrypt_key192((unsigned char *)&cipherKey[0], rk); + return (12); + case 256: + aes_decrypt_key256((unsigned char *)&cipherKey[0], rk); + return (14); + default: /* should never get here */ + break; + } + + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aesopt.h +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aesopt.h @@ -0,0 +1,770 @@ +/* + * --------------------------------------------------------------------------- + * Copyright (c) 1998-2007, Brian Gladman, Worcester, UK. All rights reserved. + * + * LICENSE TERMS + * + * The free distribution and use of this software is allowed (with or without + * changes) provided that: + * + * 1. source code distributions include the above copyright notice, this + * list of conditions and the following disclaimer; + * + * 2. binary distributions include the above copyright notice, this list + * of conditions and the following disclaimer in their documentation; + * + * 3. the name of the copyright holder is not used to endorse products + * built using this software without specific written permission. + * + * DISCLAIMER + * + * This software is provided 'as is' with no explicit or implied warranties + * in respect of its properties, including, but not limited to, correctness + * and/or fitness for purpose. + * --------------------------------------------------------------------------- + * Issue Date: 20/12/2007 + * + * This file contains the compilation options for AES (Rijndael) and code + * that is common across encryption, key scheduling and table generation. + * + * OPERATION + * + * These source code files implement the AES algorithm Rijndael designed by + * Joan Daemen and Vincent Rijmen. This version is designed for the standard + * block size of 16 bytes and for key sizes of 128, 192 and 256 bits (16, 24 + * and 32 bytes). + * + * This version is designed for flexibility and speed using operations on + * 32-bit words rather than operations on bytes. It can be compiled with + * either big or little endian internal byte order but is faster when the + * native byte order for the processor is used. + * + * THE CIPHER INTERFACE + * + * The cipher interface is implemented as an array of bytes in which lower + * AES bit sequence indexes map to higher numeric significance within bytes. + */ + +/* + * OpenSolaris changes + * 1. Added __cplusplus and _AESTAB_H header guards + * 2. Added header files sys/types.h and aes_impl.h + * 3. Added defines for AES_ENCRYPT, AES_DECRYPT, AES_REV_DKS, and ASM_AMD64_C + * 4. Moved defines for IS_BIG_ENDIAN, IS_LITTLE_ENDIAN, PLATFORM_BYTE_ORDER + * from brg_endian.h + * 5. Undefined VIA_ACE_POSSIBLE and ASSUME_VIA_ACE_PRESENT + * 6. Changed uint_8t and uint_32t to uint8_t and uint32_t + * 7. Defined aes_sw32 as htonl() for byte swapping + * 8. Cstyled and hdrchk code + * + */ + +#ifndef _AESOPT_H +#define _AESOPT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/* SUPPORT FEATURES */ +#define AES_ENCRYPT /* if support for encryption is needed */ +#define AES_DECRYPT /* if support for decryption is needed */ + +/* PLATFORM-SPECIFIC FEATURES */ +#define IS_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ +#define IS_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ +#define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN +#define AES_REV_DKS /* define to reverse decryption key schedule */ + + +/* + * CONFIGURATION - THE USE OF DEFINES + * Later in this section there are a number of defines that control the + * operation of the code. In each section, the purpose of each define is + * explained so that the relevant form can be included or excluded by + * setting either 1's or 0's respectively on the branches of the related + * #if clauses. The following local defines should not be changed. + */ + +#define ENCRYPTION_IN_C 1 +#define DECRYPTION_IN_C 2 +#define ENC_KEYING_IN_C 4 +#define DEC_KEYING_IN_C 8 + +#define NO_TABLES 0 +#define ONE_TABLE 1 +#define FOUR_TABLES 4 +#define NONE 0 +#define PARTIAL 1 +#define FULL 2 + +/* --- START OF USER CONFIGURED OPTIONS --- */ + +/* + * 1. BYTE ORDER WITHIN 32 BIT WORDS + * + * The fundamental data processing units in Rijndael are 8-bit bytes. The + * input, output and key input are all enumerated arrays of bytes in which + * bytes are numbered starting at zero and increasing to one less than the + * number of bytes in the array in question. This enumeration is only used + * for naming bytes and does not imply any adjacency or order relationship + * from one byte to another. When these inputs and outputs are considered + * as bit sequences, bits 8*n to 8*n+7 of the bit sequence are mapped to + * byte[n] with bit 8n+i in the sequence mapped to bit 7-i within the byte. + * In this implementation bits are numbered from 0 to 7 starting at the + * numerically least significant end of each byte. Bit n represents 2^n. + * + * However, Rijndael can be implemented more efficiently using 32-bit + * words by packing bytes into words so that bytes 4*n to 4*n+3 are placed + * into word[n]. While in principle these bytes can be assembled into words + * in any positions, this implementation only supports the two formats in + * which bytes in adjacent positions within words also have adjacent byte + * numbers. This order is called big-endian if the lowest numbered bytes + * in words have the highest numeric significance and little-endian if the + * opposite applies. + * + * This code can work in either order irrespective of the order used by the + * machine on which it runs. Normally the internal byte order will be set + * to the order of the processor on which the code is to be run but this + * define can be used to reverse this in special situations + * + * WARNING: Assembler code versions rely on PLATFORM_BYTE_ORDER being set. + * This define will hence be redefined later (in section 4) if necessary + */ + +#if 1 +#define ALGORITHM_BYTE_ORDER PLATFORM_BYTE_ORDER +#elif 0 +#define ALGORITHM_BYTE_ORDER IS_LITTLE_ENDIAN +#elif 0 +#define ALGORITHM_BYTE_ORDER IS_BIG_ENDIAN +#else +#error The algorithm byte order is not defined +#endif + +/* 2. VIA ACE SUPPORT */ + +#if defined(__GNUC__) && defined(__i386__) || \ + defined(_WIN32) && defined(_M_IX86) && \ + !(defined(_WIN64) || defined(_WIN32_WCE) || \ + defined(_MSC_VER) && (_MSC_VER <= 800)) +#define VIA_ACE_POSSIBLE +#endif + +/* + * Define this option if support for the VIA ACE is required. This uses + * inline assembler instructions and is only implemented for the Microsoft, + * Intel and GCC compilers. If VIA ACE is known to be present, then defining + * ASSUME_VIA_ACE_PRESENT will remove the ordinary encryption/decryption + * code. If USE_VIA_ACE_IF_PRESENT is defined then VIA ACE will be used if + * it is detected (both present and enabled) but the normal AES code will + * also be present. + * + * When VIA ACE is to be used, all AES encryption contexts MUST be 16 byte + * aligned; other input/output buffers do not need to be 16 byte aligned + * but there are very large performance gains if this can be arranged. + * VIA ACE also requires the decryption key schedule to be in reverse + * order (which later checks below ensure). + */ + +/* VIA ACE is not used here for OpenSolaris: */ +#undef VIA_ACE_POSSIBLE +#undef ASSUME_VIA_ACE_PRESENT + +#if 0 && defined(VIA_ACE_POSSIBLE) && !defined(USE_VIA_ACE_IF_PRESENT) +#define USE_VIA_ACE_IF_PRESENT +#endif + +#if 0 && defined(VIA_ACE_POSSIBLE) && !defined(ASSUME_VIA_ACE_PRESENT) +#define ASSUME_VIA_ACE_PRESENT +#endif + + +/* + * 3. ASSEMBLER SUPPORT + * + * This define (which can be on the command line) enables the use of the + * assembler code routines for encryption, decryption and key scheduling + * as follows: + * + * ASM_X86_V1C uses the assembler (aes_x86_v1.asm) with large tables for + * encryption and decryption and but with key scheduling in C + * ASM_X86_V2 uses assembler (aes_x86_v2.asm) with compressed tables for + * encryption, decryption and key scheduling + * ASM_X86_V2C uses assembler (aes_x86_v2.asm) with compressed tables for + * encryption and decryption and but with key scheduling in C + * ASM_AMD64_C uses assembler (aes_amd64.asm) with compressed tables for + * encryption and decryption and but with key scheduling in C + * + * Change one 'if 0' below to 'if 1' to select the version or define + * as a compilation option. + */ + +#if 0 && !defined(ASM_X86_V1C) +#define ASM_X86_V1C +#elif 0 && !defined(ASM_X86_V2) +#define ASM_X86_V2 +#elif 0 && !defined(ASM_X86_V2C) +#define ASM_X86_V2C +#elif 1 && !defined(ASM_AMD64_C) +#define ASM_AMD64_C +#endif + +#if (defined(ASM_X86_V1C) || defined(ASM_X86_V2) || defined(ASM_X86_V2C)) && \ + !defined(_M_IX86) || defined(ASM_AMD64_C) && !defined(_M_X64) && \ + !defined(__amd64) +#error Assembler code is only available for x86 and AMD64 systems +#endif + +/* + * 4. FAST INPUT/OUTPUT OPERATIONS. + * + * On some machines it is possible to improve speed by transferring the + * bytes in the input and output arrays to and from the internal 32-bit + * variables by addressing these arrays as if they are arrays of 32-bit + * words. On some machines this will always be possible but there may + * be a large performance penalty if the byte arrays are not aligned on + * the normal word boundaries. On other machines this technique will + * lead to memory access errors when such 32-bit word accesses are not + * properly aligned. The option SAFE_IO avoids such problems but will + * often be slower on those machines that support misaligned access + * (especially so if care is taken to align the input and output byte + * arrays on 32-bit word boundaries). If SAFE_IO is not defined it is + * assumed that access to byte arrays as if they are arrays of 32-bit + * words will not cause problems when such accesses are misaligned. + */ +#if 1 && !defined(_MSC_VER) +#define SAFE_IO +#endif + +/* + * 5. LOOP UNROLLING + * + * The code for encryption and decryption cycles through a number of rounds + * that can be implemented either in a loop or by expanding the code into a + * long sequence of instructions, the latter producing a larger program but + * one that will often be much faster. The latter is called loop unrolling. + * There are also potential speed advantages in expanding two iterations in + * a loop with half the number of iterations, which is called partial loop + * unrolling. The following options allow partial or full loop unrolling + * to be set independently for encryption and decryption + */ +#if 1 +#define ENC_UNROLL FULL +#elif 0 +#define ENC_UNROLL PARTIAL +#else +#define ENC_UNROLL NONE +#endif + +#if 1 +#define DEC_UNROLL FULL +#elif 0 +#define DEC_UNROLL PARTIAL +#else +#define DEC_UNROLL NONE +#endif + +#if 1 +#define ENC_KS_UNROLL +#endif + +#if 1 +#define DEC_KS_UNROLL +#endif + +/* + * 6. FAST FINITE FIELD OPERATIONS + * + * If this section is included, tables are used to provide faster finite + * field arithmetic. This has no effect if FIXED_TABLES is defined. + */ +#if 1 +#define FF_TABLES +#endif + +/* + * 7. INTERNAL STATE VARIABLE FORMAT + * + * The internal state of Rijndael is stored in a number of local 32-bit + * word variables which can be defined either as an array or as individual + * names variables. Include this section if you want to store these local + * variables in arrays. Otherwise individual local variables will be used. + */ +#if 1 +#define ARRAYS +#endif + +/* + * 8. FIXED OR DYNAMIC TABLES + * + * When this section is included the tables used by the code are compiled + * statically into the binary file. Otherwise the subroutine aes_init() + * must be called to compute them before the code is first used. + */ +#if 1 && !(defined(_MSC_VER) && (_MSC_VER <= 800)) +#define FIXED_TABLES +#endif + +/* + * 9. MASKING OR CASTING FROM LONGER VALUES TO BYTES + * + * In some systems it is better to mask longer values to extract bytes + * rather than using a cast. This option allows this choice. + */ +#if 0 +#define to_byte(x) ((uint8_t)(x)) +#else +#define to_byte(x) ((x) & 0xff) +#endif + +/* + * 10. TABLE ALIGNMENT + * + * On some systems speed will be improved by aligning the AES large lookup + * tables on particular boundaries. This define should be set to a power of + * two giving the desired alignment. It can be left undefined if alignment + * is not needed. This option is specific to the Micrsoft VC++ compiler - + * it seems to sometimes cause trouble for the VC++ version 6 compiler. + */ + +#if 1 && defined(_MSC_VER) && (_MSC_VER >= 1300) +#define TABLE_ALIGN 32 +#endif + +/* + * 11. REDUCE CODE AND TABLE SIZE + * + * This replaces some expanded macros with function calls if AES_ASM_V2 or + * AES_ASM_V2C are defined + */ + +#if 1 && (defined(ASM_X86_V2) || defined(ASM_X86_V2C)) +#define REDUCE_CODE_SIZE +#endif + +/* + * 12. TABLE OPTIONS + * + * This cipher proceeds by repeating in a number of cycles known as rounds + * which are implemented by a round function which is optionally be speeded + * up using tables. The basic tables are 256 32-bit words, with either + * one or four tables being required for each round function depending on + * how much speed is required. Encryption and decryption round functions + * are different and the last encryption and decryption round functions are + * different again making four different round functions in all. + * + * This means that: + * 1. Normal encryption and decryption rounds can each use either 0, 1 + * or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + * 2. The last encryption and decryption rounds can also use either 0, 1 + * or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + * + * Include or exclude the appropriate definitions below to set the number + * of tables used by this implementation. + */ + +#if 1 /* set tables for the normal encryption round */ +#define ENC_ROUND FOUR_TABLES +#elif 0 +#define ENC_ROUND ONE_TABLE +#else +#define ENC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the last encryption round */ +#define LAST_ENC_ROUND FOUR_TABLES +#elif 0 +#define LAST_ENC_ROUND ONE_TABLE +#else +#define LAST_ENC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the normal decryption round */ +#define DEC_ROUND FOUR_TABLES +#elif 0 +#define DEC_ROUND ONE_TABLE +#else +#define DEC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the last decryption round */ +#define LAST_DEC_ROUND FOUR_TABLES +#elif 0 +#define LAST_DEC_ROUND ONE_TABLE +#else +#define LAST_DEC_ROUND NO_TABLES +#endif + +/* + * The decryption key schedule can be speeded up with tables in the same + * way that the round functions can. Include or exclude the following + * defines to set this requirement. + */ +#if 1 +#define KEY_SCHED FOUR_TABLES +#elif 0 +#define KEY_SCHED ONE_TABLE +#else +#define KEY_SCHED NO_TABLES +#endif + +/* ---- END OF USER CONFIGURED OPTIONS ---- */ + +/* VIA ACE support is only available for VC++ and GCC */ + +#if !defined(_MSC_VER) && !defined(__GNUC__) +#if defined(ASSUME_VIA_ACE_PRESENT) +#undef ASSUME_VIA_ACE_PRESENT +#endif +#if defined(USE_VIA_ACE_IF_PRESENT) +#undef USE_VIA_ACE_IF_PRESENT +#endif +#endif + +#if defined(ASSUME_VIA_ACE_PRESENT) && !defined(USE_VIA_ACE_IF_PRESENT) +#define USE_VIA_ACE_IF_PRESENT +#endif + +#if defined(USE_VIA_ACE_IF_PRESENT) && !defined(AES_REV_DKS) +#define AES_REV_DKS +#endif + +/* Assembler support requires the use of platform byte order */ + +#if (defined(ASM_X86_V1C) || defined(ASM_X86_V2C) || defined(ASM_AMD64_C)) && \ + (ALGORITHM_BYTE_ORDER != PLATFORM_BYTE_ORDER) +#undef ALGORITHM_BYTE_ORDER +#define ALGORITHM_BYTE_ORDER PLATFORM_BYTE_ORDER +#endif + +/* + * In this implementation the columns of the state array are each held in + * 32-bit words. The state array can be held in various ways: in an array + * of words, in a number of individual word variables or in a number of + * processor registers. The following define maps a variable name x and + * a column number c to the way the state array variable is to be held. + * The first define below maps the state into an array x[c] whereas the + * second form maps the state into a number of individual variables x0, + * x1, etc. Another form could map individual state columns to machine + * register names. + */ + +#if defined(ARRAYS) +#define s(x, c) x[c] +#else +#define s(x, c) x##c +#endif + +/* + * This implementation provides subroutines for encryption, decryption + * and for setting the three key lengths (separately) for encryption + * and decryption. Since not all functions are needed, masks are set + * up here to determine which will be implemented in C + */ + +#if !defined(AES_ENCRYPT) +#define EFUNCS_IN_C 0 +#elif defined(ASSUME_VIA_ACE_PRESENT) || defined(ASM_X86_V1C) || \ + defined(ASM_X86_V2C) || defined(ASM_AMD64_C) +#define EFUNCS_IN_C ENC_KEYING_IN_C +#elif !defined(ASM_X86_V2) +#define EFUNCS_IN_C (ENCRYPTION_IN_C | ENC_KEYING_IN_C) +#else +#define EFUNCS_IN_C 0 +#endif + +#if !defined(AES_DECRYPT) +#define DFUNCS_IN_C 0 +#elif defined(ASSUME_VIA_ACE_PRESENT) || defined(ASM_X86_V1C) || \ + defined(ASM_X86_V2C) || defined(ASM_AMD64_C) +#define DFUNCS_IN_C DEC_KEYING_IN_C +#elif !defined(ASM_X86_V2) +#define DFUNCS_IN_C (DECRYPTION_IN_C | DEC_KEYING_IN_C) +#else +#define DFUNCS_IN_C 0 +#endif + +#define FUNCS_IN_C (EFUNCS_IN_C | DFUNCS_IN_C) + +/* END OF CONFIGURATION OPTIONS */ + +/* Disable or report errors on some combinations of options */ + +#if ENC_ROUND == NO_TABLES && LAST_ENC_ROUND != NO_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND NO_TABLES +#elif ENC_ROUND == ONE_TABLE && LAST_ENC_ROUND == FOUR_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND ONE_TABLE +#endif + +#if ENC_ROUND == NO_TABLES && ENC_UNROLL != NONE +#undef ENC_UNROLL +#define ENC_UNROLL NONE +#endif + +#if DEC_ROUND == NO_TABLES && LAST_DEC_ROUND != NO_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND NO_TABLES +#elif DEC_ROUND == ONE_TABLE && LAST_DEC_ROUND == FOUR_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND ONE_TABLE +#endif + +#if DEC_ROUND == NO_TABLES && DEC_UNROLL != NONE +#undef DEC_UNROLL +#define DEC_UNROLL NONE +#endif + +#if (ALGORITHM_BYTE_ORDER == IS_LITTLE_ENDIAN) +#define aes_sw32 htonl +#elif defined(bswap32) +#define aes_sw32 bswap32 +#elif defined(bswap_32) +#define aes_sw32 bswap_32 +#else +#define brot(x, n) (((uint32_t)(x) << (n)) | ((uint32_t)(x) >> (32 - (n)))) +#define aes_sw32(x) ((brot((x), 8) & 0x00ff00ff) | (brot((x), 24) & 0xff00ff00)) +#endif + + +/* + * upr(x, n): rotates bytes within words by n positions, moving bytes to + * higher index positions with wrap around into low positions + * ups(x, n): moves bytes by n positions to higher index positions in + * words but without wrap around + * bval(x, n): extracts a byte from a word + * + * WARNING: The definitions given here are intended only for use with + * unsigned variables and with shift counts that are compile + * time constants + */ + +#if (ALGORITHM_BYTE_ORDER == IS_LITTLE_ENDIAN) +#define upr(x, n) (((uint32_t)(x) << (8 * (n))) | \ + ((uint32_t)(x) >> (32 - 8 * (n)))) +#define ups(x, n) ((uint32_t)(x) << (8 * (n))) +#define bval(x, n) to_byte((x) >> (8 * (n))) +#define bytes2word(b0, b1, b2, b3) \ + (((uint32_t)(b3) << 24) | ((uint32_t)(b2) << 16) | \ + ((uint32_t)(b1) << 8) | (b0)) +#endif + +#if (ALGORITHM_BYTE_ORDER == IS_BIG_ENDIAN) +#define upr(x, n) (((uint32_t)(x) >> (8 * (n))) | \ + ((uint32_t)(x) << (32 - 8 * (n)))) +#define ups(x, n) ((uint32_t)(x) >> (8 * (n))) +#define bval(x, n) to_byte((x) >> (24 - 8 * (n))) +#define bytes2word(b0, b1, b2, b3) \ + (((uint32_t)(b0) << 24) | ((uint32_t)(b1) << 16) | \ + ((uint32_t)(b2) << 8) | (b3)) +#endif + +#if defined(SAFE_IO) +#define word_in(x, c) bytes2word(((const uint8_t *)(x) + 4 * c)[0], \ + ((const uint8_t *)(x) + 4 * c)[1], \ + ((const uint8_t *)(x) + 4 * c)[2], \ + ((const uint8_t *)(x) + 4 * c)[3]) +#define word_out(x, c, v) { ((uint8_t *)(x) + 4 * c)[0] = bval(v, 0); \ + ((uint8_t *)(x) + 4 * c)[1] = bval(v, 1); \ + ((uint8_t *)(x) + 4 * c)[2] = bval(v, 2); \ + ((uint8_t *)(x) + 4 * c)[3] = bval(v, 3); } +#elif (ALGORITHM_BYTE_ORDER == PLATFORM_BYTE_ORDER) +#define word_in(x, c) (*((uint32_t *)(x) + (c))) +#define word_out(x, c, v) (*((uint32_t *)(x) + (c)) = (v)) +#else +#define word_in(x, c) aes_sw32(*((uint32_t *)(x) + (c))) +#define word_out(x, c, v) (*((uint32_t *)(x) + (c)) = aes_sw32(v)) +#endif + +/* the finite field modular polynomial and elements */ + +#define WPOLY 0x011b +#define BPOLY 0x1b + +/* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + +#define m1 0x80808080 +#define m2 0x7f7f7f7f +#define gf_mulx(x) ((((x) & m2) << 1) ^ ((((x) & m1) >> 7) * BPOLY)) + +/* + * The following defines provide alternative definitions of gf_mulx that might + * give improved performance if a fast 32-bit multiply is not available. Note + * that a temporary variable u needs to be defined where gf_mulx is used. + * + * #define gf_mulx(x) (u = (x) & m1, u |= (u >> 1), ((x) & m2) << 1) ^ \ + * ((u >> 3) | (u >> 6)) + * #define m4 (0x01010101 * BPOLY) + * #define gf_mulx(x) (u = (x) & m1, ((x) & m2) << 1) ^ ((u - (u >> 7)) \ + * & m4) + */ + +/* Work out which tables are needed for the different options */ + +#if defined(ASM_X86_V1C) +#if defined(ENC_ROUND) +#undef ENC_ROUND +#endif +#define ENC_ROUND FOUR_TABLES +#if defined(LAST_ENC_ROUND) +#undef LAST_ENC_ROUND +#endif +#define LAST_ENC_ROUND FOUR_TABLES +#if defined(DEC_ROUND) +#undef DEC_ROUND +#endif +#define DEC_ROUND FOUR_TABLES +#if defined(LAST_DEC_ROUND) +#undef LAST_DEC_ROUND +#endif +#define LAST_DEC_ROUND FOUR_TABLES +#if defined(KEY_SCHED) +#undef KEY_SCHED +#define KEY_SCHED FOUR_TABLES +#endif +#endif + +#if (FUNCS_IN_C & ENCRYPTION_IN_C) || defined(ASM_X86_V1C) +#if ENC_ROUND == ONE_TABLE +#define FT1_SET +#elif ENC_ROUND == FOUR_TABLES +#define FT4_SET +#else +#define SBX_SET +#endif +#if LAST_ENC_ROUND == ONE_TABLE +#define FL1_SET +#elif LAST_ENC_ROUND == FOUR_TABLES +#define FL4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif + +#if (FUNCS_IN_C & DECRYPTION_IN_C) || defined(ASM_X86_V1C) +#if DEC_ROUND == ONE_TABLE +#define IT1_SET +#elif DEC_ROUND == FOUR_TABLES +#define IT4_SET +#else +#define ISB_SET +#endif +#if LAST_DEC_ROUND == ONE_TABLE +#define IL1_SET +#elif LAST_DEC_ROUND == FOUR_TABLES +#define IL4_SET +#elif !defined(ISB_SET) +#define ISB_SET +#endif +#endif + + +#if !(defined(REDUCE_CODE_SIZE) && (defined(ASM_X86_V2) || \ + defined(ASM_X86_V2C))) +#if ((FUNCS_IN_C & ENC_KEYING_IN_C) || (FUNCS_IN_C & DEC_KEYING_IN_C)) +#if KEY_SCHED == ONE_TABLE +#if !defined(FL1_SET) && !defined(FL4_SET) +#define LS1_SET +#endif +#elif KEY_SCHED == FOUR_TABLES +#if !defined(FL4_SET) +#define LS4_SET +#endif +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif +#if (FUNCS_IN_C & DEC_KEYING_IN_C) +#if KEY_SCHED == ONE_TABLE +#define IM1_SET +#elif KEY_SCHED == FOUR_TABLES +#define IM4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif +#endif + +/* generic definitions of Rijndael macros that use tables */ + +#define no_table(x, box, vf, rf, c) bytes2word(\ + box[bval(vf(x, 0, c), rf(0, c))], \ + box[bval(vf(x, 1, c), rf(1, c))], \ + box[bval(vf(x, 2, c), rf(2, c))], \ + box[bval(vf(x, 3, c), rf(3, c))]) + +#define one_table(x, op, tab, vf, rf, c) \ + (tab[bval(vf(x, 0, c), rf(0, c))] \ + ^ op(tab[bval(vf(x, 1, c), rf(1, c))], 1) \ + ^ op(tab[bval(vf(x, 2, c), rf(2, c))], 2) \ + ^ op(tab[bval(vf(x, 3, c), rf(3, c))], 3)) + +#define four_tables(x, tab, vf, rf, c) \ + (tab[0][bval(vf(x, 0, c), rf(0, c))] \ + ^ tab[1][bval(vf(x, 1, c), rf(1, c))] \ + ^ tab[2][bval(vf(x, 2, c), rf(2, c))] \ + ^ tab[3][bval(vf(x, 3, c), rf(3, c))]) + +#define vf1(x, r, c) (x) +#define rf1(r, c) (r) +#define rf2(r, c) ((8+r-c)&3) + +/* + * Perform forward and inverse column mix operation on four bytes in long word + * x in parallel. NOTE: x must be a simple variable, NOT an expression in + * these macros. + */ + +#if !(defined(REDUCE_CODE_SIZE) && (defined(ASM_X86_V2) || \ + defined(ASM_X86_V2C))) + +#if defined(FM4_SET) /* not currently used */ +#define fwd_mcol(x) four_tables(x, t_use(f, m), vf1, rf1, 0) +#elif defined(FM1_SET) /* not currently used */ +#define fwd_mcol(x) one_table(x, upr, t_use(f, m), vf1, rf1, 0) +#else +#define dec_fmvars uint32_t g2 +#define fwd_mcol(x) (g2 = gf_mulx(x), g2 ^ upr((x) ^ g2, 3) ^ \ + upr((x), 2) ^ upr((x), 1)) +#endif + +#if defined(IM4_SET) +#define inv_mcol(x) four_tables(x, t_use(i, m), vf1, rf1, 0) +#elif defined(IM1_SET) +#define inv_mcol(x) one_table(x, upr, t_use(i, m), vf1, rf1, 0) +#else +#define dec_imvars uint32_t g2, g4, g9 +#define inv_mcol(x) (g2 = gf_mulx(x), g4 = gf_mulx(g2), g9 = \ + (x) ^ gf_mulx(g4), g4 ^= g9, \ + (x) ^ g2 ^ g4 ^ upr(g2 ^ g9, 3) ^ \ + upr(g4, 2) ^ upr(g9, 1)) +#endif + +#if defined(FL4_SET) +#define ls_box(x, c) four_tables(x, t_use(f, l), vf1, rf2, c) +#elif defined(LS4_SET) +#define ls_box(x, c) four_tables(x, t_use(l, s), vf1, rf2, c) +#elif defined(FL1_SET) +#define ls_box(x, c) one_table(x, upr, t_use(f, l), vf1, rf2, c) +#elif defined(LS1_SET) +#define ls_box(x, c) one_table(x, upr, t_use(l, s), vf1, rf2, c) +#else +#define ls_box(x, c) no_table(x, t_use(s, box), vf1, rf2, c) +#endif + +#endif + +#if defined(ASM_X86_V1C) && defined(AES_DECRYPT) && !defined(ISB_SET) +#define ISB_SET +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _AESOPT_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aestab.h +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aestab.h @@ -0,0 +1,165 @@ +/* + * --------------------------------------------------------------------------- + * Copyright (c) 1998-2007, Brian Gladman, Worcester, UK. All rights reserved. + * + * LICENSE TERMS + * + * The free distribution and use of this software is allowed (with or without + * changes) provided that: + * + * 1. source code distributions include the above copyright notice, this + * list of conditions and the following disclaimer; + * + * 2. binary distributions include the above copyright notice, this list + * of conditions and the following disclaimer in their documentation; + * + * 3. the name of the copyright holder is not used to endorse products + * built using this software without specific written permission. + * + * DISCLAIMER + * + * This software is provided 'as is' with no explicit or implied warranties + * in respect of its properties, including, but not limited to, correctness + * and/or fitness for purpose. + * --------------------------------------------------------------------------- + * Issue Date: 20/12/2007 + * + * This file contains the code for declaring the tables needed to implement + * AES. The file aesopt.h is assumed to be included before this header file. + * If there are no global variables, the definitions here can be used to put + * the AES tables in a structure so that a pointer can then be added to the + * AES context to pass them to the AES routines that need them. If this + * facility is used, the calling program has to ensure that this pointer is + * managed appropriately. In particular, the value of the t_dec(in, it) item + * in the table structure must be set to zero in order to ensure that the + * tables are initialised. In practice the three code sequences in aeskey.c + * that control the calls to aes_init() and the aes_init() routine itself will + * have to be changed for a specific implementation. If global variables are + * available it will generally be preferable to use them with the precomputed + * FIXED_TABLES option that uses static global tables. + * + * The following defines can be used to control the way the tables + * are defined, initialised and used in embedded environments that + * require special features for these purposes + * + * the 't_dec' construction is used to declare fixed table arrays + * the 't_set' construction is used to set fixed table values + * the 't_use' construction is used to access fixed table values + * + * 256 byte tables: + * + * t_xxx(s, box) => forward S box + * t_xxx(i, box) => inverse S box + * + * 256 32-bit word OR 4 x 256 32-bit word tables: + * + * t_xxx(f, n) => forward normal round + * t_xxx(f, l) => forward last round + * t_xxx(i, n) => inverse normal round + * t_xxx(i, l) => inverse last round + * t_xxx(l, s) => key schedule table + * t_xxx(i, m) => key schedule table + * + * Other variables and tables: + * + * t_xxx(r, c) => the rcon table + */ + +/* + * OpenSolaris OS modifications + * + * 1. Added __cplusplus and _AESTAB_H header guards + * 2. Added header file sys/types.h + * 3. Remove code defined for _MSC_VER + * 4. Changed all variables to "static const" + * 5. Changed uint_8t and uint_32t to uint8_t and uint32_t + * 6. Cstyled and hdrchk code + */ + +#ifndef _AESTAB_H +#define _AESTAB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define t_dec(m, n) t_##m##n +#define t_set(m, n) t_##m##n +#define t_use(m, n) t_##m##n + +#if defined(DO_TABLES) && defined(FIXED_TABLES) +#define d_1(t, n, b, e) static const t n[256] = b(e) +#define d_4(t, n, b, e, f, g, h) static const t n[4][256] = \ + {b(e), b(f), b(g), b(h)} +static const uint32_t t_dec(r, c)[RC_LENGTH] = rc_data(w0); +#else +#define d_1(t, n, b, e) static const t n[256] +#define d_4(t, n, b, e, f, g, h) static const t n[4][256] +static const uint32_t t_dec(r, c)[RC_LENGTH]; +#endif + +#if defined(SBX_SET) + d_1(uint8_t, t_dec(s, box), sb_data, h0); +#endif +#if defined(ISB_SET) + d_1(uint8_t, t_dec(i, box), isb_data, h0); +#endif + +#if defined(FT1_SET) + d_1(uint32_t, t_dec(f, n), sb_data, u0); +#endif +#if defined(FT4_SET) + d_4(uint32_t, t_dec(f, n), sb_data, u0, u1, u2, u3); +#endif + +#if defined(FL1_SET) + d_1(uint32_t, t_dec(f, l), sb_data, w0); +#endif +#if defined(FL4_SET) + d_4(uint32_t, t_dec(f, l), sb_data, w0, w1, w2, w3); +#endif + +#if defined(IT1_SET) + d_1(uint32_t, t_dec(i, n), isb_data, v0); +#endif +#if defined(IT4_SET) + d_4(uint32_t, t_dec(i, n), isb_data, v0, v1, v2, v3); +#endif + +#if defined(IL1_SET) + d_1(uint32_t, t_dec(i, l), isb_data, w0); +#endif +#if defined(IL4_SET) + d_4(uint32_t, t_dec(i, l), isb_data, w0, w1, w2, w3); +#endif + +#if defined(LS1_SET) +#if defined(FL1_SET) +#undef LS1_SET +#else + d_1(uint32_t, t_dec(l, s), sb_data, w0); +#endif +#endif + +#if defined(LS4_SET) +#if defined(FL4_SET) +#undef LS4_SET +#else + d_4(uint32_t, t_dec(l, s), sb_data, w0, w1, w2, w3); +#endif +#endif + +#if defined(IM1_SET) + d_1(uint32_t, t_dec(i, m), mm_data, v0); +#endif +#if defined(IM4_SET) + d_4(uint32_t, t_dec(i, m), mm_data, v0, v1, v2, v3); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _AESTAB_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/aes/aestab2.h +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/aes/aestab2.h @@ -0,0 +1,594 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _AESTAB2_H +#define _AESTAB2_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * To create this file for OpenSolaris: + * 1. Compile and run tablegen.c, from aes-src-04-03-08.zip, + * after defining ASM_AMD64_C + * 2. mv aestab2.c aestab2.h + * 3. Add __cplusplus and _AESTAB2_H header guards + * 3. Add #include + * 4. Change "uint_32t" to "uint32_t" + * 5. Change all variables to "static const" + * 6. Cstyle and hdrchk this file + */ + +#include + +static const uint32_t t_rc[RC_LENGTH] = +{ + 0x00000001, 0x00000002, 0x00000004, 0x00000008, + 0x00000010, 0x00000020, 0x00000040, 0x00000080, + 0x0000001b, 0x00000036 +}; + +static const uint32_t t_ls[4][256] = +{ + { + 0x00000063, 0x0000007c, 0x00000077, 0x0000007b, + 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5, + 0x00000030, 0x00000001, 0x00000067, 0x0000002b, + 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076, + 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d, + 0x000000fa, 0x00000059, 0x00000047, 0x000000f0, + 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af, + 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0, + 0x000000b7, 0x000000fd, 0x00000093, 0x00000026, + 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc, + 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1, + 0x00000071, 0x000000d8, 0x00000031, 0x00000015, + 0x00000004, 0x000000c7, 0x00000023, 0x000000c3, + 0x00000018, 0x00000096, 0x00000005, 0x0000009a, + 0x00000007, 0x00000012, 0x00000080, 0x000000e2, + 0x000000eb, 0x00000027, 0x000000b2, 0x00000075, + 0x00000009, 0x00000083, 0x0000002c, 0x0000001a, + 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0, + 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3, + 0x00000029, 0x000000e3, 0x0000002f, 0x00000084, + 0x00000053, 0x000000d1, 0x00000000, 0x000000ed, + 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b, + 0x0000006a, 0x000000cb, 0x000000be, 0x00000039, + 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf, + 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb, + 0x00000043, 0x0000004d, 0x00000033, 0x00000085, + 0x00000045, 0x000000f9, 0x00000002, 0x0000007f, + 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8, + 0x00000051, 0x000000a3, 0x00000040, 0x0000008f, + 0x00000092, 0x0000009d, 0x00000038, 0x000000f5, + 0x000000bc, 0x000000b6, 0x000000da, 0x00000021, + 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2, + 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec, + 0x0000005f, 0x00000097, 0x00000044, 0x00000017, + 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d, + 0x00000064, 0x0000005d, 0x00000019, 0x00000073, + 0x00000060, 0x00000081, 0x0000004f, 0x000000dc, + 0x00000022, 0x0000002a, 0x00000090, 0x00000088, + 0x00000046, 0x000000ee, 0x000000b8, 0x00000014, + 0x000000de, 0x0000005e, 0x0000000b, 0x000000db, + 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a, + 0x00000049, 0x00000006, 0x00000024, 0x0000005c, + 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062, + 0x00000091, 0x00000095, 0x000000e4, 0x00000079, + 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d, + 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9, + 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea, + 0x00000065, 0x0000007a, 0x000000ae, 0x00000008, + 0x000000ba, 0x00000078, 0x00000025, 0x0000002e, + 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6, + 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f, + 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a, + 0x00000070, 0x0000003e, 0x000000b5, 0x00000066, + 0x00000048, 0x00000003, 0x000000f6, 0x0000000e, + 0x00000061, 0x00000035, 0x00000057, 0x000000b9, + 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e, + 0x000000e1, 0x000000f8, 0x00000098, 0x00000011, + 0x00000069, 0x000000d9, 0x0000008e, 0x00000094, + 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9, + 0x000000ce, 0x00000055, 0x00000028, 0x000000df, + 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d, + 0x000000bf, 0x000000e6, 0x00000042, 0x00000068, + 0x00000041, 0x00000099, 0x0000002d, 0x0000000f, + 0x000000b0, 0x00000054, 0x000000bb, 0x00000016 + }, + { + 0x00006300, 0x00007c00, 0x00007700, 0x00007b00, + 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500, + 0x00003000, 0x00000100, 0x00006700, 0x00002b00, + 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600, + 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00, + 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000, + 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00, + 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000, + 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600, + 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00, + 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100, + 0x00007100, 0x0000d800, 0x00003100, 0x00001500, + 0x00000400, 0x0000c700, 0x00002300, 0x0000c300, + 0x00001800, 0x00009600, 0x00000500, 0x00009a00, + 0x00000700, 0x00001200, 0x00008000, 0x0000e200, + 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500, + 0x00000900, 0x00008300, 0x00002c00, 0x00001a00, + 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000, + 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300, + 0x00002900, 0x0000e300, 0x00002f00, 0x00008400, + 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00, + 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00, + 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900, + 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00, + 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00, + 0x00004300, 0x00004d00, 0x00003300, 0x00008500, + 0x00004500, 0x0000f900, 0x00000200, 0x00007f00, + 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800, + 0x00005100, 0x0000a300, 0x00004000, 0x00008f00, + 0x00009200, 0x00009d00, 0x00003800, 0x0000f500, + 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100, + 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200, + 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00, + 0x00005f00, 0x00009700, 0x00004400, 0x00001700, + 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00, + 0x00006400, 0x00005d00, 0x00001900, 0x00007300, + 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00, + 0x00002200, 0x00002a00, 0x00009000, 0x00008800, + 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400, + 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00, + 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00, + 0x00004900, 0x00000600, 0x00002400, 0x00005c00, + 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200, + 0x00009100, 0x00009500, 0x0000e400, 0x00007900, + 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00, + 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900, + 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00, + 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800, + 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00, + 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600, + 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00, + 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00, + 0x00007000, 0x00003e00, 0x0000b500, 0x00006600, + 0x00004800, 0x00000300, 0x0000f600, 0x00000e00, + 0x00006100, 0x00003500, 0x00005700, 0x0000b900, + 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00, + 0x0000e100, 0x0000f800, 0x00009800, 0x00001100, + 0x00006900, 0x0000d900, 0x00008e00, 0x00009400, + 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900, + 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00, + 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00, + 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800, + 0x00004100, 0x00009900, 0x00002d00, 0x00000f00, + 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600 + }, + { + 0x00630000, 0x007c0000, 0x00770000, 0x007b0000, + 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000, + 0x00300000, 0x00010000, 0x00670000, 0x002b0000, + 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000, + 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000, + 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000, + 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000, + 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000, + 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000, + 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000, + 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000, + 0x00710000, 0x00d80000, 0x00310000, 0x00150000, + 0x00040000, 0x00c70000, 0x00230000, 0x00c30000, + 0x00180000, 0x00960000, 0x00050000, 0x009a0000, + 0x00070000, 0x00120000, 0x00800000, 0x00e20000, + 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000, + 0x00090000, 0x00830000, 0x002c0000, 0x001a0000, + 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000, + 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000, + 0x00290000, 0x00e30000, 0x002f0000, 0x00840000, + 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000, + 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000, + 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000, + 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000, + 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000, + 0x00430000, 0x004d0000, 0x00330000, 0x00850000, + 0x00450000, 0x00f90000, 0x00020000, 0x007f0000, + 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000, + 0x00510000, 0x00a30000, 0x00400000, 0x008f0000, + 0x00920000, 0x009d0000, 0x00380000, 0x00f50000, + 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000, + 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000, + 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000, + 0x005f0000, 0x00970000, 0x00440000, 0x00170000, + 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000, + 0x00640000, 0x005d0000, 0x00190000, 0x00730000, + 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000, + 0x00220000, 0x002a0000, 0x00900000, 0x00880000, + 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000, + 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000, + 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000, + 0x00490000, 0x00060000, 0x00240000, 0x005c0000, + 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000, + 0x00910000, 0x00950000, 0x00e40000, 0x00790000, + 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000, + 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000, + 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000, + 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000, + 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000, + 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000, + 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000, + 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000, + 0x00700000, 0x003e0000, 0x00b50000, 0x00660000, + 0x00480000, 0x00030000, 0x00f60000, 0x000e0000, + 0x00610000, 0x00350000, 0x00570000, 0x00b90000, + 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000, + 0x00e10000, 0x00f80000, 0x00980000, 0x00110000, + 0x00690000, 0x00d90000, 0x008e0000, 0x00940000, + 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000, + 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000, + 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000, + 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000, + 0x00410000, 0x00990000, 0x002d0000, 0x000f0000, + 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000 + }, + { + 0x63000000, 0x7c000000, 0x77000000, 0x7b000000, + 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000, + 0x30000000, 0x01000000, 0x67000000, 0x2b000000, + 0xfe000000, 0xd7000000, 0xab000000, 0x76000000, + 0xca000000, 0x82000000, 0xc9000000, 0x7d000000, + 0xfa000000, 0x59000000, 0x47000000, 0xf0000000, + 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000, + 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000, + 0xb7000000, 0xfd000000, 0x93000000, 0x26000000, + 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000, + 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000, + 0x71000000, 0xd8000000, 0x31000000, 0x15000000, + 0x04000000, 0xc7000000, 0x23000000, 0xc3000000, + 0x18000000, 0x96000000, 0x05000000, 0x9a000000, + 0x07000000, 0x12000000, 0x80000000, 0xe2000000, + 0xeb000000, 0x27000000, 0xb2000000, 0x75000000, + 0x09000000, 0x83000000, 0x2c000000, 0x1a000000, + 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000, + 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000, + 0x29000000, 0xe3000000, 0x2f000000, 0x84000000, + 0x53000000, 0xd1000000, 0x00000000, 0xed000000, + 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000, + 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000, + 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000, + 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000, + 0x43000000, 0x4d000000, 0x33000000, 0x85000000, + 0x45000000, 0xf9000000, 0x02000000, 0x7f000000, + 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000, + 0x51000000, 0xa3000000, 0x40000000, 0x8f000000, + 0x92000000, 0x9d000000, 0x38000000, 0xf5000000, + 0xbc000000, 0xb6000000, 0xda000000, 0x21000000, + 0x10000000, 0xff000000, 0xf3000000, 0xd2000000, + 0xcd000000, 0x0c000000, 0x13000000, 0xec000000, + 0x5f000000, 0x97000000, 0x44000000, 0x17000000, + 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000, + 0x64000000, 0x5d000000, 0x19000000, 0x73000000, + 0x60000000, 0x81000000, 0x4f000000, 0xdc000000, + 0x22000000, 0x2a000000, 0x90000000, 0x88000000, + 0x46000000, 0xee000000, 0xb8000000, 0x14000000, + 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000, + 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000, + 0x49000000, 0x06000000, 0x24000000, 0x5c000000, + 0xc2000000, 0xd3000000, 0xac000000, 0x62000000, + 0x91000000, 0x95000000, 0xe4000000, 0x79000000, + 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000, + 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000, + 0x6c000000, 0x56000000, 0xf4000000, 0xea000000, + 0x65000000, 0x7a000000, 0xae000000, 0x08000000, + 0xba000000, 0x78000000, 0x25000000, 0x2e000000, + 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000, + 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000, + 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000, + 0x70000000, 0x3e000000, 0xb5000000, 0x66000000, + 0x48000000, 0x03000000, 0xf6000000, 0x0e000000, + 0x61000000, 0x35000000, 0x57000000, 0xb9000000, + 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000, + 0xe1000000, 0xf8000000, 0x98000000, 0x11000000, + 0x69000000, 0xd9000000, 0x8e000000, 0x94000000, + 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000, + 0xce000000, 0x55000000, 0x28000000, 0xdf000000, + 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000, + 0xbf000000, 0xe6000000, 0x42000000, 0x68000000, + 0x41000000, 0x99000000, 0x2d000000, 0x0f000000, + 0xb0000000, 0x54000000, 0xbb000000, 0x16000000 + } +}; + +static const uint32_t t_im[4][256] = +{ + { + 0x00000000, 0x0b0d090e, 0x161a121c, 0x1d171b12, + 0x2c342438, 0x27392d36, 0x3a2e3624, 0x31233f2a, + 0x58684870, 0x5365417e, 0x4e725a6c, 0x457f5362, + 0x745c6c48, 0x7f516546, 0x62467e54, 0x694b775a, + 0xb0d090e0, 0xbbdd99ee, 0xa6ca82fc, 0xadc78bf2, + 0x9ce4b4d8, 0x97e9bdd6, 0x8afea6c4, 0x81f3afca, + 0xe8b8d890, 0xe3b5d19e, 0xfea2ca8c, 0xf5afc382, + 0xc48cfca8, 0xcf81f5a6, 0xd296eeb4, 0xd99be7ba, + 0x7bbb3bdb, 0x70b632d5, 0x6da129c7, 0x66ac20c9, + 0x578f1fe3, 0x5c8216ed, 0x41950dff, 0x4a9804f1, + 0x23d373ab, 0x28de7aa5, 0x35c961b7, 0x3ec468b9, + 0x0fe75793, 0x04ea5e9d, 0x19fd458f, 0x12f04c81, + 0xcb6bab3b, 0xc066a235, 0xdd71b927, 0xd67cb029, + 0xe75f8f03, 0xec52860d, 0xf1459d1f, 0xfa489411, + 0x9303e34b, 0x980eea45, 0x8519f157, 0x8e14f859, + 0xbf37c773, 0xb43ace7d, 0xa92dd56f, 0xa220dc61, + 0xf66d76ad, 0xfd607fa3, 0xe07764b1, 0xeb7a6dbf, + 0xda595295, 0xd1545b9b, 0xcc434089, 0xc74e4987, + 0xae053edd, 0xa50837d3, 0xb81f2cc1, 0xb31225cf, + 0x82311ae5, 0x893c13eb, 0x942b08f9, 0x9f2601f7, + 0x46bde64d, 0x4db0ef43, 0x50a7f451, 0x5baafd5f, + 0x6a89c275, 0x6184cb7b, 0x7c93d069, 0x779ed967, + 0x1ed5ae3d, 0x15d8a733, 0x08cfbc21, 0x03c2b52f, + 0x32e18a05, 0x39ec830b, 0x24fb9819, 0x2ff69117, + 0x8dd64d76, 0x86db4478, 0x9bcc5f6a, 0x90c15664, + 0xa1e2694e, 0xaaef6040, 0xb7f87b52, 0xbcf5725c, + 0xd5be0506, 0xdeb30c08, 0xc3a4171a, 0xc8a91e14, + 0xf98a213e, 0xf2872830, 0xef903322, 0xe49d3a2c, + 0x3d06dd96, 0x360bd498, 0x2b1ccf8a, 0x2011c684, + 0x1132f9ae, 0x1a3ff0a0, 0x0728ebb2, 0x0c25e2bc, + 0x656e95e6, 0x6e639ce8, 0x737487fa, 0x78798ef4, + 0x495ab1de, 0x4257b8d0, 0x5f40a3c2, 0x544daacc, + 0xf7daec41, 0xfcd7e54f, 0xe1c0fe5d, 0xeacdf753, + 0xdbeec879, 0xd0e3c177, 0xcdf4da65, 0xc6f9d36b, + 0xafb2a431, 0xa4bfad3f, 0xb9a8b62d, 0xb2a5bf23, + 0x83868009, 0x888b8907, 0x959c9215, 0x9e919b1b, + 0x470a7ca1, 0x4c0775af, 0x51106ebd, 0x5a1d67b3, + 0x6b3e5899, 0x60335197, 0x7d244a85, 0x7629438b, + 0x1f6234d1, 0x146f3ddf, 0x097826cd, 0x02752fc3, + 0x335610e9, 0x385b19e7, 0x254c02f5, 0x2e410bfb, + 0x8c61d79a, 0x876cde94, 0x9a7bc586, 0x9176cc88, + 0xa055f3a2, 0xab58faac, 0xb64fe1be, 0xbd42e8b0, + 0xd4099fea, 0xdf0496e4, 0xc2138df6, 0xc91e84f8, + 0xf83dbbd2, 0xf330b2dc, 0xee27a9ce, 0xe52aa0c0, + 0x3cb1477a, 0x37bc4e74, 0x2aab5566, 0x21a65c68, + 0x10856342, 0x1b886a4c, 0x069f715e, 0x0d927850, + 0x64d90f0a, 0x6fd40604, 0x72c31d16, 0x79ce1418, + 0x48ed2b32, 0x43e0223c, 0x5ef7392e, 0x55fa3020, + 0x01b79aec, 0x0aba93e2, 0x17ad88f0, 0x1ca081fe, + 0x2d83bed4, 0x268eb7da, 0x3b99acc8, 0x3094a5c6, + 0x59dfd29c, 0x52d2db92, 0x4fc5c080, 0x44c8c98e, + 0x75ebf6a4, 0x7ee6ffaa, 0x63f1e4b8, 0x68fcedb6, + 0xb1670a0c, 0xba6a0302, 0xa77d1810, 0xac70111e, + 0x9d532e34, 0x965e273a, 0x8b493c28, 0x80443526, + 0xe90f427c, 0xe2024b72, 0xff155060, 0xf418596e, + 0xc53b6644, 0xce366f4a, 0xd3217458, 0xd82c7d56, + 0x7a0ca137, 0x7101a839, 0x6c16b32b, 0x671bba25, + 0x5638850f, 0x5d358c01, 0x40229713, 0x4b2f9e1d, + 0x2264e947, 0x2969e049, 0x347efb5b, 0x3f73f255, + 0x0e50cd7f, 0x055dc471, 0x184adf63, 0x1347d66d, + 0xcadc31d7, 0xc1d138d9, 0xdcc623cb, 0xd7cb2ac5, + 0xe6e815ef, 0xede51ce1, 0xf0f207f3, 0xfbff0efd, + 0x92b479a7, 0x99b970a9, 0x84ae6bbb, 0x8fa362b5, + 0xbe805d9f, 0xb58d5491, 0xa89a4f83, 0xa397468d + }, + { + 0x00000000, 0x0d090e0b, 0x1a121c16, 0x171b121d, + 0x3424382c, 0x392d3627, 0x2e36243a, 0x233f2a31, + 0x68487058, 0x65417e53, 0x725a6c4e, 0x7f536245, + 0x5c6c4874, 0x5165467f, 0x467e5462, 0x4b775a69, + 0xd090e0b0, 0xdd99eebb, 0xca82fca6, 0xc78bf2ad, + 0xe4b4d89c, 0xe9bdd697, 0xfea6c48a, 0xf3afca81, + 0xb8d890e8, 0xb5d19ee3, 0xa2ca8cfe, 0xafc382f5, + 0x8cfca8c4, 0x81f5a6cf, 0x96eeb4d2, 0x9be7bad9, + 0xbb3bdb7b, 0xb632d570, 0xa129c76d, 0xac20c966, + 0x8f1fe357, 0x8216ed5c, 0x950dff41, 0x9804f14a, + 0xd373ab23, 0xde7aa528, 0xc961b735, 0xc468b93e, + 0xe757930f, 0xea5e9d04, 0xfd458f19, 0xf04c8112, + 0x6bab3bcb, 0x66a235c0, 0x71b927dd, 0x7cb029d6, + 0x5f8f03e7, 0x52860dec, 0x459d1ff1, 0x489411fa, + 0x03e34b93, 0x0eea4598, 0x19f15785, 0x14f8598e, + 0x37c773bf, 0x3ace7db4, 0x2dd56fa9, 0x20dc61a2, + 0x6d76adf6, 0x607fa3fd, 0x7764b1e0, 0x7a6dbfeb, + 0x595295da, 0x545b9bd1, 0x434089cc, 0x4e4987c7, + 0x053eddae, 0x0837d3a5, 0x1f2cc1b8, 0x1225cfb3, + 0x311ae582, 0x3c13eb89, 0x2b08f994, 0x2601f79f, + 0xbde64d46, 0xb0ef434d, 0xa7f45150, 0xaafd5f5b, + 0x89c2756a, 0x84cb7b61, 0x93d0697c, 0x9ed96777, + 0xd5ae3d1e, 0xd8a73315, 0xcfbc2108, 0xc2b52f03, + 0xe18a0532, 0xec830b39, 0xfb981924, 0xf691172f, + 0xd64d768d, 0xdb447886, 0xcc5f6a9b, 0xc1566490, + 0xe2694ea1, 0xef6040aa, 0xf87b52b7, 0xf5725cbc, + 0xbe0506d5, 0xb30c08de, 0xa4171ac3, 0xa91e14c8, + 0x8a213ef9, 0x872830f2, 0x903322ef, 0x9d3a2ce4, + 0x06dd963d, 0x0bd49836, 0x1ccf8a2b, 0x11c68420, + 0x32f9ae11, 0x3ff0a01a, 0x28ebb207, 0x25e2bc0c, + 0x6e95e665, 0x639ce86e, 0x7487fa73, 0x798ef478, + 0x5ab1de49, 0x57b8d042, 0x40a3c25f, 0x4daacc54, + 0xdaec41f7, 0xd7e54ffc, 0xc0fe5de1, 0xcdf753ea, + 0xeec879db, 0xe3c177d0, 0xf4da65cd, 0xf9d36bc6, + 0xb2a431af, 0xbfad3fa4, 0xa8b62db9, 0xa5bf23b2, + 0x86800983, 0x8b890788, 0x9c921595, 0x919b1b9e, + 0x0a7ca147, 0x0775af4c, 0x106ebd51, 0x1d67b35a, + 0x3e58996b, 0x33519760, 0x244a857d, 0x29438b76, + 0x6234d11f, 0x6f3ddf14, 0x7826cd09, 0x752fc302, + 0x5610e933, 0x5b19e738, 0x4c02f525, 0x410bfb2e, + 0x61d79a8c, 0x6cde9487, 0x7bc5869a, 0x76cc8891, + 0x55f3a2a0, 0x58faacab, 0x4fe1beb6, 0x42e8b0bd, + 0x099fead4, 0x0496e4df, 0x138df6c2, 0x1e84f8c9, + 0x3dbbd2f8, 0x30b2dcf3, 0x27a9ceee, 0x2aa0c0e5, + 0xb1477a3c, 0xbc4e7437, 0xab55662a, 0xa65c6821, + 0x85634210, 0x886a4c1b, 0x9f715e06, 0x9278500d, + 0xd90f0a64, 0xd406046f, 0xc31d1672, 0xce141879, + 0xed2b3248, 0xe0223c43, 0xf7392e5e, 0xfa302055, + 0xb79aec01, 0xba93e20a, 0xad88f017, 0xa081fe1c, + 0x83bed42d, 0x8eb7da26, 0x99acc83b, 0x94a5c630, + 0xdfd29c59, 0xd2db9252, 0xc5c0804f, 0xc8c98e44, + 0xebf6a475, 0xe6ffaa7e, 0xf1e4b863, 0xfcedb668, + 0x670a0cb1, 0x6a0302ba, 0x7d1810a7, 0x70111eac, + 0x532e349d, 0x5e273a96, 0x493c288b, 0x44352680, + 0x0f427ce9, 0x024b72e2, 0x155060ff, 0x18596ef4, + 0x3b6644c5, 0x366f4ace, 0x217458d3, 0x2c7d56d8, + 0x0ca1377a, 0x01a83971, 0x16b32b6c, 0x1bba2567, + 0x38850f56, 0x358c015d, 0x22971340, 0x2f9e1d4b, + 0x64e94722, 0x69e04929, 0x7efb5b34, 0x73f2553f, + 0x50cd7f0e, 0x5dc47105, 0x4adf6318, 0x47d66d13, + 0xdc31d7ca, 0xd138d9c1, 0xc623cbdc, 0xcb2ac5d7, + 0xe815efe6, 0xe51ce1ed, 0xf207f3f0, 0xff0efdfb, + 0xb479a792, 0xb970a999, 0xae6bbb84, 0xa362b58f, + 0x805d9fbe, 0x8d5491b5, 0x9a4f83a8, 0x97468da3 + }, + { + 0x00000000, 0x090e0b0d, 0x121c161a, 0x1b121d17, + 0x24382c34, 0x2d362739, 0x36243a2e, 0x3f2a3123, + 0x48705868, 0x417e5365, 0x5a6c4e72, 0x5362457f, + 0x6c48745c, 0x65467f51, 0x7e546246, 0x775a694b, + 0x90e0b0d0, 0x99eebbdd, 0x82fca6ca, 0x8bf2adc7, + 0xb4d89ce4, 0xbdd697e9, 0xa6c48afe, 0xafca81f3, + 0xd890e8b8, 0xd19ee3b5, 0xca8cfea2, 0xc382f5af, + 0xfca8c48c, 0xf5a6cf81, 0xeeb4d296, 0xe7bad99b, + 0x3bdb7bbb, 0x32d570b6, 0x29c76da1, 0x20c966ac, + 0x1fe3578f, 0x16ed5c82, 0x0dff4195, 0x04f14a98, + 0x73ab23d3, 0x7aa528de, 0x61b735c9, 0x68b93ec4, + 0x57930fe7, 0x5e9d04ea, 0x458f19fd, 0x4c8112f0, + 0xab3bcb6b, 0xa235c066, 0xb927dd71, 0xb029d67c, + 0x8f03e75f, 0x860dec52, 0x9d1ff145, 0x9411fa48, + 0xe34b9303, 0xea45980e, 0xf1578519, 0xf8598e14, + 0xc773bf37, 0xce7db43a, 0xd56fa92d, 0xdc61a220, + 0x76adf66d, 0x7fa3fd60, 0x64b1e077, 0x6dbfeb7a, + 0x5295da59, 0x5b9bd154, 0x4089cc43, 0x4987c74e, + 0x3eddae05, 0x37d3a508, 0x2cc1b81f, 0x25cfb312, + 0x1ae58231, 0x13eb893c, 0x08f9942b, 0x01f79f26, + 0xe64d46bd, 0xef434db0, 0xf45150a7, 0xfd5f5baa, + 0xc2756a89, 0xcb7b6184, 0xd0697c93, 0xd967779e, + 0xae3d1ed5, 0xa73315d8, 0xbc2108cf, 0xb52f03c2, + 0x8a0532e1, 0x830b39ec, 0x981924fb, 0x91172ff6, + 0x4d768dd6, 0x447886db, 0x5f6a9bcc, 0x566490c1, + 0x694ea1e2, 0x6040aaef, 0x7b52b7f8, 0x725cbcf5, + 0x0506d5be, 0x0c08deb3, 0x171ac3a4, 0x1e14c8a9, + 0x213ef98a, 0x2830f287, 0x3322ef90, 0x3a2ce49d, + 0xdd963d06, 0xd498360b, 0xcf8a2b1c, 0xc6842011, + 0xf9ae1132, 0xf0a01a3f, 0xebb20728, 0xe2bc0c25, + 0x95e6656e, 0x9ce86e63, 0x87fa7374, 0x8ef47879, + 0xb1de495a, 0xb8d04257, 0xa3c25f40, 0xaacc544d, + 0xec41f7da, 0xe54ffcd7, 0xfe5de1c0, 0xf753eacd, + 0xc879dbee, 0xc177d0e3, 0xda65cdf4, 0xd36bc6f9, + 0xa431afb2, 0xad3fa4bf, 0xb62db9a8, 0xbf23b2a5, + 0x80098386, 0x8907888b, 0x9215959c, 0x9b1b9e91, + 0x7ca1470a, 0x75af4c07, 0x6ebd5110, 0x67b35a1d, + 0x58996b3e, 0x51976033, 0x4a857d24, 0x438b7629, + 0x34d11f62, 0x3ddf146f, 0x26cd0978, 0x2fc30275, + 0x10e93356, 0x19e7385b, 0x02f5254c, 0x0bfb2e41, + 0xd79a8c61, 0xde94876c, 0xc5869a7b, 0xcc889176, + 0xf3a2a055, 0xfaacab58, 0xe1beb64f, 0xe8b0bd42, + 0x9fead409, 0x96e4df04, 0x8df6c213, 0x84f8c91e, + 0xbbd2f83d, 0xb2dcf330, 0xa9ceee27, 0xa0c0e52a, + 0x477a3cb1, 0x4e7437bc, 0x55662aab, 0x5c6821a6, + 0x63421085, 0x6a4c1b88, 0x715e069f, 0x78500d92, + 0x0f0a64d9, 0x06046fd4, 0x1d1672c3, 0x141879ce, + 0x2b3248ed, 0x223c43e0, 0x392e5ef7, 0x302055fa, + 0x9aec01b7, 0x93e20aba, 0x88f017ad, 0x81fe1ca0, + 0xbed42d83, 0xb7da268e, 0xacc83b99, 0xa5c63094, + 0xd29c59df, 0xdb9252d2, 0xc0804fc5, 0xc98e44c8, + 0xf6a475eb, 0xffaa7ee6, 0xe4b863f1, 0xedb668fc, + 0x0a0cb167, 0x0302ba6a, 0x1810a77d, 0x111eac70, + 0x2e349d53, 0x273a965e, 0x3c288b49, 0x35268044, + 0x427ce90f, 0x4b72e202, 0x5060ff15, 0x596ef418, + 0x6644c53b, 0x6f4ace36, 0x7458d321, 0x7d56d82c, + 0xa1377a0c, 0xa8397101, 0xb32b6c16, 0xba25671b, + 0x850f5638, 0x8c015d35, 0x97134022, 0x9e1d4b2f, + 0xe9472264, 0xe0492969, 0xfb5b347e, 0xf2553f73, + 0xcd7f0e50, 0xc471055d, 0xdf63184a, 0xd66d1347, + 0x31d7cadc, 0x38d9c1d1, 0x23cbdcc6, 0x2ac5d7cb, + 0x15efe6e8, 0x1ce1ede5, 0x07f3f0f2, 0x0efdfbff, + 0x79a792b4, 0x70a999b9, 0x6bbb84ae, 0x62b58fa3, + 0x5d9fbe80, 0x5491b58d, 0x4f83a89a, 0x468da397 + }, + { + 0x00000000, 0x0e0b0d09, 0x1c161a12, 0x121d171b, + 0x382c3424, 0x3627392d, 0x243a2e36, 0x2a31233f, + 0x70586848, 0x7e536541, 0x6c4e725a, 0x62457f53, + 0x48745c6c, 0x467f5165, 0x5462467e, 0x5a694b77, + 0xe0b0d090, 0xeebbdd99, 0xfca6ca82, 0xf2adc78b, + 0xd89ce4b4, 0xd697e9bd, 0xc48afea6, 0xca81f3af, + 0x90e8b8d8, 0x9ee3b5d1, 0x8cfea2ca, 0x82f5afc3, + 0xa8c48cfc, 0xa6cf81f5, 0xb4d296ee, 0xbad99be7, + 0xdb7bbb3b, 0xd570b632, 0xc76da129, 0xc966ac20, + 0xe3578f1f, 0xed5c8216, 0xff41950d, 0xf14a9804, + 0xab23d373, 0xa528de7a, 0xb735c961, 0xb93ec468, + 0x930fe757, 0x9d04ea5e, 0x8f19fd45, 0x8112f04c, + 0x3bcb6bab, 0x35c066a2, 0x27dd71b9, 0x29d67cb0, + 0x03e75f8f, 0x0dec5286, 0x1ff1459d, 0x11fa4894, + 0x4b9303e3, 0x45980eea, 0x578519f1, 0x598e14f8, + 0x73bf37c7, 0x7db43ace, 0x6fa92dd5, 0x61a220dc, + 0xadf66d76, 0xa3fd607f, 0xb1e07764, 0xbfeb7a6d, + 0x95da5952, 0x9bd1545b, 0x89cc4340, 0x87c74e49, + 0xddae053e, 0xd3a50837, 0xc1b81f2c, 0xcfb31225, + 0xe582311a, 0xeb893c13, 0xf9942b08, 0xf79f2601, + 0x4d46bde6, 0x434db0ef, 0x5150a7f4, 0x5f5baafd, + 0x756a89c2, 0x7b6184cb, 0x697c93d0, 0x67779ed9, + 0x3d1ed5ae, 0x3315d8a7, 0x2108cfbc, 0x2f03c2b5, + 0x0532e18a, 0x0b39ec83, 0x1924fb98, 0x172ff691, + 0x768dd64d, 0x7886db44, 0x6a9bcc5f, 0x6490c156, + 0x4ea1e269, 0x40aaef60, 0x52b7f87b, 0x5cbcf572, + 0x06d5be05, 0x08deb30c, 0x1ac3a417, 0x14c8a91e, + 0x3ef98a21, 0x30f28728, 0x22ef9033, 0x2ce49d3a, + 0x963d06dd, 0x98360bd4, 0x8a2b1ccf, 0x842011c6, + 0xae1132f9, 0xa01a3ff0, 0xb20728eb, 0xbc0c25e2, + 0xe6656e95, 0xe86e639c, 0xfa737487, 0xf478798e, + 0xde495ab1, 0xd04257b8, 0xc25f40a3, 0xcc544daa, + 0x41f7daec, 0x4ffcd7e5, 0x5de1c0fe, 0x53eacdf7, + 0x79dbeec8, 0x77d0e3c1, 0x65cdf4da, 0x6bc6f9d3, + 0x31afb2a4, 0x3fa4bfad, 0x2db9a8b6, 0x23b2a5bf, + 0x09838680, 0x07888b89, 0x15959c92, 0x1b9e919b, + 0xa1470a7c, 0xaf4c0775, 0xbd51106e, 0xb35a1d67, + 0x996b3e58, 0x97603351, 0x857d244a, 0x8b762943, + 0xd11f6234, 0xdf146f3d, 0xcd097826, 0xc302752f, + 0xe9335610, 0xe7385b19, 0xf5254c02, 0xfb2e410b, + 0x9a8c61d7, 0x94876cde, 0x869a7bc5, 0x889176cc, + 0xa2a055f3, 0xacab58fa, 0xbeb64fe1, 0xb0bd42e8, + 0xead4099f, 0xe4df0496, 0xf6c2138d, 0xf8c91e84, + 0xd2f83dbb, 0xdcf330b2, 0xceee27a9, 0xc0e52aa0, + 0x7a3cb147, 0x7437bc4e, 0x662aab55, 0x6821a65c, + 0x42108563, 0x4c1b886a, 0x5e069f71, 0x500d9278, + 0x0a64d90f, 0x046fd406, 0x1672c31d, 0x1879ce14, + 0x3248ed2b, 0x3c43e022, 0x2e5ef739, 0x2055fa30, + 0xec01b79a, 0xe20aba93, 0xf017ad88, 0xfe1ca081, + 0xd42d83be, 0xda268eb7, 0xc83b99ac, 0xc63094a5, + 0x9c59dfd2, 0x9252d2db, 0x804fc5c0, 0x8e44c8c9, + 0xa475ebf6, 0xaa7ee6ff, 0xb863f1e4, 0xb668fced, + 0x0cb1670a, 0x02ba6a03, 0x10a77d18, 0x1eac7011, + 0x349d532e, 0x3a965e27, 0x288b493c, 0x26804435, + 0x7ce90f42, 0x72e2024b, 0x60ff1550, 0x6ef41859, + 0x44c53b66, 0x4ace366f, 0x58d32174, 0x56d82c7d, + 0x377a0ca1, 0x397101a8, 0x2b6c16b3, 0x25671bba, + 0x0f563885, 0x015d358c, 0x13402297, 0x1d4b2f9e, + 0x472264e9, 0x492969e0, 0x5b347efb, 0x553f73f2, + 0x7f0e50cd, 0x71055dc4, 0x63184adf, 0x6d1347d6, + 0xd7cadc31, 0xd9c1d138, 0xcbdcc623, 0xc5d7cb2a, + 0xefe6e815, 0xe1ede51c, 0xf3f0f207, 0xfdfbff0e, + 0xa792b479, 0xa999b970, 0xbb84ae6b, 0xb58fa362, + 0x9fbe805d, 0x91b58d54, 0x83a89a4f, 0x8da39746 + } +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _AESTAB2_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/modes/gcm_intel.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/modes/gcm_intel.S @@ -0,0 +1,254 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2009 Intel Corporation + * All Rights Reserved. + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Accelerated GHASH implementation with Intel PCLMULQDQ-NI + * instructions. This file contains an accelerated + * Galois Field Multiplication implementation. + * + * PCLMULQDQ is used to accelerate the most time-consuming part of GHASH, + * carry-less multiplication. More information about PCLMULQDQ can be + * found at: + * http://software.intel.com/en-us/articles/ + * carry-less-multiplication-and-its-usage-for-computing-the-gcm-mode/ + * + */ + +/* + * ==================================================================== + * OpenSolaris OS modifications + * + * This source originates as file galois_hash_asm.c from + * Intel Corporation dated September 21, 2009. + * + * This OpenSolaris version has these major changes from the original source: + * + * 1. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, lint(1B) guards, and a dummy C function + * definition for lint. + * + * 2. Formatted code, added comments, and added #includes and #defines. + * + * 3. If bit CR0.TS is set, clear and set the TS bit, after and before + * calling kpreempt_disable() and kpreempt_enable(). + * If the TS bit is not set, Save and restore %xmm registers at the beginning + * and end of function calls (%xmm* registers are not saved and restored by + * during kernel thread preemption). + * + * 4. Removed code to perform hashing. This is already done with C macro + * GHASH in gcm.c. For better performance, this removed code should be + * reintegrated in the future to replace the C GHASH macro. + * + * 5. Added code to byte swap 16-byte input and output. + * + * 6. Folded in comments from the original C source with embedded assembly + * (SB_w_shift_xor.c) + * + * 7. Renamed function and reordered parameters to match OpenSolaris: + * Intel interface: + * void galois_hash_asm(unsigned char *hk, unsigned char *s, + * unsigned char *d, int length) + * OpenSolaris OS interface: + * void gcm_mul_pclmulqdq(uint64_t *x_in, uint64_t *y, uint64_t *res); + * ==================================================================== + */ + + +#if defined(lint) || defined(__lint) + +#include + +/* ARGSUSED */ +void +gcm_mul_pclmulqdq(uint64_t *x_in, uint64_t *y, uint64_t *res) { +} + +#else /* lint */ + +#define _ASM +#include + +/* + * Use this mask to byte-swap a 16-byte integer with the pshufb instruction + */ + +// static uint8_t byte_swap16_mask[] = { +// 15, 14, 13, 12, 11, 10, 9, 8, 7, 6 ,5, 4, 3, 2, 1, 0 }; +.data +.align XMM_ALIGN +.Lbyte_swap16_mask: + .byte 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + + +/* + * void gcm_mul_pclmulqdq(uint64_t *x_in, uint64_t *y, uint64_t *res); + * + * Perform a carry-less multiplication (that is, use XOR instead of the + * multiply operator) on P1 and P2 and place the result in P3. + * + * Byte swap the input and the output. + * + * Note: x_in, y, and res all point to a block of 20-byte numbers + * (an array of two 64-bit integers). + * + * Note2: For kernel code, caller is responsible for ensuring + * kpreempt_disable() has been called. This is because %xmm registers are + * not saved/restored. Clear and set the CR0.TS bit on entry and exit, + * respectively, if TS is set on entry. Otherwise, if TS is not set, + * save and restore %xmm registers on the stack. + * + * Note3: Original Intel definition: + * void galois_hash_asm(unsigned char *hk, unsigned char *s, + * unsigned char *d, int length) + * + * Note4: Register/parameter mapping: + * Intel: + * Parameter 1: %rcx (copied to %xmm0) hk or x_in + * Parameter 2: %rdx (copied to %xmm1) s or y + * Parameter 3: %rdi (result) d or res + * OpenSolaris: + * Parameter 1: %rdi (copied to %xmm0) x_in + * Parameter 2: %rsi (copied to %xmm1) y + * Parameter 3: %rdx (result) res + */ + +ENTRY_NP(gcm_mul_pclmulqdq) + // + // Copy Parameters + // + movdqu (%rdi), %xmm0 // P1 + movdqu (%rsi), %xmm1 // P2 + + // + // Byte swap 16-byte input + // + lea .Lbyte_swap16_mask(%rip), %rax + movaps (%rax), %xmm10 + pshufb %xmm10, %xmm0 + pshufb %xmm10, %xmm1 + + + // + // Multiply with the hash key + // + movdqu %xmm0, %xmm3 + pclmulqdq $0, %xmm1, %xmm3 // xmm3 holds a0*b0 + + movdqu %xmm0, %xmm4 + pclmulqdq $16, %xmm1, %xmm4 // xmm4 holds a0*b1 + + movdqu %xmm0, %xmm5 + pclmulqdq $1, %xmm1, %xmm5 // xmm5 holds a1*b0 + movdqu %xmm0, %xmm6 + pclmulqdq $17, %xmm1, %xmm6 // xmm6 holds a1*b1 + + pxor %xmm5, %xmm4 // xmm4 holds a0*b1 + a1*b0 + + movdqu %xmm4, %xmm5 // move the contents of xmm4 to xmm5 + psrldq $8, %xmm4 // shift by xmm4 64 bits to the right + pslldq $8, %xmm5 // shift by xmm5 64 bits to the left + pxor %xmm5, %xmm3 + pxor %xmm4, %xmm6 // Register pair holds the result + // of the carry-less multiplication of + // xmm0 by xmm1. + + // We shift the result of the multiplication by one bit position + // to the left to cope for the fact that the bits are reversed. + movdqu %xmm3, %xmm7 + movdqu %xmm6, %xmm8 + pslld $1, %xmm3 + pslld $1, %xmm6 + psrld $31, %xmm7 + psrld $31, %xmm8 + movdqu %xmm7, %xmm9 + pslldq $4, %xmm8 + pslldq $4, %xmm7 + psrldq $12, %xmm9 + por %xmm7, %xmm3 + por %xmm8, %xmm6 + por %xmm9, %xmm6 + + // + // First phase of the reduction + // + // Move xmm3 into xmm7, xmm8, xmm9 in order to perform the shifts + // independently. + movdqu %xmm3, %xmm7 + movdqu %xmm3, %xmm8 + movdqu %xmm3, %xmm9 + pslld $31, %xmm7 // packed right shift shifting << 31 + pslld $30, %xmm8 // packed right shift shifting << 30 + pslld $25, %xmm9 // packed right shift shifting << 25 + pxor %xmm8, %xmm7 // xor the shifted versions + pxor %xmm9, %xmm7 + movdqu %xmm7, %xmm8 + pslldq $12, %xmm7 + psrldq $4, %xmm8 + pxor %xmm7, %xmm3 // first phase of the reduction complete + + // + // Second phase of the reduction + // + // Make 3 copies of xmm3 in xmm2, xmm4, xmm5 for doing these + // shift operations. + movdqu %xmm3, %xmm2 + movdqu %xmm3, %xmm4 // packed left shifting >> 1 + movdqu %xmm3, %xmm5 + psrld $1, %xmm2 + psrld $2, %xmm4 // packed left shifting >> 2 + psrld $7, %xmm5 // packed left shifting >> 7 + pxor %xmm4, %xmm2 // xor the shifted versions + pxor %xmm5, %xmm2 + pxor %xmm8, %xmm2 + pxor %xmm2, %xmm3 + pxor %xmm3, %xmm6 // the result is in xmm6 + + // + // Byte swap 16-byte result + // + pshufb %xmm10, %xmm6 // %xmm10 has the swap mask + + // + // Store the result + // + movdqu %xmm6, (%rdx) // P3 + + + // + // Return + // + ret + SET_SIZE(gcm_mul_pclmulqdq) + +#endif /* lint || __lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/sha1/sha1-x86_64.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/sha1/sha1-x86_64.S @@ -0,0 +1,1353 @@ +/* + * !/usr/bin/env perl + * + * ==================================================================== + * Written by Andy Polyakov 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/. + * ==================================================================== + * + * sha1_block procedure for x86_64. + * + * It was brought to my attention that on EM64T compiler-generated code + * was far behind 32-bit assembler implementation. This is unlike on + * Opteron where compiler-generated code was only 15% behind 32-bit + * assembler, which originally made it hard to motivate the effort. + * There was suggestion to mechanically translate 32-bit code, but I + * dismissed it, reasoning that x86_64 offers enough register bank + * capacity to fully utilize SHA-1 parallelism. Therefore this fresh + * implementation:-) However! While 64-bit code does performs better + * on Opteron, I failed to beat 32-bit assembler on EM64T core. Well, + * x86_64 does offer larger *addressable* bank, but out-of-order core + * reaches for even more registers through dynamic aliasing, and EM64T + * core must have managed to run-time optimize even 32-bit code just as + * good as 64-bit one. Performance improvement is summarized in the + * following table: + * + * gcc 3.4 32-bit asm cycles/byte + * Opteron +45% +20% 6.8 + * Xeon P4 +65% +0% 9.9 + * Core2 +60% +10% 7.0 + * + * + * OpenSolaris OS modifications + * + * Sun elects to use this software under the BSD license. + * + * This source originates from OpenSSL file sha1-x86_64.pl at + * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz + * (presumably for future OpenSSL release 0.9.8h), with these changes: + * + * 1. Added perl "use strict" and declared variables. + * + * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards. + * + * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1) + * assemblers). + * + */ + +/* + * This file was generated by a perl script (sha1-x86_64.pl). The comments from + * the original file have been pasted above. + */ + +#if defined(lint) || defined(__lint) +#include +#include + + +/* ARGSUSED */ +void +sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t blocks) +{ +} + +#else +#define _ASM +#include +ENTRY_NP(sha1_block_data_order) + push %rbx + push %rbp + push %r12 + mov %rsp,%rax + mov %rdi,%r8 # reassigned argument + sub $72,%rsp + mov %rsi,%r9 # reassigned argument + and $-64,%rsp + mov %rdx,%r10 # reassigned argument + mov %rax,64(%rsp) + + mov 0(%r8),%edx + mov 4(%r8),%esi + mov 8(%r8),%edi + mov 12(%r8),%ebp + mov 16(%r8),%r11d +.align 4 +.Lloop: + mov 0(%r9),%eax + bswap %eax + mov %eax,0(%rsp) + lea 0x5a827999(%eax,%r11d),%r12d + mov %edi,%ebx + mov 4(%r9),%eax + mov %edx,%r11d + xor %ebp,%ebx + bswap %eax + rol $5,%r11d + and %esi,%ebx + mov %eax,4(%rsp) + add %r11d,%r12d + xor %ebp,%ebx + rol $30,%esi + add %ebx,%r12d + lea 0x5a827999(%eax,%ebp),%r11d + mov %esi,%ebx + mov 8(%r9),%eax + mov %r12d,%ebp + xor %edi,%ebx + bswap %eax + rol $5,%ebp + and %edx,%ebx + mov %eax,8(%rsp) + add %ebp,%r11d + xor %edi,%ebx + rol $30,%edx + add %ebx,%r11d + lea 0x5a827999(%eax,%edi),%ebp + mov %edx,%ebx + mov 12(%r9),%eax + mov %r11d,%edi + xor %esi,%ebx + bswap %eax + rol $5,%edi + and %r12d,%ebx + mov %eax,12(%rsp) + add %edi,%ebp + xor %esi,%ebx + rol $30,%r12d + add %ebx,%ebp + lea 0x5a827999(%eax,%esi),%edi + mov %r12d,%ebx + mov 16(%r9),%eax + mov %ebp,%esi + xor %edx,%ebx + bswap %eax + rol $5,%esi + and %r11d,%ebx + mov %eax,16(%rsp) + add %esi,%edi + xor %edx,%ebx + rol $30,%r11d + add %ebx,%edi + lea 0x5a827999(%eax,%edx),%esi + mov %r11d,%ebx + mov 20(%r9),%eax + mov %edi,%edx + xor %r12d,%ebx + bswap %eax + rol $5,%edx + and %ebp,%ebx + mov %eax,20(%rsp) + add %edx,%esi + xor %r12d,%ebx + rol $30,%ebp + add %ebx,%esi + lea 0x5a827999(%eax,%r12d),%edx + mov %ebp,%ebx + mov 24(%r9),%eax + mov %esi,%r12d + xor %r11d,%ebx + bswap %eax + rol $5,%r12d + and %edi,%ebx + mov %eax,24(%rsp) + add %r12d,%edx + xor %r11d,%ebx + rol $30,%edi + add %ebx,%edx + lea 0x5a827999(%eax,%r11d),%r12d + mov %edi,%ebx + mov 28(%r9),%eax + mov %edx,%r11d + xor %ebp,%ebx + bswap %eax + rol $5,%r11d + and %esi,%ebx + mov %eax,28(%rsp) + add %r11d,%r12d + xor %ebp,%ebx + rol $30,%esi + add %ebx,%r12d + lea 0x5a827999(%eax,%ebp),%r11d + mov %esi,%ebx + mov 32(%r9),%eax + mov %r12d,%ebp + xor %edi,%ebx + bswap %eax + rol $5,%ebp + and %edx,%ebx + mov %eax,32(%rsp) + add %ebp,%r11d + xor %edi,%ebx + rol $30,%edx + add %ebx,%r11d + lea 0x5a827999(%eax,%edi),%ebp + mov %edx,%ebx + mov 36(%r9),%eax + mov %r11d,%edi + xor %esi,%ebx + bswap %eax + rol $5,%edi + and %r12d,%ebx + mov %eax,36(%rsp) + add %edi,%ebp + xor %esi,%ebx + rol $30,%r12d + add %ebx,%ebp + lea 0x5a827999(%eax,%esi),%edi + mov %r12d,%ebx + mov 40(%r9),%eax + mov %ebp,%esi + xor %edx,%ebx + bswap %eax + rol $5,%esi + and %r11d,%ebx + mov %eax,40(%rsp) + add %esi,%edi + xor %edx,%ebx + rol $30,%r11d + add %ebx,%edi + lea 0x5a827999(%eax,%edx),%esi + mov %r11d,%ebx + mov 44(%r9),%eax + mov %edi,%edx + xor %r12d,%ebx + bswap %eax + rol $5,%edx + and %ebp,%ebx + mov %eax,44(%rsp) + add %edx,%esi + xor %r12d,%ebx + rol $30,%ebp + add %ebx,%esi + lea 0x5a827999(%eax,%r12d),%edx + mov %ebp,%ebx + mov 48(%r9),%eax + mov %esi,%r12d + xor %r11d,%ebx + bswap %eax + rol $5,%r12d + and %edi,%ebx + mov %eax,48(%rsp) + add %r12d,%edx + xor %r11d,%ebx + rol $30,%edi + add %ebx,%edx + lea 0x5a827999(%eax,%r11d),%r12d + mov %edi,%ebx + mov 52(%r9),%eax + mov %edx,%r11d + xor %ebp,%ebx + bswap %eax + rol $5,%r11d + and %esi,%ebx + mov %eax,52(%rsp) + add %r11d,%r12d + xor %ebp,%ebx + rol $30,%esi + add %ebx,%r12d + lea 0x5a827999(%eax,%ebp),%r11d + mov %esi,%ebx + mov 56(%r9),%eax + mov %r12d,%ebp + xor %edi,%ebx + bswap %eax + rol $5,%ebp + and %edx,%ebx + mov %eax,56(%rsp) + add %ebp,%r11d + xor %edi,%ebx + rol $30,%edx + add %ebx,%r11d + lea 0x5a827999(%eax,%edi),%ebp + mov %edx,%ebx + mov 60(%r9),%eax + mov %r11d,%edi + xor %esi,%ebx + bswap %eax + rol $5,%edi + and %r12d,%ebx + mov %eax,60(%rsp) + add %edi,%ebp + xor %esi,%ebx + rol $30,%r12d + add %ebx,%ebp + lea 0x5a827999(%eax,%esi),%edi + mov 0(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 8(%rsp),%eax + xor %edx,%ebx + rol $5,%esi + xor 32(%rsp),%eax + and %r11d,%ebx + add %esi,%edi + xor 52(%rsp),%eax + xor %edx,%ebx + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,0(%rsp) + lea 0x5a827999(%eax,%edx),%esi + mov 4(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 12(%rsp),%eax + xor %r12d,%ebx + rol $5,%edx + xor 36(%rsp),%eax + and %ebp,%ebx + add %edx,%esi + xor 56(%rsp),%eax + xor %r12d,%ebx + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,4(%rsp) + lea 0x5a827999(%eax,%r12d),%edx + mov 8(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 16(%rsp),%eax + xor %r11d,%ebx + rol $5,%r12d + xor 40(%rsp),%eax + and %edi,%ebx + add %r12d,%edx + xor 60(%rsp),%eax + xor %r11d,%ebx + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,8(%rsp) + lea 0x5a827999(%eax,%r11d),%r12d + mov 12(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 20(%rsp),%eax + xor %ebp,%ebx + rol $5,%r11d + xor 44(%rsp),%eax + and %esi,%ebx + add %r11d,%r12d + xor 0(%rsp),%eax + xor %ebp,%ebx + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,12(%rsp) + lea 0x5a827999(%eax,%ebp),%r11d + mov 16(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 24(%rsp),%eax + xor %edi,%ebx + rol $5,%ebp + xor 48(%rsp),%eax + and %edx,%ebx + add %ebp,%r11d + xor 4(%rsp),%eax + xor %edi,%ebx + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,16(%rsp) + lea 0x6ed9eba1(%eax,%edi),%ebp + mov 20(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 28(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 52(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 8(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,20(%rsp) + lea 0x6ed9eba1(%eax,%esi),%edi + mov 24(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 32(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 56(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 12(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,24(%rsp) + lea 0x6ed9eba1(%eax,%edx),%esi + mov 28(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 36(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 60(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 16(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,28(%rsp) + lea 0x6ed9eba1(%eax,%r12d),%edx + mov 32(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 40(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 0(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 20(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,32(%rsp) + lea 0x6ed9eba1(%eax,%r11d),%r12d + mov 36(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 44(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 4(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 24(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,36(%rsp) + lea 0x6ed9eba1(%eax,%ebp),%r11d + mov 40(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 48(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 8(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 28(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,40(%rsp) + lea 0x6ed9eba1(%eax,%edi),%ebp + mov 44(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 52(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 12(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 32(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,44(%rsp) + lea 0x6ed9eba1(%eax,%esi),%edi + mov 48(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 56(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 16(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 36(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,48(%rsp) + lea 0x6ed9eba1(%eax,%edx),%esi + mov 52(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 60(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 20(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 40(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,52(%rsp) + lea 0x6ed9eba1(%eax,%r12d),%edx + mov 56(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 0(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 24(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 44(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,56(%rsp) + lea 0x6ed9eba1(%eax,%r11d),%r12d + mov 60(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 4(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 28(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 48(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,60(%rsp) + lea 0x6ed9eba1(%eax,%ebp),%r11d + mov 0(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 8(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 32(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 52(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,0(%rsp) + lea 0x6ed9eba1(%eax,%edi),%ebp + mov 4(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 12(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 36(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 56(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,4(%rsp) + lea 0x6ed9eba1(%eax,%esi),%edi + mov 8(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 16(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 40(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 60(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,8(%rsp) + lea 0x6ed9eba1(%eax,%edx),%esi + mov 12(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 20(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 44(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 0(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,12(%rsp) + lea 0x6ed9eba1(%eax,%r12d),%edx + mov 16(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 24(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 48(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 4(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,16(%rsp) + lea 0x6ed9eba1(%eax,%r11d),%r12d + mov 20(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 28(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 52(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 8(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,20(%rsp) + lea 0x6ed9eba1(%eax,%ebp),%r11d + mov 24(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 32(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 56(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 12(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,24(%rsp) + lea 0x6ed9eba1(%eax,%edi),%ebp + mov 28(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 36(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 60(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 16(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,28(%rsp) + lea 0x6ed9eba1(%eax,%esi),%edi + mov 32(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 40(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 0(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 20(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,32(%rsp) + lea -0x70e44324(%eax,%edx),%esi + mov 36(%rsp),%eax + mov %ebp,%ebx + mov %ebp,%ecx + xor 44(%rsp),%eax + mov %edi,%edx + and %r11d,%ebx + xor 4(%rsp),%eax + or %r11d,%ecx + rol $5,%edx + xor 24(%rsp),%eax + and %r12d,%ecx + add %edx,%esi + rol $1,%eax + or %ecx,%ebx + rol $30,%ebp + mov %eax,36(%rsp) + add %ebx,%esi + lea -0x70e44324(%eax,%r12d),%edx + mov 40(%rsp),%eax + mov %edi,%ebx + mov %edi,%ecx + xor 48(%rsp),%eax + mov %esi,%r12d + and %ebp,%ebx + xor 8(%rsp),%eax + or %ebp,%ecx + rol $5,%r12d + xor 28(%rsp),%eax + and %r11d,%ecx + add %r12d,%edx + rol $1,%eax + or %ecx,%ebx + rol $30,%edi + mov %eax,40(%rsp) + add %ebx,%edx + lea -0x70e44324(%eax,%r11d),%r12d + mov 44(%rsp),%eax + mov %esi,%ebx + mov %esi,%ecx + xor 52(%rsp),%eax + mov %edx,%r11d + and %edi,%ebx + xor 12(%rsp),%eax + or %edi,%ecx + rol $5,%r11d + xor 32(%rsp),%eax + and %ebp,%ecx + add %r11d,%r12d + rol $1,%eax + or %ecx,%ebx + rol $30,%esi + mov %eax,44(%rsp) + add %ebx,%r12d + lea -0x70e44324(%eax,%ebp),%r11d + mov 48(%rsp),%eax + mov %edx,%ebx + mov %edx,%ecx + xor 56(%rsp),%eax + mov %r12d,%ebp + and %esi,%ebx + xor 16(%rsp),%eax + or %esi,%ecx + rol $5,%ebp + xor 36(%rsp),%eax + and %edi,%ecx + add %ebp,%r11d + rol $1,%eax + or %ecx,%ebx + rol $30,%edx + mov %eax,48(%rsp) + add %ebx,%r11d + lea -0x70e44324(%eax,%edi),%ebp + mov 52(%rsp),%eax + mov %r12d,%ebx + mov %r12d,%ecx + xor 60(%rsp),%eax + mov %r11d,%edi + and %edx,%ebx + xor 20(%rsp),%eax + or %edx,%ecx + rol $5,%edi + xor 40(%rsp),%eax + and %esi,%ecx + add %edi,%ebp + rol $1,%eax + or %ecx,%ebx + rol $30,%r12d + mov %eax,52(%rsp) + add %ebx,%ebp + lea -0x70e44324(%eax,%esi),%edi + mov 56(%rsp),%eax + mov %r11d,%ebx + mov %r11d,%ecx + xor 0(%rsp),%eax + mov %ebp,%esi + and %r12d,%ebx + xor 24(%rsp),%eax + or %r12d,%ecx + rol $5,%esi + xor 44(%rsp),%eax + and %edx,%ecx + add %esi,%edi + rol $1,%eax + or %ecx,%ebx + rol $30,%r11d + mov %eax,56(%rsp) + add %ebx,%edi + lea -0x70e44324(%eax,%edx),%esi + mov 60(%rsp),%eax + mov %ebp,%ebx + mov %ebp,%ecx + xor 4(%rsp),%eax + mov %edi,%edx + and %r11d,%ebx + xor 28(%rsp),%eax + or %r11d,%ecx + rol $5,%edx + xor 48(%rsp),%eax + and %r12d,%ecx + add %edx,%esi + rol $1,%eax + or %ecx,%ebx + rol $30,%ebp + mov %eax,60(%rsp) + add %ebx,%esi + lea -0x70e44324(%eax,%r12d),%edx + mov 0(%rsp),%eax + mov %edi,%ebx + mov %edi,%ecx + xor 8(%rsp),%eax + mov %esi,%r12d + and %ebp,%ebx + xor 32(%rsp),%eax + or %ebp,%ecx + rol $5,%r12d + xor 52(%rsp),%eax + and %r11d,%ecx + add %r12d,%edx + rol $1,%eax + or %ecx,%ebx + rol $30,%edi + mov %eax,0(%rsp) + add %ebx,%edx + lea -0x70e44324(%eax,%r11d),%r12d + mov 4(%rsp),%eax + mov %esi,%ebx + mov %esi,%ecx + xor 12(%rsp),%eax + mov %edx,%r11d + and %edi,%ebx + xor 36(%rsp),%eax + or %edi,%ecx + rol $5,%r11d + xor 56(%rsp),%eax + and %ebp,%ecx + add %r11d,%r12d + rol $1,%eax + or %ecx,%ebx + rol $30,%esi + mov %eax,4(%rsp) + add %ebx,%r12d + lea -0x70e44324(%eax,%ebp),%r11d + mov 8(%rsp),%eax + mov %edx,%ebx + mov %edx,%ecx + xor 16(%rsp),%eax + mov %r12d,%ebp + and %esi,%ebx + xor 40(%rsp),%eax + or %esi,%ecx + rol $5,%ebp + xor 60(%rsp),%eax + and %edi,%ecx + add %ebp,%r11d + rol $1,%eax + or %ecx,%ebx + rol $30,%edx + mov %eax,8(%rsp) + add %ebx,%r11d + lea -0x70e44324(%eax,%edi),%ebp + mov 12(%rsp),%eax + mov %r12d,%ebx + mov %r12d,%ecx + xor 20(%rsp),%eax + mov %r11d,%edi + and %edx,%ebx + xor 44(%rsp),%eax + or %edx,%ecx + rol $5,%edi + xor 0(%rsp),%eax + and %esi,%ecx + add %edi,%ebp + rol $1,%eax + or %ecx,%ebx + rol $30,%r12d + mov %eax,12(%rsp) + add %ebx,%ebp + lea -0x70e44324(%eax,%esi),%edi + mov 16(%rsp),%eax + mov %r11d,%ebx + mov %r11d,%ecx + xor 24(%rsp),%eax + mov %ebp,%esi + and %r12d,%ebx + xor 48(%rsp),%eax + or %r12d,%ecx + rol $5,%esi + xor 4(%rsp),%eax + and %edx,%ecx + add %esi,%edi + rol $1,%eax + or %ecx,%ebx + rol $30,%r11d + mov %eax,16(%rsp) + add %ebx,%edi + lea -0x70e44324(%eax,%edx),%esi + mov 20(%rsp),%eax + mov %ebp,%ebx + mov %ebp,%ecx + xor 28(%rsp),%eax + mov %edi,%edx + and %r11d,%ebx + xor 52(%rsp),%eax + or %r11d,%ecx + rol $5,%edx + xor 8(%rsp),%eax + and %r12d,%ecx + add %edx,%esi + rol $1,%eax + or %ecx,%ebx + rol $30,%ebp + mov %eax,20(%rsp) + add %ebx,%esi + lea -0x70e44324(%eax,%r12d),%edx + mov 24(%rsp),%eax + mov %edi,%ebx + mov %edi,%ecx + xor 32(%rsp),%eax + mov %esi,%r12d + and %ebp,%ebx + xor 56(%rsp),%eax + or %ebp,%ecx + rol $5,%r12d + xor 12(%rsp),%eax + and %r11d,%ecx + add %r12d,%edx + rol $1,%eax + or %ecx,%ebx + rol $30,%edi + mov %eax,24(%rsp) + add %ebx,%edx + lea -0x70e44324(%eax,%r11d),%r12d + mov 28(%rsp),%eax + mov %esi,%ebx + mov %esi,%ecx + xor 36(%rsp),%eax + mov %edx,%r11d + and %edi,%ebx + xor 60(%rsp),%eax + or %edi,%ecx + rol $5,%r11d + xor 16(%rsp),%eax + and %ebp,%ecx + add %r11d,%r12d + rol $1,%eax + or %ecx,%ebx + rol $30,%esi + mov %eax,28(%rsp) + add %ebx,%r12d + lea -0x70e44324(%eax,%ebp),%r11d + mov 32(%rsp),%eax + mov %edx,%ebx + mov %edx,%ecx + xor 40(%rsp),%eax + mov %r12d,%ebp + and %esi,%ebx + xor 0(%rsp),%eax + or %esi,%ecx + rol $5,%ebp + xor 20(%rsp),%eax + and %edi,%ecx + add %ebp,%r11d + rol $1,%eax + or %ecx,%ebx + rol $30,%edx + mov %eax,32(%rsp) + add %ebx,%r11d + lea -0x70e44324(%eax,%edi),%ebp + mov 36(%rsp),%eax + mov %r12d,%ebx + mov %r12d,%ecx + xor 44(%rsp),%eax + mov %r11d,%edi + and %edx,%ebx + xor 4(%rsp),%eax + or %edx,%ecx + rol $5,%edi + xor 24(%rsp),%eax + and %esi,%ecx + add %edi,%ebp + rol $1,%eax + or %ecx,%ebx + rol $30,%r12d + mov %eax,36(%rsp) + add %ebx,%ebp + lea -0x70e44324(%eax,%esi),%edi + mov 40(%rsp),%eax + mov %r11d,%ebx + mov %r11d,%ecx + xor 48(%rsp),%eax + mov %ebp,%esi + and %r12d,%ebx + xor 8(%rsp),%eax + or %r12d,%ecx + rol $5,%esi + xor 28(%rsp),%eax + and %edx,%ecx + add %esi,%edi + rol $1,%eax + or %ecx,%ebx + rol $30,%r11d + mov %eax,40(%rsp) + add %ebx,%edi + lea -0x70e44324(%eax,%edx),%esi + mov 44(%rsp),%eax + mov %ebp,%ebx + mov %ebp,%ecx + xor 52(%rsp),%eax + mov %edi,%edx + and %r11d,%ebx + xor 12(%rsp),%eax + or %r11d,%ecx + rol $5,%edx + xor 32(%rsp),%eax + and %r12d,%ecx + add %edx,%esi + rol $1,%eax + or %ecx,%ebx + rol $30,%ebp + mov %eax,44(%rsp) + add %ebx,%esi + lea -0x70e44324(%eax,%r12d),%edx + mov 48(%rsp),%eax + mov %edi,%ebx + mov %edi,%ecx + xor 56(%rsp),%eax + mov %esi,%r12d + and %ebp,%ebx + xor 16(%rsp),%eax + or %ebp,%ecx + rol $5,%r12d + xor 36(%rsp),%eax + and %r11d,%ecx + add %r12d,%edx + rol $1,%eax + or %ecx,%ebx + rol $30,%edi + mov %eax,48(%rsp) + add %ebx,%edx + lea -0x359d3e2a(%eax,%r11d),%r12d + mov 52(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 60(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 20(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 40(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,52(%rsp) + lea -0x359d3e2a(%eax,%ebp),%r11d + mov 56(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 0(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 24(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 44(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,56(%rsp) + lea -0x359d3e2a(%eax,%edi),%ebp + mov 60(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 4(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 28(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 48(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,60(%rsp) + lea -0x359d3e2a(%eax,%esi),%edi + mov 0(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 8(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 32(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 52(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,0(%rsp) + lea -0x359d3e2a(%eax,%edx),%esi + mov 4(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 12(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 36(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 56(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,4(%rsp) + lea -0x359d3e2a(%eax,%r12d),%edx + mov 8(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 16(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 40(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 60(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,8(%rsp) + lea -0x359d3e2a(%eax,%r11d),%r12d + mov 12(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 20(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 44(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 0(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,12(%rsp) + lea -0x359d3e2a(%eax,%ebp),%r11d + mov 16(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 24(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 48(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 4(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,16(%rsp) + lea -0x359d3e2a(%eax,%edi),%ebp + mov 20(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 28(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 52(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 8(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,20(%rsp) + lea -0x359d3e2a(%eax,%esi),%edi + mov 24(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 32(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 56(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 12(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,24(%rsp) + lea -0x359d3e2a(%eax,%edx),%esi + mov 28(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 36(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 60(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 16(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + mov %eax,28(%rsp) + lea -0x359d3e2a(%eax,%r12d),%edx + mov 32(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 40(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 0(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 20(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + mov %eax,32(%rsp) + lea -0x359d3e2a(%eax,%r11d),%r12d + mov 36(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 44(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 4(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 24(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + mov %eax,36(%rsp) + lea -0x359d3e2a(%eax,%ebp),%r11d + mov 40(%rsp),%eax + mov %esi,%ebx + mov %r12d,%ebp + xor 48(%rsp),%eax + xor %edx,%ebx + rol $5,%ebp + xor 8(%rsp),%eax + xor %edi,%ebx + add %ebp,%r11d + xor 28(%rsp),%eax + rol $30,%edx + add %ebx,%r11d + rol $1,%eax + mov %eax,40(%rsp) + lea -0x359d3e2a(%eax,%edi),%ebp + mov 44(%rsp),%eax + mov %edx,%ebx + mov %r11d,%edi + xor 52(%rsp),%eax + xor %r12d,%ebx + rol $5,%edi + xor 12(%rsp),%eax + xor %esi,%ebx + add %edi,%ebp + xor 32(%rsp),%eax + rol $30,%r12d + add %ebx,%ebp + rol $1,%eax + mov %eax,44(%rsp) + lea -0x359d3e2a(%eax,%esi),%edi + mov 48(%rsp),%eax + mov %r12d,%ebx + mov %ebp,%esi + xor 56(%rsp),%eax + xor %r11d,%ebx + rol $5,%esi + xor 16(%rsp),%eax + xor %edx,%ebx + add %esi,%edi + xor 36(%rsp),%eax + rol $30,%r11d + add %ebx,%edi + rol $1,%eax + mov %eax,48(%rsp) + lea -0x359d3e2a(%eax,%edx),%esi + mov 52(%rsp),%eax + mov %r11d,%ebx + mov %edi,%edx + xor 60(%rsp),%eax + xor %ebp,%ebx + rol $5,%edx + xor 20(%rsp),%eax + xor %r12d,%ebx + add %edx,%esi + xor 40(%rsp),%eax + rol $30,%ebp + add %ebx,%esi + rol $1,%eax + lea -0x359d3e2a(%eax,%r12d),%edx + mov 56(%rsp),%eax + mov %ebp,%ebx + mov %esi,%r12d + xor 0(%rsp),%eax + xor %edi,%ebx + rol $5,%r12d + xor 24(%rsp),%eax + xor %r11d,%ebx + add %r12d,%edx + xor 44(%rsp),%eax + rol $30,%edi + add %ebx,%edx + rol $1,%eax + lea -0x359d3e2a(%eax,%r11d),%r12d + mov 60(%rsp),%eax + mov %edi,%ebx + mov %edx,%r11d + xor 4(%rsp),%eax + xor %esi,%ebx + rol $5,%r11d + xor 28(%rsp),%eax + xor %ebp,%ebx + add %r11d,%r12d + xor 48(%rsp),%eax + rol $30,%esi + add %ebx,%r12d + rol $1,%eax + lea -0x359d3e2a(%eax,%ebp),%r11d + mov %esi,%ebx + mov %r12d,%ebp + xor %edx,%ebx + rol $5,%ebp + xor %edi,%ebx + add %ebp,%r11d + rol $30,%edx + add %ebx,%r11d + // Update and save state information in SHA-1 context + add 0(%r8),%r11d + add 4(%r8),%r12d + add 8(%r8),%edx + add 12(%r8),%esi + add 16(%r8),%edi + mov %r11d,0(%r8) + mov %r12d,4(%r8) + mov %edx,8(%r8) + mov %esi,12(%r8) + mov %edi,16(%r8) + + xchg %r11d,%edx # mov %r11d,%edx + xchg %r12d,%esi # mov %r12d,%esi + xchg %r11d,%edi # mov %edx,%edi + xchg %r12d,%ebp # mov %esi,%ebp + # mov %edi,%r11d + lea 64(%r9),%r9 + sub $1,%r10 + jnz .Lloop + mov 64(%rsp),%rsp + pop %r12 + pop %rbp + pop %rbx + ret +SET_SIZE(sha1_block_data_order) + +.data +.asciz "SHA1 block transform for x86_64, CRYPTOGAMS by " + +#endif /* lint || __lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/sha2/sha256_impl.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/sha2/sha256_impl.S @@ -0,0 +1,2063 @@ +/* + * ==================================================================== + * Written by Andy Polyakov for the OpenSSL + * project. Rights for redistribution and usage in source and binary + * forms are granted according to the OpenSSL license. + * ==================================================================== + * + * sha256/512_block procedure for x86_64. + * + * 40% improvement over compiler-generated code on Opteron. On EM64T + * sha256 was observed to run >80% faster and sha512 - >40%. No magical + * tricks, just straight implementation... I really wonder why gcc + * [being armed with inline assembler] fails to generate as fast code. + * The only thing which is cool about this module is that it's very + * same instruction sequence used for both SHA-256 and SHA-512. In + * former case the instructions operate on 32-bit operands, while in + * latter - on 64-bit ones. All I had to do is to get one flavor right, + * the other one passed the test right away:-) + * + * sha256_block runs in ~1005 cycles on Opteron, which gives you + * asymptotic performance of 64*1000/1005=63.7MBps times CPU clock + * frequency in GHz. sha512_block runs in ~1275 cycles, which results + * in 128*1000/1275=100MBps per GHz. Is there room for improvement? + * Well, if you compare it to IA-64 implementation, which maintains + * X[16] in register bank[!], tends to 4 instructions per CPU clock + * cycle and runs in 1003 cycles, 1275 is very good result for 3-way + * issue Opteron pipeline and X[16] maintained in memory. So that *if* + * there is a way to improve it, *then* the only way would be to try to + * offload X[16] updates to SSE unit, but that would require "deeper" + * loop unroll, which in turn would naturally cause size blow-up, not + * to mention increased complexity! And once again, only *if* it's + * actually possible to noticeably improve overall ILP, instruction + * level parallelism, on a given CPU implementation in this case. + * + * Special note on Intel EM64T. While Opteron CPU exhibits perfect + * performance ratio of 1.5 between 64- and 32-bit flavors [see above], + * [currently available] EM64T CPUs apparently are far from it. On the + * contrary, 64-bit version, sha512_block, is ~30% *slower* than 32-bit + * sha256_block:-( This is presumably because 64-bit shifts/rotates + * apparently are not atomic instructions, but implemented in microcode. + */ + +/* + * OpenSolaris OS modifications + * + * Sun elects to use this software under the BSD license. + * + * This source originates from OpenSSL file sha512-x86_64.pl at + * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz + * (presumably for future OpenSSL release 0.9.8h), with these changes: + * + * 1. Added perl "use strict" and declared variables. + * + * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards. + * + * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1) + * assemblers). Replaced the .picmeup macro with assembler code. + * + * 4. Added 8 to $ctx, as OpenSolaris OS has an extra 4-byte field, "algotype", + * at the beginning of SHA2_CTX (the next field is 8-byte aligned). + */ + +/* + * This file was generated by a perl script (sha512-x86_64.pl) that were + * used to generate sha256 and sha512 variants from the same code base. + * The comments from the original file have been pasted above. + */ + +#if defined(lint) || defined(__lint) +#include +#include + +/* ARGSUSED */ +void +SHA256TransformBlocks(SHA2_CTX *ctx, const void *in, size_t num) +{ +} + + +#else +#define _ASM +#include + +ENTRY_NP(SHA256TransformBlocks) + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + mov %rsp,%rbp # copy %rsp + shl $4,%rdx # num*16 + sub $16*4+4*8,%rsp + lea (%rsi,%rdx,4),%rdx # inp+num*16*4 + and $-64,%rsp # align stack frame + add $8,%rdi # Skip OpenSolaris field, "algotype" + mov %rdi,16*4+0*8(%rsp) # save ctx, 1st arg + mov %rsi,16*4+1*8(%rsp) # save inp, 2nd arg + mov %rdx,16*4+2*8(%rsp) # save end pointer, "3rd" arg + mov %rbp,16*4+3*8(%rsp) # save copy of %rsp + + #.picmeup %rbp + # The .picmeup pseudo-directive, from perlasm/x86_64_xlate.pl, puts + # the address of the "next" instruction into the target register + # (%rbp). This generates these 2 instructions: + lea .Llea(%rip),%rbp + #nop # .picmeup generates a nop for mod 8 alignment--not needed here + +.Llea: + lea K256-.(%rbp),%rbp + + mov 4*0(%rdi),%eax + mov 4*1(%rdi),%ebx + mov 4*2(%rdi),%ecx + mov 4*3(%rdi),%edx + mov 4*4(%rdi),%r8d + mov 4*5(%rdi),%r9d + mov 4*6(%rdi),%r10d + mov 4*7(%rdi),%r11d + jmp .Lloop + +.align 16 +.Lloop: + xor %rdi,%rdi + mov 4*0(%rsi),%r12d + bswap %r12d + mov %r8d,%r13d + mov %r8d,%r14d + mov %r9d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r10d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r8d,%r15d # (f^g)&e + mov %r12d,0(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r10d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r11d,%r12d # T1+=h + + mov %eax,%r11d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %eax,%r13d + mov %eax,%r14d + + ror $2,%r11d + ror $13,%r13d + mov %eax,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r11d + ror $9,%r13d + or %ecx,%r14d # a|c + + xor %r13d,%r11d # h=Sigma0(a) + and %ecx,%r15d # a&c + add %r12d,%edx # d+=T1 + + and %ebx,%r14d # (a|c)&b + add %r12d,%r11d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r11d # h+=Maj(a,b,c) + mov 4*1(%rsi),%r12d + bswap %r12d + mov %edx,%r13d + mov %edx,%r14d + mov %r8d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r9d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %edx,%r15d # (f^g)&e + mov %r12d,4(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r9d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r10d,%r12d # T1+=h + + mov %r11d,%r10d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r11d,%r13d + mov %r11d,%r14d + + ror $2,%r10d + ror $13,%r13d + mov %r11d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r10d + ror $9,%r13d + or %ebx,%r14d # a|c + + xor %r13d,%r10d # h=Sigma0(a) + and %ebx,%r15d # a&c + add %r12d,%ecx # d+=T1 + + and %eax,%r14d # (a|c)&b + add %r12d,%r10d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r10d # h+=Maj(a,b,c) + mov 4*2(%rsi),%r12d + bswap %r12d + mov %ecx,%r13d + mov %ecx,%r14d + mov %edx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r8d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ecx,%r15d # (f^g)&e + mov %r12d,8(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r8d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r9d,%r12d # T1+=h + + mov %r10d,%r9d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r10d,%r13d + mov %r10d,%r14d + + ror $2,%r9d + ror $13,%r13d + mov %r10d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r9d + ror $9,%r13d + or %eax,%r14d # a|c + + xor %r13d,%r9d # h=Sigma0(a) + and %eax,%r15d # a&c + add %r12d,%ebx # d+=T1 + + and %r11d,%r14d # (a|c)&b + add %r12d,%r9d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r9d # h+=Maj(a,b,c) + mov 4*3(%rsi),%r12d + bswap %r12d + mov %ebx,%r13d + mov %ebx,%r14d + mov %ecx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %edx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ebx,%r15d # (f^g)&e + mov %r12d,12(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %edx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r8d,%r12d # T1+=h + + mov %r9d,%r8d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r9d,%r13d + mov %r9d,%r14d + + ror $2,%r8d + ror $13,%r13d + mov %r9d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r8d + ror $9,%r13d + or %r11d,%r14d # a|c + + xor %r13d,%r8d # h=Sigma0(a) + and %r11d,%r15d # a&c + add %r12d,%eax # d+=T1 + + and %r10d,%r14d # (a|c)&b + add %r12d,%r8d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r8d # h+=Maj(a,b,c) + mov 4*4(%rsi),%r12d + bswap %r12d + mov %eax,%r13d + mov %eax,%r14d + mov %ebx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ecx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %eax,%r15d # (f^g)&e + mov %r12d,16(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ecx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %edx,%r12d # T1+=h + + mov %r8d,%edx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r8d,%r13d + mov %r8d,%r14d + + ror $2,%edx + ror $13,%r13d + mov %r8d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%edx + ror $9,%r13d + or %r10d,%r14d # a|c + + xor %r13d,%edx # h=Sigma0(a) + and %r10d,%r15d # a&c + add %r12d,%r11d # d+=T1 + + and %r9d,%r14d # (a|c)&b + add %r12d,%edx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%edx # h+=Maj(a,b,c) + mov 4*5(%rsi),%r12d + bswap %r12d + mov %r11d,%r13d + mov %r11d,%r14d + mov %eax,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ebx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r11d,%r15d # (f^g)&e + mov %r12d,20(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ebx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ecx,%r12d # T1+=h + + mov %edx,%ecx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %edx,%r13d + mov %edx,%r14d + + ror $2,%ecx + ror $13,%r13d + mov %edx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ecx + ror $9,%r13d + or %r9d,%r14d # a|c + + xor %r13d,%ecx # h=Sigma0(a) + and %r9d,%r15d # a&c + add %r12d,%r10d # d+=T1 + + and %r8d,%r14d # (a|c)&b + add %r12d,%ecx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ecx # h+=Maj(a,b,c) + mov 4*6(%rsi),%r12d + bswap %r12d + mov %r10d,%r13d + mov %r10d,%r14d + mov %r11d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %eax,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r10d,%r15d # (f^g)&e + mov %r12d,24(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %eax,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ebx,%r12d # T1+=h + + mov %ecx,%ebx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ecx,%r13d + mov %ecx,%r14d + + ror $2,%ebx + ror $13,%r13d + mov %ecx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ebx + ror $9,%r13d + or %r8d,%r14d # a|c + + xor %r13d,%ebx # h=Sigma0(a) + and %r8d,%r15d # a&c + add %r12d,%r9d # d+=T1 + + and %edx,%r14d # (a|c)&b + add %r12d,%ebx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ebx # h+=Maj(a,b,c) + mov 4*7(%rsi),%r12d + bswap %r12d + mov %r9d,%r13d + mov %r9d,%r14d + mov %r10d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r11d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r9d,%r15d # (f^g)&e + mov %r12d,28(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r11d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %eax,%r12d # T1+=h + + mov %ebx,%eax + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ebx,%r13d + mov %ebx,%r14d + + ror $2,%eax + ror $13,%r13d + mov %ebx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%eax + ror $9,%r13d + or %edx,%r14d # a|c + + xor %r13d,%eax # h=Sigma0(a) + and %edx,%r15d # a&c + add %r12d,%r8d # d+=T1 + + and %ecx,%r14d # (a|c)&b + add %r12d,%eax # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%eax # h+=Maj(a,b,c) + mov 4*8(%rsi),%r12d + bswap %r12d + mov %r8d,%r13d + mov %r8d,%r14d + mov %r9d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r10d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r8d,%r15d # (f^g)&e + mov %r12d,32(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r10d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r11d,%r12d # T1+=h + + mov %eax,%r11d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %eax,%r13d + mov %eax,%r14d + + ror $2,%r11d + ror $13,%r13d + mov %eax,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r11d + ror $9,%r13d + or %ecx,%r14d # a|c + + xor %r13d,%r11d # h=Sigma0(a) + and %ecx,%r15d # a&c + add %r12d,%edx # d+=T1 + + and %ebx,%r14d # (a|c)&b + add %r12d,%r11d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r11d # h+=Maj(a,b,c) + mov 4*9(%rsi),%r12d + bswap %r12d + mov %edx,%r13d + mov %edx,%r14d + mov %r8d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r9d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %edx,%r15d # (f^g)&e + mov %r12d,36(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r9d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r10d,%r12d # T1+=h + + mov %r11d,%r10d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r11d,%r13d + mov %r11d,%r14d + + ror $2,%r10d + ror $13,%r13d + mov %r11d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r10d + ror $9,%r13d + or %ebx,%r14d # a|c + + xor %r13d,%r10d # h=Sigma0(a) + and %ebx,%r15d # a&c + add %r12d,%ecx # d+=T1 + + and %eax,%r14d # (a|c)&b + add %r12d,%r10d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r10d # h+=Maj(a,b,c) + mov 4*10(%rsi),%r12d + bswap %r12d + mov %ecx,%r13d + mov %ecx,%r14d + mov %edx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r8d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ecx,%r15d # (f^g)&e + mov %r12d,40(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r8d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r9d,%r12d # T1+=h + + mov %r10d,%r9d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r10d,%r13d + mov %r10d,%r14d + + ror $2,%r9d + ror $13,%r13d + mov %r10d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r9d + ror $9,%r13d + or %eax,%r14d # a|c + + xor %r13d,%r9d # h=Sigma0(a) + and %eax,%r15d # a&c + add %r12d,%ebx # d+=T1 + + and %r11d,%r14d # (a|c)&b + add %r12d,%r9d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r9d # h+=Maj(a,b,c) + mov 4*11(%rsi),%r12d + bswap %r12d + mov %ebx,%r13d + mov %ebx,%r14d + mov %ecx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %edx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ebx,%r15d # (f^g)&e + mov %r12d,44(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %edx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r8d,%r12d # T1+=h + + mov %r9d,%r8d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r9d,%r13d + mov %r9d,%r14d + + ror $2,%r8d + ror $13,%r13d + mov %r9d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r8d + ror $9,%r13d + or %r11d,%r14d # a|c + + xor %r13d,%r8d # h=Sigma0(a) + and %r11d,%r15d # a&c + add %r12d,%eax # d+=T1 + + and %r10d,%r14d # (a|c)&b + add %r12d,%r8d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r8d # h+=Maj(a,b,c) + mov 4*12(%rsi),%r12d + bswap %r12d + mov %eax,%r13d + mov %eax,%r14d + mov %ebx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ecx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %eax,%r15d # (f^g)&e + mov %r12d,48(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ecx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %edx,%r12d # T1+=h + + mov %r8d,%edx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r8d,%r13d + mov %r8d,%r14d + + ror $2,%edx + ror $13,%r13d + mov %r8d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%edx + ror $9,%r13d + or %r10d,%r14d # a|c + + xor %r13d,%edx # h=Sigma0(a) + and %r10d,%r15d # a&c + add %r12d,%r11d # d+=T1 + + and %r9d,%r14d # (a|c)&b + add %r12d,%edx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%edx # h+=Maj(a,b,c) + mov 4*13(%rsi),%r12d + bswap %r12d + mov %r11d,%r13d + mov %r11d,%r14d + mov %eax,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ebx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r11d,%r15d # (f^g)&e + mov %r12d,52(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ebx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ecx,%r12d # T1+=h + + mov %edx,%ecx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %edx,%r13d + mov %edx,%r14d + + ror $2,%ecx + ror $13,%r13d + mov %edx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ecx + ror $9,%r13d + or %r9d,%r14d # a|c + + xor %r13d,%ecx # h=Sigma0(a) + and %r9d,%r15d # a&c + add %r12d,%r10d # d+=T1 + + and %r8d,%r14d # (a|c)&b + add %r12d,%ecx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ecx # h+=Maj(a,b,c) + mov 4*14(%rsi),%r12d + bswap %r12d + mov %r10d,%r13d + mov %r10d,%r14d + mov %r11d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %eax,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r10d,%r15d # (f^g)&e + mov %r12d,56(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %eax,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ebx,%r12d # T1+=h + + mov %ecx,%ebx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ecx,%r13d + mov %ecx,%r14d + + ror $2,%ebx + ror $13,%r13d + mov %ecx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ebx + ror $9,%r13d + or %r8d,%r14d # a|c + + xor %r13d,%ebx # h=Sigma0(a) + and %r8d,%r15d # a&c + add %r12d,%r9d # d+=T1 + + and %edx,%r14d # (a|c)&b + add %r12d,%ebx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ebx # h+=Maj(a,b,c) + mov 4*15(%rsi),%r12d + bswap %r12d + mov %r9d,%r13d + mov %r9d,%r14d + mov %r10d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r11d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r9d,%r15d # (f^g)&e + mov %r12d,60(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r11d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %eax,%r12d # T1+=h + + mov %ebx,%eax + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ebx,%r13d + mov %ebx,%r14d + + ror $2,%eax + ror $13,%r13d + mov %ebx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%eax + ror $9,%r13d + or %edx,%r14d # a|c + + xor %r13d,%eax # h=Sigma0(a) + and %edx,%r15d # a&c + add %r12d,%r8d # d+=T1 + + and %ecx,%r14d # (a|c)&b + add %r12d,%eax # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%eax # h+=Maj(a,b,c) + jmp .Lrounds_16_xx +.align 16 +.Lrounds_16_xx: + mov 4(%rsp),%r13d + mov 56(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 36(%rsp),%r12d + + add 0(%rsp),%r12d + mov %r8d,%r13d + mov %r8d,%r14d + mov %r9d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r10d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r8d,%r15d # (f^g)&e + mov %r12d,0(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r10d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r11d,%r12d # T1+=h + + mov %eax,%r11d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %eax,%r13d + mov %eax,%r14d + + ror $2,%r11d + ror $13,%r13d + mov %eax,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r11d + ror $9,%r13d + or %ecx,%r14d # a|c + + xor %r13d,%r11d # h=Sigma0(a) + and %ecx,%r15d # a&c + add %r12d,%edx # d+=T1 + + and %ebx,%r14d # (a|c)&b + add %r12d,%r11d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r11d # h+=Maj(a,b,c) + mov 8(%rsp),%r13d + mov 60(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 40(%rsp),%r12d + + add 4(%rsp),%r12d + mov %edx,%r13d + mov %edx,%r14d + mov %r8d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r9d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %edx,%r15d # (f^g)&e + mov %r12d,4(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r9d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r10d,%r12d # T1+=h + + mov %r11d,%r10d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r11d,%r13d + mov %r11d,%r14d + + ror $2,%r10d + ror $13,%r13d + mov %r11d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r10d + ror $9,%r13d + or %ebx,%r14d # a|c + + xor %r13d,%r10d # h=Sigma0(a) + and %ebx,%r15d # a&c + add %r12d,%ecx # d+=T1 + + and %eax,%r14d # (a|c)&b + add %r12d,%r10d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r10d # h+=Maj(a,b,c) + mov 12(%rsp),%r13d + mov 0(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 44(%rsp),%r12d + + add 8(%rsp),%r12d + mov %ecx,%r13d + mov %ecx,%r14d + mov %edx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r8d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ecx,%r15d # (f^g)&e + mov %r12d,8(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r8d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r9d,%r12d # T1+=h + + mov %r10d,%r9d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r10d,%r13d + mov %r10d,%r14d + + ror $2,%r9d + ror $13,%r13d + mov %r10d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r9d + ror $9,%r13d + or %eax,%r14d # a|c + + xor %r13d,%r9d # h=Sigma0(a) + and %eax,%r15d # a&c + add %r12d,%ebx # d+=T1 + + and %r11d,%r14d # (a|c)&b + add %r12d,%r9d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r9d # h+=Maj(a,b,c) + mov 16(%rsp),%r13d + mov 4(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 48(%rsp),%r12d + + add 12(%rsp),%r12d + mov %ebx,%r13d + mov %ebx,%r14d + mov %ecx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %edx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ebx,%r15d # (f^g)&e + mov %r12d,12(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %edx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r8d,%r12d # T1+=h + + mov %r9d,%r8d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r9d,%r13d + mov %r9d,%r14d + + ror $2,%r8d + ror $13,%r13d + mov %r9d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r8d + ror $9,%r13d + or %r11d,%r14d # a|c + + xor %r13d,%r8d # h=Sigma0(a) + and %r11d,%r15d # a&c + add %r12d,%eax # d+=T1 + + and %r10d,%r14d # (a|c)&b + add %r12d,%r8d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r8d # h+=Maj(a,b,c) + mov 20(%rsp),%r13d + mov 8(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 52(%rsp),%r12d + + add 16(%rsp),%r12d + mov %eax,%r13d + mov %eax,%r14d + mov %ebx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ecx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %eax,%r15d # (f^g)&e + mov %r12d,16(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ecx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %edx,%r12d # T1+=h + + mov %r8d,%edx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r8d,%r13d + mov %r8d,%r14d + + ror $2,%edx + ror $13,%r13d + mov %r8d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%edx + ror $9,%r13d + or %r10d,%r14d # a|c + + xor %r13d,%edx # h=Sigma0(a) + and %r10d,%r15d # a&c + add %r12d,%r11d # d+=T1 + + and %r9d,%r14d # (a|c)&b + add %r12d,%edx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%edx # h+=Maj(a,b,c) + mov 24(%rsp),%r13d + mov 12(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 56(%rsp),%r12d + + add 20(%rsp),%r12d + mov %r11d,%r13d + mov %r11d,%r14d + mov %eax,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ebx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r11d,%r15d # (f^g)&e + mov %r12d,20(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ebx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ecx,%r12d # T1+=h + + mov %edx,%ecx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %edx,%r13d + mov %edx,%r14d + + ror $2,%ecx + ror $13,%r13d + mov %edx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ecx + ror $9,%r13d + or %r9d,%r14d # a|c + + xor %r13d,%ecx # h=Sigma0(a) + and %r9d,%r15d # a&c + add %r12d,%r10d # d+=T1 + + and %r8d,%r14d # (a|c)&b + add %r12d,%ecx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ecx # h+=Maj(a,b,c) + mov 28(%rsp),%r13d + mov 16(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 60(%rsp),%r12d + + add 24(%rsp),%r12d + mov %r10d,%r13d + mov %r10d,%r14d + mov %r11d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %eax,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r10d,%r15d # (f^g)&e + mov %r12d,24(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %eax,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ebx,%r12d # T1+=h + + mov %ecx,%ebx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ecx,%r13d + mov %ecx,%r14d + + ror $2,%ebx + ror $13,%r13d + mov %ecx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ebx + ror $9,%r13d + or %r8d,%r14d # a|c + + xor %r13d,%ebx # h=Sigma0(a) + and %r8d,%r15d # a&c + add %r12d,%r9d # d+=T1 + + and %edx,%r14d # (a|c)&b + add %r12d,%ebx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ebx # h+=Maj(a,b,c) + mov 32(%rsp),%r13d + mov 20(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 0(%rsp),%r12d + + add 28(%rsp),%r12d + mov %r9d,%r13d + mov %r9d,%r14d + mov %r10d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r11d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r9d,%r15d # (f^g)&e + mov %r12d,28(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r11d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %eax,%r12d # T1+=h + + mov %ebx,%eax + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ebx,%r13d + mov %ebx,%r14d + + ror $2,%eax + ror $13,%r13d + mov %ebx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%eax + ror $9,%r13d + or %edx,%r14d # a|c + + xor %r13d,%eax # h=Sigma0(a) + and %edx,%r15d # a&c + add %r12d,%r8d # d+=T1 + + and %ecx,%r14d # (a|c)&b + add %r12d,%eax # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%eax # h+=Maj(a,b,c) + mov 36(%rsp),%r13d + mov 24(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 4(%rsp),%r12d + + add 32(%rsp),%r12d + mov %r8d,%r13d + mov %r8d,%r14d + mov %r9d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r10d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r8d,%r15d # (f^g)&e + mov %r12d,32(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r10d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r11d,%r12d # T1+=h + + mov %eax,%r11d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %eax,%r13d + mov %eax,%r14d + + ror $2,%r11d + ror $13,%r13d + mov %eax,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r11d + ror $9,%r13d + or %ecx,%r14d # a|c + + xor %r13d,%r11d # h=Sigma0(a) + and %ecx,%r15d # a&c + add %r12d,%edx # d+=T1 + + and %ebx,%r14d # (a|c)&b + add %r12d,%r11d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r11d # h+=Maj(a,b,c) + mov 40(%rsp),%r13d + mov 28(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 8(%rsp),%r12d + + add 36(%rsp),%r12d + mov %edx,%r13d + mov %edx,%r14d + mov %r8d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r9d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %edx,%r15d # (f^g)&e + mov %r12d,36(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r9d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r10d,%r12d # T1+=h + + mov %r11d,%r10d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r11d,%r13d + mov %r11d,%r14d + + ror $2,%r10d + ror $13,%r13d + mov %r11d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r10d + ror $9,%r13d + or %ebx,%r14d # a|c + + xor %r13d,%r10d # h=Sigma0(a) + and %ebx,%r15d # a&c + add %r12d,%ecx # d+=T1 + + and %eax,%r14d # (a|c)&b + add %r12d,%r10d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r10d # h+=Maj(a,b,c) + mov 44(%rsp),%r13d + mov 32(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 12(%rsp),%r12d + + add 40(%rsp),%r12d + mov %ecx,%r13d + mov %ecx,%r14d + mov %edx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r8d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ecx,%r15d # (f^g)&e + mov %r12d,40(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r8d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r9d,%r12d # T1+=h + + mov %r10d,%r9d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r10d,%r13d + mov %r10d,%r14d + + ror $2,%r9d + ror $13,%r13d + mov %r10d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r9d + ror $9,%r13d + or %eax,%r14d # a|c + + xor %r13d,%r9d # h=Sigma0(a) + and %eax,%r15d # a&c + add %r12d,%ebx # d+=T1 + + and %r11d,%r14d # (a|c)&b + add %r12d,%r9d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r9d # h+=Maj(a,b,c) + mov 48(%rsp),%r13d + mov 36(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 16(%rsp),%r12d + + add 44(%rsp),%r12d + mov %ebx,%r13d + mov %ebx,%r14d + mov %ecx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %edx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %ebx,%r15d # (f^g)&e + mov %r12d,44(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %edx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %r8d,%r12d # T1+=h + + mov %r9d,%r8d + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r9d,%r13d + mov %r9d,%r14d + + ror $2,%r8d + ror $13,%r13d + mov %r9d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%r8d + ror $9,%r13d + or %r11d,%r14d # a|c + + xor %r13d,%r8d # h=Sigma0(a) + and %r11d,%r15d # a&c + add %r12d,%eax # d+=T1 + + and %r10d,%r14d # (a|c)&b + add %r12d,%r8d # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%r8d # h+=Maj(a,b,c) + mov 52(%rsp),%r13d + mov 40(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 20(%rsp),%r12d + + add 48(%rsp),%r12d + mov %eax,%r13d + mov %eax,%r14d + mov %ebx,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ecx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %eax,%r15d # (f^g)&e + mov %r12d,48(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ecx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %edx,%r12d # T1+=h + + mov %r8d,%edx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %r8d,%r13d + mov %r8d,%r14d + + ror $2,%edx + ror $13,%r13d + mov %r8d,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%edx + ror $9,%r13d + or %r10d,%r14d # a|c + + xor %r13d,%edx # h=Sigma0(a) + and %r10d,%r15d # a&c + add %r12d,%r11d # d+=T1 + + and %r9d,%r14d # (a|c)&b + add %r12d,%edx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%edx # h+=Maj(a,b,c) + mov 56(%rsp),%r13d + mov 44(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 24(%rsp),%r12d + + add 52(%rsp),%r12d + mov %r11d,%r13d + mov %r11d,%r14d + mov %eax,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %ebx,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r11d,%r15d # (f^g)&e + mov %r12d,52(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %ebx,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ecx,%r12d # T1+=h + + mov %edx,%ecx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %edx,%r13d + mov %edx,%r14d + + ror $2,%ecx + ror $13,%r13d + mov %edx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ecx + ror $9,%r13d + or %r9d,%r14d # a|c + + xor %r13d,%ecx # h=Sigma0(a) + and %r9d,%r15d # a&c + add %r12d,%r10d # d+=T1 + + and %r8d,%r14d # (a|c)&b + add %r12d,%ecx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ecx # h+=Maj(a,b,c) + mov 60(%rsp),%r13d + mov 48(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 28(%rsp),%r12d + + add 56(%rsp),%r12d + mov %r10d,%r13d + mov %r10d,%r14d + mov %r11d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %eax,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r10d,%r15d # (f^g)&e + mov %r12d,56(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %eax,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %ebx,%r12d # T1+=h + + mov %ecx,%ebx + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ecx,%r13d + mov %ecx,%r14d + + ror $2,%ebx + ror $13,%r13d + mov %ecx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%ebx + ror $9,%r13d + or %r8d,%r14d # a|c + + xor %r13d,%ebx # h=Sigma0(a) + and %r8d,%r15d # a&c + add %r12d,%r9d # d+=T1 + + and %edx,%r14d # (a|c)&b + add %r12d,%ebx # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%ebx # h+=Maj(a,b,c) + mov 0(%rsp),%r13d + mov 52(%rsp),%r12d + + mov %r13d,%r15d + + shr $3,%r13d + ror $7,%r15d + + xor %r15d,%r13d + ror $11,%r15d + + xor %r15d,%r13d # sigma0(X[(i+1)&0xf]) + mov %r12d,%r14d + + shr $10,%r12d + ror $17,%r14d + + xor %r14d,%r12d + ror $2,%r14d + + xor %r14d,%r12d # sigma1(X[(i+14)&0xf]) + + add %r13d,%r12d + + add 32(%rsp),%r12d + + add 60(%rsp),%r12d + mov %r9d,%r13d + mov %r9d,%r14d + mov %r10d,%r15d + + ror $6,%r13d + ror $11,%r14d + xor %r11d,%r15d # f^g + + xor %r14d,%r13d + ror $14,%r14d + and %r9d,%r15d # (f^g)&e + mov %r12d,60(%rsp) + + xor %r14d,%r13d # Sigma1(e) + xor %r11d,%r15d # Ch(e,f,g)=((f^g)&e)^g + add %eax,%r12d # T1+=h + + mov %ebx,%eax + add %r13d,%r12d # T1+=Sigma1(e) + + add %r15d,%r12d # T1+=Ch(e,f,g) + mov %ebx,%r13d + mov %ebx,%r14d + + ror $2,%eax + ror $13,%r13d + mov %ebx,%r15d + add (%rbp,%rdi,4),%r12d # T1+=K[round] + + xor %r13d,%eax + ror $9,%r13d + or %edx,%r14d # a|c + + xor %r13d,%eax # h=Sigma0(a) + and %edx,%r15d # a&c + add %r12d,%r8d # d+=T1 + + and %ecx,%r14d # (a|c)&b + add %r12d,%eax # h+=T1 + + or %r15d,%r14d # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14d,%eax # h+=Maj(a,b,c) + cmp $64,%rdi + jb .Lrounds_16_xx + + mov 16*4+0*8(%rsp),%rdi + lea 16*4(%rsi),%rsi + + add 4*0(%rdi),%eax + add 4*1(%rdi),%ebx + add 4*2(%rdi),%ecx + add 4*3(%rdi),%edx + add 4*4(%rdi),%r8d + add 4*5(%rdi),%r9d + add 4*6(%rdi),%r10d + add 4*7(%rdi),%r11d + + cmp 16*4+2*8(%rsp),%rsi + + mov %eax,4*0(%rdi) + mov %ebx,4*1(%rdi) + mov %ecx,4*2(%rdi) + mov %edx,4*3(%rdi) + mov %r8d,4*4(%rdi) + mov %r9d,4*5(%rdi) + mov %r10d,4*6(%rdi) + mov %r11d,4*7(%rdi) + jb .Lloop + + mov 16*4+3*8(%rsp),%rsp + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + + ret +SET_SIZE(SHA256TransformBlocks) + +.data +.align 64 +.type K256,@object +K256: + .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +#endif /* !lint && !__lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/asm-x86_64/sha2/sha512_impl.S +++ linux-aws-4.15.0/zfs/module/icp/asm-x86_64/sha2/sha512_impl.S @@ -0,0 +1,2088 @@ +/* + * ==================================================================== + * Written by Andy Polyakov for the OpenSSL + * project. Rights for redistribution and usage in source and binary + * forms are granted according to the OpenSSL license. + * ==================================================================== + * + * sha256/512_block procedure for x86_64. + * + * 40% improvement over compiler-generated code on Opteron. On EM64T + * sha256 was observed to run >80% faster and sha512 - >40%. No magical + * tricks, just straight implementation... I really wonder why gcc + * [being armed with inline assembler] fails to generate as fast code. + * The only thing which is cool about this module is that it's very + * same instruction sequence used for both SHA-256 and SHA-512. In + * former case the instructions operate on 32-bit operands, while in + * latter - on 64-bit ones. All I had to do is to get one flavor right, + * the other one passed the test right away:-) + * + * sha256_block runs in ~1005 cycles on Opteron, which gives you + * asymptotic performance of 64*1000/1005=63.7MBps times CPU clock + * frequency in GHz. sha512_block runs in ~1275 cycles, which results + * in 128*1000/1275=100MBps per GHz. Is there room for improvement? + * Well, if you compare it to IA-64 implementation, which maintains + * X[16] in register bank[!], tends to 4 instructions per CPU clock + * cycle and runs in 1003 cycles, 1275 is very good result for 3-way + * issue Opteron pipeline and X[16] maintained in memory. So that *if* + * there is a way to improve it, *then* the only way would be to try to + * offload X[16] updates to SSE unit, but that would require "deeper" + * loop unroll, which in turn would naturally cause size blow-up, not + * to mention increased complexity! And once again, only *if* it's + * actually possible to noticeably improve overall ILP, instruction + * level parallelism, on a given CPU implementation in this case. + * + * Special note on Intel EM64T. While Opteron CPU exhibits perfect + * performance ratio of 1.5 between 64- and 32-bit flavors [see above], + * [currently available] EM64T CPUs apparently are far from it. On the + * contrary, 64-bit version, sha512_block, is ~30% *slower* than 32-bit + * sha256_block:-( This is presumably because 64-bit shifts/rotates + * apparently are not atomic instructions, but implemented in microcode. + */ + +/* + * OpenSolaris OS modifications + * + * Sun elects to use this software under the BSD license. + * + * This source originates from OpenSSL file sha512-x86_64.pl at + * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz + * (presumably for future OpenSSL release 0.9.8h), with these changes: + * + * 1. Added perl "use strict" and declared variables. + * + * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from + * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards. + * + * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1) + * assemblers). Replaced the .picmeup macro with assembler code. + * + * 4. Added 8 to $ctx, as OpenSolaris OS has an extra 4-byte field, "algotype", + * at the beginning of SHA2_CTX (the next field is 8-byte aligned). + */ + +/* + * This file was generated by a perl script (sha512-x86_64.pl) that were + * used to generate sha256 and sha512 variants from the same code base. + * The comments from the original file have been pasted above. + */ + + +#if defined(lint) || defined(__lint) +#include +#include + +/* ARGSUSED */ +void +SHA512TransformBlocks(SHA2_CTX *ctx, const void *in, size_t num) +{ +} + + +#else +#define _ASM +#include + +ENTRY_NP(SHA512TransformBlocks) + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + mov %rsp,%rbp # copy %rsp + shl $4,%rdx # num*16 + sub $16*8+4*8,%rsp + lea (%rsi,%rdx,8),%rdx # inp+num*16*8 + and $-64,%rsp # align stack frame + add $8,%rdi # Skip OpenSolaris field, "algotype" + mov %rdi,16*8+0*8(%rsp) # save ctx, 1st arg + mov %rsi,16*8+1*8(%rsp) # save inp, 2nd arg + mov %rdx,16*8+2*8(%rsp) # save end pointer, "3rd" arg + mov %rbp,16*8+3*8(%rsp) # save copy of %rsp + + #.picmeup %rbp + # The .picmeup pseudo-directive, from perlasm/x86_64_xlate.pl, puts + # the address of the "next" instruction into the target register + # (%rbp). This generates these 2 instructions: + lea .Llea(%rip),%rbp + #nop # .picmeup generates a nop for mod 8 alignment--not needed here + +.Llea: + lea K512-.(%rbp),%rbp + + mov 8*0(%rdi),%rax + mov 8*1(%rdi),%rbx + mov 8*2(%rdi),%rcx + mov 8*3(%rdi),%rdx + mov 8*4(%rdi),%r8 + mov 8*5(%rdi),%r9 + mov 8*6(%rdi),%r10 + mov 8*7(%rdi),%r11 + jmp .Lloop + +.align 16 +.Lloop: + xor %rdi,%rdi + mov 8*0(%rsi),%r12 + bswap %r12 + mov %r8,%r13 + mov %r8,%r14 + mov %r9,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r10,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r8,%r15 # (f^g)&e + mov %r12,0(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r10,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r11,%r12 # T1+=h + + mov %rax,%r11 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rax,%r13 + mov %rax,%r14 + + ror $28,%r11 + ror $34,%r13 + mov %rax,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r11 + ror $5,%r13 + or %rcx,%r14 # a|c + + xor %r13,%r11 # h=Sigma0(a) + and %rcx,%r15 # a&c + add %r12,%rdx # d+=T1 + + and %rbx,%r14 # (a|c)&b + add %r12,%r11 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r11 # h+=Maj(a,b,c) + mov 8*1(%rsi),%r12 + bswap %r12 + mov %rdx,%r13 + mov %rdx,%r14 + mov %r8,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r9,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rdx,%r15 # (f^g)&e + mov %r12,8(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r9,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r10,%r12 # T1+=h + + mov %r11,%r10 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r11,%r13 + mov %r11,%r14 + + ror $28,%r10 + ror $34,%r13 + mov %r11,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r10 + ror $5,%r13 + or %rbx,%r14 # a|c + + xor %r13,%r10 # h=Sigma0(a) + and %rbx,%r15 # a&c + add %r12,%rcx # d+=T1 + + and %rax,%r14 # (a|c)&b + add %r12,%r10 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r10 # h+=Maj(a,b,c) + mov 8*2(%rsi),%r12 + bswap %r12 + mov %rcx,%r13 + mov %rcx,%r14 + mov %rdx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r8,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rcx,%r15 # (f^g)&e + mov %r12,16(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r8,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r9,%r12 # T1+=h + + mov %r10,%r9 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r10,%r13 + mov %r10,%r14 + + ror $28,%r9 + ror $34,%r13 + mov %r10,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r9 + ror $5,%r13 + or %rax,%r14 # a|c + + xor %r13,%r9 # h=Sigma0(a) + and %rax,%r15 # a&c + add %r12,%rbx # d+=T1 + + and %r11,%r14 # (a|c)&b + add %r12,%r9 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r9 # h+=Maj(a,b,c) + mov 8*3(%rsi),%r12 + bswap %r12 + mov %rbx,%r13 + mov %rbx,%r14 + mov %rcx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rdx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rbx,%r15 # (f^g)&e + mov %r12,24(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rdx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r8,%r12 # T1+=h + + mov %r9,%r8 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r9,%r13 + mov %r9,%r14 + + ror $28,%r8 + ror $34,%r13 + mov %r9,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r8 + ror $5,%r13 + or %r11,%r14 # a|c + + xor %r13,%r8 # h=Sigma0(a) + and %r11,%r15 # a&c + add %r12,%rax # d+=T1 + + and %r10,%r14 # (a|c)&b + add %r12,%r8 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r8 # h+=Maj(a,b,c) + mov 8*4(%rsi),%r12 + bswap %r12 + mov %rax,%r13 + mov %rax,%r14 + mov %rbx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rcx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rax,%r15 # (f^g)&e + mov %r12,32(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rcx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rdx,%r12 # T1+=h + + mov %r8,%rdx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r8,%r13 + mov %r8,%r14 + + ror $28,%rdx + ror $34,%r13 + mov %r8,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rdx + ror $5,%r13 + or %r10,%r14 # a|c + + xor %r13,%rdx # h=Sigma0(a) + and %r10,%r15 # a&c + add %r12,%r11 # d+=T1 + + and %r9,%r14 # (a|c)&b + add %r12,%rdx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rdx # h+=Maj(a,b,c) + mov 8*5(%rsi),%r12 + bswap %r12 + mov %r11,%r13 + mov %r11,%r14 + mov %rax,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rbx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r11,%r15 # (f^g)&e + mov %r12,40(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rbx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rcx,%r12 # T1+=h + + mov %rdx,%rcx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rdx,%r13 + mov %rdx,%r14 + + ror $28,%rcx + ror $34,%r13 + mov %rdx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rcx + ror $5,%r13 + or %r9,%r14 # a|c + + xor %r13,%rcx # h=Sigma0(a) + and %r9,%r15 # a&c + add %r12,%r10 # d+=T1 + + and %r8,%r14 # (a|c)&b + add %r12,%rcx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rcx # h+=Maj(a,b,c) + mov 8*6(%rsi),%r12 + bswap %r12 + mov %r10,%r13 + mov %r10,%r14 + mov %r11,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rax,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r10,%r15 # (f^g)&e + mov %r12,48(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rax,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rbx,%r12 # T1+=h + + mov %rcx,%rbx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rcx,%r13 + mov %rcx,%r14 + + ror $28,%rbx + ror $34,%r13 + mov %rcx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rbx + ror $5,%r13 + or %r8,%r14 # a|c + + xor %r13,%rbx # h=Sigma0(a) + and %r8,%r15 # a&c + add %r12,%r9 # d+=T1 + + and %rdx,%r14 # (a|c)&b + add %r12,%rbx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rbx # h+=Maj(a,b,c) + mov 8*7(%rsi),%r12 + bswap %r12 + mov %r9,%r13 + mov %r9,%r14 + mov %r10,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r11,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r9,%r15 # (f^g)&e + mov %r12,56(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r11,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rax,%r12 # T1+=h + + mov %rbx,%rax + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rbx,%r13 + mov %rbx,%r14 + + ror $28,%rax + ror $34,%r13 + mov %rbx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rax + ror $5,%r13 + or %rdx,%r14 # a|c + + xor %r13,%rax # h=Sigma0(a) + and %rdx,%r15 # a&c + add %r12,%r8 # d+=T1 + + and %rcx,%r14 # (a|c)&b + add %r12,%rax # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rax # h+=Maj(a,b,c) + mov 8*8(%rsi),%r12 + bswap %r12 + mov %r8,%r13 + mov %r8,%r14 + mov %r9,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r10,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r8,%r15 # (f^g)&e + mov %r12,64(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r10,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r11,%r12 # T1+=h + + mov %rax,%r11 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rax,%r13 + mov %rax,%r14 + + ror $28,%r11 + ror $34,%r13 + mov %rax,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r11 + ror $5,%r13 + or %rcx,%r14 # a|c + + xor %r13,%r11 # h=Sigma0(a) + and %rcx,%r15 # a&c + add %r12,%rdx # d+=T1 + + and %rbx,%r14 # (a|c)&b + add %r12,%r11 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r11 # h+=Maj(a,b,c) + mov 8*9(%rsi),%r12 + bswap %r12 + mov %rdx,%r13 + mov %rdx,%r14 + mov %r8,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r9,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rdx,%r15 # (f^g)&e + mov %r12,72(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r9,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r10,%r12 # T1+=h + + mov %r11,%r10 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r11,%r13 + mov %r11,%r14 + + ror $28,%r10 + ror $34,%r13 + mov %r11,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r10 + ror $5,%r13 + or %rbx,%r14 # a|c + + xor %r13,%r10 # h=Sigma0(a) + and %rbx,%r15 # a&c + add %r12,%rcx # d+=T1 + + and %rax,%r14 # (a|c)&b + add %r12,%r10 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r10 # h+=Maj(a,b,c) + mov 8*10(%rsi),%r12 + bswap %r12 + mov %rcx,%r13 + mov %rcx,%r14 + mov %rdx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r8,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rcx,%r15 # (f^g)&e + mov %r12,80(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r8,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r9,%r12 # T1+=h + + mov %r10,%r9 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r10,%r13 + mov %r10,%r14 + + ror $28,%r9 + ror $34,%r13 + mov %r10,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r9 + ror $5,%r13 + or %rax,%r14 # a|c + + xor %r13,%r9 # h=Sigma0(a) + and %rax,%r15 # a&c + add %r12,%rbx # d+=T1 + + and %r11,%r14 # (a|c)&b + add %r12,%r9 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r9 # h+=Maj(a,b,c) + mov 8*11(%rsi),%r12 + bswap %r12 + mov %rbx,%r13 + mov %rbx,%r14 + mov %rcx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rdx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rbx,%r15 # (f^g)&e + mov %r12,88(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rdx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r8,%r12 # T1+=h + + mov %r9,%r8 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r9,%r13 + mov %r9,%r14 + + ror $28,%r8 + ror $34,%r13 + mov %r9,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r8 + ror $5,%r13 + or %r11,%r14 # a|c + + xor %r13,%r8 # h=Sigma0(a) + and %r11,%r15 # a&c + add %r12,%rax # d+=T1 + + and %r10,%r14 # (a|c)&b + add %r12,%r8 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r8 # h+=Maj(a,b,c) + mov 8*12(%rsi),%r12 + bswap %r12 + mov %rax,%r13 + mov %rax,%r14 + mov %rbx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rcx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rax,%r15 # (f^g)&e + mov %r12,96(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rcx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rdx,%r12 # T1+=h + + mov %r8,%rdx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r8,%r13 + mov %r8,%r14 + + ror $28,%rdx + ror $34,%r13 + mov %r8,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rdx + ror $5,%r13 + or %r10,%r14 # a|c + + xor %r13,%rdx # h=Sigma0(a) + and %r10,%r15 # a&c + add %r12,%r11 # d+=T1 + + and %r9,%r14 # (a|c)&b + add %r12,%rdx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rdx # h+=Maj(a,b,c) + mov 8*13(%rsi),%r12 + bswap %r12 + mov %r11,%r13 + mov %r11,%r14 + mov %rax,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rbx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r11,%r15 # (f^g)&e + mov %r12,104(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rbx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rcx,%r12 # T1+=h + + mov %rdx,%rcx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rdx,%r13 + mov %rdx,%r14 + + ror $28,%rcx + ror $34,%r13 + mov %rdx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rcx + ror $5,%r13 + or %r9,%r14 # a|c + + xor %r13,%rcx # h=Sigma0(a) + and %r9,%r15 # a&c + add %r12,%r10 # d+=T1 + + and %r8,%r14 # (a|c)&b + add %r12,%rcx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rcx # h+=Maj(a,b,c) + mov 8*14(%rsi),%r12 + bswap %r12 + mov %r10,%r13 + mov %r10,%r14 + mov %r11,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rax,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r10,%r15 # (f^g)&e + mov %r12,112(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rax,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rbx,%r12 # T1+=h + + mov %rcx,%rbx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rcx,%r13 + mov %rcx,%r14 + + ror $28,%rbx + ror $34,%r13 + mov %rcx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rbx + ror $5,%r13 + or %r8,%r14 # a|c + + xor %r13,%rbx # h=Sigma0(a) + and %r8,%r15 # a&c + add %r12,%r9 # d+=T1 + + and %rdx,%r14 # (a|c)&b + add %r12,%rbx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rbx # h+=Maj(a,b,c) + mov 8*15(%rsi),%r12 + bswap %r12 + mov %r9,%r13 + mov %r9,%r14 + mov %r10,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r11,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r9,%r15 # (f^g)&e + mov %r12,120(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r11,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rax,%r12 # T1+=h + + mov %rbx,%rax + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rbx,%r13 + mov %rbx,%r14 + + ror $28,%rax + ror $34,%r13 + mov %rbx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rax + ror $5,%r13 + or %rdx,%r14 # a|c + + xor %r13,%rax # h=Sigma0(a) + and %rdx,%r15 # a&c + add %r12,%r8 # d+=T1 + + and %rcx,%r14 # (a|c)&b + add %r12,%rax # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rax # h+=Maj(a,b,c) + jmp .Lrounds_16_xx +.align 16 +.Lrounds_16_xx: + mov 8(%rsp),%r13 + mov 112(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 72(%rsp),%r12 + + add 0(%rsp),%r12 + mov %r8,%r13 + mov %r8,%r14 + mov %r9,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r10,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r8,%r15 # (f^g)&e + mov %r12,0(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r10,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r11,%r12 # T1+=h + + mov %rax,%r11 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rax,%r13 + mov %rax,%r14 + + ror $28,%r11 + ror $34,%r13 + mov %rax,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r11 + ror $5,%r13 + or %rcx,%r14 # a|c + + xor %r13,%r11 # h=Sigma0(a) + and %rcx,%r15 # a&c + add %r12,%rdx # d+=T1 + + and %rbx,%r14 # (a|c)&b + add %r12,%r11 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r11 # h+=Maj(a,b,c) + mov 16(%rsp),%r13 + mov 120(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 80(%rsp),%r12 + + add 8(%rsp),%r12 + mov %rdx,%r13 + mov %rdx,%r14 + mov %r8,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r9,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rdx,%r15 # (f^g)&e + mov %r12,8(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r9,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r10,%r12 # T1+=h + + mov %r11,%r10 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r11,%r13 + mov %r11,%r14 + + ror $28,%r10 + ror $34,%r13 + mov %r11,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r10 + ror $5,%r13 + or %rbx,%r14 # a|c + + xor %r13,%r10 # h=Sigma0(a) + and %rbx,%r15 # a&c + add %r12,%rcx # d+=T1 + + and %rax,%r14 # (a|c)&b + add %r12,%r10 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r10 # h+=Maj(a,b,c) + mov 24(%rsp),%r13 + mov 0(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 88(%rsp),%r12 + + add 16(%rsp),%r12 + mov %rcx,%r13 + mov %rcx,%r14 + mov %rdx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r8,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rcx,%r15 # (f^g)&e + mov %r12,16(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r8,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r9,%r12 # T1+=h + + mov %r10,%r9 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r10,%r13 + mov %r10,%r14 + + ror $28,%r9 + ror $34,%r13 + mov %r10,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r9 + ror $5,%r13 + or %rax,%r14 # a|c + + xor %r13,%r9 # h=Sigma0(a) + and %rax,%r15 # a&c + add %r12,%rbx # d+=T1 + + and %r11,%r14 # (a|c)&b + add %r12,%r9 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r9 # h+=Maj(a,b,c) + mov 32(%rsp),%r13 + mov 8(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 96(%rsp),%r12 + + add 24(%rsp),%r12 + mov %rbx,%r13 + mov %rbx,%r14 + mov %rcx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rdx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rbx,%r15 # (f^g)&e + mov %r12,24(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rdx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r8,%r12 # T1+=h + + mov %r9,%r8 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r9,%r13 + mov %r9,%r14 + + ror $28,%r8 + ror $34,%r13 + mov %r9,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r8 + ror $5,%r13 + or %r11,%r14 # a|c + + xor %r13,%r8 # h=Sigma0(a) + and %r11,%r15 # a&c + add %r12,%rax # d+=T1 + + and %r10,%r14 # (a|c)&b + add %r12,%r8 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r8 # h+=Maj(a,b,c) + mov 40(%rsp),%r13 + mov 16(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 104(%rsp),%r12 + + add 32(%rsp),%r12 + mov %rax,%r13 + mov %rax,%r14 + mov %rbx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rcx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rax,%r15 # (f^g)&e + mov %r12,32(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rcx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rdx,%r12 # T1+=h + + mov %r8,%rdx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r8,%r13 + mov %r8,%r14 + + ror $28,%rdx + ror $34,%r13 + mov %r8,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rdx + ror $5,%r13 + or %r10,%r14 # a|c + + xor %r13,%rdx # h=Sigma0(a) + and %r10,%r15 # a&c + add %r12,%r11 # d+=T1 + + and %r9,%r14 # (a|c)&b + add %r12,%rdx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rdx # h+=Maj(a,b,c) + mov 48(%rsp),%r13 + mov 24(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 112(%rsp),%r12 + + add 40(%rsp),%r12 + mov %r11,%r13 + mov %r11,%r14 + mov %rax,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rbx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r11,%r15 # (f^g)&e + mov %r12,40(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rbx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rcx,%r12 # T1+=h + + mov %rdx,%rcx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rdx,%r13 + mov %rdx,%r14 + + ror $28,%rcx + ror $34,%r13 + mov %rdx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rcx + ror $5,%r13 + or %r9,%r14 # a|c + + xor %r13,%rcx # h=Sigma0(a) + and %r9,%r15 # a&c + add %r12,%r10 # d+=T1 + + and %r8,%r14 # (a|c)&b + add %r12,%rcx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rcx # h+=Maj(a,b,c) + mov 56(%rsp),%r13 + mov 32(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 120(%rsp),%r12 + + add 48(%rsp),%r12 + mov %r10,%r13 + mov %r10,%r14 + mov %r11,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rax,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r10,%r15 # (f^g)&e + mov %r12,48(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rax,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rbx,%r12 # T1+=h + + mov %rcx,%rbx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rcx,%r13 + mov %rcx,%r14 + + ror $28,%rbx + ror $34,%r13 + mov %rcx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rbx + ror $5,%r13 + or %r8,%r14 # a|c + + xor %r13,%rbx # h=Sigma0(a) + and %r8,%r15 # a&c + add %r12,%r9 # d+=T1 + + and %rdx,%r14 # (a|c)&b + add %r12,%rbx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rbx # h+=Maj(a,b,c) + mov 64(%rsp),%r13 + mov 40(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 0(%rsp),%r12 + + add 56(%rsp),%r12 + mov %r9,%r13 + mov %r9,%r14 + mov %r10,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r11,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r9,%r15 # (f^g)&e + mov %r12,56(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r11,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rax,%r12 # T1+=h + + mov %rbx,%rax + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rbx,%r13 + mov %rbx,%r14 + + ror $28,%rax + ror $34,%r13 + mov %rbx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rax + ror $5,%r13 + or %rdx,%r14 # a|c + + xor %r13,%rax # h=Sigma0(a) + and %rdx,%r15 # a&c + add %r12,%r8 # d+=T1 + + and %rcx,%r14 # (a|c)&b + add %r12,%rax # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rax # h+=Maj(a,b,c) + mov 72(%rsp),%r13 + mov 48(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 8(%rsp),%r12 + + add 64(%rsp),%r12 + mov %r8,%r13 + mov %r8,%r14 + mov %r9,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r10,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r8,%r15 # (f^g)&e + mov %r12,64(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r10,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r11,%r12 # T1+=h + + mov %rax,%r11 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rax,%r13 + mov %rax,%r14 + + ror $28,%r11 + ror $34,%r13 + mov %rax,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r11 + ror $5,%r13 + or %rcx,%r14 # a|c + + xor %r13,%r11 # h=Sigma0(a) + and %rcx,%r15 # a&c + add %r12,%rdx # d+=T1 + + and %rbx,%r14 # (a|c)&b + add %r12,%r11 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r11 # h+=Maj(a,b,c) + mov 80(%rsp),%r13 + mov 56(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 16(%rsp),%r12 + + add 72(%rsp),%r12 + mov %rdx,%r13 + mov %rdx,%r14 + mov %r8,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r9,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rdx,%r15 # (f^g)&e + mov %r12,72(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r9,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r10,%r12 # T1+=h + + mov %r11,%r10 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r11,%r13 + mov %r11,%r14 + + ror $28,%r10 + ror $34,%r13 + mov %r11,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r10 + ror $5,%r13 + or %rbx,%r14 # a|c + + xor %r13,%r10 # h=Sigma0(a) + and %rbx,%r15 # a&c + add %r12,%rcx # d+=T1 + + and %rax,%r14 # (a|c)&b + add %r12,%r10 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r10 # h+=Maj(a,b,c) + mov 88(%rsp),%r13 + mov 64(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 24(%rsp),%r12 + + add 80(%rsp),%r12 + mov %rcx,%r13 + mov %rcx,%r14 + mov %rdx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r8,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rcx,%r15 # (f^g)&e + mov %r12,80(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r8,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r9,%r12 # T1+=h + + mov %r10,%r9 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r10,%r13 + mov %r10,%r14 + + ror $28,%r9 + ror $34,%r13 + mov %r10,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r9 + ror $5,%r13 + or %rax,%r14 # a|c + + xor %r13,%r9 # h=Sigma0(a) + and %rax,%r15 # a&c + add %r12,%rbx # d+=T1 + + and %r11,%r14 # (a|c)&b + add %r12,%r9 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r9 # h+=Maj(a,b,c) + mov 96(%rsp),%r13 + mov 72(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 32(%rsp),%r12 + + add 88(%rsp),%r12 + mov %rbx,%r13 + mov %rbx,%r14 + mov %rcx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rdx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rbx,%r15 # (f^g)&e + mov %r12,88(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rdx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %r8,%r12 # T1+=h + + mov %r9,%r8 + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r9,%r13 + mov %r9,%r14 + + ror $28,%r8 + ror $34,%r13 + mov %r9,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%r8 + ror $5,%r13 + or %r11,%r14 # a|c + + xor %r13,%r8 # h=Sigma0(a) + and %r11,%r15 # a&c + add %r12,%rax # d+=T1 + + and %r10,%r14 # (a|c)&b + add %r12,%r8 # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%r8 # h+=Maj(a,b,c) + mov 104(%rsp),%r13 + mov 80(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 40(%rsp),%r12 + + add 96(%rsp),%r12 + mov %rax,%r13 + mov %rax,%r14 + mov %rbx,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rcx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %rax,%r15 # (f^g)&e + mov %r12,96(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rcx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rdx,%r12 # T1+=h + + mov %r8,%rdx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %r8,%r13 + mov %r8,%r14 + + ror $28,%rdx + ror $34,%r13 + mov %r8,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rdx + ror $5,%r13 + or %r10,%r14 # a|c + + xor %r13,%rdx # h=Sigma0(a) + and %r10,%r15 # a&c + add %r12,%r11 # d+=T1 + + and %r9,%r14 # (a|c)&b + add %r12,%rdx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rdx # h+=Maj(a,b,c) + mov 112(%rsp),%r13 + mov 88(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 48(%rsp),%r12 + + add 104(%rsp),%r12 + mov %r11,%r13 + mov %r11,%r14 + mov %rax,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rbx,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r11,%r15 # (f^g)&e + mov %r12,104(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rbx,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rcx,%r12 # T1+=h + + mov %rdx,%rcx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rdx,%r13 + mov %rdx,%r14 + + ror $28,%rcx + ror $34,%r13 + mov %rdx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rcx + ror $5,%r13 + or %r9,%r14 # a|c + + xor %r13,%rcx # h=Sigma0(a) + and %r9,%r15 # a&c + add %r12,%r10 # d+=T1 + + and %r8,%r14 # (a|c)&b + add %r12,%rcx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rcx # h+=Maj(a,b,c) + mov 120(%rsp),%r13 + mov 96(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 56(%rsp),%r12 + + add 112(%rsp),%r12 + mov %r10,%r13 + mov %r10,%r14 + mov %r11,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %rax,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r10,%r15 # (f^g)&e + mov %r12,112(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %rax,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rbx,%r12 # T1+=h + + mov %rcx,%rbx + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rcx,%r13 + mov %rcx,%r14 + + ror $28,%rbx + ror $34,%r13 + mov %rcx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rbx + ror $5,%r13 + or %r8,%r14 # a|c + + xor %r13,%rbx # h=Sigma0(a) + and %r8,%r15 # a&c + add %r12,%r9 # d+=T1 + + and %rdx,%r14 # (a|c)&b + add %r12,%rbx # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rbx # h+=Maj(a,b,c) + mov 0(%rsp),%r13 + mov 104(%rsp),%r12 + + mov %r13,%r15 + + shr $7,%r13 + ror $1,%r15 + + xor %r15,%r13 + ror $7,%r15 + + xor %r15,%r13 # sigma0(X[(i+1)&0xf]) + mov %r12,%r14 + + shr $6,%r12 + ror $19,%r14 + + xor %r14,%r12 + ror $42,%r14 + + xor %r14,%r12 # sigma1(X[(i+14)&0xf]) + + add %r13,%r12 + + add 64(%rsp),%r12 + + add 120(%rsp),%r12 + mov %r9,%r13 + mov %r9,%r14 + mov %r10,%r15 + + ror $14,%r13 + ror $18,%r14 + xor %r11,%r15 # f^g + + xor %r14,%r13 + ror $23,%r14 + and %r9,%r15 # (f^g)&e + mov %r12,120(%rsp) + + xor %r14,%r13 # Sigma1(e) + xor %r11,%r15 # Ch(e,f,g)=((f^g)&e)^g + add %rax,%r12 # T1+=h + + mov %rbx,%rax + add %r13,%r12 # T1+=Sigma1(e) + + add %r15,%r12 # T1+=Ch(e,f,g) + mov %rbx,%r13 + mov %rbx,%r14 + + ror $28,%rax + ror $34,%r13 + mov %rbx,%r15 + add (%rbp,%rdi,8),%r12 # T1+=K[round] + + xor %r13,%rax + ror $5,%r13 + or %rdx,%r14 # a|c + + xor %r13,%rax # h=Sigma0(a) + and %rdx,%r15 # a&c + add %r12,%r8 # d+=T1 + + and %rcx,%r14 # (a|c)&b + add %r12,%rax # h+=T1 + + or %r15,%r14 # Maj(a,b,c)=((a|c)&b)|(a&c) + lea 1(%rdi),%rdi # round++ + + add %r14,%rax # h+=Maj(a,b,c) + cmp $80,%rdi + jb .Lrounds_16_xx + + mov 16*8+0*8(%rsp),%rdi + lea 16*8(%rsi),%rsi + + add 8*0(%rdi),%rax + add 8*1(%rdi),%rbx + add 8*2(%rdi),%rcx + add 8*3(%rdi),%rdx + add 8*4(%rdi),%r8 + add 8*5(%rdi),%r9 + add 8*6(%rdi),%r10 + add 8*7(%rdi),%r11 + + cmp 16*8+2*8(%rsp),%rsi + + mov %rax,8*0(%rdi) + mov %rbx,8*1(%rdi) + mov %rcx,8*2(%rdi) + mov %rdx,8*3(%rdi) + mov %r8,8*4(%rdi) + mov %r9,8*5(%rdi) + mov %r10,8*6(%rdi) + mov %r11,8*7(%rdi) + jb .Lloop + + mov 16*8+3*8(%rsp),%rsp + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + + ret +SET_SIZE(SHA512TransformBlocks) + +.data +.align 64 +.type K512,@object +K512: + .quad 0x428a2f98d728ae22,0x7137449123ef65cd + .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc + .quad 0x3956c25bf348b538,0x59f111f1b605d019 + .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 + .quad 0xd807aa98a3030242,0x12835b0145706fbe + .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 + .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 + .quad 0x9bdc06a725c71235,0xc19bf174cf692694 + .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 + .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 + .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 + .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 + .quad 0x983e5152ee66dfab,0xa831c66d2db43210 + .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 + .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 + .quad 0x06ca6351e003826f,0x142929670a0e6e70 + .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 + .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df + .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 + .quad 0x81c2c92e47edaee6,0x92722c851482353b + .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 + .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 + .quad 0xd192e819d6ef5218,0xd69906245565a910 + .quad 0xf40e35855771202a,0x106aa07032bbd1b8 + .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 + .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 + .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb + .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 + .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 + .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec + .quad 0x90befffa23631e28,0xa4506cebde82bde9 + .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b + .quad 0xca273eceea26619c,0xd186b8c721c0c207 + .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 + .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 + .quad 0x113f9804bef90dae,0x1b710b35131c471b + .quad 0x28db77f523047d84,0x32caab7b40c72493 + .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c + .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a + .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +#endif /* !lint && !__lint */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/core/kcf_callprov.c +++ linux-aws-4.15.0/zfs/module/icp/core/kcf_callprov.c @@ -0,0 +1,1567 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include + +static int kcf_emulate_dual(kcf_provider_desc_t *, crypto_ctx_t *, + kcf_req_params_t *); + +void +kcf_free_triedlist(kcf_prov_tried_t *list) +{ + kcf_prov_tried_t *l; + + while ((l = list) != NULL) { + list = list->pt_next; + KCF_PROV_REFRELE(l->pt_pd); + kmem_free(l, sizeof (kcf_prov_tried_t)); + } +} + +kcf_prov_tried_t * +kcf_insert_triedlist(kcf_prov_tried_t **list, kcf_provider_desc_t *pd, + int kmflag) +{ + kcf_prov_tried_t *l; + + l = kmem_alloc(sizeof (kcf_prov_tried_t), kmflag); + if (l == NULL) + return (NULL); + + l->pt_pd = pd; + l->pt_next = *list; + *list = l; + + return (l); +} + +static boolean_t +is_in_triedlist(kcf_provider_desc_t *pd, kcf_prov_tried_t *triedl) +{ + while (triedl != NULL) { + if (triedl->pt_pd == pd) + return (B_TRUE); + triedl = triedl->pt_next; + }; + + return (B_FALSE); +} + +/* + * Search a mech entry's hardware provider list for the specified + * provider. Return true if found. + */ +static boolean_t +is_valid_provider_for_mech(kcf_provider_desc_t *pd, kcf_mech_entry_t *me, + crypto_func_group_t fg) +{ + kcf_prov_mech_desc_t *prov_chain; + + prov_chain = me->me_hw_prov_chain; + if (prov_chain != NULL) { + ASSERT(me->me_num_hwprov > 0); + for (; prov_chain != NULL; prov_chain = prov_chain->pm_next) { + if (prov_chain->pm_prov_desc == pd && + IS_FG_SUPPORTED(prov_chain, fg)) { + return (B_TRUE); + } + } + } + return (B_FALSE); +} + +/* + * This routine, given a logical provider, returns the least loaded + * provider belonging to the logical provider. The provider must be + * able to do the specified mechanism, i.e. check that the mechanism + * hasn't been disabled. In addition, just in case providers are not + * entirely equivalent, the provider's entry point is checked for + * non-nullness. This is accomplished by having the caller pass, as + * arguments, the offset of the function group (offset_1), and the + * offset of the function within the function group (offset_2). + * Returns NULL if no provider can be found. + */ +int +kcf_get_hardware_provider(crypto_mech_type_t mech_type_1, + crypto_mech_type_t mech_type_2, boolean_t call_restrict, + kcf_provider_desc_t *old, kcf_provider_desc_t **new, crypto_func_group_t fg) +{ + kcf_provider_desc_t *provider, *real_pd = old; + kcf_provider_desc_t *gpd = NULL; /* good provider */ + kcf_provider_desc_t *bpd = NULL; /* busy provider */ + kcf_provider_list_t *p; + kcf_ops_class_t class; + kcf_mech_entry_t *me; + kcf_mech_entry_tab_t *me_tab; + int index, len, gqlen = INT_MAX, rv = CRYPTO_SUCCESS; + + /* get the mech entry for the specified mechanism */ + class = KCF_MECH2CLASS(mech_type_1); + if ((class < KCF_FIRST_OPSCLASS) || (class > KCF_LAST_OPSCLASS)) { + return (CRYPTO_MECHANISM_INVALID); + } + + me_tab = &kcf_mech_tabs_tab[class]; + index = KCF_MECH2INDEX(mech_type_1); + if ((index < 0) || (index >= me_tab->met_size)) { + return (CRYPTO_MECHANISM_INVALID); + } + + me = &((me_tab->met_tab)[index]); + mutex_enter(&me->me_mutex); + + /* + * We assume the provider descriptor will not go away because + * it is being held somewhere, i.e. its reference count has been + * incremented. In the case of the crypto module, the provider + * descriptor is held by the session structure. + */ + if (old->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + if (old->pd_provider_list == NULL) { + real_pd = NULL; + rv = CRYPTO_DEVICE_ERROR; + goto out; + } + /* + * Find the least loaded real provider. KCF_PROV_LOAD gives + * the load (number of pending requests) of the provider. + */ + mutex_enter(&old->pd_lock); + p = old->pd_provider_list; + while (p != NULL) { + provider = p->pl_provider; + + ASSERT(provider->pd_prov_type != + CRYPTO_LOGICAL_PROVIDER); + + if (call_restrict && + (provider->pd_flags & KCF_PROV_RESTRICTED)) { + p = p->pl_next; + continue; + } + + if (!is_valid_provider_for_mech(provider, me, fg)) { + p = p->pl_next; + continue; + } + + /* provider does second mech */ + if (mech_type_2 != CRYPTO_MECH_INVALID) { + int i; + + i = KCF_TO_PROV_MECH_INDX(provider, + mech_type_2); + if (i == KCF_INVALID_INDX) { + p = p->pl_next; + continue; + } + } + + if (provider->pd_state != KCF_PROV_READY) { + /* choose BUSY if no READY providers */ + if (provider->pd_state == KCF_PROV_BUSY) + bpd = provider; + p = p->pl_next; + continue; + } + + len = KCF_PROV_LOAD(provider); + if (len < gqlen) { + gqlen = len; + gpd = provider; + } + + p = p->pl_next; + } + + if (gpd != NULL) { + real_pd = gpd; + KCF_PROV_REFHOLD(real_pd); + } else if (bpd != NULL) { + real_pd = bpd; + KCF_PROV_REFHOLD(real_pd); + } else { + /* can't find provider */ + real_pd = NULL; + rv = CRYPTO_MECHANISM_INVALID; + } + mutex_exit(&old->pd_lock); + + } else { + if (!KCF_IS_PROV_USABLE(old) || + (call_restrict && (old->pd_flags & KCF_PROV_RESTRICTED))) { + real_pd = NULL; + rv = CRYPTO_DEVICE_ERROR; + goto out; + } + + if (!is_valid_provider_for_mech(old, me, fg)) { + real_pd = NULL; + rv = CRYPTO_MECHANISM_INVALID; + goto out; + } + + KCF_PROV_REFHOLD(real_pd); + } +out: + mutex_exit(&me->me_mutex); + *new = real_pd; + return (rv); +} + +/* + * Return the best provider for the specified mechanism. The provider + * is held and it is the caller's responsibility to release it when done. + * The fg input argument is used as a search criterion to pick a provider. + * A provider has to support this function group to be picked. + * + * Find the least loaded provider in the list of providers. We do a linear + * search to find one. This is fine as we assume there are only a few + * number of providers in this list. If this assumption ever changes, + * we should revisit this. + * + * call_restrict represents if the caller should not be allowed to + * use restricted providers. + */ +kcf_provider_desc_t * +kcf_get_mech_provider(crypto_mech_type_t mech_type, kcf_mech_entry_t **mepp, + int *error, kcf_prov_tried_t *triedl, crypto_func_group_t fg, + boolean_t call_restrict, size_t data_size) +{ + kcf_provider_desc_t *pd = NULL, *gpd = NULL; + kcf_prov_mech_desc_t *prov_chain, *mdesc; + int len, gqlen = INT_MAX; + kcf_ops_class_t class; + int index; + kcf_mech_entry_t *me; + kcf_mech_entry_tab_t *me_tab; + + class = KCF_MECH2CLASS(mech_type); + if ((class < KCF_FIRST_OPSCLASS) || (class > KCF_LAST_OPSCLASS)) { + *error = CRYPTO_MECHANISM_INVALID; + return (NULL); + } + + me_tab = &kcf_mech_tabs_tab[class]; + index = KCF_MECH2INDEX(mech_type); + if ((index < 0) || (index >= me_tab->met_size)) { + *error = CRYPTO_MECHANISM_INVALID; + return (NULL); + } + + me = &((me_tab->met_tab)[index]); + if (mepp != NULL) + *mepp = me; + + mutex_enter(&me->me_mutex); + + prov_chain = me->me_hw_prov_chain; + + /* + * We check for the threshold for using a hardware provider for + * this amount of data. If there is no software provider available + * for the mechanism, then the threshold is ignored. + */ + if ((prov_chain != NULL) && + ((data_size == 0) || (me->me_threshold == 0) || + (data_size >= me->me_threshold) || + ((mdesc = me->me_sw_prov) == NULL) || + (!IS_FG_SUPPORTED(mdesc, fg)) || + (!KCF_IS_PROV_USABLE(mdesc->pm_prov_desc)))) { + ASSERT(me->me_num_hwprov > 0); + /* there is at least one provider */ + + /* + * Find the least loaded real provider. KCF_PROV_LOAD gives + * the load (number of pending requests) of the provider. + */ + while (prov_chain != NULL) { + pd = prov_chain->pm_prov_desc; + + if (!IS_FG_SUPPORTED(prov_chain, fg) || + !KCF_IS_PROV_USABLE(pd) || + IS_PROVIDER_TRIED(pd, triedl) || + (call_restrict && + (pd->pd_flags & KCF_PROV_RESTRICTED))) { + prov_chain = prov_chain->pm_next; + continue; + } + + if ((len = KCF_PROV_LOAD(pd)) < gqlen) { + gqlen = len; + gpd = pd; + } + + prov_chain = prov_chain->pm_next; + } + + pd = gpd; + } + + /* No HW provider for this mech, is there a SW provider? */ + if (pd == NULL && (mdesc = me->me_sw_prov) != NULL) { + pd = mdesc->pm_prov_desc; + if (!IS_FG_SUPPORTED(mdesc, fg) || + !KCF_IS_PROV_USABLE(pd) || + IS_PROVIDER_TRIED(pd, triedl) || + (call_restrict && (pd->pd_flags & KCF_PROV_RESTRICTED))) + pd = NULL; + } + + if (pd == NULL) { + /* + * We do not want to report CRYPTO_MECH_NOT_SUPPORTED, when + * we are in the "fallback to the next provider" case. Rather + * we preserve the error, so that the client gets the right + * error code. + */ + if (triedl == NULL) + *error = CRYPTO_MECH_NOT_SUPPORTED; + } else + KCF_PROV_REFHOLD(pd); + + mutex_exit(&me->me_mutex); + return (pd); +} + +/* + * Very similar to kcf_get_mech_provider(). Finds the best provider capable of + * a dual operation with both me1 and me2. + * When no dual-ops capable providers are available, return the best provider + * for me1 only, and sets *prov_mt2 to CRYPTO_INVALID_MECHID; + * We assume/expect that a slower HW capable of the dual is still + * faster than the 2 fastest providers capable of the individual ops + * separately. + */ +kcf_provider_desc_t * +kcf_get_dual_provider(crypto_mechanism_t *mech1, crypto_mechanism_t *mech2, + kcf_mech_entry_t **mepp, crypto_mech_type_t *prov_mt1, + crypto_mech_type_t *prov_mt2, int *error, kcf_prov_tried_t *triedl, + crypto_func_group_t fg1, crypto_func_group_t fg2, boolean_t call_restrict, + size_t data_size) +{ + kcf_provider_desc_t *pd = NULL, *pdm1 = NULL, *pdm1m2 = NULL; + kcf_prov_mech_desc_t *prov_chain, *mdesc; + int len, gqlen = INT_MAX, dgqlen = INT_MAX; + crypto_mech_info_list_t *mil; + crypto_mech_type_t m2id = mech2->cm_type; + kcf_mech_entry_t *me; + + /* when mech is a valid mechanism, me will be its mech_entry */ + if (kcf_get_mech_entry(mech1->cm_type, &me) != KCF_SUCCESS) { + *error = CRYPTO_MECHANISM_INVALID; + return (NULL); + } + + *prov_mt2 = CRYPTO_MECH_INVALID; + + if (mepp != NULL) + *mepp = me; + mutex_enter(&me->me_mutex); + + prov_chain = me->me_hw_prov_chain; + /* + * We check the threshold for using a hardware provider for + * this amount of data. If there is no software provider available + * for the first mechanism, then the threshold is ignored. + */ + if ((prov_chain != NULL) && + ((data_size == 0) || (me->me_threshold == 0) || + (data_size >= me->me_threshold) || + ((mdesc = me->me_sw_prov) == NULL) || + (!IS_FG_SUPPORTED(mdesc, fg1)) || + (!KCF_IS_PROV_USABLE(mdesc->pm_prov_desc)))) { + /* there is at least one provider */ + ASSERT(me->me_num_hwprov > 0); + + /* + * Find the least loaded provider capable of the combo + * me1 + me2, and save a pointer to the least loaded + * provider capable of me1 only. + */ + while (prov_chain != NULL) { + pd = prov_chain->pm_prov_desc; + len = KCF_PROV_LOAD(pd); + + if (!IS_FG_SUPPORTED(prov_chain, fg1) || + !KCF_IS_PROV_USABLE(pd) || + IS_PROVIDER_TRIED(pd, triedl) || + (call_restrict && + (pd->pd_flags & KCF_PROV_RESTRICTED))) { + prov_chain = prov_chain->pm_next; + continue; + } + + /* Save the best provider capable of m1 */ + if (len < gqlen) { + *prov_mt1 = + prov_chain->pm_mech_info.cm_mech_number; + gqlen = len; + pdm1 = pd; + } + + /* See if pd can do me2 too */ + for (mil = prov_chain->pm_mi_list; + mil != NULL; mil = mil->ml_next) { + if ((mil->ml_mech_info.cm_func_group_mask & + fg2) == 0) + continue; + + if ((mil->ml_kcf_mechid == m2id) && + (len < dgqlen)) { + /* Bingo! */ + dgqlen = len; + pdm1m2 = pd; + *prov_mt2 = + mil->ml_mech_info.cm_mech_number; + *prov_mt1 = prov_chain-> + pm_mech_info.cm_mech_number; + break; + } + } + + prov_chain = prov_chain->pm_next; + } + + pd = (pdm1m2 != NULL) ? pdm1m2 : pdm1; + } + + /* no HW provider for this mech, is there a SW provider? */ + if (pd == NULL && (mdesc = me->me_sw_prov) != NULL) { + pd = mdesc->pm_prov_desc; + if (!IS_FG_SUPPORTED(mdesc, fg1) || + !KCF_IS_PROV_USABLE(pd) || + IS_PROVIDER_TRIED(pd, triedl) || + (call_restrict && (pd->pd_flags & KCF_PROV_RESTRICTED))) + pd = NULL; + else { + /* See if pd can do me2 too */ + for (mil = me->me_sw_prov->pm_mi_list; + mil != NULL; mil = mil->ml_next) { + if ((mil->ml_mech_info.cm_func_group_mask & + fg2) == 0) + continue; + + if (mil->ml_kcf_mechid == m2id) { + /* Bingo! */ + *prov_mt2 = + mil->ml_mech_info.cm_mech_number; + break; + } + } + *prov_mt1 = me->me_sw_prov->pm_mech_info.cm_mech_number; + } + } + + if (pd == NULL) + *error = CRYPTO_MECH_NOT_SUPPORTED; + else + KCF_PROV_REFHOLD(pd); + + mutex_exit(&me->me_mutex); + return (pd); +} + +/* + * Do the actual work of calling the provider routines. + * + * pd - Provider structure + * ctx - Context for this operation + * params - Parameters for this operation + * rhndl - Request handle to use for notification + * + * The return values are the same as that of the respective SPI. + */ +int +common_submit_request(kcf_provider_desc_t *pd, crypto_ctx_t *ctx, + kcf_req_params_t *params, crypto_req_handle_t rhndl) +{ + int err = CRYPTO_ARGUMENTS_BAD; + kcf_op_type_t optype; + + optype = params->rp_optype; + + switch (params->rp_opgrp) { + case KCF_OG_DIGEST: { + kcf_digest_ops_params_t *dops = ¶ms->rp_u.digest_params; + + switch (optype) { + case KCF_OP_INIT: + /* + * We should do this only here and not in KCF_WRAP_* + * macros. This is because we may want to try other + * providers, in case we recover from a failure. + */ + KCF_SET_PROVIDER_MECHNUM(dops->do_framework_mechtype, + pd, &dops->do_mech); + + err = KCF_PROV_DIGEST_INIT(pd, ctx, &dops->do_mech, + rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_DIGEST(pd, ctx, dops->do_data, + dops->do_digest, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_DIGEST_UPDATE(pd, ctx, + dops->do_data, rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_DIGEST_FINAL(pd, ctx, + dops->do_digest, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(dops->do_framework_mechtype, + pd, &dops->do_mech); + err = KCF_PROV_DIGEST_ATOMIC(pd, dops->do_sid, + &dops->do_mech, dops->do_data, dops->do_digest, + rhndl); + break; + + case KCF_OP_DIGEST_KEY: + err = KCF_PROV_DIGEST_KEY(pd, ctx, dops->do_digest_key, + rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_MAC: { + kcf_mac_ops_params_t *mops = ¶ms->rp_u.mac_params; + + switch (optype) { + case KCF_OP_INIT: + KCF_SET_PROVIDER_MECHNUM(mops->mo_framework_mechtype, + pd, &mops->mo_mech); + + err = KCF_PROV_MAC_INIT(pd, ctx, &mops->mo_mech, + mops->mo_key, mops->mo_templ, rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_MAC(pd, ctx, mops->mo_data, + mops->mo_mac, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_MAC_UPDATE(pd, ctx, mops->mo_data, + rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_MAC_FINAL(pd, ctx, mops->mo_mac, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(mops->mo_framework_mechtype, + pd, &mops->mo_mech); + + err = KCF_PROV_MAC_ATOMIC(pd, mops->mo_sid, + &mops->mo_mech, mops->mo_key, mops->mo_data, + mops->mo_mac, mops->mo_templ, rhndl); + break; + + case KCF_OP_MAC_VERIFY_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(mops->mo_framework_mechtype, + pd, &mops->mo_mech); + + err = KCF_PROV_MAC_VERIFY_ATOMIC(pd, mops->mo_sid, + &mops->mo_mech, mops->mo_key, mops->mo_data, + mops->mo_mac, mops->mo_templ, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_ENCRYPT: { + kcf_encrypt_ops_params_t *eops = ¶ms->rp_u.encrypt_params; + + switch (optype) { + case KCF_OP_INIT: + KCF_SET_PROVIDER_MECHNUM(eops->eo_framework_mechtype, + pd, &eops->eo_mech); + + err = KCF_PROV_ENCRYPT_INIT(pd, ctx, &eops->eo_mech, + eops->eo_key, eops->eo_templ, rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_ENCRYPT(pd, ctx, eops->eo_plaintext, + eops->eo_ciphertext, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_ENCRYPT_UPDATE(pd, ctx, + eops->eo_plaintext, eops->eo_ciphertext, rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_ENCRYPT_FINAL(pd, ctx, + eops->eo_ciphertext, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(eops->eo_framework_mechtype, + pd, &eops->eo_mech); + + err = KCF_PROV_ENCRYPT_ATOMIC(pd, eops->eo_sid, + &eops->eo_mech, eops->eo_key, eops->eo_plaintext, + eops->eo_ciphertext, eops->eo_templ, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_DECRYPT: { + kcf_decrypt_ops_params_t *dcrops = ¶ms->rp_u.decrypt_params; + + switch (optype) { + case KCF_OP_INIT: + KCF_SET_PROVIDER_MECHNUM(dcrops->dop_framework_mechtype, + pd, &dcrops->dop_mech); + + err = KCF_PROV_DECRYPT_INIT(pd, ctx, &dcrops->dop_mech, + dcrops->dop_key, dcrops->dop_templ, rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_DECRYPT(pd, ctx, dcrops->dop_ciphertext, + dcrops->dop_plaintext, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_DECRYPT_UPDATE(pd, ctx, + dcrops->dop_ciphertext, dcrops->dop_plaintext, + rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_DECRYPT_FINAL(pd, ctx, + dcrops->dop_plaintext, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(dcrops->dop_framework_mechtype, + pd, &dcrops->dop_mech); + + err = KCF_PROV_DECRYPT_ATOMIC(pd, dcrops->dop_sid, + &dcrops->dop_mech, dcrops->dop_key, + dcrops->dop_ciphertext, dcrops->dop_plaintext, + dcrops->dop_templ, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_SIGN: { + kcf_sign_ops_params_t *sops = ¶ms->rp_u.sign_params; + + switch (optype) { + case KCF_OP_INIT: + KCF_SET_PROVIDER_MECHNUM(sops->so_framework_mechtype, + pd, &sops->so_mech); + + err = KCF_PROV_SIGN_INIT(pd, ctx, &sops->so_mech, + sops->so_key, sops->so_templ, rhndl); + break; + + case KCF_OP_SIGN_RECOVER_INIT: + KCF_SET_PROVIDER_MECHNUM(sops->so_framework_mechtype, + pd, &sops->so_mech); + + err = KCF_PROV_SIGN_RECOVER_INIT(pd, ctx, + &sops->so_mech, sops->so_key, sops->so_templ, + rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_SIGN(pd, ctx, sops->so_data, + sops->so_signature, rhndl); + break; + + case KCF_OP_SIGN_RECOVER: + err = KCF_PROV_SIGN_RECOVER(pd, ctx, + sops->so_data, sops->so_signature, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_SIGN_UPDATE(pd, ctx, sops->so_data, + rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_SIGN_FINAL(pd, ctx, sops->so_signature, + rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(sops->so_framework_mechtype, + pd, &sops->so_mech); + + err = KCF_PROV_SIGN_ATOMIC(pd, sops->so_sid, + &sops->so_mech, sops->so_key, sops->so_data, + sops->so_templ, sops->so_signature, rhndl); + break; + + case KCF_OP_SIGN_RECOVER_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(sops->so_framework_mechtype, + pd, &sops->so_mech); + + err = KCF_PROV_SIGN_RECOVER_ATOMIC(pd, sops->so_sid, + &sops->so_mech, sops->so_key, sops->so_data, + sops->so_templ, sops->so_signature, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_VERIFY: { + kcf_verify_ops_params_t *vops = ¶ms->rp_u.verify_params; + + switch (optype) { + case KCF_OP_INIT: + KCF_SET_PROVIDER_MECHNUM(vops->vo_framework_mechtype, + pd, &vops->vo_mech); + + err = KCF_PROV_VERIFY_INIT(pd, ctx, &vops->vo_mech, + vops->vo_key, vops->vo_templ, rhndl); + break; + + case KCF_OP_VERIFY_RECOVER_INIT: + KCF_SET_PROVIDER_MECHNUM(vops->vo_framework_mechtype, + pd, &vops->vo_mech); + + err = KCF_PROV_VERIFY_RECOVER_INIT(pd, ctx, + &vops->vo_mech, vops->vo_key, vops->vo_templ, + rhndl); + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_VERIFY(pd, ctx, vops->vo_data, + vops->vo_signature, rhndl); + break; + + case KCF_OP_VERIFY_RECOVER: + err = KCF_PROV_VERIFY_RECOVER(pd, ctx, + vops->vo_signature, vops->vo_data, rhndl); + break; + + case KCF_OP_UPDATE: + err = KCF_PROV_VERIFY_UPDATE(pd, ctx, vops->vo_data, + rhndl); + break; + + case KCF_OP_FINAL: + err = KCF_PROV_VERIFY_FINAL(pd, ctx, vops->vo_signature, + rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(vops->vo_framework_mechtype, + pd, &vops->vo_mech); + + err = KCF_PROV_VERIFY_ATOMIC(pd, vops->vo_sid, + &vops->vo_mech, vops->vo_key, vops->vo_data, + vops->vo_templ, vops->vo_signature, rhndl); + break; + + case KCF_OP_VERIFY_RECOVER_ATOMIC: + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(vops->vo_framework_mechtype, + pd, &vops->vo_mech); + + err = KCF_PROV_VERIFY_RECOVER_ATOMIC(pd, vops->vo_sid, + &vops->vo_mech, vops->vo_key, vops->vo_signature, + vops->vo_templ, vops->vo_data, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_ENCRYPT_MAC: { + kcf_encrypt_mac_ops_params_t *eops = + ¶ms->rp_u.encrypt_mac_params; + kcf_context_t *kcf_secondctx; + + switch (optype) { + case KCF_OP_INIT: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + KCF_SET_PROVIDER_MECHNUM( + eops->em_framework_encr_mechtype, + pd, &eops->em_encr_mech); + + KCF_SET_PROVIDER_MECHNUM( + eops->em_framework_mac_mechtype, + pd, &eops->em_mac_mech); + + err = KCF_PROV_ENCRYPT_MAC_INIT(pd, ctx, + &eops->em_encr_mech, eops->em_encr_key, + &eops->em_mac_mech, eops->em_mac_key, + eops->em_encr_templ, eops->em_mac_templ, + rhndl); + + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_ENCRYPT_MAC(pd, ctx, + eops->em_plaintext, eops->em_ciphertext, + eops->em_mac, rhndl); + break; + + case KCF_OP_UPDATE: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + err = KCF_PROV_ENCRYPT_MAC_UPDATE(pd, ctx, + eops->em_plaintext, eops->em_ciphertext, rhndl); + break; + + case KCF_OP_FINAL: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + err = KCF_PROV_ENCRYPT_MAC_FINAL(pd, ctx, + eops->em_ciphertext, eops->em_mac, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + + KCF_SET_PROVIDER_MECHNUM( + eops->em_framework_encr_mechtype, + pd, &eops->em_encr_mech); + + KCF_SET_PROVIDER_MECHNUM( + eops->em_framework_mac_mechtype, + pd, &eops->em_mac_mech); + + err = KCF_PROV_ENCRYPT_MAC_ATOMIC(pd, eops->em_sid, + &eops->em_encr_mech, eops->em_encr_key, + &eops->em_mac_mech, eops->em_mac_key, + eops->em_plaintext, eops->em_ciphertext, + eops->em_mac, + eops->em_encr_templ, eops->em_mac_templ, + rhndl); + + break; + + default: + break; + } + break; + } + + case KCF_OG_MAC_DECRYPT: { + kcf_mac_decrypt_ops_params_t *dops = + ¶ms->rp_u.mac_decrypt_params; + kcf_context_t *kcf_secondctx; + + switch (optype) { + case KCF_OP_INIT: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_mac_mechtype, + pd, &dops->md_mac_mech); + + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_decr_mechtype, + pd, &dops->md_decr_mech); + + err = KCF_PROV_MAC_DECRYPT_INIT(pd, ctx, + &dops->md_mac_mech, dops->md_mac_key, + &dops->md_decr_mech, dops->md_decr_key, + dops->md_mac_templ, dops->md_decr_templ, + rhndl); + + break; + + case KCF_OP_SINGLE: + err = KCF_PROV_MAC_DECRYPT(pd, ctx, + dops->md_ciphertext, dops->md_mac, + dops->md_plaintext, rhndl); + break; + + case KCF_OP_UPDATE: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + err = KCF_PROV_MAC_DECRYPT_UPDATE(pd, ctx, + dops->md_ciphertext, dops->md_plaintext, rhndl); + break; + + case KCF_OP_FINAL: + kcf_secondctx = ((kcf_context_t *) + (ctx->cc_framework_private))->kc_secondctx; + if (kcf_secondctx != NULL) { + err = kcf_emulate_dual(pd, ctx, params); + break; + } + err = KCF_PROV_MAC_DECRYPT_FINAL(pd, ctx, + dops->md_mac, dops->md_plaintext, rhndl); + break; + + case KCF_OP_ATOMIC: + ASSERT(ctx == NULL); + + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_mac_mechtype, + pd, &dops->md_mac_mech); + + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_decr_mechtype, + pd, &dops->md_decr_mech); + + err = KCF_PROV_MAC_DECRYPT_ATOMIC(pd, dops->md_sid, + &dops->md_mac_mech, dops->md_mac_key, + &dops->md_decr_mech, dops->md_decr_key, + dops->md_ciphertext, dops->md_mac, + dops->md_plaintext, + dops->md_mac_templ, dops->md_decr_templ, + rhndl); + + break; + + case KCF_OP_MAC_VERIFY_DECRYPT_ATOMIC: + ASSERT(ctx == NULL); + + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_mac_mechtype, + pd, &dops->md_mac_mech); + + KCF_SET_PROVIDER_MECHNUM( + dops->md_framework_decr_mechtype, + pd, &dops->md_decr_mech); + + err = KCF_PROV_MAC_VERIFY_DECRYPT_ATOMIC(pd, + dops->md_sid, &dops->md_mac_mech, dops->md_mac_key, + &dops->md_decr_mech, dops->md_decr_key, + dops->md_ciphertext, dops->md_mac, + dops->md_plaintext, + dops->md_mac_templ, dops->md_decr_templ, + rhndl); + + break; + + default: + break; + } + break; + } + + case KCF_OG_KEY: { + kcf_key_ops_params_t *kops = ¶ms->rp_u.key_params; + + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(kops->ko_framework_mechtype, pd, + &kops->ko_mech); + + switch (optype) { + case KCF_OP_KEY_GENERATE: + err = KCF_PROV_KEY_GENERATE(pd, kops->ko_sid, + &kops->ko_mech, + kops->ko_key_template, kops->ko_key_attribute_count, + kops->ko_key_object_id_ptr, rhndl); + break; + + case KCF_OP_KEY_GENERATE_PAIR: + err = KCF_PROV_KEY_GENERATE_PAIR(pd, kops->ko_sid, + &kops->ko_mech, + kops->ko_key_template, kops->ko_key_attribute_count, + kops->ko_private_key_template, + kops->ko_private_key_attribute_count, + kops->ko_key_object_id_ptr, + kops->ko_private_key_object_id_ptr, rhndl); + break; + + case KCF_OP_KEY_WRAP: + err = KCF_PROV_KEY_WRAP(pd, kops->ko_sid, + &kops->ko_mech, + kops->ko_key, kops->ko_key_object_id_ptr, + kops->ko_wrapped_key, kops->ko_wrapped_key_len_ptr, + rhndl); + break; + + case KCF_OP_KEY_UNWRAP: + err = KCF_PROV_KEY_UNWRAP(pd, kops->ko_sid, + &kops->ko_mech, + kops->ko_key, kops->ko_wrapped_key, + kops->ko_wrapped_key_len_ptr, + kops->ko_key_template, kops->ko_key_attribute_count, + kops->ko_key_object_id_ptr, rhndl); + break; + + case KCF_OP_KEY_DERIVE: + err = KCF_PROV_KEY_DERIVE(pd, kops->ko_sid, + &kops->ko_mech, + kops->ko_key, kops->ko_key_template, + kops->ko_key_attribute_count, + kops->ko_key_object_id_ptr, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_RANDOM: { + kcf_random_number_ops_params_t *rops = + ¶ms->rp_u.random_number_params; + + ASSERT(ctx == NULL); + + switch (optype) { + case KCF_OP_RANDOM_SEED: + err = KCF_PROV_SEED_RANDOM(pd, rops->rn_sid, + rops->rn_buf, rops->rn_buflen, rops->rn_entropy_est, + rops->rn_flags, rhndl); + break; + + case KCF_OP_RANDOM_GENERATE: + err = KCF_PROV_GENERATE_RANDOM(pd, rops->rn_sid, + rops->rn_buf, rops->rn_buflen, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_SESSION: { + kcf_session_ops_params_t *sops = ¶ms->rp_u.session_params; + + ASSERT(ctx == NULL); + switch (optype) { + case KCF_OP_SESSION_OPEN: + /* + * so_pd may be a logical provider, in which case + * we need to check whether it has been removed. + */ + if (KCF_IS_PROV_REMOVED(sops->so_pd)) { + err = CRYPTO_DEVICE_ERROR; + break; + } + err = KCF_PROV_SESSION_OPEN(pd, sops->so_sid_ptr, + rhndl, sops->so_pd); + break; + + case KCF_OP_SESSION_CLOSE: + /* + * so_pd may be a logical provider, in which case + * we need to check whether it has been removed. + */ + if (KCF_IS_PROV_REMOVED(sops->so_pd)) { + err = CRYPTO_DEVICE_ERROR; + break; + } + err = KCF_PROV_SESSION_CLOSE(pd, sops->so_sid, + rhndl, sops->so_pd); + break; + + case KCF_OP_SESSION_LOGIN: + err = KCF_PROV_SESSION_LOGIN(pd, sops->so_sid, + sops->so_user_type, sops->so_pin, + sops->so_pin_len, rhndl); + break; + + case KCF_OP_SESSION_LOGOUT: + err = KCF_PROV_SESSION_LOGOUT(pd, sops->so_sid, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_OBJECT: { + kcf_object_ops_params_t *jops = ¶ms->rp_u.object_params; + + ASSERT(ctx == NULL); + switch (optype) { + case KCF_OP_OBJECT_CREATE: + err = KCF_PROV_OBJECT_CREATE(pd, jops->oo_sid, + jops->oo_template, jops->oo_attribute_count, + jops->oo_object_id_ptr, rhndl); + break; + + case KCF_OP_OBJECT_COPY: + err = KCF_PROV_OBJECT_COPY(pd, jops->oo_sid, + jops->oo_object_id, + jops->oo_template, jops->oo_attribute_count, + jops->oo_object_id_ptr, rhndl); + break; + + case KCF_OP_OBJECT_DESTROY: + err = KCF_PROV_OBJECT_DESTROY(pd, jops->oo_sid, + jops->oo_object_id, rhndl); + break; + + case KCF_OP_OBJECT_GET_SIZE: + err = KCF_PROV_OBJECT_GET_SIZE(pd, jops->oo_sid, + jops->oo_object_id, jops->oo_object_size, rhndl); + break; + + case KCF_OP_OBJECT_GET_ATTRIBUTE_VALUE: + err = KCF_PROV_OBJECT_GET_ATTRIBUTE_VALUE(pd, + jops->oo_sid, jops->oo_object_id, + jops->oo_template, jops->oo_attribute_count, rhndl); + break; + + case KCF_OP_OBJECT_SET_ATTRIBUTE_VALUE: + err = KCF_PROV_OBJECT_SET_ATTRIBUTE_VALUE(pd, + jops->oo_sid, jops->oo_object_id, + jops->oo_template, jops->oo_attribute_count, rhndl); + break; + + case KCF_OP_OBJECT_FIND_INIT: + err = KCF_PROV_OBJECT_FIND_INIT(pd, jops->oo_sid, + jops->oo_template, jops->oo_attribute_count, + jops->oo_find_init_pp_ptr, rhndl); + break; + + case KCF_OP_OBJECT_FIND: + err = KCF_PROV_OBJECT_FIND(pd, jops->oo_find_pp, + jops->oo_object_id_ptr, jops->oo_max_object_count, + jops->oo_object_count_ptr, rhndl); + break; + + case KCF_OP_OBJECT_FIND_FINAL: + err = KCF_PROV_OBJECT_FIND_FINAL(pd, jops->oo_find_pp, + rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_PROVMGMT: { + kcf_provmgmt_ops_params_t *pops = ¶ms->rp_u.provmgmt_params; + + ASSERT(ctx == NULL); + switch (optype) { + case KCF_OP_MGMT_EXTINFO: + /* + * po_pd may be a logical provider, in which case + * we need to check whether it has been removed. + */ + if (KCF_IS_PROV_REMOVED(pops->po_pd)) { + err = CRYPTO_DEVICE_ERROR; + break; + } + err = KCF_PROV_EXT_INFO(pd, pops->po_ext_info, rhndl, + pops->po_pd); + break; + + case KCF_OP_MGMT_INITTOKEN: + err = KCF_PROV_INIT_TOKEN(pd, pops->po_pin, + pops->po_pin_len, pops->po_label, rhndl); + break; + + case KCF_OP_MGMT_INITPIN: + err = KCF_PROV_INIT_PIN(pd, pops->po_sid, pops->po_pin, + pops->po_pin_len, rhndl); + break; + + case KCF_OP_MGMT_SETPIN: + err = KCF_PROV_SET_PIN(pd, pops->po_sid, + pops->po_old_pin, pops->po_old_pin_len, + pops->po_pin, pops->po_pin_len, rhndl); + break; + + default: + break; + } + break; + } + + case KCF_OG_NOSTORE_KEY: { + kcf_key_ops_params_t *kops = ¶ms->rp_u.key_params; + + ASSERT(ctx == NULL); + KCF_SET_PROVIDER_MECHNUM(kops->ko_framework_mechtype, pd, + &kops->ko_mech); + + switch (optype) { + case KCF_OP_KEY_GENERATE: + err = KCF_PROV_NOSTORE_KEY_GENERATE(pd, kops->ko_sid, + &kops->ko_mech, kops->ko_key_template, + kops->ko_key_attribute_count, + kops->ko_out_template1, + kops->ko_out_attribute_count1, rhndl); + break; + + case KCF_OP_KEY_GENERATE_PAIR: + err = KCF_PROV_NOSTORE_KEY_GENERATE_PAIR(pd, + kops->ko_sid, &kops->ko_mech, + kops->ko_key_template, kops->ko_key_attribute_count, + kops->ko_private_key_template, + kops->ko_private_key_attribute_count, + kops->ko_out_template1, + kops->ko_out_attribute_count1, + kops->ko_out_template2, + kops->ko_out_attribute_count2, + rhndl); + break; + + case KCF_OP_KEY_DERIVE: + err = KCF_PROV_NOSTORE_KEY_DERIVE(pd, kops->ko_sid, + &kops->ko_mech, kops->ko_key, + kops->ko_key_template, + kops->ko_key_attribute_count, + kops->ko_out_template1, + kops->ko_out_attribute_count1, rhndl); + break; + + default: + break; + } + break; + } + default: + break; + } /* end of switch(params->rp_opgrp) */ + + KCF_PROV_INCRSTATS(pd, err); + return (err); +} + + +/* + * Emulate the call for a multipart dual ops with 2 single steps. + * This routine is always called in the context of a working thread + * running kcf_svc_do_run(). + * The single steps are submitted in a pure synchronous way (blocking). + * When this routine returns, kcf_svc_do_run() will call kcf_aop_done() + * so the originating consumer's callback gets invoked. kcf_aop_done() + * takes care of freeing the operation context. So, this routine does + * not free the operation context. + * + * The provider descriptor is assumed held by the callers. + */ +static int +kcf_emulate_dual(kcf_provider_desc_t *pd, crypto_ctx_t *ctx, + kcf_req_params_t *params) +{ + int err = CRYPTO_ARGUMENTS_BAD; + kcf_op_type_t optype; + size_t save_len; + off_t save_offset; + + optype = params->rp_optype; + + switch (params->rp_opgrp) { + case KCF_OG_ENCRYPT_MAC: { + kcf_encrypt_mac_ops_params_t *cmops = + ¶ms->rp_u.encrypt_mac_params; + kcf_context_t *encr_kcf_ctx; + crypto_ctx_t *mac_ctx; + kcf_req_params_t encr_params; + + encr_kcf_ctx = (kcf_context_t *)(ctx->cc_framework_private); + + switch (optype) { + case KCF_OP_INIT: { + encr_kcf_ctx->kc_secondctx = NULL; + + KCF_WRAP_ENCRYPT_OPS_PARAMS(&encr_params, KCF_OP_INIT, + pd->pd_sid, &cmops->em_encr_mech, + cmops->em_encr_key, NULL, NULL, + cmops->em_encr_templ); + + err = kcf_submit_request(pd, ctx, NULL, &encr_params, + B_FALSE); + + /* It can't be CRYPTO_QUEUED */ + if (err != CRYPTO_SUCCESS) { + break; + } + + err = crypto_mac_init(&cmops->em_mac_mech, + cmops->em_mac_key, cmops->em_mac_templ, + (crypto_context_t *)&mac_ctx, NULL); + + if (err == CRYPTO_SUCCESS) { + encr_kcf_ctx->kc_secondctx = (kcf_context_t *) + mac_ctx->cc_framework_private; + KCF_CONTEXT_REFHOLD((kcf_context_t *) + mac_ctx->cc_framework_private); + } + + break; + + } + case KCF_OP_UPDATE: { + crypto_dual_data_t *ct = cmops->em_ciphertext; + crypto_data_t *pt = cmops->em_plaintext; + kcf_context_t *mac_kcf_ctx = encr_kcf_ctx->kc_secondctx; + crypto_ctx_t *mac_ctx = &mac_kcf_ctx->kc_glbl_ctx; + + KCF_WRAP_ENCRYPT_OPS_PARAMS(&encr_params, KCF_OP_UPDATE, + pd->pd_sid, NULL, NULL, pt, (crypto_data_t *)ct, + NULL); + + err = kcf_submit_request(pd, ctx, NULL, &encr_params, + B_FALSE); + + /* It can't be CRYPTO_QUEUED */ + if (err != CRYPTO_SUCCESS) { + break; + } + + save_offset = ct->dd_offset1; + save_len = ct->dd_len1; + if (ct->dd_len2 == 0) { + /* + * The previous encrypt step was an + * accumulation only and didn't produce any + * partial output + */ + if (ct->dd_len1 == 0) + break; + + } else { + ct->dd_offset1 = ct->dd_offset2; + ct->dd_len1 = ct->dd_len2; + } + err = crypto_mac_update((crypto_context_t)mac_ctx, + (crypto_data_t *)ct, NULL); + + ct->dd_offset1 = save_offset; + ct->dd_len1 = save_len; + + break; + } + case KCF_OP_FINAL: { + crypto_dual_data_t *ct = cmops->em_ciphertext; + crypto_data_t *mac = cmops->em_mac; + kcf_context_t *mac_kcf_ctx = encr_kcf_ctx->kc_secondctx; + crypto_ctx_t *mac_ctx = &mac_kcf_ctx->kc_glbl_ctx; + crypto_context_t mac_context = mac_ctx; + + KCF_WRAP_ENCRYPT_OPS_PARAMS(&encr_params, KCF_OP_FINAL, + pd->pd_sid, NULL, NULL, NULL, (crypto_data_t *)ct, + NULL); + + err = kcf_submit_request(pd, ctx, NULL, &encr_params, + B_FALSE); + + /* It can't be CRYPTO_QUEUED */ + if (err != CRYPTO_SUCCESS) { + crypto_cancel_ctx(mac_context); + break; + } + + if (ct->dd_len2 > 0) { + save_offset = ct->dd_offset1; + save_len = ct->dd_len1; + ct->dd_offset1 = ct->dd_offset2; + ct->dd_len1 = ct->dd_len2; + + err = crypto_mac_update(mac_context, + (crypto_data_t *)ct, NULL); + + ct->dd_offset1 = save_offset; + ct->dd_len1 = save_len; + + if (err != CRYPTO_SUCCESS) { + crypto_cancel_ctx(mac_context); + return (err); + } + } + + /* and finally, collect the MAC */ + err = crypto_mac_final(mac_context, mac, NULL); + break; + } + + default: + break; + } + KCF_PROV_INCRSTATS(pd, err); + break; + } + case KCF_OG_MAC_DECRYPT: { + kcf_mac_decrypt_ops_params_t *mdops = + ¶ms->rp_u.mac_decrypt_params; + kcf_context_t *decr_kcf_ctx; + crypto_ctx_t *mac_ctx; + kcf_req_params_t decr_params; + + decr_kcf_ctx = (kcf_context_t *)(ctx->cc_framework_private); + + switch (optype) { + case KCF_OP_INIT: { + decr_kcf_ctx->kc_secondctx = NULL; + + err = crypto_mac_init(&mdops->md_mac_mech, + mdops->md_mac_key, mdops->md_mac_templ, + (crypto_context_t *)&mac_ctx, NULL); + + /* It can't be CRYPTO_QUEUED */ + if (err != CRYPTO_SUCCESS) { + break; + } + + KCF_WRAP_DECRYPT_OPS_PARAMS(&decr_params, KCF_OP_INIT, + pd->pd_sid, &mdops->md_decr_mech, + mdops->md_decr_key, NULL, NULL, + mdops->md_decr_templ); + + err = kcf_submit_request(pd, ctx, NULL, &decr_params, + B_FALSE); + + /* It can't be CRYPTO_QUEUED */ + if (err != CRYPTO_SUCCESS) { + crypto_cancel_ctx((crypto_context_t)mac_ctx); + break; + } + + decr_kcf_ctx->kc_secondctx = (kcf_context_t *) + mac_ctx->cc_framework_private; + KCF_CONTEXT_REFHOLD((kcf_context_t *) + mac_ctx->cc_framework_private); + + break; + default: + break; + + } + case KCF_OP_UPDATE: { + crypto_dual_data_t *ct = mdops->md_ciphertext; + crypto_data_t *pt = mdops->md_plaintext; + kcf_context_t *mac_kcf_ctx = decr_kcf_ctx->kc_secondctx; + crypto_ctx_t *mac_ctx = &mac_kcf_ctx->kc_glbl_ctx; + + err = crypto_mac_update((crypto_context_t)mac_ctx, + (crypto_data_t *)ct, NULL); + + if (err != CRYPTO_SUCCESS) + break; + + save_offset = ct->dd_offset1; + save_len = ct->dd_len1; + + /* zero ct->dd_len2 means decrypt everything */ + if (ct->dd_len2 > 0) { + ct->dd_offset1 = ct->dd_offset2; + ct->dd_len1 = ct->dd_len2; + } + + err = crypto_decrypt_update((crypto_context_t)ctx, + (crypto_data_t *)ct, pt, NULL); + + ct->dd_offset1 = save_offset; + ct->dd_len1 = save_len; + + break; + } + case KCF_OP_FINAL: { + crypto_data_t *pt = mdops->md_plaintext; + crypto_data_t *mac = mdops->md_mac; + kcf_context_t *mac_kcf_ctx = decr_kcf_ctx->kc_secondctx; + crypto_ctx_t *mac_ctx = &mac_kcf_ctx->kc_glbl_ctx; + + err = crypto_mac_final((crypto_context_t)mac_ctx, + mac, NULL); + + if (err != CRYPTO_SUCCESS) { + crypto_cancel_ctx(ctx); + break; + } + + /* Get the last chunk of plaintext */ + KCF_CONTEXT_REFHOLD(decr_kcf_ctx); + err = crypto_decrypt_final((crypto_context_t)ctx, pt, + NULL); + + break; + } + } + break; + } + default: + + break; + } /* end of switch(params->rp_opgrp) */ + + return (err); +} --- linux-aws-4.15.0.orig/zfs/module/icp/core/kcf_mech_tabs.c +++ linux-aws-4.15.0/zfs/module/icp/core/kcf_mech_tabs.c @@ -0,0 +1,791 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include + +/* Cryptographic mechanisms tables and their access functions */ + +/* + * Internal numbers assigned to mechanisms are coded as follows: + * + * +----------------+----------------+ + * | mech. class | mech. index | + * <--- 32-bits --->+<--- 32-bits ---> + * + * the mech_class identifies the table the mechanism belongs to. + * mech_index is the index for that mechanism in the table. + * A mechanism belongs to exactly 1 table. + * The tables are: + * . digest_mechs_tab[] for the msg digest mechs. + * . cipher_mechs_tab[] for encrypt/decrypt and wrap/unwrap mechs. + * . mac_mechs_tab[] for MAC mechs. + * . sign_mechs_tab[] for sign & verify mechs. + * . keyops_mechs_tab[] for key/key pair generation, and key derivation. + * . misc_mechs_tab[] for mechs that don't belong to any of the above. + * + * There are no holes in the tables. + */ + +/* + * Locking conventions: + * -------------------- + * A global mutex, kcf_mech_tabs_lock, serializes writes to the + * mechanism table via kcf_create_mech_entry(). + * + * A mutex is associated with every entry of the tables. + * The mutex is acquired whenever the entry is accessed for + * 1) retrieving the mech_id (comparing the mech name) + * 2) finding a provider for an xxx_init() or atomic operation. + * 3) altering the mechs entry to add or remove a provider. + * + * In 2), after a provider is chosen, its prov_desc is held and the + * entry's mutex must be dropped. The provider's working function (SPI) is + * called outside the mech_entry's mutex. + * + * The number of providers for a particular mechanism is not expected to be + * long enough to justify the cost of using rwlocks, so the per-mechanism + * entry mutex won't be very *hot*. + * + * When both kcf_mech_tabs_lock and a mech_entry mutex need to be held, + * kcf_mech_tabs_lock must always be acquired first. + * + */ + + /* Mechanisms tables */ + + +/* RFE 4687834 Will deal with the extensibility of these tables later */ + +kcf_mech_entry_t kcf_digest_mechs_tab[KCF_MAXDIGEST]; +kcf_mech_entry_t kcf_cipher_mechs_tab[KCF_MAXCIPHER]; +kcf_mech_entry_t kcf_mac_mechs_tab[KCF_MAXMAC]; +kcf_mech_entry_t kcf_sign_mechs_tab[KCF_MAXSIGN]; +kcf_mech_entry_t kcf_keyops_mechs_tab[KCF_MAXKEYOPS]; +kcf_mech_entry_t kcf_misc_mechs_tab[KCF_MAXMISC]; + +kcf_mech_entry_tab_t kcf_mech_tabs_tab[KCF_LAST_OPSCLASS + 1] = { + {0, NULL}, /* No class zero */ + {KCF_MAXDIGEST, kcf_digest_mechs_tab}, + {KCF_MAXCIPHER, kcf_cipher_mechs_tab}, + {KCF_MAXMAC, kcf_mac_mechs_tab}, + {KCF_MAXSIGN, kcf_sign_mechs_tab}, + {KCF_MAXKEYOPS, kcf_keyops_mechs_tab}, + {KCF_MAXMISC, kcf_misc_mechs_tab} +}; + +/* + * Per-algorithm internal thresholds for the minimum input size of before + * offloading to hardware provider. + * Dispatching a crypto operation to a hardware provider entails paying the + * cost of an additional context switch. Measurments with Sun Accelerator 4000 + * shows that 512-byte jobs or smaller are better handled in software. + * There is room for refinement here. + * + */ +int kcf_md5_threshold = 512; +int kcf_sha1_threshold = 512; +int kcf_des_threshold = 512; +int kcf_des3_threshold = 512; +int kcf_aes_threshold = 512; +int kcf_bf_threshold = 512; +int kcf_rc4_threshold = 512; + +kmutex_t kcf_mech_tabs_lock; +static uint32_t kcf_gen_swprov = 0; + +int kcf_mech_hash_size = 256; +mod_hash_t *kcf_mech_hash; /* mech name to id hash */ + +static crypto_mech_type_t +kcf_mech_hash_find(char *mechname) +{ + mod_hash_val_t hv; + crypto_mech_type_t mt; + + mt = CRYPTO_MECH_INVALID; + if (mod_hash_find(kcf_mech_hash, (mod_hash_key_t)mechname, &hv) == 0) { + mt = *(crypto_mech_type_t *)hv; + ASSERT(mt != CRYPTO_MECH_INVALID); + } + + return (mt); +} + +void +kcf_destroy_mech_tabs(void) +{ + int i, max; + kcf_ops_class_t class; + kcf_mech_entry_t *me_tab; + + if (kcf_mech_hash) + mod_hash_destroy_hash(kcf_mech_hash); + + mutex_destroy(&kcf_mech_tabs_lock); + + for (class = KCF_FIRST_OPSCLASS; class <= KCF_LAST_OPSCLASS; class++) { + max = kcf_mech_tabs_tab[class].met_size; + me_tab = kcf_mech_tabs_tab[class].met_tab; + for (i = 0; i < max; i++) + mutex_destroy(&(me_tab[i].me_mutex)); + } +} + +/* + * kcf_init_mech_tabs() + * + * Called by the misc/kcf's _init() routine to initialize the tables + * of mech_entry's. + */ +void +kcf_init_mech_tabs(void) +{ + int i, max; + kcf_ops_class_t class; + kcf_mech_entry_t *me_tab; + + /* Initializes the mutex locks. */ + + mutex_init(&kcf_mech_tabs_lock, NULL, MUTEX_DEFAULT, NULL); + + /* Then the pre-defined mechanism entries */ + + /* Two digests */ + (void) strncpy(kcf_digest_mechs_tab[0].me_name, SUN_CKM_MD5, + CRYPTO_MAX_MECH_NAME); + kcf_digest_mechs_tab[0].me_threshold = kcf_md5_threshold; + + (void) strncpy(kcf_digest_mechs_tab[1].me_name, SUN_CKM_SHA1, + CRYPTO_MAX_MECH_NAME); + kcf_digest_mechs_tab[1].me_threshold = kcf_sha1_threshold; + + /* The symmetric ciphers in various modes */ + (void) strncpy(kcf_cipher_mechs_tab[0].me_name, SUN_CKM_DES_CBC, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[0].me_threshold = kcf_des_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[1].me_name, SUN_CKM_DES3_CBC, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[1].me_threshold = kcf_des3_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[2].me_name, SUN_CKM_DES_ECB, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[2].me_threshold = kcf_des_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[3].me_name, SUN_CKM_DES3_ECB, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[3].me_threshold = kcf_des3_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[4].me_name, SUN_CKM_BLOWFISH_CBC, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[4].me_threshold = kcf_bf_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[5].me_name, SUN_CKM_BLOWFISH_ECB, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[5].me_threshold = kcf_bf_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[6].me_name, SUN_CKM_AES_CBC, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[6].me_threshold = kcf_aes_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[7].me_name, SUN_CKM_AES_ECB, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[7].me_threshold = kcf_aes_threshold; + + (void) strncpy(kcf_cipher_mechs_tab[8].me_name, SUN_CKM_RC4, + CRYPTO_MAX_MECH_NAME); + kcf_cipher_mechs_tab[8].me_threshold = kcf_rc4_threshold; + + + /* 4 HMACs */ + (void) strncpy(kcf_mac_mechs_tab[0].me_name, SUN_CKM_MD5_HMAC, + CRYPTO_MAX_MECH_NAME); + kcf_mac_mechs_tab[0].me_threshold = kcf_md5_threshold; + + (void) strncpy(kcf_mac_mechs_tab[1].me_name, SUN_CKM_MD5_HMAC_GENERAL, + CRYPTO_MAX_MECH_NAME); + kcf_mac_mechs_tab[1].me_threshold = kcf_md5_threshold; + + (void) strncpy(kcf_mac_mechs_tab[2].me_name, SUN_CKM_SHA1_HMAC, + CRYPTO_MAX_MECH_NAME); + kcf_mac_mechs_tab[2].me_threshold = kcf_sha1_threshold; + + (void) strncpy(kcf_mac_mechs_tab[3].me_name, SUN_CKM_SHA1_HMAC_GENERAL, + CRYPTO_MAX_MECH_NAME); + kcf_mac_mechs_tab[3].me_threshold = kcf_sha1_threshold; + + + /* 1 random number generation pseudo mechanism */ + (void) strncpy(kcf_misc_mechs_tab[0].me_name, SUN_RANDOM, + CRYPTO_MAX_MECH_NAME); + + kcf_mech_hash = mod_hash_create_strhash_nodtr("kcf mech2id hash", + kcf_mech_hash_size, mod_hash_null_valdtor); + + for (class = KCF_FIRST_OPSCLASS; class <= KCF_LAST_OPSCLASS; class++) { + max = kcf_mech_tabs_tab[class].met_size; + me_tab = kcf_mech_tabs_tab[class].met_tab; + for (i = 0; i < max; i++) { + mutex_init(&(me_tab[i].me_mutex), NULL, + MUTEX_DEFAULT, NULL); + if (me_tab[i].me_name[0] != 0) { + me_tab[i].me_mechid = KCF_MECHID(class, i); + (void) mod_hash_insert(kcf_mech_hash, + (mod_hash_key_t)me_tab[i].me_name, + (mod_hash_val_t)&(me_tab[i].me_mechid)); + } + } + } +} + +/* + * kcf_create_mech_entry() + * + * Arguments: + * . The class of mechanism. + * . the name of the new mechanism. + * + * Description: + * Creates a new mech_entry for a mechanism not yet known to the + * framework. + * This routine is called by kcf_add_mech_provider, which is + * in turn invoked for each mechanism supported by a provider. + * The'class' argument depends on the crypto_func_group_t bitmask + * in the registering provider's mech_info struct for this mechanism. + * When there is ambiguity in the mapping between the crypto_func_group_t + * and a class (dual ops, ...) the KCF_MISC_CLASS should be used. + * + * Context: + * User context only. + * + * Returns: + * KCF_INVALID_MECH_CLASS or KCF_INVALID_MECH_NAME if the class or + * the mechname is bogus. + * KCF_MECH_TAB_FULL when there is no room left in the mech. tabs. + * KCF_SUCCESS otherwise. + */ +static int +kcf_create_mech_entry(kcf_ops_class_t class, char *mechname) +{ + crypto_mech_type_t mt; + kcf_mech_entry_t *me_tab; + int i = 0, size; + + if ((class < KCF_FIRST_OPSCLASS) || (class > KCF_LAST_OPSCLASS)) + return (KCF_INVALID_MECH_CLASS); + + if ((mechname == NULL) || (mechname[0] == 0)) + return (KCF_INVALID_MECH_NAME); + /* + * First check if the mechanism is already in one of the tables. + * The mech_entry could be in another class. + */ + mutex_enter(&kcf_mech_tabs_lock); + mt = kcf_mech_hash_find(mechname); + if (mt != CRYPTO_MECH_INVALID) { + /* Nothing to do, regardless the suggested class. */ + mutex_exit(&kcf_mech_tabs_lock); + return (KCF_SUCCESS); + } + /* Now take the next unused mech entry in the class's tab */ + me_tab = kcf_mech_tabs_tab[class].met_tab; + size = kcf_mech_tabs_tab[class].met_size; + + while (i < size) { + mutex_enter(&(me_tab[i].me_mutex)); + if (me_tab[i].me_name[0] == 0) { + /* Found an empty spot */ + (void) strncpy(me_tab[i].me_name, mechname, + CRYPTO_MAX_MECH_NAME); + me_tab[i].me_name[CRYPTO_MAX_MECH_NAME-1] = '\0'; + me_tab[i].me_mechid = KCF_MECHID(class, i); + /* + * No a-priori information about the new mechanism, so + * the threshold is set to zero. + */ + me_tab[i].me_threshold = 0; + + mutex_exit(&(me_tab[i].me_mutex)); + /* Add the new mechanism to the hash table */ + (void) mod_hash_insert(kcf_mech_hash, + (mod_hash_key_t)me_tab[i].me_name, + (mod_hash_val_t)&(me_tab[i].me_mechid)); + break; + } + mutex_exit(&(me_tab[i].me_mutex)); + i++; + } + + mutex_exit(&kcf_mech_tabs_lock); + + if (i == size) { + return (KCF_MECH_TAB_FULL); + } + + return (KCF_SUCCESS); +} + +/* + * kcf_add_mech_provider() + * + * Arguments: + * . An index in to the provider mechanism array + * . A pointer to the provider descriptor + * . A storage for the kcf_prov_mech_desc_t the entry was added at. + * + * Description: + * Adds a new provider of a mechanism to the mechanism's mech_entry + * chain. + * + * Context: + * User context only. + * + * Returns + * KCF_SUCCESS on success + * KCF_MECH_TAB_FULL otherwise. + */ +int +kcf_add_mech_provider(short mech_indx, + kcf_provider_desc_t *prov_desc, kcf_prov_mech_desc_t **pmdpp) +{ + int error; + kcf_mech_entry_t *mech_entry = NULL; + crypto_mech_info_t *mech_info; + crypto_mech_type_t kcf_mech_type, mt; + kcf_prov_mech_desc_t *prov_mech, *prov_mech2; + crypto_func_group_t simple_fg_mask, dual_fg_mask; + crypto_mech_info_t *dmi; + crypto_mech_info_list_t *mil, *mil2; + kcf_mech_entry_t *me; + int i; + + ASSERT(prov_desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + mech_info = &prov_desc->pd_mechanisms[mech_indx]; + + /* + * A mechanism belongs to exactly one mechanism table. + * Find the class corresponding to the function group flag of + * the mechanism. + */ + kcf_mech_type = kcf_mech_hash_find(mech_info->cm_mech_name); + if (kcf_mech_type == CRYPTO_MECH_INVALID) { + crypto_func_group_t fg = mech_info->cm_func_group_mask; + kcf_ops_class_t class; + + if (fg & CRYPTO_FG_DIGEST || fg & CRYPTO_FG_DIGEST_ATOMIC) + class = KCF_DIGEST_CLASS; + else if (fg & CRYPTO_FG_ENCRYPT || fg & CRYPTO_FG_DECRYPT || + fg & CRYPTO_FG_ENCRYPT_ATOMIC || + fg & CRYPTO_FG_DECRYPT_ATOMIC) + class = KCF_CIPHER_CLASS; + else if (fg & CRYPTO_FG_MAC || fg & CRYPTO_FG_MAC_ATOMIC) + class = KCF_MAC_CLASS; + else if (fg & CRYPTO_FG_SIGN || fg & CRYPTO_FG_VERIFY || + fg & CRYPTO_FG_SIGN_ATOMIC || + fg & CRYPTO_FG_VERIFY_ATOMIC || + fg & CRYPTO_FG_SIGN_RECOVER || + fg & CRYPTO_FG_VERIFY_RECOVER) + class = KCF_SIGN_CLASS; + else if (fg & CRYPTO_FG_GENERATE || + fg & CRYPTO_FG_GENERATE_KEY_PAIR || + fg & CRYPTO_FG_WRAP || fg & CRYPTO_FG_UNWRAP || + fg & CRYPTO_FG_DERIVE) + class = KCF_KEYOPS_CLASS; + else + class = KCF_MISC_CLASS; + + /* + * Attempt to create a new mech_entry for the specified + * mechanism. kcf_create_mech_entry() can handle the case + * where such an entry already exists. + */ + if ((error = kcf_create_mech_entry(class, + mech_info->cm_mech_name)) != KCF_SUCCESS) { + return (error); + } + /* get the KCF mech type that was assigned to the mechanism */ + kcf_mech_type = kcf_mech_hash_find(mech_info->cm_mech_name); + ASSERT(kcf_mech_type != CRYPTO_MECH_INVALID); + } + + error = kcf_get_mech_entry(kcf_mech_type, &mech_entry); + ASSERT(error == KCF_SUCCESS); + + /* allocate and initialize new kcf_prov_mech_desc */ + prov_mech = kmem_zalloc(sizeof (kcf_prov_mech_desc_t), KM_SLEEP); + bcopy(mech_info, &prov_mech->pm_mech_info, sizeof (crypto_mech_info_t)); + prov_mech->pm_prov_desc = prov_desc; + prov_desc->pd_mech_indx[KCF_MECH2CLASS(kcf_mech_type)] + [KCF_MECH2INDEX(kcf_mech_type)] = mech_indx; + + KCF_PROV_REFHOLD(prov_desc); + KCF_PROV_IREFHOLD(prov_desc); + + dual_fg_mask = mech_info->cm_func_group_mask & CRYPTO_FG_DUAL_MASK; + + if (dual_fg_mask == ((crypto_func_group_t)0)) + goto add_entry; + + simple_fg_mask = (mech_info->cm_func_group_mask & + CRYPTO_FG_SIMPLEOP_MASK) | CRYPTO_FG_RANDOM; + + for (i = 0; i < prov_desc->pd_mech_list_count; i++) { + dmi = &prov_desc->pd_mechanisms[i]; + + /* skip self */ + if (dmi->cm_mech_number == mech_info->cm_mech_number) + continue; + + /* skip if not a dual operation mechanism */ + if (!(dmi->cm_func_group_mask & dual_fg_mask) || + (dmi->cm_func_group_mask & simple_fg_mask)) + continue; + + mt = kcf_mech_hash_find(dmi->cm_mech_name); + if (mt == CRYPTO_MECH_INVALID) + continue; + + if (kcf_get_mech_entry(mt, &me) != KCF_SUCCESS) + continue; + + mil = kmem_zalloc(sizeof (*mil), KM_SLEEP); + mil2 = kmem_zalloc(sizeof (*mil2), KM_SLEEP); + + /* + * Ignore hard-coded entries in the mech table + * if the provider hasn't registered. + */ + mutex_enter(&me->me_mutex); + if (me->me_hw_prov_chain == NULL && me->me_sw_prov == NULL) { + mutex_exit(&me->me_mutex); + kmem_free(mil, sizeof (*mil)); + kmem_free(mil2, sizeof (*mil2)); + continue; + } + + /* + * Add other dual mechanisms that have registered + * with the framework to this mechanism's + * cross-reference list. + */ + mil->ml_mech_info = *dmi; /* struct assignment */ + mil->ml_kcf_mechid = mt; + + /* add to head of list */ + mil->ml_next = prov_mech->pm_mi_list; + prov_mech->pm_mi_list = mil; + + if (prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER) + prov_mech2 = me->me_hw_prov_chain; + else + prov_mech2 = me->me_sw_prov; + + if (prov_mech2 == NULL) { + kmem_free(mil2, sizeof (*mil2)); + mutex_exit(&me->me_mutex); + continue; + } + + /* + * Update all other cross-reference lists by + * adding this new mechanism. + */ + while (prov_mech2 != NULL) { + if (prov_mech2->pm_prov_desc == prov_desc) { + /* struct assignment */ + mil2->ml_mech_info = *mech_info; + mil2->ml_kcf_mechid = kcf_mech_type; + + /* add to head of list */ + mil2->ml_next = prov_mech2->pm_mi_list; + prov_mech2->pm_mi_list = mil2; + break; + } + prov_mech2 = prov_mech2->pm_next; + } + if (prov_mech2 == NULL) + kmem_free(mil2, sizeof (*mil2)); + + mutex_exit(&me->me_mutex); + } + +add_entry: + /* + * Add new kcf_prov_mech_desc at the front of HW providers + * chain. + */ + switch (prov_desc->pd_prov_type) { + + case CRYPTO_HW_PROVIDER: + mutex_enter(&mech_entry->me_mutex); + prov_mech->pm_me = mech_entry; + prov_mech->pm_next = mech_entry->me_hw_prov_chain; + mech_entry->me_hw_prov_chain = prov_mech; + mech_entry->me_num_hwprov++; + mutex_exit(&mech_entry->me_mutex); + break; + + case CRYPTO_SW_PROVIDER: + mutex_enter(&mech_entry->me_mutex); + if (mech_entry->me_sw_prov != NULL) { + /* + * There is already a SW provider for this mechanism. + * Since we allow only one SW provider per mechanism, + * report this condition. + */ + cmn_err(CE_WARN, "The cryptographic software provider " + "\"%s\" will not be used for %s. The provider " + "\"%s\" will be used for this mechanism " + "instead.", prov_desc->pd_description, + mech_info->cm_mech_name, + mech_entry->me_sw_prov->pm_prov_desc-> + pd_description); + KCF_PROV_REFRELE(prov_desc); + kmem_free(prov_mech, sizeof (kcf_prov_mech_desc_t)); + prov_mech = NULL; + } else { + /* + * Set the provider as the software provider for + * this mechanism. + */ + mech_entry->me_sw_prov = prov_mech; + + /* We'll wrap around after 4 billion registrations! */ + mech_entry->me_gen_swprov = kcf_gen_swprov++; + } + mutex_exit(&mech_entry->me_mutex); + break; + default: + break; + } + + *pmdpp = prov_mech; + + return (KCF_SUCCESS); +} + +/* + * kcf_remove_mech_provider() + * + * Arguments: + * . mech_name: the name of the mechanism. + * . prov_desc: The provider descriptor + * + * Description: + * Removes a provider from chain of provider descriptors. + * The provider is made unavailable to kernel consumers for the specified + * mechanism. + * + * Context: + * User context only. + */ +void +kcf_remove_mech_provider(char *mech_name, kcf_provider_desc_t *prov_desc) +{ + crypto_mech_type_t mech_type; + kcf_prov_mech_desc_t *prov_mech = NULL, *prov_chain; + kcf_prov_mech_desc_t **prev_entry_next; + kcf_mech_entry_t *mech_entry; + crypto_mech_info_list_t *mil, *mil2, *next, **prev_next; + + ASSERT(prov_desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER); + + /* get the KCF mech type that was assigned to the mechanism */ + if ((mech_type = kcf_mech_hash_find(mech_name)) == + CRYPTO_MECH_INVALID) { + /* + * Provider was not allowed for this mech due to policy or + * configuration. + */ + return; + } + + /* get a ptr to the mech_entry that was created */ + if (kcf_get_mech_entry(mech_type, &mech_entry) != KCF_SUCCESS) { + /* + * Provider was not allowed for this mech due to policy or + * configuration. + */ + return; + } + + mutex_enter(&mech_entry->me_mutex); + + switch (prov_desc->pd_prov_type) { + + case CRYPTO_HW_PROVIDER: + /* find the provider in the mech_entry chain */ + prev_entry_next = &mech_entry->me_hw_prov_chain; + prov_mech = mech_entry->me_hw_prov_chain; + while (prov_mech != NULL && + prov_mech->pm_prov_desc != prov_desc) { + prev_entry_next = &prov_mech->pm_next; + prov_mech = prov_mech->pm_next; + } + + if (prov_mech == NULL) { + /* entry not found, simply return */ + mutex_exit(&mech_entry->me_mutex); + return; + } + + /* remove provider entry from mech_entry chain */ + *prev_entry_next = prov_mech->pm_next; + ASSERT(mech_entry->me_num_hwprov > 0); + mech_entry->me_num_hwprov--; + break; + + case CRYPTO_SW_PROVIDER: + if (mech_entry->me_sw_prov == NULL || + mech_entry->me_sw_prov->pm_prov_desc != prov_desc) { + /* not the software provider for this mechanism */ + mutex_exit(&mech_entry->me_mutex); + return; + } + prov_mech = mech_entry->me_sw_prov; + mech_entry->me_sw_prov = NULL; + break; + default: + /* unexpected crypto_provider_type_t */ + mutex_exit(&mech_entry->me_mutex); + return; + } + + mutex_exit(&mech_entry->me_mutex); + + /* Free the dual ops cross-reference lists */ + mil = prov_mech->pm_mi_list; + while (mil != NULL) { + next = mil->ml_next; + if (kcf_get_mech_entry(mil->ml_kcf_mechid, + &mech_entry) != KCF_SUCCESS) { + mil = next; + continue; + } + + mutex_enter(&mech_entry->me_mutex); + if (prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER) + prov_chain = mech_entry->me_hw_prov_chain; + else + prov_chain = mech_entry->me_sw_prov; + + while (prov_chain != NULL) { + if (prov_chain->pm_prov_desc == prov_desc) { + prev_next = &prov_chain->pm_mi_list; + mil2 = prov_chain->pm_mi_list; + while (mil2 != NULL && + mil2->ml_kcf_mechid != mech_type) { + prev_next = &mil2->ml_next; + mil2 = mil2->ml_next; + } + if (mil2 != NULL) { + *prev_next = mil2->ml_next; + kmem_free(mil2, sizeof (*mil2)); + } + break; + } + prov_chain = prov_chain->pm_next; + } + + mutex_exit(&mech_entry->me_mutex); + kmem_free(mil, sizeof (crypto_mech_info_list_t)); + mil = next; + } + + /* free entry */ + KCF_PROV_REFRELE(prov_mech->pm_prov_desc); + KCF_PROV_IREFRELE(prov_mech->pm_prov_desc); + kmem_free(prov_mech, sizeof (kcf_prov_mech_desc_t)); +} + +/* + * kcf_get_mech_entry() + * + * Arguments: + * . The framework mechanism type + * . Storage for the mechanism entry + * + * Description: + * Retrieves the mechanism entry for the mech. + * + * Context: + * User and interrupt contexts. + * + * Returns: + * KCF_MECHANISM_XXX appropriate error code. + * KCF_SUCCESS otherwise. + */ +int +kcf_get_mech_entry(crypto_mech_type_t mech_type, kcf_mech_entry_t **mep) +{ + kcf_ops_class_t class; + int index; + kcf_mech_entry_tab_t *me_tab; + + ASSERT(mep != NULL); + + class = KCF_MECH2CLASS(mech_type); + + if ((class < KCF_FIRST_OPSCLASS) || (class > KCF_LAST_OPSCLASS)) { + /* the caller won't need to know it's an invalid class */ + return (KCF_INVALID_MECH_NUMBER); + } + + me_tab = &kcf_mech_tabs_tab[class]; + index = KCF_MECH2INDEX(mech_type); + + if ((index < 0) || (index >= me_tab->met_size)) { + return (KCF_INVALID_MECH_NUMBER); + } + + *mep = &((me_tab->met_tab)[index]); + + return (KCF_SUCCESS); +} + +/* CURRENTLY UNSUPPORTED: attempting to load the module if it isn't found */ +/* + * Lookup the hash table for an entry that matches the mechname. + * If there are no hardware or software providers for the mechanism, + * but there is an unloaded software provider, this routine will attempt + * to load it. + * + * If the MOD_NOAUTOUNLOAD flag is not set, a software provider is + * in constant danger of being unloaded. For consumers that call + * crypto_mech2id() only once, the provider will not be reloaded + * if it becomes unloaded. If a provider gets loaded elsewhere + * without the MOD_NOAUTOUNLOAD flag being set, we set it now. + */ +crypto_mech_type_t +crypto_mech2id_common(char *mechname, boolean_t load_module) +{ + crypto_mech_type_t mt = kcf_mech_hash_find(mechname); + return (mt); +} --- linux-aws-4.15.0.orig/zfs/module/icp/core/kcf_prov_lib.c +++ linux-aws-4.15.0/zfs/module/icp/core/kcf_prov_lib.c @@ -0,0 +1,229 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +/* + * Utility routine to copy a buffer to a crypto_data structure. + */ + +/* + * Utility routine to apply the command, 'cmd', to the + * data in the uio structure. + */ +int +crypto_uio_data(crypto_data_t *data, uchar_t *buf, int len, cmd_type_t cmd, + void *digest_ctx, void (*update)(void)) +{ + uio_t *uiop = data->cd_uio; + off_t offset = data->cd_offset; + size_t length = len; + uint_t vec_idx; + size_t cur_len; + uchar_t *datap; + + ASSERT(data->cd_format == CRYPTO_DATA_UIO); + if (uiop->uio_segflg != UIO_SYSSPACE) { + return (CRYPTO_ARGUMENTS_BAD); + } + + /* + * Jump to the first iovec containing data to be + * processed. + */ + for (vec_idx = 0; vec_idx < uiop->uio_iovcnt && + offset >= uiop->uio_iov[vec_idx].iov_len; + offset -= uiop->uio_iov[vec_idx++].iov_len) + ; + + if (vec_idx == uiop->uio_iovcnt) { + /* + * The caller specified an offset that is larger than + * the total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + while (vec_idx < uiop->uio_iovcnt && length > 0) { + cur_len = MIN(uiop->uio_iov[vec_idx].iov_len - + offset, length); + + datap = (uchar_t *)(uiop->uio_iov[vec_idx].iov_base + + offset); + switch (cmd) { + case COPY_FROM_DATA: + bcopy(datap, buf, cur_len); + buf += cur_len; + break; + case COPY_TO_DATA: + bcopy(buf, datap, cur_len); + buf += cur_len; + break; + case COMPARE_TO_DATA: + if (bcmp(datap, buf, cur_len)) + return (CRYPTO_SIGNATURE_INVALID); + buf += cur_len; + break; + case MD5_DIGEST_DATA: + case SHA1_DIGEST_DATA: + case SHA2_DIGEST_DATA: + case GHASH_DATA: + return (CRYPTO_ARGUMENTS_BAD); + } + + length -= cur_len; + vec_idx++; + offset = 0; + } + + if (vec_idx == uiop->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed. + */ + switch (cmd) { + case COPY_TO_DATA: + data->cd_length = len; + return (CRYPTO_BUFFER_TOO_SMALL); + default: + return (CRYPTO_DATA_LEN_RANGE); + } + } + + return (CRYPTO_SUCCESS); +} + +int +crypto_put_output_data(uchar_t *buf, crypto_data_t *output, int len) +{ + switch (output->cd_format) { + case CRYPTO_DATA_RAW: + if (output->cd_raw.iov_len < len) { + output->cd_length = len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + bcopy(buf, (uchar_t *)(output->cd_raw.iov_base + + output->cd_offset), len); + break; + + case CRYPTO_DATA_UIO: + return (crypto_uio_data(output, buf, len, + COPY_TO_DATA, NULL, NULL)); + default: + return (CRYPTO_ARGUMENTS_BAD); + } + + return (CRYPTO_SUCCESS); +} + +int +crypto_update_iov(void *ctx, crypto_data_t *input, crypto_data_t *output, + int (*cipher)(void *, caddr_t, size_t, crypto_data_t *), + void (*copy_block)(uint8_t *, uint64_t *)) +{ + common_ctx_t *common_ctx = ctx; + int rv; + + if (input->cd_miscdata != NULL) { + copy_block((uint8_t *)input->cd_miscdata, + &common_ctx->cc_iv[0]); + } + + if (input->cd_raw.iov_len < input->cd_length) + return (CRYPTO_ARGUMENTS_BAD); + + rv = (cipher)(ctx, input->cd_raw.iov_base + input->cd_offset, + input->cd_length, (input == output) ? NULL : output); + + return (rv); +} + +int +crypto_update_uio(void *ctx, crypto_data_t *input, crypto_data_t *output, + int (*cipher)(void *, caddr_t, size_t, crypto_data_t *), + void (*copy_block)(uint8_t *, uint64_t *)) +{ + common_ctx_t *common_ctx = ctx; + uio_t *uiop = input->cd_uio; + off_t offset = input->cd_offset; + size_t length = input->cd_length; + uint_t vec_idx; + size_t cur_len; + + if (input->cd_miscdata != NULL) { + copy_block((uint8_t *)input->cd_miscdata, + &common_ctx->cc_iv[0]); + } + + if (input->cd_uio->uio_segflg != UIO_SYSSPACE) { + return (CRYPTO_ARGUMENTS_BAD); + } + + /* + * Jump to the first iovec containing data to be + * processed. + */ + for (vec_idx = 0; vec_idx < uiop->uio_iovcnt && + offset >= uiop->uio_iov[vec_idx].iov_len; + offset -= uiop->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == uiop->uio_iovcnt) { + /* + * The caller specified an offset that is larger than the + * total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + /* + * Now process the iovecs. + */ + while (vec_idx < uiop->uio_iovcnt && length > 0) { + cur_len = MIN(uiop->uio_iov[vec_idx].iov_len - + offset, length); + + (cipher)(ctx, uiop->uio_iov[vec_idx].iov_base + offset, + cur_len, (input == output) ? NULL : output); + + length -= cur_len; + vec_idx++; + offset = 0; + } + + if (vec_idx == uiop->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it provided. + */ + + return (CRYPTO_DATA_LEN_RANGE); + } + + return (CRYPTO_SUCCESS); +} --- linux-aws-4.15.0.orig/zfs/module/icp/core/kcf_prov_tabs.c +++ linux-aws-4.15.0/zfs/module/icp/core/kcf_prov_tabs.c @@ -0,0 +1,645 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * This file is part of the core Kernel Cryptographic Framework. + * It implements the management of tables of Providers. Entries to + * added and removed when cryptographic providers register with + * and unregister from the framework, respectively. The KCF scheduler + * and ioctl pseudo driver call this function to obtain the list + * of available providers. + * + * The provider table is indexed by crypto_provider_id_t. Each + * element of the table contains a pointer to a provider descriptor, + * or NULL if the entry is free. + * + * This file also implements helper functions to allocate and free + * provider descriptors. + */ + +#include +#include +#include +#include +#include + +#define KCF_MAX_PROVIDERS 512 /* max number of providers */ + +/* + * Prov_tab is an array of providers which is updated when + * a crypto provider registers with kcf. The provider calls the + * SPI routine, crypto_register_provider(), which in turn calls + * kcf_prov_tab_add_provider(). + * + * A provider unregisters by calling crypto_unregister_provider() + * which triggers the removal of the prov_tab entry. + * It also calls kcf_remove_mech_provider(). + * + * prov_tab entries are not updated from kcf.conf or by cryptoadm(1M). + */ +static kcf_provider_desc_t **prov_tab = NULL; +static kmutex_t prov_tab_mutex; /* ensure exclusive access to the table */ +static uint_t prov_tab_num = 0; /* number of providers in table */ +static uint_t prov_tab_max = KCF_MAX_PROVIDERS; + +void +kcf_prov_tab_destroy(void) +{ + mutex_destroy(&prov_tab_mutex); + + if (prov_tab) + kmem_free(prov_tab, prov_tab_max * + sizeof (kcf_provider_desc_t *)); +} + +/* + * Initialize a mutex and the KCF providers table, prov_tab. + * The providers table is dynamically allocated with prov_tab_max entries. + * Called from kcf module _init(). + */ +void +kcf_prov_tab_init(void) +{ + mutex_init(&prov_tab_mutex, NULL, MUTEX_DEFAULT, NULL); + + prov_tab = kmem_zalloc(prov_tab_max * sizeof (kcf_provider_desc_t *), + KM_SLEEP); +} + +/* + * Add a provider to the provider table. If no free entry can be found + * for the new provider, returns CRYPTO_HOST_MEMORY. Otherwise, add + * the provider to the table, initialize the pd_prov_id field + * of the specified provider descriptor to the index in that table, + * and return CRYPTO_SUCCESS. Note that a REFHOLD is done on the + * provider when pointed to by a table entry. + */ +int +kcf_prov_tab_add_provider(kcf_provider_desc_t *prov_desc) +{ + uint_t i; + + ASSERT(prov_tab != NULL); + + mutex_enter(&prov_tab_mutex); + + /* find free slot in providers table */ + for (i = 1; i < KCF_MAX_PROVIDERS && prov_tab[i] != NULL; i++) + ; + if (i == KCF_MAX_PROVIDERS) { + /* ran out of providers entries */ + mutex_exit(&prov_tab_mutex); + cmn_err(CE_WARN, "out of providers entries"); + return (CRYPTO_HOST_MEMORY); + } + + /* initialize entry */ + prov_tab[i] = prov_desc; + KCF_PROV_REFHOLD(prov_desc); + KCF_PROV_IREFHOLD(prov_desc); + prov_tab_num++; + + mutex_exit(&prov_tab_mutex); + + /* update provider descriptor */ + prov_desc->pd_prov_id = i; + + /* + * The KCF-private provider handle is defined as the internal + * provider id. + */ + prov_desc->pd_kcf_prov_handle = + (crypto_kcf_provider_handle_t)prov_desc->pd_prov_id; + + return (CRYPTO_SUCCESS); +} + +/* + * Remove the provider specified by its id. A REFRELE is done on the + * corresponding provider descriptor before this function returns. + * Returns CRYPTO_UNKNOWN_PROVIDER if the provider id is not valid. + */ +int +kcf_prov_tab_rem_provider(crypto_provider_id_t prov_id) +{ + kcf_provider_desc_t *prov_desc; + + ASSERT(prov_tab != NULL); + ASSERT(prov_tab_num >= 0); + + /* + * Validate provider id, since it can be specified by a 3rd-party + * provider. + */ + + mutex_enter(&prov_tab_mutex); + if (prov_id >= KCF_MAX_PROVIDERS || + ((prov_desc = prov_tab[prov_id]) == NULL)) { + mutex_exit(&prov_tab_mutex); + return (CRYPTO_INVALID_PROVIDER_ID); + } + mutex_exit(&prov_tab_mutex); + + /* + * The provider id must remain valid until the associated provider + * descriptor is freed. For this reason, we simply release our + * reference to the descriptor here. When the reference count + * reaches zero, kcf_free_provider_desc() will be invoked and + * the associated entry in the providers table will be released + * at that time. + */ + + KCF_PROV_REFRELE(prov_desc); + KCF_PROV_IREFRELE(prov_desc); + + return (CRYPTO_SUCCESS); +} + +/* + * Returns the provider descriptor corresponding to the specified + * provider id. A REFHOLD is done on the descriptor before it is + * returned to the caller. It is the responsibility of the caller + * to do a REFRELE once it is done with the provider descriptor. + */ +kcf_provider_desc_t * +kcf_prov_tab_lookup(crypto_provider_id_t prov_id) +{ + kcf_provider_desc_t *prov_desc; + + mutex_enter(&prov_tab_mutex); + + prov_desc = prov_tab[prov_id]; + + if (prov_desc == NULL) { + mutex_exit(&prov_tab_mutex); + return (NULL); + } + + KCF_PROV_REFHOLD(prov_desc); + + mutex_exit(&prov_tab_mutex); + + return (prov_desc); +} + +static void +allocate_ops_v1(crypto_ops_t *src, crypto_ops_t *dst, uint_t *mech_list_count) +{ + if (src->co_control_ops != NULL) + dst->co_control_ops = kmem_alloc(sizeof (crypto_control_ops_t), + KM_SLEEP); + + if (src->co_digest_ops != NULL) + dst->co_digest_ops = kmem_alloc(sizeof (crypto_digest_ops_t), + KM_SLEEP); + + if (src->co_cipher_ops != NULL) + dst->co_cipher_ops = kmem_alloc(sizeof (crypto_cipher_ops_t), + KM_SLEEP); + + if (src->co_mac_ops != NULL) + dst->co_mac_ops = kmem_alloc(sizeof (crypto_mac_ops_t), + KM_SLEEP); + + if (src->co_sign_ops != NULL) + dst->co_sign_ops = kmem_alloc(sizeof (crypto_sign_ops_t), + KM_SLEEP); + + if (src->co_verify_ops != NULL) + dst->co_verify_ops = kmem_alloc(sizeof (crypto_verify_ops_t), + KM_SLEEP); + + if (src->co_dual_ops != NULL) + dst->co_dual_ops = kmem_alloc(sizeof (crypto_dual_ops_t), + KM_SLEEP); + + if (src->co_dual_cipher_mac_ops != NULL) + dst->co_dual_cipher_mac_ops = kmem_alloc( + sizeof (crypto_dual_cipher_mac_ops_t), KM_SLEEP); + + if (src->co_random_ops != NULL) { + dst->co_random_ops = kmem_alloc( + sizeof (crypto_random_number_ops_t), KM_SLEEP); + + /* + * Allocate storage to store the array of supported mechanisms + * specified by provider. We allocate extra mechanism storage + * if the provider has random_ops since we keep an internal + * mechanism, SUN_RANDOM, in this case. + */ + (*mech_list_count)++; + } + + if (src->co_session_ops != NULL) + dst->co_session_ops = kmem_alloc(sizeof (crypto_session_ops_t), + KM_SLEEP); + + if (src->co_object_ops != NULL) + dst->co_object_ops = kmem_alloc(sizeof (crypto_object_ops_t), + KM_SLEEP); + + if (src->co_key_ops != NULL) + dst->co_key_ops = kmem_alloc(sizeof (crypto_key_ops_t), + KM_SLEEP); + + if (src->co_provider_ops != NULL) + dst->co_provider_ops = kmem_alloc( + sizeof (crypto_provider_management_ops_t), KM_SLEEP); + + if (src->co_ctx_ops != NULL) + dst->co_ctx_ops = kmem_alloc(sizeof (crypto_ctx_ops_t), + KM_SLEEP); +} + +static void +allocate_ops_v2(crypto_ops_t *src, crypto_ops_t *dst) +{ + if (src->co_mech_ops != NULL) + dst->co_mech_ops = kmem_alloc(sizeof (crypto_mech_ops_t), + KM_SLEEP); +} + +static void +allocate_ops_v3(crypto_ops_t *src, crypto_ops_t *dst) +{ + if (src->co_nostore_key_ops != NULL) + dst->co_nostore_key_ops = + kmem_alloc(sizeof (crypto_nostore_key_ops_t), KM_SLEEP); +} + +/* + * Allocate a provider descriptor. mech_list_count specifies the + * number of mechanisms supported by the providers, and is used + * to allocate storage for the mechanism table. + * This function may sleep while allocating memory, which is OK + * since it is invoked from user context during provider registration. + */ +kcf_provider_desc_t * +kcf_alloc_provider_desc(crypto_provider_info_t *info) +{ + int i, j; + kcf_provider_desc_t *desc; + uint_t mech_list_count = info->pi_mech_list_count; + crypto_ops_t *src_ops = info->pi_ops_vector; + + desc = kmem_zalloc(sizeof (kcf_provider_desc_t), KM_SLEEP); + + /* + * pd_description serves two purposes + * - Appears as a blank padded PKCS#11 style string, that will be + * returned to applications in CK_SLOT_INFO.slotDescription. + * This means that we should not have a null character in the + * first CRYPTO_PROVIDER_DESCR_MAX_LEN bytes. + * - Appears as a null-terminated string that can be used by + * other kcf routines. + * + * So, we allocate enough room for one extra null terminator + * which keeps every one happy. + */ + desc->pd_description = kmem_alloc(CRYPTO_PROVIDER_DESCR_MAX_LEN + 1, + KM_SLEEP); + (void) memset(desc->pd_description, ' ', + CRYPTO_PROVIDER_DESCR_MAX_LEN); + desc->pd_description[CRYPTO_PROVIDER_DESCR_MAX_LEN] = '\0'; + + /* + * Since the framework does not require the ops vector specified + * by the providers during registration to be persistent, + * KCF needs to allocate storage where copies of the ops + * vectors are copied. + */ + desc->pd_ops_vector = kmem_zalloc(sizeof (crypto_ops_t), KM_SLEEP); + + if (info->pi_provider_type != CRYPTO_LOGICAL_PROVIDER) { + allocate_ops_v1(src_ops, desc->pd_ops_vector, &mech_list_count); + if (info->pi_interface_version >= CRYPTO_SPI_VERSION_2) + allocate_ops_v2(src_ops, desc->pd_ops_vector); + if (info->pi_interface_version == CRYPTO_SPI_VERSION_3) + allocate_ops_v3(src_ops, desc->pd_ops_vector); + } + + desc->pd_mech_list_count = mech_list_count; + desc->pd_mechanisms = kmem_zalloc(sizeof (crypto_mech_info_t) * + mech_list_count, KM_SLEEP); + for (i = 0; i < KCF_OPS_CLASSSIZE; i++) + for (j = 0; j < KCF_MAXMECHTAB; j++) + desc->pd_mech_indx[i][j] = KCF_INVALID_INDX; + + desc->pd_prov_id = KCF_PROVID_INVALID; + desc->pd_state = KCF_PROV_ALLOCATED; + + mutex_init(&desc->pd_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&desc->pd_resume_cv, NULL, CV_DEFAULT, NULL); + cv_init(&desc->pd_remove_cv, NULL, CV_DEFAULT, NULL); + + return (desc); +} + +/* + * Called by KCF_PROV_REFRELE when a provider's reference count drops + * to zero. We free the descriptor when the last reference is released. + * However, for software providers, we do not free it when there is an + * unregister thread waiting. We signal that thread in this case and + * that thread is responsible for freeing the descriptor. + */ +void +kcf_provider_zero_refcnt(kcf_provider_desc_t *desc) +{ + mutex_enter(&desc->pd_lock); + switch (desc->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + if (desc->pd_state == KCF_PROV_REMOVED || + desc->pd_state == KCF_PROV_DISABLED) { + desc->pd_state = KCF_PROV_FREED; + cv_broadcast(&desc->pd_remove_cv); + mutex_exit(&desc->pd_lock); + break; + } + /* FALLTHRU */ + + case CRYPTO_HW_PROVIDER: + case CRYPTO_LOGICAL_PROVIDER: + mutex_exit(&desc->pd_lock); + kcf_free_provider_desc(desc); + } +} + +/* + * Free a provider descriptor. + */ +void +kcf_free_provider_desc(kcf_provider_desc_t *desc) +{ + if (desc == NULL) + return; + + mutex_enter(&prov_tab_mutex); + if (desc->pd_prov_id != KCF_PROVID_INVALID) { + /* release the associated providers table entry */ + ASSERT(prov_tab[desc->pd_prov_id] != NULL); + prov_tab[desc->pd_prov_id] = NULL; + prov_tab_num--; + } + mutex_exit(&prov_tab_mutex); + + /* free the kernel memory associated with the provider descriptor */ + + if (desc->pd_description != NULL) + kmem_free(desc->pd_description, + CRYPTO_PROVIDER_DESCR_MAX_LEN + 1); + + if (desc->pd_ops_vector != NULL) { + + if (desc->pd_ops_vector->co_control_ops != NULL) + kmem_free(desc->pd_ops_vector->co_control_ops, + sizeof (crypto_control_ops_t)); + + if (desc->pd_ops_vector->co_digest_ops != NULL) + kmem_free(desc->pd_ops_vector->co_digest_ops, + sizeof (crypto_digest_ops_t)); + + if (desc->pd_ops_vector->co_cipher_ops != NULL) + kmem_free(desc->pd_ops_vector->co_cipher_ops, + sizeof (crypto_cipher_ops_t)); + + if (desc->pd_ops_vector->co_mac_ops != NULL) + kmem_free(desc->pd_ops_vector->co_mac_ops, + sizeof (crypto_mac_ops_t)); + + if (desc->pd_ops_vector->co_sign_ops != NULL) + kmem_free(desc->pd_ops_vector->co_sign_ops, + sizeof (crypto_sign_ops_t)); + + if (desc->pd_ops_vector->co_verify_ops != NULL) + kmem_free(desc->pd_ops_vector->co_verify_ops, + sizeof (crypto_verify_ops_t)); + + if (desc->pd_ops_vector->co_dual_ops != NULL) + kmem_free(desc->pd_ops_vector->co_dual_ops, + sizeof (crypto_dual_ops_t)); + + if (desc->pd_ops_vector->co_dual_cipher_mac_ops != NULL) + kmem_free(desc->pd_ops_vector->co_dual_cipher_mac_ops, + sizeof (crypto_dual_cipher_mac_ops_t)); + + if (desc->pd_ops_vector->co_random_ops != NULL) + kmem_free(desc->pd_ops_vector->co_random_ops, + sizeof (crypto_random_number_ops_t)); + + if (desc->pd_ops_vector->co_session_ops != NULL) + kmem_free(desc->pd_ops_vector->co_session_ops, + sizeof (crypto_session_ops_t)); + + if (desc->pd_ops_vector->co_object_ops != NULL) + kmem_free(desc->pd_ops_vector->co_object_ops, + sizeof (crypto_object_ops_t)); + + if (desc->pd_ops_vector->co_key_ops != NULL) + kmem_free(desc->pd_ops_vector->co_key_ops, + sizeof (crypto_key_ops_t)); + + if (desc->pd_ops_vector->co_provider_ops != NULL) + kmem_free(desc->pd_ops_vector->co_provider_ops, + sizeof (crypto_provider_management_ops_t)); + + if (desc->pd_ops_vector->co_ctx_ops != NULL) + kmem_free(desc->pd_ops_vector->co_ctx_ops, + sizeof (crypto_ctx_ops_t)); + + if (desc->pd_ops_vector->co_mech_ops != NULL) + kmem_free(desc->pd_ops_vector->co_mech_ops, + sizeof (crypto_mech_ops_t)); + + if (desc->pd_ops_vector->co_nostore_key_ops != NULL) + kmem_free(desc->pd_ops_vector->co_nostore_key_ops, + sizeof (crypto_nostore_key_ops_t)); + + kmem_free(desc->pd_ops_vector, sizeof (crypto_ops_t)); + } + + if (desc->pd_mechanisms != NULL) + /* free the memory associated with the mechanism info's */ + kmem_free(desc->pd_mechanisms, sizeof (crypto_mech_info_t) * + desc->pd_mech_list_count); + + if (desc->pd_sched_info.ks_taskq != NULL) + taskq_destroy(desc->pd_sched_info.ks_taskq); + + mutex_destroy(&desc->pd_lock); + cv_destroy(&desc->pd_resume_cv); + cv_destroy(&desc->pd_remove_cv); + + kmem_free(desc, sizeof (kcf_provider_desc_t)); +} + +/* + * Returns an array of hardware and logical provider descriptors, + * a.k.a the PKCS#11 slot list. A REFHOLD is done on each descriptor + * before the array is returned. The entire table can be freed by + * calling kcf_free_provider_tab(). + */ +int +kcf_get_slot_list(uint_t *count, kcf_provider_desc_t ***array, + boolean_t unverified) +{ + kcf_provider_desc_t *prov_desc; + kcf_provider_desc_t **p = NULL; + char *last; + uint_t cnt = 0; + uint_t i, j; + int rval = CRYPTO_SUCCESS; + size_t n, final_size; + + /* count the providers */ + mutex_enter(&prov_tab_mutex); + for (i = 0; i < KCF_MAX_PROVIDERS; i++) { + if ((prov_desc = prov_tab[i]) != NULL && + ((prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER && + (prov_desc->pd_flags & CRYPTO_HIDE_PROVIDER) == 0) || + prov_desc->pd_prov_type == CRYPTO_LOGICAL_PROVIDER)) { + if (KCF_IS_PROV_USABLE(prov_desc) || + (unverified && KCF_IS_PROV_UNVERIFIED(prov_desc))) { + cnt++; + } + } + } + mutex_exit(&prov_tab_mutex); + + if (cnt == 0) + goto out; + + n = cnt * sizeof (kcf_provider_desc_t *); +again: + p = kmem_zalloc(n, KM_SLEEP); + + /* pointer to last entry in the array */ + last = (char *)&p[cnt-1]; + + mutex_enter(&prov_tab_mutex); + /* fill the slot list */ + for (i = 0, j = 0; i < KCF_MAX_PROVIDERS; i++) { + if ((prov_desc = prov_tab[i]) != NULL && + ((prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER && + (prov_desc->pd_flags & CRYPTO_HIDE_PROVIDER) == 0) || + prov_desc->pd_prov_type == CRYPTO_LOGICAL_PROVIDER)) { + if (KCF_IS_PROV_USABLE(prov_desc) || + (unverified && KCF_IS_PROV_UNVERIFIED(prov_desc))) { + if ((char *)&p[j] > last) { + mutex_exit(&prov_tab_mutex); + kcf_free_provider_tab(cnt, p); + n = n << 1; + cnt = cnt << 1; + goto again; + } + p[j++] = prov_desc; + KCF_PROV_REFHOLD(prov_desc); + } + } + } + mutex_exit(&prov_tab_mutex); + + final_size = j * sizeof (kcf_provider_desc_t *); + cnt = j; + ASSERT(final_size <= n); + + /* check if buffer we allocated is too large */ + if (final_size < n) { + char *final_buffer = NULL; + + if (final_size > 0) { + final_buffer = kmem_alloc(final_size, KM_SLEEP); + bcopy(p, final_buffer, final_size); + } + kmem_free(p, n); + p = (kcf_provider_desc_t **)final_buffer; + } +out: + *count = cnt; + *array = p; + return (rval); +} + +/* + * Free an array of hardware provider descriptors. A REFRELE + * is done on each descriptor before the table is freed. + */ +void +kcf_free_provider_tab(uint_t count, kcf_provider_desc_t **array) +{ + kcf_provider_desc_t *prov_desc; + int i; + + for (i = 0; i < count; i++) { + if ((prov_desc = array[i]) != NULL) { + KCF_PROV_REFRELE(prov_desc); + } + } + kmem_free(array, count * sizeof (kcf_provider_desc_t *)); +} + +/* + * Returns in the location pointed to by pd a pointer to the descriptor + * for the software provider for the specified mechanism. + * The provider descriptor is returned held and it is the caller's + * responsibility to release it when done. The mechanism entry + * is returned if the optional argument mep is non NULL. + * + * Returns one of the CRYPTO_ * error codes on failure, and + * CRYPTO_SUCCESS on success. + */ +int +kcf_get_sw_prov(crypto_mech_type_t mech_type, kcf_provider_desc_t **pd, + kcf_mech_entry_t **mep, boolean_t log_warn) +{ + kcf_mech_entry_t *me; + + /* get the mechanism entry for this mechanism */ + if (kcf_get_mech_entry(mech_type, &me) != KCF_SUCCESS) + return (CRYPTO_MECHANISM_INVALID); + + /* + * Get the software provider for this mechanism. + * Lock the mech_entry until we grab the 'pd'. + */ + mutex_enter(&me->me_mutex); + + if (me->me_sw_prov == NULL || + (*pd = me->me_sw_prov->pm_prov_desc) == NULL) { + /* no SW provider for this mechanism */ + if (log_warn) + cmn_err(CE_WARN, "no SW provider for \"%s\"\n", + me->me_name); + mutex_exit(&me->me_mutex); + return (CRYPTO_MECH_NOT_SUPPORTED); + } + + KCF_PROV_REFHOLD(*pd); + mutex_exit(&me->me_mutex); + + if (mep != NULL) + *mep = me; + + return (CRYPTO_SUCCESS); +} --- linux-aws-4.15.0.orig/zfs/module/icp/core/kcf_sched.c +++ linux-aws-4.15.0/zfs/module/icp/core/kcf_sched.c @@ -0,0 +1,1782 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * This file contains the core framework routines for the + * kernel cryptographic framework. These routines are at the + * layer, between the kernel API/ioctls and the SPI. + */ + +#include +#include +#include +#include +#include + +kcf_global_swq_t *gswq; /* Global software queue */ + +/* Thread pool related variables */ +static kcf_pool_t *kcfpool; /* Thread pool of kcfd LWPs */ +int kcf_maxthreads = 2; +int kcf_minthreads = 1; +int kcf_thr_multiple = 2; /* Boot-time tunable for experimentation */ +static ulong_t kcf_idlethr_timeout; +#define KCF_DEFAULT_THRTIMEOUT 60000000 /* 60 seconds */ + +/* kmem caches used by the scheduler */ +static kmem_cache_t *kcf_sreq_cache; +static kmem_cache_t *kcf_areq_cache; +static kmem_cache_t *kcf_context_cache; + +/* Global request ID table */ +static kcf_reqid_table_t *kcf_reqid_table[REQID_TABLES]; + +/* KCF stats. Not protected. */ +static kcf_stats_t kcf_ksdata = { + { "total threads in pool", KSTAT_DATA_UINT32}, + { "idle threads in pool", KSTAT_DATA_UINT32}, + { "min threads in pool", KSTAT_DATA_UINT32}, + { "max threads in pool", KSTAT_DATA_UINT32}, + { "requests in gswq", KSTAT_DATA_UINT32}, + { "max requests in gswq", KSTAT_DATA_UINT32}, + { "threads for HW taskq", KSTAT_DATA_UINT32}, + { "minalloc for HW taskq", KSTAT_DATA_UINT32}, + { "maxalloc for HW taskq", KSTAT_DATA_UINT32} +}; + +static kstat_t *kcf_misc_kstat = NULL; +ulong_t kcf_swprov_hndl = 0; + +static kcf_areq_node_t *kcf_areqnode_alloc(kcf_provider_desc_t *, + kcf_context_t *, crypto_call_req_t *, kcf_req_params_t *, boolean_t); +static int kcf_disp_sw_request(kcf_areq_node_t *); +static void process_req_hwp(void *); +static int kcf_enqueue(kcf_areq_node_t *); +static void kcfpool_alloc(void); +static void kcf_reqid_delete(kcf_areq_node_t *areq); +static crypto_req_id_t kcf_reqid_insert(kcf_areq_node_t *areq); +static int kcf_misc_kstat_update(kstat_t *ksp, int rw); + +/* + * Create a new context. + */ +crypto_ctx_t * +kcf_new_ctx(crypto_call_req_t *crq, kcf_provider_desc_t *pd, + crypto_session_id_t sid) +{ + crypto_ctx_t *ctx; + kcf_context_t *kcf_ctx; + + kcf_ctx = kmem_cache_alloc(kcf_context_cache, + (crq == NULL) ? KM_SLEEP : KM_NOSLEEP); + if (kcf_ctx == NULL) + return (NULL); + + /* initialize the context for the consumer */ + kcf_ctx->kc_refcnt = 1; + kcf_ctx->kc_req_chain_first = NULL; + kcf_ctx->kc_req_chain_last = NULL; + kcf_ctx->kc_secondctx = NULL; + KCF_PROV_REFHOLD(pd); + kcf_ctx->kc_prov_desc = pd; + kcf_ctx->kc_sw_prov_desc = NULL; + kcf_ctx->kc_mech = NULL; + + ctx = &kcf_ctx->kc_glbl_ctx; + ctx->cc_provider = pd->pd_prov_handle; + ctx->cc_session = sid; + ctx->cc_provider_private = NULL; + ctx->cc_framework_private = (void *)kcf_ctx; + ctx->cc_flags = 0; + ctx->cc_opstate = NULL; + + return (ctx); +} + +/* + * Allocate a new async request node. + * + * ictx - Framework private context pointer + * crq - Has callback function and argument. Should be non NULL. + * req - The parameters to pass to the SPI + */ +static kcf_areq_node_t * +kcf_areqnode_alloc(kcf_provider_desc_t *pd, kcf_context_t *ictx, + crypto_call_req_t *crq, kcf_req_params_t *req, boolean_t isdual) +{ + kcf_areq_node_t *arptr, *areq; + + ASSERT(crq != NULL); + arptr = kmem_cache_alloc(kcf_areq_cache, KM_NOSLEEP); + if (arptr == NULL) + return (NULL); + + arptr->an_state = REQ_ALLOCATED; + arptr->an_reqarg = *crq; + arptr->an_params = *req; + arptr->an_context = ictx; + arptr->an_isdual = isdual; + + arptr->an_next = arptr->an_prev = NULL; + KCF_PROV_REFHOLD(pd); + arptr->an_provider = pd; + arptr->an_tried_plist = NULL; + arptr->an_refcnt = 1; + arptr->an_idnext = arptr->an_idprev = NULL; + + /* + * Requests for context-less operations do not use the + * fields - an_is_my_turn, and an_ctxchain_next. + */ + if (ictx == NULL) + return (arptr); + + KCF_CONTEXT_REFHOLD(ictx); + /* + * Chain this request to the context. + */ + mutex_enter(&ictx->kc_in_use_lock); + arptr->an_ctxchain_next = NULL; + if ((areq = ictx->kc_req_chain_last) == NULL) { + arptr->an_is_my_turn = B_TRUE; + ictx->kc_req_chain_last = + ictx->kc_req_chain_first = arptr; + } else { + ASSERT(ictx->kc_req_chain_first != NULL); + arptr->an_is_my_turn = B_FALSE; + /* Insert the new request to the end of the chain. */ + areq->an_ctxchain_next = arptr; + ictx->kc_req_chain_last = arptr; + } + mutex_exit(&ictx->kc_in_use_lock); + + return (arptr); +} + +/* + * Queue the request node and do one of the following: + * - If there is an idle thread signal it to run. + * - If there is no idle thread and max running threads is not + * reached, signal the creator thread for more threads. + * + * If the two conditions above are not met, we don't need to do + * any thing. The request will be picked up by one of the + * worker threads when it becomes available. + */ +static int +kcf_disp_sw_request(kcf_areq_node_t *areq) +{ + int err; + int cnt = 0; + + if ((err = kcf_enqueue(areq)) != 0) + return (err); + + if (kcfpool->kp_idlethreads > 0) { + /* Signal an idle thread to run */ + mutex_enter(&gswq->gs_lock); + cv_signal(&gswq->gs_cv); + mutex_exit(&gswq->gs_lock); + + return (CRYPTO_QUEUED); + } + + /* + * We keep the number of running threads to be at + * kcf_minthreads to reduce gs_lock contention. + */ + cnt = kcf_minthreads - + (kcfpool->kp_threads - kcfpool->kp_blockedthreads); + if (cnt > 0) { + /* + * The following ensures the number of threads in pool + * does not exceed kcf_maxthreads. + */ + cnt = MIN(cnt, kcf_maxthreads - (int)kcfpool->kp_threads); + if (cnt > 0) { + /* Signal the creator thread for more threads */ + mutex_enter(&kcfpool->kp_user_lock); + if (!kcfpool->kp_signal_create_thread) { + kcfpool->kp_signal_create_thread = B_TRUE; + kcfpool->kp_nthrs = cnt; + cv_signal(&kcfpool->kp_user_cv); + } + mutex_exit(&kcfpool->kp_user_lock); + } + } + + return (CRYPTO_QUEUED); +} + +/* + * This routine is called by the taskq associated with + * each hardware provider. We notify the kernel consumer + * via the callback routine in case of CRYPTO_SUCCESS or + * a failure. + * + * A request can be of type kcf_areq_node_t or of type + * kcf_sreq_node_t. + */ +static void +process_req_hwp(void *ireq) +{ + int error = 0; + crypto_ctx_t *ctx; + kcf_call_type_t ctype; + kcf_provider_desc_t *pd; + kcf_areq_node_t *areq = (kcf_areq_node_t *)ireq; + kcf_sreq_node_t *sreq = (kcf_sreq_node_t *)ireq; + + pd = ((ctype = GET_REQ_TYPE(ireq)) == CRYPTO_SYNCH) ? + sreq->sn_provider : areq->an_provider; + + /* + * Wait if flow control is in effect for the provider. A + * CRYPTO_PROVIDER_READY or CRYPTO_PROVIDER_FAILED + * notification will signal us. We also get signaled if + * the provider is unregistering. + */ + if (pd->pd_state == KCF_PROV_BUSY) { + mutex_enter(&pd->pd_lock); + while (pd->pd_state == KCF_PROV_BUSY) + cv_wait(&pd->pd_resume_cv, &pd->pd_lock); + mutex_exit(&pd->pd_lock); + } + + /* + * Bump the internal reference count while the request is being + * processed. This is how we know when it's safe to unregister + * a provider. This step must precede the pd_state check below. + */ + KCF_PROV_IREFHOLD(pd); + + /* + * Fail the request if the provider has failed. We return a + * recoverable error and the notified clients attempt any + * recovery. For async clients this is done in kcf_aop_done() + * and for sync clients it is done in the k-api routines. + */ + if (pd->pd_state >= KCF_PROV_FAILED) { + error = CRYPTO_DEVICE_ERROR; + goto bail; + } + + if (ctype == CRYPTO_SYNCH) { + mutex_enter(&sreq->sn_lock); + sreq->sn_state = REQ_INPROGRESS; + mutex_exit(&sreq->sn_lock); + + ctx = sreq->sn_context ? &sreq->sn_context->kc_glbl_ctx : NULL; + error = common_submit_request(sreq->sn_provider, ctx, + sreq->sn_params, sreq); + } else { + kcf_context_t *ictx; + ASSERT(ctype == CRYPTO_ASYNCH); + + /* + * We are in the per-hardware provider thread context and + * hence can sleep. Note that the caller would have done + * a taskq_dispatch(..., TQ_NOSLEEP) and would have returned. + */ + ctx = (ictx = areq->an_context) ? &ictx->kc_glbl_ctx : NULL; + + mutex_enter(&areq->an_lock); + /* + * We need to maintain ordering for multi-part requests. + * an_is_my_turn is set to B_TRUE initially for a request + * when it is enqueued and there are no other requests + * for that context. It is set later from kcf_aop_done() when + * the request before us in the chain of requests for the + * context completes. We get signaled at that point. + */ + if (ictx != NULL) { + ASSERT(ictx->kc_prov_desc == areq->an_provider); + + while (areq->an_is_my_turn == B_FALSE) { + cv_wait(&areq->an_turn_cv, &areq->an_lock); + } + } + areq->an_state = REQ_INPROGRESS; + mutex_exit(&areq->an_lock); + + error = common_submit_request(areq->an_provider, ctx, + &areq->an_params, areq); + } + +bail: + if (error == CRYPTO_QUEUED) { + /* + * The request is queued by the provider and we should + * get a crypto_op_notification() from the provider later. + * We notify the consumer at that time. + */ + return; + } else { /* CRYPTO_SUCCESS or other failure */ + KCF_PROV_IREFRELE(pd); + if (ctype == CRYPTO_SYNCH) + kcf_sop_done(sreq, error); + else + kcf_aop_done(areq, error); + } +} + +/* + * This routine checks if a request can be retried on another + * provider. If true, mech1 is initialized to point to the mechanism + * structure. mech2 is also initialized in case of a dual operation. fg + * is initialized to the correct crypto_func_group_t bit flag. They are + * initialized by this routine, so that the caller can pass them to a + * kcf_get_mech_provider() or kcf_get_dual_provider() with no further change. + * + * We check that the request is for a init or atomic routine and that + * it is for one of the operation groups used from k-api . + */ +static boolean_t +can_resubmit(kcf_areq_node_t *areq, crypto_mechanism_t **mech1, + crypto_mechanism_t **mech2, crypto_func_group_t *fg) +{ + kcf_req_params_t *params; + kcf_op_type_t optype; + + params = &areq->an_params; + optype = params->rp_optype; + + if (!(IS_INIT_OP(optype) || IS_ATOMIC_OP(optype))) + return (B_FALSE); + + switch (params->rp_opgrp) { + case KCF_OG_DIGEST: { + kcf_digest_ops_params_t *dops = ¶ms->rp_u.digest_params; + + dops->do_mech.cm_type = dops->do_framework_mechtype; + *mech1 = &dops->do_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_DIGEST : + CRYPTO_FG_DIGEST_ATOMIC; + break; + } + + case KCF_OG_MAC: { + kcf_mac_ops_params_t *mops = ¶ms->rp_u.mac_params; + + mops->mo_mech.cm_type = mops->mo_framework_mechtype; + *mech1 = &mops->mo_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_MAC : + CRYPTO_FG_MAC_ATOMIC; + break; + } + + case KCF_OG_SIGN: { + kcf_sign_ops_params_t *sops = ¶ms->rp_u.sign_params; + + sops->so_mech.cm_type = sops->so_framework_mechtype; + *mech1 = &sops->so_mech; + switch (optype) { + case KCF_OP_INIT: + *fg = CRYPTO_FG_SIGN; + break; + case KCF_OP_ATOMIC: + *fg = CRYPTO_FG_SIGN_ATOMIC; + break; + default: + ASSERT(optype == KCF_OP_SIGN_RECOVER_ATOMIC); + *fg = CRYPTO_FG_SIGN_RECOVER_ATOMIC; + } + break; + } + + case KCF_OG_VERIFY: { + kcf_verify_ops_params_t *vops = ¶ms->rp_u.verify_params; + + vops->vo_mech.cm_type = vops->vo_framework_mechtype; + *mech1 = &vops->vo_mech; + switch (optype) { + case KCF_OP_INIT: + *fg = CRYPTO_FG_VERIFY; + break; + case KCF_OP_ATOMIC: + *fg = CRYPTO_FG_VERIFY_ATOMIC; + break; + default: + ASSERT(optype == KCF_OP_VERIFY_RECOVER_ATOMIC); + *fg = CRYPTO_FG_VERIFY_RECOVER_ATOMIC; + } + break; + } + + case KCF_OG_ENCRYPT: { + kcf_encrypt_ops_params_t *eops = ¶ms->rp_u.encrypt_params; + + eops->eo_mech.cm_type = eops->eo_framework_mechtype; + *mech1 = &eops->eo_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_ENCRYPT : + CRYPTO_FG_ENCRYPT_ATOMIC; + break; + } + + case KCF_OG_DECRYPT: { + kcf_decrypt_ops_params_t *dcrops = ¶ms->rp_u.decrypt_params; + + dcrops->dop_mech.cm_type = dcrops->dop_framework_mechtype; + *mech1 = &dcrops->dop_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_DECRYPT : + CRYPTO_FG_DECRYPT_ATOMIC; + break; + } + + case KCF_OG_ENCRYPT_MAC: { + kcf_encrypt_mac_ops_params_t *eops = + ¶ms->rp_u.encrypt_mac_params; + + eops->em_encr_mech.cm_type = eops->em_framework_encr_mechtype; + *mech1 = &eops->em_encr_mech; + eops->em_mac_mech.cm_type = eops->em_framework_mac_mechtype; + *mech2 = &eops->em_mac_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_ENCRYPT_MAC : + CRYPTO_FG_ENCRYPT_MAC_ATOMIC; + break; + } + + case KCF_OG_MAC_DECRYPT: { + kcf_mac_decrypt_ops_params_t *dops = + ¶ms->rp_u.mac_decrypt_params; + + dops->md_mac_mech.cm_type = dops->md_framework_mac_mechtype; + *mech1 = &dops->md_mac_mech; + dops->md_decr_mech.cm_type = dops->md_framework_decr_mechtype; + *mech2 = &dops->md_decr_mech; + *fg = (optype == KCF_OP_INIT) ? CRYPTO_FG_MAC_DECRYPT : + CRYPTO_FG_MAC_DECRYPT_ATOMIC; + break; + } + + default: + return (B_FALSE); + } + + return (B_TRUE); +} + +/* + * This routine is called when a request to a provider has failed + * with a recoverable error. This routine tries to find another provider + * and dispatches the request to the new provider, if one is available. + * We reuse the request structure. + * + * A return value of NULL from kcf_get_mech_provider() indicates + * we have tried the last provider. + */ +static int +kcf_resubmit_request(kcf_areq_node_t *areq) +{ + int error = CRYPTO_FAILED; + kcf_context_t *ictx; + kcf_provider_desc_t *old_pd; + kcf_provider_desc_t *new_pd; + crypto_mechanism_t *mech1 = NULL, *mech2 = NULL; + crypto_mech_type_t prov_mt1, prov_mt2; + crypto_func_group_t fg = 0; + + if (!can_resubmit(areq, &mech1, &mech2, &fg)) + return (error); + + old_pd = areq->an_provider; + /* + * Add old_pd to the list of providers already tried. We release + * the hold on old_pd (from the earlier kcf_get_mech_provider()) in + * kcf_free_triedlist(). + */ + if (kcf_insert_triedlist(&areq->an_tried_plist, old_pd, + KM_NOSLEEP) == NULL) + return (error); + + if (mech1 && !mech2) { + new_pd = kcf_get_mech_provider(mech1->cm_type, NULL, &error, + areq->an_tried_plist, fg, + (areq->an_reqarg.cr_flag & CRYPTO_RESTRICTED), 0); + } else { + ASSERT(mech1 != NULL && mech2 != NULL); + + new_pd = kcf_get_dual_provider(mech1, mech2, NULL, &prov_mt1, + &prov_mt2, &error, areq->an_tried_plist, fg, fg, + (areq->an_reqarg.cr_flag & CRYPTO_RESTRICTED), 0); + } + + if (new_pd == NULL) + return (error); + + /* + * We reuse the old context by resetting provider specific + * fields in it. + */ + if ((ictx = areq->an_context) != NULL) { + crypto_ctx_t *ctx; + + ASSERT(old_pd == ictx->kc_prov_desc); + KCF_PROV_REFRELE(ictx->kc_prov_desc); + KCF_PROV_REFHOLD(new_pd); + ictx->kc_prov_desc = new_pd; + + ctx = &ictx->kc_glbl_ctx; + ctx->cc_provider = new_pd->pd_prov_handle; + ctx->cc_session = new_pd->pd_sid; + ctx->cc_provider_private = NULL; + } + + /* We reuse areq. by resetting the provider and context fields. */ + KCF_PROV_REFRELE(old_pd); + KCF_PROV_REFHOLD(new_pd); + areq->an_provider = new_pd; + mutex_enter(&areq->an_lock); + areq->an_state = REQ_WAITING; + mutex_exit(&areq->an_lock); + + switch (new_pd->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + error = kcf_disp_sw_request(areq); + break; + + case CRYPTO_HW_PROVIDER: { + taskq_t *taskq = new_pd->pd_sched_info.ks_taskq; + + if (taskq_dispatch(taskq, process_req_hwp, areq, TQ_NOSLEEP) == + TASKQID_INVALID) { + error = CRYPTO_HOST_MEMORY; + } else { + error = CRYPTO_QUEUED; + } + + break; + default: + break; + } + } + + return (error); +} + +static inline int EMPTY_TASKQ(taskq_t *tq) +{ +#ifdef _KERNEL + return (tq->tq_lowest_id == tq->tq_next_id); +#else + return (tq->tq_task.tqent_next == &tq->tq_task || tq->tq_active == 0); +#endif +} + +/* + * Routine called by both ioctl and k-api. The consumer should + * bundle the parameters into a kcf_req_params_t structure. A bunch + * of macros are available in ops_impl.h for this bundling. They are: + * + * KCF_WRAP_DIGEST_OPS_PARAMS() + * KCF_WRAP_MAC_OPS_PARAMS() + * KCF_WRAP_ENCRYPT_OPS_PARAMS() + * KCF_WRAP_DECRYPT_OPS_PARAMS() ... etc. + * + * It is the caller's responsibility to free the ctx argument when + * appropriate. See the KCF_CONTEXT_COND_RELEASE macro for details. + */ +int +kcf_submit_request(kcf_provider_desc_t *pd, crypto_ctx_t *ctx, + crypto_call_req_t *crq, kcf_req_params_t *params, boolean_t cont) +{ + int error = CRYPTO_SUCCESS; + kcf_areq_node_t *areq; + kcf_sreq_node_t *sreq; + kcf_context_t *kcf_ctx; + taskq_t *taskq = pd->pd_sched_info.ks_taskq; + + kcf_ctx = ctx ? (kcf_context_t *)ctx->cc_framework_private : NULL; + + /* Synchronous cases */ + if (crq == NULL) { + switch (pd->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + error = common_submit_request(pd, ctx, params, + KCF_RHNDL(KM_SLEEP)); + break; + + case CRYPTO_HW_PROVIDER: + /* + * Special case for CRYPTO_SYNCHRONOUS providers that + * never return a CRYPTO_QUEUED error. We skip any + * request allocation and call the SPI directly. + */ + if ((pd->pd_flags & CRYPTO_SYNCHRONOUS) && + EMPTY_TASKQ(taskq)) { + KCF_PROV_IREFHOLD(pd); + if (pd->pd_state == KCF_PROV_READY) { + error = common_submit_request(pd, ctx, + params, KCF_RHNDL(KM_SLEEP)); + KCF_PROV_IREFRELE(pd); + ASSERT(error != CRYPTO_QUEUED); + break; + } + KCF_PROV_IREFRELE(pd); + } + + sreq = kmem_cache_alloc(kcf_sreq_cache, KM_SLEEP); + sreq->sn_state = REQ_ALLOCATED; + sreq->sn_rv = CRYPTO_FAILED; + sreq->sn_params = params; + + /* + * Note that we do not need to hold the context + * for synchronous case as the context will never + * become invalid underneath us. We do not need to hold + * the provider here either as the caller has a hold. + */ + sreq->sn_context = kcf_ctx; + ASSERT(KCF_PROV_REFHELD(pd)); + sreq->sn_provider = pd; + + ASSERT(taskq != NULL); + /* + * Call the SPI directly if the taskq is empty and the + * provider is not busy, else dispatch to the taskq. + * Calling directly is fine as this is the synchronous + * case. This is unlike the asynchronous case where we + * must always dispatch to the taskq. + */ + if (EMPTY_TASKQ(taskq) && + pd->pd_state == KCF_PROV_READY) { + process_req_hwp(sreq); + } else { + /* + * We can not tell from taskq_dispatch() return + * value if we exceeded maxalloc. Hence the + * check here. Since we are allowed to wait in + * the synchronous case, we wait for the taskq + * to become empty. + */ + if (taskq->tq_nalloc >= crypto_taskq_maxalloc) { + taskq_wait(taskq); + } + + (void) taskq_dispatch(taskq, process_req_hwp, + sreq, TQ_SLEEP); + } + + /* + * Wait for the notification to arrive, + * if the operation is not done yet. + * Bug# 4722589 will make the wait a cv_wait_sig(). + */ + mutex_enter(&sreq->sn_lock); + while (sreq->sn_state < REQ_DONE) + cv_wait(&sreq->sn_cv, &sreq->sn_lock); + mutex_exit(&sreq->sn_lock); + + error = sreq->sn_rv; + kmem_cache_free(kcf_sreq_cache, sreq); + + break; + + default: + error = CRYPTO_FAILED; + break; + } + + } else { /* Asynchronous cases */ + switch (pd->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + if (!(crq->cr_flag & CRYPTO_ALWAYS_QUEUE)) { + /* + * This case has less overhead since there is + * no switching of context. + */ + error = common_submit_request(pd, ctx, params, + KCF_RHNDL(KM_NOSLEEP)); + } else { + /* + * CRYPTO_ALWAYS_QUEUE is set. We need to + * queue the request and return. + */ + areq = kcf_areqnode_alloc(pd, kcf_ctx, crq, + params, cont); + if (areq == NULL) + error = CRYPTO_HOST_MEMORY; + else { + if (!(crq->cr_flag + & CRYPTO_SKIP_REQID)) { + /* + * Set the request handle. This handle + * is used for any crypto_cancel_req(9f) + * calls from the consumer. We have to + * do this before dispatching the + * request. + */ + crq->cr_reqid = kcf_reqid_insert(areq); + } + + error = kcf_disp_sw_request(areq); + /* + * There is an error processing this + * request. Remove the handle and + * release the request structure. + */ + if (error != CRYPTO_QUEUED) { + if (!(crq->cr_flag + & CRYPTO_SKIP_REQID)) + kcf_reqid_delete(areq); + KCF_AREQ_REFRELE(areq); + } + } + } + break; + + case CRYPTO_HW_PROVIDER: + /* + * We need to queue the request and return. + */ + areq = kcf_areqnode_alloc(pd, kcf_ctx, crq, params, + cont); + if (areq == NULL) { + error = CRYPTO_HOST_MEMORY; + goto done; + } + + ASSERT(taskq != NULL); + /* + * We can not tell from taskq_dispatch() return + * value if we exceeded maxalloc. Hence the check + * here. + */ + if (taskq->tq_nalloc >= crypto_taskq_maxalloc) { + error = CRYPTO_BUSY; + KCF_AREQ_REFRELE(areq); + goto done; + } + + if (!(crq->cr_flag & CRYPTO_SKIP_REQID)) { + /* + * Set the request handle. This handle is used + * for any crypto_cancel_req(9f) calls from the + * consumer. We have to do this before dispatching + * the request. + */ + crq->cr_reqid = kcf_reqid_insert(areq); + } + + if (taskq_dispatch(taskq, + process_req_hwp, areq, TQ_NOSLEEP) == + TASKQID_INVALID) { + error = CRYPTO_HOST_MEMORY; + if (!(crq->cr_flag & CRYPTO_SKIP_REQID)) + kcf_reqid_delete(areq); + KCF_AREQ_REFRELE(areq); + } else { + error = CRYPTO_QUEUED; + } + break; + + default: + error = CRYPTO_FAILED; + break; + } + } + +done: + return (error); +} + +/* + * We're done with this framework context, so free it. Note that freeing + * framework context (kcf_context) frees the global context (crypto_ctx). + * + * The provider is responsible for freeing provider private context after a + * final or single operation and resetting the cc_provider_private field + * to NULL. It should do this before it notifies the framework of the + * completion. We still need to call KCF_PROV_FREE_CONTEXT to handle cases + * like crypto_cancel_ctx(9f). + */ +void +kcf_free_context(kcf_context_t *kcf_ctx) +{ + kcf_provider_desc_t *pd = kcf_ctx->kc_prov_desc; + crypto_ctx_t *gctx = &kcf_ctx->kc_glbl_ctx; + kcf_context_t *kcf_secondctx = kcf_ctx->kc_secondctx; + + /* Release the second context, if any */ + + if (kcf_secondctx != NULL) + KCF_CONTEXT_REFRELE(kcf_secondctx); + + if (gctx->cc_provider_private != NULL) { + mutex_enter(&pd->pd_lock); + if (!KCF_IS_PROV_REMOVED(pd)) { + /* + * Increment the provider's internal refcnt so it + * doesn't unregister from the framework while + * we're calling the entry point. + */ + KCF_PROV_IREFHOLD(pd); + mutex_exit(&pd->pd_lock); + (void) KCF_PROV_FREE_CONTEXT(pd, gctx); + KCF_PROV_IREFRELE(pd); + } else { + mutex_exit(&pd->pd_lock); + } + } + + /* kcf_ctx->kc_prov_desc has a hold on pd */ + KCF_PROV_REFRELE(kcf_ctx->kc_prov_desc); + + /* check if this context is shared with a software provider */ + if ((gctx->cc_flags & CRYPTO_INIT_OPSTATE) && + kcf_ctx->kc_sw_prov_desc != NULL) { + KCF_PROV_REFRELE(kcf_ctx->kc_sw_prov_desc); + } + + kmem_cache_free(kcf_context_cache, kcf_ctx); +} + +/* + * Free the request after releasing all the holds. + */ +void +kcf_free_req(kcf_areq_node_t *areq) +{ + KCF_PROV_REFRELE(areq->an_provider); + if (areq->an_context != NULL) + KCF_CONTEXT_REFRELE(areq->an_context); + + if (areq->an_tried_plist != NULL) + kcf_free_triedlist(areq->an_tried_plist); + kmem_cache_free(kcf_areq_cache, areq); +} + +/* + * Utility routine to remove a request from the chain of requests + * hanging off a context. + */ +void +kcf_removereq_in_ctxchain(kcf_context_t *ictx, kcf_areq_node_t *areq) +{ + kcf_areq_node_t *cur, *prev; + + /* + * Get context lock, search for areq in the chain and remove it. + */ + ASSERT(ictx != NULL); + mutex_enter(&ictx->kc_in_use_lock); + prev = cur = ictx->kc_req_chain_first; + + while (cur != NULL) { + if (cur == areq) { + if (prev == cur) { + if ((ictx->kc_req_chain_first = + cur->an_ctxchain_next) == NULL) + ictx->kc_req_chain_last = NULL; + } else { + if (cur == ictx->kc_req_chain_last) + ictx->kc_req_chain_last = prev; + prev->an_ctxchain_next = cur->an_ctxchain_next; + } + + break; + } + prev = cur; + cur = cur->an_ctxchain_next; + } + mutex_exit(&ictx->kc_in_use_lock); +} + +/* + * Remove the specified node from the global software queue. + * + * The caller must hold the queue lock and request lock (an_lock). + */ +void +kcf_remove_node(kcf_areq_node_t *node) +{ + kcf_areq_node_t *nextp = node->an_next; + kcf_areq_node_t *prevp = node->an_prev; + + if (nextp != NULL) + nextp->an_prev = prevp; + else + gswq->gs_last = prevp; + + if (prevp != NULL) + prevp->an_next = nextp; + else + gswq->gs_first = nextp; + + node->an_state = REQ_CANCELED; +} + +/* + * Add the request node to the end of the global software queue. + * + * The caller should not hold the queue lock. Returns 0 if the + * request is successfully queued. Returns CRYPTO_BUSY if the limit + * on the number of jobs is exceeded. + */ +static int +kcf_enqueue(kcf_areq_node_t *node) +{ + kcf_areq_node_t *tnode; + + mutex_enter(&gswq->gs_lock); + + if (gswq->gs_njobs >= gswq->gs_maxjobs) { + mutex_exit(&gswq->gs_lock); + return (CRYPTO_BUSY); + } + + if (gswq->gs_last == NULL) { + gswq->gs_first = gswq->gs_last = node; + } else { + ASSERT(gswq->gs_last->an_next == NULL); + tnode = gswq->gs_last; + tnode->an_next = node; + gswq->gs_last = node; + node->an_prev = tnode; + } + + gswq->gs_njobs++; + + /* an_lock not needed here as we hold gs_lock */ + node->an_state = REQ_WAITING; + + mutex_exit(&gswq->gs_lock); + + return (0); +} + +/* + * kmem_cache_alloc constructor for sync request structure. + */ +/* ARGSUSED */ +static int +kcf_sreq_cache_constructor(void *buf, void *cdrarg, int kmflags) +{ + kcf_sreq_node_t *sreq = (kcf_sreq_node_t *)buf; + + sreq->sn_type = CRYPTO_SYNCH; + cv_init(&sreq->sn_cv, NULL, CV_DEFAULT, NULL); + mutex_init(&sreq->sn_lock, NULL, MUTEX_DEFAULT, NULL); + + return (0); +} + +/* ARGSUSED */ +static void +kcf_sreq_cache_destructor(void *buf, void *cdrarg) +{ + kcf_sreq_node_t *sreq = (kcf_sreq_node_t *)buf; + + mutex_destroy(&sreq->sn_lock); + cv_destroy(&sreq->sn_cv); +} + +/* + * kmem_cache_alloc constructor for async request structure. + */ +/* ARGSUSED */ +static int +kcf_areq_cache_constructor(void *buf, void *cdrarg, int kmflags) +{ + kcf_areq_node_t *areq = (kcf_areq_node_t *)buf; + + areq->an_type = CRYPTO_ASYNCH; + areq->an_refcnt = 0; + mutex_init(&areq->an_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&areq->an_done, NULL, CV_DEFAULT, NULL); + cv_init(&areq->an_turn_cv, NULL, CV_DEFAULT, NULL); + + return (0); +} + +/* ARGSUSED */ +static void +kcf_areq_cache_destructor(void *buf, void *cdrarg) +{ + kcf_areq_node_t *areq = (kcf_areq_node_t *)buf; + + ASSERT(areq->an_refcnt == 0); + mutex_destroy(&areq->an_lock); + cv_destroy(&areq->an_done); + cv_destroy(&areq->an_turn_cv); +} + +/* + * kmem_cache_alloc constructor for kcf_context structure. + */ +/* ARGSUSED */ +static int +kcf_context_cache_constructor(void *buf, void *cdrarg, int kmflags) +{ + kcf_context_t *kctx = (kcf_context_t *)buf; + + kctx->kc_refcnt = 0; + mutex_init(&kctx->kc_in_use_lock, NULL, MUTEX_DEFAULT, NULL); + + return (0); +} + +/* ARGSUSED */ +static void +kcf_context_cache_destructor(void *buf, void *cdrarg) +{ + kcf_context_t *kctx = (kcf_context_t *)buf; + + ASSERT(kctx->kc_refcnt == 0); + mutex_destroy(&kctx->kc_in_use_lock); +} + +void +kcf_sched_destroy(void) +{ + int i; + + if (kcf_misc_kstat) + kstat_delete(kcf_misc_kstat); + + if (kcfpool) { + mutex_destroy(&kcfpool->kp_thread_lock); + cv_destroy(&kcfpool->kp_nothr_cv); + mutex_destroy(&kcfpool->kp_user_lock); + cv_destroy(&kcfpool->kp_user_cv); + + kmem_free(kcfpool, sizeof (kcf_pool_t)); + } + + for (i = 0; i < REQID_TABLES; i++) { + if (kcf_reqid_table[i]) { + mutex_destroy(&(kcf_reqid_table[i]->rt_lock)); + kmem_free(kcf_reqid_table[i], + sizeof (kcf_reqid_table_t)); + } + } + + if (gswq) { + mutex_destroy(&gswq->gs_lock); + cv_destroy(&gswq->gs_cv); + kmem_free(gswq, sizeof (kcf_global_swq_t)); + } + + if (kcf_context_cache) + kmem_cache_destroy(kcf_context_cache); + if (kcf_areq_cache) + kmem_cache_destroy(kcf_areq_cache); + if (kcf_sreq_cache) + kmem_cache_destroy(kcf_sreq_cache); + + mutex_destroy(&ntfy_list_lock); + cv_destroy(&ntfy_list_cv); +} + +/* + * Creates and initializes all the structures needed by the framework. + */ +void +kcf_sched_init(void) +{ + int i; + kcf_reqid_table_t *rt; + + /* + * Create all the kmem caches needed by the framework. We set the + * align argument to 64, to get a slab aligned to 64-byte as well as + * have the objects (cache_chunksize) to be a 64-byte multiple. + * This helps to avoid false sharing as this is the size of the + * CPU cache line. + */ + kcf_sreq_cache = kmem_cache_create("kcf_sreq_cache", + sizeof (struct kcf_sreq_node), 64, kcf_sreq_cache_constructor, + kcf_sreq_cache_destructor, NULL, NULL, NULL, 0); + + kcf_areq_cache = kmem_cache_create("kcf_areq_cache", + sizeof (struct kcf_areq_node), 64, kcf_areq_cache_constructor, + kcf_areq_cache_destructor, NULL, NULL, NULL, 0); + + kcf_context_cache = kmem_cache_create("kcf_context_cache", + sizeof (struct kcf_context), 64, kcf_context_cache_constructor, + kcf_context_cache_destructor, NULL, NULL, NULL, 0); + + gswq = kmem_alloc(sizeof (kcf_global_swq_t), KM_SLEEP); + + mutex_init(&gswq->gs_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&gswq->gs_cv, NULL, CV_DEFAULT, NULL); + gswq->gs_njobs = 0; + gswq->gs_maxjobs = kcf_maxthreads * crypto_taskq_maxalloc; + gswq->gs_first = gswq->gs_last = NULL; + + /* Initialize the global reqid table */ + for (i = 0; i < REQID_TABLES; i++) { + rt = kmem_zalloc(sizeof (kcf_reqid_table_t), KM_SLEEP); + kcf_reqid_table[i] = rt; + mutex_init(&rt->rt_lock, NULL, MUTEX_DEFAULT, NULL); + rt->rt_curid = i; + } + + /* Allocate and initialize the thread pool */ + kcfpool_alloc(); + + /* Initialize the event notification list variables */ + mutex_init(&ntfy_list_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&ntfy_list_cv, NULL, CV_DEFAULT, NULL); + + /* Create the kcf kstat */ + kcf_misc_kstat = kstat_create("kcf", 0, "framework_stats", "crypto", + KSTAT_TYPE_NAMED, sizeof (kcf_stats_t) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + if (kcf_misc_kstat != NULL) { + kcf_misc_kstat->ks_data = &kcf_ksdata; + kcf_misc_kstat->ks_update = kcf_misc_kstat_update; + kstat_install(kcf_misc_kstat); + } +} + +/* + * Signal the waiting sync client. + */ +void +kcf_sop_done(kcf_sreq_node_t *sreq, int error) +{ + mutex_enter(&sreq->sn_lock); + sreq->sn_state = REQ_DONE; + sreq->sn_rv = error; + cv_signal(&sreq->sn_cv); + mutex_exit(&sreq->sn_lock); +} + +/* + * Callback the async client with the operation status. + * We free the async request node and possibly the context. + * We also handle any chain of requests hanging off of + * the context. + */ +void +kcf_aop_done(kcf_areq_node_t *areq, int error) +{ + kcf_op_type_t optype; + boolean_t skip_notify = B_FALSE; + kcf_context_t *ictx; + kcf_areq_node_t *nextreq; + + /* + * Handle recoverable errors. This has to be done first + * before doing any thing else in this routine so that + * we do not change the state of the request. + */ + if (error != CRYPTO_SUCCESS && IS_RECOVERABLE(error)) { + /* + * We try another provider, if one is available. Else + * we continue with the failure notification to the + * client. + */ + if (kcf_resubmit_request(areq) == CRYPTO_QUEUED) + return; + } + + mutex_enter(&areq->an_lock); + areq->an_state = REQ_DONE; + mutex_exit(&areq->an_lock); + + optype = (&areq->an_params)->rp_optype; + if ((ictx = areq->an_context) != NULL) { + /* + * A request after it is removed from the request + * queue, still stays on a chain of requests hanging + * of its context structure. It needs to be removed + * from this chain at this point. + */ + mutex_enter(&ictx->kc_in_use_lock); + nextreq = areq->an_ctxchain_next; + if (nextreq != NULL) { + mutex_enter(&nextreq->an_lock); + nextreq->an_is_my_turn = B_TRUE; + cv_signal(&nextreq->an_turn_cv); + mutex_exit(&nextreq->an_lock); + } + + ictx->kc_req_chain_first = nextreq; + if (nextreq == NULL) + ictx->kc_req_chain_last = NULL; + mutex_exit(&ictx->kc_in_use_lock); + + if (IS_SINGLE_OP(optype) || IS_FINAL_OP(optype)) { + ASSERT(nextreq == NULL); + KCF_CONTEXT_REFRELE(ictx); + } else if (error != CRYPTO_SUCCESS && IS_INIT_OP(optype)) { + /* + * NOTE - We do not release the context in case of update + * operations. We require the consumer to free it explicitly, + * in case it wants to abandon an update operation. This is done + * as there may be mechanisms in ECB mode that can continue + * even if an operation on a block fails. + */ + KCF_CONTEXT_REFRELE(ictx); + } + } + + /* Deal with the internal continuation to this request first */ + + if (areq->an_isdual) { + kcf_dual_req_t *next_arg; + next_arg = (kcf_dual_req_t *)areq->an_reqarg.cr_callback_arg; + next_arg->kr_areq = areq; + KCF_AREQ_REFHOLD(areq); + areq->an_isdual = B_FALSE; + + NOTIFY_CLIENT(areq, error); + return; + } + + /* + * If CRYPTO_NOTIFY_OPDONE flag is set, we should notify + * always. If this flag is clear, we skip the notification + * provided there are no errors. We check this flag for only + * init or update operations. It is ignored for single, final or + * atomic operations. + */ + skip_notify = (IS_UPDATE_OP(optype) || IS_INIT_OP(optype)) && + (!(areq->an_reqarg.cr_flag & CRYPTO_NOTIFY_OPDONE)) && + (error == CRYPTO_SUCCESS); + + if (!skip_notify) { + NOTIFY_CLIENT(areq, error); + } + + if (!(areq->an_reqarg.cr_flag & CRYPTO_SKIP_REQID)) + kcf_reqid_delete(areq); + + KCF_AREQ_REFRELE(areq); +} + +/* + * Allocate the thread pool and initialize all the fields. + */ +static void +kcfpool_alloc() +{ + kcfpool = kmem_alloc(sizeof (kcf_pool_t), KM_SLEEP); + + kcfpool->kp_threads = kcfpool->kp_idlethreads = 0; + kcfpool->kp_blockedthreads = 0; + kcfpool->kp_signal_create_thread = B_FALSE; + kcfpool->kp_nthrs = 0; + kcfpool->kp_user_waiting = B_FALSE; + + mutex_init(&kcfpool->kp_thread_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&kcfpool->kp_nothr_cv, NULL, CV_DEFAULT, NULL); + + mutex_init(&kcfpool->kp_user_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&kcfpool->kp_user_cv, NULL, CV_DEFAULT, NULL); + + kcf_idlethr_timeout = KCF_DEFAULT_THRTIMEOUT; +} + +/* + * Insert the async request in the hash table after assigning it + * an ID. Returns the ID. + * + * The ID is used by the caller to pass as an argument to a + * cancel_req() routine later. + */ +static crypto_req_id_t +kcf_reqid_insert(kcf_areq_node_t *areq) +{ + int indx; + crypto_req_id_t id; + kcf_areq_node_t *headp; + kcf_reqid_table_t *rt; + + kpreempt_disable(); + rt = kcf_reqid_table[CPU_SEQID & REQID_TABLE_MASK]; + kpreempt_enable(); + + mutex_enter(&rt->rt_lock); + + rt->rt_curid = id = + (rt->rt_curid - REQID_COUNTER_LOW) | REQID_COUNTER_HIGH; + SET_REQID(areq, id); + indx = REQID_HASH(id); + headp = areq->an_idnext = rt->rt_idhash[indx]; + areq->an_idprev = NULL; + if (headp != NULL) + headp->an_idprev = areq; + + rt->rt_idhash[indx] = areq; + mutex_exit(&rt->rt_lock); + + return (id); +} + +/* + * Delete the async request from the hash table. + */ +static void +kcf_reqid_delete(kcf_areq_node_t *areq) +{ + int indx; + kcf_areq_node_t *nextp, *prevp; + crypto_req_id_t id = GET_REQID(areq); + kcf_reqid_table_t *rt; + + rt = kcf_reqid_table[id & REQID_TABLE_MASK]; + indx = REQID_HASH(id); + + mutex_enter(&rt->rt_lock); + + nextp = areq->an_idnext; + prevp = areq->an_idprev; + if (nextp != NULL) + nextp->an_idprev = prevp; + if (prevp != NULL) + prevp->an_idnext = nextp; + else + rt->rt_idhash[indx] = nextp; + + SET_REQID(areq, 0); + cv_broadcast(&areq->an_done); + + mutex_exit(&rt->rt_lock); +} + +/* + * Cancel a single asynchronous request. + * + * We guarantee that no problems will result from calling + * crypto_cancel_req() for a request which is either running, or + * has already completed. We remove the request from any queues + * if it is possible. We wait for request completion if the + * request is dispatched to a provider. + * + * Calling context: + * Can be called from user context only. + * + * NOTE: We acquire the following locks in this routine (in order): + * - rt_lock (kcf_reqid_table_t) + * - gswq->gs_lock + * - areq->an_lock + * - ictx->kc_in_use_lock (from kcf_removereq_in_ctxchain()) + * + * This locking order MUST be maintained in code every where else. + */ +void +crypto_cancel_req(crypto_req_id_t id) +{ + int indx; + kcf_areq_node_t *areq; + kcf_provider_desc_t *pd; + kcf_context_t *ictx; + kcf_reqid_table_t *rt; + + rt = kcf_reqid_table[id & REQID_TABLE_MASK]; + indx = REQID_HASH(id); + + mutex_enter(&rt->rt_lock); + for (areq = rt->rt_idhash[indx]; areq; areq = areq->an_idnext) { + if (GET_REQID(areq) == id) { + /* + * We found the request. It is either still waiting + * in the framework queues or running at the provider. + */ + pd = areq->an_provider; + ASSERT(pd != NULL); + + switch (pd->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + mutex_enter(&gswq->gs_lock); + mutex_enter(&areq->an_lock); + + /* This request can be safely canceled. */ + if (areq->an_state <= REQ_WAITING) { + /* Remove from gswq, global software queue. */ + kcf_remove_node(areq); + if ((ictx = areq->an_context) != NULL) + kcf_removereq_in_ctxchain(ictx, areq); + + mutex_exit(&areq->an_lock); + mutex_exit(&gswq->gs_lock); + mutex_exit(&rt->rt_lock); + + /* Remove areq from hash table and free it. */ + kcf_reqid_delete(areq); + KCF_AREQ_REFRELE(areq); + return; + } + + mutex_exit(&areq->an_lock); + mutex_exit(&gswq->gs_lock); + break; + + case CRYPTO_HW_PROVIDER: + /* + * There is no interface to remove an entry + * once it is on the taskq. So, we do not do + * any thing for a hardware provider. + */ + break; + default: + break; + } + + /* + * The request is running. Wait for the request completion + * to notify us. + */ + KCF_AREQ_REFHOLD(areq); + while (GET_REQID(areq) == id) + cv_wait(&areq->an_done, &rt->rt_lock); + KCF_AREQ_REFRELE(areq); + break; + } + } + + mutex_exit(&rt->rt_lock); +} + +/* + * Cancel all asynchronous requests associated with the + * passed in crypto context and free it. + * + * A client SHOULD NOT call this routine after calling a crypto_*_final + * routine. This routine is called only during intermediate operations. + * The client should not use the crypto context after this function returns + * since we destroy it. + * + * Calling context: + * Can be called from user context only. + */ +void +crypto_cancel_ctx(crypto_context_t ctx) +{ + kcf_context_t *ictx; + kcf_areq_node_t *areq; + + if (ctx == NULL) + return; + + ictx = (kcf_context_t *)((crypto_ctx_t *)ctx)->cc_framework_private; + + mutex_enter(&ictx->kc_in_use_lock); + + /* Walk the chain and cancel each request */ + while ((areq = ictx->kc_req_chain_first) != NULL) { + /* + * We have to drop the lock here as we may have + * to wait for request completion. We hold the + * request before dropping the lock though, so that it + * won't be freed underneath us. + */ + KCF_AREQ_REFHOLD(areq); + mutex_exit(&ictx->kc_in_use_lock); + + crypto_cancel_req(GET_REQID(areq)); + KCF_AREQ_REFRELE(areq); + + mutex_enter(&ictx->kc_in_use_lock); + } + + mutex_exit(&ictx->kc_in_use_lock); + KCF_CONTEXT_REFRELE(ictx); +} + +/* + * Update kstats. + */ +static int +kcf_misc_kstat_update(kstat_t *ksp, int rw) +{ + uint_t tcnt; + kcf_stats_t *ks_data; + + if (rw == KSTAT_WRITE) + return (EACCES); + + ks_data = ksp->ks_data; + + ks_data->ks_thrs_in_pool.value.ui32 = kcfpool->kp_threads; + /* + * The failover thread is counted in kp_idlethreads in + * some corner cases. This is done to avoid doing more checks + * when submitting a request. We account for those cases below. + */ + if ((tcnt = kcfpool->kp_idlethreads) == (kcfpool->kp_threads + 1)) + tcnt--; + ks_data->ks_idle_thrs.value.ui32 = tcnt; + ks_data->ks_minthrs.value.ui32 = kcf_minthreads; + ks_data->ks_maxthrs.value.ui32 = kcf_maxthreads; + ks_data->ks_swq_njobs.value.ui32 = gswq->gs_njobs; + ks_data->ks_swq_maxjobs.value.ui32 = gswq->gs_maxjobs; + ks_data->ks_taskq_threads.value.ui32 = crypto_taskq_threads; + ks_data->ks_taskq_minalloc.value.ui32 = crypto_taskq_minalloc; + ks_data->ks_taskq_maxalloc.value.ui32 = crypto_taskq_maxalloc; + + return (0); +} + +/* + * Allocate and initiatize a kcf_dual_req, used for saving the arguments of + * a dual operation or an atomic operation that has to be internally + * simulated with multiple single steps. + * crq determines the memory allocation flags. + */ + +kcf_dual_req_t * +kcf_alloc_req(crypto_call_req_t *crq) +{ + kcf_dual_req_t *kcr; + + kcr = kmem_alloc(sizeof (kcf_dual_req_t), KCF_KMFLAG(crq)); + + if (kcr == NULL) + return (NULL); + + /* Copy the whole crypto_call_req struct, as it isn't persistant */ + if (crq != NULL) + kcr->kr_callreq = *crq; + else + bzero(&(kcr->kr_callreq), sizeof (crypto_call_req_t)); + kcr->kr_areq = NULL; + kcr->kr_saveoffset = 0; + kcr->kr_savelen = 0; + + return (kcr); +} + +/* + * Callback routine for the next part of a simulated dual part. + * Schedules the next step. + * + * This routine can be called from interrupt context. + */ +void +kcf_next_req(void *next_req_arg, int status) +{ + kcf_dual_req_t *next_req = (kcf_dual_req_t *)next_req_arg; + kcf_req_params_t *params = &(next_req->kr_params); + kcf_areq_node_t *areq = next_req->kr_areq; + int error = status; + kcf_provider_desc_t *pd = NULL; + crypto_dual_data_t *ct = NULL; + + /* Stop the processing if an error occured at this step */ + if (error != CRYPTO_SUCCESS) { +out: + areq->an_reqarg = next_req->kr_callreq; + KCF_AREQ_REFRELE(areq); + kmem_free(next_req, sizeof (kcf_dual_req_t)); + areq->an_isdual = B_FALSE; + kcf_aop_done(areq, error); + return; + } + + switch (params->rp_opgrp) { + case KCF_OG_MAC: { + + /* + * The next req is submitted with the same reqid as the + * first part. The consumer only got back that reqid, and + * should still be able to cancel the operation during its + * second step. + */ + kcf_mac_ops_params_t *mops = &(params->rp_u.mac_params); + crypto_ctx_template_t mac_tmpl; + kcf_mech_entry_t *me; + + ct = (crypto_dual_data_t *)mops->mo_data; + mac_tmpl = (crypto_ctx_template_t)mops->mo_templ; + + /* No expected recoverable failures, so no retry list */ + pd = kcf_get_mech_provider(mops->mo_framework_mechtype, + &me, &error, NULL, CRYPTO_FG_MAC_ATOMIC, + (areq->an_reqarg.cr_flag & CRYPTO_RESTRICTED), ct->dd_len2); + + if (pd == NULL) { + error = CRYPTO_MECH_NOT_SUPPORTED; + goto out; + } + /* Validate the MAC context template here */ + if ((pd->pd_prov_type == CRYPTO_SW_PROVIDER) && + (mac_tmpl != NULL)) { + kcf_ctx_template_t *ctx_mac_tmpl; + + ctx_mac_tmpl = (kcf_ctx_template_t *)mac_tmpl; + + if (ctx_mac_tmpl->ct_generation != me->me_gen_swprov) { + KCF_PROV_REFRELE(pd); + error = CRYPTO_OLD_CTX_TEMPLATE; + goto out; + } + mops->mo_templ = ctx_mac_tmpl->ct_prov_tmpl; + } + + break; + } + case KCF_OG_DECRYPT: { + kcf_decrypt_ops_params_t *dcrops = + &(params->rp_u.decrypt_params); + + ct = (crypto_dual_data_t *)dcrops->dop_ciphertext; + /* No expected recoverable failures, so no retry list */ + pd = kcf_get_mech_provider(dcrops->dop_framework_mechtype, + NULL, &error, NULL, CRYPTO_FG_DECRYPT_ATOMIC, + (areq->an_reqarg.cr_flag & CRYPTO_RESTRICTED), ct->dd_len1); + + if (pd == NULL) { + error = CRYPTO_MECH_NOT_SUPPORTED; + goto out; + } + break; + } + default: + break; + } + + /* The second step uses len2 and offset2 of the dual_data */ + next_req->kr_saveoffset = ct->dd_offset1; + next_req->kr_savelen = ct->dd_len1; + ct->dd_offset1 = ct->dd_offset2; + ct->dd_len1 = ct->dd_len2; + + /* preserve if the caller is restricted */ + if (areq->an_reqarg.cr_flag & CRYPTO_RESTRICTED) { + areq->an_reqarg.cr_flag = CRYPTO_RESTRICTED; + } else { + areq->an_reqarg.cr_flag = 0; + } + + areq->an_reqarg.cr_callback_func = kcf_last_req; + areq->an_reqarg.cr_callback_arg = next_req; + areq->an_isdual = B_TRUE; + + /* + * We would like to call kcf_submit_request() here. But, + * that is not possible as that routine allocates a new + * kcf_areq_node_t request structure, while we need to + * reuse the existing request structure. + */ + switch (pd->pd_prov_type) { + case CRYPTO_SW_PROVIDER: + error = common_submit_request(pd, NULL, params, + KCF_RHNDL(KM_NOSLEEP)); + break; + + case CRYPTO_HW_PROVIDER: { + kcf_provider_desc_t *old_pd; + taskq_t *taskq = pd->pd_sched_info.ks_taskq; + + /* + * Set the params for the second step in the + * dual-ops. + */ + areq->an_params = *params; + old_pd = areq->an_provider; + KCF_PROV_REFRELE(old_pd); + KCF_PROV_REFHOLD(pd); + areq->an_provider = pd; + + /* + * Note that we have to do a taskq_dispatch() + * here as we may be in interrupt context. + */ + if (taskq_dispatch(taskq, process_req_hwp, areq, + TQ_NOSLEEP) == (taskqid_t)0) { + error = CRYPTO_HOST_MEMORY; + } else { + error = CRYPTO_QUEUED; + } + break; + } + default: + break; + } + + /* + * We have to release the holds on the request and the provider + * in all cases. + */ + KCF_AREQ_REFRELE(areq); + KCF_PROV_REFRELE(pd); + + if (error != CRYPTO_QUEUED) { + /* restore, clean up, and invoke the client's callback */ + + ct->dd_offset1 = next_req->kr_saveoffset; + ct->dd_len1 = next_req->kr_savelen; + areq->an_reqarg = next_req->kr_callreq; + kmem_free(next_req, sizeof (kcf_dual_req_t)); + areq->an_isdual = B_FALSE; + kcf_aop_done(areq, error); + } +} + +/* + * Last part of an emulated dual operation. + * Clean up and restore ... + */ +void +kcf_last_req(void *last_req_arg, int status) +{ + kcf_dual_req_t *last_req = (kcf_dual_req_t *)last_req_arg; + + kcf_req_params_t *params = &(last_req->kr_params); + kcf_areq_node_t *areq = last_req->kr_areq; + crypto_dual_data_t *ct = NULL; + + switch (params->rp_opgrp) { + case KCF_OG_MAC: { + kcf_mac_ops_params_t *mops = &(params->rp_u.mac_params); + + ct = (crypto_dual_data_t *)mops->mo_data; + break; + } + case KCF_OG_DECRYPT: { + kcf_decrypt_ops_params_t *dcrops = + &(params->rp_u.decrypt_params); + + ct = (crypto_dual_data_t *)dcrops->dop_ciphertext; + break; + } + default: { + panic("invalid kcf_op_group_t %d", (int)params->rp_opgrp); + return; + } + } + ct->dd_offset1 = last_req->kr_saveoffset; + ct->dd_len1 = last_req->kr_savelen; + + /* The submitter used kcf_last_req as its callback */ + + if (areq == NULL) { + crypto_call_req_t *cr = &last_req->kr_callreq; + + (*(cr->cr_callback_func))(cr->cr_callback_arg, status); + kmem_free(last_req, sizeof (kcf_dual_req_t)); + return; + } + areq->an_reqarg = last_req->kr_callreq; + KCF_AREQ_REFRELE(areq); + kmem_free(last_req, sizeof (kcf_dual_req_t)); + areq->an_isdual = B_FALSE; + kcf_aop_done(areq, status); +} --- linux-aws-4.15.0.orig/zfs/module/icp/illumos-crypto.c +++ linux-aws-4.15.0/zfs/module/icp/illumos-crypto.c @@ -0,0 +1,156 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2016, Datto, Inc. All rights reserved. + */ + +#ifdef _KERNEL +#include +#include +#include +#else +#define __exit +#define __init +#endif + +#include +#include +#include +#include +#include +#include + +/* + * Changes made to the original Illumos Crypto Layer for the ICP: + * + * Several changes were needed to allow the Illumos Crypto Layer + * to work in the Linux kernel. Almost all of the changes fall into + * one of the following categories: + * + * 1) Moving the syntax to the C90: This was mostly a matter of + * changing func() definitions to func(void). In a few cases, + * initializations of structs with unions needed to have brackets + * added. + * + * 2) Changes to allow userspace compilation: The ICP is meant to be + * compiled and used in both userspace and kernel space (for ztest and + * libzfs), so the _KERNEL macros did not make sense anymore. For the + * same reason, many header includes were also changed to use + * sys/zfs_context.h + * + * 3) Moving to a statically compiled architecture: At some point in + * the future it may make sense to have encryption algorithms that are + * loadable into the ICP at runtime via separate kernel modules. + * However, considering that this code will probably not see much use + * outside of zfs and zfs encryption only requires aes and sha256 + * algorithms it seemed like more trouble than it was worth to port over + * Illumos's kernel module structure to a Linux kernel module. In + * addition, The Illumos code related to keeping track of kernel modules + * is very much tied to the Illumos OS and proved difficult to port to + * Linux. Therefore, the structure of the ICP was simplified to work + * statically and several pieces of code responsible for keeping track + * of Illumos kernel modules were removed and simplified. All module + * initialization and destruction is now called in this file during + * Linux kernel module loading and unloading. + * + * 4) Adding destructors: The Illumos Crypto Layer is built into + * the Illumos kernel and is not meant to be unloaded. Some destructors + * were added to allow the ICP to be unloaded without leaking + * structures. + * + * 5) Removing CRYPTO_DATA_MBLK related structures and code: + * crypto_data_t can have 3 formats, CRYPTO_DATA_RAW, CRYPTO_DATA_UIO, + * and CRYPTO_DATA_MBLK. ZFS only requires the first 2 formats, as the + * last one is related to streamed data. To simplify the port, code + * related to this format was removed. + * + * 6) Changes for architecture specific code: Some changes were needed + * to make architecture specific assembly compile. The biggest change + * here was to functions related to detecting CPU capabilities for amd64. + * The Illumos Crypto Layer used called into the Illumos kernel's API + * to discover these. They have been converted to instead use the + * 'cpuid' instruction as per the Intel spec. In addition, references to + * the sun4u' and sparc architectures have been removed so that these + * will use the generic implementation. + * + * 7) Removing sha384 and sha512 code: The sha code was actually very + * wasy to port. However, the generic sha384 and sha512 code actually + * exceeds the stack size on arm and powerpc architectures. In an effort + * to remove warnings, this code was removed. + * + * 8) Change large allocations from kmem_alloc() to vmem_alloc(): In + * testing the ICP with the ZFS encryption code, a few allocations were + * found that could potentially be very large. These caused the SPL to + * throw warnings and so they were changed to use vmem_alloc(). + * + * 9) Makefiles: Makefiles were added that would work with the existing + * ZFS Makefiles. + */ + +void __exit +icp_fini(void) +{ + skein_mod_fini(); + sha2_mod_fini(); + sha1_mod_fini(); + edonr_mod_fini(); + aes_mod_fini(); + kcf_sched_destroy(); + kcf_prov_tab_destroy(); + kcf_destroy_mech_tabs(); + mod_hash_fini(); +} + +/* roughly equivalent to kcf.c: _init() */ +int __init +icp_init(void) +{ + /* initialize the mod hash module */ + mod_hash_init(); + + /* initialize the mechanisms tables supported out-of-the-box */ + kcf_init_mech_tabs(); + + /* initialize the providers tables */ + kcf_prov_tab_init(); + + /* + * Initialize scheduling structures. Note that this does NOT + * start any threads since it might not be safe to do so. + */ + kcf_sched_init(); + + /* initialize algorithms */ + aes_mod_init(); + edonr_mod_init(); + sha1_mod_init(); + sha2_mod_init(); + skein_mod_init(); + + return (0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_exit(icp_fini); +module_init(icp_init); +MODULE_LICENSE(ZFS_META_LICENSE); +#endif --- linux-aws-4.15.0.orig/zfs/module/icp/include/aes/aes_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/aes/aes_impl.h @@ -0,0 +1,170 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _AES_IMPL_H +#define _AES_IMPL_H + +/* + * Common definitions used by AES. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/* Similar to sysmacros.h IS_P2ALIGNED, but checks two pointers: */ +#define IS_P2ALIGNED2(v, w, a) \ + ((((uintptr_t)(v) | (uintptr_t)(w)) & ((uintptr_t)(a) - 1)) == 0) + +#define AES_BLOCK_LEN 16 /* bytes */ +/* Round constant length, in number of 32-bit elements: */ +#define RC_LENGTH (5 * ((AES_BLOCK_LEN) / 4 - 2)) + +#define AES_COPY_BLOCK(src, dst) \ + (dst)[0] = (src)[0]; \ + (dst)[1] = (src)[1]; \ + (dst)[2] = (src)[2]; \ + (dst)[3] = (src)[3]; \ + (dst)[4] = (src)[4]; \ + (dst)[5] = (src)[5]; \ + (dst)[6] = (src)[6]; \ + (dst)[7] = (src)[7]; \ + (dst)[8] = (src)[8]; \ + (dst)[9] = (src)[9]; \ + (dst)[10] = (src)[10]; \ + (dst)[11] = (src)[11]; \ + (dst)[12] = (src)[12]; \ + (dst)[13] = (src)[13]; \ + (dst)[14] = (src)[14]; \ + (dst)[15] = (src)[15] + +#define AES_XOR_BLOCK(src, dst) \ + (dst)[0] ^= (src)[0]; \ + (dst)[1] ^= (src)[1]; \ + (dst)[2] ^= (src)[2]; \ + (dst)[3] ^= (src)[3]; \ + (dst)[4] ^= (src)[4]; \ + (dst)[5] ^= (src)[5]; \ + (dst)[6] ^= (src)[6]; \ + (dst)[7] ^= (src)[7]; \ + (dst)[8] ^= (src)[8]; \ + (dst)[9] ^= (src)[9]; \ + (dst)[10] ^= (src)[10]; \ + (dst)[11] ^= (src)[11]; \ + (dst)[12] ^= (src)[12]; \ + (dst)[13] ^= (src)[13]; \ + (dst)[14] ^= (src)[14]; \ + (dst)[15] ^= (src)[15] + +/* AES key size definitions */ +#define AES_MINBITS 128 +#define AES_MINBYTES ((AES_MINBITS) >> 3) +#define AES_MAXBITS 256 +#define AES_MAXBYTES ((AES_MAXBITS) >> 3) + +#define AES_MIN_KEY_BYTES ((AES_MINBITS) >> 3) +#define AES_MAX_KEY_BYTES ((AES_MAXBITS) >> 3) +#define AES_192_KEY_BYTES 24 +#define AES_IV_LEN 16 + +/* AES key schedule may be implemented with 32- or 64-bit elements: */ +#define AES_32BIT_KS 32 +#define AES_64BIT_KS 64 + +#define MAX_AES_NR 14 /* Maximum number of rounds */ +#define MAX_AES_NB 4 /* Number of columns comprising a state */ + +typedef union { +#ifdef sun4u + uint64_t ks64[((MAX_AES_NR) + 1) * (MAX_AES_NB)]; +#endif + uint32_t ks32[((MAX_AES_NR) + 1) * (MAX_AES_NB)]; +} aes_ks_t; + +/* aes_key.flags value: */ +#define INTEL_AES_NI_CAPABLE 0x1 /* AES-NI instructions present */ + +typedef struct aes_key aes_key_t; +struct aes_key { + aes_ks_t encr_ks; /* encryption key schedule */ + aes_ks_t decr_ks; /* decryption key schedule */ +#ifdef __amd64 + long double align128; /* Align fields above for Intel AES-NI */ + int flags; /* implementation-dependent flags */ +#endif /* __amd64 */ + int nr; /* number of rounds (10, 12, or 14) */ + int type; /* key schedule size (32 or 64 bits) */ +}; + +/* + * Core AES functions. + * ks and keysched are pointers to aes_key_t. + * They are declared void* as they are intended to be opaque types. + * Use function aes_alloc_keysched() to allocate memory for ks and keysched. + */ +extern void *aes_alloc_keysched(size_t *size, int kmflag); +extern void aes_init_keysched(const uint8_t *cipherKey, uint_t keyBits, + void *keysched); +extern int aes_encrypt_block(const void *ks, const uint8_t *pt, uint8_t *ct); +extern int aes_decrypt_block(const void *ks, const uint8_t *ct, uint8_t *pt); + +/* + * AES mode functions. + * The first 2 functions operate on 16-byte AES blocks. + */ +extern void aes_copy_block(uint8_t *in, uint8_t *out); +extern void aes_xor_block(uint8_t *data, uint8_t *dst); + +/* Note: ctx is a pointer to aes_ctx_t defined in modes.h */ +extern int aes_encrypt_contiguous_blocks(void *ctx, char *data, size_t length, + crypto_data_t *out); +extern int aes_decrypt_contiguous_blocks(void *ctx, char *data, size_t length, + crypto_data_t *out); + +/* + * The following definitions and declarations are only used by AES FIPS POST + */ +#ifdef _AES_IMPL + +typedef enum aes_mech_type { + AES_ECB_MECH_INFO_TYPE, /* SUN_CKM_AES_ECB */ + AES_CBC_MECH_INFO_TYPE, /* SUN_CKM_AES_CBC */ + AES_CBC_PAD_MECH_INFO_TYPE, /* SUN_CKM_AES_CBC_PAD */ + AES_CTR_MECH_INFO_TYPE, /* SUN_CKM_AES_CTR */ + AES_CCM_MECH_INFO_TYPE, /* SUN_CKM_AES_CCM */ + AES_GCM_MECH_INFO_TYPE, /* SUN_CKM_AES_GCM */ + AES_GMAC_MECH_INFO_TYPE /* SUN_CKM_AES_GMAC */ +} aes_mech_type_t; + +#endif /* _AES_IMPL */ + +#ifdef __cplusplus +} +#endif + +#endif /* _AES_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/modes/modes.h +++ linux-aws-4.15.0/zfs/module/icp/include/modes/modes.h @@ -0,0 +1,385 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _COMMON_CRYPTO_MODES_H +#define _COMMON_CRYPTO_MODES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ECB_MODE 0x00000002 +#define CBC_MODE 0x00000004 +#define CTR_MODE 0x00000008 +#define CCM_MODE 0x00000010 +#define GCM_MODE 0x00000020 +#define GMAC_MODE 0x00000040 + +/* + * cc_keysched: Pointer to key schedule. + * + * cc_keysched_len: Length of the key schedule. + * + * cc_remainder: This is for residual data, i.e. data that can't + * be processed because there are too few bytes. + * Must wait until more data arrives. + * + * cc_remainder_len: Number of bytes in cc_remainder. + * + * cc_iv: Scratch buffer that sometimes contains the IV. + * + * cc_lastp: Pointer to previous block of ciphertext. + * + * cc_copy_to: Pointer to where encrypted residual data needs + * to be copied. + * + * cc_flags: PROVIDER_OWNS_KEY_SCHEDULE + * When a context is freed, it is necessary + * to know whether the key schedule was allocated + * by the caller, or internally, e.g. an init routine. + * If allocated by the latter, then it needs to be freed. + * + * ECB_MODE, CBC_MODE, CTR_MODE, or CCM_MODE + */ +struct common_ctx { + void *cc_keysched; + size_t cc_keysched_len; + uint64_t cc_iv[2]; + uint64_t cc_remainder[2]; + size_t cc_remainder_len; + uint8_t *cc_lastp; + uint8_t *cc_copy_to; + uint32_t cc_flags; +}; + +typedef struct common_ctx common_ctx_t; + +typedef struct ecb_ctx { + struct common_ctx ecb_common; + uint64_t ecb_lastblock[2]; +} ecb_ctx_t; + +#define ecb_keysched ecb_common.cc_keysched +#define ecb_keysched_len ecb_common.cc_keysched_len +#define ecb_iv ecb_common.cc_iv +#define ecb_remainder ecb_common.cc_remainder +#define ecb_remainder_len ecb_common.cc_remainder_len +#define ecb_lastp ecb_common.cc_lastp +#define ecb_copy_to ecb_common.cc_copy_to +#define ecb_flags ecb_common.cc_flags + +typedef struct cbc_ctx { + struct common_ctx cbc_common; + uint64_t cbc_lastblock[2]; +} cbc_ctx_t; + +#define cbc_keysched cbc_common.cc_keysched +#define cbc_keysched_len cbc_common.cc_keysched_len +#define cbc_iv cbc_common.cc_iv +#define cbc_remainder cbc_common.cc_remainder +#define cbc_remainder_len cbc_common.cc_remainder_len +#define cbc_lastp cbc_common.cc_lastp +#define cbc_copy_to cbc_common.cc_copy_to +#define cbc_flags cbc_common.cc_flags + +/* + * ctr_lower_mask Bit-mask for lower 8 bytes of counter block. + * ctr_upper_mask Bit-mask for upper 8 bytes of counter block. + */ +typedef struct ctr_ctx { + struct common_ctx ctr_common; + uint64_t ctr_lower_mask; + uint64_t ctr_upper_mask; + uint32_t ctr_tmp[4]; +} ctr_ctx_t; + +/* + * ctr_cb Counter block. + */ +#define ctr_keysched ctr_common.cc_keysched +#define ctr_keysched_len ctr_common.cc_keysched_len +#define ctr_cb ctr_common.cc_iv +#define ctr_remainder ctr_common.cc_remainder +#define ctr_remainder_len ctr_common.cc_remainder_len +#define ctr_lastp ctr_common.cc_lastp +#define ctr_copy_to ctr_common.cc_copy_to +#define ctr_flags ctr_common.cc_flags + +/* + * + * ccm_mac_len: Stores length of the MAC in CCM mode. + * ccm_mac_buf: Stores the intermediate value for MAC in CCM encrypt. + * In CCM decrypt, stores the input MAC value. + * ccm_data_len: Length of the plaintext for CCM mode encrypt, or + * length of the ciphertext for CCM mode decrypt. + * ccm_processed_data_len: + * Length of processed plaintext in CCM mode encrypt, + * or length of processed ciphertext for CCM mode decrypt. + * ccm_processed_mac_len: + * Length of MAC data accumulated in CCM mode decrypt. + * + * ccm_pt_buf: Only used in CCM mode decrypt. It stores the + * decrypted plaintext to be returned when + * MAC verification succeeds in decrypt_final. + * Memory for this should be allocated in the AES module. + * + */ +typedef struct ccm_ctx { + struct common_ctx ccm_common; + uint32_t ccm_tmp[4]; + size_t ccm_mac_len; + uint64_t ccm_mac_buf[2]; + size_t ccm_data_len; + size_t ccm_processed_data_len; + size_t ccm_processed_mac_len; + uint8_t *ccm_pt_buf; + uint64_t ccm_mac_input_buf[2]; + uint64_t ccm_counter_mask; +} ccm_ctx_t; + +#define ccm_keysched ccm_common.cc_keysched +#define ccm_keysched_len ccm_common.cc_keysched_len +#define ccm_cb ccm_common.cc_iv +#define ccm_remainder ccm_common.cc_remainder +#define ccm_remainder_len ccm_common.cc_remainder_len +#define ccm_lastp ccm_common.cc_lastp +#define ccm_copy_to ccm_common.cc_copy_to +#define ccm_flags ccm_common.cc_flags + +/* + * gcm_tag_len: Length of authentication tag. + * + * gcm_ghash: Stores output from the GHASH function. + * + * gcm_processed_data_len: + * Length of processed plaintext (encrypt) or + * length of processed ciphertext (decrypt). + * + * gcm_pt_buf: Stores the decrypted plaintext returned by + * decrypt_final when the computed authentication + * tag matches the user supplied tag. + * + * gcm_pt_buf_len: Length of the plaintext buffer. + * + * gcm_H: Subkey. + * + * gcm_J0: Pre-counter block generated from the IV. + * + * gcm_len_a_len_c: 64-bit representations of the bit lengths of + * AAD and ciphertext. + * + * gcm_kmflag: Current value of kmflag. Used only for allocating + * the plaintext buffer during decryption. + */ +typedef struct gcm_ctx { + struct common_ctx gcm_common; + size_t gcm_tag_len; + size_t gcm_processed_data_len; + size_t gcm_pt_buf_len; + uint32_t gcm_tmp[4]; + uint64_t gcm_ghash[2]; + uint64_t gcm_H[2]; + uint64_t gcm_J0[2]; + uint64_t gcm_len_a_len_c[2]; + uint8_t *gcm_pt_buf; + int gcm_kmflag; +} gcm_ctx_t; + +#define gcm_keysched gcm_common.cc_keysched +#define gcm_keysched_len gcm_common.cc_keysched_len +#define gcm_cb gcm_common.cc_iv +#define gcm_remainder gcm_common.cc_remainder +#define gcm_remainder_len gcm_common.cc_remainder_len +#define gcm_lastp gcm_common.cc_lastp +#define gcm_copy_to gcm_common.cc_copy_to +#define gcm_flags gcm_common.cc_flags + +#define AES_GMAC_IV_LEN 12 +#define AES_GMAC_TAG_BITS 128 + +typedef struct aes_ctx { + union { + ecb_ctx_t acu_ecb; + cbc_ctx_t acu_cbc; + ctr_ctx_t acu_ctr; + ccm_ctx_t acu_ccm; + gcm_ctx_t acu_gcm; + } acu; +} aes_ctx_t; + +#define ac_flags acu.acu_ecb.ecb_common.cc_flags +#define ac_remainder_len acu.acu_ecb.ecb_common.cc_remainder_len +#define ac_keysched acu.acu_ecb.ecb_common.cc_keysched +#define ac_keysched_len acu.acu_ecb.ecb_common.cc_keysched_len +#define ac_iv acu.acu_ecb.ecb_common.cc_iv +#define ac_lastp acu.acu_ecb.ecb_common.cc_lastp +#define ac_pt_buf acu.acu_ccm.ccm_pt_buf +#define ac_mac_len acu.acu_ccm.ccm_mac_len +#define ac_data_len acu.acu_ccm.ccm_data_len +#define ac_processed_mac_len acu.acu_ccm.ccm_processed_mac_len +#define ac_processed_data_len acu.acu_ccm.ccm_processed_data_len +#define ac_tag_len acu.acu_gcm.gcm_tag_len + +typedef struct blowfish_ctx { + union { + ecb_ctx_t bcu_ecb; + cbc_ctx_t bcu_cbc; + } bcu; +} blowfish_ctx_t; + +#define bc_flags bcu.bcu_ecb.ecb_common.cc_flags +#define bc_remainder_len bcu.bcu_ecb.ecb_common.cc_remainder_len +#define bc_keysched bcu.bcu_ecb.ecb_common.cc_keysched +#define bc_keysched_len bcu.bcu_ecb.ecb_common.cc_keysched_len +#define bc_iv bcu.bcu_ecb.ecb_common.cc_iv +#define bc_lastp bcu.bcu_ecb.ecb_common.cc_lastp + +typedef struct des_ctx { + union { + ecb_ctx_t dcu_ecb; + cbc_ctx_t dcu_cbc; + } dcu; +} des_ctx_t; + +#define dc_flags dcu.dcu_ecb.ecb_common.cc_flags +#define dc_remainder_len dcu.dcu_ecb.ecb_common.cc_remainder_len +#define dc_keysched dcu.dcu_ecb.ecb_common.cc_keysched +#define dc_keysched_len dcu.dcu_ecb.ecb_common.cc_keysched_len +#define dc_iv dcu.dcu_ecb.ecb_common.cc_iv +#define dc_lastp dcu.dcu_ecb.ecb_common.cc_lastp + +extern int ecb_cipher_contiguous_blocks(ecb_ctx_t *, char *, size_t, + crypto_data_t *, size_t, int (*cipher)(const void *, const uint8_t *, + uint8_t *)); + +extern int cbc_encrypt_contiguous_blocks(cbc_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*encrypt)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int cbc_decrypt_contiguous_blocks(cbc_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*decrypt)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int ctr_mode_contiguous_blocks(ctr_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*cipher)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int ccm_mode_encrypt_contiguous_blocks(ccm_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int ccm_mode_decrypt_contiguous_blocks(ccm_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int gcm_mode_encrypt_contiguous_blocks(gcm_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int gcm_mode_decrypt_contiguous_blocks(gcm_ctx_t *, char *, size_t, + crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +int ccm_encrypt_final(ccm_ctx_t *, crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +int gcm_encrypt_final(gcm_ctx_t *, crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int ccm_decrypt_final(ccm_ctx_t *, crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int gcm_decrypt_final(gcm_ctx_t *, crypto_data_t *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int ctr_mode_final(ctr_ctx_t *, crypto_data_t *, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *)); + +extern int cbc_init_ctx(cbc_ctx_t *, char *, size_t, size_t, + void (*copy_block)(uint8_t *, uint64_t *)); + +extern int ctr_init_ctx(ctr_ctx_t *, ulong_t, uint8_t *, + void (*copy_block)(uint8_t *, uint8_t *)); + +extern int ccm_init_ctx(ccm_ctx_t *, char *, int, boolean_t, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int gcm_init_ctx(gcm_ctx_t *, char *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern int gmac_init_ctx(gcm_ctx_t *, char *, size_t, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *), + void (*copy_block)(uint8_t *, uint8_t *), + void (*xor_block)(uint8_t *, uint8_t *)); + +extern void calculate_ccm_mac(ccm_ctx_t *, uint8_t *, + int (*encrypt_block)(const void *, const uint8_t *, uint8_t *)); + +extern void gcm_mul(uint64_t *, uint64_t *, uint64_t *); + +extern void crypto_init_ptrs(crypto_data_t *, void **, offset_t *); +extern void crypto_get_ptrs(crypto_data_t *, void **, offset_t *, + uint8_t **, size_t *, uint8_t **, size_t); + +extern void *ecb_alloc_ctx(int); +extern void *cbc_alloc_ctx(int); +extern void *ctr_alloc_ctx(int); +extern void *ccm_alloc_ctx(int); +extern void *gcm_alloc_ctx(int); +extern void *gmac_alloc_ctx(int); +extern void crypto_free_mode_ctx(void *); +extern void gcm_set_kmflag(gcm_ctx_t *, int); + +#ifdef __cplusplus +} +#endif + +#endif /* _COMMON_CRYPTO_MODES_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sha1/sha1.h +++ linux-aws-4.15.0/zfs/module/icp/include/sha1/sha1.h @@ -0,0 +1,61 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SHA1_H +#define _SYS_SHA1_H + +#include /* for uint_* */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * NOTE: n2rng (Niagara2 RNG driver) accesses the state field of + * SHA1_CTX directly. NEVER change this structure without verifying + * compatibility with n2rng. The important thing is that the state + * must be in a field declared as uint32_t state[5]. + */ +/* SHA-1 context. */ +typedef struct { + uint32_t state[5]; /* state (ABCDE) */ + uint32_t count[2]; /* number of bits, modulo 2^64 (msb first) */ + union { + uint8_t buf8[64]; /* undigested input */ + uint32_t buf32[16]; /* realigned input */ + } buf_un; +} SHA1_CTX; + +#define SHA1_DIGEST_LENGTH 20 + +void SHA1Init(SHA1_CTX *); +void SHA1Update(SHA1_CTX *, const void *, size_t); +void SHA1Final(void *, SHA1_CTX *); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SHA1_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sha1/sha1_consts.h +++ linux-aws-4.15.0/zfs/module/icp/include/sha1/sha1_consts.h @@ -0,0 +1,65 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 1998, by Sun Microsystems, Inc. + * All rights reserved. + */ + +#ifndef _SYS_SHA1_CONSTS_H +#define _SYS_SHA1_CONSTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * as explained in sha1.c, loading 32-bit constants on a sparc is expensive + * since it involves both a `sethi' and an `or'. thus, we instead use `ld' + * to load the constants from an array called `sha1_consts'. however, on + * intel (and perhaps other processors), it is cheaper to load the constant + * directly. thus, the c code in SHA1Transform() uses the macro SHA1_CONST() + * which either expands to a constant or an array reference, depending on + * the architecture the code is being compiled for. + */ + +#include /* uint32_t */ + +extern const uint32_t sha1_consts[]; + +#if defined(__sparc) +#define SHA1_CONST(x) (sha1_consts[x]) +#else +#define SHA1_CONST(x) (SHA1_CONST_ ## x) +#endif + +/* constants, as provided in FIPS 180-1 */ + +#define SHA1_CONST_0 0x5a827999U +#define SHA1_CONST_1 0x6ed9eba1U +#define SHA1_CONST_2 0x8f1bbcdcU +#define SHA1_CONST_3 0xca62c1d6U + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SHA1_CONSTS_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sha1/sha1_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sha1/sha1_impl.h @@ -0,0 +1,73 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SHA1_IMPL_H +#define _SHA1_IMPL_H + + +#ifdef __cplusplus +extern "C" { +#endif + +#define SHA1_HASH_SIZE 20 /* SHA_1 digest length in bytes */ +#define SHA1_DIGEST_LENGTH 20 /* SHA1 digest length in bytes */ +#define SHA1_HMAC_BLOCK_SIZE 64 /* SHA1-HMAC block size */ +#define SHA1_HMAC_MIN_KEY_LEN 1 /* SHA1-HMAC min key length in bytes */ +#define SHA1_HMAC_MAX_KEY_LEN INT_MAX /* SHA1-HMAC max key length in bytes */ +#define SHA1_HMAC_INTS_PER_BLOCK (SHA1_HMAC_BLOCK_SIZE/sizeof (uint32_t)) + +/* + * CSPI information (entry points, provider info, etc.) + */ +typedef enum sha1_mech_type { + SHA1_MECH_INFO_TYPE, /* SUN_CKM_SHA1 */ + SHA1_HMAC_MECH_INFO_TYPE, /* SUN_CKM_SHA1_HMAC */ + SHA1_HMAC_GEN_MECH_INFO_TYPE /* SUN_CKM_SHA1_HMAC_GENERAL */ +} sha1_mech_type_t; + +/* + * Context for SHA1 mechanism. + */ +typedef struct sha1_ctx { + sha1_mech_type_t sc_mech_type; /* type of context */ + SHA1_CTX sc_sha1_ctx; /* SHA1 context */ +} sha1_ctx_t; + +/* + * Context for SHA1-HMAC and SHA1-HMAC-GENERAL mechanisms. + */ +typedef struct sha1_hmac_ctx { + sha1_mech_type_t hc_mech_type; /* type of context */ + uint32_t hc_digest_len; /* digest len in bytes */ + SHA1_CTX hc_icontext; /* inner SHA1 context */ + SHA1_CTX hc_ocontext; /* outer SHA1 context */ +} sha1_hmac_ctx_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* _SHA1_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sha2/sha2_consts.h +++ linux-aws-4.15.0/zfs/module/icp/include/sha2/sha2_consts.h @@ -0,0 +1,219 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SHA2_CONSTS_H +#define _SYS_SHA2_CONSTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Loading 32-bit constants on a sparc is expensive since it involves both + * a `sethi' and an `or'. thus, we instead use `ld' to load the constants + * from an array called `sha2_consts'. however, on intel (and perhaps other + * processors), it is cheaper to load the constant directly. thus, the c + * code in SHA transform functions uses the macro SHA2_CONST() which either + * expands to a constant or an array reference, depending on + * the architecture the code is being compiled for. + * + * SHA512 constants are used for SHA384 + */ + +#include /* uint32_t */ + +extern const uint32_t sha256_consts[]; +extern const uint64_t sha512_consts[]; + +#if defined(__sparc) +#define SHA256_CONST(x) (sha256_consts[x]) +#define SHA512_CONST(x) (sha512_consts[x]) +#else +#define SHA256_CONST(x) (SHA256_CONST_ ## x) +#define SHA512_CONST(x) (SHA512_CONST_ ## x) +#endif + +/* constants, as provided in FIPS 180-2 */ + +#define SHA256_CONST_0 0x428a2f98U +#define SHA256_CONST_1 0x71374491U +#define SHA256_CONST_2 0xb5c0fbcfU +#define SHA256_CONST_3 0xe9b5dba5U +#define SHA256_CONST_4 0x3956c25bU +#define SHA256_CONST_5 0x59f111f1U +#define SHA256_CONST_6 0x923f82a4U +#define SHA256_CONST_7 0xab1c5ed5U + +#define SHA256_CONST_8 0xd807aa98U +#define SHA256_CONST_9 0x12835b01U +#define SHA256_CONST_10 0x243185beU +#define SHA256_CONST_11 0x550c7dc3U +#define SHA256_CONST_12 0x72be5d74U +#define SHA256_CONST_13 0x80deb1feU +#define SHA256_CONST_14 0x9bdc06a7U +#define SHA256_CONST_15 0xc19bf174U + +#define SHA256_CONST_16 0xe49b69c1U +#define SHA256_CONST_17 0xefbe4786U +#define SHA256_CONST_18 0x0fc19dc6U +#define SHA256_CONST_19 0x240ca1ccU +#define SHA256_CONST_20 0x2de92c6fU +#define SHA256_CONST_21 0x4a7484aaU +#define SHA256_CONST_22 0x5cb0a9dcU +#define SHA256_CONST_23 0x76f988daU + +#define SHA256_CONST_24 0x983e5152U +#define SHA256_CONST_25 0xa831c66dU +#define SHA256_CONST_26 0xb00327c8U +#define SHA256_CONST_27 0xbf597fc7U +#define SHA256_CONST_28 0xc6e00bf3U +#define SHA256_CONST_29 0xd5a79147U +#define SHA256_CONST_30 0x06ca6351U +#define SHA256_CONST_31 0x14292967U + +#define SHA256_CONST_32 0x27b70a85U +#define SHA256_CONST_33 0x2e1b2138U +#define SHA256_CONST_34 0x4d2c6dfcU +#define SHA256_CONST_35 0x53380d13U +#define SHA256_CONST_36 0x650a7354U +#define SHA256_CONST_37 0x766a0abbU +#define SHA256_CONST_38 0x81c2c92eU +#define SHA256_CONST_39 0x92722c85U + +#define SHA256_CONST_40 0xa2bfe8a1U +#define SHA256_CONST_41 0xa81a664bU +#define SHA256_CONST_42 0xc24b8b70U +#define SHA256_CONST_43 0xc76c51a3U +#define SHA256_CONST_44 0xd192e819U +#define SHA256_CONST_45 0xd6990624U +#define SHA256_CONST_46 0xf40e3585U +#define SHA256_CONST_47 0x106aa070U + +#define SHA256_CONST_48 0x19a4c116U +#define SHA256_CONST_49 0x1e376c08U +#define SHA256_CONST_50 0x2748774cU +#define SHA256_CONST_51 0x34b0bcb5U +#define SHA256_CONST_52 0x391c0cb3U +#define SHA256_CONST_53 0x4ed8aa4aU +#define SHA256_CONST_54 0x5b9cca4fU +#define SHA256_CONST_55 0x682e6ff3U + +#define SHA256_CONST_56 0x748f82eeU +#define SHA256_CONST_57 0x78a5636fU +#define SHA256_CONST_58 0x84c87814U +#define SHA256_CONST_59 0x8cc70208U +#define SHA256_CONST_60 0x90befffaU +#define SHA256_CONST_61 0xa4506cebU +#define SHA256_CONST_62 0xbef9a3f7U +#define SHA256_CONST_63 0xc67178f2U + +#define SHA512_CONST_0 0x428a2f98d728ae22ULL +#define SHA512_CONST_1 0x7137449123ef65cdULL +#define SHA512_CONST_2 0xb5c0fbcfec4d3b2fULL +#define SHA512_CONST_3 0xe9b5dba58189dbbcULL +#define SHA512_CONST_4 0x3956c25bf348b538ULL +#define SHA512_CONST_5 0x59f111f1b605d019ULL +#define SHA512_CONST_6 0x923f82a4af194f9bULL +#define SHA512_CONST_7 0xab1c5ed5da6d8118ULL +#define SHA512_CONST_8 0xd807aa98a3030242ULL +#define SHA512_CONST_9 0x12835b0145706fbeULL +#define SHA512_CONST_10 0x243185be4ee4b28cULL +#define SHA512_CONST_11 0x550c7dc3d5ffb4e2ULL +#define SHA512_CONST_12 0x72be5d74f27b896fULL +#define SHA512_CONST_13 0x80deb1fe3b1696b1ULL +#define SHA512_CONST_14 0x9bdc06a725c71235ULL +#define SHA512_CONST_15 0xc19bf174cf692694ULL +#define SHA512_CONST_16 0xe49b69c19ef14ad2ULL +#define SHA512_CONST_17 0xefbe4786384f25e3ULL +#define SHA512_CONST_18 0x0fc19dc68b8cd5b5ULL +#define SHA512_CONST_19 0x240ca1cc77ac9c65ULL +#define SHA512_CONST_20 0x2de92c6f592b0275ULL +#define SHA512_CONST_21 0x4a7484aa6ea6e483ULL +#define SHA512_CONST_22 0x5cb0a9dcbd41fbd4ULL +#define SHA512_CONST_23 0x76f988da831153b5ULL +#define SHA512_CONST_24 0x983e5152ee66dfabULL +#define SHA512_CONST_25 0xa831c66d2db43210ULL +#define SHA512_CONST_26 0xb00327c898fb213fULL +#define SHA512_CONST_27 0xbf597fc7beef0ee4ULL +#define SHA512_CONST_28 0xc6e00bf33da88fc2ULL +#define SHA512_CONST_29 0xd5a79147930aa725ULL +#define SHA512_CONST_30 0x06ca6351e003826fULL +#define SHA512_CONST_31 0x142929670a0e6e70ULL +#define SHA512_CONST_32 0x27b70a8546d22ffcULL +#define SHA512_CONST_33 0x2e1b21385c26c926ULL +#define SHA512_CONST_34 0x4d2c6dfc5ac42aedULL +#define SHA512_CONST_35 0x53380d139d95b3dfULL +#define SHA512_CONST_36 0x650a73548baf63deULL +#define SHA512_CONST_37 0x766a0abb3c77b2a8ULL +#define SHA512_CONST_38 0x81c2c92e47edaee6ULL +#define SHA512_CONST_39 0x92722c851482353bULL +#define SHA512_CONST_40 0xa2bfe8a14cf10364ULL +#define SHA512_CONST_41 0xa81a664bbc423001ULL +#define SHA512_CONST_42 0xc24b8b70d0f89791ULL +#define SHA512_CONST_43 0xc76c51a30654be30ULL +#define SHA512_CONST_44 0xd192e819d6ef5218ULL +#define SHA512_CONST_45 0xd69906245565a910ULL +#define SHA512_CONST_46 0xf40e35855771202aULL +#define SHA512_CONST_47 0x106aa07032bbd1b8ULL +#define SHA512_CONST_48 0x19a4c116b8d2d0c8ULL +#define SHA512_CONST_49 0x1e376c085141ab53ULL +#define SHA512_CONST_50 0x2748774cdf8eeb99ULL +#define SHA512_CONST_51 0x34b0bcb5e19b48a8ULL +#define SHA512_CONST_52 0x391c0cb3c5c95a63ULL +#define SHA512_CONST_53 0x4ed8aa4ae3418acbULL +#define SHA512_CONST_54 0x5b9cca4f7763e373ULL +#define SHA512_CONST_55 0x682e6ff3d6b2b8a3ULL +#define SHA512_CONST_56 0x748f82ee5defb2fcULL +#define SHA512_CONST_57 0x78a5636f43172f60ULL +#define SHA512_CONST_58 0x84c87814a1f0ab72ULL +#define SHA512_CONST_59 0x8cc702081a6439ecULL +#define SHA512_CONST_60 0x90befffa23631e28ULL +#define SHA512_CONST_61 0xa4506cebde82bde9ULL +#define SHA512_CONST_62 0xbef9a3f7b2c67915ULL +#define SHA512_CONST_63 0xc67178f2e372532bULL +#define SHA512_CONST_64 0xca273eceea26619cULL +#define SHA512_CONST_65 0xd186b8c721c0c207ULL +#define SHA512_CONST_66 0xeada7dd6cde0eb1eULL +#define SHA512_CONST_67 0xf57d4f7fee6ed178ULL +#define SHA512_CONST_68 0x06f067aa72176fbaULL +#define SHA512_CONST_69 0x0a637dc5a2c898a6ULL +#define SHA512_CONST_70 0x113f9804bef90daeULL +#define SHA512_CONST_71 0x1b710b35131c471bULL +#define SHA512_CONST_72 0x28db77f523047d84ULL +#define SHA512_CONST_73 0x32caab7b40c72493ULL +#define SHA512_CONST_74 0x3c9ebe0a15c9bebcULL +#define SHA512_CONST_75 0x431d67c49c100d4cULL +#define SHA512_CONST_76 0x4cc5d4becb3e42b6ULL +#define SHA512_CONST_77 0x597f299cfc657e2aULL +#define SHA512_CONST_78 0x5fcb6fab3ad6faecULL +#define SHA512_CONST_79 0x6c44198c4a475817ULL + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SHA2_CONSTS_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sha2/sha2_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sha2/sha2_impl.h @@ -0,0 +1,64 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SHA2_IMPL_H +#define _SHA2_IMPL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SHA1_TYPE, + SHA256_TYPE, + SHA384_TYPE, + SHA512_TYPE +} sha2_mech_t; + +/* + * Context for SHA2 mechanism. + */ +typedef struct sha2_ctx { + sha2_mech_type_t sc_mech_type; /* type of context */ + SHA2_CTX sc_sha2_ctx; /* SHA2 context */ +} sha2_ctx_t; + +/* + * Context for SHA2 HMAC and HMAC GENERAL mechanisms. + */ +typedef struct sha2_hmac_ctx { + sha2_mech_type_t hc_mech_type; /* type of context */ + uint32_t hc_digest_len; /* digest len in bytes */ + SHA2_CTX hc_icontext; /* inner SHA2 context */ + SHA2_CTX hc_ocontext; /* outer SHA2 context */ +} sha2_hmac_ctx_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _SHA2_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/asm_linkage.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/asm_linkage.h @@ -0,0 +1,46 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_ASM_LINKAGE_H +#define _SYS_ASM_LINKAGE_H + +#if defined(__i386) || defined(__amd64) + +#include /* XX64 x86/sys/asm_linkage.h */ + +#endif + +#if defined(_KERNEL) && defined(HAVE_KERNEL_OBJTOOL) + +#include + +#else /* userspace */ +#define FRAME_BEGIN +#define FRAME_END +#endif + + +#endif /* _SYS_ASM_LINKAGE_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/bitmap.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/bitmap.h @@ -0,0 +1,183 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + + +#ifndef _SYS_BITMAP_H +#define _SYS_BITMAP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__GNUC__) && defined(_ASM_INLINES) && \ + (defined(__i386) || defined(__amd64)) +#include +#endif + +/* + * Operations on bitmaps of arbitrary size + * A bitmap is a vector of 1 or more ulong_t's. + * The user of the package is responsible for range checks and keeping + * track of sizes. + */ + +#ifdef _LP64 +#define BT_ULSHIFT 6 /* log base 2 of BT_NBIPUL, to extract word index */ +#define BT_ULSHIFT32 5 /* log base 2 of BT_NBIPUL, to extract word index */ +#else +#define BT_ULSHIFT 5 /* log base 2 of BT_NBIPUL, to extract word index */ +#endif + +#define BT_NBIPUL (1 << BT_ULSHIFT) /* n bits per ulong_t */ +#define BT_ULMASK (BT_NBIPUL - 1) /* to extract bit index */ + +#ifdef _LP64 +#define BT_NBIPUL32 (1 << BT_ULSHIFT32) /* n bits per ulong_t */ +#define BT_ULMASK32 (BT_NBIPUL32 - 1) /* to extract bit index */ +#define BT_ULMAXMASK 0xffffffffffffffff /* used by bt_getlowbit */ +#else +#define BT_ULMAXMASK 0xffffffff +#endif + +/* + * bitmap is a ulong_t *, bitindex an index_t + * + * The macros BT_WIM and BT_BIW internal; there is no need + * for users of this package to use them. + */ + +/* + * word in map + */ +#define BT_WIM(bitmap, bitindex) \ + ((bitmap)[(bitindex) >> BT_ULSHIFT]) +/* + * bit in word + */ +#define BT_BIW(bitindex) \ + (1UL << ((bitindex) & BT_ULMASK)) + +#ifdef _LP64 +#define BT_WIM32(bitmap, bitindex) \ + ((bitmap)[(bitindex) >> BT_ULSHIFT32]) + +#define BT_BIW32(bitindex) \ + (1UL << ((bitindex) & BT_ULMASK32)) +#endif + +/* + * These are public macros + * + * BT_BITOUL == n bits to n ulong_t's + */ +#define BT_BITOUL(nbits) \ + (((nbits) + BT_NBIPUL - 1l) / BT_NBIPUL) +#define BT_SIZEOFMAP(nbits) \ + (BT_BITOUL(nbits) * sizeof (ulong_t)) +#define BT_TEST(bitmap, bitindex) \ + ((BT_WIM((bitmap), (bitindex)) & BT_BIW(bitindex)) ? 1 : 0) +#define BT_SET(bitmap, bitindex) \ + { BT_WIM((bitmap), (bitindex)) |= BT_BIW(bitindex); } +#define BT_CLEAR(bitmap, bitindex) \ + { BT_WIM((bitmap), (bitindex)) &= ~BT_BIW(bitindex); } + +#ifdef _LP64 +#define BT_BITOUL32(nbits) \ + (((nbits) + BT_NBIPUL32 - 1l) / BT_NBIPUL32) +#define BT_SIZEOFMAP32(nbits) \ + (BT_BITOUL32(nbits) * sizeof (uint_t)) +#define BT_TEST32(bitmap, bitindex) \ + ((BT_WIM32((bitmap), (bitindex)) & BT_BIW32(bitindex)) ? 1 : 0) +#define BT_SET32(bitmap, bitindex) \ + { BT_WIM32((bitmap), (bitindex)) |= BT_BIW32(bitindex); } +#define BT_CLEAR32(bitmap, bitindex) \ + { BT_WIM32((bitmap), (bitindex)) &= ~BT_BIW32(bitindex); } +#endif /* _LP64 */ + + +/* + * BIT_ONLYONESET is a private macro not designed for bitmaps of + * arbitrary size. u must be an unsigned integer/long. It returns + * true if one and only one bit is set in u. + */ +#define BIT_ONLYONESET(u) \ + ((((u) == 0) ? 0 : ((u) & ((u) - 1)) == 0)) + +#ifndef _ASM + +/* + * return next available bit index from map with specified number of bits + */ +extern index_t bt_availbit(ulong_t *bitmap, size_t nbits); +/* + * find the highest order bit that is on, and is within or below + * the word specified by wx + */ +extern int bt_gethighbit(ulong_t *mapp, int wx); +extern int bt_range(ulong_t *bitmap, size_t *pos1, size_t *pos2, + size_t end_pos); +extern int bt_getlowbit(ulong_t *bitmap, size_t start, size_t stop); +extern void bt_copy(ulong_t *, ulong_t *, ulong_t); + +/* + * find the parity + */ +extern int odd_parity(ulong_t); + +/* + * Atomically set/clear bits + * Atomic exclusive operations will set "result" to "-1" + * if the bit is already set/cleared. "result" will be set + * to 0 otherwise. + */ +#define BT_ATOMIC_SET(bitmap, bitindex) \ + { atomic_or_long(&(BT_WIM(bitmap, bitindex)), BT_BIW(bitindex)); } +#define BT_ATOMIC_CLEAR(bitmap, bitindex) \ + { atomic_and_long(&(BT_WIM(bitmap, bitindex)), ~BT_BIW(bitindex)); } + +#define BT_ATOMIC_SET_EXCL(bitmap, bitindex, result) \ + { result = atomic_set_long_excl(&(BT_WIM(bitmap, bitindex)), \ + (bitindex) % BT_NBIPUL); } +#define BT_ATOMIC_CLEAR_EXCL(bitmap, bitindex, result) \ + { result = atomic_clear_long_excl(&(BT_WIM(bitmap, bitindex)), \ + (bitindex) % BT_NBIPUL); } + +/* + * Extracts bits between index h (high, inclusive) and l (low, exclusive) from + * u, which must be an unsigned integer. + */ +#define BITX(u, h, l) (((u) >> (l)) & ((1LU << ((h) - (l) + 1LU)) - 1LU)) + +#endif /* _ASM */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_BITMAP_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/elfsign.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/elfsign.h @@ -0,0 +1,137 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_ELFSIGN_H +#define _SYS_CRYPTO_ELFSIGN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Consolidation Private Interface for elfsign/libpkcs11/kcfd + */ + +#include + +/* + * Project Private structures and types used for communication between kcfd + * and KCF over the door. + */ + +typedef enum ELFsign_status_e { + ELFSIGN_UNKNOWN, + ELFSIGN_SUCCESS, + ELFSIGN_FAILED, + ELFSIGN_NOTSIGNED, + ELFSIGN_INVALID_CERTPATH, + ELFSIGN_INVALID_ELFOBJ, + ELFSIGN_RESTRICTED +} ELFsign_status_t; + +#define KCF_KCFD_VERSION1 1 +#define SIG_MAX_LENGTH 1024 + +#define ELF_SIGNATURE_SECTION ".SUNW_signature" + +typedef struct kcf_door_arg_s { + short da_version; + boolean_t da_iskernel; + + union { + char filename[MAXPATHLEN]; /* For request */ + + struct kcf_door_result_s { /* For response */ + ELFsign_status_t status; + uint32_t siglen; + uchar_t signature[1]; + } result; + } da_u; +} kcf_door_arg_t; + +typedef uint32_t filesig_vers_t; + +/* + * File Signature Structure + * Applicable to ELF and other file formats + */ +struct filesignatures { + uint32_t filesig_cnt; /* count of signatures */ + uint32_t filesig_pad; /* unused */ + union { + char filesig_data[1]; + struct filesig { /* one of these for each signature */ + uint32_t filesig_size; + filesig_vers_t filesig_version; + union { + struct filesig_version1 { + uint32_t filesig_v1_dnsize; + uint32_t filesig_v1_sigsize; + uint32_t filesig_v1_oidsize; + char filesig_v1_data[1]; + } filesig_v1; + struct filesig_version3 { + uint64_t filesig_v3_time; + uint32_t filesig_v3_dnsize; + uint32_t filesig_v3_sigsize; + uint32_t filesig_v3_oidsize; + char filesig_v3_data[1]; + } filesig_v3; + } _u2; + } filesig_sig; + uint64_t filesig_align; + } _u1; +}; +#define filesig_sig _u1.filesig_sig + +#define filesig_v1_dnsize _u2.filesig_v1.filesig_v1_dnsize +#define filesig_v1_sigsize _u2.filesig_v1.filesig_v1_sigsize +#define filesig_v1_oidsize _u2.filesig_v1.filesig_v1_oidsize +#define filesig_v1_data _u2.filesig_v1.filesig_v1_data + +#define filesig_v3_time _u2.filesig_v3.filesig_v3_time +#define filesig_v3_dnsize _u2.filesig_v3.filesig_v3_dnsize +#define filesig_v3_sigsize _u2.filesig_v3.filesig_v3_sigsize +#define filesig_v3_oidsize _u2.filesig_v3.filesig_v3_oidsize +#define filesig_v3_data _u2.filesig_v3.filesig_v3_data + +#define filesig_ALIGN(s) (((s) + sizeof (uint64_t) - 1) & \ + (-sizeof (uint64_t))) +#define filesig_next(ptr) (struct filesig *)((void *)((char *)(ptr) + \ + filesig_ALIGN((ptr)->filesig_size))) + +#define FILESIG_UNKNOWN 0 /* unrecognized version */ +#define FILESIG_VERSION1 1 /* version1, all but sig section */ +#define FILESIG_VERSION2 2 /* version1 format, SHF_ALLOC only */ +#define FILESIG_VERSION3 3 /* version3, all but sig section */ +#define FILESIG_VERSION4 4 /* version3 format, SHF_ALLOC only */ + +#define _PATH_KCFD_DOOR "/etc/svc/volatile/kcfd_door" + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_ELFSIGN_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/impl.h @@ -0,0 +1,1363 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_IMPL_H +#define _SYS_CRYPTO_IMPL_H + +/* + * Kernel Cryptographic Framework private implementation definitions. + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define KCF_MODULE "kcf" + +/* + * Prefixes convention: structures internal to the kernel cryptographic + * framework start with 'kcf_'. Exposed structure start with 'crypto_'. + */ + +/* Provider stats. Not protected. */ +typedef struct kcf_prov_stats { + kstat_named_t ps_ops_total; + kstat_named_t ps_ops_passed; + kstat_named_t ps_ops_failed; + kstat_named_t ps_ops_busy_rval; +} kcf_prov_stats_t; + +/* Various kcf stats. Not protected. */ +typedef struct kcf_stats { + kstat_named_t ks_thrs_in_pool; + kstat_named_t ks_idle_thrs; + kstat_named_t ks_minthrs; + kstat_named_t ks_maxthrs; + kstat_named_t ks_swq_njobs; + kstat_named_t ks_swq_maxjobs; + kstat_named_t ks_taskq_threads; + kstat_named_t ks_taskq_minalloc; + kstat_named_t ks_taskq_maxalloc; +} kcf_stats_t; + +/* + * Keep all the information needed by the scheduler from + * this provider. + */ +typedef struct kcf_sched_info { + /* The number of operations dispatched. */ + uint64_t ks_ndispatches; + + /* The number of operations that failed. */ + uint64_t ks_nfails; + + /* The number of operations that returned CRYPTO_BUSY. */ + uint64_t ks_nbusy_rval; + + /* taskq used to dispatch crypto requests */ + taskq_t *ks_taskq; +} kcf_sched_info_t; + +/* + * pd_irefcnt approximates the number of inflight requests to the + * provider. Though we increment this counter during registration for + * other purposes, that base value is mostly same across all providers. + * So, it is a good measure of the load on a provider when it is not + * in a busy state. Once a provider notifies it is busy, requests + * backup in the taskq. So, we use tq_nalloc in that case which gives + * the number of task entries in the task queue. Note that we do not + * acquire any locks here as it is not critical to get the exact number + * and the lock contention may be too costly for this code path. + */ +#define KCF_PROV_LOAD(pd) ((pd)->pd_state != KCF_PROV_BUSY ? \ + (pd)->pd_irefcnt : (pd)->pd_sched_info.ks_taskq->tq_nalloc) + +#define KCF_PROV_INCRSTATS(pd, error) { \ + (pd)->pd_sched_info.ks_ndispatches++; \ + if (error == CRYPTO_BUSY) \ + (pd)->pd_sched_info.ks_nbusy_rval++; \ + else if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED) \ + (pd)->pd_sched_info.ks_nfails++; \ +} + + +/* + * The following two macros should be + * #define KCF_OPS_CLASSSIZE (KCF_LAST_OPSCLASS - KCF_FIRST_OPSCLASS + 2) + * #define KCF_MAXMECHTAB KCF_MAXCIPHER + * + * However, doing that would involve reorganizing the header file a bit. + * When impl.h is broken up (bug# 4703218), this will be done. For now, + * we hardcode these values. + */ +#define KCF_OPS_CLASSSIZE 8 +#define KCF_MAXMECHTAB 32 + +/* + * Valid values for the state of a provider. The order of + * the elements is important. + * + * Routines which get a provider or the list of providers + * should pick only those that are either in KCF_PROV_READY state + * or in KCF_PROV_BUSY state. + */ +typedef enum { + KCF_PROV_ALLOCATED = 1, + KCF_PROV_UNVERIFIED, + KCF_PROV_VERIFICATION_FAILED, + /* + * state < KCF_PROV_READY means the provider can not + * be used at all. + */ + KCF_PROV_READY, + KCF_PROV_BUSY, + /* + * state > KCF_PROV_BUSY means the provider can not + * be used for new requests. + */ + KCF_PROV_FAILED, + /* + * Threads setting the following two states should do so only + * if the current state < KCF_PROV_DISABLED. + */ + KCF_PROV_DISABLED, + KCF_PROV_REMOVED, + KCF_PROV_FREED +} kcf_prov_state_t; + +#define KCF_IS_PROV_UNVERIFIED(pd) ((pd)->pd_state == KCF_PROV_UNVERIFIED) +#define KCF_IS_PROV_USABLE(pd) ((pd)->pd_state == KCF_PROV_READY || \ + (pd)->pd_state == KCF_PROV_BUSY) +#define KCF_IS_PROV_REMOVED(pd) ((pd)->pd_state >= KCF_PROV_REMOVED) + +/* Internal flags valid for pd_flags field */ +#define KCF_PROV_RESTRICTED 0x40000000 +#define KCF_LPROV_MEMBER 0x80000000 /* is member of a logical provider */ + +/* + * A provider descriptor structure. There is one such structure per + * provider. It is allocated and initialized at registration time and + * freed when the provider unregisters. + * + * pd_prov_type: Provider type, hardware or software + * pd_sid: Session ID of the provider used by kernel clients. + * This is valid only for session-oriented providers. + * pd_refcnt: Reference counter to this provider descriptor + * pd_irefcnt: References held by the framework internal structs + * pd_lock: lock protects pd_state and pd_provider_list + * pd_state: State value of the provider + * pd_provider_list: Used to cross-reference logical providers and their + * members. Not used for software providers. + * pd_resume_cv: cv to wait for state to change from KCF_PROV_BUSY + * pd_prov_handle: Provider handle specified by provider + * pd_ops_vector: The ops vector specified by Provider + * pd_mech_indx: Lookup table which maps a core framework mechanism + * number to an index in pd_mechanisms array + * pd_mechanisms: Array of mechanisms supported by the provider, specified + * by the provider during registration + * pd_sched_info: Scheduling information associated with the provider + * pd_mech_list_count: The number of entries in pi_mechanisms, specified + * by the provider during registration + * pd_name: Device name or module name + * pd_instance: Device instance + * pd_module_id: Module ID returned by modload + * pd_mctlp: Pointer to modctl structure for this provider + * pd_remove_cv: cv to wait on while the provider queue drains + * pd_description: Provider description string + * pd_flags bitwise OR of pi_flags from crypto_provider_info_t + * and other internal flags defined above. + * pd_hash_limit Maximum data size that hash mechanisms of this provider + * can support. + * pd_kcf_prov_handle: KCF-private handle assigned by KCF + * pd_prov_id: Identification # assigned by KCF to provider + * pd_kstat: kstat associated with the provider + * pd_ks_data: kstat data + */ +typedef struct kcf_provider_desc { + crypto_provider_type_t pd_prov_type; + crypto_session_id_t pd_sid; + uint_t pd_refcnt; + uint_t pd_irefcnt; + kmutex_t pd_lock; + kcf_prov_state_t pd_state; + struct kcf_provider_list *pd_provider_list; + kcondvar_t pd_resume_cv; + crypto_provider_handle_t pd_prov_handle; + crypto_ops_t *pd_ops_vector; + ushort_t pd_mech_indx[KCF_OPS_CLASSSIZE]\ + [KCF_MAXMECHTAB]; + crypto_mech_info_t *pd_mechanisms; + kcf_sched_info_t pd_sched_info; + uint_t pd_mech_list_count; + // char *pd_name; + // uint_t pd_instance; + // int pd_module_id; + // struct modctl *pd_mctlp; + kcondvar_t pd_remove_cv; + char *pd_description; + uint_t pd_flags; + uint_t pd_hash_limit; + crypto_kcf_provider_handle_t pd_kcf_prov_handle; + crypto_provider_id_t pd_prov_id; + kstat_t *pd_kstat; + kcf_prov_stats_t pd_ks_data; +} kcf_provider_desc_t; + +/* useful for making a list of providers */ +typedef struct kcf_provider_list { + struct kcf_provider_list *pl_next; + struct kcf_provider_desc *pl_provider; +} kcf_provider_list_t; + +/* atomic operations in linux implictly form a memory barrier */ +#define membar_exit() + +/* + * If a component has a reference to a kcf_provider_desc_t, + * it REFHOLD()s. A new provider descriptor which is referenced only + * by the providers table has a reference counter of one. + */ +#define KCF_PROV_REFHOLD(desc) { \ + atomic_add_32(&(desc)->pd_refcnt, 1); \ + ASSERT((desc)->pd_refcnt != 0); \ +} + +#define KCF_PROV_IREFHOLD(desc) { \ + atomic_add_32(&(desc)->pd_irefcnt, 1); \ + ASSERT((desc)->pd_irefcnt != 0); \ +} + +#define KCF_PROV_IREFRELE(desc) { \ + ASSERT((desc)->pd_irefcnt != 0); \ + membar_exit(); \ + if (atomic_add_32_nv(&(desc)->pd_irefcnt, -1) == 0) { \ + cv_broadcast(&(desc)->pd_remove_cv); \ + } \ +} + +#define KCF_PROV_REFHELD(desc) ((desc)->pd_refcnt >= 1) + +#define KCF_PROV_REFRELE(desc) { \ + ASSERT((desc)->pd_refcnt != 0); \ + membar_exit(); \ + if (atomic_add_32_nv(&(desc)->pd_refcnt, -1) == 0) { \ + kcf_provider_zero_refcnt((desc)); \ + } \ +} + + +/* list of crypto_mech_info_t valid as the second mech in a dual operation */ + +typedef struct crypto_mech_info_list { + struct crypto_mech_info_list *ml_next; + crypto_mech_type_t ml_kcf_mechid; /* KCF's id */ + crypto_mech_info_t ml_mech_info; +} crypto_mech_info_list_t; + +/* + * An element in a mechanism provider descriptors chain. + * The kcf_prov_mech_desc_t is duplicated in every chain the provider belongs + * to. This is a small tradeoff memory vs mutex spinning time to access the + * common provider field. + */ + +typedef struct kcf_prov_mech_desc { + struct kcf_mech_entry *pm_me; /* Back to the head */ + struct kcf_prov_mech_desc *pm_next; /* Next in the chain */ + crypto_mech_info_t pm_mech_info; /* Provider mech info */ + crypto_mech_info_list_t *pm_mi_list; /* list for duals */ + kcf_provider_desc_t *pm_prov_desc; /* Common desc. */ +} kcf_prov_mech_desc_t; + +/* and the notation shortcuts ... */ +#define pm_provider_type pm_prov_desc.pd_provider_type +#define pm_provider_handle pm_prov_desc.pd_provider_handle +#define pm_ops_vector pm_prov_desc.pd_ops_vector + +/* + * A mechanism entry in an xxx_mech_tab[]. me_pad was deemed + * to be unnecessary and removed. + */ +typedef struct kcf_mech_entry { + crypto_mech_name_t me_name; /* mechanism name */ + crypto_mech_type_t me_mechid; /* Internal id for mechanism */ + kmutex_t me_mutex; /* access protection */ + kcf_prov_mech_desc_t *me_hw_prov_chain; /* list of HW providers */ + kcf_prov_mech_desc_t *me_sw_prov; /* SW provider */ + /* + * Number of HW providers in the chain. There is only one + * SW provider. So, we need only a count of HW providers. + */ + int me_num_hwprov; + /* + * When a SW provider is present, this is the generation number that + * ensures no objects from old SW providers are used in the new one + */ + uint32_t me_gen_swprov; + /* + * threshold for using hardware providers for this mech + */ + size_t me_threshold; +} kcf_mech_entry_t; + +/* + * A policy descriptor structure. It is allocated and initialized + * when administrative ioctls load disabled mechanisms. + * + * pd_prov_type: Provider type, hardware or software + * pd_name: Device name or module name. + * pd_instance: Device instance. + * pd_refcnt: Reference counter for this policy descriptor + * pd_mutex: Protects array and count of disabled mechanisms. + * pd_disabled_count: Count of disabled mechanisms. + * pd_disabled_mechs: Array of disabled mechanisms. + */ +typedef struct kcf_policy_desc { + crypto_provider_type_t pd_prov_type; + char *pd_name; + uint_t pd_instance; + uint_t pd_refcnt; + kmutex_t pd_mutex; + uint_t pd_disabled_count; + crypto_mech_name_t *pd_disabled_mechs; +} kcf_policy_desc_t; + +/* + * If a component has a reference to a kcf_policy_desc_t, + * it REFHOLD()s. A new policy descriptor which is referenced only + * by the policy table has a reference count of one. + */ +#define KCF_POLICY_REFHOLD(desc) { \ + atomic_add_32(&(desc)->pd_refcnt, 1); \ + ASSERT((desc)->pd_refcnt != 0); \ +} + +/* + * Releases a reference to a policy descriptor. When the last + * reference is released, the descriptor is freed. + */ +#define KCF_POLICY_REFRELE(desc) { \ + ASSERT((desc)->pd_refcnt != 0); \ + membar_exit(); \ + if (atomic_add_32_nv(&(desc)->pd_refcnt, -1) == 0) \ + kcf_policy_free_desc(desc); \ +} + +/* + * This entry stores the name of a software module and its + * mechanisms. The mechanisms are 'hints' that are used to + * trigger loading of the module. + */ +typedef struct kcf_soft_conf_entry { + struct kcf_soft_conf_entry *ce_next; + char *ce_name; + crypto_mech_name_t *ce_mechs; + uint_t ce_count; +} kcf_soft_conf_entry_t; + +extern kmutex_t soft_config_mutex; +extern kcf_soft_conf_entry_t *soft_config_list; + +/* + * Global tables. The sizes are from the predefined PKCS#11 v2.20 mechanisms, + * with a margin of few extra empty entry points + */ + +#define KCF_MAXDIGEST 16 /* Digests */ +#define KCF_MAXCIPHER 64 /* Ciphers */ +#define KCF_MAXMAC 40 /* Message authentication codes */ +#define KCF_MAXSIGN 24 /* Sign/Verify */ +#define KCF_MAXKEYOPS 116 /* Key generation and derivation */ +#define KCF_MAXMISC 16 /* Others ... */ + +#define KCF_MAXMECHS KCF_MAXDIGEST + KCF_MAXCIPHER + KCF_MAXMAC + \ + KCF_MAXSIGN + KCF_MAXKEYOPS + \ + KCF_MAXMISC + +extern kcf_mech_entry_t kcf_digest_mechs_tab[]; +extern kcf_mech_entry_t kcf_cipher_mechs_tab[]; +extern kcf_mech_entry_t kcf_mac_mechs_tab[]; +extern kcf_mech_entry_t kcf_sign_mechs_tab[]; +extern kcf_mech_entry_t kcf_keyops_mechs_tab[]; +extern kcf_mech_entry_t kcf_misc_mechs_tab[]; + +extern kmutex_t kcf_mech_tabs_lock; + +typedef enum { + KCF_DIGEST_CLASS = 1, + KCF_CIPHER_CLASS, + KCF_MAC_CLASS, + KCF_SIGN_CLASS, + KCF_KEYOPS_CLASS, + KCF_MISC_CLASS +} kcf_ops_class_t; + +#define KCF_FIRST_OPSCLASS KCF_DIGEST_CLASS +#define KCF_LAST_OPSCLASS KCF_MISC_CLASS + +/* The table of all the kcf_xxx_mech_tab[]s, indexed by kcf_ops_class */ + +typedef struct kcf_mech_entry_tab { + int met_size; /* Size of the met_tab[] */ + kcf_mech_entry_t *met_tab; /* the table */ +} kcf_mech_entry_tab_t; + +extern kcf_mech_entry_tab_t kcf_mech_tabs_tab[]; + +#define KCF_MECHID(class, index) \ + (((crypto_mech_type_t)(class) << 32) | (crypto_mech_type_t)(index)) + +#define KCF_MECH2CLASS(mech_type) ((kcf_ops_class_t)((mech_type) >> 32)) + +#define KCF_MECH2INDEX(mech_type) ((int)(mech_type)) + +#define KCF_TO_PROV_MECH_INDX(pd, mech_type) \ + ((pd)->pd_mech_indx[KCF_MECH2CLASS(mech_type)] \ + [KCF_MECH2INDEX(mech_type)]) + +#define KCF_TO_PROV_MECHINFO(pd, mech_type) \ + ((pd)->pd_mechanisms[KCF_TO_PROV_MECH_INDX(pd, mech_type)]) + +#define KCF_TO_PROV_MECHNUM(pd, mech_type) \ + (KCF_TO_PROV_MECHINFO(pd, mech_type).cm_mech_number) + +#define KCF_CAN_SHARE_OPSTATE(pd, mech_type) \ + ((KCF_TO_PROV_MECHINFO(pd, mech_type).cm_mech_flags) & \ + CRYPTO_CAN_SHARE_OPSTATE) + +/* ps_refcnt is protected by cm_lock in the crypto_minor structure */ +typedef struct crypto_provider_session { + struct crypto_provider_session *ps_next; + crypto_session_id_t ps_session; + kcf_provider_desc_t *ps_provider; + kcf_provider_desc_t *ps_real_provider; + uint_t ps_refcnt; +} crypto_provider_session_t; + +typedef struct crypto_session_data { + kmutex_t sd_lock; + kcondvar_t sd_cv; + uint32_t sd_flags; + int sd_pre_approved_amount; + crypto_ctx_t *sd_digest_ctx; + crypto_ctx_t *sd_encr_ctx; + crypto_ctx_t *sd_decr_ctx; + crypto_ctx_t *sd_sign_ctx; + crypto_ctx_t *sd_verify_ctx; + crypto_ctx_t *sd_sign_recover_ctx; + crypto_ctx_t *sd_verify_recover_ctx; + kcf_provider_desc_t *sd_provider; + void *sd_find_init_cookie; + crypto_provider_session_t *sd_provider_session; +} crypto_session_data_t; + +#define CRYPTO_SESSION_IN_USE 0x00000001 +#define CRYPTO_SESSION_IS_BUSY 0x00000002 +#define CRYPTO_SESSION_IS_CLOSED 0x00000004 + +#define KCF_MAX_PIN_LEN 1024 + +/* + * Per-minor info. + * + * cm_lock protects everything in this structure except for cm_refcnt. + */ +typedef struct crypto_minor { + uint_t cm_refcnt; + kmutex_t cm_lock; + kcondvar_t cm_cv; + crypto_session_data_t **cm_session_table; + uint_t cm_session_table_count; + kcf_provider_desc_t **cm_provider_array; + uint_t cm_provider_count; + crypto_provider_session_t *cm_provider_session; +} crypto_minor_t; + +/* + * Return codes for internal functions + */ +#define KCF_SUCCESS 0x0 /* Successful call */ +#define KCF_INVALID_MECH_NUMBER 0x1 /* invalid mechanism number */ +#define KCF_INVALID_MECH_NAME 0x2 /* invalid mechanism name */ +#define KCF_INVALID_MECH_CLASS 0x3 /* invalid mechanism class */ +#define KCF_MECH_TAB_FULL 0x4 /* Need more room in the mech tabs. */ +#define KCF_INVALID_INDX ((ushort_t)-1) + +/* + * kCF internal mechanism and function group for tracking RNG providers. + */ +#define SUN_RANDOM "random" +#define CRYPTO_FG_RANDOM 0x80000000 /* generate_random() */ + +/* + * Wrappers for ops vectors. In the wrapper definitions below, the pd + * argument always corresponds to a pointer to a provider descriptor + * of type kcf_prov_desc_t. + */ + +#define KCF_PROV_CONTROL_OPS(pd) ((pd)->pd_ops_vector->co_control_ops) +#define KCF_PROV_CTX_OPS(pd) ((pd)->pd_ops_vector->co_ctx_ops) +#define KCF_PROV_DIGEST_OPS(pd) ((pd)->pd_ops_vector->co_digest_ops) +#define KCF_PROV_CIPHER_OPS(pd) ((pd)->pd_ops_vector->co_cipher_ops) +#define KCF_PROV_MAC_OPS(pd) ((pd)->pd_ops_vector->co_mac_ops) +#define KCF_PROV_SIGN_OPS(pd) ((pd)->pd_ops_vector->co_sign_ops) +#define KCF_PROV_VERIFY_OPS(pd) ((pd)->pd_ops_vector->co_verify_ops) +#define KCF_PROV_DUAL_OPS(pd) ((pd)->pd_ops_vector->co_dual_ops) +#define KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) \ + ((pd)->pd_ops_vector->co_dual_cipher_mac_ops) +#define KCF_PROV_RANDOM_OPS(pd) ((pd)->pd_ops_vector->co_random_ops) +#define KCF_PROV_SESSION_OPS(pd) ((pd)->pd_ops_vector->co_session_ops) +#define KCF_PROV_OBJECT_OPS(pd) ((pd)->pd_ops_vector->co_object_ops) +#define KCF_PROV_KEY_OPS(pd) ((pd)->pd_ops_vector->co_key_ops) +#define KCF_PROV_PROVIDER_OPS(pd) ((pd)->pd_ops_vector->co_provider_ops) +#define KCF_PROV_MECH_OPS(pd) ((pd)->pd_ops_vector->co_mech_ops) +#define KCF_PROV_NOSTORE_KEY_OPS(pd) \ + ((pd)->pd_ops_vector->co_nostore_key_ops) + +/* + * Wrappers for crypto_control_ops(9S) entry points. + */ + +#define KCF_PROV_STATUS(pd, status) ( \ + (KCF_PROV_CONTROL_OPS(pd) && \ + KCF_PROV_CONTROL_OPS(pd)->provider_status) ? \ + KCF_PROV_CONTROL_OPS(pd)->provider_status( \ + (pd)->pd_prov_handle, status) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_ctx_ops(9S) entry points. + */ + +#define KCF_PROV_CREATE_CTX_TEMPLATE(pd, mech, key, template, size, req) ( \ + (KCF_PROV_CTX_OPS(pd) && KCF_PROV_CTX_OPS(pd)->create_ctx_template) ? \ + KCF_PROV_CTX_OPS(pd)->create_ctx_template( \ + (pd)->pd_prov_handle, mech, key, template, size, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_FREE_CONTEXT(pd, ctx) ( \ + (KCF_PROV_CTX_OPS(pd) && KCF_PROV_CTX_OPS(pd)->free_context) ? \ + KCF_PROV_CTX_OPS(pd)->free_context(ctx) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_COPYIN_MECH(pd, umech, kmech, errorp, mode) ( \ + (KCF_PROV_MECH_OPS(pd) && KCF_PROV_MECH_OPS(pd)->copyin_mechanism) ? \ + KCF_PROV_MECH_OPS(pd)->copyin_mechanism( \ + (pd)->pd_prov_handle, umech, kmech, errorp, mode) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_COPYOUT_MECH(pd, kmech, umech, errorp, mode) ( \ + (KCF_PROV_MECH_OPS(pd) && KCF_PROV_MECH_OPS(pd)->copyout_mechanism) ? \ + KCF_PROV_MECH_OPS(pd)->copyout_mechanism( \ + (pd)->pd_prov_handle, kmech, umech, errorp, mode) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_FREE_MECH(pd, prov_mech) ( \ + (KCF_PROV_MECH_OPS(pd) && KCF_PROV_MECH_OPS(pd)->free_mechanism) ? \ + KCF_PROV_MECH_OPS(pd)->free_mechanism( \ + (pd)->pd_prov_handle, prov_mech) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_digest_ops(9S) entry points. + */ + +#define KCF_PROV_DIGEST_INIT(pd, ctx, mech, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest_init) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest_init(ctx, mech, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * The _ (underscore) in _digest is needed to avoid replacing the + * function digest(). + */ +#define KCF_PROV_DIGEST(pd, ctx, data, _digest, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest(ctx, data, _digest, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DIGEST_UPDATE(pd, ctx, data, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest_update) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest_update(ctx, data, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DIGEST_KEY(pd, ctx, key, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest_key) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest_key(ctx, key, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DIGEST_FINAL(pd, ctx, digest, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest_final) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest_final(ctx, digest, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DIGEST_ATOMIC(pd, session, mech, data, digest, req) ( \ + (KCF_PROV_DIGEST_OPS(pd) && KCF_PROV_DIGEST_OPS(pd)->digest_atomic) ? \ + KCF_PROV_DIGEST_OPS(pd)->digest_atomic( \ + (pd)->pd_prov_handle, session, mech, data, digest, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_cipher_ops(9S) entry points. + */ + +#define KCF_PROV_ENCRYPT_INIT(pd, ctx, mech, key, template, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->encrypt_init) ? \ + KCF_PROV_CIPHER_OPS(pd)->encrypt_init(ctx, mech, key, template, \ + req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT(pd, ctx, plaintext, ciphertext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->encrypt) ? \ + KCF_PROV_CIPHER_OPS(pd)->encrypt(ctx, plaintext, ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_UPDATE(pd, ctx, plaintext, ciphertext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->encrypt_update) ? \ + KCF_PROV_CIPHER_OPS(pd)->encrypt_update(ctx, plaintext, \ + ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_FINAL(pd, ctx, ciphertext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->encrypt_final) ? \ + KCF_PROV_CIPHER_OPS(pd)->encrypt_final(ctx, ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_ATOMIC(pd, session, mech, key, plaintext, ciphertext, \ + template, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->encrypt_atomic) ? \ + KCF_PROV_CIPHER_OPS(pd)->encrypt_atomic( \ + (pd)->pd_prov_handle, session, mech, key, plaintext, ciphertext, \ + template, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_INIT(pd, ctx, mech, key, template, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->decrypt_init) ? \ + KCF_PROV_CIPHER_OPS(pd)->decrypt_init(ctx, mech, key, template, \ + req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT(pd, ctx, ciphertext, plaintext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->decrypt) ? \ + KCF_PROV_CIPHER_OPS(pd)->decrypt(ctx, ciphertext, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_UPDATE(pd, ctx, ciphertext, plaintext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->decrypt_update) ? \ + KCF_PROV_CIPHER_OPS(pd)->decrypt_update(ctx, ciphertext, \ + plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_FINAL(pd, ctx, plaintext, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->decrypt_final) ? \ + KCF_PROV_CIPHER_OPS(pd)->decrypt_final(ctx, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_ATOMIC(pd, session, mech, key, ciphertext, plaintext, \ + template, req) ( \ + (KCF_PROV_CIPHER_OPS(pd) && KCF_PROV_CIPHER_OPS(pd)->decrypt_atomic) ? \ + KCF_PROV_CIPHER_OPS(pd)->decrypt_atomic( \ + (pd)->pd_prov_handle, session, mech, key, ciphertext, plaintext, \ + template, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_mac_ops(9S) entry points. + */ + +#define KCF_PROV_MAC_INIT(pd, ctx, mech, key, template, req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac_init) ? \ + KCF_PROV_MAC_OPS(pd)->mac_init(ctx, mech, key, template, req) \ + : CRYPTO_NOT_SUPPORTED) + +/* + * The _ (underscore) in _mac is needed to avoid replacing the + * function mac(). + */ +#define KCF_PROV_MAC(pd, ctx, data, _mac, req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac) ? \ + KCF_PROV_MAC_OPS(pd)->mac(ctx, data, _mac, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_UPDATE(pd, ctx, data, req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac_update) ? \ + KCF_PROV_MAC_OPS(pd)->mac_update(ctx, data, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_FINAL(pd, ctx, mac, req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac_final) ? \ + KCF_PROV_MAC_OPS(pd)->mac_final(ctx, mac, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_ATOMIC(pd, session, mech, key, data, mac, template, \ + req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac_atomic) ? \ + KCF_PROV_MAC_OPS(pd)->mac_atomic( \ + (pd)->pd_prov_handle, session, mech, key, data, mac, template, \ + req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_VERIFY_ATOMIC(pd, session, mech, key, data, mac, \ + template, req) ( \ + (KCF_PROV_MAC_OPS(pd) && KCF_PROV_MAC_OPS(pd)->mac_verify_atomic) ? \ + KCF_PROV_MAC_OPS(pd)->mac_verify_atomic( \ + (pd)->pd_prov_handle, session, mech, key, data, mac, template, \ + req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_sign_ops(9S) entry points. + */ + +#define KCF_PROV_SIGN_INIT(pd, ctx, mech, key, template, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_init) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_init( \ + ctx, mech, key, template, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN(pd, ctx, data, sig, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign) ? \ + KCF_PROV_SIGN_OPS(pd)->sign(ctx, data, sig, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_UPDATE(pd, ctx, data, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_update) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_update(ctx, data, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_FINAL(pd, ctx, sig, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_final) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_final(ctx, sig, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_ATOMIC(pd, session, mech, key, data, template, \ + sig, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_atomic) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_atomic( \ + (pd)->pd_prov_handle, session, mech, key, data, sig, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_RECOVER_INIT(pd, ctx, mech, key, template, \ + req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_recover_init) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_recover_init(ctx, mech, key, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_RECOVER(pd, ctx, data, sig, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && KCF_PROV_SIGN_OPS(pd)->sign_recover) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_recover(ctx, data, sig, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_RECOVER_ATOMIC(pd, session, mech, key, data, template, \ + sig, req) ( \ + (KCF_PROV_SIGN_OPS(pd) && \ + KCF_PROV_SIGN_OPS(pd)->sign_recover_atomic) ? \ + KCF_PROV_SIGN_OPS(pd)->sign_recover_atomic( \ + (pd)->pd_prov_handle, session, mech, key, data, sig, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_verify_ops(9S) entry points. + */ + +#define KCF_PROV_VERIFY_INIT(pd, ctx, mech, key, template, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->verify_init) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_init(ctx, mech, key, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_VERIFY(pd, ctx, data, sig, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->do_verify) ? \ + KCF_PROV_VERIFY_OPS(pd)->do_verify(ctx, data, sig, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_VERIFY_UPDATE(pd, ctx, data, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->verify_update) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_update(ctx, data, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_VERIFY_FINAL(pd, ctx, sig, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->verify_final) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_final(ctx, sig, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_VERIFY_ATOMIC(pd, session, mech, key, data, template, sig, \ + req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->verify_atomic) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_atomic( \ + (pd)->pd_prov_handle, session, mech, key, data, sig, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_VERIFY_RECOVER_INIT(pd, ctx, mech, key, template, \ + req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && \ + KCF_PROV_VERIFY_OPS(pd)->verify_recover_init) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_recover_init(ctx, mech, key, \ + template, req) : CRYPTO_NOT_SUPPORTED) + +/* verify_recover() CSPI routine has different argument order than verify() */ +#define KCF_PROV_VERIFY_RECOVER(pd, ctx, sig, data, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && KCF_PROV_VERIFY_OPS(pd)->verify_recover) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_recover(ctx, sig, data, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * verify_recover_atomic() CSPI routine has different argument order + * than verify_atomic(). + */ +#define KCF_PROV_VERIFY_RECOVER_ATOMIC(pd, session, mech, key, sig, \ + template, data, req) ( \ + (KCF_PROV_VERIFY_OPS(pd) && \ + KCF_PROV_VERIFY_OPS(pd)->verify_recover_atomic) ? \ + KCF_PROV_VERIFY_OPS(pd)->verify_recover_atomic( \ + (pd)->pd_prov_handle, session, mech, key, sig, data, template, \ + req) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_dual_ops(9S) entry points. + */ + +#define KCF_PROV_DIGEST_ENCRYPT_UPDATE(digest_ctx, encrypt_ctx, plaintext, \ + ciphertext, req) ( \ + (KCF_PROV_DUAL_OPS(pd) && \ + KCF_PROV_DUAL_OPS(pd)->digest_encrypt_update) ? \ + KCF_PROV_DUAL_OPS(pd)->digest_encrypt_update( \ + digest_ctx, encrypt_ctx, plaintext, ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_DIGEST_UPDATE(decrypt_ctx, digest_ctx, ciphertext, \ + plaintext, req) ( \ + (KCF_PROV_DUAL_OPS(pd) && \ + KCF_PROV_DUAL_OPS(pd)->decrypt_digest_update) ? \ + KCF_PROV_DUAL_OPS(pd)->decrypt_digest_update( \ + decrypt_ctx, digest_ctx, ciphertext, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SIGN_ENCRYPT_UPDATE(sign_ctx, encrypt_ctx, plaintext, \ + ciphertext, req) ( \ + (KCF_PROV_DUAL_OPS(pd) && \ + KCF_PROV_DUAL_OPS(pd)->sign_encrypt_update) ? \ + KCF_PROV_DUAL_OPS(pd)->sign_encrypt_update( \ + sign_ctx, encrypt_ctx, plaintext, ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_DECRYPT_VERIFY_UPDATE(decrypt_ctx, verify_ctx, ciphertext, \ + plaintext, req) ( \ + (KCF_PROV_DUAL_OPS(pd) && \ + KCF_PROV_DUAL_OPS(pd)->decrypt_verify_update) ? \ + KCF_PROV_DUAL_OPS(pd)->decrypt_verify_update( \ + decrypt_ctx, verify_ctx, ciphertext, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_dual_cipher_mac_ops(9S) entry points. + */ + +#define KCF_PROV_ENCRYPT_MAC_INIT(pd, ctx, encr_mech, encr_key, mac_mech, \ + mac_key, encr_ctx_template, mac_ctx_template, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_init) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_init( \ + ctx, encr_mech, encr_key, mac_mech, mac_key, encr_ctx_template, \ + mac_ctx_template, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_MAC(pd, ctx, plaintext, ciphertext, mac, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac( \ + ctx, plaintext, ciphertext, mac, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_MAC_UPDATE(pd, ctx, plaintext, ciphertext, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_update) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_update( \ + ctx, plaintext, ciphertext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_MAC_FINAL(pd, ctx, ciphertext, mac, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_final) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_final( \ + ctx, ciphertext, mac, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_ENCRYPT_MAC_ATOMIC(pd, session, encr_mech, encr_key, \ + mac_mech, mac_key, plaintext, ciphertext, mac, \ + encr_ctx_template, mac_ctx_template, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_atomic) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->encrypt_mac_atomic( \ + (pd)->pd_prov_handle, session, encr_mech, encr_key, \ + mac_mech, mac_key, plaintext, ciphertext, mac, \ + encr_ctx_template, mac_ctx_template, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_DECRYPT_INIT(pd, ctx, mac_mech, mac_key, decr_mech, \ + decr_key, mac_ctx_template, decr_ctx_template, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_init) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_init( \ + ctx, mac_mech, mac_key, decr_mech, decr_key, mac_ctx_template, \ + decr_ctx_template, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_DECRYPT(pd, ctx, ciphertext, mac, plaintext, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt( \ + ctx, ciphertext, mac, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_DECRYPT_UPDATE(pd, ctx, ciphertext, plaintext, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_update) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_update( \ + ctx, ciphertext, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_DECRYPT_FINAL(pd, ctx, mac, plaintext, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_final) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_final( \ + ctx, mac, plaintext, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_DECRYPT_ATOMIC(pd, session, mac_mech, mac_key, \ + decr_mech, decr_key, ciphertext, mac, plaintext, \ + mac_ctx_template, decr_ctx_template, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_atomic) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_decrypt_atomic( \ + (pd)->pd_prov_handle, session, mac_mech, mac_key, \ + decr_mech, decr_key, ciphertext, mac, plaintext, \ + mac_ctx_template, decr_ctx_template, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_MAC_VERIFY_DECRYPT_ATOMIC(pd, session, mac_mech, mac_key, \ + decr_mech, decr_key, ciphertext, mac, plaintext, \ + mac_ctx_template, decr_ctx_template, req) ( \ + (KCF_PROV_DUAL_CIPHER_MAC_OPS(pd) && \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_verify_decrypt_atomic \ + != NULL) ? \ + KCF_PROV_DUAL_CIPHER_MAC_OPS(pd)->mac_verify_decrypt_atomic( \ + (pd)->pd_prov_handle, session, mac_mech, mac_key, \ + decr_mech, decr_key, ciphertext, mac, plaintext, \ + mac_ctx_template, decr_ctx_template, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_random_number_ops(9S) entry points. + */ + +#define KCF_PROV_SEED_RANDOM(pd, session, buf, len, est, flags, req) ( \ + (KCF_PROV_RANDOM_OPS(pd) && KCF_PROV_RANDOM_OPS(pd)->seed_random) ? \ + KCF_PROV_RANDOM_OPS(pd)->seed_random((pd)->pd_prov_handle, \ + session, buf, len, est, flags, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_GENERATE_RANDOM(pd, session, buf, len, req) ( \ + (KCF_PROV_RANDOM_OPS(pd) && \ + KCF_PROV_RANDOM_OPS(pd)->generate_random) ? \ + KCF_PROV_RANDOM_OPS(pd)->generate_random((pd)->pd_prov_handle, \ + session, buf, len, req) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_session_ops(9S) entry points. + * + * ops_pd is the provider descriptor that supplies the ops_vector. + * pd is the descriptor that supplies the provider handle. + * Only session open/close needs two handles. + */ + +#define KCF_PROV_SESSION_OPEN(ops_pd, session, req, pd) ( \ + (KCF_PROV_SESSION_OPS(ops_pd) && \ + KCF_PROV_SESSION_OPS(ops_pd)->session_open) ? \ + KCF_PROV_SESSION_OPS(ops_pd)->session_open((pd)->pd_prov_handle, \ + session, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SESSION_CLOSE(ops_pd, session, req, pd) ( \ + (KCF_PROV_SESSION_OPS(ops_pd) && \ + KCF_PROV_SESSION_OPS(ops_pd)->session_close) ? \ + KCF_PROV_SESSION_OPS(ops_pd)->session_close((pd)->pd_prov_handle, \ + session, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SESSION_LOGIN(pd, session, user_type, pin, len, req) ( \ + (KCF_PROV_SESSION_OPS(pd) && \ + KCF_PROV_SESSION_OPS(pd)->session_login) ? \ + KCF_PROV_SESSION_OPS(pd)->session_login((pd)->pd_prov_handle, \ + session, user_type, pin, len, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SESSION_LOGOUT(pd, session, req) ( \ + (KCF_PROV_SESSION_OPS(pd) && \ + KCF_PROV_SESSION_OPS(pd)->session_logout) ? \ + KCF_PROV_SESSION_OPS(pd)->session_logout((pd)->pd_prov_handle, \ + session, req) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_object_ops(9S) entry points. + */ + +#define KCF_PROV_OBJECT_CREATE(pd, session, template, count, object, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && KCF_PROV_OBJECT_OPS(pd)->object_create) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_create((pd)->pd_prov_handle, \ + session, template, count, object, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_COPY(pd, session, object, template, count, \ + new_object, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && KCF_PROV_OBJECT_OPS(pd)->object_copy) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_copy((pd)->pd_prov_handle, \ + session, object, template, count, new_object, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_DESTROY(pd, session, object, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && KCF_PROV_OBJECT_OPS(pd)->object_destroy) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_destroy((pd)->pd_prov_handle, \ + session, object, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_GET_SIZE(pd, session, object, size, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && \ + KCF_PROV_OBJECT_OPS(pd)->object_get_size) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_get_size((pd)->pd_prov_handle, \ + session, object, size, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_GET_ATTRIBUTE_VALUE(pd, session, object, template, \ + count, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && \ + KCF_PROV_OBJECT_OPS(pd)->object_get_attribute_value) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_get_attribute_value( \ + (pd)->pd_prov_handle, session, object, template, count, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_SET_ATTRIBUTE_VALUE(pd, session, object, template, \ + count, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && \ + KCF_PROV_OBJECT_OPS(pd)->object_set_attribute_value) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_set_attribute_value( \ + (pd)->pd_prov_handle, session, object, template, count, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_FIND_INIT(pd, session, template, count, ppriv, \ + req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && \ + KCF_PROV_OBJECT_OPS(pd)->object_find_init) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_find_init((pd)->pd_prov_handle, \ + session, template, count, ppriv, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_FIND(pd, ppriv, objects, max_objects, object_count, \ + req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && KCF_PROV_OBJECT_OPS(pd)->object_find) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_find( \ + (pd)->pd_prov_handle, ppriv, objects, max_objects, object_count, \ + req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_OBJECT_FIND_FINAL(pd, ppriv, req) ( \ + (KCF_PROV_OBJECT_OPS(pd) && \ + KCF_PROV_OBJECT_OPS(pd)->object_find_final) ? \ + KCF_PROV_OBJECT_OPS(pd)->object_find_final( \ + (pd)->pd_prov_handle, ppriv, req) : CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_key_ops(9S) entry points. + */ + +#define KCF_PROV_KEY_GENERATE(pd, session, mech, template, count, object, \ + req) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_generate) ? \ + KCF_PROV_KEY_OPS(pd)->key_generate((pd)->pd_prov_handle, \ + session, mech, template, count, object, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_KEY_GENERATE_PAIR(pd, session, mech, pub_template, \ + pub_count, priv_template, priv_count, pub_key, priv_key, req) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_generate_pair) ? \ + KCF_PROV_KEY_OPS(pd)->key_generate_pair((pd)->pd_prov_handle, \ + session, mech, pub_template, pub_count, priv_template, \ + priv_count, pub_key, priv_key, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_KEY_WRAP(pd, session, mech, wrapping_key, key, wrapped_key, \ + wrapped_key_len, req) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_wrap) ? \ + KCF_PROV_KEY_OPS(pd)->key_wrap((pd)->pd_prov_handle, \ + session, mech, wrapping_key, key, wrapped_key, wrapped_key_len, \ + req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_KEY_UNWRAP(pd, session, mech, unwrapping_key, wrapped_key, \ + wrapped_key_len, template, count, key, req) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_unwrap) ? \ + KCF_PROV_KEY_OPS(pd)->key_unwrap((pd)->pd_prov_handle, \ + session, mech, unwrapping_key, wrapped_key, wrapped_key_len, \ + template, count, key, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_KEY_DERIVE(pd, session, mech, base_key, template, count, \ + key, req) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_derive) ? \ + KCF_PROV_KEY_OPS(pd)->key_derive((pd)->pd_prov_handle, \ + session, mech, base_key, template, count, key, req) : \ + CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_KEY_CHECK(pd, mech, key) ( \ + (KCF_PROV_KEY_OPS(pd) && KCF_PROV_KEY_OPS(pd)->key_check) ? \ + KCF_PROV_KEY_OPS(pd)->key_check((pd)->pd_prov_handle, mech, key) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_provider_management_ops(9S) entry points. + * + * ops_pd is the provider descriptor that supplies the ops_vector. + * pd is the descriptor that supplies the provider handle. + * Only ext_info needs two handles. + */ + +#define KCF_PROV_EXT_INFO(ops_pd, provext_info, req, pd) ( \ + (KCF_PROV_PROVIDER_OPS(ops_pd) && \ + KCF_PROV_PROVIDER_OPS(ops_pd)->ext_info) ? \ + KCF_PROV_PROVIDER_OPS(ops_pd)->ext_info((pd)->pd_prov_handle, \ + provext_info, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_INIT_TOKEN(pd, pin, pin_len, label, req) ( \ + (KCF_PROV_PROVIDER_OPS(pd) && KCF_PROV_PROVIDER_OPS(pd)->init_token) ? \ + KCF_PROV_PROVIDER_OPS(pd)->init_token((pd)->pd_prov_handle, \ + pin, pin_len, label, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_INIT_PIN(pd, session, pin, pin_len, req) ( \ + (KCF_PROV_PROVIDER_OPS(pd) && KCF_PROV_PROVIDER_OPS(pd)->init_pin) ? \ + KCF_PROV_PROVIDER_OPS(pd)->init_pin((pd)->pd_prov_handle, \ + session, pin, pin_len, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_SET_PIN(pd, session, old_pin, old_len, new_pin, new_len, \ + req) ( \ + (KCF_PROV_PROVIDER_OPS(pd) && KCF_PROV_PROVIDER_OPS(pd)->set_pin) ? \ + KCF_PROV_PROVIDER_OPS(pd)->set_pin((pd)->pd_prov_handle, \ + session, old_pin, old_len, new_pin, new_len, req) : \ + CRYPTO_NOT_SUPPORTED) + +/* + * Wrappers for crypto_nostore_key_ops(9S) entry points. + */ + +#define KCF_PROV_NOSTORE_KEY_GENERATE(pd, session, mech, template, count, \ + out_template, out_count, req) ( \ + (KCF_PROV_NOSTORE_KEY_OPS(pd) && \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_generate) ? \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_generate( \ + (pd)->pd_prov_handle, session, mech, template, count, \ + out_template, out_count, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_NOSTORE_KEY_GENERATE_PAIR(pd, session, mech, pub_template, \ + pub_count, priv_template, priv_count, out_pub_template, \ + out_pub_count, out_priv_template, out_priv_count, req) ( \ + (KCF_PROV_NOSTORE_KEY_OPS(pd) && \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_generate_pair) ? \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_generate_pair( \ + (pd)->pd_prov_handle, session, mech, pub_template, pub_count, \ + priv_template, priv_count, out_pub_template, out_pub_count, \ + out_priv_template, out_priv_count, req) : CRYPTO_NOT_SUPPORTED) + +#define KCF_PROV_NOSTORE_KEY_DERIVE(pd, session, mech, base_key, template, \ + count, out_template, out_count, req) ( \ + (KCF_PROV_NOSTORE_KEY_OPS(pd) && \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_derive) ? \ + KCF_PROV_NOSTORE_KEY_OPS(pd)->nostore_key_derive( \ + (pd)->pd_prov_handle, session, mech, base_key, template, count, \ + out_template, out_count, req) : CRYPTO_NOT_SUPPORTED) + +/* + * The following routines are exported by the kcf module (/kernel/misc/kcf) + * to the crypto and cryptoadmin modules. + */ + +/* Digest/mac/cipher entry points that take a provider descriptor and session */ +extern int crypto_digest_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +extern int crypto_mac_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +extern int crypto_encrypt_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +extern int crypto_decrypt_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + + +/* Other private digest/mac/cipher entry points not exported through k-API */ +extern int crypto_digest_key_prov(crypto_context_t, crypto_key_t *, + crypto_call_req_t *); + +/* Private sign entry points exported by KCF */ +extern int crypto_sign_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +extern int crypto_sign_recover_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +/* Private verify entry points exported by KCF */ +extern int crypto_verify_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +extern int crypto_verify_recover_single(crypto_context_t, crypto_data_t *, + crypto_data_t *, crypto_call_req_t *); + +/* Private dual operations entry points exported by KCF */ +extern int crypto_digest_encrypt_update(crypto_context_t, crypto_context_t, + crypto_data_t *, crypto_data_t *, crypto_call_req_t *); +extern int crypto_decrypt_digest_update(crypto_context_t, crypto_context_t, + crypto_data_t *, crypto_data_t *, crypto_call_req_t *); +extern int crypto_sign_encrypt_update(crypto_context_t, crypto_context_t, + crypto_data_t *, crypto_data_t *, crypto_call_req_t *); +extern int crypto_decrypt_verify_update(crypto_context_t, crypto_context_t, + crypto_data_t *, crypto_data_t *, crypto_call_req_t *); + +/* Random Number Generation */ +int crypto_seed_random(crypto_provider_handle_t provider, uchar_t *buf, + size_t len, crypto_call_req_t *req); +int crypto_generate_random(crypto_provider_handle_t provider, uchar_t *buf, + size_t len, crypto_call_req_t *req); + +/* Provider Management */ +int crypto_get_provider_info(crypto_provider_id_t id, + crypto_provider_info_t **info, crypto_call_req_t *req); +int crypto_get_provider_mechanisms(crypto_minor_t *, crypto_provider_id_t id, + uint_t *count, crypto_mech_name_t **list); +int crypto_init_token(crypto_provider_handle_t provider, char *pin, + size_t pin_len, char *label, crypto_call_req_t *); +int crypto_init_pin(crypto_provider_handle_t provider, char *pin, + size_t pin_len, crypto_call_req_t *req); +int crypto_set_pin(crypto_provider_handle_t provider, char *old_pin, + size_t old_len, char *new_pin, size_t new_len, crypto_call_req_t *req); +void crypto_free_provider_list(crypto_provider_entry_t *list, uint_t count); +void crypto_free_provider_info(crypto_provider_info_t *info); + +/* Administrative */ +int crypto_get_dev_list(uint_t *count, crypto_dev_list_entry_t **list); +int crypto_get_soft_list(uint_t *count, char **list, size_t *len); +int crypto_get_dev_info(char *name, uint_t instance, uint_t *count, + crypto_mech_name_t **list); +int crypto_get_soft_info(caddr_t name, uint_t *count, + crypto_mech_name_t **list); +int crypto_load_dev_disabled(char *name, uint_t instance, uint_t count, + crypto_mech_name_t *list); +int crypto_load_soft_disabled(caddr_t name, uint_t count, + crypto_mech_name_t *list); +int crypto_unload_soft_module(caddr_t path); +int crypto_load_soft_config(caddr_t name, uint_t count, + crypto_mech_name_t *list); +int crypto_load_door(uint_t did); +void crypto_free_mech_list(crypto_mech_name_t *list, uint_t count); +void crypto_free_dev_list(crypto_dev_list_entry_t *list, uint_t count); + +/* Miscellaneous */ +int crypto_get_mechanism_number(caddr_t name, crypto_mech_type_t *number); +int crypto_get_function_list(crypto_provider_id_t id, + crypto_function_list_t **list, int kmflag); +void crypto_free_function_list(crypto_function_list_t *list); +int crypto_build_permitted_mech_names(kcf_provider_desc_t *, + crypto_mech_name_t **, uint_t *, int); +extern void kcf_destroy_mech_tabs(void); +extern void kcf_init_mech_tabs(void); +extern int kcf_add_mech_provider(short, kcf_provider_desc_t *, + kcf_prov_mech_desc_t **); +extern void kcf_remove_mech_provider(char *, kcf_provider_desc_t *); +extern int kcf_get_mech_entry(crypto_mech_type_t, kcf_mech_entry_t **); +extern kcf_provider_desc_t *kcf_alloc_provider_desc(crypto_provider_info_t *); +extern void kcf_provider_zero_refcnt(kcf_provider_desc_t *); +extern void kcf_free_provider_desc(kcf_provider_desc_t *); +extern void kcf_soft_config_init(void); +extern int get_sw_provider_for_mech(crypto_mech_name_t, char **); +extern crypto_mech_type_t crypto_mech2id_common(char *, boolean_t); +extern void undo_register_provider(kcf_provider_desc_t *, boolean_t); +extern void redo_register_provider(kcf_provider_desc_t *); +extern void kcf_rnd_init(void); +extern boolean_t kcf_rngprov_check(void); +extern int kcf_rnd_get_pseudo_bytes(uint8_t *, size_t); +extern int kcf_rnd_get_bytes(uint8_t *, size_t, boolean_t, boolean_t); +extern int random_add_pseudo_entropy(uint8_t *, size_t, uint_t); +extern void kcf_rnd_schedule_timeout(boolean_t); +extern int crypto_uio_data(crypto_data_t *, uchar_t *, int, cmd_type_t, + void *, void (*update)(void)); +extern int crypto_mblk_data(crypto_data_t *, uchar_t *, int, cmd_type_t, + void *, void (*update)(void)); +extern int crypto_put_output_data(uchar_t *, crypto_data_t *, int); +extern int crypto_get_input_data(crypto_data_t *, uchar_t **, uchar_t *); +extern int crypto_copy_key_to_ctx(crypto_key_t *, crypto_key_t **, size_t *, + int kmflag); +extern int crypto_digest_data(crypto_data_t *, void *, uchar_t *, + void (*update)(void), void (*final)(void), uchar_t); +extern int crypto_update_iov(void *, crypto_data_t *, crypto_data_t *, + int (*cipher)(void *, caddr_t, size_t, crypto_data_t *), + void (*copy_block)(uint8_t *, uint64_t *)); +extern int crypto_update_uio(void *, crypto_data_t *, crypto_data_t *, + int (*cipher)(void *, caddr_t, size_t, crypto_data_t *), + void (*copy_block)(uint8_t *, uint64_t *)); +extern int crypto_update_mp(void *, crypto_data_t *, crypto_data_t *, + int (*cipher)(void *, caddr_t, size_t, crypto_data_t *), + void (*copy_block)(uint8_t *, uint64_t *)); +extern int crypto_get_key_attr(crypto_key_t *, crypto_attr_type_t, uchar_t **, + ssize_t *); + +/* Access to the provider's table */ +extern void kcf_prov_tab_destroy(void); +extern void kcf_prov_tab_init(void); +extern int kcf_prov_tab_add_provider(kcf_provider_desc_t *); +extern int kcf_prov_tab_rem_provider(crypto_provider_id_t); +extern kcf_provider_desc_t *kcf_prov_tab_lookup_by_name(char *); +extern kcf_provider_desc_t *kcf_prov_tab_lookup_by_dev(char *, uint_t); +extern int kcf_get_hw_prov_tab(uint_t *, kcf_provider_desc_t ***, int, + char *, uint_t, boolean_t); +extern int kcf_get_slot_list(uint_t *, kcf_provider_desc_t ***, boolean_t); +extern void kcf_free_provider_tab(uint_t, kcf_provider_desc_t **); +extern kcf_provider_desc_t *kcf_prov_tab_lookup(crypto_provider_id_t); +extern int kcf_get_sw_prov(crypto_mech_type_t, kcf_provider_desc_t **, + kcf_mech_entry_t **, boolean_t); + +/* Access to the policy table */ +extern boolean_t is_mech_disabled(kcf_provider_desc_t *, crypto_mech_name_t); +extern boolean_t is_mech_disabled_byname(crypto_provider_type_t, char *, + uint_t, crypto_mech_name_t); +extern void kcf_policy_tab_init(void); +extern void kcf_policy_free_desc(kcf_policy_desc_t *); +extern void kcf_policy_remove_by_name(char *, uint_t *, crypto_mech_name_t **); +extern void kcf_policy_remove_by_dev(char *, uint_t, uint_t *, + crypto_mech_name_t **); +extern kcf_policy_desc_t *kcf_policy_lookup_by_name(char *); +extern kcf_policy_desc_t *kcf_policy_lookup_by_dev(char *, uint_t); +extern int kcf_policy_load_soft_disabled(char *, uint_t, crypto_mech_name_t *, + uint_t *, crypto_mech_name_t **); +extern int kcf_policy_load_dev_disabled(char *, uint_t, uint_t, + crypto_mech_name_t *, uint_t *, crypto_mech_name_t **); +extern boolean_t in_soft_config_list(char *); + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/ioctl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/ioctl.h @@ -0,0 +1,1483 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_IOCTL_H +#define _SYS_CRYPTO_IOCTL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#define CRYPTO_MAX_ATTRIBUTE_COUNT 128 + +#define CRYPTO_IOFLAGS_RW_SESSION 0x00000001 + +#define CRYPTO(x) (('y' << 8) | (x)) + +#define MAX_NUM_THRESHOLD 7 + +/* the PKCS11 Mechanisms */ +#define CKM_RC4 0x00000111 +#define CKM_DES3_ECB 0x00000132 +#define CKM_DES3_CBC 0x00000133 +#define CKM_MD5 0x00000210 +#define CKM_SHA_1 0x00000220 +#define CKM_AES_ECB 0x00001081 +#define CKM_AES_CBC 0x00001082 + +/* + * General Purpose Ioctls + */ + +typedef struct fl_mechs_threshold { + int mech_type; + uint32_t mech_threshold; +} fl_mechs_threshold_t; + +typedef struct crypto_function_list { + boolean_t fl_digest_init; + boolean_t fl_digest; + boolean_t fl_digest_update; + boolean_t fl_digest_key; + boolean_t fl_digest_final; + + boolean_t fl_encrypt_init; + boolean_t fl_encrypt; + boolean_t fl_encrypt_update; + boolean_t fl_encrypt_final; + + boolean_t fl_decrypt_init; + boolean_t fl_decrypt; + boolean_t fl_decrypt_update; + boolean_t fl_decrypt_final; + + boolean_t fl_mac_init; + boolean_t fl_mac; + boolean_t fl_mac_update; + boolean_t fl_mac_final; + + boolean_t fl_sign_init; + boolean_t fl_sign; + boolean_t fl_sign_update; + boolean_t fl_sign_final; + boolean_t fl_sign_recover_init; + boolean_t fl_sign_recover; + + boolean_t fl_verify_init; + boolean_t fl_verify; + boolean_t fl_verify_update; + boolean_t fl_verify_final; + boolean_t fl_verify_recover_init; + boolean_t fl_verify_recover; + + boolean_t fl_digest_encrypt_update; + boolean_t fl_decrypt_digest_update; + boolean_t fl_sign_encrypt_update; + boolean_t fl_decrypt_verify_update; + + boolean_t fl_seed_random; + boolean_t fl_generate_random; + + boolean_t fl_session_open; + boolean_t fl_session_close; + boolean_t fl_session_login; + boolean_t fl_session_logout; + + boolean_t fl_object_create; + boolean_t fl_object_copy; + boolean_t fl_object_destroy; + boolean_t fl_object_get_size; + boolean_t fl_object_get_attribute_value; + boolean_t fl_object_set_attribute_value; + boolean_t fl_object_find_init; + boolean_t fl_object_find; + boolean_t fl_object_find_final; + + boolean_t fl_key_generate; + boolean_t fl_key_generate_pair; + boolean_t fl_key_wrap; + boolean_t fl_key_unwrap; + boolean_t fl_key_derive; + + boolean_t fl_init_token; + boolean_t fl_init_pin; + boolean_t fl_set_pin; + + boolean_t prov_is_limited; + uint32_t prov_hash_threshold; + uint32_t prov_hash_limit; + + int total_threshold_count; + fl_mechs_threshold_t fl_threshold[MAX_NUM_THRESHOLD]; +} crypto_function_list_t; + +typedef struct crypto_get_function_list { + uint_t fl_return_value; + crypto_provider_id_t fl_provider_id; + crypto_function_list_t fl_list; +} crypto_get_function_list_t; + +typedef struct crypto_get_mechanism_number { + uint_t pn_return_value; + caddr_t pn_mechanism_string; + size_t pn_mechanism_len; + crypto_mech_type_t pn_internal_number; +} crypto_get_mechanism_number_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_get_mechanism_number32 { + uint32_t pn_return_value; + caddr32_t pn_mechanism_string; + size32_t pn_mechanism_len; + crypto_mech_type_t pn_internal_number; +} crypto_get_mechanism_number32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_GET_FUNCTION_LIST CRYPTO(20) +#define CRYPTO_GET_MECHANISM_NUMBER CRYPTO(21) + +/* + * Session Ioctls + */ + +typedef uint32_t crypto_flags_t; + +typedef struct crypto_open_session { + uint_t os_return_value; + crypto_session_id_t os_session; + crypto_flags_t os_flags; + crypto_provider_id_t os_provider_id; +} crypto_open_session_t; + +typedef struct crypto_close_session { + uint_t cs_return_value; + crypto_session_id_t cs_session; +} crypto_close_session_t; + +typedef struct crypto_close_all_sessions { + uint_t as_return_value; + crypto_provider_id_t as_provider_id; +} crypto_close_all_sessions_t; + +#define CRYPTO_OPEN_SESSION CRYPTO(30) +#define CRYPTO_CLOSE_SESSION CRYPTO(31) +#define CRYPTO_CLOSE_ALL_SESSIONS CRYPTO(32) + +/* + * Login Ioctls + */ +typedef struct crypto_login { + uint_t co_return_value; + crypto_session_id_t co_session; + uint_t co_user_type; + uint_t co_pin_len; + caddr_t co_pin; +} crypto_login_t; + +typedef struct crypto_logout { + uint_t cl_return_value; + crypto_session_id_t cl_session; +} crypto_logout_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_login32 { + uint32_t co_return_value; + crypto_session_id_t co_session; + uint32_t co_user_type; + uint32_t co_pin_len; + caddr32_t co_pin; +} crypto_login32_t; + +typedef struct crypto_logout32 { + uint32_t cl_return_value; + crypto_session_id_t cl_session; +} crypto_logout32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_LOGIN CRYPTO(40) +#define CRYPTO_LOGOUT CRYPTO(41) + +/* flag for encrypt and decrypt operations */ +#define CRYPTO_INPLACE_OPERATION 0x00000001 + +/* + * Cryptographic Ioctls + */ +typedef struct crypto_encrypt { + uint_t ce_return_value; + crypto_session_id_t ce_session; + size_t ce_datalen; + caddr_t ce_databuf; + size_t ce_encrlen; + caddr_t ce_encrbuf; + uint_t ce_flags; +} crypto_encrypt_t; + +typedef struct crypto_encrypt_init { + uint_t ei_return_value; + crypto_session_id_t ei_session; + crypto_mechanism_t ei_mech; + crypto_key_t ei_key; +} crypto_encrypt_init_t; + +typedef struct crypto_encrypt_update { + uint_t eu_return_value; + crypto_session_id_t eu_session; + size_t eu_datalen; + caddr_t eu_databuf; + size_t eu_encrlen; + caddr_t eu_encrbuf; +} crypto_encrypt_update_t; + +typedef struct crypto_encrypt_final { + uint_t ef_return_value; + crypto_session_id_t ef_session; + size_t ef_encrlen; + caddr_t ef_encrbuf; +} crypto_encrypt_final_t; + +typedef struct crypto_decrypt { + uint_t cd_return_value; + crypto_session_id_t cd_session; + size_t cd_encrlen; + caddr_t cd_encrbuf; + size_t cd_datalen; + caddr_t cd_databuf; + uint_t cd_flags; +} crypto_decrypt_t; + +typedef struct crypto_decrypt_init { + uint_t di_return_value; + crypto_session_id_t di_session; + crypto_mechanism_t di_mech; + crypto_key_t di_key; +} crypto_decrypt_init_t; + +typedef struct crypto_decrypt_update { + uint_t du_return_value; + crypto_session_id_t du_session; + size_t du_encrlen; + caddr_t du_encrbuf; + size_t du_datalen; + caddr_t du_databuf; +} crypto_decrypt_update_t; + +typedef struct crypto_decrypt_final { + uint_t df_return_value; + crypto_session_id_t df_session; + size_t df_datalen; + caddr_t df_databuf; +} crypto_decrypt_final_t; + +typedef struct crypto_digest { + uint_t cd_return_value; + crypto_session_id_t cd_session; + size_t cd_datalen; + caddr_t cd_databuf; + size_t cd_digestlen; + caddr_t cd_digestbuf; +} crypto_digest_t; + +typedef struct crypto_digest_init { + uint_t di_return_value; + crypto_session_id_t di_session; + crypto_mechanism_t di_mech; +} crypto_digest_init_t; + +typedef struct crypto_digest_update { + uint_t du_return_value; + crypto_session_id_t du_session; + size_t du_datalen; + caddr_t du_databuf; +} crypto_digest_update_t; + +typedef struct crypto_digest_key { + uint_t dk_return_value; + crypto_session_id_t dk_session; + crypto_key_t dk_key; +} crypto_digest_key_t; + +typedef struct crypto_digest_final { + uint_t df_return_value; + crypto_session_id_t df_session; + size_t df_digestlen; + caddr_t df_digestbuf; +} crypto_digest_final_t; + +typedef struct crypto_mac { + uint_t cm_return_value; + crypto_session_id_t cm_session; + size_t cm_datalen; + caddr_t cm_databuf; + size_t cm_maclen; + caddr_t cm_macbuf; +} crypto_mac_t; + +typedef struct crypto_mac_init { + uint_t mi_return_value; + crypto_session_id_t mi_session; + crypto_mechanism_t mi_mech; + crypto_key_t mi_key; +} crypto_mac_init_t; + +typedef struct crypto_mac_update { + uint_t mu_return_value; + crypto_session_id_t mu_session; + size_t mu_datalen; + caddr_t mu_databuf; +} crypto_mac_update_t; + +typedef struct crypto_mac_final { + uint_t mf_return_value; + crypto_session_id_t mf_session; + size_t mf_maclen; + caddr_t mf_macbuf; +} crypto_mac_final_t; + +typedef struct crypto_sign { + uint_t cs_return_value; + crypto_session_id_t cs_session; + size_t cs_datalen; + caddr_t cs_databuf; + size_t cs_signlen; + caddr_t cs_signbuf; +} crypto_sign_t; + +typedef struct crypto_sign_init { + uint_t si_return_value; + crypto_session_id_t si_session; + crypto_mechanism_t si_mech; + crypto_key_t si_key; +} crypto_sign_init_t; + +typedef struct crypto_sign_update { + uint_t su_return_value; + crypto_session_id_t su_session; + size_t su_datalen; + caddr_t su_databuf; +} crypto_sign_update_t; + +typedef struct crypto_sign_final { + uint_t sf_return_value; + crypto_session_id_t sf_session; + size_t sf_signlen; + caddr_t sf_signbuf; +} crypto_sign_final_t; + +typedef struct crypto_sign_recover_init { + uint_t ri_return_value; + crypto_session_id_t ri_session; + crypto_mechanism_t ri_mech; + crypto_key_t ri_key; +} crypto_sign_recover_init_t; + +typedef struct crypto_sign_recover { + uint_t sr_return_value; + crypto_session_id_t sr_session; + size_t sr_datalen; + caddr_t sr_databuf; + size_t sr_signlen; + caddr_t sr_signbuf; +} crypto_sign_recover_t; + +typedef struct crypto_verify { + uint_t cv_return_value; + crypto_session_id_t cv_session; + size_t cv_datalen; + caddr_t cv_databuf; + size_t cv_signlen; + caddr_t cv_signbuf; +} crypto_verify_t; + +typedef struct crypto_verify_init { + uint_t vi_return_value; + crypto_session_id_t vi_session; + crypto_mechanism_t vi_mech; + crypto_key_t vi_key; +} crypto_verify_init_t; + +typedef struct crypto_verify_update { + uint_t vu_return_value; + crypto_session_id_t vu_session; + size_t vu_datalen; + caddr_t vu_databuf; +} crypto_verify_update_t; + +typedef struct crypto_verify_final { + uint_t vf_return_value; + crypto_session_id_t vf_session; + size_t vf_signlen; + caddr_t vf_signbuf; +} crypto_verify_final_t; + +typedef struct crypto_verify_recover_init { + uint_t ri_return_value; + crypto_session_id_t ri_session; + crypto_mechanism_t ri_mech; + crypto_key_t ri_key; +} crypto_verify_recover_init_t; + +typedef struct crypto_verify_recover { + uint_t vr_return_value; + crypto_session_id_t vr_session; + size_t vr_signlen; + caddr_t vr_signbuf; + size_t vr_datalen; + caddr_t vr_databuf; +} crypto_verify_recover_t; + +typedef struct crypto_digest_encrypt_update { + uint_t eu_return_value; + crypto_session_id_t eu_session; + size_t eu_datalen; + caddr_t eu_databuf; + size_t eu_encrlen; + caddr_t eu_encrbuf; +} crypto_digest_encrypt_update_t; + +typedef struct crypto_decrypt_digest_update { + uint_t du_return_value; + crypto_session_id_t du_session; + size_t du_encrlen; + caddr_t du_encrbuf; + size_t du_datalen; + caddr_t du_databuf; +} crypto_decrypt_digest_update_t; + +typedef struct crypto_sign_encrypt_update { + uint_t eu_return_value; + crypto_session_id_t eu_session; + size_t eu_datalen; + caddr_t eu_databuf; + size_t eu_encrlen; + caddr_t eu_encrbuf; +} crypto_sign_encrypt_update_t; + +typedef struct crypto_decrypt_verify_update { + uint_t vu_return_value; + crypto_session_id_t vu_session; + size_t vu_encrlen; + caddr_t vu_encrbuf; + size_t vu_datalen; + caddr_t vu_databuf; +} crypto_decrypt_verify_update_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_encrypt32 { + uint32_t ce_return_value; + crypto_session_id_t ce_session; + size32_t ce_datalen; + caddr32_t ce_databuf; + size32_t ce_encrlen; + caddr32_t ce_encrbuf; + uint32_t ce_flags; +} crypto_encrypt32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_encrypt_init32 { + uint32_t ei_return_value; + crypto_session_id_t ei_session; + crypto_mechanism32_t ei_mech; + crypto_key32_t ei_key; +} crypto_encrypt_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_encrypt_update32 { + uint32_t eu_return_value; + crypto_session_id_t eu_session; + size32_t eu_datalen; + caddr32_t eu_databuf; + size32_t eu_encrlen; + caddr32_t eu_encrbuf; +} crypto_encrypt_update32_t; + +typedef struct crypto_encrypt_final32 { + uint32_t ef_return_value; + crypto_session_id_t ef_session; + size32_t ef_encrlen; + caddr32_t ef_encrbuf; +} crypto_encrypt_final32_t; + +typedef struct crypto_decrypt32 { + uint32_t cd_return_value; + crypto_session_id_t cd_session; + size32_t cd_encrlen; + caddr32_t cd_encrbuf; + size32_t cd_datalen; + caddr32_t cd_databuf; + uint32_t cd_flags; +} crypto_decrypt32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_decrypt_init32 { + uint32_t di_return_value; + crypto_session_id_t di_session; + crypto_mechanism32_t di_mech; + crypto_key32_t di_key; +} crypto_decrypt_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_decrypt_update32 { + uint32_t du_return_value; + crypto_session_id_t du_session; + size32_t du_encrlen; + caddr32_t du_encrbuf; + size32_t du_datalen; + caddr32_t du_databuf; +} crypto_decrypt_update32_t; + +typedef struct crypto_decrypt_final32 { + uint32_t df_return_value; + crypto_session_id_t df_session; + size32_t df_datalen; + caddr32_t df_databuf; +} crypto_decrypt_final32_t; + +typedef struct crypto_digest32 { + uint32_t cd_return_value; + crypto_session_id_t cd_session; + size32_t cd_datalen; + caddr32_t cd_databuf; + size32_t cd_digestlen; + caddr32_t cd_digestbuf; +} crypto_digest32_t; + +typedef struct crypto_digest_init32 { + uint32_t di_return_value; + crypto_session_id_t di_session; + crypto_mechanism32_t di_mech; +} crypto_digest_init32_t; + +typedef struct crypto_digest_update32 { + uint32_t du_return_value; + crypto_session_id_t du_session; + size32_t du_datalen; + caddr32_t du_databuf; +} crypto_digest_update32_t; + +typedef struct crypto_digest_key32 { + uint32_t dk_return_value; + crypto_session_id_t dk_session; + crypto_key32_t dk_key; +} crypto_digest_key32_t; + +typedef struct crypto_digest_final32 { + uint32_t df_return_value; + crypto_session_id_t df_session; + size32_t df_digestlen; + caddr32_t df_digestbuf; +} crypto_digest_final32_t; + +typedef struct crypto_mac32 { + uint32_t cm_return_value; + crypto_session_id_t cm_session; + size32_t cm_datalen; + caddr32_t cm_databuf; + size32_t cm_maclen; + caddr32_t cm_macbuf; +} crypto_mac32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_mac_init32 { + uint32_t mi_return_value; + crypto_session_id_t mi_session; + crypto_mechanism32_t mi_mech; + crypto_key32_t mi_key; +} crypto_mac_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_mac_update32 { + uint32_t mu_return_value; + crypto_session_id_t mu_session; + size32_t mu_datalen; + caddr32_t mu_databuf; +} crypto_mac_update32_t; + +typedef struct crypto_mac_final32 { + uint32_t mf_return_value; + crypto_session_id_t mf_session; + size32_t mf_maclen; + caddr32_t mf_macbuf; +} crypto_mac_final32_t; + +typedef struct crypto_sign32 { + uint32_t cs_return_value; + crypto_session_id_t cs_session; + size32_t cs_datalen; + caddr32_t cs_databuf; + size32_t cs_signlen; + caddr32_t cs_signbuf; +} crypto_sign32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_sign_init32 { + uint32_t si_return_value; + crypto_session_id_t si_session; + crypto_mechanism32_t si_mech; + crypto_key32_t si_key; +} crypto_sign_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_sign_update32 { + uint32_t su_return_value; + crypto_session_id_t su_session; + size32_t su_datalen; + caddr32_t su_databuf; +} crypto_sign_update32_t; + +typedef struct crypto_sign_final32 { + uint32_t sf_return_value; + crypto_session_id_t sf_session; + size32_t sf_signlen; + caddr32_t sf_signbuf; +} crypto_sign_final32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_sign_recover_init32 { + uint32_t ri_return_value; + crypto_session_id_t ri_session; + crypto_mechanism32_t ri_mech; + crypto_key32_t ri_key; +} crypto_sign_recover_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_sign_recover32 { + uint32_t sr_return_value; + crypto_session_id_t sr_session; + size32_t sr_datalen; + caddr32_t sr_databuf; + size32_t sr_signlen; + caddr32_t sr_signbuf; +} crypto_sign_recover32_t; + +typedef struct crypto_verify32 { + uint32_t cv_return_value; + crypto_session_id_t cv_session; + size32_t cv_datalen; + caddr32_t cv_databuf; + size32_t cv_signlen; + caddr32_t cv_signbuf; +} crypto_verify32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_verify_init32 { + uint32_t vi_return_value; + crypto_session_id_t vi_session; + crypto_mechanism32_t vi_mech; + crypto_key32_t vi_key; +} crypto_verify_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_verify_update32 { + uint32_t vu_return_value; + crypto_session_id_t vu_session; + size32_t vu_datalen; + caddr32_t vu_databuf; +} crypto_verify_update32_t; + +typedef struct crypto_verify_final32 { + uint32_t vf_return_value; + crypto_session_id_t vf_session; + size32_t vf_signlen; + caddr32_t vf_signbuf; +} crypto_verify_final32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_verify_recover_init32 { + uint32_t ri_return_value; + crypto_session_id_t ri_session; + crypto_mechanism32_t ri_mech; + crypto_key32_t ri_key; +} crypto_verify_recover_init32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_verify_recover32 { + uint32_t vr_return_value; + crypto_session_id_t vr_session; + size32_t vr_signlen; + caddr32_t vr_signbuf; + size32_t vr_datalen; + caddr32_t vr_databuf; +} crypto_verify_recover32_t; + +typedef struct crypto_digest_encrypt_update32 { + uint32_t eu_return_value; + crypto_session_id_t eu_session; + size32_t eu_datalen; + caddr32_t eu_databuf; + size32_t eu_encrlen; + caddr32_t eu_encrbuf; +} crypto_digest_encrypt_update32_t; + +typedef struct crypto_decrypt_digest_update32 { + uint32_t du_return_value; + crypto_session_id_t du_session; + size32_t du_encrlen; + caddr32_t du_encrbuf; + size32_t du_datalen; + caddr32_t du_databuf; +} crypto_decrypt_digest_update32_t; + +typedef struct crypto_sign_encrypt_update32 { + uint32_t eu_return_value; + crypto_session_id_t eu_session; + size32_t eu_datalen; + caddr32_t eu_databuf; + size32_t eu_encrlen; + caddr32_t eu_encrbuf; +} crypto_sign_encrypt_update32_t; + +typedef struct crypto_decrypt_verify_update32 { + uint32_t vu_return_value; + crypto_session_id_t vu_session; + size32_t vu_encrlen; + caddr32_t vu_encrbuf; + size32_t vu_datalen; + caddr32_t vu_databuf; +} crypto_decrypt_verify_update32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_ENCRYPT CRYPTO(50) +#define CRYPTO_ENCRYPT_INIT CRYPTO(51) +#define CRYPTO_ENCRYPT_UPDATE CRYPTO(52) +#define CRYPTO_ENCRYPT_FINAL CRYPTO(53) +#define CRYPTO_DECRYPT CRYPTO(54) +#define CRYPTO_DECRYPT_INIT CRYPTO(55) +#define CRYPTO_DECRYPT_UPDATE CRYPTO(56) +#define CRYPTO_DECRYPT_FINAL CRYPTO(57) + +#define CRYPTO_DIGEST CRYPTO(58) +#define CRYPTO_DIGEST_INIT CRYPTO(59) +#define CRYPTO_DIGEST_UPDATE CRYPTO(60) +#define CRYPTO_DIGEST_KEY CRYPTO(61) +#define CRYPTO_DIGEST_FINAL CRYPTO(62) +#define CRYPTO_MAC CRYPTO(63) +#define CRYPTO_MAC_INIT CRYPTO(64) +#define CRYPTO_MAC_UPDATE CRYPTO(65) +#define CRYPTO_MAC_FINAL CRYPTO(66) + +#define CRYPTO_SIGN CRYPTO(67) +#define CRYPTO_SIGN_INIT CRYPTO(68) +#define CRYPTO_SIGN_UPDATE CRYPTO(69) +#define CRYPTO_SIGN_FINAL CRYPTO(70) +#define CRYPTO_SIGN_RECOVER_INIT CRYPTO(71) +#define CRYPTO_SIGN_RECOVER CRYPTO(72) +#define CRYPTO_VERIFY CRYPTO(73) +#define CRYPTO_VERIFY_INIT CRYPTO(74) +#define CRYPTO_VERIFY_UPDATE CRYPTO(75) +#define CRYPTO_VERIFY_FINAL CRYPTO(76) +#define CRYPTO_VERIFY_RECOVER_INIT CRYPTO(77) +#define CRYPTO_VERIFY_RECOVER CRYPTO(78) + +#define CRYPTO_DIGEST_ENCRYPT_UPDATE CRYPTO(79) +#define CRYPTO_DECRYPT_DIGEST_UPDATE CRYPTO(80) +#define CRYPTO_SIGN_ENCRYPT_UPDATE CRYPTO(81) +#define CRYPTO_DECRYPT_VERIFY_UPDATE CRYPTO(82) + +/* + * Random Number Ioctls + */ +typedef struct crypto_seed_random { + uint_t sr_return_value; + crypto_session_id_t sr_session; + size_t sr_seedlen; + caddr_t sr_seedbuf; +} crypto_seed_random_t; + +typedef struct crypto_generate_random { + uint_t gr_return_value; + crypto_session_id_t gr_session; + caddr_t gr_buf; + size_t gr_buflen; +} crypto_generate_random_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_seed_random32 { + uint32_t sr_return_value; + crypto_session_id_t sr_session; + size32_t sr_seedlen; + caddr32_t sr_seedbuf; +} crypto_seed_random32_t; + +typedef struct crypto_generate_random32 { + uint32_t gr_return_value; + crypto_session_id_t gr_session; + caddr32_t gr_buf; + size32_t gr_buflen; +} crypto_generate_random32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_SEED_RANDOM CRYPTO(90) +#define CRYPTO_GENERATE_RANDOM CRYPTO(91) + +/* + * Object Management Ioctls + */ +typedef struct crypto_object_create { + uint_t oc_return_value; + crypto_session_id_t oc_session; + crypto_object_id_t oc_handle; + uint_t oc_count; + caddr_t oc_attributes; +} crypto_object_create_t; + +typedef struct crypto_object_copy { + uint_t oc_return_value; + crypto_session_id_t oc_session; + crypto_object_id_t oc_handle; + crypto_object_id_t oc_new_handle; + uint_t oc_count; + caddr_t oc_new_attributes; +} crypto_object_copy_t; + +typedef struct crypto_object_destroy { + uint_t od_return_value; + crypto_session_id_t od_session; + crypto_object_id_t od_handle; +} crypto_object_destroy_t; + +typedef struct crypto_object_get_attribute_value { + uint_t og_return_value; + crypto_session_id_t og_session; + crypto_object_id_t og_handle; + uint_t og_count; + caddr_t og_attributes; +} crypto_object_get_attribute_value_t; + +typedef struct crypto_object_get_size { + uint_t gs_return_value; + crypto_session_id_t gs_session; + crypto_object_id_t gs_handle; + size_t gs_size; +} crypto_object_get_size_t; + +typedef struct crypto_object_set_attribute_value { + uint_t sa_return_value; + crypto_session_id_t sa_session; + crypto_object_id_t sa_handle; + uint_t sa_count; + caddr_t sa_attributes; +} crypto_object_set_attribute_value_t; + +typedef struct crypto_object_find_init { + uint_t fi_return_value; + crypto_session_id_t fi_session; + uint_t fi_count; + caddr_t fi_attributes; +} crypto_object_find_init_t; + +typedef struct crypto_object_find_update { + uint_t fu_return_value; + crypto_session_id_t fu_session; + uint_t fu_max_count; + uint_t fu_count; + caddr_t fu_handles; +} crypto_object_find_update_t; + +typedef struct crypto_object_find_final { + uint_t ff_return_value; + crypto_session_id_t ff_session; +} crypto_object_find_final_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_object_create32 { + uint32_t oc_return_value; + crypto_session_id_t oc_session; + crypto_object_id_t oc_handle; + uint32_t oc_count; + caddr32_t oc_attributes; +} crypto_object_create32_t; + +typedef struct crypto_object_copy32 { + uint32_t oc_return_value; + crypto_session_id_t oc_session; + crypto_object_id_t oc_handle; + crypto_object_id_t oc_new_handle; + uint32_t oc_count; + caddr32_t oc_new_attributes; +} crypto_object_copy32_t; + +typedef struct crypto_object_destroy32 { + uint32_t od_return_value; + crypto_session_id_t od_session; + crypto_object_id_t od_handle; +} crypto_object_destroy32_t; + +typedef struct crypto_object_get_attribute_value32 { + uint32_t og_return_value; + crypto_session_id_t og_session; + crypto_object_id_t og_handle; + uint32_t og_count; + caddr32_t og_attributes; +} crypto_object_get_attribute_value32_t; + +typedef struct crypto_object_get_size32 { + uint32_t gs_return_value; + crypto_session_id_t gs_session; + crypto_object_id_t gs_handle; + size32_t gs_size; +} crypto_object_get_size32_t; + +typedef struct crypto_object_set_attribute_value32 { + uint32_t sa_return_value; + crypto_session_id_t sa_session; + crypto_object_id_t sa_handle; + uint32_t sa_count; + caddr32_t sa_attributes; +} crypto_object_set_attribute_value32_t; + +typedef struct crypto_object_find_init32 { + uint32_t fi_return_value; + crypto_session_id_t fi_session; + uint32_t fi_count; + caddr32_t fi_attributes; +} crypto_object_find_init32_t; + +typedef struct crypto_object_find_update32 { + uint32_t fu_return_value; + crypto_session_id_t fu_session; + uint32_t fu_max_count; + uint32_t fu_count; + caddr32_t fu_handles; +} crypto_object_find_update32_t; + +typedef struct crypto_object_find_final32 { + uint32_t ff_return_value; + crypto_session_id_t ff_session; +} crypto_object_find_final32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_OBJECT_CREATE CRYPTO(100) +#define CRYPTO_OBJECT_COPY CRYPTO(101) +#define CRYPTO_OBJECT_DESTROY CRYPTO(102) +#define CRYPTO_OBJECT_GET_ATTRIBUTE_VALUE CRYPTO(103) +#define CRYPTO_OBJECT_GET_SIZE CRYPTO(104) +#define CRYPTO_OBJECT_SET_ATTRIBUTE_VALUE CRYPTO(105) +#define CRYPTO_OBJECT_FIND_INIT CRYPTO(106) +#define CRYPTO_OBJECT_FIND_UPDATE CRYPTO(107) +#define CRYPTO_OBJECT_FIND_FINAL CRYPTO(108) + +/* + * Key Generation Ioctls + */ +typedef struct crypto_object_generate_key { + uint_t gk_return_value; + crypto_session_id_t gk_session; + crypto_object_id_t gk_handle; + crypto_mechanism_t gk_mechanism; + uint_t gk_count; + caddr_t gk_attributes; +} crypto_object_generate_key_t; + +typedef struct crypto_object_generate_key_pair { + uint_t kp_return_value; + crypto_session_id_t kp_session; + crypto_object_id_t kp_public_handle; + crypto_object_id_t kp_private_handle; + uint_t kp_public_count; + uint_t kp_private_count; + caddr_t kp_public_attributes; + caddr_t kp_private_attributes; + crypto_mechanism_t kp_mechanism; +} crypto_object_generate_key_pair_t; + +typedef struct crypto_object_wrap_key { + uint_t wk_return_value; + crypto_session_id_t wk_session; + crypto_mechanism_t wk_mechanism; + crypto_key_t wk_wrapping_key; + crypto_object_id_t wk_object_handle; + size_t wk_wrapped_key_len; + caddr_t wk_wrapped_key; +} crypto_object_wrap_key_t; + +typedef struct crypto_object_unwrap_key { + uint_t uk_return_value; + crypto_session_id_t uk_session; + crypto_mechanism_t uk_mechanism; + crypto_key_t uk_unwrapping_key; + crypto_object_id_t uk_object_handle; + size_t uk_wrapped_key_len; + caddr_t uk_wrapped_key; + uint_t uk_count; + caddr_t uk_attributes; +} crypto_object_unwrap_key_t; + +typedef struct crypto_derive_key { + uint_t dk_return_value; + crypto_session_id_t dk_session; + crypto_mechanism_t dk_mechanism; + crypto_key_t dk_base_key; + crypto_object_id_t dk_object_handle; + uint_t dk_count; + caddr_t dk_attributes; +} crypto_derive_key_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_object_generate_key32 { + uint32_t gk_return_value; + crypto_session_id_t gk_session; + crypto_object_id_t gk_handle; + crypto_mechanism32_t gk_mechanism; + uint32_t gk_count; + caddr32_t gk_attributes; +} crypto_object_generate_key32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +typedef struct crypto_object_generate_key_pair32 { + uint32_t kp_return_value; + crypto_session_id_t kp_session; + crypto_object_id_t kp_public_handle; + crypto_object_id_t kp_private_handle; + uint32_t kp_public_count; + uint32_t kp_private_count; + caddr32_t kp_public_attributes; + caddr32_t kp_private_attributes; + crypto_mechanism32_t kp_mechanism; +} crypto_object_generate_key_pair32_t; + +typedef struct crypto_object_wrap_key32 { + uint32_t wk_return_value; + crypto_session_id_t wk_session; + crypto_mechanism32_t wk_mechanism; + crypto_key32_t wk_wrapping_key; + crypto_object_id_t wk_object_handle; + size32_t wk_wrapped_key_len; + caddr32_t wk_wrapped_key; +} crypto_object_wrap_key32_t; + +typedef struct crypto_object_unwrap_key32 { + uint32_t uk_return_value; + crypto_session_id_t uk_session; + crypto_mechanism32_t uk_mechanism; + crypto_key32_t uk_unwrapping_key; + crypto_object_id_t uk_object_handle; + size32_t uk_wrapped_key_len; + caddr32_t uk_wrapped_key; + uint32_t uk_count; + caddr32_t uk_attributes; +} crypto_object_unwrap_key32_t; + +typedef struct crypto_derive_key32 { + uint32_t dk_return_value; + crypto_session_id_t dk_session; + crypto_mechanism32_t dk_mechanism; + crypto_key32_t dk_base_key; + crypto_object_id_t dk_object_handle; + uint32_t dk_count; + caddr32_t dk_attributes; +} crypto_derive_key32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_GENERATE_KEY CRYPTO(110) +#define CRYPTO_GENERATE_KEY_PAIR CRYPTO(111) +#define CRYPTO_WRAP_KEY CRYPTO(112) +#define CRYPTO_UNWRAP_KEY CRYPTO(113) +#define CRYPTO_DERIVE_KEY CRYPTO(114) + +/* + * Provider Management Ioctls + */ + +typedef struct crypto_get_provider_list { + uint_t pl_return_value; + uint_t pl_count; + crypto_provider_entry_t pl_list[1]; +} crypto_get_provider_list_t; + +typedef struct crypto_provider_data { + uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; + uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; + uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; + uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; + uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; + ulong_t pd_flags; + ulong_t pd_max_session_count; + ulong_t pd_session_count; + ulong_t pd_max_rw_session_count; + ulong_t pd_rw_session_count; + ulong_t pd_max_pin_len; + ulong_t pd_min_pin_len; + ulong_t pd_total_public_memory; + ulong_t pd_free_public_memory; + ulong_t pd_total_private_memory; + ulong_t pd_free_private_memory; + crypto_version_t pd_hardware_version; + crypto_version_t pd_firmware_version; + uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; +} crypto_provider_data_t; + +typedef struct crypto_get_provider_info { + uint_t gi_return_value; + crypto_provider_id_t gi_provider_id; + crypto_provider_data_t gi_provider_data; +} crypto_get_provider_info_t; + +typedef struct crypto_get_provider_mechanisms { + uint_t pm_return_value; + crypto_provider_id_t pm_provider_id; + uint_t pm_count; + crypto_mech_name_t pm_list[1]; +} crypto_get_provider_mechanisms_t; + +typedef struct crypto_get_provider_mechanism_info { + uint_t mi_return_value; + crypto_provider_id_t mi_provider_id; + crypto_mech_name_t mi_mechanism_name; + uint32_t mi_min_key_size; + uint32_t mi_max_key_size; + uint32_t mi_flags; +} crypto_get_provider_mechanism_info_t; + +typedef struct crypto_init_token { + uint_t it_return_value; + crypto_provider_id_t it_provider_id; + caddr_t it_pin; + size_t it_pin_len; + caddr_t it_label; +} crypto_init_token_t; + +typedef struct crypto_init_pin { + uint_t ip_return_value; + crypto_session_id_t ip_session; + caddr_t ip_pin; + size_t ip_pin_len; +} crypto_init_pin_t; + +typedef struct crypto_set_pin { + uint_t sp_return_value; + crypto_session_id_t sp_session; + caddr_t sp_old_pin; + size_t sp_old_len; + caddr_t sp_new_pin; + size_t sp_new_len; +} crypto_set_pin_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_get_provider_list32 { + uint32_t pl_return_value; + uint32_t pl_count; + crypto_provider_entry_t pl_list[1]; +} crypto_get_provider_list32_t; + +typedef struct crypto_version32 { + uchar_t cv_major; + uchar_t cv_minor; +} crypto_version32_t; + +typedef struct crypto_provider_data32 { + uchar_t pd_prov_desc[CRYPTO_PROVIDER_DESCR_MAX_LEN]; + uchar_t pd_label[CRYPTO_EXT_SIZE_LABEL]; + uchar_t pd_manufacturerID[CRYPTO_EXT_SIZE_MANUF]; + uchar_t pd_model[CRYPTO_EXT_SIZE_MODEL]; + uchar_t pd_serial_number[CRYPTO_EXT_SIZE_SERIAL]; + uint32_t pd_flags; + uint32_t pd_max_session_count; + uint32_t pd_session_count; + uint32_t pd_max_rw_session_count; + uint32_t pd_rw_session_count; + uint32_t pd_max_pin_len; + uint32_t pd_min_pin_len; + uint32_t pd_total_public_memory; + uint32_t pd_free_public_memory; + uint32_t pd_total_private_memory; + uint32_t pd_free_private_memory; + crypto_version32_t pd_hardware_version; + crypto_version32_t pd_firmware_version; + uchar_t pd_time[CRYPTO_EXT_SIZE_TIME]; +} crypto_provider_data32_t; + +typedef struct crypto_get_provider_info32 { + uint32_t gi_return_value; + crypto_provider_id_t gi_provider_id; + crypto_provider_data32_t gi_provider_data; +} crypto_get_provider_info32_t; + +typedef struct crypto_get_provider_mechanisms32 { + uint32_t pm_return_value; + crypto_provider_id_t pm_provider_id; + uint32_t pm_count; + crypto_mech_name_t pm_list[1]; +} crypto_get_provider_mechanisms32_t; + +typedef struct crypto_init_token32 { + uint32_t it_return_value; + crypto_provider_id_t it_provider_id; + caddr32_t it_pin; + size32_t it_pin_len; + caddr32_t it_label; +} crypto_init_token32_t; + +typedef struct crypto_init_pin32 { + uint32_t ip_return_value; + crypto_session_id_t ip_session; + caddr32_t ip_pin; + size32_t ip_pin_len; +} crypto_init_pin32_t; + +typedef struct crypto_set_pin32 { + uint32_t sp_return_value; + crypto_session_id_t sp_session; + caddr32_t sp_old_pin; + size32_t sp_old_len; + caddr32_t sp_new_pin; + size32_t sp_new_len; +} crypto_set_pin32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_GET_PROVIDER_LIST CRYPTO(120) +#define CRYPTO_GET_PROVIDER_INFO CRYPTO(121) +#define CRYPTO_GET_PROVIDER_MECHANISMS CRYPTO(122) +#define CRYPTO_GET_PROVIDER_MECHANISM_INFO CRYPTO(123) +#define CRYPTO_INIT_TOKEN CRYPTO(124) +#define CRYPTO_INIT_PIN CRYPTO(125) +#define CRYPTO_SET_PIN CRYPTO(126) + +/* + * No (Key) Store Key Generation Ioctls + */ +typedef struct crypto_nostore_generate_key { + uint_t ngk_return_value; + crypto_session_id_t ngk_session; + crypto_mechanism_t ngk_mechanism; + uint_t ngk_in_count; + uint_t ngk_out_count; + caddr_t ngk_in_attributes; + caddr_t ngk_out_attributes; +} crypto_nostore_generate_key_t; + +typedef struct crypto_nostore_generate_key_pair { + uint_t nkp_return_value; + crypto_session_id_t nkp_session; + uint_t nkp_in_public_count; + uint_t nkp_in_private_count; + uint_t nkp_out_public_count; + uint_t nkp_out_private_count; + caddr_t nkp_in_public_attributes; + caddr_t nkp_in_private_attributes; + caddr_t nkp_out_public_attributes; + caddr_t nkp_out_private_attributes; + crypto_mechanism_t nkp_mechanism; +} crypto_nostore_generate_key_pair_t; + +typedef struct crypto_nostore_derive_key { + uint_t ndk_return_value; + crypto_session_id_t ndk_session; + crypto_mechanism_t ndk_mechanism; + crypto_key_t ndk_base_key; + uint_t ndk_in_count; + uint_t ndk_out_count; + caddr_t ndk_in_attributes; + caddr_t ndk_out_attributes; +} crypto_nostore_derive_key_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_nostore_generate_key32 { + uint32_t ngk_return_value; + crypto_session_id_t ngk_session; + crypto_mechanism32_t ngk_mechanism; + uint32_t ngk_in_count; + uint32_t ngk_out_count; + caddr32_t ngk_in_attributes; + caddr32_t ngk_out_attributes; +} crypto_nostore_generate_key32_t; + +typedef struct crypto_nostore_generate_key_pair32 { + uint32_t nkp_return_value; + crypto_session_id_t nkp_session; + uint32_t nkp_in_public_count; + uint32_t nkp_in_private_count; + uint32_t nkp_out_public_count; + uint32_t nkp_out_private_count; + caddr32_t nkp_in_public_attributes; + caddr32_t nkp_in_private_attributes; + caddr32_t nkp_out_public_attributes; + caddr32_t nkp_out_private_attributes; + crypto_mechanism32_t nkp_mechanism; +} crypto_nostore_generate_key_pair32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack(4) +#endif + +typedef struct crypto_nostore_derive_key32 { + uint32_t ndk_return_value; + crypto_session_id_t ndk_session; + crypto_mechanism32_t ndk_mechanism; + crypto_key32_t ndk_base_key; + uint32_t ndk_in_count; + uint32_t ndk_out_count; + caddr32_t ndk_in_attributes; + caddr32_t ndk_out_attributes; +} crypto_nostore_derive_key32_t; + +#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 +#pragma pack() +#endif + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_NOSTORE_GENERATE_KEY CRYPTO(127) +#define CRYPTO_NOSTORE_GENERATE_KEY_PAIR CRYPTO(128) +#define CRYPTO_NOSTORE_DERIVE_KEY CRYPTO(129) + +/* + * Mechanism Ioctls + */ + +typedef struct crypto_get_mechanism_list { + uint_t ml_return_value; + uint_t ml_count; + crypto_mech_name_t ml_list[1]; +} crypto_get_mechanism_list_t; + +typedef struct crypto_get_all_mechanism_info { + uint_t mi_return_value; + crypto_mech_name_t mi_mechanism_name; + uint_t mi_count; + crypto_mechanism_info_t mi_list[1]; +} crypto_get_all_mechanism_info_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_get_mechanism_list32 { + uint32_t ml_return_value; + uint32_t ml_count; + crypto_mech_name_t ml_list[1]; +} crypto_get_mechanism_list32_t; + +typedef struct crypto_get_all_mechanism_info32 { + uint32_t mi_return_value; + crypto_mech_name_t mi_mechanism_name; + uint32_t mi_count; + crypto_mechanism_info32_t mi_list[1]; +} crypto_get_all_mechanism_info32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_GET_MECHANISM_LIST CRYPTO(140) +#define CRYPTO_GET_ALL_MECHANISM_INFO CRYPTO(141) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_IOCTL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/ioctladmin.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/ioctladmin.h @@ -0,0 +1,136 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_IOCTLADMIN_H +#define _SYS_CRYPTO_IOCTLADMIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define ADMIN_IOCTL_DEVICE "/dev/cryptoadm" + +#define CRYPTOADMIN(x) (('y' << 8) | (x)) + +/* + * Administrative IOCTLs + */ + +typedef struct crypto_get_dev_list { + uint_t dl_return_value; + uint_t dl_dev_count; + crypto_dev_list_entry_t dl_devs[1]; +} crypto_get_dev_list_t; + +typedef struct crypto_get_soft_list { + uint_t sl_return_value; + uint_t sl_soft_count; + size_t sl_soft_len; + caddr_t sl_soft_names; +} crypto_get_soft_list_t; + +typedef struct crypto_get_dev_info { + uint_t di_return_value; + char di_dev_name[MAXNAMELEN]; + uint_t di_dev_instance; + uint_t di_count; + crypto_mech_name_t di_list[1]; +} crypto_get_dev_info_t; + +typedef struct crypto_get_soft_info { + uint_t si_return_value; + char si_name[MAXNAMELEN]; + uint_t si_count; + crypto_mech_name_t si_list[1]; +} crypto_get_soft_info_t; + +typedef struct crypto_load_dev_disabled { + uint_t dd_return_value; + char dd_dev_name[MAXNAMELEN]; + uint_t dd_dev_instance; + uint_t dd_count; + crypto_mech_name_t dd_list[1]; +} crypto_load_dev_disabled_t; + +typedef struct crypto_load_soft_disabled { + uint_t sd_return_value; + char sd_name[MAXNAMELEN]; + uint_t sd_count; + crypto_mech_name_t sd_list[1]; +} crypto_load_soft_disabled_t; + +typedef struct crypto_unload_soft_module { + uint_t sm_return_value; + char sm_name[MAXNAMELEN]; +} crypto_unload_soft_module_t; + +typedef struct crypto_load_soft_config { + uint_t sc_return_value; + char sc_name[MAXNAMELEN]; + uint_t sc_count; + crypto_mech_name_t sc_list[1]; +} crypto_load_soft_config_t; + +typedef struct crypto_load_door { + uint_t ld_return_value; + uint_t ld_did; +} crypto_load_door_t; + +#ifdef _KERNEL +#ifdef _SYSCALL32 + +typedef struct crypto_get_soft_list32 { + uint32_t sl_return_value; + uint32_t sl_soft_count; + size32_t sl_soft_len; + caddr32_t sl_soft_names; +} crypto_get_soft_list32_t; + +#endif /* _SYSCALL32 */ +#endif /* _KERNEL */ + +#define CRYPTO_GET_VERSION CRYPTOADMIN(1) +#define CRYPTO_GET_DEV_LIST CRYPTOADMIN(2) +#define CRYPTO_GET_SOFT_LIST CRYPTOADMIN(3) +#define CRYPTO_GET_DEV_INFO CRYPTOADMIN(4) +#define CRYPTO_GET_SOFT_INFO CRYPTOADMIN(5) +#define CRYPTO_LOAD_DEV_DISABLED CRYPTOADMIN(8) +#define CRYPTO_LOAD_SOFT_DISABLED CRYPTOADMIN(9) +#define CRYPTO_UNLOAD_SOFT_MODULE CRYPTOADMIN(10) +#define CRYPTO_LOAD_SOFT_CONFIG CRYPTOADMIN(11) +#define CRYPTO_POOL_CREATE CRYPTOADMIN(12) +#define CRYPTO_POOL_WAIT CRYPTOADMIN(13) +#define CRYPTO_POOL_RUN CRYPTOADMIN(14) +#define CRYPTO_LOAD_DOOR CRYPTOADMIN(15) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_IOCTLADMIN_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/ops_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/ops_impl.h @@ -0,0 +1,630 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_OPS_IMPL_H +#define _SYS_CRYPTO_OPS_IMPL_H + +/* + * Scheduler internal structures. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include + +/* + * The parameters needed for each function group are batched + * in one structure. This is much simpler than having a + * separate structure for each function. + * + * In some cases, a field is generically named to keep the + * structure small. The comments indicate these cases. + */ +typedef struct kcf_digest_ops_params { + crypto_session_id_t do_sid; + crypto_mech_type_t do_framework_mechtype; + crypto_mechanism_t do_mech; + crypto_data_t *do_data; + crypto_data_t *do_digest; + crypto_key_t *do_digest_key; /* Argument for digest_key() */ +} kcf_digest_ops_params_t; + +typedef struct kcf_mac_ops_params { + crypto_session_id_t mo_sid; + crypto_mech_type_t mo_framework_mechtype; + crypto_mechanism_t mo_mech; + crypto_key_t *mo_key; + crypto_data_t *mo_data; + crypto_data_t *mo_mac; + crypto_spi_ctx_template_t mo_templ; +} kcf_mac_ops_params_t; + +typedef struct kcf_encrypt_ops_params { + crypto_session_id_t eo_sid; + crypto_mech_type_t eo_framework_mechtype; + crypto_mechanism_t eo_mech; + crypto_key_t *eo_key; + crypto_data_t *eo_plaintext; + crypto_data_t *eo_ciphertext; + crypto_spi_ctx_template_t eo_templ; +} kcf_encrypt_ops_params_t; + +typedef struct kcf_decrypt_ops_params { + crypto_session_id_t dop_sid; + crypto_mech_type_t dop_framework_mechtype; + crypto_mechanism_t dop_mech; + crypto_key_t *dop_key; + crypto_data_t *dop_ciphertext; + crypto_data_t *dop_plaintext; + crypto_spi_ctx_template_t dop_templ; +} kcf_decrypt_ops_params_t; + +typedef struct kcf_sign_ops_params { + crypto_session_id_t so_sid; + crypto_mech_type_t so_framework_mechtype; + crypto_mechanism_t so_mech; + crypto_key_t *so_key; + crypto_data_t *so_data; + crypto_data_t *so_signature; + crypto_spi_ctx_template_t so_templ; +} kcf_sign_ops_params_t; + +typedef struct kcf_verify_ops_params { + crypto_session_id_t vo_sid; + crypto_mech_type_t vo_framework_mechtype; + crypto_mechanism_t vo_mech; + crypto_key_t *vo_key; + crypto_data_t *vo_data; + crypto_data_t *vo_signature; + crypto_spi_ctx_template_t vo_templ; +} kcf_verify_ops_params_t; + +typedef struct kcf_encrypt_mac_ops_params { + crypto_session_id_t em_sid; + crypto_mech_type_t em_framework_encr_mechtype; + crypto_mechanism_t em_encr_mech; + crypto_key_t *em_encr_key; + crypto_mech_type_t em_framework_mac_mechtype; + crypto_mechanism_t em_mac_mech; + crypto_key_t *em_mac_key; + crypto_data_t *em_plaintext; + crypto_dual_data_t *em_ciphertext; + crypto_data_t *em_mac; + crypto_spi_ctx_template_t em_encr_templ; + crypto_spi_ctx_template_t em_mac_templ; +} kcf_encrypt_mac_ops_params_t; + +typedef struct kcf_mac_decrypt_ops_params { + crypto_session_id_t md_sid; + crypto_mech_type_t md_framework_mac_mechtype; + crypto_mechanism_t md_mac_mech; + crypto_key_t *md_mac_key; + crypto_mech_type_t md_framework_decr_mechtype; + crypto_mechanism_t md_decr_mech; + crypto_key_t *md_decr_key; + crypto_dual_data_t *md_ciphertext; + crypto_data_t *md_mac; + crypto_data_t *md_plaintext; + crypto_spi_ctx_template_t md_mac_templ; + crypto_spi_ctx_template_t md_decr_templ; +} kcf_mac_decrypt_ops_params_t; + +typedef struct kcf_random_number_ops_params { + crypto_session_id_t rn_sid; + uchar_t *rn_buf; + size_t rn_buflen; + uint_t rn_entropy_est; + uint32_t rn_flags; +} kcf_random_number_ops_params_t; + +/* + * so_pd is useful when the provider descriptor (pd) supplying the + * provider handle is different from the pd supplying the ops vector. + * This is the case for session open/close where so_pd can be the pd + * of a logical provider. The pd supplying the ops vector is passed + * as an argument to kcf_submit_request(). + */ +typedef struct kcf_session_ops_params { + crypto_session_id_t *so_sid_ptr; + crypto_session_id_t so_sid; + crypto_user_type_t so_user_type; + char *so_pin; + size_t so_pin_len; + kcf_provider_desc_t *so_pd; +} kcf_session_ops_params_t; + +typedef struct kcf_object_ops_params { + crypto_session_id_t oo_sid; + crypto_object_id_t oo_object_id; + crypto_object_attribute_t *oo_template; + uint_t oo_attribute_count; + crypto_object_id_t *oo_object_id_ptr; + size_t *oo_object_size; + void **oo_find_init_pp_ptr; + void *oo_find_pp; + uint_t oo_max_object_count; + uint_t *oo_object_count_ptr; +} kcf_object_ops_params_t; + +/* + * ko_key is used to encode wrapping key in key_wrap() and + * unwrapping key in key_unwrap(). ko_key_template and + * ko_key_attribute_count are used to encode public template + * and public template attr count in key_generate_pair(). + * kops->ko_key_object_id_ptr is used to encode public key + * in key_generate_pair(). + */ +typedef struct kcf_key_ops_params { + crypto_session_id_t ko_sid; + crypto_mech_type_t ko_framework_mechtype; + crypto_mechanism_t ko_mech; + crypto_object_attribute_t *ko_key_template; + uint_t ko_key_attribute_count; + crypto_object_id_t *ko_key_object_id_ptr; + crypto_object_attribute_t *ko_private_key_template; + uint_t ko_private_key_attribute_count; + crypto_object_id_t *ko_private_key_object_id_ptr; + crypto_key_t *ko_key; + uchar_t *ko_wrapped_key; + size_t *ko_wrapped_key_len_ptr; + crypto_object_attribute_t *ko_out_template1; + crypto_object_attribute_t *ko_out_template2; + uint_t ko_out_attribute_count1; + uint_t ko_out_attribute_count2; +} kcf_key_ops_params_t; + +/* + * po_pin and po_pin_len are used to encode new_pin and new_pin_len + * when wrapping set_pin() function parameters. + * + * po_pd is useful when the provider descriptor (pd) supplying the + * provider handle is different from the pd supplying the ops vector. + * This is true for the ext_info provider entry point where po_pd + * can be the pd of a logical provider. The pd supplying the ops vector + * is passed as an argument to kcf_submit_request(). + */ +typedef struct kcf_provmgmt_ops_params { + crypto_session_id_t po_sid; + char *po_pin; + size_t po_pin_len; + char *po_old_pin; + size_t po_old_pin_len; + char *po_label; + crypto_provider_ext_info_t *po_ext_info; + kcf_provider_desc_t *po_pd; +} kcf_provmgmt_ops_params_t; + +/* + * The operation type within a function group. + */ +typedef enum kcf_op_type { + /* common ops for all mechanisms */ + KCF_OP_INIT = 1, + KCF_OP_SINGLE, /* pkcs11 sense. So, INIT is already done */ + KCF_OP_UPDATE, + KCF_OP_FINAL, + KCF_OP_ATOMIC, + + /* digest_key op */ + KCF_OP_DIGEST_KEY, + + /* mac specific op */ + KCF_OP_MAC_VERIFY_ATOMIC, + + /* mac/cipher specific op */ + KCF_OP_MAC_VERIFY_DECRYPT_ATOMIC, + + /* sign_recover ops */ + KCF_OP_SIGN_RECOVER_INIT, + KCF_OP_SIGN_RECOVER, + KCF_OP_SIGN_RECOVER_ATOMIC, + + /* verify_recover ops */ + KCF_OP_VERIFY_RECOVER_INIT, + KCF_OP_VERIFY_RECOVER, + KCF_OP_VERIFY_RECOVER_ATOMIC, + + /* random number ops */ + KCF_OP_RANDOM_SEED, + KCF_OP_RANDOM_GENERATE, + + /* session management ops */ + KCF_OP_SESSION_OPEN, + KCF_OP_SESSION_CLOSE, + KCF_OP_SESSION_LOGIN, + KCF_OP_SESSION_LOGOUT, + + /* object management ops */ + KCF_OP_OBJECT_CREATE, + KCF_OP_OBJECT_COPY, + KCF_OP_OBJECT_DESTROY, + KCF_OP_OBJECT_GET_SIZE, + KCF_OP_OBJECT_GET_ATTRIBUTE_VALUE, + KCF_OP_OBJECT_SET_ATTRIBUTE_VALUE, + KCF_OP_OBJECT_FIND_INIT, + KCF_OP_OBJECT_FIND, + KCF_OP_OBJECT_FIND_FINAL, + + /* key management ops */ + KCF_OP_KEY_GENERATE, + KCF_OP_KEY_GENERATE_PAIR, + KCF_OP_KEY_WRAP, + KCF_OP_KEY_UNWRAP, + KCF_OP_KEY_DERIVE, + KCF_OP_KEY_CHECK, + + /* provider management ops */ + KCF_OP_MGMT_EXTINFO, + KCF_OP_MGMT_INITTOKEN, + KCF_OP_MGMT_INITPIN, + KCF_OP_MGMT_SETPIN +} kcf_op_type_t; + +/* + * The operation groups that need wrapping of parameters. This is somewhat + * similar to the function group type in spi.h except that this also includes + * all the functions that don't have a mechanism. + * + * The wrapper macros should never take these enum values as an argument. + * Rather, they are assigned in the macro itself since they are known + * from the macro name. + */ +typedef enum kcf_op_group { + KCF_OG_DIGEST = 1, + KCF_OG_MAC, + KCF_OG_ENCRYPT, + KCF_OG_DECRYPT, + KCF_OG_SIGN, + KCF_OG_VERIFY, + KCF_OG_ENCRYPT_MAC, + KCF_OG_MAC_DECRYPT, + KCF_OG_RANDOM, + KCF_OG_SESSION, + KCF_OG_OBJECT, + KCF_OG_KEY, + KCF_OG_PROVMGMT, + KCF_OG_NOSTORE_KEY +} kcf_op_group_t; + +/* + * The kcf_op_type_t enum values used here should be only for those + * operations for which there is a k-api routine in sys/crypto/api.h. + */ +#define IS_INIT_OP(ftype) ((ftype) == KCF_OP_INIT) +#define IS_SINGLE_OP(ftype) ((ftype) == KCF_OP_SINGLE) +#define IS_UPDATE_OP(ftype) ((ftype) == KCF_OP_UPDATE) +#define IS_FINAL_OP(ftype) ((ftype) == KCF_OP_FINAL) +#define IS_ATOMIC_OP(ftype) ( \ + (ftype) == KCF_OP_ATOMIC || (ftype) == KCF_OP_MAC_VERIFY_ATOMIC || \ + (ftype) == KCF_OP_MAC_VERIFY_DECRYPT_ATOMIC || \ + (ftype) == KCF_OP_SIGN_RECOVER_ATOMIC || \ + (ftype) == KCF_OP_VERIFY_RECOVER_ATOMIC) + +/* + * Keep the parameters associated with a request around. + * We need to pass them to the SPI. + */ +typedef struct kcf_req_params { + kcf_op_group_t rp_opgrp; + kcf_op_type_t rp_optype; + + union { + kcf_digest_ops_params_t digest_params; + kcf_mac_ops_params_t mac_params; + kcf_encrypt_ops_params_t encrypt_params; + kcf_decrypt_ops_params_t decrypt_params; + kcf_sign_ops_params_t sign_params; + kcf_verify_ops_params_t verify_params; + kcf_encrypt_mac_ops_params_t encrypt_mac_params; + kcf_mac_decrypt_ops_params_t mac_decrypt_params; + kcf_random_number_ops_params_t random_number_params; + kcf_session_ops_params_t session_params; + kcf_object_ops_params_t object_params; + kcf_key_ops_params_t key_params; + kcf_provmgmt_ops_params_t provmgmt_params; + } rp_u; +} kcf_req_params_t; + + +/* + * The ioctl/k-api code should bundle the parameters into a kcf_req_params_t + * structure before calling a scheduler routine. The following macros are + * available for that purpose. + * + * For the most part, the macro arguments closely correspond to the + * function parameters. In some cases, we use generic names. The comments + * for the structure should indicate these cases. + */ +#define KCF_WRAP_DIGEST_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _data, _digest) { \ + kcf_digest_ops_params_t *dops = &(req)->rp_u.digest_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_DIGEST; \ + (req)->rp_optype = ftype; \ + dops->do_sid = _sid; \ + if (mechp != NULL) { \ + dops->do_mech = *mechp; \ + dops->do_framework_mechtype = mechp->cm_type; \ + } \ + dops->do_digest_key = _key; \ + dops->do_data = _data; \ + dops->do_digest = _digest; \ +} + +#define KCF_WRAP_MAC_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _data, _mac, _templ) { \ + kcf_mac_ops_params_t *mops = &(req)->rp_u.mac_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_MAC; \ + (req)->rp_optype = ftype; \ + mops->mo_sid = _sid; \ + if (mechp != NULL) { \ + mops->mo_mech = *mechp; \ + mops->mo_framework_mechtype = mechp->cm_type; \ + } \ + mops->mo_key = _key; \ + mops->mo_data = _data; \ + mops->mo_mac = _mac; \ + mops->mo_templ = _templ; \ +} + +#define KCF_WRAP_ENCRYPT_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _plaintext, _ciphertext, _templ) { \ + kcf_encrypt_ops_params_t *cops = &(req)->rp_u.encrypt_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_ENCRYPT; \ + (req)->rp_optype = ftype; \ + cops->eo_sid = _sid; \ + if (mechp != NULL) { \ + cops->eo_mech = *mechp; \ + cops->eo_framework_mechtype = mechp->cm_type; \ + } \ + cops->eo_key = _key; \ + cops->eo_plaintext = _plaintext; \ + cops->eo_ciphertext = _ciphertext; \ + cops->eo_templ = _templ; \ +} + +#define KCF_WRAP_DECRYPT_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _ciphertext, _plaintext, _templ) { \ + kcf_decrypt_ops_params_t *cops = &(req)->rp_u.decrypt_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_DECRYPT; \ + (req)->rp_optype = ftype; \ + cops->dop_sid = _sid; \ + if (mechp != NULL) { \ + cops->dop_mech = *mechp; \ + cops->dop_framework_mechtype = mechp->cm_type; \ + } \ + cops->dop_key = _key; \ + cops->dop_ciphertext = _ciphertext; \ + cops->dop_plaintext = _plaintext; \ + cops->dop_templ = _templ; \ +} + +#define KCF_WRAP_SIGN_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _data, _signature, _templ) { \ + kcf_sign_ops_params_t *sops = &(req)->rp_u.sign_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_SIGN; \ + (req)->rp_optype = ftype; \ + sops->so_sid = _sid; \ + if (mechp != NULL) { \ + sops->so_mech = *mechp; \ + sops->so_framework_mechtype = mechp->cm_type; \ + } \ + sops->so_key = _key; \ + sops->so_data = _data; \ + sops->so_signature = _signature; \ + sops->so_templ = _templ; \ +} + +#define KCF_WRAP_VERIFY_OPS_PARAMS(req, ftype, _sid, _mech, _key, \ + _data, _signature, _templ) { \ + kcf_verify_ops_params_t *vops = &(req)->rp_u.verify_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_VERIFY; \ + (req)->rp_optype = ftype; \ + vops->vo_sid = _sid; \ + if (mechp != NULL) { \ + vops->vo_mech = *mechp; \ + vops->vo_framework_mechtype = mechp->cm_type; \ + } \ + vops->vo_key = _key; \ + vops->vo_data = _data; \ + vops->vo_signature = _signature; \ + vops->vo_templ = _templ; \ +} + +#define KCF_WRAP_ENCRYPT_MAC_OPS_PARAMS(req, ftype, _sid, _encr_key, \ + _mac_key, _plaintext, _ciphertext, _mac, _encr_templ, _mac_templ) { \ + kcf_encrypt_mac_ops_params_t *cmops = &(req)->rp_u.encrypt_mac_params; \ + \ + (req)->rp_opgrp = KCF_OG_ENCRYPT_MAC; \ + (req)->rp_optype = ftype; \ + cmops->em_sid = _sid; \ + cmops->em_encr_key = _encr_key; \ + cmops->em_mac_key = _mac_key; \ + cmops->em_plaintext = _plaintext; \ + cmops->em_ciphertext = _ciphertext; \ + cmops->em_mac = _mac; \ + cmops->em_encr_templ = _encr_templ; \ + cmops->em_mac_templ = _mac_templ; \ +} + +#define KCF_WRAP_MAC_DECRYPT_OPS_PARAMS(req, ftype, _sid, _mac_key, \ + _decr_key, _ciphertext, _mac, _plaintext, _mac_templ, _decr_templ) { \ + kcf_mac_decrypt_ops_params_t *cmops = &(req)->rp_u.mac_decrypt_params; \ + \ + (req)->rp_opgrp = KCF_OG_MAC_DECRYPT; \ + (req)->rp_optype = ftype; \ + cmops->md_sid = _sid; \ + cmops->md_mac_key = _mac_key; \ + cmops->md_decr_key = _decr_key; \ + cmops->md_ciphertext = _ciphertext; \ + cmops->md_mac = _mac; \ + cmops->md_plaintext = _plaintext; \ + cmops->md_mac_templ = _mac_templ; \ + cmops->md_decr_templ = _decr_templ; \ +} + +#define KCF_WRAP_RANDOM_OPS_PARAMS(req, ftype, _sid, _buf, _buflen, \ + _est, _flags) { \ + kcf_random_number_ops_params_t *rops = \ + &(req)->rp_u.random_number_params; \ + \ + (req)->rp_opgrp = KCF_OG_RANDOM; \ + (req)->rp_optype = ftype; \ + rops->rn_sid = _sid; \ + rops->rn_buf = _buf; \ + rops->rn_buflen = _buflen; \ + rops->rn_entropy_est = _est; \ + rops->rn_flags = _flags; \ +} + +#define KCF_WRAP_SESSION_OPS_PARAMS(req, ftype, _sid_ptr, _sid, \ + _user_type, _pin, _pin_len, _pd) { \ + kcf_session_ops_params_t *sops = &(req)->rp_u.session_params; \ + \ + (req)->rp_opgrp = KCF_OG_SESSION; \ + (req)->rp_optype = ftype; \ + sops->so_sid_ptr = _sid_ptr; \ + sops->so_sid = _sid; \ + sops->so_user_type = _user_type; \ + sops->so_pin = _pin; \ + sops->so_pin_len = _pin_len; \ + sops->so_pd = _pd; \ +} + +#define KCF_WRAP_OBJECT_OPS_PARAMS(req, ftype, _sid, _object_id, \ + _template, _attribute_count, _object_id_ptr, _object_size, \ + _find_init_pp_ptr, _find_pp, _max_object_count, _object_count_ptr) { \ + kcf_object_ops_params_t *jops = &(req)->rp_u.object_params; \ + \ + (req)->rp_opgrp = KCF_OG_OBJECT; \ + (req)->rp_optype = ftype; \ + jops->oo_sid = _sid; \ + jops->oo_object_id = _object_id; \ + jops->oo_template = _template; \ + jops->oo_attribute_count = _attribute_count; \ + jops->oo_object_id_ptr = _object_id_ptr; \ + jops->oo_object_size = _object_size; \ + jops->oo_find_init_pp_ptr = _find_init_pp_ptr; \ + jops->oo_find_pp = _find_pp; \ + jops->oo_max_object_count = _max_object_count; \ + jops->oo_object_count_ptr = _object_count_ptr; \ +} + +#define KCF_WRAP_KEY_OPS_PARAMS(req, ftype, _sid, _mech, _key_template, \ + _key_attribute_count, _key_object_id_ptr, _private_key_template, \ + _private_key_attribute_count, _private_key_object_id_ptr, \ + _key, _wrapped_key, _wrapped_key_len_ptr) { \ + kcf_key_ops_params_t *kops = &(req)->rp_u.key_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_KEY; \ + (req)->rp_optype = ftype; \ + kops->ko_sid = _sid; \ + if (mechp != NULL) { \ + kops->ko_mech = *mechp; \ + kops->ko_framework_mechtype = mechp->cm_type; \ + } \ + kops->ko_key_template = _key_template; \ + kops->ko_key_attribute_count = _key_attribute_count; \ + kops->ko_key_object_id_ptr = _key_object_id_ptr; \ + kops->ko_private_key_template = _private_key_template; \ + kops->ko_private_key_attribute_count = _private_key_attribute_count; \ + kops->ko_private_key_object_id_ptr = _private_key_object_id_ptr; \ + kops->ko_key = _key; \ + kops->ko_wrapped_key = _wrapped_key; \ + kops->ko_wrapped_key_len_ptr = _wrapped_key_len_ptr; \ +} + +#define KCF_WRAP_PROVMGMT_OPS_PARAMS(req, ftype, _sid, _old_pin, \ + _old_pin_len, _pin, _pin_len, _label, _ext_info, _pd) { \ + kcf_provmgmt_ops_params_t *pops = &(req)->rp_u.provmgmt_params; \ + \ + (req)->rp_opgrp = KCF_OG_PROVMGMT; \ + (req)->rp_optype = ftype; \ + pops->po_sid = _sid; \ + pops->po_pin = _pin; \ + pops->po_pin_len = _pin_len; \ + pops->po_old_pin = _old_pin; \ + pops->po_old_pin_len = _old_pin_len; \ + pops->po_label = _label; \ + pops->po_ext_info = _ext_info; \ + pops->po_pd = _pd; \ +} + +#define KCF_WRAP_NOSTORE_KEY_OPS_PARAMS(req, ftype, _sid, _mech, \ + _key_template, _key_attribute_count, _private_key_template, \ + _private_key_attribute_count, _key, _out_template1, \ + _out_attribute_count1, _out_template2, _out_attribute_count2) { \ + kcf_key_ops_params_t *kops = &(req)->rp_u.key_params; \ + crypto_mechanism_t *mechp = _mech; \ + \ + (req)->rp_opgrp = KCF_OG_NOSTORE_KEY; \ + (req)->rp_optype = ftype; \ + kops->ko_sid = _sid; \ + if (mechp != NULL) { \ + kops->ko_mech = *mechp; \ + kops->ko_framework_mechtype = mechp->cm_type; \ + } \ + kops->ko_key_template = _key_template; \ + kops->ko_key_attribute_count = _key_attribute_count; \ + kops->ko_key_object_id_ptr = NULL; \ + kops->ko_private_key_template = _private_key_template; \ + kops->ko_private_key_attribute_count = _private_key_attribute_count; \ + kops->ko_private_key_object_id_ptr = NULL; \ + kops->ko_key = _key; \ + kops->ko_wrapped_key = NULL; \ + kops->ko_wrapped_key_len_ptr = 0; \ + kops->ko_out_template1 = _out_template1; \ + kops->ko_out_template2 = _out_template2; \ + kops->ko_out_attribute_count1 = _out_attribute_count1; \ + kops->ko_out_attribute_count2 = _out_attribute_count2; \ +} + +#define KCF_SET_PROVIDER_MECHNUM(fmtype, pd, mechp) \ + (mechp)->cm_type = \ + KCF_TO_PROV_MECHNUM(pd, fmtype); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_OPS_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/sched_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/sched_impl.h @@ -0,0 +1,531 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_SCHED_IMPL_H +#define _SYS_CRYPTO_SCHED_IMPL_H + +/* + * Scheduler internal structures. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include + +typedef void (kcf_func_t)(void *, int); + +typedef enum kcf_req_status { + REQ_ALLOCATED = 1, + REQ_WAITING, /* At the framework level */ + REQ_INPROGRESS, /* At the provider level */ + REQ_DONE, + REQ_CANCELED +} kcf_req_status_t; + +typedef enum kcf_call_type { + CRYPTO_SYNCH = 1, + CRYPTO_ASYNCH +} kcf_call_type_t; + +#define CHECK_RESTRICT(crq) (crq != NULL && \ + ((crq)->cr_flag & CRYPTO_RESTRICTED)) + +#define CHECK_RESTRICT_FALSE B_FALSE + +#define CHECK_FASTPATH(crq, pd) ((crq) == NULL || \ + !((crq)->cr_flag & CRYPTO_ALWAYS_QUEUE)) && \ + (pd)->pd_prov_type == CRYPTO_SW_PROVIDER + +#define KCF_KMFLAG(crq) (((crq) == NULL) ? KM_SLEEP : KM_NOSLEEP) + +/* + * The framework keeps an internal handle to use in the adaptive + * asynchronous case. This is the case when a client has the + * CRYPTO_ALWAYS_QUEUE bit clear and a software provider is used for + * the request. The request is completed in the context of the calling + * thread and kernel memory must be allocated with KM_NOSLEEP. + * + * The framework passes a pointer to the handle in crypto_req_handle_t + * argument when it calls the SPI of the software provider. The macros + * KCF_RHNDL() and KCF_SWFP_RHNDL() are used to do this. + * + * When a provider asks the framework for kmflag value via + * crypto_kmflag(9S) we use REQHNDL2_KMFLAG() macro. + */ +extern ulong_t kcf_swprov_hndl; +#define KCF_RHNDL(kmflag) (((kmflag) == KM_SLEEP) ? NULL : &kcf_swprov_hndl) +#define KCF_SWFP_RHNDL(crq) (((crq) == NULL) ? NULL : &kcf_swprov_hndl) +#define REQHNDL2_KMFLAG(rhndl) \ + ((rhndl == &kcf_swprov_hndl) ? KM_NOSLEEP : KM_SLEEP) + +/* Internal call_req flags. They start after the public ones in api.h */ + +#define CRYPTO_SETDUAL 0x00001000 /* Set the 'cont' boolean before */ + /* submitting the request */ +#define KCF_ISDUALREQ(crq) \ + (((crq) == NULL) ? B_FALSE : (crq->cr_flag & CRYPTO_SETDUAL)) + +typedef struct kcf_prov_tried { + kcf_provider_desc_t *pt_pd; + struct kcf_prov_tried *pt_next; +} kcf_prov_tried_t; + +#define IS_FG_SUPPORTED(mdesc, fg) \ + (((mdesc)->pm_mech_info.cm_func_group_mask & (fg)) != 0) + +#define IS_PROVIDER_TRIED(pd, tlist) \ + (tlist != NULL && is_in_triedlist(pd, tlist)) + +#define IS_RECOVERABLE(error) \ + (error == CRYPTO_BUFFER_TOO_BIG || \ + error == CRYPTO_BUSY || \ + error == CRYPTO_DEVICE_ERROR || \ + error == CRYPTO_DEVICE_MEMORY || \ + error == CRYPTO_KEY_SIZE_RANGE || \ + error == CRYPTO_NO_PERMISSION) + +#define KCF_ATOMIC_INCR(x) atomic_add_32(&(x), 1) +#define KCF_ATOMIC_DECR(x) atomic_add_32(&(x), -1) + +/* + * Node structure for synchronous requests. + */ +typedef struct kcf_sreq_node { + /* Should always be the first field in this structure */ + kcf_call_type_t sn_type; + /* + * sn_cv and sr_lock are used to wait for the + * operation to complete. sn_lock also protects + * the sn_state field. + */ + kcondvar_t sn_cv; + kmutex_t sn_lock; + kcf_req_status_t sn_state; + + /* + * Return value from the operation. This will be + * one of the CRYPTO_* errors defined in common.h. + */ + int sn_rv; + + /* + * parameters to call the SPI with. This can be + * a pointer as we know the caller context/stack stays. + */ + struct kcf_req_params *sn_params; + + /* Internal context for this request */ + struct kcf_context *sn_context; + + /* Provider handling this request */ + kcf_provider_desc_t *sn_provider; +} kcf_sreq_node_t; + +/* + * Node structure for asynchronous requests. A node can be on + * on a chain of requests hanging of the internal context + * structure and can be in the global software provider queue. + */ +typedef struct kcf_areq_node { + /* Should always be the first field in this structure */ + kcf_call_type_t an_type; + + /* an_lock protects the field an_state */ + kmutex_t an_lock; + kcf_req_status_t an_state; + crypto_call_req_t an_reqarg; + + /* + * parameters to call the SPI with. We need to + * save the params since the caller stack can go away. + */ + struct kcf_req_params an_params; + + /* + * The next two fields should be NULL for operations that + * don't need a context. + */ + /* Internal context for this request */ + struct kcf_context *an_context; + + /* next in chain of requests for context */ + struct kcf_areq_node *an_ctxchain_next; + + kcondvar_t an_turn_cv; + boolean_t an_is_my_turn; + boolean_t an_isdual; /* for internal reuse */ + + /* + * Next and previous nodes in the global software + * queue. These fields are NULL for a hardware + * provider since we use a taskq there. + */ + struct kcf_areq_node *an_next; + struct kcf_areq_node *an_prev; + + /* Provider handling this request */ + kcf_provider_desc_t *an_provider; + kcf_prov_tried_t *an_tried_plist; + + struct kcf_areq_node *an_idnext; /* Next in ID hash */ + struct kcf_areq_node *an_idprev; /* Prev in ID hash */ + kcondvar_t an_done; /* Signal request completion */ + uint_t an_refcnt; +} kcf_areq_node_t; + +#define KCF_AREQ_REFHOLD(areq) { \ + atomic_add_32(&(areq)->an_refcnt, 1); \ + ASSERT((areq)->an_refcnt != 0); \ +} + +#define KCF_AREQ_REFRELE(areq) { \ + ASSERT((areq)->an_refcnt != 0); \ + membar_exit(); \ + if (atomic_add_32_nv(&(areq)->an_refcnt, -1) == 0) \ + kcf_free_req(areq); \ +} + +#define GET_REQ_TYPE(arg) *((kcf_call_type_t *)(arg)) + +#define NOTIFY_CLIENT(areq, err) (*(areq)->an_reqarg.cr_callback_func)(\ + (areq)->an_reqarg.cr_callback_arg, err); + +/* For internally generated call requests for dual operations */ +typedef struct kcf_call_req { + crypto_call_req_t kr_callreq; /* external client call req */ + kcf_req_params_t kr_params; /* Params saved for next call */ + kcf_areq_node_t *kr_areq; /* Use this areq */ + off_t kr_saveoffset; + size_t kr_savelen; +} kcf_dual_req_t; + +/* + * The following are some what similar to macros in callo.h, which implement + * callout tables. + * + * The lower four bits of the ID are used to encode the table ID to + * index in to. The REQID_COUNTER_HIGH bit is used to avoid any check for + * wrap around when generating ID. We assume that there won't be a request + * which takes more time than 2^^(sizeof (long) - 5) other requests submitted + * after it. This ensures there won't be any ID collision. + */ +#define REQID_COUNTER_HIGH (1UL << (8 * sizeof (long) - 1)) +#define REQID_COUNTER_SHIFT 4 +#define REQID_COUNTER_LOW (1 << REQID_COUNTER_SHIFT) +#define REQID_TABLES 16 +#define REQID_TABLE_MASK (REQID_TABLES - 1) + +#define REQID_BUCKETS 512 +#define REQID_BUCKET_MASK (REQID_BUCKETS - 1) +#define REQID_HASH(id) (((id) >> REQID_COUNTER_SHIFT) & REQID_BUCKET_MASK) + +#define GET_REQID(areq) (areq)->an_reqarg.cr_reqid +#define SET_REQID(areq, val) GET_REQID(areq) = val + +/* + * Hash table for async requests. + */ +typedef struct kcf_reqid_table { + kmutex_t rt_lock; + crypto_req_id_t rt_curid; + kcf_areq_node_t *rt_idhash[REQID_BUCKETS]; +} kcf_reqid_table_t; + +/* + * Global software provider queue structure. Requests to be + * handled by a SW provider and have the ALWAYS_QUEUE flag set + * get queued here. + */ +typedef struct kcf_global_swq { + /* + * gs_cv and gs_lock are used to wait for new requests. + * gs_lock protects the changes to the queue. + */ + kcondvar_t gs_cv; + kmutex_t gs_lock; + uint_t gs_njobs; + uint_t gs_maxjobs; + kcf_areq_node_t *gs_first; + kcf_areq_node_t *gs_last; +} kcf_global_swq_t; + + +/* + * Internal representation of a canonical context. We contain crypto_ctx_t + * structure in order to have just one memory allocation. The SPI + * ((crypto_ctx_t *)ctx)->cc_framework_private maps to this structure. + */ +typedef struct kcf_context { + crypto_ctx_t kc_glbl_ctx; + uint_t kc_refcnt; + kmutex_t kc_in_use_lock; + /* + * kc_req_chain_first and kc_req_chain_last are used to chain + * multiple async requests using the same context. They should be + * NULL for sync requests. + */ + kcf_areq_node_t *kc_req_chain_first; + kcf_areq_node_t *kc_req_chain_last; + kcf_provider_desc_t *kc_prov_desc; /* Prov. descriptor */ + kcf_provider_desc_t *kc_sw_prov_desc; /* Prov. descriptor */ + kcf_mech_entry_t *kc_mech; + struct kcf_context *kc_secondctx; /* for dual contexts */ +} kcf_context_t; + +/* + * Bump up the reference count on the framework private context. A + * global context or a request that references this structure should + * do a hold. + */ +#define KCF_CONTEXT_REFHOLD(ictx) { \ + atomic_add_32(&(ictx)->kc_refcnt, 1); \ + ASSERT((ictx)->kc_refcnt != 0); \ +} + +/* + * Decrement the reference count on the framework private context. + * When the last reference is released, the framework private + * context structure is freed along with the global context. + */ +#define KCF_CONTEXT_REFRELE(ictx) { \ + ASSERT((ictx)->kc_refcnt != 0); \ + membar_exit(); \ + if (atomic_add_32_nv(&(ictx)->kc_refcnt, -1) == 0) \ + kcf_free_context(ictx); \ +} + +/* + * Check if we can release the context now. In case of CRYPTO_QUEUED + * we do not release it as we can do it only after the provider notified + * us. In case of CRYPTO_BUSY, the client can retry the request using + * the context, so we do not release the context. + * + * This macro should be called only from the final routine in + * an init/update/final sequence. We do not release the context in case + * of update operations. We require the consumer to free it + * explicitly, in case it wants to abandon the operation. This is done + * as there may be mechanisms in ECB mode that can continue even if + * an operation on a block fails. + */ +#define KCF_CONTEXT_COND_RELEASE(rv, kcf_ctx) { \ + if (KCF_CONTEXT_DONE(rv)) \ + KCF_CONTEXT_REFRELE(kcf_ctx); \ +} + +/* + * This macro determines whether we're done with a context. + */ +#define KCF_CONTEXT_DONE(rv) \ + ((rv) != CRYPTO_QUEUED && (rv) != CRYPTO_BUSY && \ + (rv) != CRYPTO_BUFFER_TOO_SMALL) + +/* + * A crypto_ctx_template_t is internally a pointer to this struct + */ +typedef struct kcf_ctx_template { + crypto_kcf_provider_handle_t ct_prov_handle; /* provider handle */ + uint_t ct_generation; /* generation # */ + size_t ct_size; /* for freeing */ + crypto_spi_ctx_template_t ct_prov_tmpl; /* context template */ + /* from the SW prov */ +} kcf_ctx_template_t; + +/* + * Structure for pool of threads working on global software queue. + */ +typedef struct kcf_pool { + uint32_t kp_threads; /* Number of threads in pool */ + uint32_t kp_idlethreads; /* Idle threads in pool */ + uint32_t kp_blockedthreads; /* Blocked threads in pool */ + + /* + * cv & lock to monitor the condition when no threads + * are around. In this case the failover thread kicks in. + */ + kcondvar_t kp_nothr_cv; + kmutex_t kp_thread_lock; + + /* Userspace thread creator variables. */ + boolean_t kp_signal_create_thread; /* Create requested flag */ + int kp_nthrs; /* # of threads to create */ + boolean_t kp_user_waiting; /* Thread waiting for work */ + + /* + * cv & lock for the condition where more threads need to be + * created. kp_user_lock also protects the three fileds above. + */ + kcondvar_t kp_user_cv; /* Creator cond. variable */ + kmutex_t kp_user_lock; /* Creator lock */ +} kcf_pool_t; + + +/* + * State of a crypto bufcall element. + */ +typedef enum cbuf_state { + CBUF_FREE = 1, + CBUF_WAITING, + CBUF_RUNNING +} cbuf_state_t; + +/* + * Structure of a crypto bufcall element. + */ +typedef struct kcf_cbuf_elem { + /* + * lock and cv to wait for CBUF_RUNNING to be done + * kc_lock also protects kc_state. + */ + kmutex_t kc_lock; + kcondvar_t kc_cv; + cbuf_state_t kc_state; + + struct kcf_cbuf_elem *kc_next; + struct kcf_cbuf_elem *kc_prev; + + void (*kc_func)(void *arg); + void *kc_arg; +} kcf_cbuf_elem_t; + +/* + * State of a notify element. + */ +typedef enum ntfy_elem_state { + NTFY_WAITING = 1, + NTFY_RUNNING +} ntfy_elem_state_t; + +/* + * Structure of a notify list element. + */ +typedef struct kcf_ntfy_elem { + /* + * lock and cv to wait for NTFY_RUNNING to be done. + * kn_lock also protects kn_state. + */ + kmutex_t kn_lock; + kcondvar_t kn_cv; + ntfy_elem_state_t kn_state; + + struct kcf_ntfy_elem *kn_next; + struct kcf_ntfy_elem *kn_prev; + + crypto_notify_callback_t kn_func; + uint32_t kn_event_mask; +} kcf_ntfy_elem_t; + + +/* + * The following values are based on the assumption that it would + * take around eight cpus to load a hardware provider (This is true for + * at least one product) and a kernel client may come from different + * low-priority interrupt levels. We will have CYRPTO_TASKQ_MIN number + * of cached taskq entries. The CRYPTO_TASKQ_MAX number is based on + * a throughput of 1GB/s using 512-byte buffers. These are just + * reasonable estimates and might need to change in future. + */ +#define CRYPTO_TASKQ_THREADS 8 +#define CYRPTO_TASKQ_MIN 64 +#define CRYPTO_TASKQ_MAX 2 * 1024 * 1024 + +extern int crypto_taskq_threads; +extern int crypto_taskq_minalloc; +extern int crypto_taskq_maxalloc; +extern kcf_global_swq_t *gswq; +extern int kcf_maxthreads; +extern int kcf_minthreads; + +/* + * All pending crypto bufcalls are put on a list. cbuf_list_lock + * protects changes to this list. + */ +extern kmutex_t cbuf_list_lock; +extern kcondvar_t cbuf_list_cv; + +/* + * All event subscribers are put on a list. kcf_notify_list_lock + * protects changes to this list. + */ +extern kmutex_t ntfy_list_lock; +extern kcondvar_t ntfy_list_cv; + +boolean_t kcf_get_next_logical_provider_member(kcf_provider_desc_t *, + kcf_provider_desc_t *, kcf_provider_desc_t **); +extern int kcf_get_hardware_provider(crypto_mech_type_t, crypto_mech_type_t, + boolean_t, kcf_provider_desc_t *, kcf_provider_desc_t **, + crypto_func_group_t); +extern int kcf_get_hardware_provider_nomech(offset_t, offset_t, + boolean_t, kcf_provider_desc_t *, kcf_provider_desc_t **); +extern void kcf_free_triedlist(kcf_prov_tried_t *); +extern kcf_prov_tried_t *kcf_insert_triedlist(kcf_prov_tried_t **, + kcf_provider_desc_t *, int); +extern kcf_provider_desc_t *kcf_get_mech_provider(crypto_mech_type_t, + kcf_mech_entry_t **, int *, kcf_prov_tried_t *, crypto_func_group_t, + boolean_t, size_t); +extern kcf_provider_desc_t *kcf_get_dual_provider(crypto_mechanism_t *, + crypto_mechanism_t *, kcf_mech_entry_t **, crypto_mech_type_t *, + crypto_mech_type_t *, int *, kcf_prov_tried_t *, + crypto_func_group_t, crypto_func_group_t, boolean_t, size_t); +extern crypto_ctx_t *kcf_new_ctx(crypto_call_req_t *, kcf_provider_desc_t *, + crypto_session_id_t); +extern int kcf_submit_request(kcf_provider_desc_t *, crypto_ctx_t *, + crypto_call_req_t *, kcf_req_params_t *, boolean_t); +extern void kcf_sched_destroy(void); +extern void kcf_sched_init(void); +extern void kcf_sched_start(void); +extern void kcf_sop_done(kcf_sreq_node_t *, int); +extern void kcf_aop_done(kcf_areq_node_t *, int); +extern int common_submit_request(kcf_provider_desc_t *, + crypto_ctx_t *, kcf_req_params_t *, crypto_req_handle_t); +extern void kcf_free_context(kcf_context_t *); + +extern int kcf_svc_wait(int *); +extern int kcf_svc_do_run(void); +extern int kcf_need_signature_verification(kcf_provider_desc_t *); +extern void kcf_verify_signature(void *); +extern struct modctl *kcf_get_modctl(crypto_provider_info_t *); +extern void verify_unverified_providers(void); +extern void kcf_free_req(kcf_areq_node_t *areq); +extern void crypto_bufcall_service(void); + +extern void kcf_walk_ntfylist(uint32_t, void *); +extern void kcf_do_notify(kcf_provider_desc_t *, boolean_t); + +extern kcf_dual_req_t *kcf_alloc_req(crypto_call_req_t *); +extern void kcf_next_req(void *, int); +extern void kcf_last_req(void *, int); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_SCHED_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/crypto/spi.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/crypto/spi.h @@ -0,0 +1,726 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_CRYPTO_SPI_H +#define _SYS_CRYPTO_SPI_H + +/* + * CSPI: Cryptographic Service Provider Interface. + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CONSTIFY_PLUGIN +#define __no_const __attribute__((no_const)) +#else +#define __no_const +#endif /* CONSTIFY_PLUGIN */ + +#define CRYPTO_SPI_VERSION_1 1 +#define CRYPTO_SPI_VERSION_2 2 +#define CRYPTO_SPI_VERSION_3 3 + +/* + * Provider-private handle. This handle is specified by a provider + * when it registers by means of the pi_provider_handle field of + * the crypto_provider_info structure, and passed to the provider + * when its entry points are invoked. + */ +typedef void *crypto_provider_handle_t; + +/* + * Context templates can be used to by software providers to pre-process + * keying material, such as key schedules. They are allocated by + * a software provider create_ctx_template(9E) entry point, and passed + * as argument to initialization and atomic provider entry points. + */ +typedef void *crypto_spi_ctx_template_t; + +/* + * Request handles are used by the kernel to identify an asynchronous + * request being processed by a provider. It is passed by the kernel + * to a hardware provider when submitting a request, and must be + * specified by a provider when calling crypto_op_notification(9F) + */ +typedef void *crypto_req_handle_t; + +/* Values for cc_flags field */ +#define CRYPTO_INIT_OPSTATE 0x00000001 /* allocate and init cc_opstate */ +#define CRYPTO_USE_OPSTATE 0x00000002 /* .. start using it as context */ + +/* + * The context structure is passed from the kernel to a provider. + * It contains the information needed to process a multi-part or + * single part operation. The context structure is not used + * by atomic operations. + * + * Parameters needed to perform a cryptographic operation, such + * as keys, mechanisms, input and output buffers, are passed + * as separate arguments to Provider routines. + */ +typedef struct crypto_ctx { + crypto_provider_handle_t cc_provider; + crypto_session_id_t cc_session; + void *cc_provider_private; /* owned by provider */ + void *cc_framework_private; /* owned by framework */ + uint32_t cc_flags; /* flags */ + void *cc_opstate; /* state */ +} crypto_ctx_t; + +/* + * Extended provider information. + */ + +/* + * valid values for ei_flags field of extended info structure + * They match the RSA Security, Inc PKCS#11 tokenInfo flags. + */ +#define CRYPTO_EXTF_RNG 0x00000001 +#define CRYPTO_EXTF_WRITE_PROTECTED 0x00000002 +#define CRYPTO_EXTF_LOGIN_REQUIRED 0x00000004 +#define CRYPTO_EXTF_USER_PIN_INITIALIZED 0x00000008 +#define CRYPTO_EXTF_CLOCK_ON_TOKEN 0x00000040 +#define CRYPTO_EXTF_PROTECTED_AUTHENTICATION_PATH 0x00000100 +#define CRYPTO_EXTF_DUAL_CRYPTO_OPERATIONS 0x00000200 +#define CRYPTO_EXTF_TOKEN_INITIALIZED 0x00000400 +#define CRYPTO_EXTF_USER_PIN_COUNT_LOW 0x00010000 +#define CRYPTO_EXTF_USER_PIN_FINAL_TRY 0x00020000 +#define CRYPTO_EXTF_USER_PIN_LOCKED 0x00040000 +#define CRYPTO_EXTF_USER_PIN_TO_BE_CHANGED 0x00080000 +#define CRYPTO_EXTF_SO_PIN_COUNT_LOW 0x00100000 +#define CRYPTO_EXTF_SO_PIN_FINAL_TRY 0x00200000 +#define CRYPTO_EXTF_SO_PIN_LOCKED 0x00400000 +#define CRYPTO_EXTF_SO_PIN_TO_BE_CHANGED 0x00800000 + +/* + * The crypto_control_ops structure contains pointers to control + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_control_ops { + void (*provider_status)(crypto_provider_handle_t, uint_t *); +} __no_const crypto_control_ops_t; + +/* + * The crypto_ctx_ops structure contains points to context and context + * templates management operations for cryptographic providers. It is + * passed through the crypto_ops(9S) structure when providers register + * with the kernel using crypto_register_provider(9F). + */ +typedef struct crypto_ctx_ops { + int (*create_ctx_template)(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t *, size_t *, crypto_req_handle_t); + int (*free_context)(crypto_ctx_t *); +} __no_const crypto_ctx_ops_t; + +/* + * The crypto_digest_ops structure contains pointers to digest + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_digest_ops { + int (*digest_init)(crypto_ctx_t *, crypto_mechanism_t *, + crypto_req_handle_t); + int (*digest)(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); + int (*digest_update)(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); + int (*digest_key)(crypto_ctx_t *, crypto_key_t *, crypto_req_handle_t); + int (*digest_final)(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); + int (*digest_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); +} __no_const crypto_digest_ops_t; + +/* + * The crypto_cipher_ops structure contains pointers to encryption + * and decryption operations for cryptographic providers. It is + * passed through the crypto_ops(9S) structure when providers register + * with the kernel using crypto_register_provider(9F). + */ +typedef struct crypto_cipher_ops { + int (*encrypt_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*encrypt)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*encrypt_update)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*encrypt_final)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*encrypt_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); + + int (*decrypt_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*decrypt)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*decrypt_update)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*decrypt_final)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*decrypt_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); +} __no_const crypto_cipher_ops_t; + +/* + * The crypto_mac_ops structure contains pointers to MAC + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_mac_ops { + int (*mac_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*mac)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*mac_update)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*mac_final)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*mac_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*mac_verify_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); +} __no_const crypto_mac_ops_t; + +/* + * The crypto_sign_ops structure contains pointers to signing + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_sign_ops { + int (*sign_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*sign)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*sign_update)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*sign_final)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*sign_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*sign_recover_init)(crypto_ctx_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*sign_recover)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*sign_recover_atomic)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_data_t *, crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); +} __no_const crypto_sign_ops_t; + +/* + * The crypto_verify_ops structure contains pointers to verify + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_verify_ops { + int (*verify_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*do_verify)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*verify_update)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*verify_final)(crypto_ctx_t *, + crypto_data_t *, crypto_req_handle_t); + int (*verify_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*verify_recover_init)(crypto_ctx_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); + int (*verify_recover)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*verify_recover_atomic)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_data_t *, crypto_data_t *, crypto_spi_ctx_template_t, + crypto_req_handle_t); +} __no_const crypto_verify_ops_t; + +/* + * The crypto_dual_ops structure contains pointers to dual + * cipher and sign/verify operations for cryptographic providers. + * It is passed through the crypto_ops(9S) structure when + * providers register with the kernel using + * crypto_register_provider(9F). + */ +typedef struct crypto_dual_ops { + int (*digest_encrypt_update)( + crypto_ctx_t *, crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); + int (*decrypt_digest_update)( + crypto_ctx_t *, crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); + int (*sign_encrypt_update)( + crypto_ctx_t *, crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); + int (*decrypt_verify_update)( + crypto_ctx_t *, crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); +} __no_const crypto_dual_ops_t; + +/* + * The crypto_dual_cipher_mac_ops structure contains pointers to dual + * cipher and MAC operations for cryptographic providers. + * It is passed through the crypto_ops(9S) structure when + * providers register with the kernel using + * crypto_register_provider(9F). + */ +typedef struct crypto_dual_cipher_mac_ops { + int (*encrypt_mac_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*encrypt_mac)(crypto_ctx_t *, + crypto_data_t *, crypto_dual_data_t *, crypto_data_t *, + crypto_req_handle_t); + int (*encrypt_mac_update)(crypto_ctx_t *, + crypto_data_t *, crypto_dual_data_t *, crypto_req_handle_t); + int (*encrypt_mac_final)(crypto_ctx_t *, + crypto_dual_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*encrypt_mac_atomic)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_data_t *, crypto_dual_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, + crypto_spi_ctx_template_t, crypto_req_handle_t); + + int (*mac_decrypt_init)(crypto_ctx_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*mac_decrypt)(crypto_ctx_t *, + crypto_dual_data_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); + int (*mac_decrypt_update)(crypto_ctx_t *, + crypto_dual_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*mac_decrypt_final)(crypto_ctx_t *, + crypto_data_t *, crypto_data_t *, crypto_req_handle_t); + int (*mac_decrypt_atomic)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_dual_data_t *, + crypto_data_t *, crypto_data_t *, crypto_spi_ctx_template_t, + crypto_spi_ctx_template_t, crypto_req_handle_t); + int (*mac_verify_decrypt_atomic)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, crypto_key_t *, + crypto_mechanism_t *, crypto_key_t *, crypto_dual_data_t *, + crypto_data_t *, crypto_data_t *, crypto_spi_ctx_template_t, + crypto_spi_ctx_template_t, crypto_req_handle_t); +} __no_const crypto_dual_cipher_mac_ops_t; + +/* + * The crypto_random_number_ops structure contains pointers to random + * number operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_random_number_ops { + int (*seed_random)(crypto_provider_handle_t, crypto_session_id_t, + uchar_t *, size_t, uint_t, uint32_t, crypto_req_handle_t); + int (*generate_random)(crypto_provider_handle_t, crypto_session_id_t, + uchar_t *, size_t, crypto_req_handle_t); +} __no_const crypto_random_number_ops_t; + +/* + * Flag values for seed_random. + */ +#define CRYPTO_SEED_NOW 0x00000001 + +/* + * The crypto_session_ops structure contains pointers to session + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_session_ops { + int (*session_open)(crypto_provider_handle_t, crypto_session_id_t *, + crypto_req_handle_t); + int (*session_close)(crypto_provider_handle_t, crypto_session_id_t, + crypto_req_handle_t); + int (*session_login)(crypto_provider_handle_t, crypto_session_id_t, + crypto_user_type_t, char *, size_t, crypto_req_handle_t); + int (*session_logout)(crypto_provider_handle_t, crypto_session_id_t, + crypto_req_handle_t); +} __no_const crypto_session_ops_t; + +/* + * The crypto_object_ops structure contains pointers to object + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_object_ops { + int (*object_create)(crypto_provider_handle_t, crypto_session_id_t, + crypto_object_attribute_t *, uint_t, crypto_object_id_t *, + crypto_req_handle_t); + int (*object_copy)(crypto_provider_handle_t, crypto_session_id_t, + crypto_object_id_t, crypto_object_attribute_t *, uint_t, + crypto_object_id_t *, crypto_req_handle_t); + int (*object_destroy)(crypto_provider_handle_t, crypto_session_id_t, + crypto_object_id_t, crypto_req_handle_t); + int (*object_get_size)(crypto_provider_handle_t, crypto_session_id_t, + crypto_object_id_t, size_t *, crypto_req_handle_t); + int (*object_get_attribute_value)(crypto_provider_handle_t, + crypto_session_id_t, crypto_object_id_t, + crypto_object_attribute_t *, uint_t, crypto_req_handle_t); + int (*object_set_attribute_value)(crypto_provider_handle_t, + crypto_session_id_t, crypto_object_id_t, + crypto_object_attribute_t *, uint_t, crypto_req_handle_t); + int (*object_find_init)(crypto_provider_handle_t, crypto_session_id_t, + crypto_object_attribute_t *, uint_t, void **, + crypto_req_handle_t); + int (*object_find)(crypto_provider_handle_t, void *, + crypto_object_id_t *, uint_t, uint_t *, crypto_req_handle_t); + int (*object_find_final)(crypto_provider_handle_t, void *, + crypto_req_handle_t); +} __no_const crypto_object_ops_t; + +/* + * The crypto_key_ops structure contains pointers to key + * operations for cryptographic providers. It is passed through + * the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_key_ops { + int (*key_generate)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_object_attribute_t *, uint_t, + crypto_object_id_t *, crypto_req_handle_t); + int (*key_generate_pair)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_object_attribute_t *, uint_t, + crypto_object_attribute_t *, uint_t, crypto_object_id_t *, + crypto_object_id_t *, crypto_req_handle_t); + int (*key_wrap)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_object_id_t *, + uchar_t *, size_t *, crypto_req_handle_t); + int (*key_unwrap)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, uchar_t *, size_t *, + crypto_object_attribute_t *, uint_t, + crypto_object_id_t *, crypto_req_handle_t); + int (*key_derive)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_object_attribute_t *, + uint_t, crypto_object_id_t *, crypto_req_handle_t); + int (*key_check)(crypto_provider_handle_t, crypto_mechanism_t *, + crypto_key_t *); +} __no_const crypto_key_ops_t; + +/* + * The crypto_provider_management_ops structure contains pointers + * to management operations for cryptographic providers. It is passed + * through the crypto_ops(9S) structure when providers register with the + * kernel using crypto_register_provider(9F). + */ +typedef struct crypto_provider_management_ops { + int (*ext_info)(crypto_provider_handle_t, + crypto_provider_ext_info_t *, crypto_req_handle_t); + int (*init_token)(crypto_provider_handle_t, char *, size_t, + char *, crypto_req_handle_t); + int (*init_pin)(crypto_provider_handle_t, crypto_session_id_t, + char *, size_t, crypto_req_handle_t); + int (*set_pin)(crypto_provider_handle_t, crypto_session_id_t, + char *, size_t, char *, size_t, crypto_req_handle_t); +} __no_const crypto_provider_management_ops_t; + +typedef struct crypto_mech_ops { + int (*copyin_mechanism)(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_mechanism_t *, int *, int); + int (*copyout_mechanism)(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_mechanism_t *, int *, int); + int (*free_mechanism)(crypto_provider_handle_t, crypto_mechanism_t *); +} __no_const crypto_mech_ops_t; + +typedef struct crypto_nostore_key_ops { + int (*nostore_key_generate)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, + crypto_object_attribute_t *, uint_t, crypto_object_attribute_t *, + uint_t, crypto_req_handle_t); + int (*nostore_key_generate_pair)(crypto_provider_handle_t, + crypto_session_id_t, crypto_mechanism_t *, + crypto_object_attribute_t *, uint_t, crypto_object_attribute_t *, + uint_t, crypto_object_attribute_t *, uint_t, + crypto_object_attribute_t *, uint_t, crypto_req_handle_t); + int (*nostore_key_derive)(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_object_attribute_t *, + uint_t, crypto_object_attribute_t *, uint_t, crypto_req_handle_t); +} __no_const crypto_nostore_key_ops_t; + +/* + * The crypto_ops(9S) structure contains the structures containing + * the pointers to functions implemented by cryptographic providers. + * It is specified as part of the crypto_provider_info(9S) + * supplied by a provider when it registers with the kernel + * by calling crypto_register_provider(9F). + */ +typedef struct crypto_ops_v1 { + crypto_control_ops_t *co_control_ops; + crypto_digest_ops_t *co_digest_ops; + crypto_cipher_ops_t *co_cipher_ops; + crypto_mac_ops_t *co_mac_ops; + crypto_sign_ops_t *co_sign_ops; + crypto_verify_ops_t *co_verify_ops; + crypto_dual_ops_t *co_dual_ops; + crypto_dual_cipher_mac_ops_t *co_dual_cipher_mac_ops; + crypto_random_number_ops_t *co_random_ops; + crypto_session_ops_t *co_session_ops; + crypto_object_ops_t *co_object_ops; + crypto_key_ops_t *co_key_ops; + crypto_provider_management_ops_t *co_provider_ops; + crypto_ctx_ops_t *co_ctx_ops; +} crypto_ops_v1_t; + +typedef struct crypto_ops_v2 { + crypto_ops_v1_t v1_ops; + crypto_mech_ops_t *co_mech_ops; +} crypto_ops_v2_t; + +typedef struct crypto_ops_v3 { + crypto_ops_v2_t v2_ops; + crypto_nostore_key_ops_t *co_nostore_key_ops; +} crypto_ops_v3_t; + +typedef struct crypto_ops { + union { + crypto_ops_v3_t cou_v3; + crypto_ops_v2_t cou_v2; + crypto_ops_v1_t cou_v1; + } cou; +} crypto_ops_t; + +#define co_control_ops cou.cou_v1.co_control_ops +#define co_digest_ops cou.cou_v1.co_digest_ops +#define co_cipher_ops cou.cou_v1.co_cipher_ops +#define co_mac_ops cou.cou_v1.co_mac_ops +#define co_sign_ops cou.cou_v1.co_sign_ops +#define co_verify_ops cou.cou_v1.co_verify_ops +#define co_dual_ops cou.cou_v1.co_dual_ops +#define co_dual_cipher_mac_ops cou.cou_v1.co_dual_cipher_mac_ops +#define co_random_ops cou.cou_v1.co_random_ops +#define co_session_ops cou.cou_v1.co_session_ops +#define co_object_ops cou.cou_v1.co_object_ops +#define co_key_ops cou.cou_v1.co_key_ops +#define co_provider_ops cou.cou_v1.co_provider_ops +#define co_ctx_ops cou.cou_v1.co_ctx_ops +#define co_mech_ops cou.cou_v2.co_mech_ops +#define co_nostore_key_ops cou.cou_v3.co_nostore_key_ops + +/* + * The mechanism info structure crypto_mech_info_t contains a function group + * bit mask cm_func_group_mask. This field, of type crypto_func_group_t, + * specifies the provider entry point that can be used a particular + * mechanism. The function group mask is a combination of the following values. + */ + +typedef uint32_t crypto_func_group_t; + + +#define CRYPTO_FG_ENCRYPT 0x00000001 /* encrypt_init() */ +#define CRYPTO_FG_DECRYPT 0x00000002 /* decrypt_init() */ +#define CRYPTO_FG_DIGEST 0x00000004 /* digest_init() */ +#define CRYPTO_FG_SIGN 0x00000008 /* sign_init() */ +#define CRYPTO_FG_SIGN_RECOVER 0x00000010 /* sign_recover_init() */ +#define CRYPTO_FG_VERIFY 0x00000020 /* verify_init() */ +#define CRYPTO_FG_VERIFY_RECOVER 0x00000040 /* verify_recover_init() */ +#define CRYPTO_FG_GENERATE 0x00000080 /* key_generate() */ +#define CRYPTO_FG_GENERATE_KEY_PAIR 0x00000100 /* key_generate_pair() */ +#define CRYPTO_FG_WRAP 0x00000200 /* key_wrap() */ +#define CRYPTO_FG_UNWRAP 0x00000400 /* key_unwrap() */ +#define CRYPTO_FG_DERIVE 0x00000800 /* key_derive() */ +#define CRYPTO_FG_MAC 0x00001000 /* mac_init() */ +#define CRYPTO_FG_ENCRYPT_MAC 0x00002000 /* encrypt_mac_init() */ +#define CRYPTO_FG_MAC_DECRYPT 0x00004000 /* decrypt_mac_init() */ +#define CRYPTO_FG_ENCRYPT_ATOMIC 0x00008000 /* encrypt_atomic() */ +#define CRYPTO_FG_DECRYPT_ATOMIC 0x00010000 /* decrypt_atomic() */ +#define CRYPTO_FG_MAC_ATOMIC 0x00020000 /* mac_atomic() */ +#define CRYPTO_FG_DIGEST_ATOMIC 0x00040000 /* digest_atomic() */ +#define CRYPTO_FG_SIGN_ATOMIC 0x00080000 /* sign_atomic() */ +#define CRYPTO_FG_SIGN_RECOVER_ATOMIC 0x00100000 /* sign_recover_atomic() */ +#define CRYPTO_FG_VERIFY_ATOMIC 0x00200000 /* verify_atomic() */ +#define CRYPTO_FG_VERIFY_RECOVER_ATOMIC 0x00400000 /* verify_recover_atomic() */ +#define CRYPTO_FG_ENCRYPT_MAC_ATOMIC 0x00800000 /* encrypt_mac_atomic() */ +#define CRYPTO_FG_MAC_DECRYPT_ATOMIC 0x01000000 /* mac_decrypt_atomic() */ +#define CRYPTO_FG_RESERVED 0x80000000 + +/* + * Maximum length of the pi_provider_description field of the + * crypto_provider_info structure. + */ +#define CRYPTO_PROVIDER_DESCR_MAX_LEN 64 + + +/* Bit mask for all the simple operations */ +#define CRYPTO_FG_SIMPLEOP_MASK (CRYPTO_FG_ENCRYPT | CRYPTO_FG_DECRYPT | \ + CRYPTO_FG_DIGEST | CRYPTO_FG_SIGN | CRYPTO_FG_VERIFY | CRYPTO_FG_MAC | \ + CRYPTO_FG_ENCRYPT_ATOMIC | CRYPTO_FG_DECRYPT_ATOMIC | \ + CRYPTO_FG_MAC_ATOMIC | CRYPTO_FG_DIGEST_ATOMIC | CRYPTO_FG_SIGN_ATOMIC | \ + CRYPTO_FG_VERIFY_ATOMIC) + +/* Bit mask for all the dual operations */ +#define CRYPTO_FG_MAC_CIPHER_MASK (CRYPTO_FG_ENCRYPT_MAC | \ + CRYPTO_FG_MAC_DECRYPT | CRYPTO_FG_ENCRYPT_MAC_ATOMIC | \ + CRYPTO_FG_MAC_DECRYPT_ATOMIC) + +/* Add other combos to CRYPTO_FG_DUAL_MASK */ +#define CRYPTO_FG_DUAL_MASK CRYPTO_FG_MAC_CIPHER_MASK + +/* + * The crypto_mech_info structure specifies one of the mechanisms + * supported by a cryptographic provider. The pi_mechanisms field of + * the crypto_provider_info structure contains a pointer to an array + * of crypto_mech_info's. + */ +typedef struct crypto_mech_info { + crypto_mech_name_t cm_mech_name; + crypto_mech_type_t cm_mech_number; + crypto_func_group_t cm_func_group_mask; + ssize_t cm_min_key_length; + ssize_t cm_max_key_length; + uint32_t cm_mech_flags; +} crypto_mech_info_t; + +/* Alias the old name to the new name for compatibility. */ +#define cm_keysize_unit cm_mech_flags + +/* + * The following is used by a provider that sets + * CRYPTO_HASH_NO_UPDATE. It needs to specify the maximum + * input data size it can digest in this field. + */ +#define cm_max_input_length cm_max_key_length + +/* + * crypto_kcf_provider_handle_t is a handle allocated by the kernel. + * It is returned after the provider registers with + * crypto_register_provider(), and must be specified by the provider + * when calling crypto_unregister_provider(), and + * crypto_provider_notification(). + */ +typedef uint_t crypto_kcf_provider_handle_t; + +/* + * Provider information. Passed as argument to crypto_register_provider(9F). + * Describes the provider and its capabilities. Multiple providers can + * register for the same device instance. In this case, the same + * pi_provider_dev must be specified with a different pi_provider_handle. + */ +typedef struct crypto_provider_info_v1 { + uint_t pi_interface_version; + char *pi_provider_description; + crypto_provider_type_t pi_provider_type; + crypto_provider_handle_t pi_provider_handle; + crypto_ops_t *pi_ops_vector; + uint_t pi_mech_list_count; + crypto_mech_info_t *pi_mechanisms; + uint_t pi_logical_provider_count; + crypto_kcf_provider_handle_t *pi_logical_providers; +} crypto_provider_info_v1_t; + +typedef struct crypto_provider_info_v2 { + crypto_provider_info_v1_t v1_info; + uint_t pi_flags; +} crypto_provider_info_v2_t; + +typedef struct crypto_provider_info { + union { + crypto_provider_info_v2_t piu_v2; + crypto_provider_info_v1_t piu_v1; + } piu; +} crypto_provider_info_t; + +#define pi_interface_version piu.piu_v1.pi_interface_version +#define pi_provider_description piu.piu_v1.pi_provider_description +#define pi_provider_type piu.piu_v1.pi_provider_type +#define pi_provider_handle piu.piu_v1.pi_provider_handle +#define pi_ops_vector piu.piu_v1.pi_ops_vector +#define pi_mech_list_count piu.piu_v1.pi_mech_list_count +#define pi_mechanisms piu.piu_v1.pi_mechanisms +#define pi_logical_provider_count piu.piu_v1.pi_logical_provider_count +#define pi_logical_providers piu.piu_v1.pi_logical_providers +#define pi_flags piu.piu_v2.pi_flags + +/* hidden providers can only be accessed via a logical provider */ +#define CRYPTO_HIDE_PROVIDER 0x00000001 +/* + * provider can not do multi-part digest (updates) and has a limit + * on maximum input data that it can digest. + */ +#define CRYPTO_HASH_NO_UPDATE 0x00000002 + +/* provider can handle the request without returning a CRYPTO_QUEUED */ +#define CRYPTO_SYNCHRONOUS 0x00000004 + +#define CRYPTO_PIFLAGS_RESERVED2 0x40000000 +#define CRYPTO_PIFLAGS_RESERVED1 0x80000000 + +/* + * Provider status passed by a provider to crypto_provider_notification(9F) + * and returned by the provider_stauts(9E) entry point. + */ +#define CRYPTO_PROVIDER_READY 0 +#define CRYPTO_PROVIDER_BUSY 1 +#define CRYPTO_PROVIDER_FAILED 2 + +/* + * Functions exported by Solaris to cryptographic providers. Providers + * call these functions to register and unregister, notify the kernel + * of state changes, and notify the kernel when a asynchronous request + * completed. + */ +extern int crypto_register_provider(crypto_provider_info_t *, + crypto_kcf_provider_handle_t *); +extern int crypto_unregister_provider(crypto_kcf_provider_handle_t); +extern void crypto_provider_notification(crypto_kcf_provider_handle_t, uint_t); +extern void crypto_op_notification(crypto_req_handle_t, int); +extern int crypto_kmflag(crypto_req_handle_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CRYPTO_SPI_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/ia32/asm_linkage.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/ia32/asm_linkage.h @@ -0,0 +1,307 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _IA32_SYS_ASM_LINKAGE_H +#define _IA32_SYS_ASM_LINKAGE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _ASM /* The remainder of this file is only for assembly files */ + +/* + * make annoying differences in assembler syntax go away + */ + +/* + * D16 and A16 are used to insert instructions prefixes; the + * macros help the assembler code be slightly more portable. + */ +#if !defined(__GNUC_AS__) +/* + * /usr/ccs/bin/as prefixes are parsed as separate instructions + */ +#define D16 data16; +#define A16 addr16; + +/* + * (There are some weird constructs in constant expressions) + */ +#define _CONST(const) [const] +#define _BITNOT(const) -1!_CONST(const) +#define _MUL(a, b) _CONST(a \* b) + +#else +/* + * Why not use the 'data16' and 'addr16' prefixes .. well, the + * assembler doesn't quite believe in real mode, and thus argues with + * us about what we're trying to do. + */ +#define D16 .byte 0x66; +#define A16 .byte 0x67; + +#define _CONST(const) (const) +#define _BITNOT(const) ~_CONST(const) +#define _MUL(a, b) _CONST(a * b) + +#endif + +/* + * C pointers are different sizes between i386 and amd64. + * These constants can be used to compute offsets into pointer arrays. + */ +#if defined(__amd64) +#define CLONGSHIFT 3 +#define CLONGSIZE 8 +#define CLONGMASK 7 +#elif defined(__i386) +#define CLONGSHIFT 2 +#define CLONGSIZE 4 +#define CLONGMASK 3 +#endif + +/* + * Since we know we're either ILP32 or LP64 .. + */ +#define CPTRSHIFT CLONGSHIFT +#define CPTRSIZE CLONGSIZE +#define CPTRMASK CLONGMASK + +#if CPTRSIZE != (1 << CPTRSHIFT) || CLONGSIZE != (1 << CLONGSHIFT) +#error "inconsistent shift constants" +#endif + +#if CPTRMASK != (CPTRSIZE - 1) || CLONGMASK != (CLONGSIZE - 1) +#error "inconsistent mask constants" +#endif + +#define ASM_ENTRY_ALIGN 16 + +/* + * SSE register alignment and save areas + */ + +#define XMM_SIZE 16 +#define XMM_ALIGN 16 + +#if defined(__amd64) + +#define SAVE_XMM_PROLOG(sreg, nreg) \ + subq $_CONST(_MUL(XMM_SIZE, nreg)), %rsp; \ + movq %rsp, sreg + +#define RSTOR_XMM_EPILOG(sreg, nreg) \ + addq $_CONST(_MUL(XMM_SIZE, nreg)), %rsp + +#elif defined(__i386) + +#define SAVE_XMM_PROLOG(sreg, nreg) \ + subl $_CONST(_MUL(XMM_SIZE, nreg) + XMM_ALIGN), %esp; \ + movl %esp, sreg; \ + addl $XMM_ALIGN, sreg; \ + andl $_BITNOT(XMM_ALIGN-1), sreg + +#define RSTOR_XMM_EPILOG(sreg, nreg) \ + addl $_CONST(_MUL(XMM_SIZE, nreg) + XMM_ALIGN), %esp; + +#endif /* __i386 */ + +/* + * profiling causes definitions of the MCOUNT and RTMCOUNT + * particular to the type + */ +#ifdef GPROF + +#define MCOUNT(x) \ + pushl %ebp; \ + movl %esp, %ebp; \ + call _mcount; \ + popl %ebp + +#endif /* GPROF */ + +#ifdef PROF + +#define MCOUNT(x) \ +/* CSTYLED */ \ + .lcomm .L_/**/x/**/1, 4, 4; \ + pushl %ebp; \ + movl %esp, %ebp; \ +/* CSTYLED */ \ + movl $.L_/**/x/**/1, %edx; \ + call _mcount; \ + popl %ebp + +#endif /* PROF */ + +/* + * if we are not profiling, MCOUNT should be defined to nothing + */ +#if !defined(PROF) && !defined(GPROF) +#define MCOUNT(x) +#endif /* !defined(PROF) && !defined(GPROF) */ + +#define RTMCOUNT(x) MCOUNT(x) + +/* + * Macro to define weak symbol aliases. These are similar to the ANSI-C + * #pragma weak _name = name + * except a compiler can determine type. The assembler must be told. Hence, + * the second parameter must be the type of the symbol (i.e.: function,...) + */ +#define ANSI_PRAGMA_WEAK(sym, stype) \ +/* CSTYLED */ \ + .weak _/**/sym; \ +/* CSTYLED */ \ + .type _/**/sym, @stype; \ +/* CSTYLED */ \ +_/**/sym = sym + +/* + * Like ANSI_PRAGMA_WEAK(), but for unrelated names, as in: + * #pragma weak sym1 = sym2 + */ +#define ANSI_PRAGMA_WEAK2(sym1, sym2, stype) \ + .weak sym1; \ + .type sym1, @stype; \ +sym1 = sym2 + +/* + * ENTRY provides the standard procedure entry code and an easy way to + * insert the calls to mcount for profiling. ENTRY_NP is identical, but + * never calls mcount. + */ +#define ENTRY(x) \ + .text; \ + .align ASM_ENTRY_ALIGN; \ + .globl x; \ + .type x, @function; \ +x: MCOUNT(x) + +#define ENTRY_NP(x) \ + .text; \ + .align ASM_ENTRY_ALIGN; \ + .globl x; \ + .type x, @function; \ +x: + +#define RTENTRY(x) \ + .text; \ + .align ASM_ENTRY_ALIGN; \ + .globl x; \ + .type x, @function; \ +x: RTMCOUNT(x) + +/* + * ENTRY2 is identical to ENTRY but provides two labels for the entry point. + */ +#define ENTRY2(x, y) \ + .text; \ + .align ASM_ENTRY_ALIGN; \ + .globl x, y; \ + .type x, @function; \ + .type y, @function; \ +/* CSTYLED */ \ +x: ; \ +y: MCOUNT(x) + +#define ENTRY_NP2(x, y) \ + .text; \ + .align ASM_ENTRY_ALIGN; \ + .globl x, y; \ + .type x, @function; \ + .type y, @function; \ +/* CSTYLED */ \ +x: ; \ +y: + + +/* + * ALTENTRY provides for additional entry points. + */ +#define ALTENTRY(x) \ + .globl x; \ + .type x, @function; \ +x: + +/* + * DGDEF and DGDEF2 provide global data declarations. + * + * DGDEF provides a word aligned word of storage. + * + * DGDEF2 allocates "sz" bytes of storage with **NO** alignment. This + * implies this macro is best used for byte arrays. + * + * DGDEF3 allocates "sz" bytes of storage with "algn" alignment. + */ +#define DGDEF2(name, sz) \ + .data; \ + .globl name; \ + .type name, @object; \ + .size name, sz; \ +name: + +#define DGDEF3(name, sz, algn) \ + .data; \ + .align algn; \ + .globl name; \ + .type name, @object; \ + .size name, sz; \ +name: + +#define DGDEF(name) DGDEF3(name, 4, 4) + +/* + * SET_SIZE trails a function and set the size for the ELF symbol table. + */ +#define SET_SIZE(x) \ + .size x, [.-x] + +/* + * NWORD provides native word value. + */ +#if defined(__amd64) + +/*CSTYLED*/ +#define NWORD quad + +#elif defined(__i386) + +#define NWORD long + +#endif /* __i386 */ + +#endif /* _ASM */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IA32_SYS_ASM_LINKAGE_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/ia32/stack.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/ia32/stack.h @@ -0,0 +1,160 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _IA32_SYS_STACK_H +#define _IA32_SYS_STACK_H + +#if !defined(_ASM) + +#include + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * In the x86 world, a stack frame looks like this: + * + * |--------------------------| + * 4n+8(%ebp) ->| argument word n | + * | ... | (Previous frame) + * 8(%ebp) ->| argument word 0 | + * |--------------------------|-------------------- + * 4(%ebp) ->| return address | + * |--------------------------| + * 0(%ebp) ->| previous %ebp (optional) | + * |--------------------------| + * -4(%ebp) ->| unspecified | (Current frame) + * | ... | + * 0(%esp) ->| variable size | + * |--------------------------| + */ + +/* + * Stack alignment macros. + */ + +#define STACK_ALIGN32 4 +#define STACK_ENTRY_ALIGN32 4 +#define STACK_BIAS32 0 +#define SA32(x) (((x)+(STACK_ALIGN32-1)) & ~(STACK_ALIGN32-1)) +#define STACK_RESERVE32 0 +#define MINFRAME32 0 + +#if defined(__amd64) + +/* + * In the amd64 world, a stack frame looks like this: + * + * |--------------------------| + * 8n+16(%rbp)->| argument word n | + * | ... | (Previous frame) + * 16(%rbp) ->| argument word 0 | + * |--------------------------|-------------------- + * 8(%rbp) ->| return address | + * |--------------------------| + * 0(%rbp) ->| previous %rbp | + * |--------------------------| + * -8(%rbp) ->| unspecified | (Current frame) + * | ... | + * 0(%rsp) ->| variable size | + * |--------------------------| + * -128(%rsp) ->| reserved for function | + * |--------------------------| + * + * The end of the input argument area must be aligned on a 16-byte + * boundary; i.e. (%rsp - 8) % 16 == 0 at function entry. + * + * The 128-byte location beyond %rsp is considered to be reserved for + * functions and is NOT modified by signal handlers. It can be used + * to store temporary data that is not needed across function calls. + */ + +/* + * Stack alignment macros. + */ + +#define STACK_ALIGN64 16 +#define STACK_ENTRY_ALIGN64 8 +#define STACK_BIAS64 0 +#define SA64(x) (((x)+(STACK_ALIGN64-1)) & ~(STACK_ALIGN64-1)) +#define STACK_RESERVE64 128 +#define MINFRAME64 0 + +#define STACK_ALIGN STACK_ALIGN64 +#define STACK_ENTRY_ALIGN STACK_ENTRY_ALIGN64 +#define STACK_BIAS STACK_BIAS64 +#define SA(x) SA64(x) +#define STACK_RESERVE STACK_RESERVE64 +#define MINFRAME MINFRAME64 + +#elif defined(__i386) + +#define STACK_ALIGN STACK_ALIGN32 +#define STACK_ENTRY_ALIGN STACK_ENTRY_ALIGN32 +#define STACK_BIAS STACK_BIAS32 +#define SA(x) SA32(x) +#define STACK_RESERVE STACK_RESERVE32 +#define MINFRAME MINFRAME32 + +#endif /* __i386 */ + +#if defined(_KERNEL) && !defined(_ASM) + +#if defined(DEBUG) +#if STACK_ALIGN == 4 +#define ASSERT_STACK_ALIGNED() \ + { \ + uint32_t __tmp; \ + ASSERT((((uintptr_t)&__tmp) & (STACK_ALIGN - 1)) == 0); \ + } +#elif (STACK_ALIGN == 16) && (_LONG_DOUBLE_ALIGNMENT == 16) +#define ASSERT_STACK_ALIGNED() \ + { \ + long double __tmp; \ + ASSERT((((uintptr_t)&__tmp) & (STACK_ALIGN - 1)) == 0); \ + } +#endif +#else /* DEBUG */ +#define ASSERT_STACK_ALIGNED() +#endif /* DEBUG */ + +struct regs; + +void traceregs(struct regs *); +void traceback(caddr_t); + +#endif /* defined(_KERNEL) && !defined(_ASM) */ + +#define STACK_GROWTH_DOWN /* stacks grow from high to low addresses */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IA32_SYS_STACK_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/ia32/trap.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/ia32/trap.h @@ -0,0 +1,107 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */ +/* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */ +/* All Rights Reserved */ + +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _IA32_SYS_TRAP_H +#define _IA32_SYS_TRAP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Trap type values + */ + +#define T_ZERODIV 0x0 /* #de divide by 0 error */ +#define T_SGLSTP 0x1 /* #db single step */ +#define T_NMIFLT 0x2 /* NMI */ +#define T_BPTFLT 0x3 /* #bp breakpoint fault, INT3 insn */ +#define T_OVFLW 0x4 /* #of INTO overflow fault */ +#define T_BOUNDFLT 0x5 /* #br BOUND insn fault */ +#define T_ILLINST 0x6 /* #ud invalid opcode fault */ +#define T_NOEXTFLT 0x7 /* #nm device not available: x87 */ +#define T_DBLFLT 0x8 /* #df double fault */ +#define T_EXTOVRFLT 0x9 /* [not generated: 386 only] */ +#define T_TSSFLT 0xa /* #ts invalid TSS fault */ +#define T_SEGFLT 0xb /* #np segment not present fault */ +#define T_STKFLT 0xc /* #ss stack fault */ +#define T_GPFLT 0xd /* #gp general protection fault */ +#define T_PGFLT 0xe /* #pf page fault */ +#define T_EXTERRFLT 0x10 /* #mf x87 FPU error fault */ +#define T_ALIGNMENT 0x11 /* #ac alignment check error */ +#define T_MCE 0x12 /* #mc machine check exception */ +#define T_SIMDFPE 0x13 /* #xm SSE/SSE exception */ +#define T_DBGENTR 0x14 /* debugger entry */ +#define T_ENDPERR 0x21 /* emulated extension error flt */ +#define T_ENOEXTFLT 0x20 /* emulated ext not present */ +#define T_FASTTRAP 0xd2 /* fast system call */ +#define T_SYSCALLINT 0x91 /* general system call */ +#define T_DTRACE_RET 0x7f /* DTrace pid return */ +#define T_INT80 0x80 /* int80 handler for linux emulation */ +#define T_SOFTINT 0x50fd /* pseudo softint trap type */ + +/* + * Pseudo traps. + */ +#define T_INTERRUPT 0x100 +#define T_FAULT 0x200 +#define T_AST 0x400 +#define T_SYSCALL 0x180 + + +/* + * Values of error code on stack in case of page fault + */ + +#define PF_ERR_MASK 0x01 /* Mask for error bit */ +#define PF_ERR_PAGE 0x00 /* page not present */ +#define PF_ERR_PROT 0x01 /* protection error */ +#define PF_ERR_WRITE 0x02 /* fault caused by write (else read) */ +#define PF_ERR_USER 0x04 /* processor was in user mode */ + /* (else supervisor) */ +#define PF_ERR_EXEC 0x10 /* attempt to execute a No eXec page (AMD) */ + +/* + * Definitions for fast system call subfunctions + */ +#define T_FNULL 0 /* Null trap for testing */ +#define T_FGETFP 1 /* Get emulated FP context */ +#define T_FSETFP 2 /* Set emulated FP context */ +#define T_GETHRTIME 3 /* Get high resolution time */ +#define T_GETHRVTIME 4 /* Get high resolution virtual time */ +#define T_GETHRESTIME 5 /* Get high resolution time */ +#define T_GETLGRP 6 /* Get home lgrpid */ + +#define T_LASTFAST 6 /* Last valid subfunction */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IA32_SYS_TRAP_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/modctl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/modctl.h @@ -0,0 +1,477 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_MODCTL_H +#define _SYS_MODCTL_H + +/* + * loadable module support. + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct modlmisc; +struct modlinkage; + +/* + * The following structure defines the operations used by modctl + * to load and unload modules. Each supported loadable module type + * requires a set of mod_ops. + */ +struct mod_ops { + int (*modm_install)(struct modlmisc *, struct modlinkage *); + int (*modm_remove)(struct modlmisc *, struct modlinkage *); + int (*modm_info)(void *, struct modlinkage *, int *); +}; + +/* + * The defined set of mod_ops structures for each loadable module type + * Defined in modctl.c + */ +extern struct mod_ops mod_brandops; +#if defined(__i386) || defined(__amd64) +extern struct mod_ops mod_cpuops; +#endif +extern struct mod_ops mod_cryptoops; +extern struct mod_ops mod_driverops; +extern struct mod_ops mod_execops; +extern struct mod_ops mod_fsops; +extern struct mod_ops mod_miscops; +extern struct mod_ops mod_schedops; +extern struct mod_ops mod_strmodops; +extern struct mod_ops mod_syscallops; +extern struct mod_ops mod_sockmodops; +#ifdef _SYSCALL32_IMPL +extern struct mod_ops mod_syscallops32; +#endif +extern struct mod_ops mod_dacfops; +extern struct mod_ops mod_ippops; +extern struct mod_ops mod_pcbeops; +extern struct mod_ops mod_devfsops; +extern struct mod_ops mod_kiconvops; + +/* + * Definitions for the module specific linkage structures. + * The first two fields are the same in all of the structures. + * The linkinfo is for informational purposes only and is returned by + * modctl with the MODINFO cmd. + */ + +/* For cryptographic providers */ +struct modlcrypto { + struct mod_ops *crypto_modops; + char *crypto_linkinfo; +}; + +/* For misc */ +struct modlmisc { + struct mod_ops *misc_modops; + char *misc_linkinfo; +}; + +/* + * Revision number of loadable modules support. This is the value + * that must be used in the modlinkage structure. + */ +#define MODREV_1 1 + +/* + * The modlinkage structure is the structure that the module writer + * provides to the routines to install, remove, and stat a module. + * The ml_linkage element is an array of pointers to linkage structures. + * For most modules there is only one linkage structure. We allocate + * enough space for 3 linkage structures which happens to be the most + * we have in any sun supplied module. For those modules with more + * than 3 linkage structures (which is very unlikely), a modlinkage + * structure must be kmem_alloc'd in the module wrapper to be big enough + * for all of the linkage structures. + */ +struct modlinkage { + int ml_rev; /* rev of loadable modules system */ +#ifdef _LP64 + void *ml_linkage[7]; /* more space in 64-bit OS */ +#else + void *ml_linkage[4]; /* NULL terminated list of */ + /* linkage structures */ +#endif +}; + +/* + * commands. These are the commands supported by the modctl system call. + */ +#define MODLOAD 0 +#define MODUNLOAD 1 +#define MODINFO 2 +#define MODRESERVED 3 +#define MODSETMINIROOT 4 +#define MODADDMAJBIND 5 +#define MODGETPATH 6 +#define MODREADSYSBIND 7 +#define MODGETMAJBIND 8 +#define MODGETNAME 9 +#define MODSIZEOF_DEVID 10 +#define MODGETDEVID 11 +#define MODSIZEOF_MINORNAME 12 +#define MODGETMINORNAME 13 +#define MODGETPATHLEN 14 +#define MODEVENTS 15 +#define MODGETFBNAME 16 +#define MODREREADDACF 17 +#define MODLOADDRVCONF 18 +#define MODUNLOADDRVCONF 19 +#define MODREMMAJBIND 20 +#define MODDEVT2INSTANCE 21 +#define MODGETDEVFSPATH_LEN 22 +#define MODGETDEVFSPATH 23 +#define MODDEVID2PATHS 24 +#define MODSETDEVPOLICY 26 +#define MODGETDEVPOLICY 27 +#define MODALLOCPRIV 28 +#define MODGETDEVPOLICYBYNAME 29 +#define MODLOADMINORPERM 31 +#define MODADDMINORPERM 32 +#define MODREMMINORPERM 33 +#define MODREMDRVCLEANUP 34 +#define MODDEVEXISTS 35 +#define MODDEVREADDIR 36 +#define MODDEVNAME 37 +#define MODGETDEVFSPATH_MI_LEN 38 +#define MODGETDEVFSPATH_MI 39 +#define MODRETIRE 40 +#define MODUNRETIRE 41 +#define MODISRETIRED 42 +#define MODDEVEMPTYDIR 43 +#define MODREMDRVALIAS 44 + +/* + * sub cmds for MODEVENTS + */ +#define MODEVENTS_FLUSH 0 +#define MODEVENTS_FLUSH_DUMP 1 +#define MODEVENTS_SET_DOOR_UPCALL_FILENAME 2 +#define MODEVENTS_GETDATA 3 +#define MODEVENTS_FREEDATA 4 +#define MODEVENTS_POST_EVENT 5 +#define MODEVENTS_REGISTER_EVENT 6 + +/* + * devname subcmds for MODDEVNAME + */ +#define MODDEVNAME_LOOKUPDOOR 0 +#define MODDEVNAME_DEVFSADMNODE 1 +#define MODDEVNAME_NSMAPS 2 +#define MODDEVNAME_PROFILE 3 +#define MODDEVNAME_RECONFIG 4 +#define MODDEVNAME_SYSAVAIL 5 + + +/* + * Data structure passed to modconfig command in kernel to build devfs tree + */ + +struct aliases { + struct aliases *a_next; + char *a_name; + int a_len; +}; + +#define MAXMODCONFNAME 256 + +struct modconfig { + char drvname[MAXMODCONFNAME]; + char drvclass[MAXMODCONFNAME]; + int major; + int flags; + int num_aliases; + struct aliases *ap; +}; + +#if defined(_SYSCALL32) + +struct aliases32 { + caddr32_t a_next; + caddr32_t a_name; + int32_t a_len; +}; + +struct modconfig32 { + char drvname[MAXMODCONFNAME]; + char drvclass[MAXMODCONFNAME]; + int32_t major; + int32_t flags; + int32_t num_aliases; + caddr32_t ap; +}; + +#endif /* _SYSCALL32 */ + +/* flags for modconfig */ +#define MOD_UNBIND_OVERRIDE 0x01 /* fail unbind if in use */ + +/* + * Max module path length + */ +#define MOD_MAXPATH 256 + +/* + * Default search path for modules ADDITIONAL to the directory + * where the kernel components we booted from are. + * + * Most often, this will be "/platform/{platform}/kernel /kernel /usr/kernel", + * but we don't wire it down here. + */ +#define MOD_DEFPATH "/kernel /usr/kernel" + +/* + * Default file name extension for autoloading modules. + */ +#define MOD_DEFEXT "" + +/* + * Parameters for modinfo + */ +#define MODMAXNAMELEN 32 /* max module name length */ +#define MODMAXLINKINFOLEN 32 /* max link info length */ + +/* + * Module specific information. + */ +struct modspecific_info { + char msi_linkinfo[MODMAXLINKINFOLEN]; /* name in linkage struct */ + int msi_p0; /* module specific information */ +}; + +/* + * Structure returned by modctl with MODINFO command. + */ +#define MODMAXLINK 10 /* max linkages modinfo can handle */ + +struct modinfo { + int mi_info; /* Flags for info wanted */ + int mi_state; /* Flags for module state */ + int mi_id; /* id of this loaded module */ + int mi_nextid; /* id of next module or -1 */ + caddr_t mi_base; /* virtual addr of text */ + size_t mi_size; /* size of module in bytes */ + int mi_rev; /* loadable modules rev */ + int mi_loadcnt; /* # of times loaded */ + char mi_name[MODMAXNAMELEN]; /* name of module */ + struct modspecific_info mi_msinfo[MODMAXLINK]; + /* mod specific info */ +}; + + +#if defined(_SYSCALL32) + +#define MODMAXNAMELEN32 32 /* max module name length */ +#define MODMAXLINKINFOLEN32 32 /* max link info length */ +#define MODMAXLINK32 10 /* max linkages modinfo can handle */ + +struct modspecific_info32 { + char msi_linkinfo[MODMAXLINKINFOLEN32]; /* name in linkage struct */ + int32_t msi_p0; /* module specific information */ +}; + +struct modinfo32 { + int32_t mi_info; /* Flags for info wanted */ + int32_t mi_state; /* Flags for module state */ + int32_t mi_id; /* id of this loaded module */ + int32_t mi_nextid; /* id of next module or -1 */ + caddr32_t mi_base; /* virtual addr of text */ + uint32_t mi_size; /* size of module in bytes */ + int32_t mi_rev; /* loadable modules rev */ + int32_t mi_loadcnt; /* # of times loaded */ + char mi_name[MODMAXNAMELEN32]; /* name of module */ + struct modspecific_info32 mi_msinfo[MODMAXLINK32]; + /* mod specific info */ +}; + +#endif /* _SYSCALL32 */ + +/* Values for mi_info flags */ +#define MI_INFO_ONE 1 +#define MI_INFO_ALL 2 +#define MI_INFO_CNT 4 +#define MI_INFO_LINKAGE 8 /* used internally to extract modlinkage */ +/* + * MI_INFO_NOBASE indicates caller does not need mi_base. Failure to use this + * flag may lead 32-bit apps to receive an EOVERFLOW error from modctl(MODINFO) + * when used with a 64-bit kernel. + */ +#define MI_INFO_NOBASE 16 + +/* Values for mi_state */ +#define MI_LOADED 1 +#define MI_INSTALLED 2 + +/* + * Macros to vector to the appropriate module specific routine. + */ +#define MODL_INSTALL(MODL, MODLP) \ + (*(MODL)->misc_modops->modm_install)(MODL, MODLP) +#define MODL_REMOVE(MODL, MODLP) \ + (*(MODL)->misc_modops->modm_remove)(MODL, MODLP) +#define MODL_INFO(MODL, MODLP, P0) \ + (*(MODL)->misc_modops->modm_info)(MODL, MODLP, P0) + +/* + * Definitions for stubs + */ +struct mod_stub_info { + uintptr_t mods_func_adr; + struct mod_modinfo *mods_modinfo; + uintptr_t mods_stub_adr; + int (*mods_errfcn)(void); + int mods_flag; /* flags defined below */ +}; + +/* + * Definitions for mods_flag. + */ +#define MODS_WEAK 0x01 /* weak stub (not loaded if called) */ +#define MODS_NOUNLOAD 0x02 /* module not unloadable (no _fini()) */ +#define MODS_INSTALLED 0x10 /* module installed */ + +struct mod_modinfo { + char *modm_module_name; + struct modctl *mp; + struct mod_stub_info modm_stubs[1]; +}; + +struct modctl_list { + struct modctl_list *modl_next; + struct modctl *modl_modp; +}; + +/* + * Structure to manage a loadable module. + * Note: the module (mod_mp) structure's "text" and "text_size" information + * are replicated in the modctl structure so that mod_containing_pc() + * doesn't have to grab any locks (modctls are persistent; modules are not.) + */ +typedef struct modctl { + struct modctl *mod_next; /* &modules based list */ + struct modctl *mod_prev; + int mod_id; + void *mod_mp; + kthread_t *mod_inprogress_thread; + struct mod_modinfo *mod_modinfo; + struct modlinkage *mod_linkage; + char *mod_filename; + char *mod_modname; + + char mod_busy; /* inprogress_thread has locked */ + char mod_want; /* someone waiting for unlock */ + char mod_prim; /* primary module */ + + int mod_ref; /* ref count - from dependent or stub */ + + char mod_loaded; /* module in memory */ + char mod_installed; /* post _init pre _fini */ + char mod_loadflags; + char mod_delay_unload; /* deferred unload */ + + struct modctl_list *mod_requisites; /* mods this one depends on. */ + void *__unused; /* NOTE: reuse (same size) is OK, */ + /* deletion causes mdb.vs.core issues */ + int mod_loadcnt; /* number of times mod was loaded */ + int mod_nenabled; /* # of enabled DTrace probes in mod */ + char *mod_text; + size_t mod_text_size; + + int mod_gencount; /* # times loaded/unloaded */ + struct modctl *mod_requisite_loading; /* mod circular dependency */ +} modctl_t; + +/* + * mod_loadflags + */ + +#define MOD_NOAUTOUNLOAD 0x1 /* Auto mod-unloader skips this mod */ +#define MOD_NONOTIFY 0x2 /* No krtld notifications on (un)load */ +#define MOD_NOUNLOAD 0x4 /* Assume EBUSY for all _fini's */ + +#define MOD_BIND_HASHSIZE 64 +#define MOD_BIND_HASHMASK (MOD_BIND_HASHSIZE-1) + +typedef int modid_t; + +/* + * global function and data declarations + */ +extern kmutex_t mod_lock; + +extern char *systemfile; +extern char **syscallnames; +extern int moddebug; + +/* + * this is the head of a doubly linked list. Only the next and prev + * pointers are used + */ +extern modctl_t modules; + +/* + * Only the following are part of the DDI/DKI + */ +extern int mod_install(struct modlinkage *); +extern int mod_remove(struct modlinkage *); +extern int mod_info(struct modlinkage *, struct modinfo *); + +/* + * bit definitions for moddebug. + */ +#define MODDEBUG_LOADMSG 0x80000000 /* print "[un]loading..." msg */ +#define MODDEBUG_ERRMSG 0x40000000 /* print detailed error msgs */ +#define MODDEBUG_LOADMSG2 0x20000000 /* print 2nd level msgs */ +#define MODDEBUG_RETIRE 0x10000000 /* print retire msgs */ +#define MODDEBUG_BINDING 0x00040000 /* driver/alias binding */ +#define MODDEBUG_FINI_EBUSY 0x00020000 /* pretend fini returns EBUSY */ +#define MODDEBUG_NOAUL_IPP 0x00010000 /* no Autounloading ipp mods */ +#define MODDEBUG_NOAUL_DACF 0x00008000 /* no Autounloading dacf mods */ +#define MODDEBUG_KEEPTEXT 0x00004000 /* keep text after unloading */ +#define MODDEBUG_NOAUL_DRV 0x00001000 /* no Autounloading Drivers */ +#define MODDEBUG_NOAUL_EXEC 0x00000800 /* no Autounloading Execs */ +#define MODDEBUG_NOAUL_FS 0x00000400 /* no Autounloading File sys */ +#define MODDEBUG_NOAUL_MISC 0x00000200 /* no Autounloading misc */ +#define MODDEBUG_NOAUL_SCHED 0x00000100 /* no Autounloading scheds */ +#define MODDEBUG_NOAUL_STR 0x00000080 /* no Autounloading streams */ +#define MODDEBUG_NOAUL_SYS 0x00000040 /* no Autounloading syscalls */ +#define MODDEBUG_NOCTF 0x00000020 /* do not load CTF debug data */ +#define MODDEBUG_NOAUTOUNLOAD 0x00000010 /* no autounloading at all */ +#define MODDEBUG_DDI_MOD 0x00000008 /* ddi_mod{open,sym,close} */ +#define MODDEBUG_MP_MATCH 0x00000004 /* dev_minorperm */ +#define MODDEBUG_MINORPERM 0x00000002 /* minor perm modctls */ +#define MODDEBUG_USERDEBUG 0x00000001 /* bpt after init_module() */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MODCTL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/modhash.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/modhash.h @@ -0,0 +1,147 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_MODHASH_H +#define _SYS_MODHASH_H + +/* + * Generic hash implementation for the kernel. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* + * Opaque data types for storing keys and values + */ +typedef void *mod_hash_val_t; +typedef void *mod_hash_key_t; + +/* + * Opaque data type for reservation + */ +typedef void *mod_hash_hndl_t; + +/* + * Opaque type for hash itself. + */ +struct mod_hash; +typedef struct mod_hash mod_hash_t; + +/* + * String hash table + */ +mod_hash_t *mod_hash_create_strhash_nodtr(char *, size_t, + void (*)(mod_hash_val_t)); +mod_hash_t *mod_hash_create_strhash(char *, size_t, void (*)(mod_hash_val_t)); +void mod_hash_destroy_strhash(mod_hash_t *); +int mod_hash_strkey_cmp(mod_hash_key_t, mod_hash_key_t); +void mod_hash_strkey_dtor(mod_hash_key_t); +void mod_hash_strval_dtor(mod_hash_val_t); +uint_t mod_hash_bystr(void *, mod_hash_key_t); + +/* + * Pointer hash table + */ +mod_hash_t *mod_hash_create_ptrhash(char *, size_t, void (*)(mod_hash_val_t), + size_t); +void mod_hash_destroy_ptrhash(mod_hash_t *); +int mod_hash_ptrkey_cmp(mod_hash_key_t, mod_hash_key_t); +uint_t mod_hash_byptr(void *, mod_hash_key_t); + +/* + * ID hash table + */ +mod_hash_t *mod_hash_create_idhash(char *, size_t, void (*)(mod_hash_val_t)); +void mod_hash_destroy_idhash(mod_hash_t *); +int mod_hash_idkey_cmp(mod_hash_key_t, mod_hash_key_t); +uint_t mod_hash_byid(void *, mod_hash_key_t); +uint_t mod_hash_iddata_gen(size_t); + +/* + * Hash management functions + */ +mod_hash_t *mod_hash_create_extended(char *, size_t, void (*)(mod_hash_key_t), + void (*)(mod_hash_val_t), uint_t (*)(void *, mod_hash_key_t), void *, + int (*)(mod_hash_key_t, mod_hash_key_t), int); + +void mod_hash_destroy_hash(mod_hash_t *); +void mod_hash_clear(mod_hash_t *); + +/* + * Null key and value destructors + */ +void mod_hash_null_keydtor(mod_hash_key_t); +void mod_hash_null_valdtor(mod_hash_val_t); + +/* + * Basic hash operations + */ + +/* + * Error codes for insert, remove, find, destroy. + */ +#define MH_ERR_NOMEM -1 +#define MH_ERR_DUPLICATE -2 +#define MH_ERR_NOTFOUND -3 + +/* + * Return codes for hash walkers + */ +#define MH_WALK_CONTINUE 0 +#define MH_WALK_TERMINATE 1 + +/* + * Basic hash operations + */ +int mod_hash_insert(mod_hash_t *, mod_hash_key_t, mod_hash_val_t); +int mod_hash_replace(mod_hash_t *, mod_hash_key_t, mod_hash_val_t); +int mod_hash_remove(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *); +int mod_hash_destroy(mod_hash_t *, mod_hash_key_t); +int mod_hash_find(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *); +int mod_hash_find_cb(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *, + void (*)(mod_hash_key_t, mod_hash_val_t)); +int mod_hash_find_cb_rval(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *, + int (*)(mod_hash_key_t, mod_hash_val_t), int *); +void mod_hash_walk(mod_hash_t *, + uint_t (*)(mod_hash_key_t, mod_hash_val_t *, void *), void *); + +/* + * Reserving hash operations + */ +int mod_hash_reserve(mod_hash_t *, mod_hash_hndl_t *); +int mod_hash_reserve_nosleep(mod_hash_t *, mod_hash_hndl_t *); +void mod_hash_cancel(mod_hash_t *, mod_hash_hndl_t *); +int mod_hash_insert_reserve(mod_hash_t *, mod_hash_key_t, mod_hash_val_t, + mod_hash_hndl_t); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MODHASH_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/modhash_impl.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/modhash_impl.h @@ -0,0 +1,108 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_MODHASH_IMPL_H +#define _SYS_MODHASH_IMPL_H + +/* + * Internal details for the kernel's generic hash implementation. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct mod_hash_entry { + mod_hash_key_t mhe_key; /* stored hash key */ + mod_hash_val_t mhe_val; /* stored hash value */ + struct mod_hash_entry *mhe_next; /* next item in chain */ +}; + +struct mod_hash_stat { + ulong_t mhs_hit; /* tried a 'find' and it succeeded */ + ulong_t mhs_miss; /* tried a 'find' but it failed */ + ulong_t mhs_coll; /* occur when insert fails because of dup's */ + ulong_t mhs_nelems; /* total number of stored key/value pairs */ + ulong_t mhs_nomem; /* number of times kmem_alloc failed */ +}; + +struct mod_hash { + krwlock_t mh_contents; /* lock protecting contents */ + char *mh_name; /* hash name */ + int mh_sleep; /* kmem_alloc flag */ + size_t mh_nchains; /* # of elements in mh_entries */ + + /* key and val destructor */ + void (*mh_kdtor)(mod_hash_key_t); + void (*mh_vdtor)(mod_hash_val_t); + + /* key comparator */ + int (*mh_keycmp)(mod_hash_key_t, mod_hash_key_t); + + /* hash algorithm, and algorithm-private data */ + uint_t (*mh_hashalg)(void *, mod_hash_key_t); + void *mh_hashalg_data; + + struct mod_hash *mh_next; /* next hash in list */ + + struct mod_hash_stat mh_stat; + + struct mod_hash_entry *mh_entries[1]; +}; + +/* + * MH_SIZE() + * Compute the size of a mod_hash_t, in bytes, given the number of + * elements it contains. + */ +#define MH_SIZE(n) \ + (sizeof (mod_hash_t) + ((n) - 1) * (sizeof (struct mod_hash_entry *))) + +/* + * Module initialization; called once. + */ +void mod_hash_fini(void); +void mod_hash_init(void); + +/* + * Internal routines. Use directly with care. + */ +uint_t i_mod_hash(mod_hash_t *, mod_hash_key_t); +int i_mod_hash_insert_nosync(mod_hash_t *, mod_hash_key_t, mod_hash_val_t, + mod_hash_hndl_t); +int i_mod_hash_remove_nosync(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *); +int i_mod_hash_find_nosync(mod_hash_t *, mod_hash_key_t, mod_hash_val_t *); +void i_mod_hash_walk_nosync(mod_hash_t *, uint_t (*)(mod_hash_key_t, + mod_hash_val_t *, void *), void *); +void i_mod_hash_clear_nosync(mod_hash_t *hash); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_MODHASH_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/stack.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/stack.h @@ -0,0 +1,36 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_STACK_H +#define _SYS_STACK_H + +#if defined(__i386) || defined(__amd64) + +#include /* XX64 x86/sys/stack.h */ + +#endif + +#endif /* _SYS_STACK_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/include/sys/trap.h +++ linux-aws-4.15.0/zfs/module/icp/include/sys/trap.h @@ -0,0 +1,36 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_TRAP_H +#define _SYS_TRAP_H + +#if defined(__i386) || defined(__amd64) + +#include /* XX64 x86/sys/trap.h */ + +#endif + +#endif /* _SYS_TRAP_H */ --- linux-aws-4.15.0.orig/zfs/module/icp/io/aes.c +++ linux-aws-4.15.0/zfs/module/icp/io/aes.c @@ -0,0 +1,1439 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* + * AES provider for the Kernel Cryptographic Framework (KCF) + */ + +#include +#include +#include +#include +#include +#include +#include +#define _AES_IMPL +#include + +#define CRYPTO_PROVIDER_NAME "aes" + +extern struct mod_ops mod_cryptoops; + +/* + * Module linkage information for the kernel. + */ +static struct modlcrypto modlcrypto = { + &mod_cryptoops, + "AES Kernel SW Provider" +}; + +static struct modlinkage modlinkage = { + MODREV_1, { (void *)&modlcrypto, NULL } +}; + +/* + * Mechanism info structure passed to KCF during registration. + */ +static crypto_mech_info_t aes_mech_info_tab[] = { + /* AES_ECB */ + {SUN_CKM_AES_ECB, AES_ECB_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* AES_CBC */ + {SUN_CKM_AES_CBC, AES_CBC_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* AES_CTR */ + {SUN_CKM_AES_CTR, AES_CTR_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* AES_CCM */ + {SUN_CKM_AES_CCM, AES_CCM_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* AES_GCM */ + {SUN_CKM_AES_GCM, AES_GCM_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* AES_GMAC */ + {SUN_CKM_AES_GMAC, AES_GMAC_MECH_INFO_TYPE, + CRYPTO_FG_ENCRYPT | CRYPTO_FG_ENCRYPT_ATOMIC | + CRYPTO_FG_DECRYPT | CRYPTO_FG_DECRYPT_ATOMIC | + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC | + CRYPTO_FG_SIGN | CRYPTO_FG_SIGN_ATOMIC | + CRYPTO_FG_VERIFY | CRYPTO_FG_VERIFY_ATOMIC, + AES_MIN_KEY_BYTES, AES_MAX_KEY_BYTES, CRYPTO_KEYSIZE_UNIT_IN_BYTES} +}; + +/* operations are in-place if the output buffer is NULL */ +#define AES_ARG_INPLACE(input, output) \ + if ((output) == NULL) \ + (output) = (input); + +static void aes_provider_status(crypto_provider_handle_t, uint_t *); + +static crypto_control_ops_t aes_control_ops = { + aes_provider_status +}; + +static int aes_encrypt_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); +static int aes_decrypt_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); +static int aes_common_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_key_t *, crypto_spi_ctx_template_t, crypto_req_handle_t, boolean_t); +static int aes_common_init_ctx(aes_ctx_t *, crypto_spi_ctx_template_t *, + crypto_mechanism_t *, crypto_key_t *, int, boolean_t); +static int aes_encrypt_final(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int aes_decrypt_final(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); + +static int aes_encrypt(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); +static int aes_encrypt_update(crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); +static int aes_encrypt_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); + +static int aes_decrypt(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); +static int aes_decrypt_update(crypto_ctx_t *, crypto_data_t *, + crypto_data_t *, crypto_req_handle_t); +static int aes_decrypt_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, + crypto_data_t *, crypto_spi_ctx_template_t, crypto_req_handle_t); + +static crypto_cipher_ops_t aes_cipher_ops = { + .encrypt_init = aes_encrypt_init, + .encrypt = aes_encrypt, + .encrypt_update = aes_encrypt_update, + .encrypt_final = aes_encrypt_final, + .encrypt_atomic = aes_encrypt_atomic, + .decrypt_init = aes_decrypt_init, + .decrypt = aes_decrypt, + .decrypt_update = aes_decrypt_update, + .decrypt_final = aes_decrypt_final, + .decrypt_atomic = aes_decrypt_atomic +}; + +static int aes_mac_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int aes_mac_verify_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + +static crypto_mac_ops_t aes_mac_ops = { + .mac_init = NULL, + .mac = NULL, + .mac_update = NULL, + .mac_final = NULL, + .mac_atomic = aes_mac_atomic, + .mac_verify_atomic = aes_mac_verify_atomic +}; + +static int aes_create_ctx_template(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t *, + size_t *, crypto_req_handle_t); +static int aes_free_context(crypto_ctx_t *); + +static crypto_ctx_ops_t aes_ctx_ops = { + .create_ctx_template = aes_create_ctx_template, + .free_context = aes_free_context +}; + +static crypto_ops_t aes_crypto_ops = {{{{{ + &aes_control_ops, + NULL, + &aes_cipher_ops, + &aes_mac_ops, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &aes_ctx_ops +}}}}}; + +static crypto_provider_info_t aes_prov_info = {{{{ + CRYPTO_SPI_VERSION_1, + "AES Software Provider", + CRYPTO_SW_PROVIDER, + NULL, + &aes_crypto_ops, + sizeof (aes_mech_info_tab)/sizeof (crypto_mech_info_t), + aes_mech_info_tab +}}}}; + +static crypto_kcf_provider_handle_t aes_prov_handle = 0; +static crypto_data_t null_crypto_data = { CRYPTO_DATA_RAW }; + +int +aes_mod_init(void) +{ + int ret; + + if ((ret = mod_install(&modlinkage)) != 0) + return (ret); + + /* Register with KCF. If the registration fails, remove the module. */ + if (crypto_register_provider(&aes_prov_info, &aes_prov_handle)) { + (void) mod_remove(&modlinkage); + return (EACCES); + } + + return (0); +} + +int +aes_mod_fini(void) +{ + /* Unregister from KCF if module is registered */ + if (aes_prov_handle != 0) { + if (crypto_unregister_provider(aes_prov_handle)) + return (EBUSY); + + aes_prov_handle = 0; + } + + return (mod_remove(&modlinkage)); +} + +static int +aes_check_mech_param(crypto_mechanism_t *mechanism, aes_ctx_t **ctx, int kmflag) +{ + void *p = NULL; + boolean_t param_required = B_TRUE; + size_t param_len; + void *(*alloc_fun)(int); + int rv = CRYPTO_SUCCESS; + + switch (mechanism->cm_type) { + case AES_ECB_MECH_INFO_TYPE: + param_required = B_FALSE; + alloc_fun = ecb_alloc_ctx; + break; + case AES_CBC_MECH_INFO_TYPE: + param_len = AES_BLOCK_LEN; + alloc_fun = cbc_alloc_ctx; + break; + case AES_CTR_MECH_INFO_TYPE: + param_len = sizeof (CK_AES_CTR_PARAMS); + alloc_fun = ctr_alloc_ctx; + break; + case AES_CCM_MECH_INFO_TYPE: + param_len = sizeof (CK_AES_CCM_PARAMS); + alloc_fun = ccm_alloc_ctx; + break; + case AES_GCM_MECH_INFO_TYPE: + param_len = sizeof (CK_AES_GCM_PARAMS); + alloc_fun = gcm_alloc_ctx; + break; + case AES_GMAC_MECH_INFO_TYPE: + param_len = sizeof (CK_AES_GMAC_PARAMS); + alloc_fun = gmac_alloc_ctx; + break; + default: + rv = CRYPTO_MECHANISM_INVALID; + return (rv); + } + if (param_required && mechanism->cm_param != NULL && + mechanism->cm_param_len != param_len) { + rv = CRYPTO_MECHANISM_PARAM_INVALID; + } + if (ctx != NULL) { + p = (alloc_fun)(kmflag); + *ctx = p; + } + return (rv); +} + +/* + * Initialize key schedules for AES + */ +static int +init_keysched(crypto_key_t *key, void *newbie) +{ + /* + * Only keys by value are supported by this module. + */ + switch (key->ck_format) { + case CRYPTO_KEY_RAW: + if (key->ck_length < AES_MINBITS || + key->ck_length > AES_MAXBITS) { + return (CRYPTO_KEY_SIZE_RANGE); + } + + /* key length must be either 128, 192, or 256 */ + if ((key->ck_length & 63) != 0) + return (CRYPTO_KEY_SIZE_RANGE); + break; + default: + return (CRYPTO_KEY_TYPE_INCONSISTENT); + } + + aes_init_keysched(key->ck_data, key->ck_length, newbie); + return (CRYPTO_SUCCESS); +} + +/* + * KCF software provider control entry points. + */ +/* ARGSUSED */ +static void +aes_provider_status(crypto_provider_handle_t provider, uint_t *status) +{ + *status = CRYPTO_PROVIDER_READY; +} + +static int +aes_encrypt_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t template, + crypto_req_handle_t req) +{ + return (aes_common_init(ctx, mechanism, key, template, req, B_TRUE)); +} + +static int +aes_decrypt_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t template, + crypto_req_handle_t req) +{ + return (aes_common_init(ctx, mechanism, key, template, req, B_FALSE)); +} + + + +/* + * KCF software provider encrypt entry points. + */ +static int +aes_common_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t template, + crypto_req_handle_t req, boolean_t is_encrypt_init) +{ + aes_ctx_t *aes_ctx; + int rv; + int kmflag; + + /* + * Only keys by value are supported by this module. + */ + if (key->ck_format != CRYPTO_KEY_RAW) { + return (CRYPTO_KEY_TYPE_INCONSISTENT); + } + + kmflag = crypto_kmflag(req); + if ((rv = aes_check_mech_param(mechanism, &aes_ctx, kmflag)) + != CRYPTO_SUCCESS) + return (rv); + + rv = aes_common_init_ctx(aes_ctx, template, mechanism, key, kmflag, + is_encrypt_init); + if (rv != CRYPTO_SUCCESS) { + crypto_free_mode_ctx(aes_ctx); + return (rv); + } + + ctx->cc_provider_private = aes_ctx; + + return (CRYPTO_SUCCESS); +} + +static void +aes_copy_block64(uint8_t *in, uint64_t *out) +{ + if (IS_P2ALIGNED(in, sizeof (uint64_t))) { + /* LINTED: pointer alignment */ + out[0] = *(uint64_t *)&in[0]; + /* LINTED: pointer alignment */ + out[1] = *(uint64_t *)&in[8]; + } else { + uint8_t *iv8 = (uint8_t *)&out[0]; + + AES_COPY_BLOCK(in, iv8); + } +} + + +static int +aes_encrypt(crypto_ctx_t *ctx, crypto_data_t *plaintext, + crypto_data_t *ciphertext, crypto_req_handle_t req) +{ + int ret = CRYPTO_FAILED; + + aes_ctx_t *aes_ctx; + size_t saved_length, saved_offset, length_needed; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + /* + * For block ciphers, plaintext must be a multiple of AES block size. + * This test is only valid for ciphers whose blocksize is a power of 2. + */ + if (((aes_ctx->ac_flags & (CTR_MODE|CCM_MODE|GCM_MODE|GMAC_MODE)) + == 0) && (plaintext->cd_length & (AES_BLOCK_LEN - 1)) != 0) + return (CRYPTO_DATA_LEN_RANGE); + + AES_ARG_INPLACE(plaintext, ciphertext); + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following case. + */ + switch (aes_ctx->ac_flags & (CCM_MODE|GCM_MODE|GMAC_MODE)) { + case CCM_MODE: + length_needed = plaintext->cd_length + aes_ctx->ac_mac_len; + break; + case GCM_MODE: + length_needed = plaintext->cd_length + aes_ctx->ac_tag_len; + break; + case GMAC_MODE: + if (plaintext->cd_length != 0) + return (CRYPTO_ARGUMENTS_BAD); + + length_needed = aes_ctx->ac_tag_len; + break; + default: + length_needed = plaintext->cd_length; + } + + if (ciphertext->cd_length < length_needed) { + ciphertext->cd_length = length_needed; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + saved_length = ciphertext->cd_length; + saved_offset = ciphertext->cd_offset; + + /* + * Do an update on the specified input data. + */ + ret = aes_encrypt_update(ctx, plaintext, ciphertext, req); + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + + /* + * For CCM mode, aes_ccm_encrypt_final() will take care of any + * left-over unprocessed data, and compute the MAC + */ + if (aes_ctx->ac_flags & CCM_MODE) { + /* + * ccm_encrypt_final() will compute the MAC and append + * it to existing ciphertext. So, need to adjust the left over + * length value accordingly + */ + + /* order of following 2 lines MUST not be reversed */ + ciphertext->cd_offset = ciphertext->cd_length; + ciphertext->cd_length = saved_length - ciphertext->cd_length; + ret = ccm_encrypt_final((ccm_ctx_t *)aes_ctx, ciphertext, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + + if (plaintext != ciphertext) { + ciphertext->cd_length = + ciphertext->cd_offset - saved_offset; + } + ciphertext->cd_offset = saved_offset; + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + /* + * gcm_encrypt_final() will compute the MAC and append + * it to existing ciphertext. So, need to adjust the left over + * length value accordingly + */ + + /* order of following 2 lines MUST not be reversed */ + ciphertext->cd_offset = ciphertext->cd_length; + ciphertext->cd_length = saved_length - ciphertext->cd_length; + ret = gcm_encrypt_final((gcm_ctx_t *)aes_ctx, ciphertext, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + + if (plaintext != ciphertext) { + ciphertext->cd_length = + ciphertext->cd_offset - saved_offset; + } + ciphertext->cd_offset = saved_offset; + } + + ASSERT(aes_ctx->ac_remainder_len == 0); + (void) aes_free_context(ctx); + + return (ret); +} + + +static int +aes_decrypt(crypto_ctx_t *ctx, crypto_data_t *ciphertext, + crypto_data_t *plaintext, crypto_req_handle_t req) +{ + int ret = CRYPTO_FAILED; + + aes_ctx_t *aes_ctx; + off_t saved_offset; + size_t saved_length, length_needed; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + /* + * For block ciphers, plaintext must be a multiple of AES block size. + * This test is only valid for ciphers whose blocksize is a power of 2. + */ + if (((aes_ctx->ac_flags & (CTR_MODE|CCM_MODE|GCM_MODE|GMAC_MODE)) + == 0) && (ciphertext->cd_length & (AES_BLOCK_LEN - 1)) != 0) { + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + } + + AES_ARG_INPLACE(ciphertext, plaintext); + + /* + * Return length needed to store the output. + * Do not destroy context when plaintext buffer is too small. + * + * CCM: plaintext is MAC len smaller than cipher text + * GCM: plaintext is TAG len smaller than cipher text + * GMAC: plaintext length must be zero + */ + switch (aes_ctx->ac_flags & (CCM_MODE|GCM_MODE|GMAC_MODE)) { + case CCM_MODE: + length_needed = aes_ctx->ac_processed_data_len; + break; + case GCM_MODE: + length_needed = ciphertext->cd_length - aes_ctx->ac_tag_len; + break; + case GMAC_MODE: + if (plaintext->cd_length != 0) + return (CRYPTO_ARGUMENTS_BAD); + + length_needed = 0; + break; + default: + length_needed = ciphertext->cd_length; + } + + if (plaintext->cd_length < length_needed) { + plaintext->cd_length = length_needed; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + saved_offset = plaintext->cd_offset; + saved_length = plaintext->cd_length; + + /* + * Do an update on the specified input data. + */ + ret = aes_decrypt_update(ctx, ciphertext, plaintext, req); + if (ret != CRYPTO_SUCCESS) { + goto cleanup; + } + + if (aes_ctx->ac_flags & CCM_MODE) { + ASSERT(aes_ctx->ac_processed_data_len == aes_ctx->ac_data_len); + ASSERT(aes_ctx->ac_processed_mac_len == aes_ctx->ac_mac_len); + + /* order of following 2 lines MUST not be reversed */ + plaintext->cd_offset = plaintext->cd_length; + plaintext->cd_length = saved_length - plaintext->cd_length; + + ret = ccm_decrypt_final((ccm_ctx_t *)aes_ctx, plaintext, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + if (ret == CRYPTO_SUCCESS) { + if (plaintext != ciphertext) { + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } + } else { + plaintext->cd_length = saved_length; + } + + plaintext->cd_offset = saved_offset; + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + /* order of following 2 lines MUST not be reversed */ + plaintext->cd_offset = plaintext->cd_length; + plaintext->cd_length = saved_length - plaintext->cd_length; + + ret = gcm_decrypt_final((gcm_ctx_t *)aes_ctx, plaintext, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + if (ret == CRYPTO_SUCCESS) { + if (plaintext != ciphertext) { + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } + } else { + plaintext->cd_length = saved_length; + } + + plaintext->cd_offset = saved_offset; + } + + ASSERT(aes_ctx->ac_remainder_len == 0); + +cleanup: + (void) aes_free_context(ctx); + + return (ret); +} + + +/* ARGSUSED */ +static int +aes_encrypt_update(crypto_ctx_t *ctx, crypto_data_t *plaintext, + crypto_data_t *ciphertext, crypto_req_handle_t req) +{ + off_t saved_offset; + size_t saved_length, out_len; + int ret = CRYPTO_SUCCESS; + aes_ctx_t *aes_ctx; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + AES_ARG_INPLACE(plaintext, ciphertext); + + /* compute number of bytes that will hold the ciphertext */ + out_len = aes_ctx->ac_remainder_len; + out_len += plaintext->cd_length; + out_len &= ~(AES_BLOCK_LEN - 1); + + /* return length needed to store the output */ + if (ciphertext->cd_length < out_len) { + ciphertext->cd_length = out_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + saved_offset = ciphertext->cd_offset; + saved_length = ciphertext->cd_length; + + /* + * Do the AES update on the specified input data. + */ + switch (plaintext->cd_format) { + case CRYPTO_DATA_RAW: + ret = crypto_update_iov(ctx->cc_provider_private, + plaintext, ciphertext, aes_encrypt_contiguous_blocks, + aes_copy_block64); + break; + case CRYPTO_DATA_UIO: + ret = crypto_update_uio(ctx->cc_provider_private, + plaintext, ciphertext, aes_encrypt_contiguous_blocks, + aes_copy_block64); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* + * Since AES counter mode is a stream cipher, we call + * ctr_mode_final() to pick up any remaining bytes. + * It is an internal function that does not destroy + * the context like *normal* final routines. + */ + if ((aes_ctx->ac_flags & CTR_MODE) && (aes_ctx->ac_remainder_len > 0)) { + ret = ctr_mode_final((ctr_ctx_t *)aes_ctx, + ciphertext, aes_encrypt_block); + } + + if (ret == CRYPTO_SUCCESS) { + if (plaintext != ciphertext) + ciphertext->cd_length = + ciphertext->cd_offset - saved_offset; + } else { + ciphertext->cd_length = saved_length; + } + ciphertext->cd_offset = saved_offset; + + return (ret); +} + + +static int +aes_decrypt_update(crypto_ctx_t *ctx, crypto_data_t *ciphertext, + crypto_data_t *plaintext, crypto_req_handle_t req) +{ + off_t saved_offset; + size_t saved_length, out_len; + int ret = CRYPTO_SUCCESS; + aes_ctx_t *aes_ctx; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + AES_ARG_INPLACE(ciphertext, plaintext); + + /* + * Compute number of bytes that will hold the plaintext. + * This is not necessary for CCM, GCM, and GMAC since these + * mechanisms never return plaintext for update operations. + */ + if ((aes_ctx->ac_flags & (CCM_MODE|GCM_MODE|GMAC_MODE)) == 0) { + out_len = aes_ctx->ac_remainder_len; + out_len += ciphertext->cd_length; + out_len &= ~(AES_BLOCK_LEN - 1); + + /* return length needed to store the output */ + if (plaintext->cd_length < out_len) { + plaintext->cd_length = out_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + } + + saved_offset = plaintext->cd_offset; + saved_length = plaintext->cd_length; + + if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) + gcm_set_kmflag((gcm_ctx_t *)aes_ctx, crypto_kmflag(req)); + + /* + * Do the AES update on the specified input data. + */ + switch (ciphertext->cd_format) { + case CRYPTO_DATA_RAW: + ret = crypto_update_iov(ctx->cc_provider_private, + ciphertext, plaintext, aes_decrypt_contiguous_blocks, + aes_copy_block64); + break; + case CRYPTO_DATA_UIO: + ret = crypto_update_uio(ctx->cc_provider_private, + ciphertext, plaintext, aes_decrypt_contiguous_blocks, + aes_copy_block64); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* + * Since AES counter mode is a stream cipher, we call + * ctr_mode_final() to pick up any remaining bytes. + * It is an internal function that does not destroy + * the context like *normal* final routines. + */ + if ((aes_ctx->ac_flags & CTR_MODE) && (aes_ctx->ac_remainder_len > 0)) { + ret = ctr_mode_final((ctr_ctx_t *)aes_ctx, plaintext, + aes_encrypt_block); + if (ret == CRYPTO_DATA_LEN_RANGE) + ret = CRYPTO_ENCRYPTED_DATA_LEN_RANGE; + } + + if (ret == CRYPTO_SUCCESS) { + if (ciphertext != plaintext) + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } else { + plaintext->cd_length = saved_length; + } + plaintext->cd_offset = saved_offset; + + + return (ret); +} + +/* ARGSUSED */ +static int +aes_encrypt_final(crypto_ctx_t *ctx, crypto_data_t *data, + crypto_req_handle_t req) +{ + aes_ctx_t *aes_ctx; + int ret; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + if (data->cd_format != CRYPTO_DATA_RAW && + data->cd_format != CRYPTO_DATA_UIO) { + return (CRYPTO_ARGUMENTS_BAD); + } + + if (aes_ctx->ac_flags & CTR_MODE) { + if (aes_ctx->ac_remainder_len > 0) { + ret = ctr_mode_final((ctr_ctx_t *)aes_ctx, data, + aes_encrypt_block); + if (ret != CRYPTO_SUCCESS) + return (ret); + } + } else if (aes_ctx->ac_flags & CCM_MODE) { + ret = ccm_encrypt_final((ccm_ctx_t *)aes_ctx, data, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + size_t saved_offset = data->cd_offset; + + ret = gcm_encrypt_final((gcm_ctx_t *)aes_ctx, data, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + data->cd_length = data->cd_offset - saved_offset; + data->cd_offset = saved_offset; + } else { + /* + * There must be no unprocessed plaintext. + * This happens if the length of the last data is + * not a multiple of the AES block length. + */ + if (aes_ctx->ac_remainder_len > 0) { + return (CRYPTO_DATA_LEN_RANGE); + } + data->cd_length = 0; + } + + (void) aes_free_context(ctx); + + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +static int +aes_decrypt_final(crypto_ctx_t *ctx, crypto_data_t *data, + crypto_req_handle_t req) +{ + aes_ctx_t *aes_ctx; + int ret; + off_t saved_offset; + size_t saved_length; + + ASSERT(ctx->cc_provider_private != NULL); + aes_ctx = ctx->cc_provider_private; + + if (data->cd_format != CRYPTO_DATA_RAW && + data->cd_format != CRYPTO_DATA_UIO) { + return (CRYPTO_ARGUMENTS_BAD); + } + + /* + * There must be no unprocessed ciphertext. + * This happens if the length of the last ciphertext is + * not a multiple of the AES block length. + */ + if (aes_ctx->ac_remainder_len > 0) { + if ((aes_ctx->ac_flags & CTR_MODE) == 0) + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + else { + ret = ctr_mode_final((ctr_ctx_t *)aes_ctx, data, + aes_encrypt_block); + if (ret == CRYPTO_DATA_LEN_RANGE) + ret = CRYPTO_ENCRYPTED_DATA_LEN_RANGE; + if (ret != CRYPTO_SUCCESS) + return (ret); + } + } + + if (aes_ctx->ac_flags & CCM_MODE) { + /* + * This is where all the plaintext is returned, make sure + * the plaintext buffer is big enough + */ + size_t pt_len = aes_ctx->ac_data_len; + if (data->cd_length < pt_len) { + data->cd_length = pt_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + ASSERT(aes_ctx->ac_processed_data_len == pt_len); + ASSERT(aes_ctx->ac_processed_mac_len == aes_ctx->ac_mac_len); + saved_offset = data->cd_offset; + saved_length = data->cd_length; + ret = ccm_decrypt_final((ccm_ctx_t *)aes_ctx, data, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + if (ret == CRYPTO_SUCCESS) { + data->cd_length = data->cd_offset - saved_offset; + } else { + data->cd_length = saved_length; + } + + data->cd_offset = saved_offset; + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + } else if (aes_ctx->ac_flags & (GCM_MODE|GMAC_MODE)) { + /* + * This is where all the plaintext is returned, make sure + * the plaintext buffer is big enough + */ + gcm_ctx_t *ctx = (gcm_ctx_t *)aes_ctx; + size_t pt_len = ctx->gcm_processed_data_len - ctx->gcm_tag_len; + + if (data->cd_length < pt_len) { + data->cd_length = pt_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + saved_offset = data->cd_offset; + saved_length = data->cd_length; + ret = gcm_decrypt_final((gcm_ctx_t *)aes_ctx, data, + AES_BLOCK_LEN, aes_encrypt_block, aes_xor_block); + if (ret == CRYPTO_SUCCESS) { + data->cd_length = data->cd_offset - saved_offset; + } else { + data->cd_length = saved_length; + } + + data->cd_offset = saved_offset; + if (ret != CRYPTO_SUCCESS) { + return (ret); + } + } + + + if ((aes_ctx->ac_flags & (CTR_MODE|CCM_MODE|GCM_MODE|GMAC_MODE)) == 0) { + data->cd_length = 0; + } + + (void) aes_free_context(ctx); + + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +static int +aes_encrypt_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *plaintext, crypto_data_t *ciphertext, + crypto_spi_ctx_template_t template, crypto_req_handle_t req) +{ + aes_ctx_t aes_ctx; /* on the stack */ + off_t saved_offset; + size_t saved_length; + size_t length_needed; + int ret; + + AES_ARG_INPLACE(plaintext, ciphertext); + + /* + * CTR, CCM, GCM, and GMAC modes do not require that plaintext + * be a multiple of AES block size. + */ + switch (mechanism->cm_type) { + case AES_CTR_MECH_INFO_TYPE: + case AES_CCM_MECH_INFO_TYPE: + case AES_GCM_MECH_INFO_TYPE: + case AES_GMAC_MECH_INFO_TYPE: + break; + default: + if ((plaintext->cd_length & (AES_BLOCK_LEN - 1)) != 0) + return (CRYPTO_DATA_LEN_RANGE); + } + + if ((ret = aes_check_mech_param(mechanism, NULL, 0)) != CRYPTO_SUCCESS) + return (ret); + + bzero(&aes_ctx, sizeof (aes_ctx_t)); + + ret = aes_common_init_ctx(&aes_ctx, template, mechanism, key, + crypto_kmflag(req), B_TRUE); + if (ret != CRYPTO_SUCCESS) + return (ret); + + switch (mechanism->cm_type) { + case AES_CCM_MECH_INFO_TYPE: + length_needed = plaintext->cd_length + aes_ctx.ac_mac_len; + break; + case AES_GMAC_MECH_INFO_TYPE: + if (plaintext->cd_length != 0) + return (CRYPTO_ARGUMENTS_BAD); + /* FALLTHRU */ + case AES_GCM_MECH_INFO_TYPE: + length_needed = plaintext->cd_length + aes_ctx.ac_tag_len; + break; + default: + length_needed = plaintext->cd_length; + } + + /* return size of buffer needed to store output */ + if (ciphertext->cd_length < length_needed) { + ciphertext->cd_length = length_needed; + ret = CRYPTO_BUFFER_TOO_SMALL; + goto out; + } + + saved_offset = ciphertext->cd_offset; + saved_length = ciphertext->cd_length; + + /* + * Do an update on the specified input data. + */ + switch (plaintext->cd_format) { + case CRYPTO_DATA_RAW: + ret = crypto_update_iov(&aes_ctx, plaintext, ciphertext, + aes_encrypt_contiguous_blocks, aes_copy_block64); + break; + case CRYPTO_DATA_UIO: + ret = crypto_update_uio(&aes_ctx, plaintext, ciphertext, + aes_encrypt_contiguous_blocks, aes_copy_block64); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + if (mechanism->cm_type == AES_CCM_MECH_INFO_TYPE) { + ret = ccm_encrypt_final((ccm_ctx_t *)&aes_ctx, + ciphertext, AES_BLOCK_LEN, aes_encrypt_block, + aes_xor_block); + if (ret != CRYPTO_SUCCESS) + goto out; + ASSERT(aes_ctx.ac_remainder_len == 0); + } else if (mechanism->cm_type == AES_GCM_MECH_INFO_TYPE || + mechanism->cm_type == AES_GMAC_MECH_INFO_TYPE) { + ret = gcm_encrypt_final((gcm_ctx_t *)&aes_ctx, + ciphertext, AES_BLOCK_LEN, aes_encrypt_block, + aes_copy_block, aes_xor_block); + if (ret != CRYPTO_SUCCESS) + goto out; + ASSERT(aes_ctx.ac_remainder_len == 0); + } else if (mechanism->cm_type == AES_CTR_MECH_INFO_TYPE) { + if (aes_ctx.ac_remainder_len > 0) { + ret = ctr_mode_final((ctr_ctx_t *)&aes_ctx, + ciphertext, aes_encrypt_block); + if (ret != CRYPTO_SUCCESS) + goto out; + } + } else { + ASSERT(aes_ctx.ac_remainder_len == 0); + } + + if (plaintext != ciphertext) { + ciphertext->cd_length = + ciphertext->cd_offset - saved_offset; + } + } else { + ciphertext->cd_length = saved_length; + } + ciphertext->cd_offset = saved_offset; + +out: + if (aes_ctx.ac_flags & PROVIDER_OWNS_KEY_SCHEDULE) { + bzero(aes_ctx.ac_keysched, aes_ctx.ac_keysched_len); + kmem_free(aes_ctx.ac_keysched, aes_ctx.ac_keysched_len); + } + + return (ret); +} + +/* ARGSUSED */ +static int +aes_decrypt_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *ciphertext, crypto_data_t *plaintext, + crypto_spi_ctx_template_t template, crypto_req_handle_t req) +{ + aes_ctx_t aes_ctx; /* on the stack */ + off_t saved_offset; + size_t saved_length; + size_t length_needed; + int ret; + + AES_ARG_INPLACE(ciphertext, plaintext); + + /* + * CCM, GCM, CTR, and GMAC modes do not require that ciphertext + * be a multiple of AES block size. + */ + switch (mechanism->cm_type) { + case AES_CTR_MECH_INFO_TYPE: + case AES_CCM_MECH_INFO_TYPE: + case AES_GCM_MECH_INFO_TYPE: + case AES_GMAC_MECH_INFO_TYPE: + break; + default: + if ((ciphertext->cd_length & (AES_BLOCK_LEN - 1)) != 0) + return (CRYPTO_ENCRYPTED_DATA_LEN_RANGE); + } + + if ((ret = aes_check_mech_param(mechanism, NULL, 0)) != CRYPTO_SUCCESS) + return (ret); + + bzero(&aes_ctx, sizeof (aes_ctx_t)); + + ret = aes_common_init_ctx(&aes_ctx, template, mechanism, key, + crypto_kmflag(req), B_FALSE); + if (ret != CRYPTO_SUCCESS) + return (ret); + + switch (mechanism->cm_type) { + case AES_CCM_MECH_INFO_TYPE: + length_needed = aes_ctx.ac_data_len; + break; + case AES_GCM_MECH_INFO_TYPE: + length_needed = ciphertext->cd_length - aes_ctx.ac_tag_len; + break; + case AES_GMAC_MECH_INFO_TYPE: + if (plaintext->cd_length != 0) + return (CRYPTO_ARGUMENTS_BAD); + length_needed = 0; + break; + default: + length_needed = ciphertext->cd_length; + } + + /* return size of buffer needed to store output */ + if (plaintext->cd_length < length_needed) { + plaintext->cd_length = length_needed; + ret = CRYPTO_BUFFER_TOO_SMALL; + goto out; + } + + saved_offset = plaintext->cd_offset; + saved_length = plaintext->cd_length; + + if (mechanism->cm_type == AES_GCM_MECH_INFO_TYPE || + mechanism->cm_type == AES_GMAC_MECH_INFO_TYPE) + gcm_set_kmflag((gcm_ctx_t *)&aes_ctx, crypto_kmflag(req)); + + /* + * Do an update on the specified input data. + */ + switch (ciphertext->cd_format) { + case CRYPTO_DATA_RAW: + ret = crypto_update_iov(&aes_ctx, ciphertext, plaintext, + aes_decrypt_contiguous_blocks, aes_copy_block64); + break; + case CRYPTO_DATA_UIO: + ret = crypto_update_uio(&aes_ctx, ciphertext, plaintext, + aes_decrypt_contiguous_blocks, aes_copy_block64); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + if (mechanism->cm_type == AES_CCM_MECH_INFO_TYPE) { + ASSERT(aes_ctx.ac_processed_data_len + == aes_ctx.ac_data_len); + ASSERT(aes_ctx.ac_processed_mac_len + == aes_ctx.ac_mac_len); + ret = ccm_decrypt_final((ccm_ctx_t *)&aes_ctx, + plaintext, AES_BLOCK_LEN, aes_encrypt_block, + aes_copy_block, aes_xor_block); + ASSERT(aes_ctx.ac_remainder_len == 0); + if ((ret == CRYPTO_SUCCESS) && + (ciphertext != plaintext)) { + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } else { + plaintext->cd_length = saved_length; + } + } else if (mechanism->cm_type == AES_GCM_MECH_INFO_TYPE || + mechanism->cm_type == AES_GMAC_MECH_INFO_TYPE) { + ret = gcm_decrypt_final((gcm_ctx_t *)&aes_ctx, + plaintext, AES_BLOCK_LEN, aes_encrypt_block, + aes_xor_block); + ASSERT(aes_ctx.ac_remainder_len == 0); + if ((ret == CRYPTO_SUCCESS) && + (ciphertext != plaintext)) { + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } else { + plaintext->cd_length = saved_length; + } + } else if (mechanism->cm_type != AES_CTR_MECH_INFO_TYPE) { + ASSERT(aes_ctx.ac_remainder_len == 0); + if (ciphertext != plaintext) + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } else { + if (aes_ctx.ac_remainder_len > 0) { + ret = ctr_mode_final((ctr_ctx_t *)&aes_ctx, + plaintext, aes_encrypt_block); + if (ret == CRYPTO_DATA_LEN_RANGE) + ret = CRYPTO_ENCRYPTED_DATA_LEN_RANGE; + if (ret != CRYPTO_SUCCESS) + goto out; + } + if (ciphertext != plaintext) + plaintext->cd_length = + plaintext->cd_offset - saved_offset; + } + } else { + plaintext->cd_length = saved_length; + } + plaintext->cd_offset = saved_offset; + +out: + if (aes_ctx.ac_flags & PROVIDER_OWNS_KEY_SCHEDULE) { + bzero(aes_ctx.ac_keysched, aes_ctx.ac_keysched_len); + kmem_free(aes_ctx.ac_keysched, aes_ctx.ac_keysched_len); + } + + if (aes_ctx.ac_flags & CCM_MODE) { + if (aes_ctx.ac_pt_buf != NULL) { + vmem_free(aes_ctx.ac_pt_buf, aes_ctx.ac_data_len); + } + } else if (aes_ctx.ac_flags & (GCM_MODE|GMAC_MODE)) { + if (((gcm_ctx_t *)&aes_ctx)->gcm_pt_buf != NULL) { + vmem_free(((gcm_ctx_t *)&aes_ctx)->gcm_pt_buf, + ((gcm_ctx_t *)&aes_ctx)->gcm_pt_buf_len); + } + } + + return (ret); +} + +/* + * KCF software provider context template entry points. + */ +/* ARGSUSED */ +static int +aes_create_ctx_template(crypto_provider_handle_t provider, + crypto_mechanism_t *mechanism, crypto_key_t *key, + crypto_spi_ctx_template_t *tmpl, size_t *tmpl_size, crypto_req_handle_t req) +{ + void *keysched; + size_t size; + int rv; + + if (mechanism->cm_type != AES_ECB_MECH_INFO_TYPE && + mechanism->cm_type != AES_CBC_MECH_INFO_TYPE && + mechanism->cm_type != AES_CTR_MECH_INFO_TYPE && + mechanism->cm_type != AES_CCM_MECH_INFO_TYPE && + mechanism->cm_type != AES_GCM_MECH_INFO_TYPE && + mechanism->cm_type != AES_GMAC_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + if ((keysched = aes_alloc_keysched(&size, + crypto_kmflag(req))) == NULL) { + return (CRYPTO_HOST_MEMORY); + } + + /* + * Initialize key schedule. Key length information is stored + * in the key. + */ + if ((rv = init_keysched(key, keysched)) != CRYPTO_SUCCESS) { + bzero(keysched, size); + kmem_free(keysched, size); + return (rv); + } + + *tmpl = keysched; + *tmpl_size = size; + + return (CRYPTO_SUCCESS); +} + + +static int +aes_free_context(crypto_ctx_t *ctx) +{ + aes_ctx_t *aes_ctx = ctx->cc_provider_private; + + if (aes_ctx != NULL) { + if (aes_ctx->ac_flags & PROVIDER_OWNS_KEY_SCHEDULE) { + ASSERT(aes_ctx->ac_keysched_len != 0); + bzero(aes_ctx->ac_keysched, aes_ctx->ac_keysched_len); + kmem_free(aes_ctx->ac_keysched, + aes_ctx->ac_keysched_len); + } + crypto_free_mode_ctx(aes_ctx); + ctx->cc_provider_private = NULL; + } + + return (CRYPTO_SUCCESS); +} + + +static int +aes_common_init_ctx(aes_ctx_t *aes_ctx, crypto_spi_ctx_template_t *template, + crypto_mechanism_t *mechanism, crypto_key_t *key, int kmflag, + boolean_t is_encrypt_init) +{ + int rv = CRYPTO_SUCCESS; + void *keysched; + size_t size = 0; + + if (template == NULL) { + if ((keysched = aes_alloc_keysched(&size, kmflag)) == NULL) + return (CRYPTO_HOST_MEMORY); + /* + * Initialize key schedule. + * Key length is stored in the key. + */ + if ((rv = init_keysched(key, keysched)) != CRYPTO_SUCCESS) { + kmem_free(keysched, size); + return (rv); + } + + aes_ctx->ac_flags |= PROVIDER_OWNS_KEY_SCHEDULE; + aes_ctx->ac_keysched_len = size; + } else { + keysched = template; + } + aes_ctx->ac_keysched = keysched; + + switch (mechanism->cm_type) { + case AES_CBC_MECH_INFO_TYPE: + rv = cbc_init_ctx((cbc_ctx_t *)aes_ctx, mechanism->cm_param, + mechanism->cm_param_len, AES_BLOCK_LEN, aes_copy_block64); + break; + case AES_CTR_MECH_INFO_TYPE: { + CK_AES_CTR_PARAMS *pp; + + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (CK_AES_CTR_PARAMS)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + pp = (CK_AES_CTR_PARAMS *)(void *)mechanism->cm_param; + rv = ctr_init_ctx((ctr_ctx_t *)aes_ctx, pp->ulCounterBits, + pp->cb, aes_copy_block); + break; + } + case AES_CCM_MECH_INFO_TYPE: + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (CK_AES_CCM_PARAMS)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + rv = ccm_init_ctx((ccm_ctx_t *)aes_ctx, mechanism->cm_param, + kmflag, is_encrypt_init, AES_BLOCK_LEN, aes_encrypt_block, + aes_xor_block); + break; + case AES_GCM_MECH_INFO_TYPE: + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (CK_AES_GCM_PARAMS)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + rv = gcm_init_ctx((gcm_ctx_t *)aes_ctx, mechanism->cm_param, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + break; + case AES_GMAC_MECH_INFO_TYPE: + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (CK_AES_GMAC_PARAMS)) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + rv = gmac_init_ctx((gcm_ctx_t *)aes_ctx, mechanism->cm_param, + AES_BLOCK_LEN, aes_encrypt_block, aes_copy_block, + aes_xor_block); + break; + case AES_ECB_MECH_INFO_TYPE: + aes_ctx->ac_flags |= ECB_MODE; + } + + if (rv != CRYPTO_SUCCESS) { + if (aes_ctx->ac_flags & PROVIDER_OWNS_KEY_SCHEDULE) { + bzero(keysched, size); + kmem_free(keysched, size); + } + } + + return (rv); +} + +static int +process_gmac_mech(crypto_mechanism_t *mech, crypto_data_t *data, + CK_AES_GCM_PARAMS *gcm_params) +{ + /* LINTED: pointer alignment */ + CK_AES_GMAC_PARAMS *params = (CK_AES_GMAC_PARAMS *)mech->cm_param; + + if (mech->cm_type != AES_GMAC_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + if (mech->cm_param_len != sizeof (CK_AES_GMAC_PARAMS)) + return (CRYPTO_MECHANISM_PARAM_INVALID); + + if (params->pIv == NULL) + return (CRYPTO_MECHANISM_PARAM_INVALID); + + gcm_params->pIv = params->pIv; + gcm_params->ulIvLen = AES_GMAC_IV_LEN; + gcm_params->ulTagBits = AES_GMAC_TAG_BITS; + + if (data == NULL) + return (CRYPTO_SUCCESS); + + if (data->cd_format != CRYPTO_DATA_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + gcm_params->pAAD = (uchar_t *)data->cd_raw.iov_base; + gcm_params->ulAADLen = data->cd_length; + return (CRYPTO_SUCCESS); +} + +static int +aes_mac_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t template, crypto_req_handle_t req) +{ + CK_AES_GCM_PARAMS gcm_params; + crypto_mechanism_t gcm_mech; + int rv; + + if ((rv = process_gmac_mech(mechanism, data, &gcm_params)) + != CRYPTO_SUCCESS) + return (rv); + + gcm_mech.cm_type = AES_GCM_MECH_INFO_TYPE; + gcm_mech.cm_param_len = sizeof (CK_AES_GCM_PARAMS); + gcm_mech.cm_param = (char *)&gcm_params; + + return (aes_encrypt_atomic(provider, session_id, &gcm_mech, + key, &null_crypto_data, mac, template, req)); +} + +static int +aes_mac_verify_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t template, crypto_req_handle_t req) +{ + CK_AES_GCM_PARAMS gcm_params; + crypto_mechanism_t gcm_mech; + int rv; + + if ((rv = process_gmac_mech(mechanism, data, &gcm_params)) + != CRYPTO_SUCCESS) + return (rv); + + gcm_mech.cm_type = AES_GCM_MECH_INFO_TYPE; + gcm_mech.cm_param_len = sizeof (CK_AES_GCM_PARAMS); + gcm_mech.cm_param = (char *)&gcm_params; + + return (aes_decrypt_atomic(provider, session_id, &gcm_mech, + key, mac, &null_crypto_data, template, req)); +} --- linux-aws-4.15.0.orig/zfs/module/icp/io/edonr_mod.c +++ linux-aws-4.15.0/zfs/module/icp/io/edonr_mod.c @@ -0,0 +1,63 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Unlike sha2 or skein, we won't expose edonr via the Kernel Cryptographic + * Framework (KCF), because Edon-R is *NOT* suitable for general-purpose + * cryptographic use. Users of Edon-R must interface directly to this module. + */ + +static struct modlmisc modlmisc = { + &mod_cryptoops, + "Edon-R Message-Digest Algorithm" +}; + +static struct modlinkage modlinkage = { + MODREV_1, {&modlmisc, NULL} +}; + +int +edonr_mod_init(void) +{ + int error; + + if ((error = mod_install(&modlinkage)) != 0) + return (error); + + return (0); +} + +int +edonr_mod_fini(void) +{ + return (mod_remove(&modlinkage)); +} --- linux-aws-4.15.0.orig/zfs/module/icp/io/sha1_mod.c +++ linux-aws-4.15.0/zfs/module/icp/io/sha1_mod.c @@ -0,0 +1,1239 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include + +#include +#include + +/* + * The sha1 module is created with two modlinkages: + * - a modlmisc that allows consumers to directly call the entry points + * SHA1Init, SHA1Update, and SHA1Final. + * - a modlcrypto that allows the module to register with the Kernel + * Cryptographic Framework (KCF) as a software provider for the SHA1 + * mechanisms. + */ + +static struct modlcrypto modlcrypto = { + &mod_cryptoops, + "SHA1 Kernel SW Provider 1.1" +}; + +static struct modlinkage modlinkage = { + MODREV_1, { &modlcrypto, NULL } +}; + + +/* + * Macros to access the SHA1 or SHA1-HMAC contexts from a context passed + * by KCF to one of the entry points. + */ + +#define PROV_SHA1_CTX(ctx) ((sha1_ctx_t *)(ctx)->cc_provider_private) +#define PROV_SHA1_HMAC_CTX(ctx) ((sha1_hmac_ctx_t *)(ctx)->cc_provider_private) + +/* to extract the digest length passed as mechanism parameter */ +#define PROV_SHA1_GET_DIGEST_LEN(m, len) { \ + if (IS_P2ALIGNED((m)->cm_param, sizeof (ulong_t))) \ + (len) = (uint32_t)*((ulong_t *)(void *)mechanism->cm_param); \ + else { \ + ulong_t tmp_ulong; \ + bcopy((m)->cm_param, &tmp_ulong, sizeof (ulong_t)); \ + (len) = (uint32_t)tmp_ulong; \ + } \ +} + +#define PROV_SHA1_DIGEST_KEY(ctx, key, len, digest) { \ + SHA1Init(ctx); \ + SHA1Update(ctx, key, len); \ + SHA1Final(digest, ctx); \ +} + +/* + * Mechanism info structure passed to KCF during registration. + */ +static crypto_mech_info_t sha1_mech_info_tab[] = { + /* SHA1 */ + {SUN_CKM_SHA1, SHA1_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + /* SHA1-HMAC */ + {SUN_CKM_SHA1_HMAC, SHA1_HMAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA1_HMAC_MIN_KEY_LEN, SHA1_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA1-HMAC GENERAL */ + {SUN_CKM_SHA1_HMAC_GENERAL, SHA1_HMAC_GEN_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA1_HMAC_MIN_KEY_LEN, SHA1_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES} +}; + +static void sha1_provider_status(crypto_provider_handle_t, uint_t *); + +static crypto_control_ops_t sha1_control_ops = { + sha1_provider_status +}; + +static int sha1_digest_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_req_handle_t); +static int sha1_digest(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha1_digest_update(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha1_digest_final(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha1_digest_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); + +static crypto_digest_ops_t sha1_digest_ops = { + .digest_init = sha1_digest_init, + .digest = sha1_digest, + .digest_update = sha1_digest_update, + .digest_key = NULL, + .digest_final = sha1_digest_final, + .digest_atomic = sha1_digest_atomic +}; + +static int sha1_mac_init(crypto_ctx_t *, crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int sha1_mac_update(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha1_mac_final(crypto_ctx_t *, crypto_data_t *, crypto_req_handle_t); +static int sha1_mac_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int sha1_mac_verify_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + +static crypto_mac_ops_t sha1_mac_ops = { + .mac_init = sha1_mac_init, + .mac = NULL, + .mac_update = sha1_mac_update, + .mac_final = sha1_mac_final, + .mac_atomic = sha1_mac_atomic, + .mac_verify_atomic = sha1_mac_verify_atomic +}; + +static int sha1_create_ctx_template(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t *, + size_t *, crypto_req_handle_t); +static int sha1_free_context(crypto_ctx_t *); + +static crypto_ctx_ops_t sha1_ctx_ops = { + .create_ctx_template = sha1_create_ctx_template, + .free_context = sha1_free_context +}; + +static crypto_ops_t sha1_crypto_ops = {{{{{ + &sha1_control_ops, + &sha1_digest_ops, + NULL, + &sha1_mac_ops, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &sha1_ctx_ops, +}}}}}; + +static crypto_provider_info_t sha1_prov_info = {{{{ + CRYPTO_SPI_VERSION_1, + "SHA1 Software Provider", + CRYPTO_SW_PROVIDER, + NULL, + &sha1_crypto_ops, + sizeof (sha1_mech_info_tab)/sizeof (crypto_mech_info_t), + sha1_mech_info_tab +}}}}; + +static crypto_kcf_provider_handle_t sha1_prov_handle = 0; + +int +sha1_mod_init(void) +{ + int ret; + + if ((ret = mod_install(&modlinkage)) != 0) + return (ret); + + /* + * Register with KCF. If the registration fails, log an + * error but do not uninstall the module, since the functionality + * provided by misc/sha1 should still be available. + */ + if ((ret = crypto_register_provider(&sha1_prov_info, + &sha1_prov_handle)) != CRYPTO_SUCCESS) + cmn_err(CE_WARN, "sha1 _init: " + "crypto_register_provider() failed (0x%x)", ret); + + return (0); +} + +int +sha1_mod_fini(void) +{ + int ret; + + if (sha1_prov_handle != 0) { + if ((ret = crypto_unregister_provider(sha1_prov_handle)) != + CRYPTO_SUCCESS) { + cmn_err(CE_WARN, + "sha1 _fini: crypto_unregister_provider() " + "failed (0x%x)", ret); + return (EBUSY); + } + sha1_prov_handle = 0; + } + + return (mod_remove(&modlinkage)); +} + +/* + * KCF software provider control entry points. + */ +/* ARGSUSED */ +static void +sha1_provider_status(crypto_provider_handle_t provider, uint_t *status) +{ + *status = CRYPTO_PROVIDER_READY; +} + +/* + * KCF software provider digest entry points. + */ + +static int +sha1_digest_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_req_handle_t req) +{ + if (mechanism->cm_type != SHA1_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + /* + * Allocate and initialize SHA1 context. + */ + ctx->cc_provider_private = kmem_alloc(sizeof (sha1_ctx_t), + crypto_kmflag(req)); + if (ctx->cc_provider_private == NULL) + return (CRYPTO_HOST_MEMORY); + + PROV_SHA1_CTX(ctx)->sc_mech_type = SHA1_MECH_INFO_TYPE; + SHA1Init(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx); + + return (CRYPTO_SUCCESS); +} + +/* + * Helper SHA1 digest update function for uio data. + */ +static int +sha1_digest_update_uio(SHA1_CTX *sha1_ctx, crypto_data_t *data) +{ + off_t offset = data->cd_offset; + size_t length = data->cd_length; + uint_t vec_idx; + size_t cur_len; + + /* we support only kernel buffer */ + if (data->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing data to be + * digested. + */ + for (vec_idx = 0; vec_idx < data->cd_uio->uio_iovcnt && + offset >= data->cd_uio->uio_iov[vec_idx].iov_len; + offset -= data->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == data->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is larger than the + * total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + /* + * Now do the digesting on the iovecs. + */ + while (vec_idx < data->cd_uio->uio_iovcnt && length > 0) { + cur_len = MIN(data->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + + SHA1Update(sha1_ctx, + (uint8_t *)data->cd_uio->uio_iov[vec_idx].iov_base + offset, + cur_len); + + length -= cur_len; + vec_idx++; + offset = 0; + } + + if (vec_idx == data->cd_uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + return (CRYPTO_SUCCESS); +} + +/* + * Helper SHA1 digest final function for uio data. + * digest_len is the length of the desired digest. If digest_len + * is smaller than the default SHA1 digest length, the caller + * must pass a scratch buffer, digest_scratch, which must + * be at least SHA1_DIGEST_LENGTH bytes. + */ +static int +sha1_digest_final_uio(SHA1_CTX *sha1_ctx, crypto_data_t *digest, + ulong_t digest_len, uchar_t *digest_scratch) +{ + off_t offset = digest->cd_offset; + uint_t vec_idx; + + /* we support only kernel buffer */ + if (digest->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing ptr to the digest to + * be returned. + */ + for (vec_idx = 0; offset >= digest->cd_uio->uio_iov[vec_idx].iov_len && + vec_idx < digest->cd_uio->uio_iovcnt; + offset -= digest->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == digest->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is + * larger than the total size of the buffers + * it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + if (offset + digest_len <= + digest->cd_uio->uio_iov[vec_idx].iov_len) { + /* + * The computed SHA1 digest will fit in the current + * iovec. + */ + if (digest_len != SHA1_DIGEST_LENGTH) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA1Final(digest_scratch, sha1_ctx); + bcopy(digest_scratch, (uchar_t *)digest-> + cd_uio->uio_iov[vec_idx].iov_base + offset, + digest_len); + } else { + SHA1Final((uchar_t *)digest-> + cd_uio->uio_iov[vec_idx].iov_base + offset, + sha1_ctx); + } + } else { + /* + * The computed digest will be crossing one or more iovec's. + * This is bad performance-wise but we need to support it. + * Allocate a small scratch buffer on the stack and + * copy it piece meal to the specified digest iovec's. + */ + uchar_t digest_tmp[SHA1_DIGEST_LENGTH]; + off_t scratch_offset = 0; + size_t length = digest_len; + size_t cur_len; + + SHA1Final(digest_tmp, sha1_ctx); + + while (vec_idx < digest->cd_uio->uio_iovcnt && length > 0) { + cur_len = MIN(digest->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + bcopy(digest_tmp + scratch_offset, + digest->cd_uio->uio_iov[vec_idx].iov_base + offset, + cur_len); + + length -= cur_len; + vec_idx++; + scratch_offset += cur_len; + offset = 0; + } + + if (vec_idx == digest->cd_uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it + * provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + } + + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +static int +sha1_digest(crypto_ctx_t *ctx, crypto_data_t *data, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((digest->cd_length == 0) || + (digest->cd_length < SHA1_DIGEST_LENGTH)) { + digest->cd_length = SHA1_DIGEST_LENGTH; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do the SHA1 update on the specified input data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Update(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_update_uio(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret != CRYPTO_SUCCESS) { + /* the update failed, free context and bail */ + kmem_free(ctx->cc_provider_private, sizeof (sha1_ctx_t)); + ctx->cc_provider_private = NULL; + digest->cd_length = 0; + return (ret); + } + + /* + * Do a SHA1 final, must be done separately since the digest + * type can be different than the input data type. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &PROV_SHA1_CTX(ctx)->sc_sha1_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_final_uio(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + digest, SHA1_DIGEST_LENGTH, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* all done, free context and return */ + + if (ret == CRYPTO_SUCCESS) { + digest->cd_length = SHA1_DIGEST_LENGTH; + } else { + digest->cd_length = 0; + } + + kmem_free(ctx->cc_provider_private, sizeof (sha1_ctx_t)); + ctx->cc_provider_private = NULL; + return (ret); +} + +/* ARGSUSED */ +static int +sha1_digest_update(crypto_ctx_t *ctx, crypto_data_t *data, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * Do the SHA1 update on the specified input data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Update(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_update_uio(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha1_digest_final(crypto_ctx_t *ctx, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((digest->cd_length == 0) || + (digest->cd_length < SHA1_DIGEST_LENGTH)) { + digest->cd_length = SHA1_DIGEST_LENGTH; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do a SHA1 final. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &PROV_SHA1_CTX(ctx)->sc_sha1_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_final_uio(&PROV_SHA1_CTX(ctx)->sc_sha1_ctx, + digest, SHA1_DIGEST_LENGTH, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* all done, free context and return */ + + if (ret == CRYPTO_SUCCESS) { + digest->cd_length = SHA1_DIGEST_LENGTH; + } else { + digest->cd_length = 0; + } + + kmem_free(ctx->cc_provider_private, sizeof (sha1_ctx_t)); + ctx->cc_provider_private = NULL; + + return (ret); +} + +/* ARGSUSED */ +static int +sha1_digest_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_data_t *data, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + SHA1_CTX sha1_ctx; + + if (mechanism->cm_type != SHA1_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + /* + * Do the SHA1 init. + */ + SHA1Init(&sha1_ctx); + + /* + * Do the SHA1 update on the specified input data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Update(&sha1_ctx, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_update_uio(&sha1_ctx, data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret != CRYPTO_SUCCESS) { + /* the update failed, bail */ + digest->cd_length = 0; + return (ret); + } + + /* + * Do a SHA1 final, must be done separately since the digest + * type can be different than the input data type. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &sha1_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_final_uio(&sha1_ctx, digest, + SHA1_DIGEST_LENGTH, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + digest->cd_length = SHA1_DIGEST_LENGTH; + } else { + digest->cd_length = 0; + } + + return (ret); +} + +/* + * KCF software provider mac entry points. + * + * SHA1 HMAC is: SHA1(key XOR opad, SHA1(key XOR ipad, text)) + * + * Init: + * The initialization routine initializes what we denote + * as the inner and outer contexts by doing + * - for inner context: SHA1(key XOR ipad) + * - for outer context: SHA1(key XOR opad) + * + * Update: + * Each subsequent SHA1 HMAC update will result in an + * update of the inner context with the specified data. + * + * Final: + * The SHA1 HMAC final will do a SHA1 final operation on the + * inner context, and the resulting digest will be used + * as the data for an update on the outer context. Last + * but not least, a SHA1 final on the outer context will + * be performed to obtain the SHA1 HMAC digest to return + * to the user. + */ + +/* + * Initialize a SHA1-HMAC context. + */ +static void +sha1_mac_init_ctx(sha1_hmac_ctx_t *ctx, void *keyval, uint_t length_in_bytes) +{ + uint32_t ipad[SHA1_HMAC_INTS_PER_BLOCK]; + uint32_t opad[SHA1_HMAC_INTS_PER_BLOCK]; + uint_t i; + + bzero(ipad, SHA1_HMAC_BLOCK_SIZE); + bzero(opad, SHA1_HMAC_BLOCK_SIZE); + + bcopy(keyval, ipad, length_in_bytes); + bcopy(keyval, opad, length_in_bytes); + + /* XOR key with ipad (0x36) and opad (0x5c) */ + for (i = 0; i < SHA1_HMAC_INTS_PER_BLOCK; i++) { + ipad[i] ^= 0x36363636; + opad[i] ^= 0x5c5c5c5c; + } + + /* perform SHA1 on ipad */ + SHA1Init(&ctx->hc_icontext); + SHA1Update(&ctx->hc_icontext, (uint8_t *)ipad, SHA1_HMAC_BLOCK_SIZE); + + /* perform SHA1 on opad */ + SHA1Init(&ctx->hc_ocontext); + SHA1Update(&ctx->hc_ocontext, (uint8_t *)opad, SHA1_HMAC_BLOCK_SIZE); +} + +/* + */ +static int +sha1_mac_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t ctx_template, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + if (mechanism->cm_type != SHA1_HMAC_MECH_INFO_TYPE && + mechanism->cm_type != SHA1_HMAC_GEN_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + ctx->cc_provider_private = kmem_alloc(sizeof (sha1_hmac_ctx_t), + crypto_kmflag(req)); + if (ctx->cc_provider_private == NULL) + return (CRYPTO_HOST_MEMORY); + + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, PROV_SHA1_HMAC_CTX(ctx), + sizeof (sha1_hmac_ctx_t)); + } else { + /* no context template, compute context */ + if (keylen_in_bytes > SHA1_HMAC_BLOCK_SIZE) { + uchar_t digested_key[SHA1_DIGEST_LENGTH]; + sha1_hmac_ctx_t *hmac_ctx = ctx->cc_provider_private; + + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA1_DIGEST_KEY(&hmac_ctx->hc_icontext, + key->ck_data, keylen_in_bytes, digested_key); + sha1_mac_init_ctx(PROV_SHA1_HMAC_CTX(ctx), + digested_key, SHA1_DIGEST_LENGTH); + } else { + sha1_mac_init_ctx(PROV_SHA1_HMAC_CTX(ctx), + key->ck_data, keylen_in_bytes); + } + } + + /* + * Get the mechanism parameters, if applicable. + */ + PROV_SHA1_HMAC_CTX(ctx)->hc_mech_type = mechanism->cm_type; + if (mechanism->cm_type == SHA1_HMAC_GEN_MECH_INFO_TYPE) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) + ret = CRYPTO_MECHANISM_PARAM_INVALID; + PROV_SHA1_GET_DIGEST_LEN(mechanism, + PROV_SHA1_HMAC_CTX(ctx)->hc_digest_len); + if (PROV_SHA1_HMAC_CTX(ctx)->hc_digest_len > + SHA1_DIGEST_LENGTH) + ret = CRYPTO_MECHANISM_PARAM_INVALID; + } + + if (ret != CRYPTO_SUCCESS) { + bzero(ctx->cc_provider_private, sizeof (sha1_hmac_ctx_t)); + kmem_free(ctx->cc_provider_private, sizeof (sha1_hmac_ctx_t)); + ctx->cc_provider_private = NULL; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha1_mac_update(crypto_ctx_t *ctx, crypto_data_t *data, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * Do a SHA1 update of the inner context using the specified + * data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA1Update(&PROV_SHA1_HMAC_CTX(ctx)->hc_icontext, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_update_uio( + &PROV_SHA1_HMAC_CTX(ctx)->hc_icontext, data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha1_mac_final(crypto_ctx_t *ctx, crypto_data_t *mac, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA1_DIGEST_LENGTH]; + uint32_t digest_len = SHA1_DIGEST_LENGTH; + + ASSERT(ctx->cc_provider_private != NULL); + + if (PROV_SHA1_HMAC_CTX(ctx)->hc_mech_type == + SHA1_HMAC_GEN_MECH_INFO_TYPE) + digest_len = PROV_SHA1_HMAC_CTX(ctx)->hc_digest_len; + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((mac->cd_length == 0) || (mac->cd_length < digest_len)) { + mac->cd_length = digest_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do a SHA1 final on the inner context. + */ + SHA1Final(digest, &PROV_SHA1_HMAC_CTX(ctx)->hc_icontext); + + /* + * Do a SHA1 update on the outer context, feeding the inner + * digest as data. + */ + SHA1Update(&PROV_SHA1_HMAC_CTX(ctx)->hc_ocontext, digest, + SHA1_DIGEST_LENGTH); + + /* + * Do a SHA1 final on the outer context, storing the computing + * digest in the users buffer. + */ + switch (mac->cd_format) { + case CRYPTO_DATA_RAW: + if (digest_len != SHA1_DIGEST_LENGTH) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA1Final(digest, + &PROV_SHA1_HMAC_CTX(ctx)->hc_ocontext); + bcopy(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len); + } else { + SHA1Final((unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, + &PROV_SHA1_HMAC_CTX(ctx)->hc_ocontext); + } + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_final_uio( + &PROV_SHA1_HMAC_CTX(ctx)->hc_ocontext, mac, + digest_len, digest); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + mac->cd_length = digest_len; + } else { + mac->cd_length = 0; + } + + bzero(ctx->cc_provider_private, sizeof (sha1_hmac_ctx_t)); + kmem_free(ctx->cc_provider_private, sizeof (sha1_hmac_ctx_t)); + ctx->cc_provider_private = NULL; + + return (ret); +} + +#define SHA1_MAC_UPDATE(data, ctx, ret) { \ + switch (data->cd_format) { \ + case CRYPTO_DATA_RAW: \ + SHA1Update(&(ctx).hc_icontext, \ + (uint8_t *)data->cd_raw.iov_base + \ + data->cd_offset, data->cd_length); \ + break; \ + case CRYPTO_DATA_UIO: \ + ret = sha1_digest_update_uio(&(ctx).hc_icontext, data); \ + break; \ + default: \ + ret = CRYPTO_ARGUMENTS_BAD; \ + } \ +} + +/* ARGSUSED */ +static int +sha1_mac_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t ctx_template, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA1_DIGEST_LENGTH]; + sha1_hmac_ctx_t sha1_hmac_ctx; + uint32_t digest_len = SHA1_DIGEST_LENGTH; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + if (mechanism->cm_type != SHA1_HMAC_MECH_INFO_TYPE && + mechanism->cm_type != SHA1_HMAC_GEN_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, &sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + } else { + /* no context template, initialize context */ + if (keylen_in_bytes > SHA1_HMAC_BLOCK_SIZE) { + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA1_DIGEST_KEY(&sha1_hmac_ctx.hc_icontext, + key->ck_data, keylen_in_bytes, digest); + sha1_mac_init_ctx(&sha1_hmac_ctx, digest, + SHA1_DIGEST_LENGTH); + } else { + sha1_mac_init_ctx(&sha1_hmac_ctx, key->ck_data, + keylen_in_bytes); + } + } + + /* get the mechanism parameters, if applicable */ + if (mechanism->cm_type == SHA1_HMAC_GEN_MECH_INFO_TYPE) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + PROV_SHA1_GET_DIGEST_LEN(mechanism, digest_len); + if (digest_len > SHA1_DIGEST_LENGTH) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + } + + /* do a SHA1 update of the inner context using the specified data */ + SHA1_MAC_UPDATE(data, sha1_hmac_ctx, ret); + if (ret != CRYPTO_SUCCESS) + /* the update failed, free context and bail */ + goto bail; + + /* + * Do a SHA1 final on the inner context. + */ + SHA1Final(digest, &sha1_hmac_ctx.hc_icontext); + + /* + * Do an SHA1 update on the outer context, feeding the inner + * digest as data. + */ + SHA1Update(&sha1_hmac_ctx.hc_ocontext, digest, SHA1_DIGEST_LENGTH); + + /* + * Do a SHA1 final on the outer context, storing the computed + * digest in the users buffer. + */ + switch (mac->cd_format) { + case CRYPTO_DATA_RAW: + if (digest_len != SHA1_DIGEST_LENGTH) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA1Final(digest, &sha1_hmac_ctx.hc_ocontext); + bcopy(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len); + } else { + SHA1Final((unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, &sha1_hmac_ctx.hc_ocontext); + } + break; + case CRYPTO_DATA_UIO: + ret = sha1_digest_final_uio(&sha1_hmac_ctx.hc_ocontext, mac, + digest_len, digest); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + mac->cd_length = digest_len; + } else { + mac->cd_length = 0; + } + /* Extra paranoia: zeroize the context on the stack */ + bzero(&sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + + return (ret); +bail: + bzero(&sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + mac->cd_length = 0; + return (ret); +} + +/* ARGSUSED */ +static int +sha1_mac_verify_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t ctx_template, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA1_DIGEST_LENGTH]; + sha1_hmac_ctx_t sha1_hmac_ctx; + uint32_t digest_len = SHA1_DIGEST_LENGTH; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + if (mechanism->cm_type != SHA1_HMAC_MECH_INFO_TYPE && + mechanism->cm_type != SHA1_HMAC_GEN_MECH_INFO_TYPE) + return (CRYPTO_MECHANISM_INVALID); + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, &sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + } else { + /* no context template, initialize context */ + if (keylen_in_bytes > SHA1_HMAC_BLOCK_SIZE) { + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA1_DIGEST_KEY(&sha1_hmac_ctx.hc_icontext, + key->ck_data, keylen_in_bytes, digest); + sha1_mac_init_ctx(&sha1_hmac_ctx, digest, + SHA1_DIGEST_LENGTH); + } else { + sha1_mac_init_ctx(&sha1_hmac_ctx, key->ck_data, + keylen_in_bytes); + } + } + + /* get the mechanism parameters, if applicable */ + if (mechanism->cm_type == SHA1_HMAC_GEN_MECH_INFO_TYPE) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + PROV_SHA1_GET_DIGEST_LEN(mechanism, digest_len); + if (digest_len > SHA1_DIGEST_LENGTH) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + } + + if (mac->cd_length != digest_len) { + ret = CRYPTO_INVALID_MAC; + goto bail; + } + + /* do a SHA1 update of the inner context using the specified data */ + SHA1_MAC_UPDATE(data, sha1_hmac_ctx, ret); + if (ret != CRYPTO_SUCCESS) + /* the update failed, free context and bail */ + goto bail; + + /* do a SHA1 final on the inner context */ + SHA1Final(digest, &sha1_hmac_ctx.hc_icontext); + + /* + * Do an SHA1 update on the outer context, feeding the inner + * digest as data. + */ + SHA1Update(&sha1_hmac_ctx.hc_ocontext, digest, SHA1_DIGEST_LENGTH); + + /* + * Do a SHA1 final on the outer context, storing the computed + * digest in the users buffer. + */ + SHA1Final(digest, &sha1_hmac_ctx.hc_ocontext); + + /* + * Compare the computed digest against the expected digest passed + * as argument. + */ + + switch (mac->cd_format) { + + case CRYPTO_DATA_RAW: + if (bcmp(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len) != 0) + ret = CRYPTO_INVALID_MAC; + break; + + case CRYPTO_DATA_UIO: { + off_t offset = mac->cd_offset; + uint_t vec_idx; + off_t scratch_offset = 0; + size_t length = digest_len; + size_t cur_len; + + /* we support only kernel buffer */ + if (mac->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* jump to the first iovec containing the expected digest */ + for (vec_idx = 0; + offset >= mac->cd_uio->uio_iov[vec_idx].iov_len && + vec_idx < mac->cd_uio->uio_iovcnt; + offset -= mac->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == mac->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is + * larger than the total size of the buffers + * it provided. + */ + ret = CRYPTO_DATA_LEN_RANGE; + break; + } + + /* do the comparison of computed digest vs specified one */ + while (vec_idx < mac->cd_uio->uio_iovcnt && length > 0) { + cur_len = MIN(mac->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + + if (bcmp(digest + scratch_offset, + mac->cd_uio->uio_iov[vec_idx].iov_base + offset, + cur_len) != 0) { + ret = CRYPTO_INVALID_MAC; + break; + } + + length -= cur_len; + vec_idx++; + scratch_offset += cur_len; + offset = 0; + } + break; + } + + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + bzero(&sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + return (ret); +bail: + bzero(&sha1_hmac_ctx, sizeof (sha1_hmac_ctx_t)); + mac->cd_length = 0; + return (ret); +} + +/* + * KCF software provider context management entry points. + */ + +/* ARGSUSED */ +static int +sha1_create_ctx_template(crypto_provider_handle_t provider, + crypto_mechanism_t *mechanism, crypto_key_t *key, + crypto_spi_ctx_template_t *ctx_template, size_t *ctx_template_size, + crypto_req_handle_t req) +{ + sha1_hmac_ctx_t *sha1_hmac_ctx_tmpl; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + if ((mechanism->cm_type != SHA1_HMAC_MECH_INFO_TYPE) && + (mechanism->cm_type != SHA1_HMAC_GEN_MECH_INFO_TYPE)) { + return (CRYPTO_MECHANISM_INVALID); + } + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Allocate and initialize SHA1 context. + */ + sha1_hmac_ctx_tmpl = kmem_alloc(sizeof (sha1_hmac_ctx_t), + crypto_kmflag(req)); + if (sha1_hmac_ctx_tmpl == NULL) + return (CRYPTO_HOST_MEMORY); + + if (keylen_in_bytes > SHA1_HMAC_BLOCK_SIZE) { + uchar_t digested_key[SHA1_DIGEST_LENGTH]; + + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA1_DIGEST_KEY(&sha1_hmac_ctx_tmpl->hc_icontext, + key->ck_data, keylen_in_bytes, digested_key); + sha1_mac_init_ctx(sha1_hmac_ctx_tmpl, digested_key, + SHA1_DIGEST_LENGTH); + } else { + sha1_mac_init_ctx(sha1_hmac_ctx_tmpl, key->ck_data, + keylen_in_bytes); + } + + sha1_hmac_ctx_tmpl->hc_mech_type = mechanism->cm_type; + *ctx_template = (crypto_spi_ctx_template_t)sha1_hmac_ctx_tmpl; + *ctx_template_size = sizeof (sha1_hmac_ctx_t); + + + return (CRYPTO_SUCCESS); +} + +static int +sha1_free_context(crypto_ctx_t *ctx) +{ + uint_t ctx_len; + sha1_mech_type_t mech_type; + + if (ctx->cc_provider_private == NULL) + return (CRYPTO_SUCCESS); + + /* + * We have to free either SHA1 or SHA1-HMAC contexts, which + * have different lengths. + */ + + mech_type = PROV_SHA1_CTX(ctx)->sc_mech_type; + if (mech_type == SHA1_MECH_INFO_TYPE) + ctx_len = sizeof (sha1_ctx_t); + else { + ASSERT(mech_type == SHA1_HMAC_MECH_INFO_TYPE || + mech_type == SHA1_HMAC_GEN_MECH_INFO_TYPE); + ctx_len = sizeof (sha1_hmac_ctx_t); + } + + bzero(ctx->cc_provider_private, ctx_len); + kmem_free(ctx->cc_provider_private, ctx_len); + ctx->cc_provider_private = NULL; + + return (CRYPTO_SUCCESS); +} --- linux-aws-4.15.0.orig/zfs/module/icp/io/sha2_mod.c +++ linux-aws-4.15.0/zfs/module/icp/io/sha2_mod.c @@ -0,0 +1,1409 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#define _SHA2_IMPL +#include +#include + +/* + * The sha2 module is created with two modlinkages: + * - a modlmisc that allows consumers to directly call the entry points + * SHA2Init, SHA2Update, and SHA2Final. + * - a modlcrypto that allows the module to register with the Kernel + * Cryptographic Framework (KCF) as a software provider for the SHA2 + * mechanisms. + */ + +static struct modlcrypto modlcrypto = { + &mod_cryptoops, + "SHA2 Kernel SW Provider" +}; + +static struct modlinkage modlinkage = { + MODREV_1, {&modlcrypto, NULL} +}; + +/* + * Macros to access the SHA2 or SHA2-HMAC contexts from a context passed + * by KCF to one of the entry points. + */ + +#define PROV_SHA2_CTX(ctx) ((sha2_ctx_t *)(ctx)->cc_provider_private) +#define PROV_SHA2_HMAC_CTX(ctx) ((sha2_hmac_ctx_t *)(ctx)->cc_provider_private) + +/* to extract the digest length passed as mechanism parameter */ +#define PROV_SHA2_GET_DIGEST_LEN(m, len) { \ + if (IS_P2ALIGNED((m)->cm_param, sizeof (ulong_t))) \ + (len) = (uint32_t)*((ulong_t *)(m)->cm_param); \ + else { \ + ulong_t tmp_ulong; \ + bcopy((m)->cm_param, &tmp_ulong, sizeof (ulong_t)); \ + (len) = (uint32_t)tmp_ulong; \ + } \ +} + +#define PROV_SHA2_DIGEST_KEY(mech, ctx, key, len, digest) { \ + SHA2Init(mech, ctx); \ + SHA2Update(ctx, key, len); \ + SHA2Final(digest, ctx); \ +} + +/* + * Mechanism info structure passed to KCF during registration. + */ +static crypto_mech_info_t sha2_mech_info_tab[] = { + /* SHA256 */ + {SUN_CKM_SHA256, SHA256_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + /* SHA256-HMAC */ + {SUN_CKM_SHA256_HMAC, SHA256_HMAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA256-HMAC GENERAL */ + {SUN_CKM_SHA256_HMAC_GENERAL, SHA256_HMAC_GEN_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA384 */ + {SUN_CKM_SHA384, SHA384_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + /* SHA384-HMAC */ + {SUN_CKM_SHA384_HMAC, SHA384_HMAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA384-HMAC GENERAL */ + {SUN_CKM_SHA384_HMAC_GENERAL, SHA384_HMAC_GEN_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA512 */ + {SUN_CKM_SHA512, SHA512_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + /* SHA512-HMAC */ + {SUN_CKM_SHA512_HMAC, SHA512_HMAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + /* SHA512-HMAC GENERAL */ + {SUN_CKM_SHA512_HMAC_GENERAL, SHA512_HMAC_GEN_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, + SHA2_HMAC_MIN_KEY_LEN, SHA2_HMAC_MAX_KEY_LEN, + CRYPTO_KEYSIZE_UNIT_IN_BYTES} +}; + +static void sha2_provider_status(crypto_provider_handle_t, uint_t *); + +static crypto_control_ops_t sha2_control_ops = { + sha2_provider_status +}; + +static int sha2_digest_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_req_handle_t); +static int sha2_digest(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha2_digest_update(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha2_digest_final(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha2_digest_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); + +static crypto_digest_ops_t sha2_digest_ops = { + .digest_init = sha2_digest_init, + .digest = sha2_digest, + .digest_update = sha2_digest_update, + .digest_key = NULL, + .digest_final = sha2_digest_final, + .digest_atomic = sha2_digest_atomic +}; + +static int sha2_mac_init(crypto_ctx_t *, crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int sha2_mac_update(crypto_ctx_t *, crypto_data_t *, + crypto_req_handle_t); +static int sha2_mac_final(crypto_ctx_t *, crypto_data_t *, crypto_req_handle_t); +static int sha2_mac_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int sha2_mac_verify_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + +static crypto_mac_ops_t sha2_mac_ops = { + .mac_init = sha2_mac_init, + .mac = NULL, + .mac_update = sha2_mac_update, + .mac_final = sha2_mac_final, + .mac_atomic = sha2_mac_atomic, + .mac_verify_atomic = sha2_mac_verify_atomic +}; + +static int sha2_create_ctx_template(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t *, + size_t *, crypto_req_handle_t); +static int sha2_free_context(crypto_ctx_t *); + +static crypto_ctx_ops_t sha2_ctx_ops = { + .create_ctx_template = sha2_create_ctx_template, + .free_context = sha2_free_context +}; + +static crypto_ops_t sha2_crypto_ops = {{{{{ + &sha2_control_ops, + &sha2_digest_ops, + NULL, + &sha2_mac_ops, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &sha2_ctx_ops +}}}}}; + +static crypto_provider_info_t sha2_prov_info = {{{{ + CRYPTO_SPI_VERSION_1, + "SHA2 Software Provider", + CRYPTO_SW_PROVIDER, + NULL, + &sha2_crypto_ops, + sizeof (sha2_mech_info_tab)/sizeof (crypto_mech_info_t), + sha2_mech_info_tab +}}}}; + +static crypto_kcf_provider_handle_t sha2_prov_handle = 0; + +int +sha2_mod_init(void) +{ + int ret; + + if ((ret = mod_install(&modlinkage)) != 0) + return (ret); + + /* + * Register with KCF. If the registration fails, log an + * error but do not uninstall the module, since the functionality + * provided by misc/sha2 should still be available. + */ + if ((ret = crypto_register_provider(&sha2_prov_info, + &sha2_prov_handle)) != CRYPTO_SUCCESS) + cmn_err(CE_WARN, "sha2 _init: " + "crypto_register_provider() failed (0x%x)", ret); + + return (0); +} + +int +sha2_mod_fini(void) +{ + int ret; + + if (sha2_prov_handle != 0) { + if ((ret = crypto_unregister_provider(sha2_prov_handle)) != + CRYPTO_SUCCESS) { + cmn_err(CE_WARN, + "sha2 _fini: crypto_unregister_provider() " + "failed (0x%x)", ret); + return (EBUSY); + } + sha2_prov_handle = 0; + } + + return (mod_remove(&modlinkage)); +} + +/* + * KCF software provider control entry points. + */ +/* ARGSUSED */ +static void +sha2_provider_status(crypto_provider_handle_t provider, uint_t *status) +{ + *status = CRYPTO_PROVIDER_READY; +} + +/* + * KCF software provider digest entry points. + */ + +static int +sha2_digest_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_req_handle_t req) +{ + + /* + * Allocate and initialize SHA2 context. + */ + ctx->cc_provider_private = kmem_alloc(sizeof (sha2_ctx_t), + crypto_kmflag(req)); + if (ctx->cc_provider_private == NULL) + return (CRYPTO_HOST_MEMORY); + + PROV_SHA2_CTX(ctx)->sc_mech_type = mechanism->cm_type; + SHA2Init(mechanism->cm_type, &PROV_SHA2_CTX(ctx)->sc_sha2_ctx); + + return (CRYPTO_SUCCESS); +} + +/* + * Helper SHA2 digest update function for uio data. + */ +static int +sha2_digest_update_uio(SHA2_CTX *sha2_ctx, crypto_data_t *data) +{ + off_t offset = data->cd_offset; + size_t length = data->cd_length; + uint_t vec_idx; + size_t cur_len; + + /* we support only kernel buffer */ + if (data->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing data to be + * digested. + */ + for (vec_idx = 0; vec_idx < data->cd_uio->uio_iovcnt && + offset >= data->cd_uio->uio_iov[vec_idx].iov_len; + offset -= data->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == data->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is larger than the + * total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + /* + * Now do the digesting on the iovecs. + */ + while (vec_idx < data->cd_uio->uio_iovcnt && length > 0) { + cur_len = MIN(data->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + + SHA2Update(sha2_ctx, (uint8_t *)data->cd_uio-> + uio_iov[vec_idx].iov_base + offset, cur_len); + length -= cur_len; + vec_idx++; + offset = 0; + } + + if (vec_idx == data->cd_uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + return (CRYPTO_SUCCESS); +} + +/* + * Helper SHA2 digest final function for uio data. + * digest_len is the length of the desired digest. If digest_len + * is smaller than the default SHA2 digest length, the caller + * must pass a scratch buffer, digest_scratch, which must + * be at least the algorithm's digest length bytes. + */ +static int +sha2_digest_final_uio(SHA2_CTX *sha2_ctx, crypto_data_t *digest, + ulong_t digest_len, uchar_t *digest_scratch) +{ + off_t offset = digest->cd_offset; + uint_t vec_idx; + + /* we support only kernel buffer */ + if (digest->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing ptr to the digest to + * be returned. + */ + for (vec_idx = 0; offset >= digest->cd_uio->uio_iov[vec_idx].iov_len && + vec_idx < digest->cd_uio->uio_iovcnt; + offset -= digest->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == digest->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is + * larger than the total size of the buffers + * it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + if (offset + digest_len <= + digest->cd_uio->uio_iov[vec_idx].iov_len) { + /* + * The computed SHA2 digest will fit in the current + * iovec. + */ + if (((sha2_ctx->algotype <= SHA256_HMAC_GEN_MECH_INFO_TYPE) && + (digest_len != SHA256_DIGEST_LENGTH)) || + ((sha2_ctx->algotype > SHA256_HMAC_GEN_MECH_INFO_TYPE) && + (digest_len != SHA512_DIGEST_LENGTH))) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA2Final(digest_scratch, sha2_ctx); + + bcopy(digest_scratch, (uchar_t *)digest-> + cd_uio->uio_iov[vec_idx].iov_base + offset, + digest_len); + } else { + SHA2Final((uchar_t *)digest-> + cd_uio->uio_iov[vec_idx].iov_base + offset, + sha2_ctx); + + } + } else { + /* + * The computed digest will be crossing one or more iovec's. + * This is bad performance-wise but we need to support it. + * Allocate a small scratch buffer on the stack and + * copy it piece meal to the specified digest iovec's. + */ + uchar_t digest_tmp[SHA512_DIGEST_LENGTH]; + off_t scratch_offset = 0; + size_t length = digest_len; + size_t cur_len; + + SHA2Final(digest_tmp, sha2_ctx); + + while (vec_idx < digest->cd_uio->uio_iovcnt && length > 0) { + cur_len = + MIN(digest->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + bcopy(digest_tmp + scratch_offset, + digest->cd_uio->uio_iov[vec_idx].iov_base + offset, + cur_len); + + length -= cur_len; + vec_idx++; + scratch_offset += cur_len; + offset = 0; + } + + if (vec_idx == digest->cd_uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it + * provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + } + + return (CRYPTO_SUCCESS); +} + +/* ARGSUSED */ +static int +sha2_digest(crypto_ctx_t *ctx, crypto_data_t *data, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uint_t sha_digest_len; + + ASSERT(ctx->cc_provider_private != NULL); + + switch (PROV_SHA2_CTX(ctx)->sc_mech_type) { + case SHA256_MECH_INFO_TYPE: + sha_digest_len = SHA256_DIGEST_LENGTH; + break; + case SHA384_MECH_INFO_TYPE: + sha_digest_len = SHA384_DIGEST_LENGTH; + break; + case SHA512_MECH_INFO_TYPE: + sha_digest_len = SHA512_DIGEST_LENGTH; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((digest->cd_length == 0) || + (digest->cd_length < sha_digest_len)) { + digest->cd_length = sha_digest_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do the SHA2 update on the specified input data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Update(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_update_uio(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret != CRYPTO_SUCCESS) { + /* the update failed, free context and bail */ + kmem_free(ctx->cc_provider_private, sizeof (sha2_ctx_t)); + ctx->cc_provider_private = NULL; + digest->cd_length = 0; + return (ret); + } + + /* + * Do a SHA2 final, must be done separately since the digest + * type can be different than the input data type. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &PROV_SHA2_CTX(ctx)->sc_sha2_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_final_uio(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + digest, sha_digest_len, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* all done, free context and return */ + + if (ret == CRYPTO_SUCCESS) + digest->cd_length = sha_digest_len; + else + digest->cd_length = 0; + + kmem_free(ctx->cc_provider_private, sizeof (sha2_ctx_t)); + ctx->cc_provider_private = NULL; + return (ret); +} + +/* ARGSUSED */ +static int +sha2_digest_update(crypto_ctx_t *ctx, crypto_data_t *data, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * Do the SHA2 update on the specified input data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Update(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_update_uio(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha2_digest_final(crypto_ctx_t *ctx, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uint_t sha_digest_len; + + ASSERT(ctx->cc_provider_private != NULL); + + switch (PROV_SHA2_CTX(ctx)->sc_mech_type) { + case SHA256_MECH_INFO_TYPE: + sha_digest_len = SHA256_DIGEST_LENGTH; + break; + case SHA384_MECH_INFO_TYPE: + sha_digest_len = SHA384_DIGEST_LENGTH; + break; + case SHA512_MECH_INFO_TYPE: + sha_digest_len = SHA512_DIGEST_LENGTH; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((digest->cd_length == 0) || + (digest->cd_length < sha_digest_len)) { + digest->cd_length = sha_digest_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do a SHA2 final. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &PROV_SHA2_CTX(ctx)->sc_sha2_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_final_uio(&PROV_SHA2_CTX(ctx)->sc_sha2_ctx, + digest, sha_digest_len, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* all done, free context and return */ + + if (ret == CRYPTO_SUCCESS) + digest->cd_length = sha_digest_len; + else + digest->cd_length = 0; + + kmem_free(ctx->cc_provider_private, sizeof (sha2_ctx_t)); + ctx->cc_provider_private = NULL; + + return (ret); +} + +/* ARGSUSED */ +static int +sha2_digest_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_data_t *data, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + SHA2_CTX sha2_ctx; + uint32_t sha_digest_len; + + /* + * Do the SHA inits. + */ + + SHA2Init(mechanism->cm_type, &sha2_ctx); + + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Update(&sha2_ctx, (uint8_t *)data-> + cd_raw.iov_base + data->cd_offset, data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_update_uio(&sha2_ctx, data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + /* + * Do the SHA updates on the specified input data. + */ + + if (ret != CRYPTO_SUCCESS) { + /* the update failed, bail */ + digest->cd_length = 0; + return (ret); + } + + if (mechanism->cm_type <= SHA256_HMAC_GEN_MECH_INFO_TYPE) + sha_digest_len = SHA256_DIGEST_LENGTH; + else + sha_digest_len = SHA512_DIGEST_LENGTH; + + /* + * Do a SHA2 final, must be done separately since the digest + * type can be different than the input data type. + */ + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Final((unsigned char *)digest->cd_raw.iov_base + + digest->cd_offset, &sha2_ctx); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_final_uio(&sha2_ctx, digest, + sha_digest_len, NULL); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) + digest->cd_length = sha_digest_len; + else + digest->cd_length = 0; + + return (ret); +} + +/* + * KCF software provider mac entry points. + * + * SHA2 HMAC is: SHA2(key XOR opad, SHA2(key XOR ipad, text)) + * + * Init: + * The initialization routine initializes what we denote + * as the inner and outer contexts by doing + * - for inner context: SHA2(key XOR ipad) + * - for outer context: SHA2(key XOR opad) + * + * Update: + * Each subsequent SHA2 HMAC update will result in an + * update of the inner context with the specified data. + * + * Final: + * The SHA2 HMAC final will do a SHA2 final operation on the + * inner context, and the resulting digest will be used + * as the data for an update on the outer context. Last + * but not least, a SHA2 final on the outer context will + * be performed to obtain the SHA2 HMAC digest to return + * to the user. + */ + +/* + * Initialize a SHA2-HMAC context. + */ +static void +sha2_mac_init_ctx(sha2_hmac_ctx_t *ctx, void *keyval, uint_t length_in_bytes) +{ + uint64_t ipad[SHA512_HMAC_BLOCK_SIZE / sizeof (uint64_t)]; + uint64_t opad[SHA512_HMAC_BLOCK_SIZE / sizeof (uint64_t)]; + int i, block_size, blocks_per_int64; + + /* Determine the block size */ + if (ctx->hc_mech_type <= SHA256_HMAC_GEN_MECH_INFO_TYPE) { + block_size = SHA256_HMAC_BLOCK_SIZE; + blocks_per_int64 = SHA256_HMAC_BLOCK_SIZE / sizeof (uint64_t); + } else { + block_size = SHA512_HMAC_BLOCK_SIZE; + blocks_per_int64 = SHA512_HMAC_BLOCK_SIZE / sizeof (uint64_t); + } + + (void) bzero(ipad, block_size); + (void) bzero(opad, block_size); + (void) bcopy(keyval, ipad, length_in_bytes); + (void) bcopy(keyval, opad, length_in_bytes); + + /* XOR key with ipad (0x36) and opad (0x5c) */ + for (i = 0; i < blocks_per_int64; i ++) { + ipad[i] ^= 0x3636363636363636; + opad[i] ^= 0x5c5c5c5c5c5c5c5c; + } + + /* perform SHA2 on ipad */ + SHA2Init(ctx->hc_mech_type, &ctx->hc_icontext); + SHA2Update(&ctx->hc_icontext, (uint8_t *)ipad, block_size); + + /* perform SHA2 on opad */ + SHA2Init(ctx->hc_mech_type, &ctx->hc_ocontext); + SHA2Update(&ctx->hc_ocontext, (uint8_t *)opad, block_size); + +} + +/* + */ +static int +sha2_mac_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t ctx_template, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + uint_t sha_digest_len, sha_hmac_block_size; + + /* + * Set the digest length and block size to values appropriate to the + * mechanism + */ + switch (mechanism->cm_type) { + case SHA256_HMAC_MECH_INFO_TYPE: + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA256_DIGEST_LENGTH; + sha_hmac_block_size = SHA256_HMAC_BLOCK_SIZE; + break; + case SHA384_HMAC_MECH_INFO_TYPE: + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + case SHA512_HMAC_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA512_DIGEST_LENGTH; + sha_hmac_block_size = SHA512_HMAC_BLOCK_SIZE; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + ctx->cc_provider_private = kmem_alloc(sizeof (sha2_hmac_ctx_t), + crypto_kmflag(req)); + if (ctx->cc_provider_private == NULL) + return (CRYPTO_HOST_MEMORY); + + PROV_SHA2_HMAC_CTX(ctx)->hc_mech_type = mechanism->cm_type; + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, PROV_SHA2_HMAC_CTX(ctx), + sizeof (sha2_hmac_ctx_t)); + } else { + /* no context template, compute context */ + if (keylen_in_bytes > sha_hmac_block_size) { + uchar_t digested_key[SHA512_DIGEST_LENGTH]; + sha2_hmac_ctx_t *hmac_ctx = ctx->cc_provider_private; + + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA2_DIGEST_KEY(mechanism->cm_type / 3, + &hmac_ctx->hc_icontext, + key->ck_data, keylen_in_bytes, digested_key); + sha2_mac_init_ctx(PROV_SHA2_HMAC_CTX(ctx), + digested_key, sha_digest_len); + } else { + sha2_mac_init_ctx(PROV_SHA2_HMAC_CTX(ctx), + key->ck_data, keylen_in_bytes); + } + } + + /* + * Get the mechanism parameters, if applicable. + */ + if (mechanism->cm_type % 3 == 2) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) + ret = CRYPTO_MECHANISM_PARAM_INVALID; + PROV_SHA2_GET_DIGEST_LEN(mechanism, + PROV_SHA2_HMAC_CTX(ctx)->hc_digest_len); + if (PROV_SHA2_HMAC_CTX(ctx)->hc_digest_len > sha_digest_len) + ret = CRYPTO_MECHANISM_PARAM_INVALID; + } + + if (ret != CRYPTO_SUCCESS) { + bzero(ctx->cc_provider_private, sizeof (sha2_hmac_ctx_t)); + kmem_free(ctx->cc_provider_private, sizeof (sha2_hmac_ctx_t)); + ctx->cc_provider_private = NULL; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha2_mac_update(crypto_ctx_t *ctx, crypto_data_t *data, + crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + + ASSERT(ctx->cc_provider_private != NULL); + + /* + * Do a SHA2 update of the inner context using the specified + * data. + */ + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SHA2Update(&PROV_SHA2_HMAC_CTX(ctx)->hc_icontext, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_update_uio( + &PROV_SHA2_HMAC_CTX(ctx)->hc_icontext, data); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + return (ret); +} + +/* ARGSUSED */ +static int +sha2_mac_final(crypto_ctx_t *ctx, crypto_data_t *mac, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA512_DIGEST_LENGTH]; + uint32_t digest_len, sha_digest_len; + + ASSERT(ctx->cc_provider_private != NULL); + + /* Set the digest lengths to values appropriate to the mechanism */ + switch (PROV_SHA2_HMAC_CTX(ctx)->hc_mech_type) { + case SHA256_HMAC_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA256_DIGEST_LENGTH; + break; + case SHA384_HMAC_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA384_DIGEST_LENGTH; + break; + case SHA512_HMAC_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA512_DIGEST_LENGTH; + break; + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA256_DIGEST_LENGTH; + digest_len = PROV_SHA2_HMAC_CTX(ctx)->hc_digest_len; + break; + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA512_DIGEST_LENGTH; + digest_len = PROV_SHA2_HMAC_CTX(ctx)->hc_digest_len; + break; + default: + return (CRYPTO_ARGUMENTS_BAD); + } + + /* + * We need to just return the length needed to store the output. + * We should not destroy the context for the following cases. + */ + if ((mac->cd_length == 0) || (mac->cd_length < digest_len)) { + mac->cd_length = digest_len; + return (CRYPTO_BUFFER_TOO_SMALL); + } + + /* + * Do a SHA2 final on the inner context. + */ + SHA2Final(digest, &PROV_SHA2_HMAC_CTX(ctx)->hc_icontext); + + /* + * Do a SHA2 update on the outer context, feeding the inner + * digest as data. + */ + SHA2Update(&PROV_SHA2_HMAC_CTX(ctx)->hc_ocontext, digest, + sha_digest_len); + + /* + * Do a SHA2 final on the outer context, storing the computing + * digest in the users buffer. + */ + switch (mac->cd_format) { + case CRYPTO_DATA_RAW: + if (digest_len != sha_digest_len) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA2Final(digest, + &PROV_SHA2_HMAC_CTX(ctx)->hc_ocontext); + bcopy(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len); + } else { + SHA2Final((unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, + &PROV_SHA2_HMAC_CTX(ctx)->hc_ocontext); + } + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_final_uio( + &PROV_SHA2_HMAC_CTX(ctx)->hc_ocontext, mac, + digest_len, digest); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) + mac->cd_length = digest_len; + else + mac->cd_length = 0; + + bzero(ctx->cc_provider_private, sizeof (sha2_hmac_ctx_t)); + kmem_free(ctx->cc_provider_private, sizeof (sha2_hmac_ctx_t)); + ctx->cc_provider_private = NULL; + + return (ret); +} + +#define SHA2_MAC_UPDATE(data, ctx, ret) { \ + switch (data->cd_format) { \ + case CRYPTO_DATA_RAW: \ + SHA2Update(&(ctx).hc_icontext, \ + (uint8_t *)data->cd_raw.iov_base + \ + data->cd_offset, data->cd_length); \ + break; \ + case CRYPTO_DATA_UIO: \ + ret = sha2_digest_update_uio(&(ctx).hc_icontext, data); \ + break; \ + default: \ + ret = CRYPTO_ARGUMENTS_BAD; \ + } \ +} + +/* ARGSUSED */ +static int +sha2_mac_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t ctx_template, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA512_DIGEST_LENGTH]; + sha2_hmac_ctx_t sha2_hmac_ctx; + uint32_t sha_digest_len, digest_len, sha_hmac_block_size; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + /* + * Set the digest length and block size to values appropriate to the + * mechanism + */ + switch (mechanism->cm_type) { + case SHA256_HMAC_MECH_INFO_TYPE: + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA256_DIGEST_LENGTH; + sha_hmac_block_size = SHA256_HMAC_BLOCK_SIZE; + break; + case SHA384_HMAC_MECH_INFO_TYPE: + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + case SHA512_HMAC_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA512_DIGEST_LENGTH; + sha_hmac_block_size = SHA512_HMAC_BLOCK_SIZE; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, &sha2_hmac_ctx, sizeof (sha2_hmac_ctx_t)); + } else { + sha2_hmac_ctx.hc_mech_type = mechanism->cm_type; + /* no context template, initialize context */ + if (keylen_in_bytes > sha_hmac_block_size) { + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA2_DIGEST_KEY(mechanism->cm_type / 3, + &sha2_hmac_ctx.hc_icontext, + key->ck_data, keylen_in_bytes, digest); + sha2_mac_init_ctx(&sha2_hmac_ctx, digest, + sha_digest_len); + } else { + sha2_mac_init_ctx(&sha2_hmac_ctx, key->ck_data, + keylen_in_bytes); + } + } + + /* get the mechanism parameters, if applicable */ + if ((mechanism->cm_type % 3) == 2) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + PROV_SHA2_GET_DIGEST_LEN(mechanism, digest_len); + if (digest_len > sha_digest_len) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + } + + /* do a SHA2 update of the inner context using the specified data */ + SHA2_MAC_UPDATE(data, sha2_hmac_ctx, ret); + if (ret != CRYPTO_SUCCESS) + /* the update failed, free context and bail */ + goto bail; + + /* + * Do a SHA2 final on the inner context. + */ + SHA2Final(digest, &sha2_hmac_ctx.hc_icontext); + + /* + * Do an SHA2 update on the outer context, feeding the inner + * digest as data. + * + * HMAC-SHA384 needs special handling as the outer hash needs only 48 + * bytes of the inner hash value. + */ + if (mechanism->cm_type == SHA384_HMAC_MECH_INFO_TYPE || + mechanism->cm_type == SHA384_HMAC_GEN_MECH_INFO_TYPE) + SHA2Update(&sha2_hmac_ctx.hc_ocontext, digest, + SHA384_DIGEST_LENGTH); + else + SHA2Update(&sha2_hmac_ctx.hc_ocontext, digest, sha_digest_len); + + /* + * Do a SHA2 final on the outer context, storing the computed + * digest in the users buffer. + */ + switch (mac->cd_format) { + case CRYPTO_DATA_RAW: + if (digest_len != sha_digest_len) { + /* + * The caller requested a short digest. Digest + * into a scratch buffer and return to + * the user only what was requested. + */ + SHA2Final(digest, &sha2_hmac_ctx.hc_ocontext); + bcopy(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len); + } else { + SHA2Final((unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, &sha2_hmac_ctx.hc_ocontext); + } + break; + case CRYPTO_DATA_UIO: + ret = sha2_digest_final_uio(&sha2_hmac_ctx.hc_ocontext, mac, + digest_len, digest); + break; + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + if (ret == CRYPTO_SUCCESS) { + mac->cd_length = digest_len; + return (CRYPTO_SUCCESS); + } +bail: + bzero(&sha2_hmac_ctx, sizeof (sha2_hmac_ctx_t)); + mac->cd_length = 0; + return (ret); +} + +/* ARGSUSED */ +static int +sha2_mac_verify_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t ctx_template, crypto_req_handle_t req) +{ + int ret = CRYPTO_SUCCESS; + uchar_t digest[SHA512_DIGEST_LENGTH]; + sha2_hmac_ctx_t sha2_hmac_ctx; + uint32_t sha_digest_len, digest_len, sha_hmac_block_size; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + + /* + * Set the digest length and block size to values appropriate to the + * mechanism + */ + switch (mechanism->cm_type) { + case SHA256_HMAC_MECH_INFO_TYPE: + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA256_DIGEST_LENGTH; + sha_hmac_block_size = SHA256_HMAC_BLOCK_SIZE; + break; + case SHA384_HMAC_MECH_INFO_TYPE: + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + case SHA512_HMAC_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = digest_len = SHA512_DIGEST_LENGTH; + sha_hmac_block_size = SHA512_HMAC_BLOCK_SIZE; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + if (ctx_template != NULL) { + /* reuse context template */ + bcopy(ctx_template, &sha2_hmac_ctx, sizeof (sha2_hmac_ctx_t)); + } else { + sha2_hmac_ctx.hc_mech_type = mechanism->cm_type; + /* no context template, initialize context */ + if (keylen_in_bytes > sha_hmac_block_size) { + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA2_DIGEST_KEY(mechanism->cm_type / 3, + &sha2_hmac_ctx.hc_icontext, + key->ck_data, keylen_in_bytes, digest); + sha2_mac_init_ctx(&sha2_hmac_ctx, digest, + sha_digest_len); + } else { + sha2_mac_init_ctx(&sha2_hmac_ctx, key->ck_data, + keylen_in_bytes); + } + } + + /* get the mechanism parameters, if applicable */ + if (mechanism->cm_type % 3 == 2) { + if (mechanism->cm_param == NULL || + mechanism->cm_param_len != sizeof (ulong_t)) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + PROV_SHA2_GET_DIGEST_LEN(mechanism, digest_len); + if (digest_len > sha_digest_len) { + ret = CRYPTO_MECHANISM_PARAM_INVALID; + goto bail; + } + } + + if (mac->cd_length != digest_len) { + ret = CRYPTO_INVALID_MAC; + goto bail; + } + + /* do a SHA2 update of the inner context using the specified data */ + SHA2_MAC_UPDATE(data, sha2_hmac_ctx, ret); + if (ret != CRYPTO_SUCCESS) + /* the update failed, free context and bail */ + goto bail; + + /* do a SHA2 final on the inner context */ + SHA2Final(digest, &sha2_hmac_ctx.hc_icontext); + + /* + * Do an SHA2 update on the outer context, feeding the inner + * digest as data. + * + * HMAC-SHA384 needs special handling as the outer hash needs only 48 + * bytes of the inner hash value. + */ + if (mechanism->cm_type == SHA384_HMAC_MECH_INFO_TYPE || + mechanism->cm_type == SHA384_HMAC_GEN_MECH_INFO_TYPE) + SHA2Update(&sha2_hmac_ctx.hc_ocontext, digest, + SHA384_DIGEST_LENGTH); + else + SHA2Update(&sha2_hmac_ctx.hc_ocontext, digest, sha_digest_len); + + /* + * Do a SHA2 final on the outer context, storing the computed + * digest in the users buffer. + */ + SHA2Final(digest, &sha2_hmac_ctx.hc_ocontext); + + /* + * Compare the computed digest against the expected digest passed + * as argument. + */ + + switch (mac->cd_format) { + + case CRYPTO_DATA_RAW: + if (bcmp(digest, (unsigned char *)mac->cd_raw.iov_base + + mac->cd_offset, digest_len) != 0) + ret = CRYPTO_INVALID_MAC; + break; + + case CRYPTO_DATA_UIO: { + off_t offset = mac->cd_offset; + uint_t vec_idx; + off_t scratch_offset = 0; + size_t length = digest_len; + size_t cur_len; + + /* we support only kernel buffer */ + if (mac->cd_uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* jump to the first iovec containing the expected digest */ + for (vec_idx = 0; + offset >= mac->cd_uio->uio_iov[vec_idx].iov_len && + vec_idx < mac->cd_uio->uio_iovcnt; + offset -= mac->cd_uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == mac->cd_uio->uio_iovcnt) { + /* + * The caller specified an offset that is + * larger than the total size of the buffers + * it provided. + */ + ret = CRYPTO_DATA_LEN_RANGE; + break; + } + + /* do the comparison of computed digest vs specified one */ + while (vec_idx < mac->cd_uio->uio_iovcnt && length > 0) { + cur_len = MIN(mac->cd_uio->uio_iov[vec_idx].iov_len - + offset, length); + + if (bcmp(digest + scratch_offset, + mac->cd_uio->uio_iov[vec_idx].iov_base + offset, + cur_len) != 0) { + ret = CRYPTO_INVALID_MAC; + break; + } + + length -= cur_len; + vec_idx++; + scratch_offset += cur_len; + offset = 0; + } + break; + } + + default: + ret = CRYPTO_ARGUMENTS_BAD; + } + + return (ret); +bail: + bzero(&sha2_hmac_ctx, sizeof (sha2_hmac_ctx_t)); + mac->cd_length = 0; + return (ret); +} + +/* + * KCF software provider context management entry points. + */ + +/* ARGSUSED */ +static int +sha2_create_ctx_template(crypto_provider_handle_t provider, + crypto_mechanism_t *mechanism, crypto_key_t *key, + crypto_spi_ctx_template_t *ctx_template, size_t *ctx_template_size, + crypto_req_handle_t req) +{ + sha2_hmac_ctx_t *sha2_hmac_ctx_tmpl; + uint_t keylen_in_bytes = CRYPTO_BITS2BYTES(key->ck_length); + uint32_t sha_digest_len, sha_hmac_block_size; + + /* + * Set the digest length and block size to values appropriate to the + * mechanism + */ + switch (mechanism->cm_type) { + case SHA256_HMAC_MECH_INFO_TYPE: + case SHA256_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA256_DIGEST_LENGTH; + sha_hmac_block_size = SHA256_HMAC_BLOCK_SIZE; + break; + case SHA384_HMAC_MECH_INFO_TYPE: + case SHA384_HMAC_GEN_MECH_INFO_TYPE: + case SHA512_HMAC_MECH_INFO_TYPE: + case SHA512_HMAC_GEN_MECH_INFO_TYPE: + sha_digest_len = SHA512_DIGEST_LENGTH; + sha_hmac_block_size = SHA512_HMAC_BLOCK_SIZE; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + + /* Add support for key by attributes (RFE 4706552) */ + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Allocate and initialize SHA2 context. + */ + sha2_hmac_ctx_tmpl = kmem_alloc(sizeof (sha2_hmac_ctx_t), + crypto_kmflag(req)); + if (sha2_hmac_ctx_tmpl == NULL) + return (CRYPTO_HOST_MEMORY); + + sha2_hmac_ctx_tmpl->hc_mech_type = mechanism->cm_type; + + if (keylen_in_bytes > sha_hmac_block_size) { + uchar_t digested_key[SHA512_DIGEST_LENGTH]; + + /* + * Hash the passed-in key to get a smaller key. + * The inner context is used since it hasn't been + * initialized yet. + */ + PROV_SHA2_DIGEST_KEY(mechanism->cm_type / 3, + &sha2_hmac_ctx_tmpl->hc_icontext, + key->ck_data, keylen_in_bytes, digested_key); + sha2_mac_init_ctx(sha2_hmac_ctx_tmpl, digested_key, + sha_digest_len); + } else { + sha2_mac_init_ctx(sha2_hmac_ctx_tmpl, key->ck_data, + keylen_in_bytes); + } + + *ctx_template = (crypto_spi_ctx_template_t)sha2_hmac_ctx_tmpl; + *ctx_template_size = sizeof (sha2_hmac_ctx_t); + + return (CRYPTO_SUCCESS); +} + +static int +sha2_free_context(crypto_ctx_t *ctx) +{ + uint_t ctx_len; + + if (ctx->cc_provider_private == NULL) + return (CRYPTO_SUCCESS); + + /* + * We have to free either SHA2 or SHA2-HMAC contexts, which + * have different lengths. + * + * Note: Below is dependent on the mechanism ordering. + */ + + if (PROV_SHA2_CTX(ctx)->sc_mech_type % 3 == 0) + ctx_len = sizeof (sha2_ctx_t); + else + ctx_len = sizeof (sha2_hmac_ctx_t); + + bzero(ctx->cc_provider_private, ctx_len); + kmem_free(ctx->cc_provider_private, ctx_len); + ctx->cc_provider_private = NULL; + + return (CRYPTO_SUCCESS); +} --- linux-aws-4.15.0.orig/zfs/module/icp/io/skein_mod.c +++ linux-aws-4.15.0/zfs/module/icp/io/skein_mod.c @@ -0,0 +1,735 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +#include +#include +#include +#include +#include +#define SKEIN_MODULE_IMPL +#include + +/* + * Like the sha2 module, we create the skein module with two modlinkages: + * - modlmisc to allow direct calls to Skein_* API functions. + * - modlcrypto to integrate well into the Kernel Crypto Framework (KCF). + */ +static struct modlmisc modlmisc = { + &mod_cryptoops, + "Skein Message-Digest Algorithm" +}; + +static struct modlcrypto modlcrypto = { + &mod_cryptoops, + "Skein Kernel SW Provider" +}; + +static struct modlinkage modlinkage = { + MODREV_1, {&modlmisc, &modlcrypto, NULL} +}; + +static crypto_mech_info_t skein_mech_info_tab[] = { + {CKM_SKEIN_256, SKEIN_256_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + {CKM_SKEIN_256_MAC, SKEIN_256_MAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, 1, INT_MAX, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + {CKM_SKEIN_512, SKEIN_512_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + {CKM_SKEIN_512_MAC, SKEIN_512_MAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, 1, INT_MAX, + CRYPTO_KEYSIZE_UNIT_IN_BYTES}, + {CKM_SKEIN1024, SKEIN1024_MECH_INFO_TYPE, + CRYPTO_FG_DIGEST | CRYPTO_FG_DIGEST_ATOMIC, + 0, 0, CRYPTO_KEYSIZE_UNIT_IN_BITS}, + {CKM_SKEIN1024_MAC, SKEIN1024_MAC_MECH_INFO_TYPE, + CRYPTO_FG_MAC | CRYPTO_FG_MAC_ATOMIC, 1, INT_MAX, + CRYPTO_KEYSIZE_UNIT_IN_BYTES} +}; + +static void skein_provider_status(crypto_provider_handle_t, uint_t *); + +static crypto_control_ops_t skein_control_ops = { + skein_provider_status +}; + +static int skein_digest_init(crypto_ctx_t *, crypto_mechanism_t *, + crypto_req_handle_t); +static int skein_digest(crypto_ctx_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); +static int skein_update(crypto_ctx_t *, crypto_data_t *, crypto_req_handle_t); +static int skein_final(crypto_ctx_t *, crypto_data_t *, crypto_req_handle_t); +static int skein_digest_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_data_t *, crypto_data_t *, + crypto_req_handle_t); + +static crypto_digest_ops_t skein_digest_ops = { + .digest_init = skein_digest_init, + .digest = skein_digest, + .digest_update = skein_update, + .digest_key = NULL, + .digest_final = skein_final, + .digest_atomic = skein_digest_atomic +}; + +static int skein_mac_init(crypto_ctx_t *, crypto_mechanism_t *, crypto_key_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); +static int skein_mac_atomic(crypto_provider_handle_t, crypto_session_id_t, + crypto_mechanism_t *, crypto_key_t *, crypto_data_t *, crypto_data_t *, + crypto_spi_ctx_template_t, crypto_req_handle_t); + +static crypto_mac_ops_t skein_mac_ops = { + .mac_init = skein_mac_init, + .mac = NULL, + .mac_update = skein_update, /* using regular digest update is OK here */ + .mac_final = skein_final, /* using regular digest final is OK here */ + .mac_atomic = skein_mac_atomic, + .mac_verify_atomic = NULL +}; + +static int skein_create_ctx_template(crypto_provider_handle_t, + crypto_mechanism_t *, crypto_key_t *, crypto_spi_ctx_template_t *, + size_t *, crypto_req_handle_t); +static int skein_free_context(crypto_ctx_t *); + +static crypto_ctx_ops_t skein_ctx_ops = { + .create_ctx_template = skein_create_ctx_template, + .free_context = skein_free_context +}; + +static crypto_ops_t skein_crypto_ops = {{{{{ + &skein_control_ops, + &skein_digest_ops, + NULL, + &skein_mac_ops, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &skein_ctx_ops, +}}}}}; + +static crypto_provider_info_t skein_prov_info = {{{{ + CRYPTO_SPI_VERSION_1, + "Skein Software Provider", + CRYPTO_SW_PROVIDER, + NULL, + &skein_crypto_ops, + sizeof (skein_mech_info_tab) / sizeof (crypto_mech_info_t), + skein_mech_info_tab +}}}}; + +static crypto_kcf_provider_handle_t skein_prov_handle = 0; + +typedef struct skein_ctx { + skein_mech_type_t sc_mech_type; + size_t sc_digest_bitlen; + /*LINTED(E_ANONYMOUS_UNION_DECL)*/ + union { + Skein_256_Ctxt_t sc_256; + Skein_512_Ctxt_t sc_512; + Skein1024_Ctxt_t sc_1024; + }; +} skein_ctx_t; +#define SKEIN_CTX(_ctx_) ((skein_ctx_t *)((_ctx_)->cc_provider_private)) +#define SKEIN_CTX_LVALUE(_ctx_) (_ctx_)->cc_provider_private +#define SKEIN_OP(_skein_ctx, _op, ...) \ + do { \ + skein_ctx_t *sc = (_skein_ctx); \ + switch (sc->sc_mech_type) { \ + case SKEIN_256_MECH_INFO_TYPE: \ + case SKEIN_256_MAC_MECH_INFO_TYPE: \ + (void) Skein_256_ ## _op(&sc->sc_256, __VA_ARGS__);\ + break; \ + case SKEIN_512_MECH_INFO_TYPE: \ + case SKEIN_512_MAC_MECH_INFO_TYPE: \ + (void) Skein_512_ ## _op(&sc->sc_512, __VA_ARGS__);\ + break; \ + case SKEIN1024_MECH_INFO_TYPE: \ + case SKEIN1024_MAC_MECH_INFO_TYPE: \ + (void) Skein1024_ ## _op(&sc->sc_1024, __VA_ARGS__);\ + break; \ + } \ + _NOTE(CONSTCOND) \ + } while (0) + +static int +skein_get_digest_bitlen(const crypto_mechanism_t *mechanism, size_t *result) +{ + if (mechanism->cm_param != NULL) { + /*LINTED(E_BAD_PTR_CAST_ALIGN)*/ + skein_param_t *param = (skein_param_t *)mechanism->cm_param; + + if (mechanism->cm_param_len != sizeof (*param) || + param->sp_digest_bitlen == 0) { + return (CRYPTO_MECHANISM_PARAM_INVALID); + } + *result = param->sp_digest_bitlen; + } else { + switch (mechanism->cm_type) { + case SKEIN_256_MECH_INFO_TYPE: + *result = 256; + break; + case SKEIN_512_MECH_INFO_TYPE: + *result = 512; + break; + case SKEIN1024_MECH_INFO_TYPE: + *result = 1024; + break; + default: + return (CRYPTO_MECHANISM_INVALID); + } + } + return (CRYPTO_SUCCESS); +} + +int +skein_mod_init(void) +{ + int error; + + if ((error = mod_install(&modlinkage)) != 0) + return (error); + + /* + * Try to register with KCF - failure shouldn't unload us, since we + * still may want to continue providing misc/skein functionality. + */ + (void) crypto_register_provider(&skein_prov_info, &skein_prov_handle); + + return (0); +} + +int +skein_mod_fini(void) +{ + int ret; + + if (skein_prov_handle != 0) { + if ((ret = crypto_unregister_provider(skein_prov_handle)) != + CRYPTO_SUCCESS) { + cmn_err(CE_WARN, + "skein _fini: crypto_unregister_provider() " + "failed (0x%x)", ret); + return (EBUSY); + } + skein_prov_handle = 0; + } + + return (mod_remove(&modlinkage)); +} + +/* + * KCF software provider control entry points. + */ +/* ARGSUSED */ +static void +skein_provider_status(crypto_provider_handle_t provider, uint_t *status) +{ + *status = CRYPTO_PROVIDER_READY; +} + +/* + * General Skein hashing helper functions. + */ + +/* + * Performs an Update on a context with uio input data. + */ +static int +skein_digest_update_uio(skein_ctx_t *ctx, const crypto_data_t *data) +{ + off_t offset = data->cd_offset; + size_t length = data->cd_length; + uint_t vec_idx; + size_t cur_len; + const uio_t *uio = data->cd_uio; + + /* we support only kernel buffer */ + if (uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing data to be + * digested. + */ + for (vec_idx = 0; vec_idx < uio->uio_iovcnt && + offset >= uio->uio_iov[vec_idx].iov_len; + offset -= uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == uio->uio_iovcnt) { + /* + * The caller specified an offset that is larger than the + * total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + /* + * Now do the digesting on the iovecs. + */ + while (vec_idx < uio->uio_iovcnt && length > 0) { + cur_len = MIN(uio->uio_iov[vec_idx].iov_len - offset, length); + SKEIN_OP(ctx, Update, (uint8_t *)uio->uio_iov[vec_idx].iov_base + + offset, cur_len); + length -= cur_len; + vec_idx++; + offset = 0; + } + + if (vec_idx == uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + + return (CRYPTO_SUCCESS); +} + +/* + * Performs a Final on a context and writes to a uio digest output. + */ +static int +skein_digest_final_uio(skein_ctx_t *ctx, crypto_data_t *digest, + crypto_req_handle_t req) +{ + off_t offset = digest->cd_offset; + uint_t vec_idx; + uio_t *uio = digest->cd_uio; + + /* we support only kernel buffer */ + if (uio->uio_segflg != UIO_SYSSPACE) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Jump to the first iovec containing ptr to the digest to be returned. + */ + for (vec_idx = 0; offset >= uio->uio_iov[vec_idx].iov_len && + vec_idx < uio->uio_iovcnt; + offset -= uio->uio_iov[vec_idx++].iov_len) + ; + if (vec_idx == uio->uio_iovcnt) { + /* + * The caller specified an offset that is larger than the + * total size of the buffers it provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + if (offset + CRYPTO_BITS2BYTES(ctx->sc_digest_bitlen) <= + uio->uio_iov[vec_idx].iov_len) { + /* The computed digest will fit in the current iovec. */ + SKEIN_OP(ctx, Final, + (uchar_t *)uio->uio_iov[vec_idx].iov_base + offset); + } else { + uint8_t *digest_tmp; + off_t scratch_offset = 0; + size_t length = CRYPTO_BITS2BYTES(ctx->sc_digest_bitlen); + size_t cur_len; + + digest_tmp = kmem_alloc(CRYPTO_BITS2BYTES( + ctx->sc_digest_bitlen), crypto_kmflag(req)); + if (digest_tmp == NULL) + return (CRYPTO_HOST_MEMORY); + SKEIN_OP(ctx, Final, digest_tmp); + while (vec_idx < uio->uio_iovcnt && length > 0) { + cur_len = MIN(uio->uio_iov[vec_idx].iov_len - offset, + length); + bcopy(digest_tmp + scratch_offset, + uio->uio_iov[vec_idx].iov_base + offset, cur_len); + + length -= cur_len; + vec_idx++; + scratch_offset += cur_len; + offset = 0; + } + kmem_free(digest_tmp, CRYPTO_BITS2BYTES(ctx->sc_digest_bitlen)); + + if (vec_idx == uio->uio_iovcnt && length > 0) { + /* + * The end of the specified iovec's was reached but + * the length requested could not be processed, i.e. + * The caller requested to digest more data than it + * provided. + */ + return (CRYPTO_DATA_LEN_RANGE); + } + } + + return (CRYPTO_SUCCESS); +} + +/* + * KCF software provider digest entry points. + */ + +/* + * Initializes a skein digest context to the configuration in `mechanism'. + * The mechanism cm_type must be one of SKEIN_*_MECH_INFO_TYPE. The cm_param + * field may contain a skein_param_t structure indicating the length of the + * digest the algorithm should produce. Otherwise the default output lengths + * are applied (32 bytes for Skein-256, 64 bytes for Skein-512 and 128 bytes + * for Skein-1024). + */ +static int +skein_digest_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_req_handle_t req) +{ + int error = CRYPTO_SUCCESS; + + if (!VALID_SKEIN_DIGEST_MECH(mechanism->cm_type)) + return (CRYPTO_MECHANISM_INVALID); + + SKEIN_CTX_LVALUE(ctx) = kmem_alloc(sizeof (*SKEIN_CTX(ctx)), + crypto_kmflag(req)); + if (SKEIN_CTX(ctx) == NULL) + return (CRYPTO_HOST_MEMORY); + + SKEIN_CTX(ctx)->sc_mech_type = mechanism->cm_type; + error = skein_get_digest_bitlen(mechanism, + &SKEIN_CTX(ctx)->sc_digest_bitlen); + if (error != CRYPTO_SUCCESS) + goto errout; + SKEIN_OP(SKEIN_CTX(ctx), Init, SKEIN_CTX(ctx)->sc_digest_bitlen); + + return (CRYPTO_SUCCESS); +errout: + bzero(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + kmem_free(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + SKEIN_CTX_LVALUE(ctx) = NULL; + return (error); +} + +/* + * Executes a skein_update and skein_digest on a pre-initialized crypto + * context in a single step. See the documentation to these functions to + * see what to pass here. + */ +static int +skein_digest(crypto_ctx_t *ctx, crypto_data_t *data, crypto_data_t *digest, + crypto_req_handle_t req) +{ + int error = CRYPTO_SUCCESS; + + ASSERT(SKEIN_CTX(ctx) != NULL); + + if (digest->cd_length < + CRYPTO_BITS2BYTES(SKEIN_CTX(ctx)->sc_digest_bitlen)) { + digest->cd_length = + CRYPTO_BITS2BYTES(SKEIN_CTX(ctx)->sc_digest_bitlen); + return (CRYPTO_BUFFER_TOO_SMALL); + } + + error = skein_update(ctx, data, req); + if (error != CRYPTO_SUCCESS) { + bzero(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + kmem_free(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + SKEIN_CTX_LVALUE(ctx) = NULL; + digest->cd_length = 0; + return (error); + } + error = skein_final(ctx, digest, req); + + return (error); +} + +/* + * Performs a skein Update with the input message in `data' (successive calls + * can push more data). This is used both for digest and MAC operation. + * Supported input data formats are raw, uio and mblk. + */ +/*ARGSUSED*/ +static int +skein_update(crypto_ctx_t *ctx, crypto_data_t *data, crypto_req_handle_t req) +{ + int error = CRYPTO_SUCCESS; + + ASSERT(SKEIN_CTX(ctx) != NULL); + + switch (data->cd_format) { + case CRYPTO_DATA_RAW: + SKEIN_OP(SKEIN_CTX(ctx), Update, + (uint8_t *)data->cd_raw.iov_base + data->cd_offset, + data->cd_length); + break; + case CRYPTO_DATA_UIO: + error = skein_digest_update_uio(SKEIN_CTX(ctx), data); + break; + default: + error = CRYPTO_ARGUMENTS_BAD; + } + + return (error); +} + +/* + * Performs a skein Final, writing the output to `digest'. This is used both + * for digest and MAC operation. + * Supported output digest formats are raw, uio and mblk. + */ +/*ARGSUSED*/ +static int +skein_final(crypto_ctx_t *ctx, crypto_data_t *digest, crypto_req_handle_t req) +{ + int error = CRYPTO_SUCCESS; + + ASSERT(SKEIN_CTX(ctx) != NULL); + + if (digest->cd_length < + CRYPTO_BITS2BYTES(SKEIN_CTX(ctx)->sc_digest_bitlen)) { + digest->cd_length = + CRYPTO_BITS2BYTES(SKEIN_CTX(ctx)->sc_digest_bitlen); + return (CRYPTO_BUFFER_TOO_SMALL); + } + + switch (digest->cd_format) { + case CRYPTO_DATA_RAW: + SKEIN_OP(SKEIN_CTX(ctx), Final, + (uint8_t *)digest->cd_raw.iov_base + digest->cd_offset); + break; + case CRYPTO_DATA_UIO: + error = skein_digest_final_uio(SKEIN_CTX(ctx), digest, req); + break; + default: + error = CRYPTO_ARGUMENTS_BAD; + } + + if (error == CRYPTO_SUCCESS) + digest->cd_length = + CRYPTO_BITS2BYTES(SKEIN_CTX(ctx)->sc_digest_bitlen); + else + digest->cd_length = 0; + + bzero(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + kmem_free(SKEIN_CTX(ctx), sizeof (*(SKEIN_CTX(ctx)))); + SKEIN_CTX_LVALUE(ctx) = NULL; + + return (error); +} + +/* + * Performs a full skein digest computation in a single call, configuring the + * algorithm according to `mechanism', reading the input to be digested from + * `data' and writing the output to `digest'. + * Supported input/output formats are raw, uio and mblk. + */ +/*ARGSUSED*/ +static int +skein_digest_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_data_t *data, crypto_data_t *digest, crypto_req_handle_t req) +{ + int error; + skein_ctx_t skein_ctx; + crypto_ctx_t ctx; + SKEIN_CTX_LVALUE(&ctx) = &skein_ctx; + + /* Init */ + if (!VALID_SKEIN_DIGEST_MECH(mechanism->cm_type)) + return (CRYPTO_MECHANISM_INVALID); + skein_ctx.sc_mech_type = mechanism->cm_type; + error = skein_get_digest_bitlen(mechanism, &skein_ctx.sc_digest_bitlen); + if (error != CRYPTO_SUCCESS) + goto out; + SKEIN_OP(&skein_ctx, Init, skein_ctx.sc_digest_bitlen); + + if ((error = skein_update(&ctx, data, digest)) != CRYPTO_SUCCESS) + goto out; + if ((error = skein_final(&ctx, data, digest)) != CRYPTO_SUCCESS) + goto out; + +out: + if (error == CRYPTO_SUCCESS) + digest->cd_length = + CRYPTO_BITS2BYTES(skein_ctx.sc_digest_bitlen); + else + digest->cd_length = 0; + bzero(&skein_ctx, sizeof (skein_ctx)); + + return (error); +} + +/* + * Helper function that builds a Skein MAC context from the provided + * mechanism and key. + */ +static int +skein_mac_ctx_build(skein_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key) +{ + int error; + + if (!VALID_SKEIN_MAC_MECH(mechanism->cm_type)) + return (CRYPTO_MECHANISM_INVALID); + if (key->ck_format != CRYPTO_KEY_RAW) + return (CRYPTO_ARGUMENTS_BAD); + ctx->sc_mech_type = mechanism->cm_type; + error = skein_get_digest_bitlen(mechanism, &ctx->sc_digest_bitlen); + if (error != CRYPTO_SUCCESS) + return (error); + SKEIN_OP(ctx, InitExt, ctx->sc_digest_bitlen, 0, key->ck_data, + CRYPTO_BITS2BYTES(key->ck_length)); + + return (CRYPTO_SUCCESS); +} + +/* + * KCF software provide mac entry points. + */ +/* + * Initializes a skein MAC context. You may pass a ctx_template, in which + * case the template will be reused to make initialization more efficient. + * Otherwise a new context will be constructed. The mechanism cm_type must + * be one of SKEIN_*_MAC_MECH_INFO_TYPE. Same as in skein_digest_init, you + * may pass a skein_param_t in cm_param to configure the length of the + * digest. The key must be in raw format. + */ +static int +skein_mac_init(crypto_ctx_t *ctx, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_spi_ctx_template_t ctx_template, + crypto_req_handle_t req) +{ + int error; + + SKEIN_CTX_LVALUE(ctx) = kmem_alloc(sizeof (*SKEIN_CTX(ctx)), + crypto_kmflag(req)); + if (SKEIN_CTX(ctx) == NULL) + return (CRYPTO_HOST_MEMORY); + + if (ctx_template != NULL) { + bcopy(ctx_template, SKEIN_CTX(ctx), + sizeof (*SKEIN_CTX(ctx))); + } else { + error = skein_mac_ctx_build(SKEIN_CTX(ctx), mechanism, key); + if (error != CRYPTO_SUCCESS) + goto errout; + } + + return (CRYPTO_SUCCESS); +errout: + bzero(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + kmem_free(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + return (error); +} + +/* + * The MAC update and final calls are reused from the regular digest code. + */ + +/*ARGSUSED*/ +/* + * Same as skein_digest_atomic, performs an atomic Skein MAC operation in + * one step. All the same properties apply to the arguments of this + * function as to those of the partial operations above. + */ +static int +skein_mac_atomic(crypto_provider_handle_t provider, + crypto_session_id_t session_id, crypto_mechanism_t *mechanism, + crypto_key_t *key, crypto_data_t *data, crypto_data_t *mac, + crypto_spi_ctx_template_t ctx_template, crypto_req_handle_t req) +{ + /* faux crypto context just for skein_digest_{update,final} */ + int error; + crypto_ctx_t ctx; + skein_ctx_t skein_ctx; + SKEIN_CTX_LVALUE(&ctx) = &skein_ctx; + + if (ctx_template != NULL) { + bcopy(ctx_template, &skein_ctx, sizeof (skein_ctx)); + } else { + error = skein_mac_ctx_build(&skein_ctx, mechanism, key); + if (error != CRYPTO_SUCCESS) + goto errout; + } + + if ((error = skein_update(&ctx, data, req)) != CRYPTO_SUCCESS) + goto errout; + if ((error = skein_final(&ctx, mac, req)) != CRYPTO_SUCCESS) + goto errout; + + return (CRYPTO_SUCCESS); +errout: + bzero(&skein_ctx, sizeof (skein_ctx)); + return (error); +} + +/* + * KCF software provider context management entry points. + */ + +/* + * Constructs a context template for the Skein MAC algorithm. The same + * properties apply to the arguments of this function as to those of + * skein_mac_init. + */ +/*ARGSUSED*/ +static int +skein_create_ctx_template(crypto_provider_handle_t provider, + crypto_mechanism_t *mechanism, crypto_key_t *key, + crypto_spi_ctx_template_t *ctx_template, size_t *ctx_template_size, + crypto_req_handle_t req) +{ + int error; + skein_ctx_t *ctx_tmpl; + + ctx_tmpl = kmem_alloc(sizeof (*ctx_tmpl), crypto_kmflag(req)); + if (ctx_tmpl == NULL) + return (CRYPTO_HOST_MEMORY); + error = skein_mac_ctx_build(ctx_tmpl, mechanism, key); + if (error != CRYPTO_SUCCESS) + goto errout; + *ctx_template = ctx_tmpl; + *ctx_template_size = sizeof (*ctx_tmpl); + + return (CRYPTO_SUCCESS); +errout: + bzero(ctx_tmpl, sizeof (*ctx_tmpl)); + kmem_free(ctx_tmpl, sizeof (*ctx_tmpl)); + return (error); +} + +/* + * Frees a skein context in a parent crypto context. + */ +static int +skein_free_context(crypto_ctx_t *ctx) +{ + if (SKEIN_CTX(ctx) != NULL) { + bzero(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + kmem_free(SKEIN_CTX(ctx), sizeof (*SKEIN_CTX(ctx))); + SKEIN_CTX_LVALUE(ctx) = NULL; + } + + return (CRYPTO_SUCCESS); +} --- linux-aws-4.15.0.orig/zfs/module/icp/os/modconf.c +++ linux-aws-4.15.0/zfs/module/icp/os/modconf.c @@ -0,0 +1,173 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include + +/* + * Null operations; used for uninitialized and "misc" modules. + */ +static int mod_null(struct modlmisc *, struct modlinkage *); +static int mod_infonull(void *, struct modlinkage *, int *); + +/* + * Cryptographic Modules + */ +struct mod_ops mod_cryptoops = { + .modm_install = mod_null, + .modm_remove = mod_null, + .modm_info = mod_infonull +}; + +/* + * Null operation; return 0. + */ +static int +mod_null(struct modlmisc *modl, struct modlinkage *modlp) +{ + return (0); +} + +/* + * Status for User modules. + */ +static int +mod_infonull(void *modl, struct modlinkage *modlp, int *p0) +{ + *p0 = -1; /* for modinfo display */ + return (0); +} + +/* + * Install a module. + * (This routine is in the Solaris SPARC DDI/DKI) + */ +int +mod_install(struct modlinkage *modlp) +{ + int retval = -1; /* No linkage structures */ + struct modlmisc **linkpp; + struct modlmisc **linkpp1; + + if (modlp->ml_rev != MODREV_1) { + cmn_err(CE_WARN, "mod_install: " + "modlinkage structure is not MODREV_1\n"); + return (EINVAL); + } + linkpp = (struct modlmisc **)&modlp->ml_linkage[0]; + + while (*linkpp != NULL) { + if ((retval = MODL_INSTALL(*linkpp, modlp)) != 0) { + linkpp1 = (struct modlmisc **)&modlp->ml_linkage[0]; + + while (linkpp1 != linkpp) { + MODL_REMOVE(*linkpp1, modlp); /* clean up */ + linkpp1++; + } + break; + } + linkpp++; + } + return (retval); +} + +static char *reins_err = + "Could not reinstall %s\nReboot to correct the problem"; + +/* + * Remove a module. This is called by the module wrapper routine. + * (This routine is in the Solaris SPARC DDI/DKI) + */ +int +mod_remove(struct modlinkage *modlp) +{ + int retval = 0; + struct modlmisc **linkpp, *last_linkp; + + linkpp = (struct modlmisc **)&modlp->ml_linkage[0]; + + while (*linkpp != NULL) { + if ((retval = MODL_REMOVE(*linkpp, modlp)) != 0) { + last_linkp = *linkpp; + linkpp = (struct modlmisc **)&modlp->ml_linkage[0]; + while (*linkpp != last_linkp) { + if (MODL_INSTALL(*linkpp, modlp) != 0) { + cmn_err(CE_WARN, reins_err, + (*linkpp)->misc_linkinfo); + break; + } + linkpp++; + } + break; + } + linkpp++; + } + return (retval); +} + +/* + * Get module status. + * (This routine is in the Solaris SPARC DDI/DKI) + */ +int +mod_info(struct modlinkage *modlp, struct modinfo *modinfop) +{ + int i; + int retval = 0; + struct modspecific_info *msip; + struct modlmisc **linkpp; + + modinfop->mi_rev = modlp->ml_rev; + + linkpp = (struct modlmisc **)modlp->ml_linkage; + msip = &modinfop->mi_msinfo[0]; + + for (i = 0; i < MODMAXLINK; i++) { + if (*linkpp == NULL) { + msip->msi_linkinfo[0] = '\0'; + } else { + (void) strlcpy(msip->msi_linkinfo, + (*linkpp)->misc_linkinfo, MODMAXLINKINFOLEN); + retval = MODL_INFO(*linkpp, modlp, &msip->msi_p0); + if (retval != 0) + break; + linkpp++; + } + msip++; + } + + if (modinfop->mi_info == MI_INFO_LINKAGE) { + /* + * Slight kludge used to extract the address of the + * modlinkage structure from the module (just after + * loading a module for the very first time) + */ + modinfop->mi_base = (void *)modlp; + } + + if (retval == 0) + return (1); + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/icp/os/modhash.c +++ linux-aws-4.15.0/zfs/module/icp/os/modhash.c @@ -0,0 +1,925 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * mod_hash: flexible hash table implementation. + * + * This is a reasonably fast, reasonably flexible hash table implementation + * which features pluggable hash algorithms to support storing arbitrary keys + * and values. It is designed to handle small (< 100,000 items) amounts of + * data. The hash uses chaining to resolve collisions, and does not feature a + * mechanism to grow the hash. Care must be taken to pick nchains to be large + * enough for the application at hand, or lots of time will be wasted searching + * hash chains. + * + * The client of the hash is required to supply a number of items to support + * the various hash functions: + * + * - Destructor functions for the key and value being hashed. + * A destructor is responsible for freeing an object when the hash + * table is no longer storing it. Since keys and values can be of + * arbitrary type, separate destructors for keys & values are used. + * These may be mod_hash_null_keydtor and mod_hash_null_valdtor if no + * destructor is needed for either a key or value. + * + * - A hashing algorithm which returns a uint_t representing a hash index + * The number returned need _not_ be between 0 and nchains. The mod_hash + * code will take care of doing that. The second argument (after the + * key) to the hashing function is a void * that represents + * hash_alg_data-- this is provided so that the hashing algrorithm can + * maintain some state across calls, or keep algorithm-specific + * constants associated with the hash table. + * + * A pointer-hashing and a string-hashing algorithm are supplied in + * this file. + * + * - A key comparator (a la qsort). + * This is used when searching the hash chain. The key comparator + * determines if two keys match. It should follow the return value + * semantics of strcmp. + * + * string and pointer comparators are supplied in this file. + * + * mod_hash_create_strhash() and mod_hash_create_ptrhash() provide good + * examples of how to create a customized hash table. + * + * Basic hash operations: + * + * mod_hash_create_strhash(name, nchains, dtor), + * create a hash using strings as keys. + * NOTE: This create a hash which automatically cleans up the string + * values it is given for keys. + * + * mod_hash_create_ptrhash(name, nchains, dtor, key_elem_size): + * create a hash using pointers as keys. + * + * mod_hash_create_extended(name, nchains, kdtor, vdtor, + * hash_alg, hash_alg_data, + * keycmp, sleep) + * create a customized hash table. + * + * mod_hash_destroy_hash(hash): + * destroy the given hash table, calling the key and value destructors + * on each key-value pair stored in the hash. + * + * mod_hash_insert(hash, key, val): + * place a key, value pair into the given hash. + * duplicate keys are rejected. + * + * mod_hash_insert_reserve(hash, key, val, handle): + * place a key, value pair into the given hash, using handle to indicate + * the reserved storage for the pair. (no memory allocation is needed + * during a mod_hash_insert_reserve.) duplicate keys are rejected. + * + * mod_hash_reserve(hash, *handle): + * reserve storage for a key-value pair using the memory allocation + * policy of 'hash', returning the storage handle in 'handle'. + * + * mod_hash_reserve_nosleep(hash, *handle): reserve storage for a key-value + * pair ignoring the memory allocation policy of 'hash' and always without + * sleep, returning the storage handle in 'handle'. + * + * mod_hash_remove(hash, key, *val): + * remove a key-value pair with key 'key' from 'hash', destroying the + * stored key, and returning the value in val. + * + * mod_hash_replace(hash, key, val) + * atomically remove an existing key-value pair from a hash, and replace + * the key and value with the ones supplied. The removed key and value + * (if any) are destroyed. + * + * mod_hash_destroy(hash, key): + * remove a key-value pair with key 'key' from 'hash', destroying both + * stored key and stored value. + * + * mod_hash_find(hash, key, val): + * find a value in the hash table corresponding to the given key. + * + * mod_hash_find_cb(hash, key, val, found_callback) + * find a value in the hash table corresponding to the given key. + * If a value is found, call specified callback passing key and val to it. + * The callback is called with the hash lock held. + * It is intended to be used in situations where the act of locating the + * data must also modify it - such as in reference counting schemes. + * + * mod_hash_walk(hash, callback(key, elem, arg), arg) + * walks all the elements in the hashtable and invokes the callback + * function with the key/value pair for each element. the hashtable + * is locked for readers so the callback function should not attempt + * to do any updates to the hashable. the callback function should + * return MH_WALK_CONTINUE to continue walking the hashtable or + * MH_WALK_TERMINATE to abort the walk of the hashtable. + * + * mod_hash_clear(hash): + * clears the given hash table of entries, calling the key and value + * destructors for every element in the hash. + */ + +#include +#include +#include +#include + +/* + * MH_KEY_DESTROY() + * Invoke the key destructor. + */ +#define MH_KEY_DESTROY(hash, key) ((hash->mh_kdtor)(key)) + +/* + * MH_VAL_DESTROY() + * Invoke the value destructor. + */ +#define MH_VAL_DESTROY(hash, val) ((hash->mh_vdtor)(val)) + +/* + * MH_KEYCMP() + * Call the key comparator for the given hash keys. + */ +#define MH_KEYCMP(hash, key1, key2) ((hash->mh_keycmp)(key1, key2)) + +/* + * Cache for struct mod_hash_entry + */ +kmem_cache_t *mh_e_cache = NULL; +mod_hash_t *mh_head = NULL; +kmutex_t mh_head_lock; + +/* + * mod_hash_null_keydtor() + * mod_hash_null_valdtor() + * no-op key and value destructors. + */ +/*ARGSUSED*/ +void +mod_hash_null_keydtor(mod_hash_key_t key) +{ +} + +/*ARGSUSED*/ +void +mod_hash_null_valdtor(mod_hash_val_t val) +{ +} + +/* + * mod_hash_bystr() + * mod_hash_strkey_cmp() + * mod_hash_strkey_dtor() + * mod_hash_strval_dtor() + * Hash and key comparison routines for hashes with string keys. + * + * mod_hash_create_strhash() + * Create a hash using strings as keys + * + * The string hashing algorithm is from the "Dragon Book" -- + * "Compilers: Principles, Tools & Techniques", by Aho, Sethi, Ullman + */ + +/*ARGSUSED*/ +uint_t +mod_hash_bystr(void *hash_data, mod_hash_key_t key) +{ + uint_t hash = 0; + uint_t g; + char *p, *k = (char *)key; + + ASSERT(k); + for (p = k; *p != '\0'; p++) { + hash = (hash << 4) + *p; + if ((g = (hash & 0xf0000000)) != 0) { + hash ^= (g >> 24); + hash ^= g; + } + } + return (hash); +} + +int +mod_hash_strkey_cmp(mod_hash_key_t key1, mod_hash_key_t key2) +{ + return (strcmp((char *)key1, (char *)key2)); +} + +void +mod_hash_strkey_dtor(mod_hash_key_t key) +{ + char *c = (char *)key; + kmem_free(c, strlen(c) + 1); +} + +void +mod_hash_strval_dtor(mod_hash_val_t val) +{ + char *c = (char *)val; + kmem_free(c, strlen(c) + 1); +} + +mod_hash_t * +mod_hash_create_strhash_nodtr(char *name, size_t nchains, + void (*val_dtor)(mod_hash_val_t)) +{ + return mod_hash_create_extended(name, nchains, mod_hash_null_keydtor, + val_dtor, mod_hash_bystr, NULL, mod_hash_strkey_cmp, KM_SLEEP); +} + +mod_hash_t * +mod_hash_create_strhash(char *name, size_t nchains, + void (*val_dtor)(mod_hash_val_t)) +{ + return mod_hash_create_extended(name, nchains, mod_hash_strkey_dtor, + val_dtor, mod_hash_bystr, NULL, mod_hash_strkey_cmp, KM_SLEEP); +} + +void +mod_hash_destroy_strhash(mod_hash_t *strhash) +{ + ASSERT(strhash); + mod_hash_destroy_hash(strhash); +} + + +/* + * mod_hash_byptr() + * mod_hash_ptrkey_cmp() + * Hash and key comparison routines for hashes with pointer keys. + * + * mod_hash_create_ptrhash() + * mod_hash_destroy_ptrhash() + * Create a hash that uses pointers as keys. This hash algorithm + * picks an appropriate set of middle bits in the address to hash on + * based on the size of the hash table and a hint about the size of + * the items pointed at. + */ +uint_t +mod_hash_byptr(void *hash_data, mod_hash_key_t key) +{ + uintptr_t k = (uintptr_t)key; + k >>= (int)(uintptr_t)hash_data; + + return ((uint_t)k); +} + +int +mod_hash_ptrkey_cmp(mod_hash_key_t key1, mod_hash_key_t key2) +{ + uintptr_t k1 = (uintptr_t)key1; + uintptr_t k2 = (uintptr_t)key2; + if (k1 > k2) + return (-1); + else if (k1 < k2) + return (1); + else + return (0); +} + +mod_hash_t * +mod_hash_create_ptrhash(char *name, size_t nchains, + void (*val_dtor)(mod_hash_val_t), size_t key_elem_size) +{ + size_t rshift; + + /* + * We want to hash on the bits in the middle of the address word + * Bits far to the right in the word have little significance, and + * are likely to all look the same (for example, an array of + * 256-byte structures will have the bottom 8 bits of address + * words the same). So we want to right-shift each address to + * ignore the bottom bits. + * + * The high bits, which are also unused, will get taken out when + * mod_hash takes hashkey % nchains. + */ + rshift = highbit(key_elem_size); + + return mod_hash_create_extended(name, nchains, mod_hash_null_keydtor, + val_dtor, mod_hash_byptr, (void *)rshift, mod_hash_ptrkey_cmp, + KM_SLEEP); +} + +void +mod_hash_destroy_ptrhash(mod_hash_t *hash) +{ + ASSERT(hash); + mod_hash_destroy_hash(hash); +} + +/* + * mod_hash_byid() + * mod_hash_idkey_cmp() + * Hash and key comparison routines for hashes with 32-bit unsigned keys. + * + * mod_hash_create_idhash() + * mod_hash_destroy_idhash() + * mod_hash_iddata_gen() + * Create a hash that uses numeric keys. + * + * The hash algorithm is documented in "Introduction to Algorithms" + * (Cormen, Leiserson, Rivest); when the hash table is created, it + * attempts to find the next largest prime above the number of hash + * slots. The hash index is then this number times the key modulo + * the hash size, or (key * prime) % nchains. + */ +uint_t +mod_hash_byid(void *hash_data, mod_hash_key_t key) +{ + uint_t kval = (uint_t)(uintptr_t)hash_data; + return ((uint_t)(uintptr_t)key * (uint_t)kval); +} + +int +mod_hash_idkey_cmp(mod_hash_key_t key1, mod_hash_key_t key2) +{ + return ((uint_t)(uintptr_t)key1 - (uint_t)(uintptr_t)key2); +} + +/* + * Generate the next largest prime number greater than nchains; this value + * is intended to be later passed in to mod_hash_create_extended() as the + * hash_data. + */ +uint_t +mod_hash_iddata_gen(size_t nchains) +{ + uint_t kval, i, prime; + + /* + * Pick the first (odd) prime greater than nchains. Make sure kval is + * odd (so start with nchains +1 or +2 as appropriate). + */ + kval = (nchains % 2 == 0) ? nchains + 1 : nchains + 2; + + for (;;) { + prime = 1; + for (i = 3; i * i <= kval; i += 2) { + if (kval % i == 0) + prime = 0; + } + if (prime == 1) + break; + kval += 2; + } + return (kval); +} + +mod_hash_t * +mod_hash_create_idhash(char *name, size_t nchains, + void (*val_dtor)(mod_hash_val_t)) +{ + uint_t kval = mod_hash_iddata_gen(nchains); + + return (mod_hash_create_extended(name, nchains, mod_hash_null_keydtor, + val_dtor, mod_hash_byid, (void *)(uintptr_t)kval, + mod_hash_idkey_cmp, KM_SLEEP)); +} + +void +mod_hash_destroy_idhash(mod_hash_t *hash) +{ + ASSERT(hash); + mod_hash_destroy_hash(hash); +} + +void +mod_hash_fini(void) +{ + mutex_destroy(&mh_head_lock); + + if (mh_e_cache) { + kmem_cache_destroy(mh_e_cache); + mh_e_cache = NULL; + } +} + +/* + * mod_hash_init() + * sets up globals, etc for mod_hash_* + */ +void +mod_hash_init(void) +{ + ASSERT(mh_e_cache == NULL); + mh_e_cache = kmem_cache_create("mod_hash_entries", + sizeof (struct mod_hash_entry), 0, NULL, NULL, NULL, NULL, + NULL, 0); + + mutex_init(&mh_head_lock, NULL, MUTEX_DEFAULT, NULL); +} + +/* + * mod_hash_create_extended() + * The full-blown hash creation function. + * + * notes: + * nchains - how many hash slots to create. More hash slots will + * result in shorter hash chains, but will consume + * slightly more memory up front. + * sleep - should be KM_SLEEP or KM_NOSLEEP, to indicate whether + * to sleep for memory, or fail in low-memory conditions. + * + * Fails only if KM_NOSLEEP was specified, and no memory was available. + */ +mod_hash_t * +mod_hash_create_extended( + char *hname, /* descriptive name for hash */ + size_t nchains, /* number of hash slots */ + void (*kdtor)(mod_hash_key_t), /* key destructor */ + void (*vdtor)(mod_hash_val_t), /* value destructor */ + uint_t (*hash_alg)(void *, mod_hash_key_t), /* hash algorithm */ + void *hash_alg_data, /* pass-thru arg for hash_alg */ + int (*keycmp)(mod_hash_key_t, mod_hash_key_t), /* key comparator */ + int sleep) /* whether to sleep for mem */ +{ + mod_hash_t *mod_hash; + ASSERT(hname && keycmp && hash_alg && vdtor && kdtor); + + if ((mod_hash = kmem_zalloc(MH_SIZE(nchains), sleep)) == NULL) + return (NULL); + + mod_hash->mh_name = kmem_alloc(strlen(hname) + 1, sleep); + if (mod_hash->mh_name == NULL) { + kmem_free(mod_hash, MH_SIZE(nchains)); + return (NULL); + } + (void) strcpy(mod_hash->mh_name, hname); + + rw_init(&mod_hash->mh_contents, NULL, RW_DEFAULT, NULL); + mod_hash->mh_sleep = sleep; + mod_hash->mh_nchains = nchains; + mod_hash->mh_kdtor = kdtor; + mod_hash->mh_vdtor = vdtor; + mod_hash->mh_hashalg = hash_alg; + mod_hash->mh_hashalg_data = hash_alg_data; + mod_hash->mh_keycmp = keycmp; + + /* + * Link the hash up on the list of hashes + */ + mutex_enter(&mh_head_lock); + mod_hash->mh_next = mh_head; + mh_head = mod_hash; + mutex_exit(&mh_head_lock); + + return (mod_hash); +} + +/* + * mod_hash_destroy_hash() + * destroy a hash table, destroying all of its stored keys and values + * as well. + */ +void +mod_hash_destroy_hash(mod_hash_t *hash) +{ + mod_hash_t *mhp, *mhpp; + + mutex_enter(&mh_head_lock); + /* + * Remove the hash from the hash list + */ + if (hash == mh_head) { /* removing 1st list elem */ + mh_head = mh_head->mh_next; + } else { + /* + * mhpp can start out NULL since we know the 1st elem isn't the + * droid we're looking for. + */ + mhpp = NULL; + for (mhp = mh_head; mhp != NULL; mhp = mhp->mh_next) { + if (mhp == hash) { + mhpp->mh_next = mhp->mh_next; + break; + } + mhpp = mhp; + } + } + mutex_exit(&mh_head_lock); + + /* + * Clean out keys and values. + */ + mod_hash_clear(hash); + + rw_destroy(&hash->mh_contents); + kmem_free(hash->mh_name, strlen(hash->mh_name) + 1); + kmem_free(hash, MH_SIZE(hash->mh_nchains)); +} + +/* + * i_mod_hash() + * Call the hashing algorithm for this hash table, with the given key. + */ +uint_t +i_mod_hash(mod_hash_t *hash, mod_hash_key_t key) +{ + uint_t h; + /* + * Prevent div by 0 problems; + * Also a nice shortcut when using a hash as a list + */ + if (hash->mh_nchains == 1) + return (0); + + h = (hash->mh_hashalg)(hash->mh_hashalg_data, key); + return (h % (hash->mh_nchains - 1)); +} + +/* + * i_mod_hash_insert_nosync() + * mod_hash_insert() + * mod_hash_insert_reserve() + * insert 'val' into the hash table, using 'key' as its key. If 'key' is + * already a key in the hash, an error will be returned, and the key-val + * pair will not be inserted. i_mod_hash_insert_nosync() supports a simple + * handle abstraction, allowing hash entry allocation to be separated from + * the hash insertion. this abstraction allows simple use of the mod_hash + * structure in situations where mod_hash_insert() with a KM_SLEEP + * allocation policy would otherwise be unsafe. + */ +int +i_mod_hash_insert_nosync(mod_hash_t *hash, mod_hash_key_t key, + mod_hash_val_t val, mod_hash_hndl_t handle) +{ + uint_t hashidx; + struct mod_hash_entry *entry; + + ASSERT(hash); + + /* + * If we've not been given reserved storage, allocate storage directly, + * using the hash's allocation policy. + */ + if (handle == (mod_hash_hndl_t)0) { + entry = kmem_cache_alloc(mh_e_cache, hash->mh_sleep); + if (entry == NULL) { + hash->mh_stat.mhs_nomem++; + return (MH_ERR_NOMEM); + } + } else { + entry = (struct mod_hash_entry *)handle; + } + + hashidx = i_mod_hash(hash, key); + entry->mhe_key = key; + entry->mhe_val = val; + entry->mhe_next = hash->mh_entries[hashidx]; + + hash->mh_entries[hashidx] = entry; + hash->mh_stat.mhs_nelems++; + + return (0); +} + +int +mod_hash_insert(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t val) +{ + int res; + mod_hash_val_t v; + + rw_enter(&hash->mh_contents, RW_WRITER); + + /* + * Disallow duplicate keys in the hash + */ + if (i_mod_hash_find_nosync(hash, key, &v) == 0) { + rw_exit(&hash->mh_contents); + hash->mh_stat.mhs_coll++; + return (MH_ERR_DUPLICATE); + } + + res = i_mod_hash_insert_nosync(hash, key, val, (mod_hash_hndl_t)0); + rw_exit(&hash->mh_contents); + + return (res); +} + +int +mod_hash_insert_reserve(mod_hash_t *hash, mod_hash_key_t key, + mod_hash_val_t val, mod_hash_hndl_t handle) +{ + int res; + mod_hash_val_t v; + + rw_enter(&hash->mh_contents, RW_WRITER); + + /* + * Disallow duplicate keys in the hash + */ + if (i_mod_hash_find_nosync(hash, key, &v) == 0) { + rw_exit(&hash->mh_contents); + hash->mh_stat.mhs_coll++; + return (MH_ERR_DUPLICATE); + } + res = i_mod_hash_insert_nosync(hash, key, val, handle); + rw_exit(&hash->mh_contents); + + return (res); +} + +/* + * mod_hash_reserve() + * mod_hash_reserve_nosleep() + * mod_hash_cancel() + * Make or cancel a mod_hash_entry_t reservation. Reservations are used in + * mod_hash_insert_reserve() above. + */ +int +mod_hash_reserve(mod_hash_t *hash, mod_hash_hndl_t *handlep) +{ + *handlep = kmem_cache_alloc(mh_e_cache, hash->mh_sleep); + if (*handlep == NULL) { + hash->mh_stat.mhs_nomem++; + return (MH_ERR_NOMEM); + } + + return (0); +} + +int +mod_hash_reserve_nosleep(mod_hash_t *hash, mod_hash_hndl_t *handlep) +{ + *handlep = kmem_cache_alloc(mh_e_cache, KM_NOSLEEP); + if (*handlep == NULL) { + hash->mh_stat.mhs_nomem++; + return (MH_ERR_NOMEM); + } + + return (0); + +} + +/*ARGSUSED*/ +void +mod_hash_cancel(mod_hash_t *hash, mod_hash_hndl_t *handlep) +{ + kmem_cache_free(mh_e_cache, *handlep); + *handlep = (mod_hash_hndl_t)0; +} + +/* + * i_mod_hash_remove_nosync() + * mod_hash_remove() + * Remove an element from the hash table. + */ +int +i_mod_hash_remove_nosync(mod_hash_t *hash, mod_hash_key_t key, + mod_hash_val_t *val) +{ + int hashidx; + struct mod_hash_entry *e, *ep; + + hashidx = i_mod_hash(hash, key); + ep = NULL; /* e's parent */ + + for (e = hash->mh_entries[hashidx]; e != NULL; e = e->mhe_next) { + if (MH_KEYCMP(hash, e->mhe_key, key) == 0) + break; + ep = e; + } + + if (e == NULL) { /* not found */ + return (MH_ERR_NOTFOUND); + } + + if (ep == NULL) /* special case 1st element in bucket */ + hash->mh_entries[hashidx] = e->mhe_next; + else + ep->mhe_next = e->mhe_next; + + /* + * Clean up resources used by the node's key. + */ + MH_KEY_DESTROY(hash, e->mhe_key); + + *val = e->mhe_val; + kmem_cache_free(mh_e_cache, e); + hash->mh_stat.mhs_nelems--; + + return (0); +} + +int +mod_hash_remove(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t *val) +{ + int res; + + rw_enter(&hash->mh_contents, RW_WRITER); + res = i_mod_hash_remove_nosync(hash, key, val); + rw_exit(&hash->mh_contents); + + return (res); +} + +/* + * mod_hash_replace() + * atomically remove an existing key-value pair from a hash, and replace + * the key and value with the ones supplied. The removed key and value + * (if any) are destroyed. + */ +int +mod_hash_replace(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t val) +{ + int res; + mod_hash_val_t v; + + rw_enter(&hash->mh_contents, RW_WRITER); + + if (i_mod_hash_remove_nosync(hash, key, &v) == 0) { + /* + * mod_hash_remove() takes care of freeing up the key resources. + */ + MH_VAL_DESTROY(hash, v); + } + res = i_mod_hash_insert_nosync(hash, key, val, (mod_hash_hndl_t)0); + + rw_exit(&hash->mh_contents); + + return (res); +} + +/* + * mod_hash_destroy() + * Remove an element from the hash table matching 'key', and destroy it. + */ +int +mod_hash_destroy(mod_hash_t *hash, mod_hash_key_t key) +{ + mod_hash_val_t val; + int rv; + + rw_enter(&hash->mh_contents, RW_WRITER); + + if ((rv = i_mod_hash_remove_nosync(hash, key, &val)) == 0) { + /* + * mod_hash_remove() takes care of freeing up the key resources. + */ + MH_VAL_DESTROY(hash, val); + } + + rw_exit(&hash->mh_contents); + return (rv); +} + +/* + * i_mod_hash_find_nosync() + * mod_hash_find() + * Find a value in the hash table corresponding to the given key. + */ +int +i_mod_hash_find_nosync(mod_hash_t *hash, mod_hash_key_t key, + mod_hash_val_t *val) +{ + uint_t hashidx; + struct mod_hash_entry *e; + + hashidx = i_mod_hash(hash, key); + + for (e = hash->mh_entries[hashidx]; e != NULL; e = e->mhe_next) { + if (MH_KEYCMP(hash, e->mhe_key, key) == 0) { + *val = e->mhe_val; + hash->mh_stat.mhs_hit++; + return (0); + } + } + hash->mh_stat.mhs_miss++; + return (MH_ERR_NOTFOUND); +} + +int +mod_hash_find(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t *val) +{ + int res; + + rw_enter(&hash->mh_contents, RW_READER); + res = i_mod_hash_find_nosync(hash, key, val); + rw_exit(&hash->mh_contents); + + return (res); +} + +int +mod_hash_find_cb(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t *val, + void (*find_cb)(mod_hash_key_t, mod_hash_val_t)) +{ + int res; + + rw_enter(&hash->mh_contents, RW_READER); + res = i_mod_hash_find_nosync(hash, key, val); + if (res == 0) { + find_cb(key, *val); + } + rw_exit(&hash->mh_contents); + + return (res); +} + +int +mod_hash_find_cb_rval(mod_hash_t *hash, mod_hash_key_t key, mod_hash_val_t *val, + int (*find_cb)(mod_hash_key_t, mod_hash_val_t), int *cb_rval) +{ + int res; + + rw_enter(&hash->mh_contents, RW_READER); + res = i_mod_hash_find_nosync(hash, key, val); + if (res == 0) { + *cb_rval = find_cb(key, *val); + } + rw_exit(&hash->mh_contents); + + return (res); +} + +void +i_mod_hash_walk_nosync(mod_hash_t *hash, + uint_t (*callback)(mod_hash_key_t, mod_hash_val_t *, void *), void *arg) +{ + struct mod_hash_entry *e; + uint_t hashidx; + int res = MH_WALK_CONTINUE; + + for (hashidx = 0; + (hashidx < (hash->mh_nchains - 1)) && (res == MH_WALK_CONTINUE); + hashidx++) { + e = hash->mh_entries[hashidx]; + while ((e != NULL) && (res == MH_WALK_CONTINUE)) { + res = callback(e->mhe_key, e->mhe_val, arg); + e = e->mhe_next; + } + } +} + +/* + * mod_hash_walk() + * Walks all the elements in the hashtable and invokes the callback + * function with the key/value pair for each element. The hashtable + * is locked for readers so the callback function should not attempt + * to do any updates to the hashable. The callback function should + * return MH_WALK_CONTINUE to continue walking the hashtable or + * MH_WALK_TERMINATE to abort the walk of the hashtable. + */ +void +mod_hash_walk(mod_hash_t *hash, + uint_t (*callback)(mod_hash_key_t, mod_hash_val_t *, void *), void *arg) +{ + rw_enter(&hash->mh_contents, RW_READER); + i_mod_hash_walk_nosync(hash, callback, arg); + rw_exit(&hash->mh_contents); +} + + +/* + * i_mod_hash_clear_nosync() + * mod_hash_clear() + * Clears the given hash table by calling the destructor of every hash + * element and freeing up all mod_hash_entry's. + */ +void +i_mod_hash_clear_nosync(mod_hash_t *hash) +{ + int i; + struct mod_hash_entry *e, *old_e; + + for (i = 0; i < hash->mh_nchains; i++) { + e = hash->mh_entries[i]; + while (e != NULL) { + MH_KEY_DESTROY(hash, e->mhe_key); + MH_VAL_DESTROY(hash, e->mhe_val); + old_e = e; + e = e->mhe_next; + kmem_cache_free(mh_e_cache, old_e); + } + hash->mh_entries[i] = NULL; + } + hash->mh_stat.mhs_nelems = 0; +} + +void +mod_hash_clear(mod_hash_t *hash) +{ + ASSERT(hash); + rw_enter(&hash->mh_contents, RW_WRITER); + i_mod_hash_clear_nosync(hash); + rw_exit(&hash->mh_contents); +} --- linux-aws-4.15.0.orig/zfs/module/icp/spi/kcf_spi.c +++ linux-aws-4.15.0/zfs/module/icp/spi/kcf_spi.c @@ -0,0 +1,924 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * This file is part of the core Kernel Cryptographic Framework. + * It implements the SPI functions exported to cryptographic + * providers. + */ + + +#include +#include +#include +#include +#include + +/* + * minalloc and maxalloc values to be used for taskq_create(). + */ +int crypto_taskq_threads = CRYPTO_TASKQ_THREADS; +int crypto_taskq_minalloc = CYRPTO_TASKQ_MIN; +int crypto_taskq_maxalloc = CRYPTO_TASKQ_MAX; + +static void remove_provider(kcf_provider_desc_t *); +static void process_logical_providers(crypto_provider_info_t *, + kcf_provider_desc_t *); +static int init_prov_mechs(crypto_provider_info_t *, kcf_provider_desc_t *); +static int kcf_prov_kstat_update(kstat_t *, int); +static void delete_kstat(kcf_provider_desc_t *); + +static kcf_prov_stats_t kcf_stats_ks_data_template = { + { "kcf_ops_total", KSTAT_DATA_UINT64 }, + { "kcf_ops_passed", KSTAT_DATA_UINT64 }, + { "kcf_ops_failed", KSTAT_DATA_UINT64 }, + { "kcf_ops_returned_busy", KSTAT_DATA_UINT64 } +}; + +#define KCF_SPI_COPY_OPS(src, dst, ops) if ((src)->ops != NULL) \ + *((dst)->ops) = *((src)->ops); + +/* + * Copy an ops vector from src to dst. Used during provider registration + * to copy the ops vector from the provider info structure to the + * provider descriptor maintained by KCF. + * Copying the ops vector specified by the provider is needed since the + * framework does not require the provider info structure to be + * persistent. + */ +static void +copy_ops_vector_v1(crypto_ops_t *src_ops, crypto_ops_t *dst_ops) +{ + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_control_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_digest_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_cipher_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_mac_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_sign_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_verify_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_dual_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_dual_cipher_mac_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_random_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_session_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_object_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_key_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_provider_ops); + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_ctx_ops); +} + +static void +copy_ops_vector_v2(crypto_ops_t *src_ops, crypto_ops_t *dst_ops) +{ + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_mech_ops); +} + +static void +copy_ops_vector_v3(crypto_ops_t *src_ops, crypto_ops_t *dst_ops) +{ + KCF_SPI_COPY_OPS(src_ops, dst_ops, co_nostore_key_ops); +} + +/* + * This routine is used to add cryptographic providers to the KEF framework. + * Providers pass a crypto_provider_info structure to crypto_register_provider() + * and get back a handle. The crypto_provider_info structure contains a + * list of mechanisms supported by the provider and an ops vector containing + * provider entry points. Hardware providers call this routine in their attach + * routines. Software providers call this routine in their _init() routine. + */ +int +crypto_register_provider(crypto_provider_info_t *info, + crypto_kcf_provider_handle_t *handle) +{ + char ks_name[KSTAT_STRLEN]; + + kcf_provider_desc_t *prov_desc = NULL; + int ret = CRYPTO_ARGUMENTS_BAD; + + if (info->pi_interface_version > CRYPTO_SPI_VERSION_3) + return (CRYPTO_VERSION_MISMATCH); + + /* + * Check provider type, must be software, hardware, or logical. + */ + if (info->pi_provider_type != CRYPTO_HW_PROVIDER && + info->pi_provider_type != CRYPTO_SW_PROVIDER && + info->pi_provider_type != CRYPTO_LOGICAL_PROVIDER) + return (CRYPTO_ARGUMENTS_BAD); + + /* + * Allocate and initialize a new provider descriptor. We also + * hold it and release it when done. + */ + prov_desc = kcf_alloc_provider_desc(info); + KCF_PROV_REFHOLD(prov_desc); + + prov_desc->pd_prov_type = info->pi_provider_type; + + /* provider-private handle, opaque to KCF */ + prov_desc->pd_prov_handle = info->pi_provider_handle; + + /* copy provider description string */ + if (info->pi_provider_description != NULL) { + /* + * pi_provider_descriptor is a string that can contain + * up to CRYPTO_PROVIDER_DESCR_MAX_LEN + 1 characters + * INCLUDING the terminating null character. A bcopy() + * is necessary here as pd_description should not have + * a null character. See comments in kcf_alloc_provider_desc() + * for details on pd_description field. + */ + bcopy(info->pi_provider_description, prov_desc->pd_description, + MIN(strlen(info->pi_provider_description), + (size_t)CRYPTO_PROVIDER_DESCR_MAX_LEN)); + } + + if (info->pi_provider_type != CRYPTO_LOGICAL_PROVIDER) { + if (info->pi_ops_vector == NULL) { + goto bail; + } + copy_ops_vector_v1(info->pi_ops_vector, + prov_desc->pd_ops_vector); + if (info->pi_interface_version >= CRYPTO_SPI_VERSION_2) { + copy_ops_vector_v2(info->pi_ops_vector, + prov_desc->pd_ops_vector); + prov_desc->pd_flags = info->pi_flags; + } + if (info->pi_interface_version == CRYPTO_SPI_VERSION_3) { + copy_ops_vector_v3(info->pi_ops_vector, + prov_desc->pd_ops_vector); + } + } + + /* object_ops and nostore_key_ops are mutually exclusive */ + if (prov_desc->pd_ops_vector->co_object_ops && + prov_desc->pd_ops_vector->co_nostore_key_ops) { + goto bail; + } + + /* process the mechanisms supported by the provider */ + if ((ret = init_prov_mechs(info, prov_desc)) != CRYPTO_SUCCESS) + goto bail; + + /* + * Add provider to providers tables, also sets the descriptor + * pd_prov_id field. + */ + if ((ret = kcf_prov_tab_add_provider(prov_desc)) != CRYPTO_SUCCESS) { + undo_register_provider(prov_desc, B_FALSE); + goto bail; + } + + /* + * We create a taskq only for a hardware provider. The global + * software queue is used for software providers. We handle ordering + * of multi-part requests in the taskq routine. So, it is safe to + * have multiple threads for the taskq. We pass TASKQ_PREPOPULATE flag + * to keep some entries cached to improve performance. + */ + if (prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER) + prov_desc->pd_sched_info.ks_taskq = taskq_create("kcf_taskq", + crypto_taskq_threads, minclsyspri, + crypto_taskq_minalloc, crypto_taskq_maxalloc, + TASKQ_PREPOPULATE); + else + prov_desc->pd_sched_info.ks_taskq = NULL; + + /* no kernel session to logical providers */ + if (prov_desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER) { + /* + * Open a session for session-oriented providers. This session + * is used for all kernel consumers. This is fine as a provider + * is required to support multiple thread access to a session. + * We can do this only after the taskq has been created as we + * do a kcf_submit_request() to open the session. + */ + if (KCF_PROV_SESSION_OPS(prov_desc) != NULL) { + kcf_req_params_t params; + + KCF_WRAP_SESSION_OPS_PARAMS(¶ms, + KCF_OP_SESSION_OPEN, &prov_desc->pd_sid, 0, + CRYPTO_USER, NULL, 0, prov_desc); + ret = kcf_submit_request(prov_desc, NULL, NULL, ¶ms, + B_FALSE); + + if (ret != CRYPTO_SUCCESS) { + undo_register_provider(prov_desc, B_TRUE); + ret = CRYPTO_FAILED; + goto bail; + } + } + } + + if (prov_desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER) { + /* + * Create the kstat for this provider. There is a kstat + * installed for each successfully registered provider. + * This kstat is deleted, when the provider unregisters. + */ + if (prov_desc->pd_prov_type == CRYPTO_SW_PROVIDER) { + (void) snprintf(ks_name, KSTAT_STRLEN, "%s_%s", + "NONAME", "provider_stats"); + } else { + (void) snprintf(ks_name, KSTAT_STRLEN, "%s_%d_%u_%s", + "NONAME", 0, + prov_desc->pd_prov_id, "provider_stats"); + } + + prov_desc->pd_kstat = kstat_create("kcf", 0, ks_name, "crypto", + KSTAT_TYPE_NAMED, sizeof (kcf_prov_stats_t) / + sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL); + + if (prov_desc->pd_kstat != NULL) { + bcopy(&kcf_stats_ks_data_template, + &prov_desc->pd_ks_data, + sizeof (kcf_stats_ks_data_template)); + prov_desc->pd_kstat->ks_data = &prov_desc->pd_ks_data; + KCF_PROV_REFHOLD(prov_desc); + KCF_PROV_IREFHOLD(prov_desc); + prov_desc->pd_kstat->ks_private = prov_desc; + prov_desc->pd_kstat->ks_update = kcf_prov_kstat_update; + kstat_install(prov_desc->pd_kstat); + } + } + + if (prov_desc->pd_prov_type == CRYPTO_HW_PROVIDER) + process_logical_providers(info, prov_desc); + + mutex_enter(&prov_desc->pd_lock); + prov_desc->pd_state = KCF_PROV_READY; + mutex_exit(&prov_desc->pd_lock); + kcf_do_notify(prov_desc, B_TRUE); + + *handle = prov_desc->pd_kcf_prov_handle; + ret = CRYPTO_SUCCESS; + +bail: + KCF_PROV_REFRELE(prov_desc); + return (ret); +} + +/* + * This routine is used to notify the framework when a provider is being + * removed. Hardware providers call this routine in their detach routines. + * Software providers call this routine in their _fini() routine. + */ +int +crypto_unregister_provider(crypto_kcf_provider_handle_t handle) +{ + uint_t mech_idx; + kcf_provider_desc_t *desc; + kcf_prov_state_t saved_state; + + /* lookup provider descriptor */ + if ((desc = kcf_prov_tab_lookup((crypto_provider_id_t)handle)) == NULL) + return (CRYPTO_UNKNOWN_PROVIDER); + + mutex_enter(&desc->pd_lock); + /* + * Check if any other thread is disabling or removing + * this provider. We return if this is the case. + */ + if (desc->pd_state >= KCF_PROV_DISABLED) { + mutex_exit(&desc->pd_lock); + /* Release reference held by kcf_prov_tab_lookup(). */ + KCF_PROV_REFRELE(desc); + return (CRYPTO_BUSY); + } + + saved_state = desc->pd_state; + desc->pd_state = KCF_PROV_REMOVED; + + if (saved_state == KCF_PROV_BUSY) { + /* + * The per-provider taskq threads may be waiting. We + * signal them so that they can start failing requests. + */ + cv_broadcast(&desc->pd_resume_cv); + } + + if (desc->pd_prov_type == CRYPTO_SW_PROVIDER) { + /* + * Check if this provider is currently being used. + * pd_irefcnt is the number of holds from the internal + * structures. We add one to account for the above lookup. + */ + if (desc->pd_refcnt > desc->pd_irefcnt + 1) { + desc->pd_state = saved_state; + mutex_exit(&desc->pd_lock); + /* Release reference held by kcf_prov_tab_lookup(). */ + KCF_PROV_REFRELE(desc); + /* + * The administrator presumably will stop the clients + * thus removing the holds, when they get the busy + * return value. Any retry will succeed then. + */ + return (CRYPTO_BUSY); + } + } + mutex_exit(&desc->pd_lock); + + if (desc->pd_prov_type != CRYPTO_SW_PROVIDER) { + remove_provider(desc); + } + + if (desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER) { + /* remove the provider from the mechanisms tables */ + for (mech_idx = 0; mech_idx < desc->pd_mech_list_count; + mech_idx++) { + kcf_remove_mech_provider( + desc->pd_mechanisms[mech_idx].cm_mech_name, desc); + } + } + + /* remove provider from providers table */ + if (kcf_prov_tab_rem_provider((crypto_provider_id_t)handle) != + CRYPTO_SUCCESS) { + /* Release reference held by kcf_prov_tab_lookup(). */ + KCF_PROV_REFRELE(desc); + return (CRYPTO_UNKNOWN_PROVIDER); + } + + delete_kstat(desc); + + if (desc->pd_prov_type == CRYPTO_SW_PROVIDER) { + /* Release reference held by kcf_prov_tab_lookup(). */ + KCF_PROV_REFRELE(desc); + + /* + * Wait till the existing requests complete. + */ + mutex_enter(&desc->pd_lock); + while (desc->pd_state != KCF_PROV_FREED) + cv_wait(&desc->pd_remove_cv, &desc->pd_lock); + mutex_exit(&desc->pd_lock); + } else { + /* + * Wait until requests that have been sent to the provider + * complete. + */ + mutex_enter(&desc->pd_lock); + while (desc->pd_irefcnt > 0) + cv_wait(&desc->pd_remove_cv, &desc->pd_lock); + mutex_exit(&desc->pd_lock); + } + + kcf_do_notify(desc, B_FALSE); + + if (desc->pd_prov_type == CRYPTO_SW_PROVIDER) { + /* + * This is the only place where kcf_free_provider_desc() + * is called directly. KCF_PROV_REFRELE() should free the + * structure in all other places. + */ + ASSERT(desc->pd_state == KCF_PROV_FREED && + desc->pd_refcnt == 0); + kcf_free_provider_desc(desc); + } else { + KCF_PROV_REFRELE(desc); + } + + return (CRYPTO_SUCCESS); +} + +/* + * This routine is used to notify the framework that the state of + * a cryptographic provider has changed. Valid state codes are: + * + * CRYPTO_PROVIDER_READY + * The provider indicates that it can process more requests. A provider + * will notify with this event if it previously has notified us with a + * CRYPTO_PROVIDER_BUSY. + * + * CRYPTO_PROVIDER_BUSY + * The provider can not take more requests. + * + * CRYPTO_PROVIDER_FAILED + * The provider encountered an internal error. The framework will not + * be sending any more requests to the provider. The provider may notify + * with a CRYPTO_PROVIDER_READY, if it is able to recover from the error. + * + * This routine can be called from user or interrupt context. + */ +void +crypto_provider_notification(crypto_kcf_provider_handle_t handle, uint_t state) +{ + kcf_provider_desc_t *pd; + + /* lookup the provider from the given handle */ + if ((pd = kcf_prov_tab_lookup((crypto_provider_id_t)handle)) == NULL) + return; + + mutex_enter(&pd->pd_lock); + + if (pd->pd_state <= KCF_PROV_VERIFICATION_FAILED) + goto out; + + if (pd->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + cmn_err(CE_WARN, "crypto_provider_notification: " + "logical provider (%x) ignored\n", handle); + goto out; + } + switch (state) { + case CRYPTO_PROVIDER_READY: + switch (pd->pd_state) { + case KCF_PROV_BUSY: + pd->pd_state = KCF_PROV_READY; + /* + * Signal the per-provider taskq threads that they + * can start submitting requests. + */ + cv_broadcast(&pd->pd_resume_cv); + break; + + case KCF_PROV_FAILED: + /* + * The provider recovered from the error. Let us + * use it now. + */ + pd->pd_state = KCF_PROV_READY; + break; + default: + break; + } + break; + + case CRYPTO_PROVIDER_BUSY: + switch (pd->pd_state) { + case KCF_PROV_READY: + pd->pd_state = KCF_PROV_BUSY; + break; + default: + break; + } + break; + + case CRYPTO_PROVIDER_FAILED: + /* + * We note the failure and return. The per-provider taskq + * threads check this flag and start failing the + * requests, if it is set. See process_req_hwp() for details. + */ + switch (pd->pd_state) { + case KCF_PROV_READY: + pd->pd_state = KCF_PROV_FAILED; + break; + + case KCF_PROV_BUSY: + pd->pd_state = KCF_PROV_FAILED; + /* + * The per-provider taskq threads may be waiting. We + * signal them so that they can start failing requests. + */ + cv_broadcast(&pd->pd_resume_cv); + break; + default: + break; + } + break; + default: + break; + } +out: + mutex_exit(&pd->pd_lock); + KCF_PROV_REFRELE(pd); +} + +/* + * This routine is used to notify the framework the result of + * an asynchronous request handled by a provider. Valid error + * codes are the same as the CRYPTO_* errors defined in common.h. + * + * This routine can be called from user or interrupt context. + */ +void +crypto_op_notification(crypto_req_handle_t handle, int error) +{ + kcf_call_type_t ctype; + + if (handle == NULL) + return; + + if ((ctype = GET_REQ_TYPE(handle)) == CRYPTO_SYNCH) { + kcf_sreq_node_t *sreq = (kcf_sreq_node_t *)handle; + + if (error != CRYPTO_SUCCESS) + sreq->sn_provider->pd_sched_info.ks_nfails++; + KCF_PROV_IREFRELE(sreq->sn_provider); + kcf_sop_done(sreq, error); + } else { + kcf_areq_node_t *areq = (kcf_areq_node_t *)handle; + + ASSERT(ctype == CRYPTO_ASYNCH); + if (error != CRYPTO_SUCCESS) + areq->an_provider->pd_sched_info.ks_nfails++; + KCF_PROV_IREFRELE(areq->an_provider); + kcf_aop_done(areq, error); + } +} + +/* + * This routine is used by software providers to determine + * whether to use KM_SLEEP or KM_NOSLEEP during memory allocation. + * Note that hardware providers can always use KM_SLEEP. So, + * they do not need to call this routine. + * + * This routine can be called from user or interrupt context. + */ +int +crypto_kmflag(crypto_req_handle_t handle) +{ + return (REQHNDL2_KMFLAG(handle)); +} + +/* + * Process the mechanism info structures specified by the provider + * during registration. A NULL crypto_provider_info_t indicates + * an already initialized provider descriptor. + * + * Mechanisms are not added to the kernel's mechanism table if the + * provider is a logical provider. + * + * Returns CRYPTO_SUCCESS on success, CRYPTO_ARGUMENTS if one + * of the specified mechanisms was malformed, or CRYPTO_HOST_MEMORY + * if the table of mechanisms is full. + */ +static int +init_prov_mechs(crypto_provider_info_t *info, kcf_provider_desc_t *desc) +{ + uint_t mech_idx; + uint_t cleanup_idx; + int err = CRYPTO_SUCCESS; + kcf_prov_mech_desc_t *pmd; + int desc_use_count = 0; + int mcount = desc->pd_mech_list_count; + + if (desc->pd_prov_type == CRYPTO_LOGICAL_PROVIDER) { + if (info != NULL) { + ASSERT(info->pi_mechanisms != NULL); + bcopy(info->pi_mechanisms, desc->pd_mechanisms, + sizeof (crypto_mech_info_t) * mcount); + } + return (CRYPTO_SUCCESS); + } + + /* + * Copy the mechanism list from the provider info to the provider + * descriptor. desc->pd_mechanisms has an extra crypto_mech_info_t + * element if the provider has random_ops since we keep an internal + * mechanism, SUN_RANDOM, in this case. + */ + if (info != NULL) { + if (info->pi_ops_vector->co_random_ops != NULL) { + crypto_mech_info_t *rand_mi; + + /* + * Need the following check as it is possible to have + * a provider that implements just random_ops and has + * pi_mechanisms == NULL. + */ + if (info->pi_mechanisms != NULL) { + bcopy(info->pi_mechanisms, desc->pd_mechanisms, + sizeof (crypto_mech_info_t) * (mcount - 1)); + } + rand_mi = &desc->pd_mechanisms[mcount - 1]; + + bzero(rand_mi, sizeof (crypto_mech_info_t)); + (void) strncpy(rand_mi->cm_mech_name, SUN_RANDOM, + CRYPTO_MAX_MECH_NAME); + rand_mi->cm_func_group_mask = CRYPTO_FG_RANDOM; + } else { + ASSERT(info->pi_mechanisms != NULL); + bcopy(info->pi_mechanisms, desc->pd_mechanisms, + sizeof (crypto_mech_info_t) * mcount); + } + } + + /* + * For each mechanism support by the provider, add the provider + * to the corresponding KCF mechanism mech_entry chain. + */ + for (mech_idx = 0; mech_idx < desc->pd_mech_list_count; mech_idx++) { + crypto_mech_info_t *mi = &desc->pd_mechanisms[mech_idx]; + + if ((mi->cm_mech_flags & CRYPTO_KEYSIZE_UNIT_IN_BITS) && + (mi->cm_mech_flags & CRYPTO_KEYSIZE_UNIT_IN_BYTES)) { + err = CRYPTO_ARGUMENTS_BAD; + break; + } + + if (desc->pd_flags & CRYPTO_HASH_NO_UPDATE && + mi->cm_func_group_mask & CRYPTO_FG_DIGEST) { + /* + * We ask the provider to specify the limit + * per hash mechanism. But, in practice, a + * hardware limitation means all hash mechanisms + * will have the same maximum size allowed for + * input data. So, we make it a per provider + * limit to keep it simple. + */ + if (mi->cm_max_input_length == 0) { + err = CRYPTO_ARGUMENTS_BAD; + break; + } else { + desc->pd_hash_limit = mi->cm_max_input_length; + } + } + + if ((err = kcf_add_mech_provider(mech_idx, desc, &pmd)) != + KCF_SUCCESS) + break; + + if (pmd == NULL) + continue; + + /* The provider will be used for this mechanism */ + desc_use_count++; + } + + /* + * Don't allow multiple software providers with disabled mechanisms + * to register. Subsequent enabling of mechanisms will result in + * an unsupported configuration, i.e. multiple software providers + * per mechanism. + */ + if (desc_use_count == 0 && desc->pd_prov_type == CRYPTO_SW_PROVIDER) + return (CRYPTO_ARGUMENTS_BAD); + + if (err == KCF_SUCCESS) + return (CRYPTO_SUCCESS); + + /* + * An error occurred while adding the mechanism, cleanup + * and bail. + */ + for (cleanup_idx = 0; cleanup_idx < mech_idx; cleanup_idx++) { + kcf_remove_mech_provider( + desc->pd_mechanisms[cleanup_idx].cm_mech_name, desc); + } + + if (err == KCF_MECH_TAB_FULL) + return (CRYPTO_HOST_MEMORY); + + return (CRYPTO_ARGUMENTS_BAD); +} + +/* + * Update routine for kstat. Only privileged users are allowed to + * access this information, since this information is sensitive. + * There are some cryptographic attacks (e.g. traffic analysis) + * which can use this information. + */ +static int +kcf_prov_kstat_update(kstat_t *ksp, int rw) +{ + kcf_prov_stats_t *ks_data; + kcf_provider_desc_t *pd = (kcf_provider_desc_t *)ksp->ks_private; + + if (rw == KSTAT_WRITE) + return (EACCES); + + ks_data = ksp->ks_data; + + ks_data->ps_ops_total.value.ui64 = pd->pd_sched_info.ks_ndispatches; + ks_data->ps_ops_failed.value.ui64 = pd->pd_sched_info.ks_nfails; + ks_data->ps_ops_busy_rval.value.ui64 = pd->pd_sched_info.ks_nbusy_rval; + ks_data->ps_ops_passed.value.ui64 = + pd->pd_sched_info.ks_ndispatches - + pd->pd_sched_info.ks_nfails - + pd->pd_sched_info.ks_nbusy_rval; + + return (0); +} + + +/* + * Utility routine called from failure paths in crypto_register_provider() + * and from crypto_load_soft_disabled(). + */ +void +undo_register_provider(kcf_provider_desc_t *desc, boolean_t remove_prov) +{ + uint_t mech_idx; + + /* remove the provider from the mechanisms tables */ + for (mech_idx = 0; mech_idx < desc->pd_mech_list_count; + mech_idx++) { + kcf_remove_mech_provider( + desc->pd_mechanisms[mech_idx].cm_mech_name, desc); + } + + /* remove provider from providers table */ + if (remove_prov) + (void) kcf_prov_tab_rem_provider(desc->pd_prov_id); +} + +/* + * Utility routine called from crypto_load_soft_disabled(). Callers + * should have done a prior undo_register_provider(). + */ +void +redo_register_provider(kcf_provider_desc_t *pd) +{ + /* process the mechanisms supported by the provider */ + (void) init_prov_mechs(NULL, pd); + + /* + * Hold provider in providers table. We should not call + * kcf_prov_tab_add_provider() here as the provider descriptor + * is still valid which means it has an entry in the provider + * table. + */ + KCF_PROV_REFHOLD(pd); + KCF_PROV_IREFHOLD(pd); +} + +/* + * Add provider (p1) to another provider's array of providers (p2). + * Hardware and logical providers use this array to cross-reference + * each other. + */ +static void +add_provider_to_array(kcf_provider_desc_t *p1, kcf_provider_desc_t *p2) +{ + kcf_provider_list_t *new; + + new = kmem_alloc(sizeof (kcf_provider_list_t), KM_SLEEP); + mutex_enter(&p2->pd_lock); + new->pl_next = p2->pd_provider_list; + p2->pd_provider_list = new; + KCF_PROV_IREFHOLD(p1); + new->pl_provider = p1; + mutex_exit(&p2->pd_lock); +} + +/* + * Remove provider (p1) from another provider's array of providers (p2). + * Hardware and logical providers use this array to cross-reference + * each other. + */ +static void +remove_provider_from_array(kcf_provider_desc_t *p1, kcf_provider_desc_t *p2) +{ + + kcf_provider_list_t *pl = NULL, **prev; + + mutex_enter(&p2->pd_lock); + for (pl = p2->pd_provider_list, prev = &p2->pd_provider_list; + pl != NULL; prev = &pl->pl_next, pl = pl->pl_next) { + if (pl->pl_provider == p1) { + break; + } + } + + if (p1 == NULL) { + mutex_exit(&p2->pd_lock); + return; + } + + /* detach and free kcf_provider_list structure */ + KCF_PROV_IREFRELE(p1); + *prev = pl->pl_next; + kmem_free(pl, sizeof (*pl)); + mutex_exit(&p2->pd_lock); +} + +/* + * Convert an array of logical provider handles (crypto_provider_id) + * stored in a crypto_provider_info structure into an array of provider + * descriptors (kcf_provider_desc_t) attached to a logical provider. + */ +static void +process_logical_providers(crypto_provider_info_t *info, kcf_provider_desc_t *hp) +{ + kcf_provider_desc_t *lp; + crypto_provider_id_t handle; + int count = info->pi_logical_provider_count; + int i; + + /* add hardware provider to each logical provider */ + for (i = 0; i < count; i++) { + handle = info->pi_logical_providers[i]; + lp = kcf_prov_tab_lookup((crypto_provider_id_t)handle); + if (lp == NULL) { + continue; + } + add_provider_to_array(hp, lp); + hp->pd_flags |= KCF_LPROV_MEMBER; + + /* + * A hardware provider has to have the provider descriptor of + * every logical provider it belongs to, so it can be removed + * from the logical provider if the hardware provider + * unregisters from the framework. + */ + add_provider_to_array(lp, hp); + KCF_PROV_REFRELE(lp); + } +} + +/* + * This routine removes a provider from all of the logical or + * hardware providers it belongs to, and frees the provider's + * array of pointers to providers. + */ +static void +remove_provider(kcf_provider_desc_t *pp) +{ + kcf_provider_desc_t *p; + kcf_provider_list_t *e, *next; + + mutex_enter(&pp->pd_lock); + for (e = pp->pd_provider_list; e != NULL; e = next) { + p = e->pl_provider; + remove_provider_from_array(pp, p); + if (p->pd_prov_type == CRYPTO_HW_PROVIDER && + p->pd_provider_list == NULL) + p->pd_flags &= ~KCF_LPROV_MEMBER; + KCF_PROV_IREFRELE(p); + next = e->pl_next; + kmem_free(e, sizeof (*e)); + } + pp->pd_provider_list = NULL; + mutex_exit(&pp->pd_lock); +} + +/* + * Dispatch events as needed for a provider. is_added flag tells + * whether the provider is registering or unregistering. + */ +void +kcf_do_notify(kcf_provider_desc_t *prov_desc, boolean_t is_added) +{ + int i; + crypto_notify_event_change_t ec; + + ASSERT(prov_desc->pd_state > KCF_PROV_VERIFICATION_FAILED); + + /* + * Inform interested clients of the mechanisms becoming + * available/unavailable. We skip this for logical providers + * as they do not affect mechanisms. + */ + if (prov_desc->pd_prov_type != CRYPTO_LOGICAL_PROVIDER) { + ec.ec_provider_type = prov_desc->pd_prov_type; + ec.ec_change = is_added ? CRYPTO_MECH_ADDED : + CRYPTO_MECH_REMOVED; + for (i = 0; i < prov_desc->pd_mech_list_count; i++) { + (void) strlcpy(ec.ec_mech_name, + prov_desc->pd_mechanisms[i].cm_mech_name, + CRYPTO_MAX_MECH_NAME); + kcf_walk_ntfylist(CRYPTO_EVENT_MECHS_CHANGED, &ec); + } + + } + + /* + * Inform interested clients about the new or departing provider. + * In case of a logical provider, we need to notify the event only + * for the logical provider and not for the underlying + * providers which are known by the KCF_LPROV_MEMBER bit. + */ + if (prov_desc->pd_prov_type == CRYPTO_LOGICAL_PROVIDER || + (prov_desc->pd_flags & KCF_LPROV_MEMBER) == 0) { + kcf_walk_ntfylist(is_added ? CRYPTO_EVENT_PROVIDER_REGISTERED : + CRYPTO_EVENT_PROVIDER_UNREGISTERED, prov_desc); + } +} + +static void +delete_kstat(kcf_provider_desc_t *desc) +{ + /* destroy the kstat created for this provider */ + if (desc->pd_kstat != NULL) { + kcf_provider_desc_t *kspd = desc->pd_kstat->ks_private; + + /* release reference held by desc->pd_kstat->ks_private */ + ASSERT(desc == kspd); + kstat_delete(kspd->pd_kstat); + desc->pd_kstat = NULL; + KCF_PROV_REFRELE(kspd); + KCF_PROV_IREFRELE(kspd); + } +} --- linux-aws-4.15.0.orig/zfs/module/nvpair/Makefile.in +++ linux-aws-4.15.0/zfs/module/nvpair/Makefile.in @@ -0,0 +1,13 @@ +src = @abs_top_srcdir@/module/nvpair +obj = @abs_builddir@ + +MODULE := znvpair + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += nvpair.o +$(MODULE)-objs += fnvpair.o +$(MODULE)-objs += nvpair_alloc_spl.o +$(MODULE)-objs += nvpair_alloc_fixed.o --- linux-aws-4.15.0.orig/zfs/module/nvpair/fnvpair.c +++ linux-aws-4.15.0/zfs/module/nvpair/fnvpair.c @@ -0,0 +1,581 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#ifndef _KERNEL +#include +#endif + +/* + * "Force" nvlist wrapper. + * + * These functions wrap the nvlist_* functions with assertions that assume + * the operation is successful. This allows the caller's code to be much + * more readable, especially for the fnvlist_lookup_* and fnvpair_value_* + * functions, which can return the requested value (rather than filling in + * a pointer). + * + * These functions use NV_UNIQUE_NAME, encoding NV_ENCODE_NATIVE, and allocate + * with KM_SLEEP. + * + * More wrappers should be added as needed -- for example + * nvlist_lookup_*_array and nvpair_value_*_array. + */ + +nvlist_t * +fnvlist_alloc(void) +{ + nvlist_t *nvl; + VERIFY0(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP)); + return (nvl); +} + +void +fnvlist_free(nvlist_t *nvl) +{ + nvlist_free(nvl); +} + +size_t +fnvlist_size(nvlist_t *nvl) +{ + size_t size; + VERIFY0(nvlist_size(nvl, &size, NV_ENCODE_NATIVE)); + return (size); +} + +/* + * Returns allocated buffer of size *sizep. Caller must free the buffer with + * fnvlist_pack_free(). + */ +char * +fnvlist_pack(nvlist_t *nvl, size_t *sizep) +{ + char *packed = 0; + VERIFY3U(nvlist_pack(nvl, &packed, sizep, NV_ENCODE_NATIVE, + KM_SLEEP), ==, 0); + return (packed); +} + +/*ARGSUSED*/ +void +fnvlist_pack_free(char *pack, size_t size) +{ +#ifdef _KERNEL + kmem_free(pack, size); +#else + free(pack); +#endif +} + +nvlist_t * +fnvlist_unpack(char *buf, size_t buflen) +{ + nvlist_t *rv; + VERIFY0(nvlist_unpack(buf, buflen, &rv, KM_SLEEP)); + return (rv); +} + +nvlist_t * +fnvlist_dup(nvlist_t *nvl) +{ + nvlist_t *rv; + VERIFY0(nvlist_dup(nvl, &rv, KM_SLEEP)); + return (rv); +} + +void +fnvlist_merge(nvlist_t *dst, nvlist_t *src) +{ + VERIFY0(nvlist_merge(dst, src, KM_SLEEP)); +} + +size_t +fnvlist_num_pairs(nvlist_t *nvl) +{ + size_t count = 0; + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(nvl, 0); pair != NULL; + pair = nvlist_next_nvpair(nvl, pair)) + count++; + return (count); +} + +void +fnvlist_add_boolean(nvlist_t *nvl, const char *name) +{ + VERIFY0(nvlist_add_boolean(nvl, name)); +} + +void +fnvlist_add_boolean_value(nvlist_t *nvl, const char *name, boolean_t val) +{ + VERIFY0(nvlist_add_boolean_value(nvl, name, val)); +} + +void +fnvlist_add_byte(nvlist_t *nvl, const char *name, uchar_t val) +{ + VERIFY0(nvlist_add_byte(nvl, name, val)); +} + +void +fnvlist_add_int8(nvlist_t *nvl, const char *name, int8_t val) +{ + VERIFY0(nvlist_add_int8(nvl, name, val)); +} + +void +fnvlist_add_uint8(nvlist_t *nvl, const char *name, uint8_t val) +{ + VERIFY0(nvlist_add_uint8(nvl, name, val)); +} + +void +fnvlist_add_int16(nvlist_t *nvl, const char *name, int16_t val) +{ + VERIFY0(nvlist_add_int16(nvl, name, val)); +} + +void +fnvlist_add_uint16(nvlist_t *nvl, const char *name, uint16_t val) +{ + VERIFY0(nvlist_add_uint16(nvl, name, val)); +} + +void +fnvlist_add_int32(nvlist_t *nvl, const char *name, int32_t val) +{ + VERIFY0(nvlist_add_int32(nvl, name, val)); +} + +void +fnvlist_add_uint32(nvlist_t *nvl, const char *name, uint32_t val) +{ + VERIFY0(nvlist_add_uint32(nvl, name, val)); +} + +void +fnvlist_add_int64(nvlist_t *nvl, const char *name, int64_t val) +{ + VERIFY0(nvlist_add_int64(nvl, name, val)); +} + +void +fnvlist_add_uint64(nvlist_t *nvl, const char *name, uint64_t val) +{ + VERIFY0(nvlist_add_uint64(nvl, name, val)); +} + +void +fnvlist_add_string(nvlist_t *nvl, const char *name, const char *val) +{ + VERIFY0(nvlist_add_string(nvl, name, val)); +} + +void +fnvlist_add_nvlist(nvlist_t *nvl, const char *name, nvlist_t *val) +{ + VERIFY0(nvlist_add_nvlist(nvl, name, val)); +} + +void +fnvlist_add_nvpair(nvlist_t *nvl, nvpair_t *pair) +{ + VERIFY0(nvlist_add_nvpair(nvl, pair)); +} + +void +fnvlist_add_boolean_array(nvlist_t *nvl, const char *name, + boolean_t *val, uint_t n) +{ + VERIFY0(nvlist_add_boolean_array(nvl, name, val, n)); +} + +void +fnvlist_add_byte_array(nvlist_t *nvl, const char *name, uchar_t *val, uint_t n) +{ + VERIFY0(nvlist_add_byte_array(nvl, name, val, n)); +} + +void +fnvlist_add_int8_array(nvlist_t *nvl, const char *name, int8_t *val, uint_t n) +{ + VERIFY0(nvlist_add_int8_array(nvl, name, val, n)); +} + +void +fnvlist_add_uint8_array(nvlist_t *nvl, const char *name, uint8_t *val, uint_t n) +{ + VERIFY0(nvlist_add_uint8_array(nvl, name, val, n)); +} + +void +fnvlist_add_int16_array(nvlist_t *nvl, const char *name, int16_t *val, uint_t n) +{ + VERIFY0(nvlist_add_int16_array(nvl, name, val, n)); +} + +void +fnvlist_add_uint16_array(nvlist_t *nvl, const char *name, + uint16_t *val, uint_t n) +{ + VERIFY0(nvlist_add_uint16_array(nvl, name, val, n)); +} + +void +fnvlist_add_int32_array(nvlist_t *nvl, const char *name, int32_t *val, uint_t n) +{ + VERIFY0(nvlist_add_int32_array(nvl, name, val, n)); +} + +void +fnvlist_add_uint32_array(nvlist_t *nvl, const char *name, + uint32_t *val, uint_t n) +{ + VERIFY0(nvlist_add_uint32_array(nvl, name, val, n)); +} + +void +fnvlist_add_int64_array(nvlist_t *nvl, const char *name, int64_t *val, uint_t n) +{ + VERIFY0(nvlist_add_int64_array(nvl, name, val, n)); +} + +void +fnvlist_add_uint64_array(nvlist_t *nvl, const char *name, + uint64_t *val, uint_t n) +{ + VERIFY0(nvlist_add_uint64_array(nvl, name, val, n)); +} + +void +fnvlist_add_string_array(nvlist_t *nvl, const char *name, + char * const *val, uint_t n) +{ + VERIFY0(nvlist_add_string_array(nvl, name, val, n)); +} + +void +fnvlist_add_nvlist_array(nvlist_t *nvl, const char *name, + nvlist_t **val, uint_t n) +{ + VERIFY0(nvlist_add_nvlist_array(nvl, name, val, n)); +} + +void +fnvlist_remove(nvlist_t *nvl, const char *name) +{ + VERIFY0(nvlist_remove_all(nvl, name)); +} + +void +fnvlist_remove_nvpair(nvlist_t *nvl, nvpair_t *pair) +{ + VERIFY0(nvlist_remove_nvpair(nvl, pair)); +} + +nvpair_t * +fnvlist_lookup_nvpair(nvlist_t *nvl, const char *name) +{ + nvpair_t *rv; + VERIFY0(nvlist_lookup_nvpair(nvl, name, &rv)); + return (rv); +} + +/* returns B_TRUE if the entry exists */ +boolean_t +fnvlist_lookup_boolean(nvlist_t *nvl, const char *name) +{ + return (nvlist_lookup_boolean(nvl, name) == 0); +} + +boolean_t +fnvlist_lookup_boolean_value(nvlist_t *nvl, const char *name) +{ + boolean_t rv; + VERIFY0(nvlist_lookup_boolean_value(nvl, name, &rv)); + return (rv); +} + +uchar_t +fnvlist_lookup_byte(nvlist_t *nvl, const char *name) +{ + uchar_t rv; + VERIFY0(nvlist_lookup_byte(nvl, name, &rv)); + return (rv); +} + +int8_t +fnvlist_lookup_int8(nvlist_t *nvl, const char *name) +{ + int8_t rv; + VERIFY0(nvlist_lookup_int8(nvl, name, &rv)); + return (rv); +} + +int16_t +fnvlist_lookup_int16(nvlist_t *nvl, const char *name) +{ + int16_t rv; + VERIFY0(nvlist_lookup_int16(nvl, name, &rv)); + return (rv); +} + +int32_t +fnvlist_lookup_int32(nvlist_t *nvl, const char *name) +{ + int32_t rv; + VERIFY0(nvlist_lookup_int32(nvl, name, &rv)); + return (rv); +} + +int64_t +fnvlist_lookup_int64(nvlist_t *nvl, const char *name) +{ + int64_t rv; + VERIFY0(nvlist_lookup_int64(nvl, name, &rv)); + return (rv); +} + +uint8_t +fnvlist_lookup_uint8(nvlist_t *nvl, const char *name) +{ + uint8_t rv; + VERIFY0(nvlist_lookup_uint8(nvl, name, &rv)); + return (rv); +} + +uint16_t +fnvlist_lookup_uint16(nvlist_t *nvl, const char *name) +{ + uint16_t rv; + VERIFY0(nvlist_lookup_uint16(nvl, name, &rv)); + return (rv); +} + +uint32_t +fnvlist_lookup_uint32(nvlist_t *nvl, const char *name) +{ + uint32_t rv; + VERIFY0(nvlist_lookup_uint32(nvl, name, &rv)); + return (rv); +} + +uint64_t +fnvlist_lookup_uint64(nvlist_t *nvl, const char *name) +{ + uint64_t rv; + VERIFY0(nvlist_lookup_uint64(nvl, name, &rv)); + return (rv); +} + +char * +fnvlist_lookup_string(nvlist_t *nvl, const char *name) +{ + char *rv; + VERIFY0(nvlist_lookup_string(nvl, name, &rv)); + return (rv); +} + +nvlist_t * +fnvlist_lookup_nvlist(nvlist_t *nvl, const char *name) +{ + nvlist_t *rv; + VERIFY0(nvlist_lookup_nvlist(nvl, name, &rv)); + return (rv); +} + +boolean_t +fnvpair_value_boolean_value(nvpair_t *nvp) +{ + boolean_t rv; + VERIFY0(nvpair_value_boolean_value(nvp, &rv)); + return (rv); +} + +uchar_t +fnvpair_value_byte(nvpair_t *nvp) +{ + uchar_t rv; + VERIFY0(nvpair_value_byte(nvp, &rv)); + return (rv); +} + +int8_t +fnvpair_value_int8(nvpair_t *nvp) +{ + int8_t rv; + VERIFY0(nvpair_value_int8(nvp, &rv)); + return (rv); +} + +int16_t +fnvpair_value_int16(nvpair_t *nvp) +{ + int16_t rv; + VERIFY0(nvpair_value_int16(nvp, &rv)); + return (rv); +} + +int32_t +fnvpair_value_int32(nvpair_t *nvp) +{ + int32_t rv; + VERIFY0(nvpair_value_int32(nvp, &rv)); + return (rv); +} + +int64_t +fnvpair_value_int64(nvpair_t *nvp) +{ + int64_t rv; + VERIFY0(nvpair_value_int64(nvp, &rv)); + return (rv); +} + +uint8_t +fnvpair_value_uint8(nvpair_t *nvp) +{ + uint8_t rv; + VERIFY0(nvpair_value_uint8(nvp, &rv)); + return (rv); +} + +uint16_t +fnvpair_value_uint16(nvpair_t *nvp) +{ + uint16_t rv; + VERIFY0(nvpair_value_uint16(nvp, &rv)); + return (rv); +} + +uint32_t +fnvpair_value_uint32(nvpair_t *nvp) +{ + uint32_t rv; + VERIFY0(nvpair_value_uint32(nvp, &rv)); + return (rv); +} + +uint64_t +fnvpair_value_uint64(nvpair_t *nvp) +{ + uint64_t rv; + VERIFY0(nvpair_value_uint64(nvp, &rv)); + return (rv); +} + +char * +fnvpair_value_string(nvpair_t *nvp) +{ + char *rv; + VERIFY0(nvpair_value_string(nvp, &rv)); + return (rv); +} + +nvlist_t * +fnvpair_value_nvlist(nvpair_t *nvp) +{ + nvlist_t *rv; + VERIFY0(nvpair_value_nvlist(nvp, &rv)); + return (rv); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) + +EXPORT_SYMBOL(fnvlist_alloc); +EXPORT_SYMBOL(fnvlist_free); +EXPORT_SYMBOL(fnvlist_size); +EXPORT_SYMBOL(fnvlist_pack); +EXPORT_SYMBOL(fnvlist_pack_free); +EXPORT_SYMBOL(fnvlist_unpack); +EXPORT_SYMBOL(fnvlist_dup); +EXPORT_SYMBOL(fnvlist_merge); + +EXPORT_SYMBOL(fnvlist_add_nvpair); +EXPORT_SYMBOL(fnvlist_add_boolean); +EXPORT_SYMBOL(fnvlist_add_boolean_value); +EXPORT_SYMBOL(fnvlist_add_byte); +EXPORT_SYMBOL(fnvlist_add_int8); +EXPORT_SYMBOL(fnvlist_add_uint8); +EXPORT_SYMBOL(fnvlist_add_int16); +EXPORT_SYMBOL(fnvlist_add_uint16); +EXPORT_SYMBOL(fnvlist_add_int32); +EXPORT_SYMBOL(fnvlist_add_uint32); +EXPORT_SYMBOL(fnvlist_add_int64); +EXPORT_SYMBOL(fnvlist_add_uint64); +EXPORT_SYMBOL(fnvlist_add_string); +EXPORT_SYMBOL(fnvlist_add_nvlist); +EXPORT_SYMBOL(fnvlist_add_boolean_array); +EXPORT_SYMBOL(fnvlist_add_byte_array); +EXPORT_SYMBOL(fnvlist_add_int8_array); +EXPORT_SYMBOL(fnvlist_add_uint8_array); +EXPORT_SYMBOL(fnvlist_add_int16_array); +EXPORT_SYMBOL(fnvlist_add_uint16_array); +EXPORT_SYMBOL(fnvlist_add_int32_array); +EXPORT_SYMBOL(fnvlist_add_uint32_array); +EXPORT_SYMBOL(fnvlist_add_int64_array); +EXPORT_SYMBOL(fnvlist_add_uint64_array); +EXPORT_SYMBOL(fnvlist_add_string_array); +EXPORT_SYMBOL(fnvlist_add_nvlist_array); + +EXPORT_SYMBOL(fnvlist_remove); +EXPORT_SYMBOL(fnvlist_remove_nvpair); + +EXPORT_SYMBOL(fnvlist_lookup_nvpair); +EXPORT_SYMBOL(fnvlist_lookup_boolean); +EXPORT_SYMBOL(fnvlist_lookup_boolean_value); +EXPORT_SYMBOL(fnvlist_lookup_byte); +EXPORT_SYMBOL(fnvlist_lookup_int8); +EXPORT_SYMBOL(fnvlist_lookup_uint8); +EXPORT_SYMBOL(fnvlist_lookup_int16); +EXPORT_SYMBOL(fnvlist_lookup_uint16); +EXPORT_SYMBOL(fnvlist_lookup_int32); +EXPORT_SYMBOL(fnvlist_lookup_uint32); +EXPORT_SYMBOL(fnvlist_lookup_int64); +EXPORT_SYMBOL(fnvlist_lookup_uint64); +EXPORT_SYMBOL(fnvlist_lookup_string); +EXPORT_SYMBOL(fnvlist_lookup_nvlist); + +EXPORT_SYMBOL(fnvpair_value_boolean_value); +EXPORT_SYMBOL(fnvpair_value_byte); +EXPORT_SYMBOL(fnvpair_value_int8); +EXPORT_SYMBOL(fnvpair_value_uint8); +EXPORT_SYMBOL(fnvpair_value_int16); +EXPORT_SYMBOL(fnvpair_value_uint16); +EXPORT_SYMBOL(fnvpair_value_int32); +EXPORT_SYMBOL(fnvpair_value_uint32); +EXPORT_SYMBOL(fnvpair_value_int64); +EXPORT_SYMBOL(fnvpair_value_uint64); +EXPORT_SYMBOL(fnvpair_value_string); +EXPORT_SYMBOL(fnvpair_value_nvlist); +EXPORT_SYMBOL(fnvlist_num_pairs); + +#endif --- linux-aws-4.15.0.orig/zfs/module/nvpair/nvpair.c +++ linux-aws-4.15.0/zfs/module/nvpair/nvpair.c @@ -0,0 +1,3451 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(_KERNEL) && !defined(_BOOT) +#include +#include +#include +#else +#include +#include +#include +#include +#endif + +#ifndef offsetof +#define offsetof(s, m) ((size_t)(&(((s *)0)->m))) +#endif +#define skip_whitespace(p) while ((*(p) == ' ') || (*(p) == '\t')) p++ + +/* + * nvpair.c - Provides kernel & userland interfaces for manipulating + * name-value pairs. + * + * Overview Diagram + * + * +--------------+ + * | nvlist_t | + * |--------------| + * | nvl_version | + * | nvl_nvflag | + * | nvl_priv -+-+ + * | nvl_flag | | + * | nvl_pad | | + * +--------------+ | + * V + * +--------------+ last i_nvp in list + * | nvpriv_t | +---------------------> + * |--------------| | + * +--+- nvp_list | | +------------+ + * | | nvp_last -+--+ + nv_alloc_t | + * | | nvp_curr | |------------| + * | | nvp_nva -+----> | nva_ops | + * | | nvp_stat | | nva_arg | + * | +--------------+ +------------+ + * | + * +-------+ + * V + * +---------------------+ +-------------------+ + * | i_nvp_t | +-->| i_nvp_t | +--> + * |---------------------| | |-------------------| | + * | nvi_next -+--+ | nvi_next -+--+ + * | nvi_prev (NULL) | <----+ nvi_prev | + * | . . . . . . . . . . | | . . . . . . . . . | + * | nvp (nvpair_t) | | nvp (nvpair_t) | + * | - nvp_size | | - nvp_size | + * | - nvp_name_sz | | - nvp_name_sz | + * | - nvp_value_elem | | - nvp_value_elem | + * | - nvp_type | | - nvp_type | + * | - data ... | | - data ... | + * +---------------------+ +-------------------+ + * + * + * + * +---------------------+ +---------------------+ + * | i_nvp_t | +--> +-->| i_nvp_t (last) | + * |---------------------| | | |---------------------| + * | nvi_next -+--+ ... --+ | nvi_next (NULL) | + * <-+- nvi_prev |<-- ... <----+ nvi_prev | + * | . . . . . . . . . | | . . . . . . . . . | + * | nvp (nvpair_t) | | nvp (nvpair_t) | + * | - nvp_size | | - nvp_size | + * | - nvp_name_sz | | - nvp_name_sz | + * | - nvp_value_elem | | - nvp_value_elem | + * | - DATA_TYPE_NVLIST | | - nvp_type | + * | - data (embedded) | | - data ... | + * | nvlist name | +---------------------+ + * | +--------------+ | + * | | nvlist_t | | + * | |--------------| | + * | | nvl_version | | + * | | nvl_nvflag | | + * | | nvl_priv --+---+----> + * | | nvl_flag | | + * | | nvl_pad | | + * | +--------------+ | + * +---------------------+ + * + * + * N.B. nvpair_t may be aligned on 4 byte boundary, so +4 will + * allow value to be aligned on 8 byte boundary + * + * name_len is the length of the name string including the null terminator + * so it must be >= 1 + */ +#define NVP_SIZE_CALC(name_len, data_len) \ + (NV_ALIGN((sizeof (nvpair_t)) + name_len) + NV_ALIGN(data_len)) + +static int i_get_value_size(data_type_t type, const void *data, uint_t nelem); +static int nvlist_add_common(nvlist_t *nvl, const char *name, data_type_t type, + uint_t nelem, const void *data); + +#define NV_STAT_EMBEDDED 0x1 +#define EMBEDDED_NVL(nvp) ((nvlist_t *)(void *)NVP_VALUE(nvp)) +#define EMBEDDED_NVL_ARRAY(nvp) ((nvlist_t **)(void *)NVP_VALUE(nvp)) + +#define NVP_VALOFF(nvp) (NV_ALIGN(sizeof (nvpair_t) + (nvp)->nvp_name_sz)) +#define NVPAIR2I_NVP(nvp) \ + ((i_nvp_t *)((size_t)(nvp) - offsetof(i_nvp_t, nvi_nvp))) + +#ifdef _KERNEL +int nvpair_max_recursion = 20; +#else +int nvpair_max_recursion = 100; +#endif + +int +nv_alloc_init(nv_alloc_t *nva, const nv_alloc_ops_t *nvo, /* args */ ...) +{ + va_list valist; + int err = 0; + + nva->nva_ops = nvo; + nva->nva_arg = NULL; + + va_start(valist, nvo); + if (nva->nva_ops->nv_ao_init != NULL) + err = nva->nva_ops->nv_ao_init(nva, valist); + va_end(valist); + + return (err); +} + +void +nv_alloc_reset(nv_alloc_t *nva) +{ + if (nva->nva_ops->nv_ao_reset != NULL) + nva->nva_ops->nv_ao_reset(nva); +} + +void +nv_alloc_fini(nv_alloc_t *nva) +{ + if (nva->nva_ops->nv_ao_fini != NULL) + nva->nva_ops->nv_ao_fini(nva); +} + +nv_alloc_t * +nvlist_lookup_nv_alloc(nvlist_t *nvl) +{ + nvpriv_t *priv; + + if (nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (NULL); + + return (priv->nvp_nva); +} + +static void * +nv_mem_zalloc(nvpriv_t *nvp, size_t size) +{ + nv_alloc_t *nva = nvp->nvp_nva; + void *buf; + + if ((buf = nva->nva_ops->nv_ao_alloc(nva, size)) != NULL) + bzero(buf, size); + + return (buf); +} + +static void +nv_mem_free(nvpriv_t *nvp, void *buf, size_t size) +{ + nv_alloc_t *nva = nvp->nvp_nva; + + nva->nva_ops->nv_ao_free(nva, buf, size); +} + +static void +nv_priv_init(nvpriv_t *priv, nv_alloc_t *nva, uint32_t stat) +{ + bzero(priv, sizeof (nvpriv_t)); + + priv->nvp_nva = nva; + priv->nvp_stat = stat; +} + +static nvpriv_t * +nv_priv_alloc(nv_alloc_t *nva) +{ + nvpriv_t *priv; + + /* + * nv_mem_alloc() cannot called here because it needs the priv + * argument. + */ + if ((priv = nva->nva_ops->nv_ao_alloc(nva, sizeof (nvpriv_t))) == NULL) + return (NULL); + + nv_priv_init(priv, nva, 0); + + return (priv); +} + +/* + * Embedded lists need their own nvpriv_t's. We create a new + * nvpriv_t using the parameters and allocator from the parent + * list's nvpriv_t. + */ +static nvpriv_t * +nv_priv_alloc_embedded(nvpriv_t *priv) +{ + nvpriv_t *emb_priv; + + if ((emb_priv = nv_mem_zalloc(priv, sizeof (nvpriv_t))) == NULL) + return (NULL); + + nv_priv_init(emb_priv, priv->nvp_nva, NV_STAT_EMBEDDED); + + return (emb_priv); +} + +static void +nvlist_init(nvlist_t *nvl, uint32_t nvflag, nvpriv_t *priv) +{ + nvl->nvl_version = NV_VERSION; + nvl->nvl_nvflag = nvflag & (NV_UNIQUE_NAME|NV_UNIQUE_NAME_TYPE); + nvl->nvl_priv = (uint64_t)(uintptr_t)priv; + nvl->nvl_flag = 0; + nvl->nvl_pad = 0; +} + +uint_t +nvlist_nvflag(nvlist_t *nvl) +{ + return (nvl->nvl_nvflag); +} + +static nv_alloc_t * +nvlist_nv_alloc(int kmflag) +{ +#if defined(_KERNEL) && !defined(_BOOT) + switch (kmflag) { + case KM_SLEEP: + return (nv_alloc_sleep); + case KM_PUSHPAGE: + return (nv_alloc_pushpage); + default: + return (nv_alloc_nosleep); + } +#else + return (nv_alloc_nosleep); +#endif /* _KERNEL && !_BOOT */ +} + +/* + * nvlist_alloc - Allocate nvlist. + */ +int +nvlist_alloc(nvlist_t **nvlp, uint_t nvflag, int kmflag) +{ + return (nvlist_xalloc(nvlp, nvflag, nvlist_nv_alloc(kmflag))); +} + +int +nvlist_xalloc(nvlist_t **nvlp, uint_t nvflag, nv_alloc_t *nva) +{ + nvpriv_t *priv; + + if (nvlp == NULL || nva == NULL) + return (EINVAL); + + if ((priv = nv_priv_alloc(nva)) == NULL) + return (ENOMEM); + + if ((*nvlp = nv_mem_zalloc(priv, + NV_ALIGN(sizeof (nvlist_t)))) == NULL) { + nv_mem_free(priv, priv, sizeof (nvpriv_t)); + return (ENOMEM); + } + + nvlist_init(*nvlp, nvflag, priv); + + return (0); +} + +/* + * nvp_buf_alloc - Allocate i_nvp_t for storing a new nv pair. + */ +static nvpair_t * +nvp_buf_alloc(nvlist_t *nvl, size_t len) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *buf; + nvpair_t *nvp; + size_t nvsize; + + /* + * Allocate the buffer + */ + nvsize = len + offsetof(i_nvp_t, nvi_nvp); + + if ((buf = nv_mem_zalloc(priv, nvsize)) == NULL) + return (NULL); + + nvp = &buf->nvi_nvp; + nvp->nvp_size = len; + + return (nvp); +} + +/* + * nvp_buf_free - de-Allocate an i_nvp_t. + */ +static void +nvp_buf_free(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + size_t nvsize = nvp->nvp_size + offsetof(i_nvp_t, nvi_nvp); + + nv_mem_free(priv, NVPAIR2I_NVP(nvp), nvsize); +} + +/* + * nvp_buf_link - link a new nv pair into the nvlist. + */ +static void +nvp_buf_link(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *curr = NVPAIR2I_NVP(nvp); + + /* Put element at end of nvlist */ + if (priv->nvp_list == NULL) { + priv->nvp_list = priv->nvp_last = curr; + } else { + curr->nvi_prev = priv->nvp_last; + priv->nvp_last->nvi_next = curr; + priv->nvp_last = curr; + } +} + +/* + * nvp_buf_unlink - unlink an removed nvpair out of the nvlist. + */ +static void +nvp_buf_unlink(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *curr = NVPAIR2I_NVP(nvp); + + /* + * protect nvlist_next_nvpair() against walking on freed memory. + */ + if (priv->nvp_curr == curr) + priv->nvp_curr = curr->nvi_next; + + if (curr == priv->nvp_list) + priv->nvp_list = curr->nvi_next; + else + curr->nvi_prev->nvi_next = curr->nvi_next; + + if (curr == priv->nvp_last) + priv->nvp_last = curr->nvi_prev; + else + curr->nvi_next->nvi_prev = curr->nvi_prev; +} + +/* + * take a nvpair type and number of elements and make sure the are valid + */ +static int +i_validate_type_nelem(data_type_t type, uint_t nelem) +{ + switch (type) { + case DATA_TYPE_BOOLEAN: + if (nelem != 0) + return (EINVAL); + break; + case DATA_TYPE_BOOLEAN_VALUE: + case DATA_TYPE_BYTE: + case DATA_TYPE_INT8: + case DATA_TYPE_UINT8: + case DATA_TYPE_INT16: + case DATA_TYPE_UINT16: + case DATA_TYPE_INT32: + case DATA_TYPE_UINT32: + case DATA_TYPE_INT64: + case DATA_TYPE_UINT64: + case DATA_TYPE_STRING: + case DATA_TYPE_HRTIME: + case DATA_TYPE_NVLIST: +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: +#endif + if (nelem != 1) + return (EINVAL); + break; + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_BYTE_ARRAY: + case DATA_TYPE_INT8_ARRAY: + case DATA_TYPE_UINT8_ARRAY: + case DATA_TYPE_INT16_ARRAY: + case DATA_TYPE_UINT16_ARRAY: + case DATA_TYPE_INT32_ARRAY: + case DATA_TYPE_UINT32_ARRAY: + case DATA_TYPE_INT64_ARRAY: + case DATA_TYPE_UINT64_ARRAY: + case DATA_TYPE_STRING_ARRAY: + case DATA_TYPE_NVLIST_ARRAY: + /* we allow arrays with 0 elements */ + break; + default: + return (EINVAL); + } + return (0); +} + +/* + * Verify nvp_name_sz and check the name string length. + */ +static int +i_validate_nvpair_name(nvpair_t *nvp) +{ + if ((nvp->nvp_name_sz <= 0) || + (nvp->nvp_size < NVP_SIZE_CALC(nvp->nvp_name_sz, 0))) + return (EFAULT); + + /* verify the name string, make sure its terminated */ + if (NVP_NAME(nvp)[nvp->nvp_name_sz - 1] != '\0') + return (EFAULT); + + return (strlen(NVP_NAME(nvp)) == nvp->nvp_name_sz - 1 ? 0 : EFAULT); +} + +static int +i_validate_nvpair_value(data_type_t type, uint_t nelem, const void *data) +{ + switch (type) { + case DATA_TYPE_BOOLEAN_VALUE: + if (*(boolean_t *)data != B_TRUE && + *(boolean_t *)data != B_FALSE) + return (EINVAL); + break; + case DATA_TYPE_BOOLEAN_ARRAY: { + int i; + + for (i = 0; i < nelem; i++) + if (((boolean_t *)data)[i] != B_TRUE && + ((boolean_t *)data)[i] != B_FALSE) + return (EINVAL); + break; + } + default: + break; + } + + return (0); +} + +/* + * This function takes a pointer to what should be a nvpair and it's size + * and then verifies that all the nvpair fields make sense and can be + * trusted. This function is used when decoding packed nvpairs. + */ +static int +i_validate_nvpair(nvpair_t *nvp) +{ + data_type_t type = NVP_TYPE(nvp); + int size1, size2; + + /* verify nvp_name_sz, check the name string length */ + if (i_validate_nvpair_name(nvp) != 0) + return (EFAULT); + + if (i_validate_nvpair_value(type, NVP_NELEM(nvp), NVP_VALUE(nvp)) != 0) + return (EFAULT); + + /* + * verify nvp_type, nvp_value_elem, and also possibly + * verify string values and get the value size. + */ + size2 = i_get_value_size(type, NVP_VALUE(nvp), NVP_NELEM(nvp)); + size1 = nvp->nvp_size - NVP_VALOFF(nvp); + if (size2 < 0 || size1 != NV_ALIGN(size2)) + return (EFAULT); + + return (0); +} + +static int +nvlist_copy_pairs(nvlist_t *snvl, nvlist_t *dnvl) +{ + nvpriv_t *priv; + i_nvp_t *curr; + + if ((priv = (nvpriv_t *)(uintptr_t)snvl->nvl_priv) == NULL) + return (EINVAL); + + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) { + nvpair_t *nvp = &curr->nvi_nvp; + int err; + + if ((err = nvlist_add_common(dnvl, NVP_NAME(nvp), NVP_TYPE(nvp), + NVP_NELEM(nvp), NVP_VALUE(nvp))) != 0) + return (err); + } + + return (0); +} + +/* + * Frees all memory allocated for an nvpair (like embedded lists) with + * the exception of the nvpair buffer itself. + */ +static void +nvpair_free(nvpair_t *nvp) +{ + switch (NVP_TYPE(nvp)) { + case DATA_TYPE_NVLIST: + nvlist_free(EMBEDDED_NVL(nvp)); + break; + case DATA_TYPE_NVLIST_ARRAY: { + nvlist_t **nvlp = EMBEDDED_NVL_ARRAY(nvp); + int i; + + for (i = 0; i < NVP_NELEM(nvp); i++) + if (nvlp[i] != NULL) + nvlist_free(nvlp[i]); + break; + } + default: + break; + } +} + +/* + * nvlist_free - free an unpacked nvlist + */ +void +nvlist_free(nvlist_t *nvl) +{ + nvpriv_t *priv; + i_nvp_t *curr; + + if (nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return; + + /* + * Unpacked nvlist are linked through i_nvp_t + */ + curr = priv->nvp_list; + while (curr != NULL) { + nvpair_t *nvp = &curr->nvi_nvp; + curr = curr->nvi_next; + + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + } + + if (!(priv->nvp_stat & NV_STAT_EMBEDDED)) + nv_mem_free(priv, nvl, NV_ALIGN(sizeof (nvlist_t))); + else + nvl->nvl_priv = 0; + + nv_mem_free(priv, priv, sizeof (nvpriv_t)); +} + +static int +nvlist_contains_nvp(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *curr; + + if (nvp == NULL) + return (0); + + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) + if (&curr->nvi_nvp == nvp) + return (1); + + return (0); +} + +/* + * Make a copy of nvlist + */ +int +nvlist_dup(nvlist_t *nvl, nvlist_t **nvlp, int kmflag) +{ + return (nvlist_xdup(nvl, nvlp, nvlist_nv_alloc(kmflag))); +} + +int +nvlist_xdup(nvlist_t *nvl, nvlist_t **nvlp, nv_alloc_t *nva) +{ + int err; + nvlist_t *ret; + + if (nvl == NULL || nvlp == NULL) + return (EINVAL); + + if ((err = nvlist_xalloc(&ret, nvl->nvl_nvflag, nva)) != 0) + return (err); + + if ((err = nvlist_copy_pairs(nvl, ret)) != 0) + nvlist_free(ret); + else + *nvlp = ret; + + return (err); +} + +/* + * Remove all with matching name + */ +int +nvlist_remove_all(nvlist_t *nvl, const char *name) +{ + nvpriv_t *priv; + i_nvp_t *curr; + int error = ENOENT; + + if (nvl == NULL || name == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (EINVAL); + + curr = priv->nvp_list; + while (curr != NULL) { + nvpair_t *nvp = &curr->nvi_nvp; + + curr = curr->nvi_next; + if (strcmp(name, NVP_NAME(nvp)) != 0) + continue; + + nvp_buf_unlink(nvl, nvp); + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + + error = 0; + } + + return (error); +} + +/* + * Remove first one with matching name and type + */ +int +nvlist_remove(nvlist_t *nvl, const char *name, data_type_t type) +{ + nvpriv_t *priv; + i_nvp_t *curr; + + if (nvl == NULL || name == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (EINVAL); + + curr = priv->nvp_list; + while (curr != NULL) { + nvpair_t *nvp = &curr->nvi_nvp; + + if (strcmp(name, NVP_NAME(nvp)) == 0 && NVP_TYPE(nvp) == type) { + nvp_buf_unlink(nvl, nvp); + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + + return (0); + } + curr = curr->nvi_next; + } + + return (ENOENT); +} + +int +nvlist_remove_nvpair(nvlist_t *nvl, nvpair_t *nvp) +{ + if (nvl == NULL || nvp == NULL) + return (EINVAL); + + nvp_buf_unlink(nvl, nvp); + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + return (0); +} + +/* + * This function calculates the size of an nvpair value. + * + * The data argument controls the behavior in case of the data types + * DATA_TYPE_STRING and + * DATA_TYPE_STRING_ARRAY + * Is data == NULL then the size of the string(s) is excluded. + */ +static int +i_get_value_size(data_type_t type, const void *data, uint_t nelem) +{ + uint64_t value_sz; + + if (i_validate_type_nelem(type, nelem) != 0) + return (-1); + + /* Calculate required size for holding value */ + switch (type) { + case DATA_TYPE_BOOLEAN: + value_sz = 0; + break; + case DATA_TYPE_BOOLEAN_VALUE: + value_sz = sizeof (boolean_t); + break; + case DATA_TYPE_BYTE: + value_sz = sizeof (uchar_t); + break; + case DATA_TYPE_INT8: + value_sz = sizeof (int8_t); + break; + case DATA_TYPE_UINT8: + value_sz = sizeof (uint8_t); + break; + case DATA_TYPE_INT16: + value_sz = sizeof (int16_t); + break; + case DATA_TYPE_UINT16: + value_sz = sizeof (uint16_t); + break; + case DATA_TYPE_INT32: + value_sz = sizeof (int32_t); + break; + case DATA_TYPE_UINT32: + value_sz = sizeof (uint32_t); + break; + case DATA_TYPE_INT64: + value_sz = sizeof (int64_t); + break; + case DATA_TYPE_UINT64: + value_sz = sizeof (uint64_t); + break; +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: + value_sz = sizeof (double); + break; +#endif + case DATA_TYPE_STRING: + if (data == NULL) + value_sz = 0; + else + value_sz = strlen(data) + 1; + break; + case DATA_TYPE_BOOLEAN_ARRAY: + value_sz = (uint64_t)nelem * sizeof (boolean_t); + break; + case DATA_TYPE_BYTE_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uchar_t); + break; + case DATA_TYPE_INT8_ARRAY: + value_sz = (uint64_t)nelem * sizeof (int8_t); + break; + case DATA_TYPE_UINT8_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint8_t); + break; + case DATA_TYPE_INT16_ARRAY: + value_sz = (uint64_t)nelem * sizeof (int16_t); + break; + case DATA_TYPE_UINT16_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint16_t); + break; + case DATA_TYPE_INT32_ARRAY: + value_sz = (uint64_t)nelem * sizeof (int32_t); + break; + case DATA_TYPE_UINT32_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint32_t); + break; + case DATA_TYPE_INT64_ARRAY: + value_sz = (uint64_t)nelem * sizeof (int64_t); + break; + case DATA_TYPE_UINT64_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint64_t); + break; + case DATA_TYPE_STRING_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint64_t); + + if (data != NULL) { + char *const *strs = data; + uint_t i; + + /* no alignment requirement for strings */ + for (i = 0; i < nelem; i++) { + if (strs[i] == NULL) + return (-1); + value_sz += strlen(strs[i]) + 1; + } + } + break; + case DATA_TYPE_HRTIME: + value_sz = sizeof (hrtime_t); + break; + case DATA_TYPE_NVLIST: + value_sz = NV_ALIGN(sizeof (nvlist_t)); + break; + case DATA_TYPE_NVLIST_ARRAY: + value_sz = (uint64_t)nelem * sizeof (uint64_t) + + (uint64_t)nelem * NV_ALIGN(sizeof (nvlist_t)); + break; + default: + return (-1); + } + + return (value_sz > INT32_MAX ? -1 : (int)value_sz); +} + +static int +nvlist_copy_embedded(nvlist_t *nvl, nvlist_t *onvl, nvlist_t *emb_nvl) +{ + nvpriv_t *priv; + int err; + + if ((priv = nv_priv_alloc_embedded((nvpriv_t *)(uintptr_t) + nvl->nvl_priv)) == NULL) + return (ENOMEM); + + nvlist_init(emb_nvl, onvl->nvl_nvflag, priv); + + if ((err = nvlist_copy_pairs(onvl, emb_nvl)) != 0) { + nvlist_free(emb_nvl); + emb_nvl->nvl_priv = 0; + } + + return (err); +} + +/* + * nvlist_add_common - Add new pair to nvlist + */ +static int +nvlist_add_common(nvlist_t *nvl, const char *name, + data_type_t type, uint_t nelem, const void *data) +{ + nvpair_t *nvp; + uint_t i; + + int nvp_sz, name_sz, value_sz; + int err = 0; + + if (name == NULL || nvl == NULL || nvl->nvl_priv == 0) + return (EINVAL); + + if (nelem != 0 && data == NULL) + return (EINVAL); + + /* + * Verify type and nelem and get the value size. + * In case of data types DATA_TYPE_STRING and DATA_TYPE_STRING_ARRAY + * is the size of the string(s) included. + */ + if ((value_sz = i_get_value_size(type, data, nelem)) < 0) + return (EINVAL); + + if (i_validate_nvpair_value(type, nelem, data) != 0) + return (EINVAL); + + /* + * If we're adding an nvlist or nvlist array, ensure that we are not + * adding the input nvlist to itself, which would cause recursion, + * and ensure that no NULL nvlist pointers are present. + */ + switch (type) { + case DATA_TYPE_NVLIST: + if (data == nvl || data == NULL) + return (EINVAL); + break; + case DATA_TYPE_NVLIST_ARRAY: { + nvlist_t **onvlp = (nvlist_t **)data; + for (i = 0; i < nelem; i++) { + if (onvlp[i] == nvl || onvlp[i] == NULL) + return (EINVAL); + } + break; + } + default: + break; + } + + /* calculate sizes of the nvpair elements and the nvpair itself */ + name_sz = strlen(name) + 1; + + nvp_sz = NVP_SIZE_CALC(name_sz, value_sz); + + if ((nvp = nvp_buf_alloc(nvl, nvp_sz)) == NULL) + return (ENOMEM); + + ASSERT(nvp->nvp_size == nvp_sz); + nvp->nvp_name_sz = name_sz; + nvp->nvp_value_elem = nelem; + nvp->nvp_type = type; + bcopy(name, NVP_NAME(nvp), name_sz); + + switch (type) { + case DATA_TYPE_BOOLEAN: + break; + case DATA_TYPE_STRING_ARRAY: { + char *const *strs = data; + char *buf = NVP_VALUE(nvp); + char **cstrs = (void *)buf; + + /* skip pre-allocated space for pointer array */ + buf += nelem * sizeof (uint64_t); + for (i = 0; i < nelem; i++) { + int slen = strlen(strs[i]) + 1; + bcopy(strs[i], buf, slen); + cstrs[i] = buf; + buf += slen; + } + break; + } + case DATA_TYPE_NVLIST: { + nvlist_t *nnvl = EMBEDDED_NVL(nvp); + nvlist_t *onvl = (nvlist_t *)data; + + if ((err = nvlist_copy_embedded(nvl, onvl, nnvl)) != 0) { + nvp_buf_free(nvl, nvp); + return (err); + } + break; + } + case DATA_TYPE_NVLIST_ARRAY: { + nvlist_t **onvlp = (nvlist_t **)data; + nvlist_t **nvlp = EMBEDDED_NVL_ARRAY(nvp); + nvlist_t *embedded = (nvlist_t *) + ((uintptr_t)nvlp + nelem * sizeof (uint64_t)); + + for (i = 0; i < nelem; i++) { + if ((err = nvlist_copy_embedded(nvl, + onvlp[i], embedded)) != 0) { + /* + * Free any successfully created lists + */ + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + return (err); + } + + nvlp[i] = embedded++; + } + break; + } + default: + bcopy(data, NVP_VALUE(nvp), value_sz); + } + + /* if unique name, remove before add */ + if (nvl->nvl_nvflag & NV_UNIQUE_NAME) + (void) nvlist_remove_all(nvl, name); + else if (nvl->nvl_nvflag & NV_UNIQUE_NAME_TYPE) + (void) nvlist_remove(nvl, name, type); + + nvp_buf_link(nvl, nvp); + + return (0); +} + +int +nvlist_add_boolean(nvlist_t *nvl, const char *name) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_BOOLEAN, 0, NULL)); +} + +int +nvlist_add_boolean_value(nvlist_t *nvl, const char *name, boolean_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_BOOLEAN_VALUE, 1, &val)); +} + +int +nvlist_add_byte(nvlist_t *nvl, const char *name, uchar_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_BYTE, 1, &val)); +} + +int +nvlist_add_int8(nvlist_t *nvl, const char *name, int8_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT8, 1, &val)); +} + +int +nvlist_add_uint8(nvlist_t *nvl, const char *name, uint8_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT8, 1, &val)); +} + +int +nvlist_add_int16(nvlist_t *nvl, const char *name, int16_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT16, 1, &val)); +} + +int +nvlist_add_uint16(nvlist_t *nvl, const char *name, uint16_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT16, 1, &val)); +} + +int +nvlist_add_int32(nvlist_t *nvl, const char *name, int32_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT32, 1, &val)); +} + +int +nvlist_add_uint32(nvlist_t *nvl, const char *name, uint32_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT32, 1, &val)); +} + +int +nvlist_add_int64(nvlist_t *nvl, const char *name, int64_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT64, 1, &val)); +} + +int +nvlist_add_uint64(nvlist_t *nvl, const char *name, uint64_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT64, 1, &val)); +} + +#if !defined(_KERNEL) +int +nvlist_add_double(nvlist_t *nvl, const char *name, double val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_DOUBLE, 1, &val)); +} +#endif + +int +nvlist_add_string(nvlist_t *nvl, const char *name, const char *val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_STRING, 1, (void *)val)); +} + +int +nvlist_add_boolean_array(nvlist_t *nvl, const char *name, + boolean_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_BOOLEAN_ARRAY, n, a)); +} + +int +nvlist_add_byte_array(nvlist_t *nvl, const char *name, uchar_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_BYTE_ARRAY, n, a)); +} + +int +nvlist_add_int8_array(nvlist_t *nvl, const char *name, int8_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT8_ARRAY, n, a)); +} + +int +nvlist_add_uint8_array(nvlist_t *nvl, const char *name, uint8_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT8_ARRAY, n, a)); +} + +int +nvlist_add_int16_array(nvlist_t *nvl, const char *name, int16_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT16_ARRAY, n, a)); +} + +int +nvlist_add_uint16_array(nvlist_t *nvl, const char *name, uint16_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT16_ARRAY, n, a)); +} + +int +nvlist_add_int32_array(nvlist_t *nvl, const char *name, int32_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT32_ARRAY, n, a)); +} + +int +nvlist_add_uint32_array(nvlist_t *nvl, const char *name, uint32_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT32_ARRAY, n, a)); +} + +int +nvlist_add_int64_array(nvlist_t *nvl, const char *name, int64_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_INT64_ARRAY, n, a)); +} + +int +nvlist_add_uint64_array(nvlist_t *nvl, const char *name, uint64_t *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_UINT64_ARRAY, n, a)); +} + +int +nvlist_add_string_array(nvlist_t *nvl, const char *name, + char *const *a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_STRING_ARRAY, n, a)); +} + +int +nvlist_add_hrtime(nvlist_t *nvl, const char *name, hrtime_t val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_HRTIME, 1, &val)); +} + +int +nvlist_add_nvlist(nvlist_t *nvl, const char *name, nvlist_t *val) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_NVLIST, 1, val)); +} + +int +nvlist_add_nvlist_array(nvlist_t *nvl, const char *name, nvlist_t **a, uint_t n) +{ + return (nvlist_add_common(nvl, name, DATA_TYPE_NVLIST_ARRAY, n, a)); +} + +/* reading name-value pairs */ +nvpair_t * +nvlist_next_nvpair(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv; + i_nvp_t *curr; + + if (nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (NULL); + + curr = NVPAIR2I_NVP(nvp); + + /* + * Ensure that nvp is a valid nvpair on this nvlist. + * NB: nvp_curr is used only as a hint so that we don't always + * have to walk the list to determine if nvp is still on the list. + */ + if (nvp == NULL) + curr = priv->nvp_list; + else if (priv->nvp_curr == curr || nvlist_contains_nvp(nvl, nvp)) + curr = curr->nvi_next; + else + curr = NULL; + + priv->nvp_curr = curr; + + return (curr != NULL ? &curr->nvi_nvp : NULL); +} + +nvpair_t * +nvlist_prev_nvpair(nvlist_t *nvl, nvpair_t *nvp) +{ + nvpriv_t *priv; + i_nvp_t *curr; + + if (nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (NULL); + + curr = NVPAIR2I_NVP(nvp); + + if (nvp == NULL) + curr = priv->nvp_last; + else if (priv->nvp_curr == curr || nvlist_contains_nvp(nvl, nvp)) + curr = curr->nvi_prev; + else + curr = NULL; + + priv->nvp_curr = curr; + + return (curr != NULL ? &curr->nvi_nvp : NULL); +} + +boolean_t +nvlist_empty(nvlist_t *nvl) +{ + nvpriv_t *priv; + + if (nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (B_TRUE); + + return (priv->nvp_list == NULL); +} + +char * +nvpair_name(nvpair_t *nvp) +{ + return (NVP_NAME(nvp)); +} + +data_type_t +nvpair_type(nvpair_t *nvp) +{ + return (NVP_TYPE(nvp)); +} + +int +nvpair_type_is_array(nvpair_t *nvp) +{ + data_type_t type = NVP_TYPE(nvp); + + if ((type == DATA_TYPE_BYTE_ARRAY) || + (type == DATA_TYPE_UINT8_ARRAY) || + (type == DATA_TYPE_INT16_ARRAY) || + (type == DATA_TYPE_UINT16_ARRAY) || + (type == DATA_TYPE_INT32_ARRAY) || + (type == DATA_TYPE_UINT32_ARRAY) || + (type == DATA_TYPE_INT64_ARRAY) || + (type == DATA_TYPE_UINT64_ARRAY) || + (type == DATA_TYPE_BOOLEAN_ARRAY) || + (type == DATA_TYPE_STRING_ARRAY) || + (type == DATA_TYPE_NVLIST_ARRAY)) + return (1); + return (0); + +} + +static int +nvpair_value_common(nvpair_t *nvp, data_type_t type, uint_t *nelem, void *data) +{ + int value_sz; + + if (nvp == NULL || nvpair_type(nvp) != type) + return (EINVAL); + + /* + * For non-array types, we copy the data. + * For array types (including string), we set a pointer. + */ + switch (type) { + case DATA_TYPE_BOOLEAN: + if (nelem != NULL) + *nelem = 0; + break; + + case DATA_TYPE_BOOLEAN_VALUE: + case DATA_TYPE_BYTE: + case DATA_TYPE_INT8: + case DATA_TYPE_UINT8: + case DATA_TYPE_INT16: + case DATA_TYPE_UINT16: + case DATA_TYPE_INT32: + case DATA_TYPE_UINT32: + case DATA_TYPE_INT64: + case DATA_TYPE_UINT64: + case DATA_TYPE_HRTIME: +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: +#endif + if (data == NULL) + return (EINVAL); + if ((value_sz = i_get_value_size(type, NULL, 1)) < 0) + return (EINVAL); + bcopy(NVP_VALUE(nvp), data, (size_t)value_sz); + if (nelem != NULL) + *nelem = 1; + break; + + case DATA_TYPE_NVLIST: + case DATA_TYPE_STRING: + if (data == NULL) + return (EINVAL); + *(void **)data = (void *)NVP_VALUE(nvp); + if (nelem != NULL) + *nelem = 1; + break; + + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_BYTE_ARRAY: + case DATA_TYPE_INT8_ARRAY: + case DATA_TYPE_UINT8_ARRAY: + case DATA_TYPE_INT16_ARRAY: + case DATA_TYPE_UINT16_ARRAY: + case DATA_TYPE_INT32_ARRAY: + case DATA_TYPE_UINT32_ARRAY: + case DATA_TYPE_INT64_ARRAY: + case DATA_TYPE_UINT64_ARRAY: + case DATA_TYPE_STRING_ARRAY: + case DATA_TYPE_NVLIST_ARRAY: + if (nelem == NULL || data == NULL) + return (EINVAL); + if ((*nelem = NVP_NELEM(nvp)) != 0) + *(void **)data = (void *)NVP_VALUE(nvp); + else + *(void **)data = NULL; + break; + + default: + return (ENOTSUP); + } + + return (0); +} + +static int +nvlist_lookup_common(nvlist_t *nvl, const char *name, data_type_t type, + uint_t *nelem, void *data) +{ + nvpriv_t *priv; + nvpair_t *nvp; + i_nvp_t *curr; + + if (name == NULL || nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (EINVAL); + + if (!(nvl->nvl_nvflag & (NV_UNIQUE_NAME | NV_UNIQUE_NAME_TYPE))) + return (ENOTSUP); + + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) { + nvp = &curr->nvi_nvp; + + if (strcmp(name, NVP_NAME(nvp)) == 0 && NVP_TYPE(nvp) == type) + return (nvpair_value_common(nvp, type, nelem, data)); + } + + return (ENOENT); +} + +int +nvlist_lookup_boolean(nvlist_t *nvl, const char *name) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_BOOLEAN, NULL, NULL)); +} + +int +nvlist_lookup_boolean_value(nvlist_t *nvl, const char *name, boolean_t *val) +{ + return (nvlist_lookup_common(nvl, name, + DATA_TYPE_BOOLEAN_VALUE, NULL, val)); +} + +int +nvlist_lookup_byte(nvlist_t *nvl, const char *name, uchar_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_BYTE, NULL, val)); +} + +int +nvlist_lookup_int8(nvlist_t *nvl, const char *name, int8_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT8, NULL, val)); +} + +int +nvlist_lookup_uint8(nvlist_t *nvl, const char *name, uint8_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT8, NULL, val)); +} + +int +nvlist_lookup_int16(nvlist_t *nvl, const char *name, int16_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT16, NULL, val)); +} + +int +nvlist_lookup_uint16(nvlist_t *nvl, const char *name, uint16_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT16, NULL, val)); +} + +int +nvlist_lookup_int32(nvlist_t *nvl, const char *name, int32_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT32, NULL, val)); +} + +int +nvlist_lookup_uint32(nvlist_t *nvl, const char *name, uint32_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT32, NULL, val)); +} + +int +nvlist_lookup_int64(nvlist_t *nvl, const char *name, int64_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT64, NULL, val)); +} + +int +nvlist_lookup_uint64(nvlist_t *nvl, const char *name, uint64_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT64, NULL, val)); +} + +#if !defined(_KERNEL) +int +nvlist_lookup_double(nvlist_t *nvl, const char *name, double *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_DOUBLE, NULL, val)); +} +#endif + +int +nvlist_lookup_string(nvlist_t *nvl, const char *name, char **val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_STRING, NULL, val)); +} + +int +nvlist_lookup_nvlist(nvlist_t *nvl, const char *name, nvlist_t **val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_NVLIST, NULL, val)); +} + +int +nvlist_lookup_boolean_array(nvlist_t *nvl, const char *name, + boolean_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, + DATA_TYPE_BOOLEAN_ARRAY, n, a)); +} + +int +nvlist_lookup_byte_array(nvlist_t *nvl, const char *name, + uchar_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_BYTE_ARRAY, n, a)); +} + +int +nvlist_lookup_int8_array(nvlist_t *nvl, const char *name, int8_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT8_ARRAY, n, a)); +} + +int +nvlist_lookup_uint8_array(nvlist_t *nvl, const char *name, + uint8_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT8_ARRAY, n, a)); +} + +int +nvlist_lookup_int16_array(nvlist_t *nvl, const char *name, + int16_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT16_ARRAY, n, a)); +} + +int +nvlist_lookup_uint16_array(nvlist_t *nvl, const char *name, + uint16_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT16_ARRAY, n, a)); +} + +int +nvlist_lookup_int32_array(nvlist_t *nvl, const char *name, + int32_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT32_ARRAY, n, a)); +} + +int +nvlist_lookup_uint32_array(nvlist_t *nvl, const char *name, + uint32_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT32_ARRAY, n, a)); +} + +int +nvlist_lookup_int64_array(nvlist_t *nvl, const char *name, + int64_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_INT64_ARRAY, n, a)); +} + +int +nvlist_lookup_uint64_array(nvlist_t *nvl, const char *name, + uint64_t **a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_UINT64_ARRAY, n, a)); +} + +int +nvlist_lookup_string_array(nvlist_t *nvl, const char *name, + char ***a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_STRING_ARRAY, n, a)); +} + +int +nvlist_lookup_nvlist_array(nvlist_t *nvl, const char *name, + nvlist_t ***a, uint_t *n) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_NVLIST_ARRAY, n, a)); +} + +int +nvlist_lookup_hrtime(nvlist_t *nvl, const char *name, hrtime_t *val) +{ + return (nvlist_lookup_common(nvl, name, DATA_TYPE_HRTIME, NULL, val)); +} + +int +nvlist_lookup_pairs(nvlist_t *nvl, int flag, ...) +{ + va_list ap; + char *name; + int noentok = (flag & NV_FLAG_NOENTOK ? 1 : 0); + int ret = 0; + + va_start(ap, flag); + while (ret == 0 && (name = va_arg(ap, char *)) != NULL) { + data_type_t type; + void *val; + uint_t *nelem; + + switch (type = va_arg(ap, data_type_t)) { + case DATA_TYPE_BOOLEAN: + ret = nvlist_lookup_common(nvl, name, type, NULL, NULL); + break; + + case DATA_TYPE_BOOLEAN_VALUE: + case DATA_TYPE_BYTE: + case DATA_TYPE_INT8: + case DATA_TYPE_UINT8: + case DATA_TYPE_INT16: + case DATA_TYPE_UINT16: + case DATA_TYPE_INT32: + case DATA_TYPE_UINT32: + case DATA_TYPE_INT64: + case DATA_TYPE_UINT64: + case DATA_TYPE_HRTIME: + case DATA_TYPE_STRING: + case DATA_TYPE_NVLIST: +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: +#endif + val = va_arg(ap, void *); + ret = nvlist_lookup_common(nvl, name, type, NULL, val); + break; + + case DATA_TYPE_BYTE_ARRAY: + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_INT8_ARRAY: + case DATA_TYPE_UINT8_ARRAY: + case DATA_TYPE_INT16_ARRAY: + case DATA_TYPE_UINT16_ARRAY: + case DATA_TYPE_INT32_ARRAY: + case DATA_TYPE_UINT32_ARRAY: + case DATA_TYPE_INT64_ARRAY: + case DATA_TYPE_UINT64_ARRAY: + case DATA_TYPE_STRING_ARRAY: + case DATA_TYPE_NVLIST_ARRAY: + val = va_arg(ap, void *); + nelem = va_arg(ap, uint_t *); + ret = nvlist_lookup_common(nvl, name, type, nelem, val); + break; + + default: + ret = EINVAL; + } + + if (ret == ENOENT && noentok) + ret = 0; + } + va_end(ap); + + return (ret); +} + +/* + * Find the 'name'ed nvpair in the nvlist 'nvl'. If 'name' found, the function + * returns zero and a pointer to the matching nvpair is returned in '*ret' + * (given 'ret' is non-NULL). If 'sep' is specified then 'name' will penitrate + * multiple levels of embedded nvlists, with 'sep' as the separator. As an + * example, if sep is '.', name might look like: "a" or "a.b" or "a.c[3]" or + * "a.d[3].e[1]". This matches the C syntax for array embed (for convience, + * code also supports "a.d[3]e[1]" syntax). + * + * If 'ip' is non-NULL and the last name component is an array, return the + * value of the "...[index]" array index in *ip. For an array reference that + * is not indexed, *ip will be returned as -1. If there is a syntax error in + * 'name', and 'ep' is non-NULL then *ep will be set to point to the location + * inside the 'name' string where the syntax error was detected. + */ +static int +nvlist_lookup_nvpair_ei_sep(nvlist_t *nvl, const char *name, const char sep, + nvpair_t **ret, int *ip, char **ep) +{ + nvpair_t *nvp; + const char *np; + char *sepp = NULL; + char *idxp, *idxep; + nvlist_t **nva; + long idx = 0; + int n; + + if (ip) + *ip = -1; /* not indexed */ + if (ep) + *ep = NULL; + + if ((nvl == NULL) || (name == NULL)) + return (EINVAL); + + /* step through components of name */ + for (np = name; np && *np; np = sepp) { + /* ensure unique names */ + if (!(nvl->nvl_nvflag & NV_UNIQUE_NAME)) + return (ENOTSUP); + + /* skip white space */ + skip_whitespace(np); + if (*np == 0) + break; + + /* set 'sepp' to end of current component 'np' */ + if (sep) + sepp = strchr(np, sep); + else + sepp = NULL; + + /* find start of next "[ index ]..." */ + idxp = strchr(np, '['); + + /* if sepp comes first, set idxp to NULL */ + if (sepp && idxp && (sepp < idxp)) + idxp = NULL; + + /* + * At this point 'idxp' is set if there is an index + * expected for the current component. + */ + if (idxp) { + /* set 'n' to length of current 'np' name component */ + n = idxp++ - np; + + /* keep sepp up to date for *ep use as we advance */ + skip_whitespace(idxp); + sepp = idxp; + + /* determine the index value */ +#if defined(_KERNEL) && !defined(_BOOT) + if (ddi_strtol(idxp, &idxep, 0, &idx)) + goto fail; +#else + idx = strtol(idxp, &idxep, 0); +#endif + if (idxep == idxp) + goto fail; + + /* keep sepp up to date for *ep use as we advance */ + sepp = idxep; + + /* skip white space index value and check for ']' */ + skip_whitespace(sepp); + if (*sepp++ != ']') + goto fail; + + /* for embedded arrays, support C syntax: "a[1].b" */ + skip_whitespace(sepp); + if (sep && (*sepp == sep)) + sepp++; + } else if (sepp) { + n = sepp++ - np; + } else { + n = strlen(np); + } + + /* trim trailing whitespace by reducing length of 'np' */ + if (n == 0) + goto fail; + for (n--; (np[n] == ' ') || (np[n] == '\t'); n--) + ; + n++; + + /* skip whitespace, and set sepp to NULL if complete */ + if (sepp) { + skip_whitespace(sepp); + if (*sepp == 0) + sepp = NULL; + } + + /* + * At this point: + * o 'n' is the length of current 'np' component. + * o 'idxp' is set if there was an index, and value 'idx'. + * o 'sepp' is set to the beginning of the next component, + * and set to NULL if we have no more components. + * + * Search for nvpair with matching component name. + */ + for (nvp = nvlist_next_nvpair(nvl, NULL); nvp != NULL; + nvp = nvlist_next_nvpair(nvl, nvp)) { + + /* continue if no match on name */ + if (strncmp(np, nvpair_name(nvp), n) || + (strlen(nvpair_name(nvp)) != n)) + continue; + + /* if indexed, verify type is array oriented */ + if (idxp && !nvpair_type_is_array(nvp)) + goto fail; + + /* + * Full match found, return nvp and idx if this + * was the last component. + */ + if (sepp == NULL) { + if (ret) + *ret = nvp; + if (ip && idxp) + *ip = (int)idx; /* return index */ + return (0); /* found */ + } + + /* + * More components: current match must be + * of DATA_TYPE_NVLIST or DATA_TYPE_NVLIST_ARRAY + * to support going deeper. + */ + if (nvpair_type(nvp) == DATA_TYPE_NVLIST) { + nvl = EMBEDDED_NVL(nvp); + break; + } else if (nvpair_type(nvp) == DATA_TYPE_NVLIST_ARRAY) { + (void) nvpair_value_nvlist_array(nvp, + &nva, (uint_t *)&n); + if ((n < 0) || (idx >= n)) + goto fail; + nvl = nva[idx]; + break; + } + + /* type does not support more levels */ + goto fail; + } + if (nvp == NULL) + goto fail; /* 'name' not found */ + + /* search for match of next component in embedded 'nvl' list */ + } + +fail: if (ep && sepp) + *ep = sepp; + return (EINVAL); +} + +/* + * Return pointer to nvpair with specified 'name'. + */ +int +nvlist_lookup_nvpair(nvlist_t *nvl, const char *name, nvpair_t **ret) +{ + return (nvlist_lookup_nvpair_ei_sep(nvl, name, 0, ret, NULL, NULL)); +} + +/* + * Determine if named nvpair exists in nvlist (use embedded separator of '.' + * and return array index). See nvlist_lookup_nvpair_ei_sep for more detailed + * description. + */ +int nvlist_lookup_nvpair_embedded_index(nvlist_t *nvl, + const char *name, nvpair_t **ret, int *ip, char **ep) +{ + return (nvlist_lookup_nvpair_ei_sep(nvl, name, '.', ret, ip, ep)); +} + +boolean_t +nvlist_exists(nvlist_t *nvl, const char *name) +{ + nvpriv_t *priv; + nvpair_t *nvp; + i_nvp_t *curr; + + if (name == NULL || nvl == NULL || + (priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (B_FALSE); + + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) { + nvp = &curr->nvi_nvp; + + if (strcmp(name, NVP_NAME(nvp)) == 0) + return (B_TRUE); + } + + return (B_FALSE); +} + +int +nvpair_value_boolean_value(nvpair_t *nvp, boolean_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_BOOLEAN_VALUE, NULL, val)); +} + +int +nvpair_value_byte(nvpair_t *nvp, uchar_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_BYTE, NULL, val)); +} + +int +nvpair_value_int8(nvpair_t *nvp, int8_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT8, NULL, val)); +} + +int +nvpair_value_uint8(nvpair_t *nvp, uint8_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT8, NULL, val)); +} + +int +nvpair_value_int16(nvpair_t *nvp, int16_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT16, NULL, val)); +} + +int +nvpair_value_uint16(nvpair_t *nvp, uint16_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT16, NULL, val)); +} + +int +nvpair_value_int32(nvpair_t *nvp, int32_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT32, NULL, val)); +} + +int +nvpair_value_uint32(nvpair_t *nvp, uint32_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT32, NULL, val)); +} + +int +nvpair_value_int64(nvpair_t *nvp, int64_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT64, NULL, val)); +} + +int +nvpair_value_uint64(nvpair_t *nvp, uint64_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT64, NULL, val)); +} + +#if !defined(_KERNEL) +int +nvpair_value_double(nvpair_t *nvp, double *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_DOUBLE, NULL, val)); +} +#endif + +int +nvpair_value_string(nvpair_t *nvp, char **val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_STRING, NULL, val)); +} + +int +nvpair_value_nvlist(nvpair_t *nvp, nvlist_t **val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_NVLIST, NULL, val)); +} + +int +nvpair_value_boolean_array(nvpair_t *nvp, boolean_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_BOOLEAN_ARRAY, nelem, val)); +} + +int +nvpair_value_byte_array(nvpair_t *nvp, uchar_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_BYTE_ARRAY, nelem, val)); +} + +int +nvpair_value_int8_array(nvpair_t *nvp, int8_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT8_ARRAY, nelem, val)); +} + +int +nvpair_value_uint8_array(nvpair_t *nvp, uint8_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT8_ARRAY, nelem, val)); +} + +int +nvpair_value_int16_array(nvpair_t *nvp, int16_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT16_ARRAY, nelem, val)); +} + +int +nvpair_value_uint16_array(nvpair_t *nvp, uint16_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT16_ARRAY, nelem, val)); +} + +int +nvpair_value_int32_array(nvpair_t *nvp, int32_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT32_ARRAY, nelem, val)); +} + +int +nvpair_value_uint32_array(nvpair_t *nvp, uint32_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT32_ARRAY, nelem, val)); +} + +int +nvpair_value_int64_array(nvpair_t *nvp, int64_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_INT64_ARRAY, nelem, val)); +} + +int +nvpair_value_uint64_array(nvpair_t *nvp, uint64_t **val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_UINT64_ARRAY, nelem, val)); +} + +int +nvpair_value_string_array(nvpair_t *nvp, char ***val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_STRING_ARRAY, nelem, val)); +} + +int +nvpair_value_nvlist_array(nvpair_t *nvp, nvlist_t ***val, uint_t *nelem) +{ + return (nvpair_value_common(nvp, DATA_TYPE_NVLIST_ARRAY, nelem, val)); +} + +int +nvpair_value_hrtime(nvpair_t *nvp, hrtime_t *val) +{ + return (nvpair_value_common(nvp, DATA_TYPE_HRTIME, NULL, val)); +} + +/* + * Add specified pair to the list. + */ +int +nvlist_add_nvpair(nvlist_t *nvl, nvpair_t *nvp) +{ + if (nvl == NULL || nvp == NULL) + return (EINVAL); + + return (nvlist_add_common(nvl, NVP_NAME(nvp), NVP_TYPE(nvp), + NVP_NELEM(nvp), NVP_VALUE(nvp))); +} + +/* + * Merge the supplied nvlists and put the result in dst. + * The merged list will contain all names specified in both lists, + * the values are taken from nvl in the case of duplicates. + * Return 0 on success. + */ +/*ARGSUSED*/ +int +nvlist_merge(nvlist_t *dst, nvlist_t *nvl, int flag) +{ + if (nvl == NULL || dst == NULL) + return (EINVAL); + + if (dst != nvl) + return (nvlist_copy_pairs(nvl, dst)); + + return (0); +} + +/* + * Encoding related routines + */ +#define NVS_OP_ENCODE 0 +#define NVS_OP_DECODE 1 +#define NVS_OP_GETSIZE 2 + +typedef struct nvs_ops nvs_ops_t; + +typedef struct { + int nvs_op; + const nvs_ops_t *nvs_ops; + void *nvs_private; + nvpriv_t *nvs_priv; + int nvs_recursion; +} nvstream_t; + +/* + * nvs operations are: + * - nvs_nvlist + * encoding / decoding of an nvlist header (nvlist_t) + * calculates the size used for header and end detection + * + * - nvs_nvpair + * responsible for the first part of encoding / decoding of an nvpair + * calculates the decoded size of an nvpair + * + * - nvs_nvp_op + * second part of encoding / decoding of an nvpair + * + * - nvs_nvp_size + * calculates the encoding size of an nvpair + * + * - nvs_nvl_fini + * encodes the end detection mark (zeros). + */ +struct nvs_ops { + int (*nvs_nvlist)(nvstream_t *, nvlist_t *, size_t *); + int (*nvs_nvpair)(nvstream_t *, nvpair_t *, size_t *); + int (*nvs_nvp_op)(nvstream_t *, nvpair_t *); + int (*nvs_nvp_size)(nvstream_t *, nvpair_t *, size_t *); + int (*nvs_nvl_fini)(nvstream_t *); +}; + +typedef struct { + char nvh_encoding; /* nvs encoding method */ + char nvh_endian; /* nvs endian */ + char nvh_reserved1; /* reserved for future use */ + char nvh_reserved2; /* reserved for future use */ +} nvs_header_t; + +static int +nvs_encode_pairs(nvstream_t *nvs, nvlist_t *nvl) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *curr; + + /* + * Walk nvpair in list and encode each nvpair + */ + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) + if (nvs->nvs_ops->nvs_nvpair(nvs, &curr->nvi_nvp, NULL) != 0) + return (EFAULT); + + return (nvs->nvs_ops->nvs_nvl_fini(nvs)); +} + +static int +nvs_decode_pairs(nvstream_t *nvs, nvlist_t *nvl) +{ + nvpair_t *nvp; + size_t nvsize; + int err; + + /* + * Get decoded size of next pair in stream, alloc + * memory for nvpair_t, then decode the nvpair + */ + while ((err = nvs->nvs_ops->nvs_nvpair(nvs, NULL, &nvsize)) == 0) { + if (nvsize == 0) /* end of list */ + break; + + /* make sure len makes sense */ + if (nvsize < NVP_SIZE_CALC(1, 0)) + return (EFAULT); + + if ((nvp = nvp_buf_alloc(nvl, nvsize)) == NULL) + return (ENOMEM); + + if ((err = nvs->nvs_ops->nvs_nvp_op(nvs, nvp)) != 0) { + nvp_buf_free(nvl, nvp); + return (err); + } + + if (i_validate_nvpair(nvp) != 0) { + nvpair_free(nvp); + nvp_buf_free(nvl, nvp); + return (EFAULT); + } + + nvp_buf_link(nvl, nvp); + } + return (err); +} + +static int +nvs_getsize_pairs(nvstream_t *nvs, nvlist_t *nvl, size_t *buflen) +{ + nvpriv_t *priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv; + i_nvp_t *curr; + uint64_t nvsize = *buflen; + size_t size; + + /* + * Get encoded size of nvpairs in nvlist + */ + for (curr = priv->nvp_list; curr != NULL; curr = curr->nvi_next) { + if (nvs->nvs_ops->nvs_nvp_size(nvs, &curr->nvi_nvp, &size) != 0) + return (EINVAL); + + if ((nvsize += size) > INT32_MAX) + return (EINVAL); + } + + *buflen = nvsize; + return (0); +} + +static int +nvs_operation(nvstream_t *nvs, nvlist_t *nvl, size_t *buflen) +{ + int err; + + if (nvl->nvl_priv == 0) + return (EFAULT); + + /* + * Perform the operation, starting with header, then each nvpair + */ + if ((err = nvs->nvs_ops->nvs_nvlist(nvs, nvl, buflen)) != 0) + return (err); + + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + err = nvs_encode_pairs(nvs, nvl); + break; + + case NVS_OP_DECODE: + err = nvs_decode_pairs(nvs, nvl); + break; + + case NVS_OP_GETSIZE: + err = nvs_getsize_pairs(nvs, nvl, buflen); + break; + + default: + err = EINVAL; + } + + return (err); +} + +static int +nvs_embedded(nvstream_t *nvs, nvlist_t *embedded) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: { + int err; + + if (nvs->nvs_recursion >= nvpair_max_recursion) + return (EINVAL); + nvs->nvs_recursion++; + err = nvs_operation(nvs, embedded, NULL); + nvs->nvs_recursion--; + return (err); + } + case NVS_OP_DECODE: { + nvpriv_t *priv; + int err; + + if (embedded->nvl_version != NV_VERSION) + return (ENOTSUP); + + if ((priv = nv_priv_alloc_embedded(nvs->nvs_priv)) == NULL) + return (ENOMEM); + + nvlist_init(embedded, embedded->nvl_nvflag, priv); + + if (nvs->nvs_recursion >= nvpair_max_recursion) + return (EINVAL); + nvs->nvs_recursion++; + if ((err = nvs_operation(nvs, embedded, NULL)) != 0) + nvlist_free(embedded); + nvs->nvs_recursion--; + return (err); + } + default: + break; + } + + return (EINVAL); +} + +static int +nvs_embedded_nvl_array(nvstream_t *nvs, nvpair_t *nvp, size_t *size) +{ + size_t nelem = NVP_NELEM(nvp); + nvlist_t **nvlp = EMBEDDED_NVL_ARRAY(nvp); + int i; + + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + for (i = 0; i < nelem; i++) + if (nvs_embedded(nvs, nvlp[i]) != 0) + return (EFAULT); + break; + + case NVS_OP_DECODE: { + size_t len = nelem * sizeof (uint64_t); + nvlist_t *embedded = (nvlist_t *)((uintptr_t)nvlp + len); + + bzero(nvlp, len); /* don't trust packed data */ + for (i = 0; i < nelem; i++) { + if (nvs_embedded(nvs, embedded) != 0) { + nvpair_free(nvp); + return (EFAULT); + } + + nvlp[i] = embedded++; + } + break; + } + case NVS_OP_GETSIZE: { + uint64_t nvsize = 0; + + for (i = 0; i < nelem; i++) { + size_t nvp_sz = 0; + + if (nvs_operation(nvs, nvlp[i], &nvp_sz) != 0) + return (EINVAL); + + if ((nvsize += nvp_sz) > INT32_MAX) + return (EINVAL); + } + + *size = nvsize; + break; + } + default: + return (EINVAL); + } + + return (0); +} + +static int nvs_native(nvstream_t *, nvlist_t *, char *, size_t *); +static int nvs_xdr(nvstream_t *, nvlist_t *, char *, size_t *); + +/* + * Common routine for nvlist operations: + * encode, decode, getsize (encoded size). + */ +static int +nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding, + int nvs_op) +{ + int err = 0; + nvstream_t nvs; + int nvl_endian; +#ifdef _LITTLE_ENDIAN + int host_endian = 1; +#else + int host_endian = 0; +#endif /* _LITTLE_ENDIAN */ + nvs_header_t *nvh = (void *)buf; + + if (buflen == NULL || nvl == NULL || + (nvs.nvs_priv = (nvpriv_t *)(uintptr_t)nvl->nvl_priv) == NULL) + return (EINVAL); + + nvs.nvs_op = nvs_op; + nvs.nvs_recursion = 0; + + /* + * For NVS_OP_ENCODE and NVS_OP_DECODE make sure an nvlist and + * a buffer is allocated. The first 4 bytes in the buffer are + * used for encoding method and host endian. + */ + switch (nvs_op) { + case NVS_OP_ENCODE: + if (buf == NULL || *buflen < sizeof (nvs_header_t)) + return (EINVAL); + + nvh->nvh_encoding = encoding; + nvh->nvh_endian = nvl_endian = host_endian; + nvh->nvh_reserved1 = 0; + nvh->nvh_reserved2 = 0; + break; + + case NVS_OP_DECODE: + if (buf == NULL || *buflen < sizeof (nvs_header_t)) + return (EINVAL); + + /* get method of encoding from first byte */ + encoding = nvh->nvh_encoding; + nvl_endian = nvh->nvh_endian; + break; + + case NVS_OP_GETSIZE: + nvl_endian = host_endian; + + /* + * add the size for encoding + */ + *buflen = sizeof (nvs_header_t); + break; + + default: + return (ENOTSUP); + } + + /* + * Create an nvstream with proper encoding method + */ + switch (encoding) { + case NV_ENCODE_NATIVE: + /* + * check endianness, in case we are unpacking + * from a file + */ + if (nvl_endian != host_endian) + return (ENOTSUP); + err = nvs_native(&nvs, nvl, buf, buflen); + break; + case NV_ENCODE_XDR: + err = nvs_xdr(&nvs, nvl, buf, buflen); + break; + default: + err = ENOTSUP; + break; + } + + return (err); +} + +int +nvlist_size(nvlist_t *nvl, size_t *size, int encoding) +{ + return (nvlist_common(nvl, NULL, size, encoding, NVS_OP_GETSIZE)); +} + +/* + * Pack nvlist into contiguous memory + */ +int +nvlist_pack(nvlist_t *nvl, char **bufp, size_t *buflen, int encoding, + int kmflag) +{ + return (nvlist_xpack(nvl, bufp, buflen, encoding, + nvlist_nv_alloc(kmflag))); +} + +int +nvlist_xpack(nvlist_t *nvl, char **bufp, size_t *buflen, int encoding, + nv_alloc_t *nva) +{ + nvpriv_t nvpriv; + size_t alloc_size; + char *buf; + int err; + + if (nva == NULL || nvl == NULL || bufp == NULL || buflen == NULL) + return (EINVAL); + + if (*bufp != NULL) + return (nvlist_common(nvl, *bufp, buflen, encoding, + NVS_OP_ENCODE)); + + /* + * Here is a difficult situation: + * 1. The nvlist has fixed allocator properties. + * All other nvlist routines (like nvlist_add_*, ...) use + * these properties. + * 2. When using nvlist_pack() the user can specify their own + * allocator properties (e.g. by using KM_NOSLEEP). + * + * We use the user specified properties (2). A clearer solution + * will be to remove the kmflag from nvlist_pack(), but we will + * not change the interface. + */ + nv_priv_init(&nvpriv, nva, 0); + + if ((err = nvlist_size(nvl, &alloc_size, encoding))) + return (err); + + if ((buf = nv_mem_zalloc(&nvpriv, alloc_size)) == NULL) + return (ENOMEM); + + if ((err = nvlist_common(nvl, buf, &alloc_size, encoding, + NVS_OP_ENCODE)) != 0) { + nv_mem_free(&nvpriv, buf, alloc_size); + } else { + *buflen = alloc_size; + *bufp = buf; + } + + return (err); +} + +/* + * Unpack buf into an nvlist_t + */ +int +nvlist_unpack(char *buf, size_t buflen, nvlist_t **nvlp, int kmflag) +{ + return (nvlist_xunpack(buf, buflen, nvlp, nvlist_nv_alloc(kmflag))); +} + +int +nvlist_xunpack(char *buf, size_t buflen, nvlist_t **nvlp, nv_alloc_t *nva) +{ + nvlist_t *nvl; + int err; + + if (nvlp == NULL) + return (EINVAL); + + if ((err = nvlist_xalloc(&nvl, 0, nva)) != 0) + return (err); + + if ((err = nvlist_common(nvl, buf, &buflen, 0, NVS_OP_DECODE)) != 0) + nvlist_free(nvl); + else + *nvlp = nvl; + + return (err); +} + +/* + * Native encoding functions + */ +typedef struct { + /* + * This structure is used when decoding a packed nvpair in + * the native format. n_base points to a buffer containing the + * packed nvpair. n_end is a pointer to the end of the buffer. + * (n_end actually points to the first byte past the end of the + * buffer.) n_curr is a pointer that lies between n_base and n_end. + * It points to the current data that we are decoding. + * The amount of data left in the buffer is equal to n_end - n_curr. + * n_flag is used to recognize a packed embedded list. + */ + caddr_t n_base; + caddr_t n_end; + caddr_t n_curr; + uint_t n_flag; +} nvs_native_t; + +static int +nvs_native_create(nvstream_t *nvs, nvs_native_t *native, char *buf, + size_t buflen) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + case NVS_OP_DECODE: + nvs->nvs_private = native; + native->n_curr = native->n_base = buf; + native->n_end = buf + buflen; + native->n_flag = 0; + return (0); + + case NVS_OP_GETSIZE: + nvs->nvs_private = native; + native->n_curr = native->n_base = native->n_end = NULL; + native->n_flag = 0; + return (0); + default: + return (EINVAL); + } +} + +/*ARGSUSED*/ +static void +nvs_native_destroy(nvstream_t *nvs) +{ +} + +static int +native_cp(nvstream_t *nvs, void *buf, size_t size) +{ + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + + if (native->n_curr + size > native->n_end) + return (EFAULT); + + /* + * The bcopy() below eliminates alignment requirement + * on the buffer (stream) and is preferred over direct access. + */ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + bcopy(buf, native->n_curr, size); + break; + case NVS_OP_DECODE: + bcopy(native->n_curr, buf, size); + break; + default: + return (EINVAL); + } + + native->n_curr += size; + return (0); +} + +/* + * operate on nvlist_t header + */ +static int +nvs_native_nvlist(nvstream_t *nvs, nvlist_t *nvl, size_t *size) +{ + nvs_native_t *native = nvs->nvs_private; + + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + case NVS_OP_DECODE: + if (native->n_flag) + return (0); /* packed embedded list */ + + native->n_flag = 1; + + /* copy version and nvflag of the nvlist_t */ + if (native_cp(nvs, &nvl->nvl_version, sizeof (int32_t)) != 0 || + native_cp(nvs, &nvl->nvl_nvflag, sizeof (int32_t)) != 0) + return (EFAULT); + + return (0); + + case NVS_OP_GETSIZE: + /* + * if calculate for packed embedded list + * 4 for end of the embedded list + * else + * 2 * sizeof (int32_t) for nvl_version and nvl_nvflag + * and 4 for end of the entire list + */ + if (native->n_flag) { + *size += 4; + } else { + native->n_flag = 1; + *size += 2 * sizeof (int32_t) + 4; + } + + return (0); + + default: + return (EINVAL); + } +} + +static int +nvs_native_nvl_fini(nvstream_t *nvs) +{ + if (nvs->nvs_op == NVS_OP_ENCODE) { + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + /* + * Add 4 zero bytes at end of nvlist. They are used + * for end detection by the decode routine. + */ + if (native->n_curr + sizeof (int) > native->n_end) + return (EFAULT); + + bzero(native->n_curr, sizeof (int)); + native->n_curr += sizeof (int); + } + + return (0); +} + +static int +nvpair_native_embedded(nvstream_t *nvs, nvpair_t *nvp) +{ + if (nvs->nvs_op == NVS_OP_ENCODE) { + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + nvlist_t *packed = (void *) + (native->n_curr - nvp->nvp_size + NVP_VALOFF(nvp)); + /* + * Null out the pointer that is meaningless in the packed + * structure. The address may not be aligned, so we have + * to use bzero. + */ + bzero((char *)packed + offsetof(nvlist_t, nvl_priv), + sizeof (uint64_t)); + } + + return (nvs_embedded(nvs, EMBEDDED_NVL(nvp))); +} + +static int +nvpair_native_embedded_array(nvstream_t *nvs, nvpair_t *nvp) +{ + if (nvs->nvs_op == NVS_OP_ENCODE) { + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + char *value = native->n_curr - nvp->nvp_size + NVP_VALOFF(nvp); + size_t len = NVP_NELEM(nvp) * sizeof (uint64_t); + nvlist_t *packed = (nvlist_t *)((uintptr_t)value + len); + int i; + /* + * Null out pointers that are meaningless in the packed + * structure. The addresses may not be aligned, so we have + * to use bzero. + */ + bzero(value, len); + + for (i = 0; i < NVP_NELEM(nvp); i++, packed++) + /* + * Null out the pointer that is meaningless in the + * packed structure. The address may not be aligned, + * so we have to use bzero. + */ + bzero((char *)packed + offsetof(nvlist_t, nvl_priv), + sizeof (uint64_t)); + } + + return (nvs_embedded_nvl_array(nvs, nvp, NULL)); +} + +static void +nvpair_native_string_array(nvstream_t *nvs, nvpair_t *nvp) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: { + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + uint64_t *strp = (void *) + (native->n_curr - nvp->nvp_size + NVP_VALOFF(nvp)); + /* + * Null out pointers that are meaningless in the packed + * structure. The addresses may not be aligned, so we have + * to use bzero. + */ + bzero(strp, NVP_NELEM(nvp) * sizeof (uint64_t)); + break; + } + case NVS_OP_DECODE: { + char **strp = (void *)NVP_VALUE(nvp); + char *buf = ((char *)strp + NVP_NELEM(nvp) * sizeof (uint64_t)); + int i; + + for (i = 0; i < NVP_NELEM(nvp); i++) { + strp[i] = buf; + buf += strlen(buf) + 1; + } + break; + } + } +} + +static int +nvs_native_nvp_op(nvstream_t *nvs, nvpair_t *nvp) +{ + data_type_t type; + int value_sz; + int ret = 0; + + /* + * We do the initial bcopy of the data before we look at + * the nvpair type, because when we're decoding, we won't + * have the correct values for the pair until we do the bcopy. + */ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + case NVS_OP_DECODE: + if (native_cp(nvs, nvp, nvp->nvp_size) != 0) + return (EFAULT); + break; + default: + return (EINVAL); + } + + /* verify nvp_name_sz, check the name string length */ + if (i_validate_nvpair_name(nvp) != 0) + return (EFAULT); + + type = NVP_TYPE(nvp); + + /* + * Verify type and nelem and get the value size. + * In case of data types DATA_TYPE_STRING and DATA_TYPE_STRING_ARRAY + * is the size of the string(s) excluded. + */ + if ((value_sz = i_get_value_size(type, NULL, NVP_NELEM(nvp))) < 0) + return (EFAULT); + + if (NVP_SIZE_CALC(nvp->nvp_name_sz, value_sz) > nvp->nvp_size) + return (EFAULT); + + switch (type) { + case DATA_TYPE_NVLIST: + ret = nvpair_native_embedded(nvs, nvp); + break; + case DATA_TYPE_NVLIST_ARRAY: + ret = nvpair_native_embedded_array(nvs, nvp); + break; + case DATA_TYPE_STRING_ARRAY: + nvpair_native_string_array(nvs, nvp); + break; + default: + break; + } + + return (ret); +} + +static int +nvs_native_nvp_size(nvstream_t *nvs, nvpair_t *nvp, size_t *size) +{ + uint64_t nvp_sz = nvp->nvp_size; + + switch (NVP_TYPE(nvp)) { + case DATA_TYPE_NVLIST: { + size_t nvsize = 0; + + if (nvs_operation(nvs, EMBEDDED_NVL(nvp), &nvsize) != 0) + return (EINVAL); + + nvp_sz += nvsize; + break; + } + case DATA_TYPE_NVLIST_ARRAY: { + size_t nvsize; + + if (nvs_embedded_nvl_array(nvs, nvp, &nvsize) != 0) + return (EINVAL); + + nvp_sz += nvsize; + break; + } + default: + break; + } + + if (nvp_sz > INT32_MAX) + return (EINVAL); + + *size = nvp_sz; + + return (0); +} + +static int +nvs_native_nvpair(nvstream_t *nvs, nvpair_t *nvp, size_t *size) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + return (nvs_native_nvp_op(nvs, nvp)); + + case NVS_OP_DECODE: { + nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; + int32_t decode_len; + + /* try to read the size value from the stream */ + if (native->n_curr + sizeof (int32_t) > native->n_end) + return (EFAULT); + bcopy(native->n_curr, &decode_len, sizeof (int32_t)); + + /* sanity check the size value */ + if (decode_len < 0 || + decode_len > native->n_end - native->n_curr) + return (EFAULT); + + *size = decode_len; + + /* + * If at the end of the stream then move the cursor + * forward, otherwise nvpair_native_op() will read + * the entire nvpair at the same cursor position. + */ + if (*size == 0) + native->n_curr += sizeof (int32_t); + break; + } + + default: + return (EINVAL); + } + + return (0); +} + +static const nvs_ops_t nvs_native_ops = { + .nvs_nvlist = nvs_native_nvlist, + .nvs_nvpair = nvs_native_nvpair, + .nvs_nvp_op = nvs_native_nvp_op, + .nvs_nvp_size = nvs_native_nvp_size, + .nvs_nvl_fini = nvs_native_nvl_fini +}; + +static int +nvs_native(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen) +{ + nvs_native_t native; + int err; + + nvs->nvs_ops = &nvs_native_ops; + + if ((err = nvs_native_create(nvs, &native, buf + sizeof (nvs_header_t), + *buflen - sizeof (nvs_header_t))) != 0) + return (err); + + err = nvs_operation(nvs, nvl, buflen); + + nvs_native_destroy(nvs); + + return (err); +} + +/* + * XDR encoding functions + * + * An xdr packed nvlist is encoded as: + * + * - encoding methode and host endian (4 bytes) + * - nvl_version (4 bytes) + * - nvl_nvflag (4 bytes) + * + * - encoded nvpairs, the format of one xdr encoded nvpair is: + * - encoded size of the nvpair (4 bytes) + * - decoded size of the nvpair (4 bytes) + * - name string, (4 + sizeof(NV_ALIGN4(string)) + * a string is coded as size (4 bytes) and data + * - data type (4 bytes) + * - number of elements in the nvpair (4 bytes) + * - data + * + * - 2 zero's for end of the entire list (8 bytes) + */ +static int +nvs_xdr_create(nvstream_t *nvs, XDR *xdr, char *buf, size_t buflen) +{ + /* xdr data must be 4 byte aligned */ + if ((ulong_t)buf % 4 != 0) + return (EFAULT); + + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + xdrmem_create(xdr, buf, (uint_t)buflen, XDR_ENCODE); + nvs->nvs_private = xdr; + return (0); + case NVS_OP_DECODE: + xdrmem_create(xdr, buf, (uint_t)buflen, XDR_DECODE); + nvs->nvs_private = xdr; + return (0); + case NVS_OP_GETSIZE: + nvs->nvs_private = NULL; + return (0); + default: + return (EINVAL); + } +} + +static void +nvs_xdr_destroy(nvstream_t *nvs) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + case NVS_OP_DECODE: + xdr_destroy((XDR *)nvs->nvs_private); + break; + default: + break; + } +} + +static int +nvs_xdr_nvlist(nvstream_t *nvs, nvlist_t *nvl, size_t *size) +{ + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: + case NVS_OP_DECODE: { + XDR *xdr = nvs->nvs_private; + + if (!xdr_int(xdr, &nvl->nvl_version) || + !xdr_u_int(xdr, &nvl->nvl_nvflag)) + return (EFAULT); + break; + } + case NVS_OP_GETSIZE: { + /* + * 2 * 4 for nvl_version + nvl_nvflag + * and 8 for end of the entire list + */ + *size += 2 * 4 + 8; + break; + } + default: + return (EINVAL); + } + return (0); +} + +static int +nvs_xdr_nvl_fini(nvstream_t *nvs) +{ + if (nvs->nvs_op == NVS_OP_ENCODE) { + XDR *xdr = nvs->nvs_private; + int zero = 0; + + if (!xdr_int(xdr, &zero) || !xdr_int(xdr, &zero)) + return (EFAULT); + } + + return (0); +} + +/* + * The format of xdr encoded nvpair is: + * encode_size, decode_size, name string, data type, nelem, data + */ +static int +nvs_xdr_nvp_op(nvstream_t *nvs, nvpair_t *nvp) +{ + data_type_t type; + char *buf; + char *buf_end = (char *)nvp + nvp->nvp_size; + int value_sz; + uint_t nelem, buflen; + bool_t ret = FALSE; + XDR *xdr = nvs->nvs_private; + + ASSERT(xdr != NULL && nvp != NULL); + + /* name string */ + if ((buf = NVP_NAME(nvp)) >= buf_end) + return (EFAULT); + buflen = buf_end - buf; + + if (!xdr_string(xdr, &buf, buflen - 1)) + return (EFAULT); + nvp->nvp_name_sz = strlen(buf) + 1; + + /* type and nelem */ + if (!xdr_int(xdr, (int *)&nvp->nvp_type) || + !xdr_int(xdr, &nvp->nvp_value_elem)) + return (EFAULT); + + type = NVP_TYPE(nvp); + nelem = nvp->nvp_value_elem; + + /* + * Verify type and nelem and get the value size. + * In case of data types DATA_TYPE_STRING and DATA_TYPE_STRING_ARRAY + * is the size of the string(s) excluded. + */ + if ((value_sz = i_get_value_size(type, NULL, nelem)) < 0) + return (EFAULT); + + /* if there is no data to extract then return */ + if (nelem == 0) + return (0); + + /* value */ + if ((buf = NVP_VALUE(nvp)) >= buf_end) + return (EFAULT); + buflen = buf_end - buf; + + if (buflen < value_sz) + return (EFAULT); + + switch (type) { + case DATA_TYPE_NVLIST: + if (nvs_embedded(nvs, (void *)buf) == 0) + return (0); + break; + + case DATA_TYPE_NVLIST_ARRAY: + if (nvs_embedded_nvl_array(nvs, nvp, NULL) == 0) + return (0); + break; + + case DATA_TYPE_BOOLEAN: + ret = TRUE; + break; + + case DATA_TYPE_BYTE: + case DATA_TYPE_INT8: + case DATA_TYPE_UINT8: + ret = xdr_char(xdr, buf); + break; + + case DATA_TYPE_INT16: + ret = xdr_short(xdr, (void *)buf); + break; + + case DATA_TYPE_UINT16: + ret = xdr_u_short(xdr, (void *)buf); + break; + + case DATA_TYPE_BOOLEAN_VALUE: + case DATA_TYPE_INT32: + ret = xdr_int(xdr, (void *)buf); + break; + + case DATA_TYPE_UINT32: + ret = xdr_u_int(xdr, (void *)buf); + break; + + case DATA_TYPE_INT64: + ret = xdr_longlong_t(xdr, (void *)buf); + break; + + case DATA_TYPE_UINT64: + ret = xdr_u_longlong_t(xdr, (void *)buf); + break; + + case DATA_TYPE_HRTIME: + /* + * NOTE: must expose the definition of hrtime_t here + */ + ret = xdr_longlong_t(xdr, (void *)buf); + break; +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: + ret = xdr_double(xdr, (void *)buf); + break; +#endif + case DATA_TYPE_STRING: + ret = xdr_string(xdr, &buf, buflen - 1); + break; + + case DATA_TYPE_BYTE_ARRAY: + ret = xdr_opaque(xdr, buf, nelem); + break; + + case DATA_TYPE_INT8_ARRAY: + case DATA_TYPE_UINT8_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen, sizeof (int8_t), + (xdrproc_t)xdr_char); + break; + + case DATA_TYPE_INT16_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (int16_t), + sizeof (int16_t), (xdrproc_t)xdr_short); + break; + + case DATA_TYPE_UINT16_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (uint16_t), + sizeof (uint16_t), (xdrproc_t)xdr_u_short); + break; + + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_INT32_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (int32_t), + sizeof (int32_t), (xdrproc_t)xdr_int); + break; + + case DATA_TYPE_UINT32_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (uint32_t), + sizeof (uint32_t), (xdrproc_t)xdr_u_int); + break; + + case DATA_TYPE_INT64_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (int64_t), + sizeof (int64_t), (xdrproc_t)xdr_longlong_t); + break; + + case DATA_TYPE_UINT64_ARRAY: + ret = xdr_array(xdr, &buf, &nelem, buflen / sizeof (uint64_t), + sizeof (uint64_t), (xdrproc_t)xdr_u_longlong_t); + break; + + case DATA_TYPE_STRING_ARRAY: { + size_t len = nelem * sizeof (uint64_t); + char **strp = (void *)buf; + int i; + + if (nvs->nvs_op == NVS_OP_DECODE) + bzero(buf, len); /* don't trust packed data */ + + for (i = 0; i < nelem; i++) { + if (buflen <= len) + return (EFAULT); + + buf += len; + buflen -= len; + + if (xdr_string(xdr, &buf, buflen - 1) != TRUE) + return (EFAULT); + + if (nvs->nvs_op == NVS_OP_DECODE) + strp[i] = buf; + len = strlen(buf) + 1; + } + ret = TRUE; + break; + } + default: + break; + } + + return (ret == TRUE ? 0 : EFAULT); +} + +static int +nvs_xdr_nvp_size(nvstream_t *nvs, nvpair_t *nvp, size_t *size) +{ + data_type_t type = NVP_TYPE(nvp); + /* + * encode_size + decode_size + name string size + data type + nelem + * where name string size = 4 + NV_ALIGN4(strlen(NVP_NAME(nvp))) + */ + uint64_t nvp_sz = 4 + 4 + 4 + NV_ALIGN4(strlen(NVP_NAME(nvp))) + 4 + 4; + + switch (type) { + case DATA_TYPE_BOOLEAN: + break; + + case DATA_TYPE_BOOLEAN_VALUE: + case DATA_TYPE_BYTE: + case DATA_TYPE_INT8: + case DATA_TYPE_UINT8: + case DATA_TYPE_INT16: + case DATA_TYPE_UINT16: + case DATA_TYPE_INT32: + case DATA_TYPE_UINT32: + nvp_sz += 4; /* 4 is the minimum xdr unit */ + break; + + case DATA_TYPE_INT64: + case DATA_TYPE_UINT64: + case DATA_TYPE_HRTIME: +#if !defined(_KERNEL) + case DATA_TYPE_DOUBLE: +#endif + nvp_sz += 8; + break; + + case DATA_TYPE_STRING: + nvp_sz += 4 + NV_ALIGN4(strlen((char *)NVP_VALUE(nvp))); + break; + + case DATA_TYPE_BYTE_ARRAY: + nvp_sz += NV_ALIGN4(NVP_NELEM(nvp)); + break; + + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_INT8_ARRAY: + case DATA_TYPE_UINT8_ARRAY: + case DATA_TYPE_INT16_ARRAY: + case DATA_TYPE_UINT16_ARRAY: + case DATA_TYPE_INT32_ARRAY: + case DATA_TYPE_UINT32_ARRAY: + nvp_sz += 4 + 4 * (uint64_t)NVP_NELEM(nvp); + break; + + case DATA_TYPE_INT64_ARRAY: + case DATA_TYPE_UINT64_ARRAY: + nvp_sz += 4 + 8 * (uint64_t)NVP_NELEM(nvp); + break; + + case DATA_TYPE_STRING_ARRAY: { + int i; + char **strs = (void *)NVP_VALUE(nvp); + + for (i = 0; i < NVP_NELEM(nvp); i++) + nvp_sz += 4 + NV_ALIGN4(strlen(strs[i])); + + break; + } + + case DATA_TYPE_NVLIST: + case DATA_TYPE_NVLIST_ARRAY: { + size_t nvsize = 0; + int old_nvs_op = nvs->nvs_op; + int err; + + nvs->nvs_op = NVS_OP_GETSIZE; + if (type == DATA_TYPE_NVLIST) + err = nvs_operation(nvs, EMBEDDED_NVL(nvp), &nvsize); + else + err = nvs_embedded_nvl_array(nvs, nvp, &nvsize); + nvs->nvs_op = old_nvs_op; + + if (err != 0) + return (EINVAL); + + nvp_sz += nvsize; + break; + } + + default: + return (EINVAL); + } + + if (nvp_sz > INT32_MAX) + return (EINVAL); + + *size = nvp_sz; + + return (0); +} + + +/* + * The NVS_XDR_MAX_LEN macro takes a packed xdr buffer of size x and estimates + * the largest nvpair that could be encoded in the buffer. + * + * See comments above nvpair_xdr_op() for the format of xdr encoding. + * The size of a xdr packed nvpair without any data is 5 words. + * + * Using the size of the data directly as an estimate would be ok + * in all cases except one. If the data type is of DATA_TYPE_STRING_ARRAY + * then the actual nvpair has space for an array of pointers to index + * the strings. These pointers are not encoded into the packed xdr buffer. + * + * If the data is of type DATA_TYPE_STRING_ARRAY and all the strings are + * of length 0, then each string is endcoded in xdr format as a single word. + * Therefore when expanded to an nvpair there will be 2.25 word used for + * each string. (a int64_t allocated for pointer usage, and a single char + * for the null termination.) + * + * This is the calculation performed by the NVS_XDR_MAX_LEN macro. + */ +#define NVS_XDR_HDR_LEN ((size_t)(5 * 4)) +#define NVS_XDR_DATA_LEN(y) (((size_t)(y) <= NVS_XDR_HDR_LEN) ? \ + 0 : ((size_t)(y) - NVS_XDR_HDR_LEN)) +#define NVS_XDR_MAX_LEN(x) (NVP_SIZE_CALC(1, 0) + \ + (NVS_XDR_DATA_LEN(x) * 2) + \ + NV_ALIGN4((NVS_XDR_DATA_LEN(x) / 4))) + +static int +nvs_xdr_nvpair(nvstream_t *nvs, nvpair_t *nvp, size_t *size) +{ + XDR *xdr = nvs->nvs_private; + int32_t encode_len, decode_len; + + switch (nvs->nvs_op) { + case NVS_OP_ENCODE: { + size_t nvsize; + + if (nvs_xdr_nvp_size(nvs, nvp, &nvsize) != 0) + return (EFAULT); + + decode_len = nvp->nvp_size; + encode_len = nvsize; + if (!xdr_int(xdr, &encode_len) || !xdr_int(xdr, &decode_len)) + return (EFAULT); + + return (nvs_xdr_nvp_op(nvs, nvp)); + } + case NVS_OP_DECODE: { + struct xdr_bytesrec bytesrec; + + /* get the encode and decode size */ + if (!xdr_int(xdr, &encode_len) || !xdr_int(xdr, &decode_len)) + return (EFAULT); + *size = decode_len; + + /* are we at the end of the stream? */ + if (*size == 0) + return (0); + + /* sanity check the size parameter */ + if (!xdr_control(xdr, XDR_GET_BYTES_AVAIL, &bytesrec)) + return (EFAULT); + + if (*size > NVS_XDR_MAX_LEN(bytesrec.xc_num_avail)) + return (EFAULT); + break; + } + + default: + return (EINVAL); + } + return (0); +} + +static const struct nvs_ops nvs_xdr_ops = { + .nvs_nvlist = nvs_xdr_nvlist, + .nvs_nvpair = nvs_xdr_nvpair, + .nvs_nvp_op = nvs_xdr_nvp_op, + .nvs_nvp_size = nvs_xdr_nvp_size, + .nvs_nvl_fini = nvs_xdr_nvl_fini +}; + +static int +nvs_xdr(nvstream_t *nvs, nvlist_t *nvl, char *buf, size_t *buflen) +{ + XDR xdr; + int err; + + nvs->nvs_ops = &nvs_xdr_ops; + + if ((err = nvs_xdr_create(nvs, &xdr, buf + sizeof (nvs_header_t), + *buflen - sizeof (nvs_header_t))) != 0) + return (err); + + err = nvs_operation(nvs, nvl, buflen); + + nvs_xdr_destroy(nvs); + + return (err); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +static int __init +nvpair_init(void) +{ + return (0); +} + +static void __exit +nvpair_fini(void) +{ +} + +module_init(nvpair_init); +module_exit(nvpair_fini); + +MODULE_DESCRIPTION("Generic name/value pair implementation"); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE(ZFS_META_LICENSE); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); + +EXPORT_SYMBOL(nv_alloc_init); +EXPORT_SYMBOL(nv_alloc_reset); +EXPORT_SYMBOL(nv_alloc_fini); + +/* list management */ +EXPORT_SYMBOL(nvlist_alloc); +EXPORT_SYMBOL(nvlist_free); +EXPORT_SYMBOL(nvlist_size); +EXPORT_SYMBOL(nvlist_pack); +EXPORT_SYMBOL(nvlist_unpack); +EXPORT_SYMBOL(nvlist_dup); +EXPORT_SYMBOL(nvlist_merge); + +EXPORT_SYMBOL(nvlist_xalloc); +EXPORT_SYMBOL(nvlist_xpack); +EXPORT_SYMBOL(nvlist_xunpack); +EXPORT_SYMBOL(nvlist_xdup); +EXPORT_SYMBOL(nvlist_lookup_nv_alloc); + +EXPORT_SYMBOL(nvlist_add_nvpair); +EXPORT_SYMBOL(nvlist_add_boolean); +EXPORT_SYMBOL(nvlist_add_boolean_value); +EXPORT_SYMBOL(nvlist_add_byte); +EXPORT_SYMBOL(nvlist_add_int8); +EXPORT_SYMBOL(nvlist_add_uint8); +EXPORT_SYMBOL(nvlist_add_int16); +EXPORT_SYMBOL(nvlist_add_uint16); +EXPORT_SYMBOL(nvlist_add_int32); +EXPORT_SYMBOL(nvlist_add_uint32); +EXPORT_SYMBOL(nvlist_add_int64); +EXPORT_SYMBOL(nvlist_add_uint64); +EXPORT_SYMBOL(nvlist_add_string); +EXPORT_SYMBOL(nvlist_add_nvlist); +EXPORT_SYMBOL(nvlist_add_boolean_array); +EXPORT_SYMBOL(nvlist_add_byte_array); +EXPORT_SYMBOL(nvlist_add_int8_array); +EXPORT_SYMBOL(nvlist_add_uint8_array); +EXPORT_SYMBOL(nvlist_add_int16_array); +EXPORT_SYMBOL(nvlist_add_uint16_array); +EXPORT_SYMBOL(nvlist_add_int32_array); +EXPORT_SYMBOL(nvlist_add_uint32_array); +EXPORT_SYMBOL(nvlist_add_int64_array); +EXPORT_SYMBOL(nvlist_add_uint64_array); +EXPORT_SYMBOL(nvlist_add_string_array); +EXPORT_SYMBOL(nvlist_add_nvlist_array); +EXPORT_SYMBOL(nvlist_next_nvpair); +EXPORT_SYMBOL(nvlist_prev_nvpair); +EXPORT_SYMBOL(nvlist_empty); +EXPORT_SYMBOL(nvlist_add_hrtime); + +EXPORT_SYMBOL(nvlist_remove); +EXPORT_SYMBOL(nvlist_remove_nvpair); +EXPORT_SYMBOL(nvlist_remove_all); + +EXPORT_SYMBOL(nvlist_lookup_boolean); +EXPORT_SYMBOL(nvlist_lookup_boolean_value); +EXPORT_SYMBOL(nvlist_lookup_byte); +EXPORT_SYMBOL(nvlist_lookup_int8); +EXPORT_SYMBOL(nvlist_lookup_uint8); +EXPORT_SYMBOL(nvlist_lookup_int16); +EXPORT_SYMBOL(nvlist_lookup_uint16); +EXPORT_SYMBOL(nvlist_lookup_int32); +EXPORT_SYMBOL(nvlist_lookup_uint32); +EXPORT_SYMBOL(nvlist_lookup_int64); +EXPORT_SYMBOL(nvlist_lookup_uint64); +EXPORT_SYMBOL(nvlist_lookup_string); +EXPORT_SYMBOL(nvlist_lookup_nvlist); +EXPORT_SYMBOL(nvlist_lookup_boolean_array); +EXPORT_SYMBOL(nvlist_lookup_byte_array); +EXPORT_SYMBOL(nvlist_lookup_int8_array); +EXPORT_SYMBOL(nvlist_lookup_uint8_array); +EXPORT_SYMBOL(nvlist_lookup_int16_array); +EXPORT_SYMBOL(nvlist_lookup_uint16_array); +EXPORT_SYMBOL(nvlist_lookup_int32_array); +EXPORT_SYMBOL(nvlist_lookup_uint32_array); +EXPORT_SYMBOL(nvlist_lookup_int64_array); +EXPORT_SYMBOL(nvlist_lookup_uint64_array); +EXPORT_SYMBOL(nvlist_lookup_string_array); +EXPORT_SYMBOL(nvlist_lookup_nvlist_array); +EXPORT_SYMBOL(nvlist_lookup_hrtime); +EXPORT_SYMBOL(nvlist_lookup_pairs); + +EXPORT_SYMBOL(nvlist_lookup_nvpair); +EXPORT_SYMBOL(nvlist_exists); + +/* processing nvpair */ +EXPORT_SYMBOL(nvpair_name); +EXPORT_SYMBOL(nvpair_type); +EXPORT_SYMBOL(nvpair_value_boolean_value); +EXPORT_SYMBOL(nvpair_value_byte); +EXPORT_SYMBOL(nvpair_value_int8); +EXPORT_SYMBOL(nvpair_value_uint8); +EXPORT_SYMBOL(nvpair_value_int16); +EXPORT_SYMBOL(nvpair_value_uint16); +EXPORT_SYMBOL(nvpair_value_int32); +EXPORT_SYMBOL(nvpair_value_uint32); +EXPORT_SYMBOL(nvpair_value_int64); +EXPORT_SYMBOL(nvpair_value_uint64); +EXPORT_SYMBOL(nvpair_value_string); +EXPORT_SYMBOL(nvpair_value_nvlist); +EXPORT_SYMBOL(nvpair_value_boolean_array); +EXPORT_SYMBOL(nvpair_value_byte_array); +EXPORT_SYMBOL(nvpair_value_int8_array); +EXPORT_SYMBOL(nvpair_value_uint8_array); +EXPORT_SYMBOL(nvpair_value_int16_array); +EXPORT_SYMBOL(nvpair_value_uint16_array); +EXPORT_SYMBOL(nvpair_value_int32_array); +EXPORT_SYMBOL(nvpair_value_uint32_array); +EXPORT_SYMBOL(nvpair_value_int64_array); +EXPORT_SYMBOL(nvpair_value_uint64_array); +EXPORT_SYMBOL(nvpair_value_string_array); +EXPORT_SYMBOL(nvpair_value_nvlist_array); +EXPORT_SYMBOL(nvpair_value_hrtime); + +#endif --- linux-aws-4.15.0.orig/zfs/module/nvpair/nvpair_alloc_fixed.c +++ linux-aws-4.15.0/zfs/module/nvpair/nvpair_alloc_fixed.c @@ -0,0 +1,124 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + + +#include +#include +#include +#include +#if defined(_KERNEL) && !defined(_BOOT) +#include +#else +#include +#include +#endif + +/* + * This allocator is very simple. + * - it uses a pre-allocated buffer for memory allocations. + * - it does _not_ free memory in the pre-allocated buffer. + * + * The reason for the selected implementation is simplicity. + * This allocator is designed for the usage in interrupt context when + * the caller may not wait for free memory. + */ + +/* pre-allocated buffer for memory allocations */ +typedef struct nvbuf { + uintptr_t nvb_buf; /* address of pre-allocated buffer */ + uintptr_t nvb_lim; /* limit address in the buffer */ + uintptr_t nvb_cur; /* current address in the buffer */ +} nvbuf_t; + +/* + * Initialize the pre-allocated buffer allocator. The caller needs to supply + * + * buf address of pre-allocated buffer + * bufsz size of pre-allocated buffer + * + * nv_fixed_init() calculates the remaining members of nvbuf_t. + */ +static int +nv_fixed_init(nv_alloc_t *nva, va_list valist) +{ + uintptr_t base = va_arg(valist, uintptr_t); + uintptr_t lim = base + va_arg(valist, size_t); + nvbuf_t *nvb = (nvbuf_t *)P2ROUNDUP(base, sizeof (uintptr_t)); + + if (base == 0 || (uintptr_t)&nvb[1] > lim) + return (EINVAL); + + nvb->nvb_buf = (uintptr_t)&nvb[0]; + nvb->nvb_cur = (uintptr_t)&nvb[1]; + nvb->nvb_lim = lim; + nva->nva_arg = nvb; + + return (0); +} + +static void * +nv_fixed_alloc(nv_alloc_t *nva, size_t size) +{ + nvbuf_t *nvb = nva->nva_arg; + uintptr_t new = nvb->nvb_cur; + + if (size == 0 || new + size > nvb->nvb_lim) + return (NULL); + + nvb->nvb_cur = P2ROUNDUP(new + size, sizeof (uintptr_t)); + + return ((void *)new); +} + +/*ARGSUSED*/ +static void +nv_fixed_free(nv_alloc_t *nva, void *buf, size_t size) +{ + /* don't free memory in the pre-allocated buffer */ +} + +static void +nv_fixed_reset(nv_alloc_t *nva) +{ + nvbuf_t *nvb = nva->nva_arg; + + nvb->nvb_cur = (uintptr_t)&nvb[1]; +} + +const nv_alloc_ops_t nv_fixed_ops_def = { + .nv_ao_init = nv_fixed_init, + .nv_ao_fini = NULL, + .nv_ao_alloc = nv_fixed_alloc, + .nv_ao_free = nv_fixed_free, + .nv_ao_reset = nv_fixed_reset +}; + +const nv_alloc_ops_t *nv_fixed_ops = &nv_fixed_ops_def; + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(nv_fixed_ops); +#endif --- linux-aws-4.15.0.orig/zfs/module/nvpair/nvpair_alloc_spl.c +++ linux-aws-4.15.0/zfs/module/nvpair/nvpair_alloc_spl.c @@ -0,0 +1,96 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at * usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include + +static void * +nv_alloc_sleep_spl(nv_alloc_t *nva, size_t size) +{ + return (vmem_alloc(size, KM_SLEEP)); +} + +static void * +nv_alloc_pushpage_spl(nv_alloc_t *nva, size_t size) +{ + return (vmem_alloc(size, KM_PUSHPAGE)); +} + +static void * +nv_alloc_nosleep_spl(nv_alloc_t *nva, size_t size) +{ + return (kmem_alloc(size, KM_NOSLEEP)); +} + +static void +nv_free_spl(nv_alloc_t *nva, void *buf, size_t size) +{ + kmem_free(buf, size); +} + +const nv_alloc_ops_t spl_sleep_ops_def = { + .nv_ao_init = NULL, + .nv_ao_fini = NULL, + .nv_ao_alloc = nv_alloc_sleep_spl, + .nv_ao_free = nv_free_spl, + .nv_ao_reset = NULL +}; + +const nv_alloc_ops_t spl_pushpage_ops_def = { + .nv_ao_init = NULL, + .nv_ao_fini = NULL, + .nv_ao_alloc = nv_alloc_pushpage_spl, + .nv_ao_free = nv_free_spl, + .nv_ao_reset = NULL +}; + +const nv_alloc_ops_t spl_nosleep_ops_def = { + .nv_ao_init = NULL, + .nv_ao_fini = NULL, + .nv_ao_alloc = nv_alloc_nosleep_spl, + .nv_ao_free = nv_free_spl, + .nv_ao_reset = NULL +}; + +nv_alloc_t nv_alloc_sleep_def = { + &spl_sleep_ops_def, + NULL +}; + +nv_alloc_t nv_alloc_pushpage_def = { + &spl_pushpage_ops_def, + NULL +}; + +nv_alloc_t nv_alloc_nosleep_def = { + &spl_nosleep_ops_def, + NULL +}; + +nv_alloc_t *nv_alloc_sleep = &nv_alloc_sleep_def; +nv_alloc_t *nv_alloc_pushpage = &nv_alloc_pushpage_def; +nv_alloc_t *nv_alloc_nosleep = &nv_alloc_nosleep_def; --- linux-aws-4.15.0.orig/zfs/module/unicode/Makefile.in +++ linux-aws-4.15.0/zfs/module/unicode/Makefile.in @@ -0,0 +1,11 @@ +src = @abs_top_srcdir@/module/unicode +obj = @abs_builddir@ + +MODULE := zunicode + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += u8_textprep.o +$(MODULE)-objs += uconv.o --- linux-aws-4.15.0.orig/zfs/module/unicode/u8_textprep.c +++ linux-aws-4.15.0/zfs/module/unicode/u8_textprep.c @@ -0,0 +1,2156 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + + + +/* + * UTF-8 text preparation functions (PSARC/2007/149, PSARC/2007/458). + * + * Man pages: u8_textprep_open(9F), u8_textprep_buf(9F), u8_textprep_close(9F), + * u8_textprep_str(9F), u8_strcmp(9F), and u8_validate(9F). See also + * the section 3C man pages. + * Interface stability: Committed. + */ + +#include +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include +#else +#include +#include +#endif /* _KERNEL */ +#include +#include +#include + + +/* The maximum possible number of bytes in a UTF-8 character. */ +#define U8_MB_CUR_MAX (4) + +/* + * The maximum number of bytes needed for a UTF-8 character to cover + * U+0000 - U+FFFF, i.e., the coding space of now deprecated UCS-2. + */ +#define U8_MAX_BYTES_UCS2 (3) + +/* The maximum possible number of bytes in a Stream-Safe Text. */ +#define U8_STREAM_SAFE_TEXT_MAX (128) + +/* + * The maximum number of characters in a combining/conjoining sequence and + * the actual upperbound limit of a combining/conjoining sequence. + */ +#define U8_MAX_CHARS_A_SEQ (32) +#define U8_UPPER_LIMIT_IN_A_SEQ (31) + +/* The combining class value for Starter. */ +#define U8_COMBINING_CLASS_STARTER (0) + +/* + * Some Hangul related macros at below. + * + * The first and the last of Hangul syllables, Hangul Jamo Leading consonants, + * Vowels, and optional Trailing consonants in Unicode scalar values. + * + * Please be noted that the U8_HANGUL_JAMO_T_FIRST is 0x11A7 at below not + * the actual U+11A8. This is due to that the trailing consonant is optional + * and thus we are doing a pre-calculation of subtracting one. + * + * Each of 19 modern leading consonants has total 588 possible syllables since + * Hangul has 21 modern vowels and 27 modern trailing consonants plus 1 for + * no trailing consonant case, i.e., 21 x 28 = 588. + * + * We also have bunch of Hangul related macros at below. Please bear in mind + * that the U8_HANGUL_JAMO_1ST_BYTE can be used to check whether it is + * a Hangul Jamo or not but the value does not guarantee that it is a Hangul + * Jamo; it just guarantee that it will be most likely. + */ +#define U8_HANGUL_SYL_FIRST (0xAC00U) +#define U8_HANGUL_SYL_LAST (0xD7A3U) + +#define U8_HANGUL_JAMO_L_FIRST (0x1100U) +#define U8_HANGUL_JAMO_L_LAST (0x1112U) +#define U8_HANGUL_JAMO_V_FIRST (0x1161U) +#define U8_HANGUL_JAMO_V_LAST (0x1175U) +#define U8_HANGUL_JAMO_T_FIRST (0x11A7U) +#define U8_HANGUL_JAMO_T_LAST (0x11C2U) + +#define U8_HANGUL_V_COUNT (21) +#define U8_HANGUL_VT_COUNT (588) +#define U8_HANGUL_T_COUNT (28) + +#define U8_HANGUL_JAMO_1ST_BYTE (0xE1U) + +#define U8_SAVE_HANGUL_AS_UTF8(s, i, j, k, b) \ + (s)[(i)] = (uchar_t)(0xE0U | ((uint32_t)(b) & 0xF000U) >> 12); \ + (s)[(j)] = (uchar_t)(0x80U | ((uint32_t)(b) & 0x0FC0U) >> 6); \ + (s)[(k)] = (uchar_t)(0x80U | ((uint32_t)(b) & 0x003FU)); + +#define U8_HANGUL_JAMO_L(u) \ + ((u) >= U8_HANGUL_JAMO_L_FIRST && (u) <= U8_HANGUL_JAMO_L_LAST) + +#define U8_HANGUL_JAMO_V(u) \ + ((u) >= U8_HANGUL_JAMO_V_FIRST && (u) <= U8_HANGUL_JAMO_V_LAST) + +#define U8_HANGUL_JAMO_T(u) \ + ((u) > U8_HANGUL_JAMO_T_FIRST && (u) <= U8_HANGUL_JAMO_T_LAST) + +#define U8_HANGUL_JAMO(u) \ + ((u) >= U8_HANGUL_JAMO_L_FIRST && (u) <= U8_HANGUL_JAMO_T_LAST) + +#define U8_HANGUL_SYLLABLE(u) \ + ((u) >= U8_HANGUL_SYL_FIRST && (u) <= U8_HANGUL_SYL_LAST) + +#define U8_HANGUL_COMPOSABLE_L_V(s, u) \ + ((s) == U8_STATE_HANGUL_L && U8_HANGUL_JAMO_V((u))) + +#define U8_HANGUL_COMPOSABLE_LV_T(s, u) \ + ((s) == U8_STATE_HANGUL_LV && U8_HANGUL_JAMO_T((u))) + +/* The types of decomposition mappings. */ +#define U8_DECOMP_BOTH (0xF5U) +#define U8_DECOMP_CANONICAL (0xF6U) + +/* The indicator for 16-bit table. */ +#define U8_16BIT_TABLE_INDICATOR (0x8000U) + +/* The following are some convenience macros. */ +#define U8_PUT_3BYTES_INTO_UTF32(u, b1, b2, b3) \ + (u) = ((((uint32_t)(b1) & 0x0F) << 12) | \ + (((uint32_t)(b2) & 0x3F) << 6) | \ + ((uint32_t)(b3) & 0x3F)); + +#define U8_SIMPLE_SWAP(a, b, t) \ + (t) = (a); \ + (a) = (b); \ + (b) = (t); + +#define U8_ASCII_TOUPPER(c) \ + (((c) >= 'a' && (c) <= 'z') ? (c) - 'a' + 'A' : (c)) + +#define U8_ASCII_TOLOWER(c) \ + (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c)) + +#define U8_ISASCII(c) (((uchar_t)(c)) < 0x80U) +/* + * The following macro assumes that the two characters that are to be + * swapped are adjacent to each other and 'a' comes before 'b'. + * + * If the assumptions are not met, then, the macro will fail. + */ +#define U8_SWAP_COMB_MARKS(a, b) \ + for (k = 0; k < disp[(a)]; k++) \ + u8t[k] = u8s[start[(a)] + k]; \ + for (k = 0; k < disp[(b)]; k++) \ + u8s[start[(a)] + k] = u8s[start[(b)] + k]; \ + start[(b)] = start[(a)] + disp[(b)]; \ + for (k = 0; k < disp[(a)]; k++) \ + u8s[start[(b)] + k] = u8t[k]; \ + U8_SIMPLE_SWAP(comb_class[(a)], comb_class[(b)], tc); \ + U8_SIMPLE_SWAP(disp[(a)], disp[(b)], tc); + +/* The possible states during normalization. */ +typedef enum { + U8_STATE_START = 0, + U8_STATE_HANGUL_L = 1, + U8_STATE_HANGUL_LV = 2, + U8_STATE_HANGUL_LVT = 3, + U8_STATE_HANGUL_V = 4, + U8_STATE_HANGUL_T = 5, + U8_STATE_COMBINING_MARK = 6 +} u8_normalization_states_t; + +/* + * The three vectors at below are used to check bytes of a given UTF-8 + * character are valid and not containing any malformed byte values. + * + * We used to have a quite relaxed UTF-8 binary representation but then there + * was some security related issues and so the Unicode Consortium defined + * and announced the UTF-8 Corrigendum at Unicode 3.1 and then refined it + * one more time at the Unicode 3.2. The following three tables are based on + * that. + */ + +#define U8_ILLEGAL_NEXT_BYTE_COMMON(c) ((c) < 0x80 || (c) > 0xBF) + +#define I_ U8_ILLEGAL_CHAR +#define O_ U8_OUT_OF_RANGE_CHAR + +const int8_t u8_number_of_bytes[0x100] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +/* 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F */ + I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, + +/* 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F */ + I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, + +/* A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF */ + I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, + +/* B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF */ + I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, I_, + +/* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF */ + I_, I_, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + +/* D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + +/* E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + +/* F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF */ + 4, 4, 4, 4, 4, O_, O_, O_, O_, O_, O_, O_, O_, O_, O_, O_, +}; + +#undef I_ +#undef O_ + +const uint8_t u8_valid_min_2nd_byte[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +/* C0 C1 C2 C3 C4 C5 C6 C7 */ + 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* C8 C9 CA CB CC CD CE CF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* D0 D1 D2 D3 D4 D5 D6 D7 */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* D8 D9 DA DB DC DD DE DF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* E0 E1 E2 E3 E4 E5 E6 E7 */ + 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* E8 E9 EA EB EC ED EE EF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, +/* F0 F1 F2 F3 F4 F5 F6 F7 */ + 0x90, 0x80, 0x80, 0x80, 0x80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +const uint8_t u8_valid_max_2nd_byte[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +/* C0 C1 C2 C3 C4 C5 C6 C7 */ + 0, 0, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* C8 C9 CA CB CC CD CE CF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* D0 D1 D2 D3 D4 D5 D6 D7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* D8 D9 DA DB DC DD DE DF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* E0 E1 E2 E3 E4 E5 E6 E7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, +/* E8 E9 EA EB EC ED EE EF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0x9f, 0xbf, 0xbf, +/* F0 F1 F2 F3 F4 F5 F6 F7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0x8f, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + + +/* + * The u8_validate() validates on the given UTF-8 character string and + * calculate the byte length. It is quite similar to mblen(3C) except that + * this will validate against the list of characters if required and + * specific to UTF-8 and Unicode. + */ +int +u8_validate(char *u8str, size_t n, char **list, int flag, int *errnum) +{ + uchar_t *ib; + uchar_t *ibtail; + uchar_t **p; + uchar_t *s1; + uchar_t *s2; + uchar_t f; + int sz; + size_t i; + int ret_val; + boolean_t second; + boolean_t no_need_to_validate_entire; + boolean_t check_additional; + boolean_t validate_ucs2_range_only; + + if (! u8str) + return (0); + + ib = (uchar_t *)u8str; + ibtail = ib + n; + + ret_val = 0; + + no_need_to_validate_entire = ! (flag & U8_VALIDATE_ENTIRE); + check_additional = flag & U8_VALIDATE_CHECK_ADDITIONAL; + validate_ucs2_range_only = flag & U8_VALIDATE_UCS2_RANGE; + + while (ib < ibtail) { + /* + * The first byte of a UTF-8 character tells how many + * bytes will follow for the character. If the first byte + * is an illegal byte value or out of range value, we just + * return -1 with an appropriate error number. + */ + sz = u8_number_of_bytes[*ib]; + if (sz == U8_ILLEGAL_CHAR) { + *errnum = EILSEQ; + return (-1); + } + + if (sz == U8_OUT_OF_RANGE_CHAR || + (validate_ucs2_range_only && sz > U8_MAX_BYTES_UCS2)) { + *errnum = ERANGE; + return (-1); + } + + /* + * If we don't have enough bytes to check on, that's also + * an error. As you can see, we give illegal byte sequence + * checking higher priority then EINVAL cases. + */ + if ((ibtail - ib) < sz) { + *errnum = EINVAL; + return (-1); + } + + if (sz == 1) { + ib++; + ret_val++; + } else { + /* + * Check on the multi-byte UTF-8 character. For more + * details on this, see comment added for the used + * data structures at the beginning of the file. + */ + f = *ib++; + ret_val++; + second = B_TRUE; + for (i = 1; i < sz; i++) { + if (second) { + if (*ib < u8_valid_min_2nd_byte[f] || + *ib > u8_valid_max_2nd_byte[f]) { + *errnum = EILSEQ; + return (-1); + } + second = B_FALSE; + } else if (U8_ILLEGAL_NEXT_BYTE_COMMON(*ib)) { + *errnum = EILSEQ; + return (-1); + } + ib++; + ret_val++; + } + } + + if (check_additional) { + for (p = (uchar_t **)list, i = 0; p[i]; i++) { + s1 = ib - sz; + s2 = p[i]; + while (s1 < ib) { + if (*s1 != *s2 || *s2 == '\0') + break; + s1++; + s2++; + } + + if (s1 >= ib && *s2 == '\0') { + *errnum = EBADF; + return (-1); + } + } + } + + if (no_need_to_validate_entire) + break; + } + + return (ret_val); +} + +/* + * The do_case_conv() looks at the mapping tables and returns found + * bytes if any. If not found, the input bytes are returned. The function + * always terminate the return bytes with a null character assuming that + * there are plenty of room to do so. + * + * The case conversions are simple case conversions mapping a character to + * another character as specified in the Unicode data. The byte size of + * the mapped character could be different from that of the input character. + * + * The return value is the byte length of the returned character excluding + * the terminating null byte. + */ +static size_t +do_case_conv(int uv, uchar_t *u8s, uchar_t *s, int sz, boolean_t is_it_toupper) +{ + size_t i; + uint16_t b1 = 0; + uint16_t b2 = 0; + uint16_t b3 = 0; + uint16_t b3_tbl; + uint16_t b3_base; + uint16_t b4 = 0; + size_t start_id; + size_t end_id; + + /* + * At this point, the only possible values for sz are 2, 3, and 4. + * The u8s should point to a vector that is well beyond the size of + * 5 bytes. + */ + if (sz == 2) { + b3 = u8s[0] = s[0]; + b4 = u8s[1] = s[1]; + } else if (sz == 3) { + b2 = u8s[0] = s[0]; + b3 = u8s[1] = s[1]; + b4 = u8s[2] = s[2]; + } else if (sz == 4) { + b1 = u8s[0] = s[0]; + b2 = u8s[1] = s[1]; + b3 = u8s[2] = s[2]; + b4 = u8s[3] = s[3]; + } else { + /* This is not possible but just in case as a fallback. */ + if (is_it_toupper) + *u8s = U8_ASCII_TOUPPER(*s); + else + *u8s = U8_ASCII_TOLOWER(*s); + u8s[1] = '\0'; + + return (1); + } + u8s[sz] = '\0'; + + /* + * Let's find out if we have a corresponding character. + */ + b1 = u8_common_b1_tbl[uv][b1]; + if (b1 == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + b2 = u8_case_common_b2_tbl[uv][b1][b2]; + if (b2 == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + if (is_it_toupper) { + b3_tbl = u8_toupper_b3_tbl[uv][b2][b3].tbl_id; + if (b3_tbl == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + start_id = u8_toupper_b4_tbl[uv][b3_tbl][b4]; + end_id = u8_toupper_b4_tbl[uv][b3_tbl][b4 + 1]; + + /* Either there is no match or an error at the table. */ + if (start_id >= end_id || (end_id - start_id) > U8_MB_CUR_MAX) + return ((size_t)sz); + + b3_base = u8_toupper_b3_tbl[uv][b2][b3].base; + + for (i = 0; start_id < end_id; start_id++) + u8s[i++] = u8_toupper_final_tbl[uv][b3_base + start_id]; + } else { + b3_tbl = u8_tolower_b3_tbl[uv][b2][b3].tbl_id; + if (b3_tbl == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + start_id = u8_tolower_b4_tbl[uv][b3_tbl][b4]; + end_id = u8_tolower_b4_tbl[uv][b3_tbl][b4 + 1]; + + if (start_id >= end_id || (end_id - start_id) > U8_MB_CUR_MAX) + return ((size_t)sz); + + b3_base = u8_tolower_b3_tbl[uv][b2][b3].base; + + for (i = 0; start_id < end_id; start_id++) + u8s[i++] = u8_tolower_final_tbl[uv][b3_base + start_id]; + } + + /* + * If i is still zero, that means there is no corresponding character. + */ + if (i == 0) + return ((size_t)sz); + + u8s[i] = '\0'; + + return (i); +} + +/* + * The do_case_compare() function compares the two input strings, s1 and s2, + * one character at a time doing case conversions if applicable and return + * the comparison result as like strcmp(). + * + * Since, in empirical sense, most of text data are 7-bit ASCII characters, + * we treat the 7-bit ASCII characters as a special case trying to yield + * faster processing time. + */ +static int +do_case_compare(size_t uv, uchar_t *s1, uchar_t *s2, size_t n1, + size_t n2, boolean_t is_it_toupper, int *errnum) +{ + int f; + int sz1; + int sz2; + size_t j; + size_t i1; + size_t i2; + uchar_t u8s1[U8_MB_CUR_MAX + 1]; + uchar_t u8s2[U8_MB_CUR_MAX + 1]; + + i1 = i2 = 0; + while (i1 < n1 && i2 < n2) { + /* + * Find out what would be the byte length for this UTF-8 + * character at string s1 and also find out if this is + * an illegal start byte or not and if so, issue a proper + * error number and yet treat this byte as a character. + */ + sz1 = u8_number_of_bytes[*s1]; + if (sz1 < 0) { + *errnum = EILSEQ; + sz1 = 1; + } + + /* + * For 7-bit ASCII characters mainly, we do a quick case + * conversion right at here. + * + * If we don't have enough bytes for this character, issue + * an EINVAL error and use what are available. + * + * If we have enough bytes, find out if there is + * a corresponding uppercase character and if so, copy over + * the bytes for a comparison later. If there is no + * corresponding uppercase character, then, use what we have + * for the comparison. + */ + if (sz1 == 1) { + if (is_it_toupper) + u8s1[0] = U8_ASCII_TOUPPER(*s1); + else + u8s1[0] = U8_ASCII_TOLOWER(*s1); + s1++; + u8s1[1] = '\0'; + } else if ((i1 + sz1) > n1) { + *errnum = EINVAL; + for (j = 0; (i1 + j) < n1; ) + u8s1[j++] = *s1++; + u8s1[j] = '\0'; + } else { + (void) do_case_conv(uv, u8s1, s1, sz1, is_it_toupper); + s1 += sz1; + } + + /* Do the same for the string s2. */ + sz2 = u8_number_of_bytes[*s2]; + if (sz2 < 0) { + *errnum = EILSEQ; + sz2 = 1; + } + + if (sz2 == 1) { + if (is_it_toupper) + u8s2[0] = U8_ASCII_TOUPPER(*s2); + else + u8s2[0] = U8_ASCII_TOLOWER(*s2); + s2++; + u8s2[1] = '\0'; + } else if ((i2 + sz2) > n2) { + *errnum = EINVAL; + for (j = 0; (i2 + j) < n2; ) + u8s2[j++] = *s2++; + u8s2[j] = '\0'; + } else { + (void) do_case_conv(uv, u8s2, s2, sz2, is_it_toupper); + s2 += sz2; + } + + /* Now compare the two characters. */ + if (sz1 == 1 && sz2 == 1) { + if (*u8s1 > *u8s2) + return (1); + if (*u8s1 < *u8s2) + return (-1); + } else { + f = strcmp((const char *)u8s1, (const char *)u8s2); + if (f != 0) + return (f); + } + + /* + * They were the same. Let's move on to the next + * characters then. + */ + i1 += sz1; + i2 += sz2; + } + + /* + * We compared until the end of either or both strings. + * + * If we reached to or went over the ends for the both, that means + * they are the same. + * + * If we reached only one of the two ends, that means the other string + * has something which then the fact can be used to determine + * the return value. + */ + if (i1 >= n1) { + if (i2 >= n2) + return (0); + return (-1); + } + return (1); +} + +/* + * The combining_class() function checks on the given bytes and find out + * the corresponding Unicode combining class value. The return value 0 means + * it is a Starter. Any illegal UTF-8 character will also be treated as + * a Starter. + */ +static uchar_t +combining_class(size_t uv, uchar_t *s, size_t sz) +{ + uint16_t b1 = 0; + uint16_t b2 = 0; + uint16_t b3 = 0; + uint16_t b4 = 0; + + if (sz == 1 || sz > 4) + return (0); + + if (sz == 2) { + b3 = s[0]; + b4 = s[1]; + } else if (sz == 3) { + b2 = s[0]; + b3 = s[1]; + b4 = s[2]; + } else if (sz == 4) { + b1 = s[0]; + b2 = s[1]; + b3 = s[2]; + b4 = s[3]; + } + + b1 = u8_common_b1_tbl[uv][b1]; + if (b1 == U8_TBL_ELEMENT_NOT_DEF) + return (0); + + b2 = u8_combining_class_b2_tbl[uv][b1][b2]; + if (b2 == U8_TBL_ELEMENT_NOT_DEF) + return (0); + + b3 = u8_combining_class_b3_tbl[uv][b2][b3]; + if (b3 == U8_TBL_ELEMENT_NOT_DEF) + return (0); + + return (u8_combining_class_b4_tbl[uv][b3][b4]); +} + +/* + * The do_decomp() function finds out a matching decomposition if any + * and return. If there is no match, the input bytes are copied and returned. + * The function also checks if there is a Hangul, decomposes it if necessary + * and returns. + * + * To save time, a single byte 7-bit ASCII character should be handled by + * the caller. + * + * The function returns the number of bytes returned sans always terminating + * the null byte. It will also return a state that will tell if there was + * a Hangul character decomposed which then will be used by the caller. + */ +static size_t +do_decomp(size_t uv, uchar_t *u8s, uchar_t *s, int sz, + boolean_t canonical_decomposition, u8_normalization_states_t *state) +{ + uint16_t b1 = 0; + uint16_t b2 = 0; + uint16_t b3 = 0; + uint16_t b3_tbl; + uint16_t b3_base; + uint16_t b4 = 0; + size_t start_id; + size_t end_id; + size_t i; + uint32_t u1; + + if (sz == 2) { + b3 = u8s[0] = s[0]; + b4 = u8s[1] = s[1]; + u8s[2] = '\0'; + } else if (sz == 3) { + /* Convert it to a Unicode scalar value. */ + U8_PUT_3BYTES_INTO_UTF32(u1, s[0], s[1], s[2]); + + /* + * If this is a Hangul syllable, we decompose it into + * a leading consonant, a vowel, and an optional trailing + * consonant and then return. + */ + if (U8_HANGUL_SYLLABLE(u1)) { + u1 -= U8_HANGUL_SYL_FIRST; + + b1 = U8_HANGUL_JAMO_L_FIRST + u1 / U8_HANGUL_VT_COUNT; + b2 = U8_HANGUL_JAMO_V_FIRST + (u1 % U8_HANGUL_VT_COUNT) + / U8_HANGUL_T_COUNT; + b3 = u1 % U8_HANGUL_T_COUNT; + + U8_SAVE_HANGUL_AS_UTF8(u8s, 0, 1, 2, b1); + U8_SAVE_HANGUL_AS_UTF8(u8s, 3, 4, 5, b2); + if (b3) { + b3 += U8_HANGUL_JAMO_T_FIRST; + U8_SAVE_HANGUL_AS_UTF8(u8s, 6, 7, 8, b3); + + u8s[9] = '\0'; + *state = U8_STATE_HANGUL_LVT; + return (9); + } + + u8s[6] = '\0'; + *state = U8_STATE_HANGUL_LV; + return (6); + } + + b2 = u8s[0] = s[0]; + b3 = u8s[1] = s[1]; + b4 = u8s[2] = s[2]; + u8s[3] = '\0'; + + /* + * If this is a Hangul Jamo, we know there is nothing + * further that we can decompose. + */ + if (U8_HANGUL_JAMO_L(u1)) { + *state = U8_STATE_HANGUL_L; + return (3); + } + + if (U8_HANGUL_JAMO_V(u1)) { + if (*state == U8_STATE_HANGUL_L) + *state = U8_STATE_HANGUL_LV; + else + *state = U8_STATE_HANGUL_V; + return (3); + } + + if (U8_HANGUL_JAMO_T(u1)) { + if (*state == U8_STATE_HANGUL_LV) + *state = U8_STATE_HANGUL_LVT; + else + *state = U8_STATE_HANGUL_T; + return (3); + } + } else if (sz == 4) { + b1 = u8s[0] = s[0]; + b2 = u8s[1] = s[1]; + b3 = u8s[2] = s[2]; + b4 = u8s[3] = s[3]; + u8s[4] = '\0'; + } else { + /* + * This is a fallback and should not happen if the function + * was called properly. + */ + u8s[0] = s[0]; + u8s[1] = '\0'; + *state = U8_STATE_START; + return (1); + } + + /* + * At this point, this routine does not know what it would get. + * The caller should sort it out if the state isn't a Hangul one. + */ + *state = U8_STATE_START; + + /* Try to find matching decomposition mapping byte sequence. */ + b1 = u8_common_b1_tbl[uv][b1]; + if (b1 == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + b2 = u8_decomp_b2_tbl[uv][b1][b2]; + if (b2 == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + b3_tbl = u8_decomp_b3_tbl[uv][b2][b3].tbl_id; + if (b3_tbl == U8_TBL_ELEMENT_NOT_DEF) + return ((size_t)sz); + + /* + * If b3_tbl is bigger than or equal to U8_16BIT_TABLE_INDICATOR + * which is 0x8000, this means we couldn't fit the mappings into + * the cardinality of a unsigned byte. + */ + if (b3_tbl >= U8_16BIT_TABLE_INDICATOR) { + b3_tbl -= U8_16BIT_TABLE_INDICATOR; + start_id = u8_decomp_b4_16bit_tbl[uv][b3_tbl][b4]; + end_id = u8_decomp_b4_16bit_tbl[uv][b3_tbl][b4 + 1]; + } else { + start_id = u8_decomp_b4_tbl[uv][b3_tbl][b4]; + end_id = u8_decomp_b4_tbl[uv][b3_tbl][b4 + 1]; + } + + /* This also means there wasn't any matching decomposition. */ + if (start_id >= end_id) + return ((size_t)sz); + + /* + * The final table for decomposition mappings has three types of + * byte sequences depending on whether a mapping is for compatibility + * decomposition, canonical decomposition, or both like the following: + * + * (1) Compatibility decomposition mappings: + * + * +---+---+-...-+---+ + * | B0| B1| ... | Bm| + * +---+---+-...-+---+ + * + * The first byte, B0, is always less then 0xF5 (U8_DECOMP_BOTH). + * + * (2) Canonical decomposition mappings: + * + * +---+---+---+-...-+---+ + * | T | b0| b1| ... | bn| + * +---+---+---+-...-+---+ + * + * where the first byte, T, is 0xF6 (U8_DECOMP_CANONICAL). + * + * (3) Both mappings: + * + * +---+---+---+---+-...-+---+---+---+-...-+---+ + * | T | D | b0| b1| ... | bn| B0| B1| ... | Bm| + * +---+---+---+---+-...-+---+---+---+-...-+---+ + * + * where T is 0xF5 (U8_DECOMP_BOTH) and D is a displacement + * byte, b0 to bn are canonical mapping bytes and B0 to Bm are + * compatibility mapping bytes. + * + * Note that compatibility decomposition means doing recursive + * decompositions using both compatibility decomposition mappings and + * canonical decomposition mappings. On the other hand, canonical + * decomposition means doing recursive decompositions using only + * canonical decomposition mappings. Since the table we have has gone + * through the recursions already, we do not need to do so during + * runtime, i.e., the table has been completely flattened out + * already. + */ + + b3_base = u8_decomp_b3_tbl[uv][b2][b3].base; + + /* Get the type, T, of the byte sequence. */ + b1 = u8_decomp_final_tbl[uv][b3_base + start_id]; + + /* + * If necessary, adjust start_id, end_id, or both. Note that if + * this is compatibility decomposition mapping, there is no + * adjustment. + */ + if (canonical_decomposition) { + /* Is the mapping only for compatibility decomposition? */ + if (b1 < U8_DECOMP_BOTH) + return ((size_t)sz); + + start_id++; + + if (b1 == U8_DECOMP_BOTH) { + end_id = start_id + + u8_decomp_final_tbl[uv][b3_base + start_id]; + start_id++; + } + } else { + /* + * Unless this is a compatibility decomposition mapping, + * we adjust the start_id. + */ + if (b1 == U8_DECOMP_BOTH) { + start_id++; + start_id += u8_decomp_final_tbl[uv][b3_base + start_id]; + } else if (b1 == U8_DECOMP_CANONICAL) { + start_id++; + } + } + + for (i = 0; start_id < end_id; start_id++) + u8s[i++] = u8_decomp_final_tbl[uv][b3_base + start_id]; + u8s[i] = '\0'; + + return (i); +} + +/* + * The find_composition_start() function uses the character bytes given and + * find out the matching composition mappings if any and return the address + * to the composition mappings as explained in the do_composition(). + */ +static uchar_t * +find_composition_start(size_t uv, uchar_t *s, size_t sz) +{ + uint16_t b1 = 0; + uint16_t b2 = 0; + uint16_t b3 = 0; + uint16_t b3_tbl; + uint16_t b3_base; + uint16_t b4 = 0; + size_t start_id; + size_t end_id; + + if (sz == 1) { + b4 = s[0]; + } else if (sz == 2) { + b3 = s[0]; + b4 = s[1]; + } else if (sz == 3) { + b2 = s[0]; + b3 = s[1]; + b4 = s[2]; + } else if (sz == 4) { + b1 = s[0]; + b2 = s[1]; + b3 = s[2]; + b4 = s[3]; + } else { + /* + * This is a fallback and should not happen if the function + * was called properly. + */ + return (NULL); + } + + b1 = u8_composition_b1_tbl[uv][b1]; + if (b1 == U8_TBL_ELEMENT_NOT_DEF) + return (NULL); + + b2 = u8_composition_b2_tbl[uv][b1][b2]; + if (b2 == U8_TBL_ELEMENT_NOT_DEF) + return (NULL); + + b3_tbl = u8_composition_b3_tbl[uv][b2][b3].tbl_id; + if (b3_tbl == U8_TBL_ELEMENT_NOT_DEF) + return (NULL); + + if (b3_tbl >= U8_16BIT_TABLE_INDICATOR) { + b3_tbl -= U8_16BIT_TABLE_INDICATOR; + start_id = u8_composition_b4_16bit_tbl[uv][b3_tbl][b4]; + end_id = u8_composition_b4_16bit_tbl[uv][b3_tbl][b4 + 1]; + } else { + start_id = u8_composition_b4_tbl[uv][b3_tbl][b4]; + end_id = u8_composition_b4_tbl[uv][b3_tbl][b4 + 1]; + } + + if (start_id >= end_id) + return (NULL); + + b3_base = u8_composition_b3_tbl[uv][b2][b3].base; + + return ((uchar_t *)&(u8_composition_final_tbl[uv][b3_base + start_id])); +} + +/* + * The blocked() function checks on the combining class values of previous + * characters in this sequence and return whether it is blocked or not. + */ +static boolean_t +blocked(uchar_t *comb_class, size_t last) +{ + uchar_t my_comb_class; + size_t i; + + my_comb_class = comb_class[last]; + for (i = 1; i < last; i++) + if (comb_class[i] >= my_comb_class || + comb_class[i] == U8_COMBINING_CLASS_STARTER) + return (B_TRUE); + + return (B_FALSE); +} + +/* + * The do_composition() reads the character string pointed by 's' and + * do necessary canonical composition and then copy over the result back to + * the 's'. + * + * The input argument 's' cannot contain more than 32 characters. + */ +static size_t +do_composition(size_t uv, uchar_t *s, uchar_t *comb_class, uchar_t *start, + uchar_t *disp, size_t last, uchar_t **os, uchar_t *oslast) +{ + uchar_t t[U8_STREAM_SAFE_TEXT_MAX + 1]; + uchar_t tc[U8_MB_CUR_MAX] = { '\0' }; + uint8_t saved_marks[U8_MAX_CHARS_A_SEQ]; + size_t saved_marks_count; + uchar_t *p; + uchar_t *saved_p; + uchar_t *q; + size_t i; + size_t saved_i; + size_t j; + size_t k; + size_t l; + size_t C; + size_t saved_l; + size_t size; + uint32_t u1; + uint32_t u2; + boolean_t match_not_found = B_TRUE; + + /* + * This should never happen unless the callers are doing some strange + * and unexpected things. + * + * The "last" is the index pointing to the last character not last + 1. + */ + if (last >= U8_MAX_CHARS_A_SEQ) + last = U8_UPPER_LIMIT_IN_A_SEQ; + + for (i = l = 0; i <= last; i++) { + /* + * The last or any non-Starters at the beginning, we don't + * have any chance to do composition and so we just copy them + * to the temporary buffer. + */ + if (i >= last || comb_class[i] != U8_COMBINING_CLASS_STARTER) { +SAVE_THE_CHAR: + p = s + start[i]; + size = disp[i]; + for (k = 0; k < size; k++) + t[l++] = *p++; + continue; + } + + /* + * If this could be a start of Hangul Jamos, then, we try to + * conjoin them. + */ + if (s[start[i]] == U8_HANGUL_JAMO_1ST_BYTE) { + U8_PUT_3BYTES_INTO_UTF32(u1, s[start[i]], + s[start[i] + 1], s[start[i] + 2]); + U8_PUT_3BYTES_INTO_UTF32(u2, s[start[i] + 3], + s[start[i] + 4], s[start[i] + 5]); + + if (U8_HANGUL_JAMO_L(u1) && U8_HANGUL_JAMO_V(u2)) { + u1 -= U8_HANGUL_JAMO_L_FIRST; + u2 -= U8_HANGUL_JAMO_V_FIRST; + u1 = U8_HANGUL_SYL_FIRST + + (u1 * U8_HANGUL_V_COUNT + u2) * + U8_HANGUL_T_COUNT; + + i += 2; + if (i <= last) { + U8_PUT_3BYTES_INTO_UTF32(u2, + s[start[i]], s[start[i] + 1], + s[start[i] + 2]); + + if (U8_HANGUL_JAMO_T(u2)) { + u1 += u2 - + U8_HANGUL_JAMO_T_FIRST; + i++; + } + } + + U8_SAVE_HANGUL_AS_UTF8(t + l, 0, 1, 2, u1); + i--; + l += 3; + continue; + } + } + + /* + * Let's then find out if this Starter has composition + * mapping. + */ + p = find_composition_start(uv, s + start[i], disp[i]); + if (p == NULL) + goto SAVE_THE_CHAR; + + /* + * We have a Starter with composition mapping and the next + * character is a non-Starter. Let's try to find out if + * we can do composition. + */ + + saved_p = p; + saved_i = i; + saved_l = l; + saved_marks_count = 0; + +TRY_THE_NEXT_MARK: + q = s + start[++i]; + size = disp[i]; + + /* + * The next for() loop compares the non-Starter pointed by + * 'q' with the possible (joinable) characters pointed by 'p'. + * + * The composition final table entry pointed by the 'p' + * looks like the following: + * + * +---+---+---+-...-+---+---+---+---+-...-+---+---+ + * | C | b0| b2| ... | bn| F | B0| B1| ... | Bm| F | + * +---+---+---+-...-+---+---+---+---+-...-+---+---+ + * + * where C is the count byte indicating the number of + * mapping pairs where each pair would be look like + * (b0-bn F, B0-Bm F). The b0-bn are the bytes of the second + * character of a canonical decomposition and the B0-Bm are + * the bytes of a matching composite character. The F is + * a filler byte after each character as the separator. + */ + + match_not_found = B_TRUE; + + for (C = *p++; C > 0; C--) { + for (k = 0; k < size; p++, k++) + if (*p != q[k]) + break; + + /* Have we found it? */ + if (k >= size && *p == U8_TBL_ELEMENT_FILLER) { + match_not_found = B_FALSE; + + l = saved_l; + + while (*++p != U8_TBL_ELEMENT_FILLER) + t[l++] = *p; + + break; + } + + /* We didn't find; skip to the next pair. */ + if (*p != U8_TBL_ELEMENT_FILLER) + while (*++p != U8_TBL_ELEMENT_FILLER) + ; + while (*++p != U8_TBL_ELEMENT_FILLER) + ; + p++; + } + + /* + * If there was no match, we will need to save the combining + * mark for later appending. After that, if the next one + * is a non-Starter and not blocked, then, we try once + * again to do composition with the next non-Starter. + * + * If there was no match and this was a Starter, then, + * this is a new start. + * + * If there was a match and a composition done and we have + * more to check on, then, we retrieve a new composition final + * table entry for the composite and then try to do the + * composition again. + */ + + if (match_not_found) { + if (comb_class[i] == U8_COMBINING_CLASS_STARTER) { + i--; + goto SAVE_THE_CHAR; + } + + saved_marks[saved_marks_count++] = i; + } + + if (saved_l == l) { + while (i < last) { + if (blocked(comb_class, i + 1)) + saved_marks[saved_marks_count++] = ++i; + else + break; + } + if (i < last) { + p = saved_p; + goto TRY_THE_NEXT_MARK; + } + } else if (i < last) { + p = find_composition_start(uv, t + saved_l, + l - saved_l); + if (p != NULL) { + saved_p = p; + goto TRY_THE_NEXT_MARK; + } + } + + /* + * There is no more composition possible. + * + * If there was no composition what so ever then we copy + * over the original Starter and then append any non-Starters + * remaining at the target string sequentially after that. + */ + + if (saved_l == l) { + p = s + start[saved_i]; + size = disp[saved_i]; + for (j = 0; j < size; j++) + t[l++] = *p++; + } + + for (k = 0; k < saved_marks_count; k++) { + p = s + start[saved_marks[k]]; + size = disp[saved_marks[k]]; + for (j = 0; j < size; j++) + t[l++] = *p++; + } + } + + /* + * If the last character is a Starter and if we have a character + * (possibly another Starter) that can be turned into a composite, + * we do so and we do so until there is no more of composition + * possible. + */ + if (comb_class[last] == U8_COMBINING_CLASS_STARTER) { + p = *os; + saved_l = l - disp[last]; + + while (p < oslast) { + size = u8_number_of_bytes[*p]; + if (size <= 1 || (p + size) > oslast) + break; + + saved_p = p; + + for (i = 0; i < size; i++) + tc[i] = *p++; + + q = find_composition_start(uv, t + saved_l, + l - saved_l); + if (q == NULL) { + p = saved_p; + break; + } + + match_not_found = B_TRUE; + + for (C = *q++; C > 0; C--) { + for (k = 0; k < size; q++, k++) + if (*q != tc[k]) + break; + + if (k >= size && *q == U8_TBL_ELEMENT_FILLER) { + match_not_found = B_FALSE; + + l = saved_l; + + while (*++q != U8_TBL_ELEMENT_FILLER) { + /* + * This is practically + * impossible but we don't + * want to take any chances. + */ + if (l >= + U8_STREAM_SAFE_TEXT_MAX) { + p = saved_p; + goto SAFE_RETURN; + } + t[l++] = *q; + } + + break; + } + + if (*q != U8_TBL_ELEMENT_FILLER) + while (*++q != U8_TBL_ELEMENT_FILLER) + ; + while (*++q != U8_TBL_ELEMENT_FILLER) + ; + q++; + } + + if (match_not_found) { + p = saved_p; + break; + } + } +SAFE_RETURN: + *os = p; + } + + /* + * Now we copy over the temporary string to the target string. + * Since composition always reduces the number of characters or + * the number of characters stay, we don't need to worry about + * the buffer overflow here. + */ + for (i = 0; i < l; i++) + s[i] = t[i]; + s[l] = '\0'; + + return (l); +} + +/* + * The collect_a_seq() function checks on the given string s, collect + * a sequence of characters at u8s, and return the sequence. While it collects + * a sequence, it also applies case conversion, canonical or compatibility + * decomposition, canonical decomposition, or some or all of them and + * in that order. + * + * The collected sequence cannot be bigger than 32 characters since if + * it is having more than 31 characters, the sequence will be terminated + * with a U+034F COMBINING GRAPHEME JOINER (CGJ) character and turned into + * a Stream-Safe Text. The collected sequence is always terminated with + * a null byte and the return value is the byte length of the sequence + * including 0. The return value does not include the terminating + * null byte. + */ +static size_t +collect_a_seq(size_t uv, uchar_t *u8s, uchar_t **source, uchar_t *slast, + boolean_t is_it_toupper, boolean_t is_it_tolower, + boolean_t canonical_decomposition, boolean_t compatibility_decomposition, + boolean_t canonical_composition, + int *errnum, u8_normalization_states_t *state) +{ + uchar_t *s; + int sz; + int saved_sz; + size_t i; + size_t j; + size_t k; + size_t l; + uchar_t comb_class[U8_MAX_CHARS_A_SEQ]; + uchar_t disp[U8_MAX_CHARS_A_SEQ]; + uchar_t start[U8_MAX_CHARS_A_SEQ]; + uchar_t u8t[U8_MB_CUR_MAX] = { '\0' }; + uchar_t uts[U8_STREAM_SAFE_TEXT_MAX + 1]; + uchar_t tc; + size_t last; + size_t saved_last; + uint32_t u1; + + /* + * Save the source string pointer which we will return a changed + * pointer if we do processing. + */ + s = *source; + + /* + * The following is a fallback for just in case callers are not + * checking the string boundaries before the calling. + */ + if (s >= slast) { + u8s[0] = '\0'; + + return (0); + } + + /* + * As the first thing, let's collect a character and do case + * conversion if necessary. + */ + + sz = u8_number_of_bytes[*s]; + + if (sz < 0) { + *errnum = EILSEQ; + + u8s[0] = *s++; + u8s[1] = '\0'; + + *source = s; + + return (1); + } + + if (sz == 1) { + if (is_it_toupper) + u8s[0] = U8_ASCII_TOUPPER(*s); + else if (is_it_tolower) + u8s[0] = U8_ASCII_TOLOWER(*s); + else + u8s[0] = *s; + s++; + u8s[1] = '\0'; + } else if ((s + sz) > slast) { + *errnum = EINVAL; + + for (i = 0; s < slast; ) + u8s[i++] = *s++; + u8s[i] = '\0'; + + *source = s; + + return (i); + } else { + if (is_it_toupper || is_it_tolower) { + i = do_case_conv(uv, u8s, s, sz, is_it_toupper); + s += sz; + sz = i; + } else { + for (i = 0; i < sz; ) + u8s[i++] = *s++; + u8s[i] = '\0'; + } + } + + /* + * And then canonical/compatibility decomposition followed by + * an optional canonical composition. Please be noted that + * canonical composition is done only when a decomposition is + * done. + */ + if (canonical_decomposition || compatibility_decomposition) { + if (sz == 1) { + *state = U8_STATE_START; + + saved_sz = 1; + + comb_class[0] = 0; + start[0] = 0; + disp[0] = 1; + + last = 1; + } else { + saved_sz = do_decomp(uv, u8s, u8s, sz, + canonical_decomposition, state); + + last = 0; + + for (i = 0; i < saved_sz; ) { + sz = u8_number_of_bytes[u8s[i]]; + + comb_class[last] = combining_class(uv, + u8s + i, sz); + start[last] = i; + disp[last] = sz; + + last++; + i += sz; + } + + /* + * Decomposition yields various Hangul related + * states but not on combining marks. We need to + * find out at here by checking on the last + * character. + */ + if (*state == U8_STATE_START) { + if (comb_class[last - 1]) + *state = U8_STATE_COMBINING_MARK; + } + } + + saved_last = last; + + while (s < slast) { + sz = u8_number_of_bytes[*s]; + + /* + * If this is an illegal character, an incomplete + * character, or an 7-bit ASCII Starter character, + * then we have collected a sequence; break and let + * the next call deal with the two cases. + * + * Note that this is okay only if you are using this + * function with a fixed length string, not on + * a buffer with multiple calls of one chunk at a time. + */ + if (sz <= 1) { + break; + } else if ((s + sz) > slast) { + break; + } else { + /* + * If the previous character was a Hangul Jamo + * and this character is a Hangul Jamo that + * can be conjoined, we collect the Jamo. + */ + if (*s == U8_HANGUL_JAMO_1ST_BYTE) { + U8_PUT_3BYTES_INTO_UTF32(u1, + *s, *(s + 1), *(s + 2)); + + if (U8_HANGUL_COMPOSABLE_L_V(*state, + u1)) { + i = 0; + *state = U8_STATE_HANGUL_LV; + goto COLLECT_A_HANGUL; + } + + if (U8_HANGUL_COMPOSABLE_LV_T(*state, + u1)) { + i = 0; + *state = U8_STATE_HANGUL_LVT; + goto COLLECT_A_HANGUL; + } + } + + /* + * Regardless of whatever it was, if this is + * a Starter, we don't collect the character + * since that's a new start and we will deal + * with it at the next time. + */ + i = combining_class(uv, s, sz); + if (i == U8_COMBINING_CLASS_STARTER) + break; + + /* + * We know the current character is a combining + * mark. If the previous character wasn't + * a Starter (not Hangul) or a combining mark, + * then, we don't collect this combining mark. + */ + if (*state != U8_STATE_START && + *state != U8_STATE_COMBINING_MARK) + break; + + *state = U8_STATE_COMBINING_MARK; +COLLECT_A_HANGUL: + /* + * If we collected a Starter and combining + * marks up to 30, i.e., total 31 characters, + * then, we terminate this degenerately long + * combining sequence with a U+034F COMBINING + * GRAPHEME JOINER (CGJ) which is 0xCD 0x8F in + * UTF-8 and turn this into a Stream-Safe + * Text. This will be extremely rare but + * possible. + * + * The following will also guarantee that + * we are not writing more than 32 characters + * plus a NULL at u8s[]. + */ + if (last >= U8_UPPER_LIMIT_IN_A_SEQ) { +TURN_STREAM_SAFE: + *state = U8_STATE_START; + comb_class[last] = 0; + start[last] = saved_sz; + disp[last] = 2; + last++; + + u8s[saved_sz++] = 0xCD; + u8s[saved_sz++] = 0x8F; + + break; + } + + /* + * Some combining marks also do decompose into + * another combining mark or marks. + */ + if (*state == U8_STATE_COMBINING_MARK) { + k = last; + l = sz; + i = do_decomp(uv, uts, s, sz, + canonical_decomposition, state); + for (j = 0; j < i; ) { + sz = u8_number_of_bytes[uts[j]]; + + comb_class[last] = + combining_class(uv, + uts + j, sz); + start[last] = saved_sz + j; + disp[last] = sz; + + last++; + if (last >= + U8_UPPER_LIMIT_IN_A_SEQ) { + last = k; + goto TURN_STREAM_SAFE; + } + j += sz; + } + + *state = U8_STATE_COMBINING_MARK; + sz = i; + s += l; + + for (i = 0; i < sz; i++) + u8s[saved_sz++] = uts[i]; + } else { + comb_class[last] = i; + start[last] = saved_sz; + disp[last] = sz; + last++; + + for (i = 0; i < sz; i++) + u8s[saved_sz++] = *s++; + } + + /* + * If this is U+0345 COMBINING GREEK + * YPOGEGRAMMENI (0xCD 0x85 in UTF-8), a.k.a., + * iota subscript, and need to be converted to + * uppercase letter, convert it to U+0399 GREEK + * CAPITAL LETTER IOTA (0xCE 0x99 in UTF-8), + * i.e., convert to capital adscript form as + * specified in the Unicode standard. + * + * This is the only special case of (ambiguous) + * case conversion at combining marks and + * probably the standard will never have + * anything similar like this in future. + */ + if (is_it_toupper && sz >= 2 && + u8s[saved_sz - 2] == 0xCD && + u8s[saved_sz - 1] == 0x85) { + u8s[saved_sz - 2] = 0xCE; + u8s[saved_sz - 1] = 0x99; + } + } + } + + /* + * Let's try to ensure a canonical ordering for the collected + * combining marks. We do this only if we have collected + * at least one more non-Starter. (The decomposition mapping + * data tables have fully (and recursively) expanded and + * canonically ordered decompositions.) + * + * The U8_SWAP_COMB_MARKS() convenience macro has some + * assumptions and we are meeting the assumptions. + */ + last--; + if (last >= saved_last) { + for (i = 0; i < last; i++) + for (j = last; j > i; j--) + if (comb_class[j] && + comb_class[j - 1] > comb_class[j]) { + U8_SWAP_COMB_MARKS(j - 1, j); + } + } + + *source = s; + + if (! canonical_composition) { + u8s[saved_sz] = '\0'; + return (saved_sz); + } + + /* + * Now do the canonical composition. Note that we do this + * only after a canonical or compatibility decomposition to + * finish up NFC or NFKC. + */ + sz = do_composition(uv, u8s, comb_class, start, disp, last, + &s, slast); + } + + *source = s; + + return ((size_t)sz); +} + +/* + * The do_norm_compare() function does string comparion based on Unicode + * simple case mappings and Unicode Normalization definitions. + * + * It does so by collecting a sequence of character at a time and comparing + * the collected sequences from the strings. + * + * The meanings on the return values are the same as the usual strcmp(). + */ +static int +do_norm_compare(size_t uv, uchar_t *s1, uchar_t *s2, size_t n1, size_t n2, + int flag, int *errnum) +{ + int result; + size_t sz1; + size_t sz2; + uchar_t u8s1[U8_STREAM_SAFE_TEXT_MAX + 1]; + uchar_t u8s2[U8_STREAM_SAFE_TEXT_MAX + 1]; + uchar_t *s1last; + uchar_t *s2last; + boolean_t is_it_toupper; + boolean_t is_it_tolower; + boolean_t canonical_decomposition; + boolean_t compatibility_decomposition; + boolean_t canonical_composition; + u8_normalization_states_t state; + + s1last = s1 + n1; + s2last = s2 + n2; + + is_it_toupper = flag & U8_TEXTPREP_TOUPPER; + is_it_tolower = flag & U8_TEXTPREP_TOLOWER; + canonical_decomposition = flag & U8_CANON_DECOMP; + compatibility_decomposition = flag & U8_COMPAT_DECOMP; + canonical_composition = flag & U8_CANON_COMP; + + while (s1 < s1last && s2 < s2last) { + /* + * If the current character is a 7-bit ASCII and the last + * character, or, if the current character and the next + * character are both some 7-bit ASCII characters then + * we treat the current character as a sequence. + * + * In any other cases, we need to call collect_a_seq(). + */ + + if (U8_ISASCII(*s1) && ((s1 + 1) >= s1last || + ((s1 + 1) < s1last && U8_ISASCII(*(s1 + 1))))) { + if (is_it_toupper) + u8s1[0] = U8_ASCII_TOUPPER(*s1); + else if (is_it_tolower) + u8s1[0] = U8_ASCII_TOLOWER(*s1); + else + u8s1[0] = *s1; + u8s1[1] = '\0'; + sz1 = 1; + s1++; + } else { + state = U8_STATE_START; + sz1 = collect_a_seq(uv, u8s1, &s1, s1last, + is_it_toupper, is_it_tolower, + canonical_decomposition, + compatibility_decomposition, + canonical_composition, errnum, &state); + } + + if (U8_ISASCII(*s2) && ((s2 + 1) >= s2last || + ((s2 + 1) < s2last && U8_ISASCII(*(s2 + 1))))) { + if (is_it_toupper) + u8s2[0] = U8_ASCII_TOUPPER(*s2); + else if (is_it_tolower) + u8s2[0] = U8_ASCII_TOLOWER(*s2); + else + u8s2[0] = *s2; + u8s2[1] = '\0'; + sz2 = 1; + s2++; + } else { + state = U8_STATE_START; + sz2 = collect_a_seq(uv, u8s2, &s2, s2last, + is_it_toupper, is_it_tolower, + canonical_decomposition, + compatibility_decomposition, + canonical_composition, errnum, &state); + } + + /* + * Now compare the two characters. If they are the same, + * we move on to the next character sequences. + */ + if (sz1 == 1 && sz2 == 1) { + if (*u8s1 > *u8s2) + return (1); + if (*u8s1 < *u8s2) + return (-1); + } else { + result = strcmp((const char *)u8s1, (const char *)u8s2); + if (result != 0) + return (result); + } + } + + /* + * We compared until the end of either or both strings. + * + * If we reached to or went over the ends for the both, that means + * they are the same. + * + * If we reached only one end, that means the other string has + * something which then can be used to determine the return value. + */ + if (s1 >= s1last) { + if (s2 >= s2last) + return (0); + return (-1); + } + return (1); +} + +/* + * The u8_strcmp() function compares two UTF-8 strings quite similar to + * the strcmp(). For the comparison, however, Unicode Normalization specific + * equivalency and Unicode simple case conversion mappings based equivalency + * can be requested and checked against. + */ +int +u8_strcmp(const char *s1, const char *s2, size_t n, int flag, size_t uv, + int *errnum) +{ + int f; + size_t n1; + size_t n2; + + *errnum = 0; + + /* + * Check on the requested Unicode version, case conversion, and + * normalization flag values. + */ + + if (uv > U8_UNICODE_LATEST) { + *errnum = ERANGE; + uv = U8_UNICODE_LATEST; + } + + if (flag == 0) { + flag = U8_STRCMP_CS; + } else { + f = flag & (U8_STRCMP_CS | U8_STRCMP_CI_UPPER | + U8_STRCMP_CI_LOWER); + if (f == 0) { + flag |= U8_STRCMP_CS; + } else if (f != U8_STRCMP_CS && f != U8_STRCMP_CI_UPPER && + f != U8_STRCMP_CI_LOWER) { + *errnum = EBADF; + flag = U8_STRCMP_CS; + } + + f = flag & (U8_CANON_DECOMP | U8_COMPAT_DECOMP | U8_CANON_COMP); + if (f && f != U8_STRCMP_NFD && f != U8_STRCMP_NFC && + f != U8_STRCMP_NFKD && f != U8_STRCMP_NFKC) { + *errnum = EBADF; + flag = U8_STRCMP_CS; + } + } + + if (flag == U8_STRCMP_CS) { + return (n == 0 ? strcmp(s1, s2) : strncmp(s1, s2, n)); + } + + n1 = strlen(s1); + n2 = strlen(s2); + if (n != 0) { + if (n < n1) + n1 = n; + if (n < n2) + n2 = n; + } + + /* + * Simple case conversion can be done much faster and so we do + * them separately here. + */ + if (flag == U8_STRCMP_CI_UPPER) { + return (do_case_compare(uv, (uchar_t *)s1, (uchar_t *)s2, + n1, n2, B_TRUE, errnum)); + } else if (flag == U8_STRCMP_CI_LOWER) { + return (do_case_compare(uv, (uchar_t *)s1, (uchar_t *)s2, + n1, n2, B_FALSE, errnum)); + } + + return (do_norm_compare(uv, (uchar_t *)s1, (uchar_t *)s2, n1, n2, + flag, errnum)); +} + +size_t +u8_textprep_str(char *inarray, size_t *inlen, char *outarray, size_t *outlen, + int flag, size_t unicode_version, int *errnum) +{ + int f; + int sz; + uchar_t *ib; + uchar_t *ibtail; + uchar_t *ob; + uchar_t *obtail; + boolean_t do_not_ignore_null; + boolean_t do_not_ignore_invalid; + boolean_t is_it_toupper; + boolean_t is_it_tolower; + boolean_t canonical_decomposition; + boolean_t compatibility_decomposition; + boolean_t canonical_composition; + size_t ret_val; + size_t i; + size_t j; + uchar_t u8s[U8_STREAM_SAFE_TEXT_MAX + 1]; + u8_normalization_states_t state; + + if (unicode_version > U8_UNICODE_LATEST) { + *errnum = ERANGE; + return ((size_t)-1); + } + + f = flag & (U8_TEXTPREP_TOUPPER | U8_TEXTPREP_TOLOWER); + if (f == (U8_TEXTPREP_TOUPPER | U8_TEXTPREP_TOLOWER)) { + *errnum = EBADF; + return ((size_t)-1); + } + + f = flag & (U8_CANON_DECOMP | U8_COMPAT_DECOMP | U8_CANON_COMP); + if (f && f != U8_TEXTPREP_NFD && f != U8_TEXTPREP_NFC && + f != U8_TEXTPREP_NFKD && f != U8_TEXTPREP_NFKC) { + *errnum = EBADF; + return ((size_t)-1); + } + + if (inarray == NULL || *inlen == 0) + return (0); + + if (outarray == NULL) { + *errnum = E2BIG; + return ((size_t)-1); + } + + ib = (uchar_t *)inarray; + ob = (uchar_t *)outarray; + ibtail = ib + *inlen; + obtail = ob + *outlen; + + do_not_ignore_null = !(flag & U8_TEXTPREP_IGNORE_NULL); + do_not_ignore_invalid = !(flag & U8_TEXTPREP_IGNORE_INVALID); + is_it_toupper = flag & U8_TEXTPREP_TOUPPER; + is_it_tolower = flag & U8_TEXTPREP_TOLOWER; + + ret_val = 0; + + /* + * If we don't have a normalization flag set, we do the simple case + * conversion based text preparation separately below. Text + * preparation involving Normalization will be done in the false task + * block, again, separately since it will take much more time and + * resource than doing simple case conversions. + */ + if (f == 0) { + while (ib < ibtail) { + if (*ib == '\0' && do_not_ignore_null) + break; + + sz = u8_number_of_bytes[*ib]; + + if (sz < 0) { + if (do_not_ignore_invalid) { + *errnum = EILSEQ; + ret_val = (size_t)-1; + break; + } + + sz = 1; + ret_val++; + } + + if (sz == 1) { + if (ob >= obtail) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + if (is_it_toupper) + *ob = U8_ASCII_TOUPPER(*ib); + else if (is_it_tolower) + *ob = U8_ASCII_TOLOWER(*ib); + else + *ob = *ib; + ib++; + ob++; + } else if ((ib + sz) > ibtail) { + if (do_not_ignore_invalid) { + *errnum = EINVAL; + ret_val = (size_t)-1; + break; + } + + if ((obtail - ob) < (ibtail - ib)) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + /* + * We treat the remaining incomplete character + * bytes as a character. + */ + ret_val++; + + while (ib < ibtail) + *ob++ = *ib++; + } else { + if (is_it_toupper || is_it_tolower) { + i = do_case_conv(unicode_version, u8s, + ib, sz, is_it_toupper); + + if ((obtail - ob) < i) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + ib += sz; + + for (sz = 0; sz < i; sz++) + *ob++ = u8s[sz]; + } else { + if ((obtail - ob) < sz) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + for (i = 0; i < sz; i++) + *ob++ = *ib++; + } + } + } + } else { + canonical_decomposition = flag & U8_CANON_DECOMP; + compatibility_decomposition = flag & U8_COMPAT_DECOMP; + canonical_composition = flag & U8_CANON_COMP; + + while (ib < ibtail) { + if (*ib == '\0' && do_not_ignore_null) + break; + + /* + * If the current character is a 7-bit ASCII + * character and it is the last character, or, + * if the current character is a 7-bit ASCII + * character and the next character is also a 7-bit + * ASCII character, then, we copy over this + * character without going through collect_a_seq(). + * + * In any other cases, we need to look further with + * the collect_a_seq() function. + */ + if (U8_ISASCII(*ib) && ((ib + 1) >= ibtail || + ((ib + 1) < ibtail && U8_ISASCII(*(ib + 1))))) { + if (ob >= obtail) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + if (is_it_toupper) + *ob = U8_ASCII_TOUPPER(*ib); + else if (is_it_tolower) + *ob = U8_ASCII_TOLOWER(*ib); + else + *ob = *ib; + ib++; + ob++; + } else { + *errnum = 0; + state = U8_STATE_START; + + j = collect_a_seq(unicode_version, u8s, + &ib, ibtail, + is_it_toupper, + is_it_tolower, + canonical_decomposition, + compatibility_decomposition, + canonical_composition, + errnum, &state); + + if (*errnum && do_not_ignore_invalid) { + ret_val = (size_t)-1; + break; + } + + if ((obtail - ob) < j) { + *errnum = E2BIG; + ret_val = (size_t)-1; + break; + } + + for (i = 0; i < j; i++) + *ob++ = u8s[i]; + } + } + } + + *inlen = ibtail - ib; + *outlen = obtail - ob; + + return (ret_val); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +static int __init +unicode_init(void) +{ + return (0); +} + +static void __exit +unicode_fini(void) +{ +} + +module_init(unicode_init); +module_exit(unicode_fini); + +MODULE_DESCRIPTION("Unicode implementation"); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE(ZFS_META_LICENSE); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); + +EXPORT_SYMBOL(u8_validate); +EXPORT_SYMBOL(u8_strcmp); +EXPORT_SYMBOL(u8_textprep_str); +#endif --- linux-aws-4.15.0.orig/zfs/module/unicode/uconv.c +++ linux-aws-4.15.0/zfs/module/unicode/uconv.c @@ -0,0 +1,864 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + + +/* + * Unicode encoding conversion functions among UTF-8, UTF-16, and UTF-32. + * (PSARC/2005/446, PSARC/2007/038, PSARC/2007/517) + * Man pages: uconv_u16tou32(9F), uconv_u16tou8(9F), uconv_u32tou16(9F), + * uconv_u32tou8(9F), uconv_u8tou16(9F), and uconv_u8tou32(9F). See also + * the section 3C man pages. + * Interface stability: Committed + */ + +#include +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#else +#include +#endif /* _KERNEL */ +#include +#include + + +/* + * The max and min values of high and low surrogate pairs of UTF-16, + * UTF-16 bit shift value, bit mask, and starting value outside of BMP. + */ +#define UCONV_U16_HI_MIN (0xd800U) +#define UCONV_U16_HI_MAX (0xdbffU) +#define UCONV_U16_LO_MIN (0xdc00U) +#define UCONV_U16_LO_MAX (0xdfffU) +#define UCONV_U16_BIT_SHIFT (0x0400U) +#define UCONV_U16_BIT_MASK (0x0fffffU) +#define UCONV_U16_START (0x010000U) + +/* The maximum value of Unicode coding space and ASCII coding space. */ +#define UCONV_UNICODE_MAX (0x10ffffU) +#define UCONV_ASCII_MAX (0x7fU) + +/* The mask values for input and output endians. */ +#define UCONV_IN_ENDIAN_MASKS (UCONV_IN_BIG_ENDIAN | UCONV_IN_LITTLE_ENDIAN) +#define UCONV_OUT_ENDIAN_MASKS (UCONV_OUT_BIG_ENDIAN | UCONV_OUT_LITTLE_ENDIAN) + +/* Native and reversed endian macros. */ +#ifdef _BIG_ENDIAN +#define UCONV_IN_NAT_ENDIAN UCONV_IN_BIG_ENDIAN +#define UCONV_IN_REV_ENDIAN UCONV_IN_LITTLE_ENDIAN +#define UCONV_OUT_NAT_ENDIAN UCONV_OUT_BIG_ENDIAN +#define UCONV_OUT_REV_ENDIAN UCONV_OUT_LITTLE_ENDIAN +#else +#define UCONV_IN_NAT_ENDIAN UCONV_IN_LITTLE_ENDIAN +#define UCONV_IN_REV_ENDIAN UCONV_IN_BIG_ENDIAN +#define UCONV_OUT_NAT_ENDIAN UCONV_OUT_LITTLE_ENDIAN +#define UCONV_OUT_REV_ENDIAN UCONV_OUT_BIG_ENDIAN +#endif /* _BIG_ENDIAN */ + +/* The Byte Order Mark (BOM) character in normal and reversed byte orderings. */ +#define UCONV_BOM_NORMAL (0xfeffU) +#define UCONV_BOM_SWAPPED (0xfffeU) +#define UCONV_BOM_SWAPPED_32 (0xfffe0000U) + +/* UTF-32 boundaries based on UTF-8 character byte lengths. */ +#define UCONV_U8_ONE_BYTE (0x7fU) +#define UCONV_U8_TWO_BYTES (0x7ffU) +#define UCONV_U8_THREE_BYTES (0xffffU) +#define UCONV_U8_FOUR_BYTES (0x10ffffU) + +/* The common minimum and maximum values at the UTF-8 character bytes. */ +#define UCONV_U8_BYTE_MIN (0x80U) +#define UCONV_U8_BYTE_MAX (0xbfU) + +/* + * The following "6" and "0x3f" came from "10xx xxxx" bit representation of + * UTF-8 character bytes. + */ +#define UCONV_U8_BIT_SHIFT 6 +#define UCONV_U8_BIT_MASK 0x3f + +/* + * The following vector shows remaining bytes in a UTF-8 character. + * Index will be the first byte of the character. + */ +static const uchar_t remaining_bytes_tbl[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + +/* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +/* D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + +/* E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + +/* F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF */ + 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* + * The following is a vector of bit-masks to get used bits in + * the first byte of a UTF-8 character. Index is remaining bytes at above of + * the character. + */ +#ifdef _KERNEL +const uchar_t u8_masks_tbl[6] = { 0x00, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; +#else +static const uchar_t u8_masks_tbl[6] = { 0x00, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; +#endif /* _KERNEL */ + +/* + * The following two vectors are to provide valid minimum and + * maximum values for the 2'nd byte of a multibyte UTF-8 character for + * better illegal sequence checking. The index value must be the value of + * the first byte of the UTF-8 character. + */ +static const uchar_t valid_min_2nd_byte[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + +/* C0 C1 C2 C3 C4 C5 C6 C7 */ + 0, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* C8 C9 CA CB CC CD CE CF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* D0 D1 D2 D3 D4 D5 D6 D7 */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* D8 D9 DA DB DC DD DE DF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* E0 E1 E2 E3 E4 E5 E6 E7 */ + 0xa0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* E8 E9 EA EB EC ED EE EF */ + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + +/* F0 F1 F2 F3 F4 F5 F6 F7 */ + 0x90, 0x80, 0x80, 0x80, 0x80, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static const uchar_t valid_max_2nd_byte[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + +/* C0 C1 C2 C3 C4 C5 C6 C7 */ + 0, 0, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, + +/* C8 C9 CA CB CC CD CE CF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, + +/* D0 D1 D2 D3 D4 D5 D6 D7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, + +/* D8 D9 DA DB DC DD DE DF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, + +/* E0 E1 E2 E3 E4 E5 E6 E7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, + +/* E8 E9 EA EB EC ED EE EF */ + 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0x9f, 0xbf, 0xbf, + +/* F0 F1 F2 F3 F4 F5 F6 F7 */ + 0xbf, 0xbf, 0xbf, 0xbf, 0x8f, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0 +}; + + +static int +check_endian(int flag, int *in, int *out) +{ + *in = flag & UCONV_IN_ENDIAN_MASKS; + + /* You cannot have both. */ + if (*in == UCONV_IN_ENDIAN_MASKS) + return (EBADF); + + if (*in == 0) + *in = UCONV_IN_NAT_ENDIAN; + + *out = flag & UCONV_OUT_ENDIAN_MASKS; + + /* You cannot have both. */ + if (*out == UCONV_OUT_ENDIAN_MASKS) + return (EBADF); + + if (*out == 0) + *out = UCONV_OUT_NAT_ENDIAN; + + return (0); +} + +static boolean_t +check_bom16(const uint16_t *u16s, size_t u16l, int *in) +{ + if (u16l > 0) { + if (*u16s == UCONV_BOM_NORMAL) { + *in = UCONV_IN_NAT_ENDIAN; + return (B_TRUE); + } + if (*u16s == UCONV_BOM_SWAPPED) { + *in = UCONV_IN_REV_ENDIAN; + return (B_TRUE); + } + } + + return (B_FALSE); +} + +static boolean_t +check_bom32(const uint32_t *u32s, size_t u32l, int *in) +{ + if (u32l > 0) { + if (*u32s == UCONV_BOM_NORMAL) { + *in = UCONV_IN_NAT_ENDIAN; + return (B_TRUE); + } + if (*u32s == UCONV_BOM_SWAPPED_32) { + *in = UCONV_IN_REV_ENDIAN; + return (B_TRUE); + } + } + + return (B_FALSE); +} + +int +uconv_u16tou32(const uint16_t *u16s, size_t *utf16len, + uint32_t *u32s, size_t *utf32len, int flag) +{ + int inendian; + int outendian; + size_t u16l; + size_t u32l; + uint32_t hi; + uint32_t lo; + boolean_t do_not_ignore_null; + + /* + * Do preliminary validity checks on parameters and collect info on + * endians. + */ + if (u16s == NULL || utf16len == NULL) + return (EILSEQ); + + if (u32s == NULL || utf32len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + /* + * Initialize input and output parameter buffer indices and + * temporary variables. + */ + u16l = u32l = 0; + hi = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + /* + * Check on the BOM at the beginning of the input buffer if required + * and if there is indeed one, process it. + */ + if ((flag & UCONV_IN_ACCEPT_BOM) && + check_bom16(u16s, *utf16len, &inendian)) + u16l++; + + /* + * Reset inendian and outendian so that after this point, those can be + * used as condition values. + */ + inendian &= UCONV_IN_NAT_ENDIAN; + outendian &= UCONV_OUT_NAT_ENDIAN; + + /* + * If there is something in the input buffer and if necessary and + * requested, save the BOM at the output buffer. + */ + if (*utf16len > 0 && *utf32len > 0 && (flag & UCONV_OUT_EMIT_BOM)) + u32s[u32l++] = (outendian) ? UCONV_BOM_NORMAL : + UCONV_BOM_SWAPPED_32; + + /* + * Do conversion; if encounter a surrogate pair, assemble high and + * low pair values to form a UTF-32 character. If a half of a pair + * exists alone, then, either it is an illegal (EILSEQ) or + * invalid (EINVAL) value. + */ + for (; u16l < *utf16len; u16l++) { + if (u16s[u16l] == 0 && do_not_ignore_null) + break; + + lo = (uint32_t)((inendian) ? u16s[u16l] : BSWAP_16(u16s[u16l])); + + if (lo >= UCONV_U16_HI_MIN && lo <= UCONV_U16_HI_MAX) { + if (hi) + return (EILSEQ); + hi = lo; + continue; + } else if (lo >= UCONV_U16_LO_MIN && lo <= UCONV_U16_LO_MAX) { + if (! hi) + return (EILSEQ); + lo = (((hi - UCONV_U16_HI_MIN) * UCONV_U16_BIT_SHIFT + + lo - UCONV_U16_LO_MIN) & UCONV_U16_BIT_MASK) + + UCONV_U16_START; + hi = 0; + } else if (hi) { + return (EILSEQ); + } + + if (u32l >= *utf32len) + return (E2BIG); + + u32s[u32l++] = (outendian) ? lo : BSWAP_32(lo); + } + + /* + * If high half didn't see low half, then, it's most likely the input + * parameter is incomplete. + */ + if (hi) + return (EINVAL); + + /* + * Save the number of consumed and saved characters. They do not + * include terminating NULL character (U+0000) at the end of + * the input buffer (even when UCONV_IGNORE_NULL isn't specified and + * the input buffer length is big enough to include the terminating + * NULL character). + */ + *utf16len = u16l; + *utf32len = u32l; + + return (0); +} + +int +uconv_u16tou8(const uint16_t *u16s, size_t *utf16len, + uchar_t *u8s, size_t *utf8len, int flag) +{ + int inendian; + int outendian; + size_t u16l; + size_t u8l; + uint32_t hi; + uint32_t lo; + boolean_t do_not_ignore_null; + + if (u16s == NULL || utf16len == NULL) + return (EILSEQ); + + if (u8s == NULL || utf8len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + u16l = u8l = 0; + hi = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + if ((flag & UCONV_IN_ACCEPT_BOM) && + check_bom16(u16s, *utf16len, &inendian)) + u16l++; + + inendian &= UCONV_IN_NAT_ENDIAN; + + for (; u16l < *utf16len; u16l++) { + if (u16s[u16l] == 0 && do_not_ignore_null) + break; + + lo = (uint32_t)((inendian) ? u16s[u16l] : BSWAP_16(u16s[u16l])); + + if (lo >= UCONV_U16_HI_MIN && lo <= UCONV_U16_HI_MAX) { + if (hi) + return (EILSEQ); + hi = lo; + continue; + } else if (lo >= UCONV_U16_LO_MIN && lo <= UCONV_U16_LO_MAX) { + if (! hi) + return (EILSEQ); + lo = (((hi - UCONV_U16_HI_MIN) * UCONV_U16_BIT_SHIFT + + lo - UCONV_U16_LO_MIN) & UCONV_U16_BIT_MASK) + + UCONV_U16_START; + hi = 0; + } else if (hi) { + return (EILSEQ); + } + + /* + * Now we convert a UTF-32 character into a UTF-8 character. + * Unicode coding space is between U+0000 and U+10FFFF; + * anything bigger is an illegal character. + */ + if (lo <= UCONV_U8_ONE_BYTE) { + if (u8l >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)lo; + } else if (lo <= UCONV_U8_TWO_BYTES) { + if ((u8l + 1) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xc0 | ((lo & 0x07c0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x003f)); + } else if (lo <= UCONV_U8_THREE_BYTES) { + if ((u8l + 2) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xe0 | ((lo & 0x0f000) >> 12)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x00fc0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x0003f)); + } else if (lo <= UCONV_U8_FOUR_BYTES) { + if ((u8l + 3) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xf0 | ((lo & 0x01c0000) >> 18)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x003f000) >> 12)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x0000fc0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x000003f)); + } else { + return (EILSEQ); + } + } + + if (hi) + return (EINVAL); + + *utf16len = u16l; + *utf8len = u8l; + + return (0); +} + +int +uconv_u32tou16(const uint32_t *u32s, size_t *utf32len, + uint16_t *u16s, size_t *utf16len, int flag) +{ + int inendian; + int outendian; + size_t u16l; + size_t u32l; + uint32_t hi; + uint32_t lo; + boolean_t do_not_ignore_null; + + if (u32s == NULL || utf32len == NULL) + return (EILSEQ); + + if (u16s == NULL || utf16len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + u16l = u32l = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + if ((flag & UCONV_IN_ACCEPT_BOM) && + check_bom32(u32s, *utf32len, &inendian)) + u32l++; + + inendian &= UCONV_IN_NAT_ENDIAN; + outendian &= UCONV_OUT_NAT_ENDIAN; + + if (*utf32len > 0 && *utf16len > 0 && (flag & UCONV_OUT_EMIT_BOM)) + u16s[u16l++] = (outendian) ? UCONV_BOM_NORMAL : + UCONV_BOM_SWAPPED; + + for (; u32l < *utf32len; u32l++) { + if (u32s[u32l] == 0 && do_not_ignore_null) + break; + + hi = (inendian) ? u32s[u32l] : BSWAP_32(u32s[u32l]); + + /* + * Anything bigger than the Unicode coding space, i.e., + * Unicode scalar value bigger than U+10FFFF, is an illegal + * character. + */ + if (hi > UCONV_UNICODE_MAX) + return (EILSEQ); + + /* + * Anything bigger than U+FFFF must be converted into + * a surrogate pair in UTF-16. + */ + if (hi >= UCONV_U16_START) { + lo = ((hi - UCONV_U16_START) % UCONV_U16_BIT_SHIFT) + + UCONV_U16_LO_MIN; + hi = ((hi - UCONV_U16_START) / UCONV_U16_BIT_SHIFT) + + UCONV_U16_HI_MIN; + + if ((u16l + 1) >= *utf16len) + return (E2BIG); + + if (outendian) { + u16s[u16l++] = (uint16_t)hi; + u16s[u16l++] = (uint16_t)lo; + } else { + u16s[u16l++] = BSWAP_16(((uint16_t)hi)); + u16s[u16l++] = BSWAP_16(((uint16_t)lo)); + } + } else { + if (u16l >= *utf16len) + return (E2BIG); + u16s[u16l++] = (outendian) ? (uint16_t)hi : + BSWAP_16(((uint16_t)hi)); + } + } + + *utf16len = u16l; + *utf32len = u32l; + + return (0); +} + +int +uconv_u32tou8(const uint32_t *u32s, size_t *utf32len, + uchar_t *u8s, size_t *utf8len, int flag) +{ + int inendian; + int outendian; + size_t u32l; + size_t u8l; + uint32_t lo; + boolean_t do_not_ignore_null; + + if (u32s == NULL || utf32len == NULL) + return (EILSEQ); + + if (u8s == NULL || utf8len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + u32l = u8l = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + if ((flag & UCONV_IN_ACCEPT_BOM) && + check_bom32(u32s, *utf32len, &inendian)) + u32l++; + + inendian &= UCONV_IN_NAT_ENDIAN; + + for (; u32l < *utf32len; u32l++) { + if (u32s[u32l] == 0 && do_not_ignore_null) + break; + + lo = (inendian) ? u32s[u32l] : BSWAP_32(u32s[u32l]); + + if (lo <= UCONV_U8_ONE_BYTE) { + if (u8l >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)lo; + } else if (lo <= UCONV_U8_TWO_BYTES) { + if ((u8l + 1) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xc0 | ((lo & 0x07c0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x003f)); + } else if (lo <= UCONV_U8_THREE_BYTES) { + if ((u8l + 2) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xe0 | ((lo & 0x0f000) >> 12)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x00fc0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x0003f)); + } else if (lo <= UCONV_U8_FOUR_BYTES) { + if ((u8l + 3) >= *utf8len) + return (E2BIG); + u8s[u8l++] = (uchar_t)(0xf0 | ((lo & 0x01c0000) >> 18)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x003f000) >> 12)); + u8s[u8l++] = (uchar_t)(0x80 | ((lo & 0x0000fc0) >> 6)); + u8s[u8l++] = (uchar_t)(0x80 | (lo & 0x000003f)); + } else { + return (EILSEQ); + } + } + + *utf32len = u32l; + *utf8len = u8l; + + return (0); +} + +int +uconv_u8tou16(const uchar_t *u8s, size_t *utf8len, + uint16_t *u16s, size_t *utf16len, int flag) +{ + int inendian; + int outendian; + size_t u16l; + size_t u8l; + uint32_t hi; + uint32_t lo; + int remaining_bytes; + int first_b; + boolean_t do_not_ignore_null; + + if (u8s == NULL || utf8len == NULL) + return (EILSEQ); + + if (u16s == NULL || utf16len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + u16l = u8l = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + outendian &= UCONV_OUT_NAT_ENDIAN; + + if (*utf8len > 0 && *utf16len > 0 && (flag & UCONV_OUT_EMIT_BOM)) + u16s[u16l++] = (outendian) ? UCONV_BOM_NORMAL : + UCONV_BOM_SWAPPED; + + for (; u8l < *utf8len; ) { + if (u8s[u8l] == 0 && do_not_ignore_null) + break; + + /* + * Collect a UTF-8 character and convert it to a UTF-32 + * character. In doing so, we screen out illegally formed + * UTF-8 characters and treat such as illegal characters. + * The algorithm at below also screens out anything bigger + * than the U+10FFFF. + * + * See Unicode 3.1 UTF-8 Corrigendum and Unicode 3.2 for + * more details on the illegal values of UTF-8 character + * bytes. + */ + hi = (uint32_t)u8s[u8l++]; + + if (hi > UCONV_ASCII_MAX) { + if ((remaining_bytes = remaining_bytes_tbl[hi]) == 0) + return (EILSEQ); + + first_b = hi; + hi = hi & u8_masks_tbl[remaining_bytes]; + + for (; remaining_bytes > 0; remaining_bytes--) { + /* + * If we have no more bytes, the current + * UTF-8 character is incomplete. + */ + if (u8l >= *utf8len) + return (EINVAL); + + lo = (uint32_t)u8s[u8l++]; + + if (first_b) { + if (lo < valid_min_2nd_byte[first_b] || + lo > valid_max_2nd_byte[first_b]) + return (EILSEQ); + first_b = 0; + } else if (lo < UCONV_U8_BYTE_MIN || + lo > UCONV_U8_BYTE_MAX) { + return (EILSEQ); + } + hi = (hi << UCONV_U8_BIT_SHIFT) | + (lo & UCONV_U8_BIT_MASK); + } + } + + if (hi >= UCONV_U16_START) { + lo = ((hi - UCONV_U16_START) % UCONV_U16_BIT_SHIFT) + + UCONV_U16_LO_MIN; + hi = ((hi - UCONV_U16_START) / UCONV_U16_BIT_SHIFT) + + UCONV_U16_HI_MIN; + + if ((u16l + 1) >= *utf16len) + return (E2BIG); + + if (outendian) { + u16s[u16l++] = (uint16_t)hi; + u16s[u16l++] = (uint16_t)lo; + } else { + u16s[u16l++] = BSWAP_16(((uint16_t)hi)); + u16s[u16l++] = BSWAP_16(((uint16_t)lo)); + } + } else { + if (u16l >= *utf16len) + return (E2BIG); + + u16s[u16l++] = (outendian) ? (uint16_t)hi : + BSWAP_16(((uint16_t)hi)); + } + } + + *utf16len = u16l; + *utf8len = u8l; + + return (0); +} + +int +uconv_u8tou32(const uchar_t *u8s, size_t *utf8len, + uint32_t *u32s, size_t *utf32len, int flag) +{ + int inendian; + int outendian; + size_t u32l; + size_t u8l; + uint32_t hi; + uint32_t c; + int remaining_bytes; + int first_b; + boolean_t do_not_ignore_null; + + if (u8s == NULL || utf8len == NULL) + return (EILSEQ); + + if (u32s == NULL || utf32len == NULL) + return (E2BIG); + + if (check_endian(flag, &inendian, &outendian) != 0) + return (EBADF); + + u32l = u8l = 0; + do_not_ignore_null = ((flag & UCONV_IGNORE_NULL) == 0); + + outendian &= UCONV_OUT_NAT_ENDIAN; + + if (*utf8len > 0 && *utf32len > 0 && (flag & UCONV_OUT_EMIT_BOM)) + u32s[u32l++] = (outendian) ? UCONV_BOM_NORMAL : + UCONV_BOM_SWAPPED_32; + + for (; u8l < *utf8len; ) { + if (u8s[u8l] == 0 && do_not_ignore_null) + break; + + hi = (uint32_t)u8s[u8l++]; + + if (hi > UCONV_ASCII_MAX) { + if ((remaining_bytes = remaining_bytes_tbl[hi]) == 0) + return (EILSEQ); + + first_b = hi; + hi = hi & u8_masks_tbl[remaining_bytes]; + + for (; remaining_bytes > 0; remaining_bytes--) { + if (u8l >= *utf8len) + return (EINVAL); + + c = (uint32_t)u8s[u8l++]; + + if (first_b) { + if (c < valid_min_2nd_byte[first_b] || + c > valid_max_2nd_byte[first_b]) + return (EILSEQ); + first_b = 0; + } else if (c < UCONV_U8_BYTE_MIN || + c > UCONV_U8_BYTE_MAX) { + return (EILSEQ); + } + hi = (hi << UCONV_U8_BIT_SHIFT) | + (c & UCONV_U8_BIT_MASK); + } + } + + if (u32l >= *utf32len) + return (E2BIG); + + u32s[u32l++] = (outendian) ? hi : BSWAP_32(hi); + } + + *utf32len = u32l; + *utf8len = u8l; + + return (0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(uconv_u16tou32); +EXPORT_SYMBOL(uconv_u16tou8); +EXPORT_SYMBOL(uconv_u32tou16); +EXPORT_SYMBOL(uconv_u32tou8); +EXPORT_SYMBOL(uconv_u8tou16); +EXPORT_SYMBOL(uconv_u8tou32); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/Makefile.in +++ linux-aws-4.15.0/zfs/module/zcommon/Makefile.in @@ -0,0 +1,24 @@ +src = @abs_top_srcdir@/module/zcommon +obj = @abs_builddir@ + +MODULE := zcommon + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += zfs_deleg.o +$(MODULE)-objs += zfs_prop.o +$(MODULE)-objs += zprop_common.o +$(MODULE)-objs += zfs_namecheck.o +$(MODULE)-objs += zfs_comutil.o +$(MODULE)-objs += zfs_fletcher.o +$(MODULE)-objs += zfs_uio.o +$(MODULE)-objs += zpool_prop.o +$(MODULE)-objs += zfs_fletcher_superscalar.o +$(MODULE)-objs += zfs_fletcher_superscalar4.o + +$(MODULE)-$(CONFIG_X86) += zfs_fletcher_intel.o +$(MODULE)-$(CONFIG_X86) += zfs_fletcher_sse.o +$(MODULE)-$(CONFIG_X86) += zfs_fletcher_avx512.o +$(MODULE)-$(CONFIG_ARM64) += zfs_fletcher_aarch64_neon.o --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_comutil.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_comutil.c @@ -0,0 +1,291 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * This file is intended for functions that ought to be common between user + * land (libzfs) and the kernel. When many common routines need to be shared + * then a separate file should to be created. + */ + +#if defined(_KERNEL) +#include +#else +#include +#endif + +#include +#include +#include +#include +#include "zfs_comutil.h" +#include + +/* + * Are there allocatable vdevs? + */ +boolean_t +zfs_allocatable_devs(nvlist_t *nv) +{ + uint64_t is_log; + uint_t c; + nvlist_t **child; + uint_t children; + + if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, + &child, &children) != 0) { + return (B_FALSE); + } + for (c = 0; c < children; c++) { + is_log = 0; + (void) nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_IS_LOG, + &is_log); + if (!is_log) + return (B_TRUE); + } + return (B_FALSE); +} + +void +zpool_get_rewind_policy(nvlist_t *nvl, zpool_rewind_policy_t *zrpp) +{ + nvlist_t *policy; + nvpair_t *elem; + char *nm; + + /* Defaults */ + zrpp->zrp_request = ZPOOL_NO_REWIND; + zrpp->zrp_maxmeta = 0; + zrpp->zrp_maxdata = UINT64_MAX; + zrpp->zrp_txg = UINT64_MAX; + + if (nvl == NULL) + return; + + elem = NULL; + while ((elem = nvlist_next_nvpair(nvl, elem)) != NULL) { + nm = nvpair_name(elem); + if (strcmp(nm, ZPOOL_REWIND_POLICY) == 0) { + if (nvpair_value_nvlist(elem, &policy) == 0) + zpool_get_rewind_policy(policy, zrpp); + return; + } else if (strcmp(nm, ZPOOL_REWIND_REQUEST) == 0) { + if (nvpair_value_uint32(elem, &zrpp->zrp_request) == 0) + if (zrpp->zrp_request & ~ZPOOL_REWIND_POLICIES) + zrpp->zrp_request = ZPOOL_NO_REWIND; + } else if (strcmp(nm, ZPOOL_REWIND_REQUEST_TXG) == 0) { + (void) nvpair_value_uint64(elem, &zrpp->zrp_txg); + } else if (strcmp(nm, ZPOOL_REWIND_META_THRESH) == 0) { + (void) nvpair_value_uint64(elem, &zrpp->zrp_maxmeta); + } else if (strcmp(nm, ZPOOL_REWIND_DATA_THRESH) == 0) { + (void) nvpair_value_uint64(elem, &zrpp->zrp_maxdata); + } + } + if (zrpp->zrp_request == 0) + zrpp->zrp_request = ZPOOL_NO_REWIND; +} + +typedef struct zfs_version_spa_map { + int version_zpl; + int version_spa; +} zfs_version_spa_map_t; + +/* + * Keep this table in monotonically increasing version number order. + */ +static zfs_version_spa_map_t zfs_version_table[] = { + {ZPL_VERSION_INITIAL, SPA_VERSION_INITIAL}, + {ZPL_VERSION_DIRENT_TYPE, SPA_VERSION_INITIAL}, + {ZPL_VERSION_FUID, SPA_VERSION_FUID}, + {ZPL_VERSION_USERSPACE, SPA_VERSION_USERSPACE}, + {ZPL_VERSION_SA, SPA_VERSION_SA}, + {0, 0} +}; + +/* + * Return the max zpl version for a corresponding spa version + * -1 is returned if no mapping exists. + */ +int +zfs_zpl_version_map(int spa_version) +{ + int i; + int version = -1; + + for (i = 0; zfs_version_table[i].version_spa; i++) { + if (spa_version >= zfs_version_table[i].version_spa) + version = zfs_version_table[i].version_zpl; + } + + return (version); +} + +/* + * Return the min spa version for a corresponding spa version + * -1 is returned if no mapping exists. + */ +int +zfs_spa_version_map(int zpl_version) +{ + int i; + int version = -1; + + for (i = 0; zfs_version_table[i].version_zpl; i++) { + if (zfs_version_table[i].version_zpl >= zpl_version) + return (zfs_version_table[i].version_spa); + } + + return (version); +} + +/* + * This is the table of legacy internal event names; it should not be modified. + * The internal events are now stored in the history log as strings. + */ +const char *zfs_history_event_names[ZFS_NUM_LEGACY_HISTORY_EVENTS] = { + "invalid event", + "pool create", + "vdev add", + "pool remove", + "pool destroy", + "pool export", + "pool import", + "vdev attach", + "vdev replace", + "vdev detach", + "vdev online", + "vdev offline", + "vdev upgrade", + "pool clear", + "pool scrub", + "pool property set", + "create", + "clone", + "destroy", + "destroy_begin_sync", + "inherit", + "property set", + "quota set", + "permission update", + "permission remove", + "permission who remove", + "promote", + "receive", + "rename", + "reservation set", + "replay_inc_sync", + "replay_full_sync", + "rollback", + "snapshot", + "filesystem version upgrade", + "refquota set", + "refreservation set", + "pool scrub done", + "user hold", + "user release", + "pool split", +}; + +/* + * Initialize rate limit struct + * + * rl: zfs_ratelimit_t struct + * burst: Number to allow in an interval before rate limiting + * interval: Interval time in seconds + */ +void +zfs_ratelimit_init(zfs_ratelimit_t *rl, unsigned int burst, + unsigned int interval) +{ + rl->count = 0; + rl->start = 0; + rl->interval = interval; + rl->burst = burst; + mutex_init(&rl->lock, NULL, MUTEX_DEFAULT, NULL); +} + +/* + * Finalize rate limit struct + * + * rl: zfs_ratelimit_t struct + */ +void +zfs_ratelimit_fini(zfs_ratelimit_t *rl) +{ + mutex_destroy(&rl->lock); +} + +/* + * Re-implementation of the kernel's __ratelimit() function + * + * We had to write our own rate limiter because the kernel's __ratelimit() + * function annoyingly prints out how many times it rate limited to the kernel + * logs (and there's no way to turn it off): + * + * __ratelimit: 59 callbacks suppressed + * + * If the kernel ever allows us to disable these prints, we should go back to + * using __ratelimit() instead. + * + * Return values are the same as __ratelimit(): + * + * 0: If we're rate limiting + * 1: If we're not rate limiting. + */ +int +zfs_ratelimit(zfs_ratelimit_t *rl) +{ + hrtime_t now; + hrtime_t elapsed; + int rc = 1; + + mutex_enter(&rl->lock); + + now = gethrtime(); + elapsed = now - rl->start; + + rl->count++; + if (NSEC2SEC(elapsed) >= rl->interval) { + rl->start = now; + rl->count = 0; + } else { + if (rl->count >= rl->burst) { + rc = 0; /* We're ratelimiting */ + } + } + mutex_exit(&rl->lock); + + return (rc); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_allocatable_devs); +EXPORT_SYMBOL(zpool_get_rewind_policy); +EXPORT_SYMBOL(zfs_zpl_version_map); +EXPORT_SYMBOL(zfs_spa_version_map); +EXPORT_SYMBOL(zfs_history_event_names); +EXPORT_SYMBOL(zfs_ratelimit_init); +EXPORT_SYMBOL(zfs_ratelimit_fini); +EXPORT_SYMBOL(zfs_ratelimit); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_deleg.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_deleg.c @@ -0,0 +1,244 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2010 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2016 Igor Kozhukhov + */ + +#include + +#if defined(_KERNEL) +#include +#include +#include +#else +#include +#include +#include +#include +#include +#endif +#include +#include "zfs_prop.h" +#include "zfs_deleg.h" +#include "zfs_namecheck.h" + +zfs_deleg_perm_tab_t zfs_deleg_perm_tab[] = { + {ZFS_DELEG_PERM_ALLOW}, + {ZFS_DELEG_PERM_BOOKMARK}, + {ZFS_DELEG_PERM_CLONE}, + {ZFS_DELEG_PERM_CREATE}, + {ZFS_DELEG_PERM_DESTROY}, + {ZFS_DELEG_PERM_DIFF}, + {ZFS_DELEG_PERM_MOUNT}, + {ZFS_DELEG_PERM_PROMOTE}, + {ZFS_DELEG_PERM_RECEIVE}, + {ZFS_DELEG_PERM_RENAME}, + {ZFS_DELEG_PERM_ROLLBACK}, + {ZFS_DELEG_PERM_SNAPSHOT}, + {ZFS_DELEG_PERM_SHARE}, + {ZFS_DELEG_PERM_SEND}, + {ZFS_DELEG_PERM_USERPROP}, + {ZFS_DELEG_PERM_USERQUOTA}, + {ZFS_DELEG_PERM_GROUPQUOTA}, + {ZFS_DELEG_PERM_USERUSED}, + {ZFS_DELEG_PERM_GROUPUSED}, + {ZFS_DELEG_PERM_USEROBJQUOTA}, + {ZFS_DELEG_PERM_GROUPOBJQUOTA}, + {ZFS_DELEG_PERM_USEROBJUSED}, + {ZFS_DELEG_PERM_GROUPOBJUSED}, + {ZFS_DELEG_PERM_HOLD}, + {ZFS_DELEG_PERM_RELEASE}, + {NULL} +}; + +static int +zfs_valid_permission_name(const char *perm) +{ + if (zfs_deleg_canonicalize_perm(perm)) + return (0); + + return (permset_namecheck(perm, NULL, NULL)); +} + +const char * +zfs_deleg_canonicalize_perm(const char *perm) +{ + int i; + zfs_prop_t prop; + + for (i = 0; zfs_deleg_perm_tab[i].z_perm != NULL; i++) { + if (strcmp(perm, zfs_deleg_perm_tab[i].z_perm) == 0) + return (perm); + } + + prop = zfs_name_to_prop(perm); + if (prop != ZPROP_INVAL && zfs_prop_delegatable(prop)) + return (zfs_prop_to_name(prop)); + return (NULL); + +} + +static int +zfs_validate_who(char *who) +{ + char *p; + + if (who[2] != ZFS_DELEG_FIELD_SEP_CHR) + return (-1); + + switch (who[0]) { + case ZFS_DELEG_USER: + case ZFS_DELEG_GROUP: + case ZFS_DELEG_USER_SETS: + case ZFS_DELEG_GROUP_SETS: + if (who[1] != ZFS_DELEG_LOCAL && who[1] != ZFS_DELEG_DESCENDENT) + return (-1); + for (p = &who[3]; *p; p++) + if (!isdigit(*p)) + return (-1); + break; + + case ZFS_DELEG_NAMED_SET: + case ZFS_DELEG_NAMED_SET_SETS: + if (who[1] != ZFS_DELEG_NA) + return (-1); + return (permset_namecheck(&who[3], NULL, NULL)); + + case ZFS_DELEG_CREATE: + case ZFS_DELEG_CREATE_SETS: + if (who[1] != ZFS_DELEG_NA) + return (-1); + if (who[3] != '\0') + return (-1); + break; + + case ZFS_DELEG_EVERYONE: + case ZFS_DELEG_EVERYONE_SETS: + if (who[1] != ZFS_DELEG_LOCAL && who[1] != ZFS_DELEG_DESCENDENT) + return (-1); + if (who[3] != '\0') + return (-1); + break; + + default: + return (-1); + } + + return (0); +} + +int +zfs_deleg_verify_nvlist(nvlist_t *nvp) +{ + nvpair_t *who, *perm_name; + nvlist_t *perms; + int error; + + if (nvp == NULL) + return (-1); + + who = nvlist_next_nvpair(nvp, NULL); + if (who == NULL) + return (-1); + + do { + if (zfs_validate_who(nvpair_name(who))) + return (-1); + + error = nvlist_lookup_nvlist(nvp, nvpair_name(who), &perms); + + if (error && error != ENOENT) + return (-1); + if (error == ENOENT) + continue; + + perm_name = nvlist_next_nvpair(perms, NULL); + if (perm_name == NULL) { + return (-1); + } + do { + error = zfs_valid_permission_name( + nvpair_name(perm_name)); + if (error) + return (-1); + } while ((perm_name = nvlist_next_nvpair(perms, perm_name)) + != NULL); + } while ((who = nvlist_next_nvpair(nvp, who)) != NULL); + return (0); +} + +/* + * Construct the base attribute name. The base attribute names + * are the "key" to locate the jump objects which contain the actual + * permissions. The base attribute names are encoded based on + * type of entry and whether it is a local or descendent permission. + * + * Arguments: + * attr - attribute name return string, attribute is assumed to be + * ZFS_MAX_DELEG_NAME long. + * type - type of entry to construct + * inheritchr - inheritance type (local,descendent, or NA for create and + * permission set definitions + * data - is either a permission set name or a 64 bit uid/gid. + */ +void +zfs_deleg_whokey(char *attr, zfs_deleg_who_type_t type, + char inheritchr, void *data) +{ + int len = ZFS_MAX_DELEG_NAME; + uint64_t *id = data; + + switch (type) { + case ZFS_DELEG_USER: + case ZFS_DELEG_GROUP: + case ZFS_DELEG_USER_SETS: + case ZFS_DELEG_GROUP_SETS: + (void) snprintf(attr, len, "%c%c%c%lld", type, inheritchr, + ZFS_DELEG_FIELD_SEP_CHR, (longlong_t)*id); + break; + case ZFS_DELEG_NAMED_SET_SETS: + case ZFS_DELEG_NAMED_SET: + (void) snprintf(attr, len, "%c-%c%s", type, + ZFS_DELEG_FIELD_SEP_CHR, (char *)data); + break; + case ZFS_DELEG_CREATE: + case ZFS_DELEG_CREATE_SETS: + (void) snprintf(attr, len, "%c-%c", type, + ZFS_DELEG_FIELD_SEP_CHR); + break; + case ZFS_DELEG_EVERYONE: + case ZFS_DELEG_EVERYONE_SETS: + (void) snprintf(attr, len, "%c%c%c", type, inheritchr, + ZFS_DELEG_FIELD_SEP_CHR); + break; + default: + cmn_err(CE_PANIC, "bad zfs_deleg_who_type_t %d", type); + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_deleg_verify_nvlist); +EXPORT_SYMBOL(zfs_deleg_whokey); +EXPORT_SYMBOL(zfs_deleg_canonicalize_perm); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher.c @@ -0,0 +1,915 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * Copyright (C) 2016 Gvozden NeÅ¡ković. All rights reserved. + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +/* + * Copyright (c) 2016 by Delphix. All rights reserved. + */ + +/* + * Fletcher Checksums + * ------------------ + * + * ZFS's 2nd and 4th order Fletcher checksums are defined by the following + * recurrence relations: + * + * a = a + f + * i i-1 i-1 + * + * b = b + a + * i i-1 i + * + * c = c + b (fletcher-4 only) + * i i-1 i + * + * d = d + c (fletcher-4 only) + * i i-1 i + * + * Where + * a_0 = b_0 = c_0 = d_0 = 0 + * and + * f_0 .. f_(n-1) are the input data. + * + * Using standard techniques, these translate into the following series: + * + * __n_ __n_ + * \ | \ | + * a = > f b = > i * f + * n /___| n - i n /___| n - i + * i = 1 i = 1 + * + * + * __n_ __n_ + * \ | i*(i+1) \ | i*(i+1)*(i+2) + * c = > ------- f d = > ------------- f + * n /___| 2 n - i n /___| 6 n - i + * i = 1 i = 1 + * + * For fletcher-2, the f_is are 64-bit, and [ab]_i are 64-bit accumulators. + * Since the additions are done mod (2^64), errors in the high bits may not + * be noticed. For this reason, fletcher-2 is deprecated. + * + * For fletcher-4, the f_is are 32-bit, and [abcd]_i are 64-bit accumulators. + * A conservative estimate of how big the buffer can get before we overflow + * can be estimated using f_i = 0xffffffff for all i: + * + * % bc + * f=2^32-1;d=0; for (i = 1; d<2^64; i++) { d += f*i*(i+1)*(i+2)/6 }; (i-1)*4 + * 2264 + * quit + * % + * + * So blocks of up to 2k will not overflow. Our largest block size is + * 128k, which has 32k 4-byte words, so we can compute the largest possible + * accumulators, then divide by 2^64 to figure the max amount of overflow: + * + * % bc + * a=b=c=d=0; f=2^32-1; for (i=1; i<=32*1024; i++) { a+=f; b+=a; c+=b; d+=c } + * a/2^64;b/2^64;c/2^64;d/2^64 + * 0 + * 0 + * 1365 + * 11186858 + * quit + * % + * + * So a and b cannot overflow. To make sure each bit of input has some + * effect on the contents of c and d, we can look at what the factors of + * the coefficients in the equations for c_n and d_n are. The number of 2s + * in the factors determines the lowest set bit in the multiplier. Running + * through the cases for n*(n+1)/2 reveals that the highest power of 2 is + * 2^14, and for n*(n+1)*(n+2)/6 it is 2^15. So while some data may overflow + * the 64-bit accumulators, every bit of every f_i effects every accumulator, + * even for 128k blocks. + * + * If we wanted to make a stronger version of fletcher4 (fletcher4c?), + * we could do our calculations mod (2^32 - 1) by adding in the carries + * periodically, and store the number of carries in the top 32-bits. + * + * -------------------- + * Checksum Performance + * -------------------- + * + * There are two interesting components to checksum performance: cached and + * uncached performance. With cached data, fletcher-2 is about four times + * faster than fletcher-4. With uncached data, the performance difference is + * negligible, since the cost of a cache fill dominates the processing time. + * Even though fletcher-4 is slower than fletcher-2, it is still a pretty + * efficient pass over the data. + * + * In normal operation, the data which is being checksummed is in a buffer + * which has been filled either by: + * + * 1. a compression step, which will be mostly cached, or + * 2. a bcopy() or copyin(), which will be uncached (because the + * copy is cache-bypassing). + * + * For both cached and uncached data, both fletcher checksums are much faster + * than sha-256, and slower than 'off', which doesn't touch the data at all. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define FLETCHER_MIN_SIMD_SIZE 64 + +static void fletcher_4_scalar_init(fletcher_4_ctx_t *ctx); +static void fletcher_4_scalar_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp); +static void fletcher_4_scalar_native(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size); +static void fletcher_4_scalar_byteswap(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size); +static boolean_t fletcher_4_scalar_valid(void); + +static const fletcher_4_ops_t fletcher_4_scalar_ops = { + .init_native = fletcher_4_scalar_init, + .fini_native = fletcher_4_scalar_fini, + .compute_native = fletcher_4_scalar_native, + .init_byteswap = fletcher_4_scalar_init, + .fini_byteswap = fletcher_4_scalar_fini, + .compute_byteswap = fletcher_4_scalar_byteswap, + .valid = fletcher_4_scalar_valid, + .name = "scalar" +}; + +static fletcher_4_ops_t fletcher_4_fastest_impl = { + .name = "fastest", + .valid = fletcher_4_scalar_valid +}; + +static const fletcher_4_ops_t *fletcher_4_impls[] = { + &fletcher_4_scalar_ops, + &fletcher_4_superscalar_ops, + &fletcher_4_superscalar4_ops, +#if defined(HAVE_SSE2) + &fletcher_4_sse2_ops, +#endif +#if defined(HAVE_SSE2) && defined(HAVE_SSSE3) + &fletcher_4_ssse3_ops, +#endif +#if defined(HAVE_AVX) && defined(HAVE_AVX2) + &fletcher_4_avx2_ops, +#endif +#if defined(__x86_64) && defined(HAVE_AVX512F) + &fletcher_4_avx512f_ops, +#endif +#if defined(__aarch64__) + &fletcher_4_aarch64_neon_ops, +#endif +}; + +/* Hold all supported implementations */ +static uint32_t fletcher_4_supp_impls_cnt = 0; +static fletcher_4_ops_t *fletcher_4_supp_impls[ARRAY_SIZE(fletcher_4_impls)]; + +/* Select fletcher4 implementation */ +#define IMPL_FASTEST (UINT32_MAX) +#define IMPL_CYCLE (UINT32_MAX - 1) +#define IMPL_SCALAR (0) + +static uint32_t fletcher_4_impl_chosen = IMPL_FASTEST; + +#define IMPL_READ(i) (*(volatile uint32_t *) &(i)) + +static struct fletcher_4_impl_selector { + const char *fis_name; + uint32_t fis_sel; +} fletcher_4_impl_selectors[] = { +#if !defined(_KERNEL) + { "cycle", IMPL_CYCLE }, +#endif + { "fastest", IMPL_FASTEST }, + { "scalar", IMPL_SCALAR } +}; + +static kstat_t *fletcher_4_kstat; + +static struct fletcher_4_kstat { + uint64_t native; + uint64_t byteswap; +} fletcher_4_stat_data[ARRAY_SIZE(fletcher_4_impls) + 1]; + +/* Indicate that benchmark has been completed */ +static boolean_t fletcher_4_initialized = B_FALSE; + +/*ARGSUSED*/ +void +fletcher_init(zio_cksum_t *zcp) +{ + ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0); +} + +int +fletcher_2_incremental_native(void *buf, size_t size, void *data) +{ + zio_cksum_t *zcp = data; + + const uint64_t *ip = buf; + const uint64_t *ipend = ip + (size / sizeof (uint64_t)); + uint64_t a0, b0, a1, b1; + + a0 = zcp->zc_word[0]; + a1 = zcp->zc_word[1]; + b0 = zcp->zc_word[2]; + b1 = zcp->zc_word[3]; + + for (; ip < ipend; ip += 2) { + a0 += ip[0]; + a1 += ip[1]; + b0 += a0; + b1 += a1; + } + + ZIO_SET_CHECKSUM(zcp, a0, a1, b0, b1); + return (0); +} + +/*ARGSUSED*/ +void +fletcher_2_native(const void *buf, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_init(zcp); + (void) fletcher_2_incremental_native((void *) buf, size, zcp); +} + +int +fletcher_2_incremental_byteswap(void *buf, size_t size, void *data) +{ + zio_cksum_t *zcp = data; + + const uint64_t *ip = buf; + const uint64_t *ipend = ip + (size / sizeof (uint64_t)); + uint64_t a0, b0, a1, b1; + + a0 = zcp->zc_word[0]; + a1 = zcp->zc_word[1]; + b0 = zcp->zc_word[2]; + b1 = zcp->zc_word[3]; + + for (; ip < ipend; ip += 2) { + a0 += BSWAP_64(ip[0]); + a1 += BSWAP_64(ip[1]); + b0 += a0; + b1 += a1; + } + + ZIO_SET_CHECKSUM(zcp, a0, a1, b0, b1); + return (0); +} + +/*ARGSUSED*/ +void +fletcher_2_byteswap(const void *buf, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_init(zcp); + (void) fletcher_2_incremental_byteswap((void *) buf, size, zcp); +} + +static void +fletcher_4_scalar_init(fletcher_4_ctx_t *ctx) +{ + ZIO_SET_CHECKSUM(&ctx->scalar, 0, 0, 0, 0); +} + +static void +fletcher_4_scalar_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + memcpy(zcp, &ctx->scalar, sizeof (zio_cksum_t)); +} + +static void +fletcher_4_scalar_native(fletcher_4_ctx_t *ctx, const void *buf, + uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + + a = ctx->scalar.zc_word[0]; + b = ctx->scalar.zc_word[1]; + c = ctx->scalar.zc_word[2]; + d = ctx->scalar.zc_word[3]; + + for (; ip < ipend; ip++) { + a += ip[0]; + b += a; + c += b; + d += c; + } + + ZIO_SET_CHECKSUM(&ctx->scalar, a, b, c, d); +} + +static void +fletcher_4_scalar_byteswap(fletcher_4_ctx_t *ctx, const void *buf, + uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + + a = ctx->scalar.zc_word[0]; + b = ctx->scalar.zc_word[1]; + c = ctx->scalar.zc_word[2]; + d = ctx->scalar.zc_word[3]; + + for (; ip < ipend; ip++) { + a += BSWAP_32(ip[0]); + b += a; + c += b; + d += c; + } + + ZIO_SET_CHECKSUM(&ctx->scalar, a, b, c, d); +} + +static boolean_t +fletcher_4_scalar_valid(void) +{ + return (B_TRUE); +} + +int +fletcher_4_impl_set(const char *val) +{ + int err = -EINVAL; + uint32_t impl = IMPL_READ(fletcher_4_impl_chosen); + size_t i, val_len; + + val_len = strlen(val); + while ((val_len > 0) && !!isspace(val[val_len-1])) /* trim '\n' */ + val_len--; + + /* check mandatory implementations */ + for (i = 0; i < ARRAY_SIZE(fletcher_4_impl_selectors); i++) { + const char *name = fletcher_4_impl_selectors[i].fis_name; + + if (val_len == strlen(name) && + strncmp(val, name, val_len) == 0) { + impl = fletcher_4_impl_selectors[i].fis_sel; + err = 0; + break; + } + } + + if (err != 0 && fletcher_4_initialized) { + /* check all supported implementations */ + for (i = 0; i < fletcher_4_supp_impls_cnt; i++) { + const char *name = fletcher_4_supp_impls[i]->name; + + if (val_len == strlen(name) && + strncmp(val, name, val_len) == 0) { + impl = i; + err = 0; + break; + } + } + } + + if (err == 0) { + atomic_swap_32(&fletcher_4_impl_chosen, impl); + membar_producer(); + } + + return (err); +} + +static inline const fletcher_4_ops_t * +fletcher_4_impl_get(void) +{ + fletcher_4_ops_t *ops = NULL; + const uint32_t impl = IMPL_READ(fletcher_4_impl_chosen); + + switch (impl) { + case IMPL_FASTEST: + ASSERT(fletcher_4_initialized); + ops = &fletcher_4_fastest_impl; + break; +#if !defined(_KERNEL) + case IMPL_CYCLE: { + ASSERT(fletcher_4_initialized); + ASSERT3U(fletcher_4_supp_impls_cnt, >, 0); + + static uint32_t cycle_count = 0; + uint32_t idx = (++cycle_count) % fletcher_4_supp_impls_cnt; + ops = fletcher_4_supp_impls[idx]; + } + break; +#endif + default: + ASSERT3U(fletcher_4_supp_impls_cnt, >, 0); + ASSERT3U(impl, <, fletcher_4_supp_impls_cnt); + + ops = fletcher_4_supp_impls[impl]; + break; + } + + ASSERT3P(ops, !=, NULL); + + return (ops); +} + +static inline void +fletcher_4_native_impl(const void *buf, uint64_t size, zio_cksum_t *zcp) +{ + fletcher_4_ctx_t ctx; + const fletcher_4_ops_t *ops = fletcher_4_impl_get(); + + ops->init_native(&ctx); + ops->compute_native(&ctx, buf, size); + ops->fini_native(&ctx, zcp); +} + +/*ARGSUSED*/ +void +fletcher_4_native(const void *buf, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + const uint64_t p2size = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE); + + ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t))); + + if (size == 0 || p2size == 0) { + ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0); + + if (size > 0) + fletcher_4_scalar_native((fletcher_4_ctx_t *)zcp, + buf, size); + } else { + fletcher_4_native_impl(buf, p2size, zcp); + + if (p2size < size) + fletcher_4_scalar_native((fletcher_4_ctx_t *)zcp, + (char *)buf + p2size, size - p2size); + } +} + +void +fletcher_4_native_varsize(const void *buf, uint64_t size, zio_cksum_t *zcp) +{ + ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0); + fletcher_4_scalar_native((fletcher_4_ctx_t *)zcp, buf, size); +} + +static inline void +fletcher_4_byteswap_impl(const void *buf, uint64_t size, zio_cksum_t *zcp) +{ + fletcher_4_ctx_t ctx; + const fletcher_4_ops_t *ops = fletcher_4_impl_get(); + + ops->init_byteswap(&ctx); + ops->compute_byteswap(&ctx, buf, size); + ops->fini_byteswap(&ctx, zcp); +} + +/*ARGSUSED*/ +void +fletcher_4_byteswap(const void *buf, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + const uint64_t p2size = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE); + + ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t))); + + if (size == 0 || p2size == 0) { + ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0); + + if (size > 0) + fletcher_4_scalar_byteswap((fletcher_4_ctx_t *)zcp, + buf, size); + } else { + fletcher_4_byteswap_impl(buf, p2size, zcp); + + if (p2size < size) + fletcher_4_scalar_byteswap((fletcher_4_ctx_t *)zcp, + (char *)buf + p2size, size - p2size); + } +} + +/* Incremental Fletcher 4 */ + +#define ZFS_FLETCHER_4_INC_MAX_SIZE (8ULL << 20) + +static inline void +fletcher_4_incremental_combine(zio_cksum_t *zcp, const uint64_t size, + const zio_cksum_t *nzcp) +{ + const uint64_t c1 = size / sizeof (uint32_t); + const uint64_t c2 = c1 * (c1 + 1) / 2; + const uint64_t c3 = c2 * (c1 + 2) / 3; + + /* + * Value of 'c3' overflows on buffer sizes close to 16MiB. For that + * reason we split incremental fletcher4 computation of large buffers + * to steps of (ZFS_FLETCHER_4_INC_MAX_SIZE) size. + */ + ASSERT3U(size, <=, ZFS_FLETCHER_4_INC_MAX_SIZE); + + zcp->zc_word[3] += nzcp->zc_word[3] + c1 * zcp->zc_word[2] + + c2 * zcp->zc_word[1] + c3 * zcp->zc_word[0]; + zcp->zc_word[2] += nzcp->zc_word[2] + c1 * zcp->zc_word[1] + + c2 * zcp->zc_word[0]; + zcp->zc_word[1] += nzcp->zc_word[1] + c1 * zcp->zc_word[0]; + zcp->zc_word[0] += nzcp->zc_word[0]; +} + +static inline void +fletcher_4_incremental_impl(boolean_t native, const void *buf, uint64_t size, + zio_cksum_t *zcp) +{ + while (size > 0) { + zio_cksum_t nzc; + uint64_t len = MIN(size, ZFS_FLETCHER_4_INC_MAX_SIZE); + + if (native) + fletcher_4_native(buf, len, NULL, &nzc); + else + fletcher_4_byteswap(buf, len, NULL, &nzc); + + fletcher_4_incremental_combine(zcp, len, &nzc); + + size -= len; + buf += len; + } +} + +int +fletcher_4_incremental_native(void *buf, size_t size, void *data) +{ + zio_cksum_t *zcp = data; + /* Use scalar impl to directly update cksum of small blocks */ + if (size < SPA_MINBLOCKSIZE) + fletcher_4_scalar_native((fletcher_4_ctx_t *)zcp, buf, size); + else + fletcher_4_incremental_impl(B_TRUE, buf, size, zcp); + return (0); +} + +int +fletcher_4_incremental_byteswap(void *buf, size_t size, void *data) +{ + zio_cksum_t *zcp = data; + /* Use scalar impl to directly update cksum of small blocks */ + if (size < SPA_MINBLOCKSIZE) + fletcher_4_scalar_byteswap((fletcher_4_ctx_t *)zcp, buf, size); + else + fletcher_4_incremental_impl(B_FALSE, buf, size, zcp); + return (0); +} + + +/* Fletcher 4 kstats */ + +static int +fletcher_4_kstat_headers(char *buf, size_t size) +{ + ssize_t off = 0; + + off += snprintf(buf + off, size, "%-17s", "implementation"); + off += snprintf(buf + off, size - off, "%-15s", "native"); + (void) snprintf(buf + off, size - off, "%-15s\n", "byteswap"); + + return (0); +} + +static int +fletcher_4_kstat_data(char *buf, size_t size, void *data) +{ + struct fletcher_4_kstat *fastest_stat = + &fletcher_4_stat_data[fletcher_4_supp_impls_cnt]; + struct fletcher_4_kstat *curr_stat = (struct fletcher_4_kstat *)data; + ssize_t off = 0; + + if (curr_stat == fastest_stat) { + off += snprintf(buf + off, size - off, "%-17s", "fastest"); + off += snprintf(buf + off, size - off, "%-15s", + fletcher_4_supp_impls[fastest_stat->native]->name); + off += snprintf(buf + off, size - off, "%-15s\n", + fletcher_4_supp_impls[fastest_stat->byteswap]->name); + } else { + ptrdiff_t id = curr_stat - fletcher_4_stat_data; + + off += snprintf(buf + off, size - off, "%-17s", + fletcher_4_supp_impls[id]->name); + off += snprintf(buf + off, size - off, "%-15llu", + (u_longlong_t)curr_stat->native); + off += snprintf(buf + off, size - off, "%-15llu\n", + (u_longlong_t)curr_stat->byteswap); + } + + return (0); +} + +static void * +fletcher_4_kstat_addr(kstat_t *ksp, loff_t n) +{ + if (n <= fletcher_4_supp_impls_cnt) + ksp->ks_private = (void *) (fletcher_4_stat_data + n); + else + ksp->ks_private = NULL; + + return (ksp->ks_private); +} + +#define FLETCHER_4_FASTEST_FN_COPY(type, src) \ +{ \ + fletcher_4_fastest_impl.init_ ## type = src->init_ ## type; \ + fletcher_4_fastest_impl.fini_ ## type = src->fini_ ## type; \ + fletcher_4_fastest_impl.compute_ ## type = src->compute_ ## type; \ +} + +#define FLETCHER_4_BENCH_NS (MSEC2NSEC(50)) /* 50ms */ + +typedef void fletcher_checksum_func_t(const void *, uint64_t, const void *, + zio_cksum_t *); + +static void +fletcher_4_benchmark_impl(boolean_t native, char *data, uint64_t data_size) +{ + + struct fletcher_4_kstat *fastest_stat = + &fletcher_4_stat_data[fletcher_4_supp_impls_cnt]; + hrtime_t start; + uint64_t run_bw, run_time_ns, best_run = 0; + zio_cksum_t zc; + uint32_t i, l, sel_save = IMPL_READ(fletcher_4_impl_chosen); + + + fletcher_checksum_func_t *fletcher_4_test = native ? + fletcher_4_native : fletcher_4_byteswap; + + for (i = 0; i < fletcher_4_supp_impls_cnt; i++) { + struct fletcher_4_kstat *stat = &fletcher_4_stat_data[i]; + uint64_t run_count = 0; + + /* temporary set an implementation */ + fletcher_4_impl_chosen = i; + + kpreempt_disable(); + start = gethrtime(); + do { + for (l = 0; l < 32; l++, run_count++) + fletcher_4_test(data, data_size, NULL, &zc); + + run_time_ns = gethrtime() - start; + } while (run_time_ns < FLETCHER_4_BENCH_NS); + kpreempt_enable(); + + run_bw = data_size * run_count * NANOSEC; + run_bw /= run_time_ns; /* B/s */ + + if (native) + stat->native = run_bw; + else + stat->byteswap = run_bw; + + if (run_bw > best_run) { + best_run = run_bw; + + if (native) { + fastest_stat->native = i; + FLETCHER_4_FASTEST_FN_COPY(native, + fletcher_4_supp_impls[i]); + } else { + fastest_stat->byteswap = i; + FLETCHER_4_FASTEST_FN_COPY(byteswap, + fletcher_4_supp_impls[i]); + } + } + } + + /* restore original selection */ + atomic_swap_32(&fletcher_4_impl_chosen, sel_save); +} + +void +fletcher_4_init(void) +{ + static const size_t data_size = 1 << SPA_OLD_MAXBLOCKSHIFT; /* 128kiB */ + fletcher_4_ops_t *curr_impl; + char *databuf; + int i, c; + + /* move supported impl into fletcher_4_supp_impls */ + for (i = 0, c = 0; i < ARRAY_SIZE(fletcher_4_impls); i++) { + curr_impl = (fletcher_4_ops_t *)fletcher_4_impls[i]; + + if (curr_impl->valid && curr_impl->valid()) + fletcher_4_supp_impls[c++] = curr_impl; + } + membar_producer(); /* complete fletcher_4_supp_impls[] init */ + fletcher_4_supp_impls_cnt = c; /* number of supported impl */ + +#if !defined(_KERNEL) + /* Skip benchmarking and use last implementation as fastest */ + memcpy(&fletcher_4_fastest_impl, + fletcher_4_supp_impls[fletcher_4_supp_impls_cnt-1], + sizeof (fletcher_4_fastest_impl)); + fletcher_4_fastest_impl.name = "fastest"; + membar_producer(); + + fletcher_4_initialized = B_TRUE; + return; +#endif + /* Benchmark all supported implementations */ + databuf = vmem_alloc(data_size, KM_SLEEP); + for (i = 0; i < data_size / sizeof (uint64_t); i++) + ((uint64_t *)databuf)[i] = (uintptr_t)(databuf+i); /* warm-up */ + + fletcher_4_benchmark_impl(B_FALSE, databuf, data_size); + fletcher_4_benchmark_impl(B_TRUE, databuf, data_size); + + vmem_free(databuf, data_size); + + /* install kstats for all implementations */ + fletcher_4_kstat = kstat_create("zfs", 0, "fletcher_4_bench", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + if (fletcher_4_kstat != NULL) { + fletcher_4_kstat->ks_data = NULL; + fletcher_4_kstat->ks_ndata = UINT32_MAX; + kstat_set_raw_ops(fletcher_4_kstat, + fletcher_4_kstat_headers, + fletcher_4_kstat_data, + fletcher_4_kstat_addr); + kstat_install(fletcher_4_kstat); + } + + /* Finish initialization */ + fletcher_4_initialized = B_TRUE; +} + +void +fletcher_4_fini(void) +{ + if (fletcher_4_kstat != NULL) { + kstat_delete(fletcher_4_kstat); + fletcher_4_kstat = NULL; + } +} + +/* ABD adapters */ + +static void +abd_fletcher_4_init(zio_abd_checksum_data_t *cdp) +{ + const fletcher_4_ops_t *ops = fletcher_4_impl_get(); + cdp->acd_private = (void *) ops; + + if (cdp->acd_byteorder == ZIO_CHECKSUM_NATIVE) + ops->init_native(cdp->acd_ctx); + else + ops->init_byteswap(cdp->acd_ctx); +} + +static void +abd_fletcher_4_fini(zio_abd_checksum_data_t *cdp) +{ + fletcher_4_ops_t *ops = (fletcher_4_ops_t *)cdp->acd_private; + + ASSERT(ops); + + if (cdp->acd_byteorder == ZIO_CHECKSUM_NATIVE) + ops->fini_native(cdp->acd_ctx, cdp->acd_zcp); + else + ops->fini_byteswap(cdp->acd_ctx, cdp->acd_zcp); +} + +static void +abd_fletcher_4_simd2scalar(boolean_t native, void *data, size_t size, + zio_abd_checksum_data_t *cdp) +{ + zio_cksum_t *zcp = cdp->acd_zcp; + + ASSERT3U(size, <, FLETCHER_MIN_SIMD_SIZE); + + abd_fletcher_4_fini(cdp); + cdp->acd_private = (void *)&fletcher_4_scalar_ops; + + if (native) + fletcher_4_incremental_native(data, size, zcp); + else + fletcher_4_incremental_byteswap(data, size, zcp); +} + +static int +abd_fletcher_4_iter(void *data, size_t size, void *private) +{ + zio_abd_checksum_data_t *cdp = (zio_abd_checksum_data_t *)private; + fletcher_4_ctx_t *ctx = cdp->acd_ctx; + fletcher_4_ops_t *ops = (fletcher_4_ops_t *)cdp->acd_private; + boolean_t native = cdp->acd_byteorder == ZIO_CHECKSUM_NATIVE; + uint64_t asize = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE); + + ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t))); + + if (asize > 0) { + if (native) + ops->compute_native(ctx, data, asize); + else + ops->compute_byteswap(ctx, data, asize); + + size -= asize; + data = (char *)data + asize; + } + + if (size > 0) { + ASSERT3U(size, <, FLETCHER_MIN_SIMD_SIZE); + /* At this point we have to switch to scalar impl */ + abd_fletcher_4_simd2scalar(native, data, size, cdp); + } + + return (0); +} + +zio_abd_checksum_func_t fletcher_4_abd_ops = { + .acf_init = abd_fletcher_4_init, + .acf_fini = abd_fletcher_4_fini, + .acf_iter = abd_fletcher_4_iter +}; + + +#if defined(_KERNEL) && defined(HAVE_SPL) +#include + +static int +fletcher_4_param_get(char *buffer, zfs_kernel_param_t *unused) +{ + const uint32_t impl = IMPL_READ(fletcher_4_impl_chosen); + char *fmt; + int i, cnt = 0; + + /* list fastest */ + fmt = (impl == IMPL_FASTEST) ? "[%s] " : "%s "; + cnt += sprintf(buffer + cnt, fmt, "fastest"); + + /* list all supported implementations */ + for (i = 0; i < fletcher_4_supp_impls_cnt; i++) { + fmt = (i == impl) ? "[%s] " : "%s "; + cnt += sprintf(buffer + cnt, fmt, + fletcher_4_supp_impls[i]->name); + } + + return (cnt); +} + +static int +fletcher_4_param_set(const char *val, zfs_kernel_param_t *unused) +{ + return (fletcher_4_impl_set(val)); +} + +/* + * Choose a fletcher 4 implementation in ZFS. + * Users can choose "cycle" to exercise all implementations, but this is + * for testing purpose therefore it can only be set in user space. + */ +module_param_call(zfs_fletcher_4_impl, + fletcher_4_param_set, fletcher_4_param_get, NULL, 0644); +MODULE_PARM_DESC(zfs_fletcher_4_impl, "Select fletcher 4 implementation."); + +EXPORT_SYMBOL(fletcher_init); +EXPORT_SYMBOL(fletcher_2_incremental_native); +EXPORT_SYMBOL(fletcher_2_incremental_byteswap); +EXPORT_SYMBOL(fletcher_4_init); +EXPORT_SYMBOL(fletcher_4_fini); +EXPORT_SYMBOL(fletcher_2_native); +EXPORT_SYMBOL(fletcher_2_byteswap); +EXPORT_SYMBOL(fletcher_4_native); +EXPORT_SYMBOL(fletcher_4_native_varsize); +EXPORT_SYMBOL(fletcher_4_byteswap); +EXPORT_SYMBOL(fletcher_4_incremental_native); +EXPORT_SYMBOL(fletcher_4_incremental_byteswap); +EXPORT_SYMBOL(fletcher_4_abd_ops); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_aarch64_neon.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_aarch64_neon.c @@ -0,0 +1,215 @@ +/* + * Implement fast Fletcher4 with NEON instructions. (aarch64) + * + * Use the 128-bit NEON SIMD instructions and registers to compute + * Fletcher4 in two incremental 64-bit parallel accumulator streams, + * and then combine the streams to form the final four checksum words. + * This implementation is a derivative of the AVX SIMD implementation by + * James Guilford and Jinshan Xiong from Intel (see zfs_fletcher_intel.c). + * + * Copyright (C) 2016 Romain Dolbeau. + * + * Authors: + * Romain Dolbeau + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if defined(__aarch64__) + +#include +#include +#include +#include + +static void +fletcher_4_aarch64_neon_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->aarch64_neon, 4 * sizeof (zfs_fletcher_aarch64_neon_t)); +} + +static void +fletcher_4_aarch64_neon_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + uint64_t A, B, C, D; + A = ctx->aarch64_neon[0].v[0] + ctx->aarch64_neon[0].v[1]; + B = 2 * ctx->aarch64_neon[1].v[0] + 2 * ctx->aarch64_neon[1].v[1] - + ctx->aarch64_neon[0].v[1]; + C = 4 * ctx->aarch64_neon[2].v[0] - ctx->aarch64_neon[1].v[0] + + 4 * ctx->aarch64_neon[2].v[1] - 3 * ctx->aarch64_neon[1].v[1]; + D = 8 * ctx->aarch64_neon[3].v[0] - 4 * ctx->aarch64_neon[2].v[0] + + 8 * ctx->aarch64_neon[3].v[1] - 8 * ctx->aarch64_neon[2].v[1] + + ctx->aarch64_neon[1].v[1]; + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +#define NEON_INIT_LOOP() \ + asm("eor %[ZERO].16b,%[ZERO].16b,%[ZERO].16b\n" \ + "ld1 { %[ACC0].4s }, %[CTX0]\n" \ + "ld1 { %[ACC1].4s }, %[CTX1]\n" \ + "ld1 { %[ACC2].4s }, %[CTX2]\n" \ + "ld1 { %[ACC3].4s }, %[CTX3]\n" \ + : [ZERO] "=w" (ZERO), \ + [ACC0] "=w" (ACC0), [ACC1] "=w" (ACC1), \ + [ACC2] "=w" (ACC2), [ACC3] "=w" (ACC3) \ + : [CTX0] "Q" (ctx->aarch64_neon[0]), \ + [CTX1] "Q" (ctx->aarch64_neon[1]), \ + [CTX2] "Q" (ctx->aarch64_neon[2]), \ + [CTX3] "Q" (ctx->aarch64_neon[3])) + +#define NEON_DO_REVERSE "rev32 %[SRC].16b, %[SRC].16b\n" + +#define NEON_DONT_REVERSE "" + +#define NEON_MAIN_LOOP(REVERSE) \ + asm("ld1 { %[SRC].4s }, %[IP]\n" \ + REVERSE \ + "zip1 %[TMP1].4s, %[SRC].4s, %[ZERO].4s\n" \ + "zip2 %[TMP2].4s, %[SRC].4s, %[ZERO].4s\n" \ + "add %[ACC0].2d, %[ACC0].2d, %[TMP1].2d\n" \ + "add %[ACC1].2d, %[ACC1].2d, %[ACC0].2d\n" \ + "add %[ACC2].2d, %[ACC2].2d, %[ACC1].2d\n" \ + "add %[ACC3].2d, %[ACC3].2d, %[ACC2].2d\n" \ + "add %[ACC0].2d, %[ACC0].2d, %[TMP2].2d\n" \ + "add %[ACC1].2d, %[ACC1].2d, %[ACC0].2d\n" \ + "add %[ACC2].2d, %[ACC2].2d, %[ACC1].2d\n" \ + "add %[ACC3].2d, %[ACC3].2d, %[ACC2].2d\n" \ + : [SRC] "=&w" (SRC), \ + [TMP1] "=&w" (TMP1), [TMP2] "=&w" (TMP2), \ + [ACC0] "+w" (ACC0), [ACC1] "+w" (ACC1), \ + [ACC2] "+w" (ACC2), [ACC3] "+w" (ACC3) \ + : [ZERO] "w" (ZERO), [IP] "Q" (*ip)) + +#define NEON_FINI_LOOP() \ + asm("st1 { %[ACC0].4s },%[DST0]\n" \ + "st1 { %[ACC1].4s },%[DST1]\n" \ + "st1 { %[ACC2].4s },%[DST2]\n" \ + "st1 { %[ACC3].4s },%[DST3]\n" \ + : [DST0] "=Q" (ctx->aarch64_neon[0]), \ + [DST1] "=Q" (ctx->aarch64_neon[1]), \ + [DST2] "=Q" (ctx->aarch64_neon[2]), \ + [DST3] "=Q" (ctx->aarch64_neon[3]) \ + : [ACC0] "w" (ACC0), [ACC1] "w" (ACC1), \ + [ACC2] "w" (ACC2), [ACC3] "w" (ACC3)) + +static void +fletcher_4_aarch64_neon_native(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); +#if defined(_KERNEL) +register unsigned char ZERO asm("v0") __attribute__((vector_size(16))); +register unsigned char ACC0 asm("v1") __attribute__((vector_size(16))); +register unsigned char ACC1 asm("v2") __attribute__((vector_size(16))); +register unsigned char ACC2 asm("v3") __attribute__((vector_size(16))); +register unsigned char ACC3 asm("v4") __attribute__((vector_size(16))); +register unsigned char TMP1 asm("v5") __attribute__((vector_size(16))); +register unsigned char TMP2 asm("v6") __attribute__((vector_size(16))); +register unsigned char SRC asm("v7") __attribute__((vector_size(16))); +#else +unsigned char ZERO __attribute__((vector_size(16))); +unsigned char ACC0 __attribute__((vector_size(16))); +unsigned char ACC1 __attribute__((vector_size(16))); +unsigned char ACC2 __attribute__((vector_size(16))); +unsigned char ACC3 __attribute__((vector_size(16))); +unsigned char TMP1 __attribute__((vector_size(16))); +unsigned char TMP2 __attribute__((vector_size(16))); +unsigned char SRC __attribute__((vector_size(16))); +#endif + + kfpu_begin(); + + NEON_INIT_LOOP(); + + for (; ip < ipend; ip += 2) { + NEON_MAIN_LOOP(NEON_DONT_REVERSE); + } + + NEON_FINI_LOOP(); + + kfpu_end(); +} + +static void +fletcher_4_aarch64_neon_byteswap(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); +#if defined(_KERNEL) +register unsigned char ZERO asm("v0") __attribute__((vector_size(16))); +register unsigned char ACC0 asm("v1") __attribute__((vector_size(16))); +register unsigned char ACC1 asm("v2") __attribute__((vector_size(16))); +register unsigned char ACC2 asm("v3") __attribute__((vector_size(16))); +register unsigned char ACC3 asm("v4") __attribute__((vector_size(16))); +register unsigned char TMP1 asm("v5") __attribute__((vector_size(16))); +register unsigned char TMP2 asm("v6") __attribute__((vector_size(16))); +register unsigned char SRC asm("v7") __attribute__((vector_size(16))); +#else +unsigned char ZERO __attribute__((vector_size(16))); +unsigned char ACC0 __attribute__((vector_size(16))); +unsigned char ACC1 __attribute__((vector_size(16))); +unsigned char ACC2 __attribute__((vector_size(16))); +unsigned char ACC3 __attribute__((vector_size(16))); +unsigned char TMP1 __attribute__((vector_size(16))); +unsigned char TMP2 __attribute__((vector_size(16))); +unsigned char SRC __attribute__((vector_size(16))); +#endif + + kfpu_begin(); + + NEON_INIT_LOOP(); + + for (; ip < ipend; ip += 2) { + NEON_MAIN_LOOP(NEON_DO_REVERSE); + } + + NEON_FINI_LOOP(); + + kfpu_end(); +} + +static boolean_t fletcher_4_aarch64_neon_valid(void) +{ + return (B_TRUE); +} + +const fletcher_4_ops_t fletcher_4_aarch64_neon_ops = { + .init_native = fletcher_4_aarch64_neon_init, + .compute_native = fletcher_4_aarch64_neon_native, + .fini_native = fletcher_4_aarch64_neon_fini, + .init_byteswap = fletcher_4_aarch64_neon_init, + .compute_byteswap = fletcher_4_aarch64_neon_byteswap, + .fini_byteswap = fletcher_4_aarch64_neon_fini, + .valid = fletcher_4_aarch64_neon_valid, + .name = "aarch64_neon" +}; + +#endif /* defined(__aarch64__) */ --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_avx512.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_avx512.c @@ -0,0 +1,171 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden NeÅ¡ković. All rights reserved. + */ + +#if defined(__x86_64) && defined(HAVE_AVX512F) + +#include +#include +#include +#include +#include + +#define __asm __asm__ __volatile__ + +static void +fletcher_4_avx512f_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->avx512, 4 * sizeof (zfs_fletcher_avx512_t)); +} + +static void +fletcher_4_avx512f_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + static const uint64_t + CcA[] = { 0, 0, 1, 3, 6, 10, 15, 21 }, + CcB[] = { 28, 36, 44, 52, 60, 68, 76, 84 }, + DcA[] = { 0, 0, 0, 1, 4, 10, 20, 35 }, + DcB[] = { 56, 84, 120, 164, 216, 276, 344, 420 }, + DcC[] = { 448, 512, 576, 640, 704, 768, 832, 896 }; + + uint64_t A, B, C, D; + uint64_t i; + + A = ctx->avx512[0].v[0]; + B = 8 * ctx->avx512[1].v[0]; + C = 64 * ctx->avx512[2].v[0] - CcB[0] * ctx->avx512[1].v[0]; + D = 512 * ctx->avx512[3].v[0] - DcC[0] * ctx->avx512[2].v[0] + + DcB[0] * ctx->avx512[1].v[0]; + + for (i = 1; i < 8; i++) { + A += ctx->avx512[0].v[i]; + B += 8 * ctx->avx512[1].v[i] - i * ctx->avx512[0].v[i]; + C += 64 * ctx->avx512[2].v[i] - CcB[i] * ctx->avx512[1].v[i] + + CcA[i] * ctx->avx512[0].v[i]; + D += 512 * ctx->avx512[3].v[i] - DcC[i] * ctx->avx512[2].v[i] + + DcB[i] * ctx->avx512[1].v[i] - DcA[i] * ctx->avx512[0].v[i]; + } + + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +#define FLETCHER_4_AVX512_RESTORE_CTX(ctx) \ +{ \ + __asm("vmovdqu64 %0, %%zmm0" :: "m" ((ctx)->avx512[0])); \ + __asm("vmovdqu64 %0, %%zmm1" :: "m" ((ctx)->avx512[1])); \ + __asm("vmovdqu64 %0, %%zmm2" :: "m" ((ctx)->avx512[2])); \ + __asm("vmovdqu64 %0, %%zmm3" :: "m" ((ctx)->avx512[3])); \ +} + +#define FLETCHER_4_AVX512_SAVE_CTX(ctx) \ +{ \ + __asm("vmovdqu64 %%zmm0, %0" : "=m" ((ctx)->avx512[0])); \ + __asm("vmovdqu64 %%zmm1, %0" : "=m" ((ctx)->avx512[1])); \ + __asm("vmovdqu64 %%zmm2, %0" : "=m" ((ctx)->avx512[2])); \ + __asm("vmovdqu64 %%zmm3, %0" : "=m" ((ctx)->avx512[3])); \ +} + +static void +fletcher_4_avx512f_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = (uint32_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_AVX512_RESTORE_CTX(ctx); + + for (; ip < ipend; ip += 8) { + __asm("vpmovzxdq %0, %%zmm4"::"m" (*ip)); + __asm("vpaddq %zmm4, %zmm0, %zmm0"); + __asm("vpaddq %zmm0, %zmm1, %zmm1"); + __asm("vpaddq %zmm1, %zmm2, %zmm2"); + __asm("vpaddq %zmm2, %zmm3, %zmm3"); + } + + FLETCHER_4_AVX512_SAVE_CTX(ctx); + + kfpu_end(); +} + +static void +fletcher_4_avx512f_byteswap(fletcher_4_ctx_t *ctx, const void *buf, + uint64_t size) +{ + static const uint64_t byteswap_mask = 0xFFULL; + const uint32_t *ip = buf; + const uint32_t *ipend = (uint32_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_AVX512_RESTORE_CTX(ctx); + + __asm("vpbroadcastq %0, %%zmm8" :: "r" (byteswap_mask)); + __asm("vpsllq $8, %zmm8, %zmm9"); + __asm("vpsllq $16, %zmm8, %zmm10"); + __asm("vpsllq $24, %zmm8, %zmm11"); + + for (; ip < ipend; ip += 8) { + __asm("vpmovzxdq %0, %%zmm5"::"m" (*ip)); + + __asm("vpsrlq $24, %zmm5, %zmm6"); + __asm("vpandd %zmm8, %zmm6, %zmm6"); + __asm("vpsrlq $8, %zmm5, %zmm7"); + __asm("vpandd %zmm9, %zmm7, %zmm7"); + __asm("vpord %zmm6, %zmm7, %zmm4"); + __asm("vpsllq $8, %zmm5, %zmm6"); + __asm("vpandd %zmm10, %zmm6, %zmm6"); + __asm("vpord %zmm6, %zmm4, %zmm4"); + __asm("vpsllq $24, %zmm5, %zmm5"); + __asm("vpandd %zmm11, %zmm5, %zmm5"); + __asm("vpord %zmm5, %zmm4, %zmm4"); + + __asm("vpaddq %zmm4, %zmm0, %zmm0"); + __asm("vpaddq %zmm0, %zmm1, %zmm1"); + __asm("vpaddq %zmm1, %zmm2, %zmm2"); + __asm("vpaddq %zmm2, %zmm3, %zmm3"); + } + + FLETCHER_4_AVX512_SAVE_CTX(ctx) + + kfpu_end(); +} + +static boolean_t +fletcher_4_avx512f_valid(void) +{ + return (zfs_avx512f_available()); +} + +const fletcher_4_ops_t fletcher_4_avx512f_ops = { + .init_native = fletcher_4_avx512f_init, + .fini_native = fletcher_4_avx512f_fini, + .compute_native = fletcher_4_avx512f_native, + .init_byteswap = fletcher_4_avx512f_init, + .fini_byteswap = fletcher_4_avx512f_fini, + .compute_byteswap = fletcher_4_avx512f_byteswap, + .valid = fletcher_4_avx512f_valid, + .name = "avx512f" +}; + +#endif /* defined(__x86_64) && defined(HAVE_AVX512F) */ --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_intel.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_intel.c @@ -0,0 +1,173 @@ +/* + * Implement fast Fletcher4 with AVX2 instructions. (x86_64) + * + * Use the 256-bit AVX2 SIMD instructions and registers to compute + * Fletcher4 in four incremental 64-bit parallel accumulator streams, + * and then combine the streams to form the final four checksum words. + * + * Copyright (C) 2015 Intel Corporation. + * + * Authors: + * James Guilford + * Jinshan Xiong + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if defined(HAVE_AVX) && defined(HAVE_AVX2) + +#include +#include +#include +#include + +static void +fletcher_4_avx2_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->avx, 4 * sizeof (zfs_fletcher_avx_t)); +} + +static void +fletcher_4_avx2_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + uint64_t A, B, C, D; + + A = ctx->avx[0].v[0] + ctx->avx[0].v[1] + + ctx->avx[0].v[2] + ctx->avx[0].v[3]; + B = 0 - ctx->avx[0].v[1] - 2 * ctx->avx[0].v[2] - 3 * ctx->avx[0].v[3] + + 4 * ctx->avx[1].v[0] + 4 * ctx->avx[1].v[1] + 4 * ctx->avx[1].v[2] + + 4 * ctx->avx[1].v[3]; + + C = ctx->avx[0].v[2] + 3 * ctx->avx[0].v[3] - 6 * ctx->avx[1].v[0] - + 10 * ctx->avx[1].v[1] - 14 * ctx->avx[1].v[2] - + 18 * ctx->avx[1].v[3] + 16 * ctx->avx[2].v[0] + + 16 * ctx->avx[2].v[1] + 16 * ctx->avx[2].v[2] + + 16 * ctx->avx[2].v[3]; + + D = 0 - ctx->avx[0].v[3] + 4 * ctx->avx[1].v[0] + + 10 * ctx->avx[1].v[1] + 20 * ctx->avx[1].v[2] + + 34 * ctx->avx[1].v[3] - 48 * ctx->avx[2].v[0] - + 64 * ctx->avx[2].v[1] - 80 * ctx->avx[2].v[2] - + 96 * ctx->avx[2].v[3] + 64 * ctx->avx[3].v[0] + + 64 * ctx->avx[3].v[1] + 64 * ctx->avx[3].v[2] + + 64 * ctx->avx[3].v[3]; + + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +#define FLETCHER_4_AVX2_RESTORE_CTX(ctx) \ +{ \ + asm volatile("vmovdqu %0, %%ymm0" :: "m" ((ctx)->avx[0])); \ + asm volatile("vmovdqu %0, %%ymm1" :: "m" ((ctx)->avx[1])); \ + asm volatile("vmovdqu %0, %%ymm2" :: "m" ((ctx)->avx[2])); \ + asm volatile("vmovdqu %0, %%ymm3" :: "m" ((ctx)->avx[3])); \ +} + +#define FLETCHER_4_AVX2_SAVE_CTX(ctx) \ +{ \ + asm volatile("vmovdqu %%ymm0, %0" : "=m" ((ctx)->avx[0])); \ + asm volatile("vmovdqu %%ymm1, %0" : "=m" ((ctx)->avx[1])); \ + asm volatile("vmovdqu %%ymm2, %0" : "=m" ((ctx)->avx[2])); \ + asm volatile("vmovdqu %%ymm3, %0" : "=m" ((ctx)->avx[3])); \ +} + + +static void +fletcher_4_avx2_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_AVX2_RESTORE_CTX(ctx); + + for (; ip < ipend; ip += 2) { + asm volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip)); + asm volatile("vpaddq %ymm4, %ymm0, %ymm0"); + asm volatile("vpaddq %ymm0, %ymm1, %ymm1"); + asm volatile("vpaddq %ymm1, %ymm2, %ymm2"); + asm volatile("vpaddq %ymm2, %ymm3, %ymm3"); + } + + FLETCHER_4_AVX2_SAVE_CTX(ctx); + asm volatile("vzeroupper"); + + kfpu_end(); +} + +static void +fletcher_4_avx2_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + static const zfs_fletcher_avx_t mask = { + .v = { 0xFFFFFFFF00010203, 0xFFFFFFFF08090A0B, + 0xFFFFFFFF00010203, 0xFFFFFFFF08090A0B } + }; + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_AVX2_RESTORE_CTX(ctx); + + asm volatile("vmovdqu %0, %%ymm5" :: "m" (mask)); + + for (; ip < ipend; ip += 2) { + asm volatile("vpmovzxdq %0, %%ymm4"::"m" (*ip)); + asm volatile("vpshufb %ymm5, %ymm4, %ymm4"); + + asm volatile("vpaddq %ymm4, %ymm0, %ymm0"); + asm volatile("vpaddq %ymm0, %ymm1, %ymm1"); + asm volatile("vpaddq %ymm1, %ymm2, %ymm2"); + asm volatile("vpaddq %ymm2, %ymm3, %ymm3"); + } + + FLETCHER_4_AVX2_SAVE_CTX(ctx); + asm volatile("vzeroupper"); + + kfpu_end(); +} + +static boolean_t fletcher_4_avx2_valid(void) +{ + return (zfs_avx_available() && zfs_avx2_available()); +} + +const fletcher_4_ops_t fletcher_4_avx2_ops = { + .init_native = fletcher_4_avx2_init, + .fini_native = fletcher_4_avx2_fini, + .compute_native = fletcher_4_avx2_native, + .init_byteswap = fletcher_4_avx2_init, + .fini_byteswap = fletcher_4_avx2_fini, + .compute_byteswap = fletcher_4_avx2_byteswap, + .valid = fletcher_4_avx2_valid, + .name = "avx2" +}; + +#endif /* defined(HAVE_AVX) && defined(HAVE_AVX2) */ --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_sse.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_sse.c @@ -0,0 +1,231 @@ +/* + * Implement fast Fletcher4 with SSE2,SSSE3 instructions. (x86) + * + * Use the 128-bit SSE2/SSSE3 SIMD instructions and registers to compute + * Fletcher4 in two incremental 64-bit parallel accumulator streams, + * and then combine the streams to form the final four checksum words. + * This implementation is a derivative of the AVX SIMD implementation by + * James Guilford and Jinshan Xiong from Intel (see zfs_fletcher_intel.c). + * + * Copyright (C) 2016 Tyler J. Stachecki. + * + * Authors: + * Tyler J. Stachecki + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if defined(HAVE_SSE2) + +#include +#include +#include +#include +#include + +static void +fletcher_4_sse2_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->sse, 4 * sizeof (zfs_fletcher_sse_t)); +} + +static void +fletcher_4_sse2_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + uint64_t A, B, C, D; + + /* + * The mixing matrix for checksum calculation is: + * a = a0 + a1 + * b = 2b0 + 2b1 - a1 + * c = 4c0 - b0 + 4c1 -3b1 + * d = 8d0 - 4c0 + 8d1 - 8c1 + b1; + * + * c and d are multiplied by 4 and 8, respectively, + * before spilling the vectors out to memory. + */ + A = ctx->sse[0].v[0] + ctx->sse[0].v[1]; + B = 2 * ctx->sse[1].v[0] + 2 * ctx->sse[1].v[1] - ctx->sse[0].v[1]; + C = 4 * ctx->sse[2].v[0] - ctx->sse[1].v[0] + 4 * ctx->sse[2].v[1] - + 3 * ctx->sse[1].v[1]; + D = 8 * ctx->sse[3].v[0] - 4 * ctx->sse[2].v[0] + 8 * ctx->sse[3].v[1] - + 8 * ctx->sse[2].v[1] + ctx->sse[1].v[1]; + + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +#define FLETCHER_4_SSE_RESTORE_CTX(ctx) \ +{ \ + asm volatile("movdqu %0, %%xmm0" :: "m" ((ctx)->sse[0])); \ + asm volatile("movdqu %0, %%xmm1" :: "m" ((ctx)->sse[1])); \ + asm volatile("movdqu %0, %%xmm2" :: "m" ((ctx)->sse[2])); \ + asm volatile("movdqu %0, %%xmm3" :: "m" ((ctx)->sse[3])); \ +} + +#define FLETCHER_4_SSE_SAVE_CTX(ctx) \ +{ \ + asm volatile("movdqu %%xmm0, %0" : "=m" ((ctx)->sse[0])); \ + asm volatile("movdqu %%xmm1, %0" : "=m" ((ctx)->sse[1])); \ + asm volatile("movdqu %%xmm2, %0" : "=m" ((ctx)->sse[2])); \ + asm volatile("movdqu %%xmm3, %0" : "=m" ((ctx)->sse[3])); \ +} + +static void +fletcher_4_sse2_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_SSE_RESTORE_CTX(ctx); + + asm volatile("pxor %xmm4, %xmm4"); + + for (; ip < ipend; ip += 2) { + asm volatile("movdqu %0, %%xmm5" :: "m"(*ip)); + asm volatile("movdqa %xmm5, %xmm6"); + asm volatile("punpckldq %xmm4, %xmm5"); + asm volatile("punpckhdq %xmm4, %xmm6"); + asm volatile("paddq %xmm5, %xmm0"); + asm volatile("paddq %xmm0, %xmm1"); + asm volatile("paddq %xmm1, %xmm2"); + asm volatile("paddq %xmm2, %xmm3"); + asm volatile("paddq %xmm6, %xmm0"); + asm volatile("paddq %xmm0, %xmm1"); + asm volatile("paddq %xmm1, %xmm2"); + asm volatile("paddq %xmm2, %xmm3"); + } + + FLETCHER_4_SSE_SAVE_CTX(ctx); + + kfpu_end(); +} + +static void +fletcher_4_sse2_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = (uint32_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_SSE_RESTORE_CTX(ctx); + + for (; ip < ipend; ip += 2) { + uint32_t scratch1 = BSWAP_32(ip[0]); + uint32_t scratch2 = BSWAP_32(ip[1]); + asm volatile("movd %0, %%xmm5" :: "r"(scratch1)); + asm volatile("movd %0, %%xmm6" :: "r"(scratch2)); + asm volatile("punpcklqdq %xmm6, %xmm5"); + asm volatile("paddq %xmm5, %xmm0"); + asm volatile("paddq %xmm0, %xmm1"); + asm volatile("paddq %xmm1, %xmm2"); + asm volatile("paddq %xmm2, %xmm3"); + } + + FLETCHER_4_SSE_SAVE_CTX(ctx); + + kfpu_end(); +} + +static boolean_t fletcher_4_sse2_valid(void) +{ + return (zfs_sse2_available()); +} + +const fletcher_4_ops_t fletcher_4_sse2_ops = { + .init_native = fletcher_4_sse2_init, + .fini_native = fletcher_4_sse2_fini, + .compute_native = fletcher_4_sse2_native, + .init_byteswap = fletcher_4_sse2_init, + .fini_byteswap = fletcher_4_sse2_fini, + .compute_byteswap = fletcher_4_sse2_byteswap, + .valid = fletcher_4_sse2_valid, + .name = "sse2" +}; + +#endif /* defined(HAVE_SSE2) */ + +#if defined(HAVE_SSE2) && defined(HAVE_SSSE3) +static void +fletcher_4_ssse3_byteswap(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size) +{ + static const zfs_fletcher_sse_t mask = { + .v = { 0x0405060700010203, 0x0C0D0E0F08090A0B } + }; + + const uint64_t *ip = buf; + const uint64_t *ipend = (uint64_t *)((uint8_t *)ip + size); + + kfpu_begin(); + + FLETCHER_4_SSE_RESTORE_CTX(ctx); + + asm volatile("movdqu %0, %%xmm7"::"m" (mask)); + asm volatile("pxor %xmm4, %xmm4"); + + for (; ip < ipend; ip += 2) { + asm volatile("movdqu %0, %%xmm5"::"m" (*ip)); + asm volatile("pshufb %xmm7, %xmm5"); + asm volatile("movdqa %xmm5, %xmm6"); + asm volatile("punpckldq %xmm4, %xmm5"); + asm volatile("punpckhdq %xmm4, %xmm6"); + asm volatile("paddq %xmm5, %xmm0"); + asm volatile("paddq %xmm0, %xmm1"); + asm volatile("paddq %xmm1, %xmm2"); + asm volatile("paddq %xmm2, %xmm3"); + asm volatile("paddq %xmm6, %xmm0"); + asm volatile("paddq %xmm0, %xmm1"); + asm volatile("paddq %xmm1, %xmm2"); + asm volatile("paddq %xmm2, %xmm3"); + } + + FLETCHER_4_SSE_SAVE_CTX(ctx); + + kfpu_end(); +} + +static boolean_t fletcher_4_ssse3_valid(void) +{ + return (zfs_sse2_available() && zfs_ssse3_available()); +} + +const fletcher_4_ops_t fletcher_4_ssse3_ops = { + .init_native = fletcher_4_sse2_init, + .fini_native = fletcher_4_sse2_fini, + .compute_native = fletcher_4_sse2_native, + .init_byteswap = fletcher_4_sse2_init, + .fini_byteswap = fletcher_4_sse2_fini, + .compute_byteswap = fletcher_4_ssse3_byteswap, + .valid = fletcher_4_ssse3_valid, + .name = "ssse3" +}; + +#endif /* defined(HAVE_SSE2) && defined(HAVE_SSSE3) */ --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_superscalar.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_superscalar.c @@ -0,0 +1,162 @@ +/* + * Implement fast Fletcher4 using superscalar pipelines. + * + * Use regular C code to compute + * Fletcher4 in two incremental 64-bit parallel accumulator streams, + * and then combine the streams to form the final four checksum words. + * This implementation is a derivative of the AVX SIMD implementation by + * James Guilford and Jinshan Xiong from Intel (see zfs_fletcher_intel.c). + * + * Copyright (C) 2016 Romain Dolbeau. + * + * Authors: + * Romain Dolbeau + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include + +static void +fletcher_4_superscalar_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->superscalar, 4 * sizeof (zfs_fletcher_superscalar_t)); +} + +static void +fletcher_4_superscalar_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + uint64_t A, B, C, D; + A = ctx->superscalar[0].v[0] + ctx->superscalar[0].v[1]; + B = 2 * ctx->superscalar[1].v[0] + 2 * ctx->superscalar[1].v[1] - + ctx->superscalar[0].v[1]; + C = 4 * ctx->superscalar[2].v[0] - ctx->superscalar[1].v[0] + + 4 * ctx->superscalar[2].v[1] - 3 * ctx->superscalar[1].v[1]; + D = 8 * ctx->superscalar[3].v[0] - 4 * ctx->superscalar[2].v[0] + + 8 * ctx->superscalar[3].v[1] - 8 * ctx->superscalar[2].v[1] + + ctx->superscalar[1].v[1]; + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +static void +fletcher_4_superscalar_native(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + uint64_t a2, b2, c2, d2; + + a = ctx->superscalar[0].v[0]; + b = ctx->superscalar[1].v[0]; + c = ctx->superscalar[2].v[0]; + d = ctx->superscalar[3].v[0]; + a2 = ctx->superscalar[0].v[1]; + b2 = ctx->superscalar[1].v[1]; + c2 = ctx->superscalar[2].v[1]; + d2 = ctx->superscalar[3].v[1]; + + for (; ip < ipend; ip += 2) { + a += ip[0]; + a2 += ip[1]; + b += a; + b2 += a2; + c += b; + c2 += b2; + d += c; + d2 += c2; + } + + ctx->superscalar[0].v[0] = a; + ctx->superscalar[1].v[0] = b; + ctx->superscalar[2].v[0] = c; + ctx->superscalar[3].v[0] = d; + ctx->superscalar[0].v[1] = a2; + ctx->superscalar[1].v[1] = b2; + ctx->superscalar[2].v[1] = c2; + ctx->superscalar[3].v[1] = d2; +} + +static void +fletcher_4_superscalar_byteswap(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + uint64_t a2, b2, c2, d2; + + a = ctx->superscalar[0].v[0]; + b = ctx->superscalar[1].v[0]; + c = ctx->superscalar[2].v[0]; + d = ctx->superscalar[3].v[0]; + a2 = ctx->superscalar[0].v[1]; + b2 = ctx->superscalar[1].v[1]; + c2 = ctx->superscalar[2].v[1]; + d2 = ctx->superscalar[3].v[1]; + + for (; ip < ipend; ip += 2) { + a += BSWAP_32(ip[0]); + a2 += BSWAP_32(ip[1]); + b += a; + b2 += a2; + c += b; + c2 += b2; + d += c; + d2 += c2; + } + + ctx->superscalar[0].v[0] = a; + ctx->superscalar[1].v[0] = b; + ctx->superscalar[2].v[0] = c; + ctx->superscalar[3].v[0] = d; + ctx->superscalar[0].v[1] = a2; + ctx->superscalar[1].v[1] = b2; + ctx->superscalar[2].v[1] = c2; + ctx->superscalar[3].v[1] = d2; +} + +static boolean_t fletcher_4_superscalar_valid(void) +{ + return (B_TRUE); +} + +const fletcher_4_ops_t fletcher_4_superscalar_ops = { + .init_native = fletcher_4_superscalar_init, + .compute_native = fletcher_4_superscalar_native, + .fini_native = fletcher_4_superscalar_fini, + .init_byteswap = fletcher_4_superscalar_init, + .compute_byteswap = fletcher_4_superscalar_byteswap, + .fini_byteswap = fletcher_4_superscalar_fini, + .valid = fletcher_4_superscalar_valid, + .name = "superscalar" +}; --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_fletcher_superscalar4.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_fletcher_superscalar4.c @@ -0,0 +1,228 @@ +/* + * Implement fast Fletcher4 using superscalar pipelines. + * + * Use regular C code to compute + * Fletcher4 in four incremental 64-bit parallel accumulator streams, + * and then combine the streams to form the final four checksum words. + * This implementation is a derivative of the AVX SIMD implementation by + * James Guilford and Jinshan Xiong from Intel (see zfs_fletcher_intel.c). + * + * Copyright (C) 2016 Romain Dolbeau. + * + * Authors: + * Romain Dolbeau + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include + +static void +fletcher_4_superscalar4_init(fletcher_4_ctx_t *ctx) +{ + bzero(ctx->superscalar, 4 * sizeof (zfs_fletcher_superscalar_t)); +} + +static void +fletcher_4_superscalar4_fini(fletcher_4_ctx_t *ctx, zio_cksum_t *zcp) +{ + uint64_t A, B, C, D; + + A = ctx->superscalar[0].v[0] + ctx->superscalar[0].v[1] + + ctx->superscalar[0].v[2] + ctx->superscalar[0].v[3]; + B = 0 - ctx->superscalar[0].v[1] - 2 * ctx->superscalar[0].v[2] - + 3 * ctx->superscalar[0].v[3] + 4 * ctx->superscalar[1].v[0] + + 4 * ctx->superscalar[1].v[1] + 4 * ctx->superscalar[1].v[2] + + 4 * ctx->superscalar[1].v[3]; + + C = ctx->superscalar[0].v[2] + 3 * ctx->superscalar[0].v[3] - + 6 * ctx->superscalar[1].v[0] - 10 * ctx->superscalar[1].v[1] - + 14 * ctx->superscalar[1].v[2] - 18 * ctx->superscalar[1].v[3] + + 16 * ctx->superscalar[2].v[0] + 16 * ctx->superscalar[2].v[1] + + 16 * ctx->superscalar[2].v[2] + 16 * ctx->superscalar[2].v[3]; + + D = 0 - ctx->superscalar[0].v[3] + 4 * ctx->superscalar[1].v[0] + + 10 * ctx->superscalar[1].v[1] + 20 * ctx->superscalar[1].v[2] + + 34 * ctx->superscalar[1].v[3] - 48 * ctx->superscalar[2].v[0] - + 64 * ctx->superscalar[2].v[1] - 80 * ctx->superscalar[2].v[2] - + 96 * ctx->superscalar[2].v[3] + 64 * ctx->superscalar[3].v[0] + + 64 * ctx->superscalar[3].v[1] + 64 * ctx->superscalar[3].v[2] + + 64 * ctx->superscalar[3].v[3]; + + ZIO_SET_CHECKSUM(zcp, A, B, C, D); +} + +static void +fletcher_4_superscalar4_native(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + uint64_t a2, b2, c2, d2; + uint64_t a3, b3, c3, d3; + uint64_t a4, b4, c4, d4; + + a = ctx->superscalar[0].v[0]; + b = ctx->superscalar[1].v[0]; + c = ctx->superscalar[2].v[0]; + d = ctx->superscalar[3].v[0]; + a2 = ctx->superscalar[0].v[1]; + b2 = ctx->superscalar[1].v[1]; + c2 = ctx->superscalar[2].v[1]; + d2 = ctx->superscalar[3].v[1]; + a3 = ctx->superscalar[0].v[2]; + b3 = ctx->superscalar[1].v[2]; + c3 = ctx->superscalar[2].v[2]; + d3 = ctx->superscalar[3].v[2]; + a4 = ctx->superscalar[0].v[3]; + b4 = ctx->superscalar[1].v[3]; + c4 = ctx->superscalar[2].v[3]; + d4 = ctx->superscalar[3].v[3]; + + for (; ip < ipend; ip += 4) { + a += ip[0]; + a2 += ip[1]; + a3 += ip[2]; + a4 += ip[3]; + b += a; + b2 += a2; + b3 += a3; + b4 += a4; + c += b; + c2 += b2; + c3 += b3; + c4 += b4; + d += c; + d2 += c2; + d3 += c3; + d4 += c4; + } + + ctx->superscalar[0].v[0] = a; + ctx->superscalar[1].v[0] = b; + ctx->superscalar[2].v[0] = c; + ctx->superscalar[3].v[0] = d; + ctx->superscalar[0].v[1] = a2; + ctx->superscalar[1].v[1] = b2; + ctx->superscalar[2].v[1] = c2; + ctx->superscalar[3].v[1] = d2; + ctx->superscalar[0].v[2] = a3; + ctx->superscalar[1].v[2] = b3; + ctx->superscalar[2].v[2] = c3; + ctx->superscalar[3].v[2] = d3; + ctx->superscalar[0].v[3] = a4; + ctx->superscalar[1].v[3] = b4; + ctx->superscalar[2].v[3] = c4; + ctx->superscalar[3].v[3] = d4; +} + +static void +fletcher_4_superscalar4_byteswap(fletcher_4_ctx_t *ctx, + const void *buf, uint64_t size) +{ + const uint32_t *ip = buf; + const uint32_t *ipend = ip + (size / sizeof (uint32_t)); + uint64_t a, b, c, d; + uint64_t a2, b2, c2, d2; + uint64_t a3, b3, c3, d3; + uint64_t a4, b4, c4, d4; + + a = ctx->superscalar[0].v[0]; + b = ctx->superscalar[1].v[0]; + c = ctx->superscalar[2].v[0]; + d = ctx->superscalar[3].v[0]; + a2 = ctx->superscalar[0].v[1]; + b2 = ctx->superscalar[1].v[1]; + c2 = ctx->superscalar[2].v[1]; + d2 = ctx->superscalar[3].v[1]; + a3 = ctx->superscalar[0].v[2]; + b3 = ctx->superscalar[1].v[2]; + c3 = ctx->superscalar[2].v[2]; + d3 = ctx->superscalar[3].v[2]; + a4 = ctx->superscalar[0].v[3]; + b4 = ctx->superscalar[1].v[3]; + c4 = ctx->superscalar[2].v[3]; + d4 = ctx->superscalar[3].v[3]; + + for (; ip < ipend; ip += 4) { + a += BSWAP_32(ip[0]); + a2 += BSWAP_32(ip[1]); + a3 += BSWAP_32(ip[2]); + a4 += BSWAP_32(ip[3]); + b += a; + b2 += a2; + b3 += a3; + b4 += a4; + c += b; + c2 += b2; + c3 += b3; + c4 += b4; + d += c; + d2 += c2; + d3 += c3; + d4 += c4; + } + + ctx->superscalar[0].v[0] = a; + ctx->superscalar[1].v[0] = b; + ctx->superscalar[2].v[0] = c; + ctx->superscalar[3].v[0] = d; + ctx->superscalar[0].v[1] = a2; + ctx->superscalar[1].v[1] = b2; + ctx->superscalar[2].v[1] = c2; + ctx->superscalar[3].v[1] = d2; + ctx->superscalar[0].v[2] = a3; + ctx->superscalar[1].v[2] = b3; + ctx->superscalar[2].v[2] = c3; + ctx->superscalar[3].v[2] = d3; + ctx->superscalar[0].v[3] = a4; + ctx->superscalar[1].v[3] = b4; + ctx->superscalar[2].v[3] = c4; + ctx->superscalar[3].v[3] = d4; +} + +static boolean_t fletcher_4_superscalar4_valid(void) +{ + return (B_TRUE); +} + +const fletcher_4_ops_t fletcher_4_superscalar4_ops = { + .init_native = fletcher_4_superscalar4_init, + .compute_native = fletcher_4_superscalar4_native, + .fini_native = fletcher_4_superscalar4_fini, + .init_byteswap = fletcher_4_superscalar4_init, + .compute_byteswap = fletcher_4_superscalar4_byteswap, + .fini_byteswap = fletcher_4_superscalar4_fini, + .valid = fletcher_4_superscalar4_valid, + .name = "superscalar4" +}; --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_namecheck.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_namecheck.c @@ -0,0 +1,355 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +/* + * Common name validation routines for ZFS. These routines are shared by the + * userland code as well as the ioctl() layer to ensure that we don't + * inadvertently expose a hole through direct ioctl()s that never gets tested. + * In userland, however, we want significantly more information about _why_ the + * name is invalid. In the kernel, we only care whether it's valid or not. + * Each routine therefore takes a 'namecheck_err_t' which describes exactly why + * the name failed to validate. + * + * Each function returns 0 on success, -1 on error. + */ + +#if defined(_KERNEL) +#include +#else +#include +#endif + +#include +#include +#include +#include "zfs_namecheck.h" +#include "zfs_deleg.h" + +static int +valid_char(char c) +{ + return ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_' || c == '.' || c == ':' || c == ' '); +} + +/* + * Snapshot names must be made up of alphanumeric characters plus the following + * characters: + * + * [-_.: ] + */ +int +zfs_component_namecheck(const char *path, namecheck_err_t *why, char *what) +{ + const char *loc; + + if (strlen(path) >= ZFS_MAX_DATASET_NAME_LEN) { + if (why) + *why = NAME_ERR_TOOLONG; + return (-1); + } + + if (path[0] == '\0') { + if (why) + *why = NAME_ERR_EMPTY_COMPONENT; + return (-1); + } + + for (loc = path; *loc; loc++) { + if (!valid_char(*loc)) { + if (why) { + *why = NAME_ERR_INVALCHAR; + *what = *loc; + } + return (-1); + } + } + return (0); +} + + +/* + * Permissions set name must start with the letter '@' followed by the + * same character restrictions as snapshot names, except that the name + * cannot exceed 64 characters. + */ +int +permset_namecheck(const char *path, namecheck_err_t *why, char *what) +{ + if (strlen(path) >= ZFS_PERMSET_MAXLEN) { + if (why) + *why = NAME_ERR_TOOLONG; + return (-1); + } + + if (path[0] != '@') { + if (why) { + *why = NAME_ERR_NO_AT; + *what = path[0]; + } + return (-1); + } + + return (zfs_component_namecheck(&path[1], why, what)); +} + +/* + * Entity names must be of the following form: + * + * [component/]*[component][(@|#)component]? + * + * Where each component is made up of alphanumeric characters plus the following + * characters: + * + * [-_.:%] + * + * We allow '%' here as we use that character internally to create unique + * names for temporary clones (for online recv). + */ +int +entity_namecheck(const char *path, namecheck_err_t *why, char *what) +{ + const char *start, *end, *loc; + int found_delim; + + /* + * Make sure the name is not too long. + */ + if (strlen(path) >= ZFS_MAX_DATASET_NAME_LEN) { + if (why) + *why = NAME_ERR_TOOLONG; + return (-1); + } + + /* Explicitly check for a leading slash. */ + if (path[0] == '/') { + if (why) + *why = NAME_ERR_LEADING_SLASH; + return (-1); + } + + if (path[0] == '\0') { + if (why) + *why = NAME_ERR_EMPTY_COMPONENT; + return (-1); + } + + start = path; + found_delim = 0; + for (;;) { + /* Find the end of this component */ + end = start; + while (*end != '/' && *end != '@' && *end != '#' && + *end != '\0') + end++; + + if (*end == '\0' && end[-1] == '/') { + /* trailing slashes are not allowed */ + if (why) + *why = NAME_ERR_TRAILING_SLASH; + return (-1); + } + + /* Validate the contents of this component */ + for (loc = start; loc != end; loc++) { + if (!valid_char(*loc) && *loc != '%') { + if (why) { + *why = NAME_ERR_INVALCHAR; + *what = *loc; + } + return (-1); + } + } + + /* Snapshot or bookmark delimiter found */ + if (*end == '@' || *end == '#') { + /* Multiple delimiters are not allowed */ + if (found_delim != 0) { + if (why) + *why = NAME_ERR_MULTIPLE_DELIMITERS; + return (-1); + } + + found_delim = 1; + } + + /* Zero-length components are not allowed */ + if (start == end) { + if (why) + *why = NAME_ERR_EMPTY_COMPONENT; + return (-1); + } + + /* If we've reached the end of the string, we're OK */ + if (*end == '\0') + return (0); + + /* + * If there is a '/' in a snapshot or bookmark name + * then report an error + */ + if (*end == '/' && found_delim != 0) { + if (why) + *why = NAME_ERR_TRAILING_SLASH; + return (-1); + } + + /* Update to the next component */ + start = end + 1; + } +} + +/* + * Dataset is any entity, except bookmark + */ +int +dataset_namecheck(const char *path, namecheck_err_t *why, char *what) +{ + int ret = entity_namecheck(path, why, what); + + if (ret == 0 && strchr(path, '#') != NULL) { + if (why != NULL) { + *why = NAME_ERR_INVALCHAR; + *what = '#'; + } + return (-1); + } + + return (ret); +} + +/* + * mountpoint names must be of the following form: + * + * /[component][/]*[component][/] + */ +int +mountpoint_namecheck(const char *path, namecheck_err_t *why) +{ + const char *start, *end; + + /* + * Make sure none of the mountpoint component names are too long. + * If a component name is too long then the mkdir of the mountpoint + * will fail but then the mountpoint property will be set to a value + * that can never be mounted. Better to fail before setting the prop. + * Extra slashes are OK, they will be tossed by the mountpoint mkdir. + */ + + if (path == NULL || *path != '/') { + if (why) + *why = NAME_ERR_LEADING_SLASH; + return (-1); + } + + /* Skip leading slash */ + start = &path[1]; + do { + end = start; + while (*end != '/' && *end != '\0') + end++; + + if (end - start >= ZFS_MAX_DATASET_NAME_LEN) { + if (why) + *why = NAME_ERR_TOOLONG; + return (-1); + } + start = end + 1; + + } while (*end != '\0'); + + return (0); +} + +/* + * For pool names, we have the same set of valid characters as described in + * dataset names, with the additional restriction that the pool name must begin + * with a letter. The pool names 'raidz' and 'mirror' are also reserved names + * that cannot be used. + */ +int +pool_namecheck(const char *pool, namecheck_err_t *why, char *what) +{ + const char *c; + + /* + * Make sure the name is not too long. + * If we're creating a pool with version >= SPA_VERSION_DSL_SCRUB (v11) + * we need to account for additional space needed by the origin ds which + * will also be snapshotted: "poolname"+"/"+"$ORIGIN"+"@"+"$ORIGIN". + * Play it safe and enforce this limit even if the pool version is < 11 + * so it can be upgraded without issues. + */ + if (strlen(pool) >= (ZFS_MAX_DATASET_NAME_LEN - 2 - + strlen(ORIGIN_DIR_NAME) * 2)) { + if (why) + *why = NAME_ERR_TOOLONG; + return (-1); + } + + c = pool; + while (*c != '\0') { + if (!valid_char(*c)) { + if (why) { + *why = NAME_ERR_INVALCHAR; + *what = *c; + } + return (-1); + } + c++; + } + + if (!(*pool >= 'a' && *pool <= 'z') && + !(*pool >= 'A' && *pool <= 'Z')) { + if (why) + *why = NAME_ERR_NOLETTER; + return (-1); + } + + if (strcmp(pool, "mirror") == 0 || strcmp(pool, "raidz") == 0) { + if (why) + *why = NAME_ERR_RESERVED; + return (-1); + } + + if (pool[0] == 'c' && (pool[1] >= '0' && pool[1] <= '9')) { + if (why) + *why = NAME_ERR_DISKLIKE; + return (-1); + } + + return (0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(pool_namecheck); +EXPORT_SYMBOL(dataset_namecheck); +EXPORT_SYMBOL(zfs_component_namecheck); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_prop.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_prop.c @@ -0,0 +1,786 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright 2016, Joyent, Inc. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#include +#include +#include +#include +#include +#include + +#include "zfs_prop.h" +#include "zfs_deleg.h" +#include "zfs_fletcher.h" + +#if defined(_KERNEL) +#include +#else +#include +#include +#include +#endif + +static zprop_desc_t zfs_prop_table[ZFS_NUM_PROPS]; + +/* Note this is indexed by zfs_userquota_prop_t, keep the order the same */ +const char *zfs_userquota_prop_prefixes[] = { + "userused@", + "userquota@", + "groupused@", + "groupquota@", + "userobjused@", + "userobjquota@", + "groupobjused@", + "groupobjquota@" +}; + +zprop_desc_t * +zfs_prop_get_table(void) +{ + return (zfs_prop_table); +} + +void +zfs_prop_init(void) +{ + static zprop_index_t checksum_table[] = { + { "on", ZIO_CHECKSUM_ON }, + { "off", ZIO_CHECKSUM_OFF }, + { "fletcher2", ZIO_CHECKSUM_FLETCHER_2 }, + { "fletcher4", ZIO_CHECKSUM_FLETCHER_4 }, + { "sha256", ZIO_CHECKSUM_SHA256 }, + { "noparity", ZIO_CHECKSUM_NOPARITY }, + { "sha512", ZIO_CHECKSUM_SHA512 }, + { "skein", ZIO_CHECKSUM_SKEIN }, + { "edonr", ZIO_CHECKSUM_EDONR }, + { NULL } + }; + + static zprop_index_t dedup_table[] = { + { "on", ZIO_CHECKSUM_ON }, + { "off", ZIO_CHECKSUM_OFF }, + { "verify", ZIO_CHECKSUM_ON | ZIO_CHECKSUM_VERIFY }, + { "sha256", ZIO_CHECKSUM_SHA256 }, + { "sha256,verify", + ZIO_CHECKSUM_SHA256 | ZIO_CHECKSUM_VERIFY }, + { "sha512", ZIO_CHECKSUM_SHA512 }, + { "sha512,verify", + ZIO_CHECKSUM_SHA512 | ZIO_CHECKSUM_VERIFY }, + { "skein", ZIO_CHECKSUM_SKEIN }, + { "skein,verify", + ZIO_CHECKSUM_SKEIN | ZIO_CHECKSUM_VERIFY }, + { "edonr,verify", + ZIO_CHECKSUM_EDONR | ZIO_CHECKSUM_VERIFY }, + { NULL } + }; + + static zprop_index_t compress_table[] = { + { "on", ZIO_COMPRESS_ON }, + { "off", ZIO_COMPRESS_OFF }, + { "lzjb", ZIO_COMPRESS_LZJB }, + { "gzip", ZIO_COMPRESS_GZIP_6 }, /* gzip default */ + { "gzip-1", ZIO_COMPRESS_GZIP_1 }, + { "gzip-2", ZIO_COMPRESS_GZIP_2 }, + { "gzip-3", ZIO_COMPRESS_GZIP_3 }, + { "gzip-4", ZIO_COMPRESS_GZIP_4 }, + { "gzip-5", ZIO_COMPRESS_GZIP_5 }, + { "gzip-6", ZIO_COMPRESS_GZIP_6 }, + { "gzip-7", ZIO_COMPRESS_GZIP_7 }, + { "gzip-8", ZIO_COMPRESS_GZIP_8 }, + { "gzip-9", ZIO_COMPRESS_GZIP_9 }, + { "zle", ZIO_COMPRESS_ZLE }, + { "lz4", ZIO_COMPRESS_LZ4 }, + { NULL } + }; + + static zprop_index_t snapdir_table[] = { + { "hidden", ZFS_SNAPDIR_HIDDEN }, + { "visible", ZFS_SNAPDIR_VISIBLE }, + { NULL } + }; + + static zprop_index_t snapdev_table[] = { + { "hidden", ZFS_SNAPDEV_HIDDEN }, + { "visible", ZFS_SNAPDEV_VISIBLE }, + { NULL } + }; + + static zprop_index_t acltype_table[] = { + { "off", ZFS_ACLTYPE_OFF }, + { "disabled", ZFS_ACLTYPE_OFF }, + { "noacl", ZFS_ACLTYPE_OFF }, + { "posixacl", ZFS_ACLTYPE_POSIXACL }, + { NULL } + }; + + static zprop_index_t acl_inherit_table[] = { + { "discard", ZFS_ACL_DISCARD }, + { "noallow", ZFS_ACL_NOALLOW }, + { "restricted", ZFS_ACL_RESTRICTED }, + { "passthrough", ZFS_ACL_PASSTHROUGH }, + { "secure", ZFS_ACL_RESTRICTED }, /* bkwrd compatibility */ + { "passthrough-x", ZFS_ACL_PASSTHROUGH_X }, + { NULL } + }; + + static zprop_index_t case_table[] = { + { "sensitive", ZFS_CASE_SENSITIVE }, + { "insensitive", ZFS_CASE_INSENSITIVE }, + { "mixed", ZFS_CASE_MIXED }, + { NULL } + }; + + static zprop_index_t copies_table[] = { + { "1", 1 }, + { "2", 2 }, + { "3", 3 }, + { NULL } + }; + + /* + * Use the unique flags we have to send to u8_strcmp() and/or + * u8_textprep() to represent the various normalization property + * values. + */ + static zprop_index_t normalize_table[] = { + { "none", 0 }, + { "formD", U8_TEXTPREP_NFD }, + { "formKC", U8_TEXTPREP_NFKC }, + { "formC", U8_TEXTPREP_NFC }, + { "formKD", U8_TEXTPREP_NFKD }, + { NULL } + }; + + static zprop_index_t version_table[] = { + { "1", 1 }, + { "2", 2 }, + { "3", 3 }, + { "4", 4 }, + { "5", 5 }, + { "current", ZPL_VERSION }, + { NULL } + }; + + static zprop_index_t boolean_table[] = { + { "off", 0 }, + { "on", 1 }, + { NULL } + }; + + static zprop_index_t logbias_table[] = { + { "latency", ZFS_LOGBIAS_LATENCY }, + { "throughput", ZFS_LOGBIAS_THROUGHPUT }, + { NULL } + }; + + static zprop_index_t canmount_table[] = { + { "off", ZFS_CANMOUNT_OFF }, + { "on", ZFS_CANMOUNT_ON }, + { "noauto", ZFS_CANMOUNT_NOAUTO }, + { NULL } + }; + + static zprop_index_t cache_table[] = { + { "none", ZFS_CACHE_NONE }, + { "metadata", ZFS_CACHE_METADATA }, + { "all", ZFS_CACHE_ALL }, + { NULL } + }; + + static zprop_index_t sync_table[] = { + { "standard", ZFS_SYNC_STANDARD }, + { "always", ZFS_SYNC_ALWAYS }, + { "disabled", ZFS_SYNC_DISABLED }, + { NULL } + }; + + static zprop_index_t xattr_table[] = { + { "off", ZFS_XATTR_OFF }, + { "on", ZFS_XATTR_DIR }, + { "sa", ZFS_XATTR_SA }, + { "dir", ZFS_XATTR_DIR }, + { NULL } + }; + + static zprop_index_t dnsize_table[] = { + { "legacy", ZFS_DNSIZE_LEGACY }, + { "auto", ZFS_DNSIZE_AUTO }, + { "1k", ZFS_DNSIZE_1K }, + { "2k", ZFS_DNSIZE_2K }, + { "4k", ZFS_DNSIZE_4K }, + { "8k", ZFS_DNSIZE_8K }, + { "16k", ZFS_DNSIZE_16K }, + { NULL } + }; + + static zprop_index_t redundant_metadata_table[] = { + { "all", ZFS_REDUNDANT_METADATA_ALL }, + { "most", ZFS_REDUNDANT_METADATA_MOST }, + { NULL } + }; + + static zprop_index_t volmode_table[] = { + { "default", ZFS_VOLMODE_DEFAULT }, + { "full", ZFS_VOLMODE_GEOM }, + { "geom", ZFS_VOLMODE_GEOM }, + { "dev", ZFS_VOLMODE_DEV }, + { "none", ZFS_VOLMODE_NONE }, + { NULL } + }; + + /* inherit index properties */ + zprop_register_index(ZFS_PROP_REDUNDANT_METADATA, "redundant_metadata", + ZFS_REDUNDANT_METADATA_ALL, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "all | most", "REDUND_MD", + redundant_metadata_table); + zprop_register_index(ZFS_PROP_SYNC, "sync", ZFS_SYNC_STANDARD, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "standard | always | disabled", "SYNC", + sync_table); + zprop_register_index(ZFS_PROP_CHECKSUM, "checksum", + ZIO_CHECKSUM_DEFAULT, PROP_INHERIT, ZFS_TYPE_FILESYSTEM | + ZFS_TYPE_VOLUME, + "on | off | fletcher2 | fletcher4 | sha256 | sha512 | " + "skein | edonr", "CHECKSUM", checksum_table); + zprop_register_index(ZFS_PROP_DEDUP, "dedup", ZIO_CHECKSUM_OFF, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "on | off | verify | sha256[,verify], sha512[,verify], " + "skein[,verify], edonr,verify", "DEDUP", dedup_table); + zprop_register_index(ZFS_PROP_COMPRESSION, "compression", + ZIO_COMPRESS_DEFAULT, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "on | off | lzjb | gzip | gzip-[1-9] | zle | lz4", "COMPRESS", + compress_table); + zprop_register_index(ZFS_PROP_SNAPDIR, "snapdir", ZFS_SNAPDIR_HIDDEN, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM, + "hidden | visible", "SNAPDIR", snapdir_table); + zprop_register_index(ZFS_PROP_SNAPDEV, "snapdev", ZFS_SNAPDEV_HIDDEN, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "hidden | visible", "SNAPDEV", snapdev_table); + zprop_register_index(ZFS_PROP_ACLTYPE, "acltype", ZFS_ACLTYPE_OFF, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, + "noacl | posixacl", "ACLTYPE", acltype_table); + zprop_register_index(ZFS_PROP_ACLINHERIT, "aclinherit", + ZFS_ACL_RESTRICTED, PROP_INHERIT, ZFS_TYPE_FILESYSTEM, + "discard | noallow | restricted | passthrough | passthrough-x", + "ACLINHERIT", acl_inherit_table); + zprop_register_index(ZFS_PROP_COPIES, "copies", 1, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "1 | 2 | 3", "COPIES", copies_table); + zprop_register_index(ZFS_PROP_PRIMARYCACHE, "primarycache", + ZFS_CACHE_ALL, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, + "all | none | metadata", "PRIMARYCACHE", cache_table); + zprop_register_index(ZFS_PROP_SECONDARYCACHE, "secondarycache", + ZFS_CACHE_ALL, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, + "all | none | metadata", "SECONDARYCACHE", cache_table); + zprop_register_index(ZFS_PROP_LOGBIAS, "logbias", ZFS_LOGBIAS_LATENCY, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "latency | throughput", "LOGBIAS", logbias_table); + zprop_register_index(ZFS_PROP_XATTR, "xattr", ZFS_XATTR_DIR, + PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, + "on | off | dir | sa", "XATTR", xattr_table); + zprop_register_index(ZFS_PROP_DNODESIZE, "dnodesize", + ZFS_DNSIZE_LEGACY, PROP_INHERIT, ZFS_TYPE_FILESYSTEM, + "legacy | auto | 1k | 2k | 4k | 8k | 16k", "DNSIZE", dnsize_table); + zprop_register_index(ZFS_PROP_VOLMODE, "volmode", + ZFS_VOLMODE_DEFAULT, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "default | full | geom | dev | none", "VOLMODE", volmode_table); + + /* inherit index (boolean) properties */ + zprop_register_index(ZFS_PROP_ATIME, "atime", 1, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "on | off", "ATIME", boolean_table); + zprop_register_index(ZFS_PROP_RELATIME, "relatime", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "on | off", "RELATIME", boolean_table); + zprop_register_index(ZFS_PROP_DEVICES, "devices", 1, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "DEVICES", + boolean_table); + zprop_register_index(ZFS_PROP_EXEC, "exec", 1, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "EXEC", + boolean_table); + zprop_register_index(ZFS_PROP_SETUID, "setuid", 1, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "SETUID", + boolean_table); + zprop_register_index(ZFS_PROP_READONLY, "readonly", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "on | off", "RDONLY", + boolean_table); + zprop_register_index(ZFS_PROP_ZONED, "zoned", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "on | off", "ZONED", boolean_table); + zprop_register_index(ZFS_PROP_VSCAN, "vscan", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "on | off", "VSCAN", boolean_table); + zprop_register_index(ZFS_PROP_NBMAND, "nbmand", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "NBMAND", + boolean_table); + zprop_register_index(ZFS_PROP_OVERLAY, "overlay", 0, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "on | off", "OVERLAY", boolean_table); + + /* default index properties */ + zprop_register_index(ZFS_PROP_VERSION, "version", 0, PROP_DEFAULT, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, + "1 | 2 | 3 | 4 | 5 | current", "VERSION", version_table); + zprop_register_index(ZFS_PROP_CANMOUNT, "canmount", ZFS_CANMOUNT_ON, + PROP_DEFAULT, ZFS_TYPE_FILESYSTEM, "on | off | noauto", + "CANMOUNT", canmount_table); + + /* readonly index (boolean) properties */ + zprop_register_index(ZFS_PROP_MOUNTED, "mounted", 0, PROP_READONLY, + ZFS_TYPE_FILESYSTEM, "yes | no", "MOUNTED", boolean_table); + zprop_register_index(ZFS_PROP_DEFER_DESTROY, "defer_destroy", 0, + PROP_READONLY, ZFS_TYPE_SNAPSHOT, "yes | no", "DEFER_DESTROY", + boolean_table); + + /* set once index properties */ + zprop_register_index(ZFS_PROP_NORMALIZE, "normalization", 0, + PROP_ONETIME, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, + "none | formC | formD | formKC | formKD", "NORMALIZATION", + normalize_table); + zprop_register_index(ZFS_PROP_CASE, "casesensitivity", + ZFS_CASE_SENSITIVE, PROP_ONETIME, ZFS_TYPE_FILESYSTEM | + ZFS_TYPE_SNAPSHOT, + "sensitive | insensitive | mixed", "CASE", case_table); + + /* set once index (boolean) properties */ + zprop_register_index(ZFS_PROP_UTF8ONLY, "utf8only", 0, PROP_ONETIME, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, + "on | off", "UTF8ONLY", boolean_table); + + /* string properties */ + zprop_register_string(ZFS_PROP_ORIGIN, "origin", NULL, PROP_READONLY, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", "ORIGIN"); + zprop_register_string(ZFS_PROP_CLONES, "clones", NULL, PROP_READONLY, + ZFS_TYPE_SNAPSHOT, "[,...]", "CLONES"); + zprop_register_string(ZFS_PROP_MOUNTPOINT, "mountpoint", "/", + PROP_INHERIT, ZFS_TYPE_FILESYSTEM, " | legacy | none", + "MOUNTPOINT"); + zprop_register_string(ZFS_PROP_SHARENFS, "sharenfs", "off", + PROP_INHERIT, ZFS_TYPE_FILESYSTEM, "on | off | share(1M) options", + "SHARENFS"); + zprop_register_string(ZFS_PROP_TYPE, "type", NULL, PROP_READONLY, + ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, + "filesystem | volume | snapshot | bookmark", "TYPE"); + zprop_register_string(ZFS_PROP_SHARESMB, "sharesmb", "off", + PROP_INHERIT, ZFS_TYPE_FILESYSTEM, + "on | off | sharemgr(1M) options", "SHARESMB"); + zprop_register_string(ZFS_PROP_MLSLABEL, "mlslabel", + ZFS_MLSLABEL_DEFAULT, PROP_INHERIT, ZFS_TYPE_DATASET, + "", "MLSLABEL"); + zprop_register_string(ZFS_PROP_SELINUX_CONTEXT, "context", + "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "", + "CONTEXT"); + zprop_register_string(ZFS_PROP_SELINUX_FSCONTEXT, "fscontext", + "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "", + "FSCONTEXT"); + zprop_register_string(ZFS_PROP_SELINUX_DEFCONTEXT, "defcontext", + "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "", + "DEFCONTEXT"); + zprop_register_string(ZFS_PROP_SELINUX_ROOTCONTEXT, "rootcontext", + "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "", + "ROOTCONTEXT"); + zprop_register_string(ZFS_PROP_RECEIVE_RESUME_TOKEN, + "receive_resume_token", + NULL, PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "", "RESUMETOK"); + + /* readonly number properties */ + zprop_register_number(ZFS_PROP_USED, "used", 0, PROP_READONLY, + ZFS_TYPE_DATASET, "", "USED"); + zprop_register_number(ZFS_PROP_AVAILABLE, "available", 0, PROP_READONLY, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", "AVAIL"); + zprop_register_number(ZFS_PROP_REFERENCED, "referenced", 0, + PROP_READONLY, ZFS_TYPE_DATASET, "", "REFER"); + zprop_register_number(ZFS_PROP_COMPRESSRATIO, "compressratio", 0, + PROP_READONLY, ZFS_TYPE_DATASET, + "<1.00x or higher if compressed>", "RATIO"); + zprop_register_number(ZFS_PROP_REFRATIO, "refcompressratio", 0, + PROP_READONLY, ZFS_TYPE_DATASET, + "<1.00x or higher if compressed>", "REFRATIO"); + zprop_register_number(ZFS_PROP_VOLBLOCKSIZE, "volblocksize", + ZVOL_DEFAULT_BLOCKSIZE, PROP_ONETIME, + ZFS_TYPE_VOLUME, "512 to 128k, power of 2", "VOLBLOCK"); + zprop_register_number(ZFS_PROP_USEDSNAP, "usedbysnapshots", 0, + PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", + "USEDSNAP"); + zprop_register_number(ZFS_PROP_USEDDS, "usedbydataset", 0, + PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", + "USEDDS"); + zprop_register_number(ZFS_PROP_USEDCHILD, "usedbychildren", 0, + PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", + "USEDCHILD"); + zprop_register_number(ZFS_PROP_USEDREFRESERV, "usedbyrefreservation", 0, + PROP_READONLY, + ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "", "USEDREFRESERV"); + zprop_register_number(ZFS_PROP_USERREFS, "userrefs", 0, PROP_READONLY, + ZFS_TYPE_SNAPSHOT, "", "USERREFS"); + zprop_register_number(ZFS_PROP_WRITTEN, "written", 0, PROP_READONLY, + ZFS_TYPE_DATASET, "", "WRITTEN"); + zprop_register_number(ZFS_PROP_LOGICALUSED, "logicalused", 0, + PROP_READONLY, ZFS_TYPE_DATASET, "", "LUSED"); + zprop_register_number(ZFS_PROP_LOGICALREFERENCED, "logicalreferenced", + 0, PROP_READONLY, ZFS_TYPE_DATASET, "", "LREFER"); + zprop_register_number(ZFS_PROP_FILESYSTEM_COUNT, "filesystem_count", + UINT64_MAX, PROP_READONLY, ZFS_TYPE_FILESYSTEM, + "", "FSCOUNT"); + zprop_register_number(ZFS_PROP_SNAPSHOT_COUNT, "snapshot_count", + UINT64_MAX, PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + "", "SSCOUNT"); + zprop_register_number(ZFS_PROP_GUID, "guid", 0, PROP_READONLY, + ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "", "GUID"); + zprop_register_number(ZFS_PROP_CREATETXG, "createtxg", 0, PROP_READONLY, + ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "", "CREATETXG"); + + /* default number properties */ + zprop_register_number(ZFS_PROP_QUOTA, "quota", 0, PROP_DEFAULT, + ZFS_TYPE_FILESYSTEM, " | none", "QUOTA"); + zprop_register_number(ZFS_PROP_RESERVATION, "reservation", 0, + PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + " | none", "RESERV"); + zprop_register_number(ZFS_PROP_VOLSIZE, "volsize", 0, PROP_DEFAULT, + ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, "", "VOLSIZE"); + zprop_register_number(ZFS_PROP_REFQUOTA, "refquota", 0, PROP_DEFAULT, + ZFS_TYPE_FILESYSTEM, " | none", "REFQUOTA"); + zprop_register_number(ZFS_PROP_REFRESERVATION, "refreservation", 0, + PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + " | none", "REFRESERV"); + zprop_register_number(ZFS_PROP_FILESYSTEM_LIMIT, "filesystem_limit", + UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM, + " | none", "FSLIMIT"); + zprop_register_number(ZFS_PROP_SNAPSHOT_LIMIT, "snapshot_limit", + UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, + " | none", "SSLIMIT"); + + /* inherit number properties */ + zprop_register_number(ZFS_PROP_RECORDSIZE, "recordsize", + SPA_OLD_MAXBLOCKSIZE, PROP_INHERIT, + ZFS_TYPE_FILESYSTEM, "512 to 1M, power of 2", "RECSIZE"); + + /* hidden properties */ + zprop_register_hidden(ZFS_PROP_NUMCLONES, "numclones", PROP_TYPE_NUMBER, + PROP_READONLY, ZFS_TYPE_SNAPSHOT, "NUMCLONES"); + zprop_register_hidden(ZFS_PROP_NAME, "name", PROP_TYPE_STRING, + PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "NAME"); + zprop_register_hidden(ZFS_PROP_ISCSIOPTIONS, "iscsioptions", + PROP_TYPE_STRING, PROP_INHERIT, ZFS_TYPE_VOLUME, "ISCSIOPTIONS"); + zprop_register_hidden(ZFS_PROP_STMF_SHAREINFO, "stmf_sbd_lu", + PROP_TYPE_STRING, PROP_INHERIT, ZFS_TYPE_VOLUME, + "STMF_SBD_LU"); + zprop_register_hidden(ZFS_PROP_USERACCOUNTING, "useraccounting", + PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_DATASET, + "USERACCOUNTING"); + zprop_register_hidden(ZFS_PROP_UNIQUE, "unique", PROP_TYPE_NUMBER, + PROP_READONLY, ZFS_TYPE_DATASET, "UNIQUE"); + zprop_register_hidden(ZFS_PROP_OBJSETID, "objsetid", PROP_TYPE_NUMBER, + PROP_READONLY, ZFS_TYPE_DATASET, "OBJSETID"); + zprop_register_hidden(ZFS_PROP_INCONSISTENT, "inconsistent", + PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_DATASET, "INCONSISTENT"); + zprop_register_hidden(ZFS_PROP_PREV_SNAP, "prevsnap", PROP_TYPE_STRING, + PROP_READONLY, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "PREVSNAP"); + + /* + * Property to be removed once libbe is integrated + */ + zprop_register_hidden(ZFS_PROP_PRIVATE, "priv_prop", + PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_FILESYSTEM, + "PRIV_PROP"); + + /* oddball properties */ + zprop_register_impl(ZFS_PROP_CREATION, "creation", PROP_TYPE_NUMBER, 0, + NULL, PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, + "", "CREATION", B_FALSE, B_TRUE, NULL); +} + +boolean_t +zfs_prop_delegatable(zfs_prop_t prop) +{ + zprop_desc_t *pd = &zfs_prop_table[prop]; + + /* The mlslabel property is never delegatable. */ + if (prop == ZFS_PROP_MLSLABEL) + return (B_FALSE); + + return (pd->pd_attr != PROP_READONLY); +} + +/* + * Given a zfs dataset property name, returns the corresponding property ID. + */ +zfs_prop_t +zfs_name_to_prop(const char *propname) +{ + return (zprop_name_to_prop(propname, ZFS_TYPE_DATASET)); +} + +/* + * For user property names, we allow all lowercase alphanumeric characters, plus + * a few useful punctuation characters. + */ +static int +valid_char(char c) +{ + return ((c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_' || c == '.' || c == ':'); +} + +/* + * Returns true if this is a valid user-defined property (one with a ':'). + */ +boolean_t +zfs_prop_user(const char *name) +{ + int i; + char c; + boolean_t foundsep = B_FALSE; + + for (i = 0; i < strlen(name); i++) { + c = name[i]; + if (!valid_char(c)) + return (B_FALSE); + if (c == ':') + foundsep = B_TRUE; + } + + if (!foundsep) + return (B_FALSE); + + return (B_TRUE); +} + +/* + * Returns true if this is a valid userspace-type property (one with a '@'). + * Note that after the @, any character is valid (eg, another @, for SID + * user@domain). + */ +boolean_t +zfs_prop_userquota(const char *name) +{ + zfs_userquota_prop_t prop; + + for (prop = 0; prop < ZFS_NUM_USERQUOTA_PROPS; prop++) { + if (strncmp(name, zfs_userquota_prop_prefixes[prop], + strlen(zfs_userquota_prop_prefixes[prop])) == 0) { + return (B_TRUE); + } + } + + return (B_FALSE); +} + +/* + * Returns true if this is a valid written@ property. + * Note that after the @, any character is valid (eg, another @, for + * written@pool/fs@origin). + */ +boolean_t +zfs_prop_written(const char *name) +{ + static const char *prefix = "written@"; + return (strncmp(name, prefix, strlen(prefix)) == 0); +} + +/* + * Tables of index types, plus functions to convert between the user view + * (strings) and internal representation (uint64_t). + */ +int +zfs_prop_string_to_index(zfs_prop_t prop, const char *string, uint64_t *index) +{ + return (zprop_string_to_index(prop, string, index, ZFS_TYPE_DATASET)); +} + +int +zfs_prop_index_to_string(zfs_prop_t prop, uint64_t index, const char **string) +{ + return (zprop_index_to_string(prop, index, string, ZFS_TYPE_DATASET)); +} + +uint64_t +zfs_prop_random_value(zfs_prop_t prop, uint64_t seed) +{ + return (zprop_random_value(prop, seed, ZFS_TYPE_DATASET)); +} + +/* + * Returns TRUE if the property applies to any of the given dataset types. + */ +boolean_t +zfs_prop_valid_for_type(int prop, zfs_type_t types, boolean_t headcheck) +{ + return (zprop_valid_for_type(prop, types, headcheck)); +} + +zprop_type_t +zfs_prop_get_type(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_proptype); +} + +/* + * Returns TRUE if the property is readonly. + */ +boolean_t +zfs_prop_readonly(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_attr == PROP_READONLY || + zfs_prop_table[prop].pd_attr == PROP_ONETIME); +} + +/* + * Returns TRUE if the property is only allowed to be set once. + */ +boolean_t +zfs_prop_setonce(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_attr == PROP_ONETIME); +} + +const char * +zfs_prop_default_string(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_strdefault); +} + +uint64_t +zfs_prop_default_numeric(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_numdefault); +} + +/* + * Given a dataset property ID, returns the corresponding name. + * Assuming the zfs dataset property ID is valid. + */ +const char * +zfs_prop_to_name(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_name); +} + +/* + * Returns TRUE if the property is inheritable. + */ +boolean_t +zfs_prop_inheritable(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_attr == PROP_INHERIT || + zfs_prop_table[prop].pd_attr == PROP_ONETIME); +} + +#ifndef _KERNEL + +/* + * Returns a string describing the set of acceptable values for the given + * zfs property, or NULL if it cannot be set. + */ +const char * +zfs_prop_values(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_values); +} + +/* + * Returns TRUE if this property is a string type. Note that index types + * (compression, checksum) are treated as strings in userland, even though they + * are stored numerically on disk. + */ +int +zfs_prop_is_string(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_proptype == PROP_TYPE_STRING || + zfs_prop_table[prop].pd_proptype == PROP_TYPE_INDEX); +} + +/* + * Returns the column header for the given property. Used only in + * 'zfs list -o', but centralized here with the other property information. + */ +const char * +zfs_prop_column_name(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_colname); +} + +/* + * Returns whether the given property should be displayed right-justified for + * 'zfs list'. + */ +boolean_t +zfs_prop_align_right(zfs_prop_t prop) +{ + return (zfs_prop_table[prop].pd_rightalign); +} + +#endif + +#if defined(_KERNEL) && defined(HAVE_SPL) +static int __init +zcommon_init(void) +{ + fletcher_4_init(); + return (0); +} + +static void __exit +zcommon_fini(void) +{ + fletcher_4_fini(); +} + +module_init(zcommon_init); +module_exit(zcommon_fini); + +MODULE_DESCRIPTION("Generic ZFS support"); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE(ZFS_META_LICENSE); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); + +/* zfs dataset property functions */ +EXPORT_SYMBOL(zfs_userquota_prop_prefixes); +EXPORT_SYMBOL(zfs_prop_init); +EXPORT_SYMBOL(zfs_prop_get_type); +EXPORT_SYMBOL(zfs_prop_get_table); +EXPORT_SYMBOL(zfs_prop_delegatable); + +/* Dataset property functions shared between libzfs and kernel. */ +EXPORT_SYMBOL(zfs_prop_default_string); +EXPORT_SYMBOL(zfs_prop_default_numeric); +EXPORT_SYMBOL(zfs_prop_readonly); +EXPORT_SYMBOL(zfs_prop_inheritable); +EXPORT_SYMBOL(zfs_prop_setonce); +EXPORT_SYMBOL(zfs_prop_to_name); +EXPORT_SYMBOL(zfs_name_to_prop); +EXPORT_SYMBOL(zfs_prop_user); +EXPORT_SYMBOL(zfs_prop_userquota); +EXPORT_SYMBOL(zfs_prop_index_to_string); +EXPORT_SYMBOL(zfs_prop_string_to_index); +EXPORT_SYMBOL(zfs_prop_valid_for_type); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zfs_uio.c +++ linux-aws-4.15.0/zfs/module/zcommon/zfs_uio.c @@ -0,0 +1,258 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * University Copyright- Copyright (c) 1982, 1986, 1988 + * The Regents of the University of California + * All Rights Reserved + * + * University Acknowledgment- Portions of this document are derived from + * software developed by the University of California, Berkeley, and its + * contributors. + */ +/* + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + */ + +/* + * The uio support from OpenSolaris has been added as a short term + * work around. The hope is to adopt native Linux type and drop the + * use of uio's entirely. Under Linux they only add overhead and + * when possible we want to use native APIs for the ZPL layer. + */ +#ifdef _KERNEL + +#include +#include +#include + +/* + * Move "n" bytes at byte address "p"; "rw" indicates the direction + * of the move, and the I/O parameters are provided in "uio", which is + * update to reflect the data which was moved. Returns 0 on success or + * a non-zero errno on failure. + */ +static int +uiomove_iov(void *p, size_t n, enum uio_rw rw, struct uio *uio) +{ + const struct iovec *iov = uio->uio_iov; + size_t skip = uio->uio_skip; + ulong_t cnt; + + while (n && uio->uio_resid) { + cnt = MIN(iov->iov_len - skip, n); + switch (uio->uio_segflg) { + case UIO_USERSPACE: + case UIO_USERISPACE: + /* + * p = kernel data pointer + * iov->iov_base = user data pointer + */ + if (rw == UIO_READ) { + if (copy_to_user(iov->iov_base+skip, p, cnt)) + return (EFAULT); + } else { + if (copy_from_user(p, iov->iov_base+skip, cnt)) + return (EFAULT); + } + break; + case UIO_SYSSPACE: + if (rw == UIO_READ) + bcopy(p, iov->iov_base + skip, cnt); + else + bcopy(iov->iov_base + skip, p, cnt); + break; + default: + ASSERT(0); + } + skip += cnt; + if (skip == iov->iov_len) { + skip = 0; + uio->uio_iov = (++iov); + uio->uio_iovcnt--; + } + uio->uio_skip = skip; + uio->uio_resid -= cnt; + uio->uio_loffset += cnt; + p = (caddr_t)p + cnt; + n -= cnt; + } + return (0); +} + +static int +uiomove_bvec(void *p, size_t n, enum uio_rw rw, struct uio *uio) +{ + const struct bio_vec *bv = uio->uio_bvec; + size_t skip = uio->uio_skip; + ulong_t cnt; + + while (n && uio->uio_resid) { + void *paddr; + cnt = MIN(bv->bv_len - skip, n); + + paddr = zfs_kmap_atomic(bv->bv_page, KM_USER1); + if (rw == UIO_READ) + bcopy(p, paddr + bv->bv_offset + skip, cnt); + else + bcopy(paddr + bv->bv_offset + skip, p, cnt); + zfs_kunmap_atomic(paddr, KM_USER1); + + skip += cnt; + if (skip == bv->bv_len) { + skip = 0; + uio->uio_bvec = (++bv); + uio->uio_iovcnt--; + } + uio->uio_skip = skip; + uio->uio_resid -= cnt; + uio->uio_loffset += cnt; + p = (caddr_t)p + cnt; + n -= cnt; + } + return (0); +} + +int +uiomove(void *p, size_t n, enum uio_rw rw, struct uio *uio) +{ + if (uio->uio_segflg != UIO_BVEC) + return (uiomove_iov(p, n, rw, uio)); + else + return (uiomove_bvec(p, n, rw, uio)); +} +EXPORT_SYMBOL(uiomove); + +#define fuword8(uptr, vptr) get_user((*vptr), (uptr)) + +/* + * Fault in the pages of the first n bytes specified by the uio structure. + * 1 byte in each page is touched and the uio struct is unmodified. Any + * error will terminate the process as this is only a best attempt to get + * the pages resident. + */ +void +uio_prefaultpages(ssize_t n, struct uio *uio) +{ + const struct iovec *iov; + ulong_t cnt, incr; + caddr_t p; + uint8_t tmp; + int iovcnt; + size_t skip; + + /* no need to fault in kernel pages */ + switch (uio->uio_segflg) { + case UIO_SYSSPACE: + case UIO_BVEC: + return; + case UIO_USERSPACE: + case UIO_USERISPACE: + break; + default: + ASSERT(0); + } + + iov = uio->uio_iov; + iovcnt = uio->uio_iovcnt; + skip = uio->uio_skip; + + for (; n > 0 && iovcnt > 0; iov++, iovcnt--, skip = 0) { + cnt = MIN(iov->iov_len - skip, n); + /* empty iov */ + if (cnt == 0) + continue; + n -= cnt; + /* + * touch each page in this segment. + */ + p = iov->iov_base + skip; + while (cnt) { + if (fuword8((uint8_t *)p, &tmp)) + return; + incr = MIN(cnt, PAGESIZE); + p += incr; + cnt -= incr; + } + /* + * touch the last byte in case it straddles a page. + */ + p--; + if (fuword8((uint8_t *)p, &tmp)) + return; + } +} +EXPORT_SYMBOL(uio_prefaultpages); + +/* + * same as uiomove() but doesn't modify uio structure. + * return in cbytes how many bytes were copied. + */ +int +uiocopy(void *p, size_t n, enum uio_rw rw, struct uio *uio, size_t *cbytes) +{ + struct uio uio_copy; + int ret; + + bcopy(uio, &uio_copy, sizeof (struct uio)); + ret = uiomove(p, n, rw, &uio_copy); + *cbytes = uio->uio_resid - uio_copy.uio_resid; + return (ret); +} +EXPORT_SYMBOL(uiocopy); + +/* + * Drop the next n chars out of *uiop. + */ +void +uioskip(uio_t *uiop, size_t n) +{ + if (n > uiop->uio_resid) + return; + + uiop->uio_skip += n; + if (uiop->uio_segflg != UIO_BVEC) { + while (uiop->uio_iovcnt && + uiop->uio_skip >= uiop->uio_iov->iov_len) { + uiop->uio_skip -= uiop->uio_iov->iov_len; + uiop->uio_iov++; + uiop->uio_iovcnt--; + } + } else { + while (uiop->uio_iovcnt && + uiop->uio_skip >= uiop->uio_bvec->bv_len) { + uiop->uio_skip -= uiop->uio_bvec->bv_len; + uiop->uio_bvec++; + uiop->uio_iovcnt--; + } + } + uiop->uio_loffset += n; + uiop->uio_resid -= n; +} +EXPORT_SYMBOL(uioskip); +#endif /* _KERNEL */ --- linux-aws-4.15.0.orig/zfs/module/zcommon/zpool_prop.c +++ linux-aws-4.15.0/zfs/module/zcommon/zpool_prop.c @@ -0,0 +1,263 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include + +#include "zfs_prop.h" + +#if defined(_KERNEL) +#include +#else +#include +#include +#include +#endif + +static zprop_desc_t zpool_prop_table[ZPOOL_NUM_PROPS]; + +zprop_desc_t * +zpool_prop_get_table(void) +{ + return (zpool_prop_table); +} + +void +zpool_prop_init(void) +{ + static zprop_index_t boolean_table[] = { + { "off", 0}, + { "on", 1}, + { NULL } + }; + + static zprop_index_t failuremode_table[] = { + { "wait", ZIO_FAILURE_MODE_WAIT }, + { "continue", ZIO_FAILURE_MODE_CONTINUE }, + { "panic", ZIO_FAILURE_MODE_PANIC }, + { NULL } + }; + + /* string properties */ + zprop_register_string(ZPOOL_PROP_ALTROOT, "altroot", NULL, PROP_DEFAULT, + ZFS_TYPE_POOL, "", "ALTROOT"); + zprop_register_string(ZPOOL_PROP_BOOTFS, "bootfs", NULL, PROP_DEFAULT, + ZFS_TYPE_POOL, "", "BOOTFS"); + zprop_register_string(ZPOOL_PROP_CACHEFILE, "cachefile", NULL, + PROP_DEFAULT, ZFS_TYPE_POOL, " | none", "CACHEFILE"); + zprop_register_string(ZPOOL_PROP_COMMENT, "comment", NULL, + PROP_DEFAULT, ZFS_TYPE_POOL, "", "COMMENT"); + + /* readonly number properties */ + zprop_register_number(ZPOOL_PROP_SIZE, "size", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "SIZE"); + zprop_register_number(ZPOOL_PROP_FREE, "free", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "FREE"); + zprop_register_number(ZPOOL_PROP_FREEING, "freeing", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "FREEING"); + zprop_register_number(ZPOOL_PROP_LEAKED, "leaked", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "LEAKED"); + zprop_register_number(ZPOOL_PROP_ALLOCATED, "allocated", 0, + PROP_READONLY, ZFS_TYPE_POOL, "", "ALLOC"); + zprop_register_number(ZPOOL_PROP_EXPANDSZ, "expandsize", 0, + PROP_READONLY, ZFS_TYPE_POOL, "", "EXPANDSZ"); + zprop_register_number(ZPOOL_PROP_FRAGMENTATION, "fragmentation", 0, + PROP_READONLY, ZFS_TYPE_POOL, "", "FRAG"); + zprop_register_number(ZPOOL_PROP_CAPACITY, "capacity", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "CAP"); + zprop_register_number(ZPOOL_PROP_GUID, "guid", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "GUID"); + zprop_register_number(ZPOOL_PROP_HEALTH, "health", 0, PROP_READONLY, + ZFS_TYPE_POOL, "", "HEALTH"); + zprop_register_number(ZPOOL_PROP_DEDUPRATIO, "dedupratio", 0, + PROP_READONLY, ZFS_TYPE_POOL, "<1.00x or higher if deduped>", + "DEDUP"); + + /* default number properties */ + zprop_register_number(ZPOOL_PROP_VERSION, "version", SPA_VERSION, + PROP_DEFAULT, ZFS_TYPE_POOL, "", "VERSION"); + zprop_register_number(ZPOOL_PROP_DEDUPDITTO, "dedupditto", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "", "DEDUPDITTO"); + zprop_register_number(ZPOOL_PROP_ASHIFT, "ashift", 0, PROP_DEFAULT, + ZFS_TYPE_POOL, "", "ASHIFT"); + + /* default index (boolean) properties */ + zprop_register_index(ZPOOL_PROP_DELEGATION, "delegation", 1, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "DELEGATION", + boolean_table); + zprop_register_index(ZPOOL_PROP_AUTOREPLACE, "autoreplace", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "REPLACE", boolean_table); + zprop_register_index(ZPOOL_PROP_LISTSNAPS, "listsnapshots", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "LISTSNAPS", + boolean_table); + zprop_register_index(ZPOOL_PROP_AUTOEXPAND, "autoexpand", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "EXPAND", boolean_table); + zprop_register_index(ZPOOL_PROP_READONLY, "readonly", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "RDONLY", boolean_table); + zprop_register_index(ZPOOL_PROP_MULTIHOST, "multihost", 0, + PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "MULTIHOST", + boolean_table); + + /* default index properties */ + zprop_register_index(ZPOOL_PROP_FAILUREMODE, "failmode", + ZIO_FAILURE_MODE_WAIT, PROP_DEFAULT, ZFS_TYPE_POOL, + "wait | continue | panic", "FAILMODE", failuremode_table); + + /* hidden properties */ + zprop_register_hidden(ZPOOL_PROP_NAME, "name", PROP_TYPE_STRING, + PROP_READONLY, ZFS_TYPE_POOL, "NAME"); + zprop_register_hidden(ZPOOL_PROP_MAXBLOCKSIZE, "maxblocksize", + PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_POOL, "MAXBLOCKSIZE"); + zprop_register_hidden(ZPOOL_PROP_TNAME, "tname", PROP_TYPE_STRING, + PROP_ONETIME, ZFS_TYPE_POOL, "TNAME"); + zprop_register_hidden(ZPOOL_PROP_MAXDNODESIZE, "maxdnodesize", + PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_POOL, "MAXDNODESIZE"); +} + +/* + * Given a property name and its type, returns the corresponding property ID. + */ +zpool_prop_t +zpool_name_to_prop(const char *propname) +{ + return (zprop_name_to_prop(propname, ZFS_TYPE_POOL)); +} + +/* + * Given a pool property ID, returns the corresponding name. + * Assuming the pool propety ID is valid. + */ +const char * +zpool_prop_to_name(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_name); +} + +zprop_type_t +zpool_prop_get_type(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_proptype); +} + +boolean_t +zpool_prop_readonly(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_attr == PROP_READONLY); +} + +const char * +zpool_prop_default_string(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_strdefault); +} + +uint64_t +zpool_prop_default_numeric(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_numdefault); +} + +/* + * Returns true if this is a valid feature@ property. + */ +boolean_t +zpool_prop_feature(const char *name) +{ + static const char *prefix = "feature@"; + return (strncmp(name, prefix, strlen(prefix)) == 0); +} + +/* + * Returns true if this is a valid unsupported@ property. + */ +boolean_t +zpool_prop_unsupported(const char *name) +{ + static const char *prefix = "unsupported@"; + return (strncmp(name, prefix, strlen(prefix)) == 0); +} + +int +zpool_prop_string_to_index(zpool_prop_t prop, const char *string, + uint64_t *index) +{ + return (zprop_string_to_index(prop, string, index, ZFS_TYPE_POOL)); +} + +int +zpool_prop_index_to_string(zpool_prop_t prop, uint64_t index, + const char **string) +{ + return (zprop_index_to_string(prop, index, string, ZFS_TYPE_POOL)); +} + +uint64_t +zpool_prop_random_value(zpool_prop_t prop, uint64_t seed) +{ + return (zprop_random_value(prop, seed, ZFS_TYPE_POOL)); +} + +#ifndef _KERNEL + +const char * +zpool_prop_values(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_values); +} + +const char * +zpool_prop_column_name(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_colname); +} + +boolean_t +zpool_prop_align_right(zpool_prop_t prop) +{ + return (zpool_prop_table[prop].pd_rightalign); +} +#endif + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* zpool property functions */ +EXPORT_SYMBOL(zpool_prop_init); +EXPORT_SYMBOL(zpool_prop_get_type); +EXPORT_SYMBOL(zpool_prop_get_table); + +/* Pool property functions shared between libzfs and kernel. */ +EXPORT_SYMBOL(zpool_name_to_prop); +EXPORT_SYMBOL(zpool_prop_to_name); +EXPORT_SYMBOL(zpool_prop_default_string); +EXPORT_SYMBOL(zpool_prop_default_numeric); +EXPORT_SYMBOL(zpool_prop_readonly); +EXPORT_SYMBOL(zpool_prop_feature); +EXPORT_SYMBOL(zpool_prop_unsupported); +EXPORT_SYMBOL(zpool_prop_index_to_string); +EXPORT_SYMBOL(zpool_prop_string_to_index); +#endif --- linux-aws-4.15.0.orig/zfs/module/zcommon/zprop_common.c +++ linux-aws-4.15.0/zfs/module/zcommon/zprop_common.c @@ -0,0 +1,454 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * Common routines used by zfs and zpool property management. + */ + +#include +#include +#include +#include +#include +#include + +#include "zfs_prop.h" +#include "zfs_deleg.h" + +#if defined(_KERNEL) +#include +#include +#else +#include +#include +#include +#endif + +static zprop_desc_t * +zprop_get_proptable(zfs_type_t type) +{ + if (type == ZFS_TYPE_POOL) + return (zpool_prop_get_table()); + else + return (zfs_prop_get_table()); +} + +static int +zprop_get_numprops(zfs_type_t type) +{ + if (type == ZFS_TYPE_POOL) + return (ZPOOL_NUM_PROPS); + else + return (ZFS_NUM_PROPS); +} + +void +zprop_register_impl(int prop, const char *name, zprop_type_t type, + uint64_t numdefault, const char *strdefault, zprop_attr_t attr, + int objset_types, const char *values, const char *colname, + boolean_t rightalign, boolean_t visible, const zprop_index_t *idx_tbl) +{ + zprop_desc_t *prop_tbl = zprop_get_proptable(objset_types); + zprop_desc_t *pd; + + pd = &prop_tbl[prop]; + + ASSERT(pd->pd_name == NULL || pd->pd_name == name); + ASSERT(name != NULL); + ASSERT(colname != NULL); + + pd->pd_name = name; + pd->pd_propnum = prop; + pd->pd_proptype = type; + pd->pd_numdefault = numdefault; + pd->pd_strdefault = strdefault; + pd->pd_attr = attr; + pd->pd_types = objset_types; + pd->pd_values = values; + pd->pd_colname = colname; + pd->pd_rightalign = rightalign; + pd->pd_visible = visible; + pd->pd_table = idx_tbl; + pd->pd_table_size = 0; + while (idx_tbl && (idx_tbl++)->pi_name != NULL) + pd->pd_table_size++; +} + +void +zprop_register_string(int prop, const char *name, const char *def, + zprop_attr_t attr, int objset_types, const char *values, + const char *colname) +{ + zprop_register_impl(prop, name, PROP_TYPE_STRING, 0, def, attr, + objset_types, values, colname, B_FALSE, B_TRUE, NULL); + +} + +void +zprop_register_number(int prop, const char *name, uint64_t def, + zprop_attr_t attr, int objset_types, const char *values, + const char *colname) +{ + zprop_register_impl(prop, name, PROP_TYPE_NUMBER, def, NULL, attr, + objset_types, values, colname, B_TRUE, B_TRUE, NULL); +} + +void +zprop_register_index(int prop, const char *name, uint64_t def, + zprop_attr_t attr, int objset_types, const char *values, + const char *colname, const zprop_index_t *idx_tbl) +{ + zprop_register_impl(prop, name, PROP_TYPE_INDEX, def, NULL, attr, + objset_types, values, colname, B_TRUE, B_TRUE, idx_tbl); +} + +void +zprop_register_hidden(int prop, const char *name, zprop_type_t type, + zprop_attr_t attr, int objset_types, const char *colname) +{ + zprop_register_impl(prop, name, type, 0, NULL, attr, + objset_types, NULL, colname, + type == PROP_TYPE_NUMBER, B_FALSE, NULL); +} + + +/* + * A comparison function we can use to order indexes into property tables. + */ +static int +zprop_compare(const void *arg1, const void *arg2) +{ + const zprop_desc_t *p1 = *((zprop_desc_t **)arg1); + const zprop_desc_t *p2 = *((zprop_desc_t **)arg2); + boolean_t p1ro, p2ro; + + p1ro = (p1->pd_attr == PROP_READONLY); + p2ro = (p2->pd_attr == PROP_READONLY); + + if (p1ro == p2ro) + return (strcmp(p1->pd_name, p2->pd_name)); + + return (p1ro ? -1 : 1); +} + +/* + * Iterate over all properties in the given property table, calling back + * into the specified function for each property. We will continue to + * iterate until we either reach the end or the callback function returns + * something other than ZPROP_CONT. + */ +int +zprop_iter_common(zprop_func func, void *cb, boolean_t show_all, + boolean_t ordered, zfs_type_t type) +{ + int i, j, num_props, size, prop; + zprop_desc_t *prop_tbl; + zprop_desc_t **order; + + prop_tbl = zprop_get_proptable(type); + num_props = zprop_get_numprops(type); + size = num_props * sizeof (zprop_desc_t *); + +#if defined(_KERNEL) + order = kmem_alloc(size, KM_SLEEP); +#else + if ((order = malloc(size)) == NULL) + return (ZPROP_CONT); +#endif + + for (j = 0; j < num_props; j++) + order[j] = &prop_tbl[j]; + + if (ordered) { + qsort((void *)order, num_props, sizeof (zprop_desc_t *), + zprop_compare); + } + + prop = ZPROP_CONT; + for (i = 0; i < num_props; i++) { + if ((order[i]->pd_visible || show_all) && + (func(order[i]->pd_propnum, cb) != ZPROP_CONT)) { + prop = order[i]->pd_propnum; + break; + } + } + +#if defined(_KERNEL) + kmem_free(order, size); +#else + free(order); +#endif + return (prop); +} + +static boolean_t +propname_match(const char *p, size_t len, zprop_desc_t *prop_entry) +{ + const char *propname = prop_entry->pd_name; +#ifndef _KERNEL + const char *colname = prop_entry->pd_colname; + int c; +#endif + + if (len == strlen(propname) && + strncmp(p, propname, len) == 0) + return (B_TRUE); + +#ifndef _KERNEL + if (colname == NULL || len != strlen(colname)) + return (B_FALSE); + + for (c = 0; c < len; c++) + if (p[c] != tolower(colname[c])) + break; + + return (colname[c] == '\0'); +#else + return (B_FALSE); +#endif +} + +typedef struct name_to_prop_cb { + const char *propname; + zprop_desc_t *prop_tbl; +} name_to_prop_cb_t; + +static int +zprop_name_to_prop_cb(int prop, void *cb_data) +{ + name_to_prop_cb_t *data = cb_data; + + if (propname_match(data->propname, strlen(data->propname), + &data->prop_tbl[prop])) + return (prop); + + return (ZPROP_CONT); +} + +int +zprop_name_to_prop(const char *propname, zfs_type_t type) +{ + int prop; + name_to_prop_cb_t cb_data; + + cb_data.propname = propname; + cb_data.prop_tbl = zprop_get_proptable(type); + + prop = zprop_iter_common(zprop_name_to_prop_cb, &cb_data, + B_TRUE, B_FALSE, type); + + return (prop == ZPROP_CONT ? ZPROP_INVAL : prop); +} + +int +zprop_string_to_index(int prop, const char *string, uint64_t *index, + zfs_type_t type) +{ + zprop_desc_t *prop_tbl; + const zprop_index_t *idx_tbl; + int i; + + if (prop == ZPROP_INVAL || prop == ZPROP_CONT) + return (-1); + + ASSERT(prop < zprop_get_numprops(type)); + prop_tbl = zprop_get_proptable(type); + if ((idx_tbl = prop_tbl[prop].pd_table) == NULL) + return (-1); + + for (i = 0; idx_tbl[i].pi_name != NULL; i++) { + if (strcmp(string, idx_tbl[i].pi_name) == 0) { + *index = idx_tbl[i].pi_value; + return (0); + } + } + + return (-1); +} + +int +zprop_index_to_string(int prop, uint64_t index, const char **string, + zfs_type_t type) +{ + zprop_desc_t *prop_tbl; + const zprop_index_t *idx_tbl; + int i; + + if (prop == ZPROP_INVAL || prop == ZPROP_CONT) + return (-1); + + ASSERT(prop < zprop_get_numprops(type)); + prop_tbl = zprop_get_proptable(type); + if ((idx_tbl = prop_tbl[prop].pd_table) == NULL) + return (-1); + + for (i = 0; idx_tbl[i].pi_name != NULL; i++) { + if (idx_tbl[i].pi_value == index) { + *string = idx_tbl[i].pi_name; + return (0); + } + } + + return (-1); +} + +/* + * Return a random valid property value. Used by ztest. + */ +uint64_t +zprop_random_value(int prop, uint64_t seed, zfs_type_t type) +{ + zprop_desc_t *prop_tbl; + const zprop_index_t *idx_tbl; + + ASSERT((uint_t)prop < zprop_get_numprops(type)); + prop_tbl = zprop_get_proptable(type); + idx_tbl = prop_tbl[prop].pd_table; + + if (idx_tbl == NULL) + return (seed); + + return (idx_tbl[seed % prop_tbl[prop].pd_table_size].pi_value); +} + +const char * +zprop_values(int prop, zfs_type_t type) +{ + zprop_desc_t *prop_tbl; + + ASSERT(prop != ZPROP_INVAL && prop != ZPROP_CONT); + ASSERT(prop < zprop_get_numprops(type)); + + prop_tbl = zprop_get_proptable(type); + + return (prop_tbl[prop].pd_values); +} + +/* + * Returns TRUE if the property applies to any of the given dataset types. + * + * If headcheck is set, the check is being made against the head dataset + * type of a snapshot which requires to return B_TRUE when the property + * is only valid for snapshots. + */ +boolean_t +zprop_valid_for_type(int prop, zfs_type_t type, boolean_t headcheck) +{ + zprop_desc_t *prop_tbl; + + if (prop == ZPROP_INVAL || prop == ZPROP_CONT) + return (B_FALSE); + + ASSERT(prop < zprop_get_numprops(type)); + prop_tbl = zprop_get_proptable(type); + if (headcheck && prop_tbl[prop].pd_types == ZFS_TYPE_SNAPSHOT) + return (B_TRUE); + return ((prop_tbl[prop].pd_types & type) != 0); +} + +#ifndef _KERNEL + +/* + * Determines the minimum width for the column, and indicates whether it's fixed + * or not. Only string columns are non-fixed. + */ +size_t +zprop_width(int prop, boolean_t *fixed, zfs_type_t type) +{ + zprop_desc_t *prop_tbl, *pd; + const zprop_index_t *idx; + size_t ret; + int i; + + ASSERT(prop != ZPROP_INVAL && prop != ZPROP_CONT); + ASSERT(prop < zprop_get_numprops(type)); + + prop_tbl = zprop_get_proptable(type); + pd = &prop_tbl[prop]; + + *fixed = B_TRUE; + + /* + * Start with the width of the column name. + */ + ret = strlen(pd->pd_colname); + + /* + * For fixed-width values, make sure the width is large enough to hold + * any possible value. + */ + switch (pd->pd_proptype) { + case PROP_TYPE_NUMBER: + /* + * The maximum length of a human-readable number is 5 characters + * ("20.4M", for example). + */ + if (ret < 5) + ret = 5; + /* + * 'creation' is handled specially because it's a number + * internally, but displayed as a date string. + */ + if (prop == ZFS_PROP_CREATION) + *fixed = B_FALSE; + break; + case PROP_TYPE_INDEX: + idx = prop_tbl[prop].pd_table; + for (i = 0; idx[i].pi_name != NULL; i++) { + if (strlen(idx[i].pi_name) > ret) + ret = strlen(idx[i].pi_name); + } + break; + + case PROP_TYPE_STRING: + *fixed = B_FALSE; + break; + } + + return (ret); +} + +#endif + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* Common routines to initialize property tables */ +EXPORT_SYMBOL(zprop_register_impl); +EXPORT_SYMBOL(zprop_register_string); +EXPORT_SYMBOL(zprop_register_number); +EXPORT_SYMBOL(zprop_register_index); +EXPORT_SYMBOL(zprop_register_hidden); + +/* Common routines for zfs and zpool property management */ +EXPORT_SYMBOL(zprop_iter_common); +EXPORT_SYMBOL(zprop_name_to_prop); +EXPORT_SYMBOL(zprop_string_to_index); +EXPORT_SYMBOL(zprop_index_to_string); +EXPORT_SYMBOL(zprop_random_value); +EXPORT_SYMBOL(zprop_values); +EXPORT_SYMBOL(zprop_valid_for_type); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/Makefile.in +++ linux-aws-4.15.0/zfs/module/zfs/Makefile.in @@ -0,0 +1,127 @@ +src = @abs_top_srcdir@/module/zfs +obj = @abs_builddir@ + +MODULE := zfs + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += abd.o +$(MODULE)-objs += arc.o +$(MODULE)-objs += blkptr.o +$(MODULE)-objs += bplist.o +$(MODULE)-objs += bpobj.o +$(MODULE)-objs += dbuf.o +$(MODULE)-objs += dbuf_stats.o +$(MODULE)-objs += bptree.o +$(MODULE)-objs += bqueue.o +$(MODULE)-objs += ddt.o +$(MODULE)-objs += ddt_zap.o +$(MODULE)-objs += dmu.o +$(MODULE)-objs += dmu_diff.o +$(MODULE)-objs += dmu_object.o +$(MODULE)-objs += dmu_objset.o +$(MODULE)-objs += dmu_send.o +$(MODULE)-objs += dmu_traverse.o +$(MODULE)-objs += dmu_tx.o +$(MODULE)-objs += dmu_zfetch.o +$(MODULE)-objs += dnode.o +$(MODULE)-objs += dnode_sync.o +$(MODULE)-objs += dsl_dataset.o +$(MODULE)-objs += dsl_deadlist.o +$(MODULE)-objs += dsl_deleg.o +$(MODULE)-objs += dsl_bookmark.o +$(MODULE)-objs += dsl_dir.o +$(MODULE)-objs += dsl_pool.o +$(MODULE)-objs += dsl_prop.o +$(MODULE)-objs += dsl_scan.o +$(MODULE)-objs += dsl_synctask.o +$(MODULE)-objs += edonr_zfs.o +$(MODULE)-objs += fm.o +$(MODULE)-objs += gzip.o +$(MODULE)-objs += lzjb.o +$(MODULE)-objs += lz4.o +$(MODULE)-objs += metaslab.o +$(MODULE)-objs += mmp.o +$(MODULE)-objs += multilist.o +$(MODULE)-objs += pathname.o +$(MODULE)-objs += policy.o +$(MODULE)-objs += range_tree.o +$(MODULE)-objs += refcount.o +$(MODULE)-objs += rrwlock.o +$(MODULE)-objs += sa.o +$(MODULE)-objs += sha256.o +$(MODULE)-objs += skein_zfs.o +$(MODULE)-objs += spa.o +$(MODULE)-objs += spa_boot.o +$(MODULE)-objs += spa_config.o +$(MODULE)-objs += spa_errlog.o +$(MODULE)-objs += spa_history.o +$(MODULE)-objs += spa_misc.o +$(MODULE)-objs += spa_stats.o +$(MODULE)-objs += space_map.o +$(MODULE)-objs += space_reftree.o +$(MODULE)-objs += txg.o +$(MODULE)-objs += trace.o +$(MODULE)-objs += uberblock.o +$(MODULE)-objs += unique.o +$(MODULE)-objs += vdev.o +$(MODULE)-objs += vdev_cache.o +$(MODULE)-objs += vdev_disk.o +$(MODULE)-objs += vdev_file.o +$(MODULE)-objs += vdev_label.o +$(MODULE)-objs += vdev_mirror.o +$(MODULE)-objs += vdev_missing.o +$(MODULE)-objs += vdev_queue.o +$(MODULE)-objs += vdev_raidz.o +$(MODULE)-objs += vdev_raidz_math.o +$(MODULE)-objs += vdev_raidz_math_scalar.o +$(MODULE)-objs += vdev_root.o +$(MODULE)-objs += zap.o +$(MODULE)-objs += zap_leaf.o +$(MODULE)-objs += zap_micro.o +$(MODULE)-objs += zfeature.o +$(MODULE)-objs += zfeature_common.o +$(MODULE)-objs += zfs_acl.o +$(MODULE)-objs += zfs_byteswap.o +$(MODULE)-objs += zfs_ctldir.o +$(MODULE)-objs += zfs_debug.o +$(MODULE)-objs += zfs_dir.o +$(MODULE)-objs += zfs_fm.o +$(MODULE)-objs += zfs_fuid.o +$(MODULE)-objs += zfs_ioctl.o +$(MODULE)-objs += zfs_log.o +$(MODULE)-objs += zfs_onexit.o +$(MODULE)-objs += zfs_replay.o +$(MODULE)-objs += zfs_rlock.o +$(MODULE)-objs += zfs_sa.o +$(MODULE)-objs += zfs_vfsops.o +$(MODULE)-objs += zfs_vnops.o +$(MODULE)-objs += zfs_znode.o +$(MODULE)-objs += zil.o +$(MODULE)-objs += zio.o +$(MODULE)-objs += zio_checksum.o +$(MODULE)-objs += zio_compress.o +$(MODULE)-objs += zio_inject.o +$(MODULE)-objs += zle.o +$(MODULE)-objs += zpl_ctldir.o +$(MODULE)-objs += zpl_export.o +$(MODULE)-objs += zpl_file.o +$(MODULE)-objs += zpl_inode.o +$(MODULE)-objs += zpl_super.o +$(MODULE)-objs += zpl_xattr.o +$(MODULE)-objs += zrlock.o +$(MODULE)-objs += zvol.o +$(MODULE)-objs += dsl_destroy.o +$(MODULE)-objs += dsl_userhold.o +$(MODULE)-objs += qat_compress.o + +$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_sse2.o +$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_ssse3.o +$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_avx2.o +$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_avx512f.o +$(MODULE)-$(CONFIG_X86) += vdev_raidz_math_avx512bw.o + +$(MODULE)-$(CONFIG_ARM64) += vdev_raidz_math_aarch64_neon.o +$(MODULE)-$(CONFIG_ARM64) += vdev_raidz_math_aarch64_neonx2.o --- linux-aws-4.15.0.orig/zfs/module/zfs/abd.c +++ linux-aws-4.15.0/zfs/module/zfs/abd.c @@ -0,0 +1,1543 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Chunwei Chen. All rights reserved. + * Copyright (c) 2016 by Delphix. All rights reserved. + */ + +/* + * ARC buffer data (ABD). + * + * ABDs are an abstract data structure for the ARC which can use two + * different ways of storing the underlying data: + * + * (a) Linear buffer. In this case, all the data in the ABD is stored in one + * contiguous buffer in memory (from a zio_[data_]buf_* kmem cache). + * + * +-------------------+ + * | ABD (linear) | + * | abd_flags = ... | + * | abd_size = ... | +--------------------------------+ + * | abd_buf ------------->| raw buffer of size abd_size | + * +-------------------+ +--------------------------------+ + * no abd_chunks + * + * (b) Scattered buffer. In this case, the data in the ABD is split into + * equal-sized chunks (from the abd_chunk_cache kmem_cache), with pointers + * to the chunks recorded in an array at the end of the ABD structure. + * + * +-------------------+ + * | ABD (scattered) | + * | abd_flags = ... | + * | abd_size = ... | + * | abd_offset = 0 | +-----------+ + * | abd_chunks[0] ----------------------------->| chunk 0 | + * | abd_chunks[1] ---------------------+ +-----------+ + * | ... | | +-----------+ + * | abd_chunks[N-1] ---------+ +------->| chunk 1 | + * +-------------------+ | +-----------+ + * | ... + * | +-----------+ + * +----------------->| chunk N-1 | + * +-----------+ + * + * Linear buffers act exactly like normal buffers and are always mapped into the + * kernel's virtual memory space, while scattered ABD data chunks are allocated + * as physical pages and then mapped in only while they are actually being + * accessed through one of the abd_* library functions. Using scattered ABDs + * provides several benefits: + * + * (1) They avoid use of kmem_*, preventing performance problems where running + * kmem_reap on very large memory systems never finishes and causes + * constant TLB shootdowns. + * + * (2) Fragmentation is less of an issue since when we are at the limit of + * allocatable space, we won't have to search around for a long free + * hole in the VA space for large ARC allocations. Each chunk is mapped in + * individually, so even if we weren't using segkpm (see next point) we + * wouldn't need to worry about finding a contiguous address range. + * + * (3) Use of segkpm will avoid the need for map / unmap / TLB shootdown costs + * on each ABD access. (If segkpm isn't available then we use all linear + * ABDs to avoid this penalty.) See seg_kpm.c for more details. + * + * It is possible to make all ABDs linear by setting zfs_abd_scatter_enabled to + * B_FALSE. However, it is not possible to use scattered ABDs if segkpm is not + * available, which is the case on all 32-bit systems and any 64-bit systems + * where kpm_enable is turned off. + * + * In addition to directly allocating a linear or scattered ABD, it is also + * possible to create an ABD by requesting the "sub-ABD" starting at an offset + * within an existing ABD. In linear buffers this is simple (set abd_buf of + * the new ABD to the starting point within the original raw buffer), but + * scattered ABDs are a little more complex. The new ABD makes a copy of the + * relevant abd_chunks pointers (but not the underlying data). However, to + * provide arbitrary rather than only chunk-aligned starting offsets, it also + * tracks an abd_offset field which represents the starting point of the data + * within the first chunk in abd_chunks. For both linear and scattered ABDs, + * creating an offset ABD marks the original ABD as the offset's parent, and the + * original ABD's abd_children refcount is incremented. This data allows us to + * ensure the root ABD isn't deleted before its children. + * + * Most consumers should never need to know what type of ABD they're using -- + * the ABD public API ensures that it's possible to transparently switch from + * using a linear ABD to a scattered one when doing so would be beneficial. + * + * If you need to use the data within an ABD directly, if you know it's linear + * (because you allocated it) you can use abd_to_buf() to access the underlying + * raw buffer. Otherwise, you should use one of the abd_borrow_buf* functions + * which will allocate a raw buffer if necessary. Use the abd_return_buf* + * functions to return any raw buffers that are no longer necessary when you're + * done using them. + * + * There are a variety of ABD APIs that implement basic buffer operations: + * compare, copy, read, write, and fill with zeroes. If you need a custom + * function which progressively accesses the whole ABD, use the abd_iterate_* + * functions. + */ + +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#else +#define MAX_ORDER 1 +#endif + +typedef struct abd_stats { + kstat_named_t abdstat_struct_size; + kstat_named_t abdstat_linear_cnt; + kstat_named_t abdstat_linear_data_size; + kstat_named_t abdstat_scatter_cnt; + kstat_named_t abdstat_scatter_data_size; + kstat_named_t abdstat_scatter_chunk_waste; + kstat_named_t abdstat_scatter_orders[MAX_ORDER]; + kstat_named_t abdstat_scatter_page_multi_chunk; + kstat_named_t abdstat_scatter_page_multi_zone; + kstat_named_t abdstat_scatter_page_alloc_retry; + kstat_named_t abdstat_scatter_sg_table_retry; +} abd_stats_t; + +static abd_stats_t abd_stats = { + /* Amount of memory occupied by all of the abd_t struct allocations */ + { "struct_size", KSTAT_DATA_UINT64 }, + /* + * The number of linear ABDs which are currently allocated, excluding + * ABDs which don't own their data (for instance the ones which were + * allocated through abd_get_offset() and abd_get_from_buf()). If an + * ABD takes ownership of its buf then it will become tracked. + */ + { "linear_cnt", KSTAT_DATA_UINT64 }, + /* Amount of data stored in all linear ABDs tracked by linear_cnt */ + { "linear_data_size", KSTAT_DATA_UINT64 }, + /* + * The number of scatter ABDs which are currently allocated, excluding + * ABDs which don't own their data (for instance the ones which were + * allocated through abd_get_offset()). + */ + { "scatter_cnt", KSTAT_DATA_UINT64 }, + /* Amount of data stored in all scatter ABDs tracked by scatter_cnt */ + { "scatter_data_size", KSTAT_DATA_UINT64 }, + /* + * The amount of space wasted at the end of the last chunk across all + * scatter ABDs tracked by scatter_cnt. + */ + { "scatter_chunk_waste", KSTAT_DATA_UINT64 }, + /* + * The number of compound allocations of a given order. These + * allocations are spread over all currently allocated ABDs, and + * act as a measure of memory fragmentation. + */ + { { "scatter_order_N", KSTAT_DATA_UINT64 } }, + /* + * The number of scatter ABDs which contain multiple chunks. + * ABDs are preferentially allocated from the minimum number of + * contiguous multi-page chunks, a single chunk is optimal. + */ + { "scatter_page_multi_chunk", KSTAT_DATA_UINT64 }, + /* + * The number of scatter ABDs which are split across memory zones. + * ABDs are preferentially allocated using pages from a single zone. + */ + { "scatter_page_multi_zone", KSTAT_DATA_UINT64 }, + /* + * The total number of retries encountered when attempting to + * allocate the pages to populate the scatter ABD. + */ + { "scatter_page_alloc_retry", KSTAT_DATA_UINT64 }, + /* + * The total number of retries encountered when attempting to + * allocate the sg table for an ABD. + */ + { "scatter_sg_table_retry", KSTAT_DATA_UINT64 }, +}; + +#define ABDSTAT(stat) (abd_stats.stat.value.ui64) +#define ABDSTAT_INCR(stat, val) \ + atomic_add_64(&abd_stats.stat.value.ui64, (val)) +#define ABDSTAT_BUMP(stat) ABDSTAT_INCR(stat, 1) +#define ABDSTAT_BUMPDOWN(stat) ABDSTAT_INCR(stat, -1) + +#define ABD_SCATTER(abd) (abd->abd_u.abd_scatter) +#define ABD_BUF(abd) (abd->abd_u.abd_linear.abd_buf) +#define abd_for_each_sg(abd, sg, n, i) \ + for_each_sg(ABD_SCATTER(abd).abd_sgl, sg, n, i) + +/* see block comment above for description */ +int zfs_abd_scatter_enabled = B_TRUE; +unsigned zfs_abd_scatter_max_order = MAX_ORDER - 1; + +static kmem_cache_t *abd_cache = NULL; +static kstat_t *abd_ksp; + +static inline size_t +abd_chunkcnt_for_bytes(size_t size) +{ + return (P2ROUNDUP(size, PAGESIZE) / PAGESIZE); +} + +#ifdef _KERNEL +#ifndef CONFIG_HIGHMEM + +#ifndef __GFP_RECLAIM +#define __GFP_RECLAIM __GFP_WAIT +#endif + +static unsigned long +abd_alloc_chunk(int nid, gfp_t gfp, unsigned int order) +{ + struct page *page; + + page = alloc_pages_node(nid, gfp, order); + if (!page) + return (0); + + return ((unsigned long) page_address(page)); +} + +/* + * The goal is to minimize fragmentation by preferentially populating ABDs + * with higher order compound pages from a single zone. Allocation size is + * progressively decreased until it can be satisfied without performing + * reclaim or compaction. When necessary this function will degenerate to + * allocating individual pages and allowing reclaim to satisfy allocations. + */ +static void +abd_alloc_pages(abd_t *abd, size_t size) +{ + struct list_head pages; + struct sg_table table; + struct scatterlist *sg; + struct page *page, *tmp_page; + gfp_t gfp = __GFP_NOWARN | GFP_NOIO; + gfp_t gfp_comp = (gfp | __GFP_NORETRY | __GFP_COMP) & ~__GFP_RECLAIM; + int max_order = MIN(zfs_abd_scatter_max_order, MAX_ORDER - 1); + int nr_pages = abd_chunkcnt_for_bytes(size); + int chunks = 0, zones = 0; + size_t remaining_size; + int nid = NUMA_NO_NODE; + int alloc_pages = 0; + int order; + + INIT_LIST_HEAD(&pages); + + while (alloc_pages < nr_pages) { + unsigned long paddr; + unsigned chunk_pages; + + order = MIN(highbit64(nr_pages - alloc_pages) - 1, max_order); + chunk_pages = (1U << order); + + paddr = abd_alloc_chunk(nid, order ? gfp_comp : gfp, order); + if (paddr == 0) { + if (order == 0) { + ABDSTAT_BUMP(abdstat_scatter_page_alloc_retry); + schedule_timeout_interruptible(1); + } else { + max_order = MAX(0, order - 1); + } + continue; + } + + page = virt_to_page(paddr); + list_add_tail(&page->lru, &pages); + + if ((nid != NUMA_NO_NODE) && (page_to_nid(page) != nid)) + zones++; + + nid = page_to_nid(page); + ABDSTAT_BUMP(abdstat_scatter_orders[order]); + chunks++; + alloc_pages += chunk_pages; + } + + ASSERT3S(alloc_pages, ==, nr_pages); + + while (sg_alloc_table(&table, chunks, gfp)) { + ABDSTAT_BUMP(abdstat_scatter_sg_table_retry); + schedule_timeout_interruptible(1); + } + + sg = table.sgl; + remaining_size = size; + list_for_each_entry_safe(page, tmp_page, &pages, lru) { + size_t sg_size = MIN(PAGESIZE << compound_order(page), + remaining_size); + sg_set_page(sg, page, sg_size, 0); + remaining_size -= sg_size; + + sg = sg_next(sg); + list_del(&page->lru); + } + + if (chunks > 1) { + ABDSTAT_BUMP(abdstat_scatter_page_multi_chunk); + abd->abd_flags |= ABD_FLAG_MULTI_CHUNK; + + if (zones) { + ABDSTAT_BUMP(abdstat_scatter_page_multi_zone); + abd->abd_flags |= ABD_FLAG_MULTI_ZONE; + } + } + + ABD_SCATTER(abd).abd_sgl = table.sgl; + ABD_SCATTER(abd).abd_nents = table.nents; +} +#else +/* + * Allocate N individual pages to construct a scatter ABD. This function + * makes no attempt to request contiguous pages and requires the minimal + * number of kernel interfaces. It's designed for maximum compatibility. + */ +static void +abd_alloc_pages(abd_t *abd, size_t size) +{ + struct scatterlist *sg; + struct sg_table table; + struct page *page; + gfp_t gfp = __GFP_NOWARN | GFP_NOIO; + int nr_pages = abd_chunkcnt_for_bytes(size); + int i; + + while (sg_alloc_table(&table, nr_pages, gfp)) { + ABDSTAT_BUMP(abdstat_scatter_sg_table_retry); + schedule_timeout_interruptible(1); + } + + ASSERT3U(table.nents, ==, nr_pages); + ABD_SCATTER(abd).abd_sgl = table.sgl; + ABD_SCATTER(abd).abd_nents = nr_pages; + + abd_for_each_sg(abd, sg, nr_pages, i) { + while ((page = __page_cache_alloc(gfp)) == NULL) { + ABDSTAT_BUMP(abdstat_scatter_page_alloc_retry); + schedule_timeout_interruptible(1); + } + + ABDSTAT_BUMP(abdstat_scatter_orders[0]); + sg_set_page(sg, page, PAGESIZE, 0); + } + + if (nr_pages > 1) { + ABDSTAT_BUMP(abdstat_scatter_page_multi_chunk); + abd->abd_flags |= ABD_FLAG_MULTI_CHUNK; + } +} +#endif /* !CONFIG_HIGHMEM */ + +static void +abd_free_pages(abd_t *abd) +{ + struct scatterlist *sg; + struct sg_table table; + struct page *page; + int nr_pages = ABD_SCATTER(abd).abd_nents; + int order, i; + + if (abd->abd_flags & ABD_FLAG_MULTI_ZONE) + ABDSTAT_BUMPDOWN(abdstat_scatter_page_multi_zone); + + if (abd->abd_flags & ABD_FLAG_MULTI_CHUNK) + ABDSTAT_BUMPDOWN(abdstat_scatter_page_multi_chunk); + + abd_for_each_sg(abd, sg, nr_pages, i) { + page = sg_page(sg); + order = compound_order(page); + __free_pages(page, order); + ASSERT3U(sg->length, <=, PAGE_SIZE << order); + ABDSTAT_BUMPDOWN(abdstat_scatter_orders[order]); + } + + table.sgl = ABD_SCATTER(abd).abd_sgl; + table.nents = table.orig_nents = nr_pages; + sg_free_table(&table); +} + +#else /* _KERNEL */ + +#ifndef PAGE_SHIFT +#define PAGE_SHIFT (highbit64(PAGESIZE)-1) +#endif + +struct page; + +#define kpm_enable 1 +#define abd_alloc_chunk(o) \ + ((struct page *)umem_alloc_aligned(PAGESIZE << (o), 64, KM_SLEEP)) +#define abd_free_chunk(chunk, o) umem_free(chunk, PAGESIZE << (o)) +#define zfs_kmap_atomic(chunk, km) ((void *)chunk) +#define zfs_kunmap_atomic(addr, km) do { (void)(addr); } while (0) +#define local_irq_save(flags) do { (void)(flags); } while (0) +#define local_irq_restore(flags) do { (void)(flags); } while (0) +#define nth_page(pg, i) \ + ((struct page *)((void *)(pg) + (i) * PAGESIZE)) + +struct scatterlist { + struct page *page; + int length; + int end; +}; + +static void +sg_init_table(struct scatterlist *sg, int nr) +{ + memset(sg, 0, nr * sizeof (struct scatterlist)); + sg[nr - 1].end = 1; +} + +#define for_each_sg(sgl, sg, nr, i) \ + for ((i) = 0, (sg) = (sgl); (i) < (nr); (i)++, (sg) = sg_next(sg)) + +static inline void +sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, + unsigned int offset) +{ + /* currently we don't use offset */ + ASSERT(offset == 0); + sg->page = page; + sg->length = len; +} + +static inline struct page * +sg_page(struct scatterlist *sg) +{ + return (sg->page); +} + +static inline struct scatterlist * +sg_next(struct scatterlist *sg) +{ + if (sg->end) + return (NULL); + + return (sg + 1); +} + +static void +abd_alloc_pages(abd_t *abd, size_t size) +{ + unsigned nr_pages = abd_chunkcnt_for_bytes(size); + struct scatterlist *sg; + int i; + + ABD_SCATTER(abd).abd_sgl = vmem_alloc(nr_pages * + sizeof (struct scatterlist), KM_SLEEP); + sg_init_table(ABD_SCATTER(abd).abd_sgl, nr_pages); + + abd_for_each_sg(abd, sg, nr_pages, i) { + struct page *p = abd_alloc_chunk(0); + sg_set_page(sg, p, PAGESIZE, 0); + } + ABD_SCATTER(abd).abd_nents = nr_pages; +} + +static void +abd_free_pages(abd_t *abd) +{ + int i, n = ABD_SCATTER(abd).abd_nents; + struct scatterlist *sg; + int j; + + abd_for_each_sg(abd, sg, n, i) { + for (j = 0; j < sg->length; j += PAGESIZE) { + struct page *p = nth_page(sg_page(sg), j>>PAGE_SHIFT); + abd_free_chunk(p, 0); + } + } + + vmem_free(ABD_SCATTER(abd).abd_sgl, n * sizeof (struct scatterlist)); +} + +#endif /* _KERNEL */ + +void +abd_init(void) +{ + int i; + + abd_cache = kmem_cache_create("abd_t", sizeof (abd_t), + 0, NULL, NULL, NULL, NULL, NULL, 0); + + abd_ksp = kstat_create("zfs", 0, "abdstats", "misc", KSTAT_TYPE_NAMED, + sizeof (abd_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL); + if (abd_ksp != NULL) { + abd_ksp->ks_data = &abd_stats; + kstat_install(abd_ksp); + + for (i = 0; i < MAX_ORDER; i++) { + snprintf(abd_stats.abdstat_scatter_orders[i].name, + KSTAT_STRLEN, "scatter_order_%d", i); + abd_stats.abdstat_scatter_orders[i].data_type = + KSTAT_DATA_UINT64; + } + } +} + +void +abd_fini(void) +{ + if (abd_ksp != NULL) { + kstat_delete(abd_ksp); + abd_ksp = NULL; + } + + if (abd_cache) { + kmem_cache_destroy(abd_cache); + abd_cache = NULL; + } +} + +static inline void +abd_verify(abd_t *abd) +{ + ASSERT3U(abd->abd_size, >, 0); + ASSERT3U(abd->abd_size, <=, SPA_MAXBLOCKSIZE); + ASSERT3U(abd->abd_flags, ==, abd->abd_flags & (ABD_FLAG_LINEAR | + ABD_FLAG_OWNER | ABD_FLAG_META | ABD_FLAG_MULTI_ZONE | + ABD_FLAG_MULTI_CHUNK)); + IMPLY(abd->abd_parent != NULL, !(abd->abd_flags & ABD_FLAG_OWNER)); + IMPLY(abd->abd_flags & ABD_FLAG_META, abd->abd_flags & ABD_FLAG_OWNER); + if (abd_is_linear(abd)) { + ASSERT3P(abd->abd_u.abd_linear.abd_buf, !=, NULL); + } else { + size_t n; + int i; + struct scatterlist *sg; + + ASSERT3U(ABD_SCATTER(abd).abd_nents, >, 0); + ASSERT3U(ABD_SCATTER(abd).abd_offset, <, + ABD_SCATTER(abd).abd_sgl->length); + n = ABD_SCATTER(abd).abd_nents; + abd_for_each_sg(abd, sg, n, i) { + ASSERT3P(sg_page(sg), !=, NULL); + } + } +} + +static inline abd_t * +abd_alloc_struct(void) +{ + abd_t *abd = kmem_cache_alloc(abd_cache, KM_PUSHPAGE); + + ASSERT3P(abd, !=, NULL); + ABDSTAT_INCR(abdstat_struct_size, sizeof (abd_t)); + + return (abd); +} + +static inline void +abd_free_struct(abd_t *abd) +{ + kmem_cache_free(abd_cache, abd); + ABDSTAT_INCR(abdstat_struct_size, -sizeof (abd_t)); +} + +/* + * Allocate an ABD, along with its own underlying data buffers. Use this if you + * don't care whether the ABD is linear or not. + */ +abd_t * +abd_alloc(size_t size, boolean_t is_metadata) +{ + abd_t *abd; + + if (!zfs_abd_scatter_enabled || size <= PAGESIZE) + return (abd_alloc_linear(size, is_metadata)); + + VERIFY3U(size, <=, SPA_MAXBLOCKSIZE); + + abd = abd_alloc_struct(); + abd->abd_flags = ABD_FLAG_OWNER; + abd_alloc_pages(abd, size); + + if (is_metadata) { + abd->abd_flags |= ABD_FLAG_META; + } + abd->abd_size = size; + abd->abd_parent = NULL; + refcount_create(&abd->abd_children); + + abd->abd_u.abd_scatter.abd_offset = 0; + + ABDSTAT_BUMP(abdstat_scatter_cnt); + ABDSTAT_INCR(abdstat_scatter_data_size, size); + ABDSTAT_INCR(abdstat_scatter_chunk_waste, + P2ROUNDUP(size, PAGESIZE) - size); + + return (abd); +} + +static void +abd_free_scatter(abd_t *abd) +{ + abd_free_pages(abd); + + refcount_destroy(&abd->abd_children); + ABDSTAT_BUMPDOWN(abdstat_scatter_cnt); + ABDSTAT_INCR(abdstat_scatter_data_size, -(int)abd->abd_size); + ABDSTAT_INCR(abdstat_scatter_chunk_waste, + abd->abd_size - P2ROUNDUP(abd->abd_size, PAGESIZE)); + + abd_free_struct(abd); +} + +/* + * Allocate an ABD that must be linear, along with its own underlying data + * buffer. Only use this when it would be very annoying to write your ABD + * consumer with a scattered ABD. + */ +abd_t * +abd_alloc_linear(size_t size, boolean_t is_metadata) +{ + abd_t *abd = abd_alloc_struct(); + + VERIFY3U(size, <=, SPA_MAXBLOCKSIZE); + + abd->abd_flags = ABD_FLAG_LINEAR | ABD_FLAG_OWNER; + if (is_metadata) { + abd->abd_flags |= ABD_FLAG_META; + } + abd->abd_size = size; + abd->abd_parent = NULL; + refcount_create(&abd->abd_children); + + if (is_metadata) { + abd->abd_u.abd_linear.abd_buf = zio_buf_alloc(size); + } else { + abd->abd_u.abd_linear.abd_buf = zio_data_buf_alloc(size); + } + + ABDSTAT_BUMP(abdstat_linear_cnt); + ABDSTAT_INCR(abdstat_linear_data_size, size); + + return (abd); +} + +static void +abd_free_linear(abd_t *abd) +{ + if (abd->abd_flags & ABD_FLAG_META) { + zio_buf_free(abd->abd_u.abd_linear.abd_buf, abd->abd_size); + } else { + zio_data_buf_free(abd->abd_u.abd_linear.abd_buf, abd->abd_size); + } + + refcount_destroy(&abd->abd_children); + ABDSTAT_BUMPDOWN(abdstat_linear_cnt); + ABDSTAT_INCR(abdstat_linear_data_size, -(int)abd->abd_size); + + abd_free_struct(abd); +} + +/* + * Free an ABD. Only use this on ABDs allocated with abd_alloc() or + * abd_alloc_linear(). + */ +void +abd_free(abd_t *abd) +{ + abd_verify(abd); + ASSERT3P(abd->abd_parent, ==, NULL); + ASSERT(abd->abd_flags & ABD_FLAG_OWNER); + if (abd_is_linear(abd)) + abd_free_linear(abd); + else + abd_free_scatter(abd); +} + +/* + * Allocate an ABD of the same format (same metadata flag, same scatterize + * setting) as another ABD. + */ +abd_t * +abd_alloc_sametype(abd_t *sabd, size_t size) +{ + boolean_t is_metadata = (sabd->abd_flags & ABD_FLAG_META) != 0; + if (abd_is_linear(sabd)) { + return (abd_alloc_linear(size, is_metadata)); + } else { + return (abd_alloc(size, is_metadata)); + } +} + +/* + * If we're going to use this ABD for doing I/O using the block layer, the + * consumer of the ABD data doesn't care if it's scattered or not, and we don't + * plan to store this ABD in memory for a long period of time, we should + * allocate the ABD type that requires the least data copying to do the I/O. + * + * On Illumos this is linear ABDs, however if ldi_strategy() can ever issue I/Os + * using a scatter/gather list we should switch to that and replace this call + * with vanilla abd_alloc(). + * + * On Linux the optimal thing to do would be to use abd_get_offset() and + * construct a new ABD which shares the original pages thereby eliminating + * the copy. But for the moment a new linear ABD is allocated until this + * performance optimization can be implemented. + */ +abd_t * +abd_alloc_for_io(size_t size, boolean_t is_metadata) +{ + return (abd_alloc(size, is_metadata)); +} + +/* + * Allocate a new ABD to point to offset off of sabd. It shares the underlying + * buffer data with sabd. Use abd_put() to free. sabd must not be freed while + * any derived ABDs exist. + */ +static inline abd_t * +abd_get_offset_impl(abd_t *sabd, size_t off, size_t size) +{ + abd_t *abd; + + abd_verify(sabd); + ASSERT3U(off, <=, sabd->abd_size); + + if (abd_is_linear(sabd)) { + abd = abd_alloc_struct(); + + /* + * Even if this buf is filesystem metadata, we only track that + * if we own the underlying data buffer, which is not true in + * this case. Therefore, we don't ever use ABD_FLAG_META here. + */ + abd->abd_flags = ABD_FLAG_LINEAR; + + abd->abd_u.abd_linear.abd_buf = + (char *)sabd->abd_u.abd_linear.abd_buf + off; + } else { + int i; + struct scatterlist *sg; + size_t new_offset = sabd->abd_u.abd_scatter.abd_offset + off; + + abd = abd_alloc_struct(); + + /* + * Even if this buf is filesystem metadata, we only track that + * if we own the underlying data buffer, which is not true in + * this case. Therefore, we don't ever use ABD_FLAG_META here. + */ + abd->abd_flags = 0; + + abd_for_each_sg(sabd, sg, ABD_SCATTER(sabd).abd_nents, i) { + if (new_offset < sg->length) + break; + new_offset -= sg->length; + } + + ABD_SCATTER(abd).abd_sgl = sg; + ABD_SCATTER(abd).abd_offset = new_offset; + ABD_SCATTER(abd).abd_nents = ABD_SCATTER(sabd).abd_nents - i; + } + + abd->abd_size = size; + abd->abd_parent = sabd; + refcount_create(&abd->abd_children); + (void) refcount_add_many(&sabd->abd_children, abd->abd_size, abd); + + return (abd); +} + +abd_t * +abd_get_offset(abd_t *sabd, size_t off) +{ + size_t size = sabd->abd_size > off ? sabd->abd_size - off : 0; + + VERIFY3U(size, >, 0); + + return (abd_get_offset_impl(sabd, off, size)); +} + +abd_t * +abd_get_offset_size(abd_t *sabd, size_t off, size_t size) +{ + ASSERT3U(off + size, <=, sabd->abd_size); + + return (abd_get_offset_impl(sabd, off, size)); +} + +/* + * Allocate a linear ABD structure for buf. You must free this with abd_put() + * since the resulting ABD doesn't own its own buffer. + */ +abd_t * +abd_get_from_buf(void *buf, size_t size) +{ + abd_t *abd = abd_alloc_struct(); + + VERIFY3U(size, <=, SPA_MAXBLOCKSIZE); + + /* + * Even if this buf is filesystem metadata, we only track that if we + * own the underlying data buffer, which is not true in this case. + * Therefore, we don't ever use ABD_FLAG_META here. + */ + abd->abd_flags = ABD_FLAG_LINEAR; + abd->abd_size = size; + abd->abd_parent = NULL; + refcount_create(&abd->abd_children); + + abd->abd_u.abd_linear.abd_buf = buf; + + return (abd); +} + +/* + * Free an ABD allocated from abd_get_offset() or abd_get_from_buf(). Will not + * free the underlying scatterlist or buffer. + */ +void +abd_put(abd_t *abd) +{ + abd_verify(abd); + ASSERT(!(abd->abd_flags & ABD_FLAG_OWNER)); + + if (abd->abd_parent != NULL) { + (void) refcount_remove_many(&abd->abd_parent->abd_children, + abd->abd_size, abd); + } + + refcount_destroy(&abd->abd_children); + abd_free_struct(abd); +} + +/* + * Get the raw buffer associated with a linear ABD. + */ +void * +abd_to_buf(abd_t *abd) +{ + ASSERT(abd_is_linear(abd)); + abd_verify(abd); + return (abd->abd_u.abd_linear.abd_buf); +} + +/* + * Borrow a raw buffer from an ABD without copying the contents of the ABD + * into the buffer. If the ABD is scattered, this will allocate a raw buffer + * whose contents are undefined. To copy over the existing data in the ABD, use + * abd_borrow_buf_copy() instead. + */ +void * +abd_borrow_buf(abd_t *abd, size_t n) +{ + void *buf; + abd_verify(abd); + ASSERT3U(abd->abd_size, >=, n); + if (abd_is_linear(abd)) { + buf = abd_to_buf(abd); + } else { + buf = zio_buf_alloc(n); + } + (void) refcount_add_many(&abd->abd_children, n, buf); + + return (buf); +} + +void * +abd_borrow_buf_copy(abd_t *abd, size_t n) +{ + void *buf = abd_borrow_buf(abd, n); + if (!abd_is_linear(abd)) { + abd_copy_to_buf(buf, abd, n); + } + return (buf); +} + +/* + * Return a borrowed raw buffer to an ABD. If the ABD is scattered, this will + * not change the contents of the ABD and will ASSERT that you didn't modify + * the buffer since it was borrowed. If you want any changes you made to buf to + * be copied back to abd, use abd_return_buf_copy() instead. + */ +void +abd_return_buf(abd_t *abd, void *buf, size_t n) +{ + abd_verify(abd); + ASSERT3U(abd->abd_size, >=, n); + if (abd_is_linear(abd)) { + ASSERT3P(buf, ==, abd_to_buf(abd)); + } else { + ASSERT0(abd_cmp_buf(abd, buf, n)); + zio_buf_free(buf, n); + } + (void) refcount_remove_many(&abd->abd_children, n, buf); +} + +void +abd_return_buf_copy(abd_t *abd, void *buf, size_t n) +{ + if (!abd_is_linear(abd)) { + abd_copy_from_buf(abd, buf, n); + } + abd_return_buf(abd, buf, n); +} + +/* + * Give this ABD ownership of the buffer that it's storing. Can only be used on + * linear ABDs which were allocated via abd_get_from_buf(), or ones allocated + * with abd_alloc_linear() which subsequently released ownership of their buf + * with abd_release_ownership_of_buf(). + */ +void +abd_take_ownership_of_buf(abd_t *abd, boolean_t is_metadata) +{ + ASSERT(abd_is_linear(abd)); + ASSERT(!(abd->abd_flags & ABD_FLAG_OWNER)); + abd_verify(abd); + + abd->abd_flags |= ABD_FLAG_OWNER; + if (is_metadata) { + abd->abd_flags |= ABD_FLAG_META; + } + + ABDSTAT_BUMP(abdstat_linear_cnt); + ABDSTAT_INCR(abdstat_linear_data_size, abd->abd_size); +} + +void +abd_release_ownership_of_buf(abd_t *abd) +{ + ASSERT(abd_is_linear(abd)); + ASSERT(abd->abd_flags & ABD_FLAG_OWNER); + abd_verify(abd); + + abd->abd_flags &= ~ABD_FLAG_OWNER; + /* Disable this flag since we no longer own the data buffer */ + abd->abd_flags &= ~ABD_FLAG_META; + + ABDSTAT_BUMPDOWN(abdstat_linear_cnt); + ABDSTAT_INCR(abdstat_linear_data_size, -(int)abd->abd_size); +} + +#ifndef HAVE_1ARG_KMAP_ATOMIC +#define NR_KM_TYPE (6) +#ifdef _KERNEL +int km_table[NR_KM_TYPE] = { + KM_USER0, + KM_USER1, + KM_BIO_SRC_IRQ, + KM_BIO_DST_IRQ, + KM_PTE0, + KM_PTE1, +}; +#endif +#endif + +struct abd_iter { + /* public interface */ + void *iter_mapaddr; /* addr corresponding to iter_pos */ + size_t iter_mapsize; /* length of data valid at mapaddr */ + + /* private */ + abd_t *iter_abd; /* ABD being iterated through */ + size_t iter_pos; + size_t iter_offset; /* offset in current sg/abd_buf, */ + /* abd_offset included */ + struct scatterlist *iter_sg; /* current sg */ +#ifndef HAVE_1ARG_KMAP_ATOMIC + int iter_km; /* KM_* for kmap_atomic */ +#endif +}; + +/* + * Initialize the abd_iter. + */ +static void +abd_iter_init(struct abd_iter *aiter, abd_t *abd, int km_type) +{ + abd_verify(abd); + aiter->iter_abd = abd; + aiter->iter_mapaddr = NULL; + aiter->iter_mapsize = 0; + aiter->iter_pos = 0; + if (abd_is_linear(abd)) { + aiter->iter_offset = 0; + aiter->iter_sg = NULL; + } else { + aiter->iter_offset = ABD_SCATTER(abd).abd_offset; + aiter->iter_sg = ABD_SCATTER(abd).abd_sgl; + } +#ifndef HAVE_1ARG_KMAP_ATOMIC + ASSERT3U(km_type, <, NR_KM_TYPE); + aiter->iter_km = km_type; +#endif +} + +/* + * Advance the iterator by a certain amount. Cannot be called when a chunk is + * in use. This can be safely called when the aiter has already exhausted, in + * which case this does nothing. + */ +static void +abd_iter_advance(struct abd_iter *aiter, size_t amount) +{ + ASSERT3P(aiter->iter_mapaddr, ==, NULL); + ASSERT0(aiter->iter_mapsize); + + /* There's nothing left to advance to, so do nothing */ + if (aiter->iter_pos == aiter->iter_abd->abd_size) + return; + + aiter->iter_pos += amount; + aiter->iter_offset += amount; + if (!abd_is_linear(aiter->iter_abd)) { + while (aiter->iter_offset >= aiter->iter_sg->length) { + aiter->iter_offset -= aiter->iter_sg->length; + aiter->iter_sg = sg_next(aiter->iter_sg); + if (aiter->iter_sg == NULL) { + ASSERT0(aiter->iter_offset); + break; + } + } + } +} + +/* + * Map the current chunk into aiter. This can be safely called when the aiter + * has already exhausted, in which case this does nothing. + */ +static void +abd_iter_map(struct abd_iter *aiter) +{ + void *paddr; + size_t offset = 0; + + ASSERT3P(aiter->iter_mapaddr, ==, NULL); + ASSERT0(aiter->iter_mapsize); + + /* There's nothing left to iterate over, so do nothing */ + if (aiter->iter_pos == aiter->iter_abd->abd_size) + return; + + if (abd_is_linear(aiter->iter_abd)) { + ASSERT3U(aiter->iter_pos, ==, aiter->iter_offset); + offset = aiter->iter_offset; + aiter->iter_mapsize = aiter->iter_abd->abd_size - offset; + paddr = aiter->iter_abd->abd_u.abd_linear.abd_buf; + } else { + offset = aiter->iter_offset; + aiter->iter_mapsize = MIN(aiter->iter_sg->length - offset, + aiter->iter_abd->abd_size - aiter->iter_pos); + + paddr = zfs_kmap_atomic(sg_page(aiter->iter_sg), + km_table[aiter->iter_km]); + } + + aiter->iter_mapaddr = (char *)paddr + offset; +} + +/* + * Unmap the current chunk from aiter. This can be safely called when the aiter + * has already exhausted, in which case this does nothing. + */ +static void +abd_iter_unmap(struct abd_iter *aiter) +{ + /* There's nothing left to unmap, so do nothing */ + if (aiter->iter_pos == aiter->iter_abd->abd_size) + return; + + if (!abd_is_linear(aiter->iter_abd)) { + /* LINTED E_FUNC_SET_NOT_USED */ + zfs_kunmap_atomic(aiter->iter_mapaddr - aiter->iter_offset, + km_table[aiter->iter_km]); + } + + ASSERT3P(aiter->iter_mapaddr, !=, NULL); + ASSERT3U(aiter->iter_mapsize, >, 0); + + aiter->iter_mapaddr = NULL; + aiter->iter_mapsize = 0; +} + +int +abd_iterate_func(abd_t *abd, size_t off, size_t size, + abd_iter_func_t *func, void *private) +{ + int ret = 0; + struct abd_iter aiter; + + abd_verify(abd); + ASSERT3U(off + size, <=, abd->abd_size); + + abd_iter_init(&aiter, abd, 0); + abd_iter_advance(&aiter, off); + + while (size > 0) { + size_t len; + abd_iter_map(&aiter); + + len = MIN(aiter.iter_mapsize, size); + ASSERT3U(len, >, 0); + + ret = func(aiter.iter_mapaddr, len, private); + + abd_iter_unmap(&aiter); + + if (ret != 0) + break; + + size -= len; + abd_iter_advance(&aiter, len); + } + + return (ret); +} + +struct buf_arg { + void *arg_buf; +}; + +static int +abd_copy_to_buf_off_cb(void *buf, size_t size, void *private) +{ + struct buf_arg *ba_ptr = private; + + (void) memcpy(ba_ptr->arg_buf, buf, size); + ba_ptr->arg_buf = (char *)ba_ptr->arg_buf + size; + + return (0); +} + +/* + * Copy abd to buf. (off is the offset in abd.) + */ +void +abd_copy_to_buf_off(void *buf, abd_t *abd, size_t off, size_t size) +{ + struct buf_arg ba_ptr = { buf }; + + (void) abd_iterate_func(abd, off, size, abd_copy_to_buf_off_cb, + &ba_ptr); +} + +static int +abd_cmp_buf_off_cb(void *buf, size_t size, void *private) +{ + int ret; + struct buf_arg *ba_ptr = private; + + ret = memcmp(buf, ba_ptr->arg_buf, size); + ba_ptr->arg_buf = (char *)ba_ptr->arg_buf + size; + + return (ret); +} + +/* + * Compare the contents of abd to buf. (off is the offset in abd.) + */ +int +abd_cmp_buf_off(abd_t *abd, const void *buf, size_t off, size_t size) +{ + struct buf_arg ba_ptr = { (void *) buf }; + + return (abd_iterate_func(abd, off, size, abd_cmp_buf_off_cb, &ba_ptr)); +} + +static int +abd_copy_from_buf_off_cb(void *buf, size_t size, void *private) +{ + struct buf_arg *ba_ptr = private; + + (void) memcpy(buf, ba_ptr->arg_buf, size); + ba_ptr->arg_buf = (char *)ba_ptr->arg_buf + size; + + return (0); +} + +/* + * Copy from buf to abd. (off is the offset in abd.) + */ +void +abd_copy_from_buf_off(abd_t *abd, const void *buf, size_t off, size_t size) +{ + struct buf_arg ba_ptr = { (void *) buf }; + + (void) abd_iterate_func(abd, off, size, abd_copy_from_buf_off_cb, + &ba_ptr); +} + +/*ARGSUSED*/ +static int +abd_zero_off_cb(void *buf, size_t size, void *private) +{ + (void) memset(buf, 0, size); + return (0); +} + +/* + * Zero out the abd from a particular offset to the end. + */ +void +abd_zero_off(abd_t *abd, size_t off, size_t size) +{ + (void) abd_iterate_func(abd, off, size, abd_zero_off_cb, NULL); +} + +/* + * Iterate over two ABDs and call func incrementally on the two ABDs' data in + * equal-sized chunks (passed to func as raw buffers). func could be called many + * times during this iteration. + */ +int +abd_iterate_func2(abd_t *dabd, abd_t *sabd, size_t doff, size_t soff, + size_t size, abd_iter_func2_t *func, void *private) +{ + int ret = 0; + struct abd_iter daiter, saiter; + + abd_verify(dabd); + abd_verify(sabd); + + ASSERT3U(doff + size, <=, dabd->abd_size); + ASSERT3U(soff + size, <=, sabd->abd_size); + + abd_iter_init(&daiter, dabd, 0); + abd_iter_init(&saiter, sabd, 1); + abd_iter_advance(&daiter, doff); + abd_iter_advance(&saiter, soff); + + while (size > 0) { + size_t dlen, slen, len; + abd_iter_map(&daiter); + abd_iter_map(&saiter); + + dlen = MIN(daiter.iter_mapsize, size); + slen = MIN(saiter.iter_mapsize, size); + len = MIN(dlen, slen); + ASSERT(dlen > 0 || slen > 0); + + ret = func(daiter.iter_mapaddr, saiter.iter_mapaddr, len, + private); + + abd_iter_unmap(&saiter); + abd_iter_unmap(&daiter); + + if (ret != 0) + break; + + size -= len; + abd_iter_advance(&daiter, len); + abd_iter_advance(&saiter, len); + } + + return (ret); +} + +/*ARGSUSED*/ +static int +abd_copy_off_cb(void *dbuf, void *sbuf, size_t size, void *private) +{ + (void) memcpy(dbuf, sbuf, size); + return (0); +} + +/* + * Copy from sabd to dabd starting from soff and doff. + */ +void +abd_copy_off(abd_t *dabd, abd_t *sabd, size_t doff, size_t soff, size_t size) +{ + (void) abd_iterate_func2(dabd, sabd, doff, soff, size, + abd_copy_off_cb, NULL); +} + +/*ARGSUSED*/ +static int +abd_cmp_cb(void *bufa, void *bufb, size_t size, void *private) +{ + return (memcmp(bufa, bufb, size)); +} + +/* + * Compares the contents of two ABDs. + */ +int +abd_cmp(abd_t *dabd, abd_t *sabd) +{ + ASSERT3U(dabd->abd_size, ==, sabd->abd_size); + return (abd_iterate_func2(dabd, sabd, 0, 0, dabd->abd_size, + abd_cmp_cb, NULL)); +} + +/* + * Iterate over code ABDs and a data ABD and call @func_raidz_gen. + * + * @cabds parity ABDs, must have equal size + * @dabd data ABD. Can be NULL (in this case @dsize = 0) + * @func_raidz_gen should be implemented so that its behaviour + * is the same when taking linear and when taking scatter + */ +void +abd_raidz_gen_iterate(abd_t **cabds, abd_t *dabd, + ssize_t csize, ssize_t dsize, const unsigned parity, + void (*func_raidz_gen)(void **, const void *, size_t, size_t)) +{ + int i; + ssize_t len, dlen; + struct abd_iter caiters[3]; + struct abd_iter daiter = {0}; + void *caddrs[3]; + unsigned long flags; + + ASSERT3U(parity, <=, 3); + + for (i = 0; i < parity; i++) + abd_iter_init(&caiters[i], cabds[i], i); + + if (dabd) + abd_iter_init(&daiter, dabd, i); + + ASSERT3S(dsize, >=, 0); + + local_irq_save(flags); + while (csize > 0) { + len = csize; + + if (dabd && dsize > 0) + abd_iter_map(&daiter); + + for (i = 0; i < parity; i++) { + abd_iter_map(&caiters[i]); + caddrs[i] = caiters[i].iter_mapaddr; + } + + switch (parity) { + case 3: + len = MIN(caiters[2].iter_mapsize, len); + case 2: + len = MIN(caiters[1].iter_mapsize, len); + case 1: + len = MIN(caiters[0].iter_mapsize, len); + } + + /* must be progressive */ + ASSERT3S(len, >, 0); + + if (dabd && dsize > 0) { + /* this needs precise iter.length */ + len = MIN(daiter.iter_mapsize, len); + dlen = len; + } else + dlen = 0; + + /* must be progressive */ + ASSERT3S(len, >, 0); + /* + * The iterated function likely will not do well if each + * segment except the last one is not multiple of 512 (raidz). + */ + ASSERT3U(((uint64_t)len & 511ULL), ==, 0); + + func_raidz_gen(caddrs, daiter.iter_mapaddr, len, dlen); + + for (i = parity-1; i >= 0; i--) { + abd_iter_unmap(&caiters[i]); + abd_iter_advance(&caiters[i], len); + } + + if (dabd && dsize > 0) { + abd_iter_unmap(&daiter); + abd_iter_advance(&daiter, dlen); + dsize -= dlen; + } + + csize -= len; + + ASSERT3S(dsize, >=, 0); + ASSERT3S(csize, >=, 0); + } + local_irq_restore(flags); +} + +/* + * Iterate over code ABDs and data reconstruction target ABDs and call + * @func_raidz_rec. Function maps at most 6 pages atomically. + * + * @cabds parity ABDs, must have equal size + * @tabds rec target ABDs, at most 3 + * @tsize size of data target columns + * @func_raidz_rec expects syndrome data in target columns. Function + * reconstructs data and overwrites target columns. + */ +void +abd_raidz_rec_iterate(abd_t **cabds, abd_t **tabds, + ssize_t tsize, const unsigned parity, + void (*func_raidz_rec)(void **t, const size_t tsize, void **c, + const unsigned *mul), + const unsigned *mul) +{ + int i; + ssize_t len; + struct abd_iter citers[3]; + struct abd_iter xiters[3]; + void *caddrs[3], *xaddrs[3]; + unsigned long flags; + + ASSERT3U(parity, <=, 3); + + for (i = 0; i < parity; i++) { + abd_iter_init(&citers[i], cabds[i], 2*i); + abd_iter_init(&xiters[i], tabds[i], 2*i+1); + } + + local_irq_save(flags); + while (tsize > 0) { + + for (i = 0; i < parity; i++) { + abd_iter_map(&citers[i]); + abd_iter_map(&xiters[i]); + caddrs[i] = citers[i].iter_mapaddr; + xaddrs[i] = xiters[i].iter_mapaddr; + } + + len = tsize; + switch (parity) { + case 3: + len = MIN(xiters[2].iter_mapsize, len); + len = MIN(citers[2].iter_mapsize, len); + case 2: + len = MIN(xiters[1].iter_mapsize, len); + len = MIN(citers[1].iter_mapsize, len); + case 1: + len = MIN(xiters[0].iter_mapsize, len); + len = MIN(citers[0].iter_mapsize, len); + } + /* must be progressive */ + ASSERT3S(len, >, 0); + /* + * The iterated function likely will not do well if each + * segment except the last one is not multiple of 512 (raidz). + */ + ASSERT3U(((uint64_t)len & 511ULL), ==, 0); + + func_raidz_rec(xaddrs, len, caddrs, mul); + + for (i = parity-1; i >= 0; i--) { + abd_iter_unmap(&xiters[i]); + abd_iter_unmap(&citers[i]); + abd_iter_advance(&xiters[i], len); + abd_iter_advance(&citers[i], len); + } + + tsize -= len; + ASSERT3S(tsize, >=, 0); + } + local_irq_restore(flags); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* + * bio_nr_pages for ABD. + * @off is the offset in @abd + */ +unsigned long +abd_nr_pages_off(abd_t *abd, unsigned int size, size_t off) +{ + unsigned long pos; + + if (abd_is_linear(abd)) + pos = (unsigned long)abd_to_buf(abd) + off; + else + pos = abd->abd_u.abd_scatter.abd_offset + off; + + return ((pos + size + PAGESIZE - 1) >> PAGE_SHIFT) - + (pos >> PAGE_SHIFT); +} + +/* + * bio_map for scatter ABD. + * @off is the offset in @abd + * Remaining IO size is returned + */ +unsigned int +abd_scatter_bio_map_off(struct bio *bio, abd_t *abd, + unsigned int io_size, size_t off) +{ + int i; + struct abd_iter aiter; + + ASSERT(!abd_is_linear(abd)); + ASSERT3U(io_size, <=, abd->abd_size - off); + + abd_iter_init(&aiter, abd, 0); + abd_iter_advance(&aiter, off); + + for (i = 0; i < bio->bi_max_vecs; i++) { + struct page *pg; + size_t len, sgoff, pgoff; + struct scatterlist *sg; + + if (io_size <= 0) + break; + + sg = aiter.iter_sg; + sgoff = aiter.iter_offset; + pgoff = sgoff & (PAGESIZE - 1); + len = MIN(io_size, PAGESIZE - pgoff); + ASSERT(len > 0); + + pg = nth_page(sg_page(sg), sgoff >> PAGE_SHIFT); + if (bio_add_page(bio, pg, len, pgoff) != len) + break; + + io_size -= len; + abd_iter_advance(&aiter, len); + } + + return (io_size); +} + +/* Tunable Parameters */ +module_param(zfs_abd_scatter_enabled, int, 0644); +MODULE_PARM_DESC(zfs_abd_scatter_enabled, + "Toggle whether ABD allocations must be linear."); +/* CSTYLED */ +module_param(zfs_abd_scatter_max_order, uint, 0644); +MODULE_PARM_DESC(zfs_abd_scatter_max_order, + "Maximum order allocation used for a scatter ABD."); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/arc.c +++ linux-aws-4.15.0/zfs/module/zfs/arc.c @@ -0,0 +1,7951 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 by Saso Kiselkov. All rights reserved. + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + */ + +/* + * DVA-based Adjustable Replacement Cache + * + * While much of the theory of operation used here is + * based on the self-tuning, low overhead replacement cache + * presented by Megiddo and Modha at FAST 2003, there are some + * significant differences: + * + * 1. The Megiddo and Modha model assumes any page is evictable. + * Pages in its cache cannot be "locked" into memory. This makes + * the eviction algorithm simple: evict the last page in the list. + * This also make the performance characteristics easy to reason + * about. Our cache is not so simple. At any given moment, some + * subset of the blocks in the cache are un-evictable because we + * have handed out a reference to them. Blocks are only evictable + * when there are no external references active. This makes + * eviction far more problematic: we choose to evict the evictable + * blocks that are the "lowest" in the list. + * + * There are times when it is not possible to evict the requested + * space. In these circumstances we are unable to adjust the cache + * size. To prevent the cache growing unbounded at these times we + * implement a "cache throttle" that slows the flow of new data + * into the cache until we can make space available. + * + * 2. The Megiddo and Modha model assumes a fixed cache size. + * Pages are evicted when the cache is full and there is a cache + * miss. Our model has a variable sized cache. It grows with + * high use, but also tries to react to memory pressure from the + * operating system: decreasing its size when system memory is + * tight. + * + * 3. The Megiddo and Modha model assumes a fixed page size. All + * elements of the cache are therefore exactly the same size. So + * when adjusting the cache size following a cache miss, its simply + * a matter of choosing a single page to evict. In our model, we + * have variable sized cache blocks (rangeing from 512 bytes to + * 128K bytes). We therefore choose a set of blocks to evict to make + * space for a cache miss that approximates as closely as possible + * the space used by the new block. + * + * See also: "ARC: A Self-Tuning, Low Overhead Replacement Cache" + * by N. Megiddo & D. Modha, FAST 2003 + */ + +/* + * The locking model: + * + * A new reference to a cache buffer can be obtained in two + * ways: 1) via a hash table lookup using the DVA as a key, + * or 2) via one of the ARC lists. The arc_read() interface + * uses method 1, while the internal ARC algorithms for + * adjusting the cache use method 2. We therefore provide two + * types of locks: 1) the hash table lock array, and 2) the + * ARC list locks. + * + * Buffers do not have their own mutexes, rather they rely on the + * hash table mutexes for the bulk of their protection (i.e. most + * fields in the arc_buf_hdr_t are protected by these mutexes). + * + * buf_hash_find() returns the appropriate mutex (held) when it + * locates the requested buffer in the hash table. It returns + * NULL for the mutex if the buffer was not in the table. + * + * buf_hash_remove() expects the appropriate hash mutex to be + * already held before it is invoked. + * + * Each ARC state also has a mutex which is used to protect the + * buffer list associated with the state. When attempting to + * obtain a hash table lock while holding an ARC list lock you + * must use: mutex_tryenter() to avoid deadlock. Also note that + * the active state mutex must be held before the ghost state mutex. + * + * It as also possible to register a callback which is run when the + * arc_meta_limit is reached and no buffers can be safely evicted. In + * this case the arc user should drop a reference on some arc buffers so + * they can be reclaimed and the arc_meta_limit honored. For example, + * when using the ZPL each dentry holds a references on a znode. These + * dentries must be pruned before the arc buffer holding the znode can + * be safely evicted. + * + * Note that the majority of the performance stats are manipulated + * with atomic operations. + * + * The L2ARC uses the l2ad_mtx on each vdev for the following: + * + * - L2ARC buflist creation + * - L2ARC buflist eviction + * - L2ARC write completion, which walks L2ARC buflists + * - ARC header destruction, as it removes from L2ARC buflists + * - ARC header release, as it removes from L2ARC buflists + */ + +/* + * ARC operation: + * + * Every block that is in the ARC is tracked by an arc_buf_hdr_t structure. + * This structure can point either to a block that is still in the cache or to + * one that is only accessible in an L2 ARC device, or it can provide + * information about a block that was recently evicted. If a block is + * only accessible in the L2ARC, then the arc_buf_hdr_t only has enough + * information to retrieve it from the L2ARC device. This information is + * stored in the l2arc_buf_hdr_t sub-structure of the arc_buf_hdr_t. A block + * that is in this state cannot access the data directly. + * + * Blocks that are actively being referenced or have not been evicted + * are cached in the L1ARC. The L1ARC (l1arc_buf_hdr_t) is a structure within + * the arc_buf_hdr_t that will point to the data block in memory. A block can + * only be read by a consumer if it has an l1arc_buf_hdr_t. The L1ARC + * caches data in two ways -- in a list of ARC buffers (arc_buf_t) and + * also in the arc_buf_hdr_t's private physical data block pointer (b_pabd). + * + * The L1ARC's data pointer may or may not be uncompressed. The ARC has the + * ability to store the physical data (b_pabd) associated with the DVA of the + * arc_buf_hdr_t. Since the b_pabd is a copy of the on-disk physical block, + * it will match its on-disk compression characteristics. This behavior can be + * disabled by setting 'zfs_compressed_arc_enabled' to B_FALSE. When the + * compressed ARC functionality is disabled, the b_pabd will point to an + * uncompressed version of the on-disk data. + * + * Data in the L1ARC is not accessed by consumers of the ARC directly. Each + * arc_buf_hdr_t can have multiple ARC buffers (arc_buf_t) which reference it. + * Each ARC buffer (arc_buf_t) is being actively accessed by a specific ARC + * consumer. The ARC will provide references to this data and will keep it + * cached until it is no longer in use. The ARC caches only the L1ARC's physical + * data block and will evict any arc_buf_t that is no longer referenced. The + * amount of memory consumed by the arc_buf_ts' data buffers can be seen via the + * "overhead_size" kstat. + * + * Depending on the consumer, an arc_buf_t can be requested in uncompressed or + * compressed form. The typical case is that consumers will want uncompressed + * data, and when that happens a new data buffer is allocated where the data is + * decompressed for them to use. Currently the only consumer who wants + * compressed arc_buf_t's is "zfs send", when it streams data exactly as it + * exists on disk. When this happens, the arc_buf_t's data buffer is shared + * with the arc_buf_hdr_t. + * + * Here is a diagram showing an arc_buf_hdr_t referenced by two arc_buf_t's. The + * first one is owned by a compressed send consumer (and therefore references + * the same compressed data buffer as the arc_buf_hdr_t) and the second could be + * used by any other consumer (and has its own uncompressed copy of the data + * buffer). + * + * arc_buf_hdr_t + * +-----------+ + * | fields | + * | common to | + * | L1- and | + * | L2ARC | + * +-----------+ + * | l2arc_buf_hdr_t + * | | + * +-----------+ + * | l1arc_buf_hdr_t + * | | arc_buf_t + * | b_buf +------------>+-----------+ arc_buf_t + * | b_pabd +-+ |b_next +---->+-----------+ + * +-----------+ | |-----------| |b_next +-->NULL + * | |b_comp = T | +-----------+ + * | |b_data +-+ |b_comp = F | + * | +-----------+ | |b_data +-+ + * +->+------+ | +-----------+ | + * compressed | | | | + * data | |<--------------+ | uncompressed + * +------+ compressed, | data + * shared +-->+------+ + * data | | + * | | + * +------+ + * + * When a consumer reads a block, the ARC must first look to see if the + * arc_buf_hdr_t is cached. If the hdr is cached then the ARC allocates a new + * arc_buf_t and either copies uncompressed data into a new data buffer from an + * existing uncompressed arc_buf_t, decompresses the hdr's b_pabd buffer into a + * new data buffer, or shares the hdr's b_pabd buffer, depending on whether the + * hdr is compressed and the desired compression characteristics of the + * arc_buf_t consumer. If the arc_buf_t ends up sharing data with the + * arc_buf_hdr_t and both of them are uncompressed then the arc_buf_t must be + * the last buffer in the hdr's b_buf list, however a shared compressed buf can + * be anywhere in the hdr's list. + * + * The diagram below shows an example of an uncompressed ARC hdr that is + * sharing its data with an arc_buf_t (note that the shared uncompressed buf is + * the last element in the buf list): + * + * arc_buf_hdr_t + * +-----------+ + * | | + * | | + * | | + * +-----------+ + * l2arc_buf_hdr_t| | + * | | + * +-----------+ + * l1arc_buf_hdr_t| | + * | | arc_buf_t (shared) + * | b_buf +------------>+---------+ arc_buf_t + * | | |b_next +---->+---------+ + * | b_pabd +-+ |---------| |b_next +-->NULL + * +-----------+ | | | +---------+ + * | |b_data +-+ | | + * | +---------+ | |b_data +-+ + * +->+------+ | +---------+ | + * | | | | + * uncompressed | | | | + * data +------+ | | + * ^ +->+------+ | + * | uncompressed | | | + * | data | | | + * | +------+ | + * +---------------------------------+ + * + * Writing to the ARC requires that the ARC first discard the hdr's b_pabd + * since the physical block is about to be rewritten. The new data contents + * will be contained in the arc_buf_t. As the I/O pipeline performs the write, + * it may compress the data before writing it to disk. The ARC will be called + * with the transformed data and will bcopy the transformed on-disk block into + * a newly allocated b_pabd. Writes are always done into buffers which have + * either been loaned (and hence are new and don't have other readers) or + * buffers which have been released (and hence have their own hdr, if there + * were originally other readers of the buf's original hdr). This ensures that + * the ARC only needs to update a single buf and its hdr after a write occurs. + * + * When the L2ARC is in use, it will also take advantage of the b_pabd. The + * L2ARC will always write the contents of b_pabd to the L2ARC. This means + * that when compressed ARC is enabled that the L2ARC blocks are identical + * to the on-disk block in the main data pool. This provides a significant + * advantage since the ARC can leverage the bp's checksum when reading from the + * L2ARC to determine if the contents are valid. However, if the compressed + * ARC is disabled, then the L2ARC's block must be transformed to look + * like the physical block in the main data pool before comparing the + * checksum and determining its validity. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#include +#include +#include +#endif +#include +#include +#include +#include +#include +#include + +#ifndef _KERNEL +/* set with ZFS_DEBUG=watch, to enable watchpoints on frozen buffers */ +boolean_t arc_watch = B_FALSE; +#endif + +static kmutex_t arc_reclaim_lock; +static kcondvar_t arc_reclaim_thread_cv; +static boolean_t arc_reclaim_thread_exit; +static kcondvar_t arc_reclaim_waiters_cv; + +/* + * The number of headers to evict in arc_evict_state_impl() before + * dropping the sublist lock and evicting from another sublist. A lower + * value means we're more likely to evict the "correct" header (i.e. the + * oldest header in the arc state), but comes with higher overhead + * (i.e. more invocations of arc_evict_state_impl()). + */ +int zfs_arc_evict_batch_limit = 10; + +/* number of seconds before growing cache again */ +static int arc_grow_retry = 5; + +/* shift of arc_c for calculating overflow limit in arc_get_data_impl */ +int zfs_arc_overflow_shift = 8; + +/* shift of arc_c for calculating both min and max arc_p */ +static int arc_p_min_shift = 4; + +/* log2(fraction of arc to reclaim) */ +static int arc_shrink_shift = 7; + +/* percent of pagecache to reclaim arc to */ +#ifdef _KERNEL +static uint_t zfs_arc_pc_percent = 0; +#endif + +/* + * log2(fraction of ARC which must be free to allow growing). + * I.e. If there is less than arc_c >> arc_no_grow_shift free memory, + * when reading a new block into the ARC, we will evict an equal-sized block + * from the ARC. + * + * This must be less than arc_shrink_shift, so that when we shrink the ARC, + * we will still not allow it to grow. + */ +int arc_no_grow_shift = 5; + + +/* + * minimum lifespan of a prefetch block in clock ticks + * (initialized in arc_init()) + */ +static int arc_min_prefetch_lifespan; + +/* + * If this percent of memory is free, don't throttle. + */ +int arc_lotsfree_percent = 10; + +static int arc_dead; + +/* + * The arc has filled available memory and has now warmed up. + */ +static boolean_t arc_warm; + +/* + * log2 fraction of the zio arena to keep free. + */ +int arc_zio_arena_free_shift = 2; + +/* + * These tunables are for performance analysis. + */ +unsigned long zfs_arc_max = 0; +unsigned long zfs_arc_min = 0; +unsigned long zfs_arc_meta_limit = 0; +unsigned long zfs_arc_meta_min = 0; +unsigned long zfs_arc_dnode_limit = 0; +unsigned long zfs_arc_dnode_reduce_percent = 10; +int zfs_arc_grow_retry = 0; +int zfs_arc_shrink_shift = 0; +int zfs_arc_p_min_shift = 0; +int zfs_arc_average_blocksize = 8 * 1024; /* 8KB */ + +int zfs_compressed_arc_enabled = B_TRUE; + +/* + * ARC will evict meta buffers that exceed arc_meta_limit. This + * tunable make arc_meta_limit adjustable for different workloads. + */ +unsigned long zfs_arc_meta_limit_percent = 75; + +/* + * Percentage that can be consumed by dnodes of ARC meta buffers. + */ +unsigned long zfs_arc_dnode_limit_percent = 10; + +/* + * These tunables are Linux specific + */ +unsigned long zfs_arc_sys_free = 0; +int zfs_arc_min_prefetch_lifespan = 0; +int zfs_arc_p_aggressive_disable = 1; +int zfs_arc_p_dampener_disable = 1; +int zfs_arc_meta_prune = 10000; +int zfs_arc_meta_strategy = ARC_STRATEGY_META_BALANCED; +int zfs_arc_meta_adjust_restarts = 4096; +int zfs_arc_lotsfree_percent = 10; + +/* The 6 states: */ +static arc_state_t ARC_anon; +static arc_state_t ARC_mru; +static arc_state_t ARC_mru_ghost; +static arc_state_t ARC_mfu; +static arc_state_t ARC_mfu_ghost; +static arc_state_t ARC_l2c_only; + +typedef struct arc_stats { + kstat_named_t arcstat_hits; + kstat_named_t arcstat_misses; + kstat_named_t arcstat_demand_data_hits; + kstat_named_t arcstat_demand_data_misses; + kstat_named_t arcstat_demand_metadata_hits; + kstat_named_t arcstat_demand_metadata_misses; + kstat_named_t arcstat_prefetch_data_hits; + kstat_named_t arcstat_prefetch_data_misses; + kstat_named_t arcstat_prefetch_metadata_hits; + kstat_named_t arcstat_prefetch_metadata_misses; + kstat_named_t arcstat_mru_hits; + kstat_named_t arcstat_mru_ghost_hits; + kstat_named_t arcstat_mfu_hits; + kstat_named_t arcstat_mfu_ghost_hits; + kstat_named_t arcstat_deleted; + /* + * Number of buffers that could not be evicted because the hash lock + * was held by another thread. The lock may not necessarily be held + * by something using the same buffer, since hash locks are shared + * by multiple buffers. + */ + kstat_named_t arcstat_mutex_miss; + /* + * Number of buffers skipped because they have I/O in progress, are + * indrect prefetch buffers that have not lived long enough, or are + * not from the spa we're trying to evict from. + */ + kstat_named_t arcstat_evict_skip; + /* + * Number of times arc_evict_state() was unable to evict enough + * buffers to reach its target amount. + */ + kstat_named_t arcstat_evict_not_enough; + kstat_named_t arcstat_evict_l2_cached; + kstat_named_t arcstat_evict_l2_eligible; + kstat_named_t arcstat_evict_l2_ineligible; + kstat_named_t arcstat_evict_l2_skip; + kstat_named_t arcstat_hash_elements; + kstat_named_t arcstat_hash_elements_max; + kstat_named_t arcstat_hash_collisions; + kstat_named_t arcstat_hash_chains; + kstat_named_t arcstat_hash_chain_max; + kstat_named_t arcstat_p; + kstat_named_t arcstat_c; + kstat_named_t arcstat_c_min; + kstat_named_t arcstat_c_max; + kstat_named_t arcstat_size; + /* + * Number of compressed bytes stored in the arc_buf_hdr_t's b_pabd. + * Note that the compressed bytes may match the uncompressed bytes + * if the block is either not compressed or compressed arc is disabled. + */ + kstat_named_t arcstat_compressed_size; + /* + * Uncompressed size of the data stored in b_pabd. If compressed + * arc is disabled then this value will be identical to the stat + * above. + */ + kstat_named_t arcstat_uncompressed_size; + /* + * Number of bytes stored in all the arc_buf_t's. This is classified + * as "overhead" since this data is typically short-lived and will + * be evicted from the arc when it becomes unreferenced unless the + * zfs_keep_uncompressed_metadata or zfs_keep_uncompressed_level + * values have been set (see comment in dbuf.c for more information). + */ + kstat_named_t arcstat_overhead_size; + /* + * Number of bytes consumed by internal ARC structures necessary + * for tracking purposes; these structures are not actually + * backed by ARC buffers. This includes arc_buf_hdr_t structures + * (allocated via arc_buf_hdr_t_full and arc_buf_hdr_t_l2only + * caches), and arc_buf_t structures (allocated via arc_buf_t + * cache). + */ + kstat_named_t arcstat_hdr_size; + /* + * Number of bytes consumed by ARC buffers of type equal to + * ARC_BUFC_DATA. This is generally consumed by buffers backing + * on disk user data (e.g. plain file contents). + */ + kstat_named_t arcstat_data_size; + /* + * Number of bytes consumed by ARC buffers of type equal to + * ARC_BUFC_METADATA. This is generally consumed by buffers + * backing on disk data that is used for internal ZFS + * structures (e.g. ZAP, dnode, indirect blocks, etc). + */ + kstat_named_t arcstat_metadata_size; + /* + * Number of bytes consumed by dmu_buf_impl_t objects. + */ + kstat_named_t arcstat_dbuf_size; + /* + * Number of bytes consumed by dnode_t objects. + */ + kstat_named_t arcstat_dnode_size; + /* + * Number of bytes consumed by bonus buffers. + */ + kstat_named_t arcstat_bonus_size; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_anon state. This includes *all* buffers in the arc_anon + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_anon_size; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_DATA, + * residing in the arc_anon state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_anon_evictable_data; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_METADATA, + * residing in the arc_anon state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_anon_evictable_metadata; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_mru state. This includes *all* buffers in the arc_mru + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_mru_size; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_DATA, + * residing in the arc_mru state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_mru_evictable_data; + /* + * Number of bytes consumed by ARC buffers that meet the + * following criteria: backing buffers of type ARC_BUFC_METADATA, + * residing in the arc_mru state, and are eligible for eviction + * (e.g. have no outstanding holds on the buffer). + */ + kstat_named_t arcstat_mru_evictable_metadata; + /* + * Total number of bytes that *would have been* consumed by ARC + * buffers in the arc_mru_ghost state. The key thing to note + * here, is the fact that this size doesn't actually indicate + * RAM consumption. The ghost lists only consist of headers and + * don't actually have ARC buffers linked off of these headers. + * Thus, *if* the headers had associated ARC buffers, these + * buffers *would have* consumed this number of bytes. + */ + kstat_named_t arcstat_mru_ghost_size; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_DATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mru_ghost_evictable_data; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mru_ghost_evictable_metadata; + /* + * Total number of bytes consumed by ARC buffers residing in the + * arc_mfu state. This includes *all* buffers in the arc_mfu + * state; e.g. data, metadata, evictable, and unevictable buffers + * are all included in this value. + */ + kstat_named_t arcstat_mfu_size; + /* + * Number of bytes consumed by ARC buffers that are eligible for + * eviction, of type ARC_BUFC_DATA, and reside in the arc_mfu + * state. + */ + kstat_named_t arcstat_mfu_evictable_data; + /* + * Number of bytes consumed by ARC buffers that are eligible for + * eviction, of type ARC_BUFC_METADATA, and reside in the + * arc_mfu state. + */ + kstat_named_t arcstat_mfu_evictable_metadata; + /* + * Total number of bytes that *would have been* consumed by ARC + * buffers in the arc_mfu_ghost state. See the comment above + * arcstat_mru_ghost_size for more details. + */ + kstat_named_t arcstat_mfu_ghost_size; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_DATA, and linked off the arc_mfu_ghost state. + */ + kstat_named_t arcstat_mfu_ghost_evictable_data; + /* + * Number of bytes that *would have been* consumed by ARC + * buffers that are eligible for eviction, of type + * ARC_BUFC_METADATA, and linked off the arc_mru_ghost state. + */ + kstat_named_t arcstat_mfu_ghost_evictable_metadata; + kstat_named_t arcstat_l2_hits; + kstat_named_t arcstat_l2_misses; + kstat_named_t arcstat_l2_feeds; + kstat_named_t arcstat_l2_rw_clash; + kstat_named_t arcstat_l2_read_bytes; + kstat_named_t arcstat_l2_write_bytes; + kstat_named_t arcstat_l2_writes_sent; + kstat_named_t arcstat_l2_writes_done; + kstat_named_t arcstat_l2_writes_error; + kstat_named_t arcstat_l2_writes_lock_retry; + kstat_named_t arcstat_l2_evict_lock_retry; + kstat_named_t arcstat_l2_evict_reading; + kstat_named_t arcstat_l2_evict_l1cached; + kstat_named_t arcstat_l2_free_on_write; + kstat_named_t arcstat_l2_abort_lowmem; + kstat_named_t arcstat_l2_cksum_bad; + kstat_named_t arcstat_l2_io_error; + kstat_named_t arcstat_l2_lsize; + kstat_named_t arcstat_l2_psize; + kstat_named_t arcstat_l2_hdr_size; + kstat_named_t arcstat_memory_throttle_count; + kstat_named_t arcstat_memory_direct_count; + kstat_named_t arcstat_memory_indirect_count; + kstat_named_t arcstat_memory_all_bytes; + kstat_named_t arcstat_memory_free_bytes; + kstat_named_t arcstat_memory_available_bytes; + kstat_named_t arcstat_no_grow; + kstat_named_t arcstat_tempreserve; + kstat_named_t arcstat_loaned_bytes; + kstat_named_t arcstat_prune; + kstat_named_t arcstat_meta_used; + kstat_named_t arcstat_meta_limit; + kstat_named_t arcstat_dnode_limit; + kstat_named_t arcstat_meta_max; + kstat_named_t arcstat_meta_min; + kstat_named_t arcstat_sync_wait_for_async; + kstat_named_t arcstat_demand_hit_predictive_prefetch; + kstat_named_t arcstat_need_free; + kstat_named_t arcstat_sys_free; +} arc_stats_t; + +static arc_stats_t arc_stats = { + { "hits", KSTAT_DATA_UINT64 }, + { "misses", KSTAT_DATA_UINT64 }, + { "demand_data_hits", KSTAT_DATA_UINT64 }, + { "demand_data_misses", KSTAT_DATA_UINT64 }, + { "demand_metadata_hits", KSTAT_DATA_UINT64 }, + { "demand_metadata_misses", KSTAT_DATA_UINT64 }, + { "prefetch_data_hits", KSTAT_DATA_UINT64 }, + { "prefetch_data_misses", KSTAT_DATA_UINT64 }, + { "prefetch_metadata_hits", KSTAT_DATA_UINT64 }, + { "prefetch_metadata_misses", KSTAT_DATA_UINT64 }, + { "mru_hits", KSTAT_DATA_UINT64 }, + { "mru_ghost_hits", KSTAT_DATA_UINT64 }, + { "mfu_hits", KSTAT_DATA_UINT64 }, + { "mfu_ghost_hits", KSTAT_DATA_UINT64 }, + { "deleted", KSTAT_DATA_UINT64 }, + { "mutex_miss", KSTAT_DATA_UINT64 }, + { "evict_skip", KSTAT_DATA_UINT64 }, + { "evict_not_enough", KSTAT_DATA_UINT64 }, + { "evict_l2_cached", KSTAT_DATA_UINT64 }, + { "evict_l2_eligible", KSTAT_DATA_UINT64 }, + { "evict_l2_ineligible", KSTAT_DATA_UINT64 }, + { "evict_l2_skip", KSTAT_DATA_UINT64 }, + { "hash_elements", KSTAT_DATA_UINT64 }, + { "hash_elements_max", KSTAT_DATA_UINT64 }, + { "hash_collisions", KSTAT_DATA_UINT64 }, + { "hash_chains", KSTAT_DATA_UINT64 }, + { "hash_chain_max", KSTAT_DATA_UINT64 }, + { "p", KSTAT_DATA_UINT64 }, + { "c", KSTAT_DATA_UINT64 }, + { "c_min", KSTAT_DATA_UINT64 }, + { "c_max", KSTAT_DATA_UINT64 }, + { "size", KSTAT_DATA_UINT64 }, + { "compressed_size", KSTAT_DATA_UINT64 }, + { "uncompressed_size", KSTAT_DATA_UINT64 }, + { "overhead_size", KSTAT_DATA_UINT64 }, + { "hdr_size", KSTAT_DATA_UINT64 }, + { "data_size", KSTAT_DATA_UINT64 }, + { "metadata_size", KSTAT_DATA_UINT64 }, + { "dbuf_size", KSTAT_DATA_UINT64 }, + { "dnode_size", KSTAT_DATA_UINT64 }, + { "bonus_size", KSTAT_DATA_UINT64 }, + { "anon_size", KSTAT_DATA_UINT64 }, + { "anon_evictable_data", KSTAT_DATA_UINT64 }, + { "anon_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mru_size", KSTAT_DATA_UINT64 }, + { "mru_evictable_data", KSTAT_DATA_UINT64 }, + { "mru_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mru_ghost_size", KSTAT_DATA_UINT64 }, + { "mru_ghost_evictable_data", KSTAT_DATA_UINT64 }, + { "mru_ghost_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mfu_size", KSTAT_DATA_UINT64 }, + { "mfu_evictable_data", KSTAT_DATA_UINT64 }, + { "mfu_evictable_metadata", KSTAT_DATA_UINT64 }, + { "mfu_ghost_size", KSTAT_DATA_UINT64 }, + { "mfu_ghost_evictable_data", KSTAT_DATA_UINT64 }, + { "mfu_ghost_evictable_metadata", KSTAT_DATA_UINT64 }, + { "l2_hits", KSTAT_DATA_UINT64 }, + { "l2_misses", KSTAT_DATA_UINT64 }, + { "l2_feeds", KSTAT_DATA_UINT64 }, + { "l2_rw_clash", KSTAT_DATA_UINT64 }, + { "l2_read_bytes", KSTAT_DATA_UINT64 }, + { "l2_write_bytes", KSTAT_DATA_UINT64 }, + { "l2_writes_sent", KSTAT_DATA_UINT64 }, + { "l2_writes_done", KSTAT_DATA_UINT64 }, + { "l2_writes_error", KSTAT_DATA_UINT64 }, + { "l2_writes_lock_retry", KSTAT_DATA_UINT64 }, + { "l2_evict_lock_retry", KSTAT_DATA_UINT64 }, + { "l2_evict_reading", KSTAT_DATA_UINT64 }, + { "l2_evict_l1cached", KSTAT_DATA_UINT64 }, + { "l2_free_on_write", KSTAT_DATA_UINT64 }, + { "l2_abort_lowmem", KSTAT_DATA_UINT64 }, + { "l2_cksum_bad", KSTAT_DATA_UINT64 }, + { "l2_io_error", KSTAT_DATA_UINT64 }, + { "l2_size", KSTAT_DATA_UINT64 }, + { "l2_asize", KSTAT_DATA_UINT64 }, + { "l2_hdr_size", KSTAT_DATA_UINT64 }, + { "memory_throttle_count", KSTAT_DATA_UINT64 }, + { "memory_direct_count", KSTAT_DATA_UINT64 }, + { "memory_indirect_count", KSTAT_DATA_UINT64 }, + { "memory_all_bytes", KSTAT_DATA_UINT64 }, + { "memory_free_bytes", KSTAT_DATA_UINT64 }, + { "memory_available_bytes", KSTAT_DATA_INT64 }, + { "arc_no_grow", KSTAT_DATA_UINT64 }, + { "arc_tempreserve", KSTAT_DATA_UINT64 }, + { "arc_loaned_bytes", KSTAT_DATA_UINT64 }, + { "arc_prune", KSTAT_DATA_UINT64 }, + { "arc_meta_used", KSTAT_DATA_UINT64 }, + { "arc_meta_limit", KSTAT_DATA_UINT64 }, + { "arc_dnode_limit", KSTAT_DATA_UINT64 }, + { "arc_meta_max", KSTAT_DATA_UINT64 }, + { "arc_meta_min", KSTAT_DATA_UINT64 }, + { "sync_wait_for_async", KSTAT_DATA_UINT64 }, + { "demand_hit_predictive_prefetch", KSTAT_DATA_UINT64 }, + { "arc_need_free", KSTAT_DATA_UINT64 }, + { "arc_sys_free", KSTAT_DATA_UINT64 } +}; + +#define ARCSTAT(stat) (arc_stats.stat.value.ui64) + +#define ARCSTAT_INCR(stat, val) \ + atomic_add_64(&arc_stats.stat.value.ui64, (val)) + +#define ARCSTAT_BUMP(stat) ARCSTAT_INCR(stat, 1) +#define ARCSTAT_BUMPDOWN(stat) ARCSTAT_INCR(stat, -1) + +#define ARCSTAT_MAX(stat, val) { \ + uint64_t m; \ + while ((val) > (m = arc_stats.stat.value.ui64) && \ + (m != atomic_cas_64(&arc_stats.stat.value.ui64, m, (val)))) \ + continue; \ +} + +#define ARCSTAT_MAXSTAT(stat) \ + ARCSTAT_MAX(stat##_max, arc_stats.stat.value.ui64) + +/* + * We define a macro to allow ARC hits/misses to be easily broken down by + * two separate conditions, giving a total of four different subtypes for + * each of hits and misses (so eight statistics total). + */ +#define ARCSTAT_CONDSTAT(cond1, stat1, notstat1, cond2, stat2, notstat2, stat) \ + if (cond1) { \ + if (cond2) { \ + ARCSTAT_BUMP(arcstat_##stat1##_##stat2##_##stat); \ + } else { \ + ARCSTAT_BUMP(arcstat_##stat1##_##notstat2##_##stat); \ + } \ + } else { \ + if (cond2) { \ + ARCSTAT_BUMP(arcstat_##notstat1##_##stat2##_##stat); \ + } else { \ + ARCSTAT_BUMP(arcstat_##notstat1##_##notstat2##_##stat);\ + } \ + } + +kstat_t *arc_ksp; +static arc_state_t *arc_anon; +static arc_state_t *arc_mru; +static arc_state_t *arc_mru_ghost; +static arc_state_t *arc_mfu; +static arc_state_t *arc_mfu_ghost; +static arc_state_t *arc_l2c_only; + +/* + * There are several ARC variables that are critical to export as kstats -- + * but we don't want to have to grovel around in the kstat whenever we wish to + * manipulate them. For these variables, we therefore define them to be in + * terms of the statistic variable. This assures that we are not introducing + * the possibility of inconsistency by having shadow copies of the variables, + * while still allowing the code to be readable. + */ +#define arc_size ARCSTAT(arcstat_size) /* actual total arc size */ +#define arc_p ARCSTAT(arcstat_p) /* target size of MRU */ +#define arc_c ARCSTAT(arcstat_c) /* target size of cache */ +#define arc_c_min ARCSTAT(arcstat_c_min) /* min target cache size */ +#define arc_c_max ARCSTAT(arcstat_c_max) /* max target cache size */ +#define arc_no_grow ARCSTAT(arcstat_no_grow) /* do not grow cache size */ +#define arc_tempreserve ARCSTAT(arcstat_tempreserve) +#define arc_loaned_bytes ARCSTAT(arcstat_loaned_bytes) +#define arc_meta_limit ARCSTAT(arcstat_meta_limit) /* max size for metadata */ +#define arc_dnode_limit ARCSTAT(arcstat_dnode_limit) /* max size for dnodes */ +#define arc_meta_min ARCSTAT(arcstat_meta_min) /* min size for metadata */ +#define arc_meta_used ARCSTAT(arcstat_meta_used) /* size of metadata */ +#define arc_meta_max ARCSTAT(arcstat_meta_max) /* max size of metadata */ +#define arc_dbuf_size ARCSTAT(arcstat_dbuf_size) /* dbuf metadata */ +#define arc_dnode_size ARCSTAT(arcstat_dnode_size) /* dnode metadata */ +#define arc_bonus_size ARCSTAT(arcstat_bonus_size) /* bonus buffer metadata */ +#define arc_need_free ARCSTAT(arcstat_need_free) /* bytes to be freed */ +#define arc_sys_free ARCSTAT(arcstat_sys_free) /* target system free bytes */ + +/* compressed size of entire arc */ +#define arc_compressed_size ARCSTAT(arcstat_compressed_size) +/* uncompressed size of entire arc */ +#define arc_uncompressed_size ARCSTAT(arcstat_uncompressed_size) +/* number of bytes in the arc from arc_buf_t's */ +#define arc_overhead_size ARCSTAT(arcstat_overhead_size) + +static list_t arc_prune_list; +static kmutex_t arc_prune_mtx; +static taskq_t *arc_prune_taskq; + +#define GHOST_STATE(state) \ + ((state) == arc_mru_ghost || (state) == arc_mfu_ghost || \ + (state) == arc_l2c_only) + +#define HDR_IN_HASH_TABLE(hdr) ((hdr)->b_flags & ARC_FLAG_IN_HASH_TABLE) +#define HDR_IO_IN_PROGRESS(hdr) ((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS) +#define HDR_IO_ERROR(hdr) ((hdr)->b_flags & ARC_FLAG_IO_ERROR) +#define HDR_PREFETCH(hdr) ((hdr)->b_flags & ARC_FLAG_PREFETCH) +#define HDR_COMPRESSION_ENABLED(hdr) \ + ((hdr)->b_flags & ARC_FLAG_COMPRESSED_ARC) + +#define HDR_L2CACHE(hdr) ((hdr)->b_flags & ARC_FLAG_L2CACHE) +#define HDR_L2_READING(hdr) \ + (((hdr)->b_flags & ARC_FLAG_IO_IN_PROGRESS) && \ + ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR)) +#define HDR_L2_WRITING(hdr) ((hdr)->b_flags & ARC_FLAG_L2_WRITING) +#define HDR_L2_EVICTED(hdr) ((hdr)->b_flags & ARC_FLAG_L2_EVICTED) +#define HDR_L2_WRITE_HEAD(hdr) ((hdr)->b_flags & ARC_FLAG_L2_WRITE_HEAD) +#define HDR_SHARED_DATA(hdr) ((hdr)->b_flags & ARC_FLAG_SHARED_DATA) + +#define HDR_ISTYPE_METADATA(hdr) \ + ((hdr)->b_flags & ARC_FLAG_BUFC_METADATA) +#define HDR_ISTYPE_DATA(hdr) (!HDR_ISTYPE_METADATA(hdr)) + +#define HDR_HAS_L1HDR(hdr) ((hdr)->b_flags & ARC_FLAG_HAS_L1HDR) +#define HDR_HAS_L2HDR(hdr) ((hdr)->b_flags & ARC_FLAG_HAS_L2HDR) + +/* For storing compression mode in b_flags */ +#define HDR_COMPRESS_OFFSET (highbit64(ARC_FLAG_COMPRESS_0) - 1) + +#define HDR_GET_COMPRESS(hdr) ((enum zio_compress)BF32_GET((hdr)->b_flags, \ + HDR_COMPRESS_OFFSET, SPA_COMPRESSBITS)) +#define HDR_SET_COMPRESS(hdr, cmp) BF32_SET((hdr)->b_flags, \ + HDR_COMPRESS_OFFSET, SPA_COMPRESSBITS, (cmp)); + +#define ARC_BUF_LAST(buf) ((buf)->b_next == NULL) +#define ARC_BUF_SHARED(buf) ((buf)->b_flags & ARC_BUF_FLAG_SHARED) +#define ARC_BUF_COMPRESSED(buf) ((buf)->b_flags & ARC_BUF_FLAG_COMPRESSED) + +/* + * Other sizes + */ + +#define HDR_FULL_SIZE ((int64_t)sizeof (arc_buf_hdr_t)) +#define HDR_L2ONLY_SIZE ((int64_t)offsetof(arc_buf_hdr_t, b_l1hdr)) + +/* + * Hash table routines + */ + +#define HT_LOCK_ALIGN 64 +#define HT_LOCK_PAD (P2NPHASE(sizeof (kmutex_t), (HT_LOCK_ALIGN))) + +struct ht_lock { + kmutex_t ht_lock; +#ifdef _KERNEL + unsigned char pad[HT_LOCK_PAD]; +#endif +}; + +#define BUF_LOCKS 8192 +typedef struct buf_hash_table { + uint64_t ht_mask; + arc_buf_hdr_t **ht_table; + struct ht_lock ht_locks[BUF_LOCKS]; +} buf_hash_table_t; + +static buf_hash_table_t buf_hash_table; + +#define BUF_HASH_INDEX(spa, dva, birth) \ + (buf_hash(spa, dva, birth) & buf_hash_table.ht_mask) +#define BUF_HASH_LOCK_NTRY(idx) (buf_hash_table.ht_locks[idx & (BUF_LOCKS-1)]) +#define BUF_HASH_LOCK(idx) (&(BUF_HASH_LOCK_NTRY(idx).ht_lock)) +#define HDR_LOCK(hdr) \ + (BUF_HASH_LOCK(BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth))) + +uint64_t zfs_crc64_table[256]; + +/* + * Level 2 ARC + */ + +#define L2ARC_WRITE_SIZE (8 * 1024 * 1024) /* initial write max */ +#define L2ARC_HEADROOM 2 /* num of writes */ + +/* + * If we discover during ARC scan any buffers to be compressed, we boost + * our headroom for the next scanning cycle by this percentage multiple. + */ +#define L2ARC_HEADROOM_BOOST 200 +#define L2ARC_FEED_SECS 1 /* caching interval secs */ +#define L2ARC_FEED_MIN_MS 200 /* min caching interval ms */ + +/* + * We can feed L2ARC from two states of ARC buffers, mru and mfu, + * and each of the state has two types: data and metadata. + */ +#define L2ARC_FEED_TYPES 4 + +#define l2arc_writes_sent ARCSTAT(arcstat_l2_writes_sent) +#define l2arc_writes_done ARCSTAT(arcstat_l2_writes_done) + +/* L2ARC Performance Tunables */ +unsigned long l2arc_write_max = L2ARC_WRITE_SIZE; /* def max write size */ +unsigned long l2arc_write_boost = L2ARC_WRITE_SIZE; /* extra warmup write */ +unsigned long l2arc_headroom = L2ARC_HEADROOM; /* # of dev writes */ +unsigned long l2arc_headroom_boost = L2ARC_HEADROOM_BOOST; +unsigned long l2arc_feed_secs = L2ARC_FEED_SECS; /* interval seconds */ +unsigned long l2arc_feed_min_ms = L2ARC_FEED_MIN_MS; /* min interval msecs */ +int l2arc_noprefetch = B_TRUE; /* don't cache prefetch bufs */ +int l2arc_feed_again = B_TRUE; /* turbo warmup */ +int l2arc_norw = B_FALSE; /* no reads during writes */ + +/* + * L2ARC Internals + */ +static list_t L2ARC_dev_list; /* device list */ +static list_t *l2arc_dev_list; /* device list pointer */ +static kmutex_t l2arc_dev_mtx; /* device list mutex */ +static l2arc_dev_t *l2arc_dev_last; /* last device used */ +static list_t L2ARC_free_on_write; /* free after write buf list */ +static list_t *l2arc_free_on_write; /* free after write list ptr */ +static kmutex_t l2arc_free_on_write_mtx; /* mutex for list */ +static uint64_t l2arc_ndev; /* number of devices */ + +typedef struct l2arc_read_callback { + arc_buf_hdr_t *l2rcb_hdr; /* read header */ + blkptr_t l2rcb_bp; /* original blkptr */ + zbookmark_phys_t l2rcb_zb; /* original bookmark */ + int l2rcb_flags; /* original flags */ + abd_t *l2rcb_abd; /* temporary buffer */ +} l2arc_read_callback_t; + +typedef struct l2arc_data_free { + /* protected by l2arc_free_on_write_mtx */ + abd_t *l2df_abd; + size_t l2df_size; + arc_buf_contents_t l2df_type; + list_node_t l2df_list_node; +} l2arc_data_free_t; + +static kmutex_t l2arc_feed_thr_lock; +static kcondvar_t l2arc_feed_thr_cv; +static uint8_t l2arc_thread_exit; + +static abd_t *arc_get_data_abd(arc_buf_hdr_t *, uint64_t, void *); +static void *arc_get_data_buf(arc_buf_hdr_t *, uint64_t, void *); +static void arc_get_data_impl(arc_buf_hdr_t *, uint64_t, void *); +static void arc_free_data_abd(arc_buf_hdr_t *, abd_t *, uint64_t, void *); +static void arc_free_data_buf(arc_buf_hdr_t *, void *, uint64_t, void *); +static void arc_free_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag); +static void arc_hdr_free_pabd(arc_buf_hdr_t *); +static void arc_hdr_alloc_pabd(arc_buf_hdr_t *); +static void arc_access(arc_buf_hdr_t *, kmutex_t *); +static boolean_t arc_is_overflowing(void); +static void arc_buf_watch(arc_buf_t *); +static void arc_tuning_update(void); +static void arc_prune_async(int64_t); +static uint64_t arc_all_memory(void); + +static arc_buf_contents_t arc_buf_type(arc_buf_hdr_t *); +static uint32_t arc_bufc_to_flags(arc_buf_contents_t); +static inline void arc_hdr_set_flags(arc_buf_hdr_t *hdr, arc_flags_t flags); +static inline void arc_hdr_clear_flags(arc_buf_hdr_t *hdr, arc_flags_t flags); + +static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *); +static void l2arc_read_done(zio_t *); + +static uint64_t +buf_hash(uint64_t spa, const dva_t *dva, uint64_t birth) +{ + uint8_t *vdva = (uint8_t *)dva; + uint64_t crc = -1ULL; + int i; + + ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY); + + for (i = 0; i < sizeof (dva_t); i++) + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ vdva[i]) & 0xFF]; + + crc ^= (spa>>8) ^ birth; + + return (crc); +} + +#define HDR_EMPTY(hdr) \ + ((hdr)->b_dva.dva_word[0] == 0 && \ + (hdr)->b_dva.dva_word[1] == 0) + +#define HDR_EQUAL(spa, dva, birth, hdr) \ + ((hdr)->b_dva.dva_word[0] == (dva)->dva_word[0]) && \ + ((hdr)->b_dva.dva_word[1] == (dva)->dva_word[1]) && \ + ((hdr)->b_birth == birth) && ((hdr)->b_spa == spa) + +static void +buf_discard_identity(arc_buf_hdr_t *hdr) +{ + hdr->b_dva.dva_word[0] = 0; + hdr->b_dva.dva_word[1] = 0; + hdr->b_birth = 0; +} + +static arc_buf_hdr_t * +buf_hash_find(uint64_t spa, const blkptr_t *bp, kmutex_t **lockp) +{ + const dva_t *dva = BP_IDENTITY(bp); + uint64_t birth = BP_PHYSICAL_BIRTH(bp); + uint64_t idx = BUF_HASH_INDEX(spa, dva, birth); + kmutex_t *hash_lock = BUF_HASH_LOCK(idx); + arc_buf_hdr_t *hdr; + + mutex_enter(hash_lock); + for (hdr = buf_hash_table.ht_table[idx]; hdr != NULL; + hdr = hdr->b_hash_next) { + if (HDR_EQUAL(spa, dva, birth, hdr)) { + *lockp = hash_lock; + return (hdr); + } + } + mutex_exit(hash_lock); + *lockp = NULL; + return (NULL); +} + +/* + * Insert an entry into the hash table. If there is already an element + * equal to elem in the hash table, then the already existing element + * will be returned and the new element will not be inserted. + * Otherwise returns NULL. + * If lockp == NULL, the caller is assumed to already hold the hash lock. + */ +static arc_buf_hdr_t * +buf_hash_insert(arc_buf_hdr_t *hdr, kmutex_t **lockp) +{ + uint64_t idx = BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth); + kmutex_t *hash_lock = BUF_HASH_LOCK(idx); + arc_buf_hdr_t *fhdr; + uint32_t i; + + ASSERT(!DVA_IS_EMPTY(&hdr->b_dva)); + ASSERT(hdr->b_birth != 0); + ASSERT(!HDR_IN_HASH_TABLE(hdr)); + + if (lockp != NULL) { + *lockp = hash_lock; + mutex_enter(hash_lock); + } else { + ASSERT(MUTEX_HELD(hash_lock)); + } + + for (fhdr = buf_hash_table.ht_table[idx], i = 0; fhdr != NULL; + fhdr = fhdr->b_hash_next, i++) { + if (HDR_EQUAL(hdr->b_spa, &hdr->b_dva, hdr->b_birth, fhdr)) + return (fhdr); + } + + hdr->b_hash_next = buf_hash_table.ht_table[idx]; + buf_hash_table.ht_table[idx] = hdr; + arc_hdr_set_flags(hdr, ARC_FLAG_IN_HASH_TABLE); + + /* collect some hash table performance data */ + if (i > 0) { + ARCSTAT_BUMP(arcstat_hash_collisions); + if (i == 1) + ARCSTAT_BUMP(arcstat_hash_chains); + + ARCSTAT_MAX(arcstat_hash_chain_max, i); + } + + ARCSTAT_BUMP(arcstat_hash_elements); + ARCSTAT_MAXSTAT(arcstat_hash_elements); + + return (NULL); +} + +static void +buf_hash_remove(arc_buf_hdr_t *hdr) +{ + arc_buf_hdr_t *fhdr, **hdrp; + uint64_t idx = BUF_HASH_INDEX(hdr->b_spa, &hdr->b_dva, hdr->b_birth); + + ASSERT(MUTEX_HELD(BUF_HASH_LOCK(idx))); + ASSERT(HDR_IN_HASH_TABLE(hdr)); + + hdrp = &buf_hash_table.ht_table[idx]; + while ((fhdr = *hdrp) != hdr) { + ASSERT3P(fhdr, !=, NULL); + hdrp = &fhdr->b_hash_next; + } + *hdrp = hdr->b_hash_next; + hdr->b_hash_next = NULL; + arc_hdr_clear_flags(hdr, ARC_FLAG_IN_HASH_TABLE); + + /* collect some hash table performance data */ + ARCSTAT_BUMPDOWN(arcstat_hash_elements); + + if (buf_hash_table.ht_table[idx] && + buf_hash_table.ht_table[idx]->b_hash_next == NULL) + ARCSTAT_BUMPDOWN(arcstat_hash_chains); +} + +/* + * Global data structures and functions for the buf kmem cache. + */ +static kmem_cache_t *hdr_full_cache; +static kmem_cache_t *hdr_l2only_cache; +static kmem_cache_t *buf_cache; + +static void +buf_fini(void) +{ + int i; + +#if defined(_KERNEL) && defined(HAVE_SPL) + /* + * Large allocations which do not require contiguous pages + * should be using vmem_free() in the linux kernel\ + */ + vmem_free(buf_hash_table.ht_table, + (buf_hash_table.ht_mask + 1) * sizeof (void *)); +#else + kmem_free(buf_hash_table.ht_table, + (buf_hash_table.ht_mask + 1) * sizeof (void *)); +#endif + for (i = 0; i < BUF_LOCKS; i++) + mutex_destroy(&buf_hash_table.ht_locks[i].ht_lock); + kmem_cache_destroy(hdr_full_cache); + kmem_cache_destroy(hdr_l2only_cache); + kmem_cache_destroy(buf_cache); +} + +/* + * Constructor callback - called when the cache is empty + * and a new buf is requested. + */ +/* ARGSUSED */ +static int +hdr_full_cons(void *vbuf, void *unused, int kmflag) +{ + arc_buf_hdr_t *hdr = vbuf; + + bzero(hdr, HDR_FULL_SIZE); + cv_init(&hdr->b_l1hdr.b_cv, NULL, CV_DEFAULT, NULL); + refcount_create(&hdr->b_l1hdr.b_refcnt); + mutex_init(&hdr->b_l1hdr.b_freeze_lock, NULL, MUTEX_DEFAULT, NULL); + list_link_init(&hdr->b_l1hdr.b_arc_node); + list_link_init(&hdr->b_l2hdr.b_l2node); + multilist_link_init(&hdr->b_l1hdr.b_arc_node); + arc_space_consume(HDR_FULL_SIZE, ARC_SPACE_HDRS); + + return (0); +} + +/* ARGSUSED */ +static int +hdr_l2only_cons(void *vbuf, void *unused, int kmflag) +{ + arc_buf_hdr_t *hdr = vbuf; + + bzero(hdr, HDR_L2ONLY_SIZE); + arc_space_consume(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS); + + return (0); +} + +/* ARGSUSED */ +static int +buf_cons(void *vbuf, void *unused, int kmflag) +{ + arc_buf_t *buf = vbuf; + + bzero(buf, sizeof (arc_buf_t)); + mutex_init(&buf->b_evict_lock, NULL, MUTEX_DEFAULT, NULL); + arc_space_consume(sizeof (arc_buf_t), ARC_SPACE_HDRS); + + return (0); +} + +/* + * Destructor callback - called when a cached buf is + * no longer required. + */ +/* ARGSUSED */ +static void +hdr_full_dest(void *vbuf, void *unused) +{ + arc_buf_hdr_t *hdr = vbuf; + + ASSERT(HDR_EMPTY(hdr)); + cv_destroy(&hdr->b_l1hdr.b_cv); + refcount_destroy(&hdr->b_l1hdr.b_refcnt); + mutex_destroy(&hdr->b_l1hdr.b_freeze_lock); + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + arc_space_return(HDR_FULL_SIZE, ARC_SPACE_HDRS); +} + +/* ARGSUSED */ +static void +hdr_l2only_dest(void *vbuf, void *unused) +{ + ASSERTV(arc_buf_hdr_t *hdr = vbuf); + + ASSERT(HDR_EMPTY(hdr)); + arc_space_return(HDR_L2ONLY_SIZE, ARC_SPACE_L2HDRS); +} + +/* ARGSUSED */ +static void +buf_dest(void *vbuf, void *unused) +{ + arc_buf_t *buf = vbuf; + + mutex_destroy(&buf->b_evict_lock); + arc_space_return(sizeof (arc_buf_t), ARC_SPACE_HDRS); +} + +/* + * Reclaim callback -- invoked when memory is low. + */ +/* ARGSUSED */ +static void +hdr_recl(void *unused) +{ + dprintf("hdr_recl called\n"); + /* + * umem calls the reclaim func when we destroy the buf cache, + * which is after we do arc_fini(). + */ + if (!arc_dead) + cv_signal(&arc_reclaim_thread_cv); +} + +static void +buf_init(void) +{ + uint64_t *ct = NULL; + uint64_t hsize = 1ULL << 12; + int i, j; + + /* + * The hash table is big enough to fill all of physical memory + * with an average block size of zfs_arc_average_blocksize (default 8K). + * By default, the table will take up + * totalmem * sizeof(void*) / 8K (1MB per GB with 8-byte pointers). + */ + while (hsize * zfs_arc_average_blocksize < arc_all_memory()) + hsize <<= 1; +retry: + buf_hash_table.ht_mask = hsize - 1; +#if defined(_KERNEL) && defined(HAVE_SPL) + /* + * Large allocations which do not require contiguous pages + * should be using vmem_alloc() in the linux kernel + */ + buf_hash_table.ht_table = + vmem_zalloc(hsize * sizeof (void*), KM_SLEEP); +#else + buf_hash_table.ht_table = + kmem_zalloc(hsize * sizeof (void*), KM_NOSLEEP); +#endif + if (buf_hash_table.ht_table == NULL) { + ASSERT(hsize > (1ULL << 8)); + hsize >>= 1; + goto retry; + } + + hdr_full_cache = kmem_cache_create("arc_buf_hdr_t_full", HDR_FULL_SIZE, + 0, hdr_full_cons, hdr_full_dest, hdr_recl, NULL, NULL, 0); + hdr_l2only_cache = kmem_cache_create("arc_buf_hdr_t_l2only", + HDR_L2ONLY_SIZE, 0, hdr_l2only_cons, hdr_l2only_dest, hdr_recl, + NULL, NULL, 0); + buf_cache = kmem_cache_create("arc_buf_t", sizeof (arc_buf_t), + 0, buf_cons, buf_dest, NULL, NULL, NULL, 0); + + for (i = 0; i < 256; i++) + for (ct = zfs_crc64_table + i, *ct = i, j = 8; j > 0; j--) + *ct = (*ct >> 1) ^ (-(*ct & 1) & ZFS_CRC64_POLY); + + for (i = 0; i < BUF_LOCKS; i++) { + mutex_init(&buf_hash_table.ht_locks[i].ht_lock, + NULL, MUTEX_DEFAULT, NULL); + } +} + +#define ARC_MINTIME (hz>>4) /* 62 ms */ + +/* + * This is the size that the buf occupies in memory. If the buf is compressed, + * it will correspond to the compressed size. You should use this method of + * getting the buf size unless you explicitly need the logical size. + */ +uint64_t +arc_buf_size(arc_buf_t *buf) +{ + return (ARC_BUF_COMPRESSED(buf) ? + HDR_GET_PSIZE(buf->b_hdr) : HDR_GET_LSIZE(buf->b_hdr)); +} + +uint64_t +arc_buf_lsize(arc_buf_t *buf) +{ + return (HDR_GET_LSIZE(buf->b_hdr)); +} + +enum zio_compress +arc_get_compression(arc_buf_t *buf) +{ + return (ARC_BUF_COMPRESSED(buf) ? + HDR_GET_COMPRESS(buf->b_hdr) : ZIO_COMPRESS_OFF); +} + +static inline boolean_t +arc_buf_is_shared(arc_buf_t *buf) +{ + boolean_t shared = (buf->b_data != NULL && + buf->b_hdr->b_l1hdr.b_pabd != NULL && + abd_is_linear(buf->b_hdr->b_l1hdr.b_pabd) && + buf->b_data == abd_to_buf(buf->b_hdr->b_l1hdr.b_pabd)); + IMPLY(shared, HDR_SHARED_DATA(buf->b_hdr)); + IMPLY(shared, ARC_BUF_SHARED(buf)); + IMPLY(shared, ARC_BUF_COMPRESSED(buf) || ARC_BUF_LAST(buf)); + + /* + * It would be nice to assert arc_can_share() too, but the "hdr isn't + * already being shared" requirement prevents us from doing that. + */ + + return (shared); +} + +/* + * Free the checksum associated with this header. If there is no checksum, this + * is a no-op. + */ +static inline void +arc_cksum_free(arc_buf_hdr_t *hdr) +{ + ASSERT(HDR_HAS_L1HDR(hdr)); + mutex_enter(&hdr->b_l1hdr.b_freeze_lock); + if (hdr->b_l1hdr.b_freeze_cksum != NULL) { + kmem_free(hdr->b_l1hdr.b_freeze_cksum, sizeof (zio_cksum_t)); + hdr->b_l1hdr.b_freeze_cksum = NULL; + } + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); +} + +/* + * Return true iff at least one of the bufs on hdr is not compressed. + */ +static boolean_t +arc_hdr_has_uncompressed_buf(arc_buf_hdr_t *hdr) +{ + for (arc_buf_t *b = hdr->b_l1hdr.b_buf; b != NULL; b = b->b_next) { + if (!ARC_BUF_COMPRESSED(b)) { + return (B_TRUE); + } + } + return (B_FALSE); +} + + +/* + * If we've turned on the ZFS_DEBUG_MODIFY flag, verify that the buf's data + * matches the checksum that is stored in the hdr. If there is no checksum, + * or if the buf is compressed, this is a no-op. + */ +static void +arc_cksum_verify(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + zio_cksum_t zc; + + if (!(zfs_flags & ZFS_DEBUG_MODIFY)) + return; + + if (ARC_BUF_COMPRESSED(buf)) { + ASSERT(hdr->b_l1hdr.b_freeze_cksum == NULL || + arc_hdr_has_uncompressed_buf(hdr)); + return; + } + + ASSERT(HDR_HAS_L1HDR(hdr)); + + mutex_enter(&hdr->b_l1hdr.b_freeze_lock); + if (hdr->b_l1hdr.b_freeze_cksum == NULL || HDR_IO_ERROR(hdr)) { + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); + return; + } + + fletcher_2_native(buf->b_data, arc_buf_size(buf), NULL, &zc); + if (!ZIO_CHECKSUM_EQUAL(*hdr->b_l1hdr.b_freeze_cksum, zc)) + panic("buffer modified while frozen!"); + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); +} + +static boolean_t +arc_cksum_is_equal(arc_buf_hdr_t *hdr, zio_t *zio) +{ + enum zio_compress compress = BP_GET_COMPRESS(zio->io_bp); + boolean_t valid_cksum; + + ASSERT(!BP_IS_EMBEDDED(zio->io_bp)); + VERIFY3U(BP_GET_PSIZE(zio->io_bp), ==, HDR_GET_PSIZE(hdr)); + + /* + * We rely on the blkptr's checksum to determine if the block + * is valid or not. When compressed arc is enabled, the l2arc + * writes the block to the l2arc just as it appears in the pool. + * This allows us to use the blkptr's checksum to validate the + * data that we just read off of the l2arc without having to store + * a separate checksum in the arc_buf_hdr_t. However, if compressed + * arc is disabled, then the data written to the l2arc is always + * uncompressed and won't match the block as it exists in the main + * pool. When this is the case, we must first compress it if it is + * compressed on the main pool before we can validate the checksum. + */ + if (!HDR_COMPRESSION_ENABLED(hdr) && compress != ZIO_COMPRESS_OFF) { + uint64_t lsize; + uint64_t csize; + void *cbuf; + ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF); + + cbuf = zio_buf_alloc(HDR_GET_PSIZE(hdr)); + lsize = HDR_GET_LSIZE(hdr); + csize = zio_compress_data(compress, zio->io_abd, cbuf, lsize); + + ASSERT3U(csize, <=, HDR_GET_PSIZE(hdr)); + if (csize < HDR_GET_PSIZE(hdr)) { + /* + * Compressed blocks are always a multiple of the + * smallest ashift in the pool. Ideally, we would + * like to round up the csize to the next + * spa_min_ashift but that value may have changed + * since the block was last written. Instead, + * we rely on the fact that the hdr's psize + * was set to the psize of the block when it was + * last written. We set the csize to that value + * and zero out any part that should not contain + * data. + */ + bzero((char *)cbuf + csize, HDR_GET_PSIZE(hdr) - csize); + csize = HDR_GET_PSIZE(hdr); + } + zio_push_transform(zio, cbuf, csize, HDR_GET_PSIZE(hdr), NULL); + } + + /* + * Block pointers always store the checksum for the logical data. + * If the block pointer has the gang bit set, then the checksum + * it represents is for the reconstituted data and not for an + * individual gang member. The zio pipeline, however, must be able to + * determine the checksum of each of the gang constituents so it + * treats the checksum comparison differently than what we need + * for l2arc blocks. This prevents us from using the + * zio_checksum_error() interface directly. Instead we must call the + * zio_checksum_error_impl() so that we can ensure the checksum is + * generated using the correct checksum algorithm and accounts for the + * logical I/O size and not just a gang fragment. + */ + valid_cksum = (zio_checksum_error_impl(zio->io_spa, zio->io_bp, + BP_GET_CHECKSUM(zio->io_bp), zio->io_abd, zio->io_size, + zio->io_offset, NULL) == 0); + zio_pop_transforms(zio); + return (valid_cksum); +} + +/* + * Given a buf full of data, if ZFS_DEBUG_MODIFY is enabled this computes a + * checksum and attaches it to the buf's hdr so that we can ensure that the buf + * isn't modified later on. If buf is compressed or there is already a checksum + * on the hdr, this is a no-op (we only checksum uncompressed bufs). + */ +static void +arc_cksum_compute(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + + if (!(zfs_flags & ZFS_DEBUG_MODIFY)) + return; + + ASSERT(HDR_HAS_L1HDR(hdr)); + + mutex_enter(&buf->b_hdr->b_l1hdr.b_freeze_lock); + if (hdr->b_l1hdr.b_freeze_cksum != NULL) { + ASSERT(arc_hdr_has_uncompressed_buf(hdr)); + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); + return; + } else if (ARC_BUF_COMPRESSED(buf)) { + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); + return; + } + + ASSERT(!ARC_BUF_COMPRESSED(buf)); + hdr->b_l1hdr.b_freeze_cksum = kmem_alloc(sizeof (zio_cksum_t), + KM_SLEEP); + fletcher_2_native(buf->b_data, arc_buf_size(buf), NULL, + hdr->b_l1hdr.b_freeze_cksum); + mutex_exit(&hdr->b_l1hdr.b_freeze_lock); + arc_buf_watch(buf); +} + +#ifndef _KERNEL +void +arc_buf_sigsegv(int sig, siginfo_t *si, void *unused) +{ + panic("Got SIGSEGV at address: 0x%lx\n", (long)si->si_addr); +} +#endif + +/* ARGSUSED */ +static void +arc_buf_unwatch(arc_buf_t *buf) +{ +#ifndef _KERNEL + if (arc_watch) { + ASSERT0(mprotect(buf->b_data, arc_buf_size(buf), + PROT_READ | PROT_WRITE)); + } +#endif +} + +/* ARGSUSED */ +static void +arc_buf_watch(arc_buf_t *buf) +{ +#ifndef _KERNEL + if (arc_watch) + ASSERT0(mprotect(buf->b_data, arc_buf_size(buf), + PROT_READ)); +#endif +} + +static arc_buf_contents_t +arc_buf_type(arc_buf_hdr_t *hdr) +{ + arc_buf_contents_t type; + if (HDR_ISTYPE_METADATA(hdr)) { + type = ARC_BUFC_METADATA; + } else { + type = ARC_BUFC_DATA; + } + VERIFY3U(hdr->b_type, ==, type); + return (type); +} + +boolean_t +arc_is_metadata(arc_buf_t *buf) +{ + return (HDR_ISTYPE_METADATA(buf->b_hdr) != 0); +} + +static uint32_t +arc_bufc_to_flags(arc_buf_contents_t type) +{ + switch (type) { + case ARC_BUFC_DATA: + /* metadata field is 0 if buffer contains normal data */ + return (0); + case ARC_BUFC_METADATA: + return (ARC_FLAG_BUFC_METADATA); + default: + break; + } + panic("undefined ARC buffer type!"); + return ((uint32_t)-1); +} + +void +arc_buf_thaw(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + + ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + + arc_cksum_verify(buf); + + /* + * Compressed buffers do not manipulate the b_freeze_cksum or + * allocate b_thawed. + */ + if (ARC_BUF_COMPRESSED(buf)) { + ASSERT(hdr->b_l1hdr.b_freeze_cksum == NULL || + arc_hdr_has_uncompressed_buf(hdr)); + return; + } + + ASSERT(HDR_HAS_L1HDR(hdr)); + arc_cksum_free(hdr); + arc_buf_unwatch(buf); +} + +void +arc_buf_freeze(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + kmutex_t *hash_lock; + + if (!(zfs_flags & ZFS_DEBUG_MODIFY)) + return; + + if (ARC_BUF_COMPRESSED(buf)) { + ASSERT(hdr->b_l1hdr.b_freeze_cksum == NULL || + arc_hdr_has_uncompressed_buf(hdr)); + return; + } + + hash_lock = HDR_LOCK(hdr); + mutex_enter(hash_lock); + + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(hdr->b_l1hdr.b_freeze_cksum != NULL || + hdr->b_l1hdr.b_state == arc_anon); + arc_cksum_compute(buf); + mutex_exit(hash_lock); +} + +/* + * The arc_buf_hdr_t's b_flags should never be modified directly. Instead, + * the following functions should be used to ensure that the flags are + * updated in a thread-safe way. When manipulating the flags either + * the hash_lock must be held or the hdr must be undiscoverable. This + * ensures that we're not racing with any other threads when updating + * the flags. + */ +static inline void +arc_hdr_set_flags(arc_buf_hdr_t *hdr, arc_flags_t flags) +{ + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + hdr->b_flags |= flags; +} + +static inline void +arc_hdr_clear_flags(arc_buf_hdr_t *hdr, arc_flags_t flags) +{ + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + hdr->b_flags &= ~flags; +} + +/* + * Setting the compression bits in the arc_buf_hdr_t's b_flags is + * done in a special way since we have to clear and set bits + * at the same time. Consumers that wish to set the compression bits + * must use this function to ensure that the flags are updated in + * thread-safe manner. + */ +static void +arc_hdr_set_compress(arc_buf_hdr_t *hdr, enum zio_compress cmp) +{ + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + /* + * Holes and embedded blocks will always have a psize = 0 so + * we ignore the compression of the blkptr and set the + * want to uncompress them. Mark them as uncompressed. + */ + if (!zfs_compressed_arc_enabled || HDR_GET_PSIZE(hdr) == 0) { + arc_hdr_clear_flags(hdr, ARC_FLAG_COMPRESSED_ARC); + HDR_SET_COMPRESS(hdr, ZIO_COMPRESS_OFF); + ASSERT(!HDR_COMPRESSION_ENABLED(hdr)); + ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF); + } else { + arc_hdr_set_flags(hdr, ARC_FLAG_COMPRESSED_ARC); + HDR_SET_COMPRESS(hdr, cmp); + ASSERT3U(HDR_GET_COMPRESS(hdr), ==, cmp); + ASSERT(HDR_COMPRESSION_ENABLED(hdr)); + } +} + +/* + * Looks for another buf on the same hdr which has the data decompressed, copies + * from it, and returns true. If no such buf exists, returns false. + */ +static boolean_t +arc_buf_try_copy_decompressed_data(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + boolean_t copied = B_FALSE; + + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT3P(buf->b_data, !=, NULL); + ASSERT(!ARC_BUF_COMPRESSED(buf)); + + for (arc_buf_t *from = hdr->b_l1hdr.b_buf; from != NULL; + from = from->b_next) { + /* can't use our own data buffer */ + if (from == buf) { + continue; + } + + if (!ARC_BUF_COMPRESSED(from)) { + bcopy(from->b_data, buf->b_data, arc_buf_size(buf)); + copied = B_TRUE; + break; + } + } + + /* + * There were no decompressed bufs, so there should not be a + * checksum on the hdr either. + */ + EQUIV(!copied, hdr->b_l1hdr.b_freeze_cksum == NULL); + + return (copied); +} + +/* + * Given a buf that has a data buffer attached to it, this function will + * efficiently fill the buf with data of the specified compression setting from + * the hdr and update the hdr's b_freeze_cksum if necessary. If the buf and hdr + * are already sharing a data buf, no copy is performed. + * + * If the buf is marked as compressed but uncompressed data was requested, this + * will allocate a new data buffer for the buf, remove that flag, and fill the + * buf with uncompressed data. You can't request a compressed buf on a hdr with + * uncompressed data, and (since we haven't added support for it yet) if you + * want compressed data your buf must already be marked as compressed and have + * the correct-sized data buffer. + */ +static int +arc_buf_fill(arc_buf_t *buf, boolean_t compressed) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + boolean_t hdr_compressed = (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF); + dmu_object_byteswap_t bswap = hdr->b_l1hdr.b_byteswap; + + ASSERT3P(buf->b_data, !=, NULL); + IMPLY(compressed, hdr_compressed); + IMPLY(compressed, ARC_BUF_COMPRESSED(buf)); + + if (hdr_compressed == compressed) { + if (!arc_buf_is_shared(buf)) { + abd_copy_to_buf(buf->b_data, hdr->b_l1hdr.b_pabd, + arc_buf_size(buf)); + } + } else { + ASSERT(hdr_compressed); + ASSERT(!compressed); + ASSERT3U(HDR_GET_LSIZE(hdr), !=, HDR_GET_PSIZE(hdr)); + + /* + * If the buf is sharing its data with the hdr, unlink it and + * allocate a new data buffer for the buf. + */ + if (arc_buf_is_shared(buf)) { + ASSERT(ARC_BUF_COMPRESSED(buf)); + + /* We need to give the buf it's own b_data */ + buf->b_flags &= ~ARC_BUF_FLAG_SHARED; + buf->b_data = + arc_get_data_buf(hdr, HDR_GET_LSIZE(hdr), buf); + arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA); + + /* Previously overhead was 0; just add new overhead */ + ARCSTAT_INCR(arcstat_overhead_size, HDR_GET_LSIZE(hdr)); + } else if (ARC_BUF_COMPRESSED(buf)) { + /* We need to reallocate the buf's b_data */ + arc_free_data_buf(hdr, buf->b_data, HDR_GET_PSIZE(hdr), + buf); + buf->b_data = + arc_get_data_buf(hdr, HDR_GET_LSIZE(hdr), buf); + + /* We increased the size of b_data; update overhead */ + ARCSTAT_INCR(arcstat_overhead_size, + HDR_GET_LSIZE(hdr) - HDR_GET_PSIZE(hdr)); + } + + /* + * Regardless of the buf's previous compression settings, it + * should not be compressed at the end of this function. + */ + buf->b_flags &= ~ARC_BUF_FLAG_COMPRESSED; + + /* + * Try copying the data from another buf which already has a + * decompressed version. If that's not possible, it's time to + * bite the bullet and decompress the data from the hdr. + */ + if (arc_buf_try_copy_decompressed_data(buf)) { + /* Skip byteswapping and checksumming (already done) */ + ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, !=, NULL); + return (0); + } else { + int error = zio_decompress_data(HDR_GET_COMPRESS(hdr), + hdr->b_l1hdr.b_pabd, buf->b_data, + HDR_GET_PSIZE(hdr), HDR_GET_LSIZE(hdr)); + + /* + * Absent hardware errors or software bugs, this should + * be impossible, but log it anyway so we can debug it. + */ + if (error != 0) { + zfs_dbgmsg( + "hdr %p, compress %d, psize %d, lsize %d", + hdr, HDR_GET_COMPRESS(hdr), + HDR_GET_PSIZE(hdr), HDR_GET_LSIZE(hdr)); + return (SET_ERROR(EIO)); + } + } + } + + /* Byteswap the buf's data if necessary */ + if (bswap != DMU_BSWAP_NUMFUNCS) { + ASSERT(!HDR_SHARED_DATA(hdr)); + ASSERT3U(bswap, <, DMU_BSWAP_NUMFUNCS); + dmu_ot_byteswap[bswap].ob_func(buf->b_data, HDR_GET_LSIZE(hdr)); + } + + /* Compute the hdr's checksum if necessary */ + arc_cksum_compute(buf); + + return (0); +} + +int +arc_decompress(arc_buf_t *buf) +{ + return (arc_buf_fill(buf, B_FALSE)); +} + +/* + * Return the size of the block, b_pabd, that is stored in the arc_buf_hdr_t. + */ +static uint64_t +arc_hdr_size(arc_buf_hdr_t *hdr) +{ + uint64_t size; + + if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF && + HDR_GET_PSIZE(hdr) > 0) { + size = HDR_GET_PSIZE(hdr); + } else { + ASSERT3U(HDR_GET_LSIZE(hdr), !=, 0); + size = HDR_GET_LSIZE(hdr); + } + return (size); +} + +/* + * Increment the amount of evictable space in the arc_state_t's refcount. + * We account for the space used by the hdr and the arc buf individually + * so that we can add and remove them from the refcount individually. + */ +static void +arc_evictable_space_increment(arc_buf_hdr_t *hdr, arc_state_t *state) +{ + arc_buf_contents_t type = arc_buf_type(hdr); + arc_buf_t *buf; + + ASSERT(HDR_HAS_L1HDR(hdr)); + + if (GHOST_STATE(state)) { + ASSERT0(hdr->b_l1hdr.b_bufcnt); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + (void) refcount_add_many(&state->arcs_esize[type], + HDR_GET_LSIZE(hdr), hdr); + return; + } + + ASSERT(!GHOST_STATE(state)); + if (hdr->b_l1hdr.b_pabd != NULL) { + (void) refcount_add_many(&state->arcs_esize[type], + arc_hdr_size(hdr), hdr); + } + for (buf = hdr->b_l1hdr.b_buf; buf != NULL; buf = buf->b_next) { + if (arc_buf_is_shared(buf)) + continue; + (void) refcount_add_many(&state->arcs_esize[type], + arc_buf_size(buf), buf); + } +} + +/* + * Decrement the amount of evictable space in the arc_state_t's refcount. + * We account for the space used by the hdr and the arc buf individually + * so that we can add and remove them from the refcount individually. + */ +static void +arc_evictable_space_decrement(arc_buf_hdr_t *hdr, arc_state_t *state) +{ + arc_buf_contents_t type = arc_buf_type(hdr); + arc_buf_t *buf; + + ASSERT(HDR_HAS_L1HDR(hdr)); + + if (GHOST_STATE(state)) { + ASSERT0(hdr->b_l1hdr.b_bufcnt); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + (void) refcount_remove_many(&state->arcs_esize[type], + HDR_GET_LSIZE(hdr), hdr); + return; + } + + ASSERT(!GHOST_STATE(state)); + if (hdr->b_l1hdr.b_pabd != NULL) { + (void) refcount_remove_many(&state->arcs_esize[type], + arc_hdr_size(hdr), hdr); + } + for (buf = hdr->b_l1hdr.b_buf; buf != NULL; buf = buf->b_next) { + if (arc_buf_is_shared(buf)) + continue; + (void) refcount_remove_many(&state->arcs_esize[type], + arc_buf_size(buf), buf); + } +} + +/* + * Add a reference to this hdr indicating that someone is actively + * referencing that memory. When the refcount transitions from 0 to 1, + * we remove it from the respective arc_state_t list to indicate that + * it is not evictable. + */ +static void +add_reference(arc_buf_hdr_t *hdr, void *tag) +{ + arc_state_t *state; + + ASSERT(HDR_HAS_L1HDR(hdr)); + if (!MUTEX_HELD(HDR_LOCK(hdr))) { + ASSERT(hdr->b_l1hdr.b_state == arc_anon); + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + } + + state = hdr->b_l1hdr.b_state; + + if ((refcount_add(&hdr->b_l1hdr.b_refcnt, tag) == 1) && + (state != arc_anon)) { + /* We don't use the L2-only state list. */ + if (state != arc_l2c_only) { + multilist_remove(state->arcs_list[arc_buf_type(hdr)], + hdr); + arc_evictable_space_decrement(hdr, state); + } + /* remove the prefetch flag if we get a reference */ + arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH); + } +} + +/* + * Remove a reference from this hdr. When the reference transitions from + * 1 to 0 and we're not anonymous, then we add this hdr to the arc_state_t's + * list making it eligible for eviction. + */ +static int +remove_reference(arc_buf_hdr_t *hdr, kmutex_t *hash_lock, void *tag) +{ + int cnt; + arc_state_t *state = hdr->b_l1hdr.b_state; + + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(state == arc_anon || MUTEX_HELD(hash_lock)); + ASSERT(!GHOST_STATE(state)); + + /* + * arc_l2c_only counts as a ghost state so we don't need to explicitly + * check to prevent usage of the arc_l2c_only list. + */ + if (((cnt = refcount_remove(&hdr->b_l1hdr.b_refcnt, tag)) == 0) && + (state != arc_anon)) { + multilist_insert(state->arcs_list[arc_buf_type(hdr)], hdr); + ASSERT3U(hdr->b_l1hdr.b_bufcnt, >, 0); + arc_evictable_space_increment(hdr, state); + } + return (cnt); +} + +/* + * Returns detailed information about a specific arc buffer. When the + * state_index argument is set the function will calculate the arc header + * list position for its arc state. Since this requires a linear traversal + * callers are strongly encourage not to do this. However, it can be helpful + * for targeted analysis so the functionality is provided. + */ +void +arc_buf_info(arc_buf_t *ab, arc_buf_info_t *abi, int state_index) +{ + arc_buf_hdr_t *hdr = ab->b_hdr; + l1arc_buf_hdr_t *l1hdr = NULL; + l2arc_buf_hdr_t *l2hdr = NULL; + arc_state_t *state = NULL; + + memset(abi, 0, sizeof (arc_buf_info_t)); + + if (hdr == NULL) + return; + + abi->abi_flags = hdr->b_flags; + + if (HDR_HAS_L1HDR(hdr)) { + l1hdr = &hdr->b_l1hdr; + state = l1hdr->b_state; + } + if (HDR_HAS_L2HDR(hdr)) + l2hdr = &hdr->b_l2hdr; + + if (l1hdr) { + abi->abi_bufcnt = l1hdr->b_bufcnt; + abi->abi_access = l1hdr->b_arc_access; + abi->abi_mru_hits = l1hdr->b_mru_hits; + abi->abi_mru_ghost_hits = l1hdr->b_mru_ghost_hits; + abi->abi_mfu_hits = l1hdr->b_mfu_hits; + abi->abi_mfu_ghost_hits = l1hdr->b_mfu_ghost_hits; + abi->abi_holds = refcount_count(&l1hdr->b_refcnt); + } + + if (l2hdr) { + abi->abi_l2arc_dattr = l2hdr->b_daddr; + abi->abi_l2arc_hits = l2hdr->b_hits; + } + + abi->abi_state_type = state ? state->arcs_state : ARC_STATE_ANON; + abi->abi_state_contents = arc_buf_type(hdr); + abi->abi_size = arc_hdr_size(hdr); +} + +/* + * Move the supplied buffer to the indicated state. The hash lock + * for the buffer must be held by the caller. + */ +static void +arc_change_state(arc_state_t *new_state, arc_buf_hdr_t *hdr, + kmutex_t *hash_lock) +{ + arc_state_t *old_state; + int64_t refcnt; + uint32_t bufcnt; + boolean_t update_old, update_new; + arc_buf_contents_t buftype = arc_buf_type(hdr); + + /* + * We almost always have an L1 hdr here, since we call arc_hdr_realloc() + * in arc_read() when bringing a buffer out of the L2ARC. However, the + * L1 hdr doesn't always exist when we change state to arc_anon before + * destroying a header, in which case reallocating to add the L1 hdr is + * pointless. + */ + if (HDR_HAS_L1HDR(hdr)) { + old_state = hdr->b_l1hdr.b_state; + refcnt = refcount_count(&hdr->b_l1hdr.b_refcnt); + bufcnt = hdr->b_l1hdr.b_bufcnt; + update_old = (bufcnt > 0 || hdr->b_l1hdr.b_pabd != NULL); + } else { + old_state = arc_l2c_only; + refcnt = 0; + bufcnt = 0; + update_old = B_FALSE; + } + update_new = update_old; + + ASSERT(MUTEX_HELD(hash_lock)); + ASSERT3P(new_state, !=, old_state); + ASSERT(!GHOST_STATE(new_state) || bufcnt == 0); + ASSERT(old_state != arc_anon || bufcnt <= 1); + + /* + * If this buffer is evictable, transfer it from the + * old state list to the new state list. + */ + if (refcnt == 0) { + if (old_state != arc_anon && old_state != arc_l2c_only) { + ASSERT(HDR_HAS_L1HDR(hdr)); + multilist_remove(old_state->arcs_list[buftype], hdr); + + if (GHOST_STATE(old_state)) { + ASSERT0(bufcnt); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + update_old = B_TRUE; + } + arc_evictable_space_decrement(hdr, old_state); + } + if (new_state != arc_anon && new_state != arc_l2c_only) { + /* + * An L1 header always exists here, since if we're + * moving to some L1-cached state (i.e. not l2c_only or + * anonymous), we realloc the header to add an L1hdr + * beforehand. + */ + ASSERT(HDR_HAS_L1HDR(hdr)); + multilist_insert(new_state->arcs_list[buftype], hdr); + + if (GHOST_STATE(new_state)) { + ASSERT0(bufcnt); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + update_new = B_TRUE; + } + arc_evictable_space_increment(hdr, new_state); + } + } + + ASSERT(!HDR_EMPTY(hdr)); + if (new_state == arc_anon && HDR_IN_HASH_TABLE(hdr)) + buf_hash_remove(hdr); + + /* adjust state sizes (ignore arc_l2c_only) */ + + if (update_new && new_state != arc_l2c_only) { + ASSERT(HDR_HAS_L1HDR(hdr)); + if (GHOST_STATE(new_state)) { + ASSERT0(bufcnt); + + /* + * When moving a header to a ghost state, we first + * remove all arc buffers. Thus, we'll have a + * bufcnt of zero, and no arc buffer to use for + * the reference. As a result, we use the arc + * header pointer for the reference. + */ + (void) refcount_add_many(&new_state->arcs_size, + HDR_GET_LSIZE(hdr), hdr); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + } else { + arc_buf_t *buf; + uint32_t buffers = 0; + + /* + * Each individual buffer holds a unique reference, + * thus we must remove each of these references one + * at a time. + */ + for (buf = hdr->b_l1hdr.b_buf; buf != NULL; + buf = buf->b_next) { + ASSERT3U(bufcnt, !=, 0); + buffers++; + + /* + * When the arc_buf_t is sharing the data + * block with the hdr, the owner of the + * reference belongs to the hdr. Only + * add to the refcount if the arc_buf_t is + * not shared. + */ + if (arc_buf_is_shared(buf)) + continue; + + (void) refcount_add_many(&new_state->arcs_size, + arc_buf_size(buf), buf); + } + ASSERT3U(bufcnt, ==, buffers); + + if (hdr->b_l1hdr.b_pabd != NULL) { + (void) refcount_add_many(&new_state->arcs_size, + arc_hdr_size(hdr), hdr); + } else { + ASSERT(GHOST_STATE(old_state)); + } + } + } + + if (update_old && old_state != arc_l2c_only) { + ASSERT(HDR_HAS_L1HDR(hdr)); + if (GHOST_STATE(old_state)) { + ASSERT0(bufcnt); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + + /* + * When moving a header off of a ghost state, + * the header will not contain any arc buffers. + * We use the arc header pointer for the reference + * which is exactly what we did when we put the + * header on the ghost state. + */ + + (void) refcount_remove_many(&old_state->arcs_size, + HDR_GET_LSIZE(hdr), hdr); + } else { + arc_buf_t *buf; + uint32_t buffers = 0; + + /* + * Each individual buffer holds a unique reference, + * thus we must remove each of these references one + * at a time. + */ + for (buf = hdr->b_l1hdr.b_buf; buf != NULL; + buf = buf->b_next) { + ASSERT3U(bufcnt, !=, 0); + buffers++; + + /* + * When the arc_buf_t is sharing the data + * block with the hdr, the owner of the + * reference belongs to the hdr. Only + * add to the refcount if the arc_buf_t is + * not shared. + */ + if (arc_buf_is_shared(buf)) + continue; + + (void) refcount_remove_many( + &old_state->arcs_size, arc_buf_size(buf), + buf); + } + ASSERT3U(bufcnt, ==, buffers); + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + (void) refcount_remove_many( + &old_state->arcs_size, arc_hdr_size(hdr), hdr); + } + } + + if (HDR_HAS_L1HDR(hdr)) + hdr->b_l1hdr.b_state = new_state; + + /* + * L2 headers should never be on the L2 state list since they don't + * have L1 headers allocated. + */ + ASSERT(multilist_is_empty(arc_l2c_only->arcs_list[ARC_BUFC_DATA]) && + multilist_is_empty(arc_l2c_only->arcs_list[ARC_BUFC_METADATA])); +} + +void +arc_space_consume(uint64_t space, arc_space_type_t type) +{ + ASSERT(type >= 0 && type < ARC_SPACE_NUMTYPES); + + switch (type) { + default: + break; + case ARC_SPACE_DATA: + ARCSTAT_INCR(arcstat_data_size, space); + break; + case ARC_SPACE_META: + ARCSTAT_INCR(arcstat_metadata_size, space); + break; + case ARC_SPACE_BONUS: + ARCSTAT_INCR(arcstat_bonus_size, space); + break; + case ARC_SPACE_DNODE: + ARCSTAT_INCR(arcstat_dnode_size, space); + break; + case ARC_SPACE_DBUF: + ARCSTAT_INCR(arcstat_dbuf_size, space); + break; + case ARC_SPACE_HDRS: + ARCSTAT_INCR(arcstat_hdr_size, space); + break; + case ARC_SPACE_L2HDRS: + ARCSTAT_INCR(arcstat_l2_hdr_size, space); + break; + } + + if (type != ARC_SPACE_DATA) + ARCSTAT_INCR(arcstat_meta_used, space); + + atomic_add_64(&arc_size, space); +} + +void +arc_space_return(uint64_t space, arc_space_type_t type) +{ + ASSERT(type >= 0 && type < ARC_SPACE_NUMTYPES); + + switch (type) { + default: + break; + case ARC_SPACE_DATA: + ARCSTAT_INCR(arcstat_data_size, -space); + break; + case ARC_SPACE_META: + ARCSTAT_INCR(arcstat_metadata_size, -space); + break; + case ARC_SPACE_BONUS: + ARCSTAT_INCR(arcstat_bonus_size, -space); + break; + case ARC_SPACE_DNODE: + ARCSTAT_INCR(arcstat_dnode_size, -space); + break; + case ARC_SPACE_DBUF: + ARCSTAT_INCR(arcstat_dbuf_size, -space); + break; + case ARC_SPACE_HDRS: + ARCSTAT_INCR(arcstat_hdr_size, -space); + break; + case ARC_SPACE_L2HDRS: + ARCSTAT_INCR(arcstat_l2_hdr_size, -space); + break; + } + + if (type != ARC_SPACE_DATA) { + ASSERT(arc_meta_used >= space); + if (arc_meta_max < arc_meta_used) + arc_meta_max = arc_meta_used; + ARCSTAT_INCR(arcstat_meta_used, -space); + } + + ASSERT(arc_size >= space); + atomic_add_64(&arc_size, -space); +} + +/* + * Given a hdr and a buf, returns whether that buf can share its b_data buffer + * with the hdr's b_pabd. + */ +static boolean_t +arc_can_share(arc_buf_hdr_t *hdr, arc_buf_t *buf) +{ + /* + * The criteria for sharing a hdr's data are: + * 1. the hdr's compression matches the buf's compression + * 2. the hdr doesn't need to be byteswapped + * 3. the hdr isn't already being shared + * 4. the buf is either compressed or it is the last buf in the hdr list + * + * Criterion #4 maintains the invariant that shared uncompressed + * bufs must be the final buf in the hdr's b_buf list. Reading this, you + * might ask, "if a compressed buf is allocated first, won't that be the + * last thing in the list?", but in that case it's impossible to create + * a shared uncompressed buf anyway (because the hdr must be compressed + * to have the compressed buf). You might also think that #3 is + * sufficient to make this guarantee, however it's possible + * (specifically in the rare L2ARC write race mentioned in + * arc_buf_alloc_impl()) there will be an existing uncompressed buf that + * is sharable, but wasn't at the time of its allocation. Rather than + * allow a new shared uncompressed buf to be created and then shuffle + * the list around to make it the last element, this simply disallows + * sharing if the new buf isn't the first to be added. + */ + ASSERT3P(buf->b_hdr, ==, hdr); + boolean_t hdr_compressed = HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF; + boolean_t buf_compressed = ARC_BUF_COMPRESSED(buf) != 0; + return (buf_compressed == hdr_compressed && + hdr->b_l1hdr.b_byteswap == DMU_BSWAP_NUMFUNCS && + !HDR_SHARED_DATA(hdr) && + (ARC_BUF_LAST(buf) || ARC_BUF_COMPRESSED(buf))); +} + +/* + * Allocate a buf for this hdr. If you care about the data that's in the hdr, + * or if you want a compressed buffer, pass those flags in. Returns 0 if the + * copy was made successfully, or an error code otherwise. + */ +static int +arc_buf_alloc_impl(arc_buf_hdr_t *hdr, void *tag, boolean_t compressed, + boolean_t fill, arc_buf_t **ret) +{ + arc_buf_t *buf; + + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT3U(HDR_GET_LSIZE(hdr), >, 0); + VERIFY(hdr->b_type == ARC_BUFC_DATA || + hdr->b_type == ARC_BUFC_METADATA); + ASSERT3P(ret, !=, NULL); + ASSERT3P(*ret, ==, NULL); + + hdr->b_l1hdr.b_mru_hits = 0; + hdr->b_l1hdr.b_mru_ghost_hits = 0; + hdr->b_l1hdr.b_mfu_hits = 0; + hdr->b_l1hdr.b_mfu_ghost_hits = 0; + hdr->b_l1hdr.b_l2_hits = 0; + + buf = *ret = kmem_cache_alloc(buf_cache, KM_PUSHPAGE); + buf->b_hdr = hdr; + buf->b_data = NULL; + buf->b_next = hdr->b_l1hdr.b_buf; + buf->b_flags = 0; + + add_reference(hdr, tag); + + /* + * We're about to change the hdr's b_flags. We must either + * hold the hash_lock or be undiscoverable. + */ + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + /* + * Only honor requests for compressed bufs if the hdr is actually + * compressed. + */ + if (compressed && HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) + buf->b_flags |= ARC_BUF_FLAG_COMPRESSED; + + /* + * If the hdr's data can be shared then we share the data buffer and + * set the appropriate bit in the hdr's b_flags to indicate the hdr is + * allocate a new buffer to store the buf's data. + * + * There are two additional restrictions here because we're sharing + * hdr -> buf instead of the usual buf -> hdr. First, the hdr can't be + * actively involved in an L2ARC write, because if this buf is used by + * an arc_write() then the hdr's data buffer will be released when the + * write completes, even though the L2ARC write might still be using it. + * Second, the hdr's ABD must be linear so that the buf's user doesn't + * need to be ABD-aware. + */ + boolean_t can_share = arc_can_share(hdr, buf) && !HDR_L2_WRITING(hdr) && + abd_is_linear(hdr->b_l1hdr.b_pabd); + + /* Set up b_data and sharing */ + if (can_share) { + buf->b_data = abd_to_buf(hdr->b_l1hdr.b_pabd); + buf->b_flags |= ARC_BUF_FLAG_SHARED; + arc_hdr_set_flags(hdr, ARC_FLAG_SHARED_DATA); + } else { + buf->b_data = + arc_get_data_buf(hdr, arc_buf_size(buf), buf); + ARCSTAT_INCR(arcstat_overhead_size, arc_buf_size(buf)); + } + VERIFY3P(buf->b_data, !=, NULL); + + hdr->b_l1hdr.b_buf = buf; + hdr->b_l1hdr.b_bufcnt += 1; + + /* + * If the user wants the data from the hdr, we need to either copy or + * decompress the data. + */ + if (fill) { + return (arc_buf_fill(buf, ARC_BUF_COMPRESSED(buf) != 0)); + } + + return (0); +} + +static char *arc_onloan_tag = "onloan"; + +static inline void +arc_loaned_bytes_update(int64_t delta) +{ + atomic_add_64(&arc_loaned_bytes, delta); + + /* assert that it did not wrap around */ + ASSERT3S(atomic_add_64_nv(&arc_loaned_bytes, 0), >=, 0); +} + +/* + * Loan out an anonymous arc buffer. Loaned buffers are not counted as in + * flight data by arc_tempreserve_space() until they are "returned". Loaned + * buffers must be returned to the arc before they can be used by the DMU or + * freed. + */ +arc_buf_t * +arc_loan_buf(spa_t *spa, boolean_t is_metadata, int size) +{ + arc_buf_t *buf = arc_alloc_buf(spa, arc_onloan_tag, + is_metadata ? ARC_BUFC_METADATA : ARC_BUFC_DATA, size); + + arc_loaned_bytes_update(size); + + return (buf); +} + +arc_buf_t * +arc_loan_compressed_buf(spa_t *spa, uint64_t psize, uint64_t lsize, + enum zio_compress compression_type) +{ + arc_buf_t *buf = arc_alloc_compressed_buf(spa, arc_onloan_tag, + psize, lsize, compression_type); + + arc_loaned_bytes_update(psize); + + return (buf); +} + + +/* + * Return a loaned arc buffer to the arc. + */ +void +arc_return_buf(arc_buf_t *buf, void *tag) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + + ASSERT3P(buf->b_data, !=, NULL); + ASSERT(HDR_HAS_L1HDR(hdr)); + (void) refcount_add(&hdr->b_l1hdr.b_refcnt, tag); + (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag); + + arc_loaned_bytes_update(-arc_buf_size(buf)); +} + +/* Detach an arc_buf from a dbuf (tag) */ +void +arc_loan_inuse_buf(arc_buf_t *buf, void *tag) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + + ASSERT3P(buf->b_data, !=, NULL); + ASSERT(HDR_HAS_L1HDR(hdr)); + (void) refcount_add(&hdr->b_l1hdr.b_refcnt, arc_onloan_tag); + (void) refcount_remove(&hdr->b_l1hdr.b_refcnt, tag); + + arc_loaned_bytes_update(arc_buf_size(buf)); +} + +static void +l2arc_free_abd_on_write(abd_t *abd, size_t size, arc_buf_contents_t type) +{ + l2arc_data_free_t *df = kmem_alloc(sizeof (*df), KM_SLEEP); + + df->l2df_abd = abd; + df->l2df_size = size; + df->l2df_type = type; + mutex_enter(&l2arc_free_on_write_mtx); + list_insert_head(l2arc_free_on_write, df); + mutex_exit(&l2arc_free_on_write_mtx); +} + +static void +arc_hdr_free_on_write(arc_buf_hdr_t *hdr) +{ + arc_state_t *state = hdr->b_l1hdr.b_state; + arc_buf_contents_t type = arc_buf_type(hdr); + uint64_t size = arc_hdr_size(hdr); + + /* protected by hash lock, if in the hash table */ + if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) { + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + ASSERT(state != arc_anon && state != arc_l2c_only); + + (void) refcount_remove_many(&state->arcs_esize[type], + size, hdr); + } + (void) refcount_remove_many(&state->arcs_size, size, hdr); + if (type == ARC_BUFC_METADATA) { + arc_space_return(size, ARC_SPACE_META); + } else { + ASSERT(type == ARC_BUFC_DATA); + arc_space_return(size, ARC_SPACE_DATA); + } + + l2arc_free_abd_on_write(hdr->b_l1hdr.b_pabd, size, type); +} + +/* + * Share the arc_buf_t's data with the hdr. Whenever we are sharing the + * data buffer, we transfer the refcount ownership to the hdr and update + * the appropriate kstats. + */ +static void +arc_share_buf(arc_buf_hdr_t *hdr, arc_buf_t *buf) +{ + ASSERT(arc_can_share(hdr, buf)); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + /* + * Start sharing the data buffer. We transfer the + * refcount ownership to the hdr since it always owns + * the refcount whenever an arc_buf_t is shared. + */ + refcount_transfer_ownership(&hdr->b_l1hdr.b_state->arcs_size, buf, hdr); + hdr->b_l1hdr.b_pabd = abd_get_from_buf(buf->b_data, arc_buf_size(buf)); + abd_take_ownership_of_buf(hdr->b_l1hdr.b_pabd, + HDR_ISTYPE_METADATA(hdr)); + arc_hdr_set_flags(hdr, ARC_FLAG_SHARED_DATA); + buf->b_flags |= ARC_BUF_FLAG_SHARED; + + /* + * Since we've transferred ownership to the hdr we need + * to increment its compressed and uncompressed kstats and + * decrement the overhead size. + */ + ARCSTAT_INCR(arcstat_compressed_size, arc_hdr_size(hdr)); + ARCSTAT_INCR(arcstat_uncompressed_size, HDR_GET_LSIZE(hdr)); + ARCSTAT_INCR(arcstat_overhead_size, -arc_buf_size(buf)); +} + +static void +arc_unshare_buf(arc_buf_hdr_t *hdr, arc_buf_t *buf) +{ + ASSERT(arc_buf_is_shared(buf)); + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + /* + * We are no longer sharing this buffer so we need + * to transfer its ownership to the rightful owner. + */ + refcount_transfer_ownership(&hdr->b_l1hdr.b_state->arcs_size, hdr, buf); + arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA); + abd_release_ownership_of_buf(hdr->b_l1hdr.b_pabd); + abd_put(hdr->b_l1hdr.b_pabd); + hdr->b_l1hdr.b_pabd = NULL; + buf->b_flags &= ~ARC_BUF_FLAG_SHARED; + + /* + * Since the buffer is no longer shared between + * the arc buf and the hdr, count it as overhead. + */ + ARCSTAT_INCR(arcstat_compressed_size, -arc_hdr_size(hdr)); + ARCSTAT_INCR(arcstat_uncompressed_size, -HDR_GET_LSIZE(hdr)); + ARCSTAT_INCR(arcstat_overhead_size, arc_buf_size(buf)); +} + +/* + * Remove an arc_buf_t from the hdr's buf list and return the last + * arc_buf_t on the list. If no buffers remain on the list then return + * NULL. + */ +static arc_buf_t * +arc_buf_remove(arc_buf_hdr_t *hdr, arc_buf_t *buf) +{ + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + arc_buf_t **bufp = &hdr->b_l1hdr.b_buf; + arc_buf_t *lastbuf = NULL; + + /* + * Remove the buf from the hdr list and locate the last + * remaining buffer on the list. + */ + while (*bufp != NULL) { + if (*bufp == buf) + *bufp = buf->b_next; + + /* + * If we've removed a buffer in the middle of + * the list then update the lastbuf and update + * bufp. + */ + if (*bufp != NULL) { + lastbuf = *bufp; + bufp = &(*bufp)->b_next; + } + } + buf->b_next = NULL; + ASSERT3P(lastbuf, !=, buf); + IMPLY(hdr->b_l1hdr.b_bufcnt > 0, lastbuf != NULL); + IMPLY(hdr->b_l1hdr.b_bufcnt > 0, hdr->b_l1hdr.b_buf != NULL); + IMPLY(lastbuf != NULL, ARC_BUF_LAST(lastbuf)); + + return (lastbuf); +} + +/* + * Free up buf->b_data and pull the arc_buf_t off of the the arc_buf_hdr_t's + * list and free it. + */ +static void +arc_buf_destroy_impl(arc_buf_t *buf) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + + /* + * Free up the data associated with the buf but only if we're not + * sharing this with the hdr. If we are sharing it with the hdr, the + * hdr is responsible for doing the free. + */ + if (buf->b_data != NULL) { + /* + * We're about to change the hdr's b_flags. We must either + * hold the hash_lock or be undiscoverable. + */ + ASSERT(MUTEX_HELD(HDR_LOCK(hdr)) || HDR_EMPTY(hdr)); + + arc_cksum_verify(buf); + arc_buf_unwatch(buf); + + if (arc_buf_is_shared(buf)) { + arc_hdr_clear_flags(hdr, ARC_FLAG_SHARED_DATA); + } else { + uint64_t size = arc_buf_size(buf); + arc_free_data_buf(hdr, buf->b_data, size, buf); + ARCSTAT_INCR(arcstat_overhead_size, -size); + } + buf->b_data = NULL; + + ASSERT(hdr->b_l1hdr.b_bufcnt > 0); + hdr->b_l1hdr.b_bufcnt -= 1; + } + + arc_buf_t *lastbuf = arc_buf_remove(hdr, buf); + + if (ARC_BUF_SHARED(buf) && !ARC_BUF_COMPRESSED(buf)) { + /* + * If the current arc_buf_t is sharing its data buffer with the + * hdr, then reassign the hdr's b_pabd to share it with the new + * buffer at the end of the list. The shared buffer is always + * the last one on the hdr's buffer list. + * + * There is an equivalent case for compressed bufs, but since + * they aren't guaranteed to be the last buf in the list and + * that is an exceedingly rare case, we just allow that space be + * wasted temporarily. + */ + if (lastbuf != NULL) { + /* Only one buf can be shared at once */ + VERIFY(!arc_buf_is_shared(lastbuf)); + /* hdr is uncompressed so can't have compressed buf */ + VERIFY(!ARC_BUF_COMPRESSED(lastbuf)); + + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + arc_hdr_free_pabd(hdr); + + /* + * We must setup a new shared block between the + * last buffer and the hdr. The data would have + * been allocated by the arc buf so we need to transfer + * ownership to the hdr since it's now being shared. + */ + arc_share_buf(hdr, lastbuf); + } + } else if (HDR_SHARED_DATA(hdr)) { + /* + * Uncompressed shared buffers are always at the end + * of the list. Compressed buffers don't have the + * same requirements. This makes it hard to + * simply assert that the lastbuf is shared so + * we rely on the hdr's compression flags to determine + * if we have a compressed, shared buffer. + */ + ASSERT3P(lastbuf, !=, NULL); + ASSERT(arc_buf_is_shared(lastbuf) || + HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF); + } + + /* + * Free the checksum if we're removing the last uncompressed buf from + * this hdr. + */ + if (!arc_hdr_has_uncompressed_buf(hdr)) { + arc_cksum_free(hdr); + } + + /* clean up the buf */ + buf->b_hdr = NULL; + kmem_cache_free(buf_cache, buf); +} + +static void +arc_hdr_alloc_pabd(arc_buf_hdr_t *hdr) +{ + ASSERT3U(HDR_GET_LSIZE(hdr), >, 0); + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(!HDR_SHARED_DATA(hdr)); + + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + hdr->b_l1hdr.b_pabd = arc_get_data_abd(hdr, arc_hdr_size(hdr), hdr); + hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS; + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + + ARCSTAT_INCR(arcstat_compressed_size, arc_hdr_size(hdr)); + ARCSTAT_INCR(arcstat_uncompressed_size, HDR_GET_LSIZE(hdr)); +} + +static void +arc_hdr_free_pabd(arc_buf_hdr_t *hdr) +{ + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + + /* + * If the hdr is currently being written to the l2arc then + * we defer freeing the data by adding it to the l2arc_free_on_write + * list. The l2arc will free the data once it's finished + * writing it to the l2arc device. + */ + if (HDR_L2_WRITING(hdr)) { + arc_hdr_free_on_write(hdr); + ARCSTAT_BUMP(arcstat_l2_free_on_write); + } else { + arc_free_data_abd(hdr, hdr->b_l1hdr.b_pabd, + arc_hdr_size(hdr), hdr); + } + hdr->b_l1hdr.b_pabd = NULL; + hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS; + + ARCSTAT_INCR(arcstat_compressed_size, -arc_hdr_size(hdr)); + ARCSTAT_INCR(arcstat_uncompressed_size, -HDR_GET_LSIZE(hdr)); +} + +static arc_buf_hdr_t * +arc_hdr_alloc(uint64_t spa, int32_t psize, int32_t lsize, + enum zio_compress compression_type, arc_buf_contents_t type) +{ + arc_buf_hdr_t *hdr; + + VERIFY(type == ARC_BUFC_DATA || type == ARC_BUFC_METADATA); + + hdr = kmem_cache_alloc(hdr_full_cache, KM_PUSHPAGE); + ASSERT(HDR_EMPTY(hdr)); + ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL); + HDR_SET_PSIZE(hdr, psize); + HDR_SET_LSIZE(hdr, lsize); + hdr->b_spa = spa; + hdr->b_type = type; + hdr->b_flags = 0; + arc_hdr_set_flags(hdr, arc_bufc_to_flags(type) | ARC_FLAG_HAS_L1HDR); + arc_hdr_set_compress(hdr, compression_type); + + hdr->b_l1hdr.b_state = arc_anon; + hdr->b_l1hdr.b_arc_access = 0; + hdr->b_l1hdr.b_bufcnt = 0; + hdr->b_l1hdr.b_buf = NULL; + + /* + * Allocate the hdr's buffer. This will contain either + * the compressed or uncompressed data depending on the block + * it references and compressed arc enablement. + */ + arc_hdr_alloc_pabd(hdr); + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + + return (hdr); +} + +/* + * Transition between the two allocation states for the arc_buf_hdr struct. + * The arc_buf_hdr struct can be allocated with (hdr_full_cache) or without + * (hdr_l2only_cache) the fields necessary for the L1 cache - the smaller + * version is used when a cache buffer is only in the L2ARC in order to reduce + * memory usage. + */ +static arc_buf_hdr_t * +arc_hdr_realloc(arc_buf_hdr_t *hdr, kmem_cache_t *old, kmem_cache_t *new) +{ + arc_buf_hdr_t *nhdr; + l2arc_dev_t *dev = hdr->b_l2hdr.b_dev; + + ASSERT(HDR_HAS_L2HDR(hdr)); + ASSERT((old == hdr_full_cache && new == hdr_l2only_cache) || + (old == hdr_l2only_cache && new == hdr_full_cache)); + + nhdr = kmem_cache_alloc(new, KM_PUSHPAGE); + + ASSERT(MUTEX_HELD(HDR_LOCK(hdr))); + buf_hash_remove(hdr); + + bcopy(hdr, nhdr, HDR_L2ONLY_SIZE); + + if (new == hdr_full_cache) { + arc_hdr_set_flags(nhdr, ARC_FLAG_HAS_L1HDR); + /* + * arc_access and arc_change_state need to be aware that a + * header has just come out of L2ARC, so we set its state to + * l2c_only even though it's about to change. + */ + nhdr->b_l1hdr.b_state = arc_l2c_only; + + /* Verify previous threads set to NULL before freeing */ + ASSERT3P(nhdr->b_l1hdr.b_pabd, ==, NULL); + } else { + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + ASSERT0(hdr->b_l1hdr.b_bufcnt); + ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL); + + /* + * If we've reached here, We must have been called from + * arc_evict_hdr(), as such we should have already been + * removed from any ghost list we were previously on + * (which protects us from racing with arc_evict_state), + * thus no locking is needed during this check. + */ + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + + /* + * A buffer must not be moved into the arc_l2c_only + * state if it's not finished being written out to the + * l2arc device. Otherwise, the b_l1hdr.b_pabd field + * might try to be accessed, even though it was removed. + */ + VERIFY(!HDR_L2_WRITING(hdr)); + VERIFY3P(hdr->b_l1hdr.b_pabd, ==, NULL); + + arc_hdr_clear_flags(nhdr, ARC_FLAG_HAS_L1HDR); + } + /* + * The header has been reallocated so we need to re-insert it into any + * lists it was on. + */ + (void) buf_hash_insert(nhdr, NULL); + + ASSERT(list_link_active(&hdr->b_l2hdr.b_l2node)); + + mutex_enter(&dev->l2ad_mtx); + + /* + * We must place the realloc'ed header back into the list at + * the same spot. Otherwise, if it's placed earlier in the list, + * l2arc_write_buffers() could find it during the function's + * write phase, and try to write it out to the l2arc. + */ + list_insert_after(&dev->l2ad_buflist, hdr, nhdr); + list_remove(&dev->l2ad_buflist, hdr); + + mutex_exit(&dev->l2ad_mtx); + + /* + * Since we're using the pointer address as the tag when + * incrementing and decrementing the l2ad_alloc refcount, we + * must remove the old pointer (that we're about to destroy) and + * add the new pointer to the refcount. Otherwise we'd remove + * the wrong pointer address when calling arc_hdr_destroy() later. + */ + + (void) refcount_remove_many(&dev->l2ad_alloc, arc_hdr_size(hdr), hdr); + (void) refcount_add_many(&dev->l2ad_alloc, arc_hdr_size(nhdr), nhdr); + + buf_discard_identity(hdr); + kmem_cache_free(old, hdr); + + return (nhdr); +} + +/* + * Allocate a new arc_buf_hdr_t and arc_buf_t and return the buf to the caller. + * The buf is returned thawed since we expect the consumer to modify it. + */ +arc_buf_t * +arc_alloc_buf(spa_t *spa, void *tag, arc_buf_contents_t type, int32_t size) +{ + arc_buf_hdr_t *hdr = arc_hdr_alloc(spa_load_guid(spa), size, size, + ZIO_COMPRESS_OFF, type); + ASSERT(!MUTEX_HELD(HDR_LOCK(hdr))); + + arc_buf_t *buf = NULL; + VERIFY0(arc_buf_alloc_impl(hdr, tag, B_FALSE, B_FALSE, &buf)); + arc_buf_thaw(buf); + + return (buf); +} + +/* + * Allocate a compressed buf in the same manner as arc_alloc_buf. Don't use this + * for bufs containing metadata. + */ +arc_buf_t * +arc_alloc_compressed_buf(spa_t *spa, void *tag, uint64_t psize, uint64_t lsize, + enum zio_compress compression_type) +{ + ASSERT3U(lsize, >, 0); + ASSERT3U(lsize, >=, psize); + ASSERT(compression_type > ZIO_COMPRESS_OFF); + ASSERT(compression_type < ZIO_COMPRESS_FUNCTIONS); + + arc_buf_hdr_t *hdr = arc_hdr_alloc(spa_load_guid(spa), psize, lsize, + compression_type, ARC_BUFC_DATA); + ASSERT(!MUTEX_HELD(HDR_LOCK(hdr))); + + arc_buf_t *buf = NULL; + VERIFY0(arc_buf_alloc_impl(hdr, tag, B_TRUE, B_FALSE, &buf)); + arc_buf_thaw(buf); + ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL); + + if (!arc_buf_is_shared(buf)) { + /* + * To ensure that the hdr has the correct data in it if we call + * arc_decompress() on this buf before it's been written to + * disk, it's easiest if we just set up sharing between the + * buf and the hdr. + */ + ASSERT(!abd_is_linear(hdr->b_l1hdr.b_pabd)); + arc_hdr_free_pabd(hdr); + arc_share_buf(hdr, buf); + } + + return (buf); +} + +static void +arc_hdr_l2hdr_destroy(arc_buf_hdr_t *hdr) +{ + l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr; + l2arc_dev_t *dev = l2hdr->b_dev; + uint64_t psize = arc_hdr_size(hdr); + + ASSERT(MUTEX_HELD(&dev->l2ad_mtx)); + ASSERT(HDR_HAS_L2HDR(hdr)); + + list_remove(&dev->l2ad_buflist, hdr); + + ARCSTAT_INCR(arcstat_l2_psize, -psize); + ARCSTAT_INCR(arcstat_l2_lsize, -HDR_GET_LSIZE(hdr)); + + vdev_space_update(dev->l2ad_vdev, -psize, 0, 0); + + (void) refcount_remove_many(&dev->l2ad_alloc, psize, hdr); + arc_hdr_clear_flags(hdr, ARC_FLAG_HAS_L2HDR); +} + +static void +arc_hdr_destroy(arc_buf_hdr_t *hdr) +{ + if (HDR_HAS_L1HDR(hdr)) { + ASSERT(hdr->b_l1hdr.b_buf == NULL || + hdr->b_l1hdr.b_bufcnt > 0); + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon); + } + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT(!HDR_IN_HASH_TABLE(hdr)); + + if (!HDR_EMPTY(hdr)) + buf_discard_identity(hdr); + + if (HDR_HAS_L2HDR(hdr)) { + l2arc_dev_t *dev = hdr->b_l2hdr.b_dev; + boolean_t buflist_held = MUTEX_HELD(&dev->l2ad_mtx); + + if (!buflist_held) + mutex_enter(&dev->l2ad_mtx); + + /* + * Even though we checked this conditional above, we + * need to check this again now that we have the + * l2ad_mtx. This is because we could be racing with + * another thread calling l2arc_evict() which might have + * destroyed this header's L2 portion as we were waiting + * to acquire the l2ad_mtx. If that happens, we don't + * want to re-destroy the header's L2 portion. + */ + if (HDR_HAS_L2HDR(hdr)) + arc_hdr_l2hdr_destroy(hdr); + + if (!buflist_held) + mutex_exit(&dev->l2ad_mtx); + } + + if (HDR_HAS_L1HDR(hdr)) { + arc_cksum_free(hdr); + + while (hdr->b_l1hdr.b_buf != NULL) + arc_buf_destroy_impl(hdr->b_l1hdr.b_buf); + + if (hdr->b_l1hdr.b_pabd != NULL) + arc_hdr_free_pabd(hdr); + } + + ASSERT3P(hdr->b_hash_next, ==, NULL); + if (HDR_HAS_L1HDR(hdr)) { + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL); + kmem_cache_free(hdr_full_cache, hdr); + } else { + kmem_cache_free(hdr_l2only_cache, hdr); + } +} + +void +arc_buf_destroy(arc_buf_t *buf, void* tag) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + kmutex_t *hash_lock = HDR_LOCK(hdr); + + if (hdr->b_l1hdr.b_state == arc_anon) { + ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + VERIFY0(remove_reference(hdr, NULL, tag)); + arc_hdr_destroy(hdr); + return; + } + + mutex_enter(hash_lock); + ASSERT3P(hdr, ==, buf->b_hdr); + ASSERT(hdr->b_l1hdr.b_bufcnt > 0); + ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); + ASSERT3P(hdr->b_l1hdr.b_state, !=, arc_anon); + ASSERT3P(buf->b_data, !=, NULL); + + (void) remove_reference(hdr, hash_lock, tag); + arc_buf_destroy_impl(buf); + mutex_exit(hash_lock); +} + +/* + * Evict the arc_buf_hdr that is provided as a parameter. The resultant + * state of the header is dependent on its state prior to entering this + * function. The following transitions are possible: + * + * - arc_mru -> arc_mru_ghost + * - arc_mfu -> arc_mfu_ghost + * - arc_mru_ghost -> arc_l2c_only + * - arc_mru_ghost -> deleted + * - arc_mfu_ghost -> arc_l2c_only + * - arc_mfu_ghost -> deleted + */ +static int64_t +arc_evict_hdr(arc_buf_hdr_t *hdr, kmutex_t *hash_lock) +{ + arc_state_t *evicted_state, *state; + int64_t bytes_evicted = 0; + + ASSERT(MUTEX_HELD(hash_lock)); + ASSERT(HDR_HAS_L1HDR(hdr)); + + state = hdr->b_l1hdr.b_state; + if (GHOST_STATE(state)) { + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + + /* + * l2arc_write_buffers() relies on a header's L1 portion + * (i.e. its b_pabd field) during it's write phase. + * Thus, we cannot push a header onto the arc_l2c_only + * state (removing its L1 piece) until the header is + * done being written to the l2arc. + */ + if (HDR_HAS_L2HDR(hdr) && HDR_L2_WRITING(hdr)) { + ARCSTAT_BUMP(arcstat_evict_l2_skip); + return (bytes_evicted); + } + + ARCSTAT_BUMP(arcstat_deleted); + bytes_evicted += HDR_GET_LSIZE(hdr); + + DTRACE_PROBE1(arc__delete, arc_buf_hdr_t *, hdr); + + if (HDR_HAS_L2HDR(hdr)) { + ASSERT(hdr->b_l1hdr.b_pabd == NULL); + /* + * This buffer is cached on the 2nd Level ARC; + * don't destroy the header. + */ + arc_change_state(arc_l2c_only, hdr, hash_lock); + /* + * dropping from L1+L2 cached to L2-only, + * realloc to remove the L1 header. + */ + hdr = arc_hdr_realloc(hdr, hdr_full_cache, + hdr_l2only_cache); + } else { + arc_change_state(arc_anon, hdr, hash_lock); + arc_hdr_destroy(hdr); + } + return (bytes_evicted); + } + + ASSERT(state == arc_mru || state == arc_mfu); + evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; + + /* prefetch buffers have a minimum lifespan */ + if (HDR_IO_IN_PROGRESS(hdr) || + ((hdr->b_flags & (ARC_FLAG_PREFETCH | ARC_FLAG_INDIRECT)) && + ddi_get_lbolt() - hdr->b_l1hdr.b_arc_access < + arc_min_prefetch_lifespan)) { + ARCSTAT_BUMP(arcstat_evict_skip); + return (bytes_evicted); + } + + ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt)); + while (hdr->b_l1hdr.b_buf) { + arc_buf_t *buf = hdr->b_l1hdr.b_buf; + if (!mutex_tryenter(&buf->b_evict_lock)) { + ARCSTAT_BUMP(arcstat_mutex_miss); + break; + } + if (buf->b_data != NULL) + bytes_evicted += HDR_GET_LSIZE(hdr); + mutex_exit(&buf->b_evict_lock); + arc_buf_destroy_impl(buf); + } + + if (HDR_HAS_L2HDR(hdr)) { + ARCSTAT_INCR(arcstat_evict_l2_cached, HDR_GET_LSIZE(hdr)); + } else { + if (l2arc_write_eligible(hdr->b_spa, hdr)) { + ARCSTAT_INCR(arcstat_evict_l2_eligible, + HDR_GET_LSIZE(hdr)); + } else { + ARCSTAT_INCR(arcstat_evict_l2_ineligible, + HDR_GET_LSIZE(hdr)); + } + } + + if (hdr->b_l1hdr.b_bufcnt == 0) { + arc_cksum_free(hdr); + + bytes_evicted += arc_hdr_size(hdr); + + /* + * If this hdr is being evicted and has a compressed + * buffer then we discard it here before we change states. + * This ensures that the accounting is updated correctly + * in arc_free_data_impl(). + */ + arc_hdr_free_pabd(hdr); + + arc_change_state(evicted_state, hdr, hash_lock); + ASSERT(HDR_IN_HASH_TABLE(hdr)); + arc_hdr_set_flags(hdr, ARC_FLAG_IN_HASH_TABLE); + DTRACE_PROBE1(arc__evict, arc_buf_hdr_t *, hdr); + } + + return (bytes_evicted); +} + +static uint64_t +arc_evict_state_impl(multilist_t *ml, int idx, arc_buf_hdr_t *marker, + uint64_t spa, int64_t bytes) +{ + multilist_sublist_t *mls; + uint64_t bytes_evicted = 0; + arc_buf_hdr_t *hdr; + kmutex_t *hash_lock; + int evict_count = 0; + + ASSERT3P(marker, !=, NULL); + IMPLY(bytes < 0, bytes == ARC_EVICT_ALL); + + mls = multilist_sublist_lock(ml, idx); + + for (hdr = multilist_sublist_prev(mls, marker); hdr != NULL; + hdr = multilist_sublist_prev(mls, marker)) { + if ((bytes != ARC_EVICT_ALL && bytes_evicted >= bytes) || + (evict_count >= zfs_arc_evict_batch_limit)) + break; + + /* + * To keep our iteration location, move the marker + * forward. Since we're not holding hdr's hash lock, we + * must be very careful and not remove 'hdr' from the + * sublist. Otherwise, other consumers might mistake the + * 'hdr' as not being on a sublist when they call the + * multilist_link_active() function (they all rely on + * the hash lock protecting concurrent insertions and + * removals). multilist_sublist_move_forward() was + * specifically implemented to ensure this is the case + * (only 'marker' will be removed and re-inserted). + */ + multilist_sublist_move_forward(mls, marker); + + /* + * The only case where the b_spa field should ever be + * zero, is the marker headers inserted by + * arc_evict_state(). It's possible for multiple threads + * to be calling arc_evict_state() concurrently (e.g. + * dsl_pool_close() and zio_inject_fault()), so we must + * skip any markers we see from these other threads. + */ + if (hdr->b_spa == 0) + continue; + + /* we're only interested in evicting buffers of a certain spa */ + if (spa != 0 && hdr->b_spa != spa) { + ARCSTAT_BUMP(arcstat_evict_skip); + continue; + } + + hash_lock = HDR_LOCK(hdr); + + /* + * We aren't calling this function from any code path + * that would already be holding a hash lock, so we're + * asserting on this assumption to be defensive in case + * this ever changes. Without this check, it would be + * possible to incorrectly increment arcstat_mutex_miss + * below (e.g. if the code changed such that we called + * this function with a hash lock held). + */ + ASSERT(!MUTEX_HELD(hash_lock)); + + if (mutex_tryenter(hash_lock)) { + uint64_t evicted = arc_evict_hdr(hdr, hash_lock); + mutex_exit(hash_lock); + + bytes_evicted += evicted; + + /* + * If evicted is zero, arc_evict_hdr() must have + * decided to skip this header, don't increment + * evict_count in this case. + */ + if (evicted != 0) + evict_count++; + + /* + * If arc_size isn't overflowing, signal any + * threads that might happen to be waiting. + * + * For each header evicted, we wake up a single + * thread. If we used cv_broadcast, we could + * wake up "too many" threads causing arc_size + * to significantly overflow arc_c; since + * arc_get_data_impl() doesn't check for overflow + * when it's woken up (it doesn't because it's + * possible for the ARC to be overflowing while + * full of un-evictable buffers, and the + * function should proceed in this case). + * + * If threads are left sleeping, due to not + * using cv_broadcast, they will be woken up + * just before arc_reclaim_thread() sleeps. + */ + mutex_enter(&arc_reclaim_lock); + if (!arc_is_overflowing()) + cv_signal(&arc_reclaim_waiters_cv); + mutex_exit(&arc_reclaim_lock); + } else { + ARCSTAT_BUMP(arcstat_mutex_miss); + } + } + + multilist_sublist_unlock(mls); + + return (bytes_evicted); +} + +/* + * Evict buffers from the given arc state, until we've removed the + * specified number of bytes. Move the removed buffers to the + * appropriate evict state. + * + * This function makes a "best effort". It skips over any buffers + * it can't get a hash_lock on, and so, may not catch all candidates. + * It may also return without evicting as much space as requested. + * + * If bytes is specified using the special value ARC_EVICT_ALL, this + * will evict all available (i.e. unlocked and evictable) buffers from + * the given arc state; which is used by arc_flush(). + */ +static uint64_t +arc_evict_state(arc_state_t *state, uint64_t spa, int64_t bytes, + arc_buf_contents_t type) +{ + uint64_t total_evicted = 0; + multilist_t *ml = state->arcs_list[type]; + int num_sublists; + arc_buf_hdr_t **markers; + int i; + + IMPLY(bytes < 0, bytes == ARC_EVICT_ALL); + + num_sublists = multilist_get_num_sublists(ml); + + /* + * If we've tried to evict from each sublist, made some + * progress, but still have not hit the target number of bytes + * to evict, we want to keep trying. The markers allow us to + * pick up where we left off for each individual sublist, rather + * than starting from the tail each time. + */ + markers = kmem_zalloc(sizeof (*markers) * num_sublists, KM_SLEEP); + for (i = 0; i < num_sublists; i++) { + multilist_sublist_t *mls; + + markers[i] = kmem_cache_alloc(hdr_full_cache, KM_SLEEP); + + /* + * A b_spa of 0 is used to indicate that this header is + * a marker. This fact is used in arc_adjust_type() and + * arc_evict_state_impl(). + */ + markers[i]->b_spa = 0; + + mls = multilist_sublist_lock(ml, i); + multilist_sublist_insert_tail(mls, markers[i]); + multilist_sublist_unlock(mls); + } + + /* + * While we haven't hit our target number of bytes to evict, or + * we're evicting all available buffers. + */ + while (total_evicted < bytes || bytes == ARC_EVICT_ALL) { + int sublist_idx = multilist_get_random_index(ml); + uint64_t scan_evicted = 0; + + /* + * Try to reduce pinned dnodes with a floor of arc_dnode_limit. + * Request that 10% of the LRUs be scanned by the superblock + * shrinker. + */ + if (type == ARC_BUFC_DATA && arc_dnode_size > arc_dnode_limit) + arc_prune_async((arc_dnode_size - arc_dnode_limit) / + sizeof (dnode_t) / zfs_arc_dnode_reduce_percent); + + /* + * Start eviction using a randomly selected sublist, + * this is to try and evenly balance eviction across all + * sublists. Always starting at the same sublist + * (e.g. index 0) would cause evictions to favor certain + * sublists over others. + */ + for (i = 0; i < num_sublists; i++) { + uint64_t bytes_remaining; + uint64_t bytes_evicted; + + if (bytes == ARC_EVICT_ALL) + bytes_remaining = ARC_EVICT_ALL; + else if (total_evicted < bytes) + bytes_remaining = bytes - total_evicted; + else + break; + + bytes_evicted = arc_evict_state_impl(ml, sublist_idx, + markers[sublist_idx], spa, bytes_remaining); + + scan_evicted += bytes_evicted; + total_evicted += bytes_evicted; + + /* we've reached the end, wrap to the beginning */ + if (++sublist_idx >= num_sublists) + sublist_idx = 0; + } + + /* + * If we didn't evict anything during this scan, we have + * no reason to believe we'll evict more during another + * scan, so break the loop. + */ + if (scan_evicted == 0) { + /* This isn't possible, let's make that obvious */ + ASSERT3S(bytes, !=, 0); + + /* + * When bytes is ARC_EVICT_ALL, the only way to + * break the loop is when scan_evicted is zero. + * In that case, we actually have evicted enough, + * so we don't want to increment the kstat. + */ + if (bytes != ARC_EVICT_ALL) { + ASSERT3S(total_evicted, <, bytes); + ARCSTAT_BUMP(arcstat_evict_not_enough); + } + + break; + } + } + + for (i = 0; i < num_sublists; i++) { + multilist_sublist_t *mls = multilist_sublist_lock(ml, i); + multilist_sublist_remove(mls, markers[i]); + multilist_sublist_unlock(mls); + + kmem_cache_free(hdr_full_cache, markers[i]); + } + kmem_free(markers, sizeof (*markers) * num_sublists); + + return (total_evicted); +} + +/* + * Flush all "evictable" data of the given type from the arc state + * specified. This will not evict any "active" buffers (i.e. referenced). + * + * When 'retry' is set to B_FALSE, the function will make a single pass + * over the state and evict any buffers that it can. Since it doesn't + * continually retry the eviction, it might end up leaving some buffers + * in the ARC due to lock misses. + * + * When 'retry' is set to B_TRUE, the function will continually retry the + * eviction until *all* evictable buffers have been removed from the + * state. As a result, if concurrent insertions into the state are + * allowed (e.g. if the ARC isn't shutting down), this function might + * wind up in an infinite loop, continually trying to evict buffers. + */ +static uint64_t +arc_flush_state(arc_state_t *state, uint64_t spa, arc_buf_contents_t type, + boolean_t retry) +{ + uint64_t evicted = 0; + + while (refcount_count(&state->arcs_esize[type]) != 0) { + evicted += arc_evict_state(state, spa, ARC_EVICT_ALL, type); + + if (!retry) + break; + } + + return (evicted); +} + +/* + * Helper function for arc_prune_async() it is responsible for safely + * handling the execution of a registered arc_prune_func_t. + */ +static void +arc_prune_task(void *ptr) +{ + arc_prune_t *ap = (arc_prune_t *)ptr; + arc_prune_func_t *func = ap->p_pfunc; + + if (func != NULL) + func(ap->p_adjust, ap->p_private); + + refcount_remove(&ap->p_refcnt, func); +} + +/* + * Notify registered consumers they must drop holds on a portion of the ARC + * buffered they reference. This provides a mechanism to ensure the ARC can + * honor the arc_meta_limit and reclaim otherwise pinned ARC buffers. This + * is analogous to dnlc_reduce_cache() but more generic. + * + * This operation is performed asynchronously so it may be safely called + * in the context of the arc_reclaim_thread(). A reference is taken here + * for each registered arc_prune_t and the arc_prune_task() is responsible + * for releasing it once the registered arc_prune_func_t has completed. + */ +static void +arc_prune_async(int64_t adjust) +{ + arc_prune_t *ap; + + mutex_enter(&arc_prune_mtx); + for (ap = list_head(&arc_prune_list); ap != NULL; + ap = list_next(&arc_prune_list, ap)) { + + if (refcount_count(&ap->p_refcnt) >= 2) + continue; + + refcount_add(&ap->p_refcnt, ap->p_pfunc); + ap->p_adjust = adjust; + if (taskq_dispatch(arc_prune_taskq, arc_prune_task, + ap, TQ_SLEEP) == TASKQID_INVALID) { + refcount_remove(&ap->p_refcnt, ap->p_pfunc); + continue; + } + ARCSTAT_BUMP(arcstat_prune); + } + mutex_exit(&arc_prune_mtx); +} + +/* + * Evict the specified number of bytes from the state specified, + * restricting eviction to the spa and type given. This function + * prevents us from trying to evict more from a state's list than + * is "evictable", and to skip evicting altogether when passed a + * negative value for "bytes". In contrast, arc_evict_state() will + * evict everything it can, when passed a negative value for "bytes". + */ +static uint64_t +arc_adjust_impl(arc_state_t *state, uint64_t spa, int64_t bytes, + arc_buf_contents_t type) +{ + int64_t delta; + + if (bytes > 0 && refcount_count(&state->arcs_esize[type]) > 0) { + delta = MIN(refcount_count(&state->arcs_esize[type]), bytes); + return (arc_evict_state(state, spa, delta, type)); + } + + return (0); +} + +/* + * The goal of this function is to evict enough meta data buffers from the + * ARC in order to enforce the arc_meta_limit. Achieving this is slightly + * more complicated than it appears because it is common for data buffers + * to have holds on meta data buffers. In addition, dnode meta data buffers + * will be held by the dnodes in the block preventing them from being freed. + * This means we can't simply traverse the ARC and expect to always find + * enough unheld meta data buffer to release. + * + * Therefore, this function has been updated to make alternating passes + * over the ARC releasing data buffers and then newly unheld meta data + * buffers. This ensures forward progress is maintained and arc_meta_used + * will decrease. Normally this is sufficient, but if required the ARC + * will call the registered prune callbacks causing dentry and inodes to + * be dropped from the VFS cache. This will make dnode meta data buffers + * available for reclaim. + */ +static uint64_t +arc_adjust_meta_balanced(void) +{ + int64_t delta, prune = 0, adjustmnt; + uint64_t total_evicted = 0; + arc_buf_contents_t type = ARC_BUFC_DATA; + int restarts = MAX(zfs_arc_meta_adjust_restarts, 0); + +restart: + /* + * This slightly differs than the way we evict from the mru in + * arc_adjust because we don't have a "target" value (i.e. no + * "meta" arc_p). As a result, I think we can completely + * cannibalize the metadata in the MRU before we evict the + * metadata from the MFU. I think we probably need to implement a + * "metadata arc_p" value to do this properly. + */ + adjustmnt = arc_meta_used - arc_meta_limit; + + if (adjustmnt > 0 && refcount_count(&arc_mru->arcs_esize[type]) > 0) { + delta = MIN(refcount_count(&arc_mru->arcs_esize[type]), + adjustmnt); + total_evicted += arc_adjust_impl(arc_mru, 0, delta, type); + adjustmnt -= delta; + } + + /* + * We can't afford to recalculate adjustmnt here. If we do, + * new metadata buffers can sneak into the MRU or ANON lists, + * thus penalize the MFU metadata. Although the fudge factor is + * small, it has been empirically shown to be significant for + * certain workloads (e.g. creating many empty directories). As + * such, we use the original calculation for adjustmnt, and + * simply decrement the amount of data evicted from the MRU. + */ + + if (adjustmnt > 0 && refcount_count(&arc_mfu->arcs_esize[type]) > 0) { + delta = MIN(refcount_count(&arc_mfu->arcs_esize[type]), + adjustmnt); + total_evicted += arc_adjust_impl(arc_mfu, 0, delta, type); + } + + adjustmnt = arc_meta_used - arc_meta_limit; + + if (adjustmnt > 0 && + refcount_count(&arc_mru_ghost->arcs_esize[type]) > 0) { + delta = MIN(adjustmnt, + refcount_count(&arc_mru_ghost->arcs_esize[type])); + total_evicted += arc_adjust_impl(arc_mru_ghost, 0, delta, type); + adjustmnt -= delta; + } + + if (adjustmnt > 0 && + refcount_count(&arc_mfu_ghost->arcs_esize[type]) > 0) { + delta = MIN(adjustmnt, + refcount_count(&arc_mfu_ghost->arcs_esize[type])); + total_evicted += arc_adjust_impl(arc_mfu_ghost, 0, delta, type); + } + + /* + * If after attempting to make the requested adjustment to the ARC + * the meta limit is still being exceeded then request that the + * higher layers drop some cached objects which have holds on ARC + * meta buffers. Requests to the upper layers will be made with + * increasingly large scan sizes until the ARC is below the limit. + */ + if (arc_meta_used > arc_meta_limit) { + if (type == ARC_BUFC_DATA) { + type = ARC_BUFC_METADATA; + } else { + type = ARC_BUFC_DATA; + + if (zfs_arc_meta_prune) { + prune += zfs_arc_meta_prune; + arc_prune_async(prune); + } + } + + if (restarts > 0) { + restarts--; + goto restart; + } + } + return (total_evicted); +} + +/* + * Evict metadata buffers from the cache, such that arc_meta_used is + * capped by the arc_meta_limit tunable. + */ +static uint64_t +arc_adjust_meta_only(void) +{ + uint64_t total_evicted = 0; + int64_t target; + + /* + * If we're over the meta limit, we want to evict enough + * metadata to get back under the meta limit. We don't want to + * evict so much that we drop the MRU below arc_p, though. If + * we're over the meta limit more than we're over arc_p, we + * evict some from the MRU here, and some from the MFU below. + */ + target = MIN((int64_t)(arc_meta_used - arc_meta_limit), + (int64_t)(refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) - arc_p)); + + total_evicted += arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA); + + /* + * Similar to the above, we want to evict enough bytes to get us + * below the meta limit, but not so much as to drop us below the + * space allotted to the MFU (which is defined as arc_c - arc_p). + */ + target = MIN((int64_t)(arc_meta_used - arc_meta_limit), + (int64_t)(refcount_count(&arc_mfu->arcs_size) - (arc_c - arc_p))); + + total_evicted += arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA); + + return (total_evicted); +} + +static uint64_t +arc_adjust_meta(void) +{ + if (zfs_arc_meta_strategy == ARC_STRATEGY_META_ONLY) + return (arc_adjust_meta_only()); + else + return (arc_adjust_meta_balanced()); +} + +/* + * Return the type of the oldest buffer in the given arc state + * + * This function will select a random sublist of type ARC_BUFC_DATA and + * a random sublist of type ARC_BUFC_METADATA. The tail of each sublist + * is compared, and the type which contains the "older" buffer will be + * returned. + */ +static arc_buf_contents_t +arc_adjust_type(arc_state_t *state) +{ + multilist_t *data_ml = state->arcs_list[ARC_BUFC_DATA]; + multilist_t *meta_ml = state->arcs_list[ARC_BUFC_METADATA]; + int data_idx = multilist_get_random_index(data_ml); + int meta_idx = multilist_get_random_index(meta_ml); + multilist_sublist_t *data_mls; + multilist_sublist_t *meta_mls; + arc_buf_contents_t type; + arc_buf_hdr_t *data_hdr; + arc_buf_hdr_t *meta_hdr; + + /* + * We keep the sublist lock until we're finished, to prevent + * the headers from being destroyed via arc_evict_state(). + */ + data_mls = multilist_sublist_lock(data_ml, data_idx); + meta_mls = multilist_sublist_lock(meta_ml, meta_idx); + + /* + * These two loops are to ensure we skip any markers that + * might be at the tail of the lists due to arc_evict_state(). + */ + + for (data_hdr = multilist_sublist_tail(data_mls); data_hdr != NULL; + data_hdr = multilist_sublist_prev(data_mls, data_hdr)) { + if (data_hdr->b_spa != 0) + break; + } + + for (meta_hdr = multilist_sublist_tail(meta_mls); meta_hdr != NULL; + meta_hdr = multilist_sublist_prev(meta_mls, meta_hdr)) { + if (meta_hdr->b_spa != 0) + break; + } + + if (data_hdr == NULL && meta_hdr == NULL) { + type = ARC_BUFC_DATA; + } else if (data_hdr == NULL) { + ASSERT3P(meta_hdr, !=, NULL); + type = ARC_BUFC_METADATA; + } else if (meta_hdr == NULL) { + ASSERT3P(data_hdr, !=, NULL); + type = ARC_BUFC_DATA; + } else { + ASSERT3P(data_hdr, !=, NULL); + ASSERT3P(meta_hdr, !=, NULL); + + /* The headers can't be on the sublist without an L1 header */ + ASSERT(HDR_HAS_L1HDR(data_hdr)); + ASSERT(HDR_HAS_L1HDR(meta_hdr)); + + if (data_hdr->b_l1hdr.b_arc_access < + meta_hdr->b_l1hdr.b_arc_access) { + type = ARC_BUFC_DATA; + } else { + type = ARC_BUFC_METADATA; + } + } + + multilist_sublist_unlock(meta_mls); + multilist_sublist_unlock(data_mls); + + return (type); +} + +/* + * Evict buffers from the cache, such that arc_size is capped by arc_c. + */ +static uint64_t +arc_adjust(void) +{ + uint64_t total_evicted = 0; + uint64_t bytes; + int64_t target; + + /* + * If we're over arc_meta_limit, we want to correct that before + * potentially evicting data buffers below. + */ + total_evicted += arc_adjust_meta(); + + /* + * Adjust MRU size + * + * If we're over the target cache size, we want to evict enough + * from the list to get back to our target size. We don't want + * to evict too much from the MRU, such that it drops below + * arc_p. So, if we're over our target cache size more than + * the MRU is over arc_p, we'll evict enough to get back to + * arc_p here, and then evict more from the MFU below. + */ + target = MIN((int64_t)(arc_size - arc_c), + (int64_t)(refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) + arc_meta_used - arc_p)); + + /* + * If we're below arc_meta_min, always prefer to evict data. + * Otherwise, try to satisfy the requested number of bytes to + * evict from the type which contains older buffers; in an + * effort to keep newer buffers in the cache regardless of their + * type. If we cannot satisfy the number of bytes from this + * type, spill over into the next type. + */ + if (arc_adjust_type(arc_mru) == ARC_BUFC_METADATA && + arc_meta_used > arc_meta_min) { + bytes = arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA); + total_evicted += bytes; + + /* + * If we couldn't evict our target number of bytes from + * metadata, we try to get the rest from data. + */ + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_DATA); + } else { + bytes = arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_DATA); + total_evicted += bytes; + + /* + * If we couldn't evict our target number of bytes from + * data, we try to get the rest from metadata. + */ + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mru, 0, target, ARC_BUFC_METADATA); + } + + /* + * Adjust MFU size + * + * Now that we've tried to evict enough from the MRU to get its + * size back to arc_p, if we're still above the target cache + * size, we evict the rest from the MFU. + */ + target = arc_size - arc_c; + + if (arc_adjust_type(arc_mfu) == ARC_BUFC_METADATA && + arc_meta_used > arc_meta_min) { + bytes = arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA); + total_evicted += bytes; + + /* + * If we couldn't evict our target number of bytes from + * metadata, we try to get the rest from data. + */ + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_DATA); + } else { + bytes = arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_DATA); + total_evicted += bytes; + + /* + * If we couldn't evict our target number of bytes from + * data, we try to get the rest from data. + */ + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mfu, 0, target, ARC_BUFC_METADATA); + } + + /* + * Adjust ghost lists + * + * In addition to the above, the ARC also defines target values + * for the ghost lists. The sum of the mru list and mru ghost + * list should never exceed the target size of the cache, and + * the sum of the mru list, mfu list, mru ghost list, and mfu + * ghost list should never exceed twice the target size of the + * cache. The following logic enforces these limits on the ghost + * caches, and evicts from them as needed. + */ + target = refcount_count(&arc_mru->arcs_size) + + refcount_count(&arc_mru_ghost->arcs_size) - arc_c; + + bytes = arc_adjust_impl(arc_mru_ghost, 0, target, ARC_BUFC_DATA); + total_evicted += bytes; + + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mru_ghost, 0, target, ARC_BUFC_METADATA); + + /* + * We assume the sum of the mru list and mfu list is less than + * or equal to arc_c (we enforced this above), which means we + * can use the simpler of the two equations below: + * + * mru + mfu + mru ghost + mfu ghost <= 2 * arc_c + * mru ghost + mfu ghost <= arc_c + */ + target = refcount_count(&arc_mru_ghost->arcs_size) + + refcount_count(&arc_mfu_ghost->arcs_size) - arc_c; + + bytes = arc_adjust_impl(arc_mfu_ghost, 0, target, ARC_BUFC_DATA); + total_evicted += bytes; + + target -= bytes; + + total_evicted += + arc_adjust_impl(arc_mfu_ghost, 0, target, ARC_BUFC_METADATA); + + return (total_evicted); +} + +void +arc_flush(spa_t *spa, boolean_t retry) +{ + uint64_t guid = 0; + + /* + * If retry is B_TRUE, a spa must not be specified since we have + * no good way to determine if all of a spa's buffers have been + * evicted from an arc state. + */ + ASSERT(!retry || spa == 0); + + if (spa != NULL) + guid = spa_load_guid(spa); + + (void) arc_flush_state(arc_mru, guid, ARC_BUFC_DATA, retry); + (void) arc_flush_state(arc_mru, guid, ARC_BUFC_METADATA, retry); + + (void) arc_flush_state(arc_mfu, guid, ARC_BUFC_DATA, retry); + (void) arc_flush_state(arc_mfu, guid, ARC_BUFC_METADATA, retry); + + (void) arc_flush_state(arc_mru_ghost, guid, ARC_BUFC_DATA, retry); + (void) arc_flush_state(arc_mru_ghost, guid, ARC_BUFC_METADATA, retry); + + (void) arc_flush_state(arc_mfu_ghost, guid, ARC_BUFC_DATA, retry); + (void) arc_flush_state(arc_mfu_ghost, guid, ARC_BUFC_METADATA, retry); +} + +void +arc_shrink(int64_t to_free) +{ + uint64_t c = arc_c; + + if (c > to_free && c - to_free > arc_c_min) { + arc_c = c - to_free; + atomic_add_64(&arc_p, -(arc_p >> arc_shrink_shift)); + if (arc_c > arc_size) + arc_c = MAX(arc_size, arc_c_min); + if (arc_p > arc_c) + arc_p = (arc_c >> 1); + ASSERT(arc_c >= arc_c_min); + ASSERT((int64_t)arc_p >= 0); + } else { + arc_c = arc_c_min; + } + + if (arc_size > arc_c) + (void) arc_adjust(); +} + +/* + * Return maximum amount of memory that we could possibly use. Reduced + * to half of all memory in user space which is primarily used for testing. + */ +static uint64_t +arc_all_memory(void) +{ +#ifdef _KERNEL +#ifdef CONFIG_HIGHMEM + return (ptob(totalram_pages - totalhigh_pages)); +#else + return (ptob(totalram_pages)); +#endif /* CONFIG_HIGHMEM */ +#else + return (ptob(physmem) / 2); +#endif /* _KERNEL */ +} + +/* + * Return the amount of memory that is considered free. In user space + * which is primarily used for testing we pretend that free memory ranges + * from 0-20% of all memory. + */ +static uint64_t +arc_free_memory(void) +{ +#ifdef _KERNEL +#ifdef CONFIG_HIGHMEM + struct sysinfo si; + si_meminfo(&si); + return (ptob(si.freeram - si.freehigh)); +#else +#ifdef ZFS_GLOBAL_NODE_PAGE_STATE + return (ptob(nr_free_pages() + + global_node_page_state(NR_INACTIVE_FILE) + + global_node_page_state(NR_INACTIVE_ANON) + + global_node_page_state(NR_SLAB_RECLAIMABLE))); +#else + return (ptob(nr_free_pages() + + global_page_state(NR_INACTIVE_FILE) + + global_page_state(NR_INACTIVE_ANON) + + global_page_state(NR_SLAB_RECLAIMABLE))); +#endif /* ZFS_GLOBAL_NODE_PAGE_STATE */ +#endif /* CONFIG_HIGHMEM */ +#else + return (spa_get_random(arc_all_memory() * 20 / 100)); +#endif /* _KERNEL */ +} + +typedef enum free_memory_reason_t { + FMR_UNKNOWN, + FMR_NEEDFREE, + FMR_LOTSFREE, + FMR_SWAPFS_MINFREE, + FMR_PAGES_PP_MAXIMUM, + FMR_HEAP_ARENA, + FMR_ZIO_ARENA, +} free_memory_reason_t; + +int64_t last_free_memory; +free_memory_reason_t last_free_reason; + +#ifdef _KERNEL +/* + * Additional reserve of pages for pp_reserve. + */ +int64_t arc_pages_pp_reserve = 64; + +/* + * Additional reserve of pages for swapfs. + */ +int64_t arc_swapfs_reserve = 64; +#endif /* _KERNEL */ + +/* + * Return the amount of memory that can be consumed before reclaim will be + * needed. Positive if there is sufficient free memory, negative indicates + * the amount of memory that needs to be freed up. + */ +static int64_t +arc_available_memory(void) +{ + int64_t lowest = INT64_MAX; + free_memory_reason_t r = FMR_UNKNOWN; +#ifdef _KERNEL + int64_t n; +#ifdef __linux__ +#ifdef freemem +#undef freemem +#endif + pgcnt_t needfree = btop(arc_need_free); + pgcnt_t lotsfree = btop(arc_sys_free); + pgcnt_t desfree = 0; + pgcnt_t freemem = btop(arc_free_memory()); +#endif + + if (needfree > 0) { + n = PAGESIZE * (-needfree); + if (n < lowest) { + lowest = n; + r = FMR_NEEDFREE; + } + } + + /* + * check that we're out of range of the pageout scanner. It starts to + * schedule paging if freemem is less than lotsfree and needfree. + * lotsfree is the high-water mark for pageout, and needfree is the + * number of needed free pages. We add extra pages here to make sure + * the scanner doesn't start up while we're freeing memory. + */ + n = PAGESIZE * (freemem - lotsfree - needfree - desfree); + if (n < lowest) { + lowest = n; + r = FMR_LOTSFREE; + } + +#ifndef __linux__ + /* + * check to make sure that swapfs has enough space so that anon + * reservations can still succeed. anon_resvmem() checks that the + * availrmem is greater than swapfs_minfree, and the number of reserved + * swap pages. We also add a bit of extra here just to prevent + * circumstances from getting really dire. + */ + n = PAGESIZE * (availrmem - swapfs_minfree - swapfs_reserve - + desfree - arc_swapfs_reserve); + if (n < lowest) { + lowest = n; + r = FMR_SWAPFS_MINFREE; + } + + /* + * Check that we have enough availrmem that memory locking (e.g., via + * mlock(3C) or memcntl(2)) can still succeed. (pages_pp_maximum + * stores the number of pages that cannot be locked; when availrmem + * drops below pages_pp_maximum, page locking mechanisms such as + * page_pp_lock() will fail.) + */ + n = PAGESIZE * (availrmem - pages_pp_maximum - + arc_pages_pp_reserve); + if (n < lowest) { + lowest = n; + r = FMR_PAGES_PP_MAXIMUM; + } +#endif + +#if defined(_ILP32) + /* + * If we're on a 32-bit platform, it's possible that we'll exhaust the + * kernel heap space before we ever run out of available physical + * memory. Most checks of the size of the heap_area compare against + * tune.t_minarmem, which is the minimum available real memory that we + * can have in the system. However, this is generally fixed at 25 pages + * which is so low that it's useless. In this comparison, we seek to + * calculate the total heap-size, and reclaim if more than 3/4ths of the + * heap is allocated. (Or, in the calculation, if less than 1/4th is + * free) + */ + n = vmem_size(heap_arena, VMEM_FREE) - + (vmem_size(heap_arena, VMEM_FREE | VMEM_ALLOC) >> 2); + if (n < lowest) { + lowest = n; + r = FMR_HEAP_ARENA; + } +#endif + + /* + * If zio data pages are being allocated out of a separate heap segment, + * then enforce that the size of available vmem for this arena remains + * above about 1/4th (1/(2^arc_zio_arena_free_shift)) free. + * + * Note that reducing the arc_zio_arena_free_shift keeps more virtual + * memory (in the zio_arena) free, which can avoid memory + * fragmentation issues. + */ + if (zio_arena != NULL) { + n = (int64_t)vmem_size(zio_arena, VMEM_FREE) - + (vmem_size(zio_arena, VMEM_ALLOC) >> + arc_zio_arena_free_shift); + if (n < lowest) { + lowest = n; + r = FMR_ZIO_ARENA; + } + } +#else /* _KERNEL */ + /* Every 100 calls, free a small amount */ + if (spa_get_random(100) == 0) + lowest = -1024; +#endif /* _KERNEL */ + + last_free_memory = lowest; + last_free_reason = r; + + return (lowest); +} + +/* + * Determine if the system is under memory pressure and is asking + * to reclaim memory. A return value of B_TRUE indicates that the system + * is under memory pressure and that the arc should adjust accordingly. + */ +static boolean_t +arc_reclaim_needed(void) +{ + return (arc_available_memory() < 0); +} + +static void +arc_kmem_reap_now(void) +{ + size_t i; + kmem_cache_t *prev_cache = NULL; + kmem_cache_t *prev_data_cache = NULL; + extern kmem_cache_t *zio_buf_cache[]; + extern kmem_cache_t *zio_data_buf_cache[]; + extern kmem_cache_t *range_seg_cache; + +#ifdef _KERNEL + if ((arc_meta_used >= arc_meta_limit) && zfs_arc_meta_prune) { + /* + * We are exceeding our meta-data cache limit. + * Prune some entries to release holds on meta-data. + */ + arc_prune_async(zfs_arc_meta_prune); + } +#if defined(_ILP32) + /* + * Reclaim unused memory from all kmem caches. + */ + kmem_reap(); +#endif +#endif + + for (i = 0; i < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; i++) { +#if defined(_ILP32) + /* reach upper limit of cache size on 32-bit */ + if (zio_buf_cache[i] == NULL) + break; +#endif + if (zio_buf_cache[i] != prev_cache) { + prev_cache = zio_buf_cache[i]; + kmem_cache_reap_now(zio_buf_cache[i]); + } + if (zio_data_buf_cache[i] != prev_data_cache) { + prev_data_cache = zio_data_buf_cache[i]; + kmem_cache_reap_now(zio_data_buf_cache[i]); + } + } + kmem_cache_reap_now(buf_cache); + kmem_cache_reap_now(hdr_full_cache); + kmem_cache_reap_now(hdr_l2only_cache); + kmem_cache_reap_now(range_seg_cache); + + if (zio_arena != NULL) { + /* + * Ask the vmem arena to reclaim unused memory from its + * quantum caches. + */ + vmem_qcache_reap(zio_arena); + } +} + +/* + * Threads can block in arc_get_data_impl() waiting for this thread to evict + * enough data and signal them to proceed. When this happens, the threads in + * arc_get_data_impl() are sleeping while holding the hash lock for their + * particular arc header. Thus, we must be careful to never sleep on a + * hash lock in this thread. This is to prevent the following deadlock: + * + * - Thread A sleeps on CV in arc_get_data_impl() holding hash lock "L", + * waiting for the reclaim thread to signal it. + * + * - arc_reclaim_thread() tries to acquire hash lock "L" using mutex_enter, + * fails, and goes to sleep forever. + * + * This possible deadlock is avoided by always acquiring a hash lock + * using mutex_tryenter() from arc_reclaim_thread(). + */ +static void +arc_reclaim_thread(void) +{ + fstrans_cookie_t cookie = spl_fstrans_mark(); + hrtime_t growtime = 0; + callb_cpr_t cpr; + + CALLB_CPR_INIT(&cpr, &arc_reclaim_lock, callb_generic_cpr, FTAG); + + mutex_enter(&arc_reclaim_lock); + while (!arc_reclaim_thread_exit) { + int64_t to_free; + uint64_t evicted = 0; + uint64_t need_free = arc_need_free; + arc_tuning_update(); + + /* + * This is necessary in order for the mdb ::arc dcmd to + * show up to date information. Since the ::arc command + * does not call the kstat's update function, without + * this call, the command may show stale stats for the + * anon, mru, mru_ghost, mfu, and mfu_ghost lists. Even + * with this change, the data might be up to 1 second + * out of date; but that should suffice. The arc_state_t + * structures can be queried directly if more accurate + * information is needed. + */ +#ifndef __linux__ + if (arc_ksp != NULL) + arc_ksp->ks_update(arc_ksp, KSTAT_READ); +#endif + mutex_exit(&arc_reclaim_lock); + + /* + * We call arc_adjust() before (possibly) calling + * arc_kmem_reap_now(), so that we can wake up + * arc_get_data_buf() sooner. + */ + evicted = arc_adjust(); + + int64_t free_memory = arc_available_memory(); + if (free_memory < 0) { + + arc_no_grow = B_TRUE; + arc_warm = B_TRUE; + + /* + * Wait at least zfs_grow_retry (default 5) seconds + * before considering growing. + */ + growtime = gethrtime() + SEC2NSEC(arc_grow_retry); + + arc_kmem_reap_now(); + + /* + * If we are still low on memory, shrink the ARC + * so that we have arc_shrink_min free space. + */ + free_memory = arc_available_memory(); + + to_free = (arc_c >> arc_shrink_shift) - free_memory; + if (to_free > 0) { +#ifdef _KERNEL + to_free = MAX(to_free, need_free); +#endif + arc_shrink(to_free); + } + } else if (free_memory < arc_c >> arc_no_grow_shift) { + arc_no_grow = B_TRUE; + } else if (gethrtime() >= growtime) { + arc_no_grow = B_FALSE; + } + + mutex_enter(&arc_reclaim_lock); + + /* + * If evicted is zero, we couldn't evict anything via + * arc_adjust(). This could be due to hash lock + * collisions, but more likely due to the majority of + * arc buffers being unevictable. Therefore, even if + * arc_size is above arc_c, another pass is unlikely to + * be helpful and could potentially cause us to enter an + * infinite loop. + */ + if (arc_size <= arc_c || evicted == 0) { + /* + * We're either no longer overflowing, or we + * can't evict anything more, so we should wake + * up any threads before we go to sleep and remove + * the bytes we were working on from arc_need_free + * since nothing more will be done here. + */ + cv_broadcast(&arc_reclaim_waiters_cv); + ARCSTAT_INCR(arcstat_need_free, -need_free); + + /* + * Block until signaled, or after one second (we + * might need to perform arc_kmem_reap_now() + * even if we aren't being signalled) + */ + CALLB_CPR_SAFE_BEGIN(&cpr); + (void) cv_timedwait_sig_hires(&arc_reclaim_thread_cv, + &arc_reclaim_lock, SEC2NSEC(1), MSEC2NSEC(1), 0); + CALLB_CPR_SAFE_END(&cpr, &arc_reclaim_lock); + } + } + + arc_reclaim_thread_exit = B_FALSE; + cv_broadcast(&arc_reclaim_thread_cv); + CALLB_CPR_EXIT(&cpr); /* drops arc_reclaim_lock */ + spl_fstrans_unmark(cookie); + thread_exit(); +} + +#ifdef _KERNEL +/* + * Determine the amount of memory eligible for eviction contained in the + * ARC. All clean data reported by the ghost lists can always be safely + * evicted. Due to arc_c_min, the same does not hold for all clean data + * contained by the regular mru and mfu lists. + * + * In the case of the regular mru and mfu lists, we need to report as + * much clean data as possible, such that evicting that same reported + * data will not bring arc_size below arc_c_min. Thus, in certain + * circumstances, the total amount of clean data in the mru and mfu + * lists might not actually be evictable. + * + * The following two distinct cases are accounted for: + * + * 1. The sum of the amount of dirty data contained by both the mru and + * mfu lists, plus the ARC's other accounting (e.g. the anon list), + * is greater than or equal to arc_c_min. + * (i.e. amount of dirty data >= arc_c_min) + * + * This is the easy case; all clean data contained by the mru and mfu + * lists is evictable. Evicting all clean data can only drop arc_size + * to the amount of dirty data, which is greater than arc_c_min. + * + * 2. The sum of the amount of dirty data contained by both the mru and + * mfu lists, plus the ARC's other accounting (e.g. the anon list), + * is less than arc_c_min. + * (i.e. arc_c_min > amount of dirty data) + * + * 2.1. arc_size is greater than or equal arc_c_min. + * (i.e. arc_size >= arc_c_min > amount of dirty data) + * + * In this case, not all clean data from the regular mru and mfu + * lists is actually evictable; we must leave enough clean data + * to keep arc_size above arc_c_min. Thus, the maximum amount of + * evictable data from the two lists combined, is exactly the + * difference between arc_size and arc_c_min. + * + * 2.2. arc_size is less than arc_c_min + * (i.e. arc_c_min > arc_size > amount of dirty data) + * + * In this case, none of the data contained in the mru and mfu + * lists is evictable, even if it's clean. Since arc_size is + * already below arc_c_min, evicting any more would only + * increase this negative difference. + */ +static uint64_t +arc_evictable_memory(void) +{ + uint64_t arc_clean = + refcount_count(&arc_mru->arcs_esize[ARC_BUFC_DATA]) + + refcount_count(&arc_mru->arcs_esize[ARC_BUFC_METADATA]) + + refcount_count(&arc_mfu->arcs_esize[ARC_BUFC_DATA]) + + refcount_count(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]); + uint64_t arc_dirty = MAX((int64_t)arc_size - (int64_t)arc_clean, 0); + + /* + * Scale reported evictable memory in proportion to page cache, cap + * at specified min/max. + */ +#ifdef ZFS_GLOBAL_NODE_PAGE_STATE + uint64_t min = (ptob(global_node_page_state(NR_FILE_PAGES)) / 100) * + zfs_arc_pc_percent; +#else + uint64_t min = (ptob(global_page_state(NR_FILE_PAGES)) / 100) * + zfs_arc_pc_percent; +#endif + min = MAX(arc_c_min, MIN(arc_c_max, min)); + + if (arc_dirty >= min) + return (arc_clean); + + return (MAX((int64_t)arc_size - (int64_t)min, 0)); +} + +/* + * If sc->nr_to_scan is zero, the caller is requesting a query of the + * number of objects which can potentially be freed. If it is nonzero, + * the request is to free that many objects. + * + * Linux kernels >= 3.12 have the count_objects and scan_objects callbacks + * in struct shrinker and also require the shrinker to return the number + * of objects freed. + * + * Older kernels require the shrinker to return the number of freeable + * objects following the freeing of nr_to_free. + */ +static spl_shrinker_t +__arc_shrinker_func(struct shrinker *shrink, struct shrink_control *sc) +{ + int64_t pages; + + /* The arc is considered warm once reclaim has occurred */ + if (unlikely(arc_warm == B_FALSE)) + arc_warm = B_TRUE; + + /* Return the potential number of reclaimable pages */ + pages = btop((int64_t)arc_evictable_memory()); + if (sc->nr_to_scan == 0) + return (pages); + + /* Not allowed to perform filesystem reclaim */ + if (!(sc->gfp_mask & __GFP_FS)) + return (SHRINK_STOP); + + /* Reclaim in progress */ + if (mutex_tryenter(&arc_reclaim_lock) == 0) { + ARCSTAT_INCR(arcstat_need_free, ptob(sc->nr_to_scan)); + return (0); + } + + mutex_exit(&arc_reclaim_lock); + + /* + * Evict the requested number of pages by shrinking arc_c the + * requested amount. + */ + if (pages > 0) { + arc_shrink(ptob(sc->nr_to_scan)); + if (current_is_kswapd()) + arc_kmem_reap_now(); +#ifdef HAVE_SPLIT_SHRINKER_CALLBACK + pages = MAX((int64_t)pages - + (int64_t)btop(arc_evictable_memory()), 0); +#else + pages = btop(arc_evictable_memory()); +#endif + /* + * We've shrunk what we can, wake up threads. + */ + cv_broadcast(&arc_reclaim_waiters_cv); + } else + pages = SHRINK_STOP; + + /* + * When direct reclaim is observed it usually indicates a rapid + * increase in memory pressure. This occurs because the kswapd + * threads were unable to asynchronously keep enough free memory + * available. In this case set arc_no_grow to briefly pause arc + * growth to avoid compounding the memory pressure. + */ + if (current_is_kswapd()) { + ARCSTAT_BUMP(arcstat_memory_indirect_count); + } else { + arc_no_grow = B_TRUE; + arc_kmem_reap_now(); + ARCSTAT_BUMP(arcstat_memory_direct_count); + } + + return (pages); +} +SPL_SHRINKER_CALLBACK_WRAPPER(arc_shrinker_func); + +SPL_SHRINKER_DECLARE(arc_shrinker, arc_shrinker_func, DEFAULT_SEEKS); +#endif /* _KERNEL */ + +/* + * Adapt arc info given the number of bytes we are trying to add and + * the state that we are coming from. This function is only called + * when we are adding new content to the cache. + */ +static void +arc_adapt(int bytes, arc_state_t *state) +{ + int mult; + uint64_t arc_p_min = (arc_c >> arc_p_min_shift); + int64_t mrug_size = refcount_count(&arc_mru_ghost->arcs_size); + int64_t mfug_size = refcount_count(&arc_mfu_ghost->arcs_size); + + if (state == arc_l2c_only) + return; + + ASSERT(bytes > 0); + /* + * Adapt the target size of the MRU list: + * - if we just hit in the MRU ghost list, then increase + * the target size of the MRU list. + * - if we just hit in the MFU ghost list, then increase + * the target size of the MFU list by decreasing the + * target size of the MRU list. + */ + if (state == arc_mru_ghost) { + mult = (mrug_size >= mfug_size) ? 1 : (mfug_size / mrug_size); + if (!zfs_arc_p_dampener_disable) + mult = MIN(mult, 10); /* avoid wild arc_p adjustment */ + + arc_p = MIN(arc_c - arc_p_min, arc_p + bytes * mult); + } else if (state == arc_mfu_ghost) { + uint64_t delta; + + mult = (mfug_size >= mrug_size) ? 1 : (mrug_size / mfug_size); + if (!zfs_arc_p_dampener_disable) + mult = MIN(mult, 10); + + delta = MIN(bytes * mult, arc_p); + arc_p = MAX(arc_p_min, arc_p - delta); + } + ASSERT((int64_t)arc_p >= 0); + + if (arc_reclaim_needed()) { + cv_signal(&arc_reclaim_thread_cv); + return; + } + + if (arc_no_grow) + return; + + if (arc_c >= arc_c_max) + return; + + /* + * If we're within (2 * maxblocksize) bytes of the target + * cache size, increment the target cache size + */ + ASSERT3U(arc_c, >=, 2ULL << SPA_MAXBLOCKSHIFT); + if (arc_size >= arc_c - (2ULL << SPA_MAXBLOCKSHIFT)) { + atomic_add_64(&arc_c, (int64_t)bytes); + if (arc_c > arc_c_max) + arc_c = arc_c_max; + else if (state == arc_anon) + atomic_add_64(&arc_p, (int64_t)bytes); + if (arc_p > arc_c) + arc_p = arc_c; + } + ASSERT((int64_t)arc_p >= 0); +} + +/* + * Check if arc_size has grown past our upper threshold, determined by + * zfs_arc_overflow_shift. + */ +static boolean_t +arc_is_overflowing(void) +{ + /* Always allow at least one block of overflow */ + uint64_t overflow = MAX(SPA_MAXBLOCKSIZE, + arc_c >> zfs_arc_overflow_shift); + + return (arc_size >= arc_c + overflow); +} + +static abd_t * +arc_get_data_abd(arc_buf_hdr_t *hdr, uint64_t size, void *tag) +{ + arc_buf_contents_t type = arc_buf_type(hdr); + + arc_get_data_impl(hdr, size, tag); + if (type == ARC_BUFC_METADATA) { + return (abd_alloc(size, B_TRUE)); + } else { + ASSERT(type == ARC_BUFC_DATA); + return (abd_alloc(size, B_FALSE)); + } +} + +static void * +arc_get_data_buf(arc_buf_hdr_t *hdr, uint64_t size, void *tag) +{ + arc_buf_contents_t type = arc_buf_type(hdr); + + arc_get_data_impl(hdr, size, tag); + if (type == ARC_BUFC_METADATA) { + return (zio_buf_alloc(size)); + } else { + ASSERT(type == ARC_BUFC_DATA); + return (zio_data_buf_alloc(size)); + } +} + +/* + * Allocate a block and return it to the caller. If we are hitting the + * hard limit for the cache size, we must sleep, waiting for the eviction + * thread to catch up. If we're past the target size but below the hard + * limit, we'll only signal the reclaim thread and continue on. + */ +static void +arc_get_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag) +{ + arc_state_t *state = hdr->b_l1hdr.b_state; + arc_buf_contents_t type = arc_buf_type(hdr); + + arc_adapt(size, state); + + /* + * If arc_size is currently overflowing, and has grown past our + * upper limit, we must be adding data faster than the evict + * thread can evict. Thus, to ensure we don't compound the + * problem by adding more data and forcing arc_size to grow even + * further past it's target size, we halt and wait for the + * eviction thread to catch up. + * + * It's also possible that the reclaim thread is unable to evict + * enough buffers to get arc_size below the overflow limit (e.g. + * due to buffers being un-evictable, or hash lock collisions). + * In this case, we want to proceed regardless if we're + * overflowing; thus we don't use a while loop here. + */ + if (arc_is_overflowing()) { + mutex_enter(&arc_reclaim_lock); + + /* + * Now that we've acquired the lock, we may no longer be + * over the overflow limit, lets check. + * + * We're ignoring the case of spurious wake ups. If that + * were to happen, it'd let this thread consume an ARC + * buffer before it should have (i.e. before we're under + * the overflow limit and were signalled by the reclaim + * thread). As long as that is a rare occurrence, it + * shouldn't cause any harm. + */ + if (arc_is_overflowing()) { + cv_signal(&arc_reclaim_thread_cv); + cv_wait(&arc_reclaim_waiters_cv, &arc_reclaim_lock); + } + + mutex_exit(&arc_reclaim_lock); + } + + VERIFY3U(hdr->b_type, ==, type); + if (type == ARC_BUFC_METADATA) { + arc_space_consume(size, ARC_SPACE_META); + } else { + arc_space_consume(size, ARC_SPACE_DATA); + } + + /* + * Update the state size. Note that ghost states have a + * "ghost size" and so don't need to be updated. + */ + if (!GHOST_STATE(state)) { + + (void) refcount_add_many(&state->arcs_size, size, tag); + + /* + * If this is reached via arc_read, the link is + * protected by the hash lock. If reached via + * arc_buf_alloc, the header should not be accessed by + * any other thread. And, if reached via arc_read_done, + * the hash lock will protect it if it's found in the + * hash table; otherwise no other thread should be + * trying to [add|remove]_reference it. + */ + if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) { + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + (void) refcount_add_many(&state->arcs_esize[type], + size, tag); + } + + /* + * If we are growing the cache, and we are adding anonymous + * data, and we have outgrown arc_p, update arc_p + */ + if (arc_size < arc_c && hdr->b_l1hdr.b_state == arc_anon && + (refcount_count(&arc_anon->arcs_size) + + refcount_count(&arc_mru->arcs_size) > arc_p)) + arc_p = MIN(arc_c, arc_p + size); + } +} + +static void +arc_free_data_abd(arc_buf_hdr_t *hdr, abd_t *abd, uint64_t size, void *tag) +{ + arc_free_data_impl(hdr, size, tag); + abd_free(abd); +} + +static void +arc_free_data_buf(arc_buf_hdr_t *hdr, void *buf, uint64_t size, void *tag) +{ + arc_buf_contents_t type = arc_buf_type(hdr); + + arc_free_data_impl(hdr, size, tag); + if (type == ARC_BUFC_METADATA) { + zio_buf_free(buf, size); + } else { + ASSERT(type == ARC_BUFC_DATA); + zio_data_buf_free(buf, size); + } +} + +/* + * Free the arc data buffer. + */ +static void +arc_free_data_impl(arc_buf_hdr_t *hdr, uint64_t size, void *tag) +{ + arc_state_t *state = hdr->b_l1hdr.b_state; + arc_buf_contents_t type = arc_buf_type(hdr); + + /* protected by hash lock, if in the hash table */ + if (multilist_link_active(&hdr->b_l1hdr.b_arc_node)) { + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + ASSERT(state != arc_anon && state != arc_l2c_only); + + (void) refcount_remove_many(&state->arcs_esize[type], + size, tag); + } + (void) refcount_remove_many(&state->arcs_size, size, tag); + + VERIFY3U(hdr->b_type, ==, type); + if (type == ARC_BUFC_METADATA) { + arc_space_return(size, ARC_SPACE_META); + } else { + ASSERT(type == ARC_BUFC_DATA); + arc_space_return(size, ARC_SPACE_DATA); + } +} + +/* + * This routine is called whenever a buffer is accessed. + * NOTE: the hash lock is dropped in this function. + */ +static void +arc_access(arc_buf_hdr_t *hdr, kmutex_t *hash_lock) +{ + clock_t now; + + ASSERT(MUTEX_HELD(hash_lock)); + ASSERT(HDR_HAS_L1HDR(hdr)); + + if (hdr->b_l1hdr.b_state == arc_anon) { + /* + * This buffer is not in the cache, and does not + * appear in our "ghost" list. Add the new buffer + * to the MRU state. + */ + + ASSERT0(hdr->b_l1hdr.b_arc_access); + hdr->b_l1hdr.b_arc_access = ddi_get_lbolt(); + DTRACE_PROBE1(new_state__mru, arc_buf_hdr_t *, hdr); + arc_change_state(arc_mru, hdr, hash_lock); + + } else if (hdr->b_l1hdr.b_state == arc_mru) { + now = ddi_get_lbolt(); + + /* + * If this buffer is here because of a prefetch, then either: + * - clear the flag if this is a "referencing" read + * (any subsequent access will bump this into the MFU state). + * or + * - move the buffer to the head of the list if this is + * another prefetch (to make it less likely to be evicted). + */ + if (HDR_PREFETCH(hdr)) { + if (refcount_count(&hdr->b_l1hdr.b_refcnt) == 0) { + /* link protected by hash lock */ + ASSERT(multilist_link_active( + &hdr->b_l1hdr.b_arc_node)); + } else { + arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH); + atomic_inc_32(&hdr->b_l1hdr.b_mru_hits); + ARCSTAT_BUMP(arcstat_mru_hits); + } + hdr->b_l1hdr.b_arc_access = now; + return; + } + + /* + * This buffer has been "accessed" only once so far, + * but it is still in the cache. Move it to the MFU + * state. + */ + if (ddi_time_after(now, hdr->b_l1hdr.b_arc_access + + ARC_MINTIME)) { + /* + * More than 125ms have passed since we + * instantiated this buffer. Move it to the + * most frequently used state. + */ + hdr->b_l1hdr.b_arc_access = now; + DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr); + arc_change_state(arc_mfu, hdr, hash_lock); + } + atomic_inc_32(&hdr->b_l1hdr.b_mru_hits); + ARCSTAT_BUMP(arcstat_mru_hits); + } else if (hdr->b_l1hdr.b_state == arc_mru_ghost) { + arc_state_t *new_state; + /* + * This buffer has been "accessed" recently, but + * was evicted from the cache. Move it to the + * MFU state. + */ + + if (HDR_PREFETCH(hdr)) { + new_state = arc_mru; + if (refcount_count(&hdr->b_l1hdr.b_refcnt) > 0) + arc_hdr_clear_flags(hdr, ARC_FLAG_PREFETCH); + DTRACE_PROBE1(new_state__mru, arc_buf_hdr_t *, hdr); + } else { + new_state = arc_mfu; + DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr); + } + + hdr->b_l1hdr.b_arc_access = ddi_get_lbolt(); + arc_change_state(new_state, hdr, hash_lock); + + atomic_inc_32(&hdr->b_l1hdr.b_mru_ghost_hits); + ARCSTAT_BUMP(arcstat_mru_ghost_hits); + } else if (hdr->b_l1hdr.b_state == arc_mfu) { + /* + * This buffer has been accessed more than once and is + * still in the cache. Keep it in the MFU state. + * + * NOTE: an add_reference() that occurred when we did + * the arc_read() will have kicked this off the list. + * If it was a prefetch, we will explicitly move it to + * the head of the list now. + */ + if ((HDR_PREFETCH(hdr)) != 0) { + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + /* link protected by hash_lock */ + ASSERT(multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + } + atomic_inc_32(&hdr->b_l1hdr.b_mfu_hits); + ARCSTAT_BUMP(arcstat_mfu_hits); + hdr->b_l1hdr.b_arc_access = ddi_get_lbolt(); + } else if (hdr->b_l1hdr.b_state == arc_mfu_ghost) { + arc_state_t *new_state = arc_mfu; + /* + * This buffer has been accessed more than once but has + * been evicted from the cache. Move it back to the + * MFU state. + */ + + if (HDR_PREFETCH(hdr)) { + /* + * This is a prefetch access... + * move this block back to the MRU state. + */ + ASSERT0(refcount_count(&hdr->b_l1hdr.b_refcnt)); + new_state = arc_mru; + } + + hdr->b_l1hdr.b_arc_access = ddi_get_lbolt(); + DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr); + arc_change_state(new_state, hdr, hash_lock); + + atomic_inc_32(&hdr->b_l1hdr.b_mfu_ghost_hits); + ARCSTAT_BUMP(arcstat_mfu_ghost_hits); + } else if (hdr->b_l1hdr.b_state == arc_l2c_only) { + /* + * This buffer is on the 2nd Level ARC. + */ + + hdr->b_l1hdr.b_arc_access = ddi_get_lbolt(); + DTRACE_PROBE1(new_state__mfu, arc_buf_hdr_t *, hdr); + arc_change_state(arc_mfu, hdr, hash_lock); + } else { + cmn_err(CE_PANIC, "invalid arc state 0x%p", + hdr->b_l1hdr.b_state); + } +} + +/* a generic arc_done_func_t which you can use */ +/* ARGSUSED */ +void +arc_bcopy_func(zio_t *zio, arc_buf_t *buf, void *arg) +{ + if (zio == NULL || zio->io_error == 0) + bcopy(buf->b_data, arg, arc_buf_size(buf)); + arc_buf_destroy(buf, arg); +} + +/* a generic arc_done_func_t */ +void +arc_getbuf_func(zio_t *zio, arc_buf_t *buf, void *arg) +{ + arc_buf_t **bufp = arg; + if (zio && zio->io_error) { + arc_buf_destroy(buf, arg); + *bufp = NULL; + } else { + *bufp = buf; + ASSERT(buf->b_data); + } +} + +static void +arc_hdr_verify(arc_buf_hdr_t *hdr, blkptr_t *bp) +{ + if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) { + ASSERT3U(HDR_GET_PSIZE(hdr), ==, 0); + ASSERT3U(HDR_GET_COMPRESS(hdr), ==, ZIO_COMPRESS_OFF); + } else { + if (HDR_COMPRESSION_ENABLED(hdr)) { + ASSERT3U(HDR_GET_COMPRESS(hdr), ==, + BP_GET_COMPRESS(bp)); + } + ASSERT3U(HDR_GET_LSIZE(hdr), ==, BP_GET_LSIZE(bp)); + ASSERT3U(HDR_GET_PSIZE(hdr), ==, BP_GET_PSIZE(bp)); + } +} + +static void +arc_read_done(zio_t *zio) +{ + arc_buf_hdr_t *hdr = zio->io_private; + kmutex_t *hash_lock = NULL; + arc_callback_t *callback_list; + arc_callback_t *acb; + boolean_t freeable = B_FALSE; + boolean_t no_zio_error = (zio->io_error == 0); + + /* + * The hdr was inserted into hash-table and removed from lists + * prior to starting I/O. We should find this header, since + * it's in the hash table, and it should be legit since it's + * not possible to evict it during the I/O. The only possible + * reason for it not to be found is if we were freed during the + * read. + */ + if (HDR_IN_HASH_TABLE(hdr)) { + arc_buf_hdr_t *found; + + ASSERT3U(hdr->b_birth, ==, BP_PHYSICAL_BIRTH(zio->io_bp)); + ASSERT3U(hdr->b_dva.dva_word[0], ==, + BP_IDENTITY(zio->io_bp)->dva_word[0]); + ASSERT3U(hdr->b_dva.dva_word[1], ==, + BP_IDENTITY(zio->io_bp)->dva_word[1]); + + found = buf_hash_find(hdr->b_spa, zio->io_bp, &hash_lock); + + ASSERT((found == hdr && + DVA_EQUAL(&hdr->b_dva, BP_IDENTITY(zio->io_bp))) || + (found == hdr && HDR_L2_READING(hdr))); + ASSERT3P(hash_lock, !=, NULL); + } + + if (no_zio_error) { + /* byteswap if necessary */ + if (BP_SHOULD_BYTESWAP(zio->io_bp)) { + if (BP_GET_LEVEL(zio->io_bp) > 0) { + hdr->b_l1hdr.b_byteswap = DMU_BSWAP_UINT64; + } else { + hdr->b_l1hdr.b_byteswap = + DMU_OT_BYTESWAP(BP_GET_TYPE(zio->io_bp)); + } + } else { + hdr->b_l1hdr.b_byteswap = DMU_BSWAP_NUMFUNCS; + } + } + + arc_hdr_clear_flags(hdr, ARC_FLAG_L2_EVICTED); + if (l2arc_noprefetch && HDR_PREFETCH(hdr)) + arc_hdr_clear_flags(hdr, ARC_FLAG_L2CACHE); + + callback_list = hdr->b_l1hdr.b_acb; + ASSERT3P(callback_list, !=, NULL); + + if (hash_lock && no_zio_error && hdr->b_l1hdr.b_state == arc_anon) { + /* + * Only call arc_access on anonymous buffers. This is because + * if we've issued an I/O for an evicted buffer, we've already + * called arc_access (to prevent any simultaneous readers from + * getting confused). + */ + arc_access(hdr, hash_lock); + } + + /* + * If a read request has a callback (i.e. acb_done is not NULL), then we + * make a buf containing the data according to the parameters which were + * passed in. The implementation of arc_buf_alloc_impl() ensures that we + * aren't needlessly decompressing the data multiple times. + */ + int callback_cnt = 0; + for (acb = callback_list; acb != NULL; acb = acb->acb_next) { + if (!acb->acb_done) + continue; + + /* This is a demand read since prefetches don't use callbacks */ + callback_cnt++; + + int error = arc_buf_alloc_impl(hdr, acb->acb_private, + acb->acb_compressed, no_zio_error, &acb->acb_buf); + if (no_zio_error) { + zio->io_error = error; + } + } + hdr->b_l1hdr.b_acb = NULL; + arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS); + if (callback_cnt == 0) { + ASSERT(HDR_PREFETCH(hdr)); + ASSERT0(hdr->b_l1hdr.b_bufcnt); + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + } + + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt) || + callback_list != NULL); + + if (no_zio_error) { + arc_hdr_verify(hdr, zio->io_bp); + } else { + arc_hdr_set_flags(hdr, ARC_FLAG_IO_ERROR); + if (hdr->b_l1hdr.b_state != arc_anon) + arc_change_state(arc_anon, hdr, hash_lock); + if (HDR_IN_HASH_TABLE(hdr)) + buf_hash_remove(hdr); + freeable = refcount_is_zero(&hdr->b_l1hdr.b_refcnt); + } + + /* + * Broadcast before we drop the hash_lock to avoid the possibility + * that the hdr (and hence the cv) might be freed before we get to + * the cv_broadcast(). + */ + cv_broadcast(&hdr->b_l1hdr.b_cv); + + if (hash_lock != NULL) { + mutex_exit(hash_lock); + } else { + /* + * This block was freed while we waited for the read to + * complete. It has been removed from the hash table and + * moved to the anonymous state (so that it won't show up + * in the cache). + */ + ASSERT3P(hdr->b_l1hdr.b_state, ==, arc_anon); + freeable = refcount_is_zero(&hdr->b_l1hdr.b_refcnt); + } + + /* execute each callback and free its structure */ + while ((acb = callback_list) != NULL) { + if (acb->acb_done) + acb->acb_done(zio, acb->acb_buf, acb->acb_private); + + if (acb->acb_zio_dummy != NULL) { + acb->acb_zio_dummy->io_error = zio->io_error; + zio_nowait(acb->acb_zio_dummy); + } + + callback_list = acb->acb_next; + kmem_free(acb, sizeof (arc_callback_t)); + } + + if (freeable) + arc_hdr_destroy(hdr); +} + +/* + * "Read" the block at the specified DVA (in bp) via the + * cache. If the block is found in the cache, invoke the provided + * callback immediately and return. Note that the `zio' parameter + * in the callback will be NULL in this case, since no IO was + * required. If the block is not in the cache pass the read request + * on to the spa with a substitute callback function, so that the + * requested block will be added to the cache. + * + * If a read request arrives for a block that has a read in-progress, + * either wait for the in-progress read to complete (and return the + * results); or, if this is a read with a "done" func, add a record + * to the read to invoke the "done" func when the read completes, + * and return; or just return. + * + * arc_read_done() will invoke all the requested "done" functions + * for readers of this block. + */ +int +arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, arc_done_func_t *done, + void *private, zio_priority_t priority, int zio_flags, + arc_flags_t *arc_flags, const zbookmark_phys_t *zb) +{ + arc_buf_hdr_t *hdr = NULL; + kmutex_t *hash_lock = NULL; + zio_t *rzio; + uint64_t guid = spa_load_guid(spa); + boolean_t compressed_read = (zio_flags & ZIO_FLAG_RAW) != 0; + int rc = 0; + + ASSERT(!BP_IS_EMBEDDED(bp) || + BPE_GET_ETYPE(bp) == BP_EMBEDDED_TYPE_DATA); + +top: + if (!BP_IS_EMBEDDED(bp)) { + /* + * Embedded BP's have no DVA and require no I/O to "read". + * Create an anonymous arc buf to back it. + */ + hdr = buf_hash_find(guid, bp, &hash_lock); + } + + if (hdr != NULL && HDR_HAS_L1HDR(hdr) && hdr->b_l1hdr.b_pabd != NULL) { + arc_buf_t *buf = NULL; + *arc_flags |= ARC_FLAG_CACHED; + + if (HDR_IO_IN_PROGRESS(hdr)) { + + if ((hdr->b_flags & ARC_FLAG_PRIO_ASYNC_READ) && + priority == ZIO_PRIORITY_SYNC_READ) { + /* + * This sync read must wait for an + * in-progress async read (e.g. a predictive + * prefetch). Async reads are queued + * separately at the vdev_queue layer, so + * this is a form of priority inversion. + * Ideally, we would "inherit" the demand + * i/o's priority by moving the i/o from + * the async queue to the synchronous queue, + * but there is currently no mechanism to do + * so. Track this so that we can evaluate + * the magnitude of this potential performance + * problem. + * + * Note that if the prefetch i/o is already + * active (has been issued to the device), + * the prefetch improved performance, because + * we issued it sooner than we would have + * without the prefetch. + */ + DTRACE_PROBE1(arc__sync__wait__for__async, + arc_buf_hdr_t *, hdr); + ARCSTAT_BUMP(arcstat_sync_wait_for_async); + } + if (hdr->b_flags & ARC_FLAG_PREDICTIVE_PREFETCH) { + arc_hdr_clear_flags(hdr, + ARC_FLAG_PREDICTIVE_PREFETCH); + } + + if (*arc_flags & ARC_FLAG_WAIT) { + cv_wait(&hdr->b_l1hdr.b_cv, hash_lock); + mutex_exit(hash_lock); + goto top; + } + ASSERT(*arc_flags & ARC_FLAG_NOWAIT); + + if (done) { + arc_callback_t *acb = NULL; + + acb = kmem_zalloc(sizeof (arc_callback_t), + KM_SLEEP); + acb->acb_done = done; + acb->acb_private = private; + acb->acb_compressed = compressed_read; + if (pio != NULL) + acb->acb_zio_dummy = zio_null(pio, + spa, NULL, NULL, NULL, zio_flags); + + ASSERT3P(acb->acb_done, !=, NULL); + acb->acb_next = hdr->b_l1hdr.b_acb; + hdr->b_l1hdr.b_acb = acb; + mutex_exit(hash_lock); + goto out; + } + mutex_exit(hash_lock); + goto out; + } + + ASSERT(hdr->b_l1hdr.b_state == arc_mru || + hdr->b_l1hdr.b_state == arc_mfu); + + if (done) { + if (hdr->b_flags & ARC_FLAG_PREDICTIVE_PREFETCH) { + /* + * This is a demand read which does not have to + * wait for i/o because we did a predictive + * prefetch i/o for it, which has completed. + */ + DTRACE_PROBE1( + arc__demand__hit__predictive__prefetch, + arc_buf_hdr_t *, hdr); + ARCSTAT_BUMP( + arcstat_demand_hit_predictive_prefetch); + arc_hdr_clear_flags(hdr, + ARC_FLAG_PREDICTIVE_PREFETCH); + } + ASSERT(!BP_IS_EMBEDDED(bp) || !BP_IS_HOLE(bp)); + + /* Get a buf with the desired data in it. */ + VERIFY0(arc_buf_alloc_impl(hdr, private, + compressed_read, B_TRUE, &buf)); + } else if (*arc_flags & ARC_FLAG_PREFETCH && + refcount_count(&hdr->b_l1hdr.b_refcnt) == 0) { + arc_hdr_set_flags(hdr, ARC_FLAG_PREFETCH); + } + DTRACE_PROBE1(arc__hit, arc_buf_hdr_t *, hdr); + arc_access(hdr, hash_lock); + if (*arc_flags & ARC_FLAG_L2CACHE) + arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE); + mutex_exit(hash_lock); + ARCSTAT_BUMP(arcstat_hits); + ARCSTAT_CONDSTAT(!HDR_PREFETCH(hdr), + demand, prefetch, !HDR_ISTYPE_METADATA(hdr), + data, metadata, hits); + + if (done) + done(NULL, buf, private); + } else { + uint64_t lsize = BP_GET_LSIZE(bp); + uint64_t psize = BP_GET_PSIZE(bp); + arc_callback_t *acb; + vdev_t *vd = NULL; + uint64_t addr = 0; + boolean_t devw = B_FALSE; + uint64_t size; + + /* + * Gracefully handle a damaged logical block size as a + * checksum error. + */ + if (lsize > spa_maxblocksize(spa)) { + rc = SET_ERROR(ECKSUM); + goto out; + } + + if (hdr == NULL) { + /* this block is not in the cache */ + arc_buf_hdr_t *exists = NULL; + arc_buf_contents_t type = BP_GET_BUFC_TYPE(bp); + hdr = arc_hdr_alloc(spa_load_guid(spa), psize, lsize, + BP_GET_COMPRESS(bp), type); + + if (!BP_IS_EMBEDDED(bp)) { + hdr->b_dva = *BP_IDENTITY(bp); + hdr->b_birth = BP_PHYSICAL_BIRTH(bp); + exists = buf_hash_insert(hdr, &hash_lock); + } + if (exists != NULL) { + /* somebody beat us to the hash insert */ + mutex_exit(hash_lock); + buf_discard_identity(hdr); + arc_hdr_destroy(hdr); + goto top; /* restart the IO request */ + } + } else { + /* + * This block is in the ghost cache. If it was L2-only + * (and thus didn't have an L1 hdr), we realloc the + * header to add an L1 hdr. + */ + if (!HDR_HAS_L1HDR(hdr)) { + hdr = arc_hdr_realloc(hdr, hdr_l2only_cache, + hdr_full_cache); + } + + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + ASSERT(GHOST_STATE(hdr->b_l1hdr.b_state)); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT(refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + ASSERT3P(hdr->b_l1hdr.b_buf, ==, NULL); + ASSERT3P(hdr->b_l1hdr.b_freeze_cksum, ==, NULL); + + /* + * This is a delicate dance that we play here. + * This hdr is in the ghost list so we access it + * to move it out of the ghost list before we + * initiate the read. If it's a prefetch then + * it won't have a callback so we'll remove the + * reference that arc_buf_alloc_impl() created. We + * do this after we've called arc_access() to + * avoid hitting an assert in remove_reference(). + */ + arc_access(hdr, hash_lock); + arc_hdr_alloc_pabd(hdr); + } + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + size = arc_hdr_size(hdr); + + /* + * If compression is enabled on the hdr, then will do + * RAW I/O and will store the compressed data in the hdr's + * data block. Otherwise, the hdr's data block will contain + * the uncompressed data. + */ + if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) { + zio_flags |= ZIO_FLAG_RAW; + } + + if (*arc_flags & ARC_FLAG_PREFETCH) + arc_hdr_set_flags(hdr, ARC_FLAG_PREFETCH); + if (*arc_flags & ARC_FLAG_L2CACHE) + arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE); + if (BP_GET_LEVEL(bp) > 0) + arc_hdr_set_flags(hdr, ARC_FLAG_INDIRECT); + if (*arc_flags & ARC_FLAG_PREDICTIVE_PREFETCH) + arc_hdr_set_flags(hdr, ARC_FLAG_PREDICTIVE_PREFETCH); + ASSERT(!GHOST_STATE(hdr->b_l1hdr.b_state)); + + acb = kmem_zalloc(sizeof (arc_callback_t), KM_SLEEP); + acb->acb_done = done; + acb->acb_private = private; + acb->acb_compressed = compressed_read; + + ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL); + hdr->b_l1hdr.b_acb = acb; + arc_hdr_set_flags(hdr, ARC_FLAG_IO_IN_PROGRESS); + + if (HDR_HAS_L2HDR(hdr) && + (vd = hdr->b_l2hdr.b_dev->l2ad_vdev) != NULL) { + devw = hdr->b_l2hdr.b_dev->l2ad_writing; + addr = hdr->b_l2hdr.b_daddr; + /* + * Lock out device removal. + */ + if (vdev_is_dead(vd) || + !spa_config_tryenter(spa, SCL_L2ARC, vd, RW_READER)) + vd = NULL; + } + + if (priority == ZIO_PRIORITY_ASYNC_READ) + arc_hdr_set_flags(hdr, ARC_FLAG_PRIO_ASYNC_READ); + else + arc_hdr_clear_flags(hdr, ARC_FLAG_PRIO_ASYNC_READ); + + if (hash_lock != NULL) + mutex_exit(hash_lock); + + /* + * At this point, we have a level 1 cache miss. Try again in + * L2ARC if possible. + */ + ASSERT3U(HDR_GET_LSIZE(hdr), ==, lsize); + + DTRACE_PROBE4(arc__miss, arc_buf_hdr_t *, hdr, blkptr_t *, bp, + uint64_t, lsize, zbookmark_phys_t *, zb); + ARCSTAT_BUMP(arcstat_misses); + ARCSTAT_CONDSTAT(!HDR_PREFETCH(hdr), + demand, prefetch, !HDR_ISTYPE_METADATA(hdr), + data, metadata, misses); + + if (vd != NULL && l2arc_ndev != 0 && !(l2arc_norw && devw)) { + /* + * Read from the L2ARC if the following are true: + * 1. The L2ARC vdev was previously cached. + * 2. This buffer still has L2ARC metadata. + * 3. This buffer isn't currently writing to the L2ARC. + * 4. The L2ARC entry wasn't evicted, which may + * also have invalidated the vdev. + * 5. This isn't prefetch and l2arc_noprefetch is set. + */ + if (HDR_HAS_L2HDR(hdr) && + !HDR_L2_WRITING(hdr) && !HDR_L2_EVICTED(hdr) && + !(l2arc_noprefetch && HDR_PREFETCH(hdr))) { + l2arc_read_callback_t *cb; + abd_t *abd; + uint64_t asize; + + DTRACE_PROBE1(l2arc__hit, arc_buf_hdr_t *, hdr); + ARCSTAT_BUMP(arcstat_l2_hits); + atomic_inc_32(&hdr->b_l2hdr.b_hits); + + cb = kmem_zalloc(sizeof (l2arc_read_callback_t), + KM_SLEEP); + cb->l2rcb_hdr = hdr; + cb->l2rcb_bp = *bp; + cb->l2rcb_zb = *zb; + cb->l2rcb_flags = zio_flags; + + asize = vdev_psize_to_asize(vd, size); + if (asize != size) { + abd = abd_alloc_for_io(asize, + HDR_ISTYPE_METADATA(hdr)); + cb->l2rcb_abd = abd; + } else { + abd = hdr->b_l1hdr.b_pabd; + } + + ASSERT(addr >= VDEV_LABEL_START_SIZE && + addr + asize <= vd->vdev_psize - + VDEV_LABEL_END_SIZE); + + /* + * l2arc read. The SCL_L2ARC lock will be + * released by l2arc_read_done(). + * Issue a null zio if the underlying buffer + * was squashed to zero size by compression. + */ + ASSERT3U(HDR_GET_COMPRESS(hdr), !=, + ZIO_COMPRESS_EMPTY); + rzio = zio_read_phys(pio, vd, addr, + asize, abd, + ZIO_CHECKSUM_OFF, + l2arc_read_done, cb, priority, + zio_flags | ZIO_FLAG_DONT_CACHE | + ZIO_FLAG_CANFAIL | + ZIO_FLAG_DONT_PROPAGATE | + ZIO_FLAG_DONT_RETRY, B_FALSE); + + DTRACE_PROBE2(l2arc__read, vdev_t *, vd, + zio_t *, rzio); + ARCSTAT_INCR(arcstat_l2_read_bytes, size); + + if (*arc_flags & ARC_FLAG_NOWAIT) { + zio_nowait(rzio); + goto out; + } + + ASSERT(*arc_flags & ARC_FLAG_WAIT); + if (zio_wait(rzio) == 0) + goto out; + + /* l2arc read error; goto zio_read() */ + } else { + DTRACE_PROBE1(l2arc__miss, + arc_buf_hdr_t *, hdr); + ARCSTAT_BUMP(arcstat_l2_misses); + if (HDR_L2_WRITING(hdr)) + ARCSTAT_BUMP(arcstat_l2_rw_clash); + spa_config_exit(spa, SCL_L2ARC, vd); + } + } else { + if (vd != NULL) + spa_config_exit(spa, SCL_L2ARC, vd); + if (l2arc_ndev != 0) { + DTRACE_PROBE1(l2arc__miss, + arc_buf_hdr_t *, hdr); + ARCSTAT_BUMP(arcstat_l2_misses); + } + } + + rzio = zio_read(pio, spa, bp, hdr->b_l1hdr.b_pabd, size, + arc_read_done, hdr, priority, zio_flags, zb); + + if (*arc_flags & ARC_FLAG_WAIT) { + rc = zio_wait(rzio); + goto out; + } + + ASSERT(*arc_flags & ARC_FLAG_NOWAIT); + zio_nowait(rzio); + } + +out: + spa_read_history_add(spa, zb, *arc_flags); + return (rc); +} + +arc_prune_t * +arc_add_prune_callback(arc_prune_func_t *func, void *private) +{ + arc_prune_t *p; + + p = kmem_alloc(sizeof (*p), KM_SLEEP); + p->p_pfunc = func; + p->p_private = private; + list_link_init(&p->p_node); + refcount_create(&p->p_refcnt); + + mutex_enter(&arc_prune_mtx); + refcount_add(&p->p_refcnt, &arc_prune_list); + list_insert_head(&arc_prune_list, p); + mutex_exit(&arc_prune_mtx); + + return (p); +} + +void +arc_remove_prune_callback(arc_prune_t *p) +{ + boolean_t wait = B_FALSE; + mutex_enter(&arc_prune_mtx); + list_remove(&arc_prune_list, p); + if (refcount_remove(&p->p_refcnt, &arc_prune_list) > 0) + wait = B_TRUE; + mutex_exit(&arc_prune_mtx); + + /* wait for arc_prune_task to finish */ + if (wait) + taskq_wait_outstanding(arc_prune_taskq, 0); + ASSERT0(refcount_count(&p->p_refcnt)); + refcount_destroy(&p->p_refcnt); + kmem_free(p, sizeof (*p)); +} + +/* + * Notify the arc that a block was freed, and thus will never be used again. + */ +void +arc_freed(spa_t *spa, const blkptr_t *bp) +{ + arc_buf_hdr_t *hdr; + kmutex_t *hash_lock; + uint64_t guid = spa_load_guid(spa); + + ASSERT(!BP_IS_EMBEDDED(bp)); + + hdr = buf_hash_find(guid, bp, &hash_lock); + if (hdr == NULL) + return; + + /* + * We might be trying to free a block that is still doing I/O + * (i.e. prefetch) or has a reference (i.e. a dedup-ed, + * dmu_sync-ed block). If this block is being prefetched, then it + * would still have the ARC_FLAG_IO_IN_PROGRESS flag set on the hdr + * until the I/O completes. A block may also have a reference if it is + * part of a dedup-ed, dmu_synced write. The dmu_sync() function would + * have written the new block to its final resting place on disk but + * without the dedup flag set. This would have left the hdr in the MRU + * state and discoverable. When the txg finally syncs it detects that + * the block was overridden in open context and issues an override I/O. + * Since this is a dedup block, the override I/O will determine if the + * block is already in the DDT. If so, then it will replace the io_bp + * with the bp from the DDT and allow the I/O to finish. When the I/O + * reaches the done callback, dbuf_write_override_done, it will + * check to see if the io_bp and io_bp_override are identical. + * If they are not, then it indicates that the bp was replaced with + * the bp in the DDT and the override bp is freed. This allows + * us to arrive here with a reference on a block that is being + * freed. So if we have an I/O in progress, or a reference to + * this hdr, then we don't destroy the hdr. + */ + if (!HDR_HAS_L1HDR(hdr) || (!HDR_IO_IN_PROGRESS(hdr) && + refcount_is_zero(&hdr->b_l1hdr.b_refcnt))) { + arc_change_state(arc_anon, hdr, hash_lock); + arc_hdr_destroy(hdr); + mutex_exit(hash_lock); + } else { + mutex_exit(hash_lock); + } + +} + +/* + * Release this buffer from the cache, making it an anonymous buffer. This + * must be done after a read and prior to modifying the buffer contents. + * If the buffer has more than one reference, we must make + * a new hdr for the buffer. + */ +void +arc_release(arc_buf_t *buf, void *tag) +{ + kmutex_t *hash_lock; + arc_state_t *state; + arc_buf_hdr_t *hdr = buf->b_hdr; + + /* + * It would be nice to assert that if its DMU metadata (level > + * 0 || it's the dnode file), then it must be syncing context. + * But we don't know that information at this level. + */ + + mutex_enter(&buf->b_evict_lock); + + ASSERT(HDR_HAS_L1HDR(hdr)); + + /* + * We don't grab the hash lock prior to this check, because if + * the buffer's header is in the arc_anon state, it won't be + * linked into the hash table. + */ + if (hdr->b_l1hdr.b_state == arc_anon) { + mutex_exit(&buf->b_evict_lock); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT(!HDR_IN_HASH_TABLE(hdr)); + ASSERT(!HDR_HAS_L2HDR(hdr)); + ASSERT(HDR_EMPTY(hdr)); + + ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1); + ASSERT3S(refcount_count(&hdr->b_l1hdr.b_refcnt), ==, 1); + ASSERT(!list_link_active(&hdr->b_l1hdr.b_arc_node)); + + hdr->b_l1hdr.b_arc_access = 0; + + /* + * If the buf is being overridden then it may already + * have a hdr that is not empty. + */ + buf_discard_identity(hdr); + arc_buf_thaw(buf); + + return; + } + + hash_lock = HDR_LOCK(hdr); + mutex_enter(hash_lock); + + /* + * This assignment is only valid as long as the hash_lock is + * held, we must be careful not to reference state or the + * b_state field after dropping the lock. + */ + state = hdr->b_l1hdr.b_state; + ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); + ASSERT3P(state, !=, arc_anon); + + /* this buffer is not on any list */ + ASSERT3S(refcount_count(&hdr->b_l1hdr.b_refcnt), >, 0); + + if (HDR_HAS_L2HDR(hdr)) { + mutex_enter(&hdr->b_l2hdr.b_dev->l2ad_mtx); + + /* + * We have to recheck this conditional again now that + * we're holding the l2ad_mtx to prevent a race with + * another thread which might be concurrently calling + * l2arc_evict(). In that case, l2arc_evict() might have + * destroyed the header's L2 portion as we were waiting + * to acquire the l2ad_mtx. + */ + if (HDR_HAS_L2HDR(hdr)) + arc_hdr_l2hdr_destroy(hdr); + + mutex_exit(&hdr->b_l2hdr.b_dev->l2ad_mtx); + } + + /* + * Do we have more than one buf? + */ + if (hdr->b_l1hdr.b_bufcnt > 1) { + arc_buf_hdr_t *nhdr; + uint64_t spa = hdr->b_spa; + uint64_t psize = HDR_GET_PSIZE(hdr); + uint64_t lsize = HDR_GET_LSIZE(hdr); + enum zio_compress compress = HDR_GET_COMPRESS(hdr); + arc_buf_contents_t type = arc_buf_type(hdr); + VERIFY3U(hdr->b_type, ==, type); + + ASSERT(hdr->b_l1hdr.b_buf != buf || buf->b_next != NULL); + (void) remove_reference(hdr, hash_lock, tag); + + if (arc_buf_is_shared(buf) && !ARC_BUF_COMPRESSED(buf)) { + ASSERT3P(hdr->b_l1hdr.b_buf, !=, buf); + ASSERT(ARC_BUF_LAST(buf)); + } + + /* + * Pull the data off of this hdr and attach it to + * a new anonymous hdr. Also find the last buffer + * in the hdr's buffer list. + */ + arc_buf_t *lastbuf = arc_buf_remove(hdr, buf); + ASSERT3P(lastbuf, !=, NULL); + + /* + * If the current arc_buf_t and the hdr are sharing their data + * buffer, then we must stop sharing that block. + */ + if (arc_buf_is_shared(buf)) { + ASSERT3P(hdr->b_l1hdr.b_buf, !=, buf); + VERIFY(!arc_buf_is_shared(lastbuf)); + + /* + * First, sever the block sharing relationship between + * buf and the arc_buf_hdr_t. + */ + arc_unshare_buf(hdr, buf); + + /* + * Now we need to recreate the hdr's b_pabd. Since we + * have lastbuf handy, we try to share with it, but if + * we can't then we allocate a new b_pabd and copy the + * data from buf into it. + */ + if (arc_can_share(hdr, lastbuf)) { + arc_share_buf(hdr, lastbuf); + } else { + arc_hdr_alloc_pabd(hdr); + abd_copy_from_buf(hdr->b_l1hdr.b_pabd, + buf->b_data, psize); + } + VERIFY3P(lastbuf->b_data, !=, NULL); + } else if (HDR_SHARED_DATA(hdr)) { + /* + * Uncompressed shared buffers are always at the end + * of the list. Compressed buffers don't have the + * same requirements. This makes it hard to + * simply assert that the lastbuf is shared so + * we rely on the hdr's compression flags to determine + * if we have a compressed, shared buffer. + */ + ASSERT(arc_buf_is_shared(lastbuf) || + HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF); + ASSERT(!ARC_BUF_SHARED(buf)); + } + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + ASSERT3P(state, !=, arc_l2c_only); + + (void) refcount_remove_many(&state->arcs_size, + arc_buf_size(buf), buf); + + if (refcount_is_zero(&hdr->b_l1hdr.b_refcnt)) { + ASSERT3P(state, !=, arc_l2c_only); + (void) refcount_remove_many(&state->arcs_esize[type], + arc_buf_size(buf), buf); + } + + hdr->b_l1hdr.b_bufcnt -= 1; + arc_cksum_verify(buf); + arc_buf_unwatch(buf); + + /* if this is the last uncompressed buf free the checksum */ + if (!arc_hdr_has_uncompressed_buf(hdr)) + arc_cksum_free(hdr); + + mutex_exit(hash_lock); + + /* + * Allocate a new hdr. The new hdr will contain a b_pabd + * buffer which will be freed in arc_write(). + */ + nhdr = arc_hdr_alloc(spa, psize, lsize, compress, type); + ASSERT3P(nhdr->b_l1hdr.b_buf, ==, NULL); + ASSERT0(nhdr->b_l1hdr.b_bufcnt); + ASSERT0(refcount_count(&nhdr->b_l1hdr.b_refcnt)); + VERIFY3U(nhdr->b_type, ==, type); + ASSERT(!HDR_SHARED_DATA(nhdr)); + + nhdr->b_l1hdr.b_buf = buf; + nhdr->b_l1hdr.b_bufcnt = 1; + nhdr->b_l1hdr.b_mru_hits = 0; + nhdr->b_l1hdr.b_mru_ghost_hits = 0; + nhdr->b_l1hdr.b_mfu_hits = 0; + nhdr->b_l1hdr.b_mfu_ghost_hits = 0; + nhdr->b_l1hdr.b_l2_hits = 0; + (void) refcount_add(&nhdr->b_l1hdr.b_refcnt, tag); + buf->b_hdr = nhdr; + + mutex_exit(&buf->b_evict_lock); + (void) refcount_add_many(&arc_anon->arcs_size, + HDR_GET_LSIZE(nhdr), buf); + } else { + mutex_exit(&buf->b_evict_lock); + ASSERT(refcount_count(&hdr->b_l1hdr.b_refcnt) == 1); + /* protected by hash lock, or hdr is on arc_anon */ + ASSERT(!multilist_link_active(&hdr->b_l1hdr.b_arc_node)); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + hdr->b_l1hdr.b_mru_hits = 0; + hdr->b_l1hdr.b_mru_ghost_hits = 0; + hdr->b_l1hdr.b_mfu_hits = 0; + hdr->b_l1hdr.b_mfu_ghost_hits = 0; + hdr->b_l1hdr.b_l2_hits = 0; + arc_change_state(arc_anon, hdr, hash_lock); + hdr->b_l1hdr.b_arc_access = 0; + mutex_exit(hash_lock); + + buf_discard_identity(hdr); + arc_buf_thaw(buf); + } +} + +int +arc_released(arc_buf_t *buf) +{ + int released; + + mutex_enter(&buf->b_evict_lock); + released = (buf->b_data != NULL && + buf->b_hdr->b_l1hdr.b_state == arc_anon); + mutex_exit(&buf->b_evict_lock); + return (released); +} + +#ifdef ZFS_DEBUG +int +arc_referenced(arc_buf_t *buf) +{ + int referenced; + + mutex_enter(&buf->b_evict_lock); + referenced = (refcount_count(&buf->b_hdr->b_l1hdr.b_refcnt)); + mutex_exit(&buf->b_evict_lock); + return (referenced); +} +#endif + +static void +arc_write_ready(zio_t *zio) +{ + arc_write_callback_t *callback = zio->io_private; + arc_buf_t *buf = callback->awcb_buf; + arc_buf_hdr_t *hdr = buf->b_hdr; + uint64_t psize = BP_IS_HOLE(zio->io_bp) ? 0 : BP_GET_PSIZE(zio->io_bp); + enum zio_compress compress; + fstrans_cookie_t cookie = spl_fstrans_mark(); + + ASSERT(HDR_HAS_L1HDR(hdr)); + ASSERT(!refcount_is_zero(&buf->b_hdr->b_l1hdr.b_refcnt)); + ASSERT(hdr->b_l1hdr.b_bufcnt > 0); + + /* + * If we're reexecuting this zio because the pool suspended, then + * cleanup any state that was previously set the first time the + * callback was invoked. + */ + if (zio->io_flags & ZIO_FLAG_REEXECUTED) { + arc_cksum_free(hdr); + arc_buf_unwatch(buf); + if (hdr->b_l1hdr.b_pabd != NULL) { + if (arc_buf_is_shared(buf)) { + arc_unshare_buf(hdr, buf); + } else { + arc_hdr_free_pabd(hdr); + } + } + } + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + ASSERT(!HDR_SHARED_DATA(hdr)); + ASSERT(!arc_buf_is_shared(buf)); + + callback->awcb_ready(zio, buf, callback->awcb_private); + + if (HDR_IO_IN_PROGRESS(hdr)) + ASSERT(zio->io_flags & ZIO_FLAG_REEXECUTED); + + arc_cksum_compute(buf); + arc_hdr_set_flags(hdr, ARC_FLAG_IO_IN_PROGRESS); + + if (BP_IS_HOLE(zio->io_bp) || BP_IS_EMBEDDED(zio->io_bp)) { + compress = ZIO_COMPRESS_OFF; + } else { + ASSERT3U(HDR_GET_LSIZE(hdr), ==, BP_GET_LSIZE(zio->io_bp)); + compress = BP_GET_COMPRESS(zio->io_bp); + } + HDR_SET_PSIZE(hdr, psize); + arc_hdr_set_compress(hdr, compress); + + /* + * Fill the hdr with data. If the hdr is compressed, the data we want + * is available from the zio, otherwise we can take it from the buf. + * + * We might be able to share the buf's data with the hdr here. However, + * doing so would cause the ARC to be full of linear ABDs if we write a + * lot of shareable data. As a compromise, we check whether scattered + * ABDs are allowed, and assume that if they are then the user wants + * the ARC to be primarily filled with them regardless of the data being + * written. Therefore, if they're allowed then we allocate one and copy + * the data into it; otherwise, we share the data directly if we can. + */ + if (zfs_abd_scatter_enabled || !arc_can_share(hdr, buf)) { + arc_hdr_alloc_pabd(hdr); + + /* + * Ideally, we would always copy the io_abd into b_pabd, but the + * user may have disabled compressed ARC, thus we must check the + * hdr's compression setting rather than the io_bp's. + */ + if (HDR_GET_COMPRESS(hdr) != ZIO_COMPRESS_OFF) { + ASSERT3U(BP_GET_COMPRESS(zio->io_bp), !=, + ZIO_COMPRESS_OFF); + ASSERT3U(psize, >, 0); + + abd_copy(hdr->b_l1hdr.b_pabd, zio->io_abd, psize); + } else { + ASSERT3U(zio->io_orig_size, ==, arc_hdr_size(hdr)); + + abd_copy_from_buf(hdr->b_l1hdr.b_pabd, buf->b_data, + arc_buf_size(buf)); + } + } else { + ASSERT3P(buf->b_data, ==, abd_to_buf(zio->io_orig_abd)); + ASSERT3U(zio->io_orig_size, ==, arc_buf_size(buf)); + ASSERT3U(hdr->b_l1hdr.b_bufcnt, ==, 1); + + arc_share_buf(hdr, buf); + } + + arc_hdr_verify(hdr, zio->io_bp); + spl_fstrans_unmark(cookie); +} + +static void +arc_write_children_ready(zio_t *zio) +{ + arc_write_callback_t *callback = zio->io_private; + arc_buf_t *buf = callback->awcb_buf; + + callback->awcb_children_ready(zio, buf, callback->awcb_private); +} + +/* + * The SPA calls this callback for each physical write that happens on behalf + * of a logical write. See the comment in dbuf_write_physdone() for details. + */ +static void +arc_write_physdone(zio_t *zio) +{ + arc_write_callback_t *cb = zio->io_private; + if (cb->awcb_physdone != NULL) + cb->awcb_physdone(zio, cb->awcb_buf, cb->awcb_private); +} + +static void +arc_write_done(zio_t *zio) +{ + arc_write_callback_t *callback = zio->io_private; + arc_buf_t *buf = callback->awcb_buf; + arc_buf_hdr_t *hdr = buf->b_hdr; + + ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL); + + if (zio->io_error == 0) { + arc_hdr_verify(hdr, zio->io_bp); + + if (BP_IS_HOLE(zio->io_bp) || BP_IS_EMBEDDED(zio->io_bp)) { + buf_discard_identity(hdr); + } else { + hdr->b_dva = *BP_IDENTITY(zio->io_bp); + hdr->b_birth = BP_PHYSICAL_BIRTH(zio->io_bp); + } + } else { + ASSERT(HDR_EMPTY(hdr)); + } + + /* + * If the block to be written was all-zero or compressed enough to be + * embedded in the BP, no write was performed so there will be no + * dva/birth/checksum. The buffer must therefore remain anonymous + * (and uncached). + */ + if (!HDR_EMPTY(hdr)) { + arc_buf_hdr_t *exists; + kmutex_t *hash_lock; + + ASSERT3U(zio->io_error, ==, 0); + + arc_cksum_verify(buf); + + exists = buf_hash_insert(hdr, &hash_lock); + if (exists != NULL) { + /* + * This can only happen if we overwrite for + * sync-to-convergence, because we remove + * buffers from the hash table when we arc_free(). + */ + if (zio->io_flags & ZIO_FLAG_IO_REWRITE) { + if (!BP_EQUAL(&zio->io_bp_orig, zio->io_bp)) + panic("bad overwrite, hdr=%p exists=%p", + (void *)hdr, (void *)exists); + ASSERT(refcount_is_zero( + &exists->b_l1hdr.b_refcnt)); + arc_change_state(arc_anon, exists, hash_lock); + mutex_exit(hash_lock); + arc_hdr_destroy(exists); + exists = buf_hash_insert(hdr, &hash_lock); + ASSERT3P(exists, ==, NULL); + } else if (zio->io_flags & ZIO_FLAG_NOPWRITE) { + /* nopwrite */ + ASSERT(zio->io_prop.zp_nopwrite); + if (!BP_EQUAL(&zio->io_bp_orig, zio->io_bp)) + panic("bad nopwrite, hdr=%p exists=%p", + (void *)hdr, (void *)exists); + } else { + /* Dedup */ + ASSERT(hdr->b_l1hdr.b_bufcnt == 1); + ASSERT(hdr->b_l1hdr.b_state == arc_anon); + ASSERT(BP_GET_DEDUP(zio->io_bp)); + ASSERT(BP_GET_LEVEL(zio->io_bp) == 0); + } + } + arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS); + /* if it's not anon, we are doing a scrub */ + if (exists == NULL && hdr->b_l1hdr.b_state == arc_anon) + arc_access(hdr, hash_lock); + mutex_exit(hash_lock); + } else { + arc_hdr_clear_flags(hdr, ARC_FLAG_IO_IN_PROGRESS); + } + + ASSERT(!refcount_is_zero(&hdr->b_l1hdr.b_refcnt)); + callback->awcb_done(zio, buf, callback->awcb_private); + + abd_put(zio->io_abd); + kmem_free(callback, sizeof (arc_write_callback_t)); +} + +zio_t * +arc_write(zio_t *pio, spa_t *spa, uint64_t txg, + blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, + const zio_prop_t *zp, arc_done_func_t *ready, + arc_done_func_t *children_ready, arc_done_func_t *physdone, + arc_done_func_t *done, void *private, zio_priority_t priority, + int zio_flags, const zbookmark_phys_t *zb) +{ + arc_buf_hdr_t *hdr = buf->b_hdr; + arc_write_callback_t *callback; + zio_t *zio; + zio_prop_t localprop = *zp; + + ASSERT3P(ready, !=, NULL); + ASSERT3P(done, !=, NULL); + ASSERT(!HDR_IO_ERROR(hdr)); + ASSERT(!HDR_IO_IN_PROGRESS(hdr)); + ASSERT3P(hdr->b_l1hdr.b_acb, ==, NULL); + ASSERT3U(hdr->b_l1hdr.b_bufcnt, >, 0); + if (l2arc) + arc_hdr_set_flags(hdr, ARC_FLAG_L2CACHE); + if (ARC_BUF_COMPRESSED(buf)) { + /* + * We're writing a pre-compressed buffer. Make the + * compression algorithm requested by the zio_prop_t match + * the pre-compressed buffer's compression algorithm. + */ + localprop.zp_compress = HDR_GET_COMPRESS(hdr); + + ASSERT3U(HDR_GET_LSIZE(hdr), !=, arc_buf_size(buf)); + zio_flags |= ZIO_FLAG_RAW; + } + callback = kmem_zalloc(sizeof (arc_write_callback_t), KM_SLEEP); + callback->awcb_ready = ready; + callback->awcb_children_ready = children_ready; + callback->awcb_physdone = physdone; + callback->awcb_done = done; + callback->awcb_private = private; + callback->awcb_buf = buf; + + /* + * The hdr's b_pabd is now stale, free it now. A new data block + * will be allocated when the zio pipeline calls arc_write_ready(). + */ + if (hdr->b_l1hdr.b_pabd != NULL) { + /* + * If the buf is currently sharing the data block with + * the hdr then we need to break that relationship here. + * The hdr will remain with a NULL data pointer and the + * buf will take sole ownership of the block. + */ + if (arc_buf_is_shared(buf)) { + arc_unshare_buf(hdr, buf); + } else { + arc_hdr_free_pabd(hdr); + } + VERIFY3P(buf->b_data, !=, NULL); + arc_hdr_set_compress(hdr, ZIO_COMPRESS_OFF); + } + + if (!(zio_flags & ZIO_FLAG_RAW)) + arc_hdr_set_compress(hdr, ZIO_COMPRESS_OFF); + + ASSERT(!arc_buf_is_shared(buf)); + ASSERT3P(hdr->b_l1hdr.b_pabd, ==, NULL); + + zio = zio_write(pio, spa, txg, bp, + abd_get_from_buf(buf->b_data, HDR_GET_LSIZE(hdr)), + HDR_GET_LSIZE(hdr), arc_buf_size(buf), &localprop, arc_write_ready, + (children_ready != NULL) ? arc_write_children_ready : NULL, + arc_write_physdone, arc_write_done, callback, + priority, zio_flags, zb); + + return (zio); +} + +static int +arc_memory_throttle(uint64_t reserve, uint64_t txg) +{ +#ifdef _KERNEL + uint64_t available_memory = arc_free_memory(); + static uint64_t page_load = 0; + static uint64_t last_txg = 0; + +#if defined(_ILP32) + available_memory = + MIN(available_memory, vmem_size(heap_arena, VMEM_FREE)); +#endif + + if (available_memory > arc_all_memory() * arc_lotsfree_percent / 100) + return (0); + + if (txg > last_txg) { + last_txg = txg; + page_load = 0; + } + /* + * If we are in pageout, we know that memory is already tight, + * the arc is already going to be evicting, so we just want to + * continue to let page writes occur as quickly as possible. + */ + if (current_is_kswapd()) { + if (page_load > MAX(arc_sys_free / 4, available_memory) / 4) { + DMU_TX_STAT_BUMP(dmu_tx_memory_reclaim); + return (SET_ERROR(ERESTART)); + } + /* Note: reserve is inflated, so we deflate */ + page_load += reserve / 8; + return (0); + } else if (page_load > 0 && arc_reclaim_needed()) { + /* memory is low, delay before restarting */ + ARCSTAT_INCR(arcstat_memory_throttle_count, 1); + DMU_TX_STAT_BUMP(dmu_tx_memory_reclaim); + return (SET_ERROR(EAGAIN)); + } + page_load = 0; +#endif + return (0); +} + +void +arc_tempreserve_clear(uint64_t reserve) +{ + atomic_add_64(&arc_tempreserve, -reserve); + ASSERT((int64_t)arc_tempreserve >= 0); +} + +int +arc_tempreserve_space(uint64_t reserve, uint64_t txg) +{ + int error; + uint64_t anon_size; + + if (!arc_no_grow && + reserve > arc_c/4 && + reserve * 4 > (2ULL << SPA_MAXBLOCKSHIFT)) + arc_c = MIN(arc_c_max, reserve * 4); + + /* + * Throttle when the calculated memory footprint for the TXG + * exceeds the target ARC size. + */ + if (reserve > arc_c) { + DMU_TX_STAT_BUMP(dmu_tx_memory_reserve); + return (SET_ERROR(ERESTART)); + } + + /* + * Don't count loaned bufs as in flight dirty data to prevent long + * network delays from blocking transactions that are ready to be + * assigned to a txg. + */ + + /* assert that it has not wrapped around */ + ASSERT3S(atomic_add_64_nv(&arc_loaned_bytes, 0), >=, 0); + + anon_size = MAX((int64_t)(refcount_count(&arc_anon->arcs_size) - + arc_loaned_bytes), 0); + + /* + * Writes will, almost always, require additional memory allocations + * in order to compress/encrypt/etc the data. We therefore need to + * make sure that there is sufficient available memory for this. + */ + error = arc_memory_throttle(reserve, txg); + if (error != 0) + return (error); + + /* + * Throttle writes when the amount of dirty data in the cache + * gets too large. We try to keep the cache less than half full + * of dirty blocks so that our sync times don't grow too large. + * Note: if two requests come in concurrently, we might let them + * both succeed, when one of them should fail. Not a huge deal. + */ + + if (reserve + arc_tempreserve + anon_size > arc_c / 2 && + anon_size > arc_c / 4) { + uint64_t meta_esize = + refcount_count(&arc_anon->arcs_esize[ARC_BUFC_METADATA]); + uint64_t data_esize = + refcount_count(&arc_anon->arcs_esize[ARC_BUFC_DATA]); + dprintf("failing, arc_tempreserve=%lluK anon_meta=%lluK " + "anon_data=%lluK tempreserve=%lluK arc_c=%lluK\n", + arc_tempreserve >> 10, meta_esize >> 10, + data_esize >> 10, reserve >> 10, arc_c >> 10); + DMU_TX_STAT_BUMP(dmu_tx_dirty_throttle); + return (SET_ERROR(ERESTART)); + } + atomic_add_64(&arc_tempreserve, reserve); + return (0); +} + +static void +arc_kstat_update_state(arc_state_t *state, kstat_named_t *size, + kstat_named_t *evict_data, kstat_named_t *evict_metadata) +{ + size->value.ui64 = refcount_count(&state->arcs_size); + evict_data->value.ui64 = + refcount_count(&state->arcs_esize[ARC_BUFC_DATA]); + evict_metadata->value.ui64 = + refcount_count(&state->arcs_esize[ARC_BUFC_METADATA]); +} + +static int +arc_kstat_update(kstat_t *ksp, int rw) +{ + arc_stats_t *as = ksp->ks_data; + + if (rw == KSTAT_WRITE) { + return (EACCES); + } else { + arc_kstat_update_state(arc_anon, + &as->arcstat_anon_size, + &as->arcstat_anon_evictable_data, + &as->arcstat_anon_evictable_metadata); + arc_kstat_update_state(arc_mru, + &as->arcstat_mru_size, + &as->arcstat_mru_evictable_data, + &as->arcstat_mru_evictable_metadata); + arc_kstat_update_state(arc_mru_ghost, + &as->arcstat_mru_ghost_size, + &as->arcstat_mru_ghost_evictable_data, + &as->arcstat_mru_ghost_evictable_metadata); + arc_kstat_update_state(arc_mfu, + &as->arcstat_mfu_size, + &as->arcstat_mfu_evictable_data, + &as->arcstat_mfu_evictable_metadata); + arc_kstat_update_state(arc_mfu_ghost, + &as->arcstat_mfu_ghost_size, + &as->arcstat_mfu_ghost_evictable_data, + &as->arcstat_mfu_ghost_evictable_metadata); + + as->arcstat_memory_all_bytes.value.ui64 = + arc_all_memory(); + as->arcstat_memory_free_bytes.value.ui64 = + arc_free_memory(); + as->arcstat_memory_available_bytes.value.i64 = + arc_available_memory(); + } + + return (0); +} + +/* + * This function *must* return indices evenly distributed between all + * sublists of the multilist. This is needed due to how the ARC eviction + * code is laid out; arc_evict_state() assumes ARC buffers are evenly + * distributed between all sublists and uses this assumption when + * deciding which sublist to evict from and how much to evict from it. + */ +unsigned int +arc_state_multilist_index_func(multilist_t *ml, void *obj) +{ + arc_buf_hdr_t *hdr = obj; + + /* + * We rely on b_dva to generate evenly distributed index + * numbers using buf_hash below. So, as an added precaution, + * let's make sure we never add empty buffers to the arc lists. + */ + ASSERT(!HDR_EMPTY(hdr)); + + /* + * The assumption here, is the hash value for a given + * arc_buf_hdr_t will remain constant throughout its lifetime + * (i.e. its b_spa, b_dva, and b_birth fields don't change). + * Thus, we don't need to store the header's sublist index + * on insertion, as this index can be recalculated on removal. + * + * Also, the low order bits of the hash value are thought to be + * distributed evenly. Otherwise, in the case that the multilist + * has a power of two number of sublists, each sublists' usage + * would not be evenly distributed. + */ + return (buf_hash(hdr->b_spa, &hdr->b_dva, hdr->b_birth) % + multilist_get_num_sublists(ml)); +} + +/* + * Called during module initialization and periodically thereafter to + * apply reasonable changes to the exposed performance tunings. Non-zero + * zfs_* values which differ from the currently set values will be applied. + */ +static void +arc_tuning_update(void) +{ + uint64_t allmem = arc_all_memory(); + unsigned long limit; + + /* Valid range: 64M - */ + if ((zfs_arc_max) && (zfs_arc_max != arc_c_max) && + (zfs_arc_max > 64 << 20) && (zfs_arc_max < allmem) && + (zfs_arc_max > arc_c_min)) { + arc_c_max = zfs_arc_max; + arc_c = arc_c_max; + arc_p = (arc_c >> 1); + if (arc_meta_limit > arc_c_max) + arc_meta_limit = arc_c_max; + if (arc_dnode_limit > arc_meta_limit) + arc_dnode_limit = arc_meta_limit; + } + + /* Valid range: 32M - */ + if ((zfs_arc_min) && (zfs_arc_min != arc_c_min) && + (zfs_arc_min >= 2ULL << SPA_MAXBLOCKSHIFT) && + (zfs_arc_min <= arc_c_max)) { + arc_c_min = zfs_arc_min; + arc_c = MAX(arc_c, arc_c_min); + } + + /* Valid range: 16M - */ + if ((zfs_arc_meta_min) && (zfs_arc_meta_min != arc_meta_min) && + (zfs_arc_meta_min >= 1ULL << SPA_MAXBLOCKSHIFT) && + (zfs_arc_meta_min <= arc_c_max)) { + arc_meta_min = zfs_arc_meta_min; + if (arc_meta_limit < arc_meta_min) + arc_meta_limit = arc_meta_min; + if (arc_dnode_limit < arc_meta_min) + arc_dnode_limit = arc_meta_min; + } + + /* Valid range: - */ + limit = zfs_arc_meta_limit ? zfs_arc_meta_limit : + MIN(zfs_arc_meta_limit_percent, 100) * arc_c_max / 100; + if ((limit != arc_meta_limit) && + (limit >= arc_meta_min) && + (limit <= arc_c_max)) + arc_meta_limit = limit; + + /* Valid range: - */ + limit = zfs_arc_dnode_limit ? zfs_arc_dnode_limit : + MIN(zfs_arc_dnode_limit_percent, 100) * arc_meta_limit / 100; + if ((limit != arc_dnode_limit) && + (limit >= arc_meta_min) && + (limit <= arc_meta_limit)) + arc_dnode_limit = limit; + + /* Valid range: 1 - N */ + if (zfs_arc_grow_retry) + arc_grow_retry = zfs_arc_grow_retry; + + /* Valid range: 1 - N */ + if (zfs_arc_shrink_shift) { + arc_shrink_shift = zfs_arc_shrink_shift; + arc_no_grow_shift = MIN(arc_no_grow_shift, arc_shrink_shift -1); + } + + /* Valid range: 1 - N */ + if (zfs_arc_p_min_shift) + arc_p_min_shift = zfs_arc_p_min_shift; + + /* Valid range: 1 - N ticks */ + if (zfs_arc_min_prefetch_lifespan) + arc_min_prefetch_lifespan = zfs_arc_min_prefetch_lifespan; + + /* Valid range: 0 - 100 */ + if ((zfs_arc_lotsfree_percent >= 0) && + (zfs_arc_lotsfree_percent <= 100)) + arc_lotsfree_percent = zfs_arc_lotsfree_percent; + + /* Valid range: 0 - */ + if ((zfs_arc_sys_free) && (zfs_arc_sys_free != arc_sys_free)) + arc_sys_free = MIN(MAX(zfs_arc_sys_free, 0), allmem); + +} + +static void +arc_state_init(void) +{ + arc_anon = &ARC_anon; + arc_mru = &ARC_mru; + arc_mru_ghost = &ARC_mru_ghost; + arc_mfu = &ARC_mfu; + arc_mfu_ghost = &ARC_mfu_ghost; + arc_l2c_only = &ARC_l2c_only; + + arc_mru->arcs_list[ARC_BUFC_METADATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mru->arcs_list[ARC_BUFC_DATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mru_ghost->arcs_list[ARC_BUFC_METADATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mru_ghost->arcs_list[ARC_BUFC_DATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mfu->arcs_list[ARC_BUFC_METADATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mfu->arcs_list[ARC_BUFC_DATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_mfu_ghost->arcs_list[ARC_BUFC_DATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_l2c_only->arcs_list[ARC_BUFC_METADATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + arc_l2c_only->arcs_list[ARC_BUFC_DATA] = + multilist_create(sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l1hdr.b_arc_node), + arc_state_multilist_index_func); + + refcount_create(&arc_anon->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_anon->arcs_esize[ARC_BUFC_DATA]); + refcount_create(&arc_mru->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_mru->arcs_esize[ARC_BUFC_DATA]); + refcount_create(&arc_mru_ghost->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_mru_ghost->arcs_esize[ARC_BUFC_DATA]); + refcount_create(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_mfu->arcs_esize[ARC_BUFC_DATA]); + refcount_create(&arc_mfu_ghost->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_mfu_ghost->arcs_esize[ARC_BUFC_DATA]); + refcount_create(&arc_l2c_only->arcs_esize[ARC_BUFC_METADATA]); + refcount_create(&arc_l2c_only->arcs_esize[ARC_BUFC_DATA]); + + refcount_create(&arc_anon->arcs_size); + refcount_create(&arc_mru->arcs_size); + refcount_create(&arc_mru_ghost->arcs_size); + refcount_create(&arc_mfu->arcs_size); + refcount_create(&arc_mfu_ghost->arcs_size); + refcount_create(&arc_l2c_only->arcs_size); + + arc_anon->arcs_state = ARC_STATE_ANON; + arc_mru->arcs_state = ARC_STATE_MRU; + arc_mru_ghost->arcs_state = ARC_STATE_MRU_GHOST; + arc_mfu->arcs_state = ARC_STATE_MFU; + arc_mfu_ghost->arcs_state = ARC_STATE_MFU_GHOST; + arc_l2c_only->arcs_state = ARC_STATE_L2C_ONLY; +} + +static void +arc_state_fini(void) +{ + refcount_destroy(&arc_anon->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_anon->arcs_esize[ARC_BUFC_DATA]); + refcount_destroy(&arc_mru->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_mru->arcs_esize[ARC_BUFC_DATA]); + refcount_destroy(&arc_mru_ghost->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_mru_ghost->arcs_esize[ARC_BUFC_DATA]); + refcount_destroy(&arc_mfu->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_mfu->arcs_esize[ARC_BUFC_DATA]); + refcount_destroy(&arc_mfu_ghost->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_mfu_ghost->arcs_esize[ARC_BUFC_DATA]); + refcount_destroy(&arc_l2c_only->arcs_esize[ARC_BUFC_METADATA]); + refcount_destroy(&arc_l2c_only->arcs_esize[ARC_BUFC_DATA]); + + refcount_destroy(&arc_anon->arcs_size); + refcount_destroy(&arc_mru->arcs_size); + refcount_destroy(&arc_mru_ghost->arcs_size); + refcount_destroy(&arc_mfu->arcs_size); + refcount_destroy(&arc_mfu_ghost->arcs_size); + refcount_destroy(&arc_l2c_only->arcs_size); + + multilist_destroy(arc_mru->arcs_list[ARC_BUFC_METADATA]); + multilist_destroy(arc_mru_ghost->arcs_list[ARC_BUFC_METADATA]); + multilist_destroy(arc_mfu->arcs_list[ARC_BUFC_METADATA]); + multilist_destroy(arc_mfu_ghost->arcs_list[ARC_BUFC_METADATA]); + multilist_destroy(arc_mru->arcs_list[ARC_BUFC_DATA]); + multilist_destroy(arc_mru_ghost->arcs_list[ARC_BUFC_DATA]); + multilist_destroy(arc_mfu->arcs_list[ARC_BUFC_DATA]); + multilist_destroy(arc_mfu_ghost->arcs_list[ARC_BUFC_DATA]); + multilist_destroy(arc_l2c_only->arcs_list[ARC_BUFC_METADATA]); + multilist_destroy(arc_l2c_only->arcs_list[ARC_BUFC_DATA]); +} + +uint64_t +arc_target_bytes(void) +{ + return (arc_c); +} + +void +arc_init(void) +{ + uint64_t percent, allmem = arc_all_memory(); + + mutex_init(&arc_reclaim_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&arc_reclaim_thread_cv, NULL, CV_DEFAULT, NULL); + cv_init(&arc_reclaim_waiters_cv, NULL, CV_DEFAULT, NULL); + + /* Convert seconds to clock ticks */ + arc_min_prefetch_lifespan = 1 * hz; + +#ifdef _KERNEL + /* + * Register a shrinker to support synchronous (direct) memory + * reclaim from the arc. This is done to prevent kswapd from + * swapping out pages when it is preferable to shrink the arc. + */ + spl_register_shrinker(&arc_shrinker); + + /* Set to 1/64 of all memory or a minimum of 512K */ + arc_sys_free = MAX(allmem / 64, (512 * 1024)); + arc_need_free = 0; +#endif + + /* Set max to 1/2 of all memory */ + arc_c_max = allmem / 2; + +#ifdef _KERNEL + /* Set min cache to 1/32 of all memory, or 32MB, whichever is more */ + arc_c_min = MAX(allmem / 32, 2ULL << SPA_MAXBLOCKSHIFT); +#else + /* + * In userland, there's only the memory pressure that we artificially + * create (see arc_available_memory()). Don't let arc_c get too + * small, because it can cause transactions to be larger than + * arc_c, causing arc_tempreserve_space() to fail. + */ + arc_c_min = MAX(arc_c_max / 2, 2ULL << SPA_MAXBLOCKSHIFT); +#endif + + arc_c = arc_c_max; + arc_p = (arc_c >> 1); + arc_size = 0; + + /* Set min to 1/2 of arc_c_min */ + arc_meta_min = 1ULL << SPA_MAXBLOCKSHIFT; + /* Initialize maximum observed usage to zero */ + arc_meta_max = 0; + /* + * Set arc_meta_limit to a percent of arc_c_max with a floor of + * arc_meta_min, and a ceiling of arc_c_max. + */ + percent = MIN(zfs_arc_meta_limit_percent, 100); + arc_meta_limit = MAX(arc_meta_min, (percent * arc_c_max) / 100); + percent = MIN(zfs_arc_dnode_limit_percent, 100); + arc_dnode_limit = (percent * arc_meta_limit) / 100; + + /* Apply user specified tunings */ + arc_tuning_update(); + + /* if kmem_flags are set, lets try to use less memory */ + if (kmem_debugging()) + arc_c = arc_c / 2; + if (arc_c < arc_c_min) + arc_c = arc_c_min; + + arc_state_init(); + buf_init(); + + list_create(&arc_prune_list, sizeof (arc_prune_t), + offsetof(arc_prune_t, p_node)); + mutex_init(&arc_prune_mtx, NULL, MUTEX_DEFAULT, NULL); + + arc_prune_taskq = taskq_create("arc_prune", max_ncpus, defclsyspri, + max_ncpus, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + + arc_reclaim_thread_exit = B_FALSE; + + arc_ksp = kstat_create("zfs", 0, "arcstats", "misc", KSTAT_TYPE_NAMED, + sizeof (arc_stats) / sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL); + + if (arc_ksp != NULL) { + arc_ksp->ks_data = &arc_stats; + arc_ksp->ks_update = arc_kstat_update; + kstat_install(arc_ksp); + } + + (void) thread_create(NULL, 0, arc_reclaim_thread, NULL, 0, &p0, + TS_RUN, defclsyspri); + + arc_dead = B_FALSE; + arc_warm = B_FALSE; + + /* + * Calculate maximum amount of dirty data per pool. + * + * If it has been set by a module parameter, take that. + * Otherwise, use a percentage of physical memory defined by + * zfs_dirty_data_max_percent (default 10%) with a cap at + * zfs_dirty_data_max_max (default 4G or 25% of physical memory). + */ + if (zfs_dirty_data_max_max == 0) + zfs_dirty_data_max_max = MIN(4ULL * 1024 * 1024 * 1024, + allmem * zfs_dirty_data_max_max_percent / 100); + + if (zfs_dirty_data_max == 0) { + zfs_dirty_data_max = allmem * + zfs_dirty_data_max_percent / 100; + zfs_dirty_data_max = MIN(zfs_dirty_data_max, + zfs_dirty_data_max_max); + } +} + +void +arc_fini(void) +{ + arc_prune_t *p; + +#ifdef _KERNEL + spl_unregister_shrinker(&arc_shrinker); +#endif /* _KERNEL */ + + mutex_enter(&arc_reclaim_lock); + arc_reclaim_thread_exit = B_TRUE; + /* + * The reclaim thread will set arc_reclaim_thread_exit back to + * B_FALSE when it is finished exiting; we're waiting for that. + */ + while (arc_reclaim_thread_exit) { + cv_signal(&arc_reclaim_thread_cv); + cv_wait(&arc_reclaim_thread_cv, &arc_reclaim_lock); + } + mutex_exit(&arc_reclaim_lock); + + /* Use B_TRUE to ensure *all* buffers are evicted */ + arc_flush(NULL, B_TRUE); + + arc_dead = B_TRUE; + + if (arc_ksp != NULL) { + kstat_delete(arc_ksp); + arc_ksp = NULL; + } + + taskq_wait(arc_prune_taskq); + taskq_destroy(arc_prune_taskq); + + mutex_enter(&arc_prune_mtx); + while ((p = list_head(&arc_prune_list)) != NULL) { + list_remove(&arc_prune_list, p); + refcount_remove(&p->p_refcnt, &arc_prune_list); + refcount_destroy(&p->p_refcnt); + kmem_free(p, sizeof (*p)); + } + mutex_exit(&arc_prune_mtx); + + list_destroy(&arc_prune_list); + mutex_destroy(&arc_prune_mtx); + mutex_destroy(&arc_reclaim_lock); + cv_destroy(&arc_reclaim_thread_cv); + cv_destroy(&arc_reclaim_waiters_cv); + + arc_state_fini(); + buf_fini(); + + ASSERT0(arc_loaned_bytes); +} + +/* + * Level 2 ARC + * + * The level 2 ARC (L2ARC) is a cache layer in-between main memory and disk. + * It uses dedicated storage devices to hold cached data, which are populated + * using large infrequent writes. The main role of this cache is to boost + * the performance of random read workloads. The intended L2ARC devices + * include short-stroked disks, solid state disks, and other media with + * substantially faster read latency than disk. + * + * +-----------------------+ + * | ARC | + * +-----------------------+ + * | ^ ^ + * | | | + * l2arc_feed_thread() arc_read() + * | | | + * | l2arc read | + * V | | + * +---------------+ | + * | L2ARC | | + * +---------------+ | + * | ^ | + * l2arc_write() | | + * | | | + * V | | + * +-------+ +-------+ + * | vdev | | vdev | + * | cache | | cache | + * +-------+ +-------+ + * +=========+ .-----. + * : L2ARC : |-_____-| + * : devices : | Disks | + * +=========+ `-_____-' + * + * Read requests are satisfied from the following sources, in order: + * + * 1) ARC + * 2) vdev cache of L2ARC devices + * 3) L2ARC devices + * 4) vdev cache of disks + * 5) disks + * + * Some L2ARC device types exhibit extremely slow write performance. + * To accommodate for this there are some significant differences between + * the L2ARC and traditional cache design: + * + * 1. There is no eviction path from the ARC to the L2ARC. Evictions from + * the ARC behave as usual, freeing buffers and placing headers on ghost + * lists. The ARC does not send buffers to the L2ARC during eviction as + * this would add inflated write latencies for all ARC memory pressure. + * + * 2. The L2ARC attempts to cache data from the ARC before it is evicted. + * It does this by periodically scanning buffers from the eviction-end of + * the MFU and MRU ARC lists, copying them to the L2ARC devices if they are + * not already there. It scans until a headroom of buffers is satisfied, + * which itself is a buffer for ARC eviction. If a compressible buffer is + * found during scanning and selected for writing to an L2ARC device, we + * temporarily boost scanning headroom during the next scan cycle to make + * sure we adapt to compression effects (which might significantly reduce + * the data volume we write to L2ARC). The thread that does this is + * l2arc_feed_thread(), illustrated below; example sizes are included to + * provide a better sense of ratio than this diagram: + * + * head --> tail + * +---------------------+----------+ + * ARC_mfu |:::::#:::::::::::::::|o#o###o###|-->. # already on L2ARC + * +---------------------+----------+ | o L2ARC eligible + * ARC_mru |:#:::::::::::::::::::|#o#ooo####|-->| : ARC buffer + * +---------------------+----------+ | + * 15.9 Gbytes ^ 32 Mbytes | + * headroom | + * l2arc_feed_thread() + * | + * l2arc write hand <--[oooo]--' + * | 8 Mbyte + * | write max + * V + * +==============================+ + * L2ARC dev |####|#|###|###| |####| ... | + * +==============================+ + * 32 Gbytes + * + * 3. If an ARC buffer is copied to the L2ARC but then hit instead of + * evicted, then the L2ARC has cached a buffer much sooner than it probably + * needed to, potentially wasting L2ARC device bandwidth and storage. It is + * safe to say that this is an uncommon case, since buffers at the end of + * the ARC lists have moved there due to inactivity. + * + * 4. If the ARC evicts faster than the L2ARC can maintain a headroom, + * then the L2ARC simply misses copying some buffers. This serves as a + * pressure valve to prevent heavy read workloads from both stalling the ARC + * with waits and clogging the L2ARC with writes. This also helps prevent + * the potential for the L2ARC to churn if it attempts to cache content too + * quickly, such as during backups of the entire pool. + * + * 5. After system boot and before the ARC has filled main memory, there are + * no evictions from the ARC and so the tails of the ARC_mfu and ARC_mru + * lists can remain mostly static. Instead of searching from tail of these + * lists as pictured, the l2arc_feed_thread() will search from the list heads + * for eligible buffers, greatly increasing its chance of finding them. + * + * The L2ARC device write speed is also boosted during this time so that + * the L2ARC warms up faster. Since there have been no ARC evictions yet, + * there are no L2ARC reads, and no fear of degrading read performance + * through increased writes. + * + * 6. Writes to the L2ARC devices are grouped and sent in-sequence, so that + * the vdev queue can aggregate them into larger and fewer writes. Each + * device is written to in a rotor fashion, sweeping writes through + * available space then repeating. + * + * 7. The L2ARC does not store dirty content. It never needs to flush + * write buffers back to disk based storage. + * + * 8. If an ARC buffer is written (and dirtied) which also exists in the + * L2ARC, the now stale L2ARC buffer is immediately dropped. + * + * The performance of the L2ARC can be tweaked by a number of tunables, which + * may be necessary for different workloads: + * + * l2arc_write_max max write bytes per interval + * l2arc_write_boost extra write bytes during device warmup + * l2arc_noprefetch skip caching prefetched buffers + * l2arc_headroom number of max device writes to precache + * l2arc_headroom_boost when we find compressed buffers during ARC + * scanning, we multiply headroom by this + * percentage factor for the next scan cycle, + * since more compressed buffers are likely to + * be present + * l2arc_feed_secs seconds between L2ARC writing + * + * Tunables may be removed or added as future performance improvements are + * integrated, and also may become zpool properties. + * + * There are three key functions that control how the L2ARC warms up: + * + * l2arc_write_eligible() check if a buffer is eligible to cache + * l2arc_write_size() calculate how much to write + * l2arc_write_interval() calculate sleep delay between writes + * + * These three functions determine what to write, how much, and how quickly + * to send writes. + */ + +static boolean_t +l2arc_write_eligible(uint64_t spa_guid, arc_buf_hdr_t *hdr) +{ + /* + * A buffer is *not* eligible for the L2ARC if it: + * 1. belongs to a different spa. + * 2. is already cached on the L2ARC. + * 3. has an I/O in progress (it may be an incomplete read). + * 4. is flagged not eligible (zfs property). + */ + if (hdr->b_spa != spa_guid || HDR_HAS_L2HDR(hdr) || + HDR_IO_IN_PROGRESS(hdr) || !HDR_L2CACHE(hdr)) + return (B_FALSE); + + return (B_TRUE); +} + +static uint64_t +l2arc_write_size(void) +{ + uint64_t size; + + /* + * Make sure our globals have meaningful values in case the user + * altered them. + */ + size = l2arc_write_max; + if (size == 0) { + cmn_err(CE_NOTE, "Bad value for l2arc_write_max, value must " + "be greater than zero, resetting it to the default (%d)", + L2ARC_WRITE_SIZE); + size = l2arc_write_max = L2ARC_WRITE_SIZE; + } + + if (arc_warm == B_FALSE) + size += l2arc_write_boost; + + return (size); + +} + +static clock_t +l2arc_write_interval(clock_t began, uint64_t wanted, uint64_t wrote) +{ + clock_t interval, next, now; + + /* + * If the ARC lists are busy, increase our write rate; if the + * lists are stale, idle back. This is achieved by checking + * how much we previously wrote - if it was more than half of + * what we wanted, schedule the next write much sooner. + */ + if (l2arc_feed_again && wrote > (wanted / 2)) + interval = (hz * l2arc_feed_min_ms) / 1000; + else + interval = hz * l2arc_feed_secs; + + now = ddi_get_lbolt(); + next = MAX(now, MIN(now + interval, began + interval)); + + return (next); +} + +/* + * Cycle through L2ARC devices. This is how L2ARC load balances. + * If a device is returned, this also returns holding the spa config lock. + */ +static l2arc_dev_t * +l2arc_dev_get_next(void) +{ + l2arc_dev_t *first, *next = NULL; + + /* + * Lock out the removal of spas (spa_namespace_lock), then removal + * of cache devices (l2arc_dev_mtx). Once a device has been selected, + * both locks will be dropped and a spa config lock held instead. + */ + mutex_enter(&spa_namespace_lock); + mutex_enter(&l2arc_dev_mtx); + + /* if there are no vdevs, there is nothing to do */ + if (l2arc_ndev == 0) + goto out; + + first = NULL; + next = l2arc_dev_last; + do { + /* loop around the list looking for a non-faulted vdev */ + if (next == NULL) { + next = list_head(l2arc_dev_list); + } else { + next = list_next(l2arc_dev_list, next); + if (next == NULL) + next = list_head(l2arc_dev_list); + } + + /* if we have come back to the start, bail out */ + if (first == NULL) + first = next; + else if (next == first) + break; + + } while (vdev_is_dead(next->l2ad_vdev)); + + /* if we were unable to find any usable vdevs, return NULL */ + if (vdev_is_dead(next->l2ad_vdev)) + next = NULL; + + l2arc_dev_last = next; + +out: + mutex_exit(&l2arc_dev_mtx); + + /* + * Grab the config lock to prevent the 'next' device from being + * removed while we are writing to it. + */ + if (next != NULL) + spa_config_enter(next->l2ad_spa, SCL_L2ARC, next, RW_READER); + mutex_exit(&spa_namespace_lock); + + return (next); +} + +/* + * Free buffers that were tagged for destruction. + */ +static void +l2arc_do_free_on_write(void) +{ + list_t *buflist; + l2arc_data_free_t *df, *df_prev; + + mutex_enter(&l2arc_free_on_write_mtx); + buflist = l2arc_free_on_write; + + for (df = list_tail(buflist); df; df = df_prev) { + df_prev = list_prev(buflist, df); + ASSERT3P(df->l2df_abd, !=, NULL); + abd_free(df->l2df_abd); + list_remove(buflist, df); + kmem_free(df, sizeof (l2arc_data_free_t)); + } + + mutex_exit(&l2arc_free_on_write_mtx); +} + +/* + * A write to a cache device has completed. Update all headers to allow + * reads from these buffers to begin. + */ +static void +l2arc_write_done(zio_t *zio) +{ + l2arc_write_callback_t *cb; + l2arc_dev_t *dev; + list_t *buflist; + arc_buf_hdr_t *head, *hdr, *hdr_prev; + kmutex_t *hash_lock; + int64_t bytes_dropped = 0; + + cb = zio->io_private; + ASSERT3P(cb, !=, NULL); + dev = cb->l2wcb_dev; + ASSERT3P(dev, !=, NULL); + head = cb->l2wcb_head; + ASSERT3P(head, !=, NULL); + buflist = &dev->l2ad_buflist; + ASSERT3P(buflist, !=, NULL); + DTRACE_PROBE2(l2arc__iodone, zio_t *, zio, + l2arc_write_callback_t *, cb); + + if (zio->io_error != 0) + ARCSTAT_BUMP(arcstat_l2_writes_error); + + /* + * All writes completed, or an error was hit. + */ +top: + mutex_enter(&dev->l2ad_mtx); + for (hdr = list_prev(buflist, head); hdr; hdr = hdr_prev) { + hdr_prev = list_prev(buflist, hdr); + + hash_lock = HDR_LOCK(hdr); + + /* + * We cannot use mutex_enter or else we can deadlock + * with l2arc_write_buffers (due to swapping the order + * the hash lock and l2ad_mtx are taken). + */ + if (!mutex_tryenter(hash_lock)) { + /* + * Missed the hash lock. We must retry so we + * don't leave the ARC_FLAG_L2_WRITING bit set. + */ + ARCSTAT_BUMP(arcstat_l2_writes_lock_retry); + + /* + * We don't want to rescan the headers we've + * already marked as having been written out, so + * we reinsert the head node so we can pick up + * where we left off. + */ + list_remove(buflist, head); + list_insert_after(buflist, hdr, head); + + mutex_exit(&dev->l2ad_mtx); + + /* + * We wait for the hash lock to become available + * to try and prevent busy waiting, and increase + * the chance we'll be able to acquire the lock + * the next time around. + */ + mutex_enter(hash_lock); + mutex_exit(hash_lock); + goto top; + } + + /* + * We could not have been moved into the arc_l2c_only + * state while in-flight due to our ARC_FLAG_L2_WRITING + * bit being set. Let's just ensure that's being enforced. + */ + ASSERT(HDR_HAS_L1HDR(hdr)); + + /* + * Skipped - drop L2ARC entry and mark the header as no + * longer L2 eligibile. + */ + if (zio->io_error != 0) { + /* + * Error - drop L2ARC entry. + */ + list_remove(buflist, hdr); + arc_hdr_clear_flags(hdr, ARC_FLAG_HAS_L2HDR); + + ARCSTAT_INCR(arcstat_l2_psize, -arc_hdr_size(hdr)); + ARCSTAT_INCR(arcstat_l2_lsize, -HDR_GET_LSIZE(hdr)); + + bytes_dropped += arc_hdr_size(hdr); + (void) refcount_remove_many(&dev->l2ad_alloc, + arc_hdr_size(hdr), hdr); + } + + /* + * Allow ARC to begin reads and ghost list evictions to + * this L2ARC entry. + */ + arc_hdr_clear_flags(hdr, ARC_FLAG_L2_WRITING); + + mutex_exit(hash_lock); + } + + atomic_inc_64(&l2arc_writes_done); + list_remove(buflist, head); + ASSERT(!HDR_HAS_L1HDR(head)); + kmem_cache_free(hdr_l2only_cache, head); + mutex_exit(&dev->l2ad_mtx); + + vdev_space_update(dev->l2ad_vdev, -bytes_dropped, 0, 0); + + l2arc_do_free_on_write(); + + kmem_free(cb, sizeof (l2arc_write_callback_t)); +} + +/* + * A read to a cache device completed. Validate buffer contents before + * handing over to the regular ARC routines. + */ +static void +l2arc_read_done(zio_t *zio) +{ + l2arc_read_callback_t *cb; + arc_buf_hdr_t *hdr; + kmutex_t *hash_lock; + boolean_t valid_cksum; + + ASSERT3P(zio->io_vd, !=, NULL); + ASSERT(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE); + + spa_config_exit(zio->io_spa, SCL_L2ARC, zio->io_vd); + + cb = zio->io_private; + ASSERT3P(cb, !=, NULL); + hdr = cb->l2rcb_hdr; + ASSERT3P(hdr, !=, NULL); + + hash_lock = HDR_LOCK(hdr); + mutex_enter(hash_lock); + ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); + + /* + * If the data was read into a temporary buffer, + * move it and free the buffer. + */ + if (cb->l2rcb_abd != NULL) { + ASSERT3U(arc_hdr_size(hdr), <, zio->io_size); + if (zio->io_error == 0) { + abd_copy(hdr->b_l1hdr.b_pabd, cb->l2rcb_abd, + arc_hdr_size(hdr)); + } + + /* + * The following must be done regardless of whether + * there was an error: + * - free the temporary buffer + * - point zio to the real ARC buffer + * - set zio size accordingly + * These are required because zio is either re-used for + * an I/O of the block in the case of the error + * or the zio is passed to arc_read_done() and it + * needs real data. + */ + abd_free(cb->l2rcb_abd); + zio->io_size = zio->io_orig_size = arc_hdr_size(hdr); + zio->io_abd = zio->io_orig_abd = hdr->b_l1hdr.b_pabd; + } + + ASSERT3P(zio->io_abd, !=, NULL); + + /* + * Check this survived the L2ARC journey. + */ + ASSERT3P(zio->io_abd, ==, hdr->b_l1hdr.b_pabd); + zio->io_bp_copy = cb->l2rcb_bp; /* XXX fix in L2ARC 2.0 */ + zio->io_bp = &zio->io_bp_copy; /* XXX fix in L2ARC 2.0 */ + + valid_cksum = arc_cksum_is_equal(hdr, zio); + if (valid_cksum && zio->io_error == 0 && !HDR_L2_EVICTED(hdr)) { + mutex_exit(hash_lock); + zio->io_private = hdr; + arc_read_done(zio); + } else { + mutex_exit(hash_lock); + /* + * Buffer didn't survive caching. Increment stats and + * reissue to the original storage device. + */ + if (zio->io_error != 0) { + ARCSTAT_BUMP(arcstat_l2_io_error); + } else { + zio->io_error = SET_ERROR(EIO); + } + if (!valid_cksum) + ARCSTAT_BUMP(arcstat_l2_cksum_bad); + + /* + * If there's no waiter, issue an async i/o to the primary + * storage now. If there *is* a waiter, the caller must + * issue the i/o in a context where it's OK to block. + */ + if (zio->io_waiter == NULL) { + zio_t *pio = zio_unique_parent(zio); + + ASSERT(!pio || pio->io_child_type == ZIO_CHILD_LOGICAL); + + zio_nowait(zio_read(pio, zio->io_spa, zio->io_bp, + hdr->b_l1hdr.b_pabd, zio->io_size, arc_read_done, + hdr, zio->io_priority, cb->l2rcb_flags, + &cb->l2rcb_zb)); + } + } + + kmem_free(cb, sizeof (l2arc_read_callback_t)); +} + +/* + * This is the list priority from which the L2ARC will search for pages to + * cache. This is used within loops (0..3) to cycle through lists in the + * desired order. This order can have a significant effect on cache + * performance. + * + * Currently the metadata lists are hit first, MFU then MRU, followed by + * the data lists. This function returns a locked list, and also returns + * the lock pointer. + */ +static multilist_sublist_t * +l2arc_sublist_lock(int list_num) +{ + multilist_t *ml = NULL; + unsigned int idx; + + ASSERT(list_num >= 0 && list_num < L2ARC_FEED_TYPES); + + switch (list_num) { + case 0: + ml = arc_mfu->arcs_list[ARC_BUFC_METADATA]; + break; + case 1: + ml = arc_mru->arcs_list[ARC_BUFC_METADATA]; + break; + case 2: + ml = arc_mfu->arcs_list[ARC_BUFC_DATA]; + break; + case 3: + ml = arc_mru->arcs_list[ARC_BUFC_DATA]; + break; + default: + return (NULL); + } + + /* + * Return a randomly-selected sublist. This is acceptable + * because the caller feeds only a little bit of data for each + * call (8MB). Subsequent calls will result in different + * sublists being selected. + */ + idx = multilist_get_random_index(ml); + return (multilist_sublist_lock(ml, idx)); +} + +/* + * Evict buffers from the device write hand to the distance specified in + * bytes. This distance may span populated buffers, it may span nothing. + * This is clearing a region on the L2ARC device ready for writing. + * If the 'all' boolean is set, every buffer is evicted. + */ +static void +l2arc_evict(l2arc_dev_t *dev, uint64_t distance, boolean_t all) +{ + list_t *buflist; + arc_buf_hdr_t *hdr, *hdr_prev; + kmutex_t *hash_lock; + uint64_t taddr; + + buflist = &dev->l2ad_buflist; + + if (!all && dev->l2ad_first) { + /* + * This is the first sweep through the device. There is + * nothing to evict. + */ + return; + } + + if (dev->l2ad_hand >= (dev->l2ad_end - (2 * distance))) { + /* + * When nearing the end of the device, evict to the end + * before the device write hand jumps to the start. + */ + taddr = dev->l2ad_end; + } else { + taddr = dev->l2ad_hand + distance; + } + DTRACE_PROBE4(l2arc__evict, l2arc_dev_t *, dev, list_t *, buflist, + uint64_t, taddr, boolean_t, all); + +top: + mutex_enter(&dev->l2ad_mtx); + for (hdr = list_tail(buflist); hdr; hdr = hdr_prev) { + hdr_prev = list_prev(buflist, hdr); + + hash_lock = HDR_LOCK(hdr); + + /* + * We cannot use mutex_enter or else we can deadlock + * with l2arc_write_buffers (due to swapping the order + * the hash lock and l2ad_mtx are taken). + */ + if (!mutex_tryenter(hash_lock)) { + /* + * Missed the hash lock. Retry. + */ + ARCSTAT_BUMP(arcstat_l2_evict_lock_retry); + mutex_exit(&dev->l2ad_mtx); + mutex_enter(hash_lock); + mutex_exit(hash_lock); + goto top; + } + + if (HDR_L2_WRITE_HEAD(hdr)) { + /* + * We hit a write head node. Leave it for + * l2arc_write_done(). + */ + list_remove(buflist, hdr); + mutex_exit(hash_lock); + continue; + } + + if (!all && HDR_HAS_L2HDR(hdr) && + (hdr->b_l2hdr.b_daddr > taddr || + hdr->b_l2hdr.b_daddr < dev->l2ad_hand)) { + /* + * We've evicted to the target address, + * or the end of the device. + */ + mutex_exit(hash_lock); + break; + } + + ASSERT(HDR_HAS_L2HDR(hdr)); + if (!HDR_HAS_L1HDR(hdr)) { + ASSERT(!HDR_L2_READING(hdr)); + /* + * This doesn't exist in the ARC. Destroy. + * arc_hdr_destroy() will call list_remove() + * and decrement arcstat_l2_lsize. + */ + arc_change_state(arc_anon, hdr, hash_lock); + arc_hdr_destroy(hdr); + } else { + ASSERT(hdr->b_l1hdr.b_state != arc_l2c_only); + ARCSTAT_BUMP(arcstat_l2_evict_l1cached); + /* + * Invalidate issued or about to be issued + * reads, since we may be about to write + * over this location. + */ + if (HDR_L2_READING(hdr)) { + ARCSTAT_BUMP(arcstat_l2_evict_reading); + arc_hdr_set_flags(hdr, ARC_FLAG_L2_EVICTED); + } + + /* Ensure this header has finished being written */ + ASSERT(!HDR_L2_WRITING(hdr)); + + arc_hdr_l2hdr_destroy(hdr); + } + mutex_exit(hash_lock); + } + mutex_exit(&dev->l2ad_mtx); +} + +/* + * Find and write ARC buffers to the L2ARC device. + * + * An ARC_FLAG_L2_WRITING flag is set so that the L2ARC buffers are not valid + * for reading until they have completed writing. + * The headroom_boost is an in-out parameter used to maintain headroom boost + * state between calls to this function. + * + * Returns the number of bytes actually written (which may be smaller than + * the delta by which the device hand has changed due to alignment). + */ +static uint64_t +l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz) +{ + arc_buf_hdr_t *hdr, *hdr_prev, *head; + uint64_t write_asize, write_psize, write_lsize, headroom; + boolean_t full; + l2arc_write_callback_t *cb; + zio_t *pio, *wzio; + uint64_t guid = spa_load_guid(spa); + int try; + + ASSERT3P(dev->l2ad_vdev, !=, NULL); + + pio = NULL; + write_lsize = write_asize = write_psize = 0; + full = B_FALSE; + head = kmem_cache_alloc(hdr_l2only_cache, KM_PUSHPAGE); + arc_hdr_set_flags(head, ARC_FLAG_L2_WRITE_HEAD | ARC_FLAG_HAS_L2HDR); + + /* + * Copy buffers for L2ARC writing. + */ + for (try = 0; try < L2ARC_FEED_TYPES; try++) { + multilist_sublist_t *mls = l2arc_sublist_lock(try); + uint64_t passed_sz = 0; + + VERIFY3P(mls, !=, NULL); + + /* + * L2ARC fast warmup. + * + * Until the ARC is warm and starts to evict, read from the + * head of the ARC lists rather than the tail. + */ + if (arc_warm == B_FALSE) + hdr = multilist_sublist_head(mls); + else + hdr = multilist_sublist_tail(mls); + + headroom = target_sz * l2arc_headroom; + if (zfs_compressed_arc_enabled) + headroom = (headroom * l2arc_headroom_boost) / 100; + + for (; hdr; hdr = hdr_prev) { + kmutex_t *hash_lock; + + if (arc_warm == B_FALSE) + hdr_prev = multilist_sublist_next(mls, hdr); + else + hdr_prev = multilist_sublist_prev(mls, hdr); + + hash_lock = HDR_LOCK(hdr); + if (!mutex_tryenter(hash_lock)) { + /* + * Skip this buffer rather than waiting. + */ + continue; + } + + passed_sz += HDR_GET_LSIZE(hdr); + if (passed_sz > headroom) { + /* + * Searched too far. + */ + mutex_exit(hash_lock); + break; + } + + if (!l2arc_write_eligible(guid, hdr)) { + mutex_exit(hash_lock); + continue; + } + + /* + * We rely on the L1 portion of the header below, so + * it's invalid for this header to have been evicted out + * of the ghost cache, prior to being written out. The + * ARC_FLAG_L2_WRITING bit ensures this won't happen. + */ + ASSERT(HDR_HAS_L1HDR(hdr)); + + ASSERT3U(HDR_GET_PSIZE(hdr), >, 0); + ASSERT3P(hdr->b_l1hdr.b_pabd, !=, NULL); + ASSERT3U(arc_hdr_size(hdr), >, 0); + uint64_t psize = arc_hdr_size(hdr); + uint64_t asize = vdev_psize_to_asize(dev->l2ad_vdev, + psize); + + if ((write_asize + asize) > target_sz) { + full = B_TRUE; + mutex_exit(hash_lock); + break; + } + + if (pio == NULL) { + /* + * Insert a dummy header on the buflist so + * l2arc_write_done() can find where the + * write buffers begin without searching. + */ + mutex_enter(&dev->l2ad_mtx); + list_insert_head(&dev->l2ad_buflist, head); + mutex_exit(&dev->l2ad_mtx); + + cb = kmem_alloc( + sizeof (l2arc_write_callback_t), KM_SLEEP); + cb->l2wcb_dev = dev; + cb->l2wcb_head = head; + pio = zio_root(spa, l2arc_write_done, cb, + ZIO_FLAG_CANFAIL); + } + + hdr->b_l2hdr.b_dev = dev; + hdr->b_l2hdr.b_hits = 0; + + hdr->b_l2hdr.b_daddr = dev->l2ad_hand; + arc_hdr_set_flags(hdr, + ARC_FLAG_L2_WRITING | ARC_FLAG_HAS_L2HDR); + + mutex_enter(&dev->l2ad_mtx); + list_insert_head(&dev->l2ad_buflist, hdr); + mutex_exit(&dev->l2ad_mtx); + + (void) refcount_add_many(&dev->l2ad_alloc, psize, hdr); + + /* + * Normally the L2ARC can use the hdr's data, but if + * we're sharing data between the hdr and one of its + * bufs, L2ARC needs its own copy of the data so that + * the ZIO below can't race with the buf consumer. + * Another case where we need to create a copy of the + * data is when the buffer size is not device-aligned + * and we need to pad the block to make it such. + * That also keeps the clock hand suitably aligned. + * + * To ensure that the copy will be available for the + * lifetime of the ZIO and be cleaned up afterwards, we + * add it to the l2arc_free_on_write queue. + */ + abd_t *to_write; + if (!HDR_SHARED_DATA(hdr) && psize == asize) { + to_write = hdr->b_l1hdr.b_pabd; + } else { + to_write = abd_alloc_for_io(asize, + HDR_ISTYPE_METADATA(hdr)); + abd_copy(to_write, hdr->b_l1hdr.b_pabd, psize); + if (asize != psize) { + abd_zero_off(to_write, psize, + asize - psize); + } + l2arc_free_abd_on_write(to_write, asize, + arc_buf_type(hdr)); + } + wzio = zio_write_phys(pio, dev->l2ad_vdev, + hdr->b_l2hdr.b_daddr, asize, to_write, + ZIO_CHECKSUM_OFF, NULL, hdr, + ZIO_PRIORITY_ASYNC_WRITE, + ZIO_FLAG_CANFAIL, B_FALSE); + + write_lsize += HDR_GET_LSIZE(hdr); + DTRACE_PROBE2(l2arc__write, vdev_t *, dev->l2ad_vdev, + zio_t *, wzio); + + write_psize += psize; + write_asize += asize; + dev->l2ad_hand += asize; + + mutex_exit(hash_lock); + + (void) zio_nowait(wzio); + } + + multilist_sublist_unlock(mls); + + if (full == B_TRUE) + break; + } + + /* No buffers selected for writing? */ + if (pio == NULL) { + ASSERT0(write_lsize); + ASSERT(!HDR_HAS_L1HDR(head)); + kmem_cache_free(hdr_l2only_cache, head); + return (0); + } + + ASSERT3U(write_asize, <=, target_sz); + ARCSTAT_BUMP(arcstat_l2_writes_sent); + ARCSTAT_INCR(arcstat_l2_write_bytes, write_psize); + ARCSTAT_INCR(arcstat_l2_lsize, write_lsize); + ARCSTAT_INCR(arcstat_l2_psize, write_psize); + vdev_space_update(dev->l2ad_vdev, write_psize, 0, 0); + + /* + * Bump device hand to the device start if it is approaching the end. + * l2arc_evict() will already have evicted ahead for this case. + */ + if (dev->l2ad_hand >= (dev->l2ad_end - target_sz)) { + dev->l2ad_hand = dev->l2ad_start; + dev->l2ad_first = B_FALSE; + } + + dev->l2ad_writing = B_TRUE; + (void) zio_wait(pio); + dev->l2ad_writing = B_FALSE; + + return (write_asize); +} + +/* + * This thread feeds the L2ARC at regular intervals. This is the beating + * heart of the L2ARC. + */ +static void +l2arc_feed_thread(void) +{ + callb_cpr_t cpr; + l2arc_dev_t *dev; + spa_t *spa; + uint64_t size, wrote; + clock_t begin, next = ddi_get_lbolt(); + fstrans_cookie_t cookie; + + CALLB_CPR_INIT(&cpr, &l2arc_feed_thr_lock, callb_generic_cpr, FTAG); + + mutex_enter(&l2arc_feed_thr_lock); + + cookie = spl_fstrans_mark(); + while (l2arc_thread_exit == 0) { + CALLB_CPR_SAFE_BEGIN(&cpr); + (void) cv_timedwait_sig(&l2arc_feed_thr_cv, + &l2arc_feed_thr_lock, next); + CALLB_CPR_SAFE_END(&cpr, &l2arc_feed_thr_lock); + next = ddi_get_lbolt() + hz; + + /* + * Quick check for L2ARC devices. + */ + mutex_enter(&l2arc_dev_mtx); + if (l2arc_ndev == 0) { + mutex_exit(&l2arc_dev_mtx); + continue; + } + mutex_exit(&l2arc_dev_mtx); + begin = ddi_get_lbolt(); + + /* + * This selects the next l2arc device to write to, and in + * doing so the next spa to feed from: dev->l2ad_spa. This + * will return NULL if there are now no l2arc devices or if + * they are all faulted. + * + * If a device is returned, its spa's config lock is also + * held to prevent device removal. l2arc_dev_get_next() + * will grab and release l2arc_dev_mtx. + */ + if ((dev = l2arc_dev_get_next()) == NULL) + continue; + + spa = dev->l2ad_spa; + ASSERT3P(spa, !=, NULL); + + /* + * If the pool is read-only then force the feed thread to + * sleep a little longer. + */ + if (!spa_writeable(spa)) { + next = ddi_get_lbolt() + 5 * l2arc_feed_secs * hz; + spa_config_exit(spa, SCL_L2ARC, dev); + continue; + } + + /* + * Avoid contributing to memory pressure. + */ + if (arc_reclaim_needed()) { + ARCSTAT_BUMP(arcstat_l2_abort_lowmem); + spa_config_exit(spa, SCL_L2ARC, dev); + continue; + } + + ARCSTAT_BUMP(arcstat_l2_feeds); + + size = l2arc_write_size(); + + /* + * Evict L2ARC buffers that will be overwritten. + */ + l2arc_evict(dev, size, B_FALSE); + + /* + * Write ARC buffers. + */ + wrote = l2arc_write_buffers(spa, dev, size); + + /* + * Calculate interval between writes. + */ + next = l2arc_write_interval(begin, size, wrote); + spa_config_exit(spa, SCL_L2ARC, dev); + } + spl_fstrans_unmark(cookie); + + l2arc_thread_exit = 0; + cv_broadcast(&l2arc_feed_thr_cv); + CALLB_CPR_EXIT(&cpr); /* drops l2arc_feed_thr_lock */ + thread_exit(); +} + +boolean_t +l2arc_vdev_present(vdev_t *vd) +{ + l2arc_dev_t *dev; + + mutex_enter(&l2arc_dev_mtx); + for (dev = list_head(l2arc_dev_list); dev != NULL; + dev = list_next(l2arc_dev_list, dev)) { + if (dev->l2ad_vdev == vd) + break; + } + mutex_exit(&l2arc_dev_mtx); + + return (dev != NULL); +} + +/* + * Add a vdev for use by the L2ARC. By this point the spa has already + * validated the vdev and opened it. + */ +void +l2arc_add_vdev(spa_t *spa, vdev_t *vd) +{ + l2arc_dev_t *adddev; + + ASSERT(!l2arc_vdev_present(vd)); + + /* + * Create a new l2arc device entry. + */ + adddev = kmem_zalloc(sizeof (l2arc_dev_t), KM_SLEEP); + adddev->l2ad_spa = spa; + adddev->l2ad_vdev = vd; + adddev->l2ad_start = VDEV_LABEL_START_SIZE; + adddev->l2ad_end = VDEV_LABEL_START_SIZE + vdev_get_min_asize(vd); + adddev->l2ad_hand = adddev->l2ad_start; + adddev->l2ad_first = B_TRUE; + adddev->l2ad_writing = B_FALSE; + list_link_init(&adddev->l2ad_node); + + mutex_init(&adddev->l2ad_mtx, NULL, MUTEX_DEFAULT, NULL); + /* + * This is a list of all ARC buffers that are still valid on the + * device. + */ + list_create(&adddev->l2ad_buflist, sizeof (arc_buf_hdr_t), + offsetof(arc_buf_hdr_t, b_l2hdr.b_l2node)); + + vdev_space_update(vd, 0, 0, adddev->l2ad_end - adddev->l2ad_hand); + refcount_create(&adddev->l2ad_alloc); + + /* + * Add device to global list + */ + mutex_enter(&l2arc_dev_mtx); + list_insert_head(l2arc_dev_list, adddev); + atomic_inc_64(&l2arc_ndev); + mutex_exit(&l2arc_dev_mtx); +} + +/* + * Remove a vdev from the L2ARC. + */ +void +l2arc_remove_vdev(vdev_t *vd) +{ + l2arc_dev_t *dev, *nextdev, *remdev = NULL; + + /* + * Find the device by vdev + */ + mutex_enter(&l2arc_dev_mtx); + for (dev = list_head(l2arc_dev_list); dev; dev = nextdev) { + nextdev = list_next(l2arc_dev_list, dev); + if (vd == dev->l2ad_vdev) { + remdev = dev; + break; + } + } + ASSERT3P(remdev, !=, NULL); + + /* + * Remove device from global list + */ + list_remove(l2arc_dev_list, remdev); + l2arc_dev_last = NULL; /* may have been invalidated */ + atomic_dec_64(&l2arc_ndev); + mutex_exit(&l2arc_dev_mtx); + + /* + * Clear all buflists and ARC references. L2ARC device flush. + */ + l2arc_evict(remdev, 0, B_TRUE); + list_destroy(&remdev->l2ad_buflist); + mutex_destroy(&remdev->l2ad_mtx); + refcount_destroy(&remdev->l2ad_alloc); + kmem_free(remdev, sizeof (l2arc_dev_t)); +} + +void +l2arc_init(void) +{ + l2arc_thread_exit = 0; + l2arc_ndev = 0; + l2arc_writes_sent = 0; + l2arc_writes_done = 0; + + mutex_init(&l2arc_feed_thr_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&l2arc_feed_thr_cv, NULL, CV_DEFAULT, NULL); + mutex_init(&l2arc_dev_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&l2arc_free_on_write_mtx, NULL, MUTEX_DEFAULT, NULL); + + l2arc_dev_list = &L2ARC_dev_list; + l2arc_free_on_write = &L2ARC_free_on_write; + list_create(l2arc_dev_list, sizeof (l2arc_dev_t), + offsetof(l2arc_dev_t, l2ad_node)); + list_create(l2arc_free_on_write, sizeof (l2arc_data_free_t), + offsetof(l2arc_data_free_t, l2df_list_node)); +} + +void +l2arc_fini(void) +{ + /* + * This is called from dmu_fini(), which is called from spa_fini(); + * Because of this, we can assume that all l2arc devices have + * already been removed when the pools themselves were removed. + */ + + l2arc_do_free_on_write(); + + mutex_destroy(&l2arc_feed_thr_lock); + cv_destroy(&l2arc_feed_thr_cv); + mutex_destroy(&l2arc_dev_mtx); + mutex_destroy(&l2arc_free_on_write_mtx); + + list_destroy(l2arc_dev_list); + list_destroy(l2arc_free_on_write); +} + +void +l2arc_start(void) +{ + if (!(spa_mode_global & FWRITE)) + return; + + (void) thread_create(NULL, 0, l2arc_feed_thread, NULL, 0, &p0, + TS_RUN, defclsyspri); +} + +void +l2arc_stop(void) +{ + if (!(spa_mode_global & FWRITE)) + return; + + mutex_enter(&l2arc_feed_thr_lock); + cv_signal(&l2arc_feed_thr_cv); /* kick thread out of startup */ + l2arc_thread_exit = 1; + while (l2arc_thread_exit != 0) + cv_wait(&l2arc_feed_thr_cv, &l2arc_feed_thr_lock); + mutex_exit(&l2arc_feed_thr_lock); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(arc_buf_size); +EXPORT_SYMBOL(arc_write); +EXPORT_SYMBOL(arc_read); +EXPORT_SYMBOL(arc_buf_info); +EXPORT_SYMBOL(arc_getbuf_func); +EXPORT_SYMBOL(arc_add_prune_callback); +EXPORT_SYMBOL(arc_remove_prune_callback); + +/* BEGIN CSTYLED */ +module_param(zfs_arc_min, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_min, "Min arc size"); + +module_param(zfs_arc_max, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_max, "Max arc size"); + +module_param(zfs_arc_meta_limit, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_meta_limit, "Meta limit for arc size"); + +module_param(zfs_arc_meta_limit_percent, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_meta_limit_percent, + "Percent of arc size for arc meta limit"); + +module_param(zfs_arc_meta_min, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_meta_min, "Min arc metadata"); + +module_param(zfs_arc_meta_prune, int, 0644); +MODULE_PARM_DESC(zfs_arc_meta_prune, "Meta objects to scan for prune"); + +module_param(zfs_arc_meta_adjust_restarts, int, 0644); +MODULE_PARM_DESC(zfs_arc_meta_adjust_restarts, + "Limit number of restarts in arc_adjust_meta"); + +module_param(zfs_arc_meta_strategy, int, 0644); +MODULE_PARM_DESC(zfs_arc_meta_strategy, "Meta reclaim strategy"); + +module_param(zfs_arc_grow_retry, int, 0644); +MODULE_PARM_DESC(zfs_arc_grow_retry, "Seconds before growing arc size"); + +module_param(zfs_arc_p_aggressive_disable, int, 0644); +MODULE_PARM_DESC(zfs_arc_p_aggressive_disable, "disable aggressive arc_p grow"); + +module_param(zfs_arc_p_dampener_disable, int, 0644); +MODULE_PARM_DESC(zfs_arc_p_dampener_disable, "disable arc_p adapt dampener"); + +module_param(zfs_arc_shrink_shift, int, 0644); +MODULE_PARM_DESC(zfs_arc_shrink_shift, "log2(fraction of arc to reclaim)"); + +module_param(zfs_arc_pc_percent, uint, 0644); +MODULE_PARM_DESC(zfs_arc_pc_percent, + "Percent of pagecache to reclaim arc to"); + +module_param(zfs_arc_p_min_shift, int, 0644); +MODULE_PARM_DESC(zfs_arc_p_min_shift, "arc_c shift to calc min/max arc_p"); + +module_param(zfs_arc_average_blocksize, int, 0444); +MODULE_PARM_DESC(zfs_arc_average_blocksize, "Target average block size"); + +module_param(zfs_compressed_arc_enabled, int, 0644); +MODULE_PARM_DESC(zfs_compressed_arc_enabled, "Disable compressed arc buffers"); + +module_param(zfs_arc_min_prefetch_lifespan, int, 0644); +MODULE_PARM_DESC(zfs_arc_min_prefetch_lifespan, "Min life of prefetch block"); + +module_param(l2arc_write_max, ulong, 0644); +MODULE_PARM_DESC(l2arc_write_max, "Max write bytes per interval"); + +module_param(l2arc_write_boost, ulong, 0644); +MODULE_PARM_DESC(l2arc_write_boost, "Extra write bytes during device warmup"); + +module_param(l2arc_headroom, ulong, 0644); +MODULE_PARM_DESC(l2arc_headroom, "Number of max device writes to precache"); + +module_param(l2arc_headroom_boost, ulong, 0644); +MODULE_PARM_DESC(l2arc_headroom_boost, "Compressed l2arc_headroom multiplier"); + +module_param(l2arc_feed_secs, ulong, 0644); +MODULE_PARM_DESC(l2arc_feed_secs, "Seconds between L2ARC writing"); + +module_param(l2arc_feed_min_ms, ulong, 0644); +MODULE_PARM_DESC(l2arc_feed_min_ms, "Min feed interval in milliseconds"); + +module_param(l2arc_noprefetch, int, 0644); +MODULE_PARM_DESC(l2arc_noprefetch, "Skip caching prefetched buffers"); + +module_param(l2arc_feed_again, int, 0644); +MODULE_PARM_DESC(l2arc_feed_again, "Turbo L2ARC warmup"); + +module_param(l2arc_norw, int, 0644); +MODULE_PARM_DESC(l2arc_norw, "No reads during writes"); + +module_param(zfs_arc_lotsfree_percent, int, 0644); +MODULE_PARM_DESC(zfs_arc_lotsfree_percent, + "System free memory I/O throttle in bytes"); + +module_param(zfs_arc_sys_free, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_sys_free, "System free memory target size in bytes"); + +module_param(zfs_arc_dnode_limit, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_dnode_limit, "Minimum bytes of dnodes in arc"); + +module_param(zfs_arc_dnode_limit_percent, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_dnode_limit_percent, + "Percent of ARC meta buffers for dnodes"); + +module_param(zfs_arc_dnode_reduce_percent, ulong, 0644); +MODULE_PARM_DESC(zfs_arc_dnode_reduce_percent, + "Percentage of excess dnodes to try to unpin"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/blkptr.c +++ linux-aws-4.15.0/zfs/module/zfs/blkptr.c @@ -0,0 +1,154 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include + +/* + * Embedded-data Block Pointers + * + * Normally, block pointers point (via their DVAs) to a block which holds data. + * If the data that we need to store is very small, this is an inefficient + * use of space, because a block must be at minimum 1 sector (typically 512 + * bytes or 4KB). Additionally, reading these small blocks tends to generate + * more random reads. + * + * Embedded-data Block Pointers allow small pieces of data (the "payload", + * up to 112 bytes) to be stored in the block pointer itself, instead of + * being pointed to. The "Pointer" part of this name is a bit of a + * misnomer, as nothing is pointed to. + * + * BP_EMBEDDED_TYPE_DATA block pointers allow highly-compressible data to + * be embedded in the block pointer. The logic for this is handled in + * the SPA, by the zio pipeline. Therefore most code outside the zio + * pipeline doesn't need special-cases to handle these block pointers. + * + * See spa.h for details on the exact layout of embedded block pointers. + */ + +void +encode_embedded_bp_compressed(blkptr_t *bp, void *data, + enum zio_compress comp, int uncompressed_size, int compressed_size) +{ + uint64_t *bp64 = (uint64_t *)bp; + uint64_t w = 0; + uint8_t *data8 = data; + int i; + + ASSERT3U(compressed_size, <=, BPE_PAYLOAD_SIZE); + ASSERT(uncompressed_size == compressed_size || + comp != ZIO_COMPRESS_OFF); + ASSERT3U(comp, >=, ZIO_COMPRESS_OFF); + ASSERT3U(comp, <, ZIO_COMPRESS_FUNCTIONS); + + bzero(bp, sizeof (*bp)); + BP_SET_EMBEDDED(bp, B_TRUE); + BP_SET_COMPRESS(bp, comp); + BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER); + BPE_SET_LSIZE(bp, uncompressed_size); + BPE_SET_PSIZE(bp, compressed_size); + + /* + * Encode the byte array into the words of the block pointer. + * First byte goes into low bits of first word (little endian). + */ + for (i = 0; i < compressed_size; i++) { + BF64_SET(w, (i % sizeof (w)) * NBBY, NBBY, data8[i]); + if (i % sizeof (w) == sizeof (w) - 1) { + /* we've reached the end of a word */ + ASSERT3P(bp64, <, bp + 1); + *bp64 = w; + bp64++; + if (!BPE_IS_PAYLOADWORD(bp, bp64)) + bp64++; + w = 0; + } + } + /* write last partial word */ + if (bp64 < (uint64_t *)(bp + 1)) + *bp64 = w; +} + +/* + * buf must be at least BPE_GET_PSIZE(bp) bytes long (which will never be + * more than BPE_PAYLOAD_SIZE bytes). + */ +void +decode_embedded_bp_compressed(const blkptr_t *bp, void *buf) +{ + int psize; + uint8_t *buf8 = buf; + uint64_t w = 0; + const uint64_t *bp64 = (const uint64_t *)bp; + int i; + + ASSERT(BP_IS_EMBEDDED(bp)); + + psize = BPE_GET_PSIZE(bp); + + /* + * Decode the words of the block pointer into the byte array. + * Low bits of first word are the first byte (little endian). + */ + for (i = 0; i < psize; i++) { + if (i % sizeof (w) == 0) { + /* beginning of a word */ + ASSERT3P(bp64, <, bp + 1); + w = *bp64; + bp64++; + if (!BPE_IS_PAYLOADWORD(bp, bp64)) + bp64++; + } + buf8[i] = BF64_GET(w, (i % sizeof (w)) * NBBY, NBBY); + } +} + +/* + * Fill in the buffer with the (decompressed) payload of the embedded + * blkptr_t. Takes into account compression and byteorder (the payload is + * treated as a stream of bytes). + * Return 0 on success, or ENOSPC if it won't fit in the buffer. + */ +int +decode_embedded_bp(const blkptr_t *bp, void *buf, int buflen) +{ + int lsize, psize; + + ASSERT(BP_IS_EMBEDDED(bp)); + + lsize = BPE_GET_LSIZE(bp); + psize = BPE_GET_PSIZE(bp); + + if (lsize > buflen) + return (ENOSPC); + ASSERT3U(lsize, ==, buflen); + + if (BP_GET_COMPRESS(bp) != ZIO_COMPRESS_OFF) { + uint8_t dstbuf[BPE_PAYLOAD_SIZE]; + decode_embedded_bp_compressed(bp, dstbuf); + VERIFY0(zio_decompress_data_buf(BP_GET_COMPRESS(bp), + dstbuf, buf, psize, buflen)); + } else { + ASSERT3U(lsize, ==, psize); + decode_embedded_bp_compressed(bp, buf); + } + + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/bplist.c +++ linux-aws-4.15.0/zfs/module/zfs/bplist.c @@ -0,0 +1,77 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#include +#include + + +void +bplist_create(bplist_t *bpl) +{ + mutex_init(&bpl->bpl_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&bpl->bpl_list, sizeof (bplist_entry_t), + offsetof(bplist_entry_t, bpe_node)); +} + +void +bplist_destroy(bplist_t *bpl) +{ + list_destroy(&bpl->bpl_list); + mutex_destroy(&bpl->bpl_lock); +} + +void +bplist_append(bplist_t *bpl, const blkptr_t *bp) +{ + bplist_entry_t *bpe = kmem_alloc(sizeof (*bpe), KM_SLEEP); + + mutex_enter(&bpl->bpl_lock); + bpe->bpe_blk = *bp; + list_insert_tail(&bpl->bpl_list, bpe); + mutex_exit(&bpl->bpl_lock); +} + +/* + * To aid debugging, we keep the most recently removed entry. This way if + * we are in the callback, we can easily locate the entry. + */ +static bplist_entry_t *bplist_iterate_last_removed; + +void +bplist_iterate(bplist_t *bpl, bplist_itor_t *func, void *arg, dmu_tx_t *tx) +{ + bplist_entry_t *bpe; + + mutex_enter(&bpl->bpl_lock); + while ((bpe = list_head(&bpl->bpl_list))) { + bplist_iterate_last_removed = bpe; + list_remove(&bpl->bpl_list, bpe); + mutex_exit(&bpl->bpl_lock); + func(arg, &bpe->bpe_blk, tx); + kmem_free(bpe, sizeof (*bpe)); + mutex_enter(&bpl->bpl_lock); + } + mutex_exit(&bpl->bpl_lock); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/bpobj.c +++ linux-aws-4.15.0/zfs/module/zfs/bpobj.c @@ -0,0 +1,595 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + * Copyright (c) 2017 Datto Inc. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Return an empty bpobj, preferably the empty dummy one (dp_empty_bpobj). + */ +uint64_t +bpobj_alloc_empty(objset_t *os, int blocksize, dmu_tx_t *tx) +{ + spa_t *spa = dmu_objset_spa(os); + dsl_pool_t *dp = dmu_objset_pool(os); + + if (spa_feature_is_enabled(spa, SPA_FEATURE_EMPTY_BPOBJ)) { + if (!spa_feature_is_active(spa, SPA_FEATURE_EMPTY_BPOBJ)) { + ASSERT0(dp->dp_empty_bpobj); + dp->dp_empty_bpobj = + bpobj_alloc(os, SPA_OLD_MAXBLOCKSIZE, tx); + VERIFY(zap_add(os, + DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_EMPTY_BPOBJ, sizeof (uint64_t), 1, + &dp->dp_empty_bpobj, tx) == 0); + } + spa_feature_incr(spa, SPA_FEATURE_EMPTY_BPOBJ, tx); + ASSERT(dp->dp_empty_bpobj != 0); + return (dp->dp_empty_bpobj); + } else { + return (bpobj_alloc(os, blocksize, tx)); + } +} + +void +bpobj_decr_empty(objset_t *os, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dmu_objset_pool(os); + + spa_feature_decr(dmu_objset_spa(os), SPA_FEATURE_EMPTY_BPOBJ, tx); + if (!spa_feature_is_active(dmu_objset_spa(os), + SPA_FEATURE_EMPTY_BPOBJ)) { + VERIFY3U(0, ==, zap_remove(dp->dp_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_EMPTY_BPOBJ, tx)); + VERIFY3U(0, ==, dmu_object_free(os, dp->dp_empty_bpobj, tx)); + dp->dp_empty_bpobj = 0; + } +} + +uint64_t +bpobj_alloc(objset_t *os, int blocksize, dmu_tx_t *tx) +{ + int size; + + if (spa_version(dmu_objset_spa(os)) < SPA_VERSION_BPOBJ_ACCOUNT) + size = BPOBJ_SIZE_V0; + else if (spa_version(dmu_objset_spa(os)) < SPA_VERSION_DEADLISTS) + size = BPOBJ_SIZE_V1; + else + size = sizeof (bpobj_phys_t); + + return (dmu_object_alloc(os, DMU_OT_BPOBJ, blocksize, + DMU_OT_BPOBJ_HDR, size, tx)); +} + +void +bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) +{ + int64_t i; + bpobj_t bpo; + dmu_object_info_t doi; + int epb; + dmu_buf_t *dbuf = NULL; + + ASSERT(obj != dmu_objset_pool(os)->dp_empty_bpobj); + VERIFY3U(0, ==, bpobj_open(&bpo, os, obj)); + + mutex_enter(&bpo.bpo_lock); + + if (!bpo.bpo_havesubobj || bpo.bpo_phys->bpo_subobjs == 0) + goto out; + + VERIFY3U(0, ==, dmu_object_info(os, bpo.bpo_phys->bpo_subobjs, &doi)); + epb = doi.doi_data_block_size / sizeof (uint64_t); + + for (i = bpo.bpo_phys->bpo_num_subobjs - 1; i >= 0; i--) { + uint64_t *objarray; + uint64_t offset, blkoff; + + offset = i * sizeof (uint64_t); + blkoff = P2PHASE(i, epb); + + if (dbuf == NULL || dbuf->db_offset > offset) { + if (dbuf) + dmu_buf_rele(dbuf, FTAG); + VERIFY3U(0, ==, dmu_buf_hold(os, + bpo.bpo_phys->bpo_subobjs, offset, FTAG, &dbuf, 0)); + } + + ASSERT3U(offset, >=, dbuf->db_offset); + ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); + + objarray = dbuf->db_data; + bpobj_free(os, objarray[blkoff], tx); + } + if (dbuf) { + dmu_buf_rele(dbuf, FTAG); + dbuf = NULL; + } + VERIFY3U(0, ==, dmu_object_free(os, bpo.bpo_phys->bpo_subobjs, tx)); + +out: + mutex_exit(&bpo.bpo_lock); + bpobj_close(&bpo); + + VERIFY3U(0, ==, dmu_object_free(os, obj, tx)); +} + +int +bpobj_open(bpobj_t *bpo, objset_t *os, uint64_t object) +{ + dmu_object_info_t doi; + int err; + + err = dmu_object_info(os, object, &doi); + if (err) + return (err); + + bzero(bpo, sizeof (*bpo)); + mutex_init(&bpo->bpo_lock, NULL, MUTEX_DEFAULT, NULL); + + ASSERT(bpo->bpo_dbuf == NULL); + ASSERT(bpo->bpo_phys == NULL); + ASSERT(object != 0); + ASSERT3U(doi.doi_type, ==, DMU_OT_BPOBJ); + ASSERT3U(doi.doi_bonus_type, ==, DMU_OT_BPOBJ_HDR); + + err = dmu_bonus_hold(os, object, bpo, &bpo->bpo_dbuf); + if (err) + return (err); + + bpo->bpo_os = os; + bpo->bpo_object = object; + bpo->bpo_epb = doi.doi_data_block_size >> SPA_BLKPTRSHIFT; + bpo->bpo_havecomp = (doi.doi_bonus_size > BPOBJ_SIZE_V0); + bpo->bpo_havesubobj = (doi.doi_bonus_size > BPOBJ_SIZE_V1); + bpo->bpo_phys = bpo->bpo_dbuf->db_data; + return (0); +} + +void +bpobj_close(bpobj_t *bpo) +{ + /* Lame workaround for closing a bpobj that was never opened. */ + if (bpo->bpo_object == 0) + return; + + dmu_buf_rele(bpo->bpo_dbuf, bpo); + if (bpo->bpo_cached_dbuf != NULL) + dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); + bpo->bpo_dbuf = NULL; + bpo->bpo_phys = NULL; + bpo->bpo_cached_dbuf = NULL; + bpo->bpo_object = 0; + + mutex_destroy(&bpo->bpo_lock); +} + +static boolean_t +bpobj_hasentries(bpobj_t *bpo) +{ + return (bpo->bpo_phys->bpo_num_blkptrs != 0 || + (bpo->bpo_havesubobj && bpo->bpo_phys->bpo_num_subobjs != 0)); +} + +static int +bpobj_iterate_impl(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx, + boolean_t free) +{ + dmu_object_info_t doi; + int epb; + int64_t i; + int err = 0; + dmu_buf_t *dbuf = NULL; + + mutex_enter(&bpo->bpo_lock); + + if (!bpobj_hasentries(bpo)) + goto out; + + if (free) + dmu_buf_will_dirty(bpo->bpo_dbuf, tx); + + for (i = bpo->bpo_phys->bpo_num_blkptrs - 1; i >= 0; i--) { + blkptr_t *bparray; + blkptr_t *bp; + uint64_t offset, blkoff; + + offset = i * sizeof (blkptr_t); + blkoff = P2PHASE(i, bpo->bpo_epb); + + if (dbuf == NULL || dbuf->db_offset > offset) { + if (dbuf) + dmu_buf_rele(dbuf, FTAG); + err = dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, offset, + FTAG, &dbuf, 0); + if (err) + break; + } + + ASSERT3U(offset, >=, dbuf->db_offset); + ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); + + bparray = dbuf->db_data; + bp = &bparray[blkoff]; + err = func(arg, bp, tx); + if (err) + break; + if (free) { + bpo->bpo_phys->bpo_bytes -= + bp_get_dsize_sync(dmu_objset_spa(bpo->bpo_os), bp); + ASSERT3S(bpo->bpo_phys->bpo_bytes, >=, 0); + if (bpo->bpo_havecomp) { + bpo->bpo_phys->bpo_comp -= BP_GET_PSIZE(bp); + bpo->bpo_phys->bpo_uncomp -= BP_GET_UCSIZE(bp); + } + bpo->bpo_phys->bpo_num_blkptrs--; + ASSERT3S(bpo->bpo_phys->bpo_num_blkptrs, >=, 0); + } + } + if (dbuf) { + dmu_buf_rele(dbuf, FTAG); + dbuf = NULL; + } + if (free) { + VERIFY3U(0, ==, dmu_free_range(bpo->bpo_os, bpo->bpo_object, + (i + 1) * sizeof (blkptr_t), -1ULL, tx)); + } + if (err || !bpo->bpo_havesubobj || bpo->bpo_phys->bpo_subobjs == 0) + goto out; + + ASSERT(bpo->bpo_havecomp); + err = dmu_object_info(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, &doi); + if (err) { + mutex_exit(&bpo->bpo_lock); + return (err); + } + ASSERT3U(doi.doi_type, ==, DMU_OT_BPOBJ_SUBOBJ); + epb = doi.doi_data_block_size / sizeof (uint64_t); + + for (i = bpo->bpo_phys->bpo_num_subobjs - 1; i >= 0; i--) { + uint64_t *objarray; + uint64_t offset, blkoff; + bpobj_t sublist; + uint64_t used_before, comp_before, uncomp_before; + uint64_t used_after, comp_after, uncomp_after; + + offset = i * sizeof (uint64_t); + blkoff = P2PHASE(i, epb); + + if (dbuf == NULL || dbuf->db_offset > offset) { + if (dbuf) + dmu_buf_rele(dbuf, FTAG); + err = dmu_buf_hold(bpo->bpo_os, + bpo->bpo_phys->bpo_subobjs, offset, FTAG, &dbuf, 0); + if (err) + break; + } + + ASSERT3U(offset, >=, dbuf->db_offset); + ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); + + objarray = dbuf->db_data; + err = bpobj_open(&sublist, bpo->bpo_os, objarray[blkoff]); + if (err) + break; + if (free) { + err = bpobj_space(&sublist, + &used_before, &comp_before, &uncomp_before); + if (err != 0) { + bpobj_close(&sublist); + break; + } + } + err = bpobj_iterate_impl(&sublist, func, arg, tx, free); + if (free) { + VERIFY3U(0, ==, bpobj_space(&sublist, + &used_after, &comp_after, &uncomp_after)); + bpo->bpo_phys->bpo_bytes -= used_before - used_after; + ASSERT3S(bpo->bpo_phys->bpo_bytes, >=, 0); + bpo->bpo_phys->bpo_comp -= comp_before - comp_after; + bpo->bpo_phys->bpo_uncomp -= + uncomp_before - uncomp_after; + } + + bpobj_close(&sublist); + if (err) + break; + if (free) { + err = dmu_object_free(bpo->bpo_os, + objarray[blkoff], tx); + if (err) + break; + bpo->bpo_phys->bpo_num_subobjs--; + ASSERT3S(bpo->bpo_phys->bpo_num_subobjs, >=, 0); + } + } + if (dbuf) { + dmu_buf_rele(dbuf, FTAG); + dbuf = NULL; + } + if (free) { + VERIFY3U(0, ==, dmu_free_range(bpo->bpo_os, + bpo->bpo_phys->bpo_subobjs, + (i + 1) * sizeof (uint64_t), -1ULL, tx)); + } + +out: + /* If there are no entries, there should be no bytes. */ + if (!bpobj_hasentries(bpo)) { + ASSERT0(bpo->bpo_phys->bpo_bytes); + ASSERT0(bpo->bpo_phys->bpo_comp); + ASSERT0(bpo->bpo_phys->bpo_uncomp); + } + + mutex_exit(&bpo->bpo_lock); + return (err); +} + +/* + * Iterate and remove the entries. If func returns nonzero, iteration + * will stop and that entry will not be removed. + */ +int +bpobj_iterate(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx) +{ + return (bpobj_iterate_impl(bpo, func, arg, tx, B_TRUE)); +} + +/* + * Iterate the entries. If func returns nonzero, iteration will stop. + */ +int +bpobj_iterate_nofree(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx) +{ + return (bpobj_iterate_impl(bpo, func, arg, tx, B_FALSE)); +} + +void +bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx) +{ + bpobj_t subbpo; + uint64_t used, comp, uncomp, subsubobjs; + ASSERTV(dmu_object_info_t doi); + + ASSERT(bpo->bpo_havesubobj); + ASSERT(bpo->bpo_havecomp); + ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); + + if (subobj == dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj) { + bpobj_decr_empty(bpo->bpo_os, tx); + return; + } + + VERIFY3U(0, ==, bpobj_open(&subbpo, bpo->bpo_os, subobj)); + VERIFY3U(0, ==, bpobj_space(&subbpo, &used, &comp, &uncomp)); + + if (!bpobj_hasentries(&subbpo)) { + /* No point in having an empty subobj. */ + bpobj_close(&subbpo); + bpobj_free(bpo->bpo_os, subobj, tx); + return; + } + + mutex_enter(&bpo->bpo_lock); + dmu_buf_will_dirty(bpo->bpo_dbuf, tx); + if (bpo->bpo_phys->bpo_subobjs == 0) { + bpo->bpo_phys->bpo_subobjs = dmu_object_alloc(bpo->bpo_os, + DMU_OT_BPOBJ_SUBOBJ, SPA_OLD_MAXBLOCKSIZE, + DMU_OT_NONE, 0, tx); + } + + ASSERT0(dmu_object_info(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, &doi)); + ASSERT3U(doi.doi_type, ==, DMU_OT_BPOBJ_SUBOBJ); + + dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, + bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), + sizeof (subobj), &subobj, tx); + bpo->bpo_phys->bpo_num_subobjs++; + + /* + * If subobj has only one block of subobjs, then move subobj's + * subobjs to bpo's subobj list directly. This reduces + * recursion in bpobj_iterate due to nested subobjs. + */ + subsubobjs = subbpo.bpo_phys->bpo_subobjs; + if (subsubobjs != 0) { + dmu_object_info_t doi; + + VERIFY3U(0, ==, dmu_object_info(bpo->bpo_os, subsubobjs, &doi)); + if (doi.doi_max_offset == doi.doi_data_block_size) { + dmu_buf_t *subdb; + uint64_t numsubsub = subbpo.bpo_phys->bpo_num_subobjs; + + VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, subsubobjs, + 0, FTAG, &subdb, 0)); + /* + * Make sure that we are not asking dmu_write() + * to write more data than we have in our buffer. + */ + VERIFY3U(subdb->db_size, >=, + numsubsub * sizeof (subobj)); + dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, + bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), + numsubsub * sizeof (subobj), subdb->db_data, tx); + dmu_buf_rele(subdb, FTAG); + bpo->bpo_phys->bpo_num_subobjs += numsubsub; + + dmu_buf_will_dirty(subbpo.bpo_dbuf, tx); + subbpo.bpo_phys->bpo_subobjs = 0; + VERIFY3U(0, ==, dmu_object_free(bpo->bpo_os, + subsubobjs, tx)); + } + } + bpo->bpo_phys->bpo_bytes += used; + bpo->bpo_phys->bpo_comp += comp; + bpo->bpo_phys->bpo_uncomp += uncomp; + mutex_exit(&bpo->bpo_lock); + + bpobj_close(&subbpo); +} + +void +bpobj_enqueue(bpobj_t *bpo, const blkptr_t *bp, dmu_tx_t *tx) +{ + blkptr_t stored_bp = *bp; + uint64_t offset; + int blkoff; + blkptr_t *bparray; + + ASSERT(!BP_IS_HOLE(bp)); + ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); + + if (BP_IS_EMBEDDED(bp)) { + /* + * The bpobj will compress better without the payload. + * + * Note that we store EMBEDDED bp's because they have an + * uncompressed size, which must be accounted for. An + * alternative would be to add their size to bpo_uncomp + * without storing the bp, but that would create additional + * complications: bpo_uncomp would be inconsistent with the + * set of BP's stored, and bpobj_iterate() wouldn't visit + * all the space accounted for in the bpobj. + */ + bzero(&stored_bp, sizeof (stored_bp)); + stored_bp.blk_prop = bp->blk_prop; + stored_bp.blk_birth = bp->blk_birth; + } else if (!BP_GET_DEDUP(bp)) { + /* The bpobj will compress better without the checksum */ + bzero(&stored_bp.blk_cksum, sizeof (stored_bp.blk_cksum)); + } + + /* We never need the fill count. */ + stored_bp.blk_fill = 0; + + mutex_enter(&bpo->bpo_lock); + + offset = bpo->bpo_phys->bpo_num_blkptrs * sizeof (stored_bp); + blkoff = P2PHASE(bpo->bpo_phys->bpo_num_blkptrs, bpo->bpo_epb); + + if (bpo->bpo_cached_dbuf == NULL || + offset < bpo->bpo_cached_dbuf->db_offset || + offset >= bpo->bpo_cached_dbuf->db_offset + + bpo->bpo_cached_dbuf->db_size) { + if (bpo->bpo_cached_dbuf) + dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); + VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, + offset, bpo, &bpo->bpo_cached_dbuf, 0)); + } + + dmu_buf_will_dirty(bpo->bpo_cached_dbuf, tx); + bparray = bpo->bpo_cached_dbuf->db_data; + bparray[blkoff] = stored_bp; + + dmu_buf_will_dirty(bpo->bpo_dbuf, tx); + bpo->bpo_phys->bpo_num_blkptrs++; + bpo->bpo_phys->bpo_bytes += + bp_get_dsize_sync(dmu_objset_spa(bpo->bpo_os), bp); + if (bpo->bpo_havecomp) { + bpo->bpo_phys->bpo_comp += BP_GET_PSIZE(bp); + bpo->bpo_phys->bpo_uncomp += BP_GET_UCSIZE(bp); + } + mutex_exit(&bpo->bpo_lock); +} + +struct space_range_arg { + spa_t *spa; + uint64_t mintxg; + uint64_t maxtxg; + uint64_t used; + uint64_t comp; + uint64_t uncomp; +}; + +/* ARGSUSED */ +static int +space_range_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + struct space_range_arg *sra = arg; + + if (bp->blk_birth > sra->mintxg && bp->blk_birth <= sra->maxtxg) { + if (dsl_pool_sync_context(spa_get_dsl(sra->spa))) + sra->used += bp_get_dsize_sync(sra->spa, bp); + else + sra->used += bp_get_dsize(sra->spa, bp); + sra->comp += BP_GET_PSIZE(bp); + sra->uncomp += BP_GET_UCSIZE(bp); + } + return (0); +} + +int +bpobj_space(bpobj_t *bpo, uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + mutex_enter(&bpo->bpo_lock); + + *usedp = bpo->bpo_phys->bpo_bytes; + if (bpo->bpo_havecomp) { + *compp = bpo->bpo_phys->bpo_comp; + *uncompp = bpo->bpo_phys->bpo_uncomp; + mutex_exit(&bpo->bpo_lock); + return (0); + } else { + mutex_exit(&bpo->bpo_lock); + return (bpobj_space_range(bpo, 0, UINT64_MAX, + usedp, compp, uncompp)); + } +} + +/* + * Return the amount of space in the bpobj which is: + * mintxg < blk_birth <= maxtxg + */ +int +bpobj_space_range(bpobj_t *bpo, uint64_t mintxg, uint64_t maxtxg, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + struct space_range_arg sra = { 0 }; + int err; + + /* + * As an optimization, if they want the whole txg range, just + * get bpo_bytes rather than iterating over the bps. + */ + if (mintxg < TXG_INITIAL && maxtxg == UINT64_MAX && bpo->bpo_havecomp) + return (bpobj_space(bpo, usedp, compp, uncompp)); + + sra.spa = dmu_objset_spa(bpo->bpo_os); + sra.mintxg = mintxg; + sra.maxtxg = maxtxg; + + err = bpobj_iterate_nofree(bpo, space_range_cb, &sra, NULL); + *usedp = sra.used; + *compp = sra.comp; + *uncompp = sra.uncomp; + return (err); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/bptree.c +++ linux-aws-4.15.0/zfs/module/zfs/bptree.c @@ -0,0 +1,302 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * A bptree is a queue of root block pointers from destroyed datasets. When a + * dataset is destroyed its root block pointer is put on the end of the pool's + * bptree queue so the dataset's blocks can be freed asynchronously by + * dsl_scan_sync. This allows the delete operation to finish without traversing + * all the dataset's blocks. + * + * Note that while bt_begin and bt_end are only ever incremented in this code, + * they are effectively reset to 0 every time the entire bptree is freed because + * the bptree's object is destroyed and re-created. + */ + +struct bptree_args { + bptree_phys_t *ba_phys; /* data in bonus buffer, dirtied if freeing */ + boolean_t ba_free; /* true if freeing during traversal */ + + bptree_itor_t *ba_func; /* function to call for each blockpointer */ + void *ba_arg; /* caller supplied argument to ba_func */ + dmu_tx_t *ba_tx; /* caller supplied tx, NULL if not freeing */ +} bptree_args_t; + +uint64_t +bptree_alloc(objset_t *os, dmu_tx_t *tx) +{ + uint64_t obj; + dmu_buf_t *db; + bptree_phys_t *bt; + + obj = dmu_object_alloc(os, DMU_OTN_UINT64_METADATA, + SPA_OLD_MAXBLOCKSIZE, DMU_OTN_UINT64_METADATA, + sizeof (bptree_phys_t), tx); + + /* + * Bonus buffer contents are already initialized to 0, but for + * readability we make it explicit. + */ + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); + dmu_buf_will_dirty(db, tx); + bt = db->db_data; + bt->bt_begin = 0; + bt->bt_end = 0; + bt->bt_bytes = 0; + bt->bt_comp = 0; + bt->bt_uncomp = 0; + dmu_buf_rele(db, FTAG); + + return (obj); +} + +int +bptree_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) +{ + dmu_buf_t *db; + bptree_phys_t *bt; + + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); + bt = db->db_data; + ASSERT3U(bt->bt_begin, ==, bt->bt_end); + ASSERT0(bt->bt_bytes); + ASSERT0(bt->bt_comp); + ASSERT0(bt->bt_uncomp); + dmu_buf_rele(db, FTAG); + + return (dmu_object_free(os, obj, tx)); +} + +boolean_t +bptree_is_empty(objset_t *os, uint64_t obj) +{ + dmu_buf_t *db; + bptree_phys_t *bt; + boolean_t rv; + + VERIFY0(dmu_bonus_hold(os, obj, FTAG, &db)); + bt = db->db_data; + rv = (bt->bt_begin == bt->bt_end); + dmu_buf_rele(db, FTAG); + return (rv); +} + +void +bptree_add(objset_t *os, uint64_t obj, blkptr_t *bp, uint64_t birth_txg, + uint64_t bytes, uint64_t comp, uint64_t uncomp, dmu_tx_t *tx) +{ + dmu_buf_t *db; + bptree_phys_t *bt; + bptree_entry_phys_t *bte; + + /* + * bptree objects are in the pool mos, therefore they can only be + * modified in syncing context. Furthermore, this is only modified + * by the sync thread, so no locking is necessary. + */ + ASSERT(dmu_tx_is_syncing(tx)); + + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); + bt = db->db_data; + + bte = kmem_zalloc(sizeof (*bte), KM_SLEEP); + bte->be_birth_txg = birth_txg; + bte->be_bp = *bp; + dmu_write(os, obj, bt->bt_end * sizeof (*bte), sizeof (*bte), bte, tx); + kmem_free(bte, sizeof (*bte)); + + dmu_buf_will_dirty(db, tx); + bt->bt_end++; + bt->bt_bytes += bytes; + bt->bt_comp += comp; + bt->bt_uncomp += uncomp; + dmu_buf_rele(db, FTAG); +} + +/* ARGSUSED */ +static int +bptree_visit_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + int err; + struct bptree_args *ba = arg; + + if (bp == NULL || BP_IS_HOLE(bp)) + return (0); + + err = ba->ba_func(ba->ba_arg, bp, ba->ba_tx); + if (err == 0 && ba->ba_free) { + ba->ba_phys->bt_bytes -= bp_get_dsize_sync(spa, bp); + ba->ba_phys->bt_comp -= BP_GET_PSIZE(bp); + ba->ba_phys->bt_uncomp -= BP_GET_UCSIZE(bp); + } + return (err); +} + +/* + * If "free" is set: + * - It is assumed that "func" will be freeing the block pointers. + * - If "func" returns nonzero, the bookmark will be remembered and + * iteration will be restarted from this point on next invocation. + * - If an i/o error is encountered (e.g. "func" returns EIO or ECKSUM), + * bptree_iterate will remember the bookmark, continue traversing + * any additional entries, and return 0. + * + * If "free" is not set, traversal will stop and return an error if + * an i/o error is encountered. + * + * In either case, if zfs_free_leak_on_eio is set, i/o errors will be + * ignored and traversal will continue (i.e. TRAVERSE_HARD will be passed to + * traverse_dataset_destroyed()). + */ +int +bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, bptree_itor_t func, + void *arg, dmu_tx_t *tx) +{ + boolean_t ioerr = B_FALSE; + int err; + uint64_t i; + dmu_buf_t *db; + struct bptree_args ba; + + ASSERT(!free || dmu_tx_is_syncing(tx)); + + err = dmu_bonus_hold(os, obj, FTAG, &db); + if (err != 0) + return (err); + + if (free) + dmu_buf_will_dirty(db, tx); + + ba.ba_phys = db->db_data; + ba.ba_free = free; + ba.ba_func = func; + ba.ba_arg = arg; + ba.ba_tx = tx; + + err = 0; + for (i = ba.ba_phys->bt_begin; i < ba.ba_phys->bt_end; i++) { + bptree_entry_phys_t bte; + int flags = TRAVERSE_PREFETCH_METADATA | TRAVERSE_POST; + + err = dmu_read(os, obj, i * sizeof (bte), sizeof (bte), + &bte, DMU_READ_NO_PREFETCH); + if (err != 0) + break; + + if (zfs_free_leak_on_eio) + flags |= TRAVERSE_HARD; + zfs_dbgmsg("bptree index %lld: traversing from min_txg=%lld " + "bookmark %lld/%lld/%lld/%lld", + (longlong_t)i, + (longlong_t)bte.be_birth_txg, + (longlong_t)bte.be_zb.zb_objset, + (longlong_t)bte.be_zb.zb_object, + (longlong_t)bte.be_zb.zb_level, + (longlong_t)bte.be_zb.zb_blkid); + err = traverse_dataset_destroyed(os->os_spa, &bte.be_bp, + bte.be_birth_txg, &bte.be_zb, flags, + bptree_visit_cb, &ba); + if (free) { + /* + * The callback has freed the visited block pointers. + * Record our traversal progress on disk, either by + * updating this record's bookmark, or by logically + * removing this record by advancing bt_begin. + */ + if (err != 0) { + /* save bookmark for future resume */ + ASSERT3U(bte.be_zb.zb_objset, ==, + ZB_DESTROYED_OBJSET); + ASSERT0(bte.be_zb.zb_level); + dmu_write(os, obj, i * sizeof (bte), + sizeof (bte), &bte, tx); + if (err == EIO || err == ECKSUM || + err == ENXIO) { + /* + * Skip the rest of this tree and + * continue on to the next entry. + */ + err = 0; + ioerr = B_TRUE; + } else { + break; + } + } else if (ioerr) { + /* + * This entry is finished, but there were + * i/o errors on previous entries, so we + * can't adjust bt_begin. Set this entry's + * be_birth_txg such that it will be + * treated as a no-op in future traversals. + */ + bte.be_birth_txg = UINT64_MAX; + dmu_write(os, obj, i * sizeof (bte), + sizeof (bte), &bte, tx); + } + + if (!ioerr) { + ba.ba_phys->bt_begin++; + (void) dmu_free_range(os, obj, + i * sizeof (bte), sizeof (bte), tx); + } + } else if (err != 0) { + break; + } + } + + ASSERT(!free || err != 0 || ioerr || + ba.ba_phys->bt_begin == ba.ba_phys->bt_end); + + /* if all blocks are free there should be no used space */ + if (ba.ba_phys->bt_begin == ba.ba_phys->bt_end) { + if (zfs_free_leak_on_eio) { + ba.ba_phys->bt_bytes = 0; + ba.ba_phys->bt_comp = 0; + ba.ba_phys->bt_uncomp = 0; + } + + ASSERT0(ba.ba_phys->bt_bytes); + ASSERT0(ba.ba_phys->bt_comp); + ASSERT0(ba.ba_phys->bt_uncomp); + } + + dmu_buf_rele(db, FTAG); + + return (err); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/bqueue.c +++ linux-aws-4.15.0/zfs/module/zfs/bqueue.c @@ -0,0 +1,112 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2014 by Delphix. All rights reserved. + */ + +#include +#include + +static inline bqueue_node_t * +obj2node(bqueue_t *q, void *data) +{ + return ((bqueue_node_t *)((char *)data + q->bq_node_offset)); +} + +/* + * Initialize a blocking queue The maximum capacity of the queue is set to + * size. Types that want to be stored in a bqueue must contain a bqueue_node_t, + * and offset should give its offset from the start of the struct. Return 0 on + * success, or -1 on failure. + */ +int +bqueue_init(bqueue_t *q, uint64_t size, size_t node_offset) +{ + list_create(&q->bq_list, node_offset + sizeof (bqueue_node_t), + node_offset + offsetof(bqueue_node_t, bqn_node)); + cv_init(&q->bq_add_cv, NULL, CV_DEFAULT, NULL); + cv_init(&q->bq_pop_cv, NULL, CV_DEFAULT, NULL); + mutex_init(&q->bq_lock, NULL, MUTEX_DEFAULT, NULL); + q->bq_node_offset = node_offset; + q->bq_size = 0; + q->bq_maxsize = size; + return (0); +} + +/* + * Destroy a blocking queue. This function asserts that there are no + * elements in the queue, and no one is blocked on the condition + * variables. + */ +void +bqueue_destroy(bqueue_t *q) +{ + ASSERT0(q->bq_size); + cv_destroy(&q->bq_add_cv); + cv_destroy(&q->bq_pop_cv); + mutex_destroy(&q->bq_lock); + list_destroy(&q->bq_list); +} + +/* + * Add data to q, consuming size units of capacity. If there is insufficient + * capacity to consume size units, block until capacity exists. Asserts size is + * > 0. + */ +void +bqueue_enqueue(bqueue_t *q, void *data, uint64_t item_size) +{ + ASSERT3U(item_size, >, 0); + ASSERT3U(item_size, <=, q->bq_maxsize); + mutex_enter(&q->bq_lock); + obj2node(q, data)->bqn_size = item_size; + while (q->bq_size + item_size > q->bq_maxsize) { + cv_wait(&q->bq_add_cv, &q->bq_lock); + } + q->bq_size += item_size; + list_insert_tail(&q->bq_list, data); + cv_signal(&q->bq_pop_cv); + mutex_exit(&q->bq_lock); +} +/* + * Take the first element off of q. If there are no elements on the queue, wait + * until one is put there. Return the removed element. + */ +void * +bqueue_dequeue(bqueue_t *q) +{ + void *ret = NULL; + uint64_t item_size; + mutex_enter(&q->bq_lock); + while (q->bq_size == 0) { + cv_wait(&q->bq_pop_cv, &q->bq_lock); + } + ret = list_remove_head(&q->bq_list); + ASSERT3P(ret, !=, NULL); + item_size = obj2node(q, ret)->bqn_size; + q->bq_size -= item_size; + cv_signal(&q->bq_add_cv); + mutex_exit(&q->bq_lock); + return (ret); +} + +/* + * Returns true if the space used is 0. + */ +boolean_t +bqueue_empty(bqueue_t *q) +{ + return (q->bq_size == 0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dbuf.c +++ linux-aws-4.15.0/zfs/module/zfs/dbuf.c @@ -0,0 +1,3898 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct dbuf_hold_impl_data { + /* Function arguments */ + dnode_t *dh_dn; + uint8_t dh_level; + uint64_t dh_blkid; + boolean_t dh_fail_sparse; + boolean_t dh_fail_uncached; + void *dh_tag; + dmu_buf_impl_t **dh_dbp; + /* Local variables */ + dmu_buf_impl_t *dh_db; + dmu_buf_impl_t *dh_parent; + blkptr_t *dh_bp; + int dh_err; + dbuf_dirty_record_t *dh_dr; + int dh_depth; +}; + +static void __dbuf_hold_impl_init(struct dbuf_hold_impl_data *dh, + dnode_t *dn, uint8_t level, uint64_t blkid, boolean_t fail_sparse, + boolean_t fail_uncached, + void *tag, dmu_buf_impl_t **dbp, int depth); +static int __dbuf_hold_impl(struct dbuf_hold_impl_data *dh); + +uint_t zfs_dbuf_evict_key; + +static boolean_t dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx); +static void dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx); + +extern inline void dmu_buf_init_user(dmu_buf_user_t *dbu, + dmu_buf_evict_func_t *evict_func_sync, + dmu_buf_evict_func_t *evict_func_async, + dmu_buf_t **clear_on_evict_dbufp); + +/* + * Global data structures and functions for the dbuf cache. + */ +static kmem_cache_t *dbuf_kmem_cache; +static taskq_t *dbu_evict_taskq; + +static kthread_t *dbuf_cache_evict_thread; +static kmutex_t dbuf_evict_lock; +static kcondvar_t dbuf_evict_cv; +static boolean_t dbuf_evict_thread_exit; + +/* + * LRU cache of dbufs. The dbuf cache maintains a list of dbufs that + * are not currently held but have been recently released. These dbufs + * are not eligible for arc eviction until they are aged out of the cache. + * Dbufs are added to the dbuf cache once the last hold is released. If a + * dbuf is later accessed and still exists in the dbuf cache, then it will + * be removed from the cache and later re-added to the head of the cache. + * Dbufs that are aged out of the cache will be immediately destroyed and + * become eligible for arc eviction. + */ +static multilist_t *dbuf_cache; +static refcount_t dbuf_cache_size; +unsigned long dbuf_cache_max_bytes = 100 * 1024 * 1024; + +/* Cap the size of the dbuf cache to log2 fraction of arc size. */ +int dbuf_cache_max_shift = 5; + +/* + * The dbuf cache uses a three-stage eviction policy: + * - A low water marker designates when the dbuf eviction thread + * should stop evicting from the dbuf cache. + * - When we reach the maximum size (aka mid water mark), we + * signal the eviction thread to run. + * - The high water mark indicates when the eviction thread + * is unable to keep up with the incoming load and eviction must + * happen in the context of the calling thread. + * + * The dbuf cache: + * (max size) + * low water mid water hi water + * +----------------------------------------+----------+----------+ + * | | | | + * | | | | + * | | | | + * | | | | + * +----------------------------------------+----------+----------+ + * stop signal evict + * evicting eviction directly + * thread + * + * The high and low water marks indicate the operating range for the eviction + * thread. The low water mark is, by default, 90% of the total size of the + * cache and the high water mark is at 110% (both of these percentages can be + * changed by setting dbuf_cache_lowater_pct and dbuf_cache_hiwater_pct, + * respectively). The eviction thread will try to ensure that the cache remains + * within this range by waking up every second and checking if the cache is + * above the low water mark. The thread can also be woken up by callers adding + * elements into the cache if the cache is larger than the mid water (i.e max + * cache size). Once the eviction thread is woken up and eviction is required, + * it will continue evicting buffers until it's able to reduce the cache size + * to the low water mark. If the cache size continues to grow and hits the high + * water mark, then callers adding elements to the cache will begin to evict + * directly from the cache until the cache is no longer above the high water + * mark. + */ + +/* + * The percentage above and below the maximum cache size. + */ +uint_t dbuf_cache_hiwater_pct = 10; +uint_t dbuf_cache_lowater_pct = 10; + +/* ARGSUSED */ +static int +dbuf_cons(void *vdb, void *unused, int kmflag) +{ + dmu_buf_impl_t *db = vdb; + bzero(db, sizeof (dmu_buf_impl_t)); + + mutex_init(&db->db_mtx, NULL, MUTEX_DEFAULT, NULL); + cv_init(&db->db_changed, NULL, CV_DEFAULT, NULL); + multilist_link_init(&db->db_cache_link); + refcount_create(&db->db_holds); + multilist_link_init(&db->db_cache_link); + + return (0); +} + +/* ARGSUSED */ +static void +dbuf_dest(void *vdb, void *unused) +{ + dmu_buf_impl_t *db = vdb; + mutex_destroy(&db->db_mtx); + cv_destroy(&db->db_changed); + ASSERT(!multilist_link_active(&db->db_cache_link)); + refcount_destroy(&db->db_holds); +} + +/* + * dbuf hash table routines + */ +static dbuf_hash_table_t dbuf_hash_table; + +static uint64_t dbuf_hash_count; + +static uint64_t +dbuf_hash(void *os, uint64_t obj, uint8_t lvl, uint64_t blkid) +{ + uintptr_t osv = (uintptr_t)os; + uint64_t crc = -1ULL; + + ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY); + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (lvl)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (osv >> 6)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 0)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 8)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (blkid >> 0)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (blkid >> 8)) & 0xFF]; + + crc ^= (osv>>14) ^ (obj>>16) ^ (blkid>>16); + + return (crc); +} + +#define DBUF_EQUAL(dbuf, os, obj, level, blkid) \ + ((dbuf)->db.db_object == (obj) && \ + (dbuf)->db_objset == (os) && \ + (dbuf)->db_level == (level) && \ + (dbuf)->db_blkid == (blkid)) + +dmu_buf_impl_t * +dbuf_find(objset_t *os, uint64_t obj, uint8_t level, uint64_t blkid) +{ + dbuf_hash_table_t *h = &dbuf_hash_table; + uint64_t hv; + uint64_t idx; + dmu_buf_impl_t *db; + + hv = dbuf_hash(os, obj, level, blkid); + idx = hv & h->hash_table_mask; + + mutex_enter(DBUF_HASH_MUTEX(h, idx)); + for (db = h->hash_table[idx]; db != NULL; db = db->db_hash_next) { + if (DBUF_EQUAL(db, os, obj, level, blkid)) { + mutex_enter(&db->db_mtx); + if (db->db_state != DB_EVICTING) { + mutex_exit(DBUF_HASH_MUTEX(h, idx)); + return (db); + } + mutex_exit(&db->db_mtx); + } + } + mutex_exit(DBUF_HASH_MUTEX(h, idx)); + return (NULL); +} + +static dmu_buf_impl_t * +dbuf_find_bonus(objset_t *os, uint64_t object) +{ + dnode_t *dn; + dmu_buf_impl_t *db = NULL; + + if (dnode_hold(os, object, FTAG, &dn) == 0) { + rw_enter(&dn->dn_struct_rwlock, RW_READER); + if (dn->dn_bonus != NULL) { + db = dn->dn_bonus; + mutex_enter(&db->db_mtx); + } + rw_exit(&dn->dn_struct_rwlock); + dnode_rele(dn, FTAG); + } + return (db); +} + +/* + * Insert an entry into the hash table. If there is already an element + * equal to elem in the hash table, then the already existing element + * will be returned and the new element will not be inserted. + * Otherwise returns NULL. + */ +static dmu_buf_impl_t * +dbuf_hash_insert(dmu_buf_impl_t *db) +{ + dbuf_hash_table_t *h = &dbuf_hash_table; + objset_t *os = db->db_objset; + uint64_t obj = db->db.db_object; + int level = db->db_level; + uint64_t blkid, hv, idx; + dmu_buf_impl_t *dbf; + + blkid = db->db_blkid; + hv = dbuf_hash(os, obj, level, blkid); + idx = hv & h->hash_table_mask; + + mutex_enter(DBUF_HASH_MUTEX(h, idx)); + for (dbf = h->hash_table[idx]; dbf != NULL; dbf = dbf->db_hash_next) { + if (DBUF_EQUAL(dbf, os, obj, level, blkid)) { + mutex_enter(&dbf->db_mtx); + if (dbf->db_state != DB_EVICTING) { + mutex_exit(DBUF_HASH_MUTEX(h, idx)); + return (dbf); + } + mutex_exit(&dbf->db_mtx); + } + } + + mutex_enter(&db->db_mtx); + db->db_hash_next = h->hash_table[idx]; + h->hash_table[idx] = db; + mutex_exit(DBUF_HASH_MUTEX(h, idx)); + atomic_inc_64(&dbuf_hash_count); + + return (NULL); +} + +/* + * Remove an entry from the hash table. It must be in the EVICTING state. + */ +static void +dbuf_hash_remove(dmu_buf_impl_t *db) +{ + dbuf_hash_table_t *h = &dbuf_hash_table; + uint64_t hv, idx; + dmu_buf_impl_t *dbf, **dbp; + + hv = dbuf_hash(db->db_objset, db->db.db_object, + db->db_level, db->db_blkid); + idx = hv & h->hash_table_mask; + + /* + * We mustn't hold db_mtx to maintain lock ordering: + * DBUF_HASH_MUTEX > db_mtx. + */ + ASSERT(refcount_is_zero(&db->db_holds)); + ASSERT(db->db_state == DB_EVICTING); + ASSERT(!MUTEX_HELD(&db->db_mtx)); + + mutex_enter(DBUF_HASH_MUTEX(h, idx)); + dbp = &h->hash_table[idx]; + while ((dbf = *dbp) != db) { + dbp = &dbf->db_hash_next; + ASSERT(dbf != NULL); + } + *dbp = db->db_hash_next; + db->db_hash_next = NULL; + mutex_exit(DBUF_HASH_MUTEX(h, idx)); + atomic_dec_64(&dbuf_hash_count); +} + +typedef enum { + DBVU_EVICTING, + DBVU_NOT_EVICTING +} dbvu_verify_type_t; + +static void +dbuf_verify_user(dmu_buf_impl_t *db, dbvu_verify_type_t verify_type) +{ +#ifdef ZFS_DEBUG + int64_t holds; + + if (db->db_user == NULL) + return; + + /* Only data blocks support the attachment of user data. */ + ASSERT(db->db_level == 0); + + /* Clients must resolve a dbuf before attaching user data. */ + ASSERT(db->db.db_data != NULL); + ASSERT3U(db->db_state, ==, DB_CACHED); + + holds = refcount_count(&db->db_holds); + if (verify_type == DBVU_EVICTING) { + /* + * Immediate eviction occurs when holds == dirtycnt. + * For normal eviction buffers, holds is zero on + * eviction, except when dbuf_fix_old_data() calls + * dbuf_clear_data(). However, the hold count can grow + * during eviction even though db_mtx is held (see + * dmu_bonus_hold() for an example), so we can only + * test the generic invariant that holds >= dirtycnt. + */ + ASSERT3U(holds, >=, db->db_dirtycnt); + } else { + if (db->db_user_immediate_evict == TRUE) + ASSERT3U(holds, >=, db->db_dirtycnt); + else + ASSERT3U(holds, >, 0); + } +#endif +} + +static void +dbuf_evict_user(dmu_buf_impl_t *db) +{ + dmu_buf_user_t *dbu = db->db_user; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + + if (dbu == NULL) + return; + + dbuf_verify_user(db, DBVU_EVICTING); + db->db_user = NULL; + +#ifdef ZFS_DEBUG + if (dbu->dbu_clear_on_evict_dbufp != NULL) + *dbu->dbu_clear_on_evict_dbufp = NULL; +#endif + + /* + * There are two eviction callbacks - one that we call synchronously + * and one that we invoke via a taskq. The async one is useful for + * avoiding lock order reversals and limiting stack depth. + * + * Note that if we have a sync callback but no async callback, + * it's likely that the sync callback will free the structure + * containing the dbu. In that case we need to take care to not + * dereference dbu after calling the sync evict func. + */ + boolean_t has_async = (dbu->dbu_evict_func_async != NULL); + + if (dbu->dbu_evict_func_sync != NULL) + dbu->dbu_evict_func_sync(dbu); + + if (has_async) { + taskq_dispatch_ent(dbu_evict_taskq, dbu->dbu_evict_func_async, + dbu, 0, &dbu->dbu_tqent); + } +} + +boolean_t +dbuf_is_metadata(dmu_buf_impl_t *db) +{ + /* + * Consider indirect blocks and spill blocks to be meta data. + */ + if (db->db_level > 0 || db->db_blkid == DMU_SPILL_BLKID) { + return (B_TRUE); + } else { + boolean_t is_metadata; + + DB_DNODE_ENTER(db); + is_metadata = DMU_OT_IS_METADATA(DB_DNODE(db)->dn_type); + DB_DNODE_EXIT(db); + + return (is_metadata); + } +} + + +/* + * This function *must* return indices evenly distributed between all + * sublists of the multilist. This is needed due to how the dbuf eviction + * code is laid out; dbuf_evict_thread() assumes dbufs are evenly + * distributed between all sublists and uses this assumption when + * deciding which sublist to evict from and how much to evict from it. + */ +unsigned int +dbuf_cache_multilist_index_func(multilist_t *ml, void *obj) +{ + dmu_buf_impl_t *db = obj; + + /* + * The assumption here, is the hash value for a given + * dmu_buf_impl_t will remain constant throughout it's lifetime + * (i.e. it's objset, object, level and blkid fields don't change). + * Thus, we don't need to store the dbuf's sublist index + * on insertion, as this index can be recalculated on removal. + * + * Also, the low order bits of the hash value are thought to be + * distributed evenly. Otherwise, in the case that the multilist + * has a power of two number of sublists, each sublists' usage + * would not be evenly distributed. + */ + return (dbuf_hash(db->db_objset, db->db.db_object, + db->db_level, db->db_blkid) % + multilist_get_num_sublists(ml)); +} + +static inline unsigned long +dbuf_cache_target_bytes(void) +{ + return MIN(dbuf_cache_max_bytes, + arc_target_bytes() >> dbuf_cache_max_shift); +} + +static inline boolean_t +dbuf_cache_above_hiwater(void) +{ + uint64_t dbuf_cache_target = dbuf_cache_target_bytes(); + + uint64_t dbuf_cache_hiwater_bytes = + (dbuf_cache_target * dbuf_cache_hiwater_pct) / 100; + + return (refcount_count(&dbuf_cache_size) > + dbuf_cache_target + dbuf_cache_hiwater_bytes); +} + +static inline boolean_t +dbuf_cache_above_lowater(void) +{ + uint64_t dbuf_cache_target = dbuf_cache_target_bytes(); + + uint64_t dbuf_cache_lowater_bytes = + (dbuf_cache_target * dbuf_cache_lowater_pct) / 100; + + return (refcount_count(&dbuf_cache_size) > + dbuf_cache_target - dbuf_cache_lowater_bytes); +} + +/* + * Evict the oldest eligible dbuf from the dbuf cache. + */ +static void +dbuf_evict_one(void) +{ + int idx = multilist_get_random_index(dbuf_cache); + multilist_sublist_t *mls = multilist_sublist_lock(dbuf_cache, idx); + dmu_buf_impl_t *db; + ASSERT(!MUTEX_HELD(&dbuf_evict_lock)); + + /* + * Set the thread's tsd to indicate that it's processing evictions. + * Once a thread stops evicting from the dbuf cache it will + * reset its tsd to NULL. + */ + ASSERT3P(tsd_get(zfs_dbuf_evict_key), ==, NULL); + (void) tsd_set(zfs_dbuf_evict_key, (void *)B_TRUE); + + db = multilist_sublist_tail(mls); + while (db != NULL && mutex_tryenter(&db->db_mtx) == 0) { + db = multilist_sublist_prev(mls, db); + } + + DTRACE_PROBE2(dbuf__evict__one, dmu_buf_impl_t *, db, + multilist_sublist_t *, mls); + + if (db != NULL) { + multilist_sublist_remove(mls, db); + multilist_sublist_unlock(mls); + (void) refcount_remove_many(&dbuf_cache_size, + db->db.db_size, db); + dbuf_destroy(db); + } else { + multilist_sublist_unlock(mls); + } + (void) tsd_set(zfs_dbuf_evict_key, NULL); +} + +/* + * The dbuf evict thread is responsible for aging out dbufs from the + * cache. Once the cache has reached it's maximum size, dbufs are removed + * and destroyed. The eviction thread will continue running until the size + * of the dbuf cache is at or below the maximum size. Once the dbuf is aged + * out of the cache it is destroyed and becomes eligible for arc eviction. + */ +static void +dbuf_evict_thread(void) +{ + callb_cpr_t cpr; + + CALLB_CPR_INIT(&cpr, &dbuf_evict_lock, callb_generic_cpr, FTAG); + + mutex_enter(&dbuf_evict_lock); + while (!dbuf_evict_thread_exit) { + while (!dbuf_cache_above_lowater() && !dbuf_evict_thread_exit) { + CALLB_CPR_SAFE_BEGIN(&cpr); + (void) cv_timedwait_sig_hires(&dbuf_evict_cv, + &dbuf_evict_lock, SEC2NSEC(1), MSEC2NSEC(1), 0); + CALLB_CPR_SAFE_END(&cpr, &dbuf_evict_lock); + } + mutex_exit(&dbuf_evict_lock); + + /* + * Keep evicting as long as we're above the low water mark + * for the cache. We do this without holding the locks to + * minimize lock contention. + */ + while (dbuf_cache_above_lowater() && !dbuf_evict_thread_exit) { + dbuf_evict_one(); + } + + mutex_enter(&dbuf_evict_lock); + } + + dbuf_evict_thread_exit = B_FALSE; + cv_broadcast(&dbuf_evict_cv); + CALLB_CPR_EXIT(&cpr); /* drops dbuf_evict_lock */ + thread_exit(); +} + +/* + * Wake up the dbuf eviction thread if the dbuf cache is at its max size. + * If the dbuf cache is at its high water mark, then evict a dbuf from the + * dbuf cache using the callers context. + */ +static void +dbuf_evict_notify(void) +{ + + /* + * We use thread specific data to track when a thread has + * started processing evictions. This allows us to avoid deeply + * nested stacks that would have a call flow similar to this: + * + * dbuf_rele()-->dbuf_rele_and_unlock()-->dbuf_evict_notify() + * ^ | + * | | + * +-----dbuf_destroy()<--dbuf_evict_one()<--------+ + * + * The dbuf_eviction_thread will always have its tsd set until + * that thread exits. All other threads will only set their tsd + * if they are participating in the eviction process. This only + * happens if the eviction thread is unable to process evictions + * fast enough. To keep the dbuf cache size in check, other threads + * can evict from the dbuf cache directly. Those threads will set + * their tsd values so that we ensure that they only evict one dbuf + * from the dbuf cache. + */ + if (tsd_get(zfs_dbuf_evict_key) != NULL) + return; + + /* + * We check if we should evict without holding the dbuf_evict_lock, + * because it's OK to occasionally make the wrong decision here, + * and grabbing the lock results in massive lock contention. + */ + if (refcount_count(&dbuf_cache_size) > dbuf_cache_target_bytes()) { + if (dbuf_cache_above_hiwater()) + dbuf_evict_one(); + cv_signal(&dbuf_evict_cv); + } +} + + + +void +dbuf_init(void) +{ + uint64_t hsize = 1ULL << 16; + dbuf_hash_table_t *h = &dbuf_hash_table; + int i; + + /* + * The hash table is big enough to fill all of physical memory + * with an average block size of zfs_arc_average_blocksize (default 8K). + * By default, the table will take up + * totalmem * sizeof(void*) / 8K (1MB per GB with 8-byte pointers). + */ + while (hsize * zfs_arc_average_blocksize < physmem * PAGESIZE) + hsize <<= 1; + +retry: + h->hash_table_mask = hsize - 1; +#if defined(_KERNEL) && defined(HAVE_SPL) + /* + * Large allocations which do not require contiguous pages + * should be using vmem_alloc() in the linux kernel + */ + h->hash_table = vmem_zalloc(hsize * sizeof (void *), KM_SLEEP); +#else + h->hash_table = kmem_zalloc(hsize * sizeof (void *), KM_NOSLEEP); +#endif + if (h->hash_table == NULL) { + /* XXX - we should really return an error instead of assert */ + ASSERT(hsize > (1ULL << 10)); + hsize >>= 1; + goto retry; + } + + dbuf_kmem_cache = kmem_cache_create("dmu_buf_impl_t", + sizeof (dmu_buf_impl_t), + 0, dbuf_cons, dbuf_dest, NULL, NULL, NULL, 0); + + for (i = 0; i < DBUF_MUTEXES; i++) + mutex_init(&h->hash_mutexes[i], NULL, MUTEX_DEFAULT, NULL); + + dbuf_stats_init(h); + + /* + * Setup the parameters for the dbuf cache. We cap the size of the + * dbuf cache to 1/32nd (default) of the size of the ARC. + */ + dbuf_cache_max_bytes = MIN(dbuf_cache_max_bytes, + arc_target_bytes() >> dbuf_cache_max_shift); + + /* + * All entries are queued via taskq_dispatch_ent(), so min/maxalloc + * configuration is not required. + */ + dbu_evict_taskq = taskq_create("dbu_evict", 1, defclsyspri, 0, 0, 0); + + dbuf_cache = multilist_create(sizeof (dmu_buf_impl_t), + offsetof(dmu_buf_impl_t, db_cache_link), + dbuf_cache_multilist_index_func); + refcount_create(&dbuf_cache_size); + + tsd_create(&zfs_dbuf_evict_key, NULL); + dbuf_evict_thread_exit = B_FALSE; + mutex_init(&dbuf_evict_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&dbuf_evict_cv, NULL, CV_DEFAULT, NULL); + dbuf_cache_evict_thread = thread_create(NULL, 0, dbuf_evict_thread, + NULL, 0, &p0, TS_RUN, minclsyspri); +} + +void +dbuf_fini(void) +{ + dbuf_hash_table_t *h = &dbuf_hash_table; + int i; + + dbuf_stats_destroy(); + + for (i = 0; i < DBUF_MUTEXES; i++) + mutex_destroy(&h->hash_mutexes[i]); +#if defined(_KERNEL) && defined(HAVE_SPL) + /* + * Large allocations which do not require contiguous pages + * should be using vmem_free() in the linux kernel + */ + vmem_free(h->hash_table, (h->hash_table_mask + 1) * sizeof (void *)); +#else + kmem_free(h->hash_table, (h->hash_table_mask + 1) * sizeof (void *)); +#endif + kmem_cache_destroy(dbuf_kmem_cache); + taskq_destroy(dbu_evict_taskq); + + mutex_enter(&dbuf_evict_lock); + dbuf_evict_thread_exit = B_TRUE; + while (dbuf_evict_thread_exit) { + cv_signal(&dbuf_evict_cv); + cv_wait(&dbuf_evict_cv, &dbuf_evict_lock); + } + mutex_exit(&dbuf_evict_lock); + tsd_destroy(&zfs_dbuf_evict_key); + + mutex_destroy(&dbuf_evict_lock); + cv_destroy(&dbuf_evict_cv); + + refcount_destroy(&dbuf_cache_size); + multilist_destroy(dbuf_cache); +} + +/* + * Other stuff. + */ + +#ifdef ZFS_DEBUG +static void +dbuf_verify(dmu_buf_impl_t *db) +{ + dnode_t *dn; + dbuf_dirty_record_t *dr; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + + if (!(zfs_flags & ZFS_DEBUG_DBUF_VERIFY)) + return; + + ASSERT(db->db_objset != NULL); + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if (dn == NULL) { + ASSERT(db->db_parent == NULL); + ASSERT(db->db_blkptr == NULL); + } else { + ASSERT3U(db->db.db_object, ==, dn->dn_object); + ASSERT3P(db->db_objset, ==, dn->dn_objset); + ASSERT3U(db->db_level, <, dn->dn_nlevels); + ASSERT(db->db_blkid == DMU_BONUS_BLKID || + db->db_blkid == DMU_SPILL_BLKID || + !avl_is_empty(&dn->dn_dbufs)); + } + if (db->db_blkid == DMU_BONUS_BLKID) { + ASSERT(dn != NULL); + ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); + ASSERT3U(db->db.db_offset, ==, DMU_BONUS_BLKID); + } else if (db->db_blkid == DMU_SPILL_BLKID) { + ASSERT(dn != NULL); + ASSERT0(db->db.db_offset); + } else { + ASSERT3U(db->db.db_offset, ==, db->db_blkid * db->db.db_size); + } + + for (dr = db->db_data_pending; dr != NULL; dr = dr->dr_next) + ASSERT(dr->dr_dbuf == db); + + for (dr = db->db_last_dirty; dr != NULL; dr = dr->dr_next) + ASSERT(dr->dr_dbuf == db); + + /* + * We can't assert that db_size matches dn_datablksz because it + * can be momentarily different when another thread is doing + * dnode_set_blksz(). + */ + if (db->db_level == 0 && db->db.db_object == DMU_META_DNODE_OBJECT) { + dr = db->db_data_pending; + /* + * It should only be modified in syncing context, so + * make sure we only have one copy of the data. + */ + ASSERT(dr == NULL || dr->dt.dl.dr_data == db->db_buf); + } + + /* verify db->db_blkptr */ + if (db->db_blkptr) { + if (db->db_parent == dn->dn_dbuf) { + /* db is pointed to by the dnode */ + /* ASSERT3U(db->db_blkid, <, dn->dn_nblkptr); */ + if (DMU_OBJECT_IS_SPECIAL(db->db.db_object)) + ASSERT(db->db_parent == NULL); + else + ASSERT(db->db_parent != NULL); + if (db->db_blkid != DMU_SPILL_BLKID) + ASSERT3P(db->db_blkptr, ==, + &dn->dn_phys->dn_blkptr[db->db_blkid]); + } else { + /* db is pointed to by an indirect block */ + ASSERTV(int epb = db->db_parent->db.db_size >> + SPA_BLKPTRSHIFT); + ASSERT3U(db->db_parent->db_level, ==, db->db_level+1); + ASSERT3U(db->db_parent->db.db_object, ==, + db->db.db_object); + /* + * dnode_grow_indblksz() can make this fail if we don't + * have the struct_rwlock. XXX indblksz no longer + * grows. safe to do this now? + */ + if (RW_WRITE_HELD(&dn->dn_struct_rwlock)) { + ASSERT3P(db->db_blkptr, ==, + ((blkptr_t *)db->db_parent->db.db_data + + db->db_blkid % epb)); + } + } + } + if ((db->db_blkptr == NULL || BP_IS_HOLE(db->db_blkptr)) && + (db->db_buf == NULL || db->db_buf->b_data) && + db->db.db_data && db->db_blkid != DMU_BONUS_BLKID && + db->db_state != DB_FILL && !dn->dn_free_txg) { + /* + * If the blkptr isn't set but they have nonzero data, + * it had better be dirty, otherwise we'll lose that + * data when we evict this buffer. + * + * There is an exception to this rule for indirect blocks; in + * this case, if the indirect block is a hole, we fill in a few + * fields on each of the child blocks (importantly, birth time) + * to prevent hole birth times from being lost when you + * partially fill in a hole. + */ + if (db->db_dirtycnt == 0) { + if (db->db_level == 0) { + uint64_t *buf = db->db.db_data; + int i; + + for (i = 0; i < db->db.db_size >> 3; i++) { + ASSERT(buf[i] == 0); + } + } else { + int i; + blkptr_t *bps = db->db.db_data; + ASSERT3U(1 << DB_DNODE(db)->dn_indblkshift, ==, + db->db.db_size); + /* + * We want to verify that all the blkptrs in the + * indirect block are holes, but we may have + * automatically set up a few fields for them. + * We iterate through each blkptr and verify + * they only have those fields set. + */ + for (i = 0; + i < db->db.db_size / sizeof (blkptr_t); + i++) { + blkptr_t *bp = &bps[i]; + ASSERT(ZIO_CHECKSUM_IS_ZERO( + &bp->blk_cksum)); + ASSERT( + DVA_IS_EMPTY(&bp->blk_dva[0]) && + DVA_IS_EMPTY(&bp->blk_dva[1]) && + DVA_IS_EMPTY(&bp->blk_dva[2])); + ASSERT0(bp->blk_fill); + ASSERT0(bp->blk_pad[0]); + ASSERT0(bp->blk_pad[1]); + ASSERT(!BP_IS_EMBEDDED(bp)); + ASSERT(BP_IS_HOLE(bp)); + ASSERT0(bp->blk_phys_birth); + } + } + } + } + DB_DNODE_EXIT(db); +} +#endif + +static void +dbuf_clear_data(dmu_buf_impl_t *db) +{ + ASSERT(MUTEX_HELD(&db->db_mtx)); + dbuf_evict_user(db); + ASSERT3P(db->db_buf, ==, NULL); + db->db.db_data = NULL; + if (db->db_state != DB_NOFILL) + db->db_state = DB_UNCACHED; +} + +static void +dbuf_set_data(dmu_buf_impl_t *db, arc_buf_t *buf) +{ + ASSERT(MUTEX_HELD(&db->db_mtx)); + ASSERT(buf != NULL); + + db->db_buf = buf; + ASSERT(buf->b_data != NULL); + db->db.db_data = buf->b_data; +} + +/* + * Loan out an arc_buf for read. Return the loaned arc_buf. + */ +arc_buf_t * +dbuf_loan_arcbuf(dmu_buf_impl_t *db) +{ + arc_buf_t *abuf; + + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + mutex_enter(&db->db_mtx); + if (arc_released(db->db_buf) || refcount_count(&db->db_holds) > 1) { + int blksz = db->db.db_size; + spa_t *spa = db->db_objset->os_spa; + + mutex_exit(&db->db_mtx); + abuf = arc_loan_buf(spa, B_FALSE, blksz); + bcopy(db->db.db_data, abuf->b_data, blksz); + } else { + abuf = db->db_buf; + arc_loan_inuse_buf(abuf, db); + db->db_buf = NULL; + dbuf_clear_data(db); + mutex_exit(&db->db_mtx); + } + return (abuf); +} + +/* + * Calculate which level n block references the data at the level 0 offset + * provided. + */ +uint64_t +dbuf_whichblock(const dnode_t *dn, const int64_t level, const uint64_t offset) +{ + if (dn->dn_datablkshift != 0 && dn->dn_indblkshift != 0) { + /* + * The level n blkid is equal to the level 0 blkid divided by + * the number of level 0s in a level n block. + * + * The level 0 blkid is offset >> datablkshift = + * offset / 2^datablkshift. + * + * The number of level 0s in a level n is the number of block + * pointers in an indirect block, raised to the power of level. + * This is 2^(indblkshift - SPA_BLKPTRSHIFT)^level = + * 2^(level*(indblkshift - SPA_BLKPTRSHIFT)). + * + * Thus, the level n blkid is: offset / + * ((2^datablkshift)*(2^(level*(indblkshift - SPA_BLKPTRSHIFT))) + * = offset / 2^(datablkshift + level * + * (indblkshift - SPA_BLKPTRSHIFT)) + * = offset >> (datablkshift + level * + * (indblkshift - SPA_BLKPTRSHIFT)) + */ + + const unsigned exp = dn->dn_datablkshift + + level * (dn->dn_indblkshift - SPA_BLKPTRSHIFT); + + if (exp >= 8 * sizeof (offset)) { + /* This only happens on the highest indirection level */ + ASSERT3U(level, ==, dn->dn_nlevels - 1); + return (0); + } + + ASSERT3U(exp, <, 8 * sizeof (offset)); + + return (offset >> exp); + } else { + ASSERT3U(offset, <, dn->dn_datablksz); + return (0); + } +} + +static void +dbuf_read_done(zio_t *zio, arc_buf_t *buf, void *vdb) +{ + dmu_buf_impl_t *db = vdb; + + mutex_enter(&db->db_mtx); + ASSERT3U(db->db_state, ==, DB_READ); + /* + * All reads are synchronous, so we must have a hold on the dbuf + */ + ASSERT(refcount_count(&db->db_holds) > 0); + ASSERT(db->db_buf == NULL); + ASSERT(db->db.db_data == NULL); + if (db->db_level == 0 && db->db_freed_in_flight) { + /* we were freed in flight; disregard any error */ + arc_release(buf, db); + bzero(buf->b_data, db->db.db_size); + arc_buf_freeze(buf); + db->db_freed_in_flight = FALSE; + dbuf_set_data(db, buf); + db->db_state = DB_CACHED; + } else if (zio == NULL || zio->io_error == 0) { + dbuf_set_data(db, buf); + db->db_state = DB_CACHED; + } else { + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + ASSERT3P(db->db_buf, ==, NULL); + arc_buf_destroy(buf, db); + db->db_state = DB_UNCACHED; + } + cv_broadcast(&db->db_changed); + dbuf_rele_and_unlock(db, NULL); +} + +static int +dbuf_read_impl(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags) +{ + dnode_t *dn; + zbookmark_phys_t zb; + uint32_t aflags = ARC_FLAG_NOWAIT; + int err; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + ASSERT(!refcount_is_zero(&db->db_holds)); + /* We need the struct_rwlock to prevent db_blkptr from changing. */ + ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); + ASSERT(MUTEX_HELD(&db->db_mtx)); + ASSERT(db->db_state == DB_UNCACHED); + ASSERT(db->db_buf == NULL); + + if (db->db_blkid == DMU_BONUS_BLKID) { + /* + * The bonus length stored in the dnode may be less than + * the maximum available space in the bonus buffer. + */ + int bonuslen = MIN(dn->dn_bonuslen, dn->dn_phys->dn_bonuslen); + int max_bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); + + ASSERT3U(bonuslen, <=, db->db.db_size); + db->db.db_data = kmem_alloc(max_bonuslen, KM_SLEEP); + arc_space_consume(max_bonuslen, ARC_SPACE_BONUS); + if (bonuslen < max_bonuslen) + bzero(db->db.db_data, max_bonuslen); + if (bonuslen) + bcopy(DN_BONUS(dn->dn_phys), db->db.db_data, bonuslen); + DB_DNODE_EXIT(db); + db->db_state = DB_CACHED; + mutex_exit(&db->db_mtx); + return (0); + } + + /* + * Recheck BP_IS_HOLE() after dnode_block_freed() in case dnode_sync() + * processes the delete record and clears the bp while we are waiting + * for the dn_mtx (resulting in a "no" from block_freed). + */ + if (db->db_blkptr == NULL || BP_IS_HOLE(db->db_blkptr) || + (db->db_level == 0 && (dnode_block_freed(dn, db->db_blkid) || + BP_IS_HOLE(db->db_blkptr)))) { + arc_buf_contents_t type = DBUF_GET_BUFC_TYPE(db); + + dbuf_set_data(db, arc_alloc_buf(db->db_objset->os_spa, db, type, + db->db.db_size)); + bzero(db->db.db_data, db->db.db_size); + + if (db->db_blkptr != NULL && db->db_level > 0 && + BP_IS_HOLE(db->db_blkptr) && + db->db_blkptr->blk_birth != 0) { + blkptr_t *bps = db->db.db_data; + int i; + for (i = 0; i < ((1 << + DB_DNODE(db)->dn_indblkshift) / sizeof (blkptr_t)); + i++) { + blkptr_t *bp = &bps[i]; + ASSERT3U(BP_GET_LSIZE(db->db_blkptr), ==, + 1 << dn->dn_indblkshift); + BP_SET_LSIZE(bp, + BP_GET_LEVEL(db->db_blkptr) == 1 ? + dn->dn_datablksz : + BP_GET_LSIZE(db->db_blkptr)); + BP_SET_TYPE(bp, BP_GET_TYPE(db->db_blkptr)); + BP_SET_LEVEL(bp, + BP_GET_LEVEL(db->db_blkptr) - 1); + BP_SET_BIRTH(bp, db->db_blkptr->blk_birth, 0); + } + } + DB_DNODE_EXIT(db); + db->db_state = DB_CACHED; + mutex_exit(&db->db_mtx); + return (0); + } + + DB_DNODE_EXIT(db); + + db->db_state = DB_READ; + mutex_exit(&db->db_mtx); + + if (DBUF_IS_L2CACHEABLE(db)) + aflags |= ARC_FLAG_L2CACHE; + + SET_BOOKMARK(&zb, db->db_objset->os_dsl_dataset ? + db->db_objset->os_dsl_dataset->ds_object : DMU_META_OBJSET, + db->db.db_object, db->db_level, db->db_blkid); + + dbuf_add_ref(db, NULL); + + err = arc_read(zio, db->db_objset->os_spa, db->db_blkptr, + dbuf_read_done, db, ZIO_PRIORITY_SYNC_READ, + (flags & DB_RF_CANFAIL) ? ZIO_FLAG_CANFAIL : ZIO_FLAG_MUSTSUCCEED, + &aflags, &zb); + + return (err); +} + +/* + * This is our just-in-time copy function. It makes a copy of buffers that + * have been modified in a previous transaction group before we access them in + * the current active group. + * + * This function is used in three places: when we are dirtying a buffer for the + * first time in a txg, when we are freeing a range in a dnode that includes + * this buffer, and when we are accessing a buffer which was received compressed + * and later referenced in a WRITE_BYREF record. + * + * Note that when we are called from dbuf_free_range() we do not put a hold on + * the buffer, we just traverse the active dbuf list for the dnode. + */ +static void +dbuf_fix_old_data(dmu_buf_impl_t *db, uint64_t txg) +{ + dbuf_dirty_record_t *dr = db->db_last_dirty; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + ASSERT(db->db.db_data != NULL); + ASSERT(db->db_level == 0); + ASSERT(db->db.db_object != DMU_META_DNODE_OBJECT); + + if (dr == NULL || + (dr->dt.dl.dr_data != + ((db->db_blkid == DMU_BONUS_BLKID) ? db->db.db_data : db->db_buf))) + return; + + /* + * If the last dirty record for this dbuf has not yet synced + * and its referencing the dbuf data, either: + * reset the reference to point to a new copy, + * or (if there a no active holders) + * just null out the current db_data pointer. + */ + ASSERT(dr->dr_txg >= txg - 2); + if (db->db_blkid == DMU_BONUS_BLKID) { + dnode_t *dn = DB_DNODE(db); + int bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); + dr->dt.dl.dr_data = kmem_alloc(bonuslen, KM_SLEEP); + arc_space_consume(bonuslen, ARC_SPACE_BONUS); + bcopy(db->db.db_data, dr->dt.dl.dr_data, bonuslen); + } else if (refcount_count(&db->db_holds) > db->db_dirtycnt) { + int size = arc_buf_size(db->db_buf); + arc_buf_contents_t type = DBUF_GET_BUFC_TYPE(db); + spa_t *spa = db->db_objset->os_spa; + enum zio_compress compress_type = + arc_get_compression(db->db_buf); + + if (compress_type == ZIO_COMPRESS_OFF) { + dr->dt.dl.dr_data = arc_alloc_buf(spa, db, type, size); + } else { + ASSERT3U(type, ==, ARC_BUFC_DATA); + dr->dt.dl.dr_data = arc_alloc_compressed_buf(spa, db, + size, arc_buf_lsize(db->db_buf), compress_type); + } + bcopy(db->db.db_data, dr->dt.dl.dr_data->b_data, size); + } else { + db->db_buf = NULL; + dbuf_clear_data(db); + } +} + +int +dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags) +{ + int err = 0; + boolean_t prefetch; + dnode_t *dn; + + /* + * We don't have to hold the mutex to check db_state because it + * can't be freed while we have a hold on the buffer. + */ + ASSERT(!refcount_is_zero(&db->db_holds)); + + if (db->db_state == DB_NOFILL) + return (SET_ERROR(EIO)); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_enter(&dn->dn_struct_rwlock, RW_READER); + + prefetch = db->db_level == 0 && db->db_blkid != DMU_BONUS_BLKID && + (flags & DB_RF_NOPREFETCH) == 0 && dn != NULL && + DBUF_IS_CACHEABLE(db); + + mutex_enter(&db->db_mtx); + if (db->db_state == DB_CACHED) { + /* + * If the arc buf is compressed, we need to decompress it to + * read the data. This could happen during the "zfs receive" of + * a stream which is compressed and deduplicated. + */ + if (db->db_buf != NULL && + arc_get_compression(db->db_buf) != ZIO_COMPRESS_OFF) { + dbuf_fix_old_data(db, + spa_syncing_txg(dmu_objset_spa(db->db_objset))); + err = arc_decompress(db->db_buf); + dbuf_set_data(db, db->db_buf); + } + mutex_exit(&db->db_mtx); + if (prefetch) + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_exit(&dn->dn_struct_rwlock); + DB_DNODE_EXIT(db); + } else if (db->db_state == DB_UNCACHED) { + spa_t *spa = dn->dn_objset->os_spa; + boolean_t need_wait = B_FALSE; + + if (zio == NULL && + db->db_blkptr != NULL && !BP_IS_HOLE(db->db_blkptr)) { + zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL); + need_wait = B_TRUE; + } + err = dbuf_read_impl(db, zio, flags); + + /* dbuf_read_impl has dropped db_mtx for us */ + + if (!err && prefetch) + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); + + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_exit(&dn->dn_struct_rwlock); + DB_DNODE_EXIT(db); + + if (!err && need_wait) + err = zio_wait(zio); + } else { + /* + * Another reader came in while the dbuf was in flight + * between UNCACHED and CACHED. Either a writer will finish + * writing the buffer (sending the dbuf to CACHED) or the + * first reader's request will reach the read_done callback + * and send the dbuf to CACHED. Otherwise, a failure + * occurred and the dbuf went to UNCACHED. + */ + mutex_exit(&db->db_mtx); + if (prefetch) + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_exit(&dn->dn_struct_rwlock); + DB_DNODE_EXIT(db); + + /* Skip the wait per the caller's request. */ + mutex_enter(&db->db_mtx); + if ((flags & DB_RF_NEVERWAIT) == 0) { + while (db->db_state == DB_READ || + db->db_state == DB_FILL) { + ASSERT(db->db_state == DB_READ || + (flags & DB_RF_HAVESTRUCT) == 0); + DTRACE_PROBE2(blocked__read, dmu_buf_impl_t *, + db, zio_t *, zio); + cv_wait(&db->db_changed, &db->db_mtx); + } + if (db->db_state == DB_UNCACHED) + err = SET_ERROR(EIO); + } + mutex_exit(&db->db_mtx); + } + + return (err); +} + +static void +dbuf_noread(dmu_buf_impl_t *db) +{ + ASSERT(!refcount_is_zero(&db->db_holds)); + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + mutex_enter(&db->db_mtx); + while (db->db_state == DB_READ || db->db_state == DB_FILL) + cv_wait(&db->db_changed, &db->db_mtx); + if (db->db_state == DB_UNCACHED) { + arc_buf_contents_t type = DBUF_GET_BUFC_TYPE(db); + spa_t *spa = db->db_objset->os_spa; + + ASSERT(db->db_buf == NULL); + ASSERT(db->db.db_data == NULL); + dbuf_set_data(db, arc_alloc_buf(spa, db, type, db->db.db_size)); + db->db_state = DB_FILL; + } else if (db->db_state == DB_NOFILL) { + dbuf_clear_data(db); + } else { + ASSERT3U(db->db_state, ==, DB_CACHED); + } + mutex_exit(&db->db_mtx); +} + +void +dbuf_unoverride(dbuf_dirty_record_t *dr) +{ + dmu_buf_impl_t *db = dr->dr_dbuf; + blkptr_t *bp = &dr->dt.dl.dr_overridden_by; + uint64_t txg = dr->dr_txg; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + /* + * This assert is valid because dmu_sync() expects to be called by + * a zilog's get_data while holding a range lock. This call only + * comes from dbuf_dirty() callers who must also hold a range lock. + */ + ASSERT(dr->dt.dl.dr_override_state != DR_IN_DMU_SYNC); + ASSERT(db->db_level == 0); + + if (db->db_blkid == DMU_BONUS_BLKID || + dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN) + return; + + ASSERT(db->db_data_pending != dr); + + /* free this block */ + if (!BP_IS_HOLE(bp) && !dr->dt.dl.dr_nopwrite) + zio_free(db->db_objset->os_spa, txg, bp); + + dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; + dr->dt.dl.dr_nopwrite = B_FALSE; + + /* + * Release the already-written buffer, so we leave it in + * a consistent dirty state. Note that all callers are + * modifying the buffer, so they will immediately do + * another (redundant) arc_release(). Therefore, leave + * the buf thawed to save the effort of freezing & + * immediately re-thawing it. + */ + arc_release(dr->dt.dl.dr_data, db); +} + +/* + * Evict (if its unreferenced) or clear (if its referenced) any level-0 + * data blocks in the free range, so that any future readers will find + * empty blocks. + */ +void +dbuf_free_range(dnode_t *dn, uint64_t start_blkid, uint64_t end_blkid, + dmu_tx_t *tx) +{ + dmu_buf_impl_t *db_search; + dmu_buf_impl_t *db, *db_next; + uint64_t txg = tx->tx_txg; + avl_index_t where; + + if (end_blkid > dn->dn_maxblkid && + !(start_blkid == DMU_SPILL_BLKID || end_blkid == DMU_SPILL_BLKID)) + end_blkid = dn->dn_maxblkid; + dprintf_dnode(dn, "start=%llu end=%llu\n", start_blkid, end_blkid); + + db_search = kmem_alloc(sizeof (dmu_buf_impl_t), KM_SLEEP); + db_search->db_level = 0; + db_search->db_blkid = start_blkid; + db_search->db_state = DB_SEARCH; + + mutex_enter(&dn->dn_dbufs_mtx); + db = avl_find(&dn->dn_dbufs, db_search, &where); + ASSERT3P(db, ==, NULL); + + db = avl_nearest(&dn->dn_dbufs, where, AVL_AFTER); + + for (; db != NULL; db = db_next) { + db_next = AVL_NEXT(&dn->dn_dbufs, db); + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + + if (db->db_level != 0 || db->db_blkid > end_blkid) { + break; + } + ASSERT3U(db->db_blkid, >=, start_blkid); + + /* found a level 0 buffer in the range */ + mutex_enter(&db->db_mtx); + if (dbuf_undirty(db, tx)) { + /* mutex has been dropped and dbuf destroyed */ + continue; + } + + if (db->db_state == DB_UNCACHED || + db->db_state == DB_NOFILL || + db->db_state == DB_EVICTING) { + ASSERT(db->db.db_data == NULL); + mutex_exit(&db->db_mtx); + continue; + } + if (db->db_state == DB_READ || db->db_state == DB_FILL) { + /* will be handled in dbuf_read_done or dbuf_rele */ + db->db_freed_in_flight = TRUE; + mutex_exit(&db->db_mtx); + continue; + } + if (refcount_count(&db->db_holds) == 0) { + ASSERT(db->db_buf); + dbuf_destroy(db); + continue; + } + /* The dbuf is referenced */ + + if (db->db_last_dirty != NULL) { + dbuf_dirty_record_t *dr = db->db_last_dirty; + + if (dr->dr_txg == txg) { + /* + * This buffer is "in-use", re-adjust the file + * size to reflect that this buffer may + * contain new data when we sync. + */ + if (db->db_blkid != DMU_SPILL_BLKID && + db->db_blkid > dn->dn_maxblkid) + dn->dn_maxblkid = db->db_blkid; + dbuf_unoverride(dr); + } else { + /* + * This dbuf is not dirty in the open context. + * Either uncache it (if its not referenced in + * the open context) or reset its contents to + * empty. + */ + dbuf_fix_old_data(db, txg); + } + } + /* clear the contents if its cached */ + if (db->db_state == DB_CACHED) { + ASSERT(db->db.db_data != NULL); + arc_release(db->db_buf, db); + bzero(db->db.db_data, db->db.db_size); + arc_buf_freeze(db->db_buf); + } + + mutex_exit(&db->db_mtx); + } + + kmem_free(db_search, sizeof (dmu_buf_impl_t)); + mutex_exit(&dn->dn_dbufs_mtx); +} + +void +dbuf_new_size(dmu_buf_impl_t *db, int size, dmu_tx_t *tx) +{ + arc_buf_t *buf, *obuf; + int osize = db->db.db_size; + arc_buf_contents_t type = DBUF_GET_BUFC_TYPE(db); + dnode_t *dn; + + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + /* XXX does *this* func really need the lock? */ + ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); + + /* + * This call to dmu_buf_will_dirty() with the dn_struct_rwlock held + * is OK, because there can be no other references to the db + * when we are changing its size, so no concurrent DB_FILL can + * be happening. + */ + /* + * XXX we should be doing a dbuf_read, checking the return + * value and returning that up to our callers + */ + dmu_buf_will_dirty(&db->db, tx); + + /* create the data buffer for the new block */ + buf = arc_alloc_buf(dn->dn_objset->os_spa, db, type, size); + + /* copy old block data to the new block */ + obuf = db->db_buf; + bcopy(obuf->b_data, buf->b_data, MIN(osize, size)); + /* zero the remainder */ + if (size > osize) + bzero((uint8_t *)buf->b_data + osize, size - osize); + + mutex_enter(&db->db_mtx); + dbuf_set_data(db, buf); + arc_buf_destroy(obuf, db); + db->db.db_size = size; + + if (db->db_level == 0) { + ASSERT3U(db->db_last_dirty->dr_txg, ==, tx->tx_txg); + db->db_last_dirty->dt.dl.dr_data = buf; + } + mutex_exit(&db->db_mtx); + + dmu_objset_willuse_space(dn->dn_objset, size - osize, tx); + DB_DNODE_EXIT(db); +} + +void +dbuf_release_bp(dmu_buf_impl_t *db) +{ + ASSERTV(objset_t *os = db->db_objset); + + ASSERT(dsl_pool_sync_context(dmu_objset_pool(os))); + ASSERT(arc_released(os->os_phys_buf) || + list_link_active(&os->os_dsl_dataset->ds_synced_link)); + ASSERT(db->db_parent == NULL || arc_released(db->db_parent->db_buf)); + + (void) arc_release(db->db_buf, db); +} + +/* + * We already have a dirty record for this TXG, and we are being + * dirtied again. + */ +static void +dbuf_redirty(dbuf_dirty_record_t *dr) +{ + dmu_buf_impl_t *db = dr->dr_dbuf; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + + if (db->db_level == 0 && db->db_blkid != DMU_BONUS_BLKID) { + /* + * If this buffer has already been written out, + * we now need to reset its state. + */ + dbuf_unoverride(dr); + if (db->db.db_object != DMU_META_DNODE_OBJECT && + db->db_state != DB_NOFILL) { + /* Already released on initial dirty, so just thaw. */ + ASSERT(arc_released(db->db_buf)); + arc_buf_thaw(db->db_buf); + } + } +} + +dbuf_dirty_record_t * +dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx) +{ + dnode_t *dn; + objset_t *os; + dbuf_dirty_record_t **drp, *dr; + int drop_struct_lock = FALSE; + int txgoff = tx->tx_txg & TXG_MASK; + + ASSERT(tx->tx_txg != 0); + ASSERT(!refcount_is_zero(&db->db_holds)); + DMU_TX_DIRTY_BUF(tx, db); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + /* + * Shouldn't dirty a regular buffer in syncing context. Private + * objects may be dirtied in syncing context, but only if they + * were already pre-dirtied in open context. + */ +#ifdef DEBUG + if (dn->dn_objset->os_dsl_dataset != NULL) { + rrw_enter(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, + RW_READER, FTAG); + } + ASSERT(!dmu_tx_is_syncing(tx) || + BP_IS_HOLE(dn->dn_objset->os_rootbp) || + DMU_OBJECT_IS_SPECIAL(dn->dn_object) || + dn->dn_objset->os_dsl_dataset == NULL); + if (dn->dn_objset->os_dsl_dataset != NULL) + rrw_exit(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, FTAG); +#endif + /* + * We make this assert for private objects as well, but after we + * check if we're already dirty. They are allowed to re-dirty + * in syncing context. + */ + ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT || + dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx == + (dmu_tx_is_syncing(tx) ? DN_DIRTY_SYNC : DN_DIRTY_OPEN)); + + mutex_enter(&db->db_mtx); + /* + * XXX make this true for indirects too? The problem is that + * transactions created with dmu_tx_create_assigned() from + * syncing context don't bother holding ahead. + */ + ASSERT(db->db_level != 0 || + db->db_state == DB_CACHED || db->db_state == DB_FILL || + db->db_state == DB_NOFILL); + + mutex_enter(&dn->dn_mtx); + /* + * Don't set dirtyctx to SYNC if we're just modifying this as we + * initialize the objset. + */ + if (dn->dn_dirtyctx == DN_UNDIRTIED) { + if (dn->dn_objset->os_dsl_dataset != NULL) { + rrw_enter(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, + RW_READER, FTAG); + } + if (!BP_IS_HOLE(dn->dn_objset->os_rootbp)) { + dn->dn_dirtyctx = (dmu_tx_is_syncing(tx) ? + DN_DIRTY_SYNC : DN_DIRTY_OPEN); + ASSERT(dn->dn_dirtyctx_firstset == NULL); + dn->dn_dirtyctx_firstset = kmem_alloc(1, KM_SLEEP); + } + if (dn->dn_objset->os_dsl_dataset != NULL) { + rrw_exit(&dn->dn_objset->os_dsl_dataset->ds_bp_rwlock, + FTAG); + } + } + mutex_exit(&dn->dn_mtx); + + if (db->db_blkid == DMU_SPILL_BLKID) + dn->dn_have_spill = B_TRUE; + + /* + * If this buffer is already dirty, we're done. + */ + drp = &db->db_last_dirty; + ASSERT(*drp == NULL || (*drp)->dr_txg <= tx->tx_txg || + db->db.db_object == DMU_META_DNODE_OBJECT); + while ((dr = *drp) != NULL && dr->dr_txg > tx->tx_txg) + drp = &dr->dr_next; + if (dr && dr->dr_txg == tx->tx_txg) { + DB_DNODE_EXIT(db); + + dbuf_redirty(dr); + mutex_exit(&db->db_mtx); + return (dr); + } + + /* + * Only valid if not already dirty. + */ + ASSERT(dn->dn_object == 0 || + dn->dn_dirtyctx == DN_UNDIRTIED || dn->dn_dirtyctx == + (dmu_tx_is_syncing(tx) ? DN_DIRTY_SYNC : DN_DIRTY_OPEN)); + + ASSERT3U(dn->dn_nlevels, >, db->db_level); + + /* + * We should only be dirtying in syncing context if it's the + * mos or we're initializing the os or it's a special object. + * However, we are allowed to dirty in syncing context provided + * we already dirtied it in open context. Hence we must make + * this assertion only if we're not already dirty. + */ + os = dn->dn_objset; + VERIFY3U(tx->tx_txg, <=, spa_final_dirty_txg(os->os_spa)); +#ifdef DEBUG + if (dn->dn_objset->os_dsl_dataset != NULL) + rrw_enter(&os->os_dsl_dataset->ds_bp_rwlock, RW_READER, FTAG); + ASSERT(!dmu_tx_is_syncing(tx) || DMU_OBJECT_IS_SPECIAL(dn->dn_object) || + os->os_dsl_dataset == NULL || BP_IS_HOLE(os->os_rootbp)); + if (dn->dn_objset->os_dsl_dataset != NULL) + rrw_exit(&os->os_dsl_dataset->ds_bp_rwlock, FTAG); +#endif + ASSERT(db->db.db_size != 0); + + dprintf_dbuf(db, "size=%llx\n", (u_longlong_t)db->db.db_size); + + if (db->db_blkid != DMU_BONUS_BLKID) { + dmu_objset_willuse_space(os, db->db.db_size, tx); + } + + /* + * If this buffer is dirty in an old transaction group we need + * to make a copy of it so that the changes we make in this + * transaction group won't leak out when we sync the older txg. + */ + dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP); + list_link_init(&dr->dr_dirty_node); + if (db->db_level == 0) { + void *data_old = db->db_buf; + + if (db->db_state != DB_NOFILL) { + if (db->db_blkid == DMU_BONUS_BLKID) { + dbuf_fix_old_data(db, tx->tx_txg); + data_old = db->db.db_data; + } else if (db->db.db_object != DMU_META_DNODE_OBJECT) { + /* + * Release the data buffer from the cache so + * that we can modify it without impacting + * possible other users of this cached data + * block. Note that indirect blocks and + * private objects are not released until the + * syncing state (since they are only modified + * then). + */ + arc_release(db->db_buf, db); + dbuf_fix_old_data(db, tx->tx_txg); + data_old = db->db_buf; + } + ASSERT(data_old != NULL); + } + dr->dt.dl.dr_data = data_old; + } else { + mutex_init(&dr->dt.di.dr_mtx, NULL, MUTEX_NOLOCKDEP, NULL); + list_create(&dr->dt.di.dr_children, + sizeof (dbuf_dirty_record_t), + offsetof(dbuf_dirty_record_t, dr_dirty_node)); + } + if (db->db_blkid != DMU_BONUS_BLKID && os->os_dsl_dataset != NULL) + dr->dr_accounted = db->db.db_size; + dr->dr_dbuf = db; + dr->dr_txg = tx->tx_txg; + dr->dr_next = *drp; + *drp = dr; + + /* + * We could have been freed_in_flight between the dbuf_noread + * and dbuf_dirty. We win, as though the dbuf_noread() had + * happened after the free. + */ + if (db->db_level == 0 && db->db_blkid != DMU_BONUS_BLKID && + db->db_blkid != DMU_SPILL_BLKID) { + mutex_enter(&dn->dn_mtx); + if (dn->dn_free_ranges[txgoff] != NULL) { + range_tree_clear(dn->dn_free_ranges[txgoff], + db->db_blkid, 1); + } + mutex_exit(&dn->dn_mtx); + db->db_freed_in_flight = FALSE; + } + + /* + * This buffer is now part of this txg + */ + dbuf_add_ref(db, (void *)(uintptr_t)tx->tx_txg); + db->db_dirtycnt += 1; + ASSERT3U(db->db_dirtycnt, <=, 3); + + mutex_exit(&db->db_mtx); + + if (db->db_blkid == DMU_BONUS_BLKID || + db->db_blkid == DMU_SPILL_BLKID) { + mutex_enter(&dn->dn_mtx); + ASSERT(!list_link_active(&dr->dr_dirty_node)); + list_insert_tail(&dn->dn_dirty_records[txgoff], dr); + mutex_exit(&dn->dn_mtx); + dnode_setdirty(dn, tx); + DB_DNODE_EXIT(db); + return (dr); + } + + /* + * The dn_struct_rwlock prevents db_blkptr from changing + * due to a write from syncing context completing + * while we are running, so we want to acquire it before + * looking at db_blkptr. + */ + if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { + rw_enter(&dn->dn_struct_rwlock, RW_READER); + drop_struct_lock = TRUE; + } + + /* + * We need to hold the dn_struct_rwlock to make this assertion, + * because it protects dn_phys / dn_next_nlevels from changing. + */ + ASSERT((dn->dn_phys->dn_nlevels == 0 && db->db_level == 0) || + dn->dn_phys->dn_nlevels > db->db_level || + dn->dn_next_nlevels[txgoff] > db->db_level || + dn->dn_next_nlevels[(tx->tx_txg-1) & TXG_MASK] > db->db_level || + dn->dn_next_nlevels[(tx->tx_txg-2) & TXG_MASK] > db->db_level); + + /* + * If we are overwriting a dedup BP, then unless it is snapshotted, + * when we get to syncing context we will need to decrement its + * refcount in the DDT. Prefetch the relevant DDT block so that + * syncing context won't have to wait for the i/o. + */ + ddt_prefetch(os->os_spa, db->db_blkptr); + + if (db->db_level == 0) { + dnode_new_blkid(dn, db->db_blkid, tx, drop_struct_lock); + ASSERT(dn->dn_maxblkid >= db->db_blkid); + } + + if (db->db_level+1 < dn->dn_nlevels) { + dmu_buf_impl_t *parent = db->db_parent; + dbuf_dirty_record_t *di; + int parent_held = FALSE; + + if (db->db_parent == NULL || db->db_parent == dn->dn_dbuf) { + int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + + parent = dbuf_hold_level(dn, db->db_level+1, + db->db_blkid >> epbs, FTAG); + ASSERT(parent != NULL); + parent_held = TRUE; + } + if (drop_struct_lock) + rw_exit(&dn->dn_struct_rwlock); + ASSERT3U(db->db_level+1, ==, parent->db_level); + di = dbuf_dirty(parent, tx); + if (parent_held) + dbuf_rele(parent, FTAG); + + mutex_enter(&db->db_mtx); + /* + * Since we've dropped the mutex, it's possible that + * dbuf_undirty() might have changed this out from under us. + */ + if (db->db_last_dirty == dr || + dn->dn_object == DMU_META_DNODE_OBJECT) { + mutex_enter(&di->dt.di.dr_mtx); + ASSERT3U(di->dr_txg, ==, tx->tx_txg); + ASSERT(!list_link_active(&dr->dr_dirty_node)); + list_insert_tail(&di->dt.di.dr_children, dr); + mutex_exit(&di->dt.di.dr_mtx); + dr->dr_parent = di; + } + mutex_exit(&db->db_mtx); + } else { + ASSERT(db->db_level+1 == dn->dn_nlevels); + ASSERT(db->db_blkid < dn->dn_nblkptr); + ASSERT(db->db_parent == NULL || db->db_parent == dn->dn_dbuf); + mutex_enter(&dn->dn_mtx); + ASSERT(!list_link_active(&dr->dr_dirty_node)); + list_insert_tail(&dn->dn_dirty_records[txgoff], dr); + mutex_exit(&dn->dn_mtx); + if (drop_struct_lock) + rw_exit(&dn->dn_struct_rwlock); + } + + dnode_setdirty(dn, tx); + DB_DNODE_EXIT(db); + return (dr); +} + +/* + * Undirty a buffer in the transaction group referenced by the given + * transaction. Return whether this evicted the dbuf. + */ +static boolean_t +dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx) +{ + dnode_t *dn; + uint64_t txg = tx->tx_txg; + dbuf_dirty_record_t *dr, **drp; + + ASSERT(txg != 0); + + /* + * Due to our use of dn_nlevels below, this can only be called + * in open context, unless we are operating on the MOS. + * From syncing context, dn_nlevels may be different from the + * dn_nlevels used when dbuf was dirtied. + */ + ASSERT(db->db_objset == + dmu_objset_pool(db->db_objset)->dp_meta_objset || + txg != spa_syncing_txg(dmu_objset_spa(db->db_objset))); + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + ASSERT0(db->db_level); + ASSERT(MUTEX_HELD(&db->db_mtx)); + + /* + * If this buffer is not dirty, we're done. + */ + for (drp = &db->db_last_dirty; (dr = *drp) != NULL; drp = &dr->dr_next) + if (dr->dr_txg <= txg) + break; + if (dr == NULL || dr->dr_txg < txg) + return (B_FALSE); + ASSERT(dr->dr_txg == txg); + ASSERT(dr->dr_dbuf == db); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + dprintf_dbuf(db, "size=%llx\n", (u_longlong_t)db->db.db_size); + + ASSERT(db->db.db_size != 0); + + dsl_pool_undirty_space(dmu_objset_pool(dn->dn_objset), + dr->dr_accounted, txg); + + *drp = dr->dr_next; + + /* + * Note that there are three places in dbuf_dirty() + * where this dirty record may be put on a list. + * Make sure to do a list_remove corresponding to + * every one of those list_insert calls. + */ + if (dr->dr_parent) { + mutex_enter(&dr->dr_parent->dt.di.dr_mtx); + list_remove(&dr->dr_parent->dt.di.dr_children, dr); + mutex_exit(&dr->dr_parent->dt.di.dr_mtx); + } else if (db->db_blkid == DMU_SPILL_BLKID || + db->db_level + 1 == dn->dn_nlevels) { + ASSERT(db->db_blkptr == NULL || db->db_parent == dn->dn_dbuf); + mutex_enter(&dn->dn_mtx); + list_remove(&dn->dn_dirty_records[txg & TXG_MASK], dr); + mutex_exit(&dn->dn_mtx); + } + DB_DNODE_EXIT(db); + + if (db->db_state != DB_NOFILL) { + dbuf_unoverride(dr); + + ASSERT(db->db_buf != NULL); + ASSERT(dr->dt.dl.dr_data != NULL); + if (dr->dt.dl.dr_data != db->db_buf) + arc_buf_destroy(dr->dt.dl.dr_data, db); + } + + kmem_free(dr, sizeof (dbuf_dirty_record_t)); + + ASSERT(db->db_dirtycnt > 0); + db->db_dirtycnt -= 1; + + if (refcount_remove(&db->db_holds, (void *)(uintptr_t)txg) == 0) { + ASSERT(db->db_state == DB_NOFILL || arc_released(db->db_buf)); + dbuf_destroy(db); + return (B_TRUE); + } + + return (B_FALSE); +} + +void +dmu_buf_will_dirty(dmu_buf_t *db_fake, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + int rf = DB_RF_MUST_SUCCEED | DB_RF_NOPREFETCH; + dbuf_dirty_record_t *dr; + + ASSERT(tx->tx_txg != 0); + ASSERT(!refcount_is_zero(&db->db_holds)); + + /* + * Quick check for dirtyness. For already dirty blocks, this + * reduces runtime of this function by >90%, and overall performance + * by 50% for some workloads (e.g. file deletion with indirect blocks + * cached). + */ + mutex_enter(&db->db_mtx); + + for (dr = db->db_last_dirty; + dr != NULL && dr->dr_txg >= tx->tx_txg; dr = dr->dr_next) { + /* + * It's possible that it is already dirty but not cached, + * because there are some calls to dbuf_dirty() that don't + * go through dmu_buf_will_dirty(). + */ + if (dr->dr_txg == tx->tx_txg && db->db_state == DB_CACHED) { + /* This dbuf is already dirty and cached. */ + dbuf_redirty(dr); + mutex_exit(&db->db_mtx); + return; + } + } + mutex_exit(&db->db_mtx); + + DB_DNODE_ENTER(db); + if (RW_WRITE_HELD(&DB_DNODE(db)->dn_struct_rwlock)) + rf |= DB_RF_HAVESTRUCT; + DB_DNODE_EXIT(db); + (void) dbuf_read(db, NULL, rf); + (void) dbuf_dirty(db, tx); +} + +void +dmu_buf_will_not_fill(dmu_buf_t *db_fake, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + db->db_state = DB_NOFILL; + + dmu_buf_will_fill(db_fake, tx); +} + +void +dmu_buf_will_fill(dmu_buf_t *db_fake, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + ASSERT(tx->tx_txg != 0); + ASSERT(db->db_level == 0); + ASSERT(!refcount_is_zero(&db->db_holds)); + + ASSERT(db->db.db_object != DMU_META_DNODE_OBJECT || + dmu_tx_private_ok(tx)); + + dbuf_noread(db); + (void) dbuf_dirty(db, tx); +} + +#pragma weak dmu_buf_fill_done = dbuf_fill_done +/* ARGSUSED */ +void +dbuf_fill_done(dmu_buf_impl_t *db, dmu_tx_t *tx) +{ + mutex_enter(&db->db_mtx); + DBUF_VERIFY(db); + + if (db->db_state == DB_FILL) { + if (db->db_level == 0 && db->db_freed_in_flight) { + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + /* we were freed while filling */ + /* XXX dbuf_undirty? */ + bzero(db->db.db_data, db->db.db_size); + db->db_freed_in_flight = FALSE; + } + db->db_state = DB_CACHED; + cv_broadcast(&db->db_changed); + } + mutex_exit(&db->db_mtx); +} + +void +dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data, + bp_embedded_type_t etype, enum zio_compress comp, + int uncompressed_size, int compressed_size, int byteorder, + dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)dbuf; + struct dirty_leaf *dl; + dmu_object_type_t type; + + if (etype == BP_EMBEDDED_TYPE_DATA) { + ASSERT(spa_feature_is_active(dmu_objset_spa(db->db_objset), + SPA_FEATURE_EMBEDDED_DATA)); + } + + DB_DNODE_ENTER(db); + type = DB_DNODE(db)->dn_type; + DB_DNODE_EXIT(db); + + ASSERT0(db->db_level); + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + + dmu_buf_will_not_fill(dbuf, tx); + + ASSERT3U(db->db_last_dirty->dr_txg, ==, tx->tx_txg); + dl = &db->db_last_dirty->dt.dl; + encode_embedded_bp_compressed(&dl->dr_overridden_by, + data, comp, uncompressed_size, compressed_size); + BPE_SET_ETYPE(&dl->dr_overridden_by, etype); + BP_SET_TYPE(&dl->dr_overridden_by, type); + BP_SET_LEVEL(&dl->dr_overridden_by, 0); + BP_SET_BYTEORDER(&dl->dr_overridden_by, byteorder); + + dl->dr_override_state = DR_OVERRIDDEN; + dl->dr_overridden_by.blk_birth = db->db_last_dirty->dr_txg; +} + +/* + * Directly assign a provided arc buf to a given dbuf if it's not referenced + * by anybody except our caller. Otherwise copy arcbuf's contents to dbuf. + */ +void +dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx) +{ + ASSERT(!refcount_is_zero(&db->db_holds)); + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + ASSERT(db->db_level == 0); + ASSERT3U(dbuf_is_metadata(db), ==, arc_is_metadata(buf)); + ASSERT(buf != NULL); + ASSERT(arc_buf_lsize(buf) == db->db.db_size); + ASSERT(tx->tx_txg != 0); + + arc_return_buf(buf, db); + ASSERT(arc_released(buf)); + + mutex_enter(&db->db_mtx); + + while (db->db_state == DB_READ || db->db_state == DB_FILL) + cv_wait(&db->db_changed, &db->db_mtx); + + ASSERT(db->db_state == DB_CACHED || db->db_state == DB_UNCACHED); + + if (db->db_state == DB_CACHED && + refcount_count(&db->db_holds) - 1 > db->db_dirtycnt) { + mutex_exit(&db->db_mtx); + (void) dbuf_dirty(db, tx); + bcopy(buf->b_data, db->db.db_data, db->db.db_size); + arc_buf_destroy(buf, db); + xuio_stat_wbuf_copied(); + return; + } + + xuio_stat_wbuf_nocopy(); + if (db->db_state == DB_CACHED) { + dbuf_dirty_record_t *dr = db->db_last_dirty; + + ASSERT(db->db_buf != NULL); + if (dr != NULL && dr->dr_txg == tx->tx_txg) { + ASSERT(dr->dt.dl.dr_data == db->db_buf); + if (!arc_released(db->db_buf)) { + ASSERT(dr->dt.dl.dr_override_state == + DR_OVERRIDDEN); + arc_release(db->db_buf, db); + } + dr->dt.dl.dr_data = buf; + arc_buf_destroy(db->db_buf, db); + } else if (dr == NULL || dr->dt.dl.dr_data != db->db_buf) { + arc_release(db->db_buf, db); + arc_buf_destroy(db->db_buf, db); + } + db->db_buf = NULL; + } + ASSERT(db->db_buf == NULL); + dbuf_set_data(db, buf); + db->db_state = DB_FILL; + mutex_exit(&db->db_mtx); + (void) dbuf_dirty(db, tx); + dmu_buf_fill_done(&db->db, tx); +} + +void +dbuf_destroy(dmu_buf_impl_t *db) +{ + dnode_t *dn; + dmu_buf_impl_t *parent = db->db_parent; + dmu_buf_impl_t *dndb; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + ASSERT(refcount_is_zero(&db->db_holds)); + + if (db->db_buf != NULL) { + arc_buf_destroy(db->db_buf, db); + db->db_buf = NULL; + } + + if (db->db_blkid == DMU_BONUS_BLKID) { + int slots = DB_DNODE(db)->dn_num_slots; + int bonuslen = DN_SLOTS_TO_BONUSLEN(slots); + ASSERT(db->db.db_data != NULL); + kmem_free(db->db.db_data, bonuslen); + arc_space_return(bonuslen, ARC_SPACE_BONUS); + db->db_state = DB_UNCACHED; + } + + dbuf_clear_data(db); + + if (multilist_link_active(&db->db_cache_link)) { + multilist_remove(dbuf_cache, db); + (void) refcount_remove_many(&dbuf_cache_size, + db->db.db_size, db); + } + + ASSERT(db->db_state == DB_UNCACHED || db->db_state == DB_NOFILL); + ASSERT(db->db_data_pending == NULL); + + db->db_state = DB_EVICTING; + db->db_blkptr = NULL; + + /* + * Now that db_state is DB_EVICTING, nobody else can find this via + * the hash table. We can now drop db_mtx, which allows us to + * acquire the dn_dbufs_mtx. + */ + mutex_exit(&db->db_mtx); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + dndb = dn->dn_dbuf; + if (db->db_blkid != DMU_BONUS_BLKID) { + boolean_t needlock = !MUTEX_HELD(&dn->dn_dbufs_mtx); + if (needlock) + mutex_enter(&dn->dn_dbufs_mtx); + avl_remove(&dn->dn_dbufs, db); + atomic_dec_32(&dn->dn_dbufs_count); + membar_producer(); + DB_DNODE_EXIT(db); + if (needlock) + mutex_exit(&dn->dn_dbufs_mtx); + /* + * Decrementing the dbuf count means that the hold corresponding + * to the removed dbuf is no longer discounted in dnode_move(), + * so the dnode cannot be moved until after we release the hold. + * The membar_producer() ensures visibility of the decremented + * value in dnode_move(), since DB_DNODE_EXIT doesn't actually + * release any lock. + */ + dnode_rele(dn, db); + db->db_dnode_handle = NULL; + + dbuf_hash_remove(db); + } else { + DB_DNODE_EXIT(db); + } + + ASSERT(refcount_is_zero(&db->db_holds)); + + db->db_parent = NULL; + + ASSERT(db->db_buf == NULL); + ASSERT(db->db.db_data == NULL); + ASSERT(db->db_hash_next == NULL); + ASSERT(db->db_blkptr == NULL); + ASSERT(db->db_data_pending == NULL); + ASSERT(!multilist_link_active(&db->db_cache_link)); + + kmem_cache_free(dbuf_kmem_cache, db); + arc_space_return(sizeof (dmu_buf_impl_t), ARC_SPACE_DBUF); + + /* + * If this dbuf is referenced from an indirect dbuf, + * decrement the ref count on the indirect dbuf. + */ + if (parent && parent != dndb) + dbuf_rele(parent, db); +} + +/* + * Note: While bpp will always be updated if the function returns success, + * parentp will not be updated if the dnode does not have dn_dbuf filled in; + * this happens when the dnode is the meta-dnode, or a userused or groupused + * object. + */ +__attribute__((always_inline)) +static inline int +dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse, + dmu_buf_impl_t **parentp, blkptr_t **bpp, struct dbuf_hold_impl_data *dh) +{ + int nlevels, epbs; + + *parentp = NULL; + *bpp = NULL; + + ASSERT(blkid != DMU_BONUS_BLKID); + + if (blkid == DMU_SPILL_BLKID) { + mutex_enter(&dn->dn_mtx); + if (dn->dn_have_spill && + (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR)) + *bpp = DN_SPILL_BLKPTR(dn->dn_phys); + else + *bpp = NULL; + dbuf_add_ref(dn->dn_dbuf, NULL); + *parentp = dn->dn_dbuf; + mutex_exit(&dn->dn_mtx); + return (0); + } + + nlevels = + (dn->dn_phys->dn_nlevels == 0) ? 1 : dn->dn_phys->dn_nlevels; + epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + + ASSERT3U(level * epbs, <, 64); + ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); + /* + * This assertion shouldn't trip as long as the max indirect block size + * is less than 1M. The reason for this is that up to that point, + * the number of levels required to address an entire object with blocks + * of size SPA_MINBLOCKSIZE satisfies nlevels * epbs + 1 <= 64. In + * other words, if N * epbs + 1 > 64, then if (N-1) * epbs + 1 > 55 + * (i.e. we can address the entire object), objects will all use at most + * N-1 levels and the assertion won't overflow. However, once epbs is + * 13, 4 * 13 + 1 = 53, but 5 * 13 + 1 = 66. Then, 4 levels will not be + * enough to address an entire object, so objects will have 5 levels, + * but then this assertion will overflow. + * + * All this is to say that if we ever increase DN_MAX_INDBLKSHIFT, we + * need to redo this logic to handle overflows. + */ + ASSERT(level >= nlevels || + ((nlevels - level - 1) * epbs) + + highbit64(dn->dn_phys->dn_nblkptr) <= 64); + if (level >= nlevels || + blkid >= ((uint64_t)dn->dn_phys->dn_nblkptr << + ((nlevels - level - 1) * epbs)) || + (fail_sparse && + blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs)))) { + /* the buffer has no parent yet */ + return (SET_ERROR(ENOENT)); + } else if (level < nlevels-1) { + /* this block is referenced from an indirect block */ + int err; + if (dh == NULL) { + err = dbuf_hold_impl(dn, level+1, + blkid >> epbs, fail_sparse, FALSE, NULL, parentp); + } else { + __dbuf_hold_impl_init(dh + 1, dn, dh->dh_level + 1, + blkid >> epbs, fail_sparse, FALSE, NULL, + parentp, dh->dh_depth + 1); + err = __dbuf_hold_impl(dh + 1); + } + if (err) + return (err); + err = dbuf_read(*parentp, NULL, + (DB_RF_HAVESTRUCT | DB_RF_NOPREFETCH | DB_RF_CANFAIL)); + if (err) { + dbuf_rele(*parentp, NULL); + *parentp = NULL; + return (err); + } + *bpp = ((blkptr_t *)(*parentp)->db.db_data) + + (blkid & ((1ULL << epbs) - 1)); + if (blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs))) + ASSERT(BP_IS_HOLE(*bpp)); + return (0); + } else { + /* the block is referenced from the dnode */ + ASSERT3U(level, ==, nlevels-1); + ASSERT(dn->dn_phys->dn_nblkptr == 0 || + blkid < dn->dn_phys->dn_nblkptr); + if (dn->dn_dbuf) { + dbuf_add_ref(dn->dn_dbuf, NULL); + *parentp = dn->dn_dbuf; + } + *bpp = &dn->dn_phys->dn_blkptr[blkid]; + return (0); + } +} + +static dmu_buf_impl_t * +dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid, + dmu_buf_impl_t *parent, blkptr_t *blkptr) +{ + objset_t *os = dn->dn_objset; + dmu_buf_impl_t *db, *odb; + + ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); + ASSERT(dn->dn_type != DMU_OT_NONE); + + db = kmem_cache_alloc(dbuf_kmem_cache, KM_SLEEP); + + db->db_objset = os; + db->db.db_object = dn->dn_object; + db->db_level = level; + db->db_blkid = blkid; + db->db_last_dirty = NULL; + db->db_dirtycnt = 0; + db->db_dnode_handle = dn->dn_handle; + db->db_parent = parent; + db->db_blkptr = blkptr; + + db->db_user = NULL; + db->db_user_immediate_evict = FALSE; + db->db_freed_in_flight = FALSE; + db->db_pending_evict = FALSE; + + if (blkid == DMU_BONUS_BLKID) { + ASSERT3P(parent, ==, dn->dn_dbuf); + db->db.db_size = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - + (dn->dn_nblkptr-1) * sizeof (blkptr_t); + ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); + db->db.db_offset = DMU_BONUS_BLKID; + db->db_state = DB_UNCACHED; + /* the bonus dbuf is not placed in the hash table */ + arc_space_consume(sizeof (dmu_buf_impl_t), ARC_SPACE_DBUF); + return (db); + } else if (blkid == DMU_SPILL_BLKID) { + db->db.db_size = (blkptr != NULL) ? + BP_GET_LSIZE(blkptr) : SPA_MINBLOCKSIZE; + db->db.db_offset = 0; + } else { + int blocksize = + db->db_level ? 1 << dn->dn_indblkshift : dn->dn_datablksz; + db->db.db_size = blocksize; + db->db.db_offset = db->db_blkid * blocksize; + } + + /* + * Hold the dn_dbufs_mtx while we get the new dbuf + * in the hash table *and* added to the dbufs list. + * This prevents a possible deadlock with someone + * trying to look up this dbuf before its added to the + * dn_dbufs list. + */ + mutex_enter(&dn->dn_dbufs_mtx); + db->db_state = DB_EVICTING; + if ((odb = dbuf_hash_insert(db)) != NULL) { + /* someone else inserted it first */ + kmem_cache_free(dbuf_kmem_cache, db); + mutex_exit(&dn->dn_dbufs_mtx); + return (odb); + } + avl_add(&dn->dn_dbufs, db); + + db->db_state = DB_UNCACHED; + mutex_exit(&dn->dn_dbufs_mtx); + arc_space_consume(sizeof (dmu_buf_impl_t), ARC_SPACE_DBUF); + + if (parent && parent != dn->dn_dbuf) + dbuf_add_ref(parent, db); + + ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT || + refcount_count(&dn->dn_holds) > 0); + (void) refcount_add(&dn->dn_holds, db); + atomic_inc_32(&dn->dn_dbufs_count); + + dprintf_dbuf(db, "db=%p\n", db); + + return (db); +} + +typedef struct dbuf_prefetch_arg { + spa_t *dpa_spa; /* The spa to issue the prefetch in. */ + zbookmark_phys_t dpa_zb; /* The target block to prefetch. */ + int dpa_epbs; /* Entries (blkptr_t's) Per Block Shift. */ + int dpa_curlevel; /* The current level that we're reading */ + dnode_t *dpa_dnode; /* The dnode associated with the prefetch */ + zio_priority_t dpa_prio; /* The priority I/Os should be issued at. */ + zio_t *dpa_zio; /* The parent zio_t for all prefetches. */ + arc_flags_t dpa_aflags; /* Flags to pass to the final prefetch. */ +} dbuf_prefetch_arg_t; + +/* + * Actually issue the prefetch read for the block given. + */ +static void +dbuf_issue_final_prefetch(dbuf_prefetch_arg_t *dpa, blkptr_t *bp) +{ + arc_flags_t aflags; + if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) + return; + + aflags = dpa->dpa_aflags | ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; + + ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp)); + ASSERT3U(dpa->dpa_curlevel, ==, dpa->dpa_zb.zb_level); + ASSERT(dpa->dpa_zio != NULL); + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, bp, NULL, NULL, + dpa->dpa_prio, ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &aflags, &dpa->dpa_zb); +} + +/* + * Called when an indirect block above our prefetch target is read in. This + * will either read in the next indirect block down the tree or issue the actual + * prefetch if the next block down is our target. + */ +static void +dbuf_prefetch_indirect_done(zio_t *zio, arc_buf_t *abuf, void *private) +{ + dbuf_prefetch_arg_t *dpa = private; + uint64_t nextblkid; + blkptr_t *bp; + + ASSERT3S(dpa->dpa_zb.zb_level, <, dpa->dpa_curlevel); + ASSERT3S(dpa->dpa_curlevel, >, 0); + + /* + * The dpa_dnode is only valid if we are called with a NULL + * zio. This indicates that the arc_read() returned without + * first calling zio_read() to issue a physical read. Once + * a physical read is made the dpa_dnode must be invalidated + * as the locks guarding it may have been dropped. If the + * dpa_dnode is still valid, then we want to add it to the dbuf + * cache. To do so, we must hold the dbuf associated with the block + * we just prefetched, read its contents so that we associate it + * with an arc_buf_t, and then release it. + */ + if (zio != NULL) { + ASSERT3S(BP_GET_LEVEL(zio->io_bp), ==, dpa->dpa_curlevel); + if (zio->io_flags & ZIO_FLAG_RAW) { + ASSERT3U(BP_GET_PSIZE(zio->io_bp), ==, zio->io_size); + } else { + ASSERT3U(BP_GET_LSIZE(zio->io_bp), ==, zio->io_size); + } + ASSERT3P(zio->io_spa, ==, dpa->dpa_spa); + + dpa->dpa_dnode = NULL; + } else if (dpa->dpa_dnode != NULL) { + uint64_t curblkid = dpa->dpa_zb.zb_blkid >> + (dpa->dpa_epbs * (dpa->dpa_curlevel - + dpa->dpa_zb.zb_level)); + dmu_buf_impl_t *db = dbuf_hold_level(dpa->dpa_dnode, + dpa->dpa_curlevel, curblkid, FTAG); + (void) dbuf_read(db, NULL, + DB_RF_MUST_SUCCEED | DB_RF_NOPREFETCH | DB_RF_HAVESTRUCT); + dbuf_rele(db, FTAG); + } + + dpa->dpa_curlevel--; + + nextblkid = dpa->dpa_zb.zb_blkid >> + (dpa->dpa_epbs * (dpa->dpa_curlevel - dpa->dpa_zb.zb_level)); + bp = ((blkptr_t *)abuf->b_data) + + P2PHASE(nextblkid, 1ULL << dpa->dpa_epbs); + if (BP_IS_HOLE(bp) || (zio != NULL && zio->io_error != 0)) { + kmem_free(dpa, sizeof (*dpa)); + } else if (dpa->dpa_curlevel == dpa->dpa_zb.zb_level) { + ASSERT3U(nextblkid, ==, dpa->dpa_zb.zb_blkid); + dbuf_issue_final_prefetch(dpa, bp); + kmem_free(dpa, sizeof (*dpa)); + } else { + arc_flags_t iter_aflags = ARC_FLAG_NOWAIT; + zbookmark_phys_t zb; + + /* flag if L2ARC eligible, l2arc_noprefetch then decides */ + if (dpa->dpa_aflags & ARC_FLAG_L2CACHE) + iter_aflags |= ARC_FLAG_L2CACHE; + + ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp)); + + SET_BOOKMARK(&zb, dpa->dpa_zb.zb_objset, + dpa->dpa_zb.zb_object, dpa->dpa_curlevel, nextblkid); + + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, + bp, dbuf_prefetch_indirect_done, dpa, dpa->dpa_prio, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &iter_aflags, &zb); + } + + arc_buf_destroy(abuf, private); +} + +/* + * Issue prefetch reads for the given block on the given level. If the indirect + * blocks above that block are not in memory, we will read them in + * asynchronously. As a result, this call never blocks waiting for a read to + * complete. + */ +void +dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio, + arc_flags_t aflags) +{ + blkptr_t bp; + int epbs, nlevels, curlevel; + uint64_t curblkid; + dmu_buf_impl_t *db; + zio_t *pio; + dbuf_prefetch_arg_t *dpa; + dsl_dataset_t *ds; + + ASSERT(blkid != DMU_BONUS_BLKID); + ASSERT(RW_LOCK_HELD(&dn->dn_struct_rwlock)); + + if (blkid > dn->dn_maxblkid) + return; + + if (dnode_block_freed(dn, blkid)) + return; + + /* + * This dnode hasn't been written to disk yet, so there's nothing to + * prefetch. + */ + nlevels = dn->dn_phys->dn_nlevels; + if (level >= nlevels || dn->dn_phys->dn_nblkptr == 0) + return; + + epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + if (dn->dn_phys->dn_maxblkid < blkid << (epbs * level)) + return; + + db = dbuf_find(dn->dn_objset, dn->dn_object, + level, blkid); + if (db != NULL) { + mutex_exit(&db->db_mtx); + /* + * This dbuf already exists. It is either CACHED, or + * (we assume) about to be read or filled. + */ + return; + } + + /* + * Find the closest ancestor (indirect block) of the target block + * that is present in the cache. In this indirect block, we will + * find the bp that is at curlevel, curblkid. + */ + curlevel = level; + curblkid = blkid; + while (curlevel < nlevels - 1) { + int parent_level = curlevel + 1; + uint64_t parent_blkid = curblkid >> epbs; + dmu_buf_impl_t *db; + + if (dbuf_hold_impl(dn, parent_level, parent_blkid, + FALSE, TRUE, FTAG, &db) == 0) { + blkptr_t *bpp = db->db_buf->b_data; + bp = bpp[P2PHASE(curblkid, 1 << epbs)]; + dbuf_rele(db, FTAG); + break; + } + + curlevel = parent_level; + curblkid = parent_blkid; + } + + if (curlevel == nlevels - 1) { + /* No cached indirect blocks found. */ + ASSERT3U(curblkid, <, dn->dn_phys->dn_nblkptr); + bp = dn->dn_phys->dn_blkptr[curblkid]; + } + if (BP_IS_HOLE(&bp)) + return; + + ASSERT3U(curlevel, ==, BP_GET_LEVEL(&bp)); + + pio = zio_root(dmu_objset_spa(dn->dn_objset), NULL, NULL, + ZIO_FLAG_CANFAIL); + + dpa = kmem_zalloc(sizeof (*dpa), KM_SLEEP); + ds = dn->dn_objset->os_dsl_dataset; + SET_BOOKMARK(&dpa->dpa_zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET, + dn->dn_object, level, blkid); + dpa->dpa_curlevel = curlevel; + dpa->dpa_prio = prio; + dpa->dpa_aflags = aflags; + dpa->dpa_spa = dn->dn_objset->os_spa; + dpa->dpa_dnode = dn; + dpa->dpa_epbs = epbs; + dpa->dpa_zio = pio; + + /* flag if L2ARC eligible, l2arc_noprefetch then decides */ + if (DNODE_LEVEL_IS_L2CACHEABLE(dn, level)) + dpa->dpa_aflags |= ARC_FLAG_L2CACHE; + + /* + * If we have the indirect just above us, no need to do the asynchronous + * prefetch chain; we'll just run the last step ourselves. If we're at + * a higher level, though, we want to issue the prefetches for all the + * indirect blocks asynchronously, so we can go on with whatever we were + * doing. + */ + if (curlevel == level) { + ASSERT3U(curblkid, ==, blkid); + dbuf_issue_final_prefetch(dpa, &bp); + kmem_free(dpa, sizeof (*dpa)); + } else { + arc_flags_t iter_aflags = ARC_FLAG_NOWAIT; + zbookmark_phys_t zb; + + /* flag if L2ARC eligible, l2arc_noprefetch then decides */ + if (DNODE_LEVEL_IS_L2CACHEABLE(dn, level)) + iter_aflags |= ARC_FLAG_L2CACHE; + + SET_BOOKMARK(&zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET, + dn->dn_object, curlevel, curblkid); + (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, + &bp, dbuf_prefetch_indirect_done, dpa, prio, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &iter_aflags, &zb); + } + /* + * We use pio here instead of dpa_zio since it's possible that + * dpa may have already been freed. + */ + zio_nowait(pio); +} + +#define DBUF_HOLD_IMPL_MAX_DEPTH 20 + +/* + * Helper function for __dbuf_hold_impl() to copy a buffer. Handles + * the case of compressed and uncompressed buffers by allocating the + * new buffer, respectively, with arc_alloc_raw_buf(), + * arc_alloc_compressed_buf() or arc_alloc_buf().* + * + * NOTE: Declared noinline to avoid stack bloat in __dbuf_hold_impl(). + */ +noinline static void +dbuf_hold_copy(struct dbuf_hold_impl_data *dh) +{ + dnode_t *dn = dh->dh_dn; + dmu_buf_impl_t *db = dh->dh_db; + dbuf_dirty_record_t *dr = dh->dh_dr; + arc_buf_t *data = dr->dt.dl.dr_data; + + enum zio_compress compress_type = arc_get_compression(data); + + if (compress_type != ZIO_COMPRESS_OFF) { + dbuf_set_data(db, arc_alloc_compressed_buf( + dn->dn_objset->os_spa, db, arc_buf_size(data), + arc_buf_lsize(data), compress_type)); + } else { + dbuf_set_data(db, arc_alloc_buf(dn->dn_objset->os_spa, db, + DBUF_GET_BUFC_TYPE(db), db->db.db_size)); + } + + bcopy(data->b_data, db->db.db_data, arc_buf_size(data)); +} + +/* + * Returns with db_holds incremented, and db_mtx not held. + * Note: dn_struct_rwlock must be held. + */ +static int +__dbuf_hold_impl(struct dbuf_hold_impl_data *dh) +{ + ASSERT3S(dh->dh_depth, <, DBUF_HOLD_IMPL_MAX_DEPTH); + dh->dh_parent = NULL; + + ASSERT(dh->dh_blkid != DMU_BONUS_BLKID); + ASSERT(RW_LOCK_HELD(&dh->dh_dn->dn_struct_rwlock)); + ASSERT3U(dh->dh_dn->dn_nlevels, >, dh->dh_level); + + *(dh->dh_dbp) = NULL; + + /* dbuf_find() returns with db_mtx held */ + dh->dh_db = dbuf_find(dh->dh_dn->dn_objset, dh->dh_dn->dn_object, + dh->dh_level, dh->dh_blkid); + + if (dh->dh_db == NULL) { + dh->dh_bp = NULL; + + if (dh->dh_fail_uncached) + return (SET_ERROR(ENOENT)); + + ASSERT3P(dh->dh_parent, ==, NULL); + dh->dh_err = dbuf_findbp(dh->dh_dn, dh->dh_level, dh->dh_blkid, + dh->dh_fail_sparse, &dh->dh_parent, &dh->dh_bp, dh); + if (dh->dh_fail_sparse) { + if (dh->dh_err == 0 && + dh->dh_bp && BP_IS_HOLE(dh->dh_bp)) + dh->dh_err = SET_ERROR(ENOENT); + if (dh->dh_err) { + if (dh->dh_parent) + dbuf_rele(dh->dh_parent, NULL); + return (dh->dh_err); + } + } + if (dh->dh_err && dh->dh_err != ENOENT) + return (dh->dh_err); + dh->dh_db = dbuf_create(dh->dh_dn, dh->dh_level, dh->dh_blkid, + dh->dh_parent, dh->dh_bp); + } + + if (dh->dh_fail_uncached && dh->dh_db->db_state != DB_CACHED) { + mutex_exit(&dh->dh_db->db_mtx); + return (SET_ERROR(ENOENT)); + } + + if (dh->dh_db->db_buf != NULL) + ASSERT3P(dh->dh_db->db.db_data, ==, dh->dh_db->db_buf->b_data); + + ASSERT(dh->dh_db->db_buf == NULL || arc_referenced(dh->dh_db->db_buf)); + + /* + * If this buffer is currently syncing out, and we are are + * still referencing it from db_data, we need to make a copy + * of it in case we decide we want to dirty it again in this txg. + */ + if (dh->dh_db->db_level == 0 && + dh->dh_db->db_blkid != DMU_BONUS_BLKID && + dh->dh_dn->dn_object != DMU_META_DNODE_OBJECT && + dh->dh_db->db_state == DB_CACHED && dh->dh_db->db_data_pending) { + dh->dh_dr = dh->dh_db->db_data_pending; + if (dh->dh_dr->dt.dl.dr_data == dh->dh_db->db_buf) + dbuf_hold_copy(dh); + } + + if (multilist_link_active(&dh->dh_db->db_cache_link)) { + ASSERT(refcount_is_zero(&dh->dh_db->db_holds)); + multilist_remove(dbuf_cache, dh->dh_db); + (void) refcount_remove_many(&dbuf_cache_size, + dh->dh_db->db.db_size, dh->dh_db); + } + (void) refcount_add(&dh->dh_db->db_holds, dh->dh_tag); + DBUF_VERIFY(dh->dh_db); + mutex_exit(&dh->dh_db->db_mtx); + + /* NOTE: we can't rele the parent until after we drop the db_mtx */ + if (dh->dh_parent) + dbuf_rele(dh->dh_parent, NULL); + + ASSERT3P(DB_DNODE(dh->dh_db), ==, dh->dh_dn); + ASSERT3U(dh->dh_db->db_blkid, ==, dh->dh_blkid); + ASSERT3U(dh->dh_db->db_level, ==, dh->dh_level); + *(dh->dh_dbp) = dh->dh_db; + + return (0); +} + +/* + * The following code preserves the recursive function dbuf_hold_impl() + * but moves the local variables AND function arguments to the heap to + * minimize the stack frame size. Enough space is initially allocated + * on the stack for 20 levels of recursion. + */ +int +dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid, + boolean_t fail_sparse, boolean_t fail_uncached, + void *tag, dmu_buf_impl_t **dbp) +{ + struct dbuf_hold_impl_data *dh; + int error; + + dh = kmem_alloc(sizeof (struct dbuf_hold_impl_data) * + DBUF_HOLD_IMPL_MAX_DEPTH, KM_SLEEP); + __dbuf_hold_impl_init(dh, dn, level, blkid, fail_sparse, + fail_uncached, tag, dbp, 0); + + error = __dbuf_hold_impl(dh); + + kmem_free(dh, sizeof (struct dbuf_hold_impl_data) * + DBUF_HOLD_IMPL_MAX_DEPTH); + + return (error); +} + +static void +__dbuf_hold_impl_init(struct dbuf_hold_impl_data *dh, + dnode_t *dn, uint8_t level, uint64_t blkid, + boolean_t fail_sparse, boolean_t fail_uncached, + void *tag, dmu_buf_impl_t **dbp, int depth) +{ + dh->dh_dn = dn; + dh->dh_level = level; + dh->dh_blkid = blkid; + + dh->dh_fail_sparse = fail_sparse; + dh->dh_fail_uncached = fail_uncached; + + dh->dh_tag = tag; + dh->dh_dbp = dbp; + + dh->dh_db = NULL; + dh->dh_parent = NULL; + dh->dh_bp = NULL; + dh->dh_err = 0; + dh->dh_dr = NULL; + + dh->dh_depth = depth; +} + +dmu_buf_impl_t * +dbuf_hold(dnode_t *dn, uint64_t blkid, void *tag) +{ + return (dbuf_hold_level(dn, 0, blkid, tag)); +} + +dmu_buf_impl_t * +dbuf_hold_level(dnode_t *dn, int level, uint64_t blkid, void *tag) +{ + dmu_buf_impl_t *db; + int err = dbuf_hold_impl(dn, level, blkid, FALSE, FALSE, tag, &db); + return (err ? NULL : db); +} + +void +dbuf_create_bonus(dnode_t *dn) +{ + ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); + + ASSERT(dn->dn_bonus == NULL); + dn->dn_bonus = dbuf_create(dn, 0, DMU_BONUS_BLKID, dn->dn_dbuf, NULL); +} + +int +dbuf_spill_set_blksz(dmu_buf_t *db_fake, uint64_t blksz, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + + if (db->db_blkid != DMU_SPILL_BLKID) + return (SET_ERROR(ENOTSUP)); + if (blksz == 0) + blksz = SPA_MINBLOCKSIZE; + ASSERT3U(blksz, <=, spa_maxblocksize(dmu_objset_spa(db->db_objset))); + blksz = P2ROUNDUP(blksz, SPA_MINBLOCKSIZE); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + dbuf_new_size(db, blksz, tx); + rw_exit(&dn->dn_struct_rwlock); + DB_DNODE_EXIT(db); + + return (0); +} + +void +dbuf_rm_spill(dnode_t *dn, dmu_tx_t *tx) +{ + dbuf_free_range(dn, DMU_SPILL_BLKID, DMU_SPILL_BLKID, tx); +} + +#pragma weak dmu_buf_add_ref = dbuf_add_ref +void +dbuf_add_ref(dmu_buf_impl_t *db, void *tag) +{ + int64_t holds = refcount_add(&db->db_holds, tag); + VERIFY3S(holds, >, 1); +} + +#pragma weak dmu_buf_try_add_ref = dbuf_try_add_ref +boolean_t +dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid, + void *tag) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dmu_buf_impl_t *found_db; + boolean_t result = B_FALSE; + + if (blkid == DMU_BONUS_BLKID) + found_db = dbuf_find_bonus(os, obj); + else + found_db = dbuf_find(os, obj, 0, blkid); + + if (found_db != NULL) { + if (db == found_db && dbuf_refcount(db) > db->db_dirtycnt) { + (void) refcount_add(&db->db_holds, tag); + result = B_TRUE; + } + mutex_exit(&found_db->db_mtx); + } + return (result); +} + +/* + * If you call dbuf_rele() you had better not be referencing the dnode handle + * unless you have some other direct or indirect hold on the dnode. (An indirect + * hold is a hold on one of the dnode's dbufs, including the bonus buffer.) + * Without that, the dbuf_rele() could lead to a dnode_rele() followed by the + * dnode's parent dbuf evicting its dnode handles. + */ +void +dbuf_rele(dmu_buf_impl_t *db, void *tag) +{ + mutex_enter(&db->db_mtx); + dbuf_rele_and_unlock(db, tag); +} + +void +dmu_buf_rele(dmu_buf_t *db, void *tag) +{ + dbuf_rele((dmu_buf_impl_t *)db, tag); +} + +/* + * dbuf_rele() for an already-locked dbuf. This is necessary to allow + * db_dirtycnt and db_holds to be updated atomically. + */ +void +dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag) +{ + int64_t holds; + + ASSERT(MUTEX_HELD(&db->db_mtx)); + DBUF_VERIFY(db); + + /* + * Remove the reference to the dbuf before removing its hold on the + * dnode so we can guarantee in dnode_move() that a referenced bonus + * buffer has a corresponding dnode hold. + */ + holds = refcount_remove(&db->db_holds, tag); + ASSERT(holds >= 0); + + /* + * We can't freeze indirects if there is a possibility that they + * may be modified in the current syncing context. + */ + if (db->db_buf != NULL && + holds == (db->db_level == 0 ? db->db_dirtycnt : 0)) { + arc_buf_freeze(db->db_buf); + } + + if (holds == db->db_dirtycnt && + db->db_level == 0 && db->db_user_immediate_evict) + dbuf_evict_user(db); + + if (holds == 0) { + if (db->db_blkid == DMU_BONUS_BLKID) { + dnode_t *dn; + boolean_t evict_dbuf = db->db_pending_evict; + + /* + * If the dnode moves here, we cannot cross this + * barrier until the move completes. + */ + DB_DNODE_ENTER(db); + + dn = DB_DNODE(db); + atomic_dec_32(&dn->dn_dbufs_count); + + /* + * Decrementing the dbuf count means that the bonus + * buffer's dnode hold is no longer discounted in + * dnode_move(). The dnode cannot move until after + * the dnode_rele() below. + */ + DB_DNODE_EXIT(db); + + /* + * Do not reference db after its lock is dropped. + * Another thread may evict it. + */ + mutex_exit(&db->db_mtx); + + if (evict_dbuf) + dnode_evict_bonus(dn); + + dnode_rele(dn, db); + } else if (db->db_buf == NULL) { + /* + * This is a special case: we never associated this + * dbuf with any data allocated from the ARC. + */ + ASSERT(db->db_state == DB_UNCACHED || + db->db_state == DB_NOFILL); + dbuf_destroy(db); + } else if (arc_released(db->db_buf)) { + /* + * This dbuf has anonymous data associated with it. + */ + dbuf_destroy(db); + } else { + boolean_t do_arc_evict = B_FALSE; + blkptr_t bp; + spa_t *spa = dmu_objset_spa(db->db_objset); + + if (!DBUF_IS_CACHEABLE(db) && + db->db_blkptr != NULL && + !BP_IS_HOLE(db->db_blkptr) && + !BP_IS_EMBEDDED(db->db_blkptr)) { + do_arc_evict = B_TRUE; + bp = *db->db_blkptr; + } + + if (!DBUF_IS_CACHEABLE(db) || + db->db_pending_evict) { + dbuf_destroy(db); + } else if (!multilist_link_active(&db->db_cache_link)) { + multilist_insert(dbuf_cache, db); + (void) refcount_add_many(&dbuf_cache_size, + db->db.db_size, db); + mutex_exit(&db->db_mtx); + + dbuf_evict_notify(); + } + + if (do_arc_evict) + arc_freed(spa, &bp); + } + } else { + mutex_exit(&db->db_mtx); + } + +} + +#pragma weak dmu_buf_refcount = dbuf_refcount +uint64_t +dbuf_refcount(dmu_buf_impl_t *db) +{ + return (refcount_count(&db->db_holds)); +} + +void * +dmu_buf_replace_user(dmu_buf_t *db_fake, dmu_buf_user_t *old_user, + dmu_buf_user_t *new_user) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + mutex_enter(&db->db_mtx); + dbuf_verify_user(db, DBVU_NOT_EVICTING); + if (db->db_user == old_user) + db->db_user = new_user; + else + old_user = db->db_user; + dbuf_verify_user(db, DBVU_NOT_EVICTING); + mutex_exit(&db->db_mtx); + + return (old_user); +} + +void * +dmu_buf_set_user(dmu_buf_t *db_fake, dmu_buf_user_t *user) +{ + return (dmu_buf_replace_user(db_fake, NULL, user)); +} + +void * +dmu_buf_set_user_ie(dmu_buf_t *db_fake, dmu_buf_user_t *user) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + db->db_user_immediate_evict = TRUE; + return (dmu_buf_set_user(db_fake, user)); +} + +void * +dmu_buf_remove_user(dmu_buf_t *db_fake, dmu_buf_user_t *user) +{ + return (dmu_buf_replace_user(db_fake, user, NULL)); +} + +void * +dmu_buf_get_user(dmu_buf_t *db_fake) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + dbuf_verify_user(db, DBVU_NOT_EVICTING); + return (db->db_user); +} + +void +dmu_buf_user_evict_wait() +{ + taskq_wait(dbu_evict_taskq); +} + +blkptr_t * +dmu_buf_get_blkptr(dmu_buf_t *db) +{ + dmu_buf_impl_t *dbi = (dmu_buf_impl_t *)db; + return (dbi->db_blkptr); +} + +objset_t * +dmu_buf_get_objset(dmu_buf_t *db) +{ + dmu_buf_impl_t *dbi = (dmu_buf_impl_t *)db; + return (dbi->db_objset); +} + +dnode_t * +dmu_buf_dnode_enter(dmu_buf_t *db) +{ + dmu_buf_impl_t *dbi = (dmu_buf_impl_t *)db; + DB_DNODE_ENTER(dbi); + return (DB_DNODE(dbi)); +} + +void +dmu_buf_dnode_exit(dmu_buf_t *db) +{ + dmu_buf_impl_t *dbi = (dmu_buf_impl_t *)db; + DB_DNODE_EXIT(dbi); +} + +static void +dbuf_check_blkptr(dnode_t *dn, dmu_buf_impl_t *db) +{ + /* ASSERT(dmu_tx_is_syncing(tx) */ + ASSERT(MUTEX_HELD(&db->db_mtx)); + + if (db->db_blkptr != NULL) + return; + + if (db->db_blkid == DMU_SPILL_BLKID) { + db->db_blkptr = DN_SPILL_BLKPTR(dn->dn_phys); + BP_ZERO(db->db_blkptr); + return; + } + if (db->db_level == dn->dn_phys->dn_nlevels-1) { + /* + * This buffer was allocated at a time when there was + * no available blkptrs from the dnode, or it was + * inappropriate to hook it in (i.e., nlevels mis-match). + */ + ASSERT(db->db_blkid < dn->dn_phys->dn_nblkptr); + ASSERT(db->db_parent == NULL); + db->db_parent = dn->dn_dbuf; + db->db_blkptr = &dn->dn_phys->dn_blkptr[db->db_blkid]; + DBUF_VERIFY(db); + } else { + dmu_buf_impl_t *parent = db->db_parent; + int epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + + ASSERT(dn->dn_phys->dn_nlevels > 1); + if (parent == NULL) { + mutex_exit(&db->db_mtx); + rw_enter(&dn->dn_struct_rwlock, RW_READER); + parent = dbuf_hold_level(dn, db->db_level + 1, + db->db_blkid >> epbs, db); + rw_exit(&dn->dn_struct_rwlock); + mutex_enter(&db->db_mtx); + db->db_parent = parent; + } + db->db_blkptr = (blkptr_t *)parent->db.db_data + + (db->db_blkid & ((1ULL << epbs) - 1)); + DBUF_VERIFY(db); + } +} + +/* + * dbuf_sync_indirect() is called recursively from dbuf_sync_list() so it + * is critical the we not allow the compiler to inline this function in to + * dbuf_sync_list() thereby drastically bloating the stack usage. + */ +noinline static void +dbuf_sync_indirect(dbuf_dirty_record_t *dr, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = dr->dr_dbuf; + dnode_t *dn; + zio_t *zio; + + ASSERT(dmu_tx_is_syncing(tx)); + + dprintf_dbuf_bp(db, db->db_blkptr, "blkptr=%p", db->db_blkptr); + + mutex_enter(&db->db_mtx); + + ASSERT(db->db_level > 0); + DBUF_VERIFY(db); + + /* Read the block if it hasn't been read yet. */ + if (db->db_buf == NULL) { + mutex_exit(&db->db_mtx); + (void) dbuf_read(db, NULL, DB_RF_MUST_SUCCEED); + mutex_enter(&db->db_mtx); + } + ASSERT3U(db->db_state, ==, DB_CACHED); + ASSERT(db->db_buf != NULL); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + /* Indirect block size must match what the dnode thinks it is. */ + ASSERT3U(db->db.db_size, ==, 1<dn_phys->dn_indblkshift); + dbuf_check_blkptr(dn, db); + DB_DNODE_EXIT(db); + + /* Provide the pending dirty record to child dbufs */ + db->db_data_pending = dr; + + mutex_exit(&db->db_mtx); + dbuf_write(dr, db->db_buf, tx); + + zio = dr->dr_zio; + mutex_enter(&dr->dt.di.dr_mtx); + dbuf_sync_list(&dr->dt.di.dr_children, db->db_level - 1, tx); + ASSERT(list_head(&dr->dt.di.dr_children) == NULL); + mutex_exit(&dr->dt.di.dr_mtx); + zio_nowait(zio); +} + +/* + * dbuf_sync_leaf() is called recursively from dbuf_sync_list() so it is + * critical the we not allow the compiler to inline this function in to + * dbuf_sync_list() thereby drastically bloating the stack usage. + */ +noinline static void +dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx) +{ + arc_buf_t **datap = &dr->dt.dl.dr_data; + dmu_buf_impl_t *db = dr->dr_dbuf; + dnode_t *dn; + objset_t *os; + uint64_t txg = tx->tx_txg; + + ASSERT(dmu_tx_is_syncing(tx)); + + dprintf_dbuf_bp(db, db->db_blkptr, "blkptr=%p", db->db_blkptr); + + mutex_enter(&db->db_mtx); + /* + * To be synced, we must be dirtied. But we + * might have been freed after the dirty. + */ + if (db->db_state == DB_UNCACHED) { + /* This buffer has been freed since it was dirtied */ + ASSERT(db->db.db_data == NULL); + } else if (db->db_state == DB_FILL) { + /* This buffer was freed and is now being re-filled */ + ASSERT(db->db.db_data != dr->dt.dl.dr_data); + } else { + ASSERT(db->db_state == DB_CACHED || db->db_state == DB_NOFILL); + } + DBUF_VERIFY(db); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + if (db->db_blkid == DMU_SPILL_BLKID) { + mutex_enter(&dn->dn_mtx); + if (!(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR)) { + /* + * In the previous transaction group, the bonus buffer + * was entirely used to store the attributes for the + * dnode which overrode the dn_spill field. However, + * when adding more attributes to the file a spill + * block was required to hold the extra attributes. + * + * Make sure to clear the garbage left in the dn_spill + * field from the previous attributes in the bonus + * buffer. Otherwise, after writing out the spill + * block to the new allocated dva, it will free + * the old block pointed to by the invalid dn_spill. + */ + db->db_blkptr = NULL; + } + dn->dn_phys->dn_flags |= DNODE_FLAG_SPILL_BLKPTR; + mutex_exit(&dn->dn_mtx); + } + + /* + * If this is a bonus buffer, simply copy the bonus data into the + * dnode. It will be written out when the dnode is synced (and it + * will be synced, since it must have been dirty for dbuf_sync to + * be called). + */ + if (db->db_blkid == DMU_BONUS_BLKID) { + dbuf_dirty_record_t **drp; + + ASSERT(*datap != NULL); + ASSERT0(db->db_level); + ASSERT3U(dn->dn_phys->dn_bonuslen, <=, + DN_SLOTS_TO_BONUSLEN(dn->dn_phys->dn_extra_slots + 1)); + bcopy(*datap, DN_BONUS(dn->dn_phys), dn->dn_phys->dn_bonuslen); + DB_DNODE_EXIT(db); + + if (*datap != db->db.db_data) { + int slots = DB_DNODE(db)->dn_num_slots; + int bonuslen = DN_SLOTS_TO_BONUSLEN(slots); + kmem_free(*datap, bonuslen); + arc_space_return(bonuslen, ARC_SPACE_BONUS); + } + db->db_data_pending = NULL; + drp = &db->db_last_dirty; + while (*drp != dr) + drp = &(*drp)->dr_next; + ASSERT(dr->dr_next == NULL); + ASSERT(dr->dr_dbuf == db); + *drp = dr->dr_next; + if (dr->dr_dbuf->db_level != 0) { + mutex_destroy(&dr->dt.di.dr_mtx); + list_destroy(&dr->dt.di.dr_children); + } + kmem_free(dr, sizeof (dbuf_dirty_record_t)); + ASSERT(db->db_dirtycnt > 0); + db->db_dirtycnt -= 1; + dbuf_rele_and_unlock(db, (void *)(uintptr_t)txg); + return; + } + + os = dn->dn_objset; + + /* + * This function may have dropped the db_mtx lock allowing a dmu_sync + * operation to sneak in. As a result, we need to ensure that we + * don't check the dr_override_state until we have returned from + * dbuf_check_blkptr. + */ + dbuf_check_blkptr(dn, db); + + /* + * If this buffer is in the middle of an immediate write, + * wait for the synchronous IO to complete. + */ + while (dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC) { + ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT); + cv_wait(&db->db_changed, &db->db_mtx); + ASSERT(dr->dt.dl.dr_override_state != DR_NOT_OVERRIDDEN); + } + + if (db->db_state != DB_NOFILL && + dn->dn_object != DMU_META_DNODE_OBJECT && + refcount_count(&db->db_holds) > 1 && + dr->dt.dl.dr_override_state != DR_OVERRIDDEN && + *datap == db->db_buf) { + /* + * If this buffer is currently "in use" (i.e., there + * are active holds and db_data still references it), + * then make a copy before we start the write so that + * any modifications from the open txg will not leak + * into this write. + * + * NOTE: this copy does not need to be made for + * objects only modified in the syncing context (e.g. + * DNONE_DNODE blocks). + */ + int psize = arc_buf_size(*datap); + arc_buf_contents_t type = DBUF_GET_BUFC_TYPE(db); + enum zio_compress compress_type = arc_get_compression(*datap); + + if (compress_type == ZIO_COMPRESS_OFF) { + *datap = arc_alloc_buf(os->os_spa, db, type, psize); + } else { + ASSERT3U(type, ==, ARC_BUFC_DATA); + int lsize = arc_buf_lsize(*datap); + *datap = arc_alloc_compressed_buf(os->os_spa, db, + psize, lsize, compress_type); + } + bcopy(db->db.db_data, (*datap)->b_data, psize); + } + db->db_data_pending = dr; + + mutex_exit(&db->db_mtx); + + dbuf_write(dr, *datap, tx); + + ASSERT(!list_link_active(&dr->dr_dirty_node)); + if (dn->dn_object == DMU_META_DNODE_OBJECT) { + list_insert_tail(&dn->dn_dirty_records[txg&TXG_MASK], dr); + DB_DNODE_EXIT(db); + } else { + /* + * Although zio_nowait() does not "wait for an IO", it does + * initiate the IO. If this is an empty write it seems plausible + * that the IO could actually be completed before the nowait + * returns. We need to DB_DNODE_EXIT() first in case + * zio_nowait() invalidates the dbuf. + */ + DB_DNODE_EXIT(db); + zio_nowait(dr->dr_zio); + } +} + +void +dbuf_sync_list(list_t *list, int level, dmu_tx_t *tx) +{ + dbuf_dirty_record_t *dr; + + while ((dr = list_head(list))) { + if (dr->dr_zio != NULL) { + /* + * If we find an already initialized zio then we + * are processing the meta-dnode, and we have finished. + * The dbufs for all dnodes are put back on the list + * during processing, so that we can zio_wait() + * these IOs after initiating all child IOs. + */ + ASSERT3U(dr->dr_dbuf->db.db_object, ==, + DMU_META_DNODE_OBJECT); + break; + } + if (dr->dr_dbuf->db_blkid != DMU_BONUS_BLKID && + dr->dr_dbuf->db_blkid != DMU_SPILL_BLKID) { + VERIFY3U(dr->dr_dbuf->db_level, ==, level); + } + list_remove(list, dr); + if (dr->dr_dbuf->db_level > 0) + dbuf_sync_indirect(dr, tx); + else + dbuf_sync_leaf(dr, tx); + } +} + +/* ARGSUSED */ +static void +dbuf_write_ready(zio_t *zio, arc_buf_t *buf, void *vdb) +{ + dmu_buf_impl_t *db = vdb; + dnode_t *dn; + blkptr_t *bp = zio->io_bp; + blkptr_t *bp_orig = &zio->io_bp_orig; + spa_t *spa = zio->io_spa; + int64_t delta; + uint64_t fill = 0; + int i; + + ASSERT3P(db->db_blkptr, !=, NULL); + ASSERT3P(&db->db_data_pending->dr_bp_copy, ==, bp); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + delta = bp_get_dsize_sync(spa, bp) - bp_get_dsize_sync(spa, bp_orig); + dnode_diduse_space(dn, delta - zio->io_prev_space_delta); + zio->io_prev_space_delta = delta; + + if (bp->blk_birth != 0) { + ASSERT((db->db_blkid != DMU_SPILL_BLKID && + BP_GET_TYPE(bp) == dn->dn_type) || + (db->db_blkid == DMU_SPILL_BLKID && + BP_GET_TYPE(bp) == dn->dn_bonustype) || + BP_IS_EMBEDDED(bp)); + ASSERT(BP_GET_LEVEL(bp) == db->db_level); + } + + mutex_enter(&db->db_mtx); + +#ifdef ZFS_DEBUG + if (db->db_blkid == DMU_SPILL_BLKID) { + ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR); + ASSERT(!(BP_IS_HOLE(bp)) && + db->db_blkptr == DN_SPILL_BLKPTR(dn->dn_phys)); + } +#endif + + if (db->db_level == 0) { + mutex_enter(&dn->dn_mtx); + if (db->db_blkid > dn->dn_phys->dn_maxblkid && + db->db_blkid != DMU_SPILL_BLKID) + dn->dn_phys->dn_maxblkid = db->db_blkid; + mutex_exit(&dn->dn_mtx); + + if (dn->dn_type == DMU_OT_DNODE) { + i = 0; + while (i < db->db.db_size) { + dnode_phys_t *dnp = + (void *)(((char *)db->db.db_data) + i); + + i += DNODE_MIN_SIZE; + if (dnp->dn_type != DMU_OT_NONE) { + fill++; + i += dnp->dn_extra_slots * + DNODE_MIN_SIZE; + } + } + } else { + if (BP_IS_HOLE(bp)) { + fill = 0; + } else { + fill = 1; + } + } + } else { + blkptr_t *ibp = db->db.db_data; + ASSERT3U(db->db.db_size, ==, 1<dn_phys->dn_indblkshift); + for (i = db->db.db_size >> SPA_BLKPTRSHIFT; i > 0; i--, ibp++) { + if (BP_IS_HOLE(ibp)) + continue; + fill += BP_GET_FILL(ibp); + } + } + DB_DNODE_EXIT(db); + + if (!BP_IS_EMBEDDED(bp)) + bp->blk_fill = fill; + + mutex_exit(&db->db_mtx); + + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + *db->db_blkptr = *bp; + rw_exit(&dn->dn_struct_rwlock); +} + +/* ARGSUSED */ +/* + * This function gets called just prior to running through the compression + * stage of the zio pipeline. If we're an indirect block comprised of only + * holes, then we want this indirect to be compressed away to a hole. In + * order to do that we must zero out any information about the holes that + * this indirect points to prior to before we try to compress it. + */ +static void +dbuf_write_children_ready(zio_t *zio, arc_buf_t *buf, void *vdb) +{ + dmu_buf_impl_t *db = vdb; + dnode_t *dn; + blkptr_t *bp; + unsigned int epbs, i; + + ASSERT3U(db->db_level, >, 0); + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + ASSERT3U(epbs, <, 31); + + /* Determine if all our children are holes */ + for (i = 0, bp = db->db.db_data; i < 1ULL << epbs; i++, bp++) { + if (!BP_IS_HOLE(bp)) + break; + } + + /* + * If all the children are holes, then zero them all out so that + * we may get compressed away. + */ + if (i == 1ULL << epbs) { + /* + * We only found holes. Grab the rwlock to prevent + * anybody from reading the blocks we're about to + * zero out. + */ + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + bzero(db->db.db_data, db->db.db_size); + rw_exit(&dn->dn_struct_rwlock); + } + DB_DNODE_EXIT(db); +} + +/* + * The SPA will call this callback several times for each zio - once + * for every physical child i/o (zio->io_phys_children times). This + * allows the DMU to monitor the progress of each logical i/o. For example, + * there may be 2 copies of an indirect block, or many fragments of a RAID-Z + * block. There may be a long delay before all copies/fragments are completed, + * so this callback allows us to retire dirty space gradually, as the physical + * i/os complete. + */ +/* ARGSUSED */ +static void +dbuf_write_physdone(zio_t *zio, arc_buf_t *buf, void *arg) +{ + dmu_buf_impl_t *db = arg; + objset_t *os = db->db_objset; + dsl_pool_t *dp = dmu_objset_pool(os); + dbuf_dirty_record_t *dr; + int delta = 0; + + dr = db->db_data_pending; + ASSERT3U(dr->dr_txg, ==, zio->io_txg); + + /* + * The callback will be called io_phys_children times. Retire one + * portion of our dirty space each time we are called. Any rounding + * error will be cleaned up by dsl_pool_sync()'s call to + * dsl_pool_undirty_space(). + */ + delta = dr->dr_accounted / zio->io_phys_children; + dsl_pool_undirty_space(dp, delta, zio->io_txg); +} + +/* ARGSUSED */ +static void +dbuf_write_done(zio_t *zio, arc_buf_t *buf, void *vdb) +{ + dmu_buf_impl_t *db = vdb; + blkptr_t *bp_orig = &zio->io_bp_orig; + blkptr_t *bp = db->db_blkptr; + objset_t *os = db->db_objset; + dmu_tx_t *tx = os->os_synctx; + dbuf_dirty_record_t **drp, *dr; + + ASSERT0(zio->io_error); + ASSERT(db->db_blkptr == bp); + + /* + * For nopwrites and rewrites we ensure that the bp matches our + * original and bypass all the accounting. + */ + if (zio->io_flags & (ZIO_FLAG_IO_REWRITE | ZIO_FLAG_NOPWRITE)) { + ASSERT(BP_EQUAL(bp, bp_orig)); + } else { + dsl_dataset_t *ds = os->os_dsl_dataset; + (void) dsl_dataset_block_kill(ds, bp_orig, tx, B_TRUE); + dsl_dataset_block_born(ds, bp, tx); + } + + mutex_enter(&db->db_mtx); + + DBUF_VERIFY(db); + + drp = &db->db_last_dirty; + while ((dr = *drp) != db->db_data_pending) + drp = &dr->dr_next; + ASSERT(!list_link_active(&dr->dr_dirty_node)); + ASSERT(dr->dr_dbuf == db); + ASSERT(dr->dr_next == NULL); + *drp = dr->dr_next; + +#ifdef ZFS_DEBUG + if (db->db_blkid == DMU_SPILL_BLKID) { + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + ASSERT(dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR); + ASSERT(!(BP_IS_HOLE(db->db_blkptr)) && + db->db_blkptr == DN_SPILL_BLKPTR(dn->dn_phys)); + DB_DNODE_EXIT(db); + } +#endif + + if (db->db_level == 0) { + ASSERT(db->db_blkid != DMU_BONUS_BLKID); + ASSERT(dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN); + if (db->db_state != DB_NOFILL) { + if (dr->dt.dl.dr_data != db->db_buf) + arc_buf_destroy(dr->dt.dl.dr_data, db); + } + } else { + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + ASSERT(list_head(&dr->dt.di.dr_children) == NULL); + ASSERT3U(db->db.db_size, ==, 1 << dn->dn_phys->dn_indblkshift); + if (!BP_IS_HOLE(db->db_blkptr)) { + ASSERTV(int epbs = dn->dn_phys->dn_indblkshift - + SPA_BLKPTRSHIFT); + ASSERT3U(db->db_blkid, <=, + dn->dn_phys->dn_maxblkid >> (db->db_level * epbs)); + ASSERT3U(BP_GET_LSIZE(db->db_blkptr), ==, + db->db.db_size); + } + DB_DNODE_EXIT(db); + mutex_destroy(&dr->dt.di.dr_mtx); + list_destroy(&dr->dt.di.dr_children); + } + kmem_free(dr, sizeof (dbuf_dirty_record_t)); + + cv_broadcast(&db->db_changed); + ASSERT(db->db_dirtycnt > 0); + db->db_dirtycnt -= 1; + db->db_data_pending = NULL; + dbuf_rele_and_unlock(db, (void *)(uintptr_t)tx->tx_txg); +} + +static void +dbuf_write_nofill_ready(zio_t *zio) +{ + dbuf_write_ready(zio, NULL, zio->io_private); +} + +static void +dbuf_write_nofill_done(zio_t *zio) +{ + dbuf_write_done(zio, NULL, zio->io_private); +} + +static void +dbuf_write_override_ready(zio_t *zio) +{ + dbuf_dirty_record_t *dr = zio->io_private; + dmu_buf_impl_t *db = dr->dr_dbuf; + + dbuf_write_ready(zio, NULL, db); +} + +static void +dbuf_write_override_done(zio_t *zio) +{ + dbuf_dirty_record_t *dr = zio->io_private; + dmu_buf_impl_t *db = dr->dr_dbuf; + blkptr_t *obp = &dr->dt.dl.dr_overridden_by; + + mutex_enter(&db->db_mtx); + if (!BP_EQUAL(zio->io_bp, obp)) { + if (!BP_IS_HOLE(obp)) + dsl_free(spa_get_dsl(zio->io_spa), zio->io_txg, obp); + arc_release(dr->dt.dl.dr_data, db); + } + mutex_exit(&db->db_mtx); + + dbuf_write_done(zio, NULL, db); + + if (zio->io_abd != NULL) + abd_put(zio->io_abd); +} + +/* Issue I/O to commit a dirty buffer to disk. */ +static void +dbuf_write(dbuf_dirty_record_t *dr, arc_buf_t *data, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = dr->dr_dbuf; + dnode_t *dn; + objset_t *os; + dmu_buf_impl_t *parent = db->db_parent; + uint64_t txg = tx->tx_txg; + zbookmark_phys_t zb; + zio_prop_t zp; + zio_t *zio; + int wp_flag = 0; + + ASSERT(dmu_tx_is_syncing(tx)); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + os = dn->dn_objset; + + if (db->db_state != DB_NOFILL) { + if (db->db_level > 0 || dn->dn_type == DMU_OT_DNODE) { + /* + * Private object buffers are released here rather + * than in dbuf_dirty() since they are only modified + * in the syncing context and we don't want the + * overhead of making multiple copies of the data. + */ + if (BP_IS_HOLE(db->db_blkptr)) { + arc_buf_thaw(data); + } else { + dbuf_release_bp(db); + } + } + } + + if (parent != dn->dn_dbuf) { + /* Our parent is an indirect block. */ + /* We have a dirty parent that has been scheduled for write. */ + ASSERT(parent && parent->db_data_pending); + /* Our parent's buffer is one level closer to the dnode. */ + ASSERT(db->db_level == parent->db_level-1); + /* + * We're about to modify our parent's db_data by modifying + * our block pointer, so the parent must be released. + */ + ASSERT(arc_released(parent->db_buf)); + zio = parent->db_data_pending->dr_zio; + } else { + /* Our parent is the dnode itself. */ + ASSERT((db->db_level == dn->dn_phys->dn_nlevels-1 && + db->db_blkid != DMU_SPILL_BLKID) || + (db->db_blkid == DMU_SPILL_BLKID && db->db_level == 0)); + if (db->db_blkid != DMU_SPILL_BLKID) + ASSERT3P(db->db_blkptr, ==, + &dn->dn_phys->dn_blkptr[db->db_blkid]); + zio = dn->dn_zio; + } + + ASSERT(db->db_level == 0 || data == db->db_buf); + ASSERT3U(db->db_blkptr->blk_birth, <=, txg); + ASSERT(zio); + + SET_BOOKMARK(&zb, os->os_dsl_dataset ? + os->os_dsl_dataset->ds_object : DMU_META_OBJSET, + db->db.db_object, db->db_level, db->db_blkid); + + if (db->db_blkid == DMU_SPILL_BLKID) + wp_flag = WP_SPILL; + wp_flag |= (db->db_state == DB_NOFILL) ? WP_NOFILL : 0; + + dmu_write_policy(os, dn, db->db_level, wp_flag, &zp); + DB_DNODE_EXIT(db); + + /* + * We copy the blkptr now (rather than when we instantiate the dirty + * record), because its value can change between open context and + * syncing context. We do not need to hold dn_struct_rwlock to read + * db_blkptr because we are in syncing context. + */ + dr->dr_bp_copy = *db->db_blkptr; + + if (db->db_level == 0 && + dr->dt.dl.dr_override_state == DR_OVERRIDDEN) { + /* + * The BP for this block has been provided by open context + * (by dmu_sync() or dmu_buf_write_embedded()). + */ + abd_t *contents = (data != NULL) ? + abd_get_from_buf(data->b_data, arc_buf_size(data)) : NULL; + + dr->dr_zio = zio_write(zio, os->os_spa, txg, + &dr->dr_bp_copy, contents, db->db.db_size, db->db.db_size, + &zp, dbuf_write_override_ready, NULL, NULL, + dbuf_write_override_done, + dr, ZIO_PRIORITY_ASYNC_WRITE, ZIO_FLAG_MUSTSUCCEED, &zb); + mutex_enter(&db->db_mtx); + dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; + zio_write_override(dr->dr_zio, &dr->dt.dl.dr_overridden_by, + dr->dt.dl.dr_copies, dr->dt.dl.dr_nopwrite); + mutex_exit(&db->db_mtx); + } else if (db->db_state == DB_NOFILL) { + ASSERT(zp.zp_checksum == ZIO_CHECKSUM_OFF || + zp.zp_checksum == ZIO_CHECKSUM_NOPARITY); + dr->dr_zio = zio_write(zio, os->os_spa, txg, + &dr->dr_bp_copy, NULL, db->db.db_size, db->db.db_size, &zp, + dbuf_write_nofill_ready, NULL, NULL, + dbuf_write_nofill_done, db, + ZIO_PRIORITY_ASYNC_WRITE, + ZIO_FLAG_MUSTSUCCEED | ZIO_FLAG_NODATA, &zb); + } else { + arc_done_func_t *children_ready_cb = NULL; + ASSERT(arc_released(data)); + + /* + * For indirect blocks, we want to setup the children + * ready callback so that we can properly handle an indirect + * block that only contains holes. + */ + if (db->db_level != 0) + children_ready_cb = dbuf_write_children_ready; + + dr->dr_zio = arc_write(zio, os->os_spa, txg, + &dr->dr_bp_copy, data, DBUF_IS_L2CACHEABLE(db), + &zp, dbuf_write_ready, + children_ready_cb, dbuf_write_physdone, + dbuf_write_done, db, ZIO_PRIORITY_ASYNC_WRITE, + ZIO_FLAG_MUSTSUCCEED, &zb); + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dbuf_find); +EXPORT_SYMBOL(dbuf_is_metadata); +EXPORT_SYMBOL(dbuf_destroy); +EXPORT_SYMBOL(dbuf_loan_arcbuf); +EXPORT_SYMBOL(dbuf_whichblock); +EXPORT_SYMBOL(dbuf_read); +EXPORT_SYMBOL(dbuf_unoverride); +EXPORT_SYMBOL(dbuf_free_range); +EXPORT_SYMBOL(dbuf_new_size); +EXPORT_SYMBOL(dbuf_release_bp); +EXPORT_SYMBOL(dbuf_dirty); +EXPORT_SYMBOL(dmu_buf_will_dirty); +EXPORT_SYMBOL(dmu_buf_will_not_fill); +EXPORT_SYMBOL(dmu_buf_will_fill); +EXPORT_SYMBOL(dmu_buf_fill_done); +EXPORT_SYMBOL(dmu_buf_rele); +EXPORT_SYMBOL(dbuf_assign_arcbuf); +EXPORT_SYMBOL(dbuf_prefetch); +EXPORT_SYMBOL(dbuf_hold_impl); +EXPORT_SYMBOL(dbuf_hold); +EXPORT_SYMBOL(dbuf_hold_level); +EXPORT_SYMBOL(dbuf_create_bonus); +EXPORT_SYMBOL(dbuf_spill_set_blksz); +EXPORT_SYMBOL(dbuf_rm_spill); +EXPORT_SYMBOL(dbuf_add_ref); +EXPORT_SYMBOL(dbuf_rele); +EXPORT_SYMBOL(dbuf_rele_and_unlock); +EXPORT_SYMBOL(dbuf_refcount); +EXPORT_SYMBOL(dbuf_sync_list); +EXPORT_SYMBOL(dmu_buf_set_user); +EXPORT_SYMBOL(dmu_buf_set_user_ie); +EXPORT_SYMBOL(dmu_buf_get_user); +EXPORT_SYMBOL(dmu_buf_get_blkptr); + +/* BEGIN CSTYLED */ +module_param(dbuf_cache_max_bytes, ulong, 0644); +MODULE_PARM_DESC(dbuf_cache_max_bytes, + "Maximum size in bytes of the dbuf cache."); + +module_param(dbuf_cache_hiwater_pct, uint, 0644); +MODULE_PARM_DESC(dbuf_cache_hiwater_pct, + "Percentage over dbuf_cache_max_bytes when dbufs must be evicted " + "directly."); + +module_param(dbuf_cache_lowater_pct, uint, 0644); +MODULE_PARM_DESC(dbuf_cache_lowater_pct, + "Percentage below dbuf_cache_max_bytes when the evict thread stops " + "evicting dbufs."); + +module_param(dbuf_cache_max_shift, int, 0644); +MODULE_PARM_DESC(dbuf_cache_max_shift, + "Cap the size of the dbuf cache to a log2 fraction of arc size."); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dbuf_stats.c +++ linux-aws-4.15.0/zfs/module/zfs/dbuf_stats.c @@ -0,0 +1,230 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#include +#include +#include + +/* + * Calculate the index of the arc header for the state, disabled by default. + */ +int zfs_dbuf_state_index = 0; + +/* + * ========================================================================== + * Dbuf Hash Read Routines + * ========================================================================== + */ +typedef struct dbuf_stats_t { + kmutex_t lock; + kstat_t *kstat; + dbuf_hash_table_t *hash; + int idx; +} dbuf_stats_t; + +static dbuf_stats_t dbuf_stats_hash_table; + +static int +dbuf_stats_hash_table_headers(char *buf, size_t size) +{ + (void) snprintf(buf, size, + "%-88s | %-124s | %s\n" + "%-16s %-8s %-8s %-8s %-8s %-8s %-8s %-5s %-5s %5s | " + "%-5s %-5s %-8s %-6s %-8s %-12s " + "%-6s %-6s %-6s %-6s %-6s %-8s %-8s %-8s %-5s | " + "%-6s %-6s %-8s %-8s %-6s %-6s %-5s %-8s %-8s\n", + "dbuf", "arcbuf", "dnode", "pool", "objset", "object", "level", + "blkid", "offset", "dbsize", "meta", "state", "dbholds", "list", + "atype", "flags", "count", "asize", "access", + "mru", "gmru", "mfu", "gmfu", "l2", "l2_dattr", "l2_asize", + "l2_comp", "aholds", "dtype", "btype", "data_bs", "meta_bs", + "bsize", "lvls", "dholds", "blocks", "dsize"); + + return (0); +} + +int +__dbuf_stats_hash_table_data(char *buf, size_t size, dmu_buf_impl_t *db) +{ + arc_buf_info_t abi = { 0 }; + dmu_object_info_t doi = { 0 }; + dnode_t *dn = DB_DNODE(db); + size_t nwritten; + + if (db->db_buf) + arc_buf_info(db->db_buf, &abi, zfs_dbuf_state_index); + + __dmu_object_info_from_dnode(dn, &doi); + + nwritten = snprintf(buf, size, + "%-16s %-8llu %-8lld %-8lld %-8lld %-8llu %-8llu %-5d %-5d %-5lu | " + "%-5d %-5d 0x%-6x %-6lu %-8llu %-12llu " + "%-6lu %-6lu %-6lu %-6lu %-6lu %-8llu %-8llu %-8d %-5lu | " + "%-6d %-6d %-8lu %-8lu %-6llu %-6lu %-5lu %-8llu %-8llu\n", + /* dmu_buf_impl_t */ + spa_name(dn->dn_objset->os_spa), + (u_longlong_t)dmu_objset_id(db->db_objset), + (longlong_t)db->db.db_object, + (longlong_t)db->db_level, + (longlong_t)db->db_blkid, + (u_longlong_t)db->db.db_offset, + (u_longlong_t)db->db.db_size, + !!dbuf_is_metadata(db), + db->db_state, + (ulong_t)refcount_count(&db->db_holds), + /* arc_buf_info_t */ + abi.abi_state_type, + abi.abi_state_contents, + abi.abi_flags, + (ulong_t)abi.abi_bufcnt, + (u_longlong_t)abi.abi_size, + (u_longlong_t)abi.abi_access, + (ulong_t)abi.abi_mru_hits, + (ulong_t)abi.abi_mru_ghost_hits, + (ulong_t)abi.abi_mfu_hits, + (ulong_t)abi.abi_mfu_ghost_hits, + (ulong_t)abi.abi_l2arc_hits, + (u_longlong_t)abi.abi_l2arc_dattr, + (u_longlong_t)abi.abi_l2arc_asize, + abi.abi_l2arc_compress, + (ulong_t)abi.abi_holds, + /* dmu_object_info_t */ + doi.doi_type, + doi.doi_bonus_type, + (ulong_t)doi.doi_data_block_size, + (ulong_t)doi.doi_metadata_block_size, + (u_longlong_t)doi.doi_bonus_size, + (ulong_t)doi.doi_indirection, + (ulong_t)refcount_count(&dn->dn_holds), + (u_longlong_t)doi.doi_fill_count, + (u_longlong_t)doi.doi_max_offset); + + if (nwritten >= size) + return (size); + + return (nwritten + 1); +} + +static int +dbuf_stats_hash_table_data(char *buf, size_t size, void *data) +{ + dbuf_stats_t *dsh = (dbuf_stats_t *)data; + dbuf_hash_table_t *h = dsh->hash; + dmu_buf_impl_t *db; + int length, error = 0; + + ASSERT3S(dsh->idx, >=, 0); + ASSERT3S(dsh->idx, <=, h->hash_table_mask); + memset(buf, 0, size); + + mutex_enter(DBUF_HASH_MUTEX(h, dsh->idx)); + for (db = h->hash_table[dsh->idx]; db != NULL; db = db->db_hash_next) { + /* + * Returning ENOMEM will cause the data and header functions + * to be called with a larger scratch buffers. + */ + if (size < 512) { + error = ENOMEM; + break; + } + + mutex_enter(&db->db_mtx); + + if (db->db_state != DB_EVICTING) { + length = __dbuf_stats_hash_table_data(buf, size, db); + buf += length; + size -= length; + } + + mutex_exit(&db->db_mtx); + } + mutex_exit(DBUF_HASH_MUTEX(h, dsh->idx)); + + return (error); +} + +static void * +dbuf_stats_hash_table_addr(kstat_t *ksp, loff_t n) +{ + dbuf_stats_t *dsh = ksp->ks_private; + + ASSERT(MUTEX_HELD(&dsh->lock)); + + if (n <= dsh->hash->hash_table_mask) { + dsh->idx = n; + return (dsh); + } + + return (NULL); +} + +static void +dbuf_stats_hash_table_init(dbuf_hash_table_t *hash) +{ + dbuf_stats_t *dsh = &dbuf_stats_hash_table; + kstat_t *ksp; + + mutex_init(&dsh->lock, NULL, MUTEX_DEFAULT, NULL); + dsh->hash = hash; + + ksp = kstat_create("zfs", 0, "dbufs", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + dsh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &dsh->lock; + ksp->ks_ndata = UINT32_MAX; + ksp->ks_private = dsh; + kstat_set_raw_ops(ksp, dbuf_stats_hash_table_headers, + dbuf_stats_hash_table_data, dbuf_stats_hash_table_addr); + kstat_install(ksp); + } +} + +static void +dbuf_stats_hash_table_destroy(void) +{ + dbuf_stats_t *dsh = &dbuf_stats_hash_table; + kstat_t *ksp; + + ksp = dsh->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_destroy(&dsh->lock); +} + +void +dbuf_stats_init(dbuf_hash_table_t *hash) +{ + dbuf_stats_hash_table_init(hash); +} + +void +dbuf_stats_destroy(void) +{ + dbuf_stats_hash_table_destroy(); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_dbuf_state_index, int, 0644); +MODULE_PARM_DESC(zfs_dbuf_state_index, "Calculate arc header index"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/ddt.c +++ linux-aws-4.15.0/zfs/module/zfs/ddt.c @@ -0,0 +1,1254 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static kmem_cache_t *ddt_cache; +static kmem_cache_t *ddt_entry_cache; + +/* + * Enable/disable prefetching of dedup-ed blocks which are going to be freed. + */ +int zfs_dedup_prefetch = 0; + +static const ddt_ops_t *ddt_ops[DDT_TYPES] = { + &ddt_zap_ops, +}; + +static const char *ddt_class_name[DDT_CLASSES] = { + "ditto", + "duplicate", + "unique", +}; + +static void +ddt_object_create(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + dmu_tx_t *tx) +{ + spa_t *spa = ddt->ddt_spa; + objset_t *os = ddt->ddt_os; + uint64_t *objectp = &ddt->ddt_object[type][class]; + boolean_t prehash = zio_checksum_table[ddt->ddt_checksum].ci_flags & + ZCHECKSUM_FLAG_DEDUP; + char name[DDT_NAMELEN]; + + ddt_object_name(ddt, type, class, name); + + ASSERT(*objectp == 0); + VERIFY(ddt_ops[type]->ddt_op_create(os, objectp, tx, prehash) == 0); + ASSERT(*objectp != 0); + + VERIFY(zap_add(os, DMU_POOL_DIRECTORY_OBJECT, name, + sizeof (uint64_t), 1, objectp, tx) == 0); + + VERIFY(zap_add(os, spa->spa_ddt_stat_object, name, + sizeof (uint64_t), sizeof (ddt_histogram_t) / sizeof (uint64_t), + &ddt->ddt_histogram[type][class], tx) == 0); +} + +static void +ddt_object_destroy(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + dmu_tx_t *tx) +{ + spa_t *spa = ddt->ddt_spa; + objset_t *os = ddt->ddt_os; + uint64_t *objectp = &ddt->ddt_object[type][class]; + uint64_t count; + char name[DDT_NAMELEN]; + + ddt_object_name(ddt, type, class, name); + + ASSERT(*objectp != 0); + ASSERT(ddt_histogram_empty(&ddt->ddt_histogram[type][class])); + VERIFY(ddt_object_count(ddt, type, class, &count) == 0 && count == 0); + VERIFY(zap_remove(os, DMU_POOL_DIRECTORY_OBJECT, name, tx) == 0); + VERIFY(zap_remove(os, spa->spa_ddt_stat_object, name, tx) == 0); + VERIFY(ddt_ops[type]->ddt_op_destroy(os, *objectp, tx) == 0); + bzero(&ddt->ddt_object_stats[type][class], sizeof (ddt_object_t)); + + *objectp = 0; +} + +static int +ddt_object_load(ddt_t *ddt, enum ddt_type type, enum ddt_class class) +{ + ddt_object_t *ddo = &ddt->ddt_object_stats[type][class]; + dmu_object_info_t doi; + uint64_t count; + char name[DDT_NAMELEN]; + int error; + + ddt_object_name(ddt, type, class, name); + + error = zap_lookup(ddt->ddt_os, DMU_POOL_DIRECTORY_OBJECT, name, + sizeof (uint64_t), 1, &ddt->ddt_object[type][class]); + if (error != 0) + return (error); + + error = zap_lookup(ddt->ddt_os, ddt->ddt_spa->spa_ddt_stat_object, name, + sizeof (uint64_t), sizeof (ddt_histogram_t) / sizeof (uint64_t), + &ddt->ddt_histogram[type][class]); + if (error != 0) + return (error); + + /* + * Seed the cached statistics. + */ + error = ddt_object_info(ddt, type, class, &doi); + if (error) + return (error); + + error = ddt_object_count(ddt, type, class, &count); + if (error) + return (error); + + ddo->ddo_count = count; + ddo->ddo_dspace = doi.doi_physical_blocks_512 << 9; + ddo->ddo_mspace = doi.doi_fill_count * doi.doi_data_block_size; + + return (0); +} + +static void +ddt_object_sync(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + dmu_tx_t *tx) +{ + ddt_object_t *ddo = &ddt->ddt_object_stats[type][class]; + dmu_object_info_t doi; + uint64_t count; + char name[DDT_NAMELEN]; + + ddt_object_name(ddt, type, class, name); + + VERIFY(zap_update(ddt->ddt_os, ddt->ddt_spa->spa_ddt_stat_object, name, + sizeof (uint64_t), sizeof (ddt_histogram_t) / sizeof (uint64_t), + &ddt->ddt_histogram[type][class], tx) == 0); + + /* + * Cache DDT statistics; this is the only time they'll change. + */ + VERIFY(ddt_object_info(ddt, type, class, &doi) == 0); + VERIFY(ddt_object_count(ddt, type, class, &count) == 0); + + ddo->ddo_count = count; + ddo->ddo_dspace = doi.doi_physical_blocks_512 << 9; + ddo->ddo_mspace = doi.doi_fill_count * doi.doi_data_block_size; +} + +static int +ddt_object_lookup(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + ddt_entry_t *dde) +{ + if (!ddt_object_exists(ddt, type, class)) + return (SET_ERROR(ENOENT)); + + return (ddt_ops[type]->ddt_op_lookup(ddt->ddt_os, + ddt->ddt_object[type][class], dde)); +} + +static void +ddt_object_prefetch(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + ddt_entry_t *dde) +{ + if (!ddt_object_exists(ddt, type, class)) + return; + + ddt_ops[type]->ddt_op_prefetch(ddt->ddt_os, + ddt->ddt_object[type][class], dde); +} + +int +ddt_object_update(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + ddt_entry_t *dde, dmu_tx_t *tx) +{ + ASSERT(ddt_object_exists(ddt, type, class)); + + return (ddt_ops[type]->ddt_op_update(ddt->ddt_os, + ddt->ddt_object[type][class], dde, tx)); +} + +static int +ddt_object_remove(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + ddt_entry_t *dde, dmu_tx_t *tx) +{ + ASSERT(ddt_object_exists(ddt, type, class)); + + return (ddt_ops[type]->ddt_op_remove(ddt->ddt_os, + ddt->ddt_object[type][class], dde, tx)); +} + +int +ddt_object_walk(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + uint64_t *walk, ddt_entry_t *dde) +{ + ASSERT(ddt_object_exists(ddt, type, class)); + + return (ddt_ops[type]->ddt_op_walk(ddt->ddt_os, + ddt->ddt_object[type][class], dde, walk)); +} + +int +ddt_object_count(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + uint64_t *count) +{ + ASSERT(ddt_object_exists(ddt, type, class)); + + return (ddt_ops[type]->ddt_op_count(ddt->ddt_os, + ddt->ddt_object[type][class], count)); +} + +int +ddt_object_info(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + dmu_object_info_t *doi) +{ + if (!ddt_object_exists(ddt, type, class)) + return (SET_ERROR(ENOENT)); + + return (dmu_object_info(ddt->ddt_os, ddt->ddt_object[type][class], + doi)); +} + +boolean_t +ddt_object_exists(ddt_t *ddt, enum ddt_type type, enum ddt_class class) +{ + return (!!ddt->ddt_object[type][class]); +} + +void +ddt_object_name(ddt_t *ddt, enum ddt_type type, enum ddt_class class, + char *name) +{ + (void) sprintf(name, DMU_POOL_DDT, + zio_checksum_table[ddt->ddt_checksum].ci_name, + ddt_ops[type]->ddt_op_name, ddt_class_name[class]); +} + +void +ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp, uint64_t txg) +{ + int d; + ASSERT(txg != 0); + + for (d = 0; d < SPA_DVAS_PER_BP; d++) + bp->blk_dva[d] = ddp->ddp_dva[d]; + BP_SET_BIRTH(bp, txg, ddp->ddp_phys_birth); +} + +void +ddt_bp_create(enum zio_checksum checksum, + const ddt_key_t *ddk, const ddt_phys_t *ddp, blkptr_t *bp) +{ + BP_ZERO(bp); + + if (ddp != NULL) + ddt_bp_fill(ddp, bp, ddp->ddp_phys_birth); + + bp->blk_cksum = ddk->ddk_cksum; + bp->blk_fill = 1; + + BP_SET_LSIZE(bp, DDK_GET_LSIZE(ddk)); + BP_SET_PSIZE(bp, DDK_GET_PSIZE(ddk)); + BP_SET_COMPRESS(bp, DDK_GET_COMPRESS(ddk)); + BP_SET_CHECKSUM(bp, checksum); + BP_SET_TYPE(bp, DMU_OT_DEDUP); + BP_SET_LEVEL(bp, 0); + BP_SET_DEDUP(bp, 0); + BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER); +} + +void +ddt_key_fill(ddt_key_t *ddk, const blkptr_t *bp) +{ + ddk->ddk_cksum = bp->blk_cksum; + ddk->ddk_prop = 0; + + DDK_SET_LSIZE(ddk, BP_GET_LSIZE(bp)); + DDK_SET_PSIZE(ddk, BP_GET_PSIZE(bp)); + DDK_SET_COMPRESS(ddk, BP_GET_COMPRESS(bp)); +} + +void +ddt_phys_fill(ddt_phys_t *ddp, const blkptr_t *bp) +{ + int d; + ASSERT(ddp->ddp_phys_birth == 0); + + for (d = 0; d < SPA_DVAS_PER_BP; d++) + ddp->ddp_dva[d] = bp->blk_dva[d]; + ddp->ddp_phys_birth = BP_PHYSICAL_BIRTH(bp); +} + +void +ddt_phys_clear(ddt_phys_t *ddp) +{ + bzero(ddp, sizeof (*ddp)); +} + +void +ddt_phys_addref(ddt_phys_t *ddp) +{ + ddp->ddp_refcnt++; +} + +void +ddt_phys_decref(ddt_phys_t *ddp) +{ + if (ddp) { + ASSERT(ddp->ddp_refcnt > 0); + ddp->ddp_refcnt--; + } +} + +void +ddt_phys_free(ddt_t *ddt, ddt_key_t *ddk, ddt_phys_t *ddp, uint64_t txg) +{ + blkptr_t blk; + + ddt_bp_create(ddt->ddt_checksum, ddk, ddp, &blk); + ddt_phys_clear(ddp); + zio_free(ddt->ddt_spa, txg, &blk); +} + +ddt_phys_t * +ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp) +{ + ddt_phys_t *ddp = (ddt_phys_t *)dde->dde_phys; + int p; + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) { + if (DVA_EQUAL(BP_IDENTITY(bp), &ddp->ddp_dva[0]) && + BP_PHYSICAL_BIRTH(bp) == ddp->ddp_phys_birth) + return (ddp); + } + return (NULL); +} + +uint64_t +ddt_phys_total_refcnt(const ddt_entry_t *dde) +{ + uint64_t refcnt = 0; + int p; + + for (p = DDT_PHYS_SINGLE; p <= DDT_PHYS_TRIPLE; p++) + refcnt += dde->dde_phys[p].ddp_refcnt; + + return (refcnt); +} + +static void +ddt_stat_generate(ddt_t *ddt, ddt_entry_t *dde, ddt_stat_t *dds) +{ + spa_t *spa = ddt->ddt_spa; + ddt_phys_t *ddp = dde->dde_phys; + ddt_key_t *ddk = &dde->dde_key; + uint64_t lsize = DDK_GET_LSIZE(ddk); + uint64_t psize = DDK_GET_PSIZE(ddk); + int p, d; + + bzero(dds, sizeof (*dds)); + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) { + uint64_t dsize = 0; + uint64_t refcnt = ddp->ddp_refcnt; + + if (ddp->ddp_phys_birth == 0) + continue; + + for (d = 0; d < SPA_DVAS_PER_BP; d++) + dsize += dva_get_dsize_sync(spa, &ddp->ddp_dva[d]); + + dds->dds_blocks += 1; + dds->dds_lsize += lsize; + dds->dds_psize += psize; + dds->dds_dsize += dsize; + + dds->dds_ref_blocks += refcnt; + dds->dds_ref_lsize += lsize * refcnt; + dds->dds_ref_psize += psize * refcnt; + dds->dds_ref_dsize += dsize * refcnt; + } +} + +void +ddt_stat_add(ddt_stat_t *dst, const ddt_stat_t *src, uint64_t neg) +{ + const uint64_t *s = (const uint64_t *)src; + uint64_t *d = (uint64_t *)dst; + uint64_t *d_end = (uint64_t *)(dst + 1); + + ASSERT(neg == 0 || neg == -1ULL); /* add or subtract */ + + while (d < d_end) + *d++ += (*s++ ^ neg) - neg; +} + +static void +ddt_stat_update(ddt_t *ddt, ddt_entry_t *dde, uint64_t neg) +{ + ddt_stat_t dds; + ddt_histogram_t *ddh; + int bucket; + + ddt_stat_generate(ddt, dde, &dds); + + bucket = highbit64(dds.dds_ref_blocks) - 1; + ASSERT(bucket >= 0); + + ddh = &ddt->ddt_histogram[dde->dde_type][dde->dde_class]; + + ddt_stat_add(&ddh->ddh_stat[bucket], &dds, neg); +} + +void +ddt_histogram_add(ddt_histogram_t *dst, const ddt_histogram_t *src) +{ + int h; + + for (h = 0; h < 64; h++) + ddt_stat_add(&dst->ddh_stat[h], &src->ddh_stat[h], 0); +} + +void +ddt_histogram_stat(ddt_stat_t *dds, const ddt_histogram_t *ddh) +{ + int h; + + bzero(dds, sizeof (*dds)); + + for (h = 0; h < 64; h++) + ddt_stat_add(dds, &ddh->ddh_stat[h], 0); +} + +boolean_t +ddt_histogram_empty(const ddt_histogram_t *ddh) +{ + const uint64_t *s = (const uint64_t *)ddh; + const uint64_t *s_end = (const uint64_t *)(ddh + 1); + + while (s < s_end) + if (*s++ != 0) + return (B_FALSE); + + return (B_TRUE); +} + +void +ddt_get_dedup_object_stats(spa_t *spa, ddt_object_t *ddo_total) +{ + enum zio_checksum c; + enum ddt_type type; + enum ddt_class class; + + /* Sum the statistics we cached in ddt_object_sync(). */ + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) { + ddt_t *ddt = spa->spa_ddt[c]; + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; + class++) { + ddt_object_t *ddo = + &ddt->ddt_object_stats[type][class]; + ddo_total->ddo_count += ddo->ddo_count; + ddo_total->ddo_dspace += ddo->ddo_dspace; + ddo_total->ddo_mspace += ddo->ddo_mspace; + } + } + } + + /* ... and compute the averages. */ + if (ddo_total->ddo_count != 0) { + ddo_total->ddo_dspace /= ddo_total->ddo_count; + ddo_total->ddo_mspace /= ddo_total->ddo_count; + } +} + +void +ddt_get_dedup_histogram(spa_t *spa, ddt_histogram_t *ddh) +{ + enum zio_checksum c; + enum ddt_type type; + enum ddt_class class; + + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) { + ddt_t *ddt = spa->spa_ddt[c]; + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; + class++) { + ddt_histogram_add(ddh, + &ddt->ddt_histogram_cache[type][class]); + } + } + } +} + +void +ddt_get_dedup_stats(spa_t *spa, ddt_stat_t *dds_total) +{ + ddt_histogram_t *ddh_total; + + ddh_total = kmem_zalloc(sizeof (ddt_histogram_t), KM_SLEEP); + ddt_get_dedup_histogram(spa, ddh_total); + ddt_histogram_stat(dds_total, ddh_total); + kmem_free(ddh_total, sizeof (ddt_histogram_t)); +} + +uint64_t +ddt_get_dedup_dspace(spa_t *spa) +{ + ddt_stat_t dds_total; + + if (spa->spa_dedup_dspace != ~0ULL) + return (spa->spa_dedup_dspace); + + bzero(&dds_total, sizeof (ddt_stat_t)); + + /* Calculate and cache the stats */ + ddt_get_dedup_stats(spa, &dds_total); + spa->spa_dedup_dspace = dds_total.dds_ref_dsize - dds_total.dds_dsize; + return (spa->spa_dedup_dspace); +} + +uint64_t +ddt_get_pool_dedup_ratio(spa_t *spa) +{ + ddt_stat_t dds_total = { 0 }; + + ddt_get_dedup_stats(spa, &dds_total); + if (dds_total.dds_dsize == 0) + return (100); + + return (dds_total.dds_ref_dsize * 100 / dds_total.dds_dsize); +} + +int +ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde, ddt_phys_t *ddp_willref) +{ + spa_t *spa = ddt->ddt_spa; + uint64_t total_refcnt = 0; + uint64_t ditto = spa->spa_dedup_ditto; + int total_copies = 0; + int desired_copies = 0; + int p; + + for (p = DDT_PHYS_SINGLE; p <= DDT_PHYS_TRIPLE; p++) { + ddt_phys_t *ddp = &dde->dde_phys[p]; + zio_t *zio = dde->dde_lead_zio[p]; + uint64_t refcnt = ddp->ddp_refcnt; /* committed refs */ + if (zio != NULL) + refcnt += zio->io_parent_count; /* pending refs */ + if (ddp == ddp_willref) + refcnt++; /* caller's ref */ + if (refcnt != 0) { + total_refcnt += refcnt; + total_copies += p; + } + } + + if (ditto == 0 || ditto > UINT32_MAX) + ditto = UINT32_MAX; + + if (total_refcnt >= 1) + desired_copies++; + if (total_refcnt >= ditto) + desired_copies++; + if (total_refcnt >= ditto * ditto) + desired_copies++; + + return (MAX(desired_copies, total_copies) - total_copies); +} + +int +ddt_ditto_copies_present(ddt_entry_t *dde) +{ + ddt_phys_t *ddp = &dde->dde_phys[DDT_PHYS_DITTO]; + dva_t *dva = ddp->ddp_dva; + int copies = 0 - DVA_GET_GANG(dva); + int d; + + for (d = 0; d < SPA_DVAS_PER_BP; d++, dva++) + if (DVA_IS_VALID(dva)) + copies++; + + ASSERT(copies >= 0 && copies < SPA_DVAS_PER_BP); + + return (copies); +} + +size_t +ddt_compress(void *src, uchar_t *dst, size_t s_len, size_t d_len) +{ + uchar_t *version = dst++; + int cpfunc = ZIO_COMPRESS_ZLE; + zio_compress_info_t *ci = &zio_compress_table[cpfunc]; + size_t c_len; + + ASSERT(d_len >= s_len + 1); /* no compression plus version byte */ + + c_len = ci->ci_compress(src, dst, s_len, d_len - 1, ci->ci_level); + + if (c_len == s_len) { + cpfunc = ZIO_COMPRESS_OFF; + bcopy(src, dst, s_len); + } + + *version = cpfunc; + /* CONSTCOND */ + if (ZFS_HOST_BYTEORDER) + *version |= DDT_COMPRESS_BYTEORDER_MASK; + + return (c_len + 1); +} + +void +ddt_decompress(uchar_t *src, void *dst, size_t s_len, size_t d_len) +{ + uchar_t version = *src++; + int cpfunc = version & DDT_COMPRESS_FUNCTION_MASK; + zio_compress_info_t *ci = &zio_compress_table[cpfunc]; + + if (ci->ci_decompress != NULL) + (void) ci->ci_decompress(src, dst, s_len, d_len, ci->ci_level); + else + bcopy(src, dst, d_len); + + if (((version & DDT_COMPRESS_BYTEORDER_MASK) != 0) != + (ZFS_HOST_BYTEORDER != 0)) + byteswap_uint64_array(dst, d_len); +} + +ddt_t * +ddt_select_by_checksum(spa_t *spa, enum zio_checksum c) +{ + return (spa->spa_ddt[c]); +} + +ddt_t * +ddt_select(spa_t *spa, const blkptr_t *bp) +{ + return (spa->spa_ddt[BP_GET_CHECKSUM(bp)]); +} + +void +ddt_enter(ddt_t *ddt) +{ + mutex_enter(&ddt->ddt_lock); +} + +void +ddt_exit(ddt_t *ddt) +{ + mutex_exit(&ddt->ddt_lock); +} + +void +ddt_init(void) +{ + ddt_cache = kmem_cache_create("ddt_cache", + sizeof (ddt_t), 0, NULL, NULL, NULL, NULL, NULL, 0); + ddt_entry_cache = kmem_cache_create("ddt_entry_cache", + sizeof (ddt_entry_t), 0, NULL, NULL, NULL, NULL, NULL, 0); +} + +void +ddt_fini(void) +{ + kmem_cache_destroy(ddt_entry_cache); + kmem_cache_destroy(ddt_cache); +} + +static ddt_entry_t * +ddt_alloc(const ddt_key_t *ddk) +{ + ddt_entry_t *dde; + + dde = kmem_cache_alloc(ddt_entry_cache, KM_SLEEP); + bzero(dde, sizeof (ddt_entry_t)); + cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL); + + dde->dde_key = *ddk; + + return (dde); +} + +static void +ddt_free(ddt_entry_t *dde) +{ + int p; + + ASSERT(!dde->dde_loading); + + for (p = 0; p < DDT_PHYS_TYPES; p++) + ASSERT(dde->dde_lead_zio[p] == NULL); + + if (dde->dde_repair_abd != NULL) + abd_free(dde->dde_repair_abd); + + cv_destroy(&dde->dde_cv); + kmem_cache_free(ddt_entry_cache, dde); +} + +void +ddt_remove(ddt_t *ddt, ddt_entry_t *dde) +{ + ASSERT(MUTEX_HELD(&ddt->ddt_lock)); + + avl_remove(&ddt->ddt_tree, dde); + ddt_free(dde); +} + +ddt_entry_t * +ddt_lookup(ddt_t *ddt, const blkptr_t *bp, boolean_t add) +{ + ddt_entry_t *dde, dde_search; + enum ddt_type type; + enum ddt_class class; + avl_index_t where; + int error; + + ASSERT(MUTEX_HELD(&ddt->ddt_lock)); + + ddt_key_fill(&dde_search.dde_key, bp); + + dde = avl_find(&ddt->ddt_tree, &dde_search, &where); + if (dde == NULL) { + if (!add) + return (NULL); + dde = ddt_alloc(&dde_search.dde_key); + avl_insert(&ddt->ddt_tree, dde, where); + } + + while (dde->dde_loading) + cv_wait(&dde->dde_cv, &ddt->ddt_lock); + + if (dde->dde_loaded) + return (dde); + + dde->dde_loading = B_TRUE; + + ddt_exit(ddt); + + error = ENOENT; + + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; class++) { + error = ddt_object_lookup(ddt, type, class, dde); + if (error != ENOENT) + break; + } + if (error != ENOENT) + break; + } + + ASSERT(error == 0 || error == ENOENT); + + ddt_enter(ddt); + + ASSERT(dde->dde_loaded == B_FALSE); + ASSERT(dde->dde_loading == B_TRUE); + + dde->dde_type = type; /* will be DDT_TYPES if no entry found */ + dde->dde_class = class; /* will be DDT_CLASSES if no entry found */ + dde->dde_loaded = B_TRUE; + dde->dde_loading = B_FALSE; + + if (error == 0) + ddt_stat_update(ddt, dde, -1ULL); + + cv_broadcast(&dde->dde_cv); + + return (dde); +} + +void +ddt_prefetch(spa_t *spa, const blkptr_t *bp) +{ + ddt_t *ddt; + ddt_entry_t dde; + enum ddt_type type; + enum ddt_class class; + + if (!zfs_dedup_prefetch || bp == NULL || !BP_GET_DEDUP(bp)) + return; + + /* + * We only remove the DDT once all tables are empty and only + * prefetch dedup blocks when there are entries in the DDT. + * Thus no locking is required as the DDT can't disappear on us. + */ + ddt = ddt_select(spa, bp); + ddt_key_fill(&dde.dde_key, bp); + + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; class++) { + ddt_object_prefetch(ddt, type, class, &dde); + } + } +} + +/* + * Opaque struct used for ddt_key comparison + */ +#define DDT_KEY_CMP_LEN (sizeof (ddt_key_t) / sizeof (uint16_t)) + +typedef struct ddt_key_cmp { + uint16_t u16[DDT_KEY_CMP_LEN]; +} ddt_key_cmp_t; + +int +ddt_entry_compare(const void *x1, const void *x2) +{ + const ddt_entry_t *dde1 = x1; + const ddt_entry_t *dde2 = x2; + const ddt_key_cmp_t *k1 = (const ddt_key_cmp_t *)&dde1->dde_key; + const ddt_key_cmp_t *k2 = (const ddt_key_cmp_t *)&dde2->dde_key; + int32_t cmp = 0; + int i; + + for (i = 0; i < DDT_KEY_CMP_LEN; i++) { + cmp = (int32_t)k1->u16[i] - (int32_t)k2->u16[i]; + if (likely(cmp)) + break; + } + + return (AVL_ISIGN(cmp)); +} + +static ddt_t * +ddt_table_alloc(spa_t *spa, enum zio_checksum c) +{ + ddt_t *ddt; + + ddt = kmem_cache_alloc(ddt_cache, KM_SLEEP); + bzero(ddt, sizeof (ddt_t)); + + mutex_init(&ddt->ddt_lock, NULL, MUTEX_DEFAULT, NULL); + avl_create(&ddt->ddt_tree, ddt_entry_compare, + sizeof (ddt_entry_t), offsetof(ddt_entry_t, dde_node)); + avl_create(&ddt->ddt_repair_tree, ddt_entry_compare, + sizeof (ddt_entry_t), offsetof(ddt_entry_t, dde_node)); + ddt->ddt_checksum = c; + ddt->ddt_spa = spa; + ddt->ddt_os = spa->spa_meta_objset; + + return (ddt); +} + +static void +ddt_table_free(ddt_t *ddt) +{ + ASSERT(avl_numnodes(&ddt->ddt_tree) == 0); + ASSERT(avl_numnodes(&ddt->ddt_repair_tree) == 0); + avl_destroy(&ddt->ddt_tree); + avl_destroy(&ddt->ddt_repair_tree); + mutex_destroy(&ddt->ddt_lock); + kmem_cache_free(ddt_cache, ddt); +} + +void +ddt_create(spa_t *spa) +{ + enum zio_checksum c; + + spa->spa_dedup_checksum = ZIO_DEDUPCHECKSUM; + + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) + spa->spa_ddt[c] = ddt_table_alloc(spa, c); +} + +int +ddt_load(spa_t *spa) +{ + enum zio_checksum c; + enum ddt_type type; + enum ddt_class class; + int error; + + ddt_create(spa); + + error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_DDT_STATS, sizeof (uint64_t), 1, + &spa->spa_ddt_stat_object); + + if (error) + return (error == ENOENT ? 0 : error); + + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) { + ddt_t *ddt = spa->spa_ddt[c]; + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; + class++) { + error = ddt_object_load(ddt, type, class); + if (error != 0 && error != ENOENT) + return (error); + } + } + + /* + * Seed the cached histograms. + */ + bcopy(ddt->ddt_histogram, &ddt->ddt_histogram_cache, + sizeof (ddt->ddt_histogram)); + spa->spa_dedup_dspace = ~0ULL; + } + + return (0); +} + +void +ddt_unload(spa_t *spa) +{ + enum zio_checksum c; + + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) { + if (spa->spa_ddt[c]) { + ddt_table_free(spa->spa_ddt[c]); + spa->spa_ddt[c] = NULL; + } + } +} + +boolean_t +ddt_class_contains(spa_t *spa, enum ddt_class max_class, const blkptr_t *bp) +{ + ddt_t *ddt; + ddt_entry_t *dde; + enum ddt_type type; + enum ddt_class class; + + if (!BP_GET_DEDUP(bp)) + return (B_FALSE); + + if (max_class == DDT_CLASS_UNIQUE) + return (B_TRUE); + + ddt = spa->spa_ddt[BP_GET_CHECKSUM(bp)]; + dde = kmem_cache_alloc(ddt_entry_cache, KM_SLEEP); + + ddt_key_fill(&(dde->dde_key), bp); + + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class <= max_class; class++) { + if (ddt_object_lookup(ddt, type, class, dde) == 0) { + kmem_cache_free(ddt_entry_cache, dde); + return (B_TRUE); + } + } + } + + kmem_cache_free(ddt_entry_cache, dde); + return (B_FALSE); +} + +ddt_entry_t * +ddt_repair_start(ddt_t *ddt, const blkptr_t *bp) +{ + ddt_key_t ddk; + ddt_entry_t *dde; + enum ddt_type type; + enum ddt_class class; + + ddt_key_fill(&ddk, bp); + + dde = ddt_alloc(&ddk); + + for (type = 0; type < DDT_TYPES; type++) { + for (class = 0; class < DDT_CLASSES; class++) { + /* + * We can only do repair if there are multiple copies + * of the block. For anything in the UNIQUE class, + * there's definitely only one copy, so don't even try. + */ + if (class != DDT_CLASS_UNIQUE && + ddt_object_lookup(ddt, type, class, dde) == 0) + return (dde); + } + } + + bzero(dde->dde_phys, sizeof (dde->dde_phys)); + + return (dde); +} + +void +ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde) +{ + avl_index_t where; + + ddt_enter(ddt); + + if (dde->dde_repair_abd != NULL && spa_writeable(ddt->ddt_spa) && + avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL) + avl_insert(&ddt->ddt_repair_tree, dde, where); + else + ddt_free(dde); + + ddt_exit(ddt); +} + +static void +ddt_repair_entry_done(zio_t *zio) +{ + ddt_entry_t *rdde = zio->io_private; + + ddt_free(rdde); +} + +static void +ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio) +{ + ddt_phys_t *ddp = dde->dde_phys; + ddt_phys_t *rddp = rdde->dde_phys; + ddt_key_t *ddk = &dde->dde_key; + ddt_key_t *rddk = &rdde->dde_key; + zio_t *zio; + blkptr_t blk; + int p; + + zio = zio_null(rio, rio->io_spa, NULL, + ddt_repair_entry_done, rdde, rio->io_flags); + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++, rddp++) { + if (ddp->ddp_phys_birth == 0 || + ddp->ddp_phys_birth != rddp->ddp_phys_birth || + bcmp(ddp->ddp_dva, rddp->ddp_dva, sizeof (ddp->ddp_dva))) + continue; + ddt_bp_create(ddt->ddt_checksum, ddk, ddp, &blk); + zio_nowait(zio_rewrite(zio, zio->io_spa, 0, &blk, + rdde->dde_repair_abd, DDK_GET_PSIZE(rddk), NULL, NULL, + ZIO_PRIORITY_SYNC_WRITE, ZIO_DDT_CHILD_FLAGS(zio), NULL)); + } + + zio_nowait(zio); +} + +static void +ddt_repair_table(ddt_t *ddt, zio_t *rio) +{ + spa_t *spa = ddt->ddt_spa; + ddt_entry_t *dde, *rdde_next, *rdde; + avl_tree_t *t = &ddt->ddt_repair_tree; + blkptr_t blk; + + if (spa_sync_pass(spa) > 1) + return; + + ddt_enter(ddt); + for (rdde = avl_first(t); rdde != NULL; rdde = rdde_next) { + rdde_next = AVL_NEXT(t, rdde); + avl_remove(&ddt->ddt_repair_tree, rdde); + ddt_exit(ddt); + ddt_bp_create(ddt->ddt_checksum, &rdde->dde_key, NULL, &blk); + dde = ddt_repair_start(ddt, &blk); + ddt_repair_entry(ddt, dde, rdde, rio); + ddt_repair_done(ddt, dde); + ddt_enter(ddt); + } + ddt_exit(ddt); +} + +static void +ddt_sync_entry(ddt_t *ddt, ddt_entry_t *dde, dmu_tx_t *tx, uint64_t txg) +{ + dsl_pool_t *dp = ddt->ddt_spa->spa_dsl_pool; + ddt_phys_t *ddp = dde->dde_phys; + ddt_key_t *ddk = &dde->dde_key; + enum ddt_type otype = dde->dde_type; + enum ddt_type ntype = DDT_TYPE_CURRENT; + enum ddt_class oclass = dde->dde_class; + enum ddt_class nclass; + uint64_t total_refcnt = 0; + int p; + + ASSERT(dde->dde_loaded); + ASSERT(!dde->dde_loading); + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) { + ASSERT(dde->dde_lead_zio[p] == NULL); + if (ddp->ddp_phys_birth == 0) { + ASSERT(ddp->ddp_refcnt == 0); + continue; + } + if (p == DDT_PHYS_DITTO) { + if (ddt_ditto_copies_needed(ddt, dde, NULL) == 0) + ddt_phys_free(ddt, ddk, ddp, txg); + continue; + } + if (ddp->ddp_refcnt == 0) + ddt_phys_free(ddt, ddk, ddp, txg); + total_refcnt += ddp->ddp_refcnt; + } + + if (dde->dde_phys[DDT_PHYS_DITTO].ddp_phys_birth != 0) + nclass = DDT_CLASS_DITTO; + else if (total_refcnt > 1) + nclass = DDT_CLASS_DUPLICATE; + else + nclass = DDT_CLASS_UNIQUE; + + if (otype != DDT_TYPES && + (otype != ntype || oclass != nclass || total_refcnt == 0)) { + VERIFY(ddt_object_remove(ddt, otype, oclass, dde, tx) == 0); + ASSERT(ddt_object_lookup(ddt, otype, oclass, dde) == ENOENT); + } + + if (total_refcnt != 0) { + dde->dde_type = ntype; + dde->dde_class = nclass; + ddt_stat_update(ddt, dde, 0); + if (!ddt_object_exists(ddt, ntype, nclass)) + ddt_object_create(ddt, ntype, nclass, tx); + VERIFY(ddt_object_update(ddt, ntype, nclass, dde, tx) == 0); + + /* + * If the class changes, the order that we scan this bp + * changes. If it decreases, we could miss it, so + * scan it right now. (This covers both class changing + * while we are doing ddt_walk(), and when we are + * traversing.) + */ + if (nclass < oclass) { + dsl_scan_ddt_entry(dp->dp_scan, + ddt->ddt_checksum, dde, tx); + } + } +} + +static void +ddt_sync_table(ddt_t *ddt, dmu_tx_t *tx, uint64_t txg) +{ + spa_t *spa = ddt->ddt_spa; + ddt_entry_t *dde; + void *cookie = NULL; + enum ddt_type type; + enum ddt_class class; + + if (avl_numnodes(&ddt->ddt_tree) == 0) + return; + + ASSERT(spa->spa_uberblock.ub_version >= SPA_VERSION_DEDUP); + + if (spa->spa_ddt_stat_object == 0) { + spa->spa_ddt_stat_object = zap_create_link(ddt->ddt_os, + DMU_OT_DDT_STATS, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_DDT_STATS, tx); + } + + while ((dde = avl_destroy_nodes(&ddt->ddt_tree, &cookie)) != NULL) { + ddt_sync_entry(ddt, dde, tx, txg); + ddt_free(dde); + } + + for (type = 0; type < DDT_TYPES; type++) { + uint64_t add, count = 0; + for (class = 0; class < DDT_CLASSES; class++) { + if (ddt_object_exists(ddt, type, class)) { + ddt_object_sync(ddt, type, class, tx); + VERIFY(ddt_object_count(ddt, type, class, + &add) == 0); + count += add; + } + } + for (class = 0; class < DDT_CLASSES; class++) { + if (count == 0 && ddt_object_exists(ddt, type, class)) + ddt_object_destroy(ddt, type, class, tx); + } + } + + bcopy(ddt->ddt_histogram, &ddt->ddt_histogram_cache, + sizeof (ddt->ddt_histogram)); + spa->spa_dedup_dspace = ~0ULL; +} + +void +ddt_sync(spa_t *spa, uint64_t txg) +{ + dmu_tx_t *tx; + zio_t *rio = zio_root(spa, NULL, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE); + enum zio_checksum c; + + ASSERT(spa_syncing_txg(spa) == txg); + + tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg); + + for (c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) { + ddt_t *ddt = spa->spa_ddt[c]; + if (ddt == NULL) + continue; + ddt_sync_table(ddt, tx, txg); + ddt_repair_table(ddt, rio); + } + + (void) zio_wait(rio); + + dmu_tx_commit(tx); +} + +int +ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde) +{ + do { + do { + do { + ddt_t *ddt = spa->spa_ddt[ddb->ddb_checksum]; + int error = ENOENT; + if (ddt_object_exists(ddt, ddb->ddb_type, + ddb->ddb_class)) { + error = ddt_object_walk(ddt, + ddb->ddb_type, ddb->ddb_class, + &ddb->ddb_cursor, dde); + } + dde->dde_type = ddb->ddb_type; + dde->dde_class = ddb->ddb_class; + if (error == 0) + return (0); + if (error != ENOENT) + return (error); + ddb->ddb_cursor = 0; + } while (++ddb->ddb_checksum < ZIO_CHECKSUM_FUNCTIONS); + ddb->ddb_checksum = 0; + } while (++ddb->ddb_type < DDT_TYPES); + ddb->ddb_type = 0; + } while (++ddb->ddb_class < DDT_CLASSES); + + return (SET_ERROR(ENOENT)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_dedup_prefetch, int, 0644); +MODULE_PARM_DESC(zfs_dedup_prefetch, "Enable prefetching dedup-ed blks"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/ddt_zap.c +++ linux-aws-4.15.0/zfs/module/zfs/ddt_zap.c @@ -0,0 +1,157 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include + +int ddt_zap_leaf_blockshift = 12; +int ddt_zap_indirect_blockshift = 12; + +static int +ddt_zap_create(objset_t *os, uint64_t *objectp, dmu_tx_t *tx, boolean_t prehash) +{ + zap_flags_t flags = ZAP_FLAG_HASH64 | ZAP_FLAG_UINT64_KEY; + + if (prehash) + flags |= ZAP_FLAG_PRE_HASHED_KEY; + + *objectp = zap_create_flags(os, 0, flags, DMU_OT_DDT_ZAP, + ddt_zap_leaf_blockshift, ddt_zap_indirect_blockshift, + DMU_OT_NONE, 0, tx); + + return (*objectp == 0 ? ENOTSUP : 0); +} + +static int +ddt_zap_destroy(objset_t *os, uint64_t object, dmu_tx_t *tx) +{ + return (zap_destroy(os, object, tx)); +} + +static int +ddt_zap_lookup(objset_t *os, uint64_t object, ddt_entry_t *dde) +{ + uchar_t *cbuf; + uint64_t one, csize; + int error; + + cbuf = kmem_alloc(sizeof (dde->dde_phys) + 1, KM_SLEEP); + + error = zap_length_uint64(os, object, (uint64_t *)&dde->dde_key, + DDT_KEY_WORDS, &one, &csize); + if (error) + goto out; + + ASSERT(one == 1); + ASSERT(csize <= (sizeof (dde->dde_phys) + 1)); + + error = zap_lookup_uint64(os, object, (uint64_t *)&dde->dde_key, + DDT_KEY_WORDS, 1, csize, cbuf); + if (error) + goto out; + + ddt_decompress(cbuf, dde->dde_phys, csize, sizeof (dde->dde_phys)); +out: + kmem_free(cbuf, sizeof (dde->dde_phys) + 1); + + return (error); +} + +static void +ddt_zap_prefetch(objset_t *os, uint64_t object, ddt_entry_t *dde) +{ + (void) zap_prefetch_uint64(os, object, (uint64_t *)&dde->dde_key, + DDT_KEY_WORDS); +} + +static int +ddt_zap_update(objset_t *os, uint64_t object, ddt_entry_t *dde, dmu_tx_t *tx) +{ + uchar_t cbuf[sizeof (dde->dde_phys) + 1]; + uint64_t csize; + + csize = ddt_compress(dde->dde_phys, cbuf, + sizeof (dde->dde_phys), sizeof (cbuf)); + + return (zap_update_uint64(os, object, (uint64_t *)&dde->dde_key, + DDT_KEY_WORDS, 1, csize, cbuf, tx)); +} + +static int +ddt_zap_remove(objset_t *os, uint64_t object, ddt_entry_t *dde, dmu_tx_t *tx) +{ + return (zap_remove_uint64(os, object, (uint64_t *)&dde->dde_key, + DDT_KEY_WORDS, tx)); +} + +static int +ddt_zap_walk(objset_t *os, uint64_t object, ddt_entry_t *dde, uint64_t *walk) +{ + zap_cursor_t zc; + zap_attribute_t za; + int error; + + zap_cursor_init_serialized(&zc, os, object, *walk); + if ((error = zap_cursor_retrieve(&zc, &za)) == 0) { + uchar_t cbuf[sizeof (dde->dde_phys) + 1]; + uint64_t csize = za.za_num_integers; + ASSERT(za.za_integer_length == 1); + error = zap_lookup_uint64(os, object, (uint64_t *)za.za_name, + DDT_KEY_WORDS, 1, csize, cbuf); + ASSERT(error == 0); + if (error == 0) { + ddt_decompress(cbuf, dde->dde_phys, csize, + sizeof (dde->dde_phys)); + dde->dde_key = *(ddt_key_t *)za.za_name; + } + zap_cursor_advance(&zc); + *walk = zap_cursor_serialize(&zc); + } + zap_cursor_fini(&zc); + return (error); +} + +static int +ddt_zap_count(objset_t *os, uint64_t object, uint64_t *count) +{ + return (zap_count(os, object, count)); +} + +const ddt_ops_t ddt_zap_ops = { + "zap", + ddt_zap_create, + ddt_zap_destroy, + ddt_zap_lookup, + ddt_zap_prefetch, + ddt_zap_update, + ddt_zap_remove, + ddt_zap_walk, + ddt_zap_count, +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu.c @@ -0,0 +1,2302 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2016, Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#endif + +/* + * Enable/disable nopwrite feature. + */ +int zfs_nopwrite_enabled = 1; + +/* + * Tunable to control percentage of dirtied blocks from frees in one TXG. + * After this threshold is crossed, additional dirty blocks from frees + * wait until the next TXG. + * A value of zero will disable this throttle. + */ +unsigned long zfs_per_txg_dirty_frees_percent = 30; + +/* + * Enable/disable forcing txg sync when dirty in dmu_offset_next. + */ +int zfs_dmu_offset_next_sync = 0; + +const dmu_object_type_info_t dmu_ot[DMU_OT_NUMTYPES] = { + { DMU_BSWAP_UINT8, TRUE, "unallocated" }, + { DMU_BSWAP_ZAP, TRUE, "object directory" }, + { DMU_BSWAP_UINT64, TRUE, "object array" }, + { DMU_BSWAP_UINT8, TRUE, "packed nvlist" }, + { DMU_BSWAP_UINT64, TRUE, "packed nvlist size" }, + { DMU_BSWAP_UINT64, TRUE, "bpobj" }, + { DMU_BSWAP_UINT64, TRUE, "bpobj header" }, + { DMU_BSWAP_UINT64, TRUE, "SPA space map header" }, + { DMU_BSWAP_UINT64, TRUE, "SPA space map" }, + { DMU_BSWAP_UINT64, TRUE, "ZIL intent log" }, + { DMU_BSWAP_DNODE, TRUE, "DMU dnode" }, + { DMU_BSWAP_OBJSET, TRUE, "DMU objset" }, + { DMU_BSWAP_UINT64, TRUE, "DSL directory" }, + { DMU_BSWAP_ZAP, TRUE, "DSL directory child map"}, + { DMU_BSWAP_ZAP, TRUE, "DSL dataset snap map" }, + { DMU_BSWAP_ZAP, TRUE, "DSL props" }, + { DMU_BSWAP_UINT64, TRUE, "DSL dataset" }, + { DMU_BSWAP_ZNODE, TRUE, "ZFS znode" }, + { DMU_BSWAP_OLDACL, TRUE, "ZFS V0 ACL" }, + { DMU_BSWAP_UINT8, FALSE, "ZFS plain file" }, + { DMU_BSWAP_ZAP, TRUE, "ZFS directory" }, + { DMU_BSWAP_ZAP, TRUE, "ZFS master node" }, + { DMU_BSWAP_ZAP, TRUE, "ZFS delete queue" }, + { DMU_BSWAP_UINT8, FALSE, "zvol object" }, + { DMU_BSWAP_ZAP, TRUE, "zvol prop" }, + { DMU_BSWAP_UINT8, FALSE, "other uint8[]" }, + { DMU_BSWAP_UINT64, FALSE, "other uint64[]" }, + { DMU_BSWAP_ZAP, TRUE, "other ZAP" }, + { DMU_BSWAP_ZAP, TRUE, "persistent error log" }, + { DMU_BSWAP_UINT8, TRUE, "SPA history" }, + { DMU_BSWAP_UINT64, TRUE, "SPA history offsets" }, + { DMU_BSWAP_ZAP, TRUE, "Pool properties" }, + { DMU_BSWAP_ZAP, TRUE, "DSL permissions" }, + { DMU_BSWAP_ACL, TRUE, "ZFS ACL" }, + { DMU_BSWAP_UINT8, TRUE, "ZFS SYSACL" }, + { DMU_BSWAP_UINT8, TRUE, "FUID table" }, + { DMU_BSWAP_UINT64, TRUE, "FUID table size" }, + { DMU_BSWAP_ZAP, TRUE, "DSL dataset next clones"}, + { DMU_BSWAP_ZAP, TRUE, "scan work queue" }, + { DMU_BSWAP_ZAP, TRUE, "ZFS user/group used" }, + { DMU_BSWAP_ZAP, TRUE, "ZFS user/group quota" }, + { DMU_BSWAP_ZAP, TRUE, "snapshot refcount tags"}, + { DMU_BSWAP_ZAP, TRUE, "DDT ZAP algorithm" }, + { DMU_BSWAP_ZAP, TRUE, "DDT statistics" }, + { DMU_BSWAP_UINT8, TRUE, "System attributes" }, + { DMU_BSWAP_ZAP, TRUE, "SA master node" }, + { DMU_BSWAP_ZAP, TRUE, "SA attr registration" }, + { DMU_BSWAP_ZAP, TRUE, "SA attr layouts" }, + { DMU_BSWAP_ZAP, TRUE, "scan translations" }, + { DMU_BSWAP_UINT8, FALSE, "deduplicated block" }, + { DMU_BSWAP_ZAP, TRUE, "DSL deadlist map" }, + { DMU_BSWAP_UINT64, TRUE, "DSL deadlist map hdr" }, + { DMU_BSWAP_ZAP, TRUE, "DSL dir clones" }, + { DMU_BSWAP_UINT64, TRUE, "bpobj subobj" } +}; + +const dmu_object_byteswap_info_t dmu_ot_byteswap[DMU_BSWAP_NUMFUNCS] = { + { byteswap_uint8_array, "uint8" }, + { byteswap_uint16_array, "uint16" }, + { byteswap_uint32_array, "uint32" }, + { byteswap_uint64_array, "uint64" }, + { zap_byteswap, "zap" }, + { dnode_buf_byteswap, "dnode" }, + { dmu_objset_byteswap, "objset" }, + { zfs_znode_byteswap, "znode" }, + { zfs_oldacl_byteswap, "oldacl" }, + { zfs_acl_byteswap, "acl" } +}; + +int +dmu_buf_hold_noread_by_dnode(dnode_t *dn, uint64_t offset, + void *tag, dmu_buf_t **dbp) +{ + uint64_t blkid; + dmu_buf_impl_t *db; + + blkid = dbuf_whichblock(dn, 0, offset); + rw_enter(&dn->dn_struct_rwlock, RW_READER); + db = dbuf_hold(dn, blkid, tag); + rw_exit(&dn->dn_struct_rwlock); + + if (db == NULL) { + *dbp = NULL; + return (SET_ERROR(EIO)); + } + + *dbp = &db->db; + return (0); +} +int +dmu_buf_hold_noread(objset_t *os, uint64_t object, uint64_t offset, + void *tag, dmu_buf_t **dbp) +{ + dnode_t *dn; + uint64_t blkid; + dmu_buf_impl_t *db; + int err; + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + blkid = dbuf_whichblock(dn, 0, offset); + rw_enter(&dn->dn_struct_rwlock, RW_READER); + db = dbuf_hold(dn, blkid, tag); + rw_exit(&dn->dn_struct_rwlock); + dnode_rele(dn, FTAG); + + if (db == NULL) { + *dbp = NULL; + return (SET_ERROR(EIO)); + } + + *dbp = &db->db; + return (err); +} + +int +dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset, + void *tag, dmu_buf_t **dbp, int flags) +{ + int err; + int db_flags = DB_RF_CANFAIL; + + if (flags & DMU_READ_NO_PREFETCH) + db_flags |= DB_RF_NOPREFETCH; + + err = dmu_buf_hold_noread_by_dnode(dn, offset, tag, dbp); + if (err == 0) { + dmu_buf_impl_t *db = (dmu_buf_impl_t *)(*dbp); + err = dbuf_read(db, NULL, db_flags); + if (err != 0) { + dbuf_rele(db, tag); + *dbp = NULL; + } + } + + return (err); +} + +int +dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset, + void *tag, dmu_buf_t **dbp, int flags) +{ + int err; + int db_flags = DB_RF_CANFAIL; + + if (flags & DMU_READ_NO_PREFETCH) + db_flags |= DB_RF_NOPREFETCH; + + err = dmu_buf_hold_noread(os, object, offset, tag, dbp); + if (err == 0) { + dmu_buf_impl_t *db = (dmu_buf_impl_t *)(*dbp); + err = dbuf_read(db, NULL, db_flags); + if (err != 0) { + dbuf_rele(db, tag); + *dbp = NULL; + } + } + + return (err); +} + +int +dmu_bonus_max(void) +{ + return (DN_OLD_MAX_BONUSLEN); +} + +int +dmu_set_bonus(dmu_buf_t *db_fake, int newsize, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + int error; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + if (dn->dn_bonus != db) { + error = SET_ERROR(EINVAL); + } else if (newsize < 0 || newsize > db_fake->db_size) { + error = SET_ERROR(EINVAL); + } else { + dnode_setbonuslen(dn, newsize, tx); + error = 0; + } + + DB_DNODE_EXIT(db); + return (error); +} + +int +dmu_set_bonustype(dmu_buf_t *db_fake, dmu_object_type_t type, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + int error; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + if (!DMU_OT_IS_VALID(type)) { + error = SET_ERROR(EINVAL); + } else if (dn->dn_bonus != db) { + error = SET_ERROR(EINVAL); + } else { + dnode_setbonus_type(dn, type, tx); + error = 0; + } + + DB_DNODE_EXIT(db); + return (error); +} + +dmu_object_type_t +dmu_get_bonustype(dmu_buf_t *db_fake) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + dmu_object_type_t type; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + type = dn->dn_bonustype; + DB_DNODE_EXIT(db); + + return (type); +} + +int +dmu_rm_spill(objset_t *os, uint64_t object, dmu_tx_t *tx) +{ + dnode_t *dn; + int error; + + error = dnode_hold(os, object, FTAG, &dn); + dbuf_rm_spill(dn, tx); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + dnode_rm_spill(dn, tx); + rw_exit(&dn->dn_struct_rwlock); + dnode_rele(dn, FTAG); + return (error); +} + +/* + * returns ENOENT, EIO, or 0. + */ +int +dmu_bonus_hold(objset_t *os, uint64_t object, void *tag, dmu_buf_t **dbp) +{ + dnode_t *dn; + dmu_buf_impl_t *db; + int error; + + error = dnode_hold(os, object, FTAG, &dn); + if (error) + return (error); + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + if (dn->dn_bonus == NULL) { + rw_exit(&dn->dn_struct_rwlock); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + if (dn->dn_bonus == NULL) + dbuf_create_bonus(dn); + } + db = dn->dn_bonus; + + /* as long as the bonus buf is held, the dnode will be held */ + if (refcount_add(&db->db_holds, tag) == 1) { + VERIFY(dnode_add_ref(dn, db)); + atomic_inc_32(&dn->dn_dbufs_count); + } + + /* + * Wait to drop dn_struct_rwlock until after adding the bonus dbuf's + * hold and incrementing the dbuf count to ensure that dnode_move() sees + * a dnode hold for every dbuf. + */ + rw_exit(&dn->dn_struct_rwlock); + + dnode_rele(dn, FTAG); + + VERIFY(0 == dbuf_read(db, NULL, DB_RF_MUST_SUCCEED | DB_RF_NOPREFETCH)); + + *dbp = &db->db; + return (0); +} + +/* + * returns ENOENT, EIO, or 0. + * + * This interface will allocate a blank spill dbuf when a spill blk + * doesn't already exist on the dnode. + * + * if you only want to find an already existing spill db, then + * dmu_spill_hold_existing() should be used. + */ +int +dmu_spill_hold_by_dnode(dnode_t *dn, uint32_t flags, void *tag, dmu_buf_t **dbp) +{ + dmu_buf_impl_t *db = NULL; + int err; + + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_enter(&dn->dn_struct_rwlock, RW_READER); + + db = dbuf_hold(dn, DMU_SPILL_BLKID, tag); + + if ((flags & DB_RF_HAVESTRUCT) == 0) + rw_exit(&dn->dn_struct_rwlock); + + if (db == NULL) { + *dbp = NULL; + return (SET_ERROR(EIO)); + } + err = dbuf_read(db, NULL, flags); + if (err == 0) + *dbp = &db->db; + else { + dbuf_rele(db, tag); + *dbp = NULL; + } + return (err); +} + +int +dmu_spill_hold_existing(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)bonus; + dnode_t *dn; + int err; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_SA) { + err = SET_ERROR(EINVAL); + } else { + rw_enter(&dn->dn_struct_rwlock, RW_READER); + + if (!dn->dn_have_spill) { + err = SET_ERROR(ENOENT); + } else { + err = dmu_spill_hold_by_dnode(dn, + DB_RF_HAVESTRUCT | DB_RF_CANFAIL, tag, dbp); + } + + rw_exit(&dn->dn_struct_rwlock); + } + + DB_DNODE_EXIT(db); + return (err); +} + +int +dmu_spill_hold_by_bonus(dmu_buf_t *bonus, void *tag, dmu_buf_t **dbp) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)bonus; + dnode_t *dn; + int err; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + err = dmu_spill_hold_by_dnode(dn, DB_RF_CANFAIL, tag, dbp); + DB_DNODE_EXIT(db); + + return (err); +} + +/* + * Note: longer-term, we should modify all of the dmu_buf_*() interfaces + * to take a held dnode rather than -- the lookup is wasteful, + * and can induce severe lock contention when writing to several files + * whose dnodes are in the same block. + */ +static int +dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset, uint64_t length, + boolean_t read, void *tag, int *numbufsp, dmu_buf_t ***dbpp, uint32_t flags) +{ + dmu_buf_t **dbp; + uint64_t blkid, nblks, i; + uint32_t dbuf_flags; + int err; + zio_t *zio; + + ASSERT(length <= DMU_MAX_ACCESS); + + /* + * Note: We directly notify the prefetch code of this read, so that + * we can tell it about the multi-block read. dbuf_read() only knows + * about the one block it is accessing. + */ + dbuf_flags = DB_RF_CANFAIL | DB_RF_NEVERWAIT | DB_RF_HAVESTRUCT | + DB_RF_NOPREFETCH; + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + if (dn->dn_datablkshift) { + int blkshift = dn->dn_datablkshift; + nblks = (P2ROUNDUP(offset + length, 1ULL << blkshift) - + P2ALIGN(offset, 1ULL << blkshift)) >> blkshift; + } else { + if (offset + length > dn->dn_datablksz) { + zfs_panic_recover("zfs: accessing past end of object " + "%llx/%llx (size=%u access=%llu+%llu)", + (longlong_t)dn->dn_objset-> + os_dsl_dataset->ds_object, + (longlong_t)dn->dn_object, dn->dn_datablksz, + (longlong_t)offset, (longlong_t)length); + rw_exit(&dn->dn_struct_rwlock); + return (SET_ERROR(EIO)); + } + nblks = 1; + } + dbp = kmem_zalloc(sizeof (dmu_buf_t *) * nblks, KM_SLEEP); + + zio = zio_root(dn->dn_objset->os_spa, NULL, NULL, ZIO_FLAG_CANFAIL); + blkid = dbuf_whichblock(dn, 0, offset); + for (i = 0; i < nblks; i++) { + dmu_buf_impl_t *db = dbuf_hold(dn, blkid + i, tag); + if (db == NULL) { + rw_exit(&dn->dn_struct_rwlock); + dmu_buf_rele_array(dbp, nblks, tag); + zio_nowait(zio); + return (SET_ERROR(EIO)); + } + + /* initiate async i/o */ + if (read) + (void) dbuf_read(db, zio, dbuf_flags); + dbp[i] = &db->db; + } + + if ((flags & DMU_READ_NO_PREFETCH) == 0 && + DNODE_META_IS_CACHEABLE(dn) && length <= zfetch_array_rd_sz) { + dmu_zfetch(&dn->dn_zfetch, blkid, nblks, + read && DNODE_IS_CACHEABLE(dn)); + } + rw_exit(&dn->dn_struct_rwlock); + + /* wait for async i/o */ + err = zio_wait(zio); + if (err) { + dmu_buf_rele_array(dbp, nblks, tag); + return (err); + } + + /* wait for other io to complete */ + if (read) { + for (i = 0; i < nblks; i++) { + dmu_buf_impl_t *db = (dmu_buf_impl_t *)dbp[i]; + mutex_enter(&db->db_mtx); + while (db->db_state == DB_READ || + db->db_state == DB_FILL) + cv_wait(&db->db_changed, &db->db_mtx); + if (db->db_state == DB_UNCACHED) + err = SET_ERROR(EIO); + mutex_exit(&db->db_mtx); + if (err) { + dmu_buf_rele_array(dbp, nblks, tag); + return (err); + } + } + } + + *numbufsp = nblks; + *dbpp = dbp; + return (0); +} + +static int +dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset, + uint64_t length, int read, void *tag, int *numbufsp, dmu_buf_t ***dbpp) +{ + dnode_t *dn; + int err; + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + + err = dmu_buf_hold_array_by_dnode(dn, offset, length, read, tag, + numbufsp, dbpp, DMU_READ_PREFETCH); + + dnode_rele(dn, FTAG); + + return (err); +} + +int +dmu_buf_hold_array_by_bonus(dmu_buf_t *db_fake, uint64_t offset, + uint64_t length, boolean_t read, void *tag, int *numbufsp, + dmu_buf_t ***dbpp) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + int err; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + err = dmu_buf_hold_array_by_dnode(dn, offset, length, read, tag, + numbufsp, dbpp, DMU_READ_PREFETCH); + DB_DNODE_EXIT(db); + + return (err); +} + +void +dmu_buf_rele_array(dmu_buf_t **dbp_fake, int numbufs, void *tag) +{ + int i; + dmu_buf_impl_t **dbp = (dmu_buf_impl_t **)dbp_fake; + + if (numbufs == 0) + return; + + for (i = 0; i < numbufs; i++) { + if (dbp[i]) + dbuf_rele(dbp[i], tag); + } + + kmem_free(dbp, sizeof (dmu_buf_t *) * numbufs); +} + +/* + * Issue prefetch i/os for the given blocks. If level is greater than 0, the + * indirect blocks prefeteched will be those that point to the blocks containing + * the data starting at offset, and continuing to offset + len. + * + * Note that if the indirect blocks above the blocks being prefetched are not in + * cache, they will be asychronously read in. + */ +void +dmu_prefetch(objset_t *os, uint64_t object, int64_t level, uint64_t offset, + uint64_t len, zio_priority_t pri) +{ + dnode_t *dn; + uint64_t blkid; + int nblks, err; + + if (len == 0) { /* they're interested in the bonus buffer */ + dn = DMU_META_DNODE(os); + + if (object == 0 || object >= DN_MAX_OBJECT) + return; + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + blkid = dbuf_whichblock(dn, level, + object * sizeof (dnode_phys_t)); + dbuf_prefetch(dn, level, blkid, pri, 0); + rw_exit(&dn->dn_struct_rwlock); + return; + } + + /* + * XXX - Note, if the dnode for the requested object is not + * already cached, we will do a *synchronous* read in the + * dnode_hold() call. The same is true for any indirects. + */ + err = dnode_hold(os, object, FTAG, &dn); + if (err != 0) + return; + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + /* + * offset + len - 1 is the last byte we want to prefetch for, and offset + * is the first. Then dbuf_whichblk(dn, level, off + len - 1) is the + * last block we want to prefetch, and dbuf_whichblock(dn, level, + * offset) is the first. Then the number we need to prefetch is the + * last - first + 1. + */ + if (level > 0 || dn->dn_datablkshift != 0) { + nblks = dbuf_whichblock(dn, level, offset + len - 1) - + dbuf_whichblock(dn, level, offset) + 1; + } else { + nblks = (offset < dn->dn_datablksz); + } + + if (nblks != 0) { + int i; + + blkid = dbuf_whichblock(dn, level, offset); + for (i = 0; i < nblks; i++) + dbuf_prefetch(dn, level, blkid + i, pri, 0); + } + + rw_exit(&dn->dn_struct_rwlock); + + dnode_rele(dn, FTAG); +} + +/* + * Get the next "chunk" of file data to free. We traverse the file from + * the end so that the file gets shorter over time (if we crashes in the + * middle, this will leave us in a better state). We find allocated file + * data by simply searching the allocated level 1 indirects. + * + * On input, *start should be the first offset that does not need to be + * freed (e.g. "offset + length"). On return, *start will be the first + * offset that should be freed. + */ +static int +get_next_chunk(dnode_t *dn, uint64_t *start, uint64_t minimum) +{ + uint64_t maxblks = DMU_MAX_ACCESS >> (dn->dn_indblkshift + 1); + /* bytes of data covered by a level-1 indirect block */ + uint64_t iblkrange = + dn->dn_datablksz * EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT); + uint64_t blks; + + ASSERT3U(minimum, <=, *start); + + if (*start - minimum <= iblkrange * maxblks) { + *start = minimum; + return (0); + } + ASSERT(ISP2(iblkrange)); + + for (blks = 0; *start > minimum && blks < maxblks; blks++) { + int err; + + /* + * dnode_next_offset(BACKWARDS) will find an allocated L1 + * indirect block at or before the input offset. We must + * decrement *start so that it is at the end of the region + * to search. + */ + (*start)--; + err = dnode_next_offset(dn, + DNODE_FIND_BACKWARDS, start, 2, 1, 0); + + /* if there are no indirect blocks before start, we are done */ + if (err == ESRCH) { + *start = minimum; + break; + } else if (err != 0) { + return (err); + } + + /* set start to the beginning of this L1 indirect */ + *start = P2ALIGN(*start, iblkrange); + } + if (*start < minimum) + *start = minimum; + return (0); +} + +/* + * If this objset is of type OST_ZFS return true if vfs's unmounted flag is set, + * otherwise return false. + * Used below in dmu_free_long_range_impl() to enable abort when unmounting + */ +/*ARGSUSED*/ +static boolean_t +dmu_objset_zfs_unmounting(objset_t *os) +{ +#ifdef _KERNEL + if (dmu_objset_type(os) == DMU_OST_ZFS) + return (zfs_get_vfs_flag_unmounted(os)); +#endif + return (B_FALSE); +} + +static int +dmu_free_long_range_impl(objset_t *os, dnode_t *dn, uint64_t offset, + uint64_t length) +{ + uint64_t object_size; + int err; + uint64_t dirty_frees_threshold; + dsl_pool_t *dp = dmu_objset_pool(os); + int t; + + if (dn == NULL) + return (SET_ERROR(EINVAL)); + + object_size = (dn->dn_maxblkid + 1) * dn->dn_datablksz; + if (offset >= object_size) + return (0); + + if (zfs_per_txg_dirty_frees_percent <= 100) + dirty_frees_threshold = + zfs_per_txg_dirty_frees_percent * zfs_dirty_data_max / 100; + else + dirty_frees_threshold = zfs_dirty_data_max / 4; + + if (length == DMU_OBJECT_END || offset + length > object_size) + length = object_size - offset; + + while (length != 0) { + uint64_t chunk_end, chunk_begin, chunk_len; + uint64_t long_free_dirty_all_txgs = 0; + dmu_tx_t *tx; + + if (dmu_objset_zfs_unmounting(dn->dn_objset)) + return (SET_ERROR(EINTR)); + + chunk_end = chunk_begin = offset + length; + + /* move chunk_begin backwards to the beginning of this chunk */ + err = get_next_chunk(dn, &chunk_begin, offset); + if (err) + return (err); + ASSERT3U(chunk_begin, >=, offset); + ASSERT3U(chunk_begin, <=, chunk_end); + + chunk_len = chunk_end - chunk_begin; + + mutex_enter(&dp->dp_lock); + for (t = 0; t < TXG_SIZE; t++) { + long_free_dirty_all_txgs += + dp->dp_long_free_dirty_pertxg[t]; + } + mutex_exit(&dp->dp_lock); + + /* + * To avoid filling up a TXG with just frees wait for + * the next TXG to open before freeing more chunks if + * we have reached the threshold of frees + */ + if (dirty_frees_threshold != 0 && + long_free_dirty_all_txgs >= dirty_frees_threshold) { + txg_wait_open(dp, 0); + continue; + } + + tx = dmu_tx_create(os); + dmu_tx_hold_free(tx, dn->dn_object, chunk_begin, chunk_len); + + /* + * Mark this transaction as typically resulting in a net + * reduction in space used. + */ + dmu_tx_mark_netfree(tx); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err) { + dmu_tx_abort(tx); + return (err); + } + + mutex_enter(&dp->dp_lock); + dp->dp_long_free_dirty_pertxg[dmu_tx_get_txg(tx) & TXG_MASK] += + chunk_len; + mutex_exit(&dp->dp_lock); + DTRACE_PROBE3(free__long__range, + uint64_t, long_free_dirty_all_txgs, uint64_t, chunk_len, + uint64_t, dmu_tx_get_txg(tx)); + dnode_free_range(dn, chunk_begin, chunk_len, tx); + dmu_tx_commit(tx); + + length -= chunk_len; + } + return (0); +} + +int +dmu_free_long_range(objset_t *os, uint64_t object, + uint64_t offset, uint64_t length) +{ + dnode_t *dn; + int err; + + err = dnode_hold(os, object, FTAG, &dn); + if (err != 0) + return (err); + err = dmu_free_long_range_impl(os, dn, offset, length); + + /* + * It is important to zero out the maxblkid when freeing the entire + * file, so that (a) subsequent calls to dmu_free_long_range_impl() + * will take the fast path, and (b) dnode_reallocate() can verify + * that the entire file has been freed. + */ + if (err == 0 && offset == 0 && length == DMU_OBJECT_END) + dn->dn_maxblkid = 0; + + dnode_rele(dn, FTAG); + return (err); +} + +int +dmu_free_long_object(objset_t *os, uint64_t object) +{ + dmu_tx_t *tx; + int err; + + err = dmu_free_long_range(os, object, 0, DMU_OBJECT_END); + if (err != 0) + return (err); + + tx = dmu_tx_create(os); + dmu_tx_hold_bonus(tx, object); + dmu_tx_hold_free(tx, object, 0, DMU_OBJECT_END); + dmu_tx_mark_netfree(tx); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err == 0) { + err = dmu_object_free(os, object, tx); + dmu_tx_commit(tx); + } else { + dmu_tx_abort(tx); + } + + return (err); +} + +int +dmu_free_range(objset_t *os, uint64_t object, uint64_t offset, + uint64_t size, dmu_tx_t *tx) +{ + dnode_t *dn; + int err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + ASSERT(offset < UINT64_MAX); + ASSERT(size == -1ULL || size <= UINT64_MAX - offset); + dnode_free_range(dn, offset, size, tx); + dnode_rele(dn, FTAG); + return (0); +} + +static int +dmu_read_impl(dnode_t *dn, uint64_t offset, uint64_t size, + void *buf, uint32_t flags) +{ + dmu_buf_t **dbp; + int numbufs, err = 0; + + /* + * Deal with odd block sizes, where there can't be data past the first + * block. If we ever do the tail block optimization, we will need to + * handle that here as well. + */ + if (dn->dn_maxblkid == 0) { + uint64_t newsz = offset > dn->dn_datablksz ? 0 : + MIN(size, dn->dn_datablksz - offset); + bzero((char *)buf + newsz, size - newsz); + size = newsz; + } + + while (size > 0) { + uint64_t mylen = MIN(size, DMU_MAX_ACCESS / 2); + int i; + + /* + * NB: we could do this block-at-a-time, but it's nice + * to be reading in parallel. + */ + err = dmu_buf_hold_array_by_dnode(dn, offset, mylen, + TRUE, FTAG, &numbufs, &dbp, flags); + if (err) + break; + + for (i = 0; i < numbufs; i++) { + uint64_t tocpy; + int64_t bufoff; + dmu_buf_t *db = dbp[i]; + + ASSERT(size > 0); + + bufoff = offset - db->db_offset; + tocpy = MIN(db->db_size - bufoff, size); + + (void) memcpy(buf, (char *)db->db_data + bufoff, tocpy); + + offset += tocpy; + size -= tocpy; + buf = (char *)buf + tocpy; + } + dmu_buf_rele_array(dbp, numbufs, FTAG); + } + return (err); +} + +int +dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + void *buf, uint32_t flags) +{ + dnode_t *dn; + int err; + + err = dnode_hold(os, object, FTAG, &dn); + if (err != 0) + return (err); + + err = dmu_read_impl(dn, offset, size, buf, flags); + dnode_rele(dn, FTAG); + return (err); +} + +int +dmu_read_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, void *buf, + uint32_t flags) +{ + return (dmu_read_impl(dn, offset, size, buf, flags)); +} + +static void +dmu_write_impl(dmu_buf_t **dbp, int numbufs, uint64_t offset, uint64_t size, + const void *buf, dmu_tx_t *tx) +{ + int i; + + for (i = 0; i < numbufs; i++) { + uint64_t tocpy; + int64_t bufoff; + dmu_buf_t *db = dbp[i]; + + ASSERT(size > 0); + + bufoff = offset - db->db_offset; + tocpy = MIN(db->db_size - bufoff, size); + + ASSERT(i == 0 || i == numbufs-1 || tocpy == db->db_size); + + if (tocpy == db->db_size) + dmu_buf_will_fill(db, tx); + else + dmu_buf_will_dirty(db, tx); + + (void) memcpy((char *)db->db_data + bufoff, buf, tocpy); + + if (tocpy == db->db_size) + dmu_buf_fill_done(db, tx); + + offset += tocpy; + size -= tocpy; + buf = (char *)buf + tocpy; + } +} + +void +dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + const void *buf, dmu_tx_t *tx) +{ + dmu_buf_t **dbp; + int numbufs; + + if (size == 0) + return; + + VERIFY0(dmu_buf_hold_array(os, object, offset, size, + FALSE, FTAG, &numbufs, &dbp)); + dmu_write_impl(dbp, numbufs, offset, size, buf, tx); + dmu_buf_rele_array(dbp, numbufs, FTAG); +} + +void +dmu_write_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, + const void *buf, dmu_tx_t *tx) +{ + dmu_buf_t **dbp; + int numbufs; + + if (size == 0) + return; + + VERIFY0(dmu_buf_hold_array_by_dnode(dn, offset, size, + FALSE, FTAG, &numbufs, &dbp, DMU_READ_PREFETCH)); + dmu_write_impl(dbp, numbufs, offset, size, buf, tx); + dmu_buf_rele_array(dbp, numbufs, FTAG); +} + +void +dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, + dmu_tx_t *tx) +{ + dmu_buf_t **dbp; + int numbufs, i; + + if (size == 0) + return; + + VERIFY(0 == dmu_buf_hold_array(os, object, offset, size, + FALSE, FTAG, &numbufs, &dbp)); + + for (i = 0; i < numbufs; i++) { + dmu_buf_t *db = dbp[i]; + + dmu_buf_will_not_fill(db, tx); + } + dmu_buf_rele_array(dbp, numbufs, FTAG); +} + +void +dmu_write_embedded(objset_t *os, uint64_t object, uint64_t offset, + void *data, uint8_t etype, uint8_t comp, int uncompressed_size, + int compressed_size, int byteorder, dmu_tx_t *tx) +{ + dmu_buf_t *db; + + ASSERT3U(etype, <, NUM_BP_EMBEDDED_TYPES); + ASSERT3U(comp, <, ZIO_COMPRESS_FUNCTIONS); + VERIFY0(dmu_buf_hold_noread(os, object, offset, + FTAG, &db)); + + dmu_buf_write_embedded(db, + data, (bp_embedded_type_t)etype, (enum zio_compress)comp, + uncompressed_size, compressed_size, byteorder, tx); + + dmu_buf_rele(db, FTAG); +} + +/* + * DMU support for xuio + */ +kstat_t *xuio_ksp = NULL; + +typedef struct xuio_stats { + /* loaned yet not returned arc_buf */ + kstat_named_t xuiostat_onloan_rbuf; + kstat_named_t xuiostat_onloan_wbuf; + /* whether a copy is made when loaning out a read buffer */ + kstat_named_t xuiostat_rbuf_copied; + kstat_named_t xuiostat_rbuf_nocopy; + /* whether a copy is made when assigning a write buffer */ + kstat_named_t xuiostat_wbuf_copied; + kstat_named_t xuiostat_wbuf_nocopy; +} xuio_stats_t; + +static xuio_stats_t xuio_stats = { + { "onloan_read_buf", KSTAT_DATA_UINT64 }, + { "onloan_write_buf", KSTAT_DATA_UINT64 }, + { "read_buf_copied", KSTAT_DATA_UINT64 }, + { "read_buf_nocopy", KSTAT_DATA_UINT64 }, + { "write_buf_copied", KSTAT_DATA_UINT64 }, + { "write_buf_nocopy", KSTAT_DATA_UINT64 } +}; + +#define XUIOSTAT_INCR(stat, val) \ + atomic_add_64(&xuio_stats.stat.value.ui64, (val)) +#define XUIOSTAT_BUMP(stat) XUIOSTAT_INCR(stat, 1) + +#ifdef HAVE_UIO_ZEROCOPY +int +dmu_xuio_init(xuio_t *xuio, int nblk) +{ + dmu_xuio_t *priv; + uio_t *uio = &xuio->xu_uio; + + uio->uio_iovcnt = nblk; + uio->uio_iov = kmem_zalloc(nblk * sizeof (iovec_t), KM_SLEEP); + + priv = kmem_zalloc(sizeof (dmu_xuio_t), KM_SLEEP); + priv->cnt = nblk; + priv->bufs = kmem_zalloc(nblk * sizeof (arc_buf_t *), KM_SLEEP); + priv->iovp = (iovec_t *)uio->uio_iov; + XUIO_XUZC_PRIV(xuio) = priv; + + if (XUIO_XUZC_RW(xuio) == UIO_READ) + XUIOSTAT_INCR(xuiostat_onloan_rbuf, nblk); + else + XUIOSTAT_INCR(xuiostat_onloan_wbuf, nblk); + + return (0); +} + +void +dmu_xuio_fini(xuio_t *xuio) +{ + dmu_xuio_t *priv = XUIO_XUZC_PRIV(xuio); + int nblk = priv->cnt; + + kmem_free(priv->iovp, nblk * sizeof (iovec_t)); + kmem_free(priv->bufs, nblk * sizeof (arc_buf_t *)); + kmem_free(priv, sizeof (dmu_xuio_t)); + + if (XUIO_XUZC_RW(xuio) == UIO_READ) + XUIOSTAT_INCR(xuiostat_onloan_rbuf, -nblk); + else + XUIOSTAT_INCR(xuiostat_onloan_wbuf, -nblk); +} + +/* + * Initialize iov[priv->next] and priv->bufs[priv->next] with { off, n, abuf } + * and increase priv->next by 1. + */ +int +dmu_xuio_add(xuio_t *xuio, arc_buf_t *abuf, offset_t off, size_t n) +{ + struct iovec *iov; + uio_t *uio = &xuio->xu_uio; + dmu_xuio_t *priv = XUIO_XUZC_PRIV(xuio); + int i = priv->next++; + + ASSERT(i < priv->cnt); + ASSERT(off + n <= arc_buf_lsize(abuf)); + iov = (iovec_t *)uio->uio_iov + i; + iov->iov_base = (char *)abuf->b_data + off; + iov->iov_len = n; + priv->bufs[i] = abuf; + return (0); +} + +int +dmu_xuio_cnt(xuio_t *xuio) +{ + dmu_xuio_t *priv = XUIO_XUZC_PRIV(xuio); + return (priv->cnt); +} + +arc_buf_t * +dmu_xuio_arcbuf(xuio_t *xuio, int i) +{ + dmu_xuio_t *priv = XUIO_XUZC_PRIV(xuio); + + ASSERT(i < priv->cnt); + return (priv->bufs[i]); +} + +void +dmu_xuio_clear(xuio_t *xuio, int i) +{ + dmu_xuio_t *priv = XUIO_XUZC_PRIV(xuio); + + ASSERT(i < priv->cnt); + priv->bufs[i] = NULL; +} +#endif /* HAVE_UIO_ZEROCOPY */ + +static void +xuio_stat_init(void) +{ + xuio_ksp = kstat_create("zfs", 0, "xuio_stats", "misc", + KSTAT_TYPE_NAMED, sizeof (xuio_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + if (xuio_ksp != NULL) { + xuio_ksp->ks_data = &xuio_stats; + kstat_install(xuio_ksp); + } +} + +static void +xuio_stat_fini(void) +{ + if (xuio_ksp != NULL) { + kstat_delete(xuio_ksp); + xuio_ksp = NULL; + } +} + +void +xuio_stat_wbuf_copied(void) +{ + XUIOSTAT_BUMP(xuiostat_wbuf_copied); +} + +void +xuio_stat_wbuf_nocopy(void) +{ + XUIOSTAT_BUMP(xuiostat_wbuf_nocopy); +} + +#ifdef _KERNEL +int +dmu_read_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size) +{ + dmu_buf_t **dbp; + int numbufs, i, err; +#ifdef HAVE_UIO_ZEROCOPY + xuio_t *xuio = NULL; +#endif + + /* + * NB: we could do this block-at-a-time, but it's nice + * to be reading in parallel. + */ + err = dmu_buf_hold_array_by_dnode(dn, uio->uio_loffset, size, + TRUE, FTAG, &numbufs, &dbp, 0); + if (err) + return (err); + + for (i = 0; i < numbufs; i++) { + uint64_t tocpy; + int64_t bufoff; + dmu_buf_t *db = dbp[i]; + + ASSERT(size > 0); + + bufoff = uio->uio_loffset - db->db_offset; + tocpy = MIN(db->db_size - bufoff, size); + +#ifdef HAVE_UIO_ZEROCOPY + if (xuio) { + dmu_buf_impl_t *dbi = (dmu_buf_impl_t *)db; + arc_buf_t *dbuf_abuf = dbi->db_buf; + arc_buf_t *abuf = dbuf_loan_arcbuf(dbi); + err = dmu_xuio_add(xuio, abuf, bufoff, tocpy); + if (!err) { + uio->uio_resid -= tocpy; + uio->uio_loffset += tocpy; + } + + if (abuf == dbuf_abuf) + XUIOSTAT_BUMP(xuiostat_rbuf_nocopy); + else + XUIOSTAT_BUMP(xuiostat_rbuf_copied); + } else +#endif + err = uiomove((char *)db->db_data + bufoff, tocpy, + UIO_READ, uio); + if (err) + break; + + size -= tocpy; + } + dmu_buf_rele_array(dbp, numbufs, FTAG); + + return (err); +} + +/* + * Read 'size' bytes into the uio buffer. + * From object zdb->db_object. + * Starting at offset uio->uio_loffset. + * + * If the caller already has a dbuf in the target object + * (e.g. its bonus buffer), this routine is faster than dmu_read_uio(), + * because we don't have to find the dnode_t for the object. + */ +int +dmu_read_uio_dbuf(dmu_buf_t *zdb, uio_t *uio, uint64_t size) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)zdb; + dnode_t *dn; + int err; + + if (size == 0) + return (0); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + err = dmu_read_uio_dnode(dn, uio, size); + DB_DNODE_EXIT(db); + + return (err); +} + +/* + * Read 'size' bytes into the uio buffer. + * From the specified object + * Starting at offset uio->uio_loffset. + */ +int +dmu_read_uio(objset_t *os, uint64_t object, uio_t *uio, uint64_t size) +{ + dnode_t *dn; + int err; + + if (size == 0) + return (0); + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + + err = dmu_read_uio_dnode(dn, uio, size); + + dnode_rele(dn, FTAG); + + return (err); +} + +int +dmu_write_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size, dmu_tx_t *tx) +{ + dmu_buf_t **dbp; + int numbufs; + int err = 0; + int i; + + err = dmu_buf_hold_array_by_dnode(dn, uio->uio_loffset, size, + FALSE, FTAG, &numbufs, &dbp, DMU_READ_PREFETCH); + if (err) + return (err); + + for (i = 0; i < numbufs; i++) { + uint64_t tocpy; + int64_t bufoff; + dmu_buf_t *db = dbp[i]; + + ASSERT(size > 0); + + bufoff = uio->uio_loffset - db->db_offset; + tocpy = MIN(db->db_size - bufoff, size); + + ASSERT(i == 0 || i == numbufs-1 || tocpy == db->db_size); + + if (tocpy == db->db_size) + dmu_buf_will_fill(db, tx); + else + dmu_buf_will_dirty(db, tx); + + /* + * XXX uiomove could block forever (eg.nfs-backed + * pages). There needs to be a uiolockdown() function + * to lock the pages in memory, so that uiomove won't + * block. + */ + err = uiomove((char *)db->db_data + bufoff, tocpy, + UIO_WRITE, uio); + + if (tocpy == db->db_size) + dmu_buf_fill_done(db, tx); + + if (err) + break; + + size -= tocpy; + } + + dmu_buf_rele_array(dbp, numbufs, FTAG); + return (err); +} + +/* + * Write 'size' bytes from the uio buffer. + * To object zdb->db_object. + * Starting at offset uio->uio_loffset. + * + * If the caller already has a dbuf in the target object + * (e.g. its bonus buffer), this routine is faster than dmu_write_uio(), + * because we don't have to find the dnode_t for the object. + */ +int +dmu_write_uio_dbuf(dmu_buf_t *zdb, uio_t *uio, uint64_t size, + dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)zdb; + dnode_t *dn; + int err; + + if (size == 0) + return (0); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + err = dmu_write_uio_dnode(dn, uio, size, tx); + DB_DNODE_EXIT(db); + + return (err); +} + +/* + * Write 'size' bytes from the uio buffer. + * To the specified object. + * Starting at offset uio->uio_loffset. + */ +int +dmu_write_uio(objset_t *os, uint64_t object, uio_t *uio, uint64_t size, + dmu_tx_t *tx) +{ + dnode_t *dn; + int err; + + if (size == 0) + return (0); + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + + err = dmu_write_uio_dnode(dn, uio, size, tx); + + dnode_rele(dn, FTAG); + + return (err); +} +#endif /* _KERNEL */ + +/* + * Allocate a loaned anonymous arc buffer. + */ +arc_buf_t * +dmu_request_arcbuf(dmu_buf_t *handle, int size) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)handle; + + return (arc_loan_buf(db->db_objset->os_spa, B_FALSE, size)); +} + +/* + * Free a loaned arc buffer. + */ +void +dmu_return_arcbuf(arc_buf_t *buf) +{ + arc_return_buf(buf, FTAG); + arc_buf_destroy(buf, FTAG); +} + +/* + * When possible directly assign passed loaned arc buffer to a dbuf. + * If this is not possible copy the contents of passed arc buf via + * dmu_write(). + */ +void +dmu_assign_arcbuf(dmu_buf_t *handle, uint64_t offset, arc_buf_t *buf, + dmu_tx_t *tx) +{ + dmu_buf_impl_t *dbuf = (dmu_buf_impl_t *)handle; + dnode_t *dn; + dmu_buf_impl_t *db; + uint32_t blksz = (uint32_t)arc_buf_lsize(buf); + uint64_t blkid; + + DB_DNODE_ENTER(dbuf); + dn = DB_DNODE(dbuf); + rw_enter(&dn->dn_struct_rwlock, RW_READER); + blkid = dbuf_whichblock(dn, 0, offset); + VERIFY((db = dbuf_hold(dn, blkid, FTAG)) != NULL); + rw_exit(&dn->dn_struct_rwlock); + DB_DNODE_EXIT(dbuf); + + /* + * We can only assign if the offset is aligned, the arc buf is the + * same size as the dbuf, and the dbuf is not metadata. + */ + if (offset == db->db.db_offset && blksz == db->db.db_size) { + dbuf_assign_arcbuf(db, buf, tx); + dbuf_rele(db, FTAG); + } else { + objset_t *os; + uint64_t object; + + /* compressed bufs must always be assignable to their dbuf */ + ASSERT3U(arc_get_compression(buf), ==, ZIO_COMPRESS_OFF); + ASSERT(!(buf->b_flags & ARC_BUF_FLAG_COMPRESSED)); + + DB_DNODE_ENTER(dbuf); + dn = DB_DNODE(dbuf); + os = dn->dn_objset; + object = dn->dn_object; + DB_DNODE_EXIT(dbuf); + + dbuf_rele(db, FTAG); + dmu_write(os, object, offset, blksz, buf->b_data, tx); + dmu_return_arcbuf(buf); + XUIOSTAT_BUMP(xuiostat_wbuf_copied); + } +} + +typedef struct { + dbuf_dirty_record_t *dsa_dr; + dmu_sync_cb_t *dsa_done; + zgd_t *dsa_zgd; + dmu_tx_t *dsa_tx; +} dmu_sync_arg_t; + +/* ARGSUSED */ +static void +dmu_sync_ready(zio_t *zio, arc_buf_t *buf, void *varg) +{ + dmu_sync_arg_t *dsa = varg; + dmu_buf_t *db = dsa->dsa_zgd->zgd_db; + blkptr_t *bp = zio->io_bp; + + if (zio->io_error == 0) { + if (BP_IS_HOLE(bp)) { + /* + * A block of zeros may compress to a hole, but the + * block size still needs to be known for replay. + */ + BP_SET_LSIZE(bp, db->db_size); + } else if (!BP_IS_EMBEDDED(bp)) { + ASSERT(BP_GET_LEVEL(bp) == 0); + bp->blk_fill = 1; + } + } +} + +static void +dmu_sync_late_arrival_ready(zio_t *zio) +{ + dmu_sync_ready(zio, NULL, zio->io_private); +} + +/* ARGSUSED */ +static void +dmu_sync_done(zio_t *zio, arc_buf_t *buf, void *varg) +{ + dmu_sync_arg_t *dsa = varg; + dbuf_dirty_record_t *dr = dsa->dsa_dr; + dmu_buf_impl_t *db = dr->dr_dbuf; + + mutex_enter(&db->db_mtx); + ASSERT(dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC); + if (zio->io_error == 0) { + dr->dt.dl.dr_nopwrite = !!(zio->io_flags & ZIO_FLAG_NOPWRITE); + if (dr->dt.dl.dr_nopwrite) { + blkptr_t *bp = zio->io_bp; + blkptr_t *bp_orig = &zio->io_bp_orig; + uint8_t chksum = BP_GET_CHECKSUM(bp_orig); + + ASSERT(BP_EQUAL(bp, bp_orig)); + VERIFY(BP_EQUAL(bp, db->db_blkptr)); + ASSERT(zio->io_prop.zp_compress != ZIO_COMPRESS_OFF); + VERIFY(zio_checksum_table[chksum].ci_flags & + ZCHECKSUM_FLAG_NOPWRITE); + } + dr->dt.dl.dr_overridden_by = *zio->io_bp; + dr->dt.dl.dr_override_state = DR_OVERRIDDEN; + dr->dt.dl.dr_copies = zio->io_prop.zp_copies; + + /* + * Old style holes are filled with all zeros, whereas + * new-style holes maintain their lsize, type, level, + * and birth time (see zio_write_compress). While we + * need to reset the BP_SET_LSIZE() call that happened + * in dmu_sync_ready for old style holes, we do *not* + * want to wipe out the information contained in new + * style holes. Thus, only zero out the block pointer if + * it's an old style hole. + */ + if (BP_IS_HOLE(&dr->dt.dl.dr_overridden_by) && + dr->dt.dl.dr_overridden_by.blk_birth == 0) + BP_ZERO(&dr->dt.dl.dr_overridden_by); + } else { + dr->dt.dl.dr_override_state = DR_NOT_OVERRIDDEN; + } + cv_broadcast(&db->db_changed); + mutex_exit(&db->db_mtx); + + dsa->dsa_done(dsa->dsa_zgd, zio->io_error); + + kmem_free(dsa, sizeof (*dsa)); +} + +static void +dmu_sync_late_arrival_done(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + dmu_sync_arg_t *dsa = zio->io_private; + ASSERTV(blkptr_t *bp_orig = &zio->io_bp_orig); + + if (zio->io_error == 0 && !BP_IS_HOLE(bp)) { + ASSERT(!(zio->io_flags & ZIO_FLAG_NOPWRITE)); + ASSERT(BP_IS_HOLE(bp_orig) || !BP_EQUAL(bp, bp_orig)); + ASSERT(zio->io_bp->blk_birth == zio->io_txg); + ASSERT(zio->io_txg > spa_syncing_txg(zio->io_spa)); + zio_free(zio->io_spa, zio->io_txg, zio->io_bp); + } + + dmu_tx_commit(dsa->dsa_tx); + + dsa->dsa_done(dsa->dsa_zgd, zio->io_error); + + abd_put(zio->io_abd); + kmem_free(dsa, sizeof (*dsa)); +} + +static int +dmu_sync_late_arrival(zio_t *pio, objset_t *os, dmu_sync_cb_t *done, zgd_t *zgd, + zio_prop_t *zp, zbookmark_phys_t *zb) +{ + dmu_sync_arg_t *dsa; + dmu_tx_t *tx; + + tx = dmu_tx_create(os); + dmu_tx_hold_space(tx, zgd->zgd_db->db_size); + if (dmu_tx_assign(tx, TXG_WAIT) != 0) { + dmu_tx_abort(tx); + /* Make zl_get_data do txg_waited_synced() */ + return (SET_ERROR(EIO)); + } + + dsa = kmem_alloc(sizeof (dmu_sync_arg_t), KM_SLEEP); + dsa->dsa_dr = NULL; + dsa->dsa_done = done; + dsa->dsa_zgd = zgd; + dsa->dsa_tx = tx; + + /* + * Since we are currently syncing this txg, it's nontrivial to + * determine what BP to nopwrite against, so we disable nopwrite. + * + * When syncing, the db_blkptr is initially the BP of the previous + * txg. We can not nopwrite against it because it will be changed + * (this is similar to the non-late-arrival case where the dbuf is + * dirty in a future txg). + * + * Then dbuf_write_ready() sets bp_blkptr to the location we will write. + * We can not nopwrite against it because although the BP will not + * (typically) be changed, the data has not yet been persisted to this + * location. + * + * Finally, when dbuf_write_done() is called, it is theoretically + * possible to always nopwrite, because the data that was written in + * this txg is the same data that we are trying to write. However we + * would need to check that this dbuf is not dirty in any future + * txg's (as we do in the normal dmu_sync() path). For simplicity, we + * don't nopwrite in this case. + */ + zp->zp_nopwrite = B_FALSE; + + zio_nowait(zio_write(pio, os->os_spa, dmu_tx_get_txg(tx), zgd->zgd_bp, + abd_get_from_buf(zgd->zgd_db->db_data, zgd->zgd_db->db_size), + zgd->zgd_db->db_size, zgd->zgd_db->db_size, zp, + dmu_sync_late_arrival_ready, NULL, NULL, dmu_sync_late_arrival_done, + dsa, ZIO_PRIORITY_SYNC_WRITE, ZIO_FLAG_CANFAIL, zb)); + + return (0); +} + +/* + * Intent log support: sync the block associated with db to disk. + * N.B. and XXX: the caller is responsible for making sure that the + * data isn't changing while dmu_sync() is writing it. + * + * Return values: + * + * EEXIST: this txg has already been synced, so there's nothing to do. + * The caller should not log the write. + * + * ENOENT: the block was dbuf_free_range()'d, so there's nothing to do. + * The caller should not log the write. + * + * EALREADY: this block is already in the process of being synced. + * The caller should track its progress (somehow). + * + * EIO: could not do the I/O. + * The caller should do a txg_wait_synced(). + * + * 0: the I/O has been initiated. + * The caller should log this blkptr in the done callback. + * It is possible that the I/O will fail, in which case + * the error will be reported to the done callback and + * propagated to pio from zio_done(). + */ +int +dmu_sync(zio_t *pio, uint64_t txg, dmu_sync_cb_t *done, zgd_t *zgd) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)zgd->zgd_db; + objset_t *os = db->db_objset; + dsl_dataset_t *ds = os->os_dsl_dataset; + dbuf_dirty_record_t *dr; + dmu_sync_arg_t *dsa; + zbookmark_phys_t zb; + zio_prop_t zp; + dnode_t *dn; + + ASSERT(pio != NULL); + ASSERT(txg != 0); + + /* dbuf is within the locked range */ + ASSERT3U(db->db.db_offset, >=, zgd->zgd_rl->r_off); + ASSERT3U(db->db.db_offset + db->db.db_size, <=, + zgd->zgd_rl->r_off + zgd->zgd_rl->r_len); + + SET_BOOKMARK(&zb, ds->ds_object, + db->db.db_object, db->db_level, db->db_blkid); + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + dmu_write_policy(os, dn, db->db_level, WP_DMU_SYNC, &zp); + DB_DNODE_EXIT(db); + + /* + * If we're frozen (running ziltest), we always need to generate a bp. + */ + if (txg > spa_freeze_txg(os->os_spa)) + return (dmu_sync_late_arrival(pio, os, done, zgd, &zp, &zb)); + + /* + * Grabbing db_mtx now provides a barrier between dbuf_sync_leaf() + * and us. If we determine that this txg is not yet syncing, + * but it begins to sync a moment later, that's OK because the + * sync thread will block in dbuf_sync_leaf() until we drop db_mtx. + */ + mutex_enter(&db->db_mtx); + + if (txg <= spa_last_synced_txg(os->os_spa)) { + /* + * This txg has already synced. There's nothing to do. + */ + mutex_exit(&db->db_mtx); + return (SET_ERROR(EEXIST)); + } + + if (txg <= spa_syncing_txg(os->os_spa)) { + /* + * This txg is currently syncing, so we can't mess with + * the dirty record anymore; just write a new log block. + */ + mutex_exit(&db->db_mtx); + return (dmu_sync_late_arrival(pio, os, done, zgd, &zp, &zb)); + } + + dr = db->db_last_dirty; + while (dr && dr->dr_txg != txg) + dr = dr->dr_next; + + if (dr == NULL) { + /* + * There's no dr for this dbuf, so it must have been freed. + * There's no need to log writes to freed blocks, so we're done. + */ + mutex_exit(&db->db_mtx); + return (SET_ERROR(ENOENT)); + } + + ASSERT(dr->dr_next == NULL || dr->dr_next->dr_txg < txg); + + if (db->db_blkptr != NULL) { + /* + * We need to fill in zgd_bp with the current blkptr so that + * the nopwrite code can check if we're writing the same + * data that's already on disk. We can only nopwrite if we + * are sure that after making the copy, db_blkptr will not + * change until our i/o completes. We ensure this by + * holding the db_mtx, and only allowing nopwrite if the + * block is not already dirty (see below). This is verified + * by dmu_sync_done(), which VERIFYs that the db_blkptr has + * not changed. + */ + *zgd->zgd_bp = *db->db_blkptr; + } + + /* + * Assume the on-disk data is X, the current syncing data (in + * txg - 1) is Y, and the current in-memory data is Z (currently + * in dmu_sync). + * + * We usually want to perform a nopwrite if X and Z are the + * same. However, if Y is different (i.e. the BP is going to + * change before this write takes effect), then a nopwrite will + * be incorrect - we would override with X, which could have + * been freed when Y was written. + * + * (Note that this is not a concern when we are nop-writing from + * syncing context, because X and Y must be identical, because + * all previous txgs have been synced.) + * + * Therefore, we disable nopwrite if the current BP could change + * before this TXG. There are two ways it could change: by + * being dirty (dr_next is non-NULL), or by being freed + * (dnode_block_freed()). This behavior is verified by + * zio_done(), which VERIFYs that the override BP is identical + * to the on-disk BP. + */ + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if (dr->dr_next != NULL || dnode_block_freed(dn, db->db_blkid)) + zp.zp_nopwrite = B_FALSE; + DB_DNODE_EXIT(db); + + ASSERT(dr->dr_txg == txg); + if (dr->dt.dl.dr_override_state == DR_IN_DMU_SYNC || + dr->dt.dl.dr_override_state == DR_OVERRIDDEN) { + /* + * We have already issued a sync write for this buffer, + * or this buffer has already been synced. It could not + * have been dirtied since, or we would have cleared the state. + */ + mutex_exit(&db->db_mtx); + return (SET_ERROR(EALREADY)); + } + + ASSERT(dr->dt.dl.dr_override_state == DR_NOT_OVERRIDDEN); + dr->dt.dl.dr_override_state = DR_IN_DMU_SYNC; + mutex_exit(&db->db_mtx); + + dsa = kmem_alloc(sizeof (dmu_sync_arg_t), KM_SLEEP); + dsa->dsa_dr = dr; + dsa->dsa_done = done; + dsa->dsa_zgd = zgd; + dsa->dsa_tx = NULL; + + zio_nowait(arc_write(pio, os->os_spa, txg, + zgd->zgd_bp, dr->dt.dl.dr_data, DBUF_IS_L2CACHEABLE(db), + &zp, dmu_sync_ready, NULL, NULL, dmu_sync_done, dsa, + ZIO_PRIORITY_SYNC_WRITE, ZIO_FLAG_CANFAIL, &zb)); + + return (0); +} + +int +dmu_object_set_blocksize(objset_t *os, uint64_t object, uint64_t size, int ibs, + dmu_tx_t *tx) +{ + dnode_t *dn; + int err; + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + err = dnode_set_blksz(dn, size, ibs, tx); + dnode_rele(dn, FTAG); + return (err); +} + +void +dmu_object_set_checksum(objset_t *os, uint64_t object, uint8_t checksum, + dmu_tx_t *tx) +{ + dnode_t *dn; + + /* + * Send streams include each object's checksum function. This + * check ensures that the receiving system can understand the + * checksum function transmitted. + */ + ASSERT3U(checksum, <, ZIO_CHECKSUM_LEGACY_FUNCTIONS); + + VERIFY0(dnode_hold(os, object, FTAG, &dn)); + ASSERT3U(checksum, <, ZIO_CHECKSUM_FUNCTIONS); + dn->dn_checksum = checksum; + dnode_setdirty(dn, tx); + dnode_rele(dn, FTAG); +} + +void +dmu_object_set_compress(objset_t *os, uint64_t object, uint8_t compress, + dmu_tx_t *tx) +{ + dnode_t *dn; + + /* + * Send streams include each object's compression function. This + * check ensures that the receiving system can understand the + * compression function transmitted. + */ + ASSERT3U(compress, <, ZIO_COMPRESS_LEGACY_FUNCTIONS); + + VERIFY0(dnode_hold(os, object, FTAG, &dn)); + dn->dn_compress = compress; + dnode_setdirty(dn, tx); + dnode_rele(dn, FTAG); +} + +int zfs_mdcomp_disable = 0; + +/* + * When the "redundant_metadata" property is set to "most", only indirect + * blocks of this level and higher will have an additional ditto block. + */ +int zfs_redundant_metadata_most_ditto_level = 2; + +void +dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp) +{ + dmu_object_type_t type = dn ? dn->dn_type : DMU_OT_OBJSET; + boolean_t ismd = (level > 0 || DMU_OT_IS_METADATA(type) || + (wp & WP_SPILL)); + enum zio_checksum checksum = os->os_checksum; + enum zio_compress compress = os->os_compress; + enum zio_checksum dedup_checksum = os->os_dedup_checksum; + boolean_t dedup = B_FALSE; + boolean_t nopwrite = B_FALSE; + boolean_t dedup_verify = os->os_dedup_verify; + int copies = os->os_copies; + + /* + * We maintain different write policies for each of the following + * types of data: + * 1. metadata + * 2. preallocated blocks (i.e. level-0 blocks of a dump device) + * 3. all other level 0 blocks + */ + if (ismd) { + if (zfs_mdcomp_disable) { + compress = ZIO_COMPRESS_EMPTY; + } else { + /* + * XXX -- we should design a compression algorithm + * that specializes in arrays of bps. + */ + compress = zio_compress_select(os->os_spa, + ZIO_COMPRESS_ON, ZIO_COMPRESS_ON); + } + + /* + * Metadata always gets checksummed. If the data + * checksum is multi-bit correctable, and it's not a + * ZBT-style checksum, then it's suitable for metadata + * as well. Otherwise, the metadata checksum defaults + * to fletcher4. + */ + if (!(zio_checksum_table[checksum].ci_flags & + ZCHECKSUM_FLAG_METADATA) || + (zio_checksum_table[checksum].ci_flags & + ZCHECKSUM_FLAG_EMBEDDED)) + checksum = ZIO_CHECKSUM_FLETCHER_4; + + if (os->os_redundant_metadata == ZFS_REDUNDANT_METADATA_ALL || + (os->os_redundant_metadata == + ZFS_REDUNDANT_METADATA_MOST && + (level >= zfs_redundant_metadata_most_ditto_level || + DMU_OT_IS_METADATA(type) || (wp & WP_SPILL)))) + copies++; + } else if (wp & WP_NOFILL) { + ASSERT(level == 0); + + /* + * If we're writing preallocated blocks, we aren't actually + * writing them so don't set any policy properties. These + * blocks are currently only used by an external subsystem + * outside of zfs (i.e. dump) and not written by the zio + * pipeline. + */ + compress = ZIO_COMPRESS_OFF; + checksum = ZIO_CHECKSUM_OFF; + } else { + compress = zio_compress_select(os->os_spa, dn->dn_compress, + compress); + + checksum = (dedup_checksum == ZIO_CHECKSUM_OFF) ? + zio_checksum_select(dn->dn_checksum, checksum) : + dedup_checksum; + + /* + * Determine dedup setting. If we are in dmu_sync(), + * we won't actually dedup now because that's all + * done in syncing context; but we do want to use the + * dedup checkum. If the checksum is not strong + * enough to ensure unique signatures, force + * dedup_verify. + */ + if (dedup_checksum != ZIO_CHECKSUM_OFF) { + dedup = (wp & WP_DMU_SYNC) ? B_FALSE : B_TRUE; + if (!(zio_checksum_table[checksum].ci_flags & + ZCHECKSUM_FLAG_DEDUP)) + dedup_verify = B_TRUE; + } + + /* + * Enable nopwrite if we have secure enough checksum + * algorithm (see comment in zio_nop_write) and + * compression is enabled. We don't enable nopwrite if + * dedup is enabled as the two features are mutually + * exclusive. + */ + nopwrite = (!dedup && (zio_checksum_table[checksum].ci_flags & + ZCHECKSUM_FLAG_NOPWRITE) && + compress != ZIO_COMPRESS_OFF && zfs_nopwrite_enabled); + } + + zp->zp_checksum = checksum; + zp->zp_compress = compress; + ASSERT3U(zp->zp_compress, !=, ZIO_COMPRESS_INHERIT); + + zp->zp_type = (wp & WP_SPILL) ? dn->dn_bonustype : type; + zp->zp_level = level; + zp->zp_copies = MIN(copies, spa_max_replication(os->os_spa)); + zp->zp_dedup = dedup; + zp->zp_dedup_verify = dedup && dedup_verify; + zp->zp_nopwrite = nopwrite; +} + +/* + * This function is only called from zfs_holey_common() for zpl_llseek() + * in order to determine the location of holes. In order to accurately + * report holes all dirty data must be synced to disk. This causes extremely + * poor performance when seeking for holes in a dirty file. As a compromise, + * only provide hole data when the dnode is clean. When a dnode is dirty + * report the dnode as having no holes which is always a safe thing to do. + */ +int +dmu_offset_next(objset_t *os, uint64_t object, boolean_t hole, uint64_t *off) +{ + dnode_t *dn; + int i, err; + boolean_t clean = B_TRUE; + + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + + /* + * Check if dnode is dirty + */ + for (i = 0; i < TXG_SIZE; i++) { + if (list_link_active(&dn->dn_dirty_link[i])) { + clean = B_FALSE; + break; + } + } + + /* + * If compatibility option is on, sync any current changes before + * we go trundling through the block pointers. + */ + if (!clean && zfs_dmu_offset_next_sync) { + clean = B_TRUE; + dnode_rele(dn, FTAG); + txg_wait_synced(dmu_objset_pool(os), 0); + err = dnode_hold(os, object, FTAG, &dn); + if (err) + return (err); + } + + if (clean) + err = dnode_next_offset(dn, + (hole ? DNODE_FIND_HOLE : 0), off, 1, 1, 0); + else + err = SET_ERROR(EBUSY); + + dnode_rele(dn, FTAG); + + return (err); +} + +void +__dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi) +{ + dnode_phys_t *dnp = dn->dn_phys; + int i; + + doi->doi_data_block_size = dn->dn_datablksz; + doi->doi_metadata_block_size = dn->dn_indblkshift ? + 1ULL << dn->dn_indblkshift : 0; + doi->doi_type = dn->dn_type; + doi->doi_bonus_type = dn->dn_bonustype; + doi->doi_bonus_size = dn->dn_bonuslen; + doi->doi_dnodesize = dn->dn_num_slots << DNODE_SHIFT; + doi->doi_indirection = dn->dn_nlevels; + doi->doi_checksum = dn->dn_checksum; + doi->doi_compress = dn->dn_compress; + doi->doi_nblkptr = dn->dn_nblkptr; + doi->doi_physical_blocks_512 = (DN_USED_BYTES(dnp) + 256) >> 9; + doi->doi_max_offset = (dn->dn_maxblkid + 1) * dn->dn_datablksz; + doi->doi_fill_count = 0; + for (i = 0; i < dnp->dn_nblkptr; i++) + doi->doi_fill_count += BP_GET_FILL(&dnp->dn_blkptr[i]); +} + +void +dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi) +{ + rw_enter(&dn->dn_struct_rwlock, RW_READER); + mutex_enter(&dn->dn_mtx); + + __dmu_object_info_from_dnode(dn, doi); + + mutex_exit(&dn->dn_mtx); + rw_exit(&dn->dn_struct_rwlock); +} + +/* + * Get information on a DMU object. + * If doi is NULL, just indicates whether the object exists. + */ +int +dmu_object_info(objset_t *os, uint64_t object, dmu_object_info_t *doi) +{ + dnode_t *dn; + int err = dnode_hold(os, object, FTAG, &dn); + + if (err) + return (err); + + if (doi != NULL) + dmu_object_info_from_dnode(dn, doi); + + dnode_rele(dn, FTAG); + return (0); +} + +/* + * As above, but faster; can be used when you have a held dbuf in hand. + */ +void +dmu_object_info_from_db(dmu_buf_t *db_fake, dmu_object_info_t *doi) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + + DB_DNODE_ENTER(db); + dmu_object_info_from_dnode(DB_DNODE(db), doi); + DB_DNODE_EXIT(db); +} + +/* + * Faster still when you only care about the size. + * This is specifically optimized for zfs_getattr(). + */ +void +dmu_object_size_from_db(dmu_buf_t *db_fake, uint32_t *blksize, + u_longlong_t *nblk512) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + + *blksize = dn->dn_datablksz; + /* add in number of slots used for the dnode itself */ + *nblk512 = ((DN_USED_BYTES(dn->dn_phys) + SPA_MINBLOCKSIZE/2) >> + SPA_MINBLOCKSHIFT) + dn->dn_num_slots; + DB_DNODE_EXIT(db); +} + +void +dmu_object_dnsize_from_db(dmu_buf_t *db_fake, int *dnsize) +{ + dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + *dnsize = dn->dn_num_slots << DNODE_SHIFT; + DB_DNODE_EXIT(db); +} + +void +byteswap_uint64_array(void *vbuf, size_t size) +{ + uint64_t *buf = vbuf; + size_t count = size >> 3; + int i; + + ASSERT((size & 7) == 0); + + for (i = 0; i < count; i++) + buf[i] = BSWAP_64(buf[i]); +} + +void +byteswap_uint32_array(void *vbuf, size_t size) +{ + uint32_t *buf = vbuf; + size_t count = size >> 2; + int i; + + ASSERT((size & 3) == 0); + + for (i = 0; i < count; i++) + buf[i] = BSWAP_32(buf[i]); +} + +void +byteswap_uint16_array(void *vbuf, size_t size) +{ + uint16_t *buf = vbuf; + size_t count = size >> 1; + int i; + + ASSERT((size & 1) == 0); + + for (i = 0; i < count; i++) + buf[i] = BSWAP_16(buf[i]); +} + +/* ARGSUSED */ +void +byteswap_uint8_array(void *vbuf, size_t size) +{ +} + +void +dmu_init(void) +{ + abd_init(); + zfs_dbgmsg_init(); + sa_cache_init(); + xuio_stat_init(); + dmu_objset_init(); + dnode_init(); + zfetch_init(); + dmu_tx_init(); + l2arc_init(); + arc_init(); + dbuf_init(); +} + +void +dmu_fini(void) +{ + arc_fini(); /* arc depends on l2arc, so arc must go first */ + l2arc_fini(); + dmu_tx_fini(); + zfetch_fini(); + dbuf_fini(); + dnode_fini(); + dmu_objset_fini(); + xuio_stat_fini(); + sa_cache_fini(); + zfs_dbgmsg_fini(); + abd_fini(); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dmu_bonus_hold); +EXPORT_SYMBOL(dmu_buf_hold_array_by_bonus); +EXPORT_SYMBOL(dmu_buf_rele_array); +EXPORT_SYMBOL(dmu_prefetch); +EXPORT_SYMBOL(dmu_free_range); +EXPORT_SYMBOL(dmu_free_long_range); +EXPORT_SYMBOL(dmu_free_long_object); +EXPORT_SYMBOL(dmu_read); +EXPORT_SYMBOL(dmu_read_by_dnode); +EXPORT_SYMBOL(dmu_write); +EXPORT_SYMBOL(dmu_write_by_dnode); +EXPORT_SYMBOL(dmu_prealloc); +EXPORT_SYMBOL(dmu_object_info); +EXPORT_SYMBOL(dmu_object_info_from_dnode); +EXPORT_SYMBOL(dmu_object_info_from_db); +EXPORT_SYMBOL(dmu_object_size_from_db); +EXPORT_SYMBOL(dmu_object_dnsize_from_db); +EXPORT_SYMBOL(dmu_object_set_blocksize); +EXPORT_SYMBOL(dmu_object_set_checksum); +EXPORT_SYMBOL(dmu_object_set_compress); +EXPORT_SYMBOL(dmu_write_policy); +EXPORT_SYMBOL(dmu_sync); +EXPORT_SYMBOL(dmu_request_arcbuf); +EXPORT_SYMBOL(dmu_return_arcbuf); +EXPORT_SYMBOL(dmu_assign_arcbuf); +EXPORT_SYMBOL(dmu_buf_hold); +EXPORT_SYMBOL(dmu_ot); + +/* BEGIN CSTYLED */ +module_param(zfs_mdcomp_disable, int, 0644); +MODULE_PARM_DESC(zfs_mdcomp_disable, "Disable meta data compression"); + +module_param(zfs_nopwrite_enabled, int, 0644); +MODULE_PARM_DESC(zfs_nopwrite_enabled, "Enable NOP writes"); + +module_param(zfs_per_txg_dirty_frees_percent, ulong, 0644); +MODULE_PARM_DESC(zfs_per_txg_dirty_frees_percent, + "percentage of dirtied blocks from frees in one TXG"); + +module_param(zfs_dmu_offset_next_sync, int, 0644); +MODULE_PARM_DESC(zfs_dmu_offset_next_sync, + "Enable forcing txg sync to find holes"); + +/* END CSTYLED */ + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_diff.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_diff.c @@ -0,0 +1,223 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct diffarg { + struct vnode *da_vp; /* file to which we are reporting */ + offset_t *da_offp; + int da_err; /* error that stopped diff search */ + dmu_diff_record_t da_ddr; +}; + +static int +write_record(struct diffarg *da) +{ + ssize_t resid; /* have to get resid to get detailed errno */ + + if (da->da_ddr.ddr_type == DDR_NONE) { + da->da_err = 0; + return (0); + } + + da->da_err = vn_rdwr(UIO_WRITE, da->da_vp, (caddr_t)&da->da_ddr, + sizeof (da->da_ddr), 0, UIO_SYSSPACE, FAPPEND, + RLIM64_INFINITY, CRED(), &resid); + *da->da_offp += sizeof (da->da_ddr); + return (da->da_err); +} + +static int +report_free_dnode_range(struct diffarg *da, uint64_t first, uint64_t last) +{ + ASSERT(first <= last); + if (da->da_ddr.ddr_type != DDR_FREE || + first != da->da_ddr.ddr_last + 1) { + if (write_record(da) != 0) + return (da->da_err); + da->da_ddr.ddr_type = DDR_FREE; + da->da_ddr.ddr_first = first; + da->da_ddr.ddr_last = last; + return (0); + } + da->da_ddr.ddr_last = last; + return (0); +} + +static int +report_dnode(struct diffarg *da, uint64_t object, dnode_phys_t *dnp) +{ + ASSERT(dnp != NULL); + if (dnp->dn_type == DMU_OT_NONE) + return (report_free_dnode_range(da, object, object)); + + if (da->da_ddr.ddr_type != DDR_INUSE || + object != da->da_ddr.ddr_last + 1) { + if (write_record(da) != 0) + return (da->da_err); + da->da_ddr.ddr_type = DDR_INUSE; + da->da_ddr.ddr_first = da->da_ddr.ddr_last = object; + return (0); + } + da->da_ddr.ddr_last = object; + return (0); +} + +#define DBP_SPAN(dnp, level) \ + (((uint64_t)dnp->dn_datablkszsec) << (SPA_MINBLOCKSHIFT + \ + (level) * (dnp->dn_indblkshift - SPA_BLKPTRSHIFT))) + +/* ARGSUSED */ +static int +diff_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + struct diffarg *da = arg; + int err = 0; + + if (issig(JUSTLOOKING) && issig(FORREAL)) + return (SET_ERROR(EINTR)); + + if (bp == NULL || zb->zb_object != DMU_META_DNODE_OBJECT) + return (0); + + if (BP_IS_HOLE(bp)) { + uint64_t span = DBP_SPAN(dnp, zb->zb_level); + uint64_t dnobj = (zb->zb_blkid * span) >> DNODE_SHIFT; + + err = report_free_dnode_range(da, dnobj, + dnobj + (span >> DNODE_SHIFT) - 1); + if (err) + return (err); + } else if (zb->zb_level == 0) { + dnode_phys_t *blk; + arc_buf_t *abuf; + arc_flags_t aflags = ARC_FLAG_WAIT; + int blksz = BP_GET_LSIZE(bp); + int i; + + if (arc_read(NULL, spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, + &aflags, zb) != 0) + return (SET_ERROR(EIO)); + + blk = abuf->b_data; + for (i = 0; i < blksz >> DNODE_SHIFT; i++) { + uint64_t dnobj = (zb->zb_blkid << + (DNODE_BLOCK_SHIFT - DNODE_SHIFT)) + i; + err = report_dnode(da, dnobj, blk+i); + if (err) + break; + } + arc_buf_destroy(abuf, &abuf); + if (err) + return (err); + /* Don't care about the data blocks */ + return (TRAVERSE_VISIT_NO_CHILDREN); + } + return (0); +} + +int +dmu_diff(const char *tosnap_name, const char *fromsnap_name, + struct vnode *vp, offset_t *offp) +{ + struct diffarg da; + dsl_dataset_t *fromsnap; + dsl_dataset_t *tosnap; + dsl_pool_t *dp; + int error; + uint64_t fromtxg; + + if (strchr(tosnap_name, '@') == NULL || + strchr(fromsnap_name, '@') == NULL) + return (SET_ERROR(EINVAL)); + + error = dsl_pool_hold(tosnap_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, tosnap_name, FTAG, &tosnap); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + error = dsl_dataset_hold(dp, fromsnap_name, FTAG, &fromsnap); + if (error != 0) { + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + + if (!dsl_dataset_is_before(tosnap, fromsnap, 0)) { + dsl_dataset_rele(fromsnap, FTAG); + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + return (SET_ERROR(EXDEV)); + } + + fromtxg = dsl_dataset_phys(fromsnap)->ds_creation_txg; + dsl_dataset_rele(fromsnap, FTAG); + + dsl_dataset_long_hold(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + + da.da_vp = vp; + da.da_offp = offp; + da.da_ddr.ddr_type = DDR_NONE; + da.da_ddr.ddr_first = da.da_ddr.ddr_last = 0; + da.da_err = 0; + + error = traverse_dataset(tosnap, fromtxg, + TRAVERSE_PRE | TRAVERSE_PREFETCH_METADATA, diff_cb, &da); + + if (error != 0) { + da.da_err = error; + } else { + /* we set the da.da_err we return as side-effect */ + (void) write_record(&da); + } + + dsl_dataset_long_rele(tosnap, FTAG); + dsl_dataset_rele(tosnap, FTAG); + + return (da.da_err); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_object.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_object.c @@ -0,0 +1,432 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + * Copyright 2014 HybridCluster. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include + +/* + * Each of the concurrent object allocators will grab + * 2^dmu_object_alloc_chunk_shift dnode slots at a time. The default is to + * grab 128 slots, which is 4 blocks worth. This was experimentally + * determined to be the lowest value that eliminates the measurable effect + * of lock contention from this code path. + */ +int dmu_object_alloc_chunk_shift = 7; + +uint64_t +dmu_object_alloc(objset_t *os, dmu_object_type_t ot, int blocksize, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return dmu_object_alloc_dnsize(os, ot, blocksize, bonustype, bonuslen, + 0, tx); +} + +uint64_t +dmu_object_alloc_dnsize(objset_t *os, dmu_object_type_t ot, int blocksize, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx) +{ + uint64_t object; + uint64_t L1_dnode_count = DNODES_PER_BLOCK << + (DMU_META_DNODE(os)->dn_indblkshift - SPA_BLKPTRSHIFT); + dnode_t *dn = NULL; + int dn_slots = dnodesize >> DNODE_SHIFT; + boolean_t restarted = B_FALSE; + uint64_t *cpuobj = NULL; + int dnodes_per_chunk = 1 << dmu_object_alloc_chunk_shift; + int error; + + kpreempt_disable(); + cpuobj = &os->os_obj_next_percpu[CPU_SEQID % + os->os_obj_next_percpu_len]; + kpreempt_enable(); + + if (dn_slots == 0) { + dn_slots = DNODE_MIN_SLOTS; + } else { + ASSERT3S(dn_slots, >=, DNODE_MIN_SLOTS); + ASSERT3S(dn_slots, <=, DNODE_MAX_SLOTS); + } + + /* + * The "chunk" of dnodes that is assigned to a CPU-specific + * allocator needs to be at least one block's worth, to avoid + * lock contention on the dbuf. It can be at most one L1 block's + * worth, so that the "rescan after polishing off a L1's worth" + * logic below will be sure to kick in. + */ + if (dnodes_per_chunk < DNODES_PER_BLOCK) + dnodes_per_chunk = DNODES_PER_BLOCK; + if (dnodes_per_chunk > L1_dnode_count) + dnodes_per_chunk = L1_dnode_count; + + object = *cpuobj; + for (;;) { + /* + * If we finished a chunk of dnodes, get a new one from + * the global allocator. + */ + if ((P2PHASE(object, dnodes_per_chunk) == 0) || + (P2PHASE(object + dn_slots - 1, dnodes_per_chunk) < + dn_slots)) { + DNODE_STAT_BUMP(dnode_alloc_next_chunk); + mutex_enter(&os->os_obj_lock); + ASSERT0(P2PHASE(os->os_obj_next_chunk, + dnodes_per_chunk)); + object = os->os_obj_next_chunk; + + /* + * Each time we polish off a L1 bp worth of dnodes + * (2^12 objects), move to another L1 bp that's + * still reasonably sparse (at most 1/4 full). Look + * from the beginning at most once per txg. If we + * still can't allocate from that L1 block, search + * for an empty L0 block, which will quickly skip + * to the end of the metadnode if no nearby L0 + * blocks are empty. This fallback avoids a + * pathology where full dnode blocks containing + * large dnodes appear sparse because they have a + * low blk_fill, leading to many failed allocation + * attempts. In the long term a better mechanism to + * search for sparse metadnode regions, such as + * spacemaps, could be implemented. + * + * os_scan_dnodes is set during txg sync if enough + * objects have been freed since the previous + * rescan to justify backfilling again. + * + * Note that dmu_traverse depends on the behavior + * that we use multiple blocks of the dnode object + * before going back to reuse objects. Any change + * to this algorithm should preserve that property + * or find another solution to the issues described + * in traverse_visitbp. + */ + if (P2PHASE(object, L1_dnode_count) == 0) { + uint64_t offset; + uint64_t blkfill; + int minlvl; + if (os->os_rescan_dnodes) { + offset = 0; + os->os_rescan_dnodes = B_FALSE; + } else { + offset = object << DNODE_SHIFT; + } + blkfill = restarted ? 1 : DNODES_PER_BLOCK >> 2; + minlvl = restarted ? 1 : 2; + restarted = B_TRUE; + error = dnode_next_offset(DMU_META_DNODE(os), + DNODE_FIND_HOLE, &offset, minlvl, + blkfill, 0); + if (error == 0) { + object = offset >> DNODE_SHIFT; + } + } + /* + * Note: if "restarted", we may find a L0 that + * is not suitably aligned. + */ + os->os_obj_next_chunk = + P2ALIGN(object, dnodes_per_chunk) + + dnodes_per_chunk; + (void) atomic_swap_64(cpuobj, object); + mutex_exit(&os->os_obj_lock); + } + + /* + * The value of (*cpuobj) before adding dn_slots is the object + * ID assigned to us. The value afterwards is the object ID + * assigned to whoever wants to do an allocation next. + */ + object = atomic_add_64_nv(cpuobj, dn_slots) - dn_slots; + + /* + * XXX We should check for an i/o error here and return + * up to our caller. Actually we should pre-read it in + * dmu_tx_assign(), but there is currently no mechanism + * to do so. + */ + error = dnode_hold_impl(os, object, DNODE_MUST_BE_FREE, + dn_slots, FTAG, &dn); + if (error == 0) { + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + /* + * Another thread could have allocated it; check + * again now that we have the struct lock. + */ + if (dn->dn_type == DMU_OT_NONE) { + dnode_allocate(dn, ot, blocksize, 0, + bonustype, bonuslen, dn_slots, tx); + rw_exit(&dn->dn_struct_rwlock); + dmu_tx_add_new_object(tx, dn); + dnode_rele(dn, FTAG); + return (object); + } + rw_exit(&dn->dn_struct_rwlock); + dnode_rele(dn, FTAG); + DNODE_STAT_BUMP(dnode_alloc_race); + } + + /* + * Skip to next known valid starting point on error. This + * is the start of the next block of dnodes. + */ + if (dmu_object_next(os, &object, B_TRUE, 0) != 0) { + object = P2ROUNDUP(object + 1, DNODES_PER_BLOCK); + DNODE_STAT_BUMP(dnode_alloc_next_block); + } + (void) atomic_swap_64(cpuobj, object); + } +} + +int +dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (dmu_object_claim_dnsize(os, object, ot, blocksize, bonustype, + bonuslen, 0, tx)); +} + +int +dmu_object_claim_dnsize(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonustype, int bonuslen, + int dnodesize, dmu_tx_t *tx) +{ + dnode_t *dn; + int dn_slots = dnodesize >> DNODE_SHIFT; + int err; + + if (dn_slots == 0) + dn_slots = DNODE_MIN_SLOTS; + ASSERT3S(dn_slots, >=, DNODE_MIN_SLOTS); + ASSERT3S(dn_slots, <=, DNODE_MAX_SLOTS); + + if (object == DMU_META_DNODE_OBJECT && !dmu_tx_private_ok(tx)) + return (SET_ERROR(EBADF)); + + err = dnode_hold_impl(os, object, DNODE_MUST_BE_FREE, dn_slots, + FTAG, &dn); + if (err) + return (err); + + dnode_allocate(dn, ot, blocksize, 0, bonustype, bonuslen, dn_slots, tx); + dmu_tx_add_new_object(tx, dn); + + dnode_rele(dn, FTAG); + + return (0); +} + +int +dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (dmu_object_reclaim_dnsize(os, object, ot, blocksize, bonustype, + bonuslen, 0, tx)); +} + +int +dmu_object_reclaim_dnsize(objset_t *os, uint64_t object, dmu_object_type_t ot, + int blocksize, dmu_object_type_t bonustype, int bonuslen, int dnodesize, + dmu_tx_t *tx) +{ + dnode_t *dn; + int dn_slots = dnodesize >> DNODE_SHIFT; + int err; + + if (object == DMU_META_DNODE_OBJECT) + return (SET_ERROR(EBADF)); + + err = dnode_hold_impl(os, object, DNODE_MUST_BE_ALLOCATED, 0, + FTAG, &dn); + if (err) + return (err); + + dnode_reallocate(dn, ot, blocksize, bonustype, bonuslen, dn_slots, tx); + + dnode_rele(dn, FTAG); + return (err); +} + + +int +dmu_object_free(objset_t *os, uint64_t object, dmu_tx_t *tx) +{ + dnode_t *dn; + int err; + + ASSERT(object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); + + err = dnode_hold_impl(os, object, DNODE_MUST_BE_ALLOCATED, 0, + FTAG, &dn); + if (err) + return (err); + + ASSERT(dn->dn_type != DMU_OT_NONE); + dnode_free_range(dn, 0, DMU_OBJECT_END, tx); + dnode_free(dn, tx); + dnode_rele(dn, FTAG); + + return (0); +} + +/* + * Return (in *objectp) the next object which is allocated (or a hole) + * after *object, taking into account only objects that may have been modified + * after the specified txg. + */ +int +dmu_object_next(objset_t *os, uint64_t *objectp, boolean_t hole, uint64_t txg) +{ + uint64_t offset; + uint64_t start_obj; + struct dsl_dataset *ds = os->os_dsl_dataset; + int error; + + if (*objectp == 0) { + start_obj = 1; + } else if (ds && ds->ds_feature_inuse[SPA_FEATURE_LARGE_DNODE]) { + uint64_t i = *objectp + 1; + uint64_t last_obj = *objectp | (DNODES_PER_BLOCK - 1); + dmu_object_info_t doi; + + /* + * Scan through the remaining meta dnode block. The contents + * of each slot in the block are known so it can be quickly + * checked. If the block is exhausted without a match then + * hand off to dnode_next_offset() for further scanning. + */ + while (i <= last_obj) { + error = dmu_object_info(os, i, &doi); + if (error == ENOENT) { + if (hole) { + *objectp = i; + return (0); + } else { + i++; + } + } else if (error == EEXIST) { + i++; + } else if (error == 0) { + if (hole) { + i += doi.doi_dnodesize >> DNODE_SHIFT; + } else { + *objectp = i; + return (0); + } + } else { + return (error); + } + } + + start_obj = i; + } else { + start_obj = *objectp + 1; + } + + offset = start_obj << DNODE_SHIFT; + + error = dnode_next_offset(DMU_META_DNODE(os), + (hole ? DNODE_FIND_HOLE : 0), &offset, 0, DNODES_PER_BLOCK, txg); + + *objectp = offset >> DNODE_SHIFT; + + return (error); +} + +/* + * Turn this object from old_type into DMU_OTN_ZAP_METADATA, and bump the + * refcount on SPA_FEATURE_EXTENSIBLE_DATASET. + * + * Only for use from syncing context, on MOS objects. + */ +void +dmu_object_zapify(objset_t *mos, uint64_t object, dmu_object_type_t old_type, + dmu_tx_t *tx) +{ + dnode_t *dn; + + ASSERT(dmu_tx_is_syncing(tx)); + + VERIFY0(dnode_hold(mos, object, FTAG, &dn)); + if (dn->dn_type == DMU_OTN_ZAP_METADATA) { + dnode_rele(dn, FTAG); + return; + } + ASSERT3U(dn->dn_type, ==, old_type); + ASSERT0(dn->dn_maxblkid); + dn->dn_next_type[tx->tx_txg & TXG_MASK] = dn->dn_type = + DMU_OTN_ZAP_METADATA; + dnode_setdirty(dn, tx); + dnode_rele(dn, FTAG); + + mzap_create_impl(mos, object, 0, 0, tx); + + spa_feature_incr(dmu_objset_spa(mos), + SPA_FEATURE_EXTENSIBLE_DATASET, tx); +} + +void +dmu_object_free_zapified(objset_t *mos, uint64_t object, dmu_tx_t *tx) +{ + dnode_t *dn; + dmu_object_type_t t; + + ASSERT(dmu_tx_is_syncing(tx)); + + VERIFY0(dnode_hold(mos, object, FTAG, &dn)); + t = dn->dn_type; + dnode_rele(dn, FTAG); + + if (t == DMU_OTN_ZAP_METADATA) { + spa_feature_decr(dmu_objset_spa(mos), + SPA_FEATURE_EXTENSIBLE_DATASET, tx); + } + VERIFY0(dmu_object_free(mos, object, tx)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dmu_object_alloc); +EXPORT_SYMBOL(dmu_object_alloc_dnsize); +EXPORT_SYMBOL(dmu_object_claim); +EXPORT_SYMBOL(dmu_object_claim_dnsize); +EXPORT_SYMBOL(dmu_object_reclaim); +EXPORT_SYMBOL(dmu_object_reclaim_dnsize); +EXPORT_SYMBOL(dmu_object_free); +EXPORT_SYMBOL(dmu_object_next); +EXPORT_SYMBOL(dmu_object_zapify); +EXPORT_SYMBOL(dmu_object_free_zapified); + +/* BEGIN CSTYLED */ +module_param(dmu_object_alloc_chunk_shift, int, 0644); +MODULE_PARM_DESC(dmu_object_alloc_chunk_shift, + "CPU-specific allocator grabs 2^N objects at once"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_objset.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_objset.c @@ -0,0 +1,2528 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright (c) 2015, STRATO AG, Inc. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Needed to close a window in dnode_move() that allows the objset to be freed + * before it can be safely accessed. + */ +krwlock_t os_lock; + +/* + * Tunable to overwrite the maximum number of threads for the parallelization + * of dmu_objset_find_dp, needed to speed up the import of pools with many + * datasets. + * Default is 4 times the number of leaf vdevs. + */ +int dmu_find_threads = 0; + +/* + * Backfill lower metadnode objects after this many have been freed. + * Backfilling negatively impacts object creation rates, so only do it + * if there are enough holes to fill. + */ +int dmu_rescan_dnode_threshold = 1 << DN_MAX_INDBLKSHIFT; + +static void dmu_objset_find_dp_cb(void *arg); + +static void dmu_objset_upgrade(objset_t *os, dmu_objset_upgrade_cb_t cb); +static void dmu_objset_upgrade_stop(objset_t *os); + +void +dmu_objset_init(void) +{ + rw_init(&os_lock, NULL, RW_DEFAULT, NULL); +} + +void +dmu_objset_fini(void) +{ + rw_destroy(&os_lock); +} + +spa_t * +dmu_objset_spa(objset_t *os) +{ + return (os->os_spa); +} + +zilog_t * +dmu_objset_zil(objset_t *os) +{ + return (os->os_zil); +} + +dsl_pool_t * +dmu_objset_pool(objset_t *os) +{ + dsl_dataset_t *ds; + + if ((ds = os->os_dsl_dataset) != NULL && ds->ds_dir) + return (ds->ds_dir->dd_pool); + else + return (spa_get_dsl(os->os_spa)); +} + +dsl_dataset_t * +dmu_objset_ds(objset_t *os) +{ + return (os->os_dsl_dataset); +} + +dmu_objset_type_t +dmu_objset_type(objset_t *os) +{ + return (os->os_phys->os_type); +} + +void +dmu_objset_name(objset_t *os, char *buf) +{ + dsl_dataset_name(os->os_dsl_dataset, buf); +} + +uint64_t +dmu_objset_id(objset_t *os) +{ + dsl_dataset_t *ds = os->os_dsl_dataset; + + return (ds ? ds->ds_object : 0); +} + +uint64_t +dmu_objset_dnodesize(objset_t *os) +{ + return (os->os_dnodesize); +} + +zfs_sync_type_t +dmu_objset_syncprop(objset_t *os) +{ + return (os->os_sync); +} + +zfs_logbias_op_t +dmu_objset_logbias(objset_t *os) +{ + return (os->os_logbias); +} + +static void +checksum_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance should have been done by now. + */ + ASSERT(newval != ZIO_CHECKSUM_INHERIT); + + os->os_checksum = zio_checksum_select(newval, ZIO_CHECKSUM_ON_VALUE); +} + +static void +compression_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval != ZIO_COMPRESS_INHERIT); + + os->os_compress = zio_compress_select(os->os_spa, newval, + ZIO_COMPRESS_ON); +} + +static void +copies_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval > 0); + ASSERT(newval <= spa_max_replication(os->os_spa)); + + os->os_copies = newval; +} + +static void +dedup_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + spa_t *spa = os->os_spa; + enum zio_checksum checksum; + + /* + * Inheritance should have been done by now. + */ + ASSERT(newval != ZIO_CHECKSUM_INHERIT); + + checksum = zio_checksum_dedup_select(spa, newval, ZIO_CHECKSUM_OFF); + + os->os_dedup_checksum = checksum & ZIO_CHECKSUM_MASK; + os->os_dedup_verify = !!(checksum & ZIO_CHECKSUM_VERIFY); +} + +static void +primary_cache_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval == ZFS_CACHE_ALL || newval == ZFS_CACHE_NONE || + newval == ZFS_CACHE_METADATA); + + os->os_primary_cache = newval; +} + +static void +secondary_cache_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval == ZFS_CACHE_ALL || newval == ZFS_CACHE_NONE || + newval == ZFS_CACHE_METADATA); + + os->os_secondary_cache = newval; +} + +static void +sync_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval == ZFS_SYNC_STANDARD || newval == ZFS_SYNC_ALWAYS || + newval == ZFS_SYNC_DISABLED); + + os->os_sync = newval; + if (os->os_zil) + zil_set_sync(os->os_zil, newval); +} + +static void +redundant_metadata_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + /* + * Inheritance and range checking should have been done by now. + */ + ASSERT(newval == ZFS_REDUNDANT_METADATA_ALL || + newval == ZFS_REDUNDANT_METADATA_MOST); + + os->os_redundant_metadata = newval; +} + +static void +dnodesize_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + switch (newval) { + case ZFS_DNSIZE_LEGACY: + os->os_dnodesize = DNODE_MIN_SIZE; + break; + case ZFS_DNSIZE_AUTO: + /* + * Choose a dnode size that will work well for most + * workloads if the user specified "auto". Future code + * improvements could dynamically select a dnode size + * based on observed workload patterns. + */ + os->os_dnodesize = DNODE_MIN_SIZE * 2; + break; + case ZFS_DNSIZE_1K: + case ZFS_DNSIZE_2K: + case ZFS_DNSIZE_4K: + case ZFS_DNSIZE_8K: + case ZFS_DNSIZE_16K: + os->os_dnodesize = newval; + break; + } +} + +static void +logbias_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + ASSERT(newval == ZFS_LOGBIAS_LATENCY || + newval == ZFS_LOGBIAS_THROUGHPUT); + os->os_logbias = newval; + if (os->os_zil) + zil_set_logbias(os->os_zil, newval); +} + +static void +recordsize_changed_cb(void *arg, uint64_t newval) +{ + objset_t *os = arg; + + os->os_recordsize = newval; +} + +void +dmu_objset_byteswap(void *buf, size_t size) +{ + objset_phys_t *osp = buf; + + ASSERT(size == OBJSET_OLD_PHYS_SIZE || size == sizeof (objset_phys_t)); + dnode_byteswap(&osp->os_meta_dnode); + byteswap_uint64_array(&osp->os_zil_header, sizeof (zil_header_t)); + osp->os_type = BSWAP_64(osp->os_type); + osp->os_flags = BSWAP_64(osp->os_flags); + if (size == sizeof (objset_phys_t)) { + dnode_byteswap(&osp->os_userused_dnode); + dnode_byteswap(&osp->os_groupused_dnode); + } +} + +/* + * The hash is a CRC-based hash of the objset_t pointer and the object number. + */ +static uint64_t +dnode_hash(const objset_t *os, uint64_t obj) +{ + uintptr_t osv = (uintptr_t)os; + uint64_t crc = -1ULL; + + ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY); + /* + * The low 6 bits of the pointer don't have much entropy, because + * the objset_t is larger than 2^6 bytes long. + */ + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (osv >> 6)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 0)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 8)) & 0xFF]; + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (obj >> 16)) & 0xFF]; + + crc ^= (osv>>14) ^ (obj>>24); + + return (crc); +} + +unsigned int +dnode_multilist_index_func(multilist_t *ml, void *obj) +{ + dnode_t *dn = obj; + return (dnode_hash(dn->dn_objset, dn->dn_object) % + multilist_get_num_sublists(ml)); +} + +int +dmu_objset_open_impl(spa_t *spa, dsl_dataset_t *ds, blkptr_t *bp, + objset_t **osp) +{ + objset_t *os; + int i, err; + + ASSERT(ds == NULL || MUTEX_HELD(&ds->ds_opening_lock)); + + os = kmem_zalloc(sizeof (objset_t), KM_SLEEP); + os->os_dsl_dataset = ds; + os->os_spa = spa; + os->os_rootbp = bp; + if (!BP_IS_HOLE(os->os_rootbp)) { + arc_flags_t aflags = ARC_FLAG_WAIT; + zbookmark_phys_t zb; + SET_BOOKMARK(&zb, ds ? ds->ds_object : DMU_META_OBJSET, + ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); + + if (DMU_OS_IS_L2CACHEABLE(os)) + aflags |= ARC_FLAG_L2CACHE; + + dprintf_bp(os->os_rootbp, "reading %s", ""); + err = arc_read(NULL, spa, os->os_rootbp, + arc_getbuf_func, &os->os_phys_buf, + ZIO_PRIORITY_SYNC_READ, ZIO_FLAG_CANFAIL, &aflags, &zb); + if (err != 0) { + kmem_free(os, sizeof (objset_t)); + /* convert checksum errors into IO errors */ + if (err == ECKSUM) + err = SET_ERROR(EIO); + return (err); + } + + /* Increase the blocksize if we are permitted. */ + if (spa_version(spa) >= SPA_VERSION_USERSPACE && + arc_buf_size(os->os_phys_buf) < sizeof (objset_phys_t)) { + arc_buf_t *buf = arc_alloc_buf(spa, &os->os_phys_buf, + ARC_BUFC_METADATA, sizeof (objset_phys_t)); + bzero(buf->b_data, sizeof (objset_phys_t)); + bcopy(os->os_phys_buf->b_data, buf->b_data, + arc_buf_size(os->os_phys_buf)); + arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); + os->os_phys_buf = buf; + } + + os->os_phys = os->os_phys_buf->b_data; + os->os_flags = os->os_phys->os_flags; + } else { + int size = spa_version(spa) >= SPA_VERSION_USERSPACE ? + sizeof (objset_phys_t) : OBJSET_OLD_PHYS_SIZE; + os->os_phys_buf = arc_alloc_buf(spa, &os->os_phys_buf, + ARC_BUFC_METADATA, size); + os->os_phys = os->os_phys_buf->b_data; + bzero(os->os_phys, size); + } + + /* + * Note: the changed_cb will be called once before the register + * func returns, thus changing the checksum/compression from the + * default (fletcher2/off). Snapshots don't need to know about + * checksum/compression/copies. + */ + if (ds != NULL) { + boolean_t needlock = B_FALSE; + + /* + * Note: it's valid to open the objset if the dataset is + * long-held, in which case the pool_config lock will not + * be held. + */ + if (!dsl_pool_config_held(dmu_objset_pool(os))) { + needlock = B_TRUE; + dsl_pool_config_enter(dmu_objset_pool(os), FTAG); + } + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_PRIMARYCACHE), + primary_cache_changed_cb, os); + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_SECONDARYCACHE), + secondary_cache_changed_cb, os); + } + if (!ds->ds_is_snapshot) { + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_CHECKSUM), + checksum_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_COMPRESSION), + compression_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_COPIES), + copies_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_DEDUP), + dedup_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_LOGBIAS), + logbias_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_SYNC), + sync_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name( + ZFS_PROP_REDUNDANT_METADATA), + redundant_metadata_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_RECORDSIZE), + recordsize_changed_cb, os); + } + if (err == 0) { + err = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_DNODESIZE), + dnodesize_changed_cb, os); + } + } + if (needlock) + dsl_pool_config_exit(dmu_objset_pool(os), FTAG); + if (err != 0) { + arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); + kmem_free(os, sizeof (objset_t)); + return (err); + } + } else { + /* It's the meta-objset. */ + os->os_checksum = ZIO_CHECKSUM_FLETCHER_4; + os->os_compress = ZIO_COMPRESS_ON; + os->os_copies = spa_max_replication(spa); + os->os_dedup_checksum = ZIO_CHECKSUM_OFF; + os->os_dedup_verify = B_FALSE; + os->os_logbias = ZFS_LOGBIAS_LATENCY; + os->os_sync = ZFS_SYNC_STANDARD; + os->os_primary_cache = ZFS_CACHE_ALL; + os->os_secondary_cache = ZFS_CACHE_ALL; + os->os_dnodesize = DNODE_MIN_SIZE; + } + + if (ds == NULL || !ds->ds_is_snapshot) + os->os_zil_header = os->os_phys->os_zil_header; + os->os_zil = zil_alloc(os, &os->os_zil_header); + + for (i = 0; i < TXG_SIZE; i++) { + os->os_dirty_dnodes[i] = multilist_create(sizeof (dnode_t), + offsetof(dnode_t, dn_dirty_link[i]), + dnode_multilist_index_func); + } + list_create(&os->os_dnodes, sizeof (dnode_t), + offsetof(dnode_t, dn_link)); + list_create(&os->os_downgraded_dbufs, sizeof (dmu_buf_impl_t), + offsetof(dmu_buf_impl_t, db_link)); + + list_link_init(&os->os_evicting_node); + + mutex_init(&os->os_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&os->os_userused_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&os->os_obj_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&os->os_user_ptr_lock, NULL, MUTEX_DEFAULT, NULL); + os->os_obj_next_percpu_len = boot_ncpus; + os->os_obj_next_percpu = kmem_zalloc(os->os_obj_next_percpu_len * + sizeof (os->os_obj_next_percpu[0]), KM_SLEEP); + + dnode_special_open(os, &os->os_phys->os_meta_dnode, + DMU_META_DNODE_OBJECT, &os->os_meta_dnode); + if (arc_buf_size(os->os_phys_buf) >= sizeof (objset_phys_t)) { + dnode_special_open(os, &os->os_phys->os_userused_dnode, + DMU_USERUSED_OBJECT, &os->os_userused_dnode); + dnode_special_open(os, &os->os_phys->os_groupused_dnode, + DMU_GROUPUSED_OBJECT, &os->os_groupused_dnode); + } + + mutex_init(&os->os_upgrade_lock, NULL, MUTEX_DEFAULT, NULL); + + *osp = os; + return (0); +} + +int +dmu_objset_from_ds(dsl_dataset_t *ds, objset_t **osp) +{ + int err = 0; + + /* + * We shouldn't be doing anything with dsl_dataset_t's unless the + * pool_config lock is held, or the dataset is long-held. + */ + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool) || + dsl_dataset_long_held(ds)); + + mutex_enter(&ds->ds_opening_lock); + if (ds->ds_objset == NULL) { + objset_t *os; + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + err = dmu_objset_open_impl(dsl_dataset_get_spa(ds), + ds, dsl_dataset_get_blkptr(ds), &os); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + + if (err == 0) { + mutex_enter(&ds->ds_lock); + ASSERT(ds->ds_objset == NULL); + ds->ds_objset = os; + mutex_exit(&ds->ds_lock); + } + } + *osp = ds->ds_objset; + mutex_exit(&ds->ds_opening_lock); + return (err); +} + +/* + * Holds the pool while the objset is held. Therefore only one objset + * can be held at a time. + */ +int +dmu_objset_hold(const char *name, void *tag, objset_t **osp) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int err; + + err = dsl_pool_hold(name, tag, &dp); + if (err != 0) + return (err); + err = dsl_dataset_hold(dp, name, tag, &ds); + if (err != 0) { + dsl_pool_rele(dp, tag); + return (err); + } + + err = dmu_objset_from_ds(ds, osp); + if (err != 0) { + dsl_dataset_rele(ds, tag); + dsl_pool_rele(dp, tag); + } + + return (err); +} + +static int +dmu_objset_own_impl(dsl_dataset_t *ds, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp) +{ + int err; + + err = dmu_objset_from_ds(ds, osp); + if (err != 0) { + dsl_dataset_disown(ds, tag); + } else if (type != DMU_OST_ANY && type != (*osp)->os_phys->os_type) { + dsl_dataset_disown(ds, tag); + return (SET_ERROR(EINVAL)); + } else if (!readonly && dsl_dataset_is_snapshot(ds)) { + dsl_dataset_disown(ds, tag); + return (SET_ERROR(EROFS)); + } + return (err); +} + +/* + * dsl_pool must not be held when this is called. + * Upon successful return, there will be a longhold on the dataset, + * and the dsl_pool will not be held. + */ +int +dmu_objset_own(const char *name, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int err; + + err = dsl_pool_hold(name, FTAG, &dp); + if (err != 0) + return (err); + err = dsl_dataset_own(dp, name, tag, &ds); + if (err != 0) { + dsl_pool_rele(dp, FTAG); + return (err); + } + err = dmu_objset_own_impl(ds, type, readonly, tag, osp); + dsl_pool_rele(dp, FTAG); + + if (err == 0 && dmu_objset_userobjspace_upgradable(*osp)) + dmu_objset_userobjspace_upgrade(*osp); + + return (err); +} + +int +dmu_objset_own_obj(dsl_pool_t *dp, uint64_t obj, dmu_objset_type_t type, + boolean_t readonly, void *tag, objset_t **osp) +{ + dsl_dataset_t *ds; + int err; + + err = dsl_dataset_own_obj(dp, obj, tag, &ds); + if (err != 0) + return (err); + + return (dmu_objset_own_impl(ds, type, readonly, tag, osp)); +} + +void +dmu_objset_rele(objset_t *os, void *tag) +{ + dsl_pool_t *dp = dmu_objset_pool(os); + dsl_dataset_rele(os->os_dsl_dataset, tag); + dsl_pool_rele(dp, tag); +} + +/* + * When we are called, os MUST refer to an objset associated with a dataset + * that is owned by 'tag'; that is, is held and long held by 'tag' and ds_owner + * == tag. We will then release and reacquire ownership of the dataset while + * holding the pool config_rwlock to avoid intervening namespace or ownership + * changes may occur. + * + * This exists solely to accommodate zfs_ioc_userspace_upgrade()'s desire to + * release the hold on its dataset and acquire a new one on the dataset of the + * same name so that it can be partially torn down and reconstructed. + */ +void +dmu_objset_refresh_ownership(objset_t *os, void *tag) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds, *newds; + char name[ZFS_MAX_DATASET_NAME_LEN]; + + ds = os->os_dsl_dataset; + VERIFY3P(ds, !=, NULL); + VERIFY3P(ds->ds_owner, ==, tag); + VERIFY(dsl_dataset_long_held(ds)); + + dsl_dataset_name(ds, name); + dp = dmu_objset_pool(os); + dsl_pool_config_enter(dp, FTAG); + dmu_objset_disown(os, tag); + VERIFY0(dsl_dataset_own(dp, name, tag, &newds)); + VERIFY3P(newds, ==, os->os_dsl_dataset); + dsl_pool_config_exit(dp, FTAG); +} + +void +dmu_objset_disown(objset_t *os, void *tag) +{ + /* + * Stop upgrading thread + */ + dmu_objset_upgrade_stop(os); + dsl_dataset_disown(os->os_dsl_dataset, tag); +} + +void +dmu_objset_evict_dbufs(objset_t *os) +{ + dnode_t *dn_marker; + dnode_t *dn; + + dn_marker = kmem_alloc(sizeof (dnode_t), KM_SLEEP); + + mutex_enter(&os->os_lock); + dn = list_head(&os->os_dnodes); + while (dn != NULL) { + /* + * Skip dnodes without holds. We have to do this dance + * because dnode_add_ref() only works if there is already a + * hold. If the dnode has no holds, then it has no dbufs. + */ + if (dnode_add_ref(dn, FTAG)) { + list_insert_after(&os->os_dnodes, dn, dn_marker); + mutex_exit(&os->os_lock); + + dnode_evict_dbufs(dn); + dnode_rele(dn, FTAG); + + mutex_enter(&os->os_lock); + dn = list_next(&os->os_dnodes, dn_marker); + list_remove(&os->os_dnodes, dn_marker); + } else { + dn = list_next(&os->os_dnodes, dn); + } + } + mutex_exit(&os->os_lock); + + kmem_free(dn_marker, sizeof (dnode_t)); + + if (DMU_USERUSED_DNODE(os) != NULL) { + dnode_evict_dbufs(DMU_GROUPUSED_DNODE(os)); + dnode_evict_dbufs(DMU_USERUSED_DNODE(os)); + } + dnode_evict_dbufs(DMU_META_DNODE(os)); +} + +/* + * Objset eviction processing is split into into two pieces. + * The first marks the objset as evicting, evicts any dbufs that + * have a refcount of zero, and then queues up the objset for the + * second phase of eviction. Once os->os_dnodes has been cleared by + * dnode_buf_pageout()->dnode_destroy(), the second phase is executed. + * The second phase closes the special dnodes, dequeues the objset from + * the list of those undergoing eviction, and finally frees the objset. + * + * NOTE: Due to asynchronous eviction processing (invocation of + * dnode_buf_pageout()), it is possible for the meta dnode for the + * objset to have no holds even though os->os_dnodes is not empty. + */ +void +dmu_objset_evict(objset_t *os) +{ + int t; + + dsl_dataset_t *ds = os->os_dsl_dataset; + + for (t = 0; t < TXG_SIZE; t++) + ASSERT(!dmu_objset_is_dirty(os, t)); + + if (ds) + dsl_prop_unregister_all(ds, os); + + if (os->os_sa) + sa_tear_down(os); + + dmu_objset_evict_dbufs(os); + + mutex_enter(&os->os_lock); + spa_evicting_os_register(os->os_spa, os); + if (list_is_empty(&os->os_dnodes)) { + mutex_exit(&os->os_lock); + dmu_objset_evict_done(os); + } else { + mutex_exit(&os->os_lock); + } +} + +void +dmu_objset_evict_done(objset_t *os) +{ + ASSERT3P(list_head(&os->os_dnodes), ==, NULL); + + dnode_special_close(&os->os_meta_dnode); + if (DMU_USERUSED_DNODE(os)) { + dnode_special_close(&os->os_userused_dnode); + dnode_special_close(&os->os_groupused_dnode); + } + zil_free(os->os_zil); + + arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); + + /* + * This is a barrier to prevent the objset from going away in + * dnode_move() until we can safely ensure that the objset is still in + * use. We consider the objset valid before the barrier and invalid + * after the barrier. + */ + rw_enter(&os_lock, RW_READER); + rw_exit(&os_lock); + + kmem_free(os->os_obj_next_percpu, + os->os_obj_next_percpu_len * sizeof (os->os_obj_next_percpu[0])); + + mutex_destroy(&os->os_lock); + mutex_destroy(&os->os_userused_lock); + mutex_destroy(&os->os_obj_lock); + mutex_destroy(&os->os_user_ptr_lock); + mutex_destroy(&os->os_upgrade_lock); + for (int i = 0; i < TXG_SIZE; i++) { + multilist_destroy(os->os_dirty_dnodes[i]); + } + spa_evicting_os_deregister(os->os_spa, os); + kmem_free(os, sizeof (objset_t)); +} + +timestruc_t +dmu_objset_snap_cmtime(objset_t *os) +{ + return (dsl_dir_snap_cmtime(os->os_dsl_dataset->ds_dir)); +} + +/* called from dsl for meta-objset */ +objset_t * +dmu_objset_create_impl(spa_t *spa, dsl_dataset_t *ds, blkptr_t *bp, + dmu_objset_type_t type, dmu_tx_t *tx) +{ + objset_t *os; + dnode_t *mdn; + + ASSERT(dmu_tx_is_syncing(tx)); + + if (ds != NULL) + VERIFY0(dmu_objset_from_ds(ds, &os)); + else + VERIFY0(dmu_objset_open_impl(spa, NULL, bp, &os)); + + mdn = DMU_META_DNODE(os); + + dnode_allocate(mdn, DMU_OT_DNODE, DNODE_BLOCK_SIZE, DN_MAX_INDBLKSHIFT, + DMU_OT_NONE, 0, DNODE_MIN_SLOTS, tx); + + /* + * We don't want to have to increase the meta-dnode's nlevels + * later, because then we could do it in quescing context while + * we are also accessing it in open context. + * + * This precaution is not necessary for the MOS (ds == NULL), + * because the MOS is only updated in syncing context. + * This is most fortunate: the MOS is the only objset that + * needs to be synced multiple times as spa_sync() iterates + * to convergence, so minimizing its dn_nlevels matters. + */ + if (ds != NULL) { + int levels = 1; + + /* + * Determine the number of levels necessary for the meta-dnode + * to contain DN_MAX_OBJECT dnodes. Note that in order to + * ensure that we do not overflow 64 bits, there has to be + * a nlevels that gives us a number of blocks > DN_MAX_OBJECT + * but < 2^64. Therefore, + * (mdn->dn_indblkshift - SPA_BLKPTRSHIFT) (10) must be + * less than (64 - log2(DN_MAX_OBJECT)) (16). + */ + while ((uint64_t)mdn->dn_nblkptr << + (mdn->dn_datablkshift - DNODE_SHIFT + + (levels - 1) * (mdn->dn_indblkshift - SPA_BLKPTRSHIFT)) < + DN_MAX_OBJECT) + levels++; + + mdn->dn_next_nlevels[tx->tx_txg & TXG_MASK] = + mdn->dn_nlevels = levels; + } + + ASSERT(type != DMU_OST_NONE); + ASSERT(type != DMU_OST_ANY); + ASSERT(type < DMU_OST_NUMTYPES); + os->os_phys->os_type = type; + if (dmu_objset_userused_enabled(os)) { + os->os_phys->os_flags |= OBJSET_FLAG_USERACCOUNTING_COMPLETE; + if (dmu_objset_userobjused_enabled(os)) { + ds->ds_feature_activation_needed[ + SPA_FEATURE_USEROBJ_ACCOUNTING] = B_TRUE; + os->os_phys->os_flags |= + OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE; + } + os->os_flags = os->os_phys->os_flags; + } + + dsl_dataset_dirty(ds, tx); + + return (os); +} + +typedef struct dmu_objset_create_arg { + const char *doca_name; + cred_t *doca_cred; + void (*doca_userfunc)(objset_t *os, void *arg, + cred_t *cr, dmu_tx_t *tx); + void *doca_userarg; + dmu_objset_type_t doca_type; + uint64_t doca_flags; +} dmu_objset_create_arg_t; + +/*ARGSUSED*/ +static int +dmu_objset_create_check(void *arg, dmu_tx_t *tx) +{ + dmu_objset_create_arg_t *doca = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *pdd; + const char *tail; + int error; + + if (strchr(doca->doca_name, '@') != NULL) + return (SET_ERROR(EINVAL)); + + if (strlen(doca->doca_name) >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + + error = dsl_dir_hold(dp, doca->doca_name, FTAG, &pdd, &tail); + if (error != 0) + return (error); + if (tail == NULL) { + dsl_dir_rele(pdd, FTAG); + return (SET_ERROR(EEXIST)); + } + error = dsl_fs_ss_limit_check(pdd, 1, ZFS_PROP_FILESYSTEM_LIMIT, NULL, + doca->doca_cred); + dsl_dir_rele(pdd, FTAG); + + return (error); +} + +static void +dmu_objset_create_sync(void *arg, dmu_tx_t *tx) +{ + dmu_objset_create_arg_t *doca = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *pdd; + const char *tail; + dsl_dataset_t *ds; + uint64_t obj; + blkptr_t *bp; + objset_t *os; + + VERIFY0(dsl_dir_hold(dp, doca->doca_name, FTAG, &pdd, &tail)); + + obj = dsl_dataset_create_sync(pdd, tail, NULL, doca->doca_flags, + doca->doca_cred, tx); + + VERIFY0(dsl_dataset_hold_obj(pdd->dd_pool, obj, FTAG, &ds)); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + bp = dsl_dataset_get_blkptr(ds); + os = dmu_objset_create_impl(pdd->dd_pool->dp_spa, + ds, bp, doca->doca_type, tx); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + + if (doca->doca_userfunc != NULL) { + doca->doca_userfunc(os, doca->doca_userarg, + doca->doca_cred, tx); + } + + spa_history_log_internal_ds(ds, "create", tx, ""); + zvol_create_minors(dp->dp_spa, doca->doca_name, B_TRUE); + + dsl_dataset_rele(ds, FTAG); + dsl_dir_rele(pdd, FTAG); +} + +int +dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags, + void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg) +{ + dmu_objset_create_arg_t doca; + + doca.doca_name = name; + doca.doca_cred = CRED(); + doca.doca_flags = flags; + doca.doca_userfunc = func; + doca.doca_userarg = arg; + doca.doca_type = type; + + return (dsl_sync_task(name, + dmu_objset_create_check, dmu_objset_create_sync, &doca, + 5, ZFS_SPACE_CHECK_NORMAL)); +} + +typedef struct dmu_objset_clone_arg { + const char *doca_clone; + const char *doca_origin; + cred_t *doca_cred; +} dmu_objset_clone_arg_t; + +/*ARGSUSED*/ +static int +dmu_objset_clone_check(void *arg, dmu_tx_t *tx) +{ + dmu_objset_clone_arg_t *doca = arg; + dsl_dir_t *pdd; + const char *tail; + int error; + dsl_dataset_t *origin; + dsl_pool_t *dp = dmu_tx_pool(tx); + + if (strchr(doca->doca_clone, '@') != NULL) + return (SET_ERROR(EINVAL)); + + if (strlen(doca->doca_clone) >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + + error = dsl_dir_hold(dp, doca->doca_clone, FTAG, &pdd, &tail); + if (error != 0) + return (error); + if (tail == NULL) { + dsl_dir_rele(pdd, FTAG); + return (SET_ERROR(EEXIST)); + } + + error = dsl_fs_ss_limit_check(pdd, 1, ZFS_PROP_FILESYSTEM_LIMIT, NULL, + doca->doca_cred); + if (error != 0) { + dsl_dir_rele(pdd, FTAG); + return (SET_ERROR(EDQUOT)); + } + dsl_dir_rele(pdd, FTAG); + + error = dsl_dataset_hold(dp, doca->doca_origin, FTAG, &origin); + if (error != 0) + return (error); + + /* You can only clone snapshots, not the head datasets. */ + if (!origin->ds_is_snapshot) { + dsl_dataset_rele(origin, FTAG); + return (SET_ERROR(EINVAL)); + } + dsl_dataset_rele(origin, FTAG); + + return (0); +} + +static void +dmu_objset_clone_sync(void *arg, dmu_tx_t *tx) +{ + dmu_objset_clone_arg_t *doca = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *pdd; + const char *tail; + dsl_dataset_t *origin, *ds; + uint64_t obj; + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + + VERIFY0(dsl_dir_hold(dp, doca->doca_clone, FTAG, &pdd, &tail)); + VERIFY0(dsl_dataset_hold(dp, doca->doca_origin, FTAG, &origin)); + + obj = dsl_dataset_create_sync(pdd, tail, origin, 0, + doca->doca_cred, tx); + + VERIFY0(dsl_dataset_hold_obj(pdd->dd_pool, obj, FTAG, &ds)); + dsl_dataset_name(origin, namebuf); + spa_history_log_internal_ds(ds, "clone", tx, + "origin=%s (%llu)", namebuf, origin->ds_object); + zvol_create_minors(dp->dp_spa, doca->doca_clone, B_TRUE); + dsl_dataset_rele(ds, FTAG); + dsl_dataset_rele(origin, FTAG); + dsl_dir_rele(pdd, FTAG); +} + +int +dmu_objset_clone(const char *clone, const char *origin) +{ + dmu_objset_clone_arg_t doca; + + doca.doca_clone = clone; + doca.doca_origin = origin; + doca.doca_cred = CRED(); + + return (dsl_sync_task(clone, + dmu_objset_clone_check, dmu_objset_clone_sync, &doca, + 5, ZFS_SPACE_CHECK_NORMAL)); +} + +int +dmu_objset_snapshot_one(const char *fsname, const char *snapname) +{ + int err; + char *longsnap = kmem_asprintf("%s@%s", fsname, snapname); + nvlist_t *snaps = fnvlist_alloc(); + + fnvlist_add_boolean(snaps, longsnap); + strfree(longsnap); + err = dsl_dataset_snapshot(snaps, NULL, NULL); + fnvlist_free(snaps); + return (err); +} + +static void +dmu_objset_upgrade_task_cb(void *data) +{ + objset_t *os = data; + + mutex_enter(&os->os_upgrade_lock); + os->os_upgrade_status = EINTR; + if (!os->os_upgrade_exit) { + mutex_exit(&os->os_upgrade_lock); + + os->os_upgrade_status = os->os_upgrade_cb(os); + mutex_enter(&os->os_upgrade_lock); + } + os->os_upgrade_exit = B_TRUE; + os->os_upgrade_id = 0; + mutex_exit(&os->os_upgrade_lock); +} + +static void +dmu_objset_upgrade(objset_t *os, dmu_objset_upgrade_cb_t cb) +{ + if (os->os_upgrade_id != 0) + return; + + mutex_enter(&os->os_upgrade_lock); + if (os->os_upgrade_id == 0 && os->os_upgrade_status == 0) { + os->os_upgrade_exit = B_FALSE; + os->os_upgrade_cb = cb; + os->os_upgrade_id = taskq_dispatch( + os->os_spa->spa_upgrade_taskq, + dmu_objset_upgrade_task_cb, os, TQ_SLEEP); + if (os->os_upgrade_id == TASKQID_INVALID) + os->os_upgrade_status = ENOMEM; + } + mutex_exit(&os->os_upgrade_lock); +} + +static void +dmu_objset_upgrade_stop(objset_t *os) +{ + mutex_enter(&os->os_upgrade_lock); + os->os_upgrade_exit = B_TRUE; + if (os->os_upgrade_id != 0) { + taskqid_t id = os->os_upgrade_id; + + os->os_upgrade_id = 0; + mutex_exit(&os->os_upgrade_lock); + + taskq_cancel_id(os->os_spa->spa_upgrade_taskq, id); + } else { + mutex_exit(&os->os_upgrade_lock); + } +} + +static void +dmu_objset_sync_dnodes(multilist_sublist_t *list, dmu_tx_t *tx) +{ + dnode_t *dn; + + while ((dn = multilist_sublist_head(list)) != NULL) { + ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT); + ASSERT(dn->dn_dbuf->db_data_pending); + /* + * Initialize dn_zio outside dnode_sync() because the + * meta-dnode needs to set it ouside dnode_sync(). + */ + dn->dn_zio = dn->dn_dbuf->db_data_pending->dr_zio; + ASSERT(dn->dn_zio); + + ASSERT3U(dn->dn_nlevels, <=, DN_MAX_LEVELS); + multilist_sublist_remove(list, dn); + + multilist_t *newlist = dn->dn_objset->os_synced_dnodes; + if (newlist != NULL) { + (void) dnode_add_ref(dn, newlist); + multilist_insert(newlist, dn); + } + + dnode_sync(dn, tx); + } +} + +/* ARGSUSED */ +static void +dmu_objset_write_ready(zio_t *zio, arc_buf_t *abuf, void *arg) +{ + int i; + + blkptr_t *bp = zio->io_bp; + objset_t *os = arg; + dnode_phys_t *dnp = &os->os_phys->os_meta_dnode; + + ASSERT(!BP_IS_EMBEDDED(bp)); + ASSERT3U(BP_GET_TYPE(bp), ==, DMU_OT_OBJSET); + ASSERT0(BP_GET_LEVEL(bp)); + + /* + * Update rootbp fill count: it should be the number of objects + * allocated in the object set (not counting the "special" + * objects that are stored in the objset_phys_t -- the meta + * dnode and user/group accounting objects). + */ + bp->blk_fill = 0; + for (i = 0; i < dnp->dn_nblkptr; i++) + bp->blk_fill += BP_GET_FILL(&dnp->dn_blkptr[i]); + if (os->os_dsl_dataset != NULL) + rrw_enter(&os->os_dsl_dataset->ds_bp_rwlock, RW_WRITER, FTAG); + *os->os_rootbp = *bp; + if (os->os_dsl_dataset != NULL) + rrw_exit(&os->os_dsl_dataset->ds_bp_rwlock, FTAG); +} + +/* ARGSUSED */ +static void +dmu_objset_write_done(zio_t *zio, arc_buf_t *abuf, void *arg) +{ + blkptr_t *bp = zio->io_bp; + blkptr_t *bp_orig = &zio->io_bp_orig; + objset_t *os = arg; + + if (zio->io_flags & ZIO_FLAG_IO_REWRITE) { + ASSERT(BP_EQUAL(bp, bp_orig)); + } else { + dsl_dataset_t *ds = os->os_dsl_dataset; + dmu_tx_t *tx = os->os_synctx; + + (void) dsl_dataset_block_kill(ds, bp_orig, tx, B_TRUE); + dsl_dataset_block_born(ds, bp, tx); + } + kmem_free(bp, sizeof (*bp)); +} + +typedef struct sync_dnodes_arg { + multilist_t *sda_list; + int sda_sublist_idx; + multilist_t *sda_newlist; + dmu_tx_t *sda_tx; +} sync_dnodes_arg_t; + +static void +sync_dnodes_task(void *arg) +{ + sync_dnodes_arg_t *sda = arg; + + multilist_sublist_t *ms = + multilist_sublist_lock(sda->sda_list, sda->sda_sublist_idx); + + dmu_objset_sync_dnodes(ms, sda->sda_tx); + + multilist_sublist_unlock(ms); + + kmem_free(sda, sizeof (*sda)); +} + + +/* called from dsl */ +void +dmu_objset_sync(objset_t *os, zio_t *pio, dmu_tx_t *tx) +{ + int txgoff; + zbookmark_phys_t zb; + zio_prop_t zp; + zio_t *zio; + list_t *list; + dbuf_dirty_record_t *dr; + blkptr_t *blkptr_copy = kmem_alloc(sizeof (*os->os_rootbp), KM_SLEEP); + *blkptr_copy = *os->os_rootbp; + + dprintf_ds(os->os_dsl_dataset, "txg=%llu\n", tx->tx_txg); + + ASSERT(dmu_tx_is_syncing(tx)); + /* XXX the write_done callback should really give us the tx... */ + os->os_synctx = tx; + + if (os->os_dsl_dataset == NULL) { + /* + * This is the MOS. If we have upgraded, + * spa_max_replication() could change, so reset + * os_copies here. + */ + os->os_copies = spa_max_replication(os->os_spa); + } + + /* + * Create the root block IO + */ + SET_BOOKMARK(&zb, os->os_dsl_dataset ? + os->os_dsl_dataset->ds_object : DMU_META_OBJSET, + ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); + arc_release(os->os_phys_buf, &os->os_phys_buf); + + dmu_write_policy(os, NULL, 0, 0, &zp); + + zio = arc_write(pio, os->os_spa, tx->tx_txg, + blkptr_copy, os->os_phys_buf, DMU_OS_IS_L2CACHEABLE(os), + &zp, dmu_objset_write_ready, NULL, NULL, dmu_objset_write_done, + os, ZIO_PRIORITY_ASYNC_WRITE, ZIO_FLAG_MUSTSUCCEED, &zb); + + /* + * Sync special dnodes - the parent IO for the sync is the root block + */ + DMU_META_DNODE(os)->dn_zio = zio; + dnode_sync(DMU_META_DNODE(os), tx); + + os->os_phys->os_flags = os->os_flags; + + if (DMU_USERUSED_DNODE(os) && + DMU_USERUSED_DNODE(os)->dn_type != DMU_OT_NONE) { + DMU_USERUSED_DNODE(os)->dn_zio = zio; + dnode_sync(DMU_USERUSED_DNODE(os), tx); + DMU_GROUPUSED_DNODE(os)->dn_zio = zio; + dnode_sync(DMU_GROUPUSED_DNODE(os), tx); + } + + txgoff = tx->tx_txg & TXG_MASK; + + if (dmu_objset_userused_enabled(os)) { + /* + * We must create the list here because it uses the + * dn_dirty_link[] of this txg. But it may already + * exist because we call dsl_dataset_sync() twice per txg. + */ + if (os->os_synced_dnodes == NULL) { + os->os_synced_dnodes = + multilist_create(sizeof (dnode_t), + offsetof(dnode_t, dn_dirty_link[txgoff]), + dnode_multilist_index_func); + } else { + ASSERT3U(os->os_synced_dnodes->ml_offset, ==, + offsetof(dnode_t, dn_dirty_link[txgoff])); + } + } + + for (int i = 0; + i < multilist_get_num_sublists(os->os_dirty_dnodes[txgoff]); i++) { + sync_dnodes_arg_t *sda = kmem_alloc(sizeof (*sda), KM_SLEEP); + sda->sda_list = os->os_dirty_dnodes[txgoff]; + sda->sda_sublist_idx = i; + sda->sda_tx = tx; + (void) taskq_dispatch(dmu_objset_pool(os)->dp_sync_taskq, + sync_dnodes_task, sda, 0); + /* callback frees sda */ + } + taskq_wait(dmu_objset_pool(os)->dp_sync_taskq); + + list = &DMU_META_DNODE(os)->dn_dirty_records[txgoff]; + while ((dr = list_head(list)) != NULL) { + ASSERT0(dr->dr_dbuf->db_level); + list_remove(list, dr); + if (dr->dr_zio) + zio_nowait(dr->dr_zio); + } + + /* Enable dnode backfill if enough objects have been freed. */ + if (os->os_freed_dnodes >= dmu_rescan_dnode_threshold) { + os->os_rescan_dnodes = B_TRUE; + os->os_freed_dnodes = 0; + } + + /* + * Free intent log blocks up to this tx. + */ + zil_sync(os->os_zil, tx); + os->os_phys->os_zil_header = os->os_zil_header; + zio_nowait(zio); +} + +boolean_t +dmu_objset_is_dirty(objset_t *os, uint64_t txg) +{ + return (!multilist_is_empty(os->os_dirty_dnodes[txg & TXG_MASK])); +} + +static objset_used_cb_t *used_cbs[DMU_OST_NUMTYPES]; + +void +dmu_objset_register_type(dmu_objset_type_t ost, objset_used_cb_t *cb) +{ + used_cbs[ost] = cb; +} + +boolean_t +dmu_objset_userused_enabled(objset_t *os) +{ + return (spa_version(os->os_spa) >= SPA_VERSION_USERSPACE && + used_cbs[os->os_phys->os_type] != NULL && + DMU_USERUSED_DNODE(os) != NULL); +} + +boolean_t +dmu_objset_userobjused_enabled(objset_t *os) +{ + return (dmu_objset_userused_enabled(os) && + spa_feature_is_enabled(os->os_spa, SPA_FEATURE_USEROBJ_ACCOUNTING)); +} + +typedef struct userquota_node { + /* must be in the first filed, see userquota_update_cache() */ + char uqn_id[20 + DMU_OBJACCT_PREFIX_LEN]; + int64_t uqn_delta; + avl_node_t uqn_node; +} userquota_node_t; + +typedef struct userquota_cache { + avl_tree_t uqc_user_deltas; + avl_tree_t uqc_group_deltas; +} userquota_cache_t; + +static int +userquota_compare(const void *l, const void *r) +{ + const userquota_node_t *luqn = l; + const userquota_node_t *ruqn = r; + int rv; + + /* + * NB: can only access uqn_id because userquota_update_cache() doesn't + * pass in an entire userquota_node_t. + */ + rv = strcmp(luqn->uqn_id, ruqn->uqn_id); + + return (AVL_ISIGN(rv)); +} + +static void +do_userquota_cacheflush(objset_t *os, userquota_cache_t *cache, dmu_tx_t *tx) +{ + void *cookie; + userquota_node_t *uqn; + + ASSERT(dmu_tx_is_syncing(tx)); + + cookie = NULL; + while ((uqn = avl_destroy_nodes(&cache->uqc_user_deltas, + &cookie)) != NULL) { + /* + * os_userused_lock protects against concurrent calls to + * zap_increment_int(). It's needed because zap_increment_int() + * is not thread-safe (i.e. not atomic). + */ + mutex_enter(&os->os_userused_lock); + VERIFY0(zap_increment(os, DMU_USERUSED_OBJECT, + uqn->uqn_id, uqn->uqn_delta, tx)); + mutex_exit(&os->os_userused_lock); + kmem_free(uqn, sizeof (*uqn)); + } + avl_destroy(&cache->uqc_user_deltas); + + cookie = NULL; + while ((uqn = avl_destroy_nodes(&cache->uqc_group_deltas, + &cookie)) != NULL) { + mutex_enter(&os->os_userused_lock); + VERIFY0(zap_increment(os, DMU_GROUPUSED_OBJECT, + uqn->uqn_id, uqn->uqn_delta, tx)); + mutex_exit(&os->os_userused_lock); + kmem_free(uqn, sizeof (*uqn)); + } + avl_destroy(&cache->uqc_group_deltas); +} + +static void +userquota_update_cache(avl_tree_t *avl, const char *id, int64_t delta) +{ + userquota_node_t *uqn; + avl_index_t idx; + + ASSERT(strlen(id) < sizeof (uqn->uqn_id)); + /* + * Use id directly for searching because uqn_id is the first field of + * userquota_node_t and fields after uqn_id won't be accessed in + * avl_find(). + */ + uqn = avl_find(avl, (const void *)id, &idx); + if (uqn == NULL) { + uqn = kmem_zalloc(sizeof (*uqn), KM_SLEEP); + strlcpy(uqn->uqn_id, id, sizeof (uqn->uqn_id)); + avl_insert(avl, uqn, idx); + } + uqn->uqn_delta += delta; +} + +static void +do_userquota_update(userquota_cache_t *cache, uint64_t used, uint64_t flags, + uint64_t user, uint64_t group, boolean_t subtract) +{ + if ((flags & DNODE_FLAG_USERUSED_ACCOUNTED)) { + int64_t delta = DNODE_MIN_SIZE + used; + char name[20]; + + if (subtract) + delta = -delta; + + (void) sprintf(name, "%llx", (longlong_t)user); + userquota_update_cache(&cache->uqc_user_deltas, name, delta); + + (void) sprintf(name, "%llx", (longlong_t)group); + userquota_update_cache(&cache->uqc_group_deltas, name, delta); + } +} + +static void +do_userobjquota_update(userquota_cache_t *cache, uint64_t flags, + uint64_t user, uint64_t group, boolean_t subtract) +{ + if (flags & DNODE_FLAG_USEROBJUSED_ACCOUNTED) { + char name[20 + DMU_OBJACCT_PREFIX_LEN]; + int delta = subtract ? -1 : 1; + + (void) snprintf(name, sizeof (name), DMU_OBJACCT_PREFIX "%llx", + (longlong_t)user); + userquota_update_cache(&cache->uqc_user_deltas, name, delta); + + (void) snprintf(name, sizeof (name), DMU_OBJACCT_PREFIX "%llx", + (longlong_t)group); + userquota_update_cache(&cache->uqc_group_deltas, name, delta); + } +} + +typedef struct userquota_updates_arg { + objset_t *uua_os; + int uua_sublist_idx; + dmu_tx_t *uua_tx; +} userquota_updates_arg_t; + +static void +userquota_updates_task(void *arg) +{ + userquota_updates_arg_t *uua = arg; + objset_t *os = uua->uua_os; + dmu_tx_t *tx = uua->uua_tx; + dnode_t *dn; + userquota_cache_t cache = { { 0 } }; + + multilist_sublist_t *list = + multilist_sublist_lock(os->os_synced_dnodes, uua->uua_sublist_idx); + + ASSERT(multilist_sublist_head(list) == NULL || + dmu_objset_userused_enabled(os)); + avl_create(&cache.uqc_user_deltas, userquota_compare, + sizeof (userquota_node_t), offsetof(userquota_node_t, uqn_node)); + avl_create(&cache.uqc_group_deltas, userquota_compare, + sizeof (userquota_node_t), offsetof(userquota_node_t, uqn_node)); + + while ((dn = multilist_sublist_head(list)) != NULL) { + int flags; + ASSERT(!DMU_OBJECT_IS_SPECIAL(dn->dn_object)); + ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE || + dn->dn_phys->dn_flags & + DNODE_FLAG_USERUSED_ACCOUNTED); + + flags = dn->dn_id_flags; + ASSERT(flags); + if (flags & DN_ID_OLD_EXIST) { + do_userquota_update(&cache, + dn->dn_oldused, dn->dn_oldflags, + dn->dn_olduid, dn->dn_oldgid, B_TRUE); + do_userobjquota_update(&cache, dn->dn_oldflags, + dn->dn_olduid, dn->dn_oldgid, B_TRUE); + } + if (flags & DN_ID_NEW_EXIST) { + do_userquota_update(&cache, + DN_USED_BYTES(dn->dn_phys), dn->dn_phys->dn_flags, + dn->dn_newuid, dn->dn_newgid, B_FALSE); + do_userobjquota_update(&cache, dn->dn_phys->dn_flags, + dn->dn_newuid, dn->dn_newgid, B_FALSE); + } + + mutex_enter(&dn->dn_mtx); + dn->dn_oldused = 0; + dn->dn_oldflags = 0; + if (dn->dn_id_flags & DN_ID_NEW_EXIST) { + dn->dn_olduid = dn->dn_newuid; + dn->dn_oldgid = dn->dn_newgid; + dn->dn_id_flags |= DN_ID_OLD_EXIST; + if (dn->dn_bonuslen == 0) + dn->dn_id_flags |= DN_ID_CHKED_SPILL; + else + dn->dn_id_flags |= DN_ID_CHKED_BONUS; + } + dn->dn_id_flags &= ~(DN_ID_NEW_EXIST); + mutex_exit(&dn->dn_mtx); + + multilist_sublist_remove(list, dn); + dnode_rele(dn, os->os_synced_dnodes); + } + do_userquota_cacheflush(os, &cache, tx); + multilist_sublist_unlock(list); + kmem_free(uua, sizeof (*uua)); +} + +void +dmu_objset_do_userquota_updates(objset_t *os, dmu_tx_t *tx) +{ + if (!dmu_objset_userused_enabled(os)) + return; + + /* Allocate the user/groupused objects if necessary. */ + if (DMU_USERUSED_DNODE(os)->dn_type == DMU_OT_NONE) { + VERIFY0(zap_create_claim(os, + DMU_USERUSED_OBJECT, + DMU_OT_USERGROUP_USED, DMU_OT_NONE, 0, tx)); + VERIFY0(zap_create_claim(os, + DMU_GROUPUSED_OBJECT, + DMU_OT_USERGROUP_USED, DMU_OT_NONE, 0, tx)); + } + + for (int i = 0; + i < multilist_get_num_sublists(os->os_synced_dnodes); i++) { + userquota_updates_arg_t *uua = + kmem_alloc(sizeof (*uua), KM_SLEEP); + uua->uua_os = os; + uua->uua_sublist_idx = i; + uua->uua_tx = tx; + /* note: caller does taskq_wait() */ + (void) taskq_dispatch(dmu_objset_pool(os)->dp_sync_taskq, + userquota_updates_task, uua, 0); + /* callback frees uua */ + } +} + +/* + * Returns a pointer to data to find uid/gid from + * + * If a dirty record for transaction group that is syncing can't + * be found then NULL is returned. In the NULL case it is assumed + * the uid/gid aren't changing. + */ +static void * +dmu_objset_userquota_find_data(dmu_buf_impl_t *db, dmu_tx_t *tx) +{ + dbuf_dirty_record_t *dr, **drp; + void *data; + + if (db->db_dirtycnt == 0) + return (db->db.db_data); /* Nothing is changing */ + + for (drp = &db->db_last_dirty; (dr = *drp) != NULL; drp = &dr->dr_next) + if (dr->dr_txg == tx->tx_txg) + break; + + if (dr == NULL) { + data = NULL; + } else { + dnode_t *dn; + + DB_DNODE_ENTER(dr->dr_dbuf); + dn = DB_DNODE(dr->dr_dbuf); + + if (dn->dn_bonuslen == 0 && + dr->dr_dbuf->db_blkid == DMU_SPILL_BLKID) + data = dr->dt.dl.dr_data->b_data; + else + data = dr->dt.dl.dr_data; + + DB_DNODE_EXIT(dr->dr_dbuf); + } + + return (data); +} + +void +dmu_objset_userquota_get_ids(dnode_t *dn, boolean_t before, dmu_tx_t *tx) +{ + objset_t *os = dn->dn_objset; + void *data = NULL; + dmu_buf_impl_t *db = NULL; + uint64_t *user = NULL; + uint64_t *group = NULL; + int flags = dn->dn_id_flags; + int error; + boolean_t have_spill = B_FALSE; + + if (!dmu_objset_userused_enabled(dn->dn_objset)) + return; + + if (before && (flags & (DN_ID_CHKED_BONUS|DN_ID_OLD_EXIST| + DN_ID_CHKED_SPILL))) + return; + + if (before && dn->dn_bonuslen != 0) + data = DN_BONUS(dn->dn_phys); + else if (!before && dn->dn_bonuslen != 0) { + if (dn->dn_bonus) { + db = dn->dn_bonus; + mutex_enter(&db->db_mtx); + data = dmu_objset_userquota_find_data(db, tx); + } else { + data = DN_BONUS(dn->dn_phys); + } + } else if (dn->dn_bonuslen == 0 && dn->dn_bonustype == DMU_OT_SA) { + int rf = 0; + + if (RW_WRITE_HELD(&dn->dn_struct_rwlock)) + rf |= DB_RF_HAVESTRUCT; + error = dmu_spill_hold_by_dnode(dn, + rf | DB_RF_MUST_SUCCEED, + FTAG, (dmu_buf_t **)&db); + ASSERT(error == 0); + mutex_enter(&db->db_mtx); + data = (before) ? db->db.db_data : + dmu_objset_userquota_find_data(db, tx); + have_spill = B_TRUE; + } else { + mutex_enter(&dn->dn_mtx); + dn->dn_id_flags |= DN_ID_CHKED_BONUS; + mutex_exit(&dn->dn_mtx); + return; + } + + if (before) { + ASSERT(data); + user = &dn->dn_olduid; + group = &dn->dn_oldgid; + } else if (data) { + user = &dn->dn_newuid; + group = &dn->dn_newgid; + } + + /* + * Must always call the callback in case the object + * type has changed and that type isn't an object type to track + */ + error = used_cbs[os->os_phys->os_type](dn->dn_bonustype, data, + user, group); + + /* + * Preserve existing uid/gid when the callback can't determine + * what the new uid/gid are and the callback returned EEXIST. + * The EEXIST error tells us to just use the existing uid/gid. + * If we don't know what the old values are then just assign + * them to 0, since that is a new file being created. + */ + if (!before && data == NULL && error == EEXIST) { + if (flags & DN_ID_OLD_EXIST) { + dn->dn_newuid = dn->dn_olduid; + dn->dn_newgid = dn->dn_oldgid; + } else { + dn->dn_newuid = 0; + dn->dn_newgid = 0; + } + error = 0; + } + + if (db) + mutex_exit(&db->db_mtx); + + mutex_enter(&dn->dn_mtx); + if (error == 0 && before) + dn->dn_id_flags |= DN_ID_OLD_EXIST; + if (error == 0 && !before) + dn->dn_id_flags |= DN_ID_NEW_EXIST; + + if (have_spill) { + dn->dn_id_flags |= DN_ID_CHKED_SPILL; + } else { + dn->dn_id_flags |= DN_ID_CHKED_BONUS; + } + mutex_exit(&dn->dn_mtx); + if (have_spill) + dmu_buf_rele((dmu_buf_t *)db, FTAG); +} + +boolean_t +dmu_objset_userspace_present(objset_t *os) +{ + return (os->os_phys->os_flags & + OBJSET_FLAG_USERACCOUNTING_COMPLETE); +} + +boolean_t +dmu_objset_userobjspace_present(objset_t *os) +{ + return (os->os_phys->os_flags & + OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE); +} + +static int +dmu_objset_space_upgrade(objset_t *os) +{ + uint64_t obj; + int err = 0; + + /* + * We simply need to mark every object dirty, so that it will be + * synced out and now accounted. If this is called + * concurrently, or if we already did some work before crashing, + * that's fine, since we track each object's accounted state + * independently. + */ + + for (obj = 0; err == 0; err = dmu_object_next(os, &obj, FALSE, 0)) { + dmu_tx_t *tx; + dmu_buf_t *db; + int objerr; + + mutex_enter(&os->os_upgrade_lock); + if (os->os_upgrade_exit) + err = SET_ERROR(EINTR); + mutex_exit(&os->os_upgrade_lock); + if (err != 0) + return (err); + + if (issig(JUSTLOOKING) && issig(FORREAL)) + return (SET_ERROR(EINTR)); + + objerr = dmu_bonus_hold(os, obj, FTAG, &db); + if (objerr != 0) + continue; + tx = dmu_tx_create(os); + dmu_tx_hold_bonus(tx, obj); + objerr = dmu_tx_assign(tx, TXG_WAIT); + if (objerr != 0) { + dmu_tx_abort(tx); + continue; + } + dmu_buf_will_dirty(db, tx); + dmu_buf_rele(db, FTAG); + dmu_tx_commit(tx); + } + return (0); +} + +int +dmu_objset_userspace_upgrade(objset_t *os) +{ + int err = 0; + + if (dmu_objset_userspace_present(os)) + return (0); + if (dmu_objset_is_snapshot(os)) + return (SET_ERROR(EINVAL)); + if (!dmu_objset_userused_enabled(os)) + return (SET_ERROR(ENOTSUP)); + + err = dmu_objset_space_upgrade(os); + if (err) + return (err); + + os->os_flags |= OBJSET_FLAG_USERACCOUNTING_COMPLETE; + txg_wait_synced(dmu_objset_pool(os), 0); + return (0); +} + +static int +dmu_objset_userobjspace_upgrade_cb(objset_t *os) +{ + int err = 0; + + if (dmu_objset_userobjspace_present(os)) + return (0); + if (dmu_objset_is_snapshot(os)) + return (SET_ERROR(EINVAL)); + if (!dmu_objset_userobjused_enabled(os)) + return (SET_ERROR(ENOTSUP)); + + dmu_objset_ds(os)->ds_feature_activation_needed[ + SPA_FEATURE_USEROBJ_ACCOUNTING] = B_TRUE; + + err = dmu_objset_space_upgrade(os); + if (err) + return (err); + + os->os_flags |= OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE; + txg_wait_synced(dmu_objset_pool(os), 0); + return (0); +} + +void +dmu_objset_userobjspace_upgrade(objset_t *os) +{ + dmu_objset_upgrade(os, dmu_objset_userobjspace_upgrade_cb); +} + +boolean_t +dmu_objset_userobjspace_upgradable(objset_t *os) +{ + return (dmu_objset_type(os) == DMU_OST_ZFS && + !dmu_objset_is_snapshot(os) && + dmu_objset_userobjused_enabled(os) && + !dmu_objset_userobjspace_present(os)); +} + +void +dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, + uint64_t *usedobjsp, uint64_t *availobjsp) +{ + dsl_dataset_space(os->os_dsl_dataset, refdbytesp, availbytesp, + usedobjsp, availobjsp); +} + +uint64_t +dmu_objset_fsid_guid(objset_t *os) +{ + return (dsl_dataset_fsid_guid(os->os_dsl_dataset)); +} + +void +dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat) +{ + stat->dds_type = os->os_phys->os_type; + if (os->os_dsl_dataset) + dsl_dataset_fast_stat(os->os_dsl_dataset, stat); +} + +void +dmu_objset_stats(objset_t *os, nvlist_t *nv) +{ + ASSERT(os->os_dsl_dataset || + os->os_phys->os_type == DMU_OST_META); + + if (os->os_dsl_dataset != NULL) + dsl_dataset_stats(os->os_dsl_dataset, nv); + + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_TYPE, + os->os_phys->os_type); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USERACCOUNTING, + dmu_objset_userspace_present(os)); +} + +int +dmu_objset_is_snapshot(objset_t *os) +{ + if (os->os_dsl_dataset != NULL) + return (os->os_dsl_dataset->ds_is_snapshot); + else + return (B_FALSE); +} + +int +dmu_snapshot_realname(objset_t *os, char *name, char *real, int maxlen, + boolean_t *conflict) +{ + dsl_dataset_t *ds = os->os_dsl_dataset; + uint64_t ignored; + + if (dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0) + return (SET_ERROR(ENOENT)); + + return (zap_lookup_norm(ds->ds_dir->dd_pool->dp_meta_objset, + dsl_dataset_phys(ds)->ds_snapnames_zapobj, name, 8, 1, &ignored, + MT_NORMALIZE, real, maxlen, conflict)); +} + +int +dmu_snapshot_list_next(objset_t *os, int namelen, char *name, + uint64_t *idp, uint64_t *offp, boolean_t *case_conflict) +{ + dsl_dataset_t *ds = os->os_dsl_dataset; + zap_cursor_t cursor; + zap_attribute_t attr; + + ASSERT(dsl_pool_config_held(dmu_objset_pool(os))); + + if (dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0) + return (SET_ERROR(ENOENT)); + + zap_cursor_init_serialized(&cursor, + ds->ds_dir->dd_pool->dp_meta_objset, + dsl_dataset_phys(ds)->ds_snapnames_zapobj, *offp); + + if (zap_cursor_retrieve(&cursor, &attr) != 0) { + zap_cursor_fini(&cursor); + return (SET_ERROR(ENOENT)); + } + + if (strlen(attr.za_name) + 1 > namelen) { + zap_cursor_fini(&cursor); + return (SET_ERROR(ENAMETOOLONG)); + } + + (void) strcpy(name, attr.za_name); + if (idp) + *idp = attr.za_first_integer; + if (case_conflict) + *case_conflict = attr.za_normalization_conflict; + zap_cursor_advance(&cursor); + *offp = zap_cursor_serialize(&cursor); + zap_cursor_fini(&cursor); + + return (0); +} + +int +dmu_snapshot_lookup(objset_t *os, const char *name, uint64_t *value) +{ + return (dsl_dataset_snap_lookup(os->os_dsl_dataset, name, value)); +} + +int +dmu_dir_list_next(objset_t *os, int namelen, char *name, + uint64_t *idp, uint64_t *offp) +{ + dsl_dir_t *dd = os->os_dsl_dataset->ds_dir; + zap_cursor_t cursor; + zap_attribute_t attr; + + /* there is no next dir on a snapshot! */ + if (os->os_dsl_dataset->ds_object != + dsl_dir_phys(dd)->dd_head_dataset_obj) + return (SET_ERROR(ENOENT)); + + zap_cursor_init_serialized(&cursor, + dd->dd_pool->dp_meta_objset, + dsl_dir_phys(dd)->dd_child_dir_zapobj, *offp); + + if (zap_cursor_retrieve(&cursor, &attr) != 0) { + zap_cursor_fini(&cursor); + return (SET_ERROR(ENOENT)); + } + + if (strlen(attr.za_name) + 1 > namelen) { + zap_cursor_fini(&cursor); + return (SET_ERROR(ENAMETOOLONG)); + } + + (void) strcpy(name, attr.za_name); + if (idp) + *idp = attr.za_first_integer; + zap_cursor_advance(&cursor); + *offp = zap_cursor_serialize(&cursor); + zap_cursor_fini(&cursor); + + return (0); +} + +typedef struct dmu_objset_find_ctx { + taskq_t *dc_tq; + dsl_pool_t *dc_dp; + uint64_t dc_ddobj; + char *dc_ddname; /* last component of ddobj's name */ + int (*dc_func)(dsl_pool_t *, dsl_dataset_t *, void *); + void *dc_arg; + int dc_flags; + kmutex_t *dc_error_lock; + int *dc_error; +} dmu_objset_find_ctx_t; + +static void +dmu_objset_find_dp_impl(dmu_objset_find_ctx_t *dcp) +{ + dsl_pool_t *dp = dcp->dc_dp; + dmu_objset_find_ctx_t *child_dcp; + dsl_dir_t *dd; + dsl_dataset_t *ds; + zap_cursor_t zc; + zap_attribute_t *attr; + uint64_t thisobj; + int err = 0; + + /* don't process if there already was an error */ + if (*dcp->dc_error != 0) + goto out; + + /* + * Note: passing the name (dc_ddname) here is optional, but it + * improves performance because we don't need to call + * zap_value_search() to determine the name. + */ + err = dsl_dir_hold_obj(dp, dcp->dc_ddobj, dcp->dc_ddname, FTAG, &dd); + if (err != 0) + goto out; + + /* Don't visit hidden ($MOS & $ORIGIN) objsets. */ + if (dd->dd_myname[0] == '$') { + dsl_dir_rele(dd, FTAG); + goto out; + } + + thisobj = dsl_dir_phys(dd)->dd_head_dataset_obj; + attr = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + + /* + * Iterate over all children. + */ + if (dcp->dc_flags & DS_FIND_CHILDREN) { + for (zap_cursor_init(&zc, dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_child_dir_zapobj); + zap_cursor_retrieve(&zc, attr) == 0; + (void) zap_cursor_advance(&zc)) { + ASSERT3U(attr->za_integer_length, ==, + sizeof (uint64_t)); + ASSERT3U(attr->za_num_integers, ==, 1); + + child_dcp = + kmem_alloc(sizeof (*child_dcp), KM_SLEEP); + *child_dcp = *dcp; + child_dcp->dc_ddobj = attr->za_first_integer; + child_dcp->dc_ddname = spa_strdup(attr->za_name); + if (dcp->dc_tq != NULL) + (void) taskq_dispatch(dcp->dc_tq, + dmu_objset_find_dp_cb, child_dcp, TQ_SLEEP); + else + dmu_objset_find_dp_impl(child_dcp); + } + zap_cursor_fini(&zc); + } + + /* + * Iterate over all snapshots. + */ + if (dcp->dc_flags & DS_FIND_SNAPSHOTS) { + dsl_dataset_t *ds; + err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds); + + if (err == 0) { + uint64_t snapobj; + + snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj; + dsl_dataset_rele(ds, FTAG); + + for (zap_cursor_init(&zc, dp->dp_meta_objset, snapobj); + zap_cursor_retrieve(&zc, attr) == 0; + (void) zap_cursor_advance(&zc)) { + ASSERT3U(attr->za_integer_length, ==, + sizeof (uint64_t)); + ASSERT3U(attr->za_num_integers, ==, 1); + + err = dsl_dataset_hold_obj(dp, + attr->za_first_integer, FTAG, &ds); + if (err != 0) + break; + err = dcp->dc_func(dp, ds, dcp->dc_arg); + dsl_dataset_rele(ds, FTAG); + if (err != 0) + break; + } + zap_cursor_fini(&zc); + } + } + + kmem_free(attr, sizeof (zap_attribute_t)); + + if (err != 0) { + dsl_dir_rele(dd, FTAG); + goto out; + } + + /* + * Apply to self. + */ + err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds); + + /* + * Note: we hold the dir while calling dsl_dataset_hold_obj() so + * that the dir will remain cached, and we won't have to re-instantiate + * it (which could be expensive due to finding its name via + * zap_value_search()). + */ + dsl_dir_rele(dd, FTAG); + if (err != 0) + goto out; + err = dcp->dc_func(dp, ds, dcp->dc_arg); + dsl_dataset_rele(ds, FTAG); + +out: + if (err != 0) { + mutex_enter(dcp->dc_error_lock); + /* only keep first error */ + if (*dcp->dc_error == 0) + *dcp->dc_error = err; + mutex_exit(dcp->dc_error_lock); + } + + if (dcp->dc_ddname != NULL) + spa_strfree(dcp->dc_ddname); + kmem_free(dcp, sizeof (*dcp)); +} + +static void +dmu_objset_find_dp_cb(void *arg) +{ + dmu_objset_find_ctx_t *dcp = arg; + dsl_pool_t *dp = dcp->dc_dp; + + /* + * We need to get a pool_config_lock here, as there are several + * asssert(pool_config_held) down the stack. Getting a lock via + * dsl_pool_config_enter is risky, as it might be stalled by a + * pending writer. This would deadlock, as the write lock can + * only be granted when our parent thread gives up the lock. + * The _prio interface gives us priority over a pending writer. + */ + dsl_pool_config_enter_prio(dp, FTAG); + + dmu_objset_find_dp_impl(dcp); + + dsl_pool_config_exit(dp, FTAG); +} + +/* + * Find objsets under and including ddobj, call func(ds) on each. + * The order for the enumeration is completely undefined. + * func is called with dsl_pool_config held. + */ +int +dmu_objset_find_dp(dsl_pool_t *dp, uint64_t ddobj, + int func(dsl_pool_t *, dsl_dataset_t *, void *), void *arg, int flags) +{ + int error = 0; + taskq_t *tq = NULL; + int ntasks; + dmu_objset_find_ctx_t *dcp; + kmutex_t err_lock; + + mutex_init(&err_lock, NULL, MUTEX_DEFAULT, NULL); + dcp = kmem_alloc(sizeof (*dcp), KM_SLEEP); + dcp->dc_tq = NULL; + dcp->dc_dp = dp; + dcp->dc_ddobj = ddobj; + dcp->dc_ddname = NULL; + dcp->dc_func = func; + dcp->dc_arg = arg; + dcp->dc_flags = flags; + dcp->dc_error_lock = &err_lock; + dcp->dc_error = &error; + + if ((flags & DS_FIND_SERIALIZE) || dsl_pool_config_held_writer(dp)) { + /* + * In case a write lock is held we can't make use of + * parallelism, as down the stack of the worker threads + * the lock is asserted via dsl_pool_config_held. + * In case of a read lock this is solved by getting a read + * lock in each worker thread, which isn't possible in case + * of a writer lock. So we fall back to the synchronous path + * here. + * In the future it might be possible to get some magic into + * dsl_pool_config_held in a way that it returns true for + * the worker threads so that a single lock held from this + * thread suffices. For now, stay single threaded. + */ + dmu_objset_find_dp_impl(dcp); + mutex_destroy(&err_lock); + + return (error); + } + + ntasks = dmu_find_threads; + if (ntasks == 0) + ntasks = vdev_count_leaves(dp->dp_spa) * 4; + tq = taskq_create("dmu_objset_find", ntasks, maxclsyspri, ntasks, + INT_MAX, 0); + if (tq == NULL) { + kmem_free(dcp, sizeof (*dcp)); + mutex_destroy(&err_lock); + + return (SET_ERROR(ENOMEM)); + } + dcp->dc_tq = tq; + + /* dcp will be freed by task */ + (void) taskq_dispatch(tq, dmu_objset_find_dp_cb, dcp, TQ_SLEEP); + + /* + * PORTING: this code relies on the property of taskq_wait to wait + * until no more tasks are queued and no more tasks are active. As + * we always queue new tasks from within other tasks, task_wait + * reliably waits for the full recursion to finish, even though we + * enqueue new tasks after taskq_wait has been called. + * On platforms other than illumos, taskq_wait may not have this + * property. + */ + taskq_wait(tq); + taskq_destroy(tq); + mutex_destroy(&err_lock); + + return (error); +} + +/* + * Find all objsets under name, and for each, call 'func(child_name, arg)'. + * The dp_config_rwlock must not be held when this is called, and it + * will not be held when the callback is called. + * Therefore this function should only be used when the pool is not changing + * (e.g. in syncing context), or the callback can deal with the possible races. + */ +static int +dmu_objset_find_impl(spa_t *spa, const char *name, + int func(const char *, void *), void *arg, int flags) +{ + dsl_dir_t *dd; + dsl_pool_t *dp = spa_get_dsl(spa); + dsl_dataset_t *ds; + zap_cursor_t zc; + zap_attribute_t *attr; + char *child; + uint64_t thisobj; + int err; + + dsl_pool_config_enter(dp, FTAG); + + err = dsl_dir_hold(dp, name, FTAG, &dd, NULL); + if (err != 0) { + dsl_pool_config_exit(dp, FTAG); + return (err); + } + + /* Don't visit hidden ($MOS & $ORIGIN) objsets. */ + if (dd->dd_myname[0] == '$') { + dsl_dir_rele(dd, FTAG); + dsl_pool_config_exit(dp, FTAG); + return (0); + } + + thisobj = dsl_dir_phys(dd)->dd_head_dataset_obj; + attr = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + + /* + * Iterate over all children. + */ + if (flags & DS_FIND_CHILDREN) { + for (zap_cursor_init(&zc, dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_child_dir_zapobj); + zap_cursor_retrieve(&zc, attr) == 0; + (void) zap_cursor_advance(&zc)) { + ASSERT3U(attr->za_integer_length, ==, + sizeof (uint64_t)); + ASSERT3U(attr->za_num_integers, ==, 1); + + child = kmem_asprintf("%s/%s", name, attr->za_name); + dsl_pool_config_exit(dp, FTAG); + err = dmu_objset_find_impl(spa, child, + func, arg, flags); + dsl_pool_config_enter(dp, FTAG); + strfree(child); + if (err != 0) + break; + } + zap_cursor_fini(&zc); + + if (err != 0) { + dsl_dir_rele(dd, FTAG); + dsl_pool_config_exit(dp, FTAG); + kmem_free(attr, sizeof (zap_attribute_t)); + return (err); + } + } + + /* + * Iterate over all snapshots. + */ + if (flags & DS_FIND_SNAPSHOTS) { + err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds); + + if (err == 0) { + uint64_t snapobj; + + snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj; + dsl_dataset_rele(ds, FTAG); + + for (zap_cursor_init(&zc, dp->dp_meta_objset, snapobj); + zap_cursor_retrieve(&zc, attr) == 0; + (void) zap_cursor_advance(&zc)) { + ASSERT3U(attr->za_integer_length, ==, + sizeof (uint64_t)); + ASSERT3U(attr->za_num_integers, ==, 1); + + child = kmem_asprintf("%s@%s", + name, attr->za_name); + dsl_pool_config_exit(dp, FTAG); + err = func(child, arg); + dsl_pool_config_enter(dp, FTAG); + strfree(child); + if (err != 0) + break; + } + zap_cursor_fini(&zc); + } + } + + dsl_dir_rele(dd, FTAG); + kmem_free(attr, sizeof (zap_attribute_t)); + dsl_pool_config_exit(dp, FTAG); + + if (err != 0) + return (err); + + /* Apply to self. */ + return (func(name, arg)); +} + +/* + * See comment above dmu_objset_find_impl(). + */ +int +dmu_objset_find(char *name, int func(const char *, void *), void *arg, + int flags) +{ + spa_t *spa; + int error; + + error = spa_open(name, &spa, FTAG); + if (error != 0) + return (error); + error = dmu_objset_find_impl(spa, name, func, arg, flags); + spa_close(spa, FTAG); + return (error); +} + +void +dmu_objset_set_user(objset_t *os, void *user_ptr) +{ + ASSERT(MUTEX_HELD(&os->os_user_ptr_lock)); + os->os_user_ptr = user_ptr; +} + +void * +dmu_objset_get_user(objset_t *os) +{ + ASSERT(MUTEX_HELD(&os->os_user_ptr_lock)); + return (os->os_user_ptr); +} + +/* + * Determine name of filesystem, given name of snapshot. + * buf must be at least ZFS_MAX_DATASET_NAME_LEN bytes + */ +int +dmu_fsname(const char *snapname, char *buf) +{ + char *atp = strchr(snapname, '@'); + if (atp == NULL) + return (SET_ERROR(EINVAL)); + if (atp - snapname >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + (void) strlcpy(buf, snapname, atp - snapname + 1); + return (0); +} + +/* + * Call when we think we're going to write/free space in open context to track + * the amount of dirty data in the open txg, which is also the amount + * of memory that can not be evicted until this txg syncs. + */ +void +dmu_objset_willuse_space(objset_t *os, int64_t space, dmu_tx_t *tx) +{ + dsl_dataset_t *ds = os->os_dsl_dataset; + int64_t aspace = spa_get_worst_case_asize(os->os_spa, space); + + if (ds != NULL) { + dsl_dir_willuse_space(ds->ds_dir, aspace, tx); + dsl_pool_dirty_space(dmu_tx_pool(tx), space, tx); + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dmu_objset_zil); +EXPORT_SYMBOL(dmu_objset_pool); +EXPORT_SYMBOL(dmu_objset_ds); +EXPORT_SYMBOL(dmu_objset_type); +EXPORT_SYMBOL(dmu_objset_name); +EXPORT_SYMBOL(dmu_objset_hold); +EXPORT_SYMBOL(dmu_objset_own); +EXPORT_SYMBOL(dmu_objset_rele); +EXPORT_SYMBOL(dmu_objset_disown); +EXPORT_SYMBOL(dmu_objset_from_ds); +EXPORT_SYMBOL(dmu_objset_create); +EXPORT_SYMBOL(dmu_objset_clone); +EXPORT_SYMBOL(dmu_objset_stats); +EXPORT_SYMBOL(dmu_objset_fast_stat); +EXPORT_SYMBOL(dmu_objset_spa); +EXPORT_SYMBOL(dmu_objset_space); +EXPORT_SYMBOL(dmu_objset_fsid_guid); +EXPORT_SYMBOL(dmu_objset_find); +EXPORT_SYMBOL(dmu_objset_byteswap); +EXPORT_SYMBOL(dmu_objset_evict_dbufs); +EXPORT_SYMBOL(dmu_objset_snap_cmtime); +EXPORT_SYMBOL(dmu_objset_dnodesize); + +EXPORT_SYMBOL(dmu_objset_sync); +EXPORT_SYMBOL(dmu_objset_is_dirty); +EXPORT_SYMBOL(dmu_objset_create_impl); +EXPORT_SYMBOL(dmu_objset_open_impl); +EXPORT_SYMBOL(dmu_objset_evict); +EXPORT_SYMBOL(dmu_objset_register_type); +EXPORT_SYMBOL(dmu_objset_do_userquota_updates); +EXPORT_SYMBOL(dmu_objset_userquota_get_ids); +EXPORT_SYMBOL(dmu_objset_userused_enabled); +EXPORT_SYMBOL(dmu_objset_userspace_upgrade); +EXPORT_SYMBOL(dmu_objset_userspace_present); +EXPORT_SYMBOL(dmu_objset_userobjused_enabled); +EXPORT_SYMBOL(dmu_objset_userobjspace_upgrade); +EXPORT_SYMBOL(dmu_objset_userobjspace_upgradable); +EXPORT_SYMBOL(dmu_objset_userobjspace_present); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_send.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_send.c @@ -0,0 +1,3553 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2014, Joyent, Inc. All rights reserved. + * Copyright 2014 HybridCluster. All rights reserved. + * Copyright 2016 RackTop Systems. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Set this tunable to TRUE to replace corrupt data with 0x2f5baddb10c */ +int zfs_send_corrupt_data = B_FALSE; +int zfs_send_queue_length = 16 * 1024 * 1024; +int zfs_recv_queue_length = 16 * 1024 * 1024; +/* Set this tunable to FALSE to disable setting of DRR_FLAG_FREERECORDS */ +int zfs_send_set_freerecords_bit = B_TRUE; + +static char *dmu_recv_tag = "dmu_recv_tag"; +const char *recv_clone_name = "%recv"; + +#define BP_SPAN(datablkszsec, indblkshift, level) \ + (((uint64_t)datablkszsec) << (SPA_MINBLOCKSHIFT + \ + (level) * (indblkshift - SPA_BLKPTRSHIFT))) + +static void byteswap_record(dmu_replay_record_t *drr); + +struct send_thread_arg { + bqueue_t q; + dsl_dataset_t *ds; /* Dataset to traverse */ + uint64_t fromtxg; /* Traverse from this txg */ + int flags; /* flags to pass to traverse_dataset */ + int error_code; + boolean_t cancel; + zbookmark_phys_t resume; +}; + +struct send_block_record { + boolean_t eos_marker; /* Marks the end of the stream */ + blkptr_t bp; + zbookmark_phys_t zb; + uint8_t indblkshift; + uint16_t datablkszsec; + bqueue_node_t ln; +}; + +typedef struct dump_bytes_io { + dmu_sendarg_t *dbi_dsp; + void *dbi_buf; + int dbi_len; +} dump_bytes_io_t; + +static void +dump_bytes_cb(void *arg) +{ + dump_bytes_io_t *dbi = (dump_bytes_io_t *)arg; + dmu_sendarg_t *dsp = dbi->dbi_dsp; + dsl_dataset_t *ds = dmu_objset_ds(dsp->dsa_os); + ssize_t resid; /* have to get resid to get detailed errno */ + + /* + * The code does not rely on this (len being a multiple of 8). We keep + * this assertion because of the corresponding assertion in + * receive_read(). Keeping this assertion ensures that we do not + * inadvertently break backwards compatibility (causing the assertion + * in receive_read() to trigger on old software). + * + * Removing the assertions could be rolled into a new feature that uses + * data that isn't 8-byte aligned; if the assertions were removed, a + * feature flag would have to be added. + */ + + ASSERT0(dbi->dbi_len % 8); + + dsp->dsa_err = vn_rdwr(UIO_WRITE, dsp->dsa_vp, + (caddr_t)dbi->dbi_buf, dbi->dbi_len, + 0, UIO_SYSSPACE, FAPPEND, RLIM64_INFINITY, CRED(), &resid); + + mutex_enter(&ds->ds_sendstream_lock); + *dsp->dsa_off += dbi->dbi_len; + mutex_exit(&ds->ds_sendstream_lock); +} + +static int +dump_bytes(dmu_sendarg_t *dsp, void *buf, int len) +{ + dump_bytes_io_t dbi; + + dbi.dbi_dsp = dsp; + dbi.dbi_buf = buf; + dbi.dbi_len = len; + +#if defined(HAVE_LARGE_STACKS) + dump_bytes_cb(&dbi); +#else + /* + * The vn_rdwr() call is performed in a taskq to ensure that there is + * always enough stack space to write safely to the target filesystem. + * The ZIO_TYPE_FREE threads are used because there can be a lot of + * them and they are used in vdev_file.c for a similar purpose. + */ + spa_taskq_dispatch_sync(dmu_objset_spa(dsp->dsa_os), ZIO_TYPE_FREE, + ZIO_TASKQ_ISSUE, dump_bytes_cb, &dbi, TQ_SLEEP); +#endif /* HAVE_LARGE_STACKS */ + + return (dsp->dsa_err); +} + +/* + * For all record types except BEGIN, fill in the checksum (overlaid in + * drr_u.drr_checksum.drr_checksum). The checksum verifies everything + * up to the start of the checksum itself. + */ +static int +dump_record(dmu_sendarg_t *dsp, void *payload, int payload_len) +{ + ASSERT3U(offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + ==, sizeof (dmu_replay_record_t) - sizeof (zio_cksum_t)); + (void) fletcher_4_incremental_native(dsp->dsa_drr, + offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + &dsp->dsa_zc); + if (dsp->dsa_drr->drr_type == DRR_BEGIN) { + dsp->dsa_sent_begin = B_TRUE; + } else { + ASSERT(ZIO_CHECKSUM_IS_ZERO(&dsp->dsa_drr->drr_u. + drr_checksum.drr_checksum)); + dsp->dsa_drr->drr_u.drr_checksum.drr_checksum = dsp->dsa_zc; + } + if (dsp->dsa_drr->drr_type == DRR_END) { + dsp->dsa_sent_end = B_TRUE; + } + (void) fletcher_4_incremental_native(&dsp->dsa_drr-> + drr_u.drr_checksum.drr_checksum, + sizeof (zio_cksum_t), &dsp->dsa_zc); + if (dump_bytes(dsp, dsp->dsa_drr, sizeof (dmu_replay_record_t)) != 0) + return (SET_ERROR(EINTR)); + if (payload_len != 0) { + (void) fletcher_4_incremental_native(payload, payload_len, + &dsp->dsa_zc); + if (dump_bytes(dsp, payload, payload_len) != 0) + return (SET_ERROR(EINTR)); + } + return (0); +} + +/* + * Fill in the drr_free struct, or perform aggregation if the previous record is + * also a free record, and the two are adjacent. + * + * Note that we send free records even for a full send, because we want to be + * able to receive a full send as a clone, which requires a list of all the free + * and freeobject records that were generated on the source. + */ +static int +dump_free(dmu_sendarg_t *dsp, uint64_t object, uint64_t offset, + uint64_t length) +{ + struct drr_free *drrf = &(dsp->dsa_drr->drr_u.drr_free); + + /* + * When we receive a free record, dbuf_free_range() assumes + * that the receiving system doesn't have any dbufs in the range + * being freed. This is always true because there is a one-record + * constraint: we only send one WRITE record for any given + * object,offset. We know that the one-record constraint is + * true because we always send data in increasing order by + * object,offset. + * + * If the increasing-order constraint ever changes, we should find + * another way to assert that the one-record constraint is still + * satisfied. + */ + ASSERT(object > dsp->dsa_last_data_object || + (object == dsp->dsa_last_data_object && + offset > dsp->dsa_last_data_offset)); + + if (length != -1ULL && offset + length < offset) + length = -1ULL; + + /* + * If there is a pending op, but it's not PENDING_FREE, push it out, + * since free block aggregation can only be done for blocks of the + * same type (i.e., DRR_FREE records can only be aggregated with + * other DRR_FREE records. DRR_FREEOBJECTS records can only be + * aggregated with other DRR_FREEOBJECTS records. + */ + if (dsp->dsa_pending_op != PENDING_NONE && + dsp->dsa_pending_op != PENDING_FREE) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + + if (dsp->dsa_pending_op == PENDING_FREE) { + /* + * There should never be a PENDING_FREE if length is -1 + * (because dump_dnode is the only place where this + * function is called with a -1, and only after flushing + * any pending record). + */ + ASSERT(length != -1ULL); + /* + * Check to see whether this free block can be aggregated + * with pending one. + */ + if (drrf->drr_object == object && drrf->drr_offset + + drrf->drr_length == offset) { + drrf->drr_length += length; + return (0); + } else { + /* not a continuation. Push out pending record */ + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + } + /* create a FREE record and make it pending */ + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_FREE; + drrf->drr_object = object; + drrf->drr_offset = offset; + drrf->drr_length = length; + drrf->drr_toguid = dsp->dsa_toguid; + if (length == -1ULL) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + } else { + dsp->dsa_pending_op = PENDING_FREE; + } + + return (0); +} + +static int +dump_write(dmu_sendarg_t *dsp, dmu_object_type_t type, + uint64_t object, uint64_t offset, int lsize, int psize, const blkptr_t *bp, + void *data) +{ + uint64_t payload_size; + struct drr_write *drrw = &(dsp->dsa_drr->drr_u.drr_write); + + /* + * We send data in increasing object, offset order. + * See comment in dump_free() for details. + */ + ASSERT(object > dsp->dsa_last_data_object || + (object == dsp->dsa_last_data_object && + offset > dsp->dsa_last_data_offset)); + dsp->dsa_last_data_object = object; + dsp->dsa_last_data_offset = offset + lsize - 1; + + /* + * If there is any kind of pending aggregation (currently either + * a grouping of free objects or free blocks), push it out to + * the stream, since aggregation can't be done across operations + * of different types. + */ + if (dsp->dsa_pending_op != PENDING_NONE) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + /* write a WRITE record */ + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_WRITE; + drrw->drr_object = object; + drrw->drr_type = type; + drrw->drr_offset = offset; + drrw->drr_toguid = dsp->dsa_toguid; + drrw->drr_logical_size = lsize; + + /* only set the compression fields if the buf is compressed */ + if (lsize != psize) { + ASSERT(dsp->dsa_featureflags & DMU_BACKUP_FEATURE_COMPRESSED); + ASSERT(!BP_IS_EMBEDDED(bp)); + ASSERT(!BP_SHOULD_BYTESWAP(bp)); + ASSERT(!DMU_OT_IS_METADATA(BP_GET_TYPE(bp))); + ASSERT3U(BP_GET_COMPRESS(bp), !=, ZIO_COMPRESS_OFF); + ASSERT3S(psize, >, 0); + ASSERT3S(lsize, >=, psize); + + drrw->drr_compressiontype = BP_GET_COMPRESS(bp); + drrw->drr_compressed_size = psize; + payload_size = drrw->drr_compressed_size; + } else { + payload_size = drrw->drr_logical_size; + } + + if (bp == NULL || BP_IS_EMBEDDED(bp)) { + /* + * There's no pre-computed checksum for partial-block + * writes or embedded BP's, so (like + * fletcher4-checkummed blocks) userland will have to + * compute a dedup-capable checksum itself. + */ + drrw->drr_checksumtype = ZIO_CHECKSUM_OFF; + } else { + drrw->drr_checksumtype = BP_GET_CHECKSUM(bp); + if (zio_checksum_table[drrw->drr_checksumtype].ci_flags & + ZCHECKSUM_FLAG_DEDUP) + drrw->drr_checksumflags |= DRR_CHECKSUM_DEDUP; + DDK_SET_LSIZE(&drrw->drr_key, BP_GET_LSIZE(bp)); + DDK_SET_PSIZE(&drrw->drr_key, BP_GET_PSIZE(bp)); + DDK_SET_COMPRESS(&drrw->drr_key, BP_GET_COMPRESS(bp)); + drrw->drr_key.ddk_cksum = bp->blk_cksum; + } + + if (dump_record(dsp, data, payload_size) != 0) + return (SET_ERROR(EINTR)); + return (0); +} + +static int +dump_write_embedded(dmu_sendarg_t *dsp, uint64_t object, uint64_t offset, + int blksz, const blkptr_t *bp) +{ + char buf[BPE_PAYLOAD_SIZE]; + struct drr_write_embedded *drrw = + &(dsp->dsa_drr->drr_u.drr_write_embedded); + + if (dsp->dsa_pending_op != PENDING_NONE) { + if (dump_record(dsp, NULL, 0) != 0) + return (EINTR); + dsp->dsa_pending_op = PENDING_NONE; + } + + ASSERT(BP_IS_EMBEDDED(bp)); + + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_WRITE_EMBEDDED; + drrw->drr_object = object; + drrw->drr_offset = offset; + drrw->drr_length = blksz; + drrw->drr_toguid = dsp->dsa_toguid; + drrw->drr_compression = BP_GET_COMPRESS(bp); + drrw->drr_etype = BPE_GET_ETYPE(bp); + drrw->drr_lsize = BPE_GET_LSIZE(bp); + drrw->drr_psize = BPE_GET_PSIZE(bp); + + decode_embedded_bp_compressed(bp, buf); + + if (dump_record(dsp, buf, P2ROUNDUP(drrw->drr_psize, 8)) != 0) + return (EINTR); + return (0); +} + +static int +dump_spill(dmu_sendarg_t *dsp, uint64_t object, int blksz, void *data) +{ + struct drr_spill *drrs = &(dsp->dsa_drr->drr_u.drr_spill); + + if (dsp->dsa_pending_op != PENDING_NONE) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + + /* write a SPILL record */ + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_SPILL; + drrs->drr_object = object; + drrs->drr_length = blksz; + drrs->drr_toguid = dsp->dsa_toguid; + + if (dump_record(dsp, data, blksz) != 0) + return (SET_ERROR(EINTR)); + return (0); +} + +static int +dump_freeobjects(dmu_sendarg_t *dsp, uint64_t firstobj, uint64_t numobjs) +{ + struct drr_freeobjects *drrfo = &(dsp->dsa_drr->drr_u.drr_freeobjects); + uint64_t maxobj = DNODES_PER_BLOCK * + (DMU_META_DNODE(dsp->dsa_os)->dn_maxblkid + 1); + + /* + * ZoL < 0.7 does not handle large FREEOBJECTS records correctly, + * leading to zfs recv never completing. to avoid this issue, don't + * send FREEOBJECTS records for object IDs which cannot exist on the + * receiving side. + */ + if (maxobj > 0) { + if (maxobj < firstobj) + return (0); + + if (maxobj < firstobj + numobjs) + numobjs = maxobj - firstobj; + } + + /* + * If there is a pending op, but it's not PENDING_FREEOBJECTS, + * push it out, since free block aggregation can only be done for + * blocks of the same type (i.e., DRR_FREE records can only be + * aggregated with other DRR_FREE records. DRR_FREEOBJECTS records + * can only be aggregated with other DRR_FREEOBJECTS records. + */ + if (dsp->dsa_pending_op != PENDING_NONE && + dsp->dsa_pending_op != PENDING_FREEOBJECTS) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + if (dsp->dsa_pending_op == PENDING_FREEOBJECTS) { + /* + * See whether this free object array can be aggregated + * with pending one + */ + if (drrfo->drr_firstobj + drrfo->drr_numobjs == firstobj) { + drrfo->drr_numobjs += numobjs; + return (0); + } else { + /* can't be aggregated. Push out pending record */ + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + } + + /* write a FREEOBJECTS record */ + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_FREEOBJECTS; + drrfo->drr_firstobj = firstobj; + drrfo->drr_numobjs = numobjs; + drrfo->drr_toguid = dsp->dsa_toguid; + + dsp->dsa_pending_op = PENDING_FREEOBJECTS; + + return (0); +} + +static int +dump_dnode(dmu_sendarg_t *dsp, uint64_t object, dnode_phys_t *dnp) +{ + struct drr_object *drro = &(dsp->dsa_drr->drr_u.drr_object); + + if (object < dsp->dsa_resume_object) { + /* + * Note: when resuming, we will visit all the dnodes in + * the block of dnodes that we are resuming from. In + * this case it's unnecessary to send the dnodes prior to + * the one we are resuming from. We should be at most one + * block's worth of dnodes behind the resume point. + */ + ASSERT3U(dsp->dsa_resume_object - object, <, + 1 << (DNODE_BLOCK_SHIFT - DNODE_SHIFT)); + return (0); + } + + if (dnp == NULL || dnp->dn_type == DMU_OT_NONE) + return (dump_freeobjects(dsp, object, 1)); + + if (dsp->dsa_pending_op != PENDING_NONE) { + if (dump_record(dsp, NULL, 0) != 0) + return (SET_ERROR(EINTR)); + dsp->dsa_pending_op = PENDING_NONE; + } + + /* write an OBJECT record */ + bzero(dsp->dsa_drr, sizeof (dmu_replay_record_t)); + dsp->dsa_drr->drr_type = DRR_OBJECT; + drro->drr_object = object; + drro->drr_type = dnp->dn_type; + drro->drr_bonustype = dnp->dn_bonustype; + drro->drr_blksz = dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT; + drro->drr_bonuslen = dnp->dn_bonuslen; + drro->drr_dn_slots = dnp->dn_extra_slots + 1; + drro->drr_checksumtype = dnp->dn_checksum; + drro->drr_compress = dnp->dn_compress; + drro->drr_toguid = dsp->dsa_toguid; + + if (!(dsp->dsa_featureflags & DMU_BACKUP_FEATURE_LARGE_BLOCKS) && + drro->drr_blksz > SPA_OLD_MAXBLOCKSIZE) + drro->drr_blksz = SPA_OLD_MAXBLOCKSIZE; + + if (dump_record(dsp, DN_BONUS(dnp), + P2ROUNDUP(dnp->dn_bonuslen, 8)) != 0) { + return (SET_ERROR(EINTR)); + } + + /* Free anything past the end of the file. */ + if (dump_free(dsp, object, (dnp->dn_maxblkid + 1) * + (dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT), -1ULL) != 0) + return (SET_ERROR(EINTR)); + if (dsp->dsa_err != 0) + return (SET_ERROR(EINTR)); + return (0); +} + +static boolean_t +backup_do_embed(dmu_sendarg_t *dsp, const blkptr_t *bp) +{ + if (!BP_IS_EMBEDDED(bp)) + return (B_FALSE); + + /* + * Compression function must be legacy, or explicitly enabled. + */ + if ((BP_GET_COMPRESS(bp) >= ZIO_COMPRESS_LEGACY_FUNCTIONS && + !(dsp->dsa_featureflags & DMU_BACKUP_FEATURE_LZ4))) + return (B_FALSE); + + /* + * Embed type must be explicitly enabled. + */ + switch (BPE_GET_ETYPE(bp)) { + case BP_EMBEDDED_TYPE_DATA: + if (dsp->dsa_featureflags & DMU_BACKUP_FEATURE_EMBED_DATA) + return (B_TRUE); + break; + default: + return (B_FALSE); + } + return (B_FALSE); +} + +/* + * This is the callback function to traverse_dataset that acts as the worker + * thread for dmu_send_impl. + */ +/*ARGSUSED*/ +static int +send_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const struct dnode_phys *dnp, void *arg) +{ + struct send_thread_arg *sta = arg; + struct send_block_record *record; + uint64_t record_size; + int err = 0; + + ASSERT(zb->zb_object == DMU_META_DNODE_OBJECT || + zb->zb_object >= sta->resume.zb_object); + + if (sta->cancel) + return (SET_ERROR(EINTR)); + + if (bp == NULL) { + ASSERT3U(zb->zb_level, ==, ZB_DNODE_LEVEL); + return (0); + } else if (zb->zb_level < 0) { + return (0); + } + + record = kmem_zalloc(sizeof (struct send_block_record), KM_SLEEP); + record->eos_marker = B_FALSE; + record->bp = *bp; + record->zb = *zb; + record->indblkshift = dnp->dn_indblkshift; + record->datablkszsec = dnp->dn_datablkszsec; + record_size = dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT; + bqueue_enqueue(&sta->q, record, record_size); + + return (err); +} + +/* + * This function kicks off the traverse_dataset. It also handles setting the + * error code of the thread in case something goes wrong, and pushes the End of + * Stream record when the traverse_dataset call has finished. If there is no + * dataset to traverse, the thread immediately pushes End of Stream marker. + */ +static void +send_traverse_thread(void *arg) +{ + struct send_thread_arg *st_arg = arg; + int err; + struct send_block_record *data; + fstrans_cookie_t cookie = spl_fstrans_mark(); + + if (st_arg->ds != NULL) { + err = traverse_dataset_resume(st_arg->ds, + st_arg->fromtxg, &st_arg->resume, + st_arg->flags, send_cb, st_arg); + + if (err != EINTR) + st_arg->error_code = err; + } + data = kmem_zalloc(sizeof (*data), KM_SLEEP); + data->eos_marker = B_TRUE; + bqueue_enqueue(&st_arg->q, data, 1); + spl_fstrans_unmark(cookie); + thread_exit(); +} + +/* + * This function actually handles figuring out what kind of record needs to be + * dumped, reading the data (which has hopefully been prefetched), and calling + * the appropriate helper function. + */ +static int +do_dump(dmu_sendarg_t *dsa, struct send_block_record *data) +{ + dsl_dataset_t *ds = dmu_objset_ds(dsa->dsa_os); + const blkptr_t *bp = &data->bp; + const zbookmark_phys_t *zb = &data->zb; + uint8_t indblkshift = data->indblkshift; + uint16_t dblkszsec = data->datablkszsec; + spa_t *spa = ds->ds_dir->dd_pool->dp_spa; + dmu_object_type_t type = bp ? BP_GET_TYPE(bp) : DMU_OT_NONE; + int err = 0; + uint64_t dnobj; + + ASSERT3U(zb->zb_level, >=, 0); + + ASSERT(zb->zb_object == DMU_META_DNODE_OBJECT || + zb->zb_object >= dsa->dsa_resume_object); + + if (zb->zb_object != DMU_META_DNODE_OBJECT && + DMU_OBJECT_IS_SPECIAL(zb->zb_object)) { + return (0); + } else if (BP_IS_HOLE(bp) && + zb->zb_object == DMU_META_DNODE_OBJECT) { + uint64_t span = BP_SPAN(dblkszsec, indblkshift, zb->zb_level); + uint64_t dnobj = (zb->zb_blkid * span) >> DNODE_SHIFT; + err = dump_freeobjects(dsa, dnobj, span >> DNODE_SHIFT); + } else if (BP_IS_HOLE(bp)) { + uint64_t span = BP_SPAN(dblkszsec, indblkshift, zb->zb_level); + uint64_t offset = zb->zb_blkid * span; + err = dump_free(dsa, zb->zb_object, offset, span); + } else if (zb->zb_level > 0 || type == DMU_OT_OBJSET) { + return (0); + } else if (type == DMU_OT_DNODE) { + dnode_phys_t *blk; + int epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT; + arc_flags_t aflags = ARC_FLAG_WAIT; + arc_buf_t *abuf; + int i; + + ASSERT0(zb->zb_level); + + if (arc_read(NULL, spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, + &aflags, zb) != 0) + return (SET_ERROR(EIO)); + + blk = abuf->b_data; + dnobj = zb->zb_blkid * epb; + for (i = 0; i < epb; i += blk[i].dn_extra_slots + 1) { + err = dump_dnode(dsa, dnobj + i, blk + i); + if (err != 0) + break; + } + arc_buf_destroy(abuf, &abuf); + } else if (type == DMU_OT_SA) { + arc_flags_t aflags = ARC_FLAG_WAIT; + arc_buf_t *abuf; + int blksz = BP_GET_LSIZE(bp); + + if (arc_read(NULL, spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, + &aflags, zb) != 0) + return (SET_ERROR(EIO)); + + err = dump_spill(dsa, zb->zb_object, blksz, abuf->b_data); + arc_buf_destroy(abuf, &abuf); + } else if (backup_do_embed(dsa, bp)) { + /* it's an embedded level-0 block of a regular object */ + int blksz = dblkszsec << SPA_MINBLOCKSHIFT; + ASSERT0(zb->zb_level); + err = dump_write_embedded(dsa, zb->zb_object, + zb->zb_blkid * blksz, blksz, bp); + } else { + /* it's a level-0 block of a regular object */ + arc_flags_t aflags = ARC_FLAG_WAIT; + arc_buf_t *abuf; + int blksz = dblkszsec << SPA_MINBLOCKSHIFT; + uint64_t offset; + + /* + * If we have large blocks stored on disk but the send flags + * don't allow us to send large blocks, we split the data from + * the arc buf into chunks. + */ + boolean_t split_large_blocks = blksz > SPA_OLD_MAXBLOCKSIZE && + !(dsa->dsa_featureflags & DMU_BACKUP_FEATURE_LARGE_BLOCKS); + /* + * We should only request compressed data from the ARC if all + * the following are true: + * - stream compression was requested + * - we aren't splitting large blocks into smaller chunks + * - the data won't need to be byteswapped before sending + * - this isn't an embedded block + * - this isn't metadata (if receiving on a different endian + * system it can be byteswapped more easily) + */ + boolean_t request_compressed = + (dsa->dsa_featureflags & DMU_BACKUP_FEATURE_COMPRESSED) && + !split_large_blocks && !BP_SHOULD_BYTESWAP(bp) && + !BP_IS_EMBEDDED(bp) && !DMU_OT_IS_METADATA(BP_GET_TYPE(bp)); + + ASSERT0(zb->zb_level); + ASSERT(zb->zb_object > dsa->dsa_resume_object || + (zb->zb_object == dsa->dsa_resume_object && + zb->zb_blkid * blksz >= dsa->dsa_resume_offset)); + + ASSERT3U(blksz, ==, BP_GET_LSIZE(bp)); + + enum zio_flag zioflags = ZIO_FLAG_CANFAIL; + if (request_compressed) + zioflags |= ZIO_FLAG_RAW; + + if (arc_read(NULL, spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_ASYNC_READ, zioflags, &aflags, zb) != 0) { + if (zfs_send_corrupt_data) { + /* Send a block filled with 0x"zfs badd bloc" */ + abuf = arc_alloc_buf(spa, &abuf, ARC_BUFC_DATA, + blksz); + uint64_t *ptr; + for (ptr = abuf->b_data; + (char *)ptr < (char *)abuf->b_data + blksz; + ptr++) + *ptr = 0x2f5baddb10cULL; + } else { + return (SET_ERROR(EIO)); + } + } + + offset = zb->zb_blkid * blksz; + + if (split_large_blocks) { + ASSERT3U(arc_get_compression(abuf), ==, + ZIO_COMPRESS_OFF); + char *buf = abuf->b_data; + while (blksz > 0 && err == 0) { + int n = MIN(blksz, SPA_OLD_MAXBLOCKSIZE); + err = dump_write(dsa, type, zb->zb_object, + offset, n, n, NULL, buf); + offset += n; + buf += n; + blksz -= n; + } + } else { + err = dump_write(dsa, type, zb->zb_object, offset, + blksz, arc_buf_size(abuf), bp, + abuf->b_data); + } + arc_buf_destroy(abuf, &abuf); + } + + ASSERT(err == 0 || err == EINTR); + return (err); +} + +/* + * Pop the new data off the queue, and free the old data. + */ +static struct send_block_record * +get_next_record(bqueue_t *bq, struct send_block_record *data) +{ + struct send_block_record *tmp = bqueue_dequeue(bq); + kmem_free(data, sizeof (*data)); + return (tmp); +} + +/* + * Actually do the bulk of the work in a zfs send. + * + * Note: Releases dp using the specified tag. + */ +static int +dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_t *to_ds, + zfs_bookmark_phys_t *ancestor_zb, boolean_t is_clone, + boolean_t embedok, boolean_t large_block_ok, boolean_t compressok, + int outfd, uint64_t resumeobj, uint64_t resumeoff, + vnode_t *vp, offset_t *off) +{ + objset_t *os; + dmu_replay_record_t *drr; + dmu_sendarg_t *dsp; + int err; + uint64_t fromtxg = 0; + uint64_t featureflags = 0; + struct send_thread_arg to_arg; + void *payload = NULL; + size_t payload_len = 0; + struct send_block_record *to_data; + + err = dmu_objset_from_ds(to_ds, &os); + if (err != 0) { + dsl_pool_rele(dp, tag); + return (err); + } + + drr = kmem_zalloc(sizeof (dmu_replay_record_t), KM_SLEEP); + drr->drr_type = DRR_BEGIN; + drr->drr_u.drr_begin.drr_magic = DMU_BACKUP_MAGIC; + DMU_SET_STREAM_HDRTYPE(drr->drr_u.drr_begin.drr_versioninfo, + DMU_SUBSTREAM); + + bzero(&to_arg, sizeof (to_arg)); + +#ifdef _KERNEL + if (dmu_objset_type(os) == DMU_OST_ZFS) { + uint64_t version; + if (zfs_get_zplprop(os, ZFS_PROP_VERSION, &version) != 0) { + kmem_free(drr, sizeof (dmu_replay_record_t)); + dsl_pool_rele(dp, tag); + return (SET_ERROR(EINVAL)); + } + if (version >= ZPL_VERSION_SA) { + featureflags |= DMU_BACKUP_FEATURE_SA_SPILL; + } + } +#endif + + if (large_block_ok && to_ds->ds_feature_inuse[SPA_FEATURE_LARGE_BLOCKS]) + featureflags |= DMU_BACKUP_FEATURE_LARGE_BLOCKS; + if (to_ds->ds_feature_inuse[SPA_FEATURE_LARGE_DNODE]) + featureflags |= DMU_BACKUP_FEATURE_LARGE_DNODE; + if (embedok && + spa_feature_is_active(dp->dp_spa, SPA_FEATURE_EMBEDDED_DATA)) { + featureflags |= DMU_BACKUP_FEATURE_EMBED_DATA; + } + if (compressok) { + featureflags |= DMU_BACKUP_FEATURE_COMPRESSED; + } + if ((featureflags & + (DMU_BACKUP_FEATURE_EMBED_DATA | DMU_BACKUP_FEATURE_COMPRESSED)) != + 0 && spa_feature_is_active(dp->dp_spa, SPA_FEATURE_LZ4_COMPRESS)) { + featureflags |= DMU_BACKUP_FEATURE_LZ4; + } + + if (resumeobj != 0 || resumeoff != 0) { + featureflags |= DMU_BACKUP_FEATURE_RESUMING; + } + + DMU_SET_FEATUREFLAGS(drr->drr_u.drr_begin.drr_versioninfo, + featureflags); + + drr->drr_u.drr_begin.drr_creation_time = + dsl_dataset_phys(to_ds)->ds_creation_time; + drr->drr_u.drr_begin.drr_type = dmu_objset_type(os); + if (is_clone) + drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_CLONE; + drr->drr_u.drr_begin.drr_toguid = dsl_dataset_phys(to_ds)->ds_guid; + if (dsl_dataset_phys(to_ds)->ds_flags & DS_FLAG_CI_DATASET) + drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_CI_DATA; + if (zfs_send_set_freerecords_bit) + drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_FREERECORDS; + + if (ancestor_zb != NULL) { + drr->drr_u.drr_begin.drr_fromguid = + ancestor_zb->zbm_guid; + fromtxg = ancestor_zb->zbm_creation_txg; + } + dsl_dataset_name(to_ds, drr->drr_u.drr_begin.drr_toname); + if (!to_ds->ds_is_snapshot) { + (void) strlcat(drr->drr_u.drr_begin.drr_toname, "@--head--", + sizeof (drr->drr_u.drr_begin.drr_toname)); + } + + dsp = kmem_zalloc(sizeof (dmu_sendarg_t), KM_SLEEP); + + dsp->dsa_drr = drr; + dsp->dsa_vp = vp; + dsp->dsa_outfd = outfd; + dsp->dsa_proc = curproc; + dsp->dsa_os = os; + dsp->dsa_off = off; + dsp->dsa_toguid = dsl_dataset_phys(to_ds)->ds_guid; + dsp->dsa_pending_op = PENDING_NONE; + dsp->dsa_featureflags = featureflags; + dsp->dsa_resume_object = resumeobj; + dsp->dsa_resume_offset = resumeoff; + + mutex_enter(&to_ds->ds_sendstream_lock); + list_insert_head(&to_ds->ds_sendstreams, dsp); + mutex_exit(&to_ds->ds_sendstream_lock); + + dsl_dataset_long_hold(to_ds, FTAG); + dsl_pool_rele(dp, tag); + + if (resumeobj != 0 || resumeoff != 0) { + dmu_object_info_t to_doi; + nvlist_t *nvl; + err = dmu_object_info(os, resumeobj, &to_doi); + if (err != 0) + goto out; + SET_BOOKMARK(&to_arg.resume, to_ds->ds_object, resumeobj, 0, + resumeoff / to_doi.doi_data_block_size); + + nvl = fnvlist_alloc(); + fnvlist_add_uint64(nvl, "resume_object", resumeobj); + fnvlist_add_uint64(nvl, "resume_offset", resumeoff); + payload = fnvlist_pack(nvl, &payload_len); + drr->drr_payloadlen = payload_len; + fnvlist_free(nvl); + } + + err = dump_record(dsp, payload, payload_len); + fnvlist_pack_free(payload, payload_len); + if (err != 0) { + err = dsp->dsa_err; + goto out; + } + + err = bqueue_init(&to_arg.q, zfs_send_queue_length, + offsetof(struct send_block_record, ln)); + to_arg.error_code = 0; + to_arg.cancel = B_FALSE; + to_arg.ds = to_ds; + to_arg.fromtxg = fromtxg; + to_arg.flags = TRAVERSE_PRE | TRAVERSE_PREFETCH; + (void) thread_create(NULL, 0, send_traverse_thread, &to_arg, 0, curproc, + TS_RUN, minclsyspri); + + to_data = bqueue_dequeue(&to_arg.q); + + while (!to_data->eos_marker && err == 0) { + err = do_dump(dsp, to_data); + to_data = get_next_record(&to_arg.q, to_data); + if (issig(JUSTLOOKING) && issig(FORREAL)) + err = EINTR; + } + + if (err != 0) { + to_arg.cancel = B_TRUE; + while (!to_data->eos_marker) { + to_data = get_next_record(&to_arg.q, to_data); + } + } + kmem_free(to_data, sizeof (*to_data)); + + bqueue_destroy(&to_arg.q); + + if (err == 0 && to_arg.error_code != 0) + err = to_arg.error_code; + + if (err != 0) + goto out; + + if (dsp->dsa_pending_op != PENDING_NONE) + if (dump_record(dsp, NULL, 0) != 0) + err = SET_ERROR(EINTR); + + if (err != 0) { + if (err == EINTR && dsp->dsa_err != 0) + err = dsp->dsa_err; + goto out; + } + + bzero(drr, sizeof (dmu_replay_record_t)); + drr->drr_type = DRR_END; + drr->drr_u.drr_end.drr_checksum = dsp->dsa_zc; + drr->drr_u.drr_end.drr_toguid = dsp->dsa_toguid; + + if (dump_record(dsp, NULL, 0) != 0) + err = dsp->dsa_err; + +out: + mutex_enter(&to_ds->ds_sendstream_lock); + list_remove(&to_ds->ds_sendstreams, dsp); + mutex_exit(&to_ds->ds_sendstream_lock); + + VERIFY(err != 0 || (dsp->dsa_sent_begin && dsp->dsa_sent_end)); + + kmem_free(drr, sizeof (dmu_replay_record_t)); + kmem_free(dsp, sizeof (dmu_sendarg_t)); + + dsl_dataset_long_rele(to_ds, FTAG); + + return (err); +} + +int +dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap, + boolean_t embedok, boolean_t large_block_ok, boolean_t compressok, + int outfd, vnode_t *vp, offset_t *off) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + dsl_dataset_t *fromds = NULL; + int err; + + err = dsl_pool_hold(pool, FTAG, &dp); + if (err != 0) + return (err); + + err = dsl_dataset_hold_obj(dp, tosnap, FTAG, &ds); + if (err != 0) { + dsl_pool_rele(dp, FTAG); + return (err); + } + + if (fromsnap != 0) { + zfs_bookmark_phys_t zb; + boolean_t is_clone; + + err = dsl_dataset_hold_obj(dp, fromsnap, FTAG, &fromds); + if (err != 0) { + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (err); + } + if (!dsl_dataset_is_before(ds, fromds, 0)) + err = SET_ERROR(EXDEV); + zb.zbm_creation_time = + dsl_dataset_phys(fromds)->ds_creation_time; + zb.zbm_creation_txg = dsl_dataset_phys(fromds)->ds_creation_txg; + zb.zbm_guid = dsl_dataset_phys(fromds)->ds_guid; + is_clone = (fromds->ds_dir != ds->ds_dir); + dsl_dataset_rele(fromds, FTAG); + err = dmu_send_impl(FTAG, dp, ds, &zb, is_clone, + embedok, large_block_ok, compressok, outfd, 0, 0, vp, off); + } else { + err = dmu_send_impl(FTAG, dp, ds, NULL, B_FALSE, + embedok, large_block_ok, compressok, outfd, 0, 0, vp, off); + } + dsl_dataset_rele(ds, FTAG); + return (err); +} + +int +dmu_send(const char *tosnap, const char *fromsnap, boolean_t embedok, + boolean_t large_block_ok, boolean_t compressok, int outfd, + uint64_t resumeobj, uint64_t resumeoff, + vnode_t *vp, offset_t *off) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int err; + boolean_t owned = B_FALSE; + + if (fromsnap != NULL && strpbrk(fromsnap, "@#") == NULL) + return (SET_ERROR(EINVAL)); + + err = dsl_pool_hold(tosnap, FTAG, &dp); + if (err != 0) + return (err); + + if (strchr(tosnap, '@') == NULL && spa_writeable(dp->dp_spa)) { + /* + * We are sending a filesystem or volume. Ensure + * that it doesn't change by owning the dataset. + */ + err = dsl_dataset_own(dp, tosnap, FTAG, &ds); + owned = B_TRUE; + } else { + err = dsl_dataset_hold(dp, tosnap, FTAG, &ds); + } + if (err != 0) { + dsl_pool_rele(dp, FTAG); + return (err); + } + + if (fromsnap != NULL) { + zfs_bookmark_phys_t zb; + boolean_t is_clone = B_FALSE; + int fsnamelen = strchr(tosnap, '@') - tosnap; + + /* + * If the fromsnap is in a different filesystem, then + * mark the send stream as a clone. + */ + if (strncmp(tosnap, fromsnap, fsnamelen) != 0 || + (fromsnap[fsnamelen] != '@' && + fromsnap[fsnamelen] != '#')) { + is_clone = B_TRUE; + } + + if (strchr(fromsnap, '@')) { + dsl_dataset_t *fromds; + err = dsl_dataset_hold(dp, fromsnap, FTAG, &fromds); + if (err == 0) { + if (!dsl_dataset_is_before(ds, fromds, 0)) + err = SET_ERROR(EXDEV); + zb.zbm_creation_time = + dsl_dataset_phys(fromds)->ds_creation_time; + zb.zbm_creation_txg = + dsl_dataset_phys(fromds)->ds_creation_txg; + zb.zbm_guid = dsl_dataset_phys(fromds)->ds_guid; + is_clone = (ds->ds_dir != fromds->ds_dir); + dsl_dataset_rele(fromds, FTAG); + } + } else { + err = dsl_bookmark_lookup(dp, fromsnap, ds, &zb); + } + if (err != 0) { + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (err); + } + err = dmu_send_impl(FTAG, dp, ds, &zb, is_clone, + embedok, large_block_ok, compressok, + outfd, resumeobj, resumeoff, vp, off); + } else { + err = dmu_send_impl(FTAG, dp, ds, NULL, B_FALSE, + embedok, large_block_ok, compressok, + outfd, resumeobj, resumeoff, vp, off); + } + if (owned) + dsl_dataset_disown(ds, FTAG); + else + dsl_dataset_rele(ds, FTAG); + return (err); +} + +static int +dmu_adjust_send_estimate_for_indirects(dsl_dataset_t *ds, uint64_t uncompressed, + uint64_t compressed, boolean_t stream_compressed, uint64_t *sizep) +{ + int err; + uint64_t size; + /* + * Assume that space (both on-disk and in-stream) is dominated by + * data. We will adjust for indirect blocks and the copies property, + * but ignore per-object space used (eg, dnodes and DRR_OBJECT records). + */ + + uint64_t recordsize; + uint64_t record_count; + objset_t *os; + VERIFY0(dmu_objset_from_ds(ds, &os)); + + /* Assume all (uncompressed) blocks are recordsize. */ + if (os->os_phys->os_type == DMU_OST_ZVOL) { + err = dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), &recordsize); + } else { + err = dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_RECORDSIZE), &recordsize); + } + if (err != 0) + return (err); + record_count = uncompressed / recordsize; + + /* + * If we're estimating a send size for a compressed stream, use the + * compressed data size to estimate the stream size. Otherwise, use the + * uncompressed data size. + */ + size = stream_compressed ? compressed : uncompressed; + + /* + * Subtract out approximate space used by indirect blocks. + * Assume most space is used by data blocks (non-indirect, non-dnode). + * Assume no ditto blocks or internal fragmentation. + * + * Therefore, space used by indirect blocks is sizeof(blkptr_t) per + * block. + */ + size -= record_count * sizeof (blkptr_t); + + /* Add in the space for the record associated with each block. */ + size += record_count * sizeof (dmu_replay_record_t); + + *sizep = size; + + return (0); +} + +int +dmu_send_estimate(dsl_dataset_t *ds, dsl_dataset_t *fromds, + boolean_t stream_compressed, uint64_t *sizep) +{ + int err; + uint64_t uncomp, comp; + + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + + /* tosnap must be a snapshot */ + if (!ds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + /* fromsnap, if provided, must be a snapshot */ + if (fromds != NULL && !fromds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + /* + * fromsnap must be an earlier snapshot from the same fs as tosnap, + * or the origin's fs. + */ + if (fromds != NULL && !dsl_dataset_is_before(ds, fromds, 0)) + return (SET_ERROR(EXDEV)); + + /* Get compressed and uncompressed size estimates of changed data. */ + if (fromds == NULL) { + uncomp = dsl_dataset_phys(ds)->ds_uncompressed_bytes; + comp = dsl_dataset_phys(ds)->ds_compressed_bytes; + } else { + uint64_t used; + err = dsl_dataset_space_written(fromds, ds, + &used, &comp, &uncomp); + if (err != 0) + return (err); + } + + err = dmu_adjust_send_estimate_for_indirects(ds, uncomp, comp, + stream_compressed, sizep); + /* + * Add the size of the BEGIN and END records to the estimate. + */ + *sizep += 2 * sizeof (dmu_replay_record_t); + return (err); +} + +struct calculate_send_arg { + uint64_t uncompressed; + uint64_t compressed; +}; + +/* + * Simple callback used to traverse the blocks of a snapshot and sum their + * uncompressed and compressed sizes. + */ +/* ARGSUSED */ +static int +dmu_calculate_send_traversal(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + struct calculate_send_arg *space = arg; + if (bp != NULL && !BP_IS_HOLE(bp)) { + space->uncompressed += BP_GET_UCSIZE(bp); + space->compressed += BP_GET_PSIZE(bp); + } + return (0); +} + +/* + * Given a desination snapshot and a TXG, calculate the approximate size of a + * send stream sent from that TXG. from_txg may be zero, indicating that the + * whole snapshot will be sent. + */ +int +dmu_send_estimate_from_txg(dsl_dataset_t *ds, uint64_t from_txg, + boolean_t stream_compressed, uint64_t *sizep) +{ + int err; + struct calculate_send_arg size = { 0 }; + + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + + /* tosnap must be a snapshot */ + if (!dsl_dataset_is_snapshot(ds)) + return (SET_ERROR(EINVAL)); + + /* verify that from_txg is before the provided snapshot was taken */ + if (from_txg >= dsl_dataset_phys(ds)->ds_creation_txg) { + return (SET_ERROR(EXDEV)); + } + /* + * traverse the blocks of the snapshot with birth times after + * from_txg, summing their uncompressed size + */ + err = traverse_dataset(ds, from_txg, TRAVERSE_POST, + dmu_calculate_send_traversal, &size); + + if (err) + return (err); + + err = dmu_adjust_send_estimate_for_indirects(ds, size.uncompressed, + size.compressed, stream_compressed, sizep); + return (err); +} + +typedef struct dmu_recv_begin_arg { + const char *drba_origin; + dmu_recv_cookie_t *drba_cookie; + cred_t *drba_cred; + uint64_t drba_snapobj; +} dmu_recv_begin_arg_t; + +static int +recv_begin_check_existing_impl(dmu_recv_begin_arg_t *drba, dsl_dataset_t *ds, + uint64_t fromguid) +{ + uint64_t val; + int error; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + + /* temporary clone name must not exist */ + error = zap_lookup(dp->dp_meta_objset, + dsl_dir_phys(ds->ds_dir)->dd_child_dir_zapobj, recv_clone_name, + 8, 1, &val); + if (error != ENOENT) + return (error == 0 ? EBUSY : error); + + /* new snapshot name must not exist */ + error = zap_lookup(dp->dp_meta_objset, + dsl_dataset_phys(ds)->ds_snapnames_zapobj, + drba->drba_cookie->drc_tosnap, 8, 1, &val); + if (error != ENOENT) + return (error == 0 ? EEXIST : error); + + /* + * Check snapshot limit before receiving. We'll recheck again at the + * end, but might as well abort before receiving if we're already over + * the limit. + * + * Note that we do not check the file system limit with + * dsl_dir_fscount_check because the temporary %clones don't count + * against that limit. + */ + error = dsl_fs_ss_limit_check(ds->ds_dir, 1, ZFS_PROP_SNAPSHOT_LIMIT, + NULL, drba->drba_cred); + if (error != 0) + return (error); + + if (fromguid != 0) { + dsl_dataset_t *snap; + uint64_t obj = dsl_dataset_phys(ds)->ds_prev_snap_obj; + + /* Find snapshot in this dir that matches fromguid. */ + while (obj != 0) { + error = dsl_dataset_hold_obj(dp, obj, FTAG, + &snap); + if (error != 0) + return (SET_ERROR(ENODEV)); + if (snap->ds_dir != ds->ds_dir) { + dsl_dataset_rele(snap, FTAG); + return (SET_ERROR(ENODEV)); + } + if (dsl_dataset_phys(snap)->ds_guid == fromguid) + break; + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj; + dsl_dataset_rele(snap, FTAG); + } + if (obj == 0) + return (SET_ERROR(ENODEV)); + + if (drba->drba_cookie->drc_force) { + drba->drba_snapobj = obj; + } else { + /* + * If we are not forcing, there must be no + * changes since fromsnap. + */ + if (dsl_dataset_modified_since_snap(ds, snap)) { + dsl_dataset_rele(snap, FTAG); + return (SET_ERROR(ETXTBSY)); + } + drba->drba_snapobj = ds->ds_prev->ds_object; + } + + dsl_dataset_rele(snap, FTAG); + } else { + /* if full, then must be forced */ + if (!drba->drba_cookie->drc_force) + return (SET_ERROR(EEXIST)); + /* start from $ORIGIN@$ORIGIN, if supported */ + drba->drba_snapobj = dp->dp_origin_snap != NULL ? + dp->dp_origin_snap->ds_object : 0; + } + + return (0); + +} + +static int +dmu_recv_begin_check(void *arg, dmu_tx_t *tx) +{ + dmu_recv_begin_arg_t *drba = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + struct drr_begin *drrb = drba->drba_cookie->drc_drrb; + uint64_t fromguid = drrb->drr_fromguid; + int flags = drrb->drr_flags; + int error; + uint64_t featureflags = DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo); + dsl_dataset_t *ds; + const char *tofs = drba->drba_cookie->drc_tofs; + + /* already checked */ + ASSERT3U(drrb->drr_magic, ==, DMU_BACKUP_MAGIC); + ASSERT(!(featureflags & DMU_BACKUP_FEATURE_RESUMING)); + + if (DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) == + DMU_COMPOUNDSTREAM || + drrb->drr_type >= DMU_OST_NUMTYPES || + ((flags & DRR_FLAG_CLONE) && drba->drba_origin == NULL)) + return (SET_ERROR(EINVAL)); + + /* Verify pool version supports SA if SA_SPILL feature set */ + if ((featureflags & DMU_BACKUP_FEATURE_SA_SPILL) && + spa_version(dp->dp_spa) < SPA_VERSION_SA) + return (SET_ERROR(ENOTSUP)); + + if (drba->drba_cookie->drc_resumable && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_EXTENSIBLE_DATASET)) + return (SET_ERROR(ENOTSUP)); + + /* + * The receiving code doesn't know how to translate a WRITE_EMBEDDED + * record to a plain WRITE record, so the pool must have the + * EMBEDDED_DATA feature enabled if the stream has WRITE_EMBEDDED + * records. Same with WRITE_EMBEDDED records that use LZ4 compression. + */ + if ((featureflags & DMU_BACKUP_FEATURE_EMBED_DATA) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_EMBEDDED_DATA)) + return (SET_ERROR(ENOTSUP)); + if ((featureflags & DMU_BACKUP_FEATURE_LZ4) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LZ4_COMPRESS)) + return (SET_ERROR(ENOTSUP)); + + /* + * The receiving code doesn't know how to translate large blocks + * to smaller ones, so the pool must have the LARGE_BLOCKS + * feature enabled if the stream has LARGE_BLOCKS. Same with + * large dnodes. + */ + if ((featureflags & DMU_BACKUP_FEATURE_LARGE_BLOCKS) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LARGE_BLOCKS)) + return (SET_ERROR(ENOTSUP)); + if ((featureflags & DMU_BACKUP_FEATURE_LARGE_DNODE) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LARGE_DNODE)) + return (SET_ERROR(ENOTSUP)); + + error = dsl_dataset_hold(dp, tofs, FTAG, &ds); + if (error == 0) { + /* target fs already exists; recv into temp clone */ + + /* Can't recv a clone into an existing fs */ + if (flags & DRR_FLAG_CLONE || drba->drba_origin) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = recv_begin_check_existing_impl(drba, ds, fromguid); + dsl_dataset_rele(ds, FTAG); + } else if (error == ENOENT) { + /* target fs does not exist; must be a full backup or clone */ + char buf[ZFS_MAX_DATASET_NAME_LEN]; + + /* + * If it's a non-clone incremental, we are missing the + * target fs, so fail the recv. + */ + if (fromguid != 0 && !(flags & DRR_FLAG_CLONE || + drba->drba_origin)) + return (SET_ERROR(ENOENT)); + + /* + * If we're receiving a full send as a clone, and it doesn't + * contain all the necessary free records and freeobject + * records, reject it. + */ + if (fromguid == 0 && drba->drba_origin && + !(flags & DRR_FLAG_FREERECORDS)) + return (SET_ERROR(EINVAL)); + + /* Open the parent of tofs */ + ASSERT3U(strlen(tofs), <, sizeof (buf)); + (void) strlcpy(buf, tofs, strrchr(tofs, '/') - tofs + 1); + error = dsl_dataset_hold(dp, buf, FTAG, &ds); + if (error != 0) + return (error); + + /* + * Check filesystem and snapshot limits before receiving. We'll + * recheck snapshot limits again at the end (we create the + * filesystems and increment those counts during begin_sync). + */ + error = dsl_fs_ss_limit_check(ds->ds_dir, 1, + ZFS_PROP_FILESYSTEM_LIMIT, NULL, drba->drba_cred); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + error = dsl_fs_ss_limit_check(ds->ds_dir, 1, + ZFS_PROP_SNAPSHOT_LIMIT, NULL, drba->drba_cred); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + if (drba->drba_origin != NULL) { + dsl_dataset_t *origin; + error = dsl_dataset_hold(dp, drba->drba_origin, + FTAG, &origin); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + if (!origin->ds_is_snapshot) { + dsl_dataset_rele(origin, FTAG); + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + if (dsl_dataset_phys(origin)->ds_guid != fromguid && + fromguid != 0) { + dsl_dataset_rele(origin, FTAG); + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENODEV)); + } + dsl_dataset_rele(origin, FTAG); + } + dsl_dataset_rele(ds, FTAG); + error = 0; + } + return (error); +} + +static void +dmu_recv_begin_sync(void *arg, dmu_tx_t *tx) +{ + dmu_recv_begin_arg_t *drba = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + struct drr_begin *drrb = drba->drba_cookie->drc_drrb; + const char *tofs = drba->drba_cookie->drc_tofs; + dsl_dataset_t *ds, *newds; + uint64_t dsobj; + int error; + uint64_t crflags = 0; + + if (drrb->drr_flags & DRR_FLAG_CI_DATA) + crflags |= DS_FLAG_CI_DATASET; + + error = dsl_dataset_hold(dp, tofs, FTAG, &ds); + if (error == 0) { + /* create temporary clone */ + dsl_dataset_t *snap = NULL; + if (drba->drba_snapobj != 0) { + VERIFY0(dsl_dataset_hold_obj(dp, + drba->drba_snapobj, FTAG, &snap)); + } + dsobj = dsl_dataset_create_sync(ds->ds_dir, recv_clone_name, + snap, crflags, drba->drba_cred, tx); + if (drba->drba_snapobj != 0) + dsl_dataset_rele(snap, FTAG); + dsl_dataset_rele(ds, FTAG); + } else { + dsl_dir_t *dd; + const char *tail; + dsl_dataset_t *origin = NULL; + + VERIFY0(dsl_dir_hold(dp, tofs, FTAG, &dd, &tail)); + + if (drba->drba_origin != NULL) { + VERIFY0(dsl_dataset_hold(dp, drba->drba_origin, + FTAG, &origin)); + } + + /* Create new dataset. */ + dsobj = dsl_dataset_create_sync(dd, + strrchr(tofs, '/') + 1, + origin, crflags, drba->drba_cred, tx); + if (origin != NULL) + dsl_dataset_rele(origin, FTAG); + dsl_dir_rele(dd, FTAG); + drba->drba_cookie->drc_newfs = B_TRUE; + } + VERIFY0(dsl_dataset_own_obj(dp, dsobj, dmu_recv_tag, &newds)); + + if (drba->drba_cookie->drc_resumable) { + uint64_t one = 1; + uint64_t zero = 0; + + dsl_dataset_zapify(newds, tx); + if (drrb->drr_fromguid != 0) { + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_FROMGUID, + 8, 1, &drrb->drr_fromguid, tx)); + } + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_TOGUID, + 8, 1, &drrb->drr_toguid, tx)); + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_TONAME, + 1, strlen(drrb->drr_toname) + 1, drrb->drr_toname, tx)); + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_OBJECT, + 8, 1, &one, tx)); + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_OFFSET, + 8, 1, &zero, tx)); + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_BYTES, + 8, 1, &zero, tx)); + if (DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo) & + DMU_BACKUP_FEATURE_LARGE_BLOCKS) { + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_LARGEBLOCK, + 8, 1, &one, tx)); + } + if (DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo) & + DMU_BACKUP_FEATURE_EMBED_DATA) { + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_EMBEDOK, + 8, 1, &one, tx)); + } + if (DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo) & + DMU_BACKUP_FEATURE_COMPRESSED) { + VERIFY0(zap_add(mos, dsobj, DS_FIELD_RESUME_COMPRESSOK, + 8, 1, &one, tx)); + } + } + + dmu_buf_will_dirty(newds->ds_dbuf, tx); + dsl_dataset_phys(newds)->ds_flags |= DS_FLAG_INCONSISTENT; + + /* + * If we actually created a non-clone, we need to create the + * objset in our new dataset. + */ + rrw_enter(&newds->ds_bp_rwlock, RW_READER, FTAG); + if (BP_IS_HOLE(dsl_dataset_get_blkptr(newds))) { + (void) dmu_objset_create_impl(dp->dp_spa, + newds, dsl_dataset_get_blkptr(newds), drrb->drr_type, tx); + } + rrw_exit(&newds->ds_bp_rwlock, FTAG); + + drba->drba_cookie->drc_ds = newds; + + spa_history_log_internal_ds(newds, "receive", tx, ""); +} + +static int +dmu_recv_resume_begin_check(void *arg, dmu_tx_t *tx) +{ + dmu_recv_begin_arg_t *drba = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + struct drr_begin *drrb = drba->drba_cookie->drc_drrb; + int error; + uint64_t featureflags = DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo); + dsl_dataset_t *ds; + const char *tofs = drba->drba_cookie->drc_tofs; + uint64_t val; + + /* 6 extra bytes for /%recv */ + char recvname[ZFS_MAX_DATASET_NAME_LEN + 6]; + + /* already checked */ + ASSERT3U(drrb->drr_magic, ==, DMU_BACKUP_MAGIC); + ASSERT(featureflags & DMU_BACKUP_FEATURE_RESUMING); + + if (DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) == + DMU_COMPOUNDSTREAM || + drrb->drr_type >= DMU_OST_NUMTYPES) + return (SET_ERROR(EINVAL)); + + /* Verify pool version supports SA if SA_SPILL feature set */ + if ((featureflags & DMU_BACKUP_FEATURE_SA_SPILL) && + spa_version(dp->dp_spa) < SPA_VERSION_SA) + return (SET_ERROR(ENOTSUP)); + + /* + * The receiving code doesn't know how to translate a WRITE_EMBEDDED + * record to a plain WRITE record, so the pool must have the + * EMBEDDED_DATA feature enabled if the stream has WRITE_EMBEDDED + * records. Same with WRITE_EMBEDDED records that use LZ4 compression. + */ + if ((featureflags & DMU_BACKUP_FEATURE_EMBED_DATA) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_EMBEDDED_DATA)) + return (SET_ERROR(ENOTSUP)); + if ((featureflags & DMU_BACKUP_FEATURE_LZ4) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LZ4_COMPRESS)) + return (SET_ERROR(ENOTSUP)); + + /* + * The receiving code doesn't know how to translate large blocks + * to smaller ones, so the pool must have the LARGE_BLOCKS + * feature enabled if the stream has LARGE_BLOCKS. Same with + * large dnodes. + */ + if ((featureflags & DMU_BACKUP_FEATURE_LARGE_BLOCKS) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LARGE_BLOCKS)) + return (SET_ERROR(ENOTSUP)); + if ((featureflags & DMU_BACKUP_FEATURE_LARGE_DNODE) && + !spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_LARGE_DNODE)) + return (SET_ERROR(ENOTSUP)); + + (void) snprintf(recvname, sizeof (recvname), "%s/%s", + tofs, recv_clone_name); + + if (dsl_dataset_hold(dp, recvname, FTAG, &ds) != 0) { + /* %recv does not exist; continue in tofs */ + error = dsl_dataset_hold(dp, tofs, FTAG, &ds); + if (error != 0) + return (error); + } + + /* check that ds is marked inconsistent */ + if (!DS_IS_INCONSISTENT(ds)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + /* check that there is resuming data, and that the toguid matches */ + if (!dsl_dataset_is_zapified(ds)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + error = zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_TOGUID, sizeof (val), 1, &val); + if (error != 0 || drrb->drr_toguid != val) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + /* + * Check if the receive is still running. If so, it will be owned. + * Note that nothing else can own the dataset (e.g. after the receive + * fails) because it will be marked inconsistent. + */ + if (dsl_dataset_has_owner(ds)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EBUSY)); + } + + /* There should not be any snapshots of this fs yet. */ + if (ds->ds_prev != NULL && ds->ds_prev->ds_dir == ds->ds_dir) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + /* + * Note: resume point will be checked when we process the first WRITE + * record. + */ + + /* check that the origin matches */ + val = 0; + (void) zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_FROMGUID, sizeof (val), 1, &val); + if (drrb->drr_fromguid != val) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dmu_recv_resume_begin_sync(void *arg, dmu_tx_t *tx) +{ + dmu_recv_begin_arg_t *drba = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + const char *tofs = drba->drba_cookie->drc_tofs; + dsl_dataset_t *ds; + uint64_t dsobj; + /* 6 extra bytes for /%recv */ + char recvname[ZFS_MAX_DATASET_NAME_LEN + 6]; + + (void) snprintf(recvname, sizeof (recvname), "%s/%s", + tofs, recv_clone_name); + + if (dsl_dataset_hold(dp, recvname, FTAG, &ds) != 0) { + /* %recv does not exist; continue in tofs */ + VERIFY0(dsl_dataset_hold(dp, tofs, FTAG, &ds)); + drba->drba_cookie->drc_newfs = B_TRUE; + } + + /* clear the inconsistent flag so that we can own it */ + ASSERT(DS_IS_INCONSISTENT(ds)); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_flags &= ~DS_FLAG_INCONSISTENT; + dsobj = ds->ds_object; + dsl_dataset_rele(ds, FTAG); + + VERIFY0(dsl_dataset_own_obj(dp, dsobj, dmu_recv_tag, &ds)); + + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_INCONSISTENT; + + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + ASSERT(!BP_IS_HOLE(dsl_dataset_get_blkptr(ds))); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + + drba->drba_cookie->drc_ds = ds; + + spa_history_log_internal_ds(ds, "resume receive", tx, ""); +} + +/* + * NB: callers *MUST* call dmu_recv_stream() if dmu_recv_begin() + * succeeds; otherwise we will leak the holds on the datasets. + */ +int +dmu_recv_begin(char *tofs, char *tosnap, dmu_replay_record_t *drr_begin, + boolean_t force, boolean_t resumable, char *origin, dmu_recv_cookie_t *drc) +{ + dmu_recv_begin_arg_t drba = { 0 }; + + bzero(drc, sizeof (dmu_recv_cookie_t)); + drc->drc_drr_begin = drr_begin; + drc->drc_drrb = &drr_begin->drr_u.drr_begin; + drc->drc_tosnap = tosnap; + drc->drc_tofs = tofs; + drc->drc_force = force; + drc->drc_resumable = resumable; + drc->drc_cred = CRED(); + drc->drc_clone = (origin != NULL); + + if (drc->drc_drrb->drr_magic == BSWAP_64(DMU_BACKUP_MAGIC)) { + drc->drc_byteswap = B_TRUE; + (void) fletcher_4_incremental_byteswap(drr_begin, + sizeof (dmu_replay_record_t), &drc->drc_cksum); + byteswap_record(drr_begin); + } else if (drc->drc_drrb->drr_magic == DMU_BACKUP_MAGIC) { + (void) fletcher_4_incremental_native(drr_begin, + sizeof (dmu_replay_record_t), &drc->drc_cksum); + } else { + return (SET_ERROR(EINVAL)); + } + + drba.drba_origin = origin; + drba.drba_cookie = drc; + drba.drba_cred = CRED(); + + if (DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo) & + DMU_BACKUP_FEATURE_RESUMING) { + return (dsl_sync_task(tofs, + dmu_recv_resume_begin_check, dmu_recv_resume_begin_sync, + &drba, 5, ZFS_SPACE_CHECK_NORMAL)); + } else { + return (dsl_sync_task(tofs, + dmu_recv_begin_check, dmu_recv_begin_sync, + &drba, 5, ZFS_SPACE_CHECK_NORMAL)); + } +} + +struct receive_record_arg { + dmu_replay_record_t header; + void *payload; /* Pointer to a buffer containing the payload */ + /* + * If the record is a write, pointer to the arc_buf_t containing the + * payload. + */ + arc_buf_t *write_buf; + int payload_size; + uint64_t bytes_read; /* bytes read from stream when record created */ + boolean_t eos_marker; /* Marks the end of the stream */ + bqueue_node_t node; +}; + +struct receive_writer_arg { + objset_t *os; + boolean_t byteswap; + bqueue_t q; + + /* + * These three args are used to signal to the main thread that we're + * done. + */ + kmutex_t mutex; + kcondvar_t cv; + boolean_t done; + + int err; + /* A map from guid to dataset to help handle dedup'd streams. */ + avl_tree_t *guid_to_ds_map; + boolean_t resumable; + uint64_t last_object; + uint64_t last_offset; + uint64_t max_object; /* highest object ID referenced in stream */ + uint64_t bytes_read; /* bytes read when current record created */ +}; + +struct objlist { + list_t list; /* List of struct receive_objnode. */ + /* + * Last object looked up. Used to assert that objects are being looked + * up in ascending order. + */ + uint64_t last_lookup; +}; + +struct receive_objnode { + list_node_t node; + uint64_t object; +}; + +struct receive_arg { + objset_t *os; + vnode_t *vp; /* The vnode to read the stream from */ + uint64_t voff; /* The current offset in the stream */ + uint64_t bytes_read; + /* + * A record that has had its payload read in, but hasn't yet been handed + * off to the worker thread. + */ + struct receive_record_arg *rrd; + /* A record that has had its header read in, but not its payload. */ + struct receive_record_arg *next_rrd; + zio_cksum_t cksum; + zio_cksum_t prev_cksum; + int err; + boolean_t byteswap; + /* Sorted list of objects not to issue prefetches for. */ + struct objlist ignore_objlist; +}; + +typedef struct guid_map_entry { + uint64_t guid; + dsl_dataset_t *gme_ds; + avl_node_t avlnode; +} guid_map_entry_t; + +static int +guid_compare(const void *arg1, const void *arg2) +{ + const guid_map_entry_t *gmep1 = (const guid_map_entry_t *)arg1; + const guid_map_entry_t *gmep2 = (const guid_map_entry_t *)arg2; + + return (AVL_CMP(gmep1->guid, gmep2->guid)); +} + +static void +free_guid_map_onexit(void *arg) +{ + avl_tree_t *ca = arg; + void *cookie = NULL; + guid_map_entry_t *gmep; + + while ((gmep = avl_destroy_nodes(ca, &cookie)) != NULL) { + dsl_dataset_long_rele(gmep->gme_ds, gmep); + dsl_dataset_rele(gmep->gme_ds, gmep); + kmem_free(gmep, sizeof (guid_map_entry_t)); + } + avl_destroy(ca); + kmem_free(ca, sizeof (avl_tree_t)); +} + +static int +receive_read(struct receive_arg *ra, int len, void *buf) +{ + int done = 0; + + /* + * The code doesn't rely on this (lengths being multiples of 8). See + * comment in dump_bytes. + */ + ASSERT0(len % 8); + + while (done < len) { + ssize_t resid; + + ra->err = vn_rdwr(UIO_READ, ra->vp, + (char *)buf + done, len - done, + ra->voff, UIO_SYSSPACE, FAPPEND, + RLIM64_INFINITY, CRED(), &resid); + + if (resid == len - done) { + /* + * Note: ECKSUM indicates that the receive + * was interrupted and can potentially be resumed. + */ + ra->err = SET_ERROR(ECKSUM); + } + ra->voff += len - done - resid; + done = len - resid; + if (ra->err != 0) + return (ra->err); + } + + ra->bytes_read += len; + + ASSERT3U(done, ==, len); + return (0); +} + +noinline static void +byteswap_record(dmu_replay_record_t *drr) +{ +#define DO64(X) (drr->drr_u.X = BSWAP_64(drr->drr_u.X)) +#define DO32(X) (drr->drr_u.X = BSWAP_32(drr->drr_u.X)) + drr->drr_type = BSWAP_32(drr->drr_type); + drr->drr_payloadlen = BSWAP_32(drr->drr_payloadlen); + + switch (drr->drr_type) { + case DRR_BEGIN: + DO64(drr_begin.drr_magic); + DO64(drr_begin.drr_versioninfo); + DO64(drr_begin.drr_creation_time); + DO32(drr_begin.drr_type); + DO32(drr_begin.drr_flags); + DO64(drr_begin.drr_toguid); + DO64(drr_begin.drr_fromguid); + break; + case DRR_OBJECT: + DO64(drr_object.drr_object); + DO32(drr_object.drr_type); + DO32(drr_object.drr_bonustype); + DO32(drr_object.drr_blksz); + DO32(drr_object.drr_bonuslen); + DO64(drr_object.drr_toguid); + break; + case DRR_FREEOBJECTS: + DO64(drr_freeobjects.drr_firstobj); + DO64(drr_freeobjects.drr_numobjs); + DO64(drr_freeobjects.drr_toguid); + break; + case DRR_WRITE: + DO64(drr_write.drr_object); + DO32(drr_write.drr_type); + DO64(drr_write.drr_offset); + DO64(drr_write.drr_logical_size); + DO64(drr_write.drr_toguid); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_write.drr_key.ddk_cksum); + DO64(drr_write.drr_key.ddk_prop); + DO64(drr_write.drr_compressed_size); + break; + case DRR_WRITE_BYREF: + DO64(drr_write_byref.drr_object); + DO64(drr_write_byref.drr_offset); + DO64(drr_write_byref.drr_length); + DO64(drr_write_byref.drr_toguid); + DO64(drr_write_byref.drr_refguid); + DO64(drr_write_byref.drr_refobject); + DO64(drr_write_byref.drr_refoffset); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_write_byref. + drr_key.ddk_cksum); + DO64(drr_write_byref.drr_key.ddk_prop); + break; + case DRR_WRITE_EMBEDDED: + DO64(drr_write_embedded.drr_object); + DO64(drr_write_embedded.drr_offset); + DO64(drr_write_embedded.drr_length); + DO64(drr_write_embedded.drr_toguid); + DO32(drr_write_embedded.drr_lsize); + DO32(drr_write_embedded.drr_psize); + break; + case DRR_FREE: + DO64(drr_free.drr_object); + DO64(drr_free.drr_offset); + DO64(drr_free.drr_length); + DO64(drr_free.drr_toguid); + break; + case DRR_SPILL: + DO64(drr_spill.drr_object); + DO64(drr_spill.drr_length); + DO64(drr_spill.drr_toguid); + break; + case DRR_END: + DO64(drr_end.drr_toguid); + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_end.drr_checksum); + break; + default: + break; + } + + if (drr->drr_type != DRR_BEGIN) { + ZIO_CHECKSUM_BSWAP(&drr->drr_u.drr_checksum.drr_checksum); + } + +#undef DO64 +#undef DO32 +} + +static inline uint8_t +deduce_nblkptr(dmu_object_type_t bonus_type, uint64_t bonus_size) +{ + if (bonus_type == DMU_OT_SA) { + return (1); + } else { + return (1 + + ((DN_OLD_MAX_BONUSLEN - + MIN(DN_OLD_MAX_BONUSLEN, bonus_size)) >> SPA_BLKPTRSHIFT)); + } +} + +static void +save_resume_state(struct receive_writer_arg *rwa, + uint64_t object, uint64_t offset, dmu_tx_t *tx) +{ + int txgoff = dmu_tx_get_txg(tx) & TXG_MASK; + + if (!rwa->resumable) + return; + + /* + * We use ds_resume_bytes[] != 0 to indicate that we need to + * update this on disk, so it must not be 0. + */ + ASSERT(rwa->bytes_read != 0); + + /* + * We only resume from write records, which have a valid + * (non-meta-dnode) object number. + */ + ASSERT(object != 0); + + /* + * For resuming to work correctly, we must receive records in order, + * sorted by object,offset. This is checked by the callers, but + * assert it here for good measure. + */ + ASSERT3U(object, >=, rwa->os->os_dsl_dataset->ds_resume_object[txgoff]); + ASSERT(object != rwa->os->os_dsl_dataset->ds_resume_object[txgoff] || + offset >= rwa->os->os_dsl_dataset->ds_resume_offset[txgoff]); + ASSERT3U(rwa->bytes_read, >=, + rwa->os->os_dsl_dataset->ds_resume_bytes[txgoff]); + + rwa->os->os_dsl_dataset->ds_resume_object[txgoff] = object; + rwa->os->os_dsl_dataset->ds_resume_offset[txgoff] = offset; + rwa->os->os_dsl_dataset->ds_resume_bytes[txgoff] = rwa->bytes_read; +} + +noinline static int +receive_object(struct receive_writer_arg *rwa, struct drr_object *drro, + void *data) +{ + dmu_object_info_t doi; + dmu_tx_t *tx; + uint64_t object; + int err; + + if (drro->drr_type == DMU_OT_NONE || + !DMU_OT_IS_VALID(drro->drr_type) || + !DMU_OT_IS_VALID(drro->drr_bonustype) || + drro->drr_checksumtype >= ZIO_CHECKSUM_FUNCTIONS || + drro->drr_compress >= ZIO_COMPRESS_FUNCTIONS || + P2PHASE(drro->drr_blksz, SPA_MINBLOCKSIZE) || + drro->drr_blksz < SPA_MINBLOCKSIZE || + drro->drr_blksz > spa_maxblocksize(dmu_objset_spa(rwa->os)) || + drro->drr_bonuslen > + DN_BONUS_SIZE(spa_maxdnodesize(dmu_objset_spa(rwa->os))) || + drro->drr_dn_slots > + (spa_maxdnodesize(dmu_objset_spa(rwa->os)) >> DNODE_SHIFT)) { + return (SET_ERROR(EINVAL)); + } + + err = dmu_object_info(rwa->os, drro->drr_object, &doi); + + if (err != 0 && err != ENOENT) + return (SET_ERROR(EINVAL)); + object = err == 0 ? drro->drr_object : DMU_NEW_OBJECT; + + if (drro->drr_object > rwa->max_object) + rwa->max_object = drro->drr_object; + + /* + * If we are losing blkptrs or changing the block size this must + * be a new file instance. We must clear out the previous file + * contents before we can change this type of metadata in the dnode. + */ + if (err == 0) { + int nblkptr; + + nblkptr = deduce_nblkptr(drro->drr_bonustype, + drro->drr_bonuslen); + + if (drro->drr_blksz != doi.doi_data_block_size || + nblkptr < doi.doi_nblkptr) { + err = dmu_free_long_range(rwa->os, drro->drr_object, + 0, DMU_OBJECT_END); + if (err != 0) + return (SET_ERROR(EINVAL)); + } + } + + tx = dmu_tx_create(rwa->os); + dmu_tx_hold_bonus(tx, object); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err != 0) { + dmu_tx_abort(tx); + return (err); + } + + if (object == DMU_NEW_OBJECT) { + /* currently free, want to be allocated */ + err = dmu_object_claim_dnsize(rwa->os, drro->drr_object, + drro->drr_type, drro->drr_blksz, + drro->drr_bonustype, drro->drr_bonuslen, + drro->drr_dn_slots << DNODE_SHIFT, tx); + } else if (drro->drr_type != doi.doi_type || + drro->drr_blksz != doi.doi_data_block_size || + drro->drr_bonustype != doi.doi_bonus_type || + drro->drr_bonuslen != doi.doi_bonus_size) { + /* currently allocated, but with different properties */ + err = dmu_object_reclaim(rwa->os, drro->drr_object, + drro->drr_type, drro->drr_blksz, + drro->drr_bonustype, drro->drr_bonuslen, tx); + } + if (err != 0) { + dmu_tx_commit(tx); + return (SET_ERROR(EINVAL)); + } + + dmu_object_set_checksum(rwa->os, drro->drr_object, + drro->drr_checksumtype, tx); + dmu_object_set_compress(rwa->os, drro->drr_object, + drro->drr_compress, tx); + + if (data != NULL) { + dmu_buf_t *db; + + VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG, &db)); + dmu_buf_will_dirty(db, tx); + + ASSERT3U(db->db_size, >=, drro->drr_bonuslen); + bcopy(data, db->db_data, drro->drr_bonuslen); + if (rwa->byteswap) { + dmu_object_byteswap_t byteswap = + DMU_OT_BYTESWAP(drro->drr_bonustype); + dmu_ot_byteswap[byteswap].ob_func(db->db_data, + drro->drr_bonuslen); + } + dmu_buf_rele(db, FTAG); + } + dmu_tx_commit(tx); + + return (0); +} + +/* ARGSUSED */ +noinline static int +receive_freeobjects(struct receive_writer_arg *rwa, + struct drr_freeobjects *drrfo) +{ + uint64_t obj; + int next_err = 0; + + if (drrfo->drr_firstobj + drrfo->drr_numobjs < drrfo->drr_firstobj) + return (SET_ERROR(EINVAL)); + + for (obj = drrfo->drr_firstobj == 0 ? 1 : drrfo->drr_firstobj; + obj < drrfo->drr_firstobj + drrfo->drr_numobjs && next_err == 0; + next_err = dmu_object_next(rwa->os, &obj, FALSE, 0)) { + dmu_object_info_t doi; + int err; + + err = dmu_object_info(rwa->os, obj, &doi); + if (err == ENOENT) + continue; + else if (err != 0) + return (err); + + err = dmu_free_long_object(rwa->os, obj); + if (err != 0) + return (err); + + if (obj > rwa->max_object) + rwa->max_object = obj; + } + if (next_err != ESRCH) + return (next_err); + return (0); +} + +noinline static int +receive_write(struct receive_writer_arg *rwa, struct drr_write *drrw, + arc_buf_t *abuf) +{ + dmu_tx_t *tx; + dmu_buf_t *bonus; + int err; + + if (drrw->drr_offset + drrw->drr_logical_size < drrw->drr_offset || + !DMU_OT_IS_VALID(drrw->drr_type)) + return (SET_ERROR(EINVAL)); + + /* + * For resuming to work, records must be in increasing order + * by (object, offset). + */ + if (drrw->drr_object < rwa->last_object || + (drrw->drr_object == rwa->last_object && + drrw->drr_offset < rwa->last_offset)) { + return (SET_ERROR(EINVAL)); + } + rwa->last_object = drrw->drr_object; + rwa->last_offset = drrw->drr_offset; + + if (rwa->last_object > rwa->max_object) + rwa->max_object = rwa->last_object; + + if (dmu_object_info(rwa->os, drrw->drr_object, NULL) != 0) + return (SET_ERROR(EINVAL)); + + tx = dmu_tx_create(rwa->os); + + dmu_tx_hold_write(tx, drrw->drr_object, + drrw->drr_offset, drrw->drr_logical_size); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err != 0) { + dmu_tx_abort(tx); + return (err); + } + if (rwa->byteswap) { + dmu_object_byteswap_t byteswap = + DMU_OT_BYTESWAP(drrw->drr_type); + dmu_ot_byteswap[byteswap].ob_func(abuf->b_data, + DRR_WRITE_PAYLOAD_SIZE(drrw)); + } + + /* use the bonus buf to look up the dnode in dmu_assign_arcbuf */ + if (dmu_bonus_hold(rwa->os, drrw->drr_object, FTAG, &bonus) != 0) + return (SET_ERROR(EINVAL)); + dmu_assign_arcbuf(bonus, drrw->drr_offset, abuf, tx); + + /* + * Note: If the receive fails, we want the resume stream to start + * with the same record that we last successfully received (as opposed + * to the next record), so that we can verify that we are + * resuming from the correct location. + */ + save_resume_state(rwa, drrw->drr_object, drrw->drr_offset, tx); + dmu_tx_commit(tx); + dmu_buf_rele(bonus, FTAG); + + return (0); +} + +/* + * Handle a DRR_WRITE_BYREF record. This record is used in dedup'ed + * streams to refer to a copy of the data that is already on the + * system because it came in earlier in the stream. This function + * finds the earlier copy of the data, and uses that copy instead of + * data from the stream to fulfill this write. + */ +static int +receive_write_byref(struct receive_writer_arg *rwa, + struct drr_write_byref *drrwbr) +{ + dmu_tx_t *tx; + int err; + guid_map_entry_t gmesrch; + guid_map_entry_t *gmep; + avl_index_t where; + objset_t *ref_os = NULL; + dmu_buf_t *dbp; + + if (drrwbr->drr_offset + drrwbr->drr_length < drrwbr->drr_offset) + return (SET_ERROR(EINVAL)); + + /* + * If the GUID of the referenced dataset is different from the + * GUID of the target dataset, find the referenced dataset. + */ + if (drrwbr->drr_toguid != drrwbr->drr_refguid) { + gmesrch.guid = drrwbr->drr_refguid; + if ((gmep = avl_find(rwa->guid_to_ds_map, &gmesrch, + &where)) == NULL) { + return (SET_ERROR(EINVAL)); + } + if (dmu_objset_from_ds(gmep->gme_ds, &ref_os)) + return (SET_ERROR(EINVAL)); + } else { + ref_os = rwa->os; + } + + if (drrwbr->drr_object > rwa->max_object) + rwa->max_object = drrwbr->drr_object; + + err = dmu_buf_hold(ref_os, drrwbr->drr_refobject, + drrwbr->drr_refoffset, FTAG, &dbp, DMU_READ_PREFETCH); + if (err != 0) + return (err); + + tx = dmu_tx_create(rwa->os); + + dmu_tx_hold_write(tx, drrwbr->drr_object, + drrwbr->drr_offset, drrwbr->drr_length); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err != 0) { + dmu_tx_abort(tx); + return (err); + } + dmu_write(rwa->os, drrwbr->drr_object, + drrwbr->drr_offset, drrwbr->drr_length, dbp->db_data, tx); + dmu_buf_rele(dbp, FTAG); + + /* See comment in restore_write. */ + save_resume_state(rwa, drrwbr->drr_object, drrwbr->drr_offset, tx); + dmu_tx_commit(tx); + return (0); +} + +static int +receive_write_embedded(struct receive_writer_arg *rwa, + struct drr_write_embedded *drrwe, void *data) +{ + dmu_tx_t *tx; + int err; + + if (drrwe->drr_offset + drrwe->drr_length < drrwe->drr_offset) + return (EINVAL); + + if (drrwe->drr_psize > BPE_PAYLOAD_SIZE) + return (EINVAL); + + if (drrwe->drr_etype >= NUM_BP_EMBEDDED_TYPES) + return (EINVAL); + if (drrwe->drr_compression >= ZIO_COMPRESS_FUNCTIONS) + return (EINVAL); + + if (drrwe->drr_object > rwa->max_object) + rwa->max_object = drrwe->drr_object; + + tx = dmu_tx_create(rwa->os); + + dmu_tx_hold_write(tx, drrwe->drr_object, + drrwe->drr_offset, drrwe->drr_length); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err != 0) { + dmu_tx_abort(tx); + return (err); + } + + dmu_write_embedded(rwa->os, drrwe->drr_object, + drrwe->drr_offset, data, drrwe->drr_etype, + drrwe->drr_compression, drrwe->drr_lsize, drrwe->drr_psize, + rwa->byteswap ^ ZFS_HOST_BYTEORDER, tx); + + /* See comment in restore_write. */ + save_resume_state(rwa, drrwe->drr_object, drrwe->drr_offset, tx); + dmu_tx_commit(tx); + return (0); +} + +static int +receive_spill(struct receive_writer_arg *rwa, struct drr_spill *drrs, + void *data) +{ + dmu_tx_t *tx; + dmu_buf_t *db, *db_spill; + int err; + + if (drrs->drr_length < SPA_MINBLOCKSIZE || + drrs->drr_length > spa_maxblocksize(dmu_objset_spa(rwa->os))) + return (SET_ERROR(EINVAL)); + + if (dmu_object_info(rwa->os, drrs->drr_object, NULL) != 0) + return (SET_ERROR(EINVAL)); + + if (drrs->drr_object > rwa->max_object) + rwa->max_object = drrs->drr_object; + + VERIFY0(dmu_bonus_hold(rwa->os, drrs->drr_object, FTAG, &db)); + if ((err = dmu_spill_hold_by_bonus(db, FTAG, &db_spill)) != 0) { + dmu_buf_rele(db, FTAG); + return (err); + } + + tx = dmu_tx_create(rwa->os); + + dmu_tx_hold_spill(tx, db->db_object); + + err = dmu_tx_assign(tx, TXG_WAIT); + if (err != 0) { + dmu_buf_rele(db, FTAG); + dmu_buf_rele(db_spill, FTAG); + dmu_tx_abort(tx); + return (err); + } + dmu_buf_will_dirty(db_spill, tx); + + if (db_spill->db_size < drrs->drr_length) + VERIFY(0 == dbuf_spill_set_blksz(db_spill, + drrs->drr_length, tx)); + bcopy(data, db_spill->db_data, drrs->drr_length); + + dmu_buf_rele(db, FTAG); + dmu_buf_rele(db_spill, FTAG); + + dmu_tx_commit(tx); + return (0); +} + +/* ARGSUSED */ +noinline static int +receive_free(struct receive_writer_arg *rwa, struct drr_free *drrf) +{ + int err; + + if (drrf->drr_length != -1ULL && + drrf->drr_offset + drrf->drr_length < drrf->drr_offset) + return (SET_ERROR(EINVAL)); + + if (dmu_object_info(rwa->os, drrf->drr_object, NULL) != 0) + return (SET_ERROR(EINVAL)); + + if (drrf->drr_object > rwa->max_object) + rwa->max_object = drrf->drr_object; + + err = dmu_free_long_range(rwa->os, drrf->drr_object, + drrf->drr_offset, drrf->drr_length); + + return (err); +} + +/* used to destroy the drc_ds on error */ +static void +dmu_recv_cleanup_ds(dmu_recv_cookie_t *drc) +{ + if (drc->drc_resumable) { + /* wait for our resume state to be written to disk */ + txg_wait_synced(drc->drc_ds->ds_dir->dd_pool, 0); + dsl_dataset_disown(drc->drc_ds, dmu_recv_tag); + } else { + char name[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_name(drc->drc_ds, name); + dsl_dataset_disown(drc->drc_ds, dmu_recv_tag); + (void) dsl_destroy_head(name); + } +} + +static void +receive_cksum(struct receive_arg *ra, int len, void *buf) +{ + if (ra->byteswap) { + (void) fletcher_4_incremental_byteswap(buf, len, &ra->cksum); + } else { + (void) fletcher_4_incremental_native(buf, len, &ra->cksum); + } +} + +/* + * Read the payload into a buffer of size len, and update the current record's + * payload field. + * Allocate ra->next_rrd and read the next record's header into + * ra->next_rrd->header. + * Verify checksum of payload and next record. + */ +static int +receive_read_payload_and_next_header(struct receive_arg *ra, int len, void *buf) +{ + int err; + zio_cksum_t cksum_orig; + zio_cksum_t *cksump; + + if (len != 0) { + ASSERT3U(len, <=, SPA_MAXBLOCKSIZE); + err = receive_read(ra, len, buf); + if (err != 0) + return (err); + receive_cksum(ra, len, buf); + + /* note: rrd is NULL when reading the begin record's payload */ + if (ra->rrd != NULL) { + ra->rrd->payload = buf; + ra->rrd->payload_size = len; + ra->rrd->bytes_read = ra->bytes_read; + } + } + + ra->prev_cksum = ra->cksum; + + ra->next_rrd = kmem_zalloc(sizeof (*ra->next_rrd), KM_SLEEP); + err = receive_read(ra, sizeof (ra->next_rrd->header), + &ra->next_rrd->header); + ra->next_rrd->bytes_read = ra->bytes_read; + if (err != 0) { + kmem_free(ra->next_rrd, sizeof (*ra->next_rrd)); + ra->next_rrd = NULL; + return (err); + } + if (ra->next_rrd->header.drr_type == DRR_BEGIN) { + kmem_free(ra->next_rrd, sizeof (*ra->next_rrd)); + ra->next_rrd = NULL; + return (SET_ERROR(EINVAL)); + } + + /* + * Note: checksum is of everything up to but not including the + * checksum itself. + */ + ASSERT3U(offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + ==, sizeof (dmu_replay_record_t) - sizeof (zio_cksum_t)); + receive_cksum(ra, + offsetof(dmu_replay_record_t, drr_u.drr_checksum.drr_checksum), + &ra->next_rrd->header); + + cksum_orig = ra->next_rrd->header.drr_u.drr_checksum.drr_checksum; + cksump = &ra->next_rrd->header.drr_u.drr_checksum.drr_checksum; + + if (ra->byteswap) + byteswap_record(&ra->next_rrd->header); + + if ((!ZIO_CHECKSUM_IS_ZERO(cksump)) && + !ZIO_CHECKSUM_EQUAL(ra->cksum, *cksump)) { + kmem_free(ra->next_rrd, sizeof (*ra->next_rrd)); + ra->next_rrd = NULL; + return (SET_ERROR(ECKSUM)); + } + + receive_cksum(ra, sizeof (cksum_orig), &cksum_orig); + + return (0); +} + +static void +objlist_create(struct objlist *list) +{ + list_create(&list->list, sizeof (struct receive_objnode), + offsetof(struct receive_objnode, node)); + list->last_lookup = 0; +} + +static void +objlist_destroy(struct objlist *list) +{ + struct receive_objnode *n; + + for (n = list_remove_head(&list->list); + n != NULL; n = list_remove_head(&list->list)) { + kmem_free(n, sizeof (*n)); + } + list_destroy(&list->list); +} + +/* + * This function looks through the objlist to see if the specified object number + * is contained in the objlist. In the process, it will remove all object + * numbers in the list that are smaller than the specified object number. Thus, + * any lookup of an object number smaller than a previously looked up object + * number will always return false; therefore, all lookups should be done in + * ascending order. + */ +static boolean_t +objlist_exists(struct objlist *list, uint64_t object) +{ + struct receive_objnode *node = list_head(&list->list); + ASSERT3U(object, >=, list->last_lookup); + list->last_lookup = object; + while (node != NULL && node->object < object) { + VERIFY3P(node, ==, list_remove_head(&list->list)); + kmem_free(node, sizeof (*node)); + node = list_head(&list->list); + } + return (node != NULL && node->object == object); +} + +/* + * The objlist is a list of object numbers stored in ascending order. However, + * the insertion of new object numbers does not seek out the correct location to + * store a new object number; instead, it appends it to the list for simplicity. + * Thus, any users must take care to only insert new object numbers in ascending + * order. + */ +static void +objlist_insert(struct objlist *list, uint64_t object) +{ + struct receive_objnode *node = kmem_zalloc(sizeof (*node), KM_SLEEP); + node->object = object; +#ifdef ZFS_DEBUG + { + struct receive_objnode *last_object = list_tail(&list->list); + uint64_t last_objnum = (last_object != NULL ? last_object->object : 0); + ASSERT3U(node->object, >, last_objnum); + } +#endif + list_insert_tail(&list->list, node); +} + +/* + * Issue the prefetch reads for any necessary indirect blocks. + * + * We use the object ignore list to tell us whether or not to issue prefetches + * for a given object. We do this for both correctness (in case the blocksize + * of an object has changed) and performance (if the object doesn't exist, don't + * needlessly try to issue prefetches). We also trim the list as we go through + * the stream to prevent it from growing to an unbounded size. + * + * The object numbers within will always be in sorted order, and any write + * records we see will also be in sorted order, but they're not sorted with + * respect to each other (i.e. we can get several object records before + * receiving each object's write records). As a result, once we've reached a + * given object number, we can safely remove any reference to lower object + * numbers in the ignore list. In practice, we receive up to 32 object records + * before receiving write records, so the list can have up to 32 nodes in it. + */ +/* ARGSUSED */ +static void +receive_read_prefetch(struct receive_arg *ra, + uint64_t object, uint64_t offset, uint64_t length) +{ + if (!objlist_exists(&ra->ignore_objlist, object)) { + dmu_prefetch(ra->os, object, 1, offset, length, + ZIO_PRIORITY_SYNC_READ); + } +} + +/* + * Read records off the stream, issuing any necessary prefetches. + */ +static int +receive_read_record(struct receive_arg *ra) +{ + int err; + + switch (ra->rrd->header.drr_type) { + case DRR_OBJECT: + { + struct drr_object *drro = &ra->rrd->header.drr_u.drr_object; + uint32_t size = P2ROUNDUP(drro->drr_bonuslen, 8); + void *buf = kmem_zalloc(size, KM_SLEEP); + dmu_object_info_t doi; + err = receive_read_payload_and_next_header(ra, size, buf); + if (err != 0) { + kmem_free(buf, size); + return (err); + } + err = dmu_object_info(ra->os, drro->drr_object, &doi); + /* + * See receive_read_prefetch for an explanation why we're + * storing this object in the ignore_obj_list. + */ + if (err == ENOENT || + (err == 0 && doi.doi_data_block_size != drro->drr_blksz)) { + objlist_insert(&ra->ignore_objlist, drro->drr_object); + err = 0; + } + return (err); + } + case DRR_FREEOBJECTS: + { + err = receive_read_payload_and_next_header(ra, 0, NULL); + return (err); + } + case DRR_WRITE: + { + struct drr_write *drrw = &ra->rrd->header.drr_u.drr_write; + arc_buf_t *abuf; + boolean_t is_meta = DMU_OT_IS_METADATA(drrw->drr_type); + if (DRR_WRITE_COMPRESSED(drrw)) { + ASSERT3U(drrw->drr_compressed_size, >, 0); + ASSERT3U(drrw->drr_logical_size, >=, + drrw->drr_compressed_size); + ASSERT(!is_meta); + abuf = arc_loan_compressed_buf( + dmu_objset_spa(ra->os), + drrw->drr_compressed_size, drrw->drr_logical_size, + drrw->drr_compressiontype); + } else { + abuf = arc_loan_buf(dmu_objset_spa(ra->os), + is_meta, drrw->drr_logical_size); + } + + err = receive_read_payload_and_next_header(ra, + DRR_WRITE_PAYLOAD_SIZE(drrw), abuf->b_data); + if (err != 0) { + dmu_return_arcbuf(abuf); + return (err); + } + ra->rrd->write_buf = abuf; + receive_read_prefetch(ra, drrw->drr_object, drrw->drr_offset, + drrw->drr_logical_size); + return (err); + } + case DRR_WRITE_BYREF: + { + struct drr_write_byref *drrwb = + &ra->rrd->header.drr_u.drr_write_byref; + err = receive_read_payload_and_next_header(ra, 0, NULL); + receive_read_prefetch(ra, drrwb->drr_object, drrwb->drr_offset, + drrwb->drr_length); + return (err); + } + case DRR_WRITE_EMBEDDED: + { + struct drr_write_embedded *drrwe = + &ra->rrd->header.drr_u.drr_write_embedded; + uint32_t size = P2ROUNDUP(drrwe->drr_psize, 8); + void *buf = kmem_zalloc(size, KM_SLEEP); + + err = receive_read_payload_and_next_header(ra, size, buf); + if (err != 0) { + kmem_free(buf, size); + return (err); + } + + receive_read_prefetch(ra, drrwe->drr_object, drrwe->drr_offset, + drrwe->drr_length); + return (err); + } + case DRR_FREE: + { + /* + * It might be beneficial to prefetch indirect blocks here, but + * we don't really have the data to decide for sure. + */ + err = receive_read_payload_and_next_header(ra, 0, NULL); + return (err); + } + case DRR_END: + { + struct drr_end *drre = &ra->rrd->header.drr_u.drr_end; + if (!ZIO_CHECKSUM_EQUAL(ra->prev_cksum, drre->drr_checksum)) + return (SET_ERROR(ECKSUM)); + return (0); + } + case DRR_SPILL: + { + struct drr_spill *drrs = &ra->rrd->header.drr_u.drr_spill; + void *buf = kmem_zalloc(drrs->drr_length, KM_SLEEP); + err = receive_read_payload_and_next_header(ra, drrs->drr_length, + buf); + if (err != 0) + kmem_free(buf, drrs->drr_length); + return (err); + } + default: + return (SET_ERROR(EINVAL)); + } +} + +static void +dprintf_drr(struct receive_record_arg *rrd, int err) +{ + switch (rrd->header.drr_type) { + case DRR_OBJECT: + { + struct drr_object *drro = &rrd->header.drr_u.drr_object; + dprintf("drr_type = OBJECT obj = %llu type = %u " + "bonustype = %u blksz = %u bonuslen = %u cksumtype = %u " + "compress = %u dn_slots = %u err = %d\n", + drro->drr_object, drro->drr_type, drro->drr_bonustype, + drro->drr_blksz, drro->drr_bonuslen, + drro->drr_checksumtype, drro->drr_compress, + drro->drr_dn_slots, err); + break; + } + case DRR_FREEOBJECTS: + { + struct drr_freeobjects *drrfo = + &rrd->header.drr_u.drr_freeobjects; + dprintf("drr_type = FREEOBJECTS firstobj = %llu " + "numobjs = %llu err = %d\n", + drrfo->drr_firstobj, drrfo->drr_numobjs, err); + break; + } + case DRR_WRITE: + { + struct drr_write *drrw = &rrd->header.drr_u.drr_write; + dprintf("drr_type = WRITE obj = %llu type = %u offset = %llu " + "lsize = %llu cksumtype = %u cksumflags = %u " + "compress = %u psize = %llu err = %d\n", + drrw->drr_object, drrw->drr_type, drrw->drr_offset, + drrw->drr_logical_size, drrw->drr_checksumtype, + drrw->drr_checksumflags, drrw->drr_compressiontype, + drrw->drr_compressed_size, err); + break; + } + case DRR_WRITE_BYREF: + { + struct drr_write_byref *drrwbr = + &rrd->header.drr_u.drr_write_byref; + dprintf("drr_type = WRITE_BYREF obj = %llu offset = %llu " + "length = %llu toguid = %llx refguid = %llx " + "refobject = %llu refoffset = %llu cksumtype = %u " + "cksumflags = %u err = %d\n", + drrwbr->drr_object, drrwbr->drr_offset, + drrwbr->drr_length, drrwbr->drr_toguid, + drrwbr->drr_refguid, drrwbr->drr_refobject, + drrwbr->drr_refoffset, drrwbr->drr_checksumtype, + drrwbr->drr_checksumflags, err); + break; + } + case DRR_WRITE_EMBEDDED: + { + struct drr_write_embedded *drrwe = + &rrd->header.drr_u.drr_write_embedded; + dprintf("drr_type = WRITE_EMBEDDED obj = %llu offset = %llu " + "length = %llu compress = %u etype = %u lsize = %u " + "psize = %u err = %d\n", + drrwe->drr_object, drrwe->drr_offset, drrwe->drr_length, + drrwe->drr_compression, drrwe->drr_etype, + drrwe->drr_lsize, drrwe->drr_psize, err); + break; + } + case DRR_FREE: + { + struct drr_free *drrf = &rrd->header.drr_u.drr_free; + dprintf("drr_type = FREE obj = %llu offset = %llu " + "length = %lld err = %d\n", + drrf->drr_object, drrf->drr_offset, drrf->drr_length, + err); + break; + } + case DRR_SPILL: + { + struct drr_spill *drrs = &rrd->header.drr_u.drr_spill; + dprintf("drr_type = SPILL obj = %llu length = %llu " + "err = %d\n", drrs->drr_object, drrs->drr_length, err); + break; + } + default: + return; + } +} + +/* + * Commit the records to the pool. + */ +static int +receive_process_record(struct receive_writer_arg *rwa, + struct receive_record_arg *rrd) +{ + int err; + + /* Processing in order, therefore bytes_read should be increasing. */ + ASSERT3U(rrd->bytes_read, >=, rwa->bytes_read); + rwa->bytes_read = rrd->bytes_read; + + switch (rrd->header.drr_type) { + case DRR_OBJECT: + { + struct drr_object *drro = &rrd->header.drr_u.drr_object; + err = receive_object(rwa, drro, rrd->payload); + kmem_free(rrd->payload, rrd->payload_size); + rrd->payload = NULL; + break; + } + case DRR_FREEOBJECTS: + { + struct drr_freeobjects *drrfo = + &rrd->header.drr_u.drr_freeobjects; + err = receive_freeobjects(rwa, drrfo); + break; + } + case DRR_WRITE: + { + struct drr_write *drrw = &rrd->header.drr_u.drr_write; + err = receive_write(rwa, drrw, rrd->write_buf); + /* if receive_write() is successful, it consumes the arc_buf */ + if (err != 0) + dmu_return_arcbuf(rrd->write_buf); + rrd->write_buf = NULL; + rrd->payload = NULL; + break; + } + case DRR_WRITE_BYREF: + { + struct drr_write_byref *drrwbr = + &rrd->header.drr_u.drr_write_byref; + err = receive_write_byref(rwa, drrwbr); + break; + } + case DRR_WRITE_EMBEDDED: + { + struct drr_write_embedded *drrwe = + &rrd->header.drr_u.drr_write_embedded; + err = receive_write_embedded(rwa, drrwe, rrd->payload); + kmem_free(rrd->payload, rrd->payload_size); + rrd->payload = NULL; + break; + } + case DRR_FREE: + { + struct drr_free *drrf = &rrd->header.drr_u.drr_free; + err = receive_free(rwa, drrf); + break; + } + case DRR_SPILL: + { + struct drr_spill *drrs = &rrd->header.drr_u.drr_spill; + err = receive_spill(rwa, drrs, rrd->payload); + kmem_free(rrd->payload, rrd->payload_size); + rrd->payload = NULL; + break; + } + default: + return (SET_ERROR(EINVAL)); + } + + if (err != 0) + dprintf_drr(rrd, err); + + return (err); +} + +/* + * dmu_recv_stream's worker thread; pull records off the queue, and then call + * receive_process_record When we're done, signal the main thread and exit. + */ +static void +receive_writer_thread(void *arg) +{ + struct receive_writer_arg *rwa = arg; + struct receive_record_arg *rrd; + fstrans_cookie_t cookie = spl_fstrans_mark(); + + for (rrd = bqueue_dequeue(&rwa->q); !rrd->eos_marker; + rrd = bqueue_dequeue(&rwa->q)) { + /* + * If there's an error, the main thread will stop putting things + * on the queue, but we need to clear everything in it before we + * can exit. + */ + if (rwa->err == 0) { + rwa->err = receive_process_record(rwa, rrd); + } else if (rrd->write_buf != NULL) { + dmu_return_arcbuf(rrd->write_buf); + rrd->write_buf = NULL; + rrd->payload = NULL; + } else if (rrd->payload != NULL) { + kmem_free(rrd->payload, rrd->payload_size); + rrd->payload = NULL; + } + kmem_free(rrd, sizeof (*rrd)); + } + kmem_free(rrd, sizeof (*rrd)); + mutex_enter(&rwa->mutex); + rwa->done = B_TRUE; + cv_signal(&rwa->cv); + mutex_exit(&rwa->mutex); + spl_fstrans_unmark(cookie); + thread_exit(); +} + +static int +resume_check(struct receive_arg *ra, nvlist_t *begin_nvl) +{ + uint64_t val; + objset_t *mos = dmu_objset_pool(ra->os)->dp_meta_objset; + uint64_t dsobj = dmu_objset_id(ra->os); + uint64_t resume_obj, resume_off; + + if (nvlist_lookup_uint64(begin_nvl, + "resume_object", &resume_obj) != 0 || + nvlist_lookup_uint64(begin_nvl, + "resume_offset", &resume_off) != 0) { + return (SET_ERROR(EINVAL)); + } + VERIFY0(zap_lookup(mos, dsobj, + DS_FIELD_RESUME_OBJECT, sizeof (val), 1, &val)); + if (resume_obj != val) + return (SET_ERROR(EINVAL)); + VERIFY0(zap_lookup(mos, dsobj, + DS_FIELD_RESUME_OFFSET, sizeof (val), 1, &val)); + if (resume_off != val) + return (SET_ERROR(EINVAL)); + + return (0); +} + +/* + * Read in the stream's records, one by one, and apply them to the pool. There + * are two threads involved; the thread that calls this function will spin up a + * worker thread, read the records off the stream one by one, and issue + * prefetches for any necessary indirect blocks. It will then push the records + * onto an internal blocking queue. The worker thread will pull the records off + * the queue, and actually write the data into the DMU. This way, the worker + * thread doesn't have to wait for reads to complete, since everything it needs + * (the indirect blocks) will be prefetched. + * + * NB: callers *must* call dmu_recv_end() if this succeeds. + */ +int +dmu_recv_stream(dmu_recv_cookie_t *drc, vnode_t *vp, offset_t *voffp, + int cleanup_fd, uint64_t *action_handlep) +{ + int err = 0; + struct receive_arg *ra; + struct receive_writer_arg *rwa; + int featureflags; + uint32_t payloadlen; + void *payload; + nvlist_t *begin_nvl = NULL; + + ra = kmem_zalloc(sizeof (*ra), KM_SLEEP); + rwa = kmem_zalloc(sizeof (*rwa), KM_SLEEP); + + ra->byteswap = drc->drc_byteswap; + ra->cksum = drc->drc_cksum; + ra->vp = vp; + ra->voff = *voffp; + + if (dsl_dataset_is_zapified(drc->drc_ds)) { + (void) zap_lookup(drc->drc_ds->ds_dir->dd_pool->dp_meta_objset, + drc->drc_ds->ds_object, DS_FIELD_RESUME_BYTES, + sizeof (ra->bytes_read), 1, &ra->bytes_read); + } + + objlist_create(&ra->ignore_objlist); + + /* these were verified in dmu_recv_begin */ + ASSERT3U(DMU_GET_STREAM_HDRTYPE(drc->drc_drrb->drr_versioninfo), ==, + DMU_SUBSTREAM); + ASSERT3U(drc->drc_drrb->drr_type, <, DMU_OST_NUMTYPES); + + /* + * Open the objset we are modifying. + */ + VERIFY0(dmu_objset_from_ds(drc->drc_ds, &ra->os)); + + ASSERT(dsl_dataset_phys(drc->drc_ds)->ds_flags & DS_FLAG_INCONSISTENT); + + featureflags = DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo); + + /* if this stream is dedup'ed, set up the avl tree for guid mapping */ + if (featureflags & DMU_BACKUP_FEATURE_DEDUP) { + minor_t minor; + + if (cleanup_fd == -1) { + ra->err = SET_ERROR(EBADF); + goto out; + } + ra->err = zfs_onexit_fd_hold(cleanup_fd, &minor); + if (ra->err != 0) { + cleanup_fd = -1; + goto out; + } + + if (*action_handlep == 0) { + rwa->guid_to_ds_map = + kmem_alloc(sizeof (avl_tree_t), KM_SLEEP); + avl_create(rwa->guid_to_ds_map, guid_compare, + sizeof (guid_map_entry_t), + offsetof(guid_map_entry_t, avlnode)); + err = zfs_onexit_add_cb(minor, + free_guid_map_onexit, rwa->guid_to_ds_map, + action_handlep); + if (ra->err != 0) + goto out; + } else { + err = zfs_onexit_cb_data(minor, *action_handlep, + (void **)&rwa->guid_to_ds_map); + if (ra->err != 0) + goto out; + } + + drc->drc_guid_to_ds_map = rwa->guid_to_ds_map; + } + + payloadlen = drc->drc_drr_begin->drr_payloadlen; + payload = NULL; + if (payloadlen != 0) + payload = kmem_alloc(payloadlen, KM_SLEEP); + + err = receive_read_payload_and_next_header(ra, payloadlen, payload); + if (err != 0) { + if (payloadlen != 0) + kmem_free(payload, payloadlen); + goto out; + } + if (payloadlen != 0) { + err = nvlist_unpack(payload, payloadlen, &begin_nvl, KM_SLEEP); + kmem_free(payload, payloadlen); + if (err != 0) + goto out; + } + + if (featureflags & DMU_BACKUP_FEATURE_RESUMING) { + err = resume_check(ra, begin_nvl); + if (err != 0) + goto out; + } + + (void) bqueue_init(&rwa->q, zfs_recv_queue_length, + offsetof(struct receive_record_arg, node)); + cv_init(&rwa->cv, NULL, CV_DEFAULT, NULL); + mutex_init(&rwa->mutex, NULL, MUTEX_DEFAULT, NULL); + rwa->os = ra->os; + rwa->byteswap = drc->drc_byteswap; + rwa->resumable = drc->drc_resumable; + + (void) thread_create(NULL, 0, receive_writer_thread, rwa, 0, curproc, + TS_RUN, minclsyspri); + /* + * We're reading rwa->err without locks, which is safe since we are the + * only reader, and the worker thread is the only writer. It's ok if we + * miss a write for an iteration or two of the loop, since the writer + * thread will keep freeing records we send it until we send it an eos + * marker. + * + * We can leave this loop in 3 ways: First, if rwa->err is + * non-zero. In that case, the writer thread will free the rrd we just + * pushed. Second, if we're interrupted; in that case, either it's the + * first loop and ra->rrd was never allocated, or it's later and ra->rrd + * has been handed off to the writer thread who will free it. Finally, + * if receive_read_record fails or we're at the end of the stream, then + * we free ra->rrd and exit. + */ + while (rwa->err == 0) { + if (issig(JUSTLOOKING) && issig(FORREAL)) { + err = SET_ERROR(EINTR); + break; + } + + ASSERT3P(ra->rrd, ==, NULL); + ra->rrd = ra->next_rrd; + ra->next_rrd = NULL; + /* Allocates and loads header into ra->next_rrd */ + err = receive_read_record(ra); + + if (ra->rrd->header.drr_type == DRR_END || err != 0) { + kmem_free(ra->rrd, sizeof (*ra->rrd)); + ra->rrd = NULL; + break; + } + + bqueue_enqueue(&rwa->q, ra->rrd, + sizeof (struct receive_record_arg) + ra->rrd->payload_size); + ra->rrd = NULL; + } + if (ra->next_rrd == NULL) + ra->next_rrd = kmem_zalloc(sizeof (*ra->next_rrd), KM_SLEEP); + ra->next_rrd->eos_marker = B_TRUE; + bqueue_enqueue(&rwa->q, ra->next_rrd, 1); + + mutex_enter(&rwa->mutex); + while (!rwa->done) { + cv_wait(&rwa->cv, &rwa->mutex); + } + mutex_exit(&rwa->mutex); + + /* + * If we are receiving a full stream as a clone, all object IDs which + * are greater than the maximum ID referenced in the stream are + * by definition unused and must be freed. + */ + if (drc->drc_clone && drc->drc_drrb->drr_fromguid == 0) { + uint64_t obj = rwa->max_object + 1; + int free_err = 0; + int next_err = 0; + + while (next_err == 0) { + free_err = dmu_free_long_object(rwa->os, obj); + if (free_err != 0 && free_err != ENOENT) + break; + + next_err = dmu_object_next(rwa->os, &obj, FALSE, 0); + } + + if (err == 0) { + if (free_err != 0 && free_err != ENOENT) + err = free_err; + else if (next_err != ESRCH) + err = next_err; + } + } + + cv_destroy(&rwa->cv); + mutex_destroy(&rwa->mutex); + bqueue_destroy(&rwa->q); + if (err == 0) + err = rwa->err; + +out: + nvlist_free(begin_nvl); + if ((featureflags & DMU_BACKUP_FEATURE_DEDUP) && (cleanup_fd != -1)) + zfs_onexit_fd_rele(cleanup_fd); + + if (err != 0) { + /* + * Clean up references. If receive is not resumable, + * destroy what we created, so we don't leave it in + * the inconsistent state. + */ + dmu_recv_cleanup_ds(drc); + } + + *voffp = ra->voff; + objlist_destroy(&ra->ignore_objlist); + kmem_free(ra, sizeof (*ra)); + kmem_free(rwa, sizeof (*rwa)); + return (err); +} + +static int +dmu_recv_end_check(void *arg, dmu_tx_t *tx) +{ + dmu_recv_cookie_t *drc = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + int error; + + ASSERT3P(drc->drc_ds->ds_owner, ==, dmu_recv_tag); + + if (!drc->drc_newfs) { + dsl_dataset_t *origin_head; + + error = dsl_dataset_hold(dp, drc->drc_tofs, FTAG, &origin_head); + if (error != 0) + return (error); + if (drc->drc_force) { + /* + * We will destroy any snapshots in tofs (i.e. before + * origin_head) that are after the origin (which is + * the snap before drc_ds, because drc_ds can not + * have any snaps of its own). + */ + uint64_t obj; + + obj = dsl_dataset_phys(origin_head)->ds_prev_snap_obj; + while (obj != + dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) { + dsl_dataset_t *snap; + error = dsl_dataset_hold_obj(dp, obj, FTAG, + &snap); + if (error != 0) + break; + if (snap->ds_dir != origin_head->ds_dir) + error = SET_ERROR(EINVAL); + if (error == 0) { + error = dsl_destroy_snapshot_check_impl( + snap, B_FALSE); + } + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj; + dsl_dataset_rele(snap, FTAG); + if (error != 0) + break; + } + if (error != 0) { + dsl_dataset_rele(origin_head, FTAG); + return (error); + } + } + error = dsl_dataset_clone_swap_check_impl(drc->drc_ds, + origin_head, drc->drc_force, drc->drc_owner, tx); + if (error != 0) { + dsl_dataset_rele(origin_head, FTAG); + return (error); + } + error = dsl_dataset_snapshot_check_impl(origin_head, + drc->drc_tosnap, tx, B_TRUE, 1, drc->drc_cred); + dsl_dataset_rele(origin_head, FTAG); + if (error != 0) + return (error); + + error = dsl_destroy_head_check_impl(drc->drc_ds, 1); + } else { + error = dsl_dataset_snapshot_check_impl(drc->drc_ds, + drc->drc_tosnap, tx, B_TRUE, 1, drc->drc_cred); + } + return (error); +} + +static void +dmu_recv_end_sync(void *arg, dmu_tx_t *tx) +{ + dmu_recv_cookie_t *drc = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + + spa_history_log_internal_ds(drc->drc_ds, "finish receiving", + tx, "snap=%s", drc->drc_tosnap); + + if (!drc->drc_newfs) { + dsl_dataset_t *origin_head; + + VERIFY0(dsl_dataset_hold(dp, drc->drc_tofs, FTAG, + &origin_head)); + + if (drc->drc_force) { + /* + * Destroy any snapshots of drc_tofs (origin_head) + * after the origin (the snap before drc_ds). + */ + uint64_t obj; + + obj = dsl_dataset_phys(origin_head)->ds_prev_snap_obj; + while (obj != + dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) { + dsl_dataset_t *snap; + VERIFY0(dsl_dataset_hold_obj(dp, obj, FTAG, + &snap)); + ASSERT3P(snap->ds_dir, ==, origin_head->ds_dir); + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj; + dsl_destroy_snapshot_sync_impl(snap, + B_FALSE, tx); + dsl_dataset_rele(snap, FTAG); + } + } + VERIFY3P(drc->drc_ds->ds_prev, ==, + origin_head->ds_prev); + + dsl_dataset_clone_swap_sync_impl(drc->drc_ds, + origin_head, tx); + dsl_dataset_snapshot_sync_impl(origin_head, + drc->drc_tosnap, tx); + + /* set snapshot's creation time and guid */ + dmu_buf_will_dirty(origin_head->ds_prev->ds_dbuf, tx); + dsl_dataset_phys(origin_head->ds_prev)->ds_creation_time = + drc->drc_drrb->drr_creation_time; + dsl_dataset_phys(origin_head->ds_prev)->ds_guid = + drc->drc_drrb->drr_toguid; + dsl_dataset_phys(origin_head->ds_prev)->ds_flags &= + ~DS_FLAG_INCONSISTENT; + + dmu_buf_will_dirty(origin_head->ds_dbuf, tx); + dsl_dataset_phys(origin_head)->ds_flags &= + ~DS_FLAG_INCONSISTENT; + + drc->drc_newsnapobj = + dsl_dataset_phys(origin_head)->ds_prev_snap_obj; + + dsl_dataset_rele(origin_head, FTAG); + dsl_destroy_head_sync_impl(drc->drc_ds, tx); + + if (drc->drc_owner != NULL) + VERIFY3P(origin_head->ds_owner, ==, drc->drc_owner); + } else { + dsl_dataset_t *ds = drc->drc_ds; + + dsl_dataset_snapshot_sync_impl(ds, drc->drc_tosnap, tx); + + /* set snapshot's creation time and guid */ + dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); + dsl_dataset_phys(ds->ds_prev)->ds_creation_time = + drc->drc_drrb->drr_creation_time; + dsl_dataset_phys(ds->ds_prev)->ds_guid = + drc->drc_drrb->drr_toguid; + dsl_dataset_phys(ds->ds_prev)->ds_flags &= + ~DS_FLAG_INCONSISTENT; + + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_flags &= ~DS_FLAG_INCONSISTENT; + if (dsl_dataset_has_resume_receive_state(ds)) { + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_FROMGUID, tx); + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_OBJECT, tx); + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_OFFSET, tx); + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_BYTES, tx); + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_TOGUID, tx); + (void) zap_remove(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_TONAME, tx); + } + drc->drc_newsnapobj = + dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj; + } + zvol_create_minors(dp->dp_spa, drc->drc_tofs, B_TRUE); + /* + * Release the hold from dmu_recv_begin. This must be done before + * we return to open context, so that when we free the dataset's dnode, + * we can evict its bonus buffer. + */ + dsl_dataset_disown(drc->drc_ds, dmu_recv_tag); + drc->drc_ds = NULL; +} + +static int +add_ds_to_guidmap(const char *name, avl_tree_t *guid_map, uint64_t snapobj) +{ + dsl_pool_t *dp; + dsl_dataset_t *snapds; + guid_map_entry_t *gmep; + int err; + + ASSERT(guid_map != NULL); + + err = dsl_pool_hold(name, FTAG, &dp); + if (err != 0) + return (err); + gmep = kmem_alloc(sizeof (*gmep), KM_SLEEP); + err = dsl_dataset_hold_obj(dp, snapobj, gmep, &snapds); + if (err == 0) { + gmep->guid = dsl_dataset_phys(snapds)->ds_guid; + gmep->gme_ds = snapds; + avl_add(guid_map, gmep); + dsl_dataset_long_hold(snapds, gmep); + } else { + kmem_free(gmep, sizeof (*gmep)); + } + + dsl_pool_rele(dp, FTAG); + return (err); +} + +static int dmu_recv_end_modified_blocks = 3; + +static int +dmu_recv_existing_end(dmu_recv_cookie_t *drc) +{ +#ifdef _KERNEL + /* + * We will be destroying the ds; make sure its origin is unmounted if + * necessary. + */ + char name[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_name(drc->drc_ds, name); + zfs_destroy_unmount_origin(name); +#endif + + return (dsl_sync_task(drc->drc_tofs, + dmu_recv_end_check, dmu_recv_end_sync, drc, + dmu_recv_end_modified_blocks, ZFS_SPACE_CHECK_NORMAL)); +} + +static int +dmu_recv_new_end(dmu_recv_cookie_t *drc) +{ + return (dsl_sync_task(drc->drc_tofs, + dmu_recv_end_check, dmu_recv_end_sync, drc, + dmu_recv_end_modified_blocks, ZFS_SPACE_CHECK_NORMAL)); +} + +int +dmu_recv_end(dmu_recv_cookie_t *drc, void *owner) +{ + int error; + + drc->drc_owner = owner; + + if (drc->drc_newfs) + error = dmu_recv_new_end(drc); + else + error = dmu_recv_existing_end(drc); + + if (error != 0) { + dmu_recv_cleanup_ds(drc); + } else if (drc->drc_guid_to_ds_map != NULL) { + (void) add_ds_to_guidmap(drc->drc_tofs, + drc->drc_guid_to_ds_map, + drc->drc_newsnapobj); + } + return (error); +} + +/* + * Return TRUE if this objset is currently being received into. + */ +boolean_t +dmu_objset_is_receiving(objset_t *os) +{ + return (os->os_dsl_dataset != NULL && + os->os_dsl_dataset->ds_owner == dmu_recv_tag); +} + +#if defined(_KERNEL) +module_param(zfs_send_corrupt_data, int, 0644); +MODULE_PARM_DESC(zfs_send_corrupt_data, "Allow sending corrupt data"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_traverse.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_traverse.c @@ -0,0 +1,740 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int32_t zfs_pd_bytes_max = 50 * 1024 * 1024; /* 50MB */ +int32_t send_holes_without_birth_time = 1; + +typedef struct prefetch_data { + kmutex_t pd_mtx; + kcondvar_t pd_cv; + int32_t pd_bytes_fetched; + int pd_flags; + boolean_t pd_cancel; + boolean_t pd_exited; + zbookmark_phys_t pd_resume; +} prefetch_data_t; + +typedef struct traverse_data { + spa_t *td_spa; + uint64_t td_objset; + blkptr_t *td_rootbp; + uint64_t td_min_txg; + zbookmark_phys_t *td_resume; + int td_flags; + prefetch_data_t *td_pfd; + boolean_t td_paused; + uint64_t td_hole_birth_enabled_txg; + blkptr_cb_t *td_func; + void *td_arg; + boolean_t td_realloc_possible; +} traverse_data_t; + +static int traverse_dnode(traverse_data_t *td, const dnode_phys_t *dnp, + uint64_t objset, uint64_t object); +static void prefetch_dnode_metadata(traverse_data_t *td, const dnode_phys_t *, + uint64_t objset, uint64_t object); + +static int +traverse_zil_block(zilog_t *zilog, blkptr_t *bp, void *arg, uint64_t claim_txg) +{ + traverse_data_t *td = arg; + zbookmark_phys_t zb; + + if (BP_IS_HOLE(bp)) + return (0); + + if (claim_txg == 0 && bp->blk_birth >= spa_first_txg(td->td_spa)) + return (0); + + SET_BOOKMARK(&zb, td->td_objset, ZB_ZIL_OBJECT, ZB_ZIL_LEVEL, + bp->blk_cksum.zc_word[ZIL_ZC_SEQ]); + + (void) td->td_func(td->td_spa, zilog, bp, &zb, NULL, td->td_arg); + + return (0); +} + +static int +traverse_zil_record(zilog_t *zilog, lr_t *lrc, void *arg, uint64_t claim_txg) +{ + traverse_data_t *td = arg; + + if (lrc->lrc_txtype == TX_WRITE) { + lr_write_t *lr = (lr_write_t *)lrc; + blkptr_t *bp = &lr->lr_blkptr; + zbookmark_phys_t zb; + + if (BP_IS_HOLE(bp)) + return (0); + + if (claim_txg == 0 || bp->blk_birth < claim_txg) + return (0); + + SET_BOOKMARK(&zb, td->td_objset, lr->lr_foid, + ZB_ZIL_LEVEL, lr->lr_offset / BP_GET_LSIZE(bp)); + + (void) td->td_func(td->td_spa, zilog, bp, &zb, NULL, + td->td_arg); + } + return (0); +} + +static void +traverse_zil(traverse_data_t *td, zil_header_t *zh) +{ + uint64_t claim_txg = zh->zh_claim_txg; + zilog_t *zilog; + + /* + * We only want to visit blocks that have been claimed but not yet + * replayed; plus, in read-only mode, blocks that are already stable. + */ + if (claim_txg == 0 && spa_writeable(td->td_spa)) + return; + + zilog = zil_alloc(spa_get_dsl(td->td_spa)->dp_meta_objset, zh); + + (void) zil_parse(zilog, traverse_zil_block, traverse_zil_record, td, + claim_txg); + + zil_free(zilog); +} + +typedef enum resume_skip { + RESUME_SKIP_ALL, + RESUME_SKIP_NONE, + RESUME_SKIP_CHILDREN +} resume_skip_t; + +/* + * Returns RESUME_SKIP_ALL if td indicates that we are resuming a traversal and + * the block indicated by zb does not need to be visited at all. Returns + * RESUME_SKIP_CHILDREN if we are resuming a post traversal and we reach the + * resume point. This indicates that this block should be visited but not its + * children (since they must have been visited in a previous traversal). + * Otherwise returns RESUME_SKIP_NONE. + */ +static resume_skip_t +resume_skip_check(traverse_data_t *td, const dnode_phys_t *dnp, + const zbookmark_phys_t *zb) +{ + if (td->td_resume != NULL && !ZB_IS_ZERO(td->td_resume)) { + /* + * If we already visited this bp & everything below, + * don't bother doing it again. + */ + if (zbookmark_subtree_completed(dnp, zb, td->td_resume)) + return (RESUME_SKIP_ALL); + + /* + * If we found the block we're trying to resume from, zero + * the bookmark out to indicate that we have resumed. + */ + if (bcmp(zb, td->td_resume, sizeof (*zb)) == 0) { + bzero(td->td_resume, sizeof (*zb)); + if (td->td_flags & TRAVERSE_POST) + return (RESUME_SKIP_CHILDREN); + } + } + return (RESUME_SKIP_NONE); +} + +static void +traverse_prefetch_metadata(traverse_data_t *td, + const blkptr_t *bp, const zbookmark_phys_t *zb) +{ + arc_flags_t flags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; + + if (!(td->td_flags & TRAVERSE_PREFETCH_METADATA)) + return; + /* + * If we are in the process of resuming, don't prefetch, because + * some children will not be needed (and in fact may have already + * been freed). + */ + if (td->td_resume != NULL && !ZB_IS_ZERO(td->td_resume)) + return; + if (BP_IS_HOLE(bp) || bp->blk_birth <= td->td_min_txg) + return; + if (BP_GET_LEVEL(bp) == 0 && BP_GET_TYPE(bp) != DMU_OT_DNODE) + return; + + (void) arc_read(NULL, td->td_spa, bp, NULL, NULL, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb); +} + +static boolean_t +prefetch_needed(prefetch_data_t *pfd, const blkptr_t *bp) +{ + ASSERT(pfd->pd_flags & TRAVERSE_PREFETCH_DATA); + if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp) || + BP_GET_TYPE(bp) == DMU_OT_INTENT_LOG) + return (B_FALSE); + return (B_TRUE); +} + +static int +traverse_visitbp(traverse_data_t *td, const dnode_phys_t *dnp, + const blkptr_t *bp, const zbookmark_phys_t *zb) +{ + int err = 0; + arc_buf_t *buf = NULL; + prefetch_data_t *pd = td->td_pfd; + + switch (resume_skip_check(td, dnp, zb)) { + case RESUME_SKIP_ALL: + return (0); + case RESUME_SKIP_CHILDREN: + goto post; + case RESUME_SKIP_NONE: + break; + default: + ASSERT(0); + } + + if (bp->blk_birth == 0) { + /* + * Since this block has a birth time of 0 it must be one of + * two things: a hole created before the + * SPA_FEATURE_HOLE_BIRTH feature was enabled, or a hole + * which has always been a hole in an object. + * + * If a file is written sparsely, then the unwritten parts of + * the file were "always holes" -- that is, they have been + * holes since this object was allocated. However, we (and + * our callers) can not necessarily tell when an object was + * allocated. Therefore, if it's possible that this object + * was freed and then its object number reused, we need to + * visit all the holes with birth==0. + * + * If it isn't possible that the object number was reused, + * then if SPA_FEATURE_HOLE_BIRTH was enabled before we wrote + * all the blocks we will visit as part of this traversal, + * then this hole must have always existed, so we can skip + * it. We visit blocks born after (exclusive) td_min_txg. + * + * Note that the meta-dnode cannot be reallocated. + */ + if (!send_holes_without_birth_time && + (!td->td_realloc_possible || + zb->zb_object == DMU_META_DNODE_OBJECT) && + td->td_hole_birth_enabled_txg <= td->td_min_txg) + return (0); + } else if (bp->blk_birth <= td->td_min_txg) { + return (0); + } + + if (pd != NULL && !pd->pd_exited && prefetch_needed(pd, bp)) { + uint64_t size = BP_GET_LSIZE(bp); + mutex_enter(&pd->pd_mtx); + ASSERT(pd->pd_bytes_fetched >= 0); + while (pd->pd_bytes_fetched < size && !pd->pd_exited) + cv_wait_sig(&pd->pd_cv, &pd->pd_mtx); + pd->pd_bytes_fetched -= size; + cv_broadcast(&pd->pd_cv); + mutex_exit(&pd->pd_mtx); + } + + if (BP_IS_HOLE(bp)) { + err = td->td_func(td->td_spa, NULL, bp, zb, dnp, td->td_arg); + if (err != 0) + goto post; + return (0); + } + + if (td->td_flags & TRAVERSE_PRE) { + err = td->td_func(td->td_spa, NULL, bp, zb, dnp, + td->td_arg); + if (err == TRAVERSE_VISIT_NO_CHILDREN) + return (0); + if (err != 0) + goto post; + } + + if (BP_GET_LEVEL(bp) > 0) { + uint32_t flags = ARC_FLAG_WAIT; + int32_t i; + int32_t epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT; + zbookmark_phys_t *czb; + + err = arc_read(NULL, td->td_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb); + if (err != 0) + goto post; + + czb = kmem_alloc(sizeof (zbookmark_phys_t), KM_SLEEP); + + for (i = 0; i < epb; i++) { + SET_BOOKMARK(czb, zb->zb_objset, zb->zb_object, + zb->zb_level - 1, + zb->zb_blkid * epb + i); + traverse_prefetch_metadata(td, + &((blkptr_t *)buf->b_data)[i], czb); + } + + /* recursively visitbp() blocks below this */ + for (i = 0; i < epb; i++) { + SET_BOOKMARK(czb, zb->zb_objset, zb->zb_object, + zb->zb_level - 1, + zb->zb_blkid * epb + i); + err = traverse_visitbp(td, dnp, + &((blkptr_t *)buf->b_data)[i], czb); + if (err != 0) + break; + } + + kmem_free(czb, sizeof (zbookmark_phys_t)); + + } else if (BP_GET_TYPE(bp) == DMU_OT_DNODE) { + uint32_t flags = ARC_FLAG_WAIT; + int32_t i; + int32_t epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT; + dnode_phys_t *child_dnp; + + err = arc_read(NULL, td->td_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb); + if (err != 0) + goto post; + child_dnp = buf->b_data; + + for (i = 0; i < epb; i += child_dnp[i].dn_extra_slots + 1) { + prefetch_dnode_metadata(td, &child_dnp[i], + zb->zb_objset, zb->zb_blkid * epb + i); + } + + /* recursively visitbp() blocks below this */ + for (i = 0; i < epb; i += child_dnp[i].dn_extra_slots + 1) { + err = traverse_dnode(td, &child_dnp[i], + zb->zb_objset, zb->zb_blkid * epb + i); + if (err != 0) + break; + } + } else if (BP_GET_TYPE(bp) == DMU_OT_OBJSET) { + arc_flags_t flags = ARC_FLAG_WAIT; + objset_phys_t *osp; + + err = arc_read(NULL, td->td_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, zb); + if (err != 0) + goto post; + + osp = buf->b_data; + prefetch_dnode_metadata(td, &osp->os_meta_dnode, zb->zb_objset, + DMU_META_DNODE_OBJECT); + /* + * See the block comment above for the goal of this variable. + * If the maxblkid of the meta-dnode is 0, then we know that + * we've never had more than DNODES_PER_BLOCK objects in the + * dataset, which means we can't have reused any object ids. + */ + if (osp->os_meta_dnode.dn_maxblkid == 0) + td->td_realloc_possible = B_FALSE; + + if (arc_buf_size(buf) >= sizeof (objset_phys_t)) { + prefetch_dnode_metadata(td, &osp->os_groupused_dnode, + zb->zb_objset, DMU_GROUPUSED_OBJECT); + prefetch_dnode_metadata(td, &osp->os_userused_dnode, + zb->zb_objset, DMU_USERUSED_OBJECT); + } + + err = traverse_dnode(td, &osp->os_meta_dnode, zb->zb_objset, + DMU_META_DNODE_OBJECT); + if (err == 0 && arc_buf_size(buf) >= sizeof (objset_phys_t)) { + err = traverse_dnode(td, &osp->os_groupused_dnode, + zb->zb_objset, DMU_GROUPUSED_OBJECT); + } + if (err == 0 && arc_buf_size(buf) >= sizeof (objset_phys_t)) { + err = traverse_dnode(td, &osp->os_userused_dnode, + zb->zb_objset, DMU_USERUSED_OBJECT); + } + } + + if (buf) + arc_buf_destroy(buf, &buf); + +post: + if (err == 0 && (td->td_flags & TRAVERSE_POST)) + err = td->td_func(td->td_spa, NULL, bp, zb, dnp, td->td_arg); + + if ((td->td_flags & TRAVERSE_HARD) && (err == EIO || err == ECKSUM)) { + /* + * Ignore this disk error as requested by the HARD flag, + * and continue traversal. + */ + err = 0; + } + + /* + * If we are stopping here, set td_resume. + */ + if (td->td_resume != NULL && err != 0 && !td->td_paused) { + td->td_resume->zb_objset = zb->zb_objset; + td->td_resume->zb_object = zb->zb_object; + td->td_resume->zb_level = 0; + /* + * If we have stopped on an indirect block (e.g. due to + * i/o error), we have not visited anything below it. + * Set the bookmark to the first level-0 block that we need + * to visit. This way, the resuming code does not need to + * deal with resuming from indirect blocks. + * + * Note, if zb_level <= 0, dnp may be NULL, so we don't want + * to dereference it. + */ + td->td_resume->zb_blkid = zb->zb_blkid; + if (zb->zb_level > 0) { + td->td_resume->zb_blkid <<= zb->zb_level * + (dnp->dn_indblkshift - SPA_BLKPTRSHIFT); + } + td->td_paused = B_TRUE; + } + + return (err); +} + +static void +prefetch_dnode_metadata(traverse_data_t *td, const dnode_phys_t *dnp, + uint64_t objset, uint64_t object) +{ + int j; + zbookmark_phys_t czb; + + for (j = 0; j < dnp->dn_nblkptr; j++) { + SET_BOOKMARK(&czb, objset, object, dnp->dn_nlevels - 1, j); + traverse_prefetch_metadata(td, &dnp->dn_blkptr[j], &czb); + } + + if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) { + SET_BOOKMARK(&czb, objset, object, 0, DMU_SPILL_BLKID); + traverse_prefetch_metadata(td, DN_SPILL_BLKPTR(dnp), &czb); + } +} + +static int +traverse_dnode(traverse_data_t *td, const dnode_phys_t *dnp, + uint64_t objset, uint64_t object) +{ + int j, err = 0; + zbookmark_phys_t czb; + + if (object != DMU_META_DNODE_OBJECT && td->td_resume != NULL && + object < td->td_resume->zb_object) + return (0); + + if (td->td_flags & TRAVERSE_PRE) { + SET_BOOKMARK(&czb, objset, object, ZB_DNODE_LEVEL, + ZB_DNODE_BLKID); + err = td->td_func(td->td_spa, NULL, NULL, &czb, dnp, + td->td_arg); + if (err == TRAVERSE_VISIT_NO_CHILDREN) + return (0); + if (err != 0) + return (err); + } + + for (j = 0; j < dnp->dn_nblkptr; j++) { + SET_BOOKMARK(&czb, objset, object, dnp->dn_nlevels - 1, j); + err = traverse_visitbp(td, dnp, &dnp->dn_blkptr[j], &czb); + if (err != 0) + break; + } + + if (err == 0 && (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR)) { + SET_BOOKMARK(&czb, objset, object, 0, DMU_SPILL_BLKID); + err = traverse_visitbp(td, dnp, DN_SPILL_BLKPTR(dnp), &czb); + } + + if (err == 0 && (td->td_flags & TRAVERSE_POST)) { + SET_BOOKMARK(&czb, objset, object, ZB_DNODE_LEVEL, + ZB_DNODE_BLKID); + err = td->td_func(td->td_spa, NULL, NULL, &czb, dnp, + td->td_arg); + if (err == TRAVERSE_VISIT_NO_CHILDREN) + return (0); + if (err != 0) + return (err); + } + return (err); +} + +/* ARGSUSED */ +static int +traverse_prefetcher(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + prefetch_data_t *pfd = arg; + arc_flags_t aflags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; + + ASSERT(pfd->pd_bytes_fetched >= 0); + if (bp == NULL) + return (0); + if (pfd->pd_cancel) + return (SET_ERROR(EINTR)); + + if (!prefetch_needed(pfd, bp)) + return (0); + + mutex_enter(&pfd->pd_mtx); + while (!pfd->pd_cancel && pfd->pd_bytes_fetched >= zfs_pd_bytes_max) + cv_wait_sig(&pfd->pd_cv, &pfd->pd_mtx); + pfd->pd_bytes_fetched += BP_GET_LSIZE(bp); + cv_broadcast(&pfd->pd_cv); + mutex_exit(&pfd->pd_mtx); + + (void) arc_read(NULL, spa, bp, NULL, NULL, ZIO_PRIORITY_ASYNC_READ, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, &aflags, zb); + + return (0); +} + +static void +traverse_prefetch_thread(void *arg) +{ + traverse_data_t *td_main = arg; + traverse_data_t td = *td_main; + zbookmark_phys_t czb; + fstrans_cookie_t cookie = spl_fstrans_mark(); + + td.td_func = traverse_prefetcher; + td.td_arg = td_main->td_pfd; + td.td_pfd = NULL; + td.td_resume = &td_main->td_pfd->pd_resume; + + SET_BOOKMARK(&czb, td.td_objset, + ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); + (void) traverse_visitbp(&td, NULL, td.td_rootbp, &czb); + + mutex_enter(&td_main->td_pfd->pd_mtx); + td_main->td_pfd->pd_exited = B_TRUE; + cv_broadcast(&td_main->td_pfd->pd_cv); + mutex_exit(&td_main->td_pfd->pd_mtx); + spl_fstrans_unmark(cookie); +} + +/* + * NB: dataset must not be changing on-disk (eg, is a snapshot or we are + * in syncing context). + */ +static int +traverse_impl(spa_t *spa, dsl_dataset_t *ds, uint64_t objset, blkptr_t *rootbp, + uint64_t txg_start, zbookmark_phys_t *resume, int flags, + blkptr_cb_t func, void *arg) +{ + traverse_data_t *td; + prefetch_data_t *pd; + zbookmark_phys_t *czb; + int err; + + ASSERT(ds == NULL || objset == ds->ds_object); + ASSERT(!(flags & TRAVERSE_PRE) || !(flags & TRAVERSE_POST)); + + td = kmem_alloc(sizeof (traverse_data_t), KM_SLEEP); + pd = kmem_zalloc(sizeof (prefetch_data_t), KM_SLEEP); + czb = kmem_alloc(sizeof (zbookmark_phys_t), KM_SLEEP); + + td->td_spa = spa; + td->td_objset = objset; + td->td_rootbp = rootbp; + td->td_min_txg = txg_start; + td->td_resume = resume; + td->td_func = func; + td->td_arg = arg; + td->td_pfd = pd; + td->td_flags = flags; + td->td_paused = B_FALSE; + td->td_realloc_possible = (txg_start == 0 ? B_FALSE : B_TRUE); + + if (spa_feature_is_active(spa, SPA_FEATURE_HOLE_BIRTH)) { + VERIFY(spa_feature_enabled_txg(spa, + SPA_FEATURE_HOLE_BIRTH, &td->td_hole_birth_enabled_txg)); + } else { + td->td_hole_birth_enabled_txg = UINT64_MAX; + } + + pd->pd_flags = flags; + if (resume != NULL) + pd->pd_resume = *resume; + mutex_init(&pd->pd_mtx, NULL, MUTEX_DEFAULT, NULL); + cv_init(&pd->pd_cv, NULL, CV_DEFAULT, NULL); + + SET_BOOKMARK(czb, td->td_objset, + ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); + + /* See comment on ZIL traversal in dsl_scan_visitds. */ + if (ds != NULL && !ds->ds_is_snapshot && !BP_IS_HOLE(rootbp)) { + uint32_t flags = ARC_FLAG_WAIT; + objset_phys_t *osp; + arc_buf_t *buf; + + err = arc_read(NULL, td->td_spa, rootbp, + arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, ZIO_FLAG_CANFAIL, &flags, czb); + if (err != 0) + return (err); + + osp = buf->b_data; + traverse_zil(td, &osp->os_zil_header); + arc_buf_destroy(buf, &buf); + } + + if (!(flags & TRAVERSE_PREFETCH_DATA) || + taskq_dispatch(system_taskq, traverse_prefetch_thread, + td, TQ_NOQUEUE) == TASKQID_INVALID) + pd->pd_exited = B_TRUE; + + err = traverse_visitbp(td, NULL, rootbp, czb); + + mutex_enter(&pd->pd_mtx); + pd->pd_cancel = B_TRUE; + cv_broadcast(&pd->pd_cv); + while (!pd->pd_exited) + cv_wait_sig(&pd->pd_cv, &pd->pd_mtx); + mutex_exit(&pd->pd_mtx); + + mutex_destroy(&pd->pd_mtx); + cv_destroy(&pd->pd_cv); + + kmem_free(czb, sizeof (zbookmark_phys_t)); + kmem_free(pd, sizeof (struct prefetch_data)); + kmem_free(td, sizeof (struct traverse_data)); + + return (err); +} + +/* + * NB: dataset must not be changing on-disk (eg, is a snapshot or we are + * in syncing context). + */ +int +traverse_dataset_resume(dsl_dataset_t *ds, uint64_t txg_start, + zbookmark_phys_t *resume, + int flags, blkptr_cb_t func, void *arg) +{ + return (traverse_impl(ds->ds_dir->dd_pool->dp_spa, ds, ds->ds_object, + &dsl_dataset_phys(ds)->ds_bp, txg_start, resume, flags, func, arg)); +} + +int +traverse_dataset(dsl_dataset_t *ds, uint64_t txg_start, + int flags, blkptr_cb_t func, void *arg) +{ + return (traverse_dataset_resume(ds, txg_start, NULL, flags, func, arg)); +} + +int +traverse_dataset_destroyed(spa_t *spa, blkptr_t *blkptr, + uint64_t txg_start, zbookmark_phys_t *resume, int flags, + blkptr_cb_t func, void *arg) +{ + return (traverse_impl(spa, NULL, ZB_DESTROYED_OBJSET, + blkptr, txg_start, resume, flags, func, arg)); +} + +/* + * NB: pool must not be changing on-disk (eg, from zdb or sync context). + */ +int +traverse_pool(spa_t *spa, uint64_t txg_start, int flags, + blkptr_cb_t func, void *arg) +{ + int err; + uint64_t obj; + dsl_pool_t *dp = spa_get_dsl(spa); + objset_t *mos = dp->dp_meta_objset; + boolean_t hard = (flags & TRAVERSE_HARD); + + /* visit the MOS */ + err = traverse_impl(spa, NULL, 0, spa_get_rootblkptr(spa), + txg_start, NULL, flags, func, arg); + if (err != 0) + return (err); + + /* visit each dataset */ + for (obj = 1; err == 0; + err = dmu_object_next(mos, &obj, B_FALSE, txg_start)) { + dmu_object_info_t doi; + + err = dmu_object_info(mos, obj, &doi); + if (err != 0) { + if (hard) + continue; + break; + } + + if (doi.doi_bonus_type == DMU_OT_DSL_DATASET) { + dsl_dataset_t *ds; + uint64_t txg = txg_start; + + dsl_pool_config_enter(dp, FTAG); + err = dsl_dataset_hold_obj(dp, obj, FTAG, &ds); + dsl_pool_config_exit(dp, FTAG); + if (err != 0) { + if (hard) + continue; + break; + } + if (dsl_dataset_phys(ds)->ds_prev_snap_txg > txg) + txg = dsl_dataset_phys(ds)->ds_prev_snap_txg; + err = traverse_dataset(ds, txg, flags, func, arg); + dsl_dataset_rele(ds, FTAG); + if (err != 0) + break; + } + } + if (err == ESRCH) + err = 0; + return (err); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(traverse_dataset); +EXPORT_SYMBOL(traverse_pool); + +module_param(zfs_pd_bytes_max, int, 0644); +MODULE_PARM_DESC(zfs_pd_bytes_max, "Max number of bytes to prefetch"); + +module_param_named(ignore_hole_birth, send_holes_without_birth_time, int, 0644); +MODULE_PARM_DESC(ignore_hole_birth, "Alias for send_holes_without_birth_time"); + +module_param_named(send_holes_without_birth_time, + send_holes_without_birth_time, int, 0644); +MODULE_PARM_DESC(send_holes_without_birth_time, + "Ignore hole_birth txg for zfs send"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_tx.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_tx.c @@ -0,0 +1,1379 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn, + uint64_t arg1, uint64_t arg2); + +dmu_tx_stats_t dmu_tx_stats = { + { "dmu_tx_assigned", KSTAT_DATA_UINT64 }, + { "dmu_tx_delay", KSTAT_DATA_UINT64 }, + { "dmu_tx_error", KSTAT_DATA_UINT64 }, + { "dmu_tx_suspended", KSTAT_DATA_UINT64 }, + { "dmu_tx_group", KSTAT_DATA_UINT64 }, + { "dmu_tx_memory_reserve", KSTAT_DATA_UINT64 }, + { "dmu_tx_memory_reclaim", KSTAT_DATA_UINT64 }, + { "dmu_tx_dirty_throttle", KSTAT_DATA_UINT64 }, + { "dmu_tx_dirty_delay", KSTAT_DATA_UINT64 }, + { "dmu_tx_dirty_over_max", KSTAT_DATA_UINT64 }, + { "dmu_tx_quota", KSTAT_DATA_UINT64 }, +}; + +static kstat_t *dmu_tx_ksp; + +dmu_tx_t * +dmu_tx_create_dd(dsl_dir_t *dd) +{ + dmu_tx_t *tx = kmem_zalloc(sizeof (dmu_tx_t), KM_SLEEP); + tx->tx_dir = dd; + if (dd != NULL) + tx->tx_pool = dd->dd_pool; + list_create(&tx->tx_holds, sizeof (dmu_tx_hold_t), + offsetof(dmu_tx_hold_t, txh_node)); + list_create(&tx->tx_callbacks, sizeof (dmu_tx_callback_t), + offsetof(dmu_tx_callback_t, dcb_node)); + tx->tx_start = gethrtime(); + return (tx); +} + +dmu_tx_t * +dmu_tx_create(objset_t *os) +{ + dmu_tx_t *tx = dmu_tx_create_dd(os->os_dsl_dataset->ds_dir); + tx->tx_objset = os; + return (tx); +} + +dmu_tx_t * +dmu_tx_create_assigned(struct dsl_pool *dp, uint64_t txg) +{ + dmu_tx_t *tx = dmu_tx_create_dd(NULL); + + txg_verify(dp->dp_spa, txg); + tx->tx_pool = dp; + tx->tx_txg = txg; + tx->tx_anyobj = TRUE; + + return (tx); +} + +int +dmu_tx_is_syncing(dmu_tx_t *tx) +{ + return (tx->tx_anyobj); +} + +int +dmu_tx_private_ok(dmu_tx_t *tx) +{ + return (tx->tx_anyobj); +} + +static dmu_tx_hold_t * +dmu_tx_hold_dnode_impl(dmu_tx_t *tx, dnode_t *dn, enum dmu_tx_hold_type type, + uint64_t arg1, uint64_t arg2) +{ + dmu_tx_hold_t *txh; + + if (dn != NULL) { + (void) refcount_add(&dn->dn_holds, tx); + if (tx->tx_txg != 0) { + mutex_enter(&dn->dn_mtx); + /* + * dn->dn_assigned_txg == tx->tx_txg doesn't pose a + * problem, but there's no way for it to happen (for + * now, at least). + */ + ASSERT(dn->dn_assigned_txg == 0); + dn->dn_assigned_txg = tx->tx_txg; + (void) refcount_add(&dn->dn_tx_holds, tx); + mutex_exit(&dn->dn_mtx); + } + } + + txh = kmem_zalloc(sizeof (dmu_tx_hold_t), KM_SLEEP); + txh->txh_tx = tx; + txh->txh_dnode = dn; + refcount_create(&txh->txh_space_towrite); + refcount_create(&txh->txh_memory_tohold); + txh->txh_type = type; + txh->txh_arg1 = arg1; + txh->txh_arg2 = arg2; + list_insert_tail(&tx->tx_holds, txh); + + return (txh); +} + +static dmu_tx_hold_t * +dmu_tx_hold_object_impl(dmu_tx_t *tx, objset_t *os, uint64_t object, + enum dmu_tx_hold_type type, uint64_t arg1, uint64_t arg2) +{ + dnode_t *dn = NULL; + dmu_tx_hold_t *txh; + int err; + + if (object != DMU_NEW_OBJECT) { + err = dnode_hold(os, object, FTAG, &dn); + if (err != 0) { + tx->tx_err = err; + return (NULL); + } + } + txh = dmu_tx_hold_dnode_impl(tx, dn, type, arg1, arg2); + if (dn != NULL) + dnode_rele(dn, FTAG); + return (txh); +} + +void +dmu_tx_add_new_object(dmu_tx_t *tx, dnode_t *dn) +{ + /* + * If we're syncing, they can manipulate any object anyhow, and + * the hold on the dnode_t can cause problems. + */ + if (!dmu_tx_is_syncing(tx)) + (void) dmu_tx_hold_dnode_impl(tx, dn, THT_NEWOBJECT, 0, 0); +} + +/* + * This function reads specified data from disk. The specified data will + * be needed to perform the transaction -- i.e, it will be read after + * we do dmu_tx_assign(). There are two reasons that we read the data now + * (before dmu_tx_assign()): + * + * 1. Reading it now has potentially better performance. The transaction + * has not yet been assigned, so the TXG is not held open, and also the + * caller typically has less locks held when calling dmu_tx_hold_*() than + * after the transaction has been assigned. This reduces the lock (and txg) + * hold times, thus reducing lock contention. + * + * 2. It is easier for callers (primarily the ZPL) to handle i/o errors + * that are detected before they start making changes to the DMU state + * (i.e. now). Once the transaction has been assigned, and some DMU + * state has been changed, it can be difficult to recover from an i/o + * error (e.g. to undo the changes already made in memory at the DMU + * layer). Typically code to do so does not exist in the caller -- it + * assumes that the data has already been cached and thus i/o errors are + * not possible. + * + * It has been observed that the i/o initiated here can be a performance + * problem, and it appears to be optional, because we don't look at the + * data which is read. However, removing this read would only serve to + * move the work elsewhere (after the dmu_tx_assign()), where it may + * have a greater impact on performance (in addition to the impact on + * fault tolerance noted above). + */ +static int +dmu_tx_check_ioerr(zio_t *zio, dnode_t *dn, int level, uint64_t blkid) +{ + int err; + dmu_buf_impl_t *db; + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + db = dbuf_hold_level(dn, level, blkid, FTAG); + rw_exit(&dn->dn_struct_rwlock); + if (db == NULL) + return (SET_ERROR(EIO)); + err = dbuf_read(db, zio, DB_RF_CANFAIL | DB_RF_NOPREFETCH); + dbuf_rele(db, FTAG); + return (err); +} + +/* ARGSUSED */ +static void +dmu_tx_count_write(dmu_tx_hold_t *txh, uint64_t off, uint64_t len) +{ + dnode_t *dn = txh->txh_dnode; + int err = 0; + + if (len == 0) + return; + + (void) refcount_add_many(&txh->txh_space_towrite, len, FTAG); + + if (refcount_count(&txh->txh_space_towrite) > 2 * DMU_MAX_ACCESS) + err = SET_ERROR(EFBIG); + + if (dn == NULL) + return; + + /* + * For i/o error checking, read the blocks that will be needed + * to perform the write: the first and last level-0 blocks (if + * they are not aligned, i.e. if they are partial-block writes), + * and all the level-1 blocks. + */ + if (dn->dn_maxblkid == 0) { + if (off < dn->dn_datablksz && + (off > 0 || len < dn->dn_datablksz)) { + err = dmu_tx_check_ioerr(NULL, dn, 0, 0); + if (err != 0) { + txh->txh_tx->tx_err = err; + } + } + } else { + zio_t *zio = zio_root(dn->dn_objset->os_spa, + NULL, NULL, ZIO_FLAG_CANFAIL); + + /* first level-0 block */ + uint64_t start = off >> dn->dn_datablkshift; + if (P2PHASE(off, dn->dn_datablksz) || len < dn->dn_datablksz) { + err = dmu_tx_check_ioerr(zio, dn, 0, start); + if (err != 0) { + txh->txh_tx->tx_err = err; + } + } + + /* last level-0 block */ + uint64_t end = (off + len - 1) >> dn->dn_datablkshift; + if (end != start && end <= dn->dn_maxblkid && + P2PHASE(off + len, dn->dn_datablksz)) { + err = dmu_tx_check_ioerr(zio, dn, 0, end); + if (err != 0) { + txh->txh_tx->tx_err = err; + } + } + + /* level-1 blocks */ + if (dn->dn_nlevels > 1) { + int shft = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + for (uint64_t i = (start >> shft) + 1; + i < end >> shft; i++) { + err = dmu_tx_check_ioerr(zio, dn, 1, i); + if (err != 0) { + txh->txh_tx->tx_err = err; + } + } + } + + err = zio_wait(zio); + if (err != 0) { + txh->txh_tx->tx_err = err; + } + } +} + +static void +dmu_tx_count_dnode(dmu_tx_hold_t *txh) +{ + (void) refcount_add_many(&txh->txh_space_towrite, DNODE_MIN_SIZE, FTAG); +} + +void +dmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len) +{ + dmu_tx_hold_t *txh; + + ASSERT0(tx->tx_txg); + ASSERT3U(len, <=, DMU_MAX_ACCESS); + ASSERT(len == 0 || UINT64_MAX - off >= len - 1); + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, + object, THT_WRITE, off, len); + if (txh != NULL) { + dmu_tx_count_write(txh, off, len); + dmu_tx_count_dnode(txh); + } +} + +void +dmu_tx_hold_write_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, int len) +{ + dmu_tx_hold_t *txh; + + ASSERT0(tx->tx_txg); + ASSERT3U(len, <=, DMU_MAX_ACCESS); + ASSERT(len == 0 || UINT64_MAX - off >= len - 1); + + txh = dmu_tx_hold_dnode_impl(tx, dn, THT_WRITE, off, len); + if (txh != NULL) { + dmu_tx_count_write(txh, off, len); + dmu_tx_count_dnode(txh); + } +} + +/* + * This function marks the transaction as being a "net free". The end + * result is that refquotas will be disabled for this transaction, and + * this transaction will be able to use half of the pool space overhead + * (see dsl_pool_adjustedsize()). Therefore this function should only + * be called for transactions that we expect will not cause a net increase + * in the amount of space used (but it's OK if that is occasionally not true). + */ +void +dmu_tx_mark_netfree(dmu_tx_t *tx) +{ + tx->tx_netfree = B_TRUE; +} + +static void +dmu_tx_hold_free_impl(dmu_tx_hold_t *txh, uint64_t off, uint64_t len) +{ + dmu_tx_t *tx = txh->txh_tx; + dnode_t *dn = txh->txh_dnode; + int err; + + ASSERT(tx->tx_txg == 0); + + dmu_tx_count_dnode(txh); + + if (off >= (dn->dn_maxblkid + 1) * dn->dn_datablksz) + return; + if (len == DMU_OBJECT_END) + len = (dn->dn_maxblkid + 1) * dn->dn_datablksz - off; + + dmu_tx_count_dnode(txh); + + /* + * For i/o error checking, we read the first and last level-0 + * blocks if they are not aligned, and all the level-1 blocks. + * + * Note: dbuf_free_range() assumes that we have not instantiated + * any level-0 dbufs that will be completely freed. Therefore we must + * exercise care to not read or count the first and last blocks + * if they are blocksize-aligned. + */ + if (dn->dn_datablkshift == 0) { + if (off != 0 || len < dn->dn_datablksz) + dmu_tx_count_write(txh, 0, dn->dn_datablksz); + } else { + /* first block will be modified if it is not aligned */ + if (!IS_P2ALIGNED(off, 1 << dn->dn_datablkshift)) + dmu_tx_count_write(txh, off, 1); + /* last block will be modified if it is not aligned */ + if (!IS_P2ALIGNED(off + len, 1 << dn->dn_datablkshift)) + dmu_tx_count_write(txh, off + len, 1); + } + + /* + * Check level-1 blocks. + */ + if (dn->dn_nlevels > 1) { + int shift = dn->dn_datablkshift + dn->dn_indblkshift - + SPA_BLKPTRSHIFT; + uint64_t start = off >> shift; + uint64_t end = (off + len) >> shift; + uint64_t i; + + ASSERT(dn->dn_indblkshift != 0); + + /* + * dnode_reallocate() can result in an object with indirect + * blocks having an odd data block size. In this case, + * just check the single block. + */ + if (dn->dn_datablkshift == 0) + start = end = 0; + + zio_t *zio = zio_root(tx->tx_pool->dp_spa, + NULL, NULL, ZIO_FLAG_CANFAIL); + for (i = start; i <= end; i++) { + uint64_t ibyte = i << shift; + err = dnode_next_offset(dn, 0, &ibyte, 2, 1, 0); + i = ibyte >> shift; + if (err == ESRCH || i > end) + break; + if (err != 0) { + tx->tx_err = err; + (void) zio_wait(zio); + return; + } + + (void) refcount_add_many(&txh->txh_memory_tohold, + 1 << dn->dn_indblkshift, FTAG); + + err = dmu_tx_check_ioerr(zio, dn, 1, i); + if (err != 0) { + tx->tx_err = err; + (void) zio_wait(zio); + return; + } + } + err = zio_wait(zio); + if (err != 0) { + tx->tx_err = err; + return; + } + } +} + +void +dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off, uint64_t len) +{ + dmu_tx_hold_t *txh; + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, + object, THT_FREE, off, len); + if (txh != NULL) + (void) dmu_tx_hold_free_impl(txh, off, len); +} + +void +dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, uint64_t len) +{ + dmu_tx_hold_t *txh; + + txh = dmu_tx_hold_dnode_impl(tx, dn, THT_FREE, off, len); + if (txh != NULL) + (void) dmu_tx_hold_free_impl(txh, off, len); +} + +static void +dmu_tx_hold_zap_impl(dmu_tx_hold_t *txh, const char *name) +{ + dmu_tx_t *tx = txh->txh_tx; + dnode_t *dn = txh->txh_dnode; + int err; + + ASSERT(tx->tx_txg == 0); + + dmu_tx_count_dnode(txh); + + /* + * Modifying a almost-full microzap is around the worst case (128KB) + * + * If it is a fat zap, the worst case would be 7*16KB=112KB: + * - 3 blocks overwritten: target leaf, ptrtbl block, header block + * - 4 new blocks written if adding: + * - 2 blocks for possibly split leaves, + * - 2 grown ptrtbl blocks + */ + (void) refcount_add_many(&txh->txh_space_towrite, + MZAP_MAX_BLKSZ, FTAG); + + if (dn == NULL) + return; + + ASSERT3U(DMU_OT_BYTESWAP(dn->dn_type), ==, DMU_BSWAP_ZAP); + + if (dn->dn_maxblkid == 0 || name == NULL) { + /* + * This is a microzap (only one block), or we don't know + * the name. Check the first block for i/o errors. + */ + err = dmu_tx_check_ioerr(NULL, dn, 0, 0); + if (err != 0) { + tx->tx_err = err; + } + } else { + /* + * Access the name so that we'll check for i/o errors to + * the leaf blocks, etc. We ignore ENOENT, as this name + * may not yet exist. + */ + err = zap_lookup_by_dnode(dn, name, 8, 0, NULL); + if (err == EIO || err == ECKSUM || err == ENXIO) { + tx->tx_err = err; + } + } +} + +void +dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t object, int add, const char *name) +{ + dmu_tx_hold_t *txh; + + ASSERT0(tx->tx_txg); + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, + object, THT_ZAP, add, (uintptr_t)name); + if (txh != NULL) + dmu_tx_hold_zap_impl(txh, name); +} + +void +dmu_tx_hold_zap_by_dnode(dmu_tx_t *tx, dnode_t *dn, int add, const char *name) +{ + dmu_tx_hold_t *txh; + + ASSERT0(tx->tx_txg); + ASSERT(dn != NULL); + + txh = dmu_tx_hold_dnode_impl(tx, dn, THT_ZAP, add, (uintptr_t)name); + if (txh != NULL) + dmu_tx_hold_zap_impl(txh, name); +} + +void +dmu_tx_hold_bonus(dmu_tx_t *tx, uint64_t object) +{ + dmu_tx_hold_t *txh; + + ASSERT(tx->tx_txg == 0); + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, + object, THT_BONUS, 0, 0); + if (txh) + dmu_tx_count_dnode(txh); +} + +void +dmu_tx_hold_bonus_by_dnode(dmu_tx_t *tx, dnode_t *dn) +{ + dmu_tx_hold_t *txh; + + ASSERT0(tx->tx_txg); + + txh = dmu_tx_hold_dnode_impl(tx, dn, THT_BONUS, 0, 0); + if (txh) + dmu_tx_count_dnode(txh); +} + +void +dmu_tx_hold_space(dmu_tx_t *tx, uint64_t space) +{ + dmu_tx_hold_t *txh; + + ASSERT(tx->tx_txg == 0); + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, + DMU_NEW_OBJECT, THT_SPACE, space, 0); + if (txh) + (void) refcount_add_many(&txh->txh_space_towrite, space, FTAG); +} + +#ifdef ZFS_DEBUG +void +dmu_tx_dirty_buf(dmu_tx_t *tx, dmu_buf_impl_t *db) +{ + boolean_t match_object = B_FALSE; + boolean_t match_offset = B_FALSE; + + DB_DNODE_ENTER(db); + dnode_t *dn = DB_DNODE(db); + ASSERT(tx->tx_txg != 0); + ASSERT(tx->tx_objset == NULL || dn->dn_objset == tx->tx_objset); + ASSERT3U(dn->dn_object, ==, db->db.db_object); + + if (tx->tx_anyobj) { + DB_DNODE_EXIT(db); + return; + } + + /* XXX No checking on the meta dnode for now */ + if (db->db.db_object == DMU_META_DNODE_OBJECT) { + DB_DNODE_EXIT(db); + return; + } + + for (dmu_tx_hold_t *txh = list_head(&tx->tx_holds); txh != NULL; + txh = list_next(&tx->tx_holds, txh)) { + ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg); + if (txh->txh_dnode == dn && txh->txh_type != THT_NEWOBJECT) + match_object = TRUE; + if (txh->txh_dnode == NULL || txh->txh_dnode == dn) { + int datablkshift = dn->dn_datablkshift ? + dn->dn_datablkshift : SPA_MAXBLOCKSHIFT; + int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + int shift = datablkshift + epbs * db->db_level; + uint64_t beginblk = shift >= 64 ? 0 : + (txh->txh_arg1 >> shift); + uint64_t endblk = shift >= 64 ? 0 : + ((txh->txh_arg1 + txh->txh_arg2 - 1) >> shift); + uint64_t blkid = db->db_blkid; + + /* XXX txh_arg2 better not be zero... */ + + dprintf("found txh type %x beginblk=%llx endblk=%llx\n", + txh->txh_type, beginblk, endblk); + + switch (txh->txh_type) { + case THT_WRITE: + if (blkid >= beginblk && blkid <= endblk) + match_offset = TRUE; + /* + * We will let this hold work for the bonus + * or spill buffer so that we don't need to + * hold it when creating a new object. + */ + if (blkid == DMU_BONUS_BLKID || + blkid == DMU_SPILL_BLKID) + match_offset = TRUE; + /* + * They might have to increase nlevels, + * thus dirtying the new TLIBs. Or the + * might have to change the block size, + * thus dirying the new lvl=0 blk=0. + */ + if (blkid == 0) + match_offset = TRUE; + break; + case THT_FREE: + /* + * We will dirty all the level 1 blocks in + * the free range and perhaps the first and + * last level 0 block. + */ + if (blkid >= beginblk && (blkid <= endblk || + txh->txh_arg2 == DMU_OBJECT_END)) + match_offset = TRUE; + break; + case THT_SPILL: + if (blkid == DMU_SPILL_BLKID) + match_offset = TRUE; + break; + case THT_BONUS: + if (blkid == DMU_BONUS_BLKID) + match_offset = TRUE; + break; + case THT_ZAP: + match_offset = TRUE; + break; + case THT_NEWOBJECT: + match_object = TRUE; + break; + default: + cmn_err(CE_PANIC, "bad txh_type %d", + txh->txh_type); + } + } + if (match_object && match_offset) { + DB_DNODE_EXIT(db); + return; + } + } + DB_DNODE_EXIT(db); + panic("dirtying dbuf obj=%llx lvl=%u blkid=%llx but not tx_held\n", + (u_longlong_t)db->db.db_object, db->db_level, + (u_longlong_t)db->db_blkid); +} +#endif + +/* + * If we can't do 10 iops, something is wrong. Let us go ahead + * and hit zfs_dirty_data_max. + */ +hrtime_t zfs_delay_max_ns = 100 * MICROSEC; /* 100 milliseconds */ +int zfs_delay_resolution_ns = 100 * 1000; /* 100 microseconds */ + +/* + * We delay transactions when we've determined that the backend storage + * isn't able to accommodate the rate of incoming writes. + * + * If there is already a transaction waiting, we delay relative to when + * that transaction finishes waiting. This way the calculated min_time + * is independent of the number of threads concurrently executing + * transactions. + * + * If we are the only waiter, wait relative to when the transaction + * started, rather than the current time. This credits the transaction for + * "time already served", e.g. reading indirect blocks. + * + * The minimum time for a transaction to take is calculated as: + * min_time = scale * (dirty - min) / (max - dirty) + * min_time is then capped at zfs_delay_max_ns. + * + * The delay has two degrees of freedom that can be adjusted via tunables. + * The percentage of dirty data at which we start to delay is defined by + * zfs_delay_min_dirty_percent. This should typically be at or above + * zfs_vdev_async_write_active_max_dirty_percent so that we only start to + * delay after writing at full speed has failed to keep up with the incoming + * write rate. The scale of the curve is defined by zfs_delay_scale. Roughly + * speaking, this variable determines the amount of delay at the midpoint of + * the curve. + * + * delay + * 10ms +-------------------------------------------------------------*+ + * | *| + * 9ms + *+ + * | *| + * 8ms + *+ + * | * | + * 7ms + * + + * | * | + * 6ms + * + + * | * | + * 5ms + * + + * | * | + * 4ms + * + + * | * | + * 3ms + * + + * | * | + * 2ms + (midpoint) * + + * | | ** | + * 1ms + v *** + + * | zfs_delay_scale ----------> ******** | + * 0 +-------------------------------------*********----------------+ + * 0% <- zfs_dirty_data_max -> 100% + * + * Note that since the delay is added to the outstanding time remaining on the + * most recent transaction, the delay is effectively the inverse of IOPS. + * Here the midpoint of 500us translates to 2000 IOPS. The shape of the curve + * was chosen such that small changes in the amount of accumulated dirty data + * in the first 3/4 of the curve yield relatively small differences in the + * amount of delay. + * + * The effects can be easier to understand when the amount of delay is + * represented on a log scale: + * + * delay + * 100ms +-------------------------------------------------------------++ + * + + + * | | + * + *+ + * 10ms + *+ + * + ** + + * | (midpoint) ** | + * + | ** + + * 1ms + v **** + + * + zfs_delay_scale ----------> ***** + + * | **** | + * + **** + + * 100us + ** + + * + * + + * | * | + * + * + + * 10us + * + + * + + + * | | + * + + + * +--------------------------------------------------------------+ + * 0% <- zfs_dirty_data_max -> 100% + * + * Note here that only as the amount of dirty data approaches its limit does + * the delay start to increase rapidly. The goal of a properly tuned system + * should be to keep the amount of dirty data out of that range by first + * ensuring that the appropriate limits are set for the I/O scheduler to reach + * optimal throughput on the backend storage, and then by changing the value + * of zfs_delay_scale to increase the steepness of the curve. + */ +static void +dmu_tx_delay(dmu_tx_t *tx, uint64_t dirty) +{ + dsl_pool_t *dp = tx->tx_pool; + uint64_t delay_min_bytes = + zfs_dirty_data_max * zfs_delay_min_dirty_percent / 100; + hrtime_t wakeup, min_tx_time, now; + + if (dirty <= delay_min_bytes) + return; + + /* + * The caller has already waited until we are under the max. + * We make them pass us the amount of dirty data so we don't + * have to handle the case of it being >= the max, which could + * cause a divide-by-zero if it's == the max. + */ + ASSERT3U(dirty, <, zfs_dirty_data_max); + + now = gethrtime(); + min_tx_time = zfs_delay_scale * + (dirty - delay_min_bytes) / (zfs_dirty_data_max - dirty); + min_tx_time = MIN(min_tx_time, zfs_delay_max_ns); + if (now > tx->tx_start + min_tx_time) + return; + + DTRACE_PROBE3(delay__mintime, dmu_tx_t *, tx, uint64_t, dirty, + uint64_t, min_tx_time); + + mutex_enter(&dp->dp_lock); + wakeup = MAX(tx->tx_start + min_tx_time, + dp->dp_last_wakeup + min_tx_time); + dp->dp_last_wakeup = wakeup; + mutex_exit(&dp->dp_lock); + + zfs_sleep_until(wakeup); +} + +/* + * This routine attempts to assign the transaction to a transaction group. + * To do so, we must determine if there is sufficient free space on disk. + * + * If this is a "netfree" transaction (i.e. we called dmu_tx_mark_netfree() + * on it), then it is assumed that there is sufficient free space, + * unless there's insufficient slop space in the pool (see the comment + * above spa_slop_shift in spa_misc.c). + * + * If it is not a "netfree" transaction, then if the data already on disk + * is over the allowed usage (e.g. quota), this will fail with EDQUOT or + * ENOSPC. Otherwise, if the current rough estimate of pending changes, + * plus the rough estimate of this transaction's changes, may exceed the + * allowed usage, then this will fail with ERESTART, which will cause the + * caller to wait for the pending changes to be written to disk (by waiting + * for the next TXG to open), and then check the space usage again. + * + * The rough estimate of pending changes is comprised of the sum of: + * + * - this transaction's holds' txh_space_towrite + * + * - dd_tempreserved[], which is the sum of in-flight transactions' + * holds' txh_space_towrite (i.e. those transactions that have called + * dmu_tx_assign() but not yet called dmu_tx_commit()). + * + * - dd_space_towrite[], which is the amount of dirtied dbufs. + * + * Note that all of these values are inflated by spa_get_worst_case_asize(), + * which means that we may get ERESTART well before we are actually in danger + * of running out of space, but this also mitigates any small inaccuracies + * in the rough estimate (e.g. txh_space_towrite doesn't take into account + * indirect blocks, and dd_space_towrite[] doesn't take into account changes + * to the MOS). + * + * Note that due to this algorithm, it is possible to exceed the allowed + * usage by one transaction. Also, as we approach the allowed usage, + * we will allow a very limited amount of changes into each TXG, thus + * decreasing performance. + */ +static int +dmu_tx_try_assign(dmu_tx_t *tx, txg_how_t txg_how) +{ + spa_t *spa = tx->tx_pool->dp_spa; + + ASSERT0(tx->tx_txg); + + if (tx->tx_err) { + DMU_TX_STAT_BUMP(dmu_tx_error); + return (tx->tx_err); + } + + if (spa_suspended(spa)) { + DMU_TX_STAT_BUMP(dmu_tx_suspended); + + /* + * If the user has indicated a blocking failure mode + * then return ERESTART which will block in dmu_tx_wait(). + * Otherwise, return EIO so that an error can get + * propagated back to the VOP calls. + * + * Note that we always honor the txg_how flag regardless + * of the failuremode setting. + */ + if (spa_get_failmode(spa) == ZIO_FAILURE_MODE_CONTINUE && + txg_how != TXG_WAIT) + return (SET_ERROR(EIO)); + + return (SET_ERROR(ERESTART)); + } + + if (!tx->tx_waited && + dsl_pool_need_dirty_delay(tx->tx_pool)) { + tx->tx_wait_dirty = B_TRUE; + DMU_TX_STAT_BUMP(dmu_tx_dirty_delay); + return (ERESTART); + } + + tx->tx_txg = txg_hold_open(tx->tx_pool, &tx->tx_txgh); + tx->tx_needassign_txh = NULL; + + /* + * NB: No error returns are allowed after txg_hold_open, but + * before processing the dnode holds, due to the + * dmu_tx_unassign() logic. + */ + + uint64_t towrite = 0; + uint64_t tohold = 0; + for (dmu_tx_hold_t *txh = list_head(&tx->tx_holds); txh != NULL; + txh = list_next(&tx->tx_holds, txh)) { + dnode_t *dn = txh->txh_dnode; + if (dn != NULL) { + mutex_enter(&dn->dn_mtx); + if (dn->dn_assigned_txg == tx->tx_txg - 1) { + mutex_exit(&dn->dn_mtx); + tx->tx_needassign_txh = txh; + DMU_TX_STAT_BUMP(dmu_tx_group); + return (SET_ERROR(ERESTART)); + } + if (dn->dn_assigned_txg == 0) + dn->dn_assigned_txg = tx->tx_txg; + ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg); + (void) refcount_add(&dn->dn_tx_holds, tx); + mutex_exit(&dn->dn_mtx); + } + towrite += refcount_count(&txh->txh_space_towrite); + tohold += refcount_count(&txh->txh_memory_tohold); + } + + /* needed allocation: worst-case estimate of write space */ + uint64_t asize = spa_get_worst_case_asize(tx->tx_pool->dp_spa, towrite); + /* calculate memory footprint estimate */ + uint64_t memory = towrite + tohold; + + if (tx->tx_dir != NULL && asize != 0) { + int err = dsl_dir_tempreserve_space(tx->tx_dir, memory, + asize, tx->tx_netfree, &tx->tx_tempreserve_cookie, tx); + if (err != 0) + return (err); + } + + DMU_TX_STAT_BUMP(dmu_tx_assigned); + + return (0); +} + +static void +dmu_tx_unassign(dmu_tx_t *tx) +{ + if (tx->tx_txg == 0) + return; + + txg_rele_to_quiesce(&tx->tx_txgh); + + /* + * Walk the transaction's hold list, removing the hold on the + * associated dnode, and notifying waiters if the refcount drops to 0. + */ + for (dmu_tx_hold_t *txh = list_head(&tx->tx_holds); + txh && txh != tx->tx_needassign_txh; + txh = list_next(&tx->tx_holds, txh)) { + dnode_t *dn = txh->txh_dnode; + + if (dn == NULL) + continue; + mutex_enter(&dn->dn_mtx); + ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg); + + if (refcount_remove(&dn->dn_tx_holds, tx) == 0) { + dn->dn_assigned_txg = 0; + cv_broadcast(&dn->dn_notxholds); + } + mutex_exit(&dn->dn_mtx); + } + + txg_rele_to_sync(&tx->tx_txgh); + + tx->tx_lasttried_txg = tx->tx_txg; + tx->tx_txg = 0; +} + +/* + * Assign tx to a transaction group. txg_how can be one of: + * + * (1) TXG_WAIT. If the current open txg is full, waits until there's + * a new one. This should be used when you're not holding locks. + * It will only fail if we're truly out of space (or over quota). + * + * (2) TXG_NOWAIT. If we can't assign into the current open txg without + * blocking, returns immediately with ERESTART. This should be used + * whenever you're holding locks. On an ERESTART error, the caller + * should drop locks, do a dmu_tx_wait(tx), and try again. + * + * (3) TXG_WAITED. Like TXG_NOWAIT, but indicates that dmu_tx_wait() + * has already been called on behalf of this operation (though + * most likely on a different tx). + */ +int +dmu_tx_assign(dmu_tx_t *tx, txg_how_t txg_how) +{ + int err; + + ASSERT(tx->tx_txg == 0); + ASSERT(txg_how == TXG_WAIT || txg_how == TXG_NOWAIT || + txg_how == TXG_WAITED); + ASSERT(!dsl_pool_sync_context(tx->tx_pool)); + + if (txg_how == TXG_WAITED) + tx->tx_waited = B_TRUE; + + /* If we might wait, we must not hold the config lock. */ + ASSERT(txg_how != TXG_WAIT || !dsl_pool_config_held(tx->tx_pool)); + + while ((err = dmu_tx_try_assign(tx, txg_how)) != 0) { + dmu_tx_unassign(tx); + + if (err != ERESTART || txg_how != TXG_WAIT) + return (err); + + dmu_tx_wait(tx); + } + + txg_rele_to_quiesce(&tx->tx_txgh); + + return (0); +} + +void +dmu_tx_wait(dmu_tx_t *tx) +{ + spa_t *spa = tx->tx_pool->dp_spa; + dsl_pool_t *dp = tx->tx_pool; + hrtime_t before; + + ASSERT(tx->tx_txg == 0); + ASSERT(!dsl_pool_config_held(tx->tx_pool)); + + before = gethrtime(); + + if (tx->tx_wait_dirty) { + uint64_t dirty; + + /* + * dmu_tx_try_assign() has determined that we need to wait + * because we've consumed much or all of the dirty buffer + * space. + */ + mutex_enter(&dp->dp_lock); + if (dp->dp_dirty_total >= zfs_dirty_data_max) + DMU_TX_STAT_BUMP(dmu_tx_dirty_over_max); + while (dp->dp_dirty_total >= zfs_dirty_data_max) + cv_wait(&dp->dp_spaceavail_cv, &dp->dp_lock); + dirty = dp->dp_dirty_total; + mutex_exit(&dp->dp_lock); + + dmu_tx_delay(tx, dirty); + + tx->tx_wait_dirty = B_FALSE; + + /* + * Note: setting tx_waited only has effect if the caller + * used TX_WAIT. Otherwise they are going to destroy + * this tx and try again. The common case, zfs_write(), + * uses TX_WAIT. + */ + tx->tx_waited = B_TRUE; + } else if (spa_suspended(spa) || tx->tx_lasttried_txg == 0) { + /* + * If the pool is suspended we need to wait until it + * is resumed. Note that it's possible that the pool + * has become active after this thread has tried to + * obtain a tx. If that's the case then tx_lasttried_txg + * would not have been set. + */ + txg_wait_synced(dp, spa_last_synced_txg(spa) + 1); + } else if (tx->tx_needassign_txh) { + dnode_t *dn = tx->tx_needassign_txh->txh_dnode; + + mutex_enter(&dn->dn_mtx); + while (dn->dn_assigned_txg == tx->tx_lasttried_txg - 1) + cv_wait(&dn->dn_notxholds, &dn->dn_mtx); + mutex_exit(&dn->dn_mtx); + tx->tx_needassign_txh = NULL; + } else { + /* + * A dnode is assigned to the quiescing txg. Wait for its + * transaction to complete. + */ + txg_wait_open(tx->tx_pool, tx->tx_lasttried_txg + 1); + } + + spa_tx_assign_add_nsecs(spa, gethrtime() - before); +} + +static void +dmu_tx_destroy(dmu_tx_t *tx) +{ + dmu_tx_hold_t *txh; + + while ((txh = list_head(&tx->tx_holds)) != NULL) { + dnode_t *dn = txh->txh_dnode; + + list_remove(&tx->tx_holds, txh); + refcount_destroy_many(&txh->txh_space_towrite, + refcount_count(&txh->txh_space_towrite)); + refcount_destroy_many(&txh->txh_memory_tohold, + refcount_count(&txh->txh_memory_tohold)); + kmem_free(txh, sizeof (dmu_tx_hold_t)); + if (dn != NULL) + dnode_rele(dn, tx); + } + + list_destroy(&tx->tx_callbacks); + list_destroy(&tx->tx_holds); + kmem_free(tx, sizeof (dmu_tx_t)); +} + +void +dmu_tx_commit(dmu_tx_t *tx) +{ + dmu_tx_hold_t *txh; + + ASSERT(tx->tx_txg != 0); + + /* + * Go through the transaction's hold list and remove holds on + * associated dnodes, notifying waiters if no holds remain. + */ + for (txh = list_head(&tx->tx_holds); txh != NULL; + txh = list_next(&tx->tx_holds, txh)) { + dnode_t *dn = txh->txh_dnode; + + if (dn == NULL) + continue; + + mutex_enter(&dn->dn_mtx); + ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg); + + if (refcount_remove(&dn->dn_tx_holds, tx) == 0) { + dn->dn_assigned_txg = 0; + cv_broadcast(&dn->dn_notxholds); + } + mutex_exit(&dn->dn_mtx); + } + + if (tx->tx_tempreserve_cookie) + dsl_dir_tempreserve_clear(tx->tx_tempreserve_cookie, tx); + + if (!list_is_empty(&tx->tx_callbacks)) + txg_register_callbacks(&tx->tx_txgh, &tx->tx_callbacks); + + if (tx->tx_anyobj == FALSE) + txg_rele_to_sync(&tx->tx_txgh); + + dmu_tx_destroy(tx); +} + +void +dmu_tx_abort(dmu_tx_t *tx) +{ + ASSERT(tx->tx_txg == 0); + + /* + * Call any registered callbacks with an error code. + */ + if (!list_is_empty(&tx->tx_callbacks)) + dmu_tx_do_callbacks(&tx->tx_callbacks, ECANCELED); + + dmu_tx_destroy(tx); +} + +uint64_t +dmu_tx_get_txg(dmu_tx_t *tx) +{ + ASSERT(tx->tx_txg != 0); + return (tx->tx_txg); +} + +dsl_pool_t * +dmu_tx_pool(dmu_tx_t *tx) +{ + ASSERT(tx->tx_pool != NULL); + return (tx->tx_pool); +} + +void +dmu_tx_callback_register(dmu_tx_t *tx, dmu_tx_callback_func_t *func, void *data) +{ + dmu_tx_callback_t *dcb; + + dcb = kmem_alloc(sizeof (dmu_tx_callback_t), KM_SLEEP); + + dcb->dcb_func = func; + dcb->dcb_data = data; + + list_insert_tail(&tx->tx_callbacks, dcb); +} + +/* + * Call all the commit callbacks on a list, with a given error code. + */ +void +dmu_tx_do_callbacks(list_t *cb_list, int error) +{ + dmu_tx_callback_t *dcb; + + while ((dcb = list_head(cb_list)) != NULL) { + list_remove(cb_list, dcb); + dcb->dcb_func(dcb->dcb_data, error); + kmem_free(dcb, sizeof (dmu_tx_callback_t)); + } +} + +/* + * Interface to hold a bunch of attributes. + * used for creating new files. + * attrsize is the total size of all attributes + * to be added during object creation + * + * For updating/adding a single attribute dmu_tx_hold_sa() should be used. + */ + +/* + * hold necessary attribute name for attribute registration. + * should be a very rare case where this is needed. If it does + * happen it would only happen on the first write to the file system. + */ +static void +dmu_tx_sa_registration_hold(sa_os_t *sa, dmu_tx_t *tx) +{ + if (!sa->sa_need_attr_registration) + return; + + for (int i = 0; i != sa->sa_num_attrs; i++) { + if (!sa->sa_attr_table[i].sa_registered) { + if (sa->sa_reg_attr_obj) + dmu_tx_hold_zap(tx, sa->sa_reg_attr_obj, + B_TRUE, sa->sa_attr_table[i].sa_name); + else + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, + B_TRUE, sa->sa_attr_table[i].sa_name); + } + } +} + +void +dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object) +{ + dmu_tx_hold_t *txh; + + txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, object, + THT_SPILL, 0, 0); + if (txh != NULL) + (void) refcount_add_many(&txh->txh_space_towrite, + SPA_OLD_MAXBLOCKSIZE, FTAG); +} + +void +dmu_tx_hold_sa_create(dmu_tx_t *tx, int attrsize) +{ + sa_os_t *sa = tx->tx_objset->os_sa; + + dmu_tx_hold_bonus(tx, DMU_NEW_OBJECT); + + if (tx->tx_objset->os_sa->sa_master_obj == 0) + return; + + if (tx->tx_objset->os_sa->sa_layout_attr_obj) { + dmu_tx_hold_zap(tx, sa->sa_layout_attr_obj, B_TRUE, NULL); + } else { + dmu_tx_hold_zap(tx, sa->sa_master_obj, B_TRUE, SA_LAYOUTS); + dmu_tx_hold_zap(tx, sa->sa_master_obj, B_TRUE, SA_REGISTRY); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, B_TRUE, NULL); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, B_TRUE, NULL); + } + + dmu_tx_sa_registration_hold(sa, tx); + + if (attrsize <= DN_OLD_MAX_BONUSLEN && !sa->sa_force_spill) + return; + + (void) dmu_tx_hold_object_impl(tx, tx->tx_objset, DMU_NEW_OBJECT, + THT_SPILL, 0, 0); +} + +/* + * Hold SA attribute + * + * dmu_tx_hold_sa(dmu_tx_t *tx, sa_handle_t *, attribute, add, size) + * + * variable_size is the total size of all variable sized attributes + * passed to this function. It is not the total size of all + * variable size attributes that *may* exist on this object. + */ +void +dmu_tx_hold_sa(dmu_tx_t *tx, sa_handle_t *hdl, boolean_t may_grow) +{ + uint64_t object; + sa_os_t *sa = tx->tx_objset->os_sa; + + ASSERT(hdl != NULL); + + object = sa_handle_object(hdl); + + dmu_tx_hold_bonus(tx, object); + + if (tx->tx_objset->os_sa->sa_master_obj == 0) + return; + + if (tx->tx_objset->os_sa->sa_reg_attr_obj == 0 || + tx->tx_objset->os_sa->sa_layout_attr_obj == 0) { + dmu_tx_hold_zap(tx, sa->sa_master_obj, B_TRUE, SA_LAYOUTS); + dmu_tx_hold_zap(tx, sa->sa_master_obj, B_TRUE, SA_REGISTRY); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, B_TRUE, NULL); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, B_TRUE, NULL); + } + + dmu_tx_sa_registration_hold(sa, tx); + + if (may_grow && tx->tx_objset->os_sa->sa_layout_attr_obj) + dmu_tx_hold_zap(tx, sa->sa_layout_attr_obj, B_TRUE, NULL); + + if (sa->sa_force_spill || may_grow || hdl->sa_spill) { + ASSERT(tx->tx_txg == 0); + dmu_tx_hold_spill(tx, object); + } else { + dmu_buf_impl_t *db = (dmu_buf_impl_t *)hdl->sa_bonus; + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if (dn->dn_have_spill) { + ASSERT(tx->tx_txg == 0); + dmu_tx_hold_spill(tx, object); + } + DB_DNODE_EXIT(db); + } +} + +void +dmu_tx_init(void) +{ + dmu_tx_ksp = kstat_create("zfs", 0, "dmu_tx", "misc", + KSTAT_TYPE_NAMED, sizeof (dmu_tx_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + if (dmu_tx_ksp != NULL) { + dmu_tx_ksp->ks_data = &dmu_tx_stats; + kstat_install(dmu_tx_ksp); + } +} + +void +dmu_tx_fini(void) +{ + if (dmu_tx_ksp != NULL) { + kstat_delete(dmu_tx_ksp); + dmu_tx_ksp = NULL; + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dmu_tx_create); +EXPORT_SYMBOL(dmu_tx_hold_write); +EXPORT_SYMBOL(dmu_tx_hold_write_by_dnode); +EXPORT_SYMBOL(dmu_tx_hold_free); +EXPORT_SYMBOL(dmu_tx_hold_free_by_dnode); +EXPORT_SYMBOL(dmu_tx_hold_zap); +EXPORT_SYMBOL(dmu_tx_hold_zap_by_dnode); +EXPORT_SYMBOL(dmu_tx_hold_bonus); +EXPORT_SYMBOL(dmu_tx_hold_bonus_by_dnode); +EXPORT_SYMBOL(dmu_tx_abort); +EXPORT_SYMBOL(dmu_tx_assign); +EXPORT_SYMBOL(dmu_tx_wait); +EXPORT_SYMBOL(dmu_tx_commit); +EXPORT_SYMBOL(dmu_tx_mark_netfree); +EXPORT_SYMBOL(dmu_tx_get_txg); +EXPORT_SYMBOL(dmu_tx_callback_register); +EXPORT_SYMBOL(dmu_tx_do_callbacks); +EXPORT_SYMBOL(dmu_tx_hold_spill); +EXPORT_SYMBOL(dmu_tx_hold_sa_create); +EXPORT_SYMBOL(dmu_tx_hold_sa); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dmu_zfetch.c +++ linux-aws-4.15.0/zfs/module/zfs/dmu_zfetch.c @@ -0,0 +1,356 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include + +/* + * This tunable disables predictive prefetch. Note that it leaves "prescient" + * prefetch (e.g. prefetch for zfs send) intact. Unlike predictive prefetch, + * prescient prefetch never issues i/os that end up not being needed, + * so it can't hurt performance. + */ + +int zfs_prefetch_disable = B_FALSE; + +/* max # of streams per zfetch */ +unsigned int zfetch_max_streams = 8; +/* min time before stream reclaim */ +unsigned int zfetch_min_sec_reap = 2; +/* max bytes to prefetch per stream (default 8MB) */ +unsigned int zfetch_max_distance = 8 * 1024 * 1024; +/* max bytes to prefetch indirects for per stream (default 64MB) */ +unsigned int zfetch_max_idistance = 64 * 1024 * 1024; +/* max number of bytes in an array_read in which we allow prefetching (1MB) */ +unsigned long zfetch_array_rd_sz = 1024 * 1024; + +typedef struct zfetch_stats { + kstat_named_t zfetchstat_hits; + kstat_named_t zfetchstat_misses; + kstat_named_t zfetchstat_max_streams; +} zfetch_stats_t; + +static zfetch_stats_t zfetch_stats = { + { "hits", KSTAT_DATA_UINT64 }, + { "misses", KSTAT_DATA_UINT64 }, + { "max_streams", KSTAT_DATA_UINT64 }, +}; + +#define ZFETCHSTAT_BUMP(stat) \ + atomic_inc_64(&zfetch_stats.stat.value.ui64); + +kstat_t *zfetch_ksp; + +void +zfetch_init(void) +{ + zfetch_ksp = kstat_create("zfs", 0, "zfetchstats", "misc", + KSTAT_TYPE_NAMED, sizeof (zfetch_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + if (zfetch_ksp != NULL) { + zfetch_ksp->ks_data = &zfetch_stats; + kstat_install(zfetch_ksp); + } +} + +void +zfetch_fini(void) +{ + if (zfetch_ksp != NULL) { + kstat_delete(zfetch_ksp); + zfetch_ksp = NULL; + } +} + +/* + * This takes a pointer to a zfetch structure and a dnode. It performs the + * necessary setup for the zfetch structure, grokking data from the + * associated dnode. + */ +void +dmu_zfetch_init(zfetch_t *zf, dnode_t *dno) +{ + if (zf == NULL) + return; + + zf->zf_dnode = dno; + + list_create(&zf->zf_stream, sizeof (zstream_t), + offsetof(zstream_t, zs_node)); + + rw_init(&zf->zf_rwlock, NULL, RW_DEFAULT, NULL); +} + +static void +dmu_zfetch_stream_remove(zfetch_t *zf, zstream_t *zs) +{ + ASSERT(RW_WRITE_HELD(&zf->zf_rwlock)); + list_remove(&zf->zf_stream, zs); + mutex_destroy(&zs->zs_lock); + kmem_free(zs, sizeof (*zs)); +} + +/* + * Clean-up state associated with a zfetch structure (e.g. destroy the + * streams). This doesn't free the zfetch_t itself, that's left to the caller. + */ +void +dmu_zfetch_fini(zfetch_t *zf) +{ + zstream_t *zs; + + ASSERT(!RW_LOCK_HELD(&zf->zf_rwlock)); + + rw_enter(&zf->zf_rwlock, RW_WRITER); + while ((zs = list_head(&zf->zf_stream)) != NULL) + dmu_zfetch_stream_remove(zf, zs); + rw_exit(&zf->zf_rwlock); + list_destroy(&zf->zf_stream); + rw_destroy(&zf->zf_rwlock); + + zf->zf_dnode = NULL; +} + +/* + * If there aren't too many streams already, create a new stream. + * The "blkid" argument is the next block that we expect this stream to access. + * While we're here, clean up old streams (which haven't been + * accessed for at least zfetch_min_sec_reap seconds). + */ +static void +dmu_zfetch_stream_create(zfetch_t *zf, uint64_t blkid) +{ + zstream_t *zs; + zstream_t *zs_next; + int numstreams = 0; + uint32_t max_streams; + + ASSERT(RW_WRITE_HELD(&zf->zf_rwlock)); + + /* + * Clean up old streams. + */ + for (zs = list_head(&zf->zf_stream); + zs != NULL; zs = zs_next) { + zs_next = list_next(&zf->zf_stream, zs); + if (((gethrtime() - zs->zs_atime) / NANOSEC) > + zfetch_min_sec_reap) + dmu_zfetch_stream_remove(zf, zs); + else + numstreams++; + } + + /* + * The maximum number of streams is normally zfetch_max_streams, + * but for small files we lower it such that it's at least possible + * for all the streams to be non-overlapping. + * + * If we are already at the maximum number of streams for this file, + * even after removing old streams, then don't create this stream. + */ + max_streams = MAX(1, MIN(zfetch_max_streams, + zf->zf_dnode->dn_maxblkid * zf->zf_dnode->dn_datablksz / + zfetch_max_distance)); + if (numstreams >= max_streams) { + ZFETCHSTAT_BUMP(zfetchstat_max_streams); + return; + } + + zs = kmem_zalloc(sizeof (*zs), KM_SLEEP); + zs->zs_blkid = blkid; + zs->zs_pf_blkid = blkid; + zs->zs_ipf_blkid = blkid; + zs->zs_atime = gethrtime(); + mutex_init(&zs->zs_lock, NULL, MUTEX_DEFAULT, NULL); + + list_insert_head(&zf->zf_stream, zs); +} + +/* + * This is the predictive prefetch entry point. It associates dnode access + * specified with blkid and nblks arguments with prefetch stream, predicts + * further accesses based on that stats and initiates speculative prefetch. + * fetch_data argument specifies whether actual data blocks should be fetched: + * FALSE -- prefetch only indirect blocks for predicted data blocks; + * TRUE -- prefetch predicted data blocks plus following indirect blocks. + */ +void +dmu_zfetch(zfetch_t *zf, uint64_t blkid, uint64_t nblks, boolean_t fetch_data) +{ + zstream_t *zs; + int64_t pf_start, ipf_start, ipf_istart, ipf_iend; + int64_t pf_ahead_blks, max_blks, iblk; + int epbs, max_dist_blks, pf_nblks, ipf_nblks, i; + uint64_t end_of_access_blkid; + end_of_access_blkid = blkid + nblks; + + if (zfs_prefetch_disable) + return; + + /* + * As a fast path for small (single-block) files, ignore access + * to the first block. + */ + if (blkid == 0) + return; + + rw_enter(&zf->zf_rwlock, RW_READER); + + for (zs = list_head(&zf->zf_stream); zs != NULL; + zs = list_next(&zf->zf_stream, zs)) { + if (blkid == zs->zs_blkid) { + mutex_enter(&zs->zs_lock); + /* + * zs_blkid could have changed before we + * acquired zs_lock; re-check them here. + */ + if (blkid != zs->zs_blkid) { + mutex_exit(&zs->zs_lock); + continue; + } + break; + } + } + + if (zs == NULL) { + /* + * This access is not part of any existing stream. Create + * a new stream for it. + */ + ZFETCHSTAT_BUMP(zfetchstat_misses); + if (rw_tryupgrade(&zf->zf_rwlock)) + dmu_zfetch_stream_create(zf, end_of_access_blkid); + rw_exit(&zf->zf_rwlock); + return; + } + + /* + * This access was to a block that we issued a prefetch for on + * behalf of this stream. Issue further prefetches for this stream. + * + * Normally, we start prefetching where we stopped + * prefetching last (zs_pf_blkid). But when we get our first + * hit on this stream, zs_pf_blkid == zs_blkid, we don't + * want to prefetch the block we just accessed. In this case, + * start just after the block we just accessed. + */ + pf_start = MAX(zs->zs_pf_blkid, end_of_access_blkid); + + /* + * Double our amount of prefetched data, but don't let the + * prefetch get further ahead than zfetch_max_distance. + */ + if (fetch_data) { + max_dist_blks = + zfetch_max_distance >> zf->zf_dnode->dn_datablkshift; + /* + * Previously, we were (zs_pf_blkid - blkid) ahead. We + * want to now be double that, so read that amount again, + * plus the amount we are catching up by (i.e. the amount + * read just now). + */ + pf_ahead_blks = zs->zs_pf_blkid - blkid + nblks; + max_blks = max_dist_blks - (pf_start - end_of_access_blkid); + pf_nblks = MIN(pf_ahead_blks, max_blks); + } else { + pf_nblks = 0; + } + + zs->zs_pf_blkid = pf_start + pf_nblks; + + /* + * Do the same for indirects, starting from where we stopped last, + * or where we will stop reading data blocks (and the indirects + * that point to them). + */ + ipf_start = MAX(zs->zs_ipf_blkid, zs->zs_pf_blkid); + max_dist_blks = zfetch_max_idistance >> zf->zf_dnode->dn_datablkshift; + /* + * We want to double our distance ahead of the data prefetch + * (or reader, if we are not prefetching data). Previously, we + * were (zs_ipf_blkid - blkid) ahead. To double that, we read + * that amount again, plus the amount we are catching up by + * (i.e. the amount read now + the amount of data prefetched now). + */ + pf_ahead_blks = zs->zs_ipf_blkid - blkid + nblks + pf_nblks; + max_blks = max_dist_blks - (ipf_start - end_of_access_blkid); + ipf_nblks = MIN(pf_ahead_blks, max_blks); + zs->zs_ipf_blkid = ipf_start + ipf_nblks; + + epbs = zf->zf_dnode->dn_indblkshift - SPA_BLKPTRSHIFT; + ipf_istart = P2ROUNDUP(ipf_start, 1 << epbs) >> epbs; + ipf_iend = P2ROUNDUP(zs->zs_ipf_blkid, 1 << epbs) >> epbs; + + zs->zs_atime = gethrtime(); + zs->zs_blkid = end_of_access_blkid; + mutex_exit(&zs->zs_lock); + rw_exit(&zf->zf_rwlock); + + /* + * dbuf_prefetch() is asynchronous (even when it needs to read + * indirect blocks), but we still prefer to drop our locks before + * calling it to reduce the time we hold them. + */ + + for (i = 0; i < pf_nblks; i++) { + dbuf_prefetch(zf->zf_dnode, 0, pf_start + i, + ZIO_PRIORITY_ASYNC_READ, ARC_FLAG_PREDICTIVE_PREFETCH); + } + for (iblk = ipf_istart; iblk < ipf_iend; iblk++) { + dbuf_prefetch(zf->zf_dnode, 1, iblk, + ZIO_PRIORITY_ASYNC_READ, ARC_FLAG_PREDICTIVE_PREFETCH); + } + ZFETCHSTAT_BUMP(zfetchstat_hits); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* BEGIN CSTYLED */ +module_param(zfs_prefetch_disable, int, 0644); +MODULE_PARM_DESC(zfs_prefetch_disable, "Disable all ZFS prefetching"); + +module_param(zfetch_max_streams, uint, 0644); +MODULE_PARM_DESC(zfetch_max_streams, "Max number of streams per zfetch"); + +module_param(zfetch_min_sec_reap, uint, 0644); +MODULE_PARM_DESC(zfetch_min_sec_reap, "Min time before stream reclaim"); + +module_param(zfetch_max_distance, uint, 0644); +MODULE_PARM_DESC(zfetch_max_distance, + "Max bytes to prefetch per stream (default 8MB)"); + +module_param(zfetch_array_rd_sz, ulong, 0644); +MODULE_PARM_DESC(zfetch_array_rd_sz, "Number of bytes in a array_read"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dnode.c +++ linux-aws-4.15.0/zfs/module/zfs/dnode.c @@ -0,0 +1,2247 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +dnode_stats_t dnode_stats = { + { "dnode_hold_dbuf_hold", KSTAT_DATA_UINT64 }, + { "dnode_hold_dbuf_read", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_hits", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_misses", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_interior", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_lock_retry", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_lock_misses", KSTAT_DATA_UINT64 }, + { "dnode_hold_alloc_type_none", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_hits", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_misses", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_lock_misses", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_lock_retry", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_overflow", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_refcount", KSTAT_DATA_UINT64 }, + { "dnode_hold_free_txg", KSTAT_DATA_UINT64 }, + { "dnode_allocate", KSTAT_DATA_UINT64 }, + { "dnode_reallocate", KSTAT_DATA_UINT64 }, + { "dnode_buf_evict", KSTAT_DATA_UINT64 }, + { "dnode_alloc_next_chunk", KSTAT_DATA_UINT64 }, + { "dnode_alloc_race", KSTAT_DATA_UINT64 }, + { "dnode_alloc_next_block", KSTAT_DATA_UINT64 }, + { "dnode_move_invalid", KSTAT_DATA_UINT64 }, + { "dnode_move_recheck1", KSTAT_DATA_UINT64 }, + { "dnode_move_recheck2", KSTAT_DATA_UINT64 }, + { "dnode_move_special", KSTAT_DATA_UINT64 }, + { "dnode_move_handle", KSTAT_DATA_UINT64 }, + { "dnode_move_rwlock", KSTAT_DATA_UINT64 }, + { "dnode_move_active", KSTAT_DATA_UINT64 }, +}; + +static kstat_t *dnode_ksp; +static kmem_cache_t *dnode_cache; + +ASSERTV(static dnode_phys_t dnode_phys_zero); + +int zfs_default_bs = SPA_MINBLOCKSHIFT; +int zfs_default_ibs = DN_MAX_INDBLKSHIFT; + +#ifdef _KERNEL +static kmem_cbrc_t dnode_move(void *, void *, size_t, void *); +#endif /* _KERNEL */ + +static int +dbuf_compare(const void *x1, const void *x2) +{ + const dmu_buf_impl_t *d1 = x1; + const dmu_buf_impl_t *d2 = x2; + + int cmp = AVL_CMP(d1->db_level, d2->db_level); + if (likely(cmp)) + return (cmp); + + cmp = AVL_CMP(d1->db_blkid, d2->db_blkid); + if (likely(cmp)) + return (cmp); + + if (d1->db_state == DB_SEARCH) { + ASSERT3S(d2->db_state, !=, DB_SEARCH); + return (-1); + } else if (d2->db_state == DB_SEARCH) { + ASSERT3S(d1->db_state, !=, DB_SEARCH); + return (1); + } + + return (AVL_PCMP(d1, d2)); +} + +/* ARGSUSED */ +static int +dnode_cons(void *arg, void *unused, int kmflag) +{ + dnode_t *dn = arg; + int i; + + rw_init(&dn->dn_struct_rwlock, NULL, RW_NOLOCKDEP, NULL); + mutex_init(&dn->dn_mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&dn->dn_dbufs_mtx, NULL, MUTEX_DEFAULT, NULL); + cv_init(&dn->dn_notxholds, NULL, CV_DEFAULT, NULL); + + /* + * Every dbuf has a reference, and dropping a tracked reference is + * O(number of references), so don't track dn_holds. + */ + refcount_create_untracked(&dn->dn_holds); + refcount_create(&dn->dn_tx_holds); + list_link_init(&dn->dn_link); + + bzero(&dn->dn_next_nblkptr[0], sizeof (dn->dn_next_nblkptr)); + bzero(&dn->dn_next_nlevels[0], sizeof (dn->dn_next_nlevels)); + bzero(&dn->dn_next_indblkshift[0], sizeof (dn->dn_next_indblkshift)); + bzero(&dn->dn_next_bonustype[0], sizeof (dn->dn_next_bonustype)); + bzero(&dn->dn_rm_spillblk[0], sizeof (dn->dn_rm_spillblk)); + bzero(&dn->dn_next_bonuslen[0], sizeof (dn->dn_next_bonuslen)); + bzero(&dn->dn_next_blksz[0], sizeof (dn->dn_next_blksz)); + + for (i = 0; i < TXG_SIZE; i++) { + list_link_init(&dn->dn_dirty_link[i]); + dn->dn_free_ranges[i] = NULL; + list_create(&dn->dn_dirty_records[i], + sizeof (dbuf_dirty_record_t), + offsetof(dbuf_dirty_record_t, dr_dirty_node)); + } + + dn->dn_allocated_txg = 0; + dn->dn_free_txg = 0; + dn->dn_assigned_txg = 0; + dn->dn_dirtyctx = 0; + dn->dn_dirtyctx_firstset = NULL; + dn->dn_bonus = NULL; + dn->dn_have_spill = B_FALSE; + dn->dn_zio = NULL; + dn->dn_oldused = 0; + dn->dn_oldflags = 0; + dn->dn_olduid = 0; + dn->dn_oldgid = 0; + dn->dn_newuid = 0; + dn->dn_newgid = 0; + dn->dn_id_flags = 0; + + dn->dn_dbufs_count = 0; + avl_create(&dn->dn_dbufs, dbuf_compare, sizeof (dmu_buf_impl_t), + offsetof(dmu_buf_impl_t, db_link)); + + dn->dn_moved = 0; + return (0); +} + +/* ARGSUSED */ +static void +dnode_dest(void *arg, void *unused) +{ + int i; + dnode_t *dn = arg; + + rw_destroy(&dn->dn_struct_rwlock); + mutex_destroy(&dn->dn_mtx); + mutex_destroy(&dn->dn_dbufs_mtx); + cv_destroy(&dn->dn_notxholds); + refcount_destroy(&dn->dn_holds); + refcount_destroy(&dn->dn_tx_holds); + ASSERT(!list_link_active(&dn->dn_link)); + + for (i = 0; i < TXG_SIZE; i++) { + ASSERT(!list_link_active(&dn->dn_dirty_link[i])); + ASSERT3P(dn->dn_free_ranges[i], ==, NULL); + list_destroy(&dn->dn_dirty_records[i]); + ASSERT0(dn->dn_next_nblkptr[i]); + ASSERT0(dn->dn_next_nlevels[i]); + ASSERT0(dn->dn_next_indblkshift[i]); + ASSERT0(dn->dn_next_bonustype[i]); + ASSERT0(dn->dn_rm_spillblk[i]); + ASSERT0(dn->dn_next_bonuslen[i]); + ASSERT0(dn->dn_next_blksz[i]); + } + + ASSERT0(dn->dn_allocated_txg); + ASSERT0(dn->dn_free_txg); + ASSERT0(dn->dn_assigned_txg); + ASSERT0(dn->dn_dirtyctx); + ASSERT3P(dn->dn_dirtyctx_firstset, ==, NULL); + ASSERT3P(dn->dn_bonus, ==, NULL); + ASSERT(!dn->dn_have_spill); + ASSERT3P(dn->dn_zio, ==, NULL); + ASSERT0(dn->dn_oldused); + ASSERT0(dn->dn_oldflags); + ASSERT0(dn->dn_olduid); + ASSERT0(dn->dn_oldgid); + ASSERT0(dn->dn_newuid); + ASSERT0(dn->dn_newgid); + ASSERT0(dn->dn_id_flags); + + ASSERT0(dn->dn_dbufs_count); + avl_destroy(&dn->dn_dbufs); +} + +void +dnode_init(void) +{ + ASSERT(dnode_cache == NULL); + dnode_cache = kmem_cache_create("dnode_t", sizeof (dnode_t), + 0, dnode_cons, dnode_dest, NULL, NULL, NULL, 0); + kmem_cache_set_move(dnode_cache, dnode_move); + + dnode_ksp = kstat_create("zfs", 0, "dnodestats", "misc", + KSTAT_TYPE_NAMED, sizeof (dnode_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + if (dnode_ksp != NULL) { + dnode_ksp->ks_data = &dnode_stats; + kstat_install(dnode_ksp); + } +} + +void +dnode_fini(void) +{ + if (dnode_ksp != NULL) { + kstat_delete(dnode_ksp); + dnode_ksp = NULL; + } + + kmem_cache_destroy(dnode_cache); + dnode_cache = NULL; +} + + +#ifdef ZFS_DEBUG +void +dnode_verify(dnode_t *dn) +{ + int drop_struct_lock = FALSE; + + ASSERT(dn->dn_phys); + ASSERT(dn->dn_objset); + ASSERT(dn->dn_handle->dnh_dnode == dn); + + ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); + + if (!(zfs_flags & ZFS_DEBUG_DNODE_VERIFY)) + return; + + if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { + rw_enter(&dn->dn_struct_rwlock, RW_READER); + drop_struct_lock = TRUE; + } + if (dn->dn_phys->dn_type != DMU_OT_NONE || dn->dn_allocated_txg != 0) { + int i; + int max_bonuslen = DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots); + ASSERT3U(dn->dn_indblkshift, <=, SPA_MAXBLOCKSHIFT); + if (dn->dn_datablkshift) { + ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); + ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); + ASSERT3U(1<dn_datablkshift, ==, dn->dn_datablksz); + } + ASSERT3U(dn->dn_nlevels, <=, 30); + ASSERT(DMU_OT_IS_VALID(dn->dn_type)); + ASSERT3U(dn->dn_nblkptr, >=, 1); + ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); + ASSERT3U(dn->dn_bonuslen, <=, max_bonuslen); + ASSERT3U(dn->dn_datablksz, ==, + dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); + ASSERT3U(ISP2(dn->dn_datablksz), ==, dn->dn_datablkshift != 0); + ASSERT3U((dn->dn_nblkptr - 1) * sizeof (blkptr_t) + + dn->dn_bonuslen, <=, max_bonuslen); + for (i = 0; i < TXG_SIZE; i++) { + ASSERT3U(dn->dn_next_nlevels[i], <=, dn->dn_nlevels); + } + } + if (dn->dn_phys->dn_type != DMU_OT_NONE) + ASSERT3U(dn->dn_phys->dn_nlevels, <=, dn->dn_nlevels); + ASSERT(DMU_OBJECT_IS_SPECIAL(dn->dn_object) || dn->dn_dbuf != NULL); + if (dn->dn_dbuf != NULL) { + ASSERT3P(dn->dn_phys, ==, + (dnode_phys_t *)dn->dn_dbuf->db.db_data + + (dn->dn_object % (dn->dn_dbuf->db.db_size >> DNODE_SHIFT))); + } + if (drop_struct_lock) + rw_exit(&dn->dn_struct_rwlock); +} +#endif + +void +dnode_byteswap(dnode_phys_t *dnp) +{ + uint64_t *buf64 = (void*)&dnp->dn_blkptr; + int i; + + if (dnp->dn_type == DMU_OT_NONE) { + bzero(dnp, sizeof (dnode_phys_t)); + return; + } + + dnp->dn_datablkszsec = BSWAP_16(dnp->dn_datablkszsec); + dnp->dn_bonuslen = BSWAP_16(dnp->dn_bonuslen); + dnp->dn_extra_slots = BSWAP_8(dnp->dn_extra_slots); + dnp->dn_maxblkid = BSWAP_64(dnp->dn_maxblkid); + dnp->dn_used = BSWAP_64(dnp->dn_used); + + /* + * dn_nblkptr is only one byte, so it's OK to read it in either + * byte order. We can't read dn_bouslen. + */ + ASSERT(dnp->dn_indblkshift <= SPA_MAXBLOCKSHIFT); + ASSERT(dnp->dn_nblkptr <= DN_MAX_NBLKPTR); + for (i = 0; i < dnp->dn_nblkptr * sizeof (blkptr_t)/8; i++) + buf64[i] = BSWAP_64(buf64[i]); + + /* + * OK to check dn_bonuslen for zero, because it won't matter if + * we have the wrong byte order. This is necessary because the + * dnode dnode is smaller than a regular dnode. + */ + if (dnp->dn_bonuslen != 0) { + /* + * Note that the bonus length calculated here may be + * longer than the actual bonus buffer. This is because + * we always put the bonus buffer after the last block + * pointer (instead of packing it against the end of the + * dnode buffer). + */ + int off = (dnp->dn_nblkptr-1) * sizeof (blkptr_t); + int slots = dnp->dn_extra_slots + 1; + size_t len = DN_SLOTS_TO_BONUSLEN(slots) - off; + dmu_object_byteswap_t byteswap; + ASSERT(DMU_OT_IS_VALID(dnp->dn_bonustype)); + byteswap = DMU_OT_BYTESWAP(dnp->dn_bonustype); + dmu_ot_byteswap[byteswap].ob_func(dnp->dn_bonus + off, len); + } + + /* Swap SPILL block if we have one */ + if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) + byteswap_uint64_array(DN_SPILL_BLKPTR(dnp), sizeof (blkptr_t)); +} + +void +dnode_buf_byteswap(void *vbuf, size_t size) +{ + int i = 0; + + ASSERT3U(sizeof (dnode_phys_t), ==, (1<dn_type != DMU_OT_NONE) + i += dnp->dn_extra_slots * DNODE_MIN_SIZE; + } +} + +void +dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx) +{ + ASSERT3U(refcount_count(&dn->dn_holds), >=, 1); + + dnode_setdirty(dn, tx); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + ASSERT3U(newsize, <=, DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - + (dn->dn_nblkptr-1) * sizeof (blkptr_t)); + dn->dn_bonuslen = newsize; + if (newsize == 0) + dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = DN_ZERO_BONUSLEN; + else + dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = dn->dn_bonuslen; + rw_exit(&dn->dn_struct_rwlock); +} + +void +dnode_setbonus_type(dnode_t *dn, dmu_object_type_t newtype, dmu_tx_t *tx) +{ + ASSERT3U(refcount_count(&dn->dn_holds), >=, 1); + dnode_setdirty(dn, tx); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + dn->dn_bonustype = newtype; + dn->dn_next_bonustype[tx->tx_txg & TXG_MASK] = dn->dn_bonustype; + rw_exit(&dn->dn_struct_rwlock); +} + +void +dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx) +{ + ASSERT3U(refcount_count(&dn->dn_holds), >=, 1); + ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); + dnode_setdirty(dn, tx); + dn->dn_rm_spillblk[tx->tx_txg&TXG_MASK] = DN_KILL_SPILLBLK; + dn->dn_have_spill = B_FALSE; +} + +static void +dnode_setdblksz(dnode_t *dn, int size) +{ + ASSERT0(P2PHASE(size, SPA_MINBLOCKSIZE)); + ASSERT3U(size, <=, SPA_MAXBLOCKSIZE); + ASSERT3U(size, >=, SPA_MINBLOCKSIZE); + ASSERT3U(size >> SPA_MINBLOCKSHIFT, <, + 1<<(sizeof (dn->dn_phys->dn_datablkszsec) * 8)); + dn->dn_datablksz = size; + dn->dn_datablkszsec = size >> SPA_MINBLOCKSHIFT; + dn->dn_datablkshift = ISP2(size) ? highbit64(size - 1) : 0; +} + +static dnode_t * +dnode_create(objset_t *os, dnode_phys_t *dnp, dmu_buf_impl_t *db, + uint64_t object, dnode_handle_t *dnh) +{ + dnode_t *dn; + + dn = kmem_cache_alloc(dnode_cache, KM_SLEEP); + ASSERT(!POINTER_IS_VALID(dn->dn_objset)); + dn->dn_moved = 0; + + /* + * Defer setting dn_objset until the dnode is ready to be a candidate + * for the dnode_move() callback. + */ + dn->dn_object = object; + dn->dn_dbuf = db; + dn->dn_handle = dnh; + dn->dn_phys = dnp; + + if (dnp->dn_datablkszsec) { + dnode_setdblksz(dn, dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT); + } else { + dn->dn_datablksz = 0; + dn->dn_datablkszsec = 0; + dn->dn_datablkshift = 0; + } + dn->dn_indblkshift = dnp->dn_indblkshift; + dn->dn_nlevels = dnp->dn_nlevels; + dn->dn_type = dnp->dn_type; + dn->dn_nblkptr = dnp->dn_nblkptr; + dn->dn_checksum = dnp->dn_checksum; + dn->dn_compress = dnp->dn_compress; + dn->dn_bonustype = dnp->dn_bonustype; + dn->dn_bonuslen = dnp->dn_bonuslen; + dn->dn_num_slots = dnp->dn_extra_slots + 1; + dn->dn_maxblkid = dnp->dn_maxblkid; + dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); + dn->dn_id_flags = 0; + + dmu_zfetch_init(&dn->dn_zfetch, dn); + + ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); + ASSERT(zrl_is_locked(&dnh->dnh_zrlock)); + ASSERT(!DN_SLOT_IS_PTR(dnh->dnh_dnode)); + + mutex_enter(&os->os_lock); + + /* + * Exclude special dnodes from os_dnodes so an empty os_dnodes + * signifies that the special dnodes have no references from + * their children (the entries in os_dnodes). This allows + * dnode_destroy() to easily determine if the last child has + * been removed and then complete eviction of the objset. + */ + if (!DMU_OBJECT_IS_SPECIAL(object)) + list_insert_head(&os->os_dnodes, dn); + membar_producer(); + + /* + * Everything else must be valid before assigning dn_objset + * makes the dnode eligible for dnode_move(). + */ + dn->dn_objset = os; + + dnh->dnh_dnode = dn; + mutex_exit(&os->os_lock); + + arc_space_consume(sizeof (dnode_t), ARC_SPACE_DNODE); + + return (dn); +} + +/* + * Caller must be holding the dnode handle, which is released upon return. + */ +static void +dnode_destroy(dnode_t *dn) +{ + objset_t *os = dn->dn_objset; + boolean_t complete_os_eviction = B_FALSE; + + ASSERT((dn->dn_id_flags & DN_ID_NEW_EXIST) == 0); + + mutex_enter(&os->os_lock); + POINTER_INVALIDATE(&dn->dn_objset); + if (!DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { + list_remove(&os->os_dnodes, dn); + complete_os_eviction = + list_is_empty(&os->os_dnodes) && + list_link_active(&os->os_evicting_node); + } + mutex_exit(&os->os_lock); + + /* the dnode can no longer move, so we can release the handle */ + zrl_remove(&dn->dn_handle->dnh_zrlock); + + dn->dn_allocated_txg = 0; + dn->dn_free_txg = 0; + dn->dn_assigned_txg = 0; + + dn->dn_dirtyctx = 0; + if (dn->dn_dirtyctx_firstset != NULL) { + kmem_free(dn->dn_dirtyctx_firstset, 1); + dn->dn_dirtyctx_firstset = NULL; + } + if (dn->dn_bonus != NULL) { + mutex_enter(&dn->dn_bonus->db_mtx); + dbuf_destroy(dn->dn_bonus); + dn->dn_bonus = NULL; + } + dn->dn_zio = NULL; + + dn->dn_have_spill = B_FALSE; + dn->dn_oldused = 0; + dn->dn_oldflags = 0; + dn->dn_olduid = 0; + dn->dn_oldgid = 0; + dn->dn_newuid = 0; + dn->dn_newgid = 0; + dn->dn_id_flags = 0; + + dmu_zfetch_fini(&dn->dn_zfetch); + kmem_cache_free(dnode_cache, dn); + arc_space_return(sizeof (dnode_t), ARC_SPACE_DNODE); + + if (complete_os_eviction) + dmu_objset_evict_done(os); +} + +void +dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, + dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx) +{ + int i; + + ASSERT3U(dn_slots, >, 0); + ASSERT3U(dn_slots << DNODE_SHIFT, <=, + spa_maxdnodesize(dmu_objset_spa(dn->dn_objset))); + ASSERT3U(blocksize, <=, + spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); + if (blocksize == 0) + blocksize = 1 << zfs_default_bs; + else + blocksize = P2ROUNDUP(blocksize, SPA_MINBLOCKSIZE); + + if (ibs == 0) + ibs = zfs_default_ibs; + + ibs = MIN(MAX(ibs, DN_MIN_INDBLKSHIFT), DN_MAX_INDBLKSHIFT); + + dprintf("os=%p obj=%llu txg=%llu blocksize=%d ibs=%d dn_slots=%d\n", + dn->dn_objset, dn->dn_object, tx->tx_txg, blocksize, ibs, dn_slots); + DNODE_STAT_BUMP(dnode_allocate); + + ASSERT(dn->dn_type == DMU_OT_NONE); + ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); + ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); + ASSERT(ot != DMU_OT_NONE); + ASSERT(DMU_OT_IS_VALID(ot)); + ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || + (bonustype == DMU_OT_SA && bonuslen == 0) || + (bonustype != DMU_OT_NONE && bonuslen != 0)); + ASSERT(DMU_OT_IS_VALID(bonustype)); + ASSERT3U(bonuslen, <=, DN_SLOTS_TO_BONUSLEN(dn_slots)); + ASSERT(dn->dn_type == DMU_OT_NONE); + ASSERT0(dn->dn_maxblkid); + ASSERT0(dn->dn_allocated_txg); + ASSERT0(dn->dn_assigned_txg); + ASSERT(refcount_is_zero(&dn->dn_tx_holds)); + ASSERT3U(refcount_count(&dn->dn_holds), <=, 1); + ASSERT(avl_is_empty(&dn->dn_dbufs)); + + for (i = 0; i < TXG_SIZE; i++) { + ASSERT0(dn->dn_next_nblkptr[i]); + ASSERT0(dn->dn_next_nlevels[i]); + ASSERT0(dn->dn_next_indblkshift[i]); + ASSERT0(dn->dn_next_bonuslen[i]); + ASSERT0(dn->dn_next_bonustype[i]); + ASSERT0(dn->dn_rm_spillblk[i]); + ASSERT0(dn->dn_next_blksz[i]); + ASSERT(!list_link_active(&dn->dn_dirty_link[i])); + ASSERT3P(list_head(&dn->dn_dirty_records[i]), ==, NULL); + ASSERT3P(dn->dn_free_ranges[i], ==, NULL); + } + + dn->dn_type = ot; + dnode_setdblksz(dn, blocksize); + dn->dn_indblkshift = ibs; + dn->dn_nlevels = 1; + dn->dn_num_slots = dn_slots; + if (bonustype == DMU_OT_SA) /* Maximize bonus space for SA */ + dn->dn_nblkptr = 1; + else { + dn->dn_nblkptr = MIN(DN_MAX_NBLKPTR, + 1 + ((DN_SLOTS_TO_BONUSLEN(dn_slots) - bonuslen) >> + SPA_BLKPTRSHIFT)); + } + + dn->dn_bonustype = bonustype; + dn->dn_bonuslen = bonuslen; + dn->dn_checksum = ZIO_CHECKSUM_INHERIT; + dn->dn_compress = ZIO_COMPRESS_INHERIT; + dn->dn_dirtyctx = 0; + + dn->dn_free_txg = 0; + if (dn->dn_dirtyctx_firstset) { + kmem_free(dn->dn_dirtyctx_firstset, 1); + dn->dn_dirtyctx_firstset = NULL; + } + + dn->dn_allocated_txg = tx->tx_txg; + dn->dn_id_flags = 0; + + dnode_setdirty(dn, tx); + dn->dn_next_indblkshift[tx->tx_txg & TXG_MASK] = ibs; + dn->dn_next_bonuslen[tx->tx_txg & TXG_MASK] = dn->dn_bonuslen; + dn->dn_next_bonustype[tx->tx_txg & TXG_MASK] = dn->dn_bonustype; + dn->dn_next_blksz[tx->tx_txg & TXG_MASK] = dn->dn_datablksz; +} + +void +dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, + dmu_object_type_t bonustype, int bonuslen, int dn_slots, dmu_tx_t *tx) +{ + int nblkptr; + + ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); + ASSERT3U(blocksize, <=, + spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); + ASSERT0(blocksize % SPA_MINBLOCKSIZE); + ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); + ASSERT(tx->tx_txg != 0); + ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || + (bonustype != DMU_OT_NONE && bonuslen != 0) || + (bonustype == DMU_OT_SA && bonuslen == 0)); + ASSERT(DMU_OT_IS_VALID(bonustype)); + ASSERT3U(bonuslen, <=, + DN_BONUS_SIZE(spa_maxdnodesize(dmu_objset_spa(dn->dn_objset)))); + + dn_slots = dn_slots > 0 ? dn_slots : DNODE_MIN_SLOTS; + DNODE_STAT_BUMP(dnode_reallocate); + + /* clean up any unreferenced dbufs */ + dnode_evict_dbufs(dn); + + dn->dn_id_flags = 0; + + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + dnode_setdirty(dn, tx); + if (dn->dn_datablksz != blocksize) { + /* change blocksize */ + ASSERT(dn->dn_maxblkid == 0 && + (BP_IS_HOLE(&dn->dn_phys->dn_blkptr[0]) || + dnode_block_freed(dn, 0))); + dnode_setdblksz(dn, blocksize); + dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = blocksize; + } + if (dn->dn_bonuslen != bonuslen) + dn->dn_next_bonuslen[tx->tx_txg&TXG_MASK] = bonuslen; + + if (bonustype == DMU_OT_SA) /* Maximize bonus space for SA */ + nblkptr = 1; + else + nblkptr = MIN(DN_MAX_NBLKPTR, + 1 + ((DN_SLOTS_TO_BONUSLEN(dn_slots) - bonuslen) >> + SPA_BLKPTRSHIFT)); + if (dn->dn_bonustype != bonustype) + dn->dn_next_bonustype[tx->tx_txg&TXG_MASK] = bonustype; + if (dn->dn_nblkptr != nblkptr) + dn->dn_next_nblkptr[tx->tx_txg&TXG_MASK] = nblkptr; + if (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR) { + dbuf_rm_spill(dn, tx); + dnode_rm_spill(dn, tx); + } + rw_exit(&dn->dn_struct_rwlock); + + /* change type */ + dn->dn_type = ot; + + /* change bonus size and type */ + mutex_enter(&dn->dn_mtx); + dn->dn_bonustype = bonustype; + dn->dn_bonuslen = bonuslen; + dn->dn_num_slots = dn_slots; + dn->dn_nblkptr = nblkptr; + dn->dn_checksum = ZIO_CHECKSUM_INHERIT; + dn->dn_compress = ZIO_COMPRESS_INHERIT; + ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); + + /* fix up the bonus db_size */ + if (dn->dn_bonus) { + dn->dn_bonus->db.db_size = + DN_SLOTS_TO_BONUSLEN(dn->dn_num_slots) - + (dn->dn_nblkptr-1) * sizeof (blkptr_t); + ASSERT(dn->dn_bonuslen <= dn->dn_bonus->db.db_size); + } + + dn->dn_allocated_txg = tx->tx_txg; + mutex_exit(&dn->dn_mtx); +} + +#ifdef _KERNEL +static void +dnode_move_impl(dnode_t *odn, dnode_t *ndn) +{ + int i; + + ASSERT(!RW_LOCK_HELD(&odn->dn_struct_rwlock)); + ASSERT(MUTEX_NOT_HELD(&odn->dn_mtx)); + ASSERT(MUTEX_NOT_HELD(&odn->dn_dbufs_mtx)); + ASSERT(!RW_LOCK_HELD(&odn->dn_zfetch.zf_rwlock)); + + /* Copy fields. */ + ndn->dn_objset = odn->dn_objset; + ndn->dn_object = odn->dn_object; + ndn->dn_dbuf = odn->dn_dbuf; + ndn->dn_handle = odn->dn_handle; + ndn->dn_phys = odn->dn_phys; + ndn->dn_type = odn->dn_type; + ndn->dn_bonuslen = odn->dn_bonuslen; + ndn->dn_bonustype = odn->dn_bonustype; + ndn->dn_nblkptr = odn->dn_nblkptr; + ndn->dn_checksum = odn->dn_checksum; + ndn->dn_compress = odn->dn_compress; + ndn->dn_nlevels = odn->dn_nlevels; + ndn->dn_indblkshift = odn->dn_indblkshift; + ndn->dn_datablkshift = odn->dn_datablkshift; + ndn->dn_datablkszsec = odn->dn_datablkszsec; + ndn->dn_datablksz = odn->dn_datablksz; + ndn->dn_maxblkid = odn->dn_maxblkid; + ndn->dn_num_slots = odn->dn_num_slots; + bcopy(&odn->dn_next_nblkptr[0], &ndn->dn_next_nblkptr[0], + sizeof (odn->dn_next_nblkptr)); + bcopy(&odn->dn_next_nlevels[0], &ndn->dn_next_nlevels[0], + sizeof (odn->dn_next_nlevels)); + bcopy(&odn->dn_next_indblkshift[0], &ndn->dn_next_indblkshift[0], + sizeof (odn->dn_next_indblkshift)); + bcopy(&odn->dn_next_bonustype[0], &ndn->dn_next_bonustype[0], + sizeof (odn->dn_next_bonustype)); + bcopy(&odn->dn_rm_spillblk[0], &ndn->dn_rm_spillblk[0], + sizeof (odn->dn_rm_spillblk)); + bcopy(&odn->dn_next_bonuslen[0], &ndn->dn_next_bonuslen[0], + sizeof (odn->dn_next_bonuslen)); + bcopy(&odn->dn_next_blksz[0], &ndn->dn_next_blksz[0], + sizeof (odn->dn_next_blksz)); + for (i = 0; i < TXG_SIZE; i++) { + list_move_tail(&ndn->dn_dirty_records[i], + &odn->dn_dirty_records[i]); + } + bcopy(&odn->dn_free_ranges[0], &ndn->dn_free_ranges[0], + sizeof (odn->dn_free_ranges)); + ndn->dn_allocated_txg = odn->dn_allocated_txg; + ndn->dn_free_txg = odn->dn_free_txg; + ndn->dn_assigned_txg = odn->dn_assigned_txg; + ndn->dn_dirtyctx = odn->dn_dirtyctx; + ndn->dn_dirtyctx_firstset = odn->dn_dirtyctx_firstset; + ASSERT(refcount_count(&odn->dn_tx_holds) == 0); + refcount_transfer(&ndn->dn_holds, &odn->dn_holds); + ASSERT(avl_is_empty(&ndn->dn_dbufs)); + avl_swap(&ndn->dn_dbufs, &odn->dn_dbufs); + ndn->dn_dbufs_count = odn->dn_dbufs_count; + ndn->dn_bonus = odn->dn_bonus; + ndn->dn_have_spill = odn->dn_have_spill; + ndn->dn_zio = odn->dn_zio; + ndn->dn_oldused = odn->dn_oldused; + ndn->dn_oldflags = odn->dn_oldflags; + ndn->dn_olduid = odn->dn_olduid; + ndn->dn_oldgid = odn->dn_oldgid; + ndn->dn_newuid = odn->dn_newuid; + ndn->dn_newgid = odn->dn_newgid; + ndn->dn_id_flags = odn->dn_id_flags; + dmu_zfetch_init(&ndn->dn_zfetch, NULL); + list_move_tail(&ndn->dn_zfetch.zf_stream, &odn->dn_zfetch.zf_stream); + ndn->dn_zfetch.zf_dnode = odn->dn_zfetch.zf_dnode; + + /* + * Update back pointers. Updating the handle fixes the back pointer of + * every descendant dbuf as well as the bonus dbuf. + */ + ASSERT(ndn->dn_handle->dnh_dnode == odn); + ndn->dn_handle->dnh_dnode = ndn; + if (ndn->dn_zfetch.zf_dnode == odn) { + ndn->dn_zfetch.zf_dnode = ndn; + } + + /* + * Invalidate the original dnode by clearing all of its back pointers. + */ + odn->dn_dbuf = NULL; + odn->dn_handle = NULL; + avl_create(&odn->dn_dbufs, dbuf_compare, sizeof (dmu_buf_impl_t), + offsetof(dmu_buf_impl_t, db_link)); + odn->dn_dbufs_count = 0; + odn->dn_bonus = NULL; + odn->dn_zfetch.zf_dnode = NULL; + + /* + * Set the low bit of the objset pointer to ensure that dnode_move() + * recognizes the dnode as invalid in any subsequent callback. + */ + POINTER_INVALIDATE(&odn->dn_objset); + + /* + * Satisfy the destructor. + */ + for (i = 0; i < TXG_SIZE; i++) { + list_create(&odn->dn_dirty_records[i], + sizeof (dbuf_dirty_record_t), + offsetof(dbuf_dirty_record_t, dr_dirty_node)); + odn->dn_free_ranges[i] = NULL; + odn->dn_next_nlevels[i] = 0; + odn->dn_next_indblkshift[i] = 0; + odn->dn_next_bonustype[i] = 0; + odn->dn_rm_spillblk[i] = 0; + odn->dn_next_bonuslen[i] = 0; + odn->dn_next_blksz[i] = 0; + } + odn->dn_allocated_txg = 0; + odn->dn_free_txg = 0; + odn->dn_assigned_txg = 0; + odn->dn_dirtyctx = 0; + odn->dn_dirtyctx_firstset = NULL; + odn->dn_have_spill = B_FALSE; + odn->dn_zio = NULL; + odn->dn_oldused = 0; + odn->dn_oldflags = 0; + odn->dn_olduid = 0; + odn->dn_oldgid = 0; + odn->dn_newuid = 0; + odn->dn_newgid = 0; + odn->dn_id_flags = 0; + + /* + * Mark the dnode. + */ + ndn->dn_moved = 1; + odn->dn_moved = (uint8_t)-1; +} + +/*ARGSUSED*/ +static kmem_cbrc_t +dnode_move(void *buf, void *newbuf, size_t size, void *arg) +{ + dnode_t *odn = buf, *ndn = newbuf; + objset_t *os; + int64_t refcount; + uint32_t dbufs; + + /* + * The dnode is on the objset's list of known dnodes if the objset + * pointer is valid. We set the low bit of the objset pointer when + * freeing the dnode to invalidate it, and the memory patterns written + * by kmem (baddcafe and deadbeef) set at least one of the two low bits. + * A newly created dnode sets the objset pointer last of all to indicate + * that the dnode is known and in a valid state to be moved by this + * function. + */ + os = odn->dn_objset; + if (!POINTER_IS_VALID(os)) { + DNODE_STAT_BUMP(dnode_move_invalid); + return (KMEM_CBRC_DONT_KNOW); + } + + /* + * Ensure that the objset does not go away during the move. + */ + rw_enter(&os_lock, RW_WRITER); + if (os != odn->dn_objset) { + rw_exit(&os_lock); + DNODE_STAT_BUMP(dnode_move_recheck1); + return (KMEM_CBRC_DONT_KNOW); + } + + /* + * If the dnode is still valid, then so is the objset. We know that no + * valid objset can be freed while we hold os_lock, so we can safely + * ensure that the objset remains in use. + */ + mutex_enter(&os->os_lock); + + /* + * Recheck the objset pointer in case the dnode was removed just before + * acquiring the lock. + */ + if (os != odn->dn_objset) { + mutex_exit(&os->os_lock); + rw_exit(&os_lock); + DNODE_STAT_BUMP(dnode_move_recheck2); + return (KMEM_CBRC_DONT_KNOW); + } + + /* + * At this point we know that as long as we hold os->os_lock, the dnode + * cannot be freed and fields within the dnode can be safely accessed. + * The objset listing this dnode cannot go away as long as this dnode is + * on its list. + */ + rw_exit(&os_lock); + if (DMU_OBJECT_IS_SPECIAL(odn->dn_object)) { + mutex_exit(&os->os_lock); + DNODE_STAT_BUMP(dnode_move_special); + return (KMEM_CBRC_NO); + } + ASSERT(odn->dn_dbuf != NULL); /* only "special" dnodes have no parent */ + + /* + * Lock the dnode handle to prevent the dnode from obtaining any new + * holds. This also prevents the descendant dbufs and the bonus dbuf + * from accessing the dnode, so that we can discount their holds. The + * handle is safe to access because we know that while the dnode cannot + * go away, neither can its handle. Once we hold dnh_zrlock, we can + * safely move any dnode referenced only by dbufs. + */ + if (!zrl_tryenter(&odn->dn_handle->dnh_zrlock)) { + mutex_exit(&os->os_lock); + DNODE_STAT_BUMP(dnode_move_handle); + return (KMEM_CBRC_LATER); + } + + /* + * Ensure a consistent view of the dnode's holds and the dnode's dbufs. + * We need to guarantee that there is a hold for every dbuf in order to + * determine whether the dnode is actively referenced. Falsely matching + * a dbuf to an active hold would lead to an unsafe move. It's possible + * that a thread already having an active dnode hold is about to add a + * dbuf, and we can't compare hold and dbuf counts while the add is in + * progress. + */ + if (!rw_tryenter(&odn->dn_struct_rwlock, RW_WRITER)) { + zrl_exit(&odn->dn_handle->dnh_zrlock); + mutex_exit(&os->os_lock); + DNODE_STAT_BUMP(dnode_move_rwlock); + return (KMEM_CBRC_LATER); + } + + /* + * A dbuf may be removed (evicted) without an active dnode hold. In that + * case, the dbuf count is decremented under the handle lock before the + * dbuf's hold is released. This order ensures that if we count the hold + * after the dbuf is removed but before its hold is released, we will + * treat the unmatched hold as active and exit safely. If we count the + * hold before the dbuf is removed, the hold is discounted, and the + * removal is blocked until the move completes. + */ + refcount = refcount_count(&odn->dn_holds); + ASSERT(refcount >= 0); + dbufs = odn->dn_dbufs_count; + + /* We can't have more dbufs than dnode holds. */ + ASSERT3U(dbufs, <=, refcount); + DTRACE_PROBE3(dnode__move, dnode_t *, odn, int64_t, refcount, + uint32_t, dbufs); + + if (refcount > dbufs) { + rw_exit(&odn->dn_struct_rwlock); + zrl_exit(&odn->dn_handle->dnh_zrlock); + mutex_exit(&os->os_lock); + DNODE_STAT_BUMP(dnode_move_active); + return (KMEM_CBRC_LATER); + } + + rw_exit(&odn->dn_struct_rwlock); + + /* + * At this point we know that anyone with a hold on the dnode is not + * actively referencing it. The dnode is known and in a valid state to + * move. We're holding the locks needed to execute the critical section. + */ + dnode_move_impl(odn, ndn); + + list_link_replace(&odn->dn_link, &ndn->dn_link); + /* If the dnode was safe to move, the refcount cannot have changed. */ + ASSERT(refcount == refcount_count(&ndn->dn_holds)); + ASSERT(dbufs == ndn->dn_dbufs_count); + zrl_exit(&ndn->dn_handle->dnh_zrlock); /* handle has moved */ + mutex_exit(&os->os_lock); + + return (KMEM_CBRC_YES); +} +#endif /* _KERNEL */ + +static void +dnode_slots_hold(dnode_children_t *children, int idx, int slots) +{ + ASSERT3S(idx + slots, <=, DNODES_PER_BLOCK); + + for (int i = idx; i < idx + slots; i++) { + dnode_handle_t *dnh = &children->dnc_children[i]; + zrl_add(&dnh->dnh_zrlock); + } +} + +static void +dnode_slots_rele(dnode_children_t *children, int idx, int slots) +{ + ASSERT3S(idx + slots, <=, DNODES_PER_BLOCK); + + for (int i = idx; i < idx + slots; i++) { + dnode_handle_t *dnh = &children->dnc_children[i]; + + if (zrl_is_locked(&dnh->dnh_zrlock)) + zrl_exit(&dnh->dnh_zrlock); + else + zrl_remove(&dnh->dnh_zrlock); + } +} + +static int +dnode_slots_tryenter(dnode_children_t *children, int idx, int slots) +{ + ASSERT3S(idx + slots, <=, DNODES_PER_BLOCK); + + for (int i = idx; i < idx + slots; i++) { + dnode_handle_t *dnh = &children->dnc_children[i]; + + if (!zrl_tryenter(&dnh->dnh_zrlock)) { + for (int j = idx; j < i; j++) { + dnh = &children->dnc_children[j]; + zrl_exit(&dnh->dnh_zrlock); + } + + return (0); + } + } + + return (1); +} + +static void +dnode_set_slots(dnode_children_t *children, int idx, int slots, void *ptr) +{ + ASSERT3S(idx + slots, <=, DNODES_PER_BLOCK); + + for (int i = idx; i < idx + slots; i++) { + dnode_handle_t *dnh = &children->dnc_children[i]; + dnh->dnh_dnode = ptr; + } +} + +static boolean_t +dnode_check_slots(dnode_children_t *children, int idx, int slots, void *ptr) +{ + ASSERT3S(idx + slots, <=, DNODES_PER_BLOCK); + + for (int i = idx; i < idx + slots; i++) { + dnode_handle_t *dnh = &children->dnc_children[i]; + if (dnh->dnh_dnode != ptr) + return (B_FALSE); + } + + return (B_TRUE); +} + +void +dnode_special_close(dnode_handle_t *dnh) +{ + dnode_t *dn = dnh->dnh_dnode; + + /* + * Wait for final references to the dnode to clear. This can + * only happen if the arc is asynchronously evicting state that + * has a hold on this dnode while we are trying to evict this + * dnode. + */ + while (refcount_count(&dn->dn_holds) > 0) + delay(1); + ASSERT(dn->dn_dbuf == NULL || + dmu_buf_get_user(&dn->dn_dbuf->db) == NULL); + zrl_add(&dnh->dnh_zrlock); + dnode_destroy(dn); /* implicit zrl_remove() */ + zrl_destroy(&dnh->dnh_zrlock); + dnh->dnh_dnode = NULL; +} + +void +dnode_special_open(objset_t *os, dnode_phys_t *dnp, uint64_t object, + dnode_handle_t *dnh) +{ + dnode_t *dn; + + zrl_init(&dnh->dnh_zrlock); + zrl_tryenter(&dnh->dnh_zrlock); + + dn = dnode_create(os, dnp, NULL, object, dnh); + DNODE_VERIFY(dn); + + zrl_exit(&dnh->dnh_zrlock); +} + +static void +dnode_buf_evict_async(void *dbu) +{ + dnode_children_t *dnc = dbu; + + DNODE_STAT_BUMP(dnode_buf_evict); + + for (int i = 0; i < dnc->dnc_count; i++) { + dnode_handle_t *dnh = &dnc->dnc_children[i]; + dnode_t *dn; + + /* + * The dnode handle lock guards against the dnode moving to + * another valid address, so there is no need here to guard + * against changes to or from NULL. + */ + if (!DN_SLOT_IS_PTR(dnh->dnh_dnode)) { + zrl_destroy(&dnh->dnh_zrlock); + dnh->dnh_dnode = DN_SLOT_UNINIT; + continue; + } + + zrl_add(&dnh->dnh_zrlock); + dn = dnh->dnh_dnode; + /* + * If there are holds on this dnode, then there should + * be holds on the dnode's containing dbuf as well; thus + * it wouldn't be eligible for eviction and this function + * would not have been called. + */ + ASSERT(refcount_is_zero(&dn->dn_holds)); + ASSERT(refcount_is_zero(&dn->dn_tx_holds)); + + dnode_destroy(dn); /* implicit zrl_remove() for first slot */ + zrl_destroy(&dnh->dnh_zrlock); + dnh->dnh_dnode = DN_SLOT_UNINIT; + } + kmem_free(dnc, sizeof (dnode_children_t) + + dnc->dnc_count * sizeof (dnode_handle_t)); +} + +/* + * errors: + * EINVAL - Invalid object number or flags. + * ENOSPC - Hole too small to fulfill "slots" request (DNODE_MUST_BE_FREE) + * EEXIST - Refers to an allocated dnode (DNODE_MUST_BE_FREE) + * - Refers to an interior dnode slot (DNODE_MUST_BE_ALLOCATED) + * ENOENT - The requested dnode is not allocated (DNODE_MUST_BE_ALLOCATED) + * EIO - I/O error when reading the meta dnode dbuf. + * + * succeeds even for free dnodes. + */ +int +dnode_hold_impl(objset_t *os, uint64_t object, int flag, int slots, + void *tag, dnode_t **dnp) +{ + int epb, idx, err; + int drop_struct_lock = FALSE; + int type; + uint64_t blk; + dnode_t *mdn, *dn; + dmu_buf_impl_t *db; + dnode_children_t *dnc; + dnode_phys_t *dn_block; + dnode_handle_t *dnh; + + ASSERT(!(flag & DNODE_MUST_BE_ALLOCATED) || (slots == 0)); + ASSERT(!(flag & DNODE_MUST_BE_FREE) || (slots > 0)); + + /* + * If you are holding the spa config lock as writer, you shouldn't + * be asking the DMU to do *anything* unless it's the root pool + * which may require us to read from the root filesystem while + * holding some (not all) of the locks as writer. + */ + ASSERT(spa_config_held(os->os_spa, SCL_ALL, RW_WRITER) == 0 || + (spa_is_root(os->os_spa) && + spa_config_held(os->os_spa, SCL_STATE, RW_WRITER))); + + if (object == DMU_USERUSED_OBJECT || object == DMU_GROUPUSED_OBJECT) { + dn = (object == DMU_USERUSED_OBJECT) ? + DMU_USERUSED_DNODE(os) : DMU_GROUPUSED_DNODE(os); + if (dn == NULL) + return (SET_ERROR(ENOENT)); + type = dn->dn_type; + if ((flag & DNODE_MUST_BE_ALLOCATED) && type == DMU_OT_NONE) + return (SET_ERROR(ENOENT)); + if ((flag & DNODE_MUST_BE_FREE) && type != DMU_OT_NONE) + return (SET_ERROR(EEXIST)); + DNODE_VERIFY(dn); + (void) refcount_add(&dn->dn_holds, tag); + *dnp = dn; + return (0); + } + + if (object == 0 || object >= DN_MAX_OBJECT) + return (SET_ERROR(EINVAL)); + + mdn = DMU_META_DNODE(os); + ASSERT(mdn->dn_object == DMU_META_DNODE_OBJECT); + + DNODE_VERIFY(mdn); + + if (!RW_WRITE_HELD(&mdn->dn_struct_rwlock)) { + rw_enter(&mdn->dn_struct_rwlock, RW_READER); + drop_struct_lock = TRUE; + } + + blk = dbuf_whichblock(mdn, 0, object * sizeof (dnode_phys_t)); + + db = dbuf_hold(mdn, blk, FTAG); + if (drop_struct_lock) + rw_exit(&mdn->dn_struct_rwlock); + if (db == NULL) { + DNODE_STAT_BUMP(dnode_hold_dbuf_hold); + return (SET_ERROR(EIO)); + } + err = dbuf_read(db, NULL, DB_RF_CANFAIL); + if (err) { + DNODE_STAT_BUMP(dnode_hold_dbuf_read); + dbuf_rele(db, FTAG); + return (err); + } + + ASSERT3U(db->db.db_size, >=, 1<db.db_size >> DNODE_SHIFT; + + idx = object & (epb - 1); + dn_block = (dnode_phys_t *)db->db.db_data; + + ASSERT(DB_DNODE(db)->dn_type == DMU_OT_DNODE); + dnc = dmu_buf_get_user(&db->db); + dnh = NULL; + if (dnc == NULL) { + dnode_children_t *winner; + int skip = 0; + + dnc = kmem_zalloc(sizeof (dnode_children_t) + + epb * sizeof (dnode_handle_t), KM_SLEEP); + dnc->dnc_count = epb; + dnh = &dnc->dnc_children[0]; + + /* Initialize dnode slot status from dnode_phys_t */ + for (int i = 0; i < epb; i++) { + zrl_init(&dnh[i].dnh_zrlock); + + if (skip) { + skip--; + continue; + } + + if (dn_block[i].dn_type != DMU_OT_NONE) { + int interior = dn_block[i].dn_extra_slots; + + dnode_set_slots(dnc, i, 1, DN_SLOT_ALLOCATED); + dnode_set_slots(dnc, i + 1, interior, + DN_SLOT_INTERIOR); + skip = interior; + } else { + dnh[i].dnh_dnode = DN_SLOT_FREE; + skip = 0; + } + } + + dmu_buf_init_user(&dnc->dnc_dbu, NULL, + dnode_buf_evict_async, NULL); + winner = dmu_buf_set_user(&db->db, &dnc->dnc_dbu); + if (winner != NULL) { + + for (int i = 0; i < epb; i++) + zrl_destroy(&dnh[i].dnh_zrlock); + + kmem_free(dnc, sizeof (dnode_children_t) + + epb * sizeof (dnode_handle_t)); + dnc = winner; + } + } + + ASSERT(dnc->dnc_count == epb); + dn = DN_SLOT_UNINIT; + + if (flag & DNODE_MUST_BE_ALLOCATED) { + slots = 1; + + while (dn == DN_SLOT_UNINIT) { + dnode_slots_hold(dnc, idx, slots); + dnh = &dnc->dnc_children[idx]; + + if (DN_SLOT_IS_PTR(dnh->dnh_dnode)) { + dn = dnh->dnh_dnode; + break; + } else if (dnh->dnh_dnode == DN_SLOT_INTERIOR) { + DNODE_STAT_BUMP(dnode_hold_alloc_interior); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(EEXIST)); + } else if (dnh->dnh_dnode != DN_SLOT_ALLOCATED) { + DNODE_STAT_BUMP(dnode_hold_alloc_misses); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(ENOENT)); + } + + dnode_slots_rele(dnc, idx, slots); + if (!dnode_slots_tryenter(dnc, idx, slots)) { + DNODE_STAT_BUMP(dnode_hold_alloc_lock_retry); + continue; + } + + /* + * Someone else won the race and called dnode_create() + * after we checked DN_SLOT_IS_PTR() above but before + * we acquired the lock. + */ + if (DN_SLOT_IS_PTR(dnh->dnh_dnode)) { + DNODE_STAT_BUMP(dnode_hold_alloc_lock_misses); + dn = dnh->dnh_dnode; + } else { + dn = dnode_create(os, dn_block + idx, db, + object, dnh); + } + } + + mutex_enter(&dn->dn_mtx); + if (dn->dn_type == DMU_OT_NONE) { + DNODE_STAT_BUMP(dnode_hold_alloc_type_none); + mutex_exit(&dn->dn_mtx); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(ENOENT)); + } + + DNODE_STAT_BUMP(dnode_hold_alloc_hits); + } else if (flag & DNODE_MUST_BE_FREE) { + + if (idx + slots - 1 >= DNODES_PER_BLOCK) { + DNODE_STAT_BUMP(dnode_hold_free_overflow); + dbuf_rele(db, FTAG); + return (SET_ERROR(ENOSPC)); + } + + while (dn == DN_SLOT_UNINIT) { + dnode_slots_hold(dnc, idx, slots); + + if (!dnode_check_slots(dnc, idx, slots, DN_SLOT_FREE)) { + DNODE_STAT_BUMP(dnode_hold_free_misses); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(ENOSPC)); + } + + dnode_slots_rele(dnc, idx, slots); + if (!dnode_slots_tryenter(dnc, idx, slots)) { + DNODE_STAT_BUMP(dnode_hold_free_lock_retry); + continue; + } + + if (!dnode_check_slots(dnc, idx, slots, DN_SLOT_FREE)) { + DNODE_STAT_BUMP(dnode_hold_free_lock_misses); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(ENOSPC)); + } + + dnh = &dnc->dnc_children[idx]; + dn = dnode_create(os, dn_block + idx, db, object, dnh); + } + + mutex_enter(&dn->dn_mtx); + if (!refcount_is_zero(&dn->dn_holds)) { + DNODE_STAT_BUMP(dnode_hold_free_refcount); + mutex_exit(&dn->dn_mtx); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (SET_ERROR(EEXIST)); + } + + dnode_set_slots(dnc, idx + 1, slots - 1, DN_SLOT_INTERIOR); + DNODE_STAT_BUMP(dnode_hold_free_hits); + } else { + dbuf_rele(db, FTAG); + return (SET_ERROR(EINVAL)); + } + + if (dn->dn_free_txg) { + DNODE_STAT_BUMP(dnode_hold_free_txg); + type = dn->dn_type; + mutex_exit(&dn->dn_mtx); + dnode_slots_rele(dnc, idx, slots); + dbuf_rele(db, FTAG); + return (type == DMU_OT_NONE ? ENOENT : EEXIST); + } + + if (refcount_add(&dn->dn_holds, tag) == 1) + dbuf_add_ref(db, dnh); + + mutex_exit(&dn->dn_mtx); + + /* Now we can rely on the hold to prevent the dnode from moving. */ + dnode_slots_rele(dnc, idx, slots); + + DNODE_VERIFY(dn); + ASSERT3P(dn->dn_dbuf, ==, db); + ASSERT3U(dn->dn_object, ==, object); + dbuf_rele(db, FTAG); + + *dnp = dn; + return (0); +} + +/* + * Return held dnode if the object is allocated, NULL if not. + */ +int +dnode_hold(objset_t *os, uint64_t object, void *tag, dnode_t **dnp) +{ + return (dnode_hold_impl(os, object, DNODE_MUST_BE_ALLOCATED, 0, tag, + dnp)); +} + +/* + * Can only add a reference if there is already at least one + * reference on the dnode. Returns FALSE if unable to add a + * new reference. + */ +boolean_t +dnode_add_ref(dnode_t *dn, void *tag) +{ + mutex_enter(&dn->dn_mtx); + if (refcount_is_zero(&dn->dn_holds)) { + mutex_exit(&dn->dn_mtx); + return (FALSE); + } + VERIFY(1 < refcount_add(&dn->dn_holds, tag)); + mutex_exit(&dn->dn_mtx); + return (TRUE); +} + +void +dnode_rele(dnode_t *dn, void *tag) +{ + mutex_enter(&dn->dn_mtx); + dnode_rele_and_unlock(dn, tag); +} + +void +dnode_rele_and_unlock(dnode_t *dn, void *tag) +{ + uint64_t refs; + /* Get while the hold prevents the dnode from moving. */ + dmu_buf_impl_t *db = dn->dn_dbuf; + dnode_handle_t *dnh = dn->dn_handle; + + refs = refcount_remove(&dn->dn_holds, tag); + mutex_exit(&dn->dn_mtx); + + /* + * It's unsafe to release the last hold on a dnode by dnode_rele() or + * indirectly by dbuf_rele() while relying on the dnode handle to + * prevent the dnode from moving, since releasing the last hold could + * result in the dnode's parent dbuf evicting its dnode handles. For + * that reason anyone calling dnode_rele() or dbuf_rele() without some + * other direct or indirect hold on the dnode must first drop the dnode + * handle. + */ + ASSERT(refs > 0 || dnh->dnh_zrlock.zr_owner != curthread); + + /* NOTE: the DNODE_DNODE does not have a dn_dbuf */ + if (refs == 0 && db != NULL) { + /* + * Another thread could add a hold to the dnode handle in + * dnode_hold_impl() while holding the parent dbuf. Since the + * hold on the parent dbuf prevents the handle from being + * destroyed, the hold on the handle is OK. We can't yet assert + * that the handle has zero references, but that will be + * asserted anyway when the handle gets destroyed. + */ + dbuf_rele(db, dnh); + } +} + +void +dnode_setdirty(dnode_t *dn, dmu_tx_t *tx) +{ + objset_t *os = dn->dn_objset; + uint64_t txg = tx->tx_txg; + + if (DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { + dsl_dataset_dirty(os->os_dsl_dataset, tx); + return; + } + + DNODE_VERIFY(dn); + +#ifdef ZFS_DEBUG + mutex_enter(&dn->dn_mtx); + ASSERT(dn->dn_phys->dn_type || dn->dn_allocated_txg); + ASSERT(dn->dn_free_txg == 0 || dn->dn_free_txg >= txg); + mutex_exit(&dn->dn_mtx); +#endif + + /* + * Determine old uid/gid when necessary + */ + dmu_objset_userquota_get_ids(dn, B_TRUE, tx); + + multilist_t *dirtylist = os->os_dirty_dnodes[txg & TXG_MASK]; + multilist_sublist_t *mls = multilist_sublist_lock_obj(dirtylist, dn); + + /* + * If we are already marked dirty, we're done. + */ + if (list_link_active(&dn->dn_dirty_link[txg & TXG_MASK])) { + multilist_sublist_unlock(mls); + return; + } + + ASSERT(!refcount_is_zero(&dn->dn_holds) || + !avl_is_empty(&dn->dn_dbufs)); + ASSERT(dn->dn_datablksz != 0); + ASSERT0(dn->dn_next_bonuslen[txg&TXG_MASK]); + ASSERT0(dn->dn_next_blksz[txg&TXG_MASK]); + ASSERT0(dn->dn_next_bonustype[txg&TXG_MASK]); + + dprintf_ds(os->os_dsl_dataset, "obj=%llu txg=%llu\n", + dn->dn_object, txg); + + multilist_sublist_insert_head(mls, dn); + + multilist_sublist_unlock(mls); + + /* + * The dnode maintains a hold on its containing dbuf as + * long as there are holds on it. Each instantiated child + * dbuf maintains a hold on the dnode. When the last child + * drops its hold, the dnode will drop its hold on the + * containing dbuf. We add a "dirty hold" here so that the + * dnode will hang around after we finish processing its + * children. + */ + VERIFY(dnode_add_ref(dn, (void *)(uintptr_t)tx->tx_txg)); + + (void) dbuf_dirty(dn->dn_dbuf, tx); + + dsl_dataset_dirty(os->os_dsl_dataset, tx); +} + +void +dnode_free(dnode_t *dn, dmu_tx_t *tx) +{ + mutex_enter(&dn->dn_mtx); + if (dn->dn_type == DMU_OT_NONE || dn->dn_free_txg) { + mutex_exit(&dn->dn_mtx); + return; + } + dn->dn_free_txg = tx->tx_txg; + mutex_exit(&dn->dn_mtx); + + dnode_setdirty(dn, tx); +} + +/* + * Try to change the block size for the indicated dnode. This can only + * succeed if there are no blocks allocated or dirty beyond first block + */ +int +dnode_set_blksz(dnode_t *dn, uint64_t size, int ibs, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db; + int err; + + ASSERT3U(size, <=, spa_maxblocksize(dmu_objset_spa(dn->dn_objset))); + if (size == 0) + size = SPA_MINBLOCKSIZE; + else + size = P2ROUNDUP(size, SPA_MINBLOCKSIZE); + + if (ibs == dn->dn_indblkshift) + ibs = 0; + + if (size >> SPA_MINBLOCKSHIFT == dn->dn_datablkszsec && ibs == 0) + return (0); + + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + + /* Check for any allocated blocks beyond the first */ + if (dn->dn_maxblkid != 0) + goto fail; + + mutex_enter(&dn->dn_dbufs_mtx); + for (db = avl_first(&dn->dn_dbufs); db != NULL; + db = AVL_NEXT(&dn->dn_dbufs, db)) { + if (db->db_blkid != 0 && db->db_blkid != DMU_BONUS_BLKID && + db->db_blkid != DMU_SPILL_BLKID) { + mutex_exit(&dn->dn_dbufs_mtx); + goto fail; + } + } + mutex_exit(&dn->dn_dbufs_mtx); + + if (ibs && dn->dn_nlevels != 1) + goto fail; + + /* resize the old block */ + err = dbuf_hold_impl(dn, 0, 0, TRUE, FALSE, FTAG, &db); + if (err == 0) + dbuf_new_size(db, size, tx); + else if (err != ENOENT) + goto fail; + + dnode_setdblksz(dn, size); + dnode_setdirty(dn, tx); + dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = size; + if (ibs) { + dn->dn_indblkshift = ibs; + dn->dn_next_indblkshift[tx->tx_txg&TXG_MASK] = ibs; + } + /* rele after we have fixed the blocksize in the dnode */ + if (db) + dbuf_rele(db, FTAG); + + rw_exit(&dn->dn_struct_rwlock); + return (0); + +fail: + rw_exit(&dn->dn_struct_rwlock); + return (SET_ERROR(ENOTSUP)); +} + +/* read-holding callers must not rely on the lock being continuously held */ +void +dnode_new_blkid(dnode_t *dn, uint64_t blkid, dmu_tx_t *tx, boolean_t have_read) +{ + uint64_t txgoff = tx->tx_txg & TXG_MASK; + int epbs, new_nlevels; + uint64_t sz; + + ASSERT(blkid != DMU_BONUS_BLKID); + + ASSERT(have_read ? + RW_READ_HELD(&dn->dn_struct_rwlock) : + RW_WRITE_HELD(&dn->dn_struct_rwlock)); + + /* + * if we have a read-lock, check to see if we need to do any work + * before upgrading to a write-lock. + */ + if (have_read) { + if (blkid <= dn->dn_maxblkid) + return; + + if (!rw_tryupgrade(&dn->dn_struct_rwlock)) { + rw_exit(&dn->dn_struct_rwlock); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + } + } + + if (blkid <= dn->dn_maxblkid) + goto out; + + dn->dn_maxblkid = blkid; + + /* + * Compute the number of levels necessary to support the new maxblkid. + */ + new_nlevels = 1; + epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + for (sz = dn->dn_nblkptr; + sz <= blkid && sz >= dn->dn_nblkptr; sz <<= epbs) + new_nlevels++; + + ASSERT3U(new_nlevels, <=, DN_MAX_LEVELS); + + if (new_nlevels > dn->dn_nlevels) { + int old_nlevels = dn->dn_nlevels; + dmu_buf_impl_t *db; + list_t *list; + dbuf_dirty_record_t *new, *dr, *dr_next; + + dn->dn_nlevels = new_nlevels; + + ASSERT3U(new_nlevels, >, dn->dn_next_nlevels[txgoff]); + dn->dn_next_nlevels[txgoff] = new_nlevels; + + /* dirty the left indirects */ + db = dbuf_hold_level(dn, old_nlevels, 0, FTAG); + ASSERT(db != NULL); + new = dbuf_dirty(db, tx); + dbuf_rele(db, FTAG); + + /* transfer the dirty records to the new indirect */ + mutex_enter(&dn->dn_mtx); + mutex_enter(&new->dt.di.dr_mtx); + list = &dn->dn_dirty_records[txgoff]; + for (dr = list_head(list); dr; dr = dr_next) { + dr_next = list_next(&dn->dn_dirty_records[txgoff], dr); + if (dr->dr_dbuf->db_level != new_nlevels-1 && + dr->dr_dbuf->db_blkid != DMU_BONUS_BLKID && + dr->dr_dbuf->db_blkid != DMU_SPILL_BLKID) { + ASSERT(dr->dr_dbuf->db_level == old_nlevels-1); + list_remove(&dn->dn_dirty_records[txgoff], dr); + list_insert_tail(&new->dt.di.dr_children, dr); + dr->dr_parent = new; + } + } + mutex_exit(&new->dt.di.dr_mtx); + mutex_exit(&dn->dn_mtx); + } + +out: + if (have_read) + rw_downgrade(&dn->dn_struct_rwlock); +} + +static void +dnode_dirty_l1(dnode_t *dn, uint64_t l1blkid, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db = dbuf_hold_level(dn, 1, l1blkid, FTAG); + if (db != NULL) { + dmu_buf_will_dirty(&db->db, tx); + dbuf_rele(db, FTAG); + } +} + +void +dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db; + uint64_t blkoff, blkid, nblks; + int blksz, blkshift, head, tail; + int trunc = FALSE; + int epbs; + + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + blksz = dn->dn_datablksz; + blkshift = dn->dn_datablkshift; + epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT; + + if (len == DMU_OBJECT_END) { + len = UINT64_MAX - off; + trunc = TRUE; + } + + /* + * First, block align the region to free: + */ + if (ISP2(blksz)) { + head = P2NPHASE(off, blksz); + blkoff = P2PHASE(off, blksz); + if ((off >> blkshift) > dn->dn_maxblkid) + goto out; + } else { + ASSERT(dn->dn_maxblkid == 0); + if (off == 0 && len >= blksz) { + /* + * Freeing the whole block; fast-track this request. + * Note that we won't dirty any indirect blocks, + * which is fine because we will be freeing the entire + * file and thus all indirect blocks will be freed + * by free_children(). + */ + blkid = 0; + nblks = 1; + goto done; + } else if (off >= blksz) { + /* Freeing past end-of-data */ + goto out; + } else { + /* Freeing part of the block. */ + head = blksz - off; + ASSERT3U(head, >, 0); + } + blkoff = off; + } + /* zero out any partial block data at the start of the range */ + if (head) { + ASSERT3U(blkoff + head, ==, blksz); + if (len < head) + head = len; + if (dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off), + TRUE, FALSE, FTAG, &db) == 0) { + caddr_t data; + + /* don't dirty if it isn't on disk and isn't dirty */ + if (db->db_last_dirty || + (db->db_blkptr && !BP_IS_HOLE(db->db_blkptr))) { + rw_exit(&dn->dn_struct_rwlock); + dmu_buf_will_dirty(&db->db, tx); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + data = db->db.db_data; + bzero(data + blkoff, head); + } + dbuf_rele(db, FTAG); + } + off += head; + len -= head; + } + + /* If the range was less than one block, we're done */ + if (len == 0) + goto out; + + /* If the remaining range is past end of file, we're done */ + if ((off >> blkshift) > dn->dn_maxblkid) + goto out; + + ASSERT(ISP2(blksz)); + if (trunc) + tail = 0; + else + tail = P2PHASE(len, blksz); + + ASSERT0(P2PHASE(off, blksz)); + /* zero out any partial block data at the end of the range */ + if (tail) { + if (len < tail) + tail = len; + if (dbuf_hold_impl(dn, 0, dbuf_whichblock(dn, 0, off+len), + TRUE, FALSE, FTAG, &db) == 0) { + /* don't dirty if not on disk and not dirty */ + if (db->db_last_dirty || + (db->db_blkptr && !BP_IS_HOLE(db->db_blkptr))) { + rw_exit(&dn->dn_struct_rwlock); + dmu_buf_will_dirty(&db->db, tx); + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + bzero(db->db.db_data, tail); + } + dbuf_rele(db, FTAG); + } + len -= tail; + } + + /* If the range did not include a full block, we are done */ + if (len == 0) + goto out; + + ASSERT(IS_P2ALIGNED(off, blksz)); + ASSERT(trunc || IS_P2ALIGNED(len, blksz)); + blkid = off >> blkshift; + nblks = len >> blkshift; + if (trunc) + nblks += 1; + + /* + * Dirty all the indirect blocks in this range. Note that only + * the first and last indirect blocks can actually be written + * (if they were partially freed) -- they must be dirtied, even if + * they do not exist on disk yet. The interior blocks will + * be freed by free_children(), so they will not actually be written. + * Even though these interior blocks will not be written, we + * dirty them for two reasons: + * + * - It ensures that the indirect blocks remain in memory until + * syncing context. (They have already been prefetched by + * dmu_tx_hold_free(), so we don't have to worry about reading + * them serially here.) + * + * - The dirty space accounting will put pressure on the txg sync + * mechanism to begin syncing, and to delay transactions if there + * is a large amount of freeing. Even though these indirect + * blocks will not be written, we could need to write the same + * amount of space if we copy the freed BPs into deadlists. + */ + if (dn->dn_nlevels > 1) { + uint64_t first, last, i, ibyte; + int shift, err; + + first = blkid >> epbs; + dnode_dirty_l1(dn, first, tx); + if (trunc) + last = dn->dn_maxblkid >> epbs; + else + last = (blkid + nblks - 1) >> epbs; + if (last != first) + dnode_dirty_l1(dn, last, tx); + + shift = dn->dn_datablkshift + dn->dn_indblkshift - + SPA_BLKPTRSHIFT; + for (i = first + 1; i < last; i++) { + /* + * Set i to the blockid of the next non-hole + * level-1 indirect block at or after i. Note + * that dnode_next_offset() operates in terms of + * level-0-equivalent bytes. + */ + ibyte = i << shift; + err = dnode_next_offset(dn, DNODE_FIND_HAVELOCK, + &ibyte, 2, 1, 0); + i = ibyte >> shift; + if (i >= last) + break; + + /* + * Normally we should not see an error, either + * from dnode_next_offset() or dbuf_hold_level() + * (except for ESRCH from dnode_next_offset). + * If there is an i/o error, then when we read + * this block in syncing context, it will use + * ZIO_FLAG_MUSTSUCCEED, and thus hang/panic according + * to the "failmode" property. dnode_next_offset() + * doesn't have a flag to indicate MUSTSUCCEED. + */ + if (err != 0) + break; + + dnode_dirty_l1(dn, i, tx); + } + } + +done: + /* + * Add this range to the dnode range list. + * We will finish up this free operation in the syncing phase. + */ + mutex_enter(&dn->dn_mtx); + { + int txgoff = tx->tx_txg & TXG_MASK; + if (dn->dn_free_ranges[txgoff] == NULL) { + dn->dn_free_ranges[txgoff] = + range_tree_create(NULL, NULL, &dn->dn_mtx); + } + range_tree_clear(dn->dn_free_ranges[txgoff], blkid, nblks); + range_tree_add(dn->dn_free_ranges[txgoff], blkid, nblks); + } + dprintf_dnode(dn, "blkid=%llu nblks=%llu txg=%llu\n", + blkid, nblks, tx->tx_txg); + mutex_exit(&dn->dn_mtx); + + dbuf_free_range(dn, blkid, blkid + nblks - 1, tx); + dnode_setdirty(dn, tx); +out: + + rw_exit(&dn->dn_struct_rwlock); +} + +static boolean_t +dnode_spill_freed(dnode_t *dn) +{ + int i; + + mutex_enter(&dn->dn_mtx); + for (i = 0; i < TXG_SIZE; i++) { + if (dn->dn_rm_spillblk[i] == DN_KILL_SPILLBLK) + break; + } + mutex_exit(&dn->dn_mtx); + return (i < TXG_SIZE); +} + +/* return TRUE if this blkid was freed in a recent txg, or FALSE if it wasn't */ +uint64_t +dnode_block_freed(dnode_t *dn, uint64_t blkid) +{ + void *dp = spa_get_dsl(dn->dn_objset->os_spa); + int i; + + if (blkid == DMU_BONUS_BLKID) + return (FALSE); + + /* + * If we're in the process of opening the pool, dp will not be + * set yet, but there shouldn't be anything dirty. + */ + if (dp == NULL) + return (FALSE); + + if (dn->dn_free_txg) + return (TRUE); + + if (blkid == DMU_SPILL_BLKID) + return (dnode_spill_freed(dn)); + + mutex_enter(&dn->dn_mtx); + for (i = 0; i < TXG_SIZE; i++) { + if (dn->dn_free_ranges[i] != NULL && + range_tree_contains(dn->dn_free_ranges[i], blkid, 1)) + break; + } + mutex_exit(&dn->dn_mtx); + return (i < TXG_SIZE); +} + +/* call from syncing context when we actually write/free space for this dnode */ +void +dnode_diduse_space(dnode_t *dn, int64_t delta) +{ + uint64_t space; + dprintf_dnode(dn, "dn=%p dnp=%p used=%llu delta=%lld\n", + dn, dn->dn_phys, + (u_longlong_t)dn->dn_phys->dn_used, + (longlong_t)delta); + + mutex_enter(&dn->dn_mtx); + space = DN_USED_BYTES(dn->dn_phys); + if (delta > 0) { + ASSERT3U(space + delta, >=, space); /* no overflow */ + } else { + ASSERT3U(space, >=, -delta); /* no underflow */ + } + space += delta; + if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_DNODE_BYTES) { + ASSERT((dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) == 0); + ASSERT0(P2PHASE(space, 1<dn_phys->dn_used = space >> DEV_BSHIFT; + } else { + dn->dn_phys->dn_used = space; + dn->dn_phys->dn_flags |= DNODE_FLAG_USED_BYTES; + } + mutex_exit(&dn->dn_mtx); +} + +/* + * Scans a block at the indicated "level" looking for a hole or data, + * depending on 'flags'. + * + * If level > 0, then we are scanning an indirect block looking at its + * pointers. If level == 0, then we are looking at a block of dnodes. + * + * If we don't find what we are looking for in the block, we return ESRCH. + * Otherwise, return with *offset pointing to the beginning (if searching + * forwards) or end (if searching backwards) of the range covered by the + * block pointer we matched on (or dnode). + * + * The basic search algorithm used below by dnode_next_offset() is to + * use this function to search up the block tree (widen the search) until + * we find something (i.e., we don't return ESRCH) and then search back + * down the tree (narrow the search) until we reach our original search + * level. + */ +static int +dnode_next_offset_level(dnode_t *dn, int flags, uint64_t *offset, + int lvl, uint64_t blkfill, uint64_t txg) +{ + dmu_buf_impl_t *db = NULL; + void *data = NULL; + uint64_t epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + uint64_t epb = 1ULL << epbs; + uint64_t minfill, maxfill; + boolean_t hole; + int i, inc, error, span; + + hole = ((flags & DNODE_FIND_HOLE) != 0); + inc = (flags & DNODE_FIND_BACKWARDS) ? -1 : 1; + ASSERT(txg == 0 || !hole); + + if (lvl == dn->dn_phys->dn_nlevels) { + error = 0; + epb = dn->dn_phys->dn_nblkptr; + data = dn->dn_phys->dn_blkptr; + } else { + uint64_t blkid = dbuf_whichblock(dn, lvl, *offset); + error = dbuf_hold_impl(dn, lvl, blkid, TRUE, FALSE, FTAG, &db); + if (error) { + if (error != ENOENT) + return (error); + if (hole) + return (0); + /* + * This can only happen when we are searching up + * the block tree for data. We don't really need to + * adjust the offset, as we will just end up looking + * at the pointer to this block in its parent, and its + * going to be unallocated, so we will skip over it. + */ + return (SET_ERROR(ESRCH)); + } + error = dbuf_read(db, NULL, DB_RF_CANFAIL | DB_RF_HAVESTRUCT); + if (error) { + dbuf_rele(db, FTAG); + return (error); + } + data = db->db.db_data; + } + + + if (db != NULL && txg != 0 && (db->db_blkptr == NULL || + db->db_blkptr->blk_birth <= txg || + BP_IS_HOLE(db->db_blkptr))) { + /* + * This can only happen when we are searching up the tree + * and these conditions mean that we need to keep climbing. + */ + error = SET_ERROR(ESRCH); + } else if (lvl == 0) { + dnode_phys_t *dnp = data; + + ASSERT(dn->dn_type == DMU_OT_DNODE); + ASSERT(!(flags & DNODE_FIND_BACKWARDS)); + + for (i = (*offset >> DNODE_SHIFT) & (blkfill - 1); + i < blkfill; i += dnp[i].dn_extra_slots + 1) { + if ((dnp[i].dn_type == DMU_OT_NONE) == hole) + break; + } + + if (i == blkfill) + error = SET_ERROR(ESRCH); + + *offset = (*offset & ~(DNODE_BLOCK_SIZE - 1)) + + (i << DNODE_SHIFT); + } else { + blkptr_t *bp = data; + uint64_t start = *offset; + span = (lvl - 1) * epbs + dn->dn_datablkshift; + minfill = 0; + maxfill = blkfill << ((lvl - 1) * epbs); + + if (hole) + maxfill--; + else + minfill++; + + if (span >= 8 * sizeof (*offset)) { + /* This only happens on the highest indirection level */ + ASSERT3U((lvl - 1), ==, dn->dn_phys->dn_nlevels - 1); + *offset = 0; + } else { + *offset = *offset >> span; + } + + for (i = BF64_GET(*offset, 0, epbs); + i >= 0 && i < epb; i += inc) { + if (BP_GET_FILL(&bp[i]) >= minfill && + BP_GET_FILL(&bp[i]) <= maxfill && + (hole || bp[i].blk_birth > txg)) + break; + if (inc > 0 || *offset > 0) + *offset += inc; + } + + if (span >= 8 * sizeof (*offset)) { + *offset = start; + } else { + *offset = *offset << span; + } + + if (inc < 0) { + /* traversing backwards; position offset at the end */ + ASSERT3U(*offset, <=, start); + *offset = MIN(*offset + (1ULL << span) - 1, start); + } else if (*offset < start) { + *offset = start; + } + if (i < 0 || i >= epb) + error = SET_ERROR(ESRCH); + } + + if (db) + dbuf_rele(db, FTAG); + + return (error); +} + +/* + * Find the next hole, data, or sparse region at or after *offset. + * The value 'blkfill' tells us how many items we expect to find + * in an L0 data block; this value is 1 for normal objects, + * DNODES_PER_BLOCK for the meta dnode, and some fraction of + * DNODES_PER_BLOCK when searching for sparse regions thereof. + * + * Examples: + * + * dnode_next_offset(dn, flags, offset, 1, 1, 0); + * Finds the next/previous hole/data in a file. + * Used in dmu_offset_next(). + * + * dnode_next_offset(mdn, flags, offset, 0, DNODES_PER_BLOCK, txg); + * Finds the next free/allocated dnode an objset's meta-dnode. + * Only finds objects that have new contents since txg (ie. + * bonus buffer changes and content removal are ignored). + * Used in dmu_object_next(). + * + * dnode_next_offset(mdn, DNODE_FIND_HOLE, offset, 2, DNODES_PER_BLOCK >> 2, 0); + * Finds the next L2 meta-dnode bp that's at most 1/4 full. + * Used in dmu_object_alloc(). + */ +int +dnode_next_offset(dnode_t *dn, int flags, uint64_t *offset, + int minlvl, uint64_t blkfill, uint64_t txg) +{ + uint64_t initial_offset = *offset; + int lvl, maxlvl; + int error = 0; + + if (!(flags & DNODE_FIND_HAVELOCK)) + rw_enter(&dn->dn_struct_rwlock, RW_READER); + + if (dn->dn_phys->dn_nlevels == 0) { + error = SET_ERROR(ESRCH); + goto out; + } + + if (dn->dn_datablkshift == 0) { + if (*offset < dn->dn_datablksz) { + if (flags & DNODE_FIND_HOLE) + *offset = dn->dn_datablksz; + } else { + error = SET_ERROR(ESRCH); + } + goto out; + } + + maxlvl = dn->dn_phys->dn_nlevels; + + for (lvl = minlvl; lvl <= maxlvl; lvl++) { + error = dnode_next_offset_level(dn, + flags, offset, lvl, blkfill, txg); + if (error != ESRCH) + break; + } + + while (error == 0 && --lvl >= minlvl) { + error = dnode_next_offset_level(dn, + flags, offset, lvl, blkfill, txg); + } + + /* + * There's always a "virtual hole" at the end of the object, even + * if all BP's which physically exist are non-holes. + */ + if ((flags & DNODE_FIND_HOLE) && error == ESRCH && txg == 0 && + minlvl == 1 && blkfill == 1 && !(flags & DNODE_FIND_BACKWARDS)) { + error = 0; + } + + if (error == 0 && (flags & DNODE_FIND_BACKWARDS ? + initial_offset < *offset : initial_offset > *offset)) + error = SET_ERROR(ESRCH); +out: + if (!(flags & DNODE_FIND_HAVELOCK)) + rw_exit(&dn->dn_struct_rwlock); + + return (error); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dnode_sync.c +++ linux-aws-4.15.0/zfs/module/zfs/dnode_sync.c @@ -0,0 +1,757 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void +dnode_increase_indirection(dnode_t *dn, dmu_tx_t *tx) +{ + dmu_buf_impl_t *db; + int txgoff = tx->tx_txg & TXG_MASK; + int nblkptr = dn->dn_phys->dn_nblkptr; + int old_toplvl = dn->dn_phys->dn_nlevels - 1; + int new_level = dn->dn_next_nlevels[txgoff]; + int i; + + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + + /* this dnode can't be paged out because it's dirty */ + ASSERT(dn->dn_phys->dn_type != DMU_OT_NONE); + ASSERT(RW_WRITE_HELD(&dn->dn_struct_rwlock)); + ASSERT(new_level > 1 && dn->dn_phys->dn_nlevels > 0); + + db = dbuf_hold_level(dn, dn->dn_phys->dn_nlevels, 0, FTAG); + ASSERT(db != NULL); + + dn->dn_phys->dn_nlevels = new_level; + dprintf("os=%p obj=%llu, increase to %d\n", dn->dn_objset, + dn->dn_object, dn->dn_phys->dn_nlevels); + + /* transfer dnode's block pointers to new indirect block */ + (void) dbuf_read(db, NULL, DB_RF_MUST_SUCCEED|DB_RF_HAVESTRUCT); + ASSERT(db->db.db_data); + ASSERT(arc_released(db->db_buf)); + ASSERT3U(sizeof (blkptr_t) * nblkptr, <=, db->db.db_size); + bcopy(dn->dn_phys->dn_blkptr, db->db.db_data, + sizeof (blkptr_t) * nblkptr); + arc_buf_freeze(db->db_buf); + + /* set dbuf's parent pointers to new indirect buf */ + for (i = 0; i < nblkptr; i++) { + dmu_buf_impl_t *child = + dbuf_find(dn->dn_objset, dn->dn_object, old_toplvl, i); + + if (child == NULL) + continue; +#ifdef DEBUG + DB_DNODE_ENTER(child); + ASSERT3P(DB_DNODE(child), ==, dn); + DB_DNODE_EXIT(child); +#endif /* DEBUG */ + if (child->db_parent && child->db_parent != dn->dn_dbuf) { + ASSERT(child->db_parent->db_level == db->db_level); + ASSERT(child->db_blkptr != + &dn->dn_phys->dn_blkptr[child->db_blkid]); + mutex_exit(&child->db_mtx); + continue; + } + ASSERT(child->db_parent == NULL || + child->db_parent == dn->dn_dbuf); + + child->db_parent = db; + dbuf_add_ref(db, child); + if (db->db.db_data) + child->db_blkptr = (blkptr_t *)db->db.db_data + i; + else + child->db_blkptr = NULL; + dprintf_dbuf_bp(child, child->db_blkptr, + "changed db_blkptr to new indirect %s", ""); + + mutex_exit(&child->db_mtx); + } + + bzero(dn->dn_phys->dn_blkptr, sizeof (blkptr_t) * nblkptr); + + dbuf_rele(db, FTAG); + + rw_exit(&dn->dn_struct_rwlock); +} + +static void +free_blocks(dnode_t *dn, blkptr_t *bp, int num, dmu_tx_t *tx) +{ + dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset; + uint64_t bytesfreed = 0; + int i; + + dprintf("ds=%p obj=%llx num=%d\n", ds, dn->dn_object, num); + + for (i = 0; i < num; i++, bp++) { + uint64_t lsize, lvl; + dmu_object_type_t type; + + if (BP_IS_HOLE(bp)) + continue; + + bytesfreed += dsl_dataset_block_kill(ds, bp, tx, B_FALSE); + ASSERT3U(bytesfreed, <=, DN_USED_BYTES(dn->dn_phys)); + + /* + * Save some useful information on the holes being + * punched, including logical size, type, and indirection + * level. Retaining birth time enables detection of when + * holes are punched for reducing the number of free + * records transmitted during a zfs send. + */ + + lsize = BP_GET_LSIZE(bp); + type = BP_GET_TYPE(bp); + lvl = BP_GET_LEVEL(bp); + + bzero(bp, sizeof (blkptr_t)); + + if (spa_feature_is_active(dn->dn_objset->os_spa, + SPA_FEATURE_HOLE_BIRTH)) { + BP_SET_LSIZE(bp, lsize); + BP_SET_TYPE(bp, type); + BP_SET_LEVEL(bp, lvl); + BP_SET_BIRTH(bp, dmu_tx_get_txg(tx), 0); + } + } + dnode_diduse_space(dn, -bytesfreed); +} + +#ifdef ZFS_DEBUG +static void +free_verify(dmu_buf_impl_t *db, uint64_t start, uint64_t end, dmu_tx_t *tx) +{ + int off, num; + int i, err, epbs; + uint64_t txg = tx->tx_txg; + dnode_t *dn; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + off = start - (db->db_blkid * 1<=, 0); + ASSERT3U(num, >=, 0); + ASSERT3U(db->db_level, >, 0); + ASSERT3U(db->db.db_size, ==, 1 << dn->dn_phys->dn_indblkshift); + ASSERT3U(off+num, <=, db->db.db_size >> SPA_BLKPTRSHIFT); + ASSERT(db->db_blkptr != NULL); + + for (i = off; i < off+num; i++) { + uint64_t *buf; + dmu_buf_impl_t *child; + dbuf_dirty_record_t *dr; + int j; + + ASSERT(db->db_level == 1); + + rw_enter(&dn->dn_struct_rwlock, RW_READER); + err = dbuf_hold_impl(dn, db->db_level-1, + (db->db_blkid << epbs) + i, TRUE, FALSE, FTAG, &child); + rw_exit(&dn->dn_struct_rwlock); + if (err == ENOENT) + continue; + ASSERT(err == 0); + ASSERT(child->db_level == 0); + dr = child->db_last_dirty; + while (dr && dr->dr_txg > txg) + dr = dr->dr_next; + ASSERT(dr == NULL || dr->dr_txg == txg); + + /* data_old better be zeroed */ + if (dr) { + buf = dr->dt.dl.dr_data->b_data; + for (j = 0; j < child->db.db_size >> 3; j++) { + if (buf[j] != 0) { + panic("freed data not zero: " + "child=%p i=%d off=%d num=%d\n", + (void *)child, i, off, num); + } + } + } + + /* + * db_data better be zeroed unless it's dirty in a + * future txg. + */ + mutex_enter(&child->db_mtx); + buf = child->db.db_data; + if (buf != NULL && child->db_state != DB_FILL && + child->db_last_dirty == NULL) { + for (j = 0; j < child->db.db_size >> 3; j++) { + if (buf[j] != 0) { + panic("freed data not zero: " + "child=%p i=%d off=%d num=%d\n", + (void *)child, i, off, num); + } + } + } + mutex_exit(&child->db_mtx); + + dbuf_rele(child, FTAG); + } + DB_DNODE_EXIT(db); +} +#endif + +static void +free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, + dmu_tx_t *tx) +{ + dnode_t *dn; + blkptr_t *bp; + dmu_buf_impl_t *subdb; + uint64_t start, end, dbstart, dbend; + unsigned int epbs, shift, i; + uint64_t id; + + /* + * There is a small possibility that this block will not be cached: + * 1 - if level > 1 and there are no children with level <= 1 + * 2 - if this block was evicted since we read it from + * dmu_tx_hold_free(). + */ + if (db->db_state != DB_CACHED) + (void) dbuf_read(db, NULL, DB_RF_MUST_SUCCEED); + + dbuf_release_bp(db); + bp = db->db.db_data; + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + epbs = dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT; + ASSERT3U(epbs, <, 31); + shift = (db->db_level - 1) * epbs; + dbstart = db->db_blkid << epbs; + start = blkid >> shift; + if (dbstart < start) { + bp += start - dbstart; + } else { + start = dbstart; + } + dbend = ((db->db_blkid + 1) << epbs) - 1; + end = (blkid + nblks - 1) >> shift; + if (dbend <= end) + end = dbend; + + ASSERT3U(start, <=, end); + + if (db->db_level == 1) { + FREE_VERIFY(db, start, end, tx); + free_blocks(dn, bp, end-start+1, tx); + } else { + for (id = start; id <= end; id++, bp++) { + if (BP_IS_HOLE(bp)) + continue; + rw_enter(&dn->dn_struct_rwlock, RW_READER); + VERIFY0(dbuf_hold_impl(dn, db->db_level - 1, + id, TRUE, FALSE, FTAG, &subdb)); + rw_exit(&dn->dn_struct_rwlock); + ASSERT3P(bp, ==, subdb->db_blkptr); + + free_children(subdb, blkid, nblks, tx); + dbuf_rele(subdb, FTAG); + } + } + + /* If this whole block is free, free ourself too. */ + for (i = 0, bp = db->db.db_data; i < 1ULL << epbs; i++, bp++) { + if (!BP_IS_HOLE(bp)) + break; + } + if (i == 1 << epbs) { + /* + * We only found holes. Grab the rwlock to prevent + * anybody from reading the blocks we're about to + * zero out. + */ + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + bzero(db->db.db_data, db->db.db_size); + rw_exit(&dn->dn_struct_rwlock); + free_blocks(dn, db->db_blkptr, 1, tx); + } else { + /* + * Partial block free; must be marked dirty so that it + * will be written out. + */ + ASSERT(db->db_dirtycnt > 0); + } + + DB_DNODE_EXIT(db); + arc_buf_freeze(db->db_buf); +} + +/* + * Traverse the indicated range of the provided file + * and "free" all the blocks contained there. + */ +static void +dnode_sync_free_range_impl(dnode_t *dn, uint64_t blkid, uint64_t nblks, + dmu_tx_t *tx) +{ + blkptr_t *bp = dn->dn_phys->dn_blkptr; + int dnlevel = dn->dn_phys->dn_nlevels; + boolean_t trunc = B_FALSE; + + if (blkid > dn->dn_phys->dn_maxblkid) + return; + + ASSERT(dn->dn_phys->dn_maxblkid < UINT64_MAX); + if (blkid + nblks > dn->dn_phys->dn_maxblkid) { + nblks = dn->dn_phys->dn_maxblkid - blkid + 1; + trunc = B_TRUE; + } + + /* There are no indirect blocks in the object */ + if (dnlevel == 1) { + if (blkid >= dn->dn_phys->dn_nblkptr) { + /* this range was never made persistent */ + return; + } + ASSERT3U(blkid + nblks, <=, dn->dn_phys->dn_nblkptr); + free_blocks(dn, bp + blkid, nblks, tx); + } else { + int shift = (dnlevel - 1) * + (dn->dn_phys->dn_indblkshift - SPA_BLKPTRSHIFT); + int start = blkid >> shift; + int end = (blkid + nblks - 1) >> shift; + dmu_buf_impl_t *db; + int i; + + ASSERT(start < dn->dn_phys->dn_nblkptr); + bp += start; + for (i = start; i <= end; i++, bp++) { + if (BP_IS_HOLE(bp)) + continue; + rw_enter(&dn->dn_struct_rwlock, RW_READER); + VERIFY0(dbuf_hold_impl(dn, dnlevel - 1, i, + TRUE, FALSE, FTAG, &db)); + rw_exit(&dn->dn_struct_rwlock); + + free_children(db, blkid, nblks, tx); + dbuf_rele(db, FTAG); + } + } + + if (trunc) { + ASSERTV(uint64_t off); + dn->dn_phys->dn_maxblkid = blkid == 0 ? 0 : blkid - 1; + + ASSERTV(off = (dn->dn_phys->dn_maxblkid + 1) * + (dn->dn_phys->dn_datablkszsec << SPA_MINBLOCKSHIFT)); + ASSERT(off < dn->dn_phys->dn_maxblkid || + dn->dn_phys->dn_maxblkid == 0 || + dnode_next_offset(dn, 0, &off, 1, 1, 0) != 0); + } +} + +typedef struct dnode_sync_free_range_arg { + dnode_t *dsfra_dnode; + dmu_tx_t *dsfra_tx; +} dnode_sync_free_range_arg_t; + +static void +dnode_sync_free_range(void *arg, uint64_t blkid, uint64_t nblks) +{ + dnode_sync_free_range_arg_t *dsfra = arg; + dnode_t *dn = dsfra->dsfra_dnode; + + mutex_exit(&dn->dn_mtx); + dnode_sync_free_range_impl(dn, blkid, nblks, dsfra->dsfra_tx); + mutex_enter(&dn->dn_mtx); +} + +/* + * Try to kick all the dnode's dbufs out of the cache... + */ +void +dnode_evict_dbufs(dnode_t *dn) +{ + dmu_buf_impl_t *db_marker; + dmu_buf_impl_t *db, *db_next; + + db_marker = kmem_alloc(sizeof (dmu_buf_impl_t), KM_SLEEP); + + mutex_enter(&dn->dn_dbufs_mtx); + for (db = avl_first(&dn->dn_dbufs); db != NULL; db = db_next) { + +#ifdef DEBUG + DB_DNODE_ENTER(db); + ASSERT3P(DB_DNODE(db), ==, dn); + DB_DNODE_EXIT(db); +#endif /* DEBUG */ + + mutex_enter(&db->db_mtx); + if (db->db_state != DB_EVICTING && + refcount_is_zero(&db->db_holds)) { + db_marker->db_level = db->db_level; + db_marker->db_blkid = db->db_blkid; + db_marker->db_state = DB_SEARCH; + avl_insert_here(&dn->dn_dbufs, db_marker, db, + AVL_BEFORE); + + dbuf_destroy(db); + + db_next = AVL_NEXT(&dn->dn_dbufs, db_marker); + avl_remove(&dn->dn_dbufs, db_marker); + } else { + db->db_pending_evict = TRUE; + mutex_exit(&db->db_mtx); + db_next = AVL_NEXT(&dn->dn_dbufs, db); + } + } + mutex_exit(&dn->dn_dbufs_mtx); + + kmem_free(db_marker, sizeof (dmu_buf_impl_t)); + + dnode_evict_bonus(dn); +} + +void +dnode_evict_bonus(dnode_t *dn) +{ + rw_enter(&dn->dn_struct_rwlock, RW_WRITER); + if (dn->dn_bonus != NULL) { + if (refcount_is_zero(&dn->dn_bonus->db_holds)) { + mutex_enter(&dn->dn_bonus->db_mtx); + dbuf_destroy(dn->dn_bonus); + dn->dn_bonus = NULL; + } else { + dn->dn_bonus->db_pending_evict = TRUE; + } + } + rw_exit(&dn->dn_struct_rwlock); +} + +static void +dnode_undirty_dbufs(list_t *list) +{ + dbuf_dirty_record_t *dr; + + while ((dr = list_head(list))) { + dmu_buf_impl_t *db = dr->dr_dbuf; + uint64_t txg = dr->dr_txg; + + if (db->db_level != 0) + dnode_undirty_dbufs(&dr->dt.di.dr_children); + + mutex_enter(&db->db_mtx); + /* XXX - use dbuf_undirty()? */ + list_remove(list, dr); + ASSERT(db->db_last_dirty == dr); + db->db_last_dirty = NULL; + db->db_dirtycnt -= 1; + if (db->db_level == 0) { + ASSERT(db->db_blkid == DMU_BONUS_BLKID || + dr->dt.dl.dr_data == db->db_buf); + dbuf_unoverride(dr); + } else { + mutex_destroy(&dr->dt.di.dr_mtx); + list_destroy(&dr->dt.di.dr_children); + } + kmem_free(dr, sizeof (dbuf_dirty_record_t)); + dbuf_rele_and_unlock(db, (void *)(uintptr_t)txg); + } +} + +static void +dnode_sync_free(dnode_t *dn, dmu_tx_t *tx) +{ + int txgoff = tx->tx_txg & TXG_MASK; + + ASSERT(dmu_tx_is_syncing(tx)); + + /* + * Our contents should have been freed in dnode_sync() by the + * free range record inserted by the caller of dnode_free(). + */ + ASSERT0(DN_USED_BYTES(dn->dn_phys)); + ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr)); + + dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]); + dnode_evict_dbufs(dn); + + /* + * XXX - It would be nice to assert this, but we may still + * have residual holds from async evictions from the arc... + * + * zfs_obj_to_path() also depends on this being + * commented out. + * + * ASSERT3U(refcount_count(&dn->dn_holds), ==, 1); + */ + + /* Undirty next bits */ + dn->dn_next_nlevels[txgoff] = 0; + dn->dn_next_indblkshift[txgoff] = 0; + dn->dn_next_blksz[txgoff] = 0; + + /* ASSERT(blkptrs are zero); */ + ASSERT(dn->dn_phys->dn_type != DMU_OT_NONE); + ASSERT(dn->dn_type != DMU_OT_NONE); + + ASSERT(dn->dn_free_txg > 0); + if (dn->dn_allocated_txg != dn->dn_free_txg) + dmu_buf_will_dirty(&dn->dn_dbuf->db, tx); + bzero(dn->dn_phys, sizeof (dnode_phys_t) * dn->dn_num_slots); + + mutex_enter(&dn->dn_mtx); + dn->dn_type = DMU_OT_NONE; + dn->dn_maxblkid = 0; + dn->dn_allocated_txg = 0; + dn->dn_free_txg = 0; + dn->dn_have_spill = B_FALSE; + mutex_exit(&dn->dn_mtx); + + ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT); + + dnode_rele(dn, (void *)(uintptr_t)tx->tx_txg); + /* + * Now that we've released our hold, the dnode may + * be evicted, so we mustn't access it. + */ +} + +/* + * Write out the dnode's dirty buffers. + */ +void +dnode_sync(dnode_t *dn, dmu_tx_t *tx) +{ + dnode_phys_t *dnp = dn->dn_phys; + int txgoff = tx->tx_txg & TXG_MASK; + list_t *list = &dn->dn_dirty_records[txgoff]; + boolean_t kill_spill = B_FALSE; + boolean_t freeing_dnode; + ASSERTV(static const dnode_phys_t zerodn = { 0 }); + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(dnp->dn_type != DMU_OT_NONE || dn->dn_allocated_txg); + ASSERT(dnp->dn_type != DMU_OT_NONE || + bcmp(dnp, &zerodn, DNODE_MIN_SIZE) == 0); + DNODE_VERIFY(dn); + + ASSERT(dn->dn_dbuf == NULL || arc_released(dn->dn_dbuf->db_buf)); + + if (dmu_objset_userused_enabled(dn->dn_objset) && + !DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { + mutex_enter(&dn->dn_mtx); + dn->dn_oldused = DN_USED_BYTES(dn->dn_phys); + dn->dn_oldflags = dn->dn_phys->dn_flags; + dn->dn_phys->dn_flags |= DNODE_FLAG_USERUSED_ACCOUNTED; + if (dmu_objset_userobjused_enabled(dn->dn_objset)) + dn->dn_phys->dn_flags |= + DNODE_FLAG_USEROBJUSED_ACCOUNTED; + mutex_exit(&dn->dn_mtx); + dmu_objset_userquota_get_ids(dn, B_FALSE, tx); + } else { + /* Once we account for it, we should always account for it. */ + ASSERT(!(dn->dn_phys->dn_flags & + DNODE_FLAG_USERUSED_ACCOUNTED)); + ASSERT(!(dn->dn_phys->dn_flags & + DNODE_FLAG_USEROBJUSED_ACCOUNTED)); + } + + mutex_enter(&dn->dn_mtx); + if (dn->dn_allocated_txg == tx->tx_txg) { + /* The dnode is newly allocated or reallocated */ + if (dnp->dn_type == DMU_OT_NONE) { + /* this is a first alloc, not a realloc */ + dnp->dn_nlevels = 1; + dnp->dn_nblkptr = dn->dn_nblkptr; + } + + dnp->dn_type = dn->dn_type; + dnp->dn_bonustype = dn->dn_bonustype; + dnp->dn_bonuslen = dn->dn_bonuslen; + } + + dnp->dn_extra_slots = dn->dn_num_slots - 1; + + ASSERT(dnp->dn_nlevels > 1 || + BP_IS_HOLE(&dnp->dn_blkptr[0]) || + BP_IS_EMBEDDED(&dnp->dn_blkptr[0]) || + BP_GET_LSIZE(&dnp->dn_blkptr[0]) == + dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT); + ASSERT(dnp->dn_nlevels < 2 || + BP_IS_HOLE(&dnp->dn_blkptr[0]) || + BP_GET_LSIZE(&dnp->dn_blkptr[0]) == 1 << dnp->dn_indblkshift); + + if (dn->dn_next_type[txgoff] != 0) { + dnp->dn_type = dn->dn_type; + dn->dn_next_type[txgoff] = 0; + } + + if (dn->dn_next_blksz[txgoff] != 0) { + ASSERT(P2PHASE(dn->dn_next_blksz[txgoff], + SPA_MINBLOCKSIZE) == 0); + ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[0]) || + dn->dn_maxblkid == 0 || list_head(list) != NULL || + dn->dn_next_blksz[txgoff] >> SPA_MINBLOCKSHIFT == + dnp->dn_datablkszsec || + range_tree_space(dn->dn_free_ranges[txgoff]) != 0); + dnp->dn_datablkszsec = + dn->dn_next_blksz[txgoff] >> SPA_MINBLOCKSHIFT; + dn->dn_next_blksz[txgoff] = 0; + } + + if (dn->dn_next_bonuslen[txgoff] != 0) { + if (dn->dn_next_bonuslen[txgoff] == DN_ZERO_BONUSLEN) + dnp->dn_bonuslen = 0; + else + dnp->dn_bonuslen = dn->dn_next_bonuslen[txgoff]; + ASSERT(dnp->dn_bonuslen <= + DN_SLOTS_TO_BONUSLEN(dnp->dn_extra_slots + 1)); + dn->dn_next_bonuslen[txgoff] = 0; + } + + if (dn->dn_next_bonustype[txgoff] != 0) { + ASSERT(DMU_OT_IS_VALID(dn->dn_next_bonustype[txgoff])); + dnp->dn_bonustype = dn->dn_next_bonustype[txgoff]; + dn->dn_next_bonustype[txgoff] = 0; + } + + freeing_dnode = dn->dn_free_txg > 0 && dn->dn_free_txg <= tx->tx_txg; + + /* + * Remove the spill block if we have been explicitly asked to + * remove it, or if the object is being removed. + */ + if (dn->dn_rm_spillblk[txgoff] || freeing_dnode) { + if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) + kill_spill = B_TRUE; + dn->dn_rm_spillblk[txgoff] = 0; + } + + if (dn->dn_next_indblkshift[txgoff] != 0) { + ASSERT(dnp->dn_nlevels == 1); + dnp->dn_indblkshift = dn->dn_next_indblkshift[txgoff]; + dn->dn_next_indblkshift[txgoff] = 0; + } + + /* + * Just take the live (open-context) values for checksum and compress. + * Strictly speaking it's a future leak, but nothing bad happens if we + * start using the new checksum or compress algorithm a little early. + */ + dnp->dn_checksum = dn->dn_checksum; + dnp->dn_compress = dn->dn_compress; + + mutex_exit(&dn->dn_mtx); + + if (kill_spill) { + free_blocks(dn, DN_SPILL_BLKPTR(dn->dn_phys), 1, tx); + mutex_enter(&dn->dn_mtx); + dnp->dn_flags &= ~DNODE_FLAG_SPILL_BLKPTR; + mutex_exit(&dn->dn_mtx); + } + + /* process all the "freed" ranges in the file */ + if (dn->dn_free_ranges[txgoff] != NULL) { + dnode_sync_free_range_arg_t dsfra; + dsfra.dsfra_dnode = dn; + dsfra.dsfra_tx = tx; + mutex_enter(&dn->dn_mtx); + range_tree_vacate(dn->dn_free_ranges[txgoff], + dnode_sync_free_range, &dsfra); + range_tree_destroy(dn->dn_free_ranges[txgoff]); + dn->dn_free_ranges[txgoff] = NULL; + mutex_exit(&dn->dn_mtx); + } + + if (freeing_dnode) { + dn->dn_objset->os_freed_dnodes++; + dnode_sync_free(dn, tx); + return; + } + + if (dn->dn_num_slots > DNODE_MIN_SLOTS) { + dsl_dataset_t *ds = dn->dn_objset->os_dsl_dataset; + mutex_enter(&ds->ds_lock); + ds->ds_feature_activation_needed[SPA_FEATURE_LARGE_DNODE] = + B_TRUE; + mutex_exit(&ds->ds_lock); + } + + if (dn->dn_next_nlevels[txgoff]) { + dnode_increase_indirection(dn, tx); + dn->dn_next_nlevels[txgoff] = 0; + } + + if (dn->dn_next_nblkptr[txgoff]) { + /* this should only happen on a realloc */ + ASSERT(dn->dn_allocated_txg == tx->tx_txg); + if (dn->dn_next_nblkptr[txgoff] > dnp->dn_nblkptr) { + /* zero the new blkptrs we are gaining */ + bzero(dnp->dn_blkptr + dnp->dn_nblkptr, + sizeof (blkptr_t) * + (dn->dn_next_nblkptr[txgoff] - dnp->dn_nblkptr)); +#ifdef ZFS_DEBUG + } else { + int i; + ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr); + /* the blkptrs we are losing better be unallocated */ + for (i = 0; i < dnp->dn_nblkptr; i++) { + if (i >= dn->dn_next_nblkptr[txgoff]) + ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i])); + } +#endif + } + mutex_enter(&dn->dn_mtx); + dnp->dn_nblkptr = dn->dn_next_nblkptr[txgoff]; + dn->dn_next_nblkptr[txgoff] = 0; + mutex_exit(&dn->dn_mtx); + } + + dbuf_sync_list(list, dn->dn_phys->dn_nlevels - 1, tx); + + if (!DMU_OBJECT_IS_SPECIAL(dn->dn_object)) { + ASSERT3P(list_head(list), ==, NULL); + dnode_rele(dn, (void *)(uintptr_t)tx->tx_txg); + } + + /* + * Although we have dropped our reference to the dnode, it + * can't be evicted until its written, and we haven't yet + * initiated the IO for the dnode's dbuf. + */ +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_bookmark.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_bookmark.c @@ -0,0 +1,466 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int +dsl_bookmark_hold_ds(dsl_pool_t *dp, const char *fullname, + dsl_dataset_t **dsp, void *tag, char **shortnamep) +{ + char buf[ZFS_MAX_DATASET_NAME_LEN]; + char *hashp; + + if (strlen(fullname) >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + hashp = strchr(fullname, '#'); + if (hashp == NULL) + return (SET_ERROR(EINVAL)); + + *shortnamep = hashp + 1; + if (zfs_component_namecheck(*shortnamep, NULL, NULL)) + return (SET_ERROR(EINVAL)); + (void) strlcpy(buf, fullname, hashp - fullname + 1); + return (dsl_dataset_hold(dp, buf, tag, dsp)); +} + +/* + * Returns ESRCH if bookmark is not found. + */ +static int +dsl_dataset_bmark_lookup(dsl_dataset_t *ds, const char *shortname, + zfs_bookmark_phys_t *bmark_phys) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + uint64_t bmark_zapobj = ds->ds_bookmarks; + matchtype_t mt = 0; + int err; + + if (bmark_zapobj == 0) + return (SET_ERROR(ESRCH)); + + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET) + mt = MT_NORMALIZE; + + err = zap_lookup_norm(mos, bmark_zapobj, shortname, sizeof (uint64_t), + sizeof (*bmark_phys) / sizeof (uint64_t), bmark_phys, mt, + NULL, 0, NULL); + + return (err == ENOENT ? ESRCH : err); +} + +/* + * If later_ds is non-NULL, this will return EXDEV if the the specified bookmark + * does not represents an earlier point in later_ds's timeline. + * + * Returns ENOENT if the dataset containing the bookmark does not exist. + * Returns ESRCH if the dataset exists but the bookmark was not found in it. + */ +int +dsl_bookmark_lookup(dsl_pool_t *dp, const char *fullname, + dsl_dataset_t *later_ds, zfs_bookmark_phys_t *bmp) +{ + char *shortname; + dsl_dataset_t *ds; + int error; + + error = dsl_bookmark_hold_ds(dp, fullname, &ds, FTAG, &shortname); + if (error != 0) + return (error); + + error = dsl_dataset_bmark_lookup(ds, shortname, bmp); + if (error == 0 && later_ds != NULL) { + if (!dsl_dataset_is_before(later_ds, ds, bmp->zbm_creation_txg)) + error = SET_ERROR(EXDEV); + } + dsl_dataset_rele(ds, FTAG); + return (error); +} + +typedef struct dsl_bookmark_create_arg { + nvlist_t *dbca_bmarks; + nvlist_t *dbca_errors; +} dsl_bookmark_create_arg_t; + +static int +dsl_bookmark_create_check_impl(dsl_dataset_t *snapds, const char *bookmark_name, + dmu_tx_t *tx) +{ + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *bmark_fs; + char *shortname; + int error; + zfs_bookmark_phys_t bmark_phys; + + if (!snapds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + error = dsl_bookmark_hold_ds(dp, bookmark_name, + &bmark_fs, FTAG, &shortname); + if (error != 0) + return (error); + + if (!dsl_dataset_is_before(bmark_fs, snapds, 0)) { + dsl_dataset_rele(bmark_fs, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = dsl_dataset_bmark_lookup(bmark_fs, shortname, + &bmark_phys); + dsl_dataset_rele(bmark_fs, FTAG); + if (error == 0) + return (SET_ERROR(EEXIST)); + if (error == ESRCH) + return (0); + return (error); +} + +static int +dsl_bookmark_create_check(void *arg, dmu_tx_t *tx) +{ + dsl_bookmark_create_arg_t *dbca = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + int rv = 0; + nvpair_t *pair; + + if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_BOOKMARKS)) + return (SET_ERROR(ENOTSUP)); + + for (pair = nvlist_next_nvpair(dbca->dbca_bmarks, NULL); + pair != NULL; pair = nvlist_next_nvpair(dbca->dbca_bmarks, pair)) { + dsl_dataset_t *snapds; + int error; + + /* note: validity of nvlist checked by ioctl layer */ + error = dsl_dataset_hold(dp, fnvpair_value_string(pair), + FTAG, &snapds); + if (error == 0) { + error = dsl_bookmark_create_check_impl(snapds, + nvpair_name(pair), tx); + dsl_dataset_rele(snapds, FTAG); + } + if (error != 0) { + fnvlist_add_int32(dbca->dbca_errors, + nvpair_name(pair), error); + rv = error; + } + } + + return (rv); +} + +static void +dsl_bookmark_create_sync(void *arg, dmu_tx_t *tx) +{ + dsl_bookmark_create_arg_t *dbca = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + nvpair_t *pair; + + ASSERT(spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_BOOKMARKS)); + + for (pair = nvlist_next_nvpair(dbca->dbca_bmarks, NULL); + pair != NULL; pair = nvlist_next_nvpair(dbca->dbca_bmarks, pair)) { + dsl_dataset_t *snapds, *bmark_fs; + zfs_bookmark_phys_t bmark_phys; + char *shortname; + + VERIFY0(dsl_dataset_hold(dp, fnvpair_value_string(pair), + FTAG, &snapds)); + VERIFY0(dsl_bookmark_hold_ds(dp, nvpair_name(pair), + &bmark_fs, FTAG, &shortname)); + if (bmark_fs->ds_bookmarks == 0) { + bmark_fs->ds_bookmarks = + zap_create_norm(mos, U8_TEXTPREP_TOUPPER, + DMU_OTN_ZAP_METADATA, DMU_OT_NONE, 0, tx); + spa_feature_incr(dp->dp_spa, SPA_FEATURE_BOOKMARKS, tx); + + dsl_dataset_zapify(bmark_fs, tx); + VERIFY0(zap_add(mos, bmark_fs->ds_object, + DS_FIELD_BOOKMARK_NAMES, + sizeof (bmark_fs->ds_bookmarks), 1, + &bmark_fs->ds_bookmarks, tx)); + } + + bmark_phys.zbm_guid = dsl_dataset_phys(snapds)->ds_guid; + bmark_phys.zbm_creation_txg = + dsl_dataset_phys(snapds)->ds_creation_txg; + bmark_phys.zbm_creation_time = + dsl_dataset_phys(snapds)->ds_creation_time; + + VERIFY0(zap_add(mos, bmark_fs->ds_bookmarks, + shortname, sizeof (uint64_t), + sizeof (zfs_bookmark_phys_t) / sizeof (uint64_t), + &bmark_phys, tx)); + + spa_history_log_internal_ds(bmark_fs, "bookmark", tx, + "name=%s creation_txg=%llu target_snap=%llu", + shortname, + (longlong_t)bmark_phys.zbm_creation_txg, + (longlong_t)snapds->ds_object); + + dsl_dataset_rele(bmark_fs, FTAG); + dsl_dataset_rele(snapds, FTAG); + } +} + +/* + * The bookmarks must all be in the same pool. + */ +int +dsl_bookmark_create(nvlist_t *bmarks, nvlist_t *errors) +{ + nvpair_t *pair; + dsl_bookmark_create_arg_t dbca; + + pair = nvlist_next_nvpair(bmarks, NULL); + if (pair == NULL) + return (0); + + dbca.dbca_bmarks = bmarks; + dbca.dbca_errors = errors; + + return (dsl_sync_task(nvpair_name(pair), dsl_bookmark_create_check, + dsl_bookmark_create_sync, &dbca, + fnvlist_num_pairs(bmarks), ZFS_SPACE_CHECK_NORMAL)); +} + +int +dsl_get_bookmarks_impl(dsl_dataset_t *ds, nvlist_t *props, nvlist_t *outnvl) +{ + int err = 0; + zap_cursor_t zc; + zap_attribute_t attr; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + + uint64_t bmark_zapobj = ds->ds_bookmarks; + if (bmark_zapobj == 0) + return (0); + + for (zap_cursor_init(&zc, dp->dp_meta_objset, bmark_zapobj); + zap_cursor_retrieve(&zc, &attr) == 0; + zap_cursor_advance(&zc)) { + nvlist_t *out_props; + char *bmark_name = attr.za_name; + zfs_bookmark_phys_t bmark_phys; + + err = dsl_dataset_bmark_lookup(ds, bmark_name, &bmark_phys); + ASSERT3U(err, !=, ENOENT); + if (err != 0) + break; + + out_props = fnvlist_alloc(); + if (nvlist_exists(props, + zfs_prop_to_name(ZFS_PROP_GUID))) { + dsl_prop_nvlist_add_uint64(out_props, + ZFS_PROP_GUID, bmark_phys.zbm_guid); + } + if (nvlist_exists(props, + zfs_prop_to_name(ZFS_PROP_CREATETXG))) { + dsl_prop_nvlist_add_uint64(out_props, + ZFS_PROP_CREATETXG, bmark_phys.zbm_creation_txg); + } + if (nvlist_exists(props, + zfs_prop_to_name(ZFS_PROP_CREATION))) { + dsl_prop_nvlist_add_uint64(out_props, + ZFS_PROP_CREATION, bmark_phys.zbm_creation_time); + } + + fnvlist_add_nvlist(outnvl, bmark_name, out_props); + fnvlist_free(out_props); + } + zap_cursor_fini(&zc); + return (err); +} + +/* + * Retrieve the bookmarks that exist in the specified dataset, and the + * requested properties of each bookmark. + * + * The "props" nvlist specifies which properties are requested. + * See lzc_get_bookmarks() for the list of valid properties. + */ +int +dsl_get_bookmarks(const char *dsname, nvlist_t *props, nvlist_t *outnvl) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int err; + + err = dsl_pool_hold(dsname, FTAG, &dp); + if (err != 0) + return (err); + err = dsl_dataset_hold(dp, dsname, FTAG, &ds); + if (err != 0) { + dsl_pool_rele(dp, FTAG); + return (err); + } + + err = dsl_get_bookmarks_impl(ds, props, outnvl); + + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (err); +} + +typedef struct dsl_bookmark_destroy_arg { + nvlist_t *dbda_bmarks; + nvlist_t *dbda_success; + nvlist_t *dbda_errors; +} dsl_bookmark_destroy_arg_t; + +static int +dsl_dataset_bookmark_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + uint64_t bmark_zapobj = ds->ds_bookmarks; + matchtype_t mt = 0; + + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET) + mt = MT_NORMALIZE; + + return (zap_remove_norm(mos, bmark_zapobj, name, mt, tx)); +} + +static int +dsl_bookmark_destroy_check(void *arg, dmu_tx_t *tx) +{ + dsl_bookmark_destroy_arg_t *dbda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + int rv = 0; + nvpair_t *pair; + + ASSERT(nvlist_empty(dbda->dbda_success)); + ASSERT(nvlist_empty(dbda->dbda_errors)); + + if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_BOOKMARKS)) + return (0); + + for (pair = nvlist_next_nvpair(dbda->dbda_bmarks, NULL); + pair != NULL; pair = nvlist_next_nvpair(dbda->dbda_bmarks, pair)) { + const char *fullname = nvpair_name(pair); + dsl_dataset_t *ds; + zfs_bookmark_phys_t bm; + int error; + char *shortname; + + error = dsl_bookmark_hold_ds(dp, fullname, &ds, + FTAG, &shortname); + if (error == ENOENT) { + /* ignore it; the bookmark is "already destroyed" */ + continue; + } + if (error == 0) { + error = dsl_dataset_bmark_lookup(ds, shortname, &bm); + dsl_dataset_rele(ds, FTAG); + if (error == ESRCH) { + /* + * ignore it; the bookmark is + * "already destroyed" + */ + continue; + } + } + if (error == 0) { + if (dmu_tx_is_syncing(tx)) { + fnvlist_add_boolean(dbda->dbda_success, + fullname); + } + } else { + fnvlist_add_int32(dbda->dbda_errors, fullname, error); + rv = error; + } + } + return (rv); +} + +static void +dsl_bookmark_destroy_sync(void *arg, dmu_tx_t *tx) +{ + dsl_bookmark_destroy_arg_t *dbda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(dbda->dbda_success, NULL); + pair != NULL; pair = nvlist_next_nvpair(dbda->dbda_success, pair)) { + dsl_dataset_t *ds; + char *shortname; + uint64_t zap_cnt; + + VERIFY0(dsl_bookmark_hold_ds(dp, nvpair_name(pair), + &ds, FTAG, &shortname)); + VERIFY0(dsl_dataset_bookmark_remove(ds, shortname, tx)); + + /* + * If all of this dataset's bookmarks have been destroyed, + * free the zap object and decrement the feature's use count. + */ + VERIFY0(zap_count(mos, ds->ds_bookmarks, + &zap_cnt)); + if (zap_cnt == 0) { + dmu_buf_will_dirty(ds->ds_dbuf, tx); + VERIFY0(zap_destroy(mos, ds->ds_bookmarks, tx)); + ds->ds_bookmarks = 0; + spa_feature_decr(dp->dp_spa, SPA_FEATURE_BOOKMARKS, tx); + VERIFY0(zap_remove(mos, ds->ds_object, + DS_FIELD_BOOKMARK_NAMES, tx)); + } + + spa_history_log_internal_ds(ds, "remove bookmark", tx, + "name=%s", shortname); + + dsl_dataset_rele(ds, FTAG); + } +} + +/* + * The bookmarks must all be in the same pool. + */ +int +dsl_bookmark_destroy(nvlist_t *bmarks, nvlist_t *errors) +{ + int rv; + dsl_bookmark_destroy_arg_t dbda; + nvpair_t *pair = nvlist_next_nvpair(bmarks, NULL); + if (pair == NULL) + return (0); + + dbda.dbda_bmarks = bmarks; + dbda.dbda_errors = errors; + dbda.dbda_success = fnvlist_alloc(); + + rv = dsl_sync_task(nvpair_name(pair), dsl_bookmark_destroy_check, + dsl_bookmark_destroy_sync, &dbda, fnvlist_num_pairs(bmarks), + ZFS_SPACE_CHECK_RESERVED); + fnvlist_free(dbda.dbda_success); + return (rv); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_dataset.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_dataset.c @@ -0,0 +1,3727 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + * Copyright (c) 2014, Joyent, Inc. All rights reserved. + * Copyright (c) 2014 RackTop Systems. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright 2016, OmniTI Computer Consulting, Inc. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * The SPA supports block sizes up to 16MB. However, very large blocks + * can have an impact on i/o latency (e.g. tying up a spinning disk for + * ~300ms), and also potentially on the memory allocator. Therefore, + * we do not allow the recordsize to be set larger than zfs_max_recordsize + * (default 1MB). Larger blocks can be created by changing this tunable, + * and pools with larger blocks can always be imported and used, regardless + * of this setting. + */ +int zfs_max_recordsize = 1 * 1024 * 1024; + +#define SWITCH64(x, y) \ + { \ + uint64_t __tmp = (x); \ + (x) = (y); \ + (y) = __tmp; \ + } + +#define DS_REF_MAX (1ULL << 62) + +extern inline dsl_dataset_phys_t *dsl_dataset_phys(dsl_dataset_t *ds); + +extern int spa_asize_inflation; + +static zil_header_t zero_zil; + +/* + * Figure out how much of this delta should be propagated to the dsl_dir + * layer. If there's a refreservation, that space has already been + * partially accounted for in our ancestors. + */ +static int64_t +parent_delta(dsl_dataset_t *ds, int64_t delta) +{ + dsl_dataset_phys_t *ds_phys; + uint64_t old_bytes, new_bytes; + + if (ds->ds_reserved == 0) + return (delta); + + ds_phys = dsl_dataset_phys(ds); + old_bytes = MAX(ds_phys->ds_unique_bytes, ds->ds_reserved); + new_bytes = MAX(ds_phys->ds_unique_bytes + delta, ds->ds_reserved); + + ASSERT3U(ABS((int64_t)(new_bytes - old_bytes)), <=, ABS(delta)); + return (new_bytes - old_bytes); +} + +void +dsl_dataset_block_born(dsl_dataset_t *ds, const blkptr_t *bp, dmu_tx_t *tx) +{ + int used, compressed, uncompressed; + int64_t delta; + spa_feature_t f; + + used = bp_get_dsize_sync(tx->tx_pool->dp_spa, bp); + compressed = BP_GET_PSIZE(bp); + uncompressed = BP_GET_UCSIZE(bp); + + dprintf_bp(bp, "ds=%p", ds); + + ASSERT(dmu_tx_is_syncing(tx)); + /* It could have been compressed away to nothing */ + if (BP_IS_HOLE(bp)) + return; + ASSERT(BP_GET_TYPE(bp) != DMU_OT_NONE); + ASSERT(DMU_OT_IS_VALID(BP_GET_TYPE(bp))); + if (ds == NULL) { + dsl_pool_mos_diduse_space(tx->tx_pool, + used, compressed, uncompressed); + return; + } + + ASSERT3U(bp->blk_birth, >, dsl_dataset_phys(ds)->ds_prev_snap_txg); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + mutex_enter(&ds->ds_lock); + delta = parent_delta(ds, used); + dsl_dataset_phys(ds)->ds_referenced_bytes += used; + dsl_dataset_phys(ds)->ds_compressed_bytes += compressed; + dsl_dataset_phys(ds)->ds_uncompressed_bytes += uncompressed; + dsl_dataset_phys(ds)->ds_unique_bytes += used; + + if (BP_GET_LSIZE(bp) > SPA_OLD_MAXBLOCKSIZE) { + ds->ds_feature_activation_needed[SPA_FEATURE_LARGE_BLOCKS] = + B_TRUE; + } + + f = zio_checksum_to_feature(BP_GET_CHECKSUM(bp)); + if (f != SPA_FEATURE_NONE) + ds->ds_feature_activation_needed[f] = B_TRUE; + + mutex_exit(&ds->ds_lock); + dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, delta, + compressed, uncompressed, tx); + dsl_dir_transfer_space(ds->ds_dir, used - delta, + DD_USED_REFRSRV, DD_USED_HEAD, tx); +} + +int +dsl_dataset_block_kill(dsl_dataset_t *ds, const blkptr_t *bp, dmu_tx_t *tx, + boolean_t async) +{ + int used = bp_get_dsize_sync(tx->tx_pool->dp_spa, bp); + int compressed = BP_GET_PSIZE(bp); + int uncompressed = BP_GET_UCSIZE(bp); + + if (BP_IS_HOLE(bp)) + return (0); + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(bp->blk_birth <= tx->tx_txg); + + if (ds == NULL) { + dsl_free(tx->tx_pool, tx->tx_txg, bp); + dsl_pool_mos_diduse_space(tx->tx_pool, + -used, -compressed, -uncompressed); + return (used); + } + ASSERT3P(tx->tx_pool, ==, ds->ds_dir->dd_pool); + + ASSERT(!ds->ds_is_snapshot); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + + if (bp->blk_birth > dsl_dataset_phys(ds)->ds_prev_snap_txg) { + int64_t delta; + + dprintf_bp(bp, "freeing ds=%llu", ds->ds_object); + dsl_free(tx->tx_pool, tx->tx_txg, bp); + + mutex_enter(&ds->ds_lock); + ASSERT(dsl_dataset_phys(ds)->ds_unique_bytes >= used || + !DS_UNIQUE_IS_ACCURATE(ds)); + delta = parent_delta(ds, -used); + dsl_dataset_phys(ds)->ds_unique_bytes -= used; + mutex_exit(&ds->ds_lock); + dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, + delta, -compressed, -uncompressed, tx); + dsl_dir_transfer_space(ds->ds_dir, -used - delta, + DD_USED_REFRSRV, DD_USED_HEAD, tx); + } else { + dprintf_bp(bp, "putting on dead list: %s", ""); + if (async) { + /* + * We are here as part of zio's write done callback, + * which means we're a zio interrupt thread. We can't + * call dsl_deadlist_insert() now because it may block + * waiting for I/O. Instead, put bp on the deferred + * queue and let dsl_pool_sync() finish the job. + */ + bplist_append(&ds->ds_pending_deadlist, bp); + } else { + dsl_deadlist_insert(&ds->ds_deadlist, bp, tx); + } + ASSERT3U(ds->ds_prev->ds_object, ==, + dsl_dataset_phys(ds)->ds_prev_snap_obj); + ASSERT(dsl_dataset_phys(ds->ds_prev)->ds_num_children > 0); + /* if (bp->blk_birth > prev prev snap txg) prev unique += bs */ + if (dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == + ds->ds_object && bp->blk_birth > + dsl_dataset_phys(ds->ds_prev)->ds_prev_snap_txg) { + dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); + mutex_enter(&ds->ds_prev->ds_lock); + dsl_dataset_phys(ds->ds_prev)->ds_unique_bytes += used; + mutex_exit(&ds->ds_prev->ds_lock); + } + if (bp->blk_birth > ds->ds_dir->dd_origin_txg) { + dsl_dir_transfer_space(ds->ds_dir, used, + DD_USED_HEAD, DD_USED_SNAP, tx); + } + } + mutex_enter(&ds->ds_lock); + ASSERT3U(dsl_dataset_phys(ds)->ds_referenced_bytes, >=, used); + dsl_dataset_phys(ds)->ds_referenced_bytes -= used; + ASSERT3U(dsl_dataset_phys(ds)->ds_compressed_bytes, >=, compressed); + dsl_dataset_phys(ds)->ds_compressed_bytes -= compressed; + ASSERT3U(dsl_dataset_phys(ds)->ds_uncompressed_bytes, >=, uncompressed); + dsl_dataset_phys(ds)->ds_uncompressed_bytes -= uncompressed; + mutex_exit(&ds->ds_lock); + + return (used); +} + +/* + * We have to release the fsid syncronously or we risk that a subsequent + * mount of the same dataset will fail to unique_insert the fsid. This + * failure would manifest itself as the fsid of this dataset changing + * between mounts which makes NFS clients quite unhappy. + */ +static void +dsl_dataset_evict_sync(void *dbu) +{ + dsl_dataset_t *ds = dbu; + + ASSERT(ds->ds_owner == NULL); + + unique_remove(ds->ds_fsid_guid); +} + +static void +dsl_dataset_evict_async(void *dbu) +{ + dsl_dataset_t *ds = dbu; + + ASSERT(ds->ds_owner == NULL); + + ds->ds_dbuf = NULL; + + if (ds->ds_objset != NULL) + dmu_objset_evict(ds->ds_objset); + + if (ds->ds_prev) { + dsl_dataset_rele(ds->ds_prev, ds); + ds->ds_prev = NULL; + } + + bplist_destroy(&ds->ds_pending_deadlist); + if (ds->ds_deadlist.dl_os != NULL) + dsl_deadlist_close(&ds->ds_deadlist); + if (ds->ds_dir) + dsl_dir_async_rele(ds->ds_dir, ds); + + ASSERT(!list_link_active(&ds->ds_synced_link)); + + list_destroy(&ds->ds_prop_cbs); + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_opening_lock); + mutex_destroy(&ds->ds_sendstream_lock); + refcount_destroy(&ds->ds_longholds); + rrw_destroy(&ds->ds_bp_rwlock); + + kmem_free(ds, sizeof (dsl_dataset_t)); +} + +int +dsl_dataset_get_snapname(dsl_dataset_t *ds) +{ + dsl_dataset_phys_t *headphys; + int err; + dmu_buf_t *headdbuf; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + objset_t *mos = dp->dp_meta_objset; + + if (ds->ds_snapname[0]) + return (0); + if (dsl_dataset_phys(ds)->ds_next_snap_obj == 0) + return (0); + + err = dmu_bonus_hold(mos, dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, + FTAG, &headdbuf); + if (err != 0) + return (err); + headphys = headdbuf->db_data; + err = zap_value_search(dp->dp_meta_objset, + headphys->ds_snapnames_zapobj, ds->ds_object, 0, ds->ds_snapname); + if (err != 0 && zfs_recover == B_TRUE) { + err = 0; + (void) snprintf(ds->ds_snapname, sizeof (ds->ds_snapname), + "SNAPOBJ=%llu-ERR=%d", + (unsigned long long)ds->ds_object, err); + } + dmu_buf_rele(headdbuf, FTAG); + return (err); +} + +int +dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name, uint64_t *value) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + uint64_t snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj; + matchtype_t mt = 0; + int err; + + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET) + mt = MT_NORMALIZE; + + err = zap_lookup_norm(mos, snapobj, name, 8, 1, + value, mt, NULL, 0, NULL); + if (err == ENOTSUP && (mt & MT_NORMALIZE)) + err = zap_lookup(mos, snapobj, name, 8, 1, value); + return (err); +} + +int +dsl_dataset_snap_remove(dsl_dataset_t *ds, const char *name, dmu_tx_t *tx, + boolean_t adj_cnt) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + uint64_t snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj; + matchtype_t mt = 0; + int err; + + dsl_dir_snap_cmtime_update(ds->ds_dir); + + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET) + mt = MT_NORMALIZE; + + err = zap_remove_norm(mos, snapobj, name, mt, tx); + if (err == ENOTSUP && (mt & MT_NORMALIZE)) + err = zap_remove(mos, snapobj, name, tx); + + if (err == 0 && adj_cnt) + dsl_fs_ss_count_adjust(ds->ds_dir, -1, + DD_FIELD_SNAPSHOT_COUNT, tx); + + return (err); +} + +boolean_t +dsl_dataset_try_add_ref(dsl_pool_t *dp, dsl_dataset_t *ds, void *tag) +{ + dmu_buf_t *dbuf = ds->ds_dbuf; + boolean_t result = B_FALSE; + + if (dbuf != NULL && dmu_buf_try_add_ref(dbuf, dp->dp_meta_objset, + ds->ds_object, DMU_BONUS_BLKID, tag)) { + + if (ds == dmu_buf_get_user(dbuf)) + result = B_TRUE; + else + dmu_buf_rele(dbuf, tag); + } + + return (result); +} + +int +dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag, + dsl_dataset_t **dsp) +{ + objset_t *mos = dp->dp_meta_objset; + dmu_buf_t *dbuf; + dsl_dataset_t *ds; + int err; + dmu_object_info_t doi; + + ASSERT(dsl_pool_config_held(dp)); + + err = dmu_bonus_hold(mos, dsobj, tag, &dbuf); + if (err != 0) + return (err); + + /* Make sure dsobj has the correct object type. */ + dmu_object_info_from_db(dbuf, &doi); + if (doi.doi_bonus_type != DMU_OT_DSL_DATASET) { + dmu_buf_rele(dbuf, tag); + return (SET_ERROR(EINVAL)); + } + + ds = dmu_buf_get_user(dbuf); + if (ds == NULL) { + dsl_dataset_t *winner = NULL; + + ds = kmem_zalloc(sizeof (dsl_dataset_t), KM_SLEEP); + ds->ds_dbuf = dbuf; + ds->ds_object = dsobj; + ds->ds_is_snapshot = dsl_dataset_phys(ds)->ds_num_children != 0; + list_link_init(&ds->ds_synced_link); + + mutex_init(&ds->ds_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&ds->ds_opening_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&ds->ds_sendstream_lock, NULL, MUTEX_DEFAULT, NULL); + rrw_init(&ds->ds_bp_rwlock, B_FALSE); + refcount_create(&ds->ds_longholds); + + bplist_create(&ds->ds_pending_deadlist); + dsl_deadlist_open(&ds->ds_deadlist, + mos, dsl_dataset_phys(ds)->ds_deadlist_obj); + + list_create(&ds->ds_sendstreams, sizeof (dmu_sendarg_t), + offsetof(dmu_sendarg_t, dsa_link)); + + list_create(&ds->ds_prop_cbs, sizeof (dsl_prop_cb_record_t), + offsetof(dsl_prop_cb_record_t, cbr_ds_node)); + + if (doi.doi_type == DMU_OTN_ZAP_METADATA) { + spa_feature_t f; + + for (f = 0; f < SPA_FEATURES; f++) { + if (!(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET)) + continue; + err = zap_contains(mos, dsobj, + spa_feature_table[f].fi_guid); + if (err == 0) { + ds->ds_feature_inuse[f] = B_TRUE; + } else { + ASSERT3U(err, ==, ENOENT); + err = 0; + } + } + } + + err = dsl_dir_hold_obj(dp, + dsl_dataset_phys(ds)->ds_dir_obj, NULL, ds, &ds->ds_dir); + if (err != 0) { + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_opening_lock); + mutex_destroy(&ds->ds_sendstream_lock); + refcount_destroy(&ds->ds_longholds); + bplist_destroy(&ds->ds_pending_deadlist); + dsl_deadlist_close(&ds->ds_deadlist); + kmem_free(ds, sizeof (dsl_dataset_t)); + dmu_buf_rele(dbuf, tag); + return (err); + } + + if (!ds->ds_is_snapshot) { + ds->ds_snapname[0] = '\0'; + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, + ds, &ds->ds_prev); + } + if (doi.doi_type == DMU_OTN_ZAP_METADATA) { + int zaperr = zap_lookup(mos, ds->ds_object, + DS_FIELD_BOOKMARK_NAMES, + sizeof (ds->ds_bookmarks), 1, + &ds->ds_bookmarks); + if (zaperr != ENOENT) + VERIFY0(zaperr); + } + } else { + if (zfs_flags & ZFS_DEBUG_SNAPNAMES) + err = dsl_dataset_get_snapname(ds); + if (err == 0 && + dsl_dataset_phys(ds)->ds_userrefs_obj != 0) { + err = zap_count( + ds->ds_dir->dd_pool->dp_meta_objset, + dsl_dataset_phys(ds)->ds_userrefs_obj, + &ds->ds_userrefs); + } + } + + if (err == 0 && !ds->ds_is_snapshot) { + err = dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_REFRESERVATION), + &ds->ds_reserved); + if (err == 0) { + err = dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_REFQUOTA), + &ds->ds_quota); + } + } else { + ds->ds_reserved = ds->ds_quota = 0; + } + + dmu_buf_init_user(&ds->ds_dbu, dsl_dataset_evict_sync, + dsl_dataset_evict_async, &ds->ds_dbuf); + if (err == 0) + winner = dmu_buf_set_user_ie(dbuf, &ds->ds_dbu); + + if (err != 0 || winner != NULL) { + bplist_destroy(&ds->ds_pending_deadlist); + dsl_deadlist_close(&ds->ds_deadlist); + if (ds->ds_prev) + dsl_dataset_rele(ds->ds_prev, ds); + dsl_dir_rele(ds->ds_dir, ds); + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_opening_lock); + mutex_destroy(&ds->ds_sendstream_lock); + refcount_destroy(&ds->ds_longholds); + kmem_free(ds, sizeof (dsl_dataset_t)); + if (err != 0) { + dmu_buf_rele(dbuf, tag); + return (err); + } + ds = winner; + } else { + ds->ds_fsid_guid = + unique_insert(dsl_dataset_phys(ds)->ds_fsid_guid); + if (ds->ds_fsid_guid != + dsl_dataset_phys(ds)->ds_fsid_guid) { + zfs_dbgmsg("ds_fsid_guid changed from " + "%llx to %llx for pool %s dataset id %llu", + (long long) + dsl_dataset_phys(ds)->ds_fsid_guid, + (long long)ds->ds_fsid_guid, + spa_name(dp->dp_spa), + dsobj); + } + } + } + ASSERT3P(ds->ds_dbuf, ==, dbuf); + ASSERT3P(dsl_dataset_phys(ds), ==, dbuf->db_data); + ASSERT(dsl_dataset_phys(ds)->ds_prev_snap_obj != 0 || + spa_version(dp->dp_spa) < SPA_VERSION_ORIGIN || + dp->dp_origin_snap == NULL || ds == dp->dp_origin_snap); + *dsp = ds; + return (0); +} + +int +dsl_dataset_hold(dsl_pool_t *dp, const char *name, + void *tag, dsl_dataset_t **dsp) +{ + dsl_dir_t *dd; + const char *snapname; + uint64_t obj; + int err = 0; + dsl_dataset_t *ds; + + err = dsl_dir_hold(dp, name, FTAG, &dd, &snapname); + if (err != 0) + return (err); + + ASSERT(dsl_pool_config_held(dp)); + obj = dsl_dir_phys(dd)->dd_head_dataset_obj; + if (obj != 0) + err = dsl_dataset_hold_obj(dp, obj, tag, &ds); + else + err = SET_ERROR(ENOENT); + + /* we may be looking for a snapshot */ + if (err == 0 && snapname != NULL) { + dsl_dataset_t *snap_ds; + + if (*snapname++ != '@') { + dsl_dataset_rele(ds, tag); + dsl_dir_rele(dd, FTAG); + return (SET_ERROR(ENOENT)); + } + + dprintf("looking for snapshot '%s'\n", snapname); + err = dsl_dataset_snap_lookup(ds, snapname, &obj); + if (err == 0) + err = dsl_dataset_hold_obj(dp, obj, tag, &snap_ds); + dsl_dataset_rele(ds, tag); + + if (err == 0) { + mutex_enter(&snap_ds->ds_lock); + if (snap_ds->ds_snapname[0] == 0) + (void) strlcpy(snap_ds->ds_snapname, snapname, + sizeof (snap_ds->ds_snapname)); + mutex_exit(&snap_ds->ds_lock); + ds = snap_ds; + } + } + if (err == 0) + *dsp = ds; + dsl_dir_rele(dd, FTAG); + return (err); +} + +int +dsl_dataset_own_obj(dsl_pool_t *dp, uint64_t dsobj, + void *tag, dsl_dataset_t **dsp) +{ + int err = dsl_dataset_hold_obj(dp, dsobj, tag, dsp); + if (err != 0) + return (err); + if (!dsl_dataset_tryown(*dsp, tag)) { + dsl_dataset_rele(*dsp, tag); + *dsp = NULL; + return (SET_ERROR(EBUSY)); + } + return (0); +} + +int +dsl_dataset_own(dsl_pool_t *dp, const char *name, + void *tag, dsl_dataset_t **dsp) +{ + int err = dsl_dataset_hold(dp, name, tag, dsp); + if (err != 0) + return (err); + if (!dsl_dataset_tryown(*dsp, tag)) { + dsl_dataset_rele(*dsp, tag); + return (SET_ERROR(EBUSY)); + } + return (0); +} + +/* + * See the comment above dsl_pool_hold() for details. In summary, a long + * hold is used to prevent destruction of a dataset while the pool hold + * is dropped, allowing other concurrent operations (e.g. spa_sync()). + * + * The dataset and pool must be held when this function is called. After it + * is called, the pool hold may be released while the dataset is still held + * and accessed. + */ +void +dsl_dataset_long_hold(dsl_dataset_t *ds, void *tag) +{ + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + (void) refcount_add(&ds->ds_longholds, tag); +} + +void +dsl_dataset_long_rele(dsl_dataset_t *ds, void *tag) +{ + (void) refcount_remove(&ds->ds_longholds, tag); +} + +/* Return B_TRUE if there are any long holds on this dataset. */ +boolean_t +dsl_dataset_long_held(dsl_dataset_t *ds) +{ + return (!refcount_is_zero(&ds->ds_longholds)); +} + +void +dsl_dataset_name(dsl_dataset_t *ds, char *name) +{ + if (ds == NULL) { + (void) strcpy(name, "mos"); + } else { + dsl_dir_name(ds->ds_dir, name); + VERIFY0(dsl_dataset_get_snapname(ds)); + if (ds->ds_snapname[0]) { + VERIFY3U(strlcat(name, "@", ZFS_MAX_DATASET_NAME_LEN), + <, ZFS_MAX_DATASET_NAME_LEN); + /* + * We use a "recursive" mutex so that we + * can call dprintf_ds() with ds_lock held. + */ + if (!MUTEX_HELD(&ds->ds_lock)) { + mutex_enter(&ds->ds_lock); + VERIFY3U(strlcat(name, ds->ds_snapname, + ZFS_MAX_DATASET_NAME_LEN), <, + ZFS_MAX_DATASET_NAME_LEN); + mutex_exit(&ds->ds_lock); + } else { + VERIFY3U(strlcat(name, ds->ds_snapname, + ZFS_MAX_DATASET_NAME_LEN), <, + ZFS_MAX_DATASET_NAME_LEN); + } + } + } +} + +int +dsl_dataset_namelen(dsl_dataset_t *ds) +{ + int len; + VERIFY0(dsl_dataset_get_snapname(ds)); + mutex_enter(&ds->ds_lock); + len = strlen(ds->ds_snapname); + /* add '@' if ds is a snap */ + if (len > 0) + len++; + len += dsl_dir_namelen(ds->ds_dir); + mutex_exit(&ds->ds_lock); + return (len); +} + +void +dsl_dataset_rele(dsl_dataset_t *ds, void *tag) +{ + dmu_buf_rele(ds->ds_dbuf, tag); +} + +void +dsl_dataset_disown(dsl_dataset_t *ds, void *tag) +{ + ASSERT3P(ds->ds_owner, ==, tag); + ASSERT(ds->ds_dbuf != NULL); + + mutex_enter(&ds->ds_lock); + ds->ds_owner = NULL; + mutex_exit(&ds->ds_lock); + dsl_dataset_long_rele(ds, tag); + dsl_dataset_rele(ds, tag); +} + +boolean_t +dsl_dataset_tryown(dsl_dataset_t *ds, void *tag) +{ + boolean_t gotit = FALSE; + + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + mutex_enter(&ds->ds_lock); + if (ds->ds_owner == NULL && !DS_IS_INCONSISTENT(ds)) { + ds->ds_owner = tag; + dsl_dataset_long_hold(ds, tag); + gotit = TRUE; + } + mutex_exit(&ds->ds_lock); + return (gotit); +} + +boolean_t +dsl_dataset_has_owner(dsl_dataset_t *ds) +{ + boolean_t rv; + mutex_enter(&ds->ds_lock); + rv = (ds->ds_owner != NULL); + mutex_exit(&ds->ds_lock); + return (rv); +} + +static void +dsl_dataset_activate_feature(uint64_t dsobj, spa_feature_t f, dmu_tx_t *tx) +{ + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = dmu_tx_pool(tx)->dp_meta_objset; + uint64_t zero = 0; + + VERIFY(spa_feature_table[f].fi_flags & ZFEATURE_FLAG_PER_DATASET); + + spa_feature_incr(spa, f, tx); + dmu_object_zapify(mos, dsobj, DMU_OT_DSL_DATASET, tx); + + VERIFY0(zap_add(mos, dsobj, spa_feature_table[f].fi_guid, + sizeof (zero), 1, &zero, tx)); +} + +void +dsl_dataset_deactivate_feature(uint64_t dsobj, spa_feature_t f, dmu_tx_t *tx) +{ + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = dmu_tx_pool(tx)->dp_meta_objset; + + VERIFY(spa_feature_table[f].fi_flags & ZFEATURE_FLAG_PER_DATASET); + + VERIFY0(zap_remove(mos, dsobj, spa_feature_table[f].fi_guid, tx)); + spa_feature_decr(spa, f, tx); +} + +uint64_t +dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin, + uint64_t flags, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dd->dd_pool; + dmu_buf_t *dbuf; + dsl_dataset_phys_t *dsphys; + uint64_t dsobj; + objset_t *mos = dp->dp_meta_objset; + + if (origin == NULL) + origin = dp->dp_origin_snap; + + ASSERT(origin == NULL || origin->ds_dir->dd_pool == dp); + ASSERT(origin == NULL || dsl_dataset_phys(origin)->ds_num_children > 0); + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(dsl_dir_phys(dd)->dd_head_dataset_obj == 0); + + dsobj = dmu_object_alloc(mos, DMU_OT_DSL_DATASET, 0, + DMU_OT_DSL_DATASET, sizeof (dsl_dataset_phys_t), tx); + VERIFY0(dmu_bonus_hold(mos, dsobj, FTAG, &dbuf)); + dmu_buf_will_dirty(dbuf, tx); + dsphys = dbuf->db_data; + bzero(dsphys, sizeof (dsl_dataset_phys_t)); + dsphys->ds_dir_obj = dd->dd_object; + dsphys->ds_flags = flags; + dsphys->ds_fsid_guid = unique_create(); + (void) random_get_pseudo_bytes((void*)&dsphys->ds_guid, + sizeof (dsphys->ds_guid)); + dsphys->ds_snapnames_zapobj = + zap_create_norm(mos, U8_TEXTPREP_TOUPPER, DMU_OT_DSL_DS_SNAP_MAP, + DMU_OT_NONE, 0, tx); + dsphys->ds_creation_time = gethrestime_sec(); + dsphys->ds_creation_txg = tx->tx_txg == TXG_INITIAL ? 1 : tx->tx_txg; + + if (origin == NULL) { + dsphys->ds_deadlist_obj = dsl_deadlist_alloc(mos, tx); + } else { + spa_feature_t f; + dsl_dataset_t *ohds; /* head of the origin snapshot */ + + dsphys->ds_prev_snap_obj = origin->ds_object; + dsphys->ds_prev_snap_txg = + dsl_dataset_phys(origin)->ds_creation_txg; + dsphys->ds_referenced_bytes = + dsl_dataset_phys(origin)->ds_referenced_bytes; + dsphys->ds_compressed_bytes = + dsl_dataset_phys(origin)->ds_compressed_bytes; + dsphys->ds_uncompressed_bytes = + dsl_dataset_phys(origin)->ds_uncompressed_bytes; + rrw_enter(&origin->ds_bp_rwlock, RW_READER, FTAG); + dsphys->ds_bp = dsl_dataset_phys(origin)->ds_bp; + rrw_exit(&origin->ds_bp_rwlock, FTAG); + + /* + * Inherit flags that describe the dataset's contents + * (INCONSISTENT) or properties (Case Insensitive). + */ + dsphys->ds_flags |= dsl_dataset_phys(origin)->ds_flags & + (DS_FLAG_INCONSISTENT | DS_FLAG_CI_DATASET); + + for (f = 0; f < SPA_FEATURES; f++) { + if (origin->ds_feature_inuse[f]) + dsl_dataset_activate_feature(dsobj, f, tx); + } + + dmu_buf_will_dirty(origin->ds_dbuf, tx); + dsl_dataset_phys(origin)->ds_num_children++; + + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dir_phys(origin->ds_dir)->dd_head_dataset_obj, + FTAG, &ohds)); + dsphys->ds_deadlist_obj = dsl_deadlist_clone(&ohds->ds_deadlist, + dsphys->ds_prev_snap_txg, dsphys->ds_prev_snap_obj, tx); + dsl_dataset_rele(ohds, FTAG); + + if (spa_version(dp->dp_spa) >= SPA_VERSION_NEXT_CLONES) { + if (dsl_dataset_phys(origin)->ds_next_clones_obj == 0) { + dsl_dataset_phys(origin)->ds_next_clones_obj = + zap_create(mos, + DMU_OT_NEXT_CLONES, DMU_OT_NONE, 0, tx); + } + VERIFY0(zap_add_int(mos, + dsl_dataset_phys(origin)->ds_next_clones_obj, + dsobj, tx)); + } + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + dsl_dir_phys(dd)->dd_origin_obj = origin->ds_object; + if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { + if (dsl_dir_phys(origin->ds_dir)->dd_clones == 0) { + dmu_buf_will_dirty(origin->ds_dir->dd_dbuf, tx); + dsl_dir_phys(origin->ds_dir)->dd_clones = + zap_create(mos, + DMU_OT_DSL_CLONES, DMU_OT_NONE, 0, tx); + } + VERIFY0(zap_add_int(mos, + dsl_dir_phys(origin->ds_dir)->dd_clones, + dsobj, tx)); + } + } + + if (spa_version(dp->dp_spa) >= SPA_VERSION_UNIQUE_ACCURATE) + dsphys->ds_flags |= DS_FLAG_UNIQUE_ACCURATE; + + dmu_buf_rele(dbuf, FTAG); + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + dsl_dir_phys(dd)->dd_head_dataset_obj = dsobj; + + return (dsobj); +} + +static void +dsl_dataset_zero_zil(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + objset_t *os; + + VERIFY0(dmu_objset_from_ds(ds, &os)); + if (bcmp(&os->os_zil_header, &zero_zil, sizeof (zero_zil)) != 0) { + dsl_pool_t *dp = ds->ds_dir->dd_pool; + zio_t *zio; + + bzero(&os->os_zil_header, sizeof (os->os_zil_header)); + + zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); + dsl_dataset_sync(ds, zio, tx); + VERIFY0(zio_wait(zio)); + + /* dsl_dataset_sync_done will drop this reference. */ + dmu_buf_add_ref(ds->ds_dbuf, ds); + dsl_dataset_sync_done(ds, tx); + } +} + +uint64_t +dsl_dataset_create_sync(dsl_dir_t *pdd, const char *lastname, + dsl_dataset_t *origin, uint64_t flags, cred_t *cr, dmu_tx_t *tx) +{ + dsl_pool_t *dp = pdd->dd_pool; + uint64_t dsobj, ddobj; + dsl_dir_t *dd; + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(lastname[0] != '@'); + + ddobj = dsl_dir_create_sync(dp, pdd, lastname, tx); + VERIFY0(dsl_dir_hold_obj(dp, ddobj, lastname, FTAG, &dd)); + + dsobj = dsl_dataset_create_sync_dd(dd, origin, + flags & ~DS_CREATE_FLAG_NODIRTY, tx); + + dsl_deleg_set_create_perms(dd, tx, cr); + + /* + * Since we're creating a new node we know it's a leaf, so we can + * initialize the counts if the limit feature is active. + */ + if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_FS_SS_LIMIT)) { + uint64_t cnt = 0; + objset_t *os = dd->dd_pool->dp_meta_objset; + + dsl_dir_zapify(dd, tx); + VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT, + sizeof (cnt), 1, &cnt, tx)); + VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_SNAPSHOT_COUNT, + sizeof (cnt), 1, &cnt, tx)); + } + + dsl_dir_rele(dd, FTAG); + + /* + * If we are creating a clone, make sure we zero out any stale + * data from the origin snapshots zil header. + */ + if (origin != NULL && !(flags & DS_CREATE_FLAG_NODIRTY)) { + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + dsl_dataset_zero_zil(ds, tx); + dsl_dataset_rele(ds, FTAG); + } + + return (dsobj); +} + +/* + * The unique space in the head dataset can be calculated by subtracting + * the space used in the most recent snapshot, that is still being used + * in this file system, from the space currently in use. To figure out + * the space in the most recent snapshot still in use, we need to take + * the total space used in the snapshot and subtract out the space that + * has been freed up since the snapshot was taken. + */ +void +dsl_dataset_recalc_head_uniq(dsl_dataset_t *ds) +{ + uint64_t mrs_used; + uint64_t dlused, dlcomp, dluncomp; + + ASSERT(!ds->ds_is_snapshot); + + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) + mrs_used = dsl_dataset_phys(ds->ds_prev)->ds_referenced_bytes; + else + mrs_used = 0; + + dsl_deadlist_space(&ds->ds_deadlist, &dlused, &dlcomp, &dluncomp); + + ASSERT3U(dlused, <=, mrs_used); + dsl_dataset_phys(ds)->ds_unique_bytes = + dsl_dataset_phys(ds)->ds_referenced_bytes - (mrs_used - dlused); + + if (spa_version(ds->ds_dir->dd_pool->dp_spa) >= + SPA_VERSION_UNIQUE_ACCURATE) + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_UNIQUE_ACCURATE; +} + +void +dsl_dataset_remove_from_next_clones(dsl_dataset_t *ds, uint64_t obj, + dmu_tx_t *tx) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + int err; + ASSERTV(uint64_t count); + + ASSERT(dsl_dataset_phys(ds)->ds_num_children >= 2); + err = zap_remove_int(mos, dsl_dataset_phys(ds)->ds_next_clones_obj, + obj, tx); + /* + * The err should not be ENOENT, but a bug in a previous version + * of the code could cause upgrade_clones_cb() to not set + * ds_next_snap_obj when it should, leading to a missing entry. + * If we knew that the pool was created after + * SPA_VERSION_NEXT_CLONES, we could assert that it isn't + * ENOENT. However, at least we can check that we don't have + * too many entries in the next_clones_obj even after failing to + * remove this one. + */ + if (err != ENOENT) + VERIFY0(err); + ASSERT0(zap_count(mos, dsl_dataset_phys(ds)->ds_next_clones_obj, + &count)); + ASSERT3U(count, <=, dsl_dataset_phys(ds)->ds_num_children - 2); +} + + +blkptr_t * +dsl_dataset_get_blkptr(dsl_dataset_t *ds) +{ + return (&dsl_dataset_phys(ds)->ds_bp); +} + +spa_t * +dsl_dataset_get_spa(dsl_dataset_t *ds) +{ + return (ds->ds_dir->dd_pool->dp_spa); +} + +void +dsl_dataset_dirty(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + dsl_pool_t *dp; + + if (ds == NULL) /* this is the meta-objset */ + return; + + ASSERT(ds->ds_objset != NULL); + + if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0) + panic("dirtying snapshot!"); + + /* Must not dirty a dataset in the same txg where it got snapshotted. */ + ASSERT3U(tx->tx_txg, >, dsl_dataset_phys(ds)->ds_prev_snap_txg); + + dp = ds->ds_dir->dd_pool; + if (txg_list_add(&dp->dp_dirty_datasets, ds, tx->tx_txg)) { + /* up the hold count until we can be written out */ + dmu_buf_add_ref(ds->ds_dbuf, ds); + } +} + +boolean_t +dsl_dataset_is_dirty(dsl_dataset_t *ds) +{ + int t; + + for (t = 0; t < TXG_SIZE; t++) { + if (txg_list_member(&ds->ds_dir->dd_pool->dp_dirty_datasets, + ds, t)) + return (B_TRUE); + } + return (B_FALSE); +} + +static int +dsl_dataset_snapshot_reserve_space(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + uint64_t asize; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + /* + * If there's an fs-only reservation, any blocks that might become + * owned by the snapshot dataset must be accommodated by space + * outside of the reservation. + */ + ASSERT(ds->ds_reserved == 0 || DS_UNIQUE_IS_ACCURATE(ds)); + asize = MIN(dsl_dataset_phys(ds)->ds_unique_bytes, ds->ds_reserved); + if (asize > dsl_dir_space_available(ds->ds_dir, NULL, 0, TRUE)) + return (SET_ERROR(ENOSPC)); + + /* + * Propagate any reserved space for this snapshot to other + * snapshot checks in this sync group. + */ + if (asize > 0) + dsl_dir_willuse_space(ds->ds_dir, asize, tx); + + return (0); +} + +typedef struct dsl_dataset_snapshot_arg { + nvlist_t *ddsa_snaps; + nvlist_t *ddsa_props; + nvlist_t *ddsa_errors; + cred_t *ddsa_cr; +} dsl_dataset_snapshot_arg_t; + +int +dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname, + dmu_tx_t *tx, boolean_t recv, uint64_t cnt, cred_t *cr) +{ + int error; + uint64_t value; + + ds->ds_trysnap_txg = tx->tx_txg; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + /* + * We don't allow multiple snapshots of the same txg. If there + * is already one, try again. + */ + if (dsl_dataset_phys(ds)->ds_prev_snap_txg >= tx->tx_txg) + return (SET_ERROR(EAGAIN)); + + /* + * Check for conflicting snapshot name. + */ + error = dsl_dataset_snap_lookup(ds, snapname, &value); + if (error == 0) + return (SET_ERROR(EEXIST)); + if (error != ENOENT) + return (error); + + /* + * We don't allow taking snapshots of inconsistent datasets, such as + * those into which we are currently receiving. However, if we are + * creating this snapshot as part of a receive, this check will be + * executed atomically with respect to the completion of the receive + * itself but prior to the clearing of DS_FLAG_INCONSISTENT; in this + * case we ignore this, knowing it will be fixed up for us shortly in + * dmu_recv_end_sync(). + */ + if (!recv && DS_IS_INCONSISTENT(ds)) + return (SET_ERROR(EBUSY)); + + /* + * Skip the check for temporary snapshots or if we have already checked + * the counts in dsl_dataset_snapshot_check. This means we really only + * check the count here when we're receiving a stream. + */ + if (cnt != 0 && cr != NULL) { + error = dsl_fs_ss_limit_check(ds->ds_dir, cnt, + ZFS_PROP_SNAPSHOT_LIMIT, NULL, cr); + if (error != 0) + return (error); + } + + error = dsl_dataset_snapshot_reserve_space(ds, tx); + if (error != 0) + return (error); + + return (0); +} + +static int +dsl_dataset_snapshot_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_snapshot_arg_t *ddsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + int rv = 0; + + /* + * Pre-compute how many total new snapshots will be created for each + * level in the tree and below. This is needed for validating the + * snapshot limit when either taking a recursive snapshot or when + * taking multiple snapshots. + * + * The problem is that the counts are not actually adjusted when + * we are checking, only when we finally sync. For a single snapshot, + * this is easy, the count will increase by 1 at each node up the tree, + * but its more complicated for the recursive/multiple snapshot case. + * + * The dsl_fs_ss_limit_check function does recursively check the count + * at each level up the tree but since it is validating each snapshot + * independently we need to be sure that we are validating the complete + * count for the entire set of snapshots. We do this by rolling up the + * counts for each component of the name into an nvlist and then + * checking each of those cases with the aggregated count. + * + * This approach properly handles not only the recursive snapshot + * case (where we get all of those on the ddsa_snaps list) but also + * the sibling case (e.g. snapshot a/b and a/c so that we will also + * validate the limit on 'a' using a count of 2). + * + * We validate the snapshot names in the third loop and only report + * name errors once. + */ + if (dmu_tx_is_syncing(tx)) { + char *nm; + nvlist_t *cnt_track = NULL; + cnt_track = fnvlist_alloc(); + + nm = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + /* Rollup aggregated counts into the cnt_track list */ + for (pair = nvlist_next_nvpair(ddsa->ddsa_snaps, NULL); + pair != NULL; + pair = nvlist_next_nvpair(ddsa->ddsa_snaps, pair)) { + char *pdelim; + uint64_t val; + + (void) strlcpy(nm, nvpair_name(pair), MAXPATHLEN); + pdelim = strchr(nm, '@'); + if (pdelim == NULL) + continue; + *pdelim = '\0'; + + do { + if (nvlist_lookup_uint64(cnt_track, nm, + &val) == 0) { + /* update existing entry */ + fnvlist_add_uint64(cnt_track, nm, + val + 1); + } else { + /* add to list */ + fnvlist_add_uint64(cnt_track, nm, 1); + } + + pdelim = strrchr(nm, '/'); + if (pdelim != NULL) + *pdelim = '\0'; + } while (pdelim != NULL); + } + + kmem_free(nm, MAXPATHLEN); + + /* Check aggregated counts at each level */ + for (pair = nvlist_next_nvpair(cnt_track, NULL); + pair != NULL; pair = nvlist_next_nvpair(cnt_track, pair)) { + int error = 0; + char *name; + uint64_t cnt = 0; + dsl_dataset_t *ds; + + name = nvpair_name(pair); + cnt = fnvpair_value_uint64(pair); + ASSERT(cnt > 0); + + error = dsl_dataset_hold(dp, name, FTAG, &ds); + if (error == 0) { + error = dsl_fs_ss_limit_check(ds->ds_dir, cnt, + ZFS_PROP_SNAPSHOT_LIMIT, NULL, + ddsa->ddsa_cr); + dsl_dataset_rele(ds, FTAG); + } + + if (error != 0) { + if (ddsa->ddsa_errors != NULL) + fnvlist_add_int32(ddsa->ddsa_errors, + name, error); + rv = error; + /* only report one error for this check */ + break; + } + } + nvlist_free(cnt_track); + } + + for (pair = nvlist_next_nvpair(ddsa->ddsa_snaps, NULL); + pair != NULL; pair = nvlist_next_nvpair(ddsa->ddsa_snaps, pair)) { + int error = 0; + dsl_dataset_t *ds; + char *name, *atp = NULL; + char dsname[ZFS_MAX_DATASET_NAME_LEN]; + + name = nvpair_name(pair); + if (strlen(name) >= ZFS_MAX_DATASET_NAME_LEN) + error = SET_ERROR(ENAMETOOLONG); + if (error == 0) { + atp = strchr(name, '@'); + if (atp == NULL) + error = SET_ERROR(EINVAL); + if (error == 0) + (void) strlcpy(dsname, name, atp - name + 1); + } + if (error == 0) + error = dsl_dataset_hold(dp, dsname, FTAG, &ds); + if (error == 0) { + /* passing 0/NULL skips dsl_fs_ss_limit_check */ + error = dsl_dataset_snapshot_check_impl(ds, + atp + 1, tx, B_FALSE, 0, NULL); + dsl_dataset_rele(ds, FTAG); + } + + if (error != 0) { + if (ddsa->ddsa_errors != NULL) { + fnvlist_add_int32(ddsa->ddsa_errors, + name, error); + } + rv = error; + } + } + + return (rv); +} + +void +dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname, + dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + dmu_buf_t *dbuf; + dsl_dataset_phys_t *dsphys; + uint64_t dsobj, crtxg; + objset_t *mos = dp->dp_meta_objset; + spa_feature_t f; + ASSERTV(static zil_header_t zero_zil); + ASSERTV(objset_t *os); + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + + /* + * If we are on an old pool, the zil must not be active, in which + * case it will be zeroed. Usually zil_suspend() accomplishes this. + */ + ASSERT(spa_version(dmu_tx_pool(tx)->dp_spa) >= SPA_VERSION_FAST_SNAP || + dmu_objset_from_ds(ds, &os) != 0 || + bcmp(&os->os_phys->os_zil_header, &zero_zil, + sizeof (zero_zil)) == 0); + + /* Should not snapshot a dirty dataset. */ + ASSERT(!txg_list_member(&ds->ds_dir->dd_pool->dp_dirty_datasets, + ds, tx->tx_txg)); + + dsl_fs_ss_count_adjust(ds->ds_dir, 1, DD_FIELD_SNAPSHOT_COUNT, tx); + + /* + * The origin's ds_creation_txg has to be < TXG_INITIAL + */ + if (strcmp(snapname, ORIGIN_DIR_NAME) == 0) + crtxg = 1; + else + crtxg = tx->tx_txg; + + dsobj = dmu_object_alloc(mos, DMU_OT_DSL_DATASET, 0, + DMU_OT_DSL_DATASET, sizeof (dsl_dataset_phys_t), tx); + VERIFY0(dmu_bonus_hold(mos, dsobj, FTAG, &dbuf)); + dmu_buf_will_dirty(dbuf, tx); + dsphys = dbuf->db_data; + bzero(dsphys, sizeof (dsl_dataset_phys_t)); + dsphys->ds_dir_obj = ds->ds_dir->dd_object; + dsphys->ds_fsid_guid = unique_create(); + (void) random_get_pseudo_bytes((void*)&dsphys->ds_guid, + sizeof (dsphys->ds_guid)); + dsphys->ds_prev_snap_obj = dsl_dataset_phys(ds)->ds_prev_snap_obj; + dsphys->ds_prev_snap_txg = dsl_dataset_phys(ds)->ds_prev_snap_txg; + dsphys->ds_next_snap_obj = ds->ds_object; + dsphys->ds_num_children = 1; + dsphys->ds_creation_time = gethrestime_sec(); + dsphys->ds_creation_txg = crtxg; + dsphys->ds_deadlist_obj = dsl_dataset_phys(ds)->ds_deadlist_obj; + dsphys->ds_referenced_bytes = dsl_dataset_phys(ds)->ds_referenced_bytes; + dsphys->ds_compressed_bytes = dsl_dataset_phys(ds)->ds_compressed_bytes; + dsphys->ds_uncompressed_bytes = + dsl_dataset_phys(ds)->ds_uncompressed_bytes; + dsphys->ds_flags = dsl_dataset_phys(ds)->ds_flags; + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + dsphys->ds_bp = dsl_dataset_phys(ds)->ds_bp; + rrw_exit(&ds->ds_bp_rwlock, FTAG); + dmu_buf_rele(dbuf, FTAG); + + for (f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) + dsl_dataset_activate_feature(dsobj, f, tx); + } + + ASSERT3U(ds->ds_prev != 0, ==, + dsl_dataset_phys(ds)->ds_prev_snap_obj != 0); + if (ds->ds_prev) { + uint64_t next_clones_obj = + dsl_dataset_phys(ds->ds_prev)->ds_next_clones_obj; + ASSERT(dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == + ds->ds_object || + dsl_dataset_phys(ds->ds_prev)->ds_num_children > 1); + if (dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == + ds->ds_object) { + dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); + ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_txg, ==, + dsl_dataset_phys(ds->ds_prev)->ds_creation_txg); + dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj = dsobj; + } else if (next_clones_obj != 0) { + dsl_dataset_remove_from_next_clones(ds->ds_prev, + dsphys->ds_next_snap_obj, tx); + VERIFY0(zap_add_int(mos, + next_clones_obj, dsobj, tx)); + } + } + + /* + * If we have a reference-reservation on this dataset, we will + * need to increase the amount of refreservation being charged + * since our unique space is going to zero. + */ + if (ds->ds_reserved) { + int64_t delta; + ASSERT(DS_UNIQUE_IS_ACCURATE(ds)); + delta = MIN(dsl_dataset_phys(ds)->ds_unique_bytes, + ds->ds_reserved); + dsl_dir_diduse_space(ds->ds_dir, DD_USED_REFRSRV, + delta, 0, 0, tx); + } + + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_deadlist_obj = + dsl_deadlist_clone(&ds->ds_deadlist, UINT64_MAX, + dsl_dataset_phys(ds)->ds_prev_snap_obj, tx); + dsl_deadlist_close(&ds->ds_deadlist); + dsl_deadlist_open(&ds->ds_deadlist, mos, + dsl_dataset_phys(ds)->ds_deadlist_obj); + dsl_deadlist_add_key(&ds->ds_deadlist, + dsl_dataset_phys(ds)->ds_prev_snap_txg, tx); + + ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_txg, <, tx->tx_txg); + dsl_dataset_phys(ds)->ds_prev_snap_obj = dsobj; + dsl_dataset_phys(ds)->ds_prev_snap_txg = crtxg; + dsl_dataset_phys(ds)->ds_unique_bytes = 0; + if (spa_version(dp->dp_spa) >= SPA_VERSION_UNIQUE_ACCURATE) + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_UNIQUE_ACCURATE; + + VERIFY0(zap_add(mos, dsl_dataset_phys(ds)->ds_snapnames_zapobj, + snapname, 8, 1, &dsobj, tx)); + + if (ds->ds_prev) + dsl_dataset_rele(ds->ds_prev, ds); + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, ds, &ds->ds_prev)); + + dsl_scan_ds_snapshotted(ds, tx); + + dsl_dir_snap_cmtime_update(ds->ds_dir); + + spa_history_log_internal_ds(ds->ds_prev, "snapshot", tx, ""); +} + +static void +dsl_dataset_snapshot_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_snapshot_arg_t *ddsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(ddsa->ddsa_snaps, NULL); + pair != NULL; pair = nvlist_next_nvpair(ddsa->ddsa_snaps, pair)) { + dsl_dataset_t *ds; + char *name, *atp; + char dsname[ZFS_MAX_DATASET_NAME_LEN]; + + name = nvpair_name(pair); + atp = strchr(name, '@'); + (void) strlcpy(dsname, name, atp - name + 1); + VERIFY0(dsl_dataset_hold(dp, dsname, FTAG, &ds)); + + dsl_dataset_snapshot_sync_impl(ds, atp + 1, tx); + if (ddsa->ddsa_props != NULL) { + dsl_props_set_sync_impl(ds->ds_prev, + ZPROP_SRC_LOCAL, ddsa->ddsa_props, tx); + } + zvol_create_minors(dp->dp_spa, nvpair_name(pair), B_TRUE); + dsl_dataset_rele(ds, FTAG); + } +} + +/* + * The snapshots must all be in the same pool. + * All-or-nothing: if there are any failures, nothing will be modified. + */ +int +dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors) +{ + dsl_dataset_snapshot_arg_t ddsa; + nvpair_t *pair; + boolean_t needsuspend; + int error; + spa_t *spa; + char *firstname; + nvlist_t *suspended = NULL; + + pair = nvlist_next_nvpair(snaps, NULL); + if (pair == NULL) + return (0); + firstname = nvpair_name(pair); + + error = spa_open(firstname, &spa, FTAG); + if (error != 0) + return (error); + needsuspend = (spa_version(spa) < SPA_VERSION_FAST_SNAP); + spa_close(spa, FTAG); + + if (needsuspend) { + suspended = fnvlist_alloc(); + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + char fsname[ZFS_MAX_DATASET_NAME_LEN]; + char *snapname = nvpair_name(pair); + char *atp; + void *cookie; + + atp = strchr(snapname, '@'); + if (atp == NULL) { + error = SET_ERROR(EINVAL); + break; + } + (void) strlcpy(fsname, snapname, atp - snapname + 1); + + error = zil_suspend(fsname, &cookie); + if (error != 0) + break; + fnvlist_add_uint64(suspended, fsname, + (uintptr_t)cookie); + } + } + + ddsa.ddsa_snaps = snaps; + ddsa.ddsa_props = props; + ddsa.ddsa_errors = errors; + ddsa.ddsa_cr = CRED(); + + if (error == 0) { + error = dsl_sync_task(firstname, dsl_dataset_snapshot_check, + dsl_dataset_snapshot_sync, &ddsa, + fnvlist_num_pairs(snaps) * 3, ZFS_SPACE_CHECK_NORMAL); + } + + if (suspended != NULL) { + for (pair = nvlist_next_nvpair(suspended, NULL); pair != NULL; + pair = nvlist_next_nvpair(suspended, pair)) { + zil_resume((void *)(uintptr_t) + fnvpair_value_uint64(pair)); + } + fnvlist_free(suspended); + } + + return (error); +} + +typedef struct dsl_dataset_snapshot_tmp_arg { + const char *ddsta_fsname; + const char *ddsta_snapname; + minor_t ddsta_cleanup_minor; + const char *ddsta_htag; +} dsl_dataset_snapshot_tmp_arg_t; + +static int +dsl_dataset_snapshot_tmp_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_snapshot_tmp_arg_t *ddsta = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int error; + + error = dsl_dataset_hold(dp, ddsta->ddsta_fsname, FTAG, &ds); + if (error != 0) + return (error); + + /* NULL cred means no limit check for tmp snapshot */ + error = dsl_dataset_snapshot_check_impl(ds, ddsta->ddsta_snapname, + tx, B_FALSE, 0, NULL); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + if (spa_version(dp->dp_spa) < SPA_VERSION_USERREFS) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOTSUP)); + } + error = dsl_dataset_user_hold_check_one(NULL, ddsta->ddsta_htag, + B_TRUE, tx); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_dataset_snapshot_tmp_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_snapshot_tmp_arg_t *ddsta = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds = NULL; + + VERIFY0(dsl_dataset_hold(dp, ddsta->ddsta_fsname, FTAG, &ds)); + + dsl_dataset_snapshot_sync_impl(ds, ddsta->ddsta_snapname, tx); + dsl_dataset_user_hold_sync_one(ds->ds_prev, ddsta->ddsta_htag, + ddsta->ddsta_cleanup_minor, gethrestime_sec(), tx); + dsl_destroy_snapshot_sync_impl(ds->ds_prev, B_TRUE, tx); + + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_dataset_snapshot_tmp(const char *fsname, const char *snapname, + minor_t cleanup_minor, const char *htag) +{ + dsl_dataset_snapshot_tmp_arg_t ddsta; + int error; + spa_t *spa; + boolean_t needsuspend; + void *cookie; + + ddsta.ddsta_fsname = fsname; + ddsta.ddsta_snapname = snapname; + ddsta.ddsta_cleanup_minor = cleanup_minor; + ddsta.ddsta_htag = htag; + + error = spa_open(fsname, &spa, FTAG); + if (error != 0) + return (error); + needsuspend = (spa_version(spa) < SPA_VERSION_FAST_SNAP); + spa_close(spa, FTAG); + + if (needsuspend) { + error = zil_suspend(fsname, &cookie); + if (error != 0) + return (error); + } + + error = dsl_sync_task(fsname, dsl_dataset_snapshot_tmp_check, + dsl_dataset_snapshot_tmp_sync, &ddsta, 3, ZFS_SPACE_CHECK_RESERVED); + + if (needsuspend) + zil_resume(cookie); + return (error); +} + + +void +dsl_dataset_sync(dsl_dataset_t *ds, zio_t *zio, dmu_tx_t *tx) +{ + spa_feature_t f; + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(ds->ds_objset != NULL); + ASSERT(dsl_dataset_phys(ds)->ds_next_snap_obj == 0); + + /* + * in case we had to change ds_fsid_guid when we opened it, + * sync it out now. + */ + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_fsid_guid = ds->ds_fsid_guid; + + if (ds->ds_resume_bytes[tx->tx_txg & TXG_MASK] != 0) { + VERIFY0(zap_update(tx->tx_pool->dp_meta_objset, + ds->ds_object, DS_FIELD_RESUME_OBJECT, 8, 1, + &ds->ds_resume_object[tx->tx_txg & TXG_MASK], tx)); + VERIFY0(zap_update(tx->tx_pool->dp_meta_objset, + ds->ds_object, DS_FIELD_RESUME_OFFSET, 8, 1, + &ds->ds_resume_offset[tx->tx_txg & TXG_MASK], tx)); + VERIFY0(zap_update(tx->tx_pool->dp_meta_objset, + ds->ds_object, DS_FIELD_RESUME_BYTES, 8, 1, + &ds->ds_resume_bytes[tx->tx_txg & TXG_MASK], tx)); + ds->ds_resume_object[tx->tx_txg & TXG_MASK] = 0; + ds->ds_resume_offset[tx->tx_txg & TXG_MASK] = 0; + ds->ds_resume_bytes[tx->tx_txg & TXG_MASK] = 0; + } + + dmu_objset_sync(ds->ds_objset, zio, tx); + + for (f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_activation_needed[f]) { + if (ds->ds_feature_inuse[f]) + continue; + dsl_dataset_activate_feature(ds->ds_object, f, tx); + ds->ds_feature_inuse[f] = B_TRUE; + } + } +} + +static int +deadlist_enqueue_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + dsl_deadlist_t *dl = arg; + dsl_deadlist_insert(dl, bp, tx); + return (0); +} + +void +dsl_dataset_sync_done(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + objset_t *os = ds->ds_objset; + + bplist_iterate(&ds->ds_pending_deadlist, + deadlist_enqueue_cb, &ds->ds_deadlist, tx); + + if (os->os_synced_dnodes != NULL) { + multilist_destroy(os->os_synced_dnodes); + os->os_synced_dnodes = NULL; + } + + ASSERT(!dmu_objset_is_dirty(os, dmu_tx_get_txg(tx))); + + dmu_buf_rele(ds->ds_dbuf, ds); +} + +static void +get_clones_stat(dsl_dataset_t *ds, nvlist_t *nv) +{ + uint64_t count = 0; + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + zap_cursor_t zc; + zap_attribute_t za; + nvlist_t *propval = fnvlist_alloc(); + nvlist_t *val; + + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + + /* + * We use nvlist_alloc() instead of fnvlist_alloc() because the + * latter would allocate the list with NV_UNIQUE_NAME flag. + * As a result, every time a clone name is appended to the list + * it would be (linearly) searched for for a duplicate name. + * We already know that all clone names must be unique and we + * want avoid the quadratic complexity of double-checking that + * because we can have a large number of clones. + */ + VERIFY0(nvlist_alloc(&val, 0, KM_SLEEP)); + + /* + * There may be missing entries in ds_next_clones_obj + * due to a bug in a previous version of the code. + * Only trust it if it has the right number of entries. + */ + if (dsl_dataset_phys(ds)->ds_next_clones_obj != 0) { + VERIFY0(zap_count(mos, dsl_dataset_phys(ds)->ds_next_clones_obj, + &count)); + } + if (count != dsl_dataset_phys(ds)->ds_num_children - 1) + goto fail; + for (zap_cursor_init(&zc, mos, + dsl_dataset_phys(ds)->ds_next_clones_obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + dsl_dataset_t *clone; + char buf[ZFS_MAX_DATASET_NAME_LEN]; + VERIFY0(dsl_dataset_hold_obj(ds->ds_dir->dd_pool, + za.za_first_integer, FTAG, &clone)); + dsl_dir_name(clone->ds_dir, buf); + fnvlist_add_boolean(val, buf); + dsl_dataset_rele(clone, FTAG); + } + zap_cursor_fini(&zc); + fnvlist_add_nvlist(propval, ZPROP_VALUE, val); + fnvlist_add_nvlist(nv, zfs_prop_to_name(ZFS_PROP_CLONES), propval); +fail: + nvlist_free(val); + nvlist_free(propval); +} + +static void +get_receive_resume_stats(dsl_dataset_t *ds, nvlist_t *nv) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + + if (dsl_dataset_has_resume_receive_state(ds)) { + char *str; + void *packed; + uint8_t *compressed; + uint64_t val; + nvlist_t *token_nv = fnvlist_alloc(); + size_t packed_size, compressed_size; + zio_cksum_t cksum; + char *propval; + char buf[MAXNAMELEN]; + int i; + + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_FROMGUID, sizeof (val), 1, &val) == 0) { + fnvlist_add_uint64(token_nv, "fromguid", val); + } + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_OBJECT, sizeof (val), 1, &val) == 0) { + fnvlist_add_uint64(token_nv, "object", val); + } + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_OFFSET, sizeof (val), 1, &val) == 0) { + fnvlist_add_uint64(token_nv, "offset", val); + } + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_BYTES, sizeof (val), 1, &val) == 0) { + fnvlist_add_uint64(token_nv, "bytes", val); + } + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_TOGUID, sizeof (val), 1, &val) == 0) { + fnvlist_add_uint64(token_nv, "toguid", val); + } + if (zap_lookup(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_TONAME, 1, sizeof (buf), buf) == 0) { + fnvlist_add_string(token_nv, "toname", buf); + } + if (zap_contains(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_LARGEBLOCK) == 0) { + fnvlist_add_boolean(token_nv, "largeblockok"); + } + if (zap_contains(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_EMBEDOK) == 0) { + fnvlist_add_boolean(token_nv, "embedok"); + } + if (zap_contains(dp->dp_meta_objset, ds->ds_object, + DS_FIELD_RESUME_COMPRESSOK) == 0) { + fnvlist_add_boolean(token_nv, "compressok"); + } + packed = fnvlist_pack(token_nv, &packed_size); + fnvlist_free(token_nv); + compressed = kmem_alloc(packed_size, KM_SLEEP); + + compressed_size = gzip_compress(packed, compressed, + packed_size, packed_size, 6); + + fletcher_4_native_varsize(compressed, compressed_size, &cksum); + + str = kmem_alloc(compressed_size * 2 + 1, KM_SLEEP); + for (i = 0; i < compressed_size; i++) { + (void) sprintf(str + i * 2, "%02x", compressed[i]); + } + str[compressed_size * 2] = '\0'; + propval = kmem_asprintf("%u-%llx-%llx-%s", + ZFS_SEND_RESUME_TOKEN_VERSION, + (longlong_t)cksum.zc_word[0], + (longlong_t)packed_size, str); + dsl_prop_nvlist_add_string(nv, + ZFS_PROP_RECEIVE_RESUME_TOKEN, propval); + kmem_free(packed, packed_size); + kmem_free(str, compressed_size * 2 + 1); + kmem_free(compressed, packed_size); + strfree(propval); + } +} + +void +dsl_dataset_stats(dsl_dataset_t *ds, nvlist_t *nv) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + uint64_t refd, avail, uobjs, aobjs, ratio; + + ASSERT(dsl_pool_config_held(dp)); + + ratio = dsl_dataset_phys(ds)->ds_compressed_bytes == 0 ? 100 : + (dsl_dataset_phys(ds)->ds_uncompressed_bytes * 100 / + dsl_dataset_phys(ds)->ds_compressed_bytes); + + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_REFRATIO, ratio); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_LOGICALREFERENCED, + dsl_dataset_phys(ds)->ds_uncompressed_bytes); + + if (ds->ds_is_snapshot) { + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_COMPRESSRATIO, ratio); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USED, + dsl_dataset_phys(ds)->ds_unique_bytes); + get_clones_stat(ds, nv); + } else { + if (ds->ds_prev != NULL && ds->ds_prev != dp->dp_origin_snap) { + char buf[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_name(ds->ds_prev, buf); + dsl_prop_nvlist_add_string(nv, ZFS_PROP_PREV_SNAP, buf); + } + + dsl_dir_stats(ds->ds_dir, nv); + } + + dsl_dataset_space(ds, &refd, &avail, &uobjs, &aobjs); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_AVAILABLE, avail); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_REFERENCED, refd); + + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_CREATION, + dsl_dataset_phys(ds)->ds_creation_time); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_CREATETXG, + dsl_dataset_phys(ds)->ds_creation_txg); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_REFQUOTA, + ds->ds_quota); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_REFRESERVATION, + ds->ds_reserved); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_GUID, + dsl_dataset_phys(ds)->ds_guid); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_UNIQUE, + dsl_dataset_phys(ds)->ds_unique_bytes); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_OBJSETID, + ds->ds_object); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USERREFS, + ds->ds_userrefs); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_DEFER_DESTROY, + DS_IS_DEFER_DESTROY(ds) ? 1 : 0); + + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + uint64_t written, comp, uncomp; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + dsl_dataset_t *prev; + int err; + + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &prev); + if (err == 0) { + err = dsl_dataset_space_written(prev, ds, &written, + &comp, &uncomp); + dsl_dataset_rele(prev, FTAG); + if (err == 0) { + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_WRITTEN, + written); + } + } + } + + if (!dsl_dataset_is_snapshot(ds)) { + /* 6 extra bytes for /%recv */ + char recvname[ZFS_MAX_DATASET_NAME_LEN + 6]; + dsl_dataset_t *recv_ds; + + /* + * A failed "newfs" (e.g. full) resumable receive leaves + * the stats set on this dataset. Check here for the prop. + */ + get_receive_resume_stats(ds, nv); + + /* + * A failed incremental resumable receive leaves the + * stats set on our child named "%recv". Check the child + * for the prop. + */ + dsl_dataset_name(ds, recvname); + if (strlcat(recvname, "/", sizeof (recvname)) < + sizeof (recvname) && + strlcat(recvname, recv_clone_name, sizeof (recvname)) < + sizeof (recvname) && + dsl_dataset_hold(dp, recvname, FTAG, &recv_ds) == 0) { + get_receive_resume_stats(recv_ds, nv); + dsl_dataset_rele(recv_ds, FTAG); + } + } +} + +void +dsl_dataset_fast_stat(dsl_dataset_t *ds, dmu_objset_stats_t *stat) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + ASSERT(dsl_pool_config_held(dp)); + + stat->dds_creation_txg = dsl_dataset_phys(ds)->ds_creation_txg; + stat->dds_inconsistent = + dsl_dataset_phys(ds)->ds_flags & DS_FLAG_INCONSISTENT; + stat->dds_guid = dsl_dataset_phys(ds)->ds_guid; + stat->dds_origin[0] = '\0'; + if (ds->ds_is_snapshot) { + stat->dds_is_snapshot = B_TRUE; + stat->dds_num_clones = + dsl_dataset_phys(ds)->ds_num_children - 1; + } else { + stat->dds_is_snapshot = B_FALSE; + stat->dds_num_clones = 0; + + if (dsl_dir_is_clone(ds->ds_dir)) { + dsl_dataset_t *ods; + + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dir_phys(ds->ds_dir)->dd_origin_obj, + FTAG, &ods)); + dsl_dataset_name(ods, stat->dds_origin); + dsl_dataset_rele(ods, FTAG); + } + } +} + +uint64_t +dsl_dataset_fsid_guid(dsl_dataset_t *ds) +{ + return (ds->ds_fsid_guid); +} + +void +dsl_dataset_space(dsl_dataset_t *ds, + uint64_t *refdbytesp, uint64_t *availbytesp, + uint64_t *usedobjsp, uint64_t *availobjsp) +{ + *refdbytesp = dsl_dataset_phys(ds)->ds_referenced_bytes; + *availbytesp = dsl_dir_space_available(ds->ds_dir, NULL, 0, TRUE); + if (ds->ds_reserved > dsl_dataset_phys(ds)->ds_unique_bytes) + *availbytesp += + ds->ds_reserved - dsl_dataset_phys(ds)->ds_unique_bytes; + if (ds->ds_quota != 0) { + /* + * Adjust available bytes according to refquota + */ + if (*refdbytesp < ds->ds_quota) + *availbytesp = MIN(*availbytesp, + ds->ds_quota - *refdbytesp); + else + *availbytesp = 0; + } + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + *usedobjsp = BP_GET_FILL(&dsl_dataset_phys(ds)->ds_bp); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + *availobjsp = DN_MAX_OBJECT - *usedobjsp; +} + +boolean_t +dsl_dataset_modified_since_snap(dsl_dataset_t *ds, dsl_dataset_t *snap) +{ + ASSERTV(dsl_pool_t *dp = ds->ds_dir->dd_pool); + uint64_t birth; + + ASSERT(dsl_pool_config_held(dp)); + if (snap == NULL) + return (B_FALSE); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + birth = dsl_dataset_get_blkptr(ds)->blk_birth; + rrw_exit(&ds->ds_bp_rwlock, FTAG); + if (birth > dsl_dataset_phys(snap)->ds_creation_txg) { + objset_t *os, *os_snap; + /* + * It may be that only the ZIL differs, because it was + * reset in the head. Don't count that as being + * modified. + */ + if (dmu_objset_from_ds(ds, &os) != 0) + return (B_TRUE); + if (dmu_objset_from_ds(snap, &os_snap) != 0) + return (B_TRUE); + return (bcmp(&os->os_phys->os_meta_dnode, + &os_snap->os_phys->os_meta_dnode, + sizeof (os->os_phys->os_meta_dnode)) != 0); + } + return (B_FALSE); +} + +typedef struct dsl_dataset_rename_snapshot_arg { + const char *ddrsa_fsname; + const char *ddrsa_oldsnapname; + const char *ddrsa_newsnapname; + boolean_t ddrsa_recursive; + dmu_tx_t *ddrsa_tx; +} dsl_dataset_rename_snapshot_arg_t; + +/* ARGSUSED */ +static int +dsl_dataset_rename_snapshot_check_impl(dsl_pool_t *dp, + dsl_dataset_t *hds, void *arg) +{ + dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; + int error; + uint64_t val; + + error = dsl_dataset_snap_lookup(hds, ddrsa->ddrsa_oldsnapname, &val); + if (error != 0) { + /* ignore nonexistent snapshots */ + return (error == ENOENT ? 0 : error); + } + + /* new name should not exist */ + error = dsl_dataset_snap_lookup(hds, ddrsa->ddrsa_newsnapname, &val); + if (error == 0) + error = SET_ERROR(EEXIST); + else if (error == ENOENT) + error = 0; + + /* dataset name + 1 for the "@" + the new snapshot name must fit */ + if (dsl_dir_namelen(hds->ds_dir) + 1 + + strlen(ddrsa->ddrsa_newsnapname) >= ZFS_MAX_DATASET_NAME_LEN) + error = SET_ERROR(ENAMETOOLONG); + + return (error); +} + +static int +dsl_dataset_rename_snapshot_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *hds; + int error; + + error = dsl_dataset_hold(dp, ddrsa->ddrsa_fsname, FTAG, &hds); + if (error != 0) + return (error); + + if (ddrsa->ddrsa_recursive) { + error = dmu_objset_find_dp(dp, hds->ds_dir->dd_object, + dsl_dataset_rename_snapshot_check_impl, ddrsa, + DS_FIND_CHILDREN); + } else { + error = dsl_dataset_rename_snapshot_check_impl(dp, hds, ddrsa); + } + dsl_dataset_rele(hds, FTAG); + return (error); +} + +static int +dsl_dataset_rename_snapshot_sync_impl(dsl_pool_t *dp, + dsl_dataset_t *hds, void *arg) +{ + dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; + dsl_dataset_t *ds; + uint64_t val; + dmu_tx_t *tx = ddrsa->ddrsa_tx; + int error; + + error = dsl_dataset_snap_lookup(hds, ddrsa->ddrsa_oldsnapname, &val); + ASSERT(error == 0 || error == ENOENT); + if (error == ENOENT) { + /* ignore nonexistent snapshots */ + return (0); + } + + VERIFY0(dsl_dataset_hold_obj(dp, val, FTAG, &ds)); + + /* log before we change the name */ + spa_history_log_internal_ds(ds, "rename", tx, + "-> @%s", ddrsa->ddrsa_newsnapname); + + VERIFY0(dsl_dataset_snap_remove(hds, ddrsa->ddrsa_oldsnapname, tx, + B_FALSE)); + mutex_enter(&ds->ds_lock); + (void) strlcpy(ds->ds_snapname, ddrsa->ddrsa_newsnapname, + sizeof (ds->ds_snapname)); + mutex_exit(&ds->ds_lock); + VERIFY0(zap_add(dp->dp_meta_objset, + dsl_dataset_phys(hds)->ds_snapnames_zapobj, + ds->ds_snapname, 8, 1, &ds->ds_object, tx)); + zvol_rename_minors(dp->dp_spa, ddrsa->ddrsa_oldsnapname, + ddrsa->ddrsa_newsnapname, B_TRUE); + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_dataset_rename_snapshot_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *hds = NULL; + + VERIFY0(dsl_dataset_hold(dp, ddrsa->ddrsa_fsname, FTAG, &hds)); + ddrsa->ddrsa_tx = tx; + if (ddrsa->ddrsa_recursive) { + VERIFY0(dmu_objset_find_dp(dp, hds->ds_dir->dd_object, + dsl_dataset_rename_snapshot_sync_impl, ddrsa, + DS_FIND_CHILDREN)); + } else { + VERIFY0(dsl_dataset_rename_snapshot_sync_impl(dp, hds, ddrsa)); + } + dsl_dataset_rele(hds, FTAG); +} + +int +dsl_dataset_rename_snapshot(const char *fsname, + const char *oldsnapname, const char *newsnapname, boolean_t recursive) +{ + dsl_dataset_rename_snapshot_arg_t ddrsa; + + ddrsa.ddrsa_fsname = fsname; + ddrsa.ddrsa_oldsnapname = oldsnapname; + ddrsa.ddrsa_newsnapname = newsnapname; + ddrsa.ddrsa_recursive = recursive; + + return (dsl_sync_task(fsname, dsl_dataset_rename_snapshot_check, + dsl_dataset_rename_snapshot_sync, &ddrsa, + 1, ZFS_SPACE_CHECK_RESERVED)); +} + +/* + * If we're doing an ownership handoff, we need to make sure that there is + * only one long hold on the dataset. We're not allowed to change anything here + * so we don't permanently release the long hold or regular hold here. We want + * to do this only when syncing to avoid the dataset unexpectedly going away + * when we release the long hold. + */ +static int +dsl_dataset_handoff_check(dsl_dataset_t *ds, void *owner, dmu_tx_t *tx) +{ + boolean_t held; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + if (owner != NULL) { + VERIFY3P(ds->ds_owner, ==, owner); + dsl_dataset_long_rele(ds, owner); + } + + held = dsl_dataset_long_held(ds); + + if (owner != NULL) + dsl_dataset_long_hold(ds, owner); + + if (held) + return (SET_ERROR(EBUSY)); + + return (0); +} + +typedef struct dsl_dataset_rollback_arg { + const char *ddra_fsname; + const char *ddra_tosnap; + void *ddra_owner; + nvlist_t *ddra_result; +} dsl_dataset_rollback_arg_t; + +static int +dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_rollback_arg_t *ddra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int64_t unused_refres_delta; + int error; + nvpair_t *pair; + nvlist_t *proprequest, *bookmarks; + + error = dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds); + if (error != 0) + return (error); + + /* must not be a snapshot */ + if (ds->ds_is_snapshot) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + /* must have a most recent snapshot */ + if (dsl_dataset_phys(ds)->ds_prev_snap_txg < TXG_INITIAL) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + /* + * No rollback to a snapshot created in the current txg, because + * the rollback may dirty the dataset and create blocks that are + * not reachable from the rootbp while having a birth txg that + * falls into the snapshot's range. + */ + if (dmu_tx_is_syncing(tx) && + dsl_dataset_phys(ds)->ds_prev_snap_txg >= tx->tx_txg) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EAGAIN)); + } + + /* + * If the expected target snapshot is specified, then check that + * the latest snapshot is it. + */ + if (ddra->ddra_tosnap != NULL) { + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + + dsl_dataset_name(ds->ds_prev, namebuf); + if (strcmp(namebuf, ddra->ddra_tosnap) != 0) + return (SET_ERROR(EXDEV)); + } + + /* must not have any bookmarks after the most recent snapshot */ + proprequest = fnvlist_alloc(); + fnvlist_add_boolean(proprequest, zfs_prop_to_name(ZFS_PROP_CREATETXG)); + bookmarks = fnvlist_alloc(); + error = dsl_get_bookmarks_impl(ds, proprequest, bookmarks); + fnvlist_free(proprequest); + if (error != 0) + return (error); + for (pair = nvlist_next_nvpair(bookmarks, NULL); + pair != NULL; pair = nvlist_next_nvpair(bookmarks, pair)) { + nvlist_t *valuenv = + fnvlist_lookup_nvlist(fnvpair_value_nvlist(pair), + zfs_prop_to_name(ZFS_PROP_CREATETXG)); + uint64_t createtxg = fnvlist_lookup_uint64(valuenv, "value"); + if (createtxg > dsl_dataset_phys(ds)->ds_prev_snap_txg) { + fnvlist_free(bookmarks); + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EEXIST)); + } + } + fnvlist_free(bookmarks); + + error = dsl_dataset_handoff_check(ds, ddra->ddra_owner, tx); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + /* + * Check if the snap we are rolling back to uses more than + * the refquota. + */ + if (ds->ds_quota != 0 && + dsl_dataset_phys(ds->ds_prev)->ds_referenced_bytes > ds->ds_quota) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EDQUOT)); + } + + /* + * When we do the clone swap, we will temporarily use more space + * due to the refreservation (the head will no longer have any + * unique space, so the entire amount of the refreservation will need + * to be free). We will immediately destroy the clone, freeing + * this space, but the freeing happens over many txg's. + */ + unused_refres_delta = (int64_t)MIN(ds->ds_reserved, + dsl_dataset_phys(ds)->ds_unique_bytes); + + if (unused_refres_delta > 0 && + unused_refres_delta > + dsl_dir_space_available(ds->ds_dir, NULL, 0, TRUE)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOSPC)); + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_rollback_arg_t *ddra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds, *clone; + uint64_t cloneobj; + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + + VERIFY0(dsl_dataset_hold(dp, ddra->ddra_fsname, FTAG, &ds)); + + dsl_dataset_name(ds->ds_prev, namebuf); + fnvlist_add_string(ddra->ddra_result, "target", namebuf); + + cloneobj = dsl_dataset_create_sync(ds->ds_dir, "%rollback", + ds->ds_prev, DS_CREATE_FLAG_NODIRTY, kcred, tx); + + VERIFY0(dsl_dataset_hold_obj(dp, cloneobj, FTAG, &clone)); + + dsl_dataset_clone_swap_sync_impl(clone, ds, tx); + dsl_dataset_zero_zil(ds, tx); + + dsl_destroy_head_sync_impl(clone, tx); + + dsl_dataset_rele(clone, FTAG); + dsl_dataset_rele(ds, FTAG); +} + +/* + * Rolls back the given filesystem or volume to the most recent snapshot. + * The name of the most recent snapshot will be returned under key "target" + * in the result nvlist. + * + * If owner != NULL: + * - The existing dataset MUST be owned by the specified owner at entry + * - Upon return, dataset will still be held by the same owner, whether we + * succeed or not. + * + * This mode is required any time the existing filesystem is mounted. See + * notes above zfs_suspend_fs() for further details. + */ +int +dsl_dataset_rollback(const char *fsname, const char *tosnap, void *owner, + nvlist_t *result) +{ + dsl_dataset_rollback_arg_t ddra; + + ddra.ddra_fsname = fsname; + ddra.ddra_tosnap = tosnap; + ddra.ddra_owner = owner; + ddra.ddra_result = result; + + return (dsl_sync_task(fsname, dsl_dataset_rollback_check, + dsl_dataset_rollback_sync, &ddra, + 1, ZFS_SPACE_CHECK_RESERVED)); +} + +struct promotenode { + list_node_t link; + dsl_dataset_t *ds; +}; + +typedef struct dsl_dataset_promote_arg { + const char *ddpa_clonename; + dsl_dataset_t *ddpa_clone; + list_t shared_snaps, origin_snaps, clone_snaps; + dsl_dataset_t *origin_origin; /* origin of the origin */ + uint64_t used, comp, uncomp, unique, cloneusedsnap, originusedsnap; + char *err_ds; + cred_t *cr; +} dsl_dataset_promote_arg_t; + +static int snaplist_space(list_t *l, uint64_t mintxg, uint64_t *spacep); +static int promote_hold(dsl_dataset_promote_arg_t *ddpa, dsl_pool_t *dp, + void *tag); +static void promote_rele(dsl_dataset_promote_arg_t *ddpa, void *tag); + +static int +dsl_dataset_promote_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_promote_arg_t *ddpa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *hds; + struct promotenode *snap; + dsl_dataset_t *origin_ds; + int err; + uint64_t unused; + uint64_t ss_mv_cnt; + size_t max_snap_len; + + err = promote_hold(ddpa, dp, FTAG); + if (err != 0) + return (err); + + hds = ddpa->ddpa_clone; + max_snap_len = MAXNAMELEN - strlen(ddpa->ddpa_clonename) - 1; + + if (dsl_dataset_phys(hds)->ds_flags & DS_FLAG_NOPROMOTE) { + promote_rele(ddpa, FTAG); + return (SET_ERROR(EXDEV)); + } + + /* + * Compute and check the amount of space to transfer. Since this is + * so expensive, don't do the preliminary check. + */ + if (!dmu_tx_is_syncing(tx)) { + promote_rele(ddpa, FTAG); + return (0); + } + + snap = list_head(&ddpa->shared_snaps); + if (snap == NULL) { + err = SET_ERROR(ENOENT); + goto out; + } + origin_ds = snap->ds; + + /* compute origin's new unique space */ + snap = list_tail(&ddpa->clone_snaps); + ASSERT3U(dsl_dataset_phys(snap->ds)->ds_prev_snap_obj, ==, + origin_ds->ds_object); + dsl_deadlist_space_range(&snap->ds->ds_deadlist, + dsl_dataset_phys(origin_ds)->ds_prev_snap_txg, UINT64_MAX, + &ddpa->unique, &unused, &unused); + + /* + * Walk the snapshots that we are moving + * + * Compute space to transfer. Consider the incremental changes + * to used by each snapshot: + * (my used) = (prev's used) + (blocks born) - (blocks killed) + * So each snapshot gave birth to: + * (blocks born) = (my used) - (prev's used) + (blocks killed) + * So a sequence would look like: + * (uN - u(N-1) + kN) + ... + (u1 - u0 + k1) + (u0 - 0 + k0) + * Which simplifies to: + * uN + kN + kN-1 + ... + k1 + k0 + * Note however, if we stop before we reach the ORIGIN we get: + * uN + kN + kN-1 + ... + kM - uM-1 + */ + ss_mv_cnt = 0; + ddpa->used = dsl_dataset_phys(origin_ds)->ds_referenced_bytes; + ddpa->comp = dsl_dataset_phys(origin_ds)->ds_compressed_bytes; + ddpa->uncomp = dsl_dataset_phys(origin_ds)->ds_uncompressed_bytes; + for (snap = list_head(&ddpa->shared_snaps); snap; + snap = list_next(&ddpa->shared_snaps, snap)) { + uint64_t val, dlused, dlcomp, dluncomp; + dsl_dataset_t *ds = snap->ds; + + ss_mv_cnt++; + + /* + * If there are long holds, we won't be able to evict + * the objset. + */ + if (dsl_dataset_long_held(ds)) { + err = SET_ERROR(EBUSY); + goto out; + } + + /* Check that the snapshot name does not conflict */ + VERIFY0(dsl_dataset_get_snapname(ds)); + if (strlen(ds->ds_snapname) >= max_snap_len) { + err = SET_ERROR(ENAMETOOLONG); + goto out; + } + err = dsl_dataset_snap_lookup(hds, ds->ds_snapname, &val); + if (err == 0) { + (void) strcpy(ddpa->err_ds, snap->ds->ds_snapname); + err = SET_ERROR(EEXIST); + goto out; + } + if (err != ENOENT) + goto out; + + /* The very first snapshot does not have a deadlist */ + if (dsl_dataset_phys(ds)->ds_prev_snap_obj == 0) + continue; + + dsl_deadlist_space(&ds->ds_deadlist, + &dlused, &dlcomp, &dluncomp); + ddpa->used += dlused; + ddpa->comp += dlcomp; + ddpa->uncomp += dluncomp; + } + + /* + * If we are a clone of a clone then we never reached ORIGIN, + * so we need to subtract out the clone origin's used space. + */ + if (ddpa->origin_origin) { + ddpa->used -= + dsl_dataset_phys(ddpa->origin_origin)->ds_referenced_bytes; + ddpa->comp -= + dsl_dataset_phys(ddpa->origin_origin)->ds_compressed_bytes; + ddpa->uncomp -= + dsl_dataset_phys(ddpa->origin_origin)-> + ds_uncompressed_bytes; + } + + /* Check that there is enough space and limit headroom here */ + err = dsl_dir_transfer_possible(origin_ds->ds_dir, hds->ds_dir, + 0, ss_mv_cnt, ddpa->used, ddpa->cr); + if (err != 0) + goto out; + + /* + * Compute the amounts of space that will be used by snapshots + * after the promotion (for both origin and clone). For each, + * it is the amount of space that will be on all of their + * deadlists (that was not born before their new origin). + */ + if (dsl_dir_phys(hds->ds_dir)->dd_flags & DD_FLAG_USED_BREAKDOWN) { + uint64_t space; + + /* + * Note, typically this will not be a clone of a clone, + * so dd_origin_txg will be < TXG_INITIAL, so + * these snaplist_space() -> dsl_deadlist_space_range() + * calls will be fast because they do not have to + * iterate over all bps. + */ + snap = list_head(&ddpa->origin_snaps); + if (snap == NULL) { + err = SET_ERROR(ENOENT); + goto out; + } + err = snaplist_space(&ddpa->shared_snaps, + snap->ds->ds_dir->dd_origin_txg, &ddpa->cloneusedsnap); + if (err != 0) + goto out; + + err = snaplist_space(&ddpa->clone_snaps, + snap->ds->ds_dir->dd_origin_txg, &space); + if (err != 0) + goto out; + ddpa->cloneusedsnap += space; + } + if (dsl_dir_phys(origin_ds->ds_dir)->dd_flags & + DD_FLAG_USED_BREAKDOWN) { + err = snaplist_space(&ddpa->origin_snaps, + dsl_dataset_phys(origin_ds)->ds_creation_txg, + &ddpa->originusedsnap); + if (err != 0) + goto out; + } + +out: + promote_rele(ddpa, FTAG); + return (err); +} + +static void +dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_promote_arg_t *ddpa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *hds; + struct promotenode *snap; + dsl_dataset_t *origin_ds; + dsl_dataset_t *origin_head; + dsl_dir_t *dd; + dsl_dir_t *odd = NULL; + uint64_t oldnext_obj; + int64_t delta; + + VERIFY0(promote_hold(ddpa, dp, FTAG)); + hds = ddpa->ddpa_clone; + + ASSERT0(dsl_dataset_phys(hds)->ds_flags & DS_FLAG_NOPROMOTE); + + snap = list_head(&ddpa->shared_snaps); + origin_ds = snap->ds; + dd = hds->ds_dir; + + snap = list_head(&ddpa->origin_snaps); + origin_head = snap->ds; + + /* + * We need to explicitly open odd, since origin_ds's dd will be + * changing. + */ + VERIFY0(dsl_dir_hold_obj(dp, origin_ds->ds_dir->dd_object, + NULL, FTAG, &odd)); + + /* change origin's next snap */ + dmu_buf_will_dirty(origin_ds->ds_dbuf, tx); + oldnext_obj = dsl_dataset_phys(origin_ds)->ds_next_snap_obj; + snap = list_tail(&ddpa->clone_snaps); + ASSERT3U(dsl_dataset_phys(snap->ds)->ds_prev_snap_obj, ==, + origin_ds->ds_object); + dsl_dataset_phys(origin_ds)->ds_next_snap_obj = snap->ds->ds_object; + + /* change the origin's next clone */ + if (dsl_dataset_phys(origin_ds)->ds_next_clones_obj) { + dsl_dataset_remove_from_next_clones(origin_ds, + snap->ds->ds_object, tx); + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dataset_phys(origin_ds)->ds_next_clones_obj, + oldnext_obj, tx)); + } + + /* change origin */ + dmu_buf_will_dirty(dd->dd_dbuf, tx); + ASSERT3U(dsl_dir_phys(dd)->dd_origin_obj, ==, origin_ds->ds_object); + dsl_dir_phys(dd)->dd_origin_obj = dsl_dir_phys(odd)->dd_origin_obj; + dd->dd_origin_txg = origin_head->ds_dir->dd_origin_txg; + dmu_buf_will_dirty(odd->dd_dbuf, tx); + dsl_dir_phys(odd)->dd_origin_obj = origin_ds->ds_object; + origin_head->ds_dir->dd_origin_txg = + dsl_dataset_phys(origin_ds)->ds_creation_txg; + + /* change dd_clone entries */ + if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { + VERIFY0(zap_remove_int(dp->dp_meta_objset, + dsl_dir_phys(odd)->dd_clones, hds->ds_object, tx)); + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dir_phys(ddpa->origin_origin->ds_dir)->dd_clones, + hds->ds_object, tx)); + + VERIFY0(zap_remove_int(dp->dp_meta_objset, + dsl_dir_phys(ddpa->origin_origin->ds_dir)->dd_clones, + origin_head->ds_object, tx)); + if (dsl_dir_phys(dd)->dd_clones == 0) { + dsl_dir_phys(dd)->dd_clones = + zap_create(dp->dp_meta_objset, DMU_OT_DSL_CLONES, + DMU_OT_NONE, 0, tx); + } + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_clones, origin_head->ds_object, tx)); + } + + /* move snapshots to this dir */ + for (snap = list_head(&ddpa->shared_snaps); snap; + snap = list_next(&ddpa->shared_snaps, snap)) { + dsl_dataset_t *ds = snap->ds; + + /* + * Property callbacks are registered to a particular + * dsl_dir. Since ours is changing, evict the objset + * so that they will be unregistered from the old dsl_dir. + */ + if (ds->ds_objset) { + dmu_objset_evict(ds->ds_objset); + ds->ds_objset = NULL; + } + + /* move snap name entry */ + VERIFY0(dsl_dataset_get_snapname(ds)); + VERIFY0(dsl_dataset_snap_remove(origin_head, + ds->ds_snapname, tx, B_TRUE)); + VERIFY0(zap_add(dp->dp_meta_objset, + dsl_dataset_phys(hds)->ds_snapnames_zapobj, ds->ds_snapname, + 8, 1, &ds->ds_object, tx)); + dsl_fs_ss_count_adjust(hds->ds_dir, 1, + DD_FIELD_SNAPSHOT_COUNT, tx); + + /* change containing dsl_dir */ + dmu_buf_will_dirty(ds->ds_dbuf, tx); + ASSERT3U(dsl_dataset_phys(ds)->ds_dir_obj, ==, odd->dd_object); + dsl_dataset_phys(ds)->ds_dir_obj = dd->dd_object; + ASSERT3P(ds->ds_dir, ==, odd); + dsl_dir_rele(ds->ds_dir, ds); + VERIFY0(dsl_dir_hold_obj(dp, dd->dd_object, + NULL, ds, &ds->ds_dir)); + + /* move any clone references */ + if (dsl_dataset_phys(ds)->ds_next_clones_obj && + spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { + zap_cursor_t zc; + zap_attribute_t za; + + for (zap_cursor_init(&zc, dp->dp_meta_objset, + dsl_dataset_phys(ds)->ds_next_clones_obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + dsl_dataset_t *cnds; + uint64_t o; + + if (za.za_first_integer == oldnext_obj) { + /* + * We've already moved the + * origin's reference. + */ + continue; + } + + VERIFY0(dsl_dataset_hold_obj(dp, + za.za_first_integer, FTAG, &cnds)); + o = dsl_dir_phys(cnds->ds_dir)-> + dd_head_dataset_obj; + + VERIFY0(zap_remove_int(dp->dp_meta_objset, + dsl_dir_phys(odd)->dd_clones, o, tx)); + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_clones, o, tx)); + dsl_dataset_rele(cnds, FTAG); + } + zap_cursor_fini(&zc); + } + + ASSERT(!dsl_prop_hascb(ds)); + } + + /* + * Change space accounting. + * Note, pa->*usedsnap and dd_used_breakdown[SNAP] will either + * both be valid, or both be 0 (resulting in delta == 0). This + * is true for each of {clone,origin} independently. + */ + + delta = ddpa->cloneusedsnap - + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_SNAP]; + ASSERT3S(delta, >=, 0); + ASSERT3U(ddpa->used, >=, delta); + dsl_dir_diduse_space(dd, DD_USED_SNAP, delta, 0, 0, tx); + dsl_dir_diduse_space(dd, DD_USED_HEAD, + ddpa->used - delta, ddpa->comp, ddpa->uncomp, tx); + + delta = ddpa->originusedsnap - + dsl_dir_phys(odd)->dd_used_breakdown[DD_USED_SNAP]; + ASSERT3S(delta, <=, 0); + ASSERT3U(ddpa->used, >=, -delta); + dsl_dir_diduse_space(odd, DD_USED_SNAP, delta, 0, 0, tx); + dsl_dir_diduse_space(odd, DD_USED_HEAD, + -ddpa->used - delta, -ddpa->comp, -ddpa->uncomp, tx); + + dsl_dataset_phys(origin_ds)->ds_unique_bytes = ddpa->unique; + + /* log history record */ + spa_history_log_internal_ds(hds, "promote", tx, ""); + + dsl_dir_rele(odd, FTAG); + promote_rele(ddpa, FTAG); +} + +/* + * Make a list of dsl_dataset_t's for the snapshots between first_obj + * (exclusive) and last_obj (inclusive). The list will be in reverse + * order (last_obj will be the list_head()). If first_obj == 0, do all + * snapshots back to this dataset's origin. + */ +static int +snaplist_make(dsl_pool_t *dp, + uint64_t first_obj, uint64_t last_obj, list_t *l, void *tag) +{ + uint64_t obj = last_obj; + + list_create(l, sizeof (struct promotenode), + offsetof(struct promotenode, link)); + + while (obj != first_obj) { + dsl_dataset_t *ds; + struct promotenode *snap; + int err; + + err = dsl_dataset_hold_obj(dp, obj, tag, &ds); + ASSERT(err != ENOENT); + if (err != 0) + return (err); + + if (first_obj == 0) + first_obj = dsl_dir_phys(ds->ds_dir)->dd_origin_obj; + + snap = kmem_alloc(sizeof (*snap), KM_SLEEP); + snap->ds = ds; + list_insert_tail(l, snap); + obj = dsl_dataset_phys(ds)->ds_prev_snap_obj; + } + + return (0); +} + +static int +snaplist_space(list_t *l, uint64_t mintxg, uint64_t *spacep) +{ + struct promotenode *snap; + + *spacep = 0; + for (snap = list_head(l); snap; snap = list_next(l, snap)) { + uint64_t used, comp, uncomp; + dsl_deadlist_space_range(&snap->ds->ds_deadlist, + mintxg, UINT64_MAX, &used, &comp, &uncomp); + *spacep += used; + } + return (0); +} + +static void +snaplist_destroy(list_t *l, void *tag) +{ + struct promotenode *snap; + + if (l == NULL || !list_link_active(&l->list_head)) + return; + + while ((snap = list_tail(l)) != NULL) { + list_remove(l, snap); + dsl_dataset_rele(snap->ds, tag); + kmem_free(snap, sizeof (*snap)); + } + list_destroy(l); +} + +static int +promote_hold(dsl_dataset_promote_arg_t *ddpa, dsl_pool_t *dp, void *tag) +{ + int error; + dsl_dir_t *dd; + struct promotenode *snap; + + error = dsl_dataset_hold(dp, ddpa->ddpa_clonename, tag, + &ddpa->ddpa_clone); + if (error != 0) + return (error); + dd = ddpa->ddpa_clone->ds_dir; + + if (ddpa->ddpa_clone->ds_is_snapshot || + !dsl_dir_is_clone(dd)) { + dsl_dataset_rele(ddpa->ddpa_clone, tag); + return (SET_ERROR(EINVAL)); + } + + error = snaplist_make(dp, 0, dsl_dir_phys(dd)->dd_origin_obj, + &ddpa->shared_snaps, tag); + if (error != 0) + goto out; + + error = snaplist_make(dp, 0, ddpa->ddpa_clone->ds_object, + &ddpa->clone_snaps, tag); + if (error != 0) + goto out; + + snap = list_head(&ddpa->shared_snaps); + ASSERT3U(snap->ds->ds_object, ==, dsl_dir_phys(dd)->dd_origin_obj); + error = snaplist_make(dp, dsl_dir_phys(dd)->dd_origin_obj, + dsl_dir_phys(snap->ds->ds_dir)->dd_head_dataset_obj, + &ddpa->origin_snaps, tag); + if (error != 0) + goto out; + + if (dsl_dir_phys(snap->ds->ds_dir)->dd_origin_obj != 0) { + error = dsl_dataset_hold_obj(dp, + dsl_dir_phys(snap->ds->ds_dir)->dd_origin_obj, + tag, &ddpa->origin_origin); + if (error != 0) + goto out; + } +out: + if (error != 0) + promote_rele(ddpa, tag); + return (error); +} + +static void +promote_rele(dsl_dataset_promote_arg_t *ddpa, void *tag) +{ + snaplist_destroy(&ddpa->shared_snaps, tag); + snaplist_destroy(&ddpa->clone_snaps, tag); + snaplist_destroy(&ddpa->origin_snaps, tag); + if (ddpa->origin_origin != NULL) + dsl_dataset_rele(ddpa->origin_origin, tag); + dsl_dataset_rele(ddpa->ddpa_clone, tag); +} + +/* + * Promote a clone. + * + * If it fails due to a conflicting snapshot name, "conflsnap" will be filled + * in with the name. (It must be at least ZFS_MAX_DATASET_NAME_LEN bytes long.) + */ +int +dsl_dataset_promote(const char *name, char *conflsnap) +{ + dsl_dataset_promote_arg_t ddpa = { 0 }; + uint64_t numsnaps; + int error; + objset_t *os; + + /* + * We will modify space proportional to the number of + * snapshots. Compute numsnaps. + */ + error = dmu_objset_hold(name, FTAG, &os); + if (error != 0) + return (error); + error = zap_count(dmu_objset_pool(os)->dp_meta_objset, + dsl_dataset_phys(dmu_objset_ds(os))->ds_snapnames_zapobj, + &numsnaps); + dmu_objset_rele(os, FTAG); + if (error != 0) + return (error); + + ddpa.ddpa_clonename = name; + ddpa.err_ds = conflsnap; + ddpa.cr = CRED(); + + return (dsl_sync_task(name, dsl_dataset_promote_check, + dsl_dataset_promote_sync, &ddpa, + 2 + numsnaps, ZFS_SPACE_CHECK_RESERVED)); +} + +int +dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone, + dsl_dataset_t *origin_head, boolean_t force, void *owner, dmu_tx_t *tx) +{ + /* + * "slack" factor for received datasets with refquota set on them. + * See the bottom of this function for details on its use. + */ + uint64_t refquota_slack = (uint64_t)DMU_MAX_ACCESS * + spa_asize_inflation; + int64_t unused_refres_delta; + + /* they should both be heads */ + if (clone->ds_is_snapshot || + origin_head->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + /* if we are not forcing, the branch point should be just before them */ + if (!force && clone->ds_prev != origin_head->ds_prev) + return (SET_ERROR(EINVAL)); + + /* clone should be the clone (unless they are unrelated) */ + if (clone->ds_prev != NULL && + clone->ds_prev != clone->ds_dir->dd_pool->dp_origin_snap && + origin_head->ds_dir != clone->ds_prev->ds_dir) + return (SET_ERROR(EINVAL)); + + /* the clone should be a child of the origin */ + if (clone->ds_dir->dd_parent != origin_head->ds_dir) + return (SET_ERROR(EINVAL)); + + /* origin_head shouldn't be modified unless 'force' */ + if (!force && + dsl_dataset_modified_since_snap(origin_head, origin_head->ds_prev)) + return (SET_ERROR(ETXTBSY)); + + /* origin_head should have no long holds (e.g. is not mounted) */ + if (dsl_dataset_handoff_check(origin_head, owner, tx)) + return (SET_ERROR(EBUSY)); + + /* check amount of any unconsumed refreservation */ + unused_refres_delta = + (int64_t)MIN(origin_head->ds_reserved, + dsl_dataset_phys(origin_head)->ds_unique_bytes) - + (int64_t)MIN(origin_head->ds_reserved, + dsl_dataset_phys(clone)->ds_unique_bytes); + + if (unused_refres_delta > 0 && + unused_refres_delta > + dsl_dir_space_available(origin_head->ds_dir, NULL, 0, TRUE)) + return (SET_ERROR(ENOSPC)); + + /* + * The clone can't be too much over the head's refquota. + * + * To ensure that the entire refquota can be used, we allow one + * transaction to exceed the the refquota. Therefore, this check + * needs to also allow for the space referenced to be more than the + * refquota. The maximum amount of space that one transaction can use + * on disk is DMU_MAX_ACCESS * spa_asize_inflation. Allowing this + * overage ensures that we are able to receive a filesystem that + * exceeds the refquota on the source system. + * + * So that overage is the refquota_slack we use below. + */ + if (origin_head->ds_quota != 0 && + dsl_dataset_phys(clone)->ds_referenced_bytes > + origin_head->ds_quota + refquota_slack) + return (SET_ERROR(EDQUOT)); + + return (0); +} + +void +dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone, + dsl_dataset_t *origin_head, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dmu_tx_pool(tx); + int64_t unused_refres_delta; + blkptr_t tmp; + + ASSERT(clone->ds_reserved == 0); + /* + * NOTE: On DEBUG kernels there could be a race between this and + * the check function if spa_asize_inflation is adjusted... + */ + ASSERT(origin_head->ds_quota == 0 || + dsl_dataset_phys(clone)->ds_unique_bytes <= origin_head->ds_quota + + DMU_MAX_ACCESS * spa_asize_inflation); + ASSERT3P(clone->ds_prev, ==, origin_head->ds_prev); + + /* + * Swap per-dataset feature flags. + */ + for (spa_feature_t f = 0; f < SPA_FEATURES; f++) { + boolean_t clone_inuse; + boolean_t origin_head_inuse; + + if (!(spa_feature_table[f].fi_flags & + ZFEATURE_FLAG_PER_DATASET)) { + ASSERT(!clone->ds_feature_inuse[f]); + ASSERT(!origin_head->ds_feature_inuse[f]); + continue; + } + + clone_inuse = clone->ds_feature_inuse[f]; + origin_head_inuse = origin_head->ds_feature_inuse[f]; + + if (clone_inuse) { + dsl_dataset_deactivate_feature(clone->ds_object, f, tx); + clone->ds_feature_inuse[f] = B_FALSE; + } + if (origin_head_inuse) { + dsl_dataset_deactivate_feature(origin_head->ds_object, + f, tx); + origin_head->ds_feature_inuse[f] = B_FALSE; + } + if (clone_inuse) { + dsl_dataset_activate_feature(origin_head->ds_object, + f, tx); + origin_head->ds_feature_inuse[f] = B_TRUE; + } + if (origin_head_inuse) { + dsl_dataset_activate_feature(clone->ds_object, f, tx); + clone->ds_feature_inuse[f] = B_TRUE; + } + } + + dmu_buf_will_dirty(clone->ds_dbuf, tx); + dmu_buf_will_dirty(origin_head->ds_dbuf, tx); + + if (clone->ds_objset != NULL) { + dmu_objset_evict(clone->ds_objset); + clone->ds_objset = NULL; + } + + if (origin_head->ds_objset != NULL) { + dmu_objset_evict(origin_head->ds_objset); + origin_head->ds_objset = NULL; + } + + unused_refres_delta = + (int64_t)MIN(origin_head->ds_reserved, + dsl_dataset_phys(origin_head)->ds_unique_bytes) - + (int64_t)MIN(origin_head->ds_reserved, + dsl_dataset_phys(clone)->ds_unique_bytes); + + /* + * Reset origin's unique bytes, if it exists. + */ + if (clone->ds_prev) { + dsl_dataset_t *origin = clone->ds_prev; + uint64_t comp, uncomp; + + dmu_buf_will_dirty(origin->ds_dbuf, tx); + dsl_deadlist_space_range(&clone->ds_deadlist, + dsl_dataset_phys(origin)->ds_prev_snap_txg, UINT64_MAX, + &dsl_dataset_phys(origin)->ds_unique_bytes, &comp, &uncomp); + } + + /* swap blkptrs */ + { + rrw_enter(&clone->ds_bp_rwlock, RW_WRITER, FTAG); + rrw_enter(&origin_head->ds_bp_rwlock, RW_WRITER, FTAG); + tmp = dsl_dataset_phys(origin_head)->ds_bp; + dsl_dataset_phys(origin_head)->ds_bp = + dsl_dataset_phys(clone)->ds_bp; + dsl_dataset_phys(clone)->ds_bp = tmp; + rrw_exit(&origin_head->ds_bp_rwlock, FTAG); + rrw_exit(&clone->ds_bp_rwlock, FTAG); + } + + /* set dd_*_bytes */ + { + int64_t dused, dcomp, duncomp; + uint64_t cdl_used, cdl_comp, cdl_uncomp; + uint64_t odl_used, odl_comp, odl_uncomp; + + ASSERT3U(dsl_dir_phys(clone->ds_dir)-> + dd_used_breakdown[DD_USED_SNAP], ==, 0); + + dsl_deadlist_space(&clone->ds_deadlist, + &cdl_used, &cdl_comp, &cdl_uncomp); + dsl_deadlist_space(&origin_head->ds_deadlist, + &odl_used, &odl_comp, &odl_uncomp); + + dused = dsl_dataset_phys(clone)->ds_referenced_bytes + + cdl_used - + (dsl_dataset_phys(origin_head)->ds_referenced_bytes + + odl_used); + dcomp = dsl_dataset_phys(clone)->ds_compressed_bytes + + cdl_comp - + (dsl_dataset_phys(origin_head)->ds_compressed_bytes + + odl_comp); + duncomp = dsl_dataset_phys(clone)->ds_uncompressed_bytes + + cdl_uncomp - + (dsl_dataset_phys(origin_head)->ds_uncompressed_bytes + + odl_uncomp); + + dsl_dir_diduse_space(origin_head->ds_dir, DD_USED_HEAD, + dused, dcomp, duncomp, tx); + dsl_dir_diduse_space(clone->ds_dir, DD_USED_HEAD, + -dused, -dcomp, -duncomp, tx); + + /* + * The difference in the space used by snapshots is the + * difference in snapshot space due to the head's + * deadlist (since that's the only thing that's + * changing that affects the snapused). + */ + dsl_deadlist_space_range(&clone->ds_deadlist, + origin_head->ds_dir->dd_origin_txg, UINT64_MAX, + &cdl_used, &cdl_comp, &cdl_uncomp); + dsl_deadlist_space_range(&origin_head->ds_deadlist, + origin_head->ds_dir->dd_origin_txg, UINT64_MAX, + &odl_used, &odl_comp, &odl_uncomp); + dsl_dir_transfer_space(origin_head->ds_dir, cdl_used - odl_used, + DD_USED_HEAD, DD_USED_SNAP, tx); + } + + /* swap ds_*_bytes */ + SWITCH64(dsl_dataset_phys(origin_head)->ds_referenced_bytes, + dsl_dataset_phys(clone)->ds_referenced_bytes); + SWITCH64(dsl_dataset_phys(origin_head)->ds_compressed_bytes, + dsl_dataset_phys(clone)->ds_compressed_bytes); + SWITCH64(dsl_dataset_phys(origin_head)->ds_uncompressed_bytes, + dsl_dataset_phys(clone)->ds_uncompressed_bytes); + SWITCH64(dsl_dataset_phys(origin_head)->ds_unique_bytes, + dsl_dataset_phys(clone)->ds_unique_bytes); + + /* apply any parent delta for change in unconsumed refreservation */ + dsl_dir_diduse_space(origin_head->ds_dir, DD_USED_REFRSRV, + unused_refres_delta, 0, 0, tx); + + /* + * Swap deadlists. + */ + dsl_deadlist_close(&clone->ds_deadlist); + dsl_deadlist_close(&origin_head->ds_deadlist); + SWITCH64(dsl_dataset_phys(origin_head)->ds_deadlist_obj, + dsl_dataset_phys(clone)->ds_deadlist_obj); + dsl_deadlist_open(&clone->ds_deadlist, dp->dp_meta_objset, + dsl_dataset_phys(clone)->ds_deadlist_obj); + dsl_deadlist_open(&origin_head->ds_deadlist, dp->dp_meta_objset, + dsl_dataset_phys(origin_head)->ds_deadlist_obj); + + dsl_scan_ds_clone_swapped(origin_head, clone, tx); + + spa_history_log_internal_ds(clone, "clone swap", tx, + "parent=%s", origin_head->ds_dir->dd_myname); +} + +/* + * Given a pool name and a dataset object number in that pool, + * return the name of that dataset. + */ +int +dsl_dsobj_to_dsname(char *pname, uint64_t obj, char *buf) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int error; + + error = dsl_pool_hold(pname, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold_obj(dp, obj, FTAG, &ds); + if (error == 0) { + dsl_dataset_name(ds, buf); + dsl_dataset_rele(ds, FTAG); + } + dsl_pool_rele(dp, FTAG); + + return (error); +} + +int +dsl_dataset_check_quota(dsl_dataset_t *ds, boolean_t check_quota, + uint64_t asize, uint64_t inflight, uint64_t *used, uint64_t *ref_rsrv) +{ + int error = 0; + + ASSERT3S(asize, >, 0); + + /* + * *ref_rsrv is the portion of asize that will come from any + * unconsumed refreservation space. + */ + *ref_rsrv = 0; + + mutex_enter(&ds->ds_lock); + /* + * Make a space adjustment for reserved bytes. + */ + if (ds->ds_reserved > dsl_dataset_phys(ds)->ds_unique_bytes) { + ASSERT3U(*used, >=, + ds->ds_reserved - dsl_dataset_phys(ds)->ds_unique_bytes); + *used -= + (ds->ds_reserved - dsl_dataset_phys(ds)->ds_unique_bytes); + *ref_rsrv = + asize - MIN(asize, parent_delta(ds, asize + inflight)); + } + + if (!check_quota || ds->ds_quota == 0) { + mutex_exit(&ds->ds_lock); + return (0); + } + /* + * If they are requesting more space, and our current estimate + * is over quota, they get to try again unless the actual + * on-disk is over quota and there are no pending changes (which + * may free up space for us). + */ + if (dsl_dataset_phys(ds)->ds_referenced_bytes + inflight >= + ds->ds_quota) { + if (inflight > 0 || + dsl_dataset_phys(ds)->ds_referenced_bytes < ds->ds_quota) + error = SET_ERROR(ERESTART); + else + error = SET_ERROR(EDQUOT); + } + mutex_exit(&ds->ds_lock); + + return (error); +} + +typedef struct dsl_dataset_set_qr_arg { + const char *ddsqra_name; + zprop_source_t ddsqra_source; + uint64_t ddsqra_value; +} dsl_dataset_set_qr_arg_t; + + +/* ARGSUSED */ +static int +dsl_dataset_set_refquota_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int error; + uint64_t newval; + + if (spa_version(dp->dp_spa) < SPA_VERSION_REFQUOTA) + return (SET_ERROR(ENOTSUP)); + + error = dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds); + if (error != 0) + return (error); + + if (ds->ds_is_snapshot) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = dsl_prop_predict(ds->ds_dir, + zfs_prop_to_name(ZFS_PROP_REFQUOTA), + ddsqra->ddsqra_source, ddsqra->ddsqra_value, &newval); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + if (newval == 0) { + dsl_dataset_rele(ds, FTAG); + return (0); + } + + if (newval < dsl_dataset_phys(ds)->ds_referenced_bytes || + newval < ds->ds_reserved) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOSPC)); + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_dataset_set_refquota_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds = NULL; + uint64_t newval; + + VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds)); + + dsl_prop_set_sync_impl(ds, + zfs_prop_to_name(ZFS_PROP_REFQUOTA), + ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1, + &ddsqra->ddsqra_value, tx); + + VERIFY0(dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_REFQUOTA), &newval)); + + if (ds->ds_quota != newval) { + dmu_buf_will_dirty(ds->ds_dbuf, tx); + ds->ds_quota = newval; + } + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_dataset_set_refquota(const char *dsname, zprop_source_t source, + uint64_t refquota) +{ + dsl_dataset_set_qr_arg_t ddsqra; + + ddsqra.ddsqra_name = dsname; + ddsqra.ddsqra_source = source; + ddsqra.ddsqra_value = refquota; + + return (dsl_sync_task(dsname, dsl_dataset_set_refquota_check, + dsl_dataset_set_refquota_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); +} + +static int +dsl_dataset_set_refreservation_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int error; + uint64_t newval, unique; + + if (spa_version(dp->dp_spa) < SPA_VERSION_REFRESERVATION) + return (SET_ERROR(ENOTSUP)); + + error = dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds); + if (error != 0) + return (error); + + if (ds->ds_is_snapshot) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = dsl_prop_predict(ds->ds_dir, + zfs_prop_to_name(ZFS_PROP_REFRESERVATION), + ddsqra->ddsqra_source, ddsqra->ddsqra_value, &newval); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + /* + * If we are doing the preliminary check in open context, the + * space estimates may be inaccurate. + */ + if (!dmu_tx_is_syncing(tx)) { + dsl_dataset_rele(ds, FTAG); + return (0); + } + + mutex_enter(&ds->ds_lock); + if (!DS_UNIQUE_IS_ACCURATE(ds)) + dsl_dataset_recalc_head_uniq(ds); + unique = dsl_dataset_phys(ds)->ds_unique_bytes; + mutex_exit(&ds->ds_lock); + + if (MAX(unique, newval) > MAX(unique, ds->ds_reserved)) { + uint64_t delta = MAX(unique, newval) - + MAX(unique, ds->ds_reserved); + + if (delta > + dsl_dir_space_available(ds->ds_dir, NULL, 0, B_TRUE) || + (ds->ds_quota > 0 && newval > ds->ds_quota)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOSPC)); + } + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +void +dsl_dataset_set_refreservation_sync_impl(dsl_dataset_t *ds, + zprop_source_t source, uint64_t value, dmu_tx_t *tx) +{ + uint64_t newval; + uint64_t unique; + int64_t delta; + + dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_REFRESERVATION), + source, sizeof (value), 1, &value, tx); + + VERIFY0(dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_REFRESERVATION), &newval)); + + dmu_buf_will_dirty(ds->ds_dbuf, tx); + mutex_enter(&ds->ds_dir->dd_lock); + mutex_enter(&ds->ds_lock); + ASSERT(DS_UNIQUE_IS_ACCURATE(ds)); + unique = dsl_dataset_phys(ds)->ds_unique_bytes; + delta = MAX(0, (int64_t)(newval - unique)) - + MAX(0, (int64_t)(ds->ds_reserved - unique)); + ds->ds_reserved = newval; + mutex_exit(&ds->ds_lock); + + dsl_dir_diduse_space(ds->ds_dir, DD_USED_REFRSRV, delta, 0, 0, tx); + mutex_exit(&ds->ds_dir->dd_lock); +} + +static void +dsl_dataset_set_refreservation_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds = NULL; + + VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds)); + dsl_dataset_set_refreservation_sync_impl(ds, + ddsqra->ddsqra_source, ddsqra->ddsqra_value, tx); + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_dataset_set_refreservation(const char *dsname, zprop_source_t source, + uint64_t refreservation) +{ + dsl_dataset_set_qr_arg_t ddsqra; + + ddsqra.ddsqra_name = dsname; + ddsqra.ddsqra_source = source; + ddsqra.ddsqra_value = refreservation; + + return (dsl_sync_task(dsname, dsl_dataset_set_refreservation_check, + dsl_dataset_set_refreservation_sync, &ddsqra, + 0, ZFS_SPACE_CHECK_NONE)); +} + +/* + * Return (in *usedp) the amount of space written in new that is not + * present in oldsnap. New may be a snapshot or the head. Old must be + * a snapshot before new, in new's filesystem (or its origin). If not then + * fail and return EINVAL. + * + * The written space is calculated by considering two components: First, we + * ignore any freed space, and calculate the written as new's used space + * minus old's used space. Next, we add in the amount of space that was freed + * between the two snapshots, thus reducing new's used space relative to old's. + * Specifically, this is the space that was born before old->ds_creation_txg, + * and freed before new (ie. on new's deadlist or a previous deadlist). + * + * space freed [---------------------] + * snapshots ---O-------O--------O-------O------ + * oldsnap new + */ +int +dsl_dataset_space_written(dsl_dataset_t *oldsnap, dsl_dataset_t *new, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + int err = 0; + uint64_t snapobj; + dsl_pool_t *dp = new->ds_dir->dd_pool; + + ASSERT(dsl_pool_config_held(dp)); + + *usedp = 0; + *usedp += dsl_dataset_phys(new)->ds_referenced_bytes; + *usedp -= dsl_dataset_phys(oldsnap)->ds_referenced_bytes; + + *compp = 0; + *compp += dsl_dataset_phys(new)->ds_compressed_bytes; + *compp -= dsl_dataset_phys(oldsnap)->ds_compressed_bytes; + + *uncompp = 0; + *uncompp += dsl_dataset_phys(new)->ds_uncompressed_bytes; + *uncompp -= dsl_dataset_phys(oldsnap)->ds_uncompressed_bytes; + + snapobj = new->ds_object; + while (snapobj != oldsnap->ds_object) { + dsl_dataset_t *snap; + uint64_t used, comp, uncomp; + + if (snapobj == new->ds_object) { + snap = new; + } else { + err = dsl_dataset_hold_obj(dp, snapobj, FTAG, &snap); + if (err != 0) + break; + } + + if (dsl_dataset_phys(snap)->ds_prev_snap_txg == + dsl_dataset_phys(oldsnap)->ds_creation_txg) { + /* + * The blocks in the deadlist can not be born after + * ds_prev_snap_txg, so get the whole deadlist space, + * which is more efficient (especially for old-format + * deadlists). Unfortunately the deadlist code + * doesn't have enough information to make this + * optimization itself. + */ + dsl_deadlist_space(&snap->ds_deadlist, + &used, &comp, &uncomp); + } else { + dsl_deadlist_space_range(&snap->ds_deadlist, + 0, dsl_dataset_phys(oldsnap)->ds_creation_txg, + &used, &comp, &uncomp); + } + *usedp += used; + *compp += comp; + *uncompp += uncomp; + + /* + * If we get to the beginning of the chain of snapshots + * (ds_prev_snap_obj == 0) before oldsnap, then oldsnap + * was not a snapshot of/before new. + */ + snapobj = dsl_dataset_phys(snap)->ds_prev_snap_obj; + if (snap != new) + dsl_dataset_rele(snap, FTAG); + if (snapobj == 0) { + err = SET_ERROR(EINVAL); + break; + } + + } + return (err); +} + +/* + * Return (in *usedp) the amount of space that will be reclaimed if firstsnap, + * lastsnap, and all snapshots in between are deleted. + * + * blocks that would be freed [---------------------------] + * snapshots ---O-------O--------O-------O--------O + * firstsnap lastsnap + * + * This is the set of blocks that were born after the snap before firstsnap, + * (birth > firstsnap->prev_snap_txg) and died before the snap after the + * last snap (ie, is on lastsnap->ds_next->ds_deadlist or an earlier deadlist). + * We calculate this by iterating over the relevant deadlists (from the snap + * after lastsnap, backward to the snap after firstsnap), summing up the + * space on the deadlist that was born after the snap before firstsnap. + */ +int +dsl_dataset_space_wouldfree(dsl_dataset_t *firstsnap, + dsl_dataset_t *lastsnap, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + int err = 0; + uint64_t snapobj; + dsl_pool_t *dp = firstsnap->ds_dir->dd_pool; + + ASSERT(firstsnap->ds_is_snapshot); + ASSERT(lastsnap->ds_is_snapshot); + + /* + * Check that the snapshots are in the same dsl_dir, and firstsnap + * is before lastsnap. + */ + if (firstsnap->ds_dir != lastsnap->ds_dir || + dsl_dataset_phys(firstsnap)->ds_creation_txg > + dsl_dataset_phys(lastsnap)->ds_creation_txg) + return (SET_ERROR(EINVAL)); + + *usedp = *compp = *uncompp = 0; + + snapobj = dsl_dataset_phys(lastsnap)->ds_next_snap_obj; + while (snapobj != firstsnap->ds_object) { + dsl_dataset_t *ds; + uint64_t used, comp, uncomp; + + err = dsl_dataset_hold_obj(dp, snapobj, FTAG, &ds); + if (err != 0) + break; + + dsl_deadlist_space_range(&ds->ds_deadlist, + dsl_dataset_phys(firstsnap)->ds_prev_snap_txg, UINT64_MAX, + &used, &comp, &uncomp); + *usedp += used; + *compp += comp; + *uncompp += uncomp; + + snapobj = dsl_dataset_phys(ds)->ds_prev_snap_obj; + ASSERT3U(snapobj, !=, 0); + dsl_dataset_rele(ds, FTAG); + } + return (err); +} + +/* + * Return TRUE if 'earlier' is an earlier snapshot in 'later's timeline. + * For example, they could both be snapshots of the same filesystem, and + * 'earlier' is before 'later'. Or 'earlier' could be the origin of + * 'later's filesystem. Or 'earlier' could be an older snapshot in the origin's + * filesystem. Or 'earlier' could be the origin's origin. + * + * If non-zero, earlier_txg is used instead of earlier's ds_creation_txg. + */ +boolean_t +dsl_dataset_is_before(dsl_dataset_t *later, dsl_dataset_t *earlier, + uint64_t earlier_txg) +{ + dsl_pool_t *dp = later->ds_dir->dd_pool; + int error; + boolean_t ret; + dsl_dataset_t *origin; + + ASSERT(dsl_pool_config_held(dp)); + ASSERT(earlier->ds_is_snapshot || earlier_txg != 0); + + if (earlier_txg == 0) + earlier_txg = dsl_dataset_phys(earlier)->ds_creation_txg; + + if (later->ds_is_snapshot && + earlier_txg >= dsl_dataset_phys(later)->ds_creation_txg) + return (B_FALSE); + + if (later->ds_dir == earlier->ds_dir) + return (B_TRUE); + if (!dsl_dir_is_clone(later->ds_dir)) + return (B_FALSE); + + if (dsl_dir_phys(later->ds_dir)->dd_origin_obj == earlier->ds_object) + return (B_TRUE); + error = dsl_dataset_hold_obj(dp, + dsl_dir_phys(later->ds_dir)->dd_origin_obj, FTAG, &origin); + if (error != 0) + return (B_FALSE); + ret = dsl_dataset_is_before(origin, earlier, earlier_txg); + dsl_dataset_rele(origin, FTAG); + return (ret); +} + +void +dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + dmu_object_zapify(mos, ds->ds_object, DMU_OT_DSL_DATASET, tx); +} + +boolean_t +dsl_dataset_is_zapified(dsl_dataset_t *ds) +{ + dmu_object_info_t doi; + + dmu_object_info_from_db(ds->ds_dbuf, &doi); + return (doi.doi_type == DMU_OTN_ZAP_METADATA); +} + +boolean_t +dsl_dataset_has_resume_receive_state(dsl_dataset_t *ds) +{ + return (dsl_dataset_is_zapified(ds) && + zap_contains(ds->ds_dir->dd_pool->dp_meta_objset, + ds->ds_object, DS_FIELD_RESUME_TOGUID) == 0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +#if defined(_LP64) +module_param(zfs_max_recordsize, int, 0644); +MODULE_PARM_DESC(zfs_max_recordsize, "Max allowed record size"); +#else +/* Limited to 1M on 32-bit platforms due to lack of virtual address space */ +module_param(zfs_max_recordsize, int, 0444); +MODULE_PARM_DESC(zfs_max_recordsize, "Max allowed record size"); +#endif + +EXPORT_SYMBOL(dsl_dataset_hold); +EXPORT_SYMBOL(dsl_dataset_hold_obj); +EXPORT_SYMBOL(dsl_dataset_own); +EXPORT_SYMBOL(dsl_dataset_own_obj); +EXPORT_SYMBOL(dsl_dataset_name); +EXPORT_SYMBOL(dsl_dataset_rele); +EXPORT_SYMBOL(dsl_dataset_disown); +EXPORT_SYMBOL(dsl_dataset_tryown); +EXPORT_SYMBOL(dsl_dataset_create_sync); +EXPORT_SYMBOL(dsl_dataset_create_sync_dd); +EXPORT_SYMBOL(dsl_dataset_snapshot_check); +EXPORT_SYMBOL(dsl_dataset_snapshot_sync); +EXPORT_SYMBOL(dsl_dataset_promote); +EXPORT_SYMBOL(dsl_dataset_user_hold); +EXPORT_SYMBOL(dsl_dataset_user_release); +EXPORT_SYMBOL(dsl_dataset_get_holds); +EXPORT_SYMBOL(dsl_dataset_get_blkptr); +EXPORT_SYMBOL(dsl_dataset_get_spa); +EXPORT_SYMBOL(dsl_dataset_modified_since_snap); +EXPORT_SYMBOL(dsl_dataset_space_written); +EXPORT_SYMBOL(dsl_dataset_space_wouldfree); +EXPORT_SYMBOL(dsl_dataset_sync); +EXPORT_SYMBOL(dsl_dataset_block_born); +EXPORT_SYMBOL(dsl_dataset_block_kill); +EXPORT_SYMBOL(dsl_dataset_dirty); +EXPORT_SYMBOL(dsl_dataset_stats); +EXPORT_SYMBOL(dsl_dataset_fast_stat); +EXPORT_SYMBOL(dsl_dataset_space); +EXPORT_SYMBOL(dsl_dataset_fsid_guid); +EXPORT_SYMBOL(dsl_dsobj_to_dsname); +EXPORT_SYMBOL(dsl_dataset_check_quota); +EXPORT_SYMBOL(dsl_dataset_clone_swap_check_impl); +EXPORT_SYMBOL(dsl_dataset_clone_swap_sync_impl); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_deadlist.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_deadlist.c @@ -0,0 +1,555 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Deadlist concurrency: + * + * Deadlists can only be modified from the syncing thread. + * + * Except for dsl_deadlist_insert(), it can only be modified with the + * dp_config_rwlock held with RW_WRITER. + * + * The accessors (dsl_deadlist_space() and dsl_deadlist_space_range()) can + * be called concurrently, from open context, with the dl_config_rwlock held + * with RW_READER. + * + * Therefore, we only need to provide locking between dsl_deadlist_insert() and + * the accessors, protecting: + * dl_phys->dl_used,comp,uncomp + * and protecting the dl_tree from being loaded. + * The locking is provided by dl_lock. Note that locking on the bpobj_t + * provides its own locking, and dl_oldfmt is immutable. + */ + +static int +dsl_deadlist_compare(const void *arg1, const void *arg2) +{ + const dsl_deadlist_entry_t *dle1 = (const dsl_deadlist_entry_t *)arg1; + const dsl_deadlist_entry_t *dle2 = (const dsl_deadlist_entry_t *)arg2; + + return (AVL_CMP(dle1->dle_mintxg, dle2->dle_mintxg)); +} + +static void +dsl_deadlist_load_tree(dsl_deadlist_t *dl) +{ + zap_cursor_t zc; + zap_attribute_t za; + + ASSERT(MUTEX_HELD(&dl->dl_lock)); + + ASSERT(!dl->dl_oldfmt); + if (dl->dl_havetree) + return; + + avl_create(&dl->dl_tree, dsl_deadlist_compare, + sizeof (dsl_deadlist_entry_t), + offsetof(dsl_deadlist_entry_t, dle_node)); + for (zap_cursor_init(&zc, dl->dl_os, dl->dl_object); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + dsl_deadlist_entry_t *dle = kmem_alloc(sizeof (*dle), KM_SLEEP); + dle->dle_mintxg = zfs_strtonum(za.za_name, NULL); + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, + za.za_first_integer)); + avl_add(&dl->dl_tree, dle); + } + zap_cursor_fini(&zc); + dl->dl_havetree = B_TRUE; +} + +void +dsl_deadlist_open(dsl_deadlist_t *dl, objset_t *os, uint64_t object) +{ + dmu_object_info_t doi; + + mutex_init(&dl->dl_lock, NULL, MUTEX_DEFAULT, NULL); + dl->dl_os = os; + dl->dl_object = object; + VERIFY3U(0, ==, dmu_bonus_hold(os, object, dl, &dl->dl_dbuf)); + dmu_object_info_from_db(dl->dl_dbuf, &doi); + if (doi.doi_type == DMU_OT_BPOBJ) { + dmu_buf_rele(dl->dl_dbuf, dl); + dl->dl_dbuf = NULL; + dl->dl_oldfmt = B_TRUE; + VERIFY3U(0, ==, bpobj_open(&dl->dl_bpobj, os, object)); + return; + } + + dl->dl_oldfmt = B_FALSE; + dl->dl_phys = dl->dl_dbuf->db_data; + dl->dl_havetree = B_FALSE; +} + +void +dsl_deadlist_close(dsl_deadlist_t *dl) +{ + void *cookie = NULL; + dsl_deadlist_entry_t *dle; + + dl->dl_os = NULL; + mutex_destroy(&dl->dl_lock); + + if (dl->dl_oldfmt) { + dl->dl_oldfmt = B_FALSE; + bpobj_close(&dl->dl_bpobj); + return; + } + + if (dl->dl_havetree) { + while ((dle = avl_destroy_nodes(&dl->dl_tree, &cookie)) + != NULL) { + bpobj_close(&dle->dle_bpobj); + kmem_free(dle, sizeof (*dle)); + } + avl_destroy(&dl->dl_tree); + } + dmu_buf_rele(dl->dl_dbuf, dl); + dl->dl_dbuf = NULL; + dl->dl_phys = NULL; +} + +uint64_t +dsl_deadlist_alloc(objset_t *os, dmu_tx_t *tx) +{ + if (spa_version(dmu_objset_spa(os)) < SPA_VERSION_DEADLISTS) + return (bpobj_alloc(os, SPA_OLD_MAXBLOCKSIZE, tx)); + return (zap_create(os, DMU_OT_DEADLIST, DMU_OT_DEADLIST_HDR, + sizeof (dsl_deadlist_phys_t), tx)); +} + +void +dsl_deadlist_free(objset_t *os, uint64_t dlobj, dmu_tx_t *tx) +{ + dmu_object_info_t doi; + zap_cursor_t zc; + zap_attribute_t za; + + VERIFY3U(0, ==, dmu_object_info(os, dlobj, &doi)); + if (doi.doi_type == DMU_OT_BPOBJ) { + bpobj_free(os, dlobj, tx); + return; + } + + for (zap_cursor_init(&zc, os, dlobj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + uint64_t obj = za.za_first_integer; + if (obj == dmu_objset_pool(os)->dp_empty_bpobj) + bpobj_decr_empty(os, tx); + else + bpobj_free(os, obj, tx); + } + zap_cursor_fini(&zc); + VERIFY3U(0, ==, dmu_object_free(os, dlobj, tx)); +} + +static void +dle_enqueue(dsl_deadlist_t *dl, dsl_deadlist_entry_t *dle, + const blkptr_t *bp, dmu_tx_t *tx) +{ + ASSERT(MUTEX_HELD(&dl->dl_lock)); + if (dle->dle_bpobj.bpo_object == + dmu_objset_pool(dl->dl_os)->dp_empty_bpobj) { + uint64_t obj = bpobj_alloc(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); + bpobj_close(&dle->dle_bpobj); + bpobj_decr_empty(dl->dl_os, tx); + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); + VERIFY3U(0, ==, zap_update_int_key(dl->dl_os, dl->dl_object, + dle->dle_mintxg, obj, tx)); + } + bpobj_enqueue(&dle->dle_bpobj, bp, tx); +} + +static void +dle_enqueue_subobj(dsl_deadlist_t *dl, dsl_deadlist_entry_t *dle, + uint64_t obj, dmu_tx_t *tx) +{ + ASSERT(MUTEX_HELD(&dl->dl_lock)); + if (dle->dle_bpobj.bpo_object != + dmu_objset_pool(dl->dl_os)->dp_empty_bpobj) { + bpobj_enqueue_subobj(&dle->dle_bpobj, obj, tx); + } else { + bpobj_close(&dle->dle_bpobj); + bpobj_decr_empty(dl->dl_os, tx); + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); + VERIFY3U(0, ==, zap_update_int_key(dl->dl_os, dl->dl_object, + dle->dle_mintxg, obj, tx)); + } +} + +void +dsl_deadlist_insert(dsl_deadlist_t *dl, const blkptr_t *bp, dmu_tx_t *tx) +{ + dsl_deadlist_entry_t dle_tofind; + dsl_deadlist_entry_t *dle; + avl_index_t where; + + if (dl->dl_oldfmt) { + bpobj_enqueue(&dl->dl_bpobj, bp, tx); + return; + } + + mutex_enter(&dl->dl_lock); + dsl_deadlist_load_tree(dl); + + dmu_buf_will_dirty(dl->dl_dbuf, tx); + dl->dl_phys->dl_used += + bp_get_dsize_sync(dmu_objset_spa(dl->dl_os), bp); + dl->dl_phys->dl_comp += BP_GET_PSIZE(bp); + dl->dl_phys->dl_uncomp += BP_GET_UCSIZE(bp); + + dle_tofind.dle_mintxg = bp->blk_birth; + dle = avl_find(&dl->dl_tree, &dle_tofind, &where); + if (dle == NULL) + dle = avl_nearest(&dl->dl_tree, where, AVL_BEFORE); + else + dle = AVL_PREV(&dl->dl_tree, dle); + + if (dle == NULL) { + zfs_panic_recover("blkptr at %p has invalid BLK_BIRTH %llu", + bp, (longlong_t)bp->blk_birth); + dle = avl_first(&dl->dl_tree); + } + + ASSERT3P(dle, !=, NULL); + dle_enqueue(dl, dle, bp, tx); + mutex_exit(&dl->dl_lock); +} + +/* + * Insert new key in deadlist, which must be > all current entries. + * mintxg is not inclusive. + */ +void +dsl_deadlist_add_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) +{ + uint64_t obj; + dsl_deadlist_entry_t *dle; + + if (dl->dl_oldfmt) + return; + + dle = kmem_alloc(sizeof (*dle), KM_SLEEP); + dle->dle_mintxg = mintxg; + + mutex_enter(&dl->dl_lock); + dsl_deadlist_load_tree(dl); + + obj = bpobj_alloc_empty(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); + avl_add(&dl->dl_tree, dle); + + VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, dl->dl_object, + mintxg, obj, tx)); + mutex_exit(&dl->dl_lock); +} + +/* + * Remove this key, merging its entries into the previous key. + */ +void +dsl_deadlist_remove_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) +{ + dsl_deadlist_entry_t dle_tofind; + dsl_deadlist_entry_t *dle, *dle_prev; + + if (dl->dl_oldfmt) + return; + + mutex_enter(&dl->dl_lock); + dsl_deadlist_load_tree(dl); + + dle_tofind.dle_mintxg = mintxg; + dle = avl_find(&dl->dl_tree, &dle_tofind, NULL); + dle_prev = AVL_PREV(&dl->dl_tree, dle); + + dle_enqueue_subobj(dl, dle_prev, dle->dle_bpobj.bpo_object, tx); + + avl_remove(&dl->dl_tree, dle); + bpobj_close(&dle->dle_bpobj); + kmem_free(dle, sizeof (*dle)); + + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, mintxg, tx)); + mutex_exit(&dl->dl_lock); +} + +/* + * Walk ds's snapshots to regenerate generate ZAP & AVL. + */ +static void +dsl_deadlist_regenerate(objset_t *os, uint64_t dlobj, + uint64_t mrs_obj, dmu_tx_t *tx) +{ + dsl_deadlist_t dl; + dsl_pool_t *dp = dmu_objset_pool(os); + + dsl_deadlist_open(&dl, os, dlobj); + if (dl.dl_oldfmt) { + dsl_deadlist_close(&dl); + return; + } + + while (mrs_obj != 0) { + dsl_dataset_t *ds; + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, mrs_obj, FTAG, &ds)); + dsl_deadlist_add_key(&dl, + dsl_dataset_phys(ds)->ds_prev_snap_txg, tx); + mrs_obj = dsl_dataset_phys(ds)->ds_prev_snap_obj; + dsl_dataset_rele(ds, FTAG); + } + dsl_deadlist_close(&dl); +} + +uint64_t +dsl_deadlist_clone(dsl_deadlist_t *dl, uint64_t maxtxg, + uint64_t mrs_obj, dmu_tx_t *tx) +{ + dsl_deadlist_entry_t *dle; + uint64_t newobj; + + newobj = dsl_deadlist_alloc(dl->dl_os, tx); + + if (dl->dl_oldfmt) { + dsl_deadlist_regenerate(dl->dl_os, newobj, mrs_obj, tx); + return (newobj); + } + + mutex_enter(&dl->dl_lock); + dsl_deadlist_load_tree(dl); + + for (dle = avl_first(&dl->dl_tree); dle; + dle = AVL_NEXT(&dl->dl_tree, dle)) { + uint64_t obj; + + if (dle->dle_mintxg >= maxtxg) + break; + + obj = bpobj_alloc_empty(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); + VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, newobj, + dle->dle_mintxg, obj, tx)); + } + mutex_exit(&dl->dl_lock); + return (newobj); +} + +void +dsl_deadlist_space(dsl_deadlist_t *dl, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + if (dl->dl_oldfmt) { + VERIFY3U(0, ==, bpobj_space(&dl->dl_bpobj, + usedp, compp, uncompp)); + return; + } + + mutex_enter(&dl->dl_lock); + *usedp = dl->dl_phys->dl_used; + *compp = dl->dl_phys->dl_comp; + *uncompp = dl->dl_phys->dl_uncomp; + mutex_exit(&dl->dl_lock); +} + +/* + * return space used in the range (mintxg, maxtxg]. + * Includes maxtxg, does not include mintxg. + * mintxg and maxtxg must both be keys in the deadlist (unless maxtxg is + * larger than any bp in the deadlist (eg. UINT64_MAX)). + */ +void +dsl_deadlist_space_range(dsl_deadlist_t *dl, uint64_t mintxg, uint64_t maxtxg, + uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) +{ + dsl_deadlist_entry_t *dle; + dsl_deadlist_entry_t dle_tofind; + avl_index_t where; + + if (dl->dl_oldfmt) { + VERIFY3U(0, ==, bpobj_space_range(&dl->dl_bpobj, + mintxg, maxtxg, usedp, compp, uncompp)); + return; + } + + *usedp = *compp = *uncompp = 0; + + mutex_enter(&dl->dl_lock); + dsl_deadlist_load_tree(dl); + dle_tofind.dle_mintxg = mintxg; + dle = avl_find(&dl->dl_tree, &dle_tofind, &where); + /* + * If we don't find this mintxg, there shouldn't be anything + * after it either. + */ + ASSERT(dle != NULL || + avl_nearest(&dl->dl_tree, where, AVL_AFTER) == NULL); + + for (; dle && dle->dle_mintxg < maxtxg; + dle = AVL_NEXT(&dl->dl_tree, dle)) { + uint64_t used, comp, uncomp; + + VERIFY3U(0, ==, bpobj_space(&dle->dle_bpobj, + &used, &comp, &uncomp)); + + *usedp += used; + *compp += comp; + *uncompp += uncomp; + } + mutex_exit(&dl->dl_lock); +} + +static void +dsl_deadlist_insert_bpobj(dsl_deadlist_t *dl, uint64_t obj, uint64_t birth, + dmu_tx_t *tx) +{ + dsl_deadlist_entry_t dle_tofind; + dsl_deadlist_entry_t *dle; + avl_index_t where; + uint64_t used, comp, uncomp; + bpobj_t bpo; + + ASSERT(MUTEX_HELD(&dl->dl_lock)); + + VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); + VERIFY3U(0, ==, bpobj_space(&bpo, &used, &comp, &uncomp)); + bpobj_close(&bpo); + + dsl_deadlist_load_tree(dl); + + dmu_buf_will_dirty(dl->dl_dbuf, tx); + dl->dl_phys->dl_used += used; + dl->dl_phys->dl_comp += comp; + dl->dl_phys->dl_uncomp += uncomp; + + dle_tofind.dle_mintxg = birth; + dle = avl_find(&dl->dl_tree, &dle_tofind, &where); + if (dle == NULL) + dle = avl_nearest(&dl->dl_tree, where, AVL_BEFORE); + dle_enqueue_subobj(dl, dle, obj, tx); +} + +static int +dsl_deadlist_insert_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + dsl_deadlist_t *dl = arg; + dsl_deadlist_insert(dl, bp, tx); + return (0); +} + +/* + * Merge the deadlist pointed to by 'obj' into dl. obj will be left as + * an empty deadlist. + */ +void +dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx) +{ + zap_cursor_t zc; + zap_attribute_t za; + dmu_buf_t *bonus; + dsl_deadlist_phys_t *dlp; + dmu_object_info_t doi; + + VERIFY3U(0, ==, dmu_object_info(dl->dl_os, obj, &doi)); + if (doi.doi_type == DMU_OT_BPOBJ) { + bpobj_t bpo; + VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); + VERIFY3U(0, ==, bpobj_iterate(&bpo, + dsl_deadlist_insert_cb, dl, tx)); + bpobj_close(&bpo); + return; + } + + mutex_enter(&dl->dl_lock); + for (zap_cursor_init(&zc, dl->dl_os, obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + uint64_t mintxg = zfs_strtonum(za.za_name, NULL); + dsl_deadlist_insert_bpobj(dl, za.za_first_integer, mintxg, tx); + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, obj, mintxg, tx)); + } + zap_cursor_fini(&zc); + + VERIFY3U(0, ==, dmu_bonus_hold(dl->dl_os, obj, FTAG, &bonus)); + dlp = bonus->db_data; + dmu_buf_will_dirty(bonus, tx); + bzero(dlp, sizeof (*dlp)); + dmu_buf_rele(bonus, FTAG); + mutex_exit(&dl->dl_lock); +} + +/* + * Remove entries on dl that are >= mintxg, and put them on the bpobj. + */ +void +dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg, + dmu_tx_t *tx) +{ + dsl_deadlist_entry_t dle_tofind; + dsl_deadlist_entry_t *dle; + avl_index_t where; + + ASSERT(!dl->dl_oldfmt); + + mutex_enter(&dl->dl_lock); + dmu_buf_will_dirty(dl->dl_dbuf, tx); + dsl_deadlist_load_tree(dl); + + dle_tofind.dle_mintxg = mintxg; + dle = avl_find(&dl->dl_tree, &dle_tofind, &where); + if (dle == NULL) + dle = avl_nearest(&dl->dl_tree, where, AVL_AFTER); + while (dle) { + uint64_t used, comp, uncomp; + dsl_deadlist_entry_t *dle_next; + + bpobj_enqueue_subobj(bpo, dle->dle_bpobj.bpo_object, tx); + + VERIFY3U(0, ==, bpobj_space(&dle->dle_bpobj, + &used, &comp, &uncomp)); + ASSERT3U(dl->dl_phys->dl_used, >=, used); + ASSERT3U(dl->dl_phys->dl_comp, >=, comp); + ASSERT3U(dl->dl_phys->dl_uncomp, >=, uncomp); + dl->dl_phys->dl_used -= used; + dl->dl_phys->dl_comp -= comp; + dl->dl_phys->dl_uncomp -= uncomp; + + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, + dle->dle_mintxg, tx)); + + dle_next = AVL_NEXT(&dl->dl_tree, dle); + avl_remove(&dl->dl_tree, dle); + bpobj_close(&dle->dle_bpobj); + kmem_free(dle, sizeof (*dle)); + dle = dle_next; + } + mutex_exit(&dl->dl_lock); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_deleg.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_deleg.c @@ -0,0 +1,774 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +/* + * DSL permissions are stored in a two level zap attribute + * mechanism. The first level identifies the "class" of + * entry. The class is identified by the first 2 letters of + * the attribute. The second letter "l" or "d" identifies whether + * it is a local or descendent permission. The first letter + * identifies the type of entry. + * + * ul$ identifies permissions granted locally for this userid. + * ud$ identifies permissions granted on descendent datasets for + * this userid. + * Ul$ identifies permission sets granted locally for this userid. + * Ud$ identifies permission sets granted on descendent datasets for + * this userid. + * gl$ identifies permissions granted locally for this groupid. + * gd$ identifies permissions granted on descendent datasets for + * this groupid. + * Gl$ identifies permission sets granted locally for this groupid. + * Gd$ identifies permission sets granted on descendent datasets for + * this groupid. + * el$ identifies permissions granted locally for everyone. + * ed$ identifies permissions granted on descendent datasets + * for everyone. + * El$ identifies permission sets granted locally for everyone. + * Ed$ identifies permission sets granted to descendent datasets for + * everyone. + * c-$ identifies permission to create at dataset creation time. + * C-$ identifies permission sets to grant locally at dataset creation + * time. + * s-$@ permissions defined in specified set @ + * S-$@ Sets defined in named set @ + * + * Each of the above entities points to another zap attribute that contains one + * attribute for each allowed permission, such as create, destroy,... + * All of the "upper" case class types will specify permission set names + * rather than permissions. + * + * Basically it looks something like this: + * ul$12 -> ZAP OBJ -> permissions... + * + * The ZAP OBJ is referred to as the jump object. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zfs_deleg.h" + +/* + * Validate that user is allowed to delegate specified permissions. + * + * In order to delegate "create" you must have "create" + * and "allow". + */ +int +dsl_deleg_can_allow(char *ddname, nvlist_t *nvp, cred_t *cr) +{ + nvpair_t *whopair = NULL; + int error; + + if ((error = dsl_deleg_access(ddname, ZFS_DELEG_PERM_ALLOW, cr)) != 0) + return (error); + + while ((whopair = nvlist_next_nvpair(nvp, whopair))) { + nvlist_t *perms; + nvpair_t *permpair = NULL; + + VERIFY(nvpair_value_nvlist(whopair, &perms) == 0); + + while ((permpair = nvlist_next_nvpair(perms, permpair))) { + const char *perm = nvpair_name(permpair); + + if (strcmp(perm, ZFS_DELEG_PERM_ALLOW) == 0) + return (SET_ERROR(EPERM)); + + if ((error = dsl_deleg_access(ddname, perm, cr)) != 0) + return (error); + } + } + return (0); +} + +/* + * Validate that user is allowed to unallow specified permissions. They + * must have the 'allow' permission, and even then can only unallow + * perms for their uid. + */ +int +dsl_deleg_can_unallow(char *ddname, nvlist_t *nvp, cred_t *cr) +{ + nvpair_t *whopair = NULL; + int error; + char idstr[32]; + + if ((error = dsl_deleg_access(ddname, ZFS_DELEG_PERM_ALLOW, cr)) != 0) + return (error); + + (void) snprintf(idstr, sizeof (idstr), "%lld", + (longlong_t)crgetuid(cr)); + + while ((whopair = nvlist_next_nvpair(nvp, whopair))) { + zfs_deleg_who_type_t type = nvpair_name(whopair)[0]; + + if (type != ZFS_DELEG_USER && + type != ZFS_DELEG_USER_SETS) + return (SET_ERROR(EPERM)); + + if (strcmp(idstr, &nvpair_name(whopair)[3]) != 0) + return (SET_ERROR(EPERM)); + } + return (0); +} + +typedef struct dsl_deleg_arg { + const char *dda_name; + nvlist_t *dda_nvlist; +} dsl_deleg_arg_t; + +static void +dsl_deleg_set_sync(void *arg, dmu_tx_t *tx) +{ + dsl_deleg_arg_t *dda = arg; + dsl_dir_t *dd; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + nvpair_t *whopair = NULL; + uint64_t zapobj; + + VERIFY0(dsl_dir_hold(dp, dda->dda_name, FTAG, &dd, NULL)); + + zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj; + if (zapobj == 0) { + dmu_buf_will_dirty(dd->dd_dbuf, tx); + zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj = zap_create(mos, + DMU_OT_DSL_PERMS, DMU_OT_NONE, 0, tx); + } + + while ((whopair = nvlist_next_nvpair(dda->dda_nvlist, whopair))) { + const char *whokey = nvpair_name(whopair); + nvlist_t *perms; + nvpair_t *permpair = NULL; + uint64_t jumpobj; + + perms = fnvpair_value_nvlist(whopair); + + if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0) { + jumpobj = zap_create_link(mos, DMU_OT_DSL_PERMS, + zapobj, whokey, tx); + } + + while ((permpair = nvlist_next_nvpair(perms, permpair))) { + const char *perm = nvpair_name(permpair); + uint64_t n = 0; + + VERIFY(zap_update(mos, jumpobj, + perm, 8, 1, &n, tx) == 0); + spa_history_log_internal_dd(dd, "permission update", tx, + "%s %s", whokey, perm); + } + } + dsl_dir_rele(dd, FTAG); +} + +static void +dsl_deleg_unset_sync(void *arg, dmu_tx_t *tx) +{ + dsl_deleg_arg_t *dda = arg; + dsl_dir_t *dd; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + nvpair_t *whopair = NULL; + uint64_t zapobj; + + VERIFY0(dsl_dir_hold(dp, dda->dda_name, FTAG, &dd, NULL)); + zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj; + if (zapobj == 0) { + dsl_dir_rele(dd, FTAG); + return; + } + + while ((whopair = nvlist_next_nvpair(dda->dda_nvlist, whopair))) { + const char *whokey = nvpair_name(whopair); + nvlist_t *perms; + nvpair_t *permpair = NULL; + uint64_t jumpobj; + + if (nvpair_value_nvlist(whopair, &perms) != 0) { + if (zap_lookup(mos, zapobj, whokey, 8, + 1, &jumpobj) == 0) { + (void) zap_remove(mos, zapobj, whokey, tx); + VERIFY(0 == zap_destroy(mos, jumpobj, tx)); + } + spa_history_log_internal_dd(dd, "permission who remove", + tx, "%s", whokey); + continue; + } + + if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0) + continue; + + while ((permpair = nvlist_next_nvpair(perms, permpair))) { + const char *perm = nvpair_name(permpair); + uint64_t n = 0; + + (void) zap_remove(mos, jumpobj, perm, tx); + if (zap_count(mos, jumpobj, &n) == 0 && n == 0) { + (void) zap_remove(mos, zapobj, + whokey, tx); + VERIFY(0 == zap_destroy(mos, + jumpobj, tx)); + } + spa_history_log_internal_dd(dd, "permission remove", tx, + "%s %s", whokey, perm); + } + } + dsl_dir_rele(dd, FTAG); +} + +static int +dsl_deleg_check(void *arg, dmu_tx_t *tx) +{ + dsl_deleg_arg_t *dda = arg; + dsl_dir_t *dd; + int error; + + if (spa_version(dmu_tx_pool(tx)->dp_spa) < + SPA_VERSION_DELEGATED_PERMS) { + return (SET_ERROR(ENOTSUP)); + } + + error = dsl_dir_hold(dmu_tx_pool(tx), dda->dda_name, FTAG, &dd, NULL); + if (error == 0) + dsl_dir_rele(dd, FTAG); + return (error); +} + +int +dsl_deleg_set(const char *ddname, nvlist_t *nvp, boolean_t unset) +{ + dsl_deleg_arg_t dda; + + /* nvp must already have been verified to be valid */ + + dda.dda_name = ddname; + dda.dda_nvlist = nvp; + + return (dsl_sync_task(ddname, dsl_deleg_check, + unset ? dsl_deleg_unset_sync : dsl_deleg_set_sync, + &dda, fnvlist_num_pairs(nvp), ZFS_SPACE_CHECK_RESERVED)); +} + +/* + * Find all 'allow' permissions from a given point and then continue + * traversing up to the root. + * + * This function constructs an nvlist of nvlists. + * each setpoint is an nvlist composed of an nvlist of an nvlist + * of the individual * users/groups/everyone/create + * permissions. + * + * The nvlist will look like this. + * + * { source fsname -> { whokeys { permissions,...}, ...}} + * + * The fsname nvpairs will be arranged in a bottom up order. For example, + * if we have the following structure a/b/c then the nvpairs for the fsnames + * will be ordered a/b/c, a/b, a. + */ +int +dsl_deleg_get(const char *ddname, nvlist_t **nvp) +{ + dsl_dir_t *dd, *startdd; + dsl_pool_t *dp; + int error; + objset_t *mos; + zap_cursor_t *basezc, *zc; + zap_attribute_t *baseza, *za; + char *source; + + error = dsl_pool_hold(ddname, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dir_hold(dp, ddname, FTAG, &startdd, NULL); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + dp = startdd->dd_pool; + mos = dp->dp_meta_objset; + + zc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + basezc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + baseza = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + source = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + VERIFY(nvlist_alloc(nvp, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + for (dd = startdd; dd != NULL; dd = dd->dd_parent) { + nvlist_t *sp_nvp; + uint64_t n; + + if (dsl_dir_phys(dd)->dd_deleg_zapobj == 0 || + zap_count(mos, + dsl_dir_phys(dd)->dd_deleg_zapobj, &n) != 0 || n == 0) + continue; + + sp_nvp = fnvlist_alloc(); + for (zap_cursor_init(basezc, mos, + dsl_dir_phys(dd)->dd_deleg_zapobj); + zap_cursor_retrieve(basezc, baseza) == 0; + zap_cursor_advance(basezc)) { + nvlist_t *perms_nvp; + + ASSERT(baseza->za_integer_length == 8); + ASSERT(baseza->za_num_integers == 1); + + perms_nvp = fnvlist_alloc(); + for (zap_cursor_init(zc, mos, baseza->za_first_integer); + zap_cursor_retrieve(zc, za) == 0; + zap_cursor_advance(zc)) { + fnvlist_add_boolean(perms_nvp, za->za_name); + } + zap_cursor_fini(zc); + fnvlist_add_nvlist(sp_nvp, baseza->za_name, perms_nvp); + fnvlist_free(perms_nvp); + } + + zap_cursor_fini(basezc); + + dsl_dir_name(dd, source); + fnvlist_add_nvlist(*nvp, source, sp_nvp); + nvlist_free(sp_nvp); + } + + kmem_free(source, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(baseza, sizeof (zap_attribute_t)); + kmem_free(basezc, sizeof (zap_cursor_t)); + kmem_free(za, sizeof (zap_attribute_t)); + kmem_free(zc, sizeof (zap_cursor_t)); + + dsl_dir_rele(startdd, FTAG); + dsl_pool_rele(dp, FTAG); + return (0); +} + +/* + * Routines for dsl_deleg_access() -- access checking. + */ +typedef struct perm_set { + avl_node_t p_node; + boolean_t p_matched; + char p_setname[ZFS_MAX_DELEG_NAME]; +} perm_set_t; + +static int +perm_set_compare(const void *arg1, const void *arg2) +{ + const perm_set_t *node1 = (const perm_set_t *)arg1; + const perm_set_t *node2 = (const perm_set_t *)arg2; + int val; + + val = strcmp(node1->p_setname, node2->p_setname); + + return (AVL_ISIGN(val)); +} + +/* + * Determine whether a specified permission exists. + * + * First the base attribute has to be retrieved. i.e. ul$12 + * Once the base object has been retrieved the actual permission + * is lookup up in the zap object the base object points to. + * + * Return 0 if permission exists, ENOENT if there is no whokey, EPERM if + * there is no perm in that jumpobj. + */ +static int +dsl_check_access(objset_t *mos, uint64_t zapobj, + char type, char checkflag, void *valp, const char *perm) +{ + int error; + uint64_t jumpobj, zero; + char whokey[ZFS_MAX_DELEG_NAME]; + + zfs_deleg_whokey(whokey, type, checkflag, valp); + error = zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj); + if (error == 0) { + error = zap_lookup(mos, jumpobj, perm, 8, 1, &zero); + if (error == ENOENT) + error = SET_ERROR(EPERM); + } + return (error); +} + +/* + * check a specified user/group for a requested permission + */ +static int +dsl_check_user_access(objset_t *mos, uint64_t zapobj, const char *perm, + int checkflag, cred_t *cr) +{ + const gid_t *gids; + int ngids; + int i; + uint64_t id; + + /* check for user */ + id = crgetuid(cr); + if (dsl_check_access(mos, zapobj, + ZFS_DELEG_USER, checkflag, &id, perm) == 0) + return (0); + + /* check for users primary group */ + id = crgetgid(cr); + if (dsl_check_access(mos, zapobj, + ZFS_DELEG_GROUP, checkflag, &id, perm) == 0) + return (0); + + /* check for everyone entry */ + id = -1; + if (dsl_check_access(mos, zapobj, + ZFS_DELEG_EVERYONE, checkflag, &id, perm) == 0) + return (0); + + /* check each supplemental group user is a member of */ + ngids = crgetngroups(cr); + gids = crgetgroups(cr); + for (i = 0; i != ngids; i++) { + id = gids[i]; + if (dsl_check_access(mos, zapobj, + ZFS_DELEG_GROUP, checkflag, &id, perm) == 0) + return (0); + } + + return (SET_ERROR(EPERM)); +} + +/* + * Iterate over the sets specified in the specified zapobj + * and load them into the permsets avl tree. + */ +static int +dsl_load_sets(objset_t *mos, uint64_t zapobj, + char type, char checkflag, void *valp, avl_tree_t *avl) +{ + zap_cursor_t zc; + zap_attribute_t za; + perm_set_t *permnode; + avl_index_t idx; + uint64_t jumpobj; + int error; + char whokey[ZFS_MAX_DELEG_NAME]; + + zfs_deleg_whokey(whokey, type, checkflag, valp); + + error = zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj); + if (error != 0) + return (error); + + for (zap_cursor_init(&zc, mos, jumpobj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + permnode = kmem_alloc(sizeof (perm_set_t), KM_SLEEP); + (void) strlcpy(permnode->p_setname, za.za_name, + sizeof (permnode->p_setname)); + permnode->p_matched = B_FALSE; + + if (avl_find(avl, permnode, &idx) == NULL) { + avl_insert(avl, permnode, idx); + } else { + kmem_free(permnode, sizeof (perm_set_t)); + } + } + zap_cursor_fini(&zc); + return (0); +} + +/* + * Load all permissions user based on cred belongs to. + */ +static void +dsl_load_user_sets(objset_t *mos, uint64_t zapobj, avl_tree_t *avl, + char checkflag, cred_t *cr) +{ + const gid_t *gids; + int ngids, i; + uint64_t id; + + id = crgetuid(cr); + (void) dsl_load_sets(mos, zapobj, + ZFS_DELEG_USER_SETS, checkflag, &id, avl); + + id = crgetgid(cr); + (void) dsl_load_sets(mos, zapobj, + ZFS_DELEG_GROUP_SETS, checkflag, &id, avl); + + (void) dsl_load_sets(mos, zapobj, + ZFS_DELEG_EVERYONE_SETS, checkflag, NULL, avl); + + ngids = crgetngroups(cr); + gids = crgetgroups(cr); + for (i = 0; i != ngids; i++) { + id = gids[i]; + (void) dsl_load_sets(mos, zapobj, + ZFS_DELEG_GROUP_SETS, checkflag, &id, avl); + } +} + +/* + * Check if user has requested permission. + */ +int +dsl_deleg_access_impl(dsl_dataset_t *ds, const char *perm, cred_t *cr) +{ + dsl_dir_t *dd; + dsl_pool_t *dp; + void *cookie; + int error; + char checkflag; + objset_t *mos; + avl_tree_t permsets; + perm_set_t *setnode; + + dp = ds->ds_dir->dd_pool; + mos = dp->dp_meta_objset; + + if (dsl_delegation_on(mos) == B_FALSE) + return (SET_ERROR(ECANCELED)); + + if (spa_version(dmu_objset_spa(dp->dp_meta_objset)) < + SPA_VERSION_DELEGATED_PERMS) + return (SET_ERROR(EPERM)); + + if (ds->ds_is_snapshot) { + /* + * Snapshots are treated as descendents only, + * local permissions do not apply. + */ + checkflag = ZFS_DELEG_DESCENDENT; + } else { + checkflag = ZFS_DELEG_LOCAL; + } + + avl_create(&permsets, perm_set_compare, sizeof (perm_set_t), + offsetof(perm_set_t, p_node)); + + ASSERT(dsl_pool_config_held(dp)); + for (dd = ds->ds_dir; dd != NULL; dd = dd->dd_parent, + checkflag = ZFS_DELEG_DESCENDENT) { + uint64_t zapobj; + boolean_t expanded; + + /* + * If not in global zone then make sure + * the zoned property is set + */ + if (!INGLOBALZONE(curproc)) { + uint64_t zoned; + + if (dsl_prop_get_dd(dd, + zfs_prop_to_name(ZFS_PROP_ZONED), + 8, 1, &zoned, NULL, B_FALSE) != 0) + break; + if (!zoned) + break; + } + zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj; + + if (zapobj == 0) + continue; + + dsl_load_user_sets(mos, zapobj, &permsets, checkflag, cr); +again: + expanded = B_FALSE; + for (setnode = avl_first(&permsets); setnode; + setnode = AVL_NEXT(&permsets, setnode)) { + if (setnode->p_matched == B_TRUE) + continue; + + /* See if this set directly grants this permission */ + error = dsl_check_access(mos, zapobj, + ZFS_DELEG_NAMED_SET, 0, setnode->p_setname, perm); + if (error == 0) + goto success; + if (error == EPERM) + setnode->p_matched = B_TRUE; + + /* See if this set includes other sets */ + error = dsl_load_sets(mos, zapobj, + ZFS_DELEG_NAMED_SET_SETS, 0, + setnode->p_setname, &permsets); + if (error == 0) + setnode->p_matched = expanded = B_TRUE; + } + /* + * If we expanded any sets, that will define more sets, + * which we need to check. + */ + if (expanded) + goto again; + + error = dsl_check_user_access(mos, zapobj, perm, checkflag, cr); + if (error == 0) + goto success; + } + error = SET_ERROR(EPERM); +success: + + cookie = NULL; + while ((setnode = avl_destroy_nodes(&permsets, &cookie)) != NULL) + kmem_free(setnode, sizeof (perm_set_t)); + + return (error); +} + +int +dsl_deleg_access(const char *dsname, const char *perm, cred_t *cr) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int error; + + error = dsl_pool_hold(dsname, FTAG, &dp); + if (error != 0) + return (error); + error = dsl_dataset_hold(dp, dsname, FTAG, &ds); + if (error == 0) { + error = dsl_deleg_access_impl(ds, perm, cr); + dsl_dataset_rele(ds, FTAG); + } + dsl_pool_rele(dp, FTAG); + + return (error); +} + +/* + * Other routines. + */ + +static void +copy_create_perms(dsl_dir_t *dd, uint64_t pzapobj, + boolean_t dosets, uint64_t uid, dmu_tx_t *tx) +{ + objset_t *mos = dd->dd_pool->dp_meta_objset; + uint64_t jumpobj, pjumpobj; + uint64_t zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj; + zap_cursor_t zc; + zap_attribute_t za; + char whokey[ZFS_MAX_DELEG_NAME]; + + zfs_deleg_whokey(whokey, + dosets ? ZFS_DELEG_CREATE_SETS : ZFS_DELEG_CREATE, + ZFS_DELEG_LOCAL, NULL); + if (zap_lookup(mos, pzapobj, whokey, 8, 1, &pjumpobj) != 0) + return; + + if (zapobj == 0) { + dmu_buf_will_dirty(dd->dd_dbuf, tx); + zapobj = dsl_dir_phys(dd)->dd_deleg_zapobj = zap_create(mos, + DMU_OT_DSL_PERMS, DMU_OT_NONE, 0, tx); + } + + zfs_deleg_whokey(whokey, + dosets ? ZFS_DELEG_USER_SETS : ZFS_DELEG_USER, + ZFS_DELEG_LOCAL, &uid); + if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) == ENOENT) { + jumpobj = zap_create(mos, DMU_OT_DSL_PERMS, DMU_OT_NONE, 0, tx); + VERIFY(zap_add(mos, zapobj, whokey, 8, 1, &jumpobj, tx) == 0); + } + + for (zap_cursor_init(&zc, mos, pjumpobj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + uint64_t zero = 0; + ASSERT(za.za_integer_length == 8 && za.za_num_integers == 1); + + VERIFY(zap_update(mos, jumpobj, za.za_name, + 8, 1, &zero, tx) == 0); + } + zap_cursor_fini(&zc); +} + +/* + * set all create time permission on new dataset. + */ +void +dsl_deleg_set_create_perms(dsl_dir_t *sdd, dmu_tx_t *tx, cred_t *cr) +{ + dsl_dir_t *dd; + uint64_t uid = crgetuid(cr); + + if (spa_version(dmu_objset_spa(sdd->dd_pool->dp_meta_objset)) < + SPA_VERSION_DELEGATED_PERMS) + return; + + for (dd = sdd->dd_parent; dd != NULL; dd = dd->dd_parent) { + uint64_t pzapobj = dsl_dir_phys(dd)->dd_deleg_zapobj; + + if (pzapobj == 0) + continue; + + copy_create_perms(sdd, pzapobj, B_FALSE, uid, tx); + copy_create_perms(sdd, pzapobj, B_TRUE, uid, tx); + } +} + +int +dsl_deleg_destroy(objset_t *mos, uint64_t zapobj, dmu_tx_t *tx) +{ + zap_cursor_t zc; + zap_attribute_t za; + + if (zapobj == 0) + return (0); + + for (zap_cursor_init(&zc, mos, zapobj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + ASSERT(za.za_integer_length == 8 && za.za_num_integers == 1); + VERIFY(0 == zap_destroy(mos, za.za_first_integer, tx)); + } + zap_cursor_fini(&zc); + VERIFY(0 == zap_destroy(mos, zapobj, tx)); + return (0); +} + +boolean_t +dsl_delegation_on(objset_t *os) +{ + return (!!spa_delegation(os->os_spa)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_deleg_get); +EXPORT_SYMBOL(dsl_deleg_set); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_destroy.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_destroy.c @@ -0,0 +1,1012 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2013 by Joyent, Inc. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct dmu_snapshots_destroy_arg { + nvlist_t *dsda_snaps; + nvlist_t *dsda_successful_snaps; + boolean_t dsda_defer; + nvlist_t *dsda_errlist; +} dmu_snapshots_destroy_arg_t; + +int +dsl_destroy_snapshot_check_impl(dsl_dataset_t *ds, boolean_t defer) +{ + if (!ds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + if (dsl_dataset_long_held(ds)) + return (SET_ERROR(EBUSY)); + + /* + * Only allow deferred destroy on pools that support it. + * NOTE: deferred destroy is only supported on snapshots. + */ + if (defer) { + if (spa_version(ds->ds_dir->dd_pool->dp_spa) < + SPA_VERSION_USERREFS) + return (SET_ERROR(ENOTSUP)); + return (0); + } + + /* + * If this snapshot has an elevated user reference count, + * we can't destroy it yet. + */ + if (ds->ds_userrefs > 0) + return (SET_ERROR(EBUSY)); + + /* + * Can't delete a branch point. + */ + if (dsl_dataset_phys(ds)->ds_num_children > 1) + return (SET_ERROR(EEXIST)); + + return (0); +} + +static int +dsl_destroy_snapshot_check(void *arg, dmu_tx_t *tx) +{ + dmu_snapshots_destroy_arg_t *dsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + int error = 0; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + for (pair = nvlist_next_nvpair(dsda->dsda_snaps, NULL); + pair != NULL; pair = nvlist_next_nvpair(dsda->dsda_snaps, pair)) { + dsl_dataset_t *ds; + + error = dsl_dataset_hold(dp, nvpair_name(pair), + FTAG, &ds); + + /* + * If the snapshot does not exist, silently ignore it + * (it's "already destroyed"). + */ + if (error == ENOENT) + continue; + + if (error == 0) { + error = dsl_destroy_snapshot_check_impl(ds, + dsda->dsda_defer); + dsl_dataset_rele(ds, FTAG); + } + + if (error == 0) { + fnvlist_add_boolean(dsda->dsda_successful_snaps, + nvpair_name(pair)); + } else { + fnvlist_add_int32(dsda->dsda_errlist, + nvpair_name(pair), error); + } + } + + pair = nvlist_next_nvpair(dsda->dsda_errlist, NULL); + if (pair != NULL) + return (fnvpair_value_int32(pair)); + + return (0); +} + +struct process_old_arg { + dsl_dataset_t *ds; + dsl_dataset_t *ds_prev; + boolean_t after_branch_point; + zio_t *pio; + uint64_t used, comp, uncomp; +}; + +static int +process_old_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + struct process_old_arg *poa = arg; + dsl_pool_t *dp = poa->ds->ds_dir->dd_pool; + + ASSERT(!BP_IS_HOLE(bp)); + + if (bp->blk_birth <= dsl_dataset_phys(poa->ds)->ds_prev_snap_txg) { + dsl_deadlist_insert(&poa->ds->ds_deadlist, bp, tx); + if (poa->ds_prev && !poa->after_branch_point && + bp->blk_birth > + dsl_dataset_phys(poa->ds_prev)->ds_prev_snap_txg) { + dsl_dataset_phys(poa->ds_prev)->ds_unique_bytes += + bp_get_dsize_sync(dp->dp_spa, bp); + } + } else { + poa->used += bp_get_dsize_sync(dp->dp_spa, bp); + poa->comp += BP_GET_PSIZE(bp); + poa->uncomp += BP_GET_UCSIZE(bp); + dsl_free_sync(poa->pio, dp, tx->tx_txg, bp); + } + return (0); +} + +static void +process_old_deadlist(dsl_dataset_t *ds, dsl_dataset_t *ds_prev, + dsl_dataset_t *ds_next, boolean_t after_branch_point, dmu_tx_t *tx) +{ + struct process_old_arg poa = { 0 }; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + objset_t *mos = dp->dp_meta_objset; + uint64_t deadlist_obj; + + ASSERT(ds->ds_deadlist.dl_oldfmt); + ASSERT(ds_next->ds_deadlist.dl_oldfmt); + + poa.ds = ds; + poa.ds_prev = ds_prev; + poa.after_branch_point = after_branch_point; + poa.pio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); + VERIFY0(bpobj_iterate(&ds_next->ds_deadlist.dl_bpobj, + process_old_cb, &poa, tx)); + VERIFY0(zio_wait(poa.pio)); + ASSERT3U(poa.used, ==, dsl_dataset_phys(ds)->ds_unique_bytes); + + /* change snapused */ + dsl_dir_diduse_space(ds->ds_dir, DD_USED_SNAP, + -poa.used, -poa.comp, -poa.uncomp, tx); + + /* swap next's deadlist to our deadlist */ + dsl_deadlist_close(&ds->ds_deadlist); + dsl_deadlist_close(&ds_next->ds_deadlist); + deadlist_obj = dsl_dataset_phys(ds)->ds_deadlist_obj; + dsl_dataset_phys(ds)->ds_deadlist_obj = + dsl_dataset_phys(ds_next)->ds_deadlist_obj; + dsl_dataset_phys(ds_next)->ds_deadlist_obj = deadlist_obj; + dsl_deadlist_open(&ds->ds_deadlist, mos, + dsl_dataset_phys(ds)->ds_deadlist_obj); + dsl_deadlist_open(&ds_next->ds_deadlist, mos, + dsl_dataset_phys(ds_next)->ds_deadlist_obj); +} + +static void +dsl_dataset_remove_clones_key(dsl_dataset_t *ds, uint64_t mintxg, dmu_tx_t *tx) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + zap_cursor_t *zc; + zap_attribute_t *za; + + /* + * If it is the old version, dd_clones doesn't exist so we can't + * find the clones, but dsl_deadlist_remove_key() is a no-op so it + * doesn't matter. + */ + if (dsl_dir_phys(ds->ds_dir)->dd_clones == 0) + return; + + zc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + + for (zap_cursor_init(zc, mos, dsl_dir_phys(ds->ds_dir)->dd_clones); + zap_cursor_retrieve(zc, za) == 0; + zap_cursor_advance(zc)) { + dsl_dataset_t *clone; + + VERIFY0(dsl_dataset_hold_obj(ds->ds_dir->dd_pool, + za->za_first_integer, FTAG, &clone)); + if (clone->ds_dir->dd_origin_txg > mintxg) { + dsl_deadlist_remove_key(&clone->ds_deadlist, + mintxg, tx); + dsl_dataset_remove_clones_key(clone, mintxg, tx); + } + dsl_dataset_rele(clone, FTAG); + } + zap_cursor_fini(zc); + + kmem_free(za, sizeof (zap_attribute_t)); + kmem_free(zc, sizeof (zap_cursor_t)); +} + +void +dsl_destroy_snapshot_sync_impl(dsl_dataset_t *ds, boolean_t defer, dmu_tx_t *tx) +{ + spa_feature_t f; + int after_branch_point = FALSE; + dsl_pool_t *dp = ds->ds_dir->dd_pool; + objset_t *mos = dp->dp_meta_objset; + dsl_dataset_t *ds_prev = NULL; + uint64_t obj, old_unique, used = 0, comp = 0, uncomp = 0; + dsl_dataset_t *ds_next, *ds_head, *hds; + + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + ASSERT3U(dsl_dataset_phys(ds)->ds_bp.blk_birth, <=, tx->tx_txg); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + ASSERT(refcount_is_zero(&ds->ds_longholds)); + + if (defer && + (ds->ds_userrefs > 0 || + dsl_dataset_phys(ds)->ds_num_children > 1)) { + ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_DEFER_DESTROY; + spa_history_log_internal_ds(ds, "defer_destroy", tx, ""); + return; + } + + ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); + + /* We need to log before removing it from the namespace. */ + spa_history_log_internal_ds(ds, "destroy", tx, ""); + + dsl_scan_ds_destroyed(ds, tx); + + obj = ds->ds_object; + + for (f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) { + dsl_dataset_deactivate_feature(obj, f, tx); + ds->ds_feature_inuse[f] = B_FALSE; + } + } + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + ASSERT3P(ds->ds_prev, ==, NULL); + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &ds_prev)); + after_branch_point = + (dsl_dataset_phys(ds_prev)->ds_next_snap_obj != obj); + + dmu_buf_will_dirty(ds_prev->ds_dbuf, tx); + if (after_branch_point && + dsl_dataset_phys(ds_prev)->ds_next_clones_obj != 0) { + dsl_dataset_remove_from_next_clones(ds_prev, obj, tx); + if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0) { + VERIFY0(zap_add_int(mos, + dsl_dataset_phys(ds_prev)-> + ds_next_clones_obj, + dsl_dataset_phys(ds)->ds_next_snap_obj, + tx)); + } + } + if (!after_branch_point) { + dsl_dataset_phys(ds_prev)->ds_next_snap_obj = + dsl_dataset_phys(ds)->ds_next_snap_obj; + } + } + + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_next_snap_obj, FTAG, &ds_next)); + ASSERT3U(dsl_dataset_phys(ds_next)->ds_prev_snap_obj, ==, obj); + + old_unique = dsl_dataset_phys(ds_next)->ds_unique_bytes; + + dmu_buf_will_dirty(ds_next->ds_dbuf, tx); + dsl_dataset_phys(ds_next)->ds_prev_snap_obj = + dsl_dataset_phys(ds)->ds_prev_snap_obj; + dsl_dataset_phys(ds_next)->ds_prev_snap_txg = + dsl_dataset_phys(ds)->ds_prev_snap_txg; + ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_txg, ==, + ds_prev ? dsl_dataset_phys(ds_prev)->ds_creation_txg : 0); + + if (ds_next->ds_deadlist.dl_oldfmt) { + process_old_deadlist(ds, ds_prev, ds_next, + after_branch_point, tx); + } else { + /* Adjust prev's unique space. */ + if (ds_prev && !after_branch_point) { + dsl_deadlist_space_range(&ds_next->ds_deadlist, + dsl_dataset_phys(ds_prev)->ds_prev_snap_txg, + dsl_dataset_phys(ds)->ds_prev_snap_txg, + &used, &comp, &uncomp); + dsl_dataset_phys(ds_prev)->ds_unique_bytes += used; + } + + /* Adjust snapused. */ + dsl_deadlist_space_range(&ds_next->ds_deadlist, + dsl_dataset_phys(ds)->ds_prev_snap_txg, UINT64_MAX, + &used, &comp, &uncomp); + dsl_dir_diduse_space(ds->ds_dir, DD_USED_SNAP, + -used, -comp, -uncomp, tx); + + /* Move blocks to be freed to pool's free list. */ + dsl_deadlist_move_bpobj(&ds_next->ds_deadlist, + &dp->dp_free_bpobj, dsl_dataset_phys(ds)->ds_prev_snap_txg, + tx); + dsl_dir_diduse_space(tx->tx_pool->dp_free_dir, + DD_USED_HEAD, used, comp, uncomp, tx); + + /* Merge our deadlist into next's and free it. */ + dsl_deadlist_merge(&ds_next->ds_deadlist, + dsl_dataset_phys(ds)->ds_deadlist_obj, tx); + } + dsl_deadlist_close(&ds->ds_deadlist); + dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_deadlist_obj = 0; + + /* Collapse range in clone heads */ + dsl_dataset_remove_clones_key(ds, + dsl_dataset_phys(ds)->ds_creation_txg, tx); + + if (ds_next->ds_is_snapshot) { + dsl_dataset_t *ds_nextnext; + + /* + * Update next's unique to include blocks which + * were previously shared by only this snapshot + * and it. Those blocks will be born after the + * prev snap and before this snap, and will have + * died after the next snap and before the one + * after that (ie. be on the snap after next's + * deadlist). + */ + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds_next)->ds_next_snap_obj, + FTAG, &ds_nextnext)); + dsl_deadlist_space_range(&ds_nextnext->ds_deadlist, + dsl_dataset_phys(ds)->ds_prev_snap_txg, + dsl_dataset_phys(ds)->ds_creation_txg, + &used, &comp, &uncomp); + dsl_dataset_phys(ds_next)->ds_unique_bytes += used; + dsl_dataset_rele(ds_nextnext, FTAG); + ASSERT3P(ds_next->ds_prev, ==, NULL); + + /* Collapse range in this head. */ + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &hds)); + dsl_deadlist_remove_key(&hds->ds_deadlist, + dsl_dataset_phys(ds)->ds_creation_txg, tx); + dsl_dataset_rele(hds, FTAG); + + } else { + ASSERT3P(ds_next->ds_prev, ==, ds); + dsl_dataset_rele(ds_next->ds_prev, ds_next); + ds_next->ds_prev = NULL; + if (ds_prev) { + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, + ds_next, &ds_next->ds_prev)); + } + + dsl_dataset_recalc_head_uniq(ds_next); + + /* + * Reduce the amount of our unconsumed refreservation + * being charged to our parent by the amount of + * new unique data we have gained. + */ + if (old_unique < ds_next->ds_reserved) { + int64_t mrsdelta; + uint64_t new_unique = + dsl_dataset_phys(ds_next)->ds_unique_bytes; + + ASSERT(old_unique <= new_unique); + mrsdelta = MIN(new_unique - old_unique, + ds_next->ds_reserved - old_unique); + dsl_dir_diduse_space(ds->ds_dir, + DD_USED_REFRSRV, -mrsdelta, 0, 0, tx); + } + } + dsl_dataset_rele(ds_next, FTAG); + + /* + * This must be done after the dsl_traverse(), because it will + * re-open the objset. + */ + if (ds->ds_objset) { + dmu_objset_evict(ds->ds_objset); + ds->ds_objset = NULL; + } + + /* remove from snapshot namespace */ + ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0); + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &ds_head)); + VERIFY0(dsl_dataset_get_snapname(ds)); +#ifdef ZFS_DEBUG + { + uint64_t val; + int err; + + err = dsl_dataset_snap_lookup(ds_head, + ds->ds_snapname, &val); + ASSERT0(err); + ASSERT3U(val, ==, obj); + } +#endif + VERIFY0(dsl_dataset_snap_remove(ds_head, ds->ds_snapname, tx, B_TRUE)); + dsl_dataset_rele(ds_head, FTAG); + + if (ds_prev != NULL) + dsl_dataset_rele(ds_prev, FTAG); + + spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); + + if (dsl_dataset_phys(ds)->ds_next_clones_obj != 0) { + ASSERTV(uint64_t count); + ASSERT0(zap_count(mos, + dsl_dataset_phys(ds)->ds_next_clones_obj, &count) && + count == 0); + VERIFY0(dmu_object_free(mos, + dsl_dataset_phys(ds)->ds_next_clones_obj, tx)); + } + if (dsl_dataset_phys(ds)->ds_props_obj != 0) + VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_props_obj, + tx)); + if (dsl_dataset_phys(ds)->ds_userrefs_obj != 0) + VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_userrefs_obj, + tx)); + dsl_dir_rele(ds->ds_dir, ds); + ds->ds_dir = NULL; + dmu_object_free_zapified(mos, obj, tx); +} + +static void +dsl_destroy_snapshot_sync(void *arg, dmu_tx_t *tx) +{ + dmu_snapshots_destroy_arg_t *dsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(dsda->dsda_successful_snaps, NULL); + pair != NULL; + pair = nvlist_next_nvpair(dsda->dsda_successful_snaps, pair)) { + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold(dp, nvpair_name(pair), FTAG, &ds)); + + dsl_destroy_snapshot_sync_impl(ds, dsda->dsda_defer, tx); + zvol_remove_minors(dp->dp_spa, nvpair_name(pair), B_TRUE); + dsl_dataset_rele(ds, FTAG); + } +} + +/* + * The semantics of this function are described in the comment above + * lzc_destroy_snaps(). To summarize: + * + * The snapshots must all be in the same pool. + * + * Snapshots that don't exist will be silently ignored (considered to be + * "already deleted"). + * + * On success, all snaps will be destroyed and this will return 0. + * On failure, no snaps will be destroyed, the errlist will be filled in, + * and this will return an errno. + */ +int +dsl_destroy_snapshots_nvl(nvlist_t *snaps, boolean_t defer, + nvlist_t *errlist) +{ + dmu_snapshots_destroy_arg_t dsda; + int error; + nvpair_t *pair; + + pair = nvlist_next_nvpair(snaps, NULL); + if (pair == NULL) + return (0); + + dsda.dsda_snaps = snaps; + VERIFY0(nvlist_alloc(&dsda.dsda_successful_snaps, + NV_UNIQUE_NAME, KM_SLEEP)); + dsda.dsda_defer = defer; + dsda.dsda_errlist = errlist; + + error = dsl_sync_task(nvpair_name(pair), + dsl_destroy_snapshot_check, dsl_destroy_snapshot_sync, + &dsda, 0, ZFS_SPACE_CHECK_NONE); + fnvlist_free(dsda.dsda_successful_snaps); + + return (error); +} + +int +dsl_destroy_snapshot(const char *name, boolean_t defer) +{ + int error; + nvlist_t *nvl = fnvlist_alloc(); + nvlist_t *errlist = fnvlist_alloc(); + + fnvlist_add_boolean(nvl, name); + error = dsl_destroy_snapshots_nvl(nvl, defer, errlist); + fnvlist_free(errlist); + fnvlist_free(nvl); + return (error); +} + +struct killarg { + dsl_dataset_t *ds; + dmu_tx_t *tx; +}; + +/* ARGSUSED */ +static int +kill_blkptr(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + struct killarg *ka = arg; + dmu_tx_t *tx = ka->tx; + + if (bp == NULL || BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) + return (0); + + if (zb->zb_level == ZB_ZIL_LEVEL) { + ASSERT(zilog != NULL); + /* + * It's a block in the intent log. It has no + * accounting, so just free it. + */ + dsl_free(ka->tx->tx_pool, ka->tx->tx_txg, bp); + } else { + ASSERT(zilog == NULL); + ASSERT3U(bp->blk_birth, >, + dsl_dataset_phys(ka->ds)->ds_prev_snap_txg); + (void) dsl_dataset_block_kill(ka->ds, bp, tx, B_FALSE); + } + + return (0); +} + +static void +old_synchronous_dataset_destroy(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + struct killarg ka; + + /* + * Free everything that we point to (that's born after + * the previous snapshot, if we are a clone) + * + * NB: this should be very quick, because we already + * freed all the objects in open context. + */ + ka.ds = ds; + ka.tx = tx; + VERIFY0(traverse_dataset(ds, + dsl_dataset_phys(ds)->ds_prev_snap_txg, TRAVERSE_POST, + kill_blkptr, &ka)); + ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || + dsl_dataset_phys(ds)->ds_unique_bytes == 0); +} + +typedef struct dsl_destroy_head_arg { + const char *ddha_name; +} dsl_destroy_head_arg_t; + +int +dsl_destroy_head_check_impl(dsl_dataset_t *ds, int expected_holds) +{ + int error; + uint64_t count; + objset_t *mos; + + ASSERT(!ds->ds_is_snapshot); + if (ds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + if (refcount_count(&ds->ds_longholds) != expected_holds) + return (SET_ERROR(EBUSY)); + + mos = ds->ds_dir->dd_pool->dp_meta_objset; + + /* + * Can't delete a head dataset if there are snapshots of it. + * (Except if the only snapshots are from the branch we cloned + * from.) + */ + if (ds->ds_prev != NULL && + dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == ds->ds_object) + return (SET_ERROR(EBUSY)); + + /* + * Can't delete if there are children of this fs. + */ + error = zap_count(mos, + dsl_dir_phys(ds->ds_dir)->dd_child_dir_zapobj, &count); + if (error != 0) + return (error); + if (count != 0) + return (SET_ERROR(EEXIST)); + + if (dsl_dir_is_clone(ds->ds_dir) && DS_IS_DEFER_DESTROY(ds->ds_prev) && + dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && + ds->ds_prev->ds_userrefs == 0) { + /* We need to remove the origin snapshot as well. */ + if (!refcount_is_zero(&ds->ds_prev->ds_longholds)) + return (SET_ERROR(EBUSY)); + } + return (0); +} + +static int +dsl_destroy_head_check(void *arg, dmu_tx_t *tx) +{ + dsl_destroy_head_arg_t *ddha = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int error; + + error = dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds); + if (error != 0) + return (error); + + error = dsl_destroy_head_check_impl(ds, 0); + dsl_dataset_rele(ds, FTAG); + return (error); +} + +static void +dsl_dir_destroy_sync(uint64_t ddobj, dmu_tx_t *tx) +{ + dsl_dir_t *dd; + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + dd_used_t t; + + ASSERT(RRW_WRITE_HELD(&dmu_tx_pool(tx)->dp_config_rwlock)); + + VERIFY0(dsl_dir_hold_obj(dp, ddobj, NULL, FTAG, &dd)); + + ASSERT0(dsl_dir_phys(dd)->dd_head_dataset_obj); + + /* + * Decrement the filesystem count for all parent filesystems. + * + * When we receive an incremental stream into a filesystem that already + * exists, a temporary clone is created. We never count this temporary + * clone, whose name begins with a '%'. + */ + if (dd->dd_myname[0] != '%' && dd->dd_parent != NULL) + dsl_fs_ss_count_adjust(dd->dd_parent, -1, + DD_FIELD_FILESYSTEM_COUNT, tx); + + /* + * Remove our reservation. The impl() routine avoids setting the + * actual property, which would require the (already destroyed) ds. + */ + dsl_dir_set_reservation_sync_impl(dd, 0, tx); + + ASSERT0(dsl_dir_phys(dd)->dd_used_bytes); + ASSERT0(dsl_dir_phys(dd)->dd_reserved); + for (t = 0; t < DD_USED_NUM; t++) + ASSERT0(dsl_dir_phys(dd)->dd_used_breakdown[t]); + + VERIFY0(zap_destroy(mos, dsl_dir_phys(dd)->dd_child_dir_zapobj, tx)); + VERIFY0(zap_destroy(mos, dsl_dir_phys(dd)->dd_props_zapobj, tx)); + VERIFY0(dsl_deleg_destroy(mos, dsl_dir_phys(dd)->dd_deleg_zapobj, tx)); + VERIFY0(zap_remove(mos, + dsl_dir_phys(dd->dd_parent)->dd_child_dir_zapobj, + dd->dd_myname, tx)); + + dsl_dir_rele(dd, FTAG); + dmu_object_free_zapified(mos, ddobj, tx); +} + +void +dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dmu_tx_pool(tx); + spa_feature_t f; + objset_t *mos = dp->dp_meta_objset; + uint64_t obj, ddobj, prevobj = 0; + boolean_t rmorigin; + objset_t *os; + + ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); + ASSERT(ds->ds_prev == NULL || + dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj != ds->ds_object); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + ASSERT3U(dsl_dataset_phys(ds)->ds_bp.blk_birth, <=, tx->tx_txg); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + + /* We need to log before removing it from the namespace. */ + spa_history_log_internal_ds(ds, "destroy", tx, ""); + + rmorigin = (dsl_dir_is_clone(ds->ds_dir) && + DS_IS_DEFER_DESTROY(ds->ds_prev) && + dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && + ds->ds_prev->ds_userrefs == 0); + + /* Remove our reservation. */ + if (ds->ds_reserved != 0) { + dsl_dataset_set_refreservation_sync_impl(ds, + (ZPROP_SRC_NONE | ZPROP_SRC_LOCAL | ZPROP_SRC_RECEIVED), + 0, tx); + ASSERT0(ds->ds_reserved); + } + + obj = ds->ds_object; + + for (f = 0; f < SPA_FEATURES; f++) { + if (ds->ds_feature_inuse[f]) { + dsl_dataset_deactivate_feature(obj, f, tx); + ds->ds_feature_inuse[f] = B_FALSE; + } + } + + dsl_scan_ds_destroyed(ds, tx); + + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + /* This is a clone */ + ASSERT(ds->ds_prev != NULL); + ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj, !=, + obj); + ASSERT0(dsl_dataset_phys(ds)->ds_next_snap_obj); + + dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); + if (dsl_dataset_phys(ds->ds_prev)->ds_next_clones_obj != 0) { + dsl_dataset_remove_from_next_clones(ds->ds_prev, + obj, tx); + } + + ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_num_children, >, 1); + dsl_dataset_phys(ds->ds_prev)->ds_num_children--; + } + + /* + * Destroy the deadlist. Unless it's a clone, the + * deadlist should be empty. (If it's a clone, it's + * safe to ignore the deadlist contents.) + */ + dsl_deadlist_close(&ds->ds_deadlist); + dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_deadlist_obj = 0; + + VERIFY0(dmu_objset_from_ds(ds, &os)); + + if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY)) { + old_synchronous_dataset_destroy(ds, tx); + } else { + /* + * Move the bptree into the pool's list of trees to + * clean up and update space accounting information. + */ + uint64_t used, comp, uncomp; + + zil_destroy_sync(dmu_objset_zil(os), tx); + + if (!spa_feature_is_active(dp->dp_spa, + SPA_FEATURE_ASYNC_DESTROY)) { + dsl_scan_t *scn = dp->dp_scan; + spa_feature_incr(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY, + tx); + dp->dp_bptree_obj = bptree_alloc(mos, tx); + VERIFY0(zap_add(mos, + DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_BPTREE_OBJ, sizeof (uint64_t), 1, + &dp->dp_bptree_obj, tx)); + ASSERT(!scn->scn_async_destroying); + scn->scn_async_destroying = B_TRUE; + } + + used = dsl_dir_phys(ds->ds_dir)->dd_used_bytes; + comp = dsl_dir_phys(ds->ds_dir)->dd_compressed_bytes; + uncomp = dsl_dir_phys(ds->ds_dir)->dd_uncompressed_bytes; + + ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || + dsl_dataset_phys(ds)->ds_unique_bytes == used); + + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + bptree_add(mos, dp->dp_bptree_obj, + &dsl_dataset_phys(ds)->ds_bp, + dsl_dataset_phys(ds)->ds_prev_snap_txg, + used, comp, uncomp, tx); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, + -used, -comp, -uncomp, tx); + dsl_dir_diduse_space(dp->dp_free_dir, DD_USED_HEAD, + used, comp, uncomp, tx); + } + + if (ds->ds_prev != NULL) { + if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { + VERIFY0(zap_remove_int(mos, + dsl_dir_phys(ds->ds_prev->ds_dir)->dd_clones, + ds->ds_object, tx)); + } + prevobj = ds->ds_prev->ds_object; + dsl_dataset_rele(ds->ds_prev, ds); + ds->ds_prev = NULL; + } + + /* + * This must be done after the dsl_traverse(), because it will + * re-open the objset. + */ + if (ds->ds_objset) { + dmu_objset_evict(ds->ds_objset); + ds->ds_objset = NULL; + } + + /* Erase the link in the dir */ + dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx); + dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj = 0; + ddobj = ds->ds_dir->dd_object; + ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj != 0); + VERIFY0(zap_destroy(mos, + dsl_dataset_phys(ds)->ds_snapnames_zapobj, tx)); + + if (ds->ds_bookmarks != 0) { + VERIFY0(zap_destroy(mos, ds->ds_bookmarks, tx)); + spa_feature_decr(dp->dp_spa, SPA_FEATURE_BOOKMARKS, tx); + } + + spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); + + ASSERT0(dsl_dataset_phys(ds)->ds_next_clones_obj); + ASSERT0(dsl_dataset_phys(ds)->ds_props_obj); + ASSERT0(dsl_dataset_phys(ds)->ds_userrefs_obj); + dsl_dir_rele(ds->ds_dir, ds); + ds->ds_dir = NULL; + dmu_object_free_zapified(mos, obj, tx); + + dsl_dir_destroy_sync(ddobj, tx); + + if (rmorigin) { + dsl_dataset_t *prev; + VERIFY0(dsl_dataset_hold_obj(dp, prevobj, FTAG, &prev)); + dsl_destroy_snapshot_sync_impl(prev, B_FALSE, tx); + dsl_dataset_rele(prev, FTAG); + } +} + +static void +dsl_destroy_head_sync(void *arg, dmu_tx_t *tx) +{ + dsl_destroy_head_arg_t *ddha = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); + dsl_destroy_head_sync_impl(ds, tx); + zvol_remove_minors(dp->dp_spa, ddha->ddha_name, B_TRUE); + dsl_dataset_rele(ds, FTAG); +} + +static void +dsl_destroy_head_begin_sync(void *arg, dmu_tx_t *tx) +{ + dsl_destroy_head_arg_t *ddha = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); + + /* Mark it as inconsistent on-disk, in case we crash */ + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_INCONSISTENT; + + spa_history_log_internal_ds(ds, "destroy begin", tx, ""); + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_destroy_head(const char *name) +{ + dsl_destroy_head_arg_t ddha; + int error; + spa_t *spa; + boolean_t isenabled; + +#ifdef _KERNEL + zfs_destroy_unmount_origin(name); +#endif + + error = spa_open(name, &spa, FTAG); + if (error != 0) + return (error); + isenabled = spa_feature_is_enabled(spa, SPA_FEATURE_ASYNC_DESTROY); + spa_close(spa, FTAG); + + ddha.ddha_name = name; + + if (!isenabled) { + objset_t *os; + + error = dsl_sync_task(name, dsl_destroy_head_check, + dsl_destroy_head_begin_sync, &ddha, + 0, ZFS_SPACE_CHECK_NONE); + if (error != 0) + return (error); + + /* + * Head deletion is processed in one txg on old pools; + * remove the objects from open context so that the txg sync + * is not too long. + */ + error = dmu_objset_own(name, DMU_OST_ANY, B_FALSE, FTAG, &os); + if (error == 0) { + uint64_t obj; + uint64_t prev_snap_txg = + dsl_dataset_phys(dmu_objset_ds(os))-> + ds_prev_snap_txg; + for (obj = 0; error == 0; + error = dmu_object_next(os, &obj, FALSE, + prev_snap_txg)) + (void) dmu_free_long_object(os, obj); + /* sync out all frees */ + txg_wait_synced(dmu_objset_pool(os), 0); + dmu_objset_disown(os, FTAG); + } + } + + return (dsl_sync_task(name, dsl_destroy_head_check, + dsl_destroy_head_sync, &ddha, 0, ZFS_SPACE_CHECK_NONE)); +} + +/* + * Note, this function is used as the callback for dmu_objset_find(). We + * always return 0 so that we will continue to find and process + * inconsistent datasets, even if we encounter an error trying to + * process one of them. + */ +/* ARGSUSED */ +int +dsl_destroy_inconsistent(const char *dsname, void *arg) +{ + objset_t *os; + + if (dmu_objset_hold(dsname, FTAG, &os) == 0) { + boolean_t need_destroy = DS_IS_INCONSISTENT(dmu_objset_ds(os)); + + /* + * If the dataset is inconsistent because a resumable receive + * has failed, then do not destroy it. + */ + if (dsl_dataset_has_resume_receive_state(dmu_objset_ds(os))) + need_destroy = B_FALSE; + + dmu_objset_rele(os, FTAG); + if (need_destroy) + (void) dsl_destroy_head(dsname); + } + return (0); +} + + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_destroy_head); +EXPORT_SYMBOL(dsl_destroy_head_sync_impl); +EXPORT_SYMBOL(dsl_dataset_user_hold_check_one); +EXPORT_SYMBOL(dsl_destroy_snapshot_sync_impl); +EXPORT_SYMBOL(dsl_destroy_inconsistent); +EXPORT_SYMBOL(dsl_dataset_user_release_tmp); +EXPORT_SYMBOL(dsl_destroy_head_check_impl); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_dir.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_dir.c @@ -0,0 +1,2020 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2013 Martin Matuska. All rights reserved. + * Copyright (c) 2014 Joyent, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zfs_namecheck.h" +#include "zfs_prop.h" + +/* + * Filesystem and Snapshot Limits + * ------------------------------ + * + * These limits are used to restrict the number of filesystems and/or snapshots + * that can be created at a given level in the tree or below. A typical + * use-case is with a delegated dataset where the administrator wants to ensure + * that a user within the zone is not creating too many additional filesystems + * or snapshots, even though they're not exceeding their space quota. + * + * The filesystem and snapshot counts are stored as extensible properties. This + * capability is controlled by a feature flag and must be enabled to be used. + * Once enabled, the feature is not active until the first limit is set. At + * that point, future operations to create/destroy filesystems or snapshots + * will validate and update the counts. + * + * Because the count properties will not exist before the feature is active, + * the counts are updated when a limit is first set on an uninitialized + * dsl_dir node in the tree (The filesystem/snapshot count on a node includes + * all of the nested filesystems/snapshots. Thus, a new leaf node has a + * filesystem count of 0 and a snapshot count of 0. Non-existent filesystem and + * snapshot count properties on a node indicate uninitialized counts on that + * node.) When first setting a limit on an uninitialized node, the code starts + * at the filesystem with the new limit and descends into all sub-filesystems + * to add the count properties. + * + * In practice this is lightweight since a limit is typically set when the + * filesystem is created and thus has no children. Once valid, changing the + * limit value won't require a re-traversal since the counts are already valid. + * When recursively fixing the counts, if a node with a limit is encountered + * during the descent, the counts are known to be valid and there is no need to + * descend into that filesystem's children. The counts on filesystems above the + * one with the new limit will still be uninitialized, unless a limit is + * eventually set on one of those filesystems. The counts are always recursively + * updated when a limit is set on a dataset, unless there is already a limit. + * When a new limit value is set on a filesystem with an existing limit, it is + * possible for the new limit to be less than the current count at that level + * since a user who can change the limit is also allowed to exceed the limit. + * + * Once the feature is active, then whenever a filesystem or snapshot is + * created, the code recurses up the tree, validating the new count against the + * limit at each initialized level. In practice, most levels will not have a + * limit set. If there is a limit at any initialized level up the tree, the + * check must pass or the creation will fail. Likewise, when a filesystem or + * snapshot is destroyed, the counts are recursively adjusted all the way up + * the initizized nodes in the tree. Renaming a filesystem into different point + * in the tree will first validate, then update the counts on each branch up to + * the common ancestor. A receive will also validate the counts and then update + * them. + * + * An exception to the above behavior is that the limit is not enforced if the + * user has permission to modify the limit. This is primarily so that + * recursive snapshots in the global zone always work. We want to prevent a + * denial-of-service in which a lower level delegated dataset could max out its + * limit and thus block recursive snapshots from being taken in the global zone. + * Because of this, it is possible for the snapshot count to be over the limit + * and snapshots taken in the global zone could cause a lower level dataset to + * hit or exceed its limit. The administrator taking the global zone recursive + * snapshot should be aware of this side-effect and behave accordingly. + * For consistency, the filesystem limit is also not enforced if the user can + * modify the limit. + * + * The filesystem and snapshot limits are validated by dsl_fs_ss_limit_check() + * and updated by dsl_fs_ss_count_adjust(). A new limit value is setup in + * dsl_dir_activate_fs_ss_limit() and the counts are adjusted, if necessary, by + * dsl_dir_init_fs_ss_count(). + * + * There is a special case when we receive a filesystem that already exists. In + * this case a temporary clone name of %X is created (see dmu_recv_begin). We + * never update the filesystem counts for temporary clones. + * + * Likewise, we do not update the snapshot counts for temporary snapshots, + * such as those created by zfs diff. + */ + +extern inline dsl_dir_phys_t *dsl_dir_phys(dsl_dir_t *dd); + +static uint64_t dsl_dir_space_towrite(dsl_dir_t *dd); + +static void +dsl_dir_evict_async(void *dbu) +{ + dsl_dir_t *dd = dbu; + int t; + ASSERTV(dsl_pool_t *dp = dd->dd_pool); + + dd->dd_dbuf = NULL; + + for (t = 0; t < TXG_SIZE; t++) { + ASSERT(!txg_list_member(&dp->dp_dirty_dirs, dd, t)); + ASSERT(dd->dd_tempreserved[t] == 0); + ASSERT(dd->dd_space_towrite[t] == 0); + } + + if (dd->dd_parent) + dsl_dir_async_rele(dd->dd_parent, dd); + + spa_async_close(dd->dd_pool->dp_spa, dd); + + dsl_prop_fini(dd); + mutex_destroy(&dd->dd_lock); + kmem_free(dd, sizeof (dsl_dir_t)); +} + +int +dsl_dir_hold_obj(dsl_pool_t *dp, uint64_t ddobj, + const char *tail, void *tag, dsl_dir_t **ddp) +{ + dmu_buf_t *dbuf; + dsl_dir_t *dd; + int err; + + ASSERT(dsl_pool_config_held(dp)); + + err = dmu_bonus_hold(dp->dp_meta_objset, ddobj, tag, &dbuf); + if (err != 0) + return (err); + dd = dmu_buf_get_user(dbuf); +#ifdef ZFS_DEBUG + { + dmu_object_info_t doi; + dmu_object_info_from_db(dbuf, &doi); + ASSERT3U(doi.doi_bonus_type, ==, DMU_OT_DSL_DIR); + ASSERT3U(doi.doi_bonus_size, >=, sizeof (dsl_dir_phys_t)); + } +#endif + if (dd == NULL) { + dsl_dir_t *winner; + + dd = kmem_zalloc(sizeof (dsl_dir_t), KM_SLEEP); + dd->dd_object = ddobj; + dd->dd_dbuf = dbuf; + dd->dd_pool = dp; + mutex_init(&dd->dd_lock, NULL, MUTEX_DEFAULT, NULL); + dsl_prop_init(dd); + + dsl_dir_snap_cmtime_update(dd); + + if (dsl_dir_phys(dd)->dd_parent_obj) { + err = dsl_dir_hold_obj(dp, + dsl_dir_phys(dd)->dd_parent_obj, NULL, dd, + &dd->dd_parent); + if (err != 0) + goto errout; + if (tail) { +#ifdef ZFS_DEBUG + uint64_t foundobj; + + err = zap_lookup(dp->dp_meta_objset, + dsl_dir_phys(dd->dd_parent)-> + dd_child_dir_zapobj, tail, + sizeof (foundobj), 1, &foundobj); + ASSERT(err || foundobj == ddobj); +#endif + (void) strlcpy(dd->dd_myname, tail, + sizeof (dd->dd_myname)); + } else { + err = zap_value_search(dp->dp_meta_objset, + dsl_dir_phys(dd->dd_parent)-> + dd_child_dir_zapobj, + ddobj, 0, dd->dd_myname); + } + if (err != 0) + goto errout; + } else { + (void) strcpy(dd->dd_myname, spa_name(dp->dp_spa)); + } + + if (dsl_dir_is_clone(dd)) { + dmu_buf_t *origin_bonus; + dsl_dataset_phys_t *origin_phys; + + /* + * We can't open the origin dataset, because + * that would require opening this dsl_dir. + * Just look at its phys directly instead. + */ + err = dmu_bonus_hold(dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_origin_obj, FTAG, + &origin_bonus); + if (err != 0) + goto errout; + origin_phys = origin_bonus->db_data; + dd->dd_origin_txg = + origin_phys->ds_creation_txg; + dmu_buf_rele(origin_bonus, FTAG); + } + + dmu_buf_init_user(&dd->dd_dbu, NULL, dsl_dir_evict_async, + &dd->dd_dbuf); + winner = dmu_buf_set_user_ie(dbuf, &dd->dd_dbu); + if (winner != NULL) { + if (dd->dd_parent) + dsl_dir_rele(dd->dd_parent, dd); + dsl_prop_fini(dd); + mutex_destroy(&dd->dd_lock); + kmem_free(dd, sizeof (dsl_dir_t)); + dd = winner; + } else { + spa_open_ref(dp->dp_spa, dd); + } + } + + /* + * The dsl_dir_t has both open-to-close and instantiate-to-evict + * holds on the spa. We need the open-to-close holds because + * otherwise the spa_refcnt wouldn't change when we open a + * dir which the spa also has open, so we could incorrectly + * think it was OK to unload/export/destroy the pool. We need + * the instantiate-to-evict hold because the dsl_dir_t has a + * pointer to the dd_pool, which has a pointer to the spa_t. + */ + spa_open_ref(dp->dp_spa, tag); + ASSERT3P(dd->dd_pool, ==, dp); + ASSERT3U(dd->dd_object, ==, ddobj); + ASSERT3P(dd->dd_dbuf, ==, dbuf); + *ddp = dd; + return (0); + +errout: + if (dd->dd_parent) + dsl_dir_rele(dd->dd_parent, dd); + dsl_prop_fini(dd); + mutex_destroy(&dd->dd_lock); + kmem_free(dd, sizeof (dsl_dir_t)); + dmu_buf_rele(dbuf, tag); + return (err); +} + +void +dsl_dir_rele(dsl_dir_t *dd, void *tag) +{ + dprintf_dd(dd, "%s\n", ""); + spa_close(dd->dd_pool->dp_spa, tag); + dmu_buf_rele(dd->dd_dbuf, tag); +} + +/* + * Remove a reference to the given dsl dir that is being asynchronously + * released. Async releases occur from a taskq performing eviction of + * dsl datasets and dirs. This process is identical to a normal release + * with the exception of using the async API for releasing the reference on + * the spa. + */ +void +dsl_dir_async_rele(dsl_dir_t *dd, void *tag) +{ + dprintf_dd(dd, "%s\n", ""); + spa_async_close(dd->dd_pool->dp_spa, tag); + dmu_buf_rele(dd->dd_dbuf, tag); +} + +/* buf must be at least ZFS_MAX_DATASET_NAME_LEN bytes */ +void +dsl_dir_name(dsl_dir_t *dd, char *buf) +{ + if (dd->dd_parent) { + dsl_dir_name(dd->dd_parent, buf); + VERIFY3U(strlcat(buf, "/", ZFS_MAX_DATASET_NAME_LEN), <, + ZFS_MAX_DATASET_NAME_LEN); + } else { + buf[0] = '\0'; + } + if (!MUTEX_HELD(&dd->dd_lock)) { + /* + * recursive mutex so that we can use + * dprintf_dd() with dd_lock held + */ + mutex_enter(&dd->dd_lock); + VERIFY3U(strlcat(buf, dd->dd_myname, ZFS_MAX_DATASET_NAME_LEN), + <, ZFS_MAX_DATASET_NAME_LEN); + mutex_exit(&dd->dd_lock); + } else { + VERIFY3U(strlcat(buf, dd->dd_myname, ZFS_MAX_DATASET_NAME_LEN), + <, ZFS_MAX_DATASET_NAME_LEN); + } +} + +/* Calculate name length, avoiding all the strcat calls of dsl_dir_name */ +int +dsl_dir_namelen(dsl_dir_t *dd) +{ + int result = 0; + + if (dd->dd_parent) { + /* parent's name + 1 for the "/" */ + result = dsl_dir_namelen(dd->dd_parent) + 1; + } + + if (!MUTEX_HELD(&dd->dd_lock)) { + /* see dsl_dir_name */ + mutex_enter(&dd->dd_lock); + result += strlen(dd->dd_myname); + mutex_exit(&dd->dd_lock); + } else { + result += strlen(dd->dd_myname); + } + + return (result); +} + +static int +getcomponent(const char *path, char *component, const char **nextp) +{ + char *p; + + if ((path == NULL) || (path[0] == '\0')) + return (SET_ERROR(ENOENT)); + /* This would be a good place to reserve some namespace... */ + p = strpbrk(path, "/@"); + if (p && (p[1] == '/' || p[1] == '@')) { + /* two separators in a row */ + return (SET_ERROR(EINVAL)); + } + if (p == NULL || p == path) { + /* + * if the first thing is an @ or /, it had better be an + * @ and it had better not have any more ats or slashes, + * and it had better have something after the @. + */ + if (p != NULL && + (p[0] != '@' || strpbrk(path+1, "/@") || p[1] == '\0')) + return (SET_ERROR(EINVAL)); + if (strlen(path) >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + (void) strcpy(component, path); + p = NULL; + } else if (p[0] == '/') { + if (p - path >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + (void) strncpy(component, path, p - path); + component[p - path] = '\0'; + p++; + } else if (p[0] == '@') { + /* + * if the next separator is an @, there better not be + * any more slashes. + */ + if (strchr(path, '/')) + return (SET_ERROR(EINVAL)); + if (p - path >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + (void) strncpy(component, path, p - path); + component[p - path] = '\0'; + } else { + panic("invalid p=%p", (void *)p); + } + *nextp = p; + return (0); +} + +/* + * Return the dsl_dir_t, and possibly the last component which couldn't + * be found in *tail. The name must be in the specified dsl_pool_t. This + * thread must hold the dp_config_rwlock for the pool. Returns NULL if the + * path is bogus, or if tail==NULL and we couldn't parse the whole name. + * (*tail)[0] == '@' means that the last component is a snapshot. + */ +int +dsl_dir_hold(dsl_pool_t *dp, const char *name, void *tag, + dsl_dir_t **ddp, const char **tailp) +{ + char *buf; + const char *spaname, *next, *nextnext = NULL; + int err; + dsl_dir_t *dd; + uint64_t ddobj; + + buf = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + err = getcomponent(name, buf, &next); + if (err != 0) + goto error; + + /* Make sure the name is in the specified pool. */ + spaname = spa_name(dp->dp_spa); + if (strcmp(buf, spaname) != 0) { + err = SET_ERROR(EXDEV); + goto error; + } + + ASSERT(dsl_pool_config_held(dp)); + + err = dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, NULL, tag, &dd); + if (err != 0) { + goto error; + } + + while (next != NULL) { + dsl_dir_t *child_dd; + err = getcomponent(next, buf, &nextnext); + if (err != 0) + break; + ASSERT(next[0] != '\0'); + if (next[0] == '@') + break; + dprintf("looking up %s in obj%lld\n", + buf, dsl_dir_phys(dd)->dd_child_dir_zapobj); + + err = zap_lookup(dp->dp_meta_objset, + dsl_dir_phys(dd)->dd_child_dir_zapobj, + buf, sizeof (ddobj), 1, &ddobj); + if (err != 0) { + if (err == ENOENT) + err = 0; + break; + } + + err = dsl_dir_hold_obj(dp, ddobj, buf, tag, &child_dd); + if (err != 0) + break; + dsl_dir_rele(dd, tag); + dd = child_dd; + next = nextnext; + } + + if (err != 0) { + dsl_dir_rele(dd, tag); + goto error; + } + + /* + * It's an error if there's more than one component left, or + * tailp==NULL and there's any component left. + */ + if (next != NULL && + (tailp == NULL || (nextnext && nextnext[0] != '\0'))) { + /* bad path name */ + dsl_dir_rele(dd, tag); + dprintf("next=%p (%s) tail=%p\n", next, next?next:"", tailp); + err = SET_ERROR(ENOENT); + } + if (tailp != NULL) + *tailp = next; + *ddp = dd; +error: + kmem_free(buf, ZFS_MAX_DATASET_NAME_LEN); + return (err); +} + +/* + * If the counts are already initialized for this filesystem and its + * descendants then do nothing, otherwise initialize the counts. + * + * The counts on this filesystem, and those below, may be uninitialized due to + * either the use of a pre-existing pool which did not support the + * filesystem/snapshot limit feature, or one in which the feature had not yet + * been enabled. + * + * Recursively descend the filesystem tree and update the filesystem/snapshot + * counts on each filesystem below, then update the cumulative count on the + * current filesystem. If the filesystem already has a count set on it, + * then we know that its counts, and the counts on the filesystems below it, + * are already correct, so we don't have to update this filesystem. + */ +static void +dsl_dir_init_fs_ss_count(dsl_dir_t *dd, dmu_tx_t *tx) +{ + uint64_t my_fs_cnt = 0; + uint64_t my_ss_cnt = 0; + dsl_pool_t *dp = dd->dd_pool; + objset_t *os = dp->dp_meta_objset; + zap_cursor_t *zc; + zap_attribute_t *za; + dsl_dataset_t *ds; + + ASSERT(spa_feature_is_active(dp->dp_spa, SPA_FEATURE_FS_SS_LIMIT)); + ASSERT(dsl_pool_config_held(dp)); + ASSERT(dmu_tx_is_syncing(tx)); + + dsl_dir_zapify(dd, tx); + + /* + * If the filesystem count has already been initialized then we + * don't need to recurse down any further. + */ + if (zap_contains(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT) == 0) + return; + + zc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + + /* Iterate my child dirs */ + for (zap_cursor_init(zc, os, dsl_dir_phys(dd)->dd_child_dir_zapobj); + zap_cursor_retrieve(zc, za) == 0; zap_cursor_advance(zc)) { + dsl_dir_t *chld_dd; + uint64_t count; + + VERIFY0(dsl_dir_hold_obj(dp, za->za_first_integer, NULL, FTAG, + &chld_dd)); + + /* + * Ignore hidden ($FREE, $MOS & $ORIGIN) objsets and + * temporary datasets. + */ + if (chld_dd->dd_myname[0] == '$' || + chld_dd->dd_myname[0] == '%') { + dsl_dir_rele(chld_dd, FTAG); + continue; + } + + my_fs_cnt++; /* count this child */ + + dsl_dir_init_fs_ss_count(chld_dd, tx); + + VERIFY0(zap_lookup(os, chld_dd->dd_object, + DD_FIELD_FILESYSTEM_COUNT, sizeof (count), 1, &count)); + my_fs_cnt += count; + VERIFY0(zap_lookup(os, chld_dd->dd_object, + DD_FIELD_SNAPSHOT_COUNT, sizeof (count), 1, &count)); + my_ss_cnt += count; + + dsl_dir_rele(chld_dd, FTAG); + } + zap_cursor_fini(zc); + /* Count my snapshots (we counted children's snapshots above) */ + VERIFY0(dsl_dataset_hold_obj(dd->dd_pool, + dsl_dir_phys(dd)->dd_head_dataset_obj, FTAG, &ds)); + + for (zap_cursor_init(zc, os, dsl_dataset_phys(ds)->ds_snapnames_zapobj); + zap_cursor_retrieve(zc, za) == 0; + zap_cursor_advance(zc)) { + /* Don't count temporary snapshots */ + if (za->za_name[0] != '%') + my_ss_cnt++; + } + zap_cursor_fini(zc); + + dsl_dataset_rele(ds, FTAG); + + kmem_free(zc, sizeof (zap_cursor_t)); + kmem_free(za, sizeof (zap_attribute_t)); + + /* we're in a sync task, update counts */ + dmu_buf_will_dirty(dd->dd_dbuf, tx); + VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT, + sizeof (my_fs_cnt), 1, &my_fs_cnt, tx)); + VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_SNAPSHOT_COUNT, + sizeof (my_ss_cnt), 1, &my_ss_cnt, tx)); +} + +static int +dsl_dir_actv_fs_ss_limit_check(void *arg, dmu_tx_t *tx) +{ + char *ddname = (char *)arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + dsl_dir_t *dd; + int error; + + error = dsl_dataset_hold(dp, ddname, FTAG, &ds); + if (error != 0) + return (error); + + if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_FS_SS_LIMIT)) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + dd = ds->ds_dir; + if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_FS_SS_LIMIT) && + dsl_dir_is_zapified(dd) && + zap_contains(dp->dp_meta_objset, dd->dd_object, + DD_FIELD_FILESYSTEM_COUNT) == 0) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(EALREADY)); + } + + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_dir_actv_fs_ss_limit_sync(void *arg, dmu_tx_t *tx) +{ + char *ddname = (char *)arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + spa_t *spa; + + VERIFY0(dsl_dataset_hold(dp, ddname, FTAG, &ds)); + + spa = dsl_dataset_get_spa(ds); + + if (!spa_feature_is_active(spa, SPA_FEATURE_FS_SS_LIMIT)) { + /* + * Since the feature was not active and we're now setting a + * limit, increment the feature-active counter so that the + * feature becomes active for the first time. + * + * We are already in a sync task so we can update the MOS. + */ + spa_feature_incr(spa, SPA_FEATURE_FS_SS_LIMIT, tx); + } + + /* + * Since we are now setting a non-UINT64_MAX limit on the filesystem, + * we need to ensure the counts are correct. Descend down the tree from + * this point and update all of the counts to be accurate. + */ + dsl_dir_init_fs_ss_count(ds->ds_dir, tx); + + dsl_dataset_rele(ds, FTAG); +} + +/* + * Make sure the feature is enabled and activate it if necessary. + * Since we're setting a limit, ensure the on-disk counts are valid. + * This is only called by the ioctl path when setting a limit value. + * + * We do not need to validate the new limit, since users who can change the + * limit are also allowed to exceed the limit. + */ +int +dsl_dir_activate_fs_ss_limit(const char *ddname) +{ + int error; + + error = dsl_sync_task(ddname, dsl_dir_actv_fs_ss_limit_check, + dsl_dir_actv_fs_ss_limit_sync, (void *)ddname, 0, + ZFS_SPACE_CHECK_RESERVED); + + if (error == EALREADY) + error = 0; + + return (error); +} + +/* + * Used to determine if the filesystem_limit or snapshot_limit should be + * enforced. We allow the limit to be exceeded if the user has permission to + * write the property value. We pass in the creds that we got in the open + * context since we will always be the GZ root in syncing context. We also have + * to handle the case where we are allowed to change the limit on the current + * dataset, but there may be another limit in the tree above. + * + * We can never modify these two properties within a non-global zone. In + * addition, the other checks are modeled on zfs_secpolicy_write_perms. We + * can't use that function since we are already holding the dp_config_rwlock. + * In addition, we already have the dd and dealing with snapshots is simplified + * in this code. + */ + +typedef enum { + ENFORCE_ALWAYS, + ENFORCE_NEVER, + ENFORCE_ABOVE +} enforce_res_t; + +static enforce_res_t +dsl_enforce_ds_ss_limits(dsl_dir_t *dd, zfs_prop_t prop, cred_t *cr) +{ + enforce_res_t enforce = ENFORCE_ALWAYS; + uint64_t obj; + dsl_dataset_t *ds; + uint64_t zoned; + + ASSERT(prop == ZFS_PROP_FILESYSTEM_LIMIT || + prop == ZFS_PROP_SNAPSHOT_LIMIT); + +#ifdef _KERNEL + if (crgetzoneid(cr) != GLOBAL_ZONEID) + return (ENFORCE_ALWAYS); + + if (secpolicy_zfs(cr) == 0) + return (ENFORCE_NEVER); +#endif + + if ((obj = dsl_dir_phys(dd)->dd_head_dataset_obj) == 0) + return (ENFORCE_ALWAYS); + + ASSERT(dsl_pool_config_held(dd->dd_pool)); + + if (dsl_dataset_hold_obj(dd->dd_pool, obj, FTAG, &ds) != 0) + return (ENFORCE_ALWAYS); + + if (dsl_prop_get_ds(ds, "zoned", 8, 1, &zoned, NULL) || zoned) { + /* Only root can access zoned fs's from the GZ */ + enforce = ENFORCE_ALWAYS; + } else { + if (dsl_deleg_access_impl(ds, zfs_prop_to_name(prop), cr) == 0) + enforce = ENFORCE_ABOVE; + } + + dsl_dataset_rele(ds, FTAG); + return (enforce); +} + +/* + * Check if adding additional child filesystem(s) would exceed any filesystem + * limits or adding additional snapshot(s) would exceed any snapshot limits. + * The prop argument indicates which limit to check. + * + * Note that all filesystem limits up to the root (or the highest + * initialized) filesystem or the given ancestor must be satisfied. + */ +int +dsl_fs_ss_limit_check(dsl_dir_t *dd, uint64_t delta, zfs_prop_t prop, + dsl_dir_t *ancestor, cred_t *cr) +{ + objset_t *os = dd->dd_pool->dp_meta_objset; + uint64_t limit, count; + char *count_prop; + enforce_res_t enforce; + int err = 0; + + ASSERT(dsl_pool_config_held(dd->dd_pool)); + ASSERT(prop == ZFS_PROP_FILESYSTEM_LIMIT || + prop == ZFS_PROP_SNAPSHOT_LIMIT); + + /* + * If we're allowed to change the limit, don't enforce the limit + * e.g. this can happen if a snapshot is taken by an administrative + * user in the global zone (i.e. a recursive snapshot by root). + * However, we must handle the case of delegated permissions where we + * are allowed to change the limit on the current dataset, but there + * is another limit in the tree above. + */ + enforce = dsl_enforce_ds_ss_limits(dd, prop, cr); + if (enforce == ENFORCE_NEVER) + return (0); + + /* + * e.g. if renaming a dataset with no snapshots, count adjustment + * is 0. + */ + if (delta == 0) + return (0); + + if (prop == ZFS_PROP_SNAPSHOT_LIMIT) { + /* + * We don't enforce the limit for temporary snapshots. This is + * indicated by a NULL cred_t argument. + */ + if (cr == NULL) + return (0); + + count_prop = DD_FIELD_SNAPSHOT_COUNT; + } else { + count_prop = DD_FIELD_FILESYSTEM_COUNT; + } + + /* + * If an ancestor has been provided, stop checking the limit once we + * hit that dir. We need this during rename so that we don't overcount + * the check once we recurse up to the common ancestor. + */ + if (ancestor == dd) + return (0); + + /* + * If we hit an uninitialized node while recursing up the tree, we can + * stop since we know there is no limit here (or above). The counts are + * not valid on this node and we know we won't touch this node's counts. + */ + if (!dsl_dir_is_zapified(dd) || zap_lookup(os, dd->dd_object, + count_prop, sizeof (count), 1, &count) == ENOENT) + return (0); + + err = dsl_prop_get_dd(dd, zfs_prop_to_name(prop), 8, 1, &limit, NULL, + B_FALSE); + if (err != 0) + return (err); + + /* Is there a limit which we've hit? */ + if (enforce == ENFORCE_ALWAYS && (count + delta) > limit) + return (SET_ERROR(EDQUOT)); + + if (dd->dd_parent != NULL) + err = dsl_fs_ss_limit_check(dd->dd_parent, delta, prop, + ancestor, cr); + + return (err); +} + +/* + * Adjust the filesystem or snapshot count for the specified dsl_dir_t and all + * parents. When a new filesystem/snapshot is created, increment the count on + * all parents, and when a filesystem/snapshot is destroyed, decrement the + * count. + */ +void +dsl_fs_ss_count_adjust(dsl_dir_t *dd, int64_t delta, const char *prop, + dmu_tx_t *tx) +{ + int err; + objset_t *os = dd->dd_pool->dp_meta_objset; + uint64_t count; + + ASSERT(dsl_pool_config_held(dd->dd_pool)); + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(strcmp(prop, DD_FIELD_FILESYSTEM_COUNT) == 0 || + strcmp(prop, DD_FIELD_SNAPSHOT_COUNT) == 0); + + /* + * When we receive an incremental stream into a filesystem that already + * exists, a temporary clone is created. We don't count this temporary + * clone, whose name begins with a '%'. We also ignore hidden ($FREE, + * $MOS & $ORIGIN) objsets. + */ + if ((dd->dd_myname[0] == '%' || dd->dd_myname[0] == '$') && + strcmp(prop, DD_FIELD_FILESYSTEM_COUNT) == 0) + return; + + /* + * e.g. if renaming a dataset with no snapshots, count adjustment is 0 + */ + if (delta == 0) + return; + + /* + * If we hit an uninitialized node while recursing up the tree, we can + * stop since we know the counts are not valid on this node and we + * know we shouldn't touch this node's counts. An uninitialized count + * on the node indicates that either the feature has not yet been + * activated or there are no limits on this part of the tree. + */ + if (!dsl_dir_is_zapified(dd) || (err = zap_lookup(os, dd->dd_object, + prop, sizeof (count), 1, &count)) == ENOENT) + return; + VERIFY0(err); + + count += delta; + /* Use a signed verify to make sure we're not neg. */ + VERIFY3S(count, >=, 0); + + VERIFY0(zap_update(os, dd->dd_object, prop, sizeof (count), 1, &count, + tx)); + + /* Roll up this additional count into our ancestors */ + if (dd->dd_parent != NULL) + dsl_fs_ss_count_adjust(dd->dd_parent, delta, prop, tx); +} + +uint64_t +dsl_dir_create_sync(dsl_pool_t *dp, dsl_dir_t *pds, const char *name, + dmu_tx_t *tx) +{ + objset_t *mos = dp->dp_meta_objset; + uint64_t ddobj; + dsl_dir_phys_t *ddphys; + dmu_buf_t *dbuf; + + ddobj = dmu_object_alloc(mos, DMU_OT_DSL_DIR, 0, + DMU_OT_DSL_DIR, sizeof (dsl_dir_phys_t), tx); + if (pds) { + VERIFY(0 == zap_add(mos, dsl_dir_phys(pds)->dd_child_dir_zapobj, + name, sizeof (uint64_t), 1, &ddobj, tx)); + } else { + /* it's the root dir */ + VERIFY(0 == zap_add(mos, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_ROOT_DATASET, sizeof (uint64_t), 1, &ddobj, tx)); + } + VERIFY(0 == dmu_bonus_hold(mos, ddobj, FTAG, &dbuf)); + dmu_buf_will_dirty(dbuf, tx); + ddphys = dbuf->db_data; + + ddphys->dd_creation_time = gethrestime_sec(); + if (pds) { + ddphys->dd_parent_obj = pds->dd_object; + + /* update the filesystem counts */ + dsl_fs_ss_count_adjust(pds, 1, DD_FIELD_FILESYSTEM_COUNT, tx); + } + ddphys->dd_props_zapobj = zap_create(mos, + DMU_OT_DSL_PROPS, DMU_OT_NONE, 0, tx); + ddphys->dd_child_dir_zapobj = zap_create(mos, + DMU_OT_DSL_DIR_CHILD_MAP, DMU_OT_NONE, 0, tx); + if (spa_version(dp->dp_spa) >= SPA_VERSION_USED_BREAKDOWN) + ddphys->dd_flags |= DD_FLAG_USED_BREAKDOWN; + dmu_buf_rele(dbuf, FTAG); + + return (ddobj); +} + +boolean_t +dsl_dir_is_clone(dsl_dir_t *dd) +{ + return (dsl_dir_phys(dd)->dd_origin_obj && + (dd->dd_pool->dp_origin_snap == NULL || + dsl_dir_phys(dd)->dd_origin_obj != + dd->dd_pool->dp_origin_snap->ds_object)); +} + +void +dsl_dir_stats(dsl_dir_t *dd, nvlist_t *nv) +{ + mutex_enter(&dd->dd_lock); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USED, + dsl_dir_phys(dd)->dd_used_bytes); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_QUOTA, + dsl_dir_phys(dd)->dd_quota); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_RESERVATION, + dsl_dir_phys(dd)->dd_reserved); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_COMPRESSRATIO, + dsl_dir_phys(dd)->dd_compressed_bytes == 0 ? 100 : + (dsl_dir_phys(dd)->dd_uncompressed_bytes * 100 / + dsl_dir_phys(dd)->dd_compressed_bytes)); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_LOGICALUSED, + dsl_dir_phys(dd)->dd_uncompressed_bytes); + if (dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN) { + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USEDSNAP, + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_SNAP]); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USEDDS, + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_HEAD]); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USEDREFRESERV, + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_REFRSRV]); + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_USEDCHILD, + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_CHILD] + + dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_CHILD_RSRV]); + } + mutex_exit(&dd->dd_lock); + + if (dsl_dir_is_zapified(dd)) { + uint64_t count; + objset_t *os = dd->dd_pool->dp_meta_objset; + + if (zap_lookup(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT, + sizeof (count), 1, &count) == 0) { + dsl_prop_nvlist_add_uint64(nv, + ZFS_PROP_FILESYSTEM_COUNT, count); + } + if (zap_lookup(os, dd->dd_object, DD_FIELD_SNAPSHOT_COUNT, + sizeof (count), 1, &count) == 0) { + dsl_prop_nvlist_add_uint64(nv, + ZFS_PROP_SNAPSHOT_COUNT, count); + } + } + + if (dsl_dir_is_clone(dd)) { + dsl_dataset_t *ds; + char buf[ZFS_MAX_DATASET_NAME_LEN]; + + VERIFY0(dsl_dataset_hold_obj(dd->dd_pool, + dsl_dir_phys(dd)->dd_origin_obj, FTAG, &ds)); + dsl_dataset_name(ds, buf); + dsl_dataset_rele(ds, FTAG); + dsl_prop_nvlist_add_string(nv, ZFS_PROP_ORIGIN, buf); + } +} + +void +dsl_dir_dirty(dsl_dir_t *dd, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dd->dd_pool; + + ASSERT(dsl_dir_phys(dd)); + + if (txg_list_add(&dp->dp_dirty_dirs, dd, tx->tx_txg)) { + /* up the hold count until we can be written out */ + dmu_buf_add_ref(dd->dd_dbuf, dd); + } +} + +static int64_t +parent_delta(dsl_dir_t *dd, uint64_t used, int64_t delta) +{ + uint64_t old_accounted = MAX(used, dsl_dir_phys(dd)->dd_reserved); + uint64_t new_accounted = + MAX(used + delta, dsl_dir_phys(dd)->dd_reserved); + return (new_accounted - old_accounted); +} + +void +dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx) +{ + ASSERT(dmu_tx_is_syncing(tx)); + + mutex_enter(&dd->dd_lock); + ASSERT0(dd->dd_tempreserved[tx->tx_txg&TXG_MASK]); + dprintf_dd(dd, "txg=%llu towrite=%lluK\n", tx->tx_txg, + dd->dd_space_towrite[tx->tx_txg&TXG_MASK] / 1024); + dd->dd_space_towrite[tx->tx_txg&TXG_MASK] = 0; + mutex_exit(&dd->dd_lock); + + /* release the hold from dsl_dir_dirty */ + dmu_buf_rele(dd->dd_dbuf, dd); +} + +static uint64_t +dsl_dir_space_towrite(dsl_dir_t *dd) +{ + uint64_t space = 0; + + ASSERT(MUTEX_HELD(&dd->dd_lock)); + + for (int i = 0; i < TXG_SIZE; i++) { + space += dd->dd_space_towrite[i & TXG_MASK]; + ASSERT3U(dd->dd_space_towrite[i & TXG_MASK], >=, 0); + } + return (space); +} + +/* + * How much space would dd have available if ancestor had delta applied + * to it? If ondiskonly is set, we're only interested in what's + * on-disk, not estimated pending changes. + */ +uint64_t +dsl_dir_space_available(dsl_dir_t *dd, + dsl_dir_t *ancestor, int64_t delta, int ondiskonly) +{ + uint64_t parentspace, myspace, quota, used; + + /* + * If there are no restrictions otherwise, assume we have + * unlimited space available. + */ + quota = UINT64_MAX; + parentspace = UINT64_MAX; + + if (dd->dd_parent != NULL) { + parentspace = dsl_dir_space_available(dd->dd_parent, + ancestor, delta, ondiskonly); + } + + mutex_enter(&dd->dd_lock); + if (dsl_dir_phys(dd)->dd_quota != 0) + quota = dsl_dir_phys(dd)->dd_quota; + used = dsl_dir_phys(dd)->dd_used_bytes; + if (!ondiskonly) + used += dsl_dir_space_towrite(dd); + + if (dd->dd_parent == NULL) { + uint64_t poolsize = dsl_pool_adjustedsize(dd->dd_pool, FALSE); + quota = MIN(quota, poolsize); + } + + if (dsl_dir_phys(dd)->dd_reserved > used && parentspace != UINT64_MAX) { + /* + * We have some space reserved, in addition to what our + * parent gave us. + */ + parentspace += dsl_dir_phys(dd)->dd_reserved - used; + } + + if (dd == ancestor) { + ASSERT(delta <= 0); + ASSERT(used >= -delta); + used += delta; + if (parentspace != UINT64_MAX) + parentspace -= delta; + } + + if (used > quota) { + /* over quota */ + myspace = 0; + } else { + /* + * the lesser of the space provided by our parent and + * the space left in our quota + */ + myspace = MIN(parentspace, quota - used); + } + + mutex_exit(&dd->dd_lock); + + return (myspace); +} + +struct tempreserve { + list_node_t tr_node; + dsl_dir_t *tr_ds; + uint64_t tr_size; +}; + +static int +dsl_dir_tempreserve_impl(dsl_dir_t *dd, uint64_t asize, boolean_t netfree, + boolean_t ignorequota, list_t *tr_list, + dmu_tx_t *tx, boolean_t first) +{ + uint64_t txg; + uint64_t quota; + struct tempreserve *tr; + int retval; + uint64_t ref_rsrv; + +top_of_function: + txg = tx->tx_txg; + retval = EDQUOT; + ref_rsrv = 0; + + ASSERT3U(txg, !=, 0); + ASSERT3S(asize, >, 0); + + mutex_enter(&dd->dd_lock); + + /* + * Check against the dsl_dir's quota. We don't add in the delta + * when checking for over-quota because they get one free hit. + */ + uint64_t est_inflight = dsl_dir_space_towrite(dd); + for (int i = 0; i < TXG_SIZE; i++) + est_inflight += dd->dd_tempreserved[i]; + uint64_t used_on_disk = dsl_dir_phys(dd)->dd_used_bytes; + + /* + * On the first iteration, fetch the dataset's used-on-disk and + * refreservation values. Also, if checkrefquota is set, test if + * allocating this space would exceed the dataset's refquota. + */ + if (first && tx->tx_objset) { + int error; + dsl_dataset_t *ds = tx->tx_objset->os_dsl_dataset; + + error = dsl_dataset_check_quota(ds, !netfree, + asize, est_inflight, &used_on_disk, &ref_rsrv); + if (error != 0) { + mutex_exit(&dd->dd_lock); + DMU_TX_STAT_BUMP(dmu_tx_quota); + return (error); + } + } + + /* + * If this transaction will result in a net free of space, + * we want to let it through. + */ + if (ignorequota || netfree || dsl_dir_phys(dd)->dd_quota == 0) + quota = UINT64_MAX; + else + quota = dsl_dir_phys(dd)->dd_quota; + + /* + * Adjust the quota against the actual pool size at the root + * minus any outstanding deferred frees. + * To ensure that it's possible to remove files from a full + * pool without inducing transient overcommits, we throttle + * netfree transactions against a quota that is slightly larger, + * but still within the pool's allocation slop. In cases where + * we're very close to full, this will allow a steady trickle of + * removes to get through. + */ + uint64_t deferred = 0; + if (dd->dd_parent == NULL) { + spa_t *spa = dd->dd_pool->dp_spa; + uint64_t poolsize = dsl_pool_adjustedsize(dd->dd_pool, netfree); + deferred = metaslab_class_get_deferred(spa_normal_class(spa)); + if (poolsize - deferred < quota) { + quota = poolsize - deferred; + retval = ENOSPC; + } + } + + /* + * If they are requesting more space, and our current estimate + * is over quota, they get to try again unless the actual + * on-disk is over quota and there are no pending changes (which + * may free up space for us). + */ + if (used_on_disk + est_inflight >= quota) { + if (est_inflight > 0 || used_on_disk < quota || + (retval == ENOSPC && used_on_disk < quota + deferred)) + retval = ERESTART; + dprintf_dd(dd, "failing: used=%lluK inflight = %lluK " + "quota=%lluK tr=%lluK err=%d\n", + used_on_disk>>10, est_inflight>>10, + quota>>10, asize>>10, retval); + mutex_exit(&dd->dd_lock); + DMU_TX_STAT_BUMP(dmu_tx_quota); + return (SET_ERROR(retval)); + } + + /* We need to up our estimated delta before dropping dd_lock */ + dd->dd_tempreserved[txg & TXG_MASK] += asize; + + uint64_t parent_rsrv = parent_delta(dd, used_on_disk + est_inflight, + asize - ref_rsrv); + mutex_exit(&dd->dd_lock); + + tr = kmem_zalloc(sizeof (struct tempreserve), KM_SLEEP); + tr->tr_ds = dd; + tr->tr_size = asize; + list_insert_tail(tr_list, tr); + + /* see if it's OK with our parent */ + if (dd->dd_parent != NULL && parent_rsrv != 0) { + /* + * Recurse on our parent without recursion. This has been + * observed to be potentially large stack usage even within + * the test suite. Largest seen stack was 7632 bytes on linux. + */ + + dd = dd->dd_parent; + asize = parent_rsrv; + ignorequota = (dsl_dir_phys(dd)->dd_head_dataset_obj == 0); + first = B_FALSE; + goto top_of_function; + + } else { + return (0); + } +} + +/* + * Reserve space in this dsl_dir, to be used in this tx's txg. + * After the space has been dirtied (and dsl_dir_willuse_space() + * has been called), the reservation should be canceled, using + * dsl_dir_tempreserve_clear(). + */ +int +dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t lsize, uint64_t asize, + boolean_t netfree, void **tr_cookiep, dmu_tx_t *tx) +{ + int err; + list_t *tr_list; + + if (asize == 0) { + *tr_cookiep = NULL; + return (0); + } + + tr_list = kmem_alloc(sizeof (list_t), KM_SLEEP); + list_create(tr_list, sizeof (struct tempreserve), + offsetof(struct tempreserve, tr_node)); + ASSERT3S(asize, >, 0); + + err = arc_tempreserve_space(lsize, tx->tx_txg); + if (err == 0) { + struct tempreserve *tr; + + tr = kmem_zalloc(sizeof (struct tempreserve), KM_SLEEP); + tr->tr_size = lsize; + list_insert_tail(tr_list, tr); + } else { + if (err == EAGAIN) { + /* + * If arc_memory_throttle() detected that pageout + * is running and we are low on memory, we delay new + * non-pageout transactions to give pageout an + * advantage. + * + * It is unfortunate to be delaying while the caller's + * locks are held. + */ + txg_delay(dd->dd_pool, tx->tx_txg, + MSEC2NSEC(10), MSEC2NSEC(10)); + err = SET_ERROR(ERESTART); + } + } + + if (err == 0) { + err = dsl_dir_tempreserve_impl(dd, asize, netfree, + B_FALSE, tr_list, tx, B_TRUE); + } + + if (err != 0) + dsl_dir_tempreserve_clear(tr_list, tx); + else + *tr_cookiep = tr_list; + + return (err); +} + +/* + * Clear a temporary reservation that we previously made with + * dsl_dir_tempreserve_space(). + */ +void +dsl_dir_tempreserve_clear(void *tr_cookie, dmu_tx_t *tx) +{ + int txgidx = tx->tx_txg & TXG_MASK; + list_t *tr_list = tr_cookie; + struct tempreserve *tr; + + ASSERT3U(tx->tx_txg, !=, 0); + + if (tr_cookie == NULL) + return; + + while ((tr = list_head(tr_list)) != NULL) { + if (tr->tr_ds) { + mutex_enter(&tr->tr_ds->dd_lock); + ASSERT3U(tr->tr_ds->dd_tempreserved[txgidx], >=, + tr->tr_size); + tr->tr_ds->dd_tempreserved[txgidx] -= tr->tr_size; + mutex_exit(&tr->tr_ds->dd_lock); + } else { + arc_tempreserve_clear(tr->tr_size); + } + list_remove(tr_list, tr); + kmem_free(tr, sizeof (struct tempreserve)); + } + + kmem_free(tr_list, sizeof (list_t)); +} + +/* + * This should be called from open context when we think we're going to write + * or free space, for example when dirtying data. Be conservative; it's okay + * to write less space or free more, but we don't want to write more or free + * less than the amount specified. + * + * NOTE: The behavior of this function is identical to the Illumos / FreeBSD + * version however it has been adjusted to use an iterative rather then + * recursive algorithm to minimize stack usage. + */ +void +dsl_dir_willuse_space(dsl_dir_t *dd, int64_t space, dmu_tx_t *tx) +{ + int64_t parent_space; + uint64_t est_used; + + do { + mutex_enter(&dd->dd_lock); + if (space > 0) + dd->dd_space_towrite[tx->tx_txg & TXG_MASK] += space; + + est_used = dsl_dir_space_towrite(dd) + + dsl_dir_phys(dd)->dd_used_bytes; + parent_space = parent_delta(dd, est_used, space); + mutex_exit(&dd->dd_lock); + + /* Make sure that we clean up dd_space_to* */ + dsl_dir_dirty(dd, tx); + + dd = dd->dd_parent; + space = parent_space; + } while (space && dd); +} + +/* call from syncing context when we actually write/free space for this dd */ +void +dsl_dir_diduse_space(dsl_dir_t *dd, dd_used_t type, + int64_t used, int64_t compressed, int64_t uncompressed, dmu_tx_t *tx) +{ + int64_t accounted_delta; + + /* + * dsl_dataset_set_refreservation_sync_impl() calls this with + * dd_lock held, so that it can atomically update + * ds->ds_reserved and the dsl_dir accounting, so that + * dsl_dataset_check_quota() can see dataset and dir accounting + * consistently. + */ + boolean_t needlock = !MUTEX_HELD(&dd->dd_lock); + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(type < DD_USED_NUM); + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + + if (needlock) + mutex_enter(&dd->dd_lock); + accounted_delta = + parent_delta(dd, dsl_dir_phys(dd)->dd_used_bytes, used); + ASSERT(used >= 0 || dsl_dir_phys(dd)->dd_used_bytes >= -used); + ASSERT(compressed >= 0 || + dsl_dir_phys(dd)->dd_compressed_bytes >= -compressed); + ASSERT(uncompressed >= 0 || + dsl_dir_phys(dd)->dd_uncompressed_bytes >= -uncompressed); + dsl_dir_phys(dd)->dd_used_bytes += used; + dsl_dir_phys(dd)->dd_uncompressed_bytes += uncompressed; + dsl_dir_phys(dd)->dd_compressed_bytes += compressed; + + if (dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN) { + ASSERT(used > 0 || + dsl_dir_phys(dd)->dd_used_breakdown[type] >= -used); + dsl_dir_phys(dd)->dd_used_breakdown[type] += used; +#ifdef DEBUG + { + dd_used_t t; + uint64_t u = 0; + for (t = 0; t < DD_USED_NUM; t++) + u += dsl_dir_phys(dd)->dd_used_breakdown[t]; + ASSERT3U(u, ==, dsl_dir_phys(dd)->dd_used_bytes); + } +#endif + } + if (needlock) + mutex_exit(&dd->dd_lock); + + if (dd->dd_parent != NULL) { + dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD, + accounted_delta, compressed, uncompressed, tx); + dsl_dir_transfer_space(dd->dd_parent, + used - accounted_delta, + DD_USED_CHILD_RSRV, DD_USED_CHILD, tx); + } +} + +void +dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta, + dd_used_t oldtype, dd_used_t newtype, dmu_tx_t *tx) +{ + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(oldtype < DD_USED_NUM); + ASSERT(newtype < DD_USED_NUM); + + if (delta == 0 || + !(dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN)) + return; + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + mutex_enter(&dd->dd_lock); + ASSERT(delta > 0 ? + dsl_dir_phys(dd)->dd_used_breakdown[oldtype] >= delta : + dsl_dir_phys(dd)->dd_used_breakdown[newtype] >= -delta); + ASSERT(dsl_dir_phys(dd)->dd_used_bytes >= ABS(delta)); + dsl_dir_phys(dd)->dd_used_breakdown[oldtype] -= delta; + dsl_dir_phys(dd)->dd_used_breakdown[newtype] += delta; + mutex_exit(&dd->dd_lock); +} + +typedef struct dsl_dir_set_qr_arg { + const char *ddsqra_name; + zprop_source_t ddsqra_source; + uint64_t ddsqra_value; +} dsl_dir_set_qr_arg_t; + +static int +dsl_dir_set_quota_check(void *arg, dmu_tx_t *tx) +{ + dsl_dir_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + int error; + uint64_t towrite, newval; + + error = dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds); + if (error != 0) + return (error); + + error = dsl_prop_predict(ds->ds_dir, "quota", + ddsqra->ddsqra_source, ddsqra->ddsqra_value, &newval); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + if (newval == 0) { + dsl_dataset_rele(ds, FTAG); + return (0); + } + + mutex_enter(&ds->ds_dir->dd_lock); + /* + * If we are doing the preliminary check in open context, and + * there are pending changes, then don't fail it, since the + * pending changes could under-estimate the amount of space to be + * freed up. + */ + towrite = dsl_dir_space_towrite(ds->ds_dir); + if ((dmu_tx_is_syncing(tx) || towrite == 0) && + (newval < dsl_dir_phys(ds->ds_dir)->dd_reserved || + newval < dsl_dir_phys(ds->ds_dir)->dd_used_bytes + towrite)) { + error = SET_ERROR(ENOSPC); + } + mutex_exit(&ds->ds_dir->dd_lock); + dsl_dataset_rele(ds, FTAG); + return (error); +} + +static void +dsl_dir_set_quota_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dir_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + uint64_t newval; + + VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds)); + + if (spa_version(dp->dp_spa) >= SPA_VERSION_RECVD_PROPS) { + dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_QUOTA), + ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1, + &ddsqra->ddsqra_value, tx); + + VERIFY0(dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_QUOTA), &newval)); + } else { + newval = ddsqra->ddsqra_value; + spa_history_log_internal_ds(ds, "set", tx, "%s=%lld", + zfs_prop_to_name(ZFS_PROP_QUOTA), (longlong_t)newval); + } + + dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx); + mutex_enter(&ds->ds_dir->dd_lock); + dsl_dir_phys(ds->ds_dir)->dd_quota = newval; + mutex_exit(&ds->ds_dir->dd_lock); + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_dir_set_quota(const char *ddname, zprop_source_t source, uint64_t quota) +{ + dsl_dir_set_qr_arg_t ddsqra; + + ddsqra.ddsqra_name = ddname; + ddsqra.ddsqra_source = source; + ddsqra.ddsqra_value = quota; + + return (dsl_sync_task(ddname, dsl_dir_set_quota_check, + dsl_dir_set_quota_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); +} + +int +dsl_dir_set_reservation_check(void *arg, dmu_tx_t *tx) +{ + dsl_dir_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + dsl_dir_t *dd; + uint64_t newval, used, avail; + int error; + + error = dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds); + if (error != 0) + return (error); + dd = ds->ds_dir; + + /* + * If we are doing the preliminary check in open context, the + * space estimates may be inaccurate. + */ + if (!dmu_tx_is_syncing(tx)) { + dsl_dataset_rele(ds, FTAG); + return (0); + } + + error = dsl_prop_predict(ds->ds_dir, + zfs_prop_to_name(ZFS_PROP_RESERVATION), + ddsqra->ddsqra_source, ddsqra->ddsqra_value, &newval); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + return (error); + } + + mutex_enter(&dd->dd_lock); + used = dsl_dir_phys(dd)->dd_used_bytes; + mutex_exit(&dd->dd_lock); + + if (dd->dd_parent) { + avail = dsl_dir_space_available(dd->dd_parent, + NULL, 0, FALSE); + } else { + avail = dsl_pool_adjustedsize(dd->dd_pool, B_FALSE) - used; + } + + if (MAX(used, newval) > MAX(used, dsl_dir_phys(dd)->dd_reserved)) { + uint64_t delta = MAX(used, newval) - + MAX(used, dsl_dir_phys(dd)->dd_reserved); + + if (delta > avail || + (dsl_dir_phys(dd)->dd_quota > 0 && + newval > dsl_dir_phys(dd)->dd_quota)) + error = SET_ERROR(ENOSPC); + } + + dsl_dataset_rele(ds, FTAG); + return (error); +} + +void +dsl_dir_set_reservation_sync_impl(dsl_dir_t *dd, uint64_t value, dmu_tx_t *tx) +{ + uint64_t used; + int64_t delta; + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + + mutex_enter(&dd->dd_lock); + used = dsl_dir_phys(dd)->dd_used_bytes; + delta = MAX(used, value) - MAX(used, dsl_dir_phys(dd)->dd_reserved); + dsl_dir_phys(dd)->dd_reserved = value; + + if (dd->dd_parent != NULL) { + /* Roll up this additional usage into our ancestors */ + dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD_RSRV, + delta, 0, 0, tx); + } + mutex_exit(&dd->dd_lock); +} + +static void +dsl_dir_set_reservation_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dir_set_qr_arg_t *ddsqra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + uint64_t newval; + + VERIFY0(dsl_dataset_hold(dp, ddsqra->ddsqra_name, FTAG, &ds)); + + if (spa_version(dp->dp_spa) >= SPA_VERSION_RECVD_PROPS) { + dsl_prop_set_sync_impl(ds, + zfs_prop_to_name(ZFS_PROP_RESERVATION), + ddsqra->ddsqra_source, sizeof (ddsqra->ddsqra_value), 1, + &ddsqra->ddsqra_value, tx); + + VERIFY0(dsl_prop_get_int_ds(ds, + zfs_prop_to_name(ZFS_PROP_RESERVATION), &newval)); + } else { + newval = ddsqra->ddsqra_value; + spa_history_log_internal_ds(ds, "set", tx, "%s=%lld", + zfs_prop_to_name(ZFS_PROP_RESERVATION), + (longlong_t)newval); + } + + dsl_dir_set_reservation_sync_impl(ds->ds_dir, newval, tx); + dsl_dataset_rele(ds, FTAG); +} + +int +dsl_dir_set_reservation(const char *ddname, zprop_source_t source, + uint64_t reservation) +{ + dsl_dir_set_qr_arg_t ddsqra; + + ddsqra.ddsqra_name = ddname; + ddsqra.ddsqra_source = source; + ddsqra.ddsqra_value = reservation; + + return (dsl_sync_task(ddname, dsl_dir_set_reservation_check, + dsl_dir_set_reservation_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); +} + +static dsl_dir_t * +closest_common_ancestor(dsl_dir_t *ds1, dsl_dir_t *ds2) +{ + for (; ds1; ds1 = ds1->dd_parent) { + dsl_dir_t *dd; + for (dd = ds2; dd; dd = dd->dd_parent) { + if (ds1 == dd) + return (dd); + } + } + return (NULL); +} + +/* + * If delta is applied to dd, how much of that delta would be applied to + * ancestor? Syncing context only. + */ +static int64_t +would_change(dsl_dir_t *dd, int64_t delta, dsl_dir_t *ancestor) +{ + if (dd == ancestor) + return (delta); + + mutex_enter(&dd->dd_lock); + delta = parent_delta(dd, dsl_dir_phys(dd)->dd_used_bytes, delta); + mutex_exit(&dd->dd_lock); + return (would_change(dd->dd_parent, delta, ancestor)); +} + +typedef struct dsl_dir_rename_arg { + const char *ddra_oldname; + const char *ddra_newname; + cred_t *ddra_cred; +} dsl_dir_rename_arg_t; + +/* ARGSUSED */ +static int +dsl_valid_rename(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + int *deltap = arg; + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + + dsl_dataset_name(ds, namebuf); + + if (strlen(namebuf) + *deltap >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + return (0); +} + +static int +dsl_dir_rename_check(void *arg, dmu_tx_t *tx) +{ + dsl_dir_rename_arg_t *ddra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd, *newparent; + const char *mynewname; + int error; + int delta = strlen(ddra->ddra_newname) - strlen(ddra->ddra_oldname); + + /* target dir should exist */ + error = dsl_dir_hold(dp, ddra->ddra_oldname, FTAG, &dd, NULL); + if (error != 0) + return (error); + + /* new parent should exist */ + error = dsl_dir_hold(dp, ddra->ddra_newname, FTAG, + &newparent, &mynewname); + if (error != 0) { + dsl_dir_rele(dd, FTAG); + return (error); + } + + /* can't rename to different pool */ + if (dd->dd_pool != newparent->dd_pool) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (SET_ERROR(EXDEV)); + } + + /* new name should not already exist */ + if (mynewname == NULL) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (SET_ERROR(EEXIST)); + } + + /* if the name length is growing, validate child name lengths */ + if (delta > 0) { + error = dmu_objset_find_dp(dp, dd->dd_object, dsl_valid_rename, + &delta, DS_FIND_CHILDREN | DS_FIND_SNAPSHOTS); + if (error != 0) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (error); + } + } + + if (dmu_tx_is_syncing(tx)) { + if (spa_feature_is_active(dp->dp_spa, + SPA_FEATURE_FS_SS_LIMIT)) { + /* + * Although this is the check function and we don't + * normally make on-disk changes in check functions, + * we need to do that here. + * + * Ensure this portion of the tree's counts have been + * initialized in case the new parent has limits set. + */ + dsl_dir_init_fs_ss_count(dd, tx); + } + } + + if (newparent != dd->dd_parent) { + /* is there enough space? */ + uint64_t myspace = + MAX(dsl_dir_phys(dd)->dd_used_bytes, + dsl_dir_phys(dd)->dd_reserved); + objset_t *os = dd->dd_pool->dp_meta_objset; + uint64_t fs_cnt = 0; + uint64_t ss_cnt = 0; + + if (dsl_dir_is_zapified(dd)) { + int err; + + err = zap_lookup(os, dd->dd_object, + DD_FIELD_FILESYSTEM_COUNT, sizeof (fs_cnt), 1, + &fs_cnt); + if (err != ENOENT && err != 0) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (err); + } + + /* + * have to add 1 for the filesystem itself that we're + * moving + */ + fs_cnt++; + + err = zap_lookup(os, dd->dd_object, + DD_FIELD_SNAPSHOT_COUNT, sizeof (ss_cnt), 1, + &ss_cnt); + if (err != ENOENT && err != 0) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (err); + } + } + + /* no rename into our descendant */ + if (closest_common_ancestor(dd, newparent) == dd) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = dsl_dir_transfer_possible(dd->dd_parent, + newparent, fs_cnt, ss_cnt, myspace, ddra->ddra_cred); + if (error != 0) { + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (error); + } + } + + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); + return (0); +} + +static void +dsl_dir_rename_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dir_rename_arg_t *ddra = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd, *newparent; + const char *mynewname; + int error; + objset_t *mos = dp->dp_meta_objset; + + VERIFY0(dsl_dir_hold(dp, ddra->ddra_oldname, FTAG, &dd, NULL)); + VERIFY0(dsl_dir_hold(dp, ddra->ddra_newname, FTAG, &newparent, + &mynewname)); + + /* Log this before we change the name. */ + spa_history_log_internal_dd(dd, "rename", tx, + "-> %s", ddra->ddra_newname); + + if (newparent != dd->dd_parent) { + objset_t *os = dd->dd_pool->dp_meta_objset; + uint64_t fs_cnt = 0; + uint64_t ss_cnt = 0; + + /* + * We already made sure the dd counts were initialized in the + * check function. + */ + if (spa_feature_is_active(dp->dp_spa, + SPA_FEATURE_FS_SS_LIMIT)) { + VERIFY0(zap_lookup(os, dd->dd_object, + DD_FIELD_FILESYSTEM_COUNT, sizeof (fs_cnt), 1, + &fs_cnt)); + /* add 1 for the filesystem itself that we're moving */ + fs_cnt++; + + VERIFY0(zap_lookup(os, dd->dd_object, + DD_FIELD_SNAPSHOT_COUNT, sizeof (ss_cnt), 1, + &ss_cnt)); + } + + dsl_fs_ss_count_adjust(dd->dd_parent, -fs_cnt, + DD_FIELD_FILESYSTEM_COUNT, tx); + dsl_fs_ss_count_adjust(newparent, fs_cnt, + DD_FIELD_FILESYSTEM_COUNT, tx); + + dsl_fs_ss_count_adjust(dd->dd_parent, -ss_cnt, + DD_FIELD_SNAPSHOT_COUNT, tx); + dsl_fs_ss_count_adjust(newparent, ss_cnt, + DD_FIELD_SNAPSHOT_COUNT, tx); + + dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD, + -dsl_dir_phys(dd)->dd_used_bytes, + -dsl_dir_phys(dd)->dd_compressed_bytes, + -dsl_dir_phys(dd)->dd_uncompressed_bytes, tx); + dsl_dir_diduse_space(newparent, DD_USED_CHILD, + dsl_dir_phys(dd)->dd_used_bytes, + dsl_dir_phys(dd)->dd_compressed_bytes, + dsl_dir_phys(dd)->dd_uncompressed_bytes, tx); + + if (dsl_dir_phys(dd)->dd_reserved > + dsl_dir_phys(dd)->dd_used_bytes) { + uint64_t unused_rsrv = dsl_dir_phys(dd)->dd_reserved - + dsl_dir_phys(dd)->dd_used_bytes; + + dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD_RSRV, + -unused_rsrv, 0, 0, tx); + dsl_dir_diduse_space(newparent, DD_USED_CHILD_RSRV, + unused_rsrv, 0, 0, tx); + } + } + + dmu_buf_will_dirty(dd->dd_dbuf, tx); + + /* remove from old parent zapobj */ + error = zap_remove(mos, + dsl_dir_phys(dd->dd_parent)->dd_child_dir_zapobj, + dd->dd_myname, tx); + ASSERT0(error); + + (void) strlcpy(dd->dd_myname, mynewname, + sizeof (dd->dd_myname)); + dsl_dir_rele(dd->dd_parent, dd); + dsl_dir_phys(dd)->dd_parent_obj = newparent->dd_object; + VERIFY0(dsl_dir_hold_obj(dp, + newparent->dd_object, NULL, dd, &dd->dd_parent)); + + /* add to new parent zapobj */ + VERIFY0(zap_add(mos, dsl_dir_phys(newparent)->dd_child_dir_zapobj, + dd->dd_myname, 8, 1, &dd->dd_object, tx)); + + zvol_rename_minors(dp->dp_spa, ddra->ddra_oldname, + ddra->ddra_newname, B_TRUE); + + dsl_prop_notify_all(dd); + + dsl_dir_rele(newparent, FTAG); + dsl_dir_rele(dd, FTAG); +} + +int +dsl_dir_rename(const char *oldname, const char *newname) +{ + dsl_dir_rename_arg_t ddra; + + ddra.ddra_oldname = oldname; + ddra.ddra_newname = newname; + ddra.ddra_cred = CRED(); + + return (dsl_sync_task(oldname, + dsl_dir_rename_check, dsl_dir_rename_sync, &ddra, + 3, ZFS_SPACE_CHECK_RESERVED)); +} + +int +dsl_dir_transfer_possible(dsl_dir_t *sdd, dsl_dir_t *tdd, + uint64_t fs_cnt, uint64_t ss_cnt, uint64_t space, cred_t *cr) +{ + dsl_dir_t *ancestor; + int64_t adelta; + uint64_t avail; + int err; + + ancestor = closest_common_ancestor(sdd, tdd); + adelta = would_change(sdd, -space, ancestor); + avail = dsl_dir_space_available(tdd, ancestor, adelta, FALSE); + if (avail < space) + return (SET_ERROR(ENOSPC)); + + err = dsl_fs_ss_limit_check(tdd, fs_cnt, ZFS_PROP_FILESYSTEM_LIMIT, + ancestor, cr); + if (err != 0) + return (err); + err = dsl_fs_ss_limit_check(tdd, ss_cnt, ZFS_PROP_SNAPSHOT_LIMIT, + ancestor, cr); + if (err != 0) + return (err); + + return (0); +} + +timestruc_t +dsl_dir_snap_cmtime(dsl_dir_t *dd) +{ + timestruc_t t; + + mutex_enter(&dd->dd_lock); + t = dd->dd_snap_cmtime; + mutex_exit(&dd->dd_lock); + + return (t); +} + +void +dsl_dir_snap_cmtime_update(dsl_dir_t *dd) +{ + timestruc_t t; + + gethrestime(&t); + mutex_enter(&dd->dd_lock); + dd->dd_snap_cmtime = t; + mutex_exit(&dd->dd_lock); +} + +void +dsl_dir_zapify(dsl_dir_t *dd, dmu_tx_t *tx) +{ + objset_t *mos = dd->dd_pool->dp_meta_objset; + dmu_object_zapify(mos, dd->dd_object, DMU_OT_DSL_DIR, tx); +} + +boolean_t +dsl_dir_is_zapified(dsl_dir_t *dd) +{ + dmu_object_info_t doi; + + dmu_object_info_from_db(dd->dd_dbuf, &doi); + return (doi.doi_type == DMU_OTN_ZAP_METADATA); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_dir_set_quota); +EXPORT_SYMBOL(dsl_dir_set_reservation); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_pool.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_pool.c @@ -0,0 +1,1146 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ZFS Write Throttle + * ------------------ + * + * ZFS must limit the rate of incoming writes to the rate at which it is able + * to sync data modifications to the backend storage. Throttling by too much + * creates an artificial limit; throttling by too little can only be sustained + * for short periods and would lead to highly lumpy performance. On a per-pool + * basis, ZFS tracks the amount of modified (dirty) data. As operations change + * data, the amount of dirty data increases; as ZFS syncs out data, the amount + * of dirty data decreases. When the amount of dirty data exceeds a + * predetermined threshold further modifications are blocked until the amount + * of dirty data decreases (as data is synced out). + * + * The limit on dirty data is tunable, and should be adjusted according to + * both the IO capacity and available memory of the system. The larger the + * window, the more ZFS is able to aggregate and amortize metadata (and data) + * changes. However, memory is a limited resource, and allowing for more dirty + * data comes at the cost of keeping other useful data in memory (for example + * ZFS data cached by the ARC). + * + * Implementation + * + * As buffers are modified dsl_pool_willuse_space() increments both the per- + * txg (dp_dirty_pertxg[]) and poolwide (dp_dirty_total) accounting of + * dirty space used; dsl_pool_dirty_space() decrements those values as data + * is synced out from dsl_pool_sync(). While only the poolwide value is + * relevant, the per-txg value is useful for debugging. The tunable + * zfs_dirty_data_max determines the dirty space limit. Once that value is + * exceeded, new writes are halted until space frees up. + * + * The zfs_dirty_data_sync tunable dictates the threshold at which we + * ensure that there is a txg syncing (see the comment in txg.c for a full + * description of transaction group stages). + * + * The IO scheduler uses both the dirty space limit and current amount of + * dirty data as inputs. Those values affect the number of concurrent IOs ZFS + * issues. See the comment in vdev_queue.c for details of the IO scheduler. + * + * The delay is also calculated based on the amount of dirty data. See the + * comment above dmu_tx_delay() for details. + */ + +/* + * zfs_dirty_data_max will be set to zfs_dirty_data_max_percent% of all memory, + * capped at zfs_dirty_data_max_max. It can also be overridden with a module + * parameter. + */ +unsigned long zfs_dirty_data_max = 0; +unsigned long zfs_dirty_data_max_max = 0; +int zfs_dirty_data_max_percent = 10; +int zfs_dirty_data_max_max_percent = 25; + +/* + * If there is at least this much dirty data, push out a txg. + */ +unsigned long zfs_dirty_data_sync = 64 * 1024 * 1024; + +/* + * Once there is this amount of dirty data, the dmu_tx_delay() will kick in + * and delay each transaction. + * This value should be >= zfs_vdev_async_write_active_max_dirty_percent. + */ +int zfs_delay_min_dirty_percent = 60; + +/* + * This controls how quickly the delay approaches infinity. + * Larger values cause it to delay more for a given amount of dirty data. + * Therefore larger values will cause there to be less dirty data for a + * given throughput. + * + * For the smoothest delay, this value should be about 1 billion divided + * by the maximum number of operations per second. This will smoothly + * handle between 10x and 1/10th this number. + * + * Note: zfs_delay_scale * zfs_dirty_data_max must be < 2^64, due to the + * multiply in dmu_tx_delay(). + */ +unsigned long zfs_delay_scale = 1000 * 1000 * 1000 / 2000; + +/* + * This determines the number of threads used by the dp_sync_taskq. + */ +int zfs_sync_taskq_batch_pct = 75; + +int +dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **ddp) +{ + uint64_t obj; + int err; + + err = zap_lookup(dp->dp_meta_objset, + dsl_dir_phys(dp->dp_root_dir)->dd_child_dir_zapobj, + name, sizeof (obj), 1, &obj); + if (err) + return (err); + + return (dsl_dir_hold_obj(dp, obj, name, dp, ddp)); +} + +static dsl_pool_t * +dsl_pool_open_impl(spa_t *spa, uint64_t txg) +{ + dsl_pool_t *dp; + blkptr_t *bp = spa_get_rootblkptr(spa); + + dp = kmem_zalloc(sizeof (dsl_pool_t), KM_SLEEP); + dp->dp_spa = spa; + dp->dp_meta_rootbp = *bp; + rrw_init(&dp->dp_config_rwlock, B_TRUE); + txg_init(dp, txg); + mmp_init(spa); + + txg_list_create(&dp->dp_dirty_datasets, spa, + offsetof(dsl_dataset_t, ds_dirty_link)); + txg_list_create(&dp->dp_dirty_zilogs, spa, + offsetof(zilog_t, zl_dirty_link)); + txg_list_create(&dp->dp_dirty_dirs, spa, + offsetof(dsl_dir_t, dd_dirty_link)); + txg_list_create(&dp->dp_sync_tasks, spa, + offsetof(dsl_sync_task_t, dst_node)); + + dp->dp_sync_taskq = taskq_create("dp_sync_taskq", + zfs_sync_taskq_batch_pct, minclsyspri, 1, INT_MAX, + TASKQ_THREADS_CPU_PCT); + + mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&dp->dp_spaceavail_cv, NULL, CV_DEFAULT, NULL); + + dp->dp_iput_taskq = taskq_create("z_iput", max_ncpus, defclsyspri, + max_ncpus * 8, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + + return (dp); +} + +int +dsl_pool_init(spa_t *spa, uint64_t txg, dsl_pool_t **dpp) +{ + int err; + dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); + + /* + * Initialize the caller's dsl_pool_t structure before we actually open + * the meta objset. This is done because a self-healing write zio may + * be issued as part of dmu_objset_open_impl() and the spa needs its + * dsl_pool_t initialized in order to handle the write. + */ + *dpp = dp; + + err = dmu_objset_open_impl(spa, NULL, &dp->dp_meta_rootbp, + &dp->dp_meta_objset); + if (err != 0) { + dsl_pool_close(dp); + *dpp = NULL; + } + + return (err); +} + +int +dsl_pool_open(dsl_pool_t *dp) +{ + int err; + dsl_dir_t *dd; + dsl_dataset_t *ds; + uint64_t obj; + + rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_ROOT_DATASET, sizeof (uint64_t), 1, + &dp->dp_root_dir_obj); + if (err) + goto out; + + err = dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, + NULL, dp, &dp->dp_root_dir); + if (err) + goto out; + + err = dsl_pool_open_special_dir(dp, MOS_DIR_NAME, &dp->dp_mos_dir); + if (err) + goto out; + + if (spa_version(dp->dp_spa) >= SPA_VERSION_ORIGIN) { + err = dsl_pool_open_special_dir(dp, ORIGIN_DIR_NAME, &dd); + if (err) + goto out; + err = dsl_dataset_hold_obj(dp, + dsl_dir_phys(dd)->dd_head_dataset_obj, FTAG, &ds); + if (err == 0) { + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, dp, + &dp->dp_origin_snap); + dsl_dataset_rele(ds, FTAG); + } + dsl_dir_rele(dd, dp); + if (err) + goto out; + } + + if (spa_version(dp->dp_spa) >= SPA_VERSION_DEADLISTS) { + err = dsl_pool_open_special_dir(dp, FREE_DIR_NAME, + &dp->dp_free_dir); + if (err) + goto out; + + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj); + if (err) + goto out; + VERIFY0(bpobj_open(&dp->dp_free_bpobj, + dp->dp_meta_objset, obj)); + } + + /* + * Note: errors ignored, because the leak dir will not exist if we + * have not encountered a leak yet. + */ + (void) dsl_pool_open_special_dir(dp, LEAK_DIR_NAME, + &dp->dp_leak_dir); + + if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY)) { + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_BPTREE_OBJ, sizeof (uint64_t), 1, + &dp->dp_bptree_obj); + if (err != 0) + goto out; + } + + if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_EMPTY_BPOBJ)) { + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_EMPTY_BPOBJ, sizeof (uint64_t), 1, + &dp->dp_empty_bpobj); + if (err != 0) + goto out; + } + + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_TMP_USERREFS, sizeof (uint64_t), 1, + &dp->dp_tmp_userrefs_obj); + if (err == ENOENT) + err = 0; + if (err) + goto out; + + err = dsl_scan_init(dp, dp->dp_tx.tx_open_txg); + +out: + rrw_exit(&dp->dp_config_rwlock, FTAG); + return (err); +} + +void +dsl_pool_close(dsl_pool_t *dp) +{ + /* + * Drop our references from dsl_pool_open(). + * + * Since we held the origin_snap from "syncing" context (which + * includes pool-opening context), it actually only got a "ref" + * and not a hold, so just drop that here. + */ + if (dp->dp_origin_snap) + dsl_dataset_rele(dp->dp_origin_snap, dp); + if (dp->dp_mos_dir) + dsl_dir_rele(dp->dp_mos_dir, dp); + if (dp->dp_free_dir) + dsl_dir_rele(dp->dp_free_dir, dp); + if (dp->dp_leak_dir) + dsl_dir_rele(dp->dp_leak_dir, dp); + if (dp->dp_root_dir) + dsl_dir_rele(dp->dp_root_dir, dp); + + bpobj_close(&dp->dp_free_bpobj); + + /* undo the dmu_objset_open_impl(mos) from dsl_pool_open() */ + if (dp->dp_meta_objset) + dmu_objset_evict(dp->dp_meta_objset); + + txg_list_destroy(&dp->dp_dirty_datasets); + txg_list_destroy(&dp->dp_dirty_zilogs); + txg_list_destroy(&dp->dp_sync_tasks); + txg_list_destroy(&dp->dp_dirty_dirs); + + taskq_destroy(dp->dp_sync_taskq); + + /* + * We can't set retry to TRUE since we're explicitly specifying + * a spa to flush. This is good enough; any missed buffers for + * this spa won't cause trouble, and they'll eventually fall + * out of the ARC just like any other unused buffer. + */ + arc_flush(dp->dp_spa, FALSE); + + mmp_fini(dp->dp_spa); + txg_fini(dp); + dsl_scan_fini(dp); + dmu_buf_user_evict_wait(); + + rrw_destroy(&dp->dp_config_rwlock); + mutex_destroy(&dp->dp_lock); + cv_destroy(&dp->dp_spaceavail_cv); + taskq_destroy(dp->dp_iput_taskq); + if (dp->dp_blkstats) + vmem_free(dp->dp_blkstats, sizeof (zfs_all_blkstats_t)); + kmem_free(dp, sizeof (dsl_pool_t)); +} + +dsl_pool_t * +dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg) +{ + int err; + dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); + dmu_tx_t *tx = dmu_tx_create_assigned(dp, txg); + objset_t *os; + dsl_dataset_t *ds; + uint64_t obj; + + rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); + + /* create and open the MOS (meta-objset) */ + dp->dp_meta_objset = dmu_objset_create_impl(spa, + NULL, &dp->dp_meta_rootbp, DMU_OST_META, tx); + + /* create the pool directory */ + err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_OT_OBJECT_DIRECTORY, DMU_OT_NONE, 0, tx); + ASSERT0(err); + + /* Initialize scan structures */ + VERIFY0(dsl_scan_init(dp, txg)); + + /* create and open the root dir */ + dp->dp_root_dir_obj = dsl_dir_create_sync(dp, NULL, NULL, tx); + VERIFY0(dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, + NULL, dp, &dp->dp_root_dir)); + + /* create and open the meta-objset dir */ + (void) dsl_dir_create_sync(dp, dp->dp_root_dir, MOS_DIR_NAME, tx); + VERIFY0(dsl_pool_open_special_dir(dp, + MOS_DIR_NAME, &dp->dp_mos_dir)); + + if (spa_version(spa) >= SPA_VERSION_DEADLISTS) { + /* create and open the free dir */ + (void) dsl_dir_create_sync(dp, dp->dp_root_dir, + FREE_DIR_NAME, tx); + VERIFY0(dsl_pool_open_special_dir(dp, + FREE_DIR_NAME, &dp->dp_free_dir)); + + /* create and open the free_bplist */ + obj = bpobj_alloc(dp->dp_meta_objset, SPA_OLD_MAXBLOCKSIZE, tx); + VERIFY(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj, tx) == 0); + VERIFY0(bpobj_open(&dp->dp_free_bpobj, + dp->dp_meta_objset, obj)); + } + + if (spa_version(spa) >= SPA_VERSION_DSL_SCRUB) + dsl_pool_create_origin(dp, tx); + + /* create the root dataset */ + obj = dsl_dataset_create_sync_dd(dp->dp_root_dir, NULL, 0, tx); + + /* create the root objset */ + VERIFY0(dsl_dataset_hold_obj(dp, obj, FTAG, &ds)); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + VERIFY(NULL != (os = dmu_objset_create_impl(dp->dp_spa, ds, + dsl_dataset_get_blkptr(ds), DMU_OST_ZFS, tx))); + rrw_exit(&ds->ds_bp_rwlock, FTAG); +#ifdef _KERNEL + zfs_create_fs(os, kcred, zplprops, tx); +#endif + dsl_dataset_rele(ds, FTAG); + + dmu_tx_commit(tx); + + rrw_exit(&dp->dp_config_rwlock, FTAG); + + return (dp); +} + +/* + * Account for the meta-objset space in its placeholder dsl_dir. + */ +void +dsl_pool_mos_diduse_space(dsl_pool_t *dp, + int64_t used, int64_t comp, int64_t uncomp) +{ + ASSERT3U(comp, ==, uncomp); /* it's all metadata */ + mutex_enter(&dp->dp_lock); + dp->dp_mos_used_delta += used; + dp->dp_mos_compressed_delta += comp; + dp->dp_mos_uncompressed_delta += uncomp; + mutex_exit(&dp->dp_lock); +} + +static void +dsl_pool_sync_mos(dsl_pool_t *dp, dmu_tx_t *tx) +{ + zio_t *zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); + dmu_objset_sync(dp->dp_meta_objset, zio, tx); + VERIFY0(zio_wait(zio)); + dprintf_bp(&dp->dp_meta_rootbp, "meta objset rootbp is %s", ""); + spa_set_rootblkptr(dp->dp_spa, &dp->dp_meta_rootbp); +} + +static void +dsl_pool_dirty_delta(dsl_pool_t *dp, int64_t delta) +{ + ASSERT(MUTEX_HELD(&dp->dp_lock)); + + if (delta < 0) + ASSERT3U(-delta, <=, dp->dp_dirty_total); + + dp->dp_dirty_total += delta; + + /* + * Note: we signal even when increasing dp_dirty_total. + * This ensures forward progress -- each thread wakes the next waiter. + */ + if (dp->dp_dirty_total < zfs_dirty_data_max) + cv_signal(&dp->dp_spaceavail_cv); +} + +void +dsl_pool_sync(dsl_pool_t *dp, uint64_t txg) +{ + zio_t *zio; + dmu_tx_t *tx; + dsl_dir_t *dd; + dsl_dataset_t *ds; + objset_t *mos = dp->dp_meta_objset; + list_t synced_datasets; + + list_create(&synced_datasets, sizeof (dsl_dataset_t), + offsetof(dsl_dataset_t, ds_synced_link)); + + tx = dmu_tx_create_assigned(dp, txg); + + /* + * Write out all dirty blocks of dirty datasets. + */ + zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); + while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { + /* + * We must not sync any non-MOS datasets twice, because + * we may have taken a snapshot of them. However, we + * may sync newly-created datasets on pass 2. + */ + ASSERT(!list_link_active(&ds->ds_synced_link)); + list_insert_tail(&synced_datasets, ds); + dsl_dataset_sync(ds, zio, tx); + } + VERIFY0(zio_wait(zio)); + + /* + * We have written all of the accounted dirty data, so our + * dp_space_towrite should now be zero. However, some seldom-used + * code paths do not adhere to this (e.g. dbuf_undirty(), also + * rounding error in dbuf_write_physdone). + * Shore up the accounting of any dirtied space now. + */ + dsl_pool_undirty_space(dp, dp->dp_dirty_pertxg[txg & TXG_MASK], txg); + + /* + * Update the long range free counter after + * we're done syncing user data + */ + mutex_enter(&dp->dp_lock); + ASSERT(spa_sync_pass(dp->dp_spa) == 1 || + dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] == 0); + dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] = 0; + mutex_exit(&dp->dp_lock); + + /* + * After the data blocks have been written (ensured by the zio_wait() + * above), update the user/group space accounting. This happens + * in tasks dispatched to dp_sync_taskq, so wait for them before + * continuing. + */ + for (ds = list_head(&synced_datasets); ds != NULL; + ds = list_next(&synced_datasets, ds)) { + dmu_objset_do_userquota_updates(ds->ds_objset, tx); + } + taskq_wait(dp->dp_sync_taskq); + + /* + * Sync the datasets again to push out the changes due to + * userspace updates. This must be done before we process the + * sync tasks, so that any snapshots will have the correct + * user accounting information (and we won't get confused + * about which blocks are part of the snapshot). + */ + zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); + while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { + ASSERT(list_link_active(&ds->ds_synced_link)); + dmu_buf_rele(ds->ds_dbuf, ds); + dsl_dataset_sync(ds, zio, tx); + } + VERIFY0(zio_wait(zio)); + + /* + * Now that the datasets have been completely synced, we can + * clean up our in-memory structures accumulated while syncing: + * + * - move dead blocks from the pending deadlist to the on-disk deadlist + * - release hold from dsl_dataset_dirty() + */ + while ((ds = list_remove_head(&synced_datasets)) != NULL) { + dsl_dataset_sync_done(ds, tx); + } + + while ((dd = txg_list_remove(&dp->dp_dirty_dirs, txg)) != NULL) { + dsl_dir_sync(dd, tx); + } + + /* + * The MOS's space is accounted for in the pool/$MOS + * (dp_mos_dir). We can't modify the mos while we're syncing + * it, so we remember the deltas and apply them here. + */ + if (dp->dp_mos_used_delta != 0 || dp->dp_mos_compressed_delta != 0 || + dp->dp_mos_uncompressed_delta != 0) { + dsl_dir_diduse_space(dp->dp_mos_dir, DD_USED_HEAD, + dp->dp_mos_used_delta, + dp->dp_mos_compressed_delta, + dp->dp_mos_uncompressed_delta, tx); + dp->dp_mos_used_delta = 0; + dp->dp_mos_compressed_delta = 0; + dp->dp_mos_uncompressed_delta = 0; + } + + if (!multilist_is_empty(mos->os_dirty_dnodes[txg & TXG_MASK])) { + dsl_pool_sync_mos(dp, tx); + } + + /* + * If we modify a dataset in the same txg that we want to destroy it, + * its dsl_dir's dd_dbuf will be dirty, and thus have a hold on it. + * dsl_dir_destroy_check() will fail if there are unexpected holds. + * Therefore, we want to sync the MOS (thus syncing the dd_dbuf + * and clearing the hold on it) before we process the sync_tasks. + * The MOS data dirtied by the sync_tasks will be synced on the next + * pass. + */ + if (!txg_list_empty(&dp->dp_sync_tasks, txg)) { + dsl_sync_task_t *dst; + /* + * No more sync tasks should have been added while we + * were syncing. + */ + ASSERT3U(spa_sync_pass(dp->dp_spa), ==, 1); + while ((dst = txg_list_remove(&dp->dp_sync_tasks, txg)) != NULL) + dsl_sync_task_sync(dst, tx); + } + + dmu_tx_commit(tx); + + DTRACE_PROBE2(dsl_pool_sync__done, dsl_pool_t *dp, dp, uint64_t, txg); +} + +void +dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg) +{ + zilog_t *zilog; + + while ((zilog = txg_list_head(&dp->dp_dirty_zilogs, txg))) { + dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); + /* + * We don't remove the zilog from the dp_dirty_zilogs + * list until after we've cleaned it. This ensures that + * callers of zilog_is_dirty() receive an accurate + * answer when they are racing with the spa sync thread. + */ + zil_clean(zilog, txg); + (void) txg_list_remove_this(&dp->dp_dirty_zilogs, zilog, txg); + ASSERT(!dmu_objset_is_dirty(zilog->zl_os, txg)); + dmu_buf_rele(ds->ds_dbuf, zilog); + } + ASSERT(!dmu_objset_is_dirty(dp->dp_meta_objset, txg)); +} + +/* + * TRUE if the current thread is the tx_sync_thread or if we + * are being called from SPA context during pool initialization. + */ +int +dsl_pool_sync_context(dsl_pool_t *dp) +{ + return (curthread == dp->dp_tx.tx_sync_thread || + spa_is_initializing(dp->dp_spa) || + taskq_member(dp->dp_sync_taskq, curthread)); +} + +uint64_t +dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree) +{ + uint64_t space, resv; + + /* + * If we're trying to assess whether it's OK to do a free, + * cut the reservation in half to allow forward progress + * (e.g. make it possible to rm(1) files from a full pool). + */ + space = spa_get_dspace(dp->dp_spa); + resv = spa_get_slop_space(dp->dp_spa); + if (netfree) + resv >>= 1; + + return (space - resv); +} + +boolean_t +dsl_pool_need_dirty_delay(dsl_pool_t *dp) +{ + uint64_t delay_min_bytes = + zfs_dirty_data_max * zfs_delay_min_dirty_percent / 100; + boolean_t rv; + + mutex_enter(&dp->dp_lock); + if (dp->dp_dirty_total > zfs_dirty_data_sync) + txg_kick(dp); + rv = (dp->dp_dirty_total > delay_min_bytes); + mutex_exit(&dp->dp_lock); + return (rv); +} + +void +dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx) +{ + if (space > 0) { + mutex_enter(&dp->dp_lock); + dp->dp_dirty_pertxg[tx->tx_txg & TXG_MASK] += space; + dsl_pool_dirty_delta(dp, space); + mutex_exit(&dp->dp_lock); + } +} + +void +dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg) +{ + ASSERT3S(space, >=, 0); + if (space == 0) + return; + + mutex_enter(&dp->dp_lock); + if (dp->dp_dirty_pertxg[txg & TXG_MASK] < space) { + /* XXX writing something we didn't dirty? */ + space = dp->dp_dirty_pertxg[txg & TXG_MASK]; + } + ASSERT3U(dp->dp_dirty_pertxg[txg & TXG_MASK], >=, space); + dp->dp_dirty_pertxg[txg & TXG_MASK] -= space; + ASSERT3U(dp->dp_dirty_total, >=, space); + dsl_pool_dirty_delta(dp, -space); + mutex_exit(&dp->dp_lock); +} + +/* ARGSUSED */ +static int +upgrade_clones_cb(dsl_pool_t *dp, dsl_dataset_t *hds, void *arg) +{ + dmu_tx_t *tx = arg; + dsl_dataset_t *ds, *prev = NULL; + int err; + + err = dsl_dataset_hold_obj(dp, hds->ds_object, FTAG, &ds); + if (err) + return (err); + + while (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &prev); + if (err) { + dsl_dataset_rele(ds, FTAG); + return (err); + } + + if (dsl_dataset_phys(prev)->ds_next_snap_obj != ds->ds_object) + break; + dsl_dataset_rele(ds, FTAG); + ds = prev; + prev = NULL; + } + + if (prev == NULL) { + prev = dp->dp_origin_snap; + + /* + * The $ORIGIN can't have any data, or the accounting + * will be wrong. + */ + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + ASSERT0(dsl_dataset_phys(prev)->ds_bp.blk_birth); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + + /* The origin doesn't get attached to itself */ + if (ds->ds_object == prev->ds_object) { + dsl_dataset_rele(ds, FTAG); + return (0); + } + + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_prev_snap_obj = prev->ds_object; + dsl_dataset_phys(ds)->ds_prev_snap_txg = + dsl_dataset_phys(prev)->ds_creation_txg; + + dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx); + dsl_dir_phys(ds->ds_dir)->dd_origin_obj = prev->ds_object; + + dmu_buf_will_dirty(prev->ds_dbuf, tx); + dsl_dataset_phys(prev)->ds_num_children++; + + if (dsl_dataset_phys(ds)->ds_next_snap_obj == 0) { + ASSERT(ds->ds_prev == NULL); + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, + ds, &ds->ds_prev)); + } + } + + ASSERT3U(dsl_dir_phys(ds->ds_dir)->dd_origin_obj, ==, prev->ds_object); + ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_obj, ==, prev->ds_object); + + if (dsl_dataset_phys(prev)->ds_next_clones_obj == 0) { + dmu_buf_will_dirty(prev->ds_dbuf, tx); + dsl_dataset_phys(prev)->ds_next_clones_obj = + zap_create(dp->dp_meta_objset, + DMU_OT_NEXT_CLONES, DMU_OT_NONE, 0, tx); + } + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dataset_phys(prev)->ds_next_clones_obj, ds->ds_object, tx)); + + dsl_dataset_rele(ds, FTAG); + if (prev != dp->dp_origin_snap) + dsl_dataset_rele(prev, FTAG); + return (0); +} + +void +dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx) +{ + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(dp->dp_origin_snap != NULL); + + VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, upgrade_clones_cb, + tx, DS_FIND_CHILDREN | DS_FIND_SERIALIZE)); +} + +/* ARGSUSED */ +static int +upgrade_dir_clones_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + dmu_tx_t *tx = arg; + objset_t *mos = dp->dp_meta_objset; + + if (dsl_dir_phys(ds->ds_dir)->dd_origin_obj != 0) { + dsl_dataset_t *origin; + + VERIFY0(dsl_dataset_hold_obj(dp, + dsl_dir_phys(ds->ds_dir)->dd_origin_obj, FTAG, &origin)); + + if (dsl_dir_phys(origin->ds_dir)->dd_clones == 0) { + dmu_buf_will_dirty(origin->ds_dir->dd_dbuf, tx); + dsl_dir_phys(origin->ds_dir)->dd_clones = + zap_create(mos, DMU_OT_DSL_CLONES, DMU_OT_NONE, + 0, tx); + } + + VERIFY0(zap_add_int(dp->dp_meta_objset, + dsl_dir_phys(origin->ds_dir)->dd_clones, + ds->ds_object, tx)); + + dsl_dataset_rele(origin, FTAG); + } + return (0); +} + +void +dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx) +{ + uint64_t obj; + + ASSERT(dmu_tx_is_syncing(tx)); + + (void) dsl_dir_create_sync(dp, dp->dp_root_dir, FREE_DIR_NAME, tx); + VERIFY0(dsl_pool_open_special_dir(dp, + FREE_DIR_NAME, &dp->dp_free_dir)); + + /* + * We can't use bpobj_alloc(), because spa_version() still + * returns the old version, and we need a new-version bpobj with + * subobj support. So call dmu_object_alloc() directly. + */ + obj = dmu_object_alloc(dp->dp_meta_objset, DMU_OT_BPOBJ, + SPA_OLD_MAXBLOCKSIZE, DMU_OT_BPOBJ_HDR, sizeof (bpobj_phys_t), tx); + VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj, tx)); + VERIFY0(bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); + + VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + upgrade_dir_clones_cb, tx, DS_FIND_CHILDREN | DS_FIND_SERIALIZE)); +} + +void +dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx) +{ + uint64_t dsobj; + dsl_dataset_t *ds; + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT(dp->dp_origin_snap == NULL); + ASSERT(rrw_held(&dp->dp_config_rwlock, RW_WRITER)); + + /* create the origin dir, ds, & snap-ds */ + dsobj = dsl_dataset_create_sync(dp->dp_root_dir, ORIGIN_DIR_NAME, + NULL, 0, kcred, tx); + VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + dsl_dataset_snapshot_sync_impl(ds, ORIGIN_DIR_NAME, tx); + VERIFY0(dsl_dataset_hold_obj(dp, dsl_dataset_phys(ds)->ds_prev_snap_obj, + dp, &dp->dp_origin_snap)); + dsl_dataset_rele(ds, FTAG); +} + +taskq_t * +dsl_pool_iput_taskq(dsl_pool_t *dp) +{ + return (dp->dp_iput_taskq); +} + +/* + * Walk through the pool-wide zap object of temporary snapshot user holds + * and release them. + */ +void +dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp) +{ + zap_attribute_t za; + zap_cursor_t zc; + objset_t *mos = dp->dp_meta_objset; + uint64_t zapobj = dp->dp_tmp_userrefs_obj; + nvlist_t *holds; + + if (zapobj == 0) + return; + ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); + + holds = fnvlist_alloc(); + + for (zap_cursor_init(&zc, mos, zapobj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + char *htag; + nvlist_t *tags; + + htag = strchr(za.za_name, '-'); + *htag = '\0'; + ++htag; + if (nvlist_lookup_nvlist(holds, za.za_name, &tags) != 0) { + tags = fnvlist_alloc(); + fnvlist_add_boolean(tags, htag); + fnvlist_add_nvlist(holds, za.za_name, tags); + fnvlist_free(tags); + } else { + fnvlist_add_boolean(tags, htag); + } + } + dsl_dataset_user_release_tmp(dp, holds); + fnvlist_free(holds); + zap_cursor_fini(&zc); +} + +/* + * Create the pool-wide zap object for storing temporary snapshot holds. + */ +void +dsl_pool_user_hold_create_obj(dsl_pool_t *dp, dmu_tx_t *tx) +{ + objset_t *mos = dp->dp_meta_objset; + + ASSERT(dp->dp_tmp_userrefs_obj == 0); + ASSERT(dmu_tx_is_syncing(tx)); + + dp->dp_tmp_userrefs_obj = zap_create_link(mos, DMU_OT_USERREFS, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_TMP_USERREFS, tx); +} + +static int +dsl_pool_user_hold_rele_impl(dsl_pool_t *dp, uint64_t dsobj, + const char *tag, uint64_t now, dmu_tx_t *tx, boolean_t holding) +{ + objset_t *mos = dp->dp_meta_objset; + uint64_t zapobj = dp->dp_tmp_userrefs_obj; + char *name; + int error; + + ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); + ASSERT(dmu_tx_is_syncing(tx)); + + /* + * If the pool was created prior to SPA_VERSION_USERREFS, the + * zap object for temporary holds might not exist yet. + */ + if (zapobj == 0) { + if (holding) { + dsl_pool_user_hold_create_obj(dp, tx); + zapobj = dp->dp_tmp_userrefs_obj; + } else { + return (SET_ERROR(ENOENT)); + } + } + + name = kmem_asprintf("%llx-%s", (u_longlong_t)dsobj, tag); + if (holding) + error = zap_add(mos, zapobj, name, 8, 1, &now, tx); + else + error = zap_remove(mos, zapobj, name, tx); + strfree(name); + + return (error); +} + +/* + * Add a temporary hold for the given dataset object and tag. + */ +int +dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj, const char *tag, + uint64_t now, dmu_tx_t *tx) +{ + return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, now, tx, B_TRUE)); +} + +/* + * Release a temporary hold for the given dataset object and tag. + */ +int +dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, const char *tag, + dmu_tx_t *tx) +{ + return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, 0, + tx, B_FALSE)); +} + +/* + * DSL Pool Configuration Lock + * + * The dp_config_rwlock protects against changes to DSL state (e.g. dataset + * creation / destruction / rename / property setting). It must be held for + * read to hold a dataset or dsl_dir. I.e. you must call + * dsl_pool_config_enter() or dsl_pool_hold() before calling + * dsl_{dataset,dir}_hold{_obj}. In most circumstances, the dp_config_rwlock + * must be held continuously until all datasets and dsl_dirs are released. + * + * The only exception to this rule is that if a "long hold" is placed on + * a dataset, then the dp_config_rwlock may be dropped while the dataset + * is still held. The long hold will prevent the dataset from being + * destroyed -- the destroy will fail with EBUSY. A long hold can be + * obtained by calling dsl_dataset_long_hold(), or by "owning" a dataset + * (by calling dsl_{dataset,objset}_{try}own{_obj}). + * + * Legitimate long-holders (including owners) should be long-running, cancelable + * tasks that should cause "zfs destroy" to fail. This includes DMU + * consumers (i.e. a ZPL filesystem being mounted or ZVOL being open), + * "zfs send", and "zfs diff". There are several other long-holders whose + * uses are suboptimal (e.g. "zfs promote", and zil_suspend()). + * + * The usual formula for long-holding would be: + * dsl_pool_hold() + * dsl_dataset_hold() + * ... perform checks ... + * dsl_dataset_long_hold() + * dsl_pool_rele() + * ... perform long-running task ... + * dsl_dataset_long_rele() + * dsl_dataset_rele() + * + * Note that when the long hold is released, the dataset is still held but + * the pool is not held. The dataset may change arbitrarily during this time + * (e.g. it could be destroyed). Therefore you shouldn't do anything to the + * dataset except release it. + * + * User-initiated operations (e.g. ioctls, zfs_ioc_*()) are either read-only + * or modifying operations. + * + * Modifying operations should generally use dsl_sync_task(). The synctask + * infrastructure enforces proper locking strategy with respect to the + * dp_config_rwlock. See the comment above dsl_sync_task() for details. + * + * Read-only operations will manually hold the pool, then the dataset, obtain + * information from the dataset, then release the pool and dataset. + * dmu_objset_{hold,rele}() are convenience routines that also do the pool + * hold/rele. + */ + +int +dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp) +{ + spa_t *spa; + int error; + + error = spa_open(name, &spa, tag); + if (error == 0) { + *dp = spa_get_dsl(spa); + dsl_pool_config_enter(*dp, tag); + } + return (error); +} + +void +dsl_pool_rele(dsl_pool_t *dp, void *tag) +{ + dsl_pool_config_exit(dp, tag); + spa_close(dp->dp_spa, tag); +} + +void +dsl_pool_config_enter(dsl_pool_t *dp, void *tag) +{ + /* + * We use a "reentrant" reader-writer lock, but not reentrantly. + * + * The rrwlock can (with the track_all flag) track all reading threads, + * which is very useful for debugging which code path failed to release + * the lock, and for verifying that the *current* thread does hold + * the lock. + * + * (Unlike a rwlock, which knows that N threads hold it for + * read, but not *which* threads, so rw_held(RW_READER) returns TRUE + * if any thread holds it for read, even if this thread doesn't). + */ + ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); + rrw_enter(&dp->dp_config_rwlock, RW_READER, tag); +} + +void +dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag) +{ + ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); + rrw_enter_read_prio(&dp->dp_config_rwlock, tag); +} + +void +dsl_pool_config_exit(dsl_pool_t *dp, void *tag) +{ + rrw_exit(&dp->dp_config_rwlock, tag); +} + +boolean_t +dsl_pool_config_held(dsl_pool_t *dp) +{ + return (RRW_LOCK_HELD(&dp->dp_config_rwlock)); +} + +boolean_t +dsl_pool_config_held_writer(dsl_pool_t *dp) +{ + return (RRW_WRITE_HELD(&dp->dp_config_rwlock)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_pool_config_enter); +EXPORT_SYMBOL(dsl_pool_config_exit); + +/* BEGIN CSTYLED */ +/* zfs_dirty_data_max_percent only applied at module load in arc_init(). */ +module_param(zfs_dirty_data_max_percent, int, 0444); +MODULE_PARM_DESC(zfs_dirty_data_max_percent, "percent of ram can be dirty"); + +/* zfs_dirty_data_max_max_percent only applied at module load in arc_init(). */ +module_param(zfs_dirty_data_max_max_percent, int, 0444); +MODULE_PARM_DESC(zfs_dirty_data_max_max_percent, + "zfs_dirty_data_max upper bound as % of RAM"); + +module_param(zfs_delay_min_dirty_percent, int, 0644); +MODULE_PARM_DESC(zfs_delay_min_dirty_percent, "transaction delay threshold"); + +module_param(zfs_dirty_data_max, ulong, 0644); +MODULE_PARM_DESC(zfs_dirty_data_max, "determines the dirty space limit"); + +/* zfs_dirty_data_max_max only applied at module load in arc_init(). */ +module_param(zfs_dirty_data_max_max, ulong, 0444); +MODULE_PARM_DESC(zfs_dirty_data_max_max, + "zfs_dirty_data_max upper bound in bytes"); + +module_param(zfs_dirty_data_sync, ulong, 0644); +MODULE_PARM_DESC(zfs_dirty_data_sync, "sync txg when this much dirty data"); + +module_param(zfs_delay_scale, ulong, 0644); +MODULE_PARM_DESC(zfs_delay_scale, "how quickly delay approaches infinity"); + +module_param(zfs_sync_taskq_batch_pct, int, 0644); +MODULE_PARM_DESC(zfs_sync_taskq_batch_pct, + "max percent of CPUs that are used to sync dirty data"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_prop.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_prop.c @@ -0,0 +1,1271 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 Martin Matuska. All rights reserved. + * Copyright 2015, Joyent, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zfs_prop.h" + +#define ZPROP_INHERIT_SUFFIX "$inherit" +#define ZPROP_RECVD_SUFFIX "$recvd" + +static int +dodefault(zfs_prop_t prop, int intsz, int numints, void *buf) +{ + /* + * The setonce properties are read-only, BUT they still + * have a default value that can be used as the initial + * value. + */ + if (prop == ZPROP_INVAL || + (zfs_prop_readonly(prop) && !zfs_prop_setonce(prop))) + return (SET_ERROR(ENOENT)); + + if (zfs_prop_get_type(prop) == PROP_TYPE_STRING) { + if (intsz != 1) + return (SET_ERROR(EOVERFLOW)); + (void) strncpy(buf, zfs_prop_default_string(prop), + numints); + } else { + if (intsz != 8 || numints < 1) + return (SET_ERROR(EOVERFLOW)); + + *(uint64_t *)buf = zfs_prop_default_numeric(prop); + } + + return (0); +} + +int +dsl_prop_get_dd(dsl_dir_t *dd, const char *propname, + int intsz, int numints, void *buf, char *setpoint, boolean_t snapshot) +{ + int err = ENOENT; + dsl_dir_t *target = dd; + objset_t *mos = dd->dd_pool->dp_meta_objset; + zfs_prop_t prop; + boolean_t inheritable; + boolean_t inheriting = B_FALSE; + char *inheritstr; + char *recvdstr; + + ASSERT(dsl_pool_config_held(dd->dd_pool)); + + if (setpoint) + setpoint[0] = '\0'; + + prop = zfs_name_to_prop(propname); + inheritable = (prop == ZPROP_INVAL || zfs_prop_inheritable(prop)); + inheritstr = kmem_asprintf("%s%s", propname, ZPROP_INHERIT_SUFFIX); + recvdstr = kmem_asprintf("%s%s", propname, ZPROP_RECVD_SUFFIX); + + /* + * Note: dd may become NULL, therefore we shouldn't dereference it + * after this loop. + */ + for (; dd != NULL; dd = dd->dd_parent) { + if (dd != target || snapshot) { + if (!inheritable) + break; + inheriting = B_TRUE; + } + + /* Check for a local value. */ + err = zap_lookup(mos, dsl_dir_phys(dd)->dd_props_zapobj, + propname, intsz, numints, buf); + if (err != ENOENT) { + if (setpoint != NULL && err == 0) + dsl_dir_name(dd, setpoint); + break; + } + + /* + * Skip the check for a received value if there is an explicit + * inheritance entry. + */ + err = zap_contains(mos, dsl_dir_phys(dd)->dd_props_zapobj, + inheritstr); + if (err != 0 && err != ENOENT) + break; + + if (err == ENOENT) { + /* Check for a received value. */ + err = zap_lookup(mos, dsl_dir_phys(dd)->dd_props_zapobj, + recvdstr, intsz, numints, buf); + if (err != ENOENT) { + if (setpoint != NULL && err == 0) { + if (inheriting) { + dsl_dir_name(dd, setpoint); + } else { + (void) strcpy(setpoint, + ZPROP_SOURCE_VAL_RECVD); + } + } + break; + } + } + + /* + * If we found an explicit inheritance entry, err is zero even + * though we haven't yet found the value, so reinitializing err + * at the end of the loop (instead of at the beginning) ensures + * that err has a valid post-loop value. + */ + err = SET_ERROR(ENOENT); + } + + if (err == ENOENT) + err = dodefault(prop, intsz, numints, buf); + + strfree(inheritstr); + strfree(recvdstr); + + return (err); +} + +int +dsl_prop_get_ds(dsl_dataset_t *ds, const char *propname, + int intsz, int numints, void *buf, char *setpoint) +{ + zfs_prop_t prop = zfs_name_to_prop(propname); + boolean_t inheritable; + uint64_t zapobj; + + ASSERT(dsl_pool_config_held(ds->ds_dir->dd_pool)); + inheritable = (prop == ZPROP_INVAL || zfs_prop_inheritable(prop)); + zapobj = dsl_dataset_phys(ds)->ds_props_obj; + + if (zapobj != 0) { + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + int err; + + ASSERT(ds->ds_is_snapshot); + + /* Check for a local value. */ + err = zap_lookup(mos, zapobj, propname, intsz, numints, buf); + if (err != ENOENT) { + if (setpoint != NULL && err == 0) + dsl_dataset_name(ds, setpoint); + return (err); + } + + /* + * Skip the check for a received value if there is an explicit + * inheritance entry. + */ + if (inheritable) { + char *inheritstr = kmem_asprintf("%s%s", propname, + ZPROP_INHERIT_SUFFIX); + err = zap_contains(mos, zapobj, inheritstr); + strfree(inheritstr); + if (err != 0 && err != ENOENT) + return (err); + } + + if (err == ENOENT) { + /* Check for a received value. */ + char *recvdstr = kmem_asprintf("%s%s", propname, + ZPROP_RECVD_SUFFIX); + err = zap_lookup(mos, zapobj, recvdstr, + intsz, numints, buf); + strfree(recvdstr); + if (err != ENOENT) { + if (setpoint != NULL && err == 0) + (void) strcpy(setpoint, + ZPROP_SOURCE_VAL_RECVD); + return (err); + } + } + } + + return (dsl_prop_get_dd(ds->ds_dir, propname, + intsz, numints, buf, setpoint, ds->ds_is_snapshot)); +} + +static dsl_prop_record_t * +dsl_prop_record_find(dsl_dir_t *dd, const char *propname) +{ + dsl_prop_record_t *pr = NULL; + + ASSERT(MUTEX_HELD(&dd->dd_lock)); + + for (pr = list_head(&dd->dd_props); + pr != NULL; pr = list_next(&dd->dd_props, pr)) { + if (strcmp(pr->pr_propname, propname) == 0) + break; + } + + return (pr); +} + +static dsl_prop_record_t * +dsl_prop_record_create(dsl_dir_t *dd, const char *propname) +{ + dsl_prop_record_t *pr; + + ASSERT(MUTEX_HELD(&dd->dd_lock)); + + pr = kmem_alloc(sizeof (dsl_prop_record_t), KM_SLEEP); + pr->pr_propname = spa_strdup(propname); + list_create(&pr->pr_cbs, sizeof (dsl_prop_cb_record_t), + offsetof(dsl_prop_cb_record_t, cbr_pr_node)); + list_insert_head(&dd->dd_props, pr); + + return (pr); +} + +void +dsl_prop_init(dsl_dir_t *dd) +{ + list_create(&dd->dd_props, sizeof (dsl_prop_record_t), + offsetof(dsl_prop_record_t, pr_node)); +} + +void +dsl_prop_fini(dsl_dir_t *dd) +{ + dsl_prop_record_t *pr; + + while ((pr = list_remove_head(&dd->dd_props)) != NULL) { + list_destroy(&pr->pr_cbs); + spa_strfree((char *)pr->pr_propname); + kmem_free(pr, sizeof (dsl_prop_record_t)); + } + list_destroy(&dd->dd_props); +} + +/* + * Register interest in the named property. We'll call the callback + * once to notify it of the current property value, and again each time + * the property changes, until this callback is unregistered. + * + * Return 0 on success, errno if the prop is not an integer value. + */ +int +dsl_prop_register(dsl_dataset_t *ds, const char *propname, + dsl_prop_changed_cb_t *callback, void *cbarg) +{ + dsl_dir_t *dd = ds->ds_dir; + uint64_t value; + dsl_prop_record_t *pr; + dsl_prop_cb_record_t *cbr; + int err; + ASSERTV(dsl_pool_t *dp = dd->dd_pool); + + ASSERT(dsl_pool_config_held(dp)); + + err = dsl_prop_get_int_ds(ds, propname, &value); + if (err != 0) + return (err); + + cbr = kmem_alloc(sizeof (dsl_prop_cb_record_t), KM_SLEEP); + cbr->cbr_ds = ds; + cbr->cbr_func = callback; + cbr->cbr_arg = cbarg; + + mutex_enter(&dd->dd_lock); + pr = dsl_prop_record_find(dd, propname); + if (pr == NULL) + pr = dsl_prop_record_create(dd, propname); + cbr->cbr_pr = pr; + list_insert_head(&pr->pr_cbs, cbr); + list_insert_head(&ds->ds_prop_cbs, cbr); + mutex_exit(&dd->dd_lock); + + cbr->cbr_func(cbr->cbr_arg, value); + return (0); +} + +int +dsl_prop_get(const char *dsname, const char *propname, + int intsz, int numints, void *buf, char *setpoint) +{ + objset_t *os; + int error; + + error = dmu_objset_hold(dsname, FTAG, &os); + if (error != 0) + return (error); + + error = dsl_prop_get_ds(dmu_objset_ds(os), propname, + intsz, numints, buf, setpoint); + + dmu_objset_rele(os, FTAG); + return (error); +} + +/* + * Get the current property value. It may have changed by the time this + * function returns, so it is NOT safe to follow up with + * dsl_prop_register() and assume that the value has not changed in + * between. + * + * Return 0 on success, ENOENT if ddname is invalid. + */ +int +dsl_prop_get_integer(const char *ddname, const char *propname, + uint64_t *valuep, char *setpoint) +{ + return (dsl_prop_get(ddname, propname, 8, 1, valuep, setpoint)); +} + +int +dsl_prop_get_int_ds(dsl_dataset_t *ds, const char *propname, + uint64_t *valuep) +{ + return (dsl_prop_get_ds(ds, propname, 8, 1, valuep, NULL)); +} + +/* + * Predict the effective value of the given special property if it were set with + * the given value and source. This is not a general purpose function. It exists + * only to handle the special requirements of the quota and reservation + * properties. The fact that these properties are non-inheritable greatly + * simplifies the prediction logic. + * + * Returns 0 on success, a positive error code on failure, or -1 if called with + * a property not handled by this function. + */ +int +dsl_prop_predict(dsl_dir_t *dd, const char *propname, + zprop_source_t source, uint64_t value, uint64_t *newvalp) +{ + zfs_prop_t prop = zfs_name_to_prop(propname); + objset_t *mos; + uint64_t zapobj; + uint64_t version; + char *recvdstr; + int err = 0; + + switch (prop) { + case ZFS_PROP_QUOTA: + case ZFS_PROP_RESERVATION: + case ZFS_PROP_REFQUOTA: + case ZFS_PROP_REFRESERVATION: + break; + default: + return (-1); + } + + mos = dd->dd_pool->dp_meta_objset; + zapobj = dsl_dir_phys(dd)->dd_props_zapobj; + recvdstr = kmem_asprintf("%s%s", propname, ZPROP_RECVD_SUFFIX); + + version = spa_version(dd->dd_pool->dp_spa); + if (version < SPA_VERSION_RECVD_PROPS) { + if (source & ZPROP_SRC_NONE) + source = ZPROP_SRC_NONE; + else if (source & ZPROP_SRC_RECEIVED) + source = ZPROP_SRC_LOCAL; + } + + switch ((int)source) { + case ZPROP_SRC_NONE: + /* Revert to the received value, if any. */ + err = zap_lookup(mos, zapobj, recvdstr, 8, 1, newvalp); + if (err == ENOENT) + *newvalp = 0; + break; + case ZPROP_SRC_LOCAL: + *newvalp = value; + break; + case ZPROP_SRC_RECEIVED: + /* + * If there's no local setting, then the new received value will + * be the effective value. + */ + err = zap_lookup(mos, zapobj, propname, 8, 1, newvalp); + if (err == ENOENT) + *newvalp = value; + break; + case (ZPROP_SRC_NONE | ZPROP_SRC_RECEIVED): + /* + * We're clearing the received value, so the local setting (if + * it exists) remains the effective value. + */ + err = zap_lookup(mos, zapobj, propname, 8, 1, newvalp); + if (err == ENOENT) + *newvalp = 0; + break; + default: + panic("unexpected property source: %d", source); + } + + strfree(recvdstr); + + if (err == ENOENT) + return (0); + + return (err); +} + +/* + * Unregister this callback. Return 0 on success, ENOENT if ddname is + * invalid, or ENOMSG if no matching callback registered. + * + * NOTE: This function is no longer used internally but has been preserved + * to prevent breaking external consumers (Lustre, etc). + */ +int +dsl_prop_unregister(dsl_dataset_t *ds, const char *propname, + dsl_prop_changed_cb_t *callback, void *cbarg) +{ + dsl_dir_t *dd = ds->ds_dir; + dsl_prop_cb_record_t *cbr; + + mutex_enter(&dd->dd_lock); + for (cbr = list_head(&ds->ds_prop_cbs); + cbr; cbr = list_next(&ds->ds_prop_cbs, cbr)) { + if (cbr->cbr_ds == ds && + cbr->cbr_func == callback && + cbr->cbr_arg == cbarg && + strcmp(cbr->cbr_pr->pr_propname, propname) == 0) + break; + } + + if (cbr == NULL) { + mutex_exit(&dd->dd_lock); + return (SET_ERROR(ENOMSG)); + } + + list_remove(&ds->ds_prop_cbs, cbr); + list_remove(&cbr->cbr_pr->pr_cbs, cbr); + mutex_exit(&dd->dd_lock); + kmem_free(cbr, sizeof (dsl_prop_cb_record_t)); + + return (0); +} + +/* + * Unregister all callbacks that are registered with the + * given callback argument. + */ +void +dsl_prop_unregister_all(dsl_dataset_t *ds, void *cbarg) +{ + dsl_prop_cb_record_t *cbr, *next_cbr; + + dsl_dir_t *dd = ds->ds_dir; + + mutex_enter(&dd->dd_lock); + next_cbr = list_head(&ds->ds_prop_cbs); + while (next_cbr != NULL) { + cbr = next_cbr; + next_cbr = list_next(&ds->ds_prop_cbs, cbr); + if (cbr->cbr_arg == cbarg) { + list_remove(&ds->ds_prop_cbs, cbr); + list_remove(&cbr->cbr_pr->pr_cbs, cbr); + kmem_free(cbr, sizeof (dsl_prop_cb_record_t)); + } + } + mutex_exit(&dd->dd_lock); +} + +boolean_t +dsl_prop_hascb(dsl_dataset_t *ds) +{ + return (!list_is_empty(&ds->ds_prop_cbs)); +} + +/* ARGSUSED */ +static int +dsl_prop_notify_all_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + dsl_dir_t *dd = ds->ds_dir; + dsl_prop_record_t *pr; + dsl_prop_cb_record_t *cbr; + + mutex_enter(&dd->dd_lock); + for (pr = list_head(&dd->dd_props); + pr; pr = list_next(&dd->dd_props, pr)) { + for (cbr = list_head(&pr->pr_cbs); cbr; + cbr = list_next(&pr->pr_cbs, cbr)) { + uint64_t value; + + /* + * Callback entries do not have holds on their + * datasets so that datasets with registered + * callbacks are still eligible for eviction. + * Unlike operations to update properties on a + * single dataset, we are performing a recursive + * descent of related head datasets. The caller + * of this function only has a dataset hold on + * the passed in head dataset, not the snapshots + * associated with this dataset. Without a hold, + * the dataset pointer within callback records + * for snapshots can be invalidated by eviction + * at any time. + * + * Use dsl_dataset_try_add_ref() to verify + * that the dataset for a snapshot has not + * begun eviction processing and to prevent + * eviction from occurring for the duration of + * the callback. If the hold attempt fails, + * this object is already being evicted and the + * callback can be safely ignored. + */ + if (ds != cbr->cbr_ds && + !dsl_dataset_try_add_ref(dp, cbr->cbr_ds, FTAG)) + continue; + + if (dsl_prop_get_ds(cbr->cbr_ds, + cbr->cbr_pr->pr_propname, sizeof (value), 1, + &value, NULL) == 0) + cbr->cbr_func(cbr->cbr_arg, value); + + if (ds != cbr->cbr_ds) + dsl_dataset_rele(cbr->cbr_ds, FTAG); + } + } + mutex_exit(&dd->dd_lock); + + return (0); +} + +/* + * Update all property values for ddobj & its descendants. This is used + * when renaming the dir. + */ +void +dsl_prop_notify_all(dsl_dir_t *dd) +{ + dsl_pool_t *dp = dd->dd_pool; + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + (void) dmu_objset_find_dp(dp, dd->dd_object, dsl_prop_notify_all_cb, + NULL, DS_FIND_CHILDREN); +} + +static void +dsl_prop_changed_notify(dsl_pool_t *dp, uint64_t ddobj, + const char *propname, uint64_t value, int first) +{ + dsl_dir_t *dd; + dsl_prop_record_t *pr; + dsl_prop_cb_record_t *cbr; + objset_t *mos = dp->dp_meta_objset; + zap_cursor_t zc; + zap_attribute_t *za; + int err; + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + err = dsl_dir_hold_obj(dp, ddobj, NULL, FTAG, &dd); + if (err) + return; + + if (!first) { + /* + * If the prop is set here, then this change is not + * being inherited here or below; stop the recursion. + */ + err = zap_contains(mos, dsl_dir_phys(dd)->dd_props_zapobj, + propname); + if (err == 0) { + dsl_dir_rele(dd, FTAG); + return; + } + ASSERT3U(err, ==, ENOENT); + } + + mutex_enter(&dd->dd_lock); + pr = dsl_prop_record_find(dd, propname); + if (pr != NULL) { + for (cbr = list_head(&pr->pr_cbs); cbr; + cbr = list_next(&pr->pr_cbs, cbr)) { + uint64_t propobj; + + /* + * cbr->cbr_ds may be invalidated due to eviction, + * requiring the use of dsl_dataset_try_add_ref(). + * See comment block in dsl_prop_notify_all_cb() + * for details. + */ + if (!dsl_dataset_try_add_ref(dp, cbr->cbr_ds, FTAG)) + continue; + + propobj = dsl_dataset_phys(cbr->cbr_ds)->ds_props_obj; + + /* + * If the property is not set on this ds, then it is + * inherited here; call the callback. + */ + if (propobj == 0 || + zap_contains(mos, propobj, propname) != 0) + cbr->cbr_func(cbr->cbr_arg, value); + + dsl_dataset_rele(cbr->cbr_ds, FTAG); + } + } + mutex_exit(&dd->dd_lock); + + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + for (zap_cursor_init(&zc, mos, + dsl_dir_phys(dd)->dd_child_dir_zapobj); + zap_cursor_retrieve(&zc, za) == 0; + zap_cursor_advance(&zc)) { + dsl_prop_changed_notify(dp, za->za_first_integer, + propname, value, FALSE); + } + kmem_free(za, sizeof (zap_attribute_t)); + zap_cursor_fini(&zc); + dsl_dir_rele(dd, FTAG); +} + +void +dsl_prop_set_sync_impl(dsl_dataset_t *ds, const char *propname, + zprop_source_t source, int intsz, int numints, const void *value, + dmu_tx_t *tx) +{ + objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; + uint64_t zapobj, intval, dummy; + int isint; + char valbuf[32]; + const char *valstr = NULL; + char *inheritstr; + char *recvdstr; + char *tbuf = NULL; + int err; + uint64_t version = spa_version(ds->ds_dir->dd_pool->dp_spa); + + isint = (dodefault(zfs_name_to_prop(propname), 8, 1, &intval) == 0); + + if (ds->ds_is_snapshot) { + ASSERT(version >= SPA_VERSION_SNAP_PROPS); + if (dsl_dataset_phys(ds)->ds_props_obj == 0) { + dmu_buf_will_dirty(ds->ds_dbuf, tx); + dsl_dataset_phys(ds)->ds_props_obj = + zap_create(mos, + DMU_OT_DSL_PROPS, DMU_OT_NONE, 0, tx); + } + zapobj = dsl_dataset_phys(ds)->ds_props_obj; + } else { + zapobj = dsl_dir_phys(ds->ds_dir)->dd_props_zapobj; + } + + if (version < SPA_VERSION_RECVD_PROPS) { + if (source & ZPROP_SRC_NONE) + source = ZPROP_SRC_NONE; + else if (source & ZPROP_SRC_RECEIVED) + source = ZPROP_SRC_LOCAL; + } + + inheritstr = kmem_asprintf("%s%s", propname, ZPROP_INHERIT_SUFFIX); + recvdstr = kmem_asprintf("%s%s", propname, ZPROP_RECVD_SUFFIX); + + switch ((int)source) { + case ZPROP_SRC_NONE: + /* + * revert to received value, if any (inherit -S) + * - remove propname + * - remove propname$inherit + */ + err = zap_remove(mos, zapobj, propname, tx); + ASSERT(err == 0 || err == ENOENT); + err = zap_remove(mos, zapobj, inheritstr, tx); + ASSERT(err == 0 || err == ENOENT); + break; + case ZPROP_SRC_LOCAL: + /* + * remove propname$inherit + * set propname -> value + */ + err = zap_remove(mos, zapobj, inheritstr, tx); + ASSERT(err == 0 || err == ENOENT); + VERIFY0(zap_update(mos, zapobj, propname, + intsz, numints, value, tx)); + break; + case ZPROP_SRC_INHERITED: + /* + * explicitly inherit + * - remove propname + * - set propname$inherit + */ + err = zap_remove(mos, zapobj, propname, tx); + ASSERT(err == 0 || err == ENOENT); + if (version >= SPA_VERSION_RECVD_PROPS && + dsl_prop_get_int_ds(ds, ZPROP_HAS_RECVD, &dummy) == 0) { + dummy = 0; + VERIFY0(zap_update(mos, zapobj, inheritstr, + 8, 1, &dummy, tx)); + } + break; + case ZPROP_SRC_RECEIVED: + /* + * set propname$recvd -> value + */ + err = zap_update(mos, zapobj, recvdstr, + intsz, numints, value, tx); + ASSERT(err == 0); + break; + case (ZPROP_SRC_NONE | ZPROP_SRC_LOCAL | ZPROP_SRC_RECEIVED): + /* + * clear local and received settings + * - remove propname + * - remove propname$inherit + * - remove propname$recvd + */ + err = zap_remove(mos, zapobj, propname, tx); + ASSERT(err == 0 || err == ENOENT); + err = zap_remove(mos, zapobj, inheritstr, tx); + ASSERT(err == 0 || err == ENOENT); + /* FALLTHRU */ + case (ZPROP_SRC_NONE | ZPROP_SRC_RECEIVED): + /* + * remove propname$recvd + */ + err = zap_remove(mos, zapobj, recvdstr, tx); + ASSERT(err == 0 || err == ENOENT); + break; + default: + cmn_err(CE_PANIC, "unexpected property source: %d", source); + } + + strfree(inheritstr); + strfree(recvdstr); + + if (isint) { + VERIFY0(dsl_prop_get_int_ds(ds, propname, &intval)); + + if (ds->ds_is_snapshot) { + dsl_prop_cb_record_t *cbr; + /* + * It's a snapshot; nothing can inherit this + * property, so just look for callbacks on this + * ds here. + */ + mutex_enter(&ds->ds_dir->dd_lock); + for (cbr = list_head(&ds->ds_prop_cbs); cbr; + cbr = list_next(&ds->ds_prop_cbs, cbr)) { + if (strcmp(cbr->cbr_pr->pr_propname, + propname) == 0) + cbr->cbr_func(cbr->cbr_arg, intval); + } + mutex_exit(&ds->ds_dir->dd_lock); + } else { + dsl_prop_changed_notify(ds->ds_dir->dd_pool, + ds->ds_dir->dd_object, propname, intval, TRUE); + } + + (void) snprintf(valbuf, sizeof (valbuf), + "%lld", (longlong_t)intval); + valstr = valbuf; + } else { + if (source == ZPROP_SRC_LOCAL) { + valstr = value; + } else { + tbuf = kmem_alloc(ZAP_MAXVALUELEN, KM_SLEEP); + if (dsl_prop_get_ds(ds, propname, 1, + ZAP_MAXVALUELEN, tbuf, NULL) == 0) + valstr = tbuf; + } + } + + spa_history_log_internal_ds(ds, (source == ZPROP_SRC_NONE || + source == ZPROP_SRC_INHERITED) ? "inherit" : "set", tx, + "%s=%s", propname, (valstr == NULL ? "" : valstr)); + + if (tbuf != NULL) + kmem_free(tbuf, ZAP_MAXVALUELEN); +} + +int +dsl_prop_set_int(const char *dsname, const char *propname, + zprop_source_t source, uint64_t value) +{ + nvlist_t *nvl = fnvlist_alloc(); + int error; + + fnvlist_add_uint64(nvl, propname, value); + error = dsl_props_set(dsname, source, nvl); + fnvlist_free(nvl); + return (error); +} + +int +dsl_prop_set_string(const char *dsname, const char *propname, + zprop_source_t source, const char *value) +{ + nvlist_t *nvl = fnvlist_alloc(); + int error; + + fnvlist_add_string(nvl, propname, value); + error = dsl_props_set(dsname, source, nvl); + fnvlist_free(nvl); + return (error); +} + +int +dsl_prop_inherit(const char *dsname, const char *propname, + zprop_source_t source) +{ + nvlist_t *nvl = fnvlist_alloc(); + int error; + + fnvlist_add_boolean(nvl, propname); + error = dsl_props_set(dsname, source, nvl); + fnvlist_free(nvl); + return (error); +} + +typedef struct dsl_props_set_arg { + const char *dpsa_dsname; + zprop_source_t dpsa_source; + nvlist_t *dpsa_props; +} dsl_props_set_arg_t; + +static int +dsl_props_set_check(void *arg, dmu_tx_t *tx) +{ + dsl_props_set_arg_t *dpsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + uint64_t version; + nvpair_t *elem = NULL; + int err; + + err = dsl_dataset_hold(dp, dpsa->dpsa_dsname, FTAG, &ds); + if (err != 0) + return (err); + + version = spa_version(ds->ds_dir->dd_pool->dp_spa); + while ((elem = nvlist_next_nvpair(dpsa->dpsa_props, elem)) != NULL) { + if (strlen(nvpair_name(elem)) >= ZAP_MAXNAMELEN) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENAMETOOLONG)); + } + if (nvpair_type(elem) == DATA_TYPE_STRING) { + char *valstr = fnvpair_value_string(elem); + if (strlen(valstr) >= (version < + SPA_VERSION_STMF_PROP ? + ZAP_OLDMAXVALUELEN : ZAP_MAXVALUELEN)) { + dsl_dataset_rele(ds, FTAG); + return (E2BIG); + } + } + } + + if (ds->ds_is_snapshot && version < SPA_VERSION_SNAP_PROPS) { + dsl_dataset_rele(ds, FTAG); + return (SET_ERROR(ENOTSUP)); + } + dsl_dataset_rele(ds, FTAG); + return (0); +} + +void +dsl_props_set_sync_impl(dsl_dataset_t *ds, zprop_source_t source, + nvlist_t *props, dmu_tx_t *tx) +{ + nvpair_t *elem = NULL; + + while ((elem = nvlist_next_nvpair(props, elem)) != NULL) { + nvpair_t *pair = elem; + const char *name = nvpair_name(pair); + + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + /* + * This usually happens when we reuse the nvlist_t data + * returned by the counterpart dsl_prop_get_all_impl(). + * For instance we do this to restore the original + * received properties when an error occurs in the + * zfs_ioc_recv() codepath. + */ + nvlist_t *attrs = fnvpair_value_nvlist(pair); + pair = fnvlist_lookup_nvpair(attrs, ZPROP_VALUE); + } + + if (nvpair_type(pair) == DATA_TYPE_STRING) { + const char *value = fnvpair_value_string(pair); + dsl_prop_set_sync_impl(ds, name, + source, 1, strlen(value) + 1, value, tx); + } else if (nvpair_type(pair) == DATA_TYPE_UINT64) { + uint64_t intval = fnvpair_value_uint64(pair); + dsl_prop_set_sync_impl(ds, name, + source, sizeof (intval), 1, &intval, tx); + } else if (nvpair_type(pair) == DATA_TYPE_BOOLEAN) { + dsl_prop_set_sync_impl(ds, name, + source, 0, 0, NULL, tx); + } else { + panic("invalid nvpair type"); + } + } +} + +static void +dsl_props_set_sync(void *arg, dmu_tx_t *tx) +{ + dsl_props_set_arg_t *dpsa = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold(dp, dpsa->dpsa_dsname, FTAG, &ds)); + dsl_props_set_sync_impl(ds, dpsa->dpsa_source, dpsa->dpsa_props, tx); + dsl_dataset_rele(ds, FTAG); +} + +/* + * All-or-nothing; if any prop can't be set, nothing will be modified. + */ +int +dsl_props_set(const char *dsname, zprop_source_t source, nvlist_t *props) +{ + dsl_props_set_arg_t dpsa; + int nblks = 0; + + dpsa.dpsa_dsname = dsname; + dpsa.dpsa_source = source; + dpsa.dpsa_props = props; + + /* + * If the source includes NONE, then we will only be removing entries + * from the ZAP object. In that case don't check for ENOSPC. + */ + if ((source & ZPROP_SRC_NONE) == 0) + nblks = 2 * fnvlist_num_pairs(props); + + return (dsl_sync_task(dsname, dsl_props_set_check, dsl_props_set_sync, + &dpsa, nblks, ZFS_SPACE_CHECK_RESERVED)); +} + +typedef enum dsl_prop_getflags { + DSL_PROP_GET_INHERITING = 0x1, /* searching parent of target ds */ + DSL_PROP_GET_SNAPSHOT = 0x2, /* snapshot dataset */ + DSL_PROP_GET_LOCAL = 0x4, /* local properties */ + DSL_PROP_GET_RECEIVED = 0x8 /* received properties */ +} dsl_prop_getflags_t; + +static int +dsl_prop_get_all_impl(objset_t *mos, uint64_t propobj, + const char *setpoint, dsl_prop_getflags_t flags, nvlist_t *nv) +{ + zap_cursor_t zc; + zap_attribute_t za; + int err = 0; + + for (zap_cursor_init(&zc, mos, propobj); + (err = zap_cursor_retrieve(&zc, &za)) == 0; + zap_cursor_advance(&zc)) { + nvlist_t *propval; + zfs_prop_t prop; + char buf[ZAP_MAXNAMELEN]; + char *valstr; + const char *suffix; + const char *propname; + const char *source; + + suffix = strchr(za.za_name, '$'); + + if (suffix == NULL) { + /* + * Skip local properties if we only want received + * properties. + */ + if (flags & DSL_PROP_GET_RECEIVED) + continue; + + propname = za.za_name; + source = setpoint; + } else if (strcmp(suffix, ZPROP_INHERIT_SUFFIX) == 0) { + /* Skip explicitly inherited entries. */ + continue; + } else if (strcmp(suffix, ZPROP_RECVD_SUFFIX) == 0) { + if (flags & DSL_PROP_GET_LOCAL) + continue; + + (void) strncpy(buf, za.za_name, (suffix - za.za_name)); + buf[suffix - za.za_name] = '\0'; + propname = buf; + + if (!(flags & DSL_PROP_GET_RECEIVED)) { + /* Skip if locally overridden. */ + err = zap_contains(mos, propobj, propname); + if (err == 0) + continue; + if (err != ENOENT) + break; + + /* Skip if explicitly inherited. */ + valstr = kmem_asprintf("%s%s", propname, + ZPROP_INHERIT_SUFFIX); + err = zap_contains(mos, propobj, valstr); + strfree(valstr); + if (err == 0) + continue; + if (err != ENOENT) + break; + } + + source = ((flags & DSL_PROP_GET_INHERITING) ? + setpoint : ZPROP_SOURCE_VAL_RECVD); + } else { + /* + * For backward compatibility, skip suffixes we don't + * recognize. + */ + continue; + } + + prop = zfs_name_to_prop(propname); + + /* Skip non-inheritable properties. */ + if ((flags & DSL_PROP_GET_INHERITING) && prop != ZPROP_INVAL && + !zfs_prop_inheritable(prop)) + continue; + + /* Skip properties not valid for this type. */ + if ((flags & DSL_PROP_GET_SNAPSHOT) && prop != ZPROP_INVAL && + !zfs_prop_valid_for_type(prop, ZFS_TYPE_SNAPSHOT, B_FALSE)) + continue; + + /* Skip properties already defined. */ + if (nvlist_exists(nv, propname)) + continue; + + VERIFY(nvlist_alloc(&propval, NV_UNIQUE_NAME, KM_SLEEP) == 0); + if (za.za_integer_length == 1) { + /* + * String property + */ + char *tmp = kmem_alloc(za.za_num_integers, + KM_SLEEP); + err = zap_lookup(mos, propobj, + za.za_name, 1, za.za_num_integers, tmp); + if (err != 0) { + kmem_free(tmp, za.za_num_integers); + break; + } + VERIFY(nvlist_add_string(propval, ZPROP_VALUE, + tmp) == 0); + kmem_free(tmp, za.za_num_integers); + } else { + /* + * Integer property + */ + ASSERT(za.za_integer_length == 8); + (void) nvlist_add_uint64(propval, ZPROP_VALUE, + za.za_first_integer); + } + + VERIFY(nvlist_add_string(propval, ZPROP_SOURCE, source) == 0); + VERIFY(nvlist_add_nvlist(nv, propname, propval) == 0); + nvlist_free(propval); + } + zap_cursor_fini(&zc); + if (err == ENOENT) + err = 0; + return (err); +} + +/* + * Iterate over all properties for this dataset and return them in an nvlist. + */ +static int +dsl_prop_get_all_ds(dsl_dataset_t *ds, nvlist_t **nvp, + dsl_prop_getflags_t flags) +{ + dsl_dir_t *dd = ds->ds_dir; + dsl_pool_t *dp = dd->dd_pool; + objset_t *mos = dp->dp_meta_objset; + int err = 0; + char setpoint[ZFS_MAX_DATASET_NAME_LEN]; + + VERIFY(nvlist_alloc(nvp, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + if (ds->ds_is_snapshot) + flags |= DSL_PROP_GET_SNAPSHOT; + + ASSERT(dsl_pool_config_held(dp)); + + if (dsl_dataset_phys(ds)->ds_props_obj != 0) { + ASSERT(flags & DSL_PROP_GET_SNAPSHOT); + dsl_dataset_name(ds, setpoint); + err = dsl_prop_get_all_impl(mos, + dsl_dataset_phys(ds)->ds_props_obj, setpoint, flags, *nvp); + if (err) + goto out; + } + + for (; dd != NULL; dd = dd->dd_parent) { + if (dd != ds->ds_dir || (flags & DSL_PROP_GET_SNAPSHOT)) { + if (flags & (DSL_PROP_GET_LOCAL | + DSL_PROP_GET_RECEIVED)) + break; + flags |= DSL_PROP_GET_INHERITING; + } + dsl_dir_name(dd, setpoint); + err = dsl_prop_get_all_impl(mos, + dsl_dir_phys(dd)->dd_props_zapobj, setpoint, flags, *nvp); + if (err) + break; + } +out: + if (err) { + nvlist_free(*nvp); + *nvp = NULL; + } + return (err); +} + +boolean_t +dsl_prop_get_hasrecvd(const char *dsname) +{ + uint64_t dummy; + + return (0 == + dsl_prop_get_integer(dsname, ZPROP_HAS_RECVD, &dummy, NULL)); +} + +static int +dsl_prop_set_hasrecvd_impl(const char *dsname, zprop_source_t source) +{ + uint64_t version; + spa_t *spa; + int error = 0; + + VERIFY0(spa_open(dsname, &spa, FTAG)); + version = spa_version(spa); + spa_close(spa, FTAG); + + if (version >= SPA_VERSION_RECVD_PROPS) + error = dsl_prop_set_int(dsname, ZPROP_HAS_RECVD, source, 0); + return (error); +} + +/* + * Call after successfully receiving properties to ensure that only the first + * receive on or after SPA_VERSION_RECVD_PROPS blows away local properties. + */ +int +dsl_prop_set_hasrecvd(const char *dsname) +{ + int error = 0; + if (!dsl_prop_get_hasrecvd(dsname)) + error = dsl_prop_set_hasrecvd_impl(dsname, ZPROP_SRC_LOCAL); + return (error); +} + +void +dsl_prop_unset_hasrecvd(const char *dsname) +{ + VERIFY0(dsl_prop_set_hasrecvd_impl(dsname, ZPROP_SRC_NONE)); +} + +int +dsl_prop_get_all(objset_t *os, nvlist_t **nvp) +{ + return (dsl_prop_get_all_ds(os->os_dsl_dataset, nvp, 0)); +} + +int +dsl_prop_get_received(const char *dsname, nvlist_t **nvp) +{ + objset_t *os; + int error; + + /* + * Received properties are not distinguishable from local properties + * until the dataset has received properties on or after + * SPA_VERSION_RECVD_PROPS. + */ + dsl_prop_getflags_t flags = (dsl_prop_get_hasrecvd(dsname) ? + DSL_PROP_GET_RECEIVED : DSL_PROP_GET_LOCAL); + + error = dmu_objset_hold(dsname, FTAG, &os); + if (error != 0) + return (error); + error = dsl_prop_get_all_ds(os->os_dsl_dataset, nvp, flags); + dmu_objset_rele(os, FTAG); + return (error); +} + +void +dsl_prop_nvlist_add_uint64(nvlist_t *nv, zfs_prop_t prop, uint64_t value) +{ + nvlist_t *propval; + const char *propname = zfs_prop_to_name(prop); + uint64_t default_value; + + if (nvlist_lookup_nvlist(nv, propname, &propval) == 0) { + VERIFY(nvlist_add_uint64(propval, ZPROP_VALUE, value) == 0); + return; + } + + VERIFY(nvlist_alloc(&propval, NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_uint64(propval, ZPROP_VALUE, value) == 0); + /* Indicate the default source if we can. */ + if (dodefault(prop, 8, 1, &default_value) == 0 && + value == default_value) { + VERIFY(nvlist_add_string(propval, ZPROP_SOURCE, "") == 0); + } + VERIFY(nvlist_add_nvlist(nv, propname, propval) == 0); + nvlist_free(propval); +} + +void +dsl_prop_nvlist_add_string(nvlist_t *nv, zfs_prop_t prop, const char *value) +{ + nvlist_t *propval; + const char *propname = zfs_prop_to_name(prop); + + if (nvlist_lookup_nvlist(nv, propname, &propval) == 0) { + VERIFY(nvlist_add_string(propval, ZPROP_VALUE, value) == 0); + return; + } + + VERIFY(nvlist_alloc(&propval, NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_string(propval, ZPROP_VALUE, value) == 0); + VERIFY(nvlist_add_nvlist(nv, propname, propval) == 0); + nvlist_free(propval); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_prop_register); +EXPORT_SYMBOL(dsl_prop_unregister); +EXPORT_SYMBOL(dsl_prop_unregister_all); +EXPORT_SYMBOL(dsl_prop_get); +EXPORT_SYMBOL(dsl_prop_get_integer); +EXPORT_SYMBOL(dsl_prop_get_all); +EXPORT_SYMBOL(dsl_prop_get_received); +EXPORT_SYMBOL(dsl_prop_get_ds); +EXPORT_SYMBOL(dsl_prop_get_int_ds); +EXPORT_SYMBOL(dsl_prop_get_dd); +EXPORT_SYMBOL(dsl_props_set); +EXPORT_SYMBOL(dsl_prop_set_int); +EXPORT_SYMBOL(dsl_prop_set_string); +EXPORT_SYMBOL(dsl_prop_inherit); +EXPORT_SYMBOL(dsl_prop_predict); +EXPORT_SYMBOL(dsl_prop_nvlist_add_uint64); +EXPORT_SYMBOL(dsl_prop_nvlist_add_string); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_scan.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_scan.c @@ -0,0 +1,2134 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + * Copyright 2016 Gary Mills + * Copyright (c) 2017 Datto Inc. + * Copyright 2017 Joyent, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#endif + +typedef int (scan_cb_t)(dsl_pool_t *, const blkptr_t *, + const zbookmark_phys_t *); + +static scan_cb_t dsl_scan_scrub_cb; +static void dsl_scan_cancel_sync(void *, dmu_tx_t *); +static void dsl_scan_sync_state(dsl_scan_t *, dmu_tx_t *); +static boolean_t dsl_scan_restarting(dsl_scan_t *, dmu_tx_t *); + +int zfs_top_maxinflight = 32; /* maximum I/Os per top-level */ +int zfs_resilver_delay = 2; /* number of ticks to delay resilver */ +int zfs_scrub_delay = 4; /* number of ticks to delay scrub */ +int zfs_scan_idle = 50; /* idle window in clock ticks */ + +int zfs_scan_min_time_ms = 1000; /* min millisecs to scrub per txg */ +int zfs_free_min_time_ms = 1000; /* min millisecs to free per txg */ +int zfs_resilver_min_time_ms = 3000; /* min millisecs to resilver per txg */ +int zfs_no_scrub_io = B_FALSE; /* set to disable scrub i/o */ +int zfs_no_scrub_prefetch = B_FALSE; /* set to disable scrub prefetch */ +enum ddt_class zfs_scrub_ddt_class_max = DDT_CLASS_DUPLICATE; +int dsl_scan_delay_completion = B_FALSE; /* set to delay scan completion */ +/* max number of blocks to free in a single TXG */ +unsigned long zfs_free_max_blocks = 100000; + +#define DSL_SCAN_IS_SCRUB_RESILVER(scn) \ + ((scn)->scn_phys.scn_func == POOL_SCAN_SCRUB || \ + (scn)->scn_phys.scn_func == POOL_SCAN_RESILVER) + +/* + * Enable/disable the processing of the free_bpobj object. + */ +int zfs_free_bpobj_enabled = 1; + +/* the order has to match pool_scan_type */ +static scan_cb_t *scan_funcs[POOL_SCAN_FUNCS] = { + NULL, + dsl_scan_scrub_cb, /* POOL_SCAN_SCRUB */ + dsl_scan_scrub_cb, /* POOL_SCAN_RESILVER */ +}; + +int +dsl_scan_init(dsl_pool_t *dp, uint64_t txg) +{ + int err; + dsl_scan_t *scn; + spa_t *spa = dp->dp_spa; + uint64_t f; + + scn = dp->dp_scan = kmem_zalloc(sizeof (dsl_scan_t), KM_SLEEP); + scn->scn_dp = dp; + + /* + * It's possible that we're resuming a scan after a reboot so + * make sure that the scan_async_destroying flag is initialized + * appropriately. + */ + ASSERT(!scn->scn_async_destroying); + scn->scn_async_destroying = spa_feature_is_active(dp->dp_spa, + SPA_FEATURE_ASYNC_DESTROY); + + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + "scrub_func", sizeof (uint64_t), 1, &f); + if (err == 0) { + /* + * There was an old-style scrub in progress. Restart a + * new-style scrub from the beginning. + */ + scn->scn_restart_txg = txg; + zfs_dbgmsg("old-style scrub was in progress; " + "restarting new-style scrub in txg %llu", + scn->scn_restart_txg); + + /* + * Load the queue obj from the old location so that it + * can be freed by dsl_scan_done(). + */ + (void) zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + "scrub_queue", sizeof (uint64_t), 1, + &scn->scn_phys.scn_queue_obj); + } else { + err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_SCAN, sizeof (uint64_t), SCAN_PHYS_NUMINTS, + &scn->scn_phys); + /* + * Detect if the pool contains the signature of #2094. If it + * does properly update the scn->scn_phys structure and notify + * the administrator by setting an errata for the pool. + */ + if (err == EOVERFLOW) { + uint64_t zaptmp[SCAN_PHYS_NUMINTS + 1]; + VERIFY3S(SCAN_PHYS_NUMINTS, ==, 24); + VERIFY3S(offsetof(dsl_scan_phys_t, scn_flags), ==, + (23 * sizeof (uint64_t))); + + err = zap_lookup(dp->dp_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_SCAN, + sizeof (uint64_t), SCAN_PHYS_NUMINTS + 1, &zaptmp); + if (err == 0) { + uint64_t overflow = zaptmp[SCAN_PHYS_NUMINTS]; + + if (overflow & ~DSL_SCAN_FLAGS_MASK || + scn->scn_async_destroying) { + spa->spa_errata = + ZPOOL_ERRATA_ZOL_2094_ASYNC_DESTROY; + return (EOVERFLOW); + } + + bcopy(zaptmp, &scn->scn_phys, + SCAN_PHYS_NUMINTS * sizeof (uint64_t)); + scn->scn_phys.scn_flags = overflow; + + /* Required scrub already in progress. */ + if (scn->scn_phys.scn_state == DSS_FINISHED || + scn->scn_phys.scn_state == DSS_CANCELED) + spa->spa_errata = + ZPOOL_ERRATA_ZOL_2094_SCRUB; + } + } + + if (err == ENOENT) + return (0); + else if (err) + return (err); + + if (scn->scn_phys.scn_state == DSS_SCANNING && + spa_prev_software_version(dp->dp_spa) < SPA_VERSION_SCAN) { + /* + * A new-type scrub was in progress on an old + * pool, and the pool was accessed by old + * software. Restart from the beginning, since + * the old software may have changed the pool in + * the meantime. + */ + scn->scn_restart_txg = txg; + zfs_dbgmsg("new-style scrub was modified " + "by old software; restarting in txg %llu", + scn->scn_restart_txg); + } + } + + spa_scan_stat_init(spa); + return (0); +} + +void +dsl_scan_fini(dsl_pool_t *dp) +{ + if (dp->dp_scan) { + kmem_free(dp->dp_scan, sizeof (dsl_scan_t)); + dp->dp_scan = NULL; + } +} + +/* ARGSUSED */ +static int +dsl_scan_setup_check(void *arg, dmu_tx_t *tx) +{ + dsl_scan_t *scn = dmu_tx_pool(tx)->dp_scan; + + if (scn->scn_phys.scn_state == DSS_SCANNING) + return (SET_ERROR(EBUSY)); + + return (0); +} + +static void +dsl_scan_setup_sync(void *arg, dmu_tx_t *tx) +{ + dsl_scan_t *scn = dmu_tx_pool(tx)->dp_scan; + pool_scan_func_t *funcp = arg; + dmu_object_type_t ot = 0; + dsl_pool_t *dp = scn->scn_dp; + spa_t *spa = dp->dp_spa; + + ASSERT(scn->scn_phys.scn_state != DSS_SCANNING); + ASSERT(*funcp > POOL_SCAN_NONE && *funcp < POOL_SCAN_FUNCS); + bzero(&scn->scn_phys, sizeof (scn->scn_phys)); + scn->scn_phys.scn_func = *funcp; + scn->scn_phys.scn_state = DSS_SCANNING; + scn->scn_phys.scn_min_txg = 0; + scn->scn_phys.scn_max_txg = tx->tx_txg; + scn->scn_phys.scn_ddt_class_max = DDT_CLASSES - 1; /* the entire DDT */ + scn->scn_phys.scn_start_time = gethrestime_sec(); + scn->scn_phys.scn_errors = 0; + scn->scn_phys.scn_to_examine = spa->spa_root_vdev->vdev_stat.vs_alloc; + scn->scn_restart_txg = 0; + scn->scn_done_txg = 0; + spa_scan_stat_init(spa); + + if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) { + scn->scn_phys.scn_ddt_class_max = zfs_scrub_ddt_class_max; + + /* rewrite all disk labels */ + vdev_config_dirty(spa->spa_root_vdev); + + if (vdev_resilver_needed(spa->spa_root_vdev, + &scn->scn_phys.scn_min_txg, &scn->scn_phys.scn_max_txg)) { + spa_event_notify(spa, NULL, NULL, + ESC_ZFS_RESILVER_START); + } else { + spa_event_notify(spa, NULL, NULL, ESC_ZFS_SCRUB_START); + } + + spa->spa_scrub_started = B_TRUE; + /* + * If this is an incremental scrub, limit the DDT scrub phase + * to just the auto-ditto class (for correctness); the rest + * of the scrub should go faster using top-down pruning. + */ + if (scn->scn_phys.scn_min_txg > TXG_INITIAL) + scn->scn_phys.scn_ddt_class_max = DDT_CLASS_DITTO; + + } + + /* back to the generic stuff */ + + if (dp->dp_blkstats == NULL) { + dp->dp_blkstats = + vmem_alloc(sizeof (zfs_all_blkstats_t), KM_SLEEP); + } + bzero(dp->dp_blkstats, sizeof (zfs_all_blkstats_t)); + + if (spa_version(spa) < SPA_VERSION_DSL_SCRUB) + ot = DMU_OT_ZAP_OTHER; + + scn->scn_phys.scn_queue_obj = zap_create(dp->dp_meta_objset, + ot ? ot : DMU_OT_SCAN_QUEUE, DMU_OT_NONE, 0, tx); + + dsl_scan_sync_state(scn, tx); + + spa_history_log_internal(spa, "scan setup", tx, + "func=%u mintxg=%llu maxtxg=%llu", + *funcp, scn->scn_phys.scn_min_txg, scn->scn_phys.scn_max_txg); +} + +/* ARGSUSED */ +static void +dsl_scan_done(dsl_scan_t *scn, boolean_t complete, dmu_tx_t *tx) +{ + static const char *old_names[] = { + "scrub_bookmark", + "scrub_ddt_bookmark", + "scrub_ddt_class_max", + "scrub_queue", + "scrub_min_txg", + "scrub_max_txg", + "scrub_func", + "scrub_errors", + NULL + }; + + dsl_pool_t *dp = scn->scn_dp; + spa_t *spa = dp->dp_spa; + int i; + + /* Remove any remnants of an old-style scrub. */ + for (i = 0; old_names[i]; i++) { + (void) zap_remove(dp->dp_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, old_names[i], tx); + } + + if (scn->scn_phys.scn_queue_obj != 0) { + VERIFY(0 == dmu_object_free(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, tx)); + scn->scn_phys.scn_queue_obj = 0; + } + + scn->scn_phys.scn_flags &= ~DSF_SCRUB_PAUSED; + + /* + * If we were "restarted" from a stopped state, don't bother + * with anything else. + */ + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + if (complete) + scn->scn_phys.scn_state = DSS_FINISHED; + else + scn->scn_phys.scn_state = DSS_CANCELED; + + if (dsl_scan_restarting(scn, tx)) + spa_history_log_internal(spa, "scan aborted, restarting", tx, + "errors=%llu", spa_get_errlog_size(spa)); + else if (!complete) + spa_history_log_internal(spa, "scan cancelled", tx, + "errors=%llu", spa_get_errlog_size(spa)); + else + spa_history_log_internal(spa, "scan done", tx, + "errors=%llu", spa_get_errlog_size(spa)); + + if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) { + mutex_enter(&spa->spa_scrub_lock); + while (spa->spa_scrub_inflight > 0) { + cv_wait(&spa->spa_scrub_io_cv, + &spa->spa_scrub_lock); + } + mutex_exit(&spa->spa_scrub_lock); + spa->spa_scrub_started = B_FALSE; + spa->spa_scrub_active = B_FALSE; + + /* + * If the scrub/resilver completed, update all DTLs to + * reflect this. Whether it succeeded or not, vacate + * all temporary scrub DTLs. + */ + vdev_dtl_reassess(spa->spa_root_vdev, tx->tx_txg, + complete ? scn->scn_phys.scn_max_txg : 0, B_TRUE); + if (complete) { + spa_event_notify(spa, NULL, NULL, + scn->scn_phys.scn_min_txg ? + ESC_ZFS_RESILVER_FINISH : ESC_ZFS_SCRUB_FINISH); + } + spa_errlog_rotate(spa); + + /* + * We may have finished replacing a device. + * Let the async thread assess this and handle the detach. + */ + spa_async_request(spa, SPA_ASYNC_RESILVER_DONE); + } + + scn->scn_phys.scn_end_time = gethrestime_sec(); + + if (spa->spa_errata == ZPOOL_ERRATA_ZOL_2094_SCRUB) + spa->spa_errata = 0; +} + +/* ARGSUSED */ +static int +dsl_scan_cancel_check(void *arg, dmu_tx_t *tx) +{ + dsl_scan_t *scn = dmu_tx_pool(tx)->dp_scan; + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return (SET_ERROR(ENOENT)); + return (0); +} + +/* ARGSUSED */ +static void +dsl_scan_cancel_sync(void *arg, dmu_tx_t *tx) +{ + dsl_scan_t *scn = dmu_tx_pool(tx)->dp_scan; + + dsl_scan_done(scn, B_FALSE, tx); + dsl_scan_sync_state(scn, tx); +} + +int +dsl_scan_cancel(dsl_pool_t *dp) +{ + return (dsl_sync_task(spa_name(dp->dp_spa), dsl_scan_cancel_check, + dsl_scan_cancel_sync, NULL, 3, ZFS_SPACE_CHECK_RESERVED)); +} + +boolean_t +dsl_scan_is_paused_scrub(const dsl_scan_t *scn) +{ + if (dsl_scan_scrubbing(scn->scn_dp) && + scn->scn_phys.scn_flags & DSF_SCRUB_PAUSED) + return (B_TRUE); + + return (B_FALSE); +} + +static int +dsl_scrub_pause_resume_check(void *arg, dmu_tx_t *tx) +{ + pool_scrub_cmd_t *cmd = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_scan_t *scn = dp->dp_scan; + + if (*cmd == POOL_SCRUB_PAUSE) { + /* can't pause a scrub when there is no in-progress scrub */ + if (!dsl_scan_scrubbing(dp)) + return (SET_ERROR(ENOENT)); + + /* can't pause a paused scrub */ + if (dsl_scan_is_paused_scrub(scn)) + return (SET_ERROR(EBUSY)); + } else if (*cmd != POOL_SCRUB_NORMAL) { + return (SET_ERROR(ENOTSUP)); + } + + return (0); +} + +static void +dsl_scrub_pause_resume_sync(void *arg, dmu_tx_t *tx) +{ + pool_scrub_cmd_t *cmd = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + spa_t *spa = dp->dp_spa; + dsl_scan_t *scn = dp->dp_scan; + + + if (*cmd == POOL_SCRUB_PAUSE) { + /* can't pause a scrub when there is no in-progress scrub */ + spa->spa_scan_pass_scrub_pause = gethrestime_sec(); + scn->scn_phys.scn_flags |= DSF_SCRUB_PAUSED; + dsl_scan_sync_state(scn, tx); + } else { + ASSERT3U(*cmd, ==, POOL_SCRUB_NORMAL); + if (dsl_scan_is_paused_scrub(scn)) { + /* + * We need to keep track of how much time we spend + * paused per pass so that we can adjust the scrub rate + * shown in the output of 'zpool status' + */ + spa->spa_scan_pass_scrub_spent_paused += + gethrestime_sec() - spa->spa_scan_pass_scrub_pause; + spa->spa_scan_pass_scrub_pause = 0; + scn->scn_phys.scn_flags &= ~DSF_SCRUB_PAUSED; + dsl_scan_sync_state(scn, tx); + } + } +} + +/* + * Set scrub pause/resume state if it makes sense to do so + */ +int +dsl_scrub_set_pause_resume(const dsl_pool_t *dp, pool_scrub_cmd_t cmd) +{ + return (dsl_sync_task(spa_name(dp->dp_spa), + dsl_scrub_pause_resume_check, dsl_scrub_pause_resume_sync, &cmd, 3, + ZFS_SPACE_CHECK_RESERVED)); +} + +boolean_t +dsl_scan_scrubbing(const dsl_pool_t *dp) +{ + dsl_scan_t *scn = dp->dp_scan; + + if (scn->scn_phys.scn_state == DSS_SCANNING && + scn->scn_phys.scn_func == POOL_SCAN_SCRUB) + return (B_TRUE); + + return (B_FALSE); +} + +static void dsl_scan_visitbp(blkptr_t *bp, const zbookmark_phys_t *zb, + dnode_phys_t *dnp, dsl_dataset_t *ds, dsl_scan_t *scn, + dmu_objset_type_t ostype, dmu_tx_t *tx); +inline __attribute__((always_inline)) static void dsl_scan_visitdnode( + dsl_scan_t *, dsl_dataset_t *ds, dmu_objset_type_t ostype, + dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx); + +void +dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bp) +{ + zio_free(dp->dp_spa, txg, bp); +} + +void +dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp) +{ + ASSERT(dsl_pool_sync_context(dp)); + zio_nowait(zio_free_sync(pio, dp->dp_spa, txg, bpp, pio->io_flags)); +} + +static uint64_t +dsl_scan_ds_maxtxg(dsl_dataset_t *ds) +{ + uint64_t smt = ds->ds_dir->dd_pool->dp_scan->scn_phys.scn_max_txg; + if (ds->ds_is_snapshot) + return (MIN(smt, dsl_dataset_phys(ds)->ds_creation_txg)); + return (smt); +} + +static void +dsl_scan_sync_state(dsl_scan_t *scn, dmu_tx_t *tx) +{ + VERIFY0(zap_update(scn->scn_dp->dp_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_SCAN, sizeof (uint64_t), SCAN_PHYS_NUMINTS, + &scn->scn_phys, tx)); +} + +extern int zfs_vdev_async_write_active_min_dirty_percent; + +static boolean_t +dsl_scan_check_suspend(dsl_scan_t *scn, const zbookmark_phys_t *zb) +{ + uint64_t elapsed_nanosecs; + int mintime; + int dirty_pct; + + /* we never skip user/group accounting objects */ + if (zb && (int64_t)zb->zb_object < 0) + return (B_FALSE); + + if (scn->scn_suspending) + return (B_TRUE); /* we're already suspending */ + + if (!ZB_IS_ZERO(&scn->scn_phys.scn_bookmark)) + return (B_FALSE); /* we're resuming */ + + /* We only know how to resume from level-0 blocks. */ + if (zb && zb->zb_level != 0) + return (B_FALSE); + + /* + * We suspend if: + * - we have scanned for the maximum time: an entire txg + * timeout (default 5 sec) + * or + * - we have scanned for at least the minimum time (default 1 sec + * for scrub, 3 sec for resilver), and either we have sufficient + * dirty data that we are starting to write more quickly + * (default 30%), or someone is explicitly waiting for this txg + * to complete. + * or + * - the spa is shutting down because this pool is being exported + * or the machine is rebooting. + */ + mintime = (scn->scn_phys.scn_func == POOL_SCAN_RESILVER) ? + zfs_resilver_min_time_ms : zfs_scan_min_time_ms; + elapsed_nanosecs = gethrtime() - scn->scn_sync_start_time; + dirty_pct = scn->scn_dp->dp_dirty_total * 100 / zfs_dirty_data_max; + if (elapsed_nanosecs / NANOSEC >= zfs_txg_timeout || + (NSEC2MSEC(elapsed_nanosecs) > mintime && + (txg_sync_waiting(scn->scn_dp) || + dirty_pct >= zfs_vdev_async_write_active_min_dirty_percent)) || + spa_shutting_down(scn->scn_dp->dp_spa)) { + if (zb) { + dprintf("suspending at bookmark %llx/%llx/%llx/%llx\n", + (longlong_t)zb->zb_objset, + (longlong_t)zb->zb_object, + (longlong_t)zb->zb_level, + (longlong_t)zb->zb_blkid); + scn->scn_phys.scn_bookmark = *zb; + } + dprintf("suspending at DDT bookmark %llx/%llx/%llx/%llx\n", + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_class, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_type, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_checksum, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_cursor); + scn->scn_suspending = B_TRUE; + return (B_TRUE); + } + return (B_FALSE); +} + +typedef struct zil_scan_arg { + dsl_pool_t *zsa_dp; + zil_header_t *zsa_zh; +} zil_scan_arg_t; + +/* ARGSUSED */ +static int +dsl_scan_zil_block(zilog_t *zilog, blkptr_t *bp, void *arg, uint64_t claim_txg) +{ + zil_scan_arg_t *zsa = arg; + dsl_pool_t *dp = zsa->zsa_dp; + dsl_scan_t *scn = dp->dp_scan; + zil_header_t *zh = zsa->zsa_zh; + zbookmark_phys_t zb; + + if (BP_IS_HOLE(bp) || bp->blk_birth <= scn->scn_phys.scn_cur_min_txg) + return (0); + + /* + * One block ("stubby") can be allocated a long time ago; we + * want to visit that one because it has been allocated + * (on-disk) even if it hasn't been claimed (even though for + * scrub there's nothing to do to it). + */ + if (claim_txg == 0 && bp->blk_birth >= spa_first_txg(dp->dp_spa)) + return (0); + + SET_BOOKMARK(&zb, zh->zh_log.blk_cksum.zc_word[ZIL_ZC_OBJSET], + ZB_ZIL_OBJECT, ZB_ZIL_LEVEL, bp->blk_cksum.zc_word[ZIL_ZC_SEQ]); + + VERIFY(0 == scan_funcs[scn->scn_phys.scn_func](dp, bp, &zb)); + return (0); +} + +/* ARGSUSED */ +static int +dsl_scan_zil_record(zilog_t *zilog, lr_t *lrc, void *arg, uint64_t claim_txg) +{ + if (lrc->lrc_txtype == TX_WRITE) { + zil_scan_arg_t *zsa = arg; + dsl_pool_t *dp = zsa->zsa_dp; + dsl_scan_t *scn = dp->dp_scan; + zil_header_t *zh = zsa->zsa_zh; + lr_write_t *lr = (lr_write_t *)lrc; + blkptr_t *bp = &lr->lr_blkptr; + zbookmark_phys_t zb; + + if (BP_IS_HOLE(bp) || + bp->blk_birth <= scn->scn_phys.scn_cur_min_txg) + return (0); + + /* + * birth can be < claim_txg if this record's txg is + * already txg sync'ed (but this log block contains + * other records that are not synced) + */ + if (claim_txg == 0 || bp->blk_birth < claim_txg) + return (0); + + SET_BOOKMARK(&zb, zh->zh_log.blk_cksum.zc_word[ZIL_ZC_OBJSET], + lr->lr_foid, ZB_ZIL_LEVEL, + lr->lr_offset / BP_GET_LSIZE(bp)); + + VERIFY(0 == scan_funcs[scn->scn_phys.scn_func](dp, bp, &zb)); + } + return (0); +} + +static void +dsl_scan_zil(dsl_pool_t *dp, zil_header_t *zh) +{ + uint64_t claim_txg = zh->zh_claim_txg; + zil_scan_arg_t zsa = { dp, zh }; + zilog_t *zilog; + + /* + * We only want to visit blocks that have been claimed but not yet + * replayed (or, in read-only mode, blocks that *would* be claimed). + */ + if (claim_txg == 0 && spa_writeable(dp->dp_spa)) + return; + + zilog = zil_alloc(dp->dp_meta_objset, zh); + + (void) zil_parse(zilog, dsl_scan_zil_block, dsl_scan_zil_record, &zsa, + claim_txg); + + zil_free(zilog); +} + +/* ARGSUSED */ +static void +dsl_scan_prefetch(dsl_scan_t *scn, arc_buf_t *buf, blkptr_t *bp, + uint64_t objset, uint64_t object, uint64_t blkid) +{ + zbookmark_phys_t czb; + arc_flags_t flags = ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH; + + if (zfs_no_scrub_prefetch) + return; + + if (BP_IS_HOLE(bp) || bp->blk_birth <= scn->scn_phys.scn_min_txg || + (BP_GET_LEVEL(bp) == 0 && BP_GET_TYPE(bp) != DMU_OT_DNODE)) + return; + + SET_BOOKMARK(&czb, objset, object, BP_GET_LEVEL(bp), blkid); + + (void) arc_read(scn->scn_zio_root, scn->scn_dp->dp_spa, bp, + NULL, NULL, ZIO_PRIORITY_ASYNC_READ, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD, &flags, &czb); +} + +static boolean_t +dsl_scan_check_resume(dsl_scan_t *scn, const dnode_phys_t *dnp, + const zbookmark_phys_t *zb) +{ + /* + * We never skip over user/group accounting objects (obj<0) + */ + if (!ZB_IS_ZERO(&scn->scn_phys.scn_bookmark) && + (int64_t)zb->zb_object >= 0) { + /* + * If we already visited this bp & everything below (in + * a prior txg sync), don't bother doing it again. + */ + if (zbookmark_subtree_completed(dnp, zb, + &scn->scn_phys.scn_bookmark)) + return (B_TRUE); + + /* + * If we found the block we're trying to resume from, or + * we went past it to a different object, zero it out to + * indicate that it's OK to start checking for suspending + * again. + */ + if (bcmp(zb, &scn->scn_phys.scn_bookmark, sizeof (*zb)) == 0 || + zb->zb_object > scn->scn_phys.scn_bookmark.zb_object) { + dprintf("resuming at %llx/%llx/%llx/%llx\n", + (longlong_t)zb->zb_objset, + (longlong_t)zb->zb_object, + (longlong_t)zb->zb_level, + (longlong_t)zb->zb_blkid); + bzero(&scn->scn_phys.scn_bookmark, sizeof (*zb)); + } + } + return (B_FALSE); +} + +/* + * Return nonzero on i/o error. + * Return new buf to write out in *bufp. + */ +inline __attribute__((always_inline)) static int +dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype, + dnode_phys_t *dnp, const blkptr_t *bp, + const zbookmark_phys_t *zb, dmu_tx_t *tx) +{ + dsl_pool_t *dp = scn->scn_dp; + int zio_flags = ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD; + int err; + + if (BP_GET_LEVEL(bp) > 0) { + arc_flags_t flags = ARC_FLAG_WAIT; + int i; + blkptr_t *cbp; + int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT; + arc_buf_t *buf; + + err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb); + if (err) { + scn->scn_phys.scn_errors++; + return (err); + } + for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) { + dsl_scan_prefetch(scn, buf, cbp, zb->zb_objset, + zb->zb_object, zb->zb_blkid * epb + i); + } + for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) { + zbookmark_phys_t czb; + + SET_BOOKMARK(&czb, zb->zb_objset, zb->zb_object, + zb->zb_level - 1, + zb->zb_blkid * epb + i); + dsl_scan_visitbp(cbp, &czb, dnp, + ds, scn, ostype, tx); + } + arc_buf_destroy(buf, &buf); + } else if (BP_GET_TYPE(bp) == DMU_OT_DNODE) { + arc_flags_t flags = ARC_FLAG_WAIT; + dnode_phys_t *cdnp; + int i, j; + int epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT; + arc_buf_t *buf; + + err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb); + if (err) { + scn->scn_phys.scn_errors++; + return (err); + } + for (i = 0, cdnp = buf->b_data; i < epb; + i += cdnp->dn_extra_slots + 1, + cdnp += cdnp->dn_extra_slots + 1) { + for (j = 0; j < cdnp->dn_nblkptr; j++) { + blkptr_t *cbp = &cdnp->dn_blkptr[j]; + dsl_scan_prefetch(scn, buf, cbp, + zb->zb_objset, zb->zb_blkid * epb + i, j); + } + } + for (i = 0, cdnp = buf->b_data; i < epb; + i += cdnp->dn_extra_slots + 1, + cdnp += cdnp->dn_extra_slots + 1) { + dsl_scan_visitdnode(scn, ds, ostype, + cdnp, zb->zb_blkid * epb + i, tx); + } + + arc_buf_destroy(buf, &buf); + } else if (BP_GET_TYPE(bp) == DMU_OT_OBJSET) { + arc_flags_t flags = ARC_FLAG_WAIT; + objset_phys_t *osp; + arc_buf_t *buf; + + err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf, + ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb); + if (err) { + scn->scn_phys.scn_errors++; + return (err); + } + + osp = buf->b_data; + + dsl_scan_visitdnode(scn, ds, osp->os_type, + &osp->os_meta_dnode, DMU_META_DNODE_OBJECT, tx); + + if (OBJSET_BUF_HAS_USERUSED(buf)) { + /* + * We also always visit user/group accounting + * objects, and never skip them, even if we are + * suspending. This is necessary so that the space + * deltas from this txg get integrated. + */ + dsl_scan_visitdnode(scn, ds, osp->os_type, + &osp->os_groupused_dnode, + DMU_GROUPUSED_OBJECT, tx); + dsl_scan_visitdnode(scn, ds, osp->os_type, + &osp->os_userused_dnode, + DMU_USERUSED_OBJECT, tx); + } + arc_buf_destroy(buf, &buf); + } + + return (0); +} + +inline __attribute__((always_inline)) static void +dsl_scan_visitdnode(dsl_scan_t *scn, dsl_dataset_t *ds, + dmu_objset_type_t ostype, dnode_phys_t *dnp, + uint64_t object, dmu_tx_t *tx) +{ + int j; + + for (j = 0; j < dnp->dn_nblkptr; j++) { + zbookmark_phys_t czb; + + SET_BOOKMARK(&czb, ds ? ds->ds_object : 0, object, + dnp->dn_nlevels - 1, j); + dsl_scan_visitbp(&dnp->dn_blkptr[j], + &czb, dnp, ds, scn, ostype, tx); + } + + if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) { + zbookmark_phys_t czb; + SET_BOOKMARK(&czb, ds ? ds->ds_object : 0, object, + 0, DMU_SPILL_BLKID); + dsl_scan_visitbp(DN_SPILL_BLKPTR(dnp), + &czb, dnp, ds, scn, ostype, tx); + } +} + +/* + * The arguments are in this order because mdb can only print the + * first 5; we want them to be useful. + */ +static void +dsl_scan_visitbp(blkptr_t *bp, const zbookmark_phys_t *zb, + dnode_phys_t *dnp, dsl_dataset_t *ds, dsl_scan_t *scn, + dmu_objset_type_t ostype, dmu_tx_t *tx) +{ + dsl_pool_t *dp = scn->scn_dp; + blkptr_t *bp_toread; + + bp_toread = kmem_alloc(sizeof (blkptr_t), KM_SLEEP); + *bp_toread = *bp; + + /* ASSERT(pbuf == NULL || arc_released(pbuf)); */ + + if (dsl_scan_check_suspend(scn, zb)) + goto out; + + if (dsl_scan_check_resume(scn, dnp, zb)) + goto out; + + if (BP_IS_HOLE(bp)) + goto out; + + scn->scn_visited_this_txg++; + + /* + * This debugging is commented out to conserve stack space. This + * function is called recursively and the debugging addes several + * bytes to the stack for each call. It can be commented back in + * if required to debug an issue in dsl_scan_visitbp(). + * + * dprintf_bp(bp, + * "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx bp=%p", + * ds, ds ? ds->ds_object : 0, + * zb->zb_objset, zb->zb_object, zb->zb_level, zb->zb_blkid, + * bp); + */ + + if (bp->blk_birth <= scn->scn_phys.scn_cur_min_txg) + goto out; + + if (dsl_scan_recurse(scn, ds, ostype, dnp, bp_toread, zb, tx) != 0) + goto out; + + /* + * If dsl_scan_ddt() has already visited this block, it will have + * already done any translations or scrubbing, so don't call the + * callback again. + */ + if (ddt_class_contains(dp->dp_spa, + scn->scn_phys.scn_ddt_class_max, bp)) { + goto out; + } + + /* + * If this block is from the future (after cur_max_txg), then we + * are doing this on behalf of a deleted snapshot, and we will + * revisit the future block on the next pass of this dataset. + * Don't scan it now unless we need to because something + * under it was modified. + */ + if (BP_PHYSICAL_BIRTH(bp) <= scn->scn_phys.scn_cur_max_txg) { + scan_funcs[scn->scn_phys.scn_func](dp, bp, zb); + } +out: + kmem_free(bp_toread, sizeof (blkptr_t)); +} + +static void +dsl_scan_visit_rootbp(dsl_scan_t *scn, dsl_dataset_t *ds, blkptr_t *bp, + dmu_tx_t *tx) +{ + zbookmark_phys_t zb; + + SET_BOOKMARK(&zb, ds ? ds->ds_object : DMU_META_OBJSET, + ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); + dsl_scan_visitbp(bp, &zb, NULL, + ds, scn, DMU_OST_NONE, tx); + + dprintf_ds(ds, "finished scan%s", ""); +} + +void +dsl_scan_ds_destroyed(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + dsl_scan_t *scn = dp->dp_scan; + uint64_t mintxg; + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + if (scn->scn_phys.scn_bookmark.zb_objset == ds->ds_object) { + if (ds->ds_is_snapshot) { + /* + * Note: + * - scn_cur_{min,max}_txg stays the same. + * - Setting the flag is not really necessary if + * scn_cur_max_txg == scn_max_txg, because there + * is nothing after this snapshot that we care + * about. However, we set it anyway and then + * ignore it when we retraverse it in + * dsl_scan_visitds(). + */ + scn->scn_phys.scn_bookmark.zb_objset = + dsl_dataset_phys(ds)->ds_next_snap_obj; + zfs_dbgmsg("destroying ds %llu; currently traversing; " + "reset zb_objset to %llu", + (u_longlong_t)ds->ds_object, + (u_longlong_t)dsl_dataset_phys(ds)-> + ds_next_snap_obj); + scn->scn_phys.scn_flags |= DSF_VISIT_DS_AGAIN; + } else { + SET_BOOKMARK(&scn->scn_phys.scn_bookmark, + ZB_DESTROYED_OBJSET, 0, 0, 0); + zfs_dbgmsg("destroying ds %llu; currently traversing; " + "reset bookmark to -1,0,0,0", + (u_longlong_t)ds->ds_object); + } + } else if (zap_lookup_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, &mintxg) == 0) { + ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, tx)); + if (ds->ds_is_snapshot) { + /* + * We keep the same mintxg; it could be > + * ds_creation_txg if the previous snapshot was + * deleted too. + */ + VERIFY(zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, + dsl_dataset_phys(ds)->ds_next_snap_obj, + mintxg, tx) == 0); + zfs_dbgmsg("destroying ds %llu; in queue; " + "replacing with %llu", + (u_longlong_t)ds->ds_object, + (u_longlong_t)dsl_dataset_phys(ds)-> + ds_next_snap_obj); + } else { + zfs_dbgmsg("destroying ds %llu; in queue; removing", + (u_longlong_t)ds->ds_object); + } + } + + /* + * dsl_scan_sync() should be called after this, and should sync + * out our changed state, but just to be safe, do it here. + */ + dsl_scan_sync_state(scn, tx); +} + +void +dsl_scan_ds_snapshotted(dsl_dataset_t *ds, dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + dsl_scan_t *scn = dp->dp_scan; + uint64_t mintxg; + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + ASSERT(dsl_dataset_phys(ds)->ds_prev_snap_obj != 0); + + if (scn->scn_phys.scn_bookmark.zb_objset == ds->ds_object) { + scn->scn_phys.scn_bookmark.zb_objset = + dsl_dataset_phys(ds)->ds_prev_snap_obj; + zfs_dbgmsg("snapshotting ds %llu; currently traversing; " + "reset zb_objset to %llu", + (u_longlong_t)ds->ds_object, + (u_longlong_t)dsl_dataset_phys(ds)->ds_prev_snap_obj); + } else if (zap_lookup_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, &mintxg) == 0) { + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, tx)); + VERIFY(zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, + dsl_dataset_phys(ds)->ds_prev_snap_obj, mintxg, tx) == 0); + zfs_dbgmsg("snapshotting ds %llu; in queue; " + "replacing with %llu", + (u_longlong_t)ds->ds_object, + (u_longlong_t)dsl_dataset_phys(ds)->ds_prev_snap_obj); + } + dsl_scan_sync_state(scn, tx); +} + +void +dsl_scan_ds_clone_swapped(dsl_dataset_t *ds1, dsl_dataset_t *ds2, dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds1->ds_dir->dd_pool; + dsl_scan_t *scn = dp->dp_scan; + uint64_t mintxg; + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + if (scn->scn_phys.scn_bookmark.zb_objset == ds1->ds_object) { + scn->scn_phys.scn_bookmark.zb_objset = ds2->ds_object; + zfs_dbgmsg("clone_swap ds %llu; currently traversing; " + "reset zb_objset to %llu", + (u_longlong_t)ds1->ds_object, + (u_longlong_t)ds2->ds_object); + } else if (scn->scn_phys.scn_bookmark.zb_objset == ds2->ds_object) { + scn->scn_phys.scn_bookmark.zb_objset = ds1->ds_object; + zfs_dbgmsg("clone_swap ds %llu; currently traversing; " + "reset zb_objset to %llu", + (u_longlong_t)ds2->ds_object, + (u_longlong_t)ds1->ds_object); + } + + if (zap_lookup_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, + ds1->ds_object, &mintxg) == 0) { + int err; + + ASSERT3U(mintxg, ==, dsl_dataset_phys(ds1)->ds_prev_snap_txg); + ASSERT3U(mintxg, ==, dsl_dataset_phys(ds2)->ds_prev_snap_txg); + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds1->ds_object, tx)); + err = zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds2->ds_object, mintxg, tx); + VERIFY(err == 0 || err == EEXIST); + if (err == EEXIST) { + /* Both were there to begin with */ + VERIFY(0 == zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, + ds1->ds_object, mintxg, tx)); + } + zfs_dbgmsg("clone_swap ds %llu; in queue; " + "replacing with %llu", + (u_longlong_t)ds1->ds_object, + (u_longlong_t)ds2->ds_object); + } else if (zap_lookup_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds2->ds_object, &mintxg) == 0) { + ASSERT3U(mintxg, ==, dsl_dataset_phys(ds1)->ds_prev_snap_txg); + ASSERT3U(mintxg, ==, dsl_dataset_phys(ds2)->ds_prev_snap_txg); + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds2->ds_object, tx)); + VERIFY(0 == zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds1->ds_object, mintxg, tx)); + zfs_dbgmsg("clone_swap ds %llu; in queue; " + "replacing with %llu", + (u_longlong_t)ds2->ds_object, + (u_longlong_t)ds1->ds_object); + } + + dsl_scan_sync_state(scn, tx); +} + +struct enqueue_clones_arg { + dmu_tx_t *tx; + uint64_t originobj; +}; + +/* ARGSUSED */ +static int +enqueue_clones_cb(dsl_pool_t *dp, dsl_dataset_t *hds, void *arg) +{ + struct enqueue_clones_arg *eca = arg; + dsl_dataset_t *ds; + int err; + dsl_scan_t *scn = dp->dp_scan; + + if (dsl_dir_phys(hds->ds_dir)->dd_origin_obj != eca->originobj) + return (0); + + err = dsl_dataset_hold_obj(dp, hds->ds_object, FTAG, &ds); + if (err) + return (err); + + while (dsl_dataset_phys(ds)->ds_prev_snap_obj != eca->originobj) { + dsl_dataset_t *prev; + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &prev); + + dsl_dataset_rele(ds, FTAG); + if (err) + return (err); + ds = prev; + } + VERIFY(zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, + dsl_dataset_phys(ds)->ds_prev_snap_txg, eca->tx) == 0); + dsl_dataset_rele(ds, FTAG); + return (0); +} + +static void +dsl_scan_visitds(dsl_scan_t *scn, uint64_t dsobj, dmu_tx_t *tx) +{ + dsl_pool_t *dp = scn->scn_dp; + dsl_dataset_t *ds; + objset_t *os; + char *dsname; + + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + + if (scn->scn_phys.scn_cur_min_txg >= + scn->scn_phys.scn_max_txg) { + /* + * This can happen if this snapshot was created after the + * scan started, and we already completed a previous snapshot + * that was created after the scan started. This snapshot + * only references blocks with: + * + * birth < our ds_creation_txg + * cur_min_txg is no less than ds_creation_txg. + * We have already visited these blocks. + * or + * birth > scn_max_txg + * The scan requested not to visit these blocks. + * + * Subsequent snapshots (and clones) can reference our + * blocks, or blocks with even higher birth times. + * Therefore we do not need to visit them either, + * so we do not add them to the work queue. + * + * Note that checking for cur_min_txg >= cur_max_txg + * is not sufficient, because in that case we may need to + * visit subsequent snapshots. This happens when min_txg > 0, + * which raises cur_min_txg. In this case we will visit + * this dataset but skip all of its blocks, because the + * rootbp's birth time is < cur_min_txg. Then we will + * add the next snapshots/clones to the work queue. + */ + char *dsname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + dsl_dataset_name(ds, dsname); + zfs_dbgmsg("scanning dataset %llu (%s) is unnecessary because " + "cur_min_txg (%llu) >= max_txg (%llu)", + dsobj, dsname, + scn->scn_phys.scn_cur_min_txg, + scn->scn_phys.scn_max_txg); + kmem_free(dsname, MAXNAMELEN); + + goto out; + } + + if (dmu_objset_from_ds(ds, &os)) + goto out; + + /* + * Only the ZIL in the head (non-snapshot) is valid. Even though + * snapshots can have ZIL block pointers (which may be the same + * BP as in the head), they must be ignored. So we traverse the + * ZIL here, rather than in scan_recurse(), because the regular + * snapshot block-sharing rules don't apply to it. + */ + if (DSL_SCAN_IS_SCRUB_RESILVER(scn) && !ds->ds_is_snapshot) + dsl_scan_zil(dp, &os->os_zil_header); + + /* + * Iterate over the bps in this ds. + */ + dmu_buf_will_dirty(ds->ds_dbuf, tx); + rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); + dsl_scan_visit_rootbp(scn, ds, &dsl_dataset_phys(ds)->ds_bp, tx); + rrw_exit(&ds->ds_bp_rwlock, FTAG); + + dsname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + dsl_dataset_name(ds, dsname); + zfs_dbgmsg("scanned dataset %llu (%s) with min=%llu max=%llu; " + "suspending=%u", + (longlong_t)dsobj, dsname, + (longlong_t)scn->scn_phys.scn_cur_min_txg, + (longlong_t)scn->scn_phys.scn_cur_max_txg, + (int)scn->scn_suspending); + kmem_free(dsname, ZFS_MAX_DATASET_NAME_LEN); + + if (scn->scn_suspending) + goto out; + + /* + * We've finished this pass over this dataset. + */ + + /* + * If we did not completely visit this dataset, do another pass. + */ + if (scn->scn_phys.scn_flags & DSF_VISIT_DS_AGAIN) { + zfs_dbgmsg("incomplete pass; visiting again"); + scn->scn_phys.scn_flags &= ~DSF_VISIT_DS_AGAIN; + VERIFY(zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, ds->ds_object, + scn->scn_phys.scn_cur_max_txg, tx) == 0); + goto out; + } + + /* + * Add descendent datasets to work queue. + */ + if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0) { + VERIFY(zap_add_int_key(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, + dsl_dataset_phys(ds)->ds_next_snap_obj, + dsl_dataset_phys(ds)->ds_creation_txg, tx) == 0); + } + if (dsl_dataset_phys(ds)->ds_num_children > 1) { + boolean_t usenext = B_FALSE; + if (dsl_dataset_phys(ds)->ds_next_clones_obj != 0) { + uint64_t count; + /* + * A bug in a previous version of the code could + * cause upgrade_clones_cb() to not set + * ds_next_snap_obj when it should, leading to a + * missing entry. Therefore we can only use the + * next_clones_obj when its count is correct. + */ + int err = zap_count(dp->dp_meta_objset, + dsl_dataset_phys(ds)->ds_next_clones_obj, &count); + if (err == 0 && + count == dsl_dataset_phys(ds)->ds_num_children - 1) + usenext = B_TRUE; + } + + if (usenext) { + VERIFY0(zap_join_key(dp->dp_meta_objset, + dsl_dataset_phys(ds)->ds_next_clones_obj, + scn->scn_phys.scn_queue_obj, + dsl_dataset_phys(ds)->ds_creation_txg, tx)); + } else { + struct enqueue_clones_arg eca; + eca.tx = tx; + eca.originobj = ds->ds_object; + + VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + enqueue_clones_cb, &eca, DS_FIND_CHILDREN)); + } + } + +out: + dsl_dataset_rele(ds, FTAG); +} + +/* ARGSUSED */ +static int +enqueue_cb(dsl_pool_t *dp, dsl_dataset_t *hds, void *arg) +{ + dmu_tx_t *tx = arg; + dsl_dataset_t *ds; + int err; + dsl_scan_t *scn = dp->dp_scan; + + err = dsl_dataset_hold_obj(dp, hds->ds_object, FTAG, &ds); + if (err) + return (err); + + while (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { + dsl_dataset_t *prev; + err = dsl_dataset_hold_obj(dp, + dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &prev); + if (err) { + dsl_dataset_rele(ds, FTAG); + return (err); + } + + /* + * If this is a clone, we don't need to worry about it for now. + */ + if (dsl_dataset_phys(prev)->ds_next_snap_obj != ds->ds_object) { + dsl_dataset_rele(ds, FTAG); + dsl_dataset_rele(prev, FTAG); + return (0); + } + dsl_dataset_rele(ds, FTAG); + ds = prev; + } + + VERIFY(zap_add_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, + ds->ds_object, dsl_dataset_phys(ds)->ds_prev_snap_txg, tx) == 0); + dsl_dataset_rele(ds, FTAG); + return (0); +} + +/* + * Scrub/dedup interaction. + * + * If there are N references to a deduped block, we don't want to scrub it + * N times -- ideally, we should scrub it exactly once. + * + * We leverage the fact that the dde's replication class (enum ddt_class) + * is ordered from highest replication class (DDT_CLASS_DITTO) to lowest + * (DDT_CLASS_UNIQUE) so that we may walk the DDT in that order. + * + * To prevent excess scrubbing, the scrub begins by walking the DDT + * to find all blocks with refcnt > 1, and scrubs each of these once. + * Since there are two replication classes which contain blocks with + * refcnt > 1, we scrub the highest replication class (DDT_CLASS_DITTO) first. + * Finally the top-down scrub begins, only visiting blocks with refcnt == 1. + * + * There would be nothing more to say if a block's refcnt couldn't change + * during a scrub, but of course it can so we must account for changes + * in a block's replication class. + * + * Here's an example of what can occur: + * + * If a block has refcnt > 1 during the DDT scrub phase, but has refcnt == 1 + * when visited during the top-down scrub phase, it will be scrubbed twice. + * This negates our scrub optimization, but is otherwise harmless. + * + * If a block has refcnt == 1 during the DDT scrub phase, but has refcnt > 1 + * on each visit during the top-down scrub phase, it will never be scrubbed. + * To catch this, ddt_sync_entry() notifies the scrub code whenever a block's + * reference class transitions to a higher level (i.e DDT_CLASS_UNIQUE to + * DDT_CLASS_DUPLICATE); if it transitions from refcnt == 1 to refcnt > 1 + * while a scrub is in progress, it scrubs the block right then. + */ +static void +dsl_scan_ddt(dsl_scan_t *scn, dmu_tx_t *tx) +{ + ddt_bookmark_t *ddb = &scn->scn_phys.scn_ddt_bookmark; + ddt_entry_t dde; + int error; + uint64_t n = 0; + + bzero(&dde, sizeof (ddt_entry_t)); + + while ((error = ddt_walk(scn->scn_dp->dp_spa, ddb, &dde)) == 0) { + ddt_t *ddt; + + if (ddb->ddb_class > scn->scn_phys.scn_ddt_class_max) + break; + dprintf("visiting ddb=%llu/%llu/%llu/%llx\n", + (longlong_t)ddb->ddb_class, + (longlong_t)ddb->ddb_type, + (longlong_t)ddb->ddb_checksum, + (longlong_t)ddb->ddb_cursor); + + /* There should be no pending changes to the dedup table */ + ddt = scn->scn_dp->dp_spa->spa_ddt[ddb->ddb_checksum]; + ASSERT(avl_first(&ddt->ddt_tree) == NULL); + + dsl_scan_ddt_entry(scn, ddb->ddb_checksum, &dde, tx); + n++; + + if (dsl_scan_check_suspend(scn, NULL)) + break; + } + + zfs_dbgmsg("scanned %llu ddt entries with class_max = %u; " + "suspending=%u", (longlong_t)n, + (int)scn->scn_phys.scn_ddt_class_max, (int)scn->scn_suspending); + + ASSERT(error == 0 || error == ENOENT); + ASSERT(error != ENOENT || + ddb->ddb_class > scn->scn_phys.scn_ddt_class_max); +} + +/* ARGSUSED */ +void +dsl_scan_ddt_entry(dsl_scan_t *scn, enum zio_checksum checksum, + ddt_entry_t *dde, dmu_tx_t *tx) +{ + const ddt_key_t *ddk = &dde->dde_key; + ddt_phys_t *ddp = dde->dde_phys; + blkptr_t bp; + zbookmark_phys_t zb = { 0 }; + int p; + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) { + if (ddp->ddp_phys_birth == 0 || + ddp->ddp_phys_birth > scn->scn_phys.scn_max_txg) + continue; + ddt_bp_create(checksum, ddk, ddp, &bp); + + scn->scn_visited_this_txg++; + scan_funcs[scn->scn_phys.scn_func](scn->scn_dp, &bp, &zb); + } +} + +static void +dsl_scan_visit(dsl_scan_t *scn, dmu_tx_t *tx) +{ + dsl_pool_t *dp = scn->scn_dp; + zap_cursor_t *zc; + zap_attribute_t *za; + + if (scn->scn_phys.scn_ddt_bookmark.ddb_class <= + scn->scn_phys.scn_ddt_class_max) { + scn->scn_phys.scn_cur_min_txg = scn->scn_phys.scn_min_txg; + scn->scn_phys.scn_cur_max_txg = scn->scn_phys.scn_max_txg; + dsl_scan_ddt(scn, tx); + if (scn->scn_suspending) + return; + } + + if (scn->scn_phys.scn_bookmark.zb_objset == DMU_META_OBJSET) { + /* First do the MOS & ORIGIN */ + + scn->scn_phys.scn_cur_min_txg = scn->scn_phys.scn_min_txg; + scn->scn_phys.scn_cur_max_txg = scn->scn_phys.scn_max_txg; + dsl_scan_visit_rootbp(scn, NULL, + &dp->dp_meta_rootbp, tx); + spa_set_rootblkptr(dp->dp_spa, &dp->dp_meta_rootbp); + if (scn->scn_suspending) + return; + + if (spa_version(dp->dp_spa) < SPA_VERSION_DSL_SCRUB) { + VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + enqueue_cb, tx, DS_FIND_CHILDREN)); + } else { + dsl_scan_visitds(scn, + dp->dp_origin_snap->ds_object, tx); + } + ASSERT(!scn->scn_suspending); + } else if (scn->scn_phys.scn_bookmark.zb_objset != + ZB_DESTROYED_OBJSET) { + /* + * If we were suspended, continue from here. Note if the + * ds we were suspended on was deleted, the zb_objset may + * be -1, so we will skip this and find a new objset + * below. + */ + dsl_scan_visitds(scn, scn->scn_phys.scn_bookmark.zb_objset, tx); + if (scn->scn_suspending) + return; + } + + /* + * In case we were suspended right at the end of the ds, zero the + * bookmark so we don't think that we're still trying to resume. + */ + bzero(&scn->scn_phys.scn_bookmark, sizeof (zbookmark_phys_t)); + zc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + + /* keep pulling things out of the zap-object-as-queue */ + while (zap_cursor_init(zc, dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj), + zap_cursor_retrieve(zc, za) == 0) { + dsl_dataset_t *ds; + uint64_t dsobj; + + dsobj = zfs_strtonum(za->za_name, NULL); + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, + scn->scn_phys.scn_queue_obj, dsobj, tx)); + + /* Set up min/max txg */ + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + if (za->za_first_integer != 0) { + scn->scn_phys.scn_cur_min_txg = + MAX(scn->scn_phys.scn_min_txg, + za->za_first_integer); + } else { + scn->scn_phys.scn_cur_min_txg = + MAX(scn->scn_phys.scn_min_txg, + dsl_dataset_phys(ds)->ds_prev_snap_txg); + } + scn->scn_phys.scn_cur_max_txg = dsl_scan_ds_maxtxg(ds); + dsl_dataset_rele(ds, FTAG); + + dsl_scan_visitds(scn, dsobj, tx); + zap_cursor_fini(zc); + if (scn->scn_suspending) + goto out; + } + zap_cursor_fini(zc); +out: + kmem_free(za, sizeof (zap_attribute_t)); + kmem_free(zc, sizeof (zap_cursor_t)); +} + +static boolean_t +dsl_scan_free_should_suspend(dsl_scan_t *scn) +{ + uint64_t elapsed_nanosecs; + + if (zfs_recover) + return (B_FALSE); + + if (scn->scn_visited_this_txg >= zfs_free_max_blocks) + return (B_TRUE); + + elapsed_nanosecs = gethrtime() - scn->scn_sync_start_time; + return (elapsed_nanosecs / NANOSEC > zfs_txg_timeout || + (NSEC2MSEC(elapsed_nanosecs) > zfs_free_min_time_ms && + txg_sync_waiting(scn->scn_dp)) || + spa_shutting_down(scn->scn_dp->dp_spa)); +} + +static int +dsl_scan_free_block_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + dsl_scan_t *scn = arg; + + if (!scn->scn_is_bptree || + (BP_GET_LEVEL(bp) == 0 && BP_GET_TYPE(bp) != DMU_OT_OBJSET)) { + if (dsl_scan_free_should_suspend(scn)) + return (SET_ERROR(ERESTART)); + } + + zio_nowait(zio_free_sync(scn->scn_zio_root, scn->scn_dp->dp_spa, + dmu_tx_get_txg(tx), bp, 0)); + dsl_dir_diduse_space(tx->tx_pool->dp_free_dir, DD_USED_HEAD, + -bp_get_dsize_sync(scn->scn_dp->dp_spa, bp), + -BP_GET_PSIZE(bp), -BP_GET_UCSIZE(bp), tx); + scn->scn_visited_this_txg++; + return (0); +} + +boolean_t +dsl_scan_active(dsl_scan_t *scn) +{ + spa_t *spa = scn->scn_dp->dp_spa; + uint64_t used = 0, comp, uncomp; + + if (spa->spa_load_state != SPA_LOAD_NONE) + return (B_FALSE); + if (spa_shutting_down(spa)) + return (B_FALSE); + if ((scn->scn_phys.scn_state == DSS_SCANNING && + !dsl_scan_is_paused_scrub(scn)) || + (scn->scn_async_destroying && !scn->scn_async_stalled)) + return (B_TRUE); + + if (spa_version(scn->scn_dp->dp_spa) >= SPA_VERSION_DEADLISTS) { + (void) bpobj_space(&scn->scn_dp->dp_free_bpobj, + &used, &comp, &uncomp); + } + return (used != 0); +} + +/* Called whenever a txg syncs. */ +void +dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx) +{ + dsl_scan_t *scn = dp->dp_scan; + spa_t *spa = dp->dp_spa; + int err = 0; + + /* + * Check for scn_restart_txg before checking spa_load_state, so + * that we can restart an old-style scan while the pool is being + * imported (see dsl_scan_init). + */ + if (dsl_scan_restarting(scn, tx)) { + pool_scan_func_t func = POOL_SCAN_SCRUB; + dsl_scan_done(scn, B_FALSE, tx); + if (vdev_resilver_needed(spa->spa_root_vdev, NULL, NULL)) + func = POOL_SCAN_RESILVER; + zfs_dbgmsg("restarting scan func=%u txg=%llu", + func, tx->tx_txg); + dsl_scan_setup_sync(&func, tx); + } + + /* + * Only process scans in sync pass 1. + */ + if (spa_sync_pass(dp->dp_spa) > 1) + return; + + /* + * If the spa is shutting down, then stop scanning. This will + * ensure that the scan does not dirty any new data during the + * shutdown phase. + */ + if (spa_shutting_down(spa)) + return; + + /* + * If the scan is inactive due to a stalled async destroy, try again. + */ + if (!scn->scn_async_stalled && !dsl_scan_active(scn)) + return; + + scn->scn_visited_this_txg = 0; + scn->scn_suspending = B_FALSE; + scn->scn_sync_start_time = gethrtime(); + spa->spa_scrub_active = B_TRUE; + + /* + * First process the async destroys. If we suspend, don't do + * any scrubbing or resilvering. This ensures that there are no + * async destroys while we are scanning, so the scan code doesn't + * have to worry about traversing it. It is also faster to free the + * blocks than to scrub them. + */ + if (zfs_free_bpobj_enabled && + spa_version(dp->dp_spa) >= SPA_VERSION_DEADLISTS) { + scn->scn_is_bptree = B_FALSE; + scn->scn_zio_root = zio_root(dp->dp_spa, NULL, + NULL, ZIO_FLAG_MUSTSUCCEED); + err = bpobj_iterate(&dp->dp_free_bpobj, + dsl_scan_free_block_cb, scn, tx); + VERIFY3U(0, ==, zio_wait(scn->scn_zio_root)); + + if (err != 0 && err != ERESTART) + zfs_panic_recover("error %u from bpobj_iterate()", err); + } + + if (err == 0 && spa_feature_is_active(spa, SPA_FEATURE_ASYNC_DESTROY)) { + ASSERT(scn->scn_async_destroying); + scn->scn_is_bptree = B_TRUE; + scn->scn_zio_root = zio_root(dp->dp_spa, NULL, + NULL, ZIO_FLAG_MUSTSUCCEED); + err = bptree_iterate(dp->dp_meta_objset, + dp->dp_bptree_obj, B_TRUE, dsl_scan_free_block_cb, scn, tx); + VERIFY0(zio_wait(scn->scn_zio_root)); + + if (err == EIO || err == ECKSUM) { + err = 0; + } else if (err != 0 && err != ERESTART) { + zfs_panic_recover("error %u from " + "traverse_dataset_destroyed()", err); + } + + if (bptree_is_empty(dp->dp_meta_objset, dp->dp_bptree_obj)) { + /* finished; deactivate async destroy feature */ + spa_feature_decr(spa, SPA_FEATURE_ASYNC_DESTROY, tx); + ASSERT(!spa_feature_is_active(spa, + SPA_FEATURE_ASYNC_DESTROY)); + VERIFY0(zap_remove(dp->dp_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_BPTREE_OBJ, tx)); + VERIFY0(bptree_free(dp->dp_meta_objset, + dp->dp_bptree_obj, tx)); + dp->dp_bptree_obj = 0; + scn->scn_async_destroying = B_FALSE; + scn->scn_async_stalled = B_FALSE; + } else { + /* + * If we didn't make progress, mark the async + * destroy as stalled, so that we will not initiate + * a spa_sync() on its behalf. Note that we only + * check this if we are not finished, because if the + * bptree had no blocks for us to visit, we can + * finish without "making progress". + */ + scn->scn_async_stalled = + (scn->scn_visited_this_txg == 0); + } + } + if (scn->scn_visited_this_txg) { + zfs_dbgmsg("freed %llu blocks in %llums from " + "free_bpobj/bptree txg %llu; err=%u", + (longlong_t)scn->scn_visited_this_txg, + (longlong_t) + NSEC2MSEC(gethrtime() - scn->scn_sync_start_time), + (longlong_t)tx->tx_txg, err); + scn->scn_visited_this_txg = 0; + + /* + * Write out changes to the DDT that may be required as a + * result of the blocks freed. This ensures that the DDT + * is clean when a scrub/resilver runs. + */ + ddt_sync(spa, tx->tx_txg); + } + if (err != 0) + return; + if (dp->dp_free_dir != NULL && !scn->scn_async_destroying && + zfs_free_leak_on_eio && + (dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes != 0 || + dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes != 0 || + dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes != 0)) { + /* + * We have finished background destroying, but there is still + * some space left in the dp_free_dir. Transfer this leaked + * space to the dp_leak_dir. + */ + if (dp->dp_leak_dir == NULL) { + rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); + (void) dsl_dir_create_sync(dp, dp->dp_root_dir, + LEAK_DIR_NAME, tx); + VERIFY0(dsl_pool_open_special_dir(dp, + LEAK_DIR_NAME, &dp->dp_leak_dir)); + rrw_exit(&dp->dp_config_rwlock, FTAG); + } + dsl_dir_diduse_space(dp->dp_leak_dir, DD_USED_HEAD, + dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes, + dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes, + dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes, tx); + dsl_dir_diduse_space(dp->dp_free_dir, DD_USED_HEAD, + -dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes, + -dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes, + -dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes, tx); + } + if (dp->dp_free_dir != NULL && !scn->scn_async_destroying) { + /* finished; verify that space accounting went to zero */ + ASSERT0(dsl_dir_phys(dp->dp_free_dir)->dd_used_bytes); + ASSERT0(dsl_dir_phys(dp->dp_free_dir)->dd_compressed_bytes); + ASSERT0(dsl_dir_phys(dp->dp_free_dir)->dd_uncompressed_bytes); + } + + if (scn->scn_phys.scn_state != DSS_SCANNING) + return; + + if (scn->scn_done_txg == tx->tx_txg) { + ASSERT(!scn->scn_suspending); + /* finished with scan. */ + zfs_dbgmsg("txg %llu scan complete", tx->tx_txg); + dsl_scan_done(scn, B_TRUE, tx); + ASSERT3U(spa->spa_scrub_inflight, ==, 0); + dsl_scan_sync_state(scn, tx); + return; + } + + if (dsl_scan_is_paused_scrub(scn)) + return; + + if (scn->scn_phys.scn_ddt_bookmark.ddb_class <= + scn->scn_phys.scn_ddt_class_max) { + zfs_dbgmsg("doing scan sync txg %llu; " + "ddt bm=%llu/%llu/%llu/%llx", + (longlong_t)tx->tx_txg, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_class, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_type, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_checksum, + (longlong_t)scn->scn_phys.scn_ddt_bookmark.ddb_cursor); + ASSERT(scn->scn_phys.scn_bookmark.zb_objset == 0); + ASSERT(scn->scn_phys.scn_bookmark.zb_object == 0); + ASSERT(scn->scn_phys.scn_bookmark.zb_level == 0); + ASSERT(scn->scn_phys.scn_bookmark.zb_blkid == 0); + } else { + zfs_dbgmsg("doing scan sync txg %llu; bm=%llu/%llu/%llu/%llu", + (longlong_t)tx->tx_txg, + (longlong_t)scn->scn_phys.scn_bookmark.zb_objset, + (longlong_t)scn->scn_phys.scn_bookmark.zb_object, + (longlong_t)scn->scn_phys.scn_bookmark.zb_level, + (longlong_t)scn->scn_phys.scn_bookmark.zb_blkid); + } + + scn->scn_zio_root = zio_root(dp->dp_spa, NULL, + NULL, ZIO_FLAG_CANFAIL); + dsl_pool_config_enter(dp, FTAG); + dsl_scan_visit(scn, tx); + dsl_pool_config_exit(dp, FTAG); + (void) zio_wait(scn->scn_zio_root); + scn->scn_zio_root = NULL; + + zfs_dbgmsg("visited %llu blocks in %llums", + (longlong_t)scn->scn_visited_this_txg, + (longlong_t)NSEC2MSEC(gethrtime() - scn->scn_sync_start_time)); + + if (!scn->scn_suspending) { + scn->scn_done_txg = tx->tx_txg + 1; + zfs_dbgmsg("txg %llu traversal complete, waiting till txg %llu", + tx->tx_txg, scn->scn_done_txg); + } + + if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) { + mutex_enter(&spa->spa_scrub_lock); + while (spa->spa_scrub_inflight > 0) { + cv_wait(&spa->spa_scrub_io_cv, + &spa->spa_scrub_lock); + } + mutex_exit(&spa->spa_scrub_lock); + } + + dsl_scan_sync_state(scn, tx); +} + +/* + * This will start a new scan, or restart an existing one. + */ +void +dsl_resilver_restart(dsl_pool_t *dp, uint64_t txg) +{ + if (txg == 0) { + dmu_tx_t *tx; + tx = dmu_tx_create_dd(dp->dp_mos_dir); + VERIFY(0 == dmu_tx_assign(tx, TXG_WAIT)); + + txg = dmu_tx_get_txg(tx); + dp->dp_scan->scn_restart_txg = txg; + dmu_tx_commit(tx); + } else { + dp->dp_scan->scn_restart_txg = txg; + } + zfs_dbgmsg("restarting resilver txg=%llu", txg); +} + +boolean_t +dsl_scan_resilvering(dsl_pool_t *dp) +{ + return (dp->dp_scan->scn_phys.scn_state == DSS_SCANNING && + dp->dp_scan->scn_phys.scn_func == POOL_SCAN_RESILVER); +} + +/* + * scrub consumers + */ + +static void +count_block(zfs_all_blkstats_t *zab, const blkptr_t *bp) +{ + int i; + + /* + * If we resume after a reboot, zab will be NULL; don't record + * incomplete stats in that case. + */ + if (zab == NULL) + return; + + for (i = 0; i < 4; i++) { + int l = (i < 2) ? BP_GET_LEVEL(bp) : DN_MAX_LEVELS; + int t = (i & 1) ? BP_GET_TYPE(bp) : DMU_OT_TOTAL; + int equal; + zfs_blkstat_t *zb; + + if (t & DMU_OT_NEWTYPE) + t = DMU_OT_OTHER; + + zb = &zab->zab_type[l][t]; + zb->zb_count++; + zb->zb_asize += BP_GET_ASIZE(bp); + zb->zb_lsize += BP_GET_LSIZE(bp); + zb->zb_psize += BP_GET_PSIZE(bp); + zb->zb_gangs += BP_COUNT_GANG(bp); + + switch (BP_GET_NDVAS(bp)) { + case 2: + if (DVA_GET_VDEV(&bp->blk_dva[0]) == + DVA_GET_VDEV(&bp->blk_dva[1])) + zb->zb_ditto_2_of_2_samevdev++; + break; + case 3: + equal = (DVA_GET_VDEV(&bp->blk_dva[0]) == + DVA_GET_VDEV(&bp->blk_dva[1])) + + (DVA_GET_VDEV(&bp->blk_dva[0]) == + DVA_GET_VDEV(&bp->blk_dva[2])) + + (DVA_GET_VDEV(&bp->blk_dva[1]) == + DVA_GET_VDEV(&bp->blk_dva[2])); + if (equal == 1) + zb->zb_ditto_2_of_3_samevdev++; + else if (equal == 3) + zb->zb_ditto_3_of_3_samevdev++; + break; + } + } +} + +static void +dsl_scan_scrub_done(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + + abd_free(zio->io_abd); + + mutex_enter(&spa->spa_scrub_lock); + spa->spa_scrub_inflight--; + cv_broadcast(&spa->spa_scrub_io_cv); + + if (zio->io_error && (zio->io_error != ECKSUM || + !(zio->io_flags & ZIO_FLAG_SPECULATIVE))) { + spa->spa_dsl_pool->dp_scan->scn_phys.scn_errors++; + } + mutex_exit(&spa->spa_scrub_lock); +} + +static boolean_t +dsl_scan_need_resilver(spa_t *spa, const dva_t *dva, size_t psize, + uint64_t phys_birth) +{ + vdev_t *vd; + + if (DVA_GET_GANG(dva)) { + /* + * Gang members may be spread across multiple + * vdevs, so the best estimate we have is the + * scrub range, which has already been checked. + * XXX -- it would be better to change our + * allocation policy to ensure that all + * gang members reside on the same vdev. + */ + return (B_TRUE); + } + + vd = vdev_lookup_top(spa, DVA_GET_VDEV(dva)); + + /* + * Check if the txg falls within the range which must be + * resilvered. DVAs outside this range can always be skipped. + */ + if (!vdev_dtl_contains(vd, DTL_PARTIAL, phys_birth, 1)) + return (B_FALSE); + + /* + * Check if the top-level vdev must resilver this offset. + * When the offset does not intersect with a dirty leaf DTL + * then it may be possible to skip the resilver IO. The psize + * is provided instead of asize to simplify the check for RAIDZ. + */ + if (!vdev_dtl_need_resilver(vd, DVA_GET_OFFSET(dva), psize)) + return (B_FALSE); + + return (B_TRUE); +} + +static int +dsl_scan_scrub_cb(dsl_pool_t *dp, + const blkptr_t *bp, const zbookmark_phys_t *zb) +{ + dsl_scan_t *scn = dp->dp_scan; + size_t psize = BP_GET_PSIZE(bp); + spa_t *spa = dp->dp_spa; + uint64_t phys_birth = BP_PHYSICAL_BIRTH(bp); + boolean_t needs_io = B_FALSE; + int zio_flags = ZIO_FLAG_SCAN_THREAD | ZIO_FLAG_RAW | ZIO_FLAG_CANFAIL; + int scan_delay = 0; + int d; + + if (phys_birth <= scn->scn_phys.scn_min_txg || + phys_birth >= scn->scn_phys.scn_max_txg) + return (0); + + count_block(dp->dp_blkstats, bp); + + if (BP_IS_EMBEDDED(bp)) + return (0); + + ASSERT(DSL_SCAN_IS_SCRUB_RESILVER(scn)); + if (scn->scn_phys.scn_func == POOL_SCAN_SCRUB) { + zio_flags |= ZIO_FLAG_SCRUB; + needs_io = B_TRUE; + scan_delay = zfs_scrub_delay; + } else { + ASSERT3U(scn->scn_phys.scn_func, ==, POOL_SCAN_RESILVER); + zio_flags |= ZIO_FLAG_RESILVER; + needs_io = B_FALSE; + scan_delay = zfs_resilver_delay; + } + + /* If it's an intent log block, failure is expected. */ + if (zb->zb_level == ZB_ZIL_LEVEL) + zio_flags |= ZIO_FLAG_SPECULATIVE; + + for (d = 0; d < BP_GET_NDVAS(bp); d++) { + const dva_t *dva = &bp->blk_dva[d]; + + /* + * Keep track of how much data we've examined so that + * zpool(1M) status can make useful progress reports. + */ + scn->scn_phys.scn_examined += DVA_GET_ASIZE(dva); + spa->spa_scan_pass_exam += DVA_GET_ASIZE(dva); + + /* if it's a resilver, this may not be in the target range */ + if (!needs_io) + needs_io = dsl_scan_need_resilver(spa, dva, psize, + phys_birth); + } + + if (needs_io && !zfs_no_scrub_io) { + vdev_t *rvd = spa->spa_root_vdev; + uint64_t maxinflight = rvd->vdev_children * zfs_top_maxinflight; + + mutex_enter(&spa->spa_scrub_lock); + while (spa->spa_scrub_inflight >= maxinflight) + cv_wait(&spa->spa_scrub_io_cv, &spa->spa_scrub_lock); + spa->spa_scrub_inflight++; + mutex_exit(&spa->spa_scrub_lock); + + /* + * If we're seeing recent (zfs_scan_idle) "important" I/Os + * then throttle our workload to limit the impact of a scan. + */ + if (ddi_get_lbolt64() - spa->spa_last_io <= zfs_scan_idle) + delay(scan_delay); + + zio_nowait(zio_read(NULL, spa, bp, + abd_alloc_for_io(psize, B_FALSE), + psize, dsl_scan_scrub_done, NULL, + ZIO_PRIORITY_SCRUB, zio_flags, zb)); + } + + /* do not relocate this block */ + return (0); +} + +/* + * Called by the ZFS_IOC_POOL_SCAN ioctl to start a scrub or resilver. + * Can also be called to resume a paused scrub. + */ +int +dsl_scan(dsl_pool_t *dp, pool_scan_func_t func) +{ + spa_t *spa = dp->dp_spa; + dsl_scan_t *scn = dp->dp_scan; + + /* + * Purge all vdev caches and probe all devices. We do this here + * rather than in sync context because this requires a writer lock + * on the spa_config lock, which we can't do from sync context. The + * spa_scrub_reopen flag indicates that vdev_open() should not + * attempt to start another scrub. + */ + spa_vdev_state_enter(spa, SCL_NONE); + spa->spa_scrub_reopen = B_TRUE; + vdev_reopen(spa->spa_root_vdev); + spa->spa_scrub_reopen = B_FALSE; + (void) spa_vdev_state_exit(spa, NULL, 0); + + if (func == POOL_SCAN_SCRUB && dsl_scan_is_paused_scrub(scn)) { + /* got scrub start cmd, resume paused scrub */ + int err = dsl_scrub_set_pause_resume(scn->scn_dp, + POOL_SCRUB_NORMAL); + if (err == 0) + return (ECANCELED); + + return (SET_ERROR(err)); + } + + return (dsl_sync_task(spa_name(spa), dsl_scan_setup_check, + dsl_scan_setup_sync, &func, 0, ZFS_SPACE_CHECK_NONE)); +} + +static boolean_t +dsl_scan_restarting(dsl_scan_t *scn, dmu_tx_t *tx) +{ + return (scn->scn_restart_txg != 0 && + scn->scn_restart_txg <= tx->tx_txg); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_top_maxinflight, int, 0644); +MODULE_PARM_DESC(zfs_top_maxinflight, "Max I/Os per top-level"); + +module_param(zfs_resilver_delay, int, 0644); +MODULE_PARM_DESC(zfs_resilver_delay, "Number of ticks to delay resilver"); + +module_param(zfs_scrub_delay, int, 0644); +MODULE_PARM_DESC(zfs_scrub_delay, "Number of ticks to delay scrub"); + +module_param(zfs_scan_idle, int, 0644); +MODULE_PARM_DESC(zfs_scan_idle, "Idle window in clock ticks"); + +module_param(zfs_scan_min_time_ms, int, 0644); +MODULE_PARM_DESC(zfs_scan_min_time_ms, "Min millisecs to scrub per txg"); + +module_param(zfs_free_min_time_ms, int, 0644); +MODULE_PARM_DESC(zfs_free_min_time_ms, "Min millisecs to free per txg"); + +module_param(zfs_resilver_min_time_ms, int, 0644); +MODULE_PARM_DESC(zfs_resilver_min_time_ms, "Min millisecs to resilver per txg"); + +module_param(zfs_no_scrub_io, int, 0644); +MODULE_PARM_DESC(zfs_no_scrub_io, "Set to disable scrub I/O"); + +module_param(zfs_no_scrub_prefetch, int, 0644); +MODULE_PARM_DESC(zfs_no_scrub_prefetch, "Set to disable scrub prefetching"); + +/* CSTYLED */ +module_param(zfs_free_max_blocks, ulong, 0644); +MODULE_PARM_DESC(zfs_free_max_blocks, "Max number of blocks freed in one txg"); + +module_param(zfs_free_bpobj_enabled, int, 0644); +MODULE_PARM_DESC(zfs_free_bpobj_enabled, "Enable processing of the free_bpobj"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_synctask.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_synctask.c @@ -0,0 +1,191 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +#define DST_AVG_BLKSHIFT 14 + +/* ARGSUSED */ +static int +dsl_null_checkfunc(void *arg, dmu_tx_t *tx) +{ + return (0); +} + +/* + * Called from open context to perform a callback in syncing context. Waits + * for the operation to complete. + * + * The checkfunc will be called from open context as a preliminary check + * which can quickly fail. If it succeeds, it will be called again from + * syncing context. The checkfunc should generally be designed to work + * properly in either context, but if necessary it can check + * dmu_tx_is_syncing(tx). + * + * The synctask infrastructure enforces proper locking strategy with respect + * to the dp_config_rwlock -- the lock will always be held when the callbacks + * are called. It will be held for read during the open-context (preliminary) + * call to the checkfunc, and then held for write from syncing context during + * the calls to the check and sync funcs. + * + * A dataset or pool name can be passed as the first argument. Typically, + * the check func will hold, check the return value of the hold, and then + * release the dataset. The sync func will VERIFYO(hold()) the dataset. + * This is safe because no changes can be made between the check and sync funcs, + * and the sync func will only be called if the check func successfully opened + * the dataset. + */ +int +dsl_sync_task(const char *pool, dsl_checkfunc_t *checkfunc, + dsl_syncfunc_t *syncfunc, void *arg, + int blocks_modified, zfs_space_check_t space_check) +{ + spa_t *spa; + dmu_tx_t *tx; + int err; + dsl_sync_task_t dst = { { { NULL } } }; + dsl_pool_t *dp; + + err = spa_open(pool, &spa, FTAG); + if (err != 0) + return (err); + dp = spa_get_dsl(spa); + +top: + tx = dmu_tx_create_dd(dp->dp_mos_dir); + VERIFY0(dmu_tx_assign(tx, TXG_WAIT)); + + dst.dst_pool = dp; + dst.dst_txg = dmu_tx_get_txg(tx); + dst.dst_space = blocks_modified << DST_AVG_BLKSHIFT; + dst.dst_space_check = space_check; + dst.dst_checkfunc = checkfunc != NULL ? checkfunc : dsl_null_checkfunc; + dst.dst_syncfunc = syncfunc; + dst.dst_arg = arg; + dst.dst_error = 0; + dst.dst_nowaiter = B_FALSE; + + dsl_pool_config_enter(dp, FTAG); + err = dst.dst_checkfunc(arg, tx); + dsl_pool_config_exit(dp, FTAG); + + if (err != 0) { + dmu_tx_commit(tx); + spa_close(spa, FTAG); + return (err); + } + + VERIFY(txg_list_add_tail(&dp->dp_sync_tasks, &dst, dst.dst_txg)); + + dmu_tx_commit(tx); + + txg_wait_synced(dp, dst.dst_txg); + + if (dst.dst_error == EAGAIN) { + txg_wait_synced(dp, dst.dst_txg + TXG_DEFER_SIZE); + goto top; + } + + spa_close(spa, FTAG); + return (dst.dst_error); +} + +void +dsl_sync_task_nowait(dsl_pool_t *dp, dsl_syncfunc_t *syncfunc, void *arg, + int blocks_modified, zfs_space_check_t space_check, dmu_tx_t *tx) +{ + dsl_sync_task_t *dst = kmem_zalloc(sizeof (*dst), KM_SLEEP); + + dst->dst_pool = dp; + dst->dst_txg = dmu_tx_get_txg(tx); + dst->dst_space = blocks_modified << DST_AVG_BLKSHIFT; + dst->dst_space_check = space_check; + dst->dst_checkfunc = dsl_null_checkfunc; + dst->dst_syncfunc = syncfunc; + dst->dst_arg = arg; + dst->dst_error = 0; + dst->dst_nowaiter = B_TRUE; + + VERIFY(txg_list_add_tail(&dp->dp_sync_tasks, dst, dst->dst_txg)); +} + +/* + * Called in syncing context to execute the synctask. + */ +void +dsl_sync_task_sync(dsl_sync_task_t *dst, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dst->dst_pool; + + ASSERT0(dst->dst_error); + + /* + * Check for sufficient space. + * + * When the sync task was created, the caller specified the + * type of space checking required. See the comment in + * zfs_space_check_t for details on the semantics of each + * type of space checking. + * + * We just check against what's on-disk; we don't want any + * in-flight accounting to get in our way, because open context + * may have already used up various in-core limits + * (arc_tempreserve, dsl_pool_tempreserve). + */ + if (dst->dst_space_check != ZFS_SPACE_CHECK_NONE) { + uint64_t quota = dsl_pool_adjustedsize(dp, + dst->dst_space_check == ZFS_SPACE_CHECK_RESERVED) - + metaslab_class_get_deferred(spa_normal_class(dp->dp_spa)); + uint64_t used = dsl_dir_phys(dp->dp_root_dir)->dd_used_bytes; + /* MOS space is triple-dittoed, so we multiply by 3. */ + if (dst->dst_space > 0 && used + dst->dst_space * 3 > quota) { + dst->dst_error = SET_ERROR(ENOSPC); + if (dst->dst_nowaiter) + kmem_free(dst, sizeof (*dst)); + return; + } + } + + /* + * Check for errors by calling checkfunc. + */ + rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); + dst->dst_error = dst->dst_checkfunc(dst->dst_arg, tx); + if (dst->dst_error == 0) + dst->dst_syncfunc(dst->dst_arg, tx); + rrw_exit(&dp->dp_config_rwlock, FTAG); + if (dst->dst_nowaiter) + kmem_free(dst, sizeof (*dst)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(dsl_sync_task); +EXPORT_SYMBOL(dsl_sync_task_nowait); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/dsl_userhold.c +++ linux-aws-4.15.0/zfs/module/zfs/dsl_userhold.c @@ -0,0 +1,674 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct dsl_dataset_user_hold_arg { + nvlist_t *dduha_holds; + nvlist_t *dduha_chkholds; + nvlist_t *dduha_errlist; + minor_t dduha_minor; +} dsl_dataset_user_hold_arg_t; + +/* + * If you add new checks here, you may need to add additional checks to the + * "temporary" case in snapshot_check() in dmu_objset.c. + */ +int +dsl_dataset_user_hold_check_one(dsl_dataset_t *ds, const char *htag, + boolean_t temphold, dmu_tx_t *tx) +{ + dsl_pool_t *dp = dmu_tx_pool(tx); + objset_t *mos = dp->dp_meta_objset; + int error = 0; + + ASSERT(dsl_pool_config_held(dp)); + + if (strlen(htag) > MAXNAMELEN) + return (SET_ERROR(E2BIG)); + /* Tempholds have a more restricted length */ + if (temphold && strlen(htag) + MAX_TAG_PREFIX_LEN >= MAXNAMELEN) + return (SET_ERROR(E2BIG)); + + /* tags must be unique (if ds already exists) */ + if (ds != NULL && dsl_dataset_phys(ds)->ds_userrefs_obj != 0) { + uint64_t value; + + error = zap_lookup(mos, dsl_dataset_phys(ds)->ds_userrefs_obj, + htag, 8, 1, &value); + if (error == 0) + error = SET_ERROR(EEXIST); + else if (error == ENOENT) + error = 0; + } + + return (error); +} + +static int +dsl_dataset_user_hold_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_user_hold_arg_t *dduha = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + + if (spa_version(dp->dp_spa) < SPA_VERSION_USERREFS) + return (SET_ERROR(ENOTSUP)); + + if (!dmu_tx_is_syncing(tx)) + return (0); + + for (pair = nvlist_next_nvpair(dduha->dduha_holds, NULL); + pair != NULL; pair = nvlist_next_nvpair(dduha->dduha_holds, pair)) { + dsl_dataset_t *ds; + int error = 0; + char *htag, *name; + + /* must be a snapshot */ + name = nvpair_name(pair); + if (strchr(name, '@') == NULL) + error = SET_ERROR(EINVAL); + + if (error == 0) + error = nvpair_value_string(pair, &htag); + + if (error == 0) + error = dsl_dataset_hold(dp, name, FTAG, &ds); + + if (error == 0) { + error = dsl_dataset_user_hold_check_one(ds, htag, + dduha->dduha_minor != 0, tx); + dsl_dataset_rele(ds, FTAG); + } + + if (error == 0) { + fnvlist_add_string(dduha->dduha_chkholds, name, htag); + } else { + /* + * We register ENOENT errors so they can be correctly + * reported if needed, such as when all holds fail. + */ + fnvlist_add_int32(dduha->dduha_errlist, name, error); + if (error != ENOENT) + return (error); + } + } + + return (0); +} + + +static void +dsl_dataset_user_hold_sync_one_impl(nvlist_t *tmpholds, dsl_dataset_t *ds, + const char *htag, minor_t minor, uint64_t now, dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + objset_t *mos = dp->dp_meta_objset; + uint64_t zapobj; + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + + if (dsl_dataset_phys(ds)->ds_userrefs_obj == 0) { + /* + * This is the first user hold for this dataset. Create + * the userrefs zap object. + */ + dmu_buf_will_dirty(ds->ds_dbuf, tx); + zapobj = dsl_dataset_phys(ds)->ds_userrefs_obj = + zap_create(mos, DMU_OT_USERREFS, DMU_OT_NONE, 0, tx); + } else { + zapobj = dsl_dataset_phys(ds)->ds_userrefs_obj; + } + ds->ds_userrefs++; + + VERIFY0(zap_add(mos, zapobj, htag, 8, 1, &now, tx)); + + if (minor != 0) { + char name[MAXNAMELEN]; + nvlist_t *tags; + + VERIFY0(dsl_pool_user_hold(dp, ds->ds_object, + htag, now, tx)); + (void) snprintf(name, sizeof (name), "%llx", + (u_longlong_t)ds->ds_object); + + if (nvlist_lookup_nvlist(tmpholds, name, &tags) != 0) { + tags = fnvlist_alloc(); + fnvlist_add_boolean(tags, htag); + fnvlist_add_nvlist(tmpholds, name, tags); + fnvlist_free(tags); + } else { + fnvlist_add_boolean(tags, htag); + } + } + + spa_history_log_internal_ds(ds, "hold", tx, + "tag=%s temp=%d refs=%llu", + htag, minor != 0, ds->ds_userrefs); +} + +typedef struct zfs_hold_cleanup_arg { + char zhca_spaname[ZFS_MAX_DATASET_NAME_LEN]; + uint64_t zhca_spa_load_guid; + nvlist_t *zhca_holds; +} zfs_hold_cleanup_arg_t; + +static void +dsl_dataset_user_release_onexit(void *arg) +{ + zfs_hold_cleanup_arg_t *ca = arg; + spa_t *spa; + int error; + + error = spa_open(ca->zhca_spaname, &spa, FTAG); + if (error != 0) { + zfs_dbgmsg("couldn't release holds on pool=%s " + "because pool is no longer loaded", + ca->zhca_spaname); + return; + } + if (spa_load_guid(spa) != ca->zhca_spa_load_guid) { + zfs_dbgmsg("couldn't release holds on pool=%s " + "because pool is no longer loaded (guid doesn't match)", + ca->zhca_spaname); + spa_close(spa, FTAG); + return; + } + + (void) dsl_dataset_user_release_tmp(spa_get_dsl(spa), ca->zhca_holds); + fnvlist_free(ca->zhca_holds); + kmem_free(ca, sizeof (zfs_hold_cleanup_arg_t)); + spa_close(spa, FTAG); +} + +static void +dsl_onexit_hold_cleanup(spa_t *spa, nvlist_t *holds, minor_t minor) +{ + zfs_hold_cleanup_arg_t *ca; + + if (minor == 0 || nvlist_empty(holds)) { + fnvlist_free(holds); + return; + } + + ASSERT(spa != NULL); + ca = kmem_alloc(sizeof (*ca), KM_SLEEP); + + (void) strlcpy(ca->zhca_spaname, spa_name(spa), + sizeof (ca->zhca_spaname)); + ca->zhca_spa_load_guid = spa_load_guid(spa); + ca->zhca_holds = holds; + VERIFY0(zfs_onexit_add_cb(minor, + dsl_dataset_user_release_onexit, ca, NULL)); +} + +void +dsl_dataset_user_hold_sync_one(dsl_dataset_t *ds, const char *htag, + minor_t minor, uint64_t now, dmu_tx_t *tx) +{ + nvlist_t *tmpholds; + + if (minor != 0) + tmpholds = fnvlist_alloc(); + else + tmpholds = NULL; + dsl_dataset_user_hold_sync_one_impl(tmpholds, ds, htag, minor, now, tx); + dsl_onexit_hold_cleanup(dsl_dataset_get_spa(ds), tmpholds, minor); +} + +static void +dsl_dataset_user_hold_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_user_hold_arg_t *dduha = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvlist_t *tmpholds; + nvpair_t *pair; + uint64_t now = gethrestime_sec(); + + if (dduha->dduha_minor != 0) + tmpholds = fnvlist_alloc(); + else + tmpholds = NULL; + for (pair = nvlist_next_nvpair(dduha->dduha_chkholds, NULL); + pair != NULL; + pair = nvlist_next_nvpair(dduha->dduha_chkholds, pair)) { + dsl_dataset_t *ds; + + VERIFY0(dsl_dataset_hold(dp, nvpair_name(pair), FTAG, &ds)); + dsl_dataset_user_hold_sync_one_impl(tmpholds, ds, + fnvpair_value_string(pair), dduha->dduha_minor, now, tx); + dsl_dataset_rele(ds, FTAG); + } + dsl_onexit_hold_cleanup(dp->dp_spa, tmpholds, dduha->dduha_minor); +} + +/* + * The full semantics of this function are described in the comment above + * lzc_hold(). + * + * To summarize: + * holds is nvl of snapname -> holdname + * errlist will be filled in with snapname -> error + * + * The snaphosts must all be in the same pool. + * + * Holds for snapshots that don't exist will be skipped. + * + * If none of the snapshots for requested holds exist then ENOENT will be + * returned. + * + * If cleanup_minor is not 0, the holds will be temporary, which will be cleaned + * up when the process exits. + * + * On success all the holds, for snapshots that existed, will be created and 0 + * will be returned. + * + * On failure no holds will be created, the errlist will be filled in, + * and an errno will returned. + * + * In all cases the errlist will contain entries for holds where the snapshot + * didn't exist. + */ +int +dsl_dataset_user_hold(nvlist_t *holds, minor_t cleanup_minor, nvlist_t *errlist) +{ + dsl_dataset_user_hold_arg_t dduha; + nvpair_t *pair; + int ret; + + pair = nvlist_next_nvpair(holds, NULL); + if (pair == NULL) + return (0); + + dduha.dduha_holds = holds; + dduha.dduha_chkholds = fnvlist_alloc(); + dduha.dduha_errlist = errlist; + dduha.dduha_minor = cleanup_minor; + + ret = dsl_sync_task(nvpair_name(pair), dsl_dataset_user_hold_check, + dsl_dataset_user_hold_sync, &dduha, + fnvlist_num_pairs(holds), ZFS_SPACE_CHECK_RESERVED); + fnvlist_free(dduha.dduha_chkholds); + + return (ret); +} + +typedef int (dsl_holdfunc_t)(dsl_pool_t *dp, const char *name, void *tag, + dsl_dataset_t **dsp); + +typedef struct dsl_dataset_user_release_arg { + dsl_holdfunc_t *ddura_holdfunc; + nvlist_t *ddura_holds; + nvlist_t *ddura_todelete; + nvlist_t *ddura_errlist; + nvlist_t *ddura_chkholds; +} dsl_dataset_user_release_arg_t; + +/* Place a dataset hold on the snapshot identified by passed dsobj string */ +static int +dsl_dataset_hold_obj_string(dsl_pool_t *dp, const char *dsobj, void *tag, + dsl_dataset_t **dsp) +{ + return (dsl_dataset_hold_obj(dp, zfs_strtonum(dsobj, NULL), tag, dsp)); +} + +static int +dsl_dataset_user_release_check_one(dsl_dataset_user_release_arg_t *ddura, + dsl_dataset_t *ds, nvlist_t *holds, const char *snapname) +{ + uint64_t zapobj; + nvlist_t *holds_found; + nvpair_t *pair; + objset_t *mos; + int numholds; + + if (!ds->ds_is_snapshot) + return (SET_ERROR(EINVAL)); + + if (nvlist_empty(holds)) + return (0); + + numholds = 0; + mos = ds->ds_dir->dd_pool->dp_meta_objset; + zapobj = dsl_dataset_phys(ds)->ds_userrefs_obj; + VERIFY0(nvlist_alloc(&holds_found, NV_UNIQUE_NAME, KM_SLEEP)); + + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + uint64_t tmp; + int error; + const char *holdname = nvpair_name(pair); + + if (zapobj != 0) + error = zap_lookup(mos, zapobj, holdname, 8, 1, &tmp); + else + error = SET_ERROR(ENOENT); + + /* + * Non-existent holds are put on the errlist, but don't + * cause an overall failure. + */ + if (error == ENOENT) { + if (ddura->ddura_errlist != NULL) { + char *errtag = kmem_asprintf("%s#%s", + snapname, holdname); + fnvlist_add_int32(ddura->ddura_errlist, errtag, + ENOENT); + strfree(errtag); + } + continue; + } + + if (error != 0) { + fnvlist_free(holds_found); + return (error); + } + + fnvlist_add_boolean(holds_found, holdname); + numholds++; + } + + if (DS_IS_DEFER_DESTROY(ds) && + dsl_dataset_phys(ds)->ds_num_children == 1 && + ds->ds_userrefs == numholds) { + /* we need to destroy the snapshot as well */ + if (dsl_dataset_long_held(ds)) { + fnvlist_free(holds_found); + return (SET_ERROR(EBUSY)); + } + fnvlist_add_boolean(ddura->ddura_todelete, snapname); + } + + if (numholds != 0) { + fnvlist_add_nvlist(ddura->ddura_chkholds, snapname, + holds_found); + } + fnvlist_free(holds_found); + + return (0); +} + +static int +dsl_dataset_user_release_check(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_user_release_arg_t *ddura; + dsl_holdfunc_t *holdfunc; + dsl_pool_t *dp; + nvpair_t *pair; + + if (!dmu_tx_is_syncing(tx)) + return (0); + + dp = dmu_tx_pool(tx); + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + + ddura = arg; + holdfunc = ddura->ddura_holdfunc; + + for (pair = nvlist_next_nvpair(ddura->ddura_holds, NULL); + pair != NULL; pair = nvlist_next_nvpair(ddura->ddura_holds, pair)) { + int error; + dsl_dataset_t *ds; + nvlist_t *holds; + const char *snapname = nvpair_name(pair); + + error = nvpair_value_nvlist(pair, &holds); + if (error != 0) + error = (SET_ERROR(EINVAL)); + else + error = holdfunc(dp, snapname, FTAG, &ds); + if (error == 0) { + error = dsl_dataset_user_release_check_one(ddura, ds, + holds, snapname); + dsl_dataset_rele(ds, FTAG); + } + if (error != 0) { + if (ddura->ddura_errlist != NULL) { + fnvlist_add_int32(ddura->ddura_errlist, + snapname, error); + } + /* + * Non-existent snapshots are put on the errlist, + * but don't cause an overall failure. + */ + if (error != ENOENT) + return (error); + } + } + + return (0); +} + +static void +dsl_dataset_user_release_sync_one(dsl_dataset_t *ds, nvlist_t *holds, + dmu_tx_t *tx) +{ + dsl_pool_t *dp = ds->ds_dir->dd_pool; + objset_t *mos = dp->dp_meta_objset; + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + int error; + const char *holdname = nvpair_name(pair); + + /* Remove temporary hold if one exists. */ + error = dsl_pool_user_release(dp, ds->ds_object, holdname, tx); + VERIFY(error == 0 || error == ENOENT); + + VERIFY0(zap_remove(mos, dsl_dataset_phys(ds)->ds_userrefs_obj, + holdname, tx)); + ds->ds_userrefs--; + + spa_history_log_internal_ds(ds, "release", tx, + "tag=%s refs=%lld", holdname, (longlong_t)ds->ds_userrefs); + } +} + +static void +dsl_dataset_user_release_sync(void *arg, dmu_tx_t *tx) +{ + dsl_dataset_user_release_arg_t *ddura = arg; + dsl_holdfunc_t *holdfunc = ddura->ddura_holdfunc; + dsl_pool_t *dp = dmu_tx_pool(tx); + nvpair_t *pair; + + ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock)); + + for (pair = nvlist_next_nvpair(ddura->ddura_chkholds, NULL); + pair != NULL; pair = nvlist_next_nvpair(ddura->ddura_chkholds, + pair)) { + dsl_dataset_t *ds; + const char *name = nvpair_name(pair); + + VERIFY0(holdfunc(dp, name, FTAG, &ds)); + + dsl_dataset_user_release_sync_one(ds, + fnvpair_value_nvlist(pair), tx); + if (nvlist_exists(ddura->ddura_todelete, name)) { + ASSERT(ds->ds_userrefs == 0 && + dsl_dataset_phys(ds)->ds_num_children == 1 && + DS_IS_DEFER_DESTROY(ds)); + dsl_destroy_snapshot_sync_impl(ds, B_FALSE, tx); + } + dsl_dataset_rele(ds, FTAG); + } +} + +/* + * The full semantics of this function are described in the comment above + * lzc_release(). + * + * To summarize: + * Releases holds specified in the nvl holds. + * + * holds is nvl of snapname -> { holdname, ... } + * errlist will be filled in with snapname -> error + * + * If tmpdp is not NULL the names for holds should be the dsobj's of snapshots, + * otherwise they should be the names of shapshots. + * + * As a release may cause snapshots to be destroyed this trys to ensure they + * aren't mounted. + * + * The release of non-existent holds are skipped. + * + * At least one hold must have been released for the this function to succeed + * and return 0. + */ +static int +dsl_dataset_user_release_impl(nvlist_t *holds, nvlist_t *errlist, + dsl_pool_t *tmpdp) +{ + dsl_dataset_user_release_arg_t ddura; + nvpair_t *pair; + char *pool; + int error; + + pair = nvlist_next_nvpair(holds, NULL); + if (pair == NULL) + return (0); + + /* + * The release may cause snapshots to be destroyed; make sure they + * are not mounted. + */ + if (tmpdp != NULL) { + /* Temporary holds are specified by dsobj string. */ + ddura.ddura_holdfunc = dsl_dataset_hold_obj_string; + pool = spa_name(tmpdp->dp_spa); +#ifdef _KERNEL + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + dsl_dataset_t *ds; + + dsl_pool_config_enter(tmpdp, FTAG); + error = dsl_dataset_hold_obj_string(tmpdp, + nvpair_name(pair), FTAG, &ds); + if (error == 0) { + char name[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_name(ds, name); + dsl_pool_config_exit(tmpdp, FTAG); + dsl_dataset_rele(ds, FTAG); + (void) zfs_unmount_snap(name); + } else { + dsl_pool_config_exit(tmpdp, FTAG); + } + } +#endif + } else { + /* Non-temporary holds are specified by name. */ + ddura.ddura_holdfunc = dsl_dataset_hold; + pool = nvpair_name(pair); +#ifdef _KERNEL + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + (void) zfs_unmount_snap(nvpair_name(pair)); + } +#endif + } + + ddura.ddura_holds = holds; + ddura.ddura_errlist = errlist; + VERIFY0(nvlist_alloc(&ddura.ddura_todelete, NV_UNIQUE_NAME, + KM_SLEEP)); + VERIFY0(nvlist_alloc(&ddura.ddura_chkholds, NV_UNIQUE_NAME, + KM_SLEEP)); + + error = dsl_sync_task(pool, dsl_dataset_user_release_check, + dsl_dataset_user_release_sync, &ddura, 0, ZFS_SPACE_CHECK_NONE); + fnvlist_free(ddura.ddura_todelete); + fnvlist_free(ddura.ddura_chkholds); + + return (error); +} + +/* + * holds is nvl of snapname -> { holdname, ... } + * errlist will be filled in with snapname -> error + */ +int +dsl_dataset_user_release(nvlist_t *holds, nvlist_t *errlist) +{ + return (dsl_dataset_user_release_impl(holds, errlist, NULL)); +} + +/* + * holds is nvl of snapdsobj -> { holdname, ... } + */ +void +dsl_dataset_user_release_tmp(struct dsl_pool *dp, nvlist_t *holds) +{ + ASSERT(dp != NULL); + (void) dsl_dataset_user_release_impl(holds, NULL, dp); +} + +int +dsl_dataset_get_holds(const char *dsname, nvlist_t *nvl) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + int err; + + err = dsl_pool_hold(dsname, FTAG, &dp); + if (err != 0) + return (err); + err = dsl_dataset_hold(dp, dsname, FTAG, &ds); + if (err != 0) { + dsl_pool_rele(dp, FTAG); + return (err); + } + + if (dsl_dataset_phys(ds)->ds_userrefs_obj != 0) { + zap_attribute_t *za; + zap_cursor_t zc; + + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + for (zap_cursor_init(&zc, ds->ds_dir->dd_pool->dp_meta_objset, + dsl_dataset_phys(ds)->ds_userrefs_obj); + zap_cursor_retrieve(&zc, za) == 0; + zap_cursor_advance(&zc)) { + fnvlist_add_uint64(nvl, za->za_name, + za->za_first_integer); + } + zap_cursor_fini(&zc); + kmem_free(za, sizeof (zap_attribute_t)); + } + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/edonr_zfs.c +++ linux-aws-4.15.0/zfs/module/zfs/edonr_zfs.c @@ -0,0 +1,115 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2016 by Delphix. All rights reserved. + */ +#include +#include +#include +#include /* For CTASSERT() */ +#include + +#define EDONR_MODE 512 +#define EDONR_BLOCK_SIZE EdonR512_BLOCK_SIZE + +static int +edonr_incremental(void *buf, size_t size, void *arg) +{ + EdonRState *ctx = arg; + EdonRUpdate(ctx, buf, size * 8); + return (0); +} + +/* + * Native zio_checksum interface for the Edon-R hash function. + */ +/*ARGSUSED*/ +void +abd_checksum_edonr_native(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + uint8_t digest[EDONR_MODE / 8]; + EdonRState ctx; + + ASSERT(ctx_template != NULL); + bcopy(ctx_template, &ctx, sizeof (ctx)); + (void) abd_iterate_func(abd, 0, size, edonr_incremental, &ctx); + EdonRFinal(&ctx, digest); + bcopy(digest, zcp->zc_word, sizeof (zcp->zc_word)); +} + +/* + * Byteswapped zio_checksum interface for the Edon-R hash function. + */ +void +abd_checksum_edonr_byteswap(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + zio_cksum_t tmp; + + abd_checksum_edonr_native(abd, size, ctx_template, &tmp); + zcp->zc_word[0] = BSWAP_64(zcp->zc_word[0]); + zcp->zc_word[1] = BSWAP_64(zcp->zc_word[1]); + zcp->zc_word[2] = BSWAP_64(zcp->zc_word[2]); + zcp->zc_word[3] = BSWAP_64(zcp->zc_word[3]); +} + +void * +abd_checksum_edonr_tmpl_init(const zio_cksum_salt_t *salt) +{ + EdonRState *ctx; + uint8_t salt_block[EDONR_BLOCK_SIZE]; + + /* + * Edon-R needs all but the last hash invocation to be on full-size + * blocks, but the salt is too small. Rather than simply padding it + * with zeros, we expand the salt into a new salt block of proper + * size by double-hashing it (the new salt block will be composed of + * H(salt) || H(H(salt))). + */ + CTASSERT(EDONR_BLOCK_SIZE == 2 * (EDONR_MODE / 8)); + EdonRHash(EDONR_MODE, salt->zcs_bytes, sizeof (salt->zcs_bytes) * 8, + salt_block); + EdonRHash(EDONR_MODE, salt_block, EDONR_MODE, salt_block + + EDONR_MODE / 8); + + /* + * Feed the new salt block into the hash function - this will serve + * as our MAC key. + */ + ctx = kmem_zalloc(sizeof (*ctx), KM_SLEEP); + EdonRInit(ctx, EDONR_MODE); + EdonRUpdate(ctx, salt_block, sizeof (salt_block) * 8); + return (ctx); +} + +void +abd_checksum_edonr_tmpl_free(void *ctx_template) +{ + EdonRState *ctx = ctx_template; + + bzero(ctx, sizeof (*ctx)); + kmem_free(ctx, sizeof (*ctx)); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/fm.c +++ linux-aws-4.15.0/zfs/module/zfs/fm.c @@ -0,0 +1,1676 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* + * Fault Management Architecture (FMA) Resource and Protocol Support + * + * The routines contained herein provide services to support kernel subsystems + * in publishing fault management telemetry (see PSARC 2002/412 and 2003/089). + * + * Name-Value Pair Lists + * + * The embodiment of an FMA protocol element (event, fmri or authority) is a + * name-value pair list (nvlist_t). FMA-specific nvlist construtor and + * destructor functions, fm_nvlist_create() and fm_nvlist_destroy(), are used + * to create an nvpair list using custom allocators. Callers may choose to + * allocate either from the kernel memory allocator, or from a preallocated + * buffer, useful in constrained contexts like high-level interrupt routines. + * + * Protocol Event and FMRI Construction + * + * Convenience routines are provided to construct nvlist events according to + * the FMA Event Protocol and Naming Schema specification for ereports and + * FMRIs for the dev, cpu, hc, mem, legacy hc and de schemes. + * + * ENA Manipulation + * + * Routines to generate ENA formats 0, 1 and 2 are available as well as + * routines to increment formats 1 and 2. Individual fields within the + * ENA are extractable via fm_ena_time_get(), fm_ena_id_get(), + * fm_ena_format_get() and fm_ena_gen_get(). + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int zfs_zevent_len_max = 0; +int zfs_zevent_cols = 80; +int zfs_zevent_console = 0; + +static int zevent_len_cur = 0; +static int zevent_waiters = 0; +static int zevent_flags = 0; + +/* Num events rate limited since the last time zfs_zevent_next() was called */ +static uint64_t ratelimit_dropped = 0; + +/* + * The EID (Event IDentifier) is used to uniquely tag a zevent when it is + * posted. The posted EIDs are monotonically increasing but not persistent. + * They will be reset to the initial value (1) each time the kernel module is + * loaded. + */ +static uint64_t zevent_eid = 0; + +static kmutex_t zevent_lock; +static list_t zevent_list; +static kcondvar_t zevent_cv; +#endif /* _KERNEL */ + + +/* + * Common fault management kstats to record event generation failures + */ + +struct erpt_kstat { + kstat_named_t erpt_dropped; /* num erpts dropped on post */ + kstat_named_t erpt_set_failed; /* num erpt set failures */ + kstat_named_t fmri_set_failed; /* num fmri set failures */ + kstat_named_t payload_set_failed; /* num payload set failures */ +}; + +static struct erpt_kstat erpt_kstat_data = { + { "erpt-dropped", KSTAT_DATA_UINT64 }, + { "erpt-set-failed", KSTAT_DATA_UINT64 }, + { "fmri-set-failed", KSTAT_DATA_UINT64 }, + { "payload-set-failed", KSTAT_DATA_UINT64 } +}; + +kstat_t *fm_ksp; + +#ifdef _KERNEL + +/* + * Formatting utility function for fm_nvprintr. We attempt to wrap chunks of + * output so they aren't split across console lines, and return the end column. + */ +/*PRINTFLIKE4*/ +static int +fm_printf(int depth, int c, int cols, const char *format, ...) +{ + va_list ap; + int width; + char c1; + + va_start(ap, format); + width = vsnprintf(&c1, sizeof (c1), format, ap); + va_end(ap); + + if (c + width >= cols) { + console_printf("\n"); + c = 0; + if (format[0] != ' ' && depth > 0) { + console_printf(" "); + c++; + } + } + + va_start(ap, format); + console_vprintf(format, ap); + va_end(ap); + + return ((c + width) % cols); +} + +/* + * Recursively print an nvlist in the specified column width and return the + * column we end up in. This function is called recursively by fm_nvprint(), + * below. We generically format the entire nvpair using hexadecimal + * integers and strings, and elide any integer arrays. Arrays are basically + * used for cache dumps right now, so we suppress them so as not to overwhelm + * the amount of console output we produce at panic time. This can be further + * enhanced as FMA technology grows based upon the needs of consumers. All + * FMA telemetry is logged using the dump device transport, so the console + * output serves only as a fallback in case this procedure is unsuccessful. + */ +static int +fm_nvprintr(nvlist_t *nvl, int d, int c, int cols) +{ + nvpair_t *nvp; + + for (nvp = nvlist_next_nvpair(nvl, NULL); + nvp != NULL; nvp = nvlist_next_nvpair(nvl, nvp)) { + + data_type_t type = nvpair_type(nvp); + const char *name = nvpair_name(nvp); + + boolean_t b; + uint8_t i8; + uint16_t i16; + uint32_t i32; + uint64_t i64; + char *str; + nvlist_t *cnv; + + if (strcmp(name, FM_CLASS) == 0) + continue; /* already printed by caller */ + + c = fm_printf(d, c, cols, " %s=", name); + + switch (type) { + case DATA_TYPE_BOOLEAN: + c = fm_printf(d + 1, c, cols, " 1"); + break; + + case DATA_TYPE_BOOLEAN_VALUE: + (void) nvpair_value_boolean_value(nvp, &b); + c = fm_printf(d + 1, c, cols, b ? "1" : "0"); + break; + + case DATA_TYPE_BYTE: + (void) nvpair_value_byte(nvp, &i8); + c = fm_printf(d + 1, c, cols, "0x%x", i8); + break; + + case DATA_TYPE_INT8: + (void) nvpair_value_int8(nvp, (void *)&i8); + c = fm_printf(d + 1, c, cols, "0x%x", i8); + break; + + case DATA_TYPE_UINT8: + (void) nvpair_value_uint8(nvp, &i8); + c = fm_printf(d + 1, c, cols, "0x%x", i8); + break; + + case DATA_TYPE_INT16: + (void) nvpair_value_int16(nvp, (void *)&i16); + c = fm_printf(d + 1, c, cols, "0x%x", i16); + break; + + case DATA_TYPE_UINT16: + (void) nvpair_value_uint16(nvp, &i16); + c = fm_printf(d + 1, c, cols, "0x%x", i16); + break; + + case DATA_TYPE_INT32: + (void) nvpair_value_int32(nvp, (void *)&i32); + c = fm_printf(d + 1, c, cols, "0x%x", i32); + break; + + case DATA_TYPE_UINT32: + (void) nvpair_value_uint32(nvp, &i32); + c = fm_printf(d + 1, c, cols, "0x%x", i32); + break; + + case DATA_TYPE_INT64: + (void) nvpair_value_int64(nvp, (void *)&i64); + c = fm_printf(d + 1, c, cols, "0x%llx", + (u_longlong_t)i64); + break; + + case DATA_TYPE_UINT64: + (void) nvpair_value_uint64(nvp, &i64); + c = fm_printf(d + 1, c, cols, "0x%llx", + (u_longlong_t)i64); + break; + + case DATA_TYPE_HRTIME: + (void) nvpair_value_hrtime(nvp, (void *)&i64); + c = fm_printf(d + 1, c, cols, "0x%llx", + (u_longlong_t)i64); + break; + + case DATA_TYPE_STRING: + (void) nvpair_value_string(nvp, &str); + c = fm_printf(d + 1, c, cols, "\"%s\"", + str ? str : ""); + break; + + case DATA_TYPE_NVLIST: + c = fm_printf(d + 1, c, cols, "["); + (void) nvpair_value_nvlist(nvp, &cnv); + c = fm_nvprintr(cnv, d + 1, c, cols); + c = fm_printf(d + 1, c, cols, " ]"); + break; + + case DATA_TYPE_NVLIST_ARRAY: { + nvlist_t **val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "["); + (void) nvpair_value_nvlist_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) { + c = fm_nvprintr(val[i], d + 1, c, cols); + } + c = fm_printf(d + 1, c, cols, " ]"); + } + break; + + case DATA_TYPE_INT8_ARRAY: { + int8_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_int8_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_UINT8_ARRAY: { + uint8_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_uint8_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_INT16_ARRAY: { + int16_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_int16_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_UINT16_ARRAY: { + uint16_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_uint16_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_INT32_ARRAY: { + int32_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_int32_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_UINT32_ARRAY: { + uint32_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_uint32_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_INT64_ARRAY: { + int64_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_int64_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_UINT64_ARRAY: { + uint64_t *val; + uint_t i, nelem; + + c = fm_printf(d + 1, c, cols, "[ "); + (void) nvpair_value_uint64_array(nvp, &val, &nelem); + for (i = 0; i < nelem; i++) + c = fm_printf(d + 1, c, cols, "0x%llx ", + (u_longlong_t)val[i]); + + c = fm_printf(d + 1, c, cols, "]"); + break; + } + + case DATA_TYPE_STRING_ARRAY: + case DATA_TYPE_BOOLEAN_ARRAY: + case DATA_TYPE_BYTE_ARRAY: + c = fm_printf(d + 1, c, cols, "[...]"); + break; + + case DATA_TYPE_UNKNOWN: + c = fm_printf(d + 1, c, cols, ""); + break; + } + } + + return (c); +} + +void +fm_nvprint(nvlist_t *nvl) +{ + char *class; + int c = 0; + + console_printf("\n"); + + if (nvlist_lookup_string(nvl, FM_CLASS, &class) == 0) + c = fm_printf(0, c, zfs_zevent_cols, "%s", class); + + if (fm_nvprintr(nvl, 0, c, zfs_zevent_cols) != 0) + console_printf("\n"); + + console_printf("\n"); +} + +static zevent_t * +zfs_zevent_alloc(void) +{ + zevent_t *ev; + + ev = kmem_zalloc(sizeof (zevent_t), KM_SLEEP); + + list_create(&ev->ev_ze_list, sizeof (zfs_zevent_t), + offsetof(zfs_zevent_t, ze_node)); + list_link_init(&ev->ev_node); + + return (ev); +} + +static void +zfs_zevent_free(zevent_t *ev) +{ + /* Run provided cleanup callback */ + ev->ev_cb(ev->ev_nvl, ev->ev_detector); + + list_destroy(&ev->ev_ze_list); + kmem_free(ev, sizeof (zevent_t)); +} + +static void +zfs_zevent_drain(zevent_t *ev) +{ + zfs_zevent_t *ze; + + ASSERT(MUTEX_HELD(&zevent_lock)); + list_remove(&zevent_list, ev); + + /* Remove references to this event in all private file data */ + while ((ze = list_head(&ev->ev_ze_list)) != NULL) { + list_remove(&ev->ev_ze_list, ze); + ze->ze_zevent = NULL; + ze->ze_dropped++; + } + + zfs_zevent_free(ev); +} + +void +zfs_zevent_drain_all(int *count) +{ + zevent_t *ev; + + mutex_enter(&zevent_lock); + while ((ev = list_head(&zevent_list)) != NULL) + zfs_zevent_drain(ev); + + *count = zevent_len_cur; + zevent_len_cur = 0; + mutex_exit(&zevent_lock); +} + +/* + * New zevents are inserted at the head. If the maximum queue + * length is exceeded a zevent will be drained from the tail. + * As part of this any user space processes which currently have + * a reference to this zevent_t in their private data will have + * this reference set to NULL. + */ +static void +zfs_zevent_insert(zevent_t *ev) +{ + ASSERT(MUTEX_HELD(&zevent_lock)); + list_insert_head(&zevent_list, ev); + + if (zevent_len_cur >= zfs_zevent_len_max) + zfs_zevent_drain(list_tail(&zevent_list)); + else + zevent_len_cur++; +} + +/* + * Post a zevent. The cb will be called when nvl and detector are no longer + * needed, i.e.: + * - An error happened and a zevent can't be posted. In this case, cb is called + * before zfs_zevent_post() returns. + * - The event is being drained and freed. + */ +int +zfs_zevent_post(nvlist_t *nvl, nvlist_t *detector, zevent_cb_t *cb) +{ + int64_t tv_array[2]; + timestruc_t tv; + uint64_t eid; + size_t nvl_size = 0; + zevent_t *ev; + int error; + + ASSERT(cb != NULL); + + gethrestime(&tv); + tv_array[0] = tv.tv_sec; + tv_array[1] = tv.tv_nsec; + + error = nvlist_add_int64_array(nvl, FM_EREPORT_TIME, tv_array, 2); + if (error) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + goto out; + } + + eid = atomic_inc_64_nv(&zevent_eid); + error = nvlist_add_uint64(nvl, FM_EREPORT_EID, eid); + if (error) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + goto out; + } + + error = nvlist_size(nvl, &nvl_size, NV_ENCODE_NATIVE); + if (error) { + atomic_inc_64(&erpt_kstat_data.erpt_dropped.value.ui64); + goto out; + } + + if (nvl_size > ERPT_DATA_SZ || nvl_size == 0) { + atomic_inc_64(&erpt_kstat_data.erpt_dropped.value.ui64); + error = EOVERFLOW; + goto out; + } + + if (zfs_zevent_console) + fm_nvprint(nvl); + + ev = zfs_zevent_alloc(); + if (ev == NULL) { + atomic_inc_64(&erpt_kstat_data.erpt_dropped.value.ui64); + error = ENOMEM; + goto out; + } + + ev->ev_nvl = nvl; + ev->ev_detector = detector; + ev->ev_cb = cb; + ev->ev_eid = eid; + + mutex_enter(&zevent_lock); + zfs_zevent_insert(ev); + cv_broadcast(&zevent_cv); + mutex_exit(&zevent_lock); + +out: + if (error) + cb(nvl, detector); + + return (error); +} + +static int +zfs_zevent_minor_to_state(minor_t minor, zfs_zevent_t **ze) +{ + *ze = zfsdev_get_state(minor, ZST_ZEVENT); + if (*ze == NULL) + return (EBADF); + + return (0); +} + +int +zfs_zevent_fd_hold(int fd, minor_t *minorp, zfs_zevent_t **ze) +{ + file_t *fp; + int error; + + fp = getf(fd); + if (fp == NULL) + return (EBADF); + + error = zfsdev_getminor(fp->f_file, minorp); + if (error == 0) + error = zfs_zevent_minor_to_state(*minorp, ze); + + if (error) + zfs_zevent_fd_rele(fd); + + return (error); +} + +void +zfs_zevent_fd_rele(int fd) +{ + releasef(fd); +} + +/* + * Get the next zevent in the stream and place a copy in 'event'. This + * may fail with ENOMEM if the encoded nvlist size exceeds the passed + * 'event_size'. In this case the stream pointer is not advanced and + * and 'event_size' is set to the minimum required buffer size. + */ +int +zfs_zevent_next(zfs_zevent_t *ze, nvlist_t **event, uint64_t *event_size, + uint64_t *dropped) +{ + zevent_t *ev; + size_t size; + int error = 0; + + mutex_enter(&zevent_lock); + if (ze->ze_zevent == NULL) { + /* New stream start at the beginning/tail */ + ev = list_tail(&zevent_list); + if (ev == NULL) { + error = ENOENT; + goto out; + } + } else { + /* + * Existing stream continue with the next element and remove + * ourselves from the wait queue for the previous element + */ + ev = list_prev(&zevent_list, ze->ze_zevent); + if (ev == NULL) { + error = ENOENT; + goto out; + } + } + + VERIFY(nvlist_size(ev->ev_nvl, &size, NV_ENCODE_NATIVE) == 0); + if (size > *event_size) { + *event_size = size; + error = ENOMEM; + goto out; + } + + if (ze->ze_zevent) + list_remove(&ze->ze_zevent->ev_ze_list, ze); + + ze->ze_zevent = ev; + list_insert_head(&ev->ev_ze_list, ze); + (void) nvlist_dup(ev->ev_nvl, event, KM_SLEEP); + *dropped = ze->ze_dropped; + +#ifdef _KERNEL + /* Include events dropped due to rate limiting */ + *dropped += ratelimit_dropped; + ratelimit_dropped = 0; +#endif + ze->ze_dropped = 0; +out: + mutex_exit(&zevent_lock); + + return (error); +} + +int +zfs_zevent_wait(zfs_zevent_t *ze) +{ + int error = 0; + + mutex_enter(&zevent_lock); + + if (zevent_flags & ZEVENT_SHUTDOWN) { + error = ESHUTDOWN; + goto out; + } + + zevent_waiters++; + cv_wait_sig(&zevent_cv, &zevent_lock); + if (issig(JUSTLOOKING)) + error = EINTR; + + zevent_waiters--; +out: + mutex_exit(&zevent_lock); + + return (error); +} + +/* + * The caller may seek to a specific EID by passing that EID. If the EID + * is still available in the posted list of events the cursor is positioned + * there. Otherwise ENOENT is returned and the cursor is not moved. + * + * There are two reserved EIDs which may be passed and will never fail. + * ZEVENT_SEEK_START positions the cursor at the start of the list, and + * ZEVENT_SEEK_END positions the cursor at the end of the list. + */ +int +zfs_zevent_seek(zfs_zevent_t *ze, uint64_t eid) +{ + zevent_t *ev; + int error = 0; + + mutex_enter(&zevent_lock); + + if (eid == ZEVENT_SEEK_START) { + if (ze->ze_zevent) + list_remove(&ze->ze_zevent->ev_ze_list, ze); + + ze->ze_zevent = NULL; + goto out; + } + + if (eid == ZEVENT_SEEK_END) { + if (ze->ze_zevent) + list_remove(&ze->ze_zevent->ev_ze_list, ze); + + ev = list_head(&zevent_list); + if (ev) { + ze->ze_zevent = ev; + list_insert_head(&ev->ev_ze_list, ze); + } else { + ze->ze_zevent = NULL; + } + + goto out; + } + + for (ev = list_tail(&zevent_list); ev != NULL; + ev = list_prev(&zevent_list, ev)) { + if (ev->ev_eid == eid) { + if (ze->ze_zevent) + list_remove(&ze->ze_zevent->ev_ze_list, ze); + + ze->ze_zevent = ev; + list_insert_head(&ev->ev_ze_list, ze); + break; + } + } + + if (ev == NULL) + error = ENOENT; + +out: + mutex_exit(&zevent_lock); + + return (error); +} + +void +zfs_zevent_init(zfs_zevent_t **zep) +{ + zfs_zevent_t *ze; + + ze = *zep = kmem_zalloc(sizeof (zfs_zevent_t), KM_SLEEP); + list_link_init(&ze->ze_node); +} + +void +zfs_zevent_destroy(zfs_zevent_t *ze) +{ + mutex_enter(&zevent_lock); + if (ze->ze_zevent) + list_remove(&ze->ze_zevent->ev_ze_list, ze); + mutex_exit(&zevent_lock); + + kmem_free(ze, sizeof (zfs_zevent_t)); +} +#endif /* _KERNEL */ + +/* + * Wrapppers for FM nvlist allocators + */ +/* ARGSUSED */ +static void * +i_fm_alloc(nv_alloc_t *nva, size_t size) +{ + return (kmem_zalloc(size, KM_SLEEP)); +} + +/* ARGSUSED */ +static void +i_fm_free(nv_alloc_t *nva, void *buf, size_t size) +{ + kmem_free(buf, size); +} + +const nv_alloc_ops_t fm_mem_alloc_ops = { + .nv_ao_init = NULL, + .nv_ao_fini = NULL, + .nv_ao_alloc = i_fm_alloc, + .nv_ao_free = i_fm_free, + .nv_ao_reset = NULL +}; + +/* + * Create and initialize a new nv_alloc_t for a fixed buffer, buf. A pointer + * to the newly allocated nv_alloc_t structure is returned upon success or NULL + * is returned to indicate that the nv_alloc structure could not be created. + */ +nv_alloc_t * +fm_nva_xcreate(char *buf, size_t bufsz) +{ + nv_alloc_t *nvhdl = kmem_zalloc(sizeof (nv_alloc_t), KM_SLEEP); + + if (bufsz == 0 || nv_alloc_init(nvhdl, nv_fixed_ops, buf, bufsz) != 0) { + kmem_free(nvhdl, sizeof (nv_alloc_t)); + return (NULL); + } + + return (nvhdl); +} + +/* + * Destroy a previously allocated nv_alloc structure. The fixed buffer + * associated with nva must be freed by the caller. + */ +void +fm_nva_xdestroy(nv_alloc_t *nva) +{ + nv_alloc_fini(nva); + kmem_free(nva, sizeof (nv_alloc_t)); +} + +/* + * Create a new nv list. A pointer to a new nv list structure is returned + * upon success or NULL is returned to indicate that the structure could + * not be created. The newly created nv list is created and managed by the + * operations installed in nva. If nva is NULL, the default FMA nva + * operations are installed and used. + * + * When called from the kernel and nva == NULL, this function must be called + * from passive kernel context with no locks held that can prevent a + * sleeping memory allocation from occurring. Otherwise, this function may + * be called from other kernel contexts as long a valid nva created via + * fm_nva_create() is supplied. + */ +nvlist_t * +fm_nvlist_create(nv_alloc_t *nva) +{ + int hdl_alloced = 0; + nvlist_t *nvl; + nv_alloc_t *nvhdl; + + if (nva == NULL) { + nvhdl = kmem_zalloc(sizeof (nv_alloc_t), KM_SLEEP); + + if (nv_alloc_init(nvhdl, &fm_mem_alloc_ops, NULL, 0) != 0) { + kmem_free(nvhdl, sizeof (nv_alloc_t)); + return (NULL); + } + hdl_alloced = 1; + } else { + nvhdl = nva; + } + + if (nvlist_xalloc(&nvl, NV_UNIQUE_NAME, nvhdl) != 0) { + if (hdl_alloced) { + nv_alloc_fini(nvhdl); + kmem_free(nvhdl, sizeof (nv_alloc_t)); + } + return (NULL); + } + + return (nvl); +} + +/* + * Destroy a previously allocated nvlist structure. flag indicates whether + * or not the associated nva structure should be freed (FM_NVA_FREE) or + * retained (FM_NVA_RETAIN). Retaining the nv alloc structure allows + * it to be re-used for future nvlist creation operations. + */ +void +fm_nvlist_destroy(nvlist_t *nvl, int flag) +{ + nv_alloc_t *nva = nvlist_lookup_nv_alloc(nvl); + + nvlist_free(nvl); + + if (nva != NULL) { + if (flag == FM_NVA_FREE) + fm_nva_xdestroy(nva); + } +} + +int +i_fm_payload_set(nvlist_t *payload, const char *name, va_list ap) +{ + int nelem, ret = 0; + data_type_t type; + + while (ret == 0 && name != NULL) { + type = va_arg(ap, data_type_t); + switch (type) { + case DATA_TYPE_BYTE: + ret = nvlist_add_byte(payload, name, + va_arg(ap, uint_t)); + break; + case DATA_TYPE_BYTE_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_byte_array(payload, name, + va_arg(ap, uchar_t *), nelem); + break; + case DATA_TYPE_BOOLEAN_VALUE: + ret = nvlist_add_boolean_value(payload, name, + va_arg(ap, boolean_t)); + break; + case DATA_TYPE_BOOLEAN_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_boolean_array(payload, name, + va_arg(ap, boolean_t *), nelem); + break; + case DATA_TYPE_INT8: + ret = nvlist_add_int8(payload, name, + va_arg(ap, int)); + break; + case DATA_TYPE_INT8_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_int8_array(payload, name, + va_arg(ap, int8_t *), nelem); + break; + case DATA_TYPE_UINT8: + ret = nvlist_add_uint8(payload, name, + va_arg(ap, uint_t)); + break; + case DATA_TYPE_UINT8_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_uint8_array(payload, name, + va_arg(ap, uint8_t *), nelem); + break; + case DATA_TYPE_INT16: + ret = nvlist_add_int16(payload, name, + va_arg(ap, int)); + break; + case DATA_TYPE_INT16_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_int16_array(payload, name, + va_arg(ap, int16_t *), nelem); + break; + case DATA_TYPE_UINT16: + ret = nvlist_add_uint16(payload, name, + va_arg(ap, uint_t)); + break; + case DATA_TYPE_UINT16_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_uint16_array(payload, name, + va_arg(ap, uint16_t *), nelem); + break; + case DATA_TYPE_INT32: + ret = nvlist_add_int32(payload, name, + va_arg(ap, int32_t)); + break; + case DATA_TYPE_INT32_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_int32_array(payload, name, + va_arg(ap, int32_t *), nelem); + break; + case DATA_TYPE_UINT32: + ret = nvlist_add_uint32(payload, name, + va_arg(ap, uint32_t)); + break; + case DATA_TYPE_UINT32_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_uint32_array(payload, name, + va_arg(ap, uint32_t *), nelem); + break; + case DATA_TYPE_INT64: + ret = nvlist_add_int64(payload, name, + va_arg(ap, int64_t)); + break; + case DATA_TYPE_INT64_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_int64_array(payload, name, + va_arg(ap, int64_t *), nelem); + break; + case DATA_TYPE_UINT64: + ret = nvlist_add_uint64(payload, name, + va_arg(ap, uint64_t)); + break; + case DATA_TYPE_UINT64_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_uint64_array(payload, name, + va_arg(ap, uint64_t *), nelem); + break; + case DATA_TYPE_STRING: + ret = nvlist_add_string(payload, name, + va_arg(ap, char *)); + break; + case DATA_TYPE_STRING_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_string_array(payload, name, + va_arg(ap, char **), nelem); + break; + case DATA_TYPE_NVLIST: + ret = nvlist_add_nvlist(payload, name, + va_arg(ap, nvlist_t *)); + break; + case DATA_TYPE_NVLIST_ARRAY: + nelem = va_arg(ap, int); + ret = nvlist_add_nvlist_array(payload, name, + va_arg(ap, nvlist_t **), nelem); + break; + default: + ret = EINVAL; + } + + name = va_arg(ap, char *); + } + return (ret); +} + +void +fm_payload_set(nvlist_t *payload, ...) +{ + int ret; + const char *name; + va_list ap; + + va_start(ap, payload); + name = va_arg(ap, char *); + ret = i_fm_payload_set(payload, name, ap); + va_end(ap); + + if (ret) + atomic_inc_64(&erpt_kstat_data.payload_set_failed.value.ui64); +} + +/* + * Set-up and validate the members of an ereport event according to: + * + * Member name Type Value + * ==================================================== + * class string ereport + * version uint8_t 0 + * ena uint64_t + * detector nvlist_t + * ereport-payload nvlist_t + * + * We don't actually add a 'version' member to the payload. Really, + * the version quoted to us by our caller is that of the category 1 + * "ereport" event class (and we require FM_EREPORT_VERS0) but + * the payload version of the actual leaf class event under construction + * may be something else. Callers should supply a version in the varargs, + * or (better) we could take two version arguments - one for the + * ereport category 1 classification (expect FM_EREPORT_VERS0) and one + * for the leaf class. + */ +void +fm_ereport_set(nvlist_t *ereport, int version, const char *erpt_class, + uint64_t ena, const nvlist_t *detector, ...) +{ + char ereport_class[FM_MAX_CLASS]; + const char *name; + va_list ap; + int ret; + + if (version != FM_EREPORT_VERS0) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + return; + } + + (void) snprintf(ereport_class, FM_MAX_CLASS, "%s.%s", + FM_EREPORT_CLASS, erpt_class); + if (nvlist_add_string(ereport, FM_CLASS, ereport_class) != 0) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + return; + } + + if (nvlist_add_uint64(ereport, FM_EREPORT_ENA, ena)) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + } + + if (nvlist_add_nvlist(ereport, FM_EREPORT_DETECTOR, + (nvlist_t *)detector) != 0) { + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); + } + + va_start(ap, detector); + name = va_arg(ap, const char *); + ret = i_fm_payload_set(ereport, name, ap); + va_end(ap); + + if (ret) + atomic_inc_64(&erpt_kstat_data.erpt_set_failed.value.ui64); +} + +/* + * Set-up and validate the members of an hc fmri according to; + * + * Member name Type Value + * =================================================== + * version uint8_t 0 + * auth nvlist_t + * hc-name string + * hc-id string + * + * Note that auth and hc-id are optional members. + */ + +#define HC_MAXPAIRS 20 +#define HC_MAXNAMELEN 50 + +static int +fm_fmri_hc_set_common(nvlist_t *fmri, int version, const nvlist_t *auth) +{ + if (version != FM_HC_SCHEME_VERSION) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return (0); + } + + if (nvlist_add_uint8(fmri, FM_VERSION, version) != 0 || + nvlist_add_string(fmri, FM_FMRI_SCHEME, FM_FMRI_SCHEME_HC) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return (0); + } + + if (auth != NULL && nvlist_add_nvlist(fmri, FM_FMRI_AUTHORITY, + (nvlist_t *)auth) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return (0); + } + + return (1); +} + +void +fm_fmri_hc_set(nvlist_t *fmri, int version, const nvlist_t *auth, + nvlist_t *snvl, int npairs, ...) +{ + nv_alloc_t *nva = nvlist_lookup_nv_alloc(fmri); + nvlist_t *pairs[HC_MAXPAIRS]; + va_list ap; + int i; + + if (!fm_fmri_hc_set_common(fmri, version, auth)) + return; + + npairs = MIN(npairs, HC_MAXPAIRS); + + va_start(ap, npairs); + for (i = 0; i < npairs; i++) { + const char *name = va_arg(ap, const char *); + uint32_t id = va_arg(ap, uint32_t); + char idstr[11]; + + (void) snprintf(idstr, sizeof (idstr), "%u", id); + + pairs[i] = fm_nvlist_create(nva); + if (nvlist_add_string(pairs[i], FM_FMRI_HC_NAME, name) != 0 || + nvlist_add_string(pairs[i], FM_FMRI_HC_ID, idstr) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + } + va_end(ap); + + if (nvlist_add_nvlist_array(fmri, FM_FMRI_HC_LIST, pairs, npairs) != 0) + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + + for (i = 0; i < npairs; i++) + fm_nvlist_destroy(pairs[i], FM_NVA_RETAIN); + + if (snvl != NULL) { + if (nvlist_add_nvlist(fmri, FM_FMRI_HC_SPECIFIC, snvl) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + } +} + +void +fm_fmri_hc_create(nvlist_t *fmri, int version, const nvlist_t *auth, + nvlist_t *snvl, nvlist_t *bboard, int npairs, ...) +{ + nv_alloc_t *nva = nvlist_lookup_nv_alloc(fmri); + nvlist_t *pairs[HC_MAXPAIRS]; + nvlist_t **hcl; + uint_t n; + int i, j; + va_list ap; + char *hcname, *hcid; + + if (!fm_fmri_hc_set_common(fmri, version, auth)) + return; + + /* + * copy the bboard nvpairs to the pairs array + */ + if (nvlist_lookup_nvlist_array(bboard, FM_FMRI_HC_LIST, &hcl, &n) + != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + for (i = 0; i < n; i++) { + if (nvlist_lookup_string(hcl[i], FM_FMRI_HC_NAME, + &hcname) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + if (nvlist_lookup_string(hcl[i], FM_FMRI_HC_ID, &hcid) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + pairs[i] = fm_nvlist_create(nva); + if (nvlist_add_string(pairs[i], FM_FMRI_HC_NAME, hcname) != 0 || + nvlist_add_string(pairs[i], FM_FMRI_HC_ID, hcid) != 0) { + for (j = 0; j <= i; j++) { + if (pairs[j] != NULL) + fm_nvlist_destroy(pairs[j], + FM_NVA_RETAIN); + } + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + } + + /* + * create the pairs from passed in pairs + */ + npairs = MIN(npairs, HC_MAXPAIRS); + + va_start(ap, npairs); + for (i = n; i < npairs + n; i++) { + const char *name = va_arg(ap, const char *); + uint32_t id = va_arg(ap, uint32_t); + char idstr[11]; + (void) snprintf(idstr, sizeof (idstr), "%u", id); + pairs[i] = fm_nvlist_create(nva); + if (nvlist_add_string(pairs[i], FM_FMRI_HC_NAME, name) != 0 || + nvlist_add_string(pairs[i], FM_FMRI_HC_ID, idstr) != 0) { + for (j = 0; j <= i; j++) { + if (pairs[j] != NULL) + fm_nvlist_destroy(pairs[j], + FM_NVA_RETAIN); + } + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + } + va_end(ap); + + /* + * Create the fmri hc list + */ + if (nvlist_add_nvlist_array(fmri, FM_FMRI_HC_LIST, pairs, + npairs + n) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + for (i = 0; i < npairs + n; i++) { + fm_nvlist_destroy(pairs[i], FM_NVA_RETAIN); + } + + if (snvl != NULL) { + if (nvlist_add_nvlist(fmri, FM_FMRI_HC_SPECIFIC, snvl) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + } +} + +/* + * Set-up and validate the members of an dev fmri according to: + * + * Member name Type Value + * ==================================================== + * version uint8_t 0 + * auth nvlist_t + * devpath string + * [devid] string + * [target-port-l0id] string + * + * Note that auth and devid are optional members. + */ +void +fm_fmri_dev_set(nvlist_t *fmri_dev, int version, const nvlist_t *auth, + const char *devpath, const char *devid, const char *tpl0) +{ + int err = 0; + + if (version != DEV_SCHEME_VERSION0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + err |= nvlist_add_uint8(fmri_dev, FM_VERSION, version); + err |= nvlist_add_string(fmri_dev, FM_FMRI_SCHEME, FM_FMRI_SCHEME_DEV); + + if (auth != NULL) { + err |= nvlist_add_nvlist(fmri_dev, FM_FMRI_AUTHORITY, + (nvlist_t *)auth); + } + + err |= nvlist_add_string(fmri_dev, FM_FMRI_DEV_PATH, devpath); + + if (devid != NULL) + err |= nvlist_add_string(fmri_dev, FM_FMRI_DEV_ID, devid); + + if (tpl0 != NULL) + err |= nvlist_add_string(fmri_dev, FM_FMRI_DEV_TGTPTLUN0, tpl0); + + if (err) + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + +} + +/* + * Set-up and validate the members of an cpu fmri according to: + * + * Member name Type Value + * ==================================================== + * version uint8_t 0 + * auth nvlist_t + * cpuid uint32_t + * cpumask uint8_t + * serial uint64_t + * + * Note that auth, cpumask, serial are optional members. + * + */ +void +fm_fmri_cpu_set(nvlist_t *fmri_cpu, int version, const nvlist_t *auth, + uint32_t cpu_id, uint8_t *cpu_maskp, const char *serial_idp) +{ + uint64_t *failedp = &erpt_kstat_data.fmri_set_failed.value.ui64; + + if (version < CPU_SCHEME_VERSION1) { + atomic_inc_64(failedp); + return; + } + + if (nvlist_add_uint8(fmri_cpu, FM_VERSION, version) != 0) { + atomic_inc_64(failedp); + return; + } + + if (nvlist_add_string(fmri_cpu, FM_FMRI_SCHEME, + FM_FMRI_SCHEME_CPU) != 0) { + atomic_inc_64(failedp); + return; + } + + if (auth != NULL && nvlist_add_nvlist(fmri_cpu, FM_FMRI_AUTHORITY, + (nvlist_t *)auth) != 0) + atomic_inc_64(failedp); + + if (nvlist_add_uint32(fmri_cpu, FM_FMRI_CPU_ID, cpu_id) != 0) + atomic_inc_64(failedp); + + if (cpu_maskp != NULL && nvlist_add_uint8(fmri_cpu, FM_FMRI_CPU_MASK, + *cpu_maskp) != 0) + atomic_inc_64(failedp); + + if (serial_idp == NULL || nvlist_add_string(fmri_cpu, + FM_FMRI_CPU_SERIAL_ID, (char *)serial_idp) != 0) + atomic_inc_64(failedp); +} + +/* + * Set-up and validate the members of a mem according to: + * + * Member name Type Value + * ==================================================== + * version uint8_t 0 + * auth nvlist_t [optional] + * unum string + * serial string [optional*] + * offset uint64_t [optional] + * + * * serial is required if offset is present + */ +void +fm_fmri_mem_set(nvlist_t *fmri, int version, const nvlist_t *auth, + const char *unum, const char *serial, uint64_t offset) +{ + if (version != MEM_SCHEME_VERSION0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (!serial && (offset != (uint64_t)-1)) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (nvlist_add_uint8(fmri, FM_VERSION, version) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (nvlist_add_string(fmri, FM_FMRI_SCHEME, FM_FMRI_SCHEME_MEM) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (auth != NULL) { + if (nvlist_add_nvlist(fmri, FM_FMRI_AUTHORITY, + (nvlist_t *)auth) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + } + + if (nvlist_add_string(fmri, FM_FMRI_MEM_UNUM, unum) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + } + + if (serial != NULL) { + if (nvlist_add_string_array(fmri, FM_FMRI_MEM_SERIAL_ID, + (char **)&serial, 1) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + if (offset != (uint64_t)-1 && nvlist_add_uint64(fmri, + FM_FMRI_MEM_OFFSET, offset) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + } +} + +void +fm_fmri_zfs_set(nvlist_t *fmri, int version, uint64_t pool_guid, + uint64_t vdev_guid) +{ + if (version != ZFS_SCHEME_VERSION0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (nvlist_add_uint8(fmri, FM_VERSION, version) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (nvlist_add_string(fmri, FM_FMRI_SCHEME, FM_FMRI_SCHEME_ZFS) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + return; + } + + if (nvlist_add_uint64(fmri, FM_FMRI_ZFS_POOL, pool_guid) != 0) { + atomic_inc_64(&erpt_kstat_data.fmri_set_failed.value.ui64); + } + + if (vdev_guid != 0) { + if (nvlist_add_uint64(fmri, FM_FMRI_ZFS_VDEV, vdev_guid) != 0) { + atomic_inc_64( + &erpt_kstat_data.fmri_set_failed.value.ui64); + } + } +} + +uint64_t +fm_ena_increment(uint64_t ena) +{ + uint64_t new_ena; + + switch (ENA_FORMAT(ena)) { + case FM_ENA_FMT1: + new_ena = ena + (1 << ENA_FMT1_GEN_SHFT); + break; + case FM_ENA_FMT2: + new_ena = ena + (1 << ENA_FMT2_GEN_SHFT); + break; + default: + new_ena = 0; + } + + return (new_ena); +} + +uint64_t +fm_ena_generate_cpu(uint64_t timestamp, processorid_t cpuid, uchar_t format) +{ + uint64_t ena = 0; + + switch (format) { + case FM_ENA_FMT1: + if (timestamp) { + ena = (uint64_t)((format & ENA_FORMAT_MASK) | + ((cpuid << ENA_FMT1_CPUID_SHFT) & + ENA_FMT1_CPUID_MASK) | + ((timestamp << ENA_FMT1_TIME_SHFT) & + ENA_FMT1_TIME_MASK)); + } else { + ena = (uint64_t)((format & ENA_FORMAT_MASK) | + ((cpuid << ENA_FMT1_CPUID_SHFT) & + ENA_FMT1_CPUID_MASK) | + ((gethrtime() << ENA_FMT1_TIME_SHFT) & + ENA_FMT1_TIME_MASK)); + } + break; + case FM_ENA_FMT2: + ena = (uint64_t)((format & ENA_FORMAT_MASK) | + ((timestamp << ENA_FMT2_TIME_SHFT) & ENA_FMT2_TIME_MASK)); + break; + default: + break; + } + + return (ena); +} + +uint64_t +fm_ena_generate(uint64_t timestamp, uchar_t format) +{ + uint64_t ena; + + kpreempt_disable(); + ena = fm_ena_generate_cpu(timestamp, getcpuid(), format); + kpreempt_enable(); + + return (ena); +} + +uint64_t +fm_ena_generation_get(uint64_t ena) +{ + uint64_t gen; + + switch (ENA_FORMAT(ena)) { + case FM_ENA_FMT1: + gen = (ena & ENA_FMT1_GEN_MASK) >> ENA_FMT1_GEN_SHFT; + break; + case FM_ENA_FMT2: + gen = (ena & ENA_FMT2_GEN_MASK) >> ENA_FMT2_GEN_SHFT; + break; + default: + gen = 0; + break; + } + + return (gen); +} + +uchar_t +fm_ena_format_get(uint64_t ena) +{ + + return (ENA_FORMAT(ena)); +} + +uint64_t +fm_ena_id_get(uint64_t ena) +{ + uint64_t id; + + switch (ENA_FORMAT(ena)) { + case FM_ENA_FMT1: + id = (ena & ENA_FMT1_ID_MASK) >> ENA_FMT1_ID_SHFT; + break; + case FM_ENA_FMT2: + id = (ena & ENA_FMT2_ID_MASK) >> ENA_FMT2_ID_SHFT; + break; + default: + id = 0; + } + + return (id); +} + +uint64_t +fm_ena_time_get(uint64_t ena) +{ + uint64_t time; + + switch (ENA_FORMAT(ena)) { + case FM_ENA_FMT1: + time = (ena & ENA_FMT1_TIME_MASK) >> ENA_FMT1_TIME_SHFT; + break; + case FM_ENA_FMT2: + time = (ena & ENA_FMT2_TIME_MASK) >> ENA_FMT2_TIME_SHFT; + break; + default: + time = 0; + } + + return (time); +} + +#ifdef _KERNEL +/* + * Helper function to increment ereport dropped count. Used by the event + * rate limiting code to give feedback to the user about how many events were + * rate limited by including them in the 'dropped' count. + */ +void +fm_erpt_dropped_increment(void) +{ + atomic_inc_64(&ratelimit_dropped); +} +#endif + +#ifdef _KERNEL +void +fm_init(void) +{ + zevent_len_cur = 0; + zevent_flags = 0; + + if (zfs_zevent_len_max == 0) + zfs_zevent_len_max = ERPT_MAX_ERRS * MAX(max_ncpus, 4); + + /* Initialize zevent allocation and generation kstats */ + fm_ksp = kstat_create("zfs", 0, "fm", "misc", KSTAT_TYPE_NAMED, + sizeof (struct erpt_kstat) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + if (fm_ksp != NULL) { + fm_ksp->ks_data = &erpt_kstat_data; + kstat_install(fm_ksp); + } else { + cmn_err(CE_NOTE, "failed to create fm/misc kstat\n"); + } + + mutex_init(&zevent_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&zevent_list, sizeof (zevent_t), + offsetof(zevent_t, ev_node)); + cv_init(&zevent_cv, NULL, CV_DEFAULT, NULL); +} + +void +fm_fini(void) +{ + int count; + + zfs_zevent_drain_all(&count); + + mutex_enter(&zevent_lock); + cv_broadcast(&zevent_cv); + + zevent_flags |= ZEVENT_SHUTDOWN; + while (zevent_waiters > 0) { + mutex_exit(&zevent_lock); + schedule(); + mutex_enter(&zevent_lock); + } + mutex_exit(&zevent_lock); + + cv_destroy(&zevent_cv); + list_destroy(&zevent_list); + mutex_destroy(&zevent_lock); + + if (fm_ksp != NULL) { + kstat_delete(fm_ksp); + fm_ksp = NULL; + } +} + +module_param(zfs_zevent_len_max, int, 0644); +MODULE_PARM_DESC(zfs_zevent_len_max, "Max event queue length"); + +module_param(zfs_zevent_cols, int, 0644); +MODULE_PARM_DESC(zfs_zevent_cols, "Max event column width"); + +module_param(zfs_zevent_console, int, 0644); +MODULE_PARM_DESC(zfs_zevent_console, "Log events to the console"); + +#endif /* _KERNEL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/gzip.c +++ linux-aws-4.15.0/zfs/module/zfs/gzip.c @@ -0,0 +1,99 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + + +#include +#include +#include "qat_compress.h" + +#ifdef _KERNEL + +#include +#include + +typedef size_t zlen_t; +#define compress_func z_compress_level +#define uncompress_func z_uncompress + +#else /* _KERNEL */ + +#include +#include + +typedef uLongf zlen_t; +#define compress_func compress2 +#define uncompress_func uncompress + +#endif + +size_t +gzip_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + zlen_t dstlen = d_len; + + ASSERT(d_len <= s_len); + + /* check if hardware accelerator can be used */ + if (qat_use_accel(s_len)) { + if (qat_compress(QAT_COMPRESS, s_start, + s_len, d_start, d_len, &dstlen) == CPA_STATUS_SUCCESS) + return ((size_t)dstlen); + /* if hardware compress fail, do it again with software */ + } + + if (compress_func(d_start, &dstlen, s_start, s_len, n) != Z_OK) { + if (d_len != s_len) + return (s_len); + + bcopy(s_start, d_start, s_len); + return (s_len); + } + + return ((size_t)dstlen); +} + +/*ARGSUSED*/ +int +gzip_decompress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + zlen_t dstlen = d_len; + + ASSERT(d_len >= s_len); + + /* check if hardware accelerator can be used */ + if (qat_use_accel(d_len)) { + if (qat_compress(QAT_DECOMPRESS, s_start, s_len, + d_start, d_len, &dstlen) == CPA_STATUS_SUCCESS) + return (0); + /* if hardware de-compress fail, do it again with software */ + } + + if (uncompress_func(d_start, &dstlen, s_start, s_len) != Z_OK) + return (-1); + + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/lz4.c +++ linux-aws-4.15.0/zfs/module/zfs/lz4.c @@ -0,0 +1,1030 @@ +/* + * LZ4 - Fast LZ compression algorithm + * Header File + * Copyright (C) 2011-2013, Yann Collet. + * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at : + * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + * - LZ4 source repository : http://code.google.com/p/lz4/ + */ + +#include + +static int real_LZ4_compress(const char *source, char *dest, int isize, + int osize); +static int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, + int isize, int maxOutputSize); +static int LZ4_compressCtx(void *ctx, const char *source, char *dest, + int isize, int osize); +static int LZ4_compress64kCtx(void *ctx, const char *source, char *dest, + int isize, int osize); + +static kmem_cache_t *lz4_cache; + +/*ARGSUSED*/ +size_t +lz4_compress_zfs(void *s_start, void *d_start, size_t s_len, + size_t d_len, int n) +{ + uint32_t bufsiz; + char *dest = d_start; + + ASSERT(d_len >= sizeof (bufsiz)); + + bufsiz = real_LZ4_compress(s_start, &dest[sizeof (bufsiz)], s_len, + d_len - sizeof (bufsiz)); + + /* Signal an error if the compression routine returned zero. */ + if (bufsiz == 0) + return (s_len); + + /* + * Encode the compressed buffer size at the start. We'll need this in + * decompression to counter the effects of padding which might be + * added to the compressed buffer and which, if unhandled, would + * confuse the hell out of our decompression function. + */ + *(uint32_t *)dest = BE_32(bufsiz); + + return (bufsiz + sizeof (bufsiz)); +} + +/*ARGSUSED*/ +int +lz4_decompress_zfs(void *s_start, void *d_start, size_t s_len, + size_t d_len, int n) +{ + const char *src = s_start; + uint32_t bufsiz = BE_IN32(src); + + /* invalid compressed buffer size encoded at start */ + if (bufsiz + sizeof (bufsiz) > s_len) + return (1); + + /* + * Returns 0 on success (decompression function returned non-negative) + * and non-zero on failure (decompression function returned negative). + */ + return (LZ4_uncompress_unknownOutputSize(&src[sizeof (bufsiz)], + d_start, bufsiz, d_len) < 0); +} + +/* + * LZ4 API Description: + * + * Simple Functions: + * real_LZ4_compress() : + * isize : is the input size. Max supported value is ~1.9GB + * return : the number of bytes written in buffer dest + * or 0 if the compression fails (if LZ4_COMPRESSMIN is set). + * note : destination buffer must be already allocated. + * destination buffer must be sized to handle worst cases + * situations (input data not compressible) worst case size + * evaluation is provided by function LZ4_compressBound(). + * + * real_LZ4_uncompress() : + * osize : is the output size, therefore the original size + * return : the number of bytes read in the source buffer. + * If the source stream is malformed, the function will stop + * decoding and return a negative result, indicating the byte + * position of the faulty instruction. This function never + * writes beyond dest + osize, and is therefore protected + * against malicious data packets. + * note : destination buffer must be already allocated + * note : real_LZ4_uncompress() is not used in ZFS so its code + * is not present here. + * + * Advanced Functions + * + * LZ4_compressBound() : + * Provides the maximum size that LZ4 may output in a "worst case" + * scenario (input data not compressible) primarily useful for memory + * allocation of output buffer. + * + * isize : is the input size. Max supported value is ~1.9GB + * return : maximum output size in a "worst case" scenario + * note : this function is limited by "int" range (2^31-1) + * + * LZ4_uncompress_unknownOutputSize() : + * isize : is the input size, therefore the compressed size + * maxOutputSize : is the size of the destination buffer (which must be + * already allocated) + * return : the number of bytes decoded in the destination buffer + * (necessarily <= maxOutputSize). If the source stream is + * malformed, the function will stop decoding and return a + * negative result, indicating the byte position of the faulty + * instruction. This function never writes beyond dest + + * maxOutputSize, and is therefore protected against malicious + * data packets. + * note : Destination buffer must be already allocated. + * This version is slightly slower than real_LZ4_uncompress() + * + * LZ4_compressCtx() : + * This function explicitly handles the CTX memory structure. + * + * ILLUMOS CHANGES: the CTX memory structure must be explicitly allocated + * by the caller (either on the stack or using kmem_cache_alloc). Passing + * NULL isn't valid. + * + * LZ4_compress64kCtx() : + * Same as LZ4_compressCtx(), but specific to small inputs (<64KB). + * isize *Must* be <64KB, otherwise the output will be corrupted. + * + * ILLUMOS CHANGES: the CTX memory structure must be explicitly allocated + * by the caller (either on the stack or using kmem_cache_alloc). Passing + * NULL isn't valid. + */ + +/* + * Tuning parameters + */ + +/* + * COMPRESSIONLEVEL: Increasing this value improves compression ratio + * Lowering this value reduces memory usage. Reduced memory usage + * typically improves speed, due to cache effect (ex: L1 32KB for Intel, + * L1 64KB for AMD). Memory usage formula : N->2^(N+2) Bytes + * (examples : 12 -> 16KB ; 17 -> 512KB) + */ +#define COMPRESSIONLEVEL 12 + +/* + * NOTCOMPRESSIBLE_CONFIRMATION: Decreasing this value will make the + * algorithm skip faster data segments considered "incompressible". + * This may decrease compression ratio dramatically, but will be + * faster on incompressible data. Increasing this value will make + * the algorithm search more before declaring a segment "incompressible". + * This could improve compression a bit, but will be slower on + * incompressible data. The default value (6) is recommended. + */ +#define NOTCOMPRESSIBLE_CONFIRMATION 6 + +/* + * BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE: This will provide a boost to + * performance for big endian cpu, but the resulting compressed stream + * will be incompatible with little-endian CPU. You can set this option + * to 1 in situations where data will stay within closed environment. + * This option is useless on Little_Endian CPU (such as x86). + */ +/* #define BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE 1 */ + +/* + * CPU Feature Detection + */ + +/* 32 or 64 bits ? */ +#if defined(_LP64) +#define LZ4_ARCH64 1 +#else +#define LZ4_ARCH64 0 +#endif + +/* + * Little Endian or Big Endian? + * Note: overwrite the below #define if you know your architecture endianness. + */ +#if defined(_BIG_ENDIAN) +#define LZ4_BIG_ENDIAN 1 +#else +/* + * Little Endian assumed. PDP Endian and other very rare endian format + * are unsupported. + */ +#undef LZ4_BIG_ENDIAN +#endif + +/* + * Unaligned memory access is automatically enabled for "common" CPU, + * such as x86. For others CPU, the compiler will be more cautious, and + * insert extra code to ensure aligned access is respected. If you know + * your target CPU supports unaligned memory access, you may want to + * force this option manually to improve performance + */ +#if defined(__ARM_FEATURE_UNALIGNED) +#define LZ4_FORCE_UNALIGNED_ACCESS 1 +#endif + +/* + * Illumos : we can't use GCC's __builtin_ctz family of builtins in the + * kernel + * Linux : we can use GCC's __builtin_ctz family of builtins in the + * kernel + */ +#undef LZ4_FORCE_SW_BITCOUNT +#if defined(__sparc) +#define LZ4_FORCE_SW_BITCOUNT +#endif + +/* + * Compiler Options + */ +/* Disable restrict */ +#define restrict + +/* + * Linux : GCC_VERSION is defined as of 3.9-rc1, so undefine it. + * torvalds/linux@3f3f8d2f48acfd8ed3b8e6b7377935da57b27b16 + */ +#ifdef GCC_VERSION +#undef GCC_VERSION +#endif + +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +#if (GCC_VERSION >= 302) || (__INTEL_COMPILER >= 800) || defined(__clang__) +#define expect(expr, value) (__builtin_expect((expr), (value))) +#else +#define expect(expr, value) (expr) +#endif + +#ifndef likely +#define likely(expr) expect((expr) != 0, 1) +#endif + +#ifndef unlikely +#define unlikely(expr) expect((expr) != 0, 0) +#endif + +#define lz4_bswap16(x) ((unsigned short int) ((((x) >> 8) & 0xffu) | \ + (((x) & 0xffu) << 8))) + +/* Basic types */ +#define BYTE uint8_t +#define U16 uint16_t +#define U32 uint32_t +#define S32 int32_t +#define U64 uint64_t + +#ifndef LZ4_FORCE_UNALIGNED_ACCESS +#pragma pack(1) +#endif + +typedef struct _U16_S { + U16 v; +} U16_S; +typedef struct _U32_S { + U32 v; +} U32_S; +typedef struct _U64_S { + U64 v; +} U64_S; + +#ifndef LZ4_FORCE_UNALIGNED_ACCESS +#pragma pack() +#endif + +#define A64(x) (((U64_S *)(x))->v) +#define A32(x) (((U32_S *)(x))->v) +#define A16(x) (((U16_S *)(x))->v) + +/* + * Constants + */ +#define MINMATCH 4 + +#define HASH_LOG COMPRESSIONLEVEL +#define HASHTABLESIZE (1 << HASH_LOG) +#define HASH_MASK (HASHTABLESIZE - 1) + +#define SKIPSTRENGTH (NOTCOMPRESSIBLE_CONFIRMATION > 2 ? \ + NOTCOMPRESSIBLE_CONFIRMATION : 2) + +#define COPYLENGTH 8 +#define LASTLITERALS 5 +#define MFLIMIT (COPYLENGTH + MINMATCH) +#define MINLENGTH (MFLIMIT + 1) + +#define MAXD_LOG 16 +#define MAX_DISTANCE ((1 << MAXD_LOG) - 1) + +#define ML_BITS 4 +#define ML_MASK ((1U<> ((MINMATCH * 8) - \ + HASH_LOG)) +#define LZ4_HASH_VALUE(p) LZ4_HASH_FUNCTION(A32(p)) +#define LZ4_WILDCOPY(s, d, e) do { LZ4_COPYPACKET(s, d) } while (d < e); +#define LZ4_BLINDCOPY(s, d, l) { BYTE* e = (d) + l; LZ4_WILDCOPY(s, d, e); \ + d = e; } + + +/* Private functions */ +#if LZ4_ARCH64 + +static inline int +LZ4_NbCommonBytes(register U64 val) +{ +#if defined(LZ4_BIG_ENDIAN) +#if defined(__GNUC__) && (GCC_VERSION >= 304) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clzll(val) >> 3); +#else + int r; + if (!(val >> 32)) { + r = 4; + } else { + r = 0; + val >>= 32; + } + if (!(val >> 16)) { + r += 2; + val >>= 8; + } else { + val >>= 24; + } + r += (!val); + return (r); +#endif +#else +#if defined(__GNUC__) && (GCC_VERSION >= 304) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctzll(val) >> 3); +#else + static const int DeBruijnBytePos[64] = + { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, + 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, + 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, + 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 + }; + return DeBruijnBytePos[((U64) ((val & -val) * 0x0218A392CDABBD3F)) >> + 58]; +#endif +#endif +} + +#else + +static inline int +LZ4_NbCommonBytes(register U32 val) +{ +#if defined(LZ4_BIG_ENDIAN) +#if defined(__GNUC__) && (GCC_VERSION >= 304) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clz(val) >> 3); +#else + int r; + if (!(val >> 16)) { + r = 2; + val >>= 8; + } else { + r = 0; + val >>= 24; + } + r += (!val); + return (r); +#endif +#else +#if defined(__GNUC__) && (GCC_VERSION >= 304) && \ + !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctz(val) >> 3); +#else + static const int DeBruijnBytePos[32] = { + 0, 0, 3, 0, 3, 1, 3, 0, + 3, 2, 2, 1, 3, 2, 0, 1, + 3, 3, 1, 2, 2, 2, 2, 0, + 3, 1, 2, 0, 1, 0, 1, 1 + }; + return DeBruijnBytePos[((U32) ((val & -(S32) val) * 0x077CB531U)) >> + 27]; +#endif +#endif +} + +#endif + +/* Compression functions */ + +/*ARGSUSED*/ +static int +LZ4_compressCtx(void *ctx, const char *source, char *dest, int isize, + int osize) +{ + struct refTables *srt = (struct refTables *)ctx; + HTYPE *HashTable = (HTYPE *) (srt->hashTable); + + const BYTE *ip = (BYTE *) source; + INITBASE(base); + const BYTE *anchor = ip; + const BYTE *const iend = ip + isize; + const BYTE *const oend = (BYTE *) dest + osize; + const BYTE *const mflimit = iend - MFLIMIT; +#define matchlimit (iend - LASTLITERALS) + + BYTE *op = (BYTE *) dest; + + int len, length; + const int skipStrength = SKIPSTRENGTH; + U32 forwardH; + + + /* Init */ + if (isize < MINLENGTH) + goto _last_literals; + + /* First Byte */ + HashTable[LZ4_HASH_VALUE(ip)] = ip - base; + ip++; + forwardH = LZ4_HASH_VALUE(ip); + + /* Main Loop */ + for (;;) { + int findMatchAttempts = (1U << skipStrength) + 3; + const BYTE *forwardIp = ip; + const BYTE *ref; + BYTE *token; + + /* Find a match */ + do { + U32 h = forwardH; + int step = findMatchAttempts++ >> skipStrength; + ip = forwardIp; + forwardIp = ip + step; + + if (unlikely(forwardIp > mflimit)) { + goto _last_literals; + } + + forwardH = LZ4_HASH_VALUE(forwardIp); + ref = base + HashTable[h]; + HashTable[h] = ip - base; + + } while ((ref < ip - MAX_DISTANCE) || (A32(ref) != A32(ip))); + + /* Catch up */ + while ((ip > anchor) && (ref > (BYTE *) source) && + unlikely(ip[-1] == ref[-1])) { + ip--; + ref--; + } + + /* Encode Literal length */ + length = ip - anchor; + token = op++; + + /* Check output limit */ + if (unlikely(op + length + (2 + 1 + LASTLITERALS) + + (length >> 8) > oend)) + return (0); + + if (length >= (int)RUN_MASK) { + *token = (RUN_MASK << ML_BITS); + len = length - RUN_MASK; + for (; len > 254; len -= 255) + *op++ = 255; + *op++ = (BYTE)len; + } else + *token = (length << ML_BITS); + + /* Copy Literals */ + LZ4_BLINDCOPY(anchor, op, length); + + _next_match: + /* Encode Offset */ + LZ4_WRITE_LITTLEENDIAN_16(op, ip - ref); + + /* Start Counting */ + ip += MINMATCH; + ref += MINMATCH; /* MinMatch verified */ + anchor = ip; + while (likely(ip < matchlimit - (STEPSIZE - 1))) { + UARCH diff = AARCH(ref) ^ AARCH(ip); + if (!diff) { + ip += STEPSIZE; + ref += STEPSIZE; + continue; + } + ip += LZ4_NbCommonBytes(diff); + goto _endCount; + } +#if LZ4_ARCH64 + if ((ip < (matchlimit - 3)) && (A32(ref) == A32(ip))) { + ip += 4; + ref += 4; + } +#endif + if ((ip < (matchlimit - 1)) && (A16(ref) == A16(ip))) { + ip += 2; + ref += 2; + } + if ((ip < matchlimit) && (*ref == *ip)) + ip++; + _endCount: + + /* Encode MatchLength */ + len = (ip - anchor); + /* Check output limit */ + if (unlikely(op + (1 + LASTLITERALS) + (len >> 8) > oend)) + return (0); + if (len >= (int)ML_MASK) { + *token += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) { + *op++ = 255; + *op++ = 255; + } + if (len > 254) { + len -= 255; + *op++ = 255; + } + *op++ = (BYTE)len; + } else + *token += len; + + /* Test end of chunk */ + if (ip > mflimit) { + anchor = ip; + break; + } + /* Fill table */ + HashTable[LZ4_HASH_VALUE(ip - 2)] = ip - 2 - base; + + /* Test next position */ + ref = base + HashTable[LZ4_HASH_VALUE(ip)]; + HashTable[LZ4_HASH_VALUE(ip)] = ip - base; + if ((ref > ip - (MAX_DISTANCE + 1)) && (A32(ref) == A32(ip))) { + token = op++; + *token = 0; + goto _next_match; + } + /* Prepare next loop */ + anchor = ip++; + forwardH = LZ4_HASH_VALUE(ip); + } + + _last_literals: + /* Encode Last Literals */ + { + int lastRun = iend - anchor; + if (op + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > + oend) + return (0); + if (lastRun >= (int)RUN_MASK) { + *op++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) { + *op++ = 255; + } + *op++ = (BYTE)lastRun; + } else + *op++ = (lastRun << ML_BITS); + (void) memcpy(op, anchor, iend - anchor); + op += iend - anchor; + } + + /* End */ + return (int)(((char *)op) - dest); +} + + + +/* Note : this function is valid only if isize < LZ4_64KLIMIT */ +#define LZ4_64KLIMIT ((1 << 16) + (MFLIMIT - 1)) +#define HASHLOG64K (HASH_LOG + 1) +#define HASH64KTABLESIZE (1U << HASHLOG64K) +#define LZ4_HASH64K_FUNCTION(i) (((i) * 2654435761U) >> ((MINMATCH*8) - \ + HASHLOG64K)) +#define LZ4_HASH64K_VALUE(p) LZ4_HASH64K_FUNCTION(A32(p)) + +/*ARGSUSED*/ +static int +LZ4_compress64kCtx(void *ctx, const char *source, char *dest, int isize, + int osize) +{ + struct refTables *srt = (struct refTables *)ctx; + U16 *HashTable = (U16 *) (srt->hashTable); + + const BYTE *ip = (BYTE *) source; + const BYTE *anchor = ip; + const BYTE *const base = ip; + const BYTE *const iend = ip + isize; + const BYTE *const oend = (BYTE *) dest + osize; + const BYTE *const mflimit = iend - MFLIMIT; +#define matchlimit (iend - LASTLITERALS) + + BYTE *op = (BYTE *) dest; + + int len, length; + const int skipStrength = SKIPSTRENGTH; + U32 forwardH; + + /* Init */ + if (isize < MINLENGTH) + goto _last_literals; + + /* First Byte */ + ip++; + forwardH = LZ4_HASH64K_VALUE(ip); + + /* Main Loop */ + for (;;) { + int findMatchAttempts = (1U << skipStrength) + 3; + const BYTE *forwardIp = ip; + const BYTE *ref; + BYTE *token; + + /* Find a match */ + do { + U32 h = forwardH; + int step = findMatchAttempts++ >> skipStrength; + ip = forwardIp; + forwardIp = ip + step; + + if (forwardIp > mflimit) { + goto _last_literals; + } + + forwardH = LZ4_HASH64K_VALUE(forwardIp); + ref = base + HashTable[h]; + HashTable[h] = ip - base; + + } while (A32(ref) != A32(ip)); + + /* Catch up */ + while ((ip > anchor) && (ref > (BYTE *) source) && + (ip[-1] == ref[-1])) { + ip--; + ref--; + } + + /* Encode Literal length */ + length = ip - anchor; + token = op++; + + /* Check output limit */ + if (unlikely(op + length + (2 + 1 + LASTLITERALS) + + (length >> 8) > oend)) + return (0); + + if (length >= (int)RUN_MASK) { + *token = (RUN_MASK << ML_BITS); + len = length - RUN_MASK; + for (; len > 254; len -= 255) + *op++ = 255; + *op++ = (BYTE)len; + } else + *token = (length << ML_BITS); + + /* Copy Literals */ + LZ4_BLINDCOPY(anchor, op, length); + + _next_match: + /* Encode Offset */ + LZ4_WRITE_LITTLEENDIAN_16(op, ip - ref); + + /* Start Counting */ + ip += MINMATCH; + ref += MINMATCH; /* MinMatch verified */ + anchor = ip; + while (ip < matchlimit - (STEPSIZE - 1)) { + UARCH diff = AARCH(ref) ^ AARCH(ip); + if (!diff) { + ip += STEPSIZE; + ref += STEPSIZE; + continue; + } + ip += LZ4_NbCommonBytes(diff); + goto _endCount; + } +#if LZ4_ARCH64 + if ((ip < (matchlimit - 3)) && (A32(ref) == A32(ip))) { + ip += 4; + ref += 4; + } +#endif + if ((ip < (matchlimit - 1)) && (A16(ref) == A16(ip))) { + ip += 2; + ref += 2; + } + if ((ip < matchlimit) && (*ref == *ip)) + ip++; + _endCount: + + /* Encode MatchLength */ + len = (ip - anchor); + /* Check output limit */ + if (unlikely(op + (1 + LASTLITERALS) + (len >> 8) > oend)) + return (0); + if (len >= (int)ML_MASK) { + *token += ML_MASK; + len -= ML_MASK; + for (; len > 509; len -= 510) { + *op++ = 255; + *op++ = 255; + } + if (len > 254) { + len -= 255; + *op++ = 255; + } + *op++ = (BYTE)len; + } else + *token += len; + + /* Test end of chunk */ + if (ip > mflimit) { + anchor = ip; + break; + } + /* Fill table */ + HashTable[LZ4_HASH64K_VALUE(ip - 2)] = ip - 2 - base; + + /* Test next position */ + ref = base + HashTable[LZ4_HASH64K_VALUE(ip)]; + HashTable[LZ4_HASH64K_VALUE(ip)] = ip - base; + if (A32(ref) == A32(ip)) { + token = op++; + *token = 0; + goto _next_match; + } + /* Prepare next loop */ + anchor = ip++; + forwardH = LZ4_HASH64K_VALUE(ip); + } + + _last_literals: + /* Encode Last Literals */ + { + int lastRun = iend - anchor; + if (op + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > + oend) + return (0); + if (lastRun >= (int)RUN_MASK) { + *op++ = (RUN_MASK << ML_BITS); + lastRun -= RUN_MASK; + for (; lastRun > 254; lastRun -= 255) + *op++ = 255; + *op++ = (BYTE)lastRun; + } else + *op++ = (lastRun << ML_BITS); + (void) memcpy(op, anchor, iend - anchor); + op += iend - anchor; + } + + /* End */ + return (int)(((char *)op) - dest); +} + +static int +real_LZ4_compress(const char *source, char *dest, int isize, int osize) +{ + void *ctx; + int result; + + ASSERT(lz4_cache != NULL); + ctx = kmem_cache_alloc(lz4_cache, KM_SLEEP); + + /* + * out of kernel memory, gently fall through - this will disable + * compression in zio_compress_data + */ + if (ctx == NULL) + return (0); + + memset(ctx, 0, sizeof (struct refTables)); + + if (isize < LZ4_64KLIMIT) + result = LZ4_compress64kCtx(ctx, source, dest, isize, osize); + else + result = LZ4_compressCtx(ctx, source, dest, isize, osize); + + kmem_cache_free(lz4_cache, ctx); + return (result); +} + +/* Decompression functions */ + +/* + * Note: The decoding functions real_LZ4_uncompress() and + * LZ4_uncompress_unknownOutputSize() are safe against "buffer overflow" + * attack type. They will never write nor read outside of the provided + * output buffers. LZ4_uncompress_unknownOutputSize() also insures that + * it will never read outside of the input buffer. A corrupted input + * will produce an error result, a negative int, indicating the position + * of the error within input stream. + * + * Note[2]: real_LZ4_uncompress(), referred to above, is not used in ZFS so + * its code is not present here. + */ + +static const int dec32table[] = {0, 3, 2, 3, 0, 0, 0, 0}; +#if LZ4_ARCH64 +static const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; +#endif + +static int +LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, + int maxOutputSize) +{ + /* Local Variables */ + const BYTE *restrict ip = (const BYTE *) source; + const BYTE *const iend = ip + isize; + const BYTE *ref; + + BYTE *op = (BYTE *) dest; + BYTE *const oend = op + maxOutputSize; + BYTE *cpy; + + /* Main Loop */ + while (ip < iend) { + unsigned token; + size_t length; + + /* get runlength */ + token = *ip++; + if ((length = (token >> ML_BITS)) == RUN_MASK) { + int s = 255; + while ((ip < iend) && (s == 255)) { + s = *ip++; + if (unlikely(length > (size_t)(length + s))) + goto _output_error; + length += s; + } + } + /* copy literals */ + cpy = op + length; + /* CORNER-CASE: cpy might overflow. */ + if (cpy < op) + goto _output_error; /* cpy was overflowed, bail! */ + if ((cpy > oend - COPYLENGTH) || + (ip + length > iend - COPYLENGTH)) { + if (cpy > oend) + /* Error: writes beyond output buffer */ + goto _output_error; + if (ip + length != iend) + /* + * Error: LZ4 format requires to consume all + * input at this stage + */ + goto _output_error; + (void) memcpy(op, ip, length); + op += length; + /* Necessarily EOF, due to parsing restrictions */ + break; + } + LZ4_WILDCOPY(ip, op, cpy); + ip -= (op - cpy); + op = cpy; + + /* get offset */ + LZ4_READ_LITTLEENDIAN_16(ref, cpy, ip); + ip += 2; + if (ref < (BYTE * const) dest) + /* + * Error: offset creates reference outside of + * destination buffer + */ + goto _output_error; + + /* get matchlength */ + if ((length = (token & ML_MASK)) == ML_MASK) { + while (ip < iend) { + int s = *ip++; + if (unlikely(length > (size_t)(length + s))) + goto _output_error; + length += s; + if (s == 255) + continue; + break; + } + } + /* copy repeated sequence */ + if (unlikely(op - ref < STEPSIZE)) { +#if LZ4_ARCH64 + int dec64 = dec64table[op - ref]; +#else + const int dec64 = 0; +#endif + op[0] = ref[0]; + op[1] = ref[1]; + op[2] = ref[2]; + op[3] = ref[3]; + op += 4; + ref += 4; + ref -= dec32table[op - ref]; + A32(op) = A32(ref); + op += STEPSIZE - 4; + ref -= dec64; + } else { + LZ4_COPYSTEP(ref, op); + } + cpy = op + length - (STEPSIZE - 4); + if (cpy > oend - COPYLENGTH) { + if (cpy > oend) + /* + * Error: request to write outside of + * destination buffer + */ + goto _output_error; +#if LZ4_ARCH64 + if ((ref + COPYLENGTH) > oend) +#else + if ((ref + COPYLENGTH) > oend || + (op + COPYLENGTH) > oend) +#endif + goto _output_error; + LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH)); + while (op < cpy) + *op++ = *ref++; + op = cpy; + if (op == oend) + /* + * Check EOF (should never happen, since + * last 5 bytes are supposed to be literals) + */ + goto _output_error; + continue; + } + LZ4_SECURECOPY(ref, op, cpy); + op = cpy; /* correction */ + } + + /* end of decoding */ + return (int)(((char *)op) - dest); + + /* write overflow error detected */ + _output_error: + return (-1); +} + +void +lz4_init(void) +{ + lz4_cache = kmem_cache_create("lz4_cache", + sizeof (struct refTables), 0, NULL, NULL, NULL, NULL, NULL, 0); +} + +void +lz4_fini(void) +{ + if (lz4_cache) { + kmem_cache_destroy(lz4_cache); + lz4_cache = NULL; + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/lzjb.c +++ linux-aws-4.15.0/zfs/module/zfs/lzjb.c @@ -0,0 +1,131 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +/* + * We keep our own copy of this algorithm for 3 main reasons: + * 1. If we didn't, anyone modifying common/os/compress.c would + * directly break our on disk format + * 2. Our version of lzjb does not have a number of checks that the + * common/os version needs and uses + * 3. We initialize the lempel to ensure deterministic results, + * so that identical blocks can always be deduplicated. + * In particular, we are adding the "feature" that compress() can + * take a destination buffer size and returns the compressed length, or the + * source length if compression would overflow the destination buffer. + */ + +#include + +#define MATCH_BITS 6 +#define MATCH_MIN 3 +#define MATCH_MAX ((1 << MATCH_BITS) + (MATCH_MIN - 1)) +#define OFFSET_MASK ((1 << (16 - MATCH_BITS)) - 1) +#define LEMPEL_SIZE 1024 + +/*ARGSUSED*/ +size_t +lzjb_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + uchar_t *src = s_start; + uchar_t *dst = d_start; + uchar_t *cpy; + uchar_t *copymap = NULL; + int copymask = 1 << (NBBY - 1); + int mlen, offset, hash; + uint16_t *hp; + uint16_t *lempel; + + lempel = kmem_zalloc(LEMPEL_SIZE * sizeof (uint16_t), KM_SLEEP); + while (src < (uchar_t *)s_start + s_len) { + if ((copymask <<= 1) == (1 << NBBY)) { + if (dst >= (uchar_t *)d_start + d_len - 1 - 2 * NBBY) { + kmem_free(lempel, + LEMPEL_SIZE*sizeof (uint16_t)); + return (s_len); + } + copymask = 1; + copymap = dst; + *dst++ = 0; + } + if (src > (uchar_t *)s_start + s_len - MATCH_MAX) { + *dst++ = *src++; + continue; + } + hash = (src[0] << 16) + (src[1] << 8) + src[2]; + hash += hash >> 9; + hash += hash >> 5; + hp = &lempel[hash & (LEMPEL_SIZE - 1)]; + offset = (intptr_t)(src - *hp) & OFFSET_MASK; + *hp = (uint16_t)(uintptr_t)src; + cpy = src - offset; + if (cpy >= (uchar_t *)s_start && cpy != src && + src[0] == cpy[0] && src[1] == cpy[1] && src[2] == cpy[2]) { + *copymap |= copymask; + for (mlen = MATCH_MIN; mlen < MATCH_MAX; mlen++) + if (src[mlen] != cpy[mlen]) + break; + *dst++ = ((mlen - MATCH_MIN) << (NBBY - MATCH_BITS)) | + (offset >> NBBY); + *dst++ = (uchar_t)offset; + src += mlen; + } else { + *dst++ = *src++; + } + } + + kmem_free(lempel, LEMPEL_SIZE * sizeof (uint16_t)); + return (dst - (uchar_t *)d_start); +} + +/*ARGSUSED*/ +int +lzjb_decompress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + uchar_t *src = s_start; + uchar_t *dst = d_start; + uchar_t *d_end = (uchar_t *)d_start + d_len; + uchar_t *cpy; + uchar_t copymap = 0; + int copymask = 1 << (NBBY - 1); + + while (dst < d_end) { + if ((copymask <<= 1) == (1 << NBBY)) { + copymask = 1; + copymap = *src++; + } + if (copymap & copymask) { + int mlen = (src[0] >> (NBBY - MATCH_BITS)) + MATCH_MIN; + int offset = ((src[0] << NBBY) | src[1]) & OFFSET_MASK; + src += 2; + if ((cpy = dst - offset) < (uchar_t *)d_start) + return (-1); + while (--mlen >= 0 && dst < d_end) + *dst++ = *cpy++; + } else { + *dst++ = *src++; + } + } + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/metaslab.c +++ linux-aws-4.15.0/zfs/module/zfs/metaslab.c @@ -0,0 +1,3615 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define WITH_DF_BLOCK_ALLOCATOR + +#define GANG_ALLOCATION(flags) \ + ((flags) & (METASLAB_GANG_CHILD | METASLAB_GANG_HEADER)) + +/* + * Metaslab granularity, in bytes. This is roughly similar to what would be + * referred to as the "stripe size" in traditional RAID arrays. In normal + * operation, we will try to write this amount of data to a top-level vdev + * before moving on to the next one. + */ +unsigned long metaslab_aliquot = 512 << 10; + +uint64_t metaslab_gang_bang = SPA_MAXBLOCKSIZE + 1; /* force gang blocks */ + +/* + * The in-core space map representation is more compact than its on-disk form. + * The zfs_condense_pct determines how much more compact the in-core + * space map representation must be before we compact it on-disk. + * Values should be greater than or equal to 100. + */ +int zfs_condense_pct = 200; + +/* + * Condensing a metaslab is not guaranteed to actually reduce the amount of + * space used on disk. In particular, a space map uses data in increments of + * MAX(1 << ashift, space_map_blksz), so a metaslab might use the + * same number of blocks after condensing. Since the goal of condensing is to + * reduce the number of IOPs required to read the space map, we only want to + * condense when we can be sure we will reduce the number of blocks used by the + * space map. Unfortunately, we cannot precisely compute whether or not this is + * the case in metaslab_should_condense since we are holding ms_lock. Instead, + * we apply the following heuristic: do not condense a spacemap unless the + * uncondensed size consumes greater than zfs_metaslab_condense_block_threshold + * blocks. + */ +int zfs_metaslab_condense_block_threshold = 4; + +/* + * The zfs_mg_noalloc_threshold defines which metaslab groups should + * be eligible for allocation. The value is defined as a percentage of + * free space. Metaslab groups that have more free space than + * zfs_mg_noalloc_threshold are always eligible for allocations. Once + * a metaslab group's free space is less than or equal to the + * zfs_mg_noalloc_threshold the allocator will avoid allocating to that + * group unless all groups in the pool have reached zfs_mg_noalloc_threshold. + * Once all groups in the pool reach zfs_mg_noalloc_threshold then all + * groups are allowed to accept allocations. Gang blocks are always + * eligible to allocate on any metaslab group. The default value of 0 means + * no metaslab group will be excluded based on this criterion. + */ +int zfs_mg_noalloc_threshold = 0; + +/* + * Metaslab groups are considered eligible for allocations if their + * fragmenation metric (measured as a percentage) is less than or equal to + * zfs_mg_fragmentation_threshold. If a metaslab group exceeds this threshold + * then it will be skipped unless all metaslab groups within the metaslab + * class have also crossed this threshold. + */ +int zfs_mg_fragmentation_threshold = 85; + +/* + * Allow metaslabs to keep their active state as long as their fragmentation + * percentage is less than or equal to zfs_metaslab_fragmentation_threshold. An + * active metaslab that exceeds this threshold will no longer keep its active + * status allowing better metaslabs to be selected. + */ +int zfs_metaslab_fragmentation_threshold = 70; + +/* + * When set will load all metaslabs when pool is first opened. + */ +int metaslab_debug_load = 0; + +/* + * When set will prevent metaslabs from being unloaded. + */ +int metaslab_debug_unload = 0; + +/* + * Minimum size which forces the dynamic allocator to change + * it's allocation strategy. Once the space map cannot satisfy + * an allocation of this size then it switches to using more + * aggressive strategy (i.e search by size rather than offset). + */ +uint64_t metaslab_df_alloc_threshold = SPA_OLD_MAXBLOCKSIZE; + +/* + * The minimum free space, in percent, which must be available + * in a space map to continue allocations in a first-fit fashion. + * Once the space map's free space drops below this level we dynamically + * switch to using best-fit allocations. + */ +int metaslab_df_free_pct = 4; + +/* + * Percentage of all cpus that can be used by the metaslab taskq. + */ +int metaslab_load_pct = 50; + +/* + * Determines how many txgs a metaslab may remain loaded without having any + * allocations from it. As long as a metaslab continues to be used we will + * keep it loaded. + */ +int metaslab_unload_delay = TXG_SIZE * 2; + +/* + * Max number of metaslabs per group to preload. + */ +int metaslab_preload_limit = SPA_DVAS_PER_BP; + +/* + * Enable/disable preloading of metaslab. + */ +int metaslab_preload_enabled = B_TRUE; + +/* + * Enable/disable fragmentation weighting on metaslabs. + */ +int metaslab_fragmentation_factor_enabled = B_TRUE; + +/* + * Enable/disable lba weighting (i.e. outer tracks are given preference). + */ +int metaslab_lba_weighting_enabled = B_TRUE; + +/* + * Enable/disable metaslab group biasing. + */ +int metaslab_bias_enabled = B_TRUE; + + +/* + * Enable/disable segment-based metaslab selection. + */ +int zfs_metaslab_segment_weight_enabled = B_TRUE; + +/* + * When using segment-based metaslab selection, we will continue + * allocating from the active metaslab until we have exhausted + * zfs_metaslab_switch_threshold of its buckets. + */ +int zfs_metaslab_switch_threshold = 2; + +/* + * Internal switch to enable/disable the metaslab allocation tracing + * facility. + */ +#ifdef _METASLAB_TRACING +boolean_t metaslab_trace_enabled = B_TRUE; +#endif + +/* + * Maximum entries that the metaslab allocation tracing facility will keep + * in a given list when running in non-debug mode. We limit the number + * of entries in non-debug mode to prevent us from using up too much memory. + * The limit should be sufficiently large that we don't expect any allocation + * to every exceed this value. In debug mode, the system will panic if this + * limit is ever reached allowing for further investigation. + */ +#ifdef _METASLAB_TRACING +uint64_t metaslab_trace_max_entries = 5000; +#endif + +static uint64_t metaslab_weight(metaslab_t *); +static void metaslab_set_fragmentation(metaslab_t *); + +#ifdef _METASLAB_TRACING +kmem_cache_t *metaslab_alloc_trace_cache; +#endif + +/* + * ========================================================================== + * Metaslab classes + * ========================================================================== + */ +metaslab_class_t * +metaslab_class_create(spa_t *spa, metaslab_ops_t *ops) +{ + metaslab_class_t *mc; + + mc = kmem_zalloc(sizeof (metaslab_class_t), KM_SLEEP); + + mc->mc_spa = spa; + mc->mc_rotor = NULL; + mc->mc_ops = ops; + mutex_init(&mc->mc_lock, NULL, MUTEX_DEFAULT, NULL); + refcount_create_tracked(&mc->mc_alloc_slots); + + return (mc); +} + +void +metaslab_class_destroy(metaslab_class_t *mc) +{ + ASSERT(mc->mc_rotor == NULL); + ASSERT(mc->mc_alloc == 0); + ASSERT(mc->mc_deferred == 0); + ASSERT(mc->mc_space == 0); + ASSERT(mc->mc_dspace == 0); + + refcount_destroy(&mc->mc_alloc_slots); + mutex_destroy(&mc->mc_lock); + kmem_free(mc, sizeof (metaslab_class_t)); +} + +int +metaslab_class_validate(metaslab_class_t *mc) +{ + metaslab_group_t *mg; + vdev_t *vd; + + /* + * Must hold one of the spa_config locks. + */ + ASSERT(spa_config_held(mc->mc_spa, SCL_ALL, RW_READER) || + spa_config_held(mc->mc_spa, SCL_ALL, RW_WRITER)); + + if ((mg = mc->mc_rotor) == NULL) + return (0); + + do { + vd = mg->mg_vd; + ASSERT(vd->vdev_mg != NULL); + ASSERT3P(vd->vdev_top, ==, vd); + ASSERT3P(mg->mg_class, ==, mc); + ASSERT3P(vd->vdev_ops, !=, &vdev_hole_ops); + } while ((mg = mg->mg_next) != mc->mc_rotor); + + return (0); +} + +void +metaslab_class_space_update(metaslab_class_t *mc, int64_t alloc_delta, + int64_t defer_delta, int64_t space_delta, int64_t dspace_delta) +{ + atomic_add_64(&mc->mc_alloc, alloc_delta); + atomic_add_64(&mc->mc_deferred, defer_delta); + atomic_add_64(&mc->mc_space, space_delta); + atomic_add_64(&mc->mc_dspace, dspace_delta); +} + +uint64_t +metaslab_class_get_alloc(metaslab_class_t *mc) +{ + return (mc->mc_alloc); +} + +uint64_t +metaslab_class_get_deferred(metaslab_class_t *mc) +{ + return (mc->mc_deferred); +} + +uint64_t +metaslab_class_get_space(metaslab_class_t *mc) +{ + return (mc->mc_space); +} + +uint64_t +metaslab_class_get_dspace(metaslab_class_t *mc) +{ + return (spa_deflate(mc->mc_spa) ? mc->mc_dspace : mc->mc_space); +} + +void +metaslab_class_histogram_verify(metaslab_class_t *mc) +{ + vdev_t *rvd = mc->mc_spa->spa_root_vdev; + uint64_t *mc_hist; + int i, c; + + if ((zfs_flags & ZFS_DEBUG_HISTOGRAM_VERIFY) == 0) + return; + + mc_hist = kmem_zalloc(sizeof (uint64_t) * RANGE_TREE_HISTOGRAM_SIZE, + KM_SLEEP); + + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + /* + * Skip any holes, uninitialized top-levels, or + * vdevs that are not in this metalab class. + */ + if (tvd->vdev_ishole || tvd->vdev_ms_shift == 0 || + mg->mg_class != mc) { + continue; + } + + for (i = 0; i < RANGE_TREE_HISTOGRAM_SIZE; i++) + mc_hist[i] += mg->mg_histogram[i]; + } + + for (i = 0; i < RANGE_TREE_HISTOGRAM_SIZE; i++) + VERIFY3U(mc_hist[i], ==, mc->mc_histogram[i]); + + kmem_free(mc_hist, sizeof (uint64_t) * RANGE_TREE_HISTOGRAM_SIZE); +} + +/* + * Calculate the metaslab class's fragmentation metric. The metric + * is weighted based on the space contribution of each metaslab group. + * The return value will be a number between 0 and 100 (inclusive), or + * ZFS_FRAG_INVALID if the metric has not been set. See comment above the + * zfs_frag_table for more information about the metric. + */ +uint64_t +metaslab_class_fragmentation(metaslab_class_t *mc) +{ + vdev_t *rvd = mc->mc_spa->spa_root_vdev; + uint64_t fragmentation = 0; + int c; + + spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER); + + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + /* + * Skip any holes, uninitialized top-levels, or + * vdevs that are not in this metalab class. + */ + if (tvd->vdev_ishole || tvd->vdev_ms_shift == 0 || + mg->mg_class != mc) { + continue; + } + + /* + * If a metaslab group does not contain a fragmentation + * metric then just bail out. + */ + if (mg->mg_fragmentation == ZFS_FRAG_INVALID) { + spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); + return (ZFS_FRAG_INVALID); + } + + /* + * Determine how much this metaslab_group is contributing + * to the overall pool fragmentation metric. + */ + fragmentation += mg->mg_fragmentation * + metaslab_group_get_space(mg); + } + fragmentation /= metaslab_class_get_space(mc); + + ASSERT3U(fragmentation, <=, 100); + spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); + return (fragmentation); +} + +/* + * Calculate the amount of expandable space that is available in + * this metaslab class. If a device is expanded then its expandable + * space will be the amount of allocatable space that is currently not + * part of this metaslab class. + */ +uint64_t +metaslab_class_expandable_space(metaslab_class_t *mc) +{ + vdev_t *rvd = mc->mc_spa->spa_root_vdev; + uint64_t space = 0; + int c; + + spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER); + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + if (tvd->vdev_ishole || tvd->vdev_ms_shift == 0 || + mg->mg_class != mc) { + continue; + } + + /* + * Calculate if we have enough space to add additional + * metaslabs. We report the expandable space in terms + * of the metaslab size since that's the unit of expansion. + */ + space += P2ALIGN(tvd->vdev_max_asize - tvd->vdev_asize, + 1ULL << tvd->vdev_ms_shift); + } + spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); + return (space); +} + +static int +metaslab_compare(const void *x1, const void *x2) +{ + const metaslab_t *m1 = (const metaslab_t *)x1; + const metaslab_t *m2 = (const metaslab_t *)x2; + + int cmp = AVL_CMP(m2->ms_weight, m1->ms_weight); + if (likely(cmp)) + return (cmp); + + IMPLY(AVL_CMP(m1->ms_start, m2->ms_start) == 0, m1 == m2); + + return (AVL_CMP(m1->ms_start, m2->ms_start)); +} + +/* + * Verify that the space accounting on disk matches the in-core range_trees. + */ +void +metaslab_verify_space(metaslab_t *msp, uint64_t txg) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + uint64_t allocated = 0; + uint64_t sm_free_space, msp_free_space; + int t; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + if ((zfs_flags & ZFS_DEBUG_METASLAB_VERIFY) == 0) + return; + + /* + * We can only verify the metaslab space when we're called + * from syncing context with a loaded metaslab that has an allocated + * space map. Calling this in non-syncing context does not + * provide a consistent view of the metaslab since we're performing + * allocations in the future. + */ + if (txg != spa_syncing_txg(spa) || msp->ms_sm == NULL || + !msp->ms_loaded) + return; + + sm_free_space = msp->ms_size - space_map_allocated(msp->ms_sm) - + space_map_alloc_delta(msp->ms_sm); + + /* + * Account for future allocations since we would have already + * deducted that space from the ms_freetree. + */ + for (t = 0; t < TXG_CONCURRENT_STATES; t++) { + allocated += + range_tree_space(msp->ms_alloctree[(txg + t) & TXG_MASK]); + } + + msp_free_space = range_tree_space(msp->ms_tree) + allocated + + msp->ms_deferspace + range_tree_space(msp->ms_freedtree); + + VERIFY3U(sm_free_space, ==, msp_free_space); +} + +/* + * ========================================================================== + * Metaslab groups + * ========================================================================== + */ +/* + * Update the allocatable flag and the metaslab group's capacity. + * The allocatable flag is set to true if the capacity is below + * the zfs_mg_noalloc_threshold or has a fragmentation value that is + * greater than zfs_mg_fragmentation_threshold. If a metaslab group + * transitions from allocatable to non-allocatable or vice versa then the + * metaslab group's class is updated to reflect the transition. + */ +static void +metaslab_group_alloc_update(metaslab_group_t *mg) +{ + vdev_t *vd = mg->mg_vd; + metaslab_class_t *mc = mg->mg_class; + vdev_stat_t *vs = &vd->vdev_stat; + boolean_t was_allocatable; + boolean_t was_initialized; + + ASSERT(vd == vd->vdev_top); + + mutex_enter(&mg->mg_lock); + was_allocatable = mg->mg_allocatable; + was_initialized = mg->mg_initialized; + + mg->mg_free_capacity = ((vs->vs_space - vs->vs_alloc) * 100) / + (vs->vs_space + 1); + + mutex_enter(&mc->mc_lock); + + /* + * If the metaslab group was just added then it won't + * have any space until we finish syncing out this txg. + * At that point we will consider it initialized and available + * for allocations. We also don't consider non-activated + * metaslab groups (e.g. vdevs that are in the middle of being removed) + * to be initialized, because they can't be used for allocation. + */ + mg->mg_initialized = metaslab_group_initialized(mg); + if (!was_initialized && mg->mg_initialized) { + mc->mc_groups++; + } else if (was_initialized && !mg->mg_initialized) { + ASSERT3U(mc->mc_groups, >, 0); + mc->mc_groups--; + } + if (mg->mg_initialized) + mg->mg_no_free_space = B_FALSE; + + /* + * A metaslab group is considered allocatable if it has plenty + * of free space or is not heavily fragmented. We only take + * fragmentation into account if the metaslab group has a valid + * fragmentation metric (i.e. a value between 0 and 100). + */ + mg->mg_allocatable = (mg->mg_activation_count > 0 && + mg->mg_free_capacity > zfs_mg_noalloc_threshold && + (mg->mg_fragmentation == ZFS_FRAG_INVALID || + mg->mg_fragmentation <= zfs_mg_fragmentation_threshold)); + + /* + * The mc_alloc_groups maintains a count of the number of + * groups in this metaslab class that are still above the + * zfs_mg_noalloc_threshold. This is used by the allocating + * threads to determine if they should avoid allocations to + * a given group. The allocator will avoid allocations to a group + * if that group has reached or is below the zfs_mg_noalloc_threshold + * and there are still other groups that are above the threshold. + * When a group transitions from allocatable to non-allocatable or + * vice versa we update the metaslab class to reflect that change. + * When the mc_alloc_groups value drops to 0 that means that all + * groups have reached the zfs_mg_noalloc_threshold making all groups + * eligible for allocations. This effectively means that all devices + * are balanced again. + */ + if (was_allocatable && !mg->mg_allocatable) + mc->mc_alloc_groups--; + else if (!was_allocatable && mg->mg_allocatable) + mc->mc_alloc_groups++; + mutex_exit(&mc->mc_lock); + + mutex_exit(&mg->mg_lock); +} + +metaslab_group_t * +metaslab_group_create(metaslab_class_t *mc, vdev_t *vd) +{ + metaslab_group_t *mg; + + mg = kmem_zalloc(sizeof (metaslab_group_t), KM_SLEEP); + mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL); + avl_create(&mg->mg_metaslab_tree, metaslab_compare, + sizeof (metaslab_t), offsetof(struct metaslab, ms_group_node)); + mg->mg_vd = vd; + mg->mg_class = mc; + mg->mg_activation_count = 0; + mg->mg_initialized = B_FALSE; + mg->mg_no_free_space = B_TRUE; + refcount_create_tracked(&mg->mg_alloc_queue_depth); + + mg->mg_taskq = taskq_create("metaslab_group_taskq", metaslab_load_pct, + maxclsyspri, 10, INT_MAX, TASKQ_THREADS_CPU_PCT | TASKQ_DYNAMIC); + + return (mg); +} + +void +metaslab_group_destroy(metaslab_group_t *mg) +{ + ASSERT(mg->mg_prev == NULL); + ASSERT(mg->mg_next == NULL); + /* + * We may have gone below zero with the activation count + * either because we never activated in the first place or + * because we're done, and possibly removing the vdev. + */ + ASSERT(mg->mg_activation_count <= 0); + + taskq_destroy(mg->mg_taskq); + avl_destroy(&mg->mg_metaslab_tree); + mutex_destroy(&mg->mg_lock); + refcount_destroy(&mg->mg_alloc_queue_depth); + kmem_free(mg, sizeof (metaslab_group_t)); +} + +void +metaslab_group_activate(metaslab_group_t *mg) +{ + metaslab_class_t *mc = mg->mg_class; + metaslab_group_t *mgprev, *mgnext; + + ASSERT(spa_config_held(mc->mc_spa, SCL_ALLOC, RW_WRITER)); + + ASSERT(mc->mc_rotor != mg); + ASSERT(mg->mg_prev == NULL); + ASSERT(mg->mg_next == NULL); + ASSERT(mg->mg_activation_count <= 0); + + if (++mg->mg_activation_count <= 0) + return; + + mg->mg_aliquot = metaslab_aliquot * MAX(1, mg->mg_vd->vdev_children); + metaslab_group_alloc_update(mg); + + if ((mgprev = mc->mc_rotor) == NULL) { + mg->mg_prev = mg; + mg->mg_next = mg; + } else { + mgnext = mgprev->mg_next; + mg->mg_prev = mgprev; + mg->mg_next = mgnext; + mgprev->mg_next = mg; + mgnext->mg_prev = mg; + } + mc->mc_rotor = mg; +} + +void +metaslab_group_passivate(metaslab_group_t *mg) +{ + metaslab_class_t *mc = mg->mg_class; + metaslab_group_t *mgprev, *mgnext; + + ASSERT(spa_config_held(mc->mc_spa, SCL_ALLOC, RW_WRITER)); + + if (--mg->mg_activation_count != 0) { + ASSERT(mc->mc_rotor != mg); + ASSERT(mg->mg_prev == NULL); + ASSERT(mg->mg_next == NULL); + ASSERT(mg->mg_activation_count < 0); + return; + } + + taskq_wait_outstanding(mg->mg_taskq, 0); + metaslab_group_alloc_update(mg); + + mgprev = mg->mg_prev; + mgnext = mg->mg_next; + + if (mg == mgnext) { + mc->mc_rotor = NULL; + } else { + mc->mc_rotor = mgnext; + mgprev->mg_next = mgnext; + mgnext->mg_prev = mgprev; + } + + mg->mg_prev = NULL; + mg->mg_next = NULL; +} + +boolean_t +metaslab_group_initialized(metaslab_group_t *mg) +{ + vdev_t *vd = mg->mg_vd; + vdev_stat_t *vs = &vd->vdev_stat; + + return (vs->vs_space != 0 && mg->mg_activation_count > 0); +} + +uint64_t +metaslab_group_get_space(metaslab_group_t *mg) +{ + return ((1ULL << mg->mg_vd->vdev_ms_shift) * mg->mg_vd->vdev_ms_count); +} + +void +metaslab_group_histogram_verify(metaslab_group_t *mg) +{ + uint64_t *mg_hist; + vdev_t *vd = mg->mg_vd; + uint64_t ashift = vd->vdev_ashift; + int i, m; + + if ((zfs_flags & ZFS_DEBUG_HISTOGRAM_VERIFY) == 0) + return; + + mg_hist = kmem_zalloc(sizeof (uint64_t) * RANGE_TREE_HISTOGRAM_SIZE, + KM_SLEEP); + + ASSERT3U(RANGE_TREE_HISTOGRAM_SIZE, >=, + SPACE_MAP_HISTOGRAM_SIZE + ashift); + + for (m = 0; m < vd->vdev_ms_count; m++) { + metaslab_t *msp = vd->vdev_ms[m]; + + if (msp->ms_sm == NULL) + continue; + + for (i = 0; i < SPACE_MAP_HISTOGRAM_SIZE; i++) + mg_hist[i + ashift] += + msp->ms_sm->sm_phys->smp_histogram[i]; + } + + for (i = 0; i < RANGE_TREE_HISTOGRAM_SIZE; i ++) + VERIFY3U(mg_hist[i], ==, mg->mg_histogram[i]); + + kmem_free(mg_hist, sizeof (uint64_t) * RANGE_TREE_HISTOGRAM_SIZE); +} + +static void +metaslab_group_histogram_add(metaslab_group_t *mg, metaslab_t *msp) +{ + metaslab_class_t *mc = mg->mg_class; + uint64_t ashift = mg->mg_vd->vdev_ashift; + int i; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + if (msp->ms_sm == NULL) + return; + + mutex_enter(&mg->mg_lock); + for (i = 0; i < SPACE_MAP_HISTOGRAM_SIZE; i++) { + mg->mg_histogram[i + ashift] += + msp->ms_sm->sm_phys->smp_histogram[i]; + mc->mc_histogram[i + ashift] += + msp->ms_sm->sm_phys->smp_histogram[i]; + } + mutex_exit(&mg->mg_lock); +} + +void +metaslab_group_histogram_remove(metaslab_group_t *mg, metaslab_t *msp) +{ + metaslab_class_t *mc = mg->mg_class; + uint64_t ashift = mg->mg_vd->vdev_ashift; + int i; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + if (msp->ms_sm == NULL) + return; + + mutex_enter(&mg->mg_lock); + for (i = 0; i < SPACE_MAP_HISTOGRAM_SIZE; i++) { + ASSERT3U(mg->mg_histogram[i + ashift], >=, + msp->ms_sm->sm_phys->smp_histogram[i]); + ASSERT3U(mc->mc_histogram[i + ashift], >=, + msp->ms_sm->sm_phys->smp_histogram[i]); + + mg->mg_histogram[i + ashift] -= + msp->ms_sm->sm_phys->smp_histogram[i]; + mc->mc_histogram[i + ashift] -= + msp->ms_sm->sm_phys->smp_histogram[i]; + } + mutex_exit(&mg->mg_lock); +} + +static void +metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp) +{ + ASSERT(msp->ms_group == NULL); + mutex_enter(&mg->mg_lock); + msp->ms_group = mg; + msp->ms_weight = 0; + avl_add(&mg->mg_metaslab_tree, msp); + mutex_exit(&mg->mg_lock); + + mutex_enter(&msp->ms_lock); + metaslab_group_histogram_add(mg, msp); + mutex_exit(&msp->ms_lock); +} + +static void +metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp) +{ + mutex_enter(&msp->ms_lock); + metaslab_group_histogram_remove(mg, msp); + mutex_exit(&msp->ms_lock); + + mutex_enter(&mg->mg_lock); + ASSERT(msp->ms_group == mg); + avl_remove(&mg->mg_metaslab_tree, msp); + msp->ms_group = NULL; + mutex_exit(&mg->mg_lock); +} + +static void +metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight) +{ + /* + * Although in principle the weight can be any value, in + * practice we do not use values in the range [1, 511]. + */ + ASSERT(weight >= SPA_MINBLOCKSIZE || weight == 0); + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + mutex_enter(&mg->mg_lock); + ASSERT(msp->ms_group == mg); + avl_remove(&mg->mg_metaslab_tree, msp); + msp->ms_weight = weight; + avl_add(&mg->mg_metaslab_tree, msp); + mutex_exit(&mg->mg_lock); +} + +/* + * Calculate the fragmentation for a given metaslab group. We can use + * a simple average here since all metaslabs within the group must have + * the same size. The return value will be a value between 0 and 100 + * (inclusive), or ZFS_FRAG_INVALID if less than half of the metaslab in this + * group have a fragmentation metric. + */ +uint64_t +metaslab_group_fragmentation(metaslab_group_t *mg) +{ + vdev_t *vd = mg->mg_vd; + uint64_t fragmentation = 0; + uint64_t valid_ms = 0; + int m; + + for (m = 0; m < vd->vdev_ms_count; m++) { + metaslab_t *msp = vd->vdev_ms[m]; + + if (msp->ms_fragmentation == ZFS_FRAG_INVALID) + continue; + + valid_ms++; + fragmentation += msp->ms_fragmentation; + } + + if (valid_ms <= vd->vdev_ms_count / 2) + return (ZFS_FRAG_INVALID); + + fragmentation /= valid_ms; + ASSERT3U(fragmentation, <=, 100); + return (fragmentation); +} + +/* + * Determine if a given metaslab group should skip allocations. A metaslab + * group should avoid allocations if its free capacity is less than the + * zfs_mg_noalloc_threshold or its fragmentation metric is greater than + * zfs_mg_fragmentation_threshold and there is at least one metaslab group + * that can still handle allocations. If the allocation throttle is enabled + * then we skip allocations to devices that have reached their maximum + * allocation queue depth unless the selected metaslab group is the only + * eligible group remaining. + */ +static boolean_t +metaslab_group_allocatable(metaslab_group_t *mg, metaslab_group_t *rotor, + uint64_t psize) +{ + spa_t *spa = mg->mg_vd->vdev_spa; + metaslab_class_t *mc = mg->mg_class; + + /* + * We can only consider skipping this metaslab group if it's + * in the normal metaslab class and there are other metaslab + * groups to select from. Otherwise, we always consider it eligible + * for allocations. + */ + if (mc != spa_normal_class(spa) || mc->mc_groups <= 1) + return (B_TRUE); + + /* + * If the metaslab group's mg_allocatable flag is set (see comments + * in metaslab_group_alloc_update() for more information) and + * the allocation throttle is disabled then allow allocations to this + * device. However, if the allocation throttle is enabled then + * check if we have reached our allocation limit (mg_alloc_queue_depth) + * to determine if we should allow allocations to this metaslab group. + * If all metaslab groups are no longer considered allocatable + * (mc_alloc_groups == 0) or we're trying to allocate the smallest + * gang block size then we allow allocations on this metaslab group + * regardless of the mg_allocatable or throttle settings. + */ + if (mg->mg_allocatable) { + metaslab_group_t *mgp; + int64_t qdepth; + uint64_t qmax = mg->mg_max_alloc_queue_depth; + + if (!mc->mc_alloc_throttle_enabled) + return (B_TRUE); + + /* + * If this metaslab group does not have any free space, then + * there is no point in looking further. + */ + if (mg->mg_no_free_space) + return (B_FALSE); + + qdepth = refcount_count(&mg->mg_alloc_queue_depth); + + /* + * If this metaslab group is below its qmax or it's + * the only allocatable metasable group, then attempt + * to allocate from it. + */ + if (qdepth < qmax || mc->mc_alloc_groups == 1) + return (B_TRUE); + ASSERT3U(mc->mc_alloc_groups, >, 1); + + /* + * Since this metaslab group is at or over its qmax, we + * need to determine if there are metaslab groups after this + * one that might be able to handle this allocation. This is + * racy since we can't hold the locks for all metaslab + * groups at the same time when we make this check. + */ + for (mgp = mg->mg_next; mgp != rotor; mgp = mgp->mg_next) { + qmax = mgp->mg_max_alloc_queue_depth; + + qdepth = refcount_count(&mgp->mg_alloc_queue_depth); + + /* + * If there is another metaslab group that + * might be able to handle the allocation, then + * we return false so that we skip this group. + */ + if (qdepth < qmax && !mgp->mg_no_free_space) + return (B_FALSE); + } + + /* + * We didn't find another group to handle the allocation + * so we can't skip this metaslab group even though + * we are at or over our qmax. + */ + return (B_TRUE); + + } else if (mc->mc_alloc_groups == 0 || psize == SPA_MINBLOCKSIZE) { + return (B_TRUE); + } + return (B_FALSE); +} + +/* + * ========================================================================== + * Range tree callbacks + * ========================================================================== + */ + +/* + * Comparison function for the private size-ordered tree. Tree is sorted + * by size, larger sizes at the end of the tree. + */ +static int +metaslab_rangesize_compare(const void *x1, const void *x2) +{ + const range_seg_t *r1 = x1; + const range_seg_t *r2 = x2; + uint64_t rs_size1 = r1->rs_end - r1->rs_start; + uint64_t rs_size2 = r2->rs_end - r2->rs_start; + + int cmp = AVL_CMP(rs_size1, rs_size2); + if (likely(cmp)) + return (cmp); + + return (AVL_CMP(r1->rs_start, r2->rs_start)); +} + +/* + * Create any block allocator specific components. The current allocators + * rely on using both a size-ordered range_tree_t and an array of uint64_t's. + */ +static void +metaslab_rt_create(range_tree_t *rt, void *arg) +{ + metaslab_t *msp = arg; + + ASSERT3P(rt->rt_arg, ==, msp); + ASSERT(msp->ms_tree == NULL); + + avl_create(&msp->ms_size_tree, metaslab_rangesize_compare, + sizeof (range_seg_t), offsetof(range_seg_t, rs_pp_node)); +} + +/* + * Destroy the block allocator specific components. + */ +static void +metaslab_rt_destroy(range_tree_t *rt, void *arg) +{ + metaslab_t *msp = arg; + + ASSERT3P(rt->rt_arg, ==, msp); + ASSERT3P(msp->ms_tree, ==, rt); + ASSERT0(avl_numnodes(&msp->ms_size_tree)); + + avl_destroy(&msp->ms_size_tree); +} + +static void +metaslab_rt_add(range_tree_t *rt, range_seg_t *rs, void *arg) +{ + metaslab_t *msp = arg; + + ASSERT3P(rt->rt_arg, ==, msp); + ASSERT3P(msp->ms_tree, ==, rt); + VERIFY(!msp->ms_condensing); + avl_add(&msp->ms_size_tree, rs); +} + +static void +metaslab_rt_remove(range_tree_t *rt, range_seg_t *rs, void *arg) +{ + metaslab_t *msp = arg; + + ASSERT3P(rt->rt_arg, ==, msp); + ASSERT3P(msp->ms_tree, ==, rt); + VERIFY(!msp->ms_condensing); + avl_remove(&msp->ms_size_tree, rs); +} + +static void +metaslab_rt_vacate(range_tree_t *rt, void *arg) +{ + metaslab_t *msp = arg; + + ASSERT3P(rt->rt_arg, ==, msp); + ASSERT3P(msp->ms_tree, ==, rt); + + /* + * Normally one would walk the tree freeing nodes along the way. + * Since the nodes are shared with the range trees we can avoid + * walking all nodes and just reinitialize the avl tree. The nodes + * will be freed by the range tree, so we don't want to free them here. + */ + avl_create(&msp->ms_size_tree, metaslab_rangesize_compare, + sizeof (range_seg_t), offsetof(range_seg_t, rs_pp_node)); +} + +static range_tree_ops_t metaslab_rt_ops = { + metaslab_rt_create, + metaslab_rt_destroy, + metaslab_rt_add, + metaslab_rt_remove, + metaslab_rt_vacate +}; + +/* + * ========================================================================== + * Common allocator routines + * ========================================================================== + */ + +/* + * Return the maximum contiguous segment within the metaslab. + */ +uint64_t +metaslab_block_maxsize(metaslab_t *msp) +{ + avl_tree_t *t = &msp->ms_size_tree; + range_seg_t *rs; + + if (t == NULL || (rs = avl_last(t)) == NULL) + return (0ULL); + + return (rs->rs_end - rs->rs_start); +} + +static range_seg_t * +metaslab_block_find(avl_tree_t *t, uint64_t start, uint64_t size) +{ + range_seg_t *rs, rsearch; + avl_index_t where; + + rsearch.rs_start = start; + rsearch.rs_end = start + size; + + rs = avl_find(t, &rsearch, &where); + if (rs == NULL) { + rs = avl_nearest(t, where, AVL_AFTER); + } + + return (rs); +} + +#if defined(WITH_FF_BLOCK_ALLOCATOR) || \ + defined(WITH_DF_BLOCK_ALLOCATOR) || \ + defined(WITH_CF_BLOCK_ALLOCATOR) +/* + * This is a helper function that can be used by the allocator to find + * a suitable block to allocate. This will search the specified AVL + * tree looking for a block that matches the specified criteria. + */ +static uint64_t +metaslab_block_picker(avl_tree_t *t, uint64_t *cursor, uint64_t size, + uint64_t align) +{ + range_seg_t *rs = metaslab_block_find(t, *cursor, size); + + while (rs != NULL) { + uint64_t offset = P2ROUNDUP(rs->rs_start, align); + + if (offset + size <= rs->rs_end) { + *cursor = offset + size; + return (offset); + } + rs = AVL_NEXT(t, rs); + } + + /* + * If we know we've searched the whole map (*cursor == 0), give up. + * Otherwise, reset the cursor to the beginning and try again. + */ + if (*cursor == 0) + return (-1ULL); + + *cursor = 0; + return (metaslab_block_picker(t, cursor, size, align)); +} +#endif /* WITH_FF/DF/CF_BLOCK_ALLOCATOR */ + +#if defined(WITH_FF_BLOCK_ALLOCATOR) +/* + * ========================================================================== + * The first-fit block allocator + * ========================================================================== + */ +static uint64_t +metaslab_ff_alloc(metaslab_t *msp, uint64_t size) +{ + /* + * Find the largest power of 2 block size that evenly divides the + * requested size. This is used to try to allocate blocks with similar + * alignment from the same area of the metaslab (i.e. same cursor + * bucket) but it does not guarantee that other allocations sizes + * may exist in the same region. + */ + uint64_t align = size & -size; + uint64_t *cursor = &msp->ms_lbas[highbit64(align) - 1]; + avl_tree_t *t = &msp->ms_tree->rt_root; + + return (metaslab_block_picker(t, cursor, size, align)); +} + +static metaslab_ops_t metaslab_ff_ops = { + metaslab_ff_alloc +}; + +metaslab_ops_t *zfs_metaslab_ops = &metaslab_ff_ops; +#endif /* WITH_FF_BLOCK_ALLOCATOR */ + +#if defined(WITH_DF_BLOCK_ALLOCATOR) +/* + * ========================================================================== + * Dynamic block allocator - + * Uses the first fit allocation scheme until space get low and then + * adjusts to a best fit allocation method. Uses metaslab_df_alloc_threshold + * and metaslab_df_free_pct to determine when to switch the allocation scheme. + * ========================================================================== + */ +static uint64_t +metaslab_df_alloc(metaslab_t *msp, uint64_t size) +{ + /* + * Find the largest power of 2 block size that evenly divides the + * requested size. This is used to try to allocate blocks with similar + * alignment from the same area of the metaslab (i.e. same cursor + * bucket) but it does not guarantee that other allocations sizes + * may exist in the same region. + */ + uint64_t align = size & -size; + uint64_t *cursor = &msp->ms_lbas[highbit64(align) - 1]; + range_tree_t *rt = msp->ms_tree; + avl_tree_t *t = &rt->rt_root; + uint64_t max_size = metaslab_block_maxsize(msp); + int free_pct = range_tree_space(rt) * 100 / msp->ms_size; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT3U(avl_numnodes(t), ==, avl_numnodes(&msp->ms_size_tree)); + + if (max_size < size) + return (-1ULL); + + /* + * If we're running low on space switch to using the size + * sorted AVL tree (best-fit). + */ + if (max_size < metaslab_df_alloc_threshold || + free_pct < metaslab_df_free_pct) { + t = &msp->ms_size_tree; + *cursor = 0; + } + + return (metaslab_block_picker(t, cursor, size, 1ULL)); +} + +static metaslab_ops_t metaslab_df_ops = { + metaslab_df_alloc +}; + +metaslab_ops_t *zfs_metaslab_ops = &metaslab_df_ops; +#endif /* WITH_DF_BLOCK_ALLOCATOR */ + +#if defined(WITH_CF_BLOCK_ALLOCATOR) +/* + * ========================================================================== + * Cursor fit block allocator - + * Select the largest region in the metaslab, set the cursor to the beginning + * of the range and the cursor_end to the end of the range. As allocations + * are made advance the cursor. Continue allocating from the cursor until + * the range is exhausted and then find a new range. + * ========================================================================== + */ +static uint64_t +metaslab_cf_alloc(metaslab_t *msp, uint64_t size) +{ + range_tree_t *rt = msp->ms_tree; + avl_tree_t *t = &msp->ms_size_tree; + uint64_t *cursor = &msp->ms_lbas[0]; + uint64_t *cursor_end = &msp->ms_lbas[1]; + uint64_t offset = 0; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT3U(avl_numnodes(t), ==, avl_numnodes(&rt->rt_root)); + + ASSERT3U(*cursor_end, >=, *cursor); + + if ((*cursor + size) > *cursor_end) { + range_seg_t *rs; + + rs = avl_last(&msp->ms_size_tree); + if (rs == NULL || (rs->rs_end - rs->rs_start) < size) + return (-1ULL); + + *cursor = rs->rs_start; + *cursor_end = rs->rs_end; + } + + offset = *cursor; + *cursor += size; + + return (offset); +} + +static metaslab_ops_t metaslab_cf_ops = { + metaslab_cf_alloc +}; + +metaslab_ops_t *zfs_metaslab_ops = &metaslab_cf_ops; +#endif /* WITH_CF_BLOCK_ALLOCATOR */ + +#if defined(WITH_NDF_BLOCK_ALLOCATOR) +/* + * ========================================================================== + * New dynamic fit allocator - + * Select a region that is large enough to allocate 2^metaslab_ndf_clump_shift + * contiguous blocks. If no region is found then just use the largest segment + * that remains. + * ========================================================================== + */ + +/* + * Determines desired number of contiguous blocks (2^metaslab_ndf_clump_shift) + * to request from the allocator. + */ +uint64_t metaslab_ndf_clump_shift = 4; + +static uint64_t +metaslab_ndf_alloc(metaslab_t *msp, uint64_t size) +{ + avl_tree_t *t = &msp->ms_tree->rt_root; + avl_index_t where; + range_seg_t *rs, rsearch; + uint64_t hbit = highbit64(size); + uint64_t *cursor = &msp->ms_lbas[hbit - 1]; + uint64_t max_size = metaslab_block_maxsize(msp); + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT3U(avl_numnodes(t), ==, avl_numnodes(&msp->ms_size_tree)); + + if (max_size < size) + return (-1ULL); + + rsearch.rs_start = *cursor; + rsearch.rs_end = *cursor + size; + + rs = avl_find(t, &rsearch, &where); + if (rs == NULL || (rs->rs_end - rs->rs_start) < size) { + t = &msp->ms_size_tree; + + rsearch.rs_start = 0; + rsearch.rs_end = MIN(max_size, + 1ULL << (hbit + metaslab_ndf_clump_shift)); + rs = avl_find(t, &rsearch, &where); + if (rs == NULL) + rs = avl_nearest(t, where, AVL_AFTER); + ASSERT(rs != NULL); + } + + if ((rs->rs_end - rs->rs_start) >= size) { + *cursor = rs->rs_start + size; + return (rs->rs_start); + } + return (-1ULL); +} + +static metaslab_ops_t metaslab_ndf_ops = { + metaslab_ndf_alloc +}; + +metaslab_ops_t *zfs_metaslab_ops = &metaslab_ndf_ops; +#endif /* WITH_NDF_BLOCK_ALLOCATOR */ + + +/* + * ========================================================================== + * Metaslabs + * ========================================================================== + */ + +/* + * Wait for any in-progress metaslab loads to complete. + */ +void +metaslab_load_wait(metaslab_t *msp) +{ + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + while (msp->ms_loading) { + ASSERT(!msp->ms_loaded); + cv_wait(&msp->ms_load_cv, &msp->ms_lock); + } +} + +int +metaslab_load(metaslab_t *msp) +{ + int error = 0; + int t; + boolean_t success = B_FALSE; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT(!msp->ms_loaded); + ASSERT(!msp->ms_loading); + + msp->ms_loading = B_TRUE; + + /* + * If the space map has not been allocated yet, then treat + * all the space in the metaslab as free and add it to the + * ms_tree. + */ + if (msp->ms_sm != NULL) + error = space_map_load(msp->ms_sm, msp->ms_tree, SM_FREE); + else + range_tree_add(msp->ms_tree, msp->ms_start, msp->ms_size); + + success = (error == 0); + msp->ms_loading = B_FALSE; + + if (success) { + ASSERT3P(msp->ms_group, !=, NULL); + msp->ms_loaded = B_TRUE; + + for (t = 0; t < TXG_DEFER_SIZE; t++) { + range_tree_walk(msp->ms_defertree[t], + range_tree_remove, msp->ms_tree); + } + msp->ms_max_size = metaslab_block_maxsize(msp); + } + cv_broadcast(&msp->ms_load_cv); + return (error); +} + +void +metaslab_unload(metaslab_t *msp) +{ + ASSERT(MUTEX_HELD(&msp->ms_lock)); + range_tree_vacate(msp->ms_tree, NULL, NULL); + msp->ms_loaded = B_FALSE; + msp->ms_weight &= ~METASLAB_ACTIVE_MASK; + msp->ms_max_size = 0; +} + +int +metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object, uint64_t txg, + metaslab_t **msp) +{ + vdev_t *vd = mg->mg_vd; + objset_t *mos = vd->vdev_spa->spa_meta_objset; + metaslab_t *ms; + int error; + + ms = kmem_zalloc(sizeof (metaslab_t), KM_SLEEP); + mutex_init(&ms->ms_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&ms->ms_load_cv, NULL, CV_DEFAULT, NULL); + ms->ms_id = id; + ms->ms_start = id << vd->vdev_ms_shift; + ms->ms_size = 1ULL << vd->vdev_ms_shift; + + /* + * We only open space map objects that already exist. All others + * will be opened when we finally allocate an object for it. + */ + if (object != 0) { + error = space_map_open(&ms->ms_sm, mos, object, ms->ms_start, + ms->ms_size, vd->vdev_ashift, &ms->ms_lock); + + if (error != 0) { + kmem_free(ms, sizeof (metaslab_t)); + return (error); + } + + ASSERT(ms->ms_sm != NULL); + } + + /* + * We create the main range tree here, but we don't create the + * other range trees until metaslab_sync_done(). This serves + * two purposes: it allows metaslab_sync_done() to detect the + * addition of new space; and for debugging, it ensures that we'd + * data fault on any attempt to use this metaslab before it's ready. + */ + ms->ms_tree = range_tree_create(&metaslab_rt_ops, ms, &ms->ms_lock); + metaslab_group_add(mg, ms); + + metaslab_set_fragmentation(ms); + + /* + * If we're opening an existing pool (txg == 0) or creating + * a new one (txg == TXG_INITIAL), all space is available now. + * If we're adding space to an existing pool, the new space + * does not become available until after this txg has synced. + * The metaslab's weight will also be initialized when we sync + * out this txg. This ensures that we don't attempt to allocate + * from it before we have initialized it completely. + */ + if (txg <= TXG_INITIAL) + metaslab_sync_done(ms, 0); + + /* + * If metaslab_debug_load is set and we're initializing a metaslab + * that has an allocated space map object then load the its space + * map so that can verify frees. + */ + if (metaslab_debug_load && ms->ms_sm != NULL) { + mutex_enter(&ms->ms_lock); + VERIFY0(metaslab_load(ms)); + mutex_exit(&ms->ms_lock); + } + + if (txg != 0) { + vdev_dirty(vd, 0, NULL, txg); + vdev_dirty(vd, VDD_METASLAB, ms, txg); + } + + *msp = ms; + + return (0); +} + +void +metaslab_fini(metaslab_t *msp) +{ + int t; + + metaslab_group_t *mg = msp->ms_group; + + metaslab_group_remove(mg, msp); + + mutex_enter(&msp->ms_lock); + VERIFY(msp->ms_group == NULL); + vdev_space_update(mg->mg_vd, -space_map_allocated(msp->ms_sm), + 0, -msp->ms_size); + space_map_close(msp->ms_sm); + + metaslab_unload(msp); + range_tree_destroy(msp->ms_tree); + range_tree_destroy(msp->ms_freeingtree); + range_tree_destroy(msp->ms_freedtree); + + for (t = 0; t < TXG_SIZE; t++) { + range_tree_destroy(msp->ms_alloctree[t]); + } + + for (t = 0; t < TXG_DEFER_SIZE; t++) { + range_tree_destroy(msp->ms_defertree[t]); + } + + ASSERT0(msp->ms_deferspace); + + mutex_exit(&msp->ms_lock); + cv_destroy(&msp->ms_load_cv); + mutex_destroy(&msp->ms_lock); + + kmem_free(msp, sizeof (metaslab_t)); +} + +#define FRAGMENTATION_TABLE_SIZE 17 + +/* + * This table defines a segment size based fragmentation metric that will + * allow each metaslab to derive its own fragmentation value. This is done + * by calculating the space in each bucket of the spacemap histogram and + * multiplying that by the fragmetation metric in this table. Doing + * this for all buckets and dividing it by the total amount of free + * space in this metaslab (i.e. the total free space in all buckets) gives + * us the fragmentation metric. This means that a high fragmentation metric + * equates to most of the free space being comprised of small segments. + * Conversely, if the metric is low, then most of the free space is in + * large segments. A 10% change in fragmentation equates to approximately + * double the number of segments. + * + * This table defines 0% fragmented space using 16MB segments. Testing has + * shown that segments that are greater than or equal to 16MB do not suffer + * from drastic performance problems. Using this value, we derive the rest + * of the table. Since the fragmentation value is never stored on disk, it + * is possible to change these calculations in the future. + */ +int zfs_frag_table[FRAGMENTATION_TABLE_SIZE] = { + 100, /* 512B */ + 100, /* 1K */ + 98, /* 2K */ + 95, /* 4K */ + 90, /* 8K */ + 80, /* 16K */ + 70, /* 32K */ + 60, /* 64K */ + 50, /* 128K */ + 40, /* 256K */ + 30, /* 512K */ + 20, /* 1M */ + 15, /* 2M */ + 10, /* 4M */ + 5, /* 8M */ + 0 /* 16M */ +}; + +/* + * Calclate the metaslab's fragmentation metric. A return value + * of ZFS_FRAG_INVALID means that the metaslab has not been upgraded and does + * not support this metric. Otherwise, the return value should be in the + * range [0, 100]. + */ +static void +metaslab_set_fragmentation(metaslab_t *msp) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + uint64_t fragmentation = 0; + uint64_t total = 0; + boolean_t feature_enabled = spa_feature_is_enabled(spa, + SPA_FEATURE_SPACEMAP_HISTOGRAM); + int i; + + if (!feature_enabled) { + msp->ms_fragmentation = ZFS_FRAG_INVALID; + return; + } + + /* + * A null space map means that the entire metaslab is free + * and thus is not fragmented. + */ + if (msp->ms_sm == NULL) { + msp->ms_fragmentation = 0; + return; + } + + /* + * If this metaslab's space map has not been upgraded, flag it + * so that we upgrade next time we encounter it. + */ + if (msp->ms_sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) { + uint64_t txg = spa_syncing_txg(spa); + vdev_t *vd = msp->ms_group->mg_vd; + + /* + * If we've reached the final dirty txg, then we must + * be shutting down the pool. We don't want to dirty + * any data past this point so skip setting the condense + * flag. We can retry this action the next time the pool + * is imported. + */ + if (spa_writeable(spa) && txg < spa_final_dirty_txg(spa)) { + msp->ms_condense_wanted = B_TRUE; + vdev_dirty(vd, VDD_METASLAB, msp, txg + 1); + spa_dbgmsg(spa, "txg %llu, requesting force condense: " + "ms_id %llu, vdev_id %llu", txg, msp->ms_id, + vd->vdev_id); + } + msp->ms_fragmentation = ZFS_FRAG_INVALID; + return; + } + + for (i = 0; i < SPACE_MAP_HISTOGRAM_SIZE; i++) { + uint64_t space = 0; + uint8_t shift = msp->ms_sm->sm_shift; + + int idx = MIN(shift - SPA_MINBLOCKSHIFT + i, + FRAGMENTATION_TABLE_SIZE - 1); + + if (msp->ms_sm->sm_phys->smp_histogram[i] == 0) + continue; + + space = msp->ms_sm->sm_phys->smp_histogram[i] << (i + shift); + total += space; + + ASSERT3U(idx, <, FRAGMENTATION_TABLE_SIZE); + fragmentation += space * zfs_frag_table[idx]; + } + + if (total > 0) + fragmentation /= total; + ASSERT3U(fragmentation, <=, 100); + + msp->ms_fragmentation = fragmentation; +} + +/* + * Compute a weight -- a selection preference value -- for the given metaslab. + * This is based on the amount of free space, the level of fragmentation, + * the LBA range, and whether the metaslab is loaded. + */ +static uint64_t +metaslab_space_weight(metaslab_t *msp) +{ + metaslab_group_t *mg = msp->ms_group; + vdev_t *vd = mg->mg_vd; + uint64_t weight, space; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT(!vd->vdev_removing); + + /* + * The baseline weight is the metaslab's free space. + */ + space = msp->ms_size - space_map_allocated(msp->ms_sm); + + if (metaslab_fragmentation_factor_enabled && + msp->ms_fragmentation != ZFS_FRAG_INVALID) { + /* + * Use the fragmentation information to inversely scale + * down the baseline weight. We need to ensure that we + * don't exclude this metaslab completely when it's 100% + * fragmented. To avoid this we reduce the fragmented value + * by 1. + */ + space = (space * (100 - (msp->ms_fragmentation - 1))) / 100; + + /* + * If space < SPA_MINBLOCKSIZE, then we will not allocate from + * this metaslab again. The fragmentation metric may have + * decreased the space to something smaller than + * SPA_MINBLOCKSIZE, so reset the space to SPA_MINBLOCKSIZE + * so that we can consume any remaining space. + */ + if (space > 0 && space < SPA_MINBLOCKSIZE) + space = SPA_MINBLOCKSIZE; + } + weight = space; + + /* + * Modern disks have uniform bit density and constant angular velocity. + * Therefore, the outer recording zones are faster (higher bandwidth) + * than the inner zones by the ratio of outer to inner track diameter, + * which is typically around 2:1. We account for this by assigning + * higher weight to lower metaslabs (multiplier ranging from 2x to 1x). + * In effect, this means that we'll select the metaslab with the most + * free bandwidth rather than simply the one with the most free space. + */ + if (!vd->vdev_nonrot && metaslab_lba_weighting_enabled) { + weight = 2 * weight - (msp->ms_id * weight) / vd->vdev_ms_count; + ASSERT(weight >= space && weight <= 2 * space); + } + + /* + * If this metaslab is one we're actively using, adjust its + * weight to make it preferable to any inactive metaslab so + * we'll polish it off. If the fragmentation on this metaslab + * has exceed our threshold, then don't mark it active. + */ + if (msp->ms_loaded && msp->ms_fragmentation != ZFS_FRAG_INVALID && + msp->ms_fragmentation <= zfs_metaslab_fragmentation_threshold) { + weight |= (msp->ms_weight & METASLAB_ACTIVE_MASK); + } + + WEIGHT_SET_SPACEBASED(weight); + return (weight); +} + +/* + * Return the weight of the specified metaslab, according to the segment-based + * weighting algorithm. The metaslab must be loaded. This function can + * be called within a sync pass since it relies only on the metaslab's + * range tree which is always accurate when the metaslab is loaded. + */ +static uint64_t +metaslab_weight_from_range_tree(metaslab_t *msp) +{ + uint64_t weight = 0; + uint32_t segments = 0; + int i; + + ASSERT(msp->ms_loaded); + + for (i = RANGE_TREE_HISTOGRAM_SIZE - 1; i >= SPA_MINBLOCKSHIFT; i--) { + uint8_t shift = msp->ms_group->mg_vd->vdev_ashift; + int max_idx = SPACE_MAP_HISTOGRAM_SIZE + shift - 1; + + segments <<= 1; + segments += msp->ms_tree->rt_histogram[i]; + + /* + * The range tree provides more precision than the space map + * and must be downgraded so that all values fit within the + * space map's histogram. This allows us to compare loaded + * vs. unloaded metaslabs to determine which metaslab is + * considered "best". + */ + if (i > max_idx) + continue; + + if (segments != 0) { + WEIGHT_SET_COUNT(weight, segments); + WEIGHT_SET_INDEX(weight, i); + WEIGHT_SET_ACTIVE(weight, 0); + break; + } + } + return (weight); +} + +/* + * Calculate the weight based on the on-disk histogram. This should only + * be called after a sync pass has completely finished since the on-disk + * information is updated in metaslab_sync(). + */ +static uint64_t +metaslab_weight_from_spacemap(metaslab_t *msp) +{ + uint64_t weight = 0; + int i; + + for (i = SPACE_MAP_HISTOGRAM_SIZE - 1; i >= 0; i--) { + if (msp->ms_sm->sm_phys->smp_histogram[i] != 0) { + WEIGHT_SET_COUNT(weight, + msp->ms_sm->sm_phys->smp_histogram[i]); + WEIGHT_SET_INDEX(weight, i + + msp->ms_sm->sm_shift); + WEIGHT_SET_ACTIVE(weight, 0); + break; + } + } + return (weight); +} + +/* + * Compute a segment-based weight for the specified metaslab. The weight + * is determined by highest bucket in the histogram. The information + * for the highest bucket is encoded into the weight value. + */ +static uint64_t +metaslab_segment_weight(metaslab_t *msp) +{ + metaslab_group_t *mg = msp->ms_group; + uint64_t weight = 0; + uint8_t shift = mg->mg_vd->vdev_ashift; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + /* + * The metaslab is completely free. + */ + if (space_map_allocated(msp->ms_sm) == 0) { + int idx = highbit64(msp->ms_size) - 1; + int max_idx = SPACE_MAP_HISTOGRAM_SIZE + shift - 1; + + if (idx < max_idx) { + WEIGHT_SET_COUNT(weight, 1ULL); + WEIGHT_SET_INDEX(weight, idx); + } else { + WEIGHT_SET_COUNT(weight, 1ULL << (idx - max_idx)); + WEIGHT_SET_INDEX(weight, max_idx); + } + WEIGHT_SET_ACTIVE(weight, 0); + ASSERT(!WEIGHT_IS_SPACEBASED(weight)); + + return (weight); + } + + ASSERT3U(msp->ms_sm->sm_dbuf->db_size, ==, sizeof (space_map_phys_t)); + + /* + * If the metaslab is fully allocated then just make the weight 0. + */ + if (space_map_allocated(msp->ms_sm) == msp->ms_size) + return (0); + /* + * If the metaslab is already loaded, then use the range tree to + * determine the weight. Otherwise, we rely on the space map information + * to generate the weight. + */ + if (msp->ms_loaded) { + weight = metaslab_weight_from_range_tree(msp); + } else { + weight = metaslab_weight_from_spacemap(msp); + } + + /* + * If the metaslab was active the last time we calculated its weight + * then keep it active. We want to consume the entire region that + * is associated with this weight. + */ + if (msp->ms_activation_weight != 0 && weight != 0) + WEIGHT_SET_ACTIVE(weight, WEIGHT_GET_ACTIVE(msp->ms_weight)); + return (weight); +} + +/* + * Determine if we should attempt to allocate from this metaslab. If the + * metaslab has a maximum size then we can quickly determine if the desired + * allocation size can be satisfied. Otherwise, if we're using segment-based + * weighting then we can determine the maximum allocation that this metaslab + * can accommodate based on the index encoded in the weight. If we're using + * space-based weights then rely on the entire weight (excluding the weight + * type bit). + */ +boolean_t +metaslab_should_allocate(metaslab_t *msp, uint64_t asize) +{ + boolean_t should_allocate; + + if (msp->ms_max_size != 0) + return (msp->ms_max_size >= asize); + + if (!WEIGHT_IS_SPACEBASED(msp->ms_weight)) { + /* + * The metaslab segment weight indicates segments in the + * range [2^i, 2^(i+1)), where i is the index in the weight. + * Since the asize might be in the middle of the range, we + * should attempt the allocation if asize < 2^(i+1). + */ + should_allocate = (asize < + 1ULL << (WEIGHT_GET_INDEX(msp->ms_weight) + 1)); + } else { + should_allocate = (asize <= + (msp->ms_weight & ~METASLAB_WEIGHT_TYPE)); + } + return (should_allocate); +} +static uint64_t +metaslab_weight(metaslab_t *msp) +{ + vdev_t *vd = msp->ms_group->mg_vd; + spa_t *spa = vd->vdev_spa; + uint64_t weight; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + /* + * This vdev is in the process of being removed so there is nothing + * for us to do here. + */ + if (vd->vdev_removing) { + ASSERT0(space_map_allocated(msp->ms_sm)); + ASSERT0(vd->vdev_ms_shift); + return (0); + } + + metaslab_set_fragmentation(msp); + + /* + * Update the maximum size if the metaslab is loaded. This will + * ensure that we get an accurate maximum size if newly freed space + * has been added back into the free tree. + */ + if (msp->ms_loaded) + msp->ms_max_size = metaslab_block_maxsize(msp); + + /* + * Segment-based weighting requires space map histogram support. + */ + if (zfs_metaslab_segment_weight_enabled && + spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM) && + (msp->ms_sm == NULL || msp->ms_sm->sm_dbuf->db_size == + sizeof (space_map_phys_t))) { + weight = metaslab_segment_weight(msp); + } else { + weight = metaslab_space_weight(msp); + } + return (weight); +} + +static int +metaslab_activate(metaslab_t *msp, uint64_t activation_weight) +{ + ASSERT(MUTEX_HELD(&msp->ms_lock)); + + if ((msp->ms_weight & METASLAB_ACTIVE_MASK) == 0) { + metaslab_load_wait(msp); + if (!msp->ms_loaded) { + int error = metaslab_load(msp); + if (error) { + metaslab_group_sort(msp->ms_group, msp, 0); + return (error); + } + } + + msp->ms_activation_weight = msp->ms_weight; + metaslab_group_sort(msp->ms_group, msp, + msp->ms_weight | activation_weight); + } + ASSERT(msp->ms_loaded); + ASSERT(msp->ms_weight & METASLAB_ACTIVE_MASK); + + return (0); +} + +static void +metaslab_passivate(metaslab_t *msp, uint64_t weight) +{ + ASSERTV(uint64_t size = weight & ~METASLAB_WEIGHT_TYPE); + + /* + * If size < SPA_MINBLOCKSIZE, then we will not allocate from + * this metaslab again. In that case, it had better be empty, + * or we would be leaving space on the table. + */ + ASSERT(size >= SPA_MINBLOCKSIZE || + range_tree_space(msp->ms_tree) == 0); + ASSERT0(weight & METASLAB_ACTIVE_MASK); + + msp->ms_activation_weight = 0; + metaslab_group_sort(msp->ms_group, msp, weight); + ASSERT((msp->ms_weight & METASLAB_ACTIVE_MASK) == 0); +} + +/* + * Segment-based metaslabs are activated once and remain active until + * we either fail an allocation attempt (similar to space-based metaslabs) + * or have exhausted the free space in zfs_metaslab_switch_threshold + * buckets since the metaslab was activated. This function checks to see + * if we've exhaused the zfs_metaslab_switch_threshold buckets in the + * metaslab and passivates it proactively. This will allow us to select a + * metaslab with a larger contiguous region, if any, remaining within this + * metaslab group. If we're in sync pass > 1, then we continue using this + * metaslab so that we don't dirty more block and cause more sync passes. + */ +void +metaslab_segment_may_passivate(metaslab_t *msp) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + uint64_t weight; + int activation_idx, current_idx; + + if (WEIGHT_IS_SPACEBASED(msp->ms_weight) || spa_sync_pass(spa) > 1) + return; + + /* + * Since we are in the middle of a sync pass, the most accurate + * information that is accessible to us is the in-core range tree + * histogram; calculate the new weight based on that information. + */ + weight = metaslab_weight_from_range_tree(msp); + activation_idx = WEIGHT_GET_INDEX(msp->ms_activation_weight); + current_idx = WEIGHT_GET_INDEX(weight); + + if (current_idx <= activation_idx - zfs_metaslab_switch_threshold) + metaslab_passivate(msp, weight); +} + +static void +metaslab_preload(void *arg) +{ + metaslab_t *msp = arg; + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + fstrans_cookie_t cookie = spl_fstrans_mark(); + + ASSERT(!MUTEX_HELD(&msp->ms_group->mg_lock)); + + mutex_enter(&msp->ms_lock); + metaslab_load_wait(msp); + if (!msp->ms_loaded) + (void) metaslab_load(msp); + msp->ms_selected_txg = spa_syncing_txg(spa); + mutex_exit(&msp->ms_lock); + spl_fstrans_unmark(cookie); +} + +static void +metaslab_group_preload(metaslab_group_t *mg) +{ + spa_t *spa = mg->mg_vd->vdev_spa; + metaslab_t *msp; + avl_tree_t *t = &mg->mg_metaslab_tree; + int m = 0; + + if (spa_shutting_down(spa) || !metaslab_preload_enabled) { + taskq_wait_outstanding(mg->mg_taskq, 0); + return; + } + + mutex_enter(&mg->mg_lock); + /* + * Load the next potential metaslabs + */ + for (msp = avl_first(t); msp != NULL; msp = AVL_NEXT(t, msp)) { + /* + * We preload only the maximum number of metaslabs specified + * by metaslab_preload_limit. If a metaslab is being forced + * to condense then we preload it too. This will ensure + * that force condensing happens in the next txg. + */ + if (++m > metaslab_preload_limit && !msp->ms_condense_wanted) { + continue; + } + + VERIFY(taskq_dispatch(mg->mg_taskq, metaslab_preload, + msp, TQ_SLEEP) != TASKQID_INVALID); + } + mutex_exit(&mg->mg_lock); +} + +/* + * Determine if the space map's on-disk footprint is past our tolerance + * for inefficiency. We would like to use the following criteria to make + * our decision: + * + * 1. The size of the space map object should not dramatically increase as a + * result of writing out the free space range tree. + * + * 2. The minimal on-disk space map representation is zfs_condense_pct/100 + * times the size than the free space range tree representation + * (i.e. zfs_condense_pct = 110 and in-core = 1MB, minimal = 1.1.MB). + * + * 3. The on-disk size of the space map should actually decrease. + * + * Checking the first condition is tricky since we don't want to walk + * the entire AVL tree calculating the estimated on-disk size. Instead we + * use the size-ordered range tree in the metaslab and calculate the + * size required to write out the largest segment in our free tree. If the + * size required to represent that segment on disk is larger than the space + * map object then we avoid condensing this map. + * + * To determine the second criterion we use a best-case estimate and assume + * each segment can be represented on-disk as a single 64-bit entry. We refer + * to this best-case estimate as the space map's minimal form. + * + * Unfortunately, we cannot compute the on-disk size of the space map in this + * context because we cannot accurately compute the effects of compression, etc. + * Instead, we apply the heuristic described in the block comment for + * zfs_metaslab_condense_block_threshold - we only condense if the space used + * is greater than a threshold number of blocks. + */ +static boolean_t +metaslab_should_condense(metaslab_t *msp) +{ + space_map_t *sm = msp->ms_sm; + range_seg_t *rs; + uint64_t size, entries, segsz, object_size, optimal_size, record_size; + dmu_object_info_t doi; + uint64_t vdev_blocksize = 1ULL << msp->ms_group->mg_vd->vdev_ashift; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT(msp->ms_loaded); + + /* + * Use the ms_size_tree range tree, which is ordered by size, to + * obtain the largest segment in the free tree. We always condense + * metaslabs that are empty and metaslabs for which a condense + * request has been made. + */ + rs = avl_last(&msp->ms_size_tree); + if (rs == NULL || msp->ms_condense_wanted) + return (B_TRUE); + + /* + * Calculate the number of 64-bit entries this segment would + * require when written to disk. If this single segment would be + * larger on-disk than the entire current on-disk structure, then + * clearly condensing will increase the on-disk structure size. + */ + size = (rs->rs_end - rs->rs_start) >> sm->sm_shift; + entries = size / (MIN(size, SM_RUN_MAX)); + segsz = entries * sizeof (uint64_t); + + optimal_size = sizeof (uint64_t) * avl_numnodes(&msp->ms_tree->rt_root); + object_size = space_map_length(msp->ms_sm); + + dmu_object_info_from_db(sm->sm_dbuf, &doi); + record_size = MAX(doi.doi_data_block_size, vdev_blocksize); + + return (segsz <= object_size && + object_size >= (optimal_size * zfs_condense_pct / 100) && + object_size > zfs_metaslab_condense_block_threshold * record_size); +} + +/* + * Condense the on-disk space map representation to its minimized form. + * The minimized form consists of a small number of allocations followed by + * the entries of the free range tree. + */ +static void +metaslab_condense(metaslab_t *msp, uint64_t txg, dmu_tx_t *tx) +{ + spa_t *spa = msp->ms_group->mg_vd->vdev_spa; + range_tree_t *condense_tree; + space_map_t *sm = msp->ms_sm; + int t; + + ASSERT(MUTEX_HELD(&msp->ms_lock)); + ASSERT3U(spa_sync_pass(spa), ==, 1); + ASSERT(msp->ms_loaded); + + + spa_dbgmsg(spa, "condensing: txg %llu, msp[%llu] %p, vdev id %llu, " + "spa %s, smp size %llu, segments %lu, forcing condense=%s", txg, + msp->ms_id, msp, msp->ms_group->mg_vd->vdev_id, + msp->ms_group->mg_vd->vdev_spa->spa_name, + space_map_length(msp->ms_sm), avl_numnodes(&msp->ms_tree->rt_root), + msp->ms_condense_wanted ? "TRUE" : "FALSE"); + + msp->ms_condense_wanted = B_FALSE; + + /* + * Create an range tree that is 100% allocated. We remove segments + * that have been freed in this txg, any deferred frees that exist, + * and any allocation in the future. Removing segments should be + * a relatively inexpensive operation since we expect these trees to + * have a small number of nodes. + */ + condense_tree = range_tree_create(NULL, NULL, &msp->ms_lock); + range_tree_add(condense_tree, msp->ms_start, msp->ms_size); + + /* + * Remove what's been freed in this txg from the condense_tree. + * Since we're in sync_pass 1, we know that all the frees from + * this txg are in the freeingtree. + */ + range_tree_walk(msp->ms_freeingtree, range_tree_remove, condense_tree); + + for (t = 0; t < TXG_DEFER_SIZE; t++) { + range_tree_walk(msp->ms_defertree[t], + range_tree_remove, condense_tree); + } + + for (t = 1; t < TXG_CONCURRENT_STATES; t++) { + range_tree_walk(msp->ms_alloctree[(txg + t) & TXG_MASK], + range_tree_remove, condense_tree); + } + + /* + * We're about to drop the metaslab's lock thus allowing + * other consumers to change it's content. Set the + * metaslab's ms_condensing flag to ensure that + * allocations on this metaslab do not occur while we're + * in the middle of committing it to disk. This is only critical + * for the ms_tree as all other range trees use per txg + * views of their content. + */ + msp->ms_condensing = B_TRUE; + + mutex_exit(&msp->ms_lock); + space_map_truncate(sm, tx); + mutex_enter(&msp->ms_lock); + + /* + * While we would ideally like to create a space map representation + * that consists only of allocation records, doing so can be + * prohibitively expensive because the in-core free tree can be + * large, and therefore computationally expensive to subtract + * from the condense_tree. Instead we sync out two trees, a cheap + * allocation only tree followed by the in-core free tree. While not + * optimal, this is typically close to optimal, and much cheaper to + * compute. + */ + space_map_write(sm, condense_tree, SM_ALLOC, tx); + range_tree_vacate(condense_tree, NULL, NULL); + range_tree_destroy(condense_tree); + + space_map_write(sm, msp->ms_tree, SM_FREE, tx); + msp->ms_condensing = B_FALSE; +} + +/* + * Write a metaslab to disk in the context of the specified transaction group. + */ +void +metaslab_sync(metaslab_t *msp, uint64_t txg) +{ + metaslab_group_t *mg = msp->ms_group; + vdev_t *vd = mg->mg_vd; + spa_t *spa = vd->vdev_spa; + objset_t *mos = spa_meta_objset(spa); + range_tree_t *alloctree = msp->ms_alloctree[txg & TXG_MASK]; + dmu_tx_t *tx; + uint64_t object = space_map_object(msp->ms_sm); + + ASSERT(!vd->vdev_ishole); + + /* + * This metaslab has just been added so there's no work to do now. + */ + if (msp->ms_freeingtree == NULL) { + ASSERT3P(alloctree, ==, NULL); + return; + } + + ASSERT3P(alloctree, !=, NULL); + ASSERT3P(msp->ms_freeingtree, !=, NULL); + ASSERT3P(msp->ms_freedtree, !=, NULL); + + /* + * Normally, we don't want to process a metaslab if there + * are no allocations or frees to perform. However, if the metaslab + * is being forced to condense and it's loaded, we need to let it + * through. + */ + if (range_tree_space(alloctree) == 0 && + range_tree_space(msp->ms_freeingtree) == 0 && + !(msp->ms_loaded && msp->ms_condense_wanted)) + return; + + + VERIFY(txg <= spa_final_dirty_txg(spa)); + + /* + * The only state that can actually be changing concurrently with + * metaslab_sync() is the metaslab's ms_tree. No other thread can + * be modifying this txg's alloctree, freeingtree, freedtree, or + * space_map_phys_t. Therefore, we only hold ms_lock to satify + * space map ASSERTs. We drop it whenever we call into the DMU, + * because the DMU can call down to us (e.g. via zio_free()) at + * any time. + */ + + tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg); + + if (msp->ms_sm == NULL) { + uint64_t new_object; + + new_object = space_map_alloc(mos, tx); + VERIFY3U(new_object, !=, 0); + + VERIFY0(space_map_open(&msp->ms_sm, mos, new_object, + msp->ms_start, msp->ms_size, vd->vdev_ashift, + &msp->ms_lock)); + ASSERT(msp->ms_sm != NULL); + } + + mutex_enter(&msp->ms_lock); + + /* + * Note: metaslab_condense() clears the space map's histogram. + * Therefore we must verify and remove this histogram before + * condensing. + */ + metaslab_group_histogram_verify(mg); + metaslab_class_histogram_verify(mg->mg_class); + metaslab_group_histogram_remove(mg, msp); + + if (msp->ms_loaded && spa_sync_pass(spa) == 1 && + metaslab_should_condense(msp)) { + metaslab_condense(msp, txg, tx); + } else { + space_map_write(msp->ms_sm, alloctree, SM_ALLOC, tx); + space_map_write(msp->ms_sm, msp->ms_freeingtree, SM_FREE, tx); + } + + if (msp->ms_loaded) { + int t; + + /* + * When the space map is loaded, we have an accruate + * histogram in the range tree. This gives us an opportunity + * to bring the space map's histogram up-to-date so we clear + * it first before updating it. + */ + space_map_histogram_clear(msp->ms_sm); + space_map_histogram_add(msp->ms_sm, msp->ms_tree, tx); + + /* + * Since we've cleared the histogram we need to add back + * any free space that has already been processed, plus + * any deferred space. This allows the on-disk histogram + * to accurately reflect all free space even if some space + * is not yet available for allocation (i.e. deferred). + */ + space_map_histogram_add(msp->ms_sm, msp->ms_freedtree, tx); + + /* + * Add back any deferred free space that has not been + * added back into the in-core free tree yet. This will + * ensure that we don't end up with a space map histogram + * that is completely empty unless the metaslab is fully + * allocated. + */ + for (t = 0; t < TXG_DEFER_SIZE; t++) { + space_map_histogram_add(msp->ms_sm, + msp->ms_defertree[t], tx); + } + } + + /* + * Always add the free space from this sync pass to the space + * map histogram. We want to make sure that the on-disk histogram + * accounts for all free space. If the space map is not loaded, + * then we will lose some accuracy but will correct it the next + * time we load the space map. + */ + space_map_histogram_add(msp->ms_sm, msp->ms_freeingtree, tx); + + metaslab_group_histogram_add(mg, msp); + metaslab_group_histogram_verify(mg); + metaslab_class_histogram_verify(mg->mg_class); + + /* + * For sync pass 1, we avoid traversing this txg's free range tree + * and instead will just swap the pointers for freeingtree and + * freedtree. We can safely do this since the freed_tree is + * guaranteed to be empty on the initial pass. + */ + if (spa_sync_pass(spa) == 1) { + range_tree_swap(&msp->ms_freeingtree, &msp->ms_freedtree); + } else { + range_tree_vacate(msp->ms_freeingtree, + range_tree_add, msp->ms_freedtree); + } + range_tree_vacate(alloctree, NULL, NULL); + + ASSERT0(range_tree_space(msp->ms_alloctree[txg & TXG_MASK])); + ASSERT0(range_tree_space(msp->ms_alloctree[TXG_CLEAN(txg) & TXG_MASK])); + ASSERT0(range_tree_space(msp->ms_freeingtree)); + + mutex_exit(&msp->ms_lock); + + if (object != space_map_object(msp->ms_sm)) { + object = space_map_object(msp->ms_sm); + dmu_write(mos, vd->vdev_ms_array, sizeof (uint64_t) * + msp->ms_id, sizeof (uint64_t), &object, tx); + } + dmu_tx_commit(tx); +} + +/* + * Called after a transaction group has completely synced to mark + * all of the metaslab's free space as usable. + */ +void +metaslab_sync_done(metaslab_t *msp, uint64_t txg) +{ + metaslab_group_t *mg = msp->ms_group; + vdev_t *vd = mg->mg_vd; + spa_t *spa = vd->vdev_spa; + range_tree_t **defer_tree; + int64_t alloc_delta, defer_delta; + uint64_t free_space; + boolean_t defer_allowed = B_TRUE; + int t; + + ASSERT(!vd->vdev_ishole); + + mutex_enter(&msp->ms_lock); + + /* + * If this metaslab is just becoming available, initialize its + * range trees and add its capacity to the vdev. + */ + if (msp->ms_freedtree == NULL) { + for (t = 0; t < TXG_SIZE; t++) { + ASSERT(msp->ms_alloctree[t] == NULL); + + msp->ms_alloctree[t] = range_tree_create(NULL, msp, + &msp->ms_lock); + } + + ASSERT3P(msp->ms_freeingtree, ==, NULL); + msp->ms_freeingtree = range_tree_create(NULL, msp, + &msp->ms_lock); + + ASSERT3P(msp->ms_freedtree, ==, NULL); + msp->ms_freedtree = range_tree_create(NULL, msp, + &msp->ms_lock); + + for (t = 0; t < TXG_DEFER_SIZE; t++) { + ASSERT(msp->ms_defertree[t] == NULL); + + msp->ms_defertree[t] = range_tree_create(NULL, msp, + &msp->ms_lock); + } + + vdev_space_update(vd, 0, 0, msp->ms_size); + } + + defer_tree = &msp->ms_defertree[txg % TXG_DEFER_SIZE]; + + free_space = metaslab_class_get_space(spa_normal_class(spa)) - + metaslab_class_get_alloc(spa_normal_class(spa)); + if (free_space <= spa_get_slop_space(spa)) { + defer_allowed = B_FALSE; + } + + defer_delta = 0; + alloc_delta = space_map_alloc_delta(msp->ms_sm); + if (defer_allowed) { + defer_delta = range_tree_space(msp->ms_freedtree) - + range_tree_space(*defer_tree); + } else { + defer_delta -= range_tree_space(*defer_tree); + } + + vdev_space_update(vd, alloc_delta + defer_delta, defer_delta, 0); + + /* + * If there's a metaslab_load() in progress, wait for it to complete + * so that we have a consistent view of the in-core space map. + */ + metaslab_load_wait(msp); + + /* + * Move the frees from the defer_tree back to the free + * range tree (if it's loaded). Swap the freed_tree and the + * defer_tree -- this is safe to do because we've just emptied out + * the defer_tree. + */ + range_tree_vacate(*defer_tree, + msp->ms_loaded ? range_tree_add : NULL, msp->ms_tree); + if (defer_allowed) { + range_tree_swap(&msp->ms_freedtree, defer_tree); + } else { + range_tree_vacate(msp->ms_freedtree, + msp->ms_loaded ? range_tree_add : NULL, msp->ms_tree); + } + + space_map_update(msp->ms_sm); + + msp->ms_deferspace += defer_delta; + ASSERT3S(msp->ms_deferspace, >=, 0); + ASSERT3S(msp->ms_deferspace, <=, msp->ms_size); + if (msp->ms_deferspace != 0) { + /* + * Keep syncing this metaslab until all deferred frees + * are back in circulation. + */ + vdev_dirty(vd, VDD_METASLAB, msp, txg + 1); + } + + /* + * Calculate the new weights before unloading any metaslabs. + * This will give us the most accurate weighting. + */ + metaslab_group_sort(mg, msp, metaslab_weight(msp)); + + /* + * If the metaslab is loaded and we've not tried to load or allocate + * from it in 'metaslab_unload_delay' txgs, then unload it. + */ + if (msp->ms_loaded && + msp->ms_selected_txg + metaslab_unload_delay < txg) { + + for (t = 1; t < TXG_CONCURRENT_STATES; t++) { + VERIFY0(range_tree_space( + msp->ms_alloctree[(txg + t) & TXG_MASK])); + } + + if (!metaslab_debug_unload) + metaslab_unload(msp); + } + + mutex_exit(&msp->ms_lock); +} + +void +metaslab_sync_reassess(metaslab_group_t *mg) +{ + metaslab_group_alloc_update(mg); + mg->mg_fragmentation = metaslab_group_fragmentation(mg); + + /* + * Preload the next potential metaslabs + */ + metaslab_group_preload(mg); +} + +static uint64_t +metaslab_distance(metaslab_t *msp, dva_t *dva) +{ + uint64_t ms_shift = msp->ms_group->mg_vd->vdev_ms_shift; + uint64_t offset = DVA_GET_OFFSET(dva) >> ms_shift; + uint64_t start = msp->ms_id; + + if (msp->ms_group->mg_vd->vdev_id != DVA_GET_VDEV(dva)) + return (1ULL << 63); + + if (offset < start) + return ((start - offset) << ms_shift); + if (offset > start) + return ((offset - start) << ms_shift); + return (0); +} + +/* + * ========================================================================== + * Metaslab allocation tracing facility + * ========================================================================== + */ +#ifdef _METASLAB_TRACING +kstat_t *metaslab_trace_ksp; +kstat_named_t metaslab_trace_over_limit; + +void +metaslab_alloc_trace_init(void) +{ + ASSERT(metaslab_alloc_trace_cache == NULL); + metaslab_alloc_trace_cache = kmem_cache_create( + "metaslab_alloc_trace_cache", sizeof (metaslab_alloc_trace_t), + 0, NULL, NULL, NULL, NULL, NULL, 0); + metaslab_trace_ksp = kstat_create("zfs", 0, "metaslab_trace_stats", + "misc", KSTAT_TYPE_NAMED, 1, KSTAT_FLAG_VIRTUAL); + if (metaslab_trace_ksp != NULL) { + metaslab_trace_ksp->ks_data = &metaslab_trace_over_limit; + kstat_named_init(&metaslab_trace_over_limit, + "metaslab_trace_over_limit", KSTAT_DATA_UINT64); + kstat_install(metaslab_trace_ksp); + } +} + +void +metaslab_alloc_trace_fini(void) +{ + if (metaslab_trace_ksp != NULL) { + kstat_delete(metaslab_trace_ksp); + metaslab_trace_ksp = NULL; + } + kmem_cache_destroy(metaslab_alloc_trace_cache); + metaslab_alloc_trace_cache = NULL; +} + +/* + * Add an allocation trace element to the allocation tracing list. + */ +static void +metaslab_trace_add(zio_alloc_list_t *zal, metaslab_group_t *mg, + metaslab_t *msp, uint64_t psize, uint32_t dva_id, uint64_t offset) +{ + metaslab_alloc_trace_t *mat; + + if (!metaslab_trace_enabled) + return; + + /* + * When the tracing list reaches its maximum we remove + * the second element in the list before adding a new one. + * By removing the second element we preserve the original + * entry as a clue to what allocations steps have already been + * performed. + */ + if (zal->zal_size == metaslab_trace_max_entries) { + metaslab_alloc_trace_t *mat_next; +#ifdef DEBUG + panic("too many entries in allocation list"); +#endif + atomic_inc_64(&metaslab_trace_over_limit.value.ui64); + zal->zal_size--; + mat_next = list_next(&zal->zal_list, list_head(&zal->zal_list)); + list_remove(&zal->zal_list, mat_next); + kmem_cache_free(metaslab_alloc_trace_cache, mat_next); + } + + mat = kmem_cache_alloc(metaslab_alloc_trace_cache, KM_SLEEP); + list_link_init(&mat->mat_list_node); + mat->mat_mg = mg; + mat->mat_msp = msp; + mat->mat_size = psize; + mat->mat_dva_id = dva_id; + mat->mat_offset = offset; + mat->mat_weight = 0; + + if (msp != NULL) + mat->mat_weight = msp->ms_weight; + + /* + * The list is part of the zio so locking is not required. Only + * a single thread will perform allocations for a given zio. + */ + list_insert_tail(&zal->zal_list, mat); + zal->zal_size++; + + ASSERT3U(zal->zal_size, <=, metaslab_trace_max_entries); +} + +void +metaslab_trace_init(zio_alloc_list_t *zal) +{ + list_create(&zal->zal_list, sizeof (metaslab_alloc_trace_t), + offsetof(metaslab_alloc_trace_t, mat_list_node)); + zal->zal_size = 0; +} + +void +metaslab_trace_fini(zio_alloc_list_t *zal) +{ + metaslab_alloc_trace_t *mat; + + while ((mat = list_remove_head(&zal->zal_list)) != NULL) + kmem_cache_free(metaslab_alloc_trace_cache, mat); + list_destroy(&zal->zal_list); + zal->zal_size = 0; +} +#else + +#define metaslab_trace_add(zal, mg, msp, psize, id, off) + +void +metaslab_alloc_trace_init(void) +{ +} + +void +metaslab_alloc_trace_fini(void) +{ +} + +void +metaslab_trace_init(zio_alloc_list_t *zal) +{ +} + +void +metaslab_trace_fini(zio_alloc_list_t *zal) +{ +} + +#endif /* _METASLAB_TRACING */ + +/* + * ========================================================================== + * Metaslab block operations + * ========================================================================== + */ + +static void +metaslab_group_alloc_increment(spa_t *spa, uint64_t vdev, void *tag, int flags) +{ + metaslab_group_t *mg; + + if (!(flags & METASLAB_ASYNC_ALLOC) || + flags & METASLAB_DONT_THROTTLE) + return; + + mg = vdev_lookup_top(spa, vdev)->vdev_mg; + if (!mg->mg_class->mc_alloc_throttle_enabled) + return; + + (void) refcount_add(&mg->mg_alloc_queue_depth, tag); +} + +void +metaslab_group_alloc_decrement(spa_t *spa, uint64_t vdev, void *tag, int flags) +{ + metaslab_group_t *mg; + + if (!(flags & METASLAB_ASYNC_ALLOC) || + flags & METASLAB_DONT_THROTTLE) + return; + + mg = vdev_lookup_top(spa, vdev)->vdev_mg; + if (!mg->mg_class->mc_alloc_throttle_enabled) + return; + + (void) refcount_remove(&mg->mg_alloc_queue_depth, tag); +} + +void +metaslab_group_alloc_verify(spa_t *spa, const blkptr_t *bp, void *tag) +{ +#ifdef ZFS_DEBUG + const dva_t *dva = bp->blk_dva; + int ndvas = BP_GET_NDVAS(bp); + int d; + + for (d = 0; d < ndvas; d++) { + uint64_t vdev = DVA_GET_VDEV(&dva[d]); + metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg; + VERIFY(refcount_not_held(&mg->mg_alloc_queue_depth, tag)); + } +#endif +} + +static uint64_t +metaslab_block_alloc(metaslab_t *msp, uint64_t size, uint64_t txg) +{ + uint64_t start; + range_tree_t *rt = msp->ms_tree; + metaslab_class_t *mc = msp->ms_group->mg_class; + + VERIFY(!msp->ms_condensing); + + start = mc->mc_ops->msop_alloc(msp, size); + if (start != -1ULL) { + metaslab_group_t *mg = msp->ms_group; + vdev_t *vd = mg->mg_vd; + + VERIFY0(P2PHASE(start, 1ULL << vd->vdev_ashift)); + VERIFY0(P2PHASE(size, 1ULL << vd->vdev_ashift)); + VERIFY3U(range_tree_space(rt) - size, <=, msp->ms_size); + range_tree_remove(rt, start, size); + + if (range_tree_space(msp->ms_alloctree[txg & TXG_MASK]) == 0) + vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg); + + range_tree_add(msp->ms_alloctree[txg & TXG_MASK], start, size); + + /* Track the last successful allocation */ + msp->ms_alloc_txg = txg; + metaslab_verify_space(msp, txg); + } + + /* + * Now that we've attempted the allocation we need to update the + * metaslab's maximum block size since it may have changed. + */ + msp->ms_max_size = metaslab_block_maxsize(msp); + return (start); +} + +static uint64_t +metaslab_group_alloc_normal(metaslab_group_t *mg, zio_alloc_list_t *zal, + uint64_t asize, uint64_t txg, uint64_t min_distance, dva_t *dva, int d) +{ + metaslab_t *msp = NULL; + metaslab_t *search; + uint64_t offset = -1ULL; + uint64_t activation_weight; + uint64_t target_distance; + int i; + + activation_weight = METASLAB_WEIGHT_PRIMARY; + for (i = 0; i < d; i++) { + if (DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) { + activation_weight = METASLAB_WEIGHT_SECONDARY; + break; + } + } + + search = kmem_alloc(sizeof (*search), KM_SLEEP); + search->ms_weight = UINT64_MAX; + search->ms_start = 0; + for (;;) { + boolean_t was_active; + avl_tree_t *t = &mg->mg_metaslab_tree; + avl_index_t idx; + + mutex_enter(&mg->mg_lock); + + /* + * Find the metaslab with the highest weight that is less + * than what we've already tried. In the common case, this + * means that we will examine each metaslab at most once. + * Note that concurrent callers could reorder metaslabs + * by activation/passivation once we have dropped the mg_lock. + * If a metaslab is activated by another thread, and we fail + * to allocate from the metaslab we have selected, we may + * not try the newly-activated metaslab, and instead activate + * another metaslab. This is not optimal, but generally + * does not cause any problems (a possible exception being + * if every metaslab is completely full except for the + * the newly-activated metaslab which we fail to examine). + */ + msp = avl_find(t, search, &idx); + if (msp == NULL) + msp = avl_nearest(t, idx, AVL_AFTER); + for (; msp != NULL; msp = AVL_NEXT(t, msp)) { + + if (!metaslab_should_allocate(msp, asize)) { + metaslab_trace_add(zal, mg, msp, asize, d, + TRACE_TOO_SMALL); + continue; + } + + /* + * If the selected metaslab is condensing, skip it. + */ + if (msp->ms_condensing) + continue; + + was_active = msp->ms_weight & METASLAB_ACTIVE_MASK; + if (activation_weight == METASLAB_WEIGHT_PRIMARY) + break; + + target_distance = min_distance + + (space_map_allocated(msp->ms_sm) != 0 ? 0 : + min_distance >> 1); + + for (i = 0; i < d; i++) { + if (metaslab_distance(msp, &dva[i]) < + target_distance) + break; + } + if (i == d) + break; + } + mutex_exit(&mg->mg_lock); + if (msp == NULL) { + kmem_free(search, sizeof (*search)); + return (-1ULL); + } + search->ms_weight = msp->ms_weight; + search->ms_start = msp->ms_start + 1; + + mutex_enter(&msp->ms_lock); + + /* + * Ensure that the metaslab we have selected is still + * capable of handling our request. It's possible that + * another thread may have changed the weight while we + * were blocked on the metaslab lock. We check the + * active status first to see if we need to reselect + * a new metaslab. + */ + if (was_active && !(msp->ms_weight & METASLAB_ACTIVE_MASK)) { + mutex_exit(&msp->ms_lock); + continue; + } + + if ((msp->ms_weight & METASLAB_WEIGHT_SECONDARY) && + activation_weight == METASLAB_WEIGHT_PRIMARY) { + metaslab_passivate(msp, + msp->ms_weight & ~METASLAB_ACTIVE_MASK); + mutex_exit(&msp->ms_lock); + continue; + } + + if (metaslab_activate(msp, activation_weight) != 0) { + mutex_exit(&msp->ms_lock); + continue; + } + msp->ms_selected_txg = txg; + + /* + * Now that we have the lock, recheck to see if we should + * continue to use this metaslab for this allocation. The + * the metaslab is now loaded so metaslab_should_allocate() can + * accurately determine if the allocation attempt should + * proceed. + */ + if (!metaslab_should_allocate(msp, asize)) { + /* Passivate this metaslab and select a new one. */ + metaslab_trace_add(zal, mg, msp, asize, d, + TRACE_TOO_SMALL); + goto next; + } + + + /* + * If this metaslab is currently condensing then pick again as + * we can't manipulate this metaslab until it's committed + * to disk. + */ + if (msp->ms_condensing) { + metaslab_trace_add(zal, mg, msp, asize, d, + TRACE_CONDENSING); + mutex_exit(&msp->ms_lock); + continue; + } + + offset = metaslab_block_alloc(msp, asize, txg); + metaslab_trace_add(zal, mg, msp, asize, d, offset); + + if (offset != -1ULL) { + /* Proactively passivate the metaslab, if needed */ + metaslab_segment_may_passivate(msp); + break; + } +next: + ASSERT(msp->ms_loaded); + + /* + * We were unable to allocate from this metaslab so determine + * a new weight for this metaslab. Now that we have loaded + * the metaslab we can provide a better hint to the metaslab + * selector. + * + * For space-based metaslabs, we use the maximum block size. + * This information is only available when the metaslab + * is loaded and is more accurate than the generic free + * space weight that was calculated by metaslab_weight(). + * This information allows us to quickly compare the maximum + * available allocation in the metaslab to the allocation + * size being requested. + * + * For segment-based metaslabs, determine the new weight + * based on the highest bucket in the range tree. We + * explicitly use the loaded segment weight (i.e. the range + * tree histogram) since it contains the space that is + * currently available for allocation and is accurate + * even within a sync pass. + */ + if (WEIGHT_IS_SPACEBASED(msp->ms_weight)) { + uint64_t weight = metaslab_block_maxsize(msp); + WEIGHT_SET_SPACEBASED(weight); + metaslab_passivate(msp, weight); + } else { + metaslab_passivate(msp, + metaslab_weight_from_range_tree(msp)); + } + + /* + * We have just failed an allocation attempt, check + * that metaslab_should_allocate() agrees. Otherwise, + * we may end up in an infinite loop retrying the same + * metaslab. + */ + ASSERT(!metaslab_should_allocate(msp, asize)); + mutex_exit(&msp->ms_lock); + } + mutex_exit(&msp->ms_lock); + kmem_free(search, sizeof (*search)); + return (offset); +} + +static uint64_t +metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal, + uint64_t asize, uint64_t txg, uint64_t min_distance, dva_t *dva, int d) +{ + uint64_t offset; + ASSERT(mg->mg_initialized); + + offset = metaslab_group_alloc_normal(mg, zal, asize, txg, + min_distance, dva, d); + + mutex_enter(&mg->mg_lock); + if (offset == -1ULL) { + mg->mg_failed_allocations++; + metaslab_trace_add(zal, mg, NULL, asize, d, + TRACE_GROUP_FAILURE); + if (asize == SPA_GANGBLOCKSIZE) { + /* + * This metaslab group was unable to allocate + * the minimum gang block size so it must be out of + * space. We must notify the allocation throttle + * to start skipping allocation attempts to this + * metaslab group until more space becomes available. + * Note: this failure cannot be caused by the + * allocation throttle since the allocation throttle + * is only responsible for skipping devices and + * not failing block allocations. + */ + mg->mg_no_free_space = B_TRUE; + } + } + mg->mg_allocations++; + mutex_exit(&mg->mg_lock); + return (offset); +} + +/* + * If we have to write a ditto block (i.e. more than one DVA for a given BP) + * on the same vdev as an existing DVA of this BP, then try to allocate it + * at least (vdev_asize / (2 ^ ditto_same_vdev_distance_shift)) away from the + * existing DVAs. + */ +int ditto_same_vdev_distance_shift = 3; + +/* + * Allocate a block for the specified i/o. + */ +static int +metaslab_alloc_dva(spa_t *spa, metaslab_class_t *mc, uint64_t psize, + dva_t *dva, int d, dva_t *hintdva, uint64_t txg, int flags, + zio_alloc_list_t *zal) +{ + metaslab_group_t *mg, *fast_mg, *rotor; + vdev_t *vd; + boolean_t try_hard = B_FALSE; + + ASSERT(!DVA_IS_VALID(&dva[d])); + + /* + * For testing, make some blocks above a certain size be gang blocks. + */ + if (psize >= metaslab_gang_bang && (ddi_get_lbolt() & 3) == 0) { + metaslab_trace_add(zal, NULL, NULL, psize, d, TRACE_FORCE_GANG); + return (SET_ERROR(ENOSPC)); + } + + /* + * Start at the rotor and loop through all mgs until we find something. + * Note that there's no locking on mc_rotor or mc_aliquot because + * nothing actually breaks if we miss a few updates -- we just won't + * allocate quite as evenly. It all balances out over time. + * + * If we are doing ditto or log blocks, try to spread them across + * consecutive vdevs. If we're forced to reuse a vdev before we've + * allocated all of our ditto blocks, then try and spread them out on + * that vdev as much as possible. If it turns out to not be possible, + * gradually lower our standards until anything becomes acceptable. + * Also, allocating on consecutive vdevs (as opposed to random vdevs) + * gives us hope of containing our fault domains to something we're + * able to reason about. Otherwise, any two top-level vdev failures + * will guarantee the loss of data. With consecutive allocation, + * only two adjacent top-level vdev failures will result in data loss. + * + * If we are doing gang blocks (hintdva is non-NULL), try to keep + * ourselves on the same vdev as our gang block header. That + * way, we can hope for locality in vdev_cache, plus it makes our + * fault domains something tractable. + */ + if (hintdva) { + vd = vdev_lookup_top(spa, DVA_GET_VDEV(&hintdva[d])); + + /* + * It's possible the vdev we're using as the hint no + * longer exists (i.e. removed). Consult the rotor when + * all else fails. + */ + if (vd != NULL) { + mg = vd->vdev_mg; + + if (flags & METASLAB_HINTBP_AVOID && + mg->mg_next != NULL) + mg = mg->mg_next; + } else { + mg = mc->mc_rotor; + } + } else if (d != 0) { + vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[d - 1])); + mg = vd->vdev_mg->mg_next; + } else if (flags & METASLAB_FASTWRITE) { + mg = fast_mg = mc->mc_rotor; + + do { + if (fast_mg->mg_vd->vdev_pending_fastwrite < + mg->mg_vd->vdev_pending_fastwrite) + mg = fast_mg; + } while ((fast_mg = fast_mg->mg_next) != mc->mc_rotor); + + } else { + mg = mc->mc_rotor; + } + + /* + * If the hint put us into the wrong metaslab class, or into a + * metaslab group that has been passivated, just follow the rotor. + */ + if (mg->mg_class != mc || mg->mg_activation_count <= 0) + mg = mc->mc_rotor; + + rotor = mg; +top: + do { + boolean_t allocatable; + uint64_t offset; + uint64_t distance, asize; + + ASSERT(mg->mg_activation_count == 1); + vd = mg->mg_vd; + + /* + * Don't allocate from faulted devices. + */ + if (try_hard) { + spa_config_enter(spa, SCL_ZIO, FTAG, RW_READER); + allocatable = vdev_allocatable(vd); + spa_config_exit(spa, SCL_ZIO, FTAG); + } else { + allocatable = vdev_allocatable(vd); + } + + /* + * Determine if the selected metaslab group is eligible + * for allocations. If we're ganging then don't allow + * this metaslab group to skip allocations since that would + * inadvertently return ENOSPC and suspend the pool + * even though space is still available. + */ + if (allocatable && !GANG_ALLOCATION(flags) && !try_hard) { + allocatable = metaslab_group_allocatable(mg, rotor, + psize); + } + + if (!allocatable) { + metaslab_trace_add(zal, mg, NULL, psize, d, + TRACE_NOT_ALLOCATABLE); + goto next; + } + + ASSERT(mg->mg_initialized); + + /* + * Avoid writing single-copy data to a failing, + * non-redundant vdev, unless we've already tried all + * other vdevs. + */ + if ((vd->vdev_stat.vs_write_errors > 0 || + vd->vdev_state < VDEV_STATE_HEALTHY) && + d == 0 && !try_hard && vd->vdev_children == 0) { + metaslab_trace_add(zal, mg, NULL, psize, d, + TRACE_VDEV_ERROR); + goto next; + } + + ASSERT(mg->mg_class == mc); + + /* + * If we don't need to try hard, then require that the + * block be 1/8th of the device away from any other DVAs + * in this BP. If we are trying hard, allow any offset + * to be used (distance=0). + */ + distance = 0; + if (!try_hard) { + distance = vd->vdev_asize >> + ditto_same_vdev_distance_shift; + if (distance <= (1ULL << vd->vdev_ms_shift)) + distance = 0; + } + + asize = vdev_psize_to_asize(vd, psize); + ASSERT(P2PHASE(asize, 1ULL << vd->vdev_ashift) == 0); + + offset = metaslab_group_alloc(mg, zal, asize, txg, distance, + dva, d); + + if (offset != -1ULL) { + /* + * If we've just selected this metaslab group, + * figure out whether the corresponding vdev is + * over- or under-used relative to the pool, + * and set an allocation bias to even it out. + * + * Bias is also used to compensate for unequally + * sized vdevs so that space is allocated fairly. + */ + if (mc->mc_aliquot == 0 && metaslab_bias_enabled) { + vdev_stat_t *vs = &vd->vdev_stat; + int64_t vs_free = vs->vs_space - vs->vs_alloc; + int64_t mc_free = mc->mc_space - mc->mc_alloc; + int64_t ratio; + + /* + * Calculate how much more or less we should + * try to allocate from this device during + * this iteration around the rotor. + * + * This basically introduces a zero-centered + * bias towards the devices with the most + * free space, while compensating for vdev + * size differences. + * + * Examples: + * vdev V1 = 16M/128M + * vdev V2 = 16M/128M + * ratio(V1) = 100% ratio(V2) = 100% + * + * vdev V1 = 16M/128M + * vdev V2 = 64M/128M + * ratio(V1) = 127% ratio(V2) = 72% + * + * vdev V1 = 16M/128M + * vdev V2 = 64M/512M + * ratio(V1) = 40% ratio(V2) = 160% + */ + ratio = (vs_free * mc->mc_alloc_groups * 100) / + (mc_free + 1); + mg->mg_bias = ((ratio - 100) * + (int64_t)mg->mg_aliquot) / 100; + } else if (!metaslab_bias_enabled) { + mg->mg_bias = 0; + } + + if ((flags & METASLAB_FASTWRITE) || + atomic_add_64_nv(&mc->mc_aliquot, asize) >= + mg->mg_aliquot + mg->mg_bias) { + mc->mc_rotor = mg->mg_next; + mc->mc_aliquot = 0; + } + + DVA_SET_VDEV(&dva[d], vd->vdev_id); + DVA_SET_OFFSET(&dva[d], offset); + DVA_SET_GANG(&dva[d], + ((flags & METASLAB_GANG_HEADER) ? 1 : 0)); + DVA_SET_ASIZE(&dva[d], asize); + + if (flags & METASLAB_FASTWRITE) { + atomic_add_64(&vd->vdev_pending_fastwrite, + psize); + } + + return (0); + } +next: + mc->mc_rotor = mg->mg_next; + mc->mc_aliquot = 0; + } while ((mg = mg->mg_next) != rotor); + + /* + * If we haven't tried hard, do so now. + */ + if (!try_hard) { + try_hard = B_TRUE; + goto top; + } + + bzero(&dva[d], sizeof (dva_t)); + + metaslab_trace_add(zal, rotor, NULL, psize, d, TRACE_ENOSPC); + return (SET_ERROR(ENOSPC)); +} + +/* + * Free the block represented by DVA in the context of the specified + * transaction group. + */ +static void +metaslab_free_dva(spa_t *spa, const dva_t *dva, uint64_t txg, boolean_t now) +{ + uint64_t vdev = DVA_GET_VDEV(dva); + uint64_t offset = DVA_GET_OFFSET(dva); + uint64_t size = DVA_GET_ASIZE(dva); + vdev_t *vd; + metaslab_t *msp; + + if (txg > spa_freeze_txg(spa)) + return; + + if ((vd = vdev_lookup_top(spa, vdev)) == NULL || !DVA_IS_VALID(dva) || + (offset >> vd->vdev_ms_shift) >= vd->vdev_ms_count) { + zfs_panic_recover("metaslab_free_dva(): bad DVA %llu:%llu:%llu", + (u_longlong_t)vdev, (u_longlong_t)offset, + (u_longlong_t)size); + return; + } + + msp = vd->vdev_ms[offset >> vd->vdev_ms_shift]; + + if (DVA_GET_GANG(dva)) + size = vdev_psize_to_asize(vd, SPA_GANGBLOCKSIZE); + + mutex_enter(&msp->ms_lock); + + if (now) { + range_tree_remove(msp->ms_alloctree[txg & TXG_MASK], + offset, size); + + VERIFY(!msp->ms_condensing); + VERIFY3U(offset, >=, msp->ms_start); + VERIFY3U(offset + size, <=, msp->ms_start + msp->ms_size); + VERIFY3U(range_tree_space(msp->ms_tree) + size, <=, + msp->ms_size); + VERIFY0(P2PHASE(offset, 1ULL << vd->vdev_ashift)); + VERIFY0(P2PHASE(size, 1ULL << vd->vdev_ashift)); + range_tree_add(msp->ms_tree, offset, size); + msp->ms_max_size = metaslab_block_maxsize(msp); + } else { + VERIFY3U(txg, ==, spa->spa_syncing_txg); + if (range_tree_space(msp->ms_freeingtree) == 0) + vdev_dirty(vd, VDD_METASLAB, msp, txg); + range_tree_add(msp->ms_freeingtree, offset, size); + } + + mutex_exit(&msp->ms_lock); +} + +/* + * Intent log support: upon opening the pool after a crash, notify the SPA + * of blocks that the intent log has allocated for immediate write, but + * which are still considered free by the SPA because the last transaction + * group didn't commit yet. + */ +static int +metaslab_claim_dva(spa_t *spa, const dva_t *dva, uint64_t txg) +{ + uint64_t vdev = DVA_GET_VDEV(dva); + uint64_t offset = DVA_GET_OFFSET(dva); + uint64_t size = DVA_GET_ASIZE(dva); + vdev_t *vd; + metaslab_t *msp; + int error = 0; + + ASSERT(DVA_IS_VALID(dva)); + + if ((vd = vdev_lookup_top(spa, vdev)) == NULL || + (offset >> vd->vdev_ms_shift) >= vd->vdev_ms_count) + return (SET_ERROR(ENXIO)); + + msp = vd->vdev_ms[offset >> vd->vdev_ms_shift]; + + if (DVA_GET_GANG(dva)) + size = vdev_psize_to_asize(vd, SPA_GANGBLOCKSIZE); + + mutex_enter(&msp->ms_lock); + + if ((txg != 0 && spa_writeable(spa)) || !msp->ms_loaded) + error = metaslab_activate(msp, METASLAB_WEIGHT_SECONDARY); + + if (error == 0 && !range_tree_contains(msp->ms_tree, offset, size)) + error = SET_ERROR(ENOENT); + + if (error || txg == 0) { /* txg == 0 indicates dry run */ + mutex_exit(&msp->ms_lock); + return (error); + } + + VERIFY(!msp->ms_condensing); + VERIFY0(P2PHASE(offset, 1ULL << vd->vdev_ashift)); + VERIFY0(P2PHASE(size, 1ULL << vd->vdev_ashift)); + VERIFY3U(range_tree_space(msp->ms_tree) - size, <=, msp->ms_size); + range_tree_remove(msp->ms_tree, offset, size); + + if (spa_writeable(spa)) { /* don't dirty if we're zdb(1M) */ + if (range_tree_space(msp->ms_alloctree[txg & TXG_MASK]) == 0) + vdev_dirty(vd, VDD_METASLAB, msp, txg); + range_tree_add(msp->ms_alloctree[txg & TXG_MASK], offset, size); + } + + mutex_exit(&msp->ms_lock); + + return (0); +} + +/* + * Reserve some allocation slots. The reservation system must be called + * before we call into the allocator. If there aren't any available slots + * then the I/O will be throttled until an I/O completes and its slots are + * freed up. The function returns true if it was successful in placing + * the reservation. + */ +boolean_t +metaslab_class_throttle_reserve(metaslab_class_t *mc, int slots, zio_t *zio, + int flags) +{ + uint64_t available_slots = 0; + uint64_t reserved_slots; + boolean_t slot_reserved = B_FALSE; + + ASSERT(mc->mc_alloc_throttle_enabled); + mutex_enter(&mc->mc_lock); + + reserved_slots = refcount_count(&mc->mc_alloc_slots); + if (reserved_slots < mc->mc_alloc_max_slots) + available_slots = mc->mc_alloc_max_slots - reserved_slots; + + if (slots <= available_slots || GANG_ALLOCATION(flags)) { + int d; + + /* + * We reserve the slots individually so that we can unreserve + * them individually when an I/O completes. + */ + for (d = 0; d < slots; d++) { + reserved_slots = refcount_add(&mc->mc_alloc_slots, zio); + } + zio->io_flags |= ZIO_FLAG_IO_ALLOCATING; + slot_reserved = B_TRUE; + } + + mutex_exit(&mc->mc_lock); + return (slot_reserved); +} + +void +metaslab_class_throttle_unreserve(metaslab_class_t *mc, int slots, zio_t *zio) +{ + int d; + + ASSERT(mc->mc_alloc_throttle_enabled); + mutex_enter(&mc->mc_lock); + for (d = 0; d < slots; d++) { + (void) refcount_remove(&mc->mc_alloc_slots, zio); + } + mutex_exit(&mc->mc_lock); +} + +int +metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp, + int ndvas, uint64_t txg, blkptr_t *hintbp, int flags, + zio_alloc_list_t *zal, zio_t *zio) +{ + dva_t *dva = bp->blk_dva; + dva_t *hintdva = hintbp->blk_dva; + int d, error = 0; + + ASSERT(bp->blk_birth == 0); + ASSERT(BP_PHYSICAL_BIRTH(bp) == 0); + + spa_config_enter(spa, SCL_ALLOC, FTAG, RW_READER); + + if (mc->mc_rotor == NULL) { /* no vdevs in this class */ + spa_config_exit(spa, SCL_ALLOC, FTAG); + return (SET_ERROR(ENOSPC)); + } + + ASSERT(ndvas > 0 && ndvas <= spa_max_replication(spa)); + ASSERT(BP_GET_NDVAS(bp) == 0); + ASSERT(hintbp == NULL || ndvas <= BP_GET_NDVAS(hintbp)); + ASSERT3P(zal, !=, NULL); + + for (d = 0; d < ndvas; d++) { + error = metaslab_alloc_dva(spa, mc, psize, dva, d, hintdva, + txg, flags, zal); + if (error != 0) { + for (d--; d >= 0; d--) { + metaslab_free_dva(spa, &dva[d], txg, B_TRUE); + metaslab_group_alloc_decrement(spa, + DVA_GET_VDEV(&dva[d]), zio, flags); + bzero(&dva[d], sizeof (dva_t)); + } + spa_config_exit(spa, SCL_ALLOC, FTAG); + return (error); + } else { + /* + * Update the metaslab group's queue depth + * based on the newly allocated dva. + */ + metaslab_group_alloc_increment(spa, + DVA_GET_VDEV(&dva[d]), zio, flags); + } + + } + ASSERT(error == 0); + ASSERT(BP_GET_NDVAS(bp) == ndvas); + + spa_config_exit(spa, SCL_ALLOC, FTAG); + + BP_SET_BIRTH(bp, txg, 0); + + return (0); +} + +void +metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg, boolean_t now) +{ + const dva_t *dva = bp->blk_dva; + int d, ndvas = BP_GET_NDVAS(bp); + + ASSERT(!BP_IS_HOLE(bp)); + ASSERT(!now || bp->blk_birth >= spa_syncing_txg(spa)); + + spa_config_enter(spa, SCL_FREE, FTAG, RW_READER); + + for (d = 0; d < ndvas; d++) + metaslab_free_dva(spa, &dva[d], txg, now); + + spa_config_exit(spa, SCL_FREE, FTAG); +} + +int +metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg) +{ + const dva_t *dva = bp->blk_dva; + int ndvas = BP_GET_NDVAS(bp); + int d, error = 0; + + ASSERT(!BP_IS_HOLE(bp)); + + if (txg != 0) { + /* + * First do a dry run to make sure all DVAs are claimable, + * so we don't have to unwind from partial failures below. + */ + if ((error = metaslab_claim(spa, bp, 0)) != 0) + return (error); + } + + spa_config_enter(spa, SCL_ALLOC, FTAG, RW_READER); + + for (d = 0; d < ndvas; d++) + if ((error = metaslab_claim_dva(spa, &dva[d], txg)) != 0) + break; + + spa_config_exit(spa, SCL_ALLOC, FTAG); + + ASSERT(error == 0 || txg == 0); + + return (error); +} + +void +metaslab_fastwrite_mark(spa_t *spa, const blkptr_t *bp) +{ + const dva_t *dva = bp->blk_dva; + int ndvas = BP_GET_NDVAS(bp); + uint64_t psize = BP_GET_PSIZE(bp); + int d; + vdev_t *vd; + + ASSERT(!BP_IS_HOLE(bp)); + ASSERT(!BP_IS_EMBEDDED(bp)); + ASSERT(psize > 0); + + spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); + + for (d = 0; d < ndvas; d++) { + if ((vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[d]))) == NULL) + continue; + atomic_add_64(&vd->vdev_pending_fastwrite, psize); + } + + spa_config_exit(spa, SCL_VDEV, FTAG); +} + +void +metaslab_fastwrite_unmark(spa_t *spa, const blkptr_t *bp) +{ + const dva_t *dva = bp->blk_dva; + int ndvas = BP_GET_NDVAS(bp); + uint64_t psize = BP_GET_PSIZE(bp); + int d; + vdev_t *vd; + + ASSERT(!BP_IS_HOLE(bp)); + ASSERT(!BP_IS_EMBEDDED(bp)); + ASSERT(psize > 0); + + spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); + + for (d = 0; d < ndvas; d++) { + if ((vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[d]))) == NULL) + continue; + ASSERT3U(vd->vdev_pending_fastwrite, >=, psize); + atomic_sub_64(&vd->vdev_pending_fastwrite, psize); + } + + spa_config_exit(spa, SCL_VDEV, FTAG); +} + +void +metaslab_check_free(spa_t *spa, const blkptr_t *bp) +{ + int i, j; + + if ((zfs_flags & ZFS_DEBUG_ZIO_FREE) == 0) + return; + + spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); + for (i = 0; i < BP_GET_NDVAS(bp); i++) { + uint64_t vdev = DVA_GET_VDEV(&bp->blk_dva[i]); + vdev_t *vd = vdev_lookup_top(spa, vdev); + uint64_t offset = DVA_GET_OFFSET(&bp->blk_dva[i]); + uint64_t size = DVA_GET_ASIZE(&bp->blk_dva[i]); + metaslab_t *msp = vd->vdev_ms[offset >> vd->vdev_ms_shift]; + + if (msp->ms_loaded) + range_tree_verify(msp->ms_tree, offset, size); + + range_tree_verify(msp->ms_freeingtree, offset, size); + range_tree_verify(msp->ms_freedtree, offset, size); + for (j = 0; j < TXG_DEFER_SIZE; j++) + range_tree_verify(msp->ms_defertree[j], offset, size); + } + spa_config_exit(spa, SCL_VDEV, FTAG); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* CSTYLED */ +module_param(metaslab_aliquot, ulong, 0644); +MODULE_PARM_DESC(metaslab_aliquot, + "allocation granularity (a.k.a. stripe size)"); + +module_param(metaslab_debug_load, int, 0644); +MODULE_PARM_DESC(metaslab_debug_load, + "load all metaslabs when pool is first opened"); + +module_param(metaslab_debug_unload, int, 0644); +MODULE_PARM_DESC(metaslab_debug_unload, + "prevent metaslabs from being unloaded"); + +module_param(metaslab_preload_enabled, int, 0644); +MODULE_PARM_DESC(metaslab_preload_enabled, + "preload potential metaslabs during reassessment"); + +module_param(zfs_mg_noalloc_threshold, int, 0644); +MODULE_PARM_DESC(zfs_mg_noalloc_threshold, + "percentage of free space for metaslab group to allow allocation"); + +module_param(zfs_mg_fragmentation_threshold, int, 0644); +MODULE_PARM_DESC(zfs_mg_fragmentation_threshold, + "fragmentation for metaslab group to allow allocation"); + +module_param(zfs_metaslab_fragmentation_threshold, int, 0644); +MODULE_PARM_DESC(zfs_metaslab_fragmentation_threshold, + "fragmentation for metaslab to allow allocation"); + +module_param(metaslab_fragmentation_factor_enabled, int, 0644); +MODULE_PARM_DESC(metaslab_fragmentation_factor_enabled, + "use the fragmentation metric to prefer less fragmented metaslabs"); + +module_param(metaslab_lba_weighting_enabled, int, 0644); +MODULE_PARM_DESC(metaslab_lba_weighting_enabled, + "prefer metaslabs with lower LBAs"); + +module_param(metaslab_bias_enabled, int, 0644); +MODULE_PARM_DESC(metaslab_bias_enabled, + "enable metaslab group biasing"); + +module_param(zfs_metaslab_segment_weight_enabled, int, 0644); +MODULE_PARM_DESC(zfs_metaslab_segment_weight_enabled, + "enable segment-based metaslab selection"); + +module_param(zfs_metaslab_switch_threshold, int, 0644); +MODULE_PARM_DESC(zfs_metaslab_switch_threshold, + "segment-based metaslab selection maximum buckets before switching"); +#endif /* _KERNEL && HAVE_SPL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/mmp.c +++ linux-aws-4.15.0/zfs/module/zfs/mmp.c @@ -0,0 +1,514 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2017 by Lawrence Livermore National Security, LLC. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Multi-Modifier Protection (MMP) attempts to prevent a user from importing + * or opening a pool on more than one host at a time. In particular, it + * prevents "zpool import -f" on a host from succeeding while the pool is + * already imported on another host. There are many other ways in which a + * device could be used by two hosts for different purposes at the same time + * resulting in pool damage. This implementation does not attempt to detect + * those cases. + * + * MMP operates by ensuring there are frequent visible changes on disk (a + * "heartbeat") at all times. And by altering the import process to check + * for these changes and failing the import when they are detected. This + * functionality is enabled by setting the 'multihost' pool property to on. + * + * Uberblocks written by the txg_sync thread always go into the first + * (N-MMP_BLOCKS_PER_LABEL) slots, the remaining slots are reserved for MMP. + * They are used to hold uberblocks which are exactly the same as the last + * synced uberblock except that the ub_timestamp is frequently updated. + * Like all other uberblocks, the slot is written with an embedded checksum, + * and slots with invalid checksums are ignored. This provides the + * "heartbeat", with no risk of overwriting good uberblocks that must be + * preserved, e.g. previous txgs and associated block pointers. + * + * Two optional fields are added to uberblock structure: ub_mmp_magic and + * ub_mmp_delay. The magic field allows zfs to tell whether ub_mmp_delay is + * valid. The delay field is a decaying average of the amount of time between + * completion of successive MMP writes, in nanoseconds. It is used to predict + * how long the import must wait to detect activity in the pool, before + * concluding it is not in use. + * + * During import an activity test may now be performed to determine if + * the pool is in use. The activity test is typically required if the + * ZPOOL_CONFIG_HOSTID does not match the system hostid, the pool state is + * POOL_STATE_ACTIVE, and the pool is not a root pool. + * + * The activity test finds the "best" uberblock (highest txg & timestamp), + * waits some time, and then finds the "best" uberblock again. If the txg + * and timestamp in both "best" uberblocks do not match, the pool is in use + * by another host and the import fails. Since the granularity of the + * timestamp is in seconds this activity test must take a bare minimum of one + * second. In order to assure the accuracy of the activity test, the default + * values result in an activity test duration of 10x the mmp write interval. + * + * The "zpool import" activity test can be expected to take a minimum time of + * zfs_multihost_import_intervals * zfs_multihost_interval milliseconds. If the + * "best" uberblock has a valid ub_mmp_delay field, then the duration of the + * test may take longer if MMP writes were occurring less frequently than + * expected. Additionally, the duration is then extended by a random 25% to + * attempt to to detect simultaneous imports. For example, if both partner + * hosts are rebooted at the same time and automatically attempt to import the + * pool. + */ + +/* + * Used to control the frequency of mmp writes which are performed when the + * 'multihost' pool property is on. This is one factor used to determine the + * length of the activity check during import. + * + * The mmp write period is zfs_multihost_interval / leaf-vdevs milliseconds. + * This means that on average an mmp write will be issued for each leaf vdev + * every zfs_multihost_interval milliseconds. In practice, the observed period + * can vary with the I/O load and this observed value is the delay which is + * stored in the uberblock. The minimum allowed value is 100 ms. + */ +ulong_t zfs_multihost_interval = MMP_DEFAULT_INTERVAL; + +/* + * Used to control the duration of the activity test on import. Smaller values + * of zfs_multihost_import_intervals will reduce the import time but increase + * the risk of failing to detect an active pool. The total activity check time + * is never allowed to drop below one second. A value of 0 is ignored and + * treated as if it was set to 1. + */ +uint_t zfs_multihost_import_intervals = MMP_DEFAULT_IMPORT_INTERVALS; + +/* + * Controls the behavior of the pool when mmp write failures are detected. + * + * When zfs_multihost_fail_intervals = 0 then mmp write failures are ignored. + * The failures will still be reported to the ZED which depending on its + * configuration may take action such as suspending the pool or taking a + * device offline. + * + * When zfs_multihost_fail_intervals > 0 then sequential mmp write failures will + * cause the pool to be suspended. This occurs when + * zfs_multihost_fail_intervals * zfs_multihost_interval milliseconds have + * passed since the last successful mmp write. This guarantees the activity + * test will see mmp writes if the + * pool is imported. + */ +uint_t zfs_multihost_fail_intervals = MMP_DEFAULT_FAIL_INTERVALS; + +static void mmp_thread(spa_t *spa); + +void +mmp_init(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + mutex_init(&mmp->mmp_thread_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&mmp->mmp_thread_cv, NULL, CV_DEFAULT, NULL); + mutex_init(&mmp->mmp_io_lock, NULL, MUTEX_DEFAULT, NULL); +} + +void +mmp_fini(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + mutex_destroy(&mmp->mmp_thread_lock); + cv_destroy(&mmp->mmp_thread_cv); + mutex_destroy(&mmp->mmp_io_lock); +} + +static void +mmp_thread_enter(mmp_thread_t *mmp, callb_cpr_t *cpr) +{ + CALLB_CPR_INIT(cpr, &mmp->mmp_thread_lock, callb_generic_cpr, FTAG); + mutex_enter(&mmp->mmp_thread_lock); +} + +static void +mmp_thread_exit(mmp_thread_t *mmp, kthread_t **mpp, callb_cpr_t *cpr) +{ + ASSERT(*mpp != NULL); + *mpp = NULL; + cv_broadcast(&mmp->mmp_thread_cv); + CALLB_CPR_EXIT(cpr); /* drops &mmp->mmp_thread_lock */ + thread_exit(); +} + +void +mmp_thread_start(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + if (spa_writeable(spa)) { + mutex_enter(&mmp->mmp_thread_lock); + if (!mmp->mmp_thread) { + dprintf("mmp_thread_start pool %s\n", + spa->spa_name); + mmp->mmp_thread = thread_create(NULL, 0, mmp_thread, + spa, 0, &p0, TS_RUN, defclsyspri); + } + mutex_exit(&mmp->mmp_thread_lock); + } +} + +void +mmp_thread_stop(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + mutex_enter(&mmp->mmp_thread_lock); + mmp->mmp_thread_exiting = 1; + cv_broadcast(&mmp->mmp_thread_cv); + + while (mmp->mmp_thread) { + cv_wait(&mmp->mmp_thread_cv, &mmp->mmp_thread_lock); + } + mutex_exit(&mmp->mmp_thread_lock); + + ASSERT(mmp->mmp_thread == NULL); + mmp->mmp_thread_exiting = 0; +} + +/* + * Choose a leaf vdev to write an MMP block to. It must not have an + * outstanding mmp write (if so then there is a problem, and a new write will + * also block). If there is no usable leaf in this subtree return NULL, + * otherwise return a pointer to the leaf. + * + * When walking the subtree, a random child is chosen as the starting point so + * that when the tree is healthy, the leaf chosen will be random with even + * distribution. If there are unhealthy vdevs in the tree, the distribution + * will be really poor only if a large proportion of the vdevs are unhealthy, + * in which case there are other more pressing problems. + */ +static vdev_t * +mmp_random_leaf(vdev_t *vd) +{ + int child_idx; + + if (!vdev_writeable(vd)) + return (NULL); + + if (vd->vdev_ops->vdev_op_leaf) + return (vd->vdev_mmp_pending == 0 ? vd : NULL); + + child_idx = spa_get_random(vd->vdev_children); + for (int offset = vd->vdev_children; offset > 0; offset--) { + vdev_t *leaf; + vdev_t *child = vd->vdev_child[(child_idx + offset) % + vd->vdev_children]; + + leaf = mmp_random_leaf(child); + if (leaf) + return (leaf); + } + + return (NULL); +} + +static void +mmp_write_done(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + vdev_t *vd = zio->io_vd; + mmp_thread_t *mts = zio->io_private; + + mutex_enter(&mts->mmp_io_lock); + vd->vdev_mmp_pending = 0; + + if (zio->io_error) + goto unlock; + + /* + * Mmp writes are queued on a fixed schedule, but under many + * circumstances, such as a busy device or faulty hardware, + * the writes will complete at variable, much longer, + * intervals. In these cases, another node checking for + * activity must wait longer to account for these delays. + * + * The mmp_delay is calculated as a decaying average of the interval + * between completed mmp writes. This is used to predict how long + * the import must wait to detect activity in the pool, before + * concluding it is not in use. + * + * Do not set mmp_delay if the multihost property is not on, + * so as not to trigger an activity check on import. + */ + if (spa_multihost(spa)) { + hrtime_t delay = gethrtime() - mts->mmp_last_write; + + if (delay > mts->mmp_delay) + mts->mmp_delay = delay; + else + mts->mmp_delay = (delay + mts->mmp_delay * 127) / + 128; + } else { + mts->mmp_delay = 0; + } + mts->mmp_last_write = gethrtime(); + +unlock: + mutex_exit(&mts->mmp_io_lock); + spa_config_exit(spa, SCL_STATE, FTAG); + + abd_free(zio->io_abd); +} + +/* + * When the uberblock on-disk is updated by a spa_sync, + * creating a new "best" uberblock, update the one stored + * in the mmp thread state, used for mmp writes. + */ +void +mmp_update_uberblock(spa_t *spa, uberblock_t *ub) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + mutex_enter(&mmp->mmp_io_lock); + mmp->mmp_ub = *ub; + mmp->mmp_ub.ub_timestamp = gethrestime_sec(); + mutex_exit(&mmp->mmp_io_lock); +} + +/* + * Choose a random vdev, label, and MMP block, and write over it + * with a copy of the last-synced uberblock, whose timestamp + * has been updated to reflect that the pool is in use. + */ +static void +mmp_write_uberblock(spa_t *spa) +{ + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL; + mmp_thread_t *mmp = &spa->spa_mmp; + uberblock_t *ub; + vdev_t *vd; + int label; + uint64_t offset; + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + vd = mmp_random_leaf(spa->spa_root_vdev); + if (vd == NULL) { + spa_config_exit(spa, SCL_STATE, FTAG); + return; + } + + mutex_enter(&mmp->mmp_io_lock); + + if (mmp->mmp_zio_root == NULL) + mmp->mmp_zio_root = zio_root(spa, NULL, NULL, + flags | ZIO_FLAG_GODFATHER); + + ub = &mmp->mmp_ub; + ub->ub_timestamp = gethrestime_sec(); + ub->ub_mmp_magic = MMP_MAGIC; + ub->ub_mmp_delay = mmp->mmp_delay; + vd->vdev_mmp_pending = gethrtime(); + + zio_t *zio = zio_null(mmp->mmp_zio_root, spa, NULL, NULL, NULL, flags); + abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); + abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); + abd_copy_from_buf(ub_abd, ub, sizeof (uberblock_t)); + + mutex_exit(&mmp->mmp_io_lock); + + offset = VDEV_UBERBLOCK_OFFSET(vd, VDEV_UBERBLOCK_COUNT(vd) - + MMP_BLOCKS_PER_LABEL + spa_get_random(MMP_BLOCKS_PER_LABEL)); + + label = spa_get_random(VDEV_LABELS); + vdev_label_write(zio, vd, label, ub_abd, offset, + VDEV_UBERBLOCK_SIZE(vd), mmp_write_done, mmp, + flags | ZIO_FLAG_DONT_PROPAGATE); + + spa_mmp_history_add(ub->ub_txg, ub->ub_timestamp, ub->ub_mmp_delay, vd, + label); + + zio_nowait(zio); +} + +static void +mmp_thread(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + boolean_t last_spa_suspended = spa_suspended(spa); + boolean_t last_spa_multihost = spa_multihost(spa); + callb_cpr_t cpr; + hrtime_t max_fail_ns = zfs_multihost_fail_intervals * + MSEC2NSEC(MAX(zfs_multihost_interval, MMP_MIN_INTERVAL)); + + mmp_thread_enter(mmp, &cpr); + + /* + * The mmp_write_done() function calculates mmp_delay based on the + * prior value of mmp_delay and the elapsed time since the last write. + * For the first mmp write, there is no "last write", so we start + * with fake, but reasonable, default non-zero values. + */ + mmp->mmp_delay = MSEC2NSEC(MAX(zfs_multihost_interval, + MMP_MIN_INTERVAL)) / MAX(vdev_count_leaves(spa), 1); + mmp->mmp_last_write = gethrtime() - mmp->mmp_delay; + + while (!mmp->mmp_thread_exiting) { + uint64_t mmp_fail_intervals = zfs_multihost_fail_intervals; + uint64_t mmp_interval = MSEC2NSEC( + MAX(zfs_multihost_interval, MMP_MIN_INTERVAL)); + boolean_t suspended = spa_suspended(spa); + boolean_t multihost = spa_multihost(spa); + hrtime_t start, next_time; + + start = gethrtime(); + if (multihost) { + next_time = start + mmp_interval / + MAX(vdev_count_leaves(spa), 1); + } else { + next_time = start + MSEC2NSEC(MMP_DEFAULT_INTERVAL); + } + + /* + * When MMP goes off => on, or spa goes suspended => + * !suspended, we know no writes occurred recently. We + * update mmp_last_write to give us some time to try. + */ + if ((!last_spa_multihost && multihost) || + (last_spa_suspended && !suspended)) { + mutex_enter(&mmp->mmp_io_lock); + mmp->mmp_last_write = gethrtime(); + mutex_exit(&mmp->mmp_io_lock); + } else if (last_spa_multihost && !multihost) { + mutex_enter(&mmp->mmp_io_lock); + mmp->mmp_delay = 0; + mutex_exit(&mmp->mmp_io_lock); + } + last_spa_multihost = multihost; + last_spa_suspended = suspended; + + /* + * Smooth max_fail_ns when its factors are decreased, because + * making (max_fail_ns < mmp_interval) results in the pool being + * immediately suspended before writes can occur at the new + * higher frequency. + */ + if ((mmp_interval * mmp_fail_intervals) < max_fail_ns) { + max_fail_ns = ((31 * max_fail_ns) + (mmp_interval * + mmp_fail_intervals)) / 32; + } else { + max_fail_ns = mmp_interval * mmp_fail_intervals; + } + + /* + * Suspend the pool if no MMP write has succeeded in over + * mmp_interval * mmp_fail_intervals nanoseconds. + */ + if (!suspended && mmp_fail_intervals && multihost && + (start - mmp->mmp_last_write) > max_fail_ns) { + zio_suspend(spa, NULL); + } + + if (multihost) + mmp_write_uberblock(spa); + + CALLB_CPR_SAFE_BEGIN(&cpr); + (void) cv_timedwait_sig(&mmp->mmp_thread_cv, + &mmp->mmp_thread_lock, ddi_get_lbolt() + + ((next_time - gethrtime()) / (NANOSEC / hz))); + CALLB_CPR_SAFE_END(&cpr, &mmp->mmp_thread_lock); + } + + /* Outstanding writes are allowed to complete. */ + if (mmp->mmp_zio_root) + zio_wait(mmp->mmp_zio_root); + + mmp->mmp_zio_root = NULL; + mmp_thread_exit(mmp, &mmp->mmp_thread, &cpr); +} + +/* + * Signal the MMP thread to wake it, when it is sleeping on + * its cv. Used when some module parameter has changed and + * we want the thread to know about it. + * Only signal if the pool is active and mmp thread is + * running, otherwise there is no thread to wake. + */ +static void +mmp_signal_thread(spa_t *spa) +{ + mmp_thread_t *mmp = &spa->spa_mmp; + + mutex_enter(&mmp->mmp_thread_lock); + if (mmp->mmp_thread) + cv_broadcast(&mmp->mmp_thread_cv); + mutex_exit(&mmp->mmp_thread_lock); +} + +void +mmp_signal_all_threads(void) +{ + spa_t *spa = NULL; + + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(spa))) { + if (spa->spa_state == POOL_STATE_ACTIVE) + mmp_signal_thread(spa); + } + mutex_exit(&spa_namespace_lock); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +#include + +static int +param_set_multihost_interval(const char *val, zfs_kernel_param_t *kp) +{ + int ret; + + ret = param_set_ulong(val, kp); + if (ret < 0) + return (ret); + + mmp_signal_all_threads(); + + return (ret); +} + +/* BEGIN CSTYLED */ +module_param(zfs_multihost_fail_intervals, uint, 0644); +MODULE_PARM_DESC(zfs_multihost_fail_intervals, + "Max allowed period without a successful mmp write"); + +module_param_call(zfs_multihost_interval, param_set_multihost_interval, + param_get_ulong, &zfs_multihost_interval, 0644); +MODULE_PARM_DESC(zfs_multihost_interval, + "Milliseconds between mmp writes to each leaf"); + +module_param(zfs_multihost_import_intervals, uint, 0644); +MODULE_PARM_DESC(zfs_multihost_import_intervals, + "Number of zfs_multihost_interval periods to wait for activity"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/multilist.c +++ linux-aws-4.15.0/zfs/module/zfs/multilist.c @@ -0,0 +1,419 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2013, 2017 by Delphix. All rights reserved. + */ + +#include +#include +#include + +/* needed for spa_get_random() */ +#include + +/* + * This overrides the number of sublists in each multilist_t, which defaults + * to the number of CPUs in the system (see multilist_create()). + */ +int zfs_multilist_num_sublists = 0; + +/* + * Given the object contained on the list, return a pointer to the + * object's multilist_node_t structure it contains. + */ +#ifdef DEBUG +static multilist_node_t * +multilist_d2l(multilist_t *ml, void *obj) +{ + return ((multilist_node_t *)((char *)obj + ml->ml_offset)); +} +#endif + +/* + * Initialize a new mutlilist using the parameters specified. + * + * - 'size' denotes the size of the structure containing the + * multilist_node_t. + * - 'offset' denotes the byte offset of the mutlilist_node_t within + * the structure that contains it. + * - 'num' specifies the number of internal sublists to create. + * - 'index_func' is used to determine which sublist to insert into + * when the multilist_insert() function is called; as well as which + * sublist to remove from when multilist_remove() is called. The + * requirements this function must meet, are the following: + * + * - It must always return the same value when called on the same + * object (to ensure the object is removed from the list it was + * inserted into). + * + * - It must return a value in the range [0, number of sublists). + * The multilist_get_num_sublists() function may be used to + * determine the number of sublists in the multilist. + * + * Also, in order to reduce internal contention between the sublists + * during insertion and removal, this function should choose evenly + * between all available sublists when inserting. This isn't a hard + * requirement, but a general rule of thumb in order to garner the + * best multi-threaded performance out of the data structure. + */ +static multilist_t * +multilist_create_impl(size_t size, size_t offset, + unsigned int num, multilist_sublist_index_func_t *index_func) +{ + ASSERT3U(size, >, 0); + ASSERT3U(size, >=, offset + sizeof (multilist_node_t)); + ASSERT3U(num, >, 0); + ASSERT3P(index_func, !=, NULL); + + multilist_t *ml = kmem_alloc(sizeof (*ml), KM_SLEEP); + ml->ml_offset = offset; + ml->ml_num_sublists = num; + ml->ml_index_func = index_func; + + ml->ml_sublists = kmem_zalloc(sizeof (multilist_sublist_t) * + ml->ml_num_sublists, KM_SLEEP); + + ASSERT3P(ml->ml_sublists, !=, NULL); + + for (int i = 0; i < ml->ml_num_sublists; i++) { + multilist_sublist_t *mls = &ml->ml_sublists[i]; + mutex_init(&mls->mls_lock, NULL, MUTEX_NOLOCKDEP, NULL); + list_create(&mls->mls_list, size, offset); + } + return (ml); +} + +/* + * Allocate a new multilist, using the default number of sublists + * (the number of CPUs, or at least 4, or the tunable + * zfs_multilist_num_sublists). + */ +multilist_t * +multilist_create(size_t size, size_t offset, + multilist_sublist_index_func_t *index_func) +{ + int num_sublists; + + if (zfs_multilist_num_sublists > 0) { + num_sublists = zfs_multilist_num_sublists; + } else { + num_sublists = MAX(boot_ncpus, 4); + } + + return (multilist_create_impl(size, offset, num_sublists, index_func)); +} + +/* + * Destroy the given multilist object, and free up any memory it holds. + */ +void +multilist_destroy(multilist_t *ml) +{ + int i; + + ASSERT(multilist_is_empty(ml)); + + for (i = 0; i < ml->ml_num_sublists; i++) { + multilist_sublist_t *mls = &ml->ml_sublists[i]; + + ASSERT(list_is_empty(&mls->mls_list)); + + list_destroy(&mls->mls_list); + mutex_destroy(&mls->mls_lock); + } + + ASSERT3P(ml->ml_sublists, !=, NULL); + kmem_free(ml->ml_sublists, + sizeof (multilist_sublist_t) * ml->ml_num_sublists); + + ml->ml_num_sublists = 0; + ml->ml_offset = 0; + kmem_free(ml, sizeof (multilist_t)); +} + +/* + * Insert the given object into the multilist. + * + * This function will insert the object specified into the sublist + * determined using the function given at multilist creation time. + * + * The sublist locks are automatically acquired if not already held, to + * ensure consistency when inserting and removing from multiple threads. + */ +void +multilist_insert(multilist_t *ml, void *obj) +{ + unsigned int sublist_idx = ml->ml_index_func(ml, obj); + multilist_sublist_t *mls; + boolean_t need_lock; + + DTRACE_PROBE3(multilist__insert, multilist_t *, ml, + unsigned int, sublist_idx, void *, obj); + + ASSERT3U(sublist_idx, <, ml->ml_num_sublists); + + mls = &ml->ml_sublists[sublist_idx]; + + /* + * Note: Callers may already hold the sublist lock by calling + * multilist_sublist_lock(). Here we rely on MUTEX_HELD() + * returning TRUE if and only if the current thread holds the + * lock. While it's a little ugly to make the lock recursive in + * this way, it works and allows the calling code to be much + * simpler -- otherwise it would have to pass around a flag + * indicating that it already has the lock. + */ + need_lock = !MUTEX_HELD(&mls->mls_lock); + + if (need_lock) + mutex_enter(&mls->mls_lock); + + ASSERT(!multilist_link_active(multilist_d2l(ml, obj))); + + multilist_sublist_insert_head(mls, obj); + + if (need_lock) + mutex_exit(&mls->mls_lock); +} + +/* + * Remove the given object from the multilist. + * + * This function will remove the object specified from the sublist + * determined using the function given at multilist creation time. + * + * The necessary sublist locks are automatically acquired, to ensure + * consistency when inserting and removing from multiple threads. + */ +void +multilist_remove(multilist_t *ml, void *obj) +{ + unsigned int sublist_idx = ml->ml_index_func(ml, obj); + multilist_sublist_t *mls; + boolean_t need_lock; + + DTRACE_PROBE3(multilist__remove, multilist_t *, ml, + unsigned int, sublist_idx, void *, obj); + + ASSERT3U(sublist_idx, <, ml->ml_num_sublists); + + mls = &ml->ml_sublists[sublist_idx]; + /* See comment in multilist_insert(). */ + need_lock = !MUTEX_HELD(&mls->mls_lock); + + if (need_lock) + mutex_enter(&mls->mls_lock); + + ASSERT(multilist_link_active(multilist_d2l(ml, obj))); + + multilist_sublist_remove(mls, obj); + + if (need_lock) + mutex_exit(&mls->mls_lock); +} + +/* + * Check to see if this multilist object is empty. + * + * This will return TRUE if it finds all of the sublists of this + * multilist to be empty, and FALSE otherwise. Each sublist lock will be + * automatically acquired as necessary. + * + * If concurrent insertions and removals are occurring, the semantics + * of this function become a little fuzzy. Instead of locking all + * sublists for the entire call time of the function, each sublist is + * only locked as it is individually checked for emptiness. Thus, it's + * possible for this function to return TRUE with non-empty sublists at + * the time the function returns. This would be due to another thread + * inserting into a given sublist, after that specific sublist was check + * and deemed empty, but before all sublists have been checked. + */ +int +multilist_is_empty(multilist_t *ml) +{ + int i; + + for (i = 0; i < ml->ml_num_sublists; i++) { + multilist_sublist_t *mls = &ml->ml_sublists[i]; + /* See comment in multilist_insert(). */ + boolean_t need_lock = !MUTEX_HELD(&mls->mls_lock); + + if (need_lock) + mutex_enter(&mls->mls_lock); + + if (!list_is_empty(&mls->mls_list)) { + if (need_lock) + mutex_exit(&mls->mls_lock); + + return (FALSE); + } + + if (need_lock) + mutex_exit(&mls->mls_lock); + } + + return (TRUE); +} + +/* Return the number of sublists composing this multilist */ +unsigned int +multilist_get_num_sublists(multilist_t *ml) +{ + return (ml->ml_num_sublists); +} + +/* Return a randomly selected, valid sublist index for this multilist */ +unsigned int +multilist_get_random_index(multilist_t *ml) +{ + return (spa_get_random(ml->ml_num_sublists)); +} + +/* Lock and return the sublist specified at the given index */ +multilist_sublist_t * +multilist_sublist_lock(multilist_t *ml, unsigned int sublist_idx) +{ + multilist_sublist_t *mls; + + ASSERT3U(sublist_idx, <, ml->ml_num_sublists); + mls = &ml->ml_sublists[sublist_idx]; + mutex_enter(&mls->mls_lock); + + return (mls); +} + +/* Lock and return the sublist that would be used to store the specified obj */ +multilist_sublist_t * +multilist_sublist_lock_obj(multilist_t *ml, void *obj) +{ + return (multilist_sublist_lock(ml, ml->ml_index_func(ml, obj))); +} + +void +multilist_sublist_unlock(multilist_sublist_t *mls) +{ + mutex_exit(&mls->mls_lock); +} + +/* + * We're allowing any object to be inserted into this specific sublist, + * but this can lead to trouble if multilist_remove() is called to + * remove this object. Specifically, if calling ml_index_func on this + * object returns an index for sublist different than what is passed as + * a parameter here, any call to multilist_remove() with this newly + * inserted object is undefined! (the call to multilist_remove() will + * remove the object from a list that it isn't contained in) + */ +void +multilist_sublist_insert_head(multilist_sublist_t *mls, void *obj) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + list_insert_head(&mls->mls_list, obj); +} + +/* please see comment above multilist_sublist_insert_head */ +void +multilist_sublist_insert_tail(multilist_sublist_t *mls, void *obj) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + list_insert_tail(&mls->mls_list, obj); +} + +/* + * Move the object one element forward in the list. + * + * This function will move the given object forward in the list (towards + * the head) by one object. So, in essence, it will swap its position in + * the list with its "prev" pointer. If the given object is already at the + * head of the list, it cannot be moved forward any more than it already + * is, so no action is taken. + * + * NOTE: This function **must not** remove any object from the list other + * than the object given as the parameter. This is relied upon in + * arc_evict_state_impl(). + */ +void +multilist_sublist_move_forward(multilist_sublist_t *mls, void *obj) +{ + void *prev = list_prev(&mls->mls_list, obj); + + ASSERT(MUTEX_HELD(&mls->mls_lock)); + ASSERT(!list_is_empty(&mls->mls_list)); + + /* 'obj' must be at the head of the list, nothing to do */ + if (prev == NULL) + return; + + list_remove(&mls->mls_list, obj); + list_insert_before(&mls->mls_list, prev, obj); +} + +void +multilist_sublist_remove(multilist_sublist_t *mls, void *obj) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + list_remove(&mls->mls_list, obj); +} + +void * +multilist_sublist_head(multilist_sublist_t *mls) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + return (list_head(&mls->mls_list)); +} + +void * +multilist_sublist_tail(multilist_sublist_t *mls) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + return (list_tail(&mls->mls_list)); +} + +void * +multilist_sublist_next(multilist_sublist_t *mls, void *obj) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + return (list_next(&mls->mls_list, obj)); +} + +void * +multilist_sublist_prev(multilist_sublist_t *mls, void *obj) +{ + ASSERT(MUTEX_HELD(&mls->mls_lock)); + return (list_prev(&mls->mls_list, obj)); +} + +void +multilist_link_init(multilist_node_t *link) +{ + list_link_init(link); +} + +int +multilist_link_active(multilist_node_t *link) +{ + return (list_link_active(link)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) + +/* BEGIN CSTYLED */ + +module_param(zfs_multilist_num_sublists, int, 0644); +MODULE_PARM_DESC(zfs_multilist_num_sublists, + "Number of sublists used in each multilist"); + +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/pathname.c +++ linux-aws-4.15.0/zfs/module/zfs/pathname.c @@ -0,0 +1,89 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + +/* + * University Copyright- Copyright (c) 1982, 1986, 1988 + * The Regents of the University of California + * All Rights Reserved + * + * University Acknowledgment- Portions of this document are derived from + * software developed by the University of California, Berkeley, and its + * contributors. + */ + + +#include +#include +#include +#include + +/* + * Pathname utilities. + * + * In translating file names we copy each argument file + * name into a pathname structure where we operate on it. + * Each pathname structure can hold "pn_bufsize" characters + * including a terminating null, and operations here support + * allocating and freeing pathname structures, fetching + * strings from user space, getting the next character from + * a pathname, combining two pathnames (used in symbolic + * link processing), and peeling off the first component + * of a pathname. + */ + +/* + * Allocate contents of pathname structure. Structure is typically + * an automatic variable in calling routine for convenience. + * + * May sleep in the call to kmem_alloc() and so must not be called + * from interrupt level. + */ +void +pn_alloc(struct pathname *pnp) +{ + pn_alloc_sz(pnp, MAXPATHLEN); +} +void +pn_alloc_sz(struct pathname *pnp, size_t sz) +{ + pnp->pn_path = pnp->pn_buf = kmem_alloc(sz, KM_SLEEP); + pnp->pn_pathlen = 0; + pnp->pn_bufsize = sz; +} + +/* + * Free pathname resources. + */ +void +pn_free(struct pathname *pnp) +{ + /* pn_bufsize is usually MAXPATHLEN, but may not be */ + kmem_free(pnp->pn_buf, pnp->pn_bufsize); + pnp->pn_path = pnp->pn_buf = NULL; + pnp->pn_pathlen = pnp->pn_bufsize = 0; +} --- linux-aws-4.15.0.orig/zfs/module/zfs/policy.c +++ linux-aws-4.15.0/zfs/module/zfs/policy.c @@ -0,0 +1,303 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2013, Joyent, Inc. All rights reserved. + * Copyright (C) 2016 Lawrence Livermore National Security, LLC. + * + * For Linux the vast majority of this enforcement is already handled via + * the standard Linux VFS permission checks. However certain administrative + * commands which bypass the standard mechanisms may need to make use of + * this functionality. + */ + +#include +#include +#include + +/* + * The passed credentials cannot be directly verified because Linux only + * provides and interface to check the *current* process credentials. In + * order to handle this the capable() test is only run when the passed + * credentials match the current process credentials or the kcred. In + * all other cases this function must fail and return the passed err. + */ +static int +priv_policy(const cred_t *cr, int capability, boolean_t all, int err) +{ + ASSERT3S(all, ==, B_FALSE); + + if (cr != CRED() && (cr != kcred)) + return (err); + + if (!capable(capability)) + return (err); + + return (0); +} + +/* + * Checks for operations that are either client-only or are used by + * both clients and servers. + */ +int +secpolicy_nfs(const cred_t *cr) +{ + return (priv_policy(cr, CAP_SYS_ADMIN, B_FALSE, EPERM)); +} + +/* + * Catch all system configuration. + */ +int +secpolicy_sys_config(const cred_t *cr, boolean_t checkonly) +{ + return (priv_policy(cr, CAP_SYS_ADMIN, B_FALSE, EPERM)); +} + +/* + * Like secpolicy_vnode_access() but we get the actual wanted mode and the + * current mode of the file, not the missing bits. + * + * Enforced in the Linux VFS. + */ +int +secpolicy_vnode_access2(const cred_t *cr, struct inode *ip, uid_t owner, + mode_t curmode, mode_t wantmode) +{ + return (0); +} + +/* + * This is a special routine for ZFS; it is used to determine whether + * any of the privileges in effect allow any form of access to the + * file. There's no reason to audit this or any reason to record + * this. More work is needed to do the "KPLD" stuff. + */ +int +secpolicy_vnode_any_access(const cred_t *cr, struct inode *ip, uid_t owner) +{ + if (crgetfsuid(cr) == owner) + return (0); + + if (zpl_inode_owner_or_capable(ip)) + return (0); + + if (priv_policy(cr, CAP_DAC_OVERRIDE, B_FALSE, EPERM) == 0) + return (0); + + if (priv_policy(cr, CAP_DAC_READ_SEARCH, B_FALSE, EPERM) == 0) + return (0); + + return (EPERM); +} + +/* + * Determine if subject can chown owner of a file. + */ +int +secpolicy_vnode_chown(const cred_t *cr, uid_t owner) +{ + if (crgetfsuid(cr) == owner) + return (0); + + return (priv_policy(cr, CAP_FOWNER, B_FALSE, EPERM)); +} + +/* + * Determine if subject can change group ownership of a file. + */ +int +secpolicy_vnode_create_gid(const cred_t *cr) +{ + return (priv_policy(cr, CAP_SETGID, B_FALSE, EPERM)); +} + +/* + * Policy determines whether we can remove an entry from a directory, + * regardless of permission bits. + */ +int +secpolicy_vnode_remove(const cred_t *cr) +{ + return (priv_policy(cr, CAP_FOWNER, B_FALSE, EPERM)); +} + +/* + * Determine that subject can modify the mode of a file. allzone privilege + * needed when modifying root owned object. + */ +int +secpolicy_vnode_setdac(const cred_t *cr, uid_t owner) +{ + if (crgetfsuid(cr) == owner) + return (0); + + return (priv_policy(cr, CAP_FOWNER, B_FALSE, EPERM)); +} + +/* + * Are we allowed to retain the set-uid/set-gid bits when + * changing ownership or when writing to a file? + * "issuid" should be true when set-uid; only in that case + * root ownership is checked (setgid is assumed). + * + * Enforced in the Linux VFS. + */ +int +secpolicy_vnode_setid_retain(const cred_t *cr, boolean_t issuidroot) +{ + return (0); +} + +/* + * Determine that subject can set the file setgid flag. + */ +int +secpolicy_vnode_setids_setgids(const cred_t *cr, gid_t gid) +{ + if (crgetfsgid(cr) != gid && !groupmember(gid, cr)) + return (priv_policy(cr, CAP_FSETID, B_FALSE, EPERM)); + + return (0); +} + +/* + * Determine if the subject can inject faults in the ZFS fault injection + * framework. Requires all privileges. + */ +int +secpolicy_zinject(const cred_t *cr) +{ + return (priv_policy(cr, CAP_SYS_ADMIN, B_FALSE, EACCES)); +} + +/* + * Determine if the subject has permission to manipulate ZFS datasets + * (not pools). Equivalent to the SYS_MOUNT privilege. + */ +int +secpolicy_zfs(const cred_t *cr) +{ + return (priv_policy(cr, CAP_SYS_ADMIN, B_FALSE, EACCES)); +} + +void +secpolicy_setid_clear(vattr_t *vap, cred_t *cr) +{ + if ((vap->va_mode & (S_ISUID | S_ISGID)) != 0 && + secpolicy_vnode_setid_retain(cr, + (vap->va_mode & S_ISUID) != 0 && + (vap->va_mask & AT_UID) != 0 && vap->va_uid == 0) != 0) { + vap->va_mask |= AT_MODE; + vap->va_mode &= ~(S_ISUID|S_ISGID); + } +} + +/* + * Determine that subject can set the file setid flags. + */ +static int +secpolicy_vnode_setid_modify(const cred_t *cr, uid_t owner) +{ + if (crgetfsuid(cr) == owner) + return (0); + + return (priv_policy(cr, CAP_FSETID, B_FALSE, EPERM)); +} + +/* + * Determine that subject can make a file a "sticky". + * + * Enforced in the Linux VFS. + */ +static int +secpolicy_vnode_stky_modify(const cred_t *cr) +{ + return (0); +} + +int +secpolicy_setid_setsticky_clear(struct inode *ip, vattr_t *vap, + const vattr_t *ovap, cred_t *cr) +{ + int error; + + if ((vap->va_mode & S_ISUID) != 0 && + (error = secpolicy_vnode_setid_modify(cr, + ovap->va_uid)) != 0) { + return (error); + } + + /* + * Check privilege if attempting to set the + * sticky bit on a non-directory. + */ + if (!S_ISDIR(ip->i_mode) && (vap->va_mode & S_ISVTX) != 0 && + secpolicy_vnode_stky_modify(cr) != 0) { + vap->va_mode &= ~S_ISVTX; + } + + /* + * Check for privilege if attempting to set the + * group-id bit. + */ + if ((vap->va_mode & S_ISGID) != 0 && + secpolicy_vnode_setids_setgids(cr, ovap->va_gid) != 0) { + vap->va_mode &= ~S_ISGID; + } + + return (0); +} + +/* + * Check privileges for setting xvattr attributes + */ +int +secpolicy_xvattr(xvattr_t *xvap, uid_t owner, cred_t *cr, vtype_t vtype) +{ + return (secpolicy_vnode_chown(cr, owner)); +} + +/* + * Check privileges for setattr attributes. + * + * Enforced in the Linux VFS. + */ +int +secpolicy_vnode_setattr(cred_t *cr, struct inode *ip, struct vattr *vap, + const struct vattr *ovap, int flags, + int unlocked_access(void *, int, cred_t *), void *node) +{ + return (0); +} + +/* + * Check privileges for links. + * + * Enforced in the Linux VFS. + */ +int +secpolicy_basic_link(const cred_t *cr) +{ + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/qat_compress.c +++ linux-aws-4.15.0/zfs/module/zfs/qat_compress.c @@ -0,0 +1,587 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#if defined(_KERNEL) && defined(HAVE_QAT) +#include +#include +#include +#include +#include +#include "qat_compress.h" + +/* + * Timeout - no response from hardware after 0.5 seconds + */ +#define TIMEOUT_MS 500 + +/* + * Max instances in QAT device, each instance is a channel to submit + * jobs to QAT hardware, this is only for pre-allocating instance, + * and session arrays, the actual number of instances are defined in + * the QAT driver's configure file. + */ +#define MAX_INSTANCES 48 + +/* + * ZLIB head and foot size + */ +#define ZLIB_HEAD_SZ 2 +#define ZLIB_FOOT_SZ 4 + +/* + * The minimal and maximal buffer size, which are not restricted + * in the QAT hardware, but with the input buffer size between 4KB + * and 128KB, the hardware can provide the optimal performance. + */ +#define QAT_MIN_BUF_SIZE (4*1024) +#define QAT_MAX_BUF_SIZE (128*1024) + +/* + * Used for qat kstat. + */ +typedef struct qat_stats { + /* + * Number of jobs submitted to qat compression engine. + */ + kstat_named_t comp_requests; + /* + * Total bytes sent to qat compression engine. + */ + kstat_named_t comp_total_in_bytes; + /* + * Total bytes output from qat compression engine. + */ + kstat_named_t comp_total_out_bytes; + /* + * Number of jobs submitted to qat de-compression engine. + */ + kstat_named_t decomp_requests; + /* + * Total bytes sent to qat de-compression engine. + */ + kstat_named_t decomp_total_in_bytes; + /* + * Total bytes output from qat de-compression engine. + */ + kstat_named_t decomp_total_out_bytes; + /* + * Number of fails in qat engine. + * Note: when qat fail happens, it doesn't mean a critical hardware + * issue, sometimes it is because the output buffer is not big enough, + * and the compression job will be transfered to gzip software again, + * so the functionality of ZFS is not impacted. + */ + kstat_named_t dc_fails; +} qat_stats_t; + +qat_stats_t qat_stats = { + { "comp_reqests", KSTAT_DATA_UINT64 }, + { "comp_total_in_bytes", KSTAT_DATA_UINT64 }, + { "comp_total_out_bytes", KSTAT_DATA_UINT64 }, + { "decomp_reqests", KSTAT_DATA_UINT64 }, + { "decomp_total_in_bytes", KSTAT_DATA_UINT64 }, + { "decomp_total_out_bytes", KSTAT_DATA_UINT64 }, + { "dc_fails", KSTAT_DATA_UINT64 }, +}; + +static kstat_t *qat_ksp; +static CpaInstanceHandle dc_inst_handles[MAX_INSTANCES]; +static CpaDcSessionHandle session_handles[MAX_INSTANCES]; +static CpaBufferList **buffer_array[MAX_INSTANCES]; +static Cpa16U num_inst = 0; +static Cpa32U inst_num = 0; +static boolean_t qat_init_done = B_FALSE; +int zfs_qat_disable = 0; + +#define QAT_STAT_INCR(stat, val) \ + atomic_add_64(&qat_stats.stat.value.ui64, (val)); +#define QAT_STAT_BUMP(stat) \ + QAT_STAT_INCR(stat, 1); + +#define PHYS_CONTIG_ALLOC(pp_mem_addr, size_bytes) \ + mem_alloc_contig((void *)(pp_mem_addr), (size_bytes)) + +#define PHYS_CONTIG_FREE(p_mem_addr) \ + mem_free_contig((void *)&(p_mem_addr)) + +static inline struct page * +mem_to_page(void *addr) +{ + if (!is_vmalloc_addr(addr)) + return (virt_to_page(addr)); + + return (vmalloc_to_page(addr)); +} + +static void +qat_dc_callback(void *p_callback, CpaStatus status) +{ + if (p_callback != NULL) + complete((struct completion *)p_callback); +} + +static inline CpaStatus +mem_alloc_contig(void **pp_mem_addr, Cpa32U size_bytes) +{ + *pp_mem_addr = kmalloc(size_bytes, GFP_KERNEL); + if (*pp_mem_addr == NULL) + return (CPA_STATUS_RESOURCE); + return (CPA_STATUS_SUCCESS); +} + +static inline void +mem_free_contig(void **pp_mem_addr) +{ + if (*pp_mem_addr != NULL) { + kfree(*pp_mem_addr); + *pp_mem_addr = NULL; + } +} + +static void +qat_clean(void) +{ + Cpa16U buff_num = 0; + Cpa16U num_inter_buff_lists = 0; + Cpa16U i = 0; + + for (i = 0; i < num_inst; i++) { + cpaDcStopInstance(dc_inst_handles[i]); + PHYS_CONTIG_FREE(session_handles[i]); + /* free intermediate buffers */ + if (buffer_array[i] != NULL) { + cpaDcGetNumIntermediateBuffers( + dc_inst_handles[i], &num_inter_buff_lists); + for (buff_num = 0; buff_num < num_inter_buff_lists; + buff_num++) { + CpaBufferList *buffer_inter = + buffer_array[i][buff_num]; + if (buffer_inter->pBuffers) { + PHYS_CONTIG_FREE( + buffer_inter->pBuffers->pData); + PHYS_CONTIG_FREE( + buffer_inter->pBuffers); + } + PHYS_CONTIG_FREE( + buffer_inter->pPrivateMetaData); + PHYS_CONTIG_FREE(buffer_inter); + } + } + } + + num_inst = 0; + qat_init_done = B_FALSE; +} + +int +qat_init(void) +{ + CpaStatus status = CPA_STATUS_SUCCESS; + Cpa32U sess_size = 0; + Cpa32U ctx_size = 0; + Cpa16U num_inter_buff_lists = 0; + Cpa16U buff_num = 0; + Cpa32U buff_meta_size = 0; + CpaDcSessionSetupData sd = {0}; + Cpa16U i; + + status = cpaDcGetNumInstances(&num_inst); + if (status != CPA_STATUS_SUCCESS || num_inst == 0) + return (-1); + + if (num_inst > MAX_INSTANCES) + num_inst = MAX_INSTANCES; + + status = cpaDcGetInstances(num_inst, &dc_inst_handles[0]); + if (status != CPA_STATUS_SUCCESS) + return (-1); + + for (i = 0; i < num_inst; i++) { + cpaDcSetAddressTranslation(dc_inst_handles[i], + (void*)virt_to_phys); + + status = cpaDcBufferListGetMetaSize(dc_inst_handles[i], + 1, &buff_meta_size); + + if (status == CPA_STATUS_SUCCESS) + status = cpaDcGetNumIntermediateBuffers( + dc_inst_handles[i], &num_inter_buff_lists); + + if (status == CPA_STATUS_SUCCESS && num_inter_buff_lists != 0) + status = PHYS_CONTIG_ALLOC(&buffer_array[i], + num_inter_buff_lists * + sizeof (CpaBufferList *)); + + for (buff_num = 0; buff_num < num_inter_buff_lists; + buff_num++) { + if (status == CPA_STATUS_SUCCESS) + status = PHYS_CONTIG_ALLOC( + &buffer_array[i][buff_num], + sizeof (CpaBufferList)); + + if (status == CPA_STATUS_SUCCESS) + status = PHYS_CONTIG_ALLOC( + &buffer_array[i][buff_num]-> + pPrivateMetaData, + buff_meta_size); + + if (status == CPA_STATUS_SUCCESS) + status = PHYS_CONTIG_ALLOC( + &buffer_array[i][buff_num]->pBuffers, + sizeof (CpaFlatBuffer)); + + if (status == CPA_STATUS_SUCCESS) { + /* + * implementation requires an intermediate + * buffer approximately twice the size of + * output buffer, which is 2x max buffer + * size here. + */ + status = PHYS_CONTIG_ALLOC( + &buffer_array[i][buff_num]->pBuffers-> + pData, 2 * QAT_MAX_BUF_SIZE); + if (status != CPA_STATUS_SUCCESS) + goto fail; + + buffer_array[i][buff_num]->numBuffers = 1; + buffer_array[i][buff_num]->pBuffers-> + dataLenInBytes = 2 * QAT_MAX_BUF_SIZE; + } + } + + status = cpaDcStartInstance(dc_inst_handles[i], + num_inter_buff_lists, buffer_array[i]); + if (status != CPA_STATUS_SUCCESS) + goto fail; + + sd.compLevel = CPA_DC_L1; + sd.compType = CPA_DC_DEFLATE; + sd.huffType = CPA_DC_HT_FULL_DYNAMIC; + sd.sessDirection = CPA_DC_DIR_COMBINED; + sd.sessState = CPA_DC_STATELESS; + sd.deflateWindowSize = 7; + sd.checksum = CPA_DC_ADLER32; + status = cpaDcGetSessionSize(dc_inst_handles[i], + &sd, &sess_size, &ctx_size); + if (status != CPA_STATUS_SUCCESS) + goto fail; + + PHYS_CONTIG_ALLOC(&session_handles[i], sess_size); + if (session_handles[i] == NULL) + goto fail; + + status = cpaDcInitSession(dc_inst_handles[i], + session_handles[i], + &sd, NULL, qat_dc_callback); + if (status != CPA_STATUS_SUCCESS) + goto fail; + } + + qat_ksp = kstat_create("zfs", 0, "qat", "misc", + KSTAT_TYPE_NAMED, sizeof (qat_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + if (qat_ksp != NULL) { + qat_ksp->ks_data = &qat_stats; + kstat_install(qat_ksp); + } + + qat_init_done = B_TRUE; + return (0); +fail: + qat_clean(); + return (-1); +} + +void +qat_fini(void) +{ + qat_clean(); + + if (qat_ksp != NULL) { + kstat_delete(qat_ksp); + qat_ksp = NULL; + } +} + +boolean_t +qat_use_accel(size_t s_len) +{ + return (!zfs_qat_disable && + qat_init_done && + s_len >= QAT_MIN_BUF_SIZE && + s_len <= QAT_MAX_BUF_SIZE); +} + +int +qat_compress(qat_compress_dir_t dir, char *src, int src_len, + char *dst, int dst_len, size_t *c_len) +{ + CpaInstanceHandle dc_inst_handle; + CpaDcSessionHandle session_handle; + CpaBufferList *buf_list_src = NULL; + CpaBufferList *buf_list_dst = NULL; + CpaFlatBuffer *flat_buf_src = NULL; + CpaFlatBuffer *flat_buf_dst = NULL; + Cpa8U *buffer_meta_src = NULL; + Cpa8U *buffer_meta_dst = NULL; + Cpa32U buffer_meta_size = 0; + CpaDcRqResults dc_results; + CpaStatus status = CPA_STATUS_SUCCESS; + Cpa32U hdr_sz = 0; + Cpa32U compressed_sz; + Cpa32U num_src_buf = (src_len >> PAGE_SHIFT) + 1; + Cpa32U num_dst_buf = (dst_len >> PAGE_SHIFT) + 1; + Cpa32U bytes_left; + char *data; + struct page *in_page, *out_page; + struct page **in_pages = NULL; + struct page **out_pages = NULL; + struct completion complete; + size_t ret = -1; + Cpa16U page_num = 0; + Cpa16U i; + + Cpa32U src_buffer_list_mem_size = sizeof (CpaBufferList) + + (num_src_buf * sizeof (CpaFlatBuffer)); + Cpa32U dst_buffer_list_mem_size = sizeof (CpaBufferList) + + (num_dst_buf * sizeof (CpaFlatBuffer)); + + if (!is_vmalloc_addr(src) || !is_vmalloc_addr(src + src_len - 1) || + !is_vmalloc_addr(dst) || !is_vmalloc_addr(dst + dst_len - 1)) + return (-1); + + if (PHYS_CONTIG_ALLOC(&in_pages, + num_src_buf * sizeof (struct page *)) != CPA_STATUS_SUCCESS) + goto fail; + + if (PHYS_CONTIG_ALLOC(&out_pages, + num_dst_buf * sizeof (struct page *)) != CPA_STATUS_SUCCESS) + goto fail; + + i = atomic_inc_32_nv(&inst_num) % num_inst; + dc_inst_handle = dc_inst_handles[i]; + session_handle = session_handles[i]; + + cpaDcBufferListGetMetaSize(dc_inst_handle, num_src_buf, + &buffer_meta_size); + if (PHYS_CONTIG_ALLOC(&buffer_meta_src, buffer_meta_size) != + CPA_STATUS_SUCCESS) + goto fail; + + cpaDcBufferListGetMetaSize(dc_inst_handle, num_dst_buf, + &buffer_meta_size); + if (PHYS_CONTIG_ALLOC(&buffer_meta_dst, buffer_meta_size) != + CPA_STATUS_SUCCESS) + goto fail; + + /* build source buffer list */ + if (PHYS_CONTIG_ALLOC(&buf_list_src, src_buffer_list_mem_size) != + CPA_STATUS_SUCCESS) + goto fail; + + flat_buf_src = (CpaFlatBuffer *)(buf_list_src + 1); + + buf_list_src->pBuffers = flat_buf_src; /* always point to first one */ + + /* build destination buffer list */ + if (PHYS_CONTIG_ALLOC(&buf_list_dst, dst_buffer_list_mem_size) != + CPA_STATUS_SUCCESS) + goto fail; + + flat_buf_dst = (CpaFlatBuffer *)(buf_list_dst + 1); + + buf_list_dst->pBuffers = flat_buf_dst; /* always point to first one */ + + buf_list_src->numBuffers = 0; + buf_list_src->pPrivateMetaData = buffer_meta_src; + bytes_left = src_len; + data = src; + page_num = 0; + while (bytes_left > 0) { + in_page = mem_to_page(data); + in_pages[page_num] = in_page; + flat_buf_src->pData = kmap(in_page); + flat_buf_src->dataLenInBytes = + min((long)bytes_left, (long)PAGE_SIZE); + + bytes_left -= flat_buf_src->dataLenInBytes; + data += flat_buf_src->dataLenInBytes; + flat_buf_src++; + buf_list_src->numBuffers++; + page_num++; + } + + buf_list_dst->numBuffers = 0; + buf_list_dst->pPrivateMetaData = buffer_meta_dst; + bytes_left = dst_len; + data = dst; + page_num = 0; + while (bytes_left > 0) { + out_page = mem_to_page(data); + flat_buf_dst->pData = kmap(out_page); + out_pages[page_num] = out_page; + flat_buf_dst->dataLenInBytes = + min((long)bytes_left, (long)PAGE_SIZE); + + bytes_left -= flat_buf_dst->dataLenInBytes; + data += flat_buf_dst->dataLenInBytes; + flat_buf_dst++; + buf_list_dst->numBuffers++; + page_num++; + } + + init_completion(&complete); + + if (dir == QAT_COMPRESS) { + QAT_STAT_BUMP(comp_requests); + QAT_STAT_INCR(comp_total_in_bytes, src_len); + + cpaDcGenerateHeader(session_handle, + buf_list_dst->pBuffers, &hdr_sz); + buf_list_dst->pBuffers->pData += hdr_sz; + buf_list_dst->pBuffers->dataLenInBytes -= hdr_sz; + status = cpaDcCompressData( + dc_inst_handle, session_handle, + buf_list_src, buf_list_dst, + &dc_results, CPA_DC_FLUSH_FINAL, + &complete); + if (status != CPA_STATUS_SUCCESS) { + goto fail; + } + + /* we now wait until the completion of the operation. */ + if (!wait_for_completion_interruptible_timeout(&complete, + TIMEOUT_MS)) { + status = CPA_STATUS_FAIL; + goto fail; + } + + if (dc_results.status != CPA_STATUS_SUCCESS) { + status = CPA_STATUS_FAIL; + goto fail; + } + + compressed_sz = dc_results.produced; + if (compressed_sz + hdr_sz + ZLIB_FOOT_SZ > dst_len) { + goto fail; + } + + flat_buf_dst = (CpaFlatBuffer *)(buf_list_dst + 1); + /* move to the last page */ + flat_buf_dst += (compressed_sz + hdr_sz) >> PAGE_SHIFT; + + /* no space for gzip foot in the last page */ + if (((compressed_sz + hdr_sz) % PAGE_SIZE) + + ZLIB_FOOT_SZ > PAGE_SIZE) + goto fail; + + /* jump to the end of the buffer and append footer */ + flat_buf_dst->pData = + (char *)((unsigned long)flat_buf_dst->pData & PAGE_MASK) + + ((compressed_sz + hdr_sz) % PAGE_SIZE); + flat_buf_dst->dataLenInBytes = ZLIB_FOOT_SZ; + + dc_results.produced = 0; + status = cpaDcGenerateFooter(session_handle, + flat_buf_dst, &dc_results); + if (status != CPA_STATUS_SUCCESS) { + goto fail; + } + + *c_len = compressed_sz + dc_results.produced + hdr_sz; + + QAT_STAT_INCR(comp_total_out_bytes, *c_len); + + ret = 0; + + } else if (dir == QAT_DECOMPRESS) { + QAT_STAT_BUMP(decomp_requests); + QAT_STAT_INCR(decomp_total_in_bytes, src_len); + + buf_list_src->pBuffers->pData += ZLIB_HEAD_SZ; + buf_list_src->pBuffers->dataLenInBytes -= ZLIB_HEAD_SZ; + status = cpaDcDecompressData(dc_inst_handle, + session_handle, + buf_list_src, + buf_list_dst, + &dc_results, + CPA_DC_FLUSH_FINAL, + &complete); + + if (CPA_STATUS_SUCCESS != status) { + status = CPA_STATUS_FAIL; + goto fail; + } + + /* we now wait until the completion of the operation. */ + if (!wait_for_completion_interruptible_timeout(&complete, + TIMEOUT_MS)) { + status = CPA_STATUS_FAIL; + goto fail; + } + + if (dc_results.status != CPA_STATUS_SUCCESS) { + status = CPA_STATUS_FAIL; + goto fail; + } + + *c_len = dc_results.produced; + + QAT_STAT_INCR(decomp_total_out_bytes, *c_len); + + ret = 0; + } + +fail: + if (status != CPA_STATUS_SUCCESS) { + QAT_STAT_BUMP(dc_fails); + } + + if (in_pages) { + for (page_num = 0; + page_num < buf_list_src->numBuffers; + page_num++) { + kunmap(in_pages[page_num]); + } + PHYS_CONTIG_FREE(in_pages); + } + + if (out_pages) { + for (page_num = 0; + page_num < buf_list_dst->numBuffers; + page_num++) { + kunmap(out_pages[page_num]); + } + PHYS_CONTIG_FREE(out_pages); + } + + PHYS_CONTIG_FREE(buffer_meta_src); + PHYS_CONTIG_FREE(buffer_meta_dst); + PHYS_CONTIG_FREE(buf_list_src); + PHYS_CONTIG_FREE(buf_list_dst); + + return (ret); +} + +module_param(zfs_qat_disable, int, 0644); +MODULE_PARM_DESC(zfs_qat_disable, "Disable QAT compression"); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/qat_compress.h +++ linux-aws-4.15.0/zfs/module/zfs/qat_compress.h @@ -0,0 +1,48 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#ifndef _SYS_QAT_COMPRESS_H +#define _SYS_QAT_COMPRESS_H + +#if defined(_KERNEL) && defined(HAVE_QAT) +#include +#include "cpa.h" +#include "dc/cpa_dc.h" + +typedef enum qat_compress_dir { + QAT_COMPRESS = 0, + QAT_DECOMPRESS = 1, +} qat_compress_dir_t; + +extern int qat_init(void); +extern void qat_fini(void); +extern boolean_t qat_use_accel(size_t s_len); +extern int qat_compress(qat_compress_dir_t dir, char *src, int src_len, + char *dst, int dst_len, size_t *c_len); +#else +#define CPA_STATUS_SUCCESS 0 +#define qat_init() +#define qat_fini() +#define qat_use_accel(s_len) 0 +#define qat_compress(dir, s, sl, d, dl, cl) 0 +#endif + +#endif /* _SYS_QAT_COMPRESS_H */ --- linux-aws-4.15.0.orig/zfs/module/zfs/range_tree.c +++ linux-aws-4.15.0/zfs/module/zfs/range_tree.c @@ -0,0 +1,404 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +kmem_cache_t *range_seg_cache; + +void +range_tree_init(void) +{ + ASSERT(range_seg_cache == NULL); + range_seg_cache = kmem_cache_create("range_seg_cache", + sizeof (range_seg_t), 0, NULL, NULL, NULL, NULL, NULL, 0); +} + +void +range_tree_fini(void) +{ + kmem_cache_destroy(range_seg_cache); + range_seg_cache = NULL; +} + +void +range_tree_stat_verify(range_tree_t *rt) +{ + range_seg_t *rs; + uint64_t hist[RANGE_TREE_HISTOGRAM_SIZE] = { 0 }; + int i; + + for (rs = avl_first(&rt->rt_root); rs != NULL; + rs = AVL_NEXT(&rt->rt_root, rs)) { + uint64_t size = rs->rs_end - rs->rs_start; + int idx = highbit64(size) - 1; + + hist[idx]++; + ASSERT3U(hist[idx], !=, 0); + } + + for (i = 0; i < RANGE_TREE_HISTOGRAM_SIZE; i++) { + if (hist[i] != rt->rt_histogram[i]) { + zfs_dbgmsg("i=%d, hist=%p, hist=%llu, rt_hist=%llu", + i, hist, hist[i], rt->rt_histogram[i]); + } + VERIFY3U(hist[i], ==, rt->rt_histogram[i]); + } +} + +static void +range_tree_stat_incr(range_tree_t *rt, range_seg_t *rs) +{ + uint64_t size = rs->rs_end - rs->rs_start; + int idx = highbit64(size) - 1; + + ASSERT(size != 0); + ASSERT3U(idx, <, + sizeof (rt->rt_histogram) / sizeof (*rt->rt_histogram)); + + ASSERT(MUTEX_HELD(rt->rt_lock)); + rt->rt_histogram[idx]++; + ASSERT3U(rt->rt_histogram[idx], !=, 0); +} + +static void +range_tree_stat_decr(range_tree_t *rt, range_seg_t *rs) +{ + uint64_t size = rs->rs_end - rs->rs_start; + int idx = highbit64(size) - 1; + + ASSERT(size != 0); + ASSERT3U(idx, <, + sizeof (rt->rt_histogram) / sizeof (*rt->rt_histogram)); + + ASSERT(MUTEX_HELD(rt->rt_lock)); + ASSERT3U(rt->rt_histogram[idx], !=, 0); + rt->rt_histogram[idx]--; +} + +/* + * NOTE: caller is responsible for all locking. + */ +static int +range_tree_seg_compare(const void *x1, const void *x2) +{ + const range_seg_t *r1 = (const range_seg_t *)x1; + const range_seg_t *r2 = (const range_seg_t *)x2; + + ASSERT3U(r1->rs_start, <=, r1->rs_end); + ASSERT3U(r2->rs_start, <=, r2->rs_end); + + return ((r1->rs_start >= r2->rs_end) - (r1->rs_end <= r2->rs_start)); +} + +range_tree_t * +range_tree_create(range_tree_ops_t *ops, void *arg, kmutex_t *lp) +{ + range_tree_t *rt; + + rt = kmem_zalloc(sizeof (range_tree_t), KM_SLEEP); + + avl_create(&rt->rt_root, range_tree_seg_compare, + sizeof (range_seg_t), offsetof(range_seg_t, rs_node)); + + rt->rt_lock = lp; + rt->rt_ops = ops; + rt->rt_arg = arg; + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_create(rt, rt->rt_arg); + + return (rt); +} + +void +range_tree_destroy(range_tree_t *rt) +{ + VERIFY0(rt->rt_space); + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_destroy(rt, rt->rt_arg); + + avl_destroy(&rt->rt_root); + kmem_free(rt, sizeof (*rt)); +} + +void +range_tree_add(void *arg, uint64_t start, uint64_t size) +{ + range_tree_t *rt = arg; + avl_index_t where; + range_seg_t rsearch, *rs_before, *rs_after, *rs; + uint64_t end = start + size; + boolean_t merge_before, merge_after; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + VERIFY(size != 0); + + rsearch.rs_start = start; + rsearch.rs_end = end; + rs = avl_find(&rt->rt_root, &rsearch, &where); + + if (rs != NULL && rs->rs_start <= start && rs->rs_end >= end) { + zfs_panic_recover("zfs: allocating allocated segment" + "(offset=%llu size=%llu)\n", + (longlong_t)start, (longlong_t)size); + return; + } + + /* Make sure we don't overlap with either of our neighbors */ + VERIFY(rs == NULL); + + rs_before = avl_nearest(&rt->rt_root, where, AVL_BEFORE); + rs_after = avl_nearest(&rt->rt_root, where, AVL_AFTER); + + merge_before = (rs_before != NULL && rs_before->rs_end == start); + merge_after = (rs_after != NULL && rs_after->rs_start == end); + + if (merge_before && merge_after) { + avl_remove(&rt->rt_root, rs_before); + if (rt->rt_ops != NULL) { + rt->rt_ops->rtop_remove(rt, rs_before, rt->rt_arg); + rt->rt_ops->rtop_remove(rt, rs_after, rt->rt_arg); + } + + range_tree_stat_decr(rt, rs_before); + range_tree_stat_decr(rt, rs_after); + + rs_after->rs_start = rs_before->rs_start; + kmem_cache_free(range_seg_cache, rs_before); + rs = rs_after; + } else if (merge_before) { + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_remove(rt, rs_before, rt->rt_arg); + + range_tree_stat_decr(rt, rs_before); + + rs_before->rs_end = end; + rs = rs_before; + } else if (merge_after) { + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_remove(rt, rs_after, rt->rt_arg); + + range_tree_stat_decr(rt, rs_after); + + rs_after->rs_start = start; + rs = rs_after; + } else { + rs = kmem_cache_alloc(range_seg_cache, KM_SLEEP); + rs->rs_start = start; + rs->rs_end = end; + avl_insert(&rt->rt_root, rs, where); + } + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_add(rt, rs, rt->rt_arg); + + range_tree_stat_incr(rt, rs); + rt->rt_space += size; +} + +void +range_tree_remove(void *arg, uint64_t start, uint64_t size) +{ + range_tree_t *rt = arg; + avl_index_t where; + range_seg_t rsearch, *rs, *newseg; + uint64_t end = start + size; + boolean_t left_over, right_over; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + VERIFY3U(size, !=, 0); + VERIFY3U(size, <=, rt->rt_space); + + rsearch.rs_start = start; + rsearch.rs_end = end; + rs = avl_find(&rt->rt_root, &rsearch, &where); + + /* Make sure we completely overlap with someone */ + if (rs == NULL) { + zfs_panic_recover("zfs: freeing free segment " + "(offset=%llu size=%llu)", + (longlong_t)start, (longlong_t)size); + return; + } + VERIFY3U(rs->rs_start, <=, start); + VERIFY3U(rs->rs_end, >=, end); + + left_over = (rs->rs_start != start); + right_over = (rs->rs_end != end); + + range_tree_stat_decr(rt, rs); + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_remove(rt, rs, rt->rt_arg); + + if (left_over && right_over) { + newseg = kmem_cache_alloc(range_seg_cache, KM_SLEEP); + newseg->rs_start = end; + newseg->rs_end = rs->rs_end; + range_tree_stat_incr(rt, newseg); + + rs->rs_end = start; + + avl_insert_here(&rt->rt_root, newseg, rs, AVL_AFTER); + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_add(rt, newseg, rt->rt_arg); + } else if (left_over) { + rs->rs_end = start; + } else if (right_over) { + rs->rs_start = end; + } else { + avl_remove(&rt->rt_root, rs); + kmem_cache_free(range_seg_cache, rs); + rs = NULL; + } + + if (rs != NULL) { + range_tree_stat_incr(rt, rs); + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_add(rt, rs, rt->rt_arg); + } + + rt->rt_space -= size; +} + +static range_seg_t * +range_tree_find_impl(range_tree_t *rt, uint64_t start, uint64_t size) +{ + avl_index_t where; + range_seg_t rsearch; + uint64_t end = start + size; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + VERIFY(size != 0); + + rsearch.rs_start = start; + rsearch.rs_end = end; + return (avl_find(&rt->rt_root, &rsearch, &where)); +} + +static range_seg_t * +range_tree_find(range_tree_t *rt, uint64_t start, uint64_t size) +{ + range_seg_t *rs = range_tree_find_impl(rt, start, size); + if (rs != NULL && rs->rs_start <= start && rs->rs_end >= start + size) + return (rs); + return (NULL); +} + +void +range_tree_verify(range_tree_t *rt, uint64_t off, uint64_t size) +{ + range_seg_t *rs; + + mutex_enter(rt->rt_lock); + rs = range_tree_find(rt, off, size); + if (rs != NULL) + panic("freeing free block; rs=%p", (void *)rs); + mutex_exit(rt->rt_lock); +} + +boolean_t +range_tree_contains(range_tree_t *rt, uint64_t start, uint64_t size) +{ + return (range_tree_find(rt, start, size) != NULL); +} + +/* + * Ensure that this range is not in the tree, regardless of whether + * it is currently in the tree. + */ +void +range_tree_clear(range_tree_t *rt, uint64_t start, uint64_t size) +{ + range_seg_t *rs; + + while ((rs = range_tree_find_impl(rt, start, size)) != NULL) { + uint64_t free_start = MAX(rs->rs_start, start); + uint64_t free_end = MIN(rs->rs_end, start + size); + range_tree_remove(rt, free_start, free_end - free_start); + } +} + +void +range_tree_swap(range_tree_t **rtsrc, range_tree_t **rtdst) +{ + range_tree_t *rt; + + ASSERT(MUTEX_HELD((*rtsrc)->rt_lock)); + ASSERT0(range_tree_space(*rtdst)); + ASSERT0(avl_numnodes(&(*rtdst)->rt_root)); + + rt = *rtsrc; + *rtsrc = *rtdst; + *rtdst = rt; +} + +void +range_tree_vacate(range_tree_t *rt, range_tree_func_t *func, void *arg) +{ + range_seg_t *rs; + void *cookie = NULL; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + + if (rt->rt_ops != NULL) + rt->rt_ops->rtop_vacate(rt, rt->rt_arg); + + while ((rs = avl_destroy_nodes(&rt->rt_root, &cookie)) != NULL) { + if (func != NULL) + func(arg, rs->rs_start, rs->rs_end - rs->rs_start); + kmem_cache_free(range_seg_cache, rs); + } + + bzero(rt->rt_histogram, sizeof (rt->rt_histogram)); + rt->rt_space = 0; +} + +void +range_tree_walk(range_tree_t *rt, range_tree_func_t *func, void *arg) +{ + range_seg_t *rs; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + + for (rs = avl_first(&rt->rt_root); rs; rs = AVL_NEXT(&rt->rt_root, rs)) + func(arg, rs->rs_start, rs->rs_end - rs->rs_start); +} + +uint64_t +range_tree_space(range_tree_t *rt) +{ + return (rt->rt_space); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/refcount.c +++ linux-aws-4.15.0/zfs/module/zfs/refcount.c @@ -0,0 +1,316 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#include +#include + +#ifdef _KERNEL +int reference_tracking_enable = FALSE; /* runs out of memory too easily */ +#else +int reference_tracking_enable = TRUE; +#endif +int reference_history = 3; /* tunable */ + +#ifdef ZFS_DEBUG +static kmem_cache_t *reference_cache; +static kmem_cache_t *reference_history_cache; + +void +refcount_init(void) +{ + reference_cache = kmem_cache_create("reference_cache", + sizeof (reference_t), 0, NULL, NULL, NULL, NULL, NULL, 0); + + reference_history_cache = kmem_cache_create("reference_history_cache", + sizeof (uint64_t), 0, NULL, NULL, NULL, NULL, NULL, 0); +} + +void +refcount_fini(void) +{ + kmem_cache_destroy(reference_cache); + kmem_cache_destroy(reference_history_cache); +} + +void +refcount_create(refcount_t *rc) +{ + mutex_init(&rc->rc_mtx, NULL, MUTEX_DEFAULT, NULL); + list_create(&rc->rc_list, sizeof (reference_t), + offsetof(reference_t, ref_link)); + list_create(&rc->rc_removed, sizeof (reference_t), + offsetof(reference_t, ref_link)); + rc->rc_count = 0; + rc->rc_removed_count = 0; + rc->rc_tracked = reference_tracking_enable; +} + +void +refcount_create_tracked(refcount_t *rc) +{ + refcount_create(rc); + rc->rc_tracked = B_TRUE; +} + +void +refcount_create_untracked(refcount_t *rc) +{ + refcount_create(rc); + rc->rc_tracked = B_FALSE; +} + +void +refcount_destroy_many(refcount_t *rc, uint64_t number) +{ + reference_t *ref; + + ASSERT(rc->rc_count == number); + while ((ref = list_head(&rc->rc_list))) { + list_remove(&rc->rc_list, ref); + kmem_cache_free(reference_cache, ref); + } + list_destroy(&rc->rc_list); + + while ((ref = list_head(&rc->rc_removed))) { + list_remove(&rc->rc_removed, ref); + kmem_cache_free(reference_history_cache, ref->ref_removed); + kmem_cache_free(reference_cache, ref); + } + list_destroy(&rc->rc_removed); + mutex_destroy(&rc->rc_mtx); +} + +void +refcount_destroy(refcount_t *rc) +{ + refcount_destroy_many(rc, 0); +} + +int +refcount_is_zero(refcount_t *rc) +{ + return (rc->rc_count == 0); +} + +int64_t +refcount_count(refcount_t *rc) +{ + return (rc->rc_count); +} + +int64_t +refcount_add_many(refcount_t *rc, uint64_t number, void *holder) +{ + reference_t *ref = NULL; + int64_t count; + + if (rc->rc_tracked) { + ref = kmem_cache_alloc(reference_cache, KM_SLEEP); + ref->ref_holder = holder; + ref->ref_number = number; + } + mutex_enter(&rc->rc_mtx); + ASSERT(rc->rc_count >= 0); + if (rc->rc_tracked) + list_insert_head(&rc->rc_list, ref); + rc->rc_count += number; + count = rc->rc_count; + mutex_exit(&rc->rc_mtx); + + return (count); +} + +int64_t +zfs_refcount_add(refcount_t *rc, void *holder) +{ + return (refcount_add_many(rc, 1, holder)); +} + +int64_t +refcount_remove_many(refcount_t *rc, uint64_t number, void *holder) +{ + reference_t *ref; + int64_t count; + + mutex_enter(&rc->rc_mtx); + ASSERT(rc->rc_count >= number); + + if (!rc->rc_tracked) { + rc->rc_count -= number; + count = rc->rc_count; + mutex_exit(&rc->rc_mtx); + return (count); + } + + for (ref = list_head(&rc->rc_list); ref; + ref = list_next(&rc->rc_list, ref)) { + if (ref->ref_holder == holder && ref->ref_number == number) { + list_remove(&rc->rc_list, ref); + if (reference_history > 0) { + ref->ref_removed = + kmem_cache_alloc(reference_history_cache, + KM_SLEEP); + list_insert_head(&rc->rc_removed, ref); + rc->rc_removed_count++; + if (rc->rc_removed_count > reference_history) { + ref = list_tail(&rc->rc_removed); + list_remove(&rc->rc_removed, ref); + kmem_cache_free(reference_history_cache, + ref->ref_removed); + kmem_cache_free(reference_cache, ref); + rc->rc_removed_count--; + } + } else { + kmem_cache_free(reference_cache, ref); + } + rc->rc_count -= number; + count = rc->rc_count; + mutex_exit(&rc->rc_mtx); + return (count); + } + } + panic("No such hold %p on refcount %llx", holder, + (u_longlong_t)(uintptr_t)rc); + return (-1); +} + +int64_t +refcount_remove(refcount_t *rc, void *holder) +{ + return (refcount_remove_many(rc, 1, holder)); +} + +void +refcount_transfer(refcount_t *dst, refcount_t *src) +{ + int64_t count, removed_count; + list_t list, removed; + + list_create(&list, sizeof (reference_t), + offsetof(reference_t, ref_link)); + list_create(&removed, sizeof (reference_t), + offsetof(reference_t, ref_link)); + + mutex_enter(&src->rc_mtx); + count = src->rc_count; + removed_count = src->rc_removed_count; + src->rc_count = 0; + src->rc_removed_count = 0; + list_move_tail(&list, &src->rc_list); + list_move_tail(&removed, &src->rc_removed); + mutex_exit(&src->rc_mtx); + + mutex_enter(&dst->rc_mtx); + dst->rc_count += count; + dst->rc_removed_count += removed_count; + list_move_tail(&dst->rc_list, &list); + list_move_tail(&dst->rc_removed, &removed); + mutex_exit(&dst->rc_mtx); + + list_destroy(&list); + list_destroy(&removed); +} + +void +refcount_transfer_ownership(refcount_t *rc, void *current_holder, + void *new_holder) +{ + reference_t *ref; + boolean_t found = B_FALSE; + + mutex_enter(&rc->rc_mtx); + if (!rc->rc_tracked) { + mutex_exit(&rc->rc_mtx); + return; + } + + for (ref = list_head(&rc->rc_list); ref; + ref = list_next(&rc->rc_list, ref)) { + if (ref->ref_holder == current_holder) { + ref->ref_holder = new_holder; + found = B_TRUE; + break; + } + } + ASSERT(found); + mutex_exit(&rc->rc_mtx); +} + +/* + * If tracking is enabled, return true if a reference exists that matches + * the "holder" tag. If tracking is disabled, then return true if a reference + * might be held. + */ +boolean_t +refcount_held(refcount_t *rc, void *holder) +{ + reference_t *ref; + + mutex_enter(&rc->rc_mtx); + + if (!rc->rc_tracked) { + mutex_exit(&rc->rc_mtx); + return (rc->rc_count > 0); + } + + for (ref = list_head(&rc->rc_list); ref; + ref = list_next(&rc->rc_list, ref)) { + if (ref->ref_holder == holder) { + mutex_exit(&rc->rc_mtx); + return (B_TRUE); + } + } + mutex_exit(&rc->rc_mtx); + return (B_FALSE); +} + +/* + * If tracking is enabled, return true if a reference does not exist that + * matches the "holder" tag. If tracking is disabled, always return true + * since the reference might not be held. + */ +boolean_t +refcount_not_held(refcount_t *rc, void *holder) +{ + reference_t *ref; + + mutex_enter(&rc->rc_mtx); + + if (!rc->rc_tracked) { + mutex_exit(&rc->rc_mtx); + return (B_TRUE); + } + + for (ref = list_head(&rc->rc_list); ref; + ref = list_next(&rc->rc_list, ref)) { + if (ref->ref_holder == holder) { + mutex_exit(&rc->rc_mtx); + return (B_FALSE); + } + } + mutex_exit(&rc->rc_mtx); + return (B_TRUE); +} +#endif /* ZFS_DEBUG */ --- linux-aws-4.15.0.orig/zfs/module/zfs/rrwlock.c +++ linux-aws-4.15.0/zfs/module/zfs/rrwlock.c @@ -0,0 +1,395 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#include +#include + +/* + * This file contains the implementation of a re-entrant read + * reader/writer lock (aka "rrwlock"). + * + * This is a normal reader/writer lock with the additional feature + * of allowing threads who have already obtained a read lock to + * re-enter another read lock (re-entrant read) - even if there are + * waiting writers. + * + * Callers who have not obtained a read lock give waiting writers priority. + * + * The rrwlock_t lock does not allow re-entrant writers, nor does it + * allow a re-entrant mix of reads and writes (that is, it does not + * allow a caller who has already obtained a read lock to be able to + * then grab a write lock without first dropping all read locks, and + * vice versa). + * + * The rrwlock_t uses tsd (thread specific data) to keep a list of + * nodes (rrw_node_t), where each node keeps track of which specific + * lock (rrw_node_t::rn_rrl) the thread has grabbed. Since re-entering + * should be rare, a thread that grabs multiple reads on the same rrwlock_t + * will store multiple rrw_node_ts of the same 'rrn_rrl'. Nodes on the + * tsd list can represent a different rrwlock_t. This allows a thread + * to enter multiple and unique rrwlock_ts for read locks at the same time. + * + * Since using tsd exposes some overhead, the rrwlock_t only needs to + * keep tsd data when writers are waiting. If no writers are waiting, then + * a reader just bumps the anonymous read count (rr_anon_rcount) - no tsd + * is needed. Once a writer attempts to grab the lock, readers then + * keep tsd data and bump the linked readers count (rr_linked_rcount). + * + * If there are waiting writers and there are anonymous readers, then a + * reader doesn't know if it is a re-entrant lock. But since it may be one, + * we allow the read to proceed (otherwise it could deadlock). Since once + * waiting writers are active, readers no longer bump the anonymous count, + * the anonymous readers will eventually flush themselves out. At this point, + * readers will be able to tell if they are a re-entrant lock (have a + * rrw_node_t entry for the lock) or not. If they are a re-entrant lock, then + * we must let the proceed. If they are not, then the reader blocks for the + * waiting writers. Hence, we do not starve writers. + */ + +/* global key for TSD */ +uint_t rrw_tsd_key; + +typedef struct rrw_node { + struct rrw_node *rn_next; + rrwlock_t *rn_rrl; + void *rn_tag; +} rrw_node_t; + +static rrw_node_t * +rrn_find(rrwlock_t *rrl) +{ + rrw_node_t *rn; + + if (refcount_count(&rrl->rr_linked_rcount) == 0) + return (NULL); + + for (rn = tsd_get(rrw_tsd_key); rn != NULL; rn = rn->rn_next) { + if (rn->rn_rrl == rrl) + return (rn); + } + return (NULL); +} + +/* + * Add a node to the head of the singly linked list. + */ +static void +rrn_add(rrwlock_t *rrl, void *tag) +{ + rrw_node_t *rn; + + rn = kmem_alloc(sizeof (*rn), KM_SLEEP); + rn->rn_rrl = rrl; + rn->rn_next = tsd_get(rrw_tsd_key); + rn->rn_tag = tag; + VERIFY(tsd_set(rrw_tsd_key, rn) == 0); +} + +/* + * If a node is found for 'rrl', then remove the node from this + * thread's list and return TRUE; otherwise return FALSE. + */ +static boolean_t +rrn_find_and_remove(rrwlock_t *rrl, void *tag) +{ + rrw_node_t *rn; + rrw_node_t *prev = NULL; + + if (refcount_count(&rrl->rr_linked_rcount) == 0) + return (B_FALSE); + + for (rn = tsd_get(rrw_tsd_key); rn != NULL; rn = rn->rn_next) { + if (rn->rn_rrl == rrl && rn->rn_tag == tag) { + if (prev) + prev->rn_next = rn->rn_next; + else + VERIFY(tsd_set(rrw_tsd_key, rn->rn_next) == 0); + kmem_free(rn, sizeof (*rn)); + return (B_TRUE); + } + prev = rn; + } + return (B_FALSE); +} + +void +rrw_init(rrwlock_t *rrl, boolean_t track_all) +{ + mutex_init(&rrl->rr_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&rrl->rr_cv, NULL, CV_DEFAULT, NULL); + rrl->rr_writer = NULL; + refcount_create(&rrl->rr_anon_rcount); + refcount_create(&rrl->rr_linked_rcount); + rrl->rr_writer_wanted = B_FALSE; + rrl->rr_track_all = track_all; +} + +void +rrw_destroy(rrwlock_t *rrl) +{ + mutex_destroy(&rrl->rr_lock); + cv_destroy(&rrl->rr_cv); + ASSERT(rrl->rr_writer == NULL); + refcount_destroy(&rrl->rr_anon_rcount); + refcount_destroy(&rrl->rr_linked_rcount); +} + +static void +rrw_enter_read_impl(rrwlock_t *rrl, boolean_t prio, void *tag) +{ + mutex_enter(&rrl->rr_lock); +#if !defined(DEBUG) && defined(_KERNEL) + if (rrl->rr_writer == NULL && !rrl->rr_writer_wanted && + !rrl->rr_track_all) { + rrl->rr_anon_rcount.rc_count++; + mutex_exit(&rrl->rr_lock); + return; + } + DTRACE_PROBE(zfs__rrwfastpath__rdmiss); +#endif + ASSERT(rrl->rr_writer != curthread); + ASSERT(refcount_count(&rrl->rr_anon_rcount) >= 0); + + while (rrl->rr_writer != NULL || (rrl->rr_writer_wanted && + refcount_is_zero(&rrl->rr_anon_rcount) && !prio && + rrn_find(rrl) == NULL)) + cv_wait(&rrl->rr_cv, &rrl->rr_lock); + + if (rrl->rr_writer_wanted || rrl->rr_track_all) { + /* may or may not be a re-entrant enter */ + rrn_add(rrl, tag); + (void) refcount_add(&rrl->rr_linked_rcount, tag); + } else { + (void) refcount_add(&rrl->rr_anon_rcount, tag); + } + ASSERT(rrl->rr_writer == NULL); + mutex_exit(&rrl->rr_lock); +} + +void +rrw_enter_read(rrwlock_t *rrl, void *tag) +{ + rrw_enter_read_impl(rrl, B_FALSE, tag); +} + +/* + * take a read lock even if there are pending write lock requests. if we want + * to take a lock reentrantly, but from different threads (that have a + * relationship to each other), the normal detection mechanism to overrule + * the pending writer does not work, so we have to give an explicit hint here. + */ +void +rrw_enter_read_prio(rrwlock_t *rrl, void *tag) +{ + rrw_enter_read_impl(rrl, B_TRUE, tag); +} + + +void +rrw_enter_write(rrwlock_t *rrl) +{ + mutex_enter(&rrl->rr_lock); + ASSERT(rrl->rr_writer != curthread); + + while (refcount_count(&rrl->rr_anon_rcount) > 0 || + refcount_count(&rrl->rr_linked_rcount) > 0 || + rrl->rr_writer != NULL) { + rrl->rr_writer_wanted = B_TRUE; + cv_wait(&rrl->rr_cv, &rrl->rr_lock); + } + rrl->rr_writer_wanted = B_FALSE; + rrl->rr_writer = curthread; + mutex_exit(&rrl->rr_lock); +} + +void +rrw_enter(rrwlock_t *rrl, krw_t rw, void *tag) +{ + if (rw == RW_READER) + rrw_enter_read(rrl, tag); + else + rrw_enter_write(rrl); +} + +void +rrw_exit(rrwlock_t *rrl, void *tag) +{ + mutex_enter(&rrl->rr_lock); +#if !defined(DEBUG) && defined(_KERNEL) + if (!rrl->rr_writer && rrl->rr_linked_rcount.rc_count == 0) { + rrl->rr_anon_rcount.rc_count--; + if (rrl->rr_anon_rcount.rc_count == 0) + cv_broadcast(&rrl->rr_cv); + mutex_exit(&rrl->rr_lock); + return; + } + DTRACE_PROBE(zfs__rrwfastpath__exitmiss); +#endif + ASSERT(!refcount_is_zero(&rrl->rr_anon_rcount) || + !refcount_is_zero(&rrl->rr_linked_rcount) || + rrl->rr_writer != NULL); + + if (rrl->rr_writer == NULL) { + int64_t count; + if (rrn_find_and_remove(rrl, tag)) { + count = refcount_remove(&rrl->rr_linked_rcount, tag); + } else { + ASSERT(!rrl->rr_track_all); + count = refcount_remove(&rrl->rr_anon_rcount, tag); + } + if (count == 0) + cv_broadcast(&rrl->rr_cv); + } else { + ASSERT(rrl->rr_writer == curthread); + ASSERT(refcount_is_zero(&rrl->rr_anon_rcount) && + refcount_is_zero(&rrl->rr_linked_rcount)); + rrl->rr_writer = NULL; + cv_broadcast(&rrl->rr_cv); + } + mutex_exit(&rrl->rr_lock); +} + +/* + * If the lock was created with track_all, rrw_held(RW_READER) will return + * B_TRUE iff the current thread has the lock for reader. Otherwise it may + * return B_TRUE if any thread has the lock for reader. + */ +boolean_t +rrw_held(rrwlock_t *rrl, krw_t rw) +{ + boolean_t held; + + mutex_enter(&rrl->rr_lock); + if (rw == RW_WRITER) { + held = (rrl->rr_writer == curthread); + } else { + held = (!refcount_is_zero(&rrl->rr_anon_rcount) || + rrn_find(rrl) != NULL); + } + mutex_exit(&rrl->rr_lock); + + return (held); +} + +void +rrw_tsd_destroy(void *arg) +{ + rrw_node_t *rn = arg; + if (rn != NULL) { + panic("thread %p terminating with rrw lock %p held", + (void *)curthread, (void *)rn->rn_rrl); + } +} + +/* + * A reader-mostly lock implementation, tuning above reader-writer locks + * for hightly parallel read acquisitions, while pessimizing writes. + * + * The idea is to split single busy lock into array of locks, so that + * each reader can lock only one of them for read, depending on result + * of simple hash function. That proportionally reduces lock congestion. + * Writer at the same time has to sequentially acquire write on all the locks. + * That makes write acquisition proportionally slower, but in places where + * it is used (filesystem unmount) performance is not critical. + * + * All the functions below are direct wrappers around functions above. + */ +void +rrm_init(rrmlock_t *rrl, boolean_t track_all) +{ + int i; + + for (i = 0; i < RRM_NUM_LOCKS; i++) + rrw_init(&rrl->locks[i], track_all); +} + +void +rrm_destroy(rrmlock_t *rrl) +{ + int i; + + for (i = 0; i < RRM_NUM_LOCKS; i++) + rrw_destroy(&rrl->locks[i]); +} + +void +rrm_enter(rrmlock_t *rrl, krw_t rw, void *tag) +{ + if (rw == RW_READER) + rrm_enter_read(rrl, tag); + else + rrm_enter_write(rrl); +} + +/* + * This maps the current thread to a specific lock. Note that the lock + * must be released by the same thread that acquired it. We do this + * mapping by taking the thread pointer mod a prime number. We examine + * only the low 32 bits of the thread pointer, because 32-bit division + * is faster than 64-bit division, and the high 32 bits have little + * entropy anyway. + */ +#define RRM_TD_LOCK() (((uint32_t)(uintptr_t)(curthread)) % RRM_NUM_LOCKS) + +void +rrm_enter_read(rrmlock_t *rrl, void *tag) +{ + rrw_enter_read(&rrl->locks[RRM_TD_LOCK()], tag); +} + +void +rrm_enter_write(rrmlock_t *rrl) +{ + int i; + + for (i = 0; i < RRM_NUM_LOCKS; i++) + rrw_enter_write(&rrl->locks[i]); +} + +void +rrm_exit(rrmlock_t *rrl, void *tag) +{ + int i; + + if (rrl->locks[0].rr_writer == curthread) { + for (i = 0; i < RRM_NUM_LOCKS; i++) + rrw_exit(&rrl->locks[i], tag); + } else { + rrw_exit(&rrl->locks[RRM_TD_LOCK()], tag); + } +} + +boolean_t +rrm_held(rrmlock_t *rrl, krw_t rw) +{ + if (rw == RW_WRITER) { + return (rrw_held(&rrl->locks[0], rw)); + } else { + return (rrw_held(&rrl->locks[RRM_TD_LOCK()], rw)); + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/sa.c +++ linux-aws-4.15.0/zfs/module/zfs/sa.c @@ -0,0 +1,2064 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ZFS System attributes: + * + * A generic mechanism to allow for arbitrary attributes + * to be stored in a dnode. The data will be stored in the bonus buffer of + * the dnode and if necessary a special "spill" block will be used to handle + * overflow situations. The spill block will be sized to fit the data + * from 512 - 128K. When a spill block is used the BP (blkptr_t) for the + * spill block is stored at the end of the current bonus buffer. Any + * attributes that would be in the way of the blkptr_t will be relocated + * into the spill block. + * + * Attribute registration: + * + * Stored persistently on a per dataset basis + * a mapping between attribute "string" names and their actual attribute + * numeric values, length, and byteswap function. The names are only used + * during registration. All attributes are known by their unique attribute + * id value. If an attribute can have a variable size then the value + * 0 will be used to indicate this. + * + * Attribute Layout: + * + * Attribute layouts are a way to compactly store multiple attributes, but + * without taking the overhead associated with managing each attribute + * individually. Since you will typically have the same set of attributes + * stored in the same order a single table will be used to represent that + * layout. The ZPL for example will usually have only about 10 different + * layouts (regular files, device files, symlinks, + * regular files + scanstamp, files/dir with extended attributes, and then + * you have the possibility of all of those minus ACL, because it would + * be kicked out into the spill block) + * + * Layouts are simply an array of the attributes and their + * ordering i.e. [0, 1, 4, 5, 2] + * + * Each distinct layout is given a unique layout number and that is whats + * stored in the header at the beginning of the SA data buffer. + * + * A layout only covers a single dbuf (bonus or spill). If a set of + * attributes is split up between the bonus buffer and a spill buffer then + * two different layouts will be used. This allows us to byteswap the + * spill without looking at the bonus buffer and keeps the on disk format of + * the bonus and spill buffer the same. + * + * Adding a single attribute will cause the entire set of attributes to + * be rewritten and could result in a new layout number being constructed + * as part of the rewrite if no such layout exists for the new set of + * attribues. The new attribute will be appended to the end of the already + * existing attributes. + * + * Both the attribute registration and attribute layout information are + * stored in normal ZAP attributes. Their should be a small number of + * known layouts and the set of attributes is assumed to typically be quite + * small. + * + * The registered attributes and layout "table" information is maintained + * in core and a special "sa_os_t" is attached to the objset_t. + * + * A special interface is provided to allow for quickly applying + * a large set of attributes at once. sa_replace_all_by_template() is + * used to set an array of attributes. This is used by the ZPL when + * creating a brand new file. The template that is passed into the function + * specifies the attribute, size for variable length attributes, location of + * data and special "data locator" function if the data isn't in a contiguous + * location. + * + * Byteswap implications: + * + * Since the SA attributes are not entirely self describing we can't do + * the normal byteswap processing. The special ZAP layout attribute and + * attribute registration attributes define the byteswap function and the + * size of the attributes, unless it is variable sized. + * The normal ZFS byteswapping infrastructure assumes you don't need + * to read any objects in order to do the necessary byteswapping. Whereas + * SA attributes can only be properly byteswapped if the dataset is opened + * and the layout/attribute ZAP attributes are available. Because of this + * the SA attributes will be byteswapped when they are first accessed by + * the SA code that will read the SA data. + */ + +typedef void (sa_iterfunc_t)(void *hdr, void *addr, sa_attr_type_t, + uint16_t length, int length_idx, boolean_t, void *userp); + +static int sa_build_index(sa_handle_t *hdl, sa_buf_type_t buftype); +static void sa_idx_tab_hold(objset_t *os, sa_idx_tab_t *idx_tab); +static sa_idx_tab_t *sa_find_idx_tab(objset_t *os, dmu_object_type_t bonustype, + sa_hdr_phys_t *hdr); +static void sa_idx_tab_rele(objset_t *os, void *arg); +static void sa_copy_data(sa_data_locator_t *func, void *start, void *target, + int buflen); +static int sa_modify_attrs(sa_handle_t *hdl, sa_attr_type_t newattr, + sa_data_op_t action, sa_data_locator_t *locator, void *datastart, + uint16_t buflen, dmu_tx_t *tx); + +arc_byteswap_func_t sa_bswap_table[] = { + byteswap_uint64_array, + byteswap_uint32_array, + byteswap_uint16_array, + byteswap_uint8_array, + zfs_acl_byteswap, +}; + +#define SA_COPY_DATA(f, s, t, l) \ + { \ + if (f == NULL) { \ + if (l == 8) { \ + *(uint64_t *)t = *(uint64_t *)s; \ + } else if (l == 16) { \ + *(uint64_t *)t = *(uint64_t *)s; \ + *(uint64_t *)((uintptr_t)t + 8) = \ + *(uint64_t *)((uintptr_t)s + 8); \ + } else { \ + bcopy(s, t, l); \ + } \ + } else \ + sa_copy_data(f, s, t, l); \ + } + +/* + * This table is fixed and cannot be changed. Its purpose is to + * allow the SA code to work with both old/new ZPL file systems. + * It contains the list of legacy attributes. These attributes aren't + * stored in the "attribute" registry zap objects, since older ZPL file systems + * won't have the registry. Only objsets of type ZFS_TYPE_FILESYSTEM will + * use this static table. + */ +sa_attr_reg_t sa_legacy_attrs[] = { + {"ZPL_ATIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 0}, + {"ZPL_MTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 1}, + {"ZPL_CTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 2}, + {"ZPL_CRTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 3}, + {"ZPL_GEN", sizeof (uint64_t), SA_UINT64_ARRAY, 4}, + {"ZPL_MODE", sizeof (uint64_t), SA_UINT64_ARRAY, 5}, + {"ZPL_SIZE", sizeof (uint64_t), SA_UINT64_ARRAY, 6}, + {"ZPL_PARENT", sizeof (uint64_t), SA_UINT64_ARRAY, 7}, + {"ZPL_LINKS", sizeof (uint64_t), SA_UINT64_ARRAY, 8}, + {"ZPL_XATTR", sizeof (uint64_t), SA_UINT64_ARRAY, 9}, + {"ZPL_RDEV", sizeof (uint64_t), SA_UINT64_ARRAY, 10}, + {"ZPL_FLAGS", sizeof (uint64_t), SA_UINT64_ARRAY, 11}, + {"ZPL_UID", sizeof (uint64_t), SA_UINT64_ARRAY, 12}, + {"ZPL_GID", sizeof (uint64_t), SA_UINT64_ARRAY, 13}, + {"ZPL_PAD", sizeof (uint64_t) * 4, SA_UINT64_ARRAY, 14}, + {"ZPL_ZNODE_ACL", 88, SA_UINT8_ARRAY, 15}, +}; + +/* + * This is only used for objects of type DMU_OT_ZNODE + */ +sa_attr_type_t sa_legacy_zpl_layout[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 +}; + +/* + * Special dummy layout used for buffers with no attributes. + */ +sa_attr_type_t sa_dummy_zpl_layout[] = { 0 }; + +static int sa_legacy_attr_count = ARRAY_SIZE(sa_legacy_attrs); +static kmem_cache_t *sa_cache = NULL; + +/*ARGSUSED*/ +static int +sa_cache_constructor(void *buf, void *unused, int kmflag) +{ + sa_handle_t *hdl = buf; + + mutex_init(&hdl->sa_lock, NULL, MUTEX_DEFAULT, NULL); + return (0); +} + +/*ARGSUSED*/ +static void +sa_cache_destructor(void *buf, void *unused) +{ + sa_handle_t *hdl = buf; + mutex_destroy(&hdl->sa_lock); +} + +void +sa_cache_init(void) +{ + sa_cache = kmem_cache_create("sa_cache", + sizeof (sa_handle_t), 0, sa_cache_constructor, + sa_cache_destructor, NULL, NULL, NULL, 0); +} + +void +sa_cache_fini(void) +{ + if (sa_cache) + kmem_cache_destroy(sa_cache); +} + +static int +layout_num_compare(const void *arg1, const void *arg2) +{ + const sa_lot_t *node1 = (const sa_lot_t *)arg1; + const sa_lot_t *node2 = (const sa_lot_t *)arg2; + + return (AVL_CMP(node1->lot_num, node2->lot_num)); +} + +static int +layout_hash_compare(const void *arg1, const void *arg2) +{ + const sa_lot_t *node1 = (const sa_lot_t *)arg1; + const sa_lot_t *node2 = (const sa_lot_t *)arg2; + + int cmp = AVL_CMP(node1->lot_hash, node2->lot_hash); + if (likely(cmp)) + return (cmp); + + return (AVL_CMP(node1->lot_instance, node2->lot_instance)); +} + +boolean_t +sa_layout_equal(sa_lot_t *tbf, sa_attr_type_t *attrs, int count) +{ + int i; + + if (count != tbf->lot_attr_count) + return (1); + + for (i = 0; i != count; i++) { + if (attrs[i] != tbf->lot_attrs[i]) + return (1); + } + return (0); +} + +#define SA_ATTR_HASH(attr) (zfs_crc64_table[(-1ULL ^ attr) & 0xFF]) + +static uint64_t +sa_layout_info_hash(sa_attr_type_t *attrs, int attr_count) +{ + int i; + uint64_t crc = -1ULL; + + for (i = 0; i != attr_count; i++) + crc ^= SA_ATTR_HASH(attrs[i]); + + return (crc); +} + +static int +sa_get_spill(sa_handle_t *hdl) +{ + int rc; + if (hdl->sa_spill == NULL) { + if ((rc = dmu_spill_hold_existing(hdl->sa_bonus, NULL, + &hdl->sa_spill)) == 0) + VERIFY(0 == sa_build_index(hdl, SA_SPILL)); + } else { + rc = 0; + } + + return (rc); +} + +/* + * Main attribute lookup/update function + * returns 0 for success or non zero for failures + * + * Operates on bulk array, first failure will abort further processing + */ +int +sa_attr_op(sa_handle_t *hdl, sa_bulk_attr_t *bulk, int count, + sa_data_op_t data_op, dmu_tx_t *tx) +{ + sa_os_t *sa = hdl->sa_os->os_sa; + int i; + int error = 0; + sa_buf_type_t buftypes; + + buftypes = 0; + + ASSERT(count > 0); + for (i = 0; i != count; i++) { + ASSERT(bulk[i].sa_attr <= hdl->sa_os->os_sa->sa_num_attrs); + + bulk[i].sa_addr = NULL; + /* First check the bonus buffer */ + + if (hdl->sa_bonus_tab && TOC_ATTR_PRESENT( + hdl->sa_bonus_tab->sa_idx_tab[bulk[i].sa_attr])) { + SA_ATTR_INFO(sa, hdl->sa_bonus_tab, + SA_GET_HDR(hdl, SA_BONUS), + bulk[i].sa_attr, bulk[i], SA_BONUS, hdl); + if (tx && !(buftypes & SA_BONUS)) { + dmu_buf_will_dirty(hdl->sa_bonus, tx); + buftypes |= SA_BONUS; + } + } + if (bulk[i].sa_addr == NULL && + ((error = sa_get_spill(hdl)) == 0)) { + if (TOC_ATTR_PRESENT( + hdl->sa_spill_tab->sa_idx_tab[bulk[i].sa_attr])) { + SA_ATTR_INFO(sa, hdl->sa_spill_tab, + SA_GET_HDR(hdl, SA_SPILL), + bulk[i].sa_attr, bulk[i], SA_SPILL, hdl); + if (tx && !(buftypes & SA_SPILL) && + bulk[i].sa_size == bulk[i].sa_length) { + dmu_buf_will_dirty(hdl->sa_spill, tx); + buftypes |= SA_SPILL; + } + } + } + if (error && error != ENOENT) { + return ((error == ECKSUM) ? EIO : error); + } + + switch (data_op) { + case SA_LOOKUP: + if (bulk[i].sa_addr == NULL) + return (SET_ERROR(ENOENT)); + if (bulk[i].sa_data) { + SA_COPY_DATA(bulk[i].sa_data_func, + bulk[i].sa_addr, bulk[i].sa_data, + bulk[i].sa_size); + } + continue; + + case SA_UPDATE: + /* existing rewrite of attr */ + if (bulk[i].sa_addr && + bulk[i].sa_size == bulk[i].sa_length) { + SA_COPY_DATA(bulk[i].sa_data_func, + bulk[i].sa_data, bulk[i].sa_addr, + bulk[i].sa_length); + continue; + } else if (bulk[i].sa_addr) { /* attr size change */ + error = sa_modify_attrs(hdl, bulk[i].sa_attr, + SA_REPLACE, bulk[i].sa_data_func, + bulk[i].sa_data, bulk[i].sa_length, tx); + } else { /* adding new attribute */ + error = sa_modify_attrs(hdl, bulk[i].sa_attr, + SA_ADD, bulk[i].sa_data_func, + bulk[i].sa_data, bulk[i].sa_length, tx); + } + if (error) + return (error); + break; + default: + break; + } + } + return (error); +} + +static sa_lot_t * +sa_add_layout_entry(objset_t *os, sa_attr_type_t *attrs, int attr_count, + uint64_t lot_num, uint64_t hash, boolean_t zapadd, dmu_tx_t *tx) +{ + sa_os_t *sa = os->os_sa; + sa_lot_t *tb, *findtb; + int i; + avl_index_t loc; + + ASSERT(MUTEX_HELD(&sa->sa_lock)); + tb = kmem_zalloc(sizeof (sa_lot_t), KM_SLEEP); + tb->lot_attr_count = attr_count; + tb->lot_attrs = kmem_alloc(sizeof (sa_attr_type_t) * attr_count, + KM_SLEEP); + bcopy(attrs, tb->lot_attrs, sizeof (sa_attr_type_t) * attr_count); + tb->lot_num = lot_num; + tb->lot_hash = hash; + tb->lot_instance = 0; + + if (zapadd) { + char attr_name[8]; + + if (sa->sa_layout_attr_obj == 0) { + sa->sa_layout_attr_obj = zap_create_link(os, + DMU_OT_SA_ATTR_LAYOUTS, + sa->sa_master_obj, SA_LAYOUTS, tx); + } + + (void) snprintf(attr_name, sizeof (attr_name), + "%d", (int)lot_num); + VERIFY(0 == zap_update(os, os->os_sa->sa_layout_attr_obj, + attr_name, 2, attr_count, attrs, tx)); + } + + list_create(&tb->lot_idx_tab, sizeof (sa_idx_tab_t), + offsetof(sa_idx_tab_t, sa_next)); + + for (i = 0; i != attr_count; i++) { + if (sa->sa_attr_table[tb->lot_attrs[i]].sa_length == 0) + tb->lot_var_sizes++; + } + + avl_add(&sa->sa_layout_num_tree, tb); + + /* verify we don't have a hash collision */ + if ((findtb = avl_find(&sa->sa_layout_hash_tree, tb, &loc)) != NULL) { + for (; findtb && findtb->lot_hash == hash; + findtb = AVL_NEXT(&sa->sa_layout_hash_tree, findtb)) { + if (findtb->lot_instance != tb->lot_instance) + break; + tb->lot_instance++; + } + } + avl_add(&sa->sa_layout_hash_tree, tb); + return (tb); +} + +static void +sa_find_layout(objset_t *os, uint64_t hash, sa_attr_type_t *attrs, + int count, dmu_tx_t *tx, sa_lot_t **lot) +{ + sa_lot_t *tb, tbsearch; + avl_index_t loc; + sa_os_t *sa = os->os_sa; + boolean_t found = B_FALSE; + + mutex_enter(&sa->sa_lock); + tbsearch.lot_hash = hash; + tbsearch.lot_instance = 0; + tb = avl_find(&sa->sa_layout_hash_tree, &tbsearch, &loc); + if (tb) { + for (; tb && tb->lot_hash == hash; + tb = AVL_NEXT(&sa->sa_layout_hash_tree, tb)) { + if (sa_layout_equal(tb, attrs, count) == 0) { + found = B_TRUE; + break; + } + } + } + if (!found) { + tb = sa_add_layout_entry(os, attrs, count, + avl_numnodes(&sa->sa_layout_num_tree), hash, B_TRUE, tx); + } + mutex_exit(&sa->sa_lock); + *lot = tb; +} + +static int +sa_resize_spill(sa_handle_t *hdl, uint32_t size, dmu_tx_t *tx) +{ + int error; + uint32_t blocksize; + + if (size == 0) { + blocksize = SPA_MINBLOCKSIZE; + } else if (size > SPA_OLD_MAXBLOCKSIZE) { + ASSERT(0); + return (SET_ERROR(EFBIG)); + } else { + blocksize = P2ROUNDUP_TYPED(size, SPA_MINBLOCKSIZE, uint32_t); + } + + error = dbuf_spill_set_blksz(hdl->sa_spill, blocksize, tx); + ASSERT(error == 0); + return (error); +} + +static void +sa_copy_data(sa_data_locator_t *func, void *datastart, void *target, int buflen) +{ + if (func == NULL) { + bcopy(datastart, target, buflen); + } else { + boolean_t start; + int bytes; + void *dataptr; + void *saptr = target; + uint32_t length; + + start = B_TRUE; + bytes = 0; + while (bytes < buflen) { + func(&dataptr, &length, buflen, start, datastart); + bcopy(dataptr, saptr, length); + saptr = (void *)((caddr_t)saptr + length); + bytes += length; + start = B_FALSE; + } + } +} + +/* + * Determine several different values pertaining to system attribute + * buffers. + * + * Return the size of the sa_hdr_phys_t header for the buffer. Each + * variable length attribute except the first contributes two bytes to + * the header size, which is then rounded up to an 8-byte boundary. + * + * The following output parameters are also computed. + * + * index - The index of the first attribute in attr_desc that will + * spill over. Only valid if will_spill is set. + * + * total - The total number of bytes of all system attributes described + * in attr_desc. + * + * will_spill - Set when spilling is necessary. It is only set when + * the buftype is SA_BONUS. + */ +static int +sa_find_sizes(sa_os_t *sa, sa_bulk_attr_t *attr_desc, int attr_count, + dmu_buf_t *db, sa_buf_type_t buftype, int full_space, int *index, + int *total, boolean_t *will_spill) +{ + int var_size_count = 0; + int i; + int hdrsize; + int extra_hdrsize; + + if (buftype == SA_BONUS && sa->sa_force_spill) { + *total = 0; + *index = 0; + *will_spill = B_TRUE; + return (0); + } + + *index = -1; + *total = 0; + *will_spill = B_FALSE; + + extra_hdrsize = 0; + hdrsize = (SA_BONUSTYPE_FROM_DB(db) == DMU_OT_ZNODE) ? 0 : + sizeof (sa_hdr_phys_t); + + ASSERT(IS_P2ALIGNED(full_space, 8)); + + for (i = 0; i != attr_count; i++) { + boolean_t is_var_sz, might_spill_here; + int tmp_hdrsize; + + *total = P2ROUNDUP(*total, 8); + *total += attr_desc[i].sa_length; + if (*will_spill) + continue; + + is_var_sz = (SA_REGISTERED_LEN(sa, attr_desc[i].sa_attr) == 0); + if (is_var_sz) + var_size_count++; + + /* + * Calculate what the SA header size would be if this + * attribute doesn't spill. + */ + tmp_hdrsize = hdrsize + ((is_var_sz && var_size_count > 1) ? + sizeof (uint16_t) : 0); + + /* + * Check whether this attribute spans into the space + * that would be used by the spill block pointer should + * a spill block be needed. + */ + might_spill_here = + buftype == SA_BONUS && *index == -1 && + (*total + P2ROUNDUP(tmp_hdrsize, 8)) > + (full_space - sizeof (blkptr_t)); + + if (is_var_sz && var_size_count > 1) { + if (buftype == SA_SPILL || + tmp_hdrsize + *total < full_space) { + /* + * Record the extra header size in case this + * increase needs to be reversed due to + * spill-over. + */ + hdrsize = tmp_hdrsize; + if (*index != -1 || might_spill_here) + extra_hdrsize += sizeof (uint16_t); + } else { + ASSERT(buftype == SA_BONUS); + if (*index == -1) + *index = i; + *will_spill = B_TRUE; + continue; + } + } + + /* + * Store index of where spill *could* occur. Then + * continue to count the remaining attribute sizes. The + * sum is used later for sizing bonus and spill buffer. + */ + if (might_spill_here) + *index = i; + + if ((*total + P2ROUNDUP(hdrsize, 8)) > full_space && + buftype == SA_BONUS) + *will_spill = B_TRUE; + } + + if (*will_spill) + hdrsize -= extra_hdrsize; + + hdrsize = P2ROUNDUP(hdrsize, 8); + return (hdrsize); +} + +#define BUF_SPACE_NEEDED(total, header) (total + header) + +/* + * Find layout that corresponds to ordering of attributes + * If not found a new layout number is created and added to + * persistent layout tables. + */ +static int +sa_build_layouts(sa_handle_t *hdl, sa_bulk_attr_t *attr_desc, int attr_count, + dmu_tx_t *tx) +{ + sa_os_t *sa = hdl->sa_os->os_sa; + uint64_t hash; + sa_buf_type_t buftype; + sa_hdr_phys_t *sahdr; + void *data_start; + sa_attr_type_t *attrs, *attrs_start; + int i, lot_count; + int dnodesize; + int spill_idx; + int hdrsize; + int spillhdrsize = 0; + int used; + dmu_object_type_t bonustype; + sa_lot_t *lot; + int len_idx; + int spill_used; + int bonuslen; + boolean_t spilling; + + dmu_buf_will_dirty(hdl->sa_bonus, tx); + bonustype = SA_BONUSTYPE_FROM_DB(hdl->sa_bonus); + dmu_object_dnsize_from_db(hdl->sa_bonus, &dnodesize); + bonuslen = DN_BONUS_SIZE(dnodesize); + + /* first determine bonus header size and sum of all attributes */ + hdrsize = sa_find_sizes(sa, attr_desc, attr_count, hdl->sa_bonus, + SA_BONUS, bonuslen, &spill_idx, &used, &spilling); + + if (used > SPA_OLD_MAXBLOCKSIZE) + return (SET_ERROR(EFBIG)); + + VERIFY0(dmu_set_bonus(hdl->sa_bonus, spilling ? + MIN(bonuslen - sizeof (blkptr_t), used + hdrsize) : + used + hdrsize, tx)); + + ASSERT((bonustype == DMU_OT_ZNODE && spilling == 0) || + bonustype == DMU_OT_SA); + + /* setup and size spill buffer when needed */ + if (spilling) { + boolean_t dummy; + + if (hdl->sa_spill == NULL) { + VERIFY(dmu_spill_hold_by_bonus(hdl->sa_bonus, NULL, + &hdl->sa_spill) == 0); + } + dmu_buf_will_dirty(hdl->sa_spill, tx); + + spillhdrsize = sa_find_sizes(sa, &attr_desc[spill_idx], + attr_count - spill_idx, hdl->sa_spill, SA_SPILL, + hdl->sa_spill->db_size, &i, &spill_used, &dummy); + + if (spill_used > SPA_OLD_MAXBLOCKSIZE) + return (SET_ERROR(EFBIG)); + + if (BUF_SPACE_NEEDED(spill_used, spillhdrsize) > + hdl->sa_spill->db_size) + VERIFY(0 == sa_resize_spill(hdl, + BUF_SPACE_NEEDED(spill_used, spillhdrsize), tx)); + } + + /* setup starting pointers to lay down data */ + data_start = (void *)((uintptr_t)hdl->sa_bonus->db_data + hdrsize); + sahdr = (sa_hdr_phys_t *)hdl->sa_bonus->db_data; + buftype = SA_BONUS; + + attrs_start = attrs = kmem_alloc(sizeof (sa_attr_type_t) * attr_count, + KM_SLEEP); + lot_count = 0; + + for (i = 0, len_idx = 0, hash = -1ULL; i != attr_count; i++) { + uint16_t length; + + ASSERT(IS_P2ALIGNED(data_start, 8)); + attrs[i] = attr_desc[i].sa_attr; + length = SA_REGISTERED_LEN(sa, attrs[i]); + if (length == 0) + length = attr_desc[i].sa_length; + + if (spilling && i == spill_idx) { /* switch to spill buffer */ + VERIFY(bonustype == DMU_OT_SA); + if (buftype == SA_BONUS && !sa->sa_force_spill) { + sa_find_layout(hdl->sa_os, hash, attrs_start, + lot_count, tx, &lot); + SA_SET_HDR(sahdr, lot->lot_num, hdrsize); + } + + buftype = SA_SPILL; + hash = -1ULL; + len_idx = 0; + + sahdr = (sa_hdr_phys_t *)hdl->sa_spill->db_data; + sahdr->sa_magic = SA_MAGIC; + data_start = (void *)((uintptr_t)sahdr + + spillhdrsize); + attrs_start = &attrs[i]; + lot_count = 0; + } + hash ^= SA_ATTR_HASH(attrs[i]); + attr_desc[i].sa_addr = data_start; + attr_desc[i].sa_size = length; + SA_COPY_DATA(attr_desc[i].sa_data_func, attr_desc[i].sa_data, + data_start, length); + if (sa->sa_attr_table[attrs[i]].sa_length == 0) { + sahdr->sa_lengths[len_idx++] = length; + } + data_start = (void *)P2ROUNDUP(((uintptr_t)data_start + + length), 8); + lot_count++; + } + + sa_find_layout(hdl->sa_os, hash, attrs_start, lot_count, tx, &lot); + + /* + * Verify that old znodes always have layout number 0. + * Must be DMU_OT_SA for arbitrary layouts + */ + VERIFY((bonustype == DMU_OT_ZNODE && lot->lot_num == 0) || + (bonustype == DMU_OT_SA && lot->lot_num > 1)); + + if (bonustype == DMU_OT_SA) { + SA_SET_HDR(sahdr, lot->lot_num, + buftype == SA_BONUS ? hdrsize : spillhdrsize); + } + + kmem_free(attrs, sizeof (sa_attr_type_t) * attr_count); + if (hdl->sa_bonus_tab) { + sa_idx_tab_rele(hdl->sa_os, hdl->sa_bonus_tab); + hdl->sa_bonus_tab = NULL; + } + if (!sa->sa_force_spill) + VERIFY(0 == sa_build_index(hdl, SA_BONUS)); + if (hdl->sa_spill) { + sa_idx_tab_rele(hdl->sa_os, hdl->sa_spill_tab); + if (!spilling) { + /* + * remove spill block that is no longer needed. + */ + dmu_buf_rele(hdl->sa_spill, NULL); + hdl->sa_spill = NULL; + hdl->sa_spill_tab = NULL; + VERIFY(0 == dmu_rm_spill(hdl->sa_os, + sa_handle_object(hdl), tx)); + } else { + VERIFY(0 == sa_build_index(hdl, SA_SPILL)); + } + } + + return (0); +} + +static void +sa_free_attr_table(sa_os_t *sa) +{ + int i; + + if (sa->sa_attr_table == NULL) + return; + + for (i = 0; i != sa->sa_num_attrs; i++) { + if (sa->sa_attr_table[i].sa_name) + kmem_free(sa->sa_attr_table[i].sa_name, + strlen(sa->sa_attr_table[i].sa_name) + 1); + } + + kmem_free(sa->sa_attr_table, + sizeof (sa_attr_table_t) * sa->sa_num_attrs); + + sa->sa_attr_table = NULL; +} + +static int +sa_attr_table_setup(objset_t *os, sa_attr_reg_t *reg_attrs, int count) +{ + sa_os_t *sa = os->os_sa; + uint64_t sa_attr_count = 0; + uint64_t sa_reg_count = 0; + int error = 0; + uint64_t attr_value; + sa_attr_table_t *tb; + zap_cursor_t zc; + zap_attribute_t za; + int registered_count = 0; + int i; + dmu_objset_type_t ostype = dmu_objset_type(os); + + sa->sa_user_table = + kmem_zalloc(count * sizeof (sa_attr_type_t), KM_SLEEP); + sa->sa_user_table_sz = count * sizeof (sa_attr_type_t); + + if (sa->sa_reg_attr_obj != 0) { + error = zap_count(os, sa->sa_reg_attr_obj, + &sa_attr_count); + + /* + * Make sure we retrieved a count and that it isn't zero + */ + if (error || (error == 0 && sa_attr_count == 0)) { + if (error == 0) + error = SET_ERROR(EINVAL); + goto bail; + } + sa_reg_count = sa_attr_count; + } + + if (ostype == DMU_OST_ZFS && sa_attr_count == 0) + sa_attr_count += sa_legacy_attr_count; + + /* Allocate attribute numbers for attributes that aren't registered */ + for (i = 0; i != count; i++) { + boolean_t found = B_FALSE; + int j; + + if (ostype == DMU_OST_ZFS) { + for (j = 0; j != sa_legacy_attr_count; j++) { + if (strcmp(reg_attrs[i].sa_name, + sa_legacy_attrs[j].sa_name) == 0) { + sa->sa_user_table[i] = + sa_legacy_attrs[j].sa_attr; + found = B_TRUE; + } + } + } + if (found) + continue; + + if (sa->sa_reg_attr_obj) + error = zap_lookup(os, sa->sa_reg_attr_obj, + reg_attrs[i].sa_name, 8, 1, &attr_value); + else + error = SET_ERROR(ENOENT); + switch (error) { + case ENOENT: + sa->sa_user_table[i] = (sa_attr_type_t)sa_attr_count; + sa_attr_count++; + break; + case 0: + sa->sa_user_table[i] = ATTR_NUM(attr_value); + break; + default: + goto bail; + } + } + + sa->sa_num_attrs = sa_attr_count; + tb = sa->sa_attr_table = + kmem_zalloc(sizeof (sa_attr_table_t) * sa_attr_count, KM_SLEEP); + + /* + * Attribute table is constructed from requested attribute list, + * previously foreign registered attributes, and also the legacy + * ZPL set of attributes. + */ + + if (sa->sa_reg_attr_obj) { + for (zap_cursor_init(&zc, os, sa->sa_reg_attr_obj); + (error = zap_cursor_retrieve(&zc, &za)) == 0; + zap_cursor_advance(&zc)) { + uint64_t value; + value = za.za_first_integer; + + registered_count++; + tb[ATTR_NUM(value)].sa_attr = ATTR_NUM(value); + tb[ATTR_NUM(value)].sa_length = ATTR_LENGTH(value); + tb[ATTR_NUM(value)].sa_byteswap = ATTR_BSWAP(value); + tb[ATTR_NUM(value)].sa_registered = B_TRUE; + + if (tb[ATTR_NUM(value)].sa_name) { + continue; + } + tb[ATTR_NUM(value)].sa_name = + kmem_zalloc(strlen(za.za_name) +1, KM_SLEEP); + (void) strlcpy(tb[ATTR_NUM(value)].sa_name, za.za_name, + strlen(za.za_name) +1); + } + zap_cursor_fini(&zc); + /* + * Make sure we processed the correct number of registered + * attributes + */ + if (registered_count != sa_reg_count) { + ASSERT(error != 0); + goto bail; + } + + } + + if (ostype == DMU_OST_ZFS) { + for (i = 0; i != sa_legacy_attr_count; i++) { + if (tb[i].sa_name) + continue; + tb[i].sa_attr = sa_legacy_attrs[i].sa_attr; + tb[i].sa_length = sa_legacy_attrs[i].sa_length; + tb[i].sa_byteswap = sa_legacy_attrs[i].sa_byteswap; + tb[i].sa_registered = B_FALSE; + tb[i].sa_name = + kmem_zalloc(strlen(sa_legacy_attrs[i].sa_name) +1, + KM_SLEEP); + (void) strlcpy(tb[i].sa_name, + sa_legacy_attrs[i].sa_name, + strlen(sa_legacy_attrs[i].sa_name) + 1); + } + } + + for (i = 0; i != count; i++) { + sa_attr_type_t attr_id; + + attr_id = sa->sa_user_table[i]; + if (tb[attr_id].sa_name) + continue; + + tb[attr_id].sa_length = reg_attrs[i].sa_length; + tb[attr_id].sa_byteswap = reg_attrs[i].sa_byteswap; + tb[attr_id].sa_attr = attr_id; + tb[attr_id].sa_name = + kmem_zalloc(strlen(reg_attrs[i].sa_name) + 1, KM_SLEEP); + (void) strlcpy(tb[attr_id].sa_name, reg_attrs[i].sa_name, + strlen(reg_attrs[i].sa_name) + 1); + } + + sa->sa_need_attr_registration = + (sa_attr_count != registered_count); + + return (0); +bail: + kmem_free(sa->sa_user_table, count * sizeof (sa_attr_type_t)); + sa->sa_user_table = NULL; + sa_free_attr_table(sa); + return ((error != 0) ? error : EINVAL); +} + +int +sa_setup(objset_t *os, uint64_t sa_obj, sa_attr_reg_t *reg_attrs, int count, + sa_attr_type_t **user_table) +{ + zap_cursor_t zc; + zap_attribute_t za; + sa_os_t *sa; + dmu_objset_type_t ostype = dmu_objset_type(os); + sa_attr_type_t *tb; + int error; + + mutex_enter(&os->os_user_ptr_lock); + if (os->os_sa) { + mutex_enter(&os->os_sa->sa_lock); + mutex_exit(&os->os_user_ptr_lock); + tb = os->os_sa->sa_user_table; + mutex_exit(&os->os_sa->sa_lock); + *user_table = tb; + return (0); + } + + sa = kmem_zalloc(sizeof (sa_os_t), KM_SLEEP); + mutex_init(&sa->sa_lock, NULL, MUTEX_DEFAULT, NULL); + sa->sa_master_obj = sa_obj; + + os->os_sa = sa; + mutex_enter(&sa->sa_lock); + mutex_exit(&os->os_user_ptr_lock); + avl_create(&sa->sa_layout_num_tree, layout_num_compare, + sizeof (sa_lot_t), offsetof(sa_lot_t, lot_num_node)); + avl_create(&sa->sa_layout_hash_tree, layout_hash_compare, + sizeof (sa_lot_t), offsetof(sa_lot_t, lot_hash_node)); + + if (sa_obj) { + error = zap_lookup(os, sa_obj, SA_LAYOUTS, + 8, 1, &sa->sa_layout_attr_obj); + if (error != 0 && error != ENOENT) + goto fail; + error = zap_lookup(os, sa_obj, SA_REGISTRY, + 8, 1, &sa->sa_reg_attr_obj); + if (error != 0 && error != ENOENT) + goto fail; + } + + if ((error = sa_attr_table_setup(os, reg_attrs, count)) != 0) + goto fail; + + if (sa->sa_layout_attr_obj != 0) { + uint64_t layout_count; + + error = zap_count(os, sa->sa_layout_attr_obj, + &layout_count); + + /* + * Layout number count should be > 0 + */ + if (error || (error == 0 && layout_count == 0)) { + if (error == 0) + error = SET_ERROR(EINVAL); + goto fail; + } + + for (zap_cursor_init(&zc, os, sa->sa_layout_attr_obj); + (error = zap_cursor_retrieve(&zc, &za)) == 0; + zap_cursor_advance(&zc)) { + sa_attr_type_t *lot_attrs; + uint64_t lot_num; + + lot_attrs = kmem_zalloc(sizeof (sa_attr_type_t) * + za.za_num_integers, KM_SLEEP); + + if ((error = (zap_lookup(os, sa->sa_layout_attr_obj, + za.za_name, 2, za.za_num_integers, + lot_attrs))) != 0) { + kmem_free(lot_attrs, sizeof (sa_attr_type_t) * + za.za_num_integers); + break; + } + VERIFY(ddi_strtoull(za.za_name, NULL, 10, + (unsigned long long *)&lot_num) == 0); + + (void) sa_add_layout_entry(os, lot_attrs, + za.za_num_integers, lot_num, + sa_layout_info_hash(lot_attrs, + za.za_num_integers), B_FALSE, NULL); + kmem_free(lot_attrs, sizeof (sa_attr_type_t) * + za.za_num_integers); + } + zap_cursor_fini(&zc); + + /* + * Make sure layout count matches number of entries added + * to AVL tree + */ + if (avl_numnodes(&sa->sa_layout_num_tree) != layout_count) { + ASSERT(error != 0); + goto fail; + } + } + + /* Add special layout number for old ZNODES */ + if (ostype == DMU_OST_ZFS) { + (void) sa_add_layout_entry(os, sa_legacy_zpl_layout, + sa_legacy_attr_count, 0, + sa_layout_info_hash(sa_legacy_zpl_layout, + sa_legacy_attr_count), B_FALSE, NULL); + + (void) sa_add_layout_entry(os, sa_dummy_zpl_layout, 0, 1, + 0, B_FALSE, NULL); + } + *user_table = os->os_sa->sa_user_table; + mutex_exit(&sa->sa_lock); + return (0); +fail: + os->os_sa = NULL; + sa_free_attr_table(sa); + if (sa->sa_user_table) + kmem_free(sa->sa_user_table, sa->sa_user_table_sz); + mutex_exit(&sa->sa_lock); + avl_destroy(&sa->sa_layout_hash_tree); + avl_destroy(&sa->sa_layout_num_tree); + mutex_destroy(&sa->sa_lock); + kmem_free(sa, sizeof (sa_os_t)); + return ((error == ECKSUM) ? EIO : error); +} + +void +sa_tear_down(objset_t *os) +{ + sa_os_t *sa = os->os_sa; + sa_lot_t *layout; + void *cookie; + + kmem_free(sa->sa_user_table, sa->sa_user_table_sz); + + /* Free up attr table */ + + sa_free_attr_table(sa); + + cookie = NULL; + while ((layout = + avl_destroy_nodes(&sa->sa_layout_hash_tree, &cookie))) { + sa_idx_tab_t *tab; + while ((tab = list_head(&layout->lot_idx_tab))) { + ASSERT(refcount_count(&tab->sa_refcount)); + sa_idx_tab_rele(os, tab); + } + } + + cookie = NULL; + while ((layout = avl_destroy_nodes(&sa->sa_layout_num_tree, &cookie))) { + kmem_free(layout->lot_attrs, + sizeof (sa_attr_type_t) * layout->lot_attr_count); + kmem_free(layout, sizeof (sa_lot_t)); + } + + avl_destroy(&sa->sa_layout_hash_tree); + avl_destroy(&sa->sa_layout_num_tree); + mutex_destroy(&sa->sa_lock); + + kmem_free(sa, sizeof (sa_os_t)); + os->os_sa = NULL; +} + +void +sa_build_idx_tab(void *hdr, void *attr_addr, sa_attr_type_t attr, + uint16_t length, int length_idx, boolean_t var_length, void *userp) +{ + sa_idx_tab_t *idx_tab = userp; + + if (var_length) { + ASSERT(idx_tab->sa_variable_lengths); + idx_tab->sa_variable_lengths[length_idx] = length; + } + TOC_ATTR_ENCODE(idx_tab->sa_idx_tab[attr], length_idx, + (uint32_t)((uintptr_t)attr_addr - (uintptr_t)hdr)); +} + +static void +sa_attr_iter(objset_t *os, sa_hdr_phys_t *hdr, dmu_object_type_t type, + sa_iterfunc_t func, sa_lot_t *tab, void *userp) +{ + void *data_start; + sa_lot_t *tb = tab; + sa_lot_t search; + avl_index_t loc; + sa_os_t *sa = os->os_sa; + int i; + uint16_t *length_start = NULL; + uint8_t length_idx = 0; + + if (tab == NULL) { + search.lot_num = SA_LAYOUT_NUM(hdr, type); + tb = avl_find(&sa->sa_layout_num_tree, &search, &loc); + ASSERT(tb); + } + + if (IS_SA_BONUSTYPE(type)) { + data_start = (void *)P2ROUNDUP(((uintptr_t)hdr + + offsetof(sa_hdr_phys_t, sa_lengths) + + (sizeof (uint16_t) * tb->lot_var_sizes)), 8); + length_start = hdr->sa_lengths; + } else { + data_start = hdr; + } + + for (i = 0; i != tb->lot_attr_count; i++) { + int attr_length, reg_length; + uint8_t idx_len; + + reg_length = sa->sa_attr_table[tb->lot_attrs[i]].sa_length; + if (reg_length) { + attr_length = reg_length; + idx_len = 0; + } else { + attr_length = length_start[length_idx]; + idx_len = length_idx++; + } + + func(hdr, data_start, tb->lot_attrs[i], attr_length, + idx_len, reg_length == 0 ? B_TRUE : B_FALSE, userp); + + data_start = (void *)P2ROUNDUP(((uintptr_t)data_start + + attr_length), 8); + } +} + +/*ARGSUSED*/ +void +sa_byteswap_cb(void *hdr, void *attr_addr, sa_attr_type_t attr, + uint16_t length, int length_idx, boolean_t variable_length, void *userp) +{ + sa_handle_t *hdl = userp; + sa_os_t *sa = hdl->sa_os->os_sa; + + sa_bswap_table[sa->sa_attr_table[attr].sa_byteswap](attr_addr, length); +} + +void +sa_byteswap(sa_handle_t *hdl, sa_buf_type_t buftype) +{ + sa_hdr_phys_t *sa_hdr_phys = SA_GET_HDR(hdl, buftype); + dmu_buf_impl_t *db; + int num_lengths = 1; + int i; + ASSERTV(sa_os_t *sa = hdl->sa_os->os_sa); + + ASSERT(MUTEX_HELD(&sa->sa_lock)); + if (sa_hdr_phys->sa_magic == SA_MAGIC) + return; + + db = SA_GET_DB(hdl, buftype); + + if (buftype == SA_SPILL) { + arc_release(db->db_buf, NULL); + arc_buf_thaw(db->db_buf); + } + + sa_hdr_phys->sa_magic = BSWAP_32(sa_hdr_phys->sa_magic); + sa_hdr_phys->sa_layout_info = BSWAP_16(sa_hdr_phys->sa_layout_info); + + /* + * Determine number of variable lengths in header + * The standard 8 byte header has one for free and a + * 16 byte header would have 4 + 1; + */ + if (SA_HDR_SIZE(sa_hdr_phys) > 8) + num_lengths += (SA_HDR_SIZE(sa_hdr_phys) - 8) >> 1; + for (i = 0; i != num_lengths; i++) + sa_hdr_phys->sa_lengths[i] = + BSWAP_16(sa_hdr_phys->sa_lengths[i]); + + sa_attr_iter(hdl->sa_os, sa_hdr_phys, DMU_OT_SA, + sa_byteswap_cb, NULL, hdl); + + if (buftype == SA_SPILL) + arc_buf_freeze(((dmu_buf_impl_t *)hdl->sa_spill)->db_buf); +} + +static int +sa_build_index(sa_handle_t *hdl, sa_buf_type_t buftype) +{ + sa_hdr_phys_t *sa_hdr_phys; + dmu_buf_impl_t *db = SA_GET_DB(hdl, buftype); + dmu_object_type_t bonustype = SA_BONUSTYPE_FROM_DB(db); + sa_os_t *sa = hdl->sa_os->os_sa; + sa_idx_tab_t *idx_tab; + + sa_hdr_phys = SA_GET_HDR(hdl, buftype); + + mutex_enter(&sa->sa_lock); + + /* Do we need to byteswap? */ + + /* only check if not old znode */ + if (IS_SA_BONUSTYPE(bonustype) && sa_hdr_phys->sa_magic != SA_MAGIC && + sa_hdr_phys->sa_magic != 0) { + VERIFY(BSWAP_32(sa_hdr_phys->sa_magic) == SA_MAGIC); + sa_byteswap(hdl, buftype); + } + + idx_tab = sa_find_idx_tab(hdl->sa_os, bonustype, sa_hdr_phys); + + if (buftype == SA_BONUS) + hdl->sa_bonus_tab = idx_tab; + else + hdl->sa_spill_tab = idx_tab; + + mutex_exit(&sa->sa_lock); + return (0); +} + +/*ARGSUSED*/ +static void +sa_evict_sync(void *dbu) +{ + panic("evicting sa dbuf\n"); +} + +static void +sa_idx_tab_rele(objset_t *os, void *arg) +{ + sa_os_t *sa = os->os_sa; + sa_idx_tab_t *idx_tab = arg; + + if (idx_tab == NULL) + return; + + mutex_enter(&sa->sa_lock); + if (refcount_remove(&idx_tab->sa_refcount, NULL) == 0) { + list_remove(&idx_tab->sa_layout->lot_idx_tab, idx_tab); + if (idx_tab->sa_variable_lengths) + kmem_free(idx_tab->sa_variable_lengths, + sizeof (uint16_t) * + idx_tab->sa_layout->lot_var_sizes); + refcount_destroy(&idx_tab->sa_refcount); + kmem_free(idx_tab->sa_idx_tab, + sizeof (uint32_t) * sa->sa_num_attrs); + kmem_free(idx_tab, sizeof (sa_idx_tab_t)); + } + mutex_exit(&sa->sa_lock); +} + +static void +sa_idx_tab_hold(objset_t *os, sa_idx_tab_t *idx_tab) +{ + ASSERTV(sa_os_t *sa = os->os_sa); + + ASSERT(MUTEX_HELD(&sa->sa_lock)); + (void) refcount_add(&idx_tab->sa_refcount, NULL); +} + +void +sa_spill_rele(sa_handle_t *hdl) +{ + mutex_enter(&hdl->sa_lock); + if (hdl->sa_spill) { + sa_idx_tab_rele(hdl->sa_os, hdl->sa_spill_tab); + dmu_buf_rele(hdl->sa_spill, NULL); + hdl->sa_spill = NULL; + hdl->sa_spill_tab = NULL; + } + mutex_exit(&hdl->sa_lock); +} + +void +sa_handle_destroy(sa_handle_t *hdl) +{ + dmu_buf_t *db = hdl->sa_bonus; + + mutex_enter(&hdl->sa_lock); + (void) dmu_buf_remove_user(db, &hdl->sa_dbu); + + if (hdl->sa_bonus_tab) + sa_idx_tab_rele(hdl->sa_os, hdl->sa_bonus_tab); + + if (hdl->sa_spill_tab) + sa_idx_tab_rele(hdl->sa_os, hdl->sa_spill_tab); + + dmu_buf_rele(hdl->sa_bonus, NULL); + + if (hdl->sa_spill) + dmu_buf_rele((dmu_buf_t *)hdl->sa_spill, NULL); + mutex_exit(&hdl->sa_lock); + + kmem_cache_free(sa_cache, hdl); +} + +int +sa_handle_get_from_db(objset_t *os, dmu_buf_t *db, void *userp, + sa_handle_type_t hdl_type, sa_handle_t **handlepp) +{ + int error = 0; + sa_handle_t *handle = NULL; +#ifdef ZFS_DEBUG + dmu_object_info_t doi; + + dmu_object_info_from_db(db, &doi); + ASSERT(doi.doi_bonus_type == DMU_OT_SA || + doi.doi_bonus_type == DMU_OT_ZNODE); +#endif + /* find handle, if it exists */ + /* if one doesn't exist then create a new one, and initialize it */ + + if (hdl_type == SA_HDL_SHARED) + handle = dmu_buf_get_user(db); + + if (handle == NULL) { + sa_handle_t *winner = NULL; + + handle = kmem_cache_alloc(sa_cache, KM_SLEEP); + handle->sa_dbu.dbu_evict_func_sync = NULL; + handle->sa_dbu.dbu_evict_func_async = NULL; + handle->sa_userp = userp; + handle->sa_bonus = db; + handle->sa_os = os; + handle->sa_spill = NULL; + handle->sa_bonus_tab = NULL; + handle->sa_spill_tab = NULL; + + error = sa_build_index(handle, SA_BONUS); + + if (hdl_type == SA_HDL_SHARED) { + dmu_buf_init_user(&handle->sa_dbu, sa_evict_sync, NULL, + NULL); + winner = dmu_buf_set_user_ie(db, &handle->sa_dbu); + } + + if (winner != NULL) { + kmem_cache_free(sa_cache, handle); + handle = winner; + } + } + *handlepp = handle; + + return (error); +} + +int +sa_handle_get(objset_t *objset, uint64_t objid, void *userp, + sa_handle_type_t hdl_type, sa_handle_t **handlepp) +{ + dmu_buf_t *db; + int error; + + if ((error = dmu_bonus_hold(objset, objid, NULL, &db))) + return (error); + + return (sa_handle_get_from_db(objset, db, userp, hdl_type, + handlepp)); +} + +int +sa_buf_hold(objset_t *objset, uint64_t obj_num, void *tag, dmu_buf_t **db) +{ + return (dmu_bonus_hold(objset, obj_num, tag, db)); +} + +void +sa_buf_rele(dmu_buf_t *db, void *tag) +{ + dmu_buf_rele(db, tag); +} + +int +sa_lookup_impl(sa_handle_t *hdl, sa_bulk_attr_t *bulk, int count) +{ + ASSERT(hdl); + ASSERT(MUTEX_HELD(&hdl->sa_lock)); + return (sa_attr_op(hdl, bulk, count, SA_LOOKUP, NULL)); +} + +int +sa_lookup(sa_handle_t *hdl, sa_attr_type_t attr, void *buf, uint32_t buflen) +{ + int error; + sa_bulk_attr_t bulk; + + VERIFY3U(buflen, <=, SA_ATTR_MAX_LEN); + + bulk.sa_attr = attr; + bulk.sa_data = buf; + bulk.sa_length = buflen; + bulk.sa_data_func = NULL; + + ASSERT(hdl); + mutex_enter(&hdl->sa_lock); + error = sa_lookup_impl(hdl, &bulk, 1); + mutex_exit(&hdl->sa_lock); + return (error); +} + +#ifdef _KERNEL +int +sa_lookup_uio(sa_handle_t *hdl, sa_attr_type_t attr, uio_t *uio) +{ + int error; + sa_bulk_attr_t bulk; + + bulk.sa_data = NULL; + bulk.sa_attr = attr; + bulk.sa_data_func = NULL; + + ASSERT(hdl); + + mutex_enter(&hdl->sa_lock); + if ((error = sa_attr_op(hdl, &bulk, 1, SA_LOOKUP, NULL)) == 0) { + error = uiomove((void *)bulk.sa_addr, MIN(bulk.sa_size, + uio->uio_resid), UIO_READ, uio); + } + mutex_exit(&hdl->sa_lock); + return (error); +} +#endif + +static sa_idx_tab_t * +sa_find_idx_tab(objset_t *os, dmu_object_type_t bonustype, sa_hdr_phys_t *hdr) +{ + sa_idx_tab_t *idx_tab; + sa_os_t *sa = os->os_sa; + sa_lot_t *tb, search; + avl_index_t loc; + + /* + * Deterimine layout number. If SA node and header == 0 then + * force the index table to the dummy "1" empty layout. + * + * The layout number would only be zero for a newly created file + * that has not added any attributes yet, or with crypto enabled which + * doesn't write any attributes to the bonus buffer. + */ + + search.lot_num = SA_LAYOUT_NUM(hdr, bonustype); + + tb = avl_find(&sa->sa_layout_num_tree, &search, &loc); + + /* Verify header size is consistent with layout information */ + ASSERT(tb); + ASSERT((IS_SA_BONUSTYPE(bonustype) && + SA_HDR_SIZE_MATCH_LAYOUT(hdr, tb)) || !IS_SA_BONUSTYPE(bonustype) || + (IS_SA_BONUSTYPE(bonustype) && hdr->sa_layout_info == 0)); + + /* + * See if any of the already existing TOC entries can be reused? + */ + + for (idx_tab = list_head(&tb->lot_idx_tab); idx_tab; + idx_tab = list_next(&tb->lot_idx_tab, idx_tab)) { + boolean_t valid_idx = B_TRUE; + int i; + + if (tb->lot_var_sizes != 0 && + idx_tab->sa_variable_lengths != NULL) { + for (i = 0; i != tb->lot_var_sizes; i++) { + if (hdr->sa_lengths[i] != + idx_tab->sa_variable_lengths[i]) { + valid_idx = B_FALSE; + break; + } + } + } + if (valid_idx) { + sa_idx_tab_hold(os, idx_tab); + return (idx_tab); + } + } + + /* No such luck, create a new entry */ + idx_tab = kmem_zalloc(sizeof (sa_idx_tab_t), KM_SLEEP); + idx_tab->sa_idx_tab = + kmem_zalloc(sizeof (uint32_t) * sa->sa_num_attrs, KM_SLEEP); + idx_tab->sa_layout = tb; + refcount_create(&idx_tab->sa_refcount); + if (tb->lot_var_sizes) + idx_tab->sa_variable_lengths = kmem_alloc(sizeof (uint16_t) * + tb->lot_var_sizes, KM_SLEEP); + + sa_attr_iter(os, hdr, bonustype, sa_build_idx_tab, + tb, idx_tab); + sa_idx_tab_hold(os, idx_tab); /* one hold for consumer */ + sa_idx_tab_hold(os, idx_tab); /* one for layout */ + list_insert_tail(&tb->lot_idx_tab, idx_tab); + return (idx_tab); +} + +void +sa_default_locator(void **dataptr, uint32_t *len, uint32_t total_len, + boolean_t start, void *userdata) +{ + ASSERT(start); + + *dataptr = userdata; + *len = total_len; +} + +static void +sa_attr_register_sync(sa_handle_t *hdl, dmu_tx_t *tx) +{ + uint64_t attr_value = 0; + sa_os_t *sa = hdl->sa_os->os_sa; + sa_attr_table_t *tb = sa->sa_attr_table; + int i; + + mutex_enter(&sa->sa_lock); + + if (!sa->sa_need_attr_registration || sa->sa_master_obj == 0) { + mutex_exit(&sa->sa_lock); + return; + } + + if (sa->sa_reg_attr_obj == 0) { + sa->sa_reg_attr_obj = zap_create_link(hdl->sa_os, + DMU_OT_SA_ATTR_REGISTRATION, + sa->sa_master_obj, SA_REGISTRY, tx); + } + for (i = 0; i != sa->sa_num_attrs; i++) { + if (sa->sa_attr_table[i].sa_registered) + continue; + ATTR_ENCODE(attr_value, tb[i].sa_attr, tb[i].sa_length, + tb[i].sa_byteswap); + VERIFY(0 == zap_update(hdl->sa_os, sa->sa_reg_attr_obj, + tb[i].sa_name, 8, 1, &attr_value, tx)); + tb[i].sa_registered = B_TRUE; + } + sa->sa_need_attr_registration = B_FALSE; + mutex_exit(&sa->sa_lock); +} + +/* + * Replace all attributes with attributes specified in template. + * If dnode had a spill buffer then those attributes will be + * also be replaced, possibly with just an empty spill block + * + * This interface is intended to only be used for bulk adding of + * attributes for a new file. It will also be used by the ZPL + * when converting and old formatted znode to native SA support. + */ +int +sa_replace_all_by_template_locked(sa_handle_t *hdl, sa_bulk_attr_t *attr_desc, + int attr_count, dmu_tx_t *tx) +{ + sa_os_t *sa = hdl->sa_os->os_sa; + + if (sa->sa_need_attr_registration) + sa_attr_register_sync(hdl, tx); + return (sa_build_layouts(hdl, attr_desc, attr_count, tx)); +} + +int +sa_replace_all_by_template(sa_handle_t *hdl, sa_bulk_attr_t *attr_desc, + int attr_count, dmu_tx_t *tx) +{ + int error; + + mutex_enter(&hdl->sa_lock); + error = sa_replace_all_by_template_locked(hdl, attr_desc, + attr_count, tx); + mutex_exit(&hdl->sa_lock); + return (error); +} + +/* + * Add/remove a single attribute or replace a variable-sized attribute value + * with a value of a different size, and then rewrite the entire set + * of attributes. + * Same-length attribute value replacement (including fixed-length attributes) + * is handled more efficiently by the upper layers. + */ +static int +sa_modify_attrs(sa_handle_t *hdl, sa_attr_type_t newattr, + sa_data_op_t action, sa_data_locator_t *locator, void *datastart, + uint16_t buflen, dmu_tx_t *tx) +{ + sa_os_t *sa = hdl->sa_os->os_sa; + dmu_buf_impl_t *db = (dmu_buf_impl_t *)hdl->sa_bonus; + dnode_t *dn; + sa_bulk_attr_t *attr_desc; + void *old_data[2]; + int bonus_attr_count = 0; + int bonus_data_size = 0; + int spill_data_size = 0; + int spill_attr_count = 0; + int error; + uint16_t length, reg_length; + int i, j, k, length_idx; + sa_hdr_phys_t *hdr; + sa_idx_tab_t *idx_tab; + int attr_count; + int count; + + ASSERT(MUTEX_HELD(&hdl->sa_lock)); + + /* First make of copy of the old data */ + + DB_DNODE_ENTER(db); + dn = DB_DNODE(db); + if (dn->dn_bonuslen != 0) { + bonus_data_size = hdl->sa_bonus->db_size; + old_data[0] = kmem_alloc(bonus_data_size, KM_SLEEP); + bcopy(hdl->sa_bonus->db_data, old_data[0], + hdl->sa_bonus->db_size); + bonus_attr_count = hdl->sa_bonus_tab->sa_layout->lot_attr_count; + } else { + old_data[0] = NULL; + } + DB_DNODE_EXIT(db); + + /* Bring spill buffer online if it isn't currently */ + + if ((error = sa_get_spill(hdl)) == 0) { + spill_data_size = hdl->sa_spill->db_size; + old_data[1] = vmem_alloc(spill_data_size, KM_SLEEP); + bcopy(hdl->sa_spill->db_data, old_data[1], + hdl->sa_spill->db_size); + spill_attr_count = + hdl->sa_spill_tab->sa_layout->lot_attr_count; + } else if (error && error != ENOENT) { + if (old_data[0]) + kmem_free(old_data[0], bonus_data_size); + return (error); + } else { + old_data[1] = NULL; + } + + /* build descriptor of all attributes */ + + attr_count = bonus_attr_count + spill_attr_count; + if (action == SA_ADD) + attr_count++; + else if (action == SA_REMOVE) + attr_count--; + + attr_desc = kmem_zalloc(sizeof (sa_bulk_attr_t) * attr_count, KM_SLEEP); + + /* + * loop through bonus and spill buffer if it exists, and + * build up new attr_descriptor to reset the attributes + */ + k = j = 0; + count = bonus_attr_count; + hdr = SA_GET_HDR(hdl, SA_BONUS); + idx_tab = SA_IDX_TAB_GET(hdl, SA_BONUS); + for (; k != 2; k++) { + /* + * Iterate over each attribute in layout. Fetch the + * size of variable-length attributes needing rewrite + * from sa_lengths[]. + */ + for (i = 0, length_idx = 0; i != count; i++) { + sa_attr_type_t attr; + + attr = idx_tab->sa_layout->lot_attrs[i]; + reg_length = SA_REGISTERED_LEN(sa, attr); + if (reg_length == 0) { + length = hdr->sa_lengths[length_idx]; + length_idx++; + } else { + length = reg_length; + } + if (attr == newattr) { + /* + * There is nothing to do for SA_REMOVE, + * so it is just skipped. + */ + if (action == SA_REMOVE) + continue; + + /* + * Duplicate attributes are not allowed, so the + * action can not be SA_ADD here. + */ + ASSERT3S(action, ==, SA_REPLACE); + + /* + * Only a variable-sized attribute can be + * replaced here, and its size must be changing. + */ + ASSERT3U(reg_length, ==, 0); + ASSERT3U(length, !=, buflen); + SA_ADD_BULK_ATTR(attr_desc, j, attr, + locator, datastart, buflen); + } else { + SA_ADD_BULK_ATTR(attr_desc, j, attr, + NULL, (void *) + (TOC_OFF(idx_tab->sa_idx_tab[attr]) + + (uintptr_t)old_data[k]), length); + } + } + if (k == 0 && hdl->sa_spill) { + hdr = SA_GET_HDR(hdl, SA_SPILL); + idx_tab = SA_IDX_TAB_GET(hdl, SA_SPILL); + count = spill_attr_count; + } else { + break; + } + } + if (action == SA_ADD) { + reg_length = SA_REGISTERED_LEN(sa, newattr); + IMPLY(reg_length != 0, reg_length == buflen); + SA_ADD_BULK_ATTR(attr_desc, j, newattr, locator, + datastart, buflen); + } + ASSERT3U(j, ==, attr_count); + + error = sa_build_layouts(hdl, attr_desc, attr_count, tx); + + if (old_data[0]) + kmem_free(old_data[0], bonus_data_size); + if (old_data[1]) + vmem_free(old_data[1], spill_data_size); + kmem_free(attr_desc, sizeof (sa_bulk_attr_t) * attr_count); + + return (error); +} + +static int +sa_bulk_update_impl(sa_handle_t *hdl, sa_bulk_attr_t *bulk, int count, + dmu_tx_t *tx) +{ + int error; + sa_os_t *sa = hdl->sa_os->os_sa; + dmu_object_type_t bonustype; + dmu_buf_t *saved_spill; + + ASSERT(hdl); + ASSERT(MUTEX_HELD(&hdl->sa_lock)); + + bonustype = SA_BONUSTYPE_FROM_DB(SA_GET_DB(hdl, SA_BONUS)); + saved_spill = hdl->sa_spill; + + /* sync out registration table if necessary */ + if (sa->sa_need_attr_registration) + sa_attr_register_sync(hdl, tx); + + error = sa_attr_op(hdl, bulk, count, SA_UPDATE, tx); + if (error == 0 && !IS_SA_BONUSTYPE(bonustype) && sa->sa_update_cb) + sa->sa_update_cb(hdl, tx); + + /* + * If saved_spill is NULL and current sa_spill is not NULL that + * means we increased the refcount of the spill buffer through + * sa_get_spill() or dmu_spill_hold_by_dnode(). Therefore we + * must release the hold before calling dmu_tx_commit() to avoid + * making a copy of this buffer in dbuf_sync_leaf() due to the + * reference count now being greater than 1. + */ + if (!saved_spill && hdl->sa_spill) { + if (hdl->sa_spill_tab) { + sa_idx_tab_rele(hdl->sa_os, hdl->sa_spill_tab); + hdl->sa_spill_tab = NULL; + } + + dmu_buf_rele((dmu_buf_t *)hdl->sa_spill, NULL); + hdl->sa_spill = NULL; + } + + return (error); +} + +/* + * update or add new attribute + */ +int +sa_update(sa_handle_t *hdl, sa_attr_type_t type, + void *buf, uint32_t buflen, dmu_tx_t *tx) +{ + int error; + sa_bulk_attr_t bulk; + + VERIFY3U(buflen, <=, SA_ATTR_MAX_LEN); + + bulk.sa_attr = type; + bulk.sa_data_func = NULL; + bulk.sa_length = buflen; + bulk.sa_data = buf; + + mutex_enter(&hdl->sa_lock); + error = sa_bulk_update_impl(hdl, &bulk, 1, tx); + mutex_exit(&hdl->sa_lock); + return (error); +} + +/* + * Return size of an attribute + */ + +int +sa_size(sa_handle_t *hdl, sa_attr_type_t attr, int *size) +{ + sa_bulk_attr_t bulk; + int error; + + bulk.sa_data = NULL; + bulk.sa_attr = attr; + bulk.sa_data_func = NULL; + + ASSERT(hdl); + mutex_enter(&hdl->sa_lock); + if ((error = sa_attr_op(hdl, &bulk, 1, SA_LOOKUP, NULL)) != 0) { + mutex_exit(&hdl->sa_lock); + return (error); + } + *size = bulk.sa_size; + + mutex_exit(&hdl->sa_lock); + return (0); +} + +int +sa_bulk_lookup_locked(sa_handle_t *hdl, sa_bulk_attr_t *attrs, int count) +{ + ASSERT(hdl); + ASSERT(MUTEX_HELD(&hdl->sa_lock)); + return (sa_lookup_impl(hdl, attrs, count)); +} + +int +sa_bulk_lookup(sa_handle_t *hdl, sa_bulk_attr_t *attrs, int count) +{ + int error; + + ASSERT(hdl); + mutex_enter(&hdl->sa_lock); + error = sa_bulk_lookup_locked(hdl, attrs, count); + mutex_exit(&hdl->sa_lock); + return (error); +} + +int +sa_bulk_update(sa_handle_t *hdl, sa_bulk_attr_t *attrs, int count, dmu_tx_t *tx) +{ + int error; + + ASSERT(hdl); + mutex_enter(&hdl->sa_lock); + error = sa_bulk_update_impl(hdl, attrs, count, tx); + mutex_exit(&hdl->sa_lock); + return (error); +} + +int +sa_remove(sa_handle_t *hdl, sa_attr_type_t attr, dmu_tx_t *tx) +{ + int error; + + mutex_enter(&hdl->sa_lock); + error = sa_modify_attrs(hdl, attr, SA_REMOVE, NULL, + NULL, 0, tx); + mutex_exit(&hdl->sa_lock); + return (error); +} + +void +sa_object_info(sa_handle_t *hdl, dmu_object_info_t *doi) +{ + dmu_object_info_from_db((dmu_buf_t *)hdl->sa_bonus, doi); +} + +void +sa_object_size(sa_handle_t *hdl, uint32_t *blksize, u_longlong_t *nblocks) +{ + dmu_object_size_from_db((dmu_buf_t *)hdl->sa_bonus, + blksize, nblocks); +} + +void +sa_set_userp(sa_handle_t *hdl, void *ptr) +{ + hdl->sa_userp = ptr; +} + +dmu_buf_t * +sa_get_db(sa_handle_t *hdl) +{ + return ((dmu_buf_t *)hdl->sa_bonus); +} + +void * +sa_get_userdata(sa_handle_t *hdl) +{ + return (hdl->sa_userp); +} + +void +sa_register_update_callback_locked(objset_t *os, sa_update_cb_t *func) +{ + ASSERT(MUTEX_HELD(&os->os_sa->sa_lock)); + os->os_sa->sa_update_cb = func; +} + +void +sa_register_update_callback(objset_t *os, sa_update_cb_t *func) +{ + + mutex_enter(&os->os_sa->sa_lock); + sa_register_update_callback_locked(os, func); + mutex_exit(&os->os_sa->sa_lock); +} + +uint64_t +sa_handle_object(sa_handle_t *hdl) +{ + return (hdl->sa_bonus->db_object); +} + +boolean_t +sa_enabled(objset_t *os) +{ + return (os->os_sa == NULL); +} + +int +sa_set_sa_object(objset_t *os, uint64_t sa_object) +{ + sa_os_t *sa = os->os_sa; + + if (sa->sa_master_obj) + return (1); + + sa->sa_master_obj = sa_object; + + return (0); +} + +int +sa_hdrsize(void *arg) +{ + sa_hdr_phys_t *hdr = arg; + + return (SA_HDR_SIZE(hdr)); +} + +void +sa_handle_lock(sa_handle_t *hdl) +{ + ASSERT(hdl); + mutex_enter(&hdl->sa_lock); +} + +void +sa_handle_unlock(sa_handle_t *hdl) +{ + ASSERT(hdl); + mutex_exit(&hdl->sa_lock); +} + +#ifdef _KERNEL +EXPORT_SYMBOL(sa_handle_get); +EXPORT_SYMBOL(sa_handle_get_from_db); +EXPORT_SYMBOL(sa_handle_destroy); +EXPORT_SYMBOL(sa_buf_hold); +EXPORT_SYMBOL(sa_buf_rele); +EXPORT_SYMBOL(sa_spill_rele); +EXPORT_SYMBOL(sa_lookup); +EXPORT_SYMBOL(sa_update); +EXPORT_SYMBOL(sa_remove); +EXPORT_SYMBOL(sa_bulk_lookup); +EXPORT_SYMBOL(sa_bulk_lookup_locked); +EXPORT_SYMBOL(sa_bulk_update); +EXPORT_SYMBOL(sa_size); +EXPORT_SYMBOL(sa_object_info); +EXPORT_SYMBOL(sa_object_size); +EXPORT_SYMBOL(sa_get_userdata); +EXPORT_SYMBOL(sa_set_userp); +EXPORT_SYMBOL(sa_get_db); +EXPORT_SYMBOL(sa_handle_object); +EXPORT_SYMBOL(sa_register_update_callback); +EXPORT_SYMBOL(sa_setup); +EXPORT_SYMBOL(sa_replace_all_by_template); +EXPORT_SYMBOL(sa_replace_all_by_template_locked); +EXPORT_SYMBOL(sa_enabled); +EXPORT_SYMBOL(sa_cache_init); +EXPORT_SYMBOL(sa_cache_fini); +EXPORT_SYMBOL(sa_set_sa_object); +EXPORT_SYMBOL(sa_hdrsize); +EXPORT_SYMBOL(sa_handle_lock); +EXPORT_SYMBOL(sa_handle_unlock); +EXPORT_SYMBOL(sa_lookup_uio); +#endif /* _KERNEL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/sha256.c +++ linux-aws-4.15.0/zfs/module/zfs/sha256.c @@ -0,0 +1,91 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2016 by Delphix. All rights reserved. + */ +#include +#include +#include +#include + +static int +sha_incremental(void *buf, size_t size, void *arg) +{ + SHA2_CTX *ctx = arg; + SHA2Update(ctx, buf, size); + return (0); +} + +/*ARGSUSED*/ +void +abd_checksum_SHA256(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + SHA2_CTX ctx; + zio_cksum_t tmp; + + SHA2Init(SHA256, &ctx); + (void) abd_iterate_func(abd, 0, size, sha_incremental, &ctx); + SHA2Final(&tmp, &ctx); + + /* + * A prior implementation of this function had a + * private SHA256 implementation always wrote things out in + * Big Endian and there wasn't a byteswap variant of it. + * To preserve on disk compatibility we need to force that + * behavior. + */ + zcp->zc_word[0] = BE_64(tmp.zc_word[0]); + zcp->zc_word[1] = BE_64(tmp.zc_word[1]); + zcp->zc_word[2] = BE_64(tmp.zc_word[2]); + zcp->zc_word[3] = BE_64(tmp.zc_word[3]); +} + +/*ARGSUSED*/ +void +abd_checksum_SHA512_native(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + SHA2_CTX ctx; + + SHA2Init(SHA512_256, &ctx); + (void) abd_iterate_func(abd, 0, size, sha_incremental, &ctx); + SHA2Final(zcp, &ctx); +} + +/*ARGSUSED*/ +void +abd_checksum_SHA512_byteswap(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + zio_cksum_t tmp; + + abd_checksum_SHA512_native(abd, size, ctx_template, &tmp); + zcp->zc_word[0] = BSWAP_64(tmp.zc_word[0]); + zcp->zc_word[1] = BSWAP_64(tmp.zc_word[1]); + zcp->zc_word[2] = BSWAP_64(tmp.zc_word[2]); + zcp->zc_word[3] = BSWAP_64(tmp.zc_word[3]); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/skein_zfs.c +++ linux-aws-4.15.0/zfs/module/zfs/skein_zfs.c @@ -0,0 +1,101 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2016 by Delphix. All rights reserved. + */ +#include +#include +#include + +#include + +static int +skein_incremental(void *buf, size_t size, void *arg) +{ + Skein_512_Ctxt_t *ctx = arg; + (void) Skein_512_Update(ctx, buf, size); + return (0); +} +/* + * Computes a native 256-bit skein MAC checksum. Please note that this + * function requires the presence of a ctx_template that should be allocated + * using abd_checksum_skein_tmpl_init. + */ +/*ARGSUSED*/ +void +abd_checksum_skein_native(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + Skein_512_Ctxt_t ctx; + + ASSERT(ctx_template != NULL); + bcopy(ctx_template, &ctx, sizeof (ctx)); + (void) abd_iterate_func(abd, 0, size, skein_incremental, &ctx); + (void) Skein_512_Final(&ctx, (uint8_t *)zcp); + bzero(&ctx, sizeof (ctx)); +} + +/* + * Byteswapped version of abd_checksum_skein_native. This just invokes + * the native checksum function and byteswaps the resulting checksum (since + * skein is internally endian-insensitive). + */ +void +abd_checksum_skein_byteswap(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + zio_cksum_t tmp; + + abd_checksum_skein_native(abd, size, ctx_template, &tmp); + zcp->zc_word[0] = BSWAP_64(tmp.zc_word[0]); + zcp->zc_word[1] = BSWAP_64(tmp.zc_word[1]); + zcp->zc_word[2] = BSWAP_64(tmp.zc_word[2]); + zcp->zc_word[3] = BSWAP_64(tmp.zc_word[3]); +} + +/* + * Allocates a skein MAC template suitable for using in skein MAC checksum + * computations and returns a pointer to it. + */ +void * +abd_checksum_skein_tmpl_init(const zio_cksum_salt_t *salt) +{ + Skein_512_Ctxt_t *ctx; + + ctx = kmem_zalloc(sizeof (*ctx), KM_SLEEP); + (void) Skein_512_InitExt(ctx, sizeof (zio_cksum_t) * 8, 0, + salt->zcs_bytes, sizeof (salt->zcs_bytes)); + return (ctx); +} + +/* + * Frees a skein context template previously allocated using + * zio_checksum_skein_tmpl_init. + */ +void +abd_checksum_skein_tmpl_free(void *ctx_template) +{ + Skein_512_Ctxt_t *ctx = ctx_template; + + bzero(ctx, sizeof (*ctx)); + kmem_free(ctx, sizeof (*ctx)); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/spa.c +++ linux-aws-4.15.0/zfs/module/zfs/spa.c @@ -0,0 +1,7306 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2015, Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2013, 2014, Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2017 Datto Inc. + * Copyright 2017 Joyent, Inc. + */ + +/* + * SPA: Storage Pool Allocator + * + * This file contains all the routines used when modifying on-disk SPA state. + * This includes opening, importing, destroying, exporting a pool, and syncing a + * pool. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#endif /* _KERNEL */ + +#include "zfs_prop.h" +#include "zfs_comutil.h" + +/* + * The interval, in seconds, at which failed configuration cache file writes + * should be retried. + */ +static int zfs_ccw_retry_interval = 300; + +typedef enum zti_modes { + ZTI_MODE_FIXED, /* value is # of threads (min 1) */ + ZTI_MODE_BATCH, /* cpu-intensive; value is ignored */ + ZTI_MODE_NULL, /* don't create a taskq */ + ZTI_NMODES +} zti_modes_t; + +#define ZTI_P(n, q) { ZTI_MODE_FIXED, (n), (q) } +#define ZTI_PCT(n) { ZTI_MODE_ONLINE_PERCENT, (n), 1 } +#define ZTI_BATCH { ZTI_MODE_BATCH, 0, 1 } +#define ZTI_NULL { ZTI_MODE_NULL, 0, 0 } + +#define ZTI_N(n) ZTI_P(n, 1) +#define ZTI_ONE ZTI_N(1) + +typedef struct zio_taskq_info { + zti_modes_t zti_mode; + uint_t zti_value; + uint_t zti_count; +} zio_taskq_info_t; + +static const char *const zio_taskq_types[ZIO_TASKQ_TYPES] = { + "iss", "iss_h", "int", "int_h" +}; + +/* + * This table defines the taskq settings for each ZFS I/O type. When + * initializing a pool, we use this table to create an appropriately sized + * taskq. Some operations are low volume and therefore have a small, static + * number of threads assigned to their taskqs using the ZTI_N(#) or ZTI_ONE + * macros. Other operations process a large amount of data; the ZTI_BATCH + * macro causes us to create a taskq oriented for throughput. Some operations + * are so high frequency and short-lived that the taskq itself can become a a + * point of lock contention. The ZTI_P(#, #) macro indicates that we need an + * additional degree of parallelism specified by the number of threads per- + * taskq and the number of taskqs; when dispatching an event in this case, the + * particular taskq is chosen at random. + * + * The different taskq priorities are to handle the different contexts (issue + * and interrupt) and then to reserve threads for ZIO_PRIORITY_NOW I/Os that + * need to be handled with minimum delay. + */ +const zio_taskq_info_t zio_taskqs[ZIO_TYPES][ZIO_TASKQ_TYPES] = { + /* ISSUE ISSUE_HIGH INTR INTR_HIGH */ + { ZTI_ONE, ZTI_NULL, ZTI_ONE, ZTI_NULL }, /* NULL */ + { ZTI_N(8), ZTI_NULL, ZTI_P(12, 8), ZTI_NULL }, /* READ */ + { ZTI_BATCH, ZTI_N(5), ZTI_P(12, 8), ZTI_N(5) }, /* WRITE */ + { ZTI_P(12, 8), ZTI_NULL, ZTI_ONE, ZTI_NULL }, /* FREE */ + { ZTI_ONE, ZTI_NULL, ZTI_ONE, ZTI_NULL }, /* CLAIM */ + { ZTI_ONE, ZTI_NULL, ZTI_ONE, ZTI_NULL }, /* IOCTL */ +}; + +static sysevent_t *spa_event_create(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl, + const char *name); +static void spa_event_post(sysevent_t *ev); +static void spa_sync_version(void *arg, dmu_tx_t *tx); +static void spa_sync_props(void *arg, dmu_tx_t *tx); +static boolean_t spa_has_active_shared_spare(spa_t *spa); +static inline int spa_load_impl(spa_t *spa, uint64_t, nvlist_t *config, + spa_load_state_t state, spa_import_type_t type, boolean_t mosconfig, + char **ereport); +static void spa_vdev_resilver_done(spa_t *spa); + +uint_t zio_taskq_batch_pct = 75; /* 1 thread per cpu in pset */ +id_t zio_taskq_psrset_bind = PS_NONE; +boolean_t zio_taskq_sysdc = B_TRUE; /* use SDC scheduling class */ +uint_t zio_taskq_basedc = 80; /* base duty cycle */ + +boolean_t spa_create_process = B_TRUE; /* no process ==> no sysdc */ + +/* + * This (illegal) pool name is used when temporarily importing a spa_t in order + * to get the vdev stats associated with the imported devices. + */ +#define TRYIMPORT_NAME "$import" + +/* + * ========================================================================== + * SPA properties routines + * ========================================================================== + */ + +/* + * Add a (source=src, propname=propval) list to an nvlist. + */ +static void +spa_prop_add_list(nvlist_t *nvl, zpool_prop_t prop, char *strval, + uint64_t intval, zprop_source_t src) +{ + const char *propname = zpool_prop_to_name(prop); + nvlist_t *propval; + + VERIFY(nvlist_alloc(&propval, NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_uint64(propval, ZPROP_SOURCE, src) == 0); + + if (strval != NULL) + VERIFY(nvlist_add_string(propval, ZPROP_VALUE, strval) == 0); + else + VERIFY(nvlist_add_uint64(propval, ZPROP_VALUE, intval) == 0); + + VERIFY(nvlist_add_nvlist(nvl, propname, propval) == 0); + nvlist_free(propval); +} + +/* + * Get property values from the spa configuration. + */ +static void +spa_prop_get_config(spa_t *spa, nvlist_t **nvp) +{ + vdev_t *rvd = spa->spa_root_vdev; + dsl_pool_t *pool = spa->spa_dsl_pool; + uint64_t size, alloc, cap, version; + const zprop_source_t src = ZPROP_SRC_NONE; + spa_config_dirent_t *dp; + metaslab_class_t *mc = spa_normal_class(spa); + + ASSERT(MUTEX_HELD(&spa->spa_props_lock)); + + if (rvd != NULL) { + alloc = metaslab_class_get_alloc(spa_normal_class(spa)); + size = metaslab_class_get_space(spa_normal_class(spa)); + spa_prop_add_list(*nvp, ZPOOL_PROP_NAME, spa_name(spa), 0, src); + spa_prop_add_list(*nvp, ZPOOL_PROP_SIZE, NULL, size, src); + spa_prop_add_list(*nvp, ZPOOL_PROP_ALLOCATED, NULL, alloc, src); + spa_prop_add_list(*nvp, ZPOOL_PROP_FREE, NULL, + size - alloc, src); + + spa_prop_add_list(*nvp, ZPOOL_PROP_FRAGMENTATION, NULL, + metaslab_class_fragmentation(mc), src); + spa_prop_add_list(*nvp, ZPOOL_PROP_EXPANDSZ, NULL, + metaslab_class_expandable_space(mc), src); + spa_prop_add_list(*nvp, ZPOOL_PROP_READONLY, NULL, + (spa_mode(spa) == FREAD), src); + + cap = (size == 0) ? 0 : (alloc * 100 / size); + spa_prop_add_list(*nvp, ZPOOL_PROP_CAPACITY, NULL, cap, src); + + spa_prop_add_list(*nvp, ZPOOL_PROP_DEDUPRATIO, NULL, + ddt_get_pool_dedup_ratio(spa), src); + + spa_prop_add_list(*nvp, ZPOOL_PROP_HEALTH, NULL, + rvd->vdev_state, src); + + version = spa_version(spa); + if (version == zpool_prop_default_numeric(ZPOOL_PROP_VERSION)) { + spa_prop_add_list(*nvp, ZPOOL_PROP_VERSION, NULL, + version, ZPROP_SRC_DEFAULT); + } else { + spa_prop_add_list(*nvp, ZPOOL_PROP_VERSION, NULL, + version, ZPROP_SRC_LOCAL); + } + } + + if (pool != NULL) { + /* + * The $FREE directory was introduced in SPA_VERSION_DEADLISTS, + * when opening pools before this version freedir will be NULL. + */ + if (pool->dp_free_dir != NULL) { + spa_prop_add_list(*nvp, ZPOOL_PROP_FREEING, NULL, + dsl_dir_phys(pool->dp_free_dir)->dd_used_bytes, + src); + } else { + spa_prop_add_list(*nvp, ZPOOL_PROP_FREEING, + NULL, 0, src); + } + + if (pool->dp_leak_dir != NULL) { + spa_prop_add_list(*nvp, ZPOOL_PROP_LEAKED, NULL, + dsl_dir_phys(pool->dp_leak_dir)->dd_used_bytes, + src); + } else { + spa_prop_add_list(*nvp, ZPOOL_PROP_LEAKED, + NULL, 0, src); + } + } + + spa_prop_add_list(*nvp, ZPOOL_PROP_GUID, NULL, spa_guid(spa), src); + + if (spa->spa_comment != NULL) { + spa_prop_add_list(*nvp, ZPOOL_PROP_COMMENT, spa->spa_comment, + 0, ZPROP_SRC_LOCAL); + } + + if (spa->spa_root != NULL) + spa_prop_add_list(*nvp, ZPOOL_PROP_ALTROOT, spa->spa_root, + 0, ZPROP_SRC_LOCAL); + + if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_BLOCKS)) { + spa_prop_add_list(*nvp, ZPOOL_PROP_MAXBLOCKSIZE, NULL, + MIN(zfs_max_recordsize, SPA_MAXBLOCKSIZE), ZPROP_SRC_NONE); + } else { + spa_prop_add_list(*nvp, ZPOOL_PROP_MAXBLOCKSIZE, NULL, + SPA_OLD_MAXBLOCKSIZE, ZPROP_SRC_NONE); + } + + if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_DNODE)) { + spa_prop_add_list(*nvp, ZPOOL_PROP_MAXDNODESIZE, NULL, + DNODE_MAX_SIZE, ZPROP_SRC_NONE); + } else { + spa_prop_add_list(*nvp, ZPOOL_PROP_MAXDNODESIZE, NULL, + DNODE_MIN_SIZE, ZPROP_SRC_NONE); + } + + if ((dp = list_head(&spa->spa_config_list)) != NULL) { + if (dp->scd_path == NULL) { + spa_prop_add_list(*nvp, ZPOOL_PROP_CACHEFILE, + "none", 0, ZPROP_SRC_LOCAL); + } else if (strcmp(dp->scd_path, spa_config_path) != 0) { + spa_prop_add_list(*nvp, ZPOOL_PROP_CACHEFILE, + dp->scd_path, 0, ZPROP_SRC_LOCAL); + } + } +} + +/* + * Get zpool property values. + */ +int +spa_prop_get(spa_t *spa, nvlist_t **nvp) +{ + objset_t *mos = spa->spa_meta_objset; + zap_cursor_t zc; + zap_attribute_t za; + int err; + + err = nvlist_alloc(nvp, NV_UNIQUE_NAME, KM_SLEEP); + if (err) + return (err); + + mutex_enter(&spa->spa_props_lock); + + /* + * Get properties from the spa config. + */ + spa_prop_get_config(spa, nvp); + + /* If no pool property object, no more prop to get. */ + if (mos == NULL || spa->spa_pool_props_object == 0) { + mutex_exit(&spa->spa_props_lock); + goto out; + } + + /* + * Get properties from the MOS pool property object. + */ + for (zap_cursor_init(&zc, mos, spa->spa_pool_props_object); + (err = zap_cursor_retrieve(&zc, &za)) == 0; + zap_cursor_advance(&zc)) { + uint64_t intval = 0; + char *strval = NULL; + zprop_source_t src = ZPROP_SRC_DEFAULT; + zpool_prop_t prop; + + if ((prop = zpool_name_to_prop(za.za_name)) == ZPROP_INVAL) + continue; + + switch (za.za_integer_length) { + case 8: + /* integer property */ + if (za.za_first_integer != + zpool_prop_default_numeric(prop)) + src = ZPROP_SRC_LOCAL; + + if (prop == ZPOOL_PROP_BOOTFS) { + dsl_pool_t *dp; + dsl_dataset_t *ds = NULL; + + dp = spa_get_dsl(spa); + dsl_pool_config_enter(dp, FTAG); + if ((err = dsl_dataset_hold_obj(dp, + za.za_first_integer, FTAG, &ds))) { + dsl_pool_config_exit(dp, FTAG); + break; + } + + strval = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, + KM_SLEEP); + dsl_dataset_name(ds, strval); + dsl_dataset_rele(ds, FTAG); + dsl_pool_config_exit(dp, FTAG); + } else { + strval = NULL; + intval = za.za_first_integer; + } + + spa_prop_add_list(*nvp, prop, strval, intval, src); + + if (strval != NULL) + kmem_free(strval, ZFS_MAX_DATASET_NAME_LEN); + + break; + + case 1: + /* string property */ + strval = kmem_alloc(za.za_num_integers, KM_SLEEP); + err = zap_lookup(mos, spa->spa_pool_props_object, + za.za_name, 1, za.za_num_integers, strval); + if (err) { + kmem_free(strval, za.za_num_integers); + break; + } + spa_prop_add_list(*nvp, prop, strval, 0, src); + kmem_free(strval, za.za_num_integers); + break; + + default: + break; + } + } + zap_cursor_fini(&zc); + mutex_exit(&spa->spa_props_lock); +out: + if (err && err != ENOENT) { + nvlist_free(*nvp); + *nvp = NULL; + return (err); + } + + return (0); +} + +/* + * Validate the given pool properties nvlist and modify the list + * for the property values to be set. + */ +static int +spa_prop_validate(spa_t *spa, nvlist_t *props) +{ + nvpair_t *elem; + int error = 0, reset_bootfs = 0; + uint64_t objnum = 0; + boolean_t has_feature = B_FALSE; + + elem = NULL; + while ((elem = nvlist_next_nvpair(props, elem)) != NULL) { + uint64_t intval; + char *strval, *slash, *check, *fname; + const char *propname = nvpair_name(elem); + zpool_prop_t prop = zpool_name_to_prop(propname); + + switch ((int)prop) { + case ZPROP_INVAL: + if (!zpool_prop_feature(propname)) { + error = SET_ERROR(EINVAL); + break; + } + + /* + * Sanitize the input. + */ + if (nvpair_type(elem) != DATA_TYPE_UINT64) { + error = SET_ERROR(EINVAL); + break; + } + + if (nvpair_value_uint64(elem, &intval) != 0) { + error = SET_ERROR(EINVAL); + break; + } + + if (intval != 0) { + error = SET_ERROR(EINVAL); + break; + } + + fname = strchr(propname, '@') + 1; + if (zfeature_lookup_name(fname, NULL) != 0) { + error = SET_ERROR(EINVAL); + break; + } + + has_feature = B_TRUE; + break; + + case ZPOOL_PROP_VERSION: + error = nvpair_value_uint64(elem, &intval); + if (!error && + (intval < spa_version(spa) || + intval > SPA_VERSION_BEFORE_FEATURES || + has_feature)) + error = SET_ERROR(EINVAL); + break; + + case ZPOOL_PROP_DELEGATION: + case ZPOOL_PROP_AUTOREPLACE: + case ZPOOL_PROP_LISTSNAPS: + case ZPOOL_PROP_AUTOEXPAND: + error = nvpair_value_uint64(elem, &intval); + if (!error && intval > 1) + error = SET_ERROR(EINVAL); + break; + + case ZPOOL_PROP_MULTIHOST: + error = nvpair_value_uint64(elem, &intval); + if (!error && intval > 1) + error = SET_ERROR(EINVAL); + + if (!error && !spa_get_hostid()) + error = SET_ERROR(ENOTSUP); + + break; + + case ZPOOL_PROP_BOOTFS: + /* + * If the pool version is less than SPA_VERSION_BOOTFS, + * or the pool is still being created (version == 0), + * the bootfs property cannot be set. + */ + if (spa_version(spa) < SPA_VERSION_BOOTFS) { + error = SET_ERROR(ENOTSUP); + break; + } + + /* + * Make sure the vdev config is bootable + */ + if (!vdev_is_bootable(spa->spa_root_vdev)) { + error = SET_ERROR(ENOTSUP); + break; + } + + reset_bootfs = 1; + + error = nvpair_value_string(elem, &strval); + + if (!error) { + objset_t *os; + uint64_t propval; + + if (strval == NULL || strval[0] == '\0') { + objnum = zpool_prop_default_numeric( + ZPOOL_PROP_BOOTFS); + break; + } + + error = dmu_objset_hold(strval, FTAG, &os); + if (error) + break; + + /* + * Must be ZPL, and its property settings + * must be supported by GRUB (compression + * is not gzip, and large blocks or large + * dnodes are not used). + */ + + if (dmu_objset_type(os) != DMU_OST_ZFS) { + error = SET_ERROR(ENOTSUP); + } else if ((error = + dsl_prop_get_int_ds(dmu_objset_ds(os), + zfs_prop_to_name(ZFS_PROP_COMPRESSION), + &propval)) == 0 && + !BOOTFS_COMPRESS_VALID(propval)) { + error = SET_ERROR(ENOTSUP); + } else if ((error = + dsl_prop_get_int_ds(dmu_objset_ds(os), + zfs_prop_to_name(ZFS_PROP_DNODESIZE), + &propval)) == 0 && + propval != ZFS_DNSIZE_LEGACY) { + error = SET_ERROR(ENOTSUP); + } else { + objnum = dmu_objset_id(os); + } + dmu_objset_rele(os, FTAG); + } + break; + + case ZPOOL_PROP_FAILUREMODE: + error = nvpair_value_uint64(elem, &intval); + if (!error && intval > ZIO_FAILURE_MODE_PANIC) + error = SET_ERROR(EINVAL); + + /* + * This is a special case which only occurs when + * the pool has completely failed. This allows + * the user to change the in-core failmode property + * without syncing it out to disk (I/Os might + * currently be blocked). We do this by returning + * EIO to the caller (spa_prop_set) to trick it + * into thinking we encountered a property validation + * error. + */ + if (!error && spa_suspended(spa)) { + spa->spa_failmode = intval; + error = SET_ERROR(EIO); + } + break; + + case ZPOOL_PROP_CACHEFILE: + if ((error = nvpair_value_string(elem, &strval)) != 0) + break; + + if (strval[0] == '\0') + break; + + if (strcmp(strval, "none") == 0) + break; + + if (strval[0] != '/') { + error = SET_ERROR(EINVAL); + break; + } + + slash = strrchr(strval, '/'); + ASSERT(slash != NULL); + + if (slash[1] == '\0' || strcmp(slash, "/.") == 0 || + strcmp(slash, "/..") == 0) + error = SET_ERROR(EINVAL); + break; + + case ZPOOL_PROP_COMMENT: + if ((error = nvpair_value_string(elem, &strval)) != 0) + break; + for (check = strval; *check != '\0'; check++) { + if (!isprint(*check)) { + error = SET_ERROR(EINVAL); + break; + } + } + if (strlen(strval) > ZPROP_MAX_COMMENT) + error = SET_ERROR(E2BIG); + break; + + case ZPOOL_PROP_DEDUPDITTO: + if (spa_version(spa) < SPA_VERSION_DEDUP) + error = SET_ERROR(ENOTSUP); + else + error = nvpair_value_uint64(elem, &intval); + if (error == 0 && + intval != 0 && intval < ZIO_DEDUPDITTO_MIN) + error = SET_ERROR(EINVAL); + break; + + default: + break; + } + + if (error) + break; + } + + if (!error && reset_bootfs) { + error = nvlist_remove(props, + zpool_prop_to_name(ZPOOL_PROP_BOOTFS), DATA_TYPE_STRING); + + if (!error) { + error = nvlist_add_uint64(props, + zpool_prop_to_name(ZPOOL_PROP_BOOTFS), objnum); + } + } + + return (error); +} + +void +spa_configfile_set(spa_t *spa, nvlist_t *nvp, boolean_t need_sync) +{ + char *cachefile; + spa_config_dirent_t *dp; + + if (nvlist_lookup_string(nvp, zpool_prop_to_name(ZPOOL_PROP_CACHEFILE), + &cachefile) != 0) + return; + + dp = kmem_alloc(sizeof (spa_config_dirent_t), + KM_SLEEP); + + if (cachefile[0] == '\0') + dp->scd_path = spa_strdup(spa_config_path); + else if (strcmp(cachefile, "none") == 0) + dp->scd_path = NULL; + else + dp->scd_path = spa_strdup(cachefile); + + list_insert_head(&spa->spa_config_list, dp); + if (need_sync) + spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); +} + +int +spa_prop_set(spa_t *spa, nvlist_t *nvp) +{ + int error; + nvpair_t *elem = NULL; + boolean_t need_sync = B_FALSE; + + if ((error = spa_prop_validate(spa, nvp)) != 0) + return (error); + + while ((elem = nvlist_next_nvpair(nvp, elem)) != NULL) { + zpool_prop_t prop = zpool_name_to_prop(nvpair_name(elem)); + + if (prop == ZPOOL_PROP_CACHEFILE || + prop == ZPOOL_PROP_ALTROOT || + prop == ZPOOL_PROP_READONLY) + continue; + + if (prop == ZPOOL_PROP_VERSION || prop == ZPROP_INVAL) { + uint64_t ver; + + if (prop == ZPOOL_PROP_VERSION) { + VERIFY(nvpair_value_uint64(elem, &ver) == 0); + } else { + ASSERT(zpool_prop_feature(nvpair_name(elem))); + ver = SPA_VERSION_FEATURES; + need_sync = B_TRUE; + } + + /* Save time if the version is already set. */ + if (ver == spa_version(spa)) + continue; + + /* + * In addition to the pool directory object, we might + * create the pool properties object, the features for + * read object, the features for write object, or the + * feature descriptions object. + */ + error = dsl_sync_task(spa->spa_name, NULL, + spa_sync_version, &ver, + 6, ZFS_SPACE_CHECK_RESERVED); + if (error) + return (error); + continue; + } + + need_sync = B_TRUE; + break; + } + + if (need_sync) { + return (dsl_sync_task(spa->spa_name, NULL, spa_sync_props, + nvp, 6, ZFS_SPACE_CHECK_RESERVED)); + } + + return (0); +} + +/* + * If the bootfs property value is dsobj, clear it. + */ +void +spa_prop_clear_bootfs(spa_t *spa, uint64_t dsobj, dmu_tx_t *tx) +{ + if (spa->spa_bootfs == dsobj && spa->spa_pool_props_object != 0) { + VERIFY(zap_remove(spa->spa_meta_objset, + spa->spa_pool_props_object, + zpool_prop_to_name(ZPOOL_PROP_BOOTFS), tx) == 0); + spa->spa_bootfs = 0; + } +} + +/*ARGSUSED*/ +static int +spa_change_guid_check(void *arg, dmu_tx_t *tx) +{ + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + vdev_t *rvd = spa->spa_root_vdev; + uint64_t vdev_state; + ASSERTV(uint64_t *newguid = arg); + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + vdev_state = rvd->vdev_state; + spa_config_exit(spa, SCL_STATE, FTAG); + + if (vdev_state != VDEV_STATE_HEALTHY) + return (SET_ERROR(ENXIO)); + + ASSERT3U(spa_guid(spa), !=, *newguid); + + return (0); +} + +static void +spa_change_guid_sync(void *arg, dmu_tx_t *tx) +{ + uint64_t *newguid = arg; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + uint64_t oldguid; + vdev_t *rvd = spa->spa_root_vdev; + + oldguid = spa_guid(spa); + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + rvd->vdev_guid = *newguid; + rvd->vdev_guid_sum += (*newguid - oldguid); + vdev_config_dirty(rvd); + spa_config_exit(spa, SCL_STATE, FTAG); + + spa_history_log_internal(spa, "guid change", tx, "old=%llu new=%llu", + oldguid, *newguid); +} + +/* + * Change the GUID for the pool. This is done so that we can later + * re-import a pool built from a clone of our own vdevs. We will modify + * the root vdev's guid, our own pool guid, and then mark all of our + * vdevs dirty. Note that we must make sure that all our vdevs are + * online when we do this, or else any vdevs that weren't present + * would be orphaned from our pool. We are also going to issue a + * sysevent to update any watchers. + */ +int +spa_change_guid(spa_t *spa) +{ + int error; + uint64_t guid; + + mutex_enter(&spa->spa_vdev_top_lock); + mutex_enter(&spa_namespace_lock); + guid = spa_generate_guid(NULL); + + error = dsl_sync_task(spa->spa_name, spa_change_guid_check, + spa_change_guid_sync, &guid, 5, ZFS_SPACE_CHECK_RESERVED); + + if (error == 0) { + spa_config_sync(spa, B_FALSE, B_TRUE); + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_REGUID); + } + + mutex_exit(&spa_namespace_lock); + mutex_exit(&spa->spa_vdev_top_lock); + + return (error); +} + +/* + * ========================================================================== + * SPA state manipulation (open/create/destroy/import/export) + * ========================================================================== + */ + +static int +spa_error_entry_compare(const void *a, const void *b) +{ + const spa_error_entry_t *sa = (const spa_error_entry_t *)a; + const spa_error_entry_t *sb = (const spa_error_entry_t *)b; + int ret; + + ret = memcmp(&sa->se_bookmark, &sb->se_bookmark, + sizeof (zbookmark_phys_t)); + + return (AVL_ISIGN(ret)); +} + +/* + * Utility function which retrieves copies of the current logs and + * re-initializes them in the process. + */ +void +spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub) +{ + ASSERT(MUTEX_HELD(&spa->spa_errlist_lock)); + + bcopy(&spa->spa_errlist_last, last, sizeof (avl_tree_t)); + bcopy(&spa->spa_errlist_scrub, scrub, sizeof (avl_tree_t)); + + avl_create(&spa->spa_errlist_scrub, + spa_error_entry_compare, sizeof (spa_error_entry_t), + offsetof(spa_error_entry_t, se_avl)); + avl_create(&spa->spa_errlist_last, + spa_error_entry_compare, sizeof (spa_error_entry_t), + offsetof(spa_error_entry_t, se_avl)); +} + +static void +spa_taskqs_init(spa_t *spa, zio_type_t t, zio_taskq_type_t q) +{ + const zio_taskq_info_t *ztip = &zio_taskqs[t][q]; + enum zti_modes mode = ztip->zti_mode; + uint_t value = ztip->zti_value; + uint_t count = ztip->zti_count; + spa_taskqs_t *tqs = &spa->spa_zio_taskq[t][q]; + char name[32]; + uint_t i, flags = 0; + boolean_t batch = B_FALSE; + + if (mode == ZTI_MODE_NULL) { + tqs->stqs_count = 0; + tqs->stqs_taskq = NULL; + return; + } + + ASSERT3U(count, >, 0); + + tqs->stqs_count = count; + tqs->stqs_taskq = kmem_alloc(count * sizeof (taskq_t *), KM_SLEEP); + + switch (mode) { + case ZTI_MODE_FIXED: + ASSERT3U(value, >=, 1); + value = MAX(value, 1); + flags |= TASKQ_DYNAMIC; + break; + + case ZTI_MODE_BATCH: + batch = B_TRUE; + flags |= TASKQ_THREADS_CPU_PCT; + value = MIN(zio_taskq_batch_pct, 100); + break; + + default: + panic("unrecognized mode for %s_%s taskq (%u:%u) in " + "spa_activate()", + zio_type_name[t], zio_taskq_types[q], mode, value); + break; + } + + for (i = 0; i < count; i++) { + taskq_t *tq; + + if (count > 1) { + (void) snprintf(name, sizeof (name), "%s_%s_%u", + zio_type_name[t], zio_taskq_types[q], i); + } else { + (void) snprintf(name, sizeof (name), "%s_%s", + zio_type_name[t], zio_taskq_types[q]); + } + + if (zio_taskq_sysdc && spa->spa_proc != &p0) { + if (batch) + flags |= TASKQ_DC_BATCH; + + tq = taskq_create_sysdc(name, value, 50, INT_MAX, + spa->spa_proc, zio_taskq_basedc, flags); + } else { + pri_t pri = maxclsyspri; + /* + * The write issue taskq can be extremely CPU + * intensive. Run it at slightly less important + * priority than the other taskqs. Under Linux this + * means incrementing the priority value on platforms + * like illumos it should be decremented. + */ + if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) + pri++; + + tq = taskq_create_proc(name, value, pri, 50, + INT_MAX, spa->spa_proc, flags); + } + + tqs->stqs_taskq[i] = tq; + } +} + +static void +spa_taskqs_fini(spa_t *spa, zio_type_t t, zio_taskq_type_t q) +{ + spa_taskqs_t *tqs = &spa->spa_zio_taskq[t][q]; + uint_t i; + + if (tqs->stqs_taskq == NULL) { + ASSERT3U(tqs->stqs_count, ==, 0); + return; + } + + for (i = 0; i < tqs->stqs_count; i++) { + ASSERT3P(tqs->stqs_taskq[i], !=, NULL); + taskq_destroy(tqs->stqs_taskq[i]); + } + + kmem_free(tqs->stqs_taskq, tqs->stqs_count * sizeof (taskq_t *)); + tqs->stqs_taskq = NULL; +} + +/* + * Dispatch a task to the appropriate taskq for the ZFS I/O type and priority. + * Note that a type may have multiple discrete taskqs to avoid lock contention + * on the taskq itself. In that case we choose which taskq at random by using + * the low bits of gethrtime(). + */ +void +spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q, + task_func_t *func, void *arg, uint_t flags, taskq_ent_t *ent) +{ + spa_taskqs_t *tqs = &spa->spa_zio_taskq[t][q]; + taskq_t *tq; + + ASSERT3P(tqs->stqs_taskq, !=, NULL); + ASSERT3U(tqs->stqs_count, !=, 0); + + if (tqs->stqs_count == 1) { + tq = tqs->stqs_taskq[0]; + } else { + tq = tqs->stqs_taskq[((uint64_t)gethrtime()) % tqs->stqs_count]; + } + + taskq_dispatch_ent(tq, func, arg, flags, ent); +} + +/* + * Same as spa_taskq_dispatch_ent() but block on the task until completion. + */ +void +spa_taskq_dispatch_sync(spa_t *spa, zio_type_t t, zio_taskq_type_t q, + task_func_t *func, void *arg, uint_t flags) +{ + spa_taskqs_t *tqs = &spa->spa_zio_taskq[t][q]; + taskq_t *tq; + taskqid_t id; + + ASSERT3P(tqs->stqs_taskq, !=, NULL); + ASSERT3U(tqs->stqs_count, !=, 0); + + if (tqs->stqs_count == 1) { + tq = tqs->stqs_taskq[0]; + } else { + tq = tqs->stqs_taskq[((uint64_t)gethrtime()) % tqs->stqs_count]; + } + + id = taskq_dispatch(tq, func, arg, flags); + if (id) + taskq_wait_id(tq, id); +} + +static void +spa_create_zio_taskqs(spa_t *spa) +{ + int t, q; + + for (t = 0; t < ZIO_TYPES; t++) { + for (q = 0; q < ZIO_TASKQ_TYPES; q++) { + spa_taskqs_init(spa, t, q); + } + } +} + +#if defined(_KERNEL) && defined(HAVE_SPA_THREAD) +static void +spa_thread(void *arg) +{ + callb_cpr_t cprinfo; + + spa_t *spa = arg; + user_t *pu = PTOU(curproc); + + CALLB_CPR_INIT(&cprinfo, &spa->spa_proc_lock, callb_generic_cpr, + spa->spa_name); + + ASSERT(curproc != &p0); + (void) snprintf(pu->u_psargs, sizeof (pu->u_psargs), + "zpool-%s", spa->spa_name); + (void) strlcpy(pu->u_comm, pu->u_psargs, sizeof (pu->u_comm)); + + /* bind this thread to the requested psrset */ + if (zio_taskq_psrset_bind != PS_NONE) { + pool_lock(); + mutex_enter(&cpu_lock); + mutex_enter(&pidlock); + mutex_enter(&curproc->p_lock); + + if (cpupart_bind_thread(curthread, zio_taskq_psrset_bind, + 0, NULL, NULL) == 0) { + curthread->t_bind_pset = zio_taskq_psrset_bind; + } else { + cmn_err(CE_WARN, + "Couldn't bind process for zfs pool \"%s\" to " + "pset %d\n", spa->spa_name, zio_taskq_psrset_bind); + } + + mutex_exit(&curproc->p_lock); + mutex_exit(&pidlock); + mutex_exit(&cpu_lock); + pool_unlock(); + } + + if (zio_taskq_sysdc) { + sysdc_thread_enter(curthread, 100, 0); + } + + spa->spa_proc = curproc; + spa->spa_did = curthread->t_did; + + spa_create_zio_taskqs(spa); + + mutex_enter(&spa->spa_proc_lock); + ASSERT(spa->spa_proc_state == SPA_PROC_CREATED); + + spa->spa_proc_state = SPA_PROC_ACTIVE; + cv_broadcast(&spa->spa_proc_cv); + + CALLB_CPR_SAFE_BEGIN(&cprinfo); + while (spa->spa_proc_state == SPA_PROC_ACTIVE) + cv_wait(&spa->spa_proc_cv, &spa->spa_proc_lock); + CALLB_CPR_SAFE_END(&cprinfo, &spa->spa_proc_lock); + + ASSERT(spa->spa_proc_state == SPA_PROC_DEACTIVATE); + spa->spa_proc_state = SPA_PROC_GONE; + spa->spa_proc = &p0; + cv_broadcast(&spa->spa_proc_cv); + CALLB_CPR_EXIT(&cprinfo); /* drops spa_proc_lock */ + + mutex_enter(&curproc->p_lock); + lwp_exit(); +} +#endif + +/* + * Activate an uninitialized pool. + */ +static void +spa_activate(spa_t *spa, int mode) +{ + ASSERT(spa->spa_state == POOL_STATE_UNINITIALIZED); + + spa->spa_state = POOL_STATE_ACTIVE; + spa->spa_mode = mode; + + spa->spa_normal_class = metaslab_class_create(spa, zfs_metaslab_ops); + spa->spa_log_class = metaslab_class_create(spa, zfs_metaslab_ops); + + /* Try to create a covering process */ + mutex_enter(&spa->spa_proc_lock); + ASSERT(spa->spa_proc_state == SPA_PROC_NONE); + ASSERT(spa->spa_proc == &p0); + spa->spa_did = 0; + +#ifdef HAVE_SPA_THREAD + /* Only create a process if we're going to be around a while. */ + if (spa_create_process && strcmp(spa->spa_name, TRYIMPORT_NAME) != 0) { + if (newproc(spa_thread, (caddr_t)spa, syscid, maxclsyspri, + NULL, 0) == 0) { + spa->spa_proc_state = SPA_PROC_CREATED; + while (spa->spa_proc_state == SPA_PROC_CREATED) { + cv_wait(&spa->spa_proc_cv, + &spa->spa_proc_lock); + } + ASSERT(spa->spa_proc_state == SPA_PROC_ACTIVE); + ASSERT(spa->spa_proc != &p0); + ASSERT(spa->spa_did != 0); + } else { +#ifdef _KERNEL + cmn_err(CE_WARN, + "Couldn't create process for zfs pool \"%s\"\n", + spa->spa_name); +#endif + } + } +#endif /* HAVE_SPA_THREAD */ + mutex_exit(&spa->spa_proc_lock); + + /* If we didn't create a process, we need to create our taskqs. */ + if (spa->spa_proc == &p0) { + spa_create_zio_taskqs(spa); + } + + list_create(&spa->spa_config_dirty_list, sizeof (vdev_t), + offsetof(vdev_t, vdev_config_dirty_node)); + list_create(&spa->spa_evicting_os_list, sizeof (objset_t), + offsetof(objset_t, os_evicting_node)); + list_create(&spa->spa_state_dirty_list, sizeof (vdev_t), + offsetof(vdev_t, vdev_state_dirty_node)); + + txg_list_create(&spa->spa_vdev_txg_list, spa, + offsetof(struct vdev, vdev_txg_node)); + + avl_create(&spa->spa_errlist_scrub, + spa_error_entry_compare, sizeof (spa_error_entry_t), + offsetof(spa_error_entry_t, se_avl)); + avl_create(&spa->spa_errlist_last, + spa_error_entry_compare, sizeof (spa_error_entry_t), + offsetof(spa_error_entry_t, se_avl)); + + /* + * This taskq is used to perform zvol-minor-related tasks + * asynchronously. This has several advantages, including easy + * resolution of various deadlocks (zfsonlinux bug #3681). + * + * The taskq must be single threaded to ensure tasks are always + * processed in the order in which they were dispatched. + * + * A taskq per pool allows one to keep the pools independent. + * This way if one pool is suspended, it will not impact another. + * + * The preferred location to dispatch a zvol minor task is a sync + * task. In this context, there is easy access to the spa_t and minimal + * error handling is required because the sync task must succeed. + */ + spa->spa_zvol_taskq = taskq_create("z_zvol", 1, defclsyspri, + 1, INT_MAX, 0); + + /* + * The taskq to upgrade datasets in this pool. Currently used by + * feature SPA_FEATURE_USEROBJ_ACCOUNTING. + */ + spa->spa_upgrade_taskq = taskq_create("z_upgrade", boot_ncpus, + defclsyspri, 1, INT_MAX, TASKQ_DYNAMIC); +} + +/* + * Opposite of spa_activate(). + */ +static void +spa_deactivate(spa_t *spa) +{ + int t, q; + + ASSERT(spa->spa_sync_on == B_FALSE); + ASSERT(spa->spa_dsl_pool == NULL); + ASSERT(spa->spa_root_vdev == NULL); + ASSERT(spa->spa_async_zio_root == NULL); + ASSERT(spa->spa_state != POOL_STATE_UNINITIALIZED); + + spa_evicting_os_wait(spa); + + if (spa->spa_zvol_taskq) { + taskq_destroy(spa->spa_zvol_taskq); + spa->spa_zvol_taskq = NULL; + } + + if (spa->spa_upgrade_taskq) { + taskq_destroy(spa->spa_upgrade_taskq); + spa->spa_upgrade_taskq = NULL; + } + + txg_list_destroy(&spa->spa_vdev_txg_list); + + list_destroy(&spa->spa_config_dirty_list); + list_destroy(&spa->spa_evicting_os_list); + list_destroy(&spa->spa_state_dirty_list); + + taskq_cancel_id(system_delay_taskq, spa->spa_deadman_tqid); + + for (t = 0; t < ZIO_TYPES; t++) { + for (q = 0; q < ZIO_TASKQ_TYPES; q++) { + spa_taskqs_fini(spa, t, q); + } + } + + metaslab_class_destroy(spa->spa_normal_class); + spa->spa_normal_class = NULL; + + metaslab_class_destroy(spa->spa_log_class); + spa->spa_log_class = NULL; + + /* + * If this was part of an import or the open otherwise failed, we may + * still have errors left in the queues. Empty them just in case. + */ + spa_errlog_drain(spa); + + avl_destroy(&spa->spa_errlist_scrub); + avl_destroy(&spa->spa_errlist_last); + + spa->spa_state = POOL_STATE_UNINITIALIZED; + + mutex_enter(&spa->spa_proc_lock); + if (spa->spa_proc_state != SPA_PROC_NONE) { + ASSERT(spa->spa_proc_state == SPA_PROC_ACTIVE); + spa->spa_proc_state = SPA_PROC_DEACTIVATE; + cv_broadcast(&spa->spa_proc_cv); + while (spa->spa_proc_state == SPA_PROC_DEACTIVATE) { + ASSERT(spa->spa_proc != &p0); + cv_wait(&spa->spa_proc_cv, &spa->spa_proc_lock); + } + ASSERT(spa->spa_proc_state == SPA_PROC_GONE); + spa->spa_proc_state = SPA_PROC_NONE; + } + ASSERT(spa->spa_proc == &p0); + mutex_exit(&spa->spa_proc_lock); + + /* + * We want to make sure spa_thread() has actually exited the ZFS + * module, so that the module can't be unloaded out from underneath + * it. + */ + if (spa->spa_did != 0) { + thread_join(spa->spa_did); + spa->spa_did = 0; + } +} + +/* + * Verify a pool configuration, and construct the vdev tree appropriately. This + * will create all the necessary vdevs in the appropriate layout, with each vdev + * in the CLOSED state. This will prep the pool before open/creation/import. + * All vdev validation is done by the vdev_alloc() routine. + */ +static int +spa_config_parse(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent, + uint_t id, int atype) +{ + nvlist_t **child; + uint_t children; + int error; + int c; + + if ((error = vdev_alloc(spa, vdp, nv, parent, id, atype)) != 0) + return (error); + + if ((*vdp)->vdev_ops->vdev_op_leaf) + return (0); + + error = nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, + &child, &children); + + if (error == ENOENT) + return (0); + + if (error) { + vdev_free(*vdp); + *vdp = NULL; + return (SET_ERROR(EINVAL)); + } + + for (c = 0; c < children; c++) { + vdev_t *vd; + if ((error = spa_config_parse(spa, &vd, child[c], *vdp, c, + atype)) != 0) { + vdev_free(*vdp); + *vdp = NULL; + return (error); + } + } + + ASSERT(*vdp != NULL); + + return (0); +} + +/* + * Opposite of spa_load(). + */ +static void +spa_unload(spa_t *spa) +{ + int i, c; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + /* + * Stop async tasks. + */ + spa_async_suspend(spa); + + /* + * Stop syncing. + */ + if (spa->spa_sync_on) { + txg_sync_stop(spa->spa_dsl_pool); + spa->spa_sync_on = B_FALSE; + } + + /* + * Even though vdev_free() also calls vdev_metaslab_fini, we need + * to call it earlier, before we wait for async i/o to complete. + * This ensures that there is no async metaslab prefetching, by + * calling taskq_wait(mg_taskq). + */ + if (spa->spa_root_vdev != NULL) { + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + for (c = 0; c < spa->spa_root_vdev->vdev_children; c++) + vdev_metaslab_fini(spa->spa_root_vdev->vdev_child[c]); + spa_config_exit(spa, SCL_ALL, FTAG); + } + + if (spa->spa_mmp.mmp_thread) + mmp_thread_stop(spa); + + /* + * Wait for any outstanding async I/O to complete. + */ + if (spa->spa_async_zio_root != NULL) { + for (i = 0; i < max_ncpus; i++) + (void) zio_wait(spa->spa_async_zio_root[i]); + kmem_free(spa->spa_async_zio_root, max_ncpus * sizeof (void *)); + spa->spa_async_zio_root = NULL; + } + + bpobj_close(&spa->spa_deferred_bpobj); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + /* + * Close all vdevs. + */ + if (spa->spa_root_vdev) + vdev_free(spa->spa_root_vdev); + ASSERT(spa->spa_root_vdev == NULL); + + /* + * Close the dsl pool. + */ + if (spa->spa_dsl_pool) { + dsl_pool_close(spa->spa_dsl_pool); + spa->spa_dsl_pool = NULL; + spa->spa_meta_objset = NULL; + } + + ddt_unload(spa); + + /* + * Drop and purge level 2 cache + */ + spa_l2cache_drop(spa); + + for (i = 0; i < spa->spa_spares.sav_count; i++) + vdev_free(spa->spa_spares.sav_vdevs[i]); + if (spa->spa_spares.sav_vdevs) { + kmem_free(spa->spa_spares.sav_vdevs, + spa->spa_spares.sav_count * sizeof (void *)); + spa->spa_spares.sav_vdevs = NULL; + } + if (spa->spa_spares.sav_config) { + nvlist_free(spa->spa_spares.sav_config); + spa->spa_spares.sav_config = NULL; + } + spa->spa_spares.sav_count = 0; + + for (i = 0; i < spa->spa_l2cache.sav_count; i++) { + vdev_clear_stats(spa->spa_l2cache.sav_vdevs[i]); + vdev_free(spa->spa_l2cache.sav_vdevs[i]); + } + if (spa->spa_l2cache.sav_vdevs) { + kmem_free(spa->spa_l2cache.sav_vdevs, + spa->spa_l2cache.sav_count * sizeof (void *)); + spa->spa_l2cache.sav_vdevs = NULL; + } + if (spa->spa_l2cache.sav_config) { + nvlist_free(spa->spa_l2cache.sav_config); + spa->spa_l2cache.sav_config = NULL; + } + spa->spa_l2cache.sav_count = 0; + + spa->spa_async_suspended = 0; + + if (spa->spa_comment != NULL) { + spa_strfree(spa->spa_comment); + spa->spa_comment = NULL; + } + + spa_config_exit(spa, SCL_ALL, FTAG); +} + +/* + * Load (or re-load) the current list of vdevs describing the active spares for + * this pool. When this is called, we have some form of basic information in + * 'spa_spares.sav_config'. We parse this into vdevs, try to open them, and + * then re-generate a more complete list including status information. + */ +static void +spa_load_spares(spa_t *spa) +{ + nvlist_t **spares; + uint_t nspares; + int i; + vdev_t *vd, *tvd; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + /* + * First, close and free any existing spare vdevs. + */ + for (i = 0; i < spa->spa_spares.sav_count; i++) { + vd = spa->spa_spares.sav_vdevs[i]; + + /* Undo the call to spa_activate() below */ + if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, + B_FALSE)) != NULL && tvd->vdev_isspare) + spa_spare_remove(tvd); + vdev_close(vd); + vdev_free(vd); + } + + if (spa->spa_spares.sav_vdevs) + kmem_free(spa->spa_spares.sav_vdevs, + spa->spa_spares.sav_count * sizeof (void *)); + + if (spa->spa_spares.sav_config == NULL) + nspares = 0; + else + VERIFY(nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); + + spa->spa_spares.sav_count = (int)nspares; + spa->spa_spares.sav_vdevs = NULL; + + if (nspares == 0) + return; + + /* + * Construct the array of vdevs, opening them to get status in the + * process. For each spare, there is potentially two different vdev_t + * structures associated with it: one in the list of spares (used only + * for basic validation purposes) and one in the active vdev + * configuration (if it's spared in). During this phase we open and + * validate each vdev on the spare list. If the vdev also exists in the + * active configuration, then we also mark this vdev as an active spare. + */ + spa->spa_spares.sav_vdevs = kmem_zalloc(nspares * sizeof (void *), + KM_SLEEP); + for (i = 0; i < spa->spa_spares.sav_count; i++) { + VERIFY(spa_config_parse(spa, &vd, spares[i], NULL, 0, + VDEV_ALLOC_SPARE) == 0); + ASSERT(vd != NULL); + + spa->spa_spares.sav_vdevs[i] = vd; + + if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, + B_FALSE)) != NULL) { + if (!tvd->vdev_isspare) + spa_spare_add(tvd); + + /* + * We only mark the spare active if we were successfully + * able to load the vdev. Otherwise, importing a pool + * with a bad active spare would result in strange + * behavior, because multiple pool would think the spare + * is actively in use. + * + * There is a vulnerability here to an equally bizarre + * circumstance, where a dead active spare is later + * brought back to life (onlined or otherwise). Given + * the rarity of this scenario, and the extra complexity + * it adds, we ignore the possibility. + */ + if (!vdev_is_dead(tvd)) + spa_spare_activate(tvd); + } + + vd->vdev_top = vd; + vd->vdev_aux = &spa->spa_spares; + + if (vdev_open(vd) != 0) + continue; + + if (vdev_validate_aux(vd) == 0) + spa_spare_add(vd); + } + + /* + * Recompute the stashed list of spares, with status information + * this time. + */ + VERIFY(nvlist_remove(spa->spa_spares.sav_config, ZPOOL_CONFIG_SPARES, + DATA_TYPE_NVLIST_ARRAY) == 0); + + spares = kmem_alloc(spa->spa_spares.sav_count * sizeof (void *), + KM_SLEEP); + for (i = 0; i < spa->spa_spares.sav_count; i++) + spares[i] = vdev_config_generate(spa, + spa->spa_spares.sav_vdevs[i], B_TRUE, VDEV_CONFIG_SPARE); + VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, spares, spa->spa_spares.sav_count) == 0); + for (i = 0; i < spa->spa_spares.sav_count; i++) + nvlist_free(spares[i]); + kmem_free(spares, spa->spa_spares.sav_count * sizeof (void *)); +} + +/* + * Load (or re-load) the current list of vdevs describing the active l2cache for + * this pool. When this is called, we have some form of basic information in + * 'spa_l2cache.sav_config'. We parse this into vdevs, try to open them, and + * then re-generate a more complete list including status information. + * Devices which are already active have their details maintained, and are + * not re-opened. + */ +static void +spa_load_l2cache(spa_t *spa) +{ + nvlist_t **l2cache; + uint_t nl2cache; + int i, j, oldnvdevs; + uint64_t guid; + vdev_t *vd, **oldvdevs, **newvdevs; + spa_aux_vdev_t *sav = &spa->spa_l2cache; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + oldvdevs = sav->sav_vdevs; + oldnvdevs = sav->sav_count; + sav->sav_vdevs = NULL; + sav->sav_count = 0; + + if (sav->sav_config == NULL) { + nl2cache = 0; + newvdevs = NULL; + goto out; + } + + VERIFY(nvlist_lookup_nvlist_array(sav->sav_config, + ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); + newvdevs = kmem_alloc(nl2cache * sizeof (void *), KM_SLEEP); + + /* + * Process new nvlist of vdevs. + */ + for (i = 0; i < nl2cache; i++) { + VERIFY(nvlist_lookup_uint64(l2cache[i], ZPOOL_CONFIG_GUID, + &guid) == 0); + + newvdevs[i] = NULL; + for (j = 0; j < oldnvdevs; j++) { + vd = oldvdevs[j]; + if (vd != NULL && guid == vd->vdev_guid) { + /* + * Retain previous vdev for add/remove ops. + */ + newvdevs[i] = vd; + oldvdevs[j] = NULL; + break; + } + } + + if (newvdevs[i] == NULL) { + /* + * Create new vdev + */ + VERIFY(spa_config_parse(spa, &vd, l2cache[i], NULL, 0, + VDEV_ALLOC_L2CACHE) == 0); + ASSERT(vd != NULL); + newvdevs[i] = vd; + + /* + * Commit this vdev as an l2cache device, + * even if it fails to open. + */ + spa_l2cache_add(vd); + + vd->vdev_top = vd; + vd->vdev_aux = sav; + + spa_l2cache_activate(vd); + + if (vdev_open(vd) != 0) + continue; + + (void) vdev_validate_aux(vd); + + if (!vdev_is_dead(vd)) + l2arc_add_vdev(spa, vd); + } + } + + sav->sav_vdevs = newvdevs; + sav->sav_count = (int)nl2cache; + + /* + * Recompute the stashed list of l2cache devices, with status + * information this time. + */ + VERIFY(nvlist_remove(sav->sav_config, ZPOOL_CONFIG_L2CACHE, + DATA_TYPE_NVLIST_ARRAY) == 0); + + l2cache = kmem_alloc(sav->sav_count * sizeof (void *), KM_SLEEP); + for (i = 0; i < sav->sav_count; i++) + l2cache[i] = vdev_config_generate(spa, + sav->sav_vdevs[i], B_TRUE, VDEV_CONFIG_L2CACHE); + VERIFY(nvlist_add_nvlist_array(sav->sav_config, + ZPOOL_CONFIG_L2CACHE, l2cache, sav->sav_count) == 0); + +out: + /* + * Purge vdevs that were dropped + */ + for (i = 0; i < oldnvdevs; i++) { + uint64_t pool; + + vd = oldvdevs[i]; + if (vd != NULL) { + ASSERT(vd->vdev_isl2cache); + + if (spa_l2cache_exists(vd->vdev_guid, &pool) && + pool != 0ULL && l2arc_vdev_present(vd)) + l2arc_remove_vdev(vd); + vdev_clear_stats(vd); + vdev_free(vd); + } + } + + if (oldvdevs) + kmem_free(oldvdevs, oldnvdevs * sizeof (void *)); + + for (i = 0; i < sav->sav_count; i++) + nvlist_free(l2cache[i]); + if (sav->sav_count) + kmem_free(l2cache, sav->sav_count * sizeof (void *)); +} + +static int +load_nvlist(spa_t *spa, uint64_t obj, nvlist_t **value) +{ + dmu_buf_t *db; + char *packed = NULL; + size_t nvsize = 0; + int error; + *value = NULL; + + error = dmu_bonus_hold(spa->spa_meta_objset, obj, FTAG, &db); + if (error) + return (error); + + nvsize = *(uint64_t *)db->db_data; + dmu_buf_rele(db, FTAG); + + packed = vmem_alloc(nvsize, KM_SLEEP); + error = dmu_read(spa->spa_meta_objset, obj, 0, nvsize, packed, + DMU_READ_PREFETCH); + if (error == 0) + error = nvlist_unpack(packed, nvsize, value, 0); + vmem_free(packed, nvsize); + + return (error); +} + +/* + * Checks to see if the given vdev could not be opened, in which case we post a + * sysevent to notify the autoreplace code that the device has been removed. + */ +static void +spa_check_removed(vdev_t *vd) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) + spa_check_removed(vd->vdev_child[c]); + + if (vd->vdev_ops->vdev_op_leaf && vdev_is_dead(vd) && + !vd->vdev_ishole) { + zfs_post_autoreplace(vd->vdev_spa, vd); + spa_event_notify(vd->vdev_spa, vd, NULL, ESC_ZFS_VDEV_CHECK); + } +} + +static void +spa_config_valid_zaps(vdev_t *vd, vdev_t *mvd) +{ + uint64_t i; + + ASSERT3U(vd->vdev_children, ==, mvd->vdev_children); + + vd->vdev_top_zap = mvd->vdev_top_zap; + vd->vdev_leaf_zap = mvd->vdev_leaf_zap; + + for (i = 0; i < vd->vdev_children; i++) { + spa_config_valid_zaps(vd->vdev_child[i], mvd->vdev_child[i]); + } +} + +/* + * Validate the current config against the MOS config + */ +static boolean_t +spa_config_valid(spa_t *spa, nvlist_t *config) +{ + vdev_t *mrvd, *rvd = spa->spa_root_vdev; + nvlist_t *nv; + int c, i; + + VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nv) == 0); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + VERIFY(spa_config_parse(spa, &mrvd, nv, NULL, 0, VDEV_ALLOC_LOAD) == 0); + + ASSERT3U(rvd->vdev_children, ==, mrvd->vdev_children); + + /* + * If we're doing a normal import, then build up any additional + * diagnostic information about missing devices in this config. + * We'll pass this up to the user for further processing. + */ + if (!(spa->spa_import_flags & ZFS_IMPORT_MISSING_LOG)) { + nvlist_t **child, *nv; + uint64_t idx = 0; + + child = kmem_alloc(rvd->vdev_children * sizeof (nvlist_t *), + KM_SLEEP); + VERIFY(nvlist_alloc(&nv, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + vdev_t *mtvd = mrvd->vdev_child[c]; + + if (tvd->vdev_ops == &vdev_missing_ops && + mtvd->vdev_ops != &vdev_missing_ops && + mtvd->vdev_islog) + child[idx++] = vdev_config_generate(spa, mtvd, + B_FALSE, 0); + } + + if (idx) { + VERIFY(nvlist_add_nvlist_array(nv, + ZPOOL_CONFIG_CHILDREN, child, idx) == 0); + VERIFY(nvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_MISSING_DEVICES, nv) == 0); + + for (i = 0; i < idx; i++) + nvlist_free(child[i]); + } + nvlist_free(nv); + kmem_free(child, rvd->vdev_children * sizeof (char **)); + } + + /* + * Compare the root vdev tree with the information we have + * from the MOS config (mrvd). Check each top-level vdev + * with the corresponding MOS config top-level (mtvd). + */ + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + vdev_t *mtvd = mrvd->vdev_child[c]; + + /* + * Resolve any "missing" vdevs in the current configuration. + * If we find that the MOS config has more accurate information + * about the top-level vdev then use that vdev instead. + */ + if (tvd->vdev_ops == &vdev_missing_ops && + mtvd->vdev_ops != &vdev_missing_ops) { + + if (!(spa->spa_import_flags & ZFS_IMPORT_MISSING_LOG)) + continue; + + /* + * Device specific actions. + */ + if (mtvd->vdev_islog) { + spa_set_log_state(spa, SPA_LOG_CLEAR); + } else { + /* + * XXX - once we have 'readonly' pool + * support we should be able to handle + * missing data devices by transitioning + * the pool to readonly. + */ + continue; + } + + /* + * Swap the missing vdev with the data we were + * able to obtain from the MOS config. + */ + vdev_remove_child(rvd, tvd); + vdev_remove_child(mrvd, mtvd); + + vdev_add_child(rvd, mtvd); + vdev_add_child(mrvd, tvd); + + spa_config_exit(spa, SCL_ALL, FTAG); + vdev_load(mtvd); + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + vdev_reopen(rvd); + } else { + if (mtvd->vdev_islog) { + /* + * Load the slog device's state from the MOS + * config since it's possible that the label + * does not contain the most up-to-date + * information. + */ + vdev_load_log_state(tvd, mtvd); + vdev_reopen(tvd); + } + + /* + * Per-vdev ZAP info is stored exclusively in the MOS. + */ + spa_config_valid_zaps(tvd, mtvd); + } + } + + vdev_free(mrvd); + spa_config_exit(spa, SCL_ALL, FTAG); + + /* + * Ensure we were able to validate the config. + */ + return (rvd->vdev_guid_sum == spa->spa_uberblock.ub_guid_sum); +} + +/* + * Check for missing log devices + */ +static boolean_t +spa_check_logs(spa_t *spa) +{ + boolean_t rv = B_FALSE; + dsl_pool_t *dp = spa_get_dsl(spa); + + switch (spa->spa_log_state) { + default: + break; + case SPA_LOG_MISSING: + /* need to recheck in case slog has been restored */ + case SPA_LOG_UNKNOWN: + rv = (dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + zil_check_log_chain, NULL, DS_FIND_CHILDREN) != 0); + if (rv) + spa_set_log_state(spa, SPA_LOG_MISSING); + break; + } + return (rv); +} + +static boolean_t +spa_passivate_log(spa_t *spa) +{ + vdev_t *rvd = spa->spa_root_vdev; + boolean_t slog_found = B_FALSE; + int c; + + ASSERT(spa_config_held(spa, SCL_ALLOC, RW_WRITER)); + + if (!spa_has_slogs(spa)) + return (B_FALSE); + + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + if (tvd->vdev_islog) { + metaslab_group_passivate(mg); + slog_found = B_TRUE; + } + } + + return (slog_found); +} + +static void +spa_activate_log(spa_t *spa) +{ + vdev_t *rvd = spa->spa_root_vdev; + int c; + + ASSERT(spa_config_held(spa, SCL_ALLOC, RW_WRITER)); + + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + if (tvd->vdev_islog) + metaslab_group_activate(mg); + } +} + +int +spa_offline_log(spa_t *spa) +{ + int error; + + error = dmu_objset_find(spa_name(spa), zil_vdev_offline, + NULL, DS_FIND_CHILDREN); + if (error == 0) { + /* + * We successfully offlined the log device, sync out the + * current txg so that the "stubby" block can be removed + * by zil_sync(). + */ + txg_wait_synced(spa->spa_dsl_pool, 0); + } + return (error); +} + +static void +spa_aux_check_removed(spa_aux_vdev_t *sav) +{ + int i; + + for (i = 0; i < sav->sav_count; i++) + spa_check_removed(sav->sav_vdevs[i]); +} + +void +spa_claim_notify(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + + if (zio->io_error) + return; + + mutex_enter(&spa->spa_props_lock); /* any mutex will do */ + if (spa->spa_claim_max_txg < zio->io_bp->blk_birth) + spa->spa_claim_max_txg = zio->io_bp->blk_birth; + mutex_exit(&spa->spa_props_lock); +} + +typedef struct spa_load_error { + uint64_t sle_meta_count; + uint64_t sle_data_count; +} spa_load_error_t; + +static void +spa_load_verify_done(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + spa_load_error_t *sle = zio->io_private; + dmu_object_type_t type = BP_GET_TYPE(bp); + int error = zio->io_error; + spa_t *spa = zio->io_spa; + + abd_free(zio->io_abd); + if (error) { + if ((BP_GET_LEVEL(bp) != 0 || DMU_OT_IS_METADATA(type)) && + type != DMU_OT_INTENT_LOG) + atomic_inc_64(&sle->sle_meta_count); + else + atomic_inc_64(&sle->sle_data_count); + } + + mutex_enter(&spa->spa_scrub_lock); + spa->spa_scrub_inflight--; + cv_broadcast(&spa->spa_scrub_io_cv); + mutex_exit(&spa->spa_scrub_lock); +} + +/* + * Maximum number of concurrent scrub i/os to create while verifying + * a pool while importing it. + */ +int spa_load_verify_maxinflight = 10000; +int spa_load_verify_metadata = B_TRUE; +int spa_load_verify_data = B_TRUE; + +/*ARGSUSED*/ +static int +spa_load_verify_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, + const zbookmark_phys_t *zb, const dnode_phys_t *dnp, void *arg) +{ + zio_t *rio; + size_t size; + + if (bp == NULL || BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp)) + return (0); + /* + * Note: normally this routine will not be called if + * spa_load_verify_metadata is not set. However, it may be useful + * to manually set the flag after the traversal has begun. + */ + if (!spa_load_verify_metadata) + return (0); + if (!BP_IS_METADATA(bp) && !spa_load_verify_data) + return (0); + + rio = arg; + size = BP_GET_PSIZE(bp); + + mutex_enter(&spa->spa_scrub_lock); + while (spa->spa_scrub_inflight >= spa_load_verify_maxinflight) + cv_wait(&spa->spa_scrub_io_cv, &spa->spa_scrub_lock); + spa->spa_scrub_inflight++; + mutex_exit(&spa->spa_scrub_lock); + + zio_nowait(zio_read(rio, spa, bp, abd_alloc_for_io(size, B_FALSE), size, + spa_load_verify_done, rio->io_private, ZIO_PRIORITY_SCRUB, + ZIO_FLAG_SPECULATIVE | ZIO_FLAG_CANFAIL | + ZIO_FLAG_SCRUB | ZIO_FLAG_RAW, zb)); + return (0); +} + +/* ARGSUSED */ +int +verify_dataset_name_len(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + if (dsl_dataset_namelen(ds) >= ZFS_MAX_DATASET_NAME_LEN) + return (SET_ERROR(ENAMETOOLONG)); + + return (0); +} + +static int +spa_load_verify(spa_t *spa) +{ + zio_t *rio; + spa_load_error_t sle = { 0 }; + zpool_rewind_policy_t policy; + boolean_t verify_ok = B_FALSE; + int error = 0; + + zpool_get_rewind_policy(spa->spa_config, &policy); + + if (policy.zrp_request & ZPOOL_NEVER_REWIND) + return (0); + + dsl_pool_config_enter(spa->spa_dsl_pool, FTAG); + error = dmu_objset_find_dp(spa->spa_dsl_pool, + spa->spa_dsl_pool->dp_root_dir_obj, verify_dataset_name_len, NULL, + DS_FIND_CHILDREN); + dsl_pool_config_exit(spa->spa_dsl_pool, FTAG); + if (error != 0) + return (error); + + rio = zio_root(spa, NULL, &sle, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE); + + if (spa_load_verify_metadata) { + error = traverse_pool(spa, spa->spa_verify_min_txg, + TRAVERSE_PRE | TRAVERSE_PREFETCH_METADATA, + spa_load_verify_cb, rio); + } + + (void) zio_wait(rio); + + spa->spa_load_meta_errors = sle.sle_meta_count; + spa->spa_load_data_errors = sle.sle_data_count; + + if (!error && sle.sle_meta_count <= policy.zrp_maxmeta && + sle.sle_data_count <= policy.zrp_maxdata) { + int64_t loss = 0; + + verify_ok = B_TRUE; + spa->spa_load_txg = spa->spa_uberblock.ub_txg; + spa->spa_load_txg_ts = spa->spa_uberblock.ub_timestamp; + + loss = spa->spa_last_ubsync_txg_ts - spa->spa_load_txg_ts; + VERIFY(nvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_LOAD_TIME, spa->spa_load_txg_ts) == 0); + VERIFY(nvlist_add_int64(spa->spa_load_info, + ZPOOL_CONFIG_REWIND_TIME, loss) == 0); + VERIFY(nvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_LOAD_DATA_ERRORS, sle.sle_data_count) == 0); + } else { + spa->spa_load_max_txg = spa->spa_uberblock.ub_txg; + } + + if (error) { + if (error != ENXIO && error != EIO) + error = SET_ERROR(EIO); + return (error); + } + + return (verify_ok ? 0 : EIO); +} + +/* + * Find a value in the pool props object. + */ +static void +spa_prop_find(spa_t *spa, zpool_prop_t prop, uint64_t *val) +{ + (void) zap_lookup(spa->spa_meta_objset, spa->spa_pool_props_object, + zpool_prop_to_name(prop), sizeof (uint64_t), 1, val); +} + +/* + * Find a value in the pool directory object. + */ +static int +spa_dir_prop(spa_t *spa, const char *name, uint64_t *val) +{ + return (zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + name, sizeof (uint64_t), 1, val)); +} + +static int +spa_vdev_err(vdev_t *vdev, vdev_aux_t aux, int err) +{ + vdev_set_state(vdev, B_TRUE, VDEV_STATE_CANT_OPEN, aux); + return (err); +} + +/* + * Fix up config after a partly-completed split. This is done with the + * ZPOOL_CONFIG_SPLIT nvlist. Both the splitting pool and the split-off + * pool have that entry in their config, but only the splitting one contains + * a list of all the guids of the vdevs that are being split off. + * + * This function determines what to do with that list: either rejoin + * all the disks to the pool, or complete the splitting process. To attempt + * the rejoin, each disk that is offlined is marked online again, and + * we do a reopen() call. If the vdev label for every disk that was + * marked online indicates it was successfully split off (VDEV_AUX_SPLIT_POOL) + * then we call vdev_split() on each disk, and complete the split. + * + * Otherwise we leave the config alone, with all the vdevs in place in + * the original pool. + */ +static void +spa_try_repair(spa_t *spa, nvlist_t *config) +{ + uint_t extracted; + uint64_t *glist; + uint_t i, gcount; + nvlist_t *nvl; + vdev_t **vd; + boolean_t attempt_reopen; + + if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_SPLIT, &nvl) != 0) + return; + + /* check that the config is complete */ + if (nvlist_lookup_uint64_array(nvl, ZPOOL_CONFIG_SPLIT_LIST, + &glist, &gcount) != 0) + return; + + vd = kmem_zalloc(gcount * sizeof (vdev_t *), KM_SLEEP); + + /* attempt to online all the vdevs & validate */ + attempt_reopen = B_TRUE; + for (i = 0; i < gcount; i++) { + if (glist[i] == 0) /* vdev is hole */ + continue; + + vd[i] = spa_lookup_by_guid(spa, glist[i], B_FALSE); + if (vd[i] == NULL) { + /* + * Don't bother attempting to reopen the disks; + * just do the split. + */ + attempt_reopen = B_FALSE; + } else { + /* attempt to re-online it */ + vd[i]->vdev_offline = B_FALSE; + } + } + + if (attempt_reopen) { + vdev_reopen(spa->spa_root_vdev); + + /* check each device to see what state it's in */ + for (extracted = 0, i = 0; i < gcount; i++) { + if (vd[i] != NULL && + vd[i]->vdev_stat.vs_aux != VDEV_AUX_SPLIT_POOL) + break; + ++extracted; + } + } + + /* + * If every disk has been moved to the new pool, or if we never + * even attempted to look at them, then we split them off for + * good. + */ + if (!attempt_reopen || gcount == extracted) { + for (i = 0; i < gcount; i++) + if (vd[i] != NULL) + vdev_split(vd[i]); + vdev_reopen(spa->spa_root_vdev); + } + + kmem_free(vd, gcount * sizeof (vdev_t *)); +} + +static int +spa_load(spa_t *spa, spa_load_state_t state, spa_import_type_t type, + boolean_t mosconfig) +{ + nvlist_t *config = spa->spa_config; + char *ereport = FM_EREPORT_ZFS_POOL; + char *comment; + int error; + uint64_t pool_guid; + nvlist_t *nvl; + + if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_GUID, &pool_guid)) + return (SET_ERROR(EINVAL)); + + ASSERT(spa->spa_comment == NULL); + if (nvlist_lookup_string(config, ZPOOL_CONFIG_COMMENT, &comment) == 0) + spa->spa_comment = spa_strdup(comment); + + /* + * Versioning wasn't explicitly added to the label until later, so if + * it's not present treat it as the initial version. + */ + if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, + &spa->spa_ubsync.ub_version) != 0) + spa->spa_ubsync.ub_version = SPA_VERSION_INITIAL; + + (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_TXG, + &spa->spa_config_txg); + + if ((state == SPA_LOAD_IMPORT || state == SPA_LOAD_TRYIMPORT) && + spa_guid_exists(pool_guid, 0)) { + error = SET_ERROR(EEXIST); + } else { + spa->spa_config_guid = pool_guid; + + if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_SPLIT, + &nvl) == 0) { + VERIFY(nvlist_dup(nvl, &spa->spa_config_splitting, + KM_SLEEP) == 0); + } + + nvlist_free(spa->spa_load_info); + spa->spa_load_info = fnvlist_alloc(); + + gethrestime(&spa->spa_loaded_ts); + error = spa_load_impl(spa, pool_guid, config, state, type, + mosconfig, &ereport); + } + + /* + * Don't count references from objsets that are already closed + * and are making their way through the eviction process. + */ + spa_evicting_os_wait(spa); + spa->spa_minref = refcount_count(&spa->spa_refcount); + if (error) { + if (error != EEXIST) { + spa->spa_loaded_ts.tv_sec = 0; + spa->spa_loaded_ts.tv_nsec = 0; + } + if (error != EBADF) { + zfs_ereport_post(ereport, spa, NULL, NULL, 0, 0); + } + } + spa->spa_load_state = error ? SPA_LOAD_ERROR : SPA_LOAD_NONE; + spa->spa_ena = 0; + + return (error); +} + +#ifdef ZFS_DEBUG +/* + * Count the number of per-vdev ZAPs associated with all of the vdevs in the + * vdev tree rooted in the given vd, and ensure that each ZAP is present in the + * spa's per-vdev ZAP list. + */ +static uint64_t +vdev_count_verify_zaps(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + uint64_t total = 0; + uint64_t i; + + if (vd->vdev_top_zap != 0) { + total++; + ASSERT0(zap_lookup_int(spa->spa_meta_objset, + spa->spa_all_vdev_zaps, vd->vdev_top_zap)); + } + if (vd->vdev_leaf_zap != 0) { + total++; + ASSERT0(zap_lookup_int(spa->spa_meta_objset, + spa->spa_all_vdev_zaps, vd->vdev_leaf_zap)); + } + + for (i = 0; i < vd->vdev_children; i++) { + total += vdev_count_verify_zaps(vd->vdev_child[i]); + } + + return (total); +} +#endif + +/* + * Determine whether the activity check is required. + */ +static boolean_t +spa_activity_check_required(spa_t *spa, uberblock_t *ub, nvlist_t *label, + nvlist_t *config) +{ + uint64_t state = 0; + uint64_t hostid = 0; + uint64_t tryconfig_txg = 0; + uint64_t tryconfig_timestamp = 0; + nvlist_t *nvinfo; + + if (nvlist_exists(config, ZPOOL_CONFIG_LOAD_INFO)) { + nvinfo = fnvlist_lookup_nvlist(config, ZPOOL_CONFIG_LOAD_INFO); + (void) nvlist_lookup_uint64(nvinfo, ZPOOL_CONFIG_MMP_TXG, + &tryconfig_txg); + (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_TIMESTAMP, + &tryconfig_timestamp); + } + + (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_STATE, &state); + + /* + * Disable the MMP activity check - This is used by zdb which + * is intended to be used on potentially active pools. + */ + if (spa->spa_import_flags & ZFS_IMPORT_SKIP_MMP) + return (B_FALSE); + + /* + * Skip the activity check when the MMP feature is disabled. + */ + if (ub->ub_mmp_magic == MMP_MAGIC && ub->ub_mmp_delay == 0) + return (B_FALSE); + /* + * If the tryconfig_* values are nonzero, they are the results of an + * earlier tryimport. If they match the uberblock we just found, then + * the pool has not changed and we return false so we do not test a + * second time. + */ + if (tryconfig_txg && tryconfig_txg == ub->ub_txg && + tryconfig_timestamp && tryconfig_timestamp == ub->ub_timestamp) + return (B_FALSE); + + /* + * Allow the activity check to be skipped when importing the pool + * on the same host which last imported it. Since the hostid from + * configuration may be stale use the one read from the label. + */ + if (nvlist_exists(label, ZPOOL_CONFIG_HOSTID)) + hostid = fnvlist_lookup_uint64(label, ZPOOL_CONFIG_HOSTID); + + if (hostid == spa_get_hostid()) + return (B_FALSE); + + /* + * Skip the activity test when the pool was cleanly exported. + */ + if (state != POOL_STATE_ACTIVE) + return (B_FALSE); + + return (B_TRUE); +} + +/* + * Perform the import activity check. If the user canceled the import or + * we detected activity then fail. + */ +static int +spa_activity_check(spa_t *spa, uberblock_t *ub, nvlist_t *config) +{ + uint64_t import_intervals = MAX(zfs_multihost_import_intervals, 1); + uint64_t txg = ub->ub_txg; + uint64_t timestamp = ub->ub_timestamp; + uint64_t import_delay = NANOSEC; + hrtime_t import_expire; + nvlist_t *mmp_label = NULL; + vdev_t *rvd = spa->spa_root_vdev; + kcondvar_t cv; + kmutex_t mtx; + int error = 0; + + cv_init(&cv, NULL, CV_DEFAULT, NULL); + mutex_init(&mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_enter(&mtx); + + /* + * If ZPOOL_CONFIG_MMP_TXG is present an activity check was performed + * during the earlier tryimport. If the txg recorded there is 0 then + * the pool is known to be active on another host. + * + * Otherwise, the pool might be in use on another node. Check for + * changes in the uberblocks on disk if necessary. + */ + if (nvlist_exists(config, ZPOOL_CONFIG_LOAD_INFO)) { + nvlist_t *nvinfo = fnvlist_lookup_nvlist(config, + ZPOOL_CONFIG_LOAD_INFO); + + if (nvlist_exists(nvinfo, ZPOOL_CONFIG_MMP_TXG) && + fnvlist_lookup_uint64(nvinfo, ZPOOL_CONFIG_MMP_TXG) == 0) { + vdev_uberblock_load(rvd, ub, &mmp_label); + error = SET_ERROR(EREMOTEIO); + goto out; + } + } + + /* + * Preferentially use the zfs_multihost_interval from the node which + * last imported the pool. This value is stored in an MMP uberblock as. + * + * ub_mmp_delay * vdev_count_leaves() == zfs_multihost_interval + */ + if (ub->ub_mmp_magic == MMP_MAGIC && ub->ub_mmp_delay) + import_delay = MAX(import_delay, import_intervals * + ub->ub_mmp_delay * MAX(vdev_count_leaves(spa), 1)); + + /* Apply a floor using the local default values. */ + import_delay = MAX(import_delay, import_intervals * + MSEC2NSEC(MAX(zfs_multihost_interval, MMP_MIN_INTERVAL))); + + /* Add a small random factor in case of simultaneous imports (0-25%) */ + import_expire = gethrtime() + import_delay + + (import_delay * spa_get_random(250) / 1000); + + while (gethrtime() < import_expire) { + vdev_uberblock_load(rvd, ub, &mmp_label); + + if (txg != ub->ub_txg || timestamp != ub->ub_timestamp) { + error = SET_ERROR(EREMOTEIO); + break; + } + + if (mmp_label) { + nvlist_free(mmp_label); + mmp_label = NULL; + } + + error = cv_timedwait_sig(&cv, &mtx, ddi_get_lbolt() + hz); + if (error != -1) { + error = SET_ERROR(EINTR); + break; + } + error = 0; + } + +out: + mutex_exit(&mtx); + mutex_destroy(&mtx); + cv_destroy(&cv); + + /* + * If the pool is determined to be active store the status in the + * spa->spa_load_info nvlist. If the remote hostname or hostid are + * available from configuration read from disk store them as well. + * This allows 'zpool import' to generate a more useful message. + * + * ZPOOL_CONFIG_MMP_STATE - observed pool status (mandatory) + * ZPOOL_CONFIG_MMP_HOSTNAME - hostname from the active pool + * ZPOOL_CONFIG_MMP_HOSTID - hostid from the active pool + */ + if (error == EREMOTEIO) { + char *hostname = ""; + uint64_t hostid = 0; + + if (mmp_label) { + if (nvlist_exists(mmp_label, ZPOOL_CONFIG_HOSTNAME)) { + hostname = fnvlist_lookup_string(mmp_label, + ZPOOL_CONFIG_HOSTNAME); + fnvlist_add_string(spa->spa_load_info, + ZPOOL_CONFIG_MMP_HOSTNAME, hostname); + } + + if (nvlist_exists(mmp_label, ZPOOL_CONFIG_HOSTID)) { + hostid = fnvlist_lookup_uint64(mmp_label, + ZPOOL_CONFIG_HOSTID); + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_HOSTID, hostid); + } + } + + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_STATE, MMP_STATE_ACTIVE); + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_TXG, 0); + + error = spa_vdev_err(rvd, VDEV_AUX_ACTIVE, EREMOTEIO); + } + + if (mmp_label) + nvlist_free(mmp_label); + + return (error); +} + +/* + * Load an existing storage pool, using the pool's builtin spa_config as a + * source of configuration information. + */ +__attribute__((always_inline)) +static inline int +spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config, + spa_load_state_t state, spa_import_type_t type, boolean_t mosconfig, + char **ereport) +{ + int error = 0; + nvlist_t *nvroot = NULL; + nvlist_t *label; + vdev_t *rvd; + uberblock_t *ub = &spa->spa_uberblock; + uint64_t children, config_cache_txg = spa->spa_config_txg; + int orig_mode = spa->spa_mode; + int parse, i; + uint64_t obj; + boolean_t missing_feat_write = B_FALSE; + boolean_t activity_check = B_FALSE; + nvlist_t *mos_config; + + /* + * If this is an untrusted config, access the pool in read-only mode. + * This prevents things like resilvering recently removed devices. + */ + if (!mosconfig) + spa->spa_mode = FREAD; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + spa->spa_load_state = state; + + if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvroot)) + return (SET_ERROR(EINVAL)); + + parse = (type == SPA_IMPORT_EXISTING ? + VDEV_ALLOC_LOAD : VDEV_ALLOC_SPLIT); + + /* + * Create "The Godfather" zio to hold all async IOs + */ + spa->spa_async_zio_root = kmem_alloc(max_ncpus * sizeof (void *), + KM_SLEEP); + for (i = 0; i < max_ncpus; i++) { + spa->spa_async_zio_root[i] = zio_root(spa, NULL, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | + ZIO_FLAG_GODFATHER); + } + + /* + * Parse the configuration into a vdev tree. We explicitly set the + * value that will be returned by spa_version() since parsing the + * configuration requires knowing the version number. + */ + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + error = spa_config_parse(spa, &rvd, nvroot, NULL, 0, parse); + spa_config_exit(spa, SCL_ALL, FTAG); + + if (error != 0) + return (error); + + ASSERT(spa->spa_root_vdev == rvd); + ASSERT3U(spa->spa_min_ashift, >=, SPA_MINBLOCKSHIFT); + ASSERT3U(spa->spa_max_ashift, <=, SPA_MAXBLOCKSHIFT); + + if (type != SPA_IMPORT_ASSEMBLE) { + ASSERT(spa_guid(spa) == pool_guid); + } + + /* + * Try to open all vdevs, loading each label in the process. + */ + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + error = vdev_open(rvd); + spa_config_exit(spa, SCL_ALL, FTAG); + if (error != 0) + return (error); + + /* + * We need to validate the vdev labels against the configuration that + * we have in hand, which is dependent on the setting of mosconfig. If + * mosconfig is true then we're validating the vdev labels based on + * that config. Otherwise, we're validating against the cached config + * (zpool.cache) that was read when we loaded the zfs module, and then + * later we will recursively call spa_load() and validate against + * the vdev config. + * + * If we're assembling a new pool that's been split off from an + * existing pool, the labels haven't yet been updated so we skip + * validation for now. + */ + if (type != SPA_IMPORT_ASSEMBLE) { + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + error = vdev_validate(rvd, mosconfig); + spa_config_exit(spa, SCL_ALL, FTAG); + + if (error != 0) + return (error); + + if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) + return (SET_ERROR(ENXIO)); + } + + /* + * Find the best uberblock. + */ + vdev_uberblock_load(rvd, ub, &label); + + /* + * If we weren't able to find a single valid uberblock, return failure. + */ + if (ub->ub_txg == 0) { + nvlist_free(label); + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, ENXIO)); + } + + /* + * For pools which have the multihost property on determine if the + * pool is truly inactive and can be safely imported. Prevent + * hosts which don't have a hostid set from importing the pool. + */ + activity_check = spa_activity_check_required(spa, ub, label, config); + if (activity_check) { + if (ub->ub_mmp_magic == MMP_MAGIC && ub->ub_mmp_delay && + spa_get_hostid() == 0) { + nvlist_free(label); + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_STATE, MMP_STATE_NO_HOSTID); + return (spa_vdev_err(rvd, VDEV_AUX_ACTIVE, EREMOTEIO)); + } + + error = spa_activity_check(spa, ub, config); + if (error) { + nvlist_free(label); + return (error); + } + + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_STATE, MMP_STATE_INACTIVE); + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_TXG, ub->ub_txg); + } + + /* + * If the pool has an unsupported version we can't open it. + */ + if (!SPA_VERSION_IS_SUPPORTED(ub->ub_version)) { + nvlist_free(label); + return (spa_vdev_err(rvd, VDEV_AUX_VERSION_NEWER, ENOTSUP)); + } + + if (ub->ub_version >= SPA_VERSION_FEATURES) { + nvlist_t *features; + + /* + * If we weren't able to find what's necessary for reading the + * MOS in the label, return failure. + */ + if (label == NULL || nvlist_lookup_nvlist(label, + ZPOOL_CONFIG_FEATURES_FOR_READ, &features) != 0) { + nvlist_free(label); + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, + ENXIO)); + } + + /* + * Update our in-core representation with the definitive values + * from the label. + */ + nvlist_free(spa->spa_label_features); + VERIFY(nvlist_dup(features, &spa->spa_label_features, 0) == 0); + } + + nvlist_free(label); + + /* + * Look through entries in the label nvlist's features_for_read. If + * there is a feature listed there which we don't understand then we + * cannot open a pool. + */ + if (ub->ub_version >= SPA_VERSION_FEATURES) { + nvlist_t *unsup_feat; + nvpair_t *nvp; + + VERIFY(nvlist_alloc(&unsup_feat, NV_UNIQUE_NAME, KM_SLEEP) == + 0); + + for (nvp = nvlist_next_nvpair(spa->spa_label_features, NULL); + nvp != NULL; + nvp = nvlist_next_nvpair(spa->spa_label_features, nvp)) { + if (!zfeature_is_supported(nvpair_name(nvp))) { + VERIFY(nvlist_add_string(unsup_feat, + nvpair_name(nvp), "") == 0); + } + } + + if (!nvlist_empty(unsup_feat)) { + VERIFY(nvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat) == 0); + nvlist_free(unsup_feat); + return (spa_vdev_err(rvd, VDEV_AUX_UNSUP_FEAT, + ENOTSUP)); + } + + nvlist_free(unsup_feat); + } + + /* + * If the vdev guid sum doesn't match the uberblock, we have an + * incomplete configuration. We first check to see if the pool + * is aware of the complete config (i.e ZPOOL_CONFIG_VDEV_CHILDREN). + * If it is, defer the vdev_guid_sum check till later so we + * can handle missing vdevs. + */ + if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_VDEV_CHILDREN, + &children) != 0 && mosconfig && type != SPA_IMPORT_ASSEMBLE && + rvd->vdev_guid_sum != ub->ub_guid_sum) + return (spa_vdev_err(rvd, VDEV_AUX_BAD_GUID_SUM, ENXIO)); + + if (type != SPA_IMPORT_ASSEMBLE && spa->spa_config_splitting) { + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_try_repair(spa, config); + spa_config_exit(spa, SCL_ALL, FTAG); + nvlist_free(spa->spa_config_splitting); + spa->spa_config_splitting = NULL; + } + + /* + * Initialize internal SPA structures. + */ + spa->spa_state = POOL_STATE_ACTIVE; + spa->spa_ubsync = spa->spa_uberblock; + spa->spa_verify_min_txg = spa->spa_extreme_rewind ? + TXG_INITIAL - 1 : spa_last_synced_txg(spa) - TXG_DEFER_SIZE - 1; + spa->spa_first_txg = spa->spa_last_ubsync_txg ? + spa->spa_last_ubsync_txg : spa_last_synced_txg(spa) + 1; + spa->spa_claim_max_txg = spa->spa_first_txg; + spa->spa_prev_software_version = ub->ub_software_version; + + error = dsl_pool_init(spa, spa->spa_first_txg, &spa->spa_dsl_pool); + if (error) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + spa->spa_meta_objset = spa->spa_dsl_pool->dp_meta_objset; + + if (spa_dir_prop(spa, DMU_POOL_CONFIG, &spa->spa_config_object) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + if (spa_version(spa) >= SPA_VERSION_FEATURES) { + boolean_t missing_feat_read = B_FALSE; + nvlist_t *unsup_feat, *enabled_feat; + spa_feature_t i; + + if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_READ, + &spa->spa_feat_for_read_obj) != 0) { + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } + + if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_WRITE, + &spa->spa_feat_for_write_obj) != 0) { + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } + + if (spa_dir_prop(spa, DMU_POOL_FEATURE_DESCRIPTIONS, + &spa->spa_feat_desc_obj) != 0) { + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } + + enabled_feat = fnvlist_alloc(); + unsup_feat = fnvlist_alloc(); + + if (!spa_features_check(spa, B_FALSE, + unsup_feat, enabled_feat)) + missing_feat_read = B_TRUE; + + if (spa_writeable(spa) || state == SPA_LOAD_TRYIMPORT) { + if (!spa_features_check(spa, B_TRUE, + unsup_feat, enabled_feat)) { + missing_feat_write = B_TRUE; + } + } + + fnvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_ENABLED_FEAT, enabled_feat); + + if (!nvlist_empty(unsup_feat)) { + fnvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat); + } + + fnvlist_free(enabled_feat); + fnvlist_free(unsup_feat); + + if (!missing_feat_read) { + fnvlist_add_boolean(spa->spa_load_info, + ZPOOL_CONFIG_CAN_RDONLY); + } + + /* + * If the state is SPA_LOAD_TRYIMPORT, our objective is + * twofold: to determine whether the pool is available for + * import in read-write mode and (if it is not) whether the + * pool is available for import in read-only mode. If the pool + * is available for import in read-write mode, it is displayed + * as available in userland; if it is not available for import + * in read-only mode, it is displayed as unavailable in + * userland. If the pool is available for import in read-only + * mode but not read-write mode, it is displayed as unavailable + * in userland with a special note that the pool is actually + * available for open in read-only mode. + * + * As a result, if the state is SPA_LOAD_TRYIMPORT and we are + * missing a feature for write, we must first determine whether + * the pool can be opened read-only before returning to + * userland in order to know whether to display the + * abovementioned note. + */ + if (missing_feat_read || (missing_feat_write && + spa_writeable(spa))) { + return (spa_vdev_err(rvd, VDEV_AUX_UNSUP_FEAT, + ENOTSUP)); + } + + /* + * Load refcounts for ZFS features from disk into an in-memory + * cache during SPA initialization. + */ + for (i = 0; i < SPA_FEATURES; i++) { + uint64_t refcount; + + error = feature_get_refcount_from_disk(spa, + &spa_feature_table[i], &refcount); + if (error == 0) { + spa->spa_feat_refcount_cache[i] = refcount; + } else if (error == ENOTSUP) { + spa->spa_feat_refcount_cache[i] = + SPA_FEATURE_DISABLED; + } else { + return (spa_vdev_err(rvd, + VDEV_AUX_CORRUPT_DATA, EIO)); + } + } + } + + if (spa_feature_is_active(spa, SPA_FEATURE_ENABLED_TXG)) { + if (spa_dir_prop(spa, DMU_POOL_FEATURE_ENABLED_TXG, + &spa->spa_feat_enabled_txg_obj) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } + + spa->spa_is_initializing = B_TRUE; + error = dsl_pool_open(spa->spa_dsl_pool); + spa->spa_is_initializing = B_FALSE; + if (error != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + if (!mosconfig) { + uint64_t hostid; + nvlist_t *policy = NULL, *nvconfig; + + if (load_nvlist(spa, spa->spa_config_object, &nvconfig) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + if (!spa_is_root(spa) && nvlist_lookup_uint64(nvconfig, + ZPOOL_CONFIG_HOSTID, &hostid) == 0) { + char *hostname; + unsigned long myhostid = 0; + + VERIFY(nvlist_lookup_string(nvconfig, + ZPOOL_CONFIG_HOSTNAME, &hostname) == 0); + + myhostid = spa_get_hostid(); + if (hostid && myhostid && hostid != myhostid) { + nvlist_free(nvconfig); + return (SET_ERROR(EBADF)); + } + } + if (nvlist_lookup_nvlist(spa->spa_config, + ZPOOL_REWIND_POLICY, &policy) == 0) + VERIFY(nvlist_add_nvlist(nvconfig, + ZPOOL_REWIND_POLICY, policy) == 0); + + spa_config_set(spa, nvconfig); + spa_unload(spa); + spa_deactivate(spa); + spa_activate(spa, orig_mode); + + return (spa_load(spa, state, SPA_IMPORT_EXISTING, B_TRUE)); + } + + /* Grab the checksum salt from the MOS. */ + error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_CHECKSUM_SALT, 1, + sizeof (spa->spa_cksum_salt.zcs_bytes), + spa->spa_cksum_salt.zcs_bytes); + if (error == ENOENT) { + /* Generate a new salt for subsequent use */ + (void) random_get_pseudo_bytes(spa->spa_cksum_salt.zcs_bytes, + sizeof (spa->spa_cksum_salt.zcs_bytes)); + } else if (error != 0) { + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } + + if (spa_dir_prop(spa, DMU_POOL_SYNC_BPOBJ, &obj) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + error = bpobj_open(&spa->spa_deferred_bpobj, spa->spa_meta_objset, obj); + if (error != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + /* + * Load the bit that tells us to use the new accounting function + * (raid-z deflation). If we have an older pool, this will not + * be present. + */ + error = spa_dir_prop(spa, DMU_POOL_DEFLATE, &spa->spa_deflate); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + error = spa_dir_prop(spa, DMU_POOL_CREATION_VERSION, + &spa->spa_creation_version); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + /* + * Load the persistent error log. If we have an older pool, this will + * not be present. + */ + error = spa_dir_prop(spa, DMU_POOL_ERRLOG_LAST, &spa->spa_errlog_last); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + error = spa_dir_prop(spa, DMU_POOL_ERRLOG_SCRUB, + &spa->spa_errlog_scrub); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + /* + * Load the history object. If we have an older pool, this + * will not be present. + */ + error = spa_dir_prop(spa, DMU_POOL_HISTORY, &spa->spa_history); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + /* + * Load the per-vdev ZAP map. If we have an older pool, this will not + * be present; in this case, defer its creation to a later time to + * avoid dirtying the MOS this early / out of sync context. See + * spa_sync_config_object. + */ + + /* The sentinel is only available in the MOS config. */ + if (load_nvlist(spa, spa->spa_config_object, &mos_config) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + error = spa_dir_prop(spa, DMU_POOL_VDEV_ZAP_MAP, + &spa->spa_all_vdev_zaps); + + if (error == ENOENT) { + VERIFY(!nvlist_exists(mos_config, + ZPOOL_CONFIG_HAS_PER_VDEV_ZAPS)); + spa->spa_avz_action = AVZ_ACTION_INITIALIZE; + ASSERT0(vdev_count_verify_zaps(spa->spa_root_vdev)); + } else if (error != 0) { + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + } else if (!nvlist_exists(mos_config, ZPOOL_CONFIG_HAS_PER_VDEV_ZAPS)) { + /* + * An older version of ZFS overwrote the sentinel value, so + * we have orphaned per-vdev ZAPs in the MOS. Defer their + * destruction to later; see spa_sync_config_object. + */ + spa->spa_avz_action = AVZ_ACTION_DESTROY; + /* + * We're assuming that no vdevs have had their ZAPs created + * before this. Better be sure of it. + */ + ASSERT0(vdev_count_verify_zaps(spa->spa_root_vdev)); + } + nvlist_free(mos_config); + + /* + * If we're assembling the pool from the split-off vdevs of + * an existing pool, we don't want to attach the spares & cache + * devices. + */ + + /* + * Load any hot spares for this pool. + */ + error = spa_dir_prop(spa, DMU_POOL_SPARES, &spa->spa_spares.sav_object); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + if (error == 0 && type != SPA_IMPORT_ASSEMBLE) { + ASSERT(spa_version(spa) >= SPA_VERSION_SPARES); + if (load_nvlist(spa, spa->spa_spares.sav_object, + &spa->spa_spares.sav_config) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_spares(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + } else if (error == 0) { + spa->spa_spares.sav_sync = B_TRUE; + } + + /* + * Load any level 2 ARC devices for this pool. + */ + error = spa_dir_prop(spa, DMU_POOL_L2CACHE, + &spa->spa_l2cache.sav_object); + if (error != 0 && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + if (error == 0 && type != SPA_IMPORT_ASSEMBLE) { + ASSERT(spa_version(spa) >= SPA_VERSION_L2CACHE); + if (load_nvlist(spa, spa->spa_l2cache.sav_object, + &spa->spa_l2cache.sav_config) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_l2cache(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + } else if (error == 0) { + spa->spa_l2cache.sav_sync = B_TRUE; + } + + spa->spa_delegation = zpool_prop_default_numeric(ZPOOL_PROP_DELEGATION); + + error = spa_dir_prop(spa, DMU_POOL_PROPS, &spa->spa_pool_props_object); + if (error && error != ENOENT) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + if (error == 0) { + uint64_t autoreplace = 0; + + spa_prop_find(spa, ZPOOL_PROP_BOOTFS, &spa->spa_bootfs); + spa_prop_find(spa, ZPOOL_PROP_AUTOREPLACE, &autoreplace); + spa_prop_find(spa, ZPOOL_PROP_DELEGATION, &spa->spa_delegation); + spa_prop_find(spa, ZPOOL_PROP_FAILUREMODE, &spa->spa_failmode); + spa_prop_find(spa, ZPOOL_PROP_AUTOEXPAND, &spa->spa_autoexpand); + spa_prop_find(spa, ZPOOL_PROP_MULTIHOST, &spa->spa_multihost); + spa_prop_find(spa, ZPOOL_PROP_DEDUPDITTO, + &spa->spa_dedup_ditto); + + spa->spa_autoreplace = (autoreplace != 0); + } + + /* + * If the 'multihost' property is set, then never allow a pool to + * be imported when the system hostid is zero. The exception to + * this rule is zdb which is always allowed to access pools. + */ + if (spa_multihost(spa) && spa_get_hostid() == 0 && + (spa->spa_import_flags & ZFS_IMPORT_SKIP_MMP) == 0) { + fnvlist_add_uint64(spa->spa_load_info, + ZPOOL_CONFIG_MMP_STATE, MMP_STATE_NO_HOSTID); + return (spa_vdev_err(rvd, VDEV_AUX_ACTIVE, EREMOTEIO)); + } + + /* + * If the 'autoreplace' property is set, then post a resource notifying + * the ZFS DE that it should not issue any faults for unopenable + * devices. We also iterate over the vdevs, and post a sysevent for any + * unopenable vdevs so that the normal autoreplace handler can take + * over. + */ + if (spa->spa_autoreplace && state != SPA_LOAD_TRYIMPORT) { + spa_check_removed(spa->spa_root_vdev); + /* + * For the import case, this is done in spa_import(), because + * at this point we're using the spare definitions from + * the MOS config, not necessarily from the userland config. + */ + if (state != SPA_LOAD_IMPORT) { + spa_aux_check_removed(&spa->spa_spares); + spa_aux_check_removed(&spa->spa_l2cache); + } + } + + /* + * Load the vdev state for all toplevel vdevs. + */ + vdev_load(rvd); + + /* + * Propagate the leaf DTLs we just loaded all the way up the tree. + */ + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + vdev_dtl_reassess(rvd, 0, 0, B_FALSE); + spa_config_exit(spa, SCL_ALL, FTAG); + + /* + * Load the DDTs (dedup tables). + */ + error = ddt_load(spa); + if (error != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + spa_update_dspace(spa); + + /* + * Validate the config, using the MOS config to fill in any + * information which might be missing. If we fail to validate + * the config then declare the pool unfit for use. If we're + * assembling a pool from a split, the log is not transferred + * over. + */ + if (type != SPA_IMPORT_ASSEMBLE) { + nvlist_t *nvconfig; + + if (load_nvlist(spa, spa->spa_config_object, &nvconfig) != 0) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); + + if (!spa_config_valid(spa, nvconfig)) { + nvlist_free(nvconfig); + return (spa_vdev_err(rvd, VDEV_AUX_BAD_GUID_SUM, + ENXIO)); + } + nvlist_free(nvconfig); + + /* + * Now that we've validated the config, check the state of the + * root vdev. If it can't be opened, it indicates one or + * more toplevel vdevs are faulted. + */ + if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) + return (SET_ERROR(ENXIO)); + + if (spa_writeable(spa) && spa_check_logs(spa)) { + *ereport = FM_EREPORT_ZFS_LOG_REPLAY; + return (spa_vdev_err(rvd, VDEV_AUX_BAD_LOG, ENXIO)); + } + } + + if (missing_feat_write) { + ASSERT(state == SPA_LOAD_TRYIMPORT); + + /* + * At this point, we know that we can open the pool in + * read-only mode but not read-write mode. We now have enough + * information and can return to userland. + */ + return (spa_vdev_err(rvd, VDEV_AUX_UNSUP_FEAT, ENOTSUP)); + } + + /* + * We've successfully opened the pool, verify that we're ready + * to start pushing transactions. + */ + if (state != SPA_LOAD_TRYIMPORT) { + if ((error = spa_load_verify(spa))) + return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, + error)); + } + + if (spa_writeable(spa) && (state == SPA_LOAD_RECOVER || + spa->spa_load_max_txg == UINT64_MAX)) { + dmu_tx_t *tx; + int need_update = B_FALSE; + dsl_pool_t *dp = spa_get_dsl(spa); + int c; + + ASSERT(state != SPA_LOAD_TRYIMPORT); + + /* + * Claim log blocks that haven't been committed yet. + * This must all happen in a single txg. + * Note: spa_claim_max_txg is updated by spa_claim_notify(), + * invoked from zil_claim_log_block()'s i/o done callback. + * Price of rollback is that we abandon the log. + */ + spa->spa_claiming = B_TRUE; + + tx = dmu_tx_create_assigned(dp, spa_first_txg(spa)); + (void) dmu_objset_find_dp(dp, dp->dp_root_dir_obj, + zil_claim, tx, DS_FIND_CHILDREN); + dmu_tx_commit(tx); + + spa->spa_claiming = B_FALSE; + + spa_set_log_state(spa, SPA_LOG_GOOD); + spa->spa_sync_on = B_TRUE; + txg_sync_start(spa->spa_dsl_pool); + mmp_thread_start(spa); + + /* + * Wait for all claims to sync. We sync up to the highest + * claimed log block birth time so that claimed log blocks + * don't appear to be from the future. spa_claim_max_txg + * will have been set for us by either zil_check_log_chain() + * (invoked from spa_check_logs()) or zil_claim() above. + */ + txg_wait_synced(spa->spa_dsl_pool, spa->spa_claim_max_txg); + + /* + * If the config cache is stale, or we have uninitialized + * metaslabs (see spa_vdev_add()), then update the config. + * + * If this is a verbatim import, trust the current + * in-core spa_config and update the disk labels. + */ + if (config_cache_txg != spa->spa_config_txg || + state == SPA_LOAD_IMPORT || + state == SPA_LOAD_RECOVER || + (spa->spa_import_flags & ZFS_IMPORT_VERBATIM)) + need_update = B_TRUE; + + for (c = 0; c < rvd->vdev_children; c++) + if (rvd->vdev_child[c]->vdev_ms_array == 0) + need_update = B_TRUE; + + /* + * Update the config cache asychronously in case we're the + * root pool, in which case the config cache isn't writable yet. + */ + if (need_update) + spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); + + /* + * Check all DTLs to see if anything needs resilvering. + */ + if (!dsl_scan_resilvering(spa->spa_dsl_pool) && + vdev_resilver_needed(rvd, NULL, NULL)) + spa_async_request(spa, SPA_ASYNC_RESILVER); + + /* + * Log the fact that we booted up (so that we can detect if + * we rebooted in the middle of an operation). + */ + spa_history_log_version(spa, "open", NULL); + + /* + * Delete any inconsistent datasets. + */ + (void) dmu_objset_find(spa_name(spa), + dsl_destroy_inconsistent, NULL, DS_FIND_CHILDREN); + + /* + * Clean up any stale temporary dataset userrefs. + */ + dsl_pool_clean_tmp_userrefs(spa->spa_dsl_pool); + } + + return (0); +} + +static int +spa_load_retry(spa_t *spa, spa_load_state_t state, int mosconfig) +{ + int mode = spa->spa_mode; + + spa_unload(spa); + spa_deactivate(spa); + + spa->spa_load_max_txg = spa->spa_uberblock.ub_txg - 1; + + spa_activate(spa, mode); + spa_async_suspend(spa); + + return (spa_load(spa, state, SPA_IMPORT_EXISTING, mosconfig)); +} + +/* + * If spa_load() fails this function will try loading prior txg's. If + * 'state' is SPA_LOAD_RECOVER and one of these loads succeeds the pool + * will be rewound to that txg. If 'state' is not SPA_LOAD_RECOVER this + * function will not rewind the pool and will return the same error as + * spa_load(). + */ +static int +spa_load_best(spa_t *spa, spa_load_state_t state, int mosconfig, + uint64_t max_request, int rewind_flags) +{ + nvlist_t *loadinfo = NULL; + nvlist_t *config = NULL; + int load_error, rewind_error; + uint64_t safe_rewind_txg; + uint64_t min_txg; + + if (spa->spa_load_txg && state == SPA_LOAD_RECOVER) { + spa->spa_load_max_txg = spa->spa_load_txg; + spa_set_log_state(spa, SPA_LOG_CLEAR); + } else { + spa->spa_load_max_txg = max_request; + if (max_request != UINT64_MAX) + spa->spa_extreme_rewind = B_TRUE; + } + + load_error = rewind_error = spa_load(spa, state, SPA_IMPORT_EXISTING, + mosconfig); + if (load_error == 0) + return (0); + + if (spa->spa_root_vdev != NULL) + config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); + + spa->spa_last_ubsync_txg = spa->spa_uberblock.ub_txg; + spa->spa_last_ubsync_txg_ts = spa->spa_uberblock.ub_timestamp; + + if (rewind_flags & ZPOOL_NEVER_REWIND) { + nvlist_free(config); + return (load_error); + } + + if (state == SPA_LOAD_RECOVER) { + /* Price of rolling back is discarding txgs, including log */ + spa_set_log_state(spa, SPA_LOG_CLEAR); + } else { + /* + * If we aren't rolling back save the load info from our first + * import attempt so that we can restore it after attempting + * to rewind. + */ + loadinfo = spa->spa_load_info; + spa->spa_load_info = fnvlist_alloc(); + } + + spa->spa_load_max_txg = spa->spa_last_ubsync_txg; + safe_rewind_txg = spa->spa_last_ubsync_txg - TXG_DEFER_SIZE; + min_txg = (rewind_flags & ZPOOL_EXTREME_REWIND) ? + TXG_INITIAL : safe_rewind_txg; + + /* + * Continue as long as we're finding errors, we're still within + * the acceptable rewind range, and we're still finding uberblocks + */ + while (rewind_error && spa->spa_uberblock.ub_txg >= min_txg && + spa->spa_uberblock.ub_txg <= spa->spa_load_max_txg) { + if (spa->spa_load_max_txg < safe_rewind_txg) + spa->spa_extreme_rewind = B_TRUE; + rewind_error = spa_load_retry(spa, state, mosconfig); + } + + spa->spa_extreme_rewind = B_FALSE; + spa->spa_load_max_txg = UINT64_MAX; + + if (config && (rewind_error || state != SPA_LOAD_RECOVER)) + spa_config_set(spa, config); + else + nvlist_free(config); + + if (state == SPA_LOAD_RECOVER) { + ASSERT3P(loadinfo, ==, NULL); + return (rewind_error); + } else { + /* Store the rewind info as part of the initial load info */ + fnvlist_add_nvlist(loadinfo, ZPOOL_CONFIG_REWIND_INFO, + spa->spa_load_info); + + /* Restore the initial load info */ + fnvlist_free(spa->spa_load_info); + spa->spa_load_info = loadinfo; + + return (load_error); + } +} + +/* + * Pool Open/Import + * + * The import case is identical to an open except that the configuration is sent + * down from userland, instead of grabbed from the configuration cache. For the + * case of an open, the pool configuration will exist in the + * POOL_STATE_UNINITIALIZED state. + * + * The stats information (gen/count/ustats) is used to gather vdev statistics at + * the same time open the pool, without having to keep around the spa_t in some + * ambiguous state. + */ +static int +spa_open_common(const char *pool, spa_t **spapp, void *tag, nvlist_t *nvpolicy, + nvlist_t **config) +{ + spa_t *spa; + spa_load_state_t state = SPA_LOAD_OPEN; + int error; + int locked = B_FALSE; + int firstopen = B_FALSE; + + *spapp = NULL; + + /* + * As disgusting as this is, we need to support recursive calls to this + * function because dsl_dir_open() is called during spa_load(), and ends + * up calling spa_open() again. The real fix is to figure out how to + * avoid dsl_dir_open() calling this in the first place. + */ + if (mutex_owner(&spa_namespace_lock) != curthread) { + mutex_enter(&spa_namespace_lock); + locked = B_TRUE; + } + + if ((spa = spa_lookup(pool)) == NULL) { + if (locked) + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(ENOENT)); + } + + if (spa->spa_state == POOL_STATE_UNINITIALIZED) { + zpool_rewind_policy_t policy; + + firstopen = B_TRUE; + + zpool_get_rewind_policy(nvpolicy ? nvpolicy : spa->spa_config, + &policy); + if (policy.zrp_request & ZPOOL_DO_REWIND) + state = SPA_LOAD_RECOVER; + + spa_activate(spa, spa_mode_global); + + if (state != SPA_LOAD_RECOVER) + spa->spa_last_ubsync_txg = spa->spa_load_txg = 0; + + error = spa_load_best(spa, state, B_FALSE, policy.zrp_txg, + policy.zrp_request); + + if (error == EBADF) { + /* + * If vdev_validate() returns failure (indicated by + * EBADF), it indicates that one of the vdevs indicates + * that the pool has been exported or destroyed. If + * this is the case, the config cache is out of sync and + * we should remove the pool from the namespace. + */ + spa_unload(spa); + spa_deactivate(spa); + spa_config_sync(spa, B_TRUE, B_TRUE); + spa_remove(spa); + if (locked) + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(ENOENT)); + } + + if (error) { + /* + * We can't open the pool, but we still have useful + * information: the state of each vdev after the + * attempted vdev_open(). Return this to the user. + */ + if (config != NULL && spa->spa_config) { + VERIFY(nvlist_dup(spa->spa_config, config, + KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist(*config, + ZPOOL_CONFIG_LOAD_INFO, + spa->spa_load_info) == 0); + } + spa_unload(spa); + spa_deactivate(spa); + spa->spa_last_open_failed = error; + if (locked) + mutex_exit(&spa_namespace_lock); + *spapp = NULL; + return (error); + } + } + + spa_open_ref(spa, tag); + + if (config != NULL) + *config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); + + /* + * If we've recovered the pool, pass back any information we + * gathered while doing the load. + */ + if (state == SPA_LOAD_RECOVER) { + VERIFY(nvlist_add_nvlist(*config, ZPOOL_CONFIG_LOAD_INFO, + spa->spa_load_info) == 0); + } + + if (locked) { + spa->spa_last_open_failed = 0; + spa->spa_last_ubsync_txg = 0; + spa->spa_load_txg = 0; + mutex_exit(&spa_namespace_lock); + } + + if (firstopen) + zvol_create_minors(spa, spa_name(spa), B_TRUE); + + *spapp = spa; + + return (0); +} + +int +spa_open_rewind(const char *name, spa_t **spapp, void *tag, nvlist_t *policy, + nvlist_t **config) +{ + return (spa_open_common(name, spapp, tag, policy, config)); +} + +int +spa_open(const char *name, spa_t **spapp, void *tag) +{ + return (spa_open_common(name, spapp, tag, NULL, NULL)); +} + +/* + * Lookup the given spa_t, incrementing the inject count in the process, + * preventing it from being exported or destroyed. + */ +spa_t * +spa_inject_addref(char *name) +{ + spa_t *spa; + + mutex_enter(&spa_namespace_lock); + if ((spa = spa_lookup(name)) == NULL) { + mutex_exit(&spa_namespace_lock); + return (NULL); + } + spa->spa_inject_ref++; + mutex_exit(&spa_namespace_lock); + + return (spa); +} + +void +spa_inject_delref(spa_t *spa) +{ + mutex_enter(&spa_namespace_lock); + spa->spa_inject_ref--; + mutex_exit(&spa_namespace_lock); +} + +/* + * Add spares device information to the nvlist. + */ +static void +spa_add_spares(spa_t *spa, nvlist_t *config) +{ + nvlist_t **spares; + uint_t i, nspares; + nvlist_t *nvroot; + uint64_t guid; + vdev_stat_t *vs; + uint_t vsc; + uint64_t pool; + + ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER)); + + if (spa->spa_spares.sav_count == 0) + return; + + VERIFY(nvlist_lookup_nvlist(config, + ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0); + VERIFY(nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); + if (nspares != 0) { + VERIFY(nvlist_add_nvlist_array(nvroot, + ZPOOL_CONFIG_SPARES, spares, nspares) == 0); + VERIFY(nvlist_lookup_nvlist_array(nvroot, + ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); + + /* + * Go through and find any spares which have since been + * repurposed as an active spare. If this is the case, update + * their status appropriately. + */ + for (i = 0; i < nspares; i++) { + VERIFY(nvlist_lookup_uint64(spares[i], + ZPOOL_CONFIG_GUID, &guid) == 0); + if (spa_spare_exists(guid, &pool, NULL) && + pool != 0ULL) { + VERIFY(nvlist_lookup_uint64_array( + spares[i], ZPOOL_CONFIG_VDEV_STATS, + (uint64_t **)&vs, &vsc) == 0); + vs->vs_state = VDEV_STATE_CANT_OPEN; + vs->vs_aux = VDEV_AUX_SPARED; + } + } + } +} + +/* + * Add l2cache device information to the nvlist, including vdev stats. + */ +static void +spa_add_l2cache(spa_t *spa, nvlist_t *config) +{ + nvlist_t **l2cache; + uint_t i, j, nl2cache; + nvlist_t *nvroot; + uint64_t guid; + vdev_t *vd; + vdev_stat_t *vs; + uint_t vsc; + + ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER)); + + if (spa->spa_l2cache.sav_count == 0) + return; + + VERIFY(nvlist_lookup_nvlist(config, + ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0); + VERIFY(nvlist_lookup_nvlist_array(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); + if (nl2cache != 0) { + VERIFY(nvlist_add_nvlist_array(nvroot, + ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); + VERIFY(nvlist_lookup_nvlist_array(nvroot, + ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); + + /* + * Update level 2 cache device stats. + */ + + for (i = 0; i < nl2cache; i++) { + VERIFY(nvlist_lookup_uint64(l2cache[i], + ZPOOL_CONFIG_GUID, &guid) == 0); + + vd = NULL; + for (j = 0; j < spa->spa_l2cache.sav_count; j++) { + if (guid == + spa->spa_l2cache.sav_vdevs[j]->vdev_guid) { + vd = spa->spa_l2cache.sav_vdevs[j]; + break; + } + } + ASSERT(vd != NULL); + + VERIFY(nvlist_lookup_uint64_array(l2cache[i], + ZPOOL_CONFIG_VDEV_STATS, (uint64_t **)&vs, &vsc) + == 0); + vdev_get_stats(vd, vs); + vdev_config_generate_stats(vd, l2cache[i]); + + } + } +} + +static void +spa_feature_stats_from_disk(spa_t *spa, nvlist_t *features) +{ + zap_cursor_t zc; + zap_attribute_t za; + + if (spa->spa_feat_for_read_obj != 0) { + for (zap_cursor_init(&zc, spa->spa_meta_objset, + spa->spa_feat_for_read_obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + ASSERT(za.za_integer_length == sizeof (uint64_t) && + za.za_num_integers == 1); + VERIFY0(nvlist_add_uint64(features, za.za_name, + za.za_first_integer)); + } + zap_cursor_fini(&zc); + } + + if (spa->spa_feat_for_write_obj != 0) { + for (zap_cursor_init(&zc, spa->spa_meta_objset, + spa->spa_feat_for_write_obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + ASSERT(za.za_integer_length == sizeof (uint64_t) && + za.za_num_integers == 1); + VERIFY0(nvlist_add_uint64(features, za.za_name, + za.za_first_integer)); + } + zap_cursor_fini(&zc); + } +} + +static void +spa_feature_stats_from_cache(spa_t *spa, nvlist_t *features) +{ + int i; + + for (i = 0; i < SPA_FEATURES; i++) { + zfeature_info_t feature = spa_feature_table[i]; + uint64_t refcount; + + if (feature_get_refcount(spa, &feature, &refcount) != 0) + continue; + + VERIFY0(nvlist_add_uint64(features, feature.fi_guid, refcount)); + } +} + +/* + * Store a list of pool features and their reference counts in the + * config. + * + * The first time this is called on a spa, allocate a new nvlist, fetch + * the pool features and reference counts from disk, then save the list + * in the spa. In subsequent calls on the same spa use the saved nvlist + * and refresh its values from the cached reference counts. This + * ensures we don't block here on I/O on a suspended pool so 'zpool + * clear' can resume the pool. + */ +static void +spa_add_feature_stats(spa_t *spa, nvlist_t *config) +{ + nvlist_t *features; + + ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER)); + + mutex_enter(&spa->spa_feat_stats_lock); + features = spa->spa_feat_stats; + + if (features != NULL) { + spa_feature_stats_from_cache(spa, features); + } else { + VERIFY0(nvlist_alloc(&features, NV_UNIQUE_NAME, KM_SLEEP)); + spa->spa_feat_stats = features; + spa_feature_stats_from_disk(spa, features); + } + + VERIFY0(nvlist_add_nvlist(config, ZPOOL_CONFIG_FEATURE_STATS, + features)); + + mutex_exit(&spa->spa_feat_stats_lock); +} + +int +spa_get_stats(const char *name, nvlist_t **config, + char *altroot, size_t buflen) +{ + int error; + spa_t *spa; + + *config = NULL; + error = spa_open_common(name, &spa, FTAG, NULL, config); + + if (spa != NULL) { + /* + * This still leaves a window of inconsistency where the spares + * or l2cache devices could change and the config would be + * self-inconsistent. + */ + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + + if (*config != NULL) { + uint64_t loadtimes[2]; + + loadtimes[0] = spa->spa_loaded_ts.tv_sec; + loadtimes[1] = spa->spa_loaded_ts.tv_nsec; + VERIFY(nvlist_add_uint64_array(*config, + ZPOOL_CONFIG_LOADED_TIME, loadtimes, 2) == 0); + + VERIFY(nvlist_add_uint64(*config, + ZPOOL_CONFIG_ERRCOUNT, + spa_get_errlog_size(spa)) == 0); + + if (spa_suspended(spa)) + VERIFY(nvlist_add_uint64(*config, + ZPOOL_CONFIG_SUSPENDED, + spa->spa_failmode) == 0); + + spa_add_spares(spa, *config); + spa_add_l2cache(spa, *config); + spa_add_feature_stats(spa, *config); + } + } + + /* + * We want to get the alternate root even for faulted pools, so we cheat + * and call spa_lookup() directly. + */ + if (altroot) { + if (spa == NULL) { + mutex_enter(&spa_namespace_lock); + spa = spa_lookup(name); + if (spa) + spa_altroot(spa, altroot, buflen); + else + altroot[0] = '\0'; + spa = NULL; + mutex_exit(&spa_namespace_lock); + } else { + spa_altroot(spa, altroot, buflen); + } + } + + if (spa != NULL) { + spa_config_exit(spa, SCL_CONFIG, FTAG); + spa_close(spa, FTAG); + } + + return (error); +} + +/* + * Validate that the auxiliary device array is well formed. We must have an + * array of nvlists, each which describes a valid leaf vdev. If this is an + * import (mode is VDEV_ALLOC_SPARE), then we allow corrupted spares to be + * specified, as long as they are well-formed. + */ +static int +spa_validate_aux_devs(spa_t *spa, nvlist_t *nvroot, uint64_t crtxg, int mode, + spa_aux_vdev_t *sav, const char *config, uint64_t version, + vdev_labeltype_t label) +{ + nvlist_t **dev; + uint_t i, ndev; + vdev_t *vd; + int error; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + /* + * It's acceptable to have no devs specified. + */ + if (nvlist_lookup_nvlist_array(nvroot, config, &dev, &ndev) != 0) + return (0); + + if (ndev == 0) + return (SET_ERROR(EINVAL)); + + /* + * Make sure the pool is formatted with a version that supports this + * device type. + */ + if (spa_version(spa) < version) + return (SET_ERROR(ENOTSUP)); + + /* + * Set the pending device list so we correctly handle device in-use + * checking. + */ + sav->sav_pending = dev; + sav->sav_npending = ndev; + + for (i = 0; i < ndev; i++) { + if ((error = spa_config_parse(spa, &vd, dev[i], NULL, 0, + mode)) != 0) + goto out; + + if (!vd->vdev_ops->vdev_op_leaf) { + vdev_free(vd); + error = SET_ERROR(EINVAL); + goto out; + } + + vd->vdev_top = vd; + + if ((error = vdev_open(vd)) == 0 && + (error = vdev_label_init(vd, crtxg, label)) == 0) { + VERIFY(nvlist_add_uint64(dev[i], ZPOOL_CONFIG_GUID, + vd->vdev_guid) == 0); + } + + vdev_free(vd); + + if (error && + (mode != VDEV_ALLOC_SPARE && mode != VDEV_ALLOC_L2CACHE)) + goto out; + else + error = 0; + } + +out: + sav->sav_pending = NULL; + sav->sav_npending = 0; + return (error); +} + +static int +spa_validate_aux(spa_t *spa, nvlist_t *nvroot, uint64_t crtxg, int mode) +{ + int error; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + if ((error = spa_validate_aux_devs(spa, nvroot, crtxg, mode, + &spa->spa_spares, ZPOOL_CONFIG_SPARES, SPA_VERSION_SPARES, + VDEV_LABEL_SPARE)) != 0) { + return (error); + } + + return (spa_validate_aux_devs(spa, nvroot, crtxg, mode, + &spa->spa_l2cache, ZPOOL_CONFIG_L2CACHE, SPA_VERSION_L2CACHE, + VDEV_LABEL_L2CACHE)); +} + +static void +spa_set_aux_vdevs(spa_aux_vdev_t *sav, nvlist_t **devs, int ndevs, + const char *config) +{ + int i; + + if (sav->sav_config != NULL) { + nvlist_t **olddevs; + uint_t oldndevs; + nvlist_t **newdevs; + + /* + * Generate new dev list by concatenating with the + * current dev list. + */ + VERIFY(nvlist_lookup_nvlist_array(sav->sav_config, config, + &olddevs, &oldndevs) == 0); + + newdevs = kmem_alloc(sizeof (void *) * + (ndevs + oldndevs), KM_SLEEP); + for (i = 0; i < oldndevs; i++) + VERIFY(nvlist_dup(olddevs[i], &newdevs[i], + KM_SLEEP) == 0); + for (i = 0; i < ndevs; i++) + VERIFY(nvlist_dup(devs[i], &newdevs[i + oldndevs], + KM_SLEEP) == 0); + + VERIFY(nvlist_remove(sav->sav_config, config, + DATA_TYPE_NVLIST_ARRAY) == 0); + + VERIFY(nvlist_add_nvlist_array(sav->sav_config, + config, newdevs, ndevs + oldndevs) == 0); + for (i = 0; i < oldndevs + ndevs; i++) + nvlist_free(newdevs[i]); + kmem_free(newdevs, (oldndevs + ndevs) * sizeof (void *)); + } else { + /* + * Generate a new dev list. + */ + VERIFY(nvlist_alloc(&sav->sav_config, NV_UNIQUE_NAME, + KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist_array(sav->sav_config, config, + devs, ndevs) == 0); + } +} + +/* + * Stop and drop level 2 ARC devices + */ +void +spa_l2cache_drop(spa_t *spa) +{ + vdev_t *vd; + int i; + spa_aux_vdev_t *sav = &spa->spa_l2cache; + + for (i = 0; i < sav->sav_count; i++) { + uint64_t pool; + + vd = sav->sav_vdevs[i]; + ASSERT(vd != NULL); + + if (spa_l2cache_exists(vd->vdev_guid, &pool) && + pool != 0ULL && l2arc_vdev_present(vd)) + l2arc_remove_vdev(vd); + } +} + +/* + * Pool Creation + */ +int +spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props, + nvlist_t *zplprops) +{ + spa_t *spa; + char *altroot = NULL; + vdev_t *rvd; + dsl_pool_t *dp; + dmu_tx_t *tx; + int error = 0; + uint64_t txg = TXG_INITIAL; + nvlist_t **spares, **l2cache; + uint_t nspares, nl2cache; + uint64_t version, obj; + boolean_t has_features; + nvpair_t *elem; + int c, i; + char *poolname; + nvlist_t *nvl; + + if (nvlist_lookup_string(props, "tname", &poolname) != 0) + poolname = (char *)pool; + + /* + * If this pool already exists, return failure. + */ + mutex_enter(&spa_namespace_lock); + if (spa_lookup(poolname) != NULL) { + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(EEXIST)); + } + + /* + * Allocate a new spa_t structure. + */ + nvl = fnvlist_alloc(); + fnvlist_add_string(nvl, ZPOOL_CONFIG_POOL_NAME, pool); + (void) nvlist_lookup_string(props, + zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); + spa = spa_add(poolname, nvl, altroot); + fnvlist_free(nvl); + spa_activate(spa, spa_mode_global); + + if (props && (error = spa_prop_validate(spa, props))) { + spa_deactivate(spa); + spa_remove(spa); + mutex_exit(&spa_namespace_lock); + return (error); + } + + /* + * Temporary pool names should never be written to disk. + */ + if (poolname != pool) + spa->spa_import_flags |= ZFS_IMPORT_TEMP_NAME; + + has_features = B_FALSE; + for (elem = nvlist_next_nvpair(props, NULL); + elem != NULL; elem = nvlist_next_nvpair(props, elem)) { + if (zpool_prop_feature(nvpair_name(elem))) + has_features = B_TRUE; + } + + if (has_features || nvlist_lookup_uint64(props, + zpool_prop_to_name(ZPOOL_PROP_VERSION), &version) != 0) { + version = SPA_VERSION; + } + ASSERT(SPA_VERSION_IS_SUPPORTED(version)); + + spa->spa_first_txg = txg; + spa->spa_uberblock.ub_txg = txg - 1; + spa->spa_uberblock.ub_version = version; + spa->spa_ubsync = spa->spa_uberblock; + spa->spa_load_state = SPA_LOAD_CREATE; + + /* + * Create "The Godfather" zio to hold all async IOs + */ + spa->spa_async_zio_root = kmem_alloc(max_ncpus * sizeof (void *), + KM_SLEEP); + for (i = 0; i < max_ncpus; i++) { + spa->spa_async_zio_root[i] = zio_root(spa, NULL, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | + ZIO_FLAG_GODFATHER); + } + + /* + * Create the root vdev. + */ + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + error = spa_config_parse(spa, &rvd, nvroot, NULL, 0, VDEV_ALLOC_ADD); + + ASSERT(error != 0 || rvd != NULL); + ASSERT(error != 0 || spa->spa_root_vdev == rvd); + + if (error == 0 && !zfs_allocatable_devs(nvroot)) + error = SET_ERROR(EINVAL); + + if (error == 0 && + (error = vdev_create(rvd, txg, B_FALSE)) == 0 && + (error = spa_validate_aux(spa, nvroot, txg, + VDEV_ALLOC_ADD)) == 0) { + for (c = 0; c < rvd->vdev_children; c++) { + vdev_metaslab_set_size(rvd->vdev_child[c]); + vdev_expand(rvd->vdev_child[c], txg); + } + } + + spa_config_exit(spa, SCL_ALL, FTAG); + + if (error != 0) { + spa_unload(spa); + spa_deactivate(spa); + spa_remove(spa); + mutex_exit(&spa_namespace_lock); + return (error); + } + + /* + * Get the list of spares, if specified. + */ + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, + &spares, &nspares) == 0) { + VERIFY(nvlist_alloc(&spa->spa_spares.sav_config, NV_UNIQUE_NAME, + KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, spares, nspares) == 0); + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_spares(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + spa->spa_spares.sav_sync = B_TRUE; + } + + /* + * Get the list of level 2 cache devices, if specified. + */ + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, + &l2cache, &nl2cache) == 0) { + VERIFY(nvlist_alloc(&spa->spa_l2cache.sav_config, + NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist_array(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_l2cache(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + spa->spa_l2cache.sav_sync = B_TRUE; + } + + spa->spa_is_initializing = B_TRUE; + spa->spa_dsl_pool = dp = dsl_pool_create(spa, zplprops, txg); + spa->spa_meta_objset = dp->dp_meta_objset; + spa->spa_is_initializing = B_FALSE; + + /* + * Create DDTs (dedup tables). + */ + ddt_create(spa); + + spa_update_dspace(spa); + + tx = dmu_tx_create_assigned(dp, txg); + + /* + * Create the pool's history object. + */ + if (version >= SPA_VERSION_ZPOOL_HISTORY && !spa->spa_history) + spa_history_create_obj(spa, tx); + + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_CREATE); + spa_history_log_version(spa, "create", tx); + + /* + * Create the pool config object. + */ + spa->spa_config_object = dmu_object_alloc(spa->spa_meta_objset, + DMU_OT_PACKED_NVLIST, SPA_CONFIG_BLOCKSIZE, + DMU_OT_PACKED_NVLIST_SIZE, sizeof (uint64_t), tx); + + if (zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_CONFIG, + sizeof (uint64_t), 1, &spa->spa_config_object, tx) != 0) { + cmn_err(CE_PANIC, "failed to add pool config"); + } + + if (spa_version(spa) >= SPA_VERSION_FEATURES) + spa_feature_create_zap_objects(spa, tx); + + if (zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_CREATION_VERSION, + sizeof (uint64_t), 1, &version, tx) != 0) { + cmn_err(CE_PANIC, "failed to add pool version"); + } + + /* Newly created pools with the right version are always deflated. */ + if (version >= SPA_VERSION_RAIDZ_DEFLATE) { + spa->spa_deflate = TRUE; + if (zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_DEFLATE, + sizeof (uint64_t), 1, &spa->spa_deflate, tx) != 0) { + cmn_err(CE_PANIC, "failed to add deflate"); + } + } + + /* + * Create the deferred-free bpobj. Turn off compression + * because sync-to-convergence takes longer if the blocksize + * keeps changing. + */ + obj = bpobj_alloc(spa->spa_meta_objset, 1 << 14, tx); + dmu_object_set_compress(spa->spa_meta_objset, obj, + ZIO_COMPRESS_OFF, tx); + if (zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_SYNC_BPOBJ, + sizeof (uint64_t), 1, &obj, tx) != 0) { + cmn_err(CE_PANIC, "failed to add bpobj"); + } + VERIFY3U(0, ==, bpobj_open(&spa->spa_deferred_bpobj, + spa->spa_meta_objset, obj)); + + /* + * Generate some random noise for salted checksums to operate on. + */ + (void) random_get_pseudo_bytes(spa->spa_cksum_salt.zcs_bytes, + sizeof (spa->spa_cksum_salt.zcs_bytes)); + + /* + * Set pool properties. + */ + spa->spa_bootfs = zpool_prop_default_numeric(ZPOOL_PROP_BOOTFS); + spa->spa_delegation = zpool_prop_default_numeric(ZPOOL_PROP_DELEGATION); + spa->spa_failmode = zpool_prop_default_numeric(ZPOOL_PROP_FAILUREMODE); + spa->spa_autoexpand = zpool_prop_default_numeric(ZPOOL_PROP_AUTOEXPAND); + spa->spa_multihost = zpool_prop_default_numeric(ZPOOL_PROP_MULTIHOST); + + if (props != NULL) { + spa_configfile_set(spa, props, B_FALSE); + spa_sync_props(props, tx); + } + + dmu_tx_commit(tx); + + spa->spa_sync_on = B_TRUE; + txg_sync_start(spa->spa_dsl_pool); + mmp_thread_start(spa); + + /* + * We explicitly wait for the first transaction to complete so that our + * bean counters are appropriately updated. + */ + txg_wait_synced(spa->spa_dsl_pool, txg); + + spa_config_sync(spa, B_FALSE, B_TRUE); + + /* + * Don't count references from objsets that are already closed + * and are making their way through the eviction process. + */ + spa_evicting_os_wait(spa); + spa->spa_minref = refcount_count(&spa->spa_refcount); + spa->spa_load_state = SPA_LOAD_NONE; + + mutex_exit(&spa_namespace_lock); + + return (0); +} + +/* + * Import a non-root pool into the system. + */ +int +spa_import(char *pool, nvlist_t *config, nvlist_t *props, uint64_t flags) +{ + spa_t *spa; + char *altroot = NULL; + spa_load_state_t state = SPA_LOAD_IMPORT; + zpool_rewind_policy_t policy; + uint64_t mode = spa_mode_global; + uint64_t readonly = B_FALSE; + int error; + nvlist_t *nvroot; + nvlist_t **spares, **l2cache; + uint_t nspares, nl2cache; + + /* + * If a pool with this name exists, return failure. + */ + mutex_enter(&spa_namespace_lock); + if (spa_lookup(pool) != NULL) { + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(EEXIST)); + } + + /* + * Create and initialize the spa structure. + */ + (void) nvlist_lookup_string(props, + zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); + (void) nvlist_lookup_uint64(props, + zpool_prop_to_name(ZPOOL_PROP_READONLY), &readonly); + if (readonly) + mode = FREAD; + spa = spa_add(pool, config, altroot); + spa->spa_import_flags = flags; + + /* + * Verbatim import - Take a pool and insert it into the namespace + * as if it had been loaded at boot. + */ + if (spa->spa_import_flags & ZFS_IMPORT_VERBATIM) { + if (props != NULL) + spa_configfile_set(spa, props, B_FALSE); + + spa_config_sync(spa, B_FALSE, B_TRUE); + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_IMPORT); + + mutex_exit(&spa_namespace_lock); + return (0); + } + + spa_activate(spa, mode); + + /* + * Don't start async tasks until we know everything is healthy. + */ + spa_async_suspend(spa); + + zpool_get_rewind_policy(config, &policy); + if (policy.zrp_request & ZPOOL_DO_REWIND) + state = SPA_LOAD_RECOVER; + + /* + * Pass off the heavy lifting to spa_load(). Pass TRUE for mosconfig + * because the user-supplied config is actually the one to trust when + * doing an import. + */ + if (state != SPA_LOAD_RECOVER) + spa->spa_last_ubsync_txg = spa->spa_load_txg = 0; + + error = spa_load_best(spa, state, B_TRUE, policy.zrp_txg, + policy.zrp_request); + + /* + * Propagate anything learned while loading the pool and pass it + * back to caller (i.e. rewind info, missing devices, etc). + */ + VERIFY(nvlist_add_nvlist(config, ZPOOL_CONFIG_LOAD_INFO, + spa->spa_load_info) == 0); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + /* + * Toss any existing sparelist, as it doesn't have any validity + * anymore, and conflicts with spa_has_spare(). + */ + if (spa->spa_spares.sav_config) { + nvlist_free(spa->spa_spares.sav_config); + spa->spa_spares.sav_config = NULL; + spa_load_spares(spa); + } + if (spa->spa_l2cache.sav_config) { + nvlist_free(spa->spa_l2cache.sav_config); + spa->spa_l2cache.sav_config = NULL; + spa_load_l2cache(spa); + } + + VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, + &nvroot) == 0); + spa_config_exit(spa, SCL_ALL, FTAG); + + if (props != NULL) + spa_configfile_set(spa, props, B_FALSE); + + if (error != 0 || (props && spa_writeable(spa) && + (error = spa_prop_set(spa, props)))) { + spa_unload(spa); + spa_deactivate(spa); + spa_remove(spa); + mutex_exit(&spa_namespace_lock); + return (error); + } + + spa_async_resume(spa); + + /* + * Override any spares and level 2 cache devices as specified by + * the user, as these may have correct device names/devids, etc. + */ + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, + &spares, &nspares) == 0) { + if (spa->spa_spares.sav_config) + VERIFY(nvlist_remove(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, DATA_TYPE_NVLIST_ARRAY) == 0); + else + VERIFY(nvlist_alloc(&spa->spa_spares.sav_config, + NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, spares, nspares) == 0); + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_spares(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + spa->spa_spares.sav_sync = B_TRUE; + } + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, + &l2cache, &nl2cache) == 0) { + if (spa->spa_l2cache.sav_config) + VERIFY(nvlist_remove(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, DATA_TYPE_NVLIST_ARRAY) == 0); + else + VERIFY(nvlist_alloc(&spa->spa_l2cache.sav_config, + NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_nvlist_array(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa_load_l2cache(spa); + spa_config_exit(spa, SCL_ALL, FTAG); + spa->spa_l2cache.sav_sync = B_TRUE; + } + + /* + * Check for any removed devices. + */ + if (spa->spa_autoreplace) { + spa_aux_check_removed(&spa->spa_spares); + spa_aux_check_removed(&spa->spa_l2cache); + } + + if (spa_writeable(spa)) { + /* + * Update the config cache to include the newly-imported pool. + */ + spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); + } + + /* + * It's possible that the pool was expanded while it was exported. + * We kick off an async task to handle this for us. + */ + spa_async_request(spa, SPA_ASYNC_AUTOEXPAND); + + spa_history_log_version(spa, "import", NULL); + + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_IMPORT); + + zvol_create_minors(spa, pool, B_TRUE); + + mutex_exit(&spa_namespace_lock); + + return (0); +} + +nvlist_t * +spa_tryimport(nvlist_t *tryconfig) +{ + nvlist_t *config = NULL; + char *poolname; + spa_t *spa; + uint64_t state; + int error; + + if (nvlist_lookup_string(tryconfig, ZPOOL_CONFIG_POOL_NAME, &poolname)) + return (NULL); + + if (nvlist_lookup_uint64(tryconfig, ZPOOL_CONFIG_POOL_STATE, &state)) + return (NULL); + + /* + * Create and initialize the spa structure. + */ + mutex_enter(&spa_namespace_lock); + spa = spa_add(TRYIMPORT_NAME, tryconfig, NULL); + spa_activate(spa, FREAD); + + /* + * Pass off the heavy lifting to spa_load(). + * Pass TRUE for mosconfig because the user-supplied config + * is actually the one to trust when doing an import. + */ + error = spa_load(spa, SPA_LOAD_TRYIMPORT, SPA_IMPORT_EXISTING, B_TRUE); + + /* + * If 'tryconfig' was at least parsable, return the current config. + */ + if (spa->spa_root_vdev != NULL) { + config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); + VERIFY(nvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, + poolname) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_STATE, + state) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_TIMESTAMP, + spa->spa_uberblock.ub_timestamp) == 0); + VERIFY(nvlist_add_nvlist(config, ZPOOL_CONFIG_LOAD_INFO, + spa->spa_load_info) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_ERRATA, + spa->spa_errata) == 0); + + /* + * If the bootfs property exists on this pool then we + * copy it out so that external consumers can tell which + * pools are bootable. + */ + if ((!error || error == EEXIST) && spa->spa_bootfs) { + char *tmpname = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + /* + * We have to play games with the name since the + * pool was opened as TRYIMPORT_NAME. + */ + if (dsl_dsobj_to_dsname(spa_name(spa), + spa->spa_bootfs, tmpname) == 0) { + char *cp; + char *dsname; + + dsname = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + cp = strchr(tmpname, '/'); + if (cp == NULL) { + (void) strlcpy(dsname, tmpname, + MAXPATHLEN); + } else { + (void) snprintf(dsname, MAXPATHLEN, + "%s/%s", poolname, ++cp); + } + VERIFY(nvlist_add_string(config, + ZPOOL_CONFIG_BOOTFS, dsname) == 0); + kmem_free(dsname, MAXPATHLEN); + } + kmem_free(tmpname, MAXPATHLEN); + } + + /* + * Add the list of hot spares and level 2 cache devices. + */ + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + spa_add_spares(spa, config); + spa_add_l2cache(spa, config); + spa_config_exit(spa, SCL_CONFIG, FTAG); + } + + spa_unload(spa); + spa_deactivate(spa); + spa_remove(spa); + mutex_exit(&spa_namespace_lock); + + return (config); +} + +/* + * Pool export/destroy + * + * The act of destroying or exporting a pool is very simple. We make sure there + * is no more pending I/O and any references to the pool are gone. Then, we + * update the pool state and sync all the labels to disk, removing the + * configuration from the cache afterwards. If the 'hardforce' flag is set, then + * we don't sync the labels or remove the configuration cache. + */ +static int +spa_export_common(char *pool, int new_state, nvlist_t **oldconfig, + boolean_t force, boolean_t hardforce) +{ + spa_t *spa; + + if (oldconfig) + *oldconfig = NULL; + + if (!(spa_mode_global & FWRITE)) + return (SET_ERROR(EROFS)); + + mutex_enter(&spa_namespace_lock); + if ((spa = spa_lookup(pool)) == NULL) { + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(ENOENT)); + } + + /* + * Put a hold on the pool, drop the namespace lock, stop async tasks, + * reacquire the namespace lock, and see if we can export. + */ + spa_open_ref(spa, FTAG); + mutex_exit(&spa_namespace_lock); + spa_async_suspend(spa); + if (spa->spa_zvol_taskq) { + zvol_remove_minors(spa, spa_name(spa), B_TRUE); + taskq_wait(spa->spa_zvol_taskq); + } + mutex_enter(&spa_namespace_lock); + spa_close(spa, FTAG); + + if (spa->spa_state == POOL_STATE_UNINITIALIZED) + goto export_spa; + /* + * The pool will be in core if it's openable, in which case we can + * modify its state. Objsets may be open only because they're dirty, + * so we have to force it to sync before checking spa_refcnt. + */ + if (spa->spa_sync_on) { + txg_wait_synced(spa->spa_dsl_pool, 0); + spa_evicting_os_wait(spa); + } + + /* + * A pool cannot be exported or destroyed if there are active + * references. If we are resetting a pool, allow references by + * fault injection handlers. + */ + if (!spa_refcount_zero(spa) || + (spa->spa_inject_ref != 0 && + new_state != POOL_STATE_UNINITIALIZED)) { + spa_async_resume(spa); + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(EBUSY)); + } + + if (spa->spa_sync_on) { + /* + * A pool cannot be exported if it has an active shared spare. + * This is to prevent other pools stealing the active spare + * from an exported pool. At user's own will, such pool can + * be forcedly exported. + */ + if (!force && new_state == POOL_STATE_EXPORTED && + spa_has_active_shared_spare(spa)) { + spa_async_resume(spa); + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(EXDEV)); + } + + /* + * We want this to be reflected on every label, + * so mark them all dirty. spa_unload() will do the + * final sync that pushes these changes out. + */ + if (new_state != POOL_STATE_UNINITIALIZED && !hardforce) { + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + spa->spa_state = new_state; + spa->spa_final_txg = spa_last_synced_txg(spa) + + TXG_DEFER_SIZE + 1; + vdev_config_dirty(spa->spa_root_vdev); + spa_config_exit(spa, SCL_ALL, FTAG); + } + } + +export_spa: + if (new_state == POOL_STATE_DESTROYED) + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_DESTROY); + else if (new_state == POOL_STATE_EXPORTED) + spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_EXPORT); + + if (spa->spa_state != POOL_STATE_UNINITIALIZED) { + spa_unload(spa); + spa_deactivate(spa); + } + + if (oldconfig && spa->spa_config) + VERIFY(nvlist_dup(spa->spa_config, oldconfig, 0) == 0); + + if (new_state != POOL_STATE_UNINITIALIZED) { + if (!hardforce) + spa_config_sync(spa, B_TRUE, B_TRUE); + spa_remove(spa); + } + mutex_exit(&spa_namespace_lock); + + return (0); +} + +/* + * Destroy a storage pool. + */ +int +spa_destroy(char *pool) +{ + return (spa_export_common(pool, POOL_STATE_DESTROYED, NULL, + B_FALSE, B_FALSE)); +} + +/* + * Export a storage pool. + */ +int +spa_export(char *pool, nvlist_t **oldconfig, boolean_t force, + boolean_t hardforce) +{ + return (spa_export_common(pool, POOL_STATE_EXPORTED, oldconfig, + force, hardforce)); +} + +/* + * Similar to spa_export(), this unloads the spa_t without actually removing it + * from the namespace in any way. + */ +int +spa_reset(char *pool) +{ + return (spa_export_common(pool, POOL_STATE_UNINITIALIZED, NULL, + B_FALSE, B_FALSE)); +} + +/* + * ========================================================================== + * Device manipulation + * ========================================================================== + */ + +/* + * Add a device to a storage pool. + */ +int +spa_vdev_add(spa_t *spa, nvlist_t *nvroot) +{ + uint64_t txg, id; + int error; + vdev_t *rvd = spa->spa_root_vdev; + vdev_t *vd, *tvd; + nvlist_t **spares, **l2cache; + uint_t nspares, nl2cache; + int c; + + ASSERT(spa_writeable(spa)); + + txg = spa_vdev_enter(spa); + + if ((error = spa_config_parse(spa, &vd, nvroot, NULL, 0, + VDEV_ALLOC_ADD)) != 0) + return (spa_vdev_exit(spa, NULL, txg, error)); + + spa->spa_pending_vdev = vd; /* spa_vdev_exit() will clear this */ + + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, &spares, + &nspares) != 0) + nspares = 0; + + if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, &l2cache, + &nl2cache) != 0) + nl2cache = 0; + + if (vd->vdev_children == 0 && nspares == 0 && nl2cache == 0) + return (spa_vdev_exit(spa, vd, txg, EINVAL)); + + if (vd->vdev_children != 0 && + (error = vdev_create(vd, txg, B_FALSE)) != 0) + return (spa_vdev_exit(spa, vd, txg, error)); + + /* + * We must validate the spares and l2cache devices after checking the + * children. Otherwise, vdev_inuse() will blindly overwrite the spare. + */ + if ((error = spa_validate_aux(spa, nvroot, txg, VDEV_ALLOC_ADD)) != 0) + return (spa_vdev_exit(spa, vd, txg, error)); + + /* + * Transfer each new top-level vdev from vd to rvd. + */ + for (c = 0; c < vd->vdev_children; c++) { + + /* + * Set the vdev id to the first hole, if one exists. + */ + for (id = 0; id < rvd->vdev_children; id++) { + if (rvd->vdev_child[id]->vdev_ishole) { + vdev_free(rvd->vdev_child[id]); + break; + } + } + tvd = vd->vdev_child[c]; + vdev_remove_child(vd, tvd); + tvd->vdev_id = id; + vdev_add_child(rvd, tvd); + vdev_config_dirty(tvd); + } + + if (nspares != 0) { + spa_set_aux_vdevs(&spa->spa_spares, spares, nspares, + ZPOOL_CONFIG_SPARES); + spa_load_spares(spa); + spa->spa_spares.sav_sync = B_TRUE; + } + + if (nl2cache != 0) { + spa_set_aux_vdevs(&spa->spa_l2cache, l2cache, nl2cache, + ZPOOL_CONFIG_L2CACHE); + spa_load_l2cache(spa); + spa->spa_l2cache.sav_sync = B_TRUE; + } + + /* + * We have to be careful when adding new vdevs to an existing pool. + * If other threads start allocating from these vdevs before we + * sync the config cache, and we lose power, then upon reboot we may + * fail to open the pool because there are DVAs that the config cache + * can't translate. Therefore, we first add the vdevs without + * initializing metaslabs; sync the config cache (via spa_vdev_exit()); + * and then let spa_config_update() initialize the new metaslabs. + * + * spa_load() checks for added-but-not-initialized vdevs, so that + * if we lose power at any point in this sequence, the remaining + * steps will be completed the next time we load the pool. + */ + (void) spa_vdev_exit(spa, vd, txg, 0); + + mutex_enter(&spa_namespace_lock); + spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); + spa_event_notify(spa, NULL, NULL, ESC_ZFS_VDEV_ADD); + mutex_exit(&spa_namespace_lock); + + return (0); +} + +/* + * Attach a device to a mirror. The arguments are the path to any device + * in the mirror, and the nvroot for the new device. If the path specifies + * a device that is not mirrored, we automatically insert the mirror vdev. + * + * If 'replacing' is specified, the new device is intended to replace the + * existing device; in this case the two devices are made into their own + * mirror using the 'replacing' vdev, which is functionally identical to + * the mirror vdev (it actually reuses all the same ops) but has a few + * extra rules: you can't attach to it after it's been created, and upon + * completion of resilvering, the first disk (the one being replaced) + * is automatically detached. + */ +int +spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing) +{ + uint64_t txg, dtl_max_txg; + vdev_t *oldvd, *newvd, *newrootvd, *pvd, *tvd; + vdev_ops_t *pvops; + char *oldvdpath, *newvdpath; + int newvd_isspare; + int error; + ASSERTV(vdev_t *rvd = spa->spa_root_vdev); + + ASSERT(spa_writeable(spa)); + + txg = spa_vdev_enter(spa); + + oldvd = spa_lookup_by_guid(spa, guid, B_FALSE); + + if (oldvd == NULL) + return (spa_vdev_exit(spa, NULL, txg, ENODEV)); + + if (!oldvd->vdev_ops->vdev_op_leaf) + return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); + + pvd = oldvd->vdev_parent; + + if ((error = spa_config_parse(spa, &newrootvd, nvroot, NULL, 0, + VDEV_ALLOC_ATTACH)) != 0) + return (spa_vdev_exit(spa, NULL, txg, EINVAL)); + + if (newrootvd->vdev_children != 1) + return (spa_vdev_exit(spa, newrootvd, txg, EINVAL)); + + newvd = newrootvd->vdev_child[0]; + + if (!newvd->vdev_ops->vdev_op_leaf) + return (spa_vdev_exit(spa, newrootvd, txg, EINVAL)); + + if ((error = vdev_create(newrootvd, txg, replacing)) != 0) + return (spa_vdev_exit(spa, newrootvd, txg, error)); + + /* + * Spares can't replace logs + */ + if (oldvd->vdev_top->vdev_islog && newvd->vdev_isspare) + return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); + + if (!replacing) { + /* + * For attach, the only allowable parent is a mirror or the root + * vdev. + */ + if (pvd->vdev_ops != &vdev_mirror_ops && + pvd->vdev_ops != &vdev_root_ops) + return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); + + pvops = &vdev_mirror_ops; + } else { + /* + * Active hot spares can only be replaced by inactive hot + * spares. + */ + if (pvd->vdev_ops == &vdev_spare_ops && + oldvd->vdev_isspare && + !spa_has_spare(spa, newvd->vdev_guid)) + return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); + + /* + * If the source is a hot spare, and the parent isn't already a + * spare, then we want to create a new hot spare. Otherwise, we + * want to create a replacing vdev. The user is not allowed to + * attach to a spared vdev child unless the 'isspare' state is + * the same (spare replaces spare, non-spare replaces + * non-spare). + */ + if (pvd->vdev_ops == &vdev_replacing_ops && + spa_version(spa) < SPA_VERSION_MULTI_REPLACE) { + return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); + } else if (pvd->vdev_ops == &vdev_spare_ops && + newvd->vdev_isspare != oldvd->vdev_isspare) { + return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); + } + + if (newvd->vdev_isspare) + pvops = &vdev_spare_ops; + else + pvops = &vdev_replacing_ops; + } + + /* + * Make sure the new device is big enough. + */ + if (newvd->vdev_asize < vdev_get_min_asize(oldvd)) + return (spa_vdev_exit(spa, newrootvd, txg, EOVERFLOW)); + + /* + * The new device cannot have a higher alignment requirement + * than the top-level vdev. + */ + if (newvd->vdev_ashift > oldvd->vdev_top->vdev_ashift) + return (spa_vdev_exit(spa, newrootvd, txg, EDOM)); + + /* + * If this is an in-place replacement, update oldvd's path and devid + * to make it distinguishable from newvd, and unopenable from now on. + */ + if (strcmp(oldvd->vdev_path, newvd->vdev_path) == 0) { + spa_strfree(oldvd->vdev_path); + oldvd->vdev_path = kmem_alloc(strlen(newvd->vdev_path) + 5, + KM_SLEEP); + (void) sprintf(oldvd->vdev_path, "%s/%s", + newvd->vdev_path, "old"); + if (oldvd->vdev_devid != NULL) { + spa_strfree(oldvd->vdev_devid); + oldvd->vdev_devid = NULL; + } + } + + /* mark the device being resilvered */ + newvd->vdev_resilver_txg = txg; + + /* + * If the parent is not a mirror, or if we're replacing, insert the new + * mirror/replacing/spare vdev above oldvd. + */ + if (pvd->vdev_ops != pvops) + pvd = vdev_add_parent(oldvd, pvops); + + ASSERT(pvd->vdev_top->vdev_parent == rvd); + ASSERT(pvd->vdev_ops == pvops); + ASSERT(oldvd->vdev_parent == pvd); + + /* + * Extract the new device from its root and add it to pvd. + */ + vdev_remove_child(newrootvd, newvd); + newvd->vdev_id = pvd->vdev_children; + newvd->vdev_crtxg = oldvd->vdev_crtxg; + vdev_add_child(pvd, newvd); + + /* + * Reevaluate the parent vdev state. + */ + vdev_propagate_state(pvd); + + tvd = newvd->vdev_top; + ASSERT(pvd->vdev_top == tvd); + ASSERT(tvd->vdev_parent == rvd); + + vdev_config_dirty(tvd); + + /* + * Set newvd's DTL to [TXG_INITIAL, dtl_max_txg) so that we account + * for any dmu_sync-ed blocks. It will propagate upward when + * spa_vdev_exit() calls vdev_dtl_reassess(). + */ + dtl_max_txg = txg + TXG_CONCURRENT_STATES; + + vdev_dtl_dirty(newvd, DTL_MISSING, TXG_INITIAL, + dtl_max_txg - TXG_INITIAL); + + if (newvd->vdev_isspare) { + spa_spare_activate(newvd); + spa_event_notify(spa, newvd, NULL, ESC_ZFS_VDEV_SPARE); + } + + oldvdpath = spa_strdup(oldvd->vdev_path); + newvdpath = spa_strdup(newvd->vdev_path); + newvd_isspare = newvd->vdev_isspare; + + /* + * Mark newvd's DTL dirty in this txg. + */ + vdev_dirty(tvd, VDD_DTL, newvd, txg); + + /* + * Schedule the resilver to restart in the future. We do this to + * ensure that dmu_sync-ed blocks have been stitched into the + * respective datasets. + */ + dsl_resilver_restart(spa->spa_dsl_pool, dtl_max_txg); + + if (spa->spa_bootfs) + spa_event_notify(spa, newvd, NULL, ESC_ZFS_BOOTFS_VDEV_ATTACH); + + spa_event_notify(spa, newvd, NULL, ESC_ZFS_VDEV_ATTACH); + + /* + * Commit the config + */ + (void) spa_vdev_exit(spa, newrootvd, dtl_max_txg, 0); + + spa_history_log_internal(spa, "vdev attach", NULL, + "%s vdev=%s %s vdev=%s", + replacing && newvd_isspare ? "spare in" : + replacing ? "replace" : "attach", newvdpath, + replacing ? "for" : "to", oldvdpath); + + spa_strfree(oldvdpath); + spa_strfree(newvdpath); + + return (0); +} + +/* + * Detach a device from a mirror or replacing vdev. + * + * If 'replace_done' is specified, only detach if the parent + * is a replacing vdev. + */ +int +spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid, int replace_done) +{ + uint64_t txg; + int error; + vdev_t *vd, *pvd, *cvd, *tvd; + boolean_t unspare = B_FALSE; + uint64_t unspare_guid = 0; + char *vdpath; + int c, t; + ASSERTV(vdev_t *rvd = spa->spa_root_vdev); + ASSERT(spa_writeable(spa)); + + txg = spa_vdev_enter(spa); + + vd = spa_lookup_by_guid(spa, guid, B_FALSE); + + if (vd == NULL) + return (spa_vdev_exit(spa, NULL, txg, ENODEV)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); + + pvd = vd->vdev_parent; + + /* + * If the parent/child relationship is not as expected, don't do it. + * Consider M(A,R(B,C)) -- that is, a mirror of A with a replacing + * vdev that's replacing B with C. The user's intent in replacing + * is to go from M(A,B) to M(A,C). If the user decides to cancel + * the replace by detaching C, the expected behavior is to end up + * M(A,B). But suppose that right after deciding to detach C, + * the replacement of B completes. We would have M(A,C), and then + * ask to detach C, which would leave us with just A -- not what + * the user wanted. To prevent this, we make sure that the + * parent/child relationship hasn't changed -- in this example, + * that C's parent is still the replacing vdev R. + */ + if (pvd->vdev_guid != pguid && pguid != 0) + return (spa_vdev_exit(spa, NULL, txg, EBUSY)); + + /* + * Only 'replacing' or 'spare' vdevs can be replaced. + */ + if (replace_done && pvd->vdev_ops != &vdev_replacing_ops && + pvd->vdev_ops != &vdev_spare_ops) + return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); + + ASSERT(pvd->vdev_ops != &vdev_spare_ops || + spa_version(spa) >= SPA_VERSION_SPARES); + + /* + * Only mirror, replacing, and spare vdevs support detach. + */ + if (pvd->vdev_ops != &vdev_replacing_ops && + pvd->vdev_ops != &vdev_mirror_ops && + pvd->vdev_ops != &vdev_spare_ops) + return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); + + /* + * If this device has the only valid copy of some data, + * we cannot safely detach it. + */ + if (vdev_dtl_required(vd)) + return (spa_vdev_exit(spa, NULL, txg, EBUSY)); + + ASSERT(pvd->vdev_children >= 2); + + /* + * If we are detaching the second disk from a replacing vdev, then + * check to see if we changed the original vdev's path to have "/old" + * at the end in spa_vdev_attach(). If so, undo that change now. + */ + if (pvd->vdev_ops == &vdev_replacing_ops && vd->vdev_id > 0 && + vd->vdev_path != NULL) { + size_t len = strlen(vd->vdev_path); + + for (c = 0; c < pvd->vdev_children; c++) { + cvd = pvd->vdev_child[c]; + + if (cvd == vd || cvd->vdev_path == NULL) + continue; + + if (strncmp(cvd->vdev_path, vd->vdev_path, len) == 0 && + strcmp(cvd->vdev_path + len, "/old") == 0) { + spa_strfree(cvd->vdev_path); + cvd->vdev_path = spa_strdup(vd->vdev_path); + break; + } + } + } + + /* + * If we are detaching the original disk from a spare, then it implies + * that the spare should become a real disk, and be removed from the + * active spare list for the pool. + */ + if (pvd->vdev_ops == &vdev_spare_ops && + vd->vdev_id == 0 && + pvd->vdev_child[pvd->vdev_children - 1]->vdev_isspare) + unspare = B_TRUE; + + /* + * Erase the disk labels so the disk can be used for other things. + * This must be done after all other error cases are handled, + * but before we disembowel vd (so we can still do I/O to it). + * But if we can't do it, don't treat the error as fatal -- + * it may be that the unwritability of the disk is the reason + * it's being detached! + */ + error = vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); + + /* + * Remove vd from its parent and compact the parent's children. + */ + vdev_remove_child(pvd, vd); + vdev_compact_children(pvd); + + /* + * Remember one of the remaining children so we can get tvd below. + */ + cvd = pvd->vdev_child[pvd->vdev_children - 1]; + + /* + * If we need to remove the remaining child from the list of hot spares, + * do it now, marking the vdev as no longer a spare in the process. + * We must do this before vdev_remove_parent(), because that can + * change the GUID if it creates a new toplevel GUID. For a similar + * reason, we must remove the spare now, in the same txg as the detach; + * otherwise someone could attach a new sibling, change the GUID, and + * the subsequent attempt to spa_vdev_remove(unspare_guid) would fail. + */ + if (unspare) { + ASSERT(cvd->vdev_isspare); + spa_spare_remove(cvd); + unspare_guid = cvd->vdev_guid; + (void) spa_vdev_remove(spa, unspare_guid, B_TRUE); + cvd->vdev_unspare = B_TRUE; + } + + /* + * If the parent mirror/replacing vdev only has one child, + * the parent is no longer needed. Remove it from the tree. + */ + if (pvd->vdev_children == 1) { + if (pvd->vdev_ops == &vdev_spare_ops) + cvd->vdev_unspare = B_FALSE; + vdev_remove_parent(cvd); + } + + + /* + * We don't set tvd until now because the parent we just removed + * may have been the previous top-level vdev. + */ + tvd = cvd->vdev_top; + ASSERT(tvd->vdev_parent == rvd); + + /* + * Reevaluate the parent vdev state. + */ + vdev_propagate_state(cvd); + + /* + * If the 'autoexpand' property is set on the pool then automatically + * try to expand the size of the pool. For example if the device we + * just detached was smaller than the others, it may be possible to + * add metaslabs (i.e. grow the pool). We need to reopen the vdev + * first so that we can obtain the updated sizes of the leaf vdevs. + */ + if (spa->spa_autoexpand) { + vdev_reopen(tvd); + vdev_expand(tvd, txg); + } + + vdev_config_dirty(tvd); + + /* + * Mark vd's DTL as dirty in this txg. vdev_dtl_sync() will see that + * vd->vdev_detached is set and free vd's DTL object in syncing context. + * But first make sure we're not on any *other* txg's DTL list, to + * prevent vd from being accessed after it's freed. + */ + vdpath = spa_strdup(vd->vdev_path ? vd->vdev_path : "none"); + for (t = 0; t < TXG_SIZE; t++) + (void) txg_list_remove_this(&tvd->vdev_dtl_list, vd, t); + vd->vdev_detached = B_TRUE; + vdev_dirty(tvd, VDD_DTL, vd, txg); + + spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_REMOVE); + + /* hang on to the spa before we release the lock */ + spa_open_ref(spa, FTAG); + + error = spa_vdev_exit(spa, vd, txg, 0); + + spa_history_log_internal(spa, "detach", NULL, + "vdev=%s", vdpath); + spa_strfree(vdpath); + + /* + * If this was the removal of the original device in a hot spare vdev, + * then we want to go through and remove the device from the hot spare + * list of every other pool. + */ + if (unspare) { + spa_t *altspa = NULL; + + mutex_enter(&spa_namespace_lock); + while ((altspa = spa_next(altspa)) != NULL) { + if (altspa->spa_state != POOL_STATE_ACTIVE || + altspa == spa) + continue; + + spa_open_ref(altspa, FTAG); + mutex_exit(&spa_namespace_lock); + (void) spa_vdev_remove(altspa, unspare_guid, B_TRUE); + mutex_enter(&spa_namespace_lock); + spa_close(altspa, FTAG); + } + mutex_exit(&spa_namespace_lock); + + /* search the rest of the vdevs for spares to remove */ + spa_vdev_resilver_done(spa); + } + + /* all done with the spa; OK to release */ + mutex_enter(&spa_namespace_lock); + spa_close(spa, FTAG); + mutex_exit(&spa_namespace_lock); + + return (error); +} + +/* + * Split a set of devices from their mirrors, and create a new pool from them. + */ +int +spa_vdev_split_mirror(spa_t *spa, char *newname, nvlist_t *config, + nvlist_t *props, boolean_t exp) +{ + int error = 0; + uint64_t txg, *glist; + spa_t *newspa; + uint_t c, children, lastlog; + nvlist_t **child, *nvl, *tmp; + dmu_tx_t *tx; + char *altroot = NULL; + vdev_t *rvd, **vml = NULL; /* vdev modify list */ + boolean_t activate_slog; + + ASSERT(spa_writeable(spa)); + + txg = spa_vdev_enter(spa); + + /* clear the log and flush everything up to now */ + activate_slog = spa_passivate_log(spa); + (void) spa_vdev_config_exit(spa, NULL, txg, 0, FTAG); + error = spa_offline_log(spa); + txg = spa_vdev_config_enter(spa); + + if (activate_slog) + spa_activate_log(spa); + + if (error != 0) + return (spa_vdev_exit(spa, NULL, txg, error)); + + /* check new spa name before going any further */ + if (spa_lookup(newname) != NULL) + return (spa_vdev_exit(spa, NULL, txg, EEXIST)); + + /* + * scan through all the children to ensure they're all mirrors + */ + if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvl) != 0 || + nvlist_lookup_nvlist_array(nvl, ZPOOL_CONFIG_CHILDREN, &child, + &children) != 0) + return (spa_vdev_exit(spa, NULL, txg, EINVAL)); + + /* first, check to ensure we've got the right child count */ + rvd = spa->spa_root_vdev; + lastlog = 0; + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *vd = rvd->vdev_child[c]; + + /* don't count the holes & logs as children */ + if (vd->vdev_islog || vd->vdev_ishole) { + if (lastlog == 0) + lastlog = c; + continue; + } + + lastlog = 0; + } + if (children != (lastlog != 0 ? lastlog : rvd->vdev_children)) + return (spa_vdev_exit(spa, NULL, txg, EINVAL)); + + /* next, ensure no spare or cache devices are part of the split */ + if (nvlist_lookup_nvlist(nvl, ZPOOL_CONFIG_SPARES, &tmp) == 0 || + nvlist_lookup_nvlist(nvl, ZPOOL_CONFIG_L2CACHE, &tmp) == 0) + return (spa_vdev_exit(spa, NULL, txg, EINVAL)); + + vml = kmem_zalloc(children * sizeof (vdev_t *), KM_SLEEP); + glist = kmem_zalloc(children * sizeof (uint64_t), KM_SLEEP); + + /* then, loop over each vdev and validate it */ + for (c = 0; c < children; c++) { + uint64_t is_hole = 0; + + (void) nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_IS_HOLE, + &is_hole); + + if (is_hole != 0) { + if (spa->spa_root_vdev->vdev_child[c]->vdev_ishole || + spa->spa_root_vdev->vdev_child[c]->vdev_islog) { + continue; + } else { + error = SET_ERROR(EINVAL); + break; + } + } + + /* which disk is going to be split? */ + if (nvlist_lookup_uint64(child[c], ZPOOL_CONFIG_GUID, + &glist[c]) != 0) { + error = SET_ERROR(EINVAL); + break; + } + + /* look it up in the spa */ + vml[c] = spa_lookup_by_guid(spa, glist[c], B_FALSE); + if (vml[c] == NULL) { + error = SET_ERROR(ENODEV); + break; + } + + /* make sure there's nothing stopping the split */ + if (vml[c]->vdev_parent->vdev_ops != &vdev_mirror_ops || + vml[c]->vdev_islog || + vml[c]->vdev_ishole || + vml[c]->vdev_isspare || + vml[c]->vdev_isl2cache || + !vdev_writeable(vml[c]) || + vml[c]->vdev_children != 0 || + vml[c]->vdev_state != VDEV_STATE_HEALTHY || + c != spa->spa_root_vdev->vdev_child[c]->vdev_id) { + error = SET_ERROR(EINVAL); + break; + } + + if (vdev_dtl_required(vml[c])) { + error = SET_ERROR(EBUSY); + break; + } + + /* we need certain info from the top level */ + VERIFY(nvlist_add_uint64(child[c], ZPOOL_CONFIG_METASLAB_ARRAY, + vml[c]->vdev_top->vdev_ms_array) == 0); + VERIFY(nvlist_add_uint64(child[c], ZPOOL_CONFIG_METASLAB_SHIFT, + vml[c]->vdev_top->vdev_ms_shift) == 0); + VERIFY(nvlist_add_uint64(child[c], ZPOOL_CONFIG_ASIZE, + vml[c]->vdev_top->vdev_asize) == 0); + VERIFY(nvlist_add_uint64(child[c], ZPOOL_CONFIG_ASHIFT, + vml[c]->vdev_top->vdev_ashift) == 0); + + /* transfer per-vdev ZAPs */ + ASSERT3U(vml[c]->vdev_leaf_zap, !=, 0); + VERIFY0(nvlist_add_uint64(child[c], + ZPOOL_CONFIG_VDEV_LEAF_ZAP, vml[c]->vdev_leaf_zap)); + + ASSERT3U(vml[c]->vdev_top->vdev_top_zap, !=, 0); + VERIFY0(nvlist_add_uint64(child[c], + ZPOOL_CONFIG_VDEV_TOP_ZAP, + vml[c]->vdev_parent->vdev_top_zap)); + } + + if (error != 0) { + kmem_free(vml, children * sizeof (vdev_t *)); + kmem_free(glist, children * sizeof (uint64_t)); + return (spa_vdev_exit(spa, NULL, txg, error)); + } + + /* stop writers from using the disks */ + for (c = 0; c < children; c++) { + if (vml[c] != NULL) + vml[c]->vdev_offline = B_TRUE; + } + vdev_reopen(spa->spa_root_vdev); + + /* + * Temporarily record the splitting vdevs in the spa config. This + * will disappear once the config is regenerated. + */ + VERIFY(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_uint64_array(nvl, ZPOOL_CONFIG_SPLIT_LIST, + glist, children) == 0); + kmem_free(glist, children * sizeof (uint64_t)); + + mutex_enter(&spa->spa_props_lock); + VERIFY(nvlist_add_nvlist(spa->spa_config, ZPOOL_CONFIG_SPLIT, + nvl) == 0); + mutex_exit(&spa->spa_props_lock); + spa->spa_config_splitting = nvl; + vdev_config_dirty(spa->spa_root_vdev); + + /* configure and create the new pool */ + VERIFY(nvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, newname) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_STATE, + exp ? POOL_STATE_EXPORTED : POOL_STATE_ACTIVE) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_VERSION, + spa_version(spa)) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_TXG, + spa->spa_config_txg) == 0); + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_GUID, + spa_generate_guid(NULL)) == 0); + VERIFY0(nvlist_add_boolean(config, ZPOOL_CONFIG_HAS_PER_VDEV_ZAPS)); + (void) nvlist_lookup_string(props, + zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); + + /* add the new pool to the namespace */ + newspa = spa_add(newname, config, altroot); + newspa->spa_avz_action = AVZ_ACTION_REBUILD; + newspa->spa_config_txg = spa->spa_config_txg; + spa_set_log_state(newspa, SPA_LOG_CLEAR); + + /* release the spa config lock, retaining the namespace lock */ + spa_vdev_config_exit(spa, NULL, txg, 0, FTAG); + + if (zio_injection_enabled) + zio_handle_panic_injection(spa, FTAG, 1); + + spa_activate(newspa, spa_mode_global); + spa_async_suspend(newspa); + + /* create the new pool from the disks of the original pool */ + error = spa_load(newspa, SPA_LOAD_IMPORT, SPA_IMPORT_ASSEMBLE, B_TRUE); + if (error) + goto out; + + /* if that worked, generate a real config for the new pool */ + if (newspa->spa_root_vdev != NULL) { + VERIFY(nvlist_alloc(&newspa->spa_config_splitting, + NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_uint64(newspa->spa_config_splitting, + ZPOOL_CONFIG_SPLIT_GUID, spa_guid(spa)) == 0); + spa_config_set(newspa, spa_config_generate(newspa, NULL, -1ULL, + B_TRUE)); + } + + /* set the props */ + if (props != NULL) { + spa_configfile_set(newspa, props, B_FALSE); + error = spa_prop_set(newspa, props); + if (error) + goto out; + } + + /* flush everything */ + txg = spa_vdev_config_enter(newspa); + vdev_config_dirty(newspa->spa_root_vdev); + (void) spa_vdev_config_exit(newspa, NULL, txg, 0, FTAG); + + if (zio_injection_enabled) + zio_handle_panic_injection(spa, FTAG, 2); + + spa_async_resume(newspa); + + /* finally, update the original pool's config */ + txg = spa_vdev_config_enter(spa); + tx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error != 0) + dmu_tx_abort(tx); + for (c = 0; c < children; c++) { + if (vml[c] != NULL) { + vdev_split(vml[c]); + if (error == 0) + spa_history_log_internal(spa, "detach", tx, + "vdev=%s", vml[c]->vdev_path); + + vdev_free(vml[c]); + } + } + spa->spa_avz_action = AVZ_ACTION_REBUILD; + vdev_config_dirty(spa->spa_root_vdev); + spa->spa_config_splitting = NULL; + nvlist_free(nvl); + if (error == 0) + dmu_tx_commit(tx); + (void) spa_vdev_exit(spa, NULL, txg, 0); + + if (zio_injection_enabled) + zio_handle_panic_injection(spa, FTAG, 3); + + /* split is complete; log a history record */ + spa_history_log_internal(newspa, "split", NULL, + "from pool %s", spa_name(spa)); + + kmem_free(vml, children * sizeof (vdev_t *)); + + /* if we're not going to mount the filesystems in userland, export */ + if (exp) + error = spa_export_common(newname, POOL_STATE_EXPORTED, NULL, + B_FALSE, B_FALSE); + + return (error); + +out: + spa_unload(newspa); + spa_deactivate(newspa); + spa_remove(newspa); + + txg = spa_vdev_config_enter(spa); + + /* re-online all offlined disks */ + for (c = 0; c < children; c++) { + if (vml[c] != NULL) + vml[c]->vdev_offline = B_FALSE; + } + vdev_reopen(spa->spa_root_vdev); + + nvlist_free(spa->spa_config_splitting); + spa->spa_config_splitting = NULL; + (void) spa_vdev_exit(spa, NULL, txg, error); + + kmem_free(vml, children * sizeof (vdev_t *)); + return (error); +} + +static nvlist_t * +spa_nvlist_lookup_by_guid(nvlist_t **nvpp, int count, uint64_t target_guid) +{ + int i; + + for (i = 0; i < count; i++) { + uint64_t guid; + + VERIFY(nvlist_lookup_uint64(nvpp[i], ZPOOL_CONFIG_GUID, + &guid) == 0); + + if (guid == target_guid) + return (nvpp[i]); + } + + return (NULL); +} + +static void +spa_vdev_remove_aux(nvlist_t *config, char *name, nvlist_t **dev, int count, + nvlist_t *dev_to_remove) +{ + nvlist_t **newdev = NULL; + int i, j; + + if (count > 1) + newdev = kmem_alloc((count - 1) * sizeof (void *), KM_SLEEP); + + for (i = 0, j = 0; i < count; i++) { + if (dev[i] == dev_to_remove) + continue; + VERIFY(nvlist_dup(dev[i], &newdev[j++], KM_SLEEP) == 0); + } + + VERIFY(nvlist_remove(config, name, DATA_TYPE_NVLIST_ARRAY) == 0); + VERIFY(nvlist_add_nvlist_array(config, name, newdev, count - 1) == 0); + + for (i = 0; i < count - 1; i++) + nvlist_free(newdev[i]); + + if (count > 1) + kmem_free(newdev, (count - 1) * sizeof (void *)); +} + +/* + * Evacuate the device. + */ +static int +spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) +{ + uint64_t txg; + int error = 0; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); + ASSERT(vd == vd->vdev_top); + + /* + * Evacuate the device. We don't hold the config lock as writer + * since we need to do I/O but we do keep the + * spa_namespace_lock held. Once this completes the device + * should no longer have any blocks allocated on it. + */ + if (vd->vdev_islog) { + if (vd->vdev_stat.vs_alloc != 0) + error = spa_offline_log(spa); + } else { + error = SET_ERROR(ENOTSUP); + } + + if (error) + return (error); + + /* + * The evacuation succeeded. Remove any remaining MOS metadata + * associated with this vdev, and wait for these changes to sync. + */ + ASSERT0(vd->vdev_stat.vs_alloc); + txg = spa_vdev_config_enter(spa); + vd->vdev_removing = B_TRUE; + vdev_dirty_leaves(vd, VDD_DTL, txg); + vdev_config_dirty(vd); + spa_vdev_config_exit(spa, NULL, txg, 0, FTAG); + + return (0); +} + +/* + * Complete the removal by cleaning up the namespace. + */ +static void +spa_vdev_remove_from_namespace(spa_t *spa, vdev_t *vd) +{ + vdev_t *rvd = spa->spa_root_vdev; + uint64_t id = vd->vdev_id; + boolean_t last_vdev = (id == (rvd->vdev_children - 1)); + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + ASSERT(vd == vd->vdev_top); + + /* + * Only remove any devices which are empty. + */ + if (vd->vdev_stat.vs_alloc != 0) + return; + + (void) vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); + + if (list_link_active(&vd->vdev_state_dirty_node)) + vdev_state_clean(vd); + if (list_link_active(&vd->vdev_config_dirty_node)) + vdev_config_clean(vd); + + vdev_free(vd); + + if (last_vdev) { + vdev_compact_children(rvd); + } else { + vd = vdev_alloc_common(spa, id, 0, &vdev_hole_ops); + vdev_add_child(rvd, vd); + } + vdev_config_dirty(rvd); + + /* + * Reassess the health of our root vdev. + */ + vdev_reopen(rvd); +} + +/* + * Remove a device from the pool - + * + * Removing a device from the vdev namespace requires several steps + * and can take a significant amount of time. As a result we use + * the spa_vdev_config_[enter/exit] functions which allow us to + * grab and release the spa_config_lock while still holding the namespace + * lock. During each step the configuration is synced out. + * + * Currently, this supports removing only hot spares, slogs, and level 2 ARC + * devices. + */ +int +spa_vdev_remove(spa_t *spa, uint64_t guid, boolean_t unspare) +{ + vdev_t *vd; + sysevent_t *ev = NULL; + metaslab_group_t *mg; + nvlist_t **spares, **l2cache, *nv; + uint64_t txg = 0; + uint_t nspares, nl2cache; + int error = 0; + boolean_t locked = MUTEX_HELD(&spa_namespace_lock); + + ASSERT(spa_writeable(spa)); + + if (!locked) + txg = spa_vdev_enter(spa); + + vd = spa_lookup_by_guid(spa, guid, B_FALSE); + + if (spa->spa_spares.sav_vdevs != NULL && + nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0 && + (nv = spa_nvlist_lookup_by_guid(spares, nspares, guid)) != NULL) { + /* + * Only remove the hot spare if it's not currently in use + * in this pool. + */ + if (vd == NULL || unspare) { + if (vd == NULL) + vd = spa_lookup_by_guid(spa, guid, B_TRUE); + ev = spa_event_create(spa, vd, NULL, + ESC_ZFS_VDEV_REMOVE_AUX); + spa_vdev_remove_aux(spa->spa_spares.sav_config, + ZPOOL_CONFIG_SPARES, spares, nspares, nv); + spa_load_spares(spa); + spa->spa_spares.sav_sync = B_TRUE; + } else { + error = SET_ERROR(EBUSY); + } + } else if (spa->spa_l2cache.sav_vdevs != NULL && + nvlist_lookup_nvlist_array(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0 && + (nv = spa_nvlist_lookup_by_guid(l2cache, nl2cache, guid)) != NULL) { + /* + * Cache devices can always be removed. + */ + vd = spa_lookup_by_guid(spa, guid, B_TRUE); + ev = spa_event_create(spa, vd, NULL, ESC_ZFS_VDEV_REMOVE_AUX); + spa_vdev_remove_aux(spa->spa_l2cache.sav_config, + ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache, nv); + spa_load_l2cache(spa); + spa->spa_l2cache.sav_sync = B_TRUE; + } else if (vd != NULL && vd->vdev_islog) { + ASSERT(!locked); + ASSERT(vd == vd->vdev_top); + + mg = vd->vdev_mg; + + /* + * Stop allocating from this vdev. + */ + metaslab_group_passivate(mg); + + /* + * Wait for the youngest allocations and frees to sync, + * and then wait for the deferral of those frees to finish. + */ + spa_vdev_config_exit(spa, NULL, + txg + TXG_CONCURRENT_STATES + TXG_DEFER_SIZE, 0, FTAG); + + /* + * Attempt to evacuate the vdev. + */ + error = spa_vdev_remove_evacuate(spa, vd); + + txg = spa_vdev_config_enter(spa); + + /* + * If we couldn't evacuate the vdev, unwind. + */ + if (error) { + metaslab_group_activate(mg); + return (spa_vdev_exit(spa, NULL, txg, error)); + } + + /* + * Clean up the vdev namespace. + */ + ev = spa_event_create(spa, vd, NULL, ESC_ZFS_VDEV_REMOVE_DEV); + spa_vdev_remove_from_namespace(spa, vd); + + } else if (vd != NULL) { + /* + * Normal vdevs cannot be removed (yet). + */ + error = SET_ERROR(ENOTSUP); + } else { + /* + * There is no vdev of any kind with the specified guid. + */ + error = SET_ERROR(ENOENT); + } + + if (!locked) + error = spa_vdev_exit(spa, NULL, txg, error); + + if (ev) + spa_event_post(ev); + + return (error); +} + +/* + * Find any device that's done replacing, or a vdev marked 'unspare' that's + * currently spared, so we can detach it. + */ +static vdev_t * +spa_vdev_resilver_done_hunt(vdev_t *vd) +{ + vdev_t *newvd, *oldvd; + int c; + + for (c = 0; c < vd->vdev_children; c++) { + oldvd = spa_vdev_resilver_done_hunt(vd->vdev_child[c]); + if (oldvd != NULL) + return (oldvd); + } + + /* + * Check for a completed replacement. We always consider the first + * vdev in the list to be the oldest vdev, and the last one to be + * the newest (see spa_vdev_attach() for how that works). In + * the case where the newest vdev is faulted, we will not automatically + * remove it after a resilver completes. This is OK as it will require + * user intervention to determine which disk the admin wishes to keep. + */ + if (vd->vdev_ops == &vdev_replacing_ops) { + ASSERT(vd->vdev_children > 1); + + newvd = vd->vdev_child[vd->vdev_children - 1]; + oldvd = vd->vdev_child[0]; + + if (vdev_dtl_empty(newvd, DTL_MISSING) && + vdev_dtl_empty(newvd, DTL_OUTAGE) && + !vdev_dtl_required(oldvd)) + return (oldvd); + } + + /* + * Check for a completed resilver with the 'unspare' flag set. + */ + if (vd->vdev_ops == &vdev_spare_ops) { + vdev_t *first = vd->vdev_child[0]; + vdev_t *last = vd->vdev_child[vd->vdev_children - 1]; + + if (last->vdev_unspare) { + oldvd = first; + newvd = last; + } else if (first->vdev_unspare) { + oldvd = last; + newvd = first; + } else { + oldvd = NULL; + } + + if (oldvd != NULL && + vdev_dtl_empty(newvd, DTL_MISSING) && + vdev_dtl_empty(newvd, DTL_OUTAGE) && + !vdev_dtl_required(oldvd)) + return (oldvd); + + /* + * If there are more than two spares attached to a disk, + * and those spares are not required, then we want to + * attempt to free them up now so that they can be used + * by other pools. Once we're back down to a single + * disk+spare, we stop removing them. + */ + if (vd->vdev_children > 2) { + newvd = vd->vdev_child[1]; + + if (newvd->vdev_isspare && last->vdev_isspare && + vdev_dtl_empty(last, DTL_MISSING) && + vdev_dtl_empty(last, DTL_OUTAGE) && + !vdev_dtl_required(newvd)) + return (newvd); + } + } + + return (NULL); +} + +static void +spa_vdev_resilver_done(spa_t *spa) +{ + vdev_t *vd, *pvd, *ppvd; + uint64_t guid, sguid, pguid, ppguid; + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + while ((vd = spa_vdev_resilver_done_hunt(spa->spa_root_vdev)) != NULL) { + pvd = vd->vdev_parent; + ppvd = pvd->vdev_parent; + guid = vd->vdev_guid; + pguid = pvd->vdev_guid; + ppguid = ppvd->vdev_guid; + sguid = 0; + /* + * If we have just finished replacing a hot spared device, then + * we need to detach the parent's first child (the original hot + * spare) as well. + */ + if (ppvd->vdev_ops == &vdev_spare_ops && pvd->vdev_id == 0 && + ppvd->vdev_children == 2) { + ASSERT(pvd->vdev_ops == &vdev_replacing_ops); + sguid = ppvd->vdev_child[1]->vdev_guid; + } + ASSERT(vd->vdev_resilver_txg == 0 || !vdev_dtl_required(vd)); + + spa_config_exit(spa, SCL_ALL, FTAG); + if (spa_vdev_detach(spa, guid, pguid, B_TRUE) != 0) + return; + if (sguid && spa_vdev_detach(spa, sguid, ppguid, B_TRUE) != 0) + return; + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + } + + spa_config_exit(spa, SCL_ALL, FTAG); +} + +/* + * Update the stored path or FRU for this vdev. + */ +int +spa_vdev_set_common(spa_t *spa, uint64_t guid, const char *value, + boolean_t ispath) +{ + vdev_t *vd; + boolean_t sync = B_FALSE; + + ASSERT(spa_writeable(spa)); + + spa_vdev_state_enter(spa, SCL_ALL); + + if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) + return (spa_vdev_state_exit(spa, NULL, ENOENT)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_state_exit(spa, NULL, ENOTSUP)); + + if (ispath) { + if (strcmp(value, vd->vdev_path) != 0) { + spa_strfree(vd->vdev_path); + vd->vdev_path = spa_strdup(value); + sync = B_TRUE; + } + } else { + if (vd->vdev_fru == NULL) { + vd->vdev_fru = spa_strdup(value); + sync = B_TRUE; + } else if (strcmp(value, vd->vdev_fru) != 0) { + spa_strfree(vd->vdev_fru); + vd->vdev_fru = spa_strdup(value); + sync = B_TRUE; + } + } + + return (spa_vdev_state_exit(spa, sync ? vd : NULL, 0)); +} + +int +spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath) +{ + return (spa_vdev_set_common(spa, guid, newpath, B_TRUE)); +} + +int +spa_vdev_setfru(spa_t *spa, uint64_t guid, const char *newfru) +{ + return (spa_vdev_set_common(spa, guid, newfru, B_FALSE)); +} + +/* + * ========================================================================== + * SPA Scanning + * ========================================================================== + */ +int +spa_scrub_pause_resume(spa_t *spa, pool_scrub_cmd_t cmd) +{ + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); + + if (dsl_scan_resilvering(spa->spa_dsl_pool)) + return (SET_ERROR(EBUSY)); + + return (dsl_scrub_set_pause_resume(spa->spa_dsl_pool, cmd)); +} + +int +spa_scan_stop(spa_t *spa) +{ + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); + if (dsl_scan_resilvering(spa->spa_dsl_pool)) + return (SET_ERROR(EBUSY)); + return (dsl_scan_cancel(spa->spa_dsl_pool)); +} + +int +spa_scan(spa_t *spa, pool_scan_func_t func) +{ + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); + + if (func >= POOL_SCAN_FUNCS || func == POOL_SCAN_NONE) + return (SET_ERROR(ENOTSUP)); + + /* + * If a resilver was requested, but there is no DTL on a + * writeable leaf device, we have nothing to do. + */ + if (func == POOL_SCAN_RESILVER && + !vdev_resilver_needed(spa->spa_root_vdev, NULL, NULL)) { + spa_async_request(spa, SPA_ASYNC_RESILVER_DONE); + return (0); + } + + return (dsl_scan(spa->spa_dsl_pool, func)); +} + +/* + * ========================================================================== + * SPA async task processing + * ========================================================================== + */ + +static void +spa_async_remove(spa_t *spa, vdev_t *vd) +{ + int c; + + if (vd->vdev_remove_wanted) { + vd->vdev_remove_wanted = B_FALSE; + vd->vdev_delayed_close = B_FALSE; + vdev_set_state(vd, B_FALSE, VDEV_STATE_REMOVED, VDEV_AUX_NONE); + + /* + * We want to clear the stats, but we don't want to do a full + * vdev_clear() as that will cause us to throw away + * degraded/faulted state as well as attempt to reopen the + * device, all of which is a waste. + */ + vd->vdev_stat.vs_read_errors = 0; + vd->vdev_stat.vs_write_errors = 0; + vd->vdev_stat.vs_checksum_errors = 0; + + vdev_state_dirty(vd->vdev_top); + } + + for (c = 0; c < vd->vdev_children; c++) + spa_async_remove(spa, vd->vdev_child[c]); +} + +static void +spa_async_probe(spa_t *spa, vdev_t *vd) +{ + int c; + + if (vd->vdev_probe_wanted) { + vd->vdev_probe_wanted = B_FALSE; + vdev_reopen(vd); /* vdev_open() does the actual probe */ + } + + for (c = 0; c < vd->vdev_children; c++) + spa_async_probe(spa, vd->vdev_child[c]); +} + +static void +spa_async_autoexpand(spa_t *spa, vdev_t *vd) +{ + int c; + + if (!spa->spa_autoexpand) + return; + + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + spa_async_autoexpand(spa, cvd); + } + + if (!vd->vdev_ops->vdev_op_leaf || vd->vdev_physpath == NULL) + return; + + spa_event_notify(vd->vdev_spa, vd, NULL, ESC_ZFS_VDEV_AUTOEXPAND); +} + +static void +spa_async_thread(spa_t *spa) +{ + int tasks, i; + + ASSERT(spa->spa_sync_on); + + mutex_enter(&spa->spa_async_lock); + tasks = spa->spa_async_tasks; + spa->spa_async_tasks = 0; + mutex_exit(&spa->spa_async_lock); + + /* + * See if the config needs to be updated. + */ + if (tasks & SPA_ASYNC_CONFIG_UPDATE) { + uint64_t old_space, new_space; + + mutex_enter(&spa_namespace_lock); + old_space = metaslab_class_get_space(spa_normal_class(spa)); + spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); + new_space = metaslab_class_get_space(spa_normal_class(spa)); + mutex_exit(&spa_namespace_lock); + + /* + * If the pool grew as a result of the config update, + * then log an internal history event. + */ + if (new_space != old_space) { + spa_history_log_internal(spa, "vdev online", NULL, + "pool '%s' size: %llu(+%llu)", + spa_name(spa), new_space, new_space - old_space); + } + } + + /* + * See if any devices need to be marked REMOVED. + */ + if (tasks & SPA_ASYNC_REMOVE) { + spa_vdev_state_enter(spa, SCL_NONE); + spa_async_remove(spa, spa->spa_root_vdev); + for (i = 0; i < spa->spa_l2cache.sav_count; i++) + spa_async_remove(spa, spa->spa_l2cache.sav_vdevs[i]); + for (i = 0; i < spa->spa_spares.sav_count; i++) + spa_async_remove(spa, spa->spa_spares.sav_vdevs[i]); + (void) spa_vdev_state_exit(spa, NULL, 0); + } + + if ((tasks & SPA_ASYNC_AUTOEXPAND) && !spa_suspended(spa)) { + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + spa_async_autoexpand(spa, spa->spa_root_vdev); + spa_config_exit(spa, SCL_CONFIG, FTAG); + } + + /* + * See if any devices need to be probed. + */ + if (tasks & SPA_ASYNC_PROBE) { + spa_vdev_state_enter(spa, SCL_NONE); + spa_async_probe(spa, spa->spa_root_vdev); + (void) spa_vdev_state_exit(spa, NULL, 0); + } + + /* + * If any devices are done replacing, detach them. + */ + if (tasks & SPA_ASYNC_RESILVER_DONE) + spa_vdev_resilver_done(spa); + + /* + * Kick off a resilver. + */ + if (tasks & SPA_ASYNC_RESILVER) + dsl_resilver_restart(spa->spa_dsl_pool, 0); + + /* + * Let the world know that we're done. + */ + mutex_enter(&spa->spa_async_lock); + spa->spa_async_thread = NULL; + cv_broadcast(&spa->spa_async_cv); + mutex_exit(&spa->spa_async_lock); + thread_exit(); +} + +void +spa_async_suspend(spa_t *spa) +{ + mutex_enter(&spa->spa_async_lock); + spa->spa_async_suspended++; + while (spa->spa_async_thread != NULL) + cv_wait(&spa->spa_async_cv, &spa->spa_async_lock); + mutex_exit(&spa->spa_async_lock); +} + +void +spa_async_resume(spa_t *spa) +{ + mutex_enter(&spa->spa_async_lock); + ASSERT(spa->spa_async_suspended != 0); + spa->spa_async_suspended--; + mutex_exit(&spa->spa_async_lock); +} + +static boolean_t +spa_async_tasks_pending(spa_t *spa) +{ + uint_t non_config_tasks; + uint_t config_task; + boolean_t config_task_suspended; + + non_config_tasks = spa->spa_async_tasks & ~SPA_ASYNC_CONFIG_UPDATE; + config_task = spa->spa_async_tasks & SPA_ASYNC_CONFIG_UPDATE; + if (spa->spa_ccw_fail_time == 0) { + config_task_suspended = B_FALSE; + } else { + config_task_suspended = + (gethrtime() - spa->spa_ccw_fail_time) < + ((hrtime_t)zfs_ccw_retry_interval * NANOSEC); + } + + return (non_config_tasks || (config_task && !config_task_suspended)); +} + +static void +spa_async_dispatch(spa_t *spa) +{ + mutex_enter(&spa->spa_async_lock); + if (spa_async_tasks_pending(spa) && + !spa->spa_async_suspended && + spa->spa_async_thread == NULL && + rootdir != NULL) + spa->spa_async_thread = thread_create(NULL, 0, + spa_async_thread, spa, 0, &p0, TS_RUN, maxclsyspri); + mutex_exit(&spa->spa_async_lock); +} + +void +spa_async_request(spa_t *spa, int task) +{ + zfs_dbgmsg("spa=%s async request task=%u", spa->spa_name, task); + mutex_enter(&spa->spa_async_lock); + spa->spa_async_tasks |= task; + mutex_exit(&spa->spa_async_lock); +} + +/* + * ========================================================================== + * SPA syncing routines + * ========================================================================== + */ + +static int +bpobj_enqueue_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + bpobj_t *bpo = arg; + bpobj_enqueue(bpo, bp, tx); + return (0); +} + +static int +spa_free_sync_cb(void *arg, const blkptr_t *bp, dmu_tx_t *tx) +{ + zio_t *zio = arg; + + zio_nowait(zio_free_sync(zio, zio->io_spa, dmu_tx_get_txg(tx), bp, + zio->io_flags)); + return (0); +} + +/* + * Note: this simple function is not inlined to make it easier to dtrace the + * amount of time spent syncing frees. + */ +static void +spa_sync_frees(spa_t *spa, bplist_t *bpl, dmu_tx_t *tx) +{ + zio_t *zio = zio_root(spa, NULL, NULL, 0); + bplist_iterate(bpl, spa_free_sync_cb, zio, tx); + VERIFY(zio_wait(zio) == 0); +} + +/* + * Note: this simple function is not inlined to make it easier to dtrace the + * amount of time spent syncing deferred frees. + */ +static void +spa_sync_deferred_frees(spa_t *spa, dmu_tx_t *tx) +{ + zio_t *zio = zio_root(spa, NULL, NULL, 0); + VERIFY3U(bpobj_iterate(&spa->spa_deferred_bpobj, + spa_free_sync_cb, zio, tx), ==, 0); + VERIFY0(zio_wait(zio)); +} + +static void +spa_sync_nvlist(spa_t *spa, uint64_t obj, nvlist_t *nv, dmu_tx_t *tx) +{ + char *packed = NULL; + size_t bufsize; + size_t nvsize = 0; + dmu_buf_t *db; + + VERIFY(nvlist_size(nv, &nvsize, NV_ENCODE_XDR) == 0); + + /* + * Write full (SPA_CONFIG_BLOCKSIZE) blocks of configuration + * information. This avoids the dmu_buf_will_dirty() path and + * saves us a pre-read to get data we don't actually care about. + */ + bufsize = P2ROUNDUP((uint64_t)nvsize, SPA_CONFIG_BLOCKSIZE); + packed = vmem_alloc(bufsize, KM_SLEEP); + + VERIFY(nvlist_pack(nv, &packed, &nvsize, NV_ENCODE_XDR, + KM_SLEEP) == 0); + bzero(packed + nvsize, bufsize - nvsize); + + dmu_write(spa->spa_meta_objset, obj, 0, bufsize, packed, tx); + + vmem_free(packed, bufsize); + + VERIFY(0 == dmu_bonus_hold(spa->spa_meta_objset, obj, FTAG, &db)); + dmu_buf_will_dirty(db, tx); + *(uint64_t *)db->db_data = nvsize; + dmu_buf_rele(db, FTAG); +} + +static void +spa_sync_aux_dev(spa_t *spa, spa_aux_vdev_t *sav, dmu_tx_t *tx, + const char *config, const char *entry) +{ + nvlist_t *nvroot; + nvlist_t **list; + int i; + + if (!sav->sav_sync) + return; + + /* + * Update the MOS nvlist describing the list of available devices. + * spa_validate_aux() will have already made sure this nvlist is + * valid and the vdevs are labeled appropriately. + */ + if (sav->sav_object == 0) { + sav->sav_object = dmu_object_alloc(spa->spa_meta_objset, + DMU_OT_PACKED_NVLIST, 1 << 14, DMU_OT_PACKED_NVLIST_SIZE, + sizeof (uint64_t), tx); + VERIFY(zap_update(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, entry, sizeof (uint64_t), 1, + &sav->sav_object, tx) == 0); + } + + VERIFY(nvlist_alloc(&nvroot, NV_UNIQUE_NAME, KM_SLEEP) == 0); + if (sav->sav_count == 0) { + VERIFY(nvlist_add_nvlist_array(nvroot, config, NULL, 0) == 0); + } else { + list = kmem_alloc(sav->sav_count*sizeof (void *), KM_SLEEP); + for (i = 0; i < sav->sav_count; i++) + list[i] = vdev_config_generate(spa, sav->sav_vdevs[i], + B_FALSE, VDEV_CONFIG_L2CACHE); + VERIFY(nvlist_add_nvlist_array(nvroot, config, list, + sav->sav_count) == 0); + for (i = 0; i < sav->sav_count; i++) + nvlist_free(list[i]); + kmem_free(list, sav->sav_count * sizeof (void *)); + } + + spa_sync_nvlist(spa, sav->sav_object, nvroot, tx); + nvlist_free(nvroot); + + sav->sav_sync = B_FALSE; +} + +/* + * Rebuild spa's all-vdev ZAP from the vdev ZAPs indicated in each vdev_t. + * The all-vdev ZAP must be empty. + */ +static void +spa_avz_build(vdev_t *vd, uint64_t avz, dmu_tx_t *tx) +{ + spa_t *spa = vd->vdev_spa; + uint64_t i; + + if (vd->vdev_top_zap != 0) { + VERIFY0(zap_add_int(spa->spa_meta_objset, avz, + vd->vdev_top_zap, tx)); + } + if (vd->vdev_leaf_zap != 0) { + VERIFY0(zap_add_int(spa->spa_meta_objset, avz, + vd->vdev_leaf_zap, tx)); + } + for (i = 0; i < vd->vdev_children; i++) { + spa_avz_build(vd->vdev_child[i], avz, tx); + } +} + +static void +spa_sync_config_object(spa_t *spa, dmu_tx_t *tx) +{ + nvlist_t *config; + + /* + * If the pool is being imported from a pre-per-vdev-ZAP version of ZFS, + * its config may not be dirty but we still need to build per-vdev ZAPs. + * Similarly, if the pool is being assembled (e.g. after a split), we + * need to rebuild the AVZ although the config may not be dirty. + */ + if (list_is_empty(&spa->spa_config_dirty_list) && + spa->spa_avz_action == AVZ_ACTION_NONE) + return; + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + + ASSERT(spa->spa_avz_action == AVZ_ACTION_NONE || + spa->spa_avz_action == AVZ_ACTION_INITIALIZE || + spa->spa_all_vdev_zaps != 0); + + if (spa->spa_avz_action == AVZ_ACTION_REBUILD) { + zap_cursor_t zc; + zap_attribute_t za; + + /* Make and build the new AVZ */ + uint64_t new_avz = zap_create(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_OT_NONE, 0, tx); + spa_avz_build(spa->spa_root_vdev, new_avz, tx); + + /* Diff old AVZ with new one */ + for (zap_cursor_init(&zc, spa->spa_meta_objset, + spa->spa_all_vdev_zaps); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + uint64_t vdzap = za.za_first_integer; + if (zap_lookup_int(spa->spa_meta_objset, new_avz, + vdzap) == ENOENT) { + /* + * ZAP is listed in old AVZ but not in new one; + * destroy it + */ + VERIFY0(zap_destroy(spa->spa_meta_objset, vdzap, + tx)); + } + } + + zap_cursor_fini(&zc); + + /* Destroy the old AVZ */ + VERIFY0(zap_destroy(spa->spa_meta_objset, + spa->spa_all_vdev_zaps, tx)); + + /* Replace the old AVZ in the dir obj with the new one */ + VERIFY0(zap_update(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_VDEV_ZAP_MAP, + sizeof (new_avz), 1, &new_avz, tx)); + + spa->spa_all_vdev_zaps = new_avz; + } else if (spa->spa_avz_action == AVZ_ACTION_DESTROY) { + zap_cursor_t zc; + zap_attribute_t za; + + /* Walk through the AVZ and destroy all listed ZAPs */ + for (zap_cursor_init(&zc, spa->spa_meta_objset, + spa->spa_all_vdev_zaps); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + uint64_t zap = za.za_first_integer; + VERIFY0(zap_destroy(spa->spa_meta_objset, zap, tx)); + } + + zap_cursor_fini(&zc); + + /* Destroy and unlink the AVZ itself */ + VERIFY0(zap_destroy(spa->spa_meta_objset, + spa->spa_all_vdev_zaps, tx)); + VERIFY0(zap_remove(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_VDEV_ZAP_MAP, tx)); + spa->spa_all_vdev_zaps = 0; + } + + if (spa->spa_all_vdev_zaps == 0) { + spa->spa_all_vdev_zaps = zap_create_link(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_VDEV_ZAP_MAP, tx); + } + spa->spa_avz_action = AVZ_ACTION_NONE; + + /* Create ZAPs for vdevs that don't have them. */ + vdev_construct_zaps(spa->spa_root_vdev, tx); + + config = spa_config_generate(spa, spa->spa_root_vdev, + dmu_tx_get_txg(tx), B_FALSE); + + /* + * If we're upgrading the spa version then make sure that + * the config object gets updated with the correct version. + */ + if (spa->spa_ubsync.ub_version < spa->spa_uberblock.ub_version) + fnvlist_add_uint64(config, ZPOOL_CONFIG_VERSION, + spa->spa_uberblock.ub_version); + + spa_config_exit(spa, SCL_STATE, FTAG); + + nvlist_free(spa->spa_config_syncing); + spa->spa_config_syncing = config; + + spa_sync_nvlist(spa, spa->spa_config_object, config, tx); +} + +static void +spa_sync_version(void *arg, dmu_tx_t *tx) +{ + uint64_t *versionp = arg; + uint64_t version = *versionp; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + + /* + * Setting the version is special cased when first creating the pool. + */ + ASSERT(tx->tx_txg != TXG_INITIAL); + + ASSERT(SPA_VERSION_IS_SUPPORTED(version)); + ASSERT(version >= spa_version(spa)); + + spa->spa_uberblock.ub_version = version; + vdev_config_dirty(spa->spa_root_vdev); + spa_history_log_internal(spa, "set", tx, "version=%lld", version); +} + +/* + * Set zpool properties. + */ +static void +spa_sync_props(void *arg, dmu_tx_t *tx) +{ + nvlist_t *nvp = arg; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = spa->spa_meta_objset; + nvpair_t *elem = NULL; + + mutex_enter(&spa->spa_props_lock); + + while ((elem = nvlist_next_nvpair(nvp, elem))) { + uint64_t intval; + char *strval, *fname; + zpool_prop_t prop; + const char *propname; + zprop_type_t proptype; + spa_feature_t fid; + + prop = zpool_name_to_prop(nvpair_name(elem)); + switch ((int)prop) { + case ZPROP_INVAL: + /* + * We checked this earlier in spa_prop_validate(). + */ + ASSERT(zpool_prop_feature(nvpair_name(elem))); + + fname = strchr(nvpair_name(elem), '@') + 1; + VERIFY0(zfeature_lookup_name(fname, &fid)); + + spa_feature_enable(spa, fid, tx); + spa_history_log_internal(spa, "set", tx, + "%s=enabled", nvpair_name(elem)); + break; + + case ZPOOL_PROP_VERSION: + intval = fnvpair_value_uint64(elem); + /* + * The version is synced separately before other + * properties and should be correct by now. + */ + ASSERT3U(spa_version(spa), >=, intval); + break; + + case ZPOOL_PROP_ALTROOT: + /* + * 'altroot' is a non-persistent property. It should + * have been set temporarily at creation or import time. + */ + ASSERT(spa->spa_root != NULL); + break; + + case ZPOOL_PROP_READONLY: + case ZPOOL_PROP_CACHEFILE: + /* + * 'readonly' and 'cachefile' are also non-persisitent + * properties. + */ + break; + case ZPOOL_PROP_COMMENT: + strval = fnvpair_value_string(elem); + if (spa->spa_comment != NULL) + spa_strfree(spa->spa_comment); + spa->spa_comment = spa_strdup(strval); + /* + * We need to dirty the configuration on all the vdevs + * so that their labels get updated. It's unnecessary + * to do this for pool creation since the vdev's + * configuration has already been dirtied. + */ + if (tx->tx_txg != TXG_INITIAL) + vdev_config_dirty(spa->spa_root_vdev); + spa_history_log_internal(spa, "set", tx, + "%s=%s", nvpair_name(elem), strval); + break; + default: + /* + * Set pool property values in the poolprops mos object. + */ + if (spa->spa_pool_props_object == 0) { + spa->spa_pool_props_object = + zap_create_link(mos, DMU_OT_POOL_PROPS, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_PROPS, + tx); + } + + /* normalize the property name */ + propname = zpool_prop_to_name(prop); + proptype = zpool_prop_get_type(prop); + + if (nvpair_type(elem) == DATA_TYPE_STRING) { + ASSERT(proptype == PROP_TYPE_STRING); + strval = fnvpair_value_string(elem); + VERIFY0(zap_update(mos, + spa->spa_pool_props_object, propname, + 1, strlen(strval) + 1, strval, tx)); + spa_history_log_internal(spa, "set", tx, + "%s=%s", nvpair_name(elem), strval); + } else if (nvpair_type(elem) == DATA_TYPE_UINT64) { + intval = fnvpair_value_uint64(elem); + + if (proptype == PROP_TYPE_INDEX) { + const char *unused; + VERIFY0(zpool_prop_index_to_string( + prop, intval, &unused)); + } + VERIFY0(zap_update(mos, + spa->spa_pool_props_object, propname, + 8, 1, &intval, tx)); + spa_history_log_internal(spa, "set", tx, + "%s=%lld", nvpair_name(elem), intval); + } else { + ASSERT(0); /* not allowed */ + } + + switch (prop) { + case ZPOOL_PROP_DELEGATION: + spa->spa_delegation = intval; + break; + case ZPOOL_PROP_BOOTFS: + spa->spa_bootfs = intval; + break; + case ZPOOL_PROP_FAILUREMODE: + spa->spa_failmode = intval; + break; + case ZPOOL_PROP_AUTOEXPAND: + spa->spa_autoexpand = intval; + if (tx->tx_txg != TXG_INITIAL) + spa_async_request(spa, + SPA_ASYNC_AUTOEXPAND); + break; + case ZPOOL_PROP_MULTIHOST: + spa->spa_multihost = intval; + break; + case ZPOOL_PROP_DEDUPDITTO: + spa->spa_dedup_ditto = intval; + break; + default: + break; + } + } + + } + + mutex_exit(&spa->spa_props_lock); +} + +/* + * Perform one-time upgrade on-disk changes. spa_version() does not + * reflect the new version this txg, so there must be no changes this + * txg to anything that the upgrade code depends on after it executes. + * Therefore this must be called after dsl_pool_sync() does the sync + * tasks. + */ +static void +spa_sync_upgrades(spa_t *spa, dmu_tx_t *tx) +{ + dsl_pool_t *dp = spa->spa_dsl_pool; + + ASSERT(spa->spa_sync_pass == 1); + + rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); + + if (spa->spa_ubsync.ub_version < SPA_VERSION_ORIGIN && + spa->spa_uberblock.ub_version >= SPA_VERSION_ORIGIN) { + dsl_pool_create_origin(dp, tx); + + /* Keeping the origin open increases spa_minref */ + spa->spa_minref += 3; + } + + if (spa->spa_ubsync.ub_version < SPA_VERSION_NEXT_CLONES && + spa->spa_uberblock.ub_version >= SPA_VERSION_NEXT_CLONES) { + dsl_pool_upgrade_clones(dp, tx); + } + + if (spa->spa_ubsync.ub_version < SPA_VERSION_DIR_CLONES && + spa->spa_uberblock.ub_version >= SPA_VERSION_DIR_CLONES) { + dsl_pool_upgrade_dir_clones(dp, tx); + + /* Keeping the freedir open increases spa_minref */ + spa->spa_minref += 3; + } + + if (spa->spa_ubsync.ub_version < SPA_VERSION_FEATURES && + spa->spa_uberblock.ub_version >= SPA_VERSION_FEATURES) { + spa_feature_create_zap_objects(spa, tx); + } + + /* + * LZ4_COMPRESS feature's behaviour was changed to activate_on_enable + * when possibility to use lz4 compression for metadata was added + * Old pools that have this feature enabled must be upgraded to have + * this feature active + */ + if (spa->spa_uberblock.ub_version >= SPA_VERSION_FEATURES) { + boolean_t lz4_en = spa_feature_is_enabled(spa, + SPA_FEATURE_LZ4_COMPRESS); + boolean_t lz4_ac = spa_feature_is_active(spa, + SPA_FEATURE_LZ4_COMPRESS); + + if (lz4_en && !lz4_ac) + spa_feature_incr(spa, SPA_FEATURE_LZ4_COMPRESS, tx); + } + + /* + * If we haven't written the salt, do so now. Note that the + * feature may not be activated yet, but that's fine since + * the presence of this ZAP entry is backwards compatible. + */ + if (zap_contains(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_CHECKSUM_SALT) == ENOENT) { + VERIFY0(zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_CHECKSUM_SALT, 1, + sizeof (spa->spa_cksum_salt.zcs_bytes), + spa->spa_cksum_salt.zcs_bytes, tx)); + } + + rrw_exit(&dp->dp_config_rwlock, FTAG); +} + +/* + * Sync the specified transaction group. New blocks may be dirtied as + * part of the process, so we iterate until it converges. + */ +void +spa_sync(spa_t *spa, uint64_t txg) +{ + dsl_pool_t *dp = spa->spa_dsl_pool; + objset_t *mos = spa->spa_meta_objset; + bplist_t *free_bpl = &spa->spa_free_bplist[txg & TXG_MASK]; + metaslab_class_t *mc; + vdev_t *rvd = spa->spa_root_vdev; + vdev_t *vd; + dmu_tx_t *tx; + int error; + uint32_t max_queue_depth = zfs_vdev_async_write_max_active * + zfs_vdev_queue_depth_pct / 100; + uint64_t queue_depth_total; + int c; + + VERIFY(spa_writeable(spa)); + + /* + * Lock out configuration changes. + */ + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + + spa->spa_syncing_txg = txg; + spa->spa_sync_pass = 0; + + mutex_enter(&spa->spa_alloc_lock); + VERIFY0(avl_numnodes(&spa->spa_alloc_tree)); + mutex_exit(&spa->spa_alloc_lock); + + /* + * If there are any pending vdev state changes, convert them + * into config changes that go out with this transaction group. + */ + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + while (list_head(&spa->spa_state_dirty_list) != NULL) { + /* + * We need the write lock here because, for aux vdevs, + * calling vdev_config_dirty() modifies sav_config. + * This is ugly and will become unnecessary when we + * eliminate the aux vdev wart by integrating all vdevs + * into the root vdev tree. + */ + spa_config_exit(spa, SCL_CONFIG | SCL_STATE, FTAG); + spa_config_enter(spa, SCL_CONFIG | SCL_STATE, FTAG, RW_WRITER); + while ((vd = list_head(&spa->spa_state_dirty_list)) != NULL) { + vdev_state_clean(vd); + vdev_config_dirty(vd); + } + spa_config_exit(spa, SCL_CONFIG | SCL_STATE, FTAG); + spa_config_enter(spa, SCL_CONFIG | SCL_STATE, FTAG, RW_READER); + } + spa_config_exit(spa, SCL_STATE, FTAG); + + tx = dmu_tx_create_assigned(dp, txg); + + spa->spa_sync_starttime = gethrtime(); + taskq_cancel_id(system_delay_taskq, spa->spa_deadman_tqid); + spa->spa_deadman_tqid = taskq_dispatch_delay(system_delay_taskq, + spa_deadman, spa, TQ_SLEEP, ddi_get_lbolt() + + NSEC_TO_TICK(spa->spa_deadman_synctime)); + + /* + * If we are upgrading to SPA_VERSION_RAIDZ_DEFLATE this txg, + * set spa_deflate if we have no raid-z vdevs. + */ + if (spa->spa_ubsync.ub_version < SPA_VERSION_RAIDZ_DEFLATE && + spa->spa_uberblock.ub_version >= SPA_VERSION_RAIDZ_DEFLATE) { + int i; + + for (i = 0; i < rvd->vdev_children; i++) { + vd = rvd->vdev_child[i]; + if (vd->vdev_deflate_ratio != SPA_MINBLOCKSIZE) + break; + } + if (i == rvd->vdev_children) { + spa->spa_deflate = TRUE; + VERIFY(0 == zap_add(spa->spa_meta_objset, + DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_DEFLATE, + sizeof (uint64_t), 1, &spa->spa_deflate, tx)); + } + } + + /* + * Set the top-level vdev's max queue depth. Evaluate each + * top-level's async write queue depth in case it changed. + * The max queue depth will not change in the middle of syncing + * out this txg. + */ + queue_depth_total = 0; + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + metaslab_group_t *mg = tvd->vdev_mg; + + if (mg == NULL || mg->mg_class != spa_normal_class(spa) || + !metaslab_group_initialized(mg)) + continue; + + /* + * It is safe to do a lock-free check here because only async + * allocations look at mg_max_alloc_queue_depth, and async + * allocations all happen from spa_sync(). + */ + ASSERT0(refcount_count(&mg->mg_alloc_queue_depth)); + mg->mg_max_alloc_queue_depth = max_queue_depth; + queue_depth_total += mg->mg_max_alloc_queue_depth; + } + mc = spa_normal_class(spa); + ASSERT0(refcount_count(&mc->mc_alloc_slots)); + mc->mc_alloc_max_slots = queue_depth_total; + mc->mc_alloc_throttle_enabled = zio_dva_throttle_enabled; + + ASSERT3U(mc->mc_alloc_max_slots, <=, + max_queue_depth * rvd->vdev_children); + + /* + * Iterate to convergence. + */ + do { + int pass = ++spa->spa_sync_pass; + + spa_sync_config_object(spa, tx); + spa_sync_aux_dev(spa, &spa->spa_spares, tx, + ZPOOL_CONFIG_SPARES, DMU_POOL_SPARES); + spa_sync_aux_dev(spa, &spa->spa_l2cache, tx, + ZPOOL_CONFIG_L2CACHE, DMU_POOL_L2CACHE); + spa_errlog_sync(spa, txg); + dsl_pool_sync(dp, txg); + + if (pass < zfs_sync_pass_deferred_free) { + spa_sync_frees(spa, free_bpl, tx); + } else { + /* + * We can not defer frees in pass 1, because + * we sync the deferred frees later in pass 1. + */ + ASSERT3U(pass, >, 1); + bplist_iterate(free_bpl, bpobj_enqueue_cb, + &spa->spa_deferred_bpobj, tx); + } + + ddt_sync(spa, txg); + dsl_scan_sync(dp, tx); + + while ((vd = txg_list_remove(&spa->spa_vdev_txg_list, txg))) + vdev_sync(vd, txg); + + if (pass == 1) { + spa_sync_upgrades(spa, tx); + ASSERT3U(txg, >=, + spa->spa_uberblock.ub_rootbp.blk_birth); + /* + * Note: We need to check if the MOS is dirty + * because we could have marked the MOS dirty + * without updating the uberblock (e.g. if we + * have sync tasks but no dirty user data). We + * need to check the uberblock's rootbp because + * it is updated if we have synced out dirty + * data (though in this case the MOS will most + * likely also be dirty due to second order + * effects, we don't want to rely on that here). + */ + if (spa->spa_uberblock.ub_rootbp.blk_birth < txg && + !dmu_objset_is_dirty(mos, txg)) { + /* + * Nothing changed on the first pass, + * therefore this TXG is a no-op. Avoid + * syncing deferred frees, so that we + * can keep this TXG as a no-op. + */ + ASSERT(txg_list_empty(&dp->dp_dirty_datasets, + txg)); + ASSERT(txg_list_empty(&dp->dp_dirty_dirs, txg)); + ASSERT(txg_list_empty(&dp->dp_sync_tasks, txg)); + break; + } + spa_sync_deferred_frees(spa, tx); + } + + } while (dmu_objset_is_dirty(mos, txg)); + +#ifdef ZFS_DEBUG + if (!list_is_empty(&spa->spa_config_dirty_list)) { + /* + * Make sure that the number of ZAPs for all the vdevs matches + * the number of ZAPs in the per-vdev ZAP list. This only gets + * called if the config is dirty; otherwise there may be + * outstanding AVZ operations that weren't completed in + * spa_sync_config_object. + */ + uint64_t all_vdev_zap_entry_count; + ASSERT0(zap_count(spa->spa_meta_objset, + spa->spa_all_vdev_zaps, &all_vdev_zap_entry_count)); + ASSERT3U(vdev_count_verify_zaps(spa->spa_root_vdev), ==, + all_vdev_zap_entry_count); + } +#endif + + /* + * Rewrite the vdev configuration (which includes the uberblock) + * to commit the transaction group. + * + * If there are no dirty vdevs, we sync the uberblock to a few + * random top-level vdevs that are known to be visible in the + * config cache (see spa_vdev_add() for a complete description). + * If there *are* dirty vdevs, sync the uberblock to all vdevs. + */ + for (;;) { + /* + * We hold SCL_STATE to prevent vdev open/close/etc. + * while we're attempting to write the vdev labels. + */ + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + + if (list_is_empty(&spa->spa_config_dirty_list)) { + vdev_t *svd[SPA_DVAS_PER_BP]; + int svdcount = 0; + int children = rvd->vdev_children; + int c0 = spa_get_random(children); + + for (c = 0; c < children; c++) { + vd = rvd->vdev_child[(c0 + c) % children]; + if (vd->vdev_ms_array == 0 || vd->vdev_islog) + continue; + svd[svdcount++] = vd; + if (svdcount == SPA_DVAS_PER_BP) + break; + } + error = vdev_config_sync(svd, svdcount, txg); + } else { + error = vdev_config_sync(rvd->vdev_child, + rvd->vdev_children, txg); + } + + if (error == 0) + spa->spa_last_synced_guid = rvd->vdev_guid; + + spa_config_exit(spa, SCL_STATE, FTAG); + + if (error == 0) + break; + zio_suspend(spa, NULL); + zio_resume_wait(spa); + } + dmu_tx_commit(tx); + + taskq_cancel_id(system_delay_taskq, spa->spa_deadman_tqid); + spa->spa_deadman_tqid = 0; + + /* + * Clear the dirty config list. + */ + while ((vd = list_head(&spa->spa_config_dirty_list)) != NULL) + vdev_config_clean(vd); + + /* + * Now that the new config has synced transactionally, + * let it become visible to the config cache. + */ + if (spa->spa_config_syncing != NULL) { + spa_config_set(spa, spa->spa_config_syncing); + spa->spa_config_txg = txg; + spa->spa_config_syncing = NULL; + } + + dsl_pool_sync_done(dp, txg); + + mutex_enter(&spa->spa_alloc_lock); + VERIFY0(avl_numnodes(&spa->spa_alloc_tree)); + mutex_exit(&spa->spa_alloc_lock); + + /* + * Update usable space statistics. + */ + while ((vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg)))) + vdev_sync_done(vd, txg); + + spa_update_dspace(spa); + + /* + * It had better be the case that we didn't dirty anything + * since vdev_config_sync(). + */ + ASSERT(txg_list_empty(&dp->dp_dirty_datasets, txg)); + ASSERT(txg_list_empty(&dp->dp_dirty_dirs, txg)); + ASSERT(txg_list_empty(&spa->spa_vdev_txg_list, txg)); + + spa->spa_sync_pass = 0; + + /* + * Update the last synced uberblock here. We want to do this at + * the end of spa_sync() so that consumers of spa_last_synced_txg() + * will be guaranteed that all the processing associated with + * that txg has been completed. + */ + spa->spa_ubsync = spa->spa_uberblock; + spa_config_exit(spa, SCL_CONFIG, FTAG); + + spa_handle_ignored_writes(spa); + + /* + * If any async tasks have been requested, kick them off. + */ + spa_async_dispatch(spa); +} + +/* + * Sync all pools. We don't want to hold the namespace lock across these + * operations, so we take a reference on the spa_t and drop the lock during the + * sync. + */ +void +spa_sync_allpools(void) +{ + spa_t *spa = NULL; + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(spa)) != NULL) { + if (spa_state(spa) != POOL_STATE_ACTIVE || + !spa_writeable(spa) || spa_suspended(spa)) + continue; + spa_open_ref(spa, FTAG); + mutex_exit(&spa_namespace_lock); + txg_wait_synced(spa_get_dsl(spa), 0); + mutex_enter(&spa_namespace_lock); + spa_close(spa, FTAG); + } + mutex_exit(&spa_namespace_lock); +} + +/* + * ========================================================================== + * Miscellaneous routines + * ========================================================================== + */ + +/* + * Remove all pools in the system. + */ +void +spa_evict_all(void) +{ + spa_t *spa; + + /* + * Remove all cached state. All pools should be closed now, + * so every spa in the AVL tree should be unreferenced. + */ + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(NULL)) != NULL) { + /* + * Stop async tasks. The async thread may need to detach + * a device that's been replaced, which requires grabbing + * spa_namespace_lock, so we must drop it here. + */ + spa_open_ref(spa, FTAG); + mutex_exit(&spa_namespace_lock); + spa_async_suspend(spa); + mutex_enter(&spa_namespace_lock); + spa_close(spa, FTAG); + + if (spa->spa_state != POOL_STATE_UNINITIALIZED) { + spa_unload(spa); + spa_deactivate(spa); + } + spa_remove(spa); + } + mutex_exit(&spa_namespace_lock); +} + +vdev_t * +spa_lookup_by_guid(spa_t *spa, uint64_t guid, boolean_t aux) +{ + vdev_t *vd; + int i; + + if ((vd = vdev_lookup_by_guid(spa->spa_root_vdev, guid)) != NULL) + return (vd); + + if (aux) { + for (i = 0; i < spa->spa_l2cache.sav_count; i++) { + vd = spa->spa_l2cache.sav_vdevs[i]; + if (vd->vdev_guid == guid) + return (vd); + } + + for (i = 0; i < spa->spa_spares.sav_count; i++) { + vd = spa->spa_spares.sav_vdevs[i]; + if (vd->vdev_guid == guid) + return (vd); + } + } + + return (NULL); +} + +void +spa_upgrade(spa_t *spa, uint64_t version) +{ + ASSERT(spa_writeable(spa)); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + /* + * This should only be called for a non-faulted pool, and since a + * future version would result in an unopenable pool, this shouldn't be + * possible. + */ + ASSERT(SPA_VERSION_IS_SUPPORTED(spa->spa_uberblock.ub_version)); + ASSERT3U(version, >=, spa->spa_uberblock.ub_version); + + spa->spa_uberblock.ub_version = version; + vdev_config_dirty(spa->spa_root_vdev); + + spa_config_exit(spa, SCL_ALL, FTAG); + + txg_wait_synced(spa_get_dsl(spa), 0); +} + +boolean_t +spa_has_spare(spa_t *spa, uint64_t guid) +{ + int i; + uint64_t spareguid; + spa_aux_vdev_t *sav = &spa->spa_spares; + + for (i = 0; i < sav->sav_count; i++) + if (sav->sav_vdevs[i]->vdev_guid == guid) + return (B_TRUE); + + for (i = 0; i < sav->sav_npending; i++) { + if (nvlist_lookup_uint64(sav->sav_pending[i], ZPOOL_CONFIG_GUID, + &spareguid) == 0 && spareguid == guid) + return (B_TRUE); + } + + return (B_FALSE); +} + +/* + * Check if a pool has an active shared spare device. + * Note: reference count of an active spare is 2, as a spare and as a replace + */ +static boolean_t +spa_has_active_shared_spare(spa_t *spa) +{ + int i, refcnt; + uint64_t pool; + spa_aux_vdev_t *sav = &spa->spa_spares; + + for (i = 0; i < sav->sav_count; i++) { + if (spa_spare_exists(sav->sav_vdevs[i]->vdev_guid, &pool, + &refcnt) && pool != 0ULL && pool == spa_guid(spa) && + refcnt > 2) + return (B_TRUE); + } + + return (B_FALSE); +} + +static sysevent_t * +spa_event_create(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl, const char *name) +{ + sysevent_t *ev = NULL; +#ifdef _KERNEL + nvlist_t *resource; + + resource = zfs_event_create(spa, vd, FM_SYSEVENT_CLASS, name, hist_nvl); + if (resource) { + ev = kmem_alloc(sizeof (sysevent_t), KM_SLEEP); + ev->resource = resource; + } +#endif + return (ev); +} + +static void +spa_event_post(sysevent_t *ev) +{ +#ifdef _KERNEL + if (ev) { + zfs_zevent_post(ev->resource, NULL, zfs_zevent_post_cb); + kmem_free(ev, sizeof (*ev)); + } +#endif +} + +/* + * Post a zevent corresponding to the given sysevent. The 'name' must be one + * of the event definitions in sys/sysevent/eventdefs.h. The payload will be + * filled in from the spa and (optionally) the vdev. This doesn't do anything + * in the userland libzpool, as we don't want consumers to misinterpret ztest + * or zdb as real changes. + */ +void +spa_event_notify(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl, const char *name) +{ + spa_event_post(spa_event_create(spa, vd, hist_nvl, name)); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* state manipulation functions */ +EXPORT_SYMBOL(spa_open); +EXPORT_SYMBOL(spa_open_rewind); +EXPORT_SYMBOL(spa_get_stats); +EXPORT_SYMBOL(spa_create); +EXPORT_SYMBOL(spa_import); +EXPORT_SYMBOL(spa_tryimport); +EXPORT_SYMBOL(spa_destroy); +EXPORT_SYMBOL(spa_export); +EXPORT_SYMBOL(spa_reset); +EXPORT_SYMBOL(spa_async_request); +EXPORT_SYMBOL(spa_async_suspend); +EXPORT_SYMBOL(spa_async_resume); +EXPORT_SYMBOL(spa_inject_addref); +EXPORT_SYMBOL(spa_inject_delref); +EXPORT_SYMBOL(spa_scan_stat_init); +EXPORT_SYMBOL(spa_scan_get_stats); + +/* device maniion */ +EXPORT_SYMBOL(spa_vdev_add); +EXPORT_SYMBOL(spa_vdev_attach); +EXPORT_SYMBOL(spa_vdev_detach); +EXPORT_SYMBOL(spa_vdev_remove); +EXPORT_SYMBOL(spa_vdev_setpath); +EXPORT_SYMBOL(spa_vdev_setfru); +EXPORT_SYMBOL(spa_vdev_split_mirror); + +/* spare statech is global across all pools) */ +EXPORT_SYMBOL(spa_spare_add); +EXPORT_SYMBOL(spa_spare_remove); +EXPORT_SYMBOL(spa_spare_exists); +EXPORT_SYMBOL(spa_spare_activate); + +/* L2ARC statech is global across all pools) */ +EXPORT_SYMBOL(spa_l2cache_add); +EXPORT_SYMBOL(spa_l2cache_remove); +EXPORT_SYMBOL(spa_l2cache_exists); +EXPORT_SYMBOL(spa_l2cache_activate); +EXPORT_SYMBOL(spa_l2cache_drop); + +/* scanning */ +EXPORT_SYMBOL(spa_scan); +EXPORT_SYMBOL(spa_scan_stop); + +/* spa syncing */ +EXPORT_SYMBOL(spa_sync); /* only for DMU use */ +EXPORT_SYMBOL(spa_sync_allpools); + +/* properties */ +EXPORT_SYMBOL(spa_prop_set); +EXPORT_SYMBOL(spa_prop_get); +EXPORT_SYMBOL(spa_prop_clear_bootfs); + +/* asynchronous event notification */ +EXPORT_SYMBOL(spa_event_notify); +#endif + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(spa_load_verify_maxinflight, int, 0644); +MODULE_PARM_DESC(spa_load_verify_maxinflight, + "Max concurrent traversal I/Os while verifying pool during import -X"); + +module_param(spa_load_verify_metadata, int, 0644); +MODULE_PARM_DESC(spa_load_verify_metadata, + "Set to traverse metadata on pool import"); + +module_param(spa_load_verify_data, int, 0644); +MODULE_PARM_DESC(spa_load_verify_data, + "Set to traverse data on pool import"); + +/* CSTYLED */ +module_param(zio_taskq_batch_pct, uint, 0444); +MODULE_PARM_DESC(zio_taskq_batch_pct, + "Percentage of CPUs to run an IO worker thread"); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_boot.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_boot.c @@ -0,0 +1,50 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifdef _KERNEL + +#include +#include +#include + +char * +spa_get_bootprop(char *propname) +{ + char *value; + + if (ddi_prop_lookup_string(DDI_DEV_T_ANY, ddi_root_node(), + DDI_PROP_DONTPASS, propname, &value) != DDI_SUCCESS) + return (NULL); + return (value); +} + +void +spa_free_bootprop(char *value) +{ + ddi_prop_free(value); +} + +#endif /* _KERNEL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_config.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_config.c @@ -0,0 +1,592 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright 2017 Joyent, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#endif + +/* + * Pool configuration repository. + * + * Pool configuration is stored as a packed nvlist on the filesystem. By + * default, all pools are stored in /etc/zfs/zpool.cache and loaded on boot + * (when the ZFS module is loaded). Pools can also have the 'cachefile' + * property set that allows them to be stored in an alternate location until + * the control of external software. + * + * For each cache file, we have a single nvlist which holds all the + * configuration information. When the module loads, we read this information + * from /etc/zfs/zpool.cache and populate the SPA namespace. This namespace is + * maintained independently in spa.c. Whenever the namespace is modified, or + * the configuration of a pool is changed, we call spa_config_sync(), which + * walks through all the active pools and writes the configuration to disk. + */ + +static uint64_t spa_config_generation = 1; + +/* + * This can be overridden in userland to preserve an alternate namespace for + * userland pools when doing testing. + */ +char *spa_config_path = ZPOOL_CACHE; +int zfs_autoimport_disable = 1; + +/* + * Called when the module is first loaded, this routine loads the configuration + * file into the SPA namespace. It does not actually open or load the pools; it + * only populates the namespace. + */ +void +spa_config_load(void) +{ + void *buf = NULL; + nvlist_t *nvlist, *child; + nvpair_t *nvpair; + char *pathname; + struct _buf *file; + uint64_t fsize; + +#ifdef _KERNEL + if (zfs_autoimport_disable) + return; +#endif + + /* + * Open the configuration file. + */ + pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + (void) snprintf(pathname, MAXPATHLEN, "%s%s", + (rootdir != NULL) ? "./" : "", spa_config_path); + + file = kobj_open_file(pathname); + + kmem_free(pathname, MAXPATHLEN); + + if (file == (struct _buf *)-1) + return; + + if (kobj_get_filesize(file, &fsize) != 0) + goto out; + + buf = kmem_alloc(fsize, KM_SLEEP); + + /* + * Read the nvlist from the file. + */ + if (kobj_read_file(file, buf, fsize, 0) < 0) + goto out; + + /* + * Unpack the nvlist. + */ + if (nvlist_unpack(buf, fsize, &nvlist, KM_SLEEP) != 0) + goto out; + + /* + * Iterate over all elements in the nvlist, creating a new spa_t for + * each one with the specified configuration. + */ + mutex_enter(&spa_namespace_lock); + nvpair = NULL; + while ((nvpair = nvlist_next_nvpair(nvlist, nvpair)) != NULL) { + if (nvpair_type(nvpair) != DATA_TYPE_NVLIST) + continue; + + child = fnvpair_value_nvlist(nvpair); + + if (spa_lookup(nvpair_name(nvpair)) != NULL) + continue; + (void) spa_add(nvpair_name(nvpair), child, NULL); + } + mutex_exit(&spa_namespace_lock); + + nvlist_free(nvlist); + +out: + if (buf != NULL) + kmem_free(buf, fsize); + + kobj_close_file(file); +} + +static int +spa_config_write(spa_config_dirent_t *dp, nvlist_t *nvl) +{ + size_t buflen; + char *buf; + vnode_t *vp; + int oflags = FWRITE | FTRUNC | FCREAT | FOFFMAX; + char *temp; + int err; + + /* + * If the nvlist is empty (NULL), then remove the old cachefile. + */ + if (nvl == NULL) { + err = vn_remove(dp->scd_path, UIO_SYSSPACE, RMFILE); + return (err); + } + + /* + * Pack the configuration into a buffer. + */ + buf = fnvlist_pack(nvl, &buflen); + temp = kmem_zalloc(MAXPATHLEN, KM_SLEEP); + +#if defined(__linux__) && defined(_KERNEL) + /* + * Write the configuration to disk. Due to the complexity involved + * in performing a rename from within the kernel the file is truncated + * and overwritten in place. In the event of an error the file is + * unlinked to make sure we always have a consistent view of the data. + */ + err = vn_open(dp->scd_path, UIO_SYSSPACE, oflags, 0644, &vp, 0, 0); + if (err == 0) { + err = vn_rdwr(UIO_WRITE, vp, buf, buflen, 0, + UIO_SYSSPACE, 0, RLIM64_INFINITY, kcred, NULL); + if (err == 0) + err = VOP_FSYNC(vp, FSYNC, kcred, NULL); + + (void) VOP_CLOSE(vp, oflags, 1, 0, kcred, NULL); + + if (err) + (void) vn_remove(dp->scd_path, UIO_SYSSPACE, RMFILE); + } +#else + /* + * Write the configuration to disk. We need to do the traditional + * 'write to temporary file, sync, move over original' to make sure we + * always have a consistent view of the data. + */ + (void) snprintf(temp, MAXPATHLEN, "%s.tmp", dp->scd_path); + + err = vn_open(temp, UIO_SYSSPACE, oflags, 0644, &vp, CRCREAT, 0); + if (err == 0) { + err = vn_rdwr(UIO_WRITE, vp, buf, buflen, 0, UIO_SYSSPACE, + 0, RLIM64_INFINITY, kcred, NULL); + if (err == 0) + err = VOP_FSYNC(vp, FSYNC, kcred, NULL); + if (err == 0) + err = vn_rename(temp, dp->scd_path, UIO_SYSSPACE); + (void) VOP_CLOSE(vp, oflags, 1, 0, kcred, NULL); + } + + (void) vn_remove(temp, UIO_SYSSPACE, RMFILE); +#endif + + fnvlist_pack_free(buf, buflen); + kmem_free(temp, MAXPATHLEN); + return (err); +} + +/* + * Synchronize pool configuration to disk. This must be called with the + * namespace lock held. Synchronizing the pool cache is typically done after + * the configuration has been synced to the MOS. This exposes a window where + * the MOS config will have been updated but the cache file has not. If + * the system were to crash at that instant then the cached config may not + * contain the correct information to open the pool and an explicit import + * would be required. + */ +void +spa_config_sync(spa_t *target, boolean_t removing, boolean_t postsysevent) +{ + spa_config_dirent_t *dp, *tdp; + nvlist_t *nvl; + char *pool_name; + boolean_t ccw_failure; + int error = 0; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + if (rootdir == NULL || !(spa_mode_global & FWRITE)) + return; + + /* + * Iterate over all cachefiles for the pool, past or present. When the + * cachefile is changed, the new one is pushed onto this list, allowing + * us to update previous cachefiles that no longer contain this pool. + */ + ccw_failure = B_FALSE; + for (dp = list_head(&target->spa_config_list); dp != NULL; + dp = list_next(&target->spa_config_list, dp)) { + spa_t *spa = NULL; + if (dp->scd_path == NULL) + continue; + + /* + * Iterate over all pools, adding any matching pools to 'nvl'. + */ + nvl = NULL; + while ((spa = spa_next(spa)) != NULL) { + /* + * Skip over our own pool if we're about to remove + * ourselves from the spa namespace or any pool that + * is readonly. Since we cannot guarantee that a + * readonly pool would successfully import upon reboot, + * we don't allow them to be written to the cache file. + */ + if ((spa == target && removing) || + !spa_writeable(spa)) + continue; + + mutex_enter(&spa->spa_props_lock); + tdp = list_head(&spa->spa_config_list); + if (spa->spa_config == NULL || + tdp == NULL || + tdp->scd_path == NULL || + strcmp(tdp->scd_path, dp->scd_path) != 0) { + mutex_exit(&spa->spa_props_lock); + continue; + } + + if (nvl == NULL) + nvl = fnvlist_alloc(); + + if (spa->spa_import_flags & ZFS_IMPORT_TEMP_NAME) + pool_name = fnvlist_lookup_string( + spa->spa_config, ZPOOL_CONFIG_POOL_NAME); + else + pool_name = spa_name(spa); + + fnvlist_add_nvlist(nvl, pool_name, spa->spa_config); + mutex_exit(&spa->spa_props_lock); + } + + error = spa_config_write(dp, nvl); + if (error != 0) + ccw_failure = B_TRUE; + nvlist_free(nvl); + } + + if (ccw_failure) { + /* + * Keep trying so that configuration data is + * written if/when any temporary filesystem + * resource issues are resolved. + */ + if (target->spa_ccw_fail_time == 0) { + zfs_ereport_post(FM_EREPORT_ZFS_CONFIG_CACHE_WRITE, + target, NULL, NULL, 0, 0); + } + target->spa_ccw_fail_time = gethrtime(); + spa_async_request(target, SPA_ASYNC_CONFIG_UPDATE); + } else { + /* + * Do not rate limit future attempts to update + * the config cache. + */ + target->spa_ccw_fail_time = 0; + } + + /* + * Remove any config entries older than the current one. + */ + dp = list_head(&target->spa_config_list); + while ((tdp = list_next(&target->spa_config_list, dp)) != NULL) { + list_remove(&target->spa_config_list, tdp); + if (tdp->scd_path != NULL) + spa_strfree(tdp->scd_path); + kmem_free(tdp, sizeof (spa_config_dirent_t)); + } + + spa_config_generation++; + + if (postsysevent) + spa_event_notify(target, NULL, NULL, ESC_ZFS_CONFIG_SYNC); +} + +/* + * Sigh. Inside a local zone, we don't have access to /etc/zfs/zpool.cache, + * and we don't want to allow the local zone to see all the pools anyway. + * So we have to invent the ZFS_IOC_CONFIG ioctl to grab the configuration + * information for all pool visible within the zone. + */ +nvlist_t * +spa_all_configs(uint64_t *generation) +{ + nvlist_t *pools; + spa_t *spa = NULL; + + if (*generation == spa_config_generation) + return (NULL); + + pools = fnvlist_alloc(); + + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(spa)) != NULL) { + if (INGLOBALZONE(curproc) || + zone_dataset_visible(spa_name(spa), NULL)) { + mutex_enter(&spa->spa_props_lock); + fnvlist_add_nvlist(pools, spa_name(spa), + spa->spa_config); + mutex_exit(&spa->spa_props_lock); + } + } + *generation = spa_config_generation; + mutex_exit(&spa_namespace_lock); + + return (pools); +} + +void +spa_config_set(spa_t *spa, nvlist_t *config) +{ + mutex_enter(&spa->spa_props_lock); + nvlist_free(spa->spa_config); + spa->spa_config = config; + mutex_exit(&spa->spa_props_lock); +} + +/* + * Generate the pool's configuration based on the current in-core state. + * + * We infer whether to generate a complete config or just one top-level config + * based on whether vd is the root vdev. + */ +nvlist_t * +spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg, int getstats) +{ + nvlist_t *config, *nvroot; + vdev_t *rvd = spa->spa_root_vdev; + unsigned long hostid = 0; + boolean_t locked = B_FALSE; + uint64_t split_guid; + char *pool_name; + int config_gen_flags = 0; + + if (vd == NULL) { + vd = rvd; + locked = B_TRUE; + spa_config_enter(spa, SCL_CONFIG | SCL_STATE, FTAG, RW_READER); + } + + ASSERT(spa_config_held(spa, SCL_CONFIG | SCL_STATE, RW_READER) == + (SCL_CONFIG | SCL_STATE)); + + /* + * If txg is -1, report the current value of spa->spa_config_txg. + */ + if (txg == -1ULL) + txg = spa->spa_config_txg; + + /* + * Originally, users had to handle spa namespace collisions by either + * exporting the already imported pool or by specifying a new name for + * the pool with a conflicting name. In the case of root pools from + * virtual guests, neither approach to collision resolution is + * reasonable. This is addressed by extending the new name syntax with + * an option to specify that the new name is temporary. When specified, + * ZFS_IMPORT_TEMP_NAME will be set in spa->spa_import_flags to tell us + * to use the previous name, which we do below. + */ + if (spa->spa_import_flags & ZFS_IMPORT_TEMP_NAME) { + VERIFY0(nvlist_lookup_string(spa->spa_config, + ZPOOL_CONFIG_POOL_NAME, &pool_name)); + } else + pool_name = spa_name(spa); + + config = fnvlist_alloc(); + + fnvlist_add_uint64(config, ZPOOL_CONFIG_VERSION, spa_version(spa)); + fnvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, pool_name); + fnvlist_add_uint64(config, ZPOOL_CONFIG_POOL_STATE, spa_state(spa)); + fnvlist_add_uint64(config, ZPOOL_CONFIG_POOL_TXG, txg); + fnvlist_add_uint64(config, ZPOOL_CONFIG_POOL_GUID, spa_guid(spa)); + fnvlist_add_uint64(config, ZPOOL_CONFIG_ERRATA, spa->spa_errata); + if (spa->spa_comment != NULL) + fnvlist_add_string(config, ZPOOL_CONFIG_COMMENT, + spa->spa_comment); + + hostid = spa_get_hostid(); + if (hostid != 0) + fnvlist_add_uint64(config, ZPOOL_CONFIG_HOSTID, hostid); + fnvlist_add_string(config, ZPOOL_CONFIG_HOSTNAME, utsname()->nodename); + + if (vd != rvd) { + fnvlist_add_uint64(config, ZPOOL_CONFIG_TOP_GUID, + vd->vdev_top->vdev_guid); + fnvlist_add_uint64(config, ZPOOL_CONFIG_GUID, + vd->vdev_guid); + if (vd->vdev_isspare) + fnvlist_add_uint64(config, + ZPOOL_CONFIG_IS_SPARE, 1ULL); + if (vd->vdev_islog) + fnvlist_add_uint64(config, + ZPOOL_CONFIG_IS_LOG, 1ULL); + vd = vd->vdev_top; /* label contains top config */ + } else { + /* + * Only add the (potentially large) split information + * in the mos config, and not in the vdev labels + */ + if (spa->spa_config_splitting != NULL) + fnvlist_add_nvlist(config, ZPOOL_CONFIG_SPLIT, + spa->spa_config_splitting); + + fnvlist_add_boolean(config, ZPOOL_CONFIG_HAS_PER_VDEV_ZAPS); + + config_gen_flags |= VDEV_CONFIG_MOS; + } + + /* + * Add the top-level config. We even add this on pools which + * don't support holes in the namespace. + */ + vdev_top_config_generate(spa, config); + + /* + * If we're splitting, record the original pool's guid. + */ + if (spa->spa_config_splitting != NULL && + nvlist_lookup_uint64(spa->spa_config_splitting, + ZPOOL_CONFIG_SPLIT_GUID, &split_guid) == 0) { + fnvlist_add_uint64(config, ZPOOL_CONFIG_SPLIT_GUID, split_guid); + } + + nvroot = vdev_config_generate(spa, vd, getstats, config_gen_flags); + fnvlist_add_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, nvroot); + nvlist_free(nvroot); + + /* + * Store what's necessary for reading the MOS in the label. + */ + fnvlist_add_nvlist(config, ZPOOL_CONFIG_FEATURES_FOR_READ, + spa->spa_label_features); + + if (getstats && spa_load_state(spa) == SPA_LOAD_NONE) { + ddt_histogram_t *ddh; + ddt_stat_t *dds; + ddt_object_t *ddo; + + ddh = kmem_zalloc(sizeof (ddt_histogram_t), KM_SLEEP); + ddt_get_dedup_histogram(spa, ddh); + fnvlist_add_uint64_array(config, + ZPOOL_CONFIG_DDT_HISTOGRAM, + (uint64_t *)ddh, sizeof (*ddh) / sizeof (uint64_t)); + kmem_free(ddh, sizeof (ddt_histogram_t)); + + ddo = kmem_zalloc(sizeof (ddt_object_t), KM_SLEEP); + ddt_get_dedup_object_stats(spa, ddo); + fnvlist_add_uint64_array(config, + ZPOOL_CONFIG_DDT_OBJ_STATS, + (uint64_t *)ddo, sizeof (*ddo) / sizeof (uint64_t)); + kmem_free(ddo, sizeof (ddt_object_t)); + + dds = kmem_zalloc(sizeof (ddt_stat_t), KM_SLEEP); + ddt_get_dedup_stats(spa, dds); + fnvlist_add_uint64_array(config, + ZPOOL_CONFIG_DDT_STATS, + (uint64_t *)dds, sizeof (*dds) / sizeof (uint64_t)); + kmem_free(dds, sizeof (ddt_stat_t)); + } + + if (locked) + spa_config_exit(spa, SCL_CONFIG | SCL_STATE, FTAG); + + return (config); +} + +/* + * Update all disk labels, generate a fresh config based on the current + * in-core state, and sync the global config cache (do not sync the config + * cache if this is a booting rootpool). + */ +void +spa_config_update(spa_t *spa, int what) +{ + vdev_t *rvd = spa->spa_root_vdev; + uint64_t txg; + int c; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + txg = spa_last_synced_txg(spa) + 1; + if (what == SPA_CONFIG_UPDATE_POOL) { + vdev_config_dirty(rvd); + } else { + /* + * If we have top-level vdevs that were added but have + * not yet been prepared for allocation, do that now. + * (It's safe now because the config cache is up to date, + * so it will be able to translate the new DVAs.) + * See comments in spa_vdev_add() for full details. + */ + for (c = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + if (tvd->vdev_ms_array == 0) + vdev_metaslab_set_size(tvd); + vdev_expand(tvd, txg); + } + } + spa_config_exit(spa, SCL_ALL, FTAG); + + /* + * Wait for the mosconfig to be regenerated and synced. + */ + txg_wait_synced(spa->spa_dsl_pool, txg); + + /* + * Update the global config cache to reflect the new mosconfig. + */ + if (!spa->spa_is_root) + spa_config_sync(spa, B_FALSE, what != SPA_CONFIG_UPDATE_POOL); + + if (what == SPA_CONFIG_UPDATE_POOL) + spa_config_update(spa, SPA_CONFIG_UPDATE_VDEVS); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(spa_config_sync); +EXPORT_SYMBOL(spa_config_load); +EXPORT_SYMBOL(spa_all_configs); +EXPORT_SYMBOL(spa_config_set); +EXPORT_SYMBOL(spa_config_generate); +EXPORT_SYMBOL(spa_config_update); + +module_param(spa_config_path, charp, 0444); +MODULE_PARM_DESC(spa_config_path, "SPA config file (/etc/zfs/zpool.cache)"); + +module_param(zfs_autoimport_disable, int, 0644); +MODULE_PARM_DESC(zfs_autoimport_disable, "Disable pool import at module load"); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_errlog.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_errlog.c @@ -0,0 +1,417 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. + */ + +/* + * Routines to manage the on-disk persistent error log. + * + * Each pool stores a log of all logical data errors seen during normal + * operation. This is actually the union of two distinct logs: the last log, + * and the current log. All errors seen are logged to the current log. When a + * scrub completes, the current log becomes the last log, the last log is thrown + * out, and the current log is reinitialized. This way, if an error is somehow + * corrected, a new scrub will show that that it no longer exists, and will be + * deleted from the log when the scrub completes. + * + * The log is stored using a ZAP object whose key is a string form of the + * zbookmark_phys tuple (objset, object, level, blkid), and whose contents is an + * optional 'objset:object' human-readable string describing the data. When an + * error is first logged, this string will be empty, indicating that no name is + * known. This prevents us from having to issue a potentially large amount of + * I/O to discover the object name during an error path. Instead, we do the + * calculation when the data is requested, storing the result so future queries + * will be faster. + * + * This log is then shipped into an nvlist where the key is the dataset name and + * the value is the object name. Userland is then responsible for uniquifying + * this list and displaying it to the user. + */ + +#include +#include +#include +#include +#include + + +/* + * Convert a bookmark to a string. + */ +static void +bookmark_to_name(zbookmark_phys_t *zb, char *buf, size_t len) +{ + (void) snprintf(buf, len, "%llx:%llx:%llx:%llx", + (u_longlong_t)zb->zb_objset, (u_longlong_t)zb->zb_object, + (u_longlong_t)zb->zb_level, (u_longlong_t)zb->zb_blkid); +} + +/* + * Convert a string to a bookmark + */ +#ifdef _KERNEL +static void +name_to_bookmark(char *buf, zbookmark_phys_t *zb) +{ + zb->zb_objset = zfs_strtonum(buf, &buf); + ASSERT(*buf == ':'); + zb->zb_object = zfs_strtonum(buf + 1, &buf); + ASSERT(*buf == ':'); + zb->zb_level = (int)zfs_strtonum(buf + 1, &buf); + ASSERT(*buf == ':'); + zb->zb_blkid = zfs_strtonum(buf + 1, &buf); + ASSERT(*buf == '\0'); +} +#endif + +/* + * Log an uncorrectable error to the persistent error log. We add it to the + * spa's list of pending errors. The changes are actually synced out to disk + * during spa_errlog_sync(). + */ +void +spa_log_error(spa_t *spa, zio_t *zio) +{ + zbookmark_phys_t *zb = &zio->io_logical->io_bookmark; + spa_error_entry_t search; + spa_error_entry_t *new; + avl_tree_t *tree; + avl_index_t where; + + /* + * If we are trying to import a pool, ignore any errors, as we won't be + * writing to the pool any time soon. + */ + if (spa_load_state(spa) == SPA_LOAD_TRYIMPORT) + return; + + mutex_enter(&spa->spa_errlist_lock); + + /* + * If we have had a request to rotate the log, log it to the next list + * instead of the current one. + */ + if (spa->spa_scrub_active || spa->spa_scrub_finished) + tree = &spa->spa_errlist_scrub; + else + tree = &spa->spa_errlist_last; + + search.se_bookmark = *zb; + if (avl_find(tree, &search, &where) != NULL) { + mutex_exit(&spa->spa_errlist_lock); + return; + } + + new = kmem_zalloc(sizeof (spa_error_entry_t), KM_SLEEP); + new->se_bookmark = *zb; + avl_insert(tree, new, where); + + mutex_exit(&spa->spa_errlist_lock); +} + +/* + * Return the number of errors currently in the error log. This is actually the + * sum of both the last log and the current log, since we don't know the union + * of these logs until we reach userland. + */ +uint64_t +spa_get_errlog_size(spa_t *spa) +{ + uint64_t total = 0, count; + + mutex_enter(&spa->spa_errlog_lock); + if (spa->spa_errlog_scrub != 0 && + zap_count(spa->spa_meta_objset, spa->spa_errlog_scrub, + &count) == 0) + total += count; + + if (spa->spa_errlog_last != 0 && !spa->spa_scrub_finished && + zap_count(spa->spa_meta_objset, spa->spa_errlog_last, + &count) == 0) + total += count; + mutex_exit(&spa->spa_errlog_lock); + + mutex_enter(&spa->spa_errlist_lock); + total += avl_numnodes(&spa->spa_errlist_last); + total += avl_numnodes(&spa->spa_errlist_scrub); + mutex_exit(&spa->spa_errlist_lock); + + return (total); +} + +#ifdef _KERNEL +static int +process_error_log(spa_t *spa, uint64_t obj, void *addr, size_t *count) +{ + zap_cursor_t zc; + zap_attribute_t za; + zbookmark_phys_t zb; + + if (obj == 0) + return (0); + + for (zap_cursor_init(&zc, spa->spa_meta_objset, obj); + zap_cursor_retrieve(&zc, &za) == 0; + zap_cursor_advance(&zc)) { + + if (*count == 0) { + zap_cursor_fini(&zc); + return (SET_ERROR(ENOMEM)); + } + + name_to_bookmark(za.za_name, &zb); + + if (copyout(&zb, (char *)addr + + (*count - 1) * sizeof (zbookmark_phys_t), + sizeof (zbookmark_phys_t)) != 0) { + zap_cursor_fini(&zc); + return (SET_ERROR(EFAULT)); + } + + *count -= 1; + } + + zap_cursor_fini(&zc); + + return (0); +} + +static int +process_error_list(avl_tree_t *list, void *addr, size_t *count) +{ + spa_error_entry_t *se; + + for (se = avl_first(list); se != NULL; se = AVL_NEXT(list, se)) { + + if (*count == 0) + return (SET_ERROR(ENOMEM)); + + if (copyout(&se->se_bookmark, (char *)addr + + (*count - 1) * sizeof (zbookmark_phys_t), + sizeof (zbookmark_phys_t)) != 0) + return (SET_ERROR(EFAULT)); + + *count -= 1; + } + + return (0); +} +#endif + +/* + * Copy all known errors to userland as an array of bookmarks. This is + * actually a union of the on-disk last log and current log, as well as any + * pending error requests. + * + * Because the act of reading the on-disk log could cause errors to be + * generated, we have two separate locks: one for the error log and one for the + * in-core error lists. We only need the error list lock to log and error, so + * we grab the error log lock while we read the on-disk logs, and only pick up + * the error list lock when we are finished. + */ +int +spa_get_errlog(spa_t *spa, void *uaddr, size_t *count) +{ + int ret = 0; + +#ifdef _KERNEL + mutex_enter(&spa->spa_errlog_lock); + + ret = process_error_log(spa, spa->spa_errlog_scrub, uaddr, count); + + if (!ret && !spa->spa_scrub_finished) + ret = process_error_log(spa, spa->spa_errlog_last, uaddr, + count); + + mutex_enter(&spa->spa_errlist_lock); + if (!ret) + ret = process_error_list(&spa->spa_errlist_scrub, uaddr, + count); + if (!ret) + ret = process_error_list(&spa->spa_errlist_last, uaddr, + count); + mutex_exit(&spa->spa_errlist_lock); + + mutex_exit(&spa->spa_errlog_lock); +#endif + + return (ret); +} + +/* + * Called when a scrub completes. This simply set a bit which tells which AVL + * tree to add new errors. spa_errlog_sync() is responsible for actually + * syncing the changes to the underlying objects. + */ +void +spa_errlog_rotate(spa_t *spa) +{ + mutex_enter(&spa->spa_errlist_lock); + spa->spa_scrub_finished = B_TRUE; + mutex_exit(&spa->spa_errlist_lock); +} + +/* + * Discard any pending errors from the spa_t. Called when unloading a faulted + * pool, as the errors encountered during the open cannot be synced to disk. + */ +void +spa_errlog_drain(spa_t *spa) +{ + spa_error_entry_t *se; + void *cookie; + + mutex_enter(&spa->spa_errlist_lock); + + cookie = NULL; + while ((se = avl_destroy_nodes(&spa->spa_errlist_last, + &cookie)) != NULL) + kmem_free(se, sizeof (spa_error_entry_t)); + cookie = NULL; + while ((se = avl_destroy_nodes(&spa->spa_errlist_scrub, + &cookie)) != NULL) + kmem_free(se, sizeof (spa_error_entry_t)); + + mutex_exit(&spa->spa_errlist_lock); +} + +/* + * Process a list of errors into the current on-disk log. + */ +static void +sync_error_list(spa_t *spa, avl_tree_t *t, uint64_t *obj, dmu_tx_t *tx) +{ + spa_error_entry_t *se; + char buf[64]; + void *cookie; + + if (avl_numnodes(t) != 0) { + /* create log if necessary */ + if (*obj == 0) + *obj = zap_create(spa->spa_meta_objset, + DMU_OT_ERROR_LOG, DMU_OT_NONE, + 0, tx); + + /* add errors to the current log */ + for (se = avl_first(t); se != NULL; se = AVL_NEXT(t, se)) { + char *name = se->se_name ? se->se_name : ""; + + bookmark_to_name(&se->se_bookmark, buf, sizeof (buf)); + + (void) zap_update(spa->spa_meta_objset, + *obj, buf, 1, strlen(name) + 1, name, tx); + } + + /* purge the error list */ + cookie = NULL; + while ((se = avl_destroy_nodes(t, &cookie)) != NULL) + kmem_free(se, sizeof (spa_error_entry_t)); + } +} + +/* + * Sync the error log out to disk. This is a little tricky because the act of + * writing the error log requires the spa_errlist_lock. So, we need to lock the + * error lists, take a copy of the lists, and then reinitialize them. Then, we + * drop the error list lock and take the error log lock, at which point we + * do the errlog processing. Then, if we encounter an I/O error during this + * process, we can successfully add the error to the list. Note that this will + * result in the perpetual recycling of errors, but it is an unlikely situation + * and not a performance critical operation. + */ +void +spa_errlog_sync(spa_t *spa, uint64_t txg) +{ + dmu_tx_t *tx; + avl_tree_t scrub, last; + int scrub_finished; + + mutex_enter(&spa->spa_errlist_lock); + + /* + * Bail out early under normal circumstances. + */ + if (avl_numnodes(&spa->spa_errlist_scrub) == 0 && + avl_numnodes(&spa->spa_errlist_last) == 0 && + !spa->spa_scrub_finished) { + mutex_exit(&spa->spa_errlist_lock); + return; + } + + spa_get_errlists(spa, &last, &scrub); + scrub_finished = spa->spa_scrub_finished; + spa->spa_scrub_finished = B_FALSE; + + mutex_exit(&spa->spa_errlist_lock); + mutex_enter(&spa->spa_errlog_lock); + + tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg); + + /* + * Sync out the current list of errors. + */ + sync_error_list(spa, &last, &spa->spa_errlog_last, tx); + + /* + * Rotate the log if necessary. + */ + if (scrub_finished) { + if (spa->spa_errlog_last != 0) + VERIFY(dmu_object_free(spa->spa_meta_objset, + spa->spa_errlog_last, tx) == 0); + spa->spa_errlog_last = spa->spa_errlog_scrub; + spa->spa_errlog_scrub = 0; + + sync_error_list(spa, &scrub, &spa->spa_errlog_last, tx); + } + + /* + * Sync out any pending scrub errors. + */ + sync_error_list(spa, &scrub, &spa->spa_errlog_scrub, tx); + + /* + * Update the MOS to reflect the new values. + */ + (void) zap_update(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_ERRLOG_LAST, sizeof (uint64_t), 1, + &spa->spa_errlog_last, tx); + (void) zap_update(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_ERRLOG_SCRUB, sizeof (uint64_t), 1, + &spa->spa_errlog_scrub, tx); + + dmu_tx_commit(tx); + + mutex_exit(&spa->spa_errlog_lock); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* error handling */ +EXPORT_SYMBOL(spa_log_error); +EXPORT_SYMBOL(spa_get_errlog_size); +EXPORT_SYMBOL(spa_get_errlog); +EXPORT_SYMBOL(spa_errlog_rotate); +EXPORT_SYMBOL(spa_errlog_drain); +EXPORT_SYMBOL(spa_errlog_sync); +EXPORT_SYMBOL(spa_get_errlists); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_history.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_history.c @@ -0,0 +1,630 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2017 Joyent, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zfs_comutil.h" +#ifdef _KERNEL +#include +#endif + +/* + * Routines to manage the on-disk history log. + * + * The history log is stored as a dmu object containing + * tuples. + * + * Where "record nvlist" is an nvlist containing uint64_ts and strings, and + * "packed record length" is the packed length of the "record nvlist" stored + * as a little endian uint64_t. + * + * The log is implemented as a ring buffer, though the original creation + * of the pool ('zpool create') is never overwritten. + * + * The history log is tracked as object 'spa_t::spa_history'. The bonus buffer + * of 'spa_history' stores the offsets for logging/retrieving history as + * 'spa_history_phys_t'. 'sh_pool_create_len' is the ending offset in bytes of + * where the 'zpool create' record is stored. This allows us to never + * overwrite the original creation of the pool. 'sh_phys_max_off' is the + * physical ending offset in bytes of the log. This tells you the length of + * the buffer. 'sh_eof' is the logical EOF (in bytes). Whenever a record + * is added, 'sh_eof' is incremented by the the size of the record. + * 'sh_eof' is never decremented. 'sh_bof' is the logical BOF (in bytes). + * This is where the consumer should start reading from after reading in + * the 'zpool create' portion of the log. + * + * 'sh_records_lost' keeps track of how many records have been overwritten + * and permanently lost. + */ + +/* convert a logical offset to physical */ +static uint64_t +spa_history_log_to_phys(uint64_t log_off, spa_history_phys_t *shpp) +{ + uint64_t phys_len; + + phys_len = shpp->sh_phys_max_off - shpp->sh_pool_create_len; + return ((log_off - shpp->sh_pool_create_len) % phys_len + + shpp->sh_pool_create_len); +} + +void +spa_history_create_obj(spa_t *spa, dmu_tx_t *tx) +{ + dmu_buf_t *dbp; + spa_history_phys_t *shpp; + objset_t *mos = spa->spa_meta_objset; + + ASSERT0(spa->spa_history); + spa->spa_history = dmu_object_alloc(mos, DMU_OT_SPA_HISTORY, + SPA_OLD_MAXBLOCKSIZE, DMU_OT_SPA_HISTORY_OFFSETS, + sizeof (spa_history_phys_t), tx); + + VERIFY0(zap_add(mos, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_HISTORY, sizeof (uint64_t), 1, + &spa->spa_history, tx)); + + VERIFY0(dmu_bonus_hold(mos, spa->spa_history, FTAG, &dbp)); + ASSERT3U(dbp->db_size, >=, sizeof (spa_history_phys_t)); + + shpp = dbp->db_data; + dmu_buf_will_dirty(dbp, tx); + + /* + * Figure out maximum size of history log. We set it at + * 0.1% of pool size, with a max of 1G and min of 128KB. + */ + shpp->sh_phys_max_off = + metaslab_class_get_dspace(spa_normal_class(spa)) / 1000; + shpp->sh_phys_max_off = MIN(shpp->sh_phys_max_off, 1<<30); + shpp->sh_phys_max_off = MAX(shpp->sh_phys_max_off, 128<<10); + + dmu_buf_rele(dbp, FTAG); +} + +/* + * Change 'sh_bof' to the beginning of the next record. + */ +static int +spa_history_advance_bof(spa_t *spa, spa_history_phys_t *shpp) +{ + objset_t *mos = spa->spa_meta_objset; + uint64_t firstread, reclen, phys_bof; + char buf[sizeof (reclen)]; + int err; + + phys_bof = spa_history_log_to_phys(shpp->sh_bof, shpp); + firstread = MIN(sizeof (reclen), shpp->sh_phys_max_off - phys_bof); + + if ((err = dmu_read(mos, spa->spa_history, phys_bof, firstread, + buf, DMU_READ_PREFETCH)) != 0) + return (err); + if (firstread != sizeof (reclen)) { + if ((err = dmu_read(mos, spa->spa_history, + shpp->sh_pool_create_len, sizeof (reclen) - firstread, + buf + firstread, DMU_READ_PREFETCH)) != 0) + return (err); + } + + reclen = LE_64(*((uint64_t *)buf)); + shpp->sh_bof += reclen + sizeof (reclen); + shpp->sh_records_lost++; + return (0); +} + +static int +spa_history_write(spa_t *spa, void *buf, uint64_t len, spa_history_phys_t *shpp, + dmu_tx_t *tx) +{ + uint64_t firstwrite, phys_eof; + objset_t *mos = spa->spa_meta_objset; + int err; + + ASSERT(MUTEX_HELD(&spa->spa_history_lock)); + + /* see if we need to reset logical BOF */ + while (shpp->sh_phys_max_off - shpp->sh_pool_create_len - + (shpp->sh_eof - shpp->sh_bof) <= len) { + if ((err = spa_history_advance_bof(spa, shpp)) != 0) { + return (err); + } + } + + phys_eof = spa_history_log_to_phys(shpp->sh_eof, shpp); + firstwrite = MIN(len, shpp->sh_phys_max_off - phys_eof); + shpp->sh_eof += len; + dmu_write(mos, spa->spa_history, phys_eof, firstwrite, buf, tx); + + len -= firstwrite; + if (len > 0) { + /* write out the rest at the beginning of physical file */ + dmu_write(mos, spa->spa_history, shpp->sh_pool_create_len, + len, (char *)buf + firstwrite, tx); + } + + return (0); +} + +static char * +spa_history_zone(void) +{ +#ifdef _KERNEL +#ifdef HAVE_SPL + return ("linux"); +#else + return (curproc->p_zone->zone_name); +#endif +#else + return (NULL); +#endif +} + +/* + * Post a history sysevent. + * + * The nvlist_t* passed into this function will be transformed into a new + * nvlist where: + * + * 1. Nested nvlists will be flattened to a single level + * 2. Keys will have their names normalized (to remove any problematic + * characters, such as whitespace) + * + * The nvlist_t passed into this function will duplicated and should be freed + * by caller. + * + */ +static void +spa_history_log_notify(spa_t *spa, nvlist_t *nvl) +{ + nvlist_t *hist_nvl = fnvlist_alloc(); + uint64_t uint64; + char *string; + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_CMD, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_CMD, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_INT_NAME, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_INT_NAME, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_ZONE, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_ZONE, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_HOST, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_HOST, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_DSNAME, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_DSNAME, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_INT_STR, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_INT_STR, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_IOCTL, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_IOCTL, string); + + if (nvlist_lookup_string(nvl, ZPOOL_HIST_INT_NAME, &string) == 0) + fnvlist_add_string(hist_nvl, ZFS_EV_HIST_INT_NAME, string); + + if (nvlist_lookup_uint64(nvl, ZPOOL_HIST_DSID, &uint64) == 0) + fnvlist_add_uint64(hist_nvl, ZFS_EV_HIST_DSID, uint64); + + if (nvlist_lookup_uint64(nvl, ZPOOL_HIST_TXG, &uint64) == 0) + fnvlist_add_uint64(hist_nvl, ZFS_EV_HIST_TXG, uint64); + + if (nvlist_lookup_uint64(nvl, ZPOOL_HIST_TIME, &uint64) == 0) + fnvlist_add_uint64(hist_nvl, ZFS_EV_HIST_TIME, uint64); + + if (nvlist_lookup_uint64(nvl, ZPOOL_HIST_WHO, &uint64) == 0) + fnvlist_add_uint64(hist_nvl, ZFS_EV_HIST_WHO, uint64); + + if (nvlist_lookup_uint64(nvl, ZPOOL_HIST_INT_EVENT, &uint64) == 0) + fnvlist_add_uint64(hist_nvl, ZFS_EV_HIST_INT_EVENT, uint64); + + spa_event_notify(spa, NULL, hist_nvl, ESC_ZFS_HISTORY_EVENT); + + nvlist_free(hist_nvl); +} + +/* + * Write out a history event. + */ +/*ARGSUSED*/ +static void +spa_history_log_sync(void *arg, dmu_tx_t *tx) +{ + nvlist_t *nvl = arg; + spa_t *spa = dmu_tx_pool(tx)->dp_spa; + objset_t *mos = spa->spa_meta_objset; + dmu_buf_t *dbp; + spa_history_phys_t *shpp; + size_t reclen; + uint64_t le_len; + char *record_packed = NULL; + int ret; + + /* + * If we have an older pool that doesn't have a command + * history object, create it now. + */ + mutex_enter(&spa->spa_history_lock); + if (!spa->spa_history) + spa_history_create_obj(spa, tx); + mutex_exit(&spa->spa_history_lock); + + /* + * Get the offset of where we need to write via the bonus buffer. + * Update the offset when the write completes. + */ + VERIFY0(dmu_bonus_hold(mos, spa->spa_history, FTAG, &dbp)); + shpp = dbp->db_data; + + dmu_buf_will_dirty(dbp, tx); + +#ifdef ZFS_DEBUG + { + dmu_object_info_t doi; + dmu_object_info_from_db(dbp, &doi); + ASSERT3U(doi.doi_bonus_type, ==, DMU_OT_SPA_HISTORY_OFFSETS); + } +#endif + + fnvlist_add_uint64(nvl, ZPOOL_HIST_TIME, gethrestime_sec()); + fnvlist_add_string(nvl, ZPOOL_HIST_HOST, utsname()->nodename); + + if (nvlist_exists(nvl, ZPOOL_HIST_CMD)) { + zfs_dbgmsg("command: %s", + fnvlist_lookup_string(nvl, ZPOOL_HIST_CMD)); + } else if (nvlist_exists(nvl, ZPOOL_HIST_INT_NAME)) { + if (nvlist_exists(nvl, ZPOOL_HIST_DSNAME)) { + zfs_dbgmsg("txg %lld %s %s (id %llu) %s", + fnvlist_lookup_uint64(nvl, ZPOOL_HIST_TXG), + fnvlist_lookup_string(nvl, ZPOOL_HIST_INT_NAME), + fnvlist_lookup_string(nvl, ZPOOL_HIST_DSNAME), + fnvlist_lookup_uint64(nvl, ZPOOL_HIST_DSID), + fnvlist_lookup_string(nvl, ZPOOL_HIST_INT_STR)); + } else { + zfs_dbgmsg("txg %lld %s %s", + fnvlist_lookup_uint64(nvl, ZPOOL_HIST_TXG), + fnvlist_lookup_string(nvl, ZPOOL_HIST_INT_NAME), + fnvlist_lookup_string(nvl, ZPOOL_HIST_INT_STR)); + } + /* + * The history sysevent is posted only for internal history + * messages to show what has happened, not how it happened. For + * example, the following command: + * + * # zfs destroy -r tank/foo + * + * will result in one sysevent posted per dataset that is + * destroyed as a result of the command - which could be more + * than one event in total. By contrast, if the sysevent was + * posted as a result of the ZPOOL_HIST_CMD key being present + * it would result in only one sysevent being posted with the + * full command line arguments, requiring the consumer to know + * how to parse and understand zfs(1M) command invocations. + */ + spa_history_log_notify(spa, nvl); + } else if (nvlist_exists(nvl, ZPOOL_HIST_IOCTL)) { + zfs_dbgmsg("ioctl %s", + fnvlist_lookup_string(nvl, ZPOOL_HIST_IOCTL)); + } + + VERIFY3U(nvlist_pack(nvl, &record_packed, &reclen, NV_ENCODE_NATIVE, + KM_SLEEP), ==, 0); + + mutex_enter(&spa->spa_history_lock); + + /* write out the packed length as little endian */ + le_len = LE_64((uint64_t)reclen); + ret = spa_history_write(spa, &le_len, sizeof (le_len), shpp, tx); + if (!ret) + ret = spa_history_write(spa, record_packed, reclen, shpp, tx); + + /* The first command is the create, which we keep forever */ + if (ret == 0 && shpp->sh_pool_create_len == 0 && + nvlist_exists(nvl, ZPOOL_HIST_CMD)) { + shpp->sh_pool_create_len = shpp->sh_bof = shpp->sh_eof; + } + + mutex_exit(&spa->spa_history_lock); + fnvlist_pack_free(record_packed, reclen); + dmu_buf_rele(dbp, FTAG); + fnvlist_free(nvl); +} + +/* + * Write out a history event. + */ +int +spa_history_log(spa_t *spa, const char *msg) +{ + int err; + nvlist_t *nvl = fnvlist_alloc(); + + fnvlist_add_string(nvl, ZPOOL_HIST_CMD, msg); + err = spa_history_log_nvl(spa, nvl); + fnvlist_free(nvl); + return (err); +} + +int +spa_history_log_nvl(spa_t *spa, nvlist_t *nvl) +{ + int err = 0; + dmu_tx_t *tx; + nvlist_t *nvarg; + + if (spa_version(spa) < SPA_VERSION_ZPOOL_HISTORY || !spa_writeable(spa)) + return (SET_ERROR(EINVAL)); + + tx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err) { + dmu_tx_abort(tx); + return (err); + } + + VERIFY0(nvlist_dup(nvl, &nvarg, KM_SLEEP)); + if (spa_history_zone() != NULL) { + fnvlist_add_string(nvarg, ZPOOL_HIST_ZONE, + spa_history_zone()); + } + fnvlist_add_uint64(nvarg, ZPOOL_HIST_WHO, crgetruid(CRED())); + + /* Kick this off asynchronously; errors are ignored. */ + dsl_sync_task_nowait(spa_get_dsl(spa), spa_history_log_sync, + nvarg, 0, ZFS_SPACE_CHECK_NONE, tx); + dmu_tx_commit(tx); + + /* spa_history_log_sync will free nvl */ + return (err); + +} + +/* + * Read out the command history. + */ +int +spa_history_get(spa_t *spa, uint64_t *offp, uint64_t *len, char *buf) +{ + objset_t *mos = spa->spa_meta_objset; + dmu_buf_t *dbp; + uint64_t read_len, phys_read_off, phys_eof; + uint64_t leftover = 0; + spa_history_phys_t *shpp; + int err; + + /* + * If the command history doesn't exist (older pool), + * that's ok, just return ENOENT. + */ + if (!spa->spa_history) + return (SET_ERROR(ENOENT)); + + /* + * The history is logged asynchronously, so when they request + * the first chunk of history, make sure everything has been + * synced to disk so that we get it. + */ + if (*offp == 0 && spa_writeable(spa)) + txg_wait_synced(spa_get_dsl(spa), 0); + + if ((err = dmu_bonus_hold(mos, spa->spa_history, FTAG, &dbp)) != 0) + return (err); + shpp = dbp->db_data; + +#ifdef ZFS_DEBUG + { + dmu_object_info_t doi; + dmu_object_info_from_db(dbp, &doi); + ASSERT3U(doi.doi_bonus_type, ==, DMU_OT_SPA_HISTORY_OFFSETS); + } +#endif + + mutex_enter(&spa->spa_history_lock); + phys_eof = spa_history_log_to_phys(shpp->sh_eof, shpp); + + if (*offp < shpp->sh_pool_create_len) { + /* read in just the zpool create history */ + phys_read_off = *offp; + read_len = MIN(*len, shpp->sh_pool_create_len - + phys_read_off); + } else { + /* + * Need to reset passed in offset to BOF if the passed in + * offset has since been overwritten. + */ + *offp = MAX(*offp, shpp->sh_bof); + phys_read_off = spa_history_log_to_phys(*offp, shpp); + + /* + * Read up to the minimum of what the user passed down or + * the EOF (physical or logical). If we hit physical EOF, + * use 'leftover' to read from the physical BOF. + */ + if (phys_read_off <= phys_eof) { + read_len = MIN(*len, phys_eof - phys_read_off); + } else { + read_len = MIN(*len, + shpp->sh_phys_max_off - phys_read_off); + if (phys_read_off + *len > shpp->sh_phys_max_off) { + leftover = MIN(*len - read_len, + phys_eof - shpp->sh_pool_create_len); + } + } + } + + /* offset for consumer to use next */ + *offp += read_len + leftover; + + /* tell the consumer how much you actually read */ + *len = read_len + leftover; + + if (read_len == 0) { + mutex_exit(&spa->spa_history_lock); + dmu_buf_rele(dbp, FTAG); + return (0); + } + + err = dmu_read(mos, spa->spa_history, phys_read_off, read_len, buf, + DMU_READ_PREFETCH); + if (leftover && err == 0) { + err = dmu_read(mos, spa->spa_history, shpp->sh_pool_create_len, + leftover, buf + read_len, DMU_READ_PREFETCH); + } + mutex_exit(&spa->spa_history_lock); + + dmu_buf_rele(dbp, FTAG); + return (err); +} + +/* + * The nvlist will be consumed by this call. + */ +static void +log_internal(nvlist_t *nvl, const char *operation, spa_t *spa, + dmu_tx_t *tx, const char *fmt, va_list adx) +{ + char *msg; + + /* + * If this is part of creating a pool, not everything is + * initialized yet, so don't bother logging the internal events. + * Likewise if the pool is not writeable. + */ + if (spa_is_initializing(spa) || !spa_writeable(spa)) { + fnvlist_free(nvl); + return; + } + + msg = kmem_vasprintf(fmt, adx); + fnvlist_add_string(nvl, ZPOOL_HIST_INT_STR, msg); + strfree(msg); + + fnvlist_add_string(nvl, ZPOOL_HIST_INT_NAME, operation); + fnvlist_add_uint64(nvl, ZPOOL_HIST_TXG, tx->tx_txg); + + if (dmu_tx_is_syncing(tx)) { + spa_history_log_sync(nvl, tx); + } else { + dsl_sync_task_nowait(spa_get_dsl(spa), + spa_history_log_sync, nvl, 0, ZFS_SPACE_CHECK_NONE, tx); + } + /* spa_history_log_sync() will free nvl */ +} + +void +spa_history_log_internal(spa_t *spa, const char *operation, + dmu_tx_t *tx, const char *fmt, ...) +{ + dmu_tx_t *htx = tx; + va_list adx; + + /* create a tx if we didn't get one */ + if (tx == NULL) { + htx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir); + if (dmu_tx_assign(htx, TXG_WAIT) != 0) { + dmu_tx_abort(htx); + return; + } + } + + va_start(adx, fmt); + log_internal(fnvlist_alloc(), operation, spa, htx, fmt, adx); + va_end(adx); + + /* if we didn't get a tx from the caller, commit the one we made */ + if (tx == NULL) + dmu_tx_commit(htx); +} + +void +spa_history_log_internal_ds(dsl_dataset_t *ds, const char *operation, + dmu_tx_t *tx, const char *fmt, ...) +{ + va_list adx; + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + nvlist_t *nvl = fnvlist_alloc(); + + ASSERT(tx != NULL); + + dsl_dataset_name(ds, namebuf); + fnvlist_add_string(nvl, ZPOOL_HIST_DSNAME, namebuf); + fnvlist_add_uint64(nvl, ZPOOL_HIST_DSID, ds->ds_object); + + va_start(adx, fmt); + log_internal(nvl, operation, dsl_dataset_get_spa(ds), tx, fmt, adx); + va_end(adx); +} + +void +spa_history_log_internal_dd(dsl_dir_t *dd, const char *operation, + dmu_tx_t *tx, const char *fmt, ...) +{ + va_list adx; + char namebuf[ZFS_MAX_DATASET_NAME_LEN]; + nvlist_t *nvl = fnvlist_alloc(); + + ASSERT(tx != NULL); + + dsl_dir_name(dd, namebuf); + fnvlist_add_string(nvl, ZPOOL_HIST_DSNAME, namebuf); + fnvlist_add_uint64(nvl, ZPOOL_HIST_DSID, + dsl_dir_phys(dd)->dd_head_dataset_obj); + + va_start(adx, fmt); + log_internal(nvl, operation, dd->dd_pool->dp_spa, tx, fmt, adx); + va_end(adx); +} + +void +spa_history_log_version(spa_t *spa, const char *operation, dmu_tx_t *tx) +{ + utsname_t *u = utsname(); + + spa_history_log_internal(spa, operation, tx, + "pool version %llu; software version %llu/%llu; uts %s %s %s %s", + (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION, + u->nodename, u->release, u->version, u->machine); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(spa_history_create_obj); +EXPORT_SYMBOL(spa_history_get); +EXPORT_SYMBOL(spa_history_log); +EXPORT_SYMBOL(spa_history_log_internal); +EXPORT_SYMBOL(spa_history_log_version); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_misc.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_misc.c @@ -0,0 +1,2210 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2017 Datto Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zfs_prop.h" +#include +#include "qat_compress.h" + +/* + * SPA locking + * + * There are four basic locks for managing spa_t structures: + * + * spa_namespace_lock (global mutex) + * + * This lock must be acquired to do any of the following: + * + * - Lookup a spa_t by name + * - Add or remove a spa_t from the namespace + * - Increase spa_refcount from non-zero + * - Check if spa_refcount is zero + * - Rename a spa_t + * - add/remove/attach/detach devices + * - Held for the duration of create/destroy/import/export + * + * It does not need to handle recursion. A create or destroy may + * reference objects (files or zvols) in other pools, but by + * definition they must have an existing reference, and will never need + * to lookup a spa_t by name. + * + * spa_refcount (per-spa refcount_t protected by mutex) + * + * This reference count keep track of any active users of the spa_t. The + * spa_t cannot be destroyed or freed while this is non-zero. Internally, + * the refcount is never really 'zero' - opening a pool implicitly keeps + * some references in the DMU. Internally we check against spa_minref, but + * present the image of a zero/non-zero value to consumers. + * + * spa_config_lock[] (per-spa array of rwlocks) + * + * This protects the spa_t from config changes, and must be held in + * the following circumstances: + * + * - RW_READER to perform I/O to the spa + * - RW_WRITER to change the vdev config + * + * The locking order is fairly straightforward: + * + * spa_namespace_lock -> spa_refcount + * + * The namespace lock must be acquired to increase the refcount from 0 + * or to check if it is zero. + * + * spa_refcount -> spa_config_lock[] + * + * There must be at least one valid reference on the spa_t to acquire + * the config lock. + * + * spa_namespace_lock -> spa_config_lock[] + * + * The namespace lock must always be taken before the config lock. + * + * + * The spa_namespace_lock can be acquired directly and is globally visible. + * + * The namespace is manipulated using the following functions, all of which + * require the spa_namespace_lock to be held. + * + * spa_lookup() Lookup a spa_t by name. + * + * spa_add() Create a new spa_t in the namespace. + * + * spa_remove() Remove a spa_t from the namespace. This also + * frees up any memory associated with the spa_t. + * + * spa_next() Returns the next spa_t in the system, or the + * first if NULL is passed. + * + * spa_evict_all() Shutdown and remove all spa_t structures in + * the system. + * + * spa_guid_exists() Determine whether a pool/device guid exists. + * + * The spa_refcount is manipulated using the following functions: + * + * spa_open_ref() Adds a reference to the given spa_t. Must be + * called with spa_namespace_lock held if the + * refcount is currently zero. + * + * spa_close() Remove a reference from the spa_t. This will + * not free the spa_t or remove it from the + * namespace. No locking is required. + * + * spa_refcount_zero() Returns true if the refcount is currently + * zero. Must be called with spa_namespace_lock + * held. + * + * The spa_config_lock[] is an array of rwlocks, ordered as follows: + * SCL_CONFIG > SCL_STATE > SCL_ALLOC > SCL_ZIO > SCL_FREE > SCL_VDEV. + * spa_config_lock[] is manipulated with spa_config_{enter,exit,held}(). + * + * To read the configuration, it suffices to hold one of these locks as reader. + * To modify the configuration, you must hold all locks as writer. To modify + * vdev state without altering the vdev tree's topology (e.g. online/offline), + * you must hold SCL_STATE and SCL_ZIO as writer. + * + * We use these distinct config locks to avoid recursive lock entry. + * For example, spa_sync() (which holds SCL_CONFIG as reader) induces + * block allocations (SCL_ALLOC), which may require reading space maps + * from disk (dmu_read() -> zio_read() -> SCL_ZIO). + * + * The spa config locks cannot be normal rwlocks because we need the + * ability to hand off ownership. For example, SCL_ZIO is acquired + * by the issuing thread and later released by an interrupt thread. + * They do, however, obey the usual write-wanted semantics to prevent + * writer (i.e. system administrator) starvation. + * + * The lock acquisition rules are as follows: + * + * SCL_CONFIG + * Protects changes to the vdev tree topology, such as vdev + * add/remove/attach/detach. Protects the dirty config list + * (spa_config_dirty_list) and the set of spares and l2arc devices. + * + * SCL_STATE + * Protects changes to pool state and vdev state, such as vdev + * online/offline/fault/degrade/clear. Protects the dirty state list + * (spa_state_dirty_list) and global pool state (spa_state). + * + * SCL_ALLOC + * Protects changes to metaslab groups and classes. + * Held as reader by metaslab_alloc() and metaslab_claim(). + * + * SCL_ZIO + * Held by bp-level zios (those which have no io_vd upon entry) + * to prevent changes to the vdev tree. The bp-level zio implicitly + * protects all of its vdev child zios, which do not hold SCL_ZIO. + * + * SCL_FREE + * Protects changes to metaslab groups and classes. + * Held as reader by metaslab_free(). SCL_FREE is distinct from + * SCL_ALLOC, and lower than SCL_ZIO, so that we can safely free + * blocks in zio_done() while another i/o that holds either + * SCL_ALLOC or SCL_ZIO is waiting for this i/o to complete. + * + * SCL_VDEV + * Held as reader to prevent changes to the vdev tree during trivial + * inquiries such as bp_get_dsize(). SCL_VDEV is distinct from the + * other locks, and lower than all of them, to ensure that it's safe + * to acquire regardless of caller context. + * + * In addition, the following rules apply: + * + * (a) spa_props_lock protects pool properties, spa_config and spa_config_list. + * The lock ordering is SCL_CONFIG > spa_props_lock. + * + * (b) I/O operations on leaf vdevs. For any zio operation that takes + * an explicit vdev_t argument -- such as zio_ioctl(), zio_read_phys(), + * or zio_write_phys() -- the caller must ensure that the config cannot + * cannot change in the interim, and that the vdev cannot be reopened. + * SCL_STATE as reader suffices for both. + * + * The vdev configuration is protected by spa_vdev_enter() / spa_vdev_exit(). + * + * spa_vdev_enter() Acquire the namespace lock and the config lock + * for writing. + * + * spa_vdev_exit() Release the config lock, wait for all I/O + * to complete, sync the updated configs to the + * cache, and release the namespace lock. + * + * vdev state is protected by spa_vdev_state_enter() / spa_vdev_state_exit(). + * Like spa_vdev_enter/exit, these are convenience wrappers -- the actual + * locking is, always, based on spa_namespace_lock and spa_config_lock[]. + * + * spa_rename() is also implemented within this file since it requires + * manipulation of the namespace. + */ + +static avl_tree_t spa_namespace_avl; +kmutex_t spa_namespace_lock; +static kcondvar_t spa_namespace_cv; +int spa_max_replication_override = SPA_DVAS_PER_BP; + +static kmutex_t spa_spare_lock; +static avl_tree_t spa_spare_avl; +static kmutex_t spa_l2cache_lock; +static avl_tree_t spa_l2cache_avl; + +kmem_cache_t *spa_buffer_pool; +int spa_mode_global; + +#ifdef ZFS_DEBUG +/* Everything except dprintf and spa is on by default in debug builds */ +int zfs_flags = ~(ZFS_DEBUG_DPRINTF | ZFS_DEBUG_SPA); +#else +int zfs_flags = 0; +#endif + +/* + * zfs_recover can be set to nonzero to attempt to recover from + * otherwise-fatal errors, typically caused by on-disk corruption. When + * set, calls to zfs_panic_recover() will turn into warning messages. + * This should only be used as a last resort, as it typically results + * in leaked space, or worse. + */ +int zfs_recover = B_FALSE; + +/* + * If destroy encounters an EIO while reading metadata (e.g. indirect + * blocks), space referenced by the missing metadata can not be freed. + * Normally this causes the background destroy to become "stalled", as + * it is unable to make forward progress. While in this stalled state, + * all remaining space to free from the error-encountering filesystem is + * "temporarily leaked". Set this flag to cause it to ignore the EIO, + * permanently leak the space from indirect blocks that can not be read, + * and continue to free everything else that it can. + * + * The default, "stalling" behavior is useful if the storage partially + * fails (i.e. some but not all i/os fail), and then later recovers. In + * this case, we will be able to continue pool operations while it is + * partially failed, and when it recovers, we can continue to free the + * space, with no leaks. However, note that this case is actually + * fairly rare. + * + * Typically pools either (a) fail completely (but perhaps temporarily, + * e.g. a top-level vdev going offline), or (b) have localized, + * permanent errors (e.g. disk returns the wrong data due to bit flip or + * firmware bug). In case (a), this setting does not matter because the + * pool will be suspended and the sync thread will not be able to make + * forward progress regardless. In case (b), because the error is + * permanent, the best we can do is leak the minimum amount of space, + * which is what setting this flag will do. Therefore, it is reasonable + * for this flag to normally be set, but we chose the more conservative + * approach of not setting it, so that there is no possibility of + * leaking space in the "partial temporary" failure case. + */ +int zfs_free_leak_on_eio = B_FALSE; + +/* + * Expiration time in milliseconds. This value has two meanings. First it is + * used to determine when the spa_deadman() logic should fire. By default the + * spa_deadman() will fire if spa_sync() has not completed in 1000 seconds. + * Secondly, the value determines if an I/O is considered "hung". Any I/O that + * has not completed in zfs_deadman_synctime_ms is considered "hung" resulting + * in a system panic. + */ +unsigned long zfs_deadman_synctime_ms = 1000000ULL; + +/* + * Check time in milliseconds. This defines the frequency at which we check + * for hung I/O. + */ +unsigned long zfs_deadman_checktime_ms = 5000ULL; + +/* + * By default the deadman is enabled. + */ +int zfs_deadman_enabled = 1; + +/* + * The worst case is single-sector max-parity RAID-Z blocks, in which + * case the space requirement is exactly (VDEV_RAIDZ_MAXPARITY + 1) + * times the size; so just assume that. Add to this the fact that + * we can have up to 3 DVAs per bp, and one more factor of 2 because + * the block may be dittoed with up to 3 DVAs by ddt_sync(). All together, + * the worst case is: + * (VDEV_RAIDZ_MAXPARITY + 1) * SPA_DVAS_PER_BP * 2 == 24 + */ +int spa_asize_inflation = 24; + +/* + * Normally, we don't allow the last 3.2% (1/(2^spa_slop_shift)) of space in + * the pool to be consumed. This ensures that we don't run the pool + * completely out of space, due to unaccounted changes (e.g. to the MOS). + * It also limits the worst-case time to allocate space. If we have + * less than this amount of free space, most ZPL operations (e.g. write, + * create) will return ENOSPC. + * + * Certain operations (e.g. file removal, most administrative actions) can + * use half the slop space. They will only return ENOSPC if less than half + * the slop space is free. Typically, once the pool has less than the slop + * space free, the user will use these operations to free up space in the pool. + * These are the operations that call dsl_pool_adjustedsize() with the netfree + * argument set to TRUE. + * + * A very restricted set of operations are always permitted, regardless of + * the amount of free space. These are the operations that call + * dsl_sync_task(ZFS_SPACE_CHECK_NONE), e.g. "zfs destroy". If these + * operations result in a net increase in the amount of space used, + * it is possible to run the pool completely out of space, causing it to + * be permanently read-only. + * + * Note that on very small pools, the slop space will be larger than + * 3.2%, in an effort to have it be at least spa_min_slop (128MB), + * but we never allow it to be more than half the pool size. + * + * See also the comments in zfs_space_check_t. + */ +int spa_slop_shift = 5; +uint64_t spa_min_slop = 128 * 1024 * 1024; + +/* + * ========================================================================== + * SPA config locking + * ========================================================================== + */ +static void +spa_config_lock_init(spa_t *spa) +{ + int i; + + for (i = 0; i < SCL_LOCKS; i++) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + mutex_init(&scl->scl_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&scl->scl_cv, NULL, CV_DEFAULT, NULL); + refcount_create_untracked(&scl->scl_count); + scl->scl_writer = NULL; + scl->scl_write_wanted = 0; + } +} + +static void +spa_config_lock_destroy(spa_t *spa) +{ + int i; + + for (i = 0; i < SCL_LOCKS; i++) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + mutex_destroy(&scl->scl_lock); + cv_destroy(&scl->scl_cv); + refcount_destroy(&scl->scl_count); + ASSERT(scl->scl_writer == NULL); + ASSERT(scl->scl_write_wanted == 0); + } +} + +int +spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw) +{ + int i; + + for (i = 0; i < SCL_LOCKS; i++) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + if (!(locks & (1 << i))) + continue; + mutex_enter(&scl->scl_lock); + if (rw == RW_READER) { + if (scl->scl_writer || scl->scl_write_wanted) { + mutex_exit(&scl->scl_lock); + spa_config_exit(spa, locks & ((1 << i) - 1), + tag); + return (0); + } + } else { + ASSERT(scl->scl_writer != curthread); + if (!refcount_is_zero(&scl->scl_count)) { + mutex_exit(&scl->scl_lock); + spa_config_exit(spa, locks & ((1 << i) - 1), + tag); + return (0); + } + scl->scl_writer = curthread; + } + (void) refcount_add(&scl->scl_count, tag); + mutex_exit(&scl->scl_lock); + } + return (1); +} + +void +spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw) +{ + int wlocks_held = 0; + int i; + + ASSERT3U(SCL_LOCKS, <, sizeof (wlocks_held) * NBBY); + + for (i = 0; i < SCL_LOCKS; i++) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + if (scl->scl_writer == curthread) + wlocks_held |= (1 << i); + if (!(locks & (1 << i))) + continue; + mutex_enter(&scl->scl_lock); + if (rw == RW_READER) { + while (scl->scl_writer || scl->scl_write_wanted) { + cv_wait(&scl->scl_cv, &scl->scl_lock); + } + } else { + ASSERT(scl->scl_writer != curthread); + while (!refcount_is_zero(&scl->scl_count)) { + scl->scl_write_wanted++; + cv_wait(&scl->scl_cv, &scl->scl_lock); + scl->scl_write_wanted--; + } + scl->scl_writer = curthread; + } + (void) refcount_add(&scl->scl_count, tag); + mutex_exit(&scl->scl_lock); + } + ASSERT(wlocks_held <= locks); +} + +void +spa_config_exit(spa_t *spa, int locks, void *tag) +{ + int i; + + for (i = SCL_LOCKS - 1; i >= 0; i--) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + if (!(locks & (1 << i))) + continue; + mutex_enter(&scl->scl_lock); + ASSERT(!refcount_is_zero(&scl->scl_count)); + if (refcount_remove(&scl->scl_count, tag) == 0) { + ASSERT(scl->scl_writer == NULL || + scl->scl_writer == curthread); + scl->scl_writer = NULL; /* OK in either case */ + cv_broadcast(&scl->scl_cv); + } + mutex_exit(&scl->scl_lock); + } +} + +int +spa_config_held(spa_t *spa, int locks, krw_t rw) +{ + int i, locks_held = 0; + + for (i = 0; i < SCL_LOCKS; i++) { + spa_config_lock_t *scl = &spa->spa_config_lock[i]; + if (!(locks & (1 << i))) + continue; + if ((rw == RW_READER && !refcount_is_zero(&scl->scl_count)) || + (rw == RW_WRITER && scl->scl_writer == curthread)) + locks_held |= 1 << i; + } + + return (locks_held); +} + +/* + * ========================================================================== + * SPA namespace functions + * ========================================================================== + */ + +/* + * Lookup the named spa_t in the AVL tree. The spa_namespace_lock must be held. + * Returns NULL if no matching spa_t is found. + */ +spa_t * +spa_lookup(const char *name) +{ + static spa_t search; /* spa_t is large; don't allocate on stack */ + spa_t *spa; + avl_index_t where; + char *cp; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + (void) strlcpy(search.spa_name, name, sizeof (search.spa_name)); + + /* + * If it's a full dataset name, figure out the pool name and + * just use that. + */ + cp = strpbrk(search.spa_name, "/@#"); + if (cp != NULL) + *cp = '\0'; + + spa = avl_find(&spa_namespace_avl, &search, &where); + + return (spa); +} + +/* + * Fires when spa_sync has not completed within zfs_deadman_synctime_ms. + * If the zfs_deadman_enabled flag is set then it inspects all vdev queues + * looking for potentially hung I/Os. + */ +void +spa_deadman(void *arg) +{ + spa_t *spa = arg; + + /* Disable the deadman if the pool is suspended. */ + if (spa_suspended(spa)) + return; + + zfs_dbgmsg("slow spa_sync: started %llu seconds ago, calls %llu", + (gethrtime() - spa->spa_sync_starttime) / NANOSEC, + ++spa->spa_deadman_calls); + if (zfs_deadman_enabled) + vdev_deadman(spa->spa_root_vdev); + + spa->spa_deadman_tqid = taskq_dispatch_delay(system_delay_taskq, + spa_deadman, spa, TQ_SLEEP, ddi_get_lbolt() + + MSEC_TO_TICK(zfs_deadman_checktime_ms)); +} + +/* + * Create an uninitialized spa_t with the given name. Requires + * spa_namespace_lock. The caller must ensure that the spa_t doesn't already + * exist by calling spa_lookup() first. + */ +spa_t * +spa_add(const char *name, nvlist_t *config, const char *altroot) +{ + spa_t *spa; + spa_config_dirent_t *dp; + int t; + int i; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + spa = kmem_zalloc(sizeof (spa_t), KM_SLEEP); + + mutex_init(&spa->spa_async_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_errlist_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_errlog_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_evicting_os_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_history_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_proc_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_props_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_cksum_tmpls_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_scrub_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_suspend_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_vdev_top_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_feat_stats_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_alloc_lock, NULL, MUTEX_DEFAULT, NULL); + + cv_init(&spa->spa_async_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_evicting_os_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_proc_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_scrub_io_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_suspend_cv, NULL, CV_DEFAULT, NULL); + + for (t = 0; t < TXG_SIZE; t++) + bplist_create(&spa->spa_free_bplist[t]); + + (void) strlcpy(spa->spa_name, name, sizeof (spa->spa_name)); + spa->spa_state = POOL_STATE_UNINITIALIZED; + spa->spa_freeze_txg = UINT64_MAX; + spa->spa_final_txg = UINT64_MAX; + spa->spa_load_max_txg = UINT64_MAX; + spa->spa_proc = &p0; + spa->spa_proc_state = SPA_PROC_NONE; + + spa->spa_deadman_synctime = MSEC2NSEC(zfs_deadman_synctime_ms); + + refcount_create(&spa->spa_refcount); + spa_config_lock_init(spa); + spa_stats_init(spa); + + avl_add(&spa_namespace_avl, spa); + + /* + * Set the alternate root, if there is one. + */ + if (altroot) + spa->spa_root = spa_strdup(altroot); + + avl_create(&spa->spa_alloc_tree, zio_bookmark_compare, + sizeof (zio_t), offsetof(zio_t, io_alloc_node)); + + /* + * Every pool starts with the default cachefile + */ + list_create(&spa->spa_config_list, sizeof (spa_config_dirent_t), + offsetof(spa_config_dirent_t, scd_link)); + + dp = kmem_zalloc(sizeof (spa_config_dirent_t), KM_SLEEP); + dp->scd_path = altroot ? NULL : spa_strdup(spa_config_path); + list_insert_head(&spa->spa_config_list, dp); + + VERIFY(nvlist_alloc(&spa->spa_load_info, NV_UNIQUE_NAME, + KM_SLEEP) == 0); + + if (config != NULL) { + nvlist_t *features; + + if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_FEATURES_FOR_READ, + &features) == 0) { + VERIFY(nvlist_dup(features, &spa->spa_label_features, + 0) == 0); + } + + VERIFY(nvlist_dup(config, &spa->spa_config, 0) == 0); + } + + if (spa->spa_label_features == NULL) { + VERIFY(nvlist_alloc(&spa->spa_label_features, NV_UNIQUE_NAME, + KM_SLEEP) == 0); + } + + spa->spa_debug = ((zfs_flags & ZFS_DEBUG_SPA) != 0); + + spa->spa_min_ashift = INT_MAX; + spa->spa_max_ashift = 0; + + /* Reset cached value */ + spa->spa_dedup_dspace = ~0ULL; + + /* + * As a pool is being created, treat all features as disabled by + * setting SPA_FEATURE_DISABLED for all entries in the feature + * refcount cache. + */ + for (i = 0; i < SPA_FEATURES; i++) { + spa->spa_feat_refcount_cache[i] = SPA_FEATURE_DISABLED; + } + + return (spa); +} + +/* + * Removes a spa_t from the namespace, freeing up any memory used. Requires + * spa_namespace_lock. This is called only after the spa_t has been closed and + * deactivated. + */ +void +spa_remove(spa_t *spa) +{ + spa_config_dirent_t *dp; + int t; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + ASSERT(spa->spa_state == POOL_STATE_UNINITIALIZED); + ASSERT3U(refcount_count(&spa->spa_refcount), ==, 0); + + nvlist_free(spa->spa_config_splitting); + + avl_remove(&spa_namespace_avl, spa); + cv_broadcast(&spa_namespace_cv); + + if (spa->spa_root) + spa_strfree(spa->spa_root); + + while ((dp = list_head(&spa->spa_config_list)) != NULL) { + list_remove(&spa->spa_config_list, dp); + if (dp->scd_path != NULL) + spa_strfree(dp->scd_path); + kmem_free(dp, sizeof (spa_config_dirent_t)); + } + + avl_destroy(&spa->spa_alloc_tree); + list_destroy(&spa->spa_config_list); + + nvlist_free(spa->spa_label_features); + nvlist_free(spa->spa_load_info); + nvlist_free(spa->spa_feat_stats); + spa_config_set(spa, NULL); + + refcount_destroy(&spa->spa_refcount); + + spa_stats_destroy(spa); + spa_config_lock_destroy(spa); + + for (t = 0; t < TXG_SIZE; t++) + bplist_destroy(&spa->spa_free_bplist[t]); + + zio_checksum_templates_free(spa); + + cv_destroy(&spa->spa_async_cv); + cv_destroy(&spa->spa_evicting_os_cv); + cv_destroy(&spa->spa_proc_cv); + cv_destroy(&spa->spa_scrub_io_cv); + cv_destroy(&spa->spa_suspend_cv); + + mutex_destroy(&spa->spa_alloc_lock); + mutex_destroy(&spa->spa_async_lock); + mutex_destroy(&spa->spa_errlist_lock); + mutex_destroy(&spa->spa_errlog_lock); + mutex_destroy(&spa->spa_evicting_os_lock); + mutex_destroy(&spa->spa_history_lock); + mutex_destroy(&spa->spa_proc_lock); + mutex_destroy(&spa->spa_props_lock); + mutex_destroy(&spa->spa_cksum_tmpls_lock); + mutex_destroy(&spa->spa_scrub_lock); + mutex_destroy(&spa->spa_suspend_lock); + mutex_destroy(&spa->spa_vdev_top_lock); + mutex_destroy(&spa->spa_feat_stats_lock); + + kmem_free(spa, sizeof (spa_t)); +} + +/* + * Given a pool, return the next pool in the namespace, or NULL if there is + * none. If 'prev' is NULL, return the first pool. + */ +spa_t * +spa_next(spa_t *prev) +{ + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + if (prev) + return (AVL_NEXT(&spa_namespace_avl, prev)); + else + return (avl_first(&spa_namespace_avl)); +} + +/* + * ========================================================================== + * SPA refcount functions + * ========================================================================== + */ + +/* + * Add a reference to the given spa_t. Must have at least one reference, or + * have the namespace lock held. + */ +void +spa_open_ref(spa_t *spa, void *tag) +{ + ASSERT(refcount_count(&spa->spa_refcount) >= spa->spa_minref || + MUTEX_HELD(&spa_namespace_lock)); + (void) refcount_add(&spa->spa_refcount, tag); +} + +/* + * Remove a reference to the given spa_t. Must have at least one reference, or + * have the namespace lock held. + */ +void +spa_close(spa_t *spa, void *tag) +{ + ASSERT(refcount_count(&spa->spa_refcount) > spa->spa_minref || + MUTEX_HELD(&spa_namespace_lock)); + (void) refcount_remove(&spa->spa_refcount, tag); +} + +/* + * Remove a reference to the given spa_t held by a dsl dir that is + * being asynchronously released. Async releases occur from a taskq + * performing eviction of dsl datasets and dirs. The namespace lock + * isn't held and the hold by the object being evicted may contribute to + * spa_minref (e.g. dataset or directory released during pool export), + * so the asserts in spa_close() do not apply. + */ +void +spa_async_close(spa_t *spa, void *tag) +{ + (void) refcount_remove(&spa->spa_refcount, tag); +} + +/* + * Check to see if the spa refcount is zero. Must be called with + * spa_namespace_lock held. We really compare against spa_minref, which is the + * number of references acquired when opening a pool + */ +boolean_t +spa_refcount_zero(spa_t *spa) +{ + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + return (refcount_count(&spa->spa_refcount) == spa->spa_minref); +} + +/* + * ========================================================================== + * SPA spare and l2cache tracking + * ========================================================================== + */ + +/* + * Hot spares and cache devices are tracked using the same code below, + * for 'auxiliary' devices. + */ + +typedef struct spa_aux { + uint64_t aux_guid; + uint64_t aux_pool; + avl_node_t aux_avl; + int aux_count; +} spa_aux_t; + +static inline int +spa_aux_compare(const void *a, const void *b) +{ + const spa_aux_t *sa = (const spa_aux_t *)a; + const spa_aux_t *sb = (const spa_aux_t *)b; + + return (AVL_CMP(sa->aux_guid, sb->aux_guid)); +} + +void +spa_aux_add(vdev_t *vd, avl_tree_t *avl) +{ + avl_index_t where; + spa_aux_t search; + spa_aux_t *aux; + + search.aux_guid = vd->vdev_guid; + if ((aux = avl_find(avl, &search, &where)) != NULL) { + aux->aux_count++; + } else { + aux = kmem_zalloc(sizeof (spa_aux_t), KM_SLEEP); + aux->aux_guid = vd->vdev_guid; + aux->aux_count = 1; + avl_insert(avl, aux, where); + } +} + +void +spa_aux_remove(vdev_t *vd, avl_tree_t *avl) +{ + spa_aux_t search; + spa_aux_t *aux; + avl_index_t where; + + search.aux_guid = vd->vdev_guid; + aux = avl_find(avl, &search, &where); + + ASSERT(aux != NULL); + + if (--aux->aux_count == 0) { + avl_remove(avl, aux); + kmem_free(aux, sizeof (spa_aux_t)); + } else if (aux->aux_pool == spa_guid(vd->vdev_spa)) { + aux->aux_pool = 0ULL; + } +} + +boolean_t +spa_aux_exists(uint64_t guid, uint64_t *pool, int *refcnt, avl_tree_t *avl) +{ + spa_aux_t search, *found; + + search.aux_guid = guid; + found = avl_find(avl, &search, NULL); + + if (pool) { + if (found) + *pool = found->aux_pool; + else + *pool = 0ULL; + } + + if (refcnt) { + if (found) + *refcnt = found->aux_count; + else + *refcnt = 0; + } + + return (found != NULL); +} + +void +spa_aux_activate(vdev_t *vd, avl_tree_t *avl) +{ + spa_aux_t search, *found; + avl_index_t where; + + search.aux_guid = vd->vdev_guid; + found = avl_find(avl, &search, &where); + ASSERT(found != NULL); + ASSERT(found->aux_pool == 0ULL); + + found->aux_pool = spa_guid(vd->vdev_spa); +} + +/* + * Spares are tracked globally due to the following constraints: + * + * - A spare may be part of multiple pools. + * - A spare may be added to a pool even if it's actively in use within + * another pool. + * - A spare in use in any pool can only be the source of a replacement if + * the target is a spare in the same pool. + * + * We keep track of all spares on the system through the use of a reference + * counted AVL tree. When a vdev is added as a spare, or used as a replacement + * spare, then we bump the reference count in the AVL tree. In addition, we set + * the 'vdev_isspare' member to indicate that the device is a spare (active or + * inactive). When a spare is made active (used to replace a device in the + * pool), we also keep track of which pool its been made a part of. + * + * The 'spa_spare_lock' protects the AVL tree. These functions are normally + * called under the spa_namespace lock as part of vdev reconfiguration. The + * separate spare lock exists for the status query path, which does not need to + * be completely consistent with respect to other vdev configuration changes. + */ + +static int +spa_spare_compare(const void *a, const void *b) +{ + return (spa_aux_compare(a, b)); +} + +void +spa_spare_add(vdev_t *vd) +{ + mutex_enter(&spa_spare_lock); + ASSERT(!vd->vdev_isspare); + spa_aux_add(vd, &spa_spare_avl); + vd->vdev_isspare = B_TRUE; + mutex_exit(&spa_spare_lock); +} + +void +spa_spare_remove(vdev_t *vd) +{ + mutex_enter(&spa_spare_lock); + ASSERT(vd->vdev_isspare); + spa_aux_remove(vd, &spa_spare_avl); + vd->vdev_isspare = B_FALSE; + mutex_exit(&spa_spare_lock); +} + +boolean_t +spa_spare_exists(uint64_t guid, uint64_t *pool, int *refcnt) +{ + boolean_t found; + + mutex_enter(&spa_spare_lock); + found = spa_aux_exists(guid, pool, refcnt, &spa_spare_avl); + mutex_exit(&spa_spare_lock); + + return (found); +} + +void +spa_spare_activate(vdev_t *vd) +{ + mutex_enter(&spa_spare_lock); + ASSERT(vd->vdev_isspare); + spa_aux_activate(vd, &spa_spare_avl); + mutex_exit(&spa_spare_lock); +} + +/* + * Level 2 ARC devices are tracked globally for the same reasons as spares. + * Cache devices currently only support one pool per cache device, and so + * for these devices the aux reference count is currently unused beyond 1. + */ + +static int +spa_l2cache_compare(const void *a, const void *b) +{ + return (spa_aux_compare(a, b)); +} + +void +spa_l2cache_add(vdev_t *vd) +{ + mutex_enter(&spa_l2cache_lock); + ASSERT(!vd->vdev_isl2cache); + spa_aux_add(vd, &spa_l2cache_avl); + vd->vdev_isl2cache = B_TRUE; + mutex_exit(&spa_l2cache_lock); +} + +void +spa_l2cache_remove(vdev_t *vd) +{ + mutex_enter(&spa_l2cache_lock); + ASSERT(vd->vdev_isl2cache); + spa_aux_remove(vd, &spa_l2cache_avl); + vd->vdev_isl2cache = B_FALSE; + mutex_exit(&spa_l2cache_lock); +} + +boolean_t +spa_l2cache_exists(uint64_t guid, uint64_t *pool) +{ + boolean_t found; + + mutex_enter(&spa_l2cache_lock); + found = spa_aux_exists(guid, pool, NULL, &spa_l2cache_avl); + mutex_exit(&spa_l2cache_lock); + + return (found); +} + +void +spa_l2cache_activate(vdev_t *vd) +{ + mutex_enter(&spa_l2cache_lock); + ASSERT(vd->vdev_isl2cache); + spa_aux_activate(vd, &spa_l2cache_avl); + mutex_exit(&spa_l2cache_lock); +} + +/* + * ========================================================================== + * SPA vdev locking + * ========================================================================== + */ + +/* + * Lock the given spa_t for the purpose of adding or removing a vdev. + * Grabs the global spa_namespace_lock plus the spa config lock for writing. + * It returns the next transaction group for the spa_t. + */ +uint64_t +spa_vdev_enter(spa_t *spa) +{ + mutex_enter(&spa->spa_vdev_top_lock); + mutex_enter(&spa_namespace_lock); + return (spa_vdev_config_enter(spa)); +} + +/* + * Internal implementation for spa_vdev_enter(). Used when a vdev + * operation requires multiple syncs (i.e. removing a device) while + * keeping the spa_namespace_lock held. + */ +uint64_t +spa_vdev_config_enter(spa_t *spa) +{ + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + spa_config_enter(spa, SCL_ALL, spa, RW_WRITER); + + return (spa_last_synced_txg(spa) + 1); +} + +/* + * Used in combination with spa_vdev_config_enter() to allow the syncing + * of multiple transactions without releasing the spa_namespace_lock. + */ +void +spa_vdev_config_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error, char *tag) +{ + int config_changed = B_FALSE; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + ASSERT(txg > spa_last_synced_txg(spa)); + + spa->spa_pending_vdev = NULL; + + /* + * Reassess the DTLs. + */ + vdev_dtl_reassess(spa->spa_root_vdev, 0, 0, B_FALSE); + + if (error == 0 && !list_is_empty(&spa->spa_config_dirty_list)) { + config_changed = B_TRUE; + spa->spa_config_generation++; + } + + /* + * Verify the metaslab classes. + */ + ASSERT(metaslab_class_validate(spa_normal_class(spa)) == 0); + ASSERT(metaslab_class_validate(spa_log_class(spa)) == 0); + + spa_config_exit(spa, SCL_ALL, spa); + + /* + * Panic the system if the specified tag requires it. This + * is useful for ensuring that configurations are updated + * transactionally. + */ + if (zio_injection_enabled) + zio_handle_panic_injection(spa, tag, 0); + + /* + * Note: this txg_wait_synced() is important because it ensures + * that there won't be more than one config change per txg. + * This allows us to use the txg as the generation number. + */ + if (error == 0) + txg_wait_synced(spa->spa_dsl_pool, txg); + + if (vd != NULL) { + ASSERT(!vd->vdev_detached || vd->vdev_dtl_sm == NULL); + spa_config_enter(spa, SCL_ALL, spa, RW_WRITER); + vdev_free(vd); + spa_config_exit(spa, SCL_ALL, spa); + } + + /* + * If the config changed, update the config cache. + */ + if (config_changed) + spa_config_sync(spa, B_FALSE, B_TRUE); +} + +/* + * Unlock the spa_t after adding or removing a vdev. Besides undoing the + * locking of spa_vdev_enter(), we also want make sure the transactions have + * synced to disk, and then update the global configuration cache with the new + * information. + */ +int +spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error) +{ + spa_vdev_config_exit(spa, vd, txg, error, FTAG); + mutex_exit(&spa_namespace_lock); + mutex_exit(&spa->spa_vdev_top_lock); + + return (error); +} + +/* + * Lock the given spa_t for the purpose of changing vdev state. + */ +void +spa_vdev_state_enter(spa_t *spa, int oplocks) +{ + int locks = SCL_STATE_ALL | oplocks; + + /* + * Root pools may need to read of the underlying devfs filesystem + * when opening up a vdev. Unfortunately if we're holding the + * SCL_ZIO lock it will result in a deadlock when we try to issue + * the read from the root filesystem. Instead we "prefetch" + * the associated vnodes that we need prior to opening the + * underlying devices and cache them so that we can prevent + * any I/O when we are doing the actual open. + */ + if (spa_is_root(spa)) { + int low = locks & ~(SCL_ZIO - 1); + int high = locks & ~low; + + spa_config_enter(spa, high, spa, RW_WRITER); + vdev_hold(spa->spa_root_vdev); + spa_config_enter(spa, low, spa, RW_WRITER); + } else { + spa_config_enter(spa, locks, spa, RW_WRITER); + } + spa->spa_vdev_locks = locks; +} + +int +spa_vdev_state_exit(spa_t *spa, vdev_t *vd, int error) +{ + boolean_t config_changed = B_FALSE; + vdev_t *vdev_top; + + if (vd == NULL || vd == spa->spa_root_vdev) { + vdev_top = spa->spa_root_vdev; + } else { + vdev_top = vd->vdev_top; + } + + if (vd != NULL || error == 0) + vdev_dtl_reassess(vdev_top, 0, 0, B_FALSE); + + if (vd != NULL) { + if (vd != spa->spa_root_vdev) + vdev_state_dirty(vdev_top); + + config_changed = B_TRUE; + spa->spa_config_generation++; + } + + if (spa_is_root(spa)) + vdev_rele(spa->spa_root_vdev); + + ASSERT3U(spa->spa_vdev_locks, >=, SCL_STATE_ALL); + spa_config_exit(spa, spa->spa_vdev_locks, spa); + + /* + * If anything changed, wait for it to sync. This ensures that, + * from the system administrator's perspective, zpool(1M) commands + * are synchronous. This is important for things like zpool offline: + * when the command completes, you expect no further I/O from ZFS. + */ + if (vd != NULL) + txg_wait_synced(spa->spa_dsl_pool, 0); + + /* + * If the config changed, update the config cache. + */ + if (config_changed) { + mutex_enter(&spa_namespace_lock); + spa_config_sync(spa, B_FALSE, B_TRUE); + mutex_exit(&spa_namespace_lock); + } + + return (error); +} + +/* + * ========================================================================== + * Miscellaneous functions + * ========================================================================== + */ + +void +spa_activate_mos_feature(spa_t *spa, const char *feature, dmu_tx_t *tx) +{ + if (!nvlist_exists(spa->spa_label_features, feature)) { + fnvlist_add_boolean(spa->spa_label_features, feature); + /* + * When we are creating the pool (tx_txg==TXG_INITIAL), we can't + * dirty the vdev config because lock SCL_CONFIG is not held. + * Thankfully, in this case we don't need to dirty the config + * because it will be written out anyway when we finish + * creating the pool. + */ + if (tx->tx_txg != TXG_INITIAL) + vdev_config_dirty(spa->spa_root_vdev); + } +} + +void +spa_deactivate_mos_feature(spa_t *spa, const char *feature) +{ + if (nvlist_remove_all(spa->spa_label_features, feature) == 0) + vdev_config_dirty(spa->spa_root_vdev); +} + +/* + * Rename a spa_t. + */ +int +spa_rename(const char *name, const char *newname) +{ + spa_t *spa; + int err; + + /* + * Lookup the spa_t and grab the config lock for writing. We need to + * actually open the pool so that we can sync out the necessary labels. + * It's OK to call spa_open() with the namespace lock held because we + * allow recursive calls for other reasons. + */ + mutex_enter(&spa_namespace_lock); + if ((err = spa_open(name, &spa, FTAG)) != 0) { + mutex_exit(&spa_namespace_lock); + return (err); + } + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + + avl_remove(&spa_namespace_avl, spa); + (void) strlcpy(spa->spa_name, newname, sizeof (spa->spa_name)); + avl_add(&spa_namespace_avl, spa); + + /* + * Sync all labels to disk with the new names by marking the root vdev + * dirty and waiting for it to sync. It will pick up the new pool name + * during the sync. + */ + vdev_config_dirty(spa->spa_root_vdev); + + spa_config_exit(spa, SCL_ALL, FTAG); + + txg_wait_synced(spa->spa_dsl_pool, 0); + + /* + * Sync the updated config cache. + */ + spa_config_sync(spa, B_FALSE, B_TRUE); + + spa_close(spa, FTAG); + + mutex_exit(&spa_namespace_lock); + + return (0); +} + +/* + * Return the spa_t associated with given pool_guid, if it exists. If + * device_guid is non-zero, determine whether the pool exists *and* contains + * a device with the specified device_guid. + */ +spa_t * +spa_by_guid(uint64_t pool_guid, uint64_t device_guid) +{ + spa_t *spa; + avl_tree_t *t = &spa_namespace_avl; + + ASSERT(MUTEX_HELD(&spa_namespace_lock)); + + for (spa = avl_first(t); spa != NULL; spa = AVL_NEXT(t, spa)) { + if (spa->spa_state == POOL_STATE_UNINITIALIZED) + continue; + if (spa->spa_root_vdev == NULL) + continue; + if (spa_guid(spa) == pool_guid) { + if (device_guid == 0) + break; + + if (vdev_lookup_by_guid(spa->spa_root_vdev, + device_guid) != NULL) + break; + + /* + * Check any devices we may be in the process of adding. + */ + if (spa->spa_pending_vdev) { + if (vdev_lookup_by_guid(spa->spa_pending_vdev, + device_guid) != NULL) + break; + } + } + } + + return (spa); +} + +/* + * Determine whether a pool with the given pool_guid exists. + */ +boolean_t +spa_guid_exists(uint64_t pool_guid, uint64_t device_guid) +{ + return (spa_by_guid(pool_guid, device_guid) != NULL); +} + +char * +spa_strdup(const char *s) +{ + size_t len; + char *new; + + len = strlen(s); + new = kmem_alloc(len + 1, KM_SLEEP); + bcopy(s, new, len); + new[len] = '\0'; + + return (new); +} + +void +spa_strfree(char *s) +{ + kmem_free(s, strlen(s) + 1); +} + +uint64_t +spa_get_random(uint64_t range) +{ + uint64_t r; + + ASSERT(range != 0); + + if (range == 1) + return (0); + + (void) random_get_pseudo_bytes((void *)&r, sizeof (uint64_t)); + + return (r % range); +} + +uint64_t +spa_generate_guid(spa_t *spa) +{ + uint64_t guid = spa_get_random(-1ULL); + + if (spa != NULL) { + while (guid == 0 || spa_guid_exists(spa_guid(spa), guid)) + guid = spa_get_random(-1ULL); + } else { + while (guid == 0 || spa_guid_exists(guid, 0)) + guid = spa_get_random(-1ULL); + } + + return (guid); +} + +void +snprintf_blkptr(char *buf, size_t buflen, const blkptr_t *bp) +{ + char type[256]; + char *checksum = NULL; + char *compress = NULL; + + if (bp != NULL) { + if (BP_GET_TYPE(bp) & DMU_OT_NEWTYPE) { + dmu_object_byteswap_t bswap = + DMU_OT_BYTESWAP(BP_GET_TYPE(bp)); + (void) snprintf(type, sizeof (type), "bswap %s %s", + DMU_OT_IS_METADATA(BP_GET_TYPE(bp)) ? + "metadata" : "data", + dmu_ot_byteswap[bswap].ob_name); + } else { + (void) strlcpy(type, dmu_ot[BP_GET_TYPE(bp)].ot_name, + sizeof (type)); + } + if (!BP_IS_EMBEDDED(bp)) { + checksum = + zio_checksum_table[BP_GET_CHECKSUM(bp)].ci_name; + } + compress = zio_compress_table[BP_GET_COMPRESS(bp)].ci_name; + } + + SNPRINTF_BLKPTR(snprintf, ' ', buf, buflen, bp, type, checksum, + compress); +} + +void +spa_freeze(spa_t *spa) +{ + uint64_t freeze_txg = 0; + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + if (spa->spa_freeze_txg == UINT64_MAX) { + freeze_txg = spa_last_synced_txg(spa) + TXG_SIZE; + spa->spa_freeze_txg = freeze_txg; + } + spa_config_exit(spa, SCL_ALL, FTAG); + if (freeze_txg != 0) + txg_wait_synced(spa_get_dsl(spa), freeze_txg); +} + +void +zfs_panic_recover(const char *fmt, ...) +{ + va_list adx; + + va_start(adx, fmt); + vcmn_err(zfs_recover ? CE_WARN : CE_PANIC, fmt, adx); + va_end(adx); +} + +/* + * This is a stripped-down version of strtoull, suitable only for converting + * lowercase hexadecimal numbers that don't overflow. + */ +uint64_t +zfs_strtonum(const char *str, char **nptr) +{ + uint64_t val = 0; + char c; + int digit; + + while ((c = *str) != '\0') { + if (c >= '0' && c <= '9') + digit = c - '0'; + else if (c >= 'a' && c <= 'f') + digit = 10 + c - 'a'; + else + break; + + val *= 16; + val += digit; + + str++; + } + + if (nptr) + *nptr = (char *)str; + + return (val); +} + +/* + * ========================================================================== + * Accessor functions + * ========================================================================== + */ + +boolean_t +spa_shutting_down(spa_t *spa) +{ + return (spa->spa_async_suspended); +} + +dsl_pool_t * +spa_get_dsl(spa_t *spa) +{ + return (spa->spa_dsl_pool); +} + +boolean_t +spa_is_initializing(spa_t *spa) +{ + return (spa->spa_is_initializing); +} + +blkptr_t * +spa_get_rootblkptr(spa_t *spa) +{ + return (&spa->spa_ubsync.ub_rootbp); +} + +void +spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp) +{ + spa->spa_uberblock.ub_rootbp = *bp; +} + +void +spa_altroot(spa_t *spa, char *buf, size_t buflen) +{ + if (spa->spa_root == NULL) + buf[0] = '\0'; + else + (void) strncpy(buf, spa->spa_root, buflen); +} + +int +spa_sync_pass(spa_t *spa) +{ + return (spa->spa_sync_pass); +} + +char * +spa_name(spa_t *spa) +{ + return (spa->spa_name); +} + +uint64_t +spa_guid(spa_t *spa) +{ + dsl_pool_t *dp = spa_get_dsl(spa); + uint64_t guid; + + /* + * If we fail to parse the config during spa_load(), we can go through + * the error path (which posts an ereport) and end up here with no root + * vdev. We stash the original pool guid in 'spa_config_guid' to handle + * this case. + */ + if (spa->spa_root_vdev == NULL) + return (spa->spa_config_guid); + + guid = spa->spa_last_synced_guid != 0 ? + spa->spa_last_synced_guid : spa->spa_root_vdev->vdev_guid; + + /* + * Return the most recently synced out guid unless we're + * in syncing context. + */ + if (dp && dsl_pool_sync_context(dp)) + return (spa->spa_root_vdev->vdev_guid); + else + return (guid); +} + +uint64_t +spa_load_guid(spa_t *spa) +{ + /* + * This is a GUID that exists solely as a reference for the + * purposes of the arc. It is generated at load time, and + * is never written to persistent storage. + */ + return (spa->spa_load_guid); +} + +uint64_t +spa_last_synced_txg(spa_t *spa) +{ + return (spa->spa_ubsync.ub_txg); +} + +uint64_t +spa_first_txg(spa_t *spa) +{ + return (spa->spa_first_txg); +} + +uint64_t +spa_syncing_txg(spa_t *spa) +{ + return (spa->spa_syncing_txg); +} + +/* + * Return the last txg where data can be dirtied. The final txgs + * will be used to just clear out any deferred frees that remain. + */ +uint64_t +spa_final_dirty_txg(spa_t *spa) +{ + return (spa->spa_final_txg - TXG_DEFER_SIZE); +} + +pool_state_t +spa_state(spa_t *spa) +{ + return (spa->spa_state); +} + +spa_load_state_t +spa_load_state(spa_t *spa) +{ + return (spa->spa_load_state); +} + +uint64_t +spa_freeze_txg(spa_t *spa) +{ + return (spa->spa_freeze_txg); +} + +/* + * Return the inflated asize for a logical write in bytes. This is used by the + * DMU to calculate the space a logical write will require on disk. + * If lsize is smaller than the largest physical block size allocatable on this + * pool we use its value instead, since the write will end up using the whole + * block anyway. + */ +uint64_t +spa_get_worst_case_asize(spa_t *spa, uint64_t lsize) +{ + if (lsize == 0) + return (0); /* No inflation needed */ + return (MAX(lsize, 1 << spa->spa_max_ashift) * spa_asize_inflation); +} + +/* + * Return the amount of slop space in bytes. It is 1/32 of the pool (3.2%), + * or at least 128MB, unless that would cause it to be more than half the + * pool size. + * + * See the comment above spa_slop_shift for details. + */ +uint64_t +spa_get_slop_space(spa_t *spa) +{ + uint64_t space = spa_get_dspace(spa); + return (MAX(space >> spa_slop_shift, MIN(space >> 1, spa_min_slop))); +} + +uint64_t +spa_get_dspace(spa_t *spa) +{ + return (spa->spa_dspace); +} + +void +spa_update_dspace(spa_t *spa) +{ + spa->spa_dspace = metaslab_class_get_dspace(spa_normal_class(spa)) + + ddt_get_dedup_dspace(spa); +} + +/* + * Return the failure mode that has been set to this pool. The default + * behavior will be to block all I/Os when a complete failure occurs. + */ +uint8_t +spa_get_failmode(spa_t *spa) +{ + return (spa->spa_failmode); +} + +boolean_t +spa_suspended(spa_t *spa) +{ + return (spa->spa_suspended); +} + +uint64_t +spa_version(spa_t *spa) +{ + return (spa->spa_ubsync.ub_version); +} + +boolean_t +spa_deflate(spa_t *spa) +{ + return (spa->spa_deflate); +} + +metaslab_class_t * +spa_normal_class(spa_t *spa) +{ + return (spa->spa_normal_class); +} + +metaslab_class_t * +spa_log_class(spa_t *spa) +{ + return (spa->spa_log_class); +} + +void +spa_evicting_os_register(spa_t *spa, objset_t *os) +{ + mutex_enter(&spa->spa_evicting_os_lock); + list_insert_head(&spa->spa_evicting_os_list, os); + mutex_exit(&spa->spa_evicting_os_lock); +} + +void +spa_evicting_os_deregister(spa_t *spa, objset_t *os) +{ + mutex_enter(&spa->spa_evicting_os_lock); + list_remove(&spa->spa_evicting_os_list, os); + cv_broadcast(&spa->spa_evicting_os_cv); + mutex_exit(&spa->spa_evicting_os_lock); +} + +void +spa_evicting_os_wait(spa_t *spa) +{ + mutex_enter(&spa->spa_evicting_os_lock); + while (!list_is_empty(&spa->spa_evicting_os_list)) + cv_wait(&spa->spa_evicting_os_cv, &spa->spa_evicting_os_lock); + mutex_exit(&spa->spa_evicting_os_lock); + + dmu_buf_user_evict_wait(); +} + +int +spa_max_replication(spa_t *spa) +{ + /* + * As of SPA_VERSION == SPA_VERSION_DITTO_BLOCKS, we are able to + * handle BPs with more than one DVA allocated. Set our max + * replication level accordingly. + */ + if (spa_version(spa) < SPA_VERSION_DITTO_BLOCKS) + return (1); + return (MIN(SPA_DVAS_PER_BP, spa_max_replication_override)); +} + +int +spa_prev_software_version(spa_t *spa) +{ + return (spa->spa_prev_software_version); +} + +uint64_t +spa_deadman_synctime(spa_t *spa) +{ + return (spa->spa_deadman_synctime); +} + +uint64_t +dva_get_dsize_sync(spa_t *spa, const dva_t *dva) +{ + uint64_t asize = DVA_GET_ASIZE(dva); + uint64_t dsize = asize; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0); + + if (asize != 0 && spa->spa_deflate) { + vdev_t *vd = vdev_lookup_top(spa, DVA_GET_VDEV(dva)); + if (vd != NULL) + dsize = (asize >> SPA_MINBLOCKSHIFT) * + vd->vdev_deflate_ratio; + } + + return (dsize); +} + +uint64_t +bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp) +{ + uint64_t dsize = 0; + int d; + + for (d = 0; d < BP_GET_NDVAS(bp); d++) + dsize += dva_get_dsize_sync(spa, &bp->blk_dva[d]); + + return (dsize); +} + +uint64_t +bp_get_dsize(spa_t *spa, const blkptr_t *bp) +{ + uint64_t dsize = 0; + int d; + + spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); + + for (d = 0; d < BP_GET_NDVAS(bp); d++) + dsize += dva_get_dsize_sync(spa, &bp->blk_dva[d]); + + spa_config_exit(spa, SCL_VDEV, FTAG); + + return (dsize); +} + +/* + * ========================================================================== + * Initialization and Termination + * ========================================================================== + */ + +static int +spa_name_compare(const void *a1, const void *a2) +{ + const spa_t *s1 = a1; + const spa_t *s2 = a2; + int s; + + s = strcmp(s1->spa_name, s2->spa_name); + + return (AVL_ISIGN(s)); +} + +void +spa_boot_init(void) +{ + spa_config_load(); +} + +void +spa_init(int mode) +{ + mutex_init(&spa_namespace_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa_spare_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa_l2cache_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&spa_namespace_cv, NULL, CV_DEFAULT, NULL); + + avl_create(&spa_namespace_avl, spa_name_compare, sizeof (spa_t), + offsetof(spa_t, spa_avl)); + + avl_create(&spa_spare_avl, spa_spare_compare, sizeof (spa_aux_t), + offsetof(spa_aux_t, aux_avl)); + + avl_create(&spa_l2cache_avl, spa_l2cache_compare, sizeof (spa_aux_t), + offsetof(spa_aux_t, aux_avl)); + + spa_mode_global = mode; + +#ifndef _KERNEL + if (spa_mode_global != FREAD && dprintf_find_string("watch")) { + struct sigaction sa; + + sa.sa_flags = SA_SIGINFO; + sigemptyset(&sa.sa_mask); + sa.sa_sigaction = arc_buf_sigsegv; + + if (sigaction(SIGSEGV, &sa, NULL) == -1) { + perror("could not enable watchpoints: " + "sigaction(SIGSEGV, ...) = "); + } else { + arc_watch = B_TRUE; + } + } +#endif + + fm_init(); + refcount_init(); + unique_init(); + range_tree_init(); + metaslab_alloc_trace_init(); + ddt_init(); + zio_init(); + dmu_init(); + zil_init(); + vdev_cache_stat_init(); + vdev_raidz_math_init(); + vdev_file_init(); + zfs_prop_init(); + zpool_prop_init(); + zpool_feature_init(); + spa_config_load(); + l2arc_start(); + qat_init(); +} + +void +spa_fini(void) +{ + l2arc_stop(); + + spa_evict_all(); + + vdev_file_fini(); + vdev_cache_stat_fini(); + vdev_raidz_math_fini(); + zil_fini(); + dmu_fini(); + zio_fini(); + ddt_fini(); + metaslab_alloc_trace_fini(); + range_tree_fini(); + unique_fini(); + refcount_fini(); + fm_fini(); + qat_fini(); + + avl_destroy(&spa_namespace_avl); + avl_destroy(&spa_spare_avl); + avl_destroy(&spa_l2cache_avl); + + cv_destroy(&spa_namespace_cv); + mutex_destroy(&spa_namespace_lock); + mutex_destroy(&spa_spare_lock); + mutex_destroy(&spa_l2cache_lock); +} + +/* + * Return whether this pool has slogs. No locking needed. + * It's not a problem if the wrong answer is returned as it's only for + * performance and not correctness + */ +boolean_t +spa_has_slogs(spa_t *spa) +{ + return (spa->spa_log_class->mc_rotor != NULL); +} + +spa_log_state_t +spa_get_log_state(spa_t *spa) +{ + return (spa->spa_log_state); +} + +void +spa_set_log_state(spa_t *spa, spa_log_state_t state) +{ + spa->spa_log_state = state; +} + +boolean_t +spa_is_root(spa_t *spa) +{ + return (spa->spa_is_root); +} + +boolean_t +spa_writeable(spa_t *spa) +{ + return (!!(spa->spa_mode & FWRITE)); +} + +/* + * Returns true if there is a pending sync task in any of the current + * syncing txg, the current quiescing txg, or the current open txg. + */ +boolean_t +spa_has_pending_synctask(spa_t *spa) +{ + return (!txg_all_lists_empty(&spa->spa_dsl_pool->dp_sync_tasks)); +} + +int +spa_mode(spa_t *spa) +{ + return (spa->spa_mode); +} + +uint64_t +spa_bootfs(spa_t *spa) +{ + return (spa->spa_bootfs); +} + +uint64_t +spa_delegation(spa_t *spa) +{ + return (spa->spa_delegation); +} + +objset_t * +spa_meta_objset(spa_t *spa) +{ + return (spa->spa_meta_objset); +} + +enum zio_checksum +spa_dedup_checksum(spa_t *spa) +{ + return (spa->spa_dedup_checksum); +} + +/* + * Reset pool scan stat per scan pass (or reboot). + */ +void +spa_scan_stat_init(spa_t *spa) +{ + /* data not stored on disk */ + spa->spa_scan_pass_start = gethrestime_sec(); + if (dsl_scan_is_paused_scrub(spa->spa_dsl_pool->dp_scan)) + spa->spa_scan_pass_scrub_pause = spa->spa_scan_pass_start; + else + spa->spa_scan_pass_scrub_pause = 0; + spa->spa_scan_pass_scrub_spent_paused = 0; + spa->spa_scan_pass_exam = 0; + vdev_scan_stat_init(spa->spa_root_vdev); +} + +/* + * Get scan stats for zpool status reports + */ +int +spa_scan_get_stats(spa_t *spa, pool_scan_stat_t *ps) +{ + dsl_scan_t *scn = spa->spa_dsl_pool ? spa->spa_dsl_pool->dp_scan : NULL; + + if (scn == NULL || scn->scn_phys.scn_func == POOL_SCAN_NONE) + return (SET_ERROR(ENOENT)); + bzero(ps, sizeof (pool_scan_stat_t)); + + /* data stored on disk */ + ps->pss_func = scn->scn_phys.scn_func; + ps->pss_start_time = scn->scn_phys.scn_start_time; + ps->pss_end_time = scn->scn_phys.scn_end_time; + ps->pss_to_examine = scn->scn_phys.scn_to_examine; + ps->pss_examined = scn->scn_phys.scn_examined; + ps->pss_to_process = scn->scn_phys.scn_to_process; + ps->pss_processed = scn->scn_phys.scn_processed; + ps->pss_errors = scn->scn_phys.scn_errors; + ps->pss_state = scn->scn_phys.scn_state; + + /* data not stored on disk */ + ps->pss_pass_start = spa->spa_scan_pass_start; + ps->pss_pass_exam = spa->spa_scan_pass_exam; + ps->pss_pass_scrub_pause = spa->spa_scan_pass_scrub_pause; + ps->pss_pass_scrub_spent_paused = spa->spa_scan_pass_scrub_spent_paused; + + return (0); +} + +boolean_t +spa_debug_enabled(spa_t *spa) +{ + return (spa->spa_debug); +} + +int +spa_maxblocksize(spa_t *spa) +{ + if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_BLOCKS)) + return (SPA_MAXBLOCKSIZE); + else + return (SPA_OLD_MAXBLOCKSIZE); +} + +int +spa_maxdnodesize(spa_t *spa) +{ + if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_DNODE)) + return (DNODE_MAX_SIZE); + else + return (DNODE_MIN_SIZE); +} + +boolean_t +spa_multihost(spa_t *spa) +{ + return (spa->spa_multihost ? B_TRUE : B_FALSE); +} + +unsigned long +spa_get_hostid(void) +{ + unsigned long myhostid; + +#ifdef _KERNEL + myhostid = zone_get_hostid(NULL); +#else /* _KERNEL */ + /* + * We're emulating the system's hostid in userland, so + * we can't use zone_get_hostid(). + */ + (void) ddi_strtoul(hw_serial, NULL, 10, &myhostid); +#endif /* _KERNEL */ + + return (myhostid); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* Namespace manipulation */ +EXPORT_SYMBOL(spa_lookup); +EXPORT_SYMBOL(spa_add); +EXPORT_SYMBOL(spa_remove); +EXPORT_SYMBOL(spa_next); + +/* Refcount functions */ +EXPORT_SYMBOL(spa_open_ref); +EXPORT_SYMBOL(spa_close); +EXPORT_SYMBOL(spa_refcount_zero); + +/* Pool configuration lock */ +EXPORT_SYMBOL(spa_config_tryenter); +EXPORT_SYMBOL(spa_config_enter); +EXPORT_SYMBOL(spa_config_exit); +EXPORT_SYMBOL(spa_config_held); + +/* Pool vdev add/remove lock */ +EXPORT_SYMBOL(spa_vdev_enter); +EXPORT_SYMBOL(spa_vdev_exit); + +/* Pool vdev state change lock */ +EXPORT_SYMBOL(spa_vdev_state_enter); +EXPORT_SYMBOL(spa_vdev_state_exit); + +/* Accessor functions */ +EXPORT_SYMBOL(spa_shutting_down); +EXPORT_SYMBOL(spa_get_dsl); +EXPORT_SYMBOL(spa_get_rootblkptr); +EXPORT_SYMBOL(spa_set_rootblkptr); +EXPORT_SYMBOL(spa_altroot); +EXPORT_SYMBOL(spa_sync_pass); +EXPORT_SYMBOL(spa_name); +EXPORT_SYMBOL(spa_guid); +EXPORT_SYMBOL(spa_last_synced_txg); +EXPORT_SYMBOL(spa_first_txg); +EXPORT_SYMBOL(spa_syncing_txg); +EXPORT_SYMBOL(spa_version); +EXPORT_SYMBOL(spa_state); +EXPORT_SYMBOL(spa_load_state); +EXPORT_SYMBOL(spa_freeze_txg); +EXPORT_SYMBOL(spa_get_dspace); +EXPORT_SYMBOL(spa_update_dspace); +EXPORT_SYMBOL(spa_deflate); +EXPORT_SYMBOL(spa_normal_class); +EXPORT_SYMBOL(spa_log_class); +EXPORT_SYMBOL(spa_max_replication); +EXPORT_SYMBOL(spa_prev_software_version); +EXPORT_SYMBOL(spa_get_failmode); +EXPORT_SYMBOL(spa_suspended); +EXPORT_SYMBOL(spa_bootfs); +EXPORT_SYMBOL(spa_delegation); +EXPORT_SYMBOL(spa_meta_objset); +EXPORT_SYMBOL(spa_maxblocksize); +EXPORT_SYMBOL(spa_maxdnodesize); + +/* Miscellaneous support routines */ +EXPORT_SYMBOL(spa_rename); +EXPORT_SYMBOL(spa_guid_exists); +EXPORT_SYMBOL(spa_strdup); +EXPORT_SYMBOL(spa_strfree); +EXPORT_SYMBOL(spa_get_random); +EXPORT_SYMBOL(spa_generate_guid); +EXPORT_SYMBOL(snprintf_blkptr); +EXPORT_SYMBOL(spa_freeze); +EXPORT_SYMBOL(spa_upgrade); +EXPORT_SYMBOL(spa_evict_all); +EXPORT_SYMBOL(spa_lookup_by_guid); +EXPORT_SYMBOL(spa_has_spare); +EXPORT_SYMBOL(dva_get_dsize_sync); +EXPORT_SYMBOL(bp_get_dsize_sync); +EXPORT_SYMBOL(bp_get_dsize); +EXPORT_SYMBOL(spa_has_slogs); +EXPORT_SYMBOL(spa_is_root); +EXPORT_SYMBOL(spa_writeable); +EXPORT_SYMBOL(spa_mode); +EXPORT_SYMBOL(spa_namespace_lock); + +/* BEGIN CSTYLED */ +module_param(zfs_flags, uint, 0644); +MODULE_PARM_DESC(zfs_flags, "Set additional debugging flags"); + +module_param(zfs_recover, int, 0644); +MODULE_PARM_DESC(zfs_recover, "Set to attempt to recover from fatal errors"); + +module_param(zfs_free_leak_on_eio, int, 0644); +MODULE_PARM_DESC(zfs_free_leak_on_eio, + "Set to ignore IO errors during free and permanently leak the space"); + +module_param(zfs_deadman_synctime_ms, ulong, 0644); +MODULE_PARM_DESC(zfs_deadman_synctime_ms, "Expiration time in milliseconds"); + +module_param(zfs_deadman_checktime_ms, ulong, 0644); +MODULE_PARM_DESC(zfs_deadman_checktime_ms, + "Dead I/O check interval in milliseconds"); + +module_param(zfs_deadman_enabled, int, 0644); +MODULE_PARM_DESC(zfs_deadman_enabled, "Enable deadman timer"); + +module_param(spa_asize_inflation, int, 0644); +MODULE_PARM_DESC(spa_asize_inflation, + "SPA size estimate multiplication factor"); + +module_param(spa_slop_shift, int, 0644); +MODULE_PARM_DESC(spa_slop_shift, "Reserved free space in pool"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/spa_stats.c +++ linux-aws-4.15.0/zfs/module/zfs/spa_stats.c @@ -0,0 +1,940 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#include +#include +#include + +/* + * Keeps stats on last N reads per spa_t, disabled by default. + */ +int zfs_read_history = 0; + +/* + * Include cache hits in history, disabled by default. + */ +int zfs_read_history_hits = 0; + +/* + * Keeps stats on the last N txgs, disabled by default. + */ +int zfs_txg_history = 0; + +/* + * Keeps stats on the last N MMP updates, disabled by default. + */ +int zfs_multihost_history = 0; + +/* + * ========================================================================== + * SPA Read History Routines + * ========================================================================== + */ + +/* + * Read statistics - Information exported regarding each arc_read call + */ +typedef struct spa_read_history { + uint64_t uid; /* unique identifier */ + hrtime_t start; /* time read completed */ + uint64_t objset; /* read from this objset */ + uint64_t object; /* read of this object number */ + uint64_t level; /* block's indirection level */ + uint64_t blkid; /* read of this block id */ + char origin[24]; /* read originated from here */ + uint32_t aflags; /* ARC flags (cached, prefetch, etc.) */ + pid_t pid; /* PID of task doing read */ + char comm[16]; /* process name of task doing read */ + list_node_t srh_link; +} spa_read_history_t; + +static int +spa_read_history_headers(char *buf, size_t size) +{ + (void) snprintf(buf, size, "%-8s %-16s %-8s %-8s %-8s %-8s %-8s " + "%-24s %-8s %-16s\n", "UID", "start", "objset", "object", + "level", "blkid", "aflags", "origin", "pid", "process"); + + return (0); +} + +static int +spa_read_history_data(char *buf, size_t size, void *data) +{ + spa_read_history_t *srh = (spa_read_history_t *)data; + + (void) snprintf(buf, size, "%-8llu %-16llu 0x%-6llx " + "%-8lli %-8lli %-8lli 0x%-6x %-24s %-8i %-16s\n", + (u_longlong_t)srh->uid, srh->start, + (longlong_t)srh->objset, (longlong_t)srh->object, + (longlong_t)srh->level, (longlong_t)srh->blkid, + srh->aflags, srh->origin, srh->pid, srh->comm); + + return (0); +} + +/* + * Calculate the address for the next spa_stats_history_t entry. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static void * +spa_read_history_addr(kstat_t *ksp, loff_t n) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.read_history; + + ASSERT(MUTEX_HELD(&ssh->lock)); + + if (n == 0) + ssh->private = list_tail(&ssh->list); + else if (ssh->private) + ssh->private = list_prev(&ssh->list, ssh->private); + + return (ssh->private); +} + +/* + * When the kstat is written discard all spa_read_history_t entries. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static int +spa_read_history_update(kstat_t *ksp, int rw) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.read_history; + + if (rw == KSTAT_WRITE) { + spa_read_history_t *srh; + + while ((srh = list_remove_head(&ssh->list))) { + ssh->size--; + kmem_free(srh, sizeof (spa_read_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + } + + ksp->ks_ndata = ssh->size; + ksp->ks_data_size = ssh->size * sizeof (spa_read_history_t); + + return (0); +} + +static void +spa_read_history_init(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.read_history; + char name[KSTAT_STRLEN]; + kstat_t *ksp; + + mutex_init(&ssh->lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&ssh->list, sizeof (spa_read_history_t), + offsetof(spa_read_history_t, srh_link)); + + ssh->count = 0; + ssh->size = 0; + ssh->private = NULL; + + (void) snprintf(name, KSTAT_STRLEN, "zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "reads", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + ssh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &ssh->lock; + ksp->ks_data = NULL; + ksp->ks_private = spa; + ksp->ks_update = spa_read_history_update; + kstat_set_raw_ops(ksp, spa_read_history_headers, + spa_read_history_data, spa_read_history_addr); + kstat_install(ksp); + } +} + +static void +spa_read_history_destroy(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.read_history; + spa_read_history_t *srh; + kstat_t *ksp; + + ksp = ssh->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_enter(&ssh->lock); + while ((srh = list_remove_head(&ssh->list))) { + ssh->size--; + kmem_free(srh, sizeof (spa_read_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + list_destroy(&ssh->list); + mutex_exit(&ssh->lock); + + mutex_destroy(&ssh->lock); +} + +void +spa_read_history_add(spa_t *spa, const zbookmark_phys_t *zb, uint32_t aflags) +{ + spa_stats_history_t *ssh = &spa->spa_stats.read_history; + spa_read_history_t *srh, *rm; + + ASSERT3P(spa, !=, NULL); + ASSERT3P(zb, !=, NULL); + + if (zfs_read_history == 0 && ssh->size == 0) + return; + + if (zfs_read_history_hits == 0 && (aflags & ARC_FLAG_CACHED)) + return; + + srh = kmem_zalloc(sizeof (spa_read_history_t), KM_SLEEP); + strlcpy(srh->comm, getcomm(), sizeof (srh->comm)); + srh->start = gethrtime(); + srh->objset = zb->zb_objset; + srh->object = zb->zb_object; + srh->level = zb->zb_level; + srh->blkid = zb->zb_blkid; + srh->aflags = aflags; + srh->pid = getpid(); + + mutex_enter(&ssh->lock); + + srh->uid = ssh->count++; + list_insert_head(&ssh->list, srh); + ssh->size++; + + while (ssh->size > zfs_read_history) { + ssh->size--; + rm = list_remove_tail(&ssh->list); + kmem_free(rm, sizeof (spa_read_history_t)); + } + + mutex_exit(&ssh->lock); +} + +/* + * ========================================================================== + * SPA TXG History Routines + * ========================================================================== + */ + +/* + * Txg statistics - Information exported regarding each txg sync + */ + +typedef struct spa_txg_history { + uint64_t txg; /* txg id */ + txg_state_t state; /* active txg state */ + uint64_t nread; /* number of bytes read */ + uint64_t nwritten; /* number of bytes written */ + uint64_t reads; /* number of read operations */ + uint64_t writes; /* number of write operations */ + uint64_t ndirty; /* number of dirty bytes */ + hrtime_t times[TXG_STATE_COMMITTED]; /* completion times */ + list_node_t sth_link; +} spa_txg_history_t; + +static int +spa_txg_history_headers(char *buf, size_t size) +{ + (void) snprintf(buf, size, "%-8s %-16s %-5s %-12s %-12s %-12s " + "%-8s %-8s %-12s %-12s %-12s %-12s\n", "txg", "birth", "state", + "ndirty", "nread", "nwritten", "reads", "writes", + "otime", "qtime", "wtime", "stime"); + + return (0); +} + +static int +spa_txg_history_data(char *buf, size_t size, void *data) +{ + spa_txg_history_t *sth = (spa_txg_history_t *)data; + uint64_t open = 0, quiesce = 0, wait = 0, sync = 0; + char state; + + switch (sth->state) { + case TXG_STATE_BIRTH: state = 'B'; break; + case TXG_STATE_OPEN: state = 'O'; break; + case TXG_STATE_QUIESCED: state = 'Q'; break; + case TXG_STATE_WAIT_FOR_SYNC: state = 'W'; break; + case TXG_STATE_SYNCED: state = 'S'; break; + case TXG_STATE_COMMITTED: state = 'C'; break; + default: state = '?'; break; + } + + if (sth->times[TXG_STATE_OPEN]) + open = sth->times[TXG_STATE_OPEN] - + sth->times[TXG_STATE_BIRTH]; + + if (sth->times[TXG_STATE_QUIESCED]) + quiesce = sth->times[TXG_STATE_QUIESCED] - + sth->times[TXG_STATE_OPEN]; + + if (sth->times[TXG_STATE_WAIT_FOR_SYNC]) + wait = sth->times[TXG_STATE_WAIT_FOR_SYNC] - + sth->times[TXG_STATE_QUIESCED]; + + if (sth->times[TXG_STATE_SYNCED]) + sync = sth->times[TXG_STATE_SYNCED] - + sth->times[TXG_STATE_WAIT_FOR_SYNC]; + + (void) snprintf(buf, size, "%-8llu %-16llu %-5c %-12llu " + "%-12llu %-12llu %-8llu %-8llu %-12llu %-12llu %-12llu %-12llu\n", + (longlong_t)sth->txg, sth->times[TXG_STATE_BIRTH], state, + (u_longlong_t)sth->ndirty, + (u_longlong_t)sth->nread, (u_longlong_t)sth->nwritten, + (u_longlong_t)sth->reads, (u_longlong_t)sth->writes, + (u_longlong_t)open, (u_longlong_t)quiesce, (u_longlong_t)wait, + (u_longlong_t)sync); + + return (0); +} + +/* + * Calculate the address for the next spa_stats_history_t entry. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static void * +spa_txg_history_addr(kstat_t *ksp, loff_t n) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + + ASSERT(MUTEX_HELD(&ssh->lock)); + + if (n == 0) + ssh->private = list_tail(&ssh->list); + else if (ssh->private) + ssh->private = list_prev(&ssh->list, ssh->private); + + return (ssh->private); +} + +/* + * When the kstat is written discard all spa_txg_history_t entries. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static int +spa_txg_history_update(kstat_t *ksp, int rw) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + + ASSERT(MUTEX_HELD(&ssh->lock)); + + if (rw == KSTAT_WRITE) { + spa_txg_history_t *sth; + + while ((sth = list_remove_head(&ssh->list))) { + ssh->size--; + kmem_free(sth, sizeof (spa_txg_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + } + + ksp->ks_ndata = ssh->size; + ksp->ks_data_size = ssh->size * sizeof (spa_txg_history_t); + + return (0); +} + +static void +spa_txg_history_init(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + char name[KSTAT_STRLEN]; + kstat_t *ksp; + + mutex_init(&ssh->lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&ssh->list, sizeof (spa_txg_history_t), + offsetof(spa_txg_history_t, sth_link)); + + ssh->count = 0; + ssh->size = 0; + ssh->private = NULL; + + (void) snprintf(name, KSTAT_STRLEN, "zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "txgs", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + ssh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &ssh->lock; + ksp->ks_data = NULL; + ksp->ks_private = spa; + ksp->ks_update = spa_txg_history_update; + kstat_set_raw_ops(ksp, spa_txg_history_headers, + spa_txg_history_data, spa_txg_history_addr); + kstat_install(ksp); + } +} + +static void +spa_txg_history_destroy(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + kstat_t *ksp; + + ksp = ssh->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_enter(&ssh->lock); + while ((sth = list_remove_head(&ssh->list))) { + ssh->size--; + kmem_free(sth, sizeof (spa_txg_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + list_destroy(&ssh->list); + mutex_exit(&ssh->lock); + + mutex_destroy(&ssh->lock); +} + +/* + * Add a new txg to historical record. + */ +void +spa_txg_history_add(spa_t *spa, uint64_t txg, hrtime_t birth_time) +{ + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + spa_txg_history_t *sth, *rm; + + if (zfs_txg_history == 0 && ssh->size == 0) + return; + + sth = kmem_zalloc(sizeof (spa_txg_history_t), KM_SLEEP); + sth->txg = txg; + sth->state = TXG_STATE_OPEN; + sth->times[TXG_STATE_BIRTH] = birth_time; + + mutex_enter(&ssh->lock); + + list_insert_head(&ssh->list, sth); + ssh->size++; + + while (ssh->size > zfs_txg_history) { + ssh->size--; + rm = list_remove_tail(&ssh->list); + kmem_free(rm, sizeof (spa_txg_history_t)); + } + + mutex_exit(&ssh->lock); +} + +/* + * Set txg state completion time and increment current state. + */ +int +spa_txg_history_set(spa_t *spa, uint64_t txg, txg_state_t completed_state, + hrtime_t completed_time) +{ + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + int error = ENOENT; + + if (zfs_txg_history == 0) + return (0); + + mutex_enter(&ssh->lock); + for (sth = list_head(&ssh->list); sth != NULL; + sth = list_next(&ssh->list, sth)) { + if (sth->txg == txg) { + sth->times[completed_state] = completed_time; + sth->state++; + error = 0; + break; + } + } + mutex_exit(&ssh->lock); + + return (error); +} + +/* + * Set txg IO stats. + */ +static int +spa_txg_history_set_io(spa_t *spa, uint64_t txg, uint64_t nread, + uint64_t nwritten, uint64_t reads, uint64_t writes, uint64_t ndirty) +{ + spa_stats_history_t *ssh = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + int error = ENOENT; + + if (zfs_txg_history == 0) + return (0); + + mutex_enter(&ssh->lock); + for (sth = list_head(&ssh->list); sth != NULL; + sth = list_next(&ssh->list, sth)) { + if (sth->txg == txg) { + sth->nread = nread; + sth->nwritten = nwritten; + sth->reads = reads; + sth->writes = writes; + sth->ndirty = ndirty; + error = 0; + break; + } + } + mutex_exit(&ssh->lock); + + return (error); +} + +txg_stat_t * +spa_txg_history_init_io(spa_t *spa, uint64_t txg, dsl_pool_t *dp) +{ + txg_stat_t *ts; + + if (zfs_txg_history == 0) + return (NULL); + + ts = kmem_alloc(sizeof (txg_stat_t), KM_SLEEP); + + spa_config_enter(spa, SCL_ALL, FTAG, RW_READER); + vdev_get_stats(spa->spa_root_vdev, &ts->vs1); + spa_config_exit(spa, SCL_ALL, FTAG); + + ts->txg = txg; + ts->ndirty = dp->dp_dirty_pertxg[txg & TXG_MASK]; + + spa_txg_history_set(spa, txg, TXG_STATE_WAIT_FOR_SYNC, gethrtime()); + + return (ts); +} + +void +spa_txg_history_fini_io(spa_t *spa, txg_stat_t *ts) +{ + if (ts == NULL) + return; + + if (zfs_txg_history == 0) { + kmem_free(ts, sizeof (txg_stat_t)); + return; + } + + spa_config_enter(spa, SCL_ALL, FTAG, RW_READER); + vdev_get_stats(spa->spa_root_vdev, &ts->vs2); + spa_config_exit(spa, SCL_ALL, FTAG); + + spa_txg_history_set(spa, ts->txg, TXG_STATE_SYNCED, gethrtime()); + spa_txg_history_set_io(spa, ts->txg, + ts->vs2.vs_bytes[ZIO_TYPE_READ] - ts->vs1.vs_bytes[ZIO_TYPE_READ], + ts->vs2.vs_bytes[ZIO_TYPE_WRITE] - ts->vs1.vs_bytes[ZIO_TYPE_WRITE], + ts->vs2.vs_ops[ZIO_TYPE_READ] - ts->vs1.vs_ops[ZIO_TYPE_READ], + ts->vs2.vs_ops[ZIO_TYPE_WRITE] - ts->vs1.vs_ops[ZIO_TYPE_WRITE], + ts->ndirty); + + kmem_free(ts, sizeof (txg_stat_t)); +} + +/* + * ========================================================================== + * SPA TX Assign Histogram Routines + * ========================================================================== + */ + +/* + * Tx statistics - Information exported regarding dmu_tx_assign time. + */ + +/* + * When the kstat is written zero all buckets. When the kstat is read + * count the number of trailing buckets set to zero and update ks_ndata + * such that they are not output. + */ +static int +spa_tx_assign_update(kstat_t *ksp, int rw) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.tx_assign_histogram; + int i; + + if (rw == KSTAT_WRITE) { + for (i = 0; i < ssh->count; i++) + ((kstat_named_t *)ssh->private)[i].value.ui64 = 0; + } + + for (i = ssh->count; i > 0; i--) + if (((kstat_named_t *)ssh->private)[i-1].value.ui64 != 0) + break; + + ksp->ks_ndata = i; + ksp->ks_data_size = i * sizeof (kstat_named_t); + + return (0); +} + +static void +spa_tx_assign_init(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.tx_assign_histogram; + char name[KSTAT_STRLEN]; + kstat_named_t *ks; + kstat_t *ksp; + int i; + + mutex_init(&ssh->lock, NULL, MUTEX_DEFAULT, NULL); + + ssh->count = 42; /* power of two buckets for 1ns to 2,199s */ + ssh->size = ssh->count * sizeof (kstat_named_t); + ssh->private = kmem_alloc(ssh->size, KM_SLEEP); + + (void) snprintf(name, KSTAT_STRLEN, "zfs/%s", spa_name(spa)); + + for (i = 0; i < ssh->count; i++) { + ks = &((kstat_named_t *)ssh->private)[i]; + ks->data_type = KSTAT_DATA_UINT64; + ks->value.ui64 = 0; + (void) snprintf(ks->name, KSTAT_STRLEN, "%llu ns", + (u_longlong_t)1 << i); + } + + ksp = kstat_create(name, 0, "dmu_tx_assign", "misc", + KSTAT_TYPE_NAMED, 0, KSTAT_FLAG_VIRTUAL); + ssh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &ssh->lock; + ksp->ks_data = ssh->private; + ksp->ks_ndata = ssh->count; + ksp->ks_data_size = ssh->size; + ksp->ks_private = spa; + ksp->ks_update = spa_tx_assign_update; + kstat_install(ksp); + } +} + +static void +spa_tx_assign_destroy(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.tx_assign_histogram; + kstat_t *ksp; + + ksp = ssh->kstat; + if (ksp) + kstat_delete(ksp); + + kmem_free(ssh->private, ssh->size); + mutex_destroy(&ssh->lock); +} + +void +spa_tx_assign_add_nsecs(spa_t *spa, uint64_t nsecs) +{ + spa_stats_history_t *ssh = &spa->spa_stats.tx_assign_histogram; + uint64_t idx = 0; + + while (((1ULL << idx) < nsecs) && (idx < ssh->size - 1)) + idx++; + + atomic_inc_64(&((kstat_named_t *)ssh->private)[idx].value.ui64); +} + +/* + * ========================================================================== + * SPA IO History Routines + * ========================================================================== + */ +static int +spa_io_history_update(kstat_t *ksp, int rw) +{ + if (rw == KSTAT_WRITE) + memset(ksp->ks_data, 0, ksp->ks_data_size); + + return (0); +} + +static void +spa_io_history_init(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + char name[KSTAT_STRLEN]; + kstat_t *ksp; + + mutex_init(&ssh->lock, NULL, MUTEX_DEFAULT, NULL); + + (void) snprintf(name, KSTAT_STRLEN, "zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "io", "disk", KSTAT_TYPE_IO, 1, 0); + ssh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &ssh->lock; + ksp->ks_private = spa; + ksp->ks_update = spa_io_history_update; + kstat_install(ksp); + } +} + +static void +spa_io_history_destroy(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + + if (ssh->kstat) + kstat_delete(ssh->kstat); + + mutex_destroy(&ssh->lock); +} + +/* + * ========================================================================== + * SPA MMP History Routines + * ========================================================================== + */ + +/* + * MMP statistics - Information exported regarding each MMP update + */ + +typedef struct spa_mmp_history { + uint64_t txg; /* txg of last sync */ + uint64_t timestamp; /* UTC time of of last sync */ + uint64_t mmp_delay; /* nanosec since last MMP write */ + uint64_t vdev_guid; /* unique ID of leaf vdev */ + char *vdev_path; + uint64_t vdev_label; /* vdev label */ + list_node_t smh_link; +} spa_mmp_history_t; + +static int +spa_mmp_history_headers(char *buf, size_t size) +{ + (void) snprintf(buf, size, "%-10s %-10s %-12s %-24s %-10s %s\n", + "txg", "timestamp", "mmp_delay", "vdev_guid", "vdev_label", + "vdev_path"); + return (0); +} + +static int +spa_mmp_history_data(char *buf, size_t size, void *data) +{ + spa_mmp_history_t *smh = (spa_mmp_history_t *)data; + + (void) snprintf(buf, size, "%-10llu %-10llu %-12llu %-24llu %-10llu " + "%s\n", + (u_longlong_t)smh->txg, (u_longlong_t)smh->timestamp, + (u_longlong_t)smh->mmp_delay, (u_longlong_t)smh->vdev_guid, + (u_longlong_t)smh->vdev_label, + (smh->vdev_path ? smh->vdev_path : "-")); + + return (0); +} + +/* + * Calculate the address for the next spa_stats_history_t entry. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static void * +spa_mmp_history_addr(kstat_t *ksp, loff_t n) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.mmp_history; + + ASSERT(MUTEX_HELD(&ssh->lock)); + + if (n == 0) + ssh->private = list_tail(&ssh->list); + else if (ssh->private) + ssh->private = list_prev(&ssh->list, ssh->private); + + return (ssh->private); +} + +/* + * When the kstat is written discard all spa_mmp_history_t entries. The + * ssh->lock will be held until ksp->ks_ndata entries are processed. + */ +static int +spa_mmp_history_update(kstat_t *ksp, int rw) +{ + spa_t *spa = ksp->ks_private; + spa_stats_history_t *ssh = &spa->spa_stats.mmp_history; + + ASSERT(MUTEX_HELD(&ssh->lock)); + + if (rw == KSTAT_WRITE) { + spa_mmp_history_t *smh; + + while ((smh = list_remove_head(&ssh->list))) { + ssh->size--; + if (smh->vdev_path) + strfree(smh->vdev_path); + kmem_free(smh, sizeof (spa_mmp_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + } + + ksp->ks_ndata = ssh->size; + ksp->ks_data_size = ssh->size * sizeof (spa_mmp_history_t); + + return (0); +} + +static void +spa_mmp_history_init(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.mmp_history; + char name[KSTAT_STRLEN]; + kstat_t *ksp; + + mutex_init(&ssh->lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&ssh->list, sizeof (spa_mmp_history_t), + offsetof(spa_mmp_history_t, smh_link)); + + ssh->count = 0; + ssh->size = 0; + ssh->private = NULL; + + (void) snprintf(name, KSTAT_STRLEN, "zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "multihost", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + ssh->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &ssh->lock; + ksp->ks_data = NULL; + ksp->ks_private = spa; + ksp->ks_update = spa_mmp_history_update; + kstat_set_raw_ops(ksp, spa_mmp_history_headers, + spa_mmp_history_data, spa_mmp_history_addr); + kstat_install(ksp); + } +} + +static void +spa_mmp_history_destroy(spa_t *spa) +{ + spa_stats_history_t *ssh = &spa->spa_stats.mmp_history; + spa_mmp_history_t *smh; + kstat_t *ksp; + + ksp = ssh->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_enter(&ssh->lock); + while ((smh = list_remove_head(&ssh->list))) { + ssh->size--; + if (smh->vdev_path) + strfree(smh->vdev_path); + kmem_free(smh, sizeof (spa_mmp_history_t)); + } + + ASSERT3U(ssh->size, ==, 0); + list_destroy(&ssh->list); + mutex_exit(&ssh->lock); + + mutex_destroy(&ssh->lock); +} + +/* + * Add a new MMP update to historical record. + */ +void +spa_mmp_history_add(uint64_t txg, uint64_t timestamp, uint64_t mmp_delay, + vdev_t *vd, int label) +{ + spa_t *spa = vd->vdev_spa; + spa_stats_history_t *ssh = &spa->spa_stats.mmp_history; + spa_mmp_history_t *smh, *rm; + + if (zfs_multihost_history == 0 && ssh->size == 0) + return; + + smh = kmem_zalloc(sizeof (spa_mmp_history_t), KM_SLEEP); + smh->txg = txg; + smh->timestamp = timestamp; + smh->mmp_delay = mmp_delay; + smh->vdev_guid = vd->vdev_guid; + if (vd->vdev_path) + smh->vdev_path = strdup(vd->vdev_path); + smh->vdev_label = label; + + mutex_enter(&ssh->lock); + + list_insert_head(&ssh->list, smh); + ssh->size++; + + while (ssh->size > zfs_multihost_history) { + ssh->size--; + rm = list_remove_tail(&ssh->list); + if (rm->vdev_path) + strfree(rm->vdev_path); + kmem_free(rm, sizeof (spa_mmp_history_t)); + } + + mutex_exit(&ssh->lock); +} + +void +spa_stats_init(spa_t *spa) +{ + spa_read_history_init(spa); + spa_txg_history_init(spa); + spa_tx_assign_init(spa); + spa_io_history_init(spa); + spa_mmp_history_init(spa); +} + +void +spa_stats_destroy(spa_t *spa) +{ + spa_tx_assign_destroy(spa); + spa_txg_history_destroy(spa); + spa_read_history_destroy(spa); + spa_io_history_destroy(spa); + spa_mmp_history_destroy(spa); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* CSTYLED */ +module_param(zfs_read_history, int, 0644); +MODULE_PARM_DESC(zfs_read_history, + "Historical statistics for the last N reads"); + +module_param(zfs_read_history_hits, int, 0644); +MODULE_PARM_DESC(zfs_read_history_hits, + "Include cache hits in read history"); + +module_param(zfs_txg_history, int, 0644); +MODULE_PARM_DESC(zfs_txg_history, + "Historical statistics for the last N txgs"); + +module_param(zfs_multihost_history, int, 0644); +MODULE_PARM_DESC(zfs_multihost_history, + "Historical statistics for last N multihost writes"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/space_map.c +++ linux-aws-4.15.0/zfs/module/zfs/space_map.c @@ -0,0 +1,552 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * The data for a given space map can be kept on blocks of any size. + * Larger blocks entail fewer i/o operations, but they also cause the + * DMU to keep more data in-core, and also to waste more i/o bandwidth + * when only a few blocks have changed since the last transaction group. + */ +int space_map_blksz = (1 << 12); + +/* + * Load the space map disk into the specified range tree. Segments of maptype + * are added to the range tree, other segment types are removed. + * + * Note: space_map_load() will drop sm_lock across dmu_read() calls. + * The caller must be OK with this. + */ +int +space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype) +{ + uint64_t *entry, *entry_map, *entry_map_end; + uint64_t bufsize, size, offset, end, space; + int error = 0; + + ASSERT(MUTEX_HELD(sm->sm_lock)); + + end = space_map_length(sm); + space = space_map_allocated(sm); + + VERIFY0(range_tree_space(rt)); + + if (maptype == SM_FREE) { + range_tree_add(rt, sm->sm_start, sm->sm_size); + space = sm->sm_size - space; + } + + bufsize = MAX(sm->sm_blksz, SPA_MINBLOCKSIZE); + entry_map = vmem_alloc(bufsize, KM_SLEEP); + + mutex_exit(sm->sm_lock); + if (end > bufsize) { + dmu_prefetch(sm->sm_os, space_map_object(sm), 0, bufsize, + end - bufsize, ZIO_PRIORITY_SYNC_READ); + } + mutex_enter(sm->sm_lock); + + for (offset = 0; offset < end; offset += bufsize) { + size = MIN(end - offset, bufsize); + VERIFY(P2PHASE(size, sizeof (uint64_t)) == 0); + VERIFY(size != 0); + ASSERT3U(sm->sm_blksz, !=, 0); + + dprintf("object=%llu offset=%llx size=%llx\n", + space_map_object(sm), offset, size); + + mutex_exit(sm->sm_lock); + error = dmu_read(sm->sm_os, space_map_object(sm), offset, size, + entry_map, DMU_READ_PREFETCH); + mutex_enter(sm->sm_lock); + if (error != 0) + break; + + entry_map_end = entry_map + (size / sizeof (uint64_t)); + for (entry = entry_map; entry < entry_map_end; entry++) { + uint64_t e = *entry; + uint64_t offset, size; + + if (SM_DEBUG_DECODE(e)) /* Skip debug entries */ + continue; + + offset = (SM_OFFSET_DECODE(e) << sm->sm_shift) + + sm->sm_start; + size = SM_RUN_DECODE(e) << sm->sm_shift; + + VERIFY0(P2PHASE(offset, 1ULL << sm->sm_shift)); + VERIFY0(P2PHASE(size, 1ULL << sm->sm_shift)); + VERIFY3U(offset, >=, sm->sm_start); + VERIFY3U(offset + size, <=, sm->sm_start + sm->sm_size); + if (SM_TYPE_DECODE(e) == maptype) { + VERIFY3U(range_tree_space(rt) + size, <=, + sm->sm_size); + range_tree_add(rt, offset, size); + } else { + range_tree_remove(rt, offset, size); + } + } + } + + if (error == 0) + VERIFY3U(range_tree_space(rt), ==, space); + else + range_tree_vacate(rt, NULL, NULL); + + vmem_free(entry_map, bufsize); + return (error); +} + +void +space_map_histogram_clear(space_map_t *sm) +{ + if (sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) + return; + + bzero(sm->sm_phys->smp_histogram, sizeof (sm->sm_phys->smp_histogram)); +} + +boolean_t +space_map_histogram_verify(space_map_t *sm, range_tree_t *rt) +{ + int i; + + /* + * Verify that the in-core range tree does not have any + * ranges smaller than our sm_shift size. + */ + for (i = 0; i < sm->sm_shift; i++) { + if (rt->rt_histogram[i] != 0) + return (B_FALSE); + } + return (B_TRUE); +} + +void +space_map_histogram_add(space_map_t *sm, range_tree_t *rt, dmu_tx_t *tx) +{ + int idx = 0; + int i; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + ASSERT(dmu_tx_is_syncing(tx)); + VERIFY3U(space_map_object(sm), !=, 0); + + if (sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) + return; + + dmu_buf_will_dirty(sm->sm_dbuf, tx); + + ASSERT(space_map_histogram_verify(sm, rt)); + /* + * Transfer the content of the range tree histogram to the space + * map histogram. The space map histogram contains 32 buckets ranging + * between 2^sm_shift to 2^(32+sm_shift-1). The range tree, + * however, can represent ranges from 2^0 to 2^63. Since the space + * map only cares about allocatable blocks (minimum of sm_shift) we + * can safely ignore all ranges in the range tree smaller than sm_shift. + */ + for (i = sm->sm_shift; i < RANGE_TREE_HISTOGRAM_SIZE; i++) { + + /* + * Since the largest histogram bucket in the space map is + * 2^(32+sm_shift-1), we need to normalize the values in + * the range tree for any bucket larger than that size. For + * example given an sm_shift of 9, ranges larger than 2^40 + * would get normalized as if they were 1TB ranges. Assume + * the range tree had a count of 5 in the 2^44 (16TB) bucket, + * the calculation below would normalize this to 5 * 2^4 (16). + */ + ASSERT3U(i, >=, idx + sm->sm_shift); + sm->sm_phys->smp_histogram[idx] += + rt->rt_histogram[i] << (i - idx - sm->sm_shift); + + /* + * Increment the space map's index as long as we haven't + * reached the maximum bucket size. Accumulate all ranges + * larger than the max bucket size into the last bucket. + */ + if (idx < SPACE_MAP_HISTOGRAM_SIZE - 1) { + ASSERT3U(idx + sm->sm_shift, ==, i); + idx++; + ASSERT3U(idx, <, SPACE_MAP_HISTOGRAM_SIZE); + } + } +} + +uint64_t +space_map_entries(space_map_t *sm, range_tree_t *rt) +{ + avl_tree_t *t = &rt->rt_root; + range_seg_t *rs; + uint64_t size, entries; + + /* + * All space_maps always have a debug entry so account for it here. + */ + entries = 1; + + /* + * Traverse the range tree and calculate the number of space map + * entries that would be required to write out the range tree. + */ + for (rs = avl_first(t); rs != NULL; rs = AVL_NEXT(t, rs)) { + size = (rs->rs_end - rs->rs_start) >> sm->sm_shift; + entries += howmany(size, SM_RUN_MAX); + } + return (entries); +} + +/* + * Note: space_map_write() will drop sm_lock across dmu_write() calls. + */ +void +space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype, + dmu_tx_t *tx) +{ + objset_t *os = sm->sm_os; + spa_t *spa = dmu_objset_spa(os); + avl_tree_t *t = &rt->rt_root; + range_seg_t *rs; + uint64_t size, total, rt_space, nodes; + uint64_t *entry, *entry_map, *entry_map_end; + uint64_t expected_entries, actual_entries = 1; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + ASSERT(dsl_pool_sync_context(dmu_objset_pool(os))); + VERIFY3U(space_map_object(sm), !=, 0); + dmu_buf_will_dirty(sm->sm_dbuf, tx); + + /* + * This field is no longer necessary since the in-core space map + * now contains the object number but is maintained for backwards + * compatibility. + */ + sm->sm_phys->smp_object = sm->sm_object; + + if (range_tree_space(rt) == 0) { + VERIFY3U(sm->sm_object, ==, sm->sm_phys->smp_object); + return; + } + + if (maptype == SM_ALLOC) + sm->sm_phys->smp_alloc += range_tree_space(rt); + else + sm->sm_phys->smp_alloc -= range_tree_space(rt); + + expected_entries = space_map_entries(sm, rt); + + entry_map = vmem_alloc(sm->sm_blksz, KM_SLEEP); + entry_map_end = entry_map + (sm->sm_blksz / sizeof (uint64_t)); + entry = entry_map; + + *entry++ = SM_DEBUG_ENCODE(1) | + SM_DEBUG_ACTION_ENCODE(maptype) | + SM_DEBUG_SYNCPASS_ENCODE(spa_sync_pass(spa)) | + SM_DEBUG_TXG_ENCODE(dmu_tx_get_txg(tx)); + + total = 0; + nodes = avl_numnodes(&rt->rt_root); + rt_space = range_tree_space(rt); + for (rs = avl_first(t); rs != NULL; rs = AVL_NEXT(t, rs)) { + uint64_t start; + + size = (rs->rs_end - rs->rs_start) >> sm->sm_shift; + start = (rs->rs_start - sm->sm_start) >> sm->sm_shift; + + total += size << sm->sm_shift; + + while (size != 0) { + uint64_t run_len; + + run_len = MIN(size, SM_RUN_MAX); + + if (entry == entry_map_end) { + mutex_exit(rt->rt_lock); + dmu_write(os, space_map_object(sm), + sm->sm_phys->smp_objsize, sm->sm_blksz, + entry_map, tx); + mutex_enter(rt->rt_lock); + sm->sm_phys->smp_objsize += sm->sm_blksz; + entry = entry_map; + } + + *entry++ = SM_OFFSET_ENCODE(start) | + SM_TYPE_ENCODE(maptype) | + SM_RUN_ENCODE(run_len); + + start += run_len; + size -= run_len; + actual_entries++; + } + } + + if (entry != entry_map) { + size = (entry - entry_map) * sizeof (uint64_t); + mutex_exit(rt->rt_lock); + dmu_write(os, space_map_object(sm), sm->sm_phys->smp_objsize, + size, entry_map, tx); + mutex_enter(rt->rt_lock); + sm->sm_phys->smp_objsize += size; + } + ASSERT3U(expected_entries, ==, actual_entries); + + /* + * Ensure that the space_map's accounting wasn't changed + * while we were in the middle of writing it out. + */ + VERIFY3U(nodes, ==, avl_numnodes(&rt->rt_root)); + VERIFY3U(range_tree_space(rt), ==, rt_space); + VERIFY3U(range_tree_space(rt), ==, total); + + vmem_free(entry_map, sm->sm_blksz); +} + +static int +space_map_open_impl(space_map_t *sm) +{ + int error; + u_longlong_t blocks; + + error = dmu_bonus_hold(sm->sm_os, sm->sm_object, sm, &sm->sm_dbuf); + if (error) + return (error); + + dmu_object_size_from_db(sm->sm_dbuf, &sm->sm_blksz, &blocks); + sm->sm_phys = sm->sm_dbuf->db_data; + return (0); +} + +int +space_map_open(space_map_t **smp, objset_t *os, uint64_t object, + uint64_t start, uint64_t size, uint8_t shift, kmutex_t *lp) +{ + space_map_t *sm; + int error; + + ASSERT(*smp == NULL); + ASSERT(os != NULL); + ASSERT(object != 0); + + sm = kmem_alloc(sizeof (space_map_t), KM_SLEEP); + + sm->sm_start = start; + sm->sm_size = size; + sm->sm_shift = shift; + sm->sm_lock = lp; + sm->sm_os = os; + sm->sm_object = object; + sm->sm_length = 0; + sm->sm_alloc = 0; + sm->sm_blksz = 0; + sm->sm_dbuf = NULL; + sm->sm_phys = NULL; + + error = space_map_open_impl(sm); + if (error != 0) { + space_map_close(sm); + return (error); + } + + *smp = sm; + + return (0); +} + +void +space_map_close(space_map_t *sm) +{ + if (sm == NULL) + return; + + if (sm->sm_dbuf != NULL) + dmu_buf_rele(sm->sm_dbuf, sm); + sm->sm_dbuf = NULL; + sm->sm_phys = NULL; + + kmem_free(sm, sizeof (*sm)); +} + +void +space_map_truncate(space_map_t *sm, dmu_tx_t *tx) +{ + objset_t *os = sm->sm_os; + spa_t *spa = dmu_objset_spa(os); + dmu_object_info_t doi; + + ASSERT(dsl_pool_sync_context(dmu_objset_pool(os))); + ASSERT(dmu_tx_is_syncing(tx)); + VERIFY3U(dmu_tx_get_txg(tx), <=, spa_final_dirty_txg(spa)); + + dmu_object_info_from_db(sm->sm_dbuf, &doi); + + /* + * If the space map has the wrong bonus size (because + * SPA_FEATURE_SPACEMAP_HISTOGRAM has recently been enabled), or + * the wrong block size (because space_map_blksz has changed), + * free and re-allocate its object with the updated sizes. + * + * Otherwise, just truncate the current object. + */ + if ((spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM) && + doi.doi_bonus_size != sizeof (space_map_phys_t)) || + doi.doi_data_block_size != space_map_blksz) { + zfs_dbgmsg("txg %llu, spa %s, sm %p, reallocating " + "object[%llu]: old bonus %u, old blocksz %u", + dmu_tx_get_txg(tx), spa_name(spa), sm, sm->sm_object, + doi.doi_bonus_size, doi.doi_data_block_size); + + space_map_free(sm, tx); + dmu_buf_rele(sm->sm_dbuf, sm); + + sm->sm_object = space_map_alloc(sm->sm_os, tx); + VERIFY0(space_map_open_impl(sm)); + } else { + VERIFY0(dmu_free_range(os, space_map_object(sm), 0, -1ULL, tx)); + + /* + * If the spacemap is reallocated, its histogram + * will be reset. Do the same in the common case so that + * bugs related to the uncommon case do not go unnoticed. + */ + bzero(sm->sm_phys->smp_histogram, + sizeof (sm->sm_phys->smp_histogram)); + } + + dmu_buf_will_dirty(sm->sm_dbuf, tx); + sm->sm_phys->smp_objsize = 0; + sm->sm_phys->smp_alloc = 0; +} + +/* + * Update the in-core space_map allocation and length values. + */ +void +space_map_update(space_map_t *sm) +{ + if (sm == NULL) + return; + + ASSERT(MUTEX_HELD(sm->sm_lock)); + + sm->sm_alloc = sm->sm_phys->smp_alloc; + sm->sm_length = sm->sm_phys->smp_objsize; +} + +uint64_t +space_map_alloc(objset_t *os, dmu_tx_t *tx) +{ + spa_t *spa = dmu_objset_spa(os); + uint64_t object; + int bonuslen; + + if (spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM)) { + spa_feature_incr(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM, tx); + bonuslen = sizeof (space_map_phys_t); + ASSERT3U(bonuslen, <=, dmu_bonus_max()); + } else { + bonuslen = SPACE_MAP_SIZE_V0; + } + + object = dmu_object_alloc(os, + DMU_OT_SPACE_MAP, space_map_blksz, + DMU_OT_SPACE_MAP_HEADER, bonuslen, tx); + + return (object); +} + +void +space_map_free(space_map_t *sm, dmu_tx_t *tx) +{ + spa_t *spa; + + if (sm == NULL) + return; + + spa = dmu_objset_spa(sm->sm_os); + if (spa_feature_is_enabled(spa, SPA_FEATURE_SPACEMAP_HISTOGRAM)) { + dmu_object_info_t doi; + + dmu_object_info_from_db(sm->sm_dbuf, &doi); + if (doi.doi_bonus_size != SPACE_MAP_SIZE_V0) { + VERIFY(spa_feature_is_active(spa, + SPA_FEATURE_SPACEMAP_HISTOGRAM)); + spa_feature_decr(spa, + SPA_FEATURE_SPACEMAP_HISTOGRAM, tx); + } + } + + VERIFY3U(dmu_object_free(sm->sm_os, space_map_object(sm), tx), ==, 0); + sm->sm_object = 0; +} + +uint64_t +space_map_object(space_map_t *sm) +{ + return (sm != NULL ? sm->sm_object : 0); +} + +/* + * Returns the already synced, on-disk allocated space. + */ +uint64_t +space_map_allocated(space_map_t *sm) +{ + return (sm != NULL ? sm->sm_alloc : 0); +} + +/* + * Returns the already synced, on-disk length; + */ +uint64_t +space_map_length(space_map_t *sm) +{ + return (sm != NULL ? sm->sm_length : 0); +} + +/* + * Returns the allocated space that is currently syncing. + */ +int64_t +space_map_alloc_delta(space_map_t *sm) +{ + if (sm == NULL) + return (0); + ASSERT(sm->sm_dbuf != NULL); + return (sm->sm_phys->smp_alloc - space_map_allocated(sm)); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/space_reftree.c +++ linux-aws-4.15.0/zfs/module/zfs/space_reftree.c @@ -0,0 +1,153 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include + +/* + * Space reference trees. + * + * A range tree is a collection of integers. Every integer is either + * in the tree, or it's not. A space reference tree generalizes + * the idea: it allows its members to have arbitrary reference counts, + * as opposed to the implicit reference count of 0 or 1 in a range tree. + * This representation comes in handy when computing the union or + * intersection of multiple space maps. For example, the union of + * N range trees is the subset of the reference tree with refcnt >= 1. + * The intersection of N range trees is the subset with refcnt >= N. + * + * [It's very much like a Fourier transform. Unions and intersections + * are hard to perform in the 'range tree domain', so we convert the trees + * into the 'reference count domain', where it's trivial, then invert.] + * + * vdev_dtl_reassess() uses computations of this form to determine + * DTL_MISSING and DTL_OUTAGE for interior vdevs -- e.g. a RAID-Z vdev + * has an outage wherever refcnt >= vdev_nparity + 1, and a mirror vdev + * has an outage wherever refcnt >= vdev_children. + */ +static int +space_reftree_compare(const void *x1, const void *x2) +{ + const space_ref_t *sr1 = (const space_ref_t *)x1; + const space_ref_t *sr2 = (const space_ref_t *)x2; + + int cmp = AVL_CMP(sr1->sr_offset, sr2->sr_offset); + if (likely(cmp)) + return (cmp); + + return (AVL_PCMP(sr1, sr2)); +} + +void +space_reftree_create(avl_tree_t *t) +{ + avl_create(t, space_reftree_compare, + sizeof (space_ref_t), offsetof(space_ref_t, sr_node)); +} + +void +space_reftree_destroy(avl_tree_t *t) +{ + space_ref_t *sr; + void *cookie = NULL; + + while ((sr = avl_destroy_nodes(t, &cookie)) != NULL) + kmem_free(sr, sizeof (*sr)); + + avl_destroy(t); +} + +static void +space_reftree_add_node(avl_tree_t *t, uint64_t offset, int64_t refcnt) +{ + space_ref_t *sr; + + sr = kmem_alloc(sizeof (*sr), KM_SLEEP); + sr->sr_offset = offset; + sr->sr_refcnt = refcnt; + + avl_add(t, sr); +} + +void +space_reftree_add_seg(avl_tree_t *t, uint64_t start, uint64_t end, + int64_t refcnt) +{ + space_reftree_add_node(t, start, refcnt); + space_reftree_add_node(t, end, -refcnt); +} + +/* + * Convert (or add) a range tree into a reference tree. + */ +void +space_reftree_add_map(avl_tree_t *t, range_tree_t *rt, int64_t refcnt) +{ + range_seg_t *rs; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + + for (rs = avl_first(&rt->rt_root); rs; rs = AVL_NEXT(&rt->rt_root, rs)) + space_reftree_add_seg(t, rs->rs_start, rs->rs_end, refcnt); +} + +/* + * Convert a reference tree into a range tree. The range tree will contain + * all members of the reference tree for which refcnt >= minref. + */ +void +space_reftree_generate_map(avl_tree_t *t, range_tree_t *rt, int64_t minref) +{ + uint64_t start = -1ULL; + int64_t refcnt = 0; + space_ref_t *sr; + + ASSERT(MUTEX_HELD(rt->rt_lock)); + + range_tree_vacate(rt, NULL, NULL); + + for (sr = avl_first(t); sr != NULL; sr = AVL_NEXT(t, sr)) { + refcnt += sr->sr_refcnt; + if (refcnt >= minref) { + if (start == -1ULL) { + start = sr->sr_offset; + } + } else { + if (start != -1ULL) { + uint64_t end = sr->sr_offset; + ASSERT(start <= end); + if (end > start) + range_tree_add(rt, start, end - start); + start = -1ULL; + } + } + } + ASSERT(refcnt == 0); + ASSERT(start == -1ULL); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/trace.c +++ linux-aws-4.15.0/zfs/module/zfs/trace.c @@ -0,0 +1,51 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Each Linux tracepoints subsystem must define CREATE_TRACE_POINTS in one + * (and only one) C file, so this dummy file exists for that purpose. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CREATE_TRACE_POINTS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include --- linux-aws-4.15.0.orig/zfs/module/zfs/txg.c +++ linux-aws-4.15.0/zfs/module/zfs/txg.c @@ -0,0 +1,953 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Portions Copyright 2011 Martin Matuska + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ZFS Transaction Groups + * ---------------------- + * + * ZFS transaction groups are, as the name implies, groups of transactions + * that act on persistent state. ZFS asserts consistency at the granularity of + * these transaction groups. Each successive transaction group (txg) is + * assigned a 64-bit consecutive identifier. There are three active + * transaction group states: open, quiescing, or syncing. At any given time, + * there may be an active txg associated with each state; each active txg may + * either be processing, or blocked waiting to enter the next state. There may + * be up to three active txgs, and there is always a txg in the open state + * (though it may be blocked waiting to enter the quiescing state). In broad + * strokes, transactions -- operations that change in-memory structures -- are + * accepted into the txg in the open state, and are completed while the txg is + * in the open or quiescing states. The accumulated changes are written to + * disk in the syncing state. + * + * Open + * + * When a new txg becomes active, it first enters the open state. New + * transactions -- updates to in-memory structures -- are assigned to the + * currently open txg. There is always a txg in the open state so that ZFS can + * accept new changes (though the txg may refuse new changes if it has hit + * some limit). ZFS advances the open txg to the next state for a variety of + * reasons such as it hitting a time or size threshold, or the execution of an + * administrative action that must be completed in the syncing state. + * + * Quiescing + * + * After a txg exits the open state, it enters the quiescing state. The + * quiescing state is intended to provide a buffer between accepting new + * transactions in the open state and writing them out to stable storage in + * the syncing state. While quiescing, transactions can continue their + * operation without delaying either of the other states. Typically, a txg is + * in the quiescing state very briefly since the operations are bounded by + * software latencies rather than, say, slower I/O latencies. After all + * transactions complete, the txg is ready to enter the next state. + * + * Syncing + * + * In the syncing state, the in-memory state built up during the open and (to + * a lesser degree) the quiescing states is written to stable storage. The + * process of writing out modified data can, in turn modify more data. For + * example when we write new blocks, we need to allocate space for them; those + * allocations modify metadata (space maps)... which themselves must be + * written to stable storage. During the sync state, ZFS iterates, writing out + * data until it converges and all in-memory changes have been written out. + * The first such pass is the largest as it encompasses all the modified user + * data (as opposed to filesystem metadata). Subsequent passes typically have + * far less data to write as they consist exclusively of filesystem metadata. + * + * To ensure convergence, after a certain number of passes ZFS begins + * overwriting locations on stable storage that had been allocated earlier in + * the syncing state (and subsequently freed). ZFS usually allocates new + * blocks to optimize for large, continuous, writes. For the syncing state to + * converge however it must complete a pass where no new blocks are allocated + * since each allocation requires a modification of persistent metadata. + * Further, to hasten convergence, after a prescribed number of passes, ZFS + * also defers frees, and stops compressing. + * + * In addition to writing out user data, we must also execute synctasks during + * the syncing context. A synctask is the mechanism by which some + * administrative activities work such as creating and destroying snapshots or + * datasets. Note that when a synctask is initiated it enters the open txg, + * and ZFS then pushes that txg as quickly as possible to completion of the + * syncing state in order to reduce the latency of the administrative + * activity. To complete the syncing state, ZFS writes out a new uberblock, + * the root of the tree of blocks that comprise all state stored on the ZFS + * pool. Finally, if there is a quiesced txg waiting, we signal that it can + * now transition to the syncing state. + */ + +static void txg_sync_thread(dsl_pool_t *dp); +static void txg_quiesce_thread(dsl_pool_t *dp); + +int zfs_txg_timeout = 5; /* max seconds worth of delta per txg */ + +/* + * Prepare the txg subsystem. + */ +void +txg_init(dsl_pool_t *dp, uint64_t txg) +{ + tx_state_t *tx = &dp->dp_tx; + int c; + bzero(tx, sizeof (tx_state_t)); + + tx->tx_cpu = vmem_zalloc(max_ncpus * sizeof (tx_cpu_t), KM_SLEEP); + + for (c = 0; c < max_ncpus; c++) { + int i; + + mutex_init(&tx->tx_cpu[c].tc_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&tx->tx_cpu[c].tc_open_lock, NULL, MUTEX_NOLOCKDEP, + NULL); + for (i = 0; i < TXG_SIZE; i++) { + cv_init(&tx->tx_cpu[c].tc_cv[i], NULL, CV_DEFAULT, + NULL); + list_create(&tx->tx_cpu[c].tc_callbacks[i], + sizeof (dmu_tx_callback_t), + offsetof(dmu_tx_callback_t, dcb_node)); + } + } + + mutex_init(&tx->tx_sync_lock, NULL, MUTEX_DEFAULT, NULL); + + cv_init(&tx->tx_sync_more_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_sync_done_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_quiesce_more_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_quiesce_done_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_exit_cv, NULL, CV_DEFAULT, NULL); + + tx->tx_open_txg = txg; +} + +/* + * Close down the txg subsystem. + */ +void +txg_fini(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + int c; + + ASSERT(tx->tx_threads == 0); + + mutex_destroy(&tx->tx_sync_lock); + + cv_destroy(&tx->tx_sync_more_cv); + cv_destroy(&tx->tx_sync_done_cv); + cv_destroy(&tx->tx_quiesce_more_cv); + cv_destroy(&tx->tx_quiesce_done_cv); + cv_destroy(&tx->tx_exit_cv); + + for (c = 0; c < max_ncpus; c++) { + int i; + + mutex_destroy(&tx->tx_cpu[c].tc_open_lock); + mutex_destroy(&tx->tx_cpu[c].tc_lock); + for (i = 0; i < TXG_SIZE; i++) { + cv_destroy(&tx->tx_cpu[c].tc_cv[i]); + list_destroy(&tx->tx_cpu[c].tc_callbacks[i]); + } + } + + if (tx->tx_commit_cb_taskq != NULL) + taskq_destroy(tx->tx_commit_cb_taskq); + + vmem_free(tx->tx_cpu, max_ncpus * sizeof (tx_cpu_t)); + + bzero(tx, sizeof (tx_state_t)); +} + +/* + * Start syncing transaction groups. + */ +void +txg_sync_start(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + + mutex_enter(&tx->tx_sync_lock); + + dprintf("pool %p\n", dp); + + ASSERT(tx->tx_threads == 0); + + tx->tx_threads = 2; + + tx->tx_quiesce_thread = thread_create(NULL, 0, txg_quiesce_thread, + dp, 0, &p0, TS_RUN, defclsyspri); + + /* + * The sync thread can need a larger-than-default stack size on + * 32-bit x86. This is due in part to nested pools and + * scrub_visitbp() recursion. + */ + tx->tx_sync_thread = thread_create(NULL, 0, txg_sync_thread, + dp, 0, &p0, TS_RUN, defclsyspri); + + mutex_exit(&tx->tx_sync_lock); +} + +static void +txg_thread_enter(tx_state_t *tx, callb_cpr_t *cpr) +{ + CALLB_CPR_INIT(cpr, &tx->tx_sync_lock, callb_generic_cpr, FTAG); + mutex_enter(&tx->tx_sync_lock); +} + +static void +txg_thread_exit(tx_state_t *tx, callb_cpr_t *cpr, kthread_t **tpp) +{ + ASSERT(*tpp != NULL); + *tpp = NULL; + tx->tx_threads--; + cv_broadcast(&tx->tx_exit_cv); + CALLB_CPR_EXIT(cpr); /* drops &tx->tx_sync_lock */ + thread_exit(); +} + +static void +txg_thread_wait(tx_state_t *tx, callb_cpr_t *cpr, kcondvar_t *cv, clock_t time) +{ + CALLB_CPR_SAFE_BEGIN(cpr); + + if (time) + (void) cv_timedwait_sig(cv, &tx->tx_sync_lock, + ddi_get_lbolt() + time); + else + cv_wait_sig(cv, &tx->tx_sync_lock); + + CALLB_CPR_SAFE_END(cpr, &tx->tx_sync_lock); +} + +/* + * Stop syncing transaction groups. + */ +void +txg_sync_stop(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + + dprintf("pool %p\n", dp); + /* + * Finish off any work in progress. + */ + ASSERT(tx->tx_threads == 2); + + /* + * We need to ensure that we've vacated the deferred space_maps. + */ + txg_wait_synced(dp, tx->tx_open_txg + TXG_DEFER_SIZE); + + /* + * Wake all sync threads and wait for them to die. + */ + mutex_enter(&tx->tx_sync_lock); + + ASSERT(tx->tx_threads == 2); + + tx->tx_exiting = 1; + + cv_broadcast(&tx->tx_quiesce_more_cv); + cv_broadcast(&tx->tx_quiesce_done_cv); + cv_broadcast(&tx->tx_sync_more_cv); + + while (tx->tx_threads != 0) + cv_wait(&tx->tx_exit_cv, &tx->tx_sync_lock); + + tx->tx_exiting = 0; + + mutex_exit(&tx->tx_sync_lock); +} + +uint64_t +txg_hold_open(dsl_pool_t *dp, txg_handle_t *th) +{ + tx_state_t *tx = &dp->dp_tx; + tx_cpu_t *tc; + uint64_t txg; + + /* + * It appears the processor id is simply used as a "random" + * number to index into the array, and there isn't any other + * significance to the chosen tx_cpu. Because.. Why not use + * the current cpu to index into the array? + */ + kpreempt_disable(); + tc = &tx->tx_cpu[CPU_SEQID]; + kpreempt_enable(); + + mutex_enter(&tc->tc_open_lock); + txg = tx->tx_open_txg; + + mutex_enter(&tc->tc_lock); + tc->tc_count[txg & TXG_MASK]++; + mutex_exit(&tc->tc_lock); + + th->th_cpu = tc; + th->th_txg = txg; + + return (txg); +} + +void +txg_rele_to_quiesce(txg_handle_t *th) +{ + tx_cpu_t *tc = th->th_cpu; + + ASSERT(!MUTEX_HELD(&tc->tc_lock)); + mutex_exit(&tc->tc_open_lock); +} + +void +txg_register_callbacks(txg_handle_t *th, list_t *tx_callbacks) +{ + tx_cpu_t *tc = th->th_cpu; + int g = th->th_txg & TXG_MASK; + + mutex_enter(&tc->tc_lock); + list_move_tail(&tc->tc_callbacks[g], tx_callbacks); + mutex_exit(&tc->tc_lock); +} + +void +txg_rele_to_sync(txg_handle_t *th) +{ + tx_cpu_t *tc = th->th_cpu; + int g = th->th_txg & TXG_MASK; + + mutex_enter(&tc->tc_lock); + ASSERT(tc->tc_count[g] != 0); + if (--tc->tc_count[g] == 0) + cv_broadcast(&tc->tc_cv[g]); + mutex_exit(&tc->tc_lock); + + th->th_cpu = NULL; /* defensive */ +} + +/* + * Blocks until all transactions in the group are committed. + * + * On return, the transaction group has reached a stable state in which it can + * then be passed off to the syncing context. + */ +static void +txg_quiesce(dsl_pool_t *dp, uint64_t txg) +{ + tx_state_t *tx = &dp->dp_tx; + uint64_t tx_open_time; + int g = txg & TXG_MASK; + int c; + + /* + * Grab all tc_open_locks so nobody else can get into this txg. + */ + for (c = 0; c < max_ncpus; c++) + mutex_enter(&tx->tx_cpu[c].tc_open_lock); + + ASSERT(txg == tx->tx_open_txg); + tx->tx_open_txg++; + tx->tx_open_time = tx_open_time = gethrtime(); + + DTRACE_PROBE2(txg__quiescing, dsl_pool_t *, dp, uint64_t, txg); + DTRACE_PROBE2(txg__opened, dsl_pool_t *, dp, uint64_t, tx->tx_open_txg); + + /* + * Now that we've incremented tx_open_txg, we can let threads + * enter the next transaction group. + */ + for (c = 0; c < max_ncpus; c++) + mutex_exit(&tx->tx_cpu[c].tc_open_lock); + + spa_txg_history_set(dp->dp_spa, txg, TXG_STATE_OPEN, tx_open_time); + spa_txg_history_add(dp->dp_spa, txg + 1, tx_open_time); + + /* + * Quiesce the transaction group by waiting for everyone to txg_exit(). + */ + for (c = 0; c < max_ncpus; c++) { + tx_cpu_t *tc = &tx->tx_cpu[c]; + mutex_enter(&tc->tc_lock); + while (tc->tc_count[g] != 0) + cv_wait(&tc->tc_cv[g], &tc->tc_lock); + mutex_exit(&tc->tc_lock); + } + + spa_txg_history_set(dp->dp_spa, txg, TXG_STATE_QUIESCED, gethrtime()); +} + +static void +txg_do_callbacks(list_t *cb_list) +{ + dmu_tx_do_callbacks(cb_list, 0); + + list_destroy(cb_list); + + kmem_free(cb_list, sizeof (list_t)); +} + +/* + * Dispatch the commit callbacks registered on this txg to worker threads. + * + * If no callbacks are registered for a given TXG, nothing happens. + * This function creates a taskq for the associated pool, if needed. + */ +static void +txg_dispatch_callbacks(dsl_pool_t *dp, uint64_t txg) +{ + int c; + tx_state_t *tx = &dp->dp_tx; + list_t *cb_list; + + for (c = 0; c < max_ncpus; c++) { + tx_cpu_t *tc = &tx->tx_cpu[c]; + /* + * No need to lock tx_cpu_t at this point, since this can + * only be called once a txg has been synced. + */ + + int g = txg & TXG_MASK; + + if (list_is_empty(&tc->tc_callbacks[g])) + continue; + + if (tx->tx_commit_cb_taskq == NULL) { + /* + * Commit callback taskq hasn't been created yet. + */ + tx->tx_commit_cb_taskq = taskq_create("tx_commit_cb", + max_ncpus, defclsyspri, max_ncpus, max_ncpus * 2, + TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + } + + cb_list = kmem_alloc(sizeof (list_t), KM_SLEEP); + list_create(cb_list, sizeof (dmu_tx_callback_t), + offsetof(dmu_tx_callback_t, dcb_node)); + + list_move_tail(cb_list, &tc->tc_callbacks[g]); + + (void) taskq_dispatch(tx->tx_commit_cb_taskq, (task_func_t *) + txg_do_callbacks, cb_list, TQ_SLEEP); + } +} + +/* + * Wait for pending commit callbacks of already-synced transactions to finish + * processing. + * Calling this function from within a commit callback will deadlock. + */ +void +txg_wait_callbacks(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + + if (tx->tx_commit_cb_taskq != NULL) + taskq_wait_outstanding(tx->tx_commit_cb_taskq, 0); +} + +static void +txg_sync_thread(dsl_pool_t *dp) +{ + spa_t *spa = dp->dp_spa; + tx_state_t *tx = &dp->dp_tx; + callb_cpr_t cpr; + clock_t start, delta; + + (void) spl_fstrans_mark(); + txg_thread_enter(tx, &cpr); + + start = delta = 0; + for (;;) { + clock_t timeout = zfs_txg_timeout * hz; + clock_t timer; + uint64_t txg; + txg_stat_t *ts; + + /* + * We sync when we're scanning, there's someone waiting + * on us, or the quiesce thread has handed off a txg to + * us, or we have reached our timeout. + */ + timer = (delta >= timeout ? 0 : timeout - delta); + while (!dsl_scan_active(dp->dp_scan) && + !tx->tx_exiting && timer > 0 && + tx->tx_synced_txg >= tx->tx_sync_txg_waiting && + tx->tx_quiesced_txg == 0 && + dp->dp_dirty_total < zfs_dirty_data_sync) { + dprintf("waiting; tx_synced=%llu waiting=%llu dp=%p\n", + tx->tx_synced_txg, tx->tx_sync_txg_waiting, dp); + txg_thread_wait(tx, &cpr, &tx->tx_sync_more_cv, timer); + delta = ddi_get_lbolt() - start; + timer = (delta > timeout ? 0 : timeout - delta); + } + + /* + * Wait until the quiesce thread hands off a txg to us, + * prompting it to do so if necessary. + */ + while (!tx->tx_exiting && tx->tx_quiesced_txg == 0) { + if (tx->tx_quiesce_txg_waiting < tx->tx_open_txg+1) + tx->tx_quiesce_txg_waiting = tx->tx_open_txg+1; + cv_broadcast(&tx->tx_quiesce_more_cv); + txg_thread_wait(tx, &cpr, &tx->tx_quiesce_done_cv, 0); + } + + if (tx->tx_exiting) + txg_thread_exit(tx, &cpr, &tx->tx_sync_thread); + + /* + * Consume the quiesced txg which has been handed off to + * us. This may cause the quiescing thread to now be + * able to quiesce another txg, so we must signal it. + */ + txg = tx->tx_quiesced_txg; + tx->tx_quiesced_txg = 0; + tx->tx_syncing_txg = txg; + DTRACE_PROBE2(txg__syncing, dsl_pool_t *, dp, uint64_t, txg); + ts = spa_txg_history_init_io(spa, txg, dp); + cv_broadcast(&tx->tx_quiesce_more_cv); + + dprintf("txg=%llu quiesce_txg=%llu sync_txg=%llu\n", + txg, tx->tx_quiesce_txg_waiting, tx->tx_sync_txg_waiting); + mutex_exit(&tx->tx_sync_lock); + + start = ddi_get_lbolt(); + spa_sync(spa, txg); + delta = ddi_get_lbolt() - start; + + mutex_enter(&tx->tx_sync_lock); + tx->tx_synced_txg = txg; + tx->tx_syncing_txg = 0; + DTRACE_PROBE2(txg__synced, dsl_pool_t *, dp, uint64_t, txg); + spa_txg_history_fini_io(spa, ts); + cv_broadcast(&tx->tx_sync_done_cv); + + /* + * Dispatch commit callbacks to worker threads. + */ + txg_dispatch_callbacks(dp, txg); + } +} + +static void +txg_quiesce_thread(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + callb_cpr_t cpr; + + txg_thread_enter(tx, &cpr); + + for (;;) { + uint64_t txg; + + /* + * We quiesce when there's someone waiting on us. + * However, we can only have one txg in "quiescing" or + * "quiesced, waiting to sync" state. So we wait until + * the "quiesced, waiting to sync" txg has been consumed + * by the sync thread. + */ + while (!tx->tx_exiting && + (tx->tx_open_txg >= tx->tx_quiesce_txg_waiting || + tx->tx_quiesced_txg != 0)) + txg_thread_wait(tx, &cpr, &tx->tx_quiesce_more_cv, 0); + + if (tx->tx_exiting) + txg_thread_exit(tx, &cpr, &tx->tx_quiesce_thread); + + txg = tx->tx_open_txg; + dprintf("txg=%llu quiesce_txg=%llu sync_txg=%llu\n", + txg, tx->tx_quiesce_txg_waiting, + tx->tx_sync_txg_waiting); + mutex_exit(&tx->tx_sync_lock); + txg_quiesce(dp, txg); + mutex_enter(&tx->tx_sync_lock); + + /* + * Hand this txg off to the sync thread. + */ + dprintf("quiesce done, handing off txg %llu\n", txg); + tx->tx_quiesced_txg = txg; + DTRACE_PROBE2(txg__quiesced, dsl_pool_t *, dp, uint64_t, txg); + cv_broadcast(&tx->tx_sync_more_cv); + cv_broadcast(&tx->tx_quiesce_done_cv); + } +} + +/* + * Delay this thread by delay nanoseconds if we are still in the open + * transaction group and there is already a waiting txg quiesing or quiesced. + * Abort the delay if this txg stalls or enters the quiesing state. + */ +void +txg_delay(dsl_pool_t *dp, uint64_t txg, hrtime_t delay, hrtime_t resolution) +{ + tx_state_t *tx = &dp->dp_tx; + hrtime_t start = gethrtime(); + + /* don't delay if this txg could transition to quiescing immediately */ + if (tx->tx_open_txg > txg || + tx->tx_syncing_txg == txg-1 || tx->tx_synced_txg == txg-1) + return; + + mutex_enter(&tx->tx_sync_lock); + if (tx->tx_open_txg > txg || tx->tx_synced_txg == txg-1) { + mutex_exit(&tx->tx_sync_lock); + return; + } + + while (gethrtime() - start < delay && + tx->tx_syncing_txg < txg-1 && !txg_stalled(dp)) { + (void) cv_timedwait_hires(&tx->tx_quiesce_more_cv, + &tx->tx_sync_lock, delay, resolution, 0); + } + + DMU_TX_STAT_BUMP(dmu_tx_delay); + + mutex_exit(&tx->tx_sync_lock); +} + +void +txg_wait_synced(dsl_pool_t *dp, uint64_t txg) +{ + tx_state_t *tx = &dp->dp_tx; + + ASSERT(!dsl_pool_config_held(dp)); + + mutex_enter(&tx->tx_sync_lock); + ASSERT(tx->tx_threads == 2); + if (txg == 0) + txg = tx->tx_open_txg + TXG_DEFER_SIZE; + if (tx->tx_sync_txg_waiting < txg) + tx->tx_sync_txg_waiting = txg; + dprintf("txg=%llu quiesce_txg=%llu sync_txg=%llu\n", + txg, tx->tx_quiesce_txg_waiting, tx->tx_sync_txg_waiting); + while (tx->tx_synced_txg < txg) { + dprintf("broadcasting sync more " + "tx_synced=%llu waiting=%llu dp=%p\n", + tx->tx_synced_txg, tx->tx_sync_txg_waiting, dp); + cv_broadcast(&tx->tx_sync_more_cv); + cv_wait(&tx->tx_sync_done_cv, &tx->tx_sync_lock); + } + mutex_exit(&tx->tx_sync_lock); +} + +void +txg_wait_open(dsl_pool_t *dp, uint64_t txg) +{ + tx_state_t *tx = &dp->dp_tx; + + ASSERT(!dsl_pool_config_held(dp)); + + mutex_enter(&tx->tx_sync_lock); + ASSERT(tx->tx_threads == 2); + if (txg == 0) + txg = tx->tx_open_txg + 1; + if (tx->tx_quiesce_txg_waiting < txg) + tx->tx_quiesce_txg_waiting = txg; + dprintf("txg=%llu quiesce_txg=%llu sync_txg=%llu\n", + txg, tx->tx_quiesce_txg_waiting, tx->tx_sync_txg_waiting); + while (tx->tx_open_txg < txg) { + cv_broadcast(&tx->tx_quiesce_more_cv); + cv_wait(&tx->tx_quiesce_done_cv, &tx->tx_sync_lock); + } + mutex_exit(&tx->tx_sync_lock); +} + +/* + * If there isn't a txg syncing or in the pipeline, push another txg through + * the pipeline by queiscing the open txg. + */ +void +txg_kick(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + + ASSERT(!dsl_pool_config_held(dp)); + + mutex_enter(&tx->tx_sync_lock); + if (tx->tx_syncing_txg == 0 && + tx->tx_quiesce_txg_waiting <= tx->tx_open_txg && + tx->tx_sync_txg_waiting <= tx->tx_synced_txg && + tx->tx_quiesced_txg <= tx->tx_synced_txg) { + tx->tx_quiesce_txg_waiting = tx->tx_open_txg + 1; + cv_broadcast(&tx->tx_quiesce_more_cv); + } + mutex_exit(&tx->tx_sync_lock); +} + +boolean_t +txg_stalled(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + return (tx->tx_quiesce_txg_waiting > tx->tx_open_txg); +} + +boolean_t +txg_sync_waiting(dsl_pool_t *dp) +{ + tx_state_t *tx = &dp->dp_tx; + + return (tx->tx_syncing_txg <= tx->tx_sync_txg_waiting || + tx->tx_quiesced_txg != 0); +} + +/* + * Verify that this txg is active (open, quiescing, syncing). Non-active + * txg's should not be manipulated. + */ +void +txg_verify(spa_t *spa, uint64_t txg) +{ + ASSERTV(dsl_pool_t *dp = spa_get_dsl(spa)); + if (txg <= TXG_INITIAL || txg == ZILTEST_TXG) + return; + ASSERT3U(txg, <=, dp->dp_tx.tx_open_txg); + ASSERT3U(txg, >=, dp->dp_tx.tx_synced_txg); + ASSERT3U(txg, >=, dp->dp_tx.tx_open_txg - TXG_CONCURRENT_STATES); +} + +/* + * Per-txg object lists. + */ +void +txg_list_create(txg_list_t *tl, spa_t *spa, size_t offset) +{ + int t; + + mutex_init(&tl->tl_lock, NULL, MUTEX_DEFAULT, NULL); + + tl->tl_offset = offset; + tl->tl_spa = spa; + + for (t = 0; t < TXG_SIZE; t++) + tl->tl_head[t] = NULL; +} + +void +txg_list_destroy(txg_list_t *tl) +{ + int t; + + for (t = 0; t < TXG_SIZE; t++) + ASSERT(txg_list_empty(tl, t)); + + mutex_destroy(&tl->tl_lock); +} + +boolean_t +txg_list_empty(txg_list_t *tl, uint64_t txg) +{ + txg_verify(tl->tl_spa, txg); + return (tl->tl_head[txg & TXG_MASK] == NULL); +} + +/* + * Returns true if all txg lists are empty. + * + * Warning: this is inherently racy (an item could be added immediately + * after this function returns). We don't bother with the lock because + * it wouldn't change the semantics. + */ +boolean_t +txg_all_lists_empty(txg_list_t *tl) +{ + int i; + + for (i = 0; i < TXG_SIZE; i++) { + if (!txg_list_empty(tl, i)) { + return (B_FALSE); + } + } + return (B_TRUE); +} + +/* + * Add an entry to the list (unless it's already on the list). + * Returns B_TRUE if it was actually added. + */ +boolean_t +txg_list_add(txg_list_t *tl, void *p, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset); + boolean_t add; + + txg_verify(tl->tl_spa, txg); + mutex_enter(&tl->tl_lock); + add = (tn->tn_member[t] == 0); + if (add) { + tn->tn_member[t] = 1; + tn->tn_next[t] = tl->tl_head[t]; + tl->tl_head[t] = tn; + } + mutex_exit(&tl->tl_lock); + + return (add); +} + +/* + * Add an entry to the end of the list, unless it's already on the list. + * (walks list to find end) + * Returns B_TRUE if it was actually added. + */ +boolean_t +txg_list_add_tail(txg_list_t *tl, void *p, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset); + boolean_t add; + + txg_verify(tl->tl_spa, txg); + mutex_enter(&tl->tl_lock); + add = (tn->tn_member[t] == 0); + if (add) { + txg_node_t **tp; + + for (tp = &tl->tl_head[t]; *tp != NULL; tp = &(*tp)->tn_next[t]) + continue; + + tn->tn_member[t] = 1; + tn->tn_next[t] = NULL; + *tp = tn; + } + mutex_exit(&tl->tl_lock); + + return (add); +} + +/* + * Remove the head of the list and return it. + */ +void * +txg_list_remove(txg_list_t *tl, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn; + void *p = NULL; + + txg_verify(tl->tl_spa, txg); + mutex_enter(&tl->tl_lock); + if ((tn = tl->tl_head[t]) != NULL) { + p = (char *)tn - tl->tl_offset; + tl->tl_head[t] = tn->tn_next[t]; + tn->tn_next[t] = NULL; + tn->tn_member[t] = 0; + } + mutex_exit(&tl->tl_lock); + + return (p); +} + +/* + * Remove a specific item from the list and return it. + */ +void * +txg_list_remove_this(txg_list_t *tl, void *p, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn, **tp; + + txg_verify(tl->tl_spa, txg); + mutex_enter(&tl->tl_lock); + + for (tp = &tl->tl_head[t]; (tn = *tp) != NULL; tp = &tn->tn_next[t]) { + if ((char *)tn - tl->tl_offset == p) { + *tp = tn->tn_next[t]; + tn->tn_next[t] = NULL; + tn->tn_member[t] = 0; + mutex_exit(&tl->tl_lock); + return (p); + } + } + + mutex_exit(&tl->tl_lock); + + return (NULL); +} + +boolean_t +txg_list_member(txg_list_t *tl, void *p, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset); + + txg_verify(tl->tl_spa, txg); + return (tn->tn_member[t] != 0); +} + +/* + * Walk a txg list -- only safe if you know it's not changing. + */ +void * +txg_list_head(txg_list_t *tl, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn = tl->tl_head[t]; + + txg_verify(tl->tl_spa, txg); + return (tn == NULL ? NULL : (char *)tn - tl->tl_offset); +} + +void * +txg_list_next(txg_list_t *tl, void *p, uint64_t txg) +{ + int t = txg & TXG_MASK; + txg_node_t *tn = (txg_node_t *)((char *)p + tl->tl_offset); + + txg_verify(tl->tl_spa, txg); + tn = tn->tn_next[t]; + + return (tn == NULL ? NULL : (char *)tn - tl->tl_offset); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(txg_init); +EXPORT_SYMBOL(txg_fini); +EXPORT_SYMBOL(txg_sync_start); +EXPORT_SYMBOL(txg_sync_stop); +EXPORT_SYMBOL(txg_hold_open); +EXPORT_SYMBOL(txg_rele_to_quiesce); +EXPORT_SYMBOL(txg_rele_to_sync); +EXPORT_SYMBOL(txg_register_callbacks); +EXPORT_SYMBOL(txg_delay); +EXPORT_SYMBOL(txg_wait_synced); +EXPORT_SYMBOL(txg_wait_open); +EXPORT_SYMBOL(txg_wait_callbacks); +EXPORT_SYMBOL(txg_stalled); +EXPORT_SYMBOL(txg_sync_waiting); + +module_param(zfs_txg_timeout, int, 0644); +MODULE_PARM_DESC(zfs_txg_timeout, "Max seconds worth of delta per txg"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/uberblock.c +++ linux-aws-4.15.0/zfs/module/zfs/uberblock.c @@ -0,0 +1,65 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. + */ + +#include +#include +#include + +int +uberblock_verify(uberblock_t *ub) +{ + if (ub->ub_magic == BSWAP_64((uint64_t)UBERBLOCK_MAGIC)) + byteswap_uint64_array(ub, sizeof (uberblock_t)); + + if (ub->ub_magic != UBERBLOCK_MAGIC) + return (SET_ERROR(EINVAL)); + + return (0); +} + +/* + * Update the uberblock and return TRUE if anything changed in this + * transaction group. + */ +boolean_t +uberblock_update(uberblock_t *ub, vdev_t *rvd, uint64_t txg, uint64_t mmp_delay) +{ + ASSERT(ub->ub_txg < txg); + + /* + * We explicitly do not set ub_version here, so that older versions + * continue to be written with the previous uberblock version. + */ + ub->ub_magic = UBERBLOCK_MAGIC; + ub->ub_txg = txg; + ub->ub_guid_sum = rvd->vdev_guid_sum; + ub->ub_timestamp = gethrestime_sec(); + ub->ub_software_version = SPA_VERSION; + ub->ub_mmp_magic = MMP_MAGIC; + ub->ub_mmp_delay = spa_multihost(rvd->vdev_spa) ? mmp_delay : 0; + ub->ub_mmp_seq = 0; + + return (ub->ub_rootbp.blk_birth == txg); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/unique.c +++ linux-aws-4.15.0/zfs/module/zfs/unique.c @@ -0,0 +1,112 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + + +#include +#include +#include + +static avl_tree_t unique_avl; +static kmutex_t unique_mtx; + +typedef struct unique { + avl_node_t un_link; + uint64_t un_value; +} unique_t; + +#define UNIQUE_MASK ((1ULL << UNIQUE_BITS) - 1) + +static int +unique_compare(const void *a, const void *b) +{ + const unique_t *una = (const unique_t *)a; + const unique_t *unb = (const unique_t *)b; + + return (AVL_CMP(una->un_value, unb->un_value)); +} + +void +unique_init(void) +{ + avl_create(&unique_avl, unique_compare, + sizeof (unique_t), offsetof(unique_t, un_link)); + mutex_init(&unique_mtx, NULL, MUTEX_DEFAULT, NULL); +} + +void +unique_fini(void) +{ + avl_destroy(&unique_avl); + mutex_destroy(&unique_mtx); +} + +uint64_t +unique_create(void) +{ + uint64_t value = unique_insert(0); + unique_remove(value); + return (value); +} + +uint64_t +unique_insert(uint64_t value) +{ + avl_index_t idx; + unique_t *un = kmem_alloc(sizeof (unique_t), KM_SLEEP); + + un->un_value = value; + + mutex_enter(&unique_mtx); + while (un->un_value == 0 || un->un_value & ~UNIQUE_MASK || + avl_find(&unique_avl, un, &idx)) { + mutex_exit(&unique_mtx); + (void) random_get_pseudo_bytes((void*)&un->un_value, + sizeof (un->un_value)); + un->un_value &= UNIQUE_MASK; + mutex_enter(&unique_mtx); + } + + avl_insert(&unique_avl, un, idx); + mutex_exit(&unique_mtx); + + return (un->un_value); +} + +void +unique_remove(uint64_t value) +{ + unique_t un_tofind; + unique_t *un; + + un_tofind.un_value = value; + mutex_enter(&unique_mtx); + un = avl_find(&unique_avl, &un_tofind, NULL); + if (un != NULL) { + avl_remove(&unique_avl, un); + kmem_free(un, sizeof (unique_t)); + } + mutex_exit(&unique_mtx); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev.c @@ -0,0 +1,3780 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome + * Copyright 2017 Joyent, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * When a vdev is added, it will be divided into approximately (but no + * more than) this number of metaslabs. + */ +int metaslabs_per_vdev = 200; + +/* + * Virtual device management. + */ + +static vdev_ops_t *vdev_ops_table[] = { + &vdev_root_ops, + &vdev_raidz_ops, + &vdev_mirror_ops, + &vdev_replacing_ops, + &vdev_spare_ops, + &vdev_disk_ops, + &vdev_file_ops, + &vdev_missing_ops, + &vdev_hole_ops, + NULL +}; + +/* + * Given a vdev type, return the appropriate ops vector. + */ +static vdev_ops_t * +vdev_getops(const char *type) +{ + vdev_ops_t *ops, **opspp; + + for (opspp = vdev_ops_table; (ops = *opspp) != NULL; opspp++) + if (strcmp(ops->vdev_op_type, type) == 0) + break; + + return (ops); +} + +/* + * Default asize function: return the MAX of psize with the asize of + * all children. This is what's used by anything other than RAID-Z. + */ +uint64_t +vdev_default_asize(vdev_t *vd, uint64_t psize) +{ + uint64_t asize = P2ROUNDUP(psize, 1ULL << vd->vdev_top->vdev_ashift); + uint64_t csize; + int c; + + for (c = 0; c < vd->vdev_children; c++) { + csize = vdev_psize_to_asize(vd->vdev_child[c], psize); + asize = MAX(asize, csize); + } + + return (asize); +} + +/* + * Get the minimum allocatable size. We define the allocatable size as + * the vdev's asize rounded to the nearest metaslab. This allows us to + * replace or attach devices which don't have the same physical size but + * can still satisfy the same number of allocations. + */ +uint64_t +vdev_get_min_asize(vdev_t *vd) +{ + vdev_t *pvd = vd->vdev_parent; + + /* + * If our parent is NULL (inactive spare or cache) or is the root, + * just return our own asize. + */ + if (pvd == NULL) + return (vd->vdev_asize); + + /* + * The top-level vdev just returns the allocatable size rounded + * to the nearest metaslab. + */ + if (vd == vd->vdev_top) + return (P2ALIGN(vd->vdev_asize, 1ULL << vd->vdev_ms_shift)); + + /* + * The allocatable space for a raidz vdev is N * sizeof(smallest child), + * so each child must provide at least 1/Nth of its asize. + */ + if (pvd->vdev_ops == &vdev_raidz_ops) + return ((pvd->vdev_min_asize + pvd->vdev_children - 1) / + pvd->vdev_children); + + return (pvd->vdev_min_asize); +} + +void +vdev_set_min_asize(vdev_t *vd) +{ + int c; + vd->vdev_min_asize = vdev_get_min_asize(vd); + + for (c = 0; c < vd->vdev_children; c++) + vdev_set_min_asize(vd->vdev_child[c]); +} + +vdev_t * +vdev_lookup_top(spa_t *spa, uint64_t vdev) +{ + vdev_t *rvd = spa->spa_root_vdev; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0); + + if (vdev < rvd->vdev_children) { + ASSERT(rvd->vdev_child[vdev] != NULL); + return (rvd->vdev_child[vdev]); + } + + return (NULL); +} + +vdev_t * +vdev_lookup_by_guid(vdev_t *vd, uint64_t guid) +{ + vdev_t *mvd; + int c; + + if (vd->vdev_guid == guid) + return (vd); + + for (c = 0; c < vd->vdev_children; c++) + if ((mvd = vdev_lookup_by_guid(vd->vdev_child[c], guid)) != + NULL) + return (mvd); + + return (NULL); +} + +static int +vdev_count_leaves_impl(vdev_t *vd) +{ + int n = 0; + int c; + + if (vd->vdev_ops->vdev_op_leaf) + return (1); + + for (c = 0; c < vd->vdev_children; c++) + n += vdev_count_leaves_impl(vd->vdev_child[c]); + + return (n); +} + +int +vdev_count_leaves(spa_t *spa) +{ + return (vdev_count_leaves_impl(spa->spa_root_vdev)); +} + +void +vdev_add_child(vdev_t *pvd, vdev_t *cvd) +{ + size_t oldsize, newsize; + uint64_t id = cvd->vdev_id; + vdev_t **newchild; + + ASSERT(spa_config_held(cvd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); + ASSERT(cvd->vdev_parent == NULL); + + cvd->vdev_parent = pvd; + + if (pvd == NULL) + return; + + ASSERT(id >= pvd->vdev_children || pvd->vdev_child[id] == NULL); + + oldsize = pvd->vdev_children * sizeof (vdev_t *); + pvd->vdev_children = MAX(pvd->vdev_children, id + 1); + newsize = pvd->vdev_children * sizeof (vdev_t *); + + newchild = kmem_alloc(newsize, KM_SLEEP); + if (pvd->vdev_child != NULL) { + bcopy(pvd->vdev_child, newchild, oldsize); + kmem_free(pvd->vdev_child, oldsize); + } + + pvd->vdev_child = newchild; + pvd->vdev_child[id] = cvd; + + cvd->vdev_top = (pvd->vdev_top ? pvd->vdev_top: cvd); + ASSERT(cvd->vdev_top->vdev_parent->vdev_parent == NULL); + + /* + * Walk up all ancestors to update guid sum. + */ + for (; pvd != NULL; pvd = pvd->vdev_parent) + pvd->vdev_guid_sum += cvd->vdev_guid_sum; +} + +void +vdev_remove_child(vdev_t *pvd, vdev_t *cvd) +{ + int c; + uint_t id = cvd->vdev_id; + + ASSERT(cvd->vdev_parent == pvd); + + if (pvd == NULL) + return; + + ASSERT(id < pvd->vdev_children); + ASSERT(pvd->vdev_child[id] == cvd); + + pvd->vdev_child[id] = NULL; + cvd->vdev_parent = NULL; + + for (c = 0; c < pvd->vdev_children; c++) + if (pvd->vdev_child[c]) + break; + + if (c == pvd->vdev_children) { + kmem_free(pvd->vdev_child, c * sizeof (vdev_t *)); + pvd->vdev_child = NULL; + pvd->vdev_children = 0; + } + + /* + * Walk up all ancestors to update guid sum. + */ + for (; pvd != NULL; pvd = pvd->vdev_parent) + pvd->vdev_guid_sum -= cvd->vdev_guid_sum; +} + +/* + * Remove any holes in the child array. + */ +void +vdev_compact_children(vdev_t *pvd) +{ + vdev_t **newchild, *cvd; + int oldc = pvd->vdev_children; + int newc; + int c; + + ASSERT(spa_config_held(pvd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + for (c = newc = 0; c < oldc; c++) + if (pvd->vdev_child[c]) + newc++; + + newchild = kmem_zalloc(newc * sizeof (vdev_t *), KM_SLEEP); + + for (c = newc = 0; c < oldc; c++) { + if ((cvd = pvd->vdev_child[c]) != NULL) { + newchild[newc] = cvd; + cvd->vdev_id = newc++; + } + } + + kmem_free(pvd->vdev_child, oldc * sizeof (vdev_t *)); + pvd->vdev_child = newchild; + pvd->vdev_children = newc; +} + +/* + * Allocate and minimally initialize a vdev_t. + */ +vdev_t * +vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, vdev_ops_t *ops) +{ + vdev_t *vd; + int t; + + vd = kmem_zalloc(sizeof (vdev_t), KM_SLEEP); + + if (spa->spa_root_vdev == NULL) { + ASSERT(ops == &vdev_root_ops); + spa->spa_root_vdev = vd; + spa->spa_load_guid = spa_generate_guid(NULL); + } + + if (guid == 0 && ops != &vdev_hole_ops) { + if (spa->spa_root_vdev == vd) { + /* + * The root vdev's guid will also be the pool guid, + * which must be unique among all pools. + */ + guid = spa_generate_guid(NULL); + } else { + /* + * Any other vdev's guid must be unique within the pool. + */ + guid = spa_generate_guid(spa); + } + ASSERT(!spa_guid_exists(spa_guid(spa), guid)); + } + + vd->vdev_spa = spa; + vd->vdev_id = id; + vd->vdev_guid = guid; + vd->vdev_guid_sum = guid; + vd->vdev_ops = ops; + vd->vdev_state = VDEV_STATE_CLOSED; + vd->vdev_ishole = (ops == &vdev_hole_ops); + + /* + * Initialize rate limit structs for events. We rate limit ZIO delay + * and checksum events so that we don't overwhelm ZED with thousands + * of events when a disk is acting up. + */ + zfs_ratelimit_init(&vd->vdev_delay_rl, DELAYS_PER_SECOND, 1); + zfs_ratelimit_init(&vd->vdev_checksum_rl, CHECKSUMS_PER_SECOND, 1); + + list_link_init(&vd->vdev_config_dirty_node); + list_link_init(&vd->vdev_state_dirty_node); + mutex_init(&vd->vdev_dtl_lock, NULL, MUTEX_NOLOCKDEP, NULL); + mutex_init(&vd->vdev_stat_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&vd->vdev_probe_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&vd->vdev_queue_lock, NULL, MUTEX_DEFAULT, NULL); + + for (t = 0; t < DTL_TYPES; t++) { + vd->vdev_dtl[t] = range_tree_create(NULL, NULL, + &vd->vdev_dtl_lock); + } + txg_list_create(&vd->vdev_ms_list, spa, + offsetof(struct metaslab, ms_txg_node)); + txg_list_create(&vd->vdev_dtl_list, spa, + offsetof(struct vdev, vdev_dtl_node)); + vd->vdev_stat.vs_timestamp = gethrtime(); + vdev_queue_init(vd); + vdev_cache_init(vd); + + return (vd); +} + +/* + * Allocate a new vdev. The 'alloctype' is used to control whether we are + * creating a new vdev or loading an existing one - the behavior is slightly + * different for each case. + */ +int +vdev_alloc(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent, uint_t id, + int alloctype) +{ + vdev_ops_t *ops; + char *type; + uint64_t guid = 0, islog, nparity; + vdev_t *vd; + char *tmp = NULL; + int rc; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) != 0) + return (SET_ERROR(EINVAL)); + + if ((ops = vdev_getops(type)) == NULL) + return (SET_ERROR(EINVAL)); + + /* + * If this is a load, get the vdev guid from the nvlist. + * Otherwise, vdev_alloc_common() will generate one for us. + */ + if (alloctype == VDEV_ALLOC_LOAD) { + uint64_t label_id; + + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_ID, &label_id) || + label_id != id) + return (SET_ERROR(EINVAL)); + + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &guid) != 0) + return (SET_ERROR(EINVAL)); + } else if (alloctype == VDEV_ALLOC_SPARE) { + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &guid) != 0) + return (SET_ERROR(EINVAL)); + } else if (alloctype == VDEV_ALLOC_L2CACHE) { + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &guid) != 0) + return (SET_ERROR(EINVAL)); + } else if (alloctype == VDEV_ALLOC_ROOTPOOL) { + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &guid) != 0) + return (SET_ERROR(EINVAL)); + } + + /* + * The first allocated vdev must be of type 'root'. + */ + if (ops != &vdev_root_ops && spa->spa_root_vdev == NULL) + return (SET_ERROR(EINVAL)); + + /* + * Determine whether we're a log vdev. + */ + islog = 0; + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_IS_LOG, &islog); + if (islog && spa_version(spa) < SPA_VERSION_SLOGS) + return (SET_ERROR(ENOTSUP)); + + if (ops == &vdev_hole_ops && spa_version(spa) < SPA_VERSION_HOLES) + return (SET_ERROR(ENOTSUP)); + + /* + * Set the nparity property for RAID-Z vdevs. + */ + nparity = -1ULL; + if (ops == &vdev_raidz_ops) { + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NPARITY, + &nparity) == 0) { + if (nparity == 0 || nparity > VDEV_RAIDZ_MAXPARITY) + return (SET_ERROR(EINVAL)); + /* + * Previous versions could only support 1 or 2 parity + * device. + */ + if (nparity > 1 && + spa_version(spa) < SPA_VERSION_RAIDZ2) + return (SET_ERROR(ENOTSUP)); + if (nparity > 2 && + spa_version(spa) < SPA_VERSION_RAIDZ3) + return (SET_ERROR(ENOTSUP)); + } else { + /* + * We require the parity to be specified for SPAs that + * support multiple parity levels. + */ + if (spa_version(spa) >= SPA_VERSION_RAIDZ2) + return (SET_ERROR(EINVAL)); + /* + * Otherwise, we default to 1 parity device for RAID-Z. + */ + nparity = 1; + } + } else { + nparity = 0; + } + ASSERT(nparity != -1ULL); + + vd = vdev_alloc_common(spa, id, guid, ops); + + vd->vdev_islog = islog; + vd->vdev_nparity = nparity; + + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &vd->vdev_path) == 0) + vd->vdev_path = spa_strdup(vd->vdev_path); + + /* + * ZPOOL_CONFIG_AUX_STATE = "external" means we previously forced a + * fault on a vdev and want it to persist across imports (like with + * zpool offline -f). + */ + rc = nvlist_lookup_string(nv, ZPOOL_CONFIG_AUX_STATE, &tmp); + if (rc == 0 && tmp != NULL && strcmp(tmp, "external") == 0) { + vd->vdev_stat.vs_aux = VDEV_AUX_EXTERNAL; + vd->vdev_faulted = 1; + vd->vdev_label_aux = VDEV_AUX_EXTERNAL; + } + + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_DEVID, &vd->vdev_devid) == 0) + vd->vdev_devid = spa_strdup(vd->vdev_devid); + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PHYS_PATH, + &vd->vdev_physpath) == 0) + vd->vdev_physpath = spa_strdup(vd->vdev_physpath); + + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH, + &vd->vdev_enc_sysfs_path) == 0) + vd->vdev_enc_sysfs_path = spa_strdup(vd->vdev_enc_sysfs_path); + + if (nvlist_lookup_string(nv, ZPOOL_CONFIG_FRU, &vd->vdev_fru) == 0) + vd->vdev_fru = spa_strdup(vd->vdev_fru); + + /* + * Set the whole_disk property. If it's not specified, leave the value + * as -1. + */ + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_WHOLE_DISK, + &vd->vdev_wholedisk) != 0) + vd->vdev_wholedisk = -1ULL; + + /* + * Look for the 'not present' flag. This will only be set if the device + * was not present at the time of import. + */ + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT, + &vd->vdev_not_present); + + /* + * Get the alignment requirement. + */ + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_ASHIFT, &vd->vdev_ashift); + + /* + * Retrieve the vdev creation time. + */ + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_CREATE_TXG, + &vd->vdev_crtxg); + + /* + * If we're a top-level vdev, try to load the allocation parameters. + */ + if (parent && !parent->vdev_parent && + (alloctype == VDEV_ALLOC_LOAD || alloctype == VDEV_ALLOC_SPLIT)) { + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_METASLAB_ARRAY, + &vd->vdev_ms_array); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_METASLAB_SHIFT, + &vd->vdev_ms_shift); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_ASIZE, + &vd->vdev_asize); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_REMOVING, + &vd->vdev_removing); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_VDEV_TOP_ZAP, + &vd->vdev_top_zap); + } else { + ASSERT0(vd->vdev_top_zap); + } + + if (parent && !parent->vdev_parent && alloctype != VDEV_ALLOC_ATTACH) { + ASSERT(alloctype == VDEV_ALLOC_LOAD || + alloctype == VDEV_ALLOC_ADD || + alloctype == VDEV_ALLOC_SPLIT || + alloctype == VDEV_ALLOC_ROOTPOOL); + vd->vdev_mg = metaslab_group_create(islog ? + spa_log_class(spa) : spa_normal_class(spa), vd); + } + + if (vd->vdev_ops->vdev_op_leaf && + (alloctype == VDEV_ALLOC_LOAD || alloctype == VDEV_ALLOC_SPLIT)) { + (void) nvlist_lookup_uint64(nv, + ZPOOL_CONFIG_VDEV_LEAF_ZAP, &vd->vdev_leaf_zap); + } else { + ASSERT0(vd->vdev_leaf_zap); + } + + /* + * If we're a leaf vdev, try to load the DTL object and other state. + */ + + if (vd->vdev_ops->vdev_op_leaf && + (alloctype == VDEV_ALLOC_LOAD || alloctype == VDEV_ALLOC_L2CACHE || + alloctype == VDEV_ALLOC_ROOTPOOL)) { + if (alloctype == VDEV_ALLOC_LOAD) { + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_DTL, + &vd->vdev_dtl_object); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_UNSPARE, + &vd->vdev_unspare); + } + + if (alloctype == VDEV_ALLOC_ROOTPOOL) { + uint64_t spare = 0; + + if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_IS_SPARE, + &spare) == 0 && spare) + spa_spare_add(vd); + } + + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_OFFLINE, + &vd->vdev_offline); + + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_RESILVER_TXG, + &vd->vdev_resilver_txg); + + /* + * In general, when importing a pool we want to ignore the + * persistent fault state, as the diagnosis made on another + * system may not be valid in the current context. The only + * exception is if we forced a vdev to a persistently faulted + * state with 'zpool offline -f'. The persistent fault will + * remain across imports until cleared. + * + * Local vdevs will remain in the faulted state. + */ + if (spa_load_state(spa) == SPA_LOAD_OPEN || + spa_load_state(spa) == SPA_LOAD_IMPORT) { + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_FAULTED, + &vd->vdev_faulted); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_DEGRADED, + &vd->vdev_degraded); + (void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_REMOVED, + &vd->vdev_removed); + + if (vd->vdev_faulted || vd->vdev_degraded) { + char *aux; + + vd->vdev_label_aux = + VDEV_AUX_ERR_EXCEEDED; + if (nvlist_lookup_string(nv, + ZPOOL_CONFIG_AUX_STATE, &aux) == 0 && + strcmp(aux, "external") == 0) + vd->vdev_label_aux = VDEV_AUX_EXTERNAL; + } + } + } + + /* + * Add ourselves to the parent's list of children. + */ + vdev_add_child(parent, vd); + + *vdp = vd; + + return (0); +} + +void +vdev_free(vdev_t *vd) +{ + int c, t; + spa_t *spa = vd->vdev_spa; + + /* + * vdev_free() implies closing the vdev first. This is simpler than + * trying to ensure complicated semantics for all callers. + */ + vdev_close(vd); + + ASSERT(!list_link_active(&vd->vdev_config_dirty_node)); + ASSERT(!list_link_active(&vd->vdev_state_dirty_node)); + + /* + * Free all children. + */ + for (c = 0; c < vd->vdev_children; c++) + vdev_free(vd->vdev_child[c]); + + ASSERT(vd->vdev_child == NULL); + ASSERT(vd->vdev_guid_sum == vd->vdev_guid); + + /* + * Discard allocation state. + */ + if (vd->vdev_mg != NULL) { + vdev_metaslab_fini(vd); + metaslab_group_destroy(vd->vdev_mg); + } + + ASSERT0(vd->vdev_stat.vs_space); + ASSERT0(vd->vdev_stat.vs_dspace); + ASSERT0(vd->vdev_stat.vs_alloc); + + /* + * Remove this vdev from its parent's child list. + */ + vdev_remove_child(vd->vdev_parent, vd); + + ASSERT(vd->vdev_parent == NULL); + + /* + * Clean up vdev structure. + */ + vdev_queue_fini(vd); + vdev_cache_fini(vd); + + if (vd->vdev_path) + spa_strfree(vd->vdev_path); + if (vd->vdev_devid) + spa_strfree(vd->vdev_devid); + if (vd->vdev_physpath) + spa_strfree(vd->vdev_physpath); + + if (vd->vdev_enc_sysfs_path) + spa_strfree(vd->vdev_enc_sysfs_path); + + if (vd->vdev_fru) + spa_strfree(vd->vdev_fru); + + if (vd->vdev_isspare) + spa_spare_remove(vd); + if (vd->vdev_isl2cache) + spa_l2cache_remove(vd); + + txg_list_destroy(&vd->vdev_ms_list); + txg_list_destroy(&vd->vdev_dtl_list); + + mutex_enter(&vd->vdev_dtl_lock); + space_map_close(vd->vdev_dtl_sm); + for (t = 0; t < DTL_TYPES; t++) { + range_tree_vacate(vd->vdev_dtl[t], NULL, NULL); + range_tree_destroy(vd->vdev_dtl[t]); + } + mutex_exit(&vd->vdev_dtl_lock); + + mutex_destroy(&vd->vdev_queue_lock); + mutex_destroy(&vd->vdev_dtl_lock); + mutex_destroy(&vd->vdev_stat_lock); + mutex_destroy(&vd->vdev_probe_lock); + + zfs_ratelimit_fini(&vd->vdev_delay_rl); + zfs_ratelimit_fini(&vd->vdev_checksum_rl); + + if (vd == spa->spa_root_vdev) + spa->spa_root_vdev = NULL; + + kmem_free(vd, sizeof (vdev_t)); +} + +/* + * Transfer top-level vdev state from svd to tvd. + */ +static void +vdev_top_transfer(vdev_t *svd, vdev_t *tvd) +{ + spa_t *spa = svd->vdev_spa; + metaslab_t *msp; + vdev_t *vd; + int t; + + ASSERT(tvd == tvd->vdev_top); + + tvd->vdev_pending_fastwrite = svd->vdev_pending_fastwrite; + tvd->vdev_ms_array = svd->vdev_ms_array; + tvd->vdev_ms_shift = svd->vdev_ms_shift; + tvd->vdev_ms_count = svd->vdev_ms_count; + tvd->vdev_top_zap = svd->vdev_top_zap; + + svd->vdev_ms_array = 0; + svd->vdev_ms_shift = 0; + svd->vdev_ms_count = 0; + svd->vdev_top_zap = 0; + + if (tvd->vdev_mg) + ASSERT3P(tvd->vdev_mg, ==, svd->vdev_mg); + tvd->vdev_mg = svd->vdev_mg; + tvd->vdev_ms = svd->vdev_ms; + + svd->vdev_mg = NULL; + svd->vdev_ms = NULL; + + if (tvd->vdev_mg != NULL) + tvd->vdev_mg->mg_vd = tvd; + + tvd->vdev_stat.vs_alloc = svd->vdev_stat.vs_alloc; + tvd->vdev_stat.vs_space = svd->vdev_stat.vs_space; + tvd->vdev_stat.vs_dspace = svd->vdev_stat.vs_dspace; + + svd->vdev_stat.vs_alloc = 0; + svd->vdev_stat.vs_space = 0; + svd->vdev_stat.vs_dspace = 0; + + for (t = 0; t < TXG_SIZE; t++) { + while ((msp = txg_list_remove(&svd->vdev_ms_list, t)) != NULL) + (void) txg_list_add(&tvd->vdev_ms_list, msp, t); + while ((vd = txg_list_remove(&svd->vdev_dtl_list, t)) != NULL) + (void) txg_list_add(&tvd->vdev_dtl_list, vd, t); + if (txg_list_remove_this(&spa->spa_vdev_txg_list, svd, t)) + (void) txg_list_add(&spa->spa_vdev_txg_list, tvd, t); + } + + if (list_link_active(&svd->vdev_config_dirty_node)) { + vdev_config_clean(svd); + vdev_config_dirty(tvd); + } + + if (list_link_active(&svd->vdev_state_dirty_node)) { + vdev_state_clean(svd); + vdev_state_dirty(tvd); + } + + tvd->vdev_deflate_ratio = svd->vdev_deflate_ratio; + svd->vdev_deflate_ratio = 0; + + tvd->vdev_islog = svd->vdev_islog; + svd->vdev_islog = 0; +} + +static void +vdev_top_update(vdev_t *tvd, vdev_t *vd) +{ + int c; + + if (vd == NULL) + return; + + vd->vdev_top = tvd; + + for (c = 0; c < vd->vdev_children; c++) + vdev_top_update(tvd, vd->vdev_child[c]); +} + +/* + * Add a mirror/replacing vdev above an existing vdev. + */ +vdev_t * +vdev_add_parent(vdev_t *cvd, vdev_ops_t *ops) +{ + spa_t *spa = cvd->vdev_spa; + vdev_t *pvd = cvd->vdev_parent; + vdev_t *mvd; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + mvd = vdev_alloc_common(spa, cvd->vdev_id, 0, ops); + + mvd->vdev_asize = cvd->vdev_asize; + mvd->vdev_min_asize = cvd->vdev_min_asize; + mvd->vdev_max_asize = cvd->vdev_max_asize; + mvd->vdev_ashift = cvd->vdev_ashift; + mvd->vdev_state = cvd->vdev_state; + mvd->vdev_crtxg = cvd->vdev_crtxg; + + vdev_remove_child(pvd, cvd); + vdev_add_child(pvd, mvd); + cvd->vdev_id = mvd->vdev_children; + vdev_add_child(mvd, cvd); + vdev_top_update(cvd->vdev_top, cvd->vdev_top); + + if (mvd == mvd->vdev_top) + vdev_top_transfer(cvd, mvd); + + return (mvd); +} + +/* + * Remove a 1-way mirror/replacing vdev from the tree. + */ +void +vdev_remove_parent(vdev_t *cvd) +{ + vdev_t *mvd = cvd->vdev_parent; + vdev_t *pvd = mvd->vdev_parent; + + ASSERT(spa_config_held(cvd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + ASSERT(mvd->vdev_children == 1); + ASSERT(mvd->vdev_ops == &vdev_mirror_ops || + mvd->vdev_ops == &vdev_replacing_ops || + mvd->vdev_ops == &vdev_spare_ops); + cvd->vdev_ashift = mvd->vdev_ashift; + + vdev_remove_child(mvd, cvd); + vdev_remove_child(pvd, mvd); + + /* + * If cvd will replace mvd as a top-level vdev, preserve mvd's guid. + * Otherwise, we could have detached an offline device, and when we + * go to import the pool we'll think we have two top-level vdevs, + * instead of a different version of the same top-level vdev. + */ + if (mvd->vdev_top == mvd) { + uint64_t guid_delta = mvd->vdev_guid - cvd->vdev_guid; + cvd->vdev_orig_guid = cvd->vdev_guid; + cvd->vdev_guid += guid_delta; + cvd->vdev_guid_sum += guid_delta; + + /* + * If pool not set for autoexpand, we need to also preserve + * mvd's asize to prevent automatic expansion of cvd. + * Otherwise if we are adjusting the mirror by attaching and + * detaching children of non-uniform sizes, the mirror could + * autoexpand, unexpectedly requiring larger devices to + * re-establish the mirror. + */ + if (!cvd->vdev_spa->spa_autoexpand) + cvd->vdev_asize = mvd->vdev_asize; + } + cvd->vdev_id = mvd->vdev_id; + vdev_add_child(pvd, cvd); + vdev_top_update(cvd->vdev_top, cvd->vdev_top); + + if (cvd == cvd->vdev_top) + vdev_top_transfer(mvd, cvd); + + ASSERT(mvd->vdev_children == 0); + vdev_free(mvd); +} + +int +vdev_metaslab_init(vdev_t *vd, uint64_t txg) +{ + spa_t *spa = vd->vdev_spa; + objset_t *mos = spa->spa_meta_objset; + uint64_t m; + uint64_t oldc = vd->vdev_ms_count; + uint64_t newc = vd->vdev_asize >> vd->vdev_ms_shift; + metaslab_t **mspp; + int error; + + ASSERT(txg == 0 || spa_config_held(spa, SCL_ALLOC, RW_WRITER)); + + /* + * This vdev is not being allocated from yet or is a hole. + */ + if (vd->vdev_ms_shift == 0) + return (0); + + ASSERT(!vd->vdev_ishole); + + /* + * Compute the raidz-deflation ratio. Note, we hard-code + * in 128k (1 << 17) because it is the "typical" blocksize. + * Even though SPA_MAXBLOCKSIZE changed, this algorithm can not change, + * otherwise it would inconsistently account for existing bp's. + */ + vd->vdev_deflate_ratio = (1 << 17) / + (vdev_psize_to_asize(vd, 1 << 17) >> SPA_MINBLOCKSHIFT); + + ASSERT(oldc <= newc); + + mspp = vmem_zalloc(newc * sizeof (*mspp), KM_SLEEP); + + if (oldc != 0) { + bcopy(vd->vdev_ms, mspp, oldc * sizeof (*mspp)); + vmem_free(vd->vdev_ms, oldc * sizeof (*mspp)); + } + + vd->vdev_ms = mspp; + vd->vdev_ms_count = newc; + + for (m = oldc; m < newc; m++) { + uint64_t object = 0; + + if (txg == 0) { + error = dmu_read(mos, vd->vdev_ms_array, + m * sizeof (uint64_t), sizeof (uint64_t), &object, + DMU_READ_PREFETCH); + if (error) + return (error); + } + + error = metaslab_init(vd->vdev_mg, m, object, txg, + &(vd->vdev_ms[m])); + if (error) + return (error); + } + + if (txg == 0) + spa_config_enter(spa, SCL_ALLOC, FTAG, RW_WRITER); + + /* + * If the vdev is being removed we don't activate + * the metaslabs since we want to ensure that no new + * allocations are performed on this device. + */ + if (oldc == 0 && !vd->vdev_removing) + metaslab_group_activate(vd->vdev_mg); + + if (txg == 0) + spa_config_exit(spa, SCL_ALLOC, FTAG); + + return (0); +} + +void +vdev_metaslab_fini(vdev_t *vd) +{ + uint64_t m; + uint64_t count = vd->vdev_ms_count; + + if (vd->vdev_ms != NULL) { + metaslab_group_passivate(vd->vdev_mg); + for (m = 0; m < count; m++) { + metaslab_t *msp = vd->vdev_ms[m]; + + if (msp != NULL) + metaslab_fini(msp); + } + vmem_free(vd->vdev_ms, count * sizeof (metaslab_t *)); + vd->vdev_ms = NULL; + } + + ASSERT3U(vd->vdev_pending_fastwrite, ==, 0); +} + +typedef struct vdev_probe_stats { + boolean_t vps_readable; + boolean_t vps_writeable; + int vps_flags; +} vdev_probe_stats_t; + +static void +vdev_probe_done(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + vdev_t *vd = zio->io_vd; + vdev_probe_stats_t *vps = zio->io_private; + + ASSERT(vd->vdev_probe_zio != NULL); + + if (zio->io_type == ZIO_TYPE_READ) { + if (zio->io_error == 0) + vps->vps_readable = 1; + if (zio->io_error == 0 && spa_writeable(spa)) { + zio_nowait(zio_write_phys(vd->vdev_probe_zio, vd, + zio->io_offset, zio->io_size, zio->io_abd, + ZIO_CHECKSUM_OFF, vdev_probe_done, vps, + ZIO_PRIORITY_SYNC_WRITE, vps->vps_flags, B_TRUE)); + } else { + abd_free(zio->io_abd); + } + } else if (zio->io_type == ZIO_TYPE_WRITE) { + if (zio->io_error == 0) + vps->vps_writeable = 1; + abd_free(zio->io_abd); + } else if (zio->io_type == ZIO_TYPE_NULL) { + zio_t *pio; + zio_link_t *zl; + + vd->vdev_cant_read |= !vps->vps_readable; + vd->vdev_cant_write |= !vps->vps_writeable; + + if (vdev_readable(vd) && + (vdev_writeable(vd) || !spa_writeable(spa))) { + zio->io_error = 0; + } else { + ASSERT(zio->io_error != 0); + zfs_ereport_post(FM_EREPORT_ZFS_PROBE_FAILURE, + spa, vd, NULL, 0, 0); + zio->io_error = SET_ERROR(ENXIO); + } + + mutex_enter(&vd->vdev_probe_lock); + ASSERT(vd->vdev_probe_zio == zio); + vd->vdev_probe_zio = NULL; + mutex_exit(&vd->vdev_probe_lock); + + zl = NULL; + while ((pio = zio_walk_parents(zio, &zl)) != NULL) + if (!vdev_accessible(vd, pio)) + pio->io_error = SET_ERROR(ENXIO); + + kmem_free(vps, sizeof (*vps)); + } +} + +/* + * Determine whether this device is accessible. + * + * Read and write to several known locations: the pad regions of each + * vdev label but the first, which we leave alone in case it contains + * a VTOC. + */ +zio_t * +vdev_probe(vdev_t *vd, zio_t *zio) +{ + spa_t *spa = vd->vdev_spa; + vdev_probe_stats_t *vps = NULL; + zio_t *pio; + int l; + + ASSERT(vd->vdev_ops->vdev_op_leaf); + + /* + * Don't probe the probe. + */ + if (zio && (zio->io_flags & ZIO_FLAG_PROBE)) + return (NULL); + + /* + * To prevent 'probe storms' when a device fails, we create + * just one probe i/o at a time. All zios that want to probe + * this vdev will become parents of the probe io. + */ + mutex_enter(&vd->vdev_probe_lock); + + if ((pio = vd->vdev_probe_zio) == NULL) { + vps = kmem_zalloc(sizeof (*vps), KM_SLEEP); + + vps->vps_flags = ZIO_FLAG_CANFAIL | ZIO_FLAG_PROBE | + ZIO_FLAG_DONT_CACHE | ZIO_FLAG_DONT_AGGREGATE | + ZIO_FLAG_TRYHARD; + + if (spa_config_held(spa, SCL_ZIO, RW_WRITER)) { + /* + * vdev_cant_read and vdev_cant_write can only + * transition from TRUE to FALSE when we have the + * SCL_ZIO lock as writer; otherwise they can only + * transition from FALSE to TRUE. This ensures that + * any zio looking at these values can assume that + * failures persist for the life of the I/O. That's + * important because when a device has intermittent + * connectivity problems, we want to ensure that + * they're ascribed to the device (ENXIO) and not + * the zio (EIO). + * + * Since we hold SCL_ZIO as writer here, clear both + * values so the probe can reevaluate from first + * principles. + */ + vps->vps_flags |= ZIO_FLAG_CONFIG_WRITER; + vd->vdev_cant_read = B_FALSE; + vd->vdev_cant_write = B_FALSE; + } + + vd->vdev_probe_zio = pio = zio_null(NULL, spa, vd, + vdev_probe_done, vps, + vps->vps_flags | ZIO_FLAG_DONT_PROPAGATE); + + /* + * We can't change the vdev state in this context, so we + * kick off an async task to do it on our behalf. + */ + if (zio != NULL) { + vd->vdev_probe_wanted = B_TRUE; + spa_async_request(spa, SPA_ASYNC_PROBE); + } + } + + if (zio != NULL) + zio_add_child(zio, pio); + + mutex_exit(&vd->vdev_probe_lock); + + if (vps == NULL) { + ASSERT(zio != NULL); + return (NULL); + } + + for (l = 1; l < VDEV_LABELS; l++) { + zio_nowait(zio_read_phys(pio, vd, + vdev_label_offset(vd->vdev_psize, l, + offsetof(vdev_label_t, vl_pad2)), VDEV_PAD_SIZE, + abd_alloc_for_io(VDEV_PAD_SIZE, B_TRUE), + ZIO_CHECKSUM_OFF, vdev_probe_done, vps, + ZIO_PRIORITY_SYNC_READ, vps->vps_flags, B_TRUE)); + } + + if (zio == NULL) + return (pio); + + zio_nowait(pio); + return (NULL); +} + +static void +vdev_open_child(void *arg) +{ + vdev_t *vd = arg; + + vd->vdev_open_thread = curthread; + vd->vdev_open_error = vdev_open(vd); + vd->vdev_open_thread = NULL; +} + +static boolean_t +vdev_uses_zvols(vdev_t *vd) +{ + int c; + +#ifdef _KERNEL + if (zvol_is_zvol(vd->vdev_path)) + return (B_TRUE); +#endif + + for (c = 0; c < vd->vdev_children; c++) + if (vdev_uses_zvols(vd->vdev_child[c])) + return (B_TRUE); + + return (B_FALSE); +} + +void +vdev_open_children(vdev_t *vd) +{ + taskq_t *tq; + int children = vd->vdev_children; + int c; + + /* + * in order to handle pools on top of zvols, do the opens + * in a single thread so that the same thread holds the + * spa_namespace_lock + */ + if (vdev_uses_zvols(vd)) { +retry_sync: + for (c = 0; c < children; c++) + vd->vdev_child[c]->vdev_open_error = + vdev_open(vd->vdev_child[c]); + } else { + tq = taskq_create("vdev_open", children, minclsyspri, + children, children, TASKQ_PREPOPULATE); + if (tq == NULL) + goto retry_sync; + + for (c = 0; c < children; c++) + VERIFY(taskq_dispatch(tq, vdev_open_child, + vd->vdev_child[c], TQ_SLEEP) != TASKQID_INVALID); + + taskq_destroy(tq); + } + + vd->vdev_nonrot = B_TRUE; + + for (c = 0; c < children; c++) + vd->vdev_nonrot &= vd->vdev_child[c]->vdev_nonrot; +} + +/* + * Prepare a virtual device for access. + */ +int +vdev_open(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + int error; + uint64_t osize = 0; + uint64_t max_osize = 0; + uint64_t asize, max_asize, psize; + uint64_t ashift = 0; + int c; + + ASSERT(vd->vdev_open_thread == curthread || + spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + ASSERT(vd->vdev_state == VDEV_STATE_CLOSED || + vd->vdev_state == VDEV_STATE_CANT_OPEN || + vd->vdev_state == VDEV_STATE_OFFLINE); + + vd->vdev_stat.vs_aux = VDEV_AUX_NONE; + vd->vdev_cant_read = B_FALSE; + vd->vdev_cant_write = B_FALSE; + vd->vdev_min_asize = vdev_get_min_asize(vd); + + /* + * If this vdev is not removed, check its fault status. If it's + * faulted, bail out of the open. + */ + if (!vd->vdev_removed && vd->vdev_faulted) { + ASSERT(vd->vdev_children == 0); + ASSERT(vd->vdev_label_aux == VDEV_AUX_ERR_EXCEEDED || + vd->vdev_label_aux == VDEV_AUX_EXTERNAL); + vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, + vd->vdev_label_aux); + return (SET_ERROR(ENXIO)); + } else if (vd->vdev_offline) { + ASSERT(vd->vdev_children == 0); + vdev_set_state(vd, B_TRUE, VDEV_STATE_OFFLINE, VDEV_AUX_NONE); + return (SET_ERROR(ENXIO)); + } + + error = vd->vdev_ops->vdev_op_open(vd, &osize, &max_osize, &ashift); + + /* + * Reset the vdev_reopening flag so that we actually close + * the vdev on error. + */ + vd->vdev_reopening = B_FALSE; + if (zio_injection_enabled && error == 0) + error = zio_handle_device_injection(vd, NULL, ENXIO); + + if (error) { + if (vd->vdev_removed && + vd->vdev_stat.vs_aux != VDEV_AUX_OPEN_FAILED) + vd->vdev_removed = B_FALSE; + + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + vd->vdev_stat.vs_aux); + return (error); + } + + vd->vdev_removed = B_FALSE; + + /* + * Recheck the faulted flag now that we have confirmed that + * the vdev is accessible. If we're faulted, bail. + */ + if (vd->vdev_faulted) { + ASSERT(vd->vdev_children == 0); + ASSERT(vd->vdev_label_aux == VDEV_AUX_ERR_EXCEEDED || + vd->vdev_label_aux == VDEV_AUX_EXTERNAL); + vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, + vd->vdev_label_aux); + return (SET_ERROR(ENXIO)); + } + + if (vd->vdev_degraded) { + ASSERT(vd->vdev_children == 0); + vdev_set_state(vd, B_TRUE, VDEV_STATE_DEGRADED, + VDEV_AUX_ERR_EXCEEDED); + } else { + vdev_set_state(vd, B_TRUE, VDEV_STATE_HEALTHY, 0); + } + + /* + * For hole or missing vdevs we just return success. + */ + if (vd->vdev_ishole || vd->vdev_ops == &vdev_missing_ops) + return (0); + + for (c = 0; c < vd->vdev_children; c++) { + if (vd->vdev_child[c]->vdev_state != VDEV_STATE_HEALTHY) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_DEGRADED, + VDEV_AUX_NONE); + break; + } + } + + osize = P2ALIGN(osize, (uint64_t)sizeof (vdev_label_t)); + max_osize = P2ALIGN(max_osize, (uint64_t)sizeof (vdev_label_t)); + + if (vd->vdev_children == 0) { + if (osize < SPA_MINDEVSIZE) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_TOO_SMALL); + return (SET_ERROR(EOVERFLOW)); + } + psize = osize; + asize = osize - (VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE); + max_asize = max_osize - (VDEV_LABEL_START_SIZE + + VDEV_LABEL_END_SIZE); + } else { + if (vd->vdev_parent != NULL && osize < SPA_MINDEVSIZE - + (VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE)) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_TOO_SMALL); + return (SET_ERROR(EOVERFLOW)); + } + psize = 0; + asize = osize; + max_asize = max_osize; + } + + /* + * If the vdev was expanded, record this so that we can re-create the + * uberblock rings in labels {2,3}, during the next sync. + */ + if ((psize > vd->vdev_psize) && (vd->vdev_psize != 0)) + vd->vdev_copy_uberblocks = B_TRUE; + + vd->vdev_psize = psize; + + /* + * Make sure the allocatable size hasn't shrunk too much. + */ + if (asize < vd->vdev_min_asize) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_BAD_LABEL); + return (SET_ERROR(EINVAL)); + } + + if (vd->vdev_asize == 0) { + /* + * This is the first-ever open, so use the computed values. + * For compatibility, a different ashift can be requested. + */ + vd->vdev_asize = asize; + vd->vdev_max_asize = max_asize; + if (vd->vdev_ashift == 0) { + vd->vdev_ashift = ashift; /* use detected value */ + } + if (vd->vdev_ashift != 0 && (vd->vdev_ashift < ASHIFT_MIN || + vd->vdev_ashift > ASHIFT_MAX)) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_BAD_ASHIFT); + return (SET_ERROR(EDOM)); + } + } else { + /* + * Detect if the alignment requirement has increased. + * We don't want to make the pool unavailable, just + * post an event instead. + */ + if (ashift > vd->vdev_top->vdev_ashift && + vd->vdev_ops->vdev_op_leaf) { + zfs_ereport_post(FM_EREPORT_ZFS_DEVICE_BAD_ASHIFT, + spa, vd, NULL, 0, 0); + } + + vd->vdev_max_asize = max_asize; + } + + /* + * If all children are healthy we update asize if either: + * The asize has increased, due to a device expansion caused by dynamic + * LUN growth or vdev replacement, and automatic expansion is enabled; + * making the additional space available. + * + * The asize has decreased, due to a device shrink usually caused by a + * vdev replace with a smaller device. This ensures that calculations + * based of max_asize and asize e.g. esize are always valid. It's safe + * to do this as we've already validated that asize is greater than + * vdev_min_asize. + */ + if (vd->vdev_state == VDEV_STATE_HEALTHY && + ((asize > vd->vdev_asize && + (vd->vdev_expanding || spa->spa_autoexpand)) || + (asize < vd->vdev_asize))) + vd->vdev_asize = asize; + + vdev_set_min_asize(vd); + + /* + * Ensure we can issue some IO before declaring the + * vdev open for business. + */ + if (vd->vdev_ops->vdev_op_leaf && + (error = zio_wait(vdev_probe(vd, NULL))) != 0) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, + VDEV_AUX_ERR_EXCEEDED); + return (error); + } + + /* + * Track the min and max ashift values for normal data devices. + */ + if (vd->vdev_top == vd && vd->vdev_ashift != 0 && + !vd->vdev_islog && vd->vdev_aux == NULL) { + if (vd->vdev_ashift > spa->spa_max_ashift) + spa->spa_max_ashift = vd->vdev_ashift; + if (vd->vdev_ashift < spa->spa_min_ashift) + spa->spa_min_ashift = vd->vdev_ashift; + } + + /* + * If a leaf vdev has a DTL, and seems healthy, then kick off a + * resilver. But don't do this if we are doing a reopen for a scrub, + * since this would just restart the scrub we are already doing. + */ + if (vd->vdev_ops->vdev_op_leaf && !spa->spa_scrub_reopen && + vdev_resilver_needed(vd, NULL, NULL)) + spa_async_request(spa, SPA_ASYNC_RESILVER); + + return (0); +} + +/* + * Called once the vdevs are all opened, this routine validates the label + * contents. This needs to be done before vdev_load() so that we don't + * inadvertently do repair I/Os to the wrong device. + * + * If 'strict' is false ignore the spa guid check. This is necessary because + * if the machine crashed during a re-guid the new guid might have been written + * to all of the vdev labels, but not the cached config. The strict check + * will be performed when the pool is opened again using the mos config. + * + * This function will only return failure if one of the vdevs indicates that it + * has since been destroyed or exported. This is only possible if + * /etc/zfs/zpool.cache was readonly at the time. Otherwise, the vdev state + * will be updated but the function will return 0. + */ +int +vdev_validate(vdev_t *vd, boolean_t strict) +{ + spa_t *spa = vd->vdev_spa; + nvlist_t *label; + uint64_t guid = 0, top_guid; + uint64_t state; + int c; + + for (c = 0; c < vd->vdev_children; c++) + if (vdev_validate(vd->vdev_child[c], strict) != 0) + return (SET_ERROR(EBADF)); + + /* + * If the device has already failed, or was marked offline, don't do + * any further validation. Otherwise, label I/O will fail and we will + * overwrite the previous state. + */ + if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { + uint64_t aux_guid = 0; + nvlist_t *nvl; + uint64_t txg = spa_last_synced_txg(spa) != 0 ? + spa_last_synced_txg(spa) : -1ULL; + + if ((label = vdev_label_read_config(vd, txg)) == NULL) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_BAD_LABEL); + return (0); + } + + /* + * Determine if this vdev has been split off into another + * pool. If so, then refuse to open it. + */ + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_SPLIT_GUID, + &aux_guid) == 0 && aux_guid == spa_guid(spa)) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_SPLIT_POOL); + nvlist_free(label); + return (0); + } + + if (strict && (nvlist_lookup_uint64(label, + ZPOOL_CONFIG_POOL_GUID, &guid) != 0 || + guid != spa_guid(spa))) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + nvlist_free(label); + return (0); + } + + if (nvlist_lookup_nvlist(label, ZPOOL_CONFIG_VDEV_TREE, &nvl) + != 0 || nvlist_lookup_uint64(nvl, ZPOOL_CONFIG_ORIG_GUID, + &aux_guid) != 0) + aux_guid = 0; + + /* + * If this vdev just became a top-level vdev because its + * sibling was detached, it will have adopted the parent's + * vdev guid -- but the label may or may not be on disk yet. + * Fortunately, either version of the label will have the + * same top guid, so if we're a top-level vdev, we can + * safely compare to that instead. + * + * If we split this vdev off instead, then we also check the + * original pool's guid. We don't want to consider the vdev + * corrupt if it is partway through a split operation. + */ + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, + &guid) != 0 || + nvlist_lookup_uint64(label, ZPOOL_CONFIG_TOP_GUID, + &top_guid) != 0 || + ((vd->vdev_guid != guid && vd->vdev_guid != aux_guid) && + (vd->vdev_guid != top_guid || vd != vd->vdev_top))) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + nvlist_free(label); + return (0); + } + + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, + &state) != 0) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + nvlist_free(label); + return (0); + } + + nvlist_free(label); + + /* + * If this is a verbatim import, no need to check the + * state of the pool. + */ + if (!(spa->spa_import_flags & ZFS_IMPORT_VERBATIM) && + spa_load_state(spa) == SPA_LOAD_OPEN && + state != POOL_STATE_ACTIVE) + return (SET_ERROR(EBADF)); + + /* + * If we were able to open and validate a vdev that was + * previously marked permanently unavailable, clear that state + * now. + */ + if (vd->vdev_not_present) + vd->vdev_not_present = 0; + } + + return (0); +} + +/* + * Close a virtual device. + */ +void +vdev_close(vdev_t *vd) +{ + vdev_t *pvd = vd->vdev_parent; + ASSERTV(spa_t *spa = vd->vdev_spa); + + ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + + /* + * If our parent is reopening, then we are as well, unless we are + * going offline. + */ + if (pvd != NULL && pvd->vdev_reopening) + vd->vdev_reopening = (pvd->vdev_reopening && !vd->vdev_offline); + + vd->vdev_ops->vdev_op_close(vd); + + vdev_cache_purge(vd); + + /* + * We record the previous state before we close it, so that if we are + * doing a reopen(), we don't generate FMA ereports if we notice that + * it's still faulted. + */ + vd->vdev_prevstate = vd->vdev_state; + + if (vd->vdev_offline) + vd->vdev_state = VDEV_STATE_OFFLINE; + else + vd->vdev_state = VDEV_STATE_CLOSED; + vd->vdev_stat.vs_aux = VDEV_AUX_NONE; +} + +void +vdev_hold(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + int c; + + ASSERT(spa_is_root(spa)); + if (spa->spa_state == POOL_STATE_UNINITIALIZED) + return; + + for (c = 0; c < vd->vdev_children; c++) + vdev_hold(vd->vdev_child[c]); + + if (vd->vdev_ops->vdev_op_leaf) + vd->vdev_ops->vdev_op_hold(vd); +} + +void +vdev_rele(vdev_t *vd) +{ + int c; + + ASSERT(spa_is_root(vd->vdev_spa)); + for (c = 0; c < vd->vdev_children; c++) + vdev_rele(vd->vdev_child[c]); + + if (vd->vdev_ops->vdev_op_leaf) + vd->vdev_ops->vdev_op_rele(vd); +} + +/* + * Reopen all interior vdevs and any unopened leaves. We don't actually + * reopen leaf vdevs which had previously been opened as they might deadlock + * on the spa_config_lock. Instead we only obtain the leaf's physical size. + * If the leaf has never been opened then open it, as usual. + */ +void +vdev_reopen(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + + ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + + /* set the reopening flag unless we're taking the vdev offline */ + vd->vdev_reopening = !vd->vdev_offline; + vdev_close(vd); + (void) vdev_open(vd); + + /* + * Call vdev_validate() here to make sure we have the same device. + * Otherwise, a device with an invalid label could be successfully + * opened in response to vdev_reopen(). + */ + if (vd->vdev_aux) { + (void) vdev_validate_aux(vd); + if (vdev_readable(vd) && vdev_writeable(vd) && + vd->vdev_aux == &spa->spa_l2cache && + !l2arc_vdev_present(vd)) + l2arc_add_vdev(spa, vd); + } else { + (void) vdev_validate(vd, B_TRUE); + } + + /* + * Reassess parent vdev's health. + */ + vdev_propagate_state(vd); +} + +int +vdev_create(vdev_t *vd, uint64_t txg, boolean_t isreplacing) +{ + int error; + + /* + * Normally, partial opens (e.g. of a mirror) are allowed. + * For a create, however, we want to fail the request if + * there are any components we can't open. + */ + error = vdev_open(vd); + + if (error || vd->vdev_state != VDEV_STATE_HEALTHY) { + vdev_close(vd); + return (error ? error : ENXIO); + } + + /* + * Recursively load DTLs and initialize all labels. + */ + if ((error = vdev_dtl_load(vd)) != 0 || + (error = vdev_label_init(vd, txg, isreplacing ? + VDEV_LABEL_REPLACE : VDEV_LABEL_CREATE)) != 0) { + vdev_close(vd); + return (error); + } + + return (0); +} + +void +vdev_metaslab_set_size(vdev_t *vd) +{ + /* + * Aim for roughly metaslabs_per_vdev (default 200) metaslabs per vdev. + */ + vd->vdev_ms_shift = highbit64(vd->vdev_asize / metaslabs_per_vdev); + vd->vdev_ms_shift = MAX(vd->vdev_ms_shift, SPA_MAXBLOCKSHIFT); +} + +void +vdev_dirty(vdev_t *vd, int flags, void *arg, uint64_t txg) +{ + ASSERT(vd == vd->vdev_top); + ASSERT(!vd->vdev_ishole); + ASSERT(ISP2(flags)); + ASSERT(spa_writeable(vd->vdev_spa)); + + if (flags & VDD_METASLAB) + (void) txg_list_add(&vd->vdev_ms_list, arg, txg); + + if (flags & VDD_DTL) + (void) txg_list_add(&vd->vdev_dtl_list, arg, txg); + + (void) txg_list_add(&vd->vdev_spa->spa_vdev_txg_list, vd, txg); +} + +void +vdev_dirty_leaves(vdev_t *vd, int flags, uint64_t txg) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_dirty_leaves(vd->vdev_child[c], flags, txg); + + if (vd->vdev_ops->vdev_op_leaf) + vdev_dirty(vd->vdev_top, flags, vd, txg); +} + +/* + * DTLs. + * + * A vdev's DTL (dirty time log) is the set of transaction groups for which + * the vdev has less than perfect replication. There are four kinds of DTL: + * + * DTL_MISSING: txgs for which the vdev has no valid copies of the data + * + * DTL_PARTIAL: txgs for which data is available, but not fully replicated + * + * DTL_SCRUB: the txgs that could not be repaired by the last scrub; upon + * scrub completion, DTL_SCRUB replaces DTL_MISSING in the range of + * txgs that was scrubbed. + * + * DTL_OUTAGE: txgs which cannot currently be read, whether due to + * persistent errors or just some device being offline. + * Unlike the other three, the DTL_OUTAGE map is not generally + * maintained; it's only computed when needed, typically to + * determine whether a device can be detached. + * + * For leaf vdevs, DTL_MISSING and DTL_PARTIAL are identical: the device + * either has the data or it doesn't. + * + * For interior vdevs such as mirror and RAID-Z the picture is more complex. + * A vdev's DTL_PARTIAL is the union of its children's DTL_PARTIALs, because + * if any child is less than fully replicated, then so is its parent. + * A vdev's DTL_MISSING is a modified union of its children's DTL_MISSINGs, + * comprising only those txgs which appear in 'maxfaults' or more children; + * those are the txgs we don't have enough replication to read. For example, + * double-parity RAID-Z can tolerate up to two missing devices (maxfaults == 2); + * thus, its DTL_MISSING consists of the set of txgs that appear in more than + * two child DTL_MISSING maps. + * + * It should be clear from the above that to compute the DTLs and outage maps + * for all vdevs, it suffices to know just the leaf vdevs' DTL_MISSING maps. + * Therefore, that is all we keep on disk. When loading the pool, or after + * a configuration change, we generate all other DTLs from first principles. + */ +void +vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t t, uint64_t txg, uint64_t size) +{ + range_tree_t *rt = vd->vdev_dtl[t]; + + ASSERT(t < DTL_TYPES); + ASSERT(vd != vd->vdev_spa->spa_root_vdev); + ASSERT(spa_writeable(vd->vdev_spa)); + + mutex_enter(rt->rt_lock); + if (!range_tree_contains(rt, txg, size)) + range_tree_add(rt, txg, size); + mutex_exit(rt->rt_lock); +} + +boolean_t +vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t t, uint64_t txg, uint64_t size) +{ + range_tree_t *rt = vd->vdev_dtl[t]; + boolean_t dirty = B_FALSE; + + ASSERT(t < DTL_TYPES); + ASSERT(vd != vd->vdev_spa->spa_root_vdev); + + mutex_enter(rt->rt_lock); + if (range_tree_space(rt) != 0) + dirty = range_tree_contains(rt, txg, size); + mutex_exit(rt->rt_lock); + + return (dirty); +} + +boolean_t +vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t t) +{ + range_tree_t *rt = vd->vdev_dtl[t]; + boolean_t empty; + + mutex_enter(rt->rt_lock); + empty = (range_tree_space(rt) == 0); + mutex_exit(rt->rt_lock); + + return (empty); +} + +/* + * Returns B_TRUE if vdev determines offset needs to be resilvered. + */ +boolean_t +vdev_dtl_need_resilver(vdev_t *vd, uint64_t offset, size_t psize) +{ + ASSERT(vd != vd->vdev_spa->spa_root_vdev); + + if (vd->vdev_ops->vdev_op_need_resilver == NULL || + vd->vdev_ops->vdev_op_leaf) + return (B_TRUE); + + return (vd->vdev_ops->vdev_op_need_resilver(vd, offset, psize)); +} + +/* + * Returns the lowest txg in the DTL range. + */ +static uint64_t +vdev_dtl_min(vdev_t *vd) +{ + range_seg_t *rs; + + ASSERT(MUTEX_HELD(&vd->vdev_dtl_lock)); + ASSERT3U(range_tree_space(vd->vdev_dtl[DTL_MISSING]), !=, 0); + ASSERT0(vd->vdev_children); + + rs = avl_first(&vd->vdev_dtl[DTL_MISSING]->rt_root); + return (rs->rs_start - 1); +} + +/* + * Returns the highest txg in the DTL. + */ +static uint64_t +vdev_dtl_max(vdev_t *vd) +{ + range_seg_t *rs; + + ASSERT(MUTEX_HELD(&vd->vdev_dtl_lock)); + ASSERT3U(range_tree_space(vd->vdev_dtl[DTL_MISSING]), !=, 0); + ASSERT0(vd->vdev_children); + + rs = avl_last(&vd->vdev_dtl[DTL_MISSING]->rt_root); + return (rs->rs_end); +} + +/* + * Determine if a resilvering vdev should remove any DTL entries from + * its range. If the vdev was resilvering for the entire duration of the + * scan then it should excise that range from its DTLs. Otherwise, this + * vdev is considered partially resilvered and should leave its DTL + * entries intact. The comment in vdev_dtl_reassess() describes how we + * excise the DTLs. + */ +static boolean_t +vdev_dtl_should_excise(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + dsl_scan_t *scn = spa->spa_dsl_pool->dp_scan; + + ASSERT0(scn->scn_phys.scn_errors); + ASSERT0(vd->vdev_children); + + if (vd->vdev_state < VDEV_STATE_DEGRADED) + return (B_FALSE); + + if (vd->vdev_resilver_txg == 0 || + range_tree_space(vd->vdev_dtl[DTL_MISSING]) == 0) + return (B_TRUE); + + /* + * When a resilver is initiated the scan will assign the scn_max_txg + * value to the highest txg value that exists in all DTLs. If this + * device's max DTL is not part of this scan (i.e. it is not in + * the range (scn_min_txg, scn_max_txg] then it is not eligible + * for excision. + */ + if (vdev_dtl_max(vd) <= scn->scn_phys.scn_max_txg) { + ASSERT3U(scn->scn_phys.scn_min_txg, <=, vdev_dtl_min(vd)); + ASSERT3U(scn->scn_phys.scn_min_txg, <, vd->vdev_resilver_txg); + ASSERT3U(vd->vdev_resilver_txg, <=, scn->scn_phys.scn_max_txg); + return (B_TRUE); + } + return (B_FALSE); +} + +/* + * Reassess DTLs after a config change or scrub completion. + */ +void +vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done) +{ + spa_t *spa = vd->vdev_spa; + avl_tree_t reftree; + int c, t, minref; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0); + + for (c = 0; c < vd->vdev_children; c++) + vdev_dtl_reassess(vd->vdev_child[c], txg, + scrub_txg, scrub_done); + + if (vd == spa->spa_root_vdev || vd->vdev_ishole || vd->vdev_aux) + return; + + if (vd->vdev_ops->vdev_op_leaf) { + dsl_scan_t *scn = spa->spa_dsl_pool->dp_scan; + + mutex_enter(&vd->vdev_dtl_lock); + + /* + * If we've completed a scan cleanly then determine + * if this vdev should remove any DTLs. We only want to + * excise regions on vdevs that were available during + * the entire duration of this scan. + */ + if (scrub_txg != 0 && + (spa->spa_scrub_started || + (scn != NULL && scn->scn_phys.scn_errors == 0)) && + vdev_dtl_should_excise(vd)) { + /* + * We completed a scrub up to scrub_txg. If we + * did it without rebooting, then the scrub dtl + * will be valid, so excise the old region and + * fold in the scrub dtl. Otherwise, leave the + * dtl as-is if there was an error. + * + * There's little trick here: to excise the beginning + * of the DTL_MISSING map, we put it into a reference + * tree and then add a segment with refcnt -1 that + * covers the range [0, scrub_txg). This means + * that each txg in that range has refcnt -1 or 0. + * We then add DTL_SCRUB with a refcnt of 2, so that + * entries in the range [0, scrub_txg) will have a + * positive refcnt -- either 1 or 2. We then convert + * the reference tree into the new DTL_MISSING map. + */ + space_reftree_create(&reftree); + space_reftree_add_map(&reftree, + vd->vdev_dtl[DTL_MISSING], 1); + space_reftree_add_seg(&reftree, 0, scrub_txg, -1); + space_reftree_add_map(&reftree, + vd->vdev_dtl[DTL_SCRUB], 2); + space_reftree_generate_map(&reftree, + vd->vdev_dtl[DTL_MISSING], 1); + space_reftree_destroy(&reftree); + } + range_tree_vacate(vd->vdev_dtl[DTL_PARTIAL], NULL, NULL); + range_tree_walk(vd->vdev_dtl[DTL_MISSING], + range_tree_add, vd->vdev_dtl[DTL_PARTIAL]); + if (scrub_done) + range_tree_vacate(vd->vdev_dtl[DTL_SCRUB], NULL, NULL); + range_tree_vacate(vd->vdev_dtl[DTL_OUTAGE], NULL, NULL); + if (!vdev_readable(vd)) + range_tree_add(vd->vdev_dtl[DTL_OUTAGE], 0, -1ULL); + else + range_tree_walk(vd->vdev_dtl[DTL_MISSING], + range_tree_add, vd->vdev_dtl[DTL_OUTAGE]); + + /* + * If the vdev was resilvering and no longer has any + * DTLs then reset its resilvering flag and dirty + * the top level so that we persist the change. + */ + if (vd->vdev_resilver_txg != 0 && + range_tree_space(vd->vdev_dtl[DTL_MISSING]) == 0 && + range_tree_space(vd->vdev_dtl[DTL_OUTAGE]) == 0) { + vd->vdev_resilver_txg = 0; + vdev_config_dirty(vd->vdev_top); + } + + mutex_exit(&vd->vdev_dtl_lock); + + if (txg != 0) + vdev_dirty(vd->vdev_top, VDD_DTL, vd, txg); + return; + } + + mutex_enter(&vd->vdev_dtl_lock); + for (t = 0; t < DTL_TYPES; t++) { + int c; + + /* account for child's outage in parent's missing map */ + int s = (t == DTL_MISSING) ? DTL_OUTAGE: t; + if (t == DTL_SCRUB) + continue; /* leaf vdevs only */ + if (t == DTL_PARTIAL) + minref = 1; /* i.e. non-zero */ + else if (vd->vdev_nparity != 0) + minref = vd->vdev_nparity + 1; /* RAID-Z */ + else + minref = vd->vdev_children; /* any kind of mirror */ + space_reftree_create(&reftree); + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + mutex_enter(&cvd->vdev_dtl_lock); + space_reftree_add_map(&reftree, cvd->vdev_dtl[s], 1); + mutex_exit(&cvd->vdev_dtl_lock); + } + space_reftree_generate_map(&reftree, vd->vdev_dtl[t], minref); + space_reftree_destroy(&reftree); + } + mutex_exit(&vd->vdev_dtl_lock); +} + +int +vdev_dtl_load(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + objset_t *mos = spa->spa_meta_objset; + int error = 0; + int c; + + if (vd->vdev_ops->vdev_op_leaf && vd->vdev_dtl_object != 0) { + ASSERT(!vd->vdev_ishole); + + error = space_map_open(&vd->vdev_dtl_sm, mos, + vd->vdev_dtl_object, 0, -1ULL, 0, &vd->vdev_dtl_lock); + if (error) + return (error); + ASSERT(vd->vdev_dtl_sm != NULL); + + mutex_enter(&vd->vdev_dtl_lock); + + /* + * Now that we've opened the space_map we need to update + * the in-core DTL. + */ + space_map_update(vd->vdev_dtl_sm); + + error = space_map_load(vd->vdev_dtl_sm, + vd->vdev_dtl[DTL_MISSING], SM_ALLOC); + mutex_exit(&vd->vdev_dtl_lock); + + return (error); + } + + for (c = 0; c < vd->vdev_children; c++) { + error = vdev_dtl_load(vd->vdev_child[c]); + if (error != 0) + break; + } + + return (error); +} + +void +vdev_destroy_unlink_zap(vdev_t *vd, uint64_t zapobj, dmu_tx_t *tx) +{ + spa_t *spa = vd->vdev_spa; + + VERIFY0(zap_destroy(spa->spa_meta_objset, zapobj, tx)); + VERIFY0(zap_remove_int(spa->spa_meta_objset, spa->spa_all_vdev_zaps, + zapobj, tx)); +} + +uint64_t +vdev_create_link_zap(vdev_t *vd, dmu_tx_t *tx) +{ + spa_t *spa = vd->vdev_spa; + uint64_t zap = zap_create(spa->spa_meta_objset, DMU_OTN_ZAP_METADATA, + DMU_OT_NONE, 0, tx); + + ASSERT(zap != 0); + VERIFY0(zap_add_int(spa->spa_meta_objset, spa->spa_all_vdev_zaps, + zap, tx)); + + return (zap); +} + +void +vdev_construct_zaps(vdev_t *vd, dmu_tx_t *tx) +{ + uint64_t i; + + if (vd->vdev_ops != &vdev_hole_ops && + vd->vdev_ops != &vdev_missing_ops && + vd->vdev_ops != &vdev_root_ops && + !vd->vdev_top->vdev_removing) { + if (vd->vdev_ops->vdev_op_leaf && vd->vdev_leaf_zap == 0) { + vd->vdev_leaf_zap = vdev_create_link_zap(vd, tx); + } + if (vd == vd->vdev_top && vd->vdev_top_zap == 0) { + vd->vdev_top_zap = vdev_create_link_zap(vd, tx); + } + } + for (i = 0; i < vd->vdev_children; i++) { + vdev_construct_zaps(vd->vdev_child[i], tx); + } +} + +void +vdev_dtl_sync(vdev_t *vd, uint64_t txg) +{ + spa_t *spa = vd->vdev_spa; + range_tree_t *rt = vd->vdev_dtl[DTL_MISSING]; + objset_t *mos = spa->spa_meta_objset; + range_tree_t *rtsync; + kmutex_t rtlock; + dmu_tx_t *tx; + uint64_t object = space_map_object(vd->vdev_dtl_sm); + + ASSERT(!vd->vdev_ishole); + ASSERT(vd->vdev_ops->vdev_op_leaf); + + tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg); + + if (vd->vdev_detached || vd->vdev_top->vdev_removing) { + mutex_enter(&vd->vdev_dtl_lock); + space_map_free(vd->vdev_dtl_sm, tx); + space_map_close(vd->vdev_dtl_sm); + vd->vdev_dtl_sm = NULL; + mutex_exit(&vd->vdev_dtl_lock); + + /* + * We only destroy the leaf ZAP for detached leaves or for + * removed log devices. Removed data devices handle leaf ZAP + * cleanup later, once cancellation is no longer possible. + */ + if (vd->vdev_leaf_zap != 0 && (vd->vdev_detached || + vd->vdev_top->vdev_islog)) { + vdev_destroy_unlink_zap(vd, vd->vdev_leaf_zap, tx); + vd->vdev_leaf_zap = 0; + } + + dmu_tx_commit(tx); + return; + } + + if (vd->vdev_dtl_sm == NULL) { + uint64_t new_object; + + new_object = space_map_alloc(mos, tx); + VERIFY3U(new_object, !=, 0); + + VERIFY0(space_map_open(&vd->vdev_dtl_sm, mos, new_object, + 0, -1ULL, 0, &vd->vdev_dtl_lock)); + ASSERT(vd->vdev_dtl_sm != NULL); + } + + mutex_init(&rtlock, NULL, MUTEX_DEFAULT, NULL); + + rtsync = range_tree_create(NULL, NULL, &rtlock); + + mutex_enter(&rtlock); + + mutex_enter(&vd->vdev_dtl_lock); + range_tree_walk(rt, range_tree_add, rtsync); + mutex_exit(&vd->vdev_dtl_lock); + + space_map_truncate(vd->vdev_dtl_sm, tx); + space_map_write(vd->vdev_dtl_sm, rtsync, SM_ALLOC, tx); + range_tree_vacate(rtsync, NULL, NULL); + + range_tree_destroy(rtsync); + + mutex_exit(&rtlock); + mutex_destroy(&rtlock); + + /* + * If the object for the space map has changed then dirty + * the top level so that we update the config. + */ + if (object != space_map_object(vd->vdev_dtl_sm)) { + zfs_dbgmsg("txg %llu, spa %s, DTL old object %llu, " + "new object %llu", txg, spa_name(spa), object, + space_map_object(vd->vdev_dtl_sm)); + vdev_config_dirty(vd->vdev_top); + } + + dmu_tx_commit(tx); + + mutex_enter(&vd->vdev_dtl_lock); + space_map_update(vd->vdev_dtl_sm); + mutex_exit(&vd->vdev_dtl_lock); +} + +/* + * Determine whether the specified vdev can be offlined/detached/removed + * without losing data. + */ +boolean_t +vdev_dtl_required(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + vdev_t *tvd = vd->vdev_top; + uint8_t cant_read = vd->vdev_cant_read; + boolean_t required; + + ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + + if (vd == spa->spa_root_vdev || vd == tvd) + return (B_TRUE); + + /* + * Temporarily mark the device as unreadable, and then determine + * whether this results in any DTL outages in the top-level vdev. + * If not, we can safely offline/detach/remove the device. + */ + vd->vdev_cant_read = B_TRUE; + vdev_dtl_reassess(tvd, 0, 0, B_FALSE); + required = !vdev_dtl_empty(tvd, DTL_OUTAGE); + vd->vdev_cant_read = cant_read; + vdev_dtl_reassess(tvd, 0, 0, B_FALSE); + + if (!required && zio_injection_enabled) + required = !!zio_handle_device_injection(vd, NULL, ECHILD); + + return (required); +} + +/* + * Determine if resilver is needed, and if so the txg range. + */ +boolean_t +vdev_resilver_needed(vdev_t *vd, uint64_t *minp, uint64_t *maxp) +{ + boolean_t needed = B_FALSE; + uint64_t thismin = UINT64_MAX; + uint64_t thismax = 0; + int c; + + if (vd->vdev_children == 0) { + mutex_enter(&vd->vdev_dtl_lock); + if (range_tree_space(vd->vdev_dtl[DTL_MISSING]) != 0 && + vdev_writeable(vd)) { + + thismin = vdev_dtl_min(vd); + thismax = vdev_dtl_max(vd); + needed = B_TRUE; + } + mutex_exit(&vd->vdev_dtl_lock); + } else { + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + uint64_t cmin, cmax; + + if (vdev_resilver_needed(cvd, &cmin, &cmax)) { + thismin = MIN(thismin, cmin); + thismax = MAX(thismax, cmax); + needed = B_TRUE; + } + } + } + + if (needed && minp) { + *minp = thismin; + *maxp = thismax; + } + return (needed); +} + +void +vdev_load(vdev_t *vd) +{ + int c; + + /* + * Recursively load all children. + */ + for (c = 0; c < vd->vdev_children; c++) + vdev_load(vd->vdev_child[c]); + + /* + * If this is a top-level vdev, initialize its metaslabs. + */ + if (vd == vd->vdev_top && !vd->vdev_ishole && + (vd->vdev_ashift == 0 || vd->vdev_asize == 0 || + vdev_metaslab_init(vd, 0) != 0)) + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + /* + * If this is a leaf vdev, load its DTL. + */ + if (vd->vdev_ops->vdev_op_leaf && vdev_dtl_load(vd) != 0) + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); +} + +/* + * The special vdev case is used for hot spares and l2cache devices. Its + * sole purpose it to set the vdev state for the associated vdev. To do this, + * we make sure that we can open the underlying device, then try to read the + * label, and make sure that the label is sane and that it hasn't been + * repurposed to another pool. + */ +int +vdev_validate_aux(vdev_t *vd) +{ + nvlist_t *label; + uint64_t guid, version; + uint64_t state; + + if (!vdev_readable(vd)) + return (0); + + if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + return (-1); + } + + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_VERSION, &version) != 0 || + !SPA_VERSION_IS_SUPPORTED(version) || + nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &guid) != 0 || + guid != vd->vdev_guid || + nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, &state) != 0) { + vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + nvlist_free(label); + return (-1); + } + + /* + * We don't actually check the pool state here. If it's in fact in + * use by another pool, we update this fact on the fly when requested. + */ + nvlist_free(label); + return (0); +} + +void +vdev_remove(vdev_t *vd, uint64_t txg) +{ + spa_t *spa = vd->vdev_spa; + objset_t *mos = spa->spa_meta_objset; + dmu_tx_t *tx; + int m, i; + + tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg); + ASSERT(vd == vd->vdev_top); + ASSERT3U(txg, ==, spa_syncing_txg(spa)); + + if (vd->vdev_ms != NULL) { + metaslab_group_t *mg = vd->vdev_mg; + + metaslab_group_histogram_verify(mg); + metaslab_class_histogram_verify(mg->mg_class); + + for (m = 0; m < vd->vdev_ms_count; m++) { + metaslab_t *msp = vd->vdev_ms[m]; + + if (msp == NULL || msp->ms_sm == NULL) + continue; + + mutex_enter(&msp->ms_lock); + /* + * If the metaslab was not loaded when the vdev + * was removed then the histogram accounting may + * not be accurate. Update the histogram information + * here so that we ensure that the metaslab group + * and metaslab class are up-to-date. + */ + metaslab_group_histogram_remove(mg, msp); + + VERIFY0(space_map_allocated(msp->ms_sm)); + space_map_free(msp->ms_sm, tx); + space_map_close(msp->ms_sm); + msp->ms_sm = NULL; + mutex_exit(&msp->ms_lock); + } + + metaslab_group_histogram_verify(mg); + metaslab_class_histogram_verify(mg->mg_class); + for (i = 0; i < RANGE_TREE_HISTOGRAM_SIZE; i++) + ASSERT0(mg->mg_histogram[i]); + + } + + if (vd->vdev_ms_array) { + (void) dmu_object_free(mos, vd->vdev_ms_array, tx); + vd->vdev_ms_array = 0; + } + + if (vd->vdev_islog && vd->vdev_top_zap != 0) { + vdev_destroy_unlink_zap(vd, vd->vdev_top_zap, tx); + vd->vdev_top_zap = 0; + } + dmu_tx_commit(tx); +} + +void +vdev_sync_done(vdev_t *vd, uint64_t txg) +{ + metaslab_t *msp; + boolean_t reassess = !txg_list_empty(&vd->vdev_ms_list, TXG_CLEAN(txg)); + + ASSERT(!vd->vdev_ishole); + + while ((msp = txg_list_remove(&vd->vdev_ms_list, TXG_CLEAN(txg)))) + metaslab_sync_done(msp, txg); + + if (reassess) + metaslab_sync_reassess(vd->vdev_mg); +} + +void +vdev_sync(vdev_t *vd, uint64_t txg) +{ + spa_t *spa = vd->vdev_spa; + vdev_t *lvd; + metaslab_t *msp; + dmu_tx_t *tx; + + ASSERT(!vd->vdev_ishole); + + if (vd->vdev_ms_array == 0 && vd->vdev_ms_shift != 0) { + ASSERT(vd == vd->vdev_top); + tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg); + vd->vdev_ms_array = dmu_object_alloc(spa->spa_meta_objset, + DMU_OT_OBJECT_ARRAY, 0, DMU_OT_NONE, 0, tx); + ASSERT(vd->vdev_ms_array != 0); + vdev_config_dirty(vd); + dmu_tx_commit(tx); + } + + /* + * Remove the metadata associated with this vdev once it's empty. + */ + if (vd->vdev_stat.vs_alloc == 0 && vd->vdev_removing) + vdev_remove(vd, txg); + + while ((msp = txg_list_remove(&vd->vdev_ms_list, txg)) != NULL) { + metaslab_sync(msp, txg); + (void) txg_list_add(&vd->vdev_ms_list, msp, TXG_CLEAN(txg)); + } + + while ((lvd = txg_list_remove(&vd->vdev_dtl_list, txg)) != NULL) + vdev_dtl_sync(lvd, txg); + + (void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg)); +} + +uint64_t +vdev_psize_to_asize(vdev_t *vd, uint64_t psize) +{ + return (vd->vdev_ops->vdev_op_asize(vd, psize)); +} + +/* + * Mark the given vdev faulted. A faulted vdev behaves as if the device could + * not be opened, and no I/O is attempted. + */ +int +vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux) +{ + vdev_t *vd, *tvd; + + spa_vdev_state_enter(spa, SCL_NONE); + + if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) + return (spa_vdev_state_exit(spa, NULL, ENODEV)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_state_exit(spa, NULL, ENOTSUP)); + + tvd = vd->vdev_top; + + /* + * If user did a 'zpool offline -f' then make the fault persist across + * reboots. + */ + if (aux == VDEV_AUX_EXTERNAL_PERSIST) { + /* + * There are two kinds of forced faults: temporary and + * persistent. Temporary faults go away at pool import, while + * persistent faults stay set. Both types of faults can be + * cleared with a zpool clear. + * + * We tell if a vdev is persistently faulted by looking at the + * ZPOOL_CONFIG_AUX_STATE nvpair. If it's set to "external" at + * import then it's a persistent fault. Otherwise, it's + * temporary. We get ZPOOL_CONFIG_AUX_STATE set to "external" + * by setting vd.vdev_stat.vs_aux to VDEV_AUX_EXTERNAL. This + * tells vdev_config_generate() (which gets run later) to set + * ZPOOL_CONFIG_AUX_STATE to "external" in the nvlist. + */ + vd->vdev_stat.vs_aux = VDEV_AUX_EXTERNAL; + vd->vdev_tmpoffline = B_FALSE; + aux = VDEV_AUX_EXTERNAL; + } else { + vd->vdev_tmpoffline = B_TRUE; + } + + /* + * We don't directly use the aux state here, but if we do a + * vdev_reopen(), we need this value to be present to remember why we + * were faulted. + */ + vd->vdev_label_aux = aux; + + /* + * Faulted state takes precedence over degraded. + */ + vd->vdev_delayed_close = B_FALSE; + vd->vdev_faulted = 1ULL; + vd->vdev_degraded = 0ULL; + vdev_set_state(vd, B_FALSE, VDEV_STATE_FAULTED, aux); + + /* + * If this device has the only valid copy of the data, then + * back off and simply mark the vdev as degraded instead. + */ + if (!tvd->vdev_islog && vd->vdev_aux == NULL && vdev_dtl_required(vd)) { + vd->vdev_degraded = 1ULL; + vd->vdev_faulted = 0ULL; + + /* + * If we reopen the device and it's not dead, only then do we + * mark it degraded. + */ + vdev_reopen(tvd); + + if (vdev_readable(vd)) + vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, aux); + } + + return (spa_vdev_state_exit(spa, vd, 0)); +} + +/* + * Mark the given vdev degraded. A degraded vdev is purely an indication to the + * user that something is wrong. The vdev continues to operate as normal as far + * as I/O is concerned. + */ +int +vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux) +{ + vdev_t *vd; + + spa_vdev_state_enter(spa, SCL_NONE); + + if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) + return (spa_vdev_state_exit(spa, NULL, ENODEV)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_state_exit(spa, NULL, ENOTSUP)); + + /* + * If the vdev is already faulted, then don't do anything. + */ + if (vd->vdev_faulted || vd->vdev_degraded) + return (spa_vdev_state_exit(spa, NULL, 0)); + + vd->vdev_degraded = 1ULL; + if (!vdev_is_dead(vd)) + vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, + aux); + + return (spa_vdev_state_exit(spa, vd, 0)); +} + +/* + * Online the given vdev. + * + * If 'ZFS_ONLINE_UNSPARE' is set, it implies two things. First, any attached + * spare device should be detached when the device finishes resilvering. + * Second, the online should be treated like a 'test' online case, so no FMA + * events are generated if the device fails to open. + */ +int +vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate) +{ + vdev_t *vd, *tvd, *pvd, *rvd = spa->spa_root_vdev; + boolean_t wasoffline; + vdev_state_t oldstate; + + spa_vdev_state_enter(spa, SCL_NONE); + + if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) + return (spa_vdev_state_exit(spa, NULL, ENODEV)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_state_exit(spa, NULL, ENOTSUP)); + + wasoffline = (vd->vdev_offline || vd->vdev_tmpoffline); + oldstate = vd->vdev_state; + + tvd = vd->vdev_top; + vd->vdev_offline = B_FALSE; + vd->vdev_tmpoffline = B_FALSE; + vd->vdev_checkremove = !!(flags & ZFS_ONLINE_CHECKREMOVE); + vd->vdev_forcefault = !!(flags & ZFS_ONLINE_FORCEFAULT); + + /* XXX - L2ARC 1.0 does not support expansion */ + if (!vd->vdev_aux) { + for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) + pvd->vdev_expanding = !!(flags & ZFS_ONLINE_EXPAND); + } + + vdev_reopen(tvd); + vd->vdev_checkremove = vd->vdev_forcefault = B_FALSE; + + if (!vd->vdev_aux) { + for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) + pvd->vdev_expanding = B_FALSE; + } + + if (newstate) + *newstate = vd->vdev_state; + if ((flags & ZFS_ONLINE_UNSPARE) && + !vdev_is_dead(vd) && vd->vdev_parent && + vd->vdev_parent->vdev_ops == &vdev_spare_ops && + vd->vdev_parent->vdev_child[0] == vd) + vd->vdev_unspare = B_TRUE; + + if ((flags & ZFS_ONLINE_EXPAND) || spa->spa_autoexpand) { + + /* XXX - L2ARC 1.0 does not support expansion */ + if (vd->vdev_aux) + return (spa_vdev_state_exit(spa, vd, ENOTSUP)); + spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); + } + + if (wasoffline || + (oldstate < VDEV_STATE_DEGRADED && + vd->vdev_state >= VDEV_STATE_DEGRADED)) + spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_ONLINE); + + return (spa_vdev_state_exit(spa, vd, 0)); +} + +static int +vdev_offline_locked(spa_t *spa, uint64_t guid, uint64_t flags) +{ + vdev_t *vd, *tvd; + int error = 0; + uint64_t generation; + metaslab_group_t *mg; + +top: + spa_vdev_state_enter(spa, SCL_ALLOC); + + if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) + return (spa_vdev_state_exit(spa, NULL, ENODEV)); + + if (!vd->vdev_ops->vdev_op_leaf) + return (spa_vdev_state_exit(spa, NULL, ENOTSUP)); + + tvd = vd->vdev_top; + mg = tvd->vdev_mg; + generation = spa->spa_config_generation + 1; + + /* + * If the device isn't already offline, try to offline it. + */ + if (!vd->vdev_offline) { + /* + * If this device has the only valid copy of some data, + * don't allow it to be offlined. Log devices are always + * expendable. + */ + if (!tvd->vdev_islog && vd->vdev_aux == NULL && + vdev_dtl_required(vd)) + return (spa_vdev_state_exit(spa, NULL, EBUSY)); + + /* + * If the top-level is a slog and it has had allocations + * then proceed. We check that the vdev's metaslab group + * is not NULL since it's possible that we may have just + * added this vdev but not yet initialized its metaslabs. + */ + if (tvd->vdev_islog && mg != NULL) { + /* + * Prevent any future allocations. + */ + metaslab_group_passivate(mg); + (void) spa_vdev_state_exit(spa, vd, 0); + + error = spa_offline_log(spa); + + spa_vdev_state_enter(spa, SCL_ALLOC); + + /* + * Check to see if the config has changed. + */ + if (error || generation != spa->spa_config_generation) { + metaslab_group_activate(mg); + if (error) + return (spa_vdev_state_exit(spa, + vd, error)); + (void) spa_vdev_state_exit(spa, vd, 0); + goto top; + } + ASSERT0(tvd->vdev_stat.vs_alloc); + } + + /* + * Offline this device and reopen its top-level vdev. + * If the top-level vdev is a log device then just offline + * it. Otherwise, if this action results in the top-level + * vdev becoming unusable, undo it and fail the request. + */ + vd->vdev_offline = B_TRUE; + vdev_reopen(tvd); + + if (!tvd->vdev_islog && vd->vdev_aux == NULL && + vdev_is_dead(tvd)) { + vd->vdev_offline = B_FALSE; + vdev_reopen(tvd); + return (spa_vdev_state_exit(spa, NULL, EBUSY)); + } + + /* + * Add the device back into the metaslab rotor so that + * once we online the device it's open for business. + */ + if (tvd->vdev_islog && mg != NULL) + metaslab_group_activate(mg); + } + + vd->vdev_tmpoffline = !!(flags & ZFS_OFFLINE_TEMPORARY); + + return (spa_vdev_state_exit(spa, vd, 0)); +} + +int +vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags) +{ + int error; + + mutex_enter(&spa->spa_vdev_top_lock); + error = vdev_offline_locked(spa, guid, flags); + mutex_exit(&spa->spa_vdev_top_lock); + + return (error); +} + +/* + * Clear the error counts associated with this vdev. Unlike vdev_online() and + * vdev_offline(), we assume the spa config is locked. We also clear all + * children. If 'vd' is NULL, then the user wants to clear all vdevs. + */ +void +vdev_clear(spa_t *spa, vdev_t *vd) +{ + vdev_t *rvd = spa->spa_root_vdev; + int c; + + ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + + if (vd == NULL) + vd = rvd; + + vd->vdev_stat.vs_read_errors = 0; + vd->vdev_stat.vs_write_errors = 0; + vd->vdev_stat.vs_checksum_errors = 0; + + for (c = 0; c < vd->vdev_children; c++) + vdev_clear(spa, vd->vdev_child[c]); + + /* + * If we're in the FAULTED state or have experienced failed I/O, then + * clear the persistent state and attempt to reopen the device. We + * also mark the vdev config dirty, so that the new faulted state is + * written out to disk. + */ + if (vd->vdev_faulted || vd->vdev_degraded || + !vdev_readable(vd) || !vdev_writeable(vd)) { + /* + * When reopening in response to a clear event, it may be due to + * a fmadm repair request. In this case, if the device is + * still broken, we want to still post the ereport again. + */ + vd->vdev_forcefault = B_TRUE; + + vd->vdev_faulted = vd->vdev_degraded = 0ULL; + vd->vdev_cant_read = B_FALSE; + vd->vdev_cant_write = B_FALSE; + vd->vdev_stat.vs_aux = 0; + + vdev_reopen(vd == rvd ? rvd : vd->vdev_top); + + vd->vdev_forcefault = B_FALSE; + + if (vd != rvd && vdev_writeable(vd->vdev_top)) + vdev_state_dirty(vd->vdev_top); + + if (vd->vdev_aux == NULL && !vdev_is_dead(vd)) + spa_async_request(spa, SPA_ASYNC_RESILVER); + + spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_CLEAR); + } + + /* + * When clearing a FMA-diagnosed fault, we always want to + * unspare the device, as we assume that the original spare was + * done in response to the FMA fault. + */ + if (!vdev_is_dead(vd) && vd->vdev_parent != NULL && + vd->vdev_parent->vdev_ops == &vdev_spare_ops && + vd->vdev_parent->vdev_child[0] == vd) + vd->vdev_unspare = B_TRUE; +} + +boolean_t +vdev_is_dead(vdev_t *vd) +{ + /* + * Holes and missing devices are always considered "dead". + * This simplifies the code since we don't have to check for + * these types of devices in the various code paths. + * Instead we rely on the fact that we skip over dead devices + * before issuing I/O to them. + */ + return (vd->vdev_state < VDEV_STATE_DEGRADED || vd->vdev_ishole || + vd->vdev_ops == &vdev_missing_ops); +} + +boolean_t +vdev_readable(vdev_t *vd) +{ + return (!vdev_is_dead(vd) && !vd->vdev_cant_read); +} + +boolean_t +vdev_writeable(vdev_t *vd) +{ + return (!vdev_is_dead(vd) && !vd->vdev_cant_write); +} + +boolean_t +vdev_allocatable(vdev_t *vd) +{ + uint64_t state = vd->vdev_state; + + /* + * We currently allow allocations from vdevs which may be in the + * process of reopening (i.e. VDEV_STATE_CLOSED). If the device + * fails to reopen then we'll catch it later when we're holding + * the proper locks. Note that we have to get the vdev state + * in a local variable because although it changes atomically, + * we're asking two separate questions about it. + */ + return (!(state < VDEV_STATE_DEGRADED && state != VDEV_STATE_CLOSED) && + !vd->vdev_cant_write && !vd->vdev_ishole && + vd->vdev_mg->mg_initialized); +} + +boolean_t +vdev_accessible(vdev_t *vd, zio_t *zio) +{ + ASSERT(zio->io_vd == vd); + + if (vdev_is_dead(vd) || vd->vdev_remove_wanted) + return (B_FALSE); + + if (zio->io_type == ZIO_TYPE_READ) + return (!vd->vdev_cant_read); + + if (zio->io_type == ZIO_TYPE_WRITE) + return (!vd->vdev_cant_write); + + return (B_TRUE); +} + +static void +vdev_get_child_stat(vdev_t *cvd, vdev_stat_t *vs, vdev_stat_t *cvs) +{ + int t; + for (t = 0; t < ZIO_TYPES; t++) { + vs->vs_ops[t] += cvs->vs_ops[t]; + vs->vs_bytes[t] += cvs->vs_bytes[t]; + } + + cvs->vs_scan_removing = cvd->vdev_removing; +} + +/* + * Get extended stats + */ +static void +vdev_get_child_stat_ex(vdev_t *cvd, vdev_stat_ex_t *vsx, vdev_stat_ex_t *cvsx) +{ + int t, b; + for (t = 0; t < ZIO_TYPES; t++) { + for (b = 0; b < ARRAY_SIZE(vsx->vsx_disk_histo[0]); b++) + vsx->vsx_disk_histo[t][b] += cvsx->vsx_disk_histo[t][b]; + + for (b = 0; b < ARRAY_SIZE(vsx->vsx_total_histo[0]); b++) { + vsx->vsx_total_histo[t][b] += + cvsx->vsx_total_histo[t][b]; + } + } + + for (t = 0; t < ZIO_PRIORITY_NUM_QUEUEABLE; t++) { + for (b = 0; b < ARRAY_SIZE(vsx->vsx_queue_histo[0]); b++) { + vsx->vsx_queue_histo[t][b] += + cvsx->vsx_queue_histo[t][b]; + } + vsx->vsx_active_queue[t] += cvsx->vsx_active_queue[t]; + vsx->vsx_pend_queue[t] += cvsx->vsx_pend_queue[t]; + + for (b = 0; b < ARRAY_SIZE(vsx->vsx_ind_histo[0]); b++) + vsx->vsx_ind_histo[t][b] += cvsx->vsx_ind_histo[t][b]; + + for (b = 0; b < ARRAY_SIZE(vsx->vsx_agg_histo[0]); b++) + vsx->vsx_agg_histo[t][b] += cvsx->vsx_agg_histo[t][b]; + } + +} + +/* + * Get statistics for the given vdev. + */ +static void +vdev_get_stats_ex_impl(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx) +{ + int c, t; + /* + * If we're getting stats on the root vdev, aggregate the I/O counts + * over all top-level vdevs (i.e. the direct children of the root). + */ + if (!vd->vdev_ops->vdev_op_leaf) { + if (vs) { + memset(vs->vs_ops, 0, sizeof (vs->vs_ops)); + memset(vs->vs_bytes, 0, sizeof (vs->vs_bytes)); + } + if (vsx) + memset(vsx, 0, sizeof (*vsx)); + + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + vdev_stat_t *cvs = &cvd->vdev_stat; + vdev_stat_ex_t *cvsx = &cvd->vdev_stat_ex; + + vdev_get_stats_ex_impl(cvd, cvs, cvsx); + if (vs) + vdev_get_child_stat(cvd, vs, cvs); + if (vsx) + vdev_get_child_stat_ex(cvd, vsx, cvsx); + + } + } else { + /* + * We're a leaf. Just copy our ZIO active queue stats in. The + * other leaf stats are updated in vdev_stat_update(). + */ + if (!vsx) + return; + + memcpy(vsx, &vd->vdev_stat_ex, sizeof (vd->vdev_stat_ex)); + + for (t = 0; t < ARRAY_SIZE(vd->vdev_queue.vq_class); t++) { + vsx->vsx_active_queue[t] = + vd->vdev_queue.vq_class[t].vqc_active; + vsx->vsx_pend_queue[t] = avl_numnodes( + &vd->vdev_queue.vq_class[t].vqc_queued_tree); + } + } +} + +void +vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx) +{ + vdev_t *tvd = vd->vdev_top; + mutex_enter(&vd->vdev_stat_lock); + if (vs) { + bcopy(&vd->vdev_stat, vs, sizeof (*vs)); + vs->vs_timestamp = gethrtime() - vs->vs_timestamp; + vs->vs_state = vd->vdev_state; + vs->vs_rsize = vdev_get_min_asize(vd); + if (vd->vdev_ops->vdev_op_leaf) + vs->vs_rsize += VDEV_LABEL_START_SIZE + + VDEV_LABEL_END_SIZE; + /* + * Report expandable space on top-level, non-auxillary devices + * only. The expandable space is reported in terms of metaslab + * sized units since that determines how much space the pool + * can expand. + */ + if (vd->vdev_aux == NULL && tvd != NULL) { + vs->vs_esize = P2ALIGN( + vd->vdev_max_asize - vd->vdev_asize, + 1ULL << tvd->vdev_ms_shift); + } + vs->vs_esize = vd->vdev_max_asize - vd->vdev_asize; + if (vd->vdev_aux == NULL && vd == vd->vdev_top && + !vd->vdev_ishole) { + vs->vs_fragmentation = vd->vdev_mg->mg_fragmentation; + } + } + + ASSERT(spa_config_held(vd->vdev_spa, SCL_ALL, RW_READER) != 0); + vdev_get_stats_ex_impl(vd, vs, vsx); + mutex_exit(&vd->vdev_stat_lock); +} + +void +vdev_get_stats(vdev_t *vd, vdev_stat_t *vs) +{ + return (vdev_get_stats_ex(vd, vs, NULL)); +} + +void +vdev_clear_stats(vdev_t *vd) +{ + mutex_enter(&vd->vdev_stat_lock); + vd->vdev_stat.vs_space = 0; + vd->vdev_stat.vs_dspace = 0; + vd->vdev_stat.vs_alloc = 0; + mutex_exit(&vd->vdev_stat_lock); +} + +void +vdev_scan_stat_init(vdev_t *vd) +{ + vdev_stat_t *vs = &vd->vdev_stat; + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_scan_stat_init(vd->vdev_child[c]); + + mutex_enter(&vd->vdev_stat_lock); + vs->vs_scan_processed = 0; + mutex_exit(&vd->vdev_stat_lock); +} + +void +vdev_stat_update(zio_t *zio, uint64_t psize) +{ + spa_t *spa = zio->io_spa; + vdev_t *rvd = spa->spa_root_vdev; + vdev_t *vd = zio->io_vd ? zio->io_vd : rvd; + vdev_t *pvd; + uint64_t txg = zio->io_txg; + vdev_stat_t *vs = &vd->vdev_stat; + vdev_stat_ex_t *vsx = &vd->vdev_stat_ex; + zio_type_t type = zio->io_type; + int flags = zio->io_flags; + + /* + * If this i/o is a gang leader, it didn't do any actual work. + */ + if (zio->io_gang_tree) + return; + + if (zio->io_error == 0) { + /* + * If this is a root i/o, don't count it -- we've already + * counted the top-level vdevs, and vdev_get_stats() will + * aggregate them when asked. This reduces contention on + * the root vdev_stat_lock and implicitly handles blocks + * that compress away to holes, for which there is no i/o. + * (Holes never create vdev children, so all the counters + * remain zero, which is what we want.) + * + * Note: this only applies to successful i/o (io_error == 0) + * because unlike i/o counts, errors are not additive. + * When reading a ditto block, for example, failure of + * one top-level vdev does not imply a root-level error. + */ + if (vd == rvd) + return; + + ASSERT(vd == zio->io_vd); + + if (flags & ZIO_FLAG_IO_BYPASS) + return; + + mutex_enter(&vd->vdev_stat_lock); + + if (flags & ZIO_FLAG_IO_REPAIR) { + if (flags & ZIO_FLAG_SCAN_THREAD) { + dsl_scan_phys_t *scn_phys = + &spa->spa_dsl_pool->dp_scan->scn_phys; + uint64_t *processed = &scn_phys->scn_processed; + + /* XXX cleanup? */ + if (vd->vdev_ops->vdev_op_leaf) + atomic_add_64(processed, psize); + vs->vs_scan_processed += psize; + } + + if (flags & ZIO_FLAG_SELF_HEAL) + vs->vs_self_healed += psize; + } + + /* + * The bytes/ops/histograms are recorded at the leaf level and + * aggregated into the higher level vdevs in vdev_get_stats(). + */ + if (vd->vdev_ops->vdev_op_leaf && + (zio->io_priority < ZIO_PRIORITY_NUM_QUEUEABLE)) { + + vs->vs_ops[type]++; + vs->vs_bytes[type] += psize; + + if (flags & ZIO_FLAG_DELEGATED) { + vsx->vsx_agg_histo[zio->io_priority] + [RQ_HISTO(zio->io_size)]++; + } else { + vsx->vsx_ind_histo[zio->io_priority] + [RQ_HISTO(zio->io_size)]++; + } + + if (zio->io_delta && zio->io_delay) { + vsx->vsx_queue_histo[zio->io_priority] + [L_HISTO(zio->io_delta - zio->io_delay)]++; + vsx->vsx_disk_histo[type] + [L_HISTO(zio->io_delay)]++; + vsx->vsx_total_histo[type] + [L_HISTO(zio->io_delta)]++; + } + } + + mutex_exit(&vd->vdev_stat_lock); + return; + } + + if (flags & ZIO_FLAG_SPECULATIVE) + return; + + /* + * If this is an I/O error that is going to be retried, then ignore the + * error. Otherwise, the user may interpret B_FAILFAST I/O errors as + * hard errors, when in reality they can happen for any number of + * innocuous reasons (bus resets, MPxIO link failure, etc). + */ + if (zio->io_error == EIO && + !(zio->io_flags & ZIO_FLAG_IO_RETRY)) + return; + + /* + * Intent logs writes won't propagate their error to the root + * I/O so don't mark these types of failures as pool-level + * errors. + */ + if (zio->io_vd == NULL && (zio->io_flags & ZIO_FLAG_DONT_PROPAGATE)) + return; + + mutex_enter(&vd->vdev_stat_lock); + if (type == ZIO_TYPE_READ && !vdev_is_dead(vd)) { + if (zio->io_error == ECKSUM) + vs->vs_checksum_errors++; + else + vs->vs_read_errors++; + } + if (type == ZIO_TYPE_WRITE && !vdev_is_dead(vd)) + vs->vs_write_errors++; + mutex_exit(&vd->vdev_stat_lock); + + if (type == ZIO_TYPE_WRITE && txg != 0 && + (!(flags & ZIO_FLAG_IO_REPAIR) || + (flags & ZIO_FLAG_SCAN_THREAD) || + spa->spa_claiming)) { + /* + * This is either a normal write (not a repair), or it's + * a repair induced by the scrub thread, or it's a repair + * made by zil_claim() during spa_load() in the first txg. + * In the normal case, we commit the DTL change in the same + * txg as the block was born. In the scrub-induced repair + * case, we know that scrubs run in first-pass syncing context, + * so we commit the DTL change in spa_syncing_txg(spa). + * In the zil_claim() case, we commit in spa_first_txg(spa). + * + * We currently do not make DTL entries for failed spontaneous + * self-healing writes triggered by normal (non-scrubbing) + * reads, because we have no transactional context in which to + * do so -- and it's not clear that it'd be desirable anyway. + */ + if (vd->vdev_ops->vdev_op_leaf) { + uint64_t commit_txg = txg; + if (flags & ZIO_FLAG_SCAN_THREAD) { + ASSERT(flags & ZIO_FLAG_IO_REPAIR); + ASSERT(spa_sync_pass(spa) == 1); + vdev_dtl_dirty(vd, DTL_SCRUB, txg, 1); + commit_txg = spa_syncing_txg(spa); + } else if (spa->spa_claiming) { + ASSERT(flags & ZIO_FLAG_IO_REPAIR); + commit_txg = spa_first_txg(spa); + } + ASSERT(commit_txg >= spa_syncing_txg(spa)); + if (vdev_dtl_contains(vd, DTL_MISSING, txg, 1)) + return; + for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) + vdev_dtl_dirty(pvd, DTL_PARTIAL, txg, 1); + vdev_dirty(vd->vdev_top, VDD_DTL, vd, commit_txg); + } + if (vd != rvd) + vdev_dtl_dirty(vd, DTL_MISSING, txg, 1); + } +} + +/* + * Update the in-core space usage stats for this vdev, its metaslab class, + * and the root vdev. + */ +void +vdev_space_update(vdev_t *vd, int64_t alloc_delta, int64_t defer_delta, + int64_t space_delta) +{ + int64_t dspace_delta = space_delta; + spa_t *spa = vd->vdev_spa; + vdev_t *rvd = spa->spa_root_vdev; + metaslab_group_t *mg = vd->vdev_mg; + metaslab_class_t *mc = mg ? mg->mg_class : NULL; + + ASSERT(vd == vd->vdev_top); + + /* + * Apply the inverse of the psize-to-asize (ie. RAID-Z) space-expansion + * factor. We must calculate this here and not at the root vdev + * because the root vdev's psize-to-asize is simply the max of its + * childrens', thus not accurate enough for us. + */ + ASSERT((dspace_delta & (SPA_MINBLOCKSIZE-1)) == 0); + ASSERT(vd->vdev_deflate_ratio != 0 || vd->vdev_isl2cache); + dspace_delta = (dspace_delta >> SPA_MINBLOCKSHIFT) * + vd->vdev_deflate_ratio; + + mutex_enter(&vd->vdev_stat_lock); + vd->vdev_stat.vs_alloc += alloc_delta; + vd->vdev_stat.vs_space += space_delta; + vd->vdev_stat.vs_dspace += dspace_delta; + mutex_exit(&vd->vdev_stat_lock); + + if (mc == spa_normal_class(spa)) { + mutex_enter(&rvd->vdev_stat_lock); + rvd->vdev_stat.vs_alloc += alloc_delta; + rvd->vdev_stat.vs_space += space_delta; + rvd->vdev_stat.vs_dspace += dspace_delta; + mutex_exit(&rvd->vdev_stat_lock); + } + + if (mc != NULL) { + ASSERT(rvd == vd->vdev_parent); + ASSERT(vd->vdev_ms_count != 0); + + metaslab_class_space_update(mc, + alloc_delta, defer_delta, space_delta, dspace_delta); + } +} + +/* + * Mark a top-level vdev's config as dirty, placing it on the dirty list + * so that it will be written out next time the vdev configuration is synced. + * If the root vdev is specified (vdev_top == NULL), dirty all top-level vdevs. + */ +void +vdev_config_dirty(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + vdev_t *rvd = spa->spa_root_vdev; + int c; + + ASSERT(spa_writeable(spa)); + + /* + * If this is an aux vdev (as with l2cache and spare devices), then we + * update the vdev config manually and set the sync flag. + */ + if (vd->vdev_aux != NULL) { + spa_aux_vdev_t *sav = vd->vdev_aux; + nvlist_t **aux; + uint_t naux; + + for (c = 0; c < sav->sav_count; c++) { + if (sav->sav_vdevs[c] == vd) + break; + } + + if (c == sav->sav_count) { + /* + * We're being removed. There's nothing more to do. + */ + ASSERT(sav->sav_sync == B_TRUE); + return; + } + + sav->sav_sync = B_TRUE; + + if (nvlist_lookup_nvlist_array(sav->sav_config, + ZPOOL_CONFIG_L2CACHE, &aux, &naux) != 0) { + VERIFY(nvlist_lookup_nvlist_array(sav->sav_config, + ZPOOL_CONFIG_SPARES, &aux, &naux) == 0); + } + + ASSERT(c < naux); + + /* + * Setting the nvlist in the middle if the array is a little + * sketchy, but it will work. + */ + nvlist_free(aux[c]); + aux[c] = vdev_config_generate(spa, vd, B_TRUE, 0); + + return; + } + + /* + * The dirty list is protected by the SCL_CONFIG lock. The caller + * must either hold SCL_CONFIG as writer, or must be the sync thread + * (which holds SCL_CONFIG as reader). There's only one sync thread, + * so this is sufficient to ensure mutual exclusion. + */ + ASSERT(spa_config_held(spa, SCL_CONFIG, RW_WRITER) || + (dsl_pool_sync_context(spa_get_dsl(spa)) && + spa_config_held(spa, SCL_CONFIG, RW_READER))); + + if (vd == rvd) { + for (c = 0; c < rvd->vdev_children; c++) + vdev_config_dirty(rvd->vdev_child[c]); + } else { + ASSERT(vd == vd->vdev_top); + + if (!list_link_active(&vd->vdev_config_dirty_node) && + !vd->vdev_ishole) + list_insert_head(&spa->spa_config_dirty_list, vd); + } +} + +void +vdev_config_clean(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + + ASSERT(spa_config_held(spa, SCL_CONFIG, RW_WRITER) || + (dsl_pool_sync_context(spa_get_dsl(spa)) && + spa_config_held(spa, SCL_CONFIG, RW_READER))); + + ASSERT(list_link_active(&vd->vdev_config_dirty_node)); + list_remove(&spa->spa_config_dirty_list, vd); +} + +/* + * Mark a top-level vdev's state as dirty, so that the next pass of + * spa_sync() can convert this into vdev_config_dirty(). We distinguish + * the state changes from larger config changes because they require + * much less locking, and are often needed for administrative actions. + */ +void +vdev_state_dirty(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + + ASSERT(spa_writeable(spa)); + ASSERT(vd == vd->vdev_top); + + /* + * The state list is protected by the SCL_STATE lock. The caller + * must either hold SCL_STATE as writer, or must be the sync thread + * (which holds SCL_STATE as reader). There's only one sync thread, + * so this is sufficient to ensure mutual exclusion. + */ + ASSERT(spa_config_held(spa, SCL_STATE, RW_WRITER) || + (dsl_pool_sync_context(spa_get_dsl(spa)) && + spa_config_held(spa, SCL_STATE, RW_READER))); + + if (!list_link_active(&vd->vdev_state_dirty_node) && !vd->vdev_ishole) + list_insert_head(&spa->spa_state_dirty_list, vd); +} + +void +vdev_state_clean(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + + ASSERT(spa_config_held(spa, SCL_STATE, RW_WRITER) || + (dsl_pool_sync_context(spa_get_dsl(spa)) && + spa_config_held(spa, SCL_STATE, RW_READER))); + + ASSERT(list_link_active(&vd->vdev_state_dirty_node)); + list_remove(&spa->spa_state_dirty_list, vd); +} + +/* + * Propagate vdev state up from children to parent. + */ +void +vdev_propagate_state(vdev_t *vd) +{ + spa_t *spa = vd->vdev_spa; + vdev_t *rvd = spa->spa_root_vdev; + int degraded = 0, faulted = 0; + int corrupted = 0; + vdev_t *child; + int c; + + if (vd->vdev_children > 0) { + for (c = 0; c < vd->vdev_children; c++) { + child = vd->vdev_child[c]; + + /* + * Don't factor holes into the decision. + */ + if (child->vdev_ishole) + continue; + + if (!vdev_readable(child) || + (!vdev_writeable(child) && spa_writeable(spa))) { + /* + * Root special: if there is a top-level log + * device, treat the root vdev as if it were + * degraded. + */ + if (child->vdev_islog && vd == rvd) + degraded++; + else + faulted++; + } else if (child->vdev_state <= VDEV_STATE_DEGRADED) { + degraded++; + } + + if (child->vdev_stat.vs_aux == VDEV_AUX_CORRUPT_DATA) + corrupted++; + } + + vd->vdev_ops->vdev_op_state_change(vd, faulted, degraded); + + /* + * Root special: if there is a top-level vdev that cannot be + * opened due to corrupted metadata, then propagate the root + * vdev's aux state as 'corrupt' rather than 'insufficient + * replicas'. + */ + if (corrupted && vd == rvd && + rvd->vdev_state == VDEV_STATE_CANT_OPEN) + vdev_set_state(rvd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_CORRUPT_DATA); + } + + if (vd->vdev_parent) + vdev_propagate_state(vd->vdev_parent); +} + +/* + * Set a vdev's state. If this is during an open, we don't update the parent + * state, because we're in the process of opening children depth-first. + * Otherwise, we propagate the change to the parent. + * + * If this routine places a device in a faulted state, an appropriate ereport is + * generated. + */ +void +vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, vdev_aux_t aux) +{ + uint64_t save_state; + spa_t *spa = vd->vdev_spa; + + if (state == vd->vdev_state) { + /* + * Since vdev_offline() code path is already in an offline + * state we can miss a statechange event to OFFLINE. Check + * the previous state to catch this condition. + */ + if (vd->vdev_ops->vdev_op_leaf && + (state == VDEV_STATE_OFFLINE) && + (vd->vdev_prevstate >= VDEV_STATE_FAULTED)) { + /* post an offline state change */ + zfs_post_state_change(spa, vd, vd->vdev_prevstate); + } + vd->vdev_stat.vs_aux = aux; + return; + } + + save_state = vd->vdev_state; + + vd->vdev_state = state; + vd->vdev_stat.vs_aux = aux; + + /* + * If we are setting the vdev state to anything but an open state, then + * always close the underlying device unless the device has requested + * a delayed close (i.e. we're about to remove or fault the device). + * Otherwise, we keep accessible but invalid devices open forever. + * We don't call vdev_close() itself, because that implies some extra + * checks (offline, etc) that we don't want here. This is limited to + * leaf devices, because otherwise closing the device will affect other + * children. + */ + if (!vd->vdev_delayed_close && vdev_is_dead(vd) && + vd->vdev_ops->vdev_op_leaf) + vd->vdev_ops->vdev_op_close(vd); + + if (vd->vdev_removed && + state == VDEV_STATE_CANT_OPEN && + (aux == VDEV_AUX_OPEN_FAILED || vd->vdev_checkremove)) { + /* + * If the previous state is set to VDEV_STATE_REMOVED, then this + * device was previously marked removed and someone attempted to + * reopen it. If this failed due to a nonexistent device, then + * keep the device in the REMOVED state. We also let this be if + * it is one of our special test online cases, which is only + * attempting to online the device and shouldn't generate an FMA + * fault. + */ + vd->vdev_state = VDEV_STATE_REMOVED; + vd->vdev_stat.vs_aux = VDEV_AUX_NONE; + } else if (state == VDEV_STATE_REMOVED) { + vd->vdev_removed = B_TRUE; + } else if (state == VDEV_STATE_CANT_OPEN) { + /* + * If we fail to open a vdev during an import or recovery, we + * mark it as "not available", which signifies that it was + * never there to begin with. Failure to open such a device + * is not considered an error. + */ + if ((spa_load_state(spa) == SPA_LOAD_IMPORT || + spa_load_state(spa) == SPA_LOAD_RECOVER) && + vd->vdev_ops->vdev_op_leaf) + vd->vdev_not_present = 1; + + /* + * Post the appropriate ereport. If the 'prevstate' field is + * set to something other than VDEV_STATE_UNKNOWN, it indicates + * that this is part of a vdev_reopen(). In this case, we don't + * want to post the ereport if the device was already in the + * CANT_OPEN state beforehand. + * + * If the 'checkremove' flag is set, then this is an attempt to + * online the device in response to an insertion event. If we + * hit this case, then we have detected an insertion event for a + * faulted or offline device that wasn't in the removed state. + * In this scenario, we don't post an ereport because we are + * about to replace the device, or attempt an online with + * vdev_forcefault, which will generate the fault for us. + */ + if ((vd->vdev_prevstate != state || vd->vdev_forcefault) && + !vd->vdev_not_present && !vd->vdev_checkremove && + vd != spa->spa_root_vdev) { + const char *class; + + switch (aux) { + case VDEV_AUX_OPEN_FAILED: + class = FM_EREPORT_ZFS_DEVICE_OPEN_FAILED; + break; + case VDEV_AUX_CORRUPT_DATA: + class = FM_EREPORT_ZFS_DEVICE_CORRUPT_DATA; + break; + case VDEV_AUX_NO_REPLICAS: + class = FM_EREPORT_ZFS_DEVICE_NO_REPLICAS; + break; + case VDEV_AUX_BAD_GUID_SUM: + class = FM_EREPORT_ZFS_DEVICE_BAD_GUID_SUM; + break; + case VDEV_AUX_TOO_SMALL: + class = FM_EREPORT_ZFS_DEVICE_TOO_SMALL; + break; + case VDEV_AUX_BAD_LABEL: + class = FM_EREPORT_ZFS_DEVICE_BAD_LABEL; + break; + case VDEV_AUX_BAD_ASHIFT: + class = FM_EREPORT_ZFS_DEVICE_BAD_ASHIFT; + break; + default: + class = FM_EREPORT_ZFS_DEVICE_UNKNOWN; + } + + zfs_ereport_post(class, spa, vd, NULL, save_state, 0); + } + + /* Erase any notion of persistent removed state */ + vd->vdev_removed = B_FALSE; + } else { + vd->vdev_removed = B_FALSE; + } + + /* + * Notify ZED of any significant state-change on a leaf vdev. + * + */ + if (vd->vdev_ops->vdev_op_leaf) { + /* preserve original state from a vdev_reopen() */ + if ((vd->vdev_prevstate != VDEV_STATE_UNKNOWN) && + (vd->vdev_prevstate != vd->vdev_state) && + (save_state <= VDEV_STATE_CLOSED)) + save_state = vd->vdev_prevstate; + + /* filter out state change due to initial vdev_open */ + if (save_state > VDEV_STATE_CLOSED) + zfs_post_state_change(spa, vd, save_state); + } + + if (!isopen && vd->vdev_parent) + vdev_propagate_state(vd->vdev_parent); +} + +/* + * Check the vdev configuration to ensure that it's capable of supporting + * a root pool. We do not support partial configuration. + */ +boolean_t +vdev_is_bootable(vdev_t *vd) +{ + if (!vd->vdev_ops->vdev_op_leaf) { + const char *vdev_type = vd->vdev_ops->vdev_op_type; + + if (strcmp(vdev_type, VDEV_TYPE_MISSING) == 0) + return (B_FALSE); + } + + for (int c = 0; c < vd->vdev_children; c++) { + if (!vdev_is_bootable(vd->vdev_child[c])) + return (B_FALSE); + } + return (B_TRUE); +} + +/* + * Load the state from the original vdev tree (ovd) which + * we've retrieved from the MOS config object. If the original + * vdev was offline or faulted then we transfer that state to the + * device in the current vdev tree (nvd). + */ +void +vdev_load_log_state(vdev_t *nvd, vdev_t *ovd) +{ + int c; + + ASSERT(nvd->vdev_top->vdev_islog); + ASSERT(spa_config_held(nvd->vdev_spa, + SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + ASSERT3U(nvd->vdev_guid, ==, ovd->vdev_guid); + + for (c = 0; c < nvd->vdev_children; c++) + vdev_load_log_state(nvd->vdev_child[c], ovd->vdev_child[c]); + + if (nvd->vdev_ops->vdev_op_leaf) { + /* + * Restore the persistent vdev state + */ + nvd->vdev_offline = ovd->vdev_offline; + nvd->vdev_faulted = ovd->vdev_faulted; + nvd->vdev_degraded = ovd->vdev_degraded; + nvd->vdev_removed = ovd->vdev_removed; + } +} + +/* + * Determine if a log device has valid content. If the vdev was + * removed or faulted in the MOS config then we know that + * the content on the log device has already been written to the pool. + */ +boolean_t +vdev_log_state_valid(vdev_t *vd) +{ + int c; + + if (vd->vdev_ops->vdev_op_leaf && !vd->vdev_faulted && + !vd->vdev_removed) + return (B_TRUE); + + for (c = 0; c < vd->vdev_children; c++) + if (vdev_log_state_valid(vd->vdev_child[c])) + return (B_TRUE); + + return (B_FALSE); +} + +/* + * Expand a vdev if possible. + */ +void +vdev_expand(vdev_t *vd, uint64_t txg) +{ + ASSERT(vd->vdev_top == vd); + ASSERT(spa_config_held(vd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + if ((vd->vdev_asize >> vd->vdev_ms_shift) > vd->vdev_ms_count) { + VERIFY(vdev_metaslab_init(vd, txg) == 0); + vdev_config_dirty(vd); + } +} + +/* + * Split a vdev. + */ +void +vdev_split(vdev_t *vd) +{ + vdev_t *cvd, *pvd = vd->vdev_parent; + + vdev_remove_child(pvd, vd); + vdev_compact_children(pvd); + + cvd = pvd->vdev_child[0]; + if (pvd->vdev_children == 1) { + vdev_remove_parent(cvd); + cvd->vdev_splitting = B_TRUE; + } + vdev_propagate_state(cvd); +} + +void +vdev_deadman(vdev_t *vd) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + + vdev_deadman(cvd); + } + + if (vd->vdev_ops->vdev_op_leaf) { + vdev_queue_t *vq = &vd->vdev_queue; + + mutex_enter(&vq->vq_lock); + if (avl_numnodes(&vq->vq_active_tree) > 0) { + spa_t *spa = vd->vdev_spa; + zio_t *fio; + uint64_t delta; + + /* + * Look at the head of all the pending queues, + * if any I/O has been outstanding for longer than + * the spa_deadman_synctime we log a zevent. + */ + fio = avl_first(&vq->vq_active_tree); + delta = gethrtime() - fio->io_timestamp; + if (delta > spa_deadman_synctime(spa)) { + zfs_dbgmsg("SLOW IO: zio timestamp %lluns, " + "delta %lluns, last io %lluns", + fio->io_timestamp, delta, + vq->vq_io_complete_ts); + zfs_ereport_post(FM_EREPORT_ZFS_DELAY, + spa, vd, fio, 0, 0); + } + } + mutex_exit(&vq->vq_lock); + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(vdev_fault); +EXPORT_SYMBOL(vdev_degrade); +EXPORT_SYMBOL(vdev_online); +EXPORT_SYMBOL(vdev_offline); +EXPORT_SYMBOL(vdev_clear); +/* BEGIN CSTYLED */ +module_param(metaslabs_per_vdev, int, 0644); +MODULE_PARM_DESC(metaslabs_per_vdev, + "Divide added vdev into approximately (but no more than) this number " + "of metaslabs"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_cache.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_cache.c @@ -0,0 +1,438 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Virtual device read-ahead caching. + * + * This file implements a simple LRU read-ahead cache. When the DMU reads + * a given block, it will often want other, nearby blocks soon thereafter. + * We take advantage of this by reading a larger disk region and caching + * the result. In the best case, this can turn 128 back-to-back 512-byte + * reads into a single 64k read followed by 127 cache hits; this reduces + * latency dramatically. In the worst case, it can turn an isolated 512-byte + * read into a 64k read, which doesn't affect latency all that much but is + * terribly wasteful of bandwidth. A more intelligent version of the cache + * could keep track of access patterns and not do read-ahead unless it sees + * at least two temporally close I/Os to the same region. Currently, only + * metadata I/O is inflated. A futher enhancement could take advantage of + * more semantic information about the I/O. And it could use something + * faster than an AVL tree; that was chosen solely for convenience. + * + * There are five cache operations: allocate, fill, read, write, evict. + * + * (1) Allocate. This reserves a cache entry for the specified region. + * We separate the allocate and fill operations so that multiple threads + * don't generate I/O for the same cache miss. + * + * (2) Fill. When the I/O for a cache miss completes, the fill routine + * places the data in the previously allocated cache entry. + * + * (3) Read. Read data from the cache. + * + * (4) Write. Update cache contents after write completion. + * + * (5) Evict. When allocating a new entry, we evict the oldest (LRU) entry + * if the total cache size exceeds zfs_vdev_cache_size. + */ + +/* + * These tunables are for performance analysis. + */ +/* + * All i/os smaller than zfs_vdev_cache_max will be turned into + * 1<ve_offset, ve2->ve_offset)); +} + +static int +vdev_cache_lastused_compare(const void *a1, const void *a2) +{ + const vdev_cache_entry_t *ve1 = (const vdev_cache_entry_t *)a1; + const vdev_cache_entry_t *ve2 = (const vdev_cache_entry_t *)a2; + + int cmp = AVL_CMP(ve1->ve_lastused, ve2->ve_lastused); + if (likely(cmp)) + return (cmp); + + /* + * Among equally old entries, sort by offset to ensure uniqueness. + */ + return (vdev_cache_offset_compare(a1, a2)); +} + +/* + * Evict the specified entry from the cache. + */ +static void +vdev_cache_evict(vdev_cache_t *vc, vdev_cache_entry_t *ve) +{ + ASSERT(MUTEX_HELD(&vc->vc_lock)); + ASSERT3P(ve->ve_fill_io, ==, NULL); + ASSERT3P(ve->ve_abd, !=, NULL); + + avl_remove(&vc->vc_lastused_tree, ve); + avl_remove(&vc->vc_offset_tree, ve); + abd_free(ve->ve_abd); + kmem_free(ve, sizeof (vdev_cache_entry_t)); +} + +/* + * Allocate an entry in the cache. At the point we don't have the data, + * we're just creating a placeholder so that multiple threads don't all + * go off and read the same blocks. + */ +static vdev_cache_entry_t * +vdev_cache_allocate(zio_t *zio) +{ + vdev_cache_t *vc = &zio->io_vd->vdev_cache; + uint64_t offset = P2ALIGN(zio->io_offset, VCBS); + vdev_cache_entry_t *ve; + + ASSERT(MUTEX_HELD(&vc->vc_lock)); + + if (zfs_vdev_cache_size == 0) + return (NULL); + + /* + * If adding a new entry would exceed the cache size, + * evict the oldest entry (LRU). + */ + if ((avl_numnodes(&vc->vc_lastused_tree) << zfs_vdev_cache_bshift) > + zfs_vdev_cache_size) { + ve = avl_first(&vc->vc_lastused_tree); + if (ve->ve_fill_io != NULL) + return (NULL); + ASSERT3U(ve->ve_hits, !=, 0); + vdev_cache_evict(vc, ve); + } + + ve = kmem_zalloc(sizeof (vdev_cache_entry_t), KM_SLEEP); + ve->ve_offset = offset; + ve->ve_lastused = ddi_get_lbolt(); + ve->ve_abd = abd_alloc_for_io(VCBS, B_TRUE); + + avl_add(&vc->vc_offset_tree, ve); + avl_add(&vc->vc_lastused_tree, ve); + + return (ve); +} + +static void +vdev_cache_hit(vdev_cache_t *vc, vdev_cache_entry_t *ve, zio_t *zio) +{ + uint64_t cache_phase = P2PHASE(zio->io_offset, VCBS); + + ASSERT(MUTEX_HELD(&vc->vc_lock)); + ASSERT3P(ve->ve_fill_io, ==, NULL); + + if (ve->ve_lastused != ddi_get_lbolt()) { + avl_remove(&vc->vc_lastused_tree, ve); + ve->ve_lastused = ddi_get_lbolt(); + avl_add(&vc->vc_lastused_tree, ve); + } + + ve->ve_hits++; + abd_copy_off(zio->io_abd, ve->ve_abd, 0, cache_phase, zio->io_size); +} + +/* + * Fill a previously allocated cache entry with data. + */ +static void +vdev_cache_fill(zio_t *fio) +{ + vdev_t *vd = fio->io_vd; + vdev_cache_t *vc = &vd->vdev_cache; + vdev_cache_entry_t *ve = fio->io_private; + zio_t *pio; + zio_link_t *zl; + + ASSERT3U(fio->io_size, ==, VCBS); + + /* + * Add data to the cache. + */ + mutex_enter(&vc->vc_lock); + + ASSERT3P(ve->ve_fill_io, ==, fio); + ASSERT3U(ve->ve_offset, ==, fio->io_offset); + ASSERT3P(ve->ve_abd, ==, fio->io_abd); + + ve->ve_fill_io = NULL; + + /* + * Even if this cache line was invalidated by a missed write update, + * any reads that were queued up before the missed update are still + * valid, so we can satisfy them from this line before we evict it. + */ + zl = NULL; + while ((pio = zio_walk_parents(fio, &zl)) != NULL) + vdev_cache_hit(vc, ve, pio); + + if (fio->io_error || ve->ve_missed_update) + vdev_cache_evict(vc, ve); + + mutex_exit(&vc->vc_lock); +} + +/* + * Read data from the cache. Returns B_TRUE cache hit, B_FALSE on miss. + */ +boolean_t +vdev_cache_read(zio_t *zio) +{ + vdev_cache_t *vc = &zio->io_vd->vdev_cache; + vdev_cache_entry_t *ve, *ve_search; + uint64_t cache_offset = P2ALIGN(zio->io_offset, VCBS); + zio_t *fio; + ASSERTV(uint64_t cache_phase = P2PHASE(zio->io_offset, VCBS)); + + ASSERT3U(zio->io_type, ==, ZIO_TYPE_READ); + + if (zio->io_flags & ZIO_FLAG_DONT_CACHE) + return (B_FALSE); + + if (zio->io_size > zfs_vdev_cache_max) + return (B_FALSE); + + /* + * If the I/O straddles two or more cache blocks, don't cache it. + */ + if (P2BOUNDARY(zio->io_offset, zio->io_size, VCBS)) + return (B_FALSE); + + ASSERT3U(cache_phase + zio->io_size, <=, VCBS); + + mutex_enter(&vc->vc_lock); + + ve_search = kmem_alloc(sizeof (vdev_cache_entry_t), KM_SLEEP); + ve_search->ve_offset = cache_offset; + ve = avl_find(&vc->vc_offset_tree, ve_search, NULL); + kmem_free(ve_search, sizeof (vdev_cache_entry_t)); + + if (ve != NULL) { + if (ve->ve_missed_update) { + mutex_exit(&vc->vc_lock); + return (B_FALSE); + } + + if ((fio = ve->ve_fill_io) != NULL) { + zio_vdev_io_bypass(zio); + zio_add_child(zio, fio); + mutex_exit(&vc->vc_lock); + VDCSTAT_BUMP(vdc_stat_delegations); + return (B_TRUE); + } + + vdev_cache_hit(vc, ve, zio); + zio_vdev_io_bypass(zio); + + mutex_exit(&vc->vc_lock); + VDCSTAT_BUMP(vdc_stat_hits); + return (B_TRUE); + } + + ve = vdev_cache_allocate(zio); + + if (ve == NULL) { + mutex_exit(&vc->vc_lock); + return (B_FALSE); + } + + fio = zio_vdev_delegated_io(zio->io_vd, cache_offset, + ve->ve_abd, VCBS, ZIO_TYPE_READ, ZIO_PRIORITY_NOW, + ZIO_FLAG_DONT_CACHE, vdev_cache_fill, ve); + + ve->ve_fill_io = fio; + zio_vdev_io_bypass(zio); + zio_add_child(zio, fio); + + mutex_exit(&vc->vc_lock); + zio_nowait(fio); + VDCSTAT_BUMP(vdc_stat_misses); + + return (B_TRUE); +} + +/* + * Update cache contents upon write completion. + */ +void +vdev_cache_write(zio_t *zio) +{ + vdev_cache_t *vc = &zio->io_vd->vdev_cache; + vdev_cache_entry_t *ve, ve_search; + uint64_t io_start = zio->io_offset; + uint64_t io_end = io_start + zio->io_size; + uint64_t min_offset = P2ALIGN(io_start, VCBS); + uint64_t max_offset = P2ROUNDUP(io_end, VCBS); + avl_index_t where; + + ASSERT3U(zio->io_type, ==, ZIO_TYPE_WRITE); + + mutex_enter(&vc->vc_lock); + + ve_search.ve_offset = min_offset; + ve = avl_find(&vc->vc_offset_tree, &ve_search, &where); + + if (ve == NULL) + ve = avl_nearest(&vc->vc_offset_tree, where, AVL_AFTER); + + while (ve != NULL && ve->ve_offset < max_offset) { + uint64_t start = MAX(ve->ve_offset, io_start); + uint64_t end = MIN(ve->ve_offset + VCBS, io_end); + + if (ve->ve_fill_io != NULL) { + ve->ve_missed_update = 1; + } else { + abd_copy_off(ve->ve_abd, zio->io_abd, + start - ve->ve_offset, start - io_start, + end - start); + } + ve = AVL_NEXT(&vc->vc_offset_tree, ve); + } + mutex_exit(&vc->vc_lock); +} + +void +vdev_cache_purge(vdev_t *vd) +{ + vdev_cache_t *vc = &vd->vdev_cache; + vdev_cache_entry_t *ve; + + mutex_enter(&vc->vc_lock); + while ((ve = avl_first(&vc->vc_offset_tree)) != NULL) + vdev_cache_evict(vc, ve); + mutex_exit(&vc->vc_lock); +} + +void +vdev_cache_init(vdev_t *vd) +{ + vdev_cache_t *vc = &vd->vdev_cache; + + mutex_init(&vc->vc_lock, NULL, MUTEX_DEFAULT, NULL); + + avl_create(&vc->vc_offset_tree, vdev_cache_offset_compare, + sizeof (vdev_cache_entry_t), + offsetof(struct vdev_cache_entry, ve_offset_node)); + + avl_create(&vc->vc_lastused_tree, vdev_cache_lastused_compare, + sizeof (vdev_cache_entry_t), + offsetof(struct vdev_cache_entry, ve_lastused_node)); +} + +void +vdev_cache_fini(vdev_t *vd) +{ + vdev_cache_t *vc = &vd->vdev_cache; + + vdev_cache_purge(vd); + + avl_destroy(&vc->vc_offset_tree); + avl_destroy(&vc->vc_lastused_tree); + + mutex_destroy(&vc->vc_lock); +} + +void +vdev_cache_stat_init(void) +{ + vdc_ksp = kstat_create("zfs", 0, "vdev_cache_stats", "misc", + KSTAT_TYPE_NAMED, sizeof (vdc_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + if (vdc_ksp != NULL) { + vdc_ksp->ks_data = &vdc_stats; + kstat_install(vdc_ksp); + } +} + +void +vdev_cache_stat_fini(void) +{ + if (vdc_ksp != NULL) { + kstat_delete(vdc_ksp); + vdc_ksp = NULL; + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_vdev_cache_max, int, 0644); +MODULE_PARM_DESC(zfs_vdev_cache_max, "Inflate reads small than max"); + +module_param(zfs_vdev_cache_size, int, 0444); +MODULE_PARM_DESC(zfs_vdev_cache_size, "Total size of the per-disk cache"); + +module_param(zfs_vdev_cache_bshift, int, 0644); +MODULE_PARM_DESC(zfs_vdev_cache_bshift, "Shift size to inflate reads too"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_disk.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_disk.c @@ -0,0 +1,816 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Rewritten for Linux by Brian Behlendorf . + * LLNL-CODE-403049. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +char *zfs_vdev_scheduler = VDEV_SCHEDULER; +static void *zfs_vdev_holder = VDEV_HOLDER; + +/* + * Virtual device vector for disks. + */ +typedef struct dio_request { + zio_t *dr_zio; /* Parent ZIO */ + atomic_t dr_ref; /* References */ + int dr_error; /* Bio error */ + int dr_bio_count; /* Count of bio's */ + struct bio *dr_bio[0]; /* Attached bio's */ +} dio_request_t; + + +#ifdef HAVE_OPEN_BDEV_EXCLUSIVE +static fmode_t +vdev_bdev_mode(int smode) +{ + fmode_t mode = 0; + + ASSERT3S(smode & (FREAD | FWRITE), !=, 0); + + if (smode & FREAD) + mode |= FMODE_READ; + + if (smode & FWRITE) + mode |= FMODE_WRITE; + + return (mode); +} +#else +static int +vdev_bdev_mode(int smode) +{ + int mode = 0; + + ASSERT3S(smode & (FREAD | FWRITE), !=, 0); + + if ((smode & FREAD) && !(smode & FWRITE)) + mode = MS_RDONLY; + + return (mode); +} +#endif /* HAVE_OPEN_BDEV_EXCLUSIVE */ + +static uint64_t +bdev_capacity(struct block_device *bdev) +{ + struct hd_struct *part = bdev->bd_part; + + /* The partition capacity referenced by the block device */ + if (part) + return (part->nr_sects << 9); + + /* Otherwise assume the full device capacity */ + return (get_capacity(bdev->bd_disk) << 9); +} + +static void +vdev_disk_error(zio_t *zio) +{ +#ifdef ZFS_DEBUG + printk("ZFS: zio error=%d type=%d offset=%llu size=%llu " + "flags=%x\n", zio->io_error, zio->io_type, + (u_longlong_t)zio->io_offset, (u_longlong_t)zio->io_size, + zio->io_flags); +#endif +} + +/* + * Use the Linux 'noop' elevator for zfs managed block devices. This + * strikes the ideal balance by allowing the zfs elevator to do all + * request ordering and prioritization. While allowing the Linux + * elevator to do the maximum front/back merging allowed by the + * physical device. This yields the largest possible requests for + * the device with the lowest total overhead. + */ +static int +vdev_elevator_switch(vdev_t *v, char *elevator) +{ + vdev_disk_t *vd = v->vdev_tsd; + struct block_device *bdev = vd->vd_bdev; + struct request_queue *q = bdev_get_queue(bdev); + char *device = bdev->bd_disk->disk_name; + int error; + + /* + * Skip devices which are not whole disks (partitions). + * Device-mapper devices are excepted since they may be whole + * disks despite the vdev_wholedisk flag, in which case we can + * and should switch the elevator. If the device-mapper device + * does not have an elevator (i.e. dm-raid, dm-crypt, etc.) the + * "Skip devices without schedulers" check below will fail. + */ + if (!v->vdev_wholedisk && strncmp(device, "dm-", 3) != 0) + return (0); + + /* Skip devices without schedulers (loop, ram, dm, etc) */ + if (!q->elevator || !blk_queue_stackable(q)) + return (0); + + /* Leave existing scheduler when set to "none" */ + if ((strncmp(elevator, "none", 4) == 0) && (strlen(elevator) == 4)) + return (0); + +#ifdef HAVE_ELEVATOR_CHANGE + error = elevator_change(q, elevator); +#else + /* + * For pre-2.6.36 kernels elevator_change() is not available. + * Therefore we fall back to using a usermodehelper to echo the + * elevator into sysfs; This requires /bin/echo and sysfs to be + * mounted which may not be true early in the boot process. + */ +#define SET_SCHEDULER_CMD \ + "exec 0/sys/block/%s/queue/scheduler " \ + " 2>/dev/null; " \ + "echo %s" + + { + char *argv[] = { "/bin/sh", "-c", NULL, NULL }; + char *envp[] = { NULL }; + + argv[2] = kmem_asprintf(SET_SCHEDULER_CMD, device, elevator); + error = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); + strfree(argv[2]); + } +#endif /* HAVE_ELEVATOR_CHANGE */ + if (error) + printk("ZFS: Unable to set \"%s\" scheduler for %s (%s): %d\n", + elevator, v->vdev_path, device, error); + + return (error); +} + +/* + * Expanding a whole disk vdev involves invoking BLKRRPART on the + * whole disk device. This poses a problem, because BLKRRPART will + * return EBUSY if one of the disk's partitions is open. That's why + * we have to do it here, just before opening the data partition. + * Unfortunately, BLKRRPART works by dropping all partitions and + * recreating them, which means that for a short time window, all + * /dev/sdxN device files disappear (until udev recreates them). + * This means two things: + * - When we open the data partition just after a BLKRRPART, we + * can't do it using the normal device file path because of the + * obvious race condition with udev. Instead, we use reliable + * kernel APIs to get a handle to the new partition device from + * the whole disk device. + * - Because vdev_disk_open() initially needs to find the device + * using its path, multiple vdev_disk_open() invocations in + * short succession on the same disk with BLKRRPARTs in the + * middle have a high probability of failure (because of the + * race condition with udev). A typical situation where this + * might happen is when the zpool userspace tool does a + * TRYIMPORT immediately followed by an IMPORT. For this + * reason, we only invoke BLKRRPART in the module when strictly + * necessary (zpool online -e case), and rely on userspace to + * do it when possible. + */ +static struct block_device * +vdev_disk_rrpart(const char *path, int mode, vdev_disk_t *vd) +{ +#if defined(HAVE_3ARG_BLKDEV_GET) && defined(HAVE_GET_GENDISK) + struct block_device *bdev, *result = ERR_PTR(-ENXIO); + struct gendisk *disk; + int error, partno; + + bdev = vdev_bdev_open(path, vdev_bdev_mode(mode), zfs_vdev_holder); + if (IS_ERR(bdev)) + return (bdev); + + disk = get_gendisk(bdev->bd_dev, &partno); + vdev_bdev_close(bdev, vdev_bdev_mode(mode)); + + if (disk) { + bdev = bdget(disk_devt(disk)); + if (bdev) { + error = blkdev_get(bdev, vdev_bdev_mode(mode), vd); + if (error == 0) + error = ioctl_by_bdev(bdev, BLKRRPART, 0); + vdev_bdev_close(bdev, vdev_bdev_mode(mode)); + } + + bdev = bdget_disk(disk, partno); + if (bdev) { + error = blkdev_get(bdev, + vdev_bdev_mode(mode) | FMODE_EXCL, vd); + if (error == 0) + result = bdev; + } + put_disk(disk); + } + + return (result); +#else + return (ERR_PTR(-EOPNOTSUPP)); +#endif /* defined(HAVE_3ARG_BLKDEV_GET) && defined(HAVE_GET_GENDISK) */ +} + +static int +vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, + uint64_t *ashift) +{ + struct block_device *bdev = ERR_PTR(-ENXIO); + vdev_disk_t *vd; + int count = 0, mode, block_size; + + /* Must have a pathname and it must be absolute. */ + if (v->vdev_path == NULL || v->vdev_path[0] != '/') { + v->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; + return (SET_ERROR(EINVAL)); + } + + /* + * Reopen the device if it's not currently open. Otherwise, + * just update the physical size of the device. + */ + if (v->vdev_tsd != NULL) { + ASSERT(v->vdev_reopening); + vd = v->vdev_tsd; + goto skip_open; + } + + vd = kmem_zalloc(sizeof (vdev_disk_t), KM_SLEEP); + if (vd == NULL) + return (SET_ERROR(ENOMEM)); + + /* + * Devices are always opened by the path provided at configuration + * time. This means that if the provided path is a udev by-id path + * then drives may be recabled without an issue. If the provided + * path is a udev by-path path, then the physical location information + * will be preserved. This can be critical for more complicated + * configurations where drives are located in specific physical + * locations to maximize the systems tolerence to component failure. + * Alternatively, you can provide your own udev rule to flexibly map + * the drives as you see fit. It is not advised that you use the + * /dev/[hd]d devices which may be reordered due to probing order. + * Devices in the wrong locations will be detected by the higher + * level vdev validation. + * + * The specified paths may be briefly removed and recreated in + * response to udev events. This should be exceptionally unlikely + * because the zpool command makes every effort to verify these paths + * have already settled prior to reaching this point. Therefore, + * a ENOENT failure at this point is highly likely to be transient + * and it is reasonable to sleep and retry before giving up. In + * practice delays have been observed to be on the order of 100ms. + */ + mode = spa_mode(v->vdev_spa); + if (v->vdev_wholedisk && v->vdev_expanding) + bdev = vdev_disk_rrpart(v->vdev_path, mode, vd); + + while (IS_ERR(bdev) && count < 50) { + bdev = vdev_bdev_open(v->vdev_path, + vdev_bdev_mode(mode), zfs_vdev_holder); + if (unlikely(PTR_ERR(bdev) == -ENOENT)) { + msleep(10); + count++; + } else if (IS_ERR(bdev)) { + break; + } + } + + if (IS_ERR(bdev)) { + dprintf("failed open v->vdev_path=%s, error=%d count=%d\n", + v->vdev_path, -PTR_ERR(bdev), count); + kmem_free(vd, sizeof (vdev_disk_t)); + return (SET_ERROR(-PTR_ERR(bdev))); + } + + v->vdev_tsd = vd; + vd->vd_bdev = bdev; + +skip_open: + /* Determine the physical block size */ + block_size = vdev_bdev_block_size(vd->vd_bdev); + + /* Clear the nowritecache bit, causes vdev_reopen() to try again. */ + v->vdev_nowritecache = B_FALSE; + + /* Inform the ZIO pipeline that we are non-rotational */ + v->vdev_nonrot = blk_queue_nonrot(bdev_get_queue(vd->vd_bdev)); + + /* Physical volume size in bytes */ + *psize = bdev_capacity(vd->vd_bdev); + + /* TODO: report possible expansion size */ + *max_psize = *psize; + + /* Based on the minimum sector size set the block size */ + *ashift = highbit64(MAX(block_size, SPA_MINBLOCKSIZE)) - 1; + + /* Try to set the io scheduler elevator algorithm */ + (void) vdev_elevator_switch(v, zfs_vdev_scheduler); + + return (0); +} + +static void +vdev_disk_close(vdev_t *v) +{ + vdev_disk_t *vd = v->vdev_tsd; + + if (v->vdev_reopening || vd == NULL) + return; + + if (vd->vd_bdev != NULL) + vdev_bdev_close(vd->vd_bdev, + vdev_bdev_mode(spa_mode(v->vdev_spa))); + + kmem_free(vd, sizeof (vdev_disk_t)); + v->vdev_tsd = NULL; +} + +static dio_request_t * +vdev_disk_dio_alloc(int bio_count) +{ + dio_request_t *dr; + int i; + + dr = kmem_zalloc(sizeof (dio_request_t) + + sizeof (struct bio *) * bio_count, KM_SLEEP); + if (dr) { + atomic_set(&dr->dr_ref, 0); + dr->dr_bio_count = bio_count; + dr->dr_error = 0; + + for (i = 0; i < dr->dr_bio_count; i++) + dr->dr_bio[i] = NULL; + } + + return (dr); +} + +static void +vdev_disk_dio_free(dio_request_t *dr) +{ + int i; + + for (i = 0; i < dr->dr_bio_count; i++) + if (dr->dr_bio[i]) + bio_put(dr->dr_bio[i]); + + kmem_free(dr, sizeof (dio_request_t) + + sizeof (struct bio *) * dr->dr_bio_count); +} + +static void +vdev_disk_dio_get(dio_request_t *dr) +{ + atomic_inc(&dr->dr_ref); +} + +static int +vdev_disk_dio_put(dio_request_t *dr) +{ + int rc = atomic_dec_return(&dr->dr_ref); + + /* + * Free the dio_request when the last reference is dropped and + * ensure zio_interpret is called only once with the correct zio + */ + if (rc == 0) { + zio_t *zio = dr->dr_zio; + int error = dr->dr_error; + + vdev_disk_dio_free(dr); + + if (zio) { + zio->io_error = error; + ASSERT3S(zio->io_error, >=, 0); + if (zio->io_error) + vdev_disk_error(zio); + + zio_delay_interrupt(zio); + } + } + + return (rc); +} + +BIO_END_IO_PROTO(vdev_disk_physio_completion, bio, error) +{ + dio_request_t *dr = bio->bi_private; + int rc; + + if (dr->dr_error == 0) { +#ifdef HAVE_1ARG_BIO_END_IO_T + dr->dr_error = BIO_END_IO_ERROR(bio); +#else + if (error) + dr->dr_error = -(error); + else if (!test_bit(BIO_UPTODATE, &bio->bi_flags)) + dr->dr_error = EIO; +#endif + } + + /* Drop reference acquired by __vdev_disk_physio */ + rc = vdev_disk_dio_put(dr); +} + +static unsigned int +bio_map(struct bio *bio, void *bio_ptr, unsigned int bio_size) +{ + unsigned int offset, size, i; + struct page *page; + + offset = offset_in_page(bio_ptr); + for (i = 0; i < bio->bi_max_vecs; i++) { + size = PAGE_SIZE - offset; + + if (bio_size <= 0) + break; + + if (size > bio_size) + size = bio_size; + + if (is_vmalloc_addr(bio_ptr)) + page = vmalloc_to_page(bio_ptr); + else + page = virt_to_page(bio_ptr); + + /* + * Some network related block device uses tcp_sendpage, which + * doesn't behave well when using 0-count page, this is a + * safety net to catch them. + */ + ASSERT3S(page_count(page), >, 0); + + if (bio_add_page(bio, page, size, offset) != size) + break; + + bio_ptr += size; + bio_size -= size; + offset = 0; + } + + return (bio_size); +} + +static unsigned int +bio_map_abd_off(struct bio *bio, abd_t *abd, unsigned int size, size_t off) +{ + if (abd_is_linear(abd)) + return (bio_map(bio, ((char *)abd_to_buf(abd)) + off, size)); + + return (abd_scatter_bio_map_off(bio, abd, size, off)); +} + +static inline void +vdev_submit_bio_impl(struct bio *bio) +{ +#ifdef HAVE_1ARG_SUBMIT_BIO + submit_bio(bio); +#else + submit_bio(0, bio); +#endif +} + +#ifndef HAVE_BIO_SET_DEV +static inline void +bio_set_dev(struct bio *bio, struct block_device *bdev) +{ + bio->bi_bdev = bdev; +} +#endif /* !HAVE_BIO_SET_DEV */ + +static inline void +vdev_submit_bio(struct bio *bio) +{ +#ifdef HAVE_CURRENT_BIO_TAIL + struct bio **bio_tail = current->bio_tail; + current->bio_tail = NULL; + vdev_submit_bio_impl(bio); + current->bio_tail = bio_tail; +#else + struct bio_list *bio_list = current->bio_list; + current->bio_list = NULL; + vdev_submit_bio_impl(bio); + current->bio_list = bio_list; +#endif +} + +static int +__vdev_disk_physio(struct block_device *bdev, zio_t *zio, + size_t io_size, uint64_t io_offset, int rw, int flags) +{ + dio_request_t *dr; + uint64_t abd_offset; + uint64_t bio_offset; + int bio_size, bio_count = 16; + int i = 0, error = 0; +#if defined(HAVE_BLK_QUEUE_HAVE_BLK_PLUG) + struct blk_plug plug; +#endif + + ASSERT(zio != NULL); + ASSERT3U(io_offset + io_size, <=, bdev->bd_inode->i_size); + +retry: + dr = vdev_disk_dio_alloc(bio_count); + if (dr == NULL) + return (ENOMEM); + + if (zio && !(zio->io_flags & (ZIO_FLAG_IO_RETRY | ZIO_FLAG_TRYHARD))) + bio_set_flags_failfast(bdev, &flags); + + dr->dr_zio = zio; + + /* + * When the IO size exceeds the maximum bio size for the request + * queue we are forced to break the IO in multiple bio's and wait + * for them all to complete. Ideally, all pool users will set + * their volume block size to match the maximum request size and + * the common case will be one bio per vdev IO request. + */ + + abd_offset = 0; + bio_offset = io_offset; + bio_size = io_size; + for (i = 0; i <= dr->dr_bio_count; i++) { + + /* Finished constructing bio's for given buffer */ + if (bio_size <= 0) + break; + + /* + * By default only 'bio_count' bio's per dio are allowed. + * However, if we find ourselves in a situation where more + * are needed we allocate a larger dio and warn the user. + */ + if (dr->dr_bio_count == i) { + vdev_disk_dio_free(dr); + bio_count *= 2; + goto retry; + } + + /* bio_alloc() with __GFP_WAIT never returns NULL */ + dr->dr_bio[i] = bio_alloc(GFP_NOIO, + MIN(abd_nr_pages_off(zio->io_abd, bio_size, abd_offset), + BIO_MAX_PAGES)); + if (unlikely(dr->dr_bio[i] == NULL)) { + vdev_disk_dio_free(dr); + return (ENOMEM); + } + + /* Matching put called by vdev_disk_physio_completion */ + vdev_disk_dio_get(dr); + + bio_set_dev(dr->dr_bio[i], bdev); + BIO_BI_SECTOR(dr->dr_bio[i]) = bio_offset >> 9; + dr->dr_bio[i]->bi_end_io = vdev_disk_physio_completion; + dr->dr_bio[i]->bi_private = dr; + bio_set_op_attrs(dr->dr_bio[i], rw, flags); + + /* Remaining size is returned to become the new size */ + bio_size = bio_map_abd_off(dr->dr_bio[i], zio->io_abd, + bio_size, abd_offset); + + /* Advance in buffer and construct another bio if needed */ + abd_offset += BIO_BI_SIZE(dr->dr_bio[i]); + bio_offset += BIO_BI_SIZE(dr->dr_bio[i]); + } + + /* Extra reference to protect dio_request during vdev_submit_bio */ + vdev_disk_dio_get(dr); + +#if defined(HAVE_BLK_QUEUE_HAVE_BLK_PLUG) + if (dr->dr_bio_count > 1) + blk_start_plug(&plug); +#endif + + /* Submit all bio's associated with this dio */ + for (i = 0; i < dr->dr_bio_count; i++) + if (dr->dr_bio[i]) + vdev_submit_bio(dr->dr_bio[i]); + +#if defined(HAVE_BLK_QUEUE_HAVE_BLK_PLUG) + if (dr->dr_bio_count > 1) + blk_finish_plug(&plug); +#endif + + (void) vdev_disk_dio_put(dr); + + return (error); +} + +BIO_END_IO_PROTO(vdev_disk_io_flush_completion, bio, error) +{ + zio_t *zio = bio->bi_private; +#ifdef HAVE_1ARG_BIO_END_IO_T + zio->io_error = BIO_END_IO_ERROR(bio); +#else + zio->io_error = -error; +#endif + + if (zio->io_error && (zio->io_error == EOPNOTSUPP)) + zio->io_vd->vdev_nowritecache = B_TRUE; + + bio_put(bio); + ASSERT3S(zio->io_error, >=, 0); + if (zio->io_error) + vdev_disk_error(zio); + zio_interrupt(zio); +} + +static int +vdev_disk_io_flush(struct block_device *bdev, zio_t *zio) +{ + struct request_queue *q; + struct bio *bio; + + q = bdev_get_queue(bdev); + if (!q) + return (ENXIO); + + bio = bio_alloc(GFP_NOIO, 0); + /* bio_alloc() with __GFP_WAIT never returns NULL */ + if (unlikely(bio == NULL)) + return (ENOMEM); + + bio->bi_end_io = vdev_disk_io_flush_completion; + bio->bi_private = zio; + bio_set_dev(bio, bdev); + bio_set_flush(bio); + vdev_submit_bio(bio); + invalidate_bdev(bdev); + + return (0); +} + +static void +vdev_disk_io_start(zio_t *zio) +{ + vdev_t *v = zio->io_vd; + vdev_disk_t *vd = v->vdev_tsd; + int rw, flags, error; + + switch (zio->io_type) { + case ZIO_TYPE_IOCTL: + + if (!vdev_readable(v)) { + zio->io_error = SET_ERROR(ENXIO); + zio_interrupt(zio); + return; + } + + switch (zio->io_cmd) { + case DKIOCFLUSHWRITECACHE: + + if (zfs_nocacheflush) + break; + + if (v->vdev_nowritecache) { + zio->io_error = SET_ERROR(ENOTSUP); + break; + } + + error = vdev_disk_io_flush(vd->vd_bdev, zio); + if (error == 0) + return; + + zio->io_error = error; + + break; + + default: + zio->io_error = SET_ERROR(ENOTSUP); + } + + zio_execute(zio); + return; + case ZIO_TYPE_WRITE: + rw = WRITE; +#if defined(HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG) + flags = (1 << BIO_RW_UNPLUG); +#elif defined(REQ_UNPLUG) + flags = REQ_UNPLUG; +#else + flags = 0; +#endif + break; + + case ZIO_TYPE_READ: + rw = READ; +#if defined(HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG) + flags = (1 << BIO_RW_UNPLUG); +#elif defined(REQ_UNPLUG) + flags = REQ_UNPLUG; +#else + flags = 0; +#endif + break; + + default: + zio->io_error = SET_ERROR(ENOTSUP); + zio_interrupt(zio); + return; + } + + zio->io_target_timestamp = zio_handle_io_delay(zio); + error = __vdev_disk_physio(vd->vd_bdev, zio, + zio->io_size, zio->io_offset, rw, flags); + if (error) { + zio->io_error = error; + zio_interrupt(zio); + return; + } +} + +static void +vdev_disk_io_done(zio_t *zio) +{ + /* + * If the device returned EIO, we revalidate the media. If it is + * determined the media has changed this triggers the asynchronous + * removal of the device from the configuration. + */ + if (zio->io_error == EIO) { + vdev_t *v = zio->io_vd; + vdev_disk_t *vd = v->vdev_tsd; + + if (check_disk_change(vd->vd_bdev)) { + vdev_bdev_invalidate(vd->vd_bdev); + v->vdev_remove_wanted = B_TRUE; + spa_async_request(zio->io_spa, SPA_ASYNC_REMOVE); + } + } +} + +static void +vdev_disk_hold(vdev_t *vd) +{ + ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER)); + + /* We must have a pathname, and it must be absolute. */ + if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') + return; + + /* + * Only prefetch path and devid info if the device has + * never been opened. + */ + if (vd->vdev_tsd != NULL) + return; + + /* XXX: Implement me as a vnode lookup for the device */ + vd->vdev_name_vp = NULL; + vd->vdev_devid_vp = NULL; +} + +static void +vdev_disk_rele(vdev_t *vd) +{ + ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER)); + + /* XXX: Implement me as a vnode rele for the device */ +} + +vdev_ops_t vdev_disk_ops = { + vdev_disk_open, + vdev_disk_close, + vdev_default_asize, + vdev_disk_io_start, + vdev_disk_io_done, + NULL, + NULL, + vdev_disk_hold, + vdev_disk_rele, + VDEV_TYPE_DISK, /* name of this vdev type */ + B_TRUE /* leaf vdev */ +}; + +module_param(zfs_vdev_scheduler, charp, 0644); +MODULE_PARM_DESC(zfs_vdev_scheduler, "I/O scheduler"); --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_file.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_file.c @@ -0,0 +1,294 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Virtual device vector for files. + */ + +static taskq_t *vdev_file_taskq; + +static void +vdev_file_hold(vdev_t *vd) +{ + ASSERT(vd->vdev_path != NULL); +} + +static void +vdev_file_rele(vdev_t *vd) +{ + ASSERT(vd->vdev_path != NULL); +} + +static int +vdev_file_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize, + uint64_t *ashift) +{ + vdev_file_t *vf; + vnode_t *vp; + vattr_t vattr; + int error; + + /* Rotational optimizations only make sense on block devices */ + vd->vdev_nonrot = B_TRUE; + + /* + * We must have a pathname, and it must be absolute. + */ + if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') { + vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; + return (SET_ERROR(EINVAL)); + } + + /* + * Reopen the device if it's not currently open. Otherwise, + * just update the physical size of the device. + */ + if (vd->vdev_tsd != NULL) { + ASSERT(vd->vdev_reopening); + vf = vd->vdev_tsd; + goto skip_open; + } + + vf = vd->vdev_tsd = kmem_zalloc(sizeof (vdev_file_t), KM_SLEEP); + + /* + * We always open the files from the root of the global zone, even if + * we're in a local zone. If the user has gotten to this point, the + * administrator has already decided that the pool should be available + * to local zone users, so the underlying devices should be as well. + */ + ASSERT(vd->vdev_path != NULL && vd->vdev_path[0] == '/'); + error = vn_openat(vd->vdev_path + 1, UIO_SYSSPACE, + spa_mode(vd->vdev_spa) | FOFFMAX, 0, &vp, 0, 0, rootdir, -1); + + if (error) { + vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; + return (error); + } + + vf->vf_vnode = vp; + +#ifdef _KERNEL + /* + * Make sure it's a regular file. + */ + if (vp->v_type != VREG) { + vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; + return (SET_ERROR(ENODEV)); + } +#endif + +skip_open: + /* + * Determine the physical size of the file. + */ + vattr.va_mask = AT_SIZE; + error = VOP_GETATTR(vf->vf_vnode, &vattr, 0, kcred, NULL); + if (error) { + vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; + return (error); + } + + *max_psize = *psize = vattr.va_size; + *ashift = SPA_MINBLOCKSHIFT; + + return (0); +} + +static void +vdev_file_close(vdev_t *vd) +{ + vdev_file_t *vf = vd->vdev_tsd; + + if (vd->vdev_reopening || vf == NULL) + return; + + if (vf->vf_vnode != NULL) { + (void) VOP_PUTPAGE(vf->vf_vnode, 0, 0, B_INVAL, kcred, NULL); + (void) VOP_CLOSE(vf->vf_vnode, spa_mode(vd->vdev_spa), 1, 0, + kcred, NULL); + } + + vd->vdev_delayed_close = B_FALSE; + kmem_free(vf, sizeof (vdev_file_t)); + vd->vdev_tsd = NULL; +} + +static void +vdev_file_io_strategy(void *arg) +{ + zio_t *zio = (zio_t *)arg; + vdev_t *vd = zio->io_vd; + vdev_file_t *vf = vd->vdev_tsd; + ssize_t resid; + void *buf; + + if (zio->io_type == ZIO_TYPE_READ) + buf = abd_borrow_buf(zio->io_abd, zio->io_size); + else + buf = abd_borrow_buf_copy(zio->io_abd, zio->io_size); + + zio->io_error = vn_rdwr(zio->io_type == ZIO_TYPE_READ ? + UIO_READ : UIO_WRITE, vf->vf_vnode, buf, zio->io_size, + zio->io_offset, UIO_SYSSPACE, 0, RLIM64_INFINITY, kcred, &resid); + + if (zio->io_type == ZIO_TYPE_READ) + abd_return_buf_copy(zio->io_abd, buf, zio->io_size); + else + abd_return_buf(zio->io_abd, buf, zio->io_size); + + if (resid != 0 && zio->io_error == 0) + zio->io_error = SET_ERROR(ENOSPC); + + zio_delay_interrupt(zio); +} + +static void +vdev_file_io_fsync(void *arg) +{ + zio_t *zio = (zio_t *)arg; + vdev_file_t *vf = zio->io_vd->vdev_tsd; + + zio->io_error = VOP_FSYNC(vf->vf_vnode, FSYNC | FDSYNC, kcred, NULL); + + zio_interrupt(zio); +} + +static void +vdev_file_io_start(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + vdev_file_t *vf = vd->vdev_tsd; + + if (zio->io_type == ZIO_TYPE_IOCTL) { + /* XXPOLICY */ + if (!vdev_readable(vd)) { + zio->io_error = SET_ERROR(ENXIO); + zio_interrupt(zio); + return; + } + + switch (zio->io_cmd) { + case DKIOCFLUSHWRITECACHE: + + if (zfs_nocacheflush) + break; + + /* + * We cannot safely call vfs_fsync() when PF_FSTRANS + * is set in the current context. Filesystems like + * XFS include sanity checks to verify it is not + * already set, see xfs_vm_writepage(). Therefore + * the sync must be dispatched to a different context. + */ + if (__spl_pf_fstrans_check()) { + VERIFY3U(taskq_dispatch(vdev_file_taskq, + vdev_file_io_fsync, zio, TQ_SLEEP), !=, + TASKQID_INVALID); + return; + } + + zio->io_error = VOP_FSYNC(vf->vf_vnode, FSYNC | FDSYNC, + kcred, NULL); + break; + default: + zio->io_error = SET_ERROR(ENOTSUP); + } + + zio_execute(zio); + return; + } + + zio->io_target_timestamp = zio_handle_io_delay(zio); + + VERIFY3U(taskq_dispatch(vdev_file_taskq, vdev_file_io_strategy, zio, + TQ_SLEEP), !=, TASKQID_INVALID); +} + +/* ARGSUSED */ +static void +vdev_file_io_done(zio_t *zio) +{ +} + +vdev_ops_t vdev_file_ops = { + vdev_file_open, + vdev_file_close, + vdev_default_asize, + vdev_file_io_start, + vdev_file_io_done, + NULL, + NULL, + vdev_file_hold, + vdev_file_rele, + VDEV_TYPE_FILE, /* name of this vdev type */ + B_TRUE /* leaf vdev */ +}; + +void +vdev_file_init(void) +{ + vdev_file_taskq = taskq_create("z_vdev_file", MAX(boot_ncpus, 16), + minclsyspri, boot_ncpus, INT_MAX, TASKQ_DYNAMIC); + + VERIFY(vdev_file_taskq); +} + +void +vdev_file_fini(void) +{ + taskq_destroy(vdev_file_taskq); +} + +/* + * From userland we access disks just like files. + */ +#ifndef _KERNEL + +vdev_ops_t vdev_disk_ops = { + vdev_file_open, + vdev_file_close, + vdev_default_asize, + vdev_file_io_start, + vdev_file_io_done, + NULL, + NULL, + vdev_file_hold, + vdev_file_rele, + VDEV_TYPE_DISK, /* name of this vdev type */ + B_TRUE /* leaf vdev */ +}; + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_label.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_label.c @@ -0,0 +1,1522 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +/* + * Virtual Device Labels + * --------------------- + * + * The vdev label serves several distinct purposes: + * + * 1. Uniquely identify this device as part of a ZFS pool and confirm its + * identity within the pool. + * + * 2. Verify that all the devices given in a configuration are present + * within the pool. + * + * 3. Determine the uberblock for the pool. + * + * 4. In case of an import operation, determine the configuration of the + * toplevel vdev of which it is a part. + * + * 5. If an import operation cannot find all the devices in the pool, + * provide enough information to the administrator to determine which + * devices are missing. + * + * It is important to note that while the kernel is responsible for writing the + * label, it only consumes the information in the first three cases. The + * latter information is only consumed in userland when determining the + * configuration to import a pool. + * + * + * Label Organization + * ------------------ + * + * Before describing the contents of the label, it's important to understand how + * the labels are written and updated with respect to the uberblock. + * + * When the pool configuration is altered, either because it was newly created + * or a device was added, we want to update all the labels such that we can deal + * with fatal failure at any point. To this end, each disk has two labels which + * are updated before and after the uberblock is synced. Assuming we have + * labels and an uberblock with the following transaction groups: + * + * L1 UB L2 + * +------+ +------+ +------+ + * | | | | | | + * | t10 | | t10 | | t10 | + * | | | | | | + * +------+ +------+ +------+ + * + * In this stable state, the labels and the uberblock were all updated within + * the same transaction group (10). Each label is mirrored and checksummed, so + * that we can detect when we fail partway through writing the label. + * + * In order to identify which labels are valid, the labels are written in the + * following manner: + * + * 1. For each vdev, update 'L1' to the new label + * 2. Update the uberblock + * 3. For each vdev, update 'L2' to the new label + * + * Given arbitrary failure, we can determine the correct label to use based on + * the transaction group. If we fail after updating L1 but before updating the + * UB, we will notice that L1's transaction group is greater than the uberblock, + * so L2 must be valid. If we fail after writing the uberblock but before + * writing L2, we will notice that L2's transaction group is less than L1, and + * therefore L1 is valid. + * + * Another added complexity is that not every label is updated when the config + * is synced. If we add a single device, we do not want to have to re-write + * every label for every device in the pool. This means that both L1 and L2 may + * be older than the pool uberblock, because the necessary information is stored + * on another vdev. + * + * + * On-disk Format + * -------------- + * + * The vdev label consists of two distinct parts, and is wrapped within the + * vdev_label_t structure. The label includes 8k of padding to permit legacy + * VTOC disk labels, but is otherwise ignored. + * + * The first half of the label is a packed nvlist which contains pool wide + * properties, per-vdev properties, and configuration information. It is + * described in more detail below. + * + * The latter half of the label consists of a redundant array of uberblocks. + * These uberblocks are updated whenever a transaction group is committed, + * or when the configuration is updated. When a pool is loaded, we scan each + * vdev for the 'best' uberblock. + * + * + * Configuration Information + * ------------------------- + * + * The nvlist describing the pool and vdev contains the following elements: + * + * version ZFS on-disk version + * name Pool name + * state Pool state + * txg Transaction group in which this label was written + * pool_guid Unique identifier for this pool + * vdev_tree An nvlist describing vdev tree. + * features_for_read + * An nvlist of the features necessary for reading the MOS. + * + * Each leaf device label also contains the following: + * + * top_guid Unique ID for top-level vdev in which this is contained + * guid Unique ID for the leaf vdev + * + * The 'vs' configuration follows the format described in 'spa_config.c'. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Basic routines to read and write from a vdev label. + * Used throughout the rest of this file. + */ +uint64_t +vdev_label_offset(uint64_t psize, int l, uint64_t offset) +{ + ASSERT(offset < sizeof (vdev_label_t)); + ASSERT(P2PHASE_TYPED(psize, sizeof (vdev_label_t), uint64_t) == 0); + + return (offset + l * sizeof (vdev_label_t) + (l < VDEV_LABELS / 2 ? + 0 : psize - VDEV_LABELS * sizeof (vdev_label_t))); +} + +/* + * Returns back the vdev label associated with the passed in offset. + */ +int +vdev_label_number(uint64_t psize, uint64_t offset) +{ + int l; + + if (offset >= psize - VDEV_LABEL_END_SIZE) { + offset -= psize - VDEV_LABEL_END_SIZE; + offset += (VDEV_LABELS / 2) * sizeof (vdev_label_t); + } + l = offset / sizeof (vdev_label_t); + return (l < VDEV_LABELS ? l : -1); +} + +static void +vdev_label_read(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset, + uint64_t size, zio_done_func_t *done, void *private, int flags) +{ + ASSERT( + spa_config_held(zio->io_spa, SCL_STATE, RW_READER) == SCL_STATE || + spa_config_held(zio->io_spa, SCL_STATE, RW_WRITER) == SCL_STATE); + ASSERT(flags & ZIO_FLAG_CONFIG_WRITER); + + zio_nowait(zio_read_phys(zio, vd, + vdev_label_offset(vd->vdev_psize, l, offset), + size, buf, ZIO_CHECKSUM_LABEL, done, private, + ZIO_PRIORITY_SYNC_READ, flags, B_TRUE)); +} + +void +vdev_label_write(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset, + uint64_t size, zio_done_func_t *done, void *private, int flags) +{ + ASSERT( + spa_config_held(zio->io_spa, SCL_STATE, RW_READER) == SCL_STATE || + spa_config_held(zio->io_spa, SCL_STATE, RW_WRITER) == SCL_STATE); + ASSERT(flags & ZIO_FLAG_CONFIG_WRITER); + + zio_nowait(zio_write_phys(zio, vd, + vdev_label_offset(vd->vdev_psize, l, offset), + size, buf, ZIO_CHECKSUM_LABEL, done, private, + ZIO_PRIORITY_SYNC_WRITE, flags, B_TRUE)); +} + +/* + * Generate the nvlist representing this vdev's stats + */ +void +vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv) +{ + nvlist_t *nvx; + vdev_stat_t *vs; + vdev_stat_ex_t *vsx; + + vs = kmem_alloc(sizeof (*vs), KM_SLEEP); + vsx = kmem_alloc(sizeof (*vsx), KM_SLEEP); + + vdev_get_stats_ex(vd, vs, vsx); + fnvlist_add_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS, + (uint64_t *)vs, sizeof (*vs) / sizeof (uint64_t)); + + kmem_free(vs, sizeof (*vs)); + + /* + * Add extended stats into a special extended stats nvlist. This keeps + * all the extended stats nicely grouped together. The extended stats + * nvlist is then added to the main nvlist. + */ + nvx = fnvlist_alloc(); + + /* ZIOs in flight to disk */ + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_R_ACTIVE_QUEUE, + vsx->vsx_active_queue[ZIO_PRIORITY_SYNC_READ]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_W_ACTIVE_QUEUE, + vsx->vsx_active_queue[ZIO_PRIORITY_SYNC_WRITE]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE, + vsx->vsx_active_queue[ZIO_PRIORITY_ASYNC_READ]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE, + vsx->vsx_active_queue[ZIO_PRIORITY_ASYNC_WRITE]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE, + vsx->vsx_active_queue[ZIO_PRIORITY_SCRUB]); + + /* ZIOs pending */ + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE, + vsx->vsx_pend_queue[ZIO_PRIORITY_SYNC_READ]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE, + vsx->vsx_pend_queue[ZIO_PRIORITY_SYNC_WRITE]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE, + vsx->vsx_pend_queue[ZIO_PRIORITY_ASYNC_READ]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE, + vsx->vsx_pend_queue[ZIO_PRIORITY_ASYNC_WRITE]); + + fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE, + vsx->vsx_pend_queue[ZIO_PRIORITY_SCRUB]); + + /* Histograms */ + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO, + vsx->vsx_total_histo[ZIO_TYPE_READ], + ARRAY_SIZE(vsx->vsx_total_histo[ZIO_TYPE_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_TOT_W_LAT_HISTO, + vsx->vsx_total_histo[ZIO_TYPE_WRITE], + ARRAY_SIZE(vsx->vsx_total_histo[ZIO_TYPE_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_DISK_R_LAT_HISTO, + vsx->vsx_disk_histo[ZIO_TYPE_READ], + ARRAY_SIZE(vsx->vsx_disk_histo[ZIO_TYPE_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_DISK_W_LAT_HISTO, + vsx->vsx_disk_histo[ZIO_TYPE_WRITE], + ARRAY_SIZE(vsx->vsx_disk_histo[ZIO_TYPE_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_R_LAT_HISTO, + vsx->vsx_queue_histo[ZIO_PRIORITY_SYNC_READ], + ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_SYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_W_LAT_HISTO, + vsx->vsx_queue_histo[ZIO_PRIORITY_SYNC_WRITE], + ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_SYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_R_LAT_HISTO, + vsx->vsx_queue_histo[ZIO_PRIORITY_ASYNC_READ], + ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_ASYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO, + vsx->vsx_queue_histo[ZIO_PRIORITY_ASYNC_WRITE], + ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_ASYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO, + vsx->vsx_queue_histo[ZIO_PRIORITY_SCRUB], + ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_SCRUB])); + + /* Request sizes */ + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO, + vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_READ], + ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_IND_W_HISTO, + vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_WRITE], + ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_IND_R_HISTO, + vsx->vsx_ind_histo[ZIO_PRIORITY_ASYNC_READ], + ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_ASYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_IND_W_HISTO, + vsx->vsx_ind_histo[ZIO_PRIORITY_ASYNC_WRITE], + ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_ASYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_IND_SCRUB_HISTO, + vsx->vsx_ind_histo[ZIO_PRIORITY_SCRUB], + ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_SCRUB])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO, + vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ], + ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_AGG_W_HISTO, + vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_WRITE], + ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_AGG_R_HISTO, + vsx->vsx_agg_histo[ZIO_PRIORITY_ASYNC_READ], + ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_ASYNC_READ])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_ASYNC_AGG_W_HISTO, + vsx->vsx_agg_histo[ZIO_PRIORITY_ASYNC_WRITE], + ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_ASYNC_WRITE])); + + fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO, + vsx->vsx_agg_histo[ZIO_PRIORITY_SCRUB], + ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_SCRUB])); + + /* Add extended stats nvlist to main nvlist */ + fnvlist_add_nvlist(nv, ZPOOL_CONFIG_VDEV_STATS_EX, nvx); + + fnvlist_free(nvx); + kmem_free(vsx, sizeof (*vsx)); +} + +/* + * Generate the nvlist representing this vdev's config. + */ +nvlist_t * +vdev_config_generate(spa_t *spa, vdev_t *vd, boolean_t getstats, + vdev_config_flag_t flags) +{ + nvlist_t *nv = NULL; + nv = fnvlist_alloc(); + + fnvlist_add_string(nv, ZPOOL_CONFIG_TYPE, vd->vdev_ops->vdev_op_type); + if (!(flags & (VDEV_CONFIG_SPARE | VDEV_CONFIG_L2CACHE))) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_ID, vd->vdev_id); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_GUID, vd->vdev_guid); + + if (vd->vdev_path != NULL) + fnvlist_add_string(nv, ZPOOL_CONFIG_PATH, vd->vdev_path); + + if (vd->vdev_devid != NULL) + fnvlist_add_string(nv, ZPOOL_CONFIG_DEVID, vd->vdev_devid); + + if (vd->vdev_physpath != NULL) + fnvlist_add_string(nv, ZPOOL_CONFIG_PHYS_PATH, + vd->vdev_physpath); + + if (vd->vdev_enc_sysfs_path != NULL) + fnvlist_add_string(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH, + vd->vdev_enc_sysfs_path); + + if (vd->vdev_fru != NULL) + fnvlist_add_string(nv, ZPOOL_CONFIG_FRU, vd->vdev_fru); + + if (vd->vdev_nparity != 0) { + ASSERT(strcmp(vd->vdev_ops->vdev_op_type, + VDEV_TYPE_RAIDZ) == 0); + + /* + * Make sure someone hasn't managed to sneak a fancy new vdev + * into a crufty old storage pool. + */ + ASSERT(vd->vdev_nparity == 1 || + (vd->vdev_nparity <= 2 && + spa_version(spa) >= SPA_VERSION_RAIDZ2) || + (vd->vdev_nparity <= 3 && + spa_version(spa) >= SPA_VERSION_RAIDZ3)); + + /* + * Note that we'll add the nparity tag even on storage pools + * that only support a single parity device -- older software + * will just ignore it. + */ + fnvlist_add_uint64(nv, ZPOOL_CONFIG_NPARITY, vd->vdev_nparity); + } + + if (vd->vdev_wholedisk != -1ULL) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_WHOLE_DISK, + vd->vdev_wholedisk); + + if (vd->vdev_not_present) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT, 1); + + if (vd->vdev_isspare) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_IS_SPARE, 1); + + if (!(flags & (VDEV_CONFIG_SPARE | VDEV_CONFIG_L2CACHE)) && + vd == vd->vdev_top) { + fnvlist_add_uint64(nv, ZPOOL_CONFIG_METASLAB_ARRAY, + vd->vdev_ms_array); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_METASLAB_SHIFT, + vd->vdev_ms_shift); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_ASHIFT, vd->vdev_ashift); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_ASIZE, + vd->vdev_asize); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_IS_LOG, vd->vdev_islog); + if (vd->vdev_removing) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_REMOVING, + vd->vdev_removing); + } + + if (vd->vdev_dtl_sm != NULL) { + fnvlist_add_uint64(nv, ZPOOL_CONFIG_DTL, + space_map_object(vd->vdev_dtl_sm)); + } + + if (vd->vdev_crtxg) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_CREATE_TXG, vd->vdev_crtxg); + + if (flags & VDEV_CONFIG_MOS) { + if (vd->vdev_leaf_zap != 0) { + ASSERT(vd->vdev_ops->vdev_op_leaf); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_VDEV_LEAF_ZAP, + vd->vdev_leaf_zap); + } + + if (vd->vdev_top_zap != 0) { + ASSERT(vd == vd->vdev_top); + fnvlist_add_uint64(nv, ZPOOL_CONFIG_VDEV_TOP_ZAP, + vd->vdev_top_zap); + } + } + + if (getstats) { + pool_scan_stat_t ps; + + vdev_config_generate_stats(vd, nv); + + /* provide either current or previous scan information */ + if (spa_scan_get_stats(spa, &ps) == 0) { + fnvlist_add_uint64_array(nv, + ZPOOL_CONFIG_SCAN_STATS, (uint64_t *)&ps, + sizeof (pool_scan_stat_t) / sizeof (uint64_t)); + } + } + + if (!vd->vdev_ops->vdev_op_leaf) { + nvlist_t **child; + int c, idx; + + ASSERT(!vd->vdev_ishole); + + child = kmem_alloc(vd->vdev_children * sizeof (nvlist_t *), + KM_SLEEP); + + for (c = 0, idx = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + + /* + * If we're generating an nvlist of removing + * vdevs then skip over any device which is + * not being removed. + */ + if ((flags & VDEV_CONFIG_REMOVING) && + !cvd->vdev_removing) + continue; + + child[idx++] = vdev_config_generate(spa, cvd, + getstats, flags); + } + + if (idx) { + fnvlist_add_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, + child, idx); + } + + for (c = 0; c < idx; c++) + nvlist_free(child[c]); + + kmem_free(child, vd->vdev_children * sizeof (nvlist_t *)); + + } else { + const char *aux = NULL; + + if (vd->vdev_offline && !vd->vdev_tmpoffline) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_OFFLINE, B_TRUE); + if (vd->vdev_resilver_txg != 0) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_RESILVER_TXG, + vd->vdev_resilver_txg); + if (vd->vdev_faulted) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_FAULTED, B_TRUE); + if (vd->vdev_degraded) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_DEGRADED, B_TRUE); + if (vd->vdev_removed) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_REMOVED, B_TRUE); + if (vd->vdev_unspare) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_UNSPARE, B_TRUE); + if (vd->vdev_ishole) + fnvlist_add_uint64(nv, ZPOOL_CONFIG_IS_HOLE, B_TRUE); + + /* Set the reason why we're FAULTED/DEGRADED. */ + switch (vd->vdev_stat.vs_aux) { + case VDEV_AUX_ERR_EXCEEDED: + aux = "err_exceeded"; + break; + + case VDEV_AUX_EXTERNAL: + aux = "external"; + break; + } + + if (aux != NULL && !vd->vdev_tmpoffline) { + fnvlist_add_string(nv, ZPOOL_CONFIG_AUX_STATE, aux); + } else { + /* + * We're healthy - clear any previous AUX_STATE values. + */ + if (nvlist_exists(nv, ZPOOL_CONFIG_AUX_STATE)) + nvlist_remove_all(nv, ZPOOL_CONFIG_AUX_STATE); + } + + if (vd->vdev_splitting && vd->vdev_orig_guid != 0LL) { + fnvlist_add_uint64(nv, ZPOOL_CONFIG_ORIG_GUID, + vd->vdev_orig_guid); + } + } + + return (nv); +} + +/* + * Generate a view of the top-level vdevs. If we currently have holes + * in the namespace, then generate an array which contains a list of holey + * vdevs. Additionally, add the number of top-level children that currently + * exist. + */ +void +vdev_top_config_generate(spa_t *spa, nvlist_t *config) +{ + vdev_t *rvd = spa->spa_root_vdev; + uint64_t *array; + uint_t c, idx; + + array = kmem_alloc(rvd->vdev_children * sizeof (uint64_t), KM_SLEEP); + + for (c = 0, idx = 0; c < rvd->vdev_children; c++) { + vdev_t *tvd = rvd->vdev_child[c]; + + if (tvd->vdev_ishole) + array[idx++] = c; + } + + if (idx) { + VERIFY(nvlist_add_uint64_array(config, ZPOOL_CONFIG_HOLE_ARRAY, + array, idx) == 0); + } + + VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_VDEV_CHILDREN, + rvd->vdev_children) == 0); + + kmem_free(array, rvd->vdev_children * sizeof (uint64_t)); +} + +/* + * Returns the configuration from the label of the given vdev. For vdevs + * which don't have a txg value stored on their label (i.e. spares/cache) + * or have not been completely initialized (txg = 0) just return + * the configuration from the first valid label we find. Otherwise, + * find the most up-to-date label that does not exceed the specified + * 'txg' value. + */ +nvlist_t * +vdev_label_read_config(vdev_t *vd, uint64_t txg) +{ + spa_t *spa = vd->vdev_spa; + nvlist_t *config = NULL; + vdev_phys_t *vp; + abd_t *vp_abd; + zio_t *zio; + uint64_t best_txg = 0; + int error = 0; + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL | + ZIO_FLAG_SPECULATIVE; + int l; + + ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL); + + if (!vdev_readable(vd)) + return (NULL); + + vp_abd = abd_alloc_linear(sizeof (vdev_phys_t), B_TRUE); + vp = abd_to_buf(vp_abd); + +retry: + for (l = 0; l < VDEV_LABELS; l++) { + nvlist_t *label = NULL; + + zio = zio_root(spa, NULL, NULL, flags); + + vdev_label_read(zio, vd, l, vp_abd, + offsetof(vdev_label_t, vl_vdev_phys), + sizeof (vdev_phys_t), NULL, NULL, flags); + + if (zio_wait(zio) == 0 && + nvlist_unpack(vp->vp_nvlist, sizeof (vp->vp_nvlist), + &label, 0) == 0) { + uint64_t label_txg = 0; + + /* + * Auxiliary vdevs won't have txg values in their + * labels and newly added vdevs may not have been + * completely initialized so just return the + * configuration from the first valid label we + * encounter. + */ + error = nvlist_lookup_uint64(label, + ZPOOL_CONFIG_POOL_TXG, &label_txg); + if ((error || label_txg == 0) && !config) { + config = label; + break; + } else if (label_txg <= txg && label_txg > best_txg) { + best_txg = label_txg; + nvlist_free(config); + config = fnvlist_dup(label); + } + } + + if (label != NULL) { + nvlist_free(label); + label = NULL; + } + } + + if (config == NULL && !(flags & ZIO_FLAG_TRYHARD)) { + flags |= ZIO_FLAG_TRYHARD; + goto retry; + } + + abd_free(vp_abd); + + return (config); +} + +/* + * Determine if a device is in use. The 'spare_guid' parameter will be filled + * in with the device guid if this spare is active elsewhere on the system. + */ +static boolean_t +vdev_inuse(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason, + uint64_t *spare_guid, uint64_t *l2cache_guid) +{ + spa_t *spa = vd->vdev_spa; + uint64_t state, pool_guid, device_guid, txg, spare_pool; + uint64_t vdtxg = 0; + nvlist_t *label; + + if (spare_guid) + *spare_guid = 0ULL; + if (l2cache_guid) + *l2cache_guid = 0ULL; + + /* + * Read the label, if any, and perform some basic sanity checks. + */ + if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) + return (B_FALSE); + + (void) nvlist_lookup_uint64(label, ZPOOL_CONFIG_CREATE_TXG, + &vdtxg); + + if (nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_STATE, + &state) != 0 || + nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, + &device_guid) != 0) { + nvlist_free(label); + return (B_FALSE); + } + + if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && + (nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_GUID, + &pool_guid) != 0 || + nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_TXG, + &txg) != 0)) { + nvlist_free(label); + return (B_FALSE); + } + + nvlist_free(label); + + /* + * Check to see if this device indeed belongs to the pool it claims to + * be a part of. The only way this is allowed is if the device is a hot + * spare (which we check for later on). + */ + if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && + !spa_guid_exists(pool_guid, device_guid) && + !spa_spare_exists(device_guid, NULL, NULL) && + !spa_l2cache_exists(device_guid, NULL)) + return (B_FALSE); + + /* + * If the transaction group is zero, then this an initialized (but + * unused) label. This is only an error if the create transaction + * on-disk is the same as the one we're using now, in which case the + * user has attempted to add the same vdev multiple times in the same + * transaction. + */ + if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && + txg == 0 && vdtxg == crtxg) + return (B_TRUE); + + /* + * Check to see if this is a spare device. We do an explicit check for + * spa_has_spare() here because it may be on our pending list of spares + * to add. We also check if it is an l2cache device. + */ + if (spa_spare_exists(device_guid, &spare_pool, NULL) || + spa_has_spare(spa, device_guid)) { + if (spare_guid) + *spare_guid = device_guid; + + switch (reason) { + case VDEV_LABEL_CREATE: + case VDEV_LABEL_L2CACHE: + return (B_TRUE); + + case VDEV_LABEL_REPLACE: + return (!spa_has_spare(spa, device_guid) || + spare_pool != 0ULL); + + case VDEV_LABEL_SPARE: + return (spa_has_spare(spa, device_guid)); + default: + break; + } + } + + /* + * Check to see if this is an l2cache device. + */ + if (spa_l2cache_exists(device_guid, NULL)) + return (B_TRUE); + + /* + * We can't rely on a pool's state if it's been imported + * read-only. Instead we look to see if the pools is marked + * read-only in the namespace and set the state to active. + */ + if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && + (spa = spa_by_guid(pool_guid, device_guid)) != NULL && + spa_mode(spa) == FREAD) + state = POOL_STATE_ACTIVE; + + /* + * If the device is marked ACTIVE, then this device is in use by another + * pool on the system. + */ + return (state == POOL_STATE_ACTIVE); +} + +/* + * Initialize a vdev label. We check to make sure each leaf device is not in + * use, and writable. We put down an initial label which we will later + * overwrite with a complete label. Note that it's important to do this + * sequentially, not in parallel, so that we catch cases of multiple use of the + * same leaf vdev in the vdev we're creating -- e.g. mirroring a disk with + * itself. + */ +int +vdev_label_init(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason) +{ + spa_t *spa = vd->vdev_spa; + nvlist_t *label; + vdev_phys_t *vp; + abd_t *vp_abd; + abd_t *pad2; + uberblock_t *ub; + abd_t *ub_abd; + zio_t *zio; + char *buf; + size_t buflen; + int error; + uint64_t spare_guid = 0, l2cache_guid = 0; + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL; + int c, l; + vdev_t *pvd; + + ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); + + for (c = 0; c < vd->vdev_children; c++) + if ((error = vdev_label_init(vd->vdev_child[c], + crtxg, reason)) != 0) + return (error); + + /* Track the creation time for this vdev */ + vd->vdev_crtxg = crtxg; + + if (!vd->vdev_ops->vdev_op_leaf || !spa_writeable(spa)) + return (0); + + /* + * Dead vdevs cannot be initialized. + */ + if (vdev_is_dead(vd)) + return (SET_ERROR(EIO)); + + /* + * Determine if the vdev is in use. + */ + if (reason != VDEV_LABEL_REMOVE && reason != VDEV_LABEL_SPLIT && + vdev_inuse(vd, crtxg, reason, &spare_guid, &l2cache_guid)) + return (SET_ERROR(EBUSY)); + + /* + * If this is a request to add or replace a spare or l2cache device + * that is in use elsewhere on the system, then we must update the + * guid (which was initialized to a random value) to reflect the + * actual GUID (which is shared between multiple pools). + */ + if (reason != VDEV_LABEL_REMOVE && reason != VDEV_LABEL_L2CACHE && + spare_guid != 0ULL) { + uint64_t guid_delta = spare_guid - vd->vdev_guid; + + vd->vdev_guid += guid_delta; + + for (pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) + pvd->vdev_guid_sum += guid_delta; + + /* + * If this is a replacement, then we want to fallthrough to the + * rest of the code. If we're adding a spare, then it's already + * labeled appropriately and we can just return. + */ + if (reason == VDEV_LABEL_SPARE) + return (0); + ASSERT(reason == VDEV_LABEL_REPLACE || + reason == VDEV_LABEL_SPLIT); + } + + if (reason != VDEV_LABEL_REMOVE && reason != VDEV_LABEL_SPARE && + l2cache_guid != 0ULL) { + uint64_t guid_delta = l2cache_guid - vd->vdev_guid; + + vd->vdev_guid += guid_delta; + + for (pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) + pvd->vdev_guid_sum += guid_delta; + + /* + * If this is a replacement, then we want to fallthrough to the + * rest of the code. If we're adding an l2cache, then it's + * already labeled appropriately and we can just return. + */ + if (reason == VDEV_LABEL_L2CACHE) + return (0); + ASSERT(reason == VDEV_LABEL_REPLACE); + } + + /* + * Initialize its label. + */ + vp_abd = abd_alloc_linear(sizeof (vdev_phys_t), B_TRUE); + abd_zero(vp_abd, sizeof (vdev_phys_t)); + vp = abd_to_buf(vp_abd); + + /* + * Generate a label describing the pool and our top-level vdev. + * We mark it as being from txg 0 to indicate that it's not + * really part of an active pool just yet. The labels will + * be written again with a meaningful txg by spa_sync(). + */ + if (reason == VDEV_LABEL_SPARE || + (reason == VDEV_LABEL_REMOVE && vd->vdev_isspare)) { + /* + * For inactive hot spares, we generate a special label that + * identifies as a mutually shared hot spare. We write the + * label if we are adding a hot spare, or if we are removing an + * active hot spare (in which case we want to revert the + * labels). + */ + VERIFY(nvlist_alloc(&label, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_VERSION, + spa_version(spa)) == 0); + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_POOL_STATE, + POOL_STATE_SPARE) == 0); + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_GUID, + vd->vdev_guid) == 0); + } else if (reason == VDEV_LABEL_L2CACHE || + (reason == VDEV_LABEL_REMOVE && vd->vdev_isl2cache)) { + /* + * For level 2 ARC devices, add a special label. + */ + VERIFY(nvlist_alloc(&label, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_VERSION, + spa_version(spa)) == 0); + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_POOL_STATE, + POOL_STATE_L2CACHE) == 0); + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_GUID, + vd->vdev_guid) == 0); + } else { + uint64_t txg = 0ULL; + + if (reason == VDEV_LABEL_SPLIT) + txg = spa->spa_uberblock.ub_txg; + label = spa_config_generate(spa, vd, txg, B_FALSE); + + /* + * Add our creation time. This allows us to detect multiple + * vdev uses as described above, and automatically expires if we + * fail. + */ + VERIFY(nvlist_add_uint64(label, ZPOOL_CONFIG_CREATE_TXG, + crtxg) == 0); + } + + buf = vp->vp_nvlist; + buflen = sizeof (vp->vp_nvlist); + + error = nvlist_pack(label, &buf, &buflen, NV_ENCODE_XDR, KM_SLEEP); + if (error != 0) { + nvlist_free(label); + abd_free(vp_abd); + /* EFAULT means nvlist_pack ran out of room */ + return (error == EFAULT ? ENAMETOOLONG : EINVAL); + } + + /* + * Initialize uberblock template. + */ + ub_abd = abd_alloc_linear(VDEV_UBERBLOCK_RING, B_TRUE); + abd_zero(ub_abd, VDEV_UBERBLOCK_RING); + abd_copy_from_buf(ub_abd, &spa->spa_uberblock, sizeof (uberblock_t)); + ub = abd_to_buf(ub_abd); + ub->ub_txg = 0; + + /* Initialize the 2nd padding area. */ + pad2 = abd_alloc_for_io(VDEV_PAD_SIZE, B_TRUE); + abd_zero(pad2, VDEV_PAD_SIZE); + + /* + * Write everything in parallel. + */ +retry: + zio = zio_root(spa, NULL, NULL, flags); + + for (l = 0; l < VDEV_LABELS; l++) { + + vdev_label_write(zio, vd, l, vp_abd, + offsetof(vdev_label_t, vl_vdev_phys), + sizeof (vdev_phys_t), NULL, NULL, flags); + + /* + * Skip the 1st padding area. + * Zero out the 2nd padding area where it might have + * left over data from previous filesystem format. + */ + vdev_label_write(zio, vd, l, pad2, + offsetof(vdev_label_t, vl_pad2), + VDEV_PAD_SIZE, NULL, NULL, flags); + + vdev_label_write(zio, vd, l, ub_abd, + offsetof(vdev_label_t, vl_uberblock), + VDEV_UBERBLOCK_RING, NULL, NULL, flags); + } + + error = zio_wait(zio); + + if (error != 0 && !(flags & ZIO_FLAG_TRYHARD)) { + flags |= ZIO_FLAG_TRYHARD; + goto retry; + } + + nvlist_free(label); + abd_free(pad2); + abd_free(ub_abd); + abd_free(vp_abd); + + /* + * If this vdev hasn't been previously identified as a spare, then we + * mark it as such only if a) we are labeling it as a spare, or b) it + * exists as a spare elsewhere in the system. Do the same for + * level 2 ARC devices. + */ + if (error == 0 && !vd->vdev_isspare && + (reason == VDEV_LABEL_SPARE || + spa_spare_exists(vd->vdev_guid, NULL, NULL))) + spa_spare_add(vd); + + if (error == 0 && !vd->vdev_isl2cache && + (reason == VDEV_LABEL_L2CACHE || + spa_l2cache_exists(vd->vdev_guid, NULL))) + spa_l2cache_add(vd); + + return (error); +} + +/* + * ========================================================================== + * uberblock load/sync + * ========================================================================== + */ + +/* + * Consider the following situation: txg is safely synced to disk. We've + * written the first uberblock for txg + 1, and then we lose power. When we + * come back up, we fail to see the uberblock for txg + 1 because, say, + * it was on a mirrored device and the replica to which we wrote txg + 1 + * is now offline. If we then make some changes and sync txg + 1, and then + * the missing replica comes back, then for a few seconds we'll have two + * conflicting uberblocks on disk with the same txg. The solution is simple: + * among uberblocks with equal txg, choose the one with the latest timestamp. + */ +static int +vdev_uberblock_compare(const uberblock_t *ub1, const uberblock_t *ub2) +{ + int cmp = AVL_CMP(ub1->ub_txg, ub2->ub_txg); + if (likely(cmp)) + return (cmp); + + return (AVL_CMP(ub1->ub_timestamp, ub2->ub_timestamp)); +} + +struct ubl_cbdata { + uberblock_t *ubl_ubbest; /* Best uberblock */ + vdev_t *ubl_vd; /* vdev associated with the above */ +}; + +static void +vdev_uberblock_load_done(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + spa_t *spa = zio->io_spa; + zio_t *rio = zio->io_private; + uberblock_t *ub = abd_to_buf(zio->io_abd); + struct ubl_cbdata *cbp = rio->io_private; + + ASSERT3U(zio->io_size, ==, VDEV_UBERBLOCK_SIZE(vd)); + + if (zio->io_error == 0 && uberblock_verify(ub) == 0) { + mutex_enter(&rio->io_lock); + if (ub->ub_txg <= spa->spa_load_max_txg && + vdev_uberblock_compare(ub, cbp->ubl_ubbest) > 0) { + /* + * Keep track of the vdev in which this uberblock + * was found. We will use this information later + * to obtain the config nvlist associated with + * this uberblock. + */ + *cbp->ubl_ubbest = *ub; + cbp->ubl_vd = vd; + } + mutex_exit(&rio->io_lock); + } + + abd_free(zio->io_abd); +} + +static void +vdev_uberblock_load_impl(zio_t *zio, vdev_t *vd, int flags, + struct ubl_cbdata *cbp) +{ + for (int c = 0; c < vd->vdev_children; c++) + vdev_uberblock_load_impl(zio, vd->vdev_child[c], flags, cbp); + + if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { + for (int l = 0; l < VDEV_LABELS; l++) { + for (int n = 0; n < VDEV_UBERBLOCK_COUNT(vd); n++) { + vdev_label_read(zio, vd, l, + abd_alloc_linear(VDEV_UBERBLOCK_SIZE(vd), + B_TRUE), VDEV_UBERBLOCK_OFFSET(vd, n), + VDEV_UBERBLOCK_SIZE(vd), + vdev_uberblock_load_done, zio, flags); + } + } + } +} + +/* + * Reads the 'best' uberblock from disk along with its associated + * configuration. First, we read the uberblock array of each label of each + * vdev, keeping track of the uberblock with the highest txg in each array. + * Then, we read the configuration from the same vdev as the best uberblock. + */ +void +vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) +{ + zio_t *zio; + spa_t *spa = rvd->vdev_spa; + struct ubl_cbdata cb; + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL | + ZIO_FLAG_SPECULATIVE | ZIO_FLAG_TRYHARD; + + ASSERT(ub); + ASSERT(config); + + bzero(ub, sizeof (uberblock_t)); + *config = NULL; + + cb.ubl_ubbest = ub; + cb.ubl_vd = NULL; + + spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); + zio = zio_root(spa, NULL, &cb, flags); + vdev_uberblock_load_impl(zio, rvd, flags, &cb); + (void) zio_wait(zio); + + /* + * It's possible that the best uberblock was discovered on a label + * that has a configuration which was written in a future txg. + * Search all labels on this vdev to find the configuration that + * matches the txg for our uberblock. + */ + if (cb.ubl_vd != NULL) + *config = vdev_label_read_config(cb.ubl_vd, ub->ub_txg); + spa_config_exit(spa, SCL_ALL, FTAG); +} + +/* + * For use when a leaf vdev is expanded. + * The location of labels 2 and 3 changed, and at the new location the + * uberblock rings are either empty or contain garbage. The sync will write + * new configs there because the vdev is dirty, but expansion also needs the + * uberblock rings copied. Read them from label 0 which did not move. + * + * Since the point is to populate labels {2,3} with valid uberblocks, + * we zero uberblocks we fail to read or which are not valid. + */ + +static void +vdev_copy_uberblocks(vdev_t *vd) +{ + abd_t *ub_abd; + zio_t *write_zio; + int locks = (SCL_L2ARC | SCL_ZIO); + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL | + ZIO_FLAG_SPECULATIVE; + + ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_READER) == + SCL_STATE); + ASSERT(vd->vdev_ops->vdev_op_leaf); + + spa_config_enter(vd->vdev_spa, locks, FTAG, RW_READER); + + ub_abd = abd_alloc_linear(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); + + write_zio = zio_root(vd->vdev_spa, NULL, NULL, flags); + for (int n = 0; n < VDEV_UBERBLOCK_COUNT(vd); n++) { + const int src_label = 0; + zio_t *zio; + + zio = zio_root(vd->vdev_spa, NULL, NULL, flags); + vdev_label_read(zio, vd, src_label, ub_abd, + VDEV_UBERBLOCK_OFFSET(vd, n), VDEV_UBERBLOCK_SIZE(vd), + NULL, NULL, flags); + + if (zio_wait(zio) || uberblock_verify(abd_to_buf(ub_abd))) + abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); + + for (int l = 2; l < VDEV_LABELS; l++) + vdev_label_write(write_zio, vd, l, ub_abd, + VDEV_UBERBLOCK_OFFSET(vd, n), + VDEV_UBERBLOCK_SIZE(vd), NULL, NULL, + flags | ZIO_FLAG_DONT_PROPAGATE); + } + (void) zio_wait(write_zio); + + spa_config_exit(vd->vdev_spa, locks, FTAG); + + abd_free(ub_abd); +} + +/* + * On success, increment root zio's count of good writes. + * We only get credit for writes to known-visible vdevs; see spa_vdev_add(). + */ +static void +vdev_uberblock_sync_done(zio_t *zio) +{ + uint64_t *good_writes = zio->io_private; + + if (zio->io_error == 0 && zio->io_vd->vdev_top->vdev_ms_array != 0) + atomic_inc_64(good_writes); +} + +/* + * Write the uberblock to all labels of all leaves of the specified vdev. + */ +static void +vdev_uberblock_sync(zio_t *zio, uberblock_t *ub, vdev_t *vd, int flags) +{ + for (int c = 0; c < vd->vdev_children; c++) + vdev_uberblock_sync(zio, ub, vd->vdev_child[c], flags); + + if (!vd->vdev_ops->vdev_op_leaf) + return; + + if (!vdev_writeable(vd)) + return; + + /* If the vdev was expanded, need to copy uberblock rings. */ + if (vd->vdev_state == VDEV_STATE_HEALTHY && + vd->vdev_copy_uberblocks == B_TRUE) { + vdev_copy_uberblocks(vd); + vd->vdev_copy_uberblocks = B_FALSE; + } + + int m = spa_multihost(vd->vdev_spa) ? MMP_BLOCKS_PER_LABEL : 0; + int n = ub->ub_txg % (VDEV_UBERBLOCK_COUNT(vd) - m); + + /* Copy the uberblock_t into the ABD */ + abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); + abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); + abd_copy_from_buf(ub_abd, ub, sizeof (uberblock_t)); + + for (int l = 0; l < VDEV_LABELS; l++) + vdev_label_write(zio, vd, l, ub_abd, + VDEV_UBERBLOCK_OFFSET(vd, n), VDEV_UBERBLOCK_SIZE(vd), + vdev_uberblock_sync_done, zio->io_private, + flags | ZIO_FLAG_DONT_PROPAGATE); + + abd_free(ub_abd); +} + +/* Sync the uberblocks to all vdevs in svd[] */ +int +vdev_uberblock_sync_list(vdev_t **svd, int svdcount, uberblock_t *ub, int flags) +{ + spa_t *spa = svd[0]->vdev_spa; + zio_t *zio; + uint64_t good_writes = 0; + int v; + + zio = zio_root(spa, NULL, &good_writes, flags); + + for (v = 0; v < svdcount; v++) + vdev_uberblock_sync(zio, ub, svd[v], flags); + + (void) zio_wait(zio); + + /* + * Flush the uberblocks to disk. This ensures that the odd labels + * are no longer needed (because the new uberblocks and the even + * labels are safely on disk), so it is safe to overwrite them. + */ + zio = zio_root(spa, NULL, NULL, flags); + + for (v = 0; v < svdcount; v++) + zio_flush(zio, svd[v]); + + (void) zio_wait(zio); + + return (good_writes >= 1 ? 0 : EIO); +} + +/* + * On success, increment the count of good writes for our top-level vdev. + */ +static void +vdev_label_sync_done(zio_t *zio) +{ + uint64_t *good_writes = zio->io_private; + + if (zio->io_error == 0) + atomic_inc_64(good_writes); +} + +/* + * If there weren't enough good writes, indicate failure to the parent. + */ +static void +vdev_label_sync_top_done(zio_t *zio) +{ + uint64_t *good_writes = zio->io_private; + + if (*good_writes == 0) + zio->io_error = SET_ERROR(EIO); + + kmem_free(good_writes, sizeof (uint64_t)); +} + +/* + * We ignore errors for log and cache devices, simply free the private data. + */ +static void +vdev_label_sync_ignore_done(zio_t *zio) +{ + kmem_free(zio->io_private, sizeof (uint64_t)); +} + +/* + * Write all even or odd labels to all leaves of the specified vdev. + */ +static void +vdev_label_sync(zio_t *zio, vdev_t *vd, int l, uint64_t txg, int flags) +{ + nvlist_t *label; + vdev_phys_t *vp; + abd_t *vp_abd; + char *buf; + size_t buflen; + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_label_sync(zio, vd->vdev_child[c], l, txg, flags); + + if (!vd->vdev_ops->vdev_op_leaf) + return; + + if (!vdev_writeable(vd)) + return; + + /* + * Generate a label describing the top-level config to which we belong. + */ + label = spa_config_generate(vd->vdev_spa, vd, txg, B_FALSE); + + vp_abd = abd_alloc_linear(sizeof (vdev_phys_t), B_TRUE); + abd_zero(vp_abd, sizeof (vdev_phys_t)); + vp = abd_to_buf(vp_abd); + + buf = vp->vp_nvlist; + buflen = sizeof (vp->vp_nvlist); + + if (!nvlist_pack(label, &buf, &buflen, NV_ENCODE_XDR, KM_SLEEP)) { + for (; l < VDEV_LABELS; l += 2) { + vdev_label_write(zio, vd, l, vp_abd, + offsetof(vdev_label_t, vl_vdev_phys), + sizeof (vdev_phys_t), + vdev_label_sync_done, zio->io_private, + flags | ZIO_FLAG_DONT_PROPAGATE); + } + } + + abd_free(vp_abd); + nvlist_free(label); +} + +int +vdev_label_sync_list(spa_t *spa, int l, uint64_t txg, int flags) +{ + list_t *dl = &spa->spa_config_dirty_list; + vdev_t *vd; + zio_t *zio; + int error; + + /* + * Write the new labels to disk. + */ + zio = zio_root(spa, NULL, NULL, flags); + + for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) { + uint64_t *good_writes; + zio_t *vio; + + ASSERT(!vd->vdev_ishole); + + good_writes = kmem_zalloc(sizeof (uint64_t), KM_SLEEP); + vio = zio_null(zio, spa, NULL, + (vd->vdev_islog || vd->vdev_aux != NULL) ? + vdev_label_sync_ignore_done : vdev_label_sync_top_done, + good_writes, flags); + vdev_label_sync(vio, vd, l, txg, flags); + zio_nowait(vio); + } + + error = zio_wait(zio); + + /* + * Flush the new labels to disk. + */ + zio = zio_root(spa, NULL, NULL, flags); + + for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) + zio_flush(zio, vd); + + (void) zio_wait(zio); + + return (error); +} + +/* + * Sync the uberblock and any changes to the vdev configuration. + * + * The order of operations is carefully crafted to ensure that + * if the system panics or loses power at any time, the state on disk + * is still transactionally consistent. The in-line comments below + * describe the failure semantics at each stage. + * + * Moreover, vdev_config_sync() is designed to be idempotent: if it fails + * at any time, you can just call it again, and it will resume its work. + */ +int +vdev_config_sync(vdev_t **svd, int svdcount, uint64_t txg) +{ + spa_t *spa = svd[0]->vdev_spa; + uberblock_t *ub = &spa->spa_uberblock; + vdev_t *vd; + zio_t *zio; + int error = 0; + int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL; + +retry: + /* + * Normally, we don't want to try too hard to write every label and + * uberblock. If there is a flaky disk, we don't want the rest of the + * sync process to block while we retry. But if we can't write a + * single label out, we should retry with ZIO_FLAG_TRYHARD before + * bailing out and declaring the pool faulted. + */ + if (error != 0) { + if ((flags & ZIO_FLAG_TRYHARD) != 0) + return (error); + flags |= ZIO_FLAG_TRYHARD; + } + + ASSERT(ub->ub_txg <= txg); + + /* + * If this isn't a resync due to I/O errors, + * and nothing changed in this transaction group, + * and the vdev configuration hasn't changed, + * then there's nothing to do. + */ + if (ub->ub_txg < txg) { + boolean_t changed = uberblock_update(ub, spa->spa_root_vdev, + txg, spa->spa_mmp.mmp_delay); + + if (!changed && list_is_empty(&spa->spa_config_dirty_list)) + return (0); + } + + if (txg > spa_freeze_txg(spa)) + return (0); + + ASSERT(txg <= spa->spa_final_txg); + + /* + * Flush the write cache of every disk that's been written to + * in this transaction group. This ensures that all blocks + * written in this txg will be committed to stable storage + * before any uberblock that references them. + */ + zio = zio_root(spa, NULL, NULL, flags); + + for (vd = txg_list_head(&spa->spa_vdev_txg_list, TXG_CLEAN(txg)); vd; + vd = txg_list_next(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg))) + zio_flush(zio, vd); + + (void) zio_wait(zio); + + /* + * Sync out the even labels (L0, L2) for every dirty vdev. If the + * system dies in the middle of this process, that's OK: all of the + * even labels that made it to disk will be newer than any uberblock, + * and will therefore be considered invalid. The odd labels (L1, L3), + * which have not yet been touched, will still be valid. We flush + * the new labels to disk to ensure that all even-label updates + * are committed to stable storage before the uberblock update. + */ + if ((error = vdev_label_sync_list(spa, 0, txg, flags)) != 0) + goto retry; + + /* + * Sync the uberblocks to all vdevs in svd[]. + * If the system dies in the middle of this step, there are two cases + * to consider, and the on-disk state is consistent either way: + * + * (1) If none of the new uberblocks made it to disk, then the + * previous uberblock will be the newest, and the odd labels + * (which had not yet been touched) will be valid with respect + * to that uberblock. + * + * (2) If one or more new uberblocks made it to disk, then they + * will be the newest, and the even labels (which had all + * been successfully committed) will be valid with respect + * to the new uberblocks. + */ + if ((error = vdev_uberblock_sync_list(svd, svdcount, ub, flags)) != 0) + goto retry; + + + if (spa_multihost(spa)) + mmp_update_uberblock(spa, ub); + + /* + * Sync out odd labels for every dirty vdev. If the system dies + * in the middle of this process, the even labels and the new + * uberblocks will suffice to open the pool. The next time + * the pool is opened, the first thing we'll do -- before any + * user data is modified -- is mark every vdev dirty so that + * all labels will be brought up to date. We flush the new labels + * to disk to ensure that all odd-label updates are committed to + * stable storage before the next transaction group begins. + */ + if ((error = vdev_label_sync_list(spa, 1, txg, flags)) != 0) + goto retry; + + return (0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_mirror.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_mirror.c @@ -0,0 +1,675 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Virtual device vector for mirroring. + */ + +typedef struct mirror_child { + vdev_t *mc_vd; + uint64_t mc_offset; + int mc_error; + int mc_load; + uint8_t mc_tried; + uint8_t mc_skipped; + uint8_t mc_speculative; +} mirror_child_t; + +typedef struct mirror_map { + int *mm_preferred; + int mm_preferred_cnt; + int mm_children; + boolean_t mm_replacing; + boolean_t mm_root; + mirror_child_t mm_child[]; +} mirror_map_t; + +static int vdev_mirror_shift = 21; + +/* + * The load configuration settings below are tuned by default for + * the case where all devices are of the same rotational type. + * + * If there is a mixture of rotating and non-rotating media, setting + * zfs_vdev_mirror_non_rotating_seek_inc to 0 may well provide better results + * as it will direct more reads to the non-rotating vdevs which are more likely + * to have a higher performance. + */ + +/* Rotating media load calculation configuration. */ +static int zfs_vdev_mirror_rotating_inc = 0; +static int zfs_vdev_mirror_rotating_seek_inc = 5; +static int zfs_vdev_mirror_rotating_seek_offset = 1 * 1024 * 1024; + +/* Non-rotating media load calculation configuration. */ +static int zfs_vdev_mirror_non_rotating_inc = 0; +static int zfs_vdev_mirror_non_rotating_seek_inc = 1; + +static inline size_t +vdev_mirror_map_size(int children) +{ + return (offsetof(mirror_map_t, mm_child[children]) + + sizeof (int) * children); +} + +static inline mirror_map_t * +vdev_mirror_map_alloc(int children, boolean_t replacing, boolean_t root) +{ + mirror_map_t *mm; + + mm = kmem_zalloc(vdev_mirror_map_size(children), KM_SLEEP); + mm->mm_children = children; + mm->mm_replacing = replacing; + mm->mm_root = root; + mm->mm_preferred = (int *)((uintptr_t)mm + + offsetof(mirror_map_t, mm_child[children])); + + return (mm); +} + +static void +vdev_mirror_map_free(zio_t *zio) +{ + mirror_map_t *mm = zio->io_vsd; + + kmem_free(mm, vdev_mirror_map_size(mm->mm_children)); +} + +static const zio_vsd_ops_t vdev_mirror_vsd_ops = { + .vsd_free = vdev_mirror_map_free, + .vsd_cksum_report = zio_vsd_default_cksum_report +}; + +static int +vdev_mirror_load(mirror_map_t *mm, vdev_t *vd, uint64_t zio_offset) +{ + uint64_t lastoffset; + int load; + + /* All DVAs have equal weight at the root. */ + if (mm->mm_root) + return (INT_MAX); + + /* + * We don't return INT_MAX if the device is resilvering i.e. + * vdev_resilver_txg != 0 as when tested performance was slightly + * worse overall when resilvering with compared to without. + */ + + /* Standard load based on pending queue length. */ + load = vdev_queue_length(vd); + lastoffset = vdev_queue_lastoffset(vd); + + if (vd->vdev_nonrot) { + /* Non-rotating media. */ + if (lastoffset == zio_offset) + return (load + zfs_vdev_mirror_non_rotating_inc); + + /* + * Apply a seek penalty even for non-rotating devices as + * sequential I/O's can be aggregated into fewer operations on + * the device, thus avoiding unnecessary per-command overhead + * and boosting performance. + */ + return (load + zfs_vdev_mirror_non_rotating_seek_inc); + } + + /* Rotating media I/O's which directly follow the last I/O. */ + if (lastoffset == zio_offset) + return (load + zfs_vdev_mirror_rotating_inc); + + /* + * Apply half the seek increment to I/O's within seek offset + * of the last I/O queued to this vdev as they should incur less + * of a seek increment. + */ + if (ABS(lastoffset - zio_offset) < + zfs_vdev_mirror_rotating_seek_offset) + return (load + (zfs_vdev_mirror_rotating_seek_inc / 2)); + + /* Apply the full seek increment to all other I/O's. */ + return (load + zfs_vdev_mirror_rotating_seek_inc); +} + +/* + * Avoid inlining the function to keep vdev_mirror_io_start(), which + * is this functions only caller, as small as possible on the stack. + */ +noinline static mirror_map_t * +vdev_mirror_map_init(zio_t *zio) +{ + mirror_map_t *mm = NULL; + mirror_child_t *mc; + vdev_t *vd = zio->io_vd; + int c; + + if (vd == NULL) { + dva_t *dva = zio->io_bp->blk_dva; + spa_t *spa = zio->io_spa; + + mm = vdev_mirror_map_alloc(BP_GET_NDVAS(zio->io_bp), B_FALSE, + B_TRUE); + for (c = 0; c < mm->mm_children; c++) { + mc = &mm->mm_child[c]; + + mc->mc_vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[c])); + mc->mc_offset = DVA_GET_OFFSET(&dva[c]); + } + } else { + mm = vdev_mirror_map_alloc(vd->vdev_children, + (vd->vdev_ops == &vdev_replacing_ops || + vd->vdev_ops == &vdev_spare_ops), B_FALSE); + for (c = 0; c < mm->mm_children; c++) { + mc = &mm->mm_child[c]; + mc->mc_vd = vd->vdev_child[c]; + mc->mc_offset = zio->io_offset; + } + } + + zio->io_vsd = mm; + zio->io_vsd_ops = &vdev_mirror_vsd_ops; + return (mm); +} + +static int +vdev_mirror_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize, + uint64_t *ashift) +{ + int numerrors = 0; + int lasterror = 0; + int c; + + if (vd->vdev_children == 0) { + vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; + return (SET_ERROR(EINVAL)); + } + + vdev_open_children(vd); + + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + + if (cvd->vdev_open_error) { + lasterror = cvd->vdev_open_error; + numerrors++; + continue; + } + + *asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1; + *max_asize = MIN(*max_asize - 1, cvd->vdev_max_asize - 1) + 1; + *ashift = MAX(*ashift, cvd->vdev_ashift); + } + + if (numerrors == vd->vdev_children) { + vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS; + return (lasterror); + } + + return (0); +} + +static void +vdev_mirror_close(vdev_t *vd) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_close(vd->vdev_child[c]); +} + +static void +vdev_mirror_child_done(zio_t *zio) +{ + mirror_child_t *mc = zio->io_private; + + mc->mc_error = zio->io_error; + mc->mc_tried = 1; + mc->mc_skipped = 0; +} + +static void +vdev_mirror_scrub_done(zio_t *zio) +{ + mirror_child_t *mc = zio->io_private; + + if (zio->io_error == 0) { + zio_t *pio; + zio_link_t *zl = NULL; + + mutex_enter(&zio->io_lock); + while ((pio = zio_walk_parents(zio, &zl)) != NULL) { + mutex_enter(&pio->io_lock); + ASSERT3U(zio->io_size, >=, pio->io_size); + abd_copy(pio->io_abd, zio->io_abd, pio->io_size); + mutex_exit(&pio->io_lock); + } + mutex_exit(&zio->io_lock); + } + + abd_free(zio->io_abd); + + mc->mc_error = zio->io_error; + mc->mc_tried = 1; + mc->mc_skipped = 0; +} + +/* + * Check the other, lower-index DVAs to see if they're on the same + * vdev as the child we picked. If they are, use them since they + * are likely to have been allocated from the primary metaslab in + * use at the time, and hence are more likely to have locality with + * single-copy data. + */ +static int +vdev_mirror_dva_select(zio_t *zio, int p) +{ + dva_t *dva = zio->io_bp->blk_dva; + mirror_map_t *mm = zio->io_vsd; + int preferred; + int c; + + preferred = mm->mm_preferred[p]; + for (p--; p >= 0; p--) { + c = mm->mm_preferred[p]; + if (DVA_GET_VDEV(&dva[c]) == DVA_GET_VDEV(&dva[preferred])) + preferred = c; + } + return (preferred); +} + +static int +vdev_mirror_preferred_child_randomize(zio_t *zio) +{ + mirror_map_t *mm = zio->io_vsd; + int p; + + if (mm->mm_root) { + p = spa_get_random(mm->mm_preferred_cnt); + return (vdev_mirror_dva_select(zio, p)); + } + + /* + * To ensure we don't always favour the first matching vdev, + * which could lead to wear leveling issues on SSD's, we + * use the I/O offset as a pseudo random seed into the vdevs + * which have the lowest load. + */ + p = (zio->io_offset >> vdev_mirror_shift) % mm->mm_preferred_cnt; + return (mm->mm_preferred[p]); +} + +/* + * Try to find a vdev whose DTL doesn't contain the block we want to read + * prefering vdevs based on determined load. + * + * Try to find a child whose DTL doesn't contain the block we want to read. + * If we can't, try the read on any vdev we haven't already tried. + */ +static int +vdev_mirror_child_select(zio_t *zio) +{ + mirror_map_t *mm = zio->io_vsd; + uint64_t txg = zio->io_txg; + int c, lowest_load; + + ASSERT(zio->io_bp == NULL || BP_PHYSICAL_BIRTH(zio->io_bp) == txg); + + lowest_load = INT_MAX; + mm->mm_preferred_cnt = 0; + for (c = 0; c < mm->mm_children; c++) { + mirror_child_t *mc; + + mc = &mm->mm_child[c]; + if (mc->mc_tried || mc->mc_skipped) + continue; + + if (mc->mc_vd == NULL || !vdev_readable(mc->mc_vd)) { + mc->mc_error = SET_ERROR(ENXIO); + mc->mc_tried = 1; /* don't even try */ + mc->mc_skipped = 1; + continue; + } + + if (vdev_dtl_contains(mc->mc_vd, DTL_MISSING, txg, 1)) { + mc->mc_error = SET_ERROR(ESTALE); + mc->mc_skipped = 1; + mc->mc_speculative = 1; + continue; + } + + mc->mc_load = vdev_mirror_load(mm, mc->mc_vd, mc->mc_offset); + if (mc->mc_load > lowest_load) + continue; + + if (mc->mc_load < lowest_load) { + lowest_load = mc->mc_load; + mm->mm_preferred_cnt = 0; + } + mm->mm_preferred[mm->mm_preferred_cnt] = c; + mm->mm_preferred_cnt++; + } + + if (mm->mm_preferred_cnt == 1) { + vdev_queue_register_lastoffset( + mm->mm_child[mm->mm_preferred[0]].mc_vd, zio); + return (mm->mm_preferred[0]); + } + + if (mm->mm_preferred_cnt > 1) { + int c = vdev_mirror_preferred_child_randomize(zio); + + vdev_queue_register_lastoffset(mm->mm_child[c].mc_vd, zio); + return (c); + } + + /* + * Every device is either missing or has this txg in its DTL. + * Look for any child we haven't already tried before giving up. + */ + for (c = 0; c < mm->mm_children; c++) { + if (!mm->mm_child[c].mc_tried) { + vdev_queue_register_lastoffset(mm->mm_child[c].mc_vd, + zio); + return (c); + } + } + + /* + * Every child failed. There's no place left to look. + */ + return (-1); +} + +static void +vdev_mirror_io_start(zio_t *zio) +{ + mirror_map_t *mm; + mirror_child_t *mc; + int c, children; + + mm = vdev_mirror_map_init(zio); + + if (zio->io_type == ZIO_TYPE_READ) { + if ((zio->io_flags & ZIO_FLAG_SCRUB) && !mm->mm_replacing) { + /* + * For scrubbing reads we need to allocate a read + * buffer for each child and issue reads to all + * children. If any child succeeds, it will copy its + * data into zio->io_data in vdev_mirror_scrub_done. + */ + for (c = 0; c < mm->mm_children; c++) { + mc = &mm->mm_child[c]; + zio_nowait(zio_vdev_child_io(zio, zio->io_bp, + mc->mc_vd, mc->mc_offset, + abd_alloc_sametype(zio->io_abd, + zio->io_size), zio->io_size, + zio->io_type, zio->io_priority, 0, + vdev_mirror_scrub_done, mc)); + } + zio_execute(zio); + return; + } + /* + * For normal reads just pick one child. + */ + c = vdev_mirror_child_select(zio); + children = (c >= 0); + } else { + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + + /* + * Writes go to all children. + */ + c = 0; + children = mm->mm_children; + } + + while (children--) { + mc = &mm->mm_child[c]; + zio_nowait(zio_vdev_child_io(zio, zio->io_bp, + mc->mc_vd, mc->mc_offset, zio->io_abd, zio->io_size, + zio->io_type, zio->io_priority, 0, + vdev_mirror_child_done, mc)); + c++; + } + + zio_execute(zio); +} + +static int +vdev_mirror_worst_error(mirror_map_t *mm) +{ + int c, error[2] = { 0, 0 }; + + for (c = 0; c < mm->mm_children; c++) { + mirror_child_t *mc = &mm->mm_child[c]; + int s = mc->mc_speculative; + error[s] = zio_worst_error(error[s], mc->mc_error); + } + + return (error[0] ? error[0] : error[1]); +} + +static void +vdev_mirror_io_done(zio_t *zio) +{ + mirror_map_t *mm = zio->io_vsd; + mirror_child_t *mc; + int c; + int good_copies = 0; + int unexpected_errors = 0; + + for (c = 0; c < mm->mm_children; c++) { + mc = &mm->mm_child[c]; + + if (mc->mc_error) { + if (!mc->mc_skipped) + unexpected_errors++; + } else if (mc->mc_tried) { + good_copies++; + } + } + + if (zio->io_type == ZIO_TYPE_WRITE) { + /* + * XXX -- for now, treat partial writes as success. + * + * Now that we support write reallocation, it would be better + * to treat partial failure as real failure unless there are + * no non-degraded top-level vdevs left, and not update DTLs + * if we intend to reallocate. + */ + /* XXPOLICY */ + if (good_copies != mm->mm_children) { + /* + * Always require at least one good copy. + * + * For ditto blocks (io_vd == NULL), require + * all copies to be good. + * + * XXX -- for replacing vdevs, there's no great answer. + * If the old device is really dead, we may not even + * be able to access it -- so we only want to + * require good writes to the new device. But if + * the new device turns out to be flaky, we want + * to be able to detach it -- which requires all + * writes to the old device to have succeeded. + */ + if (good_copies == 0 || zio->io_vd == NULL) + zio->io_error = vdev_mirror_worst_error(mm); + } + return; + } + + ASSERT(zio->io_type == ZIO_TYPE_READ); + + /* + * If we don't have a good copy yet, keep trying other children. + */ + /* XXPOLICY */ + if (good_copies == 0 && (c = vdev_mirror_child_select(zio)) != -1) { + ASSERT(c >= 0 && c < mm->mm_children); + mc = &mm->mm_child[c]; + zio_vdev_io_redone(zio); + zio_nowait(zio_vdev_child_io(zio, zio->io_bp, + mc->mc_vd, mc->mc_offset, zio->io_abd, zio->io_size, + ZIO_TYPE_READ, zio->io_priority, 0, + vdev_mirror_child_done, mc)); + return; + } + + /* XXPOLICY */ + if (good_copies == 0) { + zio->io_error = vdev_mirror_worst_error(mm); + ASSERT(zio->io_error != 0); + } + + if (good_copies && spa_writeable(zio->io_spa) && + (unexpected_errors || + (zio->io_flags & ZIO_FLAG_RESILVER) || + ((zio->io_flags & ZIO_FLAG_SCRUB) && mm->mm_replacing))) { + /* + * Use the good data we have in hand to repair damaged children. + */ + for (c = 0; c < mm->mm_children; c++) { + /* + * Don't rewrite known good children. + * Not only is it unnecessary, it could + * actually be harmful: if the system lost + * power while rewriting the only good copy, + * there would be no good copies left! + */ + mc = &mm->mm_child[c]; + + if (mc->mc_error == 0) { + if (mc->mc_tried) + continue; + if (!(zio->io_flags & ZIO_FLAG_SCRUB) && + !vdev_dtl_contains(mc->mc_vd, DTL_PARTIAL, + zio->io_txg, 1)) + continue; + mc->mc_error = SET_ERROR(ESTALE); + } + + zio_nowait(zio_vdev_child_io(zio, zio->io_bp, + mc->mc_vd, mc->mc_offset, + zio->io_abd, zio->io_size, + ZIO_TYPE_WRITE, ZIO_PRIORITY_ASYNC_WRITE, + ZIO_FLAG_IO_REPAIR | (unexpected_errors ? + ZIO_FLAG_SELF_HEAL : 0), NULL, NULL)); + } + } +} + +static void +vdev_mirror_state_change(vdev_t *vd, int faulted, int degraded) +{ + if (faulted == vd->vdev_children) + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_NO_REPLICAS); + else if (degraded + faulted != 0) + vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE); + else + vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE); +} + +vdev_ops_t vdev_mirror_ops = { + vdev_mirror_open, + vdev_mirror_close, + vdev_default_asize, + vdev_mirror_io_start, + vdev_mirror_io_done, + vdev_mirror_state_change, + NULL, + NULL, + NULL, + VDEV_TYPE_MIRROR, /* name of this vdev type */ + B_FALSE /* not a leaf vdev */ +}; + +vdev_ops_t vdev_replacing_ops = { + vdev_mirror_open, + vdev_mirror_close, + vdev_default_asize, + vdev_mirror_io_start, + vdev_mirror_io_done, + vdev_mirror_state_change, + NULL, + NULL, + NULL, + VDEV_TYPE_REPLACING, /* name of this vdev type */ + B_FALSE /* not a leaf vdev */ +}; + +vdev_ops_t vdev_spare_ops = { + vdev_mirror_open, + vdev_mirror_close, + vdev_default_asize, + vdev_mirror_io_start, + vdev_mirror_io_done, + vdev_mirror_state_change, + NULL, + NULL, + NULL, + VDEV_TYPE_SPARE, /* name of this vdev type */ + B_FALSE /* not a leaf vdev */ +}; + +#if defined(_KERNEL) && defined(HAVE_SPL) +/* BEGIN CSTYLED */ +module_param(zfs_vdev_mirror_rotating_inc, int, 0644); +MODULE_PARM_DESC(zfs_vdev_mirror_rotating_inc, + "Rotating media load increment for non-seeking I/O's"); + +module_param(zfs_vdev_mirror_rotating_seek_inc, int, 0644); +MODULE_PARM_DESC(zfs_vdev_mirror_rotating_seek_inc, + "Rotating media load increment for seeking I/O's"); + +module_param(zfs_vdev_mirror_rotating_seek_offset, int, 0644); + +MODULE_PARM_DESC(zfs_vdev_mirror_rotating_seek_offset, + "Offset in bytes from the last I/O which " + "triggers a reduced rotating media seek increment"); + +module_param(zfs_vdev_mirror_non_rotating_inc, int, 0644); +MODULE_PARM_DESC(zfs_vdev_mirror_non_rotating_inc, + "Non-rotating media load increment for non-seeking I/O's"); + +module_param(zfs_vdev_mirror_non_rotating_seek_inc, int, 0644); +MODULE_PARM_DESC(zfs_vdev_mirror_non_rotating_seek_inc, + "Non-rotating media load increment for seeking I/O's"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_missing.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_missing.c @@ -0,0 +1,108 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +/* + * The 'missing' vdev is a special vdev type used only during import. It + * signifies a placeholder in the root vdev for some vdev that we know is + * missing. We pass it down to the kernel to allow the rest of the + * configuration to parsed and an attempt made to open all available devices. + * Because its GUID is always 0, we know that the guid sum will mismatch and we + * won't be able to open the pool anyway. + */ + +#include +#include +#include +#include +#include + +/* ARGSUSED */ +static int +vdev_missing_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize, + uint64_t *ashift) +{ + /* + * Really this should just fail. But then the root vdev will be in the + * faulted state with VDEV_AUX_NO_REPLICAS, when what we really want is + * VDEV_AUX_BAD_GUID_SUM. So we pretend to succeed, knowing that we + * will fail the GUID sum check before ever trying to open the pool. + */ + *psize = 0; + *max_psize = 0; + *ashift = 0; + return (0); +} + +/* ARGSUSED */ +static void +vdev_missing_close(vdev_t *vd) +{ +} + +/* ARGSUSED */ +static void +vdev_missing_io_start(zio_t *zio) +{ + zio->io_error = SET_ERROR(ENOTSUP); + zio_execute(zio); +} + +/* ARGSUSED */ +static void +vdev_missing_io_done(zio_t *zio) +{ +} + +vdev_ops_t vdev_missing_ops = { + vdev_missing_open, + vdev_missing_close, + vdev_default_asize, + vdev_missing_io_start, + vdev_missing_io_done, + NULL, + NULL, + NULL, + NULL, + VDEV_TYPE_MISSING, /* name of this vdev type */ + B_TRUE /* leaf vdev */ +}; + +vdev_ops_t vdev_hole_ops = { + vdev_missing_open, + vdev_missing_close, + vdev_default_asize, + vdev_missing_io_start, + vdev_missing_io_done, + NULL, + NULL, + NULL, + NULL, + VDEV_TYPE_HOLE, /* name of this vdev type */ + B_TRUE /* leaf vdev */ +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_queue.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_queue.c @@ -0,0 +1,894 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ZFS I/O Scheduler + * --------------- + * + * ZFS issues I/O operations to leaf vdevs to satisfy and complete zios. The + * I/O scheduler determines when and in what order those operations are + * issued. The I/O scheduler divides operations into five I/O classes + * prioritized in the following order: sync read, sync write, async read, + * async write, and scrub/resilver. Each queue defines the minimum and + * maximum number of concurrent operations that may be issued to the device. + * In addition, the device has an aggregate maximum. Note that the sum of the + * per-queue minimums must not exceed the aggregate maximum. If the + * sum of the per-queue maximums exceeds the aggregate maximum, then the + * number of active i/os may reach zfs_vdev_max_active, in which case no + * further i/os will be issued regardless of whether all per-queue + * minimums have been met. + * + * For many physical devices, throughput increases with the number of + * concurrent operations, but latency typically suffers. Further, physical + * devices typically have a limit at which more concurrent operations have no + * effect on throughput or can actually cause it to decrease. + * + * The scheduler selects the next operation to issue by first looking for an + * I/O class whose minimum has not been satisfied. Once all are satisfied and + * the aggregate maximum has not been hit, the scheduler looks for classes + * whose maximum has not been satisfied. Iteration through the I/O classes is + * done in the order specified above. No further operations are issued if the + * aggregate maximum number of concurrent operations has been hit or if there + * are no operations queued for an I/O class that has not hit its maximum. + * Every time an i/o is queued or an operation completes, the I/O scheduler + * looks for new operations to issue. + * + * All I/O classes have a fixed maximum number of outstanding operations + * except for the async write class. Asynchronous writes represent the data + * that is committed to stable storage during the syncing stage for + * transaction groups (see txg.c). Transaction groups enter the syncing state + * periodically so the number of queued async writes will quickly burst up and + * then bleed down to zero. Rather than servicing them as quickly as possible, + * the I/O scheduler changes the maximum number of active async write i/os + * according to the amount of dirty data in the pool (see dsl_pool.c). Since + * both throughput and latency typically increase with the number of + * concurrent operations issued to physical devices, reducing the burstiness + * in the number of concurrent operations also stabilizes the response time of + * operations from other -- and in particular synchronous -- queues. In broad + * strokes, the I/O scheduler will issue more concurrent operations from the + * async write queue as there's more dirty data in the pool. + * + * Async Writes + * + * The number of concurrent operations issued for the async write I/O class + * follows a piece-wise linear function defined by a few adjustable points. + * + * | o---------| <-- zfs_vdev_async_write_max_active + * ^ | /^ | + * | | / | | + * active | / | | + * I/O | / | | + * count | / | | + * | / | | + * |------------o | | <-- zfs_vdev_async_write_min_active + * 0|____________^______|_________| + * 0% | | 100% of zfs_dirty_data_max + * | | + * | `-- zfs_vdev_async_write_active_max_dirty_percent + * `--------- zfs_vdev_async_write_active_min_dirty_percent + * + * Until the amount of dirty data exceeds a minimum percentage of the dirty + * data allowed in the pool, the I/O scheduler will limit the number of + * concurrent operations to the minimum. As that threshold is crossed, the + * number of concurrent operations issued increases linearly to the maximum at + * the specified maximum percentage of the dirty data allowed in the pool. + * + * Ideally, the amount of dirty data on a busy pool will stay in the sloped + * part of the function between zfs_vdev_async_write_active_min_dirty_percent + * and zfs_vdev_async_write_active_max_dirty_percent. If it exceeds the + * maximum percentage, this indicates that the rate of incoming data is + * greater than the rate that the backend storage can handle. In this case, we + * must further throttle incoming writes (see dmu_tx_delay() for details). + */ + +/* + * The maximum number of i/os active to each device. Ideally, this will be >= + * the sum of each queue's max_active. It must be at least the sum of each + * queue's min_active. + */ +uint32_t zfs_vdev_max_active = 1000; + +/* + * Per-queue limits on the number of i/os active to each device. If the + * number of active i/os is < zfs_vdev_max_active, then the min_active comes + * into play. We will send min_active from each queue, and then select from + * queues in the order defined by zio_priority_t. + * + * In general, smaller max_active's will lead to lower latency of synchronous + * operations. Larger max_active's may lead to higher overall throughput, + * depending on underlying storage. + * + * The ratio of the queues' max_actives determines the balance of performance + * between reads, writes, and scrubs. E.g., increasing + * zfs_vdev_scrub_max_active will cause the scrub or resilver to complete + * more quickly, but reads and writes to have higher latency and lower + * throughput. + */ +uint32_t zfs_vdev_sync_read_min_active = 10; +uint32_t zfs_vdev_sync_read_max_active = 10; +uint32_t zfs_vdev_sync_write_min_active = 10; +uint32_t zfs_vdev_sync_write_max_active = 10; +uint32_t zfs_vdev_async_read_min_active = 1; +uint32_t zfs_vdev_async_read_max_active = 3; +uint32_t zfs_vdev_async_write_min_active = 2; +uint32_t zfs_vdev_async_write_max_active = 10; +uint32_t zfs_vdev_scrub_min_active = 1; +uint32_t zfs_vdev_scrub_max_active = 2; + +/* + * When the pool has less than zfs_vdev_async_write_active_min_dirty_percent + * dirty data, use zfs_vdev_async_write_min_active. When it has more than + * zfs_vdev_async_write_active_max_dirty_percent, use + * zfs_vdev_async_write_max_active. The value is linearly interpolated + * between min and max. + */ +int zfs_vdev_async_write_active_min_dirty_percent = 30; +int zfs_vdev_async_write_active_max_dirty_percent = 60; + +/* + * To reduce IOPs, we aggregate small adjacent I/Os into one large I/O. + * For read I/Os, we also aggregate across small adjacency gaps; for writes + * we include spans of optional I/Os to aid aggregation at the disk even when + * they aren't able to help us aggregate at this level. + */ +int zfs_vdev_aggregation_limit = SPA_OLD_MAXBLOCKSIZE; +int zfs_vdev_read_gap_limit = 32 << 10; +int zfs_vdev_write_gap_limit = 4 << 10; + +/* + * Define the queue depth percentage for each top-level. This percentage is + * used in conjunction with zfs_vdev_async_max_active to determine how many + * allocations a specific top-level vdev should handle. Once the queue depth + * reaches zfs_vdev_queue_depth_pct * zfs_vdev_async_write_max_active / 100 + * then allocator will stop allocating blocks on that top-level device. + * The default kernel setting is 1000% which will yield 100 allocations per + * device. For userland testing, the default setting is 300% which equates + * to 30 allocations per device. + */ +#ifdef _KERNEL +int zfs_vdev_queue_depth_pct = 1000; +#else +int zfs_vdev_queue_depth_pct = 300; +#endif + + +int +vdev_queue_offset_compare(const void *x1, const void *x2) +{ + const zio_t *z1 = (const zio_t *)x1; + const zio_t *z2 = (const zio_t *)x2; + + int cmp = AVL_CMP(z1->io_offset, z2->io_offset); + + if (likely(cmp)) + return (cmp); + + return (AVL_PCMP(z1, z2)); +} + +static inline avl_tree_t * +vdev_queue_class_tree(vdev_queue_t *vq, zio_priority_t p) +{ + return (&vq->vq_class[p].vqc_queued_tree); +} + +static inline avl_tree_t * +vdev_queue_type_tree(vdev_queue_t *vq, zio_type_t t) +{ + ASSERT(t == ZIO_TYPE_READ || t == ZIO_TYPE_WRITE); + if (t == ZIO_TYPE_READ) + return (&vq->vq_read_offset_tree); + else + return (&vq->vq_write_offset_tree); +} + +int +vdev_queue_timestamp_compare(const void *x1, const void *x2) +{ + const zio_t *z1 = (const zio_t *)x1; + const zio_t *z2 = (const zio_t *)x2; + + int cmp = AVL_CMP(z1->io_timestamp, z2->io_timestamp); + + if (likely(cmp)) + return (cmp); + + return (AVL_PCMP(z1, z2)); +} + +static int +vdev_queue_class_min_active(zio_priority_t p) +{ + switch (p) { + case ZIO_PRIORITY_SYNC_READ: + return (zfs_vdev_sync_read_min_active); + case ZIO_PRIORITY_SYNC_WRITE: + return (zfs_vdev_sync_write_min_active); + case ZIO_PRIORITY_ASYNC_READ: + return (zfs_vdev_async_read_min_active); + case ZIO_PRIORITY_ASYNC_WRITE: + return (zfs_vdev_async_write_min_active); + case ZIO_PRIORITY_SCRUB: + return (zfs_vdev_scrub_min_active); + default: + panic("invalid priority %u", p); + return (0); + } +} + +static int +vdev_queue_max_async_writes(spa_t *spa) +{ + int writes; + uint64_t dirty = 0; + dsl_pool_t *dp = spa_get_dsl(spa); + uint64_t min_bytes = zfs_dirty_data_max * + zfs_vdev_async_write_active_min_dirty_percent / 100; + uint64_t max_bytes = zfs_dirty_data_max * + zfs_vdev_async_write_active_max_dirty_percent / 100; + + /* + * Async writes may occur before the assignment of the spa's + * dsl_pool_t if a self-healing zio is issued prior to the + * completion of dmu_objset_open_impl(). + */ + if (dp == NULL) + return (zfs_vdev_async_write_max_active); + + /* + * Sync tasks correspond to interactive user actions. To reduce the + * execution time of those actions we push data out as fast as possible. + */ + if (spa_has_pending_synctask(spa)) + return (zfs_vdev_async_write_max_active); + + dirty = dp->dp_dirty_total; + if (dirty < min_bytes) + return (zfs_vdev_async_write_min_active); + if (dirty > max_bytes) + return (zfs_vdev_async_write_max_active); + + /* + * linear interpolation: + * slope = (max_writes - min_writes) / (max_bytes - min_bytes) + * move right by min_bytes + * move up by min_writes + */ + writes = (dirty - min_bytes) * + (zfs_vdev_async_write_max_active - + zfs_vdev_async_write_min_active) / + (max_bytes - min_bytes) + + zfs_vdev_async_write_min_active; + ASSERT3U(writes, >=, zfs_vdev_async_write_min_active); + ASSERT3U(writes, <=, zfs_vdev_async_write_max_active); + return (writes); +} + +static int +vdev_queue_class_max_active(spa_t *spa, zio_priority_t p) +{ + switch (p) { + case ZIO_PRIORITY_SYNC_READ: + return (zfs_vdev_sync_read_max_active); + case ZIO_PRIORITY_SYNC_WRITE: + return (zfs_vdev_sync_write_max_active); + case ZIO_PRIORITY_ASYNC_READ: + return (zfs_vdev_async_read_max_active); + case ZIO_PRIORITY_ASYNC_WRITE: + return (vdev_queue_max_async_writes(spa)); + case ZIO_PRIORITY_SCRUB: + return (zfs_vdev_scrub_max_active); + default: + panic("invalid priority %u", p); + return (0); + } +} + +/* + * Return the i/o class to issue from, or ZIO_PRIORITY_MAX_QUEUEABLE if + * there is no eligible class. + */ +static zio_priority_t +vdev_queue_class_to_issue(vdev_queue_t *vq) +{ + spa_t *spa = vq->vq_vdev->vdev_spa; + zio_priority_t p; + + if (avl_numnodes(&vq->vq_active_tree) >= zfs_vdev_max_active) + return (ZIO_PRIORITY_NUM_QUEUEABLE); + + /* find a queue that has not reached its minimum # outstanding i/os */ + for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { + if (avl_numnodes(vdev_queue_class_tree(vq, p)) > 0 && + vq->vq_class[p].vqc_active < + vdev_queue_class_min_active(p)) + return (p); + } + + /* + * If we haven't found a queue, look for one that hasn't reached its + * maximum # outstanding i/os. + */ + for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { + if (avl_numnodes(vdev_queue_class_tree(vq, p)) > 0 && + vq->vq_class[p].vqc_active < + vdev_queue_class_max_active(spa, p)) + return (p); + } + + /* No eligible queued i/os */ + return (ZIO_PRIORITY_NUM_QUEUEABLE); +} + +void +vdev_queue_init(vdev_t *vd) +{ + vdev_queue_t *vq = &vd->vdev_queue; + zio_priority_t p; + + mutex_init(&vq->vq_lock, NULL, MUTEX_DEFAULT, NULL); + vq->vq_vdev = vd; + taskq_init_ent(&vd->vdev_queue.vq_io_search.io_tqent); + + avl_create(&vq->vq_active_tree, vdev_queue_offset_compare, + sizeof (zio_t), offsetof(struct zio, io_queue_node)); + avl_create(vdev_queue_type_tree(vq, ZIO_TYPE_READ), + vdev_queue_offset_compare, sizeof (zio_t), + offsetof(struct zio, io_offset_node)); + avl_create(vdev_queue_type_tree(vq, ZIO_TYPE_WRITE), + vdev_queue_offset_compare, sizeof (zio_t), + offsetof(struct zio, io_offset_node)); + + for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) { + int (*compfn) (const void *, const void *); + + /* + * The synchronous i/o queues are dispatched in FIFO rather + * than LBA order. This provides more consistent latency for + * these i/os. + */ + if (p == ZIO_PRIORITY_SYNC_READ || p == ZIO_PRIORITY_SYNC_WRITE) + compfn = vdev_queue_timestamp_compare; + else + compfn = vdev_queue_offset_compare; + avl_create(vdev_queue_class_tree(vq, p), compfn, + sizeof (zio_t), offsetof(struct zio, io_queue_node)); + } + + vq->vq_lastoffset = 0; +} + +void +vdev_queue_fini(vdev_t *vd) +{ + vdev_queue_t *vq = &vd->vdev_queue; + zio_priority_t p; + + for (p = 0; p < ZIO_PRIORITY_NUM_QUEUEABLE; p++) + avl_destroy(vdev_queue_class_tree(vq, p)); + avl_destroy(&vq->vq_active_tree); + avl_destroy(vdev_queue_type_tree(vq, ZIO_TYPE_READ)); + avl_destroy(vdev_queue_type_tree(vq, ZIO_TYPE_WRITE)); + + mutex_destroy(&vq->vq_lock); +} + +static void +vdev_queue_io_add(vdev_queue_t *vq, zio_t *zio) +{ + spa_t *spa = zio->io_spa; + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + + ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); + avl_add(vdev_queue_class_tree(vq, zio->io_priority), zio); + avl_add(vdev_queue_type_tree(vq, zio->io_type), zio); + + if (ssh->kstat != NULL) { + mutex_enter(&ssh->lock); + kstat_waitq_enter(ssh->kstat->ks_data); + mutex_exit(&ssh->lock); + } +} + +static void +vdev_queue_io_remove(vdev_queue_t *vq, zio_t *zio) +{ + spa_t *spa = zio->io_spa; + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + + ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); + avl_remove(vdev_queue_class_tree(vq, zio->io_priority), zio); + avl_remove(vdev_queue_type_tree(vq, zio->io_type), zio); + + if (ssh->kstat != NULL) { + mutex_enter(&ssh->lock); + kstat_waitq_exit(ssh->kstat->ks_data); + mutex_exit(&ssh->lock); + } +} + +static void +vdev_queue_pending_add(vdev_queue_t *vq, zio_t *zio) +{ + spa_t *spa = zio->io_spa; + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + + ASSERT(MUTEX_HELD(&vq->vq_lock)); + ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); + vq->vq_class[zio->io_priority].vqc_active++; + avl_add(&vq->vq_active_tree, zio); + + if (ssh->kstat != NULL) { + mutex_enter(&ssh->lock); + kstat_runq_enter(ssh->kstat->ks_data); + mutex_exit(&ssh->lock); + } +} + +static void +vdev_queue_pending_remove(vdev_queue_t *vq, zio_t *zio) +{ + spa_t *spa = zio->io_spa; + spa_stats_history_t *ssh = &spa->spa_stats.io_history; + + ASSERT(MUTEX_HELD(&vq->vq_lock)); + ASSERT3U(zio->io_priority, <, ZIO_PRIORITY_NUM_QUEUEABLE); + vq->vq_class[zio->io_priority].vqc_active--; + avl_remove(&vq->vq_active_tree, zio); + + if (ssh->kstat != NULL) { + kstat_io_t *ksio = ssh->kstat->ks_data; + + mutex_enter(&ssh->lock); + kstat_runq_exit(ksio); + if (zio->io_type == ZIO_TYPE_READ) { + ksio->reads++; + ksio->nread += zio->io_size; + } else if (zio->io_type == ZIO_TYPE_WRITE) { + ksio->writes++; + ksio->nwritten += zio->io_size; + } + mutex_exit(&ssh->lock); + } +} + +static void +vdev_queue_agg_io_done(zio_t *aio) +{ + if (aio->io_type == ZIO_TYPE_READ) { + zio_t *pio; + zio_link_t *zl = NULL; + while ((pio = zio_walk_parents(aio, &zl)) != NULL) { + abd_copy_off(pio->io_abd, aio->io_abd, + 0, pio->io_offset - aio->io_offset, pio->io_size); + } + } + + abd_free(aio->io_abd); +} + +/* + * Compute the range spanned by two i/os, which is the endpoint of the last + * (lio->io_offset + lio->io_size) minus start of the first (fio->io_offset). + * Conveniently, the gap between fio and lio is given by -IO_SPAN(lio, fio); + * thus fio and lio are adjacent if and only if IO_SPAN(lio, fio) == 0. + */ +#define IO_SPAN(fio, lio) ((lio)->io_offset + (lio)->io_size - (fio)->io_offset) +#define IO_GAP(fio, lio) (-IO_SPAN(lio, fio)) + +static zio_t * +vdev_queue_aggregate(vdev_queue_t *vq, zio_t *zio) +{ + zio_t *first, *last, *aio, *dio, *mandatory, *nio; + uint64_t maxgap = 0; + uint64_t size; + uint64_t limit; + int maxblocksize; + boolean_t stretch = B_FALSE; + avl_tree_t *t = vdev_queue_type_tree(vq, zio->io_type); + enum zio_flag flags = zio->io_flags & ZIO_FLAG_AGG_INHERIT; + abd_t *abd; + + maxblocksize = spa_maxblocksize(vq->vq_vdev->vdev_spa); + limit = MAX(MIN(zfs_vdev_aggregation_limit, maxblocksize), 0); + + if (zio->io_flags & ZIO_FLAG_DONT_AGGREGATE || limit == 0) + return (NULL); + + first = last = zio; + + if (zio->io_type == ZIO_TYPE_READ) + maxgap = zfs_vdev_read_gap_limit; + + /* + * We can aggregate I/Os that are sufficiently adjacent and of + * the same flavor, as expressed by the AGG_INHERIT flags. + * The latter requirement is necessary so that certain + * attributes of the I/O, such as whether it's a normal I/O + * or a scrub/resilver, can be preserved in the aggregate. + * We can include optional I/Os, but don't allow them + * to begin a range as they add no benefit in that situation. + */ + + /* + * We keep track of the last non-optional I/O. + */ + mandatory = (first->io_flags & ZIO_FLAG_OPTIONAL) ? NULL : first; + + /* + * Walk backwards through sufficiently contiguous I/Os + * recording the last non-optional I/O. + */ + while ((dio = AVL_PREV(t, first)) != NULL && + (dio->io_flags & ZIO_FLAG_AGG_INHERIT) == flags && + IO_SPAN(dio, last) <= limit && + IO_GAP(dio, first) <= maxgap) { + first = dio; + if (mandatory == NULL && !(first->io_flags & ZIO_FLAG_OPTIONAL)) + mandatory = first; + } + + /* + * Skip any initial optional I/Os. + */ + while ((first->io_flags & ZIO_FLAG_OPTIONAL) && first != last) { + first = AVL_NEXT(t, first); + ASSERT(first != NULL); + } + + + /* + * Walk forward through sufficiently contiguous I/Os. + * The aggregation limit does not apply to optional i/os, so that + * we can issue contiguous writes even if they are larger than the + * aggregation limit. + */ + while ((dio = AVL_NEXT(t, last)) != NULL && + (dio->io_flags & ZIO_FLAG_AGG_INHERIT) == flags && + (IO_SPAN(first, dio) <= limit || + (dio->io_flags & ZIO_FLAG_OPTIONAL)) && + IO_SPAN(first, dio) <= maxblocksize && + IO_GAP(last, dio) <= maxgap) { + last = dio; + if (!(last->io_flags & ZIO_FLAG_OPTIONAL)) + mandatory = last; + } + + /* + * Now that we've established the range of the I/O aggregation + * we must decide what to do with trailing optional I/Os. + * For reads, there's nothing to do. While we are unable to + * aggregate further, it's possible that a trailing optional + * I/O would allow the underlying device to aggregate with + * subsequent I/Os. We must therefore determine if the next + * non-optional I/O is close enough to make aggregation + * worthwhile. + */ + if (zio->io_type == ZIO_TYPE_WRITE && mandatory != NULL) { + zio_t *nio = last; + while ((dio = AVL_NEXT(t, nio)) != NULL && + IO_GAP(nio, dio) == 0 && + IO_GAP(mandatory, dio) <= zfs_vdev_write_gap_limit) { + nio = dio; + if (!(nio->io_flags & ZIO_FLAG_OPTIONAL)) { + stretch = B_TRUE; + break; + } + } + } + + if (stretch) { + /* + * We are going to include an optional io in our aggregated + * span, thus closing the write gap. Only mandatory i/os can + * start aggregated spans, so make sure that the next i/o + * after our span is mandatory. + */ + dio = AVL_NEXT(t, last); + dio->io_flags &= ~ZIO_FLAG_OPTIONAL; + } else { + /* do not include the optional i/o */ + while (last != mandatory && last != first) { + ASSERT(last->io_flags & ZIO_FLAG_OPTIONAL); + last = AVL_PREV(t, last); + ASSERT(last != NULL); + } + } + + if (first == last) + return (NULL); + + size = IO_SPAN(first, last); + ASSERT3U(size, <=, maxblocksize); + + abd = abd_alloc_for_io(size, B_TRUE); + if (abd == NULL) + return (NULL); + + aio = zio_vdev_delegated_io(first->io_vd, first->io_offset, + abd, size, first->io_type, zio->io_priority, + flags | ZIO_FLAG_DONT_CACHE | ZIO_FLAG_DONT_QUEUE, + vdev_queue_agg_io_done, NULL); + aio->io_timestamp = first->io_timestamp; + + nio = first; + do { + dio = nio; + nio = AVL_NEXT(t, dio); + ASSERT3U(dio->io_type, ==, aio->io_type); + + if (dio->io_flags & ZIO_FLAG_NODATA) { + ASSERT3U(dio->io_type, ==, ZIO_TYPE_WRITE); + abd_zero_off(aio->io_abd, + dio->io_offset - aio->io_offset, dio->io_size); + } else if (dio->io_type == ZIO_TYPE_WRITE) { + abd_copy_off(aio->io_abd, dio->io_abd, + dio->io_offset - aio->io_offset, 0, dio->io_size); + } + + zio_add_child(dio, aio); + vdev_queue_io_remove(vq, dio); + zio_vdev_io_bypass(dio); + zio_execute(dio); + } while (dio != last); + + return (aio); +} + +static zio_t * +vdev_queue_io_to_issue(vdev_queue_t *vq) +{ + zio_t *zio, *aio; + zio_priority_t p; + avl_index_t idx; + avl_tree_t *tree; + +again: + ASSERT(MUTEX_HELD(&vq->vq_lock)); + + p = vdev_queue_class_to_issue(vq); + + if (p == ZIO_PRIORITY_NUM_QUEUEABLE) { + /* No eligible queued i/os */ + return (NULL); + } + + /* + * For LBA-ordered queues (async / scrub), issue the i/o which follows + * the most recently issued i/o in LBA (offset) order. + * + * For FIFO queues (sync), issue the i/o with the lowest timestamp. + */ + tree = vdev_queue_class_tree(vq, p); + vq->vq_io_search.io_timestamp = 0; + vq->vq_io_search.io_offset = vq->vq_last_offset + 1; + VERIFY3P(avl_find(tree, &vq->vq_io_search, + &idx), ==, NULL); + zio = avl_nearest(tree, idx, AVL_AFTER); + if (zio == NULL) + zio = avl_first(tree); + ASSERT3U(zio->io_priority, ==, p); + + aio = vdev_queue_aggregate(vq, zio); + if (aio != NULL) + zio = aio; + else + vdev_queue_io_remove(vq, zio); + + /* + * If the I/O is or was optional and therefore has no data, we need to + * simply discard it. We need to drop the vdev queue's lock to avoid a + * deadlock that we could encounter since this I/O will complete + * immediately. + */ + if (zio->io_flags & ZIO_FLAG_NODATA) { + mutex_exit(&vq->vq_lock); + zio_vdev_io_bypass(zio); + zio_execute(zio); + mutex_enter(&vq->vq_lock); + goto again; + } + + vdev_queue_pending_add(vq, zio); + vq->vq_last_offset = zio->io_offset; + + return (zio); +} + +zio_t * +vdev_queue_io(zio_t *zio) +{ + vdev_queue_t *vq = &zio->io_vd->vdev_queue; + zio_t *nio; + + if (zio->io_flags & ZIO_FLAG_DONT_QUEUE) + return (zio); + + /* + * Children i/os inherent their parent's priority, which might + * not match the child's i/o type. Fix it up here. + */ + if (zio->io_type == ZIO_TYPE_READ) { + if (zio->io_priority != ZIO_PRIORITY_SYNC_READ && + zio->io_priority != ZIO_PRIORITY_ASYNC_READ && + zio->io_priority != ZIO_PRIORITY_SCRUB) + zio->io_priority = ZIO_PRIORITY_ASYNC_READ; + } else { + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + if (zio->io_priority != ZIO_PRIORITY_SYNC_WRITE && + zio->io_priority != ZIO_PRIORITY_ASYNC_WRITE) + zio->io_priority = ZIO_PRIORITY_ASYNC_WRITE; + } + + zio->io_flags |= ZIO_FLAG_DONT_CACHE | ZIO_FLAG_DONT_QUEUE; + + mutex_enter(&vq->vq_lock); + zio->io_timestamp = gethrtime(); + vdev_queue_io_add(vq, zio); + nio = vdev_queue_io_to_issue(vq); + mutex_exit(&vq->vq_lock); + + if (nio == NULL) + return (NULL); + + if (nio->io_done == vdev_queue_agg_io_done) { + zio_nowait(nio); + return (NULL); + } + + return (nio); +} + +void +vdev_queue_io_done(zio_t *zio) +{ + vdev_queue_t *vq = &zio->io_vd->vdev_queue; + zio_t *nio; + + mutex_enter(&vq->vq_lock); + + vdev_queue_pending_remove(vq, zio); + + zio->io_delta = gethrtime() - zio->io_timestamp; + vq->vq_io_complete_ts = gethrtime(); + vq->vq_io_delta_ts = vq->vq_io_complete_ts - zio->io_timestamp; + + while ((nio = vdev_queue_io_to_issue(vq)) != NULL) { + mutex_exit(&vq->vq_lock); + if (nio->io_done == vdev_queue_agg_io_done) { + zio_nowait(nio); + } else { + zio_vdev_io_reissue(nio); + zio_execute(nio); + } + mutex_enter(&vq->vq_lock); + } + + mutex_exit(&vq->vq_lock); +} + +/* + * As these three methods are only used for load calculations we're not + * concerned if we get an incorrect value on 32bit platforms due to lack of + * vq_lock mutex use here, instead we prefer to keep it lock free for + * performance. + */ +int +vdev_queue_length(vdev_t *vd) +{ + return (avl_numnodes(&vd->vdev_queue.vq_active_tree)); +} + +uint64_t +vdev_queue_lastoffset(vdev_t *vd) +{ + return (vd->vdev_queue.vq_lastoffset); +} + +void +vdev_queue_register_lastoffset(vdev_t *vd, zio_t *zio) +{ + vd->vdev_queue.vq_lastoffset = zio->io_offset + zio->io_size; +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_vdev_aggregation_limit, int, 0644); +MODULE_PARM_DESC(zfs_vdev_aggregation_limit, "Max vdev I/O aggregation size"); + +module_param(zfs_vdev_read_gap_limit, int, 0644); +MODULE_PARM_DESC(zfs_vdev_read_gap_limit, "Aggregate read I/O over gap"); + +module_param(zfs_vdev_write_gap_limit, int, 0644); +MODULE_PARM_DESC(zfs_vdev_write_gap_limit, "Aggregate write I/O over gap"); + +module_param(zfs_vdev_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_max_active, "Maximum number of active I/Os per vdev"); + +module_param(zfs_vdev_async_write_active_max_dirty_percent, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_write_active_max_dirty_percent, + "Async write concurrency max threshold"); + +module_param(zfs_vdev_async_write_active_min_dirty_percent, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_write_active_min_dirty_percent, + "Async write concurrency min threshold"); + +module_param(zfs_vdev_async_read_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_read_max_active, + "Max active async read I/Os per vdev"); + +module_param(zfs_vdev_async_read_min_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_read_min_active, + "Min active async read I/Os per vdev"); + +module_param(zfs_vdev_async_write_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_write_max_active, + "Max active async write I/Os per vdev"); + +module_param(zfs_vdev_async_write_min_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_async_write_min_active, + "Min active async write I/Os per vdev"); + +module_param(zfs_vdev_scrub_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_scrub_max_active, "Max active scrub I/Os per vdev"); + +module_param(zfs_vdev_scrub_min_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_scrub_min_active, "Min active scrub I/Os per vdev"); + +module_param(zfs_vdev_sync_read_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_sync_read_max_active, + "Max active sync read I/Os per vdev"); + +module_param(zfs_vdev_sync_read_min_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_sync_read_min_active, + "Min active sync read I/Os per vdev"); + +module_param(zfs_vdev_sync_write_max_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_sync_write_max_active, + "Max active sync write I/Os per vdev"); + +module_param(zfs_vdev_sync_write_min_active, int, 0644); +MODULE_PARM_DESC(zfs_vdev_sync_write_min_active, + "Min active sync write I/Os per vdev"); + +module_param(zfs_vdev_queue_depth_pct, int, 0644); +MODULE_PARM_DESC(zfs_vdev_queue_depth_pct, + "Queue depth percentage for each top-level vdev"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz.c @@ -0,0 +1,2352 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + * Copyright (c) 2016 Gvozden Nešković. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Virtual device vector for RAID-Z. + * + * This vdev supports single, double, and triple parity. For single parity, + * we use a simple XOR of all the data columns. For double or triple parity, + * we use a special case of Reed-Solomon coding. This extends the + * technique described in "The mathematics of RAID-6" by H. Peter Anvin by + * drawing on the system described in "A Tutorial on Reed-Solomon Coding for + * Fault-Tolerance in RAID-like Systems" by James S. Plank on which the + * former is also based. The latter is designed to provide higher performance + * for writes. + * + * Note that the Plank paper claimed to support arbitrary N+M, but was then + * amended six years later identifying a critical flaw that invalidates its + * claims. Nevertheless, the technique can be adapted to work for up to + * triple parity. For additional parity, the amendment "Note: Correction to + * the 1997 Tutorial on Reed-Solomon Coding" by James S. Plank and Ying Ding + * is viable, but the additional complexity means that write performance will + * suffer. + * + * All of the methods above operate on a Galois field, defined over the + * integers mod 2^N. In our case we choose N=8 for GF(8) so that all elements + * can be expressed with a single byte. Briefly, the operations on the + * field are defined as follows: + * + * o addition (+) is represented by a bitwise XOR + * o subtraction (-) is therefore identical to addition: A + B = A - B + * o multiplication of A by 2 is defined by the following bitwise expression: + * + * (A * 2)_7 = A_6 + * (A * 2)_6 = A_5 + * (A * 2)_5 = A_4 + * (A * 2)_4 = A_3 + A_7 + * (A * 2)_3 = A_2 + A_7 + * (A * 2)_2 = A_1 + A_7 + * (A * 2)_1 = A_0 + * (A * 2)_0 = A_7 + * + * In C, multiplying by 2 is therefore ((a << 1) ^ ((a & 0x80) ? 0x1d : 0)). + * As an aside, this multiplication is derived from the error correcting + * primitive polynomial x^8 + x^4 + x^3 + x^2 + 1. + * + * Observe that any number in the field (except for 0) can be expressed as a + * power of 2 -- a generator for the field. We store a table of the powers of + * 2 and logs base 2 for quick look ups, and exploit the fact that A * B can + * be rewritten as 2^(log_2(A) + log_2(B)) (where '+' is normal addition rather + * than field addition). The inverse of a field element A (A^-1) is therefore + * A ^ (255 - 1) = A^254. + * + * The up-to-three parity columns, P, Q, R over several data columns, + * D_0, ... D_n-1, can be expressed by field operations: + * + * P = D_0 + D_1 + ... + D_n-2 + D_n-1 + * Q = 2^n-1 * D_0 + 2^n-2 * D_1 + ... + 2^1 * D_n-2 + 2^0 * D_n-1 + * = ((...((D_0) * 2 + D_1) * 2 + ...) * 2 + D_n-2) * 2 + D_n-1 + * R = 4^n-1 * D_0 + 4^n-2 * D_1 + ... + 4^1 * D_n-2 + 4^0 * D_n-1 + * = ((...((D_0) * 4 + D_1) * 4 + ...) * 4 + D_n-2) * 4 + D_n-1 + * + * We chose 1, 2, and 4 as our generators because 1 corresponds to the trival + * XOR operation, and 2 and 4 can be computed quickly and generate linearly- + * independent coefficients. (There are no additional coefficients that have + * this property which is why the uncorrected Plank method breaks down.) + * + * See the reconstruction code below for how P, Q and R can used individually + * or in concert to recover missing data columns. + */ + +#define VDEV_RAIDZ_P 0 +#define VDEV_RAIDZ_Q 1 +#define VDEV_RAIDZ_R 2 + +#define VDEV_RAIDZ_MUL_2(x) (((x) << 1) ^ (((x) & 0x80) ? 0x1d : 0)) +#define VDEV_RAIDZ_MUL_4(x) (VDEV_RAIDZ_MUL_2(VDEV_RAIDZ_MUL_2(x))) + +/* + * We provide a mechanism to perform the field multiplication operation on a + * 64-bit value all at once rather than a byte at a time. This works by + * creating a mask from the top bit in each byte and using that to + * conditionally apply the XOR of 0x1d. + */ +#define VDEV_RAIDZ_64MUL_2(x, mask) \ +{ \ + (mask) = (x) & 0x8080808080808080ULL; \ + (mask) = ((mask) << 1) - ((mask) >> 7); \ + (x) = (((x) << 1) & 0xfefefefefefefefeULL) ^ \ + ((mask) & 0x1d1d1d1d1d1d1d1dULL); \ +} + +#define VDEV_RAIDZ_64MUL_4(x, mask) \ +{ \ + VDEV_RAIDZ_64MUL_2((x), mask); \ + VDEV_RAIDZ_64MUL_2((x), mask); \ +} + +void +vdev_raidz_map_free(raidz_map_t *rm) +{ + int c; + + for (c = 0; c < rm->rm_firstdatacol; c++) { + abd_free(rm->rm_col[c].rc_abd); + + if (rm->rm_col[c].rc_gdata != NULL) + abd_free(rm->rm_col[c].rc_gdata); + } + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) + abd_put(rm->rm_col[c].rc_abd); + + if (rm->rm_abd_copy != NULL) + abd_free(rm->rm_abd_copy); + + kmem_free(rm, offsetof(raidz_map_t, rm_col[rm->rm_scols])); +} + +static void +vdev_raidz_map_free_vsd(zio_t *zio) +{ + raidz_map_t *rm = zio->io_vsd; + + ASSERT0(rm->rm_freed); + rm->rm_freed = 1; + + if (rm->rm_reports == 0) + vdev_raidz_map_free(rm); +} + +/*ARGSUSED*/ +static void +vdev_raidz_cksum_free(void *arg, size_t ignored) +{ + raidz_map_t *rm = arg; + + ASSERT3U(rm->rm_reports, >, 0); + + if (--rm->rm_reports == 0 && rm->rm_freed != 0) + vdev_raidz_map_free(rm); +} + +static void +vdev_raidz_cksum_finish(zio_cksum_report_t *zcr, const abd_t *good_data) +{ + raidz_map_t *rm = zcr->zcr_cbdata; + const size_t c = zcr->zcr_cbinfo; + size_t x, offset; + + const abd_t *good = NULL; + const abd_t *bad = rm->rm_col[c].rc_abd; + + if (good_data == NULL) { + zfs_ereport_finish_checksum(zcr, NULL, NULL, B_FALSE); + return; + } + + if (c < rm->rm_firstdatacol) { + /* + * The first time through, calculate the parity blocks for + * the good data (this relies on the fact that the good + * data never changes for a given logical ZIO) + */ + if (rm->rm_col[0].rc_gdata == NULL) { + abd_t *bad_parity[VDEV_RAIDZ_MAXPARITY]; + + /* + * Set up the rm_col[]s to generate the parity for + * good_data, first saving the parity bufs and + * replacing them with buffers to hold the result. + */ + for (x = 0; x < rm->rm_firstdatacol; x++) { + bad_parity[x] = rm->rm_col[x].rc_abd; + rm->rm_col[x].rc_abd = + rm->rm_col[x].rc_gdata = + abd_alloc_sametype(rm->rm_col[x].rc_abd, + rm->rm_col[x].rc_size); + } + + /* fill in the data columns from good_data */ + offset = 0; + for (; x < rm->rm_cols; x++) { + abd_put(rm->rm_col[x].rc_abd); + + rm->rm_col[x].rc_abd = + abd_get_offset_size((abd_t *)good_data, + offset, rm->rm_col[x].rc_size); + offset += rm->rm_col[x].rc_size; + } + + /* + * Construct the parity from the good data. + */ + vdev_raidz_generate_parity(rm); + + /* restore everything back to its original state */ + for (x = 0; x < rm->rm_firstdatacol; x++) + rm->rm_col[x].rc_abd = bad_parity[x]; + + offset = 0; + for (x = rm->rm_firstdatacol; x < rm->rm_cols; x++) { + abd_put(rm->rm_col[x].rc_abd); + rm->rm_col[x].rc_abd = abd_get_offset_size( + rm->rm_abd_copy, offset, + rm->rm_col[x].rc_size); + offset += rm->rm_col[x].rc_size; + } + } + + ASSERT3P(rm->rm_col[c].rc_gdata, !=, NULL); + good = abd_get_offset_size(rm->rm_col[c].rc_gdata, 0, + rm->rm_col[c].rc_size); + } else { + /* adjust good_data to point at the start of our column */ + offset = 0; + for (x = rm->rm_firstdatacol; x < c; x++) + offset += rm->rm_col[x].rc_size; + + good = abd_get_offset_size((abd_t *)good_data, offset, + rm->rm_col[c].rc_size); + } + + /* we drop the ereport if it ends up that the data was good */ + zfs_ereport_finish_checksum(zcr, good, bad, B_TRUE); + abd_put((abd_t *)good); +} + +/* + * Invoked indirectly by zfs_ereport_start_checksum(), called + * below when our read operation fails completely. The main point + * is to keep a copy of everything we read from disk, so that at + * vdev_raidz_cksum_finish() time we can compare it with the good data. + */ +static void +vdev_raidz_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *arg) +{ + size_t c = (size_t)(uintptr_t)arg; + size_t offset; + + raidz_map_t *rm = zio->io_vsd; + size_t size; + + /* set up the report and bump the refcount */ + zcr->zcr_cbdata = rm; + zcr->zcr_cbinfo = c; + zcr->zcr_finish = vdev_raidz_cksum_finish; + zcr->zcr_free = vdev_raidz_cksum_free; + + rm->rm_reports++; + ASSERT3U(rm->rm_reports, >, 0); + + if (rm->rm_abd_copy != NULL) + return; + + /* + * It's the first time we're called for this raidz_map_t, so we need + * to copy the data aside; there's no guarantee that our zio's buffer + * won't be re-used for something else. + * + * Our parity data is already in separate buffers, so there's no need + * to copy them. + */ + + size = 0; + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) + size += rm->rm_col[c].rc_size; + + rm->rm_abd_copy = abd_alloc_for_io(size, B_FALSE); + + for (offset = 0, c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + raidz_col_t *col = &rm->rm_col[c]; + abd_t *tmp = abd_get_offset_size(rm->rm_abd_copy, offset, + col->rc_size); + + abd_copy(tmp, col->rc_abd, col->rc_size); + + abd_put(col->rc_abd); + col->rc_abd = tmp; + + offset += col->rc_size; + } + ASSERT3U(offset, ==, size); +} + +static const zio_vsd_ops_t vdev_raidz_vsd_ops = { + .vsd_free = vdev_raidz_map_free_vsd, + .vsd_cksum_report = vdev_raidz_cksum_report +}; + +/* + * Divides the IO evenly across all child vdevs; usually, dcols is + * the number of children in the target vdev. + * + * Avoid inlining the function to keep vdev_raidz_io_start(), which + * is this functions only caller, as small as possible on the stack. + */ +noinline raidz_map_t * +vdev_raidz_map_alloc(zio_t *zio, uint64_t ashift, uint64_t dcols, + uint64_t nparity) +{ + raidz_map_t *rm; + /* The starting RAIDZ (parent) vdev sector of the block. */ + uint64_t b = zio->io_offset >> ashift; + /* The zio's size in units of the vdev's minimum sector size. */ + uint64_t s = zio->io_size >> ashift; + /* The first column for this stripe. */ + uint64_t f = b % dcols; + /* The starting byte offset on each child vdev. */ + uint64_t o = (b / dcols) << ashift; + uint64_t q, r, c, bc, col, acols, scols, coff, devidx, asize, tot; + uint64_t off = 0; + + /* + * "Quotient": The number of data sectors for this stripe on all but + * the "big column" child vdevs that also contain "remainder" data. + */ + q = s / (dcols - nparity); + + /* + * "Remainder": The number of partial stripe data sectors in this I/O. + * This will add a sector to some, but not all, child vdevs. + */ + r = s - q * (dcols - nparity); + + /* The number of "big columns" - those which contain remainder data. */ + bc = (r == 0 ? 0 : r + nparity); + + /* + * The total number of data and parity sectors associated with + * this I/O. + */ + tot = s + nparity * (q + (r == 0 ? 0 : 1)); + + /* acols: The columns that will be accessed. */ + /* scols: The columns that will be accessed or skipped. */ + if (q == 0) { + /* Our I/O request doesn't span all child vdevs. */ + acols = bc; + scols = MIN(dcols, roundup(bc, nparity + 1)); + } else { + acols = dcols; + scols = dcols; + } + + ASSERT3U(acols, <=, scols); + + rm = kmem_alloc(offsetof(raidz_map_t, rm_col[scols]), KM_SLEEP); + + rm->rm_cols = acols; + rm->rm_scols = scols; + rm->rm_bigcols = bc; + rm->rm_skipstart = bc; + rm->rm_missingdata = 0; + rm->rm_missingparity = 0; + rm->rm_firstdatacol = nparity; + rm->rm_abd_copy = NULL; + rm->rm_reports = 0; + rm->rm_freed = 0; + rm->rm_ecksuminjected = 0; + + asize = 0; + + for (c = 0; c < scols; c++) { + col = f + c; + coff = o; + if (col >= dcols) { + col -= dcols; + coff += 1ULL << ashift; + } + rm->rm_col[c].rc_devidx = col; + rm->rm_col[c].rc_offset = coff; + rm->rm_col[c].rc_abd = NULL; + rm->rm_col[c].rc_gdata = NULL; + rm->rm_col[c].rc_error = 0; + rm->rm_col[c].rc_tried = 0; + rm->rm_col[c].rc_skipped = 0; + + if (c >= acols) + rm->rm_col[c].rc_size = 0; + else if (c < bc) + rm->rm_col[c].rc_size = (q + 1) << ashift; + else + rm->rm_col[c].rc_size = q << ashift; + + asize += rm->rm_col[c].rc_size; + } + + ASSERT3U(asize, ==, tot << ashift); + rm->rm_asize = roundup(asize, (nparity + 1) << ashift); + rm->rm_nskip = roundup(tot, nparity + 1) - tot; + ASSERT3U(rm->rm_asize - asize, ==, rm->rm_nskip << ashift); + ASSERT3U(rm->rm_nskip, <=, nparity); + + for (c = 0; c < rm->rm_firstdatacol; c++) + rm->rm_col[c].rc_abd = + abd_alloc_linear(rm->rm_col[c].rc_size, B_FALSE); + + rm->rm_col[c].rc_abd = abd_get_offset_size(zio->io_abd, 0, + rm->rm_col[c].rc_size); + off = rm->rm_col[c].rc_size; + + for (c = c + 1; c < acols; c++) { + rm->rm_col[c].rc_abd = abd_get_offset_size(zio->io_abd, off, + rm->rm_col[c].rc_size); + off += rm->rm_col[c].rc_size; + } + + /* + * If all data stored spans all columns, there's a danger that parity + * will always be on the same device and, since parity isn't read + * during normal operation, that that device's I/O bandwidth won't be + * used effectively. We therefore switch the parity every 1MB. + * + * ... at least that was, ostensibly, the theory. As a practical + * matter unless we juggle the parity between all devices evenly, we + * won't see any benefit. Further, occasional writes that aren't a + * multiple of the LCM of the number of children and the minimum + * stripe width are sufficient to avoid pessimal behavior. + * Unfortunately, this decision created an implicit on-disk format + * requirement that we need to support for all eternity, but only + * for single-parity RAID-Z. + * + * If we intend to skip a sector in the zeroth column for padding + * we must make sure to note this swap. We will never intend to + * skip the first column since at least one data and one parity + * column must appear in each row. + */ + ASSERT(rm->rm_cols >= 2); + ASSERT(rm->rm_col[0].rc_size == rm->rm_col[1].rc_size); + + if (rm->rm_firstdatacol == 1 && (zio->io_offset & (1ULL << 20))) { + devidx = rm->rm_col[0].rc_devidx; + o = rm->rm_col[0].rc_offset; + rm->rm_col[0].rc_devidx = rm->rm_col[1].rc_devidx; + rm->rm_col[0].rc_offset = rm->rm_col[1].rc_offset; + rm->rm_col[1].rc_devidx = devidx; + rm->rm_col[1].rc_offset = o; + + if (rm->rm_skipstart == 0) + rm->rm_skipstart = 1; + } + + zio->io_vsd = rm; + zio->io_vsd_ops = &vdev_raidz_vsd_ops; + + /* init RAIDZ parity ops */ + rm->rm_ops = vdev_raidz_math_get_ops(); + + return (rm); +} + +struct pqr_struct { + uint64_t *p; + uint64_t *q; + uint64_t *r; +}; + +static int +vdev_raidz_p_func(void *buf, size_t size, void *private) +{ + struct pqr_struct *pqr = private; + const uint64_t *src = buf; + int i, cnt = size / sizeof (src[0]); + + ASSERT(pqr->p && !pqr->q && !pqr->r); + + for (i = 0; i < cnt; i++, src++, pqr->p++) + *pqr->p ^= *src; + + return (0); +} + +static int +vdev_raidz_pq_func(void *buf, size_t size, void *private) +{ + struct pqr_struct *pqr = private; + const uint64_t *src = buf; + uint64_t mask; + int i, cnt = size / sizeof (src[0]); + + ASSERT(pqr->p && pqr->q && !pqr->r); + + for (i = 0; i < cnt; i++, src++, pqr->p++, pqr->q++) { + *pqr->p ^= *src; + VDEV_RAIDZ_64MUL_2(*pqr->q, mask); + *pqr->q ^= *src; + } + + return (0); +} + +static int +vdev_raidz_pqr_func(void *buf, size_t size, void *private) +{ + struct pqr_struct *pqr = private; + const uint64_t *src = buf; + uint64_t mask; + int i, cnt = size / sizeof (src[0]); + + ASSERT(pqr->p && pqr->q && pqr->r); + + for (i = 0; i < cnt; i++, src++, pqr->p++, pqr->q++, pqr->r++) { + *pqr->p ^= *src; + VDEV_RAIDZ_64MUL_2(*pqr->q, mask); + *pqr->q ^= *src; + VDEV_RAIDZ_64MUL_4(*pqr->r, mask); + *pqr->r ^= *src; + } + + return (0); +} + +static void +vdev_raidz_generate_parity_p(raidz_map_t *rm) +{ + uint64_t *p; + int c; + abd_t *src; + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + src = rm->rm_col[c].rc_abd; + p = abd_to_buf(rm->rm_col[VDEV_RAIDZ_P].rc_abd); + + if (c == rm->rm_firstdatacol) { + abd_copy_to_buf(p, src, rm->rm_col[c].rc_size); + } else { + struct pqr_struct pqr = { p, NULL, NULL }; + (void) abd_iterate_func(src, 0, rm->rm_col[c].rc_size, + vdev_raidz_p_func, &pqr); + } + } +} + +static void +vdev_raidz_generate_parity_pq(raidz_map_t *rm) +{ + uint64_t *p, *q, pcnt, ccnt, mask, i; + int c; + abd_t *src; + + pcnt = rm->rm_col[VDEV_RAIDZ_P].rc_size / sizeof (p[0]); + ASSERT(rm->rm_col[VDEV_RAIDZ_P].rc_size == + rm->rm_col[VDEV_RAIDZ_Q].rc_size); + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + src = rm->rm_col[c].rc_abd; + p = abd_to_buf(rm->rm_col[VDEV_RAIDZ_P].rc_abd); + q = abd_to_buf(rm->rm_col[VDEV_RAIDZ_Q].rc_abd); + + ccnt = rm->rm_col[c].rc_size / sizeof (p[0]); + + if (c == rm->rm_firstdatacol) { + ASSERT(ccnt == pcnt || ccnt == 0); + abd_copy_to_buf(p, src, rm->rm_col[c].rc_size); + (void) memcpy(q, p, rm->rm_col[c].rc_size); + + for (i = ccnt; i < pcnt; i++) { + p[i] = 0; + q[i] = 0; + } + } else { + struct pqr_struct pqr = { p, q, NULL }; + + ASSERT(ccnt <= pcnt); + (void) abd_iterate_func(src, 0, rm->rm_col[c].rc_size, + vdev_raidz_pq_func, &pqr); + + /* + * Treat short columns as though they are full of 0s. + * Note that there's therefore nothing needed for P. + */ + for (i = ccnt; i < pcnt; i++) { + VDEV_RAIDZ_64MUL_2(q[i], mask); + } + } + } +} + +static void +vdev_raidz_generate_parity_pqr(raidz_map_t *rm) +{ + uint64_t *p, *q, *r, pcnt, ccnt, mask, i; + int c; + abd_t *src; + + pcnt = rm->rm_col[VDEV_RAIDZ_P].rc_size / sizeof (p[0]); + ASSERT(rm->rm_col[VDEV_RAIDZ_P].rc_size == + rm->rm_col[VDEV_RAIDZ_Q].rc_size); + ASSERT(rm->rm_col[VDEV_RAIDZ_P].rc_size == + rm->rm_col[VDEV_RAIDZ_R].rc_size); + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + src = rm->rm_col[c].rc_abd; + p = abd_to_buf(rm->rm_col[VDEV_RAIDZ_P].rc_abd); + q = abd_to_buf(rm->rm_col[VDEV_RAIDZ_Q].rc_abd); + r = abd_to_buf(rm->rm_col[VDEV_RAIDZ_R].rc_abd); + + ccnt = rm->rm_col[c].rc_size / sizeof (p[0]); + + if (c == rm->rm_firstdatacol) { + ASSERT(ccnt == pcnt || ccnt == 0); + abd_copy_to_buf(p, src, rm->rm_col[c].rc_size); + (void) memcpy(q, p, rm->rm_col[c].rc_size); + (void) memcpy(r, p, rm->rm_col[c].rc_size); + + for (i = ccnt; i < pcnt; i++) { + p[i] = 0; + q[i] = 0; + r[i] = 0; + } + } else { + struct pqr_struct pqr = { p, q, r }; + + ASSERT(ccnt <= pcnt); + (void) abd_iterate_func(src, 0, rm->rm_col[c].rc_size, + vdev_raidz_pqr_func, &pqr); + + /* + * Treat short columns as though they are full of 0s. + * Note that there's therefore nothing needed for P. + */ + for (i = ccnt; i < pcnt; i++) { + VDEV_RAIDZ_64MUL_2(q[i], mask); + VDEV_RAIDZ_64MUL_4(r[i], mask); + } + } + } +} + +/* + * Generate RAID parity in the first virtual columns according to the number of + * parity columns available. + */ +void +vdev_raidz_generate_parity(raidz_map_t *rm) +{ + /* Generate using the new math implementation */ + if (vdev_raidz_math_generate(rm) != RAIDZ_ORIGINAL_IMPL) + return; + + switch (rm->rm_firstdatacol) { + case 1: + vdev_raidz_generate_parity_p(rm); + break; + case 2: + vdev_raidz_generate_parity_pq(rm); + break; + case 3: + vdev_raidz_generate_parity_pqr(rm); + break; + default: + cmn_err(CE_PANIC, "invalid RAID-Z configuration"); + } +} + +/* ARGSUSED */ +static int +vdev_raidz_reconst_p_func(void *dbuf, void *sbuf, size_t size, void *private) +{ + uint64_t *dst = dbuf; + uint64_t *src = sbuf; + int cnt = size / sizeof (src[0]); + int i; + + for (i = 0; i < cnt; i++) { + dst[i] ^= src[i]; + } + + return (0); +} + +/* ARGSUSED */ +static int +vdev_raidz_reconst_q_pre_func(void *dbuf, void *sbuf, size_t size, + void *private) +{ + uint64_t *dst = dbuf; + uint64_t *src = sbuf; + uint64_t mask; + int cnt = size / sizeof (dst[0]); + int i; + + for (i = 0; i < cnt; i++, dst++, src++) { + VDEV_RAIDZ_64MUL_2(*dst, mask); + *dst ^= *src; + } + + return (0); +} + +/* ARGSUSED */ +static int +vdev_raidz_reconst_q_pre_tail_func(void *buf, size_t size, void *private) +{ + uint64_t *dst = buf; + uint64_t mask; + int cnt = size / sizeof (dst[0]); + int i; + + for (i = 0; i < cnt; i++, dst++) { + /* same operation as vdev_raidz_reconst_q_pre_func() on dst */ + VDEV_RAIDZ_64MUL_2(*dst, mask); + } + + return (0); +} + +struct reconst_q_struct { + uint64_t *q; + int exp; +}; + +static int +vdev_raidz_reconst_q_post_func(void *buf, size_t size, void *private) +{ + struct reconst_q_struct *rq = private; + uint64_t *dst = buf; + int cnt = size / sizeof (dst[0]); + int i; + + for (i = 0; i < cnt; i++, dst++, rq->q++) { + int j; + uint8_t *b; + + *dst ^= *rq->q; + for (j = 0, b = (uint8_t *)dst; j < 8; j++, b++) { + *b = vdev_raidz_exp2(*b, rq->exp); + } + } + + return (0); +} + +struct reconst_pq_struct { + uint8_t *p; + uint8_t *q; + uint8_t *pxy; + uint8_t *qxy; + int aexp; + int bexp; +}; + +static int +vdev_raidz_reconst_pq_func(void *xbuf, void *ybuf, size_t size, void *private) +{ + struct reconst_pq_struct *rpq = private; + uint8_t *xd = xbuf; + uint8_t *yd = ybuf; + int i; + + for (i = 0; i < size; + i++, rpq->p++, rpq->q++, rpq->pxy++, rpq->qxy++, xd++, yd++) { + *xd = vdev_raidz_exp2(*rpq->p ^ *rpq->pxy, rpq->aexp) ^ + vdev_raidz_exp2(*rpq->q ^ *rpq->qxy, rpq->bexp); + *yd = *rpq->p ^ *rpq->pxy ^ *xd; + } + + return (0); +} + +static int +vdev_raidz_reconst_pq_tail_func(void *xbuf, size_t size, void *private) +{ + struct reconst_pq_struct *rpq = private; + uint8_t *xd = xbuf; + int i; + + for (i = 0; i < size; + i++, rpq->p++, rpq->q++, rpq->pxy++, rpq->qxy++, xd++) { + /* same operation as vdev_raidz_reconst_pq_func() on xd */ + *xd = vdev_raidz_exp2(*rpq->p ^ *rpq->pxy, rpq->aexp) ^ + vdev_raidz_exp2(*rpq->q ^ *rpq->qxy, rpq->bexp); + } + + return (0); +} + +static int +vdev_raidz_reconstruct_p(raidz_map_t *rm, int *tgts, int ntgts) +{ + int x = tgts[0]; + int c; + abd_t *dst, *src; + + ASSERT(ntgts == 1); + ASSERT(x >= rm->rm_firstdatacol); + ASSERT(x < rm->rm_cols); + + ASSERT(rm->rm_col[x].rc_size <= rm->rm_col[VDEV_RAIDZ_P].rc_size); + ASSERT(rm->rm_col[x].rc_size > 0); + + src = rm->rm_col[VDEV_RAIDZ_P].rc_abd; + dst = rm->rm_col[x].rc_abd; + + abd_copy_from_buf(dst, abd_to_buf(src), rm->rm_col[x].rc_size); + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + uint64_t size = MIN(rm->rm_col[x].rc_size, + rm->rm_col[c].rc_size); + + src = rm->rm_col[c].rc_abd; + dst = rm->rm_col[x].rc_abd; + + if (c == x) + continue; + + (void) abd_iterate_func2(dst, src, 0, 0, size, + vdev_raidz_reconst_p_func, NULL); + } + + return (1 << VDEV_RAIDZ_P); +} + +static int +vdev_raidz_reconstruct_q(raidz_map_t *rm, int *tgts, int ntgts) +{ + int x = tgts[0]; + int c, exp; + abd_t *dst, *src; + struct reconst_q_struct rq; + + ASSERT(ntgts == 1); + + ASSERT(rm->rm_col[x].rc_size <= rm->rm_col[VDEV_RAIDZ_Q].rc_size); + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + uint64_t size = (c == x) ? 0 : MIN(rm->rm_col[x].rc_size, + rm->rm_col[c].rc_size); + + src = rm->rm_col[c].rc_abd; + dst = rm->rm_col[x].rc_abd; + + if (c == rm->rm_firstdatacol) { + abd_copy(dst, src, size); + if (rm->rm_col[x].rc_size > size) + abd_zero_off(dst, size, + rm->rm_col[x].rc_size - size); + + } else { + ASSERT3U(size, <=, rm->rm_col[x].rc_size); + (void) abd_iterate_func2(dst, src, 0, 0, size, + vdev_raidz_reconst_q_pre_func, NULL); + (void) abd_iterate_func(dst, + size, rm->rm_col[x].rc_size - size, + vdev_raidz_reconst_q_pre_tail_func, NULL); + } + } + + src = rm->rm_col[VDEV_RAIDZ_Q].rc_abd; + dst = rm->rm_col[x].rc_abd; + exp = 255 - (rm->rm_cols - 1 - x); + rq.q = abd_to_buf(src); + rq.exp = exp; + + (void) abd_iterate_func(dst, 0, rm->rm_col[x].rc_size, + vdev_raidz_reconst_q_post_func, &rq); + + return (1 << VDEV_RAIDZ_Q); +} + +static int +vdev_raidz_reconstruct_pq(raidz_map_t *rm, int *tgts, int ntgts) +{ + uint8_t *p, *q, *pxy, *qxy, tmp, a, b, aexp, bexp; + abd_t *pdata, *qdata; + uint64_t xsize, ysize; + int x = tgts[0]; + int y = tgts[1]; + abd_t *xd, *yd; + struct reconst_pq_struct rpq; + + ASSERT(ntgts == 2); + ASSERT(x < y); + ASSERT(x >= rm->rm_firstdatacol); + ASSERT(y < rm->rm_cols); + + ASSERT(rm->rm_col[x].rc_size >= rm->rm_col[y].rc_size); + + /* + * Move the parity data aside -- we're going to compute parity as + * though columns x and y were full of zeros -- Pxy and Qxy. We want to + * reuse the parity generation mechanism without trashing the actual + * parity so we make those columns appear to be full of zeros by + * setting their lengths to zero. + */ + pdata = rm->rm_col[VDEV_RAIDZ_P].rc_abd; + qdata = rm->rm_col[VDEV_RAIDZ_Q].rc_abd; + xsize = rm->rm_col[x].rc_size; + ysize = rm->rm_col[y].rc_size; + + rm->rm_col[VDEV_RAIDZ_P].rc_abd = + abd_alloc_linear(rm->rm_col[VDEV_RAIDZ_P].rc_size, B_TRUE); + rm->rm_col[VDEV_RAIDZ_Q].rc_abd = + abd_alloc_linear(rm->rm_col[VDEV_RAIDZ_Q].rc_size, B_TRUE); + rm->rm_col[x].rc_size = 0; + rm->rm_col[y].rc_size = 0; + + vdev_raidz_generate_parity_pq(rm); + + rm->rm_col[x].rc_size = xsize; + rm->rm_col[y].rc_size = ysize; + + p = abd_to_buf(pdata); + q = abd_to_buf(qdata); + pxy = abd_to_buf(rm->rm_col[VDEV_RAIDZ_P].rc_abd); + qxy = abd_to_buf(rm->rm_col[VDEV_RAIDZ_Q].rc_abd); + xd = rm->rm_col[x].rc_abd; + yd = rm->rm_col[y].rc_abd; + + /* + * We now have: + * Pxy = P + D_x + D_y + * Qxy = Q + 2^(ndevs - 1 - x) * D_x + 2^(ndevs - 1 - y) * D_y + * + * We can then solve for D_x: + * D_x = A * (P + Pxy) + B * (Q + Qxy) + * where + * A = 2^(x - y) * (2^(x - y) + 1)^-1 + * B = 2^(ndevs - 1 - x) * (2^(x - y) + 1)^-1 + * + * With D_x in hand, we can easily solve for D_y: + * D_y = P + Pxy + D_x + */ + + a = vdev_raidz_pow2[255 + x - y]; + b = vdev_raidz_pow2[255 - (rm->rm_cols - 1 - x)]; + tmp = 255 - vdev_raidz_log2[a ^ 1]; + + aexp = vdev_raidz_log2[vdev_raidz_exp2(a, tmp)]; + bexp = vdev_raidz_log2[vdev_raidz_exp2(b, tmp)]; + + ASSERT3U(xsize, >=, ysize); + rpq.p = p; + rpq.q = q; + rpq.pxy = pxy; + rpq.qxy = qxy; + rpq.aexp = aexp; + rpq.bexp = bexp; + + (void) abd_iterate_func2(xd, yd, 0, 0, ysize, + vdev_raidz_reconst_pq_func, &rpq); + (void) abd_iterate_func(xd, ysize, xsize - ysize, + vdev_raidz_reconst_pq_tail_func, &rpq); + + abd_free(rm->rm_col[VDEV_RAIDZ_P].rc_abd); + abd_free(rm->rm_col[VDEV_RAIDZ_Q].rc_abd); + + /* + * Restore the saved parity data. + */ + rm->rm_col[VDEV_RAIDZ_P].rc_abd = pdata; + rm->rm_col[VDEV_RAIDZ_Q].rc_abd = qdata; + + return ((1 << VDEV_RAIDZ_P) | (1 << VDEV_RAIDZ_Q)); +} + +/* BEGIN CSTYLED */ +/* + * In the general case of reconstruction, we must solve the system of linear + * equations defined by the coeffecients used to generate parity as well as + * the contents of the data and parity disks. This can be expressed with + * vectors for the original data (D) and the actual data (d) and parity (p) + * and a matrix composed of the identity matrix (I) and a dispersal matrix (V): + * + * __ __ __ __ + * | | __ __ | p_0 | + * | V | | D_0 | | p_m-1 | + * | | x | : | = | d_0 | + * | I | | D_n-1 | | : | + * | | ~~ ~~ | d_n-1 | + * ~~ ~~ ~~ ~~ + * + * I is simply a square identity matrix of size n, and V is a vandermonde + * matrix defined by the coeffecients we chose for the various parity columns + * (1, 2, 4). Note that these values were chosen both for simplicity, speedy + * computation as well as linear separability. + * + * __ __ __ __ + * | 1 .. 1 1 1 | | p_0 | + * | 2^n-1 .. 4 2 1 | __ __ | : | + * | 4^n-1 .. 16 4 1 | | D_0 | | p_m-1 | + * | 1 .. 0 0 0 | | D_1 | | d_0 | + * | 0 .. 0 0 0 | x | D_2 | = | d_1 | + * | : : : : | | : | | d_2 | + * | 0 .. 1 0 0 | | D_n-1 | | : | + * | 0 .. 0 1 0 | ~~ ~~ | : | + * | 0 .. 0 0 1 | | d_n-1 | + * ~~ ~~ ~~ ~~ + * + * Note that I, V, d, and p are known. To compute D, we must invert the + * matrix and use the known data and parity values to reconstruct the unknown + * data values. We begin by removing the rows in V|I and d|p that correspond + * to failed or missing columns; we then make V|I square (n x n) and d|p + * sized n by removing rows corresponding to unused parity from the bottom up + * to generate (V|I)' and (d|p)'. We can then generate the inverse of (V|I)' + * using Gauss-Jordan elimination. In the example below we use m=3 parity + * columns, n=8 data columns, with errors in d_1, d_2, and p_1: + * __ __ + * | 1 1 1 1 1 1 1 1 | + * | 128 64 32 16 8 4 2 1 | <-----+-+-- missing disks + * | 19 205 116 29 64 16 4 1 | / / + * | 1 0 0 0 0 0 0 0 | / / + * | 0 1 0 0 0 0 0 0 | <--' / + * (V|I) = | 0 0 1 0 0 0 0 0 | <---' + * | 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 1 1 1 1 1 1 1 | + * | 128 64 32 16 8 4 2 1 | + * | 19 205 116 29 64 16 4 1 | + * | 1 0 0 0 0 0 0 0 | + * | 0 1 0 0 0 0 0 0 | + * (V|I)' = | 0 0 1 0 0 0 0 0 | + * | 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * + * Here we employ Gauss-Jordan elimination to find the inverse of (V|I)'. We + * have carefully chosen the seed values 1, 2, and 4 to ensure that this + * matrix is not singular. + * __ __ + * | 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 | + * | 19 205 116 29 64 16 4 1 0 1 0 0 0 0 0 0 | + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 | + * | 19 205 116 29 64 16 4 1 0 1 0 0 0 0 0 0 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 0 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 | + * | 0 205 116 0 0 0 0 0 0 1 19 29 64 16 4 1 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 0 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 | + * | 0 0 185 0 0 0 0 0 205 1 222 208 141 221 201 204 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 0 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 | + * | 0 0 1 0 0 0 0 0 166 100 4 40 158 168 216 209 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 | + * | 0 1 0 0 0 0 0 0 167 100 5 41 159 169 217 208 | + * | 0 0 1 0 0 0 0 0 166 100 4 40 158 168 216 209 | + * | 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * __ __ + * | 0 0 1 0 0 0 0 0 | + * | 167 100 5 41 159 169 217 208 | + * | 166 100 4 40 158 168 216 209 | + * (V|I)'^-1 = | 0 0 0 1 0 0 0 0 | + * | 0 0 0 0 1 0 0 0 | + * | 0 0 0 0 0 1 0 0 | + * | 0 0 0 0 0 0 1 0 | + * | 0 0 0 0 0 0 0 1 | + * ~~ ~~ + * + * We can then simply compute D = (V|I)'^-1 x (d|p)' to discover the values + * of the missing data. + * + * As is apparent from the example above, the only non-trivial rows in the + * inverse matrix correspond to the data disks that we're trying to + * reconstruct. Indeed, those are the only rows we need as the others would + * only be useful for reconstructing data known or assumed to be valid. For + * that reason, we only build the coefficients in the rows that correspond to + * targeted columns. + */ +/* END CSTYLED */ + +static void +vdev_raidz_matrix_init(raidz_map_t *rm, int n, int nmap, int *map, + uint8_t **rows) +{ + int i, j; + int pow; + + ASSERT(n == rm->rm_cols - rm->rm_firstdatacol); + + /* + * Fill in the missing rows of interest. + */ + for (i = 0; i < nmap; i++) { + ASSERT3S(0, <=, map[i]); + ASSERT3S(map[i], <=, 2); + + pow = map[i] * n; + if (pow > 255) + pow -= 255; + ASSERT(pow <= 255); + + for (j = 0; j < n; j++) { + pow -= map[i]; + if (pow < 0) + pow += 255; + rows[i][j] = vdev_raidz_pow2[pow]; + } + } +} + +static void +vdev_raidz_matrix_invert(raidz_map_t *rm, int n, int nmissing, int *missing, + uint8_t **rows, uint8_t **invrows, const uint8_t *used) +{ + int i, j, ii, jj; + uint8_t log; + + /* + * Assert that the first nmissing entries from the array of used + * columns correspond to parity columns and that subsequent entries + * correspond to data columns. + */ + for (i = 0; i < nmissing; i++) { + ASSERT3S(used[i], <, rm->rm_firstdatacol); + } + for (; i < n; i++) { + ASSERT3S(used[i], >=, rm->rm_firstdatacol); + } + + /* + * First initialize the storage where we'll compute the inverse rows. + */ + for (i = 0; i < nmissing; i++) { + for (j = 0; j < n; j++) { + invrows[i][j] = (i == j) ? 1 : 0; + } + } + + /* + * Subtract all trivial rows from the rows of consequence. + */ + for (i = 0; i < nmissing; i++) { + for (j = nmissing; j < n; j++) { + ASSERT3U(used[j], >=, rm->rm_firstdatacol); + jj = used[j] - rm->rm_firstdatacol; + ASSERT3S(jj, <, n); + invrows[i][j] = rows[i][jj]; + rows[i][jj] = 0; + } + } + + /* + * For each of the rows of interest, we must normalize it and subtract + * a multiple of it from the other rows. + */ + for (i = 0; i < nmissing; i++) { + for (j = 0; j < missing[i]; j++) { + ASSERT0(rows[i][j]); + } + ASSERT3U(rows[i][missing[i]], !=, 0); + + /* + * Compute the inverse of the first element and multiply each + * element in the row by that value. + */ + log = 255 - vdev_raidz_log2[rows[i][missing[i]]]; + + for (j = 0; j < n; j++) { + rows[i][j] = vdev_raidz_exp2(rows[i][j], log); + invrows[i][j] = vdev_raidz_exp2(invrows[i][j], log); + } + + for (ii = 0; ii < nmissing; ii++) { + if (i == ii) + continue; + + ASSERT3U(rows[ii][missing[i]], !=, 0); + + log = vdev_raidz_log2[rows[ii][missing[i]]]; + + for (j = 0; j < n; j++) { + rows[ii][j] ^= + vdev_raidz_exp2(rows[i][j], log); + invrows[ii][j] ^= + vdev_raidz_exp2(invrows[i][j], log); + } + } + } + + /* + * Verify that the data that is left in the rows are properly part of + * an identity matrix. + */ + for (i = 0; i < nmissing; i++) { + for (j = 0; j < n; j++) { + if (j == missing[i]) { + ASSERT3U(rows[i][j], ==, 1); + } else { + ASSERT0(rows[i][j]); + } + } + } +} + +static void +vdev_raidz_matrix_reconstruct(raidz_map_t *rm, int n, int nmissing, + int *missing, uint8_t **invrows, const uint8_t *used) +{ + int i, j, x, cc, c; + uint8_t *src; + uint64_t ccount; + uint8_t *dst[VDEV_RAIDZ_MAXPARITY] = { NULL }; + uint64_t dcount[VDEV_RAIDZ_MAXPARITY] = { 0 }; + uint8_t log = 0; + uint8_t val; + int ll; + uint8_t *invlog[VDEV_RAIDZ_MAXPARITY]; + uint8_t *p, *pp; + size_t psize; + + psize = sizeof (invlog[0][0]) * n * nmissing; + p = kmem_alloc(psize, KM_SLEEP); + + for (pp = p, i = 0; i < nmissing; i++) { + invlog[i] = pp; + pp += n; + } + + for (i = 0; i < nmissing; i++) { + for (j = 0; j < n; j++) { + ASSERT3U(invrows[i][j], !=, 0); + invlog[i][j] = vdev_raidz_log2[invrows[i][j]]; + } + } + + for (i = 0; i < n; i++) { + c = used[i]; + ASSERT3U(c, <, rm->rm_cols); + + src = abd_to_buf(rm->rm_col[c].rc_abd); + ccount = rm->rm_col[c].rc_size; + for (j = 0; j < nmissing; j++) { + cc = missing[j] + rm->rm_firstdatacol; + ASSERT3U(cc, >=, rm->rm_firstdatacol); + ASSERT3U(cc, <, rm->rm_cols); + ASSERT3U(cc, !=, c); + + dst[j] = abd_to_buf(rm->rm_col[cc].rc_abd); + dcount[j] = rm->rm_col[cc].rc_size; + } + + ASSERT(ccount >= rm->rm_col[missing[0]].rc_size || i > 0); + + for (x = 0; x < ccount; x++, src++) { + if (*src != 0) + log = vdev_raidz_log2[*src]; + + for (cc = 0; cc < nmissing; cc++) { + if (x >= dcount[cc]) + continue; + + if (*src == 0) { + val = 0; + } else { + if ((ll = log + invlog[cc][i]) >= 255) + ll -= 255; + val = vdev_raidz_pow2[ll]; + } + + if (i == 0) + dst[cc][x] = val; + else + dst[cc][x] ^= val; + } + } + } + + kmem_free(p, psize); +} + +static int +vdev_raidz_reconstruct_general(raidz_map_t *rm, int *tgts, int ntgts) +{ + int n, i, c, t, tt; + int nmissing_rows; + int missing_rows[VDEV_RAIDZ_MAXPARITY]; + int parity_map[VDEV_RAIDZ_MAXPARITY]; + + uint8_t *p, *pp; + size_t psize; + + uint8_t *rows[VDEV_RAIDZ_MAXPARITY]; + uint8_t *invrows[VDEV_RAIDZ_MAXPARITY]; + uint8_t *used; + + abd_t **bufs = NULL; + + int code = 0; + + /* + * Matrix reconstruction can't use scatter ABDs yet, so we allocate + * temporary linear ABDs. + */ + if (!abd_is_linear(rm->rm_col[rm->rm_firstdatacol].rc_abd)) { + bufs = kmem_alloc(rm->rm_cols * sizeof (abd_t *), KM_PUSHPAGE); + + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + raidz_col_t *col = &rm->rm_col[c]; + + bufs[c] = col->rc_abd; + col->rc_abd = abd_alloc_linear(col->rc_size, B_TRUE); + abd_copy(col->rc_abd, bufs[c], col->rc_size); + } + } + + n = rm->rm_cols - rm->rm_firstdatacol; + + /* + * Figure out which data columns are missing. + */ + nmissing_rows = 0; + for (t = 0; t < ntgts; t++) { + if (tgts[t] >= rm->rm_firstdatacol) { + missing_rows[nmissing_rows++] = + tgts[t] - rm->rm_firstdatacol; + } + } + + /* + * Figure out which parity columns to use to help generate the missing + * data columns. + */ + for (tt = 0, c = 0, i = 0; i < nmissing_rows; c++) { + ASSERT(tt < ntgts); + ASSERT(c < rm->rm_firstdatacol); + + /* + * Skip any targeted parity columns. + */ + if (c == tgts[tt]) { + tt++; + continue; + } + + code |= 1 << c; + + parity_map[i] = c; + i++; + } + + ASSERT(code != 0); + ASSERT3U(code, <, 1 << VDEV_RAIDZ_MAXPARITY); + + psize = (sizeof (rows[0][0]) + sizeof (invrows[0][0])) * + nmissing_rows * n + sizeof (used[0]) * n; + p = kmem_alloc(psize, KM_SLEEP); + + for (pp = p, i = 0; i < nmissing_rows; i++) { + rows[i] = pp; + pp += n; + invrows[i] = pp; + pp += n; + } + used = pp; + + for (i = 0; i < nmissing_rows; i++) { + used[i] = parity_map[i]; + } + + for (tt = 0, c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + if (tt < nmissing_rows && + c == missing_rows[tt] + rm->rm_firstdatacol) { + tt++; + continue; + } + + ASSERT3S(i, <, n); + used[i] = c; + i++; + } + + /* + * Initialize the interesting rows of the matrix. + */ + vdev_raidz_matrix_init(rm, n, nmissing_rows, parity_map, rows); + + /* + * Invert the matrix. + */ + vdev_raidz_matrix_invert(rm, n, nmissing_rows, missing_rows, rows, + invrows, used); + + /* + * Reconstruct the missing data using the generated matrix. + */ + vdev_raidz_matrix_reconstruct(rm, n, nmissing_rows, missing_rows, + invrows, used); + + kmem_free(p, psize); + + /* + * copy back from temporary linear abds and free them + */ + if (bufs) { + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + raidz_col_t *col = &rm->rm_col[c]; + + abd_copy(bufs[c], col->rc_abd, col->rc_size); + abd_free(col->rc_abd); + col->rc_abd = bufs[c]; + } + kmem_free(bufs, rm->rm_cols * sizeof (abd_t *)); + } + + return (code); +} + +int +vdev_raidz_reconstruct(raidz_map_t *rm, const int *t, int nt) +{ + int tgts[VDEV_RAIDZ_MAXPARITY], *dt; + int ntgts; + int i, c, ret; + int code; + int nbadparity, nbaddata; + int parity_valid[VDEV_RAIDZ_MAXPARITY]; + + /* + * The tgts list must already be sorted. + */ + for (i = 1; i < nt; i++) { + ASSERT(t[i] > t[i - 1]); + } + + nbadparity = rm->rm_firstdatacol; + nbaddata = rm->rm_cols - nbadparity; + ntgts = 0; + for (i = 0, c = 0; c < rm->rm_cols; c++) { + if (c < rm->rm_firstdatacol) + parity_valid[c] = B_FALSE; + + if (i < nt && c == t[i]) { + tgts[ntgts++] = c; + i++; + } else if (rm->rm_col[c].rc_error != 0) { + tgts[ntgts++] = c; + } else if (c >= rm->rm_firstdatacol) { + nbaddata--; + } else { + parity_valid[c] = B_TRUE; + nbadparity--; + } + } + + ASSERT(ntgts >= nt); + ASSERT(nbaddata >= 0); + ASSERT(nbaddata + nbadparity == ntgts); + + dt = &tgts[nbadparity]; + + /* Reconstruct using the new math implementation */ + ret = vdev_raidz_math_reconstruct(rm, parity_valid, dt, nbaddata); + if (ret != RAIDZ_ORIGINAL_IMPL) + return (ret); + + /* + * See if we can use any of our optimized reconstruction routines. + */ + switch (nbaddata) { + case 1: + if (parity_valid[VDEV_RAIDZ_P]) + return (vdev_raidz_reconstruct_p(rm, dt, 1)); + + ASSERT(rm->rm_firstdatacol > 1); + + if (parity_valid[VDEV_RAIDZ_Q]) + return (vdev_raidz_reconstruct_q(rm, dt, 1)); + + ASSERT(rm->rm_firstdatacol > 2); + break; + + case 2: + ASSERT(rm->rm_firstdatacol > 1); + + if (parity_valid[VDEV_RAIDZ_P] && + parity_valid[VDEV_RAIDZ_Q]) + return (vdev_raidz_reconstruct_pq(rm, dt, 2)); + + ASSERT(rm->rm_firstdatacol > 2); + + break; + } + + code = vdev_raidz_reconstruct_general(rm, tgts, ntgts); + ASSERT(code < (1 << VDEV_RAIDZ_MAXPARITY)); + ASSERT(code > 0); + return (code); +} + +static int +vdev_raidz_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize, + uint64_t *ashift) +{ + vdev_t *cvd; + uint64_t nparity = vd->vdev_nparity; + int c; + int lasterror = 0; + int numerrors = 0; + + ASSERT(nparity > 0); + + if (nparity > VDEV_RAIDZ_MAXPARITY || + vd->vdev_children < nparity + 1) { + vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; + return (SET_ERROR(EINVAL)); + } + + vdev_open_children(vd); + + for (c = 0; c < vd->vdev_children; c++) { + cvd = vd->vdev_child[c]; + + if (cvd->vdev_open_error != 0) { + lasterror = cvd->vdev_open_error; + numerrors++; + continue; + } + + *asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1; + *max_asize = MIN(*max_asize - 1, cvd->vdev_max_asize - 1) + 1; + *ashift = MAX(*ashift, cvd->vdev_ashift); + } + + *asize *= vd->vdev_children; + *max_asize *= vd->vdev_children; + + if (numerrors > nparity) { + vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS; + return (lasterror); + } + + return (0); +} + +static void +vdev_raidz_close(vdev_t *vd) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_close(vd->vdev_child[c]); +} + +static uint64_t +vdev_raidz_asize(vdev_t *vd, uint64_t psize) +{ + uint64_t asize; + uint64_t ashift = vd->vdev_top->vdev_ashift; + uint64_t cols = vd->vdev_children; + uint64_t nparity = vd->vdev_nparity; + + asize = ((psize - 1) >> ashift) + 1; + asize += nparity * ((asize + cols - nparity - 1) / (cols - nparity)); + asize = roundup(asize, nparity + 1) << ashift; + + return (asize); +} + +static void +vdev_raidz_child_done(zio_t *zio) +{ + raidz_col_t *rc = zio->io_private; + + rc->rc_error = zio->io_error; + rc->rc_tried = 1; + rc->rc_skipped = 0; +} + +/* + * Start an IO operation on a RAIDZ VDev + * + * Outline: + * - For write operations: + * 1. Generate the parity data + * 2. Create child zio write operations to each column's vdev, for both + * data and parity. + * 3. If the column skips any sectors for padding, create optional dummy + * write zio children for those areas to improve aggregation continuity. + * - For read operations: + * 1. Create child zio read operations to each data column's vdev to read + * the range of data required for zio. + * 2. If this is a scrub or resilver operation, or if any of the data + * vdevs have had errors, then create zio read operations to the parity + * columns' VDevs as well. + */ +static void +vdev_raidz_io_start(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + vdev_t *tvd = vd->vdev_top; + vdev_t *cvd; + raidz_map_t *rm; + raidz_col_t *rc; + int c, i; + + rm = vdev_raidz_map_alloc(zio, tvd->vdev_ashift, vd->vdev_children, + vd->vdev_nparity); + + ASSERT3U(rm->rm_asize, ==, vdev_psize_to_asize(vd, zio->io_size)); + + if (zio->io_type == ZIO_TYPE_WRITE) { + vdev_raidz_generate_parity(rm); + + for (c = 0; c < rm->rm_cols; c++) { + rc = &rm->rm_col[c]; + cvd = vd->vdev_child[rc->rc_devidx]; + zio_nowait(zio_vdev_child_io(zio, NULL, cvd, + rc->rc_offset, rc->rc_abd, rc->rc_size, + zio->io_type, zio->io_priority, 0, + vdev_raidz_child_done, rc)); + } + + /* + * Generate optional I/Os for any skipped sectors to improve + * aggregation contiguity. + */ + for (c = rm->rm_skipstart, i = 0; i < rm->rm_nskip; c++, i++) { + ASSERT(c <= rm->rm_scols); + if (c == rm->rm_scols) + c = 0; + rc = &rm->rm_col[c]; + cvd = vd->vdev_child[rc->rc_devidx]; + zio_nowait(zio_vdev_child_io(zio, NULL, cvd, + rc->rc_offset + rc->rc_size, NULL, + 1 << tvd->vdev_ashift, + zio->io_type, zio->io_priority, + ZIO_FLAG_NODATA | ZIO_FLAG_OPTIONAL, NULL, NULL)); + } + + zio_execute(zio); + return; + } + + ASSERT(zio->io_type == ZIO_TYPE_READ); + + /* + * Iterate over the columns in reverse order so that we hit the parity + * last -- any errors along the way will force us to read the parity. + */ + for (c = rm->rm_cols - 1; c >= 0; c--) { + rc = &rm->rm_col[c]; + cvd = vd->vdev_child[rc->rc_devidx]; + if (!vdev_readable(cvd)) { + if (c >= rm->rm_firstdatacol) + rm->rm_missingdata++; + else + rm->rm_missingparity++; + rc->rc_error = SET_ERROR(ENXIO); + rc->rc_tried = 1; /* don't even try */ + rc->rc_skipped = 1; + continue; + } + if (vdev_dtl_contains(cvd, DTL_MISSING, zio->io_txg, 1)) { + if (c >= rm->rm_firstdatacol) + rm->rm_missingdata++; + else + rm->rm_missingparity++; + rc->rc_error = SET_ERROR(ESTALE); + rc->rc_skipped = 1; + continue; + } + if (c >= rm->rm_firstdatacol || rm->rm_missingdata > 0 || + (zio->io_flags & (ZIO_FLAG_SCRUB | ZIO_FLAG_RESILVER))) { + zio_nowait(zio_vdev_child_io(zio, NULL, cvd, + rc->rc_offset, rc->rc_abd, rc->rc_size, + zio->io_type, zio->io_priority, 0, + vdev_raidz_child_done, rc)); + } + } + + zio_execute(zio); +} + + +/* + * Report a checksum error for a child of a RAID-Z device. + */ +static void +raidz_checksum_error(zio_t *zio, raidz_col_t *rc, abd_t *bad_data) +{ + vdev_t *vd = zio->io_vd->vdev_child[rc->rc_devidx]; + + if (!(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { + zio_bad_cksum_t zbc; + raidz_map_t *rm = zio->io_vsd; + + mutex_enter(&vd->vdev_stat_lock); + vd->vdev_stat.vs_checksum_errors++; + mutex_exit(&vd->vdev_stat_lock); + + zbc.zbc_has_cksum = 0; + zbc.zbc_injected = rm->rm_ecksuminjected; + + zfs_ereport_post_checksum(zio->io_spa, vd, zio, + rc->rc_offset, rc->rc_size, rc->rc_abd, bad_data, + &zbc); + } +} + +/* + * We keep track of whether or not there were any injected errors, so that + * any ereports we generate can note it. + */ +static int +raidz_checksum_verify(zio_t *zio) +{ + zio_bad_cksum_t zbc; + raidz_map_t *rm = zio->io_vsd; + int ret; + + bzero(&zbc, sizeof (zio_bad_cksum_t)); + + ret = zio_checksum_error(zio, &zbc); + if (ret != 0 && zbc.zbc_injected != 0) + rm->rm_ecksuminjected = 1; + + return (ret); +} + +/* + * Generate the parity from the data columns. If we tried and were able to + * read the parity without error, verify that the generated parity matches the + * data we read. If it doesn't, we fire off a checksum error. Return the + * number such failures. + */ +static int +raidz_parity_verify(zio_t *zio, raidz_map_t *rm) +{ + abd_t *orig[VDEV_RAIDZ_MAXPARITY]; + int c, ret = 0; + raidz_col_t *rc; + + blkptr_t *bp = zio->io_bp; + enum zio_checksum checksum = (bp == NULL ? zio->io_prop.zp_checksum : + (BP_IS_GANG(bp) ? ZIO_CHECKSUM_GANG_HEADER : BP_GET_CHECKSUM(bp))); + + if (checksum == ZIO_CHECKSUM_NOPARITY) + return (ret); + + for (c = 0; c < rm->rm_firstdatacol; c++) { + rc = &rm->rm_col[c]; + if (!rc->rc_tried || rc->rc_error != 0) + continue; + + orig[c] = abd_alloc_sametype(rc->rc_abd, rc->rc_size); + abd_copy(orig[c], rc->rc_abd, rc->rc_size); + } + + vdev_raidz_generate_parity(rm); + + for (c = 0; c < rm->rm_firstdatacol; c++) { + rc = &rm->rm_col[c]; + if (!rc->rc_tried || rc->rc_error != 0) + continue; + if (abd_cmp(orig[c], rc->rc_abd) != 0) { + raidz_checksum_error(zio, rc, orig[c]); + rc->rc_error = SET_ERROR(ECKSUM); + ret++; + } + abd_free(orig[c]); + } + + return (ret); +} + +static int +vdev_raidz_worst_error(raidz_map_t *rm) +{ + int c, error = 0; + + for (c = 0; c < rm->rm_cols; c++) + error = zio_worst_error(error, rm->rm_col[c].rc_error); + + return (error); +} + +/* + * Iterate over all combinations of bad data and attempt a reconstruction. + * Note that the algorithm below is non-optimal because it doesn't take into + * account how reconstruction is actually performed. For example, with + * triple-parity RAID-Z the reconstruction procedure is the same if column 4 + * is targeted as invalid as if columns 1 and 4 are targeted since in both + * cases we'd only use parity information in column 0. + */ +static int +vdev_raidz_combrec(zio_t *zio, int total_errors, int data_errors) +{ + raidz_map_t *rm = zio->io_vsd; + raidz_col_t *rc; + abd_t *orig[VDEV_RAIDZ_MAXPARITY]; + int tstore[VDEV_RAIDZ_MAXPARITY + 2]; + int *tgts = &tstore[1]; + int curr, next, i, c, n; + int code, ret = 0; + + ASSERT(total_errors < rm->rm_firstdatacol); + + /* + * This simplifies one edge condition. + */ + tgts[-1] = -1; + + for (n = 1; n <= rm->rm_firstdatacol - total_errors; n++) { + /* + * Initialize the targets array by finding the first n columns + * that contain no error. + * + * If there were no data errors, we need to ensure that we're + * always explicitly attempting to reconstruct at least one + * data column. To do this, we simply push the highest target + * up into the data columns. + */ + for (c = 0, i = 0; i < n; i++) { + if (i == n - 1 && data_errors == 0 && + c < rm->rm_firstdatacol) { + c = rm->rm_firstdatacol; + } + + while (rm->rm_col[c].rc_error != 0) { + c++; + ASSERT3S(c, <, rm->rm_cols); + } + + tgts[i] = c++; + } + + /* + * Setting tgts[n] simplifies the other edge condition. + */ + tgts[n] = rm->rm_cols; + + /* + * These buffers were allocated in previous iterations. + */ + for (i = 0; i < n - 1; i++) { + ASSERT(orig[i] != NULL); + } + + orig[n - 1] = abd_alloc_sametype(rm->rm_col[0].rc_abd, + rm->rm_col[0].rc_size); + + curr = 0; + next = tgts[curr]; + + while (curr != n) { + tgts[curr] = next; + curr = 0; + + /* + * Save off the original data that we're going to + * attempt to reconstruct. + */ + for (i = 0; i < n; i++) { + ASSERT(orig[i] != NULL); + c = tgts[i]; + ASSERT3S(c, >=, 0); + ASSERT3S(c, <, rm->rm_cols); + rc = &rm->rm_col[c]; + abd_copy(orig[i], rc->rc_abd, rc->rc_size); + } + + /* + * Attempt a reconstruction and exit the outer loop on + * success. + */ + code = vdev_raidz_reconstruct(rm, tgts, n); + if (raidz_checksum_verify(zio) == 0) { + + for (i = 0; i < n; i++) { + c = tgts[i]; + rc = &rm->rm_col[c]; + ASSERT(rc->rc_error == 0); + if (rc->rc_tried) + raidz_checksum_error(zio, rc, + orig[i]); + rc->rc_error = SET_ERROR(ECKSUM); + } + + ret = code; + goto done; + } + + /* + * Restore the original data. + */ + for (i = 0; i < n; i++) { + c = tgts[i]; + rc = &rm->rm_col[c]; + abd_copy(rc->rc_abd, orig[i], rc->rc_size); + } + + do { + /* + * Find the next valid column after the curr + * position.. + */ + for (next = tgts[curr] + 1; + next < rm->rm_cols && + rm->rm_col[next].rc_error != 0; next++) + continue; + + ASSERT(next <= tgts[curr + 1]); + + /* + * If that spot is available, we're done here. + */ + if (next != tgts[curr + 1]) + break; + + /* + * Otherwise, find the next valid column after + * the previous position. + */ + for (c = tgts[curr - 1] + 1; + rm->rm_col[c].rc_error != 0; c++) + continue; + + tgts[curr] = c; + curr++; + + } while (curr != n); + } + } + n--; +done: + for (i = 0; i < n; i++) + abd_free(orig[i]); + + return (ret); +} + +/* + * Complete an IO operation on a RAIDZ VDev + * + * Outline: + * - For write operations: + * 1. Check for errors on the child IOs. + * 2. Return, setting an error code if too few child VDevs were written + * to reconstruct the data later. Note that partial writes are + * considered successful if they can be reconstructed at all. + * - For read operations: + * 1. Check for errors on the child IOs. + * 2. If data errors occurred: + * a. Try to reassemble the data from the parity available. + * b. If we haven't yet read the parity drives, read them now. + * c. If all parity drives have been read but the data still doesn't + * reassemble with a correct checksum, then try combinatorial + * reconstruction. + * d. If that doesn't work, return an error. + * 3. If there were unexpected errors or this is a resilver operation, + * rewrite the vdevs that had errors. + */ +static void +vdev_raidz_io_done(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + vdev_t *cvd; + raidz_map_t *rm = zio->io_vsd; + raidz_col_t *rc = NULL; + int unexpected_errors = 0; + int parity_errors = 0; + int parity_untried = 0; + int data_errors = 0; + int total_errors = 0; + int n, c; + int tgts[VDEV_RAIDZ_MAXPARITY]; + int code; + + ASSERT(zio->io_bp != NULL); /* XXX need to add code to enforce this */ + + ASSERT(rm->rm_missingparity <= rm->rm_firstdatacol); + ASSERT(rm->rm_missingdata <= rm->rm_cols - rm->rm_firstdatacol); + + for (c = 0; c < rm->rm_cols; c++) { + rc = &rm->rm_col[c]; + + if (rc->rc_error) { + ASSERT(rc->rc_error != ECKSUM); /* child has no bp */ + + if (c < rm->rm_firstdatacol) + parity_errors++; + else + data_errors++; + + if (!rc->rc_skipped) + unexpected_errors++; + + total_errors++; + } else if (c < rm->rm_firstdatacol && !rc->rc_tried) { + parity_untried++; + } + } + + if (zio->io_type == ZIO_TYPE_WRITE) { + /* + * XXX -- for now, treat partial writes as a success. + * (If we couldn't write enough columns to reconstruct + * the data, the I/O failed. Otherwise, good enough.) + * + * Now that we support write reallocation, it would be better + * to treat partial failure as real failure unless there are + * no non-degraded top-level vdevs left, and not update DTLs + * if we intend to reallocate. + */ + /* XXPOLICY */ + if (total_errors > rm->rm_firstdatacol) + zio->io_error = vdev_raidz_worst_error(rm); + + return; + } + + ASSERT(zio->io_type == ZIO_TYPE_READ); + /* + * There are three potential phases for a read: + * 1. produce valid data from the columns read + * 2. read all disks and try again + * 3. perform combinatorial reconstruction + * + * Each phase is progressively both more expensive and less likely to + * occur. If we encounter more errors than we can repair or all phases + * fail, we have no choice but to return an error. + */ + + /* + * If the number of errors we saw was correctable -- less than or equal + * to the number of parity disks read -- attempt to produce data that + * has a valid checksum. Naturally, this case applies in the absence of + * any errors. + */ + if (total_errors <= rm->rm_firstdatacol - parity_untried) { + if (data_errors == 0) { + if (raidz_checksum_verify(zio) == 0) { + /* + * If we read parity information (unnecessarily + * as it happens since no reconstruction was + * needed) regenerate and verify the parity. + * We also regenerate parity when resilvering + * so we can write it out to the failed device + * later. + */ + if (parity_errors + parity_untried < + rm->rm_firstdatacol || + (zio->io_flags & ZIO_FLAG_RESILVER)) { + n = raidz_parity_verify(zio, rm); + unexpected_errors += n; + ASSERT(parity_errors + n <= + rm->rm_firstdatacol); + } + goto done; + } + } else { + /* + * We either attempt to read all the parity columns or + * none of them. If we didn't try to read parity, we + * wouldn't be here in the correctable case. There must + * also have been fewer parity errors than parity + * columns or, again, we wouldn't be in this code path. + */ + ASSERT(parity_untried == 0); + ASSERT(parity_errors < rm->rm_firstdatacol); + + /* + * Identify the data columns that reported an error. + */ + n = 0; + for (c = rm->rm_firstdatacol; c < rm->rm_cols; c++) { + rc = &rm->rm_col[c]; + if (rc->rc_error != 0) { + ASSERT(n < VDEV_RAIDZ_MAXPARITY); + tgts[n++] = c; + } + } + + ASSERT(rm->rm_firstdatacol >= n); + + code = vdev_raidz_reconstruct(rm, tgts, n); + + if (raidz_checksum_verify(zio) == 0) { + /* + * If we read more parity disks than were used + * for reconstruction, confirm that the other + * parity disks produced correct data. This + * routine is suboptimal in that it regenerates + * the parity that we already used in addition + * to the parity that we're attempting to + * verify, but this should be a relatively + * uncommon case, and can be optimized if it + * becomes a problem. Note that we regenerate + * parity when resilvering so we can write it + * out to failed devices later. + */ + if (parity_errors < rm->rm_firstdatacol - n || + (zio->io_flags & ZIO_FLAG_RESILVER)) { + n = raidz_parity_verify(zio, rm); + unexpected_errors += n; + ASSERT(parity_errors + n <= + rm->rm_firstdatacol); + } + + goto done; + } + } + } + + /* + * This isn't a typical situation -- either we got a read error or + * a child silently returned bad data. Read every block so we can + * try again with as much data and parity as we can track down. If + * we've already been through once before, all children will be marked + * as tried so we'll proceed to combinatorial reconstruction. + */ + unexpected_errors = 1; + rm->rm_missingdata = 0; + rm->rm_missingparity = 0; + + for (c = 0; c < rm->rm_cols; c++) { + if (rm->rm_col[c].rc_tried) + continue; + + zio_vdev_io_redone(zio); + do { + rc = &rm->rm_col[c]; + if (rc->rc_tried) + continue; + zio_nowait(zio_vdev_child_io(zio, NULL, + vd->vdev_child[rc->rc_devidx], + rc->rc_offset, rc->rc_abd, rc->rc_size, + zio->io_type, zio->io_priority, 0, + vdev_raidz_child_done, rc)); + } while (++c < rm->rm_cols); + + return; + } + + /* + * At this point we've attempted to reconstruct the data given the + * errors we detected, and we've attempted to read all columns. There + * must, therefore, be one or more additional problems -- silent errors + * resulting in invalid data rather than explicit I/O errors resulting + * in absent data. We check if there is enough additional data to + * possibly reconstruct the data and then perform combinatorial + * reconstruction over all possible combinations. If that fails, + * we're cooked. + */ + if (total_errors > rm->rm_firstdatacol) { + zio->io_error = vdev_raidz_worst_error(rm); + + } else if (total_errors < rm->rm_firstdatacol && + (code = vdev_raidz_combrec(zio, total_errors, data_errors)) != 0) { + /* + * If we didn't use all the available parity for the + * combinatorial reconstruction, verify that the remaining + * parity is correct. + */ + if (code != (1 << rm->rm_firstdatacol) - 1) + (void) raidz_parity_verify(zio, rm); + } else { + /* + * We're here because either: + * + * total_errors == rm_first_datacol, or + * vdev_raidz_combrec() failed + * + * In either case, there is enough bad data to prevent + * reconstruction. + * + * Start checksum ereports for all children which haven't + * failed, and the IO wasn't speculative. + */ + zio->io_error = SET_ERROR(ECKSUM); + + if (!(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { + for (c = 0; c < rm->rm_cols; c++) { + rc = &rm->rm_col[c]; + if (rc->rc_error == 0) { + zio_bad_cksum_t zbc; + zbc.zbc_has_cksum = 0; + zbc.zbc_injected = + rm->rm_ecksuminjected; + + zfs_ereport_start_checksum( + zio->io_spa, + vd->vdev_child[rc->rc_devidx], + zio, rc->rc_offset, rc->rc_size, + (void *)(uintptr_t)c, &zbc); + } + } + } + } + +done: + zio_checksum_verified(zio); + + if (zio->io_error == 0 && spa_writeable(zio->io_spa) && + (unexpected_errors || (zio->io_flags & ZIO_FLAG_RESILVER))) { + /* + * Use the good data we have in hand to repair damaged children. + */ + for (c = 0; c < rm->rm_cols; c++) { + rc = &rm->rm_col[c]; + cvd = vd->vdev_child[rc->rc_devidx]; + + if (rc->rc_error == 0) + continue; + + zio_nowait(zio_vdev_child_io(zio, NULL, cvd, + rc->rc_offset, rc->rc_abd, rc->rc_size, + ZIO_TYPE_WRITE, ZIO_PRIORITY_ASYNC_WRITE, + ZIO_FLAG_IO_REPAIR | (unexpected_errors ? + ZIO_FLAG_SELF_HEAL : 0), NULL, NULL)); + } + } +} + +static void +vdev_raidz_state_change(vdev_t *vd, int faulted, int degraded) +{ + if (faulted > vd->vdev_nparity) + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_NO_REPLICAS); + else if (degraded + faulted != 0) + vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE); + else + vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE); +} + +/* + * Determine if any portion of the provided block resides on a child vdev + * with a dirty DTL and therefore needs to be resilvered. The function + * assumes that at least one DTL is dirty which imples that full stripe + * width blocks must be resilvered. + */ +static boolean_t +vdev_raidz_need_resilver(vdev_t *vd, uint64_t offset, size_t psize) +{ + uint64_t dcols = vd->vdev_children; + uint64_t nparity = vd->vdev_nparity; + uint64_t ashift = vd->vdev_top->vdev_ashift; + /* The starting RAIDZ (parent) vdev sector of the block. */ + uint64_t b = offset >> ashift; + /* The zio's size in units of the vdev's minimum sector size. */ + uint64_t s = ((psize - 1) >> ashift) + 1; + /* The first column for this stripe. */ + uint64_t f = b % dcols; + + if (s + nparity >= dcols) + return (B_TRUE); + + for (uint64_t c = 0; c < s + nparity; c++) { + uint64_t devidx = (f + c) % dcols; + vdev_t *cvd = vd->vdev_child[devidx]; + + /* + * dsl_scan_need_resilver() already checked vd with + * vdev_dtl_contains(). So here just check cvd with + * vdev_dtl_empty(), cheaper and a good approximation. + */ + if (!vdev_dtl_empty(cvd, DTL_PARTIAL)) + return (B_TRUE); + } + + return (B_FALSE); +} + +vdev_ops_t vdev_raidz_ops = { + vdev_raidz_open, + vdev_raidz_close, + vdev_raidz_asize, + vdev_raidz_io_start, + vdev_raidz_io_done, + vdev_raidz_state_change, + vdev_raidz_need_resilver, + NULL, + NULL, + VDEV_TYPE_RAIDZ, /* name of this vdev type */ + B_FALSE /* not a leaf vdev */ +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math.c @@ -0,0 +1,652 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include +#include +#include +#include +#include + +#include +#include + +extern boolean_t raidz_will_scalar_work(void); + +/* Opaque implementation with NULL methods to represent original methods */ +static const raidz_impl_ops_t vdev_raidz_original_impl = { + .name = "original", + .is_supported = raidz_will_scalar_work, +}; + +/* RAIDZ parity op that contain the fastest methods */ +static raidz_impl_ops_t vdev_raidz_fastest_impl = { + .name = "fastest" +}; + +/* All compiled in implementations */ +const raidz_impl_ops_t *raidz_all_maths[] = { + &vdev_raidz_original_impl, + &vdev_raidz_scalar_impl, +#if defined(__x86_64) && defined(HAVE_SSE2) /* only x86_64 for now */ + &vdev_raidz_sse2_impl, +#endif +#if defined(__x86_64) && defined(HAVE_SSSE3) /* only x86_64 for now */ + &vdev_raidz_ssse3_impl, +#endif +#if defined(__x86_64) && defined(HAVE_AVX2) /* only x86_64 for now */ + &vdev_raidz_avx2_impl, +#endif +#if defined(__x86_64) && defined(HAVE_AVX512F) /* only x86_64 for now */ + &vdev_raidz_avx512f_impl, +#endif +#if defined(__x86_64) && defined(HAVE_AVX512BW) /* only x86_64 for now */ + &vdev_raidz_avx512bw_impl, +#endif +#if defined(__aarch64__) + &vdev_raidz_aarch64_neon_impl, + &vdev_raidz_aarch64_neonx2_impl, +#endif +}; + +/* Indicate that benchmark has been completed */ +static boolean_t raidz_math_initialized = B_FALSE; + +/* Select raidz implementation */ +#define IMPL_FASTEST (UINT32_MAX) +#define IMPL_CYCLE (UINT32_MAX - 1) +#define IMPL_ORIGINAL (0) +#define IMPL_SCALAR (1) + +#define RAIDZ_IMPL_READ(i) (*(volatile uint32_t *) &(i)) + +static uint32_t zfs_vdev_raidz_impl = IMPL_SCALAR; +static uint32_t user_sel_impl = IMPL_FASTEST; + +/* Hold all supported implementations */ +static size_t raidz_supp_impl_cnt = 0; +static raidz_impl_ops_t *raidz_supp_impl[ARRAY_SIZE(raidz_all_maths)]; + +/* + * kstats values for supported implementations + * Values represent per disk throughput of 8 disk+parity raidz vdev [B/s] + */ +static raidz_impl_kstat_t raidz_impl_kstats[ARRAY_SIZE(raidz_all_maths) + 1]; + +/* kstat for benchmarked implementations */ +static kstat_t *raidz_math_kstat = NULL; + +/* + * Selects the raidz operation for raidz_map + * If rm_ops is set to NULL original raidz implementation will be used + */ +raidz_impl_ops_t * +vdev_raidz_math_get_ops() +{ + raidz_impl_ops_t *ops = NULL; + const uint32_t impl = RAIDZ_IMPL_READ(zfs_vdev_raidz_impl); + + switch (impl) { + case IMPL_FASTEST: + ASSERT(raidz_math_initialized); + ops = &vdev_raidz_fastest_impl; + break; +#if !defined(_KERNEL) + case IMPL_CYCLE: + { + ASSERT(raidz_math_initialized); + ASSERT3U(raidz_supp_impl_cnt, >, 0); + /* Cycle through all supported implementations */ + static size_t cycle_impl_idx = 0; + size_t idx = (++cycle_impl_idx) % raidz_supp_impl_cnt; + ops = raidz_supp_impl[idx]; + } + break; +#endif + case IMPL_ORIGINAL: + ops = (raidz_impl_ops_t *)&vdev_raidz_original_impl; + break; + case IMPL_SCALAR: + ops = (raidz_impl_ops_t *)&vdev_raidz_scalar_impl; + break; + default: + ASSERT3U(impl, <, raidz_supp_impl_cnt); + ASSERT3U(raidz_supp_impl_cnt, >, 0); + ops = raidz_supp_impl[impl]; + break; + } + + ASSERT3P(ops, !=, NULL); + + return (ops); +} + +/* + * Select parity generation method for raidz_map + */ +int +vdev_raidz_math_generate(raidz_map_t *rm) +{ + raidz_gen_f gen_parity = NULL; + + switch (raidz_parity(rm)) { + case 1: + gen_parity = rm->rm_ops->gen[RAIDZ_GEN_P]; + break; + case 2: + gen_parity = rm->rm_ops->gen[RAIDZ_GEN_PQ]; + break; + case 3: + gen_parity = rm->rm_ops->gen[RAIDZ_GEN_PQR]; + break; + default: + gen_parity = NULL; + cmn_err(CE_PANIC, "invalid RAID-Z configuration %d", + raidz_parity(rm)); + break; + } + + /* if method is NULL execute the original implementation */ + if (gen_parity == NULL) + return (RAIDZ_ORIGINAL_IMPL); + + gen_parity(rm); + + return (0); +} + +static raidz_rec_f +reconstruct_fun_p_sel(raidz_map_t *rm, const int *parity_valid, + const int nbaddata) +{ + if (nbaddata == 1 && parity_valid[CODE_P]) { + return (rm->rm_ops->rec[RAIDZ_REC_P]); + } + return ((raidz_rec_f) NULL); +} + +static raidz_rec_f +reconstruct_fun_pq_sel(raidz_map_t *rm, const int *parity_valid, + const int nbaddata) +{ + if (nbaddata == 1) { + if (parity_valid[CODE_P]) { + return (rm->rm_ops->rec[RAIDZ_REC_P]); + } else if (parity_valid[CODE_Q]) { + return (rm->rm_ops->rec[RAIDZ_REC_Q]); + } + } else if (nbaddata == 2 && + parity_valid[CODE_P] && parity_valid[CODE_Q]) { + return (rm->rm_ops->rec[RAIDZ_REC_PQ]); + } + return ((raidz_rec_f) NULL); +} + +static raidz_rec_f +reconstruct_fun_pqr_sel(raidz_map_t *rm, const int *parity_valid, + const int nbaddata) +{ + if (nbaddata == 1) { + if (parity_valid[CODE_P]) { + return (rm->rm_ops->rec[RAIDZ_REC_P]); + } else if (parity_valid[CODE_Q]) { + return (rm->rm_ops->rec[RAIDZ_REC_Q]); + } else if (parity_valid[CODE_R]) { + return (rm->rm_ops->rec[RAIDZ_REC_R]); + } + } else if (nbaddata == 2) { + if (parity_valid[CODE_P] && parity_valid[CODE_Q]) { + return (rm->rm_ops->rec[RAIDZ_REC_PQ]); + } else if (parity_valid[CODE_P] && parity_valid[CODE_R]) { + return (rm->rm_ops->rec[RAIDZ_REC_PR]); + } else if (parity_valid[CODE_Q] && parity_valid[CODE_R]) { + return (rm->rm_ops->rec[RAIDZ_REC_QR]); + } + } else if (nbaddata == 3 && + parity_valid[CODE_P] && parity_valid[CODE_Q] && + parity_valid[CODE_R]) { + return (rm->rm_ops->rec[RAIDZ_REC_PQR]); + } + return ((raidz_rec_f) NULL); +} + +/* + * Select data reconstruction method for raidz_map + * @parity_valid - Parity validity flag + * @dt - Failed data index array + * @nbaddata - Number of failed data columns + */ +int +vdev_raidz_math_reconstruct(raidz_map_t *rm, const int *parity_valid, + const int *dt, const int nbaddata) +{ + raidz_rec_f rec_fn = NULL; + + switch (raidz_parity(rm)) { + case PARITY_P: + rec_fn = reconstruct_fun_p_sel(rm, parity_valid, nbaddata); + break; + case PARITY_PQ: + rec_fn = reconstruct_fun_pq_sel(rm, parity_valid, nbaddata); + break; + case PARITY_PQR: + rec_fn = reconstruct_fun_pqr_sel(rm, parity_valid, nbaddata); + break; + default: + cmn_err(CE_PANIC, "invalid RAID-Z configuration %d", + raidz_parity(rm)); + break; + } + + if (rec_fn == NULL) + return (RAIDZ_ORIGINAL_IMPL); + else + return (rec_fn(rm, dt)); +} + +const char *raidz_gen_name[] = { + "gen_p", "gen_pq", "gen_pqr" +}; +const char *raidz_rec_name[] = { + "rec_p", "rec_q", "rec_r", + "rec_pq", "rec_pr", "rec_qr", "rec_pqr" +}; + +#define RAIDZ_KSTAT_LINE_LEN (17 + 10*12 + 1) + +static int +raidz_math_kstat_headers(char *buf, size_t size) +{ + int i; + ssize_t off; + + ASSERT3U(size, >=, RAIDZ_KSTAT_LINE_LEN); + + off = snprintf(buf, size, "%-17s", "implementation"); + + for (i = 0; i < ARRAY_SIZE(raidz_gen_name); i++) + off += snprintf(buf + off, size - off, "%-16s", + raidz_gen_name[i]); + + for (i = 0; i < ARRAY_SIZE(raidz_rec_name); i++) + off += snprintf(buf + off, size - off, "%-16s", + raidz_rec_name[i]); + + (void) snprintf(buf + off, size - off, "\n"); + + return (0); +} + +static int +raidz_math_kstat_data(char *buf, size_t size, void *data) +{ + raidz_impl_kstat_t *fstat = &raidz_impl_kstats[raidz_supp_impl_cnt]; + raidz_impl_kstat_t *cstat = (raidz_impl_kstat_t *)data; + ssize_t off = 0; + int i; + + ASSERT3U(size, >=, RAIDZ_KSTAT_LINE_LEN); + + if (cstat == fstat) { + off += snprintf(buf + off, size - off, "%-17s", "fastest"); + + for (i = 0; i < ARRAY_SIZE(raidz_gen_name); i++) { + int id = fstat->gen[i]; + off += snprintf(buf + off, size - off, "%-16s", + raidz_supp_impl[id]->name); + } + for (i = 0; i < ARRAY_SIZE(raidz_rec_name); i++) { + int id = fstat->rec[i]; + off += snprintf(buf + off, size - off, "%-16s", + raidz_supp_impl[id]->name); + } + } else { + ptrdiff_t id = cstat - raidz_impl_kstats; + + off += snprintf(buf + off, size - off, "%-17s", + raidz_supp_impl[id]->name); + + for (i = 0; i < ARRAY_SIZE(raidz_gen_name); i++) + off += snprintf(buf + off, size - off, "%-16llu", + (u_longlong_t)cstat->gen[i]); + + for (i = 0; i < ARRAY_SIZE(raidz_rec_name); i++) + off += snprintf(buf + off, size - off, "%-16llu", + (u_longlong_t)cstat->rec[i]); + } + + (void) snprintf(buf + off, size - off, "\n"); + + return (0); +} + +static void * +raidz_math_kstat_addr(kstat_t *ksp, loff_t n) +{ + if (n <= raidz_supp_impl_cnt) + ksp->ks_private = (void *) (raidz_impl_kstats + n); + else + ksp->ks_private = NULL; + + return (ksp->ks_private); +} + +#define BENCH_D_COLS (8ULL) +#define BENCH_COLS (BENCH_D_COLS + PARITY_PQR) +#define BENCH_ZIO_SIZE (1ULL << SPA_OLD_MAXBLOCKSHIFT) /* 128 kiB */ +#define BENCH_NS MSEC2NSEC(25) /* 25ms */ + +typedef void (*benchmark_fn)(raidz_map_t *rm, const int fn); + +static void +benchmark_gen_impl(raidz_map_t *rm, const int fn) +{ + (void) fn; + vdev_raidz_generate_parity(rm); +} + +static void +benchmark_rec_impl(raidz_map_t *rm, const int fn) +{ + static const int rec_tgt[7][3] = { + {1, 2, 3}, /* rec_p: bad QR & D[0] */ + {0, 2, 3}, /* rec_q: bad PR & D[0] */ + {0, 1, 3}, /* rec_r: bad PQ & D[0] */ + {2, 3, 4}, /* rec_pq: bad R & D[0][1] */ + {1, 3, 4}, /* rec_pr: bad Q & D[0][1] */ + {0, 3, 4}, /* rec_qr: bad P & D[0][1] */ + {3, 4, 5} /* rec_pqr: bad & D[0][1][2] */ + }; + + vdev_raidz_reconstruct(rm, rec_tgt[fn], 3); +} + +/* + * Benchmarking of all supported implementations (raidz_supp_impl_cnt) + * is performed by setting the rm_ops pointer and calling the top level + * generate/reconstruct methods of bench_rm. + */ +static void +benchmark_raidz_impl(raidz_map_t *bench_rm, const int fn, benchmark_fn bench_fn) +{ + uint64_t run_cnt, speed, best_speed = 0; + hrtime_t t_start, t_diff; + raidz_impl_ops_t *curr_impl; + raidz_impl_kstat_t *fstat = &raidz_impl_kstats[raidz_supp_impl_cnt]; + int impl, i; + + for (impl = 0; impl < raidz_supp_impl_cnt; impl++) { + /* set an implementation to benchmark */ + curr_impl = raidz_supp_impl[impl]; + bench_rm->rm_ops = curr_impl; + + run_cnt = 0; + t_start = gethrtime(); + + do { + for (i = 0; i < 25; i++, run_cnt++) + bench_fn(bench_rm, fn); + + t_diff = gethrtime() - t_start; + } while (t_diff < BENCH_NS); + + speed = run_cnt * BENCH_ZIO_SIZE * NANOSEC; + speed /= (t_diff * BENCH_COLS); + + if (bench_fn == benchmark_gen_impl) + raidz_impl_kstats[impl].gen[fn] = speed; + else + raidz_impl_kstats[impl].rec[fn] = speed; + + /* Update fastest implementation method */ + if (speed > best_speed) { + best_speed = speed; + + if (bench_fn == benchmark_gen_impl) { + fstat->gen[fn] = impl; + vdev_raidz_fastest_impl.gen[fn] = + curr_impl->gen[fn]; + } else { + fstat->rec[fn] = impl; + vdev_raidz_fastest_impl.rec[fn] = + curr_impl->rec[fn]; + } + } + } +} + +void +vdev_raidz_math_init(void) +{ + raidz_impl_ops_t *curr_impl; + zio_t *bench_zio = NULL; + raidz_map_t *bench_rm = NULL; + uint64_t bench_parity; + int i, c, fn; + + /* move supported impl into raidz_supp_impl */ + for (i = 0, c = 0; i < ARRAY_SIZE(raidz_all_maths); i++) { + curr_impl = (raidz_impl_ops_t *)raidz_all_maths[i]; + + /* initialize impl */ + if (curr_impl->init) + curr_impl->init(); + + if (curr_impl->is_supported()) + raidz_supp_impl[c++] = (raidz_impl_ops_t *)curr_impl; + } + membar_producer(); /* complete raidz_supp_impl[] init */ + raidz_supp_impl_cnt = c; /* number of supported impl */ + +#if !defined(_KERNEL) + /* Skip benchmarking and use last implementation as fastest */ + memcpy(&vdev_raidz_fastest_impl, raidz_supp_impl[raidz_supp_impl_cnt-1], + sizeof (vdev_raidz_fastest_impl)); + strcpy(vdev_raidz_fastest_impl.name, "fastest"); + + raidz_math_initialized = B_TRUE; + + /* Use 'cycle' math selection method for userspace */ + VERIFY0(vdev_raidz_impl_set("cycle")); + return; +#endif + + /* Fake an zio and run the benchmark on a warmed up buffer */ + bench_zio = kmem_zalloc(sizeof (zio_t), KM_SLEEP); + bench_zio->io_offset = 0; + bench_zio->io_size = BENCH_ZIO_SIZE; /* only data columns */ + bench_zio->io_abd = abd_alloc_linear(BENCH_ZIO_SIZE, B_TRUE); + memset(abd_to_buf(bench_zio->io_abd), 0xAA, BENCH_ZIO_SIZE); + + /* Benchmark parity generation methods */ + for (fn = 0; fn < RAIDZ_GEN_NUM; fn++) { + bench_parity = fn + 1; + /* New raidz_map is needed for each generate_p/q/r */ + bench_rm = vdev_raidz_map_alloc(bench_zio, SPA_MINBLOCKSHIFT, + BENCH_D_COLS + bench_parity, bench_parity); + + benchmark_raidz_impl(bench_rm, fn, benchmark_gen_impl); + + vdev_raidz_map_free(bench_rm); + } + + /* Benchmark data reconstruction methods */ + bench_rm = vdev_raidz_map_alloc(bench_zio, SPA_MINBLOCKSHIFT, + BENCH_COLS, PARITY_PQR); + + for (fn = 0; fn < RAIDZ_REC_NUM; fn++) + benchmark_raidz_impl(bench_rm, fn, benchmark_rec_impl); + + vdev_raidz_map_free(bench_rm); + + /* cleanup the bench zio */ + abd_free(bench_zio->io_abd); + kmem_free(bench_zio, sizeof (zio_t)); + + /* install kstats for all impl */ + raidz_math_kstat = kstat_create("zfs", 0, "vdev_raidz_bench", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + + if (raidz_math_kstat != NULL) { + raidz_math_kstat->ks_data = NULL; + raidz_math_kstat->ks_ndata = UINT32_MAX; + kstat_set_raw_ops(raidz_math_kstat, + raidz_math_kstat_headers, + raidz_math_kstat_data, + raidz_math_kstat_addr); + kstat_install(raidz_math_kstat); + } + + /* Finish initialization */ + atomic_swap_32(&zfs_vdev_raidz_impl, user_sel_impl); + raidz_math_initialized = B_TRUE; +} + +void +vdev_raidz_math_fini(void) +{ + raidz_impl_ops_t const *curr_impl; + int i; + + if (raidz_math_kstat != NULL) { + kstat_delete(raidz_math_kstat); + raidz_math_kstat = NULL; + } + + /* fini impl */ + for (i = 0; i < ARRAY_SIZE(raidz_all_maths); i++) { + curr_impl = raidz_all_maths[i]; + if (curr_impl->fini) + curr_impl->fini(); + } +} + +static const struct { + char *name; + uint32_t sel; +} math_impl_opts[] = { +#if !defined(_KERNEL) + { "cycle", IMPL_CYCLE }, +#endif + { "fastest", IMPL_FASTEST }, + { "original", IMPL_ORIGINAL }, + { "scalar", IMPL_SCALAR } +}; + +/* + * Function sets desired raidz implementation. + * + * If we are called before init(), user preference will be saved in + * user_sel_impl, and applied in later init() call. This occurs when module + * parameter is specified on module load. Otherwise, directly update + * zfs_vdev_raidz_impl. + * + * @val Name of raidz implementation to use + * @param Unused. + */ +int +vdev_raidz_impl_set(const char *val) +{ + int err = -EINVAL; + char req_name[RAIDZ_IMPL_NAME_MAX]; + uint32_t impl = RAIDZ_IMPL_READ(user_sel_impl); + size_t i; + + /* sanitize input */ + i = strnlen(val, RAIDZ_IMPL_NAME_MAX); + if (i == 0 || i == RAIDZ_IMPL_NAME_MAX) + return (err); + + strlcpy(req_name, val, RAIDZ_IMPL_NAME_MAX); + while (i > 0 && !!isspace(req_name[i-1])) + i--; + req_name[i] = '\0'; + + /* Check mandatory options */ + for (i = 0; i < ARRAY_SIZE(math_impl_opts); i++) { + if (strcmp(req_name, math_impl_opts[i].name) == 0) { + impl = math_impl_opts[i].sel; + err = 0; + break; + } + } + + /* check all supported impl if init() was already called */ + if (err != 0 && raidz_math_initialized) { + /* check all supported implementations */ + for (i = 0; i < raidz_supp_impl_cnt; i++) { + if (strcmp(req_name, raidz_supp_impl[i]->name) == 0) { + impl = i; + err = 0; + break; + } + } + } + + if (err == 0) { + if (raidz_math_initialized) + atomic_swap_32(&zfs_vdev_raidz_impl, impl); + else + atomic_swap_32(&user_sel_impl, impl); + } + + return (err); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +#include + +static int +zfs_vdev_raidz_impl_set(const char *val, zfs_kernel_param_t *kp) +{ + return (vdev_raidz_impl_set(val)); +} + +static int +zfs_vdev_raidz_impl_get(char *buffer, zfs_kernel_param_t *kp) +{ + int i, cnt = 0; + char *fmt; + const uint32_t impl = RAIDZ_IMPL_READ(zfs_vdev_raidz_impl); + + ASSERT(raidz_math_initialized); + + /* list mandatory options */ + for (i = 0; i < ARRAY_SIZE(math_impl_opts) - 2; i++) { + fmt = (impl == math_impl_opts[i].sel) ? "[%s] " : "%s "; + cnt += sprintf(buffer + cnt, fmt, math_impl_opts[i].name); + } + + /* list all supported implementations */ + for (i = 0; i < raidz_supp_impl_cnt; i++) { + fmt = (i == impl) ? "[%s] " : "%s "; + cnt += sprintf(buffer + cnt, fmt, raidz_supp_impl[i]->name); + } + + return (cnt); +} + +module_param_call(zfs_vdev_raidz_impl, zfs_vdev_raidz_impl_set, + zfs_vdev_raidz_impl_get, NULL, 0644); +MODULE_PARM_DESC(zfs_vdev_raidz_impl, "Select raidz implementation."); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_aarch64_neon.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_aarch64_neon.c @@ -0,0 +1,2279 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau. All rights reserved. + */ + +#include +#include + +#if defined(__aarch64__) + +#include "vdev_raidz_math_aarch64_neon_common.h" + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define GEN_P_STRIDE 4 +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_Q_STRIDE 4 +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_R_STRIDE 4 +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PQ_STRIDE 4 +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() +#define REC_PQ_STRIDE 2 +#define REC_PQ_X 0, 1 +#define REC_PQ_Y 2, 3 +#define REC_PQ_T 4, 5 + +#define SYN_PR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PR_STRIDE 4 +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() +#define REC_PR_STRIDE 2 +#define REC_PR_X 0, 1 +#define REC_PR_Y 2, 3 +#define REC_PR_T 4, 5 + +#define SYN_QR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_QR_STRIDE 4 +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() +#define REC_QR_STRIDE 2 +#define REC_QR_X 0, 1 +#define REC_QR_Y 2, 3 +#define REC_QR_T 4, 5 + +#define SYN_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PQR_STRIDE 4 +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() +#define REC_PQR_STRIDE 2 +#define REC_PQR_X 0, 1 +#define REC_PQR_Y 2, 3 +#define REC_PQR_Z 4, 5 +#define REC_PQR_XS 6, 7 +#define REC_PQR_YS 8, 9 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(aarch64_neon); +DEFINE_REC_METHODS(aarch64_neon); + +static boolean_t +raidz_will_aarch64_neon_work(void) +{ + return (B_TRUE); // __arch64__ requires NEON +} + +const raidz_impl_ops_t vdev_raidz_aarch64_neon_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(aarch64_neon), + .rec = RAIDZ_REC_METHODS(aarch64_neon), + .is_supported = &raidz_will_aarch64_neon_work, + .name = "aarch64_neon" +}; + +#endif /* defined(__aarch64__) */ + + +#if defined(__aarch64__) +/* BEGIN CSTYLED */ +const uint8_t +__attribute__((aligned(256))) gf_clmul_mod_lt[4*256][16] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, + 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, + 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, + 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, + 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, + 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, + 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, + 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, + 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, + 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, + 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, + 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, + 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xf5, 0xe8, 0xcf, 0xd2, 0x81, 0x9c, 0xbb, 0xa6 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, + 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xf5, 0xe8, 0xcf, 0xd2, 0x81, 0x9c, 0xbb, 0xa6 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, + 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xd2, 0xcf, 0xe8, 0xf5, 0xbb, 0xa6, 0x81, 0x9c }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, + 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xd2, 0xcf, 0xe8, 0xf5, 0xbb, 0xa6, 0x81, 0x9c }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, + 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xcf, 0xd2, 0xf5, 0xe8, 0xa6, 0xbb, 0x9c, 0x81 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xcf, 0xd2, 0xf5, 0xe8, 0xa6, 0xbb, 0x9c, 0x81 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, + 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x9c, 0x81, 0xbb, 0xa6, 0xd2, 0xcf, 0xf5, 0xe8 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, + 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x9c, 0x81, 0xbb, 0xa6, 0xd2, 0xcf, 0xf5, 0xe8 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, + 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x81, 0x9c, 0xa6, 0xbb, 0xcf, 0xd2, 0xe8, 0xf5 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, + 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x81, 0x9c, 0xa6, 0xbb, 0xcf, 0xd2, 0xe8, 0xf5 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, + 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xa6, 0xbb, 0x81, 0x9c, 0xf5, 0xe8, 0xd2, 0xcf }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, + 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xa6, 0xbb, 0x81, 0x9c, 0xf5, 0xe8, 0xd2, 0xcf }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xbb, 0xa6, 0x9c, 0x81, 0xe8, 0xf5, 0xcf, 0xd2 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, + 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xbb, 0xa6, 0x9c, 0x81, 0xe8, 0xf5, 0xcf, 0xd2 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, + 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, + 0x08, 0x29, 0x4a, 0x6b, 0x8c, 0xad, 0xce, 0xef }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, + 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, + 0x18, 0x3b, 0x5e, 0x7d, 0x94, 0xb7, 0xd2, 0xf1 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xf7, 0xcd, 0x83, 0xb9, 0x02, 0x38, 0x76, 0x4c }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, + 0x20, 0x04, 0x68, 0x4c, 0xb0, 0x94, 0xf8, 0xdc }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xf7, 0xcd, 0x83, 0xb9, 0x02, 0x38, 0x76, 0x4c }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x28, 0x0d, 0x62, 0x47, 0xbc, 0x99, 0xf6, 0xd3 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xea, 0xd0, 0x9e, 0xa4, 0x1f, 0x25, 0x6b, 0x51 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, + 0x30, 0x16, 0x7c, 0x5a, 0xa8, 0x8e, 0xe4, 0xc2 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xea, 0xd0, 0x9e, 0xa4, 0x1f, 0x25, 0x6b, 0x51 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xb9, 0x83, 0xd0, 0xea, 0x6b, 0x51, 0x02, 0x38 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, + 0x40, 0x68, 0x10, 0x38, 0xe0, 0xc8, 0xb0, 0x98 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xb9, 0x83, 0xd0, 0xea, 0x6b, 0x51, 0x02, 0x38 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, + 0x48, 0x61, 0x1a, 0x33, 0xec, 0xc5, 0xbe, 0x97 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xa4, 0x9e, 0xcd, 0xf7, 0x76, 0x4c, 0x1f, 0x25 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, + 0x50, 0x7a, 0x04, 0x2e, 0xf8, 0xd2, 0xac, 0x86 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xa4, 0x9e, 0xcd, 0xf7, 0x76, 0x4c, 0x1f, 0x25 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, + 0x58, 0x73, 0x0e, 0x25, 0xf4, 0xdf, 0xa2, 0x89 }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x83, 0xb9, 0xea, 0xd0, 0x4c, 0x76, 0x25, 0x1f }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, + 0x60, 0x4c, 0x38, 0x14, 0xd0, 0xfc, 0x88, 0xa4 }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x83, 0xb9, 0xea, 0xd0, 0x4c, 0x76, 0x25, 0x1f }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, + 0x68, 0x45, 0x32, 0x1f, 0xdc, 0xf1, 0x86, 0xab }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x9e, 0xa4, 0xf7, 0xcd, 0x51, 0x6b, 0x38, 0x02 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, + 0x70, 0x5e, 0x2c, 0x02, 0xc8, 0xe6, 0x94, 0xba }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x9e, 0xa4, 0xf7, 0xcd, 0x51, 0x6b, 0x38, 0x02 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, + 0x78, 0x57, 0x26, 0x09, 0xc4, 0xeb, 0x9a, 0xb5 }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, + 0x88, 0xb9, 0xea, 0xdb, 0x4c, 0x7d, 0x2e, 0x1f }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, + 0x90, 0xa2, 0xf4, 0xc6, 0x58, 0x6a, 0x3c, 0x0e }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, + 0x98, 0xab, 0xfe, 0xcd, 0x54, 0x67, 0x32, 0x01 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x1f, 0x38, 0x51, 0x76, 0x9e, 0xb9, 0xd0, 0xf7 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xa0, 0x94, 0xc8, 0xfc, 0x70, 0x44, 0x18, 0x2c }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x1f, 0x38, 0x51, 0x76, 0x9e, 0xb9, 0xd0, 0xf7 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, + 0xa8, 0x9d, 0xc2, 0xf7, 0x7c, 0x49, 0x16, 0x23 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x02, 0x25, 0x4c, 0x6b, 0x83, 0xa4, 0xcd, 0xea }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, + 0xb0, 0x86, 0xdc, 0xea, 0x68, 0x5e, 0x04, 0x32 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x02, 0x25, 0x4c, 0x6b, 0x83, 0xa4, 0xcd, 0xea }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, + 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0x0a, 0x3d }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x51, 0x76, 0x02, 0x25, 0xf7, 0xd0, 0xa4, 0x83 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, + 0xc0, 0xf8, 0xb0, 0x88, 0x20, 0x18, 0x50, 0x68 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x51, 0x76, 0x02, 0x25, 0xf7, 0xd0, 0xa4, 0x83 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, + 0xc8, 0xf1, 0xba, 0x83, 0x2c, 0x15, 0x5e, 0x67 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x4c, 0x6b, 0x1f, 0x38, 0xea, 0xcd, 0xb9, 0x9e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x4c, 0x6b, 0x1f, 0x38, 0xea, 0xcd, 0xb9, 0x9e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, + 0xd8, 0xe3, 0xae, 0x95, 0x34, 0x0f, 0x42, 0x79 }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x6b, 0x4c, 0x38, 0x1f, 0xd0, 0xf7, 0x83, 0xa4 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, + 0xe0, 0xdc, 0x98, 0xa4, 0x10, 0x2c, 0x68, 0x54 }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x6b, 0x4c, 0x38, 0x1f, 0xd0, 0xf7, 0x83, 0xa4 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, + 0xe8, 0xd5, 0x92, 0xaf, 0x1c, 0x21, 0x66, 0x5b }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x76, 0x51, 0x25, 0x02, 0xcd, 0xea, 0x9e, 0xb9 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, + 0xf0, 0xce, 0x8c, 0xb2, 0x08, 0x36, 0x74, 0x4a }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x76, 0x51, 0x25, 0x02, 0xcd, 0xea, 0x9e, 0xb9 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, + 0xf8, 0xc7, 0x86, 0xb9, 0x04, 0x3b, 0x7a, 0x45 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x41, 0x82, 0xc3, 0x04, 0x45, 0x86, 0xc7, + 0x08, 0x49, 0x8a, 0xcb, 0x0c, 0x4d, 0x8e, 0xcf }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x9a, 0xee, 0x72, 0x06, 0x57, 0x23, 0xbf, 0xcb }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x42, 0x84, 0xc6, 0x08, 0x4a, 0x8c, 0xce, + 0x10, 0x52, 0x94, 0xd6, 0x18, 0x5a, 0x9c, 0xde }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x9a, 0xee, 0x72, 0x06, 0x57, 0x23, 0xbf, 0xcb }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x43, 0x86, 0xc5, 0x0c, 0x4f, 0x8a, 0xc9, + 0x18, 0x5b, 0x9e, 0xdd, 0x14, 0x57, 0x92, 0xd1 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xbd, 0xc9, 0x55, 0x21, 0x6d, 0x19, 0x85, 0xf1 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x44, 0x88, 0xcc, 0x10, 0x54, 0x98, 0xdc, + 0x20, 0x64, 0xa8, 0xec, 0x30, 0x74, 0xb8, 0xfc }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xbd, 0xc9, 0x55, 0x21, 0x6d, 0x19, 0x85, 0xf1 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x45, 0x8a, 0xcf, 0x14, 0x51, 0x9e, 0xdb, + 0x28, 0x6d, 0xa2, 0xe7, 0x3c, 0x79, 0xb6, 0xf3 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x46, 0x8c, 0xca, 0x18, 0x5e, 0x94, 0xd2, + 0x30, 0x76, 0xbc, 0xfa, 0x28, 0x6e, 0xa4, 0xe2 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x47, 0x8e, 0xc9, 0x1c, 0x5b, 0x92, 0xd5, + 0x38, 0x7f, 0xb6, 0xf1, 0x24, 0x63, 0xaa, 0xed }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xf3, 0x87, 0x06, 0x72, 0x04, 0x70, 0xf1, 0x85 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x48, 0x90, 0xd8, 0x20, 0x68, 0xb0, 0xf8, + 0x40, 0x08, 0xd0, 0x98, 0x60, 0x28, 0xf0, 0xb8 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xf3, 0x87, 0x06, 0x72, 0x04, 0x70, 0xf1, 0x85 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x49, 0x92, 0xdb, 0x24, 0x6d, 0xb6, 0xff, + 0x48, 0x01, 0xda, 0x93, 0x6c, 0x25, 0xfe, 0xb7 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xee, 0x9a, 0x1b, 0x6f, 0x19, 0x6d, 0xec, 0x98 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4a, 0x94, 0xde, 0x28, 0x62, 0xbc, 0xf6, + 0x50, 0x1a, 0xc4, 0x8e, 0x78, 0x32, 0xec, 0xa6 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xee, 0x9a, 0x1b, 0x6f, 0x19, 0x6d, 0xec, 0x98 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4b, 0x96, 0xdd, 0x2c, 0x67, 0xba, 0xf1, + 0x58, 0x13, 0xce, 0x85, 0x74, 0x3f, 0xe2, 0xa9 }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xc9, 0xbd, 0x3c, 0x48, 0x23, 0x57, 0xd6, 0xa2 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4c, 0x98, 0xd4, 0x30, 0x7c, 0xa8, 0xe4, + 0x60, 0x2c, 0xf8, 0xb4, 0x50, 0x1c, 0xc8, 0x84 }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xc9, 0xbd, 0x3c, 0x48, 0x23, 0x57, 0xd6, 0xa2 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4d, 0x9a, 0xd7, 0x34, 0x79, 0xae, 0xe3, + 0x68, 0x25, 0xf2, 0xbf, 0x5c, 0x11, 0xc6, 0x8b }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xd4, 0xa0, 0x21, 0x55, 0x3e, 0x4a, 0xcb, 0xbf }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xd4, 0xa0, 0x21, 0x55, 0x3e, 0x4a, 0xcb, 0xbf }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4f, 0x9e, 0xd1, 0x3c, 0x73, 0xa2, 0xed, + 0x78, 0x37, 0xe6, 0xa9, 0x44, 0x0b, 0xda, 0x95 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x51, 0xa2, 0xf3, 0x44, 0x15, 0xe6, 0xb7, + 0x88, 0xd9, 0x2a, 0x7b, 0xcc, 0x9d, 0x6e, 0x3f }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x72, 0x1b, 0xa0, 0xc9, 0xcb, 0xa2, 0x19, 0x70 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x52, 0xa4, 0xf6, 0x48, 0x1a, 0xec, 0xbe, + 0x90, 0xc2, 0x34, 0x66, 0xd8, 0x8a, 0x7c, 0x2e }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x72, 0x1b, 0xa0, 0xc9, 0xcb, 0xa2, 0x19, 0x70 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x55, 0x3c, 0x87, 0xee, 0xf1, 0x98, 0x23, 0x4a }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x54, 0xa8, 0xfc, 0x50, 0x04, 0xf8, 0xac, + 0xa0, 0xf4, 0x08, 0x5c, 0xf0, 0xa4, 0x58, 0x0c }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x55, 0x3c, 0x87, 0xee, 0xf1, 0x98, 0x23, 0x4a }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x55, 0xaa, 0xff, 0x54, 0x01, 0xfe, 0xab, + 0xa8, 0xfd, 0x02, 0x57, 0xfc, 0xa9, 0x56, 0x03 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x56, 0xac, 0xfa, 0x58, 0x0e, 0xf4, 0xa2, + 0xb0, 0xe6, 0x1c, 0x4a, 0xe8, 0xbe, 0x44, 0x12 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x57, 0xae, 0xf9, 0x5c, 0x0b, 0xf2, 0xa5, + 0xb8, 0xef, 0x16, 0x41, 0xe4, 0xb3, 0x4a, 0x1d }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x1b, 0x72, 0xd4, 0xbd, 0x98, 0xf1, 0x57, 0x3e }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x58, 0xb0, 0xe8, 0x60, 0x38, 0xd0, 0x88, + 0xc0, 0x98, 0x70, 0x28, 0xa0, 0xf8, 0x10, 0x48 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x1b, 0x72, 0xd4, 0xbd, 0x98, 0xf1, 0x57, 0x3e }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x59, 0xb2, 0xeb, 0x64, 0x3d, 0xd6, 0x8f, + 0xc8, 0x91, 0x7a, 0x23, 0xac, 0xf5, 0x1e, 0x47 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x06, 0x6f, 0xc9, 0xa0, 0x85, 0xec, 0x4a, 0x23 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5a, 0xb4, 0xee, 0x68, 0x32, 0xdc, 0x86, + 0xd0, 0x8a, 0x64, 0x3e, 0xb8, 0xe2, 0x0c, 0x56 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x06, 0x6f, 0xc9, 0xa0, 0x85, 0xec, 0x4a, 0x23 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5b, 0xb6, 0xed, 0x6c, 0x37, 0xda, 0x81, + 0xd8, 0x83, 0x6e, 0x35, 0xb4, 0xef, 0x02, 0x59 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x21, 0x48, 0xee, 0x87, 0xbf, 0xd6, 0x70, 0x19 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5c, 0xb8, 0xe4, 0x70, 0x2c, 0xc8, 0x94, + 0xe0, 0xbc, 0x58, 0x04, 0x90, 0xcc, 0x28, 0x74 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x21, 0x48, 0xee, 0x87, 0xbf, 0xd6, 0x70, 0x19 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5d, 0xba, 0xe7, 0x74, 0x29, 0xce, 0x93, + 0xe8, 0xb5, 0x52, 0x0f, 0x9c, 0xc1, 0x26, 0x7b }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x3c, 0x55, 0xf3, 0x9a, 0xa2, 0xcb, 0x6d, 0x04 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5e, 0xbc, 0xe2, 0x78, 0x26, 0xc4, 0x9a, + 0xf0, 0xae, 0x4c, 0x12, 0x88, 0xd6, 0x34, 0x6a }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x3c, 0x55, 0xf3, 0x9a, 0xa2, 0xcb, 0x6d, 0x04 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5f, 0xbe, 0xe1, 0x7c, 0x23, 0xc2, 0x9d, + 0xf8, 0xa7, 0x46, 0x19, 0x84, 0xdb, 0x3a, 0x65 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x61, 0xc2, 0xa3, 0x84, 0xe5, 0x46, 0x27, + 0x08, 0x69, 0xca, 0xab, 0x8c, 0xed, 0x4e, 0x2f }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x57, 0x19, 0xcb, 0x85, 0x72, 0x3c, 0xee, 0xa0 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x62, 0xc4, 0xa6, 0x88, 0xea, 0x4c, 0x2e, + 0x10, 0x72, 0xd4, 0xb6, 0x98, 0xfa, 0x5c, 0x3e }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x57, 0x19, 0xcb, 0x85, 0x72, 0x3c, 0xee, 0xa0 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x63, 0xc6, 0xa5, 0x8c, 0xef, 0x4a, 0x29, + 0x18, 0x7b, 0xde, 0xbd, 0x94, 0xf7, 0x52, 0x31 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x64, 0xc8, 0xac, 0x90, 0xf4, 0x58, 0x3c, + 0x20, 0x44, 0xe8, 0x8c, 0xb0, 0xd4, 0x78, 0x1c }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x65, 0xca, 0xaf, 0x94, 0xf1, 0x5e, 0x3b, + 0x28, 0x4d, 0xe2, 0x87, 0xbc, 0xd9, 0x76, 0x13 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x6d, 0x23, 0xf1, 0xbf, 0x55, 0x1b, 0xc9, 0x87 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x66, 0xcc, 0xaa, 0x98, 0xfe, 0x54, 0x32, + 0x30, 0x56, 0xfc, 0x9a, 0xa8, 0xce, 0x64, 0x02 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x6d, 0x23, 0xf1, 0xbf, 0x55, 0x1b, 0xc9, 0x87 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x67, 0xce, 0xa9, 0x9c, 0xfb, 0x52, 0x35, + 0x38, 0x5f, 0xf6, 0x91, 0xa4, 0xc3, 0x6a, 0x0d }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x3e, 0x70, 0xbf, 0xf1, 0x21, 0x6f, 0xa0, 0xee }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x68, 0xd0, 0xb8, 0xa0, 0xc8, 0x70, 0x18, + 0x40, 0x28, 0x90, 0xf8, 0xe0, 0x88, 0x30, 0x58 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x3e, 0x70, 0xbf, 0xf1, 0x21, 0x6f, 0xa0, 0xee }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x23, 0x6d, 0xa2, 0xec, 0x3c, 0x72, 0xbd, 0xf3 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6a, 0xd4, 0xbe, 0xa8, 0xc2, 0x7c, 0x16, + 0x50, 0x3a, 0x84, 0xee, 0xf8, 0x92, 0x2c, 0x46 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x23, 0x6d, 0xa2, 0xec, 0x3c, 0x72, 0xbd, 0xf3 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6b, 0xd6, 0xbd, 0xac, 0xc7, 0x7a, 0x11, + 0x58, 0x33, 0x8e, 0xe5, 0xf4, 0x9f, 0x22, 0x49 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x04, 0x4a, 0x85, 0xcb, 0x06, 0x48, 0x87, 0xc9 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6c, 0xd8, 0xb4, 0xb0, 0xdc, 0x68, 0x04, + 0x60, 0x0c, 0xb8, 0xd4, 0xd0, 0xbc, 0x08, 0x64 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x04, 0x4a, 0x85, 0xcb, 0x06, 0x48, 0x87, 0xc9 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6d, 0xda, 0xb7, 0xb4, 0xd9, 0x6e, 0x03, + 0x68, 0x05, 0xb2, 0xdf, 0xdc, 0xb1, 0x06, 0x6b }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x19, 0x57, 0x98, 0xd6, 0x1b, 0x55, 0x9a, 0xd4 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6e, 0xdc, 0xb2, 0xb8, 0xd6, 0x64, 0x0a, + 0x70, 0x1e, 0xac, 0xc2, 0xc8, 0xa6, 0x14, 0x7a }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x19, 0x57, 0x98, 0xd6, 0x1b, 0x55, 0x9a, 0xd4 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6f, 0xde, 0xb1, 0xbc, 0xd3, 0x62, 0x0d, + 0x78, 0x17, 0xa6, 0xc9, 0xc4, 0xab, 0x1a, 0x75 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x71, 0xe2, 0x93, 0xc4, 0xb5, 0x26, 0x57, + 0x88, 0xf9, 0x6a, 0x1b, 0x4c, 0x3d, 0xae, 0xdf }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xbf, 0xec, 0x19, 0x4a, 0xee, 0xbd, 0x48, 0x1b }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x72, 0xe4, 0x96, 0xc8, 0xba, 0x2c, 0x5e, + 0x90, 0xe2, 0x74, 0x06, 0x58, 0x2a, 0xbc, 0xce }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xbf, 0xec, 0x19, 0x4a, 0xee, 0xbd, 0x48, 0x1b }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x73, 0xe6, 0x95, 0xcc, 0xbf, 0x2a, 0x59, + 0x98, 0xeb, 0x7e, 0x0d, 0x54, 0x27, 0xb2, 0xc1 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x75, 0xea, 0x9f, 0xd4, 0xa1, 0x3e, 0x4b, + 0xa8, 0xdd, 0x42, 0x37, 0x7c, 0x09, 0x96, 0xe3 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x85, 0xd6, 0x23, 0x70, 0xc9, 0x9a, 0x6f, 0x3c }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x76, 0xec, 0x9a, 0xd8, 0xae, 0x34, 0x42, + 0xb0, 0xc6, 0x5c, 0x2a, 0x68, 0x1e, 0x84, 0xf2 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x85, 0xd6, 0x23, 0x70, 0xc9, 0x9a, 0x6f, 0x3c }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x77, 0xee, 0x99, 0xdc, 0xab, 0x32, 0x45, + 0xb8, 0xcf, 0x56, 0x21, 0x64, 0x13, 0x8a, 0xfd }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xd6, 0x85, 0x6d, 0x3e, 0xbd, 0xee, 0x06, 0x55 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x78, 0xf0, 0x88, 0xe0, 0x98, 0x10, 0x68, + 0xc0, 0xb8, 0x30, 0x48, 0x20, 0x58, 0xd0, 0xa8 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xd6, 0x85, 0x6d, 0x3e, 0xbd, 0xee, 0x06, 0x55 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x79, 0xf2, 0x8b, 0xe4, 0x9d, 0x16, 0x6f, + 0xc8, 0xb1, 0x3a, 0x43, 0x2c, 0x55, 0xde, 0xa7 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xcb, 0x98, 0x70, 0x23, 0xa0, 0xf3, 0x1b, 0x48 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7a, 0xf4, 0x8e, 0xe8, 0x92, 0x1c, 0x66, + 0xd0, 0xaa, 0x24, 0x5e, 0x38, 0x42, 0xcc, 0xb6 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xcb, 0x98, 0x70, 0x23, 0xa0, 0xf3, 0x1b, 0x48 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7b, 0xf6, 0x8d, 0xec, 0x97, 0x1a, 0x61, + 0xd8, 0xa3, 0x2e, 0x55, 0x34, 0x4f, 0xc2, 0xb9 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xec, 0xbf, 0x57, 0x04, 0x9a, 0xc9, 0x21, 0x72 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7c, 0xf8, 0x84, 0xf0, 0x8c, 0x08, 0x74, + 0xe0, 0x9c, 0x18, 0x64, 0x10, 0x6c, 0xe8, 0x94 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xec, 0xbf, 0x57, 0x04, 0x9a, 0xc9, 0x21, 0x72 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7d, 0xfa, 0x87, 0xf4, 0x89, 0x0e, 0x73, + 0xe8, 0x95, 0x12, 0x6f, 0x1c, 0x61, 0xe6, 0x9b }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xf1, 0xa2, 0x4a, 0x19, 0x87, 0xd4, 0x3c, 0x6f }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7e, 0xfc, 0x82, 0xf8, 0x86, 0x04, 0x7a, + 0xf0, 0x8e, 0x0c, 0x72, 0x08, 0x76, 0xf4, 0x8a }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xf1, 0xa2, 0x4a, 0x19, 0x87, 0xd4, 0x3c, 0x6f }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7f, 0xfe, 0x81, 0xfc, 0x83, 0x02, 0x7d, + 0xf8, 0x87, 0x06, 0x79, 0x04, 0x7b, 0xfa, 0x85 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x0e, 0xe6, 0xc3, 0x2b, 0x89, 0x61, 0x44, 0xac }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x82, 0x04, 0x86, 0x08, 0x8a, 0x0c, 0x8e, + 0x10, 0x92, 0x14, 0x96, 0x18, 0x9a, 0x1c, 0x9e }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x0e, 0xe6, 0xc3, 0x2b, 0x89, 0x61, 0x44, 0xac }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x83, 0x06, 0x85, 0x0c, 0x8f, 0x0a, 0x89, + 0x18, 0x9b, 0x1e, 0x9d, 0x14, 0x97, 0x12, 0x91 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x29, 0xc1, 0xe4, 0x0c, 0xb3, 0x5b, 0x7e, 0x96 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x84, 0x08, 0x8c, 0x10, 0x94, 0x18, 0x9c, + 0x20, 0xa4, 0x28, 0xac, 0x30, 0xb4, 0x38, 0xbc }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x29, 0xc1, 0xe4, 0x0c, 0xb3, 0x5b, 0x7e, 0x96 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x85, 0x0a, 0x8f, 0x14, 0x91, 0x1e, 0x9b, + 0x28, 0xad, 0x22, 0xa7, 0x3c, 0xb9, 0x36, 0xb3 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x34, 0xdc, 0xf9, 0x11, 0xae, 0x46, 0x63, 0x8b }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x86, 0x0c, 0x8a, 0x18, 0x9e, 0x14, 0x92, + 0x30, 0xb6, 0x3c, 0xba, 0x28, 0xae, 0x24, 0xa2 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x34, 0xdc, 0xf9, 0x11, 0xae, 0x46, 0x63, 0x8b }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x87, 0x0e, 0x89, 0x1c, 0x9b, 0x12, 0x95, + 0x38, 0xbf, 0x36, 0xb1, 0x24, 0xa3, 0x2a, 0xad }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x67, 0x8f, 0xb7, 0x5f, 0xda, 0x32, 0x0a, 0xe2 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x88, 0x10, 0x98, 0x20, 0xa8, 0x30, 0xb8, + 0x40, 0xc8, 0x50, 0xd8, 0x60, 0xe8, 0x70, 0xf8 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x67, 0x8f, 0xb7, 0x5f, 0xda, 0x32, 0x0a, 0xe2 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x89, 0x12, 0x9b, 0x24, 0xad, 0x36, 0xbf, + 0x48, 0xc1, 0x5a, 0xd3, 0x6c, 0xe5, 0x7e, 0xf7 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x7a, 0x92, 0xaa, 0x42, 0xc7, 0x2f, 0x17, 0xff }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8a, 0x14, 0x9e, 0x28, 0xa2, 0x3c, 0xb6, + 0x50, 0xda, 0x44, 0xce, 0x78, 0xf2, 0x6c, 0xe6 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x7a, 0x92, 0xaa, 0x42, 0xc7, 0x2f, 0x17, 0xff }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8b, 0x16, 0x9d, 0x2c, 0xa7, 0x3a, 0xb1, + 0x58, 0xd3, 0x4e, 0xc5, 0x74, 0xff, 0x62, 0xe9 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x5d, 0xb5, 0x8d, 0x65, 0xfd, 0x15, 0x2d, 0xc5 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8c, 0x18, 0x94, 0x30, 0xbc, 0x28, 0xa4, + 0x60, 0xec, 0x78, 0xf4, 0x50, 0xdc, 0x48, 0xc4 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x5d, 0xb5, 0x8d, 0x65, 0xfd, 0x15, 0x2d, 0xc5 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8d, 0x1a, 0x97, 0x34, 0xb9, 0x2e, 0xa3, + 0x68, 0xe5, 0x72, 0xff, 0x5c, 0xd1, 0x46, 0xcb }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8e, 0x1c, 0x92, 0x38, 0xb6, 0x24, 0xaa, + 0x70, 0xfe, 0x6c, 0xe2, 0x48, 0xc6, 0x54, 0xda }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8f, 0x1e, 0x91, 0x3c, 0xb3, 0x22, 0xad, + 0x78, 0xf7, 0x66, 0xe9, 0x44, 0xcb, 0x5a, 0xd5 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x91, 0x22, 0xb3, 0x44, 0xd5, 0x66, 0xf7, + 0x88, 0x19, 0xaa, 0x3b, 0xcc, 0x5d, 0xee, 0x7f }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xe6, 0x13, 0x11, 0xe4, 0x15, 0xe0, 0xe2, 0x17 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x92, 0x24, 0xb6, 0x48, 0xda, 0x6c, 0xfe, + 0x90, 0x02, 0xb4, 0x26, 0xd8, 0x4a, 0xfc, 0x6e }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xe6, 0x13, 0x11, 0xe4, 0x15, 0xe0, 0xe2, 0x17 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x93, 0x26, 0xb5, 0x4c, 0xdf, 0x6a, 0xf9, + 0x98, 0x0b, 0xbe, 0x2d, 0xd4, 0x47, 0xf2, 0x61 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xc1, 0x34, 0x36, 0xc3, 0x2f, 0xda, 0xd8, 0x2d }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x94, 0x28, 0xbc, 0x50, 0xc4, 0x78, 0xec, + 0xa0, 0x34, 0x88, 0x1c, 0xf0, 0x64, 0xd8, 0x4c }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xc1, 0x34, 0x36, 0xc3, 0x2f, 0xda, 0xd8, 0x2d }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x95, 0x2a, 0xbf, 0x54, 0xc1, 0x7e, 0xeb, + 0xa8, 0x3d, 0x82, 0x17, 0xfc, 0x69, 0xd6, 0x43 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xdc, 0x29, 0x2b, 0xde, 0x32, 0xc7, 0xc5, 0x30 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x96, 0x2c, 0xba, 0x58, 0xce, 0x74, 0xe2, + 0xb0, 0x26, 0x9c, 0x0a, 0xe8, 0x7e, 0xc4, 0x52 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xdc, 0x29, 0x2b, 0xde, 0x32, 0xc7, 0xc5, 0x30 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x97, 0x2e, 0xb9, 0x5c, 0xcb, 0x72, 0xe5, + 0xb8, 0x2f, 0x96, 0x01, 0xe4, 0x73, 0xca, 0x5d }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x8f, 0x7a, 0x65, 0x90, 0x46, 0xb3, 0xac, 0x59 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x98, 0x30, 0xa8, 0x60, 0xf8, 0x50, 0xc8, + 0xc0, 0x58, 0xf0, 0x68, 0xa0, 0x38, 0x90, 0x08 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x8f, 0x7a, 0x65, 0x90, 0x46, 0xb3, 0xac, 0x59 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x99, 0x32, 0xab, 0x64, 0xfd, 0x56, 0xcf, + 0xc8, 0x51, 0xfa, 0x63, 0xac, 0x35, 0x9e, 0x07 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x92, 0x67, 0x78, 0x8d, 0x5b, 0xae, 0xb1, 0x44 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9a, 0x34, 0xae, 0x68, 0xf2, 0x5c, 0xc6, + 0xd0, 0x4a, 0xe4, 0x7e, 0xb8, 0x22, 0x8c, 0x16 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x92, 0x67, 0x78, 0x8d, 0x5b, 0xae, 0xb1, 0x44 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9b, 0x36, 0xad, 0x6c, 0xf7, 0x5a, 0xc1, + 0xd8, 0x43, 0xee, 0x75, 0xb4, 0x2f, 0x82, 0x19 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xb5, 0x40, 0x5f, 0xaa, 0x61, 0x94, 0x8b, 0x7e }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xb5, 0x40, 0x5f, 0xaa, 0x61, 0x94, 0x8b, 0x7e }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9d, 0x3a, 0xa7, 0x74, 0xe9, 0x4e, 0xd3, + 0xe8, 0x75, 0xd2, 0x4f, 0x9c, 0x01, 0xa6, 0x3b }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9e, 0x3c, 0xa2, 0x78, 0xe6, 0x44, 0xda, + 0xf0, 0x6e, 0xcc, 0x52, 0x88, 0x16, 0xb4, 0x2a }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9f, 0x3e, 0xa1, 0x7c, 0xe3, 0x42, 0xdd, + 0xf8, 0x67, 0xc6, 0x59, 0x84, 0x1b, 0xba, 0x25 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa1, 0x42, 0xe3, 0x84, 0x25, 0xc6, 0x67, + 0x08, 0xa9, 0x4a, 0xeb, 0x8c, 0x2d, 0xce, 0x6f }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xc3, 0x11, 0x7a, 0xa8, 0xac, 0x7e, 0x15, 0xc7 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa2, 0x44, 0xe6, 0x88, 0x2a, 0xcc, 0x6e, + 0x10, 0xb2, 0x54, 0xf6, 0x98, 0x3a, 0xdc, 0x7e }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xc3, 0x11, 0x7a, 0xa8, 0xac, 0x7e, 0x15, 0xc7 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa3, 0x46, 0xe5, 0x8c, 0x2f, 0xca, 0x69, + 0x18, 0xbb, 0x5e, 0xfd, 0x94, 0x37, 0xd2, 0x71 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xe4, 0x36, 0x5d, 0x8f, 0x96, 0x44, 0x2f, 0xfd }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa4, 0x48, 0xec, 0x90, 0x34, 0xd8, 0x7c, + 0x20, 0x84, 0x68, 0xcc, 0xb0, 0x14, 0xf8, 0x5c }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xe4, 0x36, 0x5d, 0x8f, 0x96, 0x44, 0x2f, 0xfd }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa5, 0x4a, 0xef, 0x94, 0x31, 0xde, 0x7b, + 0x28, 0x8d, 0x62, 0xc7, 0xbc, 0x19, 0xf6, 0x53 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xf9, 0x2b, 0x40, 0x92, 0x8b, 0x59, 0x32, 0xe0 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xf9, 0x2b, 0x40, 0x92, 0x8b, 0x59, 0x32, 0xe0 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa7, 0x4e, 0xe9, 0x9c, 0x3b, 0xd2, 0x75, + 0x38, 0x9f, 0x76, 0xd1, 0xa4, 0x03, 0xea, 0x4d }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xaa, 0x78, 0x0e, 0xdc, 0xff, 0x2d, 0x5b, 0x89 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa8, 0x50, 0xf8, 0xa0, 0x08, 0xf0, 0x58, + 0x40, 0xe8, 0x10, 0xb8, 0xe0, 0x48, 0xb0, 0x18 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xaa, 0x78, 0x0e, 0xdc, 0xff, 0x2d, 0x5b, 0x89 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa9, 0x52, 0xfb, 0xa4, 0x0d, 0xf6, 0x5f, + 0x48, 0xe1, 0x1a, 0xb3, 0xec, 0x45, 0xbe, 0x17 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xb7, 0x65, 0x13, 0xc1, 0xe2, 0x30, 0x46, 0x94 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xaa, 0x54, 0xfe, 0xa8, 0x02, 0xfc, 0x56, + 0x50, 0xfa, 0x04, 0xae, 0xf8, 0x52, 0xac, 0x06 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xb7, 0x65, 0x13, 0xc1, 0xe2, 0x30, 0x46, 0x94 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xab, 0x56, 0xfd, 0xac, 0x07, 0xfa, 0x51, + 0x58, 0xf3, 0x0e, 0xa5, 0xf4, 0x5f, 0xa2, 0x09 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xac, 0x58, 0xf4, 0xb0, 0x1c, 0xe8, 0x44, + 0x60, 0xcc, 0x38, 0x94, 0xd0, 0x7c, 0x88, 0x24 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xad, 0x5a, 0xf7, 0xb4, 0x19, 0xee, 0x43, + 0x68, 0xc5, 0x32, 0x9f, 0xdc, 0x71, 0x86, 0x2b }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x8d, 0x5f, 0x29, 0xfb, 0xc5, 0x17, 0x61, 0xb3 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xae, 0x5c, 0xf2, 0xb8, 0x16, 0xe4, 0x4a, + 0x70, 0xde, 0x2c, 0x82, 0xc8, 0x66, 0x94, 0x3a }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x8d, 0x5f, 0x29, 0xfb, 0xc5, 0x17, 0x61, 0xb3 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xaf, 0x5e, 0xf1, 0xbc, 0x13, 0xe2, 0x4d, + 0x78, 0xd7, 0x26, 0x89, 0xc4, 0x6b, 0x9a, 0x35 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb1, 0x62, 0xd3, 0xc4, 0x75, 0xa6, 0x17, + 0x88, 0x39, 0xea, 0x5b, 0x4c, 0xfd, 0x2e, 0x9f }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb2, 0x64, 0xd6, 0xc8, 0x7a, 0xac, 0x1e, + 0x90, 0x22, 0xf4, 0x46, 0x58, 0xea, 0x3c, 0x8e }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb3, 0x66, 0xd5, 0xcc, 0x7f, 0xaa, 0x19, + 0x98, 0x2b, 0xfe, 0x4d, 0x54, 0xe7, 0x32, 0x81 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x0c, 0xc3, 0x8f, 0x40, 0x0a, 0xc5, 0x89, 0x46 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb4, 0x68, 0xdc, 0xd0, 0x64, 0xb8, 0x0c, + 0xa0, 0x14, 0xc8, 0x7c, 0x70, 0xc4, 0x18, 0xac }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x0c, 0xc3, 0x8f, 0x40, 0x0a, 0xc5, 0x89, 0x46 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb5, 0x6a, 0xdf, 0xd4, 0x61, 0xbe, 0x0b, + 0xa8, 0x1d, 0xc2, 0x77, 0x7c, 0xc9, 0x16, 0xa3 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x11, 0xde, 0x92, 0x5d, 0x17, 0xd8, 0x94, 0x5b }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb6, 0x6c, 0xda, 0xd8, 0x6e, 0xb4, 0x02, + 0xb0, 0x06, 0xdc, 0x6a, 0x68, 0xde, 0x04, 0xb2 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x11, 0xde, 0x92, 0x5d, 0x17, 0xd8, 0x94, 0x5b }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb7, 0x6e, 0xd9, 0xdc, 0x6b, 0xb2, 0x05, + 0xb8, 0x0f, 0xd6, 0x61, 0x64, 0xd3, 0x0a, 0xbd }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x42, 0x8d, 0xdc, 0x13, 0x63, 0xac, 0xfd, 0x32 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb8, 0x70, 0xc8, 0xe0, 0x58, 0x90, 0x28, + 0xc0, 0x78, 0xb0, 0x08, 0x20, 0x98, 0x50, 0xe8 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x42, 0x8d, 0xdc, 0x13, 0x63, 0xac, 0xfd, 0x32 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb9, 0x72, 0xcb, 0xe4, 0x5d, 0x96, 0x2f, + 0xc8, 0x71, 0xba, 0x03, 0x2c, 0x95, 0x5e, 0xe7 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x5f, 0x90, 0xc1, 0x0e, 0x7e, 0xb1, 0xe0, 0x2f }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xba, 0x74, 0xce, 0xe8, 0x52, 0x9c, 0x26, + 0xd0, 0x6a, 0xa4, 0x1e, 0x38, 0x82, 0x4c, 0xf6 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x5f, 0x90, 0xc1, 0x0e, 0x7e, 0xb1, 0xe0, 0x2f }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbc, 0x78, 0xc4, 0xf0, 0x4c, 0x88, 0x34, + 0xe0, 0x5c, 0x98, 0x24, 0x10, 0xac, 0x68, 0xd4 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbd, 0x7a, 0xc7, 0xf4, 0x49, 0x8e, 0x33, + 0xe8, 0x55, 0x92, 0x2f, 0x1c, 0xa1, 0x66, 0xdb }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x65, 0xaa, 0xfb, 0x34, 0x59, 0x96, 0xc7, 0x08 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbe, 0x7c, 0xc2, 0xf8, 0x46, 0x84, 0x3a, + 0xf0, 0x4e, 0x8c, 0x32, 0x08, 0xb6, 0x74, 0xca }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x65, 0xaa, 0xfb, 0x34, 0x59, 0x96, 0xc7, 0x08 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbf, 0x7e, 0xc1, 0xfc, 0x43, 0x82, 0x3d, + 0xf8, 0x47, 0x86, 0x39, 0x04, 0xbb, 0x7a, 0xc5 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc1, 0x82, 0x43, 0x04, 0xc5, 0x86, 0x47, + 0x08, 0xc9, 0x8a, 0x4b, 0x0c, 0xcd, 0x8e, 0x4f }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x89, 0x15, 0xac, 0x30, 0xc3, 0x5f, 0xe6, 0x7a }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc2, 0x84, 0x46, 0x08, 0xca, 0x8c, 0x4e, + 0x10, 0xd2, 0x94, 0x56, 0x18, 0xda, 0x9c, 0x5e }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x89, 0x15, 0xac, 0x30, 0xc3, 0x5f, 0xe6, 0x7a }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc3, 0x86, 0x45, 0x0c, 0xcf, 0x8a, 0x49, + 0x18, 0xdb, 0x9e, 0x5d, 0x14, 0xd7, 0x92, 0x51 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xae, 0x32, 0x8b, 0x17, 0xf9, 0x65, 0xdc, 0x40 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc4, 0x88, 0x4c, 0x10, 0xd4, 0x98, 0x5c, + 0x20, 0xe4, 0xa8, 0x6c, 0x30, 0xf4, 0xb8, 0x7c }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xae, 0x32, 0x8b, 0x17, 0xf9, 0x65, 0xdc, 0x40 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc5, 0x8a, 0x4f, 0x14, 0xd1, 0x9e, 0x5b, + 0x28, 0xed, 0xa2, 0x67, 0x3c, 0xf9, 0xb6, 0x73 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xb3, 0x2f, 0x96, 0x0a, 0xe4, 0x78, 0xc1, 0x5d }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc6, 0x8c, 0x4a, 0x18, 0xde, 0x94, 0x52, + 0x30, 0xf6, 0xbc, 0x7a, 0x28, 0xee, 0xa4, 0x62 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xb3, 0x2f, 0x96, 0x0a, 0xe4, 0x78, 0xc1, 0x5d }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc7, 0x8e, 0x49, 0x1c, 0xdb, 0x92, 0x55, + 0x38, 0xff, 0xb6, 0x71, 0x24, 0xe3, 0xaa, 0x6d }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc8, 0x90, 0x58, 0x20, 0xe8, 0xb0, 0x78, + 0x40, 0x88, 0xd0, 0x18, 0x60, 0xa8, 0xf0, 0x38 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc9, 0x92, 0x5b, 0x24, 0xed, 0xb6, 0x7f, + 0x48, 0x81, 0xda, 0x13, 0x6c, 0xa5, 0xfe, 0x37 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xfd, 0x61, 0xc5, 0x59, 0x8d, 0x11, 0xb5, 0x29 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xca, 0x94, 0x5e, 0x28, 0xe2, 0xbc, 0x76, + 0x50, 0x9a, 0xc4, 0x0e, 0x78, 0xb2, 0xec, 0x26 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xfd, 0x61, 0xc5, 0x59, 0x8d, 0x11, 0xb5, 0x29 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcb, 0x96, 0x5d, 0x2c, 0xe7, 0xba, 0x71, + 0x58, 0x93, 0xce, 0x05, 0x74, 0xbf, 0xe2, 0x29 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xda, 0x46, 0xe2, 0x7e, 0xb7, 0x2b, 0x8f, 0x13 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcc, 0x98, 0x54, 0x30, 0xfc, 0xa8, 0x64, + 0x60, 0xac, 0xf8, 0x34, 0x50, 0x9c, 0xc8, 0x04 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xda, 0x46, 0xe2, 0x7e, 0xb7, 0x2b, 0x8f, 0x13 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcd, 0x9a, 0x57, 0x34, 0xf9, 0xae, 0x63, + 0x68, 0xa5, 0xf2, 0x3f, 0x5c, 0x91, 0xc6, 0x0b }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xc7, 0x5b, 0xff, 0x63, 0xaa, 0x36, 0x92, 0x0e }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xce, 0x9c, 0x52, 0x38, 0xf6, 0xa4, 0x6a, + 0x70, 0xbe, 0xec, 0x22, 0x48, 0x86, 0xd4, 0x1a }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xc7, 0x5b, 0xff, 0x63, 0xaa, 0x36, 0x92, 0x0e }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd1, 0xa2, 0x73, 0x44, 0x95, 0xe6, 0x37, + 0x88, 0x59, 0x2a, 0xfb, 0xcc, 0x1d, 0x6e, 0xbf }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x61, 0xe0, 0x7e, 0xff, 0x5f, 0xde, 0x40, 0xc1 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x61, 0xe0, 0x7e, 0xff, 0x5f, 0xde, 0x40, 0xc1 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd3, 0xa6, 0x75, 0x4c, 0x9f, 0xea, 0x39, + 0x98, 0x4b, 0x3e, 0xed, 0xd4, 0x07, 0x72, 0xa1 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x46, 0xc7, 0x59, 0xd8, 0x65, 0xe4, 0x7a, 0xfb }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd4, 0xa8, 0x7c, 0x50, 0x84, 0xf8, 0x2c, + 0xa0, 0x74, 0x08, 0xdc, 0xf0, 0x24, 0x58, 0x8c }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x46, 0xc7, 0x59, 0xd8, 0x65, 0xe4, 0x7a, 0xfb }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd5, 0xaa, 0x7f, 0x54, 0x81, 0xfe, 0x2b, + 0xa8, 0x7d, 0x02, 0xd7, 0xfc, 0x29, 0x56, 0x83 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x5b, 0xda, 0x44, 0xc5, 0x78, 0xf9, 0x67, 0xe6 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd6, 0xac, 0x7a, 0x58, 0x8e, 0xf4, 0x22, + 0xb0, 0x66, 0x1c, 0xca, 0xe8, 0x3e, 0x44, 0x92 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x5b, 0xda, 0x44, 0xc5, 0x78, 0xf9, 0x67, 0xe6 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd7, 0xae, 0x79, 0x5c, 0x8b, 0xf2, 0x25, + 0xb8, 0x6f, 0x16, 0xc1, 0xe4, 0x33, 0x4a, 0x9d }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd8, 0xb0, 0x68, 0x60, 0xb8, 0xd0, 0x08, + 0xc0, 0x18, 0x70, 0xa8, 0xa0, 0x78, 0x10, 0xc8 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd9, 0xb2, 0x6b, 0x64, 0xbd, 0xd6, 0x0f, + 0xc8, 0x11, 0x7a, 0xa3, 0xac, 0x75, 0x1e, 0xc7 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x15, 0x94, 0x17, 0x96, 0x11, 0x90, 0x13, 0x92 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xda, 0xb4, 0x6e, 0x68, 0xb2, 0xdc, 0x06, + 0xd0, 0x0a, 0x64, 0xbe, 0xb8, 0x62, 0x0c, 0xd6 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x15, 0x94, 0x17, 0x96, 0x11, 0x90, 0x13, 0x92 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdb, 0xb6, 0x6d, 0x6c, 0xb7, 0xda, 0x01, + 0xd8, 0x03, 0x6e, 0xb5, 0xb4, 0x6f, 0x02, 0xd9 }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x32, 0xb3, 0x30, 0xb1, 0x2b, 0xaa, 0x29, 0xa8 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdc, 0xb8, 0x64, 0x70, 0xac, 0xc8, 0x14, + 0xe0, 0x3c, 0x58, 0x84, 0x90, 0x4c, 0x28, 0xf4 }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x32, 0xb3, 0x30, 0xb1, 0x2b, 0xaa, 0x29, 0xa8 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdd, 0xba, 0x67, 0x74, 0xa9, 0xce, 0x13, + 0xe8, 0x35, 0x52, 0x8f, 0x9c, 0x41, 0x26, 0xfb }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x2f, 0xae, 0x2d, 0xac, 0x36, 0xb7, 0x34, 0xb5 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xde, 0xbc, 0x62, 0x78, 0xa6, 0xc4, 0x1a, + 0xf0, 0x2e, 0x4c, 0x92, 0x88, 0x56, 0x34, 0xea }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x2f, 0xae, 0x2d, 0xac, 0x36, 0xb7, 0x34, 0xb5 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdf, 0xbe, 0x61, 0x7c, 0xa3, 0xc2, 0x1d, + 0xf8, 0x27, 0x46, 0x99, 0x84, 0x5b, 0x3a, 0xe5 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe1, 0xc2, 0x23, 0x84, 0x65, 0x46, 0xa7, + 0x08, 0xe9, 0xca, 0x2b, 0x8c, 0x6d, 0x4e, 0xaf }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x44, 0xe2, 0x15, 0xb3, 0xe6, 0x40, 0xb7, 0x11 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe2, 0xc4, 0x26, 0x88, 0x6a, 0x4c, 0xae, + 0x10, 0xf2, 0xd4, 0x36, 0x98, 0x7a, 0x5c, 0xbe }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x44, 0xe2, 0x15, 0xb3, 0xe6, 0x40, 0xb7, 0x11 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe3, 0xc6, 0x25, 0x8c, 0x6f, 0x4a, 0xa9, + 0x18, 0xfb, 0xde, 0x3d, 0x94, 0x77, 0x52, 0xb1 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x63, 0xc5, 0x32, 0x94, 0xdc, 0x7a, 0x8d, 0x2b }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe4, 0xc8, 0x2c, 0x90, 0x74, 0x58, 0xbc, + 0x20, 0xc4, 0xe8, 0x0c, 0xb0, 0x54, 0x78, 0x9c }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x63, 0xc5, 0x32, 0x94, 0xdc, 0x7a, 0x8d, 0x2b }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe5, 0xca, 0x2f, 0x94, 0x71, 0x5e, 0xbb, + 0x28, 0xcd, 0xe2, 0x07, 0xbc, 0x59, 0x76, 0x93 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x7e, 0xd8, 0x2f, 0x89, 0xc1, 0x67, 0x90, 0x36 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe6, 0xcc, 0x2a, 0x98, 0x7e, 0x54, 0xb2, + 0x30, 0xd6, 0xfc, 0x1a, 0xa8, 0x4e, 0x64, 0x82 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x7e, 0xd8, 0x2f, 0x89, 0xc1, 0x67, 0x90, 0x36 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe7, 0xce, 0x29, 0x9c, 0x7b, 0x52, 0xb5, + 0x38, 0xdf, 0xf6, 0x11, 0xa4, 0x43, 0x6a, 0x8d }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x2d, 0x8b, 0x61, 0xc7, 0xb5, 0x13, 0xf9, 0x5f }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x2d, 0x8b, 0x61, 0xc7, 0xb5, 0x13, 0xf9, 0x5f }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe9, 0xd2, 0x3b, 0xa4, 0x4d, 0x76, 0x9f, + 0x48, 0xa1, 0x9a, 0x73, 0xec, 0x05, 0x3e, 0xd7 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xea, 0xd4, 0x3e, 0xa8, 0x42, 0x7c, 0x96, + 0x50, 0xba, 0x84, 0x6e, 0xf8, 0x12, 0x2c, 0xc6 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xeb, 0xd6, 0x3d, 0xac, 0x47, 0x7a, 0x91, + 0x58, 0xb3, 0x8e, 0x65, 0xf4, 0x1f, 0x22, 0xc9 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x17, 0xb1, 0x5b, 0xfd, 0x92, 0x34, 0xde, 0x78 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xec, 0xd8, 0x34, 0xb0, 0x5c, 0x68, 0x84, + 0x60, 0x8c, 0xb8, 0x54, 0xd0, 0x3c, 0x08, 0xe4 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x17, 0xb1, 0x5b, 0xfd, 0x92, 0x34, 0xde, 0x78 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xed, 0xda, 0x37, 0xb4, 0x59, 0x6e, 0x83, + 0x68, 0x85, 0xb2, 0x5f, 0xdc, 0x31, 0x06, 0xeb }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x0a, 0xac, 0x46, 0xe0, 0x8f, 0x29, 0xc3, 0x65 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xee, 0xdc, 0x32, 0xb8, 0x56, 0x64, 0x8a, + 0x70, 0x9e, 0xac, 0x42, 0xc8, 0x26, 0x14, 0xfa }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x0a, 0xac, 0x46, 0xe0, 0x8f, 0x29, 0xc3, 0x65 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xef, 0xde, 0x31, 0xbc, 0x53, 0x62, 0x8d, + 0x78, 0x97, 0xa6, 0x49, 0xc4, 0x2b, 0x1a, 0xf5 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf1, 0xe2, 0x13, 0xc4, 0x35, 0x26, 0xd7, + 0x88, 0x79, 0x6a, 0x9b, 0x4c, 0xbd, 0xae, 0x5f }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xac, 0x17, 0xc7, 0x7c, 0x7a, 0xc1, 0x11, 0xaa }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf2, 0xe4, 0x16, 0xc8, 0x3a, 0x2c, 0xde, + 0x90, 0x62, 0x74, 0x86, 0x58, 0xaa, 0xbc, 0x4e }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xac, 0x17, 0xc7, 0x7c, 0x7a, 0xc1, 0x11, 0xaa }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf3, 0xe6, 0x15, 0xcc, 0x3f, 0x2a, 0xd9, + 0x98, 0x6b, 0x7e, 0x8d, 0x54, 0xa7, 0xb2, 0x41 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x8b, 0x30, 0xe0, 0x5b, 0x40, 0xfb, 0x2b, 0x90 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf4, 0xe8, 0x1c, 0xd0, 0x24, 0x38, 0xcc, + 0xa0, 0x54, 0x48, 0xbc, 0x70, 0x84, 0x98, 0x6c }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x8b, 0x30, 0xe0, 0x5b, 0x40, 0xfb, 0x2b, 0x90 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x96, 0x2d, 0xfd, 0x46, 0x5d, 0xe6, 0x36, 0x8d }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf6, 0xec, 0x1a, 0xd8, 0x2e, 0x34, 0xc2, + 0xb0, 0x46, 0x5c, 0xaa, 0x68, 0x9e, 0x84, 0x72 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x96, 0x2d, 0xfd, 0x46, 0x5d, 0xe6, 0x36, 0x8d }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf7, 0xee, 0x19, 0xdc, 0x2b, 0x32, 0xc5, + 0xb8, 0x4f, 0x56, 0xa1, 0x64, 0x93, 0x8a, 0x7d }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xc5, 0x7e, 0xb3, 0x08, 0x29, 0x92, 0x5f, 0xe4 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf8, 0xf0, 0x08, 0xe0, 0x18, 0x10, 0xe8, + 0xc0, 0x38, 0x30, 0xc8, 0x20, 0xd8, 0xd0, 0x28 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xc5, 0x7e, 0xb3, 0x08, 0x29, 0x92, 0x5f, 0xe4 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf9, 0xf2, 0x0b, 0xe4, 0x1d, 0x16, 0xef, + 0xc8, 0x31, 0x3a, 0xc3, 0x2c, 0xd5, 0xde, 0x27 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfa, 0xf4, 0x0e, 0xe8, 0x12, 0x1c, 0xe6, + 0xd0, 0x2a, 0x24, 0xde, 0x38, 0xc2, 0xcc, 0x36 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfb, 0xf6, 0x0d, 0xec, 0x17, 0x1a, 0xe1, + 0xd8, 0x23, 0x2e, 0xd5, 0x34, 0xcf, 0xc2, 0x39 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xff, 0x44, 0x89, 0x32, 0x0e, 0xb5, 0x78, 0xc3 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfc, 0xf8, 0x04, 0xf0, 0x0c, 0x08, 0xf4, + 0xe0, 0x1c, 0x18, 0xe4, 0x10, 0xec, 0xe8, 0x14 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xff, 0x44, 0x89, 0x32, 0x0e, 0xb5, 0x78, 0xc3 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfd, 0xfa, 0x07, 0xf4, 0x09, 0x0e, 0xf3, + 0xe8, 0x15, 0x12, 0xef, 0x1c, 0xe1, 0xe6, 0x1b }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xe2, 0x59, 0x94, 0x2f, 0x13, 0xa8, 0x65, 0xde }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfe, 0xfc, 0x02, 0xf8, 0x06, 0x04, 0xfa, + 0xf0, 0x0e, 0x0c, 0xf2, 0x08, 0xf6, 0xf4, 0x0a }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xe2, 0x59, 0x94, 0x2f, 0x13, 0xa8, 0x65, 0xde }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xff, 0xfe, 0x01, 0xfc, 0x03, 0x02, 0xfd, + 0xf8, 0x07, 0x06, 0xf9, 0x04, 0xfb, 0xfa, 0x05 } +}; +/* END CSTYLED */ +#endif /* defined(__aarch64__) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_aarch64_neon_common.h +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_aarch64_neon_common.h @@ -0,0 +1,684 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau. All rights reserved. + */ + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "%[w"#REG"]" +#define VR1_(_1, REG, ...) "%[w"#REG"]" +#define VR2_(_1, _2, REG, ...) "%[w"#REG"]" +#define VR3_(_1, _2, _3, REG, ...) "%[w"#REG"]" +#define VR4_(_1, _2, _3, _4, REG, ...) "%[w"#REG"]" +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "%[w"#REG"]" +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "%[w"#REG"]" +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "%[w"#REG"]" + +/* + * Here we need registers not used otherwise. + * They will be used in unused ASM for the case + * with more registers than required... but GGC + * will still need to make sure the constraints + * are correct, and duplicate constraints are illegal + * ... and we use the "register" number as a name + */ + +#define VR0(r...) VR0_(r) +#define VR1(r...) VR1_(r) +#define VR2(r...) VR2_(r, 36) +#define VR3(r...) VR3_(r, 36, 35) +#define VR4(r...) VR4_(r, 36, 35, 34, 33) +#define VR5(r...) VR5_(r, 36, 35, 34, 33, 32) +#define VR6(r...) VR6_(r, 36, 35, 34, 33, 32, 31) +#define VR7(r...) VR7_(r, 36, 35, 34, 33, 32, 31, 30) + +#define VR(X) "%[w"#X"]" + +#define RVR0_(REG, ...) [w##REG] "w" (w##REG) +#define RVR1_(_1, REG, ...) [w##REG] "w" (w##REG) +#define RVR2_(_1, _2, REG, ...) [w##REG] "w" (w##REG) +#define RVR3_(_1, _2, _3, REG, ...) [w##REG] "w" (w##REG) +#define RVR4_(_1, _2, _3, _4, REG, ...) [w##REG] "w" (w##REG) +#define RVR5_(_1, _2, _3, _4, _5, REG, ...) [w##REG] "w" (w##REG) +#define RVR6_(_1, _2, _3, _4, _5, _6, REG, ...) [w##REG] "w" (w##REG) +#define RVR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) [w##REG] "w" (w##REG) + +#define RVR0(r...) RVR0_(r) +#define RVR1(r...) RVR1_(r) +#define RVR2(r...) RVR2_(r, 36) +#define RVR3(r...) RVR3_(r, 36, 35) +#define RVR4(r...) RVR4_(r, 36, 35, 34, 33) +#define RVR5(r...) RVR5_(r, 36, 35, 34, 33, 32) +#define RVR6(r...) RVR6_(r, 36, 35, 34, 33, 32, 31) +#define RVR7(r...) RVR7_(r, 36, 35, 34, 33, 32, 31, 30) + +#define RVR(X) [w##X] "w" (w##X) + +#define WVR0_(REG, ...) [w##REG] "=w" (w##REG) +#define WVR1_(_1, REG, ...) [w##REG] "=w" (w##REG) +#define WVR2_(_1, _2, REG, ...) [w##REG] "=w" (w##REG) +#define WVR3_(_1, _2, _3, REG, ...) [w##REG] "=w" (w##REG) +#define WVR4_(_1, _2, _3, _4, REG, ...) [w##REG] "=w" (w##REG) +#define WVR5_(_1, _2, _3, _4, _5, REG, ...) [w##REG] "=w" (w##REG) +#define WVR6_(_1, _2, _3, _4, _5, _6, REG, ...) [w##REG] "=w" (w##REG) +#define WVR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) [w##REG] "=w" (w##REG) + +#define WVR0(r...) WVR0_(r) +#define WVR1(r...) WVR1_(r) +#define WVR2(r...) WVR2_(r, 36) +#define WVR3(r...) WVR3_(r, 36, 35) +#define WVR4(r...) WVR4_(r, 36, 35, 34, 33) +#define WVR5(r...) WVR5_(r, 36, 35, 34, 33, 32) +#define WVR6(r...) WVR6_(r, 36, 35, 34, 33, 32, 31) +#define WVR7(r...) WVR7_(r, 36, 35, 34, 33, 32, 31, 30) + +#define WVR(X) [w##X] "=w" (w##X) + +#define UVR0_(REG, ...) [w##REG] "+&w" (w##REG) +#define UVR1_(_1, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR2_(_1, _2, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR3_(_1, _2, _3, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR4_(_1, _2, _3, _4, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR5_(_1, _2, _3, _4, _5, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR6_(_1, _2, _3, _4, _5, _6, REG, ...) [w##REG] "+&w" (w##REG) +#define UVR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) [w##REG] "+&w" (w##REG) + +#define UVR0(r...) UVR0_(r) +#define UVR1(r...) UVR1_(r) +#define UVR2(r...) UVR2_(r, 36) +#define UVR3(r...) UVR3_(r, 36, 35) +#define UVR4(r...) UVR4_(r, 36, 35, 34, 33) +#define UVR5(r...) UVR5_(r, 36, 35, 34, 33, 32) +#define UVR6(r...) UVR6_(r, 36, 35, 34, 33, 32, 31) +#define UVR7(r...) UVR7_(r, 36, 35, 34, 33, 32, 31, 30) + +#define UVR(X) [w##X] "+&w" (w##X) + +#define R_01(REG1, REG2, ...) REG1, REG2 +#define _R_23(_0, _1, REG2, REG3, ...) REG2, REG3 +#define R_23(REG...) _R_23(REG, 1, 2, 3) + +#define ASM_BUG() ASSERT(0) + +#define OFFSET(ptr, val) (((unsigned char *)(ptr))+val) + +extern const uint8_t gf_clmul_mod_lt[4*256][16]; + +#define ELEM_SIZE 16 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "ld1 { v21.4s },%[SRC0]\n" \ + "ld1 { v20.4s },%[SRC1]\n" \ + "ld1 { v19.4s },%[SRC2]\n" \ + "ld1 { v18.4s },%[SRC3]\n" \ + "eor " VR0(r) ".16b," VR0(r) ".16b,v21.16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b,v20.16b\n" \ + "eor " VR2(r) ".16b," VR2(r) ".16b,v19.16b\n" \ + "eor " VR3(r) ".16b," VR3(r) ".16b,v18.16b\n" \ + "ld1 { v21.4s },%[SRC4]\n" \ + "ld1 { v20.4s },%[SRC5]\n" \ + "ld1 { v19.4s },%[SRC6]\n" \ + "ld1 { v18.4s },%[SRC7]\n" \ + "eor " VR4(r) ".16b," VR4(r) ".16b,v21.16b\n" \ + "eor " VR5(r) ".16b," VR5(r) ".16b,v20.16b\n" \ + "eor " VR6(r) ".16b," VR6(r) ".16b,v19.16b\n" \ + "eor " VR7(r) ".16b," VR7(r) ".16b,v18.16b\n" \ + : UVR0(r), UVR1(r), UVR2(r), UVR3(r), \ + UVR4(r), UVR5(r), UVR6(r), UVR7(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16))), \ + [SRC2] "Q" (*(OFFSET(src, 32))), \ + [SRC3] "Q" (*(OFFSET(src, 48))), \ + [SRC4] "Q" (*(OFFSET(src, 64))), \ + [SRC5] "Q" (*(OFFSET(src, 80))), \ + [SRC6] "Q" (*(OFFSET(src, 96))), \ + [SRC7] "Q" (*(OFFSET(src, 112))) \ + : "v18", "v19", "v20", "v21"); \ + break; \ + case 4: \ + __asm( \ + "ld1 { v21.4s },%[SRC0]\n" \ + "ld1 { v20.4s },%[SRC1]\n" \ + "ld1 { v19.4s },%[SRC2]\n" \ + "ld1 { v18.4s },%[SRC3]\n" \ + "eor " VR0(r) ".16b," VR0(r) ".16b,v21.16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b,v20.16b\n" \ + "eor " VR2(r) ".16b," VR2(r) ".16b,v19.16b\n" \ + "eor " VR3(r) ".16b," VR3(r) ".16b,v18.16b\n" \ + : UVR0(r), UVR1(r), UVR2(r), UVR3(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16))), \ + [SRC2] "Q" (*(OFFSET(src, 32))), \ + [SRC3] "Q" (*(OFFSET(src, 48))) \ + : "v18", "v19", "v20", "v21"); \ + break; \ + case 2: \ + __asm( \ + "ld1 { v21.4s },%[SRC0]\n" \ + "ld1 { v20.4s },%[SRC1]\n" \ + "eor " VR0(r) ".16b," VR0(r) ".16b,v21.16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b,v20.16b\n" \ + : UVR0(r), UVR1(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16))) \ + : "v20", "v21"); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "eor " VR4(r) ".16b," VR4(r) ".16b," VR0(r) ".16b\n" \ + "eor " VR5(r) ".16b," VR5(r) ".16b," VR1(r) ".16b\n" \ + "eor " VR6(r) ".16b," VR6(r) ".16b," VR2(r) ".16b\n" \ + "eor " VR7(r) ".16b," VR7(r) ".16b," VR3(r) ".16b\n" \ + : UVR4(r), UVR5(r), UVR6(r), UVR7(r) \ + : RVR0(r), RVR1(r), RVR2(r), RVR3(r)); \ + break; \ + case 4: \ + __asm( \ + "eor " VR2(r) ".16b," VR2(r) ".16b," VR0(r) ".16b\n" \ + "eor " VR3(r) ".16b," VR3(r) ".16b," VR1(r) ".16b\n" \ + : UVR2(r), UVR3(r) \ + : RVR0(r), RVR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define ZERO(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "eor " VR0(r) ".16b," VR0(r) ".16b," VR0(r) ".16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b," VR1(r) ".16b\n" \ + "eor " VR2(r) ".16b," VR2(r) ".16b," VR2(r) ".16b\n" \ + "eor " VR3(r) ".16b," VR3(r) ".16b," VR3(r) ".16b\n" \ + "eor " VR4(r) ".16b," VR4(r) ".16b," VR4(r) ".16b\n" \ + "eor " VR5(r) ".16b," VR5(r) ".16b," VR5(r) ".16b\n" \ + "eor " VR6(r) ".16b," VR6(r) ".16b," VR6(r) ".16b\n" \ + "eor " VR7(r) ".16b," VR7(r) ".16b," VR7(r) ".16b\n" \ + : WVR0(r), WVR1(r), WVR2(r), WVR3(r), \ + WVR4(r), WVR5(r), WVR6(r), WVR7(r)); \ + break; \ + case 4: \ + __asm( \ + "eor " VR0(r) ".16b," VR0(r) ".16b," VR0(r) ".16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b," VR1(r) ".16b\n" \ + "eor " VR2(r) ".16b," VR2(r) ".16b," VR2(r) ".16b\n" \ + "eor " VR3(r) ".16b," VR3(r) ".16b," VR3(r) ".16b\n" \ + : WVR0(r), WVR1(r), WVR2(r), WVR3(r)); \ + break; \ + case 2: \ + __asm( \ + "eor " VR0(r) ".16b," VR0(r) ".16b," VR0(r) ".16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b," VR1(r) ".16b\n" \ + : WVR0(r), WVR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "mov " VR4(r) ".16b," VR0(r) ".16b\n" \ + "mov " VR5(r) ".16b," VR1(r) ".16b\n" \ + "mov " VR6(r) ".16b," VR2(r) ".16b\n" \ + "mov " VR7(r) ".16b," VR3(r) ".16b\n" \ + : WVR4(r), WVR5(r), WVR6(r), WVR7(r) \ + : RVR0(r), RVR1(r), RVR2(r), RVR3(r)); \ + break; \ + case 4: \ + __asm( \ + "mov " VR2(r) ".16b," VR0(r) ".16b\n" \ + "mov " VR3(r) ".16b," VR1(r) ".16b\n" \ + : WVR2(r), WVR3(r) \ + : RVR0(r), RVR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "ld1 { " VR0(r) ".4s },%[SRC0]\n" \ + "ld1 { " VR1(r) ".4s },%[SRC1]\n" \ + "ld1 { " VR2(r) ".4s },%[SRC2]\n" \ + "ld1 { " VR3(r) ".4s },%[SRC3]\n" \ + "ld1 { " VR4(r) ".4s },%[SRC4]\n" \ + "ld1 { " VR5(r) ".4s },%[SRC5]\n" \ + "ld1 { " VR6(r) ".4s },%[SRC6]\n" \ + "ld1 { " VR7(r) ".4s },%[SRC7]\n" \ + : WVR0(r), WVR1(r), WVR2(r), WVR3(r), \ + WVR4(r), WVR5(r), WVR6(r), WVR7(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16))), \ + [SRC2] "Q" (*(OFFSET(src, 32))), \ + [SRC3] "Q" (*(OFFSET(src, 48))), \ + [SRC4] "Q" (*(OFFSET(src, 64))), \ + [SRC5] "Q" (*(OFFSET(src, 80))), \ + [SRC6] "Q" (*(OFFSET(src, 96))), \ + [SRC7] "Q" (*(OFFSET(src, 112)))); \ + break; \ + case 4: \ + __asm( \ + "ld1 { " VR0(r) ".4s },%[SRC0]\n" \ + "ld1 { " VR1(r) ".4s },%[SRC1]\n" \ + "ld1 { " VR2(r) ".4s },%[SRC2]\n" \ + "ld1 { " VR3(r) ".4s },%[SRC3]\n" \ + : WVR0(r), WVR1(r), WVR2(r), WVR3(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16))), \ + [SRC2] "Q" (*(OFFSET(src, 32))), \ + [SRC3] "Q" (*(OFFSET(src, 48)))); \ + break; \ + case 2: \ + __asm( \ + "ld1 { " VR0(r) ".4s },%[SRC0]\n" \ + "ld1 { " VR1(r) ".4s },%[SRC1]\n" \ + : WVR0(r), WVR1(r) \ + : [SRC0] "Q" (*(OFFSET(src, 0))), \ + [SRC1] "Q" (*(OFFSET(src, 16)))); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "st1 { " VR0(r) ".4s },%[DST0]\n" \ + "st1 { " VR1(r) ".4s },%[DST1]\n" \ + "st1 { " VR2(r) ".4s },%[DST2]\n" \ + "st1 { " VR3(r) ".4s },%[DST3]\n" \ + "st1 { " VR4(r) ".4s },%[DST4]\n" \ + "st1 { " VR5(r) ".4s },%[DST5]\n" \ + "st1 { " VR6(r) ".4s },%[DST6]\n" \ + "st1 { " VR7(r) ".4s },%[DST7]\n" \ + : [DST0] "=Q" (*(OFFSET(dst, 0))), \ + [DST1] "=Q" (*(OFFSET(dst, 16))), \ + [DST2] "=Q" (*(OFFSET(dst, 32))), \ + [DST3] "=Q" (*(OFFSET(dst, 48))), \ + [DST4] "=Q" (*(OFFSET(dst, 64))), \ + [DST5] "=Q" (*(OFFSET(dst, 80))), \ + [DST6] "=Q" (*(OFFSET(dst, 96))), \ + [DST7] "=Q" (*(OFFSET(dst, 112))) \ + : RVR0(r), RVR1(r), RVR2(r), RVR3(r), \ + RVR4(r), RVR5(r), RVR6(r), RVR7(r)); \ + break; \ + case 4: \ + __asm( \ + "st1 { " VR0(r) ".4s },%[DST0]\n" \ + "st1 { " VR1(r) ".4s },%[DST1]\n" \ + "st1 { " VR2(r) ".4s },%[DST2]\n" \ + "st1 { " VR3(r) ".4s },%[DST3]\n" \ + : [DST0] "=Q" (*(OFFSET(dst, 0))), \ + [DST1] "=Q" (*(OFFSET(dst, 16))), \ + [DST2] "=Q" (*(OFFSET(dst, 32))), \ + [DST3] "=Q" (*(OFFSET(dst, 48))) \ + : RVR0(r), RVR1(r), RVR2(r), RVR3(r)); \ + break; \ + case 2: \ + __asm( \ + "st1 { " VR0(r) ".4s },%[DST0]\n" \ + "st1 { " VR1(r) ".4s },%[DST1]\n" \ + : [DST0] "=Q" (*(OFFSET(dst, 0))), \ + [DST1] "=Q" (*(OFFSET(dst, 16))) \ + : RVR0(r), RVR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +/* + * Unfortunately cannot use the macro, because GCC + * will try to use the macro name and not value + * later on... + * Kept as a reference to what a numbered variable is + */ +#define _00 "v17" +#define _1d "v16" +#define _temp0 "v19" +#define _temp1 "v18" + +#define MUL2_SETUP() \ +{ \ + __asm( \ + "eor " VR(17) ".16b," VR(17) ".16b," VR(17) ".16b\n" \ + "movi " VR(16) ".16b,#0x1d\n" \ + : WVR(16), WVR(17)); \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "cmgt v19.16b," VR(17) ".16b," VR0(r) ".16b\n" \ + "cmgt v18.16b," VR(17) ".16b," VR1(r) ".16b\n" \ + "cmgt v21.16b," VR(17) ".16b," VR2(r) ".16b\n" \ + "cmgt v20.16b," VR(17) ".16b," VR3(r) ".16b\n" \ + "and v19.16b,v19.16b," VR(16) ".16b\n" \ + "and v18.16b,v18.16b," VR(16) ".16b\n" \ + "and v21.16b,v21.16b," VR(16) ".16b\n" \ + "and v20.16b,v20.16b," VR(16) ".16b\n" \ + "shl " VR0(r) ".16b," VR0(r) ".16b,#1\n" \ + "shl " VR1(r) ".16b," VR1(r) ".16b,#1\n" \ + "shl " VR2(r) ".16b," VR2(r) ".16b,#1\n" \ + "shl " VR3(r) ".16b," VR3(r) ".16b,#1\n" \ + "eor " VR0(r) ".16b,v19.16b," VR0(r) ".16b\n" \ + "eor " VR1(r) ".16b,v18.16b," VR1(r) ".16b\n" \ + "eor " VR2(r) ".16b,v21.16b," VR2(r) ".16b\n" \ + "eor " VR3(r) ".16b,v20.16b," VR3(r) ".16b\n" \ + : UVR0(r), UVR1(r), UVR2(r), UVR3(r) \ + : RVR(17), RVR(16) \ + : "v18", "v19", "v20", "v21"); \ + break; \ + case 2: \ + __asm( \ + "cmgt v19.16b," VR(17) ".16b," VR0(r) ".16b\n" \ + "cmgt v18.16b," VR(17) ".16b," VR1(r) ".16b\n" \ + "and v19.16b,v19.16b," VR(16) ".16b\n" \ + "and v18.16b,v18.16b," VR(16) ".16b\n" \ + "shl " VR0(r) ".16b," VR0(r) ".16b,#1\n" \ + "shl " VR1(r) ".16b," VR1(r) ".16b,#1\n" \ + "eor " VR0(r) ".16b,v19.16b," VR0(r) ".16b\n" \ + "eor " VR1(r) ".16b,v18.16b," VR1(r) ".16b\n" \ + : UVR0(r), UVR1(r) \ + : RVR(17), RVR(16) \ + : "v18", "v19"); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + +/* + * Unfortunately cannot use the macro, because GCC + * will try to use the macro name and not value + * later on... + * Kept as a reference to what a register is + * (here we're using actual registers for the + * clobbered ones) + */ +#define _0f "v15" +#define _a_save "v14" +#define _b_save "v13" +#define _lt_mod_a "v12" +#define _lt_clmul_a "v11" +#define _lt_mod_b "v10" +#define _lt_clmul_b "v15" + +#define _MULx2(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + /* lts for upper part */ \ + "movi v15.16b,#0x0f\n" \ + "ld1 { v10.4s },%[lt0]\n" \ + "ld1 { v11.4s },%[lt1]\n" \ + /* upper part */ \ + "and v14.16b," VR0(r) ".16b,v15.16b\n" \ + "and v13.16b," VR1(r) ".16b,v15.16b\n" \ + "sshr " VR0(r) ".8h," VR0(r) ".8h,#4\n" \ + "sshr " VR1(r) ".8h," VR1(r) ".8h,#4\n" \ + "and " VR0(r) ".16b," VR0(r) ".16b,v15.16b\n" \ + "and " VR1(r) ".16b," VR1(r) ".16b,v15.16b\n" \ + \ + "tbl v12.16b,{v10.16b}," VR0(r) ".16b\n" \ + "tbl v10.16b,{v10.16b}," VR1(r) ".16b\n" \ + "tbl v15.16b,{v11.16b}," VR0(r) ".16b\n" \ + "tbl v11.16b,{v11.16b}," VR1(r) ".16b\n" \ + \ + "eor " VR0(r) ".16b,v15.16b,v12.16b\n" \ + "eor " VR1(r) ".16b,v11.16b,v10.16b\n" \ + /* lts for lower part */ \ + "ld1 { v10.4s },%[lt2]\n" \ + "ld1 { v15.4s },%[lt3]\n" \ + /* lower part */ \ + "tbl v12.16b,{v10.16b},v14.16b\n" \ + "tbl v10.16b,{v10.16b},v13.16b\n" \ + "tbl v11.16b,{v15.16b},v14.16b\n" \ + "tbl v15.16b,{v15.16b},v13.16b\n" \ + \ + "eor " VR0(r) ".16b," VR0(r) ".16b,v12.16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b,v10.16b\n" \ + "eor " VR0(r) ".16b," VR0(r) ".16b,v11.16b\n" \ + "eor " VR1(r) ".16b," VR1(r) ".16b,v15.16b\n" \ + : UVR0(r), UVR1(r) \ + : [lt0] "Q" ((gf_clmul_mod_lt[4*(c)+0][0])), \ + [lt1] "Q" ((gf_clmul_mod_lt[4*(c)+1][0])), \ + [lt2] "Q" ((gf_clmul_mod_lt[4*(c)+2][0])), \ + [lt3] "Q" ((gf_clmul_mod_lt[4*(c)+3][0])) \ + : "v10", "v11", "v12", "v13", "v14", "v15"); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MULx2(c, R_23(r)); \ + _MULx2(c, R_01(r)); \ + break; \ + case 2: \ + _MULx2(c, R_01(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() kfpu_end() + +/* Overkill... */ +#if defined(_KERNEL) +#define GEN_X_DEFINE_0_3() \ +register unsigned char w0 asm("v0") __attribute__((vector_size(16))); \ +register unsigned char w1 asm("v1") __attribute__((vector_size(16))); \ +register unsigned char w2 asm("v2") __attribute__((vector_size(16))); \ +register unsigned char w3 asm("v3") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_4_5() \ +register unsigned char w4 asm("v4") __attribute__((vector_size(16))); \ +register unsigned char w5 asm("v5") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_6_7() \ +register unsigned char w6 asm("v6") __attribute__((vector_size(16))); \ +register unsigned char w7 asm("v7") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_8_9() \ +register unsigned char w8 asm("v8") __attribute__((vector_size(16))); \ +register unsigned char w9 asm("v9") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_10_11() \ +register unsigned char w10 asm("v10") __attribute__((vector_size(16))); \ +register unsigned char w11 asm("v11") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_12_15() \ +register unsigned char w12 asm("v12") __attribute__((vector_size(16))); \ +register unsigned char w13 asm("v13") __attribute__((vector_size(16))); \ +register unsigned char w14 asm("v14") __attribute__((vector_size(16))); \ +register unsigned char w15 asm("v15") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_16() \ +register unsigned char w16 asm("v16") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_17() \ +register unsigned char w17 asm("v17") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_18_21() \ +register unsigned char w18 asm("v18") __attribute__((vector_size(16))); \ +register unsigned char w19 asm("v19") __attribute__((vector_size(16))); \ +register unsigned char w20 asm("v20") __attribute__((vector_size(16))); \ +register unsigned char w21 asm("v21") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_22_23() \ +register unsigned char w22 asm("v22") __attribute__((vector_size(16))); \ +register unsigned char w23 asm("v23") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_24_27() \ +register unsigned char w24 asm("v24") __attribute__((vector_size(16))); \ +register unsigned char w25 asm("v25") __attribute__((vector_size(16))); \ +register unsigned char w26 asm("v26") __attribute__((vector_size(16))); \ +register unsigned char w27 asm("v27") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_28_30() \ +register unsigned char w28 asm("v28") __attribute__((vector_size(16))); \ +register unsigned char w29 asm("v29") __attribute__((vector_size(16))); \ +register unsigned char w30 asm("v30") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_31() \ +register unsigned char w31 asm("v31") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_32() \ +register unsigned char w32 asm("v31") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_33_36() \ +register unsigned char w33 asm("v31") __attribute__((vector_size(16))); \ +register unsigned char w34 asm("v31") __attribute__((vector_size(16))); \ +register unsigned char w35 asm("v31") __attribute__((vector_size(16))); \ +register unsigned char w36 asm("v31") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_37_38() \ +register unsigned char w37 asm("v31") __attribute__((vector_size(16))); \ +register unsigned char w38 asm("v31") __attribute__((vector_size(16))); +#define GEN_X_DEFINE_ALL() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_10_11() \ + GEN_X_DEFINE_12_15() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_18_21() \ + GEN_X_DEFINE_22_23() \ + GEN_X_DEFINE_24_27() \ + GEN_X_DEFINE_28_30() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() \ + GEN_X_DEFINE_37_38() +#else +#define GEN_X_DEFINE_0_3() \ + unsigned char w0 __attribute__((vector_size(16))); \ + unsigned char w1 __attribute__((vector_size(16))); \ + unsigned char w2 __attribute__((vector_size(16))); \ + unsigned char w3 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_4_5() \ + unsigned char w4 __attribute__((vector_size(16))); \ + unsigned char w5 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_6_7() \ + unsigned char w6 __attribute__((vector_size(16))); \ + unsigned char w7 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_8_9() \ + unsigned char w8 __attribute__((vector_size(16))); \ + unsigned char w9 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_10_11() \ + unsigned char w10 __attribute__((vector_size(16))); \ + unsigned char w11 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_12_15() \ + unsigned char w12 __attribute__((vector_size(16))); \ + unsigned char w13 __attribute__((vector_size(16))); \ + unsigned char w14 __attribute__((vector_size(16))); \ + unsigned char w15 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_16() \ + unsigned char w16 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_17() \ + unsigned char w17 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_18_21() \ + unsigned char w18 __attribute__((vector_size(16))); \ + unsigned char w19 __attribute__((vector_size(16))); \ + unsigned char w20 __attribute__((vector_size(16))); \ + unsigned char w21 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_22_23() \ + unsigned char w22 __attribute__((vector_size(16))); \ + unsigned char w23 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_24_27() \ + unsigned char w24 __attribute__((vector_size(16))); \ + unsigned char w25 __attribute__((vector_size(16))); \ + unsigned char w26 __attribute__((vector_size(16))); \ + unsigned char w27 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_28_30() \ + unsigned char w28 __attribute__((vector_size(16))); \ + unsigned char w29 __attribute__((vector_size(16))); \ + unsigned char w30 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_31() \ + unsigned char w31 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_32() \ + unsigned char w32 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_33_36() \ + unsigned char w33 __attribute__((vector_size(16))); \ + unsigned char w34 __attribute__((vector_size(16))); \ + unsigned char w35 __attribute__((vector_size(16))); \ + unsigned char w36 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_37_38() \ + unsigned char w37 __attribute__((vector_size(16))); \ + unsigned char w38 __attribute__((vector_size(16))); +#define GEN_X_DEFINE_ALL() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_10_11() \ + GEN_X_DEFINE_12_15() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_18_21() \ + GEN_X_DEFINE_22_23() \ + GEN_X_DEFINE_24_27() \ + GEN_X_DEFINE_28_30() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() \ + GEN_X_DEFINE_37_38() +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_aarch64_neonx2.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_aarch64_neonx2.c @@ -0,0 +1,232 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau. All rights reserved. + */ + +#include + +#if defined(__aarch64__) + +#include "vdev_raidz_math_aarch64_neon_common.h" + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 8 +#define ZERO_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() +#define ZERO_D 0, 1, 2, 3, 4, 5, 6, 7 + +#define COPY_STRIDE 8 +#define COPY_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() +#define COPY_D 0, 1, 2, 3, 4, 5, 6, 7 + +#define ADD_STRIDE 8 +#define ADD_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() +#define ADD_D 0, 1, 2, 3, 4, 5, 6, 7 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_33_36() +#define GEN_P_STRIDE 4 +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_Q_STRIDE 4 +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_R_STRIDE 4 +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PQ_STRIDE 4 +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_22_23() \ + GEN_X_DEFINE_33_36() +#define REC_PQ_STRIDE 4 +#define REC_PQ_X 0, 1, 2, 3 +#define REC_PQ_Y 4, 5, 6, 7 +#define REC_PQ_T 8, 9, 22, 23 + +#define SYN_PR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PR_STRIDE 4 +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_22_23() \ + GEN_X_DEFINE_33_36() +#define REC_PR_STRIDE 4 +#define REC_PR_X 0, 1, 2, 3 +#define REC_PR_Y 4, 5, 6, 7 +#define REC_PR_T 8, 9, 22, 23 + +#define SYN_QR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_QR_STRIDE 4 +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_22_23() \ + GEN_X_DEFINE_33_36() +#define REC_QR_STRIDE 4 +#define REC_QR_X 0, 1, 2, 3 +#define REC_QR_Y 4, 5, 6, 7 +#define REC_QR_T 8, 9, 22, 23 + +#define SYN_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_16() \ + GEN_X_DEFINE_17() \ + GEN_X_DEFINE_33_36() +#define SYN_PQR_STRIDE 4 +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_DEFINE() \ + GEN_X_DEFINE_0_3() \ + GEN_X_DEFINE_4_5() \ + GEN_X_DEFINE_6_7() \ + GEN_X_DEFINE_8_9() \ + GEN_X_DEFINE_31() \ + GEN_X_DEFINE_32() \ + GEN_X_DEFINE_33_36() +#define REC_PQR_STRIDE 2 +#define REC_PQR_X 0, 1 +#define REC_PQR_Y 2, 3 +#define REC_PQR_Z 4, 5 +#define REC_PQR_XS 6, 7 +#define REC_PQR_YS 8, 9 + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(aarch64_neonx2); +/* + * If compiled with -O0, gcc doesn't do any stack frame coalescing + * and -Wframe-larger-than=1024 is triggered in debug mode. + */ +#pragma GCC diagnostic ignored "-Wframe-larger-than=" +DEFINE_REC_METHODS(aarch64_neonx2); +#pragma GCC diagnostic pop + +static boolean_t +raidz_will_aarch64_neonx2_work(void) +{ + return (B_TRUE); // __arch64__ requires NEON +} + +const raidz_impl_ops_t vdev_raidz_aarch64_neonx2_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(aarch64_neonx2), + .rec = RAIDZ_REC_METHODS(aarch64_neonx2), + .is_supported = &raidz_will_aarch64_neonx2_work, + .name = "aarch64_neonx2" +}; + +#endif /* defined(__aarch64__) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_avx2.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_avx2.c @@ -0,0 +1,411 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ +#include + +#if defined(__x86_64) && defined(HAVE_AVX2) + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "ymm"#REG +#define VR1_(_1, REG, ...) "ymm"#REG +#define VR2_(_1, _2, REG, ...) "ymm"#REG +#define VR3_(_1, _2, _3, REG, ...) "ymm"#REG +#define VR4_(_1, _2, _3, _4, REG, ...) "ymm"#REG +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "ymm"#REG +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "ymm"#REG +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "ymm"#REG + +#define VR0(r...) VR0_(r) +#define VR1(r...) VR1_(r) +#define VR2(r...) VR2_(r, 1) +#define VR3(r...) VR3_(r, 1, 2) +#define VR4(r...) VR4_(r, 1, 2) +#define VR5(r...) VR5_(r, 1, 2, 3) +#define VR6(r...) VR6_(r, 1, 2, 3, 4) +#define VR7(r...) VR7_(r, 1, 2, 3, 4, 5) + +#define R_01(REG1, REG2, ...) REG1, REG2 +#define _R_23(_0, _1, REG2, REG3, ...) REG2, REG3 +#define R_23(REG...) _R_23(REG, 1, 2, 3) + +#define ASM_BUG() ASSERT(0) + +extern const uint8_t gf_clmul_mod_lt[4*256][16]; + +#define ELEM_SIZE 32 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vpxor 0x00(%[SRC]), %%" VR0(r)", %%" VR0(r) "\n" \ + "vpxor 0x20(%[SRC]), %%" VR1(r)", %%" VR1(r) "\n" \ + "vpxor 0x40(%[SRC]), %%" VR2(r)", %%" VR2(r) "\n" \ + "vpxor 0x60(%[SRC]), %%" VR3(r)", %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "vpxor 0x00(%[SRC]), %%" VR0(r)", %%" VR0(r) "\n" \ + "vpxor 0x20(%[SRC]), %%" VR1(r)", %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vpxor %" VR0(r) ", %" VR4(r)", %" VR4(r) "\n" \ + "vpxor %" VR1(r) ", %" VR5(r)", %" VR5(r) "\n" \ + "vpxor %" VR2(r) ", %" VR6(r)", %" VR6(r) "\n" \ + "vpxor %" VR3(r) ", %" VR7(r)", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vpxor %" VR0(r) ", %" VR2(r)", %" VR2(r) "\n" \ + "vpxor %" VR1(r) ", %" VR3(r)", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define ZERO(r...) XOR(r, r) + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vmovdqa %" VR0(r) ", %" VR4(r) "\n" \ + "vmovdqa %" VR1(r) ", %" VR5(r) "\n" \ + "vmovdqa %" VR2(r) ", %" VR6(r) "\n" \ + "vmovdqa %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vmovdqa %" VR0(r) ", %" VR2(r) "\n" \ + "vmovdqa %" VR1(r) ", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "vmovdqa 0x20(%[SRC]), %%" VR1(r) "\n" \ + "vmovdqa 0x40(%[SRC]), %%" VR2(r) "\n" \ + "vmovdqa 0x60(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "vmovdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "vmovdqa 0x20(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa %%" VR0(r) ", 0x00(%[DST])\n" \ + "vmovdqa %%" VR1(r) ", 0x20(%[DST])\n" \ + "vmovdqa %%" VR2(r) ", 0x40(%[DST])\n" \ + "vmovdqa %%" VR3(r) ", 0x60(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + case 2: \ + __asm( \ + "vmovdqa %%" VR0(r) ", 0x00(%[DST])\n" \ + "vmovdqa %%" VR1(r) ", 0x20(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define FLUSH() \ +{ \ + __asm("vzeroupper"); \ +} + +#define MUL2_SETUP() \ +{ \ + __asm("vmovq %0, %%xmm14" :: "r"(0x1d1d1d1d1d1d1d1d)); \ + __asm("vpbroadcastq %xmm14, %ymm14"); \ + __asm("vpxor %ymm15, %ymm15 ,%ymm15"); \ +} + +#define _MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "vpcmpgtb %" VR0(r)", %ymm15, %ymm12\n" \ + "vpcmpgtb %" VR1(r)", %ymm15, %ymm13\n" \ + "vpaddb %" VR0(r)", %" VR0(r)", %" VR0(r) "\n" \ + "vpaddb %" VR1(r)", %" VR1(r)", %" VR1(r) "\n" \ + "vpand %ymm14, %ymm12, %ymm12\n" \ + "vpand %ymm14, %ymm13, %ymm13\n" \ + "vpxor %ymm12, %" VR0(r)", %" VR0(r) "\n" \ + "vpxor %ymm13, %" VR1(r)", %" VR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MUL2(R_01(r)); \ + _MUL2(R_23(r)); \ + break; \ + case 2: \ + _MUL2(r); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + +#define _0f "ymm15" +#define _as "ymm14" +#define _bs "ymm13" +#define _ltmod "ymm12" +#define _ltmul "ymm11" +#define _ta "ymm10" +#define _tb "ymm15" + +static const uint8_t __attribute__((aligned(32))) _mul_mask = 0x0F; + +#define _MULx2(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "vpbroadcastb (%[mask]), %%" _0f "\n" \ + /* upper bits */ \ + "vbroadcasti128 0x00(%[lt]), %%" _ltmod "\n" \ + "vbroadcasti128 0x10(%[lt]), %%" _ltmul "\n" \ + \ + "vpsraw $0x4, %%" VR0(r) ", %%"_as "\n" \ + "vpsraw $0x4, %%" VR1(r) ", %%"_bs "\n" \ + "vpand %%" _0f ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpand %%" _0f ", %%" VR1(r) ", %%" VR1(r) "\n" \ + "vpand %%" _0f ", %%" _as ", %%" _as "\n" \ + "vpand %%" _0f ", %%" _bs ", %%" _bs "\n" \ + \ + "vpshufb %%" _as ", %%" _ltmod ", %%" _ta "\n" \ + "vpshufb %%" _bs ", %%" _ltmod ", %%" _tb "\n" \ + "vpshufb %%" _as ", %%" _ltmul ", %%" _as "\n" \ + "vpshufb %%" _bs ", %%" _ltmul ", %%" _bs "\n" \ + /* lower bits */ \ + "vbroadcasti128 0x20(%[lt]), %%" _ltmod "\n" \ + "vbroadcasti128 0x30(%[lt]), %%" _ltmul "\n" \ + \ + "vpxor %%" _ta ", %%" _as ", %%" _as "\n" \ + "vpxor %%" _tb ", %%" _bs ", %%" _bs "\n" \ + \ + "vpshufb %%" VR0(r) ", %%" _ltmod ", %%" _ta "\n" \ + "vpshufb %%" VR1(r) ", %%" _ltmod ", %%" _tb "\n" \ + "vpshufb %%" VR0(r) ", %%" _ltmul ", %%" VR0(r) "\n"\ + "vpshufb %%" VR1(r) ", %%" _ltmul ", %%" VR1(r) "\n"\ + \ + "vpxor %%" _ta ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpxor %%" _as ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpxor %%" _tb ", %%" VR1(r) ", %%" VR1(r) "\n" \ + "vpxor %%" _bs ", %%" VR1(r) ", %%" VR1(r) "\n" \ + : : [mask] "r" (&_mul_mask), \ + [lt] "r" (gf_clmul_mod_lt[4*(c)])); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MULx2(c, R_01(r)); \ + _MULx2(c, R_23(r)); \ + break; \ + case 2: \ + _MULx2(c, R_01(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() \ +{ \ + FLUSH(); \ + kfpu_end(); \ +} + + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() {} +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() {} +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() {} +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() {} +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_STRIDE 4 +#define GEN_P_DEFINE() {} +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_DEFINE() {} +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_DEFINE() {} +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() {} +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() {} +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() {} +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_STRIDE 2 +#define REC_PQ_DEFINE() {} +#define REC_PQ_X 0, 1 +#define REC_PQ_Y 2, 3 +#define REC_PQ_T 4, 5 + +#define SYN_PR_DEFINE() {} +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_STRIDE 2 +#define REC_PR_DEFINE() {} +#define REC_PR_X 0, 1 +#define REC_PR_Y 2, 3 +#define REC_PR_T 4, 5 + +#define SYN_QR_DEFINE() {} +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_STRIDE 2 +#define REC_QR_DEFINE() {} +#define REC_QR_X 0, 1 +#define REC_QR_Y 2, 3 +#define REC_QR_T 4, 5 + +#define SYN_PQR_DEFINE() {} +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_STRIDE 2 +#define REC_PQR_DEFINE() {} +#define REC_PQR_X 0, 1 +#define REC_PQR_Y 2, 3 +#define REC_PQR_Z 4, 5 +#define REC_PQR_XS 6, 7 +#define REC_PQR_YS 8, 9 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(avx2); +DEFINE_REC_METHODS(avx2); + +static boolean_t +raidz_will_avx2_work(void) +{ + return (zfs_avx_available() && zfs_avx2_available()); +} + +const raidz_impl_ops_t vdev_raidz_avx2_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(avx2), + .rec = RAIDZ_REC_METHODS(avx2), + .is_supported = &raidz_will_avx2_work, + .name = "avx2" +}; + +#endif /* defined(__x86_64) && defined(HAVE_AVX2) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_avx512bw.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_avx512bw.c @@ -0,0 +1,410 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau. All rights reserved. + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include + +#if defined(__x86_64) && defined(HAVE_AVX512BW) + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "zmm"#REG +#define VR1_(_1, REG, ...) "zmm"#REG +#define VR2_(_1, _2, REG, ...) "zmm"#REG +#define VR3_(_1, _2, _3, REG, ...) "zmm"#REG +#define VR4_(_1, _2, _3, _4, REG, ...) "zmm"#REG +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "zmm"#REG +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "zmm"#REG +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "zmm"#REG + +#define VR0(r...) VR0_(r) +#define VR1(r...) VR1_(r) +#define VR2(r...) VR2_(r, 1) +#define VR3(r...) VR3_(r, 1, 2) +#define VR4(r...) VR4_(r, 1, 2) +#define VR5(r...) VR5_(r, 1, 2, 3) +#define VR6(r...) VR6_(r, 1, 2, 3, 4) +#define VR7(r...) VR7_(r, 1, 2, 3, 4, 5) + +#define R_01(REG1, REG2, ...) REG1, REG2 +#define _R_23(_0, _1, REG2, REG3, ...) REG2, REG3 +#define R_23(REG...) _R_23(REG, 1, 2, 3) + +#define ASM_BUG() ASSERT(0) + +extern const uint8_t gf_clmul_mod_lt[4*256][16]; + +#define ELEM_SIZE 64 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vpxorq 0x00(%[SRC]), %%" VR0(r)", %%" VR0(r) "\n" \ + "vpxorq 0x40(%[SRC]), %%" VR1(r)", %%" VR1(r) "\n" \ + "vpxorq 0x80(%[SRC]), %%" VR2(r)", %%" VR2(r) "\n" \ + "vpxorq 0xc0(%[SRC]), %%" VR3(r)", %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "vpxorq 0x00(%[SRC]), %%" VR0(r)", %%" VR0(r) "\n" \ + "vpxorq 0x40(%[SRC]), %%" VR1(r)", %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vpxorq %" VR0(r) ", %" VR4(r)", %" VR4(r) "\n" \ + "vpxorq %" VR1(r) ", %" VR5(r)", %" VR5(r) "\n" \ + "vpxorq %" VR2(r) ", %" VR6(r)", %" VR6(r) "\n" \ + "vpxorq %" VR3(r) ", %" VR7(r)", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vpxorq %" VR0(r) ", %" VR2(r)", %" VR2(r) "\n" \ + "vpxorq %" VR1(r) ", %" VR3(r)", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define ZERO(r...) XOR(r, r) + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vmovdqa64 %" VR0(r) ", %" VR4(r) "\n" \ + "vmovdqa64 %" VR1(r) ", %" VR5(r) "\n" \ + "vmovdqa64 %" VR2(r) ", %" VR6(r) "\n" \ + "vmovdqa64 %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vmovdqa64 %" VR0(r) ", %" VR2(r) "\n" \ + "vmovdqa64 %" VR1(r) ", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa64 0x00(%[SRC]), %%" VR0(r) "\n" \ + "vmovdqa64 0x40(%[SRC]), %%" VR1(r) "\n" \ + "vmovdqa64 0x80(%[SRC]), %%" VR2(r) "\n" \ + "vmovdqa64 0xc0(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "vmovdqa64 0x00(%[SRC]), %%" VR0(r) "\n" \ + "vmovdqa64 0x40(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa64 %%" VR0(r) ", 0x00(%[DST])\n" \ + "vmovdqa64 %%" VR1(r) ", 0x40(%[DST])\n" \ + "vmovdqa64 %%" VR2(r) ", 0x80(%[DST])\n" \ + "vmovdqa64 %%" VR3(r) ", 0xc0(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + case 2: \ + __asm( \ + "vmovdqa64 %%" VR0(r) ", 0x00(%[DST])\n" \ + "vmovdqa64 %%" VR1(r) ", 0x40(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL2_SETUP() \ +{ \ + __asm("vmovq %0, %%xmm22" :: "r"(0x1d1d1d1d1d1d1d1d)); \ + __asm("vpbroadcastq %xmm22, %zmm22"); \ + __asm("vpxord %zmm23, %zmm23 ,%zmm23"); \ +} + +#define _MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "vpcmpb $1, %zmm23, %" VR0(r)", %k1\n" \ + "vpcmpb $1, %zmm23, %" VR1(r)", %k2\n" \ + "vpaddb %" VR0(r)", %" VR0(r)", %" VR0(r) "\n" \ + "vpaddb %" VR1(r)", %" VR1(r)", %" VR1(r) "\n" \ + "vpxord %zmm22, %" VR0(r)", %zmm12\n" \ + "vpxord %zmm22, %" VR1(r)", %zmm13\n" \ + "vmovdqu8 %zmm12, %" VR0(r) "{%k1}\n" \ + "vmovdqu8 %zmm13, %" VR1(r) "{%k2}"); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MUL2(R_01(r)); \ + _MUL2(R_23(r)); \ + break; \ + case 2: \ + _MUL2(r); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + +#define _0f "zmm15" +#define _as "zmm14" +#define _bs "zmm13" +#define _ltmod "zmm12" +#define _ltmul "zmm11" +#define _ta "zmm10" +#define _tb "zmm15" + +static const uint8_t __attribute__((aligned(64))) _mul_mask = 0x0F; + +#define _MULx2(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "vpbroadcastb (%[mask]), %%" _0f "\n" \ + /* upper bits */ \ + "vbroadcasti32x4 0x00(%[lt]), %%" _ltmod "\n" \ + "vbroadcasti32x4 0x10(%[lt]), %%" _ltmul "\n" \ + \ + "vpsraw $0x4, %%" VR0(r) ", %%"_as "\n" \ + "vpsraw $0x4, %%" VR1(r) ", %%"_bs "\n" \ + "vpandq %%" _0f ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpandq %%" _0f ", %%" VR1(r) ", %%" VR1(r) "\n" \ + "vpandq %%" _0f ", %%" _as ", %%" _as "\n" \ + "vpandq %%" _0f ", %%" _bs ", %%" _bs "\n" \ + \ + "vpshufb %%" _as ", %%" _ltmod ", %%" _ta "\n" \ + "vpshufb %%" _bs ", %%" _ltmod ", %%" _tb "\n" \ + "vpshufb %%" _as ", %%" _ltmul ", %%" _as "\n" \ + "vpshufb %%" _bs ", %%" _ltmul ", %%" _bs "\n" \ + /* lower bits */ \ + "vbroadcasti32x4 0x20(%[lt]), %%" _ltmod "\n" \ + "vbroadcasti32x4 0x30(%[lt]), %%" _ltmul "\n" \ + \ + "vpxorq %%" _ta ", %%" _as ", %%" _as "\n" \ + "vpxorq %%" _tb ", %%" _bs ", %%" _bs "\n" \ + \ + "vpshufb %%" VR0(r) ", %%" _ltmod ", %%" _ta "\n" \ + "vpshufb %%" VR1(r) ", %%" _ltmod ", %%" _tb "\n" \ + "vpshufb %%" VR0(r) ", %%" _ltmul ", %%" VR0(r) "\n"\ + "vpshufb %%" VR1(r) ", %%" _ltmul ", %%" VR1(r) "\n"\ + \ + "vpxorq %%" _ta ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpxorq %%" _as ", %%" VR0(r) ", %%" VR0(r) "\n" \ + "vpxorq %%" _tb ", %%" VR1(r) ", %%" VR1(r) "\n" \ + "vpxorq %%" _bs ", %%" VR1(r) ", %%" VR1(r) "\n" \ + : : [mask] "r" (&_mul_mask), \ + [lt] "r" (gf_clmul_mod_lt[4*(c)])); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MULx2(c, R_01(r)); \ + _MULx2(c, R_23(r)); \ + break; \ + case 2: \ + _MULx2(c, R_01(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() kfpu_end() + +/* + * ZERO, COPY, and MUL operations are already 2x unrolled, which means that + * the stride of these operations for avx512 must not exceed 4. Otherwise, a + * single step would exceed 512B block size. + */ + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() {} +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() {} +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() {} +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() {} +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_STRIDE 4 +#define GEN_P_DEFINE() {} +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_DEFINE() {} +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_DEFINE() {} +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() {} +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() {} +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() {} +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_STRIDE 2 +#define REC_PQ_DEFINE() {} +#define REC_PQ_X 0, 1 +#define REC_PQ_Y 2, 3 +#define REC_PQ_T 4, 5 + +#define SYN_PR_DEFINE() {} +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_STRIDE 2 +#define REC_PR_DEFINE() {} +#define REC_PR_X 0, 1 +#define REC_PR_Y 2, 3 +#define REC_PR_T 4, 5 + +#define SYN_QR_DEFINE() {} +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_STRIDE 2 +#define REC_QR_DEFINE() {} +#define REC_QR_X 0, 1 +#define REC_QR_Y 2, 3 +#define REC_QR_T 4, 5 + +#define SYN_PQR_DEFINE() {} +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_STRIDE 2 +#define REC_PQR_DEFINE() {} +#define REC_PQR_X 0, 1 +#define REC_PQR_Y 2, 3 +#define REC_PQR_Z 4, 5 +#define REC_PQR_XS 6, 7 +#define REC_PQR_YS 8, 9 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(avx512bw); +DEFINE_REC_METHODS(avx512bw); + +static boolean_t +raidz_will_avx512bw_work(void) +{ + return (zfs_avx_available() && + zfs_avx512f_available() && + zfs_avx512bw_available()); +} + +const raidz_impl_ops_t vdev_raidz_avx512bw_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(avx512bw), + .rec = RAIDZ_REC_METHODS(avx512bw), + .is_supported = &raidz_will_avx512bw_work, + .name = "avx512bw" +}; + +#endif /* defined(__x86_64) && defined(HAVE_AVX512BW) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_avx512f.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_avx512f.c @@ -0,0 +1,487 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Romain Dolbeau. All rights reserved. + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include + +#if defined(__x86_64) && defined(HAVE_AVX512F) + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "zmm"#REG +#define VR1_(_1, REG, ...) "zmm"#REG +#define VR2_(_1, _2, REG, ...) "zmm"#REG +#define VR3_(_1, _2, _3, REG, ...) "zmm"#REG +#define VR4_(_1, _2, _3, _4, REG, ...) "zmm"#REG +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "zmm"#REG +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "zmm"#REG +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "zmm"#REG + +#define VR0(r...) VR0_(r) +#define VR1(r...) VR1_(r) +#define VR2(r...) VR2_(r, 1) +#define VR3(r...) VR3_(r, 1, 2) +#define VR4(r...) VR4_(r, 1, 2) +#define VR5(r...) VR5_(r, 1, 2, 3) +#define VR6(r...) VR6_(r, 1, 2, 3, 4) +#define VR7(r...) VR7_(r, 1, 2, 3, 4, 5) + +#define VRy0_(REG, ...) "ymm"#REG +#define VRy1_(_1, REG, ...) "ymm"#REG +#define VRy2_(_1, _2, REG, ...) "ymm"#REG +#define VRy3_(_1, _2, _3, REG, ...) "ymm"#REG +#define VRy4_(_1, _2, _3, _4, REG, ...) "ymm"#REG +#define VRy5_(_1, _2, _3, _4, _5, REG, ...) "ymm"#REG +#define VRy6_(_1, _2, _3, _4, _5, _6, REG, ...) "ymm"#REG +#define VRy7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "ymm"#REG + +#define VRy0(r...) VRy0_(r) +#define VRy1(r...) VRy1_(r) +#define VRy2(r...) VRy2_(r, 1) +#define VRy3(r...) VRy3_(r, 1, 2) +#define VRy4(r...) VRy4_(r, 1, 2) +#define VRy5(r...) VRy5_(r, 1, 2, 3) +#define VRy6(r...) VRy6_(r, 1, 2, 3, 4) +#define VRy7(r...) VRy7_(r, 1, 2, 3, 4, 5) + +#define R_01(REG1, REG2, ...) REG1, REG2 +#define _R_23(_0, _1, REG2, REG3, ...) REG2, REG3 +#define R_23(REG...) _R_23(REG, 1, 2, 3) + +#define ELEM_SIZE 64 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vpxorq 0x00(%[SRC]), %%" VR0(r)", %%" VR0(r) "\n" \ + "vpxorq 0x40(%[SRC]), %%" VR1(r)", %%" VR1(r) "\n" \ + "vpxorq 0x80(%[SRC]), %%" VR2(r)", %%" VR2(r) "\n" \ + "vpxorq 0xc0(%[SRC]), %%" VR3(r)", %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vpxorq %" VR0(r) ", %" VR4(r)", %" VR4(r) "\n" \ + "vpxorq %" VR1(r) ", %" VR5(r)", %" VR5(r) "\n" \ + "vpxorq %" VR2(r) ", %" VR6(r)", %" VR6(r) "\n" \ + "vpxorq %" VR3(r) ", %" VR7(r)", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vpxorq %" VR0(r) ", %" VR2(r)", %" VR2(r) "\n" \ + "vpxorq %" VR1(r) ", %" VR3(r)", %" VR3(r)); \ + break; \ + } \ +} + + +#define ZERO(r...) XOR(r, r) + + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "vmovdqa64 %" VR0(r) ", %" VR4(r) "\n" \ + "vmovdqa64 %" VR1(r) ", %" VR5(r) "\n" \ + "vmovdqa64 %" VR2(r) ", %" VR6(r) "\n" \ + "vmovdqa64 %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "vmovdqa64 %" VR0(r) ", %" VR2(r) "\n" \ + "vmovdqa64 %" VR1(r) ", %" VR3(r)); \ + break; \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa64 0x00(%[SRC]), %%" VR0(r) "\n" \ + "vmovdqa64 0x40(%[SRC]), %%" VR1(r) "\n" \ + "vmovdqa64 0x80(%[SRC]), %%" VR2(r) "\n" \ + "vmovdqa64 0xc0(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "vmovdqa64 %%" VR0(r) ", 0x00(%[DST])\n" \ + "vmovdqa64 %%" VR1(r) ", 0x40(%[DST])\n" \ + "vmovdqa64 %%" VR2(r) ", 0x80(%[DST])\n" \ + "vmovdqa64 %%" VR3(r) ", 0xc0(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + } \ +} + +#define MUL2_SETUP() \ +{ \ + __asm("vmovq %0, %%xmm31" :: "r"(0x1d1d1d1d1d1d1d1d)); \ + __asm("vpbroadcastq %xmm31, %zmm31"); \ + __asm("vmovq %0, %%xmm30" :: "r"(0x8080808080808080)); \ + __asm("vpbroadcastq %xmm30, %zmm30"); \ + __asm("vmovq %0, %%xmm29" :: "r"(0xfefefefefefefefe)); \ + __asm("vpbroadcastq %xmm29, %zmm29"); \ +} + +#define _MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "vpandq %" VR0(r)", %zmm30, %zmm26\n" \ + "vpandq %" VR1(r)", %zmm30, %zmm25\n" \ + "vpsrlq $7, %zmm26, %zmm28\n" \ + "vpsrlq $7, %zmm25, %zmm27\n" \ + "vpsllq $1, %zmm26, %zmm26\n" \ + "vpsllq $1, %zmm25, %zmm25\n" \ + "vpsubq %zmm28, %zmm26, %zmm26\n" \ + "vpsubq %zmm27, %zmm25, %zmm25\n" \ + "vpsllq $1, %" VR0(r)", %" VR0(r) "\n" \ + "vpsllq $1, %" VR1(r)", %" VR1(r) "\n" \ + "vpandq %zmm26, %zmm31, %zmm26\n" \ + "vpandq %zmm25, %zmm31, %zmm25\n" \ + "vpternlogd $0x6c,%zmm29, %zmm26, %" VR0(r) "\n" \ + "vpternlogd $0x6c,%zmm29, %zmm25, %" VR1(r)); \ + break; \ + } \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MUL2(R_01(r)); \ + _MUL2(R_23(r)); \ + break; \ + case 2: \ + _MUL2(r); \ + break; \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + + +/* General multiplication by adding powers of two */ + +#define _mul_x2_in 21, 22 +#define _mul_x2_acc 23, 24 + +#define _MUL_PARAM(x, in, acc) \ +{ \ + if (x & 0x01) { COPY(in, acc); } else { ZERO(acc); } \ + if (x & 0xfe) { MUL2(in); } \ + if (x & 0x02) { XOR(in, acc); } \ + if (x & 0xfc) { MUL2(in); } \ + if (x & 0x04) { XOR(in, acc); } \ + if (x & 0xf8) { MUL2(in); } \ + if (x & 0x08) { XOR(in, acc); } \ + if (x & 0xf0) { MUL2(in); } \ + if (x & 0x10) { XOR(in, acc); } \ + if (x & 0xe0) { MUL2(in); } \ + if (x & 0x20) { XOR(in, acc); } \ + if (x & 0xc0) { MUL2(in); } \ + if (x & 0x40) { XOR(in, acc); } \ + if (x & 0x80) { MUL2(in); XOR(in, acc); } \ +} + +#define MUL_x2_DEFINE(x) \ +static void \ +mul_x2_ ## x(void) { _MUL_PARAM(x, _mul_x2_in, _mul_x2_acc); } + + +MUL_x2_DEFINE(0); MUL_x2_DEFINE(1); MUL_x2_DEFINE(2); MUL_x2_DEFINE(3); +MUL_x2_DEFINE(4); MUL_x2_DEFINE(5); MUL_x2_DEFINE(6); MUL_x2_DEFINE(7); +MUL_x2_DEFINE(8); MUL_x2_DEFINE(9); MUL_x2_DEFINE(10); MUL_x2_DEFINE(11); +MUL_x2_DEFINE(12); MUL_x2_DEFINE(13); MUL_x2_DEFINE(14); MUL_x2_DEFINE(15); +MUL_x2_DEFINE(16); MUL_x2_DEFINE(17); MUL_x2_DEFINE(18); MUL_x2_DEFINE(19); +MUL_x2_DEFINE(20); MUL_x2_DEFINE(21); MUL_x2_DEFINE(22); MUL_x2_DEFINE(23); +MUL_x2_DEFINE(24); MUL_x2_DEFINE(25); MUL_x2_DEFINE(26); MUL_x2_DEFINE(27); +MUL_x2_DEFINE(28); MUL_x2_DEFINE(29); MUL_x2_DEFINE(30); MUL_x2_DEFINE(31); +MUL_x2_DEFINE(32); MUL_x2_DEFINE(33); MUL_x2_DEFINE(34); MUL_x2_DEFINE(35); +MUL_x2_DEFINE(36); MUL_x2_DEFINE(37); MUL_x2_DEFINE(38); MUL_x2_DEFINE(39); +MUL_x2_DEFINE(40); MUL_x2_DEFINE(41); MUL_x2_DEFINE(42); MUL_x2_DEFINE(43); +MUL_x2_DEFINE(44); MUL_x2_DEFINE(45); MUL_x2_DEFINE(46); MUL_x2_DEFINE(47); +MUL_x2_DEFINE(48); MUL_x2_DEFINE(49); MUL_x2_DEFINE(50); MUL_x2_DEFINE(51); +MUL_x2_DEFINE(52); MUL_x2_DEFINE(53); MUL_x2_DEFINE(54); MUL_x2_DEFINE(55); +MUL_x2_DEFINE(56); MUL_x2_DEFINE(57); MUL_x2_DEFINE(58); MUL_x2_DEFINE(59); +MUL_x2_DEFINE(60); MUL_x2_DEFINE(61); MUL_x2_DEFINE(62); MUL_x2_DEFINE(63); +MUL_x2_DEFINE(64); MUL_x2_DEFINE(65); MUL_x2_DEFINE(66); MUL_x2_DEFINE(67); +MUL_x2_DEFINE(68); MUL_x2_DEFINE(69); MUL_x2_DEFINE(70); MUL_x2_DEFINE(71); +MUL_x2_DEFINE(72); MUL_x2_DEFINE(73); MUL_x2_DEFINE(74); MUL_x2_DEFINE(75); +MUL_x2_DEFINE(76); MUL_x2_DEFINE(77); MUL_x2_DEFINE(78); MUL_x2_DEFINE(79); +MUL_x2_DEFINE(80); MUL_x2_DEFINE(81); MUL_x2_DEFINE(82); MUL_x2_DEFINE(83); +MUL_x2_DEFINE(84); MUL_x2_DEFINE(85); MUL_x2_DEFINE(86); MUL_x2_DEFINE(87); +MUL_x2_DEFINE(88); MUL_x2_DEFINE(89); MUL_x2_DEFINE(90); MUL_x2_DEFINE(91); +MUL_x2_DEFINE(92); MUL_x2_DEFINE(93); MUL_x2_DEFINE(94); MUL_x2_DEFINE(95); +MUL_x2_DEFINE(96); MUL_x2_DEFINE(97); MUL_x2_DEFINE(98); MUL_x2_DEFINE(99); +MUL_x2_DEFINE(100); MUL_x2_DEFINE(101); MUL_x2_DEFINE(102); MUL_x2_DEFINE(103); +MUL_x2_DEFINE(104); MUL_x2_DEFINE(105); MUL_x2_DEFINE(106); MUL_x2_DEFINE(107); +MUL_x2_DEFINE(108); MUL_x2_DEFINE(109); MUL_x2_DEFINE(110); MUL_x2_DEFINE(111); +MUL_x2_DEFINE(112); MUL_x2_DEFINE(113); MUL_x2_DEFINE(114); MUL_x2_DEFINE(115); +MUL_x2_DEFINE(116); MUL_x2_DEFINE(117); MUL_x2_DEFINE(118); MUL_x2_DEFINE(119); +MUL_x2_DEFINE(120); MUL_x2_DEFINE(121); MUL_x2_DEFINE(122); MUL_x2_DEFINE(123); +MUL_x2_DEFINE(124); MUL_x2_DEFINE(125); MUL_x2_DEFINE(126); MUL_x2_DEFINE(127); +MUL_x2_DEFINE(128); MUL_x2_DEFINE(129); MUL_x2_DEFINE(130); MUL_x2_DEFINE(131); +MUL_x2_DEFINE(132); MUL_x2_DEFINE(133); MUL_x2_DEFINE(134); MUL_x2_DEFINE(135); +MUL_x2_DEFINE(136); MUL_x2_DEFINE(137); MUL_x2_DEFINE(138); MUL_x2_DEFINE(139); +MUL_x2_DEFINE(140); MUL_x2_DEFINE(141); MUL_x2_DEFINE(142); MUL_x2_DEFINE(143); +MUL_x2_DEFINE(144); MUL_x2_DEFINE(145); MUL_x2_DEFINE(146); MUL_x2_DEFINE(147); +MUL_x2_DEFINE(148); MUL_x2_DEFINE(149); MUL_x2_DEFINE(150); MUL_x2_DEFINE(151); +MUL_x2_DEFINE(152); MUL_x2_DEFINE(153); MUL_x2_DEFINE(154); MUL_x2_DEFINE(155); +MUL_x2_DEFINE(156); MUL_x2_DEFINE(157); MUL_x2_DEFINE(158); MUL_x2_DEFINE(159); +MUL_x2_DEFINE(160); MUL_x2_DEFINE(161); MUL_x2_DEFINE(162); MUL_x2_DEFINE(163); +MUL_x2_DEFINE(164); MUL_x2_DEFINE(165); MUL_x2_DEFINE(166); MUL_x2_DEFINE(167); +MUL_x2_DEFINE(168); MUL_x2_DEFINE(169); MUL_x2_DEFINE(170); MUL_x2_DEFINE(171); +MUL_x2_DEFINE(172); MUL_x2_DEFINE(173); MUL_x2_DEFINE(174); MUL_x2_DEFINE(175); +MUL_x2_DEFINE(176); MUL_x2_DEFINE(177); MUL_x2_DEFINE(178); MUL_x2_DEFINE(179); +MUL_x2_DEFINE(180); MUL_x2_DEFINE(181); MUL_x2_DEFINE(182); MUL_x2_DEFINE(183); +MUL_x2_DEFINE(184); MUL_x2_DEFINE(185); MUL_x2_DEFINE(186); MUL_x2_DEFINE(187); +MUL_x2_DEFINE(188); MUL_x2_DEFINE(189); MUL_x2_DEFINE(190); MUL_x2_DEFINE(191); +MUL_x2_DEFINE(192); MUL_x2_DEFINE(193); MUL_x2_DEFINE(194); MUL_x2_DEFINE(195); +MUL_x2_DEFINE(196); MUL_x2_DEFINE(197); MUL_x2_DEFINE(198); MUL_x2_DEFINE(199); +MUL_x2_DEFINE(200); MUL_x2_DEFINE(201); MUL_x2_DEFINE(202); MUL_x2_DEFINE(203); +MUL_x2_DEFINE(204); MUL_x2_DEFINE(205); MUL_x2_DEFINE(206); MUL_x2_DEFINE(207); +MUL_x2_DEFINE(208); MUL_x2_DEFINE(209); MUL_x2_DEFINE(210); MUL_x2_DEFINE(211); +MUL_x2_DEFINE(212); MUL_x2_DEFINE(213); MUL_x2_DEFINE(214); MUL_x2_DEFINE(215); +MUL_x2_DEFINE(216); MUL_x2_DEFINE(217); MUL_x2_DEFINE(218); MUL_x2_DEFINE(219); +MUL_x2_DEFINE(220); MUL_x2_DEFINE(221); MUL_x2_DEFINE(222); MUL_x2_DEFINE(223); +MUL_x2_DEFINE(224); MUL_x2_DEFINE(225); MUL_x2_DEFINE(226); MUL_x2_DEFINE(227); +MUL_x2_DEFINE(228); MUL_x2_DEFINE(229); MUL_x2_DEFINE(230); MUL_x2_DEFINE(231); +MUL_x2_DEFINE(232); MUL_x2_DEFINE(233); MUL_x2_DEFINE(234); MUL_x2_DEFINE(235); +MUL_x2_DEFINE(236); MUL_x2_DEFINE(237); MUL_x2_DEFINE(238); MUL_x2_DEFINE(239); +MUL_x2_DEFINE(240); MUL_x2_DEFINE(241); MUL_x2_DEFINE(242); MUL_x2_DEFINE(243); +MUL_x2_DEFINE(244); MUL_x2_DEFINE(245); MUL_x2_DEFINE(246); MUL_x2_DEFINE(247); +MUL_x2_DEFINE(248); MUL_x2_DEFINE(249); MUL_x2_DEFINE(250); MUL_x2_DEFINE(251); +MUL_x2_DEFINE(252); MUL_x2_DEFINE(253); MUL_x2_DEFINE(254); MUL_x2_DEFINE(255); + + +typedef void (*mul_fn_ptr_t)(void); + +static const mul_fn_ptr_t __attribute__((aligned(256))) +gf_x2_mul_fns[256] = { + mul_x2_0, mul_x2_1, mul_x2_2, mul_x2_3, mul_x2_4, mul_x2_5, + mul_x2_6, mul_x2_7, mul_x2_8, mul_x2_9, mul_x2_10, mul_x2_11, + mul_x2_12, mul_x2_13, mul_x2_14, mul_x2_15, mul_x2_16, mul_x2_17, + mul_x2_18, mul_x2_19, mul_x2_20, mul_x2_21, mul_x2_22, mul_x2_23, + mul_x2_24, mul_x2_25, mul_x2_26, mul_x2_27, mul_x2_28, mul_x2_29, + mul_x2_30, mul_x2_31, mul_x2_32, mul_x2_33, mul_x2_34, mul_x2_35, + mul_x2_36, mul_x2_37, mul_x2_38, mul_x2_39, mul_x2_40, mul_x2_41, + mul_x2_42, mul_x2_43, mul_x2_44, mul_x2_45, mul_x2_46, mul_x2_47, + mul_x2_48, mul_x2_49, mul_x2_50, mul_x2_51, mul_x2_52, mul_x2_53, + mul_x2_54, mul_x2_55, mul_x2_56, mul_x2_57, mul_x2_58, mul_x2_59, + mul_x2_60, mul_x2_61, mul_x2_62, mul_x2_63, mul_x2_64, mul_x2_65, + mul_x2_66, mul_x2_67, mul_x2_68, mul_x2_69, mul_x2_70, mul_x2_71, + mul_x2_72, mul_x2_73, mul_x2_74, mul_x2_75, mul_x2_76, mul_x2_77, + mul_x2_78, mul_x2_79, mul_x2_80, mul_x2_81, mul_x2_82, mul_x2_83, + mul_x2_84, mul_x2_85, mul_x2_86, mul_x2_87, mul_x2_88, mul_x2_89, + mul_x2_90, mul_x2_91, mul_x2_92, mul_x2_93, mul_x2_94, mul_x2_95, + mul_x2_96, mul_x2_97, mul_x2_98, mul_x2_99, mul_x2_100, mul_x2_101, + mul_x2_102, mul_x2_103, mul_x2_104, mul_x2_105, mul_x2_106, mul_x2_107, + mul_x2_108, mul_x2_109, mul_x2_110, mul_x2_111, mul_x2_112, mul_x2_113, + mul_x2_114, mul_x2_115, mul_x2_116, mul_x2_117, mul_x2_118, mul_x2_119, + mul_x2_120, mul_x2_121, mul_x2_122, mul_x2_123, mul_x2_124, mul_x2_125, + mul_x2_126, mul_x2_127, mul_x2_128, mul_x2_129, mul_x2_130, mul_x2_131, + mul_x2_132, mul_x2_133, mul_x2_134, mul_x2_135, mul_x2_136, mul_x2_137, + mul_x2_138, mul_x2_139, mul_x2_140, mul_x2_141, mul_x2_142, mul_x2_143, + mul_x2_144, mul_x2_145, mul_x2_146, mul_x2_147, mul_x2_148, mul_x2_149, + mul_x2_150, mul_x2_151, mul_x2_152, mul_x2_153, mul_x2_154, mul_x2_155, + mul_x2_156, mul_x2_157, mul_x2_158, mul_x2_159, mul_x2_160, mul_x2_161, + mul_x2_162, mul_x2_163, mul_x2_164, mul_x2_165, mul_x2_166, mul_x2_167, + mul_x2_168, mul_x2_169, mul_x2_170, mul_x2_171, mul_x2_172, mul_x2_173, + mul_x2_174, mul_x2_175, mul_x2_176, mul_x2_177, mul_x2_178, mul_x2_179, + mul_x2_180, mul_x2_181, mul_x2_182, mul_x2_183, mul_x2_184, mul_x2_185, + mul_x2_186, mul_x2_187, mul_x2_188, mul_x2_189, mul_x2_190, mul_x2_191, + mul_x2_192, mul_x2_193, mul_x2_194, mul_x2_195, mul_x2_196, mul_x2_197, + mul_x2_198, mul_x2_199, mul_x2_200, mul_x2_201, mul_x2_202, mul_x2_203, + mul_x2_204, mul_x2_205, mul_x2_206, mul_x2_207, mul_x2_208, mul_x2_209, + mul_x2_210, mul_x2_211, mul_x2_212, mul_x2_213, mul_x2_214, mul_x2_215, + mul_x2_216, mul_x2_217, mul_x2_218, mul_x2_219, mul_x2_220, mul_x2_221, + mul_x2_222, mul_x2_223, mul_x2_224, mul_x2_225, mul_x2_226, mul_x2_227, + mul_x2_228, mul_x2_229, mul_x2_230, mul_x2_231, mul_x2_232, mul_x2_233, + mul_x2_234, mul_x2_235, mul_x2_236, mul_x2_237, mul_x2_238, mul_x2_239, + mul_x2_240, mul_x2_241, mul_x2_242, mul_x2_243, mul_x2_244, mul_x2_245, + mul_x2_246, mul_x2_247, mul_x2_248, mul_x2_249, mul_x2_250, mul_x2_251, + mul_x2_252, mul_x2_253, mul_x2_254, mul_x2_255 +}; + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + COPY(R_01(r), _mul_x2_in); \ + gf_x2_mul_fns[c](); \ + COPY(_mul_x2_acc, R_01(r)); \ + COPY(R_23(r), _mul_x2_in); \ + gf_x2_mul_fns[c](); \ + COPY(_mul_x2_acc, R_23(r)); \ + } \ +} + + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() kfpu_end() + + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() {} +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() {} +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() {} +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() MUL2_SETUP() +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_STRIDE 4 +#define GEN_P_DEFINE() {} +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_DEFINE() {} +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_DEFINE() {} +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() {} +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() {} +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() {} +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_STRIDE 4 +#define REC_PQ_DEFINE() MUL2_SETUP() +#define REC_PQ_X 0, 1, 2, 3 +#define REC_PQ_Y 4, 5, 6, 7 +#define REC_PQ_T 8, 9, 10, 11 + +#define SYN_PR_DEFINE() {} +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_STRIDE 4 +#define REC_PR_DEFINE() MUL2_SETUP() +#define REC_PR_X 0, 1, 2, 3 +#define REC_PR_Y 4, 5, 6, 7 +#define REC_PR_T 8, 9, 10, 11 + +#define SYN_QR_DEFINE() {} +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_STRIDE 4 +#define REC_QR_DEFINE() MUL2_SETUP() +#define REC_QR_X 0, 1, 2, 3 +#define REC_QR_Y 4, 5, 6, 7 +#define REC_QR_T 8, 9, 10, 11 + +#define SYN_PQR_DEFINE() {} +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_STRIDE 4 +#define REC_PQR_DEFINE() MUL2_SETUP() +#define REC_PQR_X 0, 1, 2, 3 +#define REC_PQR_Y 4, 5, 6, 7 +#define REC_PQR_Z 8, 9, 10, 11 +#define REC_PQR_XS 12, 13, 14, 15 +#define REC_PQR_YS 16, 17, 18, 19 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(avx512f); +DEFINE_REC_METHODS(avx512f); + +static boolean_t +raidz_will_avx512f_work(void) +{ + return (zfs_avx_available() && + zfs_avx2_available() && + zfs_avx512f_available()); +} + +const raidz_impl_ops_t vdev_raidz_avx512f_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(avx512f), + .rec = RAIDZ_REC_METHODS(avx512f), + .is_supported = &raidz_will_avx512f_work, + .name = "avx512f" +}; + +#endif /* defined(__x86_64) && defined(HAVE_AVX512F) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_impl.h +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_impl.h @@ -0,0 +1,1477 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#ifndef _VDEV_RAIDZ_MATH_IMPL_H +#define _VDEV_RAIDZ_MATH_IMPL_H + +#include + +#define raidz_inline inline __attribute__((always_inline)) +#ifndef noinline +#define noinline __attribute__((noinline)) +#endif + +/* + * Functions calculate multiplication constants for data reconstruction. + * Coefficients depend on RAIDZ geometry, indexes of failed child vdevs, and + * used parity columns for reconstruction. + * @rm RAIDZ map + * @tgtidx array of missing data indexes + * @coeff output array of coefficients. Array must be provided by + * user and must hold minimum MUL_CNT values. + */ +static noinline void +raidz_rec_q_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + + coeff[MUL_Q_X] = gf_exp2(255 - (ncols - x - 1)); +} + +static noinline void +raidz_rec_r_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + + coeff[MUL_R_X] = gf_exp4(255 - (ncols - x - 1)); +} + +static noinline void +raidz_rec_pq_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + const unsigned y = tgtidx[TARGET_Y]; + gf_t a, b, e; + + a = gf_exp2(x + 255 - y); + b = gf_exp2(255 - (ncols - x - 1)); + e = a ^ 0x01; + + coeff[MUL_PQ_X] = gf_div(a, e); + coeff[MUL_PQ_Y] = gf_div(b, e); +} + +static noinline void +raidz_rec_pr_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + const unsigned y = tgtidx[TARGET_Y]; + + gf_t a, b, e; + + a = gf_exp4(x + 255 - y); + b = gf_exp4(255 - (ncols - x - 1)); + e = a ^ 0x01; + + coeff[MUL_PR_X] = gf_div(a, e); + coeff[MUL_PR_Y] = gf_div(b, e); +} + +static noinline void +raidz_rec_qr_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + const unsigned y = tgtidx[TARGET_Y]; + + gf_t nx, ny, nxxy, nxyy, d; + + nx = gf_exp2(ncols - x - 1); + ny = gf_exp2(ncols - y - 1); + nxxy = gf_mul(gf_mul(nx, nx), ny); + nxyy = gf_mul(gf_mul(nx, ny), ny); + d = nxxy ^ nxyy; + + coeff[MUL_QR_XQ] = ny; + coeff[MUL_QR_X] = gf_div(ny, d); + coeff[MUL_QR_YQ] = nx; + coeff[MUL_QR_Y] = gf_div(nx, d); +} + +static noinline void +raidz_rec_pqr_coeff(const raidz_map_t *rm, const int *tgtidx, unsigned *coeff) +{ + const unsigned ncols = raidz_ncols(rm); + const unsigned x = tgtidx[TARGET_X]; + const unsigned y = tgtidx[TARGET_Y]; + const unsigned z = tgtidx[TARGET_Z]; + + gf_t nx, ny, nz, nxx, nyy, nzz, nyyz, nyzz, xd, yd; + + nx = gf_exp2(ncols - x - 1); + ny = gf_exp2(ncols - y - 1); + nz = gf_exp2(ncols - z - 1); + + nxx = gf_exp4(ncols - x - 1); + nyy = gf_exp4(ncols - y - 1); + nzz = gf_exp4(ncols - z - 1); + + nyyz = gf_mul(gf_mul(ny, nz), ny); + nyzz = gf_mul(nzz, ny); + + xd = gf_mul(nxx, ny) ^ gf_mul(nx, nyy) ^ nyyz ^ + gf_mul(nxx, nz) ^ gf_mul(nzz, nx) ^ nyzz; + + yd = gf_inv(ny ^ nz); + + coeff[MUL_PQR_XP] = gf_div(nyyz ^ nyzz, xd); + coeff[MUL_PQR_XQ] = gf_div(nyy ^ nzz, xd); + coeff[MUL_PQR_XR] = gf_div(ny ^ nz, xd); + coeff[MUL_PQR_YU] = nx; + coeff[MUL_PQR_YP] = gf_mul(nz, yd); + coeff[MUL_PQR_YQ] = yd; +} + +/* + * Method for zeroing a buffer (can be implemented using SIMD). + * This method is used by multiple for gen/rec functions. + * + * @dc Destination buffer + * @dsize Destination buffer size + * @private Unused + */ +static int +raidz_zero_abd_cb(void *dc, size_t dsize, void *private) +{ + v_t *dst = (v_t *)dc; + size_t i; + + ZERO_DEFINE(); + + (void) private; /* unused */ + + ZERO(ZERO_D); + + for (i = 0; i < dsize / sizeof (v_t); i += (2 * ZERO_STRIDE)) { + STORE(dst + i, ZERO_D); + STORE(dst + i + ZERO_STRIDE, ZERO_D); + } + + return (0); +} + +#define raidz_zero(dabd, size) \ +{ \ + abd_iterate_func(dabd, 0, size, raidz_zero_abd_cb, NULL); \ +} + +/* + * Method for copying two buffers (can be implemented using SIMD). + * This method is used by multiple for gen/rec functions. + * + * @dc Destination buffer + * @sc Source buffer + * @dsize Destination buffer size + * @ssize Source buffer size + * @private Unused + */ +static int +raidz_copy_abd_cb(void *dc, void *sc, size_t size, void *private) +{ + v_t *dst = (v_t *)dc; + const v_t *src = (v_t *)sc; + size_t i; + + COPY_DEFINE(); + + (void) private; /* unused */ + + for (i = 0; i < size / sizeof (v_t); i += (2 * COPY_STRIDE)) { + LOAD(src + i, COPY_D); + STORE(dst + i, COPY_D); + + LOAD(src + i + COPY_STRIDE, COPY_D); + STORE(dst + i + COPY_STRIDE, COPY_D); + } + + return (0); +} + + +#define raidz_copy(dabd, sabd, size) \ +{ \ + abd_iterate_func2(dabd, sabd, 0, 0, size, raidz_copy_abd_cb, NULL);\ +} + +/* + * Method for adding (XORing) two buffers. + * Source and destination are XORed together and result is stored in + * destination buffer. This method is used by multiple for gen/rec functions. + * + * @dc Destination buffer + * @sc Source buffer + * @dsize Destination buffer size + * @ssize Source buffer size + * @private Unused + */ +static int +raidz_add_abd_cb(void *dc, void *sc, size_t size, void *private) +{ + v_t *dst = (v_t *)dc; + const v_t *src = (v_t *)sc; + size_t i; + + ADD_DEFINE(); + + (void) private; /* unused */ + + for (i = 0; i < size / sizeof (v_t); i += (2 * ADD_STRIDE)) { + LOAD(dst + i, ADD_D); + XOR_ACC(src + i, ADD_D); + STORE(dst + i, ADD_D); + + LOAD(dst + i + ADD_STRIDE, ADD_D); + XOR_ACC(src + i + ADD_STRIDE, ADD_D); + STORE(dst + i + ADD_STRIDE, ADD_D); + } + + return (0); +} + +#define raidz_add(dabd, sabd, size) \ +{ \ + abd_iterate_func2(dabd, sabd, 0, 0, size, raidz_add_abd_cb, NULL);\ +} + +/* + * Method for multiplying a buffer with a constant in GF(2^8). + * Symbols from buffer are multiplied by a constant and result is stored + * back in the same buffer. + * + * @dc In/Out data buffer. + * @size Size of the buffer + * @private pointer to the multiplication constant (unsigned) + */ +static int +raidz_mul_abd_cb(void *dc, size_t size, void *private) +{ + const unsigned mul = *((unsigned *)private); + v_t *d = (v_t *)dc; + size_t i; + + MUL_DEFINE(); + + for (i = 0; i < size / sizeof (v_t); i += (2 * MUL_STRIDE)) { + LOAD(d + i, MUL_D); + MUL(mul, MUL_D); + STORE(d + i, MUL_D); + + LOAD(d + i + MUL_STRIDE, MUL_D); + MUL(mul, MUL_D); + STORE(d + i + MUL_STRIDE, MUL_D); + } + + return (0); +} + + +/* + * Syndrome generation/update macros + * + * Require LOAD(), XOR(), STORE(), MUL2(), and MUL4() macros + */ +#define P_D_SYNDROME(D, T, t) \ +{ \ + LOAD((t), T); \ + XOR(D, T); \ + STORE((t), T); \ +} + +#define Q_D_SYNDROME(D, T, t) \ +{ \ + LOAD((t), T); \ + MUL2(T); \ + XOR(D, T); \ + STORE((t), T); \ +} + +#define Q_SYNDROME(T, t) \ +{ \ + LOAD((t), T); \ + MUL2(T); \ + STORE((t), T); \ +} + +#define R_D_SYNDROME(D, T, t) \ +{ \ + LOAD((t), T); \ + MUL4(T); \ + XOR(D, T); \ + STORE((t), T); \ +} + +#define R_SYNDROME(T, t) \ +{ \ + LOAD((t), T); \ + MUL4(T); \ + STORE((t), T); \ +} + + +/* + * PARITY CALCULATION + * + * Macros *_SYNDROME are used for parity/syndrome calculation. + * *_D_SYNDROME() macros are used to calculate syndrome between 0 and + * length of data column, and *_SYNDROME() macros are only for updating + * the parity/syndrome if data column is shorter. + * + * P parity is calculated using raidz_add_abd(). + */ + +/* + * Generate P parity (RAIDZ1) + * + * @rm RAIDZ map + */ +static raidz_inline void +raidz_generate_p_impl(raidz_map_t * const rm) +{ + size_t c; + const size_t ncols = raidz_ncols(rm); + const size_t psize = rm->rm_col[CODE_P].rc_size; + abd_t *pabd = rm->rm_col[CODE_P].rc_abd; + size_t size; + abd_t *dabd; + + raidz_math_begin(); + + /* start with first data column */ + raidz_copy(pabd, rm->rm_col[1].rc_abd, psize); + + for (c = 2; c < ncols; c++) { + dabd = rm->rm_col[c].rc_abd; + size = rm->rm_col[c].rc_size; + + /* add data column */ + raidz_add(pabd, dabd, size); + } + + raidz_math_end(); +} + + +/* + * Generate PQ parity (RAIDZ2) + * The function is called per data column. + * + * @c array of pointers to parity (code) columns + * @dc pointer to data column + * @csize size of parity columns + * @dsize size of data column + */ +static void +raidz_gen_pq_add(void **c, const void *dc, const size_t csize, + const size_t dsize) +{ + v_t *p = (v_t *)c[0]; + v_t *q = (v_t *)c[1]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const qend = q + (csize / sizeof (v_t)); + + GEN_PQ_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += GEN_PQ_STRIDE, p += GEN_PQ_STRIDE, + q += GEN_PQ_STRIDE) { + LOAD(d, GEN_PQ_D); + P_D_SYNDROME(GEN_PQ_D, GEN_PQ_C, p); + Q_D_SYNDROME(GEN_PQ_D, GEN_PQ_C, q); + } + for (; q < qend; q += GEN_PQ_STRIDE) { + Q_SYNDROME(GEN_PQ_C, q); + } +} + + +/* + * Generate PQ parity (RAIDZ2) + * + * @rm RAIDZ map + */ +static raidz_inline void +raidz_generate_pq_impl(raidz_map_t * const rm) +{ + size_t c; + const size_t ncols = raidz_ncols(rm); + const size_t csize = rm->rm_col[CODE_P].rc_size; + size_t dsize; + abd_t *dabd; + abd_t *cabds[] = { + rm->rm_col[CODE_P].rc_abd, + rm->rm_col[CODE_Q].rc_abd + }; + + raidz_math_begin(); + + raidz_copy(cabds[CODE_P], rm->rm_col[2].rc_abd, csize); + raidz_copy(cabds[CODE_Q], rm->rm_col[2].rc_abd, csize); + + for (c = 3; c < ncols; c++) { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + + abd_raidz_gen_iterate(cabds, dabd, csize, dsize, 2, + raidz_gen_pq_add); + } + + raidz_math_end(); +} + + +/* + * Generate PQR parity (RAIDZ3) + * The function is called per data column. + * + * @c array of pointers to parity (code) columns + * @dc pointer to data column + * @csize size of parity columns + * @dsize size of data column + */ +static void +raidz_gen_pqr_add(void **c, const void *dc, const size_t csize, + const size_t dsize) +{ + v_t *p = (v_t *)c[0]; + v_t *q = (v_t *)c[1]; + v_t *r = (v_t *)c[CODE_R]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const qend = q + (csize / sizeof (v_t)); + + GEN_PQR_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += GEN_PQR_STRIDE, p += GEN_PQR_STRIDE, + q += GEN_PQR_STRIDE, r += GEN_PQR_STRIDE) { + LOAD(d, GEN_PQR_D); + P_D_SYNDROME(GEN_PQR_D, GEN_PQR_C, p); + Q_D_SYNDROME(GEN_PQR_D, GEN_PQR_C, q); + R_D_SYNDROME(GEN_PQR_D, GEN_PQR_C, r); + } + for (; q < qend; q += GEN_PQR_STRIDE, r += GEN_PQR_STRIDE) { + Q_SYNDROME(GEN_PQR_C, q); + R_SYNDROME(GEN_PQR_C, r); + } +} + + +/* + * Generate PQR parity (RAIDZ2) + * + * @rm RAIDZ map + */ +static raidz_inline void +raidz_generate_pqr_impl(raidz_map_t * const rm) +{ + size_t c; + const size_t ncols = raidz_ncols(rm); + const size_t csize = rm->rm_col[CODE_P].rc_size; + size_t dsize; + abd_t *dabd; + abd_t *cabds[] = { + rm->rm_col[CODE_P].rc_abd, + rm->rm_col[CODE_Q].rc_abd, + rm->rm_col[CODE_R].rc_abd + }; + + raidz_math_begin(); + + raidz_copy(cabds[CODE_P], rm->rm_col[3].rc_abd, csize); + raidz_copy(cabds[CODE_Q], rm->rm_col[3].rc_abd, csize); + raidz_copy(cabds[CODE_R], rm->rm_col[3].rc_abd, csize); + + for (c = 4; c < ncols; c++) { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + + abd_raidz_gen_iterate(cabds, dabd, csize, dsize, 3, + raidz_gen_pqr_add); + } + + raidz_math_end(); +} + + +/* + * DATA RECONSTRUCTION + * + * Data reconstruction process consists of two phases: + * - Syndrome calculation + * - Data reconstruction + * + * Syndrome is calculated by generating parity using available data columns + * and zeros in places of erasure. Existing parity is added to corresponding + * syndrome value to obtain the [P|Q|R]syn values from equation: + * P = Psyn + Dx + Dy + Dz + * Q = Qsyn + 2^x * Dx + 2^y * Dy + 2^z * Dz + * R = Rsyn + 4^x * Dx + 4^y * Dy + 4^z * Dz + * + * For data reconstruction phase, the corresponding equations are solved + * for missing data (Dx, Dy, Dz). This generally involves multiplying known + * symbols by an coefficient and adding them together. The multiplication + * constant coefficients are calculated ahead of the operation in + * raidz_rec_[q|r|pq|pq|qr|pqr]_coeff() functions. + * + * IMPLEMENTATION NOTE: RAID-Z block can have complex geometry, with "big" + * and "short" columns. + * For this reason, reconstruction is performed in minimum of + * two steps. First, from offset 0 to short_size, then from short_size to + * short_size. Calculation functions REC_[*]_BLOCK() are implemented to work + * over both ranges. The split also enables removal of conditional expressions + * from loop bodies, improving throughput of SIMD implementations. + * For the best performance, all functions marked with raidz_inline attribute + * must be inlined by compiler. + * + * parity data + * columns columns + * <----------> <------------------> + * x y <----+ missing columns (x, y) + * | | + * +---+---+---+---+-v-+---+-v-+---+ ^ 0 + * | | | | | | | | | | + * | | | | | | | | | | + * | P | Q | R | D | D | D | D | D | | + * | | | | 0 | 1 | 2 | 3 | 4 | | + * | | | | | | | | | v + * | | | | | +---+---+---+ ^ short_size + * | | | | | | | + * +---+---+---+---+---+ v big_size + * <------------------> <----------> + * big columns short columns + * + */ + + + + +/* + * Reconstruct single data column using P parity + * + * @syn_method raidz_add_abd() + * @rec_method not applicable + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_p_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + const size_t xsize = rm->rm_col[x].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + size_t size; + abd_t *dabd; + + raidz_math_begin(); + + /* copy P into target */ + raidz_copy(xabd, rm->rm_col[CODE_P].rc_abd, xsize); + + /* generate p_syndrome */ + for (c = firstdc; c < ncols; c++) { + if (c == x) + continue; + + dabd = rm->rm_col[c].rc_abd; + size = MIN(rm->rm_col[c].rc_size, xsize); + + raidz_add(xabd, dabd, size); + } + + raidz_math_end(); + + return (1 << CODE_P); +} + + +/* + * Generate Q syndrome (Qsyn) + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @xsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_q_abd(void **xc, const void *dc, const size_t xsize, + const size_t dsize) +{ + v_t *x = (v_t *)xc[TARGET_X]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const xend = x + (xsize / sizeof (v_t)); + + SYN_Q_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE) { + LOAD(d, SYN_Q_D); + Q_D_SYNDROME(SYN_Q_D, SYN_Q_X, x); + } + for (; x < xend; x += SYN_STRIDE) { + Q_SYNDROME(SYN_Q_X, x); + } +} + + +/* + * Reconstruct single data column using Q parity + * + * @syn_method raidz_add_abd() + * @rec_method raidz_mul_abd_cb() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_q_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + abd_t *xabd = rm->rm_col[x].rc_abd; + const size_t xsize = rm->rm_col[x].rc_size; + abd_t *tabds[] = { xabd }; + + unsigned coeff[MUL_CNT]; + raidz_rec_q_coeff(rm, tgtidx, coeff); + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + } + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 1, + raidz_syn_q_abd); + } + + /* add Q to the syndrome */ + raidz_add(xabd, rm->rm_col[CODE_Q].rc_abd, xsize); + + /* transform the syndrome */ + abd_iterate_func(xabd, 0, xsize, raidz_mul_abd_cb, (void*) coeff); + + raidz_math_end(); + + return (1 << CODE_Q); +} + + +/* + * Generate R syndrome (Rsyn) + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @tsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_r_abd(void **xc, const void *dc, const size_t tsize, + const size_t dsize) +{ + v_t *x = (v_t *)xc[TARGET_X]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const xend = x + (tsize / sizeof (v_t)); + + SYN_R_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE) { + LOAD(d, SYN_R_D); + R_D_SYNDROME(SYN_R_D, SYN_R_X, x); + } + for (; x < xend; x += SYN_STRIDE) { + R_SYNDROME(SYN_R_X, x); + } +} + + +/* + * Reconstruct single data column using R parity + * + * @syn_method raidz_add_abd() + * @rec_method raidz_mul_abd_cb() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_r_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + const size_t xsize = rm->rm_col[x].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + abd_t *tabds[] = { xabd }; + + unsigned coeff[MUL_CNT]; + raidz_rec_r_coeff(rm, tgtidx, coeff); + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + } + + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 1, + raidz_syn_r_abd); + } + + /* add R to the syndrome */ + raidz_add(xabd, rm->rm_col[CODE_R].rc_abd, xsize); + + /* transform the syndrome */ + abd_iterate_func(xabd, 0, xsize, raidz_mul_abd_cb, (void *)coeff); + + raidz_math_end(); + + return (1 << CODE_R); +} + + +/* + * Generate P and Q syndromes + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @tsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_pq_abd(void **tc, const void *dc, const size_t tsize, + const size_t dsize) +{ + v_t *x = (v_t *)tc[TARGET_X]; + v_t *y = (v_t *)tc[TARGET_Y]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const yend = y + (tsize / sizeof (v_t)); + + SYN_PQ_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE, y += SYN_STRIDE) { + LOAD(d, SYN_PQ_D); + P_D_SYNDROME(SYN_PQ_D, SYN_PQ_X, x); + Q_D_SYNDROME(SYN_PQ_D, SYN_PQ_X, y); + } + for (; y < yend; y += SYN_STRIDE) { + Q_SYNDROME(SYN_PQ_X, y); + } +} + +/* + * Reconstruct data using PQ parity and PQ syndromes + * + * @tc syndrome/result columns + * @tsize size of syndrome/result columns + * @c parity columns + * @mul array of multiplication constants + */ +static void +raidz_rec_pq_abd(void **tc, const size_t tsize, void **c, + const unsigned *mul) +{ + v_t *x = (v_t *)tc[TARGET_X]; + v_t *y = (v_t *)tc[TARGET_Y]; + const v_t * const xend = x + (tsize / sizeof (v_t)); + const v_t *p = (v_t *)c[CODE_P]; + const v_t *q = (v_t *)c[CODE_Q]; + + REC_PQ_DEFINE(); + + for (; x < xend; x += REC_PQ_STRIDE, y += REC_PQ_STRIDE, + p += REC_PQ_STRIDE, q += REC_PQ_STRIDE) { + LOAD(x, REC_PQ_X); + LOAD(y, REC_PQ_Y); + + XOR_ACC(p, REC_PQ_X); + XOR_ACC(q, REC_PQ_Y); + + /* Save Pxy */ + COPY(REC_PQ_X, REC_PQ_T); + + /* Calc X */ + MUL(mul[MUL_PQ_X], REC_PQ_X); + MUL(mul[MUL_PQ_Y], REC_PQ_Y); + XOR(REC_PQ_Y, REC_PQ_X); + STORE(x, REC_PQ_X); + + /* Calc Y */ + XOR(REC_PQ_T, REC_PQ_X); + STORE(y, REC_PQ_X); + } +} + + +/* + * Reconstruct two data columns using PQ parity + * + * @syn_method raidz_syn_pq_abd() + * @rec_method raidz_rec_pq_abd() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_pq_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + const size_t y = tgtidx[TARGET_Y]; + const size_t xsize = rm->rm_col[x].rc_size; + const size_t ysize = rm->rm_col[y].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + abd_t *yabd = rm->rm_col[y].rc_abd; + abd_t *tabds[2] = { xabd, yabd }; + abd_t *cabds[] = { + rm->rm_col[CODE_P].rc_abd, + rm->rm_col[CODE_Q].rc_abd + }; + + unsigned coeff[MUL_CNT]; + raidz_rec_pq_coeff(rm, tgtidx, coeff); + + /* + * Check if some of targets is shorter then others + * In this case, shorter target needs to be replaced with + * new buffer so that syndrome can be calculated. + */ + if (ysize < xsize) { + yabd = abd_alloc(xsize, B_FALSE); + tabds[1] = yabd; + } + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + raidz_copy(yabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + raidz_zero(yabd, xsize); + } + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x || c == y) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 2, + raidz_syn_pq_abd); + } + + abd_raidz_rec_iterate(cabds, tabds, xsize, 2, raidz_rec_pq_abd, coeff); + + /* Copy shorter targets back to the original abd buffer */ + if (ysize < xsize) + raidz_copy(rm->rm_col[y].rc_abd, yabd, ysize); + + raidz_math_end(); + + if (ysize < xsize) + abd_free(yabd); + + return ((1 << CODE_P) | (1 << CODE_Q)); +} + + +/* + * Generate P and R syndromes + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @tsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_pr_abd(void **c, const void *dc, const size_t tsize, + const size_t dsize) +{ + v_t *x = (v_t *)c[TARGET_X]; + v_t *y = (v_t *)c[TARGET_Y]; + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + const v_t * const yend = y + (tsize / sizeof (v_t)); + + SYN_PR_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE, y += SYN_STRIDE) { + LOAD(d, SYN_PR_D); + P_D_SYNDROME(SYN_PR_D, SYN_PR_X, x); + R_D_SYNDROME(SYN_PR_D, SYN_PR_X, y); + } + for (; y < yend; y += SYN_STRIDE) { + R_SYNDROME(SYN_PR_X, y); + } +} + +/* + * Reconstruct data using PR parity and PR syndromes + * + * @tc syndrome/result columns + * @tsize size of syndrome/result columns + * @c parity columns + * @mul array of multiplication constants + */ +static void +raidz_rec_pr_abd(void **t, const size_t tsize, void **c, + const unsigned *mul) +{ + v_t *x = (v_t *)t[TARGET_X]; + v_t *y = (v_t *)t[TARGET_Y]; + const v_t * const xend = x + (tsize / sizeof (v_t)); + const v_t *p = (v_t *)c[CODE_P]; + const v_t *q = (v_t *)c[CODE_Q]; + + REC_PR_DEFINE(); + + for (; x < xend; x += REC_PR_STRIDE, y += REC_PR_STRIDE, + p += REC_PR_STRIDE, q += REC_PR_STRIDE) { + LOAD(x, REC_PR_X); + LOAD(y, REC_PR_Y); + XOR_ACC(p, REC_PR_X); + XOR_ACC(q, REC_PR_Y); + + /* Save Pxy */ + COPY(REC_PR_X, REC_PR_T); + + /* Calc X */ + MUL(mul[MUL_PR_X], REC_PR_X); + MUL(mul[MUL_PR_Y], REC_PR_Y); + XOR(REC_PR_Y, REC_PR_X); + STORE(x, REC_PR_X); + + /* Calc Y */ + XOR(REC_PR_T, REC_PR_X); + STORE(y, REC_PR_X); + } +} + + +/* + * Reconstruct two data columns using PR parity + * + * @syn_method raidz_syn_pr_abd() + * @rec_method raidz_rec_pr_abd() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_pr_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[0]; + const size_t y = tgtidx[1]; + const size_t xsize = rm->rm_col[x].rc_size; + const size_t ysize = rm->rm_col[y].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + abd_t *yabd = rm->rm_col[y].rc_abd; + abd_t *tabds[2] = { xabd, yabd }; + abd_t *cabds[] = { + rm->rm_col[CODE_P].rc_abd, + rm->rm_col[CODE_R].rc_abd + }; + unsigned coeff[MUL_CNT]; + raidz_rec_pr_coeff(rm, tgtidx, coeff); + + /* + * Check if some of targets are shorter then others. + * They need to be replaced with a new buffer so that syndrome can + * be calculated on full length. + */ + if (ysize < xsize) { + yabd = abd_alloc(xsize, B_FALSE); + tabds[1] = yabd; + } + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + raidz_copy(yabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + raidz_zero(yabd, xsize); + } + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x || c == y) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 2, + raidz_syn_pr_abd); + } + + abd_raidz_rec_iterate(cabds, tabds, xsize, 2, raidz_rec_pr_abd, coeff); + + /* + * Copy shorter targets back to the original abd buffer + */ + if (ysize < xsize) + raidz_copy(rm->rm_col[y].rc_abd, yabd, ysize); + + raidz_math_end(); + + if (ysize < xsize) + abd_free(yabd); + + return ((1 << CODE_P) | (1 << CODE_Q)); +} + + +/* + * Generate Q and R syndromes + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @tsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_qr_abd(void **c, const void *dc, const size_t tsize, + const size_t dsize) +{ + v_t *x = (v_t *)c[TARGET_X]; + v_t *y = (v_t *)c[TARGET_Y]; + const v_t * const xend = x + (tsize / sizeof (v_t)); + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + + SYN_QR_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE, y += SYN_STRIDE) { + LOAD(d, SYN_PQ_D); + Q_D_SYNDROME(SYN_QR_D, SYN_QR_X, x); + R_D_SYNDROME(SYN_QR_D, SYN_QR_X, y); + } + for (; x < xend; x += SYN_STRIDE, y += SYN_STRIDE) { + Q_SYNDROME(SYN_QR_X, x); + R_SYNDROME(SYN_QR_X, y); + } +} + + +/* + * Reconstruct data using QR parity and QR syndromes + * + * @tc syndrome/result columns + * @tsize size of syndrome/result columns + * @c parity columns + * @mul array of multiplication constants + */ +static void +raidz_rec_qr_abd(void **t, const size_t tsize, void **c, + const unsigned *mul) +{ + v_t *x = (v_t *)t[TARGET_X]; + v_t *y = (v_t *)t[TARGET_Y]; + const v_t * const xend = x + (tsize / sizeof (v_t)); + const v_t *p = (v_t *)c[CODE_P]; + const v_t *q = (v_t *)c[CODE_Q]; + + REC_QR_DEFINE(); + + for (; x < xend; x += REC_QR_STRIDE, y += REC_QR_STRIDE, + p += REC_QR_STRIDE, q += REC_QR_STRIDE) { + LOAD(x, REC_QR_X); + LOAD(y, REC_QR_Y); + + XOR_ACC(p, REC_QR_X); + XOR_ACC(q, REC_QR_Y); + + /* Save Pxy */ + COPY(REC_QR_X, REC_QR_T); + + /* Calc X */ + MUL(mul[MUL_QR_XQ], REC_QR_X); /* X = Q * xqm */ + XOR(REC_QR_Y, REC_QR_X); /* X = R ^ X */ + MUL(mul[MUL_QR_X], REC_QR_X); /* X = X * xm */ + STORE(x, REC_QR_X); + + /* Calc Y */ + MUL(mul[MUL_QR_YQ], REC_QR_T); /* X = Q * xqm */ + XOR(REC_QR_Y, REC_QR_T); /* X = R ^ X */ + MUL(mul[MUL_QR_Y], REC_QR_T); /* X = X * xm */ + STORE(y, REC_QR_T); + } +} + + +/* + * Reconstruct two data columns using QR parity + * + * @syn_method raidz_syn_qr_abd() + * @rec_method raidz_rec_qr_abd() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_qr_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + const size_t y = tgtidx[TARGET_Y]; + const size_t xsize = rm->rm_col[x].rc_size; + const size_t ysize = rm->rm_col[y].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + abd_t *yabd = rm->rm_col[y].rc_abd; + abd_t *tabds[2] = { xabd, yabd }; + abd_t *cabds[] = { + rm->rm_col[CODE_Q].rc_abd, + rm->rm_col[CODE_R].rc_abd + }; + unsigned coeff[MUL_CNT]; + raidz_rec_qr_coeff(rm, tgtidx, coeff); + + /* + * Check if some of targets is shorter then others + * In this case, shorter target needs to be replaced with + * new buffer so that syndrome can be calculated. + */ + if (ysize < xsize) { + yabd = abd_alloc(xsize, B_FALSE); + tabds[1] = yabd; + } + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + raidz_copy(yabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + raidz_zero(yabd, xsize); + } + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x || c == y) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 2, + raidz_syn_qr_abd); + } + + abd_raidz_rec_iterate(cabds, tabds, xsize, 2, raidz_rec_qr_abd, coeff); + + /* + * Copy shorter targets back to the original abd buffer + */ + if (ysize < xsize) + raidz_copy(rm->rm_col[y].rc_abd, yabd, ysize); + + raidz_math_end(); + + if (ysize < xsize) + abd_free(yabd); + + + return ((1 << CODE_Q) | (1 << CODE_R)); +} + + +/* + * Generate P, Q, and R syndromes + * + * @xc array of pointers to syndrome columns + * @dc data column (NULL if missing) + * @tsize size of syndrome columns + * @dsize size of data column (0 if missing) + */ +static void +raidz_syn_pqr_abd(void **c, const void *dc, const size_t tsize, + const size_t dsize) +{ + v_t *x = (v_t *)c[TARGET_X]; + v_t *y = (v_t *)c[TARGET_Y]; + v_t *z = (v_t *)c[TARGET_Z]; + const v_t * const yend = y + (tsize / sizeof (v_t)); + const v_t *d = (v_t *)dc; + const v_t * const dend = d + (dsize / sizeof (v_t)); + + SYN_PQR_DEFINE(); + + MUL2_SETUP(); + + for (; d < dend; d += SYN_STRIDE, x += SYN_STRIDE, y += SYN_STRIDE, + z += SYN_STRIDE) { + LOAD(d, SYN_PQR_D); + P_D_SYNDROME(SYN_PQR_D, SYN_PQR_X, x) + Q_D_SYNDROME(SYN_PQR_D, SYN_PQR_X, y); + R_D_SYNDROME(SYN_PQR_D, SYN_PQR_X, z); + } + for (; y < yend; y += SYN_STRIDE, z += SYN_STRIDE) { + Q_SYNDROME(SYN_PQR_X, y); + R_SYNDROME(SYN_PQR_X, z); + } +} + + +/* + * Reconstruct data using PRQ parity and PQR syndromes + * + * @tc syndrome/result columns + * @tsize size of syndrome/result columns + * @c parity columns + * @mul array of multiplication constants + */ +static void +raidz_rec_pqr_abd(void **t, const size_t tsize, void **c, + const unsigned * const mul) +{ + v_t *x = (v_t *)t[TARGET_X]; + v_t *y = (v_t *)t[TARGET_Y]; + v_t *z = (v_t *)t[TARGET_Z]; + const v_t * const xend = x + (tsize / sizeof (v_t)); + const v_t *p = (v_t *)c[CODE_P]; + const v_t *q = (v_t *)c[CODE_Q]; + const v_t *r = (v_t *)c[CODE_R]; + + REC_PQR_DEFINE(); + + for (; x < xend; x += REC_PQR_STRIDE, y += REC_PQR_STRIDE, + z += REC_PQR_STRIDE, p += REC_PQR_STRIDE, q += REC_PQR_STRIDE, + r += REC_PQR_STRIDE) { + LOAD(x, REC_PQR_X); + LOAD(y, REC_PQR_Y); + LOAD(z, REC_PQR_Z); + + XOR_ACC(p, REC_PQR_X); + XOR_ACC(q, REC_PQR_Y); + XOR_ACC(r, REC_PQR_Z); + + /* Save Pxyz and Qxyz */ + COPY(REC_PQR_X, REC_PQR_XS); + COPY(REC_PQR_Y, REC_PQR_YS); + + /* Calc X */ + MUL(mul[MUL_PQR_XP], REC_PQR_X); /* Xp = Pxyz * xp */ + MUL(mul[MUL_PQR_XQ], REC_PQR_Y); /* Xq = Qxyz * xq */ + XOR(REC_PQR_Y, REC_PQR_X); + MUL(mul[MUL_PQR_XR], REC_PQR_Z); /* Xr = Rxyz * xr */ + XOR(REC_PQR_Z, REC_PQR_X); /* X = Xp + Xq + Xr */ + STORE(x, REC_PQR_X); + + /* Calc Y */ + XOR(REC_PQR_X, REC_PQR_XS); /* Pyz = Pxyz + X */ + MUL(mul[MUL_PQR_YU], REC_PQR_X); /* Xq = X * upd_q */ + XOR(REC_PQR_X, REC_PQR_YS); /* Qyz = Qxyz + Xq */ + COPY(REC_PQR_XS, REC_PQR_X); /* restore Pyz */ + MUL(mul[MUL_PQR_YP], REC_PQR_X); /* Yp = Pyz * yp */ + MUL(mul[MUL_PQR_YQ], REC_PQR_YS); /* Yq = Qyz * yq */ + XOR(REC_PQR_X, REC_PQR_YS); /* Y = Yp + Yq */ + STORE(y, REC_PQR_YS); + + /* Calc Z */ + XOR(REC_PQR_XS, REC_PQR_YS); /* Z = Pz = Pyz + Y */ + STORE(z, REC_PQR_YS); + } +} + + +/* + * Reconstruct three data columns using PQR parity + * + * @syn_method raidz_syn_pqr_abd() + * @rec_method raidz_rec_pqr_abd() + * + * @rm RAIDZ map + * @tgtidx array of missing data indexes + */ +static raidz_inline int +raidz_reconstruct_pqr_impl(raidz_map_t *rm, const int *tgtidx) +{ + size_t c; + size_t dsize; + abd_t *dabd; + const size_t firstdc = raidz_parity(rm); + const size_t ncols = raidz_ncols(rm); + const size_t x = tgtidx[TARGET_X]; + const size_t y = tgtidx[TARGET_Y]; + const size_t z = tgtidx[TARGET_Z]; + const size_t xsize = rm->rm_col[x].rc_size; + const size_t ysize = rm->rm_col[y].rc_size; + const size_t zsize = rm->rm_col[z].rc_size; + abd_t *xabd = rm->rm_col[x].rc_abd; + abd_t *yabd = rm->rm_col[y].rc_abd; + abd_t *zabd = rm->rm_col[z].rc_abd; + abd_t *tabds[] = { xabd, yabd, zabd }; + abd_t *cabds[] = { + rm->rm_col[CODE_P].rc_abd, + rm->rm_col[CODE_Q].rc_abd, + rm->rm_col[CODE_R].rc_abd + }; + unsigned coeff[MUL_CNT]; + raidz_rec_pqr_coeff(rm, tgtidx, coeff); + + /* + * Check if some of targets is shorter then others + * In this case, shorter target needs to be replaced with + * new buffer so that syndrome can be calculated. + */ + if (ysize < xsize) { + yabd = abd_alloc(xsize, B_FALSE); + tabds[1] = yabd; + } + if (zsize < xsize) { + zabd = abd_alloc(xsize, B_FALSE); + tabds[2] = zabd; + } + + raidz_math_begin(); + + /* Start with first data column if present */ + if (firstdc != x) { + raidz_copy(xabd, rm->rm_col[firstdc].rc_abd, xsize); + raidz_copy(yabd, rm->rm_col[firstdc].rc_abd, xsize); + raidz_copy(zabd, rm->rm_col[firstdc].rc_abd, xsize); + } else { + raidz_zero(xabd, xsize); + raidz_zero(yabd, xsize); + raidz_zero(zabd, xsize); + } + + /* generate q_syndrome */ + for (c = firstdc+1; c < ncols; c++) { + if (c == x || c == y || c == z) { + dabd = NULL; + dsize = 0; + } else { + dabd = rm->rm_col[c].rc_abd; + dsize = rm->rm_col[c].rc_size; + } + + abd_raidz_gen_iterate(tabds, dabd, xsize, dsize, 3, + raidz_syn_pqr_abd); + } + + abd_raidz_rec_iterate(cabds, tabds, xsize, 3, raidz_rec_pqr_abd, coeff); + + /* + * Copy shorter targets back to the original abd buffer + */ + if (ysize < xsize) + raidz_copy(rm->rm_col[y].rc_abd, yabd, ysize); + if (zsize < xsize) + raidz_copy(rm->rm_col[z].rc_abd, zabd, zsize); + + raidz_math_end(); + + if (ysize < xsize) + abd_free(yabd); + if (zsize < xsize) + abd_free(zabd); + + return ((1 << CODE_P) | (1 << CODE_Q) | (1 << CODE_R)); +} + +#endif /* _VDEV_RAIDZ_MATH_IMPL_H */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_scalar.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_scalar.c @@ -0,0 +1,336 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include + +/* + * Provide native CPU scalar routines. + * Support 32bit and 64bit CPUs. + */ +#if ((~(0x0ULL)) >> 24) == 0xffULL +#define ELEM_SIZE 4 +typedef uint32_t iv_t; +#elif ((~(0x0ULL)) >> 56) == 0xffULL +#define ELEM_SIZE 8 +typedef uint64_t iv_t; +#endif + +/* + * Vector type used in scalar implementation + * + * The union is expected to be of native CPU register size. Since addition + * uses XOR operation, it can be performed an all byte elements at once. + * Multiplication requires per byte access. + */ +typedef union { + iv_t e; + uint8_t b[ELEM_SIZE]; +} v_t; + +/* + * Precomputed lookup tables for multiplication by a constant + * + * Reconstruction path requires multiplication by a constant factors. Instead of + * performing two step lookup (log & exp tables), a direct lookup can be used + * instead. Multiplication of element 'a' by a constant 'c' is obtained as: + * + * r = vdev_raidz_mul_lt[c_log][a]; + * + * where c_log = vdev_raidz_log2[c]. Log of coefficient factors is used because + * they are faster to obtain while solving the syndrome equations. + * + * PERFORMANCE NOTE: + * Even though the complete lookup table uses 64kiB, only relatively small + * portion of it is used at the same time. Following shows number of accessed + * bytes for different cases: + * - 1 failed disk: 256B (1 mul. coefficient) + * - 2 failed disks: 512B (2 mul. coefficients) + * - 3 failed disks: 1536B (6 mul. coefficients) + * + * Size of actually accessed lookup table regions is only larger for + * reconstruction of 3 failed disks, when compared to traditional log/exp + * method. But since the result is obtained in one lookup step performance is + * doubled. + */ +static uint8_t vdev_raidz_mul_lt[256][256] __attribute__((aligned(256))); + +static void +raidz_init_scalar(void) +{ + int c, i; + for (c = 0; c < 256; c++) + for (i = 0; i < 256; i++) + vdev_raidz_mul_lt[c][i] = gf_mul(c, i); + +} + +#define PREFETCHNTA(ptr, offset) {} +#define PREFETCH(ptr, offset) {} + +#define XOR_ACC(src, acc) acc.e ^= ((v_t *)src)[0].e +#define XOR(src, acc) acc.e ^= src.e +#define ZERO(acc) acc.e = 0 +#define COPY(src, dst) dst = src +#define LOAD(src, val) val = ((v_t *)src)[0] +#define STORE(dst, val) ((v_t *)dst)[0] = val + +/* + * Constants used for optimized multiplication by 2. + */ +static const struct { + iv_t mod; + iv_t mask; + iv_t msb; +} scalar_mul2_consts = { +#if ELEM_SIZE == 8 + .mod = 0x1d1d1d1d1d1d1d1dULL, + .mask = 0xfefefefefefefefeULL, + .msb = 0x8080808080808080ULL, +#else + .mod = 0x1d1d1d1dULL, + .mask = 0xfefefefeULL, + .msb = 0x80808080ULL, +#endif +}; + +#define MUL2_SETUP() {} + +#define MUL2(a) \ +{ \ + iv_t _mask; \ + \ + _mask = (a).e & scalar_mul2_consts.msb; \ + _mask = (_mask << 1) - (_mask >> 7); \ + (a).e = ((a).e << 1) & scalar_mul2_consts.mask; \ + (a).e = (a).e ^ (_mask & scalar_mul2_consts.mod); \ +} + +#define MUL4(a) \ +{ \ + MUL2(a); \ + MUL2(a); \ +} + +#define MUL(c, a) \ +{ \ + const uint8_t *mul_lt = vdev_raidz_mul_lt[c]; \ + switch (ELEM_SIZE) { \ + case 8: \ + a.b[7] = mul_lt[a.b[7]]; \ + a.b[6] = mul_lt[a.b[6]]; \ + a.b[5] = mul_lt[a.b[5]]; \ + a.b[4] = mul_lt[a.b[4]]; \ + case 4: \ + a.b[3] = mul_lt[a.b[3]]; \ + a.b[2] = mul_lt[a.b[2]]; \ + a.b[1] = mul_lt[a.b[1]]; \ + a.b[0] = mul_lt[a.b[0]]; \ + break; \ + } \ +} + +#define raidz_math_begin() {} +#define raidz_math_end() {} + +#define SYN_STRIDE 1 + +#define ZERO_DEFINE() v_t d0 +#define ZERO_STRIDE 1 +#define ZERO_D d0 + +#define COPY_DEFINE() v_t d0 +#define COPY_STRIDE 1 +#define COPY_D d0 + +#define ADD_DEFINE() v_t d0 +#define ADD_STRIDE 1 +#define ADD_D d0 + +#define MUL_DEFINE() v_t d0 +#define MUL_STRIDE 1 +#define MUL_D d0 + +#define GEN_P_STRIDE 1 +#define GEN_P_DEFINE() v_t p0 +#define GEN_P_P p0 + +#define GEN_PQ_STRIDE 1 +#define GEN_PQ_DEFINE() v_t d0, c0 +#define GEN_PQ_D d0 +#define GEN_PQ_C c0 + +#define GEN_PQR_STRIDE 1 +#define GEN_PQR_DEFINE() v_t d0, c0 +#define GEN_PQR_D d0 +#define GEN_PQR_C c0 + +#define SYN_Q_DEFINE() v_t d0, x0 +#define SYN_Q_D d0 +#define SYN_Q_X x0 + + +#define SYN_R_DEFINE() v_t d0, x0 +#define SYN_R_D d0 +#define SYN_R_X x0 + + +#define SYN_PQ_DEFINE() v_t d0, x0 +#define SYN_PQ_D d0 +#define SYN_PQ_X x0 + + +#define REC_PQ_STRIDE 1 +#define REC_PQ_DEFINE() v_t x0, y0, t0 +#define REC_PQ_X x0 +#define REC_PQ_Y y0 +#define REC_PQ_T t0 + + +#define SYN_PR_DEFINE() v_t d0, x0 +#define SYN_PR_D d0 +#define SYN_PR_X x0 + +#define REC_PR_STRIDE 1 +#define REC_PR_DEFINE() v_t x0, y0, t0 +#define REC_PR_X x0 +#define REC_PR_Y y0 +#define REC_PR_T t0 + + +#define SYN_QR_DEFINE() v_t d0, x0 +#define SYN_QR_D d0 +#define SYN_QR_X x0 + + +#define REC_QR_STRIDE 1 +#define REC_QR_DEFINE() v_t x0, y0, t0 +#define REC_QR_X x0 +#define REC_QR_Y y0 +#define REC_QR_T t0 + + +#define SYN_PQR_DEFINE() v_t d0, x0 +#define SYN_PQR_D d0 +#define SYN_PQR_X x0 + +#define REC_PQR_STRIDE 1 +#define REC_PQR_DEFINE() v_t x0, y0, z0, xs0, ys0 +#define REC_PQR_X x0 +#define REC_PQR_Y y0 +#define REC_PQR_Z z0 +#define REC_PQR_XS xs0 +#define REC_PQR_YS ys0 + +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(scalar); +DEFINE_REC_METHODS(scalar); + +boolean_t +raidz_will_scalar_work(void) +{ + return (B_TRUE); /* always */ +} + +const raidz_impl_ops_t vdev_raidz_scalar_impl = { + .init = raidz_init_scalar, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(scalar), + .rec = RAIDZ_REC_METHODS(scalar), + .is_supported = &raidz_will_scalar_work, + .name = "scalar" +}; + +/* Powers of 2 in the RAID-Z Galois field. */ +const uint8_t vdev_raidz_pow2[256] __attribute__((aligned(256))) = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, + 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, + 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, + 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, + 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, + 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, + 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, + 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, + 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, + 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, + 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, + 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, + 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, + 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, + 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, + 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, + 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, + 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, + 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, + 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, + 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, + 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, + 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, + 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, + 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, + 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, + 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09, + 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, + 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, + 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, + 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x01 +}; + +/* Logs of 2 in the RAID-Z Galois field. */ +const uint8_t vdev_raidz_log2[256] __attribute__((aligned(256))) = { + 0x00, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, + 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b, + 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, + 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71, + 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, + 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45, + 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, + 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6, + 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, + 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88, + 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, + 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40, + 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, + 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d, + 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, + 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57, + 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, + 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18, + 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, + 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e, + 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, + 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61, + 0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, + 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2, + 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, + 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6, + 0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, + 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a, + 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, + 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7, + 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, + 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf, +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_sse2.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_sse2.c @@ -0,0 +1,622 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include + +#if defined(__x86_64) && defined(HAVE_SSE2) + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "xmm"#REG +#define VR1_(_1, REG, ...) "xmm"#REG +#define VR2_(_1, _2, REG, ...) "xmm"#REG +#define VR3_(_1, _2, _3, REG, ...) "xmm"#REG +#define VR4_(_1, _2, _3, _4, REG, ...) "xmm"#REG +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "xmm"#REG +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "xmm"#REG +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "xmm"#REG + +#define VR0(r...) VR0_(r, 1, 2, 3, 4, 5, 6) +#define VR1(r...) VR1_(r, 1, 2, 3, 4, 5, 6) +#define VR2(r...) VR2_(r, 1, 2, 3, 4, 5, 6) +#define VR3(r...) VR3_(r, 1, 2, 3, 4, 5, 6) +#define VR4(r...) VR4_(r, 1, 2, 3, 4, 5, 6) +#define VR5(r...) VR5_(r, 1, 2, 3, 4, 5, 6) +#define VR6(r...) VR6_(r, 1, 2, 3, 4, 5, 6) +#define VR7(r...) VR7_(r, 1, 2, 3, 4, 5, 6) + +#define ELEM_SIZE 16 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "pxor 0x00(%[SRC]), %%" VR0(r) "\n" \ + "pxor 0x10(%[SRC]), %%" VR1(r) "\n" \ + "pxor 0x20(%[SRC]), %%" VR2(r) "\n" \ + "pxor 0x30(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "pxor 0x00(%[SRC]), %%" VR0(r) "\n" \ + "pxor 0x10(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 1: \ + __asm("pxor 0x00(%[SRC]), %%" VR0(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "pxor %" VR0(r) ", %" VR4(r) "\n" \ + "pxor %" VR1(r) ", %" VR5(r) "\n" \ + "pxor %" VR2(r) ", %" VR6(r) "\n" \ + "pxor %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "pxor %" VR0(r) ", %" VR2(r) "\n" \ + "pxor %" VR1(r) ", %" VR3(r)); \ + break; \ + case 2: \ + __asm( \ + "pxor %" VR0(r) ", %" VR1(r)); \ + break; \ + } \ +} + +#define ZERO(r...) XOR(r, r) + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "movdqa %" VR0(r) ", %" VR4(r) "\n" \ + "movdqa %" VR1(r) ", %" VR5(r) "\n" \ + "movdqa %" VR2(r) ", %" VR6(r) "\n" \ + "movdqa %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "movdqa %" VR0(r) ", %" VR2(r) "\n" \ + "movdqa %" VR1(r) ", %" VR3(r)); \ + break; \ + case 2: \ + __asm( \ + "movdqa %" VR0(r) ", %" VR1(r)); \ + break; \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "movdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "movdqa 0x10(%[SRC]), %%" VR1(r) "\n" \ + "movdqa 0x20(%[SRC]), %%" VR2(r) "\n" \ + "movdqa 0x30(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "movdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "movdqa 0x10(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 1: \ + __asm( \ + "movdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "movdqa %%" VR0(r)", 0x00(%[DST])\n" \ + "movdqa %%" VR1(r)", 0x10(%[DST])\n" \ + "movdqa %%" VR2(r)", 0x20(%[DST])\n" \ + "movdqa %%" VR3(r)", 0x30(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + case 2: \ + __asm( \ + "movdqa %%" VR0(r)", 0x00(%[DST])\n" \ + "movdqa %%" VR1(r)", 0x10(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + case 1: \ + __asm( \ + "movdqa %%" VR0(r)", 0x00(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + } \ +} + +#define MUL2_SETUP() \ +{ \ + __asm( \ + "movd %[mask], %%xmm15\n" \ + "pshufd $0x0, %%xmm15, %%xmm15\n" \ + : : [mask] "r" (0x1d1d1d1d)); \ +} + +#define _MUL2_x1(a0) \ +{ \ + __asm( \ + "pxor %xmm14, %xmm14\n" \ + "pcmpgtb %" a0", %xmm14\n" \ + "pand %xmm15, %xmm14\n" \ + "paddb %" a0", %" a0 "\n" \ + "pxor %xmm14, %" a0); \ +} + +#define _MUL2_x2(a0, a1) \ +{ \ + __asm( \ + "pxor %xmm14, %xmm14\n" \ + "pxor %xmm13, %xmm13\n" \ + "pcmpgtb %" a0", %xmm14\n" \ + "pcmpgtb %" a1", %xmm13\n" \ + "pand %xmm15, %xmm14\n" \ + "pand %xmm15, %xmm13\n" \ + "paddb %" a0", %" a0 "\n" \ + "paddb %" a1", %" a1 "\n" \ + "pxor %xmm14, %" a0 "\n" \ + "pxor %xmm13, %" a1); \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MUL2_x2(VR0(r), VR1(r)); \ + _MUL2_x2(VR2(r), VR3(r)); \ + break; \ + case 2: \ + _MUL2_x2(VR0(r), VR1(r)); \ + break; \ + case 1: \ + _MUL2_x1(VR0(r)); \ + break; \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + +/* General multiplication by adding powers of two */ + +#define _MUL_PARAM(x, in, acc) \ +{ \ + if (x & 0x01) { COPY(in, acc); } else { ZERO(acc); } \ + if (x & 0xfe) { MUL2(in); } \ + if (x & 0x02) { XOR(in, acc); } \ + if (x & 0xfc) { MUL2(in); } \ + if (x & 0x04) { XOR(in, acc); } \ + if (x & 0xf8) { MUL2(in); } \ + if (x & 0x08) { XOR(in, acc); } \ + if (x & 0xf0) { MUL2(in); } \ + if (x & 0x10) { XOR(in, acc); } \ + if (x & 0xe0) { MUL2(in); } \ + if (x & 0x20) { XOR(in, acc); } \ + if (x & 0xc0) { MUL2(in); } \ + if (x & 0x40) { XOR(in, acc); } \ + if (x & 0x80) { MUL2(in); XOR(in, acc); } \ +} + +#define _mul_x1_in 11 +#define _mul_x1_acc 12 + +#define MUL_x1_DEFINE(x) \ +static void \ +mul_x1_ ## x(void) { _MUL_PARAM(x, _mul_x1_in, _mul_x1_acc); } + +#define _mul_x2_in 9, 10 +#define _mul_x2_acc 11, 12 + +#define MUL_x2_DEFINE(x) \ +static void \ +mul_x2_ ## x(void) { _MUL_PARAM(x, _mul_x2_in, _mul_x2_acc); } + +MUL_x1_DEFINE(0); MUL_x1_DEFINE(1); MUL_x1_DEFINE(2); MUL_x1_DEFINE(3); +MUL_x1_DEFINE(4); MUL_x1_DEFINE(5); MUL_x1_DEFINE(6); MUL_x1_DEFINE(7); +MUL_x1_DEFINE(8); MUL_x1_DEFINE(9); MUL_x1_DEFINE(10); MUL_x1_DEFINE(11); +MUL_x1_DEFINE(12); MUL_x1_DEFINE(13); MUL_x1_DEFINE(14); MUL_x1_DEFINE(15); +MUL_x1_DEFINE(16); MUL_x1_DEFINE(17); MUL_x1_DEFINE(18); MUL_x1_DEFINE(19); +MUL_x1_DEFINE(20); MUL_x1_DEFINE(21); MUL_x1_DEFINE(22); MUL_x1_DEFINE(23); +MUL_x1_DEFINE(24); MUL_x1_DEFINE(25); MUL_x1_DEFINE(26); MUL_x1_DEFINE(27); +MUL_x1_DEFINE(28); MUL_x1_DEFINE(29); MUL_x1_DEFINE(30); MUL_x1_DEFINE(31); +MUL_x1_DEFINE(32); MUL_x1_DEFINE(33); MUL_x1_DEFINE(34); MUL_x1_DEFINE(35); +MUL_x1_DEFINE(36); MUL_x1_DEFINE(37); MUL_x1_DEFINE(38); MUL_x1_DEFINE(39); +MUL_x1_DEFINE(40); MUL_x1_DEFINE(41); MUL_x1_DEFINE(42); MUL_x1_DEFINE(43); +MUL_x1_DEFINE(44); MUL_x1_DEFINE(45); MUL_x1_DEFINE(46); MUL_x1_DEFINE(47); +MUL_x1_DEFINE(48); MUL_x1_DEFINE(49); MUL_x1_DEFINE(50); MUL_x1_DEFINE(51); +MUL_x1_DEFINE(52); MUL_x1_DEFINE(53); MUL_x1_DEFINE(54); MUL_x1_DEFINE(55); +MUL_x1_DEFINE(56); MUL_x1_DEFINE(57); MUL_x1_DEFINE(58); MUL_x1_DEFINE(59); +MUL_x1_DEFINE(60); MUL_x1_DEFINE(61); MUL_x1_DEFINE(62); MUL_x1_DEFINE(63); +MUL_x1_DEFINE(64); MUL_x1_DEFINE(65); MUL_x1_DEFINE(66); MUL_x1_DEFINE(67); +MUL_x1_DEFINE(68); MUL_x1_DEFINE(69); MUL_x1_DEFINE(70); MUL_x1_DEFINE(71); +MUL_x1_DEFINE(72); MUL_x1_DEFINE(73); MUL_x1_DEFINE(74); MUL_x1_DEFINE(75); +MUL_x1_DEFINE(76); MUL_x1_DEFINE(77); MUL_x1_DEFINE(78); MUL_x1_DEFINE(79); +MUL_x1_DEFINE(80); MUL_x1_DEFINE(81); MUL_x1_DEFINE(82); MUL_x1_DEFINE(83); +MUL_x1_DEFINE(84); MUL_x1_DEFINE(85); MUL_x1_DEFINE(86); MUL_x1_DEFINE(87); +MUL_x1_DEFINE(88); MUL_x1_DEFINE(89); MUL_x1_DEFINE(90); MUL_x1_DEFINE(91); +MUL_x1_DEFINE(92); MUL_x1_DEFINE(93); MUL_x1_DEFINE(94); MUL_x1_DEFINE(95); +MUL_x1_DEFINE(96); MUL_x1_DEFINE(97); MUL_x1_DEFINE(98); MUL_x1_DEFINE(99); +MUL_x1_DEFINE(100); MUL_x1_DEFINE(101); MUL_x1_DEFINE(102); MUL_x1_DEFINE(103); +MUL_x1_DEFINE(104); MUL_x1_DEFINE(105); MUL_x1_DEFINE(106); MUL_x1_DEFINE(107); +MUL_x1_DEFINE(108); MUL_x1_DEFINE(109); MUL_x1_DEFINE(110); MUL_x1_DEFINE(111); +MUL_x1_DEFINE(112); MUL_x1_DEFINE(113); MUL_x1_DEFINE(114); MUL_x1_DEFINE(115); +MUL_x1_DEFINE(116); MUL_x1_DEFINE(117); MUL_x1_DEFINE(118); MUL_x1_DEFINE(119); +MUL_x1_DEFINE(120); MUL_x1_DEFINE(121); MUL_x1_DEFINE(122); MUL_x1_DEFINE(123); +MUL_x1_DEFINE(124); MUL_x1_DEFINE(125); MUL_x1_DEFINE(126); MUL_x1_DEFINE(127); +MUL_x1_DEFINE(128); MUL_x1_DEFINE(129); MUL_x1_DEFINE(130); MUL_x1_DEFINE(131); +MUL_x1_DEFINE(132); MUL_x1_DEFINE(133); MUL_x1_DEFINE(134); MUL_x1_DEFINE(135); +MUL_x1_DEFINE(136); MUL_x1_DEFINE(137); MUL_x1_DEFINE(138); MUL_x1_DEFINE(139); +MUL_x1_DEFINE(140); MUL_x1_DEFINE(141); MUL_x1_DEFINE(142); MUL_x1_DEFINE(143); +MUL_x1_DEFINE(144); MUL_x1_DEFINE(145); MUL_x1_DEFINE(146); MUL_x1_DEFINE(147); +MUL_x1_DEFINE(148); MUL_x1_DEFINE(149); MUL_x1_DEFINE(150); MUL_x1_DEFINE(151); +MUL_x1_DEFINE(152); MUL_x1_DEFINE(153); MUL_x1_DEFINE(154); MUL_x1_DEFINE(155); +MUL_x1_DEFINE(156); MUL_x1_DEFINE(157); MUL_x1_DEFINE(158); MUL_x1_DEFINE(159); +MUL_x1_DEFINE(160); MUL_x1_DEFINE(161); MUL_x1_DEFINE(162); MUL_x1_DEFINE(163); +MUL_x1_DEFINE(164); MUL_x1_DEFINE(165); MUL_x1_DEFINE(166); MUL_x1_DEFINE(167); +MUL_x1_DEFINE(168); MUL_x1_DEFINE(169); MUL_x1_DEFINE(170); MUL_x1_DEFINE(171); +MUL_x1_DEFINE(172); MUL_x1_DEFINE(173); MUL_x1_DEFINE(174); MUL_x1_DEFINE(175); +MUL_x1_DEFINE(176); MUL_x1_DEFINE(177); MUL_x1_DEFINE(178); MUL_x1_DEFINE(179); +MUL_x1_DEFINE(180); MUL_x1_DEFINE(181); MUL_x1_DEFINE(182); MUL_x1_DEFINE(183); +MUL_x1_DEFINE(184); MUL_x1_DEFINE(185); MUL_x1_DEFINE(186); MUL_x1_DEFINE(187); +MUL_x1_DEFINE(188); MUL_x1_DEFINE(189); MUL_x1_DEFINE(190); MUL_x1_DEFINE(191); +MUL_x1_DEFINE(192); MUL_x1_DEFINE(193); MUL_x1_DEFINE(194); MUL_x1_DEFINE(195); +MUL_x1_DEFINE(196); MUL_x1_DEFINE(197); MUL_x1_DEFINE(198); MUL_x1_DEFINE(199); +MUL_x1_DEFINE(200); MUL_x1_DEFINE(201); MUL_x1_DEFINE(202); MUL_x1_DEFINE(203); +MUL_x1_DEFINE(204); MUL_x1_DEFINE(205); MUL_x1_DEFINE(206); MUL_x1_DEFINE(207); +MUL_x1_DEFINE(208); MUL_x1_DEFINE(209); MUL_x1_DEFINE(210); MUL_x1_DEFINE(211); +MUL_x1_DEFINE(212); MUL_x1_DEFINE(213); MUL_x1_DEFINE(214); MUL_x1_DEFINE(215); +MUL_x1_DEFINE(216); MUL_x1_DEFINE(217); MUL_x1_DEFINE(218); MUL_x1_DEFINE(219); +MUL_x1_DEFINE(220); MUL_x1_DEFINE(221); MUL_x1_DEFINE(222); MUL_x1_DEFINE(223); +MUL_x1_DEFINE(224); MUL_x1_DEFINE(225); MUL_x1_DEFINE(226); MUL_x1_DEFINE(227); +MUL_x1_DEFINE(228); MUL_x1_DEFINE(229); MUL_x1_DEFINE(230); MUL_x1_DEFINE(231); +MUL_x1_DEFINE(232); MUL_x1_DEFINE(233); MUL_x1_DEFINE(234); MUL_x1_DEFINE(235); +MUL_x1_DEFINE(236); MUL_x1_DEFINE(237); MUL_x1_DEFINE(238); MUL_x1_DEFINE(239); +MUL_x1_DEFINE(240); MUL_x1_DEFINE(241); MUL_x1_DEFINE(242); MUL_x1_DEFINE(243); +MUL_x1_DEFINE(244); MUL_x1_DEFINE(245); MUL_x1_DEFINE(246); MUL_x1_DEFINE(247); +MUL_x1_DEFINE(248); MUL_x1_DEFINE(249); MUL_x1_DEFINE(250); MUL_x1_DEFINE(251); +MUL_x1_DEFINE(252); MUL_x1_DEFINE(253); MUL_x1_DEFINE(254); MUL_x1_DEFINE(255); + +MUL_x2_DEFINE(0); MUL_x2_DEFINE(1); MUL_x2_DEFINE(2); MUL_x2_DEFINE(3); +MUL_x2_DEFINE(4); MUL_x2_DEFINE(5); MUL_x2_DEFINE(6); MUL_x2_DEFINE(7); +MUL_x2_DEFINE(8); MUL_x2_DEFINE(9); MUL_x2_DEFINE(10); MUL_x2_DEFINE(11); +MUL_x2_DEFINE(12); MUL_x2_DEFINE(13); MUL_x2_DEFINE(14); MUL_x2_DEFINE(15); +MUL_x2_DEFINE(16); MUL_x2_DEFINE(17); MUL_x2_DEFINE(18); MUL_x2_DEFINE(19); +MUL_x2_DEFINE(20); MUL_x2_DEFINE(21); MUL_x2_DEFINE(22); MUL_x2_DEFINE(23); +MUL_x2_DEFINE(24); MUL_x2_DEFINE(25); MUL_x2_DEFINE(26); MUL_x2_DEFINE(27); +MUL_x2_DEFINE(28); MUL_x2_DEFINE(29); MUL_x2_DEFINE(30); MUL_x2_DEFINE(31); +MUL_x2_DEFINE(32); MUL_x2_DEFINE(33); MUL_x2_DEFINE(34); MUL_x2_DEFINE(35); +MUL_x2_DEFINE(36); MUL_x2_DEFINE(37); MUL_x2_DEFINE(38); MUL_x2_DEFINE(39); +MUL_x2_DEFINE(40); MUL_x2_DEFINE(41); MUL_x2_DEFINE(42); MUL_x2_DEFINE(43); +MUL_x2_DEFINE(44); MUL_x2_DEFINE(45); MUL_x2_DEFINE(46); MUL_x2_DEFINE(47); +MUL_x2_DEFINE(48); MUL_x2_DEFINE(49); MUL_x2_DEFINE(50); MUL_x2_DEFINE(51); +MUL_x2_DEFINE(52); MUL_x2_DEFINE(53); MUL_x2_DEFINE(54); MUL_x2_DEFINE(55); +MUL_x2_DEFINE(56); MUL_x2_DEFINE(57); MUL_x2_DEFINE(58); MUL_x2_DEFINE(59); +MUL_x2_DEFINE(60); MUL_x2_DEFINE(61); MUL_x2_DEFINE(62); MUL_x2_DEFINE(63); +MUL_x2_DEFINE(64); MUL_x2_DEFINE(65); MUL_x2_DEFINE(66); MUL_x2_DEFINE(67); +MUL_x2_DEFINE(68); MUL_x2_DEFINE(69); MUL_x2_DEFINE(70); MUL_x2_DEFINE(71); +MUL_x2_DEFINE(72); MUL_x2_DEFINE(73); MUL_x2_DEFINE(74); MUL_x2_DEFINE(75); +MUL_x2_DEFINE(76); MUL_x2_DEFINE(77); MUL_x2_DEFINE(78); MUL_x2_DEFINE(79); +MUL_x2_DEFINE(80); MUL_x2_DEFINE(81); MUL_x2_DEFINE(82); MUL_x2_DEFINE(83); +MUL_x2_DEFINE(84); MUL_x2_DEFINE(85); MUL_x2_DEFINE(86); MUL_x2_DEFINE(87); +MUL_x2_DEFINE(88); MUL_x2_DEFINE(89); MUL_x2_DEFINE(90); MUL_x2_DEFINE(91); +MUL_x2_DEFINE(92); MUL_x2_DEFINE(93); MUL_x2_DEFINE(94); MUL_x2_DEFINE(95); +MUL_x2_DEFINE(96); MUL_x2_DEFINE(97); MUL_x2_DEFINE(98); MUL_x2_DEFINE(99); +MUL_x2_DEFINE(100); MUL_x2_DEFINE(101); MUL_x2_DEFINE(102); MUL_x2_DEFINE(103); +MUL_x2_DEFINE(104); MUL_x2_DEFINE(105); MUL_x2_DEFINE(106); MUL_x2_DEFINE(107); +MUL_x2_DEFINE(108); MUL_x2_DEFINE(109); MUL_x2_DEFINE(110); MUL_x2_DEFINE(111); +MUL_x2_DEFINE(112); MUL_x2_DEFINE(113); MUL_x2_DEFINE(114); MUL_x2_DEFINE(115); +MUL_x2_DEFINE(116); MUL_x2_DEFINE(117); MUL_x2_DEFINE(118); MUL_x2_DEFINE(119); +MUL_x2_DEFINE(120); MUL_x2_DEFINE(121); MUL_x2_DEFINE(122); MUL_x2_DEFINE(123); +MUL_x2_DEFINE(124); MUL_x2_DEFINE(125); MUL_x2_DEFINE(126); MUL_x2_DEFINE(127); +MUL_x2_DEFINE(128); MUL_x2_DEFINE(129); MUL_x2_DEFINE(130); MUL_x2_DEFINE(131); +MUL_x2_DEFINE(132); MUL_x2_DEFINE(133); MUL_x2_DEFINE(134); MUL_x2_DEFINE(135); +MUL_x2_DEFINE(136); MUL_x2_DEFINE(137); MUL_x2_DEFINE(138); MUL_x2_DEFINE(139); +MUL_x2_DEFINE(140); MUL_x2_DEFINE(141); MUL_x2_DEFINE(142); MUL_x2_DEFINE(143); +MUL_x2_DEFINE(144); MUL_x2_DEFINE(145); MUL_x2_DEFINE(146); MUL_x2_DEFINE(147); +MUL_x2_DEFINE(148); MUL_x2_DEFINE(149); MUL_x2_DEFINE(150); MUL_x2_DEFINE(151); +MUL_x2_DEFINE(152); MUL_x2_DEFINE(153); MUL_x2_DEFINE(154); MUL_x2_DEFINE(155); +MUL_x2_DEFINE(156); MUL_x2_DEFINE(157); MUL_x2_DEFINE(158); MUL_x2_DEFINE(159); +MUL_x2_DEFINE(160); MUL_x2_DEFINE(161); MUL_x2_DEFINE(162); MUL_x2_DEFINE(163); +MUL_x2_DEFINE(164); MUL_x2_DEFINE(165); MUL_x2_DEFINE(166); MUL_x2_DEFINE(167); +MUL_x2_DEFINE(168); MUL_x2_DEFINE(169); MUL_x2_DEFINE(170); MUL_x2_DEFINE(171); +MUL_x2_DEFINE(172); MUL_x2_DEFINE(173); MUL_x2_DEFINE(174); MUL_x2_DEFINE(175); +MUL_x2_DEFINE(176); MUL_x2_DEFINE(177); MUL_x2_DEFINE(178); MUL_x2_DEFINE(179); +MUL_x2_DEFINE(180); MUL_x2_DEFINE(181); MUL_x2_DEFINE(182); MUL_x2_DEFINE(183); +MUL_x2_DEFINE(184); MUL_x2_DEFINE(185); MUL_x2_DEFINE(186); MUL_x2_DEFINE(187); +MUL_x2_DEFINE(188); MUL_x2_DEFINE(189); MUL_x2_DEFINE(190); MUL_x2_DEFINE(191); +MUL_x2_DEFINE(192); MUL_x2_DEFINE(193); MUL_x2_DEFINE(194); MUL_x2_DEFINE(195); +MUL_x2_DEFINE(196); MUL_x2_DEFINE(197); MUL_x2_DEFINE(198); MUL_x2_DEFINE(199); +MUL_x2_DEFINE(200); MUL_x2_DEFINE(201); MUL_x2_DEFINE(202); MUL_x2_DEFINE(203); +MUL_x2_DEFINE(204); MUL_x2_DEFINE(205); MUL_x2_DEFINE(206); MUL_x2_DEFINE(207); +MUL_x2_DEFINE(208); MUL_x2_DEFINE(209); MUL_x2_DEFINE(210); MUL_x2_DEFINE(211); +MUL_x2_DEFINE(212); MUL_x2_DEFINE(213); MUL_x2_DEFINE(214); MUL_x2_DEFINE(215); +MUL_x2_DEFINE(216); MUL_x2_DEFINE(217); MUL_x2_DEFINE(218); MUL_x2_DEFINE(219); +MUL_x2_DEFINE(220); MUL_x2_DEFINE(221); MUL_x2_DEFINE(222); MUL_x2_DEFINE(223); +MUL_x2_DEFINE(224); MUL_x2_DEFINE(225); MUL_x2_DEFINE(226); MUL_x2_DEFINE(227); +MUL_x2_DEFINE(228); MUL_x2_DEFINE(229); MUL_x2_DEFINE(230); MUL_x2_DEFINE(231); +MUL_x2_DEFINE(232); MUL_x2_DEFINE(233); MUL_x2_DEFINE(234); MUL_x2_DEFINE(235); +MUL_x2_DEFINE(236); MUL_x2_DEFINE(237); MUL_x2_DEFINE(238); MUL_x2_DEFINE(239); +MUL_x2_DEFINE(240); MUL_x2_DEFINE(241); MUL_x2_DEFINE(242); MUL_x2_DEFINE(243); +MUL_x2_DEFINE(244); MUL_x2_DEFINE(245); MUL_x2_DEFINE(246); MUL_x2_DEFINE(247); +MUL_x2_DEFINE(248); MUL_x2_DEFINE(249); MUL_x2_DEFINE(250); MUL_x2_DEFINE(251); +MUL_x2_DEFINE(252); MUL_x2_DEFINE(253); MUL_x2_DEFINE(254); MUL_x2_DEFINE(255); + + + +typedef void (*mul_fn_ptr_t)(void); + +static const mul_fn_ptr_t __attribute__((aligned(256))) +gf_x1_mul_fns[256] = { + mul_x1_0, mul_x1_1, mul_x1_2, mul_x1_3, mul_x1_4, mul_x1_5, + mul_x1_6, mul_x1_7, mul_x1_8, mul_x1_9, mul_x1_10, mul_x1_11, + mul_x1_12, mul_x1_13, mul_x1_14, mul_x1_15, mul_x1_16, mul_x1_17, + mul_x1_18, mul_x1_19, mul_x1_20, mul_x1_21, mul_x1_22, mul_x1_23, + mul_x1_24, mul_x1_25, mul_x1_26, mul_x1_27, mul_x1_28, mul_x1_29, + mul_x1_30, mul_x1_31, mul_x1_32, mul_x1_33, mul_x1_34, mul_x1_35, + mul_x1_36, mul_x1_37, mul_x1_38, mul_x1_39, mul_x1_40, mul_x1_41, + mul_x1_42, mul_x1_43, mul_x1_44, mul_x1_45, mul_x1_46, mul_x1_47, + mul_x1_48, mul_x1_49, mul_x1_50, mul_x1_51, mul_x1_52, mul_x1_53, + mul_x1_54, mul_x1_55, mul_x1_56, mul_x1_57, mul_x1_58, mul_x1_59, + mul_x1_60, mul_x1_61, mul_x1_62, mul_x1_63, mul_x1_64, mul_x1_65, + mul_x1_66, mul_x1_67, mul_x1_68, mul_x1_69, mul_x1_70, mul_x1_71, + mul_x1_72, mul_x1_73, mul_x1_74, mul_x1_75, mul_x1_76, mul_x1_77, + mul_x1_78, mul_x1_79, mul_x1_80, mul_x1_81, mul_x1_82, mul_x1_83, + mul_x1_84, mul_x1_85, mul_x1_86, mul_x1_87, mul_x1_88, mul_x1_89, + mul_x1_90, mul_x1_91, mul_x1_92, mul_x1_93, mul_x1_94, mul_x1_95, + mul_x1_96, mul_x1_97, mul_x1_98, mul_x1_99, mul_x1_100, mul_x1_101, + mul_x1_102, mul_x1_103, mul_x1_104, mul_x1_105, mul_x1_106, mul_x1_107, + mul_x1_108, mul_x1_109, mul_x1_110, mul_x1_111, mul_x1_112, mul_x1_113, + mul_x1_114, mul_x1_115, mul_x1_116, mul_x1_117, mul_x1_118, mul_x1_119, + mul_x1_120, mul_x1_121, mul_x1_122, mul_x1_123, mul_x1_124, mul_x1_125, + mul_x1_126, mul_x1_127, mul_x1_128, mul_x1_129, mul_x1_130, mul_x1_131, + mul_x1_132, mul_x1_133, mul_x1_134, mul_x1_135, mul_x1_136, mul_x1_137, + mul_x1_138, mul_x1_139, mul_x1_140, mul_x1_141, mul_x1_142, mul_x1_143, + mul_x1_144, mul_x1_145, mul_x1_146, mul_x1_147, mul_x1_148, mul_x1_149, + mul_x1_150, mul_x1_151, mul_x1_152, mul_x1_153, mul_x1_154, mul_x1_155, + mul_x1_156, mul_x1_157, mul_x1_158, mul_x1_159, mul_x1_160, mul_x1_161, + mul_x1_162, mul_x1_163, mul_x1_164, mul_x1_165, mul_x1_166, mul_x1_167, + mul_x1_168, mul_x1_169, mul_x1_170, mul_x1_171, mul_x1_172, mul_x1_173, + mul_x1_174, mul_x1_175, mul_x1_176, mul_x1_177, mul_x1_178, mul_x1_179, + mul_x1_180, mul_x1_181, mul_x1_182, mul_x1_183, mul_x1_184, mul_x1_185, + mul_x1_186, mul_x1_187, mul_x1_188, mul_x1_189, mul_x1_190, mul_x1_191, + mul_x1_192, mul_x1_193, mul_x1_194, mul_x1_195, mul_x1_196, mul_x1_197, + mul_x1_198, mul_x1_199, mul_x1_200, mul_x1_201, mul_x1_202, mul_x1_203, + mul_x1_204, mul_x1_205, mul_x1_206, mul_x1_207, mul_x1_208, mul_x1_209, + mul_x1_210, mul_x1_211, mul_x1_212, mul_x1_213, mul_x1_214, mul_x1_215, + mul_x1_216, mul_x1_217, mul_x1_218, mul_x1_219, mul_x1_220, mul_x1_221, + mul_x1_222, mul_x1_223, mul_x1_224, mul_x1_225, mul_x1_226, mul_x1_227, + mul_x1_228, mul_x1_229, mul_x1_230, mul_x1_231, mul_x1_232, mul_x1_233, + mul_x1_234, mul_x1_235, mul_x1_236, mul_x1_237, mul_x1_238, mul_x1_239, + mul_x1_240, mul_x1_241, mul_x1_242, mul_x1_243, mul_x1_244, mul_x1_245, + mul_x1_246, mul_x1_247, mul_x1_248, mul_x1_249, mul_x1_250, mul_x1_251, + mul_x1_252, mul_x1_253, mul_x1_254, mul_x1_255 +}; + +static const mul_fn_ptr_t __attribute__((aligned(256))) +gf_x2_mul_fns[256] = { + mul_x2_0, mul_x2_1, mul_x2_2, mul_x2_3, mul_x2_4, mul_x2_5, + mul_x2_6, mul_x2_7, mul_x2_8, mul_x2_9, mul_x2_10, mul_x2_11, + mul_x2_12, mul_x2_13, mul_x2_14, mul_x2_15, mul_x2_16, mul_x2_17, + mul_x2_18, mul_x2_19, mul_x2_20, mul_x2_21, mul_x2_22, mul_x2_23, + mul_x2_24, mul_x2_25, mul_x2_26, mul_x2_27, mul_x2_28, mul_x2_29, + mul_x2_30, mul_x2_31, mul_x2_32, mul_x2_33, mul_x2_34, mul_x2_35, + mul_x2_36, mul_x2_37, mul_x2_38, mul_x2_39, mul_x2_40, mul_x2_41, + mul_x2_42, mul_x2_43, mul_x2_44, mul_x2_45, mul_x2_46, mul_x2_47, + mul_x2_48, mul_x2_49, mul_x2_50, mul_x2_51, mul_x2_52, mul_x2_53, + mul_x2_54, mul_x2_55, mul_x2_56, mul_x2_57, mul_x2_58, mul_x2_59, + mul_x2_60, mul_x2_61, mul_x2_62, mul_x2_63, mul_x2_64, mul_x2_65, + mul_x2_66, mul_x2_67, mul_x2_68, mul_x2_69, mul_x2_70, mul_x2_71, + mul_x2_72, mul_x2_73, mul_x2_74, mul_x2_75, mul_x2_76, mul_x2_77, + mul_x2_78, mul_x2_79, mul_x2_80, mul_x2_81, mul_x2_82, mul_x2_83, + mul_x2_84, mul_x2_85, mul_x2_86, mul_x2_87, mul_x2_88, mul_x2_89, + mul_x2_90, mul_x2_91, mul_x2_92, mul_x2_93, mul_x2_94, mul_x2_95, + mul_x2_96, mul_x2_97, mul_x2_98, mul_x2_99, mul_x2_100, mul_x2_101, + mul_x2_102, mul_x2_103, mul_x2_104, mul_x2_105, mul_x2_106, mul_x2_107, + mul_x2_108, mul_x2_109, mul_x2_110, mul_x2_111, mul_x2_112, mul_x2_113, + mul_x2_114, mul_x2_115, mul_x2_116, mul_x2_117, mul_x2_118, mul_x2_119, + mul_x2_120, mul_x2_121, mul_x2_122, mul_x2_123, mul_x2_124, mul_x2_125, + mul_x2_126, mul_x2_127, mul_x2_128, mul_x2_129, mul_x2_130, mul_x2_131, + mul_x2_132, mul_x2_133, mul_x2_134, mul_x2_135, mul_x2_136, mul_x2_137, + mul_x2_138, mul_x2_139, mul_x2_140, mul_x2_141, mul_x2_142, mul_x2_143, + mul_x2_144, mul_x2_145, mul_x2_146, mul_x2_147, mul_x2_148, mul_x2_149, + mul_x2_150, mul_x2_151, mul_x2_152, mul_x2_153, mul_x2_154, mul_x2_155, + mul_x2_156, mul_x2_157, mul_x2_158, mul_x2_159, mul_x2_160, mul_x2_161, + mul_x2_162, mul_x2_163, mul_x2_164, mul_x2_165, mul_x2_166, mul_x2_167, + mul_x2_168, mul_x2_169, mul_x2_170, mul_x2_171, mul_x2_172, mul_x2_173, + mul_x2_174, mul_x2_175, mul_x2_176, mul_x2_177, mul_x2_178, mul_x2_179, + mul_x2_180, mul_x2_181, mul_x2_182, mul_x2_183, mul_x2_184, mul_x2_185, + mul_x2_186, mul_x2_187, mul_x2_188, mul_x2_189, mul_x2_190, mul_x2_191, + mul_x2_192, mul_x2_193, mul_x2_194, mul_x2_195, mul_x2_196, mul_x2_197, + mul_x2_198, mul_x2_199, mul_x2_200, mul_x2_201, mul_x2_202, mul_x2_203, + mul_x2_204, mul_x2_205, mul_x2_206, mul_x2_207, mul_x2_208, mul_x2_209, + mul_x2_210, mul_x2_211, mul_x2_212, mul_x2_213, mul_x2_214, mul_x2_215, + mul_x2_216, mul_x2_217, mul_x2_218, mul_x2_219, mul_x2_220, mul_x2_221, + mul_x2_222, mul_x2_223, mul_x2_224, mul_x2_225, mul_x2_226, mul_x2_227, + mul_x2_228, mul_x2_229, mul_x2_230, mul_x2_231, mul_x2_232, mul_x2_233, + mul_x2_234, mul_x2_235, mul_x2_236, mul_x2_237, mul_x2_238, mul_x2_239, + mul_x2_240, mul_x2_241, mul_x2_242, mul_x2_243, mul_x2_244, mul_x2_245, + mul_x2_246, mul_x2_247, mul_x2_248, mul_x2_249, mul_x2_250, mul_x2_251, + mul_x2_252, mul_x2_253, mul_x2_254, mul_x2_255 +}; + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + COPY(r, _mul_x2_in); \ + gf_x2_mul_fns[c](); \ + COPY(_mul_x2_acc, r); \ + break; \ + case 1: \ + COPY(r, _mul_x1_in); \ + gf_x1_mul_fns[c](); \ + COPY(_mul_x1_acc, r); \ + break; \ + } \ +} + + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() kfpu_end() + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() {} +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() {} +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() {} +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 2 +#define MUL_DEFINE() MUL2_SETUP() +#define MUL_D 0, 1 + +#define GEN_P_STRIDE 4 +#define GEN_P_DEFINE() {} +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_DEFINE() {} +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_DEFINE() {} +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() {} +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() {} +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() {} +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_STRIDE 2 +#define REC_PQ_DEFINE() MUL2_SETUP() +#define REC_PQ_X 0, 1 +#define REC_PQ_Y 2, 3 +#define REC_PQ_T 4, 5 + +#define SYN_PR_DEFINE() {} +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_STRIDE 2 +#define REC_PR_DEFINE() MUL2_SETUP() +#define REC_PR_X 0, 1 +#define REC_PR_Y 2, 3 +#define REC_PR_T 4, 5 + +#define SYN_QR_DEFINE() {} +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_STRIDE 2 +#define REC_QR_DEFINE() MUL2_SETUP() +#define REC_QR_X 0, 1 +#define REC_QR_Y 2, 3 +#define REC_QR_T 4, 5 + +#define SYN_PQR_DEFINE() {} +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_STRIDE 1 +#define REC_PQR_DEFINE() MUL2_SETUP() +#define REC_PQR_X 0 +#define REC_PQR_Y 1 +#define REC_PQR_Z 2 +#define REC_PQR_XS 3 +#define REC_PQR_YS 4 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(sse2); +DEFINE_REC_METHODS(sse2); + +static boolean_t +raidz_will_sse2_work(void) +{ + return (zfs_sse_available() && zfs_sse2_available()); +} + +const raidz_impl_ops_t vdev_raidz_sse2_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(sse2), + .rec = RAIDZ_REC_METHODS(sse2), + .is_supported = &raidz_will_sse2_work, + .name = "sse2" +}; + +#endif /* defined(__x86_64) && defined(HAVE_SSE2) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_raidz_math_ssse3.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_raidz_math_ssse3.c @@ -0,0 +1,2475 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#include + +#if defined(__x86_64) && defined(HAVE_SSSE3) + +#include +#include + +#define __asm __asm__ __volatile__ + +#define _REG_CNT(_0, _1, _2, _3, _4, _5, _6, _7, N, ...) N +#define REG_CNT(r...) _REG_CNT(r, 8, 7, 6, 5, 4, 3, 2, 1) + +#define VR0_(REG, ...) "xmm"#REG +#define VR1_(_1, REG, ...) "xmm"#REG +#define VR2_(_1, _2, REG, ...) "xmm"#REG +#define VR3_(_1, _2, _3, REG, ...) "xmm"#REG +#define VR4_(_1, _2, _3, _4, REG, ...) "xmm"#REG +#define VR5_(_1, _2, _3, _4, _5, REG, ...) "xmm"#REG +#define VR6_(_1, _2, _3, _4, _5, _6, REG, ...) "xmm"#REG +#define VR7_(_1, _2, _3, _4, _5, _6, _7, REG, ...) "xmm"#REG + +#define VR0(r...) VR0_(r) +#define VR1(r...) VR1_(r) +#define VR2(r...) VR2_(r, 1) +#define VR3(r...) VR3_(r, 1, 2) +#define VR4(r...) VR4_(r, 1, 2) +#define VR5(r...) VR5_(r, 1, 2, 3) +#define VR6(r...) VR6_(r, 1, 2, 3, 4) +#define VR7(r...) VR7_(r, 1, 2, 3, 4, 5) + +#define R_01(REG1, REG2, ...) REG1, REG2 +#define _R_23(_0, _1, REG2, REG3, ...) REG2, REG3 +#define R_23(REG...) _R_23(REG, 1, 2, 3) + +#define ASM_BUG() ASSERT(0) + +const uint8_t gf_clmul_mod_lt[4*256][16]; + +#define ELEM_SIZE 16 + +typedef struct v { + uint8_t b[ELEM_SIZE] __attribute__((aligned(ELEM_SIZE))); +} v_t; + + +#define XOR_ACC(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "pxor 0x00(%[SRC]), %%" VR0(r) "\n" \ + "pxor 0x10(%[SRC]), %%" VR1(r) "\n" \ + "pxor 0x20(%[SRC]), %%" VR2(r) "\n" \ + "pxor 0x30(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "pxor 0x00(%[SRC]), %%" VR0(r) "\n" \ + "pxor 0x10(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define XOR(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "pxor %" VR0(r) ", %" VR4(r) "\n" \ + "pxor %" VR1(r) ", %" VR5(r) "\n" \ + "pxor %" VR2(r) ", %" VR6(r) "\n" \ + "pxor %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "pxor %" VR0(r) ", %" VR2(r) "\n" \ + "pxor %" VR1(r) ", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define ZERO(r...) XOR(r, r) + +#define COPY(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 8: \ + __asm( \ + "movdqa %" VR0(r) ", %" VR4(r) "\n" \ + "movdqa %" VR1(r) ", %" VR5(r) "\n" \ + "movdqa %" VR2(r) ", %" VR6(r) "\n" \ + "movdqa %" VR3(r) ", %" VR7(r)); \ + break; \ + case 4: \ + __asm( \ + "movdqa %" VR0(r) ", %" VR2(r) "\n" \ + "movdqa %" VR1(r) ", %" VR3(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define LOAD(src, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "movdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "movdqa 0x10(%[SRC]), %%" VR1(r) "\n" \ + "movdqa 0x20(%[SRC]), %%" VR2(r) "\n" \ + "movdqa 0x30(%[SRC]), %%" VR3(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + case 2: \ + __asm( \ + "movdqa 0x00(%[SRC]), %%" VR0(r) "\n" \ + "movdqa 0x10(%[SRC]), %%" VR1(r) "\n" \ + : : [SRC] "r" (src)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define STORE(dst, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + __asm( \ + "movdqa %%" VR0(r)", 0x00(%[DST])\n" \ + "movdqa %%" VR1(r)", 0x10(%[DST])\n" \ + "movdqa %%" VR2(r)", 0x20(%[DST])\n" \ + "movdqa %%" VR3(r)", 0x30(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + case 2: \ + __asm( \ + "movdqa %%" VR0(r)", 0x00(%[DST])\n" \ + "movdqa %%" VR1(r)", 0x10(%[DST])\n" \ + : : [DST] "r" (dst)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL2_SETUP() \ +{ \ + __asm( \ + "movd %[mask], %%xmm15\n" \ + "pshufd $0x0, %%xmm15, %%xmm15\n" \ + : : [mask] "r" (0x1d1d1d1d)); \ +} + +#define _MUL2_x2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + "pxor %xmm14, %xmm14\n" \ + "pxor %xmm13, %xmm13\n" \ + "pcmpgtb %" VR0(r)", %xmm14\n" \ + "pcmpgtb %" VR1(r)", %xmm13\n" \ + "pand %xmm15, %xmm14\n" \ + "pand %xmm15, %xmm13\n" \ + "paddb %" VR0(r)", %" VR0(r) "\n" \ + "paddb %" VR1(r)", %" VR1(r) "\n" \ + "pxor %xmm14, %" VR0(r) "\n" \ + "pxor %xmm13, %" VR1(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL2(r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MUL2_x2(R_01(r)); \ + _MUL2_x2(R_23(r)); \ + break; \ + case 2: \ + _MUL2_x2(r); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL4(r...) \ +{ \ + MUL2(r); \ + MUL2(r); \ +} + +#define _0f "xmm15" +#define _a_save "xmm14" +#define _b_save "xmm13" +#define _lt_mod_a "xmm12" +#define _lt_clmul_a "xmm11" +#define _lt_mod_b "xmm10" +#define _lt_clmul_b "xmm15" + +#define _MULx2(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 2: \ + __asm( \ + /* lts for upper part */ \ + "movd %[mask], %%" _0f "\n" \ + "pshufd $0x0, %%" _0f ", %%" _0f "\n" \ + "movdqa 0x00(%[lt]), %%" _lt_mod_a "\n" \ + "movdqa 0x10(%[lt]), %%" _lt_clmul_a "\n" \ + /* upper part */ \ + "movdqa %%" VR0(r) ", %%" _a_save "\n" \ + "movdqa %%" VR1(r) ", %%" _b_save "\n" \ + "psraw $0x4, %%" VR0(r) "\n" \ + "psraw $0x4, %%" VR1(r) "\n" \ + "pand %%" _0f ", %%" _a_save "\n" \ + "pand %%" _0f ", %%" _b_save "\n" \ + "pand %%" _0f ", %%" VR0(r) "\n" \ + "pand %%" _0f ", %%" VR1(r) "\n" \ + \ + "movdqa %%" _lt_mod_a ", %%" _lt_mod_b "\n" \ + "movdqa %%" _lt_clmul_a ", %%" _lt_clmul_b "\n" \ + \ + "pshufb %%" VR0(r) ",%%" _lt_mod_a "\n" \ + "pshufb %%" VR1(r) ",%%" _lt_mod_b "\n" \ + "pshufb %%" VR0(r) ",%%" _lt_clmul_a "\n" \ + "pshufb %%" VR1(r) ",%%" _lt_clmul_b "\n" \ + \ + "pxor %%" _lt_mod_a ",%%" _lt_clmul_a "\n" \ + "pxor %%" _lt_mod_b ",%%" _lt_clmul_b "\n" \ + "movdqa %%" _lt_clmul_a ",%%" VR0(r) "\n" \ + "movdqa %%" _lt_clmul_b ",%%" VR1(r) "\n" \ + /* lts for lower part */ \ + "movdqa 0x20(%[lt]), %%" _lt_mod_a "\n" \ + "movdqa 0x30(%[lt]), %%" _lt_clmul_a "\n" \ + "movdqa %%" _lt_mod_a ", %%" _lt_mod_b "\n" \ + "movdqa %%" _lt_clmul_a ", %%" _lt_clmul_b "\n" \ + /* lower part */ \ + "pshufb %%" _a_save ",%%" _lt_mod_a "\n" \ + "pshufb %%" _b_save ",%%" _lt_mod_b "\n" \ + "pshufb %%" _a_save ",%%" _lt_clmul_a "\n" \ + "pshufb %%" _b_save ",%%" _lt_clmul_b "\n" \ + \ + "pxor %%" _lt_mod_a ",%%" VR0(r) "\n" \ + "pxor %%" _lt_mod_b ",%%" VR1(r) "\n" \ + "pxor %%" _lt_clmul_a ",%%" VR0(r) "\n" \ + "pxor %%" _lt_clmul_b ",%%" VR1(r) "\n" \ + : : [mask] "r" (0x0f0f0f0f), \ + [lt] "r" (gf_clmul_mod_lt[4*(c)])); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define MUL(c, r...) \ +{ \ + switch (REG_CNT(r)) { \ + case 4: \ + _MULx2(c, R_23(r)); \ + _MULx2(c, R_01(r)); \ + break; \ + case 2: \ + _MULx2(c, R_01(r)); \ + break; \ + default: \ + ASM_BUG(); \ + } \ +} + +#define raidz_math_begin() kfpu_begin() +#define raidz_math_end() kfpu_end() + + +#define SYN_STRIDE 4 + +#define ZERO_STRIDE 4 +#define ZERO_DEFINE() {} +#define ZERO_D 0, 1, 2, 3 + +#define COPY_STRIDE 4 +#define COPY_DEFINE() {} +#define COPY_D 0, 1, 2, 3 + +#define ADD_STRIDE 4 +#define ADD_DEFINE() {} +#define ADD_D 0, 1, 2, 3 + +#define MUL_STRIDE 4 +#define MUL_DEFINE() {} +#define MUL_D 0, 1, 2, 3 + +#define GEN_P_STRIDE 4 +#define GEN_P_DEFINE() {} +#define GEN_P_P 0, 1, 2, 3 + +#define GEN_PQ_STRIDE 4 +#define GEN_PQ_DEFINE() {} +#define GEN_PQ_D 0, 1, 2, 3 +#define GEN_PQ_C 4, 5, 6, 7 + +#define GEN_PQR_STRIDE 4 +#define GEN_PQR_DEFINE() {} +#define GEN_PQR_D 0, 1, 2, 3 +#define GEN_PQR_C 4, 5, 6, 7 + +#define SYN_Q_DEFINE() {} +#define SYN_Q_D 0, 1, 2, 3 +#define SYN_Q_X 4, 5, 6, 7 + +#define SYN_R_DEFINE() {} +#define SYN_R_D 0, 1, 2, 3 +#define SYN_R_X 4, 5, 6, 7 + +#define SYN_PQ_DEFINE() {} +#define SYN_PQ_D 0, 1, 2, 3 +#define SYN_PQ_X 4, 5, 6, 7 + +#define REC_PQ_STRIDE 2 +#define REC_PQ_DEFINE() {} +#define REC_PQ_X 0, 1 +#define REC_PQ_Y 2, 3 +#define REC_PQ_T 4, 5 + +#define SYN_PR_DEFINE() {} +#define SYN_PR_D 0, 1, 2, 3 +#define SYN_PR_X 4, 5, 6, 7 + +#define REC_PR_STRIDE 2 +#define REC_PR_DEFINE() {} +#define REC_PR_X 0, 1 +#define REC_PR_Y 2, 3 +#define REC_PR_T 4, 5 + +#define SYN_QR_DEFINE() {} +#define SYN_QR_D 0, 1, 2, 3 +#define SYN_QR_X 4, 5, 6, 7 + +#define REC_QR_STRIDE 2 +#define REC_QR_DEFINE() {} +#define REC_QR_X 0, 1 +#define REC_QR_Y 2, 3 +#define REC_QR_T 4, 5 + +#define SYN_PQR_DEFINE() {} +#define SYN_PQR_D 0, 1, 2, 3 +#define SYN_PQR_X 4, 5, 6, 7 + +#define REC_PQR_STRIDE 2 +#define REC_PQR_DEFINE() {} +#define REC_PQR_X 0, 1 +#define REC_PQR_Y 2, 3 +#define REC_PQR_Z 4, 5 +#define REC_PQR_XS 6, 7 +#define REC_PQR_YS 8, 9 + + +#include +#include "vdev_raidz_math_impl.h" + +DEFINE_GEN_METHODS(ssse3); +DEFINE_REC_METHODS(ssse3); + +static boolean_t +raidz_will_ssse3_work(void) +{ + return (zfs_sse_available() && zfs_sse2_available() && + zfs_ssse3_available()); +} + +const raidz_impl_ops_t vdev_raidz_ssse3_impl = { + .init = NULL, + .fini = NULL, + .gen = RAIDZ_GEN_METHODS(ssse3), + .rec = RAIDZ_REC_METHODS(ssse3), + .is_supported = &raidz_will_ssse3_work, + .name = "ssse3" +}; + +#endif /* defined(__x86_64) && defined(HAVE_SSSE3) */ + + +#if defined(__x86_64) +#if defined(HAVE_SSSE3) || defined(HAVE_AVX2) || defined(HAVE_AVX512BW) +/* BEGIN CSTYLED */ +const uint8_t +__attribute__((aligned(256))) gf_clmul_mod_lt[4*256][16] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, + 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, + 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, + 0x28, 0x2d, 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, + 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, + 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, + 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, + 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, + 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, + 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, + 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, + 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, + 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xf5, 0xe8, 0xcf, 0xd2, 0x81, 0x9c, 0xbb, 0xa6 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, + 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xf5, 0xe8, 0xcf, 0xd2, 0x81, 0x9c, 0xbb, 0xa6 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, + 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xd2, 0xcf, 0xe8, 0xf5, 0xbb, 0xa6, 0x81, 0x9c }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, + 0xa0, 0xb4, 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xd2, 0xcf, 0xe8, 0xf5, 0xbb, 0xa6, 0x81, 0x9c }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, + 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xcf, 0xd2, 0xf5, 0xe8, 0xa6, 0xbb, 0x9c, 0x81 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x69, 0x74, 0x53, 0x4e, + 0xcf, 0xd2, 0xf5, 0xe8, 0xa6, 0xbb, 0x9c, 0x81 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, + 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x9c, 0x81, 0xbb, 0xa6, 0xd2, 0xcf, 0xf5, 0xe8 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, 0x50, 0x48, + 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x9c, 0x81, 0xbb, 0xa6, 0xd2, 0xcf, 0xf5, 0xe8 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, + 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x81, 0x9c, 0xa6, 0xbb, 0xcf, 0xd2, 0xe8, 0xf5 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1a, 0x34, 0x2e, 0x68, 0x72, 0x5c, 0x46, + 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x4e, 0x53, 0x69, 0x74, + 0x81, 0x9c, 0xa6, 0xbb, 0xcf, 0xd2, 0xe8, 0xf5 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, + 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xa6, 0xbb, 0x81, 0x9c, 0xf5, 0xe8, 0xd2, 0xcf }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1c, 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, + 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4 }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xa6, 0xbb, 0x81, 0x9c, 0xf5, 0xe8, 0xd2, 0xcf }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, + 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xbb, 0xa6, 0x9c, 0x81, 0xe8, 0xf5, 0xcf, 0xd2 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, + 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa }, + { 0x00, 0x1d, 0x27, 0x3a, 0x53, 0x4e, 0x74, 0x69, + 0xbb, 0xa6, 0x9c, 0x81, 0xe8, 0xf5, 0xcf, 0xd2 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, + 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, 0xba, 0xa5 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, + 0x08, 0x29, 0x4a, 0x6b, 0x8c, 0xad, 0xce, 0xef }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, + 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, + 0x18, 0x3b, 0x5e, 0x7d, 0x94, 0xb7, 0xd2, 0xf1 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xf7, 0xcd, 0x83, 0xb9, 0x02, 0x38, 0x76, 0x4c }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, + 0x20, 0x04, 0x68, 0x4c, 0xb0, 0x94, 0xf8, 0xdc }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xf7, 0xcd, 0x83, 0xb9, 0x02, 0x38, 0x76, 0x4c }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x28, 0x0d, 0x62, 0x47, 0xbc, 0x99, 0xf6, 0xd3 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xea, 0xd0, 0x9e, 0xa4, 0x1f, 0x25, 0x6b, 0x51 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, + 0x30, 0x16, 0x7c, 0x5a, 0xa8, 0x8e, 0xe4, 0xc2 }, + { 0x00, 0x3a, 0x74, 0x4e, 0xf5, 0xcf, 0x81, 0xbb, + 0xea, 0xd0, 0x9e, 0xa4, 0x1f, 0x25, 0x6b, 0x51 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xb9, 0x83, 0xd0, 0xea, 0x6b, 0x51, 0x02, 0x38 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, + 0x40, 0x68, 0x10, 0x38, 0xe0, 0xc8, 0xb0, 0x98 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xb9, 0x83, 0xd0, 0xea, 0x6b, 0x51, 0x02, 0x38 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x29, 0x52, 0x7b, 0xa4, 0x8d, 0xf6, 0xdf, + 0x48, 0x61, 0x1a, 0x33, 0xec, 0xc5, 0xbe, 0x97 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xa4, 0x9e, 0xcd, 0xf7, 0x76, 0x4c, 0x1f, 0x25 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, + 0x50, 0x7a, 0x04, 0x2e, 0xf8, 0xd2, 0xac, 0x86 }, + { 0x00, 0x3a, 0x69, 0x53, 0xd2, 0xe8, 0xbb, 0x81, + 0xa4, 0x9e, 0xcd, 0xf7, 0x76, 0x4c, 0x1f, 0x25 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2b, 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, + 0x58, 0x73, 0x0e, 0x25, 0xf4, 0xdf, 0xa2, 0x89 }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x83, 0xb9, 0xea, 0xd0, 0x4c, 0x76, 0x25, 0x1f }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, + 0x60, 0x4c, 0x38, 0x14, 0xd0, 0xfc, 0x88, 0xa4 }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x83, 0xb9, 0xea, 0xd0, 0x4c, 0x76, 0x25, 0x1f }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, + 0x68, 0x45, 0x32, 0x1f, 0xdc, 0xf1, 0x86, 0xab }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x9e, 0xa4, 0xf7, 0xcd, 0x51, 0x6b, 0x38, 0x02 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, + 0x70, 0x5e, 0x2c, 0x02, 0xc8, 0xe6, 0x94, 0xba }, + { 0x00, 0x3a, 0x69, 0x53, 0xcf, 0xf5, 0xa6, 0x9c, + 0x9e, 0xa4, 0xf7, 0xcd, 0x51, 0x6b, 0x38, 0x02 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, + 0x78, 0x57, 0x26, 0x09, 0xc4, 0xeb, 0x9a, 0xb5 }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, + 0x88, 0xb9, 0xea, 0xdb, 0x4c, 0x7d, 0x2e, 0x1f }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, + 0x90, 0xa2, 0xf4, 0xc6, 0x58, 0x6a, 0x3c, 0x0e }, + { 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, 0xd2, 0xf5, + 0x38, 0x1f, 0x76, 0x51, 0xa4, 0x83, 0xea, 0xcd }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, + 0x98, 0xab, 0xfe, 0xcd, 0x54, 0x67, 0x32, 0x01 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x1f, 0x38, 0x51, 0x76, 0x9e, 0xb9, 0xd0, 0xf7 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xa0, 0x94, 0xc8, 0xfc, 0x70, 0x44, 0x18, 0x2c }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x1f, 0x38, 0x51, 0x76, 0x9e, 0xb9, 0xd0, 0xf7 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, + 0xa8, 0x9d, 0xc2, 0xf7, 0x7c, 0x49, 0x16, 0x23 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x02, 0x25, 0x4c, 0x6b, 0x83, 0xa4, 0xcd, 0xea }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, 0xb4, 0x82, + 0xb0, 0x86, 0xdc, 0xea, 0x68, 0x5e, 0x04, 0x32 }, + { 0x00, 0x27, 0x4e, 0x69, 0x81, 0xa6, 0xcf, 0xe8, + 0x02, 0x25, 0x4c, 0x6b, 0x83, 0xa4, 0xcd, 0xea }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, + 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0x0a, 0x3d }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x51, 0x76, 0x02, 0x25, 0xf7, 0xd0, 0xa4, 0x83 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x38, 0x70, 0x48, 0xe0, 0xd8, 0x90, 0xa8, + 0xc0, 0xf8, 0xb0, 0x88, 0x20, 0x18, 0x50, 0x68 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x51, 0x76, 0x02, 0x25, 0xf7, 0xd0, 0xa4, 0x83 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, + 0xc8, 0xf1, 0xba, 0x83, 0x2c, 0x15, 0x5e, 0x67 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x4c, 0x6b, 0x1f, 0x38, 0xea, 0xcd, 0xb9, 0x9e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3a, 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, + 0xd0, 0xea, 0xa4, 0x9e, 0x38, 0x02, 0x4c, 0x76 }, + { 0x00, 0x27, 0x53, 0x74, 0xa6, 0x81, 0xf5, 0xd2, + 0x4c, 0x6b, 0x1f, 0x38, 0xea, 0xcd, 0xb9, 0x9e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, + 0xd8, 0xe3, 0xae, 0x95, 0x34, 0x0f, 0x42, 0x79 }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x6b, 0x4c, 0x38, 0x1f, 0xd0, 0xf7, 0x83, 0xa4 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, + 0xe0, 0xdc, 0x98, 0xa4, 0x10, 0x2c, 0x68, 0x54 }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x6b, 0x4c, 0x38, 0x1f, 0xd0, 0xf7, 0x83, 0xa4 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, + 0xe8, 0xd5, 0x92, 0xaf, 0x1c, 0x21, 0x66, 0x5b }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x76, 0x51, 0x25, 0x02, 0xcd, 0xea, 0x9e, 0xb9 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, + 0xf0, 0xce, 0x8c, 0xb2, 0x08, 0x36, 0x74, 0x4a }, + { 0x00, 0x27, 0x53, 0x74, 0xbb, 0x9c, 0xe8, 0xcf, + 0x76, 0x51, 0x25, 0x02, 0xcd, 0xea, 0x9e, 0xb9 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d }, + { 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, + 0xf8, 0xc7, 0x86, 0xb9, 0x04, 0x3b, 0x7a, 0x45 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x41, 0x82, 0xc3, 0x04, 0x45, 0x86, 0xc7, + 0x08, 0x49, 0x8a, 0xcb, 0x0c, 0x4d, 0x8e, 0xcf }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x9a, 0xee, 0x72, 0x06, 0x57, 0x23, 0xbf, 0xcb }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x42, 0x84, 0xc6, 0x08, 0x4a, 0x8c, 0xce, + 0x10, 0x52, 0x94, 0xd6, 0x18, 0x5a, 0x9c, 0xde }, + { 0x00, 0x74, 0xe8, 0x9c, 0xcd, 0xb9, 0x25, 0x51, + 0x9a, 0xee, 0x72, 0x06, 0x57, 0x23, 0xbf, 0xcb }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x43, 0x86, 0xc5, 0x0c, 0x4f, 0x8a, 0xc9, + 0x18, 0x5b, 0x9e, 0xdd, 0x14, 0x57, 0x92, 0xd1 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xbd, 0xc9, 0x55, 0x21, 0x6d, 0x19, 0x85, 0xf1 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x44, 0x88, 0xcc, 0x10, 0x54, 0x98, 0xdc, + 0x20, 0x64, 0xa8, 0xec, 0x30, 0x74, 0xb8, 0xfc }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xbd, 0xc9, 0x55, 0x21, 0x6d, 0x19, 0x85, 0xf1 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x45, 0x8a, 0xcf, 0x14, 0x51, 0x9e, 0xdb, + 0x28, 0x6d, 0xa2, 0xe7, 0x3c, 0x79, 0xb6, 0xf3 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x46, 0x8c, 0xca, 0x18, 0x5e, 0x94, 0xd2, + 0x30, 0x76, 0xbc, 0xfa, 0x28, 0x6e, 0xa4, 0xe2 }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x47, 0x8e, 0xc9, 0x1c, 0x5b, 0x92, 0xd5, + 0x38, 0x7f, 0xb6, 0xf1, 0x24, 0x63, 0xaa, 0xed }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xf3, 0x87, 0x06, 0x72, 0x04, 0x70, 0xf1, 0x85 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x48, 0x90, 0xd8, 0x20, 0x68, 0xb0, 0xf8, + 0x40, 0x08, 0xd0, 0x98, 0x60, 0x28, 0xf0, 0xb8 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xf3, 0x87, 0x06, 0x72, 0x04, 0x70, 0xf1, 0x85 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x49, 0x92, 0xdb, 0x24, 0x6d, 0xb6, 0xff, + 0x48, 0x01, 0xda, 0x93, 0x6c, 0x25, 0xfe, 0xb7 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xee, 0x9a, 0x1b, 0x6f, 0x19, 0x6d, 0xec, 0x98 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4a, 0x94, 0xde, 0x28, 0x62, 0xbc, 0xf6, + 0x50, 0x1a, 0xc4, 0x8e, 0x78, 0x32, 0xec, 0xa6 }, + { 0x00, 0x74, 0xf5, 0x81, 0xf7, 0x83, 0x02, 0x76, + 0xee, 0x9a, 0x1b, 0x6f, 0x19, 0x6d, 0xec, 0x98 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4b, 0x96, 0xdd, 0x2c, 0x67, 0xba, 0xf1, + 0x58, 0x13, 0xce, 0x85, 0x74, 0x3f, 0xe2, 0xa9 }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xc9, 0xbd, 0x3c, 0x48, 0x23, 0x57, 0xd6, 0xa2 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4c, 0x98, 0xd4, 0x30, 0x7c, 0xa8, 0xe4, + 0x60, 0x2c, 0xf8, 0xb4, 0x50, 0x1c, 0xc8, 0x84 }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xc9, 0xbd, 0x3c, 0x48, 0x23, 0x57, 0xd6, 0xa2 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4d, 0x9a, 0xd7, 0x34, 0x79, 0xae, 0xe3, + 0x68, 0x25, 0xf2, 0xbf, 0x5c, 0x11, 0xc6, 0x8b }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xd4, 0xa0, 0x21, 0x55, 0x3e, 0x4a, 0xcb, 0xbf }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x74, 0xf5, 0x81, 0xea, 0x9e, 0x1f, 0x6b, + 0xd4, 0xa0, 0x21, 0x55, 0x3e, 0x4a, 0xcb, 0xbf }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x4f, 0x9e, 0xd1, 0x3c, 0x73, 0xa2, 0xed, + 0x78, 0x37, 0xe6, 0xa9, 0x44, 0x0b, 0xda, 0x95 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x51, 0xa2, 0xf3, 0x44, 0x15, 0xe6, 0xb7, + 0x88, 0xd9, 0x2a, 0x7b, 0xcc, 0x9d, 0x6e, 0x3f }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x72, 0x1b, 0xa0, 0xc9, 0xcb, 0xa2, 0x19, 0x70 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x52, 0xa4, 0xf6, 0x48, 0x1a, 0xec, 0xbe, + 0x90, 0xc2, 0x34, 0x66, 0xd8, 0x8a, 0x7c, 0x2e }, + { 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, + 0x72, 0x1b, 0xa0, 0xc9, 0xcb, 0xa2, 0x19, 0x70 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x55, 0x3c, 0x87, 0xee, 0xf1, 0x98, 0x23, 0x4a }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x54, 0xa8, 0xfc, 0x50, 0x04, 0xf8, 0xac, + 0xa0, 0xf4, 0x08, 0x5c, 0xf0, 0xa4, 0x58, 0x0c }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x55, 0x3c, 0x87, 0xee, 0xf1, 0x98, 0x23, 0x4a }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x55, 0xaa, 0xff, 0x54, 0x01, 0xfe, 0xab, + 0xa8, 0xfd, 0x02, 0x57, 0xfc, 0xa9, 0x56, 0x03 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x56, 0xac, 0xfa, 0x58, 0x0e, 0xf4, 0xa2, + 0xb0, 0xe6, 0x1c, 0x4a, 0xe8, 0xbe, 0x44, 0x12 }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x57, 0xae, 0xf9, 0x5c, 0x0b, 0xf2, 0xa5, + 0xb8, 0xef, 0x16, 0x41, 0xe4, 0xb3, 0x4a, 0x1d }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x1b, 0x72, 0xd4, 0xbd, 0x98, 0xf1, 0x57, 0x3e }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x58, 0xb0, 0xe8, 0x60, 0x38, 0xd0, 0x88, + 0xc0, 0x98, 0x70, 0x28, 0xa0, 0xf8, 0x10, 0x48 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x1b, 0x72, 0xd4, 0xbd, 0x98, 0xf1, 0x57, 0x3e }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x59, 0xb2, 0xeb, 0x64, 0x3d, 0xd6, 0x8f, + 0xc8, 0x91, 0x7a, 0x23, 0xac, 0xf5, 0x1e, 0x47 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x06, 0x6f, 0xc9, 0xa0, 0x85, 0xec, 0x4a, 0x23 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5a, 0xb4, 0xee, 0x68, 0x32, 0xdc, 0x86, + 0xd0, 0x8a, 0x64, 0x3e, 0xb8, 0xe2, 0x0c, 0x56 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x83, 0xea, 0x4c, 0x25, + 0x06, 0x6f, 0xc9, 0xa0, 0x85, 0xec, 0x4a, 0x23 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5b, 0xb6, 0xed, 0x6c, 0x37, 0xda, 0x81, + 0xd8, 0x83, 0x6e, 0x35, 0xb4, 0xef, 0x02, 0x59 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x21, 0x48, 0xee, 0x87, 0xbf, 0xd6, 0x70, 0x19 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5c, 0xb8, 0xe4, 0x70, 0x2c, 0xc8, 0x94, + 0xe0, 0xbc, 0x58, 0x04, 0x90, 0xcc, 0x28, 0x74 }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x21, 0x48, 0xee, 0x87, 0xbf, 0xd6, 0x70, 0x19 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5d, 0xba, 0xe7, 0x74, 0x29, 0xce, 0x93, + 0xe8, 0xb5, 0x52, 0x0f, 0x9c, 0xc1, 0x26, 0x7b }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x3c, 0x55, 0xf3, 0x9a, 0xa2, 0xcb, 0x6d, 0x04 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5e, 0xbc, 0xe2, 0x78, 0x26, 0xc4, 0x9a, + 0xf0, 0xae, 0x4c, 0x12, 0x88, 0xd6, 0x34, 0x6a }, + { 0x00, 0x69, 0xcf, 0xa6, 0x9e, 0xf7, 0x51, 0x38, + 0x3c, 0x55, 0xf3, 0x9a, 0xa2, 0xcb, 0x6d, 0x04 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x3a, 0x3a, 0x3a, 0x3a, 0x27, 0x27, 0x27, 0x27 }, + { 0x00, 0x5f, 0xbe, 0xe1, 0x7c, 0x23, 0xc2, 0x9d, + 0xf8, 0xa7, 0x46, 0x19, 0x84, 0xdb, 0x3a, 0x65 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x4a, 0x04, 0xd6, 0x98, 0x6f, 0x21, 0xf3, 0xbd }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x61, 0xc2, 0xa3, 0x84, 0xe5, 0x46, 0x27, + 0x08, 0x69, 0xca, 0xab, 0x8c, 0xed, 0x4e, 0x2f }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x57, 0x19, 0xcb, 0x85, 0x72, 0x3c, 0xee, 0xa0 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x62, 0xc4, 0xa6, 0x88, 0xea, 0x4c, 0x2e, + 0x10, 0x72, 0xd4, 0xb6, 0x98, 0xfa, 0x5c, 0x3e }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, + 0x57, 0x19, 0xcb, 0x85, 0x72, 0x3c, 0xee, 0xa0 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x63, 0xc6, 0xa5, 0x8c, 0xef, 0x4a, 0x29, + 0x18, 0x7b, 0xde, 0xbd, 0x94, 0xf7, 0x52, 0x31 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x64, 0xc8, 0xac, 0x90, 0xf4, 0x58, 0x3c, + 0x20, 0x44, 0xe8, 0x8c, 0xb0, 0xd4, 0x78, 0x1c }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x70, 0x3e, 0xec, 0xa2, 0x48, 0x06, 0xd4, 0x9a }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x65, 0xca, 0xaf, 0x94, 0xf1, 0x5e, 0x3b, + 0x28, 0x4d, 0xe2, 0x87, 0xbc, 0xd9, 0x76, 0x13 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x6d, 0x23, 0xf1, 0xbf, 0x55, 0x1b, 0xc9, 0x87 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x66, 0xcc, 0xaa, 0x98, 0xfe, 0x54, 0x32, + 0x30, 0x56, 0xfc, 0x9a, 0xa8, 0xce, 0x64, 0x02 }, + { 0x00, 0x4e, 0x9c, 0xd2, 0x38, 0x76, 0xa4, 0xea, + 0x6d, 0x23, 0xf1, 0xbf, 0x55, 0x1b, 0xc9, 0x87 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x67, 0xce, 0xa9, 0x9c, 0xfb, 0x52, 0x35, + 0x38, 0x5f, 0xf6, 0x91, 0xa4, 0xc3, 0x6a, 0x0d }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x3e, 0x70, 0xbf, 0xf1, 0x21, 0x6f, 0xa0, 0xee }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x68, 0xd0, 0xb8, 0xa0, 0xc8, 0x70, 0x18, + 0x40, 0x28, 0x90, 0xf8, 0xe0, 0x88, 0x30, 0x58 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x3e, 0x70, 0xbf, 0xf1, 0x21, 0x6f, 0xa0, 0xee }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x69, 0xd2, 0xbb, 0xa4, 0xcd, 0x76, 0x1f, + 0x48, 0x21, 0x9a, 0xf3, 0xec, 0x85, 0x3e, 0x57 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x23, 0x6d, 0xa2, 0xec, 0x3c, 0x72, 0xbd, 0xf3 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6a, 0xd4, 0xbe, 0xa8, 0xc2, 0x7c, 0x16, + 0x50, 0x3a, 0x84, 0xee, 0xf8, 0x92, 0x2c, 0x46 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x1f, 0x51, 0x9e, 0xd0, + 0x23, 0x6d, 0xa2, 0xec, 0x3c, 0x72, 0xbd, 0xf3 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6b, 0xd6, 0xbd, 0xac, 0xc7, 0x7a, 0x11, + 0x58, 0x33, 0x8e, 0xe5, 0xf4, 0x9f, 0x22, 0x49 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x04, 0x4a, 0x85, 0xcb, 0x06, 0x48, 0x87, 0xc9 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6c, 0xd8, 0xb4, 0xb0, 0xdc, 0x68, 0x04, + 0x60, 0x0c, 0xb8, 0xd4, 0xd0, 0xbc, 0x08, 0x64 }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x04, 0x4a, 0x85, 0xcb, 0x06, 0x48, 0x87, 0xc9 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6d, 0xda, 0xb7, 0xb4, 0xd9, 0x6e, 0x03, + 0x68, 0x05, 0xb2, 0xdf, 0xdc, 0xb1, 0x06, 0x6b }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x19, 0x57, 0x98, 0xd6, 0x1b, 0x55, 0x9a, 0xd4 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6e, 0xdc, 0xb2, 0xb8, 0xd6, 0x64, 0x0a, + 0x70, 0x1e, 0xac, 0xc2, 0xc8, 0xa6, 0x14, 0x7a }, + { 0x00, 0x4e, 0x81, 0xcf, 0x02, 0x4c, 0x83, 0xcd, + 0x19, 0x57, 0x98, 0xd6, 0x1b, 0x55, 0x9a, 0xd4 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x6f, 0xde, 0xb1, 0xbc, 0xd3, 0x62, 0x0d, + 0x78, 0x17, 0xa6, 0xc9, 0xc4, 0xab, 0x1a, 0x75 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x71, 0xe2, 0x93, 0xc4, 0xb5, 0x26, 0x57, + 0x88, 0xf9, 0x6a, 0x1b, 0x4c, 0x3d, 0xae, 0xdf }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xbf, 0xec, 0x19, 0x4a, 0xee, 0xbd, 0x48, 0x1b }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x72, 0xe4, 0x96, 0xc8, 0xba, 0x2c, 0x5e, + 0x90, 0xe2, 0x74, 0x06, 0x58, 0x2a, 0xbc, 0xce }, + { 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, + 0xbf, 0xec, 0x19, 0x4a, 0xee, 0xbd, 0x48, 0x1b }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x73, 0xe6, 0x95, 0xcc, 0xbf, 0x2a, 0x59, + 0x98, 0xeb, 0x7e, 0x0d, 0x54, 0x27, 0xb2, 0xc1 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x74, 0xe8, 0x9c, 0xd0, 0xa4, 0x38, 0x4c, + 0xa0, 0xd4, 0x48, 0x3c, 0x70, 0x04, 0x98, 0xec }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x98, 0xcb, 0x3e, 0x6d, 0xd4, 0x87, 0x72, 0x21 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x75, 0xea, 0x9f, 0xd4, 0xa1, 0x3e, 0x4b, + 0xa8, 0xdd, 0x42, 0x37, 0x7c, 0x09, 0x96, 0xe3 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x85, 0xd6, 0x23, 0x70, 0xc9, 0x9a, 0x6f, 0x3c }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x76, 0xec, 0x9a, 0xd8, 0xae, 0x34, 0x42, + 0xb0, 0xc6, 0x5c, 0x2a, 0x68, 0x1e, 0x84, 0xf2 }, + { 0x00, 0x53, 0xa6, 0xf5, 0x4c, 0x1f, 0xea, 0xb9, + 0x85, 0xd6, 0x23, 0x70, 0xc9, 0x9a, 0x6f, 0x3c }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x77, 0xee, 0x99, 0xdc, 0xab, 0x32, 0x45, + 0xb8, 0xcf, 0x56, 0x21, 0x64, 0x13, 0x8a, 0xfd }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xd6, 0x85, 0x6d, 0x3e, 0xbd, 0xee, 0x06, 0x55 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x78, 0xf0, 0x88, 0xe0, 0x98, 0x10, 0x68, + 0xc0, 0xb8, 0x30, 0x48, 0x20, 0x58, 0xd0, 0xa8 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xd6, 0x85, 0x6d, 0x3e, 0xbd, 0xee, 0x06, 0x55 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x79, 0xf2, 0x8b, 0xe4, 0x9d, 0x16, 0x6f, + 0xc8, 0xb1, 0x3a, 0x43, 0x2c, 0x55, 0xde, 0xa7 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xcb, 0x98, 0x70, 0x23, 0xa0, 0xf3, 0x1b, 0x48 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7a, 0xf4, 0x8e, 0xe8, 0x92, 0x1c, 0x66, + 0xd0, 0xaa, 0x24, 0x5e, 0x38, 0x42, 0xcc, 0xb6 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x6b, 0x38, 0xd0, 0x83, + 0xcb, 0x98, 0x70, 0x23, 0xa0, 0xf3, 0x1b, 0x48 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7b, 0xf6, 0x8d, 0xec, 0x97, 0x1a, 0x61, + 0xd8, 0xa3, 0x2e, 0x55, 0x34, 0x4f, 0xc2, 0xb9 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xec, 0xbf, 0x57, 0x04, 0x9a, 0xc9, 0x21, 0x72 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7c, 0xf8, 0x84, 0xf0, 0x8c, 0x08, 0x74, + 0xe0, 0x9c, 0x18, 0x64, 0x10, 0x6c, 0xe8, 0x94 }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xec, 0xbf, 0x57, 0x04, 0x9a, 0xc9, 0x21, 0x72 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7d, 0xfa, 0x87, 0xf4, 0x89, 0x0e, 0x73, + 0xe8, 0x95, 0x12, 0x6f, 0x1c, 0x61, 0xe6, 0x9b }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xf1, 0xa2, 0x4a, 0x19, 0x87, 0xd4, 0x3c, 0x6f }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7e, 0xfc, 0x82, 0xf8, 0x86, 0x04, 0x7a, + 0xf0, 0x8e, 0x0c, 0x72, 0x08, 0x76, 0xf4, 0x8a }, + { 0x00, 0x53, 0xbb, 0xe8, 0x76, 0x25, 0xcd, 0x9e, + 0xf1, 0xa2, 0x4a, 0x19, 0x87, 0xd4, 0x3c, 0x6f }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x1d, + 0x27, 0x27, 0x27, 0x27, 0x3a, 0x3a, 0x3a, 0x3a }, + { 0x00, 0x7f, 0xfe, 0x81, 0xfc, 0x83, 0x02, 0x7d, + 0xf8, 0x87, 0x06, 0x79, 0x04, 0x7b, 0xfa, 0x85 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x0e, 0xe6, 0xc3, 0x2b, 0x89, 0x61, 0x44, 0xac }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x82, 0x04, 0x86, 0x08, 0x8a, 0x0c, 0x8e, + 0x10, 0x92, 0x14, 0x96, 0x18, 0x9a, 0x1c, 0x9e }, + { 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x0e, 0xe6, 0xc3, 0x2b, 0x89, 0x61, 0x44, 0xac }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x83, 0x06, 0x85, 0x0c, 0x8f, 0x0a, 0x89, + 0x18, 0x9b, 0x1e, 0x9d, 0x14, 0x97, 0x12, 0x91 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x29, 0xc1, 0xe4, 0x0c, 0xb3, 0x5b, 0x7e, 0x96 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x84, 0x08, 0x8c, 0x10, 0x94, 0x18, 0x9c, + 0x20, 0xa4, 0x28, 0xac, 0x30, 0xb4, 0x38, 0xbc }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x29, 0xc1, 0xe4, 0x0c, 0xb3, 0x5b, 0x7e, 0x96 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x85, 0x0a, 0x8f, 0x14, 0x91, 0x1e, 0x9b, + 0x28, 0xad, 0x22, 0xa7, 0x3c, 0xb9, 0x36, 0xb3 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x34, 0xdc, 0xf9, 0x11, 0xae, 0x46, 0x63, 0x8b }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x86, 0x0c, 0x8a, 0x18, 0x9e, 0x14, 0x92, + 0x30, 0xb6, 0x3c, 0xba, 0x28, 0xae, 0x24, 0xa2 }, + { 0x00, 0xe8, 0xcd, 0x25, 0x9a, 0x72, 0x57, 0xbf, + 0x34, 0xdc, 0xf9, 0x11, 0xae, 0x46, 0x63, 0x8b }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x87, 0x0e, 0x89, 0x1c, 0x9b, 0x12, 0x95, + 0x38, 0xbf, 0x36, 0xb1, 0x24, 0xa3, 0x2a, 0xad }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x67, 0x8f, 0xb7, 0x5f, 0xda, 0x32, 0x0a, 0xe2 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x88, 0x10, 0x98, 0x20, 0xa8, 0x30, 0xb8, + 0x40, 0xc8, 0x50, 0xd8, 0x60, 0xe8, 0x70, 0xf8 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x67, 0x8f, 0xb7, 0x5f, 0xda, 0x32, 0x0a, 0xe2 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x89, 0x12, 0x9b, 0x24, 0xad, 0x36, 0xbf, + 0x48, 0xc1, 0x5a, 0xd3, 0x6c, 0xe5, 0x7e, 0xf7 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x7a, 0x92, 0xaa, 0x42, 0xc7, 0x2f, 0x17, 0xff }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8a, 0x14, 0x9e, 0x28, 0xa2, 0x3c, 0xb6, + 0x50, 0xda, 0x44, 0xce, 0x78, 0xf2, 0x6c, 0xe6 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xbd, 0x55, 0x6d, 0x85, + 0x7a, 0x92, 0xaa, 0x42, 0xc7, 0x2f, 0x17, 0xff }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8b, 0x16, 0x9d, 0x2c, 0xa7, 0x3a, 0xb1, + 0x58, 0xd3, 0x4e, 0xc5, 0x74, 0xff, 0x62, 0xe9 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x5d, 0xb5, 0x8d, 0x65, 0xfd, 0x15, 0x2d, 0xc5 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8c, 0x18, 0x94, 0x30, 0xbc, 0x28, 0xa4, + 0x60, 0xec, 0x78, 0xf4, 0x50, 0xdc, 0x48, 0xc4 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x5d, 0xb5, 0x8d, 0x65, 0xfd, 0x15, 0x2d, 0xc5 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8d, 0x1a, 0x97, 0x34, 0xb9, 0x2e, 0xa3, + 0x68, 0xe5, 0x72, 0xff, 0x5c, 0xd1, 0x46, 0xcb }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8e, 0x1c, 0x92, 0x38, 0xb6, 0x24, 0xaa, + 0x70, 0xfe, 0x6c, 0xe2, 0x48, 0xc6, 0x54, 0xda }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x8f, 0x1e, 0x91, 0x3c, 0xb3, 0x22, 0xad, + 0x78, 0xf7, 0x66, 0xe9, 0x44, 0xcb, 0x5a, 0xd5 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xfb, 0x0e, 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x91, 0x22, 0xb3, 0x44, 0xd5, 0x66, 0xf7, + 0x88, 0x19, 0xaa, 0x3b, 0xcc, 0x5d, 0xee, 0x7f }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xe6, 0x13, 0x11, 0xe4, 0x15, 0xe0, 0xe2, 0x17 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x92, 0x24, 0xb6, 0x48, 0xda, 0x6c, 0xfe, + 0x90, 0x02, 0xb4, 0x26, 0xd8, 0x4a, 0xfc, 0x6e }, + { 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, + 0xe6, 0x13, 0x11, 0xe4, 0x15, 0xe0, 0xe2, 0x17 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x93, 0x26, 0xb5, 0x4c, 0xdf, 0x6a, 0xf9, + 0x98, 0x0b, 0xbe, 0x2d, 0xd4, 0x47, 0xf2, 0x61 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xc1, 0x34, 0x36, 0xc3, 0x2f, 0xda, 0xd8, 0x2d }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x94, 0x28, 0xbc, 0x50, 0xc4, 0x78, 0xec, + 0xa0, 0x34, 0x88, 0x1c, 0xf0, 0x64, 0xd8, 0x4c }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xc1, 0x34, 0x36, 0xc3, 0x2f, 0xda, 0xd8, 0x2d }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x95, 0x2a, 0xbf, 0x54, 0xc1, 0x7e, 0xeb, + 0xa8, 0x3d, 0x82, 0x17, 0xfc, 0x69, 0xd6, 0x43 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xdc, 0x29, 0x2b, 0xde, 0x32, 0xc7, 0xc5, 0x30 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x96, 0x2c, 0xba, 0x58, 0xce, 0x74, 0xe2, + 0xb0, 0x26, 0x9c, 0x0a, 0xe8, 0x7e, 0xc4, 0x52 }, + { 0x00, 0xf5, 0xf7, 0x02, 0xee, 0x1b, 0x19, 0xec, + 0xdc, 0x29, 0x2b, 0xde, 0x32, 0xc7, 0xc5, 0x30 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x97, 0x2e, 0xb9, 0x5c, 0xcb, 0x72, 0xe5, + 0xb8, 0x2f, 0x96, 0x01, 0xe4, 0x73, 0xca, 0x5d }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x8f, 0x7a, 0x65, 0x90, 0x46, 0xb3, 0xac, 0x59 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x98, 0x30, 0xa8, 0x60, 0xf8, 0x50, 0xc8, + 0xc0, 0x58, 0xf0, 0x68, 0xa0, 0x38, 0x90, 0x08 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x8f, 0x7a, 0x65, 0x90, 0x46, 0xb3, 0xac, 0x59 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x99, 0x32, 0xab, 0x64, 0xfd, 0x56, 0xcf, + 0xc8, 0x51, 0xfa, 0x63, 0xac, 0x35, 0x9e, 0x07 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x92, 0x67, 0x78, 0x8d, 0x5b, 0xae, 0xb1, 0x44 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9a, 0x34, 0xae, 0x68, 0xf2, 0x5c, 0xc6, + 0xd0, 0x4a, 0xe4, 0x7e, 0xb8, 0x22, 0x8c, 0x16 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xc9, 0x3c, 0x23, 0xd6, + 0x92, 0x67, 0x78, 0x8d, 0x5b, 0xae, 0xb1, 0x44 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9b, 0x36, 0xad, 0x6c, 0xf7, 0x5a, 0xc1, + 0xd8, 0x43, 0xee, 0x75, 0xb4, 0x2f, 0x82, 0x19 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xb5, 0x40, 0x5f, 0xaa, 0x61, 0x94, 0x8b, 0x7e }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xb5, 0x40, 0x5f, 0xaa, 0x61, 0x94, 0x8b, 0x7e }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9d, 0x3a, 0xa7, 0x74, 0xe9, 0x4e, 0xd3, + 0xe8, 0x75, 0xd2, 0x4f, 0x9c, 0x01, 0xa6, 0x3b }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9e, 0x3c, 0xa2, 0x78, 0xe6, 0x44, 0xda, + 0xf0, 0x6e, 0xcc, 0x52, 0x88, 0x16, 0xb4, 0x2a }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x74, 0x74, 0x69, 0x69, 0x4e, 0x4e, 0x53, 0x53 }, + { 0x00, 0x9f, 0x3e, 0xa1, 0x7c, 0xe3, 0x42, 0xdd, + 0xf8, 0x67, 0xc6, 0x59, 0x84, 0x1b, 0xba, 0x25 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa1, 0x42, 0xe3, 0x84, 0x25, 0xc6, 0x67, + 0x08, 0xa9, 0x4a, 0xeb, 0x8c, 0x2d, 0xce, 0x6f }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xc3, 0x11, 0x7a, 0xa8, 0xac, 0x7e, 0x15, 0xc7 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa2, 0x44, 0xe6, 0x88, 0x2a, 0xcc, 0x6e, + 0x10, 0xb2, 0x54, 0xf6, 0x98, 0x3a, 0xdc, 0x7e }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, + 0xc3, 0x11, 0x7a, 0xa8, 0xac, 0x7e, 0x15, 0xc7 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa3, 0x46, 0xe5, 0x8c, 0x2f, 0xca, 0x69, + 0x18, 0xbb, 0x5e, 0xfd, 0x94, 0x37, 0xd2, 0x71 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xe4, 0x36, 0x5d, 0x8f, 0x96, 0x44, 0x2f, 0xfd }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa4, 0x48, 0xec, 0x90, 0x34, 0xd8, 0x7c, + 0x20, 0x84, 0x68, 0xcc, 0xb0, 0x14, 0xf8, 0x5c }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xe4, 0x36, 0x5d, 0x8f, 0x96, 0x44, 0x2f, 0xfd }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa5, 0x4a, 0xef, 0x94, 0x31, 0xde, 0x7b, + 0x28, 0x8d, 0x62, 0xc7, 0xbc, 0x19, 0xf6, 0x53 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xf9, 0x2b, 0x40, 0x92, 0x8b, 0x59, 0x32, 0xe0 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xd2, 0xb9, 0x6b, 0x72, 0xa0, 0xcb, 0x19, + 0xf9, 0x2b, 0x40, 0x92, 0x8b, 0x59, 0x32, 0xe0 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa7, 0x4e, 0xe9, 0x9c, 0x3b, 0xd2, 0x75, + 0x38, 0x9f, 0x76, 0xd1, 0xa4, 0x03, 0xea, 0x4d }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xaa, 0x78, 0x0e, 0xdc, 0xff, 0x2d, 0x5b, 0x89 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa8, 0x50, 0xf8, 0xa0, 0x08, 0xf0, 0x58, + 0x40, 0xe8, 0x10, 0xb8, 0xe0, 0x48, 0xb0, 0x18 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xaa, 0x78, 0x0e, 0xdc, 0xff, 0x2d, 0x5b, 0x89 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xa9, 0x52, 0xfb, 0xa4, 0x0d, 0xf6, 0x5f, + 0x48, 0xe1, 0x1a, 0xb3, 0xec, 0x45, 0xbe, 0x17 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xb7, 0x65, 0x13, 0xc1, 0xe2, 0x30, 0x46, 0x94 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xaa, 0x54, 0xfe, 0xa8, 0x02, 0xfc, 0x56, + 0x50, 0xfa, 0x04, 0xae, 0xf8, 0x52, 0xac, 0x06 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x55, 0x87, 0xf1, 0x23, + 0xb7, 0x65, 0x13, 0xc1, 0xe2, 0x30, 0x46, 0x94 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xab, 0x56, 0xfd, 0xac, 0x07, 0xfa, 0x51, + 0x58, 0xf3, 0x0e, 0xa5, 0xf4, 0x5f, 0xa2, 0x09 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xac, 0x58, 0xf4, 0xb0, 0x1c, 0xe8, 0x44, + 0x60, 0xcc, 0x38, 0x94, 0xd0, 0x7c, 0x88, 0x24 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xad, 0x5a, 0xf7, 0xb4, 0x19, 0xee, 0x43, + 0x68, 0xc5, 0x32, 0x9f, 0xdc, 0x71, 0x86, 0x2b }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x8d, 0x5f, 0x29, 0xfb, 0xc5, 0x17, 0x61, 0xb3 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xae, 0x5c, 0xf2, 0xb8, 0x16, 0xe4, 0x4a, + 0x70, 0xde, 0x2c, 0x82, 0xc8, 0x66, 0x94, 0x3a }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x8d, 0x5f, 0x29, 0xfb, 0xc5, 0x17, 0x61, 0xb3 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xaf, 0x5e, 0xf1, 0xbc, 0x13, 0xe2, 0x4d, + 0x78, 0xd7, 0x26, 0x89, 0xc4, 0x6b, 0x9a, 0x35 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb1, 0x62, 0xd3, 0xc4, 0x75, 0xa6, 0x17, + 0x88, 0x39, 0xea, 0x5b, 0x4c, 0xfd, 0x2e, 0x9f }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb2, 0x64, 0xd6, 0xc8, 0x7a, 0xac, 0x1e, + 0x90, 0x22, 0xf4, 0x46, 0x58, 0xea, 0x3c, 0x8e }, + { 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, + 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb3, 0x66, 0xd5, 0xcc, 0x7f, 0xaa, 0x19, + 0x98, 0x2b, 0xfe, 0x4d, 0x54, 0xe7, 0x32, 0x81 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x0c, 0xc3, 0x8f, 0x40, 0x0a, 0xc5, 0x89, 0x46 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb4, 0x68, 0xdc, 0xd0, 0x64, 0xb8, 0x0c, + 0xa0, 0x14, 0xc8, 0x7c, 0x70, 0xc4, 0x18, 0xac }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x0c, 0xc3, 0x8f, 0x40, 0x0a, 0xc5, 0x89, 0x46 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb5, 0x6a, 0xdf, 0xd4, 0x61, 0xbe, 0x0b, + 0xa8, 0x1d, 0xc2, 0x77, 0x7c, 0xc9, 0x16, 0xa3 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x11, 0xde, 0x92, 0x5d, 0x17, 0xd8, 0x94, 0x5b }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb6, 0x6c, 0xda, 0xd8, 0x6e, 0xb4, 0x02, + 0xb0, 0x06, 0xdc, 0x6a, 0x68, 0xde, 0x04, 0xb2 }, + { 0x00, 0xcf, 0x83, 0x4c, 0x06, 0xc9, 0x85, 0x4a, + 0x11, 0xde, 0x92, 0x5d, 0x17, 0xd8, 0x94, 0x5b }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb7, 0x6e, 0xd9, 0xdc, 0x6b, 0xb2, 0x05, + 0xb8, 0x0f, 0xd6, 0x61, 0x64, 0xd3, 0x0a, 0xbd }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x42, 0x8d, 0xdc, 0x13, 0x63, 0xac, 0xfd, 0x32 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb8, 0x70, 0xc8, 0xe0, 0x58, 0x90, 0x28, + 0xc0, 0x78, 0xb0, 0x08, 0x20, 0x98, 0x50, 0xe8 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x42, 0x8d, 0xdc, 0x13, 0x63, 0xac, 0xfd, 0x32 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xb9, 0x72, 0xcb, 0xe4, 0x5d, 0x96, 0x2f, + 0xc8, 0x71, 0xba, 0x03, 0x2c, 0x95, 0x5e, 0xe7 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x5f, 0x90, 0xc1, 0x0e, 0x7e, 0xb1, 0xe0, 0x2f }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xba, 0x74, 0xce, 0xe8, 0x52, 0x9c, 0x26, + 0xd0, 0x6a, 0xa4, 0x1e, 0x38, 0x82, 0x4c, 0xf6 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x21, 0xee, 0xbf, 0x70, + 0x5f, 0x90, 0xc1, 0x0e, 0x7e, 0xb1, 0xe0, 0x2f }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbc, 0x78, 0xc4, 0xf0, 0x4c, 0x88, 0x34, + 0xe0, 0x5c, 0x98, 0x24, 0x10, 0xac, 0x68, 0xd4 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbd, 0x7a, 0xc7, 0xf4, 0x49, 0x8e, 0x33, + 0xe8, 0x55, 0x92, 0x2f, 0x1c, 0xa1, 0x66, 0xdb }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x65, 0xaa, 0xfb, 0x34, 0x59, 0x96, 0xc7, 0x08 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbe, 0x7c, 0xc2, 0xf8, 0x46, 0x84, 0x3a, + 0xf0, 0x4e, 0x8c, 0x32, 0x08, 0xb6, 0x74, 0xca }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x65, 0xaa, 0xfb, 0x34, 0x59, 0x96, 0xc7, 0x08 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x3a, 0x3a, 0x27, 0x27, + 0x69, 0x69, 0x74, 0x74, 0x53, 0x53, 0x4e, 0x4e }, + { 0x00, 0xbf, 0x7e, 0xc1, 0xfc, 0x43, 0x82, 0x3d, + 0xf8, 0x47, 0x86, 0x39, 0x04, 0xbb, 0x7a, 0xc5 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc1, 0x82, 0x43, 0x04, 0xc5, 0x86, 0x47, + 0x08, 0xc9, 0x8a, 0x4b, 0x0c, 0xcd, 0x8e, 0x4f }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x89, 0x15, 0xac, 0x30, 0xc3, 0x5f, 0xe6, 0x7a }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc2, 0x84, 0x46, 0x08, 0xca, 0x8c, 0x4e, + 0x10, 0xd2, 0x94, 0x56, 0x18, 0xda, 0x9c, 0x5e }, + { 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, + 0x89, 0x15, 0xac, 0x30, 0xc3, 0x5f, 0xe6, 0x7a }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc3, 0x86, 0x45, 0x0c, 0xcf, 0x8a, 0x49, + 0x18, 0xdb, 0x9e, 0x5d, 0x14, 0xd7, 0x92, 0x51 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xae, 0x32, 0x8b, 0x17, 0xf9, 0x65, 0xdc, 0x40 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc4, 0x88, 0x4c, 0x10, 0xd4, 0x98, 0x5c, + 0x20, 0xe4, 0xa8, 0x6c, 0x30, 0xf4, 0xb8, 0x7c }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xae, 0x32, 0x8b, 0x17, 0xf9, 0x65, 0xdc, 0x40 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc5, 0x8a, 0x4f, 0x14, 0xd1, 0x9e, 0x5b, + 0x28, 0xed, 0xa2, 0x67, 0x3c, 0xf9, 0xb6, 0x73 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xb3, 0x2f, 0x96, 0x0a, 0xe4, 0x78, 0xc1, 0x5d }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc6, 0x8c, 0x4a, 0x18, 0xde, 0x94, 0x52, + 0x30, 0xf6, 0xbc, 0x7a, 0x28, 0xee, 0xa4, 0x62 }, + { 0x00, 0x9c, 0x25, 0xb9, 0x57, 0xcb, 0x72, 0xee, + 0xb3, 0x2f, 0x96, 0x0a, 0xe4, 0x78, 0xc1, 0x5d }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc7, 0x8e, 0x49, 0x1c, 0xdb, 0x92, 0x55, + 0x38, 0xff, 0xb6, 0x71, 0x24, 0xe3, 0xaa, 0x6d }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc8, 0x90, 0x58, 0x20, 0xe8, 0xb0, 0x78, + 0x40, 0x88, 0xd0, 0x18, 0x60, 0xa8, 0xf0, 0x38 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xe0, 0x7c, 0xd8, 0x44, 0x90, 0x0c, 0xa8, 0x34 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xc9, 0x92, 0x5b, 0x24, 0xed, 0xb6, 0x7f, + 0x48, 0x81, 0xda, 0x13, 0x6c, 0xa5, 0xfe, 0x37 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xfd, 0x61, 0xc5, 0x59, 0x8d, 0x11, 0xb5, 0x29 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xca, 0x94, 0x5e, 0x28, 0xe2, 0xbc, 0x76, + 0x50, 0x9a, 0xc4, 0x0e, 0x78, 0xb2, 0xec, 0x26 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x70, 0xec, 0x48, 0xd4, + 0xfd, 0x61, 0xc5, 0x59, 0x8d, 0x11, 0xb5, 0x29 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcb, 0x96, 0x5d, 0x2c, 0xe7, 0xba, 0x71, + 0x58, 0x93, 0xce, 0x05, 0x74, 0xbf, 0xe2, 0x29 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xda, 0x46, 0xe2, 0x7e, 0xb7, 0x2b, 0x8f, 0x13 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcc, 0x98, 0x54, 0x30, 0xfc, 0xa8, 0x64, + 0x60, 0xac, 0xf8, 0x34, 0x50, 0x9c, 0xc8, 0x04 }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xda, 0x46, 0xe2, 0x7e, 0xb7, 0x2b, 0x8f, 0x13 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcd, 0x9a, 0x57, 0x34, 0xf9, 0xae, 0x63, + 0x68, 0xa5, 0xf2, 0x3f, 0x5c, 0x91, 0xc6, 0x0b }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xc7, 0x5b, 0xff, 0x63, 0xaa, 0x36, 0x92, 0x0e }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xce, 0x9c, 0x52, 0x38, 0xf6, 0xa4, 0x6a, + 0x70, 0xbe, 0xec, 0x22, 0x48, 0x86, 0xd4, 0x1a }, + { 0x00, 0x9c, 0x38, 0xa4, 0x6d, 0xf1, 0x55, 0xc9, + 0xc7, 0x5b, 0xff, 0x63, 0xaa, 0x36, 0x92, 0x0e }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xcf, 0x9e, 0x51, 0x3c, 0xf3, 0xa2, 0x6d, + 0x78, 0xb7, 0xe6, 0x29, 0x44, 0x8b, 0xda, 0x15 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd1, 0xa2, 0x73, 0x44, 0x95, 0xe6, 0x37, + 0x88, 0x59, 0x2a, 0xfb, 0xcc, 0x1d, 0x6e, 0xbf }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x61, 0xe0, 0x7e, 0xff, 0x5f, 0xde, 0x40, 0xc1 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd2, 0xa4, 0x76, 0x48, 0x9a, 0xec, 0x3e, + 0x90, 0x42, 0x34, 0xe6, 0xd8, 0x0a, 0x7c, 0xae }, + { 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, 0x21, 0xa0, + 0x61, 0xe0, 0x7e, 0xff, 0x5f, 0xde, 0x40, 0xc1 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd3, 0xa6, 0x75, 0x4c, 0x9f, 0xea, 0x39, + 0x98, 0x4b, 0x3e, 0xed, 0xd4, 0x07, 0x72, 0xa1 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x46, 0xc7, 0x59, 0xd8, 0x65, 0xe4, 0x7a, 0xfb }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd4, 0xa8, 0x7c, 0x50, 0x84, 0xf8, 0x2c, + 0xa0, 0x74, 0x08, 0xdc, 0xf0, 0x24, 0x58, 0x8c }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x46, 0xc7, 0x59, 0xd8, 0x65, 0xe4, 0x7a, 0xfb }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd5, 0xaa, 0x7f, 0x54, 0x81, 0xfe, 0x2b, + 0xa8, 0x7d, 0x02, 0xd7, 0xfc, 0x29, 0x56, 0x83 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x5b, 0xda, 0x44, 0xc5, 0x78, 0xf9, 0x67, 0xe6 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd6, 0xac, 0x7a, 0x58, 0x8e, 0xf4, 0x22, + 0xb0, 0x66, 0x1c, 0xca, 0xe8, 0x3e, 0x44, 0x92 }, + { 0x00, 0x81, 0x1f, 0x9e, 0x23, 0xa2, 0x3c, 0xbd, + 0x5b, 0xda, 0x44, 0xc5, 0x78, 0xf9, 0x67, 0xe6 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd7, 0xae, 0x79, 0x5c, 0x8b, 0xf2, 0x25, + 0xb8, 0x6f, 0x16, 0xc1, 0xe4, 0x33, 0x4a, 0x9d }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd8, 0xb0, 0x68, 0x60, 0xb8, 0xd0, 0x08, + 0xc0, 0x18, 0x70, 0xa8, 0xa0, 0x78, 0x10, 0xc8 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x08, 0x89, 0x0a, 0x8b, 0x0c, 0x8d, 0x0e, 0x8f }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xd9, 0xb2, 0x6b, 0x64, 0xbd, 0xd6, 0x0f, + 0xc8, 0x11, 0x7a, 0xa3, 0xac, 0x75, 0x1e, 0xc7 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x15, 0x94, 0x17, 0x96, 0x11, 0x90, 0x13, 0x92 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xda, 0xb4, 0x6e, 0x68, 0xb2, 0xdc, 0x06, + 0xd0, 0x0a, 0x64, 0xbe, 0xb8, 0x62, 0x0c, 0xd6 }, + { 0x00, 0x81, 0x02, 0x83, 0x04, 0x85, 0x06, 0x87, + 0x15, 0x94, 0x17, 0x96, 0x11, 0x90, 0x13, 0x92 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdb, 0xb6, 0x6d, 0x6c, 0xb7, 0xda, 0x01, + 0xd8, 0x03, 0x6e, 0xb5, 0xb4, 0x6f, 0x02, 0xd9 }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x32, 0xb3, 0x30, 0xb1, 0x2b, 0xaa, 0x29, 0xa8 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdc, 0xb8, 0x64, 0x70, 0xac, 0xc8, 0x14, + 0xe0, 0x3c, 0x58, 0x84, 0x90, 0x4c, 0x28, 0xf4 }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x32, 0xb3, 0x30, 0xb1, 0x2b, 0xaa, 0x29, 0xa8 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdd, 0xba, 0x67, 0x74, 0xa9, 0xce, 0x13, + 0xe8, 0x35, 0x52, 0x8f, 0x9c, 0x41, 0x26, 0xfb }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x2f, 0xae, 0x2d, 0xac, 0x36, 0xb7, 0x34, 0xb5 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xde, 0xbc, 0x62, 0x78, 0xa6, 0xc4, 0x1a, + 0xf0, 0x2e, 0x4c, 0x92, 0x88, 0x56, 0x34, 0xea }, + { 0x00, 0x81, 0x02, 0x83, 0x19, 0x98, 0x1b, 0x9a, + 0x2f, 0xae, 0x2d, 0xac, 0x36, 0xb7, 0x34, 0xb5 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x4e, 0x4e, 0x53, 0x53, 0x69, 0x69, 0x74, 0x74 }, + { 0x00, 0xdf, 0xbe, 0x61, 0x7c, 0xa3, 0xc2, 0x1d, + 0xf8, 0x27, 0x46, 0x99, 0x84, 0x5b, 0x3a, 0xe5 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, 0xaa, 0x0c }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe1, 0xc2, 0x23, 0x84, 0x65, 0x46, 0xa7, + 0x08, 0xe9, 0xca, 0x2b, 0x8c, 0x6d, 0x4e, 0xaf }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x44, 0xe2, 0x15, 0xb3, 0xe6, 0x40, 0xb7, 0x11 }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe2, 0xc4, 0x26, 0x88, 0x6a, 0x4c, 0xae, + 0x10, 0xf2, 0xd4, 0x36, 0x98, 0x7a, 0x5c, 0xbe }, + { 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, + 0x44, 0xe2, 0x15, 0xb3, 0xe6, 0x40, 0xb7, 0x11 }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe3, 0xc6, 0x25, 0x8c, 0x6f, 0x4a, 0xa9, + 0x18, 0xfb, 0xde, 0x3d, 0x94, 0x77, 0x52, 0xb1 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x63, 0xc5, 0x32, 0x94, 0xdc, 0x7a, 0x8d, 0x2b }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe4, 0xc8, 0x2c, 0x90, 0x74, 0x58, 0xbc, + 0x20, 0xc4, 0xe8, 0x0c, 0xb0, 0x54, 0x78, 0x9c }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x63, 0xc5, 0x32, 0x94, 0xdc, 0x7a, 0x8d, 0x2b }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe5, 0xca, 0x2f, 0x94, 0x71, 0x5e, 0xbb, + 0x28, 0xcd, 0xe2, 0x07, 0xbc, 0x59, 0x76, 0x93 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x7e, 0xd8, 0x2f, 0x89, 0xc1, 0x67, 0x90, 0x36 }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe6, 0xcc, 0x2a, 0x98, 0x7e, 0x54, 0xb2, + 0x30, 0xd6, 0xfc, 0x1a, 0xa8, 0x4e, 0x64, 0x82 }, + { 0x00, 0xa6, 0x51, 0xf7, 0xbf, 0x19, 0xee, 0x48, + 0x7e, 0xd8, 0x2f, 0x89, 0xc1, 0x67, 0x90, 0x36 }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe7, 0xce, 0x29, 0x9c, 0x7b, 0x52, 0xb5, + 0x38, 0xdf, 0xf6, 0x11, 0xa4, 0x43, 0x6a, 0x8d }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x2d, 0x8b, 0x61, 0xc7, 0xb5, 0x13, 0xf9, 0x5f }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe8, 0xd0, 0x38, 0xa0, 0x48, 0x70, 0x98, + 0x40, 0xa8, 0x90, 0x78, 0xe0, 0x08, 0x30, 0xd8 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x2d, 0x8b, 0x61, 0xc7, 0xb5, 0x13, 0xf9, 0x5f }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xe9, 0xd2, 0x3b, 0xa4, 0x4d, 0x76, 0x9f, + 0x48, 0xa1, 0x9a, 0x73, 0xec, 0x05, 0x3e, 0xd7 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xea, 0xd4, 0x3e, 0xa8, 0x42, 0x7c, 0x96, + 0x50, 0xba, 0x84, 0x6e, 0xf8, 0x12, 0x2c, 0xc6 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x98, 0x3e, 0xd4, 0x72, + 0x30, 0x96, 0x7c, 0xda, 0xa8, 0x0e, 0xe4, 0x42 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xeb, 0xd6, 0x3d, 0xac, 0x47, 0x7a, 0x91, + 0x58, 0xb3, 0x8e, 0x65, 0xf4, 0x1f, 0x22, 0xc9 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x17, 0xb1, 0x5b, 0xfd, 0x92, 0x34, 0xde, 0x78 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xec, 0xd8, 0x34, 0xb0, 0x5c, 0x68, 0x84, + 0x60, 0x8c, 0xb8, 0x54, 0xd0, 0x3c, 0x08, 0xe4 }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x17, 0xb1, 0x5b, 0xfd, 0x92, 0x34, 0xde, 0x78 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xed, 0xda, 0x37, 0xb4, 0x59, 0x6e, 0x83, + 0x68, 0x85, 0xb2, 0x5f, 0xdc, 0x31, 0x06, 0xeb }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x0a, 0xac, 0x46, 0xe0, 0x8f, 0x29, 0xc3, 0x65 }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xee, 0xdc, 0x32, 0xb8, 0x56, 0x64, 0x8a, + 0x70, 0x9e, 0xac, 0x42, 0xc8, 0x26, 0x14, 0xfa }, + { 0x00, 0xa6, 0x4c, 0xea, 0x85, 0x23, 0xc9, 0x6f, + 0x0a, 0xac, 0x46, 0xe0, 0x8f, 0x29, 0xc3, 0x65 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xef, 0xde, 0x31, 0xbc, 0x53, 0x62, 0x8d, + 0x78, 0x97, 0xa6, 0x49, 0xc4, 0x2b, 0x1a, 0xf5 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7 }, + { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, + 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf1, 0xe2, 0x13, 0xc4, 0x35, 0x26, 0xd7, + 0x88, 0x79, 0x6a, 0x9b, 0x4c, 0xbd, 0xae, 0x5f }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xac, 0x17, 0xc7, 0x7c, 0x7a, 0xc1, 0x11, 0xaa }, + { 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, + 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf2, 0xe4, 0x16, 0xc8, 0x3a, 0x2c, 0xde, + 0x90, 0x62, 0x74, 0x86, 0x58, 0xaa, 0xbc, 0x4e }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xac, 0x17, 0xc7, 0x7c, 0x7a, 0xc1, 0x11, 0xaa }, + { 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, + 0x80, 0xb0, 0xe0, 0xd0, 0x40, 0x70, 0x20, 0x10 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf3, 0xe6, 0x15, 0xcc, 0x3f, 0x2a, 0xd9, + 0x98, 0x6b, 0x7e, 0x8d, 0x54, 0xa7, 0xb2, 0x41 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x8b, 0x30, 0xe0, 0x5b, 0x40, 0xfb, 0x2b, 0x90 }, + { 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0, + 0x00, 0x40, 0x80, 0xc0, 0x00, 0x40, 0x80, 0xc0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf4, 0xe8, 0x1c, 0xd0, 0x24, 0x38, 0xcc, + 0xa0, 0x54, 0x48, 0xbc, 0x70, 0x84, 0x98, 0x6c }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x8b, 0x30, 0xe0, 0x5b, 0x40, 0xfb, 0x2b, 0x90 }, + { 0x00, 0x50, 0xa0, 0xf0, 0x40, 0x10, 0xe0, 0xb0, + 0x80, 0xd0, 0x20, 0x70, 0xc0, 0x90, 0x60, 0x30 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf5, 0xea, 0x1f, 0xd4, 0x21, 0x3e, 0xcb, + 0xa8, 0x5d, 0x42, 0xb7, 0x7c, 0x89, 0x96, 0x63 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x96, 0x2d, 0xfd, 0x46, 0x5d, 0xe6, 0x36, 0x8d }, + { 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20, + 0x00, 0x60, 0xc0, 0xa0, 0x80, 0xe0, 0x40, 0x20 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf6, 0xec, 0x1a, 0xd8, 0x2e, 0x34, 0xc2, + 0xb0, 0x46, 0x5c, 0xaa, 0x68, 0x9e, 0x84, 0x72 }, + { 0x00, 0xbb, 0x6b, 0xd0, 0xcb, 0x70, 0xa0, 0x1b, + 0x96, 0x2d, 0xfd, 0x46, 0x5d, 0xe6, 0x36, 0x8d }, + { 0x00, 0x70, 0xe0, 0x90, 0xc0, 0xb0, 0x20, 0x50, + 0x80, 0xf0, 0x60, 0x10, 0x40, 0x30, 0xa0, 0xd0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf7, 0xee, 0x19, 0xdc, 0x2b, 0x32, 0xc5, + 0xb8, 0x4f, 0x56, 0xa1, 0x64, 0x93, 0x8a, 0x7d }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xc5, 0x7e, 0xb3, 0x08, 0x29, 0x92, 0x5f, 0xe4 }, + { 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, + 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf8, 0xf0, 0x08, 0xe0, 0x18, 0x10, 0xe8, + 0xc0, 0x38, 0x30, 0xc8, 0x20, 0xd8, 0xd0, 0x28 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xc5, 0x7e, 0xb3, 0x08, 0x29, 0x92, 0x5f, 0xe4 }, + { 0x00, 0x90, 0x20, 0xb0, 0x40, 0xd0, 0x60, 0xf0, + 0x80, 0x10, 0xa0, 0x30, 0xc0, 0x50, 0xe0, 0x70 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xf9, 0xf2, 0x0b, 0xe4, 0x1d, 0x16, 0xef, + 0xc8, 0x31, 0x3a, 0xc3, 0x2c, 0xd5, 0xde, 0x27 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60, + 0x00, 0xa0, 0x40, 0xe0, 0x80, 0x20, 0xc0, 0x60 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfa, 0xf4, 0x0e, 0xe8, 0x12, 0x1c, 0xe6, + 0xd0, 0x2a, 0x24, 0xde, 0x38, 0xc2, 0xcc, 0x36 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xec, 0x57, 0x9a, 0x21, + 0xd8, 0x63, 0xae, 0x15, 0x34, 0x8f, 0x42, 0xf9 }, + { 0x00, 0xb0, 0x60, 0xd0, 0xc0, 0x70, 0xa0, 0x10, + 0x80, 0x30, 0xe0, 0x50, 0x40, 0xf0, 0x20, 0x90 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfb, 0xf6, 0x0d, 0xec, 0x17, 0x1a, 0xe1, + 0xd8, 0x23, 0x2e, 0xd5, 0x34, 0xcf, 0xc2, 0x39 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xff, 0x44, 0x89, 0x32, 0x0e, 0xb5, 0x78, 0xc3 }, + { 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40, + 0x00, 0xc0, 0x80, 0x40, 0x00, 0xc0, 0x80, 0x40 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfc, 0xf8, 0x04, 0xf0, 0x0c, 0x08, 0xf4, + 0xe0, 0x1c, 0x18, 0xe4, 0x10, 0xec, 0xe8, 0x14 }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xff, 0x44, 0x89, 0x32, 0x0e, 0xb5, 0x78, 0xc3 }, + { 0x00, 0xd0, 0xa0, 0x70, 0x40, 0x90, 0xe0, 0x30, + 0x80, 0x50, 0x20, 0xf0, 0xc0, 0x10, 0x60, 0xb0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfd, 0xfa, 0x07, 0xf4, 0x09, 0x0e, 0xf3, + 0xe8, 0x15, 0x12, 0xef, 0x1c, 0xe1, 0xe6, 0x1b }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xe2, 0x59, 0x94, 0x2f, 0x13, 0xa8, 0x65, 0xde }, + { 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0, + 0x00, 0xe0, 0xc0, 0x20, 0x80, 0x60, 0x40, 0xa0 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xfe, 0xfc, 0x02, 0xf8, 0x06, 0x04, 0xfa, + 0xf0, 0x0e, 0x0c, 0xf2, 0x08, 0xf6, 0xf4, 0x0a }, + { 0x00, 0xbb, 0x76, 0xcd, 0xf1, 0x4a, 0x87, 0x3c, + 0xe2, 0x59, 0x94, 0x2f, 0x13, 0xa8, 0x65, 0xde }, + { 0x00, 0xf0, 0xe0, 0x10, 0xc0, 0x30, 0x20, 0xd0, + 0x80, 0x70, 0x60, 0x90, 0x40, 0xb0, 0xa0, 0x50 }, + { 0x00, 0x00, 0x1d, 0x1d, 0x27, 0x27, 0x3a, 0x3a, + 0x53, 0x53, 0x4e, 0x4e, 0x74, 0x74, 0x69, 0x69 }, + { 0x00, 0xff, 0xfe, 0x01, 0xfc, 0x03, 0x02, 0xfd, + 0xf8, 0x07, 0x06, 0xf9, 0x04, 0xfb, 0xfa, 0x05 } +}; +/* END CSTYLED */ +#endif /* defined(HAVE_SSSE3) || defined(HAVE_AVX2) || defined(HAVE_AVX512BW) */ +#endif /* defined(__x86_64) */ --- linux-aws-4.15.0.orig/zfs/module/zfs/vdev_root.c +++ linux-aws-4.15.0/zfs/module/zfs/vdev_root.c @@ -0,0 +1,126 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include + +/* + * Virtual device vector for the pool's root vdev. + */ + +/* + * We should be able to tolerate one failure with absolutely no damage + * to our metadata. Two failures will take out space maps, a bunch of + * indirect block trees, meta dnodes, dnodes, etc. Probably not a happy + * place to live. When we get smarter, we can liberalize this policy. + * e.g. If we haven't lost two consecutive top-level vdevs, then we are + * probably fine. Adding bean counters during alloc/free can make this + * future guesswork more accurate. + */ +static int +too_many_errors(vdev_t *vd, int numerrors) +{ + ASSERT3U(numerrors, <=, vd->vdev_children); + return (numerrors > 0); +} + +static int +vdev_root_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize, + uint64_t *ashift) +{ + int lasterror = 0; + int numerrors = 0; + int c; + + if (vd->vdev_children == 0) { + vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; + return (SET_ERROR(EINVAL)); + } + + vdev_open_children(vd); + + for (c = 0; c < vd->vdev_children; c++) { + vdev_t *cvd = vd->vdev_child[c]; + + if (cvd->vdev_open_error && !cvd->vdev_islog) { + lasterror = cvd->vdev_open_error; + numerrors++; + } + } + + if (too_many_errors(vd, numerrors)) { + vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS; + return (lasterror); + } + + *asize = 0; + *max_asize = 0; + *ashift = 0; + + return (0); +} + +static void +vdev_root_close(vdev_t *vd) +{ + int c; + + for (c = 0; c < vd->vdev_children; c++) + vdev_close(vd->vdev_child[c]); +} + +static void +vdev_root_state_change(vdev_t *vd, int faulted, int degraded) +{ + if (too_many_errors(vd, faulted)) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, + VDEV_AUX_NO_REPLICAS); + } else if (degraded) { + vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE); + } else { + vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE); + } +} + +vdev_ops_t vdev_root_ops = { + vdev_root_open, + vdev_root_close, + vdev_default_asize, + NULL, /* io_start - not applicable to the root */ + NULL, /* io_done - not applicable to the root */ + vdev_root_state_change, + NULL, + NULL, + NULL, + VDEV_TYPE_ROOT, /* name of this vdev type */ + B_FALSE /* not a leaf vdev */ +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zap.c +++ linux-aws-4.15.0/zfs/module/zfs/zap.c @@ -0,0 +1,1359 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2016 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + */ + +/* + * This file contains the top half of the zfs directory structure + * implementation. The bottom half is in zap_leaf.c. + * + * The zdir is an extendable hash data structure. There is a table of + * pointers to buckets (zap_t->zd_data->zd_leafs). The buckets are + * each a constant size and hold a variable number of directory entries. + * The buckets (aka "leaf nodes") are implemented in zap_leaf.c. + * + * The pointer table holds a power of 2 number of pointers. + * (1<zd_data->zd_phys->zd_prefix_len). The bucket pointed to + * by the pointer at index i in the table holds entries whose hash value + * has a zd_prefix_len - bit prefix + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int fzap_default_block_shift = 14; /* 16k blocksize */ + +extern inline zap_phys_t *zap_f_phys(zap_t *zap); + +static uint64_t zap_allocate_blocks(zap_t *zap, int nblocks); + +void +fzap_byteswap(void *vbuf, size_t size) +{ + uint64_t block_type; + + block_type = *(uint64_t *)vbuf; + + if (block_type == ZBT_LEAF || block_type == BSWAP_64(ZBT_LEAF)) + zap_leaf_byteswap(vbuf, size); + else { + /* it's a ptrtbl block */ + byteswap_uint64_array(vbuf, size); + } +} + +void +fzap_upgrade(zap_t *zap, dmu_tx_t *tx, zap_flags_t flags) +{ + dmu_buf_t *db; + zap_leaf_t *l; + int i; + zap_phys_t *zp; + + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + zap->zap_ismicro = FALSE; + + zap->zap_dbu.dbu_evict_func_sync = zap_evict_sync; + zap->zap_dbu.dbu_evict_func_async = NULL; + + mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, MUTEX_DEFAULT, 0); + zap->zap_f.zap_block_shift = highbit64(zap->zap_dbuf->db_size) - 1; + + zp = zap_f_phys(zap); + /* + * explicitly zero it since it might be coming from an + * initialized microzap + */ + bzero(zap->zap_dbuf->db_data, zap->zap_dbuf->db_size); + zp->zap_block_type = ZBT_HEADER; + zp->zap_magic = ZAP_MAGIC; + + zp->zap_ptrtbl.zt_shift = ZAP_EMBEDDED_PTRTBL_SHIFT(zap); + + zp->zap_freeblk = 2; /* block 1 will be the first leaf */ + zp->zap_num_leafs = 1; + zp->zap_num_entries = 0; + zp->zap_salt = zap->zap_salt; + zp->zap_normflags = zap->zap_normflags; + zp->zap_flags = flags; + + /* block 1 will be the first leaf */ + for (i = 0; i < (1<zap_ptrtbl.zt_shift); i++) + ZAP_EMBEDDED_PTRTBL_ENT(zap, i) = 1; + + /* + * set up block 1 - the first leaf + */ + VERIFY(0 == dmu_buf_hold(zap->zap_objset, zap->zap_object, + 1<l_dbuf = db; + + zap_leaf_init(l, zp->zap_normflags != 0); + + kmem_free(l, sizeof (zap_leaf_t)); + dmu_buf_rele(db, FTAG); +} + +static int +zap_tryupgradedir(zap_t *zap, dmu_tx_t *tx) +{ + if (RW_WRITE_HELD(&zap->zap_rwlock)) + return (1); + if (rw_tryupgrade(&zap->zap_rwlock)) { + dmu_buf_will_dirty(zap->zap_dbuf, tx); + return (1); + } + return (0); +} + +/* + * Generic routines for dealing with the pointer & cookie tables. + */ + +static int +zap_table_grow(zap_t *zap, zap_table_phys_t *tbl, + void (*transfer_func)(const uint64_t *src, uint64_t *dst, int n), + dmu_tx_t *tx) +{ + uint64_t b, newblk; + dmu_buf_t *db_old, *db_new; + int err; + int bs = FZAP_BLOCK_SHIFT(zap); + int hepb = 1<<(bs-4); + /* hepb = half the number of entries in a block */ + + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + ASSERT(tbl->zt_blk != 0); + ASSERT(tbl->zt_numblks > 0); + + if (tbl->zt_nextblk != 0) { + newblk = tbl->zt_nextblk; + } else { + newblk = zap_allocate_blocks(zap, tbl->zt_numblks * 2); + tbl->zt_nextblk = newblk; + ASSERT0(tbl->zt_blks_copied); + dmu_prefetch(zap->zap_objset, zap->zap_object, 0, + tbl->zt_blk << bs, tbl->zt_numblks << bs, + ZIO_PRIORITY_SYNC_READ); + } + + /* + * Copy the ptrtbl from the old to new location. + */ + + b = tbl->zt_blks_copied; + err = dmu_buf_hold(zap->zap_objset, zap->zap_object, + (tbl->zt_blk + b) << bs, FTAG, &db_old, DMU_READ_NO_PREFETCH); + if (err) + return (err); + + /* first half of entries in old[b] go to new[2*b+0] */ + VERIFY(0 == dmu_buf_hold(zap->zap_objset, zap->zap_object, + (newblk + 2*b+0) << bs, FTAG, &db_new, DMU_READ_NO_PREFETCH)); + dmu_buf_will_dirty(db_new, tx); + transfer_func(db_old->db_data, db_new->db_data, hepb); + dmu_buf_rele(db_new, FTAG); + + /* second half of entries in old[b] go to new[2*b+1] */ + VERIFY(0 == dmu_buf_hold(zap->zap_objset, zap->zap_object, + (newblk + 2*b+1) << bs, FTAG, &db_new, DMU_READ_NO_PREFETCH)); + dmu_buf_will_dirty(db_new, tx); + transfer_func((uint64_t *)db_old->db_data + hepb, + db_new->db_data, hepb); + dmu_buf_rele(db_new, FTAG); + + dmu_buf_rele(db_old, FTAG); + + tbl->zt_blks_copied++; + + dprintf("copied block %llu of %llu\n", + tbl->zt_blks_copied, tbl->zt_numblks); + + if (tbl->zt_blks_copied == tbl->zt_numblks) { + (void) dmu_free_range(zap->zap_objset, zap->zap_object, + tbl->zt_blk << bs, tbl->zt_numblks << bs, tx); + + tbl->zt_blk = newblk; + tbl->zt_numblks *= 2; + tbl->zt_shift++; + tbl->zt_nextblk = 0; + tbl->zt_blks_copied = 0; + + dprintf("finished; numblocks now %llu (%uk entries)\n", + tbl->zt_numblks, 1<<(tbl->zt_shift-10)); + } + + return (0); +} + +static int +zap_table_store(zap_t *zap, zap_table_phys_t *tbl, uint64_t idx, uint64_t val, + dmu_tx_t *tx) +{ + int err; + uint64_t blk, off; + int bs = FZAP_BLOCK_SHIFT(zap); + dmu_buf_t *db; + + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + ASSERT(tbl->zt_blk != 0); + + dprintf("storing %llx at index %llx\n", val, idx); + + blk = idx >> (bs-3); + off = idx & ((1<<(bs-3))-1); + + err = dmu_buf_hold(zap->zap_objset, zap->zap_object, + (tbl->zt_blk + blk) << bs, FTAG, &db, DMU_READ_NO_PREFETCH); + if (err) + return (err); + dmu_buf_will_dirty(db, tx); + + if (tbl->zt_nextblk != 0) { + uint64_t idx2 = idx * 2; + uint64_t blk2 = idx2 >> (bs-3); + uint64_t off2 = idx2 & ((1<<(bs-3))-1); + dmu_buf_t *db2; + + err = dmu_buf_hold(zap->zap_objset, zap->zap_object, + (tbl->zt_nextblk + blk2) << bs, FTAG, &db2, + DMU_READ_NO_PREFETCH); + if (err) { + dmu_buf_rele(db, FTAG); + return (err); + } + dmu_buf_will_dirty(db2, tx); + ((uint64_t *)db2->db_data)[off2] = val; + ((uint64_t *)db2->db_data)[off2+1] = val; + dmu_buf_rele(db2, FTAG); + } + + ((uint64_t *)db->db_data)[off] = val; + dmu_buf_rele(db, FTAG); + + return (0); +} + +static int +zap_table_load(zap_t *zap, zap_table_phys_t *tbl, uint64_t idx, uint64_t *valp) +{ + uint64_t blk, off; + int err; + dmu_buf_t *db; + dnode_t *dn; + int bs = FZAP_BLOCK_SHIFT(zap); + + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + + blk = idx >> (bs-3); + off = idx & ((1<<(bs-3))-1); + + /* + * Note: this is equivalent to dmu_buf_hold(), but we use + * _dnode_enter / _by_dnode because it's faster because we don't + * have to hold the dnode. + */ + dn = dmu_buf_dnode_enter(zap->zap_dbuf); + err = dmu_buf_hold_by_dnode(dn, + (tbl->zt_blk + blk) << bs, FTAG, &db, DMU_READ_NO_PREFETCH); + dmu_buf_dnode_exit(zap->zap_dbuf); + if (err) + return (err); + *valp = ((uint64_t *)db->db_data)[off]; + dmu_buf_rele(db, FTAG); + + if (tbl->zt_nextblk != 0) { + /* + * read the nextblk for the sake of i/o error checking, + * so that zap_table_load() will catch errors for + * zap_table_store. + */ + blk = (idx*2) >> (bs-3); + + dn = dmu_buf_dnode_enter(zap->zap_dbuf); + err = dmu_buf_hold_by_dnode(dn, + (tbl->zt_nextblk + blk) << bs, FTAG, &db, + DMU_READ_NO_PREFETCH); + dmu_buf_dnode_exit(zap->zap_dbuf); + if (err == 0) + dmu_buf_rele(db, FTAG); + } + return (err); +} + +/* + * Routines for growing the ptrtbl. + */ + +static void +zap_ptrtbl_transfer(const uint64_t *src, uint64_t *dst, int n) +{ + int i; + for (i = 0; i < n; i++) { + uint64_t lb = src[i]; + dst[2*i+0] = lb; + dst[2*i+1] = lb; + } +} + +static int +zap_grow_ptrtbl(zap_t *zap, dmu_tx_t *tx) +{ + /* + * The pointer table should never use more hash bits than we + * have (otherwise we'd be using useless zero bits to index it). + * If we are within 2 bits of running out, stop growing, since + * this is already an aberrant condition. + */ + if (zap_f_phys(zap)->zap_ptrtbl.zt_shift >= zap_hashbits(zap) - 2) + return (SET_ERROR(ENOSPC)); + + if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { + /* + * We are outgrowing the "embedded" ptrtbl (the one + * stored in the header block). Give it its own entire + * block, which will double the size of the ptrtbl. + */ + uint64_t newblk; + dmu_buf_t *db_new; + int err; + + ASSERT3U(zap_f_phys(zap)->zap_ptrtbl.zt_shift, ==, + ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); + ASSERT0(zap_f_phys(zap)->zap_ptrtbl.zt_blk); + + newblk = zap_allocate_blocks(zap, 1); + err = dmu_buf_hold(zap->zap_objset, zap->zap_object, + newblk << FZAP_BLOCK_SHIFT(zap), FTAG, &db_new, + DMU_READ_NO_PREFETCH); + if (err) + return (err); + dmu_buf_will_dirty(db_new, tx); + zap_ptrtbl_transfer(&ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), + db_new->db_data, 1 << ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); + dmu_buf_rele(db_new, FTAG); + + zap_f_phys(zap)->zap_ptrtbl.zt_blk = newblk; + zap_f_phys(zap)->zap_ptrtbl.zt_numblks = 1; + zap_f_phys(zap)->zap_ptrtbl.zt_shift++; + + ASSERT3U(1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift, ==, + zap_f_phys(zap)->zap_ptrtbl.zt_numblks << + (FZAP_BLOCK_SHIFT(zap)-3)); + + return (0); + } else { + return (zap_table_grow(zap, &zap_f_phys(zap)->zap_ptrtbl, + zap_ptrtbl_transfer, tx)); + } +} + +static void +zap_increment_num_entries(zap_t *zap, int delta, dmu_tx_t *tx) +{ + dmu_buf_will_dirty(zap->zap_dbuf, tx); + mutex_enter(&zap->zap_f.zap_num_entries_mtx); + ASSERT(delta > 0 || zap_f_phys(zap)->zap_num_entries >= -delta); + zap_f_phys(zap)->zap_num_entries += delta; + mutex_exit(&zap->zap_f.zap_num_entries_mtx); +} + +static uint64_t +zap_allocate_blocks(zap_t *zap, int nblocks) +{ + uint64_t newblk; + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + newblk = zap_f_phys(zap)->zap_freeblk; + zap_f_phys(zap)->zap_freeblk += nblocks; + return (newblk); +} + +static void +zap_leaf_evict_sync(void *dbu) +{ + zap_leaf_t *l = dbu; + + rw_destroy(&l->l_rwlock); + kmem_free(l, sizeof (zap_leaf_t)); +} + +static zap_leaf_t * +zap_create_leaf(zap_t *zap, dmu_tx_t *tx) +{ + void *winner; + zap_leaf_t *l = kmem_zalloc(sizeof (zap_leaf_t), KM_SLEEP); + + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + + rw_init(&l->l_rwlock, NULL, RW_NOLOCKDEP, NULL); + rw_enter(&l->l_rwlock, RW_WRITER); + l->l_blkid = zap_allocate_blocks(zap, 1); + l->l_dbuf = NULL; + + VERIFY(0 == dmu_buf_hold(zap->zap_objset, zap->zap_object, + l->l_blkid << FZAP_BLOCK_SHIFT(zap), NULL, &l->l_dbuf, + DMU_READ_NO_PREFETCH)); + dmu_buf_init_user(&l->l_dbu, zap_leaf_evict_sync, NULL, &l->l_dbuf); + winner = dmu_buf_set_user(l->l_dbuf, &l->l_dbu); + ASSERT(winner == NULL); + dmu_buf_will_dirty(l->l_dbuf, tx); + + zap_leaf_init(l, zap->zap_normflags != 0); + + zap_f_phys(zap)->zap_num_leafs++; + + return (l); +} + +int +fzap_count(zap_t *zap, uint64_t *count) +{ + ASSERT(!zap->zap_ismicro); + mutex_enter(&zap->zap_f.zap_num_entries_mtx); /* unnecessary */ + *count = zap_f_phys(zap)->zap_num_entries; + mutex_exit(&zap->zap_f.zap_num_entries_mtx); + return (0); +} + +/* + * Routines for obtaining zap_leaf_t's + */ + +void +zap_put_leaf(zap_leaf_t *l) +{ + rw_exit(&l->l_rwlock); + dmu_buf_rele(l->l_dbuf, NULL); +} + +static zap_leaf_t * +zap_open_leaf(uint64_t blkid, dmu_buf_t *db) +{ + zap_leaf_t *l, *winner; + + ASSERT(blkid != 0); + + l = kmem_zalloc(sizeof (zap_leaf_t), KM_SLEEP); + rw_init(&l->l_rwlock, NULL, RW_DEFAULT, NULL); + rw_enter(&l->l_rwlock, RW_WRITER); + l->l_blkid = blkid; + l->l_bs = highbit64(db->db_size) - 1; + l->l_dbuf = db; + + dmu_buf_init_user(&l->l_dbu, zap_leaf_evict_sync, NULL, &l->l_dbuf); + winner = dmu_buf_set_user(db, &l->l_dbu); + + rw_exit(&l->l_rwlock); + if (winner != NULL) { + /* someone else set it first */ + zap_leaf_evict_sync(&l->l_dbu); + l = winner; + } + + /* + * lhr_pad was previously used for the next leaf in the leaf + * chain. There should be no chained leafs (as we have removed + * support for them). + */ + ASSERT0(zap_leaf_phys(l)->l_hdr.lh_pad1); + + /* + * There should be more hash entries than there can be + * chunks to put in the hash table + */ + ASSERT3U(ZAP_LEAF_HASH_NUMENTRIES(l), >, ZAP_LEAF_NUMCHUNKS(l) / 3); + + /* The chunks should begin at the end of the hash table */ + ASSERT3P(&ZAP_LEAF_CHUNK(l, 0), ==, (zap_leaf_chunk_t *) + &zap_leaf_phys(l)->l_hash[ZAP_LEAF_HASH_NUMENTRIES(l)]); + + /* The chunks should end at the end of the block */ + ASSERT3U((uintptr_t)&ZAP_LEAF_CHUNK(l, ZAP_LEAF_NUMCHUNKS(l)) - + (uintptr_t)zap_leaf_phys(l), ==, l->l_dbuf->db_size); + + return (l); +} + +static int +zap_get_leaf_byblk(zap_t *zap, uint64_t blkid, dmu_tx_t *tx, krw_t lt, + zap_leaf_t **lp) +{ + dmu_buf_t *db; + zap_leaf_t *l; + int bs = FZAP_BLOCK_SHIFT(zap); + int err; + dnode_t *dn; + + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + + /* + * If system crashed just after dmu_free_long_range in zfs_rmnode, we + * would be left with an empty xattr dir in delete queue. blkid=0 + * would be passed in when doing zfs_purgedir. If that's the case we + * should just return immediately. The underlying objects should + * already be freed, so this should be perfectly fine. + */ + if (blkid == 0) + return (ENOENT); + + dn = dmu_buf_dnode_enter(zap->zap_dbuf); + err = dmu_buf_hold_by_dnode(dn, + blkid << bs, NULL, &db, DMU_READ_NO_PREFETCH); + dmu_buf_dnode_exit(zap->zap_dbuf); + if (err) + return (err); + + ASSERT3U(db->db_object, ==, zap->zap_object); + ASSERT3U(db->db_offset, ==, blkid << bs); + ASSERT3U(db->db_size, ==, 1 << bs); + ASSERT(blkid != 0); + + l = dmu_buf_get_user(db); + + if (l == NULL) + l = zap_open_leaf(blkid, db); + + rw_enter(&l->l_rwlock, lt); + /* + * Must lock before dirtying, otherwise zap_leaf_phys(l) could change, + * causing ASSERT below to fail. + */ + if (lt == RW_WRITER) + dmu_buf_will_dirty(db, tx); + ASSERT3U(l->l_blkid, ==, blkid); + ASSERT3P(l->l_dbuf, ==, db); + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_block_type, ==, ZBT_LEAF); + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC); + + *lp = l; + return (0); +} + +static int +zap_idx_to_blk(zap_t *zap, uint64_t idx, uint64_t *valp) +{ + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + + if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { + ASSERT3U(idx, <, + (1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift)); + *valp = ZAP_EMBEDDED_PTRTBL_ENT(zap, idx); + return (0); + } else { + return (zap_table_load(zap, &zap_f_phys(zap)->zap_ptrtbl, + idx, valp)); + } +} + +static int +zap_set_idx_to_blk(zap_t *zap, uint64_t idx, uint64_t blk, dmu_tx_t *tx) +{ + ASSERT(tx != NULL); + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + + if (zap_f_phys(zap)->zap_ptrtbl.zt_blk == 0) { + ZAP_EMBEDDED_PTRTBL_ENT(zap, idx) = blk; + return (0); + } else { + return (zap_table_store(zap, &zap_f_phys(zap)->zap_ptrtbl, + idx, blk, tx)); + } +} + +static int +zap_deref_leaf(zap_t *zap, uint64_t h, dmu_tx_t *tx, krw_t lt, zap_leaf_t **lp) +{ + uint64_t idx, blk; + int err; + + ASSERT(zap->zap_dbuf == NULL || + zap_f_phys(zap) == zap->zap_dbuf->db_data); + + /* Reality check for corrupt zap objects (leaf or header). */ + if ((zap_f_phys(zap)->zap_block_type != ZBT_LEAF && + zap_f_phys(zap)->zap_block_type != ZBT_HEADER) || + zap_f_phys(zap)->zap_magic != ZAP_MAGIC) { + return (SET_ERROR(EIO)); + } + idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift); + err = zap_idx_to_blk(zap, idx, &blk); + if (err != 0) + return (err); + err = zap_get_leaf_byblk(zap, blk, tx, lt, lp); + + ASSERT(err || + ZAP_HASH_IDX(h, zap_leaf_phys(*lp)->l_hdr.lh_prefix_len) == + zap_leaf_phys(*lp)->l_hdr.lh_prefix); + return (err); +} + +static int +zap_expand_leaf(zap_name_t *zn, zap_leaf_t *l, + void *tag, dmu_tx_t *tx, zap_leaf_t **lp) +{ + zap_t *zap = zn->zn_zap; + uint64_t hash = zn->zn_hash; + zap_leaf_t *nl; + int prefix_diff, i, err; + uint64_t sibling; + int old_prefix_len = zap_leaf_phys(l)->l_hdr.lh_prefix_len; + + ASSERT3U(old_prefix_len, <=, zap_f_phys(zap)->zap_ptrtbl.zt_shift); + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + + ASSERT3U(ZAP_HASH_IDX(hash, old_prefix_len), ==, + zap_leaf_phys(l)->l_hdr.lh_prefix); + + if (zap_tryupgradedir(zap, tx) == 0 || + old_prefix_len == zap_f_phys(zap)->zap_ptrtbl.zt_shift) { + /* We failed to upgrade, or need to grow the pointer table */ + objset_t *os = zap->zap_objset; + uint64_t object = zap->zap_object; + + zap_put_leaf(l); + zap_unlockdir(zap, tag); + err = zap_lockdir(os, object, tx, RW_WRITER, + FALSE, FALSE, tag, &zn->zn_zap); + zap = zn->zn_zap; + if (err) + return (err); + ASSERT(!zap->zap_ismicro); + + while (old_prefix_len == + zap_f_phys(zap)->zap_ptrtbl.zt_shift) { + err = zap_grow_ptrtbl(zap, tx); + if (err) + return (err); + } + + err = zap_deref_leaf(zap, hash, tx, RW_WRITER, &l); + if (err) + return (err); + + if (zap_leaf_phys(l)->l_hdr.lh_prefix_len != old_prefix_len) { + /* it split while our locks were down */ + *lp = l; + return (0); + } + } + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + ASSERT3U(old_prefix_len, <, zap_f_phys(zap)->zap_ptrtbl.zt_shift); + ASSERT3U(ZAP_HASH_IDX(hash, old_prefix_len), ==, + zap_leaf_phys(l)->l_hdr.lh_prefix); + + prefix_diff = zap_f_phys(zap)->zap_ptrtbl.zt_shift - + (old_prefix_len + 1); + sibling = (ZAP_HASH_IDX(hash, old_prefix_len + 1) | 1) << prefix_diff; + + /* check for i/o errors before doing zap_leaf_split */ + for (i = 0; i < (1ULL<l_blkid); + } + + nl = zap_create_leaf(zap, tx); + zap_leaf_split(l, nl, zap->zap_normflags != 0); + + /* set sibling pointers */ + for (i = 0; i < (1ULL << prefix_diff); i++) { + err = zap_set_idx_to_blk(zap, sibling+i, nl->l_blkid, tx); + ASSERT0(err); /* we checked for i/o errors above */ + } + + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_prefix_len, >, 0); + + if (hash & (1ULL << (64 - zap_leaf_phys(l)->l_hdr.lh_prefix_len))) { + /* we want the sibling */ + zap_put_leaf(l); + *lp = nl; + } else { + zap_put_leaf(nl); + *lp = l; + } + + return (0); +} + +static void +zap_put_leaf_maybe_grow_ptrtbl(zap_name_t *zn, zap_leaf_t *l, + void *tag, dmu_tx_t *tx) +{ + zap_t *zap = zn->zn_zap; + int shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; + int leaffull = (zap_leaf_phys(l)->l_hdr.lh_prefix_len == shift && + zap_leaf_phys(l)->l_hdr.lh_nfree < ZAP_LEAF_LOW_WATER); + + zap_put_leaf(l); + + if (leaffull || zap_f_phys(zap)->zap_ptrtbl.zt_nextblk) { + int err; + + /* + * We are in the middle of growing the pointer table, or + * this leaf will soon make us grow it. + */ + if (zap_tryupgradedir(zap, tx) == 0) { + objset_t *os = zap->zap_objset; + uint64_t zapobj = zap->zap_object; + + zap_unlockdir(zap, tag); + err = zap_lockdir(os, zapobj, tx, + RW_WRITER, FALSE, FALSE, tag, &zn->zn_zap); + zap = zn->zn_zap; + if (err) + return; + } + + /* could have finished growing while our locks were down */ + if (zap_f_phys(zap)->zap_ptrtbl.zt_shift == shift) + (void) zap_grow_ptrtbl(zap, tx); + } +} + +static int +fzap_checkname(zap_name_t *zn) +{ + if (zn->zn_key_orig_numints * zn->zn_key_intlen > ZAP_MAXNAMELEN) + return (SET_ERROR(ENAMETOOLONG)); + return (0); +} + +static int +fzap_checksize(uint64_t integer_size, uint64_t num_integers) +{ + /* Only integer sizes supported by C */ + switch (integer_size) { + case 1: + case 2: + case 4: + case 8: + break; + default: + return (SET_ERROR(EINVAL)); + } + + if (integer_size * num_integers > ZAP_MAXVALUELEN) + return (E2BIG); + + return (0); +} + +static int +fzap_check(zap_name_t *zn, uint64_t integer_size, uint64_t num_integers) +{ + int err; + + if ((err = fzap_checkname(zn)) != 0) + return (err); + return (fzap_checksize(integer_size, num_integers)); +} + +/* + * Routines for manipulating attributes. + */ +int +fzap_lookup(zap_name_t *zn, + uint64_t integer_size, uint64_t num_integers, void *buf, + char *realname, int rn_len, boolean_t *ncp) +{ + zap_leaf_t *l; + int err; + zap_entry_handle_t zeh; + + if ((err = fzap_checkname(zn)) != 0) + return (err); + + err = zap_deref_leaf(zn->zn_zap, zn->zn_hash, NULL, RW_READER, &l); + if (err != 0) + return (err); + err = zap_leaf_lookup(l, zn, &zeh); + if (err == 0) { + if ((err = fzap_checksize(integer_size, num_integers)) != 0) { + zap_put_leaf(l); + return (err); + } + + err = zap_entry_read(&zeh, integer_size, num_integers, buf); + (void) zap_entry_read_name(zn->zn_zap, &zeh, rn_len, realname); + if (ncp) { + *ncp = zap_entry_normalization_conflict(&zeh, + zn, NULL, zn->zn_zap); + } + } + + zap_put_leaf(l); + return (err); +} + +int +fzap_add_cd(zap_name_t *zn, + uint64_t integer_size, uint64_t num_integers, + const void *val, uint32_t cd, void *tag, dmu_tx_t *tx) +{ + zap_leaf_t *l; + int err; + zap_entry_handle_t zeh; + zap_t *zap = zn->zn_zap; + + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + ASSERT(!zap->zap_ismicro); + ASSERT(fzap_check(zn, integer_size, num_integers) == 0); + + err = zap_deref_leaf(zap, zn->zn_hash, tx, RW_WRITER, &l); + if (err != 0) + return (err); +retry: + err = zap_leaf_lookup(l, zn, &zeh); + if (err == 0) { + err = SET_ERROR(EEXIST); + goto out; + } + if (err != ENOENT) + goto out; + + err = zap_entry_create(l, zn, cd, + integer_size, num_integers, val, &zeh); + + if (err == 0) { + zap_increment_num_entries(zap, 1, tx); + } else if (err == EAGAIN) { + err = zap_expand_leaf(zn, l, tag, tx, &l); + zap = zn->zn_zap; /* zap_expand_leaf() may change zap */ + if (err == 0) + goto retry; + } + +out: + if (zap != NULL) + zap_put_leaf_maybe_grow_ptrtbl(zn, l, tag, tx); + return (err); +} + +int +fzap_add(zap_name_t *zn, + uint64_t integer_size, uint64_t num_integers, + const void *val, void *tag, dmu_tx_t *tx) +{ + int err = fzap_check(zn, integer_size, num_integers); + if (err != 0) + return (err); + + return (fzap_add_cd(zn, integer_size, num_integers, + val, ZAP_NEED_CD, tag, tx)); +} + +int +fzap_update(zap_name_t *zn, + int integer_size, uint64_t num_integers, const void *val, + void *tag, dmu_tx_t *tx) +{ + zap_leaf_t *l; + int err, create; + zap_entry_handle_t zeh; + zap_t *zap = zn->zn_zap; + + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + err = fzap_check(zn, integer_size, num_integers); + if (err != 0) + return (err); + + err = zap_deref_leaf(zap, zn->zn_hash, tx, RW_WRITER, &l); + if (err != 0) + return (err); +retry: + err = zap_leaf_lookup(l, zn, &zeh); + create = (err == ENOENT); + ASSERT(err == 0 || err == ENOENT); + + if (create) { + err = zap_entry_create(l, zn, ZAP_NEED_CD, + integer_size, num_integers, val, &zeh); + if (err == 0) + zap_increment_num_entries(zap, 1, tx); + } else { + err = zap_entry_update(&zeh, integer_size, num_integers, val); + } + + if (err == EAGAIN) { + err = zap_expand_leaf(zn, l, tag, tx, &l); + zap = zn->zn_zap; /* zap_expand_leaf() may change zap */ + if (err == 0) + goto retry; + } + + if (zap != NULL) + zap_put_leaf_maybe_grow_ptrtbl(zn, l, tag, tx); + return (err); +} + +int +fzap_length(zap_name_t *zn, + uint64_t *integer_size, uint64_t *num_integers) +{ + zap_leaf_t *l; + int err; + zap_entry_handle_t zeh; + + err = zap_deref_leaf(zn->zn_zap, zn->zn_hash, NULL, RW_READER, &l); + if (err != 0) + return (err); + err = zap_leaf_lookup(l, zn, &zeh); + if (err != 0) + goto out; + + if (integer_size) + *integer_size = zeh.zeh_integer_size; + if (num_integers) + *num_integers = zeh.zeh_num_integers; +out: + zap_put_leaf(l); + return (err); +} + +int +fzap_remove(zap_name_t *zn, dmu_tx_t *tx) +{ + zap_leaf_t *l; + int err; + zap_entry_handle_t zeh; + + err = zap_deref_leaf(zn->zn_zap, zn->zn_hash, tx, RW_WRITER, &l); + if (err != 0) + return (err); + err = zap_leaf_lookup(l, zn, &zeh); + if (err == 0) { + zap_entry_remove(&zeh); + zap_increment_num_entries(zn->zn_zap, -1, tx); + } + zap_put_leaf(l); + return (err); +} + +void +fzap_prefetch(zap_name_t *zn) +{ + uint64_t idx, blk; + zap_t *zap = zn->zn_zap; + int bs; + + idx = ZAP_HASH_IDX(zn->zn_hash, + zap_f_phys(zap)->zap_ptrtbl.zt_shift); + if (zap_idx_to_blk(zap, idx, &blk) != 0) + return; + bs = FZAP_BLOCK_SHIFT(zap); + dmu_prefetch(zap->zap_objset, zap->zap_object, 0, blk << bs, 1 << bs, + ZIO_PRIORITY_SYNC_READ); +} + +/* + * Helper functions for consumers. + */ + +uint64_t +zap_create_link(objset_t *os, dmu_object_type_t ot, uint64_t parent_obj, + const char *name, dmu_tx_t *tx) +{ + return (zap_create_link_dnsize(os, ot, parent_obj, name, 0, tx)); +} + +uint64_t +zap_create_link_dnsize(objset_t *os, dmu_object_type_t ot, uint64_t parent_obj, + const char *name, int dnodesize, dmu_tx_t *tx) +{ + uint64_t new_obj; + + VERIFY((new_obj = zap_create_dnsize(os, ot, DMU_OT_NONE, 0, + dnodesize, tx)) > 0); + VERIFY0(zap_add(os, parent_obj, name, sizeof (uint64_t), 1, &new_obj, + tx)); + + return (new_obj); +} + +int +zap_value_search(objset_t *os, uint64_t zapobj, uint64_t value, uint64_t mask, + char *name) +{ + zap_cursor_t zc; + zap_attribute_t *za; + int err; + + if (mask == 0) + mask = -1ULL; + + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + for (zap_cursor_init(&zc, os, zapobj); + (err = zap_cursor_retrieve(&zc, za)) == 0; + zap_cursor_advance(&zc)) { + if ((za->za_first_integer & mask) == (value & mask)) { + (void) strcpy(name, za->za_name); + break; + } + } + zap_cursor_fini(&zc); + kmem_free(za, sizeof (zap_attribute_t)); + return (err); +} + +int +zap_join(objset_t *os, uint64_t fromobj, uint64_t intoobj, dmu_tx_t *tx) +{ + zap_cursor_t zc; + zap_attribute_t za; + int err; + + err = 0; + for (zap_cursor_init(&zc, os, fromobj); + zap_cursor_retrieve(&zc, &za) == 0; + (void) zap_cursor_advance(&zc)) { + if (za.za_integer_length != 8 || za.za_num_integers != 1) { + err = SET_ERROR(EINVAL); + break; + } + err = zap_add(os, intoobj, za.za_name, + 8, 1, &za.za_first_integer, tx); + if (err) + break; + } + zap_cursor_fini(&zc); + return (err); +} + +int +zap_join_key(objset_t *os, uint64_t fromobj, uint64_t intoobj, + uint64_t value, dmu_tx_t *tx) +{ + zap_cursor_t zc; + zap_attribute_t za; + int err; + + err = 0; + for (zap_cursor_init(&zc, os, fromobj); + zap_cursor_retrieve(&zc, &za) == 0; + (void) zap_cursor_advance(&zc)) { + if (za.za_integer_length != 8 || za.za_num_integers != 1) { + err = SET_ERROR(EINVAL); + break; + } + err = zap_add(os, intoobj, za.za_name, + 8, 1, &value, tx); + if (err) + break; + } + zap_cursor_fini(&zc); + return (err); +} + +int +zap_join_increment(objset_t *os, uint64_t fromobj, uint64_t intoobj, + dmu_tx_t *tx) +{ + zap_cursor_t zc; + zap_attribute_t za; + int err; + + err = 0; + for (zap_cursor_init(&zc, os, fromobj); + zap_cursor_retrieve(&zc, &za) == 0; + (void) zap_cursor_advance(&zc)) { + uint64_t delta = 0; + + if (za.za_integer_length != 8 || za.za_num_integers != 1) { + err = SET_ERROR(EINVAL); + break; + } + + err = zap_lookup(os, intoobj, za.za_name, 8, 1, &delta); + if (err != 0 && err != ENOENT) + break; + delta += za.za_first_integer; + err = zap_update(os, intoobj, za.za_name, 8, 1, &delta, tx); + if (err) + break; + } + zap_cursor_fini(&zc); + return (err); +} + +int +zap_add_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)value); + return (zap_add(os, obj, name, 8, 1, &value, tx)); +} + +int +zap_remove_int(objset_t *os, uint64_t obj, uint64_t value, dmu_tx_t *tx) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)value); + return (zap_remove(os, obj, name, tx)); +} + +int +zap_lookup_int(objset_t *os, uint64_t obj, uint64_t value) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)value); + return (zap_lookup(os, obj, name, 8, 1, &value)); +} + +int +zap_add_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t value, dmu_tx_t *tx) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)key); + return (zap_add(os, obj, name, 8, 1, &value, tx)); +} + +int +zap_update_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t value, dmu_tx_t *tx) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)key); + return (zap_update(os, obj, name, 8, 1, &value, tx)); +} + +int +zap_lookup_int_key(objset_t *os, uint64_t obj, uint64_t key, uint64_t *valuep) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)key); + return (zap_lookup(os, obj, name, 8, 1, valuep)); +} + +int +zap_increment(objset_t *os, uint64_t obj, const char *name, int64_t delta, + dmu_tx_t *tx) +{ + uint64_t value = 0; + int err; + + if (delta == 0) + return (0); + + err = zap_lookup(os, obj, name, 8, 1, &value); + if (err != 0 && err != ENOENT) + return (err); + value += delta; + if (value == 0) + err = zap_remove(os, obj, name, tx); + else + err = zap_update(os, obj, name, 8, 1, &value, tx); + return (err); +} + +int +zap_increment_int(objset_t *os, uint64_t obj, uint64_t key, int64_t delta, + dmu_tx_t *tx) +{ + char name[20]; + + (void) snprintf(name, sizeof (name), "%llx", (longlong_t)key); + return (zap_increment(os, obj, name, delta, tx)); +} + +/* + * Routines for iterating over the attributes. + */ + +int +fzap_cursor_retrieve(zap_t *zap, zap_cursor_t *zc, zap_attribute_t *za) +{ + int err = ENOENT; + zap_entry_handle_t zeh; + zap_leaf_t *l; + + /* retrieve the next entry at or after zc_hash/zc_cd */ + /* if no entry, return ENOENT */ + + if (zc->zc_leaf && + (ZAP_HASH_IDX(zc->zc_hash, + zap_leaf_phys(zc->zc_leaf)->l_hdr.lh_prefix_len) != + zap_leaf_phys(zc->zc_leaf)->l_hdr.lh_prefix)) { + rw_enter(&zc->zc_leaf->l_rwlock, RW_READER); + zap_put_leaf(zc->zc_leaf); + zc->zc_leaf = NULL; + } + +again: + if (zc->zc_leaf == NULL) { + err = zap_deref_leaf(zap, zc->zc_hash, NULL, RW_READER, + &zc->zc_leaf); + if (err != 0) + return (err); + } else { + rw_enter(&zc->zc_leaf->l_rwlock, RW_READER); + } + l = zc->zc_leaf; + + err = zap_leaf_lookup_closest(l, zc->zc_hash, zc->zc_cd, &zeh); + + if (err == ENOENT) { + if (zap_leaf_phys(l)->l_hdr.lh_prefix_len == 0) { + zc->zc_hash = -1ULL; + zc->zc_cd = 0; + } else { + uint64_t nocare = (1ULL << + (64 - zap_leaf_phys(l)->l_hdr.lh_prefix_len)) - 1; + + zc->zc_hash = (zc->zc_hash & ~nocare) + nocare + 1; + zc->zc_cd = 0; + + if (zc->zc_hash == 0) { + zc->zc_hash = -1ULL; + } else { + zap_put_leaf(zc->zc_leaf); + zc->zc_leaf = NULL; + goto again; + } + } + } + + if (err == 0) { + zc->zc_hash = zeh.zeh_hash; + zc->zc_cd = zeh.zeh_cd; + za->za_integer_length = zeh.zeh_integer_size; + za->za_num_integers = zeh.zeh_num_integers; + if (zeh.zeh_num_integers == 0) { + za->za_first_integer = 0; + } else { + err = zap_entry_read(&zeh, 8, 1, &za->za_first_integer); + ASSERT(err == 0 || err == EOVERFLOW); + } + err = zap_entry_read_name(zap, &zeh, + sizeof (za->za_name), za->za_name); + ASSERT(err == 0); + + za->za_normalization_conflict = + zap_entry_normalization_conflict(&zeh, + NULL, za->za_name, zap); + } + rw_exit(&zc->zc_leaf->l_rwlock); + return (err); +} + +static void +zap_stats_ptrtbl(zap_t *zap, uint64_t *tbl, int len, zap_stats_t *zs) +{ + int i, err; + uint64_t lastblk = 0; + + /* + * NB: if a leaf has more pointers than an entire ptrtbl block + * can hold, then it'll be accounted for more than once, since + * we won't have lastblk. + */ + for (i = 0; i < len; i++) { + zap_leaf_t *l; + + if (tbl[i] == lastblk) + continue; + lastblk = tbl[i]; + + err = zap_get_leaf_byblk(zap, tbl[i], NULL, RW_READER, &l); + if (err == 0) { + zap_leaf_stats(zap, l, zs); + zap_put_leaf(l); + } + } +} + +void +fzap_get_stats(zap_t *zap, zap_stats_t *zs) +{ + int bs = FZAP_BLOCK_SHIFT(zap); + zs->zs_blocksize = 1ULL << bs; + + /* + * Set zap_phys_t fields + */ + zs->zs_num_leafs = zap_f_phys(zap)->zap_num_leafs; + zs->zs_num_entries = zap_f_phys(zap)->zap_num_entries; + zs->zs_num_blocks = zap_f_phys(zap)->zap_freeblk; + zs->zs_block_type = zap_f_phys(zap)->zap_block_type; + zs->zs_magic = zap_f_phys(zap)->zap_magic; + zs->zs_salt = zap_f_phys(zap)->zap_salt; + + /* + * Set zap_ptrtbl fields + */ + zs->zs_ptrtbl_len = 1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift; + zs->zs_ptrtbl_nextblk = zap_f_phys(zap)->zap_ptrtbl.zt_nextblk; + zs->zs_ptrtbl_blks_copied = + zap_f_phys(zap)->zap_ptrtbl.zt_blks_copied; + zs->zs_ptrtbl_zt_blk = zap_f_phys(zap)->zap_ptrtbl.zt_blk; + zs->zs_ptrtbl_zt_numblks = zap_f_phys(zap)->zap_ptrtbl.zt_numblks; + zs->zs_ptrtbl_zt_shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; + + if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { + /* the ptrtbl is entirely in the header block. */ + zap_stats_ptrtbl(zap, &ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), + 1 << ZAP_EMBEDDED_PTRTBL_SHIFT(zap), zs); + } else { + int b; + + dmu_prefetch(zap->zap_objset, zap->zap_object, 0, + zap_f_phys(zap)->zap_ptrtbl.zt_blk << bs, + zap_f_phys(zap)->zap_ptrtbl.zt_numblks << bs, + ZIO_PRIORITY_SYNC_READ); + + for (b = 0; b < zap_f_phys(zap)->zap_ptrtbl.zt_numblks; + b++) { + dmu_buf_t *db; + int err; + + err = dmu_buf_hold(zap->zap_objset, zap->zap_object, + (zap_f_phys(zap)->zap_ptrtbl.zt_blk + b) << bs, + FTAG, &db, DMU_READ_NO_PREFETCH); + if (err == 0) { + zap_stats_ptrtbl(zap, db->db_data, + 1<<(bs-3), zs); + dmu_buf_rele(db, FTAG); + } + } + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zap_leaf.c +++ linux-aws-4.15.0/zfs/module/zfs/zap_leaf.c @@ -0,0 +1,879 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +/* + * The 512-byte leaf is broken into 32 16-byte chunks. + * chunk number n means l_chunk[n], even though the header precedes it. + * the names are stored null-terminated. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static uint16_t *zap_leaf_rehash_entry(zap_leaf_t *l, uint16_t entry); + +#define CHAIN_END 0xffff /* end of the chunk chain */ + +/* half the (current) minimum block size */ +#define MAX_ARRAY_BYTES (8<<10) + +#define LEAF_HASH(l, h) \ + ((ZAP_LEAF_HASH_NUMENTRIES(l)-1) & \ + ((h) >> \ + (64 - ZAP_LEAF_HASH_SHIFT(l) - zap_leaf_phys(l)->l_hdr.lh_prefix_len))) + +#define LEAF_HASH_ENTPTR(l, h) (&zap_leaf_phys(l)->l_hash[LEAF_HASH(l, h)]) + +extern inline zap_leaf_phys_t *zap_leaf_phys(zap_leaf_t *l); + +static void +zap_memset(void *a, int c, size_t n) +{ + char *cp = a; + char *cpend = cp + n; + + while (cp < cpend) + *cp++ = c; +} + +static void +stv(int len, void *addr, uint64_t value) +{ + switch (len) { + case 1: + *(uint8_t *)addr = value; + return; + case 2: + *(uint16_t *)addr = value; + return; + case 4: + *(uint32_t *)addr = value; + return; + case 8: + *(uint64_t *)addr = value; + return; + default: + cmn_err(CE_PANIC, "bad int len %d", len); + } +} + +static uint64_t +ldv(int len, const void *addr) +{ + switch (len) { + case 1: + return (*(uint8_t *)addr); + case 2: + return (*(uint16_t *)addr); + case 4: + return (*(uint32_t *)addr); + case 8: + return (*(uint64_t *)addr); + default: + cmn_err(CE_PANIC, "bad int len %d", len); + } + return (0xFEEDFACEDEADBEEFULL); +} + +void +zap_leaf_byteswap(zap_leaf_phys_t *buf, int size) +{ + int i; + zap_leaf_t l; + dmu_buf_t l_dbuf; + + l_dbuf.db_data = buf; + l.l_bs = highbit64(size) - 1; + l.l_dbuf = &l_dbuf; + + buf->l_hdr.lh_block_type = BSWAP_64(buf->l_hdr.lh_block_type); + buf->l_hdr.lh_prefix = BSWAP_64(buf->l_hdr.lh_prefix); + buf->l_hdr.lh_magic = BSWAP_32(buf->l_hdr.lh_magic); + buf->l_hdr.lh_nfree = BSWAP_16(buf->l_hdr.lh_nfree); + buf->l_hdr.lh_nentries = BSWAP_16(buf->l_hdr.lh_nentries); + buf->l_hdr.lh_prefix_len = BSWAP_16(buf->l_hdr.lh_prefix_len); + buf->l_hdr.lh_freelist = BSWAP_16(buf->l_hdr.lh_freelist); + + for (i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(&l); i++) + buf->l_hash[i] = BSWAP_16(buf->l_hash[i]); + + for (i = 0; i < ZAP_LEAF_NUMCHUNKS(&l); i++) { + zap_leaf_chunk_t *lc = &ZAP_LEAF_CHUNK(&l, i); + struct zap_leaf_entry *le; + + switch (lc->l_free.lf_type) { + case ZAP_CHUNK_ENTRY: + le = &lc->l_entry; + + le->le_type = BSWAP_8(le->le_type); + le->le_value_intlen = BSWAP_8(le->le_value_intlen); + le->le_next = BSWAP_16(le->le_next); + le->le_name_chunk = BSWAP_16(le->le_name_chunk); + le->le_name_numints = BSWAP_16(le->le_name_numints); + le->le_value_chunk = BSWAP_16(le->le_value_chunk); + le->le_value_numints = BSWAP_16(le->le_value_numints); + le->le_cd = BSWAP_32(le->le_cd); + le->le_hash = BSWAP_64(le->le_hash); + break; + case ZAP_CHUNK_FREE: + lc->l_free.lf_type = BSWAP_8(lc->l_free.lf_type); + lc->l_free.lf_next = BSWAP_16(lc->l_free.lf_next); + break; + case ZAP_CHUNK_ARRAY: + lc->l_array.la_type = BSWAP_8(lc->l_array.la_type); + lc->l_array.la_next = BSWAP_16(lc->l_array.la_next); + /* la_array doesn't need swapping */ + break; + default: + cmn_err(CE_PANIC, "bad leaf type %d", + lc->l_free.lf_type); + } + } +} + +void +zap_leaf_init(zap_leaf_t *l, boolean_t sort) +{ + int i; + + l->l_bs = highbit64(l->l_dbuf->db_size) - 1; + zap_memset(&zap_leaf_phys(l)->l_hdr, 0, + sizeof (struct zap_leaf_header)); + zap_memset(zap_leaf_phys(l)->l_hash, CHAIN_END, + 2*ZAP_LEAF_HASH_NUMENTRIES(l)); + for (i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) { + ZAP_LEAF_CHUNK(l, i).l_free.lf_type = ZAP_CHUNK_FREE; + ZAP_LEAF_CHUNK(l, i).l_free.lf_next = i+1; + } + ZAP_LEAF_CHUNK(l, ZAP_LEAF_NUMCHUNKS(l)-1).l_free.lf_next = CHAIN_END; + zap_leaf_phys(l)->l_hdr.lh_block_type = ZBT_LEAF; + zap_leaf_phys(l)->l_hdr.lh_magic = ZAP_LEAF_MAGIC; + zap_leaf_phys(l)->l_hdr.lh_nfree = ZAP_LEAF_NUMCHUNKS(l); + if (sort) + zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED; +} + +/* + * Routines which manipulate leaf chunks (l_chunk[]). + */ + +static uint16_t +zap_leaf_chunk_alloc(zap_leaf_t *l) +{ + int chunk; + + ASSERT(zap_leaf_phys(l)->l_hdr.lh_nfree > 0); + + chunk = zap_leaf_phys(l)->l_hdr.lh_freelist; + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT3U(ZAP_LEAF_CHUNK(l, chunk).l_free.lf_type, ==, ZAP_CHUNK_FREE); + + zap_leaf_phys(l)->l_hdr.lh_freelist = + ZAP_LEAF_CHUNK(l, chunk).l_free.lf_next; + + zap_leaf_phys(l)->l_hdr.lh_nfree--; + + return (chunk); +} + +static void +zap_leaf_chunk_free(zap_leaf_t *l, uint16_t chunk) +{ + struct zap_leaf_free *zlf = &ZAP_LEAF_CHUNK(l, chunk).l_free; + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_nfree, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT(zlf->lf_type != ZAP_CHUNK_FREE); + + zlf->lf_type = ZAP_CHUNK_FREE; + zlf->lf_next = zap_leaf_phys(l)->l_hdr.lh_freelist; + bzero(zlf->lf_pad, sizeof (zlf->lf_pad)); /* help it to compress */ + zap_leaf_phys(l)->l_hdr.lh_freelist = chunk; + + zap_leaf_phys(l)->l_hdr.lh_nfree++; +} + +/* + * Routines which manipulate leaf arrays (zap_leaf_array type chunks). + */ + +static uint16_t +zap_leaf_array_create(zap_leaf_t *l, const char *buf, + int integer_size, int num_integers) +{ + uint16_t chunk_head; + uint16_t *chunkp = &chunk_head; + int byten = 0; + uint64_t value = 0; + int shift = (integer_size-1)*8; + int len = num_integers; + + ASSERT3U(num_integers * integer_size, <, MAX_ARRAY_BYTES); + + while (len > 0) { + uint16_t chunk = zap_leaf_chunk_alloc(l); + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; + int i; + + la->la_type = ZAP_CHUNK_ARRAY; + for (i = 0; i < ZAP_LEAF_ARRAY_BYTES; i++) { + if (byten == 0) + value = ldv(integer_size, buf); + la->la_array[i] = value >> shift; + value <<= 8; + if (++byten == integer_size) { + byten = 0; + buf += integer_size; + if (--len == 0) + break; + } + } + + *chunkp = chunk; + chunkp = &la->la_next; + } + *chunkp = CHAIN_END; + + return (chunk_head); +} + +static void +zap_leaf_array_free(zap_leaf_t *l, uint16_t *chunkp) +{ + uint16_t chunk = *chunkp; + + *chunkp = CHAIN_END; + + while (chunk != CHAIN_END) { + int nextchunk = ZAP_LEAF_CHUNK(l, chunk).l_array.la_next; + ASSERT3U(ZAP_LEAF_CHUNK(l, chunk).l_array.la_type, ==, + ZAP_CHUNK_ARRAY); + zap_leaf_chunk_free(l, chunk); + chunk = nextchunk; + } +} + +/* array_len and buf_len are in integers, not bytes */ +static void +zap_leaf_array_read(zap_leaf_t *l, uint16_t chunk, + int array_int_len, int array_len, int buf_int_len, uint64_t buf_len, + void *buf) +{ + int len = MIN(array_len, buf_len); + int byten = 0; + uint64_t value = 0; + char *p = buf; + + ASSERT3U(array_int_len, <=, buf_int_len); + + /* Fast path for one 8-byte integer */ + if (array_int_len == 8 && buf_int_len == 8 && len == 1) { + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; + uint8_t *ip = la->la_array; + uint64_t *buf64 = buf; + + *buf64 = (uint64_t)ip[0] << 56 | (uint64_t)ip[1] << 48 | + (uint64_t)ip[2] << 40 | (uint64_t)ip[3] << 32 | + (uint64_t)ip[4] << 24 | (uint64_t)ip[5] << 16 | + (uint64_t)ip[6] << 8 | (uint64_t)ip[7]; + return; + } + + /* Fast path for an array of 1-byte integers (eg. the entry name) */ + if (array_int_len == 1 && buf_int_len == 1 && + buf_len > array_len + ZAP_LEAF_ARRAY_BYTES) { + while (chunk != CHAIN_END) { + struct zap_leaf_array *la = + &ZAP_LEAF_CHUNK(l, chunk).l_array; + bcopy(la->la_array, p, ZAP_LEAF_ARRAY_BYTES); + p += ZAP_LEAF_ARRAY_BYTES; + chunk = la->la_next; + } + return; + } + + while (len > 0) { + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; + int i; + + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + for (i = 0; i < ZAP_LEAF_ARRAY_BYTES && len > 0; i++) { + value = (value << 8) | la->la_array[i]; + byten++; + if (byten == array_int_len) { + stv(buf_int_len, p, value); + byten = 0; + len--; + if (len == 0) + return; + p += buf_int_len; + } + } + chunk = la->la_next; + } +} + +static boolean_t +zap_leaf_array_match(zap_leaf_t *l, zap_name_t *zn, + int chunk, int array_numints) +{ + int bseen = 0; + + if (zap_getflags(zn->zn_zap) & ZAP_FLAG_UINT64_KEY) { + uint64_t *thiskey; + boolean_t match; + + ASSERT(zn->zn_key_intlen == sizeof (*thiskey)); + thiskey = kmem_alloc(array_numints * sizeof (*thiskey), + KM_SLEEP); + + zap_leaf_array_read(l, chunk, sizeof (*thiskey), array_numints, + sizeof (*thiskey), array_numints, thiskey); + match = bcmp(thiskey, zn->zn_key_orig, + array_numints * sizeof (*thiskey)) == 0; + kmem_free(thiskey, array_numints * sizeof (*thiskey)); + return (match); + } + + ASSERT(zn->zn_key_intlen == 1); + if (zn->zn_matchtype & MT_NORMALIZE) { + char *thisname = kmem_alloc(array_numints, KM_SLEEP); + boolean_t match; + + zap_leaf_array_read(l, chunk, sizeof (char), array_numints, + sizeof (char), array_numints, thisname); + match = zap_match(zn, thisname); + kmem_free(thisname, array_numints); + return (match); + } + + /* + * Fast path for exact matching. + * First check that the lengths match, so that we don't read + * past the end of the zn_key_orig array. + */ + if (array_numints != zn->zn_key_orig_numints) + return (B_FALSE); + while (bseen < array_numints) { + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; + int toread = MIN(array_numints - bseen, ZAP_LEAF_ARRAY_BYTES); + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + if (bcmp(la->la_array, (char *)zn->zn_key_orig + bseen, toread)) + break; + chunk = la->la_next; + bseen += toread; + } + return (bseen == array_numints); +} + +/* + * Routines which manipulate leaf entries. + */ + +int +zap_leaf_lookup(zap_leaf_t *l, zap_name_t *zn, zap_entry_handle_t *zeh) +{ + uint16_t *chunkp; + struct zap_leaf_entry *le; + + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC); + + for (chunkp = LEAF_HASH_ENTPTR(l, zn->zn_hash); + *chunkp != CHAIN_END; chunkp = &le->le_next) { + uint16_t chunk = *chunkp; + le = ZAP_LEAF_ENTRY(l, chunk); + + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + if (le->le_hash != zn->zn_hash) + continue; + + /* + * NB: the entry chain is always sorted by cd on + * normalized zap objects, so this will find the + * lowest-cd match for MT_NORMALIZE. + */ + ASSERT((zn->zn_matchtype == 0) || + (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED)); + if (zap_leaf_array_match(l, zn, le->le_name_chunk, + le->le_name_numints)) { + zeh->zeh_num_integers = le->le_value_numints; + zeh->zeh_integer_size = le->le_value_intlen; + zeh->zeh_cd = le->le_cd; + zeh->zeh_hash = le->le_hash; + zeh->zeh_chunkp = chunkp; + zeh->zeh_leaf = l; + return (0); + } + } + + return (SET_ERROR(ENOENT)); +} + +/* Return (h1,cd1 >= h2,cd2) */ +#define HCD_GTEQ(h1, cd1, h2, cd2) \ + ((h1 > h2) ? TRUE : ((h1 == h2 && cd1 >= cd2) ? TRUE : FALSE)) + +int +zap_leaf_lookup_closest(zap_leaf_t *l, + uint64_t h, uint32_t cd, zap_entry_handle_t *zeh) +{ + uint16_t chunk; + uint64_t besth = -1ULL; + uint32_t bestcd = -1U; + uint16_t bestlh = ZAP_LEAF_HASH_NUMENTRIES(l)-1; + uint16_t lh; + struct zap_leaf_entry *le; + + ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC); + + for (lh = LEAF_HASH(l, h); lh <= bestlh; lh++) { + for (chunk = zap_leaf_phys(l)->l_hash[lh]; + chunk != CHAIN_END; chunk = le->le_next) { + le = ZAP_LEAF_ENTRY(l, chunk); + + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + if (HCD_GTEQ(le->le_hash, le->le_cd, h, cd) && + HCD_GTEQ(besth, bestcd, le->le_hash, le->le_cd)) { + ASSERT3U(bestlh, >=, lh); + bestlh = lh; + besth = le->le_hash; + bestcd = le->le_cd; + + zeh->zeh_num_integers = le->le_value_numints; + zeh->zeh_integer_size = le->le_value_intlen; + zeh->zeh_cd = le->le_cd; + zeh->zeh_hash = le->le_hash; + zeh->zeh_fakechunk = chunk; + zeh->zeh_chunkp = &zeh->zeh_fakechunk; + zeh->zeh_leaf = l; + } + } + } + + return (bestcd == -1U ? ENOENT : 0); +} + +int +zap_entry_read(const zap_entry_handle_t *zeh, + uint8_t integer_size, uint64_t num_integers, void *buf) +{ + struct zap_leaf_entry *le = + ZAP_LEAF_ENTRY(zeh->zeh_leaf, *zeh->zeh_chunkp); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + if (le->le_value_intlen > integer_size) + return (SET_ERROR(EINVAL)); + + zap_leaf_array_read(zeh->zeh_leaf, le->le_value_chunk, + le->le_value_intlen, le->le_value_numints, + integer_size, num_integers, buf); + + if (zeh->zeh_num_integers > num_integers) + return (SET_ERROR(EOVERFLOW)); + return (0); + +} + +int +zap_entry_read_name(zap_t *zap, const zap_entry_handle_t *zeh, uint16_t buflen, + char *buf) +{ + struct zap_leaf_entry *le = + ZAP_LEAF_ENTRY(zeh->zeh_leaf, *zeh->zeh_chunkp); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + if (zap_getflags(zap) & ZAP_FLAG_UINT64_KEY) { + zap_leaf_array_read(zeh->zeh_leaf, le->le_name_chunk, 8, + le->le_name_numints, 8, buflen / 8, buf); + } else { + zap_leaf_array_read(zeh->zeh_leaf, le->le_name_chunk, 1, + le->le_name_numints, 1, buflen, buf); + } + if (le->le_name_numints > buflen) + return (SET_ERROR(EOVERFLOW)); + return (0); +} + +int +zap_entry_update(zap_entry_handle_t *zeh, + uint8_t integer_size, uint64_t num_integers, const void *buf) +{ + int delta_chunks; + zap_leaf_t *l = zeh->zeh_leaf; + struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, *zeh->zeh_chunkp); + + delta_chunks = ZAP_LEAF_ARRAY_NCHUNKS(num_integers * integer_size) - + ZAP_LEAF_ARRAY_NCHUNKS(le->le_value_numints * le->le_value_intlen); + + if ((int)zap_leaf_phys(l)->l_hdr.lh_nfree < delta_chunks) + return (SET_ERROR(EAGAIN)); + + zap_leaf_array_free(l, &le->le_value_chunk); + le->le_value_chunk = + zap_leaf_array_create(l, buf, integer_size, num_integers); + le->le_value_numints = num_integers; + le->le_value_intlen = integer_size; + return (0); +} + +void +zap_entry_remove(zap_entry_handle_t *zeh) +{ + uint16_t entry_chunk; + struct zap_leaf_entry *le; + zap_leaf_t *l = zeh->zeh_leaf; + + ASSERT3P(zeh->zeh_chunkp, !=, &zeh->zeh_fakechunk); + + entry_chunk = *zeh->zeh_chunkp; + le = ZAP_LEAF_ENTRY(l, entry_chunk); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + zap_leaf_array_free(l, &le->le_name_chunk); + zap_leaf_array_free(l, &le->le_value_chunk); + + *zeh->zeh_chunkp = le->le_next; + zap_leaf_chunk_free(l, entry_chunk); + + zap_leaf_phys(l)->l_hdr.lh_nentries--; +} + +int +zap_entry_create(zap_leaf_t *l, zap_name_t *zn, uint32_t cd, + uint8_t integer_size, uint64_t num_integers, const void *buf, + zap_entry_handle_t *zeh) +{ + uint16_t chunk; + uint16_t *chunkp; + struct zap_leaf_entry *le; + uint64_t valuelen; + int numchunks; + uint64_t h = zn->zn_hash; + + valuelen = integer_size * num_integers; + + numchunks = 1 + ZAP_LEAF_ARRAY_NCHUNKS(zn->zn_key_orig_numints * + zn->zn_key_intlen) + ZAP_LEAF_ARRAY_NCHUNKS(valuelen); + if (numchunks > ZAP_LEAF_NUMCHUNKS(l)) + return (E2BIG); + + if (cd == ZAP_NEED_CD) { + /* find the lowest unused cd */ + if (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED) { + cd = 0; + + for (chunk = *LEAF_HASH_ENTPTR(l, h); + chunk != CHAIN_END; chunk = le->le_next) { + le = ZAP_LEAF_ENTRY(l, chunk); + if (le->le_cd > cd) + break; + if (le->le_hash == h) { + ASSERT3U(cd, ==, le->le_cd); + cd++; + } + } + } else { + /* old unsorted format; do it the O(n^2) way */ + for (cd = 0; ; cd++) { + for (chunk = *LEAF_HASH_ENTPTR(l, h); + chunk != CHAIN_END; chunk = le->le_next) { + le = ZAP_LEAF_ENTRY(l, chunk); + if (le->le_hash == h && + le->le_cd == cd) { + break; + } + } + /* If this cd is not in use, we are good. */ + if (chunk == CHAIN_END) + break; + } + } + /* + * We would run out of space in a block before we could + * store enough entries to run out of CD values. + */ + ASSERT3U(cd, <, zap_maxcd(zn->zn_zap)); + } + + if (zap_leaf_phys(l)->l_hdr.lh_nfree < numchunks) + return (SET_ERROR(EAGAIN)); + + /* make the entry */ + chunk = zap_leaf_chunk_alloc(l); + le = ZAP_LEAF_ENTRY(l, chunk); + le->le_type = ZAP_CHUNK_ENTRY; + le->le_name_chunk = zap_leaf_array_create(l, zn->zn_key_orig, + zn->zn_key_intlen, zn->zn_key_orig_numints); + le->le_name_numints = zn->zn_key_orig_numints; + le->le_value_chunk = + zap_leaf_array_create(l, buf, integer_size, num_integers); + le->le_value_numints = num_integers; + le->le_value_intlen = integer_size; + le->le_hash = h; + le->le_cd = cd; + + /* link it into the hash chain */ + /* XXX if we did the search above, we could just use that */ + chunkp = zap_leaf_rehash_entry(l, chunk); + + zap_leaf_phys(l)->l_hdr.lh_nentries++; + + zeh->zeh_leaf = l; + zeh->zeh_num_integers = num_integers; + zeh->zeh_integer_size = le->le_value_intlen; + zeh->zeh_cd = le->le_cd; + zeh->zeh_hash = le->le_hash; + zeh->zeh_chunkp = chunkp; + + return (0); +} + +/* + * Determine if there is another entry with the same normalized form. + * For performance purposes, either zn or name must be provided (the + * other can be NULL). Note, there usually won't be any hash + * conflicts, in which case we don't need the concatenated/normalized + * form of the name. But all callers have one of these on hand anyway, + * so might as well take advantage. A cleaner but slower interface + * would accept neither argument, and compute the normalized name as + * needed (using zap_name_alloc(zap_entry_read_name(zeh))). + */ +boolean_t +zap_entry_normalization_conflict(zap_entry_handle_t *zeh, zap_name_t *zn, + const char *name, zap_t *zap) +{ + uint64_t chunk; + struct zap_leaf_entry *le; + boolean_t allocdzn = B_FALSE; + + if (zap->zap_normflags == 0) + return (B_FALSE); + + for (chunk = *LEAF_HASH_ENTPTR(zeh->zeh_leaf, zeh->zeh_hash); + chunk != CHAIN_END; chunk = le->le_next) { + le = ZAP_LEAF_ENTRY(zeh->zeh_leaf, chunk); + if (le->le_hash != zeh->zeh_hash) + continue; + if (le->le_cd == zeh->zeh_cd) + continue; + + if (zn == NULL) { + zn = zap_name_alloc(zap, name, MT_NORMALIZE); + allocdzn = B_TRUE; + } + if (zap_leaf_array_match(zeh->zeh_leaf, zn, + le->le_name_chunk, le->le_name_numints)) { + if (allocdzn) + zap_name_free(zn); + return (B_TRUE); + } + } + if (allocdzn) + zap_name_free(zn); + return (B_FALSE); +} + +/* + * Routines for transferring entries between leafs. + */ + +static uint16_t * +zap_leaf_rehash_entry(zap_leaf_t *l, uint16_t entry) +{ + struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry); + struct zap_leaf_entry *le2; + uint16_t *chunkp; + + /* + * keep the entry chain sorted by cd + * NB: this will not cause problems for unsorted leafs, though + * it is unnecessary there. + */ + for (chunkp = LEAF_HASH_ENTPTR(l, le->le_hash); + *chunkp != CHAIN_END; chunkp = &le2->le_next) { + le2 = ZAP_LEAF_ENTRY(l, *chunkp); + if (le2->le_cd > le->le_cd) + break; + } + + le->le_next = *chunkp; + *chunkp = entry; + return (chunkp); +} + +static uint16_t +zap_leaf_transfer_array(zap_leaf_t *l, uint16_t chunk, zap_leaf_t *nl) +{ + uint16_t new_chunk; + uint16_t *nchunkp = &new_chunk; + + while (chunk != CHAIN_END) { + uint16_t nchunk = zap_leaf_chunk_alloc(nl); + struct zap_leaf_array *nla = + &ZAP_LEAF_CHUNK(nl, nchunk).l_array; + struct zap_leaf_array *la = + &ZAP_LEAF_CHUNK(l, chunk).l_array; + int nextchunk = la->la_next; + + ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); + ASSERT3U(nchunk, <, ZAP_LEAF_NUMCHUNKS(l)); + + *nla = *la; /* structure assignment */ + + zap_leaf_chunk_free(l, chunk); + chunk = nextchunk; + *nchunkp = nchunk; + nchunkp = &nla->la_next; + } + *nchunkp = CHAIN_END; + return (new_chunk); +} + +static void +zap_leaf_transfer_entry(zap_leaf_t *l, int entry, zap_leaf_t *nl) +{ + struct zap_leaf_entry *le, *nle; + uint16_t chunk; + + le = ZAP_LEAF_ENTRY(l, entry); + ASSERT3U(le->le_type, ==, ZAP_CHUNK_ENTRY); + + chunk = zap_leaf_chunk_alloc(nl); + nle = ZAP_LEAF_ENTRY(nl, chunk); + *nle = *le; /* structure assignment */ + + (void) zap_leaf_rehash_entry(nl, chunk); + + nle->le_name_chunk = zap_leaf_transfer_array(l, le->le_name_chunk, nl); + nle->le_value_chunk = + zap_leaf_transfer_array(l, le->le_value_chunk, nl); + + zap_leaf_chunk_free(l, entry); + + zap_leaf_phys(l)->l_hdr.lh_nentries--; + zap_leaf_phys(nl)->l_hdr.lh_nentries++; +} + +/* + * Transfer the entries whose hash prefix ends in 1 to the new leaf. + */ +void +zap_leaf_split(zap_leaf_t *l, zap_leaf_t *nl, boolean_t sort) +{ + int i; + int bit = 64 - 1 - zap_leaf_phys(l)->l_hdr.lh_prefix_len; + + /* set new prefix and prefix_len */ + zap_leaf_phys(l)->l_hdr.lh_prefix <<= 1; + zap_leaf_phys(l)->l_hdr.lh_prefix_len++; + zap_leaf_phys(nl)->l_hdr.lh_prefix = + zap_leaf_phys(l)->l_hdr.lh_prefix | 1; + zap_leaf_phys(nl)->l_hdr.lh_prefix_len = + zap_leaf_phys(l)->l_hdr.lh_prefix_len; + + /* break existing hash chains */ + zap_memset(zap_leaf_phys(l)->l_hash, CHAIN_END, + 2*ZAP_LEAF_HASH_NUMENTRIES(l)); + + if (sort) + zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED; + + /* + * Transfer entries whose hash bit 'bit' is set to nl; rehash + * the remaining entries + * + * NB: We could find entries via the hashtable instead. That + * would be O(hashents+numents) rather than O(numblks+numents), + * but this accesses memory more sequentially, and when we're + * called, the block is usually pretty full. + */ + for (i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) { + struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, i); + if (le->le_type != ZAP_CHUNK_ENTRY) + continue; + + if (le->le_hash & (1ULL << bit)) + zap_leaf_transfer_entry(l, i, nl); + else + (void) zap_leaf_rehash_entry(l, i); + } +} + +void +zap_leaf_stats(zap_t *zap, zap_leaf_t *l, zap_stats_t *zs) +{ + int i, n; + + n = zap_f_phys(zap)->zap_ptrtbl.zt_shift - + zap_leaf_phys(l)->l_hdr.lh_prefix_len; + n = MIN(n, ZAP_HISTOGRAM_SIZE-1); + zs->zs_leafs_with_2n_pointers[n]++; + + + n = zap_leaf_phys(l)->l_hdr.lh_nentries/5; + n = MIN(n, ZAP_HISTOGRAM_SIZE-1); + zs->zs_blocks_with_n5_entries[n]++; + + n = ((1<l_hdr.lh_nfree * (ZAP_LEAF_ARRAY_BYTES+1))*10 / + (1<zs_blocks_n_tenths_full[n]++; + + for (i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(l); i++) { + int nentries = 0; + int chunk = zap_leaf_phys(l)->l_hash[i]; + + while (chunk != CHAIN_END) { + struct zap_leaf_entry *le = + ZAP_LEAF_ENTRY(l, chunk); + + n = 1 + ZAP_LEAF_ARRAY_NCHUNKS(le->le_name_numints) + + ZAP_LEAF_ARRAY_NCHUNKS(le->le_value_numints * + le->le_value_intlen); + n = MIN(n, ZAP_HISTOGRAM_SIZE-1); + zs->zs_entries_using_n_chunks[n]++; + + chunk = le->le_next; + nentries++; + } + + n = nentries; + n = MIN(n, ZAP_HISTOGRAM_SIZE-1); + zs->zs_buckets_with_n_entries[n]++; + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zap_micro.c +++ linux-aws-4.15.0/zfs/module/zfs/zap_micro.c @@ -0,0 +1,1645 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016 by Delphix. All rights reserved. + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _KERNEL +#include +#endif + +extern inline mzap_phys_t *zap_m_phys(zap_t *zap); + +static int mzap_upgrade(zap_t **zapp, + void *tag, dmu_tx_t *tx, zap_flags_t flags); + +uint64_t +zap_getflags(zap_t *zap) +{ + if (zap->zap_ismicro) + return (0); + return (zap_f_phys(zap)->zap_flags); +} + +int +zap_hashbits(zap_t *zap) +{ + if (zap_getflags(zap) & ZAP_FLAG_HASH64) + return (48); + else + return (28); +} + +uint32_t +zap_maxcd(zap_t *zap) +{ + if (zap_getflags(zap) & ZAP_FLAG_HASH64) + return ((1<<16)-1); + else + return (-1U); +} + +static uint64_t +zap_hash(zap_name_t *zn) +{ + zap_t *zap = zn->zn_zap; + uint64_t h = 0; + + if (zap_getflags(zap) & ZAP_FLAG_PRE_HASHED_KEY) { + ASSERT(zap_getflags(zap) & ZAP_FLAG_UINT64_KEY); + h = *(uint64_t *)zn->zn_key_orig; + } else { + h = zap->zap_salt; + ASSERT(h != 0); + ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY); + + if (zap_getflags(zap) & ZAP_FLAG_UINT64_KEY) { + int i; + const uint64_t *wp = zn->zn_key_norm; + + ASSERT(zn->zn_key_intlen == 8); + for (i = 0; i < zn->zn_key_norm_numints; wp++, i++) { + int j; + uint64_t word = *wp; + + for (j = 0; j < zn->zn_key_intlen; j++) { + h = (h >> 8) ^ + zfs_crc64_table[(h ^ word) & 0xFF]; + word >>= NBBY; + } + } + } else { + int i, len; + const uint8_t *cp = zn->zn_key_norm; + + /* + * We previously stored the terminating null on + * disk, but didn't hash it, so we need to + * continue to not hash it. (The + * zn_key_*_numints includes the terminating + * null for non-binary keys.) + */ + len = zn->zn_key_norm_numints - 1; + + ASSERT(zn->zn_key_intlen == 1); + for (i = 0; i < len; cp++, i++) { + h = (h >> 8) ^ + zfs_crc64_table[(h ^ *cp) & 0xFF]; + } + } + } + /* + * Don't use all 64 bits, since we need some in the cookie for + * the collision differentiator. We MUST use the high bits, + * since those are the ones that we first pay attention to when + * choosing the bucket. + */ + h &= ~((1ULL << (64 - zap_hashbits(zap))) - 1); + + return (h); +} + +static int +zap_normalize(zap_t *zap, const char *name, char *namenorm, int normflags) +{ + size_t inlen, outlen; + int err; + + ASSERT(!(zap_getflags(zap) & ZAP_FLAG_UINT64_KEY)); + + inlen = strlen(name) + 1; + outlen = ZAP_MAXNAMELEN; + + err = 0; + (void) u8_textprep_str((char *)name, &inlen, namenorm, &outlen, + normflags | U8_TEXTPREP_IGNORE_NULL | U8_TEXTPREP_IGNORE_INVALID, + U8_UNICODE_LATEST, &err); + + return (err); +} + +boolean_t +zap_match(zap_name_t *zn, const char *matchname) +{ + ASSERT(!(zap_getflags(zn->zn_zap) & ZAP_FLAG_UINT64_KEY)); + + if (zn->zn_matchtype & MT_NORMALIZE) { + char norm[ZAP_MAXNAMELEN]; + + if (zap_normalize(zn->zn_zap, matchname, norm, + zn->zn_normflags) != 0) + return (B_FALSE); + + return (strcmp(zn->zn_key_norm, norm) == 0); + } else { + return (strcmp(zn->zn_key_orig, matchname) == 0); + } +} + +void +zap_name_free(zap_name_t *zn) +{ + kmem_free(zn, sizeof (zap_name_t)); +} + +zap_name_t * +zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt) +{ + zap_name_t *zn = kmem_alloc(sizeof (zap_name_t), KM_SLEEP); + + zn->zn_zap = zap; + zn->zn_key_intlen = sizeof (*key); + zn->zn_key_orig = key; + zn->zn_key_orig_numints = strlen(zn->zn_key_orig) + 1; + zn->zn_matchtype = mt; + zn->zn_normflags = zap->zap_normflags; + + /* + * If we're dealing with a case sensitive lookup on a mixed or + * insensitive fs, remove U8_TEXTPREP_TOUPPER or the lookup + * will fold case to all caps overriding the lookup request. + */ + if (mt & MT_MATCH_CASE) + zn->zn_normflags &= ~U8_TEXTPREP_TOUPPER; + + if (zap->zap_normflags) { + /* + * We *must* use zap_normflags because this normalization is + * what the hash is computed from. + */ + if (zap_normalize(zap, key, zn->zn_normbuf, + zap->zap_normflags) != 0) { + zap_name_free(zn); + return (NULL); + } + zn->zn_key_norm = zn->zn_normbuf; + zn->zn_key_norm_numints = strlen(zn->zn_key_norm) + 1; + } else { + if (mt != 0) { + zap_name_free(zn); + return (NULL); + } + zn->zn_key_norm = zn->zn_key_orig; + zn->zn_key_norm_numints = zn->zn_key_orig_numints; + } + + zn->zn_hash = zap_hash(zn); + + if (zap->zap_normflags != zn->zn_normflags) { + /* + * We *must* use zn_normflags because this normalization is + * what the matching is based on. (Not the hash!) + */ + if (zap_normalize(zap, key, zn->zn_normbuf, + zn->zn_normflags) != 0) { + zap_name_free(zn); + return (NULL); + } + zn->zn_key_norm_numints = strlen(zn->zn_key_norm) + 1; + } + + return (zn); +} + +zap_name_t * +zap_name_alloc_uint64(zap_t *zap, const uint64_t *key, int numints) +{ + zap_name_t *zn = kmem_alloc(sizeof (zap_name_t), KM_SLEEP); + + ASSERT(zap->zap_normflags == 0); + zn->zn_zap = zap; + zn->zn_key_intlen = sizeof (*key); + zn->zn_key_orig = zn->zn_key_norm = key; + zn->zn_key_orig_numints = zn->zn_key_norm_numints = numints; + zn->zn_matchtype = 0; + + zn->zn_hash = zap_hash(zn); + return (zn); +} + +static void +mzap_byteswap(mzap_phys_t *buf, size_t size) +{ + int i, max; + buf->mz_block_type = BSWAP_64(buf->mz_block_type); + buf->mz_salt = BSWAP_64(buf->mz_salt); + buf->mz_normflags = BSWAP_64(buf->mz_normflags); + max = (size / MZAP_ENT_LEN) - 1; + for (i = 0; i < max; i++) { + buf->mz_chunk[i].mze_value = + BSWAP_64(buf->mz_chunk[i].mze_value); + buf->mz_chunk[i].mze_cd = + BSWAP_32(buf->mz_chunk[i].mze_cd); + } +} + +void +zap_byteswap(void *buf, size_t size) +{ + uint64_t block_type; + + block_type = *(uint64_t *)buf; + + if (block_type == ZBT_MICRO || block_type == BSWAP_64(ZBT_MICRO)) { + /* ASSERT(magic == ZAP_LEAF_MAGIC); */ + mzap_byteswap(buf, size); + } else { + fzap_byteswap(buf, size); + } +} + +static int +mze_compare(const void *arg1, const void *arg2) +{ + const mzap_ent_t *mze1 = arg1; + const mzap_ent_t *mze2 = arg2; + + int cmp = AVL_CMP(mze1->mze_hash, mze2->mze_hash); + if (likely(cmp)) + return (cmp); + + return (AVL_CMP(mze1->mze_cd, mze2->mze_cd)); +} + +static void +mze_insert(zap_t *zap, int chunkid, uint64_t hash) +{ + mzap_ent_t *mze; + + ASSERT(zap->zap_ismicro); + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + + mze = kmem_alloc(sizeof (mzap_ent_t), KM_SLEEP); + mze->mze_chunkid = chunkid; + mze->mze_hash = hash; + mze->mze_cd = MZE_PHYS(zap, mze)->mze_cd; + ASSERT(MZE_PHYS(zap, mze)->mze_name[0] != 0); + avl_add(&zap->zap_m.zap_avl, mze); +} + +static mzap_ent_t * +mze_find(zap_name_t *zn) +{ + mzap_ent_t mze_tofind; + mzap_ent_t *mze; + avl_index_t idx; + avl_tree_t *avl = &zn->zn_zap->zap_m.zap_avl; + + ASSERT(zn->zn_zap->zap_ismicro); + ASSERT(RW_LOCK_HELD(&zn->zn_zap->zap_rwlock)); + + mze_tofind.mze_hash = zn->zn_hash; + mze_tofind.mze_cd = 0; + + mze = avl_find(avl, &mze_tofind, &idx); + if (mze == NULL) + mze = avl_nearest(avl, idx, AVL_AFTER); + for (; mze && mze->mze_hash == zn->zn_hash; mze = AVL_NEXT(avl, mze)) { + ASSERT3U(mze->mze_cd, ==, MZE_PHYS(zn->zn_zap, mze)->mze_cd); + if (zap_match(zn, MZE_PHYS(zn->zn_zap, mze)->mze_name)) + return (mze); + } + + return (NULL); +} + +static uint32_t +mze_find_unused_cd(zap_t *zap, uint64_t hash) +{ + mzap_ent_t mze_tofind; + mzap_ent_t *mze; + avl_index_t idx; + avl_tree_t *avl = &zap->zap_m.zap_avl; + uint32_t cd; + + ASSERT(zap->zap_ismicro); + ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); + + mze_tofind.mze_hash = hash; + mze_tofind.mze_cd = 0; + + cd = 0; + for (mze = avl_find(avl, &mze_tofind, &idx); + mze && mze->mze_hash == hash; mze = AVL_NEXT(avl, mze)) { + if (mze->mze_cd != cd) + break; + cd++; + } + + return (cd); +} + +static void +mze_remove(zap_t *zap, mzap_ent_t *mze) +{ + ASSERT(zap->zap_ismicro); + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + + avl_remove(&zap->zap_m.zap_avl, mze); + kmem_free(mze, sizeof (mzap_ent_t)); +} + +static void +mze_destroy(zap_t *zap) +{ + mzap_ent_t *mze; + void *avlcookie = NULL; + + while ((mze = avl_destroy_nodes(&zap->zap_m.zap_avl, &avlcookie))) + kmem_free(mze, sizeof (mzap_ent_t)); + avl_destroy(&zap->zap_m.zap_avl); +} + +static zap_t * +mzap_open(objset_t *os, uint64_t obj, dmu_buf_t *db) +{ + zap_t *winner; + zap_t *zap; + int i; + uint64_t *zap_hdr = (uint64_t *)db->db_data; + uint64_t zap_block_type = zap_hdr[0]; + uint64_t zap_magic = zap_hdr[1]; + + ASSERT3U(MZAP_ENT_LEN, ==, sizeof (mzap_ent_phys_t)); + + zap = kmem_zalloc(sizeof (zap_t), KM_SLEEP); + rw_init(&zap->zap_rwlock, NULL, RW_DEFAULT, NULL); + rw_enter(&zap->zap_rwlock, RW_WRITER); + zap->zap_objset = os; + zap->zap_object = obj; + zap->zap_dbuf = db; + + if (zap_block_type != ZBT_MICRO) { + mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, MUTEX_DEFAULT, + 0); + zap->zap_f.zap_block_shift = highbit64(db->db_size) - 1; + if (zap_block_type != ZBT_HEADER || zap_magic != ZAP_MAGIC) { + winner = NULL; /* No actual winner here... */ + goto handle_winner; + } + } else { + zap->zap_ismicro = TRUE; + } + + /* + * Make sure that zap_ismicro is set before we let others see + * it, because zap_lockdir() checks zap_ismicro without the lock + * held. + */ + dmu_buf_init_user(&zap->zap_dbu, zap_evict_sync, NULL, &zap->zap_dbuf); + winner = dmu_buf_set_user(db, &zap->zap_dbu); + + if (winner != NULL) + goto handle_winner; + + if (zap->zap_ismicro) { + zap->zap_salt = zap_m_phys(zap)->mz_salt; + zap->zap_normflags = zap_m_phys(zap)->mz_normflags; + zap->zap_m.zap_num_chunks = db->db_size / MZAP_ENT_LEN - 1; + avl_create(&zap->zap_m.zap_avl, mze_compare, + sizeof (mzap_ent_t), offsetof(mzap_ent_t, mze_node)); + + for (i = 0; i < zap->zap_m.zap_num_chunks; i++) { + mzap_ent_phys_t *mze = + &zap_m_phys(zap)->mz_chunk[i]; + if (mze->mze_name[0]) { + zap_name_t *zn; + + zap->zap_m.zap_num_entries++; + zn = zap_name_alloc(zap, mze->mze_name, 0); + mze_insert(zap, i, zn->zn_hash); + zap_name_free(zn); + } + } + } else { + zap->zap_salt = zap_f_phys(zap)->zap_salt; + zap->zap_normflags = zap_f_phys(zap)->zap_normflags; + + ASSERT3U(sizeof (struct zap_leaf_header), ==, + 2*ZAP_LEAF_CHUNKSIZE); + + /* + * The embedded pointer table should not overlap the + * other members. + */ + ASSERT3P(&ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), >, + &zap_f_phys(zap)->zap_salt); + + /* + * The embedded pointer table should end at the end of + * the block + */ + ASSERT3U((uintptr_t)&ZAP_EMBEDDED_PTRTBL_ENT(zap, + 1<zap_dbuf->db_size); + } + rw_exit(&zap->zap_rwlock); + return (zap); + +handle_winner: + rw_exit(&zap->zap_rwlock); + rw_destroy(&zap->zap_rwlock); + if (!zap->zap_ismicro) + mutex_destroy(&zap->zap_f.zap_num_entries_mtx); + kmem_free(zap, sizeof (zap_t)); + return (winner); +} + +static int +zap_lockdir_impl(dmu_buf_t *db, void *tag, dmu_tx_t *tx, + krw_t lti, boolean_t fatreader, boolean_t adding, zap_t **zapp) +{ + dmu_object_info_t doi; + zap_t *zap; + krw_t lt; + + objset_t *os = dmu_buf_get_objset(db); + uint64_t obj = db->db_object; + + ASSERT0(db->db_offset); + *zapp = NULL; + + dmu_object_info_from_db(db, &doi); + if (DMU_OT_BYTESWAP(doi.doi_type) != DMU_BSWAP_ZAP) + return (SET_ERROR(EINVAL)); + + zap = dmu_buf_get_user(db); + if (zap == NULL) { + zap = mzap_open(os, obj, db); + if (zap == NULL) { + /* + * mzap_open() didn't like what it saw on-disk. + * Check for corruption! + */ + return (SET_ERROR(EIO)); + } + } + + /* + * We're checking zap_ismicro without the lock held, in order to + * tell what type of lock we want. Once we have some sort of + * lock, see if it really is the right type. In practice this + * can only be different if it was upgraded from micro to fat, + * and micro wanted WRITER but fat only needs READER. + */ + lt = (!zap->zap_ismicro && fatreader) ? RW_READER : lti; + rw_enter(&zap->zap_rwlock, lt); + if (lt != ((!zap->zap_ismicro && fatreader) ? RW_READER : lti)) { + /* it was upgraded, now we only need reader */ + ASSERT(lt == RW_WRITER); + ASSERT(RW_READER == + ((!zap->zap_ismicro && fatreader) ? RW_READER : lti)); + rw_downgrade(&zap->zap_rwlock); + lt = RW_READER; + } + + zap->zap_objset = os; + + if (lt == RW_WRITER) + dmu_buf_will_dirty(db, tx); + + ASSERT3P(zap->zap_dbuf, ==, db); + + ASSERT(!zap->zap_ismicro || + zap->zap_m.zap_num_entries <= zap->zap_m.zap_num_chunks); + if (zap->zap_ismicro && tx && adding && + zap->zap_m.zap_num_entries == zap->zap_m.zap_num_chunks) { + uint64_t newsz = db->db_size + SPA_MINBLOCKSIZE; + if (newsz > MZAP_MAX_BLKSZ) { + int err; + dprintf("upgrading obj %llu: num_entries=%u\n", + obj, zap->zap_m.zap_num_entries); + *zapp = zap; + err = mzap_upgrade(zapp, tag, tx, 0); + if (err != 0) + rw_exit(&zap->zap_rwlock); + return (err); + } + VERIFY0(dmu_object_set_blocksize(os, obj, newsz, 0, tx)); + zap->zap_m.zap_num_chunks = + db->db_size / MZAP_ENT_LEN - 1; + } + + *zapp = zap; + return (0); +} + +static int +zap_lockdir_by_dnode(dnode_t *dn, dmu_tx_t *tx, + krw_t lti, boolean_t fatreader, boolean_t adding, void *tag, zap_t **zapp) +{ + dmu_buf_t *db; + int err; + + err = dmu_buf_hold_by_dnode(dn, 0, tag, &db, DMU_READ_NO_PREFETCH); + if (err != 0) { + return (err); + } + err = zap_lockdir_impl(db, tag, tx, lti, fatreader, adding, zapp); + if (err != 0) { + dmu_buf_rele(db, tag); + } + return (err); +} + +int +zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx, + krw_t lti, boolean_t fatreader, boolean_t adding, void *tag, zap_t **zapp) +{ + dmu_buf_t *db; + int err; + + err = dmu_buf_hold(os, obj, 0, tag, &db, DMU_READ_NO_PREFETCH); + if (err != 0) + return (err); + err = zap_lockdir_impl(db, tag, tx, lti, fatreader, adding, zapp); + if (err != 0) + dmu_buf_rele(db, tag); + return (err); +} + +void +zap_unlockdir(zap_t *zap, void *tag) +{ + rw_exit(&zap->zap_rwlock); + dmu_buf_rele(zap->zap_dbuf, tag); +} + +static int +mzap_upgrade(zap_t **zapp, void *tag, dmu_tx_t *tx, zap_flags_t flags) +{ + mzap_phys_t *mzp; + int i, sz, nchunks; + int err = 0; + zap_t *zap = *zapp; + + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + + sz = zap->zap_dbuf->db_size; + mzp = vmem_alloc(sz, KM_SLEEP); + bcopy(zap->zap_dbuf->db_data, mzp, sz); + nchunks = zap->zap_m.zap_num_chunks; + + if (!flags) { + err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object, + 1ULL << fzap_default_block_shift, 0, tx); + if (err) { + vmem_free(mzp, sz); + return (err); + } + } + + dprintf("upgrading obj=%llu with %u chunks\n", + zap->zap_object, nchunks); + /* XXX destroy the avl later, so we can use the stored hash value */ + mze_destroy(zap); + + fzap_upgrade(zap, tx, flags); + + for (i = 0; i < nchunks; i++) { + mzap_ent_phys_t *mze = &mzp->mz_chunk[i]; + zap_name_t *zn; + if (mze->mze_name[0] == 0) + continue; + dprintf("adding %s=%llu\n", + mze->mze_name, mze->mze_value); + zn = zap_name_alloc(zap, mze->mze_name, 0); + err = fzap_add_cd(zn, 8, 1, &mze->mze_value, mze->mze_cd, + tag, tx); + zap = zn->zn_zap; /* fzap_add_cd() may change zap */ + zap_name_free(zn); + if (err) + break; + } + vmem_free(mzp, sz); + *zapp = zap; + return (err); +} + +/* + * The "normflags" determine the behavior of the matchtype_t which is + * passed to zap_lookup_norm(). Names which have the same normalized + * version will be stored with the same hash value, and therefore we can + * perform normalization-insensitive lookups. We can be Unicode form- + * insensitive and/or case-insensitive. The following flags are valid for + * "normflags": + * + * U8_TEXTPREP_NFC + * U8_TEXTPREP_NFD + * U8_TEXTPREP_NFKC + * U8_TEXTPREP_NFKD + * U8_TEXTPREP_TOUPPER + * + * The *_NF* (Normalization Form) flags are mutually exclusive; at most one + * of them may be supplied. + */ +void +mzap_create_impl(objset_t *os, uint64_t obj, int normflags, zap_flags_t flags, + dmu_tx_t *tx) +{ + dmu_buf_t *db; + mzap_phys_t *zp; + + VERIFY0(dmu_buf_hold(os, obj, 0, FTAG, &db, DMU_READ_NO_PREFETCH)); + +#ifdef ZFS_DEBUG + { + dmu_object_info_t doi; + dmu_object_info_from_db(db, &doi); + ASSERT3U(DMU_OT_BYTESWAP(doi.doi_type), ==, DMU_BSWAP_ZAP); + } +#endif + + dmu_buf_will_dirty(db, tx); + zp = db->db_data; + zp->mz_block_type = ZBT_MICRO; + zp->mz_salt = ((uintptr_t)db ^ (uintptr_t)tx ^ (obj << 1)) | 1ULL; + zp->mz_normflags = normflags; + dmu_buf_rele(db, FTAG); + + if (flags != 0) { + zap_t *zap; + /* Only fat zap supports flags; upgrade immediately. */ + VERIFY(0 == zap_lockdir(os, obj, tx, RW_WRITER, + B_FALSE, B_FALSE, FTAG, &zap)); + VERIFY3U(0, ==, mzap_upgrade(&zap, FTAG, tx, flags)); + zap_unlockdir(zap, FTAG); + } +} + +int +zap_create_claim(objset_t *os, uint64_t obj, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (zap_create_claim_dnsize(os, obj, ot, bonustype, bonuslen, + 0, tx)); +} + +int +zap_create_claim_dnsize(objset_t *os, uint64_t obj, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx) +{ + return (zap_create_claim_norm_dnsize(os, obj, + 0, ot, bonustype, bonuslen, dnodesize, tx)); +} + +int +zap_create_claim_norm(objset_t *os, uint64_t obj, int normflags, + dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (zap_create_claim_norm_dnsize(os, obj, normflags, ot, bonustype, + bonuslen, 0, tx)); +} + +int +zap_create_claim_norm_dnsize(objset_t *os, uint64_t obj, int normflags, + dmu_object_type_t ot, dmu_object_type_t bonustype, int bonuslen, + int dnodesize, dmu_tx_t *tx) +{ + int err; + + err = dmu_object_claim_dnsize(os, obj, ot, 0, bonustype, bonuslen, + dnodesize, tx); + if (err != 0) + return (err); + mzap_create_impl(os, obj, normflags, 0, tx); + return (0); +} + +uint64_t +zap_create(objset_t *os, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (zap_create_norm(os, 0, ot, bonustype, bonuslen, tx)); +} + +uint64_t +zap_create_dnsize(objset_t *os, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx) +{ + return (zap_create_norm_dnsize(os, 0, ot, bonustype, bonuslen, + dnodesize, tx)); +} + +uint64_t +zap_create_norm(objset_t *os, int normflags, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (zap_create_norm_dnsize(os, normflags, ot, bonustype, bonuslen, + 0, tx)); +} + +uint64_t +zap_create_norm_dnsize(objset_t *os, int normflags, dmu_object_type_t ot, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx) +{ + uint64_t obj = dmu_object_alloc_dnsize(os, ot, 0, bonustype, bonuslen, + dnodesize, tx); + + mzap_create_impl(os, obj, normflags, 0, tx); + return (obj); +} + +uint64_t +zap_create_flags(objset_t *os, int normflags, zap_flags_t flags, + dmu_object_type_t ot, int leaf_blockshift, int indirect_blockshift, + dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) +{ + return (zap_create_flags_dnsize(os, normflags, flags, ot, + leaf_blockshift, indirect_blockshift, bonustype, bonuslen, 0, tx)); +} + +uint64_t +zap_create_flags_dnsize(objset_t *os, int normflags, zap_flags_t flags, + dmu_object_type_t ot, int leaf_blockshift, int indirect_blockshift, + dmu_object_type_t bonustype, int bonuslen, int dnodesize, dmu_tx_t *tx) +{ + uint64_t obj = dmu_object_alloc_dnsize(os, ot, 0, bonustype, bonuslen, + dnodesize, tx); + + ASSERT(leaf_blockshift >= SPA_MINBLOCKSHIFT && + leaf_blockshift <= SPA_OLD_MAXBLOCKSHIFT && + indirect_blockshift >= SPA_MINBLOCKSHIFT && + indirect_blockshift <= SPA_OLD_MAXBLOCKSHIFT); + + VERIFY(dmu_object_set_blocksize(os, obj, + 1ULL << leaf_blockshift, indirect_blockshift, tx) == 0); + + mzap_create_impl(os, obj, normflags, flags, tx); + return (obj); +} + +int +zap_destroy(objset_t *os, uint64_t zapobj, dmu_tx_t *tx) +{ + /* + * dmu_object_free will free the object number and free the + * data. Freeing the data will cause our pageout function to be + * called, which will destroy our data (zap_leaf_t's and zap_t). + */ + + return (dmu_object_free(os, zapobj, tx)); +} + +void +zap_evict_sync(void *dbu) +{ + zap_t *zap = dbu; + + rw_destroy(&zap->zap_rwlock); + + if (zap->zap_ismicro) + mze_destroy(zap); + else + mutex_destroy(&zap->zap_f.zap_num_entries_mtx); + + kmem_free(zap, sizeof (zap_t)); +} + +int +zap_count(objset_t *os, uint64_t zapobj, uint64_t *count) +{ + zap_t *zap; + int err; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + if (!zap->zap_ismicro) { + err = fzap_count(zap, count); + } else { + *count = zap->zap_m.zap_num_entries; + } + zap_unlockdir(zap, FTAG); + return (err); +} + +/* + * zn may be NULL; if not specified, it will be computed if needed. + * See also the comment above zap_entry_normalization_conflict(). + */ +static boolean_t +mzap_normalization_conflict(zap_t *zap, zap_name_t *zn, mzap_ent_t *mze) +{ + mzap_ent_t *other; + int direction = AVL_BEFORE; + boolean_t allocdzn = B_FALSE; + + if (zap->zap_normflags == 0) + return (B_FALSE); + +again: + for (other = avl_walk(&zap->zap_m.zap_avl, mze, direction); + other && other->mze_hash == mze->mze_hash; + other = avl_walk(&zap->zap_m.zap_avl, other, direction)) { + + if (zn == NULL) { + zn = zap_name_alloc(zap, MZE_PHYS(zap, mze)->mze_name, + MT_NORMALIZE); + allocdzn = B_TRUE; + } + if (zap_match(zn, MZE_PHYS(zap, other)->mze_name)) { + if (allocdzn) + zap_name_free(zn); + return (B_TRUE); + } + } + + if (direction == AVL_BEFORE) { + direction = AVL_AFTER; + goto again; + } + + if (allocdzn) + zap_name_free(zn); + return (B_FALSE); +} + +/* + * Routines for manipulating attributes. + */ + +int +zap_lookup(objset_t *os, uint64_t zapobj, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf) +{ + return (zap_lookup_norm(os, zapobj, name, integer_size, + num_integers, buf, 0, NULL, 0, NULL)); +} + +static int +zap_lookup_impl(zap_t *zap, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf, + matchtype_t mt, char *realname, int rn_len, + boolean_t *ncp) +{ + int err = 0; + mzap_ent_t *mze; + zap_name_t *zn; + + zn = zap_name_alloc(zap, name, mt); + if (zn == NULL) + return (SET_ERROR(ENOTSUP)); + + if (!zap->zap_ismicro) { + err = fzap_lookup(zn, integer_size, num_integers, buf, + realname, rn_len, ncp); + } else { + mze = mze_find(zn); + if (mze == NULL) { + err = SET_ERROR(ENOENT); + } else { + if (num_integers < 1) { + err = SET_ERROR(EOVERFLOW); + } else if (integer_size != 8) { + err = SET_ERROR(EINVAL); + } else { + *(uint64_t *)buf = + MZE_PHYS(zap, mze)->mze_value; + (void) strlcpy(realname, + MZE_PHYS(zap, mze)->mze_name, rn_len); + if (ncp) { + *ncp = mzap_normalization_conflict(zap, + zn, mze); + } + } + } + } + zap_name_free(zn); + return (err); +} + +int +zap_lookup_norm(objset_t *os, uint64_t zapobj, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf, + matchtype_t mt, char *realname, int rn_len, + boolean_t *ncp) +{ + zap_t *zap; + int err; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err != 0) + return (err); + err = zap_lookup_impl(zap, name, integer_size, + num_integers, buf, mt, realname, rn_len, ncp); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_prefetch(objset_t *os, uint64_t zapobj, const char *name) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc(zap, name, 0); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + fzap_prefetch(zn); + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_lookup_by_dnode(dnode_t *dn, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf) +{ + return (zap_lookup_norm_by_dnode(dn, name, integer_size, + num_integers, buf, 0, NULL, 0, NULL)); +} + +int +zap_lookup_norm_by_dnode(dnode_t *dn, const char *name, + uint64_t integer_size, uint64_t num_integers, void *buf, + matchtype_t mt, char *realname, int rn_len, + boolean_t *ncp) +{ + zap_t *zap; + int err; + + err = zap_lockdir_by_dnode(dn, NULL, RW_READER, TRUE, FALSE, + FTAG, &zap); + if (err != 0) + return (err); + err = zap_lookup_impl(zap, name, integer_size, + num_integers, buf, mt, realname, rn_len, ncp); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + fzap_prefetch(zn); + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, uint64_t integer_size, uint64_t num_integers, void *buf) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + err = fzap_lookup(zn, integer_size, num_integers, buf, + NULL, 0, NULL); + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_contains(objset_t *os, uint64_t zapobj, const char *name) +{ + int err = zap_lookup_norm(os, zapobj, name, 0, + 0, NULL, 0, NULL, 0, NULL); + if (err == EOVERFLOW || err == EINVAL) + err = 0; /* found, but skipped reading the value */ + return (err); +} + +int +zap_length(objset_t *os, uint64_t zapobj, const char *name, + uint64_t *integer_size, uint64_t *num_integers) +{ + zap_t *zap; + int err; + mzap_ent_t *mze; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc(zap, name, 0); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + if (!zap->zap_ismicro) { + err = fzap_length(zn, integer_size, num_integers); + } else { + mze = mze_find(zn); + if (mze == NULL) { + err = SET_ERROR(ENOENT); + } else { + if (integer_size) + *integer_size = 8; + if (num_integers) + *num_integers = 1; + } + } + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_length_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, uint64_t *integer_size, uint64_t *num_integers) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + err = fzap_length(zn, integer_size, num_integers); + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +static void +mzap_addent(zap_name_t *zn, uint64_t value) +{ + int i; + zap_t *zap = zn->zn_zap; + int start = zap->zap_m.zap_alloc_next; + uint32_t cd; + + ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); + +#ifdef ZFS_DEBUG + for (i = 0; i < zap->zap_m.zap_num_chunks; i++) { + ASSERTV(mzap_ent_phys_t *mze); + ASSERT(mze = &zap_m_phys(zap)->mz_chunk[i]); + ASSERT(strcmp(zn->zn_key_orig, mze->mze_name) != 0); + } +#endif + + cd = mze_find_unused_cd(zap, zn->zn_hash); + /* given the limited size of the microzap, this can't happen */ + ASSERT(cd < zap_maxcd(zap)); + +again: + for (i = start; i < zap->zap_m.zap_num_chunks; i++) { + mzap_ent_phys_t *mze = &zap_m_phys(zap)->mz_chunk[i]; + if (mze->mze_name[0] == 0) { + mze->mze_value = value; + mze->mze_cd = cd; + (void) strlcpy(mze->mze_name, zn->zn_key_orig, + sizeof (mze->mze_name)); + zap->zap_m.zap_num_entries++; + zap->zap_m.zap_alloc_next = i+1; + if (zap->zap_m.zap_alloc_next == + zap->zap_m.zap_num_chunks) + zap->zap_m.zap_alloc_next = 0; + mze_insert(zap, i, zn->zn_hash); + return; + } + } + if (start != 0) { + start = 0; + goto again; + } + cmn_err(CE_PANIC, "out of entries!"); +} + +static int +zap_add_impl(zap_t *zap, const char *key, + int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx, void *tag) +{ + int err = 0; + mzap_ent_t *mze; + const uint64_t *intval = val; + zap_name_t *zn; + + zn = zap_name_alloc(zap, key, 0); + if (zn == NULL) { + zap_unlockdir(zap, tag); + return (SET_ERROR(ENOTSUP)); + } + if (!zap->zap_ismicro) { + err = fzap_add(zn, integer_size, num_integers, val, tag, tx); + zap = zn->zn_zap; /* fzap_add() may change zap */ + } else if (integer_size != 8 || num_integers != 1 || + strlen(key) >= MZAP_NAME_LEN) { + err = mzap_upgrade(&zn->zn_zap, tag, tx, 0); + if (err == 0) { + err = fzap_add(zn, integer_size, num_integers, val, + tag, tx); + } + zap = zn->zn_zap; /* fzap_add() may change zap */ + } else { + mze = mze_find(zn); + if (mze != NULL) { + err = SET_ERROR(EEXIST); + } else { + mzap_addent(zn, *intval); + } + } + ASSERT(zap == zn->zn_zap); + zap_name_free(zn); + if (zap != NULL) /* may be NULL if fzap_add() failed */ + zap_unlockdir(zap, tag); + return (err); +} + +int +zap_add(objset_t *os, uint64_t zapobj, const char *key, + int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); + if (err != 0) + return (err); + err = zap_add_impl(zap, key, integer_size, num_integers, val, tx, FTAG); + /* zap_add_impl() calls zap_unlockdir() */ + return (err); +} + +int +zap_add_by_dnode(dnode_t *dn, const char *key, + int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + + err = zap_lockdir_by_dnode(dn, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); + if (err != 0) + return (err); + err = zap_add_impl(zap, key, integer_size, num_integers, val, tx, FTAG); + /* zap_add_impl() calls zap_unlockdir() */ + return (err); +} + +int +zap_add_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, int integer_size, uint64_t num_integers, + const void *val, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + err = fzap_add(zn, integer_size, num_integers, val, FTAG, tx); + zap = zn->zn_zap; /* fzap_add() may change zap */ + zap_name_free(zn); + if (zap != NULL) /* may be NULL if fzap_add() failed */ + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_update(objset_t *os, uint64_t zapobj, const char *name, + int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx) +{ + zap_t *zap; + mzap_ent_t *mze; + const uint64_t *intval = val; + zap_name_t *zn; + int err; + +#ifdef ZFS_DEBUG + uint64_t oldval; + + /* + * If there is an old value, it shouldn't change across the + * lockdir (eg, due to bprewrite's xlation). + */ + if (integer_size == 8 && num_integers == 1) + (void) zap_lookup(os, zapobj, name, 8, 1, &oldval); +#endif + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc(zap, name, 0); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + if (!zap->zap_ismicro) { + err = fzap_update(zn, integer_size, num_integers, val, + FTAG, tx); + zap = zn->zn_zap; /* fzap_update() may change zap */ + } else if (integer_size != 8 || num_integers != 1 || + strlen(name) >= MZAP_NAME_LEN) { + dprintf("upgrading obj %llu: intsz=%u numint=%llu name=%s\n", + zapobj, integer_size, num_integers, name); + err = mzap_upgrade(&zn->zn_zap, FTAG, tx, 0); + if (err == 0) { + err = fzap_update(zn, integer_size, num_integers, + val, FTAG, tx); + } + zap = zn->zn_zap; /* fzap_update() may change zap */ + } else { + mze = mze_find(zn); + if (mze != NULL) { + ASSERT3U(MZE_PHYS(zap, mze)->mze_value, ==, oldval); + MZE_PHYS(zap, mze)->mze_value = *intval; + } else { + mzap_addent(zn, *intval); + } + } + ASSERT(zap == zn->zn_zap); + zap_name_free(zn); + if (zap != NULL) /* may be NULL if fzap_upgrade() failed */ + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_update_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, + int integer_size, uint64_t num_integers, const void *val, dmu_tx_t *tx) +{ + zap_t *zap; + zap_name_t *zn; + int err; + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + err = fzap_update(zn, integer_size, num_integers, val, FTAG, tx); + zap = zn->zn_zap; /* fzap_update() may change zap */ + zap_name_free(zn); + if (zap != NULL) /* may be NULL if fzap_upgrade() failed */ + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_remove(objset_t *os, uint64_t zapobj, const char *name, dmu_tx_t *tx) +{ + return (zap_remove_norm(os, zapobj, name, 0, tx)); +} + +static int +zap_remove_impl(zap_t *zap, const char *name, + matchtype_t mt, dmu_tx_t *tx) +{ + mzap_ent_t *mze; + zap_name_t *zn; + int err = 0; + + zn = zap_name_alloc(zap, name, mt); + if (zn == NULL) + return (SET_ERROR(ENOTSUP)); + if (!zap->zap_ismicro) { + err = fzap_remove(zn, tx); + } else { + mze = mze_find(zn); + if (mze == NULL) { + err = SET_ERROR(ENOENT); + } else { + zap->zap_m.zap_num_entries--; + bzero(&zap_m_phys(zap)->mz_chunk[mze->mze_chunkid], + sizeof (mzap_ent_phys_t)); + mze_remove(zap, mze); + } + } + zap_name_free(zn); + return (err); +} + +int +zap_remove_norm(objset_t *os, uint64_t zapobj, const char *name, + matchtype_t mt, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + err = zap_remove_impl(zap, name, mt, tx); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_remove_by_dnode(dnode_t *dn, const char *name, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + + err = zap_lockdir_by_dnode(dn, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + err = zap_remove_impl(zap, name, 0, tx); + zap_unlockdir(zap, FTAG); + return (err); +} + +int +zap_remove_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key, + int key_numints, dmu_tx_t *tx) +{ + zap_t *zap; + int err; + zap_name_t *zn; + + err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + zn = zap_name_alloc_uint64(zap, key, key_numints); + if (zn == NULL) { + zap_unlockdir(zap, FTAG); + return (SET_ERROR(ENOTSUP)); + } + err = fzap_remove(zn, tx); + zap_name_free(zn); + zap_unlockdir(zap, FTAG); + return (err); +} + +/* + * Routines for iterating over the attributes. + */ + +void +zap_cursor_init_serialized(zap_cursor_t *zc, objset_t *os, uint64_t zapobj, + uint64_t serialized) +{ + zc->zc_objset = os; + zc->zc_zap = NULL; + zc->zc_leaf = NULL; + zc->zc_zapobj = zapobj; + zc->zc_serialized = serialized; + zc->zc_hash = 0; + zc->zc_cd = 0; +} + +void +zap_cursor_init(zap_cursor_t *zc, objset_t *os, uint64_t zapobj) +{ + zap_cursor_init_serialized(zc, os, zapobj, 0); +} + +void +zap_cursor_fini(zap_cursor_t *zc) +{ + if (zc->zc_zap) { + rw_enter(&zc->zc_zap->zap_rwlock, RW_READER); + zap_unlockdir(zc->zc_zap, NULL); + zc->zc_zap = NULL; + } + if (zc->zc_leaf) { + rw_enter(&zc->zc_leaf->l_rwlock, RW_READER); + zap_put_leaf(zc->zc_leaf); + zc->zc_leaf = NULL; + } + zc->zc_objset = NULL; +} + +uint64_t +zap_cursor_serialize(zap_cursor_t *zc) +{ + if (zc->zc_hash == -1ULL) + return (-1ULL); + if (zc->zc_zap == NULL) + return (zc->zc_serialized); + ASSERT((zc->zc_hash & zap_maxcd(zc->zc_zap)) == 0); + ASSERT(zc->zc_cd < zap_maxcd(zc->zc_zap)); + + /* + * We want to keep the high 32 bits of the cursor zero if we can, so + * that 32-bit programs can access this. So usually use a small + * (28-bit) hash value so we can fit 4 bits of cd into the low 32-bits + * of the cursor. + * + * [ collision differentiator | zap_hashbits()-bit hash value ] + */ + return ((zc->zc_hash >> (64 - zap_hashbits(zc->zc_zap))) | + ((uint64_t)zc->zc_cd << zap_hashbits(zc->zc_zap))); +} + +int +zap_cursor_retrieve(zap_cursor_t *zc, zap_attribute_t *za) +{ + int err; + avl_index_t idx; + mzap_ent_t mze_tofind; + mzap_ent_t *mze; + + if (zc->zc_hash == -1ULL) + return (SET_ERROR(ENOENT)); + + if (zc->zc_zap == NULL) { + int hb; + err = zap_lockdir(zc->zc_objset, zc->zc_zapobj, NULL, + RW_READER, TRUE, FALSE, NULL, &zc->zc_zap); + if (err) + return (err); + + /* + * To support zap_cursor_init_serialized, advance, retrieve, + * we must add to the existing zc_cd, which may already + * be 1 due to the zap_cursor_advance. + */ + ASSERT(zc->zc_hash == 0); + hb = zap_hashbits(zc->zc_zap); + zc->zc_hash = zc->zc_serialized << (64 - hb); + zc->zc_cd += zc->zc_serialized >> hb; + if (zc->zc_cd >= zap_maxcd(zc->zc_zap)) /* corrupt serialized */ + zc->zc_cd = 0; + } else { + rw_enter(&zc->zc_zap->zap_rwlock, RW_READER); + } + if (!zc->zc_zap->zap_ismicro) { + err = fzap_cursor_retrieve(zc->zc_zap, zc, za); + } else { + mze_tofind.mze_hash = zc->zc_hash; + mze_tofind.mze_cd = zc->zc_cd; + + mze = avl_find(&zc->zc_zap->zap_m.zap_avl, &mze_tofind, &idx); + if (mze == NULL) { + mze = avl_nearest(&zc->zc_zap->zap_m.zap_avl, + idx, AVL_AFTER); + } + if (mze) { + mzap_ent_phys_t *mzep = MZE_PHYS(zc->zc_zap, mze); + ASSERT3U(mze->mze_cd, ==, mzep->mze_cd); + za->za_normalization_conflict = + mzap_normalization_conflict(zc->zc_zap, NULL, mze); + za->za_integer_length = 8; + za->za_num_integers = 1; + za->za_first_integer = mzep->mze_value; + (void) strcpy(za->za_name, mzep->mze_name); + zc->zc_hash = mze->mze_hash; + zc->zc_cd = mze->mze_cd; + err = 0; + } else { + zc->zc_hash = -1ULL; + err = SET_ERROR(ENOENT); + } + } + rw_exit(&zc->zc_zap->zap_rwlock); + return (err); +} + +void +zap_cursor_advance(zap_cursor_t *zc) +{ + if (zc->zc_hash == -1ULL) + return; + zc->zc_cd++; +} + +int +zap_get_stats(objset_t *os, uint64_t zapobj, zap_stats_t *zs) +{ + int err; + zap_t *zap; + + err = zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); + if (err) + return (err); + + bzero(zs, sizeof (zap_stats_t)); + + if (zap->zap_ismicro) { + zs->zs_blocksize = zap->zap_dbuf->db_size; + zs->zs_num_entries = zap->zap_m.zap_num_entries; + zs->zs_num_blocks = 1; + } else { + fzap_get_stats(zap, zs); + } + zap_unlockdir(zap, FTAG); + return (0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zap_create); +EXPORT_SYMBOL(zap_create_dnsize); +EXPORT_SYMBOL(zap_create_norm); +EXPORT_SYMBOL(zap_create_norm_dnsize); +EXPORT_SYMBOL(zap_create_flags); +EXPORT_SYMBOL(zap_create_flags_dnsize); +EXPORT_SYMBOL(zap_create_claim); +EXPORT_SYMBOL(zap_create_claim_norm); +EXPORT_SYMBOL(zap_create_claim_norm_dnsize); +EXPORT_SYMBOL(zap_destroy); +EXPORT_SYMBOL(zap_lookup); +EXPORT_SYMBOL(zap_lookup_by_dnode); +EXPORT_SYMBOL(zap_lookup_norm); +EXPORT_SYMBOL(zap_lookup_uint64); +EXPORT_SYMBOL(zap_contains); +EXPORT_SYMBOL(zap_prefetch); +EXPORT_SYMBOL(zap_prefetch_uint64); +EXPORT_SYMBOL(zap_add); +EXPORT_SYMBOL(zap_add_by_dnode); +EXPORT_SYMBOL(zap_add_uint64); +EXPORT_SYMBOL(zap_update); +EXPORT_SYMBOL(zap_update_uint64); +EXPORT_SYMBOL(zap_length); +EXPORT_SYMBOL(zap_length_uint64); +EXPORT_SYMBOL(zap_remove); +EXPORT_SYMBOL(zap_remove_by_dnode); +EXPORT_SYMBOL(zap_remove_norm); +EXPORT_SYMBOL(zap_remove_uint64); +EXPORT_SYMBOL(zap_count); +EXPORT_SYMBOL(zap_value_search); +EXPORT_SYMBOL(zap_join); +EXPORT_SYMBOL(zap_join_increment); +EXPORT_SYMBOL(zap_add_int); +EXPORT_SYMBOL(zap_remove_int); +EXPORT_SYMBOL(zap_lookup_int); +EXPORT_SYMBOL(zap_increment_int); +EXPORT_SYMBOL(zap_add_int_key); +EXPORT_SYMBOL(zap_lookup_int_key); +EXPORT_SYMBOL(zap_increment); +EXPORT_SYMBOL(zap_cursor_init); +EXPORT_SYMBOL(zap_cursor_fini); +EXPORT_SYMBOL(zap_cursor_retrieve); +EXPORT_SYMBOL(zap_cursor_advance); +EXPORT_SYMBOL(zap_cursor_serialize); +EXPORT_SYMBOL(zap_cursor_init_serialized); +EXPORT_SYMBOL(zap_get_stats); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfeature.c +++ linux-aws-4.15.0/zfs/module/zfs/zfeature.c @@ -0,0 +1,516 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include "zfeature_common.h" +#include + +/* + * ZFS Feature Flags + * ----------------- + * + * ZFS feature flags are used to provide fine-grained versioning to the ZFS + * on-disk format. Once enabled on a pool feature flags replace the old + * spa_version() number. + * + * Each new on-disk format change will be given a uniquely identifying string + * guid rather than a version number. This avoids the problem of different + * organizations creating new on-disk formats with the same version number. To + * keep feature guids unique they should consist of the reverse dns name of the + * organization which implemented the feature and a short name for the feature, + * separated by a colon (e.g. com.delphix:async_destroy). + * + * Reference Counts + * ---------------- + * + * Within each pool features can be in one of three states: disabled, enabled, + * or active. These states are differentiated by a reference count stored on + * disk for each feature: + * + * 1) If there is no reference count stored on disk the feature is disabled. + * 2) If the reference count is 0 a system administrator has enabled the + * feature, but the feature has not been used yet, so no on-disk + * format changes have been made. + * 3) If the reference count is greater than 0 the feature is active. + * The format changes required by the feature are currently on disk. + * Note that if the feature's format changes are reversed the feature + * may choose to set its reference count back to 0. + * + * Feature flags makes no differentiation between non-zero reference counts + * for an active feature (e.g. a reference count of 1 means the same thing as a + * reference count of 27834721), but feature implementations may choose to use + * the reference count to store meaningful information. For example, a new RAID + * implementation might set the reference count to the number of vdevs using + * it. If all those disks are removed from the pool the feature goes back to + * having a reference count of 0. + * + * It is the responsibility of the individual features to maintain a non-zero + * reference count as long as the feature's format changes are present on disk. + * + * Dependencies + * ------------ + * + * Each feature may depend on other features. The only effect of this + * relationship is that when a feature is enabled all of its dependencies are + * automatically enabled as well. Any future work to support disabling of + * features would need to ensure that features cannot be disabled if other + * enabled features depend on them. + * + * On-disk Format + * -------------- + * + * When feature flags are enabled spa_version() is set to SPA_VERSION_FEATURES + * (5000). In order for this to work the pool is automatically upgraded to + * SPA_VERSION_BEFORE_FEATURES (28) first, so all pre-feature flags on disk + * format changes will be in use. + * + * Information about features is stored in 3 ZAP objects in the pool's MOS. + * These objects are linked to by the following names in the pool directory + * object: + * + * 1) features_for_read: feature guid -> reference count + * Features needed to open the pool for reading. + * 2) features_for_write: feature guid -> reference count + * Features needed to open the pool for writing. + * 3) feature_descriptions: feature guid -> descriptive string + * A human readable string. + * + * All enabled features appear in either features_for_read or + * features_for_write, but not both. + * + * To open a pool in read-only mode only the features listed in + * features_for_read need to be supported. + * + * To open the pool in read-write mode features in both features_for_read and + * features_for_write need to be supported. + * + * Some features may be required to read the ZAP objects containing feature + * information. To allow software to check for compatibility with these features + * before the pool is opened their names must be stored in the label in a + * new "features_for_read" entry (note that features that are only required + * to write to a pool never need to be stored in the label since the + * features_for_write ZAP object can be read before the pool is written to). + * To save space in the label features must be explicitly marked as needing to + * be written to the label. Also, reference counts are not stored in the label, + * instead any feature whose reference count drops to 0 is removed from the + * label. + * + * Adding New Features + * ------------------- + * + * Features must be registered in zpool_feature_init() function in + * zfeature_common.c using the zfeature_register() function. This function + * has arguments to specify if the feature should be stored in the + * features_for_read or features_for_write ZAP object and if it needs to be + * written to the label when active. + * + * Once a feature is registered it will appear as a "feature@" + * property which can be set by an administrator. Feature implementors should + * use the spa_feature_is_enabled() and spa_feature_is_active() functions to + * query the state of a feature and the spa_feature_incr() and + * spa_feature_decr() functions to change an enabled feature's reference count. + * Reference counts may only be updated in the syncing context. + * + * Features may not perform enable-time initialization. Instead, any such + * initialization should occur when the feature is first used. This design + * enforces that on-disk changes be made only when features are used. Code + * should only check if a feature is enabled using spa_feature_is_enabled(), + * not by relying on any feature specific metadata existing. If a feature is + * enabled, but the feature's metadata is not on disk yet then it should be + * created as needed. + * + * As an example, consider the com.delphix:async_destroy feature. This feature + * relies on the existence of a bptree in the MOS that store blocks for + * asynchronous freeing. This bptree is not created when async_destroy is + * enabled. Instead, when a dataset is destroyed spa_feature_is_enabled() is + * called to check if async_destroy is enabled. If it is and the bptree object + * does not exist yet, the bptree object is created as part of the dataset + * destroy and async_destroy's reference count is incremented to indicate it + * has made an on-disk format change. Later, after the destroyed dataset's + * blocks have all been asynchronously freed there is no longer any use for the + * bptree object, so it is destroyed and async_destroy's reference count is + * decremented back to 0 to indicate that it has undone its on-disk format + * changes. + */ + +typedef enum { + FEATURE_ACTION_INCR, + FEATURE_ACTION_DECR, +} feature_action_t; + +/* + * Checks that the active features in the pool are supported by + * this software. Adds each unsupported feature (name -> description) to + * the supplied nvlist. + */ +boolean_t +spa_features_check(spa_t *spa, boolean_t for_write, + nvlist_t *unsup_feat, nvlist_t *enabled_feat) +{ + objset_t *os = spa->spa_meta_objset; + boolean_t supported; + zap_cursor_t *zc; + zap_attribute_t *za; + uint64_t obj = for_write ? + spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; + char *buf; + + zc = kmem_alloc(sizeof (zap_cursor_t), KM_SLEEP); + za = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP); + buf = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + supported = B_TRUE; + for (zap_cursor_init(zc, os, obj); + zap_cursor_retrieve(zc, za) == 0; + zap_cursor_advance(zc)) { + ASSERT(za->za_integer_length == sizeof (uint64_t) && + za->za_num_integers == 1); + + if (NULL != enabled_feat) { + fnvlist_add_uint64(enabled_feat, za->za_name, + za->za_first_integer); + } + + if (za->za_first_integer != 0 && + !zfeature_is_supported(za->za_name)) { + supported = B_FALSE; + + if (NULL != unsup_feat) { + char *desc = ""; + + if (zap_lookup(os, spa->spa_feat_desc_obj, + za->za_name, 1, MAXPATHLEN, buf) == 0) + desc = buf; + + VERIFY(nvlist_add_string(unsup_feat, + za->za_name, desc) == 0); + } + } + } + zap_cursor_fini(zc); + + kmem_free(buf, MAXPATHLEN); + kmem_free(za, sizeof (zap_attribute_t)); + kmem_free(zc, sizeof (zap_cursor_t)); + + return (supported); +} + +/* + * Use an in-memory cache of feature refcounts for quick retrieval. + * + * Note: well-designed features will not need to use this; they should + * use spa_feature_is_enabled() and spa_feature_is_active() instead. + * However, this is non-static for zdb, zhack, and spa_add_feature_stats(). + */ +int +feature_get_refcount(spa_t *spa, zfeature_info_t *feature, uint64_t *res) +{ + ASSERT(VALID_FEATURE_FID(feature->fi_feature)); + if (spa->spa_feat_refcount_cache[feature->fi_feature] == + SPA_FEATURE_DISABLED) { + return (SET_ERROR(ENOTSUP)); + } + *res = spa->spa_feat_refcount_cache[feature->fi_feature]; + return (0); +} + +/* + * Note: well-designed features will not need to use this; they should + * use spa_feature_is_enabled() and spa_feature_is_active() instead. + * However, this is non-static for zdb and zhack. + */ +int +feature_get_refcount_from_disk(spa_t *spa, zfeature_info_t *feature, + uint64_t *res) +{ + int err; + uint64_t refcount; + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? + spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; + + /* + * If the pool is currently being created, the feature objects may not + * have been allocated yet. Act as though all features are disabled. + */ + if (zapobj == 0) + return (SET_ERROR(ENOTSUP)); + + err = zap_lookup(spa->spa_meta_objset, zapobj, + feature->fi_guid, sizeof (uint64_t), 1, &refcount); + if (err != 0) { + if (err == ENOENT) + return (SET_ERROR(ENOTSUP)); + else + return (err); + } + *res = refcount; + return (0); +} + + +static int +feature_get_enabled_txg(spa_t *spa, zfeature_info_t *feature, uint64_t *res) +{ + ASSERTV(uint64_t enabled_txg_obj = spa->spa_feat_enabled_txg_obj); + + ASSERT(zfeature_depends_on(feature->fi_feature, + SPA_FEATURE_ENABLED_TXG)); + + if (!spa_feature_is_enabled(spa, feature->fi_feature)) { + return (SET_ERROR(ENOTSUP)); + } + + ASSERT(enabled_txg_obj != 0); + + VERIFY0(zap_lookup(spa->spa_meta_objset, spa->spa_feat_enabled_txg_obj, + feature->fi_guid, sizeof (uint64_t), 1, res)); + + return (0); +} + +/* + * This function is non-static for zhack; it should otherwise not be used + * outside this file. + */ +void +feature_sync(spa_t *spa, zfeature_info_t *feature, uint64_t refcount, + dmu_tx_t *tx) +{ + uint64_t zapobj; + + ASSERT(VALID_FEATURE_OR_NONE(feature->fi_feature)); + zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? + spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; + VERIFY0(zap_update(spa->spa_meta_objset, zapobj, feature->fi_guid, + sizeof (uint64_t), 1, &refcount, tx)); + + /* + * feature_sync is called directly from zhack, allowing the + * creation of arbitrary features whose fi_feature field may + * be greater than SPA_FEATURES. When called from zhack, the + * zfeature_info_t object's fi_feature field will be set to + * SPA_FEATURE_NONE. + */ + if (feature->fi_feature != SPA_FEATURE_NONE) { + uint64_t *refcount_cache = + &spa->spa_feat_refcount_cache[feature->fi_feature]; + VERIFY3U(*refcount_cache, ==, + atomic_swap_64(refcount_cache, refcount)); + } + + if (refcount == 0) + spa_deactivate_mos_feature(spa, feature->fi_guid); + else if (feature->fi_flags & ZFEATURE_FLAG_MOS) + spa_activate_mos_feature(spa, feature->fi_guid, tx); +} + +/* + * This function is non-static for zhack; it should otherwise not be used + * outside this file. + */ +void +feature_enable_sync(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx) +{ + uint64_t initial_refcount = + (feature->fi_flags & ZFEATURE_FLAG_ACTIVATE_ON_ENABLE) ? 1 : 0; + uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? + spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj; + int i; + + ASSERT(0 != zapobj); + ASSERT(zfeature_is_valid_guid(feature->fi_guid)); + ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); + + /* + * If the feature is already enabled, ignore the request. + */ + if (zap_contains(spa->spa_meta_objset, zapobj, feature->fi_guid) == 0) + return; + + for (i = 0; feature->fi_depends[i] != SPA_FEATURE_NONE; i++) + spa_feature_enable(spa, feature->fi_depends[i], tx); + + VERIFY0(zap_update(spa->spa_meta_objset, spa->spa_feat_desc_obj, + feature->fi_guid, 1, strlen(feature->fi_desc) + 1, + feature->fi_desc, tx)); + + feature_sync(spa, feature, initial_refcount, tx); + + if (spa_feature_is_enabled(spa, SPA_FEATURE_ENABLED_TXG)) { + uint64_t enabling_txg = dmu_tx_get_txg(tx); + + if (spa->spa_feat_enabled_txg_obj == 0ULL) { + spa->spa_feat_enabled_txg_obj = + zap_create_link(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FEATURE_ENABLED_TXG, tx); + } + spa_feature_incr(spa, SPA_FEATURE_ENABLED_TXG, tx); + + VERIFY0(zap_add(spa->spa_meta_objset, + spa->spa_feat_enabled_txg_obj, feature->fi_guid, + sizeof (uint64_t), 1, &enabling_txg, tx)); + } +} + +static void +feature_do_action(spa_t *spa, spa_feature_t fid, feature_action_t action, + dmu_tx_t *tx) +{ + uint64_t refcount = 0; + zfeature_info_t *feature = &spa_feature_table[fid]; + ASSERTV(uint64_t zapobj = + (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ? + spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj); + + ASSERT(VALID_FEATURE_FID(fid)); + ASSERT(0 != zapobj); + ASSERT(zfeature_is_valid_guid(feature->fi_guid)); + + ASSERT(dmu_tx_is_syncing(tx)); + ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); + + VERIFY3U(feature_get_refcount(spa, feature, &refcount), !=, ENOTSUP); + + switch (action) { + case FEATURE_ACTION_INCR: + VERIFY3U(refcount, !=, UINT64_MAX); + refcount++; + break; + case FEATURE_ACTION_DECR: + VERIFY3U(refcount, !=, 0); + refcount--; + break; + default: + ASSERT(0); + break; + } + + feature_sync(spa, feature, refcount, tx); +} + +void +spa_feature_create_zap_objects(spa_t *spa, dmu_tx_t *tx) +{ + /* + * We create feature flags ZAP objects in two instances: during pool + * creation and during pool upgrade. + */ + ASSERT(dsl_pool_sync_context(spa_get_dsl(spa)) || (!spa->spa_sync_on && + tx->tx_txg == TXG_INITIAL)); + + spa->spa_feat_for_read_obj = zap_create_link(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FEATURES_FOR_READ, tx); + spa->spa_feat_for_write_obj = zap_create_link(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FEATURES_FOR_WRITE, tx); + spa->spa_feat_desc_obj = zap_create_link(spa->spa_meta_objset, + DMU_OTN_ZAP_METADATA, DMU_POOL_DIRECTORY_OBJECT, + DMU_POOL_FEATURE_DESCRIPTIONS, tx); +} + +/* + * Enable any required dependencies, then enable the requested feature. + */ +void +spa_feature_enable(spa_t *spa, spa_feature_t fid, dmu_tx_t *tx) +{ + ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); + ASSERT(VALID_FEATURE_FID(fid)); + feature_enable_sync(spa, &spa_feature_table[fid], tx); +} + +void +spa_feature_incr(spa_t *spa, spa_feature_t fid, dmu_tx_t *tx) +{ + feature_do_action(spa, fid, FEATURE_ACTION_INCR, tx); +} + +void +spa_feature_decr(spa_t *spa, spa_feature_t fid, dmu_tx_t *tx) +{ + feature_do_action(spa, fid, FEATURE_ACTION_DECR, tx); +} + +boolean_t +spa_feature_is_enabled(spa_t *spa, spa_feature_t fid) +{ + int err; + uint64_t refcount = 0; + + ASSERT(VALID_FEATURE_FID(fid)); + if (spa_version(spa) < SPA_VERSION_FEATURES) + return (B_FALSE); + + err = feature_get_refcount(spa, &spa_feature_table[fid], &refcount); + ASSERT(err == 0 || err == ENOTSUP); + return (err == 0); +} + +boolean_t +spa_feature_is_active(spa_t *spa, spa_feature_t fid) +{ + int err; + uint64_t refcount = 0; + + ASSERT(VALID_FEATURE_FID(fid)); + if (spa_version(spa) < SPA_VERSION_FEATURES) + return (B_FALSE); + + err = feature_get_refcount(spa, &spa_feature_table[fid], &refcount); + ASSERT(err == 0 || err == ENOTSUP); + return (err == 0 && refcount > 0); +} + +/* + * For the feature specified by fid (which must depend on + * SPA_FEATURE_ENABLED_TXG), return the TXG at which it was enabled in the + * OUT txg argument. + * + * Returns B_TRUE if the feature is enabled, in which case txg will be filled + * with the transaction group in which the specified feature was enabled. + * Returns B_FALSE otherwise (i.e. if the feature is not enabled). + */ +boolean_t +spa_feature_enabled_txg(spa_t *spa, spa_feature_t fid, uint64_t *txg) +{ + int err; + + ASSERT(VALID_FEATURE_FID(fid)); + if (spa_version(spa) < SPA_VERSION_FEATURES) + return (B_FALSE); + + err = feature_get_enabled_txg(spa, &spa_feature_table[fid], txg); + ASSERT(err == 0 || err == ENOTSUP); + + return (err == 0); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zfeature_common.c +++ linux-aws-4.15.0/zfs/module/zfs/zfeature_common.c @@ -0,0 +1,321 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright (c) 2014, Nexenta Systems, Inc. All rights reserved. + */ + +#ifdef _KERNEL +#include +#else +#include +#include +#endif +#include +#include +#include +#include +#include "zfeature_common.h" + +/* + * Set to disable all feature checks while opening pools, allowing pools with + * unsupported features to be opened. Set for testing only. + */ +boolean_t zfeature_checks_disable = B_FALSE; + +zfeature_info_t spa_feature_table[SPA_FEATURES]; + +/* + * Valid characters for feature guids. This list is mainly for aesthetic + * purposes and could be expanded in the future. There are different allowed + * characters in the guids reverse dns portion (before the colon) and its + * short name (after the colon). + */ +static int +valid_char(char c, boolean_t after_colon) +{ + return ((c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + (after_colon && c == '_') || + (!after_colon && (c == '.' || c == '-'))); +} + +/* + * Every feature guid must contain exactly one colon which separates a reverse + * dns organization name from the feature's "short" name (e.g. + * "com.company:feature_name"). + */ +boolean_t +zfeature_is_valid_guid(const char *name) +{ + int i; + boolean_t has_colon = B_FALSE; + + i = 0; + while (name[i] != '\0') { + char c = name[i++]; + if (c == ':') { + if (has_colon) + return (B_FALSE); + has_colon = B_TRUE; + continue; + } + if (!valid_char(c, has_colon)) + return (B_FALSE); + } + + return (has_colon); +} + +boolean_t +zfeature_is_supported(const char *guid) +{ + spa_feature_t i; + + if (zfeature_checks_disable) + return (B_TRUE); + + for (i = 0; i < SPA_FEATURES; i++) { + zfeature_info_t *feature = &spa_feature_table[i]; + if (strcmp(guid, feature->fi_guid) == 0) + return (B_TRUE); + } + + return (B_FALSE); +} + +int +zfeature_lookup_name(const char *name, spa_feature_t *res) +{ + spa_feature_t i; + + for (i = 0; i < SPA_FEATURES; i++) { + zfeature_info_t *feature = &spa_feature_table[i]; + if (strcmp(name, feature->fi_uname) == 0) { + if (res != NULL) + *res = i; + return (0); + } + } + + return (ENOENT); +} + +boolean_t +zfeature_depends_on(spa_feature_t fid, spa_feature_t check) +{ + zfeature_info_t *feature = &spa_feature_table[fid]; + int i; + + for (i = 0; feature->fi_depends[i] != SPA_FEATURE_NONE; i++) { + if (feature->fi_depends[i] == check) + return (B_TRUE); + } + return (B_FALSE); +} + +static boolean_t +deps_contains_feature(const spa_feature_t *deps, const spa_feature_t feature) +{ + int i; + + for (i = 0; deps[i] != SPA_FEATURE_NONE; i++) + if (deps[i] == feature) + return (B_TRUE); + + return (B_FALSE); +} + +static void +zfeature_register(spa_feature_t fid, const char *guid, const char *name, + const char *desc, zfeature_flags_t flags, const spa_feature_t *deps) +{ + zfeature_info_t *feature = &spa_feature_table[fid]; + static spa_feature_t nodeps[] = { SPA_FEATURE_NONE }; + + ASSERT(name != NULL); + ASSERT(desc != NULL); + ASSERT((flags & ZFEATURE_FLAG_READONLY_COMPAT) == 0 || + (flags & ZFEATURE_FLAG_MOS) == 0); + ASSERT3U(fid, <, SPA_FEATURES); + ASSERT(zfeature_is_valid_guid(guid)); + + if (deps == NULL) + deps = nodeps; + + VERIFY(((flags & ZFEATURE_FLAG_PER_DATASET) == 0) || + (deps_contains_feature(deps, SPA_FEATURE_EXTENSIBLE_DATASET))); + + feature->fi_feature = fid; + feature->fi_guid = guid; + feature->fi_uname = name; + feature->fi_desc = desc; + feature->fi_flags = flags; + feature->fi_depends = deps; +} + +void +zpool_feature_init(void) +{ + zfeature_register(SPA_FEATURE_ASYNC_DESTROY, + "com.delphix:async_destroy", "async_destroy", + "Destroy filesystems asynchronously.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); + + zfeature_register(SPA_FEATURE_EMPTY_BPOBJ, + "com.delphix:empty_bpobj", "empty_bpobj", + "Snapshots use less space.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); + + zfeature_register(SPA_FEATURE_LZ4_COMPRESS, + "org.illumos:lz4_compress", "lz4_compress", + "LZ4 compression algorithm support.", + ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, NULL); + + zfeature_register(SPA_FEATURE_MULTI_VDEV_CRASH_DUMP, + "com.joyent:multi_vdev_crash_dump", "multi_vdev_crash_dump", + "Crash dumps to multiple vdev pools.", + 0, NULL); + + zfeature_register(SPA_FEATURE_SPACEMAP_HISTOGRAM, + "com.delphix:spacemap_histogram", "spacemap_histogram", + "Spacemaps maintain space histograms.", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); + + zfeature_register(SPA_FEATURE_ENABLED_TXG, + "com.delphix:enabled_txg", "enabled_txg", + "Record txg at which a feature is enabled", + ZFEATURE_FLAG_READONLY_COMPAT, NULL); + + { + static const spa_feature_t hole_birth_deps[] = { + SPA_FEATURE_ENABLED_TXG, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_HOLE_BIRTH, + "com.delphix:hole_birth", "hole_birth", + "Retain hole birth txg for more precise zfs send", + ZFEATURE_FLAG_MOS | ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, + hole_birth_deps); + } + + zfeature_register(SPA_FEATURE_EXTENSIBLE_DATASET, + "com.delphix:extensible_dataset", "extensible_dataset", + "Enhanced dataset functionality, used by other features.", + 0, NULL); + + { + static const spa_feature_t bookmarks_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + + zfeature_register(SPA_FEATURE_BOOKMARKS, + "com.delphix:bookmarks", "bookmarks", + "\"zfs bookmark\" command", + ZFEATURE_FLAG_READONLY_COMPAT, bookmarks_deps); + } + + { + static const spa_feature_t filesystem_limits_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_FS_SS_LIMIT, + "com.joyent:filesystem_limits", "filesystem_limits", + "Filesystem and snapshot limits.", + ZFEATURE_FLAG_READONLY_COMPAT, filesystem_limits_deps); + } + + zfeature_register(SPA_FEATURE_EMBEDDED_DATA, + "com.delphix:embedded_data", "embedded_data", + "Blocks which compress very well use even less space.", + ZFEATURE_FLAG_MOS | ZFEATURE_FLAG_ACTIVATE_ON_ENABLE, + NULL); + + { + static const spa_feature_t large_blocks_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_LARGE_BLOCKS, + "org.open-zfs:large_blocks", "large_blocks", + "Support for blocks larger than 128KB.", + ZFEATURE_FLAG_PER_DATASET, large_blocks_deps); + } + + { + static const spa_feature_t large_dnode_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_LARGE_DNODE, + "org.zfsonlinux:large_dnode", "large_dnode", + "Variable on-disk size of dnodes.", + ZFEATURE_FLAG_PER_DATASET, large_dnode_deps); + } + + { + static const spa_feature_t sha512_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_SHA512, + "org.illumos:sha512", "sha512", + "SHA-512/256 hash algorithm.", + ZFEATURE_FLAG_PER_DATASET, sha512_deps); + } + { + static const spa_feature_t skein_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_SKEIN, + "org.illumos:skein", "skein", + "Skein hash algorithm.", + ZFEATURE_FLAG_PER_DATASET, skein_deps); + } + + { + static const spa_feature_t edonr_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_EDONR, + "org.illumos:edonr", "edonr", + "Edon-R hash algorithm.", + ZFEATURE_FLAG_PER_DATASET, edonr_deps); + } + { + static const spa_feature_t userobj_accounting_deps[] = { + SPA_FEATURE_EXTENSIBLE_DATASET, + SPA_FEATURE_NONE + }; + zfeature_register(SPA_FEATURE_USEROBJ_ACCOUNTING, + "org.zfsonlinux:userobj_accounting", "userobj_accounting", + "User/Group object accounting.", + ZFEATURE_FLAG_READONLY_COMPAT | ZFEATURE_FLAG_PER_DATASET, + userobj_accounting_deps); + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_acl.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_acl.c @@ -0,0 +1,2818 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fs/fs_subr.h" + +#define ALLOW ACE_ACCESS_ALLOWED_ACE_TYPE +#define DENY ACE_ACCESS_DENIED_ACE_TYPE +#define MAX_ACE_TYPE ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE +#define MIN_ACE_TYPE ALLOW + +#define OWNING_GROUP (ACE_GROUP|ACE_IDENTIFIER_GROUP) +#define EVERYONE_ALLOW_MASK (ACE_READ_ACL|ACE_READ_ATTRIBUTES | \ + ACE_READ_NAMED_ATTRS|ACE_SYNCHRONIZE) +#define EVERYONE_DENY_MASK (ACE_WRITE_ACL|ACE_WRITE_OWNER | \ + ACE_WRITE_ATTRIBUTES|ACE_WRITE_NAMED_ATTRS) +#define OWNER_ALLOW_MASK (ACE_WRITE_ACL | ACE_WRITE_OWNER | \ + ACE_WRITE_ATTRIBUTES|ACE_WRITE_NAMED_ATTRS) + +#define ZFS_CHECKED_MASKS (ACE_READ_ACL|ACE_READ_ATTRIBUTES|ACE_READ_DATA| \ + ACE_READ_NAMED_ATTRS|ACE_WRITE_DATA|ACE_WRITE_ATTRIBUTES| \ + ACE_WRITE_NAMED_ATTRS|ACE_APPEND_DATA|ACE_EXECUTE|ACE_WRITE_OWNER| \ + ACE_WRITE_ACL|ACE_DELETE|ACE_DELETE_CHILD|ACE_SYNCHRONIZE) + +#define WRITE_MASK_DATA (ACE_WRITE_DATA|ACE_APPEND_DATA|ACE_WRITE_NAMED_ATTRS) +#define WRITE_MASK_ATTRS (ACE_WRITE_ACL|ACE_WRITE_OWNER|ACE_WRITE_ATTRIBUTES| \ + ACE_DELETE|ACE_DELETE_CHILD) +#define WRITE_MASK (WRITE_MASK_DATA|WRITE_MASK_ATTRS) + +#define OGE_CLEAR (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ + ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_EXECUTE) + +#define OKAY_MASK_BITS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ + ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_EXECUTE) + +#define ALL_INHERIT (ACE_FILE_INHERIT_ACE|ACE_DIRECTORY_INHERIT_ACE | \ + ACE_NO_PROPAGATE_INHERIT_ACE|ACE_INHERIT_ONLY_ACE|ACE_INHERITED_ACE) + +#define RESTRICTED_CLEAR (ACE_WRITE_ACL|ACE_WRITE_OWNER) + +#define V4_ACL_WIDE_FLAGS (ZFS_ACL_AUTO_INHERIT|ZFS_ACL_DEFAULTED|\ + ZFS_ACL_PROTECTED) + +#define ZFS_ACL_WIDE_FLAGS (V4_ACL_WIDE_FLAGS|ZFS_ACL_TRIVIAL|ZFS_INHERIT_ACE|\ + ZFS_ACL_OBJ_ACE) + +#define ALL_MODE_EXECS (S_IXUSR | S_IXGRP | S_IXOTH) + +static uint16_t +zfs_ace_v0_get_type(void *acep) +{ + return (((zfs_oldace_t *)acep)->z_type); +} + +static uint16_t +zfs_ace_v0_get_flags(void *acep) +{ + return (((zfs_oldace_t *)acep)->z_flags); +} + +static uint32_t +zfs_ace_v0_get_mask(void *acep) +{ + return (((zfs_oldace_t *)acep)->z_access_mask); +} + +static uint64_t +zfs_ace_v0_get_who(void *acep) +{ + return (((zfs_oldace_t *)acep)->z_fuid); +} + +static void +zfs_ace_v0_set_type(void *acep, uint16_t type) +{ + ((zfs_oldace_t *)acep)->z_type = type; +} + +static void +zfs_ace_v0_set_flags(void *acep, uint16_t flags) +{ + ((zfs_oldace_t *)acep)->z_flags = flags; +} + +static void +zfs_ace_v0_set_mask(void *acep, uint32_t mask) +{ + ((zfs_oldace_t *)acep)->z_access_mask = mask; +} + +static void +zfs_ace_v0_set_who(void *acep, uint64_t who) +{ + ((zfs_oldace_t *)acep)->z_fuid = who; +} + +/*ARGSUSED*/ +static size_t +zfs_ace_v0_size(void *acep) +{ + return (sizeof (zfs_oldace_t)); +} + +static size_t +zfs_ace_v0_abstract_size(void) +{ + return (sizeof (zfs_oldace_t)); +} + +static int +zfs_ace_v0_mask_off(void) +{ + return (offsetof(zfs_oldace_t, z_access_mask)); +} + +/*ARGSUSED*/ +static int +zfs_ace_v0_data(void *acep, void **datap) +{ + *datap = NULL; + return (0); +} + +static acl_ops_t zfs_acl_v0_ops = { + .ace_mask_get = zfs_ace_v0_get_mask, + .ace_mask_set = zfs_ace_v0_set_mask, + .ace_flags_get = zfs_ace_v0_get_flags, + .ace_flags_set = zfs_ace_v0_set_flags, + .ace_type_get = zfs_ace_v0_get_type, + .ace_type_set = zfs_ace_v0_set_type, + .ace_who_get = zfs_ace_v0_get_who, + .ace_who_set = zfs_ace_v0_set_who, + .ace_size = zfs_ace_v0_size, + .ace_abstract_size = zfs_ace_v0_abstract_size, + .ace_mask_off = zfs_ace_v0_mask_off, + .ace_data = zfs_ace_v0_data +}; + +static uint16_t +zfs_ace_fuid_get_type(void *acep) +{ + return (((zfs_ace_hdr_t *)acep)->z_type); +} + +static uint16_t +zfs_ace_fuid_get_flags(void *acep) +{ + return (((zfs_ace_hdr_t *)acep)->z_flags); +} + +static uint32_t +zfs_ace_fuid_get_mask(void *acep) +{ + return (((zfs_ace_hdr_t *)acep)->z_access_mask); +} + +static uint64_t +zfs_ace_fuid_get_who(void *args) +{ + uint16_t entry_type; + zfs_ace_t *acep = args; + + entry_type = acep->z_hdr.z_flags & ACE_TYPE_FLAGS; + + if (entry_type == ACE_OWNER || entry_type == OWNING_GROUP || + entry_type == ACE_EVERYONE) + return (-1); + return (((zfs_ace_t *)acep)->z_fuid); +} + +static void +zfs_ace_fuid_set_type(void *acep, uint16_t type) +{ + ((zfs_ace_hdr_t *)acep)->z_type = type; +} + +static void +zfs_ace_fuid_set_flags(void *acep, uint16_t flags) +{ + ((zfs_ace_hdr_t *)acep)->z_flags = flags; +} + +static void +zfs_ace_fuid_set_mask(void *acep, uint32_t mask) +{ + ((zfs_ace_hdr_t *)acep)->z_access_mask = mask; +} + +static void +zfs_ace_fuid_set_who(void *arg, uint64_t who) +{ + zfs_ace_t *acep = arg; + + uint16_t entry_type = acep->z_hdr.z_flags & ACE_TYPE_FLAGS; + + if (entry_type == ACE_OWNER || entry_type == OWNING_GROUP || + entry_type == ACE_EVERYONE) + return; + acep->z_fuid = who; +} + +static size_t +zfs_ace_fuid_size(void *acep) +{ + zfs_ace_hdr_t *zacep = acep; + uint16_t entry_type; + + switch (zacep->z_type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + return (sizeof (zfs_object_ace_t)); + case ALLOW: + case DENY: + entry_type = + (((zfs_ace_hdr_t *)acep)->z_flags & ACE_TYPE_FLAGS); + if (entry_type == ACE_OWNER || + entry_type == OWNING_GROUP || + entry_type == ACE_EVERYONE) + return (sizeof (zfs_ace_hdr_t)); + /*FALLTHROUGH*/ + default: + return (sizeof (zfs_ace_t)); + } +} + +static size_t +zfs_ace_fuid_abstract_size(void) +{ + return (sizeof (zfs_ace_hdr_t)); +} + +static int +zfs_ace_fuid_mask_off(void) +{ + return (offsetof(zfs_ace_hdr_t, z_access_mask)); +} + +static int +zfs_ace_fuid_data(void *acep, void **datap) +{ + zfs_ace_t *zacep = acep; + zfs_object_ace_t *zobjp; + + switch (zacep->z_hdr.z_type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + zobjp = acep; + *datap = (caddr_t)zobjp + sizeof (zfs_ace_t); + return (sizeof (zfs_object_ace_t) - sizeof (zfs_ace_t)); + default: + *datap = NULL; + return (0); + } +} + +static acl_ops_t zfs_acl_fuid_ops = { + .ace_mask_get = zfs_ace_fuid_get_mask, + .ace_mask_set = zfs_ace_fuid_set_mask, + .ace_flags_get = zfs_ace_fuid_get_flags, + .ace_flags_set = zfs_ace_fuid_set_flags, + .ace_type_get = zfs_ace_fuid_get_type, + .ace_type_set = zfs_ace_fuid_set_type, + .ace_who_get = zfs_ace_fuid_get_who, + .ace_who_set = zfs_ace_fuid_set_who, + .ace_size = zfs_ace_fuid_size, + .ace_abstract_size = zfs_ace_fuid_abstract_size, + .ace_mask_off = zfs_ace_fuid_mask_off, + .ace_data = zfs_ace_fuid_data +}; + +/* + * The following three functions are provided for compatibility with + * older ZPL version in order to determine if the file use to have + * an external ACL and what version of ACL previously existed on the + * file. Would really be nice to not need this, sigh. + */ +uint64_t +zfs_external_acl(znode_t *zp) +{ + zfs_acl_phys_t acl_phys; + int error; + + if (zp->z_is_sa) + return (0); + + /* + * Need to deal with a potential + * race where zfs_sa_upgrade could cause + * z_isa_sa to change. + * + * If the lookup fails then the state of z_is_sa should have + * changed. + */ + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(ZTOZSB(zp)), + &acl_phys, sizeof (acl_phys))) == 0) + return (acl_phys.z_acl_extern_obj); + else { + /* + * after upgrade the SA_ZPL_ZNODE_ACL should have been + * removed + */ + VERIFY(zp->z_is_sa && error == ENOENT); + return (0); + } +} + +/* + * Determine size of ACL in bytes + * + * This is more complicated than it should be since we have to deal + * with old external ACLs. + */ +static int +zfs_acl_znode_info(znode_t *zp, int *aclsize, int *aclcount, + zfs_acl_phys_t *aclphys) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + uint64_t acl_count; + int size; + int error; + + ASSERT(MUTEX_HELD(&zp->z_acl_lock)); + if (zp->z_is_sa) { + if ((error = sa_size(zp->z_sa_hdl, SA_ZPL_DACL_ACES(zfsvfs), + &size)) != 0) + return (error); + *aclsize = size; + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_DACL_COUNT(zfsvfs), + &acl_count, sizeof (acl_count))) != 0) + return (error); + *aclcount = acl_count; + } else { + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(zfsvfs), + aclphys, sizeof (*aclphys))) != 0) + return (error); + + if (aclphys->z_acl_version == ZFS_ACL_VERSION_INITIAL) { + *aclsize = ZFS_ACL_SIZE(aclphys->z_acl_size); + *aclcount = aclphys->z_acl_size; + } else { + *aclsize = aclphys->z_acl_size; + *aclcount = aclphys->z_acl_count; + } + } + return (0); +} + +int +zfs_znode_acl_version(znode_t *zp) +{ + zfs_acl_phys_t acl_phys; + + if (zp->z_is_sa) + return (ZFS_ACL_VERSION_FUID); + else { + int error; + + /* + * Need to deal with a potential + * race where zfs_sa_upgrade could cause + * z_isa_sa to change. + * + * If the lookup fails then the state of z_is_sa should have + * changed. + */ + if ((error = sa_lookup(zp->z_sa_hdl, + SA_ZPL_ZNODE_ACL(ZTOZSB(zp)), + &acl_phys, sizeof (acl_phys))) == 0) + return (acl_phys.z_acl_version); + else { + /* + * After upgrade SA_ZPL_ZNODE_ACL should have + * been removed. + */ + VERIFY(zp->z_is_sa && error == ENOENT); + return (ZFS_ACL_VERSION_FUID); + } + } +} + +static int +zfs_acl_version(int version) +{ + if (version < ZPL_VERSION_FUID) + return (ZFS_ACL_VERSION_INITIAL); + else + return (ZFS_ACL_VERSION_FUID); +} + +static int +zfs_acl_version_zp(znode_t *zp) +{ + return (zfs_acl_version(ZTOZSB(zp)->z_version)); +} + +zfs_acl_t * +zfs_acl_alloc(int vers) +{ + zfs_acl_t *aclp; + + aclp = kmem_zalloc(sizeof (zfs_acl_t), KM_SLEEP); + list_create(&aclp->z_acl, sizeof (zfs_acl_node_t), + offsetof(zfs_acl_node_t, z_next)); + aclp->z_version = vers; + if (vers == ZFS_ACL_VERSION_FUID) + aclp->z_ops = &zfs_acl_fuid_ops; + else + aclp->z_ops = &zfs_acl_v0_ops; + return (aclp); +} + +zfs_acl_node_t * +zfs_acl_node_alloc(size_t bytes) +{ + zfs_acl_node_t *aclnode; + + aclnode = kmem_zalloc(sizeof (zfs_acl_node_t), KM_SLEEP); + if (bytes) { + aclnode->z_acldata = kmem_alloc(bytes, KM_SLEEP); + aclnode->z_allocdata = aclnode->z_acldata; + aclnode->z_allocsize = bytes; + aclnode->z_size = bytes; + } + + return (aclnode); +} + +static void +zfs_acl_node_free(zfs_acl_node_t *aclnode) +{ + if (aclnode->z_allocsize) + kmem_free(aclnode->z_allocdata, aclnode->z_allocsize); + kmem_free(aclnode, sizeof (zfs_acl_node_t)); +} + +static void +zfs_acl_release_nodes(zfs_acl_t *aclp) +{ + zfs_acl_node_t *aclnode; + + while ((aclnode = list_head(&aclp->z_acl))) { + list_remove(&aclp->z_acl, aclnode); + zfs_acl_node_free(aclnode); + } + aclp->z_acl_count = 0; + aclp->z_acl_bytes = 0; +} + +void +zfs_acl_free(zfs_acl_t *aclp) +{ + zfs_acl_release_nodes(aclp); + list_destroy(&aclp->z_acl); + kmem_free(aclp, sizeof (zfs_acl_t)); +} + +static boolean_t +zfs_acl_valid_ace_type(uint_t type, uint_t flags) +{ + uint16_t entry_type; + + switch (type) { + case ALLOW: + case DENY: + case ACE_SYSTEM_AUDIT_ACE_TYPE: + case ACE_SYSTEM_ALARM_ACE_TYPE: + entry_type = flags & ACE_TYPE_FLAGS; + return (entry_type == ACE_OWNER || + entry_type == OWNING_GROUP || + entry_type == ACE_EVERYONE || entry_type == 0 || + entry_type == ACE_IDENTIFIER_GROUP); + default: + if (type >= MIN_ACE_TYPE && type <= MAX_ACE_TYPE) + return (B_TRUE); + } + return (B_FALSE); +} + +static boolean_t +zfs_ace_valid(umode_t obj_mode, zfs_acl_t *aclp, uint16_t type, uint16_t iflags) +{ + /* + * first check type of entry + */ + + if (!zfs_acl_valid_ace_type(type, iflags)) + return (B_FALSE); + + switch (type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + if (aclp->z_version < ZFS_ACL_VERSION_FUID) + return (B_FALSE); + aclp->z_hints |= ZFS_ACL_OBJ_ACE; + } + + /* + * next check inheritance level flags + */ + + if (S_ISDIR(obj_mode) && + (iflags & (ACE_FILE_INHERIT_ACE|ACE_DIRECTORY_INHERIT_ACE))) + aclp->z_hints |= ZFS_INHERIT_ACE; + + if (iflags & (ACE_INHERIT_ONLY_ACE|ACE_NO_PROPAGATE_INHERIT_ACE)) { + if ((iflags & (ACE_FILE_INHERIT_ACE| + ACE_DIRECTORY_INHERIT_ACE)) == 0) { + return (B_FALSE); + } + } + + return (B_TRUE); +} + +static void * +zfs_acl_next_ace(zfs_acl_t *aclp, void *start, uint64_t *who, + uint32_t *access_mask, uint16_t *iflags, uint16_t *type) +{ + zfs_acl_node_t *aclnode; + + ASSERT(aclp); + + if (start == NULL) { + aclnode = list_head(&aclp->z_acl); + if (aclnode == NULL) + return (NULL); + + aclp->z_next_ace = aclnode->z_acldata; + aclp->z_curr_node = aclnode; + aclnode->z_ace_idx = 0; + } + + aclnode = aclp->z_curr_node; + + if (aclnode == NULL) + return (NULL); + + if (aclnode->z_ace_idx >= aclnode->z_ace_count) { + aclnode = list_next(&aclp->z_acl, aclnode); + if (aclnode == NULL) + return (NULL); + else { + aclp->z_curr_node = aclnode; + aclnode->z_ace_idx = 0; + aclp->z_next_ace = aclnode->z_acldata; + } + } + + if (aclnode->z_ace_idx < aclnode->z_ace_count) { + void *acep = aclp->z_next_ace; + size_t ace_size; + + /* + * Make sure we don't overstep our bounds + */ + ace_size = aclp->z_ops->ace_size(acep); + + if (((caddr_t)acep + ace_size) > + ((caddr_t)aclnode->z_acldata + aclnode->z_size)) { + return (NULL); + } + + *iflags = aclp->z_ops->ace_flags_get(acep); + *type = aclp->z_ops->ace_type_get(acep); + *access_mask = aclp->z_ops->ace_mask_get(acep); + *who = aclp->z_ops->ace_who_get(acep); + aclp->z_next_ace = (caddr_t)aclp->z_next_ace + ace_size; + aclnode->z_ace_idx++; + + return ((void *)acep); + } + return (NULL); +} + +/*ARGSUSED*/ +static uint64_t +zfs_ace_walk(void *datap, uint64_t cookie, int aclcnt, + uint16_t *flags, uint16_t *type, uint32_t *mask) +{ + zfs_acl_t *aclp = datap; + zfs_ace_hdr_t *acep = (zfs_ace_hdr_t *)(uintptr_t)cookie; + uint64_t who; + + acep = zfs_acl_next_ace(aclp, acep, &who, mask, + flags, type); + return ((uint64_t)(uintptr_t)acep); +} + +/* + * Copy ACE to internal ZFS format. + * While processing the ACL each ACE will be validated for correctness. + * ACE FUIDs will be created later. + */ +int +zfs_copy_ace_2_fuid(zfsvfs_t *zfsvfs, umode_t obj_mode, zfs_acl_t *aclp, + void *datap, zfs_ace_t *z_acl, uint64_t aclcnt, size_t *size, + zfs_fuid_info_t **fuidp, cred_t *cr) +{ + int i; + uint16_t entry_type; + zfs_ace_t *aceptr = z_acl; + ace_t *acep = datap; + zfs_object_ace_t *zobjacep; + ace_object_t *aceobjp; + + for (i = 0; i != aclcnt; i++) { + aceptr->z_hdr.z_access_mask = acep->a_access_mask; + aceptr->z_hdr.z_flags = acep->a_flags; + aceptr->z_hdr.z_type = acep->a_type; + entry_type = aceptr->z_hdr.z_flags & ACE_TYPE_FLAGS; + if (entry_type != ACE_OWNER && entry_type != OWNING_GROUP && + entry_type != ACE_EVERYONE) { + aceptr->z_fuid = zfs_fuid_create(zfsvfs, acep->a_who, + cr, (entry_type == 0) ? + ZFS_ACE_USER : ZFS_ACE_GROUP, fuidp); + } + + /* + * Make sure ACE is valid + */ + if (zfs_ace_valid(obj_mode, aclp, aceptr->z_hdr.z_type, + aceptr->z_hdr.z_flags) != B_TRUE) + return (SET_ERROR(EINVAL)); + + switch (acep->a_type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + zobjacep = (zfs_object_ace_t *)aceptr; + aceobjp = (ace_object_t *)acep; + + bcopy(aceobjp->a_obj_type, zobjacep->z_object_type, + sizeof (aceobjp->a_obj_type)); + bcopy(aceobjp->a_inherit_obj_type, + zobjacep->z_inherit_type, + sizeof (aceobjp->a_inherit_obj_type)); + acep = (ace_t *)((caddr_t)acep + sizeof (ace_object_t)); + break; + default: + acep = (ace_t *)((caddr_t)acep + sizeof (ace_t)); + } + + aceptr = (zfs_ace_t *)((caddr_t)aceptr + + aclp->z_ops->ace_size(aceptr)); + } + + *size = (caddr_t)aceptr - (caddr_t)z_acl; + + return (0); +} + +/* + * Copy ZFS ACEs to fixed size ace_t layout + */ +static void +zfs_copy_fuid_2_ace(zfsvfs_t *zfsvfs, zfs_acl_t *aclp, cred_t *cr, + void *datap, int filter) +{ + uint64_t who; + uint32_t access_mask; + uint16_t iflags, type; + zfs_ace_hdr_t *zacep = NULL; + ace_t *acep = datap; + ace_object_t *objacep; + zfs_object_ace_t *zobjacep; + size_t ace_size; + uint16_t entry_type; + + while ((zacep = zfs_acl_next_ace(aclp, zacep, + &who, &access_mask, &iflags, &type))) { + + switch (type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + if (filter) { + continue; + } + zobjacep = (zfs_object_ace_t *)zacep; + objacep = (ace_object_t *)acep; + bcopy(zobjacep->z_object_type, + objacep->a_obj_type, + sizeof (zobjacep->z_object_type)); + bcopy(zobjacep->z_inherit_type, + objacep->a_inherit_obj_type, + sizeof (zobjacep->z_inherit_type)); + ace_size = sizeof (ace_object_t); + break; + default: + ace_size = sizeof (ace_t); + break; + } + + entry_type = (iflags & ACE_TYPE_FLAGS); + if ((entry_type != ACE_OWNER && + entry_type != OWNING_GROUP && + entry_type != ACE_EVERYONE)) { + acep->a_who = zfs_fuid_map_id(zfsvfs, who, + cr, (entry_type & ACE_IDENTIFIER_GROUP) ? + ZFS_ACE_GROUP : ZFS_ACE_USER); + } else { + acep->a_who = (uid_t)(int64_t)who; + } + acep->a_access_mask = access_mask; + acep->a_flags = iflags; + acep->a_type = type; + acep = (ace_t *)((caddr_t)acep + ace_size); + } +} + +static int +zfs_copy_ace_2_oldace(umode_t obj_mode, zfs_acl_t *aclp, ace_t *acep, + zfs_oldace_t *z_acl, int aclcnt, size_t *size) +{ + int i; + zfs_oldace_t *aceptr = z_acl; + + for (i = 0; i != aclcnt; i++, aceptr++) { + aceptr->z_access_mask = acep[i].a_access_mask; + aceptr->z_type = acep[i].a_type; + aceptr->z_flags = acep[i].a_flags; + aceptr->z_fuid = acep[i].a_who; + /* + * Make sure ACE is valid + */ + if (zfs_ace_valid(obj_mode, aclp, aceptr->z_type, + aceptr->z_flags) != B_TRUE) + return (SET_ERROR(EINVAL)); + } + *size = (caddr_t)aceptr - (caddr_t)z_acl; + return (0); +} + +/* + * convert old ACL format to new + */ +void +zfs_acl_xform(znode_t *zp, zfs_acl_t *aclp, cred_t *cr) +{ + zfs_oldace_t *oldaclp; + int i; + uint16_t type, iflags; + uint32_t access_mask; + uint64_t who; + void *cookie = NULL; + zfs_acl_node_t *newaclnode; + + ASSERT(aclp->z_version == ZFS_ACL_VERSION_INITIAL); + /* + * First create the ACE in a contiguous piece of memory + * for zfs_copy_ace_2_fuid(). + * + * We only convert an ACL once, so this won't happen + * everytime. + */ + oldaclp = kmem_alloc(sizeof (zfs_oldace_t) * aclp->z_acl_count, + KM_SLEEP); + i = 0; + while ((cookie = zfs_acl_next_ace(aclp, cookie, &who, + &access_mask, &iflags, &type))) { + oldaclp[i].z_flags = iflags; + oldaclp[i].z_type = type; + oldaclp[i].z_fuid = who; + oldaclp[i++].z_access_mask = access_mask; + } + + newaclnode = zfs_acl_node_alloc(aclp->z_acl_count * + sizeof (zfs_object_ace_t)); + aclp->z_ops = &zfs_acl_fuid_ops; + VERIFY(zfs_copy_ace_2_fuid(ZTOZSB(zp), ZTOI(zp)->i_mode, + aclp, oldaclp, newaclnode->z_acldata, aclp->z_acl_count, + &newaclnode->z_size, NULL, cr) == 0); + newaclnode->z_ace_count = aclp->z_acl_count; + aclp->z_version = ZFS_ACL_VERSION; + kmem_free(oldaclp, aclp->z_acl_count * sizeof (zfs_oldace_t)); + + /* + * Release all previous ACL nodes + */ + + zfs_acl_release_nodes(aclp); + + list_insert_head(&aclp->z_acl, newaclnode); + + aclp->z_acl_bytes = newaclnode->z_size; + aclp->z_acl_count = newaclnode->z_ace_count; + +} + +/* + * Convert unix access mask to v4 access mask + */ +static uint32_t +zfs_unix_to_v4(uint32_t access_mask) +{ + uint32_t new_mask = 0; + + if (access_mask & S_IXOTH) + new_mask |= ACE_EXECUTE; + if (access_mask & S_IWOTH) + new_mask |= ACE_WRITE_DATA; + if (access_mask & S_IROTH) + new_mask |= ACE_READ_DATA; + return (new_mask); +} + +static void +zfs_set_ace(zfs_acl_t *aclp, void *acep, uint32_t access_mask, + uint16_t access_type, uint64_t fuid, uint16_t entry_type) +{ + uint16_t type = entry_type & ACE_TYPE_FLAGS; + + aclp->z_ops->ace_mask_set(acep, access_mask); + aclp->z_ops->ace_type_set(acep, access_type); + aclp->z_ops->ace_flags_set(acep, entry_type); + if ((type != ACE_OWNER && type != OWNING_GROUP && + type != ACE_EVERYONE)) + aclp->z_ops->ace_who_set(acep, fuid); +} + +/* + * Determine mode of file based on ACL. + * Also, create FUIDs for any User/Group ACEs + */ +uint64_t +zfs_mode_compute(uint64_t fmode, zfs_acl_t *aclp, + uint64_t *pflags, uint64_t fuid, uint64_t fgid) +{ + int entry_type; + mode_t mode; + mode_t seen = 0; + zfs_ace_hdr_t *acep = NULL; + uint64_t who; + uint16_t iflags, type; + uint32_t access_mask; + boolean_t an_exec_denied = B_FALSE; + + mode = (fmode & (S_IFMT | S_ISUID | S_ISGID | S_ISVTX)); + + while ((acep = zfs_acl_next_ace(aclp, acep, &who, + &access_mask, &iflags, &type))) { + + if (!zfs_acl_valid_ace_type(type, iflags)) + continue; + + entry_type = (iflags & ACE_TYPE_FLAGS); + + /* + * Skip over owner@, group@ or everyone@ inherit only ACEs + */ + if ((iflags & ACE_INHERIT_ONLY_ACE) && + (entry_type == ACE_OWNER || entry_type == ACE_EVERYONE || + entry_type == OWNING_GROUP)) + continue; + + if (entry_type == ACE_OWNER || (entry_type == 0 && + who == fuid)) { + if ((access_mask & ACE_READ_DATA) && + (!(seen & S_IRUSR))) { + seen |= S_IRUSR; + if (type == ALLOW) { + mode |= S_IRUSR; + } + } + if ((access_mask & ACE_WRITE_DATA) && + (!(seen & S_IWUSR))) { + seen |= S_IWUSR; + if (type == ALLOW) { + mode |= S_IWUSR; + } + } + if ((access_mask & ACE_EXECUTE) && + (!(seen & S_IXUSR))) { + seen |= S_IXUSR; + if (type == ALLOW) { + mode |= S_IXUSR; + } + } + } else if (entry_type == OWNING_GROUP || + (entry_type == ACE_IDENTIFIER_GROUP && who == fgid)) { + if ((access_mask & ACE_READ_DATA) && + (!(seen & S_IRGRP))) { + seen |= S_IRGRP; + if (type == ALLOW) { + mode |= S_IRGRP; + } + } + if ((access_mask & ACE_WRITE_DATA) && + (!(seen & S_IWGRP))) { + seen |= S_IWGRP; + if (type == ALLOW) { + mode |= S_IWGRP; + } + } + if ((access_mask & ACE_EXECUTE) && + (!(seen & S_IXGRP))) { + seen |= S_IXGRP; + if (type == ALLOW) { + mode |= S_IXGRP; + } + } + } else if (entry_type == ACE_EVERYONE) { + if ((access_mask & ACE_READ_DATA)) { + if (!(seen & S_IRUSR)) { + seen |= S_IRUSR; + if (type == ALLOW) { + mode |= S_IRUSR; + } + } + if (!(seen & S_IRGRP)) { + seen |= S_IRGRP; + if (type == ALLOW) { + mode |= S_IRGRP; + } + } + if (!(seen & S_IROTH)) { + seen |= S_IROTH; + if (type == ALLOW) { + mode |= S_IROTH; + } + } + } + if ((access_mask & ACE_WRITE_DATA)) { + if (!(seen & S_IWUSR)) { + seen |= S_IWUSR; + if (type == ALLOW) { + mode |= S_IWUSR; + } + } + if (!(seen & S_IWGRP)) { + seen |= S_IWGRP; + if (type == ALLOW) { + mode |= S_IWGRP; + } + } + if (!(seen & S_IWOTH)) { + seen |= S_IWOTH; + if (type == ALLOW) { + mode |= S_IWOTH; + } + } + } + if ((access_mask & ACE_EXECUTE)) { + if (!(seen & S_IXUSR)) { + seen |= S_IXUSR; + if (type == ALLOW) { + mode |= S_IXUSR; + } + } + if (!(seen & S_IXGRP)) { + seen |= S_IXGRP; + if (type == ALLOW) { + mode |= S_IXGRP; + } + } + if (!(seen & S_IXOTH)) { + seen |= S_IXOTH; + if (type == ALLOW) { + mode |= S_IXOTH; + } + } + } + } else { + /* + * Only care if this IDENTIFIER_GROUP or + * USER ACE denies execute access to someone, + * mode is not affected + */ + if ((access_mask & ACE_EXECUTE) && type == DENY) + an_exec_denied = B_TRUE; + } + } + + /* + * Failure to allow is effectively a deny, so execute permission + * is denied if it was never mentioned or if we explicitly + * weren't allowed it. + */ + if (!an_exec_denied && + ((seen & ALL_MODE_EXECS) != ALL_MODE_EXECS || + (mode & ALL_MODE_EXECS) != ALL_MODE_EXECS)) + an_exec_denied = B_TRUE; + + if (an_exec_denied) + *pflags &= ~ZFS_NO_EXECS_DENIED; + else + *pflags |= ZFS_NO_EXECS_DENIED; + + return (mode); +} + +/* + * Read an external acl object. If the intent is to modify, always + * create a new acl and leave any cached acl in place. + */ +static int +zfs_acl_node_read(znode_t *zp, boolean_t have_lock, zfs_acl_t **aclpp, + boolean_t will_modify) +{ + zfs_acl_t *aclp; + int aclsize = 0; + int acl_count = 0; + zfs_acl_node_t *aclnode; + zfs_acl_phys_t znode_acl; + int version; + int error; + boolean_t drop_lock = B_FALSE; + + ASSERT(MUTEX_HELD(&zp->z_acl_lock)); + + if (zp->z_acl_cached && !will_modify) { + *aclpp = zp->z_acl_cached; + return (0); + } + + /* + * close race where znode could be upgrade while trying to + * read the znode attributes. + * + * But this could only happen if the file isn't already an SA + * znode + */ + if (!zp->z_is_sa && !have_lock) { + mutex_enter(&zp->z_lock); + drop_lock = B_TRUE; + } + version = zfs_znode_acl_version(zp); + + if ((error = zfs_acl_znode_info(zp, &aclsize, + &acl_count, &znode_acl)) != 0) { + goto done; + } + + aclp = zfs_acl_alloc(version); + + aclp->z_acl_count = acl_count; + aclp->z_acl_bytes = aclsize; + + aclnode = zfs_acl_node_alloc(aclsize); + aclnode->z_ace_count = aclp->z_acl_count; + aclnode->z_size = aclsize; + + if (!zp->z_is_sa) { + if (znode_acl.z_acl_extern_obj) { + error = dmu_read(ZTOZSB(zp)->z_os, + znode_acl.z_acl_extern_obj, 0, aclnode->z_size, + aclnode->z_acldata, DMU_READ_PREFETCH); + } else { + bcopy(znode_acl.z_ace_data, aclnode->z_acldata, + aclnode->z_size); + } + } else { + error = sa_lookup(zp->z_sa_hdl, SA_ZPL_DACL_ACES(ZTOZSB(zp)), + aclnode->z_acldata, aclnode->z_size); + } + + if (error != 0) { + zfs_acl_free(aclp); + zfs_acl_node_free(aclnode); + /* convert checksum errors into IO errors */ + if (error == ECKSUM) + error = SET_ERROR(EIO); + goto done; + } + + list_insert_head(&aclp->z_acl, aclnode); + + *aclpp = aclp; + if (!will_modify) + zp->z_acl_cached = aclp; +done: + if (drop_lock) + mutex_exit(&zp->z_lock); + return (error); +} + +/*ARGSUSED*/ +void +zfs_acl_data_locator(void **dataptr, uint32_t *length, uint32_t buflen, + boolean_t start, void *userdata) +{ + zfs_acl_locator_cb_t *cb = (zfs_acl_locator_cb_t *)userdata; + + if (start) { + cb->cb_acl_node = list_head(&cb->cb_aclp->z_acl); + } else { + cb->cb_acl_node = list_next(&cb->cb_aclp->z_acl, + cb->cb_acl_node); + } + *dataptr = cb->cb_acl_node->z_acldata; + *length = cb->cb_acl_node->z_size; +} + +int +zfs_acl_chown_setattr(znode_t *zp) +{ + int error; + zfs_acl_t *aclp; + + if (ZTOZSB(zp)->z_acl_type == ZFS_ACLTYPE_POSIXACL) + return (0); + + ASSERT(MUTEX_HELD(&zp->z_lock)); + ASSERT(MUTEX_HELD(&zp->z_acl_lock)); + + error = zfs_acl_node_read(zp, B_TRUE, &aclp, B_FALSE); + if (error == 0 && aclp->z_acl_count > 0) + zp->z_mode = ZTOI(zp)->i_mode = + zfs_mode_compute(zp->z_mode, aclp, + &zp->z_pflags, KUID_TO_SUID(ZTOI(zp)->i_uid), + KGID_TO_SGID(ZTOI(zp)->i_gid)); + + /* + * Some ZFS implementations (ZEVO) create neither a ZNODE_ACL + * nor a DACL_ACES SA in which case ENOENT is returned from + * zfs_acl_node_read() when the SA can't be located. + * Allow chown/chgrp to succeed in these cases rather than + * returning an error that makes no sense in the context of + * the caller. + */ + if (error == ENOENT) + return (0); + + return (error); +} + +static void +acl_trivial_access_masks(mode_t mode, uint32_t *allow0, uint32_t *deny1, + uint32_t *deny2, uint32_t *owner, uint32_t *group, uint32_t *everyone) +{ + *deny1 = *deny2 = *allow0 = *group = 0; + + if (!(mode & S_IRUSR) && (mode & (S_IRGRP|S_IROTH))) + *deny1 |= ACE_READ_DATA; + if (!(mode & S_IWUSR) && (mode & (S_IWGRP|S_IWOTH))) + *deny1 |= ACE_WRITE_DATA; + if (!(mode & S_IXUSR) && (mode & (S_IXGRP|S_IXOTH))) + *deny1 |= ACE_EXECUTE; + + if (!(mode & S_IRGRP) && (mode & S_IROTH)) + *deny2 = ACE_READ_DATA; + if (!(mode & S_IWGRP) && (mode & S_IWOTH)) + *deny2 |= ACE_WRITE_DATA; + if (!(mode & S_IXGRP) && (mode & S_IXOTH)) + *deny2 |= ACE_EXECUTE; + + if ((mode & S_IRUSR) && (!(mode & S_IRGRP) && (mode & S_IROTH))) + *allow0 |= ACE_READ_DATA; + if ((mode & S_IWUSR) && (!(mode & S_IWGRP) && (mode & S_IWOTH))) + *allow0 |= ACE_WRITE_DATA; + if ((mode & S_IXUSR) && (!(mode & S_IXGRP) && (mode & S_IXOTH))) + *allow0 |= ACE_EXECUTE; + + *owner = ACE_WRITE_ATTRIBUTES|ACE_WRITE_OWNER|ACE_WRITE_ACL| + ACE_WRITE_NAMED_ATTRS|ACE_READ_ACL|ACE_READ_ATTRIBUTES| + ACE_READ_NAMED_ATTRS|ACE_SYNCHRONIZE; + if (mode & S_IRUSR) + *owner |= ACE_READ_DATA; + if (mode & S_IWUSR) + *owner |= ACE_WRITE_DATA|ACE_APPEND_DATA; + if (mode & S_IXUSR) + *owner |= ACE_EXECUTE; + + *group = ACE_READ_ACL|ACE_READ_ATTRIBUTES| ACE_READ_NAMED_ATTRS| + ACE_SYNCHRONIZE; + if (mode & S_IRGRP) + *group |= ACE_READ_DATA; + if (mode & S_IWGRP) + *group |= ACE_WRITE_DATA|ACE_APPEND_DATA; + if (mode & S_IXGRP) + *group |= ACE_EXECUTE; + + *everyone = ACE_READ_ACL|ACE_READ_ATTRIBUTES| ACE_READ_NAMED_ATTRS| + ACE_SYNCHRONIZE; + if (mode & S_IROTH) + *everyone |= ACE_READ_DATA; + if (mode & S_IWOTH) + *everyone |= ACE_WRITE_DATA|ACE_APPEND_DATA; + if (mode & S_IXOTH) + *everyone |= ACE_EXECUTE; +} + +/* + * ace_trivial: + * determine whether an ace_t acl is trivial + * + * Trivialness implies that the acl is composed of only + * owner, group, everyone entries. ACL can't + * have read_acl denied, and write_owner/write_acl/write_attributes + * can only be owner@ entry. + */ +static int +ace_trivial_common(void *acep, int aclcnt, + uint64_t (*walk)(void *, uint64_t, int aclcnt, + uint16_t *, uint16_t *, uint32_t *)) +{ + uint16_t flags; + uint32_t mask; + uint16_t type; + uint64_t cookie = 0; + + while ((cookie = walk(acep, cookie, aclcnt, &flags, &type, &mask))) { + switch (flags & ACE_TYPE_FLAGS) { + case ACE_OWNER: + case ACE_GROUP|ACE_IDENTIFIER_GROUP: + case ACE_EVERYONE: + break; + default: + return (1); + } + + if (flags & (ACE_FILE_INHERIT_ACE| + ACE_DIRECTORY_INHERIT_ACE|ACE_NO_PROPAGATE_INHERIT_ACE| + ACE_INHERIT_ONLY_ACE)) + return (1); + + /* + * Special check for some special bits + * + * Don't allow anybody to deny reading basic + * attributes or a files ACL. + */ + if ((mask & (ACE_READ_ACL|ACE_READ_ATTRIBUTES)) && + (type == ACE_ACCESS_DENIED_ACE_TYPE)) + return (1); + + /* + * Delete permissions are never set by default + */ + if (mask & (ACE_DELETE|ACE_DELETE_CHILD)) + return (1); + /* + * only allow owner@ to have + * write_acl/write_owner/write_attributes/write_xattr/ + */ + if (type == ACE_ACCESS_ALLOWED_ACE_TYPE && + (!(flags & ACE_OWNER) && (mask & + (ACE_WRITE_OWNER|ACE_WRITE_ACL| ACE_WRITE_ATTRIBUTES| + ACE_WRITE_NAMED_ATTRS)))) + return (1); + + } + + return (0); +} + +/* + * common code for setting ACLs. + * + * This function is called from zfs_mode_update, zfs_perm_init, and zfs_setacl. + * zfs_setacl passes a non-NULL inherit pointer (ihp) to indicate that it's + * already checked the acl and knows whether to inherit. + */ +int +zfs_aclset_common(znode_t *zp, zfs_acl_t *aclp, cred_t *cr, dmu_tx_t *tx) +{ + int error; + zfsvfs_t *zfsvfs = ZTOZSB(zp); + dmu_object_type_t otype; + zfs_acl_locator_cb_t locate = { 0 }; + uint64_t mode; + sa_bulk_attr_t bulk[5]; + uint64_t ctime[2]; + int count = 0; + + mode = zp->z_mode; + + mode = zfs_mode_compute(mode, aclp, &zp->z_pflags, + KUID_TO_SUID(ZTOI(zp)->i_uid), KGID_TO_SGID(ZTOI(zp)->i_gid)); + + zp->z_mode = ZTOI(zp)->i_mode = mode; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), NULL, + &mode, sizeof (mode)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, sizeof (zp->z_pflags)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, + &ctime, sizeof (ctime)); + + if (zp->z_acl_cached) { + zfs_acl_free(zp->z_acl_cached); + zp->z_acl_cached = NULL; + } + + /* + * Upgrade needed? + */ + if (!zfsvfs->z_use_fuids) { + otype = DMU_OT_OLDACL; + } else { + if ((aclp->z_version == ZFS_ACL_VERSION_INITIAL) && + (zfsvfs->z_version >= ZPL_VERSION_FUID)) + zfs_acl_xform(zp, aclp, cr); + ASSERT(aclp->z_version >= ZFS_ACL_VERSION_FUID); + otype = DMU_OT_ACL; + } + + /* + * Arrgh, we have to handle old on disk format + * as well as newer (preferred) SA format. + */ + + if (zp->z_is_sa) { /* the easy case, just update the ACL attribute */ + locate.cb_aclp = aclp; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_DACL_ACES(zfsvfs), + zfs_acl_data_locator, &locate, aclp->z_acl_bytes); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_DACL_COUNT(zfsvfs), + NULL, &aclp->z_acl_count, sizeof (uint64_t)); + } else { /* Painful legacy way */ + zfs_acl_node_t *aclnode; + uint64_t off = 0; + zfs_acl_phys_t acl_phys; + uint64_t aoid; + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(zfsvfs), + &acl_phys, sizeof (acl_phys))) != 0) + return (error); + + aoid = acl_phys.z_acl_extern_obj; + + if (aclp->z_acl_bytes > ZFS_ACE_SPACE) { + /* + * If ACL was previously external and we are now + * converting to new ACL format then release old + * ACL object and create a new one. + */ + if (aoid && + aclp->z_version != acl_phys.z_acl_version) { + error = dmu_object_free(zfsvfs->z_os, aoid, tx); + if (error) + return (error); + aoid = 0; + } + if (aoid == 0) { + aoid = dmu_object_alloc(zfsvfs->z_os, + otype, aclp->z_acl_bytes, + otype == DMU_OT_ACL ? + DMU_OT_SYSACL : DMU_OT_NONE, + otype == DMU_OT_ACL ? + DN_OLD_MAX_BONUSLEN : 0, tx); + } else { + (void) dmu_object_set_blocksize(zfsvfs->z_os, + aoid, aclp->z_acl_bytes, 0, tx); + } + acl_phys.z_acl_extern_obj = aoid; + for (aclnode = list_head(&aclp->z_acl); aclnode; + aclnode = list_next(&aclp->z_acl, aclnode)) { + if (aclnode->z_ace_count == 0) + continue; + dmu_write(zfsvfs->z_os, aoid, off, + aclnode->z_size, aclnode->z_acldata, tx); + off += aclnode->z_size; + } + } else { + void *start = acl_phys.z_ace_data; + /* + * Migrating back embedded? + */ + if (acl_phys.z_acl_extern_obj) { + error = dmu_object_free(zfsvfs->z_os, + acl_phys.z_acl_extern_obj, tx); + if (error) + return (error); + acl_phys.z_acl_extern_obj = 0; + } + + for (aclnode = list_head(&aclp->z_acl); aclnode; + aclnode = list_next(&aclp->z_acl, aclnode)) { + if (aclnode->z_ace_count == 0) + continue; + bcopy(aclnode->z_acldata, start, + aclnode->z_size); + start = (caddr_t)start + aclnode->z_size; + } + } + /* + * If Old version then swap count/bytes to match old + * layout of znode_acl_phys_t. + */ + if (aclp->z_version == ZFS_ACL_VERSION_INITIAL) { + acl_phys.z_acl_size = aclp->z_acl_count; + acl_phys.z_acl_count = aclp->z_acl_bytes; + } else { + acl_phys.z_acl_size = aclp->z_acl_bytes; + acl_phys.z_acl_count = aclp->z_acl_count; + } + acl_phys.z_acl_version = aclp->z_version; + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ZNODE_ACL(zfsvfs), NULL, + &acl_phys, sizeof (acl_phys)); + } + + /* + * Replace ACL wide bits, but first clear them. + */ + zp->z_pflags &= ~ZFS_ACL_WIDE_FLAGS; + + zp->z_pflags |= aclp->z_hints; + + if (ace_trivial_common(aclp, 0, zfs_ace_walk) == 0) + zp->z_pflags |= ZFS_ACL_TRIVIAL; + + zfs_tstamp_update_setup(zp, STATE_CHANGED, NULL, ctime); + return (sa_bulk_update(zp->z_sa_hdl, bulk, count, tx)); +} + +static void +zfs_acl_chmod(zfsvfs_t *zfsvfs, uint64_t mode, zfs_acl_t *aclp) +{ + void *acep = NULL; + uint64_t who; + int new_count, new_bytes; + int ace_size; + int entry_type; + uint16_t iflags, type; + uint32_t access_mask; + zfs_acl_node_t *newnode; + size_t abstract_size = aclp->z_ops->ace_abstract_size(); + void *zacep; + uint32_t owner, group, everyone; + uint32_t deny1, deny2, allow0; + + new_count = new_bytes = 0; + + acl_trivial_access_masks((mode_t)mode, &allow0, &deny1, &deny2, + &owner, &group, &everyone); + + newnode = zfs_acl_node_alloc((abstract_size * 6) + aclp->z_acl_bytes); + + zacep = newnode->z_acldata; + if (allow0) { + zfs_set_ace(aclp, zacep, allow0, ALLOW, -1, ACE_OWNER); + zacep = (void *)((uintptr_t)zacep + abstract_size); + new_count++; + new_bytes += abstract_size; + } + if (deny1) { + zfs_set_ace(aclp, zacep, deny1, DENY, -1, ACE_OWNER); + zacep = (void *)((uintptr_t)zacep + abstract_size); + new_count++; + new_bytes += abstract_size; + } + if (deny2) { + zfs_set_ace(aclp, zacep, deny2, DENY, -1, OWNING_GROUP); + zacep = (void *)((uintptr_t)zacep + abstract_size); + new_count++; + new_bytes += abstract_size; + } + + while ((acep = zfs_acl_next_ace(aclp, acep, &who, &access_mask, + &iflags, &type))) { + uint16_t inherit_flags; + + entry_type = (iflags & ACE_TYPE_FLAGS); + inherit_flags = (iflags & ALL_INHERIT); + + if ((entry_type == ACE_OWNER || entry_type == ACE_EVERYONE || + (entry_type == OWNING_GROUP)) && + ((inherit_flags & ACE_INHERIT_ONLY_ACE) == 0)) { + continue; + } + + if ((type != ALLOW && type != DENY) || + (inherit_flags & ACE_INHERIT_ONLY_ACE)) { + if (inherit_flags) + aclp->z_hints |= ZFS_INHERIT_ACE; + switch (type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + aclp->z_hints |= ZFS_ACL_OBJ_ACE; + break; + } + } else { + + /* + * Limit permissions to be no greater than + * group permissions + */ + if (zfsvfs->z_acl_inherit == ZFS_ACL_RESTRICTED) { + if (!(mode & S_IRGRP)) + access_mask &= ~ACE_READ_DATA; + if (!(mode & S_IWGRP)) + access_mask &= + ~(ACE_WRITE_DATA|ACE_APPEND_DATA); + if (!(mode & S_IXGRP)) + access_mask &= ~ACE_EXECUTE; + access_mask &= + ~(ACE_WRITE_OWNER|ACE_WRITE_ACL| + ACE_WRITE_ATTRIBUTES|ACE_WRITE_NAMED_ATTRS); + } + } + zfs_set_ace(aclp, zacep, access_mask, type, who, iflags); + ace_size = aclp->z_ops->ace_size(acep); + zacep = (void *)((uintptr_t)zacep + ace_size); + new_count++; + new_bytes += ace_size; + } + zfs_set_ace(aclp, zacep, owner, 0, -1, ACE_OWNER); + zacep = (void *)((uintptr_t)zacep + abstract_size); + zfs_set_ace(aclp, zacep, group, 0, -1, OWNING_GROUP); + zacep = (void *)((uintptr_t)zacep + abstract_size); + zfs_set_ace(aclp, zacep, everyone, 0, -1, ACE_EVERYONE); + + new_count += 3; + new_bytes += abstract_size * 3; + zfs_acl_release_nodes(aclp); + aclp->z_acl_count = new_count; + aclp->z_acl_bytes = new_bytes; + newnode->z_ace_count = new_count; + newnode->z_size = new_bytes; + list_insert_tail(&aclp->z_acl, newnode); +} + +void +zfs_acl_chmod_setattr(znode_t *zp, zfs_acl_t **aclp, uint64_t mode) +{ + mutex_enter(&zp->z_acl_lock); + mutex_enter(&zp->z_lock); + *aclp = zfs_acl_alloc(zfs_acl_version_zp(zp)); + (*aclp)->z_hints = zp->z_pflags & V4_ACL_WIDE_FLAGS; + zfs_acl_chmod(ZTOZSB(zp), mode, *aclp); + mutex_exit(&zp->z_lock); + mutex_exit(&zp->z_acl_lock); + ASSERT(*aclp); +} + +/* + * strip off write_owner and write_acl + */ +static void +zfs_restricted_update(zfsvfs_t *zfsvfs, zfs_acl_t *aclp, void *acep) +{ + uint32_t mask = aclp->z_ops->ace_mask_get(acep); + + if ((zfsvfs->z_acl_inherit == ZFS_ACL_RESTRICTED) && + (aclp->z_ops->ace_type_get(acep) == ALLOW)) { + mask &= ~RESTRICTED_CLEAR; + aclp->z_ops->ace_mask_set(acep, mask); + } +} + +/* + * Should ACE be inherited? + */ +static int +zfs_ace_can_use(umode_t obj_mode, uint16_t acep_flags) +{ + int iflags = (acep_flags & 0xf); + + if (S_ISDIR(obj_mode) && (iflags & ACE_DIRECTORY_INHERIT_ACE)) + return (1); + else if (iflags & ACE_FILE_INHERIT_ACE) + return (!(S_ISDIR(obj_mode) && + (iflags & ACE_NO_PROPAGATE_INHERIT_ACE))); + return (0); +} + +/* + * inherit inheritable ACEs from parent + */ +static zfs_acl_t * +zfs_acl_inherit(zfsvfs_t *zfsvfs, umode_t obj_mode, zfs_acl_t *paclp, + uint64_t mode, boolean_t *need_chmod) +{ + void *pacep; + void *acep; + zfs_acl_node_t *aclnode; + zfs_acl_t *aclp = NULL; + uint64_t who; + uint32_t access_mask; + uint16_t iflags, newflags, type; + size_t ace_size; + void *data1, *data2; + size_t data1sz, data2sz; + boolean_t vdir = S_ISDIR(obj_mode); + boolean_t vreg = S_ISREG(obj_mode); + boolean_t passthrough, passthrough_x, noallow; + + passthrough_x = + zfsvfs->z_acl_inherit == ZFS_ACL_PASSTHROUGH_X; + passthrough = passthrough_x || + zfsvfs->z_acl_inherit == ZFS_ACL_PASSTHROUGH; + noallow = + zfsvfs->z_acl_inherit == ZFS_ACL_NOALLOW; + + *need_chmod = B_TRUE; + pacep = NULL; + aclp = zfs_acl_alloc(paclp->z_version); + if (zfsvfs->z_acl_inherit == ZFS_ACL_DISCARD || S_ISLNK(obj_mode)) + return (aclp); + while ((pacep = zfs_acl_next_ace(paclp, pacep, &who, + &access_mask, &iflags, &type))) { + + /* + * don't inherit bogus ACEs + */ + if (!zfs_acl_valid_ace_type(type, iflags)) + continue; + + if (noallow && type == ALLOW) + continue; + + ace_size = aclp->z_ops->ace_size(pacep); + + if (!zfs_ace_can_use(obj_mode, iflags)) + continue; + + /* + * If owner@, group@, or everyone@ inheritable + * then zfs_acl_chmod() isn't needed. + */ + if (passthrough && + ((iflags & (ACE_OWNER|ACE_EVERYONE)) || + ((iflags & OWNING_GROUP) == + OWNING_GROUP)) && (vreg || (vdir && (iflags & + ACE_DIRECTORY_INHERIT_ACE)))) { + *need_chmod = B_FALSE; + } + + if (!vdir && passthrough_x && + ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)) { + access_mask &= ~ACE_EXECUTE; + } + + aclnode = zfs_acl_node_alloc(ace_size); + list_insert_tail(&aclp->z_acl, aclnode); + acep = aclnode->z_acldata; + + zfs_set_ace(aclp, acep, access_mask, type, + who, iflags|ACE_INHERITED_ACE); + + /* + * Copy special opaque data if any + */ + if ((data1sz = paclp->z_ops->ace_data(pacep, &data1)) != 0) { + VERIFY((data2sz = aclp->z_ops->ace_data(acep, + &data2)) == data1sz); + bcopy(data1, data2, data2sz); + } + + aclp->z_acl_count++; + aclnode->z_ace_count++; + aclp->z_acl_bytes += aclnode->z_size; + newflags = aclp->z_ops->ace_flags_get(acep); + + if (vdir) + aclp->z_hints |= ZFS_INHERIT_ACE; + + if ((iflags & ACE_NO_PROPAGATE_INHERIT_ACE) || !vdir) { + newflags &= ~ALL_INHERIT; + aclp->z_ops->ace_flags_set(acep, + newflags|ACE_INHERITED_ACE); + zfs_restricted_update(zfsvfs, aclp, acep); + continue; + } + + ASSERT(vdir); + + /* + * If only FILE_INHERIT is set then turn on + * inherit_only + */ + if ((iflags & (ACE_FILE_INHERIT_ACE | + ACE_DIRECTORY_INHERIT_ACE)) == ACE_FILE_INHERIT_ACE) { + newflags |= ACE_INHERIT_ONLY_ACE; + aclp->z_ops->ace_flags_set(acep, + newflags|ACE_INHERITED_ACE); + } else { + newflags &= ~ACE_INHERIT_ONLY_ACE; + aclp->z_ops->ace_flags_set(acep, + newflags|ACE_INHERITED_ACE); + } + } + return (aclp); +} + +/* + * Create file system object initial permissions + * including inheritable ACEs. + */ +int +zfs_acl_ids_create(znode_t *dzp, int flag, vattr_t *vap, cred_t *cr, + vsecattr_t *vsecp, zfs_acl_ids_t *acl_ids) +{ + int error; + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + zfs_acl_t *paclp; + gid_t gid = vap->va_gid; + boolean_t need_chmod = B_TRUE; + boolean_t inherited = B_FALSE; + + bzero(acl_ids, sizeof (zfs_acl_ids_t)); + acl_ids->z_mode = vap->va_mode; + + if (vsecp) + if ((error = zfs_vsec_2_aclp(zfsvfs, vap->va_mode, vsecp, + cr, &acl_ids->z_fuidp, &acl_ids->z_aclp)) != 0) + return (error); + + acl_ids->z_fuid = vap->va_uid; + acl_ids->z_fgid = vap->va_gid; +#ifdef HAVE_KSID + /* + * Determine uid and gid. + */ + if ((flag & IS_ROOT_NODE) || zfsvfs->z_replay || + ((flag & IS_XATTR) && (S_ISDIR(vap->va_mode)))) { + acl_ids->z_fuid = zfs_fuid_create(zfsvfs, (uint64_t)vap->va_uid, + cr, ZFS_OWNER, &acl_ids->z_fuidp); + acl_ids->z_fgid = zfs_fuid_create(zfsvfs, (uint64_t)vap->va_gid, + cr, ZFS_GROUP, &acl_ids->z_fuidp); + gid = vap->va_gid; + } else { + acl_ids->z_fuid = zfs_fuid_create_cred(zfsvfs, ZFS_OWNER, + cr, &acl_ids->z_fuidp); + acl_ids->z_fgid = 0; + if (vap->va_mask & AT_GID) { + acl_ids->z_fgid = zfs_fuid_create(zfsvfs, + (uint64_t)vap->va_gid, + cr, ZFS_GROUP, &acl_ids->z_fuidp); + gid = vap->va_gid; + if (acl_ids->z_fgid != KGID_TO_SGID(ZTOI(dzp)->i_gid) && + !groupmember(vap->va_gid, cr) && + secpolicy_vnode_create_gid(cr) != 0) + acl_ids->z_fgid = 0; + } + if (acl_ids->z_fgid == 0) { + if (dzp->z_mode & S_ISGID) { + char *domain; + uint32_t rid; + + acl_ids->z_fgid = KGID_TO_SGID( + ZTOI(dzp)->i_gid); + gid = zfs_fuid_map_id(zfsvfs, acl_ids->z_fgid, + cr, ZFS_GROUP); + + if (zfsvfs->z_use_fuids && + IS_EPHEMERAL(acl_ids->z_fgid)) { + domain = zfs_fuid_idx_domain( + &zfsvfs->z_fuid_idx, + FUID_INDEX(acl_ids->z_fgid)); + rid = FUID_RID(acl_ids->z_fgid); + zfs_fuid_node_add(&acl_ids->z_fuidp, + domain, rid, + FUID_INDEX(acl_ids->z_fgid), + acl_ids->z_fgid, ZFS_GROUP); + } + } else { + acl_ids->z_fgid = zfs_fuid_create_cred(zfsvfs, + ZFS_GROUP, cr, &acl_ids->z_fuidp); + gid = crgetgid(cr); + } + } + } +#endif /* HAVE_KSID */ + + /* + * If we're creating a directory, and the parent directory has the + * set-GID bit set, set in on the new directory. + * Otherwise, if the user is neither privileged nor a member of the + * file's new group, clear the file's set-GID bit. + */ + + if (!(flag & IS_ROOT_NODE) && (dzp->z_mode & S_ISGID) && + (S_ISDIR(vap->va_mode))) { + acl_ids->z_mode |= S_ISGID; + } else { + if ((acl_ids->z_mode & S_ISGID) && + secpolicy_vnode_setids_setgids(cr, gid) != 0) + acl_ids->z_mode &= ~S_ISGID; + } + + if (acl_ids->z_aclp == NULL) { + mutex_enter(&dzp->z_acl_lock); + mutex_enter(&dzp->z_lock); + if (!(flag & IS_ROOT_NODE) && (S_ISDIR(ZTOI(dzp)->i_mode) && + (dzp->z_pflags & ZFS_INHERIT_ACE)) && + !(dzp->z_pflags & ZFS_XATTR)) { + VERIFY(0 == zfs_acl_node_read(dzp, B_TRUE, + &paclp, B_FALSE)); + acl_ids->z_aclp = zfs_acl_inherit(zfsvfs, + vap->va_mode, paclp, acl_ids->z_mode, &need_chmod); + inherited = B_TRUE; + } else { + acl_ids->z_aclp = + zfs_acl_alloc(zfs_acl_version_zp(dzp)); + acl_ids->z_aclp->z_hints |= ZFS_ACL_TRIVIAL; + } + mutex_exit(&dzp->z_lock); + mutex_exit(&dzp->z_acl_lock); + if (need_chmod) { + acl_ids->z_aclp->z_hints |= S_ISDIR(vap->va_mode) ? + ZFS_ACL_AUTO_INHERIT : 0; + zfs_acl_chmod(zfsvfs, acl_ids->z_mode, acl_ids->z_aclp); + } + } + + if (inherited || vsecp) { + acl_ids->z_mode = zfs_mode_compute(acl_ids->z_mode, + acl_ids->z_aclp, &acl_ids->z_aclp->z_hints, + acl_ids->z_fuid, acl_ids->z_fgid); + if (ace_trivial_common(acl_ids->z_aclp, 0, zfs_ace_walk) == 0) + acl_ids->z_aclp->z_hints |= ZFS_ACL_TRIVIAL; + } + + return (0); +} + +/* + * Free ACL and fuid_infop, but not the acl_ids structure + */ +void +zfs_acl_ids_free(zfs_acl_ids_t *acl_ids) +{ + if (acl_ids->z_aclp) + zfs_acl_free(acl_ids->z_aclp); + if (acl_ids->z_fuidp) + zfs_fuid_info_free(acl_ids->z_fuidp); + acl_ids->z_aclp = NULL; + acl_ids->z_fuidp = NULL; +} + +boolean_t +zfs_acl_ids_overquota(zfsvfs_t *zfsvfs, zfs_acl_ids_t *acl_ids) +{ + return (zfs_fuid_overquota(zfsvfs, B_FALSE, acl_ids->z_fuid) || + zfs_fuid_overquota(zfsvfs, B_TRUE, acl_ids->z_fgid) || + zfs_fuid_overobjquota(zfsvfs, B_FALSE, acl_ids->z_fuid) || + zfs_fuid_overobjquota(zfsvfs, B_TRUE, acl_ids->z_fgid)); +} + +/* + * Retrieve a file's ACL + */ +int +zfs_getacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) +{ + zfs_acl_t *aclp; + ulong_t mask; + int error; + int count = 0; + int largeace = 0; + + mask = vsecp->vsa_mask & (VSA_ACE | VSA_ACECNT | + VSA_ACE_ACLFLAGS | VSA_ACE_ALLTYPES); + + if (mask == 0) + return (SET_ERROR(ENOSYS)); + + if ((error = zfs_zaccess(zp, ACE_READ_ACL, 0, skipaclchk, cr))) + return (error); + + mutex_enter(&zp->z_acl_lock); + + error = zfs_acl_node_read(zp, B_FALSE, &aclp, B_FALSE); + if (error != 0) { + mutex_exit(&zp->z_acl_lock); + return (error); + } + + /* + * Scan ACL to determine number of ACEs + */ + if ((zp->z_pflags & ZFS_ACL_OBJ_ACE) && !(mask & VSA_ACE_ALLTYPES)) { + void *zacep = NULL; + uint64_t who; + uint32_t access_mask; + uint16_t type, iflags; + + while ((zacep = zfs_acl_next_ace(aclp, zacep, + &who, &access_mask, &iflags, &type))) { + switch (type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + largeace++; + continue; + default: + count++; + } + } + vsecp->vsa_aclcnt = count; + } else + count = (int)aclp->z_acl_count; + + if (mask & VSA_ACECNT) { + vsecp->vsa_aclcnt = count; + } + + if (mask & VSA_ACE) { + size_t aclsz; + + aclsz = count * sizeof (ace_t) + + sizeof (ace_object_t) * largeace; + + vsecp->vsa_aclentp = kmem_alloc(aclsz, KM_SLEEP); + vsecp->vsa_aclentsz = aclsz; + + if (aclp->z_version == ZFS_ACL_VERSION_FUID) + zfs_copy_fuid_2_ace(ZTOZSB(zp), aclp, cr, + vsecp->vsa_aclentp, !(mask & VSA_ACE_ALLTYPES)); + else { + zfs_acl_node_t *aclnode; + void *start = vsecp->vsa_aclentp; + + for (aclnode = list_head(&aclp->z_acl); aclnode; + aclnode = list_next(&aclp->z_acl, aclnode)) { + bcopy(aclnode->z_acldata, start, + aclnode->z_size); + start = (caddr_t)start + aclnode->z_size; + } + ASSERT((caddr_t)start - (caddr_t)vsecp->vsa_aclentp == + aclp->z_acl_bytes); + } + } + if (mask & VSA_ACE_ACLFLAGS) { + vsecp->vsa_aclflags = 0; + if (zp->z_pflags & ZFS_ACL_DEFAULTED) + vsecp->vsa_aclflags |= ACL_DEFAULTED; + if (zp->z_pflags & ZFS_ACL_PROTECTED) + vsecp->vsa_aclflags |= ACL_PROTECTED; + if (zp->z_pflags & ZFS_ACL_AUTO_INHERIT) + vsecp->vsa_aclflags |= ACL_AUTO_INHERIT; + } + + mutex_exit(&zp->z_acl_lock); + + return (0); +} + +int +zfs_vsec_2_aclp(zfsvfs_t *zfsvfs, umode_t obj_mode, + vsecattr_t *vsecp, cred_t *cr, zfs_fuid_info_t **fuidp, zfs_acl_t **zaclp) +{ + zfs_acl_t *aclp; + zfs_acl_node_t *aclnode; + int aclcnt = vsecp->vsa_aclcnt; + int error; + + if (vsecp->vsa_aclcnt > MAX_ACL_ENTRIES || vsecp->vsa_aclcnt <= 0) + return (SET_ERROR(EINVAL)); + + aclp = zfs_acl_alloc(zfs_acl_version(zfsvfs->z_version)); + + aclp->z_hints = 0; + aclnode = zfs_acl_node_alloc(aclcnt * sizeof (zfs_object_ace_t)); + if (aclp->z_version == ZFS_ACL_VERSION_INITIAL) { + if ((error = zfs_copy_ace_2_oldace(obj_mode, aclp, + (ace_t *)vsecp->vsa_aclentp, aclnode->z_acldata, + aclcnt, &aclnode->z_size)) != 0) { + zfs_acl_free(aclp); + zfs_acl_node_free(aclnode); + return (error); + } + } else { + if ((error = zfs_copy_ace_2_fuid(zfsvfs, obj_mode, aclp, + vsecp->vsa_aclentp, aclnode->z_acldata, aclcnt, + &aclnode->z_size, fuidp, cr)) != 0) { + zfs_acl_free(aclp); + zfs_acl_node_free(aclnode); + return (error); + } + } + aclp->z_acl_bytes = aclnode->z_size; + aclnode->z_ace_count = aclcnt; + aclp->z_acl_count = aclcnt; + list_insert_head(&aclp->z_acl, aclnode); + + /* + * If flags are being set then add them to z_hints + */ + if (vsecp->vsa_mask & VSA_ACE_ACLFLAGS) { + if (vsecp->vsa_aclflags & ACL_PROTECTED) + aclp->z_hints |= ZFS_ACL_PROTECTED; + if (vsecp->vsa_aclflags & ACL_DEFAULTED) + aclp->z_hints |= ZFS_ACL_DEFAULTED; + if (vsecp->vsa_aclflags & ACL_AUTO_INHERIT) + aclp->z_hints |= ZFS_ACL_AUTO_INHERIT; + } + + *zaclp = aclp; + + return (0); +} + +/* + * Set a file's ACL + */ +int +zfs_setacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + zilog_t *zilog = zfsvfs->z_log; + ulong_t mask = vsecp->vsa_mask & (VSA_ACE | VSA_ACECNT); + dmu_tx_t *tx; + int error; + zfs_acl_t *aclp; + zfs_fuid_info_t *fuidp = NULL; + boolean_t fuid_dirtied; + uint64_t acl_obj; + + if (mask == 0) + return (SET_ERROR(ENOSYS)); + + if (zp->z_pflags & ZFS_IMMUTABLE) + return (SET_ERROR(EPERM)); + + if ((error = zfs_zaccess(zp, ACE_WRITE_ACL, 0, skipaclchk, cr))) + return (error); + + error = zfs_vsec_2_aclp(zfsvfs, ZTOI(zp)->i_mode, vsecp, cr, &fuidp, + &aclp); + if (error) + return (error); + + /* + * If ACL wide flags aren't being set then preserve any + * existing flags. + */ + if (!(vsecp->vsa_mask & VSA_ACE_ACLFLAGS)) { + aclp->z_hints |= + (zp->z_pflags & V4_ACL_WIDE_FLAGS); + } +top: + mutex_enter(&zp->z_acl_lock); + mutex_enter(&zp->z_lock); + + tx = dmu_tx_create(zfsvfs->z_os); + + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + + /* + * If old version and ACL won't fit in bonus and we aren't + * upgrading then take out necessary DMU holds + */ + + if ((acl_obj = zfs_external_acl(zp)) != 0) { + if (zfsvfs->z_version >= ZPL_VERSION_FUID && + zfs_znode_acl_version(zp) <= ZFS_ACL_VERSION_INITIAL) { + dmu_tx_hold_free(tx, acl_obj, 0, + DMU_OBJECT_END); + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, + aclp->z_acl_bytes); + } else { + dmu_tx_hold_write(tx, acl_obj, 0, aclp->z_acl_bytes); + } + } else if (!zp->z_is_sa && aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, aclp->z_acl_bytes); + } + + zfs_sa_upgrade_txholds(tx, zp); + error = dmu_tx_assign(tx, TXG_NOWAIT); + if (error) { + mutex_exit(&zp->z_acl_lock); + mutex_exit(&zp->z_lock); + + if (error == ERESTART) { + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + dmu_tx_abort(tx); + zfs_acl_free(aclp); + return (error); + } + + error = zfs_aclset_common(zp, aclp, cr, tx); + ASSERT(error == 0); + ASSERT(zp->z_acl_cached == NULL); + zp->z_acl_cached = aclp; + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + zfs_log_acl(zilog, tx, zp, vsecp, fuidp); + + if (fuidp) + zfs_fuid_info_free(fuidp); + dmu_tx_commit(tx); + + mutex_exit(&zp->z_lock); + mutex_exit(&zp->z_acl_lock); + + return (error); +} + +/* + * Check accesses of interest (AoI) against attributes of the dataset + * such as read-only. Returns zero if no AoI conflict with dataset + * attributes, otherwise an appropriate errno is returned. + */ +static int +zfs_zaccess_dataset_check(znode_t *zp, uint32_t v4_mode) +{ + if ((v4_mode & WRITE_MASK) && (zfs_is_readonly(ZTOZSB(zp))) && + (!S_ISDEV(ZTOI(zp)->i_mode) || + (S_ISDEV(ZTOI(zp)->i_mode) && (v4_mode & WRITE_MASK_ATTRS)))) { + return (SET_ERROR(EROFS)); + } + + /* + * Only check for READONLY on non-directories. + */ + if ((v4_mode & WRITE_MASK_DATA) && + ((!S_ISDIR(ZTOI(zp)->i_mode) && + (zp->z_pflags & (ZFS_READONLY | ZFS_IMMUTABLE))) || + (S_ISDIR(ZTOI(zp)->i_mode) && + (zp->z_pflags & ZFS_IMMUTABLE)))) { + return (SET_ERROR(EPERM)); + } + + if ((v4_mode & (ACE_DELETE | ACE_DELETE_CHILD)) && + (zp->z_pflags & ZFS_NOUNLINK)) { + return (SET_ERROR(EPERM)); + } + + if (((v4_mode & (ACE_READ_DATA|ACE_EXECUTE)) && + (zp->z_pflags & ZFS_AV_QUARANTINED))) { + return (SET_ERROR(EACCES)); + } + + return (0); +} + +/* + * The primary usage of this function is to loop through all of the + * ACEs in the znode, determining what accesses of interest (AoI) to + * the caller are allowed or denied. The AoI are expressed as bits in + * the working_mode parameter. As each ACE is processed, bits covered + * by that ACE are removed from the working_mode. This removal + * facilitates two things. The first is that when the working mode is + * empty (= 0), we know we've looked at all the AoI. The second is + * that the ACE interpretation rules don't allow a later ACE to undo + * something granted or denied by an earlier ACE. Removing the + * discovered access or denial enforces this rule. At the end of + * processing the ACEs, all AoI that were found to be denied are + * placed into the working_mode, giving the caller a mask of denied + * accesses. Returns: + * 0 if all AoI granted + * EACCESS if the denied mask is non-zero + * other error if abnormal failure (e.g., IO error) + * + * A secondary usage of the function is to determine if any of the + * AoI are granted. If an ACE grants any access in + * the working_mode, we immediately short circuit out of the function. + * This mode is chosen by setting anyaccess to B_TRUE. The + * working_mode is not a denied access mask upon exit if the function + * is used in this manner. + */ +static int +zfs_zaccess_aces_check(znode_t *zp, uint32_t *working_mode, + boolean_t anyaccess, cred_t *cr) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + zfs_acl_t *aclp; + int error; + uid_t uid = crgetuid(cr); + uint64_t who; + uint16_t type, iflags; + uint16_t entry_type; + uint32_t access_mask; + uint32_t deny_mask = 0; + zfs_ace_hdr_t *acep = NULL; + boolean_t checkit; + uid_t gowner; + uid_t fowner; + + zfs_fuid_map_ids(zp, cr, &fowner, &gowner); + + mutex_enter(&zp->z_acl_lock); + + error = zfs_acl_node_read(zp, B_FALSE, &aclp, B_FALSE); + if (error != 0) { + mutex_exit(&zp->z_acl_lock); + return (error); + } + + ASSERT(zp->z_acl_cached); + + while ((acep = zfs_acl_next_ace(aclp, acep, &who, &access_mask, + &iflags, &type))) { + uint32_t mask_matched; + + if (!zfs_acl_valid_ace_type(type, iflags)) + continue; + + if (S_ISDIR(ZTOI(zp)->i_mode) && + (iflags & ACE_INHERIT_ONLY_ACE)) + continue; + + /* Skip ACE if it does not affect any AoI */ + mask_matched = (access_mask & *working_mode); + if (!mask_matched) + continue; + + entry_type = (iflags & ACE_TYPE_FLAGS); + + checkit = B_FALSE; + + switch (entry_type) { + case ACE_OWNER: + if (uid == fowner) + checkit = B_TRUE; + break; + case OWNING_GROUP: + who = gowner; + /*FALLTHROUGH*/ + case ACE_IDENTIFIER_GROUP: + checkit = zfs_groupmember(zfsvfs, who, cr); + break; + case ACE_EVERYONE: + checkit = B_TRUE; + break; + + /* USER Entry */ + default: + if (entry_type == 0) { + uid_t newid; + + newid = zfs_fuid_map_id(zfsvfs, who, cr, + ZFS_ACE_USER); + if (newid != IDMAP_WK_CREATOR_OWNER_UID && + uid == newid) + checkit = B_TRUE; + break; + } else { + mutex_exit(&zp->z_acl_lock); + return (SET_ERROR(EIO)); + } + } + + if (checkit) { + if (type == DENY) { + DTRACE_PROBE3(zfs__ace__denies, + znode_t *, zp, + zfs_ace_hdr_t *, acep, + uint32_t, mask_matched); + deny_mask |= mask_matched; + } else { + DTRACE_PROBE3(zfs__ace__allows, + znode_t *, zp, + zfs_ace_hdr_t *, acep, + uint32_t, mask_matched); + if (anyaccess) { + mutex_exit(&zp->z_acl_lock); + return (0); + } + } + *working_mode &= ~mask_matched; + } + + /* Are we done? */ + if (*working_mode == 0) + break; + } + + mutex_exit(&zp->z_acl_lock); + + /* Put the found 'denies' back on the working mode */ + if (deny_mask) { + *working_mode |= deny_mask; + return (SET_ERROR(EACCES)); + } else if (*working_mode) { + return (-1); + } + + return (0); +} + +/* + * Return true if any access whatsoever granted, we don't actually + * care what access is granted. + */ +boolean_t +zfs_has_access(znode_t *zp, cred_t *cr) +{ + uint32_t have = ACE_ALL_PERMS; + + if (zfs_zaccess_aces_check(zp, &have, B_TRUE, cr) != 0) { + uid_t owner; + + owner = zfs_fuid_map_id(ZTOZSB(zp), + KUID_TO_SUID(ZTOI(zp)->i_uid), cr, ZFS_OWNER); + return (secpolicy_vnode_any_access(cr, ZTOI(zp), owner) == 0); + } + return (B_TRUE); +} + +static int +zfs_zaccess_common(znode_t *zp, uint32_t v4_mode, uint32_t *working_mode, + boolean_t *check_privs, boolean_t skipaclchk, cred_t *cr) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + int err; + + *working_mode = v4_mode; + *check_privs = B_TRUE; + + /* + * Short circuit empty requests + */ + if (v4_mode == 0 || zfsvfs->z_replay) { + *working_mode = 0; + return (0); + } + + if ((err = zfs_zaccess_dataset_check(zp, v4_mode)) != 0) { + *check_privs = B_FALSE; + return (err); + } + + /* + * The caller requested that the ACL check be skipped. This + * would only happen if the caller checked VOP_ACCESS() with a + * 32 bit ACE mask and already had the appropriate permissions. + */ + if (skipaclchk) { + *working_mode = 0; + return (0); + } + + return (zfs_zaccess_aces_check(zp, working_mode, B_FALSE, cr)); +} + +static int +zfs_zaccess_append(znode_t *zp, uint32_t *working_mode, boolean_t *check_privs, + cred_t *cr) +{ + if (*working_mode != ACE_WRITE_DATA) + return (SET_ERROR(EACCES)); + + return (zfs_zaccess_common(zp, ACE_APPEND_DATA, working_mode, + check_privs, B_FALSE, cr)); +} + +int +zfs_fastaccesschk_execute(znode_t *zdp, cred_t *cr) +{ + boolean_t owner = B_FALSE; + boolean_t groupmbr = B_FALSE; + boolean_t is_attr; + uid_t uid = crgetuid(cr); + int error; + + if (zdp->z_pflags & ZFS_AV_QUARANTINED) + return (SET_ERROR(EACCES)); + + is_attr = ((zdp->z_pflags & ZFS_XATTR) && + (S_ISDIR(ZTOI(zdp)->i_mode))); + if (is_attr) + goto slow; + + + mutex_enter(&zdp->z_acl_lock); + + if (zdp->z_pflags & ZFS_NO_EXECS_DENIED) { + mutex_exit(&zdp->z_acl_lock); + return (0); + } + + if (KUID_TO_SUID(ZTOI(zdp)->i_uid) != 0 || + KGID_TO_SGID(ZTOI(zdp)->i_gid) != 0) { + mutex_exit(&zdp->z_acl_lock); + goto slow; + } + + if (uid == KUID_TO_SUID(ZTOI(zdp)->i_uid)) { + owner = B_TRUE; + if (zdp->z_mode & S_IXUSR) { + mutex_exit(&zdp->z_acl_lock); + return (0); + } else { + mutex_exit(&zdp->z_acl_lock); + goto slow; + } + } + if (groupmember(KGID_TO_SGID(ZTOI(zdp)->i_gid), cr)) { + groupmbr = B_TRUE; + if (zdp->z_mode & S_IXGRP) { + mutex_exit(&zdp->z_acl_lock); + return (0); + } else { + mutex_exit(&zdp->z_acl_lock); + goto slow; + } + } + if (!owner && !groupmbr) { + if (zdp->z_mode & S_IXOTH) { + mutex_exit(&zdp->z_acl_lock); + return (0); + } + } + + mutex_exit(&zdp->z_acl_lock); + +slow: + DTRACE_PROBE(zfs__fastpath__execute__access__miss); + ZFS_ENTER(ZTOZSB(zdp)); + error = zfs_zaccess(zdp, ACE_EXECUTE, 0, B_FALSE, cr); + ZFS_EXIT(ZTOZSB(zdp)); + return (error); +} + +/* + * Determine whether Access should be granted/denied. + * + * The least priv subsytem is always consulted as a basic privilege + * can define any form of access. + */ +int +zfs_zaccess(znode_t *zp, int mode, int flags, boolean_t skipaclchk, cred_t *cr) +{ + uint32_t working_mode; + int error; + int is_attr; + boolean_t check_privs; + znode_t *xzp; + znode_t *check_zp = zp; + mode_t needed_bits; + uid_t owner; + + is_attr = ((zp->z_pflags & ZFS_XATTR) && S_ISDIR(ZTOI(zp)->i_mode)); + + /* + * If attribute then validate against base file + */ + if (is_attr) { + if ((error = zfs_zget(ZTOZSB(zp), + zp->z_xattr_parent, &xzp)) != 0) { + return (error); + } + + check_zp = xzp; + + /* + * fixup mode to map to xattr perms + */ + + if (mode & (ACE_WRITE_DATA|ACE_APPEND_DATA)) { + mode &= ~(ACE_WRITE_DATA|ACE_APPEND_DATA); + mode |= ACE_WRITE_NAMED_ATTRS; + } + + if (mode & (ACE_READ_DATA|ACE_EXECUTE)) { + mode &= ~(ACE_READ_DATA|ACE_EXECUTE); + mode |= ACE_READ_NAMED_ATTRS; + } + } + + owner = zfs_fuid_map_id(ZTOZSB(zp), KUID_TO_SUID(ZTOI(zp)->i_uid), + cr, ZFS_OWNER); + /* + * Map the bits required to the standard inode flags + * S_IRUSR|S_IWUSR|S_IXUSR in the needed_bits. Map the bits + * mapped by working_mode (currently missing) in missing_bits. + * Call secpolicy_vnode_access2() with (needed_bits & ~checkmode), + * needed_bits. + */ + needed_bits = 0; + + working_mode = mode; + if ((working_mode & (ACE_READ_ACL|ACE_READ_ATTRIBUTES)) && + owner == crgetuid(cr)) + working_mode &= ~(ACE_READ_ACL|ACE_READ_ATTRIBUTES); + + if (working_mode & (ACE_READ_DATA|ACE_READ_NAMED_ATTRS| + ACE_READ_ACL|ACE_READ_ATTRIBUTES|ACE_SYNCHRONIZE)) + needed_bits |= S_IRUSR; + if (working_mode & (ACE_WRITE_DATA|ACE_WRITE_NAMED_ATTRS| + ACE_APPEND_DATA|ACE_WRITE_ATTRIBUTES|ACE_SYNCHRONIZE)) + needed_bits |= S_IWUSR; + if (working_mode & ACE_EXECUTE) + needed_bits |= S_IXUSR; + + if ((error = zfs_zaccess_common(check_zp, mode, &working_mode, + &check_privs, skipaclchk, cr)) == 0) { + if (is_attr) + iput(ZTOI(xzp)); + return (secpolicy_vnode_access2(cr, ZTOI(zp), owner, + needed_bits, needed_bits)); + } + + if (error && !check_privs) { + if (is_attr) + iput(ZTOI(xzp)); + return (error); + } + + if (error && (flags & V_APPEND)) { + error = zfs_zaccess_append(zp, &working_mode, &check_privs, cr); + } + + if (error && check_privs) { + mode_t checkmode = 0; + + /* + * First check for implicit owner permission on + * read_acl/read_attributes + */ + + error = 0; + ASSERT(working_mode != 0); + + if ((working_mode & (ACE_READ_ACL|ACE_READ_ATTRIBUTES) && + owner == crgetuid(cr))) + working_mode &= ~(ACE_READ_ACL|ACE_READ_ATTRIBUTES); + + if (working_mode & (ACE_READ_DATA|ACE_READ_NAMED_ATTRS| + ACE_READ_ACL|ACE_READ_ATTRIBUTES|ACE_SYNCHRONIZE)) + checkmode |= S_IRUSR; + if (working_mode & (ACE_WRITE_DATA|ACE_WRITE_NAMED_ATTRS| + ACE_APPEND_DATA|ACE_WRITE_ATTRIBUTES|ACE_SYNCHRONIZE)) + checkmode |= S_IWUSR; + if (working_mode & ACE_EXECUTE) + checkmode |= S_IXUSR; + + error = secpolicy_vnode_access2(cr, ZTOI(check_zp), owner, + needed_bits & ~checkmode, needed_bits); + + if (error == 0 && (working_mode & ACE_WRITE_OWNER)) + error = secpolicy_vnode_chown(cr, owner); + if (error == 0 && (working_mode & ACE_WRITE_ACL)) + error = secpolicy_vnode_setdac(cr, owner); + + if (error == 0 && (working_mode & + (ACE_DELETE|ACE_DELETE_CHILD))) + error = secpolicy_vnode_remove(cr); + + if (error == 0 && (working_mode & ACE_SYNCHRONIZE)) { + error = secpolicy_vnode_chown(cr, owner); + } + if (error == 0) { + /* + * See if any bits other than those already checked + * for are still present. If so then return EACCES + */ + if (working_mode & ~(ZFS_CHECKED_MASKS)) { + error = SET_ERROR(EACCES); + } + } + } else if (error == 0) { + error = secpolicy_vnode_access2(cr, ZTOI(zp), owner, + needed_bits, needed_bits); + } + + if (is_attr) + iput(ZTOI(xzp)); + + return (error); +} + +/* + * Translate traditional unix S_IRUSR/S_IWUSR/S_IXUSR mode into + * native ACL format and call zfs_zaccess() + */ +int +zfs_zaccess_rwx(znode_t *zp, mode_t mode, int flags, cred_t *cr) +{ + return (zfs_zaccess(zp, zfs_unix_to_v4(mode >> 6), flags, B_FALSE, cr)); +} + +/* + * Access function for secpolicy_vnode_setattr + */ +int +zfs_zaccess_unix(znode_t *zp, mode_t mode, cred_t *cr) +{ + int v4_mode = zfs_unix_to_v4(mode >> 6); + + return (zfs_zaccess(zp, v4_mode, 0, B_FALSE, cr)); +} + +static int +zfs_delete_final_check(znode_t *zp, znode_t *dzp, + mode_t available_perms, cred_t *cr) +{ + int error; + uid_t downer; + + downer = zfs_fuid_map_id(ZTOZSB(dzp), KUID_TO_SUID(ZTOI(dzp)->i_uid), + cr, ZFS_OWNER); + + error = secpolicy_vnode_access2(cr, ZTOI(dzp), + downer, available_perms, S_IWUSR|S_IXUSR); + + if (error == 0) + error = zfs_sticky_remove_access(dzp, zp, cr); + + return (error); +} + +/* + * Determine whether Access should be granted/deny, without + * consulting least priv subsystem. + * + * The following chart is the recommended NFSv4 enforcement for + * ability to delete an object. + * + * ------------------------------------------------------- + * | Parent Dir | Target Object Permissions | + * | permissions | | + * ------------------------------------------------------- + * | | ACL Allows | ACL Denies| Delete | + * | | Delete | Delete | unspecified| + * ------------------------------------------------------- + * | ACL Allows | Permit | Permit | Permit | + * | DELETE_CHILD | | + * ------------------------------------------------------- + * | ACL Denies | Permit | Deny | Deny | + * | DELETE_CHILD | | | | + * ------------------------------------------------------- + * | ACL specifies | | | | + * | only allow | Permit | Permit | Permit | + * | write and | | | | + * | execute | | | | + * ------------------------------------------------------- + * | ACL denies | | | | + * | write and | Permit | Deny | Deny | + * | execute | | | | + * ------------------------------------------------------- + * ^ + * | + * No search privilege, can't even look up file? + * + */ +int +zfs_zaccess_delete(znode_t *dzp, znode_t *zp, cred_t *cr) +{ + uint32_t dzp_working_mode = 0; + uint32_t zp_working_mode = 0; + int dzp_error, zp_error; + mode_t available_perms; + boolean_t dzpcheck_privs = B_TRUE; + boolean_t zpcheck_privs = B_TRUE; + + /* + * We want specific DELETE permissions to + * take precedence over WRITE/EXECUTE. We don't + * want an ACL such as this to mess us up. + * user:joe:write_data:deny,user:joe:delete:allow + * + * However, deny permissions may ultimately be overridden + * by secpolicy_vnode_access(). + * + * We will ask for all of the necessary permissions and then + * look at the working modes from the directory and target object + * to determine what was found. + */ + + if (zp->z_pflags & (ZFS_IMMUTABLE | ZFS_NOUNLINK)) + return (SET_ERROR(EPERM)); + + /* + * First row + * If the directory permissions allow the delete, we are done. + */ + if ((dzp_error = zfs_zaccess_common(dzp, ACE_DELETE_CHILD, + &dzp_working_mode, &dzpcheck_privs, B_FALSE, cr)) == 0) + return (0); + + /* + * If target object has delete permission then we are done + */ + if ((zp_error = zfs_zaccess_common(zp, ACE_DELETE, &zp_working_mode, + &zpcheck_privs, B_FALSE, cr)) == 0) + return (0); + + ASSERT(dzp_error && zp_error); + + if (!dzpcheck_privs) + return (dzp_error); + if (!zpcheck_privs) + return (zp_error); + + /* + * Second row + * + * If directory returns EACCES then delete_child was denied + * due to deny delete_child. In this case send the request through + * secpolicy_vnode_remove(). We don't use zfs_delete_final_check() + * since that *could* allow the delete based on write/execute permission + * and we want delete permissions to override write/execute. + */ + + if (dzp_error == EACCES) + return (secpolicy_vnode_remove(cr)); + + /* + * Third Row + * only need to see if we have write/execute on directory. + */ + + dzp_error = zfs_zaccess_common(dzp, ACE_EXECUTE|ACE_WRITE_DATA, + &dzp_working_mode, &dzpcheck_privs, B_FALSE, cr); + + if (dzp_error != 0 && !dzpcheck_privs) + return (dzp_error); + + /* + * Fourth row + */ + + available_perms = (dzp_working_mode & ACE_WRITE_DATA) ? 0 : S_IWUSR; + available_perms |= (dzp_working_mode & ACE_EXECUTE) ? 0 : S_IXUSR; + + return (zfs_delete_final_check(zp, dzp, available_perms, cr)); + +} + +int +zfs_zaccess_rename(znode_t *sdzp, znode_t *szp, znode_t *tdzp, + znode_t *tzp, cred_t *cr) +{ + int add_perm; + int error; + + if (szp->z_pflags & ZFS_AV_QUARANTINED) + return (SET_ERROR(EACCES)); + + add_perm = S_ISDIR(ZTOI(szp)->i_mode) ? + ACE_ADD_SUBDIRECTORY : ACE_ADD_FILE; + + /* + * Rename permissions are combination of delete permission + + * add file/subdir permission. + */ + + /* + * first make sure we do the delete portion. + * + * If that succeeds then check for add_file/add_subdir permissions + */ + + if ((error = zfs_zaccess_delete(sdzp, szp, cr))) + return (error); + + /* + * If we have a tzp, see if we can delete it? + */ + if (tzp) { + if ((error = zfs_zaccess_delete(tdzp, tzp, cr))) + return (error); + } + + /* + * Now check for add permissions + */ + error = zfs_zaccess(tdzp, add_perm, 0, B_FALSE, cr); + + return (error); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_byteswap.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_byteswap.c @@ -0,0 +1,205 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include + +void +zfs_oldace_byteswap(ace_t *ace, int ace_cnt) +{ + int i; + + for (i = 0; i != ace_cnt; i++, ace++) { + ace->a_who = BSWAP_32(ace->a_who); + ace->a_access_mask = BSWAP_32(ace->a_access_mask); + ace->a_flags = BSWAP_16(ace->a_flags); + ace->a_type = BSWAP_16(ace->a_type); + } +} + +/* + * swap ace_t and ace_oject_t + */ +void +zfs_ace_byteswap(void *buf, size_t size, boolean_t zfs_layout) +{ + caddr_t end; + caddr_t ptr; + zfs_ace_t *zacep = NULL; + ace_t *acep; + uint16_t entry_type; + size_t entry_size; + int ace_type; + + end = (caddr_t)buf + size; + ptr = buf; + + while (ptr < end) { + if (zfs_layout) { + /* + * Avoid overrun. Embedded aces can have one + * of several sizes. We don't know exactly + * how many our present, only the size of the + * buffer containing them. That size may be + * larger than needed to hold the aces + * present. As long as we do not do any + * swapping beyond the end of our block we are + * okay. It it safe to swap any non-ace data + * within the block since it is just zeros. + */ + if (ptr + sizeof (zfs_ace_hdr_t) > end) { + break; + } + zacep = (zfs_ace_t *)ptr; + zacep->z_hdr.z_access_mask = + BSWAP_32(zacep->z_hdr.z_access_mask); + zacep->z_hdr.z_flags = BSWAP_16(zacep->z_hdr.z_flags); + ace_type = zacep->z_hdr.z_type = + BSWAP_16(zacep->z_hdr.z_type); + entry_type = zacep->z_hdr.z_flags & ACE_TYPE_FLAGS; + } else { + /* Overrun avoidance */ + if (ptr + sizeof (ace_t) > end) { + break; + } + acep = (ace_t *)ptr; + acep->a_access_mask = BSWAP_32(acep->a_access_mask); + acep->a_flags = BSWAP_16(acep->a_flags); + ace_type = acep->a_type = BSWAP_16(acep->a_type); + acep->a_who = BSWAP_32(acep->a_who); + entry_type = acep->a_flags & ACE_TYPE_FLAGS; + } + switch (entry_type) { + case ACE_OWNER: + case ACE_EVERYONE: + case (ACE_IDENTIFIER_GROUP | ACE_GROUP): + entry_size = zfs_layout ? + sizeof (zfs_ace_hdr_t) : sizeof (ace_t); + break; + case ACE_IDENTIFIER_GROUP: + default: + /* Overrun avoidance */ + if (zfs_layout) { + if (ptr + sizeof (zfs_ace_t) <= end) { + zacep->z_fuid = BSWAP_64(zacep->z_fuid); + } else { + entry_size = sizeof (zfs_ace_t); + break; + } + } + switch (ace_type) { + case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE: + case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE: + case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE: + case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE: + entry_size = zfs_layout ? + sizeof (zfs_object_ace_t) : + sizeof (ace_object_t); + break; + default: + entry_size = zfs_layout ? sizeof (zfs_ace_t) : + sizeof (ace_t); + break; + } + } + ptr = ptr + entry_size; + } +} + +/* ARGSUSED */ +void +zfs_oldacl_byteswap(void *buf, size_t size) +{ + int cnt; + + /* + * Arggh, since we don't know how many ACEs are in + * the array, we have to swap the entire block + */ + + cnt = size / sizeof (ace_t); + + zfs_oldace_byteswap((ace_t *)buf, cnt); +} + +/* ARGSUSED */ +void +zfs_acl_byteswap(void *buf, size_t size) +{ + zfs_ace_byteswap(buf, size, B_TRUE); +} + +void +zfs_znode_byteswap(void *buf, size_t size) +{ + znode_phys_t *zp = buf; + + ASSERT(size >= sizeof (znode_phys_t)); + + zp->zp_crtime[0] = BSWAP_64(zp->zp_crtime[0]); + zp->zp_crtime[1] = BSWAP_64(zp->zp_crtime[1]); + zp->zp_atime[0] = BSWAP_64(zp->zp_atime[0]); + zp->zp_atime[1] = BSWAP_64(zp->zp_atime[1]); + zp->zp_mtime[0] = BSWAP_64(zp->zp_mtime[0]); + zp->zp_mtime[1] = BSWAP_64(zp->zp_mtime[1]); + zp->zp_ctime[0] = BSWAP_64(zp->zp_ctime[0]); + zp->zp_ctime[1] = BSWAP_64(zp->zp_ctime[1]); + zp->zp_gen = BSWAP_64(zp->zp_gen); + zp->zp_mode = BSWAP_64(zp->zp_mode); + zp->zp_size = BSWAP_64(zp->zp_size); + zp->zp_parent = BSWAP_64(zp->zp_parent); + zp->zp_links = BSWAP_64(zp->zp_links); + zp->zp_xattr = BSWAP_64(zp->zp_xattr); + zp->zp_rdev = BSWAP_64(zp->zp_rdev); + zp->zp_flags = BSWAP_64(zp->zp_flags); + zp->zp_uid = BSWAP_64(zp->zp_uid); + zp->zp_gid = BSWAP_64(zp->zp_gid); + zp->zp_zap = BSWAP_64(zp->zp_zap); + zp->zp_pad[0] = BSWAP_64(zp->zp_pad[0]); + zp->zp_pad[1] = BSWAP_64(zp->zp_pad[1]); + zp->zp_pad[2] = BSWAP_64(zp->zp_pad[2]); + + zp->zp_acl.z_acl_extern_obj = BSWAP_64(zp->zp_acl.z_acl_extern_obj); + zp->zp_acl.z_acl_size = BSWAP_32(zp->zp_acl.z_acl_size); + zp->zp_acl.z_acl_version = BSWAP_16(zp->zp_acl.z_acl_version); + zp->zp_acl.z_acl_count = BSWAP_16(zp->zp_acl.z_acl_count); + if (zp->zp_acl.z_acl_version == ZFS_ACL_VERSION) { + zfs_acl_byteswap((void *)&zp->zp_acl.z_ace_data[0], + ZFS_ACE_SPACE); + } else { + zfs_oldace_byteswap((ace_t *)&zp->zp_acl.z_ace_data[0], + ACE_SLOT_CNT); + } +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_oldacl_byteswap); +EXPORT_SYMBOL(zfs_acl_byteswap); +EXPORT_SYMBOL(zfs_znode_byteswap); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_ctldir.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_ctldir.c @@ -0,0 +1,1272 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * LLNL-CODE-403049. + * Rewritten for Linux by: + * Rohan Puri + * Brian Behlendorf + * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved. + */ + +/* + * ZFS control directory (a.k.a. ".zfs") + * + * This directory provides a common location for all ZFS meta-objects. + * Currently, this is only the 'snapshot' and 'shares' directory, but this may + * expand in the future. The elements are built dynamically, as the hierarchy + * does not actually exist on disk. + * + * For 'snapshot', we don't want to have all snapshots always mounted, because + * this would take up a huge amount of space in /etc/mnttab. We have three + * types of objects: + * + * ctldir ------> snapshotdir -------> snapshot + * | + * | + * V + * mounted fs + * + * The 'snapshot' node contains just enough information to lookup '..' and act + * as a mountpoint for the snapshot. Whenever we lookup a specific snapshot, we + * perform an automount of the underlying filesystem and return the + * corresponding inode. + * + * All mounts are handled automatically by an user mode helper which invokes + * the mount mount procedure. Unmounts are handled by allowing the mount + * point to expire so the kernel may automatically unmount it. + * + * The '.zfs', '.zfs/snapshot', and all directories created under + * '.zfs/snapshot' (ie: '.zfs/snapshot/') all share the same + * share the same zfsvfs_t as the head filesystem (what '.zfs' lives under). + * + * File systems mounted on top of the '.zfs/snapshot/' paths + * (ie: snapshots) are complete ZFS filesystems and have their own unique + * zfsvfs_t. However, the fsid reported by these mounts will be the same + * as that used by the parent zfsvfs_t to make NFS happy. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zfs_namecheck.h" + +/* + * Two AVL trees are maintained which contain all currently automounted + * snapshots. Every automounted snapshots maps to a single zfs_snapentry_t + * entry which MUST: + * + * - be attached to both trees, and + * - be unique, no duplicate entries are allowed. + * + * The zfs_snapshots_by_name tree is indexed by the full dataset name + * while the zfs_snapshots_by_objsetid tree is indexed by the unique + * objsetid. This allows for fast lookups either by name or objsetid. + */ +static avl_tree_t zfs_snapshots_by_name; +static avl_tree_t zfs_snapshots_by_objsetid; +static krwlock_t zfs_snapshot_lock; + +/* + * Control Directory Tunables (.zfs) + */ +int zfs_expire_snapshot = ZFSCTL_EXPIRE_SNAPSHOT; +int zfs_admin_snapshot = 1; + +typedef struct { + char *se_name; /* full snapshot name */ + char *se_path; /* full mount path */ + spa_t *se_spa; /* pool spa */ + uint64_t se_objsetid; /* snapshot objset id */ + struct dentry *se_root_dentry; /* snapshot root dentry */ + taskqid_t se_taskqid; /* scheduled unmount taskqid */ + avl_node_t se_node_name; /* zfs_snapshots_by_name link */ + avl_node_t se_node_objsetid; /* zfs_snapshots_by_objsetid link */ + refcount_t se_refcount; /* reference count */ +} zfs_snapentry_t; + +static void zfsctl_snapshot_unmount_delay_impl(zfs_snapentry_t *se, int delay); + +/* + * Allocate a new zfs_snapentry_t being careful to make a copy of the + * the snapshot name and provided mount point. No reference is taken. + */ +static zfs_snapentry_t * +zfsctl_snapshot_alloc(char *full_name, char *full_path, spa_t *spa, + uint64_t objsetid, struct dentry *root_dentry) +{ + zfs_snapentry_t *se; + + se = kmem_zalloc(sizeof (zfs_snapentry_t), KM_SLEEP); + + se->se_name = strdup(full_name); + se->se_path = strdup(full_path); + se->se_spa = spa; + se->se_objsetid = objsetid; + se->se_root_dentry = root_dentry; + se->se_taskqid = TASKQID_INVALID; + + refcount_create(&se->se_refcount); + + return (se); +} + +/* + * Free a zfs_snapentry_t the called must ensure there are no active + * references. + */ +static void +zfsctl_snapshot_free(zfs_snapentry_t *se) +{ + refcount_destroy(&se->se_refcount); + strfree(se->se_name); + strfree(se->se_path); + + kmem_free(se, sizeof (zfs_snapentry_t)); +} + +/* + * Hold a reference on the zfs_snapentry_t. + */ +static void +zfsctl_snapshot_hold(zfs_snapentry_t *se) +{ + refcount_add(&se->se_refcount, NULL); +} + +/* + * Release a reference on the zfs_snapentry_t. When the number of + * references drops to zero the structure will be freed. + */ +static void +zfsctl_snapshot_rele(zfs_snapentry_t *se) +{ + if (refcount_remove(&se->se_refcount, NULL) == 0) + zfsctl_snapshot_free(se); +} + +/* + * Add a zfs_snapentry_t to both the zfs_snapshots_by_name and + * zfs_snapshots_by_objsetid trees. While the zfs_snapentry_t is part + * of the trees a reference is held. + */ +static void +zfsctl_snapshot_add(zfs_snapentry_t *se) +{ + ASSERT(RW_WRITE_HELD(&zfs_snapshot_lock)); + refcount_add(&se->se_refcount, NULL); + avl_add(&zfs_snapshots_by_name, se); + avl_add(&zfs_snapshots_by_objsetid, se); +} + +/* + * Remove a zfs_snapentry_t from both the zfs_snapshots_by_name and + * zfs_snapshots_by_objsetid trees. Upon removal a reference is dropped, + * this can result in the structure being freed if that was the last + * remaining reference. + */ +static void +zfsctl_snapshot_remove(zfs_snapentry_t *se) +{ + ASSERT(RW_WRITE_HELD(&zfs_snapshot_lock)); + avl_remove(&zfs_snapshots_by_name, se); + avl_remove(&zfs_snapshots_by_objsetid, se); + zfsctl_snapshot_rele(se); +} + +/* + * Snapshot name comparison function for the zfs_snapshots_by_name. + */ +static int +snapentry_compare_by_name(const void *a, const void *b) +{ + const zfs_snapentry_t *se_a = a; + const zfs_snapentry_t *se_b = b; + int ret; + + ret = strcmp(se_a->se_name, se_b->se_name); + + if (ret < 0) + return (-1); + else if (ret > 0) + return (1); + else + return (0); +} + +/* + * Snapshot name comparison function for the zfs_snapshots_by_objsetid. + */ +static int +snapentry_compare_by_objsetid(const void *a, const void *b) +{ + const zfs_snapentry_t *se_a = a; + const zfs_snapentry_t *se_b = b; + + if (se_a->se_spa != se_b->se_spa) + return ((ulong_t)se_a->se_spa < (ulong_t)se_b->se_spa ? -1 : 1); + + if (se_a->se_objsetid < se_b->se_objsetid) + return (-1); + else if (se_a->se_objsetid > se_b->se_objsetid) + return (1); + else + return (0); +} + +/* + * Find a zfs_snapentry_t in zfs_snapshots_by_name. If the snapname + * is found a pointer to the zfs_snapentry_t is returned and a reference + * taken on the structure. The caller is responsible for dropping the + * reference with zfsctl_snapshot_rele(). If the snapname is not found + * NULL will be returned. + */ +static zfs_snapentry_t * +zfsctl_snapshot_find_by_name(char *snapname) +{ + zfs_snapentry_t *se, search; + + ASSERT(RW_LOCK_HELD(&zfs_snapshot_lock)); + + search.se_name = snapname; + se = avl_find(&zfs_snapshots_by_name, &search, NULL); + if (se) + refcount_add(&se->se_refcount, NULL); + + return (se); +} + +/* + * Find a zfs_snapentry_t in zfs_snapshots_by_objsetid given the objset id + * rather than the snapname. In all other respects it behaves the same + * as zfsctl_snapshot_find_by_name(). + */ +static zfs_snapentry_t * +zfsctl_snapshot_find_by_objsetid(spa_t *spa, uint64_t objsetid) +{ + zfs_snapentry_t *se, search; + + ASSERT(RW_LOCK_HELD(&zfs_snapshot_lock)); + + search.se_spa = spa; + search.se_objsetid = objsetid; + se = avl_find(&zfs_snapshots_by_objsetid, &search, NULL); + if (se) + refcount_add(&se->se_refcount, NULL); + + return (se); +} + +/* + * Rename a zfs_snapentry_t in the zfs_snapshots_by_name. The structure is + * removed, renamed, and added back to the new correct location in the tree. + */ +static int +zfsctl_snapshot_rename(char *old_snapname, char *new_snapname) +{ + zfs_snapentry_t *se; + + ASSERT(RW_WRITE_HELD(&zfs_snapshot_lock)); + + se = zfsctl_snapshot_find_by_name(old_snapname); + if (se == NULL) + return (ENOENT); + + zfsctl_snapshot_remove(se); + strfree(se->se_name); + se->se_name = strdup(new_snapname); + zfsctl_snapshot_add(se); + zfsctl_snapshot_rele(se); + + return (0); +} + +/* + * Delayed task responsible for unmounting an expired automounted snapshot. + */ +static void +snapentry_expire(void *data) +{ + zfs_snapentry_t *se = (zfs_snapentry_t *)data; + spa_t *spa = se->se_spa; + uint64_t objsetid = se->se_objsetid; + + if (zfs_expire_snapshot <= 0) { + zfsctl_snapshot_rele(se); + return; + } + + se->se_taskqid = TASKQID_INVALID; + (void) zfsctl_snapshot_unmount(se->se_name, MNT_EXPIRE); + zfsctl_snapshot_rele(se); + + /* + * Reschedule the unmount if the zfs_snapentry_t wasn't removed. + * This can occur when the snapshot is busy. + */ + rw_enter(&zfs_snapshot_lock, RW_READER); + if ((se = zfsctl_snapshot_find_by_objsetid(spa, objsetid)) != NULL) { + zfsctl_snapshot_unmount_delay_impl(se, zfs_expire_snapshot); + zfsctl_snapshot_rele(se); + } + rw_exit(&zfs_snapshot_lock); +} + +/* + * Cancel an automatic unmount of a snapname. This callback is responsible + * for dropping the reference on the zfs_snapentry_t which was taken when + * during dispatch. + */ +static void +zfsctl_snapshot_unmount_cancel(zfs_snapentry_t *se) +{ + ASSERT(RW_LOCK_HELD(&zfs_snapshot_lock)); + + if (taskq_cancel_id(system_delay_taskq, se->se_taskqid) == 0) { + se->se_taskqid = TASKQID_INVALID; + zfsctl_snapshot_rele(se); + } +} + +/* + * Dispatch the unmount task for delayed handling with a hold protecting it. + */ +static void +zfsctl_snapshot_unmount_delay_impl(zfs_snapentry_t *se, int delay) +{ + ASSERT3S(se->se_taskqid, ==, TASKQID_INVALID); + + if (delay <= 0) + return; + + zfsctl_snapshot_hold(se); + se->se_taskqid = taskq_dispatch_delay(system_delay_taskq, + snapentry_expire, se, TQ_SLEEP, ddi_get_lbolt() + delay * HZ); +} + +/* + * Schedule an automatic unmount of objset id to occur in delay seconds from + * now. Any previous delayed unmount will be cancelled in favor of the + * updated deadline. A reference is taken by zfsctl_snapshot_find_by_name() + * and held until the outstanding task is handled or cancelled. + */ +int +zfsctl_snapshot_unmount_delay(spa_t *spa, uint64_t objsetid, int delay) +{ + zfs_snapentry_t *se; + int error = ENOENT; + + rw_enter(&zfs_snapshot_lock, RW_READER); + if ((se = zfsctl_snapshot_find_by_objsetid(spa, objsetid)) != NULL) { + zfsctl_snapshot_unmount_cancel(se); + zfsctl_snapshot_unmount_delay_impl(se, delay); + zfsctl_snapshot_rele(se); + error = 0; + } + rw_exit(&zfs_snapshot_lock); + + return (error); +} + +/* + * Check if snapname is currently mounted. Returned non-zero when mounted + * and zero when unmounted. + */ +static boolean_t +zfsctl_snapshot_ismounted(char *snapname) +{ + zfs_snapentry_t *se; + boolean_t ismounted = B_FALSE; + + rw_enter(&zfs_snapshot_lock, RW_READER); + if ((se = zfsctl_snapshot_find_by_name(snapname)) != NULL) { + zfsctl_snapshot_rele(se); + ismounted = B_TRUE; + } + rw_exit(&zfs_snapshot_lock); + + return (ismounted); +} + +/* + * Check if the given inode is a part of the virtual .zfs directory. + */ +boolean_t +zfsctl_is_node(struct inode *ip) +{ + return (ITOZ(ip)->z_is_ctldir); +} + +/* + * Check if the given inode is a .zfs/snapshots/snapname directory. + */ +boolean_t +zfsctl_is_snapdir(struct inode *ip) +{ + return (zfsctl_is_node(ip) && (ip->i_ino <= ZFSCTL_INO_SNAPDIRS)); +} + +/* + * Allocate a new inode with the passed id and ops. + */ +static struct inode * +zfsctl_inode_alloc(zfsvfs_t *zfsvfs, uint64_t id, + const struct file_operations *fops, const struct inode_operations *ops) +{ + struct timespec now; + struct inode *ip; + znode_t *zp; + + ip = new_inode(zfsvfs->z_sb); + if (ip == NULL) + return (NULL); + + now = current_time(ip); + zp = ITOZ(ip); + ASSERT3P(zp->z_dirlocks, ==, NULL); + ASSERT3P(zp->z_acl_cached, ==, NULL); + ASSERT3P(zp->z_xattr_cached, ==, NULL); + zp->z_id = id; + zp->z_unlinked = 0; + zp->z_atime_dirty = 0; + zp->z_zn_prefetch = 0; + zp->z_moved = 0; + zp->z_sa_hdl = NULL; + zp->z_blksz = 0; + zp->z_seq = 0; + zp->z_mapcnt = 0; + zp->z_size = 0; + zp->z_pflags = 0; + zp->z_mode = 0; + zp->z_sync_cnt = 0; + zp->z_is_mapped = B_FALSE; + zp->z_is_ctldir = B_TRUE; + zp->z_is_sa = B_FALSE; + zp->z_is_stale = B_FALSE; + ip->i_generation = 0; + ip->i_ino = id; + ip->i_mode = (S_IFDIR | S_IRWXUGO); + ip->i_uid = SUID_TO_KUID(0); + ip->i_gid = SGID_TO_KGID(0); + ip->i_blkbits = SPA_MINBLOCKSHIFT; + ip->i_atime = now; + ip->i_mtime = now; + ip->i_ctime = now; + ip->i_fop = fops; + ip->i_op = ops; +#if defined(IOP_XATTR) + ip->i_opflags &= ~IOP_XATTR; +#endif + + if (insert_inode_locked(ip)) { + unlock_new_inode(ip); + iput(ip); + return (NULL); + } + + mutex_enter(&zfsvfs->z_znodes_lock); + list_insert_tail(&zfsvfs->z_all_znodes, zp); + zfsvfs->z_nr_znodes++; + membar_producer(); + mutex_exit(&zfsvfs->z_znodes_lock); + + unlock_new_inode(ip); + + return (ip); +} + +/* + * Lookup the inode with given id, it will be allocated if needed. + */ +static struct inode * +zfsctl_inode_lookup(zfsvfs_t *zfsvfs, uint64_t id, + const struct file_operations *fops, const struct inode_operations *ops) +{ + struct inode *ip = NULL; + + while (ip == NULL) { + ip = ilookup(zfsvfs->z_sb, (unsigned long)id); + if (ip) + break; + + /* May fail due to concurrent zfsctl_inode_alloc() */ + ip = zfsctl_inode_alloc(zfsvfs, id, fops, ops); + } + + return (ip); +} + +/* + * Create the '.zfs' directory. This directory is cached as part of the VFS + * structure. This results in a hold on the zfsvfs_t. The code in zfs_umount() + * therefore checks against a vfs_count of 2 instead of 1. This reference + * is removed when the ctldir is destroyed in the unmount. All other entities + * under the '.zfs' directory are created dynamically as needed. + * + * Because the dynamically created '.zfs' directory entries assume the use + * of 64-bit inode numbers this support must be disabled on 32-bit systems. + */ +int +zfsctl_create(zfsvfs_t *zfsvfs) +{ + ASSERT(zfsvfs->z_ctldir == NULL); + + zfsvfs->z_ctldir = zfsctl_inode_alloc(zfsvfs, ZFSCTL_INO_ROOT, + &zpl_fops_root, &zpl_ops_root); + if (zfsvfs->z_ctldir == NULL) + return (SET_ERROR(ENOENT)); + + return (0); +} + +/* + * Destroy the '.zfs' directory or remove a snapshot from zfs_snapshots_by_name. + * Only called when the filesystem is unmounted. + */ +void +zfsctl_destroy(zfsvfs_t *zfsvfs) +{ + if (zfsvfs->z_issnap) { + zfs_snapentry_t *se; + spa_t *spa = zfsvfs->z_os->os_spa; + uint64_t objsetid = dmu_objset_id(zfsvfs->z_os); + + rw_enter(&zfs_snapshot_lock, RW_WRITER); + if ((se = zfsctl_snapshot_find_by_objsetid(spa, objsetid)) + != NULL) { + zfsctl_snapshot_unmount_cancel(se); + zfsctl_snapshot_remove(se); + zfsctl_snapshot_rele(se); + } + rw_exit(&zfs_snapshot_lock); + } else if (zfsvfs->z_ctldir) { + iput(zfsvfs->z_ctldir); + zfsvfs->z_ctldir = NULL; + } +} + +/* + * Given a root znode, retrieve the associated .zfs directory. + * Add a hold to the vnode and return it. + */ +struct inode * +zfsctl_root(znode_t *zp) +{ + ASSERT(zfs_has_ctldir(zp)); + igrab(ZTOZSB(zp)->z_ctldir); + return (ZTOZSB(zp)->z_ctldir); +} + +/* + * Generate a long fid to indicate a snapdir. We encode whether snapdir is + * already monunted in gen field. We do this because nfsd lookup will not + * trigger automount. Next time the nfsd does fh_to_dentry, we will notice + * this and do automount and return ESTALE to force nfsd revalidate and follow + * mount. + */ +static int +zfsctl_snapdir_fid(struct inode *ip, fid_t *fidp) +{ + zfid_short_t *zfid = (zfid_short_t *)fidp; + zfid_long_t *zlfid = (zfid_long_t *)fidp; + uint32_t gen = 0; + uint64_t object; + uint64_t objsetid; + int i; + struct dentry *dentry; + + if (fidp->fid_len < LONG_FID_LEN) { + fidp->fid_len = LONG_FID_LEN; + return (SET_ERROR(ENOSPC)); + } + + object = ip->i_ino; + objsetid = ZFSCTL_INO_SNAPDIRS - ip->i_ino; + zfid->zf_len = LONG_FID_LEN; + + dentry = d_obtain_alias(igrab(ip)); + if (!IS_ERR(dentry)) { + gen = !!d_mountpoint(dentry); + dput(dentry); + } + + for (i = 0; i < sizeof (zfid->zf_object); i++) + zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); + + for (i = 0; i < sizeof (zfid->zf_gen); i++) + zfid->zf_gen[i] = (uint8_t)(gen >> (8 * i)); + + for (i = 0; i < sizeof (zlfid->zf_setid); i++) + zlfid->zf_setid[i] = (uint8_t)(objsetid >> (8 * i)); + + for (i = 0; i < sizeof (zlfid->zf_setgen); i++) + zlfid->zf_setgen[i] = 0; + + return (0); +} + +/* + * Generate an appropriate fid for an entry in the .zfs directory. + */ +int +zfsctl_fid(struct inode *ip, fid_t *fidp) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + uint64_t object = zp->z_id; + zfid_short_t *zfid; + int i; + + ZFS_ENTER(zfsvfs); + + if (zfsctl_is_snapdir(ip)) { + ZFS_EXIT(zfsvfs); + return (zfsctl_snapdir_fid(ip, fidp)); + } + + if (fidp->fid_len < SHORT_FID_LEN) { + fidp->fid_len = SHORT_FID_LEN; + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENOSPC)); + } + + zfid = (zfid_short_t *)fidp; + + zfid->zf_len = SHORT_FID_LEN; + + for (i = 0; i < sizeof (zfid->zf_object); i++) + zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); + + /* .zfs znodes always have a generation number of 0 */ + for (i = 0; i < sizeof (zfid->zf_gen); i++) + zfid->zf_gen[i] = 0; + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * Construct a full dataset name in full_name: "pool/dataset@snap_name" + */ +static int +zfsctl_snapshot_name(zfsvfs_t *zfsvfs, const char *snap_name, int len, + char *full_name) +{ + objset_t *os = zfsvfs->z_os; + + if (zfs_component_namecheck(snap_name, NULL, NULL) != 0) + return (SET_ERROR(EILSEQ)); + + dmu_objset_name(os, full_name); + if ((strlen(full_name) + 1 + strlen(snap_name)) >= len) + return (SET_ERROR(ENAMETOOLONG)); + + (void) strcat(full_name, "@"); + (void) strcat(full_name, snap_name); + + return (0); +} + +/* + * Returns full path in full_path: "/pool/dataset/.zfs/snapshot/snap_name/" + */ +static int +zfsctl_snapshot_path(struct path *path, int len, char *full_path) +{ + char *path_buffer, *path_ptr; + int path_len, error = 0; + + path_buffer = kmem_alloc(len, KM_SLEEP); + + path_ptr = d_path(path, path_buffer, len); + if (IS_ERR(path_ptr)) { + error = -PTR_ERR(path_ptr); + goto out; + } + + path_len = path_buffer + len - 1 - path_ptr; + if (path_len > len) { + error = SET_ERROR(EFAULT); + goto out; + } + + memcpy(full_path, path_ptr, path_len); + full_path[path_len] = '\0'; +out: + kmem_free(path_buffer, len); + + return (error); +} + +/* + * Returns full path in full_path: "/pool/dataset/.zfs/snapshot/snap_name/" + */ +static int +zfsctl_snapshot_path_objset(zfsvfs_t *zfsvfs, uint64_t objsetid, + int path_len, char *full_path) +{ + objset_t *os = zfsvfs->z_os; + fstrans_cookie_t cookie; + char *snapname; + boolean_t case_conflict; + uint64_t id, pos = 0; + int error = 0; + + if (zfsvfs->z_vfs->vfs_mntpoint == NULL) + return (ENOENT); + + cookie = spl_fstrans_mark(); + snapname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + + while (error == 0) { + dsl_pool_config_enter(dmu_objset_pool(os), FTAG); + error = dmu_snapshot_list_next(zfsvfs->z_os, + ZFS_MAX_DATASET_NAME_LEN, snapname, &id, &pos, + &case_conflict); + dsl_pool_config_exit(dmu_objset_pool(os), FTAG); + if (error) + goto out; + + if (id == objsetid) + break; + } + + memset(full_path, 0, path_len); + snprintf(full_path, path_len - 1, "%s/.zfs/snapshot/%s", + zfsvfs->z_vfs->vfs_mntpoint, snapname); +out: + kmem_free(snapname, ZFS_MAX_DATASET_NAME_LEN); + spl_fstrans_unmark(cookie); + + return (error); +} + +/* + * Special case the handling of "..". + */ +int +zfsctl_root_lookup(struct inode *dip, char *name, struct inode **ipp, + int flags, cred_t *cr, int *direntflags, pathname_t *realpnp) +{ + zfsvfs_t *zfsvfs = ITOZSB(dip); + int error = 0; + + ZFS_ENTER(zfsvfs); + + if (strcmp(name, "..") == 0) { + *ipp = dip->i_sb->s_root->d_inode; + } else if (strcmp(name, ZFS_SNAPDIR_NAME) == 0) { + *ipp = zfsctl_inode_lookup(zfsvfs, ZFSCTL_INO_SNAPDIR, + &zpl_fops_snapdir, &zpl_ops_snapdir); + } else if (strcmp(name, ZFS_SHAREDIR_NAME) == 0) { + *ipp = zfsctl_inode_lookup(zfsvfs, ZFSCTL_INO_SHARES, + &zpl_fops_shares, &zpl_ops_shares); + } else { + *ipp = NULL; + } + + if (*ipp == NULL) + error = SET_ERROR(ENOENT); + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Lookup entry point for the 'snapshot' directory. Try to open the + * snapshot if it exist, creating the pseudo filesystem inode as necessary. + * Perform a mount of the associated dataset on top of the inode. + */ +int +zfsctl_snapdir_lookup(struct inode *dip, char *name, struct inode **ipp, + int flags, cred_t *cr, int *direntflags, pathname_t *realpnp) +{ + zfsvfs_t *zfsvfs = ITOZSB(dip); + uint64_t id; + int error; + + ZFS_ENTER(zfsvfs); + + error = dmu_snapshot_lookup(zfsvfs->z_os, name, &id); + if (error) { + ZFS_EXIT(zfsvfs); + return (error); + } + + *ipp = zfsctl_inode_lookup(zfsvfs, ZFSCTL_INO_SNAPDIRS - id, + &simple_dir_operations, &simple_dir_inode_operations); + if (*ipp == NULL) + error = SET_ERROR(ENOENT); + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Renaming a directory under '.zfs/snapshot' will automatically trigger + * a rename of the snapshot to the new given name. The rename is confined + * to the '.zfs/snapshot' directory snapshots cannot be moved elsewhere. + */ +int +zfsctl_snapdir_rename(struct inode *sdip, char *snm, + struct inode *tdip, char *tnm, cred_t *cr, int flags) +{ + zfsvfs_t *zfsvfs = ITOZSB(sdip); + char *to, *from, *real, *fsname; + int error; + + if (!zfs_admin_snapshot) + return (EACCES); + + ZFS_ENTER(zfsvfs); + + to = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + from = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + real = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + fsname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + + if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { + error = dmu_snapshot_realname(zfsvfs->z_os, snm, real, + ZFS_MAX_DATASET_NAME_LEN, NULL); + if (error == 0) { + snm = real; + } else if (error != ENOTSUP) { + goto out; + } + } + + dmu_objset_name(zfsvfs->z_os, fsname); + + error = zfsctl_snapshot_name(ITOZSB(sdip), snm, + ZFS_MAX_DATASET_NAME_LEN, from); + if (error == 0) + error = zfsctl_snapshot_name(ITOZSB(tdip), tnm, + ZFS_MAX_DATASET_NAME_LEN, to); + if (error == 0) + error = zfs_secpolicy_rename_perms(from, to, cr); + if (error != 0) + goto out; + + /* + * Cannot move snapshots out of the snapdir. + */ + if (sdip != tdip) { + error = SET_ERROR(EINVAL); + goto out; + } + + /* + * No-op when names are identical. + */ + if (strcmp(snm, tnm) == 0) { + error = 0; + goto out; + } + + rw_enter(&zfs_snapshot_lock, RW_WRITER); + + error = dsl_dataset_rename_snapshot(fsname, snm, tnm, B_FALSE); + if (error == 0) + (void) zfsctl_snapshot_rename(snm, tnm); + + rw_exit(&zfs_snapshot_lock); +out: + kmem_free(from, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(to, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(real, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(fsname, ZFS_MAX_DATASET_NAME_LEN); + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Removing a directory under '.zfs/snapshot' will automatically trigger + * the removal of the snapshot with the given name. + */ +int +zfsctl_snapdir_remove(struct inode *dip, char *name, cred_t *cr, int flags) +{ + zfsvfs_t *zfsvfs = ITOZSB(dip); + char *snapname, *real; + int error; + + if (!zfs_admin_snapshot) + return (EACCES); + + ZFS_ENTER(zfsvfs); + + snapname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + real = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + + if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { + error = dmu_snapshot_realname(zfsvfs->z_os, name, real, + ZFS_MAX_DATASET_NAME_LEN, NULL); + if (error == 0) { + name = real; + } else if (error != ENOTSUP) { + goto out; + } + } + + error = zfsctl_snapshot_name(ITOZSB(dip), name, + ZFS_MAX_DATASET_NAME_LEN, snapname); + if (error == 0) + error = zfs_secpolicy_destroy_perms(snapname, cr); + if (error != 0) + goto out; + + error = zfsctl_snapshot_unmount(snapname, MNT_FORCE); + if ((error == 0) || (error == ENOENT)) + error = dsl_destroy_snapshot(snapname, B_FALSE); +out: + kmem_free(snapname, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(real, ZFS_MAX_DATASET_NAME_LEN); + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Creating a directory under '.zfs/snapshot' will automatically trigger + * the creation of a new snapshot with the given name. + */ +int +zfsctl_snapdir_mkdir(struct inode *dip, char *dirname, vattr_t *vap, + struct inode **ipp, cred_t *cr, int flags) +{ + zfsvfs_t *zfsvfs = ITOZSB(dip); + char *dsname; + int error; + + if (!zfs_admin_snapshot) + return (EACCES); + + dsname = kmem_alloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + + if (zfs_component_namecheck(dirname, NULL, NULL) != 0) { + error = SET_ERROR(EILSEQ); + goto out; + } + + dmu_objset_name(zfsvfs->z_os, dsname); + + error = zfs_secpolicy_snapshot_perms(dsname, cr); + if (error != 0) + goto out; + + if (error == 0) { + error = dmu_objset_snapshot_one(dsname, dirname); + if (error != 0) + goto out; + + error = zfsctl_snapdir_lookup(dip, dirname, ipp, + 0, cr, NULL, NULL); + } +out: + kmem_free(dsname, ZFS_MAX_DATASET_NAME_LEN); + + return (error); +} + +/* + * Attempt to unmount a snapshot by making a call to user space. + * There is no assurance that this can or will succeed, is just a + * best effort. In the case where it does fail, perhaps because + * it's in use, the unmount will fail harmlessly. + */ +int +zfsctl_snapshot_unmount(char *snapname, int flags) +{ + char *argv[] = { "/usr/bin/env", "umount", "-t", "zfs", "-n", NULL, + NULL }; + char *envp[] = { NULL }; + zfs_snapentry_t *se; + int error; + + rw_enter(&zfs_snapshot_lock, RW_READER); + if ((se = zfsctl_snapshot_find_by_name(snapname)) == NULL) { + rw_exit(&zfs_snapshot_lock); + return (ENOENT); + } + rw_exit(&zfs_snapshot_lock); + + if (flags & MNT_FORCE) + argv[4] = "-fn"; + argv[5] = se->se_path; + dprintf("unmount; path=%s\n", se->se_path); + error = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); + zfsctl_snapshot_rele(se); + + + /* + * The umount system utility will return 256 on error. We must + * assume this error is because the file system is busy so it is + * converted to the more sensible EBUSY. + */ + if (error) + error = SET_ERROR(EBUSY); + + return (error); +} + +#define MOUNT_BUSY 0x80 /* Mount failed due to EBUSY (from mntent.h) */ + +int +zfsctl_snapshot_mount(struct path *path, int flags) +{ + struct dentry *dentry = path->dentry; + struct inode *ip = dentry->d_inode; + zfsvfs_t *zfsvfs; + zfsvfs_t *snap_zfsvfs; + zfs_snapentry_t *se; + char *full_name, *full_path; + char *argv[] = { "/usr/bin/env", "mount", "-t", "zfs", "-n", NULL, NULL, + NULL }; + char *envp[] = { NULL }; + int error; + struct path spath; + + if (ip == NULL) + return (EISDIR); + + zfsvfs = ITOZSB(ip); + ZFS_ENTER(zfsvfs); + + full_name = kmem_zalloc(ZFS_MAX_DATASET_NAME_LEN, KM_SLEEP); + full_path = kmem_zalloc(MAXPATHLEN, KM_SLEEP); + + error = zfsctl_snapshot_name(zfsvfs, dname(dentry), + ZFS_MAX_DATASET_NAME_LEN, full_name); + if (error) + goto error; + + error = zfsctl_snapshot_path(path, MAXPATHLEN, full_path); + if (error) + goto error; + + /* + * Multiple concurrent automounts of a snapshot are never allowed. + * The snapshot may be manually mounted as many times as desired. + */ + if (zfsctl_snapshot_ismounted(full_name)) { + error = 0; + goto error; + } + + /* + * Attempt to mount the snapshot from user space. Normally this + * would be done using the vfs_kern_mount() function, however that + * function is marked GPL-only and cannot be used. On error we + * careful to log the real error to the console and return EISDIR + * to safely abort the automount. This should be very rare. + * + * If the user mode helper happens to return EBUSY, a concurrent + * mount is already in progress in which case the error is ignored. + * Take note that if the program was executed successfully the return + * value from call_usermodehelper() will be (exitcode << 8 + signal). + */ + dprintf("mount; name=%s path=%s\n", full_name, full_path); + argv[5] = full_name; + argv[6] = full_path; + error = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); + if (error) { + if (!(error & MOUNT_BUSY << 8)) { + cmn_err(CE_WARN, "Unable to automount %s/%s: %d", + full_path, full_name, error); + error = SET_ERROR(EISDIR); + } else { + /* + * EBUSY, this could mean a concurrent mount, or the + * snapshot has already been mounted at completely + * different place. We return 0 so VFS will retry. For + * the latter case the VFS will retry several times + * and return ELOOP, which is probably not a very good + * behavior. + */ + error = 0; + } + goto error; + } + + /* + * Follow down in to the mounted snapshot and set MNT_SHRINKABLE + * to identify this as an automounted filesystem. + */ + spath = *path; + path_get(&spath); + if (zpl_follow_down_one(&spath)) { + snap_zfsvfs = ITOZSB(spath.dentry->d_inode); + snap_zfsvfs->z_parent = zfsvfs; + dentry = spath.dentry; + spath.mnt->mnt_flags |= MNT_SHRINKABLE; + + rw_enter(&zfs_snapshot_lock, RW_WRITER); + se = zfsctl_snapshot_alloc(full_name, full_path, + snap_zfsvfs->z_os->os_spa, dmu_objset_id(snap_zfsvfs->z_os), + dentry); + zfsctl_snapshot_add(se); + zfsctl_snapshot_unmount_delay_impl(se, zfs_expire_snapshot); + rw_exit(&zfs_snapshot_lock); + } + path_put(&spath); +error: + kmem_free(full_name, ZFS_MAX_DATASET_NAME_LEN); + kmem_free(full_path, MAXPATHLEN); + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Get the snapdir inode from fid + */ +int +zfsctl_snapdir_vget(struct super_block *sb, uint64_t objsetid, int gen, + struct inode **ipp) +{ + int error; + struct path path; + char *mnt; + struct dentry *dentry; + + mnt = kmem_alloc(MAXPATHLEN, KM_SLEEP); + + error = zfsctl_snapshot_path_objset(sb->s_fs_info, objsetid, + MAXPATHLEN, mnt); + if (error) + goto out; + + /* Trigger automount */ + error = kern_path(mnt, LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &path); + if (error) + goto out; + + path_put(&path); + /* + * Get the snapdir inode. Note, we don't want to use the above + * path because it contains the root of the snapshot rather + * than the snapdir. + */ + *ipp = ilookup(sb, ZFSCTL_INO_SNAPDIRS - objsetid); + if (*ipp == NULL) { + error = SET_ERROR(ENOENT); + goto out; + } + + /* check gen, see zfsctl_snapdir_fid */ + dentry = d_obtain_alias(igrab(*ipp)); + if (gen != (!IS_ERR(dentry) && d_mountpoint(dentry))) { + iput(*ipp); + *ipp = NULL; + error = SET_ERROR(ENOENT); + } + if (!IS_ERR(dentry)) + dput(dentry); +out: + kmem_free(mnt, MAXPATHLEN); + return (error); +} + +int +zfsctl_shares_lookup(struct inode *dip, char *name, struct inode **ipp, + int flags, cred_t *cr, int *direntflags, pathname_t *realpnp) +{ + zfsvfs_t *zfsvfs = ITOZSB(dip); + struct inode *ip; + znode_t *dzp; + int error; + + ZFS_ENTER(zfsvfs); + + if (zfsvfs->z_shares_dir == 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENOTSUP)); + } + + if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp)) == 0) { + error = zfs_lookup(ZTOI(dzp), name, &ip, 0, cr, NULL, NULL); + iput(ZTOI(dzp)); + } + + ZFS_EXIT(zfsvfs); + + return (error); +} + +/* + * Initialize the various pieces we'll need to create and manipulate .zfs + * directories. Currently this is unused but available. + */ +void +zfsctl_init(void) +{ + avl_create(&zfs_snapshots_by_name, snapentry_compare_by_name, + sizeof (zfs_snapentry_t), offsetof(zfs_snapentry_t, + se_node_name)); + avl_create(&zfs_snapshots_by_objsetid, snapentry_compare_by_objsetid, + sizeof (zfs_snapentry_t), offsetof(zfs_snapentry_t, + se_node_objsetid)); + rw_init(&zfs_snapshot_lock, NULL, RW_DEFAULT, NULL); +} + +/* + * Cleanup the various pieces we needed for .zfs directories. In particular + * ensure the expiry timer is canceled safely. + */ +void +zfsctl_fini(void) +{ + avl_destroy(&zfs_snapshots_by_name); + avl_destroy(&zfs_snapshots_by_objsetid); + rw_destroy(&zfs_snapshot_lock); +} + +module_param(zfs_admin_snapshot, int, 0644); +MODULE_PARM_DESC(zfs_admin_snapshot, "Enable mkdir/rmdir/mv in .zfs/snapshot"); + +module_param(zfs_expire_snapshot, int, 0644); +MODULE_PARM_DESC(zfs_expire_snapshot, "Seconds to expire .zfs/snapshot"); --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_debug.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_debug.c @@ -0,0 +1,266 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +#include +#include + +list_t zfs_dbgmsgs; +int zfs_dbgmsg_size = 0; +kmutex_t zfs_dbgmsgs_lock; +int zfs_dbgmsg_maxsize = 4<<20; /* 4MB */ +kstat_t *zfs_dbgmsg_kstat; + +/* + * By default only enable the internal ZFS debug messages when running + * in userspace (ztest). The kernel log must be manually enabled. + * + * # Enable the kernel debug message log. + * echo 1 > /sys/module/zfs/parameters/zfs_dbgmsg_enable + * + * # Clear the kernel debug message log. + * echo 0 >/proc/spl/kstat/zfs/dbgmsg + */ +#if defined(_KERNEL) && !defined(ZFS_DEBUG) +int zfs_dbgmsg_enable = 0; +#else +int zfs_dbgmsg_enable = 1; +#endif + +static int +zfs_dbgmsg_headers(char *buf, size_t size) +{ + (void) snprintf(buf, size, "%-12s %-8s\n", "timestamp", "message"); + + return (0); +} + +static int +zfs_dbgmsg_data(char *buf, size_t size, void *data) +{ + zfs_dbgmsg_t *zdm = (zfs_dbgmsg_t *)data; + + (void) snprintf(buf, size, "%-12llu %-s\n", + (u_longlong_t)zdm->zdm_timestamp, zdm->zdm_msg); + + return (0); +} + +static void * +zfs_dbgmsg_addr(kstat_t *ksp, loff_t n) +{ + zfs_dbgmsg_t *zdm = (zfs_dbgmsg_t *)ksp->ks_private; + + ASSERT(MUTEX_HELD(&zfs_dbgmsgs_lock)); + + if (n == 0) + ksp->ks_private = list_head(&zfs_dbgmsgs); + else if (zdm) + ksp->ks_private = list_next(&zfs_dbgmsgs, zdm); + + return (ksp->ks_private); +} + +static void +zfs_dbgmsg_purge(int max_size) +{ + zfs_dbgmsg_t *zdm; + int size; + + ASSERT(MUTEX_HELD(&zfs_dbgmsgs_lock)); + + while (zfs_dbgmsg_size > max_size) { + zdm = list_remove_head(&zfs_dbgmsgs); + if (zdm == NULL) + return; + + size = zdm->zdm_size; + kmem_free(zdm, size); + zfs_dbgmsg_size -= size; + } +} + +static int +zfs_dbgmsg_update(kstat_t *ksp, int rw) +{ + if (rw == KSTAT_WRITE) + zfs_dbgmsg_purge(0); + + return (0); +} + +void +zfs_dbgmsg_init(void) +{ + list_create(&zfs_dbgmsgs, sizeof (zfs_dbgmsg_t), + offsetof(zfs_dbgmsg_t, zdm_node)); + mutex_init(&zfs_dbgmsgs_lock, NULL, MUTEX_DEFAULT, NULL); + + zfs_dbgmsg_kstat = kstat_create("zfs", 0, "dbgmsg", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + if (zfs_dbgmsg_kstat) { + zfs_dbgmsg_kstat->ks_lock = &zfs_dbgmsgs_lock; + zfs_dbgmsg_kstat->ks_ndata = UINT32_MAX; + zfs_dbgmsg_kstat->ks_private = NULL; + zfs_dbgmsg_kstat->ks_update = zfs_dbgmsg_update; + kstat_set_raw_ops(zfs_dbgmsg_kstat, zfs_dbgmsg_headers, + zfs_dbgmsg_data, zfs_dbgmsg_addr); + kstat_install(zfs_dbgmsg_kstat); + } +} + +void +zfs_dbgmsg_fini(void) +{ + if (zfs_dbgmsg_kstat) + kstat_delete(zfs_dbgmsg_kstat); + + mutex_enter(&zfs_dbgmsgs_lock); + zfs_dbgmsg_purge(0); + mutex_exit(&zfs_dbgmsgs_lock); + mutex_destroy(&zfs_dbgmsgs_lock); +} + +void +__zfs_dbgmsg(char *buf) +{ + zfs_dbgmsg_t *zdm; + int size; + + size = sizeof (zfs_dbgmsg_t) + strlen(buf); + zdm = kmem_zalloc(size, KM_SLEEP); + zdm->zdm_size = size; + zdm->zdm_timestamp = gethrestime_sec(); + strcpy(zdm->zdm_msg, buf); + + mutex_enter(&zfs_dbgmsgs_lock); + list_insert_tail(&zfs_dbgmsgs, zdm); + zfs_dbgmsg_size += size; + zfs_dbgmsg_purge(MAX(zfs_dbgmsg_maxsize, 0)); + mutex_exit(&zfs_dbgmsgs_lock); +} + +void +__set_error(const char *file, const char *func, int line, int err) +{ + if (zfs_flags & ZFS_DEBUG_SET_ERROR) + __dprintf(file, func, line, "error %lu", err); +} + +#ifdef _KERNEL +void +__dprintf(const char *file, const char *func, int line, const char *fmt, ...) +{ + const char *newfile; + va_list adx; + size_t size; + char *buf; + char *nl; + int i; + + if (!zfs_dbgmsg_enable && + !(zfs_flags & (ZFS_DEBUG_DPRINTF | ZFS_DEBUG_SET_ERROR))) + return; + + size = 1024; + buf = kmem_alloc(size, KM_SLEEP); + + /* + * Get rid of annoying prefix to filename. + */ + newfile = strrchr(file, '/'); + if (newfile != NULL) { + newfile = newfile + 1; /* Get rid of leading / */ + } else { + newfile = file; + } + + i = snprintf(buf, size, "%s:%d:%s(): ", newfile, line, func); + + if (i < size) { + va_start(adx, fmt); + (void) vsnprintf(buf + i, size - i, fmt, adx); + va_end(adx); + } + + /* + * Get rid of trailing newline. + */ + nl = strrchr(buf, '\n'); + if (nl != NULL) + *nl = '\0'; + + /* + * To get this data enable the zfs__dprintf trace point as shown: + * + * # Enable zfs__dprintf tracepoint, clear the tracepoint ring buffer + * $ echo 1 > /sys/module/zfs/parameters/zfs_flags + * $ echo 1 > /sys/kernel/debug/tracing/events/zfs/enable + * $ echo 0 > /sys/kernel/debug/tracing/trace + * + * # Dump the ring buffer. + * $ cat /sys/kernel/debug/tracing/trace + */ + if (zfs_flags & (ZFS_DEBUG_DPRINTF | ZFS_DEBUG_SET_ERROR)) + DTRACE_PROBE1(zfs__dprintf, char *, buf); + + /* + * To get this data enable the zfs debug log as shown: + * + * # Set zfs_dbgmsg enable, clear the log buffer + * $ echo 1 > /sys/module/zfs/parameters/zfs_dbgmsg_enable + * $ echo 0 > /proc/spl/kstat/zfs/dbgmsg + * + * # Dump the log buffer. + * $ cat /proc/spl/kstat/zfs/dbgmsg + */ + if (zfs_dbgmsg_enable) + __zfs_dbgmsg(buf); + + kmem_free(buf, size); +} + +#else + +void +zfs_dbgmsg_print(const char *tag) +{ + zfs_dbgmsg_t *zdm; + + (void) printf("ZFS_DBGMSG(%s):\n", tag); + mutex_enter(&zfs_dbgmsgs_lock); + for (zdm = list_head(&zfs_dbgmsgs); zdm; + zdm = list_next(&zfs_dbgmsgs, zdm)) + (void) printf("%s\n", zdm->zdm_msg); + mutex_exit(&zfs_dbgmsgs_lock); +} +#endif /* _KERNEL */ + +#ifdef _KERNEL +module_param(zfs_dbgmsg_enable, int, 0644); +MODULE_PARM_DESC(zfs_dbgmsg_enable, "Enable ZFS debug message log"); + +module_param(zfs_dbgmsg_maxsize, int, 0644); +MODULE_PARM_DESC(zfs_dbgmsg_maxsize, "Maximum ZFS debug log size"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_dir.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_dir.c @@ -0,0 +1,1158 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fs/fs_subr.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * zfs_match_find() is used by zfs_dirent_lock() to peform zap lookups + * of names after deciding which is the appropriate lookup interface. + */ +static int +zfs_match_find(zfsvfs_t *zfsvfs, znode_t *dzp, char *name, matchtype_t mt, + boolean_t update, int *deflags, pathname_t *rpnp, uint64_t *zoid) +{ + boolean_t conflict = B_FALSE; + int error; + + if (zfsvfs->z_norm) { + size_t bufsz = 0; + char *buf = NULL; + + if (rpnp) { + buf = rpnp->pn_buf; + bufsz = rpnp->pn_bufsize; + } + + /* + * In the non-mixed case we only expect there would ever + * be one match, but we need to use the normalizing lookup. + */ + error = zap_lookup_norm(zfsvfs->z_os, dzp->z_id, name, 8, 1, + zoid, mt, buf, bufsz, &conflict); + } else { + error = zap_lookup(zfsvfs->z_os, dzp->z_id, name, 8, 1, zoid); + } + + /* + * Allow multiple entries provided the first entry is + * the object id. Non-zpl consumers may safely make + * use of the additional space. + * + * XXX: This should be a feature flag for compatibility + */ + if (error == EOVERFLOW) + error = 0; + + if (zfsvfs->z_norm && !error && deflags) + *deflags = conflict ? ED_CASE_CONFLICT : 0; + + *zoid = ZFS_DIRENT_OBJ(*zoid); + +#ifdef HAVE_DNLC + if (error == ENOENT && update) + dnlc_update(ZTOI(dzp), name, DNLC_NO_VNODE); +#endif /* HAVE_DNLC */ + + return (error); +} + +/* + * Lock a directory entry. A dirlock on protects that name + * in dzp's directory zap object. As long as you hold a dirlock, you can + * assume two things: (1) dzp cannot be reaped, and (2) no other thread + * can change the zap entry for (i.e. link or unlink) this name. + * + * Input arguments: + * dzp - znode for directory + * name - name of entry to lock + * flag - ZNEW: if the entry already exists, fail with EEXIST. + * ZEXISTS: if the entry does not exist, fail with ENOENT. + * ZSHARED: allow concurrent access with other ZSHARED callers. + * ZXATTR: we want dzp's xattr directory + * ZCILOOK: On a mixed sensitivity file system, + * this lookup should be case-insensitive. + * ZCIEXACT: On a purely case-insensitive file system, + * this lookup should be case-sensitive. + * ZRENAMING: we are locking for renaming, force narrow locks + * ZHAVELOCK: Don't grab the z_name_lock for this call. The + * current thread already holds it. + * + * Output arguments: + * zpp - pointer to the znode for the entry (NULL if there isn't one) + * dlpp - pointer to the dirlock for this entry (NULL on error) + * direntflags - (case-insensitive lookup only) + * flags if multiple case-sensitive matches exist in directory + * realpnp - (case-insensitive lookup only) + * actual name matched within the directory + * + * Return value: 0 on success or errno on failure. + * + * NOTE: Always checks for, and rejects, '.' and '..'. + * NOTE: For case-insensitive file systems we take wide locks (see below), + * but return znode pointers to a single match. + */ +int +zfs_dirent_lock(zfs_dirlock_t **dlpp, znode_t *dzp, char *name, znode_t **zpp, + int flag, int *direntflags, pathname_t *realpnp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + zfs_dirlock_t *dl; + boolean_t update; + matchtype_t mt = 0; + uint64_t zoid; +#ifdef HAVE_DNLC + vnode_t *vp = NULL; +#endif /* HAVE_DNLC */ + int error = 0; + int cmpflags; + + *zpp = NULL; + *dlpp = NULL; + + /* + * Verify that we are not trying to lock '.', '..', or '.zfs' + */ + if ((name[0] == '.' && + (name[1] == '\0' || (name[1] == '.' && name[2] == '\0'))) || + (zfs_has_ctldir(dzp) && strcmp(name, ZFS_CTLDIR_NAME) == 0)) + return (SET_ERROR(EEXIST)); + + /* + * Case sensitivity and normalization preferences are set when + * the file system is created. These are stored in the + * zfsvfs->z_case and zfsvfs->z_norm fields. These choices + * affect what vnodes can be cached in the DNLC, how we + * perform zap lookups, and the "width" of our dirlocks. + * + * A normal dirlock locks a single name. Note that with + * normalization a name can be composed multiple ways, but + * when normalized, these names all compare equal. A wide + * dirlock locks multiple names. We need these when the file + * system is supporting mixed-mode access. It is sometimes + * necessary to lock all case permutations of file name at + * once so that simultaneous case-insensitive/case-sensitive + * behaves as rationally as possible. + */ + + /* + * When matching we may need to normalize & change case according to + * FS settings. + * + * Note that a normalized match is necessary for a case insensitive + * filesystem when the lookup request is not exact because normalization + * can fold case independent of normalizing code point sequences. + * + * See the table above zfs_dropname(). + */ + if (zfsvfs->z_norm != 0) { + mt = MT_NORMALIZE; + + /* + * Determine if the match needs to honor the case specified in + * lookup, and if so keep track of that so that during + * normalization we don't fold case. + */ + if ((zfsvfs->z_case == ZFS_CASE_INSENSITIVE && + (flag & ZCIEXACT)) || + (zfsvfs->z_case == ZFS_CASE_MIXED && !(flag & ZCILOOK))) { + mt |= MT_MATCH_CASE; + } + } + + /* + * Only look in or update the DNLC if we are looking for the + * name on a file system that does not require normalization + * or case folding. We can also look there if we happen to be + * on a non-normalizing, mixed sensitivity file system IF we + * are looking for the exact name. + * + * Maybe can add TO-UPPERed version of name to dnlc in ci-only + * case for performance improvement? + */ + update = !zfsvfs->z_norm || + (zfsvfs->z_case == ZFS_CASE_MIXED && + !(zfsvfs->z_norm & ~U8_TEXTPREP_TOUPPER) && !(flag & ZCILOOK)); + + /* + * ZRENAMING indicates we are in a situation where we should + * take narrow locks regardless of the file system's + * preferences for normalizing and case folding. This will + * prevent us deadlocking trying to grab the same wide lock + * twice if the two names happen to be case-insensitive + * matches. + */ + if (flag & ZRENAMING) + cmpflags = 0; + else + cmpflags = zfsvfs->z_norm; + + /* + * Wait until there are no locks on this name. + * + * Don't grab the the lock if it is already held. However, cannot + * have both ZSHARED and ZHAVELOCK together. + */ + ASSERT(!(flag & ZSHARED) || !(flag & ZHAVELOCK)); + if (!(flag & ZHAVELOCK)) + rw_enter(&dzp->z_name_lock, RW_READER); + + mutex_enter(&dzp->z_lock); + for (;;) { + if (dzp->z_unlinked && !(flag & ZXATTR)) { + mutex_exit(&dzp->z_lock); + if (!(flag & ZHAVELOCK)) + rw_exit(&dzp->z_name_lock); + return (SET_ERROR(ENOENT)); + } + for (dl = dzp->z_dirlocks; dl != NULL; dl = dl->dl_next) { + if ((u8_strcmp(name, dl->dl_name, 0, cmpflags, + U8_UNICODE_LATEST, &error) == 0) || error != 0) + break; + } + if (error != 0) { + mutex_exit(&dzp->z_lock); + if (!(flag & ZHAVELOCK)) + rw_exit(&dzp->z_name_lock); + return (SET_ERROR(ENOENT)); + } + if (dl == NULL) { + /* + * Allocate a new dirlock and add it to the list. + */ + dl = kmem_alloc(sizeof (zfs_dirlock_t), KM_SLEEP); + cv_init(&dl->dl_cv, NULL, CV_DEFAULT, NULL); + dl->dl_name = name; + dl->dl_sharecnt = 0; + dl->dl_namelock = 0; + dl->dl_namesize = 0; + dl->dl_dzp = dzp; + dl->dl_next = dzp->z_dirlocks; + dzp->z_dirlocks = dl; + break; + } + if ((flag & ZSHARED) && dl->dl_sharecnt != 0) + break; + cv_wait(&dl->dl_cv, &dzp->z_lock); + } + + /* + * If the z_name_lock was NOT held for this dirlock record it. + */ + if (flag & ZHAVELOCK) + dl->dl_namelock = 1; + + if ((flag & ZSHARED) && ++dl->dl_sharecnt > 1 && dl->dl_namesize == 0) { + /* + * We're the second shared reference to dl. Make a copy of + * dl_name in case the first thread goes away before we do. + * Note that we initialize the new name before storing its + * pointer into dl_name, because the first thread may load + * dl->dl_name at any time. It'll either see the old value, + * which belongs to it, or the new shared copy; either is OK. + */ + dl->dl_namesize = strlen(dl->dl_name) + 1; + name = kmem_alloc(dl->dl_namesize, KM_SLEEP); + bcopy(dl->dl_name, name, dl->dl_namesize); + dl->dl_name = name; + } + + mutex_exit(&dzp->z_lock); + + /* + * We have a dirlock on the name. (Note that it is the dirlock, + * not the dzp's z_lock, that protects the name in the zap object.) + * See if there's an object by this name; if so, put a hold on it. + */ + if (flag & ZXATTR) { + error = sa_lookup(dzp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), &zoid, + sizeof (zoid)); + if (error == 0) + error = (zoid == 0 ? SET_ERROR(ENOENT) : 0); + } else { +#ifdef HAVE_DNLC + if (update) + vp = dnlc_lookup(ZTOI(dzp), name); + if (vp == DNLC_NO_VNODE) { + iput(vp); + error = SET_ERROR(ENOENT); + } else if (vp) { + if (flag & ZNEW) { + zfs_dirent_unlock(dl); + iput(vp); + return (SET_ERROR(EEXIST)); + } + *dlpp = dl; + *zpp = VTOZ(vp); + return (0); + } else { + error = zfs_match_find(zfsvfs, dzp, name, mt, + update, direntflags, realpnp, &zoid); + } +#else + error = zfs_match_find(zfsvfs, dzp, name, mt, + update, direntflags, realpnp, &zoid); +#endif /* HAVE_DNLC */ + } + if (error) { + if (error != ENOENT || (flag & ZEXISTS)) { + zfs_dirent_unlock(dl); + return (error); + } + } else { + if (flag & ZNEW) { + zfs_dirent_unlock(dl); + return (SET_ERROR(EEXIST)); + } + error = zfs_zget(zfsvfs, zoid, zpp); + if (error) { + zfs_dirent_unlock(dl); + return (error); + } +#ifdef HAVE_DNLC + if (!(flag & ZXATTR) && update) + dnlc_update(ZTOI(dzp), name, ZTOI(*zpp)); +#endif /* HAVE_DNLC */ + } + + *dlpp = dl; + + return (0); +} + +/* + * Unlock this directory entry and wake anyone who was waiting for it. + */ +void +zfs_dirent_unlock(zfs_dirlock_t *dl) +{ + znode_t *dzp = dl->dl_dzp; + zfs_dirlock_t **prev_dl, *cur_dl; + + mutex_enter(&dzp->z_lock); + + if (!dl->dl_namelock) + rw_exit(&dzp->z_name_lock); + + if (dl->dl_sharecnt > 1) { + dl->dl_sharecnt--; + mutex_exit(&dzp->z_lock); + return; + } + prev_dl = &dzp->z_dirlocks; + while ((cur_dl = *prev_dl) != dl) + prev_dl = &cur_dl->dl_next; + *prev_dl = dl->dl_next; + cv_broadcast(&dl->dl_cv); + mutex_exit(&dzp->z_lock); + + if (dl->dl_namesize != 0) + kmem_free(dl->dl_name, dl->dl_namesize); + cv_destroy(&dl->dl_cv); + kmem_free(dl, sizeof (*dl)); +} + +/* + * Look up an entry in a directory. + * + * NOTE: '.' and '..' are handled as special cases because + * no directory entries are actually stored for them. If this is + * the root of a filesystem, then '.zfs' is also treated as a + * special pseudo-directory. + */ +int +zfs_dirlook(znode_t *dzp, char *name, struct inode **ipp, int flags, + int *deflg, pathname_t *rpnp) +{ + zfs_dirlock_t *dl; + znode_t *zp; + int error = 0; + uint64_t parent; + + if (name[0] == 0 || (name[0] == '.' && name[1] == 0)) { + *ipp = ZTOI(dzp); + igrab(*ipp); + } else if (name[0] == '.' && name[1] == '.' && name[2] == 0) { + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + + /* + * If we are a snapshot mounted under .zfs, return + * the inode pointer for the snapshot directory. + */ + if ((error = sa_lookup(dzp->z_sa_hdl, + SA_ZPL_PARENT(zfsvfs), &parent, sizeof (parent))) != 0) + return (error); + + if (parent == dzp->z_id && zfsvfs->z_parent != zfsvfs) { + error = zfsctl_root_lookup(zfsvfs->z_parent->z_ctldir, + "snapshot", ipp, 0, kcred, NULL, NULL); + return (error); + } + rw_enter(&dzp->z_parent_lock, RW_READER); + error = zfs_zget(zfsvfs, parent, &zp); + if (error == 0) + *ipp = ZTOI(zp); + rw_exit(&dzp->z_parent_lock); + } else if (zfs_has_ctldir(dzp) && strcmp(name, ZFS_CTLDIR_NAME) == 0) { + *ipp = zfsctl_root(dzp); + } else { + int zf; + + zf = ZEXISTS | ZSHARED; + if (flags & FIGNORECASE) + zf |= ZCILOOK; + + error = zfs_dirent_lock(&dl, dzp, name, &zp, zf, deflg, rpnp); + if (error == 0) { + *ipp = ZTOI(zp); + zfs_dirent_unlock(dl); + dzp->z_zn_prefetch = B_TRUE; /* enable prefetching */ + } + rpnp = NULL; + } + + if ((flags & FIGNORECASE) && rpnp && !error) + (void) strlcpy(rpnp->pn_buf, name, rpnp->pn_bufsize); + + return (error); +} + +/* + * unlinked Set (formerly known as the "delete queue") Error Handling + * + * When dealing with the unlinked set, we dmu_tx_hold_zap(), but we + * don't specify the name of the entry that we will be manipulating. We + * also fib and say that we won't be adding any new entries to the + * unlinked set, even though we might (this is to lower the minimum file + * size that can be deleted in a full filesystem). So on the small + * chance that the nlink list is using a fat zap (ie. has more than + * 2000 entries), we *may* not pre-read a block that's needed. + * Therefore it is remotely possible for some of the assertions + * regarding the unlinked set below to fail due to i/o error. On a + * nondebug system, this will result in the space being leaked. + */ +void +zfs_unlinked_add(znode_t *zp, dmu_tx_t *tx) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + + ASSERT(zp->z_unlinked); + ASSERT(ZTOI(zp)->i_nlink == 0); + + VERIFY3U(0, ==, + zap_add_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx)); +} + +/* + * Clean up any znodes that had no links when we either crashed or + * (force) umounted the file system. + */ +void +zfs_unlinked_drain(zfsvfs_t *zfsvfs) +{ + zap_cursor_t zc; + zap_attribute_t zap; + dmu_object_info_t doi; + znode_t *zp; + int error; + + /* + * Iterate over the contents of the unlinked set. + */ + for (zap_cursor_init(&zc, zfsvfs->z_os, zfsvfs->z_unlinkedobj); + zap_cursor_retrieve(&zc, &zap) == 0; + zap_cursor_advance(&zc)) { + + /* + * See what kind of object we have in list + */ + + error = dmu_object_info(zfsvfs->z_os, + zap.za_first_integer, &doi); + if (error != 0) + continue; + + ASSERT((doi.doi_type == DMU_OT_PLAIN_FILE_CONTENTS) || + (doi.doi_type == DMU_OT_DIRECTORY_CONTENTS)); + /* + * We need to re-mark these list entries for deletion, + * so we pull them back into core and set zp->z_unlinked. + */ + error = zfs_zget(zfsvfs, zap.za_first_integer, &zp); + + /* + * We may pick up znodes that are already marked for deletion. + * This could happen during the purge of an extended attribute + * directory. All we need to do is skip over them, since they + * are already in the system marked z_unlinked. + */ + if (error != 0) + continue; + + zp->z_unlinked = B_TRUE; + iput(ZTOI(zp)); + } + zap_cursor_fini(&zc); +} + +/* + * Delete the entire contents of a directory. Return a count + * of the number of entries that could not be deleted. If we encounter + * an error, return a count of at least one so that the directory stays + * in the unlinked set. + * + * NOTE: this function assumes that the directory is inactive, + * so there is no need to lock its entries before deletion. + * Also, it assumes the directory contents is *only* regular + * files. + */ +static int +zfs_purgedir(znode_t *dzp) +{ + zap_cursor_t zc; + zap_attribute_t zap; + znode_t *xzp; + dmu_tx_t *tx; + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + zfs_dirlock_t dl; + int skipped = 0; + int error; + + for (zap_cursor_init(&zc, zfsvfs->z_os, dzp->z_id); + (error = zap_cursor_retrieve(&zc, &zap)) == 0; + zap_cursor_advance(&zc)) { + error = zfs_zget(zfsvfs, + ZFS_DIRENT_OBJ(zap.za_first_integer), &xzp); + if (error) { + skipped += 1; + continue; + } + + ASSERT(S_ISREG(ZTOI(xzp)->i_mode) || + S_ISLNK(ZTOI(xzp)->i_mode)); + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, dzp->z_sa_hdl, B_FALSE); + dmu_tx_hold_zap(tx, dzp->z_id, FALSE, zap.za_name); + dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE); + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + /* Is this really needed ? */ + zfs_sa_upgrade_txholds(tx, xzp); + dmu_tx_mark_netfree(tx); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + zfs_iput_async(ZTOI(xzp)); + skipped += 1; + continue; + } + bzero(&dl, sizeof (dl)); + dl.dl_dzp = dzp; + dl.dl_name = zap.za_name; + + error = zfs_link_destroy(&dl, xzp, tx, 0, NULL); + if (error) + skipped += 1; + dmu_tx_commit(tx); + + zfs_iput_async(ZTOI(xzp)); + } + zap_cursor_fini(&zc); + if (error != ENOENT) + skipped += 1; + return (skipped); +} + +void +zfs_rmnode(znode_t *zp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + objset_t *os = zfsvfs->z_os; + znode_t *xzp = NULL; + dmu_tx_t *tx; + uint64_t acl_obj; + uint64_t xattr_obj; + uint64_t links; + int error; + + ASSERT(ZTOI(zp)->i_nlink == 0); + ASSERT(atomic_read(&ZTOI(zp)->i_count) == 0); + + /* + * If this is an attribute directory, purge its contents. + */ + if (S_ISDIR(ZTOI(zp)->i_mode) && (zp->z_pflags & ZFS_XATTR)) { + if (zfs_purgedir(zp) != 0) { + /* + * Not enough space to delete some xattrs. + * Leave it in the unlinked set. + */ + zfs_znode_dmu_fini(zp); + + return; + } + } + + /* + * Free up all the data in the file. We don't do this for directories + * because we need truncate and remove to be in the same tx, like in + * zfs_znode_delete(). Otherwise, if we crash here we'll end up with + * an inconsistent truncated zap object in the delete queue. Note a + * truncated file is harmless since it only contains user data. + */ + if (S_ISREG(ZTOI(zp)->i_mode)) { + error = dmu_free_long_range(os, zp->z_id, 0, DMU_OBJECT_END); + if (error) { + /* + * Not enough space or we were interrupted by unmount. + * Leave the file in the unlinked set. + */ + zfs_znode_dmu_fini(zp); + return; + } + } + + /* + * If the file has extended attributes, we're going to unlink + * the xattr dir. + */ + error = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), + &xattr_obj, sizeof (xattr_obj)); + if (error == 0 && xattr_obj) { + error = zfs_zget(zfsvfs, xattr_obj, &xzp); + ASSERT(error == 0); + } + + acl_obj = zfs_external_acl(zp); + + /* + * Set up the final transaction. + */ + tx = dmu_tx_create(os); + dmu_tx_hold_free(tx, zp->z_id, 0, DMU_OBJECT_END); + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + if (xzp) { + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, TRUE, NULL); + dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE); + } + if (acl_obj) + dmu_tx_hold_free(tx, acl_obj, 0, DMU_OBJECT_END); + + zfs_sa_upgrade_txholds(tx, zp); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + /* + * Not enough space to delete the file. Leave it in the + * unlinked set, leaking it until the fs is remounted (at + * which point we'll call zfs_unlinked_drain() to process it). + */ + dmu_tx_abort(tx); + zfs_znode_dmu_fini(zp); + goto out; + } + + if (xzp) { + ASSERT(error == 0); + mutex_enter(&xzp->z_lock); + xzp->z_unlinked = B_TRUE; /* mark xzp for deletion */ + clear_nlink(ZTOI(xzp)); /* no more links to it */ + links = 0; + VERIFY(0 == sa_update(xzp->z_sa_hdl, SA_ZPL_LINKS(zfsvfs), + &links, sizeof (links), tx)); + mutex_exit(&xzp->z_lock); + zfs_unlinked_add(xzp, tx); + } + + /* Remove this znode from the unlinked set */ + VERIFY3U(0, ==, + zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx)); + + zfs_znode_delete(zp, tx); + + dmu_tx_commit(tx); +out: + if (xzp) + zfs_iput_async(ZTOI(xzp)); +} + +static uint64_t +zfs_dirent(znode_t *zp, uint64_t mode) +{ + uint64_t de = zp->z_id; + + if (ZTOZSB(zp)->z_version >= ZPL_VERSION_DIRENT_TYPE) + de |= IFTODT(mode) << 60; + return (de); +} + +/* + * Link zp into dl. Can only fail if zp has been unlinked. + */ +int +zfs_link_create(zfs_dirlock_t *dl, znode_t *zp, dmu_tx_t *tx, int flag) +{ + znode_t *dzp = dl->dl_dzp; + zfsvfs_t *zfsvfs = ZTOZSB(zp); + uint64_t value; + int zp_is_dir = S_ISDIR(ZTOI(zp)->i_mode); + sa_bulk_attr_t bulk[5]; + uint64_t mtime[2], ctime[2]; + uint64_t links; + int count = 0; + int error; + + mutex_enter(&zp->z_lock); + + if (!(flag & ZRENAMING)) { + if (zp->z_unlinked) { /* no new links to unlinked zp */ + ASSERT(!(flag & (ZNEW | ZEXISTS))); + mutex_exit(&zp->z_lock); + return (SET_ERROR(ENOENT)); + } + if (!(flag & ZNEW)) { + /* + * ZNEW nodes come from zfs_mknode() where the link + * count has already been initialised + */ + inc_nlink(ZTOI(zp)); + links = ZTOI(zp)->i_nlink; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), + NULL, &links, sizeof (links)); + } + } + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_PARENT(zfsvfs), NULL, + &dzp->z_id, sizeof (dzp->z_id)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, sizeof (zp->z_pflags)); + + if (!(flag & ZNEW)) { + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, + ctime, sizeof (ctime)); + zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, + ctime); + } + error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); + ASSERT(error == 0); + + mutex_exit(&zp->z_lock); + + mutex_enter(&dzp->z_lock); + dzp->z_size++; + if (zp_is_dir) + inc_nlink(ZTOI(dzp)); + links = ZTOI(dzp)->i_nlink; + count = 0; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), NULL, + &dzp->z_size, sizeof (dzp->z_size)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), NULL, + &links, sizeof (links)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, + mtime, sizeof (mtime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, + ctime, sizeof (ctime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &dzp->z_pflags, sizeof (dzp->z_pflags)); + zfs_tstamp_update_setup(dzp, CONTENT_MODIFIED, mtime, ctime); + error = sa_bulk_update(dzp->z_sa_hdl, bulk, count, tx); + ASSERT(error == 0); + mutex_exit(&dzp->z_lock); + + value = zfs_dirent(zp, zp->z_mode); + error = zap_add(ZTOZSB(zp)->z_os, dzp->z_id, dl->dl_name, + 8, 1, &value, tx); + ASSERT(error == 0); + + return (0); +} + +/* + * The match type in the code for this function should conform to: + * + * ------------------------------------------------------------------------ + * fs type | z_norm | lookup type | match type + * ---------|-------------|-------------|---------------------------------- + * CS !norm | 0 | 0 | 0 (exact) + * CS norm | formX | 0 | MT_NORMALIZE + * CI !norm | upper | !ZCIEXACT | MT_NORMALIZE + * CI !norm | upper | ZCIEXACT | MT_NORMALIZE | MT_MATCH_CASE + * CI norm | upper|formX | !ZCIEXACT | MT_NORMALIZE + * CI norm | upper|formX | ZCIEXACT | MT_NORMALIZE | MT_MATCH_CASE + * CM !norm | upper | !ZCILOOK | MT_NORMALIZE | MT_MATCH_CASE + * CM !norm | upper | ZCILOOK | MT_NORMALIZE + * CM norm | upper|formX | !ZCILOOK | MT_NORMALIZE | MT_MATCH_CASE + * CM norm | upper|formX | ZCILOOK | MT_NORMALIZE + * + * Abbreviations: + * CS = Case Sensitive, CI = Case Insensitive, CM = Case Mixed + * upper = case folding set by fs type on creation (U8_TEXTPREP_TOUPPER) + * formX = unicode normalization form set on fs creation + */ +static int +zfs_dropname(zfs_dirlock_t *dl, znode_t *zp, znode_t *dzp, dmu_tx_t *tx, + int flag) +{ + int error; + + if (ZTOZSB(zp)->z_norm) { + matchtype_t mt = MT_NORMALIZE; + + if ((ZTOZSB(zp)->z_case == ZFS_CASE_INSENSITIVE && + (flag & ZCIEXACT)) || + (ZTOZSB(zp)->z_case == ZFS_CASE_MIXED && + !(flag & ZCILOOK))) { + mt |= MT_MATCH_CASE; + } + + error = zap_remove_norm(ZTOZSB(zp)->z_os, dzp->z_id, + dl->dl_name, mt, tx); + } else { + error = zap_remove(ZTOZSB(zp)->z_os, dzp->z_id, dl->dl_name, + tx); + } + + return (error); +} + +/* + * Unlink zp from dl, and mark zp for deletion if this was the last link. Can + * fail if zp is a mount point (EBUSY) or a non-empty directory (ENOTEMPTY). + * If 'unlinkedp' is NULL, we put unlinked znodes on the unlinked list. + * If it's non-NULL, we use it to indicate whether the znode needs deletion, + * and it's the caller's job to do it. + */ +int +zfs_link_destroy(zfs_dirlock_t *dl, znode_t *zp, dmu_tx_t *tx, int flag, + boolean_t *unlinkedp) +{ + znode_t *dzp = dl->dl_dzp; + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + int zp_is_dir = S_ISDIR(ZTOI(zp)->i_mode); + boolean_t unlinked = B_FALSE; + sa_bulk_attr_t bulk[5]; + uint64_t mtime[2], ctime[2]; + uint64_t links; + int count = 0; + int error; + +#ifdef HAVE_DNLC + dnlc_remove(ZTOI(dzp), dl->dl_name); +#endif /* HAVE_DNLC */ + + if (!(flag & ZRENAMING)) { + mutex_enter(&zp->z_lock); + + if (zp_is_dir && !zfs_dirempty(zp)) { + mutex_exit(&zp->z_lock); + return (SET_ERROR(ENOTEMPTY)); + } + + /* + * If we get here, we are going to try to remove the object. + * First try removing the name from the directory; if that + * fails, return the error. + */ + error = zfs_dropname(dl, zp, dzp, tx, flag); + if (error != 0) { + mutex_exit(&zp->z_lock); + return (error); + } + + if (ZTOI(zp)->i_nlink <= zp_is_dir) { + zfs_panic_recover("zfs: link count on %lu is %u, " + "should be at least %u", zp->z_id, + (int)ZTOI(zp)->i_nlink, zp_is_dir + 1); + set_nlink(ZTOI(zp), zp_is_dir + 1); + } + drop_nlink(ZTOI(zp)); + if (ZTOI(zp)->i_nlink == zp_is_dir) { + zp->z_unlinked = B_TRUE; + clear_nlink(ZTOI(zp)); + unlinked = B_TRUE; + } else { + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), + NULL, &ctime, sizeof (ctime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), + NULL, &zp->z_pflags, sizeof (zp->z_pflags)); + zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, + ctime); + } + links = ZTOI(zp)->i_nlink; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), + NULL, &links, sizeof (links)); + error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); + count = 0; + ASSERT(error == 0); + mutex_exit(&zp->z_lock); + } else { + error = zfs_dropname(dl, zp, dzp, tx, flag); + if (error != 0) + return (error); + } + + mutex_enter(&dzp->z_lock); + dzp->z_size--; /* one dirent removed */ + if (zp_is_dir) + drop_nlink(ZTOI(dzp)); /* ".." link from zp */ + links = ZTOI(dzp)->i_nlink; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), + NULL, &links, sizeof (links)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), + NULL, &dzp->z_size, sizeof (dzp->z_size)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), + NULL, ctime, sizeof (ctime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), + NULL, mtime, sizeof (mtime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), + NULL, &dzp->z_pflags, sizeof (dzp->z_pflags)); + zfs_tstamp_update_setup(dzp, CONTENT_MODIFIED, mtime, ctime); + error = sa_bulk_update(dzp->z_sa_hdl, bulk, count, tx); + ASSERT(error == 0); + mutex_exit(&dzp->z_lock); + + if (unlinkedp != NULL) + *unlinkedp = unlinked; + else if (unlinked) + zfs_unlinked_add(zp, tx); + + return (0); +} + +/* + * Indicate whether the directory is empty. Works with or without z_lock + * held, but can only be consider a hint in the latter case. Returns true + * if only "." and ".." remain and there's no work in progress. + */ +boolean_t +zfs_dirempty(znode_t *dzp) +{ + return (dzp->z_size == 2 && dzp->z_dirlocks == 0); +} + +int +zfs_make_xattrdir(znode_t *zp, vattr_t *vap, struct inode **xipp, cred_t *cr) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + znode_t *xzp; + dmu_tx_t *tx; + int error; + zfs_acl_ids_t acl_ids; + boolean_t fuid_dirtied; +#ifdef DEBUG + uint64_t parent; +#endif + + *xipp = NULL; + + if ((error = zfs_zaccess(zp, ACE_WRITE_NAMED_ATTRS, 0, B_FALSE, cr))) + return (error); + + if ((error = zfs_acl_ids_create(zp, IS_XATTR, vap, cr, NULL, + &acl_ids)) != 0) + return (error); + if (zfs_acl_ids_overquota(zfsvfs, &acl_ids)) { + zfs_acl_ids_free(&acl_ids); + return (SET_ERROR(EDQUOT)); + } + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + + ZFS_SA_BASE_ATTR_SIZE); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + zfs_acl_ids_free(&acl_ids); + dmu_tx_abort(tx); + return (error); + } + zfs_mknode(zp, vap, tx, cr, IS_XATTR, &xzp, &acl_ids); + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + +#ifdef DEBUG + error = sa_lookup(xzp->z_sa_hdl, SA_ZPL_PARENT(zfsvfs), + &parent, sizeof (parent)); + ASSERT(error == 0 && parent == zp->z_id); +#endif + + VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), &xzp->z_id, + sizeof (xzp->z_id), tx)); + + if (!zp->z_unlinked) + (void) zfs_log_create(zfsvfs->z_log, tx, TX_MKXATTR, zp, + xzp, "", NULL, acl_ids.z_fuidp, vap); + + zfs_acl_ids_free(&acl_ids); + dmu_tx_commit(tx); + + *xipp = ZTOI(xzp); + + return (0); +} + +/* + * Return a znode for the extended attribute directory for zp. + * ** If the directory does not already exist, it is created ** + * + * IN: zp - znode to obtain attribute directory from + * cr - credentials of caller + * flags - flags from the VOP_LOOKUP call + * + * OUT: xipp - pointer to extended attribute znode + * + * RETURN: 0 on success + * error number on failure + */ +int +zfs_get_xattrdir(znode_t *zp, struct inode **xipp, cred_t *cr, int flags) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + znode_t *xzp; + zfs_dirlock_t *dl; + vattr_t va; + int error; +top: + error = zfs_dirent_lock(&dl, zp, "", &xzp, ZXATTR, NULL, NULL); + if (error) + return (error); + + if (xzp != NULL) { + *xipp = ZTOI(xzp); + zfs_dirent_unlock(dl); + return (0); + } + + if (!(flags & CREATE_XATTR_DIR)) { + zfs_dirent_unlock(dl); + return (SET_ERROR(ENOENT)); + } + + if (zfs_is_readonly(zfsvfs)) { + zfs_dirent_unlock(dl); + return (SET_ERROR(EROFS)); + } + + /* + * The ability to 'create' files in an attribute + * directory comes from the write_xattr permission on the base file. + * + * The ability to 'search' an attribute directory requires + * read_xattr permission on the base file. + * + * Once in a directory the ability to read/write attributes + * is controlled by the permissions on the attribute file. + */ + va.va_mask = ATTR_MODE | ATTR_UID | ATTR_GID; + va.va_mode = S_IFDIR | S_ISVTX | 0777; + zfs_fuid_map_ids(zp, cr, &va.va_uid, &va.va_gid); + + va.va_dentry = NULL; + error = zfs_make_xattrdir(zp, &va, xipp, cr); + zfs_dirent_unlock(dl); + + if (error == ERESTART) { + /* NB: we already did dmu_tx_wait() if necessary */ + goto top; + } + + return (error); +} + +/* + * Decide whether it is okay to remove within a sticky directory. + * + * In sticky directories, write access is not sufficient; + * you can remove entries from a directory only if: + * + * you own the directory, + * you own the entry, + * you have write access to the entry, + * or you are privileged (checked in secpolicy...). + * + * The function returns 0 if remove access is granted. + */ +int +zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr) +{ + uid_t uid; + uid_t downer; + uid_t fowner; + zfsvfs_t *zfsvfs = ZTOZSB(zdp); + + if (zfsvfs->z_replay) + return (0); + + if ((zdp->z_mode & S_ISVTX) == 0) + return (0); + + downer = zfs_fuid_map_id(zfsvfs, KUID_TO_SUID(ZTOI(zdp)->i_uid), + cr, ZFS_OWNER); + fowner = zfs_fuid_map_id(zfsvfs, KUID_TO_SUID(ZTOI(zp)->i_uid), + cr, ZFS_OWNER); + + if ((uid = crgetuid(cr)) == downer || uid == fowner || + zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr) == 0) + return (0); + else + return (secpolicy_vnode_remove(cr)); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_fm.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_fm.c @@ -0,0 +1,1054 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * This general routine is responsible for generating all the different ZFS + * ereports. The payload is dependent on the class, and which arguments are + * supplied to the function: + * + * EREPORT POOL VDEV IO + * block X X X + * data X X + * device X X + * pool X + * + * If we are in a loading state, all errors are chained together by the same + * SPA-wide ENA (Error Numeric Association). + * + * For isolated I/O requests, we get the ENA from the zio_t. The propagation + * gets very complicated due to RAID-Z, gang blocks, and vdev caching. We want + * to chain together all ereports associated with a logical piece of data. For + * read I/Os, there are basically three 'types' of I/O, which form a roughly + * layered diagram: + * + * +---------------+ + * | Aggregate I/O | No associated logical data or device + * +---------------+ + * | + * V + * +---------------+ Reads associated with a piece of logical data. + * | Read I/O | This includes reads on behalf of RAID-Z, + * +---------------+ mirrors, gang blocks, retries, etc. + * | + * V + * +---------------+ Reads associated with a particular device, but + * | Physical I/O | no logical data. Issued as part of vdev caching + * +---------------+ and I/O aggregation. + * + * Note that 'physical I/O' here is not the same terminology as used in the rest + * of ZIO. Typically, 'physical I/O' simply means that there is no attached + * blockpointer. But I/O with no associated block pointer can still be related + * to a logical piece of data (i.e. RAID-Z requests). + * + * Purely physical I/O always have unique ENAs. They are not related to a + * particular piece of logical data, and therefore cannot be chained together. + * We still generate an ereport, but the DE doesn't correlate it with any + * logical piece of data. When such an I/O fails, the delegated I/O requests + * will issue a retry, which will trigger the 'real' ereport with the correct + * ENA. + * + * We keep track of the ENA for a ZIO chain through the 'io_logical' member. + * When a new logical I/O is issued, we set this to point to itself. Child I/Os + * then inherit this pointer, so that when it is first set subsequent failures + * will use the same ENA. For vdev cache fill and queue aggregation I/O, + * this pointer is set to NULL, and no ereport will be generated (since it + * doesn't actually correspond to any particular device or piece of data, + * and the caller will always retry without caching or queueing anyway). + * + * For checksum errors, we want to include more information about the actual + * error which occurs. Accordingly, we build an ereport when the error is + * noticed, but instead of sending it in immediately, we hang it off of the + * io_cksum_report field of the logical IO. When the logical IO completes + * (successfully or not), zfs_ereport_finish_checksum() is called with the + * good and bad versions of the buffer (if available), and we annotate the + * ereport with information about the differences. + */ +#ifdef _KERNEL +void +zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector) +{ + if (nvl) + fm_nvlist_destroy(nvl, FM_NVA_FREE); + + if (detector) + fm_nvlist_destroy(detector, FM_NVA_FREE); +} + +/* + * We want to rate limit ZIO delay and checksum events so as to not + * flood ZED when a disk is acting up. + * + * Returns 1 if we're ratelimiting, 0 if not. + */ +static int +zfs_is_ratelimiting_event(const char *subclass, vdev_t *vd) +{ + int rc = 0; + /* + * __ratelimit() returns 1 if we're *not* ratelimiting and 0 if we + * are. Invert it to get our return value. + */ + if (strcmp(subclass, FM_EREPORT_ZFS_DELAY) == 0) { + rc = !zfs_ratelimit(&vd->vdev_delay_rl); + } else if (strcmp(subclass, FM_EREPORT_ZFS_CHECKSUM) == 0) { + rc = !zfs_ratelimit(&vd->vdev_checksum_rl); + } + + if (rc) { + /* We're rate limiting */ + fm_erpt_dropped_increment(); + } + + return (rc); +} + +static void +zfs_ereport_start(nvlist_t **ereport_out, nvlist_t **detector_out, + const char *subclass, spa_t *spa, vdev_t *vd, zio_t *zio, + uint64_t stateoroffset, uint64_t size) +{ + nvlist_t *ereport, *detector; + + uint64_t ena; + char class[64]; + + /* + * If we are doing a spa_tryimport() or in recovery mode, + * ignore errors. + */ + if (spa_load_state(spa) == SPA_LOAD_TRYIMPORT || + spa_load_state(spa) == SPA_LOAD_RECOVER) + return; + + /* + * If we are in the middle of opening a pool, and the previous attempt + * failed, don't bother logging any new ereports - we're just going to + * get the same diagnosis anyway. + */ + if (spa_load_state(spa) != SPA_LOAD_NONE && + spa->spa_last_open_failed) + return; + + if (zio != NULL) { + /* + * If this is not a read or write zio, ignore the error. This + * can occur if the DKIOCFLUSHWRITECACHE ioctl fails. + */ + if (zio->io_type != ZIO_TYPE_READ && + zio->io_type != ZIO_TYPE_WRITE) + return; + + if (vd != NULL) { + /* + * If the vdev has already been marked as failing due + * to a failed probe, then ignore any subsequent I/O + * errors, as the DE will automatically fault the vdev + * on the first such failure. This also catches cases + * where vdev_remove_wanted is set and the device has + * not yet been asynchronously placed into the REMOVED + * state. + */ + if (zio->io_vd == vd && !vdev_accessible(vd, zio)) + return; + + /* + * Ignore checksum errors for reads from DTL regions of + * leaf vdevs. + */ + if (zio->io_type == ZIO_TYPE_READ && + zio->io_error == ECKSUM && + vd->vdev_ops->vdev_op_leaf && + vdev_dtl_contains(vd, DTL_MISSING, zio->io_txg, 1)) + return; + } + } + + /* + * For probe failure, we want to avoid posting ereports if we've + * already removed the device in the meantime. + */ + if (vd != NULL && + strcmp(subclass, FM_EREPORT_ZFS_PROBE_FAILURE) == 0 && + (vd->vdev_remove_wanted || vd->vdev_state == VDEV_STATE_REMOVED)) + return; + + if ((strcmp(subclass, FM_EREPORT_ZFS_DELAY) == 0) && + (zio != NULL) && (!zio->io_timestamp)) { + /* Ignore bogus delay events */ + return; + } + + if ((ereport = fm_nvlist_create(NULL)) == NULL) + return; + + if ((detector = fm_nvlist_create(NULL)) == NULL) { + fm_nvlist_destroy(ereport, FM_NVA_FREE); + return; + } + + /* + * Serialize ereport generation + */ + mutex_enter(&spa->spa_errlist_lock); + + /* + * Determine the ENA to use for this event. If we are in a loading + * state, use a SPA-wide ENA. Otherwise, if we are in an I/O state, use + * a root zio-wide ENA. Otherwise, simply use a unique ENA. + */ + if (spa_load_state(spa) != SPA_LOAD_NONE) { + if (spa->spa_ena == 0) + spa->spa_ena = fm_ena_generate(0, FM_ENA_FMT1); + ena = spa->spa_ena; + } else if (zio != NULL && zio->io_logical != NULL) { + if (zio->io_logical->io_ena == 0) + zio->io_logical->io_ena = + fm_ena_generate(0, FM_ENA_FMT1); + ena = zio->io_logical->io_ena; + } else { + ena = fm_ena_generate(0, FM_ENA_FMT1); + } + + /* + * Construct the full class, detector, and other standard FMA fields. + */ + (void) snprintf(class, sizeof (class), "%s.%s", + ZFS_ERROR_CLASS, subclass); + + fm_fmri_zfs_set(detector, FM_ZFS_SCHEME_VERSION, spa_guid(spa), + vd != NULL ? vd->vdev_guid : 0); + + fm_ereport_set(ereport, FM_EREPORT_VERSION, class, ena, detector, NULL); + + /* + * Construct the per-ereport payload, depending on which parameters are + * passed in. + */ + + /* + * Generic payload members common to all ereports. + */ + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_POOL, DATA_TYPE_STRING, spa_name(spa), + FM_EREPORT_PAYLOAD_ZFS_POOL_GUID, DATA_TYPE_UINT64, spa_guid(spa), + FM_EREPORT_PAYLOAD_ZFS_POOL_STATE, DATA_TYPE_UINT64, + (uint64_t)spa_state(spa), + FM_EREPORT_PAYLOAD_ZFS_POOL_CONTEXT, DATA_TYPE_INT32, + (int32_t)spa_load_state(spa), NULL); + + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_POOL_FAILMODE, + DATA_TYPE_STRING, + spa_get_failmode(spa) == ZIO_FAILURE_MODE_WAIT ? + FM_EREPORT_FAILMODE_WAIT : + spa_get_failmode(spa) == ZIO_FAILURE_MODE_CONTINUE ? + FM_EREPORT_FAILMODE_CONTINUE : FM_EREPORT_FAILMODE_PANIC, + NULL); + + if (vd != NULL) { + vdev_t *pvd = vd->vdev_parent; + vdev_queue_t *vq = &vd->vdev_queue; + vdev_stat_t *vs = &vd->vdev_stat; + vdev_t *spare_vd; + uint64_t *spare_guids; + char **spare_paths; + int i, spare_count; + + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_VDEV_GUID, + DATA_TYPE_UINT64, vd->vdev_guid, + FM_EREPORT_PAYLOAD_ZFS_VDEV_TYPE, + DATA_TYPE_STRING, vd->vdev_ops->vdev_op_type, NULL); + if (vd->vdev_path != NULL) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_PATH, + DATA_TYPE_STRING, vd->vdev_path, NULL); + if (vd->vdev_devid != NULL) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_DEVID, + DATA_TYPE_STRING, vd->vdev_devid, NULL); + if (vd->vdev_fru != NULL) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_FRU, + DATA_TYPE_STRING, vd->vdev_fru, NULL); + if (vd->vdev_enc_sysfs_path != NULL) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_ENC_SYSFS_PATH, + DATA_TYPE_STRING, vd->vdev_enc_sysfs_path, NULL); + if (vd->vdev_ashift) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_ASHIFT, + DATA_TYPE_UINT64, vd->vdev_ashift, NULL); + + if (vq != NULL) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_COMP_TS, + DATA_TYPE_UINT64, vq->vq_io_complete_ts, NULL); + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_DELTA_TS, + DATA_TYPE_UINT64, vq->vq_io_delta_ts, NULL); + } + + if (vs != NULL) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_VDEV_READ_ERRORS, + DATA_TYPE_UINT64, vs->vs_read_errors, + FM_EREPORT_PAYLOAD_ZFS_VDEV_WRITE_ERRORS, + DATA_TYPE_UINT64, vs->vs_write_errors, + FM_EREPORT_PAYLOAD_ZFS_VDEV_CKSUM_ERRORS, + DATA_TYPE_UINT64, vs->vs_checksum_errors, NULL); + } + + if (pvd != NULL) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_PARENT_GUID, + DATA_TYPE_UINT64, pvd->vdev_guid, + FM_EREPORT_PAYLOAD_ZFS_PARENT_TYPE, + DATA_TYPE_STRING, pvd->vdev_ops->vdev_op_type, + NULL); + if (pvd->vdev_path) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_PARENT_PATH, + DATA_TYPE_STRING, pvd->vdev_path, NULL); + if (pvd->vdev_devid) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_PARENT_DEVID, + DATA_TYPE_STRING, pvd->vdev_devid, NULL); + } + + spare_count = spa->spa_spares.sav_count; + spare_paths = kmem_zalloc(sizeof (char *) * spare_count, + KM_SLEEP); + spare_guids = kmem_zalloc(sizeof (uint64_t) * spare_count, + KM_SLEEP); + + for (i = 0; i < spare_count; i++) { + spare_vd = spa->spa_spares.sav_vdevs[i]; + if (spare_vd) { + spare_paths[i] = spare_vd->vdev_path; + spare_guids[i] = spare_vd->vdev_guid; + } + } + + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_VDEV_SPARE_PATHS, + DATA_TYPE_STRING_ARRAY, spare_count, spare_paths, + FM_EREPORT_PAYLOAD_ZFS_VDEV_SPARE_GUIDS, + DATA_TYPE_UINT64_ARRAY, spare_count, spare_guids, NULL); + + kmem_free(spare_guids, sizeof (uint64_t) * spare_count); + kmem_free(spare_paths, sizeof (char *) * spare_count); + } + + if (zio != NULL) { + /* + * Payload common to all I/Os. + */ + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_ERR, + DATA_TYPE_INT32, zio->io_error, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS, + DATA_TYPE_INT32, zio->io_flags, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_STAGE, + DATA_TYPE_UINT32, zio->io_stage, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_PIPELINE, + DATA_TYPE_UINT32, zio->io_pipeline, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_DELAY, + DATA_TYPE_UINT64, zio->io_delay, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_TIMESTAMP, + DATA_TYPE_UINT64, zio->io_timestamp, NULL); + fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_ZIO_DELTA, + DATA_TYPE_UINT64, zio->io_delta, NULL); + + /* + * If the 'size' parameter is non-zero, it indicates this is a + * RAID-Z or other I/O where the physical offset and length are + * provided for us, instead of within the zio_t. + */ + if (vd != NULL) { + if (size) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OFFSET, + DATA_TYPE_UINT64, stateoroffset, + FM_EREPORT_PAYLOAD_ZFS_ZIO_SIZE, + DATA_TYPE_UINT64, size, NULL); + else + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OFFSET, + DATA_TYPE_UINT64, zio->io_offset, + FM_EREPORT_PAYLOAD_ZFS_ZIO_SIZE, + DATA_TYPE_UINT64, zio->io_size, NULL); + } + + /* + * Payload for I/Os with corresponding logical information. + */ + if (zio->io_logical != NULL) + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJSET, + DATA_TYPE_UINT64, + zio->io_logical->io_bookmark.zb_objset, + FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJECT, + DATA_TYPE_UINT64, + zio->io_logical->io_bookmark.zb_object, + FM_EREPORT_PAYLOAD_ZFS_ZIO_LEVEL, + DATA_TYPE_INT64, + zio->io_logical->io_bookmark.zb_level, + FM_EREPORT_PAYLOAD_ZFS_ZIO_BLKID, + DATA_TYPE_UINT64, + zio->io_logical->io_bookmark.zb_blkid, NULL); + } else if (vd != NULL) { + /* + * If we have a vdev but no zio, this is a device fault, and the + * 'stateoroffset' parameter indicates the previous state of the + * vdev. + */ + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_PREV_STATE, + DATA_TYPE_UINT64, stateoroffset, NULL); + } + + mutex_exit(&spa->spa_errlist_lock); + + *ereport_out = ereport; + *detector_out = detector; +} + +/* if it's <= 128 bytes, save the corruption directly */ +#define ZFM_MAX_INLINE (128 / sizeof (uint64_t)) + +#define MAX_RANGES 16 + +typedef struct zfs_ecksum_info { + /* histograms of set and cleared bits by bit number in a 64-bit word */ + uint16_t zei_histogram_set[sizeof (uint64_t) * NBBY]; + uint16_t zei_histogram_cleared[sizeof (uint64_t) * NBBY]; + + /* inline arrays of bits set and cleared. */ + uint64_t zei_bits_set[ZFM_MAX_INLINE]; + uint64_t zei_bits_cleared[ZFM_MAX_INLINE]; + + /* + * for each range, the number of bits set and cleared. The Hamming + * distance between the good and bad buffers is the sum of them all. + */ + uint32_t zei_range_sets[MAX_RANGES]; + uint32_t zei_range_clears[MAX_RANGES]; + + struct zei_ranges { + uint32_t zr_start; + uint32_t zr_end; + } zei_ranges[MAX_RANGES]; + + size_t zei_range_count; + uint32_t zei_mingap; + uint32_t zei_allowed_mingap; + +} zfs_ecksum_info_t; + +static void +update_histogram(uint64_t value_arg, uint16_t *hist, uint32_t *count) +{ + size_t i; + size_t bits = 0; + uint64_t value = BE_64(value_arg); + + /* We store the bits in big-endian (largest-first) order */ + for (i = 0; i < 64; i++) { + if (value & (1ull << i)) { + if (hist[63 - i] < UINT16_MAX) + hist[63 - i]++; + ++bits; + } + } + /* update the count of bits changed */ + *count += bits; +} + +/* + * We've now filled up the range array, and need to increase "mingap" and + * shrink the range list accordingly. zei_mingap is always the smallest + * distance between array entries, so we set the new_allowed_gap to be + * one greater than that. We then go through the list, joining together + * any ranges which are closer than the new_allowed_gap. + * + * By construction, there will be at least one. We also update zei_mingap + * to the new smallest gap, to prepare for our next invocation. + */ +static void +zei_shrink_ranges(zfs_ecksum_info_t *eip) +{ + uint32_t mingap = UINT32_MAX; + uint32_t new_allowed_gap = eip->zei_mingap + 1; + + size_t idx, output; + size_t max = eip->zei_range_count; + + struct zei_ranges *r = eip->zei_ranges; + + ASSERT3U(eip->zei_range_count, >, 0); + ASSERT3U(eip->zei_range_count, <=, MAX_RANGES); + + output = idx = 0; + while (idx < max - 1) { + uint32_t start = r[idx].zr_start; + uint32_t end = r[idx].zr_end; + + while (idx < max - 1) { + uint32_t nstart, nend, gap; + + idx++; + nstart = r[idx].zr_start; + nend = r[idx].zr_end; + + gap = nstart - end; + if (gap < new_allowed_gap) { + end = nend; + continue; + } + if (gap < mingap) + mingap = gap; + break; + } + r[output].zr_start = start; + r[output].zr_end = end; + output++; + } + ASSERT3U(output, <, eip->zei_range_count); + eip->zei_range_count = output; + eip->zei_mingap = mingap; + eip->zei_allowed_mingap = new_allowed_gap; +} + +static void +zei_add_range(zfs_ecksum_info_t *eip, int start, int end) +{ + struct zei_ranges *r = eip->zei_ranges; + size_t count = eip->zei_range_count; + + if (count >= MAX_RANGES) { + zei_shrink_ranges(eip); + count = eip->zei_range_count; + } + if (count == 0) { + eip->zei_mingap = UINT32_MAX; + eip->zei_allowed_mingap = 1; + } else { + int gap = start - r[count - 1].zr_end; + + if (gap < eip->zei_allowed_mingap) { + r[count - 1].zr_end = end; + return; + } + if (gap < eip->zei_mingap) + eip->zei_mingap = gap; + } + r[count].zr_start = start; + r[count].zr_end = end; + eip->zei_range_count++; +} + +static size_t +zei_range_total_size(zfs_ecksum_info_t *eip) +{ + struct zei_ranges *r = eip->zei_ranges; + size_t count = eip->zei_range_count; + size_t result = 0; + size_t idx; + + for (idx = 0; idx < count; idx++) + result += (r[idx].zr_end - r[idx].zr_start); + + return (result); +} + +static zfs_ecksum_info_t * +annotate_ecksum(nvlist_t *ereport, zio_bad_cksum_t *info, + const abd_t *goodabd, const abd_t *badabd, size_t size, + boolean_t drop_if_identical) +{ + const uint64_t *good; + const uint64_t *bad; + + uint64_t allset = 0; + uint64_t allcleared = 0; + + size_t nui64s = size / sizeof (uint64_t); + + size_t inline_size; + int no_inline = 0; + size_t idx; + size_t range; + + size_t offset = 0; + ssize_t start = -1; + + zfs_ecksum_info_t *eip = kmem_zalloc(sizeof (*eip), KM_SLEEP); + + /* don't do any annotation for injected checksum errors */ + if (info != NULL && info->zbc_injected) + return (eip); + + if (info != NULL && info->zbc_has_cksum) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_CKSUM_EXPECTED, + DATA_TYPE_UINT64_ARRAY, + sizeof (info->zbc_expected) / sizeof (uint64_t), + (uint64_t *)&info->zbc_expected, + FM_EREPORT_PAYLOAD_ZFS_CKSUM_ACTUAL, + DATA_TYPE_UINT64_ARRAY, + sizeof (info->zbc_actual) / sizeof (uint64_t), + (uint64_t *)&info->zbc_actual, + FM_EREPORT_PAYLOAD_ZFS_CKSUM_ALGO, + DATA_TYPE_STRING, + info->zbc_checksum_name, + NULL); + + if (info->zbc_byteswapped) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_CKSUM_BYTESWAP, + DATA_TYPE_BOOLEAN, 1, + NULL); + } + } + + if (badabd == NULL || goodabd == NULL) + return (eip); + + ASSERT3U(size, ==, nui64s * sizeof (uint64_t)); + ASSERT3U(size, <=, SPA_MAXBLOCKSIZE); + ASSERT3U(size, <=, UINT32_MAX); + + good = (const uint64_t *) abd_borrow_buf_copy((abd_t *)goodabd, size); + bad = (const uint64_t *) abd_borrow_buf_copy((abd_t *)badabd, size); + + /* build up the range list by comparing the two buffers. */ + for (idx = 0; idx < nui64s; idx++) { + if (good[idx] == bad[idx]) { + if (start == -1) + continue; + + zei_add_range(eip, start, idx); + start = -1; + } else { + if (start != -1) + continue; + + start = idx; + } + } + if (start != -1) + zei_add_range(eip, start, idx); + + /* See if it will fit in our inline buffers */ + inline_size = zei_range_total_size(eip); + if (inline_size > ZFM_MAX_INLINE) + no_inline = 1; + + /* + * If there is no change and we want to drop if the buffers are + * identical, do so. + */ + if (inline_size == 0 && drop_if_identical) { + kmem_free(eip, sizeof (*eip)); + abd_return_buf((abd_t *)goodabd, (void *)good, size); + abd_return_buf((abd_t *)badabd, (void *)bad, size); + return (NULL); + } + + /* + * Now walk through the ranges, filling in the details of the + * differences. Also convert our uint64_t-array offsets to byte + * offsets. + */ + for (range = 0; range < eip->zei_range_count; range++) { + size_t start = eip->zei_ranges[range].zr_start; + size_t end = eip->zei_ranges[range].zr_end; + + for (idx = start; idx < end; idx++) { + uint64_t set, cleared; + + // bits set in bad, but not in good + set = ((~good[idx]) & bad[idx]); + // bits set in good, but not in bad + cleared = (good[idx] & (~bad[idx])); + + allset |= set; + allcleared |= cleared; + + if (!no_inline) { + ASSERT3U(offset, <, inline_size); + eip->zei_bits_set[offset] = set; + eip->zei_bits_cleared[offset] = cleared; + offset++; + } + + update_histogram(set, eip->zei_histogram_set, + &eip->zei_range_sets[range]); + update_histogram(cleared, eip->zei_histogram_cleared, + &eip->zei_range_clears[range]); + } + + /* convert to byte offsets */ + eip->zei_ranges[range].zr_start *= sizeof (uint64_t); + eip->zei_ranges[range].zr_end *= sizeof (uint64_t); + } + + abd_return_buf((abd_t *)goodabd, (void *)good, size); + abd_return_buf((abd_t *)badabd, (void *)bad, size); + + eip->zei_allowed_mingap *= sizeof (uint64_t); + inline_size *= sizeof (uint64_t); + + /* fill in ereport */ + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_BAD_OFFSET_RANGES, + DATA_TYPE_UINT32_ARRAY, 2 * eip->zei_range_count, + (uint32_t *)eip->zei_ranges, + FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_MIN_GAP, + DATA_TYPE_UINT32, eip->zei_allowed_mingap, + FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_SETS, + DATA_TYPE_UINT32_ARRAY, eip->zei_range_count, eip->zei_range_sets, + FM_EREPORT_PAYLOAD_ZFS_BAD_RANGE_CLEARS, + DATA_TYPE_UINT32_ARRAY, eip->zei_range_count, eip->zei_range_clears, + NULL); + + if (!no_inline) { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_BAD_SET_BITS, + DATA_TYPE_UINT8_ARRAY, + inline_size, (uint8_t *)eip->zei_bits_set, + FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_BITS, + DATA_TYPE_UINT8_ARRAY, + inline_size, (uint8_t *)eip->zei_bits_cleared, + NULL); + } else { + fm_payload_set(ereport, + FM_EREPORT_PAYLOAD_ZFS_BAD_SET_HISTOGRAM, + DATA_TYPE_UINT16_ARRAY, + NBBY * sizeof (uint64_t), eip->zei_histogram_set, + FM_EREPORT_PAYLOAD_ZFS_BAD_CLEARED_HISTOGRAM, + DATA_TYPE_UINT16_ARRAY, + NBBY * sizeof (uint64_t), eip->zei_histogram_cleared, + NULL); + } + return (eip); +} +#endif + +void +zfs_ereport_post(const char *subclass, spa_t *spa, vdev_t *vd, zio_t *zio, + uint64_t stateoroffset, uint64_t size) +{ +#ifdef _KERNEL + nvlist_t *ereport = NULL; + nvlist_t *detector = NULL; + + if (zfs_is_ratelimiting_event(subclass, vd)) + return; + + zfs_ereport_start(&ereport, &detector, + subclass, spa, vd, zio, stateoroffset, size); + + if (ereport == NULL) + return; + + /* Cleanup is handled by the callback function */ + zfs_zevent_post(ereport, detector, zfs_zevent_post_cb); +#endif +} + +void +zfs_ereport_start_checksum(spa_t *spa, vdev_t *vd, + struct zio *zio, uint64_t offset, uint64_t length, void *arg, + zio_bad_cksum_t *info) +{ + zio_cksum_report_t *report; + + +#ifdef _KERNEL + if (zfs_is_ratelimiting_event(FM_EREPORT_ZFS_CHECKSUM, vd)) + return; +#endif + + report = kmem_zalloc(sizeof (*report), KM_SLEEP); + + if (zio->io_vsd != NULL) + zio->io_vsd_ops->vsd_cksum_report(zio, report, arg); + else + zio_vsd_default_cksum_report(zio, report, arg); + + /* copy the checksum failure information if it was provided */ + if (info != NULL) { + report->zcr_ckinfo = kmem_zalloc(sizeof (*info), KM_SLEEP); + bcopy(info, report->zcr_ckinfo, sizeof (*info)); + } + + report->zcr_align = 1ULL << vd->vdev_top->vdev_ashift; + report->zcr_length = length; + +#ifdef _KERNEL + zfs_ereport_start(&report->zcr_ereport, &report->zcr_detector, + FM_EREPORT_ZFS_CHECKSUM, spa, vd, zio, offset, length); + + if (report->zcr_ereport == NULL) { + zfs_ereport_free_checksum(report); + return; + } +#endif + + mutex_enter(&spa->spa_errlist_lock); + report->zcr_next = zio->io_logical->io_cksum_report; + zio->io_logical->io_cksum_report = report; + mutex_exit(&spa->spa_errlist_lock); +} + +void +zfs_ereport_finish_checksum(zio_cksum_report_t *report, const abd_t *good_data, + const abd_t *bad_data, boolean_t drop_if_identical) +{ +#ifdef _KERNEL + zfs_ecksum_info_t *info; + + info = annotate_ecksum(report->zcr_ereport, report->zcr_ckinfo, + good_data, bad_data, report->zcr_length, drop_if_identical); + if (info != NULL) + zfs_zevent_post(report->zcr_ereport, + report->zcr_detector, zfs_zevent_post_cb); + else + zfs_zevent_post_cb(report->zcr_ereport, report->zcr_detector); + + report->zcr_ereport = report->zcr_detector = NULL; + if (info != NULL) + kmem_free(info, sizeof (*info)); +#endif +} + +void +zfs_ereport_free_checksum(zio_cksum_report_t *rpt) +{ +#ifdef _KERNEL + if (rpt->zcr_ereport != NULL) { + fm_nvlist_destroy(rpt->zcr_ereport, + FM_NVA_FREE); + fm_nvlist_destroy(rpt->zcr_detector, + FM_NVA_FREE); + } +#endif + rpt->zcr_free(rpt->zcr_cbdata, rpt->zcr_cbinfo); + + if (rpt->zcr_ckinfo != NULL) + kmem_free(rpt->zcr_ckinfo, sizeof (*rpt->zcr_ckinfo)); + + kmem_free(rpt, sizeof (*rpt)); +} + + +void +zfs_ereport_post_checksum(spa_t *spa, vdev_t *vd, + struct zio *zio, uint64_t offset, uint64_t length, + const abd_t *good_data, const abd_t *bad_data, zio_bad_cksum_t *zbc) +{ +#ifdef _KERNEL + nvlist_t *ereport = NULL; + nvlist_t *detector = NULL; + zfs_ecksum_info_t *info; + + zfs_ereport_start(&ereport, &detector, + FM_EREPORT_ZFS_CHECKSUM, spa, vd, zio, offset, length); + + if (ereport == NULL) + return; + + info = annotate_ecksum(ereport, zbc, good_data, bad_data, length, + B_FALSE); + + if (info != NULL) { + zfs_zevent_post(ereport, detector, zfs_zevent_post_cb); + kmem_free(info, sizeof (*info)); + } +#endif +} + +/* + * The 'sysevent.fs.zfs.*' events are signals posted to notify user space of + * change in the pool. All sysevents are listed in sys/sysevent/eventdefs.h + * and are designed to be consumed by the ZFS Event Daemon (ZED). For + * additional details refer to the zed(8) man page. + */ +nvlist_t * +zfs_event_create(spa_t *spa, vdev_t *vd, const char *type, const char *name, + nvlist_t *aux) +{ + nvlist_t *resource = NULL; +#ifdef _KERNEL + char class[64]; + + if (spa_load_state(spa) == SPA_LOAD_TRYIMPORT) + return (NULL); + + if ((resource = fm_nvlist_create(NULL)) == NULL) + return (NULL); + + (void) snprintf(class, sizeof (class), "%s.%s.%s", type, + ZFS_ERROR_CLASS, name); + VERIFY0(nvlist_add_uint8(resource, FM_VERSION, FM_RSRC_VERSION)); + VERIFY0(nvlist_add_string(resource, FM_CLASS, class)); + VERIFY0(nvlist_add_string(resource, + FM_EREPORT_PAYLOAD_ZFS_POOL, spa_name(spa))); + VERIFY0(nvlist_add_uint64(resource, + FM_EREPORT_PAYLOAD_ZFS_POOL_GUID, spa_guid(spa))); + VERIFY0(nvlist_add_uint64(resource, + FM_EREPORT_PAYLOAD_ZFS_POOL_STATE, spa_state(spa))); + VERIFY0(nvlist_add_int32(resource, + FM_EREPORT_PAYLOAD_ZFS_POOL_CONTEXT, spa_load_state(spa))); + + if (vd) { + VERIFY0(nvlist_add_uint64(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_GUID, vd->vdev_guid)); + VERIFY0(nvlist_add_uint64(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_STATE, vd->vdev_state)); + if (vd->vdev_path != NULL) + VERIFY0(nvlist_add_string(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_PATH, vd->vdev_path)); + if (vd->vdev_devid != NULL) + VERIFY0(nvlist_add_string(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_DEVID, vd->vdev_devid)); + if (vd->vdev_fru != NULL) + VERIFY0(nvlist_add_string(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_FRU, vd->vdev_fru)); + if (vd->vdev_enc_sysfs_path != NULL) + VERIFY0(nvlist_add_string(resource, + FM_EREPORT_PAYLOAD_ZFS_VDEV_ENC_SYSFS_PATH, + vd->vdev_enc_sysfs_path)); + } + + /* also copy any optional payload data */ + if (aux) { + nvpair_t *elem = NULL; + + while ((elem = nvlist_next_nvpair(aux, elem)) != NULL) + (void) nvlist_add_nvpair(resource, elem); + } + +#endif + return (resource); +} + +static void +zfs_post_common(spa_t *spa, vdev_t *vd, const char *type, const char *name, + nvlist_t *aux) +{ +#ifdef _KERNEL + nvlist_t *resource; + + resource = zfs_event_create(spa, vd, type, name, aux); + if (resource) + zfs_zevent_post(resource, NULL, zfs_zevent_post_cb); +#endif +} + +/* + * The 'resource.fs.zfs.removed' event is an internal signal that the given vdev + * has been removed from the system. This will cause the DE to ignore any + * recent I/O errors, inferring that they are due to the asynchronous device + * removal. + */ +void +zfs_post_remove(spa_t *spa, vdev_t *vd) +{ + zfs_post_common(spa, vd, FM_RSRC_CLASS, FM_RESOURCE_REMOVED, NULL); +} + +/* + * The 'resource.fs.zfs.autoreplace' event is an internal signal that the pool + * has the 'autoreplace' property set, and therefore any broken vdevs will be + * handled by higher level logic, and no vdev fault should be generated. + */ +void +zfs_post_autoreplace(spa_t *spa, vdev_t *vd) +{ + zfs_post_common(spa, vd, FM_RSRC_CLASS, FM_RESOURCE_AUTOREPLACE, NULL); +} + +/* + * The 'resource.fs.zfs.statechange' event is an internal signal that the + * given vdev has transitioned its state to DEGRADED or HEALTHY. This will + * cause the retire agent to repair any outstanding fault management cases + * open because the device was not found (fault.fs.zfs.device). + */ +void +zfs_post_state_change(spa_t *spa, vdev_t *vd, uint64_t laststate) +{ +#ifdef _KERNEL + nvlist_t *aux; + + /* + * Add optional supplemental keys to payload + */ + aux = fm_nvlist_create(NULL); + if (vd && aux) { + if (vd->vdev_physpath) { + (void) nvlist_add_string(aux, + FM_EREPORT_PAYLOAD_ZFS_VDEV_PHYSPATH, + vd->vdev_physpath); + } + if (vd->vdev_enc_sysfs_path) { + (void) nvlist_add_string(aux, + FM_EREPORT_PAYLOAD_ZFS_VDEV_ENC_SYSFS_PATH, + vd->vdev_enc_sysfs_path); + } + + (void) nvlist_add_uint64(aux, + FM_EREPORT_PAYLOAD_ZFS_VDEV_LASTSTATE, laststate); + } + + zfs_post_common(spa, vd, FM_RSRC_CLASS, FM_RESOURCE_STATECHANGE, + aux); + + if (aux) + fm_nvlist_destroy(aux, FM_NVA_FREE); +#endif +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_ereport_post); +EXPORT_SYMBOL(zfs_ereport_post_checksum); +EXPORT_SYMBOL(zfs_post_remove); +EXPORT_SYMBOL(zfs_post_autoreplace); +EXPORT_SYMBOL(zfs_post_state_change); +#endif /* _KERNEL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_fuid.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_fuid.c @@ -0,0 +1,776 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#ifdef _KERNEL +#include +#include +#include +#include +#endif +#include + +/* + * FUID Domain table(s). + * + * The FUID table is stored as a packed nvlist of an array + * of nvlists which contain an index, domain string and offset + * + * During file system initialization the nvlist(s) are read and + * two AVL trees are created. One tree is keyed by the index number + * and the other by the domain string. Nodes are never removed from + * trees, but new entries may be added. If a new entry is added then + * the zfsvfs->z_fuid_dirty flag is set to true and the caller will then + * be responsible for calling zfs_fuid_sync() to sync the changes to disk. + * + */ + +#define FUID_IDX "fuid_idx" +#define FUID_DOMAIN "fuid_domain" +#define FUID_OFFSET "fuid_offset" +#define FUID_NVP_ARRAY "fuid_nvlist" + +typedef struct fuid_domain { + avl_node_t f_domnode; + avl_node_t f_idxnode; + ksiddomain_t *f_ksid; + uint64_t f_idx; +} fuid_domain_t; + +static char *nulldomain = ""; + +/* + * Compare two indexes. + */ +static int +idx_compare(const void *arg1, const void *arg2) +{ + const fuid_domain_t *node1 = (const fuid_domain_t *)arg1; + const fuid_domain_t *node2 = (const fuid_domain_t *)arg2; + + return (AVL_CMP(node1->f_idx, node2->f_idx)); +} + +/* + * Compare two domain strings. + */ +static int +domain_compare(const void *arg1, const void *arg2) +{ + const fuid_domain_t *node1 = (const fuid_domain_t *)arg1; + const fuid_domain_t *node2 = (const fuid_domain_t *)arg2; + int val; + + val = strcmp(node1->f_ksid->kd_name, node2->f_ksid->kd_name); + + return (AVL_ISIGN(val)); +} + +void +zfs_fuid_avl_tree_create(avl_tree_t *idx_tree, avl_tree_t *domain_tree) +{ + avl_create(idx_tree, idx_compare, + sizeof (fuid_domain_t), offsetof(fuid_domain_t, f_idxnode)); + avl_create(domain_tree, domain_compare, + sizeof (fuid_domain_t), offsetof(fuid_domain_t, f_domnode)); +} + +/* + * load initial fuid domain and idx trees. This function is used by + * both the kernel and zdb. + */ +uint64_t +zfs_fuid_table_load(objset_t *os, uint64_t fuid_obj, avl_tree_t *idx_tree, + avl_tree_t *domain_tree) +{ + dmu_buf_t *db; + uint64_t fuid_size; + + ASSERT(fuid_obj != 0); + VERIFY(0 == dmu_bonus_hold(os, fuid_obj, + FTAG, &db)); + fuid_size = *(uint64_t *)db->db_data; + dmu_buf_rele(db, FTAG); + + if (fuid_size) { + nvlist_t **fuidnvp; + nvlist_t *nvp = NULL; + uint_t count; + char *packed; + int i; + + packed = kmem_alloc(fuid_size, KM_SLEEP); + VERIFY(dmu_read(os, fuid_obj, 0, + fuid_size, packed, DMU_READ_PREFETCH) == 0); + VERIFY(nvlist_unpack(packed, fuid_size, + &nvp, 0) == 0); + VERIFY(nvlist_lookup_nvlist_array(nvp, FUID_NVP_ARRAY, + &fuidnvp, &count) == 0); + + for (i = 0; i != count; i++) { + fuid_domain_t *domnode; + char *domain; + uint64_t idx; + + VERIFY(nvlist_lookup_string(fuidnvp[i], FUID_DOMAIN, + &domain) == 0); + VERIFY(nvlist_lookup_uint64(fuidnvp[i], FUID_IDX, + &idx) == 0); + + domnode = kmem_alloc(sizeof (fuid_domain_t), KM_SLEEP); + + domnode->f_idx = idx; + domnode->f_ksid = ksid_lookupdomain(domain); + avl_add(idx_tree, domnode); + avl_add(domain_tree, domnode); + } + nvlist_free(nvp); + kmem_free(packed, fuid_size); + } + return (fuid_size); +} + +void +zfs_fuid_table_destroy(avl_tree_t *idx_tree, avl_tree_t *domain_tree) +{ + fuid_domain_t *domnode; + void *cookie; + + cookie = NULL; + while ((domnode = avl_destroy_nodes(domain_tree, &cookie))) + ksiddomain_rele(domnode->f_ksid); + + avl_destroy(domain_tree); + cookie = NULL; + while ((domnode = avl_destroy_nodes(idx_tree, &cookie))) + kmem_free(domnode, sizeof (fuid_domain_t)); + avl_destroy(idx_tree); +} + +char * +zfs_fuid_idx_domain(avl_tree_t *idx_tree, uint32_t idx) +{ + fuid_domain_t searchnode, *findnode; + avl_index_t loc; + + searchnode.f_idx = idx; + + findnode = avl_find(idx_tree, &searchnode, &loc); + + return (findnode ? findnode->f_ksid->kd_name : nulldomain); +} + +#ifdef _KERNEL +/* + * Load the fuid table(s) into memory. + */ +static void +zfs_fuid_init(zfsvfs_t *zfsvfs) +{ + rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); + + if (zfsvfs->z_fuid_loaded) { + rw_exit(&zfsvfs->z_fuid_lock); + return; + } + + zfs_fuid_avl_tree_create(&zfsvfs->z_fuid_idx, &zfsvfs->z_fuid_domain); + + (void) zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, + ZFS_FUID_TABLES, 8, 1, &zfsvfs->z_fuid_obj); + if (zfsvfs->z_fuid_obj != 0) { + zfsvfs->z_fuid_size = zfs_fuid_table_load(zfsvfs->z_os, + zfsvfs->z_fuid_obj, &zfsvfs->z_fuid_idx, + &zfsvfs->z_fuid_domain); + } + + zfsvfs->z_fuid_loaded = B_TRUE; + rw_exit(&zfsvfs->z_fuid_lock); +} + +/* + * sync out AVL trees to persistent storage. + */ +void +zfs_fuid_sync(zfsvfs_t *zfsvfs, dmu_tx_t *tx) +{ + nvlist_t *nvp; + nvlist_t **fuids; + size_t nvsize = 0; + char *packed; + dmu_buf_t *db; + fuid_domain_t *domnode; + int numnodes; + int i; + + if (!zfsvfs->z_fuid_dirty) { + return; + } + + rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); + + /* + * First see if table needs to be created? + */ + if (zfsvfs->z_fuid_obj == 0) { + zfsvfs->z_fuid_obj = dmu_object_alloc(zfsvfs->z_os, + DMU_OT_FUID, 1 << 14, DMU_OT_FUID_SIZE, + sizeof (uint64_t), tx); + VERIFY(zap_add(zfsvfs->z_os, MASTER_NODE_OBJ, + ZFS_FUID_TABLES, sizeof (uint64_t), 1, + &zfsvfs->z_fuid_obj, tx) == 0); + } + + VERIFY(nvlist_alloc(&nvp, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + numnodes = avl_numnodes(&zfsvfs->z_fuid_idx); + fuids = kmem_alloc(numnodes * sizeof (void *), KM_SLEEP); + for (i = 0, domnode = avl_first(&zfsvfs->z_fuid_domain); domnode; i++, + domnode = AVL_NEXT(&zfsvfs->z_fuid_domain, domnode)) { + VERIFY(nvlist_alloc(&fuids[i], NV_UNIQUE_NAME, KM_SLEEP) == 0); + VERIFY(nvlist_add_uint64(fuids[i], FUID_IDX, + domnode->f_idx) == 0); + VERIFY(nvlist_add_uint64(fuids[i], FUID_OFFSET, 0) == 0); + VERIFY(nvlist_add_string(fuids[i], FUID_DOMAIN, + domnode->f_ksid->kd_name) == 0); + } + VERIFY(nvlist_add_nvlist_array(nvp, FUID_NVP_ARRAY, + fuids, numnodes) == 0); + for (i = 0; i != numnodes; i++) + nvlist_free(fuids[i]); + kmem_free(fuids, numnodes * sizeof (void *)); + VERIFY(nvlist_size(nvp, &nvsize, NV_ENCODE_XDR) == 0); + packed = kmem_alloc(nvsize, KM_SLEEP); + VERIFY(nvlist_pack(nvp, &packed, &nvsize, + NV_ENCODE_XDR, KM_SLEEP) == 0); + nvlist_free(nvp); + zfsvfs->z_fuid_size = nvsize; + dmu_write(zfsvfs->z_os, zfsvfs->z_fuid_obj, 0, + zfsvfs->z_fuid_size, packed, tx); + kmem_free(packed, zfsvfs->z_fuid_size); + VERIFY(0 == dmu_bonus_hold(zfsvfs->z_os, zfsvfs->z_fuid_obj, + FTAG, &db)); + dmu_buf_will_dirty(db, tx); + *(uint64_t *)db->db_data = zfsvfs->z_fuid_size; + dmu_buf_rele(db, FTAG); + + zfsvfs->z_fuid_dirty = B_FALSE; + rw_exit(&zfsvfs->z_fuid_lock); +} + +/* + * Query domain table for a given domain. + * + * If domain isn't found and addok is set, it is added to AVL trees and + * the zfsvfs->z_fuid_dirty flag will be set to TRUE. It will then be + * necessary for the caller or another thread to detect the dirty table + * and sync out the changes. + */ +int +zfs_fuid_find_by_domain(zfsvfs_t *zfsvfs, const char *domain, + char **retdomain, boolean_t addok) +{ + fuid_domain_t searchnode, *findnode; + avl_index_t loc; + krw_t rw = RW_READER; + + /* + * If the dummy "nobody" domain then return an index of 0 + * to cause the created FUID to be a standard POSIX id + * for the user nobody. + */ + if (domain[0] == '\0') { + if (retdomain) + *retdomain = nulldomain; + return (0); + } + + searchnode.f_ksid = ksid_lookupdomain(domain); + if (retdomain) + *retdomain = searchnode.f_ksid->kd_name; + if (!zfsvfs->z_fuid_loaded) + zfs_fuid_init(zfsvfs); + +retry: + rw_enter(&zfsvfs->z_fuid_lock, rw); + findnode = avl_find(&zfsvfs->z_fuid_domain, &searchnode, &loc); + + if (findnode) { + rw_exit(&zfsvfs->z_fuid_lock); + ksiddomain_rele(searchnode.f_ksid); + return (findnode->f_idx); + } else if (addok) { + fuid_domain_t *domnode; + uint64_t retidx; + + if (rw == RW_READER && !rw_tryupgrade(&zfsvfs->z_fuid_lock)) { + rw_exit(&zfsvfs->z_fuid_lock); + rw = RW_WRITER; + goto retry; + } + + domnode = kmem_alloc(sizeof (fuid_domain_t), KM_SLEEP); + domnode->f_ksid = searchnode.f_ksid; + + retidx = domnode->f_idx = avl_numnodes(&zfsvfs->z_fuid_idx) + 1; + + avl_add(&zfsvfs->z_fuid_domain, domnode); + avl_add(&zfsvfs->z_fuid_idx, domnode); + zfsvfs->z_fuid_dirty = B_TRUE; + rw_exit(&zfsvfs->z_fuid_lock); + return (retidx); + } else { + rw_exit(&zfsvfs->z_fuid_lock); + return (-1); + } +} + +/* + * Query domain table by index, returning domain string + * + * Returns a pointer from an avl node of the domain string. + * + */ +const char * +zfs_fuid_find_by_idx(zfsvfs_t *zfsvfs, uint32_t idx) +{ + char *domain; + + if (idx == 0 || !zfsvfs->z_use_fuids) + return (NULL); + + if (!zfsvfs->z_fuid_loaded) + zfs_fuid_init(zfsvfs); + + rw_enter(&zfsvfs->z_fuid_lock, RW_READER); + + if (zfsvfs->z_fuid_obj || zfsvfs->z_fuid_dirty) + domain = zfs_fuid_idx_domain(&zfsvfs->z_fuid_idx, idx); + else + domain = nulldomain; + rw_exit(&zfsvfs->z_fuid_lock); + + ASSERT(domain); + return (domain); +} + +void +zfs_fuid_map_ids(znode_t *zp, cred_t *cr, uid_t *uidp, uid_t *gidp) +{ + *uidp = zfs_fuid_map_id(ZTOZSB(zp), KUID_TO_SUID(ZTOI(zp)->i_uid), + cr, ZFS_OWNER); + *gidp = zfs_fuid_map_id(ZTOZSB(zp), KGID_TO_SGID(ZTOI(zp)->i_gid), + cr, ZFS_GROUP); +} + +uid_t +zfs_fuid_map_id(zfsvfs_t *zfsvfs, uint64_t fuid, + cred_t *cr, zfs_fuid_type_t type) +{ +#ifdef HAVE_KSID + uint32_t index = FUID_INDEX(fuid); + const char *domain; + uid_t id; + + if (index == 0) + return (fuid); + + domain = zfs_fuid_find_by_idx(zfsvfs, index); + ASSERT(domain != NULL); + + if (type == ZFS_OWNER || type == ZFS_ACE_USER) { + (void) kidmap_getuidbysid(crgetzone(cr), domain, + FUID_RID(fuid), &id); + } else { + (void) kidmap_getgidbysid(crgetzone(cr), domain, + FUID_RID(fuid), &id); + } + return (id); +#else + /* + * The Linux port only supports POSIX IDs, use the passed id. + */ + return (fuid); +#endif /* HAVE_KSID */ +} + +/* + * Add a FUID node to the list of fuid's being created for this + * ACL + * + * If ACL has multiple domains, then keep only one copy of each unique + * domain. + */ +void +zfs_fuid_node_add(zfs_fuid_info_t **fuidpp, const char *domain, uint32_t rid, + uint64_t idx, uint64_t id, zfs_fuid_type_t type) +{ + zfs_fuid_t *fuid; + zfs_fuid_domain_t *fuid_domain; + zfs_fuid_info_t *fuidp; + uint64_t fuididx; + boolean_t found = B_FALSE; + + if (*fuidpp == NULL) + *fuidpp = zfs_fuid_info_alloc(); + + fuidp = *fuidpp; + /* + * First find fuid domain index in linked list + * + * If one isn't found then create an entry. + */ + + for (fuididx = 1, fuid_domain = list_head(&fuidp->z_domains); + fuid_domain; fuid_domain = list_next(&fuidp->z_domains, + fuid_domain), fuididx++) { + if (idx == fuid_domain->z_domidx) { + found = B_TRUE; + break; + } + } + + if (!found) { + fuid_domain = kmem_alloc(sizeof (zfs_fuid_domain_t), KM_SLEEP); + fuid_domain->z_domain = domain; + fuid_domain->z_domidx = idx; + list_insert_tail(&fuidp->z_domains, fuid_domain); + fuidp->z_domain_str_sz += strlen(domain) + 1; + fuidp->z_domain_cnt++; + } + + if (type == ZFS_ACE_USER || type == ZFS_ACE_GROUP) { + + /* + * Now allocate fuid entry and add it on the end of the list + */ + + fuid = kmem_alloc(sizeof (zfs_fuid_t), KM_SLEEP); + fuid->z_id = id; + fuid->z_domidx = idx; + fuid->z_logfuid = FUID_ENCODE(fuididx, rid); + + list_insert_tail(&fuidp->z_fuids, fuid); + fuidp->z_fuid_cnt++; + } else { + if (type == ZFS_OWNER) + fuidp->z_fuid_owner = FUID_ENCODE(fuididx, rid); + else + fuidp->z_fuid_group = FUID_ENCODE(fuididx, rid); + } +} + +#ifdef HAVE_KSID +/* + * Create a file system FUID, based on information in the users cred + * + * If cred contains KSID_OWNER then it should be used to determine + * the uid otherwise cred's uid will be used. By default cred's gid + * is used unless it's an ephemeral ID in which case KSID_GROUP will + * be used if it exists. + */ +uint64_t +zfs_fuid_create_cred(zfsvfs_t *zfsvfs, zfs_fuid_type_t type, + cred_t *cr, zfs_fuid_info_t **fuidp) +{ + uint64_t idx; + ksid_t *ksid; + uint32_t rid; + char *kdomain; + const char *domain; + uid_t id; + + VERIFY(type == ZFS_OWNER || type == ZFS_GROUP); + + ksid = crgetsid(cr, (type == ZFS_OWNER) ? KSID_OWNER : KSID_GROUP); + + if (!zfsvfs->z_use_fuids || (ksid == NULL)) { + id = (type == ZFS_OWNER) ? crgetuid(cr) : crgetgid(cr); + + if (IS_EPHEMERAL(id)) + return ((type == ZFS_OWNER) ? UID_NOBODY : GID_NOBODY); + + return ((uint64_t)id); + } + + /* + * ksid is present and FUID is supported + */ + id = (type == ZFS_OWNER) ? ksid_getid(ksid) : crgetgid(cr); + + if (!IS_EPHEMERAL(id)) + return ((uint64_t)id); + + if (type == ZFS_GROUP) + id = ksid_getid(ksid); + + rid = ksid_getrid(ksid); + domain = ksid_getdomain(ksid); + + idx = zfs_fuid_find_by_domain(zfsvfs, domain, &kdomain, B_TRUE); + + zfs_fuid_node_add(fuidp, kdomain, rid, idx, id, type); + + return (FUID_ENCODE(idx, rid)); +} +#endif /* HAVE_KSID */ + +/* + * Create a file system FUID for an ACL ace + * or a chown/chgrp of the file. + * This is similar to zfs_fuid_create_cred, except that + * we can't find the domain + rid information in the + * cred. Instead we have to query Winchester for the + * domain and rid. + * + * During replay operations the domain+rid information is + * found in the zfs_fuid_info_t that the replay code has + * attached to the zfsvfs of the file system. + */ +uint64_t +zfs_fuid_create(zfsvfs_t *zfsvfs, uint64_t id, cred_t *cr, + zfs_fuid_type_t type, zfs_fuid_info_t **fuidpp) +{ +#ifdef HAVE_KSID + const char *domain; + char *kdomain; + uint32_t fuid_idx = FUID_INDEX(id); + uint32_t rid; + idmap_stat status; + uint64_t idx = 0; + zfs_fuid_t *zfuid = NULL; + zfs_fuid_info_t *fuidp = NULL; + + /* + * If POSIX ID, or entry is already a FUID then + * just return the id + * + * We may also be handed an already FUID'ized id via + * chmod. + */ + + if (!zfsvfs->z_use_fuids || !IS_EPHEMERAL(id) || fuid_idx != 0) + return (id); + + if (zfsvfs->z_replay) { + fuidp = zfsvfs->z_fuid_replay; + + /* + * If we are passed an ephemeral id, but no + * fuid_info was logged then return NOBODY. + * This is most likely a result of idmap service + * not being available. + */ + if (fuidp == NULL) + return (UID_NOBODY); + + VERIFY3U(type, >=, ZFS_OWNER); + VERIFY3U(type, <=, ZFS_ACE_GROUP); + + switch (type) { + case ZFS_ACE_USER: + case ZFS_ACE_GROUP: + zfuid = list_head(&fuidp->z_fuids); + rid = FUID_RID(zfuid->z_logfuid); + idx = FUID_INDEX(zfuid->z_logfuid); + break; + case ZFS_OWNER: + rid = FUID_RID(fuidp->z_fuid_owner); + idx = FUID_INDEX(fuidp->z_fuid_owner); + break; + case ZFS_GROUP: + rid = FUID_RID(fuidp->z_fuid_group); + idx = FUID_INDEX(fuidp->z_fuid_group); + break; + }; + domain = fuidp->z_domain_table[idx - 1]; + } else { + if (type == ZFS_OWNER || type == ZFS_ACE_USER) + status = kidmap_getsidbyuid(crgetzone(cr), id, + &domain, &rid); + else + status = kidmap_getsidbygid(crgetzone(cr), id, + &domain, &rid); + + if (status != 0) { + /* + * When returning nobody we will need to + * make a dummy fuid table entry for logging + * purposes. + */ + rid = UID_NOBODY; + domain = nulldomain; + } + } + + idx = zfs_fuid_find_by_domain(zfsvfs, domain, &kdomain, B_TRUE); + + if (!zfsvfs->z_replay) + zfs_fuid_node_add(fuidpp, kdomain, + rid, idx, id, type); + else if (zfuid != NULL) { + list_remove(&fuidp->z_fuids, zfuid); + kmem_free(zfuid, sizeof (zfs_fuid_t)); + } + return (FUID_ENCODE(idx, rid)); +#else + /* + * The Linux port only supports POSIX IDs, use the passed id. + */ + return (id); +#endif +} + +void +zfs_fuid_destroy(zfsvfs_t *zfsvfs) +{ + rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); + if (!zfsvfs->z_fuid_loaded) { + rw_exit(&zfsvfs->z_fuid_lock); + return; + } + zfs_fuid_table_destroy(&zfsvfs->z_fuid_idx, &zfsvfs->z_fuid_domain); + rw_exit(&zfsvfs->z_fuid_lock); +} + +/* + * Allocate zfs_fuid_info for tracking FUIDs created during + * zfs_mknode, VOP_SETATTR() or VOP_SETSECATTR() + */ +zfs_fuid_info_t * +zfs_fuid_info_alloc(void) +{ + zfs_fuid_info_t *fuidp; + + fuidp = kmem_zalloc(sizeof (zfs_fuid_info_t), KM_SLEEP); + list_create(&fuidp->z_domains, sizeof (zfs_fuid_domain_t), + offsetof(zfs_fuid_domain_t, z_next)); + list_create(&fuidp->z_fuids, sizeof (zfs_fuid_t), + offsetof(zfs_fuid_t, z_next)); + return (fuidp); +} + +/* + * Release all memory associated with zfs_fuid_info_t + */ +void +zfs_fuid_info_free(zfs_fuid_info_t *fuidp) +{ + zfs_fuid_t *zfuid; + zfs_fuid_domain_t *zdomain; + + while ((zfuid = list_head(&fuidp->z_fuids)) != NULL) { + list_remove(&fuidp->z_fuids, zfuid); + kmem_free(zfuid, sizeof (zfs_fuid_t)); + } + + if (fuidp->z_domain_table != NULL) + kmem_free(fuidp->z_domain_table, + (sizeof (char *)) * fuidp->z_domain_cnt); + + while ((zdomain = list_head(&fuidp->z_domains)) != NULL) { + list_remove(&fuidp->z_domains, zdomain); + kmem_free(zdomain, sizeof (zfs_fuid_domain_t)); + } + + kmem_free(fuidp, sizeof (zfs_fuid_info_t)); +} + +/* + * Check to see if id is a groupmember. If cred + * has ksid info then sidlist is checked first + * and if still not found then POSIX groups are checked + * + * Will use a straight FUID compare when possible. + */ +boolean_t +zfs_groupmember(zfsvfs_t *zfsvfs, uint64_t id, cred_t *cr) +{ +#ifdef HAVE_KSID + ksid_t *ksid = crgetsid(cr, KSID_GROUP); + ksidlist_t *ksidlist = crgetsidlist(cr); + uid_t gid; + + if (ksid && ksidlist) { + int i; + ksid_t *ksid_groups; + uint32_t idx = FUID_INDEX(id); + uint32_t rid = FUID_RID(id); + + ksid_groups = ksidlist->ksl_sids; + + for (i = 0; i != ksidlist->ksl_nsid; i++) { + if (idx == 0) { + if (id != IDMAP_WK_CREATOR_GROUP_GID && + id == ksid_groups[i].ks_id) { + return (B_TRUE); + } + } else { + const char *domain; + + domain = zfs_fuid_find_by_idx(zfsvfs, idx); + ASSERT(domain != NULL); + + if (strcmp(domain, + IDMAP_WK_CREATOR_SID_AUTHORITY) == 0) + return (B_FALSE); + + if ((strcmp(domain, + ksid_groups[i].ks_domain->kd_name) == 0) && + rid == ksid_groups[i].ks_rid) + return (B_TRUE); + } + } + } + + /* + * Not found in ksidlist, check posix groups + */ + gid = zfs_fuid_map_id(zfsvfs, id, cr, ZFS_GROUP); + return (groupmember(gid, cr)); +#else + return (B_TRUE); +#endif +} + +void +zfs_fuid_txhold(zfsvfs_t *zfsvfs, dmu_tx_t *tx) +{ + if (zfsvfs->z_fuid_obj == 0) { + dmu_tx_hold_bonus(tx, DMU_NEW_OBJECT); + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, + FUID_SIZE_ESTIMATE(zfsvfs)); + dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, FALSE, NULL); + } else { + dmu_tx_hold_bonus(tx, zfsvfs->z_fuid_obj); + dmu_tx_hold_write(tx, zfsvfs->z_fuid_obj, 0, + FUID_SIZE_ESTIMATE(zfsvfs)); + } +} +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_ioctl.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_ioctl.c @@ -0,0 +1,6767 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Portions Copyright 2011 Martin Matuska + * Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved. + * Portions Copyright 2012 Pawel Jakub Dawidek + * Copyright (c) 2014, 2016 Joyent, Inc. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014, Joyent, Inc. All rights reserved. + * Copyright (c) 2011, 2015 by Delphix. All rights reserved. + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2017, loli10K . All rights reserved. + * Copyright (c) 2017 Datto Inc. + * Copyright 2017 RackTop Systems. + */ + +/* + * ZFS ioctls. + * + * This file handles the ioctls to /dev/zfs, used for configuring ZFS storage + * pools and filesystems, e.g. with /sbin/zfs and /sbin/zpool. + * + * There are two ways that we handle ioctls: the legacy way where almost + * all of the logic is in the ioctl callback, and the new way where most + * of the marshalling is handled in the common entry point, zfsdev_ioctl(). + * + * Non-legacy ioctls should be registered by calling + * zfs_ioctl_register() from zfs_ioctl_init(). The ioctl is invoked + * from userland by lzc_ioctl(). + * + * The registration arguments are as follows: + * + * const char *name + * The name of the ioctl. This is used for history logging. If the + * ioctl returns successfully (the callback returns 0), and allow_log + * is true, then a history log entry will be recorded with the input & + * output nvlists. The log entry can be printed with "zpool history -i". + * + * zfs_ioc_t ioc + * The ioctl request number, which userland will pass to ioctl(2). + * The ioctl numbers can change from release to release, because + * the caller (libzfs) must be matched to the kernel. + * + * zfs_secpolicy_func_t *secpolicy + * This function will be called before the zfs_ioc_func_t, to + * determine if this operation is permitted. It should return EPERM + * on failure, and 0 on success. Checks include determining if the + * dataset is visible in this zone, and if the user has either all + * zfs privileges in the zone (SYS_MOUNT), or has been granted permission + * to do this operation on this dataset with "zfs allow". + * + * zfs_ioc_namecheck_t namecheck + * This specifies what to expect in the zfs_cmd_t:zc_name -- a pool + * name, a dataset name, or nothing. If the name is not well-formed, + * the ioctl will fail and the callback will not be called. + * Therefore, the callback can assume that the name is well-formed + * (e.g. is null-terminated, doesn't have more than one '@' character, + * doesn't have invalid characters). + * + * zfs_ioc_poolcheck_t pool_check + * This specifies requirements on the pool state. If the pool does + * not meet them (is suspended or is readonly), the ioctl will fail + * and the callback will not be called. If any checks are specified + * (i.e. it is not POOL_CHECK_NONE), namecheck must not be NO_NAME. + * Multiple checks can be or-ed together (e.g. POOL_CHECK_SUSPENDED | + * POOL_CHECK_READONLY). + * + * boolean_t smush_outnvlist + * If smush_outnvlist is true, then the output is presumed to be a + * list of errors, and it will be "smushed" down to fit into the + * caller's buffer, by removing some entries and replacing them with a + * single "N_MORE_ERRORS" entry indicating how many were removed. See + * nvlist_smush() for details. If smush_outnvlist is false, and the + * outnvlist does not fit into the userland-provided buffer, then the + * ioctl will fail with ENOMEM. + * + * zfs_ioc_func_t *func + * The callback function that will perform the operation. + * + * The callback should return 0 on success, or an error number on + * failure. If the function fails, the userland ioctl will return -1, + * and errno will be set to the callback's return value. The callback + * will be called with the following arguments: + * + * const char *name + * The name of the pool or dataset to operate on, from + * zfs_cmd_t:zc_name. The 'namecheck' argument specifies the + * expected type (pool, dataset, or none). + * + * nvlist_t *innvl + * The input nvlist, deserialized from zfs_cmd_t:zc_nvlist_src. Or + * NULL if no input nvlist was provided. Changes to this nvlist are + * ignored. If the input nvlist could not be deserialized, the + * ioctl will fail and the callback will not be called. + * + * nvlist_t *outnvl + * The output nvlist, initially empty. The callback can fill it in, + * and it will be returned to userland by serializing it into + * zfs_cmd_t:zc_nvlist_dst. If it is non-empty, and serialization + * fails (e.g. because the caller didn't supply a large enough + * buffer), then the overall ioctl will fail. See the + * 'smush_nvlist' argument above for additional behaviors. + * + * There are two typical uses of the output nvlist: + * - To return state, e.g. property values. In this case, + * smush_outnvlist should be false. If the buffer was not large + * enough, the caller will reallocate a larger buffer and try + * the ioctl again. + * + * - To return multiple errors from an ioctl which makes on-disk + * changes. In this case, smush_outnvlist should be true. + * Ioctls which make on-disk modifications should generally not + * use the outnvl if they succeed, because the caller can not + * distinguish between the operation failing, and + * deserialization failing. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "zfs_namecheck.h" +#include "zfs_prop.h" +#include "zfs_deleg.h" +#include "zfs_comutil.h" + +/* + * Limit maximum nvlist size. We don't want users passing in insane values + * for zc->zc_nvlist_src_size, since we will need to allocate that much memory. + */ +#define MAX_NVLIST_SRC_SIZE KMALLOC_MAX_SIZE + +kmutex_t zfsdev_state_lock; +zfsdev_state_t *zfsdev_state_list; + +extern void zfs_init(void); +extern void zfs_fini(void); + +uint_t zfs_fsyncer_key; +extern uint_t rrw_tsd_key; +static uint_t zfs_allow_log_key; + +typedef int zfs_ioc_legacy_func_t(zfs_cmd_t *); +typedef int zfs_ioc_func_t(const char *, nvlist_t *, nvlist_t *); +typedef int zfs_secpolicy_func_t(zfs_cmd_t *, nvlist_t *, cred_t *); + +typedef enum { + NO_NAME, + POOL_NAME, + DATASET_NAME +} zfs_ioc_namecheck_t; + +typedef enum { + POOL_CHECK_NONE = 1 << 0, + POOL_CHECK_SUSPENDED = 1 << 1, + POOL_CHECK_READONLY = 1 << 2, +} zfs_ioc_poolcheck_t; + +typedef struct zfs_ioc_vec { + zfs_ioc_legacy_func_t *zvec_legacy_func; + zfs_ioc_func_t *zvec_func; + zfs_secpolicy_func_t *zvec_secpolicy; + zfs_ioc_namecheck_t zvec_namecheck; + boolean_t zvec_allow_log; + zfs_ioc_poolcheck_t zvec_pool_check; + boolean_t zvec_smush_outnvlist; + const char *zvec_name; +} zfs_ioc_vec_t; + +/* This array is indexed by zfs_userquota_prop_t */ +static const char *userquota_perms[] = { + ZFS_DELEG_PERM_USERUSED, + ZFS_DELEG_PERM_USERQUOTA, + ZFS_DELEG_PERM_GROUPUSED, + ZFS_DELEG_PERM_GROUPQUOTA, + ZFS_DELEG_PERM_USEROBJUSED, + ZFS_DELEG_PERM_USEROBJQUOTA, + ZFS_DELEG_PERM_GROUPOBJUSED, + ZFS_DELEG_PERM_GROUPOBJQUOTA, +}; + +static int zfs_ioc_userspace_upgrade(zfs_cmd_t *zc); +static int zfs_ioc_userobjspace_upgrade(zfs_cmd_t *zc); +static int zfs_check_settable(const char *name, nvpair_t *property, + cred_t *cr); +static int zfs_check_clearable(char *dataset, nvlist_t *props, + nvlist_t **errors); +static int zfs_fill_zplprops_root(uint64_t, nvlist_t *, nvlist_t *, + boolean_t *); +int zfs_set_prop_nvlist(const char *, zprop_source_t, nvlist_t *, nvlist_t *); +static int get_nvlist(uint64_t nvl, uint64_t size, int iflag, nvlist_t **nvp); + +static void +history_str_free(char *buf) +{ + kmem_free(buf, HIS_MAX_RECORD_LEN); +} + +static char * +history_str_get(zfs_cmd_t *zc) +{ + char *buf; + + if (zc->zc_history == 0) + return (NULL); + + buf = kmem_alloc(HIS_MAX_RECORD_LEN, KM_SLEEP); + if (copyinstr((void *)(uintptr_t)zc->zc_history, + buf, HIS_MAX_RECORD_LEN, NULL) != 0) { + history_str_free(buf); + return (NULL); + } + + buf[HIS_MAX_RECORD_LEN -1] = '\0'; + + return (buf); +} + +/* + * Check to see if the named dataset is currently defined as bootable + */ +static boolean_t +zfs_is_bootfs(const char *name) +{ + objset_t *os; + + if (dmu_objset_hold(name, FTAG, &os) == 0) { + boolean_t ret; + ret = (dmu_objset_id(os) == spa_bootfs(dmu_objset_spa(os))); + dmu_objset_rele(os, FTAG); + return (ret); + } + return (B_FALSE); +} + +/* + * Return non-zero if the spa version is less than requested version. + */ +static int +zfs_earlier_version(const char *name, int version) +{ + spa_t *spa; + + if (spa_open(name, &spa, FTAG) == 0) { + if (spa_version(spa) < version) { + spa_close(spa, FTAG); + return (1); + } + spa_close(spa, FTAG); + } + return (0); +} + +/* + * Return TRUE if the ZPL version is less than requested version. + */ +static boolean_t +zpl_earlier_version(const char *name, int version) +{ + objset_t *os; + boolean_t rc = B_TRUE; + + if (dmu_objset_hold(name, FTAG, &os) == 0) { + uint64_t zplversion; + + if (dmu_objset_type(os) != DMU_OST_ZFS) { + dmu_objset_rele(os, FTAG); + return (B_TRUE); + } + /* XXX reading from non-owned objset */ + if (zfs_get_zplprop(os, ZFS_PROP_VERSION, &zplversion) == 0) + rc = zplversion < version; + dmu_objset_rele(os, FTAG); + } + return (rc); +} + +static void +zfs_log_history(zfs_cmd_t *zc) +{ + spa_t *spa; + char *buf; + + if ((buf = history_str_get(zc)) == NULL) + return; + + if (spa_open(zc->zc_name, &spa, FTAG) == 0) { + if (spa_version(spa) >= SPA_VERSION_ZPOOL_HISTORY) + (void) spa_history_log(spa, buf); + spa_close(spa, FTAG); + } + history_str_free(buf); +} + +/* + * Policy for top-level read operations (list pools). Requires no privileges, + * and can be used in the local zone, as there is no associated dataset. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_none(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (0); +} + +/* + * Policy for dataset read operations (list children, get statistics). Requires + * no privileges, but must be visible in the local zone. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_read(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + if (INGLOBALZONE(curproc) || + zone_dataset_visible(zc->zc_name, NULL)) + return (0); + + return (SET_ERROR(ENOENT)); +} + +static int +zfs_dozonecheck_impl(const char *dataset, uint64_t zoned, cred_t *cr) +{ + int writable = 1; + + /* + * The dataset must be visible by this zone -- check this first + * so they don't see EPERM on something they shouldn't know about. + */ + if (!INGLOBALZONE(curproc) && + !zone_dataset_visible(dataset, &writable)) + return (SET_ERROR(ENOENT)); + + if (INGLOBALZONE(curproc)) { + /* + * If the fs is zoned, only root can access it from the + * global zone. + */ + if (secpolicy_zfs(cr) && zoned) + return (SET_ERROR(EPERM)); + } else { + /* + * If we are in a local zone, the 'zoned' property must be set. + */ + if (!zoned) + return (SET_ERROR(EPERM)); + + /* must be writable by this zone */ + if (!writable) + return (SET_ERROR(EPERM)); + } + return (0); +} + +static int +zfs_dozonecheck(const char *dataset, cred_t *cr) +{ + uint64_t zoned; + + if (dsl_prop_get_integer(dataset, "zoned", &zoned, NULL)) + return (SET_ERROR(ENOENT)); + + return (zfs_dozonecheck_impl(dataset, zoned, cr)); +} + +static int +zfs_dozonecheck_ds(const char *dataset, dsl_dataset_t *ds, cred_t *cr) +{ + uint64_t zoned; + + if (dsl_prop_get_int_ds(ds, "zoned", &zoned)) + return (SET_ERROR(ENOENT)); + + return (zfs_dozonecheck_impl(dataset, zoned, cr)); +} + +static int +zfs_secpolicy_write_perms_ds(const char *name, dsl_dataset_t *ds, + const char *perm, cred_t *cr) +{ + int error; + + error = zfs_dozonecheck_ds(name, ds, cr); + if (error == 0) { + error = secpolicy_zfs(cr); + if (error != 0) + error = dsl_deleg_access_impl(ds, perm, cr); + } + return (error); +} + +static int +zfs_secpolicy_write_perms(const char *name, const char *perm, cred_t *cr) +{ + int error; + dsl_dataset_t *ds; + dsl_pool_t *dp; + + /* + * First do a quick check for root in the global zone, which + * is allowed to do all write_perms. This ensures that zfs_ioc_* + * will get to handle nonexistent datasets. + */ + if (INGLOBALZONE(curproc) && secpolicy_zfs(cr) == 0) + return (0); + + error = dsl_pool_hold(name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, name, FTAG, &ds); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + error = zfs_secpolicy_write_perms_ds(name, ds, perm, cr); + + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); +} + +/* + * Policy for setting the security label property. + * + * Returns 0 for success, non-zero for access and other errors. + */ +static int +zfs_set_slabel_policy(const char *name, char *strval, cred_t *cr) +{ +#ifdef HAVE_MLSLABEL + char ds_hexsl[MAXNAMELEN]; + bslabel_t ds_sl, new_sl; + boolean_t new_default = FALSE; + uint64_t zoned; + int needed_priv = -1; + int error; + + /* First get the existing dataset label. */ + error = dsl_prop_get(name, zfs_prop_to_name(ZFS_PROP_MLSLABEL), + 1, sizeof (ds_hexsl), &ds_hexsl, NULL); + if (error != 0) + return (SET_ERROR(EPERM)); + + if (strcasecmp(strval, ZFS_MLSLABEL_DEFAULT) == 0) + new_default = TRUE; + + /* The label must be translatable */ + if (!new_default && (hexstr_to_label(strval, &new_sl) != 0)) + return (SET_ERROR(EINVAL)); + + /* + * In a non-global zone, disallow attempts to set a label that + * doesn't match that of the zone; otherwise no other checks + * are needed. + */ + if (!INGLOBALZONE(curproc)) { + if (new_default || !blequal(&new_sl, CR_SL(CRED()))) + return (SET_ERROR(EPERM)); + return (0); + } + + /* + * For global-zone datasets (i.e., those whose zoned property is + * "off", verify that the specified new label is valid for the + * global zone. + */ + if (dsl_prop_get_integer(name, + zfs_prop_to_name(ZFS_PROP_ZONED), &zoned, NULL)) + return (SET_ERROR(EPERM)); + if (!zoned) { + if (zfs_check_global_label(name, strval) != 0) + return (SET_ERROR(EPERM)); + } + + /* + * If the existing dataset label is nondefault, check if the + * dataset is mounted (label cannot be changed while mounted). + * Get the zfsvfs_t; if there isn't one, then the dataset isn't + * mounted (or isn't a dataset, doesn't exist, ...). + */ + if (strcasecmp(ds_hexsl, ZFS_MLSLABEL_DEFAULT) != 0) { + objset_t *os; + static char *setsl_tag = "setsl_tag"; + + /* + * Try to own the dataset; abort if there is any error, + * (e.g., already mounted, in use, or other error). + */ + error = dmu_objset_own(name, DMU_OST_ZFS, B_TRUE, + setsl_tag, &os); + if (error != 0) + return (SET_ERROR(EPERM)); + + dmu_objset_disown(os, setsl_tag); + + if (new_default) { + needed_priv = PRIV_FILE_DOWNGRADE_SL; + goto out_check; + } + + if (hexstr_to_label(strval, &new_sl) != 0) + return (SET_ERROR(EPERM)); + + if (blstrictdom(&ds_sl, &new_sl)) + needed_priv = PRIV_FILE_DOWNGRADE_SL; + else if (blstrictdom(&new_sl, &ds_sl)) + needed_priv = PRIV_FILE_UPGRADE_SL; + } else { + /* dataset currently has a default label */ + if (!new_default) + needed_priv = PRIV_FILE_UPGRADE_SL; + } + +out_check: + if (needed_priv != -1) + return (PRIV_POLICY(cr, needed_priv, B_FALSE, EPERM, NULL)); + return (0); +#else + return (ENOTSUP); +#endif /* HAVE_MLSLABEL */ +} + +static int +zfs_secpolicy_setprop(const char *dsname, zfs_prop_t prop, nvpair_t *propval, + cred_t *cr) +{ + char *strval; + + /* + * Check permissions for special properties. + */ + switch (prop) { + default: + break; + case ZFS_PROP_ZONED: + /* + * Disallow setting of 'zoned' from within a local zone. + */ + if (!INGLOBALZONE(curproc)) + return (SET_ERROR(EPERM)); + break; + + case ZFS_PROP_QUOTA: + case ZFS_PROP_FILESYSTEM_LIMIT: + case ZFS_PROP_SNAPSHOT_LIMIT: + if (!INGLOBALZONE(curproc)) { + uint64_t zoned; + char setpoint[ZFS_MAX_DATASET_NAME_LEN]; + /* + * Unprivileged users are allowed to modify the + * limit on things *under* (ie. contained by) + * the thing they own. + */ + if (dsl_prop_get_integer(dsname, "zoned", &zoned, + setpoint)) + return (SET_ERROR(EPERM)); + if (!zoned || strlen(dsname) <= strlen(setpoint)) + return (SET_ERROR(EPERM)); + } + break; + + case ZFS_PROP_MLSLABEL: + if (!is_system_labeled()) + return (SET_ERROR(EPERM)); + + if (nvpair_value_string(propval, &strval) == 0) { + int err; + + err = zfs_set_slabel_policy(dsname, strval, CRED()); + if (err != 0) + return (err); + } + break; + } + + return (zfs_secpolicy_write_perms(dsname, zfs_prop_to_name(prop), cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_set_fsacl(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int error; + + error = zfs_dozonecheck(zc->zc_name, cr); + if (error != 0) + return (error); + + /* + * permission to set permissions will be evaluated later in + * dsl_deleg_can_allow() + */ + return (0); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_rollback(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_ROLLBACK, cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_send(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + char *cp; + int error; + + /* + * Generate the current snapshot name from the given objsetid, then + * use that name for the secpolicy/zone checks. + */ + cp = strchr(zc->zc_name, '@'); + if (cp == NULL) + return (SET_ERROR(EINVAL)); + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold_obj(dp, zc->zc_sendobj, FTAG, &ds); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + dsl_dataset_name(ds, zc->zc_name); + + error = zfs_secpolicy_write_perms_ds(zc->zc_name, ds, + ZFS_DELEG_PERM_SEND, cr); + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + + return (error); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_send_new(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_SEND, cr)); +} + +#ifdef HAVE_SMB_SHARE +/* ARGSUSED */ +static int +zfs_secpolicy_deleg_share(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + vnode_t *vp; + int error; + + if ((error = lookupname(zc->zc_value, UIO_SYSSPACE, + NO_FOLLOW, NULL, &vp)) != 0) + return (error); + + /* Now make sure mntpnt and dataset are ZFS */ + + if (vp->v_vfsp->vfs_fstype != zfsfstype || + (strcmp((char *)refstr_value(vp->v_vfsp->vfs_resource), + zc->zc_name) != 0)) { + VN_RELE(vp); + return (SET_ERROR(EPERM)); + } + + VN_RELE(vp); + return (dsl_deleg_access(zc->zc_name, + ZFS_DELEG_PERM_SHARE, cr)); +} +#endif /* HAVE_SMB_SHARE */ + +int +zfs_secpolicy_share(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ +#ifdef HAVE_SMB_SHARE + if (!INGLOBALZONE(curproc)) + return (SET_ERROR(EPERM)); + + if (secpolicy_nfs(cr) == 0) { + return (0); + } else { + return (zfs_secpolicy_deleg_share(zc, innvl, cr)); + } +#else + return (SET_ERROR(ENOTSUP)); +#endif /* HAVE_SMB_SHARE */ +} + +int +zfs_secpolicy_smb_acl(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ +#ifdef HAVE_SMB_SHARE + if (!INGLOBALZONE(curproc)) + return (SET_ERROR(EPERM)); + + if (secpolicy_smb(cr) == 0) { + return (0); + } else { + return (zfs_secpolicy_deleg_share(zc, innvl, cr)); + } +#else + return (SET_ERROR(ENOTSUP)); +#endif /* HAVE_SMB_SHARE */ +} + +static int +zfs_get_parent(const char *datasetname, char *parent, int parentsize) +{ + char *cp; + + /* + * Remove the @bla or /bla from the end of the name to get the parent. + */ + (void) strncpy(parent, datasetname, parentsize); + cp = strrchr(parent, '@'); + if (cp != NULL) { + cp[0] = '\0'; + } else { + cp = strrchr(parent, '/'); + if (cp == NULL) + return (SET_ERROR(ENOENT)); + cp[0] = '\0'; + } + + return (0); +} + +int +zfs_secpolicy_destroy_perms(const char *name, cred_t *cr) +{ + int error; + + if ((error = zfs_secpolicy_write_perms(name, + ZFS_DELEG_PERM_MOUNT, cr)) != 0) + return (error); + + return (zfs_secpolicy_write_perms(name, ZFS_DELEG_PERM_DESTROY, cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_destroy(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_destroy_perms(zc->zc_name, cr)); +} + +/* + * Destroying snapshots with delegated permissions requires + * descendant mount and destroy permissions. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_destroy_snaps(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + nvlist_t *snaps; + nvpair_t *pair, *nextpair; + int error = 0; + + if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) + return (SET_ERROR(EINVAL)); + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nextpair) { + nextpair = nvlist_next_nvpair(snaps, pair); + error = zfs_secpolicy_destroy_perms(nvpair_name(pair), cr); + if (error == ENOENT) { + /* + * Ignore any snapshots that don't exist (we consider + * them "already destroyed"). Remove the name from the + * nvl here in case the snapshot is created between + * now and when we try to destroy it (in which case + * we don't want to destroy it since we haven't + * checked for permission). + */ + fnvlist_remove_nvpair(snaps, pair); + error = 0; + } + if (error != 0) + break; + } + + return (error); +} + +int +zfs_secpolicy_rename_perms(const char *from, const char *to, cred_t *cr) +{ + char parentname[ZFS_MAX_DATASET_NAME_LEN]; + int error; + + if ((error = zfs_secpolicy_write_perms(from, + ZFS_DELEG_PERM_RENAME, cr)) != 0) + return (error); + + if ((error = zfs_secpolicy_write_perms(from, + ZFS_DELEG_PERM_MOUNT, cr)) != 0) + return (error); + + if ((error = zfs_get_parent(to, parentname, + sizeof (parentname))) != 0) + return (error); + + if ((error = zfs_secpolicy_write_perms(parentname, + ZFS_DELEG_PERM_CREATE, cr)) != 0) + return (error); + + if ((error = zfs_secpolicy_write_perms(parentname, + ZFS_DELEG_PERM_MOUNT, cr)) != 0) + return (error); + + return (error); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_rename(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_rename_perms(zc->zc_name, zc->zc_value, cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_promote(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + dsl_pool_t *dp; + dsl_dataset_t *clone; + int error; + + error = zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_PROMOTE, cr); + if (error != 0) + return (error); + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &clone); + + if (error == 0) { + char parentname[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_t *origin = NULL; + dsl_dir_t *dd; + dd = clone->ds_dir; + + error = dsl_dataset_hold_obj(dd->dd_pool, + dsl_dir_phys(dd)->dd_origin_obj, FTAG, &origin); + if (error != 0) { + dsl_dataset_rele(clone, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + + error = zfs_secpolicy_write_perms_ds(zc->zc_name, clone, + ZFS_DELEG_PERM_MOUNT, cr); + + dsl_dataset_name(origin, parentname); + if (error == 0) { + error = zfs_secpolicy_write_perms_ds(parentname, origin, + ZFS_DELEG_PERM_PROMOTE, cr); + } + dsl_dataset_rele(clone, FTAG); + dsl_dataset_rele(origin, FTAG); + } + dsl_pool_rele(dp, FTAG); + return (error); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_recv(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int error; + + if ((error = zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_RECEIVE, cr)) != 0) + return (error); + + if ((error = zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_MOUNT, cr)) != 0) + return (error); + + return (zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_CREATE, cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_recv_new(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_recv(zc, innvl, cr)); +} + +int +zfs_secpolicy_snapshot_perms(const char *name, cred_t *cr) +{ + return (zfs_secpolicy_write_perms(name, + ZFS_DELEG_PERM_SNAPSHOT, cr)); +} + +/* + * Check for permission to create each snapshot in the nvlist. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_snapshot(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + nvlist_t *snaps; + int error = 0; + nvpair_t *pair; + + if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) + return (SET_ERROR(EINVAL)); + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + char *name = nvpair_name(pair); + char *atp = strchr(name, '@'); + + if (atp == NULL) { + error = SET_ERROR(EINVAL); + break; + } + *atp = '\0'; + error = zfs_secpolicy_snapshot_perms(name, cr); + *atp = '@'; + if (error != 0) + break; + } + return (error); +} + +/* + * Check for permission to create each snapshot in the nvlist. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_bookmark(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int error = 0; + nvpair_t *pair; + + for (pair = nvlist_next_nvpair(innvl, NULL); + pair != NULL; pair = nvlist_next_nvpair(innvl, pair)) { + char *name = nvpair_name(pair); + char *hashp = strchr(name, '#'); + + if (hashp == NULL) { + error = SET_ERROR(EINVAL); + break; + } + *hashp = '\0'; + error = zfs_secpolicy_write_perms(name, + ZFS_DELEG_PERM_BOOKMARK, cr); + *hashp = '#'; + if (error != 0) + break; + } + return (error); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_destroy_bookmarks(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + nvpair_t *pair, *nextpair; + int error = 0; + + for (pair = nvlist_next_nvpair(innvl, NULL); pair != NULL; + pair = nextpair) { + char *name = nvpair_name(pair); + char *hashp = strchr(name, '#'); + nextpair = nvlist_next_nvpair(innvl, pair); + + if (hashp == NULL) { + error = SET_ERROR(EINVAL); + break; + } + + *hashp = '\0'; + error = zfs_secpolicy_write_perms(name, + ZFS_DELEG_PERM_DESTROY, cr); + *hashp = '#'; + if (error == ENOENT) { + /* + * Ignore any filesystems that don't exist (we consider + * their bookmarks "already destroyed"). Remove + * the name from the nvl here in case the filesystem + * is created between now and when we try to destroy + * the bookmark (in which case we don't want to + * destroy it since we haven't checked for permission). + */ + fnvlist_remove_nvpair(innvl, pair); + error = 0; + } + if (error != 0) + break; + } + + return (error); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_log_history(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + /* + * Even root must have a proper TSD so that we know what pool + * to log to. + */ + if (tsd_get(zfs_allow_log_key) == NULL) + return (SET_ERROR(EPERM)); + return (0); +} + +static int +zfs_secpolicy_create_clone(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + char parentname[ZFS_MAX_DATASET_NAME_LEN]; + int error; + char *origin; + + if ((error = zfs_get_parent(zc->zc_name, parentname, + sizeof (parentname))) != 0) + return (error); + + if (nvlist_lookup_string(innvl, "origin", &origin) == 0 && + (error = zfs_secpolicy_write_perms(origin, + ZFS_DELEG_PERM_CLONE, cr)) != 0) + return (error); + + if ((error = zfs_secpolicy_write_perms(parentname, + ZFS_DELEG_PERM_CREATE, cr)) != 0) + return (error); + + return (zfs_secpolicy_write_perms(parentname, + ZFS_DELEG_PERM_MOUNT, cr)); +} + +/* + * Policy for pool operations - create/destroy pools, add vdevs, etc. Requires + * SYS_CONFIG privilege, which is not available in a local zone. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_config(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + if (secpolicy_sys_config(cr, B_FALSE) != 0) + return (SET_ERROR(EPERM)); + + return (0); +} + +/* + * Policy for object to name lookups. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_diff(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int error; + + if ((error = secpolicy_sys_config(cr, B_FALSE)) == 0) + return (0); + + error = zfs_secpolicy_write_perms(zc->zc_name, ZFS_DELEG_PERM_DIFF, cr); + return (error); +} + +/* + * Policy for fault injection. Requires all privileges. + */ +/* ARGSUSED */ +static int +zfs_secpolicy_inject(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (secpolicy_zinject(cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_inherit_prop(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + zfs_prop_t prop = zfs_name_to_prop(zc->zc_value); + + if (prop == ZPROP_INVAL) { + if (!zfs_prop_user(zc->zc_value)) + return (SET_ERROR(EINVAL)); + return (zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_USERPROP, cr)); + } else { + return (zfs_secpolicy_setprop(zc->zc_name, prop, + NULL, cr)); + } +} + +static int +zfs_secpolicy_userspace_one(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int err = zfs_secpolicy_read(zc, innvl, cr); + if (err) + return (err); + + if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS) + return (SET_ERROR(EINVAL)); + + if (zc->zc_value[0] == 0) { + /* + * They are asking about a posix uid/gid. If it's + * themself, allow it. + */ + if (zc->zc_objset_type == ZFS_PROP_USERUSED || + zc->zc_objset_type == ZFS_PROP_USERQUOTA || + zc->zc_objset_type == ZFS_PROP_USEROBJUSED || + zc->zc_objset_type == ZFS_PROP_USEROBJQUOTA) { + if (zc->zc_guid == crgetuid(cr)) + return (0); + } else { + if (groupmember(zc->zc_guid, cr)) + return (0); + } + } + + return (zfs_secpolicy_write_perms(zc->zc_name, + userquota_perms[zc->zc_objset_type], cr)); +} + +static int +zfs_secpolicy_userspace_many(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + int err = zfs_secpolicy_read(zc, innvl, cr); + if (err) + return (err); + + if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS) + return (SET_ERROR(EINVAL)); + + return (zfs_secpolicy_write_perms(zc->zc_name, + userquota_perms[zc->zc_objset_type], cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_userspace_upgrade(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + return (zfs_secpolicy_setprop(zc->zc_name, ZFS_PROP_VERSION, + NULL, cr)); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_hold(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + nvpair_t *pair; + nvlist_t *holds; + int error; + + error = nvlist_lookup_nvlist(innvl, "holds", &holds); + if (error != 0) + return (SET_ERROR(EINVAL)); + + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + char fsname[ZFS_MAX_DATASET_NAME_LEN]; + error = dmu_fsname(nvpair_name(pair), fsname); + if (error != 0) + return (error); + error = zfs_secpolicy_write_perms(fsname, + ZFS_DELEG_PERM_HOLD, cr); + if (error != 0) + return (error); + } + return (0); +} + +/* ARGSUSED */ +static int +zfs_secpolicy_release(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + nvpair_t *pair; + int error; + + for (pair = nvlist_next_nvpair(innvl, NULL); pair != NULL; + pair = nvlist_next_nvpair(innvl, pair)) { + char fsname[ZFS_MAX_DATASET_NAME_LEN]; + error = dmu_fsname(nvpair_name(pair), fsname); + if (error != 0) + return (error); + error = zfs_secpolicy_write_perms(fsname, + ZFS_DELEG_PERM_RELEASE, cr); + if (error != 0) + return (error); + } + return (0); +} + +/* + * Policy for allowing temporary snapshots to be taken or released + */ +static int +zfs_secpolicy_tmp_snapshot(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr) +{ + /* + * A temporary snapshot is the same as a snapshot, + * hold, destroy and release all rolled into one. + * Delegated diff alone is sufficient that we allow this. + */ + int error; + + if ((error = zfs_secpolicy_write_perms(zc->zc_name, + ZFS_DELEG_PERM_DIFF, cr)) == 0) + return (0); + + error = zfs_secpolicy_snapshot_perms(zc->zc_name, cr); + if (error == 0) + error = zfs_secpolicy_hold(zc, innvl, cr); + if (error == 0) + error = zfs_secpolicy_release(zc, innvl, cr); + if (error == 0) + error = zfs_secpolicy_destroy(zc, innvl, cr); + return (error); +} + +/* + * Returns the nvlist as specified by the user in the zfs_cmd_t. + */ +static int +get_nvlist(uint64_t nvl, uint64_t size, int iflag, nvlist_t **nvp) +{ + char *packed; + int error; + nvlist_t *list = NULL; + + /* + * Read in and unpack the user-supplied nvlist. + */ + if (size == 0) + return (SET_ERROR(EINVAL)); + + packed = vmem_alloc(size, KM_SLEEP); + + if ((error = ddi_copyin((void *)(uintptr_t)nvl, packed, size, + iflag)) != 0) { + vmem_free(packed, size); + return (SET_ERROR(EFAULT)); + } + + if ((error = nvlist_unpack(packed, size, &list, 0)) != 0) { + vmem_free(packed, size); + return (error); + } + + vmem_free(packed, size); + + *nvp = list; + return (0); +} + +/* + * Reduce the size of this nvlist until it can be serialized in 'max' bytes. + * Entries will be removed from the end of the nvlist, and one int32 entry + * named "N_MORE_ERRORS" will be added indicating how many entries were + * removed. + */ +static int +nvlist_smush(nvlist_t *errors, size_t max) +{ + size_t size; + + size = fnvlist_size(errors); + + if (size > max) { + nvpair_t *more_errors; + int n = 0; + + if (max < 1024) + return (SET_ERROR(ENOMEM)); + + fnvlist_add_int32(errors, ZPROP_N_MORE_ERRORS, 0); + more_errors = nvlist_prev_nvpair(errors, NULL); + + do { + nvpair_t *pair = nvlist_prev_nvpair(errors, + more_errors); + fnvlist_remove_nvpair(errors, pair); + n++; + size = fnvlist_size(errors); + } while (size > max); + + fnvlist_remove_nvpair(errors, more_errors); + fnvlist_add_int32(errors, ZPROP_N_MORE_ERRORS, n); + ASSERT3U(fnvlist_size(errors), <=, max); + } + + return (0); +} + +static int +put_nvlist(zfs_cmd_t *zc, nvlist_t *nvl) +{ + char *packed = NULL; + int error = 0; + size_t size; + + size = fnvlist_size(nvl); + + if (size > zc->zc_nvlist_dst_size) { + error = SET_ERROR(ENOMEM); + } else { + packed = fnvlist_pack(nvl, &size); + if (ddi_copyout(packed, (void *)(uintptr_t)zc->zc_nvlist_dst, + size, zc->zc_iflags) != 0) + error = SET_ERROR(EFAULT); + fnvlist_pack_free(packed, size); + } + + zc->zc_nvlist_dst_size = size; + zc->zc_nvlist_dst_filled = B_TRUE; + return (error); +} + +static int +getzfsvfs(const char *dsname, zfsvfs_t **zfvp) +{ + objset_t *os; + int error; + + error = dmu_objset_hold(dsname, FTAG, &os); + if (error != 0) + return (error); + if (dmu_objset_type(os) != DMU_OST_ZFS) { + dmu_objset_rele(os, FTAG); + return (SET_ERROR(EINVAL)); + } + + mutex_enter(&os->os_user_ptr_lock); + *zfvp = dmu_objset_get_user(os); + /* bump s_active only when non-zero to prevent umount race */ + if (*zfvp == NULL || (*zfvp)->z_sb == NULL || + !atomic_inc_not_zero(&((*zfvp)->z_sb->s_active))) { + error = SET_ERROR(ESRCH); + } + mutex_exit(&os->os_user_ptr_lock); + dmu_objset_rele(os, FTAG); + return (error); +} + +/* + * Find a zfsvfs_t for a mounted filesystem, or create our own, in which + * case its z_sb will be NULL, and it will be opened as the owner. + * If 'writer' is set, the z_teardown_lock will be held for RW_WRITER, + * which prevents all inode ops from running. + */ +static int +zfsvfs_hold(const char *name, void *tag, zfsvfs_t **zfvp, boolean_t writer) +{ + int error = 0; + + if (getzfsvfs(name, zfvp) != 0) + error = zfsvfs_create(name, zfvp); + if (error == 0) { + rrm_enter(&(*zfvp)->z_teardown_lock, (writer) ? RW_WRITER : + RW_READER, tag); + if ((*zfvp)->z_unmounted) { + /* + * XXX we could probably try again, since the unmounting + * thread should be just about to disassociate the + * objset from the zfsvfs. + */ + rrm_exit(&(*zfvp)->z_teardown_lock, tag); + return (SET_ERROR(EBUSY)); + } + } + return (error); +} + +static void +zfsvfs_rele(zfsvfs_t *zfsvfs, void *tag) +{ + rrm_exit(&zfsvfs->z_teardown_lock, tag); + + if (zfsvfs->z_sb) { + deactivate_super(zfsvfs->z_sb); + } else { + dmu_objset_disown(zfsvfs->z_os, zfsvfs); + zfsvfs_free(zfsvfs); + } +} + +static int +zfs_ioc_pool_create(zfs_cmd_t *zc) +{ + int error; + nvlist_t *config, *props = NULL; + nvlist_t *rootprops = NULL; + nvlist_t *zplprops = NULL; + + if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &config))) + return (error); + + if (zc->zc_nvlist_src_size != 0 && (error = + get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &props))) { + nvlist_free(config); + return (error); + } + + if (props) { + nvlist_t *nvl = NULL; + uint64_t version = SPA_VERSION; + + (void) nvlist_lookup_uint64(props, + zpool_prop_to_name(ZPOOL_PROP_VERSION), &version); + if (!SPA_VERSION_IS_SUPPORTED(version)) { + error = SET_ERROR(EINVAL); + goto pool_props_bad; + } + (void) nvlist_lookup_nvlist(props, ZPOOL_ROOTFS_PROPS, &nvl); + if (nvl) { + error = nvlist_dup(nvl, &rootprops, KM_SLEEP); + if (error != 0) { + nvlist_free(config); + nvlist_free(props); + return (error); + } + (void) nvlist_remove_all(props, ZPOOL_ROOTFS_PROPS); + } + VERIFY(nvlist_alloc(&zplprops, NV_UNIQUE_NAME, KM_SLEEP) == 0); + error = zfs_fill_zplprops_root(version, rootprops, + zplprops, NULL); + if (error != 0) + goto pool_props_bad; + } + + error = spa_create(zc->zc_name, config, props, zplprops); + + /* + * Set the remaining root properties + */ + if (!error && (error = zfs_set_prop_nvlist(zc->zc_name, + ZPROP_SRC_LOCAL, rootprops, NULL)) != 0) + (void) spa_destroy(zc->zc_name); + +pool_props_bad: + nvlist_free(rootprops); + nvlist_free(zplprops); + nvlist_free(config); + nvlist_free(props); + + return (error); +} + +static int +zfs_ioc_pool_destroy(zfs_cmd_t *zc) +{ + int error; + zfs_log_history(zc); + error = spa_destroy(zc->zc_name); + + return (error); +} + +static int +zfs_ioc_pool_import(zfs_cmd_t *zc) +{ + nvlist_t *config, *props = NULL; + uint64_t guid; + int error; + + if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &config)) != 0) + return (error); + + if (zc->zc_nvlist_src_size != 0 && (error = + get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &props))) { + nvlist_free(config); + return (error); + } + + if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_GUID, &guid) != 0 || + guid != zc->zc_guid) + error = SET_ERROR(EINVAL); + else + error = spa_import(zc->zc_name, config, props, zc->zc_cookie); + + if (zc->zc_nvlist_dst != 0) { + int err; + + if ((err = put_nvlist(zc, config)) != 0) + error = err; + } + + nvlist_free(config); + nvlist_free(props); + + return (error); +} + +static int +zfs_ioc_pool_export(zfs_cmd_t *zc) +{ + int error; + boolean_t force = (boolean_t)zc->zc_cookie; + boolean_t hardforce = (boolean_t)zc->zc_guid; + + zfs_log_history(zc); + error = spa_export(zc->zc_name, NULL, force, hardforce); + + return (error); +} + +static int +zfs_ioc_pool_configs(zfs_cmd_t *zc) +{ + nvlist_t *configs; + int error; + + if ((configs = spa_all_configs(&zc->zc_cookie)) == NULL) + return (SET_ERROR(EEXIST)); + + error = put_nvlist(zc, configs); + + nvlist_free(configs); + + return (error); +} + +/* + * inputs: + * zc_name name of the pool + * + * outputs: + * zc_cookie real errno + * zc_nvlist_dst config nvlist + * zc_nvlist_dst_size size of config nvlist + */ +static int +zfs_ioc_pool_stats(zfs_cmd_t *zc) +{ + nvlist_t *config; + int error; + int ret = 0; + + error = spa_get_stats(zc->zc_name, &config, zc->zc_value, + sizeof (zc->zc_value)); + + if (config != NULL) { + ret = put_nvlist(zc, config); + nvlist_free(config); + + /* + * The config may be present even if 'error' is non-zero. + * In this case we return success, and preserve the real errno + * in 'zc_cookie'. + */ + zc->zc_cookie = error; + } else { + ret = error; + } + + return (ret); +} + +/* + * Try to import the given pool, returning pool stats as appropriate so that + * user land knows which devices are available and overall pool health. + */ +static int +zfs_ioc_pool_tryimport(zfs_cmd_t *zc) +{ + nvlist_t *tryconfig, *config = NULL; + int error; + + if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &tryconfig)) != 0) + return (error); + + config = spa_tryimport(tryconfig); + + nvlist_free(tryconfig); + + if (config == NULL) + return (SET_ERROR(EINVAL)); + + error = put_nvlist(zc, config); + nvlist_free(config); + + return (error); +} + +/* + * inputs: + * zc_name name of the pool + * zc_cookie scan func (pool_scan_func_t) + * zc_flags scrub pause/resume flag (pool_scrub_cmd_t) + */ +static int +zfs_ioc_pool_scan(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + if (zc->zc_flags >= POOL_SCRUB_FLAGS_END) + return (SET_ERROR(EINVAL)); + + if (zc->zc_flags == POOL_SCRUB_PAUSE) + error = spa_scrub_pause_resume(spa, POOL_SCRUB_PAUSE); + else if (zc->zc_cookie == POOL_SCAN_NONE) + error = spa_scan_stop(spa); + else + error = spa_scan(spa, zc->zc_cookie); + + spa_close(spa, FTAG); + + return (error); +} + +static int +zfs_ioc_pool_freeze(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error == 0) { + spa_freeze(spa); + spa_close(spa, FTAG); + } + return (error); +} + +static int +zfs_ioc_pool_upgrade(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + if (zc->zc_cookie < spa_version(spa) || + !SPA_VERSION_IS_SUPPORTED(zc->zc_cookie)) { + spa_close(spa, FTAG); + return (SET_ERROR(EINVAL)); + } + + spa_upgrade(spa, zc->zc_cookie); + spa_close(spa, FTAG); + + return (error); +} + +static int +zfs_ioc_pool_get_history(zfs_cmd_t *zc) +{ + spa_t *spa; + char *hist_buf; + uint64_t size; + int error; + + if ((size = zc->zc_history_len) == 0) + return (SET_ERROR(EINVAL)); + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + if (spa_version(spa) < SPA_VERSION_ZPOOL_HISTORY) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + hist_buf = vmem_alloc(size, KM_SLEEP); + if ((error = spa_history_get(spa, &zc->zc_history_offset, + &zc->zc_history_len, hist_buf)) == 0) { + error = ddi_copyout(hist_buf, + (void *)(uintptr_t)zc->zc_history, + zc->zc_history_len, zc->zc_iflags); + } + + spa_close(spa, FTAG); + vmem_free(hist_buf, size); + return (error); +} + +static int +zfs_ioc_pool_reguid(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error == 0) { + error = spa_change_guid(spa); + spa_close(spa, FTAG); + } + return (error); +} + +static int +zfs_ioc_dsobj_to_dsname(zfs_cmd_t *zc) +{ + return (dsl_dsobj_to_dsname(zc->zc_name, zc->zc_obj, zc->zc_value)); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_obj object to find + * + * outputs: + * zc_value name of object + */ +static int +zfs_ioc_obj_to_path(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + + /* XXX reading from objset not owned */ + if ((error = dmu_objset_hold(zc->zc_name, FTAG, &os)) != 0) + return (error); + if (dmu_objset_type(os) != DMU_OST_ZFS) { + dmu_objset_rele(os, FTAG); + return (SET_ERROR(EINVAL)); + } + error = zfs_obj_to_path(os, zc->zc_obj, zc->zc_value, + sizeof (zc->zc_value)); + dmu_objset_rele(os, FTAG); + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_obj object to find + * + * outputs: + * zc_stat stats on object + * zc_value path to object + */ +static int +zfs_ioc_obj_to_stats(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + + /* XXX reading from objset not owned */ + if ((error = dmu_objset_hold(zc->zc_name, FTAG, &os)) != 0) + return (error); + if (dmu_objset_type(os) != DMU_OST_ZFS) { + dmu_objset_rele(os, FTAG); + return (SET_ERROR(EINVAL)); + } + error = zfs_obj_to_stats(os, zc->zc_obj, &zc->zc_stat, zc->zc_value, + sizeof (zc->zc_value)); + dmu_objset_rele(os, FTAG); + + return (error); +} + +static int +zfs_ioc_vdev_add(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + nvlist_t *config; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error != 0) + return (error); + + error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &config); + if (error == 0) { + error = spa_vdev_add(spa, config); + nvlist_free(config); + } + spa_close(spa, FTAG); + return (error); +} + +/* + * inputs: + * zc_name name of the pool + * zc_nvlist_conf nvlist of devices to remove + * zc_cookie to stop the remove? + */ +static int +zfs_ioc_vdev_remove(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error != 0) + return (error); + error = spa_vdev_remove(spa, zc->zc_guid, B_FALSE); + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_vdev_set_state(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + vdev_state_t newstate = VDEV_STATE_UNKNOWN; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + switch (zc->zc_cookie) { + case VDEV_STATE_ONLINE: + error = vdev_online(spa, zc->zc_guid, zc->zc_obj, &newstate); + break; + + case VDEV_STATE_OFFLINE: + error = vdev_offline(spa, zc->zc_guid, zc->zc_obj); + break; + + case VDEV_STATE_FAULTED: + if (zc->zc_obj != VDEV_AUX_ERR_EXCEEDED && + zc->zc_obj != VDEV_AUX_EXTERNAL && + zc->zc_obj != VDEV_AUX_EXTERNAL_PERSIST) + zc->zc_obj = VDEV_AUX_ERR_EXCEEDED; + + error = vdev_fault(spa, zc->zc_guid, zc->zc_obj); + break; + + case VDEV_STATE_DEGRADED: + if (zc->zc_obj != VDEV_AUX_ERR_EXCEEDED && + zc->zc_obj != VDEV_AUX_EXTERNAL) + zc->zc_obj = VDEV_AUX_ERR_EXCEEDED; + + error = vdev_degrade(spa, zc->zc_guid, zc->zc_obj); + break; + + default: + error = SET_ERROR(EINVAL); + } + zc->zc_cookie = newstate; + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_vdev_attach(zfs_cmd_t *zc) +{ + spa_t *spa; + int replacing = zc->zc_cookie; + nvlist_t *config; + int error; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &config)) == 0) { + error = spa_vdev_attach(spa, zc->zc_guid, config, replacing); + nvlist_free(config); + } + + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_vdev_detach(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + error = spa_vdev_detach(spa, zc->zc_guid, 0, B_FALSE); + + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_vdev_split(zfs_cmd_t *zc) +{ + spa_t *spa; + nvlist_t *config, *props = NULL; + int error; + boolean_t exp = !!(zc->zc_cookie & ZPOOL_EXPORT_AFTER_SPLIT); + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + if ((error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &config))) { + spa_close(spa, FTAG); + return (error); + } + + if (zc->zc_nvlist_src_size != 0 && (error = + get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &props))) { + spa_close(spa, FTAG); + nvlist_free(config); + return (error); + } + + error = spa_vdev_split_mirror(spa, zc->zc_string, config, props, exp); + + spa_close(spa, FTAG); + + nvlist_free(config); + nvlist_free(props); + + return (error); +} + +static int +zfs_ioc_vdev_setpath(zfs_cmd_t *zc) +{ + spa_t *spa; + char *path = zc->zc_value; + uint64_t guid = zc->zc_guid; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error != 0) + return (error); + + error = spa_vdev_setpath(spa, guid, path); + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_vdev_setfru(zfs_cmd_t *zc) +{ + spa_t *spa; + char *fru = zc->zc_value; + uint64_t guid = zc->zc_guid; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error != 0) + return (error); + + error = spa_vdev_setfru(spa, guid, fru); + spa_close(spa, FTAG); + return (error); +} + +static int +zfs_ioc_objset_stats_impl(zfs_cmd_t *zc, objset_t *os) +{ + int error = 0; + nvlist_t *nv; + + dmu_objset_fast_stat(os, &zc->zc_objset_stats); + + if (zc->zc_nvlist_dst != 0 && + (error = dsl_prop_get_all(os, &nv)) == 0) { + dmu_objset_stats(os, nv); + /* + * NB: zvol_get_stats() will read the objset contents, + * which we aren't supposed to do with a + * DS_MODE_USER hold, because it could be + * inconsistent. So this is a bit of a workaround... + * XXX reading with out owning + */ + if (!zc->zc_objset_stats.dds_inconsistent && + dmu_objset_type(os) == DMU_OST_ZVOL) { + error = zvol_get_stats(os, nv); + if (error == EIO) { + nvlist_free(nv); + return (error); + } + VERIFY0(error); + } + if (error == 0) + error = put_nvlist(zc, nv); + nvlist_free(nv); + } + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_nvlist_dst_size size of buffer for property nvlist + * + * outputs: + * zc_objset_stats stats + * zc_nvlist_dst property nvlist + * zc_nvlist_dst_size size of property nvlist + */ +static int +zfs_ioc_objset_stats(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + + error = dmu_objset_hold(zc->zc_name, FTAG, &os); + if (error == 0) { + error = zfs_ioc_objset_stats_impl(zc, os); + dmu_objset_rele(os, FTAG); + } + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_nvlist_dst_size size of buffer for property nvlist + * + * outputs: + * zc_nvlist_dst received property nvlist + * zc_nvlist_dst_size size of received property nvlist + * + * Gets received properties (distinct from local properties on or after + * SPA_VERSION_RECVD_PROPS) for callers who want to differentiate received from + * local property values. + */ +static int +zfs_ioc_objset_recvd_props(zfs_cmd_t *zc) +{ + int error = 0; + nvlist_t *nv; + + /* + * Without this check, we would return local property values if the + * caller has not already received properties on or after + * SPA_VERSION_RECVD_PROPS. + */ + if (!dsl_prop_get_hasrecvd(zc->zc_name)) + return (SET_ERROR(ENOTSUP)); + + if (zc->zc_nvlist_dst != 0 && + (error = dsl_prop_get_received(zc->zc_name, &nv)) == 0) { + error = put_nvlist(zc, nv); + nvlist_free(nv); + } + + return (error); +} + +static int +nvl_add_zplprop(objset_t *os, nvlist_t *props, zfs_prop_t prop) +{ + uint64_t value; + int error; + + /* + * zfs_get_zplprop() will either find a value or give us + * the default value (if there is one). + */ + if ((error = zfs_get_zplprop(os, prop, &value)) != 0) + return (error); + VERIFY(nvlist_add_uint64(props, zfs_prop_to_name(prop), value) == 0); + return (0); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_nvlist_dst_size size of buffer for zpl property nvlist + * + * outputs: + * zc_nvlist_dst zpl property nvlist + * zc_nvlist_dst_size size of zpl property nvlist + */ +static int +zfs_ioc_objset_zplprops(zfs_cmd_t *zc) +{ + objset_t *os; + int err; + + /* XXX reading without owning */ + if ((err = dmu_objset_hold(zc->zc_name, FTAG, &os))) + return (err); + + dmu_objset_fast_stat(os, &zc->zc_objset_stats); + + /* + * NB: nvl_add_zplprop() will read the objset contents, + * which we aren't supposed to do with a DS_MODE_USER + * hold, because it could be inconsistent. + */ + if (zc->zc_nvlist_dst != 0 && + !zc->zc_objset_stats.dds_inconsistent && + dmu_objset_type(os) == DMU_OST_ZFS) { + nvlist_t *nv; + + VERIFY(nvlist_alloc(&nv, NV_UNIQUE_NAME, KM_SLEEP) == 0); + if ((err = nvl_add_zplprop(os, nv, ZFS_PROP_VERSION)) == 0 && + (err = nvl_add_zplprop(os, nv, ZFS_PROP_NORMALIZE)) == 0 && + (err = nvl_add_zplprop(os, nv, ZFS_PROP_UTF8ONLY)) == 0 && + (err = nvl_add_zplprop(os, nv, ZFS_PROP_CASE)) == 0) + err = put_nvlist(zc, nv); + nvlist_free(nv); + } else { + err = SET_ERROR(ENOENT); + } + dmu_objset_rele(os, FTAG); + return (err); +} + +boolean_t +dataset_name_hidden(const char *name) +{ + /* + * Skip over datasets that are not visible in this zone, + * internal datasets (which have a $ in their name), and + * temporary datasets (which have a % in their name). + */ + if (strchr(name, '$') != NULL) + return (B_TRUE); + if (strchr(name, '%') != NULL) + return (B_TRUE); + if (!INGLOBALZONE(curproc) && !zone_dataset_visible(name, NULL)) + return (B_TRUE); + return (B_FALSE); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_cookie zap cursor + * zc_nvlist_dst_size size of buffer for property nvlist + * + * outputs: + * zc_name name of next filesystem + * zc_cookie zap cursor + * zc_objset_stats stats + * zc_nvlist_dst property nvlist + * zc_nvlist_dst_size size of property nvlist + */ +static int +zfs_ioc_dataset_list_next(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + char *p; + size_t orig_len = strlen(zc->zc_name); + +top: + if ((error = dmu_objset_hold(zc->zc_name, FTAG, &os))) { + if (error == ENOENT) + error = SET_ERROR(ESRCH); + return (error); + } + + p = strrchr(zc->zc_name, '/'); + if (p == NULL || p[1] != '\0') + (void) strlcat(zc->zc_name, "/", sizeof (zc->zc_name)); + p = zc->zc_name + strlen(zc->zc_name); + + do { + error = dmu_dir_list_next(os, + sizeof (zc->zc_name) - (p - zc->zc_name), p, + NULL, &zc->zc_cookie); + if (error == ENOENT) + error = SET_ERROR(ESRCH); + } while (error == 0 && dataset_name_hidden(zc->zc_name)); + dmu_objset_rele(os, FTAG); + + /* + * If it's an internal dataset (ie. with a '$' in its name), + * don't try to get stats for it, otherwise we'll return ENOENT. + */ + if (error == 0 && strchr(zc->zc_name, '$') == NULL) { + error = zfs_ioc_objset_stats(zc); /* fill in the stats */ + if (error == ENOENT) { + /* We lost a race with destroy, get the next one. */ + zc->zc_name[orig_len] = '\0'; + goto top; + } + } + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_cookie zap cursor + * zc_nvlist_dst_size size of buffer for property nvlist + * + * outputs: + * zc_name name of next snapshot + * zc_objset_stats stats + * zc_nvlist_dst property nvlist + * zc_nvlist_dst_size size of property nvlist + */ +static int +zfs_ioc_snapshot_list_next(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + + error = dmu_objset_hold(zc->zc_name, FTAG, &os); + if (error != 0) { + return (error == ENOENT ? ESRCH : error); + } + + /* + * A dataset name of maximum length cannot have any snapshots, + * so exit immediately. + */ + if (strlcat(zc->zc_name, "@", sizeof (zc->zc_name)) >= + ZFS_MAX_DATASET_NAME_LEN) { + dmu_objset_rele(os, FTAG); + return (SET_ERROR(ESRCH)); + } + + error = dmu_snapshot_list_next(os, + sizeof (zc->zc_name) - strlen(zc->zc_name), + zc->zc_name + strlen(zc->zc_name), &zc->zc_obj, &zc->zc_cookie, + NULL); + + if (error == 0 && !zc->zc_simple) { + dsl_dataset_t *ds; + dsl_pool_t *dp = os->os_dsl_dataset->ds_dir->dd_pool; + + error = dsl_dataset_hold_obj(dp, zc->zc_obj, FTAG, &ds); + if (error == 0) { + objset_t *ossnap; + + error = dmu_objset_from_ds(ds, &ossnap); + if (error == 0) + error = zfs_ioc_objset_stats_impl(zc, ossnap); + dsl_dataset_rele(ds, FTAG); + } + } else if (error == ENOENT) { + error = SET_ERROR(ESRCH); + } + + dmu_objset_rele(os, FTAG); + /* if we failed, undo the @ that we tacked on to zc_name */ + if (error != 0) + *strchr(zc->zc_name, '@') = '\0'; + return (error); +} + +static int +zfs_prop_set_userquota(const char *dsname, nvpair_t *pair) +{ + const char *propname = nvpair_name(pair); + uint64_t *valary; + unsigned int vallen; + const char *domain; + char *dash; + zfs_userquota_prop_t type; + uint64_t rid; + uint64_t quota; + zfsvfs_t *zfsvfs; + int err; + + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + nvlist_t *attrs; + VERIFY(nvpair_value_nvlist(pair, &attrs) == 0); + if (nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &pair) != 0) + return (SET_ERROR(EINVAL)); + } + + /* + * A correctly constructed propname is encoded as + * userquota@-. + */ + if ((dash = strchr(propname, '-')) == NULL || + nvpair_value_uint64_array(pair, &valary, &vallen) != 0 || + vallen != 3) + return (SET_ERROR(EINVAL)); + + domain = dash + 1; + type = valary[0]; + rid = valary[1]; + quota = valary[2]; + + err = zfsvfs_hold(dsname, FTAG, &zfsvfs, B_FALSE); + if (err == 0) { + err = zfs_set_userquota(zfsvfs, type, domain, rid, quota); + zfsvfs_rele(zfsvfs, FTAG); + } + + return (err); +} + +/* + * If the named property is one that has a special function to set its value, + * return 0 on success and a positive error code on failure; otherwise if it is + * not one of the special properties handled by this function, return -1. + * + * XXX: It would be better for callers of the property interface if we handled + * these special cases in dsl_prop.c (in the dsl layer). + */ +static int +zfs_prop_set_special(const char *dsname, zprop_source_t source, + nvpair_t *pair) +{ + const char *propname = nvpair_name(pair); + zfs_prop_t prop = zfs_name_to_prop(propname); + uint64_t intval; + int err = -1; + + if (prop == ZPROP_INVAL) { + if (zfs_prop_userquota(propname)) + return (zfs_prop_set_userquota(dsname, pair)); + return (-1); + } + + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + nvlist_t *attrs; + VERIFY(nvpair_value_nvlist(pair, &attrs) == 0); + VERIFY(nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &pair) == 0); + } + + if (zfs_prop_get_type(prop) == PROP_TYPE_STRING) + return (-1); + + VERIFY(0 == nvpair_value_uint64(pair, &intval)); + + switch (prop) { + case ZFS_PROP_QUOTA: + err = dsl_dir_set_quota(dsname, source, intval); + break; + case ZFS_PROP_REFQUOTA: + err = dsl_dataset_set_refquota(dsname, source, intval); + break; + case ZFS_PROP_FILESYSTEM_LIMIT: + case ZFS_PROP_SNAPSHOT_LIMIT: + if (intval == UINT64_MAX) { + /* clearing the limit, just do it */ + err = 0; + } else { + err = dsl_dir_activate_fs_ss_limit(dsname); + } + /* + * Set err to -1 to force the zfs_set_prop_nvlist code down the + * default path to set the value in the nvlist. + */ + if (err == 0) + err = -1; + break; + case ZFS_PROP_RESERVATION: + err = dsl_dir_set_reservation(dsname, source, intval); + break; + case ZFS_PROP_REFRESERVATION: + err = dsl_dataset_set_refreservation(dsname, source, intval); + break; + case ZFS_PROP_VOLSIZE: + err = zvol_set_volsize(dsname, intval); + break; + case ZFS_PROP_SNAPDEV: + err = zvol_set_snapdev(dsname, source, intval); + break; + case ZFS_PROP_VOLMODE: + err = zvol_set_volmode(dsname, source, intval); + break; + case ZFS_PROP_VERSION: + { + zfsvfs_t *zfsvfs; + + if ((err = zfsvfs_hold(dsname, FTAG, &zfsvfs, B_TRUE)) != 0) + break; + + err = zfs_set_version(zfsvfs, intval); + zfsvfs_rele(zfsvfs, FTAG); + + if (err == 0 && intval >= ZPL_VERSION_USERSPACE) { + zfs_cmd_t *zc; + + zc = kmem_zalloc(sizeof (zfs_cmd_t), KM_SLEEP); + (void) strcpy(zc->zc_name, dsname); + (void) zfs_ioc_userspace_upgrade(zc); + (void) zfs_ioc_userobjspace_upgrade(zc); + kmem_free(zc, sizeof (zfs_cmd_t)); + } + break; + } + default: + err = -1; + } + + return (err); +} + +/* + * This function is best effort. If it fails to set any of the given properties, + * it continues to set as many as it can and returns the last error + * encountered. If the caller provides a non-NULL errlist, it will be filled in + * with the list of names of all the properties that failed along with the + * corresponding error numbers. + * + * If every property is set successfully, zero is returned and errlist is not + * modified. + */ +int +zfs_set_prop_nvlist(const char *dsname, zprop_source_t source, nvlist_t *nvl, + nvlist_t *errlist) +{ + nvpair_t *pair; + nvpair_t *propval; + int rv = 0; + uint64_t intval; + char *strval; + + nvlist_t *genericnvl = fnvlist_alloc(); + nvlist_t *retrynvl = fnvlist_alloc(); +retry: + pair = NULL; + while ((pair = nvlist_next_nvpair(nvl, pair)) != NULL) { + const char *propname = nvpair_name(pair); + zfs_prop_t prop = zfs_name_to_prop(propname); + int err = 0; + + /* decode the property value */ + propval = pair; + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + nvlist_t *attrs; + attrs = fnvpair_value_nvlist(pair); + if (nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &propval) != 0) + err = SET_ERROR(EINVAL); + } + + /* Validate value type */ + if (err == 0 && source == ZPROP_SRC_INHERITED) { + /* inherited properties are expected to be booleans */ + if (nvpair_type(propval) != DATA_TYPE_BOOLEAN) + err = SET_ERROR(EINVAL); + } else if (err == 0 && prop == ZPROP_INVAL) { + if (zfs_prop_user(propname)) { + if (nvpair_type(propval) != DATA_TYPE_STRING) + err = SET_ERROR(EINVAL); + } else if (zfs_prop_userquota(propname)) { + if (nvpair_type(propval) != + DATA_TYPE_UINT64_ARRAY) + err = SET_ERROR(EINVAL); + } else { + err = SET_ERROR(EINVAL); + } + } else if (err == 0) { + if (nvpair_type(propval) == DATA_TYPE_STRING) { + if (zfs_prop_get_type(prop) != PROP_TYPE_STRING) + err = SET_ERROR(EINVAL); + } else if (nvpair_type(propval) == DATA_TYPE_UINT64) { + const char *unused; + + intval = fnvpair_value_uint64(propval); + + switch (zfs_prop_get_type(prop)) { + case PROP_TYPE_NUMBER: + break; + case PROP_TYPE_STRING: + err = SET_ERROR(EINVAL); + break; + case PROP_TYPE_INDEX: + if (zfs_prop_index_to_string(prop, + intval, &unused) != 0) + err = SET_ERROR(EINVAL); + break; + default: + cmn_err(CE_PANIC, + "unknown property type"); + } + } else { + err = SET_ERROR(EINVAL); + } + } + + /* Validate permissions */ + if (err == 0) + err = zfs_check_settable(dsname, pair, CRED()); + + if (err == 0) { + if (source == ZPROP_SRC_INHERITED) + err = -1; /* does not need special handling */ + else + err = zfs_prop_set_special(dsname, source, + pair); + if (err == -1) { + /* + * For better performance we build up a list of + * properties to set in a single transaction. + */ + err = nvlist_add_nvpair(genericnvl, pair); + } else if (err != 0 && nvl != retrynvl) { + /* + * This may be a spurious error caused by + * receiving quota and reservation out of order. + * Try again in a second pass. + */ + err = nvlist_add_nvpair(retrynvl, pair); + } + } + + if (err != 0) { + if (errlist != NULL) + fnvlist_add_int32(errlist, propname, err); + rv = err; + } + } + + if (nvl != retrynvl && !nvlist_empty(retrynvl)) { + nvl = retrynvl; + goto retry; + } + + if (!nvlist_empty(genericnvl) && + dsl_props_set(dsname, source, genericnvl) != 0) { + /* + * If this fails, we still want to set as many properties as we + * can, so try setting them individually. + */ + pair = NULL; + while ((pair = nvlist_next_nvpair(genericnvl, pair)) != NULL) { + const char *propname = nvpair_name(pair); + int err = 0; + + propval = pair; + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + nvlist_t *attrs; + attrs = fnvpair_value_nvlist(pair); + propval = fnvlist_lookup_nvpair(attrs, + ZPROP_VALUE); + } + + if (nvpair_type(propval) == DATA_TYPE_STRING) { + strval = fnvpair_value_string(propval); + err = dsl_prop_set_string(dsname, propname, + source, strval); + } else if (nvpair_type(propval) == DATA_TYPE_BOOLEAN) { + err = dsl_prop_inherit(dsname, propname, + source); + } else { + intval = fnvpair_value_uint64(propval); + err = dsl_prop_set_int(dsname, propname, source, + intval); + } + + if (err != 0) { + if (errlist != NULL) { + fnvlist_add_int32(errlist, propname, + err); + } + rv = err; + } + } + } + nvlist_free(genericnvl); + nvlist_free(retrynvl); + + return (rv); +} + +/* + * Check that all the properties are valid user properties. + */ +static int +zfs_check_userprops(const char *fsname, nvlist_t *nvl) +{ + nvpair_t *pair = NULL; + int error = 0; + + while ((pair = nvlist_next_nvpair(nvl, pair)) != NULL) { + const char *propname = nvpair_name(pair); + + if (!zfs_prop_user(propname) || + nvpair_type(pair) != DATA_TYPE_STRING) + return (SET_ERROR(EINVAL)); + + if ((error = zfs_secpolicy_write_perms(fsname, + ZFS_DELEG_PERM_USERPROP, CRED()))) + return (error); + + if (strlen(propname) >= ZAP_MAXNAMELEN) + return (SET_ERROR(ENAMETOOLONG)); + + if (strlen(fnvpair_value_string(pair)) >= ZAP_MAXVALUELEN) + return (SET_ERROR(E2BIG)); + } + return (0); +} + +static void +props_skip(nvlist_t *props, nvlist_t *skipped, nvlist_t **newprops) +{ + nvpair_t *pair; + + VERIFY(nvlist_alloc(newprops, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + pair = NULL; + while ((pair = nvlist_next_nvpair(props, pair)) != NULL) { + if (nvlist_exists(skipped, nvpair_name(pair))) + continue; + + VERIFY(nvlist_add_nvpair(*newprops, pair) == 0); + } +} + +static int +clear_received_props(const char *dsname, nvlist_t *props, + nvlist_t *skipped) +{ + int err = 0; + nvlist_t *cleared_props = NULL; + props_skip(props, skipped, &cleared_props); + if (!nvlist_empty(cleared_props)) { + /* + * Acts on local properties until the dataset has received + * properties at least once on or after SPA_VERSION_RECVD_PROPS. + */ + zprop_source_t flags = (ZPROP_SRC_NONE | + (dsl_prop_get_hasrecvd(dsname) ? ZPROP_SRC_RECEIVED : 0)); + err = zfs_set_prop_nvlist(dsname, flags, cleared_props, NULL); + } + nvlist_free(cleared_props); + return (err); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_value name of property to set + * zc_nvlist_src{_size} nvlist of properties to apply + * zc_cookie received properties flag + * + * outputs: + * zc_nvlist_dst{_size} error for each unapplied received property + */ +static int +zfs_ioc_set_prop(zfs_cmd_t *zc) +{ + nvlist_t *nvl; + boolean_t received = zc->zc_cookie; + zprop_source_t source = (received ? ZPROP_SRC_RECEIVED : + ZPROP_SRC_LOCAL); + nvlist_t *errors; + int error; + + if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &nvl)) != 0) + return (error); + + if (received) { + nvlist_t *origprops; + + if (dsl_prop_get_received(zc->zc_name, &origprops) == 0) { + (void) clear_received_props(zc->zc_name, + origprops, nvl); + nvlist_free(origprops); + } + + error = dsl_prop_set_hasrecvd(zc->zc_name); + } + + errors = fnvlist_alloc(); + if (error == 0) + error = zfs_set_prop_nvlist(zc->zc_name, source, nvl, errors); + + if (zc->zc_nvlist_dst != 0 && errors != NULL) { + (void) put_nvlist(zc, errors); + } + + nvlist_free(errors); + nvlist_free(nvl); + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_value name of property to inherit + * zc_cookie revert to received value if TRUE + * + * outputs: none + */ +static int +zfs_ioc_inherit_prop(zfs_cmd_t *zc) +{ + const char *propname = zc->zc_value; + zfs_prop_t prop = zfs_name_to_prop(propname); + boolean_t received = zc->zc_cookie; + zprop_source_t source = (received + ? ZPROP_SRC_NONE /* revert to received value, if any */ + : ZPROP_SRC_INHERITED); /* explicitly inherit */ + nvlist_t *dummy; + nvpair_t *pair; + zprop_type_t type; + int err; + + if (!received) { + /* + * Only check this in the non-received case. We want to allow + * 'inherit -S' to revert non-inheritable properties like quota + * and reservation to the received or default values even though + * they are not considered inheritable. + */ + if (prop != ZPROP_INVAL && !zfs_prop_inheritable(prop)) + return (SET_ERROR(EINVAL)); + } + + if (prop == ZPROP_INVAL) { + if (!zfs_prop_user(propname)) + return (SET_ERROR(EINVAL)); + + type = PROP_TYPE_STRING; + } else if (prop == ZFS_PROP_VOLSIZE || prop == ZFS_PROP_VERSION) { + return (SET_ERROR(EINVAL)); + } else { + type = zfs_prop_get_type(prop); + } + + /* + * zfs_prop_set_special() expects properties in the form of an + * nvpair with type info. + */ + dummy = fnvlist_alloc(); + + switch (type) { + case PROP_TYPE_STRING: + VERIFY(0 == nvlist_add_string(dummy, propname, "")); + break; + case PROP_TYPE_NUMBER: + case PROP_TYPE_INDEX: + VERIFY(0 == nvlist_add_uint64(dummy, propname, 0)); + break; + default: + err = SET_ERROR(EINVAL); + goto errout; + } + + pair = nvlist_next_nvpair(dummy, NULL); + if (pair == NULL) { + err = SET_ERROR(EINVAL); + } else { + err = zfs_prop_set_special(zc->zc_name, source, pair); + if (err == -1) /* property is not "special", needs handling */ + err = dsl_prop_inherit(zc->zc_name, zc->zc_value, + source); + } + +errout: + nvlist_free(dummy); + return (err); +} + +static int +zfs_ioc_pool_set_props(zfs_cmd_t *zc) +{ + nvlist_t *props; + spa_t *spa; + int error; + nvpair_t *pair; + + if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &props))) + return (error); + + /* + * If the only property is the configfile, then just do a spa_lookup() + * to handle the faulted case. + */ + pair = nvlist_next_nvpair(props, NULL); + if (pair != NULL && strcmp(nvpair_name(pair), + zpool_prop_to_name(ZPOOL_PROP_CACHEFILE)) == 0 && + nvlist_next_nvpair(props, pair) == NULL) { + mutex_enter(&spa_namespace_lock); + if ((spa = spa_lookup(zc->zc_name)) != NULL) { + spa_configfile_set(spa, props, B_FALSE); + spa_config_sync(spa, B_FALSE, B_TRUE); + } + mutex_exit(&spa_namespace_lock); + if (spa != NULL) { + nvlist_free(props); + return (0); + } + } + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) { + nvlist_free(props); + return (error); + } + + error = spa_prop_set(spa, props); + + nvlist_free(props); + spa_close(spa, FTAG); + + return (error); +} + +static int +zfs_ioc_pool_get_props(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + nvlist_t *nvp = NULL; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) { + /* + * If the pool is faulted, there may be properties we can still + * get (such as altroot and cachefile), so attempt to get them + * anyway. + */ + mutex_enter(&spa_namespace_lock); + if ((spa = spa_lookup(zc->zc_name)) != NULL) + error = spa_prop_get(spa, &nvp); + mutex_exit(&spa_namespace_lock); + } else { + error = spa_prop_get(spa, &nvp); + spa_close(spa, FTAG); + } + + if (error == 0 && zc->zc_nvlist_dst != 0) + error = put_nvlist(zc, nvp); + else + error = SET_ERROR(EFAULT); + + nvlist_free(nvp); + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_nvlist_src{_size} nvlist of delegated permissions + * zc_perm_action allow/unallow flag + * + * outputs: none + */ +static int +zfs_ioc_set_fsacl(zfs_cmd_t *zc) +{ + int error; + nvlist_t *fsaclnv = NULL; + + if ((error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &fsaclnv)) != 0) + return (error); + + /* + * Verify nvlist is constructed correctly + */ + if ((error = zfs_deleg_verify_nvlist(fsaclnv)) != 0) { + nvlist_free(fsaclnv); + return (SET_ERROR(EINVAL)); + } + + /* + * If we don't have PRIV_SYS_MOUNT, then validate + * that user is allowed to hand out each permission in + * the nvlist(s) + */ + + error = secpolicy_zfs(CRED()); + if (error != 0) { + if (zc->zc_perm_action == B_FALSE) { + error = dsl_deleg_can_allow(zc->zc_name, + fsaclnv, CRED()); + } else { + error = dsl_deleg_can_unallow(zc->zc_name, + fsaclnv, CRED()); + } + } + + if (error == 0) + error = dsl_deleg_set(zc->zc_name, fsaclnv, zc->zc_perm_action); + + nvlist_free(fsaclnv); + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * + * outputs: + * zc_nvlist_src{_size} nvlist of delegated permissions + */ +static int +zfs_ioc_get_fsacl(zfs_cmd_t *zc) +{ + nvlist_t *nvp; + int error; + + if ((error = dsl_deleg_get(zc->zc_name, &nvp)) == 0) { + error = put_nvlist(zc, nvp); + nvlist_free(nvp); + } + + return (error); +} + +/* ARGSUSED */ +static void +zfs_create_cb(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx) +{ + zfs_creat_t *zct = arg; + + zfs_create_fs(os, cr, zct->zct_zplprops, tx); +} + +#define ZFS_PROP_UNDEFINED ((uint64_t)-1) + +/* + * inputs: + * os parent objset pointer (NULL if root fs) + * fuids_ok fuids allowed in this version of the spa? + * sa_ok SAs allowed in this version of the spa? + * createprops list of properties requested by creator + * + * outputs: + * zplprops values for the zplprops we attach to the master node object + * is_ci true if requested file system will be purely case-insensitive + * + * Determine the settings for utf8only, normalization and + * casesensitivity. Specific values may have been requested by the + * creator and/or we can inherit values from the parent dataset. If + * the file system is of too early a vintage, a creator can not + * request settings for these properties, even if the requested + * setting is the default value. We don't actually want to create dsl + * properties for these, so remove them from the source nvlist after + * processing. + */ +static int +zfs_fill_zplprops_impl(objset_t *os, uint64_t zplver, + boolean_t fuids_ok, boolean_t sa_ok, nvlist_t *createprops, + nvlist_t *zplprops, boolean_t *is_ci) +{ + uint64_t sense = ZFS_PROP_UNDEFINED; + uint64_t norm = ZFS_PROP_UNDEFINED; + uint64_t u8 = ZFS_PROP_UNDEFINED; + int error; + + ASSERT(zplprops != NULL); + + if (os != NULL && os->os_phys->os_type != DMU_OST_ZFS) + return (SET_ERROR(EINVAL)); + + /* + * Pull out creator prop choices, if any. + */ + if (createprops) { + (void) nvlist_lookup_uint64(createprops, + zfs_prop_to_name(ZFS_PROP_VERSION), &zplver); + (void) nvlist_lookup_uint64(createprops, + zfs_prop_to_name(ZFS_PROP_NORMALIZE), &norm); + (void) nvlist_remove_all(createprops, + zfs_prop_to_name(ZFS_PROP_NORMALIZE)); + (void) nvlist_lookup_uint64(createprops, + zfs_prop_to_name(ZFS_PROP_UTF8ONLY), &u8); + (void) nvlist_remove_all(createprops, + zfs_prop_to_name(ZFS_PROP_UTF8ONLY)); + (void) nvlist_lookup_uint64(createprops, + zfs_prop_to_name(ZFS_PROP_CASE), &sense); + (void) nvlist_remove_all(createprops, + zfs_prop_to_name(ZFS_PROP_CASE)); + } + + /* + * If the zpl version requested is whacky or the file system + * or pool is version is too "young" to support normalization + * and the creator tried to set a value for one of the props, + * error out. + */ + if ((zplver < ZPL_VERSION_INITIAL || zplver > ZPL_VERSION) || + (zplver >= ZPL_VERSION_FUID && !fuids_ok) || + (zplver >= ZPL_VERSION_SA && !sa_ok) || + (zplver < ZPL_VERSION_NORMALIZATION && + (norm != ZFS_PROP_UNDEFINED || u8 != ZFS_PROP_UNDEFINED || + sense != ZFS_PROP_UNDEFINED))) + return (SET_ERROR(ENOTSUP)); + + /* + * Put the version in the zplprops + */ + VERIFY(nvlist_add_uint64(zplprops, + zfs_prop_to_name(ZFS_PROP_VERSION), zplver) == 0); + + if (norm == ZFS_PROP_UNDEFINED && + (error = zfs_get_zplprop(os, ZFS_PROP_NORMALIZE, &norm)) != 0) + return (error); + VERIFY(nvlist_add_uint64(zplprops, + zfs_prop_to_name(ZFS_PROP_NORMALIZE), norm) == 0); + + /* + * If we're normalizing, names must always be valid UTF-8 strings. + */ + if (norm) + u8 = 1; + if (u8 == ZFS_PROP_UNDEFINED && + (error = zfs_get_zplprop(os, ZFS_PROP_UTF8ONLY, &u8)) != 0) + return (error); + VERIFY(nvlist_add_uint64(zplprops, + zfs_prop_to_name(ZFS_PROP_UTF8ONLY), u8) == 0); + + if (sense == ZFS_PROP_UNDEFINED && + (error = zfs_get_zplprop(os, ZFS_PROP_CASE, &sense)) != 0) + return (error); + VERIFY(nvlist_add_uint64(zplprops, + zfs_prop_to_name(ZFS_PROP_CASE), sense) == 0); + + if (is_ci) + *is_ci = (sense == ZFS_CASE_INSENSITIVE); + + return (0); +} + +static int +zfs_fill_zplprops(const char *dataset, nvlist_t *createprops, + nvlist_t *zplprops, boolean_t *is_ci) +{ + boolean_t fuids_ok, sa_ok; + uint64_t zplver = ZPL_VERSION; + objset_t *os = NULL; + char parentname[ZFS_MAX_DATASET_NAME_LEN]; + char *cp; + spa_t *spa; + uint64_t spa_vers; + int error; + + (void) strlcpy(parentname, dataset, sizeof (parentname)); + cp = strrchr(parentname, '/'); + ASSERT(cp != NULL); + cp[0] = '\0'; + + if ((error = spa_open(dataset, &spa, FTAG)) != 0) + return (error); + + spa_vers = spa_version(spa); + spa_close(spa, FTAG); + + zplver = zfs_zpl_version_map(spa_vers); + fuids_ok = (zplver >= ZPL_VERSION_FUID); + sa_ok = (zplver >= ZPL_VERSION_SA); + + /* + * Open parent object set so we can inherit zplprop values. + */ + if ((error = dmu_objset_hold(parentname, FTAG, &os)) != 0) + return (error); + + error = zfs_fill_zplprops_impl(os, zplver, fuids_ok, sa_ok, createprops, + zplprops, is_ci); + dmu_objset_rele(os, FTAG); + return (error); +} + +static int +zfs_fill_zplprops_root(uint64_t spa_vers, nvlist_t *createprops, + nvlist_t *zplprops, boolean_t *is_ci) +{ + boolean_t fuids_ok; + boolean_t sa_ok; + uint64_t zplver = ZPL_VERSION; + int error; + + zplver = zfs_zpl_version_map(spa_vers); + fuids_ok = (zplver >= ZPL_VERSION_FUID); + sa_ok = (zplver >= ZPL_VERSION_SA); + + error = zfs_fill_zplprops_impl(NULL, zplver, fuids_ok, sa_ok, + createprops, zplprops, is_ci); + return (error); +} + +/* + * innvl: { + * "type" -> dmu_objset_type_t (int32) + * (optional) "props" -> { prop -> value } + * } + * + * outnvl: propname -> error code (int32) + */ +static int +zfs_ioc_create(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl) +{ + int error = 0; + zfs_creat_t zct = { 0 }; + nvlist_t *nvprops = NULL; + void (*cbfunc)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx); + int32_t type32; + dmu_objset_type_t type; + boolean_t is_insensitive = B_FALSE; + + if (nvlist_lookup_int32(innvl, "type", &type32) != 0) + return (SET_ERROR(EINVAL)); + type = type32; + (void) nvlist_lookup_nvlist(innvl, "props", &nvprops); + + switch (type) { + case DMU_OST_ZFS: + cbfunc = zfs_create_cb; + break; + + case DMU_OST_ZVOL: + cbfunc = zvol_create_cb; + break; + + default: + cbfunc = NULL; + break; + } + if (strchr(fsname, '@') || + strchr(fsname, '%')) + return (SET_ERROR(EINVAL)); + + zct.zct_props = nvprops; + + if (cbfunc == NULL) + return (SET_ERROR(EINVAL)); + + if (type == DMU_OST_ZVOL) { + uint64_t volsize, volblocksize; + + if (nvprops == NULL) + return (SET_ERROR(EINVAL)); + if (nvlist_lookup_uint64(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLSIZE), &volsize) != 0) + return (SET_ERROR(EINVAL)); + + if ((error = nvlist_lookup_uint64(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), + &volblocksize)) != 0 && error != ENOENT) + return (SET_ERROR(EINVAL)); + + if (error != 0) + volblocksize = zfs_prop_default_numeric( + ZFS_PROP_VOLBLOCKSIZE); + + if ((error = zvol_check_volblocksize(fsname, + volblocksize)) != 0 || + (error = zvol_check_volsize(volsize, + volblocksize)) != 0) + return (error); + } else if (type == DMU_OST_ZFS) { + int error; + + /* + * We have to have normalization and + * case-folding flags correct when we do the + * file system creation, so go figure them out + * now. + */ + VERIFY(nvlist_alloc(&zct.zct_zplprops, + NV_UNIQUE_NAME, KM_SLEEP) == 0); + error = zfs_fill_zplprops(fsname, nvprops, + zct.zct_zplprops, &is_insensitive); + if (error != 0) { + nvlist_free(zct.zct_zplprops); + return (error); + } + } + + error = dmu_objset_create(fsname, type, + is_insensitive ? DS_FLAG_CI_DATASET : 0, cbfunc, &zct); + nvlist_free(zct.zct_zplprops); + + /* + * It would be nice to do this atomically. + */ + if (error == 0) { + error = zfs_set_prop_nvlist(fsname, ZPROP_SRC_LOCAL, + nvprops, outnvl); + if (error != 0) { + spa_t *spa; + int error2; + + /* + * Volumes will return EBUSY and cannot be destroyed + * until all asynchronous minor handling has completed. + * Wait for the spa_zvol_taskq to drain then retry. + */ + error2 = dsl_destroy_head(fsname); + while ((error2 == EBUSY) && (type == DMU_OST_ZVOL)) { + error2 = spa_open(fsname, &spa, FTAG); + if (error2 == 0) { + taskq_wait(spa->spa_zvol_taskq); + spa_close(spa, FTAG); + } + error2 = dsl_destroy_head(fsname); + } + } + } + return (error); +} + +/* + * innvl: { + * "origin" -> name of origin snapshot + * (optional) "props" -> { prop -> value } + * } + * + * outputs: + * outnvl: propname -> error code (int32) + */ +static int +zfs_ioc_clone(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl) +{ + int error = 0; + nvlist_t *nvprops = NULL; + char *origin_name; + + if (nvlist_lookup_string(innvl, "origin", &origin_name) != 0) + return (SET_ERROR(EINVAL)); + (void) nvlist_lookup_nvlist(innvl, "props", &nvprops); + + if (strchr(fsname, '@') || + strchr(fsname, '%')) + return (SET_ERROR(EINVAL)); + + if (dataset_namecheck(origin_name, NULL, NULL) != 0) + return (SET_ERROR(EINVAL)); + error = dmu_objset_clone(fsname, origin_name); + if (error != 0) + return (error); + + /* + * It would be nice to do this atomically. + */ + if (error == 0) { + error = zfs_set_prop_nvlist(fsname, ZPROP_SRC_LOCAL, + nvprops, outnvl); + if (error != 0) + (void) dsl_destroy_head(fsname); + } + return (error); +} + +/* + * innvl: { + * "snaps" -> { snapshot1, snapshot2 } + * (optional) "props" -> { prop -> value (string) } + * } + * + * outnvl: snapshot -> error code (int32) + */ +static int +zfs_ioc_snapshot(const char *poolname, nvlist_t *innvl, nvlist_t *outnvl) +{ + nvlist_t *snaps; + nvlist_t *props = NULL; + int error, poollen; + nvpair_t *pair, *pair2; + + (void) nvlist_lookup_nvlist(innvl, "props", &props); + if ((error = zfs_check_userprops(poolname, props)) != 0) + return (error); + + if (!nvlist_empty(props) && + zfs_earlier_version(poolname, SPA_VERSION_SNAP_PROPS)) + return (SET_ERROR(ENOTSUP)); + + if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) + return (SET_ERROR(EINVAL)); + poollen = strlen(poolname); + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + const char *name = nvpair_name(pair); + const char *cp = strchr(name, '@'); + + /* + * The snap name must contain an @, and the part after it must + * contain only valid characters. + */ + if (cp == NULL || + zfs_component_namecheck(cp + 1, NULL, NULL) != 0) + return (SET_ERROR(EINVAL)); + + /* + * The snap must be in the specified pool. + */ + if (strncmp(name, poolname, poollen) != 0 || + (name[poollen] != '/' && name[poollen] != '@')) + return (SET_ERROR(EXDEV)); + + /* This must be the only snap of this fs. */ + for (pair2 = nvlist_next_nvpair(snaps, pair); + pair2 != NULL; pair2 = nvlist_next_nvpair(snaps, pair2)) { + if (strncmp(name, nvpair_name(pair2), cp - name + 1) + == 0) { + return (SET_ERROR(EXDEV)); + } + } + } + + error = dsl_dataset_snapshot(snaps, props, outnvl); + + return (error); +} + +/* + * innvl: "message" -> string + */ +/* ARGSUSED */ +static int +zfs_ioc_log_history(const char *unused, nvlist_t *innvl, nvlist_t *outnvl) +{ + char *message; + spa_t *spa; + int error; + char *poolname; + + /* + * The poolname in the ioctl is not set, we get it from the TSD, + * which was set at the end of the last successful ioctl that allows + * logging. The secpolicy func already checked that it is set. + * Only one log ioctl is allowed after each successful ioctl, so + * we clear the TSD here. + */ + poolname = tsd_get(zfs_allow_log_key); + if (poolname == NULL) + return (SET_ERROR(EINVAL)); + (void) tsd_set(zfs_allow_log_key, NULL); + error = spa_open(poolname, &spa, FTAG); + strfree(poolname); + if (error != 0) + return (error); + + if (nvlist_lookup_string(innvl, "message", &message) != 0) { + spa_close(spa, FTAG); + return (SET_ERROR(EINVAL)); + } + + if (spa_version(spa) < SPA_VERSION_ZPOOL_HISTORY) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + error = spa_history_log(spa, message); + spa_close(spa, FTAG); + return (error); +} + +/* + * The dp_config_rwlock must not be held when calling this, because the + * unmount may need to write out data. + * + * This function is best-effort. Callers must deal gracefully if it + * remains mounted (or is remounted after this call). + * + * Returns 0 if the argument is not a snapshot, or it is not currently a + * filesystem, or we were able to unmount it. Returns error code otherwise. + */ +int +zfs_unmount_snap(const char *snapname) +{ + int err; + + if (strchr(snapname, '@') == NULL) + return (0); + + err = zfsctl_snapshot_unmount((char *)snapname, MNT_FORCE); + if (err != 0 && err != ENOENT) + return (SET_ERROR(err)); + + return (0); +} + +/* ARGSUSED */ +static int +zfs_unmount_snap_cb(const char *snapname, void *arg) +{ + return (zfs_unmount_snap(snapname)); +} + +/* + * When a clone is destroyed, its origin may also need to be destroyed, + * in which case it must be unmounted. This routine will do that unmount + * if necessary. + */ +void +zfs_destroy_unmount_origin(const char *fsname) +{ + int error; + objset_t *os; + dsl_dataset_t *ds; + + error = dmu_objset_hold(fsname, FTAG, &os); + if (error != 0) + return; + ds = dmu_objset_ds(os); + if (dsl_dir_is_clone(ds->ds_dir) && DS_IS_DEFER_DESTROY(ds->ds_prev)) { + char originname[ZFS_MAX_DATASET_NAME_LEN]; + dsl_dataset_name(ds->ds_prev, originname); + dmu_objset_rele(os, FTAG); + (void) zfs_unmount_snap(originname); + } else { + dmu_objset_rele(os, FTAG); + } +} + +/* + * innvl: { + * "snaps" -> { snapshot1, snapshot2 } + * (optional boolean) "defer" + * } + * + * outnvl: snapshot -> error code (int32) + */ +/* ARGSUSED */ +static int +zfs_ioc_destroy_snaps(const char *poolname, nvlist_t *innvl, nvlist_t *outnvl) +{ + nvlist_t *snaps; + nvpair_t *pair; + boolean_t defer; + + if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) + return (SET_ERROR(EINVAL)); + defer = nvlist_exists(innvl, "defer"); + + for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; + pair = nvlist_next_nvpair(snaps, pair)) { + (void) zfs_unmount_snap(nvpair_name(pair)); + } + + return (dsl_destroy_snapshots_nvl(snaps, defer, outnvl)); +} + +/* + * Create bookmarks. Bookmark names are of the form #. + * All bookmarks must be in the same pool. + * + * innvl: { + * bookmark1 -> snapshot1, bookmark2 -> snapshot2 + * } + * + * outnvl: bookmark -> error code (int32) + * + */ +/* ARGSUSED */ +static int +zfs_ioc_bookmark(const char *poolname, nvlist_t *innvl, nvlist_t *outnvl) +{ + nvpair_t *pair, *pair2; + + for (pair = nvlist_next_nvpair(innvl, NULL); + pair != NULL; pair = nvlist_next_nvpair(innvl, pair)) { + char *snap_name; + + /* + * Verify the snapshot argument. + */ + if (nvpair_value_string(pair, &snap_name) != 0) + return (SET_ERROR(EINVAL)); + + + /* Verify that the keys (bookmarks) are unique */ + for (pair2 = nvlist_next_nvpair(innvl, pair); + pair2 != NULL; pair2 = nvlist_next_nvpair(innvl, pair2)) { + if (strcmp(nvpair_name(pair), nvpair_name(pair2)) == 0) + return (SET_ERROR(EINVAL)); + } + } + + return (dsl_bookmark_create(innvl, outnvl)); +} + +/* + * innvl: { + * property 1, property 2, ... + * } + * + * outnvl: { + * bookmark name 1 -> { property 1, property 2, ... }, + * bookmark name 2 -> { property 1, property 2, ... } + * } + * + */ +static int +zfs_ioc_get_bookmarks(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl) +{ + return (dsl_get_bookmarks(fsname, innvl, outnvl)); +} + +/* + * innvl: { + * bookmark name 1, bookmark name 2 + * } + * + * outnvl: bookmark -> error code (int32) + * + */ +static int +zfs_ioc_destroy_bookmarks(const char *poolname, nvlist_t *innvl, + nvlist_t *outnvl) +{ + int error, poollen; + nvpair_t *pair; + + poollen = strlen(poolname); + for (pair = nvlist_next_nvpair(innvl, NULL); + pair != NULL; pair = nvlist_next_nvpair(innvl, pair)) { + const char *name = nvpair_name(pair); + const char *cp = strchr(name, '#'); + + /* + * The bookmark name must contain an #, and the part after it + * must contain only valid characters. + */ + if (cp == NULL || + zfs_component_namecheck(cp + 1, NULL, NULL) != 0) + return (SET_ERROR(EINVAL)); + + /* + * The bookmark must be in the specified pool. + */ + if (strncmp(name, poolname, poollen) != 0 || + (name[poollen] != '/' && name[poollen] != '#')) + return (SET_ERROR(EXDEV)); + } + + error = dsl_bookmark_destroy(innvl, outnvl); + return (error); +} + +/* + * inputs: + * zc_name name of dataset to destroy + * zc_objset_type type of objset + * zc_defer_destroy mark for deferred destroy + * + * outputs: none + */ +static int +zfs_ioc_destroy(zfs_cmd_t *zc) +{ + int err; + + if (zc->zc_objset_type == DMU_OST_ZFS) { + err = zfs_unmount_snap(zc->zc_name); + if (err != 0) + return (err); + } + + if (strchr(zc->zc_name, '@')) { + err = dsl_destroy_snapshot(zc->zc_name, zc->zc_defer_destroy); + } else { + err = dsl_destroy_head(zc->zc_name); + if (err == EEXIST) { + /* + * It is possible that the given DS may have + * hidden child (%recv) datasets - "leftovers" + * resulting from the previously interrupted + * 'zfs receive'. + * + * 6 extra bytes for /%recv + */ + char namebuf[ZFS_MAX_DATASET_NAME_LEN + 6]; + + if (snprintf(namebuf, sizeof (namebuf), "%s/%s", + zc->zc_name, recv_clone_name) >= + sizeof (namebuf)) + return (SET_ERROR(EINVAL)); + + /* + * Try to remove the hidden child (%recv) and after + * that try to remove the target dataset. + * If the hidden child (%recv) does not exist + * the original error (EEXIST) will be returned + */ + err = dsl_destroy_head(namebuf); + if (err == 0) + err = dsl_destroy_head(zc->zc_name); + else if (err == ENOENT) + err = EEXIST; + } + } + + return (err); +} + +/* + * fsname is name of dataset to rollback (to most recent snapshot) + * + * innvl may contain name of expected target snapshot + * + * outnvl: "target" -> name of most recent snapshot + * } + */ +/* ARGSUSED */ +static int +zfs_ioc_rollback(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl) +{ + zfsvfs_t *zfsvfs; + zvol_state_t *zv; + char *target = NULL; + int error; + + (void) nvlist_lookup_string(innvl, "target", &target); + if (target != NULL) { + int fslen = strlen(fsname); + + if (strncmp(fsname, target, fslen) != 0) + return (SET_ERROR(EINVAL)); + if (target[fslen] != '@') + return (SET_ERROR(EINVAL)); + } + + if (getzfsvfs(fsname, &zfsvfs) == 0) { + dsl_dataset_t *ds; + + ds = dmu_objset_ds(zfsvfs->z_os); + error = zfs_suspend_fs(zfsvfs); + if (error == 0) { + int resume_err; + + error = dsl_dataset_rollback(fsname, target, zfsvfs, + outnvl); + resume_err = zfs_resume_fs(zfsvfs, ds); + error = error ? error : resume_err; + } + deactivate_super(zfsvfs->z_sb); + } else if ((zv = zvol_suspend(fsname)) != NULL) { + error = dsl_dataset_rollback(fsname, target, zvol_tag(zv), + outnvl); + zvol_resume(zv); + } else { + error = dsl_dataset_rollback(fsname, target, NULL, outnvl); + } + return (error); +} + +static int +recursive_unmount(const char *fsname, void *arg) +{ + const char *snapname = arg; + char *fullname; + int error; + + fullname = kmem_asprintf("%s@%s", fsname, snapname); + error = zfs_unmount_snap(fullname); + strfree(fullname); + + return (error); +} + +/* + * inputs: + * zc_name old name of dataset + * zc_value new name of dataset + * zc_cookie recursive flag (only valid for snapshots) + * + * outputs: none + */ +static int +zfs_ioc_rename(zfs_cmd_t *zc) +{ + boolean_t recursive = zc->zc_cookie & 1; + char *at; + + zc->zc_value[sizeof (zc->zc_value) - 1] = '\0'; + if (dataset_namecheck(zc->zc_value, NULL, NULL) != 0 || + strchr(zc->zc_value, '%')) + return (SET_ERROR(EINVAL)); + + at = strchr(zc->zc_name, '@'); + if (at != NULL) { + /* snaps must be in same fs */ + int error; + + if (strncmp(zc->zc_name, zc->zc_value, at - zc->zc_name + 1)) + return (SET_ERROR(EXDEV)); + *at = '\0'; + if (zc->zc_objset_type == DMU_OST_ZFS) { + error = dmu_objset_find(zc->zc_name, + recursive_unmount, at + 1, + recursive ? DS_FIND_CHILDREN : 0); + if (error != 0) { + *at = '@'; + return (error); + } + } + error = dsl_dataset_rename_snapshot(zc->zc_name, + at + 1, strchr(zc->zc_value, '@') + 1, recursive); + *at = '@'; + + return (error); + } else { + return (dsl_dir_rename(zc->zc_name, zc->zc_value)); + } +} + +static int +zfs_check_settable(const char *dsname, nvpair_t *pair, cred_t *cr) +{ + const char *propname = nvpair_name(pair); + boolean_t issnap = (strchr(dsname, '@') != NULL); + zfs_prop_t prop = zfs_name_to_prop(propname); + uint64_t intval; + int err; + + if (prop == ZPROP_INVAL) { + if (zfs_prop_user(propname)) { + if ((err = zfs_secpolicy_write_perms(dsname, + ZFS_DELEG_PERM_USERPROP, cr))) + return (err); + return (0); + } + + if (!issnap && zfs_prop_userquota(propname)) { + const char *perm = NULL; + const char *uq_prefix = + zfs_userquota_prop_prefixes[ZFS_PROP_USERQUOTA]; + const char *gq_prefix = + zfs_userquota_prop_prefixes[ZFS_PROP_GROUPQUOTA]; + const char *uiq_prefix = + zfs_userquota_prop_prefixes[ZFS_PROP_USEROBJQUOTA]; + const char *giq_prefix = + zfs_userquota_prop_prefixes[ZFS_PROP_GROUPOBJQUOTA]; + + if (strncmp(propname, uq_prefix, + strlen(uq_prefix)) == 0) { + perm = ZFS_DELEG_PERM_USERQUOTA; + } else if (strncmp(propname, uiq_prefix, + strlen(uiq_prefix)) == 0) { + perm = ZFS_DELEG_PERM_USEROBJQUOTA; + } else if (strncmp(propname, gq_prefix, + strlen(gq_prefix)) == 0) { + perm = ZFS_DELEG_PERM_GROUPQUOTA; + } else if (strncmp(propname, giq_prefix, + strlen(giq_prefix)) == 0) { + perm = ZFS_DELEG_PERM_GROUPOBJQUOTA; + } else { + /* USERUSED and GROUPUSED are read-only */ + return (SET_ERROR(EINVAL)); + } + + if ((err = zfs_secpolicy_write_perms(dsname, perm, cr))) + return (err); + return (0); + } + + return (SET_ERROR(EINVAL)); + } + + if (issnap) + return (SET_ERROR(EINVAL)); + + if (nvpair_type(pair) == DATA_TYPE_NVLIST) { + /* + * dsl_prop_get_all_impl() returns properties in this + * format. + */ + nvlist_t *attrs; + VERIFY(nvpair_value_nvlist(pair, &attrs) == 0); + VERIFY(nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &pair) == 0); + } + + /* + * Check that this value is valid for this pool version + */ + switch (prop) { + case ZFS_PROP_COMPRESSION: + /* + * If the user specified gzip compression, make sure + * the SPA supports it. We ignore any errors here since + * we'll catch them later. + */ + if (nvpair_value_uint64(pair, &intval) == 0) { + if (intval >= ZIO_COMPRESS_GZIP_1 && + intval <= ZIO_COMPRESS_GZIP_9 && + zfs_earlier_version(dsname, + SPA_VERSION_GZIP_COMPRESSION)) { + return (SET_ERROR(ENOTSUP)); + } + + if (intval == ZIO_COMPRESS_ZLE && + zfs_earlier_version(dsname, + SPA_VERSION_ZLE_COMPRESSION)) + return (SET_ERROR(ENOTSUP)); + + if (intval == ZIO_COMPRESS_LZ4) { + spa_t *spa; + + if ((err = spa_open(dsname, &spa, FTAG)) != 0) + return (err); + + if (!spa_feature_is_enabled(spa, + SPA_FEATURE_LZ4_COMPRESS)) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + spa_close(spa, FTAG); + } + + /* + * If this is a bootable dataset then + * verify that the compression algorithm + * is supported for booting. We must return + * something other than ENOTSUP since it + * implies a downrev pool version. + */ + if (zfs_is_bootfs(dsname) && + !BOOTFS_COMPRESS_VALID(intval)) { + return (SET_ERROR(ERANGE)); + } + } + break; + + case ZFS_PROP_COPIES: + if (zfs_earlier_version(dsname, SPA_VERSION_DITTO_BLOCKS)) + return (SET_ERROR(ENOTSUP)); + break; + + case ZFS_PROP_VOLBLOCKSIZE: + case ZFS_PROP_RECORDSIZE: + /* Record sizes above 128k need the feature to be enabled */ + if (nvpair_value_uint64(pair, &intval) == 0 && + intval > SPA_OLD_MAXBLOCKSIZE) { + spa_t *spa; + + /* + * We don't allow setting the property above 1MB, + * unless the tunable has been changed. + */ + if (intval > zfs_max_recordsize || + intval > SPA_MAXBLOCKSIZE) + return (SET_ERROR(ERANGE)); + + if ((err = spa_open(dsname, &spa, FTAG)) != 0) + return (err); + + if (!spa_feature_is_enabled(spa, + SPA_FEATURE_LARGE_BLOCKS)) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + spa_close(spa, FTAG); + } + break; + + case ZFS_PROP_DNODESIZE: + /* Dnode sizes above 512 need the feature to be enabled */ + if (nvpair_value_uint64(pair, &intval) == 0 && + intval != ZFS_DNSIZE_LEGACY) { + spa_t *spa; + + /* + * If this is a bootable dataset then + * we don't allow large (>512B) dnodes, + * because GRUB doesn't support them. + */ + if (zfs_is_bootfs(dsname) && + intval != ZFS_DNSIZE_LEGACY) { + return (SET_ERROR(EDOM)); + } + + if ((err = spa_open(dsname, &spa, FTAG)) != 0) + return (err); + + if (!spa_feature_is_enabled(spa, + SPA_FEATURE_LARGE_DNODE)) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + spa_close(spa, FTAG); + } + break; + + case ZFS_PROP_SHARESMB: + if (zpl_earlier_version(dsname, ZPL_VERSION_FUID)) + return (SET_ERROR(ENOTSUP)); + break; + + case ZFS_PROP_ACLINHERIT: + if (nvpair_type(pair) == DATA_TYPE_UINT64 && + nvpair_value_uint64(pair, &intval) == 0) { + if (intval == ZFS_ACL_PASSTHROUGH_X && + zfs_earlier_version(dsname, + SPA_VERSION_PASSTHROUGH_X)) + return (SET_ERROR(ENOTSUP)); + } + break; + case ZFS_PROP_CHECKSUM: + case ZFS_PROP_DEDUP: + { + spa_feature_t feature; + spa_t *spa; + uint64_t intval; + int err; + + /* dedup feature version checks */ + if (prop == ZFS_PROP_DEDUP && + zfs_earlier_version(dsname, SPA_VERSION_DEDUP)) + return (SET_ERROR(ENOTSUP)); + + if (nvpair_value_uint64(pair, &intval) != 0) + return (SET_ERROR(EINVAL)); + + /* check prop value is enabled in features */ + feature = zio_checksum_to_feature(intval & ZIO_CHECKSUM_MASK); + if (feature == SPA_FEATURE_NONE) + break; + + if ((err = spa_open(dsname, &spa, FTAG)) != 0) + return (err); + /* + * Salted checksums are not supported on root pools. + */ + if (spa_bootfs(spa) != 0 && + intval < ZIO_CHECKSUM_FUNCTIONS && + (zio_checksum_table[intval].ci_flags & + ZCHECKSUM_FLAG_SALTED)) { + spa_close(spa, FTAG); + return (SET_ERROR(ERANGE)); + } + if (!spa_feature_is_enabled(spa, feature)) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + spa_close(spa, FTAG); + break; + } + + default: + break; + } + + return (zfs_secpolicy_setprop(dsname, prop, pair, CRED())); +} + +/* + * Removes properties from the given props list that fail permission checks + * needed to clear them and to restore them in case of a receive error. For each + * property, make sure we have both set and inherit permissions. + * + * Returns the first error encountered if any permission checks fail. If the + * caller provides a non-NULL errlist, it also gives the complete list of names + * of all the properties that failed a permission check along with the + * corresponding error numbers. The caller is responsible for freeing the + * returned errlist. + * + * If every property checks out successfully, zero is returned and the list + * pointed at by errlist is NULL. + */ +static int +zfs_check_clearable(char *dataset, nvlist_t *props, nvlist_t **errlist) +{ + zfs_cmd_t *zc; + nvpair_t *pair, *next_pair; + nvlist_t *errors; + int err, rv = 0; + + if (props == NULL) + return (0); + + VERIFY(nvlist_alloc(&errors, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + zc = kmem_alloc(sizeof (zfs_cmd_t), KM_SLEEP); + (void) strlcpy(zc->zc_name, dataset, sizeof (zc->zc_name)); + pair = nvlist_next_nvpair(props, NULL); + while (pair != NULL) { + next_pair = nvlist_next_nvpair(props, pair); + + (void) strlcpy(zc->zc_value, nvpair_name(pair), + sizeof (zc->zc_value)); + if ((err = zfs_check_settable(dataset, pair, CRED())) != 0 || + (err = zfs_secpolicy_inherit_prop(zc, NULL, CRED())) != 0) { + VERIFY(nvlist_remove_nvpair(props, pair) == 0); + VERIFY(nvlist_add_int32(errors, + zc->zc_value, err) == 0); + } + pair = next_pair; + } + kmem_free(zc, sizeof (zfs_cmd_t)); + + if ((pair = nvlist_next_nvpair(errors, NULL)) == NULL) { + nvlist_free(errors); + errors = NULL; + } else { + VERIFY(nvpair_value_int32(pair, &rv) == 0); + } + + if (errlist == NULL) + nvlist_free(errors); + else + *errlist = errors; + + return (rv); +} + +static boolean_t +propval_equals(nvpair_t *p1, nvpair_t *p2) +{ + if (nvpair_type(p1) == DATA_TYPE_NVLIST) { + /* dsl_prop_get_all_impl() format */ + nvlist_t *attrs; + VERIFY(nvpair_value_nvlist(p1, &attrs) == 0); + VERIFY(nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &p1) == 0); + } + + if (nvpair_type(p2) == DATA_TYPE_NVLIST) { + nvlist_t *attrs; + VERIFY(nvpair_value_nvlist(p2, &attrs) == 0); + VERIFY(nvlist_lookup_nvpair(attrs, ZPROP_VALUE, + &p2) == 0); + } + + if (nvpair_type(p1) != nvpair_type(p2)) + return (B_FALSE); + + if (nvpair_type(p1) == DATA_TYPE_STRING) { + char *valstr1, *valstr2; + + VERIFY(nvpair_value_string(p1, (char **)&valstr1) == 0); + VERIFY(nvpair_value_string(p2, (char **)&valstr2) == 0); + return (strcmp(valstr1, valstr2) == 0); + } else { + uint64_t intval1, intval2; + + VERIFY(nvpair_value_uint64(p1, &intval1) == 0); + VERIFY(nvpair_value_uint64(p2, &intval2) == 0); + return (intval1 == intval2); + } +} + +/* + * Remove properties from props if they are not going to change (as determined + * by comparison with origprops). Remove them from origprops as well, since we + * do not need to clear or restore properties that won't change. + */ +static void +props_reduce(nvlist_t *props, nvlist_t *origprops) +{ + nvpair_t *pair, *next_pair; + + if (origprops == NULL) + return; /* all props need to be received */ + + pair = nvlist_next_nvpair(props, NULL); + while (pair != NULL) { + const char *propname = nvpair_name(pair); + nvpair_t *match; + + next_pair = nvlist_next_nvpair(props, pair); + + if ((nvlist_lookup_nvpair(origprops, propname, + &match) != 0) || !propval_equals(pair, match)) + goto next; /* need to set received value */ + + /* don't clear the existing received value */ + (void) nvlist_remove_nvpair(origprops, match); + /* don't bother receiving the property */ + (void) nvlist_remove_nvpair(props, pair); +next: + pair = next_pair; + } +} + +/* + * Extract properties that cannot be set PRIOR to the receipt of a dataset. + * For example, refquota cannot be set until after the receipt of a dataset, + * because in replication streams, an older/earlier snapshot may exceed the + * refquota. We want to receive the older/earlier snapshot, but setting + * refquota pre-receipt will set the dsl's ACTUAL quota, which will prevent + * the older/earlier snapshot from being received (with EDQUOT). + * + * The ZFS test "zfs_receive_011_pos" demonstrates such a scenario. + * + * libzfs will need to be judicious handling errors encountered by props + * extracted by this function. + */ +static nvlist_t * +extract_delay_props(nvlist_t *props) +{ + nvlist_t *delayprops; + nvpair_t *nvp, *tmp; + static const zfs_prop_t delayable[] = { ZFS_PROP_REFQUOTA, 0 }; + int i; + + VERIFY(nvlist_alloc(&delayprops, NV_UNIQUE_NAME, KM_SLEEP) == 0); + + for (nvp = nvlist_next_nvpair(props, NULL); nvp != NULL; + nvp = nvlist_next_nvpair(props, nvp)) { + /* + * strcmp() is safe because zfs_prop_to_name() always returns + * a bounded string. + */ + for (i = 0; delayable[i] != 0; i++) { + if (strcmp(zfs_prop_to_name(delayable[i]), + nvpair_name(nvp)) == 0) { + break; + } + } + if (delayable[i] != 0) { + tmp = nvlist_prev_nvpair(props, nvp); + VERIFY(nvlist_add_nvpair(delayprops, nvp) == 0); + VERIFY(nvlist_remove_nvpair(props, nvp) == 0); + nvp = tmp; + } + } + + if (nvlist_empty(delayprops)) { + nvlist_free(delayprops); + delayprops = NULL; + } + return (delayprops); +} + +#ifdef DEBUG +static boolean_t zfs_ioc_recv_inject_err; +#endif + +/* + * nvlist 'errors' is always allocated. It will contain descriptions of + * encountered errors, if any. It's the callers responsibility to free. + */ +static int +zfs_ioc_recv_impl(char *tofs, char *tosnap, char *origin, nvlist_t *recvprops, + nvlist_t *localprops, boolean_t force, boolean_t resumable, int input_fd, + dmu_replay_record_t *begin_record, int cleanup_fd, uint64_t *read_bytes, + uint64_t *errflags, uint64_t *action_handle, nvlist_t **errors) +{ + dmu_recv_cookie_t drc; + int error = 0; + int props_error = 0; + offset_t off; + nvlist_t *delayprops = NULL; /* sent properties applied post-receive */ + nvlist_t *origprops = NULL; /* existing properties */ + nvlist_t *origrecvd = NULL; /* existing received properties */ + boolean_t first_recvd_props = B_FALSE; + file_t *input_fp; + + *read_bytes = 0; + *errflags = 0; + *errors = fnvlist_alloc(); + + input_fp = getf(input_fd); + if (input_fp == NULL) + return (SET_ERROR(EBADF)); + + error = dmu_recv_begin(tofs, tosnap, + begin_record, force, resumable, origin, &drc); + if (error != 0) + goto out; + + /* + * Set properties before we receive the stream so that they are applied + * to the new data. Note that we must call dmu_recv_stream() if + * dmu_recv_begin() succeeds. + */ + if (recvprops != NULL && !drc.drc_newfs) { + if (spa_version(dsl_dataset_get_spa(drc.drc_ds)) >= + SPA_VERSION_RECVD_PROPS && + !dsl_prop_get_hasrecvd(tofs)) + first_recvd_props = B_TRUE; + + /* + * If new received properties are supplied, they are to + * completely replace the existing received properties, so stash + * away the existing ones. + */ + if (dsl_prop_get_received(tofs, &origrecvd) == 0) { + nvlist_t *errlist = NULL; + /* + * Don't bother writing a property if its value won't + * change (and avoid the unnecessary security checks). + * + * The first receive after SPA_VERSION_RECVD_PROPS is a + * special case where we blow away all local properties + * regardless. + */ + if (!first_recvd_props) + props_reduce(recvprops, origrecvd); + if (zfs_check_clearable(tofs, origrecvd, &errlist) != 0) + (void) nvlist_merge(*errors, errlist, 0); + nvlist_free(errlist); + + if (clear_received_props(tofs, origrecvd, + first_recvd_props ? NULL : recvprops) != 0) + *errflags |= ZPROP_ERR_NOCLEAR; + } else { + *errflags |= ZPROP_ERR_NOCLEAR; + } + } + + /* + * Stash away existing properties so we can restore them on error unless + * we're doing the first receive after SPA_VERSION_RECVD_PROPS, in which + * case "origrecvd" will take care of that. + */ + if (localprops != NULL && !drc.drc_newfs && !first_recvd_props) { + objset_t *os; + if (dmu_objset_hold(tofs, FTAG, &os) == 0) { + if (dsl_prop_get_all(os, &origprops) != 0) { + *errflags |= ZPROP_ERR_NOCLEAR; + } + dmu_objset_rele(os, FTAG); + } else { + *errflags |= ZPROP_ERR_NOCLEAR; + } + } + + if (recvprops != NULL) { + props_error = dsl_prop_set_hasrecvd(tofs); + + if (props_error == 0) { + delayprops = extract_delay_props(recvprops); + (void) zfs_set_prop_nvlist(tofs, ZPROP_SRC_RECEIVED, + recvprops, *errors); + } + } + + if (localprops != NULL) { + nvlist_t *oprops = fnvlist_alloc(); + nvlist_t *xprops = fnvlist_alloc(); + nvpair_t *nvp = NULL; + + while ((nvp = nvlist_next_nvpair(localprops, nvp)) != NULL) { + if (nvpair_type(nvp) == DATA_TYPE_BOOLEAN) { + /* -x property */ + const char *name = nvpair_name(nvp); + zfs_prop_t prop = zfs_name_to_prop(name); + if (prop != ZPROP_INVAL) { + if (!zfs_prop_inheritable(prop)) + continue; + } else if (!zfs_prop_user(name)) + continue; + fnvlist_add_boolean(xprops, name); + } else { + /* -o property=value */ + fnvlist_add_nvpair(oprops, nvp); + } + } + (void) zfs_set_prop_nvlist(tofs, ZPROP_SRC_LOCAL, + oprops, *errors); + (void) zfs_set_prop_nvlist(tofs, ZPROP_SRC_INHERITED, + xprops, *errors); + + nvlist_free(oprops); + nvlist_free(xprops); + } + + off = input_fp->f_offset; + error = dmu_recv_stream(&drc, input_fp->f_vnode, &off, cleanup_fd, + action_handle); + + if (error == 0) { + zfsvfs_t *zfsvfs = NULL; + zvol_state_t *zv = NULL; + + if (getzfsvfs(tofs, &zfsvfs) == 0) { + /* online recv */ + dsl_dataset_t *ds; + int end_err; + + ds = dmu_objset_ds(zfsvfs->z_os); + error = zfs_suspend_fs(zfsvfs); + /* + * If the suspend fails, then the recv_end will + * likely also fail, and clean up after itself. + */ + end_err = dmu_recv_end(&drc, zfsvfs); + if (error == 0) + error = zfs_resume_fs(zfsvfs, ds); + error = error ? error : end_err; + deactivate_super(zfsvfs->z_sb); + } else if ((zv = zvol_suspend(tofs)) != NULL) { + error = dmu_recv_end(&drc, zvol_tag(zv)); + zvol_resume(zv); + } else { + error = dmu_recv_end(&drc, NULL); + } + + /* Set delayed properties now, after we're done receiving. */ + if (delayprops != NULL && error == 0) { + (void) zfs_set_prop_nvlist(tofs, ZPROP_SRC_RECEIVED, + delayprops, *errors); + } + } + + if (delayprops != NULL) { + /* + * Merge delayed props back in with initial props, in case + * we're DEBUG and zfs_ioc_recv_inject_err is set (which means + * we have to make sure clear_received_props() includes + * the delayed properties). + * + * Since zfs_ioc_recv_inject_err is only in DEBUG kernels, + * using ASSERT() will be just like a VERIFY. + */ + ASSERT(nvlist_merge(recvprops, delayprops, 0) == 0); + nvlist_free(delayprops); + } + + + *read_bytes = off - input_fp->f_offset; + if (VOP_SEEK(input_fp->f_vnode, input_fp->f_offset, &off, NULL) == 0) + input_fp->f_offset = off; + +#ifdef DEBUG + if (zfs_ioc_recv_inject_err) { + zfs_ioc_recv_inject_err = B_FALSE; + error = 1; + } +#endif + + /* + * On error, restore the original props. + */ + if (error != 0 && recvprops != NULL && !drc.drc_newfs) { + if (clear_received_props(tofs, recvprops, NULL) != 0) { + /* + * We failed to clear the received properties. + * Since we may have left a $recvd value on the + * system, we can't clear the $hasrecvd flag. + */ + *errflags |= ZPROP_ERR_NORESTORE; + } else if (first_recvd_props) { + dsl_prop_unset_hasrecvd(tofs); + } + + if (origrecvd == NULL && !drc.drc_newfs) { + /* We failed to stash the original properties. */ + *errflags |= ZPROP_ERR_NORESTORE; + } + + /* + * dsl_props_set() will not convert RECEIVED to LOCAL on or + * after SPA_VERSION_RECVD_PROPS, so we need to specify LOCAL + * explicitly if we're restoring local properties cleared in the + * first new-style receive. + */ + if (origrecvd != NULL && + zfs_set_prop_nvlist(tofs, (first_recvd_props ? + ZPROP_SRC_LOCAL : ZPROP_SRC_RECEIVED), + origrecvd, NULL) != 0) { + /* + * We stashed the original properties but failed to + * restore them. + */ + *errflags |= ZPROP_ERR_NORESTORE; + } + } + if (error != 0 && localprops != NULL && !drc.drc_newfs && + !first_recvd_props) { + nvlist_t *setprops; + nvlist_t *inheritprops; + nvpair_t *nvp; + + if (origprops == NULL) { + /* We failed to stash the original properties. */ + *errflags |= ZPROP_ERR_NORESTORE; + goto out; + } + + /* Restore original props */ + setprops = fnvlist_alloc(); + inheritprops = fnvlist_alloc(); + nvp = NULL; + while ((nvp = nvlist_next_nvpair(localprops, nvp)) != NULL) { + const char *name = nvpair_name(nvp); + const char *source; + nvlist_t *attrs; + + if (!nvlist_exists(origprops, name)) { + /* + * Property was not present or was explicitly + * inherited before the receive, restore this. + */ + fnvlist_add_boolean(inheritprops, name); + continue; + } + attrs = fnvlist_lookup_nvlist(origprops, name); + source = fnvlist_lookup_string(attrs, ZPROP_SOURCE); + + /* Skip received properties */ + if (strcmp(source, ZPROP_SOURCE_VAL_RECVD) == 0) + continue; + + if (strcmp(source, tofs) == 0) { + /* Property was locally set */ + fnvlist_add_nvlist(setprops, name, attrs); + } else { + /* Property was implicitly inherited */ + fnvlist_add_boolean(inheritprops, name); + } + } + + if (zfs_set_prop_nvlist(tofs, ZPROP_SRC_LOCAL, setprops, + NULL) != 0) + *errflags |= ZPROP_ERR_NORESTORE; + if (zfs_set_prop_nvlist(tofs, ZPROP_SRC_INHERITED, inheritprops, + NULL) != 0) + *errflags |= ZPROP_ERR_NORESTORE; + + nvlist_free(setprops); + nvlist_free(inheritprops); + } +out: + releasef(input_fd); + nvlist_free(origrecvd); + nvlist_free(origprops); + + if (error == 0) + error = props_error; + + return (error); +} + +/* + * inputs: + * zc_name name of containing filesystem (unused) + * zc_nvlist_src{_size} nvlist of properties to apply + * zc_nvlist_conf{_size} nvlist of properties to exclude + * (DATA_TYPE_BOOLEAN) and override (everything else) + * zc_value name of snapshot to create + * zc_string name of clone origin (if DRR_FLAG_CLONE) + * zc_cookie file descriptor to recv from + * zc_begin_record the BEGIN record of the stream (not byteswapped) + * zc_guid force flag + * zc_cleanup_fd cleanup-on-exit file descriptor + * zc_action_handle handle for this guid/ds mapping (or zero on first call) + * + * outputs: + * zc_cookie number of bytes read + * zc_obj zprop_errflags_t + * zc_action_handle handle for this guid/ds mapping + * zc_nvlist_dst{_size} error for each unapplied received property + */ +static int +zfs_ioc_recv(zfs_cmd_t *zc) +{ + dmu_replay_record_t begin_record; + nvlist_t *errors = NULL; + nvlist_t *recvdprops = NULL; + nvlist_t *localprops = NULL; + char *origin = NULL; + char *tosnap; + char tofs[ZFS_MAX_DATASET_NAME_LEN]; + int error = 0; + + if (dataset_namecheck(zc->zc_value, NULL, NULL) != 0 || + strchr(zc->zc_value, '@') == NULL || + strchr(zc->zc_value, '%')) + return (SET_ERROR(EINVAL)); + + (void) strlcpy(tofs, zc->zc_value, sizeof (tofs)); + tosnap = strchr(tofs, '@'); + *tosnap++ = '\0'; + + if (zc->zc_nvlist_src != 0 && + (error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &recvdprops)) != 0) + return (error); + + if (zc->zc_nvlist_conf != 0 && + (error = get_nvlist(zc->zc_nvlist_conf, zc->zc_nvlist_conf_size, + zc->zc_iflags, &localprops)) != 0) + return (error); + + if (zc->zc_string[0]) + origin = zc->zc_string; + + begin_record.drr_type = DRR_BEGIN; + begin_record.drr_payloadlen = 0; + begin_record.drr_u.drr_begin = zc->zc_begin_record; + + error = zfs_ioc_recv_impl(tofs, tosnap, origin, recvdprops, localprops, + zc->zc_guid, B_FALSE, zc->zc_cookie, &begin_record, + zc->zc_cleanup_fd, &zc->zc_cookie, &zc->zc_obj, + &zc->zc_action_handle, &errors); + nvlist_free(recvdprops); + nvlist_free(localprops); + + /* + * Now that all props, initial and delayed, are set, report the prop + * errors to the caller. + */ + if (zc->zc_nvlist_dst_size != 0 && errors != NULL && + (nvlist_smush(errors, zc->zc_nvlist_dst_size) != 0 || + put_nvlist(zc, errors) != 0)) { + /* + * Caller made zc->zc_nvlist_dst less than the minimum expected + * size or supplied an invalid address. + */ + error = SET_ERROR(EINVAL); + } + + nvlist_free(errors); + + return (error); +} + +/* + * innvl: { + * "snapname" -> full name of the snapshot to create + * (optional) "props" -> received properties to set (nvlist) + * (optional) "localprops" -> override and exclude properties (nvlist) + * (optional) "origin" -> name of clone origin (DRR_FLAG_CLONE) + * "begin_record" -> non-byteswapped dmu_replay_record_t + * "input_fd" -> file descriptor to read stream from (int32) + * (optional) "force" -> force flag (value ignored) + * (optional) "resumable" -> resumable flag (value ignored) + * (optional) "cleanup_fd" -> cleanup-on-exit file descriptor + * (optional) "action_handle" -> handle for this guid/ds mapping + * } + * + * outnvl: { + * "read_bytes" -> number of bytes read + * "error_flags" -> zprop_errflags_t + * "action_handle" -> handle for this guid/ds mapping + * "errors" -> error for each unapplied received property (nvlist) + * } + */ +static int +zfs_ioc_recv_new(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl) +{ + dmu_replay_record_t *begin_record; + uint_t begin_record_size; + nvlist_t *errors = NULL; + nvlist_t *recvprops = NULL; + nvlist_t *localprops = NULL; + char *snapname = NULL; + char *origin = NULL; + char *tosnap; + char tofs[ZFS_MAX_DATASET_NAME_LEN]; + boolean_t force; + boolean_t resumable; + uint64_t action_handle = 0; + uint64_t read_bytes = 0; + uint64_t errflags = 0; + int input_fd = -1; + int cleanup_fd = -1; + int error; + + error = nvlist_lookup_string(innvl, "snapname", &snapname); + if (error != 0) + return (SET_ERROR(EINVAL)); + + if (dataset_namecheck(snapname, NULL, NULL) != 0 || + strchr(snapname, '@') == NULL || + strchr(snapname, '%')) + return (SET_ERROR(EINVAL)); + + (void) strcpy(tofs, snapname); + tosnap = strchr(tofs, '@'); + *tosnap++ = '\0'; + + error = nvlist_lookup_string(innvl, "origin", &origin); + if (error && error != ENOENT) + return (error); + + error = nvlist_lookup_byte_array(innvl, "begin_record", + (uchar_t **)&begin_record, &begin_record_size); + if (error != 0 || begin_record_size != sizeof (*begin_record)) + return (SET_ERROR(EINVAL)); + + error = nvlist_lookup_int32(innvl, "input_fd", &input_fd); + if (error != 0) + return (SET_ERROR(EINVAL)); + + force = nvlist_exists(innvl, "force"); + resumable = nvlist_exists(innvl, "resumable"); + + error = nvlist_lookup_int32(innvl, "cleanup_fd", &cleanup_fd); + if (error && error != ENOENT) + return (error); + + error = nvlist_lookup_uint64(innvl, "action_handle", &action_handle); + if (error && error != ENOENT) + return (error); + + /* we still use "props" here for backwards compatibility */ + error = nvlist_lookup_nvlist(innvl, "props", &recvprops); + if (error && error != ENOENT) + return (error); + + error = nvlist_lookup_nvlist(innvl, "localprops", &localprops); + if (error && error != ENOENT) + return (error); + + error = zfs_ioc_recv_impl(tofs, tosnap, origin, recvprops, localprops, + force, resumable, input_fd, begin_record, cleanup_fd, &read_bytes, + &errflags, &action_handle, &errors); + + fnvlist_add_uint64(outnvl, "read_bytes", read_bytes); + fnvlist_add_uint64(outnvl, "error_flags", errflags); + fnvlist_add_uint64(outnvl, "action_handle", action_handle); + fnvlist_add_nvlist(outnvl, "errors", errors); + + nvlist_free(errors); + nvlist_free(recvprops); + nvlist_free(localprops); + + return (error); +} + +/* + * inputs: + * zc_name name of snapshot to send + * zc_cookie file descriptor to send stream to + * zc_obj fromorigin flag (mutually exclusive with zc_fromobj) + * zc_sendobj objsetid of snapshot to send + * zc_fromobj objsetid of incremental fromsnap (may be zero) + * zc_guid if set, estimate size of stream only. zc_cookie is ignored. + * output size in zc_objset_type. + * zc_flags lzc_send_flags + * + * outputs: + * zc_objset_type estimated size, if zc_guid is set + */ +static int +zfs_ioc_send(zfs_cmd_t *zc) +{ + int error; + offset_t off; + boolean_t estimate = (zc->zc_guid != 0); + boolean_t embedok = (zc->zc_flags & 0x1); + boolean_t large_block_ok = (zc->zc_flags & 0x2); + boolean_t compressok = (zc->zc_flags & 0x4); + + if (zc->zc_obj != 0) { + dsl_pool_t *dp; + dsl_dataset_t *tosnap; + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold_obj(dp, zc->zc_sendobj, FTAG, &tosnap); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + if (dsl_dir_is_clone(tosnap->ds_dir)) + zc->zc_fromobj = + dsl_dir_phys(tosnap->ds_dir)->dd_origin_obj; + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + } + + if (estimate) { + dsl_pool_t *dp; + dsl_dataset_t *tosnap; + dsl_dataset_t *fromsnap = NULL; + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold_obj(dp, zc->zc_sendobj, FTAG, &tosnap); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + if (zc->zc_fromobj != 0) { + error = dsl_dataset_hold_obj(dp, zc->zc_fromobj, + FTAG, &fromsnap); + if (error != 0) { + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + } + + error = dmu_send_estimate(tosnap, fromsnap, compressok, + &zc->zc_objset_type); + + if (fromsnap != NULL) + dsl_dataset_rele(fromsnap, FTAG); + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + } else { + file_t *fp = getf(zc->zc_cookie); + if (fp == NULL) + return (SET_ERROR(EBADF)); + + off = fp->f_offset; + error = dmu_send_obj(zc->zc_name, zc->zc_sendobj, + zc->zc_fromobj, embedok, large_block_ok, compressok, + zc->zc_cookie, fp->f_vnode, &off); + + if (VOP_SEEK(fp->f_vnode, fp->f_offset, &off, NULL) == 0) + fp->f_offset = off; + releasef(zc->zc_cookie); + } + return (error); +} + +/* + * inputs: + * zc_name name of snapshot on which to report progress + * zc_cookie file descriptor of send stream + * + * outputs: + * zc_cookie number of bytes written in send stream thus far + */ +static int +zfs_ioc_send_progress(zfs_cmd_t *zc) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds; + dmu_sendarg_t *dsp = NULL; + int error; + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &ds); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + mutex_enter(&ds->ds_sendstream_lock); + + /* + * Iterate over all the send streams currently active on this dataset. + * If there's one which matches the specified file descriptor _and_ the + * stream was started by the current process, return the progress of + * that stream. + */ + + for (dsp = list_head(&ds->ds_sendstreams); dsp != NULL; + dsp = list_next(&ds->ds_sendstreams, dsp)) { + if (dsp->dsa_outfd == zc->zc_cookie && + dsp->dsa_proc->group_leader == curproc->group_leader) + break; + } + + if (dsp != NULL) + zc->zc_cookie = *(dsp->dsa_off); + else + error = SET_ERROR(ENOENT); + + mutex_exit(&ds->ds_sendstream_lock); + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); +} + +static int +zfs_ioc_inject_fault(zfs_cmd_t *zc) +{ + int id, error; + + error = zio_inject_fault(zc->zc_name, (int)zc->zc_guid, &id, + &zc->zc_inject_record); + + if (error == 0) + zc->zc_guid = (uint64_t)id; + + return (error); +} + +static int +zfs_ioc_clear_fault(zfs_cmd_t *zc) +{ + return (zio_clear_fault((int)zc->zc_guid)); +} + +static int +zfs_ioc_inject_list_next(zfs_cmd_t *zc) +{ + int id = (int)zc->zc_guid; + int error; + + error = zio_inject_list_next(&id, zc->zc_name, sizeof (zc->zc_name), + &zc->zc_inject_record); + + zc->zc_guid = id; + + return (error); +} + +static int +zfs_ioc_error_log(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + size_t count = (size_t)zc->zc_nvlist_dst_size; + + if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0) + return (error); + + error = spa_get_errlog(spa, (void *)(uintptr_t)zc->zc_nvlist_dst, + &count); + if (error == 0) + zc->zc_nvlist_dst_size = count; + else + zc->zc_nvlist_dst_size = spa_get_errlog_size(spa); + + spa_close(spa, FTAG); + + return (error); +} + +static int +zfs_ioc_clear(zfs_cmd_t *zc) +{ + spa_t *spa; + vdev_t *vd; + int error; + + /* + * On zpool clear we also fix up missing slogs + */ + mutex_enter(&spa_namespace_lock); + spa = spa_lookup(zc->zc_name); + if (spa == NULL) { + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(EIO)); + } + if (spa_get_log_state(spa) == SPA_LOG_MISSING) { + /* we need to let spa_open/spa_load clear the chains */ + spa_set_log_state(spa, SPA_LOG_CLEAR); + } + spa->spa_last_open_failed = 0; + mutex_exit(&spa_namespace_lock); + + if (zc->zc_cookie & ZPOOL_NO_REWIND) { + error = spa_open(zc->zc_name, &spa, FTAG); + } else { + nvlist_t *policy; + nvlist_t *config = NULL; + + if (zc->zc_nvlist_src == 0) + return (SET_ERROR(EINVAL)); + + if ((error = get_nvlist(zc->zc_nvlist_src, + zc->zc_nvlist_src_size, zc->zc_iflags, &policy)) == 0) { + error = spa_open_rewind(zc->zc_name, &spa, FTAG, + policy, &config); + if (config != NULL) { + int err; + + if ((err = put_nvlist(zc, config)) != 0) + error = err; + nvlist_free(config); + } + nvlist_free(policy); + } + } + + if (error != 0) + return (error); + + spa_vdev_state_enter(spa, SCL_NONE); + + if (zc->zc_guid == 0) { + vd = NULL; + } else { + vd = spa_lookup_by_guid(spa, zc->zc_guid, B_TRUE); + if (vd == NULL) { + (void) spa_vdev_state_exit(spa, NULL, ENODEV); + spa_close(spa, FTAG); + return (SET_ERROR(ENODEV)); + } + } + + vdev_clear(spa, vd); + + (void) spa_vdev_state_exit(spa, spa_suspended(spa) ? + NULL : spa->spa_root_vdev, 0); + + /* + * Resume any suspended I/Os. + */ + if (zio_resume(spa) != 0) + error = SET_ERROR(EIO); + + spa_close(spa, FTAG); + + return (error); +} + +static int +zfs_ioc_pool_reopen(zfs_cmd_t *zc) +{ + spa_t *spa; + int error; + + error = spa_open(zc->zc_name, &spa, FTAG); + if (error != 0) + return (error); + + spa_vdev_state_enter(spa, SCL_NONE); + + /* + * If a resilver is already in progress then set the + * spa_scrub_reopen flag to B_TRUE so that we don't restart + * the scan as a side effect of the reopen. Otherwise, let + * vdev_open() decided if a resilver is required. + */ + spa->spa_scrub_reopen = dsl_scan_resilvering(spa->spa_dsl_pool); + vdev_reopen(spa->spa_root_vdev); + spa->spa_scrub_reopen = B_FALSE; + + (void) spa_vdev_state_exit(spa, NULL, 0); + spa_close(spa, FTAG); + return (0); +} +/* + * inputs: + * zc_name name of filesystem + * + * outputs: + * zc_string name of conflicting snapshot, if there is one + */ +static int +zfs_ioc_promote(zfs_cmd_t *zc) +{ + dsl_pool_t *dp; + dsl_dataset_t *ds, *ods; + char origin[ZFS_MAX_DATASET_NAME_LEN]; + char *cp; + int error; + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &ds); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + if (!dsl_dir_is_clone(ds->ds_dir)) { + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (SET_ERROR(EINVAL)); + } + + error = dsl_dataset_hold_obj(dp, + dsl_dir_phys(ds->ds_dir)->dd_origin_obj, FTAG, &ods); + if (error != 0) { + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + + dsl_dataset_name(ods, origin); + dsl_dataset_rele(ods, FTAG); + dsl_dataset_rele(ds, FTAG); + dsl_pool_rele(dp, FTAG); + + /* + * We don't need to unmount *all* the origin fs's snapshots, but + * it's easier. + */ + cp = strchr(origin, '@'); + if (cp) + *cp = '\0'; + (void) dmu_objset_find(origin, + zfs_unmount_snap_cb, NULL, DS_FIND_SNAPSHOTS); + return (dsl_dataset_promote(zc->zc_name, zc->zc_string)); +} + +/* + * Retrieve a single {user|group}{used|quota}@... property. + * + * inputs: + * zc_name name of filesystem + * zc_objset_type zfs_userquota_prop_t + * zc_value domain name (eg. "S-1-234-567-89") + * zc_guid RID/UID/GID + * + * outputs: + * zc_cookie property value + */ +static int +zfs_ioc_userspace_one(zfs_cmd_t *zc) +{ + zfsvfs_t *zfsvfs; + int error; + + if (zc->zc_objset_type >= ZFS_NUM_USERQUOTA_PROPS) + return (SET_ERROR(EINVAL)); + + error = zfsvfs_hold(zc->zc_name, FTAG, &zfsvfs, B_FALSE); + if (error != 0) + return (error); + + error = zfs_userspace_one(zfsvfs, + zc->zc_objset_type, zc->zc_value, zc->zc_guid, &zc->zc_cookie); + zfsvfs_rele(zfsvfs, FTAG); + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_cookie zap cursor + * zc_objset_type zfs_userquota_prop_t + * zc_nvlist_dst[_size] buffer to fill (not really an nvlist) + * + * outputs: + * zc_nvlist_dst[_size] data buffer (array of zfs_useracct_t) + * zc_cookie zap cursor + */ +static int +zfs_ioc_userspace_many(zfs_cmd_t *zc) +{ + zfsvfs_t *zfsvfs; + int bufsize = zc->zc_nvlist_dst_size; + int error; + void *buf; + + if (bufsize <= 0) + return (SET_ERROR(ENOMEM)); + + error = zfsvfs_hold(zc->zc_name, FTAG, &zfsvfs, B_FALSE); + if (error != 0) + return (error); + + buf = vmem_alloc(bufsize, KM_SLEEP); + + error = zfs_userspace_many(zfsvfs, zc->zc_objset_type, &zc->zc_cookie, + buf, &zc->zc_nvlist_dst_size); + + if (error == 0) { + error = xcopyout(buf, + (void *)(uintptr_t)zc->zc_nvlist_dst, + zc->zc_nvlist_dst_size); + } + vmem_free(buf, bufsize); + zfsvfs_rele(zfsvfs, FTAG); + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * + * outputs: + * none + */ +static int +zfs_ioc_userspace_upgrade(zfs_cmd_t *zc) +{ + objset_t *os; + int error = 0; + zfsvfs_t *zfsvfs; + + if (getzfsvfs(zc->zc_name, &zfsvfs) == 0) { + if (!dmu_objset_userused_enabled(zfsvfs->z_os)) { + /* + * If userused is not enabled, it may be because the + * objset needs to be closed & reopened (to grow the + * objset_phys_t). Suspend/resume the fs will do that. + */ + dsl_dataset_t *ds; + + ds = dmu_objset_ds(zfsvfs->z_os); + error = zfs_suspend_fs(zfsvfs); + if (error == 0) { + dmu_objset_refresh_ownership(zfsvfs->z_os, + zfsvfs); + error = zfs_resume_fs(zfsvfs, ds); + } + } + if (error == 0) + error = dmu_objset_userspace_upgrade(zfsvfs->z_os); + deactivate_super(zfsvfs->z_sb); + } else { + /* XXX kind of reading contents without owning */ + error = dmu_objset_hold(zc->zc_name, FTAG, &os); + if (error != 0) + return (error); + + error = dmu_objset_userspace_upgrade(os); + dmu_objset_rele(os, FTAG); + } + + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * + * outputs: + * none + */ +static int +zfs_ioc_userobjspace_upgrade(zfs_cmd_t *zc) +{ + objset_t *os; + int error; + + error = dmu_objset_hold(zc->zc_name, FTAG, &os); + if (error != 0) + return (error); + + dsl_dataset_long_hold(dmu_objset_ds(os), FTAG); + dsl_pool_rele(dmu_objset_pool(os), FTAG); + + if (dmu_objset_userobjspace_upgradable(os)) { + mutex_enter(&os->os_upgrade_lock); + if (os->os_upgrade_id == 0) { + /* clear potential error code and retry */ + os->os_upgrade_status = 0; + mutex_exit(&os->os_upgrade_lock); + + dmu_objset_userobjspace_upgrade(os); + } else { + mutex_exit(&os->os_upgrade_lock); + } + + taskq_wait_id(os->os_spa->spa_upgrade_taskq, os->os_upgrade_id); + error = os->os_upgrade_status; + } + + dsl_dataset_long_rele(dmu_objset_ds(os), FTAG); + dsl_dataset_rele(dmu_objset_ds(os), FTAG); + + return (error); +} + +static int +zfs_ioc_share(zfs_cmd_t *zc) +{ + return (SET_ERROR(ENOSYS)); +} + +ace_t full_access[] = { + {(uid_t)-1, ACE_ALL_PERMS, ACE_EVERYONE, 0} +}; + +/* + * inputs: + * zc_name name of containing filesystem + * zc_obj object # beyond which we want next in-use object # + * + * outputs: + * zc_obj next in-use object # + */ +static int +zfs_ioc_next_obj(zfs_cmd_t *zc) +{ + objset_t *os = NULL; + int error; + + error = dmu_objset_hold(zc->zc_name, FTAG, &os); + if (error != 0) + return (error); + + error = dmu_object_next(os, &zc->zc_obj, B_FALSE, 0); + + dmu_objset_rele(os, FTAG); + return (error); +} + +/* + * inputs: + * zc_name name of filesystem + * zc_value prefix name for snapshot + * zc_cleanup_fd cleanup-on-exit file descriptor for calling process + * + * outputs: + * zc_value short name of new snapshot + */ +static int +zfs_ioc_tmp_snapshot(zfs_cmd_t *zc) +{ + char *snap_name; + char *hold_name; + int error; + minor_t minor; + + error = zfs_onexit_fd_hold(zc->zc_cleanup_fd, &minor); + if (error != 0) + return (error); + + snap_name = kmem_asprintf("%s-%016llx", zc->zc_value, + (u_longlong_t)ddi_get_lbolt64()); + hold_name = kmem_asprintf("%%%s", zc->zc_value); + + error = dsl_dataset_snapshot_tmp(zc->zc_name, snap_name, minor, + hold_name); + if (error == 0) + (void) strlcpy(zc->zc_value, snap_name, + sizeof (zc->zc_value)); + strfree(snap_name); + strfree(hold_name); + zfs_onexit_fd_rele(zc->zc_cleanup_fd); + return (error); +} + +/* + * inputs: + * zc_name name of "to" snapshot + * zc_value name of "from" snapshot + * zc_cookie file descriptor to write diff data on + * + * outputs: + * dmu_diff_record_t's to the file descriptor + */ +static int +zfs_ioc_diff(zfs_cmd_t *zc) +{ + file_t *fp; + offset_t off; + int error; + + fp = getf(zc->zc_cookie); + if (fp == NULL) + return (SET_ERROR(EBADF)); + + off = fp->f_offset; + + error = dmu_diff(zc->zc_name, zc->zc_value, fp->f_vnode, &off); + + if (VOP_SEEK(fp->f_vnode, fp->f_offset, &off, NULL) == 0) + fp->f_offset = off; + releasef(zc->zc_cookie); + + return (error); +} + +/* + * Remove all ACL files in shares dir + */ +#ifdef HAVE_SMB_SHARE +static int +zfs_smb_acl_purge(znode_t *dzp) +{ + zap_cursor_t zc; + zap_attribute_t zap; + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + int error; + + for (zap_cursor_init(&zc, zfsvfs->z_os, dzp->z_id); + (error = zap_cursor_retrieve(&zc, &zap)) == 0; + zap_cursor_advance(&zc)) { + if ((error = VOP_REMOVE(ZTOV(dzp), zap.za_name, kcred, + NULL, 0)) != 0) + break; + } + zap_cursor_fini(&zc); + return (error); +} +#endif /* HAVE_SMB_SHARE */ + +static int +zfs_ioc_smb_acl(zfs_cmd_t *zc) +{ +#ifdef HAVE_SMB_SHARE + vnode_t *vp; + znode_t *dzp; + vnode_t *resourcevp = NULL; + znode_t *sharedir; + zfsvfs_t *zfsvfs; + nvlist_t *nvlist; + char *src, *target; + vattr_t vattr; + vsecattr_t vsec; + int error = 0; + + if ((error = lookupname(zc->zc_value, UIO_SYSSPACE, + NO_FOLLOW, NULL, &vp)) != 0) + return (error); + + /* Now make sure mntpnt and dataset are ZFS */ + + if (vp->v_vfsp->vfs_fstype != zfsfstype || + (strcmp((char *)refstr_value(vp->v_vfsp->vfs_resource), + zc->zc_name) != 0)) { + VN_RELE(vp); + return (SET_ERROR(EINVAL)); + } + + dzp = VTOZ(vp); + zfsvfs = ZTOZSB(dzp); + ZFS_ENTER(zfsvfs); + + /* + * Create share dir if its missing. + */ + mutex_enter(&zfsvfs->z_lock); + if (zfsvfs->z_shares_dir == 0) { + dmu_tx_t *tx; + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, TRUE, + ZFS_SHARES_DIR); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error != 0) { + dmu_tx_abort(tx); + } else { + error = zfs_create_share_dir(zfsvfs, tx); + dmu_tx_commit(tx); + } + if (error != 0) { + mutex_exit(&zfsvfs->z_lock); + VN_RELE(vp); + ZFS_EXIT(zfsvfs); + return (error); + } + } + mutex_exit(&zfsvfs->z_lock); + + ASSERT(zfsvfs->z_shares_dir); + if ((error = zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &sharedir)) != 0) { + VN_RELE(vp); + ZFS_EXIT(zfsvfs); + return (error); + } + + switch (zc->zc_cookie) { + case ZFS_SMB_ACL_ADD: + vattr.va_mask = AT_MODE|AT_UID|AT_GID|AT_TYPE; + vattr.va_mode = S_IFREG|0777; + vattr.va_uid = 0; + vattr.va_gid = 0; + + vsec.vsa_mask = VSA_ACE; + vsec.vsa_aclentp = &full_access; + vsec.vsa_aclentsz = sizeof (full_access); + vsec.vsa_aclcnt = 1; + + error = VOP_CREATE(ZTOV(sharedir), zc->zc_string, + &vattr, EXCL, 0, &resourcevp, kcred, 0, NULL, &vsec); + if (resourcevp) + VN_RELE(resourcevp); + break; + + case ZFS_SMB_ACL_REMOVE: + error = VOP_REMOVE(ZTOV(sharedir), zc->zc_string, kcred, + NULL, 0); + break; + + case ZFS_SMB_ACL_RENAME: + if ((error = get_nvlist(zc->zc_nvlist_src, + zc->zc_nvlist_src_size, zc->zc_iflags, &nvlist)) != 0) { + VN_RELE(vp); + VN_RELE(ZTOV(sharedir)); + ZFS_EXIT(zfsvfs); + return (error); + } + if (nvlist_lookup_string(nvlist, ZFS_SMB_ACL_SRC, &src) || + nvlist_lookup_string(nvlist, ZFS_SMB_ACL_TARGET, + &target)) { + VN_RELE(vp); + VN_RELE(ZTOV(sharedir)); + ZFS_EXIT(zfsvfs); + nvlist_free(nvlist); + return (error); + } + error = VOP_RENAME(ZTOV(sharedir), src, ZTOV(sharedir), target, + kcred, NULL, 0); + nvlist_free(nvlist); + break; + + case ZFS_SMB_ACL_PURGE: + error = zfs_smb_acl_purge(sharedir); + break; + + default: + error = SET_ERROR(EINVAL); + break; + } + + VN_RELE(vp); + VN_RELE(ZTOV(sharedir)); + + ZFS_EXIT(zfsvfs); + + return (error); +#else + return (SET_ERROR(ENOTSUP)); +#endif /* HAVE_SMB_SHARE */ +} + +/* + * innvl: { + * "holds" -> { snapname -> holdname (string), ... } + * (optional) "cleanup_fd" -> fd (int32) + * } + * + * outnvl: { + * snapname -> error value (int32) + * ... + * } + */ +/* ARGSUSED */ +static int +zfs_ioc_hold(const char *pool, nvlist_t *args, nvlist_t *errlist) +{ + nvpair_t *pair; + nvlist_t *holds; + int cleanup_fd = -1; + int error; + minor_t minor = 0; + + error = nvlist_lookup_nvlist(args, "holds", &holds); + if (error != 0) + return (SET_ERROR(EINVAL)); + + /* make sure the user didn't pass us any invalid (empty) tags */ + for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; + pair = nvlist_next_nvpair(holds, pair)) { + char *htag; + + error = nvpair_value_string(pair, &htag); + if (error != 0) + return (SET_ERROR(error)); + + if (strlen(htag) == 0) + return (SET_ERROR(EINVAL)); + } + + if (nvlist_lookup_int32(args, "cleanup_fd", &cleanup_fd) == 0) { + error = zfs_onexit_fd_hold(cleanup_fd, &minor); + if (error != 0) + return (error); + } + + error = dsl_dataset_user_hold(holds, minor, errlist); + if (minor != 0) + zfs_onexit_fd_rele(cleanup_fd); + return (error); +} + +/* + * innvl is not used. + * + * outnvl: { + * holdname -> time added (uint64 seconds since epoch) + * ... + * } + */ +/* ARGSUSED */ +static int +zfs_ioc_get_holds(const char *snapname, nvlist_t *args, nvlist_t *outnvl) +{ + ASSERT3P(args, ==, NULL); + return (dsl_dataset_get_holds(snapname, outnvl)); +} + +/* + * innvl: { + * snapname -> { holdname, ... } + * ... + * } + * + * outnvl: { + * snapname -> error value (int32) + * ... + * } + */ +/* ARGSUSED */ +static int +zfs_ioc_release(const char *pool, nvlist_t *holds, nvlist_t *errlist) +{ + return (dsl_dataset_user_release(holds, errlist)); +} + +/* + * inputs: + * zc_guid flags (ZEVENT_NONBLOCK) + * zc_cleanup_fd zevent file descriptor + * + * outputs: + * zc_nvlist_dst next nvlist event + * zc_cookie dropped events since last get + */ +static int +zfs_ioc_events_next(zfs_cmd_t *zc) +{ + zfs_zevent_t *ze; + nvlist_t *event = NULL; + minor_t minor; + uint64_t dropped = 0; + int error; + + error = zfs_zevent_fd_hold(zc->zc_cleanup_fd, &minor, &ze); + if (error != 0) + return (error); + + do { + error = zfs_zevent_next(ze, &event, + &zc->zc_nvlist_dst_size, &dropped); + if (event != NULL) { + zc->zc_cookie = dropped; + error = put_nvlist(zc, event); + nvlist_free(event); + } + + if (zc->zc_guid & ZEVENT_NONBLOCK) + break; + + if ((error == 0) || (error != ENOENT)) + break; + + error = zfs_zevent_wait(ze); + if (error != 0) + break; + } while (1); + + zfs_zevent_fd_rele(zc->zc_cleanup_fd); + + return (error); +} + +/* + * outputs: + * zc_cookie cleared events count + */ +static int +zfs_ioc_events_clear(zfs_cmd_t *zc) +{ + int count; + + zfs_zevent_drain_all(&count); + zc->zc_cookie = count; + + return (0); +} + +/* + * inputs: + * zc_guid eid | ZEVENT_SEEK_START | ZEVENT_SEEK_END + * zc_cleanup zevent file descriptor + */ +static int +zfs_ioc_events_seek(zfs_cmd_t *zc) +{ + zfs_zevent_t *ze; + minor_t minor; + int error; + + error = zfs_zevent_fd_hold(zc->zc_cleanup_fd, &minor, &ze); + if (error != 0) + return (error); + + error = zfs_zevent_seek(ze, zc->zc_guid); + zfs_zevent_fd_rele(zc->zc_cleanup_fd); + + return (error); +} + +/* + * inputs: + * zc_name name of new filesystem or snapshot + * zc_value full name of old snapshot + * + * outputs: + * zc_cookie space in bytes + * zc_objset_type compressed space in bytes + * zc_perm_action uncompressed space in bytes + */ +static int +zfs_ioc_space_written(zfs_cmd_t *zc) +{ + int error; + dsl_pool_t *dp; + dsl_dataset_t *new, *old; + + error = dsl_pool_hold(zc->zc_name, FTAG, &dp); + if (error != 0) + return (error); + error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &new); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + error = dsl_dataset_hold(dp, zc->zc_value, FTAG, &old); + if (error != 0) { + dsl_dataset_rele(new, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + + error = dsl_dataset_space_written(old, new, &zc->zc_cookie, + &zc->zc_objset_type, &zc->zc_perm_action); + dsl_dataset_rele(old, FTAG); + dsl_dataset_rele(new, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); +} + +/* + * innvl: { + * "firstsnap" -> snapshot name + * } + * + * outnvl: { + * "used" -> space in bytes + * "compressed" -> compressed space in bytes + * "uncompressed" -> uncompressed space in bytes + * } + */ +static int +zfs_ioc_space_snaps(const char *lastsnap, nvlist_t *innvl, nvlist_t *outnvl) +{ + int error; + dsl_pool_t *dp; + dsl_dataset_t *new, *old; + char *firstsnap; + uint64_t used, comp, uncomp; + + if (nvlist_lookup_string(innvl, "firstsnap", &firstsnap) != 0) + return (SET_ERROR(EINVAL)); + + error = dsl_pool_hold(lastsnap, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, lastsnap, FTAG, &new); + if (error == 0 && !new->ds_is_snapshot) { + dsl_dataset_rele(new, FTAG); + error = SET_ERROR(EINVAL); + } + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + error = dsl_dataset_hold(dp, firstsnap, FTAG, &old); + if (error == 0 && !old->ds_is_snapshot) { + dsl_dataset_rele(old, FTAG); + error = SET_ERROR(EINVAL); + } + if (error != 0) { + dsl_dataset_rele(new, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); + } + + error = dsl_dataset_space_wouldfree(old, new, &used, &comp, &uncomp); + dsl_dataset_rele(old, FTAG); + dsl_dataset_rele(new, FTAG); + dsl_pool_rele(dp, FTAG); + fnvlist_add_uint64(outnvl, "used", used); + fnvlist_add_uint64(outnvl, "compressed", comp); + fnvlist_add_uint64(outnvl, "uncompressed", uncomp); + return (error); +} + +/* + * innvl: { + * "fd" -> file descriptor to write stream to (int32) + * (optional) "fromsnap" -> full snap name to send an incremental from + * (optional) "largeblockok" -> (value ignored) + * indicates that blocks > 128KB are permitted + * (optional) "embedok" -> (value ignored) + * presence indicates DRR_WRITE_EMBEDDED records are permitted + * (optional) "compressok" -> (value ignored) + * presence indicates compressed DRR_WRITE records are permitted + * (optional) "resume_object" and "resume_offset" -> (uint64) + * if present, resume send stream from specified object and offset. + * } + * + * outnvl is unused + */ +/* ARGSUSED */ +static int +zfs_ioc_send_new(const char *snapname, nvlist_t *innvl, nvlist_t *outnvl) +{ + int error; + offset_t off; + char *fromname = NULL; + int fd; + file_t *fp; + boolean_t largeblockok; + boolean_t embedok; + boolean_t compressok; + uint64_t resumeobj = 0; + uint64_t resumeoff = 0; + + error = nvlist_lookup_int32(innvl, "fd", &fd); + if (error != 0) + return (SET_ERROR(EINVAL)); + + (void) nvlist_lookup_string(innvl, "fromsnap", &fromname); + + largeblockok = nvlist_exists(innvl, "largeblockok"); + embedok = nvlist_exists(innvl, "embedok"); + compressok = nvlist_exists(innvl, "compressok"); + + (void) nvlist_lookup_uint64(innvl, "resume_object", &resumeobj); + (void) nvlist_lookup_uint64(innvl, "resume_offset", &resumeoff); + + if ((fp = getf(fd)) == NULL) + return (SET_ERROR(EBADF)); + + off = fp->f_offset; + error = dmu_send(snapname, fromname, embedok, largeblockok, compressok, + fd, resumeobj, resumeoff, fp->f_vnode, &off); + + if (VOP_SEEK(fp->f_vnode, fp->f_offset, &off, NULL) == 0) + fp->f_offset = off; + + releasef(fd); + return (error); +} + +/* + * Determine approximately how large a zfs send stream will be -- the number + * of bytes that will be written to the fd supplied to zfs_ioc_send_new(). + * + * innvl: { + * (optional) "from" -> full snap or bookmark name to send an incremental + * from + * (optional) "largeblockok" -> (value ignored) + * indicates that blocks > 128KB are permitted + * (optional) "embedok" -> (value ignored) + * presence indicates DRR_WRITE_EMBEDDED records are permitted + * (optional) "compressok" -> (value ignored) + * presence indicates compressed DRR_WRITE records are permitted + * } + * + * outnvl: { + * "space" -> bytes of space (uint64) + * } + */ +static int +zfs_ioc_send_space(const char *snapname, nvlist_t *innvl, nvlist_t *outnvl) +{ + dsl_pool_t *dp; + dsl_dataset_t *tosnap; + int error; + char *fromname; + /* LINTED E_FUNC_SET_NOT_USED */ + boolean_t largeblockok; + /* LINTED E_FUNC_SET_NOT_USED */ + boolean_t embedok; + boolean_t compressok; + uint64_t space; + + error = dsl_pool_hold(snapname, FTAG, &dp); + if (error != 0) + return (error); + + error = dsl_dataset_hold(dp, snapname, FTAG, &tosnap); + if (error != 0) { + dsl_pool_rele(dp, FTAG); + return (error); + } + + largeblockok = nvlist_exists(innvl, "largeblockok"); + embedok = nvlist_exists(innvl, "embedok"); + compressok = nvlist_exists(innvl, "compressok"); + + error = nvlist_lookup_string(innvl, "from", &fromname); + if (error == 0) { + if (strchr(fromname, '@') != NULL) { + /* + * If from is a snapshot, hold it and use the more + * efficient dmu_send_estimate to estimate send space + * size using deadlists. + */ + dsl_dataset_t *fromsnap; + error = dsl_dataset_hold(dp, fromname, FTAG, &fromsnap); + if (error != 0) + goto out; + error = dmu_send_estimate(tosnap, fromsnap, compressok, + &space); + dsl_dataset_rele(fromsnap, FTAG); + } else if (strchr(fromname, '#') != NULL) { + /* + * If from is a bookmark, fetch the creation TXG of the + * snapshot it was created from and use that to find + * blocks that were born after it. + */ + zfs_bookmark_phys_t frombm; + + error = dsl_bookmark_lookup(dp, fromname, tosnap, + &frombm); + if (error != 0) + goto out; + error = dmu_send_estimate_from_txg(tosnap, + frombm.zbm_creation_txg, compressok, &space); + } else { + /* + * from is not properly formatted as a snapshot or + * bookmark + */ + error = SET_ERROR(EINVAL); + goto out; + } + } else { + // If estimating the size of a full send, use dmu_send_estimate + error = dmu_send_estimate(tosnap, NULL, compressok, &space); + } + + fnvlist_add_uint64(outnvl, "space", space); + +out: + dsl_dataset_rele(tosnap, FTAG); + dsl_pool_rele(dp, FTAG); + return (error); +} + +/* + * Sync the currently open TXG to disk for the specified pool. + * This is somewhat similar to 'zfs_sync()'. + * For cases that do not result in error this ioctl will wait for + * the currently open TXG to commit before returning back to the caller. + * + * innvl: { + * "force" -> when true, force uberblock update even if there is no dirty data. + * In addition this will cause the vdev configuration to be written + * out including updating the zpool cache file. (boolean_t) + * } + * + * onvl is unused + */ +/* ARGSUSED */ +static int +zfs_ioc_pool_sync(const char *pool, nvlist_t *innvl, nvlist_t *onvl) +{ + int err; + boolean_t force; + spa_t *spa; + + if ((err = spa_open(pool, &spa, FTAG)) != 0) + return (err); + + force = fnvlist_lookup_boolean_value(innvl, "force"); + if (force) { + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_WRITER); + vdev_config_dirty(spa->spa_root_vdev); + spa_config_exit(spa, SCL_CONFIG, FTAG); + } + txg_wait_synced(spa_get_dsl(spa), 0); + + spa_close(spa, FTAG); + + return (err); +} + +static zfs_ioc_vec_t zfs_ioc_vec[ZFS_IOC_LAST - ZFS_IOC_FIRST]; + +static void +zfs_ioctl_register_legacy(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func, + zfs_secpolicy_func_t *secpolicy, zfs_ioc_namecheck_t namecheck, + boolean_t log_history, zfs_ioc_poolcheck_t pool_check) +{ + zfs_ioc_vec_t *vec = &zfs_ioc_vec[ioc - ZFS_IOC_FIRST]; + + ASSERT3U(ioc, >=, ZFS_IOC_FIRST); + ASSERT3U(ioc, <, ZFS_IOC_LAST); + ASSERT3P(vec->zvec_legacy_func, ==, NULL); + ASSERT3P(vec->zvec_func, ==, NULL); + + vec->zvec_legacy_func = func; + vec->zvec_secpolicy = secpolicy; + vec->zvec_namecheck = namecheck; + vec->zvec_allow_log = log_history; + vec->zvec_pool_check = pool_check; +} + +/* + * See the block comment at the beginning of this file for details on + * each argument to this function. + */ +static void +zfs_ioctl_register(const char *name, zfs_ioc_t ioc, zfs_ioc_func_t *func, + zfs_secpolicy_func_t *secpolicy, zfs_ioc_namecheck_t namecheck, + zfs_ioc_poolcheck_t pool_check, boolean_t smush_outnvlist, + boolean_t allow_log) +{ + zfs_ioc_vec_t *vec = &zfs_ioc_vec[ioc - ZFS_IOC_FIRST]; + + ASSERT3U(ioc, >=, ZFS_IOC_FIRST); + ASSERT3U(ioc, <, ZFS_IOC_LAST); + ASSERT3P(vec->zvec_legacy_func, ==, NULL); + ASSERT3P(vec->zvec_func, ==, NULL); + + /* if we are logging, the name must be valid */ + ASSERT(!allow_log || namecheck != NO_NAME); + + vec->zvec_name = name; + vec->zvec_func = func; + vec->zvec_secpolicy = secpolicy; + vec->zvec_namecheck = namecheck; + vec->zvec_pool_check = pool_check; + vec->zvec_smush_outnvlist = smush_outnvlist; + vec->zvec_allow_log = allow_log; +} + +static void +zfs_ioctl_register_pool(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func, + zfs_secpolicy_func_t *secpolicy, boolean_t log_history, + zfs_ioc_poolcheck_t pool_check) +{ + zfs_ioctl_register_legacy(ioc, func, secpolicy, + POOL_NAME, log_history, pool_check); +} + +static void +zfs_ioctl_register_dataset_nolog(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func, + zfs_secpolicy_func_t *secpolicy, zfs_ioc_poolcheck_t pool_check) +{ + zfs_ioctl_register_legacy(ioc, func, secpolicy, + DATASET_NAME, B_FALSE, pool_check); +} + +static void +zfs_ioctl_register_pool_modify(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func) +{ + zfs_ioctl_register_legacy(ioc, func, zfs_secpolicy_config, + POOL_NAME, B_TRUE, POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY); +} + +static void +zfs_ioctl_register_pool_meta(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func, + zfs_secpolicy_func_t *secpolicy) +{ + zfs_ioctl_register_legacy(ioc, func, secpolicy, + NO_NAME, B_FALSE, POOL_CHECK_NONE); +} + +static void +zfs_ioctl_register_dataset_read_secpolicy(zfs_ioc_t ioc, + zfs_ioc_legacy_func_t *func, zfs_secpolicy_func_t *secpolicy) +{ + zfs_ioctl_register_legacy(ioc, func, secpolicy, + DATASET_NAME, B_FALSE, POOL_CHECK_SUSPENDED); +} + +static void +zfs_ioctl_register_dataset_read(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func) +{ + zfs_ioctl_register_dataset_read_secpolicy(ioc, func, + zfs_secpolicy_read); +} + +static void +zfs_ioctl_register_dataset_modify(zfs_ioc_t ioc, zfs_ioc_legacy_func_t *func, + zfs_secpolicy_func_t *secpolicy) +{ + zfs_ioctl_register_legacy(ioc, func, secpolicy, + DATASET_NAME, B_TRUE, POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY); +} + +static void +zfs_ioctl_init(void) +{ + zfs_ioctl_register("snapshot", ZFS_IOC_SNAPSHOT, + zfs_ioc_snapshot, zfs_secpolicy_snapshot, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("log_history", ZFS_IOC_LOG_HISTORY, + zfs_ioc_log_history, zfs_secpolicy_log_history, NO_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_FALSE, B_FALSE); + + zfs_ioctl_register("space_snaps", ZFS_IOC_SPACE_SNAPS, + zfs_ioc_space_snaps, zfs_secpolicy_read, DATASET_NAME, + POOL_CHECK_SUSPENDED, B_FALSE, B_FALSE); + + zfs_ioctl_register("send", ZFS_IOC_SEND_NEW, + zfs_ioc_send_new, zfs_secpolicy_send_new, DATASET_NAME, + POOL_CHECK_SUSPENDED, B_FALSE, B_FALSE); + + zfs_ioctl_register("send_space", ZFS_IOC_SEND_SPACE, + zfs_ioc_send_space, zfs_secpolicy_read, DATASET_NAME, + POOL_CHECK_SUSPENDED, B_FALSE, B_FALSE); + + zfs_ioctl_register("create", ZFS_IOC_CREATE, + zfs_ioc_create, zfs_secpolicy_create_clone, DATASET_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("clone", ZFS_IOC_CLONE, + zfs_ioc_clone, zfs_secpolicy_create_clone, DATASET_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("destroy_snaps", ZFS_IOC_DESTROY_SNAPS, + zfs_ioc_destroy_snaps, zfs_secpolicy_destroy_snaps, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("hold", ZFS_IOC_HOLD, + zfs_ioc_hold, zfs_secpolicy_hold, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + zfs_ioctl_register("release", ZFS_IOC_RELEASE, + zfs_ioc_release, zfs_secpolicy_release, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("get_holds", ZFS_IOC_GET_HOLDS, + zfs_ioc_get_holds, zfs_secpolicy_read, DATASET_NAME, + POOL_CHECK_SUSPENDED, B_FALSE, B_FALSE); + + zfs_ioctl_register("rollback", ZFS_IOC_ROLLBACK, + zfs_ioc_rollback, zfs_secpolicy_rollback, DATASET_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_FALSE, B_TRUE); + + zfs_ioctl_register("bookmark", ZFS_IOC_BOOKMARK, + zfs_ioc_bookmark, zfs_secpolicy_bookmark, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("get_bookmarks", ZFS_IOC_GET_BOOKMARKS, + zfs_ioc_get_bookmarks, zfs_secpolicy_read, DATASET_NAME, + POOL_CHECK_SUSPENDED, B_FALSE, B_FALSE); + + zfs_ioctl_register("destroy_bookmarks", ZFS_IOC_DESTROY_BOOKMARKS, + zfs_ioc_destroy_bookmarks, zfs_secpolicy_destroy_bookmarks, + POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("receive", ZFS_IOC_RECV_NEW, + zfs_ioc_recv_new, zfs_secpolicy_recv_new, DATASET_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE); + + zfs_ioctl_register("sync", ZFS_IOC_POOL_SYNC, + zfs_ioc_pool_sync, zfs_secpolicy_none, POOL_NAME, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_FALSE, B_FALSE); + + /* IOCTLS that use the legacy function signature */ + + zfs_ioctl_register_legacy(ZFS_IOC_POOL_FREEZE, zfs_ioc_pool_freeze, + zfs_secpolicy_config, NO_NAME, B_FALSE, POOL_CHECK_READONLY); + + zfs_ioctl_register_pool(ZFS_IOC_POOL_CREATE, zfs_ioc_pool_create, + zfs_secpolicy_config, B_TRUE, POOL_CHECK_NONE); + zfs_ioctl_register_pool_modify(ZFS_IOC_POOL_SCAN, + zfs_ioc_pool_scan); + zfs_ioctl_register_pool_modify(ZFS_IOC_POOL_UPGRADE, + zfs_ioc_pool_upgrade); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_ADD, + zfs_ioc_vdev_add); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_REMOVE, + zfs_ioc_vdev_remove); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_SET_STATE, + zfs_ioc_vdev_set_state); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_ATTACH, + zfs_ioc_vdev_attach); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_DETACH, + zfs_ioc_vdev_detach); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_SETPATH, + zfs_ioc_vdev_setpath); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_SETFRU, + zfs_ioc_vdev_setfru); + zfs_ioctl_register_pool_modify(ZFS_IOC_POOL_SET_PROPS, + zfs_ioc_pool_set_props); + zfs_ioctl_register_pool_modify(ZFS_IOC_VDEV_SPLIT, + zfs_ioc_vdev_split); + zfs_ioctl_register_pool_modify(ZFS_IOC_POOL_REGUID, + zfs_ioc_pool_reguid); + + zfs_ioctl_register_pool_meta(ZFS_IOC_POOL_CONFIGS, + zfs_ioc_pool_configs, zfs_secpolicy_none); + zfs_ioctl_register_pool_meta(ZFS_IOC_POOL_TRYIMPORT, + zfs_ioc_pool_tryimport, zfs_secpolicy_config); + zfs_ioctl_register_pool_meta(ZFS_IOC_INJECT_FAULT, + zfs_ioc_inject_fault, zfs_secpolicy_inject); + zfs_ioctl_register_pool_meta(ZFS_IOC_CLEAR_FAULT, + zfs_ioc_clear_fault, zfs_secpolicy_inject); + zfs_ioctl_register_pool_meta(ZFS_IOC_INJECT_LIST_NEXT, + zfs_ioc_inject_list_next, zfs_secpolicy_inject); + + /* + * pool destroy, and export don't log the history as part of + * zfsdev_ioctl, but rather zfs_ioc_pool_export + * does the logging of those commands. + */ + zfs_ioctl_register_pool(ZFS_IOC_POOL_DESTROY, zfs_ioc_pool_destroy, + zfs_secpolicy_config, B_FALSE, POOL_CHECK_SUSPENDED); + zfs_ioctl_register_pool(ZFS_IOC_POOL_EXPORT, zfs_ioc_pool_export, + zfs_secpolicy_config, B_FALSE, POOL_CHECK_SUSPENDED); + + zfs_ioctl_register_pool(ZFS_IOC_POOL_STATS, zfs_ioc_pool_stats, + zfs_secpolicy_read, B_FALSE, POOL_CHECK_NONE); + zfs_ioctl_register_pool(ZFS_IOC_POOL_GET_PROPS, zfs_ioc_pool_get_props, + zfs_secpolicy_read, B_FALSE, POOL_CHECK_NONE); + + zfs_ioctl_register_pool(ZFS_IOC_ERROR_LOG, zfs_ioc_error_log, + zfs_secpolicy_inject, B_FALSE, POOL_CHECK_SUSPENDED); + zfs_ioctl_register_pool(ZFS_IOC_DSOBJ_TO_DSNAME, + zfs_ioc_dsobj_to_dsname, + zfs_secpolicy_diff, B_FALSE, POOL_CHECK_SUSPENDED); + zfs_ioctl_register_pool(ZFS_IOC_POOL_GET_HISTORY, + zfs_ioc_pool_get_history, + zfs_secpolicy_config, B_FALSE, POOL_CHECK_SUSPENDED); + + zfs_ioctl_register_pool(ZFS_IOC_POOL_IMPORT, zfs_ioc_pool_import, + zfs_secpolicy_config, B_TRUE, POOL_CHECK_NONE); + + zfs_ioctl_register_pool(ZFS_IOC_CLEAR, zfs_ioc_clear, + zfs_secpolicy_config, B_TRUE, POOL_CHECK_READONLY); + zfs_ioctl_register_pool(ZFS_IOC_POOL_REOPEN, zfs_ioc_pool_reopen, + zfs_secpolicy_config, B_TRUE, POOL_CHECK_SUSPENDED); + + zfs_ioctl_register_dataset_read(ZFS_IOC_SPACE_WRITTEN, + zfs_ioc_space_written); + zfs_ioctl_register_dataset_read(ZFS_IOC_OBJSET_RECVD_PROPS, + zfs_ioc_objset_recvd_props); + zfs_ioctl_register_dataset_read(ZFS_IOC_NEXT_OBJ, + zfs_ioc_next_obj); + zfs_ioctl_register_dataset_read(ZFS_IOC_GET_FSACL, + zfs_ioc_get_fsacl); + zfs_ioctl_register_dataset_read(ZFS_IOC_OBJSET_STATS, + zfs_ioc_objset_stats); + zfs_ioctl_register_dataset_read(ZFS_IOC_OBJSET_ZPLPROPS, + zfs_ioc_objset_zplprops); + zfs_ioctl_register_dataset_read(ZFS_IOC_DATASET_LIST_NEXT, + zfs_ioc_dataset_list_next); + zfs_ioctl_register_dataset_read(ZFS_IOC_SNAPSHOT_LIST_NEXT, + zfs_ioc_snapshot_list_next); + zfs_ioctl_register_dataset_read(ZFS_IOC_SEND_PROGRESS, + zfs_ioc_send_progress); + + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_DIFF, + zfs_ioc_diff, zfs_secpolicy_diff); + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_OBJ_TO_STATS, + zfs_ioc_obj_to_stats, zfs_secpolicy_diff); + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_OBJ_TO_PATH, + zfs_ioc_obj_to_path, zfs_secpolicy_diff); + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_USERSPACE_ONE, + zfs_ioc_userspace_one, zfs_secpolicy_userspace_one); + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_USERSPACE_MANY, + zfs_ioc_userspace_many, zfs_secpolicy_userspace_many); + zfs_ioctl_register_dataset_read_secpolicy(ZFS_IOC_SEND, + zfs_ioc_send, zfs_secpolicy_send); + + zfs_ioctl_register_dataset_modify(ZFS_IOC_SET_PROP, zfs_ioc_set_prop, + zfs_secpolicy_none); + zfs_ioctl_register_dataset_modify(ZFS_IOC_DESTROY, zfs_ioc_destroy, + zfs_secpolicy_destroy); + zfs_ioctl_register_dataset_modify(ZFS_IOC_RENAME, zfs_ioc_rename, + zfs_secpolicy_rename); + zfs_ioctl_register_dataset_modify(ZFS_IOC_RECV, zfs_ioc_recv, + zfs_secpolicy_recv); + zfs_ioctl_register_dataset_modify(ZFS_IOC_PROMOTE, zfs_ioc_promote, + zfs_secpolicy_promote); + zfs_ioctl_register_dataset_modify(ZFS_IOC_INHERIT_PROP, + zfs_ioc_inherit_prop, zfs_secpolicy_inherit_prop); + zfs_ioctl_register_dataset_modify(ZFS_IOC_SET_FSACL, zfs_ioc_set_fsacl, + zfs_secpolicy_set_fsacl); + + zfs_ioctl_register_dataset_nolog(ZFS_IOC_SHARE, zfs_ioc_share, + zfs_secpolicy_share, POOL_CHECK_NONE); + zfs_ioctl_register_dataset_nolog(ZFS_IOC_SMB_ACL, zfs_ioc_smb_acl, + zfs_secpolicy_smb_acl, POOL_CHECK_NONE); + zfs_ioctl_register_dataset_nolog(ZFS_IOC_USERSPACE_UPGRADE, + zfs_ioc_userspace_upgrade, zfs_secpolicy_userspace_upgrade, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY); + zfs_ioctl_register_dataset_nolog(ZFS_IOC_TMP_SNAPSHOT, + zfs_ioc_tmp_snapshot, zfs_secpolicy_tmp_snapshot, + POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY); + + /* + * ZoL functions + */ + zfs_ioctl_register_legacy(ZFS_IOC_EVENTS_NEXT, zfs_ioc_events_next, + zfs_secpolicy_config, NO_NAME, B_FALSE, POOL_CHECK_NONE); + zfs_ioctl_register_legacy(ZFS_IOC_EVENTS_CLEAR, zfs_ioc_events_clear, + zfs_secpolicy_config, NO_NAME, B_FALSE, POOL_CHECK_NONE); + zfs_ioctl_register_legacy(ZFS_IOC_EVENTS_SEEK, zfs_ioc_events_seek, + zfs_secpolicy_config, NO_NAME, B_FALSE, POOL_CHECK_NONE); +} + +int +pool_status_check(const char *name, zfs_ioc_namecheck_t type, + zfs_ioc_poolcheck_t check) +{ + spa_t *spa; + int error; + + ASSERT(type == POOL_NAME || type == DATASET_NAME); + + if (check & POOL_CHECK_NONE) + return (0); + + error = spa_open(name, &spa, FTAG); + if (error == 0) { + if ((check & POOL_CHECK_SUSPENDED) && spa_suspended(spa)) + error = SET_ERROR(EAGAIN); + else if ((check & POOL_CHECK_READONLY) && !spa_writeable(spa)) + error = SET_ERROR(EROFS); + spa_close(spa, FTAG); + } + return (error); +} + +static void * +zfsdev_get_state_impl(minor_t minor, enum zfsdev_state_type which) +{ + zfsdev_state_t *zs; + + for (zs = zfsdev_state_list; zs != NULL; zs = zs->zs_next) { + if (zs->zs_minor == minor) { + smp_rmb(); + switch (which) { + case ZST_ONEXIT: + return (zs->zs_onexit); + case ZST_ZEVENT: + return (zs->zs_zevent); + case ZST_ALL: + return (zs); + } + } + } + + return (NULL); +} + +void * +zfsdev_get_state(minor_t minor, enum zfsdev_state_type which) +{ + void *ptr; + + ptr = zfsdev_get_state_impl(minor, which); + + return (ptr); +} + +int +zfsdev_getminor(struct file *filp, minor_t *minorp) +{ + zfsdev_state_t *zs, *fpd; + + ASSERT(filp != NULL); + ASSERT(!MUTEX_HELD(&zfsdev_state_lock)); + + fpd = filp->private_data; + if (fpd == NULL) + return (EBADF); + + mutex_enter(&zfsdev_state_lock); + + for (zs = zfsdev_state_list; zs != NULL; zs = zs->zs_next) { + + if (zs->zs_minor == -1) + continue; + + if (fpd == zs) { + *minorp = fpd->zs_minor; + mutex_exit(&zfsdev_state_lock); + return (0); + } + } + + mutex_exit(&zfsdev_state_lock); + + return (EBADF); +} + +/* + * Find a free minor number. The zfsdev_state_list is expected to + * be short since it is only a list of currently open file handles. + */ +minor_t +zfsdev_minor_alloc(void) +{ + static minor_t last_minor = 0; + minor_t m; + + ASSERT(MUTEX_HELD(&zfsdev_state_lock)); + + for (m = last_minor + 1; m != last_minor; m++) { + if (m > ZFSDEV_MAX_MINOR) + m = 1; + if (zfsdev_get_state_impl(m, ZST_ALL) == NULL) { + last_minor = m; + return (m); + } + } + + return (0); +} + +static int +zfsdev_state_init(struct file *filp) +{ + zfsdev_state_t *zs, *zsprev = NULL; + minor_t minor; + boolean_t newzs = B_FALSE; + + ASSERT(MUTEX_HELD(&zfsdev_state_lock)); + + minor = zfsdev_minor_alloc(); + if (minor == 0) + return (SET_ERROR(ENXIO)); + + for (zs = zfsdev_state_list; zs != NULL; zs = zs->zs_next) { + if (zs->zs_minor == -1) + break; + zsprev = zs; + } + + if (!zs) { + zs = kmem_zalloc(sizeof (zfsdev_state_t), KM_SLEEP); + newzs = B_TRUE; + } + + zs->zs_file = filp; + filp->private_data = zs; + + zfs_onexit_init((zfs_onexit_t **)&zs->zs_onexit); + zfs_zevent_init((zfs_zevent_t **)&zs->zs_zevent); + + + /* + * In order to provide for lock-free concurrent read access + * to the minor list in zfsdev_get_state_impl(), new entries + * must be completely written before linking them into the + * list whereas existing entries are already linked; the last + * operation must be updating zs_minor (from -1 to the new + * value). + */ + if (newzs) { + zs->zs_minor = minor; + smp_wmb(); + zsprev->zs_next = zs; + } else { + smp_wmb(); + zs->zs_minor = minor; + } + + return (0); +} + +static int +zfsdev_state_destroy(struct file *filp) +{ + zfsdev_state_t *zs; + + ASSERT(MUTEX_HELD(&zfsdev_state_lock)); + ASSERT(filp->private_data != NULL); + + zs = filp->private_data; + zs->zs_minor = -1; + zfs_onexit_destroy(zs->zs_onexit); + zfs_zevent_destroy(zs->zs_zevent); + + return (0); +} + +static int +zfsdev_open(struct inode *ino, struct file *filp) +{ + int error; + + mutex_enter(&zfsdev_state_lock); + error = zfsdev_state_init(filp); + mutex_exit(&zfsdev_state_lock); + + return (-error); +} + +static int +zfsdev_release(struct inode *ino, struct file *filp) +{ + int error; + + mutex_enter(&zfsdev_state_lock); + error = zfsdev_state_destroy(filp); + mutex_exit(&zfsdev_state_lock); + + return (-error); +} + +static long +zfsdev_ioctl(struct file *filp, unsigned cmd, unsigned long arg) +{ + zfs_cmd_t *zc; + uint_t vecnum; + int error, rc, flag = 0; + const zfs_ioc_vec_t *vec; + char *saved_poolname = NULL; + nvlist_t *innvl = NULL; + fstrans_cookie_t cookie; + + vecnum = cmd - ZFS_IOC_FIRST; + if (vecnum >= sizeof (zfs_ioc_vec) / sizeof (zfs_ioc_vec[0])) + return (-SET_ERROR(EINVAL)); + vec = &zfs_ioc_vec[vecnum]; + + /* + * The registered ioctl list may be sparse, verify that either + * a normal or legacy handler are registered. + */ + if (vec->zvec_func == NULL && vec->zvec_legacy_func == NULL) + return (-SET_ERROR(EINVAL)); + + zc = kmem_zalloc(sizeof (zfs_cmd_t), KM_SLEEP); + + error = ddi_copyin((void *)arg, zc, sizeof (zfs_cmd_t), flag); + if (error != 0) { + error = SET_ERROR(EFAULT); + goto out; + } + + zc->zc_iflags = flag & FKIOCTL; + if (zc->zc_nvlist_src_size > MAX_NVLIST_SRC_SIZE) { + /* + * Make sure the user doesn't pass in an insane value for + * zc_nvlist_src_size. We have to check, since we will end + * up allocating that much memory inside of get_nvlist(). This + * prevents a nefarious user from allocating tons of kernel + * memory. + * + * Also, we return EINVAL instead of ENOMEM here. The reason + * being that returning ENOMEM from an ioctl() has a special + * connotation; that the user's size value is too small and + * needs to be expanded to hold the nvlist. See + * zcmd_expand_dst_nvlist() for details. + */ + error = SET_ERROR(EINVAL); /* User's size too big */ + + } else if (zc->zc_nvlist_src_size != 0) { + error = get_nvlist(zc->zc_nvlist_src, zc->zc_nvlist_src_size, + zc->zc_iflags, &innvl); + if (error != 0) + goto out; + } + + /* + * Ensure that all pool/dataset names are valid before we pass down to + * the lower layers. + */ + zc->zc_name[sizeof (zc->zc_name) - 1] = '\0'; + switch (vec->zvec_namecheck) { + case POOL_NAME: + if (pool_namecheck(zc->zc_name, NULL, NULL) != 0) + error = SET_ERROR(EINVAL); + else + error = pool_status_check(zc->zc_name, + vec->zvec_namecheck, vec->zvec_pool_check); + break; + + case DATASET_NAME: + if (dataset_namecheck(zc->zc_name, NULL, NULL) != 0) + error = SET_ERROR(EINVAL); + else + error = pool_status_check(zc->zc_name, + vec->zvec_namecheck, vec->zvec_pool_check); + break; + + case NO_NAME: + break; + } + + + if (error == 0) { + cookie = spl_fstrans_mark(); + error = vec->zvec_secpolicy(zc, innvl, CRED()); + spl_fstrans_unmark(cookie); + } + + if (error != 0) + goto out; + + /* legacy ioctls can modify zc_name */ + saved_poolname = strdup(zc->zc_name); + if (saved_poolname == NULL) { + error = SET_ERROR(ENOMEM); + goto out; + } else { + saved_poolname[strcspn(saved_poolname, "/@#")] = '\0'; + } + + if (vec->zvec_func != NULL) { + nvlist_t *outnvl; + int puterror = 0; + spa_t *spa; + nvlist_t *lognv = NULL; + + ASSERT(vec->zvec_legacy_func == NULL); + + /* + * Add the innvl to the lognv before calling the func, + * in case the func changes the innvl. + */ + if (vec->zvec_allow_log) { + lognv = fnvlist_alloc(); + fnvlist_add_string(lognv, ZPOOL_HIST_IOCTL, + vec->zvec_name); + if (!nvlist_empty(innvl)) { + fnvlist_add_nvlist(lognv, ZPOOL_HIST_INPUT_NVL, + innvl); + } + } + + outnvl = fnvlist_alloc(); + cookie = spl_fstrans_mark(); + error = vec->zvec_func(zc->zc_name, innvl, outnvl); + spl_fstrans_unmark(cookie); + + if (error == 0 && vec->zvec_allow_log && + spa_open(zc->zc_name, &spa, FTAG) == 0) { + if (!nvlist_empty(outnvl)) { + fnvlist_add_nvlist(lognv, ZPOOL_HIST_OUTPUT_NVL, + outnvl); + } + (void) spa_history_log_nvl(spa, lognv); + spa_close(spa, FTAG); + } + fnvlist_free(lognv); + + if (!nvlist_empty(outnvl) || zc->zc_nvlist_dst_size != 0) { + int smusherror = 0; + if (vec->zvec_smush_outnvlist) { + smusherror = nvlist_smush(outnvl, + zc->zc_nvlist_dst_size); + } + if (smusherror == 0) + puterror = put_nvlist(zc, outnvl); + } + + if (puterror != 0) + error = puterror; + + nvlist_free(outnvl); + } else { + cookie = spl_fstrans_mark(); + error = vec->zvec_legacy_func(zc); + spl_fstrans_unmark(cookie); + } + +out: + nvlist_free(innvl); + rc = ddi_copyout(zc, (void *)arg, sizeof (zfs_cmd_t), flag); + if (error == 0 && rc != 0) + error = SET_ERROR(EFAULT); + if (error == 0 && vec->zvec_allow_log) { + char *s = tsd_get(zfs_allow_log_key); + if (s != NULL) + strfree(s); + (void) tsd_set(zfs_allow_log_key, saved_poolname); + } else { + if (saved_poolname != NULL) + strfree(saved_poolname); + } + + kmem_free(zc, sizeof (zfs_cmd_t)); + return (-error); +} + +#ifdef CONFIG_COMPAT +static long +zfsdev_compat_ioctl(struct file *filp, unsigned cmd, unsigned long arg) +{ + return (zfsdev_ioctl(filp, cmd, arg)); +} +#else +#define zfsdev_compat_ioctl NULL +#endif + +static const struct file_operations zfsdev_fops = { + .open = zfsdev_open, + .release = zfsdev_release, + .unlocked_ioctl = zfsdev_ioctl, + .compat_ioctl = zfsdev_compat_ioctl, + .owner = THIS_MODULE, +}; + +static struct miscdevice zfs_misc = { + .minor = MISC_DYNAMIC_MINOR, + .name = ZFS_DRIVER, + .fops = &zfsdev_fops, +}; + +static int +zfs_attach(void) +{ + int error; + + mutex_init(&zfsdev_state_lock, NULL, MUTEX_DEFAULT, NULL); + zfsdev_state_list = kmem_zalloc(sizeof (zfsdev_state_t), KM_SLEEP); + zfsdev_state_list->zs_minor = -1; + + error = misc_register(&zfs_misc); + if (error != 0) { + printk(KERN_INFO "ZFS: misc_register() failed %d\n", error); + return (error); + } + + return (0); +} + +static void +zfs_detach(void) +{ + zfsdev_state_t *zs, *zsprev = NULL; + + misc_deregister(&zfs_misc); + mutex_destroy(&zfsdev_state_lock); + + for (zs = zfsdev_state_list; zs != NULL; zs = zs->zs_next) { + if (zsprev) + kmem_free(zsprev, sizeof (zfsdev_state_t)); + zsprev = zs; + } + if (zsprev) + kmem_free(zsprev, sizeof (zfsdev_state_t)); +} + +static void +zfs_allow_log_destroy(void *arg) +{ + char *poolname = arg; + + if (poolname != NULL) + strfree(poolname); +} + +#ifdef DEBUG +#define ZFS_DEBUG_STR " (DEBUG mode)" +#else +#define ZFS_DEBUG_STR "" +#endif + +static int __init +_init(void) +{ + int error; + + error = -vn_set_pwd("/"); + if (error) { + printk(KERN_NOTICE + "ZFS: Warning unable to set pwd to '/': %d\n", error); + return (error); + } + + if ((error = -zvol_init()) != 0) + return (error); + + spa_init(FREAD | FWRITE); + zfs_init(); + + zfs_ioctl_init(); + + if ((error = zfs_attach()) != 0) + goto out; + + tsd_create(&zfs_fsyncer_key, NULL); + tsd_create(&rrw_tsd_key, rrw_tsd_destroy); + tsd_create(&zfs_allow_log_key, zfs_allow_log_destroy); + + printk(KERN_NOTICE "ZFS: Loaded module v%s-%s%s, " + "ZFS pool version %s, ZFS filesystem version %s\n", + ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR, + SPA_VERSION_STRING, ZPL_VERSION_STRING); +#ifndef CONFIG_FS_POSIX_ACL + printk(KERN_NOTICE "ZFS: Posix ACLs disabled by kernel\n"); +#endif /* CONFIG_FS_POSIX_ACL */ + + return (0); + +out: + zfs_fini(); + spa_fini(); + (void) zvol_fini(); + printk(KERN_NOTICE "ZFS: Failed to Load ZFS Filesystem v%s-%s%s" + ", rc = %d\n", ZFS_META_VERSION, ZFS_META_RELEASE, + ZFS_DEBUG_STR, error); + + return (error); +} + +static void __exit +_fini(void) +{ + zfs_detach(); + zfs_fini(); + spa_fini(); + zvol_fini(); + + tsd_destroy(&zfs_fsyncer_key); + tsd_destroy(&rrw_tsd_key); + tsd_destroy(&zfs_allow_log_key); + + printk(KERN_NOTICE "ZFS: Unloaded module v%s-%s%s\n", + ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR); +} + +#ifdef HAVE_SPL +module_init(_init); +module_exit(_fini); + +MODULE_DESCRIPTION("ZFS"); +MODULE_AUTHOR(ZFS_META_AUTHOR); +MODULE_LICENSE(ZFS_META_LICENSE); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); +#endif /* HAVE_SPL */ --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_log.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_log.c @@ -0,0 +1,714 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015 by Delphix. All rights reserved. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * These zfs_log_* functions must be called within a dmu tx, in one + * of 2 contexts depending on zilog->z_replay: + * + * Non replay mode + * --------------- + * We need to record the transaction so that if it is committed to + * the Intent Log then it can be replayed. An intent log transaction + * structure (itx_t) is allocated and all the information necessary to + * possibly replay the transaction is saved in it. The itx is then assigned + * a sequence number and inserted in the in-memory list anchored in the zilog. + * + * Replay mode + * ----------- + * We need to mark the intent log record as replayed in the log header. + * This is done in the same transaction as the replay so that they + * commit atomically. + */ + +int +zfs_log_create_txtype(zil_create_t type, vsecattr_t *vsecp, vattr_t *vap) +{ + int isxvattr = (vap->va_mask & ATTR_XVATTR); + switch (type) { + case Z_FILE: + if (vsecp == NULL && !isxvattr) + return (TX_CREATE); + if (vsecp && isxvattr) + return (TX_CREATE_ACL_ATTR); + if (vsecp) + return (TX_CREATE_ACL); + else + return (TX_CREATE_ATTR); + /*NOTREACHED*/ + case Z_DIR: + if (vsecp == NULL && !isxvattr) + return (TX_MKDIR); + if (vsecp && isxvattr) + return (TX_MKDIR_ACL_ATTR); + if (vsecp) + return (TX_MKDIR_ACL); + else + return (TX_MKDIR_ATTR); + case Z_XATTRDIR: + return (TX_MKXATTR); + } + ASSERT(0); + return (TX_MAX_TYPE); +} + +/* + * build up the log data necessary for logging xvattr_t + * First lr_attr_t is initialized. following the lr_attr_t + * is the mapsize and attribute bitmap copied from the xvattr_t. + * Following the bitmap and bitmapsize two 64 bit words are reserved + * for the create time which may be set. Following the create time + * records a single 64 bit integer which has the bits to set on + * replay for the xvattr. + */ +static void +zfs_log_xvattr(lr_attr_t *lrattr, xvattr_t *xvap) +{ + uint32_t *bitmap; + uint64_t *attrs; + uint64_t *crtime; + xoptattr_t *xoap; + void *scanstamp; + int i; + + xoap = xva_getxoptattr(xvap); + ASSERT(xoap); + + lrattr->lr_attr_masksize = xvap->xva_mapsize; + bitmap = &lrattr->lr_attr_bitmap; + for (i = 0; i != xvap->xva_mapsize; i++, bitmap++) { + *bitmap = xvap->xva_reqattrmap[i]; + } + + /* Now pack the attributes up in a single uint64_t */ + attrs = (uint64_t *)bitmap; + crtime = attrs + 1; + scanstamp = (caddr_t)(crtime + 2); + *attrs = 0; + if (XVA_ISSET_REQ(xvap, XAT_READONLY)) + *attrs |= (xoap->xoa_readonly == 0) ? 0 : + XAT0_READONLY; + if (XVA_ISSET_REQ(xvap, XAT_HIDDEN)) + *attrs |= (xoap->xoa_hidden == 0) ? 0 : + XAT0_HIDDEN; + if (XVA_ISSET_REQ(xvap, XAT_SYSTEM)) + *attrs |= (xoap->xoa_system == 0) ? 0 : + XAT0_SYSTEM; + if (XVA_ISSET_REQ(xvap, XAT_ARCHIVE)) + *attrs |= (xoap->xoa_archive == 0) ? 0 : + XAT0_ARCHIVE; + if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) + *attrs |= (xoap->xoa_immutable == 0) ? 0 : + XAT0_IMMUTABLE; + if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) + *attrs |= (xoap->xoa_nounlink == 0) ? 0 : + XAT0_NOUNLINK; + if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) + *attrs |= (xoap->xoa_appendonly == 0) ? 0 : + XAT0_APPENDONLY; + if (XVA_ISSET_REQ(xvap, XAT_OPAQUE)) + *attrs |= (xoap->xoa_opaque == 0) ? 0 : + XAT0_APPENDONLY; + if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) + *attrs |= (xoap->xoa_nodump == 0) ? 0 : + XAT0_NODUMP; + if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) + *attrs |= (xoap->xoa_av_quarantined == 0) ? 0 : + XAT0_AV_QUARANTINED; + if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) + *attrs |= (xoap->xoa_av_modified == 0) ? 0 : + XAT0_AV_MODIFIED; + if (XVA_ISSET_REQ(xvap, XAT_CREATETIME)) + ZFS_TIME_ENCODE(&xoap->xoa_createtime, crtime); + if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) + bcopy(xoap->xoa_av_scanstamp, scanstamp, AV_SCANSTAMP_SZ); + if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) + *attrs |= (xoap->xoa_reparse == 0) ? 0 : + XAT0_REPARSE; + if (XVA_ISSET_REQ(xvap, XAT_OFFLINE)) + *attrs |= (xoap->xoa_offline == 0) ? 0 : + XAT0_OFFLINE; + if (XVA_ISSET_REQ(xvap, XAT_SPARSE)) + *attrs |= (xoap->xoa_sparse == 0) ? 0 : + XAT0_SPARSE; +} + +static void * +zfs_log_fuid_ids(zfs_fuid_info_t *fuidp, void *start) +{ + zfs_fuid_t *zfuid; + uint64_t *fuidloc = start; + + /* First copy in the ACE FUIDs */ + for (zfuid = list_head(&fuidp->z_fuids); zfuid; + zfuid = list_next(&fuidp->z_fuids, zfuid)) { + *fuidloc++ = zfuid->z_logfuid; + } + return (fuidloc); +} + + +static void * +zfs_log_fuid_domains(zfs_fuid_info_t *fuidp, void *start) +{ + zfs_fuid_domain_t *zdomain; + + /* now copy in the domain info, if any */ + if (fuidp->z_domain_str_sz != 0) { + for (zdomain = list_head(&fuidp->z_domains); zdomain; + zdomain = list_next(&fuidp->z_domains, zdomain)) { + bcopy((void *)zdomain->z_domain, start, + strlen(zdomain->z_domain) + 1); + start = (caddr_t)start + + strlen(zdomain->z_domain) + 1; + } + } + return (start); +} + +/* + * If zp is an xattr node, check whether the xattr owner is unlinked. + * We don't want to log anything if the owner is unlinked. + */ +static int +zfs_xattr_owner_unlinked(znode_t *zp) +{ + int unlinked = 0; + znode_t *dzp; + igrab(ZTOI(zp)); + /* + * if zp is XATTR node, keep walking up via z_xattr_parent until we + * get the owner + */ + while (zp->z_pflags & ZFS_XATTR) { + ASSERT3U(zp->z_xattr_parent, !=, 0); + if (zfs_zget(ZTOZSB(zp), zp->z_xattr_parent, &dzp) != 0) { + unlinked = 1; + break; + } + iput(ZTOI(zp)); + zp = dzp; + unlinked = zp->z_unlinked; + } + iput(ZTOI(zp)); + return (unlinked); +} + +/* + * Handles TX_CREATE, TX_CREATE_ATTR, TX_MKDIR, TX_MKDIR_ATTR and + * TK_MKXATTR transactions. + * + * TX_CREATE and TX_MKDIR are standard creates, but they may have FUID + * domain information appended prior to the name. In this case the + * uid/gid in the log record will be a log centric FUID. + * + * TX_CREATE_ACL_ATTR and TX_MKDIR_ACL_ATTR handle special creates that + * may contain attributes, ACL and optional fuid information. + * + * TX_CREATE_ACL and TX_MKDIR_ACL handle special creates that specify + * and ACL and normal users/groups in the ACEs. + * + * There may be an optional xvattr attribute information similar + * to zfs_log_setattr. + * + * Also, after the file name "domain" strings may be appended. + */ +void +zfs_log_create(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name, vsecattr_t *vsecp, + zfs_fuid_info_t *fuidp, vattr_t *vap) +{ + itx_t *itx; + lr_create_t *lr; + lr_acl_create_t *lracl; + size_t aclsize = 0; + size_t xvatsize = 0; + size_t txsize; + xvattr_t *xvap = (xvattr_t *)vap; + void *end; + size_t lrsize; + size_t namesize = strlen(name) + 1; + size_t fuidsz = 0; + + if (zil_replaying(zilog, tx) || zfs_xattr_owner_unlinked(dzp)) + return; + + /* + * If we have FUIDs present then add in space for + * domains and ACE fuid's if any. + */ + if (fuidp) { + fuidsz += fuidp->z_domain_str_sz; + fuidsz += fuidp->z_fuid_cnt * sizeof (uint64_t); + } + + if (vap->va_mask & ATTR_XVATTR) + xvatsize = ZIL_XVAT_SIZE(xvap->xva_mapsize); + + if ((int)txtype == TX_CREATE_ATTR || (int)txtype == TX_MKDIR_ATTR || + (int)txtype == TX_CREATE || (int)txtype == TX_MKDIR || + (int)txtype == TX_MKXATTR) { + txsize = sizeof (*lr) + namesize + fuidsz + xvatsize; + lrsize = sizeof (*lr); + } else { + txsize = + sizeof (lr_acl_create_t) + namesize + fuidsz + + ZIL_ACE_LENGTH(aclsize) + xvatsize; + lrsize = sizeof (lr_acl_create_t); + } + + itx = zil_itx_create(txtype, txsize); + + lr = (lr_create_t *)&itx->itx_lr; + lr->lr_doid = dzp->z_id; + lr->lr_foid = zp->z_id; + /* Store dnode slot count in 8 bits above object id. */ + LR_FOID_SET_SLOTS(lr->lr_foid, zp->z_dnodesize >> DNODE_SHIFT); + lr->lr_mode = zp->z_mode; + if (!IS_EPHEMERAL(KUID_TO_SUID(ZTOI(zp)->i_uid))) { + lr->lr_uid = (uint64_t)KUID_TO_SUID(ZTOI(zp)->i_uid); + } else { + lr->lr_uid = fuidp->z_fuid_owner; + } + if (!IS_EPHEMERAL(KGID_TO_SGID(ZTOI(zp)->i_gid))) { + lr->lr_gid = (uint64_t)KGID_TO_SGID(ZTOI(zp)->i_gid); + } else { + lr->lr_gid = fuidp->z_fuid_group; + } + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(ZTOZSB(zp)), &lr->lr_gen, + sizeof (uint64_t)); + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_CRTIME(ZTOZSB(zp)), + lr->lr_crtime, sizeof (uint64_t) * 2); + + if (sa_lookup(zp->z_sa_hdl, SA_ZPL_RDEV(ZTOZSB(zp)), &lr->lr_rdev, + sizeof (lr->lr_rdev)) != 0) + lr->lr_rdev = 0; + + /* + * Fill in xvattr info if any + */ + if (vap->va_mask & ATTR_XVATTR) { + zfs_log_xvattr((lr_attr_t *)((caddr_t)lr + lrsize), xvap); + end = (caddr_t)lr + lrsize + xvatsize; + } else { + end = (caddr_t)lr + lrsize; + } + + /* Now fill in any ACL info */ + + if (vsecp) { + lracl = (lr_acl_create_t *)&itx->itx_lr; + lracl->lr_aclcnt = vsecp->vsa_aclcnt; + lracl->lr_acl_bytes = aclsize; + lracl->lr_domcnt = fuidp ? fuidp->z_domain_cnt : 0; + lracl->lr_fuidcnt = fuidp ? fuidp->z_fuid_cnt : 0; + if (vsecp->vsa_aclflags & VSA_ACE_ACLFLAGS) + lracl->lr_acl_flags = (uint64_t)vsecp->vsa_aclflags; + else + lracl->lr_acl_flags = 0; + + bcopy(vsecp->vsa_aclentp, end, aclsize); + end = (caddr_t)end + ZIL_ACE_LENGTH(aclsize); + } + + /* drop in FUID info */ + if (fuidp) { + end = zfs_log_fuid_ids(fuidp, end); + end = zfs_log_fuid_domains(fuidp, end); + } + /* + * Now place file name in log record + */ + bcopy(name, end, namesize); + + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles both TX_REMOVE and TX_RMDIR transactions. + */ +void +zfs_log_remove(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, char *name, uint64_t foid) +{ + itx_t *itx; + lr_remove_t *lr; + size_t namesize = strlen(name) + 1; + + if (zil_replaying(zilog, tx) || zfs_xattr_owner_unlinked(dzp)) + return; + + itx = zil_itx_create(txtype, sizeof (*lr) + namesize); + lr = (lr_remove_t *)&itx->itx_lr; + lr->lr_doid = dzp->z_id; + bcopy(name, (char *)(lr + 1), namesize); + + itx->itx_oid = foid; + + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles TX_LINK transactions. + */ +void +zfs_log_link(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name) +{ + itx_t *itx; + lr_link_t *lr; + size_t namesize = strlen(name) + 1; + + if (zil_replaying(zilog, tx)) + return; + + itx = zil_itx_create(txtype, sizeof (*lr) + namesize); + lr = (lr_link_t *)&itx->itx_lr; + lr->lr_doid = dzp->z_id; + lr->lr_link_obj = zp->z_id; + bcopy(name, (char *)(lr + 1), namesize); + + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles TX_SYMLINK transactions. + */ +void +zfs_log_symlink(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *dzp, znode_t *zp, char *name, char *link) +{ + itx_t *itx; + lr_create_t *lr; + size_t namesize = strlen(name) + 1; + size_t linksize = strlen(link) + 1; + + if (zil_replaying(zilog, tx)) + return; + + itx = zil_itx_create(txtype, sizeof (*lr) + namesize + linksize); + lr = (lr_create_t *)&itx->itx_lr; + lr->lr_doid = dzp->z_id; + lr->lr_foid = zp->z_id; + lr->lr_uid = KUID_TO_SUID(ZTOI(zp)->i_uid); + lr->lr_gid = KGID_TO_SGID(ZTOI(zp)->i_gid); + lr->lr_mode = zp->z_mode; + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(ZTOZSB(zp)), &lr->lr_gen, + sizeof (uint64_t)); + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_CRTIME(ZTOZSB(zp)), + lr->lr_crtime, sizeof (uint64_t) * 2); + bcopy(name, (char *)(lr + 1), namesize); + bcopy(link, (char *)(lr + 1) + namesize, linksize); + + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles TX_RENAME transactions. + */ +void +zfs_log_rename(zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, + znode_t *sdzp, char *sname, znode_t *tdzp, char *dname, znode_t *szp) +{ + itx_t *itx; + lr_rename_t *lr; + size_t snamesize = strlen(sname) + 1; + size_t dnamesize = strlen(dname) + 1; + + if (zil_replaying(zilog, tx)) + return; + + itx = zil_itx_create(txtype, sizeof (*lr) + snamesize + dnamesize); + lr = (lr_rename_t *)&itx->itx_lr; + lr->lr_sdoid = sdzp->z_id; + lr->lr_tdoid = tdzp->z_id; + bcopy(sname, (char *)(lr + 1), snamesize); + bcopy(dname, (char *)(lr + 1) + snamesize, dnamesize); + itx->itx_oid = szp->z_id; + + zil_itx_assign(zilog, itx, tx); +} + +/* + * zfs_log_write() handles TX_WRITE transactions. The specified callback is + * called as soon as the write is on stable storage (be it via a DMU sync or a + * ZIL commit). + */ +long zfs_immediate_write_sz = 32768; + +void +zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, offset_t off, ssize_t resid, int ioflag, + zil_callback_t callback, void *callback_data) +{ + uint32_t blocksize = zp->z_blksz; + itx_wr_state_t write_state; + uintptr_t fsync_cnt; + + if (zil_replaying(zilog, tx) || zp->z_unlinked || + zfs_xattr_owner_unlinked(zp)) { + if (callback != NULL) + callback(callback_data); + return; + } + + if (zilog->zl_logbias == ZFS_LOGBIAS_THROUGHPUT) + write_state = WR_INDIRECT; + else if (!spa_has_slogs(zilog->zl_spa) && + resid >= zfs_immediate_write_sz) + write_state = WR_INDIRECT; + else if (ioflag & (FSYNC | FDSYNC)) + write_state = WR_COPIED; + else + write_state = WR_NEED_COPY; + + if ((fsync_cnt = (uintptr_t)tsd_get(zfs_fsyncer_key)) != 0) { + (void) tsd_set(zfs_fsyncer_key, (void *)(fsync_cnt - 1)); + } + + while (resid) { + itx_t *itx; + lr_write_t *lr; + itx_wr_state_t wr_state = write_state; + ssize_t len = resid; + + if (wr_state == WR_COPIED && resid > ZIL_MAX_COPIED_DATA) + wr_state = WR_NEED_COPY; + else if (wr_state == WR_INDIRECT) + len = MIN(blocksize - P2PHASE(off, blocksize), resid); + + itx = zil_itx_create(txtype, sizeof (*lr) + + (wr_state == WR_COPIED ? len : 0)); + lr = (lr_write_t *)&itx->itx_lr; + if (wr_state == WR_COPIED && dmu_read(ZTOZSB(zp)->z_os, + zp->z_id, off, len, lr + 1, DMU_READ_NO_PREFETCH) != 0) { + zil_itx_destroy(itx); + itx = zil_itx_create(txtype, sizeof (*lr)); + lr = (lr_write_t *)&itx->itx_lr; + wr_state = WR_NEED_COPY; + } + + itx->itx_wr_state = wr_state; + lr->lr_foid = zp->z_id; + lr->lr_offset = off; + lr->lr_length = len; + lr->lr_blkoff = 0; + BP_ZERO(&lr->lr_blkptr); + + itx->itx_private = ZTOZSB(zp); + + if (!(ioflag & (FSYNC | FDSYNC)) && (zp->z_sync_cnt == 0) && + (fsync_cnt == 0)) + itx->itx_sync = B_FALSE; + + itx->itx_callback = callback; + itx->itx_callback_data = callback_data; + zil_itx_assign(zilog, itx, tx); + + off += len; + resid -= len; + } +} + +/* + * Handles TX_TRUNCATE transactions. + */ +void +zfs_log_truncate(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, uint64_t off, uint64_t len) +{ + itx_t *itx; + lr_truncate_t *lr; + + if (zil_replaying(zilog, tx) || zp->z_unlinked || + zfs_xattr_owner_unlinked(zp)) + return; + + itx = zil_itx_create(txtype, sizeof (*lr)); + lr = (lr_truncate_t *)&itx->itx_lr; + lr->lr_foid = zp->z_id; + lr->lr_offset = off; + lr->lr_length = len; + + itx->itx_sync = (zp->z_sync_cnt != 0); + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles TX_SETATTR transactions. + */ +void +zfs_log_setattr(zilog_t *zilog, dmu_tx_t *tx, int txtype, + znode_t *zp, vattr_t *vap, uint_t mask_applied, zfs_fuid_info_t *fuidp) +{ + itx_t *itx; + lr_setattr_t *lr; + xvattr_t *xvap = (xvattr_t *)vap; + size_t recsize = sizeof (lr_setattr_t); + void *start; + + if (zil_replaying(zilog, tx) || zp->z_unlinked) + return; + + /* + * If XVATTR set, then log record size needs to allow + * for lr_attr_t + xvattr mask, mapsize and create time + * plus actual attribute values + */ + if (vap->va_mask & ATTR_XVATTR) + recsize = sizeof (*lr) + ZIL_XVAT_SIZE(xvap->xva_mapsize); + + if (fuidp) + recsize += fuidp->z_domain_str_sz; + + itx = zil_itx_create(txtype, recsize); + lr = (lr_setattr_t *)&itx->itx_lr; + lr->lr_foid = zp->z_id; + lr->lr_mask = (uint64_t)mask_applied; + lr->lr_mode = (uint64_t)vap->va_mode; + if ((mask_applied & ATTR_UID) && IS_EPHEMERAL(vap->va_uid)) + lr->lr_uid = fuidp->z_fuid_owner; + else + lr->lr_uid = (uint64_t)vap->va_uid; + + if ((mask_applied & ATTR_GID) && IS_EPHEMERAL(vap->va_gid)) + lr->lr_gid = fuidp->z_fuid_group; + else + lr->lr_gid = (uint64_t)vap->va_gid; + + lr->lr_size = (uint64_t)vap->va_size; + ZFS_TIME_ENCODE(&vap->va_atime, lr->lr_atime); + ZFS_TIME_ENCODE(&vap->va_mtime, lr->lr_mtime); + start = (lr_setattr_t *)(lr + 1); + if (vap->va_mask & ATTR_XVATTR) { + zfs_log_xvattr((lr_attr_t *)start, xvap); + start = (caddr_t)start + ZIL_XVAT_SIZE(xvap->xva_mapsize); + } + + /* + * Now stick on domain information if any on end + */ + + if (fuidp) + (void) zfs_log_fuid_domains(fuidp, start); + + itx->itx_sync = (zp->z_sync_cnt != 0); + zil_itx_assign(zilog, itx, tx); +} + +/* + * Handles TX_ACL transactions. + */ +void +zfs_log_acl(zilog_t *zilog, dmu_tx_t *tx, znode_t *zp, + vsecattr_t *vsecp, zfs_fuid_info_t *fuidp) +{ + itx_t *itx; + lr_acl_v0_t *lrv0; + lr_acl_t *lr; + int txtype; + int lrsize; + size_t txsize; + size_t aclbytes = vsecp->vsa_aclentsz; + + if (zil_replaying(zilog, tx) || zp->z_unlinked) + return; + + txtype = (ZTOZSB(zp)->z_version < ZPL_VERSION_FUID) ? + TX_ACL_V0 : TX_ACL; + + if (txtype == TX_ACL) + lrsize = sizeof (*lr); + else + lrsize = sizeof (*lrv0); + + txsize = lrsize + + ((txtype == TX_ACL) ? ZIL_ACE_LENGTH(aclbytes) : aclbytes) + + (fuidp ? fuidp->z_domain_str_sz : 0) + + sizeof (uint64_t) * (fuidp ? fuidp->z_fuid_cnt : 0); + + itx = zil_itx_create(txtype, txsize); + + lr = (lr_acl_t *)&itx->itx_lr; + lr->lr_foid = zp->z_id; + if (txtype == TX_ACL) { + lr->lr_acl_bytes = aclbytes; + lr->lr_domcnt = fuidp ? fuidp->z_domain_cnt : 0; + lr->lr_fuidcnt = fuidp ? fuidp->z_fuid_cnt : 0; + if (vsecp->vsa_mask & VSA_ACE_ACLFLAGS) + lr->lr_acl_flags = (uint64_t)vsecp->vsa_aclflags; + else + lr->lr_acl_flags = 0; + } + lr->lr_aclcnt = (uint64_t)vsecp->vsa_aclcnt; + + if (txtype == TX_ACL_V0) { + lrv0 = (lr_acl_v0_t *)lr; + bcopy(vsecp->vsa_aclentp, (ace_t *)(lrv0 + 1), aclbytes); + } else { + void *start = (ace_t *)(lr + 1); + + bcopy(vsecp->vsa_aclentp, start, aclbytes); + + start = (caddr_t)start + ZIL_ACE_LENGTH(aclbytes); + + if (fuidp) { + start = zfs_log_fuid_ids(fuidp, start); + (void) zfs_log_fuid_domains(fuidp, start); + } + } + + itx->itx_sync = (zp->z_sync_cnt != 0); + zil_itx_assign(zilog, itx, tx); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +module_param(zfs_immediate_write_sz, long, 0644); +MODULE_PARM_DESC(zfs_immediate_write_sz, "Largest data block to write to zil"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_onexit.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_onexit.c @@ -0,0 +1,255 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ZFS kernel routines may add/delete callback routines to be invoked + * upon process exit (triggered via the close operation from the /dev/zfs + * driver). + * + * These cleanup callbacks are intended to allow for the accumulation + * of kernel state across multiple ioctls. User processes participate + * simply by opening ZFS_DEV. This causes the ZFS driver to do create + * some private data for the file descriptor and generating a unique + * minor number. The process then passes along that file descriptor to + * each ioctl that might have a cleanup operation. + * + * Consumers of the onexit routines should call zfs_onexit_fd_hold() early + * on to validate the given fd and add a reference to its file table entry. + * This allows the consumer to do its work and then add a callback, knowing + * that zfs_onexit_add_cb() won't fail with EBADF. When finished, consumers + * should call zfs_onexit_fd_rele(). + * + * A simple example is zfs_ioc_recv(), where we might create an AVL tree + * with dataset/GUID mappings and then reuse that tree on subsequent + * zfs_ioc_recv() calls. + * + * On the first zfs_ioc_recv() call, dmu_recv_stream() will kmem_alloc() + * the AVL tree and pass it along with a callback function to + * zfs_onexit_add_cb(). The zfs_onexit_add_cb() routine will register the + * callback and return an action handle. + * + * The action handle is then passed from user space to subsequent + * zfs_ioc_recv() calls, so that dmu_recv_stream() can fetch its AVL tree + * by calling zfs_onexit_cb_data() with the device minor number and + * action handle. + * + * If the user process exits abnormally, the callback is invoked implicitly + * as part of the driver close operation. Once the user space process is + * finished with the accumulated kernel state, it can also just call close(2) + * on the cleanup fd to trigger the cleanup callback. + */ + +void +zfs_onexit_init(zfs_onexit_t **zop) +{ + zfs_onexit_t *zo; + + zo = *zop = kmem_zalloc(sizeof (zfs_onexit_t), KM_SLEEP); + mutex_init(&zo->zo_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&zo->zo_actions, sizeof (zfs_onexit_action_node_t), + offsetof(zfs_onexit_action_node_t, za_link)); +} + +void +zfs_onexit_destroy(zfs_onexit_t *zo) +{ + zfs_onexit_action_node_t *ap; + + mutex_enter(&zo->zo_lock); + while ((ap = list_head(&zo->zo_actions)) != NULL) { + list_remove(&zo->zo_actions, ap); + mutex_exit(&zo->zo_lock); + ap->za_func(ap->za_data); + kmem_free(ap, sizeof (zfs_onexit_action_node_t)); + mutex_enter(&zo->zo_lock); + } + mutex_exit(&zo->zo_lock); + + list_destroy(&zo->zo_actions); + mutex_destroy(&zo->zo_lock); + kmem_free(zo, sizeof (zfs_onexit_t)); +} + +static int +zfs_onexit_minor_to_state(minor_t minor, zfs_onexit_t **zo) +{ + *zo = zfsdev_get_state(minor, ZST_ONEXIT); + if (*zo == NULL) + return (SET_ERROR(EBADF)); + + return (0); +} + +/* + * Consumers might need to operate by minor number instead of fd, since + * they might be running in another thread (e.g. txg_sync_thread). Callers + * of this function must call zfs_onexit_fd_rele() when they're finished + * using the minor number. + */ +int +zfs_onexit_fd_hold(int fd, minor_t *minorp) +{ + file_t *fp; + zfs_onexit_t *zo; + int error; + + fp = getf(fd); + if (fp == NULL) + return (SET_ERROR(EBADF)); + + error = zfsdev_getminor(fp->f_file, minorp); + if (error == 0) + error = zfs_onexit_minor_to_state(*minorp, &zo); + + if (error) + zfs_onexit_fd_rele(fd); + + return (error); +} + +void +zfs_onexit_fd_rele(int fd) +{ + releasef(fd); +} + +/* + * Add a callback to be invoked when the calling process exits. + */ +int +zfs_onexit_add_cb(minor_t minor, void (*func)(void *), void *data, + uint64_t *action_handle) +{ + zfs_onexit_t *zo; + zfs_onexit_action_node_t *ap; + int error; + + error = zfs_onexit_minor_to_state(minor, &zo); + if (error) + return (error); + + ap = kmem_alloc(sizeof (zfs_onexit_action_node_t), KM_SLEEP); + list_link_init(&ap->za_link); + ap->za_func = func; + ap->za_data = data; + + mutex_enter(&zo->zo_lock); + list_insert_tail(&zo->zo_actions, ap); + mutex_exit(&zo->zo_lock); + if (action_handle) + *action_handle = (uint64_t)(uintptr_t)ap; + + return (0); +} + +static zfs_onexit_action_node_t * +zfs_onexit_find_cb(zfs_onexit_t *zo, uint64_t action_handle) +{ + zfs_onexit_action_node_t *match; + zfs_onexit_action_node_t *ap; + list_t *l; + + ASSERT(MUTEX_HELD(&zo->zo_lock)); + + match = (zfs_onexit_action_node_t *)(uintptr_t)action_handle; + l = &zo->zo_actions; + for (ap = list_head(l); ap != NULL; ap = list_next(l, ap)) { + if (match == ap) + break; + } + return (ap); +} + +/* + * Delete the callback, triggering it first if 'fire' is set. + */ +int +zfs_onexit_del_cb(minor_t minor, uint64_t action_handle, boolean_t fire) +{ + zfs_onexit_t *zo; + zfs_onexit_action_node_t *ap; + int error; + + error = zfs_onexit_minor_to_state(minor, &zo); + if (error) + return (error); + + mutex_enter(&zo->zo_lock); + ap = zfs_onexit_find_cb(zo, action_handle); + if (ap != NULL) { + list_remove(&zo->zo_actions, ap); + mutex_exit(&zo->zo_lock); + if (fire) + ap->za_func(ap->za_data); + kmem_free(ap, sizeof (zfs_onexit_action_node_t)); + } else { + mutex_exit(&zo->zo_lock); + error = SET_ERROR(ENOENT); + } + + return (error); +} + +/* + * Return the data associated with this callback. This allows consumers + * of the cleanup-on-exit interfaces to stash kernel data across system + * calls, knowing that it will be cleaned up if the calling process exits. + */ +int +zfs_onexit_cb_data(minor_t minor, uint64_t action_handle, void **data) +{ + zfs_onexit_t *zo; + zfs_onexit_action_node_t *ap; + int error; + + *data = NULL; + + error = zfs_onexit_minor_to_state(minor, &zo); + if (error) + return (error); + + mutex_enter(&zo->zo_lock); + ap = zfs_onexit_find_cb(zo, action_handle); + if (ap != NULL) + *data = ap->za_data; + else + error = SET_ERROR(ENOENT); + mutex_exit(&zo->zo_lock); + + return (error); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_replay.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_replay.c @@ -0,0 +1,953 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Cyril Plisko. All rights reserved. + * Copyright (c) 2013, 2015 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Functions to replay ZFS intent log (ZIL) records + * The functions are called through a function vector (zfs_replay_vector) + * which is indexed by the transaction type. + */ + +static void +zfs_init_vattr(vattr_t *vap, uint64_t mask, uint64_t mode, + uint64_t uid, uint64_t gid, uint64_t rdev, uint64_t nodeid) +{ + bzero(vap, sizeof (*vap)); + vap->va_mask = (uint_t)mask; + vap->va_type = IFTOVT(mode); + vap->va_mode = mode; + vap->va_uid = (uid_t)(IS_EPHEMERAL(uid)) ? -1 : uid; + vap->va_gid = (gid_t)(IS_EPHEMERAL(gid)) ? -1 : gid; + vap->va_rdev = rdev; + vap->va_nodeid = nodeid; +} + +/* ARGSUSED */ +static int +zfs_replay_error(zfsvfs_t *zfsvfs, lr_t *lr, boolean_t byteswap) +{ + return (SET_ERROR(ENOTSUP)); +} + +static void +zfs_replay_xvattr(lr_attr_t *lrattr, xvattr_t *xvap) +{ + xoptattr_t *xoap = NULL; + uint64_t *attrs; + uint64_t *crtime; + uint32_t *bitmap; + void *scanstamp; + int i; + + xvap->xva_vattr.va_mask |= ATTR_XVATTR; + if ((xoap = xva_getxoptattr(xvap)) == NULL) { + xvap->xva_vattr.va_mask &= ~ATTR_XVATTR; /* shouldn't happen */ + return; + } + + ASSERT(lrattr->lr_attr_masksize == xvap->xva_mapsize); + + bitmap = &lrattr->lr_attr_bitmap; + for (i = 0; i != lrattr->lr_attr_masksize; i++, bitmap++) + xvap->xva_reqattrmap[i] = *bitmap; + + attrs = (uint64_t *)(lrattr + lrattr->lr_attr_masksize - 1); + crtime = attrs + 1; + scanstamp = (caddr_t)(crtime + 2); + + if (XVA_ISSET_REQ(xvap, XAT_HIDDEN)) + xoap->xoa_hidden = ((*attrs & XAT0_HIDDEN) != 0); + if (XVA_ISSET_REQ(xvap, XAT_SYSTEM)) + xoap->xoa_system = ((*attrs & XAT0_SYSTEM) != 0); + if (XVA_ISSET_REQ(xvap, XAT_ARCHIVE)) + xoap->xoa_archive = ((*attrs & XAT0_ARCHIVE) != 0); + if (XVA_ISSET_REQ(xvap, XAT_READONLY)) + xoap->xoa_readonly = ((*attrs & XAT0_READONLY) != 0); + if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) + xoap->xoa_immutable = ((*attrs & XAT0_IMMUTABLE) != 0); + if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) + xoap->xoa_nounlink = ((*attrs & XAT0_NOUNLINK) != 0); + if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) + xoap->xoa_appendonly = ((*attrs & XAT0_APPENDONLY) != 0); + if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) + xoap->xoa_nodump = ((*attrs & XAT0_NODUMP) != 0); + if (XVA_ISSET_REQ(xvap, XAT_OPAQUE)) + xoap->xoa_opaque = ((*attrs & XAT0_OPAQUE) != 0); + if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) + xoap->xoa_av_modified = ((*attrs & XAT0_AV_MODIFIED) != 0); + if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) + xoap->xoa_av_quarantined = + ((*attrs & XAT0_AV_QUARANTINED) != 0); + if (XVA_ISSET_REQ(xvap, XAT_CREATETIME)) + ZFS_TIME_DECODE(&xoap->xoa_createtime, crtime); + if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) + bcopy(scanstamp, xoap->xoa_av_scanstamp, AV_SCANSTAMP_SZ); + if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) + xoap->xoa_reparse = ((*attrs & XAT0_REPARSE) != 0); + if (XVA_ISSET_REQ(xvap, XAT_OFFLINE)) + xoap->xoa_offline = ((*attrs & XAT0_OFFLINE) != 0); + if (XVA_ISSET_REQ(xvap, XAT_SPARSE)) + xoap->xoa_sparse = ((*attrs & XAT0_SPARSE) != 0); +} + +static int +zfs_replay_domain_cnt(uint64_t uid, uint64_t gid) +{ + uint64_t uid_idx; + uint64_t gid_idx; + int domcnt = 0; + + uid_idx = FUID_INDEX(uid); + gid_idx = FUID_INDEX(gid); + if (uid_idx) + domcnt++; + if (gid_idx > 0 && gid_idx != uid_idx) + domcnt++; + + return (domcnt); +} + +static void * +zfs_replay_fuid_domain_common(zfs_fuid_info_t *fuid_infop, void *start, + int domcnt) +{ + int i; + + for (i = 0; i != domcnt; i++) { + fuid_infop->z_domain_table[i] = start; + start = (caddr_t)start + strlen(start) + 1; + } + + return (start); +} + +/* + * Set the uid/gid in the fuid_info structure. + */ +static void +zfs_replay_fuid_ugid(zfs_fuid_info_t *fuid_infop, uint64_t uid, uint64_t gid) +{ + /* + * If owner or group are log specific FUIDs then slurp up + * domain information and build zfs_fuid_info_t + */ + if (IS_EPHEMERAL(uid)) + fuid_infop->z_fuid_owner = uid; + + if (IS_EPHEMERAL(gid)) + fuid_infop->z_fuid_group = gid; +} + +/* + * Load fuid domains into fuid_info_t + */ +static zfs_fuid_info_t * +zfs_replay_fuid_domain(void *buf, void **end, uint64_t uid, uint64_t gid) +{ + int domcnt; + + zfs_fuid_info_t *fuid_infop; + + fuid_infop = zfs_fuid_info_alloc(); + + domcnt = zfs_replay_domain_cnt(uid, gid); + + if (domcnt == 0) + return (fuid_infop); + + fuid_infop->z_domain_table = + kmem_zalloc(domcnt * sizeof (char *), KM_SLEEP); + + zfs_replay_fuid_ugid(fuid_infop, uid, gid); + + fuid_infop->z_domain_cnt = domcnt; + *end = zfs_replay_fuid_domain_common(fuid_infop, buf, domcnt); + return (fuid_infop); +} + +/* + * load zfs_fuid_t's and fuid_domains into fuid_info_t + */ +static zfs_fuid_info_t * +zfs_replay_fuids(void *start, void **end, int idcnt, int domcnt, uint64_t uid, + uint64_t gid) +{ + uint64_t *log_fuid = (uint64_t *)start; + zfs_fuid_info_t *fuid_infop; + int i; + + fuid_infop = zfs_fuid_info_alloc(); + fuid_infop->z_domain_cnt = domcnt; + + fuid_infop->z_domain_table = + kmem_zalloc(domcnt * sizeof (char *), KM_SLEEP); + + for (i = 0; i != idcnt; i++) { + zfs_fuid_t *zfuid; + + zfuid = kmem_alloc(sizeof (zfs_fuid_t), KM_SLEEP); + zfuid->z_logfuid = *log_fuid; + zfuid->z_id = -1; + zfuid->z_domidx = 0; + list_insert_tail(&fuid_infop->z_fuids, zfuid); + log_fuid++; + } + + zfs_replay_fuid_ugid(fuid_infop, uid, gid); + + *end = zfs_replay_fuid_domain_common(fuid_infop, log_fuid, domcnt); + return (fuid_infop); +} + +static void +zfs_replay_swap_attrs(lr_attr_t *lrattr) +{ + /* swap the lr_attr structure */ + byteswap_uint32_array(lrattr, sizeof (*lrattr)); + /* swap the bitmap */ + byteswap_uint32_array(lrattr + 1, (lrattr->lr_attr_masksize - 1) * + sizeof (uint32_t)); + /* swap the attributes, create time + 64 bit word for attributes */ + byteswap_uint64_array((caddr_t)(lrattr + 1) + (sizeof (uint32_t) * + (lrattr->lr_attr_masksize - 1)), 3 * sizeof (uint64_t)); +} + +/* + * Replay file create with optional ACL, xvattr information as well + * as option FUID information. + */ +static int +zfs_replay_create_acl(zfsvfs_t *zfsvfs, + lr_acl_create_t *lracl, boolean_t byteswap) +{ + char *name = NULL; /* location determined later */ + lr_create_t *lr = (lr_create_t *)lracl; + znode_t *dzp; + struct inode *ip = NULL; + xvattr_t xva; + int vflg = 0; + vsecattr_t vsec = { 0 }; + lr_attr_t *lrattr; + void *aclstart; + void *fuidstart; + size_t xvatlen = 0; + uint64_t txtype; + uint64_t objid; + uint64_t dnodesize; + int error; + + txtype = (lr->lr_common.lrc_txtype & ~TX_CI); + if (byteswap) { + byteswap_uint64_array(lracl, sizeof (*lracl)); + if (txtype == TX_CREATE_ACL_ATTR || + txtype == TX_MKDIR_ACL_ATTR) { + lrattr = (lr_attr_t *)(caddr_t)(lracl + 1); + zfs_replay_swap_attrs(lrattr); + xvatlen = ZIL_XVAT_SIZE(lrattr->lr_attr_masksize); + } + + aclstart = (caddr_t)(lracl + 1) + xvatlen; + zfs_ace_byteswap(aclstart, lracl->lr_acl_bytes, B_FALSE); + /* swap fuids */ + if (lracl->lr_fuidcnt) { + byteswap_uint64_array((caddr_t)aclstart + + ZIL_ACE_LENGTH(lracl->lr_acl_bytes), + lracl->lr_fuidcnt * sizeof (uint64_t)); + } + } + + if ((error = zfs_zget(zfsvfs, lr->lr_doid, &dzp)) != 0) + return (error); + + objid = LR_FOID_GET_OBJ(lr->lr_foid); + dnodesize = LR_FOID_GET_SLOTS(lr->lr_foid) << DNODE_SHIFT; + + xva_init(&xva); + zfs_init_vattr(&xva.xva_vattr, ATTR_MODE | ATTR_UID | ATTR_GID, + lr->lr_mode, lr->lr_uid, lr->lr_gid, lr->lr_rdev, objid); + + /* + * All forms of zfs create (create, mkdir, mkxattrdir, symlink) + * eventually end up in zfs_mknode(), which assigns the object's + * creation time, generation number, and dnode size. The generic + * zfs_create() has no concept of these attributes, so we smuggle + * the values inside the vattr's otherwise unused va_ctime, + * va_nblocks, and va_fsid fields. + */ + ZFS_TIME_DECODE(&xva.xva_vattr.va_ctime, lr->lr_crtime); + xva.xva_vattr.va_nblocks = lr->lr_gen; + xva.xva_vattr.va_fsid = dnodesize; + + error = dmu_object_info(zfsvfs->z_os, lr->lr_foid, NULL); + if (error != ENOENT) + goto bail; + + if (lr->lr_common.lrc_txtype & TX_CI) + vflg |= FIGNORECASE; + switch (txtype) { + case TX_CREATE_ACL: + aclstart = (caddr_t)(lracl + 1); + fuidstart = (caddr_t)aclstart + + ZIL_ACE_LENGTH(lracl->lr_acl_bytes); + zfsvfs->z_fuid_replay = zfs_replay_fuids(fuidstart, + (void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt, + lr->lr_uid, lr->lr_gid); + /*FALLTHROUGH*/ + case TX_CREATE_ACL_ATTR: + if (name == NULL) { + lrattr = (lr_attr_t *)(caddr_t)(lracl + 1); + xvatlen = ZIL_XVAT_SIZE(lrattr->lr_attr_masksize); + xva.xva_vattr.va_mask |= ATTR_XVATTR; + zfs_replay_xvattr(lrattr, &xva); + } + vsec.vsa_mask = VSA_ACE | VSA_ACE_ACLFLAGS; + vsec.vsa_aclentp = (caddr_t)(lracl + 1) + xvatlen; + vsec.vsa_aclcnt = lracl->lr_aclcnt; + vsec.vsa_aclentsz = lracl->lr_acl_bytes; + vsec.vsa_aclflags = lracl->lr_acl_flags; + if (zfsvfs->z_fuid_replay == NULL) { + fuidstart = (caddr_t)(lracl + 1) + xvatlen + + ZIL_ACE_LENGTH(lracl->lr_acl_bytes); + zfsvfs->z_fuid_replay = + zfs_replay_fuids(fuidstart, + (void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt, + lr->lr_uid, lr->lr_gid); + } + + error = zfs_create(ZTOI(dzp), name, &xva.xva_vattr, + 0, 0, &ip, kcred, vflg, &vsec); + break; + case TX_MKDIR_ACL: + aclstart = (caddr_t)(lracl + 1); + fuidstart = (caddr_t)aclstart + + ZIL_ACE_LENGTH(lracl->lr_acl_bytes); + zfsvfs->z_fuid_replay = zfs_replay_fuids(fuidstart, + (void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt, + lr->lr_uid, lr->lr_gid); + /*FALLTHROUGH*/ + case TX_MKDIR_ACL_ATTR: + if (name == NULL) { + lrattr = (lr_attr_t *)(caddr_t)(lracl + 1); + xvatlen = ZIL_XVAT_SIZE(lrattr->lr_attr_masksize); + zfs_replay_xvattr(lrattr, &xva); + } + vsec.vsa_mask = VSA_ACE | VSA_ACE_ACLFLAGS; + vsec.vsa_aclentp = (caddr_t)(lracl + 1) + xvatlen; + vsec.vsa_aclcnt = lracl->lr_aclcnt; + vsec.vsa_aclentsz = lracl->lr_acl_bytes; + vsec.vsa_aclflags = lracl->lr_acl_flags; + if (zfsvfs->z_fuid_replay == NULL) { + fuidstart = (caddr_t)(lracl + 1) + xvatlen + + ZIL_ACE_LENGTH(lracl->lr_acl_bytes); + zfsvfs->z_fuid_replay = + zfs_replay_fuids(fuidstart, + (void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt, + lr->lr_uid, lr->lr_gid); + } + error = zfs_mkdir(ZTOI(dzp), name, &xva.xva_vattr, + &ip, kcred, vflg, &vsec); + break; + default: + error = SET_ERROR(ENOTSUP); + } + +bail: + if (error == 0 && ip != NULL) + iput(ip); + + iput(ZTOI(dzp)); + + if (zfsvfs->z_fuid_replay) + zfs_fuid_info_free(zfsvfs->z_fuid_replay); + zfsvfs->z_fuid_replay = NULL; + + return (error); +} + +static int +zfs_replay_create(zfsvfs_t *zfsvfs, lr_create_t *lr, boolean_t byteswap) +{ + char *name = NULL; /* location determined later */ + char *link; /* symlink content follows name */ + znode_t *dzp; + struct inode *ip = NULL; + xvattr_t xva; + int vflg = 0; + size_t lrsize = sizeof (lr_create_t); + lr_attr_t *lrattr; + void *start; + size_t xvatlen; + uint64_t txtype; + uint64_t objid; + uint64_t dnodesize; + int error; + + txtype = (lr->lr_common.lrc_txtype & ~TX_CI); + if (byteswap) { + byteswap_uint64_array(lr, sizeof (*lr)); + if (txtype == TX_CREATE_ATTR || txtype == TX_MKDIR_ATTR) + zfs_replay_swap_attrs((lr_attr_t *)(lr + 1)); + } + + + if ((error = zfs_zget(zfsvfs, lr->lr_doid, &dzp)) != 0) + return (error); + + objid = LR_FOID_GET_OBJ(lr->lr_foid); + dnodesize = LR_FOID_GET_SLOTS(lr->lr_foid) << DNODE_SHIFT; + + xva_init(&xva); + zfs_init_vattr(&xva.xva_vattr, ATTR_MODE | ATTR_UID | ATTR_GID, + lr->lr_mode, lr->lr_uid, lr->lr_gid, lr->lr_rdev, objid); + + /* + * All forms of zfs create (create, mkdir, mkxattrdir, symlink) + * eventually end up in zfs_mknode(), which assigns the object's + * creation time, generation number, and dnode slot count. The + * generic zfs_create() has no concept of these attributes, so + * we smuggle the values inside * the vattr's otherwise unused + * va_ctime, va_nblocks, and va_nlink fields. + */ + ZFS_TIME_DECODE(&xva.xva_vattr.va_ctime, lr->lr_crtime); + xva.xva_vattr.va_nblocks = lr->lr_gen; + xva.xva_vattr.va_fsid = dnodesize; + + error = dmu_object_info(zfsvfs->z_os, objid, NULL); + if (error != ENOENT) + goto out; + + if (lr->lr_common.lrc_txtype & TX_CI) + vflg |= FIGNORECASE; + + /* + * Symlinks don't have fuid info, and CIFS never creates + * symlinks. + * + * The _ATTR versions will grab the fuid info in their subcases. + */ + if ((int)lr->lr_common.lrc_txtype != TX_SYMLINK && + (int)lr->lr_common.lrc_txtype != TX_MKDIR_ATTR && + (int)lr->lr_common.lrc_txtype != TX_CREATE_ATTR) { + start = (lr + 1); + zfsvfs->z_fuid_replay = + zfs_replay_fuid_domain(start, &start, + lr->lr_uid, lr->lr_gid); + } + + switch (txtype) { + case TX_CREATE_ATTR: + lrattr = (lr_attr_t *)(caddr_t)(lr + 1); + xvatlen = ZIL_XVAT_SIZE(lrattr->lr_attr_masksize); + zfs_replay_xvattr((lr_attr_t *)((caddr_t)lr + lrsize), &xva); + start = (caddr_t)(lr + 1) + xvatlen; + zfsvfs->z_fuid_replay = + zfs_replay_fuid_domain(start, &start, + lr->lr_uid, lr->lr_gid); + name = (char *)start; + + /*FALLTHROUGH*/ + case TX_CREATE: + if (name == NULL) + name = (char *)start; + + error = zfs_create(ZTOI(dzp), name, &xva.xva_vattr, + 0, 0, &ip, kcred, vflg, NULL); + break; + case TX_MKDIR_ATTR: + lrattr = (lr_attr_t *)(caddr_t)(lr + 1); + xvatlen = ZIL_XVAT_SIZE(lrattr->lr_attr_masksize); + zfs_replay_xvattr((lr_attr_t *)((caddr_t)lr + lrsize), &xva); + start = (caddr_t)(lr + 1) + xvatlen; + zfsvfs->z_fuid_replay = + zfs_replay_fuid_domain(start, &start, + lr->lr_uid, lr->lr_gid); + name = (char *)start; + + /*FALLTHROUGH*/ + case TX_MKDIR: + if (name == NULL) + name = (char *)(lr + 1); + + error = zfs_mkdir(ZTOI(dzp), name, &xva.xva_vattr, + &ip, kcred, vflg, NULL); + break; + case TX_MKXATTR: + error = zfs_make_xattrdir(dzp, &xva.xva_vattr, &ip, kcred); + break; + case TX_SYMLINK: + name = (char *)(lr + 1); + link = name + strlen(name) + 1; + error = zfs_symlink(ZTOI(dzp), name, &xva.xva_vattr, + link, &ip, kcred, vflg); + break; + default: + error = SET_ERROR(ENOTSUP); + } + +out: + if (error == 0 && ip != NULL) + iput(ip); + + iput(ZTOI(dzp)); + + if (zfsvfs->z_fuid_replay) + zfs_fuid_info_free(zfsvfs->z_fuid_replay); + zfsvfs->z_fuid_replay = NULL; + return (error); +} + +static int +zfs_replay_remove(zfsvfs_t *zfsvfs, lr_remove_t *lr, boolean_t byteswap) +{ + char *name = (char *)(lr + 1); /* name follows lr_remove_t */ + znode_t *dzp; + int error; + int vflg = 0; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_doid, &dzp)) != 0) + return (error); + + if (lr->lr_common.lrc_txtype & TX_CI) + vflg |= FIGNORECASE; + + switch ((int)lr->lr_common.lrc_txtype) { + case TX_REMOVE: + error = zfs_remove(ZTOI(dzp), name, kcred, vflg); + break; + case TX_RMDIR: + error = zfs_rmdir(ZTOI(dzp), name, NULL, kcred, vflg); + break; + default: + error = SET_ERROR(ENOTSUP); + } + + iput(ZTOI(dzp)); + + return (error); +} + +static int +zfs_replay_link(zfsvfs_t *zfsvfs, lr_link_t *lr, boolean_t byteswap) +{ + char *name = (char *)(lr + 1); /* name follows lr_link_t */ + znode_t *dzp, *zp; + int error; + int vflg = 0; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_doid, &dzp)) != 0) + return (error); + + if ((error = zfs_zget(zfsvfs, lr->lr_link_obj, &zp)) != 0) { + iput(ZTOI(dzp)); + return (error); + } + + if (lr->lr_common.lrc_txtype & TX_CI) + vflg |= FIGNORECASE; + + error = zfs_link(ZTOI(dzp), ZTOI(zp), name, kcred, vflg); + + iput(ZTOI(zp)); + iput(ZTOI(dzp)); + + return (error); +} + +static int +zfs_replay_rename(zfsvfs_t *zfsvfs, lr_rename_t *lr, boolean_t byteswap) +{ + char *sname = (char *)(lr + 1); /* sname and tname follow lr_rename_t */ + char *tname = sname + strlen(sname) + 1; + znode_t *sdzp, *tdzp; + int error; + int vflg = 0; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_sdoid, &sdzp)) != 0) + return (error); + + if ((error = zfs_zget(zfsvfs, lr->lr_tdoid, &tdzp)) != 0) { + iput(ZTOI(sdzp)); + return (error); + } + + if (lr->lr_common.lrc_txtype & TX_CI) + vflg |= FIGNORECASE; + + error = zfs_rename(ZTOI(sdzp), sname, ZTOI(tdzp), tname, kcred, vflg); + + iput(ZTOI(tdzp)); + iput(ZTOI(sdzp)); + + return (error); +} + +static int +zfs_replay_write(zfsvfs_t *zfsvfs, lr_write_t *lr, boolean_t byteswap) +{ + char *data = (char *)(lr + 1); /* data follows lr_write_t */ + znode_t *zp; + int error, written; + uint64_t eod, offset, length; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) { + /* + * As we can log writes out of order, it's possible the + * file has been removed. In this case just drop the write + * and return success. + */ + if (error == ENOENT) + error = 0; + return (error); + } + + offset = lr->lr_offset; + length = lr->lr_length; + eod = offset + length; /* end of data for this write */ + + /* + * This may be a write from a dmu_sync() for a whole block, + * and may extend beyond the current end of the file. + * We can't just replay what was written for this TX_WRITE as + * a future TX_WRITE2 may extend the eof and the data for that + * write needs to be there. So we write the whole block and + * reduce the eof. This needs to be done within the single dmu + * transaction created within vn_rdwr -> zfs_write. So a possible + * new end of file is passed through in zfsvfs->z_replay_eof + */ + + zfsvfs->z_replay_eof = 0; /* 0 means don't change end of file */ + + /* If it's a dmu_sync() block, write the whole block */ + if (lr->lr_common.lrc_reclen == sizeof (lr_write_t)) { + uint64_t blocksize = BP_GET_LSIZE(&lr->lr_blkptr); + if (length < blocksize) { + offset -= offset % blocksize; + length = blocksize; + } + if (zp->z_size < eod) + zfsvfs->z_replay_eof = eod; + } + + written = zpl_write_common(ZTOI(zp), data, length, &offset, + UIO_SYSSPACE, 0, kcred); + if (written < 0) + error = -written; + else if (written < length) + error = SET_ERROR(EIO); /* short write */ + + iput(ZTOI(zp)); + zfsvfs->z_replay_eof = 0; /* safety */ + + return (error); +} + +/* + * TX_WRITE2 are only generated when dmu_sync() returns EALREADY + * meaning the pool block is already being synced. So now that we always write + * out full blocks, all we have to do is expand the eof if + * the file is grown. + */ +static int +zfs_replay_write2(zfsvfs_t *zfsvfs, lr_write_t *lr, boolean_t byteswap) +{ + znode_t *zp; + int error; + uint64_t end; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) + return (error); + +top: + end = lr->lr_offset + lr->lr_length; + if (end > zp->z_size) { + dmu_tx_t *tx = dmu_tx_create(zfsvfs->z_os); + + zp->z_size = end; + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + iput(ZTOI(zp)); + if (error == ERESTART) { + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + dmu_tx_abort(tx); + return (error); + } + (void) sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(zfsvfs), + (void *)&zp->z_size, sizeof (uint64_t), tx); + + /* Ensure the replayed seq is updated */ + (void) zil_replaying(zfsvfs->z_log, tx); + + dmu_tx_commit(tx); + } + + iput(ZTOI(zp)); + + return (error); +} + +static int +zfs_replay_truncate(zfsvfs_t *zfsvfs, lr_truncate_t *lr, boolean_t byteswap) +{ + znode_t *zp; + flock64_t fl; + int error; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) + return (error); + + bzero(&fl, sizeof (fl)); + fl.l_type = F_WRLCK; + fl.l_whence = 0; + fl.l_start = lr->lr_offset; + fl.l_len = lr->lr_length; + + error = zfs_space(ZTOI(zp), F_FREESP, &fl, FWRITE | FOFFMAX, + lr->lr_offset, kcred); + + iput(ZTOI(zp)); + + return (error); +} + +static int +zfs_replay_setattr(zfsvfs_t *zfsvfs, lr_setattr_t *lr, boolean_t byteswap) +{ + znode_t *zp; + xvattr_t xva; + vattr_t *vap = &xva.xva_vattr; + int error; + void *start; + + xva_init(&xva); + if (byteswap) { + byteswap_uint64_array(lr, sizeof (*lr)); + + if ((lr->lr_mask & ATTR_XVATTR) && + zfsvfs->z_version >= ZPL_VERSION_INITIAL) + zfs_replay_swap_attrs((lr_attr_t *)(lr + 1)); + } + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) + return (error); + + zfs_init_vattr(vap, lr->lr_mask, lr->lr_mode, + lr->lr_uid, lr->lr_gid, 0, lr->lr_foid); + + vap->va_size = lr->lr_size; + ZFS_TIME_DECODE(&vap->va_atime, lr->lr_atime); + ZFS_TIME_DECODE(&vap->va_mtime, lr->lr_mtime); + gethrestime(&vap->va_ctime); + vap->va_mask |= ATTR_CTIME; + + /* + * Fill in xvattr_t portions if necessary. + */ + + start = (lr_setattr_t *)(lr + 1); + if (vap->va_mask & ATTR_XVATTR) { + zfs_replay_xvattr((lr_attr_t *)start, &xva); + start = (caddr_t)start + + ZIL_XVAT_SIZE(((lr_attr_t *)start)->lr_attr_masksize); + } else + xva.xva_vattr.va_mask &= ~ATTR_XVATTR; + + zfsvfs->z_fuid_replay = zfs_replay_fuid_domain(start, &start, + lr->lr_uid, lr->lr_gid); + + error = zfs_setattr(ZTOI(zp), vap, 0, kcred); + + zfs_fuid_info_free(zfsvfs->z_fuid_replay); + zfsvfs->z_fuid_replay = NULL; + iput(ZTOI(zp)); + + return (error); +} + +static int +zfs_replay_acl_v0(zfsvfs_t *zfsvfs, lr_acl_v0_t *lr, boolean_t byteswap) +{ + ace_t *ace = (ace_t *)(lr + 1); /* ace array follows lr_acl_t */ + vsecattr_t vsa; + znode_t *zp; + int error; + + if (byteswap) { + byteswap_uint64_array(lr, sizeof (*lr)); + zfs_oldace_byteswap(ace, lr->lr_aclcnt); + } + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) + return (error); + + bzero(&vsa, sizeof (vsa)); + vsa.vsa_mask = VSA_ACE | VSA_ACECNT; + vsa.vsa_aclcnt = lr->lr_aclcnt; + vsa.vsa_aclentsz = sizeof (ace_t) * vsa.vsa_aclcnt; + vsa.vsa_aclflags = 0; + vsa.vsa_aclentp = ace; + + error = zfs_setsecattr(ZTOI(zp), &vsa, 0, kcred); + + iput(ZTOI(zp)); + + return (error); +} + +/* + * Replaying ACLs is complicated by FUID support. + * The log record may contain some optional data + * to be used for replaying FUID's. These pieces + * are the actual FUIDs that were created initially. + * The FUID table index may no longer be valid and + * during zfs_create() a new index may be assigned. + * Because of this the log will contain the original + * domain+rid in order to create a new FUID. + * + * The individual ACEs may contain an ephemeral uid/gid which is no + * longer valid and will need to be replaced with an actual FUID. + * + */ +static int +zfs_replay_acl(zfsvfs_t *zfsvfs, lr_acl_t *lr, boolean_t byteswap) +{ + ace_t *ace = (ace_t *)(lr + 1); + vsecattr_t vsa; + znode_t *zp; + int error; + + if (byteswap) { + byteswap_uint64_array(lr, sizeof (*lr)); + zfs_ace_byteswap(ace, lr->lr_acl_bytes, B_FALSE); + if (lr->lr_fuidcnt) { + byteswap_uint64_array((caddr_t)ace + + ZIL_ACE_LENGTH(lr->lr_acl_bytes), + lr->lr_fuidcnt * sizeof (uint64_t)); + } + } + + if ((error = zfs_zget(zfsvfs, lr->lr_foid, &zp)) != 0) + return (error); + + bzero(&vsa, sizeof (vsa)); + vsa.vsa_mask = VSA_ACE | VSA_ACECNT | VSA_ACE_ACLFLAGS; + vsa.vsa_aclcnt = lr->lr_aclcnt; + vsa.vsa_aclentp = ace; + vsa.vsa_aclentsz = lr->lr_acl_bytes; + vsa.vsa_aclflags = lr->lr_acl_flags; + + if (lr->lr_fuidcnt) { + void *fuidstart = (caddr_t)ace + + ZIL_ACE_LENGTH(lr->lr_acl_bytes); + + zfsvfs->z_fuid_replay = + zfs_replay_fuids(fuidstart, &fuidstart, + lr->lr_fuidcnt, lr->lr_domcnt, 0, 0); + } + + error = zfs_setsecattr(ZTOI(zp), &vsa, 0, kcred); + + if (zfsvfs->z_fuid_replay) + zfs_fuid_info_free(zfsvfs->z_fuid_replay); + + zfsvfs->z_fuid_replay = NULL; + iput(ZTOI(zp)); + + return (error); +} + +/* + * Callback vectors for replaying records + */ +zil_replay_func_t zfs_replay_vector[TX_MAX_TYPE] = { + (zil_replay_func_t)zfs_replay_error, /* no such type */ + (zil_replay_func_t)zfs_replay_create, /* TX_CREATE */ + (zil_replay_func_t)zfs_replay_create, /* TX_MKDIR */ + (zil_replay_func_t)zfs_replay_create, /* TX_MKXATTR */ + (zil_replay_func_t)zfs_replay_create, /* TX_SYMLINK */ + (zil_replay_func_t)zfs_replay_remove, /* TX_REMOVE */ + (zil_replay_func_t)zfs_replay_remove, /* TX_RMDIR */ + (zil_replay_func_t)zfs_replay_link, /* TX_LINK */ + (zil_replay_func_t)zfs_replay_rename, /* TX_RENAME */ + (zil_replay_func_t)zfs_replay_write, /* TX_WRITE */ + (zil_replay_func_t)zfs_replay_truncate, /* TX_TRUNCATE */ + (zil_replay_func_t)zfs_replay_setattr, /* TX_SETATTR */ + (zil_replay_func_t)zfs_replay_acl_v0, /* TX_ACL_V0 */ + (zil_replay_func_t)zfs_replay_acl, /* TX_ACL */ + (zil_replay_func_t)zfs_replay_create_acl, /* TX_CREATE_ACL */ + (zil_replay_func_t)zfs_replay_create, /* TX_CREATE_ATTR */ + (zil_replay_func_t)zfs_replay_create_acl, /* TX_CREATE_ACL_ATTR */ + (zil_replay_func_t)zfs_replay_create_acl, /* TX_MKDIR_ACL */ + (zil_replay_func_t)zfs_replay_create, /* TX_MKDIR_ATTR */ + (zil_replay_func_t)zfs_replay_create_acl, /* TX_MKDIR_ACL_ATTR */ + (zil_replay_func_t)zfs_replay_write2, /* TX_WRITE2 */ +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_rlock.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_rlock.c @@ -0,0 +1,631 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * This file contains the code to implement file range locking in + * ZFS, although there isn't much specific to ZFS (all that comes to mind is + * support for growing the blocksize). + * + * Interface + * --------- + * Defined in zfs_rlock.h but essentially: + * rl = zfs_range_lock(zp, off, len, lock_type); + * zfs_range_unlock(rl); + * zfs_range_reduce(rl, off, len); + * + * AVL tree + * -------- + * An AVL tree is used to maintain the state of the existing ranges + * that are locked for exclusive (writer) or shared (reader) use. + * The starting range offset is used for searching and sorting the tree. + * + * Common case + * ----------- + * The (hopefully) usual case is of no overlaps or contention for + * locks. On entry to zfs_lock_range() a rl_t is allocated; the tree + * searched that finds no overlap, and *this* rl_t is placed in the tree. + * + * Overlaps/Reference counting/Proxy locks + * --------------------------------------- + * The avl code only allows one node at a particular offset. Also it's very + * inefficient to search through all previous entries looking for overlaps + * (because the very 1st in the ordered list might be at offset 0 but + * cover the whole file). + * So this implementation uses reference counts and proxy range locks. + * Firstly, only reader locks use reference counts and proxy locks, + * because writer locks are exclusive. + * When a reader lock overlaps with another then a proxy lock is created + * for that range and replaces the original lock. If the overlap + * is exact then the reference count of the proxy is simply incremented. + * Otherwise, the proxy lock is split into smaller lock ranges and + * new proxy locks created for non overlapping ranges. + * The reference counts are adjusted accordingly. + * Meanwhile, the original lock is kept around (this is the callers handle) + * and its offset and length are used when releasing the lock. + * + * Thread coordination + * ------------------- + * In order to make wakeups efficient and to ensure multiple continuous + * readers on a range don't starve a writer for the same range lock, + * two condition variables are allocated in each rl_t. + * If a writer (or reader) can't get a range it initialises the writer + * (or reader) cv; sets a flag saying there's a writer (or reader) waiting; + * and waits on that cv. When a thread unlocks that range it wakes up all + * writers then all readers before destroying the lock. + * + * Append mode writes + * ------------------ + * Append mode writes need to lock a range at the end of a file. + * The offset of the end of the file is determined under the + * range locking mutex, and the lock type converted from RL_APPEND to + * RL_WRITER and the range locked. + * + * Grow block handling + * ------------------- + * ZFS supports multiple block sizes currently up to 128K. The smallest + * block size is used for the file which is grown as needed. During this + * growth all other writers and readers must be excluded. + * So if the block size needs to be grown then the whole file is + * exclusively locked, then later the caller will reduce the lock + * range to just the range to be written using zfs_reduce_range. + */ + +#include + +/* + * Check if a write lock can be grabbed, or wait and recheck until available. + */ +static void +zfs_range_lock_writer(zfs_rlock_t *zrl, rl_t *new) +{ + avl_tree_t *tree = &zrl->zr_avl; + rl_t *rl; + avl_index_t where; + uint64_t end_size; + uint64_t off = new->r_off; + uint64_t len = new->r_len; + + for (;;) { + /* + * Range locking is also used by zvol. However, for zvol, we + * don't need to append or grow blocksize, so skip that + * processing. + * + * Yes, this is ugly, and would be solved by not handling + * grow or append in range lock code. If that was done then + * we could make the range locking code generically available + * to other non-zfs consumers. + */ + if (zrl->zr_size) { /* caller is ZPL */ + /* + * If in append mode pick up the current end of file. + * This is done under z_range_lock to avoid races. + */ + if (new->r_type == RL_APPEND) + new->r_off = *zrl->zr_size; + + /* + * If we need to grow the block size then grab the whole + * file range. This is also done under z_range_lock to + * avoid races. + */ + end_size = MAX(*zrl->zr_size, new->r_off + len); + if (end_size > *zrl->zr_blksz && + (!ISP2(*zrl->zr_blksz) || + *zrl->zr_blksz < *zrl->zr_max_blksz)) { + new->r_off = 0; + new->r_len = UINT64_MAX; + } + } + + /* + * First check for the usual case of no locks + */ + if (avl_numnodes(tree) == 0) { + new->r_type = RL_WRITER; /* convert to writer */ + avl_add(tree, new); + return; + } + + /* + * Look for any locks in the range. + */ + rl = avl_find(tree, new, &where); + if (rl) + goto wait; /* already locked at same offset */ + + rl = (rl_t *)avl_nearest(tree, where, AVL_AFTER); + if (rl && (rl->r_off < new->r_off + new->r_len)) + goto wait; + + rl = (rl_t *)avl_nearest(tree, where, AVL_BEFORE); + if (rl && rl->r_off + rl->r_len > new->r_off) + goto wait; + + new->r_type = RL_WRITER; /* convert possible RL_APPEND */ + avl_insert(tree, new, where); + return; +wait: + if (!rl->r_write_wanted) { + cv_init(&rl->r_wr_cv, NULL, CV_DEFAULT, NULL); + rl->r_write_wanted = B_TRUE; + } + cv_wait(&rl->r_wr_cv, &zrl->zr_mutex); + + /* reset to original */ + new->r_off = off; + new->r_len = len; + } +} + +/* + * If this is an original (non-proxy) lock then replace it by + * a proxy and return the proxy. + */ +static rl_t * +zfs_range_proxify(avl_tree_t *tree, rl_t *rl) +{ + rl_t *proxy; + + if (rl->r_proxy) + return (rl); /* already a proxy */ + + ASSERT3U(rl->r_cnt, ==, 1); + ASSERT(rl->r_write_wanted == B_FALSE); + ASSERT(rl->r_read_wanted == B_FALSE); + avl_remove(tree, rl); + rl->r_cnt = 0; + + /* create a proxy range lock */ + proxy = kmem_alloc(sizeof (rl_t), KM_SLEEP); + proxy->r_off = rl->r_off; + proxy->r_len = rl->r_len; + proxy->r_cnt = 1; + proxy->r_type = RL_READER; + proxy->r_proxy = B_TRUE; + proxy->r_write_wanted = B_FALSE; + proxy->r_read_wanted = B_FALSE; + avl_add(tree, proxy); + + return (proxy); +} + +/* + * Split the range lock at the supplied offset + * returning the *front* proxy. + */ +static rl_t * +zfs_range_split(avl_tree_t *tree, rl_t *rl, uint64_t off) +{ + rl_t *front, *rear; + + ASSERT3U(rl->r_len, >, 1); + ASSERT3U(off, >, rl->r_off); + ASSERT3U(off, <, rl->r_off + rl->r_len); + ASSERT(rl->r_write_wanted == B_FALSE); + ASSERT(rl->r_read_wanted == B_FALSE); + + /* create the rear proxy range lock */ + rear = kmem_alloc(sizeof (rl_t), KM_SLEEP); + rear->r_off = off; + rear->r_len = rl->r_off + rl->r_len - off; + rear->r_cnt = rl->r_cnt; + rear->r_type = RL_READER; + rear->r_proxy = B_TRUE; + rear->r_write_wanted = B_FALSE; + rear->r_read_wanted = B_FALSE; + + front = zfs_range_proxify(tree, rl); + front->r_len = off - rl->r_off; + + avl_insert_here(tree, rear, front, AVL_AFTER); + return (front); +} + +/* + * Create and add a new proxy range lock for the supplied range. + */ +static void +zfs_range_new_proxy(avl_tree_t *tree, uint64_t off, uint64_t len) +{ + rl_t *rl; + + ASSERT(len); + rl = kmem_alloc(sizeof (rl_t), KM_SLEEP); + rl->r_off = off; + rl->r_len = len; + rl->r_cnt = 1; + rl->r_type = RL_READER; + rl->r_proxy = B_TRUE; + rl->r_write_wanted = B_FALSE; + rl->r_read_wanted = B_FALSE; + avl_add(tree, rl); +} + +static void +zfs_range_add_reader(avl_tree_t *tree, rl_t *new, rl_t *prev, avl_index_t where) +{ + rl_t *next; + uint64_t off = new->r_off; + uint64_t len = new->r_len; + + /* + * prev arrives either: + * - pointing to an entry at the same offset + * - pointing to the entry with the closest previous offset whose + * range may overlap with the new range + * - null, if there were no ranges starting before the new one + */ + if (prev) { + if (prev->r_off + prev->r_len <= off) { + prev = NULL; + } else if (prev->r_off != off) { + /* + * convert to proxy if needed then + * split this entry and bump ref count + */ + prev = zfs_range_split(tree, prev, off); + prev = AVL_NEXT(tree, prev); /* move to rear range */ + } + } + ASSERT((prev == NULL) || (prev->r_off == off)); + + if (prev) + next = prev; + else + next = (rl_t *)avl_nearest(tree, where, AVL_AFTER); + + if (next == NULL || off + len <= next->r_off) { + /* no overlaps, use the original new rl_t in the tree */ + avl_insert(tree, new, where); + return; + } + + if (off < next->r_off) { + /* Add a proxy for initial range before the overlap */ + zfs_range_new_proxy(tree, off, next->r_off - off); + } + + new->r_cnt = 0; /* will use proxies in tree */ + /* + * We now search forward through the ranges, until we go past the end + * of the new range. For each entry we make it a proxy if it + * isn't already, then bump its reference count. If there's any + * gaps between the ranges then we create a new proxy range. + */ + for (prev = NULL; next; prev = next, next = AVL_NEXT(tree, next)) { + if (off + len <= next->r_off) + break; + if (prev && prev->r_off + prev->r_len < next->r_off) { + /* there's a gap */ + ASSERT3U(next->r_off, >, prev->r_off + prev->r_len); + zfs_range_new_proxy(tree, prev->r_off + prev->r_len, + next->r_off - (prev->r_off + prev->r_len)); + } + if (off + len == next->r_off + next->r_len) { + /* exact overlap with end */ + next = zfs_range_proxify(tree, next); + next->r_cnt++; + return; + } + if (off + len < next->r_off + next->r_len) { + /* new range ends in the middle of this block */ + next = zfs_range_split(tree, next, off + len); + next->r_cnt++; + return; + } + ASSERT3U(off + len, >, next->r_off + next->r_len); + next = zfs_range_proxify(tree, next); + next->r_cnt++; + } + + /* Add the remaining end range. */ + zfs_range_new_proxy(tree, prev->r_off + prev->r_len, + (off + len) - (prev->r_off + prev->r_len)); +} + +/* + * Check if a reader lock can be grabbed, or wait and recheck until available. + */ +static void +zfs_range_lock_reader(zfs_rlock_t *zrl, rl_t *new) +{ + avl_tree_t *tree = &zrl->zr_avl; + rl_t *prev, *next; + avl_index_t where; + uint64_t off = new->r_off; + uint64_t len = new->r_len; + + /* + * Look for any writer locks in the range. + */ +retry: + prev = avl_find(tree, new, &where); + if (prev == NULL) + prev = (rl_t *)avl_nearest(tree, where, AVL_BEFORE); + + /* + * Check the previous range for a writer lock overlap. + */ + if (prev && (off < prev->r_off + prev->r_len)) { + if ((prev->r_type == RL_WRITER) || (prev->r_write_wanted)) { + if (!prev->r_read_wanted) { + cv_init(&prev->r_rd_cv, NULL, CV_DEFAULT, NULL); + prev->r_read_wanted = B_TRUE; + } + cv_wait(&prev->r_rd_cv, &zrl->zr_mutex); + goto retry; + } + if (off + len < prev->r_off + prev->r_len) + goto got_lock; + } + + /* + * Search through the following ranges to see if there's + * write lock any overlap. + */ + if (prev) + next = AVL_NEXT(tree, prev); + else + next = (rl_t *)avl_nearest(tree, where, AVL_AFTER); + for (; next; next = AVL_NEXT(tree, next)) { + if (off + len <= next->r_off) + goto got_lock; + if ((next->r_type == RL_WRITER) || (next->r_write_wanted)) { + if (!next->r_read_wanted) { + cv_init(&next->r_rd_cv, NULL, CV_DEFAULT, NULL); + next->r_read_wanted = B_TRUE; + } + cv_wait(&next->r_rd_cv, &zrl->zr_mutex); + goto retry; + } + if (off + len <= next->r_off + next->r_len) + goto got_lock; + } + +got_lock: + /* + * Add the read lock, which may involve splitting existing + * locks and bumping ref counts (r_cnt). + */ + zfs_range_add_reader(tree, new, prev, where); +} + +/* + * Lock a range (offset, length) as either shared (RL_READER) + * or exclusive (RL_WRITER). Returns the range lock structure + * for later unlocking or reduce range (if entire file + * previously locked as RL_WRITER). + */ +rl_t * +zfs_range_lock(zfs_rlock_t *zrl, uint64_t off, uint64_t len, rl_type_t type) +{ + rl_t *new; + + ASSERT(type == RL_READER || type == RL_WRITER || type == RL_APPEND); + + new = kmem_alloc(sizeof (rl_t), KM_SLEEP); + new->r_zrl = zrl; + new->r_off = off; + if (len + off < off) /* overflow */ + len = UINT64_MAX - off; + new->r_len = len; + new->r_cnt = 1; /* assume it's going to be in the tree */ + new->r_type = type; + new->r_proxy = B_FALSE; + new->r_write_wanted = B_FALSE; + new->r_read_wanted = B_FALSE; + + mutex_enter(&zrl->zr_mutex); + if (type == RL_READER) { + /* + * First check for the usual case of no locks + */ + if (avl_numnodes(&zrl->zr_avl) == 0) + avl_add(&zrl->zr_avl, new); + else + zfs_range_lock_reader(zrl, new); + } else /* RL_WRITER or RL_APPEND */ + zfs_range_lock_writer(zrl, new); + mutex_exit(&zrl->zr_mutex); + return (new); +} + +static void +zfs_range_free(void *arg) +{ + rl_t *rl = arg; + + if (rl->r_write_wanted) + cv_destroy(&rl->r_wr_cv); + + if (rl->r_read_wanted) + cv_destroy(&rl->r_rd_cv); + + kmem_free(rl, sizeof (rl_t)); +} + +/* + * Unlock a reader lock + */ +static void +zfs_range_unlock_reader(zfs_rlock_t *zrl, rl_t *remove, list_t *free_list) +{ + avl_tree_t *tree = &zrl->zr_avl; + rl_t *rl, *next = NULL; + uint64_t len; + + /* + * The common case is when the remove entry is in the tree + * (cnt == 1) meaning there's been no other reader locks overlapping + * with this one. Otherwise the remove entry will have been + * removed from the tree and replaced by proxies (one or + * more ranges mapping to the entire range). + */ + if (remove->r_cnt == 1) { + avl_remove(tree, remove); + + if (remove->r_write_wanted) + cv_broadcast(&remove->r_wr_cv); + + if (remove->r_read_wanted) + cv_broadcast(&remove->r_rd_cv); + + list_insert_tail(free_list, remove); + } else { + ASSERT0(remove->r_cnt); + ASSERT0(remove->r_write_wanted); + ASSERT0(remove->r_read_wanted); + /* + * Find start proxy representing this reader lock, + * then decrement ref count on all proxies + * that make up this range, freeing them as needed. + */ + rl = avl_find(tree, remove, NULL); + ASSERT(rl); + ASSERT(rl->r_cnt); + ASSERT(rl->r_type == RL_READER); + for (len = remove->r_len; len != 0; rl = next) { + len -= rl->r_len; + if (len) { + next = AVL_NEXT(tree, rl); + ASSERT(next); + ASSERT(rl->r_off + rl->r_len == next->r_off); + ASSERT(next->r_cnt); + ASSERT(next->r_type == RL_READER); + } + rl->r_cnt--; + if (rl->r_cnt == 0) { + avl_remove(tree, rl); + + if (rl->r_write_wanted) + cv_broadcast(&rl->r_wr_cv); + + if (rl->r_read_wanted) + cv_broadcast(&rl->r_rd_cv); + + list_insert_tail(free_list, rl); + } + } + + kmem_free(remove, sizeof (rl_t)); + } +} + +/* + * Unlock range and destroy range lock structure. + */ +void +zfs_range_unlock(rl_t *rl) +{ + zfs_rlock_t *zrl = rl->r_zrl; + list_t free_list; + rl_t *free_rl; + + ASSERT(rl->r_type == RL_WRITER || rl->r_type == RL_READER); + ASSERT(rl->r_cnt == 1 || rl->r_cnt == 0); + ASSERT(!rl->r_proxy); + list_create(&free_list, sizeof (rl_t), offsetof(rl_t, rl_node)); + + mutex_enter(&zrl->zr_mutex); + if (rl->r_type == RL_WRITER) { + /* writer locks can't be shared or split */ + avl_remove(&zrl->zr_avl, rl); + if (rl->r_write_wanted) + cv_broadcast(&rl->r_wr_cv); + + if (rl->r_read_wanted) + cv_broadcast(&rl->r_rd_cv); + + list_insert_tail(&free_list, rl); + } else { + /* + * lock may be shared, let zfs_range_unlock_reader() + * release the zp->z_range_lock lock and free the rl_t + */ + zfs_range_unlock_reader(zrl, rl, &free_list); + } + mutex_exit(&zrl->zr_mutex); + + while ((free_rl = list_head(&free_list)) != NULL) { + list_remove(&free_list, free_rl); + zfs_range_free(free_rl); + } + + list_destroy(&free_list); +} + +/* + * Reduce range locked as RL_WRITER from whole file to specified range. + * Asserts the whole file is exclusivly locked and so there's only one + * entry in the tree. + */ +void +zfs_range_reduce(rl_t *rl, uint64_t off, uint64_t len) +{ + zfs_rlock_t *zrl = rl->r_zrl; + + /* Ensure there are no other locks */ + ASSERT(avl_numnodes(&zrl->zr_avl) == 1); + ASSERT(rl->r_off == 0); + ASSERT(rl->r_type == RL_WRITER); + ASSERT(!rl->r_proxy); + ASSERT3U(rl->r_len, ==, UINT64_MAX); + ASSERT3U(rl->r_cnt, ==, 1); + + mutex_enter(&zrl->zr_mutex); + rl->r_off = off; + rl->r_len = len; + + if (rl->r_write_wanted) + cv_broadcast(&rl->r_wr_cv); + if (rl->r_read_wanted) + cv_broadcast(&rl->r_rd_cv); + + mutex_exit(&zrl->zr_mutex); +} + +/* + * AVL comparison function used to order range locks + * Locks are ordered on the start offset of the range. + */ +int +zfs_range_compare(const void *arg1, const void *arg2) +{ + const rl_t *rl1 = (const rl_t *)arg1; + const rl_t *rl2 = (const rl_t *)arg2; + + return (AVL_CMP(rl1->r_off, rl2->r_off)); +} + +#ifdef _KERNEL +EXPORT_SYMBOL(zfs_range_lock); +EXPORT_SYMBOL(zfs_range_unlock); +EXPORT_SYMBOL(zfs_range_reduce); +EXPORT_SYMBOL(zfs_range_compare); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_sa.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_sa.c @@ -0,0 +1,435 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#include +#include +#include +#include +#include + +/* + * ZPL attribute registration table. + * Order of attributes doesn't matter + * a unique value will be assigned for each + * attribute that is file system specific + * + * This is just the set of ZPL attributes that this + * version of ZFS deals with natively. The file system + * could have other attributes stored in files, but they will be + * ignored. The SA framework will preserve them, just that + * this version of ZFS won't change or delete them. + */ + +sa_attr_reg_t zfs_attr_table[ZPL_END+1] = { + {"ZPL_ATIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 0}, + {"ZPL_MTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 1}, + {"ZPL_CTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 2}, + {"ZPL_CRTIME", sizeof (uint64_t) * 2, SA_UINT64_ARRAY, 3}, + {"ZPL_GEN", sizeof (uint64_t), SA_UINT64_ARRAY, 4}, + {"ZPL_MODE", sizeof (uint64_t), SA_UINT64_ARRAY, 5}, + {"ZPL_SIZE", sizeof (uint64_t), SA_UINT64_ARRAY, 6}, + {"ZPL_PARENT", sizeof (uint64_t), SA_UINT64_ARRAY, 7}, + {"ZPL_LINKS", sizeof (uint64_t), SA_UINT64_ARRAY, 8}, + {"ZPL_XATTR", sizeof (uint64_t), SA_UINT64_ARRAY, 9}, + {"ZPL_RDEV", sizeof (uint64_t), SA_UINT64_ARRAY, 10}, + {"ZPL_FLAGS", sizeof (uint64_t), SA_UINT64_ARRAY, 11}, + {"ZPL_UID", sizeof (uint64_t), SA_UINT64_ARRAY, 12}, + {"ZPL_GID", sizeof (uint64_t), SA_UINT64_ARRAY, 13}, + {"ZPL_PAD", sizeof (uint64_t) * 4, SA_UINT64_ARRAY, 14}, + {"ZPL_ZNODE_ACL", 88, SA_UINT8_ARRAY, 15}, + {"ZPL_DACL_COUNT", sizeof (uint64_t), SA_UINT64_ARRAY, 0}, + {"ZPL_SYMLINK", 0, SA_UINT8_ARRAY, 0}, + {"ZPL_SCANSTAMP", 32, SA_UINT8_ARRAY, 0}, + {"ZPL_DACL_ACES", 0, SA_ACL, 0}, + {"ZPL_DXATTR", 0, SA_UINT8_ARRAY, 0}, + {NULL, 0, 0, 0} +}; + +#ifdef _KERNEL +int +zfs_sa_readlink(znode_t *zp, uio_t *uio) +{ + dmu_buf_t *db = sa_get_db(zp->z_sa_hdl); + size_t bufsz; + int error; + + bufsz = zp->z_size; + if (bufsz + ZFS_OLD_ZNODE_PHYS_SIZE <= db->db_size) { + error = uiomove((caddr_t)db->db_data + + ZFS_OLD_ZNODE_PHYS_SIZE, + MIN((size_t)bufsz, uio->uio_resid), UIO_READ, uio); + } else { + dmu_buf_t *dbp; + if ((error = dmu_buf_hold(ZTOZSB(zp)->z_os, zp->z_id, + 0, FTAG, &dbp, DMU_READ_NO_PREFETCH)) == 0) { + error = uiomove(dbp->db_data, + MIN((size_t)bufsz, uio->uio_resid), UIO_READ, uio); + dmu_buf_rele(dbp, FTAG); + } + } + return (error); +} + +void +zfs_sa_symlink(znode_t *zp, char *link, int len, dmu_tx_t *tx) +{ + dmu_buf_t *db = sa_get_db(zp->z_sa_hdl); + + if (ZFS_OLD_ZNODE_PHYS_SIZE + len <= dmu_bonus_max()) { + VERIFY0(dmu_set_bonus(db, len + ZFS_OLD_ZNODE_PHYS_SIZE, tx)); + if (len) { + bcopy(link, (caddr_t)db->db_data + + ZFS_OLD_ZNODE_PHYS_SIZE, len); + } + } else { + dmu_buf_t *dbp; + + zfs_grow_blocksize(zp, len, tx); + VERIFY0(dmu_buf_hold(ZTOZSB(zp)->z_os, zp->z_id, 0, FTAG, &dbp, + DMU_READ_NO_PREFETCH)); + + dmu_buf_will_dirty(dbp, tx); + + ASSERT3U(len, <=, dbp->db_size); + bcopy(link, dbp->db_data, len); + dmu_buf_rele(dbp, FTAG); + } +} + +void +zfs_sa_get_scanstamp(znode_t *zp, xvattr_t *xvap) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + xoptattr_t *xoap; + + ASSERT(MUTEX_HELD(&zp->z_lock)); + VERIFY((xoap = xva_getxoptattr(xvap)) != NULL); + if (zp->z_is_sa) { + if (sa_lookup(zp->z_sa_hdl, SA_ZPL_SCANSTAMP(zfsvfs), + &xoap->xoa_av_scanstamp, + sizeof (xoap->xoa_av_scanstamp)) != 0) + return; + } else { + dmu_object_info_t doi; + dmu_buf_t *db = sa_get_db(zp->z_sa_hdl); + int len; + + if (!(zp->z_pflags & ZFS_BONUS_SCANSTAMP)) + return; + + sa_object_info(zp->z_sa_hdl, &doi); + len = sizeof (xoap->xoa_av_scanstamp) + + ZFS_OLD_ZNODE_PHYS_SIZE; + + if (len <= doi.doi_bonus_size) { + (void) memcpy(xoap->xoa_av_scanstamp, + (caddr_t)db->db_data + ZFS_OLD_ZNODE_PHYS_SIZE, + sizeof (xoap->xoa_av_scanstamp)); + } + } + XVA_SET_RTN(xvap, XAT_AV_SCANSTAMP); +} + +void +zfs_sa_set_scanstamp(znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + xoptattr_t *xoap; + + ASSERT(MUTEX_HELD(&zp->z_lock)); + VERIFY((xoap = xva_getxoptattr(xvap)) != NULL); + if (zp->z_is_sa) + VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_SCANSTAMP(zfsvfs), + &xoap->xoa_av_scanstamp, + sizeof (xoap->xoa_av_scanstamp), tx)); + else { + dmu_object_info_t doi; + dmu_buf_t *db = sa_get_db(zp->z_sa_hdl); + int len; + + sa_object_info(zp->z_sa_hdl, &doi); + len = sizeof (xoap->xoa_av_scanstamp) + + ZFS_OLD_ZNODE_PHYS_SIZE; + if (len > doi.doi_bonus_size) + VERIFY(dmu_set_bonus(db, len, tx) == 0); + (void) memcpy((caddr_t)db->db_data + ZFS_OLD_ZNODE_PHYS_SIZE, + xoap->xoa_av_scanstamp, sizeof (xoap->xoa_av_scanstamp)); + + zp->z_pflags |= ZFS_BONUS_SCANSTAMP; + VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(zfsvfs), + &zp->z_pflags, sizeof (uint64_t), tx)); + } +} + +int +zfs_sa_get_xattr(znode_t *zp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + char *obj; + int size; + int error; + + ASSERT(RW_LOCK_HELD(&zp->z_xattr_lock)); + ASSERT(!zp->z_xattr_cached); + ASSERT(zp->z_is_sa); + + error = sa_size(zp->z_sa_hdl, SA_ZPL_DXATTR(zfsvfs), &size); + if (error) { + if (error == ENOENT) + return nvlist_alloc(&zp->z_xattr_cached, + NV_UNIQUE_NAME, KM_SLEEP); + else + return (error); + } + + obj = vmem_alloc(size, KM_SLEEP); + + error = sa_lookup(zp->z_sa_hdl, SA_ZPL_DXATTR(zfsvfs), obj, size); + if (error == 0) + error = nvlist_unpack(obj, size, &zp->z_xattr_cached, KM_SLEEP); + + vmem_free(obj, size); + + return (error); +} + +int +zfs_sa_set_xattr(znode_t *zp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + dmu_tx_t *tx; + char *obj; + size_t size; + int error; + + ASSERT(RW_WRITE_HELD(&zp->z_xattr_lock)); + ASSERT(zp->z_xattr_cached); + ASSERT(zp->z_is_sa); + + error = nvlist_size(zp->z_xattr_cached, &size, NV_ENCODE_XDR); + if ((error == 0) && (size > SA_ATTR_MAX_LEN)) + error = EFBIG; + if (error) + goto out; + + obj = vmem_alloc(size, KM_SLEEP); + + error = nvlist_pack(zp->z_xattr_cached, &obj, &size, + NV_ENCODE_XDR, KM_SLEEP); + if (error) + goto out_free; + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa_create(tx, size); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + } else { + int count = 0; + sa_bulk_attr_t bulk[2]; + uint64_t ctime[2]; + + zfs_tstamp_update_setup(zp, STATE_CHANGED, NULL, ctime); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_DXATTR(zfsvfs), + NULL, obj, size); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), + NULL, &ctime, 16); + VERIFY0(sa_bulk_update(zp->z_sa_hdl, bulk, count, tx)); + + dmu_tx_commit(tx); + } +out_free: + vmem_free(obj, size); +out: + return (error); +} + +/* + * I'm not convinced we should do any of this upgrade. + * since the SA code can read both old/new znode formats + * with probably little to no performance difference. + * + * All new files will be created with the new format. + */ + +void +zfs_sa_upgrade(sa_handle_t *hdl, dmu_tx_t *tx) +{ + dmu_buf_t *db = sa_get_db(hdl); + znode_t *zp = sa_get_userdata(hdl); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + int count = 0; + sa_bulk_attr_t *bulk, *sa_attrs; + zfs_acl_locator_cb_t locate = { 0 }; + uint64_t uid, gid, mode, rdev, xattr, parent, tmp_gen; + uint64_t crtime[2], mtime[2], ctime[2], atime[2]; + uint64_t links; + zfs_acl_phys_t znode_acl; + char scanstamp[AV_SCANSTAMP_SZ]; + boolean_t drop_lock = B_FALSE; + + /* + * No upgrade if ACL isn't cached + * since we won't know which locks are held + * and ready the ACL would require special "locked" + * interfaces that would be messy + */ + if (zp->z_acl_cached == NULL || S_ISLNK(ZTOI(zp)->i_mode)) + return; + + /* + * If the z_lock is held and we aren't the owner + * the just return since we don't want to deadlock + * trying to update the status of z_is_sa. This + * file can then be upgraded at a later time. + * + * Otherwise, we know we are doing the + * sa_update() that caused us to enter this function. + */ + if (mutex_owner(&zp->z_lock) != curthread) { + if (mutex_tryenter(&zp->z_lock) == 0) + return; + else + drop_lock = B_TRUE; + } + + /* First do a bulk query of the attributes that aren't cached */ + bulk = kmem_alloc(sizeof (sa_bulk_attr_t) * 20, KM_SLEEP); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL, &atime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CRTIME(zfsvfs), NULL, &crtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), NULL, &mode, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_PARENT(zfsvfs), NULL, &parent, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_XATTR(zfsvfs), NULL, &xattr, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_RDEV(zfsvfs), NULL, &rdev, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_UID(zfsvfs), NULL, &uid, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GID(zfsvfs), NULL, &gid, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GEN(zfsvfs), NULL, &tmp_gen, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ZNODE_ACL(zfsvfs), NULL, + &znode_acl, 88); + + if (sa_bulk_lookup_locked(hdl, bulk, count) != 0) { + kmem_free(bulk, sizeof (sa_bulk_attr_t) * 20); + goto done; + } + + /* + * While the order here doesn't matter its best to try and organize + * it is such a way to pick up an already existing layout number + */ + count = 0; + sa_attrs = kmem_zalloc(sizeof (sa_bulk_attr_t) * 20, KM_SLEEP); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_MODE(zfsvfs), NULL, &mode, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_SIZE(zfsvfs), NULL, + &zp->z_size, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_GEN(zfsvfs), + NULL, &tmp_gen, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_UID(zfsvfs), NULL, &uid, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_GID(zfsvfs), NULL, &gid, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_PARENT(zfsvfs), + NULL, &parent, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_ATIME(zfsvfs), NULL, + &atime, 16); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_MTIME(zfsvfs), NULL, + &mtime, 16); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_CTIME(zfsvfs), NULL, + &ctime, 16); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_CRTIME(zfsvfs), NULL, + &crtime, 16); + links = ZTOI(zp)->i_nlink; + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_LINKS(zfsvfs), NULL, + &links, 8); + if (S_ISBLK(ZTOI(zp)->i_mode) || S_ISCHR(ZTOI(zp)->i_mode)) + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_RDEV(zfsvfs), NULL, + &rdev, 8); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_DACL_COUNT(zfsvfs), NULL, + &zp->z_acl_cached->z_acl_count, 8); + + if (zp->z_acl_cached->z_version < ZFS_ACL_VERSION_FUID) + zfs_acl_xform(zp, zp->z_acl_cached, CRED()); + + locate.cb_aclp = zp->z_acl_cached; + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_DACL_ACES(zfsvfs), + zfs_acl_data_locator, &locate, zp->z_acl_cached->z_acl_bytes); + + if (xattr) + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_XATTR(zfsvfs), + NULL, &xattr, 8); + + /* if scanstamp then add scanstamp */ + + if (zp->z_pflags & ZFS_BONUS_SCANSTAMP) { + bcopy((caddr_t)db->db_data + ZFS_OLD_ZNODE_PHYS_SIZE, + scanstamp, AV_SCANSTAMP_SZ); + SA_ADD_BULK_ATTR(sa_attrs, count, SA_ZPL_SCANSTAMP(zfsvfs), + NULL, scanstamp, AV_SCANSTAMP_SZ); + zp->z_pflags &= ~ZFS_BONUS_SCANSTAMP; + } + + VERIFY(dmu_set_bonustype(db, DMU_OT_SA, tx) == 0); + VERIFY(sa_replace_all_by_template_locked(hdl, sa_attrs, + count, tx) == 0); + if (znode_acl.z_acl_extern_obj) + VERIFY(0 == dmu_object_free(zfsvfs->z_os, + znode_acl.z_acl_extern_obj, tx)); + + zp->z_is_sa = B_TRUE; + kmem_free(sa_attrs, sizeof (sa_bulk_attr_t) * 20); + kmem_free(bulk, sizeof (sa_bulk_attr_t) * 20); +done: + if (drop_lock) + mutex_exit(&zp->z_lock); +} + +void +zfs_sa_upgrade_txholds(dmu_tx_t *tx, znode_t *zp) +{ + if (!ZTOZSB(zp)->z_use_sa || zp->z_is_sa) + return; + + + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + + if (zfs_external_acl(zp)) { + dmu_tx_hold_free(tx, zfs_external_acl(zp), 0, + DMU_OBJECT_END); + } +} + +EXPORT_SYMBOL(zfs_attr_table); +EXPORT_SYMBOL(zfs_sa_readlink); +EXPORT_SYMBOL(zfs_sa_symlink); +EXPORT_SYMBOL(zfs_sa_get_scanstamp); +EXPORT_SYMBOL(zfs_sa_set_scanstamp); +EXPORT_SYMBOL(zfs_sa_get_xattr); +EXPORT_SYMBOL(zfs_sa_set_xattr); +EXPORT_SYMBOL(zfs_sa_upgrade); +EXPORT_SYMBOL(zfs_sa_upgrade_txholds); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_vfsops.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_vfsops.c @@ -0,0 +1,2162 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fs/fs_subr.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zfs_comutil.h" + +enum { + TOKEN_RO, + TOKEN_RW, + TOKEN_SETUID, + TOKEN_NOSETUID, + TOKEN_EXEC, + TOKEN_NOEXEC, + TOKEN_DEVICES, + TOKEN_NODEVICES, + TOKEN_DIRXATTR, + TOKEN_SAXATTR, + TOKEN_XATTR, + TOKEN_NOXATTR, + TOKEN_ATIME, + TOKEN_NOATIME, + TOKEN_RELATIME, + TOKEN_NORELATIME, + TOKEN_NBMAND, + TOKEN_NONBMAND, + TOKEN_MNTPOINT, + TOKEN_LAST, +}; + +static const match_table_t zpl_tokens = { + { TOKEN_RO, MNTOPT_RO }, + { TOKEN_RW, MNTOPT_RW }, + { TOKEN_SETUID, MNTOPT_SETUID }, + { TOKEN_NOSETUID, MNTOPT_NOSETUID }, + { TOKEN_EXEC, MNTOPT_EXEC }, + { TOKEN_NOEXEC, MNTOPT_NOEXEC }, + { TOKEN_DEVICES, MNTOPT_DEVICES }, + { TOKEN_NODEVICES, MNTOPT_NODEVICES }, + { TOKEN_DIRXATTR, MNTOPT_DIRXATTR }, + { TOKEN_SAXATTR, MNTOPT_SAXATTR }, + { TOKEN_XATTR, MNTOPT_XATTR }, + { TOKEN_NOXATTR, MNTOPT_NOXATTR }, + { TOKEN_ATIME, MNTOPT_ATIME }, + { TOKEN_NOATIME, MNTOPT_NOATIME }, + { TOKEN_RELATIME, MNTOPT_RELATIME }, + { TOKEN_NORELATIME, MNTOPT_NORELATIME }, + { TOKEN_NBMAND, MNTOPT_NBMAND }, + { TOKEN_NONBMAND, MNTOPT_NONBMAND }, + { TOKEN_MNTPOINT, MNTOPT_MNTPOINT "=%s" }, + { TOKEN_LAST, NULL }, +}; + +static void +zfsvfs_vfs_free(vfs_t *vfsp) +{ + if (vfsp != NULL) { + if (vfsp->vfs_mntpoint != NULL) + strfree(vfsp->vfs_mntpoint); + + kmem_free(vfsp, sizeof (vfs_t)); + } +} + +static int +zfsvfs_parse_option(char *option, int token, substring_t *args, vfs_t *vfsp) +{ + switch (token) { + case TOKEN_RO: + vfsp->vfs_readonly = B_TRUE; + vfsp->vfs_do_readonly = B_TRUE; + break; + case TOKEN_RW: + vfsp->vfs_readonly = B_FALSE; + vfsp->vfs_do_readonly = B_TRUE; + break; + case TOKEN_SETUID: + vfsp->vfs_setuid = B_TRUE; + vfsp->vfs_do_setuid = B_TRUE; + break; + case TOKEN_NOSETUID: + vfsp->vfs_setuid = B_FALSE; + vfsp->vfs_do_setuid = B_TRUE; + break; + case TOKEN_EXEC: + vfsp->vfs_exec = B_TRUE; + vfsp->vfs_do_exec = B_TRUE; + break; + case TOKEN_NOEXEC: + vfsp->vfs_exec = B_FALSE; + vfsp->vfs_do_exec = B_TRUE; + break; + case TOKEN_DEVICES: + vfsp->vfs_devices = B_TRUE; + vfsp->vfs_do_devices = B_TRUE; + break; + case TOKEN_NODEVICES: + vfsp->vfs_devices = B_FALSE; + vfsp->vfs_do_devices = B_TRUE; + break; + case TOKEN_DIRXATTR: + vfsp->vfs_xattr = ZFS_XATTR_DIR; + vfsp->vfs_do_xattr = B_TRUE; + break; + case TOKEN_SAXATTR: + vfsp->vfs_xattr = ZFS_XATTR_SA; + vfsp->vfs_do_xattr = B_TRUE; + break; + case TOKEN_XATTR: + vfsp->vfs_xattr = ZFS_XATTR_DIR; + vfsp->vfs_do_xattr = B_TRUE; + break; + case TOKEN_NOXATTR: + vfsp->vfs_xattr = ZFS_XATTR_OFF; + vfsp->vfs_do_xattr = B_TRUE; + break; + case TOKEN_ATIME: + vfsp->vfs_atime = B_TRUE; + vfsp->vfs_do_atime = B_TRUE; + break; + case TOKEN_NOATIME: + vfsp->vfs_atime = B_FALSE; + vfsp->vfs_do_atime = B_TRUE; + break; + case TOKEN_RELATIME: + vfsp->vfs_relatime = B_TRUE; + vfsp->vfs_do_relatime = B_TRUE; + break; + case TOKEN_NORELATIME: + vfsp->vfs_relatime = B_FALSE; + vfsp->vfs_do_relatime = B_TRUE; + break; + case TOKEN_NBMAND: + vfsp->vfs_nbmand = B_TRUE; + vfsp->vfs_do_nbmand = B_TRUE; + break; + case TOKEN_NONBMAND: + vfsp->vfs_nbmand = B_FALSE; + vfsp->vfs_do_nbmand = B_TRUE; + break; + case TOKEN_MNTPOINT: + vfsp->vfs_mntpoint = match_strdup(&args[0]); + if (vfsp->vfs_mntpoint == NULL) + return (SET_ERROR(ENOMEM)); + + break; + default: + break; + } + + return (0); +} + +/* + * Parse the raw mntopts and return a vfs_t describing the options. + */ +static int +zfsvfs_parse_options(char *mntopts, vfs_t **vfsp) +{ + vfs_t *tmp_vfsp; + int error; + + tmp_vfsp = kmem_zalloc(sizeof (vfs_t), KM_SLEEP); + + if (mntopts != NULL) { + substring_t args[MAX_OPT_ARGS]; + char *tmp_mntopts, *p, *t; + int token; + + tmp_mntopts = t = strdup(mntopts); + if (tmp_mntopts == NULL) + return (SET_ERROR(ENOMEM)); + + while ((p = strsep(&t, ",")) != NULL) { + if (!*p) + continue; + + args[0].to = args[0].from = NULL; + token = match_token(p, zpl_tokens, args); + error = zfsvfs_parse_option(p, token, args, tmp_vfsp); + if (error) { + strfree(tmp_mntopts); + zfsvfs_vfs_free(tmp_vfsp); + return (error); + } + } + + strfree(tmp_mntopts); + } + + *vfsp = tmp_vfsp; + + return (0); +} + +boolean_t +zfs_is_readonly(zfsvfs_t *zfsvfs) +{ + return (!!(zfsvfs->z_sb->s_flags & MS_RDONLY)); +} + +/*ARGSUSED*/ +int +zfs_sync(struct super_block *sb, int wait, cred_t *cr) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + + /* + * Data integrity is job one. We don't want a compromised kernel + * writing to the storage pool, so we never sync during panic. + */ + if (unlikely(oops_in_progress)) + return (0); + + /* + * Semantically, the only requirement is that the sync be initiated. + * The DMU syncs out txgs frequently, so there's nothing to do. + */ + if (!wait) + return (0); + + if (zfsvfs != NULL) { + /* + * Sync a specific filesystem. + */ + dsl_pool_t *dp; + + ZFS_ENTER(zfsvfs); + dp = dmu_objset_pool(zfsvfs->z_os); + + /* + * If the system is shutting down, then skip any + * filesystems which may exist on a suspended pool. + */ + if (spa_suspended(dp->dp_spa)) { + ZFS_EXIT(zfsvfs); + return (0); + } + + if (zfsvfs->z_log != NULL) + zil_commit(zfsvfs->z_log, 0); + + ZFS_EXIT(zfsvfs); + } else { + /* + * Sync all ZFS filesystems. This is what happens when you + * run sync(1M). Unlike other filesystems, ZFS honors the + * request by waiting for all pools to commit all dirty data. + */ + spa_sync_allpools(); + } + + return (0); +} + +static void +atime_changed_cb(void *arg, uint64_t newval) +{ + ((zfsvfs_t *)arg)->z_atime = newval; +} + +static void +relatime_changed_cb(void *arg, uint64_t newval) +{ + ((zfsvfs_t *)arg)->z_relatime = newval; +} + +static void +xattr_changed_cb(void *arg, uint64_t newval) +{ + zfsvfs_t *zfsvfs = arg; + + if (newval == ZFS_XATTR_OFF) { + zfsvfs->z_flags &= ~ZSB_XATTR; + } else { + zfsvfs->z_flags |= ZSB_XATTR; + + if (newval == ZFS_XATTR_SA) + zfsvfs->z_xattr_sa = B_TRUE; + else + zfsvfs->z_xattr_sa = B_FALSE; + } +} + +static void +acltype_changed_cb(void *arg, uint64_t newval) +{ + zfsvfs_t *zfsvfs = arg; + + switch (newval) { + case ZFS_ACLTYPE_OFF: + zfsvfs->z_acl_type = ZFS_ACLTYPE_OFF; + zfsvfs->z_sb->s_flags &= ~MS_POSIXACL; + break; + case ZFS_ACLTYPE_POSIXACL: +#ifdef CONFIG_FS_POSIX_ACL + zfsvfs->z_acl_type = ZFS_ACLTYPE_POSIXACL; + zfsvfs->z_sb->s_flags |= MS_POSIXACL; +#else + zfsvfs->z_acl_type = ZFS_ACLTYPE_OFF; + zfsvfs->z_sb->s_flags &= ~MS_POSIXACL; +#endif /* CONFIG_FS_POSIX_ACL */ + break; + default: + break; + } +} + +static void +blksz_changed_cb(void *arg, uint64_t newval) +{ + zfsvfs_t *zfsvfs = arg; + ASSERT3U(newval, <=, spa_maxblocksize(dmu_objset_spa(zfsvfs->z_os))); + ASSERT3U(newval, >=, SPA_MINBLOCKSIZE); + ASSERT(ISP2(newval)); + + zfsvfs->z_max_blksz = newval; +} + +static void +readonly_changed_cb(void *arg, uint64_t newval) +{ + zfsvfs_t *zfsvfs = arg; + struct super_block *sb = zfsvfs->z_sb; + + if (sb == NULL) + return; + + if (newval) + sb->s_flags |= MS_RDONLY; + else + sb->s_flags &= ~MS_RDONLY; +} + +static void +devices_changed_cb(void *arg, uint64_t newval) +{ +} + +static void +setuid_changed_cb(void *arg, uint64_t newval) +{ +} + +static void +exec_changed_cb(void *arg, uint64_t newval) +{ +} + +static void +nbmand_changed_cb(void *arg, uint64_t newval) +{ + zfsvfs_t *zfsvfs = arg; + struct super_block *sb = zfsvfs->z_sb; + + if (sb == NULL) + return; + + if (newval == TRUE) + sb->s_flags |= MS_MANDLOCK; + else + sb->s_flags &= ~MS_MANDLOCK; +} + +static void +snapdir_changed_cb(void *arg, uint64_t newval) +{ + ((zfsvfs_t *)arg)->z_show_ctldir = newval; +} + +static void +vscan_changed_cb(void *arg, uint64_t newval) +{ + ((zfsvfs_t *)arg)->z_vscan = newval; +} + +static void +acl_inherit_changed_cb(void *arg, uint64_t newval) +{ + ((zfsvfs_t *)arg)->z_acl_inherit = newval; +} + +static int +zfs_register_callbacks(vfs_t *vfsp) +{ + struct dsl_dataset *ds = NULL; + objset_t *os = NULL; + zfsvfs_t *zfsvfs = NULL; + int error = 0; + + ASSERT(vfsp); + zfsvfs = vfsp->vfs_data; + ASSERT(zfsvfs); + os = zfsvfs->z_os; + + /* + * The act of registering our callbacks will destroy any mount + * options we may have. In order to enable temporary overrides + * of mount options, we stash away the current values and + * restore them after we register the callbacks. + */ + if (zfs_is_readonly(zfsvfs) || !spa_writeable(dmu_objset_spa(os))) { + vfsp->vfs_do_readonly = B_TRUE; + vfsp->vfs_readonly = B_TRUE; + } + + /* + * Register property callbacks. + * + * It would probably be fine to just check for i/o error from + * the first prop_register(), but I guess I like to go + * overboard... + */ + ds = dmu_objset_ds(os); + dsl_pool_config_enter(dmu_objset_pool(os), FTAG); + error = dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_RELATIME), relatime_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_READONLY), readonly_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_DEVICES), devices_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_SETUID), setuid_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_EXEC), exec_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_SNAPDIR), snapdir_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_ACLTYPE), acltype_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_ACLINHERIT), acl_inherit_changed_cb, + zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_VSCAN), vscan_changed_cb, zfsvfs); + error = error ? error : dsl_prop_register(ds, + zfs_prop_to_name(ZFS_PROP_NBMAND), nbmand_changed_cb, zfsvfs); + dsl_pool_config_exit(dmu_objset_pool(os), FTAG); + if (error) + goto unregister; + + /* + * Invoke our callbacks to restore temporary mount options. + */ + if (vfsp->vfs_do_readonly) + readonly_changed_cb(zfsvfs, vfsp->vfs_readonly); + if (vfsp->vfs_do_setuid) + setuid_changed_cb(zfsvfs, vfsp->vfs_setuid); + if (vfsp->vfs_do_exec) + exec_changed_cb(zfsvfs, vfsp->vfs_exec); + if (vfsp->vfs_do_devices) + devices_changed_cb(zfsvfs, vfsp->vfs_devices); + if (vfsp->vfs_do_xattr) + xattr_changed_cb(zfsvfs, vfsp->vfs_xattr); + if (vfsp->vfs_do_atime) + atime_changed_cb(zfsvfs, vfsp->vfs_atime); + if (vfsp->vfs_do_relatime) + relatime_changed_cb(zfsvfs, vfsp->vfs_relatime); + if (vfsp->vfs_do_nbmand) + nbmand_changed_cb(zfsvfs, vfsp->vfs_nbmand); + + return (0); + +unregister: + dsl_prop_unregister_all(ds, zfsvfs); + return (error); +} + +static int +zfs_space_delta_cb(dmu_object_type_t bonustype, void *data, + uint64_t *userp, uint64_t *groupp) +{ + /* + * Is it a valid type of object to track? + */ + if (bonustype != DMU_OT_ZNODE && bonustype != DMU_OT_SA) + return (SET_ERROR(ENOENT)); + + /* + * If we have a NULL data pointer + * then assume the id's aren't changing and + * return EEXIST to the dmu to let it know to + * use the same ids + */ + if (data == NULL) + return (SET_ERROR(EEXIST)); + + if (bonustype == DMU_OT_ZNODE) { + znode_phys_t *znp = data; + *userp = znp->zp_uid; + *groupp = znp->zp_gid; + } else { + int hdrsize; + sa_hdr_phys_t *sap = data; + sa_hdr_phys_t sa = *sap; + boolean_t swap = B_FALSE; + + ASSERT(bonustype == DMU_OT_SA); + + if (sa.sa_magic == 0) { + /* + * This should only happen for newly created + * files that haven't had the znode data filled + * in yet. + */ + *userp = 0; + *groupp = 0; + return (0); + } + if (sa.sa_magic == BSWAP_32(SA_MAGIC)) { + sa.sa_magic = SA_MAGIC; + sa.sa_layout_info = BSWAP_16(sa.sa_layout_info); + swap = B_TRUE; + } else { + VERIFY3U(sa.sa_magic, ==, SA_MAGIC); + } + + hdrsize = sa_hdrsize(&sa); + VERIFY3U(hdrsize, >=, sizeof (sa_hdr_phys_t)); + *userp = *((uint64_t *)((uintptr_t)data + hdrsize + + SA_UID_OFFSET)); + *groupp = *((uint64_t *)((uintptr_t)data + hdrsize + + SA_GID_OFFSET)); + if (swap) { + *userp = BSWAP_64(*userp); + *groupp = BSWAP_64(*groupp); + } + } + return (0); +} + +static void +fuidstr_to_sid(zfsvfs_t *zfsvfs, const char *fuidstr, + char *domainbuf, int buflen, uid_t *ridp) +{ + uint64_t fuid; + const char *domain; + + fuid = zfs_strtonum(fuidstr, NULL); + + domain = zfs_fuid_find_by_idx(zfsvfs, FUID_INDEX(fuid)); + if (domain) + (void) strlcpy(domainbuf, domain, buflen); + else + domainbuf[0] = '\0'; + *ridp = FUID_RID(fuid); +} + +static uint64_t +zfs_userquota_prop_to_obj(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type) +{ + switch (type) { + case ZFS_PROP_USERUSED: + case ZFS_PROP_USEROBJUSED: + return (DMU_USERUSED_OBJECT); + case ZFS_PROP_GROUPUSED: + case ZFS_PROP_GROUPOBJUSED: + return (DMU_GROUPUSED_OBJECT); + case ZFS_PROP_USERQUOTA: + return (zfsvfs->z_userquota_obj); + case ZFS_PROP_GROUPQUOTA: + return (zfsvfs->z_groupquota_obj); + case ZFS_PROP_USEROBJQUOTA: + return (zfsvfs->z_userobjquota_obj); + case ZFS_PROP_GROUPOBJQUOTA: + return (zfsvfs->z_groupobjquota_obj); + default: + return (ZFS_NO_OBJECT); + } +} + +int +zfs_userspace_many(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + uint64_t *cookiep, void *vbuf, uint64_t *bufsizep) +{ + int error; + zap_cursor_t zc; + zap_attribute_t za; + zfs_useracct_t *buf = vbuf; + uint64_t obj; + int offset = 0; + + if (!dmu_objset_userspace_present(zfsvfs->z_os)) + return (SET_ERROR(ENOTSUP)); + + if ((type == ZFS_PROP_USEROBJUSED || type == ZFS_PROP_GROUPOBJUSED || + type == ZFS_PROP_USEROBJQUOTA || type == ZFS_PROP_GROUPOBJQUOTA) && + !dmu_objset_userobjspace_present(zfsvfs->z_os)) + return (SET_ERROR(ENOTSUP)); + + obj = zfs_userquota_prop_to_obj(zfsvfs, type); + if (obj == ZFS_NO_OBJECT) { + *bufsizep = 0; + return (0); + } + + if (type == ZFS_PROP_USEROBJUSED || type == ZFS_PROP_GROUPOBJUSED) + offset = DMU_OBJACCT_PREFIX_LEN; + + for (zap_cursor_init_serialized(&zc, zfsvfs->z_os, obj, *cookiep); + (error = zap_cursor_retrieve(&zc, &za)) == 0; + zap_cursor_advance(&zc)) { + if ((uintptr_t)buf - (uintptr_t)vbuf + sizeof (zfs_useracct_t) > + *bufsizep) + break; + + /* + * skip object quota (with zap name prefix DMU_OBJACCT_PREFIX) + * when dealing with block quota and vice versa. + */ + if ((offset > 0) != (strncmp(za.za_name, DMU_OBJACCT_PREFIX, + DMU_OBJACCT_PREFIX_LEN) == 0)) + continue; + + fuidstr_to_sid(zfsvfs, za.za_name + offset, + buf->zu_domain, sizeof (buf->zu_domain), &buf->zu_rid); + + buf->zu_space = za.za_first_integer; + buf++; + } + if (error == ENOENT) + error = 0; + + ASSERT3U((uintptr_t)buf - (uintptr_t)vbuf, <=, *bufsizep); + *bufsizep = (uintptr_t)buf - (uintptr_t)vbuf; + *cookiep = zap_cursor_serialize(&zc); + zap_cursor_fini(&zc); + return (error); +} + +/* + * buf must be big enough (eg, 32 bytes) + */ +static int +id_to_fuidstr(zfsvfs_t *zfsvfs, const char *domain, uid_t rid, + char *buf, boolean_t addok) +{ + uint64_t fuid; + int domainid = 0; + + if (domain && domain[0]) { + domainid = zfs_fuid_find_by_domain(zfsvfs, domain, NULL, addok); + if (domainid == -1) + return (SET_ERROR(ENOENT)); + } + fuid = FUID_ENCODE(domainid, rid); + (void) sprintf(buf, "%llx", (longlong_t)fuid); + return (0); +} + +int +zfs_userspace_one(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + const char *domain, uint64_t rid, uint64_t *valp) +{ + char buf[20 + DMU_OBJACCT_PREFIX_LEN]; + int offset = 0; + int err; + uint64_t obj; + + *valp = 0; + + if (!dmu_objset_userspace_present(zfsvfs->z_os)) + return (SET_ERROR(ENOTSUP)); + + if ((type == ZFS_PROP_USEROBJUSED || type == ZFS_PROP_GROUPOBJUSED || + type == ZFS_PROP_USEROBJQUOTA || type == ZFS_PROP_GROUPOBJQUOTA) && + !dmu_objset_userobjspace_present(zfsvfs->z_os)) + return (SET_ERROR(ENOTSUP)); + + obj = zfs_userquota_prop_to_obj(zfsvfs, type); + if (obj == ZFS_NO_OBJECT) + return (0); + + if (type == ZFS_PROP_USEROBJUSED || type == ZFS_PROP_GROUPOBJUSED) { + strlcpy(buf, DMU_OBJACCT_PREFIX, DMU_OBJACCT_PREFIX_LEN + 1); + offset = DMU_OBJACCT_PREFIX_LEN; + } + + err = id_to_fuidstr(zfsvfs, domain, rid, buf + offset, B_FALSE); + if (err) + return (err); + + err = zap_lookup(zfsvfs->z_os, obj, buf, 8, 1, valp); + if (err == ENOENT) + err = 0; + return (err); +} + +int +zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, + const char *domain, uint64_t rid, uint64_t quota) +{ + char buf[32]; + int err; + dmu_tx_t *tx; + uint64_t *objp; + boolean_t fuid_dirtied; + + if (zfsvfs->z_version < ZPL_VERSION_USERSPACE) + return (SET_ERROR(ENOTSUP)); + + switch (type) { + case ZFS_PROP_USERQUOTA: + objp = &zfsvfs->z_userquota_obj; + break; + case ZFS_PROP_GROUPQUOTA: + objp = &zfsvfs->z_groupquota_obj; + break; + case ZFS_PROP_USEROBJQUOTA: + objp = &zfsvfs->z_userobjquota_obj; + break; + case ZFS_PROP_GROUPOBJQUOTA: + objp = &zfsvfs->z_groupobjquota_obj; + break; + default: + return (SET_ERROR(EINVAL)); + } + + err = id_to_fuidstr(zfsvfs, domain, rid, buf, B_TRUE); + if (err) + return (err); + fuid_dirtied = zfsvfs->z_fuid_dirty; + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_zap(tx, *objp ? *objp : DMU_NEW_OBJECT, B_TRUE, NULL); + if (*objp == 0) { + dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_TRUE, + zfs_userquota_prop_prefixes[type]); + } + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + err = dmu_tx_assign(tx, TXG_WAIT); + if (err) { + dmu_tx_abort(tx); + return (err); + } + + mutex_enter(&zfsvfs->z_lock); + if (*objp == 0) { + *objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA, + DMU_OT_NONE, 0, tx); + VERIFY(0 == zap_add(zfsvfs->z_os, MASTER_NODE_OBJ, + zfs_userquota_prop_prefixes[type], 8, 1, objp, tx)); + } + mutex_exit(&zfsvfs->z_lock); + + if (quota == 0) { + err = zap_remove(zfsvfs->z_os, *objp, buf, tx); + if (err == ENOENT) + err = 0; + } else { + err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, "a, tx); + } + ASSERT(err == 0); + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + dmu_tx_commit(tx); + return (err); +} + +boolean_t +zfs_fuid_overobjquota(zfsvfs_t *zfsvfs, boolean_t isgroup, uint64_t fuid) +{ + char buf[20 + DMU_OBJACCT_PREFIX_LEN]; + uint64_t used, quota, usedobj, quotaobj; + int err; + + if (!dmu_objset_userobjspace_present(zfsvfs->z_os)) { + if (dmu_objset_userobjspace_upgradable(zfsvfs->z_os)) + dmu_objset_userobjspace_upgrade(zfsvfs->z_os); + return (B_FALSE); + } + + usedobj = isgroup ? DMU_GROUPUSED_OBJECT : DMU_USERUSED_OBJECT; + quotaobj = isgroup ? zfsvfs->z_groupobjquota_obj : + zfsvfs->z_userobjquota_obj; + if (quotaobj == 0 || zfsvfs->z_replay) + return (B_FALSE); + + (void) sprintf(buf, "%llx", (longlong_t)fuid); + err = zap_lookup(zfsvfs->z_os, quotaobj, buf, 8, 1, "a); + if (err != 0) + return (B_FALSE); + + (void) sprintf(buf, DMU_OBJACCT_PREFIX "%llx", (longlong_t)fuid); + err = zap_lookup(zfsvfs->z_os, usedobj, buf, 8, 1, &used); + if (err != 0) + return (B_FALSE); + return (used >= quota); +} + +boolean_t +zfs_fuid_overquota(zfsvfs_t *zfsvfs, boolean_t isgroup, uint64_t fuid) +{ + char buf[20]; + uint64_t used, quota, usedobj, quotaobj; + int err; + + usedobj = isgroup ? DMU_GROUPUSED_OBJECT : DMU_USERUSED_OBJECT; + quotaobj = isgroup ? zfsvfs->z_groupquota_obj : zfsvfs->z_userquota_obj; + + if (quotaobj == 0 || zfsvfs->z_replay) + return (B_FALSE); + + (void) sprintf(buf, "%llx", (longlong_t)fuid); + err = zap_lookup(zfsvfs->z_os, quotaobj, buf, 8, 1, "a); + if (err != 0) + return (B_FALSE); + + err = zap_lookup(zfsvfs->z_os, usedobj, buf, 8, 1, &used); + if (err != 0) + return (B_FALSE); + return (used >= quota); +} + +boolean_t +zfs_owner_overquota(zfsvfs_t *zfsvfs, znode_t *zp, boolean_t isgroup) +{ + uint64_t fuid; + uint64_t quotaobj; + struct inode *ip = ZTOI(zp); + + quotaobj = isgroup ? zfsvfs->z_groupquota_obj : zfsvfs->z_userquota_obj; + + fuid = isgroup ? KGID_TO_SGID(ip->i_gid) : KUID_TO_SUID(ip->i_uid); + + if (quotaobj == 0 || zfsvfs->z_replay) + return (B_FALSE); + + return (zfs_fuid_overquota(zfsvfs, isgroup, fuid)); +} + +/* + * Associate this zfsvfs with the given objset, which must be owned. + * This will cache a bunch of on-disk state from the objset in the + * zfsvfs. + */ +static int +zfsvfs_init(zfsvfs_t *zfsvfs, objset_t *os) +{ + int error; + uint64_t val; + + zfsvfs->z_max_blksz = SPA_OLD_MAXBLOCKSIZE; + zfsvfs->z_show_ctldir = ZFS_SNAPDIR_VISIBLE; + zfsvfs->z_os = os; + + error = zfs_get_zplprop(os, ZFS_PROP_VERSION, &zfsvfs->z_version); + if (error != 0) + return (error); + if (zfsvfs->z_version > + zfs_zpl_version_map(spa_version(dmu_objset_spa(os)))) { + (void) printk("Can't mount a version %lld file system " + "on a version %lld pool\n. Pool must be upgraded to mount " + "this file system.", (u_longlong_t)zfsvfs->z_version, + (u_longlong_t)spa_version(dmu_objset_spa(os))); + return (SET_ERROR(ENOTSUP)); + } + error = zfs_get_zplprop(os, ZFS_PROP_NORMALIZE, &val); + if (error != 0) + return (error); + zfsvfs->z_norm = (int)val; + + error = zfs_get_zplprop(os, ZFS_PROP_UTF8ONLY, &val); + if (error != 0) + return (error); + zfsvfs->z_utf8 = (val != 0); + + error = zfs_get_zplprop(os, ZFS_PROP_CASE, &val); + if (error != 0) + return (error); + zfsvfs->z_case = (uint_t)val; + + if ((error = zfs_get_zplprop(os, ZFS_PROP_ACLTYPE, &val)) != 0) + return (error); + zfsvfs->z_acl_type = (uint_t)val; + + /* + * Fold case on file systems that are always or sometimes case + * insensitive. + */ + if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE || + zfsvfs->z_case == ZFS_CASE_MIXED) + zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER; + + zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); + zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); + + uint64_t sa_obj = 0; + if (zfsvfs->z_use_sa) { + /* should either have both of these objects or none */ + error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_SA_ATTRS, 8, 1, + &sa_obj); + if (error != 0) + return (error); + + error = zfs_get_zplprop(os, ZFS_PROP_XATTR, &val); + if ((error == 0) && (val == ZFS_XATTR_SA)) + zfsvfs->z_xattr_sa = B_TRUE; + } + + error = sa_setup(os, sa_obj, zfs_attr_table, ZPL_END, + &zfsvfs->z_attr_table); + if (error != 0) + return (error); + + if (zfsvfs->z_version >= ZPL_VERSION_SA) + sa_register_update_callback(os, zfs_sa_upgrade); + + error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_ROOT_OBJ, 8, 1, + &zfsvfs->z_root); + if (error != 0) + return (error); + ASSERT(zfsvfs->z_root != 0); + + error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_UNLINKED_SET, 8, 1, + &zfsvfs->z_unlinkedobj); + if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, + zfs_userquota_prop_prefixes[ZFS_PROP_USERQUOTA], + 8, 1, &zfsvfs->z_userquota_obj); + if (error == ENOENT) + zfsvfs->z_userquota_obj = 0; + else if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, + zfs_userquota_prop_prefixes[ZFS_PROP_GROUPQUOTA], + 8, 1, &zfsvfs->z_groupquota_obj); + if (error == ENOENT) + zfsvfs->z_groupquota_obj = 0; + else if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, + zfs_userquota_prop_prefixes[ZFS_PROP_USEROBJQUOTA], + 8, 1, &zfsvfs->z_userobjquota_obj); + if (error == ENOENT) + zfsvfs->z_userobjquota_obj = 0; + else if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, + zfs_userquota_prop_prefixes[ZFS_PROP_GROUPOBJQUOTA], + 8, 1, &zfsvfs->z_groupobjquota_obj); + if (error == ENOENT) + zfsvfs->z_groupobjquota_obj = 0; + else if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_FUID_TABLES, 8, 1, + &zfsvfs->z_fuid_obj); + if (error == ENOENT) + zfsvfs->z_fuid_obj = 0; + else if (error != 0) + return (error); + + error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_SHARES_DIR, 8, 1, + &zfsvfs->z_shares_dir); + if (error == ENOENT) + zfsvfs->z_shares_dir = 0; + else if (error != 0) + return (error); + + return (0); +} + +int +zfsvfs_create(const char *osname, zfsvfs_t **zfvp) +{ + objset_t *os; + zfsvfs_t *zfsvfs; + int error; + + zfsvfs = kmem_zalloc(sizeof (zfsvfs_t), KM_SLEEP); + + /* + * We claim to always be readonly so we can open snapshots; + * other ZPL code will prevent us from writing to snapshots. + */ + error = dmu_objset_own(osname, DMU_OST_ZFS, B_TRUE, zfsvfs, &os); + if (error) { + kmem_free(zfsvfs, sizeof (zfsvfs_t)); + return (error); + } + + zfsvfs->z_vfs = NULL; + zfsvfs->z_sb = NULL; + zfsvfs->z_parent = zfsvfs; + + mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&zfsvfs->z_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&zfsvfs->z_all_znodes, sizeof (znode_t), + offsetof(znode_t, z_link_node)); + rrm_init(&zfsvfs->z_teardown_lock, B_FALSE); + rw_init(&zfsvfs->z_teardown_inactive_lock, NULL, RW_DEFAULT, NULL); + rw_init(&zfsvfs->z_fuid_lock, NULL, RW_DEFAULT, NULL); + + int size = MIN(1 << (highbit64(zfs_object_mutex_size) - 1), + ZFS_OBJ_MTX_MAX); + zfsvfs->z_hold_size = size; + zfsvfs->z_hold_trees = vmem_zalloc(sizeof (avl_tree_t) * size, + KM_SLEEP); + zfsvfs->z_hold_locks = vmem_zalloc(sizeof (kmutex_t) * size, KM_SLEEP); + for (int i = 0; i != size; i++) { + avl_create(&zfsvfs->z_hold_trees[i], zfs_znode_hold_compare, + sizeof (znode_hold_t), offsetof(znode_hold_t, zh_node)); + mutex_init(&zfsvfs->z_hold_locks[i], NULL, MUTEX_DEFAULT, NULL); + } + + error = zfsvfs_init(zfsvfs, os); + if (error != 0) { + dmu_objset_disown(os, zfsvfs); + *zfvp = NULL; + kmem_free(zfsvfs, sizeof (zfsvfs_t)); + return (error); + } + + *zfvp = zfsvfs; + return (0); +} + +static int +zfsvfs_setup(zfsvfs_t *zfsvfs, boolean_t mounting) +{ + int error; + + error = zfs_register_callbacks(zfsvfs->z_vfs); + if (error) + return (error); + + zfsvfs->z_log = zil_open(zfsvfs->z_os, zfs_get_data); + + /* + * If we are not mounting (ie: online recv), then we don't + * have to worry about replaying the log as we blocked all + * operations out since we closed the ZIL. + */ + if (mounting) { + boolean_t readonly; + + /* + * During replay we remove the read only flag to + * allow replays to succeed. + */ + readonly = zfs_is_readonly(zfsvfs); + if (readonly != 0) + readonly_changed_cb(zfsvfs, B_FALSE); + else + zfs_unlinked_drain(zfsvfs); + + /* + * Parse and replay the intent log. + * + * Because of ziltest, this must be done after + * zfs_unlinked_drain(). (Further note: ziltest + * doesn't use readonly mounts, where + * zfs_unlinked_drain() isn't called.) This is because + * ziltest causes spa_sync() to think it's committed, + * but actually it is not, so the intent log contains + * many txg's worth of changes. + * + * In particular, if object N is in the unlinked set in + * the last txg to actually sync, then it could be + * actually freed in a later txg and then reallocated + * in a yet later txg. This would write a "create + * object N" record to the intent log. Normally, this + * would be fine because the spa_sync() would have + * written out the fact that object N is free, before + * we could write the "create object N" intent log + * record. + * + * But when we are in ziltest mode, we advance the "open + * txg" without actually spa_sync()-ing the changes to + * disk. So we would see that object N is still + * allocated and in the unlinked set, and there is an + * intent log record saying to allocate it. + */ + if (spa_writeable(dmu_objset_spa(zfsvfs->z_os))) { + if (zil_replay_disable) { + zil_destroy(zfsvfs->z_log, B_FALSE); + } else { + zfsvfs->z_replay = B_TRUE; + zil_replay(zfsvfs->z_os, zfsvfs, + zfs_replay_vector); + zfsvfs->z_replay = B_FALSE; + } + } + + /* restore readonly bit */ + if (readonly != 0) + readonly_changed_cb(zfsvfs, B_TRUE); + } + + /* + * Set the objset user_ptr to track its zfsvfs. + */ + mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); + dmu_objset_set_user(zfsvfs->z_os, zfsvfs); + mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); + + return (0); +} + +void +zfsvfs_free(zfsvfs_t *zfsvfs) +{ + int i, size = zfsvfs->z_hold_size; + + zfs_fuid_destroy(zfsvfs); + + mutex_destroy(&zfsvfs->z_znodes_lock); + mutex_destroy(&zfsvfs->z_lock); + list_destroy(&zfsvfs->z_all_znodes); + rrm_destroy(&zfsvfs->z_teardown_lock); + rw_destroy(&zfsvfs->z_teardown_inactive_lock); + rw_destroy(&zfsvfs->z_fuid_lock); + for (i = 0; i != size; i++) { + avl_destroy(&zfsvfs->z_hold_trees[i]); + mutex_destroy(&zfsvfs->z_hold_locks[i]); + } + vmem_free(zfsvfs->z_hold_trees, sizeof (avl_tree_t) * size); + vmem_free(zfsvfs->z_hold_locks, sizeof (kmutex_t) * size); + zfsvfs_vfs_free(zfsvfs->z_vfs); + kmem_free(zfsvfs, sizeof (zfsvfs_t)); +} + +static void +zfs_set_fuid_feature(zfsvfs_t *zfsvfs) +{ + zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); + zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); +} + +void +zfs_unregister_callbacks(zfsvfs_t *zfsvfs) +{ + objset_t *os = zfsvfs->z_os; + + if (!dmu_objset_is_snapshot(os)) + dsl_prop_unregister_all(dmu_objset_ds(os), zfsvfs); +} + +#ifdef HAVE_MLSLABEL +/* + * Check that the hex label string is appropriate for the dataset being + * mounted into the global_zone proper. + * + * Return an error if the hex label string is not default or + * admin_low/admin_high. For admin_low labels, the corresponding + * dataset must be readonly. + */ +int +zfs_check_global_label(const char *dsname, const char *hexsl) +{ + if (strcasecmp(hexsl, ZFS_MLSLABEL_DEFAULT) == 0) + return (0); + if (strcasecmp(hexsl, ADMIN_HIGH) == 0) + return (0); + if (strcasecmp(hexsl, ADMIN_LOW) == 0) { + /* must be readonly */ + uint64_t rdonly; + + if (dsl_prop_get_integer(dsname, + zfs_prop_to_name(ZFS_PROP_READONLY), &rdonly, NULL)) + return (SET_ERROR(EACCES)); + return (rdonly ? 0 : EACCES); + } + return (SET_ERROR(EACCES)); +} +#endif /* HAVE_MLSLABEL */ + +int +zfs_statvfs(struct dentry *dentry, struct kstatfs *statp) +{ + zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info; + uint64_t refdbytes, availbytes, usedobjs, availobjs; + uint64_t fsid; + uint32_t bshift; + + ZFS_ENTER(zfsvfs); + + dmu_objset_space(zfsvfs->z_os, + &refdbytes, &availbytes, &usedobjs, &availobjs); + + fsid = dmu_objset_fsid_guid(zfsvfs->z_os); + /* + * The underlying storage pool actually uses multiple block + * size. Under Solaris frsize (fragment size) is reported as + * the smallest block size we support, and bsize (block size) + * as the filesystem's maximum block size. Unfortunately, + * under Linux the fragment size and block size are often used + * interchangeably. Thus we are forced to report both of them + * as the filesystem's maximum block size. + */ + statp->f_frsize = zfsvfs->z_max_blksz; + statp->f_bsize = zfsvfs->z_max_blksz; + bshift = fls(statp->f_bsize) - 1; + + /* + * The following report "total" blocks of various kinds in + * the file system, but reported in terms of f_bsize - the + * "preferred" size. + */ + + statp->f_blocks = (refdbytes + availbytes) >> bshift; + statp->f_bfree = availbytes >> bshift; + statp->f_bavail = statp->f_bfree; /* no root reservation */ + + /* + * statvfs() should really be called statufs(), because it assumes + * static metadata. ZFS doesn't preallocate files, so the best + * we can do is report the max that could possibly fit in f_files, + * and that minus the number actually used in f_ffree. + * For f_ffree, report the smaller of the number of object available + * and the number of blocks (each object will take at least a block). + */ + statp->f_ffree = MIN(availobjs, availbytes >> DNODE_SHIFT); + statp->f_files = statp->f_ffree + usedobjs; + statp->f_fsid.val[0] = (uint32_t)fsid; + statp->f_fsid.val[1] = (uint32_t)(fsid >> 32); + statp->f_type = ZFS_SUPER_MAGIC; + statp->f_namelen = MAXNAMELEN - 1; + + /* + * We have all of 40 characters to stuff a string here. + * Is there anything useful we could/should provide? + */ + bzero(statp->f_spare, sizeof (statp->f_spare)); + + ZFS_EXIT(zfsvfs); + return (0); +} + +int +zfs_root(zfsvfs_t *zfsvfs, struct inode **ipp) +{ + znode_t *rootzp; + int error; + + ZFS_ENTER(zfsvfs); + + error = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp); + if (error == 0) + *ipp = ZTOI(rootzp); + + ZFS_EXIT(zfsvfs); + return (error); +} + +#ifdef HAVE_D_PRUNE_ALIASES +/* + * Linux kernels older than 3.1 do not support a per-filesystem shrinker. + * To accommodate this we must improvise and manually walk the list of znodes + * attempting to prune dentries in order to be able to drop the inodes. + * + * To avoid scanning the same znodes multiple times they are always rotated + * to the end of the z_all_znodes list. New znodes are inserted at the + * end of the list so we're always scanning the oldest znodes first. + */ +static int +zfs_prune_aliases(zfsvfs_t *zfsvfs, unsigned long nr_to_scan) +{ + znode_t **zp_array, *zp; + int max_array = MIN(nr_to_scan, PAGE_SIZE * 8 / sizeof (znode_t *)); + int objects = 0; + int i = 0, j = 0; + + zp_array = kmem_zalloc(max_array * sizeof (znode_t *), KM_SLEEP); + + mutex_enter(&zfsvfs->z_znodes_lock); + while ((zp = list_head(&zfsvfs->z_all_znodes)) != NULL) { + + if ((i++ > nr_to_scan) || (j >= max_array)) + break; + + ASSERT(list_link_active(&zp->z_link_node)); + list_remove(&zfsvfs->z_all_znodes, zp); + list_insert_tail(&zfsvfs->z_all_znodes, zp); + + /* Skip active znodes and .zfs entries */ + if (MUTEX_HELD(&zp->z_lock) || zp->z_is_ctldir) + continue; + + if (igrab(ZTOI(zp)) == NULL) + continue; + + zp_array[j] = zp; + j++; + } + mutex_exit(&zfsvfs->z_znodes_lock); + + for (i = 0; i < j; i++) { + zp = zp_array[i]; + + ASSERT3P(zp, !=, NULL); + d_prune_aliases(ZTOI(zp)); + + if (atomic_read(&ZTOI(zp)->i_count) == 1) + objects++; + + iput(ZTOI(zp)); + } + + kmem_free(zp_array, max_array * sizeof (znode_t *)); + + return (objects); +} +#endif /* HAVE_D_PRUNE_ALIASES */ + +/* + * The ARC has requested that the filesystem drop entries from the dentry + * and inode caches. This can occur when the ARC needs to free meta data + * blocks but can't because they are all pinned by entries in these caches. + */ +int +zfs_prune(struct super_block *sb, unsigned long nr_to_scan, int *objects) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + int error = 0; +#if defined(HAVE_SHRINK) || defined(HAVE_SPLIT_SHRINKER_CALLBACK) + struct shrinker *shrinker = &sb->s_shrink; + struct shrink_control sc = { + .nr_to_scan = nr_to_scan, + .gfp_mask = GFP_KERNEL, + }; +#endif + + ZFS_ENTER(zfsvfs); + +#if defined(HAVE_SPLIT_SHRINKER_CALLBACK) && \ + defined(SHRINK_CONTROL_HAS_NID) && \ + defined(SHRINKER_NUMA_AWARE) + if (sb->s_shrink.flags & SHRINKER_NUMA_AWARE) { + *objects = 0; + for_each_online_node(sc.nid) { + *objects += (*shrinker->scan_objects)(shrinker, &sc); + } + } else { + *objects = (*shrinker->scan_objects)(shrinker, &sc); + } + +#elif defined(HAVE_SPLIT_SHRINKER_CALLBACK) + *objects = (*shrinker->scan_objects)(shrinker, &sc); +#elif defined(HAVE_SHRINK) + *objects = (*shrinker->shrink)(shrinker, &sc); +#elif defined(HAVE_D_PRUNE_ALIASES) +#define D_PRUNE_ALIASES_IS_DEFAULT + *objects = zfs_prune_aliases(zfsvfs, nr_to_scan); +#else +#error "No available dentry and inode cache pruning mechanism." +#endif + +#if defined(HAVE_D_PRUNE_ALIASES) && !defined(D_PRUNE_ALIASES_IS_DEFAULT) +#undef D_PRUNE_ALIASES_IS_DEFAULT + /* + * Fall back to zfs_prune_aliases if the kernel's per-superblock + * shrinker couldn't free anything, possibly due to the inodes being + * allocated in a different memcg. + */ + if (*objects == 0) + *objects = zfs_prune_aliases(zfsvfs, nr_to_scan); +#endif + + ZFS_EXIT(zfsvfs); + + dprintf_ds(zfsvfs->z_os->os_dsl_dataset, + "pruning, nr_to_scan=%lu objects=%d error=%d\n", + nr_to_scan, *objects, error); + + return (error); +} + +/* + * Teardown the zfsvfs_t. + * + * Note, if 'unmounting' is FALSE, we return with the 'z_teardown_lock' + * and 'z_teardown_inactive_lock' held. + */ +static int +zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting) +{ + znode_t *zp; + + /* + * If someone has not already unmounted this file system, + * drain the iput_taskq to ensure all active references to the + * zfsvfs_t have been handled only then can it be safely destroyed. + */ + if (zfsvfs->z_os) { + /* + * If we're unmounting we have to wait for the list to + * drain completely. + * + * If we're not unmounting there's no guarantee the list + * will drain completely, but iputs run from the taskq + * may add the parents of dir-based xattrs to the taskq + * so we want to wait for these. + * + * We can safely read z_nr_znodes without locking because the + * VFS has already blocked operations which add to the + * z_all_znodes list and thus increment z_nr_znodes. + */ + int round = 0; + while (zfsvfs->z_nr_znodes > 0) { + taskq_wait_outstanding(dsl_pool_iput_taskq( + dmu_objset_pool(zfsvfs->z_os)), 0); + if (++round > 1 && !unmounting) + break; + } + } + + rrm_enter(&zfsvfs->z_teardown_lock, RW_WRITER, FTAG); + + if (!unmounting) { + /* + * We purge the parent filesystem's super block as the + * parent filesystem and all of its snapshots have their + * inode's super block set to the parent's filesystem's + * super block. Note, 'z_parent' is self referential + * for non-snapshots. + */ + shrink_dcache_sb(zfsvfs->z_parent->z_sb); + } + + /* + * Close the zil. NB: Can't close the zil while zfs_inactive + * threads are blocked as zil_close can call zfs_inactive. + */ + if (zfsvfs->z_log) { + zil_close(zfsvfs->z_log); + zfsvfs->z_log = NULL; + } + + rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER); + + /* + * If we are not unmounting (ie: online recv) and someone already + * unmounted this file system while we were doing the switcheroo, + * or a reopen of z_os failed then just bail out now. + */ + if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) { + rw_exit(&zfsvfs->z_teardown_inactive_lock); + rrm_exit(&zfsvfs->z_teardown_lock, FTAG); + return (SET_ERROR(EIO)); + } + + /* + * At this point there are no VFS ops active, and any new VFS ops + * will fail with EIO since we have z_teardown_lock for writer (only + * relevant for forced unmount). + * + * Release all holds on dbufs. + */ + if (!unmounting) { + mutex_enter(&zfsvfs->z_znodes_lock); + for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL; + zp = list_next(&zfsvfs->z_all_znodes, zp)) { + if (zp->z_sa_hdl) + zfs_znode_dmu_fini(zp); + } + mutex_exit(&zfsvfs->z_znodes_lock); + } + + /* + * If we are unmounting, set the unmounted flag and let new VFS ops + * unblock. zfs_inactive will have the unmounted behavior, and all + * other VFS ops will fail with EIO. + */ + if (unmounting) { + zfsvfs->z_unmounted = B_TRUE; + rw_exit(&zfsvfs->z_teardown_inactive_lock); + rrm_exit(&zfsvfs->z_teardown_lock, FTAG); + } + + /* + * z_os will be NULL if there was an error in attempting to reopen + * zfsvfs, so just return as the properties had already been + * + * unregistered and cached data had been evicted before. + */ + if (zfsvfs->z_os == NULL) + return (0); + + /* + * Unregister properties. + */ + zfs_unregister_callbacks(zfsvfs); + + /* + * Evict cached data + */ + if (dsl_dataset_is_dirty(dmu_objset_ds(zfsvfs->z_os)) && + !zfs_is_readonly(zfsvfs)) + txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); + dmu_objset_evict_dbufs(zfsvfs->z_os); + + return (0); +} + +#if !defined(HAVE_2ARGS_BDI_SETUP_AND_REGISTER) && \ + !defined(HAVE_3ARGS_BDI_SETUP_AND_REGISTER) +atomic_long_t zfs_bdi_seq = ATOMIC_LONG_INIT(0); +#endif + +int +zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent) +{ + const char *osname = zm->mnt_osname; + struct inode *root_inode; + uint64_t recordsize; + int error = 0; + zfsvfs_t *zfsvfs; + + ASSERT(zm); + ASSERT(osname); + + error = zfsvfs_create(osname, &zfsvfs); + if (error) + return (error); + + error = zfsvfs_parse_options(zm->mnt_data, &zfsvfs->z_vfs); + if (error) + goto out; + + if ((error = dsl_prop_get_integer(osname, "recordsize", + &recordsize, NULL))) + goto out; + + zfsvfs->z_vfs->vfs_data = zfsvfs; + zfsvfs->z_sb = sb; + sb->s_fs_info = zfsvfs; + sb->s_magic = ZFS_SUPER_MAGIC; + sb->s_maxbytes = MAX_LFS_FILESIZE; + sb->s_time_gran = 1; + sb->s_blocksize = recordsize; + sb->s_blocksize_bits = ilog2(recordsize); + + error = -zpl_bdi_setup(sb, "zfs"); + if (error) + goto out; + + sb->s_bdi->ra_pages = 0; + + /* Set callback operations for the file system. */ + sb->s_op = &zpl_super_operations; + sb->s_xattr = zpl_xattr_handlers; + sb->s_export_op = &zpl_export_operations; +#ifdef HAVE_S_D_OP + sb->s_d_op = &zpl_dentry_operations; +#endif /* HAVE_S_D_OP */ + + /* Set features for file system. */ + zfs_set_fuid_feature(zfsvfs); + + if (dmu_objset_is_snapshot(zfsvfs->z_os)) { + uint64_t pval; + + atime_changed_cb(zfsvfs, B_FALSE); + readonly_changed_cb(zfsvfs, B_TRUE); + if ((error = dsl_prop_get_integer(osname, + "xattr", &pval, NULL))) + goto out; + xattr_changed_cb(zfsvfs, pval); + if ((error = dsl_prop_get_integer(osname, + "acltype", &pval, NULL))) + goto out; + acltype_changed_cb(zfsvfs, pval); + zfsvfs->z_issnap = B_TRUE; + zfsvfs->z_os->os_sync = ZFS_SYNC_DISABLED; + zfsvfs->z_snap_defer_time = jiffies; + + mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); + dmu_objset_set_user(zfsvfs->z_os, zfsvfs); + mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); + } else { + if ((error = zfsvfs_setup(zfsvfs, B_TRUE))) + goto out; + } + + /* Allocate a root inode for the filesystem. */ + error = zfs_root(zfsvfs, &root_inode); + if (error) { + (void) zfs_umount(sb); + goto out; + } + + /* Allocate a root dentry for the filesystem */ + sb->s_root = d_make_root(root_inode); + if (sb->s_root == NULL) { + (void) zfs_umount(sb); + error = SET_ERROR(ENOMEM); + goto out; + } + + if (!zfsvfs->z_issnap) + zfsctl_create(zfsvfs); + + zfsvfs->z_arc_prune = arc_add_prune_callback(zpl_prune_sb, sb); +out: + if (error) { + dmu_objset_disown(zfsvfs->z_os, zfsvfs); + zfsvfs_free(zfsvfs); + /* + * make sure we don't have dangling sb->s_fs_info which + * zfs_preumount will use. + */ + sb->s_fs_info = NULL; + } + + return (error); +} + +/* + * Called when an unmount is requested and certain sanity checks have + * already passed. At this point no dentries or inodes have been reclaimed + * from their respective caches. We drop the extra reference on the .zfs + * control directory to allow everything to be reclaimed. All snapshots + * must already have been unmounted to reach this point. + */ +void +zfs_preumount(struct super_block *sb) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + + /* zfsvfs is NULL when zfs_domount fails during mount */ + if (zfsvfs) { + zfsctl_destroy(sb->s_fs_info); + /* + * Wait for iput_async before entering evict_inodes in + * generic_shutdown_super. The reason we must finish before + * evict_inodes is when lazytime is on, or when zfs_purgedir + * calls zfs_zget, iput would bump i_count from 0 to 1. This + * would race with the i_count check in evict_inodes. This means + * it could destroy the inode while we are still using it. + * + * We wait for two passes. xattr directories in the first pass + * may add xattr entries in zfs_purgedir, so in the second pass + * we wait for them. We don't use taskq_wait here because it is + * a pool wide taskq. Other mounted filesystems can constantly + * do iput_async and there's no guarantee when taskq will be + * empty. + */ + taskq_wait_outstanding(dsl_pool_iput_taskq( + dmu_objset_pool(zfsvfs->z_os)), 0); + taskq_wait_outstanding(dsl_pool_iput_taskq( + dmu_objset_pool(zfsvfs->z_os)), 0); + } +} + +/* + * Called once all other unmount released tear down has occurred. + * It is our responsibility to release any remaining infrastructure. + */ +/*ARGSUSED*/ +int +zfs_umount(struct super_block *sb) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + objset_t *os; + + arc_remove_prune_callback(zfsvfs->z_arc_prune); + VERIFY(zfsvfs_teardown(zfsvfs, B_TRUE) == 0); + os = zfsvfs->z_os; + zpl_bdi_destroy(sb); + + /* + * z_os will be NULL if there was an error in + * attempting to reopen zfsvfs. + */ + if (os != NULL) { + /* + * Unset the objset user_ptr. + */ + mutex_enter(&os->os_user_ptr_lock); + dmu_objset_set_user(os, NULL); + mutex_exit(&os->os_user_ptr_lock); + + /* + * Finally release the objset + */ + dmu_objset_disown(os, zfsvfs); + } + + zfsvfs_free(zfsvfs); + return (0); +} + +int +zfs_remount(struct super_block *sb, int *flags, zfs_mnt_t *zm) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + vfs_t *vfsp; + boolean_t issnap = dmu_objset_is_snapshot(zfsvfs->z_os); + int error; + + if ((issnap || !spa_writeable(dmu_objset_spa(zfsvfs->z_os))) && + !(*flags & MS_RDONLY)) { + *flags |= MS_RDONLY; + return (EROFS); + } + + error = zfsvfs_parse_options(zm->mnt_data, &vfsp); + if (error) + return (error); + + zfs_unregister_callbacks(zfsvfs); + zfsvfs_vfs_free(zfsvfs->z_vfs); + + vfsp->vfs_data = zfsvfs; + zfsvfs->z_vfs = vfsp; + if (!issnap) + (void) zfs_register_callbacks(vfsp); + + return (error); +} + +int +zfs_vget(struct super_block *sb, struct inode **ipp, fid_t *fidp) +{ + zfsvfs_t *zfsvfs = sb->s_fs_info; + znode_t *zp; + uint64_t object = 0; + uint64_t fid_gen = 0; + uint64_t gen_mask; + uint64_t zp_gen; + int i, err; + + *ipp = NULL; + + if (fidp->fid_len == SHORT_FID_LEN || fidp->fid_len == LONG_FID_LEN) { + zfid_short_t *zfid = (zfid_short_t *)fidp; + + for (i = 0; i < sizeof (zfid->zf_object); i++) + object |= ((uint64_t)zfid->zf_object[i]) << (8 * i); + + for (i = 0; i < sizeof (zfid->zf_gen); i++) + fid_gen |= ((uint64_t)zfid->zf_gen[i]) << (8 * i); + } else { + return (SET_ERROR(EINVAL)); + } + + /* LONG_FID_LEN means snapdirs */ + if (fidp->fid_len == LONG_FID_LEN) { + zfid_long_t *zlfid = (zfid_long_t *)fidp; + uint64_t objsetid = 0; + uint64_t setgen = 0; + + for (i = 0; i < sizeof (zlfid->zf_setid); i++) + objsetid |= ((uint64_t)zlfid->zf_setid[i]) << (8 * i); + + for (i = 0; i < sizeof (zlfid->zf_setgen); i++) + setgen |= ((uint64_t)zlfid->zf_setgen[i]) << (8 * i); + + if (objsetid != ZFSCTL_INO_SNAPDIRS - object) { + dprintf("snapdir fid: objsetid (%llu) != " + "ZFSCTL_INO_SNAPDIRS (%llu) - object (%llu)\n", + objsetid, ZFSCTL_INO_SNAPDIRS, object); + + return (SET_ERROR(EINVAL)); + } + + if (fid_gen > 1 || setgen != 0) { + dprintf("snapdir fid: fid_gen (%llu) and setgen " + "(%llu)\n", fid_gen, setgen); + return (SET_ERROR(EINVAL)); + } + + return (zfsctl_snapdir_vget(sb, objsetid, fid_gen, ipp)); + } + + ZFS_ENTER(zfsvfs); + /* A zero fid_gen means we are in the .zfs control directories */ + if (fid_gen == 0 && + (object == ZFSCTL_INO_ROOT || object == ZFSCTL_INO_SNAPDIR)) { + *ipp = zfsvfs->z_ctldir; + ASSERT(*ipp != NULL); + if (object == ZFSCTL_INO_SNAPDIR) { + VERIFY(zfsctl_root_lookup(*ipp, "snapshot", ipp, + 0, kcred, NULL, NULL) == 0); + } else { + igrab(*ipp); + } + ZFS_EXIT(zfsvfs); + return (0); + } + + gen_mask = -1ULL >> (64 - 8 * i); + + dprintf("getting %llu [%llu mask %llx]\n", object, fid_gen, gen_mask); + if ((err = zfs_zget(zfsvfs, object, &zp))) { + ZFS_EXIT(zfsvfs); + return (err); + } + + /* Don't export xattr stuff */ + if (zp->z_pflags & ZFS_XATTR) { + iput(ZTOI(zp)); + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENOENT)); + } + + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), &zp_gen, + sizeof (uint64_t)); + zp_gen = zp_gen & gen_mask; + if (zp_gen == 0) + zp_gen = 1; + if ((fid_gen == 0) && (zfsvfs->z_root == object)) + fid_gen = zp_gen; + if (zp->z_unlinked || zp_gen != fid_gen) { + dprintf("znode gen (%llu) != fid gen (%llu)\n", zp_gen, + fid_gen); + iput(ZTOI(zp)); + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENOENT)); + } + + *ipp = ZTOI(zp); + if (*ipp) + zfs_inode_update(ITOZ(*ipp)); + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * Block out VFS ops and close zfsvfs_t + * + * Note, if successful, then we return with the 'z_teardown_lock' and + * 'z_teardown_inactive_lock' write held. We leave ownership of the underlying + * dataset and objset intact so that they can be atomically handed off during + * a subsequent rollback or recv operation and the resume thereafter. + */ +int +zfs_suspend_fs(zfsvfs_t *zfsvfs) +{ + int error; + + if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0) + return (error); + + return (0); +} + +/* + * Rebuild SA and release VOPs. Note that ownership of the underlying dataset + * is an invariant across any of the operations that can be performed while the + * filesystem was suspended. Whether it succeeded or failed, the preconditions + * are the same: the relevant objset and associated dataset are owned by + * zfsvfs, held, and long held on entry. + */ +int +zfs_resume_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds) +{ + int err, err2; + znode_t *zp; + + ASSERT(RRM_WRITE_HELD(&zfsvfs->z_teardown_lock)); + ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); + + /* + * We already own this, so just update the objset_t, as the one we + * had before may have been evicted. + */ + objset_t *os; + VERIFY3P(ds->ds_owner, ==, zfsvfs); + VERIFY(dsl_dataset_long_held(ds)); + VERIFY0(dmu_objset_from_ds(ds, &os)); + + err = zfsvfs_init(zfsvfs, os); + if (err != 0) + goto bail; + + VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); + + zfs_set_fuid_feature(zfsvfs); + zfsvfs->z_rollback_time = jiffies; + + /* + * Attempt to re-establish all the active inodes with their + * dbufs. If a zfs_rezget() fails, then we unhash the inode + * and mark it stale. This prevents a collision if a new + * inode/object is created which must use the same inode + * number. The stale inode will be be released when the + * VFS prunes the dentry holding the remaining references + * on the stale inode. + */ + mutex_enter(&zfsvfs->z_znodes_lock); + for (zp = list_head(&zfsvfs->z_all_znodes); zp; + zp = list_next(&zfsvfs->z_all_znodes, zp)) { + err2 = zfs_rezget(zp); + if (err2) { + remove_inode_hash(ZTOI(zp)); + zp->z_is_stale = B_TRUE; + } + } + mutex_exit(&zfsvfs->z_znodes_lock); + +bail: + /* release the VFS ops */ + rw_exit(&zfsvfs->z_teardown_inactive_lock); + rrm_exit(&zfsvfs->z_teardown_lock, FTAG); + + if (err) { + /* + * Since we couldn't setup the sa framework, try to force + * unmount this file system. + */ + if (zfsvfs->z_os) + (void) zfs_umount(zfsvfs->z_sb); + } + return (err); +} + +int +zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers) +{ + int error; + objset_t *os = zfsvfs->z_os; + dmu_tx_t *tx; + + if (newvers < ZPL_VERSION_INITIAL || newvers > ZPL_VERSION) + return (SET_ERROR(EINVAL)); + + if (newvers < zfsvfs->z_version) + return (SET_ERROR(EINVAL)); + + if (zfs_spa_version_map(newvers) > + spa_version(dmu_objset_spa(zfsvfs->z_os))) + return (SET_ERROR(ENOTSUP)); + + tx = dmu_tx_create(os); + dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_FALSE, ZPL_VERSION_STR); + if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { + dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_TRUE, + ZFS_SA_ATTRS); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); + } + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + return (error); + } + + error = zap_update(os, MASTER_NODE_OBJ, ZPL_VERSION_STR, + 8, 1, &newvers, tx); + + if (error) { + dmu_tx_commit(tx); + return (error); + } + + if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { + uint64_t sa_obj; + + ASSERT3U(spa_version(dmu_objset_spa(zfsvfs->z_os)), >=, + SPA_VERSION_SA); + sa_obj = zap_create(os, DMU_OT_SA_MASTER_NODE, + DMU_OT_NONE, 0, tx); + + error = zap_add(os, MASTER_NODE_OBJ, + ZFS_SA_ATTRS, 8, 1, &sa_obj, tx); + ASSERT0(error); + + VERIFY(0 == sa_set_sa_object(os, sa_obj)); + sa_register_update_callback(os, zfs_sa_upgrade); + } + + spa_history_log_internal_ds(dmu_objset_ds(os), "upgrade", tx, + "from %llu to %llu", zfsvfs->z_version, newvers); + + dmu_tx_commit(tx); + + zfsvfs->z_version = newvers; + + zfs_set_fuid_feature(zfsvfs); + + return (0); +} + +/* + * Read a property stored within the master node. + */ +int +zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value) +{ + const char *pname; + int error = SET_ERROR(ENOENT); + + /* + * Look up the file system's value for the property. For the + * version property, we look up a slightly different string. + */ + if (prop == ZFS_PROP_VERSION) + pname = ZPL_VERSION_STR; + else + pname = zfs_prop_to_name(prop); + + if (os != NULL) { + ASSERT3U(os->os_phys->os_type, ==, DMU_OST_ZFS); + error = zap_lookup(os, MASTER_NODE_OBJ, pname, 8, 1, value); + } + + if (error == ENOENT) { + /* No value set, use the default value */ + switch (prop) { + case ZFS_PROP_VERSION: + *value = ZPL_VERSION; + break; + case ZFS_PROP_NORMALIZE: + case ZFS_PROP_UTF8ONLY: + *value = 0; + break; + case ZFS_PROP_CASE: + *value = ZFS_CASE_SENSITIVE; + break; + case ZFS_PROP_ACLTYPE: + *value = ZFS_ACLTYPE_OFF; + break; + default: + return (error); + } + error = 0; + } + return (error); +} + +/* + * Return true if the coresponding vfs's unmounted flag is set. + * Otherwise return false. + * If this function returns true we know VFS unmount has been initiated. + */ +boolean_t +zfs_get_vfs_flag_unmounted(objset_t *os) +{ + zfsvfs_t *zfvp; + boolean_t unmounted = B_FALSE; + + ASSERT(dmu_objset_type(os) == DMU_OST_ZFS); + + mutex_enter(&os->os_user_ptr_lock); + zfvp = dmu_objset_get_user(os); + if (zfvp != NULL && zfvp->z_unmounted) + unmounted = B_TRUE; + mutex_exit(&os->os_user_ptr_lock); + + return (unmounted); +} + +void +zfs_init(void) +{ + zfsctl_init(); + zfs_znode_init(); + dmu_objset_register_type(DMU_OST_ZFS, zfs_space_delta_cb); + register_filesystem(&zpl_fs_type); +} + +void +zfs_fini(void) +{ + /* + * we don't use outstanding because zpl_posix_acl_free might add more. + */ + taskq_wait(system_delay_taskq); + taskq_wait(system_taskq); + unregister_filesystem(&zpl_fs_type); + zfs_znode_fini(); + zfsctl_fini(); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_suspend_fs); +EXPORT_SYMBOL(zfs_resume_fs); +EXPORT_SYMBOL(zfs_userspace_one); +EXPORT_SYMBOL(zfs_userspace_many); +EXPORT_SYMBOL(zfs_set_userquota); +EXPORT_SYMBOL(zfs_owner_overquota); +EXPORT_SYMBOL(zfs_fuid_overquota); +EXPORT_SYMBOL(zfs_fuid_overobjquota); +EXPORT_SYMBOL(zfs_set_version); +EXPORT_SYMBOL(zfsvfs_create); +EXPORT_SYMBOL(zfsvfs_free); +EXPORT_SYMBOL(zfs_is_readonly); +EXPORT_SYMBOL(zfs_domount); +EXPORT_SYMBOL(zfs_preumount); +EXPORT_SYMBOL(zfs_umount); +EXPORT_SYMBOL(zfs_remount); +EXPORT_SYMBOL(zfs_statvfs); +EXPORT_SYMBOL(zfs_vget); +EXPORT_SYMBOL(zfs_prune); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_vnops.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_vnops.c @@ -0,0 +1,4950 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + * Copyright 2017 Nexenta Systems, Inc. + */ + +/* Portions Copyright 2007 Jeremy Teo */ +/* Portions Copyright 2010 Robert Milkowski */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fs/fs_subr.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Programming rules. + * + * Each vnode op performs some logical unit of work. To do this, the ZPL must + * properly lock its in-core state, create a DMU transaction, do the work, + * record this work in the intent log (ZIL), commit the DMU transaction, + * and wait for the intent log to commit if it is a synchronous operation. + * Moreover, the vnode ops must work in both normal and log replay context. + * The ordering of events is important to avoid deadlocks and references + * to freed memory. The example below illustrates the following Big Rules: + * + * (1) A check must be made in each zfs thread for a mounted file system. + * This is done avoiding races using ZFS_ENTER(zfsvfs). + * A ZFS_EXIT(zfsvfs) is needed before all returns. Any znodes + * must be checked with ZFS_VERIFY_ZP(zp). Both of these macros + * can return EIO from the calling function. + * + * (2) iput() should always be the last thing except for zil_commit() + * (if necessary) and ZFS_EXIT(). This is for 3 reasons: + * First, if it's the last reference, the vnode/znode + * can be freed, so the zp may point to freed memory. Second, the last + * reference will call zfs_zinactive(), which may induce a lot of work -- + * pushing cached pages (which acquires range locks) and syncing out + * cached atime changes. Third, zfs_zinactive() may require a new tx, + * which could deadlock the system if you were already holding one. + * If you must call iput() within a tx then use zfs_iput_async(). + * + * (3) All range locks must be grabbed before calling dmu_tx_assign(), + * as they can span dmu_tx_assign() calls. + * + * (4) If ZPL locks are held, pass TXG_NOWAIT as the second argument to + * dmu_tx_assign(). This is critical because we don't want to block + * while holding locks. + * + * If no ZPL locks are held (aside from ZFS_ENTER()), use TXG_WAIT. This + * reduces lock contention and CPU usage when we must wait (note that if + * throughput is constrained by the storage, nearly every transaction + * must wait). + * + * Note, in particular, that if a lock is sometimes acquired before + * the tx assigns, and sometimes after (e.g. z_lock), then failing + * to use a non-blocking assign can deadlock the system. The scenario: + * + * Thread A has grabbed a lock before calling dmu_tx_assign(). + * Thread B is in an already-assigned tx, and blocks for this lock. + * Thread A calls dmu_tx_assign(TXG_WAIT) and blocks in txg_wait_open() + * forever, because the previous txg can't quiesce until B's tx commits. + * + * If dmu_tx_assign() returns ERESTART and zfsvfs->z_assign is TXG_NOWAIT, + * then drop all locks, call dmu_tx_wait(), and try again. On subsequent + * calls to dmu_tx_assign(), pass TXG_WAITED rather than TXG_NOWAIT, + * to indicate that this operation has already called dmu_tx_wait(). + * This will ensure that we don't retry forever, waiting a short bit + * each time. + * + * (5) If the operation succeeded, generate the intent log entry for it + * before dropping locks. This ensures that the ordering of events + * in the intent log matches the order in which they actually occurred. + * During ZIL replay the zfs_log_* functions will update the sequence + * number to indicate the zil transaction has replayed. + * + * (6) At the end of each vnode op, the DMU tx must always commit, + * regardless of whether there were any errors. + * + * (7) After dropping all locks, invoke zil_commit(zilog, foid) + * to ensure that synchronous semantics are provided when necessary. + * + * In general, this is how things should be ordered in each vnode op: + * + * ZFS_ENTER(zfsvfs); // exit if unmounted + * top: + * zfs_dirent_lock(&dl, ...) // lock directory entry (may igrab()) + * rw_enter(...); // grab any other locks you need + * tx = dmu_tx_create(...); // get DMU tx + * dmu_tx_hold_*(); // hold each object you might modify + * error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + * if (error) { + * rw_exit(...); // drop locks + * zfs_dirent_unlock(dl); // unlock directory entry + * iput(...); // release held vnodes + * if (error == ERESTART) { + * waited = B_TRUE; + * dmu_tx_wait(tx); + * dmu_tx_abort(tx); + * goto top; + * } + * dmu_tx_abort(tx); // abort DMU tx + * ZFS_EXIT(zfsvfs); // finished in zfs + * return (error); // really out of space + * } + * error = do_real_work(); // do whatever this VOP does + * if (error == 0) + * zfs_log_*(...); // on success, make ZIL entry + * dmu_tx_commit(tx); // commit DMU tx -- error or not + * rw_exit(...); // drop locks + * zfs_dirent_unlock(dl); // unlock directory entry + * iput(...); // release held vnodes + * zil_commit(zilog, foid); // synchronous when necessary + * ZFS_EXIT(zfsvfs); // finished in zfs + * return (error); // done, report error + */ + +/* + * Virus scanning is unsupported. It would be possible to add a hook + * here to performance the required virus scan. This could be done + * entirely in the kernel or potentially as an update to invoke a + * scanning utility. + */ +static int +zfs_vscan(struct inode *ip, cred_t *cr, int async) +{ + return (0); +} + +/* ARGSUSED */ +int +zfs_open(struct inode *ip, int mode, int flag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + /* Honor ZFS_APPENDONLY file attribute */ + if ((mode & FMODE_WRITE) && (zp->z_pflags & ZFS_APPENDONLY) && + ((flag & O_APPEND) == 0)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + /* Virus scan eligible files on open */ + if (!zfs_has_ctldir(zp) && zfsvfs->z_vscan && S_ISREG(ip->i_mode) && + !(zp->z_pflags & ZFS_AV_QUARANTINED) && zp->z_size > 0) { + if (zfs_vscan(ip, cr, 0) != 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EACCES)); + } + } + + /* Keep a count of the synchronous opens in the znode */ + if (flag & O_SYNC) + atomic_inc_32(&zp->z_sync_cnt); + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* ARGSUSED */ +int +zfs_close(struct inode *ip, int flag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + /* Decrement the synchronous opens in the znode */ + if (flag & O_SYNC) + atomic_dec_32(&zp->z_sync_cnt); + + if (!zfs_has_ctldir(zp) && zfsvfs->z_vscan && S_ISREG(ip->i_mode) && + !(zp->z_pflags & ZFS_AV_QUARANTINED) && zp->z_size > 0) + VERIFY(zfs_vscan(ip, cr, 1) == 0); + + ZFS_EXIT(zfsvfs); + return (0); +} + +#if defined(SEEK_HOLE) && defined(SEEK_DATA) +/* + * Lseek support for finding holes (cmd == SEEK_HOLE) and + * data (cmd == SEEK_DATA). "off" is an in/out parameter. + */ +static int +zfs_holey_common(struct inode *ip, int cmd, loff_t *off) +{ + znode_t *zp = ITOZ(ip); + uint64_t noff = (uint64_t)*off; /* new offset */ + uint64_t file_sz; + int error; + boolean_t hole; + + file_sz = zp->z_size; + if (noff >= file_sz) { + return (SET_ERROR(ENXIO)); + } + + if (cmd == SEEK_HOLE) + hole = B_TRUE; + else + hole = B_FALSE; + + error = dmu_offset_next(ZTOZSB(zp)->z_os, zp->z_id, hole, &noff); + + if (error == ESRCH) + return (SET_ERROR(ENXIO)); + + /* file was dirty, so fall back to using generic logic */ + if (error == EBUSY) { + if (hole) + *off = file_sz; + + return (0); + } + + /* + * We could find a hole that begins after the logical end-of-file, + * because dmu_offset_next() only works on whole blocks. If the + * EOF falls mid-block, then indicate that the "virtual hole" + * at the end of the file begins at the logical EOF, rather than + * at the end of the last block. + */ + if (noff > file_sz) { + ASSERT(hole); + noff = file_sz; + } + + if (noff < *off) + return (error); + *off = noff; + return (error); +} + +int +zfs_holey(struct inode *ip, int cmd, loff_t *off) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + error = zfs_holey_common(ip, cmd, off); + + ZFS_EXIT(zfsvfs); + return (error); +} +#endif /* SEEK_HOLE && SEEK_DATA */ + +#if defined(_KERNEL) +/* + * When a file is memory mapped, we must keep the IO data synchronized + * between the DMU cache and the memory mapped pages. What this means: + * + * On Write: If we find a memory mapped page, we write to *both* + * the page and the dmu buffer. + */ +static void +update_pages(struct inode *ip, int64_t start, int len, + objset_t *os, uint64_t oid) +{ + struct address_space *mp = ip->i_mapping; + struct page *pp; + uint64_t nbytes; + int64_t off; + void *pb; + + off = start & (PAGE_SIZE-1); + for (start &= PAGE_MASK; len > 0; start += PAGE_SIZE) { + nbytes = MIN(PAGE_SIZE - off, len); + + pp = find_lock_page(mp, start >> PAGE_SHIFT); + if (pp) { + if (mapping_writably_mapped(mp)) + flush_dcache_page(pp); + + pb = kmap(pp); + (void) dmu_read(os, oid, start+off, nbytes, pb+off, + DMU_READ_PREFETCH); + kunmap(pp); + + if (mapping_writably_mapped(mp)) + flush_dcache_page(pp); + + mark_page_accessed(pp); + SetPageUptodate(pp); + ClearPageError(pp); + unlock_page(pp); + put_page(pp); + } + + len -= nbytes; + off = 0; + } +} + +/* + * When a file is memory mapped, we must keep the IO data synchronized + * between the DMU cache and the memory mapped pages. What this means: + * + * On Read: We "read" preferentially from memory mapped pages, + * else we default from the dmu buffer. + * + * NOTE: We will always "break up" the IO into PAGESIZE uiomoves when + * the file is memory mapped. + */ +static int +mappedread(struct inode *ip, int nbytes, uio_t *uio) +{ + struct address_space *mp = ip->i_mapping; + struct page *pp; + znode_t *zp = ITOZ(ip); + int64_t start, off; + uint64_t bytes; + int len = nbytes; + int error = 0; + void *pb; + + start = uio->uio_loffset; + off = start & (PAGE_SIZE-1); + for (start &= PAGE_MASK; len > 0; start += PAGE_SIZE) { + bytes = MIN(PAGE_SIZE - off, len); + + pp = find_lock_page(mp, start >> PAGE_SHIFT); + if (pp) { + ASSERT(PageUptodate(pp)); + + pb = kmap(pp); + error = uiomove(pb + off, bytes, UIO_READ, uio); + kunmap(pp); + + if (mapping_writably_mapped(mp)) + flush_dcache_page(pp); + + mark_page_accessed(pp); + unlock_page(pp); + put_page(pp); + } else { + error = dmu_read_uio_dbuf(sa_get_db(zp->z_sa_hdl), + uio, bytes); + } + + len -= bytes; + off = 0; + if (error) + break; + } + return (error); +} +#endif /* _KERNEL */ + +unsigned long zfs_read_chunk_size = 1024 * 1024; /* Tunable */ +unsigned long zfs_delete_blocks = DMU_MAX_DELETEBLKCNT; + +/* + * Read bytes from specified file into supplied buffer. + * + * IN: ip - inode of file to be read from. + * uio - structure supplying read location, range info, + * and return buffer. + * ioflag - FSYNC flags; used to provide FRSYNC semantics. + * O_DIRECT flag; used to bypass page cache. + * cr - credentials of caller. + * + * OUT: uio - updated offset and range, buffer filled. + * + * RETURN: 0 on success, error code on failure. + * + * Side Effects: + * inode - atime updated if byte count > 0 + */ +/* ARGSUSED */ +int +zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + ssize_t n, nbytes; + int error = 0; + rl_t *rl; +#ifdef HAVE_UIO_ZEROCOPY + xuio_t *xuio = NULL; +#endif /* HAVE_UIO_ZEROCOPY */ + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if (zp->z_pflags & ZFS_AV_QUARANTINED) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EACCES)); + } + + /* + * Validate file offset + */ + if (uio->uio_loffset < (offset_t)0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * Fasttrack empty reads + */ + if (uio->uio_resid == 0) { + ZFS_EXIT(zfsvfs); + return (0); + } + + /* + * If we're in FRSYNC mode, sync out this znode before reading it. + * Only do this for non-snapshots. + */ + if (zfsvfs->z_log && + (ioflag & FRSYNC || zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)) + zil_commit(zfsvfs->z_log, zp->z_id); + + /* + * Lock the range against changes. + */ + rl = zfs_range_lock(&zp->z_range_lock, uio->uio_loffset, uio->uio_resid, + RL_READER); + + /* + * If we are reading past end-of-file we can skip + * to the end; but we might still need to set atime. + */ + if (uio->uio_loffset >= zp->z_size) { + error = 0; + goto out; + } + + ASSERT(uio->uio_loffset < zp->z_size); + n = MIN(uio->uio_resid, zp->z_size - uio->uio_loffset); + +#ifdef HAVE_UIO_ZEROCOPY + if ((uio->uio_extflg == UIO_XUIO) && + (((xuio_t *)uio)->xu_type == UIOTYPE_ZEROCOPY)) { + int nblk; + int blksz = zp->z_blksz; + uint64_t offset = uio->uio_loffset; + + xuio = (xuio_t *)uio; + if ((ISP2(blksz))) { + nblk = (P2ROUNDUP(offset + n, blksz) - P2ALIGN(offset, + blksz)) / blksz; + } else { + ASSERT(offset + n <= blksz); + nblk = 1; + } + (void) dmu_xuio_init(xuio, nblk); + + if (vn_has_cached_data(ip)) { + /* + * For simplicity, we always allocate a full buffer + * even if we only expect to read a portion of a block. + */ + while (--nblk >= 0) { + (void) dmu_xuio_add(xuio, + dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl), + blksz), 0, blksz); + } + } + } +#endif /* HAVE_UIO_ZEROCOPY */ + + while (n > 0) { + nbytes = MIN(n, zfs_read_chunk_size - + P2PHASE(uio->uio_loffset, zfs_read_chunk_size)); + + if (zp->z_is_mapped && !(ioflag & O_DIRECT)) { + error = mappedread(ip, nbytes, uio); + } else { + error = dmu_read_uio_dbuf(sa_get_db(zp->z_sa_hdl), + uio, nbytes); + } + + if (error) { + /* convert checksum errors into IO errors */ + if (error == ECKSUM) + error = SET_ERROR(EIO); + break; + } + + n -= nbytes; + } +out: + zfs_range_unlock(rl); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Write the bytes to a file. + * + * IN: ip - inode of file to be written to. + * uio - structure supplying write location, range info, + * and data buffer. + * ioflag - FAPPEND flag set if in append mode. + * O_DIRECT flag; used to bypass page cache. + * cr - credentials of caller. + * + * OUT: uio - updated offset and range. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * ip - ctime|mtime updated if byte count > 0 + */ + +/* ARGSUSED */ +int +zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + rlim64_t limit = uio->uio_limit; + ssize_t start_resid = uio->uio_resid; + ssize_t tx_bytes; + uint64_t end_size; + dmu_tx_t *tx; + zfsvfs_t *zfsvfs = ZTOZSB(zp); + zilog_t *zilog; + offset_t woff; + ssize_t n, nbytes; + rl_t *rl; + int max_blksz = zfsvfs->z_max_blksz; + int error = 0; + arc_buf_t *abuf; + const iovec_t *aiov = NULL; + xuio_t *xuio = NULL; + int write_eof; + int count = 0; + sa_bulk_attr_t bulk[4]; + uint64_t mtime[2], ctime[2]; + uint32_t uid; +#ifdef HAVE_UIO_ZEROCOPY + int i_iov = 0; + const iovec_t *iovp = uio->uio_iov; + ASSERTV(int iovcnt = uio->uio_iovcnt); +#endif + + /* + * Fasttrack empty write + */ + n = start_resid; + if (n == 0) + return (0); + + if (limit == RLIM64_INFINITY || limit > MAXOFFSET_T) + limit = MAXOFFSET_T; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), NULL, + &zp->z_size, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, 8); + + /* + * Callers might not be able to detect properly that we are read-only, + * so check it explicitly here. + */ + if (zfs_is_readonly(zfsvfs)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EROFS)); + } + + /* + * If immutable or not appending then return EPERM + */ + if ((zp->z_pflags & (ZFS_IMMUTABLE | ZFS_READONLY)) || + ((zp->z_pflags & ZFS_APPENDONLY) && !(ioflag & FAPPEND) && + (uio->uio_loffset < zp->z_size))) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + zilog = zfsvfs->z_log; + + /* + * Validate file offset + */ + woff = ioflag & FAPPEND ? zp->z_size : uio->uio_loffset; + if (woff < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * Pre-fault the pages to ensure slow (eg NFS) pages + * don't hold up txg. + * Skip this if uio contains loaned arc_buf. + */ +#ifdef HAVE_UIO_ZEROCOPY + if ((uio->uio_extflg == UIO_XUIO) && + (((xuio_t *)uio)->xu_type == UIOTYPE_ZEROCOPY)) + xuio = (xuio_t *)uio; + else +#endif + uio_prefaultpages(MIN(n, max_blksz), uio); + + /* + * If in append mode, set the io offset pointer to eof. + */ + if (ioflag & FAPPEND) { + /* + * Obtain an appending range lock to guarantee file append + * semantics. We reset the write offset once we have the lock. + */ + rl = zfs_range_lock(&zp->z_range_lock, 0, n, RL_APPEND); + woff = rl->r_off; + if (rl->r_len == UINT64_MAX) { + /* + * We overlocked the file because this write will cause + * the file block size to increase. + * Note that zp_size cannot change with this lock held. + */ + woff = zp->z_size; + } + uio->uio_loffset = woff; + } else { + /* + * Note that if the file block size will change as a result of + * this write, then this range lock will lock the entire file + * so that we can re-write the block safely. + */ + rl = zfs_range_lock(&zp->z_range_lock, woff, n, RL_WRITER); + } + + if (woff >= limit) { + zfs_range_unlock(rl); + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EFBIG)); + } + + if ((woff + n) > limit || woff > (limit - n)) + n = limit - woff; + + /* Will this write extend the file length? */ + write_eof = (woff + n > zp->z_size); + + end_size = MAX(zp->z_size, woff + n); + + /* + * Write the file in reasonable size chunks. Each chunk is written + * in a separate transaction; this keeps the intent log records small + * and allows us to do more fine-grained space accounting. + */ + while (n > 0) { + abuf = NULL; + woff = uio->uio_loffset; + if (zfs_owner_overquota(zfsvfs, zp, B_FALSE) || + zfs_owner_overquota(zfsvfs, zp, B_TRUE)) { + if (abuf != NULL) + dmu_return_arcbuf(abuf); + error = SET_ERROR(EDQUOT); + break; + } + + if (xuio && abuf == NULL) { +#ifdef HAVE_UIO_ZEROCOPY + ASSERT(i_iov < iovcnt); + ASSERT3U(uio->uio_segflg, !=, UIO_BVEC); + aiov = &iovp[i_iov]; + abuf = dmu_xuio_arcbuf(xuio, i_iov); + dmu_xuio_clear(xuio, i_iov); + ASSERT((aiov->iov_base == abuf->b_data) || + ((char *)aiov->iov_base - (char *)abuf->b_data + + aiov->iov_len == arc_buf_size(abuf))); + i_iov++; +#endif + } else if (abuf == NULL && n >= max_blksz && + woff >= zp->z_size && + P2PHASE(woff, max_blksz) == 0 && + zp->z_blksz == max_blksz) { + /* + * This write covers a full block. "Borrow" a buffer + * from the dmu so that we can fill it before we enter + * a transaction. This avoids the possibility of + * holding up the transaction if the data copy hangs + * up on a pagefault (e.g., from an NFS server mapping). + */ + size_t cbytes; + + abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl), + max_blksz); + ASSERT(abuf != NULL); + ASSERT(arc_buf_size(abuf) == max_blksz); + if ((error = uiocopy(abuf->b_data, max_blksz, + UIO_WRITE, uio, &cbytes))) { + dmu_return_arcbuf(abuf); + break; + } + ASSERT(cbytes == max_blksz); + } + + /* + * Start a transaction. + */ + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + dmu_tx_hold_write(tx, zp->z_id, woff, MIN(n, max_blksz)); + zfs_sa_upgrade_txholds(tx, zp); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + if (abuf != NULL) + dmu_return_arcbuf(abuf); + break; + } + + /* + * If zfs_range_lock() over-locked we grow the blocksize + * and then reduce the lock range. This will only happen + * on the first iteration since zfs_range_reduce() will + * shrink down r_len to the appropriate size. + */ + if (rl->r_len == UINT64_MAX) { + uint64_t new_blksz; + + if (zp->z_blksz > max_blksz) { + /* + * File's blocksize is already larger than the + * "recordsize" property. Only let it grow to + * the next power of 2. + */ + ASSERT(!ISP2(zp->z_blksz)); + new_blksz = MIN(end_size, + 1 << highbit64(zp->z_blksz)); + } else { + new_blksz = MIN(end_size, max_blksz); + } + zfs_grow_blocksize(zp, new_blksz, tx); + zfs_range_reduce(rl, woff, n); + } + + /* + * XXX - should we really limit each write to z_max_blksz? + * Perhaps we should use SPA_MAXBLOCKSIZE chunks? + */ + nbytes = MIN(n, max_blksz - P2PHASE(woff, max_blksz)); + + if (abuf == NULL) { + tx_bytes = uio->uio_resid; + error = dmu_write_uio_dbuf(sa_get_db(zp->z_sa_hdl), + uio, nbytes, tx); + tx_bytes -= uio->uio_resid; + } else { + tx_bytes = nbytes; + ASSERT(xuio == NULL || tx_bytes == aiov->iov_len); + /* + * If this is not a full block write, but we are + * extending the file past EOF and this data starts + * block-aligned, use assign_arcbuf(). Otherwise, + * write via dmu_write(). + */ + if (tx_bytes < max_blksz && (!write_eof || + aiov->iov_base != abuf->b_data)) { + ASSERT(xuio); + dmu_write(zfsvfs->z_os, zp->z_id, woff, + aiov->iov_len, aiov->iov_base, tx); + dmu_return_arcbuf(abuf); + xuio_stat_wbuf_copied(); + } else { + ASSERT(xuio || tx_bytes == max_blksz); + dmu_assign_arcbuf(sa_get_db(zp->z_sa_hdl), + woff, abuf, tx); + } + ASSERT(tx_bytes <= uio->uio_resid); + uioskip(uio, tx_bytes); + } + if (tx_bytes && zp->z_is_mapped && !(ioflag & O_DIRECT)) { + update_pages(ip, woff, + tx_bytes, zfsvfs->z_os, zp->z_id); + } + + /* + * If we made no progress, we're done. If we made even + * partial progress, update the znode and ZIL accordingly. + */ + if (tx_bytes == 0) { + (void) sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(zfsvfs), + (void *)&zp->z_size, sizeof (uint64_t), tx); + dmu_tx_commit(tx); + ASSERT(error != 0); + break; + } + + /* + * Clear Set-UID/Set-GID bits on successful write if not + * privileged and at least one of the execute bits is set. + * + * It would be nice to to this after all writes have + * been done, but that would still expose the ISUID/ISGID + * to another app after the partial write is committed. + * + * Note: we don't call zfs_fuid_map_id() here because + * user 0 is not an ephemeral uid. + */ + mutex_enter(&zp->z_acl_lock); + uid = KUID_TO_SUID(ip->i_uid); + if ((zp->z_mode & (S_IXUSR | (S_IXUSR >> 3) | + (S_IXUSR >> 6))) != 0 && + (zp->z_mode & (S_ISUID | S_ISGID)) != 0 && + secpolicy_vnode_setid_retain(cr, + ((zp->z_mode & S_ISUID) != 0 && uid == 0)) != 0) { + uint64_t newmode; + zp->z_mode &= ~(S_ISUID | S_ISGID); + ip->i_mode = newmode = zp->z_mode; + (void) sa_update(zp->z_sa_hdl, SA_ZPL_MODE(zfsvfs), + (void *)&newmode, sizeof (uint64_t), tx); + } + mutex_exit(&zp->z_acl_lock); + + zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime); + + /* + * Update the file size (zp_size) if it has changed; + * account for possible concurrent updates. + */ + while ((end_size = zp->z_size) < uio->uio_loffset) { + (void) atomic_cas_64(&zp->z_size, end_size, + uio->uio_loffset); + ASSERT(error == 0); + } + /* + * If we are replaying and eof is non zero then force + * the file size to the specified eof. Note, there's no + * concurrency during replay. + */ + if (zfsvfs->z_replay && zfsvfs->z_replay_eof != 0) + zp->z_size = zfsvfs->z_replay_eof; + + error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); + + zfs_log_write(zilog, tx, TX_WRITE, zp, woff, tx_bytes, ioflag, + NULL, NULL); + dmu_tx_commit(tx); + + if (error != 0) + break; + ASSERT(tx_bytes == nbytes); + n -= nbytes; + + if (!xuio && n > 0) + uio_prefaultpages(MIN(n, max_blksz), uio); + } + + zfs_inode_update(zp); + zfs_range_unlock(rl); + + /* + * If we're in replay mode, or we made no progress, return error. + * Otherwise, it's at least a partial write, so it's successful. + */ + if (zfsvfs->z_replay || uio->uio_resid == start_resid) { + ZFS_EXIT(zfsvfs); + return (error); + } + + if (ioflag & (FSYNC | FDSYNC) || + zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, zp->z_id); + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * Drop a reference on the passed inode asynchronously. This ensures + * that the caller will never drop the last reference on an inode in + * the current context. Doing so while holding open a tx could result + * in a deadlock if iput_final() re-enters the filesystem code. + */ +void +zfs_iput_async(struct inode *ip) +{ + objset_t *os = ITOZSB(ip)->z_os; + + ASSERT(atomic_read(&ip->i_count) > 0); + ASSERT(os != NULL); + + if (atomic_read(&ip->i_count) == 1) + VERIFY(taskq_dispatch(dsl_pool_iput_taskq(dmu_objset_pool(os)), + (task_func_t *)iput, ip, TQ_SLEEP) != TASKQID_INVALID); + else + iput(ip); +} + +void +zfs_get_done(zgd_t *zgd, int error) +{ + znode_t *zp = zgd->zgd_private; + + if (zgd->zgd_db) + dmu_buf_rele(zgd->zgd_db, zgd); + + zfs_range_unlock(zgd->zgd_rl); + + /* + * Release the vnode asynchronously as we currently have the + * txg stopped from syncing. + */ + zfs_iput_async(ZTOI(zp)); + + if (error == 0 && zgd->zgd_bp) + zil_add_block(zgd->zgd_zilog, zgd->zgd_bp); + + kmem_free(zgd, sizeof (zgd_t)); +} + +#ifdef DEBUG +static int zil_fault_io = 0; +#endif + +/* + * Get data to generate a TX_WRITE intent log record. + */ +int +zfs_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio) +{ + zfsvfs_t *zfsvfs = arg; + objset_t *os = zfsvfs->z_os; + znode_t *zp; + uint64_t object = lr->lr_foid; + uint64_t offset = lr->lr_offset; + uint64_t size = lr->lr_length; + dmu_buf_t *db; + zgd_t *zgd; + int error = 0; + + ASSERT(zio != NULL); + ASSERT(size != 0); + + /* + * Nothing to do if the file has been removed + */ + if (zfs_zget(zfsvfs, object, &zp) != 0) + return (SET_ERROR(ENOENT)); + if (zp->z_unlinked) { + /* + * Release the vnode asynchronously as we currently have the + * txg stopped from syncing. + */ + zfs_iput_async(ZTOI(zp)); + return (SET_ERROR(ENOENT)); + } + + zgd = (zgd_t *)kmem_zalloc(sizeof (zgd_t), KM_SLEEP); + zgd->zgd_zilog = zfsvfs->z_log; + zgd->zgd_private = zp; + + /* + * Write records come in two flavors: immediate and indirect. + * For small writes it's cheaper to store the data with the + * log record (immediate); for large writes it's cheaper to + * sync the data and get a pointer to it (indirect) so that + * we don't have to write the data twice. + */ + if (buf != NULL) { /* immediate write */ + zgd->zgd_rl = zfs_range_lock(&zp->z_range_lock, offset, size, + RL_READER); + /* test for truncation needs to be done while range locked */ + if (offset >= zp->z_size) { + error = SET_ERROR(ENOENT); + } else { + error = dmu_read(os, object, offset, size, buf, + DMU_READ_NO_PREFETCH); + } + ASSERT(error == 0 || error == ENOENT); + } else { /* indirect write */ + /* + * Have to lock the whole block to ensure when it's + * written out and its checksum is being calculated + * that no one can change the data. We need to re-check + * blocksize after we get the lock in case it's changed! + */ + for (;;) { + uint64_t blkoff; + size = zp->z_blksz; + blkoff = ISP2(size) ? P2PHASE(offset, size) : offset; + offset -= blkoff; + zgd->zgd_rl = zfs_range_lock(&zp->z_range_lock, offset, + size, RL_READER); + if (zp->z_blksz == size) + break; + offset += blkoff; + zfs_range_unlock(zgd->zgd_rl); + } + /* test for truncation needs to be done while range locked */ + if (lr->lr_offset >= zp->z_size) + error = SET_ERROR(ENOENT); +#ifdef DEBUG + if (zil_fault_io) { + error = SET_ERROR(EIO); + zil_fault_io = 0; + } +#endif + if (error == 0) + error = dmu_buf_hold(os, object, offset, zgd, &db, + DMU_READ_NO_PREFETCH); + + if (error == 0) { + blkptr_t *bp = &lr->lr_blkptr; + + zgd->zgd_db = db; + zgd->zgd_bp = bp; + + ASSERT(db->db_offset == offset); + ASSERT(db->db_size == size); + + error = dmu_sync(zio, lr->lr_common.lrc_txg, + zfs_get_done, zgd); + ASSERT(error || lr->lr_length <= size); + + /* + * On success, we need to wait for the write I/O + * initiated by dmu_sync() to complete before we can + * release this dbuf. We will finish everything up + * in the zfs_get_done() callback. + */ + if (error == 0) + return (0); + + if (error == EALREADY) { + lr->lr_common.lrc_txtype = TX_WRITE2; + error = 0; + } + } + } + + zfs_get_done(zgd, error); + + return (error); +} + +/*ARGSUSED*/ +int +zfs_access(struct inode *ip, int mode, int flag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if (flag & V_ACE_MASK) + error = zfs_zaccess(zp, mode, flag, B_FALSE, cr); + else + error = zfs_zaccess_rwx(zp, mode, flag, cr); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Lookup an entry in a directory, or an extended attribute directory. + * If it exists, return a held inode reference for it. + * + * IN: dip - inode of directory to search. + * nm - name of entry to lookup. + * flags - LOOKUP_XATTR set if looking for an attribute. + * cr - credentials of caller. + * direntflags - directory lookup flags + * realpnp - returned pathname. + * + * OUT: ipp - inode of located entry, NULL if not found. + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * NA + */ +/* ARGSUSED */ +int +zfs_lookup(struct inode *dip, char *nm, struct inode **ipp, int flags, + cred_t *cr, int *direntflags, pathname_t *realpnp) +{ + znode_t *zdp = ITOZ(dip); + zfsvfs_t *zfsvfs = ITOZSB(dip); + int error = 0; + + /* + * Fast path lookup, however we must skip DNLC lookup + * for case folding or normalizing lookups because the + * DNLC code only stores the passed in name. This means + * creating 'a' and removing 'A' on a case insensitive + * file system would work, but DNLC still thinks 'a' + * exists and won't let you create it again on the next + * pass through fast path. + */ + if (!(flags & (LOOKUP_XATTR | FIGNORECASE))) { + + if (!S_ISDIR(dip->i_mode)) { + return (SET_ERROR(ENOTDIR)); + } else if (zdp->z_sa_hdl == NULL) { + return (SET_ERROR(EIO)); + } + + if (nm[0] == 0 || (nm[0] == '.' && nm[1] == '\0')) { + error = zfs_fastaccesschk_execute(zdp, cr); + if (!error) { + *ipp = dip; + igrab(*ipp); + return (0); + } + return (error); +#ifdef HAVE_DNLC + } else if (!zdp->z_zfsvfs->z_norm && + (zdp->z_zfsvfs->z_case == ZFS_CASE_SENSITIVE)) { + + vnode_t *tvp = dnlc_lookup(dvp, nm); + + if (tvp) { + error = zfs_fastaccesschk_execute(zdp, cr); + if (error) { + iput(tvp); + return (error); + } + if (tvp == DNLC_NO_VNODE) { + iput(tvp); + return (SET_ERROR(ENOENT)); + } else { + *vpp = tvp; + return (specvp_check(vpp, cr)); + } + } +#endif /* HAVE_DNLC */ + } + } + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zdp); + + *ipp = NULL; + + if (flags & LOOKUP_XATTR) { + /* + * We don't allow recursive attributes.. + * Maybe someday we will. + */ + if (zdp->z_pflags & ZFS_XATTR) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + if ((error = zfs_get_xattrdir(zdp, ipp, cr, flags))) { + ZFS_EXIT(zfsvfs); + return (error); + } + + /* + * Do we have permission to get into attribute directory? + */ + + if ((error = zfs_zaccess(ITOZ(*ipp), ACE_EXECUTE, 0, + B_FALSE, cr))) { + iput(*ipp); + *ipp = NULL; + } + + ZFS_EXIT(zfsvfs); + return (error); + } + + if (!S_ISDIR(dip->i_mode)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENOTDIR)); + } + + /* + * Check accessibility of directory. + */ + + if ((error = zfs_zaccess(zdp, ACE_EXECUTE, 0, B_FALSE, cr))) { + ZFS_EXIT(zfsvfs); + return (error); + } + + if (zfsvfs->z_utf8 && u8_validate(nm, strlen(nm), + NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + + error = zfs_dirlook(zdp, nm, ipp, flags, direntflags, realpnp); + if ((error == 0) && (*ipp)) + zfs_inode_update(ITOZ(*ipp)); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Attempt to create a new entry in a directory. If the entry + * already exists, truncate the file if permissible, else return + * an error. Return the ip of the created or trunc'd file. + * + * IN: dip - inode of directory to put new file entry in. + * name - name of new file entry. + * vap - attributes of new file. + * excl - flag indicating exclusive or non-exclusive mode. + * mode - mode to open file with. + * cr - credentials of caller. + * flag - large file flag [UNUSED]. + * vsecp - ACL to be set + * + * OUT: ipp - inode of created or trunc'd entry. + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * dip - ctime|mtime updated if new entry created + * ip - ctime|mtime always, atime if new + */ + +/* ARGSUSED */ +int +zfs_create(struct inode *dip, char *name, vattr_t *vap, int excl, + int mode, struct inode **ipp, cred_t *cr, int flag, vsecattr_t *vsecp) +{ + znode_t *zp, *dzp = ITOZ(dip); + zfsvfs_t *zfsvfs = ITOZSB(dip); + zilog_t *zilog; + objset_t *os; + zfs_dirlock_t *dl; + dmu_tx_t *tx; + int error; + uid_t uid; + gid_t gid; + zfs_acl_ids_t acl_ids; + boolean_t fuid_dirtied; + boolean_t have_acl = B_FALSE; + boolean_t waited = B_FALSE; + + /* + * If we have an ephemeral id, ACL, or XVATTR then + * make sure file system is at proper version + */ + + gid = crgetgid(cr); + uid = crgetuid(cr); + + if (zfsvfs->z_use_fuids == B_FALSE && + (vsecp || IS_EPHEMERAL(uid) || IS_EPHEMERAL(gid))) + return (SET_ERROR(EINVAL)); + + if (name == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + os = zfsvfs->z_os; + zilog = zfsvfs->z_log; + + if (zfsvfs->z_utf8 && u8_validate(name, strlen(name), + NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + + if (vap->va_mask & ATTR_XVATTR) { + if ((error = secpolicy_xvattr((xvattr_t *)vap, + crgetuid(cr), cr, vap->va_mode)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + } + +top: + *ipp = NULL; + if (*name == '\0') { + /* + * Null component name refers to the directory itself. + */ + igrab(dip); + zp = dzp; + dl = NULL; + error = 0; + } else { + /* possible igrab(zp) */ + int zflg = 0; + + if (flag & FIGNORECASE) + zflg |= ZCILOOK; + + error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg, + NULL, NULL); + if (error) { + if (have_acl) + zfs_acl_ids_free(&acl_ids); + if (strcmp(name, "..") == 0) + error = SET_ERROR(EISDIR); + ZFS_EXIT(zfsvfs); + return (error); + } + } + + if (zp == NULL) { + uint64_t txtype; + + /* + * Create a new file object and update the directory + * to reference it. + */ + if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) { + if (have_acl) + zfs_acl_ids_free(&acl_ids); + goto out; + } + + /* + * We only support the creation of regular files in + * extended attribute directories. + */ + + if ((dzp->z_pflags & ZFS_XATTR) && !S_ISREG(vap->va_mode)) { + if (have_acl) + zfs_acl_ids_free(&acl_ids); + error = SET_ERROR(EINVAL); + goto out; + } + + if (!have_acl && (error = zfs_acl_ids_create(dzp, 0, vap, + cr, vsecp, &acl_ids)) != 0) + goto out; + have_acl = B_TRUE; + + if (zfs_acl_ids_overquota(zfsvfs, &acl_ids)) { + zfs_acl_ids_free(&acl_ids); + error = SET_ERROR(EDQUOT); + goto out; + } + + tx = dmu_tx_create(os); + + dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + + ZFS_SA_BASE_ATTR_SIZE); + + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name); + dmu_tx_hold_sa(tx, dzp->z_sa_hdl, B_FALSE); + if (!zfsvfs->z_use_sa && + acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, + 0, acl_ids.z_aclp->z_acl_bytes); + } + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + zfs_acl_ids_free(&acl_ids); + dmu_tx_abort(tx); + ZFS_EXIT(zfsvfs); + return (error); + } + zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids); + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + (void) zfs_link_create(dl, zp, tx, ZNEW); + txtype = zfs_log_create_txtype(Z_FILE, vsecp, vap); + if (flag & FIGNORECASE) + txtype |= TX_CI; + zfs_log_create(zilog, tx, txtype, dzp, zp, name, + vsecp, acl_ids.z_fuidp, vap); + zfs_acl_ids_free(&acl_ids); + dmu_tx_commit(tx); + } else { + int aflags = (flag & FAPPEND) ? V_APPEND : 0; + + if (have_acl) + zfs_acl_ids_free(&acl_ids); + have_acl = B_FALSE; + + /* + * A directory entry already exists for this name. + */ + /* + * Can't truncate an existing file if in exclusive mode. + */ + if (excl) { + error = SET_ERROR(EEXIST); + goto out; + } + /* + * Can't open a directory for writing. + */ + if (S_ISDIR(ZTOI(zp)->i_mode)) { + error = SET_ERROR(EISDIR); + goto out; + } + /* + * Verify requested access to file. + */ + if (mode && (error = zfs_zaccess_rwx(zp, mode, aflags, cr))) { + goto out; + } + + mutex_enter(&dzp->z_lock); + dzp->z_seq++; + mutex_exit(&dzp->z_lock); + + /* + * Truncate regular files if requested. + */ + if (S_ISREG(ZTOI(zp)->i_mode) && + (vap->va_mask & ATTR_SIZE) && (vap->va_size == 0)) { + /* we can't hold any locks when calling zfs_freesp() */ + if (dl) { + zfs_dirent_unlock(dl); + dl = NULL; + } + error = zfs_freesp(zp, 0, 0, mode, TRUE); + } + } +out: + + if (dl) + zfs_dirent_unlock(dl); + + if (error) { + if (zp) + iput(ZTOI(zp)); + } else { + zfs_inode_update(dzp); + zfs_inode_update(zp); + *ipp = ZTOI(zp); + } + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* ARGSUSED */ +int +zfs_tmpfile(struct inode *dip, vattr_t *vap, int excl, + int mode, struct inode **ipp, cred_t *cr, int flag, vsecattr_t *vsecp) +{ + znode_t *zp = NULL, *dzp = ITOZ(dip); + zfsvfs_t *zfsvfs = ITOZSB(dip); + objset_t *os; + dmu_tx_t *tx; + int error; + uid_t uid; + gid_t gid; + zfs_acl_ids_t acl_ids; + boolean_t fuid_dirtied; + boolean_t have_acl = B_FALSE; + boolean_t waited = B_FALSE; + + /* + * If we have an ephemeral id, ACL, or XVATTR then + * make sure file system is at proper version + */ + + gid = crgetgid(cr); + uid = crgetuid(cr); + + if (zfsvfs->z_use_fuids == B_FALSE && + (vsecp || IS_EPHEMERAL(uid) || IS_EPHEMERAL(gid))) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + os = zfsvfs->z_os; + + if (vap->va_mask & ATTR_XVATTR) { + if ((error = secpolicy_xvattr((xvattr_t *)vap, + crgetuid(cr), cr, vap->va_mode)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + } + +top: + *ipp = NULL; + + /* + * Create a new file object and update the directory + * to reference it. + */ + if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) { + if (have_acl) + zfs_acl_ids_free(&acl_ids); + goto out; + } + + if (!have_acl && (error = zfs_acl_ids_create(dzp, 0, vap, + cr, vsecp, &acl_ids)) != 0) + goto out; + have_acl = B_TRUE; + + if (zfs_acl_ids_overquota(zfsvfs, &acl_ids)) { + zfs_acl_ids_free(&acl_ids); + error = SET_ERROR(EDQUOT); + goto out; + } + + tx = dmu_tx_create(os); + + dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + + ZFS_SA_BASE_ATTR_SIZE); + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + if (!zfsvfs->z_use_sa && + acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, + 0, acl_ids.z_aclp->z_acl_bytes); + } + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + zfs_acl_ids_free(&acl_ids); + dmu_tx_abort(tx); + ZFS_EXIT(zfsvfs); + return (error); + } + zfs_mknode(dzp, vap, tx, cr, IS_TMPFILE, &zp, &acl_ids); + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + /* Add to unlinked set */ + zp->z_unlinked = 1; + zfs_unlinked_add(zp, tx); + zfs_acl_ids_free(&acl_ids); + dmu_tx_commit(tx); +out: + + if (error) { + if (zp) + iput(ZTOI(zp)); + } else { + zfs_inode_update(dzp); + zfs_inode_update(zp); + *ipp = ZTOI(zp); + } + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Remove an entry from a directory. + * + * IN: dip - inode of directory to remove entry from. + * name - name of entry to remove. + * cr - credentials of caller. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * dip - ctime|mtime + * ip - ctime (if nlink > 0) + */ + +uint64_t null_xattr = 0; + +/*ARGSUSED*/ +int +zfs_remove(struct inode *dip, char *name, cred_t *cr, int flags) +{ + znode_t *zp, *dzp = ITOZ(dip); + znode_t *xzp; + struct inode *ip; + zfsvfs_t *zfsvfs = ITOZSB(dip); + zilog_t *zilog; + uint64_t acl_obj, xattr_obj; + uint64_t xattr_obj_unlinked = 0; + uint64_t obj = 0; + uint64_t links; + zfs_dirlock_t *dl; + dmu_tx_t *tx; + boolean_t may_delete_now, delete_now = FALSE; + boolean_t unlinked, toobig = FALSE; + uint64_t txtype; + pathname_t *realnmp = NULL; + pathname_t realnm; + int error; + int zflg = ZEXISTS; + boolean_t waited = B_FALSE; + + if (name == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + zilog = zfsvfs->z_log; + + if (flags & FIGNORECASE) { + zflg |= ZCILOOK; + pn_alloc(&realnm); + realnmp = &realnm; + } + +top: + xattr_obj = 0; + xzp = NULL; + /* + * Attempt to lock directory; fail if entry doesn't exist. + */ + if ((error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg, + NULL, realnmp))) { + if (realnmp) + pn_free(realnmp); + ZFS_EXIT(zfsvfs); + return (error); + } + + ip = ZTOI(zp); + + if ((error = zfs_zaccess_delete(dzp, zp, cr))) { + goto out; + } + + /* + * Need to use rmdir for removing directories. + */ + if (S_ISDIR(ip->i_mode)) { + error = SET_ERROR(EPERM); + goto out; + } + +#ifdef HAVE_DNLC + if (realnmp) + dnlc_remove(dvp, realnmp->pn_buf); + else + dnlc_remove(dvp, name); +#endif /* HAVE_DNLC */ + + mutex_enter(&zp->z_lock); + may_delete_now = atomic_read(&ip->i_count) == 1 && !(zp->z_is_mapped); + mutex_exit(&zp->z_lock); + + /* + * We may delete the znode now, or we may put it in the unlinked set; + * it depends on whether we're the last link, and on whether there are + * other holds on the inode. So we dmu_tx_hold() the right things to + * allow for either case. + */ + obj = zp->z_id; + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_zap(tx, dzp->z_id, FALSE, name); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + zfs_sa_upgrade_txholds(tx, dzp); + if (may_delete_now) { + toobig = zp->z_size > zp->z_blksz * zfs_delete_blocks; + /* if the file is too big, only hold_free a token amount */ + dmu_tx_hold_free(tx, zp->z_id, 0, + (toobig ? DMU_MAX_ACCESS : DMU_OBJECT_END)); + } + + /* are there any extended attributes? */ + error = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), + &xattr_obj, sizeof (xattr_obj)); + if (error == 0 && xattr_obj) { + error = zfs_zget(zfsvfs, xattr_obj, &xzp); + ASSERT0(error); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE); + } + + mutex_enter(&zp->z_lock); + if ((acl_obj = zfs_external_acl(zp)) != 0 && may_delete_now) + dmu_tx_hold_free(tx, acl_obj, 0, DMU_OBJECT_END); + mutex_exit(&zp->z_lock); + + /* charge as an update -- would be nice not to charge at all */ + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + + /* + * Mark this transaction as typically resulting in a net free of space + */ + dmu_tx_mark_netfree(tx); + + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + iput(ip); + if (xzp) + iput(ZTOI(xzp)); + goto top; + } + if (realnmp) + pn_free(realnmp); + dmu_tx_abort(tx); + iput(ip); + if (xzp) + iput(ZTOI(xzp)); + ZFS_EXIT(zfsvfs); + return (error); + } + + /* + * Remove the directory entry. + */ + error = zfs_link_destroy(dl, zp, tx, zflg, &unlinked); + + if (error) { + dmu_tx_commit(tx); + goto out; + } + + if (unlinked) { + /* + * Hold z_lock so that we can make sure that the ACL obj + * hasn't changed. Could have been deleted due to + * zfs_sa_upgrade(). + */ + mutex_enter(&zp->z_lock); + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), + &xattr_obj_unlinked, sizeof (xattr_obj_unlinked)); + delete_now = may_delete_now && !toobig && + atomic_read(&ip->i_count) == 1 && !(zp->z_is_mapped) && + xattr_obj == xattr_obj_unlinked && zfs_external_acl(zp) == + acl_obj; + } + + if (delete_now) { + if (xattr_obj_unlinked) { + ASSERT3U(ZTOI(xzp)->i_nlink, ==, 2); + mutex_enter(&xzp->z_lock); + xzp->z_unlinked = 1; + clear_nlink(ZTOI(xzp)); + links = 0; + error = sa_update(xzp->z_sa_hdl, SA_ZPL_LINKS(zfsvfs), + &links, sizeof (links), tx); + ASSERT3U(error, ==, 0); + mutex_exit(&xzp->z_lock); + zfs_unlinked_add(xzp, tx); + + if (zp->z_is_sa) + error = sa_remove(zp->z_sa_hdl, + SA_ZPL_XATTR(zfsvfs), tx); + else + error = sa_update(zp->z_sa_hdl, + SA_ZPL_XATTR(zfsvfs), &null_xattr, + sizeof (uint64_t), tx); + ASSERT0(error); + } + /* + * Add to the unlinked set because a new reference could be + * taken concurrently resulting in a deferred destruction. + */ + zfs_unlinked_add(zp, tx); + mutex_exit(&zp->z_lock); + } else if (unlinked) { + mutex_exit(&zp->z_lock); + zfs_unlinked_add(zp, tx); + } + + txtype = TX_REMOVE; + if (flags & FIGNORECASE) + txtype |= TX_CI; + zfs_log_remove(zilog, tx, txtype, dzp, name, obj); + + dmu_tx_commit(tx); +out: + if (realnmp) + pn_free(realnmp); + + zfs_dirent_unlock(dl); + zfs_inode_update(dzp); + zfs_inode_update(zp); + + if (delete_now) + iput(ip); + else + zfs_iput_async(ip); + + if (xzp) { + zfs_inode_update(xzp); + zfs_iput_async(ZTOI(xzp)); + } + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Create a new directory and insert it into dip using the name + * provided. Return a pointer to the inserted directory. + * + * IN: dip - inode of directory to add subdir to. + * dirname - name of new directory. + * vap - attributes of new directory. + * cr - credentials of caller. + * vsecp - ACL to be set + * + * OUT: ipp - inode of created directory. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * dip - ctime|mtime updated + * ipp - ctime|mtime|atime updated + */ +/*ARGSUSED*/ +int +zfs_mkdir(struct inode *dip, char *dirname, vattr_t *vap, struct inode **ipp, + cred_t *cr, int flags, vsecattr_t *vsecp) +{ + znode_t *zp, *dzp = ITOZ(dip); + zfsvfs_t *zfsvfs = ITOZSB(dip); + zilog_t *zilog; + zfs_dirlock_t *dl; + uint64_t txtype; + dmu_tx_t *tx; + int error; + int zf = ZNEW; + uid_t uid; + gid_t gid = crgetgid(cr); + zfs_acl_ids_t acl_ids; + boolean_t fuid_dirtied; + boolean_t waited = B_FALSE; + + ASSERT(S_ISDIR(vap->va_mode)); + + /* + * If we have an ephemeral id, ACL, or XVATTR then + * make sure file system is at proper version + */ + + uid = crgetuid(cr); + if (zfsvfs->z_use_fuids == B_FALSE && + (vsecp || IS_EPHEMERAL(uid) || IS_EPHEMERAL(gid))) + return (SET_ERROR(EINVAL)); + + if (dirname == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + zilog = zfsvfs->z_log; + + if (dzp->z_pflags & ZFS_XATTR) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + if (zfsvfs->z_utf8 && u8_validate(dirname, + strlen(dirname), NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + if (flags & FIGNORECASE) + zf |= ZCILOOK; + + if (vap->va_mask & ATTR_XVATTR) { + if ((error = secpolicy_xvattr((xvattr_t *)vap, + crgetuid(cr), cr, vap->va_mode)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + } + + if ((error = zfs_acl_ids_create(dzp, 0, vap, cr, + vsecp, &acl_ids)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + /* + * First make sure the new directory doesn't exist. + * + * Existence is checked first to make sure we don't return + * EACCES instead of EEXIST which can cause some applications + * to fail. + */ +top: + *ipp = NULL; + + if ((error = zfs_dirent_lock(&dl, dzp, dirname, &zp, zf, + NULL, NULL))) { + zfs_acl_ids_free(&acl_ids); + ZFS_EXIT(zfsvfs); + return (error); + } + + if ((error = zfs_zaccess(dzp, ACE_ADD_SUBDIRECTORY, 0, B_FALSE, cr))) { + zfs_acl_ids_free(&acl_ids); + zfs_dirent_unlock(dl); + ZFS_EXIT(zfsvfs); + return (error); + } + + if (zfs_acl_ids_overquota(zfsvfs, &acl_ids)) { + zfs_acl_ids_free(&acl_ids); + zfs_dirent_unlock(dl); + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EDQUOT)); + } + + /* + * Add a new entry to the directory. + */ + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_zap(tx, dzp->z_id, TRUE, dirname); + dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + if (!zfsvfs->z_use_sa && acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, + acl_ids.z_aclp->z_acl_bytes); + } + + dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + + ZFS_SA_BASE_ATTR_SIZE); + + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + zfs_acl_ids_free(&acl_ids); + dmu_tx_abort(tx); + ZFS_EXIT(zfsvfs); + return (error); + } + + /* + * Create new node. + */ + zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids); + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + /* + * Now put new name in parent dir. + */ + (void) zfs_link_create(dl, zp, tx, ZNEW); + + *ipp = ZTOI(zp); + + txtype = zfs_log_create_txtype(Z_DIR, vsecp, vap); + if (flags & FIGNORECASE) + txtype |= TX_CI; + zfs_log_create(zilog, tx, txtype, dzp, zp, dirname, vsecp, + acl_ids.z_fuidp, vap); + + zfs_acl_ids_free(&acl_ids); + + dmu_tx_commit(tx); + + zfs_dirent_unlock(dl); + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + zfs_inode_update(dzp); + zfs_inode_update(zp); + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * Remove a directory subdir entry. If the current working + * directory is the same as the subdir to be removed, the + * remove will fail. + * + * IN: dip - inode of directory to remove from. + * name - name of directory to be removed. + * cwd - inode of current working directory. + * cr - credentials of caller. + * flags - case flags + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * dip - ctime|mtime updated + */ +/*ARGSUSED*/ +int +zfs_rmdir(struct inode *dip, char *name, struct inode *cwd, cred_t *cr, + int flags) +{ + znode_t *dzp = ITOZ(dip); + znode_t *zp; + struct inode *ip; + zfsvfs_t *zfsvfs = ITOZSB(dip); + zilog_t *zilog; + zfs_dirlock_t *dl; + dmu_tx_t *tx; + int error; + int zflg = ZEXISTS; + boolean_t waited = B_FALSE; + + if (name == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + zilog = zfsvfs->z_log; + + if (flags & FIGNORECASE) + zflg |= ZCILOOK; +top: + zp = NULL; + + /* + * Attempt to lock directory; fail if entry doesn't exist. + */ + if ((error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg, + NULL, NULL))) { + ZFS_EXIT(zfsvfs); + return (error); + } + + ip = ZTOI(zp); + + if ((error = zfs_zaccess_delete(dzp, zp, cr))) { + goto out; + } + + if (!S_ISDIR(ip->i_mode)) { + error = SET_ERROR(ENOTDIR); + goto out; + } + + if (ip == cwd) { + error = SET_ERROR(EINVAL); + goto out; + } + + /* + * Grab a lock on the directory to make sure that no one is + * trying to add (or lookup) entries while we are removing it. + */ + rw_enter(&zp->z_name_lock, RW_WRITER); + + /* + * Grab a lock on the parent pointer to make sure we play well + * with the treewalk and directory rename code. + */ + rw_enter(&zp->z_parent_lock, RW_WRITER); + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_zap(tx, dzp->z_id, FALSE, name); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + zfs_sa_upgrade_txholds(tx, zp); + zfs_sa_upgrade_txholds(tx, dzp); + dmu_tx_mark_netfree(tx); + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + rw_exit(&zp->z_parent_lock); + rw_exit(&zp->z_name_lock); + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + iput(ip); + goto top; + } + dmu_tx_abort(tx); + iput(ip); + ZFS_EXIT(zfsvfs); + return (error); + } + + error = zfs_link_destroy(dl, zp, tx, zflg, NULL); + + if (error == 0) { + uint64_t txtype = TX_RMDIR; + if (flags & FIGNORECASE) + txtype |= TX_CI; + zfs_log_remove(zilog, tx, txtype, dzp, name, ZFS_NO_OBJECT); + } + + dmu_tx_commit(tx); + + rw_exit(&zp->z_parent_lock); + rw_exit(&zp->z_name_lock); +out: + zfs_dirent_unlock(dl); + + zfs_inode_update(dzp); + zfs_inode_update(zp); + iput(ip); + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Read as many directory entries as will fit into the provided + * dirent buffer from the given directory cursor position. + * + * IN: ip - inode of directory to read. + * dirent - buffer for directory entries. + * + * OUT: dirent - filler buffer of directory entries. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * ip - atime updated + * + * Note that the low 4 bits of the cookie returned by zap is always zero. + * This allows us to use the low range for "special" directory entries: + * We use 0 for '.', and 1 for '..'. If this is the root of the filesystem, + * we use the offset 2 for the '.zfs' directory. + */ +/* ARGSUSED */ +int +zfs_readdir(struct inode *ip, struct dir_context *ctx, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + objset_t *os; + zap_cursor_t zc; + zap_attribute_t zap; + int error; + uint8_t prefetch; + uint8_t type; + int done = 0; + uint64_t parent; + uint64_t offset; /* must be unsigned; checks for < 1 */ + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_PARENT(zfsvfs), + &parent, sizeof (parent))) != 0) + goto out; + + /* + * Quit if directory has been removed (posix) + */ + if (zp->z_unlinked) + goto out; + + error = 0; + os = zfsvfs->z_os; + offset = ctx->pos; + prefetch = zp->z_zn_prefetch; + + /* + * Initialize the iterator cursor. + */ + if (offset <= 3) { + /* + * Start iteration from the beginning of the directory. + */ + zap_cursor_init(&zc, os, zp->z_id); + } else { + /* + * The offset is a serialized cursor. + */ + zap_cursor_init_serialized(&zc, os, zp->z_id, offset); + } + + /* + * Transform to file-system independent format + */ + while (!done) { + uint64_t objnum; + /* + * Special case `.', `..', and `.zfs'. + */ + if (offset == 0) { + (void) strcpy(zap.za_name, "."); + zap.za_normalization_conflict = 0; + objnum = zp->z_id; + type = DT_DIR; + } else if (offset == 1) { + (void) strcpy(zap.za_name, ".."); + zap.za_normalization_conflict = 0; + objnum = parent; + type = DT_DIR; + } else if (offset == 2 && zfs_show_ctldir(zp)) { + (void) strcpy(zap.za_name, ZFS_CTLDIR_NAME); + zap.za_normalization_conflict = 0; + objnum = ZFSCTL_INO_ROOT; + type = DT_DIR; + } else { + /* + * Grab next entry. + */ + if ((error = zap_cursor_retrieve(&zc, &zap))) { + if (error == ENOENT) + break; + else + goto update; + } + + /* + * Allow multiple entries provided the first entry is + * the object id. Non-zpl consumers may safely make + * use of the additional space. + * + * XXX: This should be a feature flag for compatibility + */ + if (zap.za_integer_length != 8 || + zap.za_num_integers == 0) { + cmn_err(CE_WARN, "zap_readdir: bad directory " + "entry, obj = %lld, offset = %lld, " + "length = %d, num = %lld\n", + (u_longlong_t)zp->z_id, + (u_longlong_t)offset, + zap.za_integer_length, + (u_longlong_t)zap.za_num_integers); + error = SET_ERROR(ENXIO); + goto update; + } + + objnum = ZFS_DIRENT_OBJ(zap.za_first_integer); + type = ZFS_DIRENT_TYPE(zap.za_first_integer); + } + + done = !dir_emit(ctx, zap.za_name, strlen(zap.za_name), + objnum, type); + if (done) + break; + + /* Prefetch znode */ + if (prefetch) { + dmu_prefetch(os, objnum, 0, 0, 0, + ZIO_PRIORITY_SYNC_READ); + } + + /* + * Move to the next entry, fill in the previous offset. + */ + if (offset > 2 || (offset == 2 && !zfs_show_ctldir(zp))) { + zap_cursor_advance(&zc); + offset = zap_cursor_serialize(&zc); + } else { + offset += 1; + } + ctx->pos = offset; + } + zp->z_zn_prefetch = B_FALSE; /* a lookup will re-enable pre-fetching */ + +update: + zap_cursor_fini(&zc); + if (error == ENOENT) + error = 0; +out: + ZFS_EXIT(zfsvfs); + + return (error); +} + +ulong_t zfs_fsync_sync_cnt = 4; + +int +zfs_fsync(struct inode *ip, int syncflag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + + (void) tsd_set(zfs_fsyncer_key, (void *)zfs_fsync_sync_cnt); + + if (zfsvfs->z_os->os_sync != ZFS_SYNC_DISABLED) { + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + zil_commit(zfsvfs->z_log, zp->z_id); + ZFS_EXIT(zfsvfs); + } + tsd_set(zfs_fsyncer_key, NULL); + + return (0); +} + + +/* + * Get the requested file attributes and place them in the provided + * vattr structure. + * + * IN: ip - inode of file. + * vap - va_mask identifies requested attributes. + * If ATTR_XVATTR set, then optional attrs are requested + * flags - ATTR_NOACLCHECK (CIFS server context) + * cr - credentials of caller. + * + * OUT: vap - attribute values. + * + * RETURN: 0 (always succeeds) + */ +/* ARGSUSED */ +int +zfs_getattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error = 0; + uint64_t links; + uint64_t atime[2], mtime[2], ctime[2]; + xvattr_t *xvap = (xvattr_t *)vap; /* vap may be an xvattr_t * */ + xoptattr_t *xoap = NULL; + boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE; + sa_bulk_attr_t bulk[3]; + int count = 0; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + zfs_fuid_map_ids(zp, cr, &vap->va_uid, &vap->va_gid); + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL, &atime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + + if ((error = sa_bulk_lookup(zp->z_sa_hdl, bulk, count)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + + /* + * If ACL is trivial don't bother looking for ACE_READ_ATTRIBUTES. + * Also, if we are the owner don't bother, since owner should + * always be allowed to read basic attributes of file. + */ + if (!(zp->z_pflags & ZFS_ACL_TRIVIAL) && + (vap->va_uid != crgetuid(cr))) { + if ((error = zfs_zaccess(zp, ACE_READ_ATTRIBUTES, 0, + skipaclchk, cr))) { + ZFS_EXIT(zfsvfs); + return (error); + } + } + + /* + * Return all attributes. It's cheaper to provide the answer + * than to determine whether we were asked the question. + */ + + mutex_enter(&zp->z_lock); + vap->va_type = vn_mode_to_vtype(zp->z_mode); + vap->va_mode = zp->z_mode; + vap->va_fsid = ZTOI(zp)->i_sb->s_dev; + vap->va_nodeid = zp->z_id; + if ((zp->z_id == zfsvfs->z_root) && zfs_show_ctldir(zp)) + links = ZTOI(zp)->i_nlink + 1; + else + links = ZTOI(zp)->i_nlink; + vap->va_nlink = MIN(links, ZFS_LINK_MAX); + vap->va_size = i_size_read(ip); + vap->va_rdev = ip->i_rdev; + vap->va_seq = ip->i_generation; + + /* + * Add in any requested optional attributes and the create time. + * Also set the corresponding bits in the returned attribute bitmap. + */ + if ((xoap = xva_getxoptattr(xvap)) != NULL && zfsvfs->z_use_fuids) { + if (XVA_ISSET_REQ(xvap, XAT_ARCHIVE)) { + xoap->xoa_archive = + ((zp->z_pflags & ZFS_ARCHIVE) != 0); + XVA_SET_RTN(xvap, XAT_ARCHIVE); + } + + if (XVA_ISSET_REQ(xvap, XAT_READONLY)) { + xoap->xoa_readonly = + ((zp->z_pflags & ZFS_READONLY) != 0); + XVA_SET_RTN(xvap, XAT_READONLY); + } + + if (XVA_ISSET_REQ(xvap, XAT_SYSTEM)) { + xoap->xoa_system = + ((zp->z_pflags & ZFS_SYSTEM) != 0); + XVA_SET_RTN(xvap, XAT_SYSTEM); + } + + if (XVA_ISSET_REQ(xvap, XAT_HIDDEN)) { + xoap->xoa_hidden = + ((zp->z_pflags & ZFS_HIDDEN) != 0); + XVA_SET_RTN(xvap, XAT_HIDDEN); + } + + if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) { + xoap->xoa_nounlink = + ((zp->z_pflags & ZFS_NOUNLINK) != 0); + XVA_SET_RTN(xvap, XAT_NOUNLINK); + } + + if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) { + xoap->xoa_immutable = + ((zp->z_pflags & ZFS_IMMUTABLE) != 0); + XVA_SET_RTN(xvap, XAT_IMMUTABLE); + } + + if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) { + xoap->xoa_appendonly = + ((zp->z_pflags & ZFS_APPENDONLY) != 0); + XVA_SET_RTN(xvap, XAT_APPENDONLY); + } + + if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) { + xoap->xoa_nodump = + ((zp->z_pflags & ZFS_NODUMP) != 0); + XVA_SET_RTN(xvap, XAT_NODUMP); + } + + if (XVA_ISSET_REQ(xvap, XAT_OPAQUE)) { + xoap->xoa_opaque = + ((zp->z_pflags & ZFS_OPAQUE) != 0); + XVA_SET_RTN(xvap, XAT_OPAQUE); + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) { + xoap->xoa_av_quarantined = + ((zp->z_pflags & ZFS_AV_QUARANTINED) != 0); + XVA_SET_RTN(xvap, XAT_AV_QUARANTINED); + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) { + xoap->xoa_av_modified = + ((zp->z_pflags & ZFS_AV_MODIFIED) != 0); + XVA_SET_RTN(xvap, XAT_AV_MODIFIED); + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP) && + S_ISREG(ip->i_mode)) { + zfs_sa_get_scanstamp(zp, xvap); + } + + if (XVA_ISSET_REQ(xvap, XAT_CREATETIME)) { + uint64_t times[2]; + + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_CRTIME(zfsvfs), + times, sizeof (times)); + ZFS_TIME_DECODE(&xoap->xoa_createtime, times); + XVA_SET_RTN(xvap, XAT_CREATETIME); + } + + if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) { + xoap->xoa_reparse = ((zp->z_pflags & ZFS_REPARSE) != 0); + XVA_SET_RTN(xvap, XAT_REPARSE); + } + if (XVA_ISSET_REQ(xvap, XAT_GEN)) { + xoap->xoa_generation = ip->i_generation; + XVA_SET_RTN(xvap, XAT_GEN); + } + + if (XVA_ISSET_REQ(xvap, XAT_OFFLINE)) { + xoap->xoa_offline = + ((zp->z_pflags & ZFS_OFFLINE) != 0); + XVA_SET_RTN(xvap, XAT_OFFLINE); + } + + if (XVA_ISSET_REQ(xvap, XAT_SPARSE)) { + xoap->xoa_sparse = + ((zp->z_pflags & ZFS_SPARSE) != 0); + XVA_SET_RTN(xvap, XAT_SPARSE); + } + } + + ZFS_TIME_DECODE(&vap->va_atime, atime); + ZFS_TIME_DECODE(&vap->va_mtime, mtime); + ZFS_TIME_DECODE(&vap->va_ctime, ctime); + + mutex_exit(&zp->z_lock); + + sa_object_size(zp->z_sa_hdl, &vap->va_blksize, &vap->va_nblocks); + + if (zp->z_blksz == 0) { + /* + * Block size hasn't been set; suggest maximal I/O transfers. + */ + vap->va_blksize = zfsvfs->z_max_blksz; + } + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * Get the basic file attributes and place them in the provided kstat + * structure. The inode is assumed to be the authoritative source + * for most of the attributes. However, the znode currently has the + * authoritative atime, blksize, and block count. + * + * IN: ip - inode of file. + * + * OUT: sp - kstat values. + * + * RETURN: 0 (always succeeds) + */ +/* ARGSUSED */ +int +zfs_getattr_fast(struct inode *ip, struct kstat *sp) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + uint32_t blksize; + u_longlong_t nblocks; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + mutex_enter(&zp->z_lock); + + generic_fillattr(ip, sp); + + sa_object_size(zp->z_sa_hdl, &blksize, &nblocks); + sp->blksize = blksize; + sp->blocks = nblocks; + + if (unlikely(zp->z_blksz == 0)) { + /* + * Block size hasn't been set; suggest maximal I/O transfers. + */ + sp->blksize = zfsvfs->z_max_blksz; + } + + mutex_exit(&zp->z_lock); + + /* + * Required to prevent NFS client from detecting different inode + * numbers of snapshot root dentry before and after snapshot mount. + */ + if (zfsvfs->z_issnap) { + if (ip->i_sb->s_root->d_inode == ip) + sp->ino = ZFSCTL_INO_SNAPDIRS - + dmu_objset_id(zfsvfs->z_os); + } + + ZFS_EXIT(zfsvfs); + + return (0); +} + +/* + * Set the file attributes to the values contained in the + * vattr structure. + * + * IN: ip - inode of file to be modified. + * vap - new attribute values. + * If ATTR_XVATTR set, then optional attrs are being set + * flags - ATTR_UTIME set if non-default time values provided. + * - ATTR_NOACLCHECK (CIFS context only). + * cr - credentials of caller. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * ip - ctime updated, mtime updated if size changed. + */ +/* ARGSUSED */ +int +zfs_setattr(struct inode *ip, vattr_t *vap, int flags, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + zilog_t *zilog; + dmu_tx_t *tx; + vattr_t oldva; + xvattr_t *tmpxvattr; + uint_t mask = vap->va_mask; + uint_t saved_mask = 0; + int trim_mask = 0; + uint64_t new_mode; + uint64_t new_kuid = 0, new_kgid = 0, new_uid, new_gid; + uint64_t xattr_obj; + uint64_t mtime[2], ctime[2], atime[2]; + znode_t *attrzp; + int need_policy = FALSE; + int err, err2; + zfs_fuid_info_t *fuidp = NULL; + xvattr_t *xvap = (xvattr_t *)vap; /* vap may be an xvattr_t * */ + xoptattr_t *xoap; + zfs_acl_t *aclp; + boolean_t skipaclchk = (flags & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE; + boolean_t fuid_dirtied = B_FALSE; + sa_bulk_attr_t *bulk, *xattr_bulk; + int count = 0, xattr_count = 0; + + if (mask == 0) + return (0); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + zilog = zfsvfs->z_log; + + /* + * Make sure that if we have ephemeral uid/gid or xvattr specified + * that file system is at proper version level + */ + + if (zfsvfs->z_use_fuids == B_FALSE && + (((mask & ATTR_UID) && IS_EPHEMERAL(vap->va_uid)) || + ((mask & ATTR_GID) && IS_EPHEMERAL(vap->va_gid)) || + (mask & ATTR_XVATTR))) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + if (mask & ATTR_SIZE && S_ISDIR(ip->i_mode)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EISDIR)); + } + + if (mask & ATTR_SIZE && !S_ISREG(ip->i_mode) && !S_ISFIFO(ip->i_mode)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * If this is an xvattr_t, then get a pointer to the structure of + * optional attributes. If this is NULL, then we have a vattr_t. + */ + xoap = xva_getxoptattr(xvap); + + tmpxvattr = kmem_alloc(sizeof (xvattr_t), KM_SLEEP); + xva_init(tmpxvattr); + + bulk = kmem_alloc(sizeof (sa_bulk_attr_t) * 7, KM_SLEEP); + xattr_bulk = kmem_alloc(sizeof (sa_bulk_attr_t) * 7, KM_SLEEP); + + /* + * Immutable files can only alter immutable bit and atime + */ + if ((zp->z_pflags & ZFS_IMMUTABLE) && + ((mask & (ATTR_SIZE|ATTR_UID|ATTR_GID|ATTR_MTIME|ATTR_MODE)) || + ((mask & ATTR_XVATTR) && XVA_ISSET_REQ(xvap, XAT_CREATETIME)))) { + err = EPERM; + goto out3; + } + + if ((mask & ATTR_SIZE) && (zp->z_pflags & ZFS_READONLY)) { + err = EPERM; + goto out3; + } + + /* + * Verify timestamps doesn't overflow 32 bits. + * ZFS can handle large timestamps, but 32bit syscalls can't + * handle times greater than 2039. This check should be removed + * once large timestamps are fully supported. + */ + if (mask & (ATTR_ATIME | ATTR_MTIME)) { + if (((mask & ATTR_ATIME) && + TIMESPEC_OVERFLOW(&vap->va_atime)) || + ((mask & ATTR_MTIME) && + TIMESPEC_OVERFLOW(&vap->va_mtime))) { + err = EOVERFLOW; + goto out3; + } + } + +top: + attrzp = NULL; + aclp = NULL; + + /* Can this be moved to before the top label? */ + if (zfs_is_readonly(zfsvfs)) { + err = EROFS; + goto out3; + } + + /* + * First validate permissions + */ + + if (mask & ATTR_SIZE) { + err = zfs_zaccess(zp, ACE_WRITE_DATA, 0, skipaclchk, cr); + if (err) + goto out3; + + /* + * XXX - Note, we are not providing any open + * mode flags here (like FNDELAY), so we may + * block if there are locks present... this + * should be addressed in openat(). + */ + /* XXX - would it be OK to generate a log record here? */ + err = zfs_freesp(zp, vap->va_size, 0, 0, FALSE); + if (err) + goto out3; + } + + if (mask & (ATTR_ATIME|ATTR_MTIME) || + ((mask & ATTR_XVATTR) && (XVA_ISSET_REQ(xvap, XAT_HIDDEN) || + XVA_ISSET_REQ(xvap, XAT_READONLY) || + XVA_ISSET_REQ(xvap, XAT_ARCHIVE) || + XVA_ISSET_REQ(xvap, XAT_OFFLINE) || + XVA_ISSET_REQ(xvap, XAT_SPARSE) || + XVA_ISSET_REQ(xvap, XAT_CREATETIME) || + XVA_ISSET_REQ(xvap, XAT_SYSTEM)))) { + need_policy = zfs_zaccess(zp, ACE_WRITE_ATTRIBUTES, 0, + skipaclchk, cr); + } + + if (mask & (ATTR_UID|ATTR_GID)) { + int idmask = (mask & (ATTR_UID|ATTR_GID)); + int take_owner; + int take_group; + + /* + * NOTE: even if a new mode is being set, + * we may clear S_ISUID/S_ISGID bits. + */ + + if (!(mask & ATTR_MODE)) + vap->va_mode = zp->z_mode; + + /* + * Take ownership or chgrp to group we are a member of + */ + + take_owner = (mask & ATTR_UID) && (vap->va_uid == crgetuid(cr)); + take_group = (mask & ATTR_GID) && + zfs_groupmember(zfsvfs, vap->va_gid, cr); + + /* + * If both ATTR_UID and ATTR_GID are set then take_owner and + * take_group must both be set in order to allow taking + * ownership. + * + * Otherwise, send the check through secpolicy_vnode_setattr() + * + */ + + if (((idmask == (ATTR_UID|ATTR_GID)) && + take_owner && take_group) || + ((idmask == ATTR_UID) && take_owner) || + ((idmask == ATTR_GID) && take_group)) { + if (zfs_zaccess(zp, ACE_WRITE_OWNER, 0, + skipaclchk, cr) == 0) { + /* + * Remove setuid/setgid for non-privileged users + */ + (void) secpolicy_setid_clear(vap, cr); + trim_mask = (mask & (ATTR_UID|ATTR_GID)); + } else { + need_policy = TRUE; + } + } else { + need_policy = TRUE; + } + } + + mutex_enter(&zp->z_lock); + oldva.va_mode = zp->z_mode; + zfs_fuid_map_ids(zp, cr, &oldva.va_uid, &oldva.va_gid); + if (mask & ATTR_XVATTR) { + /* + * Update xvattr mask to include only those attributes + * that are actually changing. + * + * the bits will be restored prior to actually setting + * the attributes so the caller thinks they were set. + */ + if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) { + if (xoap->xoa_appendonly != + ((zp->z_pflags & ZFS_APPENDONLY) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_APPENDONLY); + XVA_SET_REQ(tmpxvattr, XAT_APPENDONLY); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) { + if (xoap->xoa_nounlink != + ((zp->z_pflags & ZFS_NOUNLINK) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_NOUNLINK); + XVA_SET_REQ(tmpxvattr, XAT_NOUNLINK); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) { + if (xoap->xoa_immutable != + ((zp->z_pflags & ZFS_IMMUTABLE) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_IMMUTABLE); + XVA_SET_REQ(tmpxvattr, XAT_IMMUTABLE); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) { + if (xoap->xoa_nodump != + ((zp->z_pflags & ZFS_NODUMP) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_NODUMP); + XVA_SET_REQ(tmpxvattr, XAT_NODUMP); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) { + if (xoap->xoa_av_modified != + ((zp->z_pflags & ZFS_AV_MODIFIED) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_AV_MODIFIED); + XVA_SET_REQ(tmpxvattr, XAT_AV_MODIFIED); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) { + if ((!S_ISREG(ip->i_mode) && + xoap->xoa_av_quarantined) || + xoap->xoa_av_quarantined != + ((zp->z_pflags & ZFS_AV_QUARANTINED) != 0)) { + need_policy = TRUE; + } else { + XVA_CLR_REQ(xvap, XAT_AV_QUARANTINED); + XVA_SET_REQ(tmpxvattr, XAT_AV_QUARANTINED); + } + } + + if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) { + mutex_exit(&zp->z_lock); + err = EPERM; + goto out3; + } + + if (need_policy == FALSE && + (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP) || + XVA_ISSET_REQ(xvap, XAT_OPAQUE))) { + need_policy = TRUE; + } + } + + mutex_exit(&zp->z_lock); + + if (mask & ATTR_MODE) { + if (zfs_zaccess(zp, ACE_WRITE_ACL, 0, skipaclchk, cr) == 0) { + err = secpolicy_setid_setsticky_clear(ip, vap, + &oldva, cr); + if (err) + goto out3; + + trim_mask |= ATTR_MODE; + } else { + need_policy = TRUE; + } + } + + if (need_policy) { + /* + * If trim_mask is set then take ownership + * has been granted or write_acl is present and user + * has the ability to modify mode. In that case remove + * UID|GID and or MODE from mask so that + * secpolicy_vnode_setattr() doesn't revoke it. + */ + + if (trim_mask) { + saved_mask = vap->va_mask; + vap->va_mask &= ~trim_mask; + } + err = secpolicy_vnode_setattr(cr, ip, vap, &oldva, flags, + (int (*)(void *, int, cred_t *))zfs_zaccess_unix, zp); + if (err) + goto out3; + + if (trim_mask) + vap->va_mask |= saved_mask; + } + + /* + * secpolicy_vnode_setattr, or take ownership may have + * changed va_mask + */ + mask = vap->va_mask; + + if ((mask & (ATTR_UID | ATTR_GID))) { + err = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), + &xattr_obj, sizeof (xattr_obj)); + + if (err == 0 && xattr_obj) { + err = zfs_zget(ZTOZSB(zp), xattr_obj, &attrzp); + if (err) + goto out2; + } + if (mask & ATTR_UID) { + new_kuid = zfs_fuid_create(zfsvfs, + (uint64_t)vap->va_uid, cr, ZFS_OWNER, &fuidp); + if (new_kuid != KUID_TO_SUID(ZTOI(zp)->i_uid) && + zfs_fuid_overquota(zfsvfs, B_FALSE, new_kuid)) { + if (attrzp) + iput(ZTOI(attrzp)); + err = EDQUOT; + goto out2; + } + } + + if (mask & ATTR_GID) { + new_kgid = zfs_fuid_create(zfsvfs, + (uint64_t)vap->va_gid, cr, ZFS_GROUP, &fuidp); + if (new_kgid != KGID_TO_SGID(ZTOI(zp)->i_gid) && + zfs_fuid_overquota(zfsvfs, B_TRUE, new_kgid)) { + if (attrzp) + iput(ZTOI(attrzp)); + err = EDQUOT; + goto out2; + } + } + } + tx = dmu_tx_create(zfsvfs->z_os); + + if (mask & ATTR_MODE) { + uint64_t pmode = zp->z_mode; + uint64_t acl_obj; + new_mode = (pmode & S_IFMT) | (vap->va_mode & ~S_IFMT); + + zfs_acl_chmod_setattr(zp, &aclp, new_mode); + + mutex_enter(&zp->z_lock); + if (!zp->z_is_sa && ((acl_obj = zfs_external_acl(zp)) != 0)) { + /* + * Are we upgrading ACL from old V0 format + * to V1 format? + */ + if (zfsvfs->z_version >= ZPL_VERSION_FUID && + zfs_znode_acl_version(zp) == + ZFS_ACL_VERSION_INITIAL) { + dmu_tx_hold_free(tx, acl_obj, 0, + DMU_OBJECT_END); + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, + 0, aclp->z_acl_bytes); + } else { + dmu_tx_hold_write(tx, acl_obj, 0, + aclp->z_acl_bytes); + } + } else if (!zp->z_is_sa && aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, + 0, aclp->z_acl_bytes); + } + mutex_exit(&zp->z_lock); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + } else { + if ((mask & ATTR_XVATTR) && + XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); + else + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + } + + if (attrzp) { + dmu_tx_hold_sa(tx, attrzp->z_sa_hdl, B_FALSE); + } + + fuid_dirtied = zfsvfs->z_fuid_dirty; + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + + zfs_sa_upgrade_txholds(tx, zp); + + err = dmu_tx_assign(tx, TXG_WAIT); + if (err) + goto out; + + count = 0; + /* + * Set each attribute requested. + * We group settings according to the locks they need to acquire. + * + * Note: you cannot set ctime directly, although it will be + * updated as a side-effect of calling this function. + */ + + + if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE)) + mutex_enter(&zp->z_acl_lock); + mutex_enter(&zp->z_lock); + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, sizeof (zp->z_pflags)); + + if (attrzp) { + if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE)) + mutex_enter(&attrzp->z_acl_lock); + mutex_enter(&attrzp->z_lock); + SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, + SA_ZPL_FLAGS(zfsvfs), NULL, &attrzp->z_pflags, + sizeof (attrzp->z_pflags)); + } + + if (mask & (ATTR_UID|ATTR_GID)) { + + if (mask & ATTR_UID) { + ZTOI(zp)->i_uid = SUID_TO_KUID(new_kuid); + new_uid = zfs_uid_read(ZTOI(zp)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_UID(zfsvfs), NULL, + &new_uid, sizeof (new_uid)); + if (attrzp) { + SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, + SA_ZPL_UID(zfsvfs), NULL, &new_uid, + sizeof (new_uid)); + ZTOI(attrzp)->i_uid = SUID_TO_KUID(new_uid); + } + } + + if (mask & ATTR_GID) { + ZTOI(zp)->i_gid = SGID_TO_KGID(new_kgid); + new_gid = zfs_gid_read(ZTOI(zp)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GID(zfsvfs), + NULL, &new_gid, sizeof (new_gid)); + if (attrzp) { + SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, + SA_ZPL_GID(zfsvfs), NULL, &new_gid, + sizeof (new_gid)); + ZTOI(attrzp)->i_gid = SGID_TO_KGID(new_kgid); + } + } + if (!(mask & ATTR_MODE)) { + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), + NULL, &new_mode, sizeof (new_mode)); + new_mode = zp->z_mode; + } + err = zfs_acl_chown_setattr(zp); + ASSERT(err == 0); + if (attrzp) { + err = zfs_acl_chown_setattr(attrzp); + ASSERT(err == 0); + } + } + + if (mask & ATTR_MODE) { + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), NULL, + &new_mode, sizeof (new_mode)); + zp->z_mode = ZTOI(zp)->i_mode = new_mode; + ASSERT3P(aclp, !=, NULL); + err = zfs_aclset_common(zp, aclp, cr, tx); + ASSERT0(err); + if (zp->z_acl_cached) + zfs_acl_free(zp->z_acl_cached); + zp->z_acl_cached = aclp; + aclp = NULL; + } + + if ((mask & ATTR_ATIME) || zp->z_atime_dirty) { + zp->z_atime_dirty = 0; + ZFS_TIME_ENCODE(&ip->i_atime, atime); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL, + &atime, sizeof (atime)); + } + + if (mask & (ATTR_MTIME | ATTR_SIZE)) { + ZFS_TIME_ENCODE(&vap->va_mtime, mtime); + ZTOI(zp)->i_mtime = timespec_trunc(vap->va_mtime, + ZTOI(zp)->i_sb->s_time_gran); + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, + mtime, sizeof (mtime)); + } + + if (mask & (ATTR_CTIME | ATTR_SIZE)) { + ZFS_TIME_ENCODE(&vap->va_ctime, ctime); + ZTOI(zp)->i_ctime = timespec_trunc(vap->va_ctime, + ZTOI(zp)->i_sb->s_time_gran); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, + ctime, sizeof (ctime)); + } + + if (attrzp && mask) { + SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, + SA_ZPL_CTIME(zfsvfs), NULL, &ctime, + sizeof (ctime)); + } + + /* + * Do this after setting timestamps to prevent timestamp + * update from toggling bit + */ + + if (xoap && (mask & ATTR_XVATTR)) { + + /* + * restore trimmed off masks + * so that return masks can be set for caller. + */ + + if (XVA_ISSET_REQ(tmpxvattr, XAT_APPENDONLY)) { + XVA_SET_REQ(xvap, XAT_APPENDONLY); + } + if (XVA_ISSET_REQ(tmpxvattr, XAT_NOUNLINK)) { + XVA_SET_REQ(xvap, XAT_NOUNLINK); + } + if (XVA_ISSET_REQ(tmpxvattr, XAT_IMMUTABLE)) { + XVA_SET_REQ(xvap, XAT_IMMUTABLE); + } + if (XVA_ISSET_REQ(tmpxvattr, XAT_NODUMP)) { + XVA_SET_REQ(xvap, XAT_NODUMP); + } + if (XVA_ISSET_REQ(tmpxvattr, XAT_AV_MODIFIED)) { + XVA_SET_REQ(xvap, XAT_AV_MODIFIED); + } + if (XVA_ISSET_REQ(tmpxvattr, XAT_AV_QUARANTINED)) { + XVA_SET_REQ(xvap, XAT_AV_QUARANTINED); + } + + if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) + ASSERT(S_ISREG(ip->i_mode)); + + zfs_xvattr_set(zp, xvap, tx); + } + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + if (mask != 0) + zfs_log_setattr(zilog, tx, TX_SETATTR, zp, vap, mask, fuidp); + + mutex_exit(&zp->z_lock); + if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE)) + mutex_exit(&zp->z_acl_lock); + + if (attrzp) { + if (mask & (ATTR_UID|ATTR_GID|ATTR_MODE)) + mutex_exit(&attrzp->z_acl_lock); + mutex_exit(&attrzp->z_lock); + } +out: + if (err == 0 && attrzp) { + err2 = sa_bulk_update(attrzp->z_sa_hdl, xattr_bulk, + xattr_count, tx); + ASSERT(err2 == 0); + } + + if (aclp) + zfs_acl_free(aclp); + + if (fuidp) { + zfs_fuid_info_free(fuidp); + fuidp = NULL; + } + + if (err) { + dmu_tx_abort(tx); + if (attrzp) + iput(ZTOI(attrzp)); + if (err == ERESTART) + goto top; + } else { + err2 = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); + dmu_tx_commit(tx); + if (attrzp) + iput(ZTOI(attrzp)); + zfs_inode_update(zp); + } + +out2: + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + +out3: + kmem_free(xattr_bulk, sizeof (sa_bulk_attr_t) * 7); + kmem_free(bulk, sizeof (sa_bulk_attr_t) * 7); + kmem_free(tmpxvattr, sizeof (xvattr_t)); + ZFS_EXIT(zfsvfs); + return (err); +} + +typedef struct zfs_zlock { + krwlock_t *zl_rwlock; /* lock we acquired */ + znode_t *zl_znode; /* znode we held */ + struct zfs_zlock *zl_next; /* next in list */ +} zfs_zlock_t; + +/* + * Drop locks and release vnodes that were held by zfs_rename_lock(). + */ +static void +zfs_rename_unlock(zfs_zlock_t **zlpp) +{ + zfs_zlock_t *zl; + + while ((zl = *zlpp) != NULL) { + if (zl->zl_znode != NULL) + zfs_iput_async(ZTOI(zl->zl_znode)); + rw_exit(zl->zl_rwlock); + *zlpp = zl->zl_next; + kmem_free(zl, sizeof (*zl)); + } +} + +/* + * Search back through the directory tree, using the ".." entries. + * Lock each directory in the chain to prevent concurrent renames. + * Fail any attempt to move a directory into one of its own descendants. + * XXX - z_parent_lock can overlap with map or grow locks + */ +static int +zfs_rename_lock(znode_t *szp, znode_t *tdzp, znode_t *sdzp, zfs_zlock_t **zlpp) +{ + zfs_zlock_t *zl; + znode_t *zp = tdzp; + uint64_t rootid = ZTOZSB(zp)->z_root; + uint64_t oidp = zp->z_id; + krwlock_t *rwlp = &szp->z_parent_lock; + krw_t rw = RW_WRITER; + + /* + * First pass write-locks szp and compares to zp->z_id. + * Later passes read-lock zp and compare to zp->z_parent. + */ + do { + if (!rw_tryenter(rwlp, rw)) { + /* + * Another thread is renaming in this path. + * Note that if we are a WRITER, we don't have any + * parent_locks held yet. + */ + if (rw == RW_READER && zp->z_id > szp->z_id) { + /* + * Drop our locks and restart + */ + zfs_rename_unlock(&zl); + *zlpp = NULL; + zp = tdzp; + oidp = zp->z_id; + rwlp = &szp->z_parent_lock; + rw = RW_WRITER; + continue; + } else { + /* + * Wait for other thread to drop its locks + */ + rw_enter(rwlp, rw); + } + } + + zl = kmem_alloc(sizeof (*zl), KM_SLEEP); + zl->zl_rwlock = rwlp; + zl->zl_znode = NULL; + zl->zl_next = *zlpp; + *zlpp = zl; + + if (oidp == szp->z_id) /* We're a descendant of szp */ + return (SET_ERROR(EINVAL)); + + if (oidp == rootid) /* We've hit the top */ + return (0); + + if (rw == RW_READER) { /* i.e. not the first pass */ + int error = zfs_zget(ZTOZSB(zp), oidp, &zp); + if (error) + return (error); + zl->zl_znode = zp; + } + (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_PARENT(ZTOZSB(zp)), + &oidp, sizeof (oidp)); + rwlp = &zp->z_parent_lock; + rw = RW_READER; + + } while (zp->z_id != sdzp->z_id); + + return (0); +} + +/* + * Move an entry from the provided source directory to the target + * directory. Change the entry name as indicated. + * + * IN: sdip - Source directory containing the "old entry". + * snm - Old entry name. + * tdip - Target directory to contain the "new entry". + * tnm - New entry name. + * cr - credentials of caller. + * flags - case flags + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * sdip,tdip - ctime|mtime updated + */ +/*ARGSUSED*/ +int +zfs_rename(struct inode *sdip, char *snm, struct inode *tdip, char *tnm, + cred_t *cr, int flags) +{ + znode_t *tdzp, *szp, *tzp; + znode_t *sdzp = ITOZ(sdip); + zfsvfs_t *zfsvfs = ITOZSB(sdip); + zilog_t *zilog; + zfs_dirlock_t *sdl, *tdl; + dmu_tx_t *tx; + zfs_zlock_t *zl; + int cmp, serr, terr; + int error = 0; + int zflg = 0; + boolean_t waited = B_FALSE; + + if (snm == NULL || tnm == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(sdzp); + zilog = zfsvfs->z_log; + + tdzp = ITOZ(tdip); + ZFS_VERIFY_ZP(tdzp); + + /* + * We check i_sb because snapshots and the ctldir must have different + * super blocks. + */ + if (tdip->i_sb != sdip->i_sb || zfsctl_is_node(tdip)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EXDEV)); + } + + if (zfsvfs->z_utf8 && u8_validate(tnm, + strlen(tnm), NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + + if (flags & FIGNORECASE) + zflg |= ZCILOOK; + +top: + szp = NULL; + tzp = NULL; + zl = NULL; + + /* + * This is to prevent the creation of links into attribute space + * by renaming a linked file into/outof an attribute directory. + * See the comment in zfs_link() for why this is considered bad. + */ + if ((tdzp->z_pflags & ZFS_XATTR) != (sdzp->z_pflags & ZFS_XATTR)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * Lock source and target directory entries. To prevent deadlock, + * a lock ordering must be defined. We lock the directory with + * the smallest object id first, or if it's a tie, the one with + * the lexically first name. + */ + if (sdzp->z_id < tdzp->z_id) { + cmp = -1; + } else if (sdzp->z_id > tdzp->z_id) { + cmp = 1; + } else { + /* + * First compare the two name arguments without + * considering any case folding. + */ + int nofold = (zfsvfs->z_norm & ~U8_TEXTPREP_TOUPPER); + + cmp = u8_strcmp(snm, tnm, 0, nofold, U8_UNICODE_LATEST, &error); + ASSERT(error == 0 || !zfsvfs->z_utf8); + if (cmp == 0) { + /* + * POSIX: "If the old argument and the new argument + * both refer to links to the same existing file, + * the rename() function shall return successfully + * and perform no other action." + */ + ZFS_EXIT(zfsvfs); + return (0); + } + /* + * If the file system is case-folding, then we may + * have some more checking to do. A case-folding file + * system is either supporting mixed case sensitivity + * access or is completely case-insensitive. Note + * that the file system is always case preserving. + * + * In mixed sensitivity mode case sensitive behavior + * is the default. FIGNORECASE must be used to + * explicitly request case insensitive behavior. + * + * If the source and target names provided differ only + * by case (e.g., a request to rename 'tim' to 'Tim'), + * we will treat this as a special case in the + * case-insensitive mode: as long as the source name + * is an exact match, we will allow this to proceed as + * a name-change request. + */ + if ((zfsvfs->z_case == ZFS_CASE_INSENSITIVE || + (zfsvfs->z_case == ZFS_CASE_MIXED && + flags & FIGNORECASE)) && + u8_strcmp(snm, tnm, 0, zfsvfs->z_norm, U8_UNICODE_LATEST, + &error) == 0) { + /* + * case preserving rename request, require exact + * name matches + */ + zflg |= ZCIEXACT; + zflg &= ~ZCILOOK; + } + } + + /* + * If the source and destination directories are the same, we should + * grab the z_name_lock of that directory only once. + */ + if (sdzp == tdzp) { + zflg |= ZHAVELOCK; + rw_enter(&sdzp->z_name_lock, RW_READER); + } + + if (cmp < 0) { + serr = zfs_dirent_lock(&sdl, sdzp, snm, &szp, + ZEXISTS | zflg, NULL, NULL); + terr = zfs_dirent_lock(&tdl, + tdzp, tnm, &tzp, ZRENAMING | zflg, NULL, NULL); + } else { + terr = zfs_dirent_lock(&tdl, + tdzp, tnm, &tzp, zflg, NULL, NULL); + serr = zfs_dirent_lock(&sdl, + sdzp, snm, &szp, ZEXISTS | ZRENAMING | zflg, + NULL, NULL); + } + + if (serr) { + /* + * Source entry invalid or not there. + */ + if (!terr) { + zfs_dirent_unlock(tdl); + if (tzp) + iput(ZTOI(tzp)); + } + + if (sdzp == tdzp) + rw_exit(&sdzp->z_name_lock); + + if (strcmp(snm, "..") == 0) + serr = EINVAL; + ZFS_EXIT(zfsvfs); + return (serr); + } + if (terr) { + zfs_dirent_unlock(sdl); + iput(ZTOI(szp)); + + if (sdzp == tdzp) + rw_exit(&sdzp->z_name_lock); + + if (strcmp(tnm, "..") == 0) + terr = EINVAL; + ZFS_EXIT(zfsvfs); + return (terr); + } + + /* + * Must have write access at the source to remove the old entry + * and write access at the target to create the new entry. + * Note that if target and source are the same, this can be + * done in a single check. + */ + + if ((error = zfs_zaccess_rename(sdzp, szp, tdzp, tzp, cr))) + goto out; + + if (S_ISDIR(ZTOI(szp)->i_mode)) { + /* + * Check to make sure rename is valid. + * Can't do a move like this: /usr/a/b to /usr/a/b/c/d + */ + if ((error = zfs_rename_lock(szp, tdzp, sdzp, &zl))) + goto out; + } + + /* + * Does target exist? + */ + if (tzp) { + /* + * Source and target must be the same type. + */ + if (S_ISDIR(ZTOI(szp)->i_mode)) { + if (!S_ISDIR(ZTOI(tzp)->i_mode)) { + error = SET_ERROR(ENOTDIR); + goto out; + } + } else { + if (S_ISDIR(ZTOI(tzp)->i_mode)) { + error = SET_ERROR(EISDIR); + goto out; + } + } + /* + * POSIX dictates that when the source and target + * entries refer to the same file object, rename + * must do nothing and exit without error. + */ + if (szp->z_id == tzp->z_id) { + error = 0; + goto out; + } + } + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, szp->z_sa_hdl, B_FALSE); + dmu_tx_hold_sa(tx, sdzp->z_sa_hdl, B_FALSE); + dmu_tx_hold_zap(tx, sdzp->z_id, FALSE, snm); + dmu_tx_hold_zap(tx, tdzp->z_id, TRUE, tnm); + if (sdzp != tdzp) { + dmu_tx_hold_sa(tx, tdzp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, tdzp); + } + if (tzp) { + dmu_tx_hold_sa(tx, tzp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, tzp); + } + + zfs_sa_upgrade_txholds(tx, szp); + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + if (zl != NULL) + zfs_rename_unlock(&zl); + zfs_dirent_unlock(sdl); + zfs_dirent_unlock(tdl); + + if (sdzp == tdzp) + rw_exit(&sdzp->z_name_lock); + + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + iput(ZTOI(szp)); + if (tzp) + iput(ZTOI(tzp)); + goto top; + } + dmu_tx_abort(tx); + iput(ZTOI(szp)); + if (tzp) + iput(ZTOI(tzp)); + ZFS_EXIT(zfsvfs); + return (error); + } + + if (tzp) /* Attempt to remove the existing target */ + error = zfs_link_destroy(tdl, tzp, tx, zflg, NULL); + + if (error == 0) { + error = zfs_link_create(tdl, szp, tx, ZRENAMING); + if (error == 0) { + szp->z_pflags |= ZFS_AV_MODIFIED; + + error = sa_update(szp->z_sa_hdl, SA_ZPL_FLAGS(zfsvfs), + (void *)&szp->z_pflags, sizeof (uint64_t), tx); + ASSERT0(error); + + error = zfs_link_destroy(sdl, szp, tx, ZRENAMING, NULL); + if (error == 0) { + zfs_log_rename(zilog, tx, TX_RENAME | + (flags & FIGNORECASE ? TX_CI : 0), sdzp, + sdl->dl_name, tdzp, tdl->dl_name, szp); + } else { + /* + * At this point, we have successfully created + * the target name, but have failed to remove + * the source name. Since the create was done + * with the ZRENAMING flag, there are + * complications; for one, the link count is + * wrong. The easiest way to deal with this + * is to remove the newly created target, and + * return the original error. This must + * succeed; fortunately, it is very unlikely to + * fail, since we just created it. + */ + VERIFY3U(zfs_link_destroy(tdl, szp, tx, + ZRENAMING, NULL), ==, 0); + } + } + } + + dmu_tx_commit(tx); +out: + if (zl != NULL) + zfs_rename_unlock(&zl); + + zfs_dirent_unlock(sdl); + zfs_dirent_unlock(tdl); + + zfs_inode_update(sdzp); + if (sdzp == tdzp) + rw_exit(&sdzp->z_name_lock); + + if (sdzp != tdzp) + zfs_inode_update(tdzp); + + zfs_inode_update(szp); + iput(ZTOI(szp)); + if (tzp) { + zfs_inode_update(tzp); + iput(ZTOI(tzp)); + } + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Insert the indicated symbolic reference entry into the directory. + * + * IN: dip - Directory to contain new symbolic link. + * link - Name for new symlink entry. + * vap - Attributes of new entry. + * target - Target path of new symlink. + * + * cr - credentials of caller. + * flags - case flags + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * dip - ctime|mtime updated + */ +/*ARGSUSED*/ +int +zfs_symlink(struct inode *dip, char *name, vattr_t *vap, char *link, + struct inode **ipp, cred_t *cr, int flags) +{ + znode_t *zp, *dzp = ITOZ(dip); + zfs_dirlock_t *dl; + dmu_tx_t *tx; + zfsvfs_t *zfsvfs = ITOZSB(dip); + zilog_t *zilog; + uint64_t len = strlen(link); + int error; + int zflg = ZNEW; + zfs_acl_ids_t acl_ids; + boolean_t fuid_dirtied; + uint64_t txtype = TX_SYMLINK; + boolean_t waited = B_FALSE; + + ASSERT(S_ISLNK(vap->va_mode)); + + if (name == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + zilog = zfsvfs->z_log; + + if (zfsvfs->z_utf8 && u8_validate(name, strlen(name), + NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + if (flags & FIGNORECASE) + zflg |= ZCILOOK; + + if (len > MAXPATHLEN) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENAMETOOLONG)); + } + + if ((error = zfs_acl_ids_create(dzp, 0, + vap, cr, NULL, &acl_ids)) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } +top: + *ipp = NULL; + + /* + * Attempt to lock directory; fail if entry already exists. + */ + error = zfs_dirent_lock(&dl, dzp, name, &zp, zflg, NULL, NULL); + if (error) { + zfs_acl_ids_free(&acl_ids); + ZFS_EXIT(zfsvfs); + return (error); + } + + if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) { + zfs_acl_ids_free(&acl_ids); + zfs_dirent_unlock(dl); + ZFS_EXIT(zfsvfs); + return (error); + } + + if (zfs_acl_ids_overquota(zfsvfs, &acl_ids)) { + zfs_acl_ids_free(&acl_ids); + zfs_dirent_unlock(dl); + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EDQUOT)); + } + tx = dmu_tx_create(zfsvfs->z_os); + fuid_dirtied = zfsvfs->z_fuid_dirty; + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, MAX(1, len)); + dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name); + dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + + ZFS_SA_BASE_ATTR_SIZE + len); + dmu_tx_hold_sa(tx, dzp->z_sa_hdl, B_FALSE); + if (!zfsvfs->z_use_sa && acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) { + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, + acl_ids.z_aclp->z_acl_bytes); + } + if (fuid_dirtied) + zfs_fuid_txhold(zfsvfs, tx); + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + zfs_acl_ids_free(&acl_ids); + dmu_tx_abort(tx); + ZFS_EXIT(zfsvfs); + return (error); + } + + /* + * Create a new object for the symlink. + * for version 4 ZPL datsets the symlink will be an SA attribute + */ + zfs_mknode(dzp, vap, tx, cr, 0, &zp, &acl_ids); + + if (fuid_dirtied) + zfs_fuid_sync(zfsvfs, tx); + + mutex_enter(&zp->z_lock); + if (zp->z_is_sa) + error = sa_update(zp->z_sa_hdl, SA_ZPL_SYMLINK(zfsvfs), + link, len, tx); + else + zfs_sa_symlink(zp, link, len, tx); + mutex_exit(&zp->z_lock); + + zp->z_size = len; + (void) sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(zfsvfs), + &zp->z_size, sizeof (zp->z_size), tx); + /* + * Insert the new object into the directory. + */ + (void) zfs_link_create(dl, zp, tx, ZNEW); + + if (flags & FIGNORECASE) + txtype |= TX_CI; + zfs_log_symlink(zilog, tx, txtype, dzp, zp, name, link); + + zfs_inode_update(dzp); + zfs_inode_update(zp); + + zfs_acl_ids_free(&acl_ids); + + dmu_tx_commit(tx); + + zfs_dirent_unlock(dl); + + *ipp = ZTOI(zp); + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Return, in the buffer contained in the provided uio structure, + * the symbolic path referred to by ip. + * + * IN: ip - inode of symbolic link + * uio - structure to contain the link path. + * cr - credentials of caller. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * ip - atime updated + */ +/* ARGSUSED */ +int +zfs_readlink(struct inode *ip, uio_t *uio, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + mutex_enter(&zp->z_lock); + if (zp->z_is_sa) + error = sa_lookup_uio(zp->z_sa_hdl, + SA_ZPL_SYMLINK(zfsvfs), uio); + else + error = zfs_sa_readlink(zp, uio); + mutex_exit(&zp->z_lock); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/* + * Insert a new entry into directory tdip referencing sip. + * + * IN: tdip - Directory to contain new entry. + * sip - inode of new entry. + * name - name of new entry. + * cr - credentials of caller. + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * tdip - ctime|mtime updated + * sip - ctime updated + */ +/* ARGSUSED */ +int +zfs_link(struct inode *tdip, struct inode *sip, char *name, cred_t *cr, + int flags) +{ + znode_t *dzp = ITOZ(tdip); + znode_t *tzp, *szp; + zfsvfs_t *zfsvfs = ITOZSB(tdip); + zilog_t *zilog; + zfs_dirlock_t *dl; + dmu_tx_t *tx; + int error; + int zf = ZNEW; + uint64_t parent; + uid_t owner; + boolean_t waited = B_FALSE; + boolean_t is_tmpfile = 0; + uint64_t txg; +#ifdef HAVE_TMPFILE + is_tmpfile = (sip->i_nlink == 0 && (sip->i_state & I_LINKABLE)); +#endif + ASSERT(S_ISDIR(tdip->i_mode)); + + if (name == NULL) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(dzp); + zilog = zfsvfs->z_log; + + /* + * POSIX dictates that we return EPERM here. + * Better choices include ENOTSUP or EISDIR. + */ + if (S_ISDIR(sip->i_mode)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + szp = ITOZ(sip); + ZFS_VERIFY_ZP(szp); + + /* + * We check i_sb because snapshots and the ctldir must have different + * super blocks. + */ + if (sip->i_sb != tdip->i_sb || zfsctl_is_node(sip)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EXDEV)); + } + + /* Prevent links to .zfs/shares files */ + + if ((error = sa_lookup(szp->z_sa_hdl, SA_ZPL_PARENT(zfsvfs), + &parent, sizeof (uint64_t))) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + if (parent == zfsvfs->z_shares_dir) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + if (zfsvfs->z_utf8 && u8_validate(name, + strlen(name), NULL, U8_VALIDATE_ENTIRE, &error) < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EILSEQ)); + } + if (flags & FIGNORECASE) + zf |= ZCILOOK; + + /* + * We do not support links between attributes and non-attributes + * because of the potential security risk of creating links + * into "normal" file space in order to circumvent restrictions + * imposed in attribute space. + */ + if ((szp->z_pflags & ZFS_XATTR) != (dzp->z_pflags & ZFS_XATTR)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + owner = zfs_fuid_map_id(zfsvfs, KUID_TO_SUID(sip->i_uid), + cr, ZFS_OWNER); + if (owner != crgetuid(cr) && secpolicy_basic_link(cr) != 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + if ((error = zfs_zaccess(dzp, ACE_ADD_FILE, 0, B_FALSE, cr))) { + ZFS_EXIT(zfsvfs); + return (error); + } + +top: + /* + * Attempt to lock directory; fail if entry already exists. + */ + error = zfs_dirent_lock(&dl, dzp, name, &tzp, zf, NULL, NULL); + if (error) { + ZFS_EXIT(zfsvfs); + return (error); + } + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, szp->z_sa_hdl, B_FALSE); + dmu_tx_hold_zap(tx, dzp->z_id, TRUE, name); + if (is_tmpfile) + dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); + + zfs_sa_upgrade_txholds(tx, szp); + zfs_sa_upgrade_txholds(tx, dzp); + error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT); + if (error) { + zfs_dirent_unlock(dl); + if (error == ERESTART) { + waited = B_TRUE; + dmu_tx_wait(tx); + dmu_tx_abort(tx); + goto top; + } + dmu_tx_abort(tx); + ZFS_EXIT(zfsvfs); + return (error); + } + /* unmark z_unlinked so zfs_link_create will not reject */ + if (is_tmpfile) + szp->z_unlinked = 0; + error = zfs_link_create(dl, szp, tx, 0); + + if (error == 0) { + uint64_t txtype = TX_LINK; + /* + * tmpfile is created to be in z_unlinkedobj, so remove it. + * Also, we don't log in ZIL, be cause all previous file + * operation on the tmpfile are ignored by ZIL. Instead we + * always wait for txg to sync to make sure all previous + * operation are sync safe. + */ + if (is_tmpfile) { + VERIFY(zap_remove_int(zfsvfs->z_os, + zfsvfs->z_unlinkedobj, szp->z_id, tx) == 0); + } else { + if (flags & FIGNORECASE) + txtype |= TX_CI; + zfs_log_link(zilog, tx, txtype, dzp, szp, name); + } + } else if (is_tmpfile) { + /* restore z_unlinked since when linking failed */ + szp->z_unlinked = 1; + } + txg = dmu_tx_get_txg(tx); + dmu_tx_commit(tx); + + zfs_dirent_unlock(dl); + + if (!is_tmpfile && zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + if (is_tmpfile) + txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), txg); + + zfs_inode_update(dzp); + zfs_inode_update(szp); + ZFS_EXIT(zfsvfs); + return (error); +} + +static void +zfs_putpage_commit_cb(void *arg) +{ + struct page *pp = arg; + + ClearPageError(pp); + end_page_writeback(pp); +} + +/* + * Push a page out to disk, once the page is on stable storage the + * registered commit callback will be run as notification of completion. + * + * IN: ip - page mapped for inode. + * pp - page to push (page is locked) + * wbc - writeback control data + * + * RETURN: 0 if success + * error code if failure + * + * Timestamps: + * ip - ctime|mtime updated + */ +/* ARGSUSED */ +int +zfs_putpage(struct inode *ip, struct page *pp, struct writeback_control *wbc) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + loff_t offset; + loff_t pgoff; + unsigned int pglen; + rl_t *rl; + dmu_tx_t *tx; + caddr_t va; + int err = 0; + uint64_t mtime[2], ctime[2]; + sa_bulk_attr_t bulk[3]; + int cnt = 0; + struct address_space *mapping; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + ASSERT(PageLocked(pp)); + + pgoff = page_offset(pp); /* Page byte-offset in file */ + offset = i_size_read(ip); /* File length in bytes */ + pglen = MIN(PAGE_SIZE, /* Page length in bytes */ + P2ROUNDUP(offset, PAGE_SIZE)-pgoff); + + /* Page is beyond end of file */ + if (pgoff >= offset) { + unlock_page(pp); + ZFS_EXIT(zfsvfs); + return (0); + } + + /* Truncate page length to end of file */ + if (pgoff + pglen > offset) + pglen = offset - pgoff; + +#if 0 + /* + * FIXME: Allow mmap writes past its quota. The correct fix + * is to register a page_mkwrite() handler to count the page + * against its quota when it is about to be dirtied. + */ + if (zfs_owner_overquota(zfsvfs, zp, B_FALSE) || + zfs_owner_overquota(zfsvfs, zp, B_TRUE)) { + err = EDQUOT; + } +#endif + + /* + * The ordering here is critical and must adhere to the following + * rules in order to avoid deadlocking in either zfs_read() or + * zfs_free_range() due to a lock inversion. + * + * 1) The page must be unlocked prior to acquiring the range lock. + * This is critical because zfs_read() calls find_lock_page() + * which may block on the page lock while holding the range lock. + * + * 2) Before setting or clearing write back on a page the range lock + * must be held in order to prevent a lock inversion with the + * zfs_free_range() function. + * + * This presents a problem because upon entering this function the + * page lock is already held. To safely acquire the range lock the + * page lock must be dropped. This creates a window where another + * process could truncate, invalidate, dirty, or write out the page. + * + * Therefore, after successfully reacquiring the range and page locks + * the current page state is checked. In the common case everything + * will be as is expected and it can be written out. However, if + * the page state has changed it must be handled accordingly. + */ + mapping = pp->mapping; + redirty_page_for_writepage(wbc, pp); + unlock_page(pp); + + rl = zfs_range_lock(&zp->z_range_lock, pgoff, pglen, RL_WRITER); + lock_page(pp); + + /* Page mapping changed or it was no longer dirty, we're done */ + if (unlikely((mapping != pp->mapping) || !PageDirty(pp))) { + unlock_page(pp); + zfs_range_unlock(rl); + ZFS_EXIT(zfsvfs); + return (0); + } + + /* Another process started write block if required */ + if (PageWriteback(pp)) { + unlock_page(pp); + zfs_range_unlock(rl); + + if (wbc->sync_mode != WB_SYNC_NONE) + wait_on_page_writeback(pp); + + ZFS_EXIT(zfsvfs); + return (0); + } + + /* Clear the dirty flag the required locks are held */ + if (!clear_page_dirty_for_io(pp)) { + unlock_page(pp); + zfs_range_unlock(rl); + ZFS_EXIT(zfsvfs); + return (0); + } + + /* + * Counterpart for redirty_page_for_writepage() above. This page + * was in fact not skipped and should not be counted as if it were. + */ + wbc->pages_skipped--; + set_page_writeback(pp); + unlock_page(pp); + + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_write(tx, zp->z_id, pgoff, pglen); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + + err = dmu_tx_assign(tx, TXG_NOWAIT); + if (err != 0) { + if (err == ERESTART) + dmu_tx_wait(tx); + + dmu_tx_abort(tx); + __set_page_dirty_nobuffers(pp); + ClearPageError(pp); + end_page_writeback(pp); + zfs_range_unlock(rl); + ZFS_EXIT(zfsvfs); + return (err); + } + + va = kmap(pp); + ASSERT3U(pglen, <=, PAGE_SIZE); + dmu_write(zfsvfs->z_os, zp->z_id, pgoff, pglen, va, tx); + kunmap(pp); + + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, 8); + + /* Preserve the mtime and ctime provided by the inode */ + ZFS_TIME_ENCODE(&ip->i_mtime, mtime); + ZFS_TIME_ENCODE(&ip->i_ctime, ctime); + zp->z_atime_dirty = 0; + zp->z_seq++; + + err = sa_bulk_update(zp->z_sa_hdl, bulk, cnt, tx); + + zfs_log_write(zfsvfs->z_log, tx, TX_WRITE, zp, pgoff, pglen, 0, + zfs_putpage_commit_cb, pp); + dmu_tx_commit(tx); + + zfs_range_unlock(rl); + + if (wbc->sync_mode != WB_SYNC_NONE) { + /* + * Note that this is rarely called under writepages(), because + * writepages() normally handles the entire commit for + * performance reasons. + */ + zil_commit(zfsvfs->z_log, zp->z_id); + } + + ZFS_EXIT(zfsvfs); + return (err); +} + +/* + * Update the system attributes when the inode has been dirtied. For the + * moment we only update the mode, atime, mtime, and ctime. + */ +int +zfs_dirty_inode(struct inode *ip, int flags) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + dmu_tx_t *tx; + uint64_t mode, atime[2], mtime[2], ctime[2]; + sa_bulk_attr_t bulk[4]; + int error = 0; + int cnt = 0; + + if (zfs_is_readonly(zfsvfs) || dmu_objset_is_snapshot(zfsvfs->z_os)) + return (0); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + +#ifdef I_DIRTY_TIME + /* + * This is the lazytime semantic indroduced in Linux 4.0 + * This flag will only be called from update_time when lazytime is set. + * (Note, I_DIRTY_SYNC will also set if not lazytime) + * Fortunately mtime and ctime are managed within ZFS itself, so we + * only need to dirty atime. + */ + if (flags == I_DIRTY_TIME) { + zp->z_atime_dirty = 1; + goto out; + } +#endif + + tx = dmu_tx_create(zfsvfs->z_os); + + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + goto out; + } + + mutex_enter(&zp->z_lock); + zp->z_atime_dirty = 0; + + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_MODE(zfsvfs), NULL, &mode, 8); + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_ATIME(zfsvfs), NULL, &atime, 16); + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + + /* Preserve the mode, mtime and ctime provided by the inode */ + ZFS_TIME_ENCODE(&ip->i_atime, atime); + ZFS_TIME_ENCODE(&ip->i_mtime, mtime); + ZFS_TIME_ENCODE(&ip->i_ctime, ctime); + mode = ip->i_mode; + + zp->z_mode = mode; + + error = sa_bulk_update(zp->z_sa_hdl, bulk, cnt, tx); + mutex_exit(&zp->z_lock); + + dmu_tx_commit(tx); +out: + ZFS_EXIT(zfsvfs); + return (error); +} + +/*ARGSUSED*/ +void +zfs_inactive(struct inode *ip) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + uint64_t atime[2]; + int error; + int need_unlock = 0; + + /* Only read lock if we haven't already write locked, e.g. rollback */ + if (!RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)) { + need_unlock = 1; + rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_READER); + } + if (zp->z_sa_hdl == NULL) { + if (need_unlock) + rw_exit(&zfsvfs->z_teardown_inactive_lock); + return; + } + + if (zp->z_atime_dirty && zp->z_unlinked == 0) { + dmu_tx_t *tx = dmu_tx_create(zfsvfs->z_os); + + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + } else { + ZFS_TIME_ENCODE(&ip->i_atime, atime); + mutex_enter(&zp->z_lock); + (void) sa_update(zp->z_sa_hdl, SA_ZPL_ATIME(zfsvfs), + (void *)&atime, sizeof (atime), tx); + zp->z_atime_dirty = 0; + mutex_exit(&zp->z_lock); + dmu_tx_commit(tx); + } + } + + zfs_zinactive(zp); + if (need_unlock) + rw_exit(&zfsvfs->z_teardown_inactive_lock); +} + +/* + * Bounds-check the seek operation. + * + * IN: ip - inode seeking within + * ooff - old file offset + * noffp - pointer to new file offset + * ct - caller context + * + * RETURN: 0 if success + * EINVAL if new offset invalid + */ +/* ARGSUSED */ +int +zfs_seek(struct inode *ip, offset_t ooff, offset_t *noffp) +{ + if (S_ISDIR(ip->i_mode)) + return (0); + return ((*noffp < 0 || *noffp > MAXOFFSET_T) ? EINVAL : 0); +} + +/* + * Fill pages with data from the disk. + */ +static int +zfs_fillpage(struct inode *ip, struct page *pl[], int nr_pages) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + objset_t *os; + struct page *cur_pp; + u_offset_t io_off, total; + size_t io_len; + loff_t i_size; + unsigned page_idx; + int err; + + os = zfsvfs->z_os; + io_len = nr_pages << PAGE_SHIFT; + i_size = i_size_read(ip); + io_off = page_offset(pl[0]); + + if (io_off + io_len > i_size) + io_len = i_size - io_off; + + /* + * Iterate over list of pages and read each page individually. + */ + page_idx = 0; + for (total = io_off + io_len; io_off < total; io_off += PAGESIZE) { + caddr_t va; + + cur_pp = pl[page_idx++]; + va = kmap(cur_pp); + err = dmu_read(os, zp->z_id, io_off, PAGESIZE, va, + DMU_READ_PREFETCH); + kunmap(cur_pp); + if (err) { + /* convert checksum errors into IO errors */ + if (err == ECKSUM) + err = SET_ERROR(EIO); + return (err); + } + } + + return (0); +} + +/* + * Uses zfs_fillpage to read data from the file and fill the pages. + * + * IN: ip - inode of file to get data from. + * pl - list of pages to read + * nr_pages - number of pages to read + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * vp - atime updated + */ +/* ARGSUSED */ +int +zfs_getpage(struct inode *ip, struct page *pl[], int nr_pages) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int err; + + if (pl == NULL) + return (0); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + err = zfs_fillpage(ip, pl, nr_pages); + + ZFS_EXIT(zfsvfs); + return (err); +} + +/* + * Check ZFS specific permissions to memory map a section of a file. + * + * IN: ip - inode of the file to mmap + * off - file offset + * addrp - start address in memory region + * len - length of memory region + * vm_flags- address flags + * + * RETURN: 0 if success + * error code if failure + */ +/*ARGSUSED*/ +int +zfs_map(struct inode *ip, offset_t off, caddr_t *addrp, size_t len, + unsigned long vm_flags) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if ((vm_flags & VM_WRITE) && (zp->z_pflags & + (ZFS_IMMUTABLE | ZFS_READONLY | ZFS_APPENDONLY))) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EPERM)); + } + + if ((vm_flags & (VM_READ | VM_EXEC)) && + (zp->z_pflags & ZFS_AV_QUARANTINED)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EACCES)); + } + + if (off < 0 || len > MAXOFFSET_T - off) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(ENXIO)); + } + + ZFS_EXIT(zfsvfs); + return (0); +} + +/* + * convoff - converts the given data (start, whence) to the + * given whence. + */ +int +convoff(struct inode *ip, flock64_t *lckdat, int whence, offset_t offset) +{ + vattr_t vap; + int error; + + if ((lckdat->l_whence == 2) || (whence == 2)) { + if ((error = zfs_getattr(ip, &vap, 0, CRED()))) + return (error); + } + + switch (lckdat->l_whence) { + case 1: + lckdat->l_start += offset; + break; + case 2: + lckdat->l_start += vap.va_size; + /* FALLTHRU */ + case 0: + break; + default: + return (SET_ERROR(EINVAL)); + } + + if (lckdat->l_start < 0) + return (SET_ERROR(EINVAL)); + + switch (whence) { + case 1: + lckdat->l_start -= offset; + break; + case 2: + lckdat->l_start -= vap.va_size; + /* FALLTHRU */ + case 0: + break; + default: + return (SET_ERROR(EINVAL)); + } + + lckdat->l_whence = (short)whence; + return (0); +} + +/* + * Free or allocate space in a file. Currently, this function only + * supports the `F_FREESP' command. However, this command is somewhat + * misnamed, as its functionality includes the ability to allocate as + * well as free space. + * + * IN: ip - inode of file to free data in. + * cmd - action to take (only F_FREESP supported). + * bfp - section of file to free/alloc. + * flag - current file open mode flags. + * offset - current file offset. + * cr - credentials of caller [UNUSED]. + * + * RETURN: 0 on success, error code on failure. + * + * Timestamps: + * ip - ctime|mtime updated + */ +/* ARGSUSED */ +int +zfs_space(struct inode *ip, int cmd, flock64_t *bfp, int flag, + offset_t offset, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + uint64_t off, len; + int error; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if (cmd != F_FREESP) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * Callers might not be able to detect properly that we are read-only, + * so check it explicitly here. + */ + if (zfs_is_readonly(zfsvfs)) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EROFS)); + } + + if ((error = convoff(ip, bfp, 0, offset))) { + ZFS_EXIT(zfsvfs); + return (error); + } + + if (bfp->l_len < 0) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + /* + * Permissions aren't checked on Solaris because on this OS + * zfs_space() can only be called with an opened file handle. + * On Linux we can get here through truncate_range() which + * operates directly on inodes, so we need to check access rights. + */ + if ((error = zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr))) { + ZFS_EXIT(zfsvfs); + return (error); + } + + off = bfp->l_start; + len = bfp->l_len; /* 0 means from off to end of file */ + + error = zfs_freesp(zp, off, len, flag, TRUE); + + ZFS_EXIT(zfsvfs); + return (error); +} + +/*ARGSUSED*/ +int +zfs_fid(struct inode *ip, fid_t *fidp) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + uint32_t gen; + uint64_t gen64; + uint64_t object = zp->z_id; + zfid_short_t *zfid; + int size, i, error; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), + &gen64, sizeof (uint64_t))) != 0) { + ZFS_EXIT(zfsvfs); + return (error); + } + + gen = (uint32_t)gen64; + + size = SHORT_FID_LEN; + + zfid = (zfid_short_t *)fidp; + + zfid->zf_len = size; + + for (i = 0; i < sizeof (zfid->zf_object); i++) + zfid->zf_object[i] = (uint8_t)(object >> (8 * i)); + + /* Must have a non-zero generation number to distinguish from .zfs */ + if (gen == 0) + gen = 1; + for (i = 0; i < sizeof (zfid->zf_gen); i++) + zfid->zf_gen[i] = (uint8_t)(gen >> (8 * i)); + + ZFS_EXIT(zfsvfs); + return (0); +} + +/*ARGSUSED*/ +int +zfs_getsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error; + boolean_t skipaclchk = (flag & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + error = zfs_getacl(zp, vsecp, skipaclchk, cr); + ZFS_EXIT(zfsvfs); + + return (error); +} + +/*ARGSUSED*/ +int +zfs_setsecattr(struct inode *ip, vsecattr_t *vsecp, int flag, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int error; + boolean_t skipaclchk = (flag & ATTR_NOACLCHECK) ? B_TRUE : B_FALSE; + zilog_t *zilog = zfsvfs->z_log; + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + + error = zfs_setacl(zp, vsecp, skipaclchk, cr); + + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + zil_commit(zilog, 0); + + ZFS_EXIT(zfsvfs); + return (error); +} + +#ifdef HAVE_UIO_ZEROCOPY +/* + * Tunable, both must be a power of 2. + * + * zcr_blksz_min: the smallest read we may consider to loan out an arcbuf + * zcr_blksz_max: if set to less than the file block size, allow loaning out of + * an arcbuf for a partial block read + */ +int zcr_blksz_min = (1 << 10); /* 1K */ +int zcr_blksz_max = (1 << 17); /* 128K */ + +/*ARGSUSED*/ +static int +zfs_reqzcbuf(struct inode *ip, enum uio_rw ioflag, xuio_t *xuio, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ITOZSB(ip); + int max_blksz = zfsvfs->z_max_blksz; + uio_t *uio = &xuio->xu_uio; + ssize_t size = uio->uio_resid; + offset_t offset = uio->uio_loffset; + int blksz; + int fullblk, i; + arc_buf_t *abuf; + ssize_t maxsize; + int preamble, postamble; + + if (xuio->xu_type != UIOTYPE_ZEROCOPY) + return (SET_ERROR(EINVAL)); + + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + switch (ioflag) { + case UIO_WRITE: + /* + * Loan out an arc_buf for write if write size is bigger than + * max_blksz, and the file's block size is also max_blksz. + */ + blksz = max_blksz; + if (size < blksz || zp->z_blksz != blksz) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + /* + * Caller requests buffers for write before knowing where the + * write offset might be (e.g. NFS TCP write). + */ + if (offset == -1) { + preamble = 0; + } else { + preamble = P2PHASE(offset, blksz); + if (preamble) { + preamble = blksz - preamble; + size -= preamble; + } + } + + postamble = P2PHASE(size, blksz); + size -= postamble; + + fullblk = size / blksz; + (void) dmu_xuio_init(xuio, + (preamble != 0) + fullblk + (postamble != 0)); + + /* + * Have to fix iov base/len for partial buffers. They + * currently represent full arc_buf's. + */ + if (preamble) { + /* data begins in the middle of the arc_buf */ + abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl), + blksz); + ASSERT(abuf); + (void) dmu_xuio_add(xuio, abuf, + blksz - preamble, preamble); + } + + for (i = 0; i < fullblk; i++) { + abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl), + blksz); + ASSERT(abuf); + (void) dmu_xuio_add(xuio, abuf, 0, blksz); + } + + if (postamble) { + /* data ends in the middle of the arc_buf */ + abuf = dmu_request_arcbuf(sa_get_db(zp->z_sa_hdl), + blksz); + ASSERT(abuf); + (void) dmu_xuio_add(xuio, abuf, 0, postamble); + } + break; + case UIO_READ: + /* + * Loan out an arc_buf for read if the read size is larger than + * the current file block size. Block alignment is not + * considered. Partial arc_buf will be loaned out for read. + */ + blksz = zp->z_blksz; + if (blksz < zcr_blksz_min) + blksz = zcr_blksz_min; + if (blksz > zcr_blksz_max) + blksz = zcr_blksz_max; + /* avoid potential complexity of dealing with it */ + if (blksz > max_blksz) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + maxsize = zp->z_size - uio->uio_loffset; + if (size > maxsize) + size = maxsize; + + if (size < blksz) { + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + break; + default: + ZFS_EXIT(zfsvfs); + return (SET_ERROR(EINVAL)); + } + + uio->uio_extflg = UIO_XUIO; + XUIO_XUZC_RW(xuio) = ioflag; + ZFS_EXIT(zfsvfs); + return (0); +} + +/*ARGSUSED*/ +static int +zfs_retzcbuf(struct inode *ip, xuio_t *xuio, cred_t *cr) +{ + int i; + arc_buf_t *abuf; + int ioflag = XUIO_XUZC_RW(xuio); + + ASSERT(xuio->xu_type == UIOTYPE_ZEROCOPY); + + i = dmu_xuio_cnt(xuio); + while (i-- > 0) { + abuf = dmu_xuio_arcbuf(xuio, i); + /* + * if abuf == NULL, it must be a write buffer + * that has been returned in zfs_write(). + */ + if (abuf) + dmu_return_arcbuf(abuf); + ASSERT(abuf || ioflag == UIO_WRITE); + } + + dmu_xuio_fini(xuio); + return (0); +} +#endif /* HAVE_UIO_ZEROCOPY */ + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_open); +EXPORT_SYMBOL(zfs_close); +EXPORT_SYMBOL(zfs_read); +EXPORT_SYMBOL(zfs_write); +EXPORT_SYMBOL(zfs_access); +EXPORT_SYMBOL(zfs_lookup); +EXPORT_SYMBOL(zfs_create); +EXPORT_SYMBOL(zfs_tmpfile); +EXPORT_SYMBOL(zfs_remove); +EXPORT_SYMBOL(zfs_mkdir); +EXPORT_SYMBOL(zfs_rmdir); +EXPORT_SYMBOL(zfs_readdir); +EXPORT_SYMBOL(zfs_fsync); +EXPORT_SYMBOL(zfs_getattr); +EXPORT_SYMBOL(zfs_getattr_fast); +EXPORT_SYMBOL(zfs_setattr); +EXPORT_SYMBOL(zfs_rename); +EXPORT_SYMBOL(zfs_symlink); +EXPORT_SYMBOL(zfs_readlink); +EXPORT_SYMBOL(zfs_link); +EXPORT_SYMBOL(zfs_inactive); +EXPORT_SYMBOL(zfs_space); +EXPORT_SYMBOL(zfs_fid); +EXPORT_SYMBOL(zfs_getsecattr); +EXPORT_SYMBOL(zfs_setsecattr); +EXPORT_SYMBOL(zfs_getpage); +EXPORT_SYMBOL(zfs_putpage); +EXPORT_SYMBOL(zfs_dirty_inode); +EXPORT_SYMBOL(zfs_map); + +/* CSTYLED */ +module_param(zfs_delete_blocks, ulong, 0644); +MODULE_PARM_DESC(zfs_delete_blocks, "Delete files larger than N blocks async"); +module_param(zfs_read_chunk_size, long, 0644); +MODULE_PARM_DESC(zfs_read_chunk_size, "Bytes to read per chunk"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zfs_znode.c +++ linux-aws-4.15.0/zfs/module/zfs/zfs_znode.c @@ -0,0 +1,2178 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. + */ + +/* Portions Copyright 2007 Jeremy Teo */ + +#ifdef _KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fs/fs_subr.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif /* _KERNEL */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zfs_prop.h" +#include "zfs_comutil.h" + +/* + * Define ZNODE_STATS to turn on statistic gathering. By default, it is only + * turned on when DEBUG is also defined. + */ +#ifdef DEBUG +#define ZNODE_STATS +#endif /* DEBUG */ + +#ifdef ZNODE_STATS +#define ZNODE_STAT_ADD(stat) ((stat)++) +#else +#define ZNODE_STAT_ADD(stat) /* nothing */ +#endif /* ZNODE_STATS */ + +/* + * Functions needed for userland (ie: libzpool) are not put under + * #ifdef_KERNEL; the rest of the functions have dependencies + * (such as VFS logic) that will not compile easily in userland. + */ +#ifdef _KERNEL + +static kmem_cache_t *znode_cache = NULL; +static kmem_cache_t *znode_hold_cache = NULL; +unsigned int zfs_object_mutex_size = ZFS_OBJ_MTX_SZ; + +/*ARGSUSED*/ +static int +zfs_znode_cache_constructor(void *buf, void *arg, int kmflags) +{ + znode_t *zp = buf; + + inode_init_once(ZTOI(zp)); + list_link_init(&zp->z_link_node); + + mutex_init(&zp->z_lock, NULL, MUTEX_DEFAULT, NULL); + rw_init(&zp->z_parent_lock, NULL, RW_DEFAULT, NULL); + rw_init(&zp->z_name_lock, NULL, RW_NOLOCKDEP, NULL); + mutex_init(&zp->z_acl_lock, NULL, MUTEX_DEFAULT, NULL); + rw_init(&zp->z_xattr_lock, NULL, RW_DEFAULT, NULL); + + zfs_rlock_init(&zp->z_range_lock); + + zp->z_dirlocks = NULL; + zp->z_acl_cached = NULL; + zp->z_xattr_cached = NULL; + zp->z_xattr_parent = 0; + zp->z_moved = 0; + return (0); +} + +/*ARGSUSED*/ +static void +zfs_znode_cache_destructor(void *buf, void *arg) +{ + znode_t *zp = buf; + + ASSERT(!list_link_active(&zp->z_link_node)); + mutex_destroy(&zp->z_lock); + rw_destroy(&zp->z_parent_lock); + rw_destroy(&zp->z_name_lock); + mutex_destroy(&zp->z_acl_lock); + rw_destroy(&zp->z_xattr_lock); + zfs_rlock_destroy(&zp->z_range_lock); + + ASSERT(zp->z_dirlocks == NULL); + ASSERT(zp->z_acl_cached == NULL); + ASSERT(zp->z_xattr_cached == NULL); +} + +static int +zfs_znode_hold_cache_constructor(void *buf, void *arg, int kmflags) +{ + znode_hold_t *zh = buf; + + mutex_init(&zh->zh_lock, NULL, MUTEX_DEFAULT, NULL); + refcount_create(&zh->zh_refcount); + zh->zh_obj = ZFS_NO_OBJECT; + + return (0); +} + +static void +zfs_znode_hold_cache_destructor(void *buf, void *arg) +{ + znode_hold_t *zh = buf; + + mutex_destroy(&zh->zh_lock); + refcount_destroy(&zh->zh_refcount); +} + +void +zfs_znode_init(void) +{ + /* + * Initialize zcache. The KMC_SLAB hint is used in order that it be + * backed by kmalloc() when on the Linux slab in order that any + * wait_on_bit() operations on the related inode operate properly. + */ + ASSERT(znode_cache == NULL); + znode_cache = kmem_cache_create("zfs_znode_cache", + sizeof (znode_t), 0, zfs_znode_cache_constructor, + zfs_znode_cache_destructor, NULL, NULL, NULL, KMC_SLAB); + + ASSERT(znode_hold_cache == NULL); + znode_hold_cache = kmem_cache_create("zfs_znode_hold_cache", + sizeof (znode_hold_t), 0, zfs_znode_hold_cache_constructor, + zfs_znode_hold_cache_destructor, NULL, NULL, NULL, 0); +} + +void +zfs_znode_fini(void) +{ + /* + * Cleanup zcache + */ + if (znode_cache) + kmem_cache_destroy(znode_cache); + znode_cache = NULL; + + if (znode_hold_cache) + kmem_cache_destroy(znode_hold_cache); + znode_hold_cache = NULL; +} + +/* + * The zfs_znode_hold_enter() / zfs_znode_hold_exit() functions are used to + * serialize access to a znode and its SA buffer while the object is being + * created or destroyed. This kind of locking would normally reside in the + * znode itself but in this case that's impossible because the znode and SA + * buffer may not yet exist. Therefore the locking is handled externally + * with an array of mutexs and AVLs trees which contain per-object locks. + * + * In zfs_znode_hold_enter() a per-object lock is created as needed, inserted + * in to the correct AVL tree and finally the per-object lock is held. In + * zfs_znode_hold_exit() the process is reversed. The per-object lock is + * released, removed from the AVL tree and destroyed if there are no waiters. + * + * This scheme has two important properties: + * + * 1) No memory allocations are performed while holding one of the z_hold_locks. + * This ensures evict(), which can be called from direct memory reclaim, will + * never block waiting on a z_hold_locks which just happens to have hashed + * to the same index. + * + * 2) All locks used to serialize access to an object are per-object and never + * shared. This minimizes lock contention without creating a large number + * of dedicated locks. + * + * On the downside it does require znode_lock_t structures to be frequently + * allocated and freed. However, because these are backed by a kmem cache + * and very short lived this cost is minimal. + */ +int +zfs_znode_hold_compare(const void *a, const void *b) +{ + const znode_hold_t *zh_a = (const znode_hold_t *)a; + const znode_hold_t *zh_b = (const znode_hold_t *)b; + + return (AVL_CMP(zh_a->zh_obj, zh_b->zh_obj)); +} + +boolean_t +zfs_znode_held(zfsvfs_t *zfsvfs, uint64_t obj) +{ + znode_hold_t *zh, search; + int i = ZFS_OBJ_HASH(zfsvfs, obj); + boolean_t held; + + search.zh_obj = obj; + + mutex_enter(&zfsvfs->z_hold_locks[i]); + zh = avl_find(&zfsvfs->z_hold_trees[i], &search, NULL); + held = (zh && MUTEX_HELD(&zh->zh_lock)) ? B_TRUE : B_FALSE; + mutex_exit(&zfsvfs->z_hold_locks[i]); + + return (held); +} + +static znode_hold_t * +zfs_znode_hold_enter(zfsvfs_t *zfsvfs, uint64_t obj) +{ + znode_hold_t *zh, *zh_new, search; + int i = ZFS_OBJ_HASH(zfsvfs, obj); + boolean_t found = B_FALSE; + + zh_new = kmem_cache_alloc(znode_hold_cache, KM_SLEEP); + zh_new->zh_obj = obj; + search.zh_obj = obj; + + mutex_enter(&zfsvfs->z_hold_locks[i]); + zh = avl_find(&zfsvfs->z_hold_trees[i], &search, NULL); + if (likely(zh == NULL)) { + zh = zh_new; + avl_add(&zfsvfs->z_hold_trees[i], zh); + } else { + ASSERT3U(zh->zh_obj, ==, obj); + found = B_TRUE; + } + refcount_add(&zh->zh_refcount, NULL); + mutex_exit(&zfsvfs->z_hold_locks[i]); + + if (found == B_TRUE) + kmem_cache_free(znode_hold_cache, zh_new); + + ASSERT(MUTEX_NOT_HELD(&zh->zh_lock)); + ASSERT3S(refcount_count(&zh->zh_refcount), >, 0); + mutex_enter(&zh->zh_lock); + + return (zh); +} + +static void +zfs_znode_hold_exit(zfsvfs_t *zfsvfs, znode_hold_t *zh) +{ + int i = ZFS_OBJ_HASH(zfsvfs, zh->zh_obj); + boolean_t remove = B_FALSE; + + ASSERT(zfs_znode_held(zfsvfs, zh->zh_obj)); + ASSERT3S(refcount_count(&zh->zh_refcount), >, 0); + mutex_exit(&zh->zh_lock); + + mutex_enter(&zfsvfs->z_hold_locks[i]); + if (refcount_remove(&zh->zh_refcount, NULL) == 0) { + avl_remove(&zfsvfs->z_hold_trees[i], zh); + remove = B_TRUE; + } + mutex_exit(&zfsvfs->z_hold_locks[i]); + + if (remove == B_TRUE) + kmem_cache_free(znode_hold_cache, zh); +} + +int +zfs_create_share_dir(zfsvfs_t *zfsvfs, dmu_tx_t *tx) +{ +#ifdef HAVE_SMB_SHARE + zfs_acl_ids_t acl_ids; + vattr_t vattr; + znode_t *sharezp; + vnode_t *vp; + znode_t *zp; + int error; + + vattr.va_mask = AT_MODE|AT_UID|AT_GID|AT_TYPE; + vattr.va_mode = S_IFDIR | 0555; + vattr.va_uid = crgetuid(kcred); + vattr.va_gid = crgetgid(kcred); + + sharezp = kmem_cache_alloc(znode_cache, KM_SLEEP); + sharezp->z_moved = 0; + sharezp->z_unlinked = 0; + sharezp->z_atime_dirty = 0; + sharezp->z_zfsvfs = zfsvfs; + sharezp->z_is_sa = zfsvfs->z_use_sa; + + vp = ZTOV(sharezp); + vn_reinit(vp); + vp->v_type = VDIR; + + VERIFY(0 == zfs_acl_ids_create(sharezp, IS_ROOT_NODE, &vattr, + kcred, NULL, &acl_ids)); + zfs_mknode(sharezp, &vattr, tx, kcred, IS_ROOT_NODE, &zp, &acl_ids); + ASSERT3P(zp, ==, sharezp); + ASSERT(!vn_in_dnlc(ZTOV(sharezp))); /* not valid to move */ + POINTER_INVALIDATE(&sharezp->z_zfsvfs); + error = zap_add(zfsvfs->z_os, MASTER_NODE_OBJ, + ZFS_SHARES_DIR, 8, 1, &sharezp->z_id, tx); + zfsvfs->z_shares_dir = sharezp->z_id; + + zfs_acl_ids_free(&acl_ids); + // ZTOV(sharezp)->v_count = 0; + sa_handle_destroy(sharezp->z_sa_hdl); + kmem_cache_free(znode_cache, sharezp); + + return (error); +#else + return (0); +#endif /* HAVE_SMB_SHARE */ +} + +static void +zfs_znode_sa_init(zfsvfs_t *zfsvfs, znode_t *zp, + dmu_buf_t *db, dmu_object_type_t obj_type, sa_handle_t *sa_hdl) +{ + ASSERT(zfs_znode_held(zfsvfs, zp->z_id)); + + mutex_enter(&zp->z_lock); + + ASSERT(zp->z_sa_hdl == NULL); + ASSERT(zp->z_acl_cached == NULL); + if (sa_hdl == NULL) { + VERIFY(0 == sa_handle_get_from_db(zfsvfs->z_os, db, zp, + SA_HDL_SHARED, &zp->z_sa_hdl)); + } else { + zp->z_sa_hdl = sa_hdl; + sa_set_userp(sa_hdl, zp); + } + + zp->z_is_sa = (obj_type == DMU_OT_SA) ? B_TRUE : B_FALSE; + + mutex_exit(&zp->z_lock); +} + +void +zfs_znode_dmu_fini(znode_t *zp) +{ + ASSERT(zfs_znode_held(ZTOZSB(zp), zp->z_id) || zp->z_unlinked || + RW_WRITE_HELD(&ZTOZSB(zp)->z_teardown_inactive_lock)); + + sa_handle_destroy(zp->z_sa_hdl); + zp->z_sa_hdl = NULL; +} + +/* + * Called by new_inode() to allocate a new inode. + */ +int +zfs_inode_alloc(struct super_block *sb, struct inode **ip) +{ + znode_t *zp; + + zp = kmem_cache_alloc(znode_cache, KM_SLEEP); + *ip = ZTOI(zp); + + return (0); +} + +/* + * Called in multiple places when an inode should be destroyed. + */ +void +zfs_inode_destroy(struct inode *ip) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + + mutex_enter(&zfsvfs->z_znodes_lock); + if (list_link_active(&zp->z_link_node)) { + list_remove(&zfsvfs->z_all_znodes, zp); + zfsvfs->z_nr_znodes--; + } + mutex_exit(&zfsvfs->z_znodes_lock); + + if (zp->z_acl_cached) { + zfs_acl_free(zp->z_acl_cached); + zp->z_acl_cached = NULL; + } + + if (zp->z_xattr_cached) { + nvlist_free(zp->z_xattr_cached); + zp->z_xattr_cached = NULL; + } + + kmem_cache_free(znode_cache, zp); +} + +static void +zfs_inode_set_ops(zfsvfs_t *zfsvfs, struct inode *ip) +{ + uint64_t rdev = 0; + + switch (ip->i_mode & S_IFMT) { + case S_IFREG: + ip->i_op = &zpl_inode_operations; + ip->i_fop = &zpl_file_operations; + ip->i_mapping->a_ops = &zpl_address_space_operations; + break; + + case S_IFDIR: + ip->i_op = &zpl_dir_inode_operations; + ip->i_fop = &zpl_dir_file_operations; + ITOZ(ip)->z_zn_prefetch = B_TRUE; + break; + + case S_IFLNK: + ip->i_op = &zpl_symlink_inode_operations; + break; + + /* + * rdev is only stored in a SA only for device files. + */ + case S_IFCHR: + case S_IFBLK: + (void) sa_lookup(ITOZ(ip)->z_sa_hdl, SA_ZPL_RDEV(zfsvfs), &rdev, + sizeof (rdev)); + /*FALLTHROUGH*/ + case S_IFIFO: + case S_IFSOCK: + init_special_inode(ip, ip->i_mode, rdev); + ip->i_op = &zpl_special_inode_operations; + break; + + default: + zfs_panic_recover("inode %llu has invalid mode: 0x%x\n", + (u_longlong_t)ip->i_ino, ip->i_mode); + + /* Assume the inode is a file and attempt to continue */ + ip->i_mode = S_IFREG | 0644; + ip->i_op = &zpl_inode_operations; + ip->i_fop = &zpl_file_operations; + ip->i_mapping->a_ops = &zpl_address_space_operations; + break; + } +} + +void +zfs_set_inode_flags(znode_t *zp, struct inode *ip) +{ + /* + * Linux and Solaris have different sets of file attributes, so we + * restrict this conversion to the intersection of the two. + */ +#ifdef HAVE_INODE_SET_FLAGS + unsigned int flags = 0; + if (zp->z_pflags & ZFS_IMMUTABLE) + flags |= S_IMMUTABLE; + if (zp->z_pflags & ZFS_APPENDONLY) + flags |= S_APPEND; + + inode_set_flags(ip, flags, S_IMMUTABLE|S_APPEND); +#else + if (zp->z_pflags & ZFS_IMMUTABLE) + ip->i_flags |= S_IMMUTABLE; + else + ip->i_flags &= ~S_IMMUTABLE; + + if (zp->z_pflags & ZFS_APPENDONLY) + ip->i_flags |= S_APPEND; + else + ip->i_flags &= ~S_APPEND; +#endif +} + +/* + * Update the embedded inode given the znode. We should work toward + * eliminating this function as soon as possible by removing values + * which are duplicated between the znode and inode. If the generic + * inode has the correct field it should be used, and the ZFS code + * updated to access the inode. This can be done incrementally. + */ +void +zfs_inode_update(znode_t *zp) +{ + zfsvfs_t *zfsvfs; + struct inode *ip; + uint32_t blksize; + u_longlong_t i_blocks; + + ASSERT(zp != NULL); + zfsvfs = ZTOZSB(zp); + ip = ZTOI(zp); + + /* Skip .zfs control nodes which do not exist on disk. */ + if (zfsctl_is_node(ip)) + return; + + dmu_object_size_from_db(sa_get_db(zp->z_sa_hdl), &blksize, &i_blocks); + + spin_lock(&ip->i_lock); + ip->i_blocks = i_blocks; + i_size_write(ip, zp->z_size); + spin_unlock(&ip->i_lock); +} + + +/* + * Construct a znode+inode and initialize. + * + * This does not do a call to dmu_set_user() that is + * up to the caller to do, in case you don't want to + * return the znode + */ +static znode_t * +zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_buf_t *db, int blksz, + dmu_object_type_t obj_type, uint64_t obj, sa_handle_t *hdl) +{ + znode_t *zp; + struct inode *ip; + uint64_t mode; + uint64_t parent; + uint64_t tmp_gen; + uint64_t links; + uint64_t z_uid, z_gid; + uint64_t atime[2], mtime[2], ctime[2]; + sa_bulk_attr_t bulk[11]; + int count = 0; + + ASSERT(zfsvfs != NULL); + + ip = new_inode(zfsvfs->z_sb); + if (ip == NULL) + return (NULL); + + zp = ITOZ(ip); + ASSERT(zp->z_dirlocks == NULL); + ASSERT3P(zp->z_acl_cached, ==, NULL); + ASSERT3P(zp->z_xattr_cached, ==, NULL); + zp->z_moved = 0; + zp->z_sa_hdl = NULL; + zp->z_unlinked = 0; + zp->z_atime_dirty = 0; + zp->z_mapcnt = 0; + zp->z_id = db->db_object; + zp->z_blksz = blksz; + zp->z_seq = 0x7A4653; + zp->z_sync_cnt = 0; + zp->z_is_mapped = B_FALSE; + zp->z_is_ctldir = B_FALSE; + zp->z_is_stale = B_FALSE; + zp->z_range_lock.zr_size = &zp->z_size; + zp->z_range_lock.zr_blksz = &zp->z_blksz; + zp->z_range_lock.zr_max_blksz = &ZTOZSB(zp)->z_max_blksz; + + zfs_znode_sa_init(zfsvfs, zp, db, obj_type, hdl); + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), NULL, &mode, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GEN(zfsvfs), NULL, &tmp_gen, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), NULL, + &zp->z_size, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), NULL, &links, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_PARENT(zfsvfs), NULL, + &parent, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_UID(zfsvfs), NULL, &z_uid, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GID(zfsvfs), NULL, &z_gid, 8); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL, &atime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + + if (sa_bulk_lookup(zp->z_sa_hdl, bulk, count) != 0 || tmp_gen == 0) { + if (hdl == NULL) + sa_handle_destroy(zp->z_sa_hdl); + zp->z_sa_hdl = NULL; + goto error; + } + + zp->z_mode = ip->i_mode = mode; + ip->i_generation = (uint32_t)tmp_gen; + ip->i_blkbits = SPA_MINBLOCKSHIFT; + set_nlink(ip, (uint32_t)links); + zfs_uid_write(ip, z_uid); + zfs_gid_write(ip, z_gid); + zfs_set_inode_flags(zp, ip); + + /* Cache the xattr parent id */ + if (zp->z_pflags & ZFS_XATTR) + zp->z_xattr_parent = parent; + + ZFS_TIME_DECODE(&ip->i_atime, atime); + ZFS_TIME_DECODE(&ip->i_mtime, mtime); + ZFS_TIME_DECODE(&ip->i_ctime, ctime); + + ip->i_ino = obj; + zfs_inode_update(zp); + zfs_inode_set_ops(zfsvfs, ip); + + /* + * The only way insert_inode_locked() can fail is if the ip->i_ino + * number is already hashed for this super block. This can never + * happen because the inode numbers map 1:1 with the object numbers. + * + * The one exception is rolling back a mounted file system, but in + * this case all the active inode are unhashed during the rollback. + */ + VERIFY3S(insert_inode_locked(ip), ==, 0); + + mutex_enter(&zfsvfs->z_znodes_lock); + list_insert_tail(&zfsvfs->z_all_znodes, zp); + zfsvfs->z_nr_znodes++; + membar_producer(); + mutex_exit(&zfsvfs->z_znodes_lock); + + unlock_new_inode(ip); + return (zp); + +error: + iput(ip); + return (NULL); +} + +/* + * Safely mark an inode dirty. Inodes which are part of a read-only + * file system or snapshot may not be dirtied. + */ +void +zfs_mark_inode_dirty(struct inode *ip) +{ + zfsvfs_t *zfsvfs = ITOZSB(ip); + + if (zfs_is_readonly(zfsvfs) || dmu_objset_is_snapshot(zfsvfs->z_os)) + return; + + mark_inode_dirty(ip); +} + +static uint64_t empty_xattr; +static uint64_t pad[4]; +static zfs_acl_phys_t acl_phys; +/* + * Create a new DMU object to hold a zfs znode. + * + * IN: dzp - parent directory for new znode + * vap - file attributes for new znode + * tx - dmu transaction id for zap operations + * cr - credentials of caller + * flag - flags: + * IS_ROOT_NODE - new object will be root + * IS_XATTR - new object is an attribute + * bonuslen - length of bonus buffer + * setaclp - File/Dir initial ACL + * fuidp - Tracks fuid allocation. + * + * OUT: zpp - allocated znode + * + */ +void +zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, + uint_t flag, znode_t **zpp, zfs_acl_ids_t *acl_ids) +{ + uint64_t crtime[2], atime[2], mtime[2], ctime[2]; + uint64_t mode, size, links, parent, pflags; + uint64_t dzp_pflags = 0; + uint64_t rdev = 0; + zfsvfs_t *zfsvfs = ZTOZSB(dzp); + dmu_buf_t *db; + timestruc_t now; + uint64_t gen, obj; + int bonuslen; + int dnodesize; + sa_handle_t *sa_hdl; + dmu_object_type_t obj_type; + sa_bulk_attr_t *sa_attrs; + int cnt = 0; + zfs_acl_locator_cb_t locate = { 0 }; + znode_hold_t *zh; + + if (zfsvfs->z_replay) { + obj = vap->va_nodeid; + now = vap->va_ctime; /* see zfs_replay_create() */ + gen = vap->va_nblocks; /* ditto */ + dnodesize = vap->va_fsid; /* ditto */ + } else { + obj = 0; + gethrestime(&now); + gen = dmu_tx_get_txg(tx); + dnodesize = dmu_objset_dnodesize(zfsvfs->z_os); + } + + if (dnodesize == 0) + dnodesize = DNODE_MIN_SIZE; + + obj_type = zfsvfs->z_use_sa ? DMU_OT_SA : DMU_OT_ZNODE; + + bonuslen = (obj_type == DMU_OT_SA) ? + DN_BONUS_SIZE(dnodesize) : ZFS_OLD_ZNODE_PHYS_SIZE; + + /* + * Create a new DMU object. + */ + /* + * There's currently no mechanism for pre-reading the blocks that will + * be needed to allocate a new object, so we accept the small chance + * that there will be an i/o error and we will fail one of the + * assertions below. + */ + if (S_ISDIR(vap->va_mode)) { + if (zfsvfs->z_replay) { + VERIFY0(zap_create_claim_norm_dnsize(zfsvfs->z_os, obj, + zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, + obj_type, bonuslen, dnodesize, tx)); + } else { + obj = zap_create_norm_dnsize(zfsvfs->z_os, + zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, + obj_type, bonuslen, dnodesize, tx); + } + } else { + if (zfsvfs->z_replay) { + VERIFY0(dmu_object_claim_dnsize(zfsvfs->z_os, obj, + DMU_OT_PLAIN_FILE_CONTENTS, 0, + obj_type, bonuslen, dnodesize, tx)); + } else { + obj = dmu_object_alloc_dnsize(zfsvfs->z_os, + DMU_OT_PLAIN_FILE_CONTENTS, 0, + obj_type, bonuslen, dnodesize, tx); + } + } + + zh = zfs_znode_hold_enter(zfsvfs, obj); + VERIFY0(sa_buf_hold(zfsvfs->z_os, obj, NULL, &db)); + + /* + * If this is the root, fix up the half-initialized parent pointer + * to reference the just-allocated physical data area. + */ + if (flag & IS_ROOT_NODE) { + dzp->z_id = obj; + } else { + dzp_pflags = dzp->z_pflags; + } + + /* + * If parent is an xattr, so am I. + */ + if (dzp_pflags & ZFS_XATTR) { + flag |= IS_XATTR; + } + + if (zfsvfs->z_use_fuids) + pflags = ZFS_ARCHIVE | ZFS_AV_MODIFIED; + else + pflags = 0; + + if (S_ISDIR(vap->va_mode)) { + size = 2; /* contents ("." and "..") */ + links = 2; + } else { + size = 0; + links = (flag & IS_TMPFILE) ? 0 : 1; + } + + if (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode)) + rdev = vap->va_rdev; + + parent = dzp->z_id; + mode = acl_ids->z_mode; + if (flag & IS_XATTR) + pflags |= ZFS_XATTR; + + /* + * No execs denied will be deterimed when zfs_mode_compute() is called. + */ + pflags |= acl_ids->z_aclp->z_hints & + (ZFS_ACL_TRIVIAL|ZFS_INHERIT_ACE|ZFS_ACL_AUTO_INHERIT| + ZFS_ACL_DEFAULTED|ZFS_ACL_PROTECTED); + + ZFS_TIME_ENCODE(&now, crtime); + ZFS_TIME_ENCODE(&now, ctime); + + if (vap->va_mask & ATTR_ATIME) { + ZFS_TIME_ENCODE(&vap->va_atime, atime); + } else { + ZFS_TIME_ENCODE(&now, atime); + } + + if (vap->va_mask & ATTR_MTIME) { + ZFS_TIME_ENCODE(&vap->va_mtime, mtime); + } else { + ZFS_TIME_ENCODE(&now, mtime); + } + + /* Now add in all of the "SA" attributes */ + VERIFY(0 == sa_handle_get_from_db(zfsvfs->z_os, db, NULL, SA_HDL_SHARED, + &sa_hdl)); + + /* + * Setup the array of attributes to be replaced/set on the new file + * + * order for DMU_OT_ZNODE is critical since it needs to be constructed + * in the old znode_phys_t format. Don't change this ordering + */ + sa_attrs = kmem_alloc(sizeof (sa_bulk_attr_t) * ZPL_END, KM_SLEEP); + + if (obj_type == DMU_OT_ZNODE) { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_ATIME(zfsvfs), + NULL, &atime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_MTIME(zfsvfs), + NULL, &mtime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_CTIME(zfsvfs), + NULL, &ctime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_CRTIME(zfsvfs), + NULL, &crtime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_GEN(zfsvfs), + NULL, &gen, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_MODE(zfsvfs), + NULL, &mode, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_SIZE(zfsvfs), + NULL, &size, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_PARENT(zfsvfs), + NULL, &parent, 8); + } else { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_MODE(zfsvfs), + NULL, &mode, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_SIZE(zfsvfs), + NULL, &size, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_GEN(zfsvfs), + NULL, &gen, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_UID(zfsvfs), + NULL, &acl_ids->z_fuid, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_GID(zfsvfs), + NULL, &acl_ids->z_fgid, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_PARENT(zfsvfs), + NULL, &parent, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_FLAGS(zfsvfs), + NULL, &pflags, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_ATIME(zfsvfs), + NULL, &atime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_MTIME(zfsvfs), + NULL, &mtime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_CTIME(zfsvfs), + NULL, &ctime, 16); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_CRTIME(zfsvfs), + NULL, &crtime, 16); + } + + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_LINKS(zfsvfs), NULL, &links, 8); + + if (obj_type == DMU_OT_ZNODE) { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_XATTR(zfsvfs), NULL, + &empty_xattr, 8); + } + if (obj_type == DMU_OT_ZNODE || + (S_ISBLK(vap->va_mode) || S_ISCHR(vap->va_mode))) { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_RDEV(zfsvfs), + NULL, &rdev, 8); + } + if (obj_type == DMU_OT_ZNODE) { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_FLAGS(zfsvfs), + NULL, &pflags, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_UID(zfsvfs), NULL, + &acl_ids->z_fuid, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_GID(zfsvfs), NULL, + &acl_ids->z_fgid, 8); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_PAD(zfsvfs), NULL, pad, + sizeof (uint64_t) * 4); + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_ZNODE_ACL(zfsvfs), NULL, + &acl_phys, sizeof (zfs_acl_phys_t)); + } else if (acl_ids->z_aclp->z_version >= ZFS_ACL_VERSION_FUID) { + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_DACL_COUNT(zfsvfs), NULL, + &acl_ids->z_aclp->z_acl_count, 8); + locate.cb_aclp = acl_ids->z_aclp; + SA_ADD_BULK_ATTR(sa_attrs, cnt, SA_ZPL_DACL_ACES(zfsvfs), + zfs_acl_data_locator, &locate, + acl_ids->z_aclp->z_acl_bytes); + mode = zfs_mode_compute(mode, acl_ids->z_aclp, &pflags, + acl_ids->z_fuid, acl_ids->z_fgid); + } + + VERIFY(sa_replace_all_by_template(sa_hdl, sa_attrs, cnt, tx) == 0); + + if (!(flag & IS_ROOT_NODE)) { + /* + * The call to zfs_znode_alloc() may fail if memory is low + * via the call path: alloc_inode() -> inode_init_always() -> + * security_inode_alloc() -> inode_alloc_security(). Since + * the existing code is written such that zfs_mknode() can + * not fail retry until sufficient memory has been reclaimed. + */ + do { + *zpp = zfs_znode_alloc(zfsvfs, db, 0, obj_type, obj, + sa_hdl); + } while (*zpp == NULL); + + VERIFY(*zpp != NULL); + VERIFY(dzp != NULL); + } else { + /* + * If we are creating the root node, the "parent" we + * passed in is the znode for the root. + */ + *zpp = dzp; + + (*zpp)->z_sa_hdl = sa_hdl; + } + + (*zpp)->z_pflags = pflags; + (*zpp)->z_mode = ZTOI(*zpp)->i_mode = mode; + (*zpp)->z_dnodesize = dnodesize; + + if (obj_type == DMU_OT_ZNODE || + acl_ids->z_aclp->z_version < ZFS_ACL_VERSION_FUID) { + VERIFY0(zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx)); + } + kmem_free(sa_attrs, sizeof (sa_bulk_attr_t) * ZPL_END); + zfs_znode_hold_exit(zfsvfs, zh); +} + +/* + * Update in-core attributes. It is assumed the caller will be doing an + * sa_bulk_update to push the changes out. + */ +void +zfs_xvattr_set(znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx) +{ + xoptattr_t *xoap; + boolean_t update_inode = B_FALSE; + + xoap = xva_getxoptattr(xvap); + ASSERT(xoap); + + if (XVA_ISSET_REQ(xvap, XAT_CREATETIME)) { + uint64_t times[2]; + ZFS_TIME_ENCODE(&xoap->xoa_createtime, times); + (void) sa_update(zp->z_sa_hdl, SA_ZPL_CRTIME(ZTOZSB(zp)), + ×, sizeof (times), tx); + XVA_SET_RTN(xvap, XAT_CREATETIME); + } + if (XVA_ISSET_REQ(xvap, XAT_READONLY)) { + ZFS_ATTR_SET(zp, ZFS_READONLY, xoap->xoa_readonly, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_READONLY); + } + if (XVA_ISSET_REQ(xvap, XAT_HIDDEN)) { + ZFS_ATTR_SET(zp, ZFS_HIDDEN, xoap->xoa_hidden, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_HIDDEN); + } + if (XVA_ISSET_REQ(xvap, XAT_SYSTEM)) { + ZFS_ATTR_SET(zp, ZFS_SYSTEM, xoap->xoa_system, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_SYSTEM); + } + if (XVA_ISSET_REQ(xvap, XAT_ARCHIVE)) { + ZFS_ATTR_SET(zp, ZFS_ARCHIVE, xoap->xoa_archive, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_ARCHIVE); + } + if (XVA_ISSET_REQ(xvap, XAT_IMMUTABLE)) { + ZFS_ATTR_SET(zp, ZFS_IMMUTABLE, xoap->xoa_immutable, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_IMMUTABLE); + + update_inode = B_TRUE; + } + if (XVA_ISSET_REQ(xvap, XAT_NOUNLINK)) { + ZFS_ATTR_SET(zp, ZFS_NOUNLINK, xoap->xoa_nounlink, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_NOUNLINK); + } + if (XVA_ISSET_REQ(xvap, XAT_APPENDONLY)) { + ZFS_ATTR_SET(zp, ZFS_APPENDONLY, xoap->xoa_appendonly, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_APPENDONLY); + + update_inode = B_TRUE; + } + if (XVA_ISSET_REQ(xvap, XAT_NODUMP)) { + ZFS_ATTR_SET(zp, ZFS_NODUMP, xoap->xoa_nodump, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_NODUMP); + } + if (XVA_ISSET_REQ(xvap, XAT_OPAQUE)) { + ZFS_ATTR_SET(zp, ZFS_OPAQUE, xoap->xoa_opaque, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_OPAQUE); + } + if (XVA_ISSET_REQ(xvap, XAT_AV_QUARANTINED)) { + ZFS_ATTR_SET(zp, ZFS_AV_QUARANTINED, + xoap->xoa_av_quarantined, zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_AV_QUARANTINED); + } + if (XVA_ISSET_REQ(xvap, XAT_AV_MODIFIED)) { + ZFS_ATTR_SET(zp, ZFS_AV_MODIFIED, xoap->xoa_av_modified, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_AV_MODIFIED); + } + if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) { + zfs_sa_set_scanstamp(zp, xvap, tx); + XVA_SET_RTN(xvap, XAT_AV_SCANSTAMP); + } + if (XVA_ISSET_REQ(xvap, XAT_REPARSE)) { + ZFS_ATTR_SET(zp, ZFS_REPARSE, xoap->xoa_reparse, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_REPARSE); + } + if (XVA_ISSET_REQ(xvap, XAT_OFFLINE)) { + ZFS_ATTR_SET(zp, ZFS_OFFLINE, xoap->xoa_offline, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_OFFLINE); + } + if (XVA_ISSET_REQ(xvap, XAT_SPARSE)) { + ZFS_ATTR_SET(zp, ZFS_SPARSE, xoap->xoa_sparse, + zp->z_pflags, tx); + XVA_SET_RTN(xvap, XAT_SPARSE); + } + + if (update_inode) + zfs_set_inode_flags(zp, ZTOI(zp)); +} + +int +zfs_zget(zfsvfs_t *zfsvfs, uint64_t obj_num, znode_t **zpp) +{ + dmu_object_info_t doi; + dmu_buf_t *db; + znode_t *zp; + znode_hold_t *zh; + int err; + sa_handle_t *hdl; + + *zpp = NULL; + +again: + zh = zfs_znode_hold_enter(zfsvfs, obj_num); + + err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, &db); + if (err) { + zfs_znode_hold_exit(zfsvfs, zh); + return (err); + } + + dmu_object_info_from_db(db, &doi); + if (doi.doi_bonus_type != DMU_OT_SA && + (doi.doi_bonus_type != DMU_OT_ZNODE || + (doi.doi_bonus_type == DMU_OT_ZNODE && + doi.doi_bonus_size < sizeof (znode_phys_t)))) { + sa_buf_rele(db, NULL); + zfs_znode_hold_exit(zfsvfs, zh); + return (SET_ERROR(EINVAL)); + } + + hdl = dmu_buf_get_user(db); + if (hdl != NULL) { + zp = sa_get_userdata(hdl); + + + /* + * Since "SA" does immediate eviction we + * should never find a sa handle that doesn't + * know about the znode. + */ + + ASSERT3P(zp, !=, NULL); + + mutex_enter(&zp->z_lock); + ASSERT3U(zp->z_id, ==, obj_num); + /* + * If igrab() returns NULL the VFS has independently + * determined the inode should be evicted and has + * called iput_final() to start the eviction process. + * The SA handle is still valid but because the VFS + * requires that the eviction succeed we must drop + * our locks and references to allow the eviction to + * complete. The zfs_zget() may then be retried. + * + * This unlikely case could be optimized by registering + * a sops->drop_inode() callback. The callback would + * need to detect the active SA hold thereby informing + * the VFS that this inode should not be evicted. + */ + if (igrab(ZTOI(zp)) == NULL) { + mutex_exit(&zp->z_lock); + sa_buf_rele(db, NULL); + zfs_znode_hold_exit(zfsvfs, zh); + /* inode might need this to finish evict */ + cond_resched(); + goto again; + } + *zpp = zp; + err = 0; + mutex_exit(&zp->z_lock); + sa_buf_rele(db, NULL); + zfs_znode_hold_exit(zfsvfs, zh); + return (err); + } + + /* + * Not found create new znode/vnode but only if file exists. + * + * There is a small window where zfs_vget() could + * find this object while a file create is still in + * progress. This is checked for in zfs_znode_alloc() + * + * if zfs_znode_alloc() fails it will drop the hold on the + * bonus buffer. + */ + zp = zfs_znode_alloc(zfsvfs, db, doi.doi_data_block_size, + doi.doi_bonus_type, obj_num, NULL); + if (zp == NULL) { + err = SET_ERROR(ENOENT); + } else { + *zpp = zp; + } + zfs_znode_hold_exit(zfsvfs, zh); + return (err); +} + +int +zfs_rezget(znode_t *zp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + dmu_object_info_t doi; + dmu_buf_t *db; + uint64_t obj_num = zp->z_id; + uint64_t mode; + uint64_t links; + sa_bulk_attr_t bulk[10]; + int err; + int count = 0; + uint64_t gen; + uint64_t z_uid, z_gid; + uint64_t atime[2], mtime[2], ctime[2]; + znode_hold_t *zh; + + /* + * skip ctldir, otherwise they will always get invalidated. This will + * cause funny behaviour for the mounted snapdirs. Especially for + * Linux >= 3.18, d_invalidate will detach the mountpoint and prevent + * anyone automount it again as long as someone is still using the + * detached mount. + */ + if (zp->z_is_ctldir) + return (0); + + zh = zfs_znode_hold_enter(zfsvfs, obj_num); + + mutex_enter(&zp->z_acl_lock); + if (zp->z_acl_cached) { + zfs_acl_free(zp->z_acl_cached); + zp->z_acl_cached = NULL; + } + mutex_exit(&zp->z_acl_lock); + + rw_enter(&zp->z_xattr_lock, RW_WRITER); + if (zp->z_xattr_cached) { + nvlist_free(zp->z_xattr_cached); + zp->z_xattr_cached = NULL; + } + rw_exit(&zp->z_xattr_lock); + + ASSERT(zp->z_sa_hdl == NULL); + err = sa_buf_hold(zfsvfs->z_os, obj_num, NULL, &db); + if (err) { + zfs_znode_hold_exit(zfsvfs, zh); + return (err); + } + + dmu_object_info_from_db(db, &doi); + if (doi.doi_bonus_type != DMU_OT_SA && + (doi.doi_bonus_type != DMU_OT_ZNODE || + (doi.doi_bonus_type == DMU_OT_ZNODE && + doi.doi_bonus_size < sizeof (znode_phys_t)))) { + sa_buf_rele(db, NULL); + zfs_znode_hold_exit(zfsvfs, zh); + return (SET_ERROR(EINVAL)); + } + + zfs_znode_sa_init(zfsvfs, zp, db, doi.doi_bonus_type, NULL); + + /* reload cached values */ + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GEN(zfsvfs), NULL, + &gen, sizeof (gen)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), NULL, + &zp->z_size, sizeof (zp->z_size)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_LINKS(zfsvfs), NULL, + &links, sizeof (links)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, sizeof (zp->z_pflags)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_UID(zfsvfs), NULL, + &z_uid, sizeof (z_uid)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_GID(zfsvfs), NULL, + &z_gid, sizeof (z_gid)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MODE(zfsvfs), NULL, + &mode, sizeof (mode)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_ATIME(zfsvfs), NULL, + &atime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, + &mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, + &ctime, 16); + + if (sa_bulk_lookup(zp->z_sa_hdl, bulk, count)) { + zfs_znode_dmu_fini(zp); + zfs_znode_hold_exit(zfsvfs, zh); + return (SET_ERROR(EIO)); + } + + zp->z_mode = ZTOI(zp)->i_mode = mode; + zfs_uid_write(ZTOI(zp), z_uid); + zfs_gid_write(ZTOI(zp), z_gid); + + ZFS_TIME_DECODE(&ZTOI(zp)->i_atime, atime); + ZFS_TIME_DECODE(&ZTOI(zp)->i_mtime, mtime); + ZFS_TIME_DECODE(&ZTOI(zp)->i_ctime, ctime); + + if (gen != ZTOI(zp)->i_generation) { + zfs_znode_dmu_fini(zp); + zfs_znode_hold_exit(zfsvfs, zh); + return (SET_ERROR(EIO)); + } + + zp->z_unlinked = (ZTOI(zp)->i_nlink == 0); + set_nlink(ZTOI(zp), (uint32_t)links); + zfs_set_inode_flags(zp, ZTOI(zp)); + + zp->z_blksz = doi.doi_data_block_size; + zp->z_atime_dirty = 0; + zfs_inode_update(zp); + + zfs_znode_hold_exit(zfsvfs, zh); + + return (0); +} + +void +zfs_znode_delete(znode_t *zp, dmu_tx_t *tx) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + objset_t *os = zfsvfs->z_os; + uint64_t obj = zp->z_id; + uint64_t acl_obj = zfs_external_acl(zp); + znode_hold_t *zh; + + zh = zfs_znode_hold_enter(zfsvfs, obj); + if (acl_obj) { + VERIFY(!zp->z_is_sa); + VERIFY(0 == dmu_object_free(os, acl_obj, tx)); + } + VERIFY(0 == dmu_object_free(os, obj, tx)); + zfs_znode_dmu_fini(zp); + zfs_znode_hold_exit(zfsvfs, zh); +} + +void +zfs_zinactive(znode_t *zp) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + uint64_t z_id = zp->z_id; + znode_hold_t *zh; + + ASSERT(zp->z_sa_hdl); + + /* + * Don't allow a zfs_zget() while were trying to release this znode. + */ + zh = zfs_znode_hold_enter(zfsvfs, z_id); + + mutex_enter(&zp->z_lock); + + /* + * If this was the last reference to a file with no links, + * remove the file from the file system. + */ + if (zp->z_unlinked) { + mutex_exit(&zp->z_lock); + zfs_znode_hold_exit(zfsvfs, zh); + zfs_rmnode(zp); + return; + } + + mutex_exit(&zp->z_lock); + zfs_znode_dmu_fini(zp); + + zfs_znode_hold_exit(zfsvfs, zh); +} + +static inline int +zfs_compare_timespec(struct timespec *t1, struct timespec *t2) +{ + if (t1->tv_sec < t2->tv_sec) + return (-1); + + if (t1->tv_sec > t2->tv_sec) + return (1); + + return (t1->tv_nsec - t2->tv_nsec); +} + +/* + * Prepare to update znode time stamps. + * + * IN: zp - znode requiring timestamp update + * flag - ATTR_MTIME, ATTR_CTIME flags + * + * OUT: zp - z_seq + * mtime - new mtime + * ctime - new ctime + * + * Note: We don't update atime here, because we rely on Linux VFS to do + * atime updating. + */ +void +zfs_tstamp_update_setup(znode_t *zp, uint_t flag, uint64_t mtime[2], + uint64_t ctime[2]) +{ + timestruc_t now; + + gethrestime(&now); + + zp->z_seq++; + + if (flag & ATTR_MTIME) { + ZFS_TIME_ENCODE(&now, mtime); + ZFS_TIME_DECODE(&(ZTOI(zp)->i_mtime), mtime); + if (ZTOZSB(zp)->z_use_fuids) { + zp->z_pflags |= (ZFS_ARCHIVE | + ZFS_AV_MODIFIED); + } + } + + if (flag & ATTR_CTIME) { + ZFS_TIME_ENCODE(&now, ctime); + ZFS_TIME_DECODE(&(ZTOI(zp)->i_ctime), ctime); + if (ZTOZSB(zp)->z_use_fuids) + zp->z_pflags |= ZFS_ARCHIVE; + } +} + +/* + * Grow the block size for a file. + * + * IN: zp - znode of file to free data in. + * size - requested block size + * tx - open transaction. + * + * NOTE: this function assumes that the znode is write locked. + */ +void +zfs_grow_blocksize(znode_t *zp, uint64_t size, dmu_tx_t *tx) +{ + int error; + u_longlong_t dummy; + + if (size <= zp->z_blksz) + return; + /* + * If the file size is already greater than the current blocksize, + * we will not grow. If there is more than one block in a file, + * the blocksize cannot change. + */ + if (zp->z_blksz && zp->z_size > zp->z_blksz) + return; + + error = dmu_object_set_blocksize(ZTOZSB(zp)->z_os, zp->z_id, + size, 0, tx); + + if (error == ENOTSUP) + return; + ASSERT0(error); + + /* What blocksize did we actually get? */ + dmu_object_size_from_db(sa_get_db(zp->z_sa_hdl), &zp->z_blksz, &dummy); +} + +/* + * Increase the file length + * + * IN: zp - znode of file to free data in. + * end - new end-of-file + * + * RETURN: 0 on success, error code on failure + */ +static int +zfs_extend(znode_t *zp, uint64_t end) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + dmu_tx_t *tx; + rl_t *rl; + uint64_t newblksz; + int error; + + /* + * We will change zp_size, lock the whole file. + */ + rl = zfs_range_lock(&zp->z_range_lock, 0, UINT64_MAX, RL_WRITER); + + /* + * Nothing to do if file already at desired length. + */ + if (end <= zp->z_size) { + zfs_range_unlock(rl); + return (0); + } + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + if (end > zp->z_blksz && + (!ISP2(zp->z_blksz) || zp->z_blksz < zfsvfs->z_max_blksz)) { + /* + * We are growing the file past the current block size. + */ + if (zp->z_blksz > ZTOZSB(zp)->z_max_blksz) { + /* + * File's blocksize is already larger than the + * "recordsize" property. Only let it grow to + * the next power of 2. + */ + ASSERT(!ISP2(zp->z_blksz)); + newblksz = MIN(end, 1 << highbit64(zp->z_blksz)); + } else { + newblksz = MIN(end, ZTOZSB(zp)->z_max_blksz); + } + dmu_tx_hold_write(tx, zp->z_id, 0, newblksz); + } else { + newblksz = 0; + } + + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + zfs_range_unlock(rl); + return (error); + } + + if (newblksz) + zfs_grow_blocksize(zp, newblksz, tx); + + zp->z_size = end; + + VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_SIZE(ZTOZSB(zp)), + &zp->z_size, sizeof (zp->z_size), tx)); + + zfs_range_unlock(rl); + + dmu_tx_commit(tx); + + return (0); +} + +/* + * zfs_zero_partial_page - Modeled after update_pages() but + * with different arguments and semantics for use by zfs_freesp(). + * + * Zeroes a piece of a single page cache entry for zp at offset + * start and length len. + * + * Caller must acquire a range lock on the file for the region + * being zeroed in order that the ARC and page cache stay in sync. + */ +static void +zfs_zero_partial_page(znode_t *zp, uint64_t start, uint64_t len) +{ + struct address_space *mp = ZTOI(zp)->i_mapping; + struct page *pp; + int64_t off; + void *pb; + + ASSERT((start & PAGE_MASK) == ((start + len - 1) & PAGE_MASK)); + + off = start & (PAGE_SIZE - 1); + start &= PAGE_MASK; + + pp = find_lock_page(mp, start >> PAGE_SHIFT); + if (pp) { + if (mapping_writably_mapped(mp)) + flush_dcache_page(pp); + + pb = kmap(pp); + bzero(pb + off, len); + kunmap(pp); + + if (mapping_writably_mapped(mp)) + flush_dcache_page(pp); + + mark_page_accessed(pp); + SetPageUptodate(pp); + ClearPageError(pp); + unlock_page(pp); + put_page(pp); + } +} + +/* + * Free space in a file. + * + * IN: zp - znode of file to free data in. + * off - start of section to free. + * len - length of section to free. + * + * RETURN: 0 on success, error code on failure + */ +static int +zfs_free_range(znode_t *zp, uint64_t off, uint64_t len) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + rl_t *rl; + int error; + + /* + * Lock the range being freed. + */ + rl = zfs_range_lock(&zp->z_range_lock, off, len, RL_WRITER); + + /* + * Nothing to do if file already at desired length. + */ + if (off >= zp->z_size) { + zfs_range_unlock(rl); + return (0); + } + + if (off + len > zp->z_size) + len = zp->z_size - off; + + error = dmu_free_long_range(zfsvfs->z_os, zp->z_id, off, len); + + /* + * Zero partial page cache entries. This must be done under a + * range lock in order to keep the ARC and page cache in sync. + */ + if (zp->z_is_mapped) { + loff_t first_page, last_page, page_len; + loff_t first_page_offset, last_page_offset; + + /* first possible full page in hole */ + first_page = (off + PAGE_SIZE - 1) >> PAGE_SHIFT; + /* last page of hole */ + last_page = (off + len) >> PAGE_SHIFT; + + /* offset of first_page */ + first_page_offset = first_page << PAGE_SHIFT; + /* offset of last_page */ + last_page_offset = last_page << PAGE_SHIFT; + + /* truncate whole pages */ + if (last_page_offset > first_page_offset) { + truncate_inode_pages_range(ZTOI(zp)->i_mapping, + first_page_offset, last_page_offset - 1); + } + + /* truncate sub-page ranges */ + if (first_page > last_page) { + /* entire punched area within a single page */ + zfs_zero_partial_page(zp, off, len); + } else { + /* beginning of punched area at the end of a page */ + page_len = first_page_offset - off; + if (page_len > 0) + zfs_zero_partial_page(zp, off, page_len); + + /* end of punched area at the beginning of a page */ + page_len = off + len - last_page_offset; + if (page_len > 0) + zfs_zero_partial_page(zp, last_page_offset, + page_len); + } + } + zfs_range_unlock(rl); + + return (error); +} + +/* + * Truncate a file + * + * IN: zp - znode of file to free data in. + * end - new end-of-file. + * + * RETURN: 0 on success, error code on failure + */ +static int +zfs_trunc(znode_t *zp, uint64_t end) +{ + zfsvfs_t *zfsvfs = ZTOZSB(zp); + dmu_tx_t *tx; + rl_t *rl; + int error; + sa_bulk_attr_t bulk[2]; + int count = 0; + + /* + * We will change zp_size, lock the whole file. + */ + rl = zfs_range_lock(&zp->z_range_lock, 0, UINT64_MAX, RL_WRITER); + + /* + * Nothing to do if file already at desired length. + */ + if (end >= zp->z_size) { + zfs_range_unlock(rl); + return (0); + } + + error = dmu_free_long_range(zfsvfs->z_os, zp->z_id, end, -1); + if (error) { + zfs_range_unlock(rl); + return (error); + } + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + dmu_tx_mark_netfree(tx); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + zfs_range_unlock(rl); + return (error); + } + + zp->z_size = end; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_SIZE(zfsvfs), + NULL, &zp->z_size, sizeof (zp->z_size)); + + if (end == 0) { + zp->z_pflags &= ~ZFS_SPARSE; + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), + NULL, &zp->z_pflags, 8); + } + VERIFY(sa_bulk_update(zp->z_sa_hdl, bulk, count, tx) == 0); + + dmu_tx_commit(tx); + + zfs_range_unlock(rl); + + return (0); +} + +/* + * Free space in a file + * + * IN: zp - znode of file to free data in. + * off - start of range + * len - end of range (0 => EOF) + * flag - current file open mode flags. + * log - TRUE if this action should be logged + * + * RETURN: 0 on success, error code on failure + */ +int +zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log) +{ + dmu_tx_t *tx; + zfsvfs_t *zfsvfs = ZTOZSB(zp); + zilog_t *zilog = zfsvfs->z_log; + uint64_t mode; + uint64_t mtime[2], ctime[2]; + sa_bulk_attr_t bulk[3]; + int count = 0; + int error; + + if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_MODE(zfsvfs), &mode, + sizeof (mode))) != 0) + return (error); + + if (off > zp->z_size) { + error = zfs_extend(zp, off+len); + if (error == 0 && log) + goto log; + goto out; + } + + if (len == 0) { + error = zfs_trunc(zp, off); + } else { + if ((error = zfs_free_range(zp, off, len)) == 0 && + off + len > zp->z_size) + error = zfs_extend(zp, off+len); + } + if (error || !log) + goto out; +log: + tx = dmu_tx_create(zfsvfs->z_os); + dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); + zfs_sa_upgrade_txholds(tx, zp); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + goto out; + } + + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, mtime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, ctime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), + NULL, &zp->z_pflags, 8); + zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime); + error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); + ASSERT(error == 0); + + zfs_log_truncate(zilog, tx, TX_TRUNCATE, zp, off, len); + + dmu_tx_commit(tx); + + zfs_inode_update(zp); + error = 0; + +out: + /* + * Truncate the page cache - for file truncate operations, use + * the purpose-built API for truncations. For punching operations, + * the truncation is handled under a range lock in zfs_free_range. + */ + if (len == 0) + truncate_setsize(ZTOI(zp), off); + return (error); +} + +void +zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *zplprops, dmu_tx_t *tx) +{ + struct super_block *sb; + zfsvfs_t *zfsvfs; + uint64_t moid, obj, sa_obj, version; + uint64_t sense = ZFS_CASE_SENSITIVE; + uint64_t norm = 0; + nvpair_t *elem; + int size; + int error; + int i; + znode_t *rootzp = NULL; + vattr_t vattr; + znode_t *zp; + zfs_acl_ids_t acl_ids; + + /* + * First attempt to create master node. + */ + /* + * In an empty objset, there are no blocks to read and thus + * there can be no i/o errors (which we assert below). + */ + moid = MASTER_NODE_OBJ; + error = zap_create_claim(os, moid, DMU_OT_MASTER_NODE, + DMU_OT_NONE, 0, tx); + ASSERT(error == 0); + + /* + * Set starting attributes. + */ + version = zfs_zpl_version_map(spa_version(dmu_objset_spa(os))); + elem = NULL; + while ((elem = nvlist_next_nvpair(zplprops, elem)) != NULL) { + /* For the moment we expect all zpl props to be uint64_ts */ + uint64_t val; + char *name; + + ASSERT(nvpair_type(elem) == DATA_TYPE_UINT64); + VERIFY(nvpair_value_uint64(elem, &val) == 0); + name = nvpair_name(elem); + if (strcmp(name, zfs_prop_to_name(ZFS_PROP_VERSION)) == 0) { + if (val < version) + version = val; + } else { + error = zap_update(os, moid, name, 8, 1, &val, tx); + } + ASSERT(error == 0); + if (strcmp(name, zfs_prop_to_name(ZFS_PROP_NORMALIZE)) == 0) + norm = val; + else if (strcmp(name, zfs_prop_to_name(ZFS_PROP_CASE)) == 0) + sense = val; + } + ASSERT(version != 0); + error = zap_update(os, moid, ZPL_VERSION_STR, 8, 1, &version, tx); + + /* + * Create zap object used for SA attribute registration + */ + + if (version >= ZPL_VERSION_SA) { + sa_obj = zap_create(os, DMU_OT_SA_MASTER_NODE, + DMU_OT_NONE, 0, tx); + error = zap_add(os, moid, ZFS_SA_ATTRS, 8, 1, &sa_obj, tx); + ASSERT(error == 0); + } else { + sa_obj = 0; + } + /* + * Create a delete queue. + */ + obj = zap_create(os, DMU_OT_UNLINKED_SET, DMU_OT_NONE, 0, tx); + + error = zap_add(os, moid, ZFS_UNLINKED_SET, 8, 1, &obj, tx); + ASSERT(error == 0); + + /* + * Create root znode. Create minimal znode/inode/zfsvfs/sb + * to allow zfs_mknode to work. + */ + vattr.va_mask = ATTR_MODE|ATTR_UID|ATTR_GID; + vattr.va_mode = S_IFDIR|0755; + vattr.va_uid = crgetuid(cr); + vattr.va_gid = crgetgid(cr); + + rootzp = kmem_cache_alloc(znode_cache, KM_SLEEP); + rootzp->z_moved = 0; + rootzp->z_unlinked = 0; + rootzp->z_atime_dirty = 0; + rootzp->z_is_sa = USE_SA(version, os); + + zfsvfs = kmem_zalloc(sizeof (zfsvfs_t), KM_SLEEP); + zfsvfs->z_os = os; + zfsvfs->z_parent = zfsvfs; + zfsvfs->z_version = version; + zfsvfs->z_use_fuids = USE_FUIDS(version, os); + zfsvfs->z_use_sa = USE_SA(version, os); + zfsvfs->z_norm = norm; + + sb = kmem_zalloc(sizeof (struct super_block), KM_SLEEP); + sb->s_fs_info = zfsvfs; + + ZTOI(rootzp)->i_sb = sb; + + error = sa_setup(os, sa_obj, zfs_attr_table, ZPL_END, + &zfsvfs->z_attr_table); + + ASSERT(error == 0); + + /* + * Fold case on file systems that are always or sometimes case + * insensitive. + */ + if (sense == ZFS_CASE_INSENSITIVE || sense == ZFS_CASE_MIXED) + zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER; + + mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&zfsvfs->z_all_znodes, sizeof (znode_t), + offsetof(znode_t, z_link_node)); + + size = MIN(1 << (highbit64(zfs_object_mutex_size)-1), ZFS_OBJ_MTX_MAX); + zfsvfs->z_hold_size = size; + zfsvfs->z_hold_trees = vmem_zalloc(sizeof (avl_tree_t) * size, + KM_SLEEP); + zfsvfs->z_hold_locks = vmem_zalloc(sizeof (kmutex_t) * size, KM_SLEEP); + for (i = 0; i != size; i++) { + avl_create(&zfsvfs->z_hold_trees[i], zfs_znode_hold_compare, + sizeof (znode_hold_t), offsetof(znode_hold_t, zh_node)); + mutex_init(&zfsvfs->z_hold_locks[i], NULL, MUTEX_DEFAULT, NULL); + } + + VERIFY(0 == zfs_acl_ids_create(rootzp, IS_ROOT_NODE, &vattr, + cr, NULL, &acl_ids)); + zfs_mknode(rootzp, &vattr, tx, cr, IS_ROOT_NODE, &zp, &acl_ids); + ASSERT3P(zp, ==, rootzp); + error = zap_add(os, moid, ZFS_ROOT_OBJ, 8, 1, &rootzp->z_id, tx); + ASSERT(error == 0); + zfs_acl_ids_free(&acl_ids); + + atomic_set(&ZTOI(rootzp)->i_count, 0); + sa_handle_destroy(rootzp->z_sa_hdl); + kmem_cache_free(znode_cache, rootzp); + + /* + * Create shares directory + */ + error = zfs_create_share_dir(zfsvfs, tx); + ASSERT(error == 0); + + for (i = 0; i != size; i++) { + avl_destroy(&zfsvfs->z_hold_trees[i]); + mutex_destroy(&zfsvfs->z_hold_locks[i]); + } + + mutex_destroy(&zfsvfs->z_znodes_lock); + + vmem_free(zfsvfs->z_hold_trees, sizeof (avl_tree_t) * size); + vmem_free(zfsvfs->z_hold_locks, sizeof (kmutex_t) * size); + kmem_free(sb, sizeof (struct super_block)); + kmem_free(zfsvfs, sizeof (zfsvfs_t)); +} +#endif /* _KERNEL */ + +static int +zfs_sa_setup(objset_t *osp, sa_attr_type_t **sa_table) +{ + uint64_t sa_obj = 0; + int error; + + error = zap_lookup(osp, MASTER_NODE_OBJ, ZFS_SA_ATTRS, 8, 1, &sa_obj); + if (error != 0 && error != ENOENT) + return (error); + + error = sa_setup(osp, sa_obj, zfs_attr_table, ZPL_END, sa_table); + return (error); +} + +static int +zfs_grab_sa_handle(objset_t *osp, uint64_t obj, sa_handle_t **hdlp, + dmu_buf_t **db, void *tag) +{ + dmu_object_info_t doi; + int error; + + if ((error = sa_buf_hold(osp, obj, tag, db)) != 0) + return (error); + + dmu_object_info_from_db(*db, &doi); + if ((doi.doi_bonus_type != DMU_OT_SA && + doi.doi_bonus_type != DMU_OT_ZNODE) || + (doi.doi_bonus_type == DMU_OT_ZNODE && + doi.doi_bonus_size < sizeof (znode_phys_t))) { + sa_buf_rele(*db, tag); + return (SET_ERROR(ENOTSUP)); + } + + error = sa_handle_get(osp, obj, NULL, SA_HDL_PRIVATE, hdlp); + if (error != 0) { + sa_buf_rele(*db, tag); + return (error); + } + + return (0); +} + +void +zfs_release_sa_handle(sa_handle_t *hdl, dmu_buf_t *db, void *tag) +{ + sa_handle_destroy(hdl); + sa_buf_rele(db, tag); +} + +/* + * Given an object number, return its parent object number and whether + * or not the object is an extended attribute directory. + */ +static int +zfs_obj_to_pobj(objset_t *osp, sa_handle_t *hdl, sa_attr_type_t *sa_table, + uint64_t *pobjp, int *is_xattrdir) +{ + uint64_t parent; + uint64_t pflags; + uint64_t mode; + uint64_t parent_mode; + sa_bulk_attr_t bulk[3]; + sa_handle_t *sa_hdl; + dmu_buf_t *sa_db; + int count = 0; + int error; + + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_PARENT], NULL, + &parent, sizeof (parent)); + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_FLAGS], NULL, + &pflags, sizeof (pflags)); + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_MODE], NULL, + &mode, sizeof (mode)); + + if ((error = sa_bulk_lookup(hdl, bulk, count)) != 0) + return (error); + + /* + * When a link is removed its parent pointer is not changed and will + * be invalid. There are two cases where a link is removed but the + * file stays around, when it goes to the delete queue and when there + * are additional links. + */ + error = zfs_grab_sa_handle(osp, parent, &sa_hdl, &sa_db, FTAG); + if (error != 0) + return (error); + + error = sa_lookup(sa_hdl, ZPL_MODE, &parent_mode, sizeof (parent_mode)); + zfs_release_sa_handle(sa_hdl, sa_db, FTAG); + if (error != 0) + return (error); + + *is_xattrdir = ((pflags & ZFS_XATTR) != 0) && S_ISDIR(mode); + + /* + * Extended attributes can be applied to files, directories, etc. + * Otherwise the parent must be a directory. + */ + if (!*is_xattrdir && !S_ISDIR(parent_mode)) + return (EINVAL); + + *pobjp = parent; + + return (0); +} + +/* + * Given an object number, return some zpl level statistics + */ +static int +zfs_obj_to_stats_impl(sa_handle_t *hdl, sa_attr_type_t *sa_table, + zfs_stat_t *sb) +{ + sa_bulk_attr_t bulk[4]; + int count = 0; + + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_MODE], NULL, + &sb->zs_mode, sizeof (sb->zs_mode)); + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_GEN], NULL, + &sb->zs_gen, sizeof (sb->zs_gen)); + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_LINKS], NULL, + &sb->zs_links, sizeof (sb->zs_links)); + SA_ADD_BULK_ATTR(bulk, count, sa_table[ZPL_CTIME], NULL, + &sb->zs_ctime, sizeof (sb->zs_ctime)); + + return (sa_bulk_lookup(hdl, bulk, count)); +} + +static int +zfs_obj_to_path_impl(objset_t *osp, uint64_t obj, sa_handle_t *hdl, + sa_attr_type_t *sa_table, char *buf, int len) +{ + sa_handle_t *sa_hdl; + sa_handle_t *prevhdl = NULL; + dmu_buf_t *prevdb = NULL; + dmu_buf_t *sa_db = NULL; + char *path = buf + len - 1; + int error; + + *path = '\0'; + sa_hdl = hdl; + + for (;;) { + uint64_t pobj = 0; + char component[MAXNAMELEN + 2]; + size_t complen; + int is_xattrdir = 0; + + if (prevdb) + zfs_release_sa_handle(prevhdl, prevdb, FTAG); + + if ((error = zfs_obj_to_pobj(osp, sa_hdl, sa_table, &pobj, + &is_xattrdir)) != 0) + break; + + if (pobj == obj) { + if (path[0] != '/') + *--path = '/'; + break; + } + + component[0] = '/'; + if (is_xattrdir) { + (void) sprintf(component + 1, ""); + } else { + error = zap_value_search(osp, pobj, obj, + ZFS_DIRENT_OBJ(-1ULL), component + 1); + if (error != 0) + break; + } + + complen = strlen(component); + path -= complen; + ASSERT(path >= buf); + bcopy(component, path, complen); + obj = pobj; + + if (sa_hdl != hdl) { + prevhdl = sa_hdl; + prevdb = sa_db; + } + error = zfs_grab_sa_handle(osp, obj, &sa_hdl, &sa_db, FTAG); + if (error != 0) { + sa_hdl = prevhdl; + sa_db = prevdb; + break; + } + } + + if (sa_hdl != NULL && sa_hdl != hdl) { + ASSERT(sa_db != NULL); + zfs_release_sa_handle(sa_hdl, sa_db, FTAG); + } + + if (error == 0) + (void) memmove(buf, path, buf + len - path); + + return (error); +} + +int +zfs_obj_to_path(objset_t *osp, uint64_t obj, char *buf, int len) +{ + sa_attr_type_t *sa_table; + sa_handle_t *hdl; + dmu_buf_t *db; + int error; + + error = zfs_sa_setup(osp, &sa_table); + if (error != 0) + return (error); + + error = zfs_grab_sa_handle(osp, obj, &hdl, &db, FTAG); + if (error != 0) + return (error); + + error = zfs_obj_to_path_impl(osp, obj, hdl, sa_table, buf, len); + + zfs_release_sa_handle(hdl, db, FTAG); + return (error); +} + +int +zfs_obj_to_stats(objset_t *osp, uint64_t obj, zfs_stat_t *sb, + char *buf, int len) +{ + char *path = buf + len - 1; + sa_attr_type_t *sa_table; + sa_handle_t *hdl; + dmu_buf_t *db; + int error; + + *path = '\0'; + + error = zfs_sa_setup(osp, &sa_table); + if (error != 0) + return (error); + + error = zfs_grab_sa_handle(osp, obj, &hdl, &db, FTAG); + if (error != 0) + return (error); + + error = zfs_obj_to_stats_impl(hdl, sa_table, sb); + if (error != 0) { + zfs_release_sa_handle(hdl, db, FTAG); + return (error); + } + + error = zfs_obj_to_path_impl(osp, obj, hdl, sa_table, buf, len); + + zfs_release_sa_handle(hdl, db, FTAG); + return (error); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zfs_create_fs); +EXPORT_SYMBOL(zfs_obj_to_path); + +/* CSTYLED */ +module_param(zfs_object_mutex_size, uint, 0644); +MODULE_PARM_DESC(zfs_object_mutex_size, "Size of znode hold array"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zil.c +++ linux-aws-4.15.0/zfs/module/zfs/zil.c @@ -0,0 +1,2329 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + */ + +/* Portions Copyright 2010 Robert Milkowski */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * The zfs intent log (ZIL) saves transaction records of system calls + * that change the file system in memory with enough information + * to be able to replay them. These are stored in memory until + * either the DMU transaction group (txg) commits them to the stable pool + * and they can be discarded, or they are flushed to the stable log + * (also in the pool) due to a fsync, O_DSYNC or other synchronous + * requirement. In the event of a panic or power fail then those log + * records (transactions) are replayed. + * + * There is one ZIL per file system. Its on-disk (pool) format consists + * of 3 parts: + * + * - ZIL header + * - ZIL blocks + * - ZIL records + * + * A log record holds a system call transaction. Log blocks can + * hold many log records and the blocks are chained together. + * Each ZIL block contains a block pointer (blkptr_t) to the next + * ZIL block in the chain. The ZIL header points to the first + * block in the chain. Note there is not a fixed place in the pool + * to hold blocks. They are dynamically allocated and freed as + * needed from the blocks available. Figure X shows the ZIL structure: + */ + +/* + * See zil.h for more information about these fields. + */ +zil_stats_t zil_stats = { + { "zil_commit_count", KSTAT_DATA_UINT64 }, + { "zil_commit_writer_count", KSTAT_DATA_UINT64 }, + { "zil_itx_count", KSTAT_DATA_UINT64 }, + { "zil_itx_indirect_count", KSTAT_DATA_UINT64 }, + { "zil_itx_indirect_bytes", KSTAT_DATA_UINT64 }, + { "zil_itx_copied_count", KSTAT_DATA_UINT64 }, + { "zil_itx_copied_bytes", KSTAT_DATA_UINT64 }, + { "zil_itx_needcopy_count", KSTAT_DATA_UINT64 }, + { "zil_itx_needcopy_bytes", KSTAT_DATA_UINT64 }, + { "zil_itx_metaslab_normal_count", KSTAT_DATA_UINT64 }, + { "zil_itx_metaslab_normal_bytes", KSTAT_DATA_UINT64 }, + { "zil_itx_metaslab_slog_count", KSTAT_DATA_UINT64 }, + { "zil_itx_metaslab_slog_bytes", KSTAT_DATA_UINT64 }, +}; + +static kstat_t *zil_ksp; + +/* + * Disable intent logging replay. This global ZIL switch affects all pools. + */ +int zil_replay_disable = 0; + +/* + * Tunable parameter for debugging or performance analysis. Setting + * zfs_nocacheflush will cause corruption on power loss if a volatile + * out-of-order write cache is enabled. + */ +int zfs_nocacheflush = 0; + +/* + * Limit SLOG write size per commit executed with synchronous priority. + * Any writes above that will be executed with lower (asynchronous) priority + * to limit potential SLOG device abuse by single active ZIL writer. + */ +unsigned long zil_slog_bulk = 768 * 1024; + +static kmem_cache_t *zil_lwb_cache; + +static void zil_async_to_sync(zilog_t *zilog, uint64_t foid); + +#define LWB_EMPTY(lwb) ((BP_GET_LSIZE(&lwb->lwb_blk) - \ + sizeof (zil_chain_t)) == (lwb->lwb_sz - lwb->lwb_nused)) + +static int +zil_bp_compare(const void *x1, const void *x2) +{ + const dva_t *dva1 = &((zil_bp_node_t *)x1)->zn_dva; + const dva_t *dva2 = &((zil_bp_node_t *)x2)->zn_dva; + + int cmp = AVL_CMP(DVA_GET_VDEV(dva1), DVA_GET_VDEV(dva2)); + if (likely(cmp)) + return (cmp); + + return (AVL_CMP(DVA_GET_OFFSET(dva1), DVA_GET_OFFSET(dva2))); +} + +static void +zil_bp_tree_init(zilog_t *zilog) +{ + avl_create(&zilog->zl_bp_tree, zil_bp_compare, + sizeof (zil_bp_node_t), offsetof(zil_bp_node_t, zn_node)); +} + +static void +zil_bp_tree_fini(zilog_t *zilog) +{ + avl_tree_t *t = &zilog->zl_bp_tree; + zil_bp_node_t *zn; + void *cookie = NULL; + + while ((zn = avl_destroy_nodes(t, &cookie)) != NULL) + kmem_free(zn, sizeof (zil_bp_node_t)); + + avl_destroy(t); +} + +int +zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp) +{ + avl_tree_t *t = &zilog->zl_bp_tree; + const dva_t *dva; + zil_bp_node_t *zn; + avl_index_t where; + + if (BP_IS_EMBEDDED(bp)) + return (0); + + dva = BP_IDENTITY(bp); + + if (avl_find(t, dva, &where) != NULL) + return (SET_ERROR(EEXIST)); + + zn = kmem_alloc(sizeof (zil_bp_node_t), KM_SLEEP); + zn->zn_dva = *dva; + avl_insert(t, zn, where); + + return (0); +} + +static zil_header_t * +zil_header_in_syncing_context(zilog_t *zilog) +{ + return ((zil_header_t *)zilog->zl_header); +} + +static void +zil_init_log_chain(zilog_t *zilog, blkptr_t *bp) +{ + zio_cksum_t *zc = &bp->blk_cksum; + + zc->zc_word[ZIL_ZC_GUID_0] = spa_get_random(-1ULL); + zc->zc_word[ZIL_ZC_GUID_1] = spa_get_random(-1ULL); + zc->zc_word[ZIL_ZC_OBJSET] = dmu_objset_id(zilog->zl_os); + zc->zc_word[ZIL_ZC_SEQ] = 1ULL; +} + +/* + * Read a log block and make sure it's valid. + */ +static int +zil_read_log_block(zilog_t *zilog, const blkptr_t *bp, blkptr_t *nbp, void *dst, + char **end) +{ + enum zio_flag zio_flags = ZIO_FLAG_CANFAIL; + arc_flags_t aflags = ARC_FLAG_WAIT; + arc_buf_t *abuf = NULL; + zbookmark_phys_t zb; + int error; + + if (zilog->zl_header->zh_claim_txg == 0) + zio_flags |= ZIO_FLAG_SPECULATIVE | ZIO_FLAG_SCRUB; + + if (!(zilog->zl_header->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) + zio_flags |= ZIO_FLAG_SPECULATIVE; + + SET_BOOKMARK(&zb, bp->blk_cksum.zc_word[ZIL_ZC_OBJSET], + ZB_ZIL_OBJECT, ZB_ZIL_LEVEL, bp->blk_cksum.zc_word[ZIL_ZC_SEQ]); + + error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_SYNC_READ, zio_flags, &aflags, &zb); + + if (error == 0) { + zio_cksum_t cksum = bp->blk_cksum; + + /* + * Validate the checksummed log block. + * + * Sequence numbers should be... sequential. The checksum + * verifier for the next block should be bp's checksum plus 1. + * + * Also check the log chain linkage and size used. + */ + cksum.zc_word[ZIL_ZC_SEQ]++; + + if (BP_GET_CHECKSUM(bp) == ZIO_CHECKSUM_ZILOG2) { + zil_chain_t *zilc = abuf->b_data; + char *lr = (char *)(zilc + 1); + uint64_t len = zilc->zc_nused - sizeof (zil_chain_t); + + if (bcmp(&cksum, &zilc->zc_next_blk.blk_cksum, + sizeof (cksum)) || BP_IS_HOLE(&zilc->zc_next_blk)) { + error = SET_ERROR(ECKSUM); + } else { + ASSERT3U(len, <=, SPA_OLD_MAXBLOCKSIZE); + bcopy(lr, dst, len); + *end = (char *)dst + len; + *nbp = zilc->zc_next_blk; + } + } else { + char *lr = abuf->b_data; + uint64_t size = BP_GET_LSIZE(bp); + zil_chain_t *zilc = (zil_chain_t *)(lr + size) - 1; + + if (bcmp(&cksum, &zilc->zc_next_blk.blk_cksum, + sizeof (cksum)) || BP_IS_HOLE(&zilc->zc_next_blk) || + (zilc->zc_nused > (size - sizeof (*zilc)))) { + error = SET_ERROR(ECKSUM); + } else { + ASSERT3U(zilc->zc_nused, <=, + SPA_OLD_MAXBLOCKSIZE); + bcopy(lr, dst, zilc->zc_nused); + *end = (char *)dst + zilc->zc_nused; + *nbp = zilc->zc_next_blk; + } + } + + arc_buf_destroy(abuf, &abuf); + } + + return (error); +} + +/* + * Read a TX_WRITE log data block. + */ +static int +zil_read_log_data(zilog_t *zilog, const lr_write_t *lr, void *wbuf) +{ + enum zio_flag zio_flags = ZIO_FLAG_CANFAIL; + const blkptr_t *bp = &lr->lr_blkptr; + arc_flags_t aflags = ARC_FLAG_WAIT; + arc_buf_t *abuf = NULL; + zbookmark_phys_t zb; + int error; + + if (BP_IS_HOLE(bp)) { + if (wbuf != NULL) + bzero(wbuf, MAX(BP_GET_LSIZE(bp), lr->lr_length)); + return (0); + } + + if (zilog->zl_header->zh_claim_txg == 0) + zio_flags |= ZIO_FLAG_SPECULATIVE | ZIO_FLAG_SCRUB; + + SET_BOOKMARK(&zb, dmu_objset_id(zilog->zl_os), lr->lr_foid, + ZB_ZIL_LEVEL, lr->lr_offset / BP_GET_LSIZE(bp)); + + error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, + ZIO_PRIORITY_SYNC_READ, zio_flags, &aflags, &zb); + + if (error == 0) { + if (wbuf != NULL) + bcopy(abuf->b_data, wbuf, arc_buf_size(abuf)); + arc_buf_destroy(abuf, &abuf); + } + + return (error); +} + +/* + * Parse the intent log, and call parse_func for each valid record within. + */ +int +zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, + zil_parse_lr_func_t *parse_lr_func, void *arg, uint64_t txg) +{ + const zil_header_t *zh = zilog->zl_header; + boolean_t claimed = !!zh->zh_claim_txg; + uint64_t claim_blk_seq = claimed ? zh->zh_claim_blk_seq : UINT64_MAX; + uint64_t claim_lr_seq = claimed ? zh->zh_claim_lr_seq : UINT64_MAX; + uint64_t max_blk_seq = 0; + uint64_t max_lr_seq = 0; + uint64_t blk_count = 0; + uint64_t lr_count = 0; + blkptr_t blk, next_blk; + char *lrbuf, *lrp; + int error = 0; + + bzero(&next_blk, sizeof (blkptr_t)); + + /* + * Old logs didn't record the maximum zh_claim_lr_seq. + */ + if (!(zh->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) + claim_lr_seq = UINT64_MAX; + + /* + * Starting at the block pointed to by zh_log we read the log chain. + * For each block in the chain we strongly check that block to + * ensure its validity. We stop when an invalid block is found. + * For each block pointer in the chain we call parse_blk_func(). + * For each record in each valid block we call parse_lr_func(). + * If the log has been claimed, stop if we encounter a sequence + * number greater than the highest claimed sequence number. + */ + lrbuf = zio_buf_alloc(SPA_OLD_MAXBLOCKSIZE); + zil_bp_tree_init(zilog); + + for (blk = zh->zh_log; !BP_IS_HOLE(&blk); blk = next_blk) { + uint64_t blk_seq = blk.blk_cksum.zc_word[ZIL_ZC_SEQ]; + int reclen; + char *end = NULL; + + if (blk_seq > claim_blk_seq) + break; + if ((error = parse_blk_func(zilog, &blk, arg, txg)) != 0) + break; + ASSERT3U(max_blk_seq, <, blk_seq); + max_blk_seq = blk_seq; + blk_count++; + + if (max_lr_seq == claim_lr_seq && max_blk_seq == claim_blk_seq) + break; + + error = zil_read_log_block(zilog, &blk, &next_blk, lrbuf, &end); + if (error != 0) + break; + + for (lrp = lrbuf; lrp < end; lrp += reclen) { + lr_t *lr = (lr_t *)lrp; + reclen = lr->lrc_reclen; + ASSERT3U(reclen, >=, sizeof (lr_t)); + if (lr->lrc_seq > claim_lr_seq) + goto done; + if ((error = parse_lr_func(zilog, lr, arg, txg)) != 0) + goto done; + ASSERT3U(max_lr_seq, <, lr->lrc_seq); + max_lr_seq = lr->lrc_seq; + lr_count++; + } + } +done: + zilog->zl_parse_error = error; + zilog->zl_parse_blk_seq = max_blk_seq; + zilog->zl_parse_lr_seq = max_lr_seq; + zilog->zl_parse_blk_count = blk_count; + zilog->zl_parse_lr_count = lr_count; + + ASSERT(!claimed || !(zh->zh_flags & ZIL_CLAIM_LR_SEQ_VALID) || + (max_blk_seq == claim_blk_seq && max_lr_seq == claim_lr_seq)); + + zil_bp_tree_fini(zilog); + zio_buf_free(lrbuf, SPA_OLD_MAXBLOCKSIZE); + + return (error); +} + +static int +zil_claim_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t first_txg) +{ + /* + * Claim log block if not already committed and not already claimed. + * If tx == NULL, just verify that the block is claimable. + */ + if (BP_IS_HOLE(bp) || bp->blk_birth < first_txg || + zil_bp_tree_add(zilog, bp) != 0) + return (0); + + return (zio_wait(zio_claim(NULL, zilog->zl_spa, + tx == NULL ? 0 : first_txg, bp, spa_claim_notify, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_SCRUB))); +} + +static int +zil_claim_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t first_txg) +{ + lr_write_t *lr = (lr_write_t *)lrc; + int error; + + if (lrc->lrc_txtype != TX_WRITE) + return (0); + + /* + * If the block is not readable, don't claim it. This can happen + * in normal operation when a log block is written to disk before + * some of the dmu_sync() blocks it points to. In this case, the + * transaction cannot have been committed to anyone (we would have + * waited for all writes to be stable first), so it is semantically + * correct to declare this the end of the log. + */ + if (lr->lr_blkptr.blk_birth >= first_txg && + (error = zil_read_log_data(zilog, lr, NULL)) != 0) + return (error); + return (zil_claim_log_block(zilog, &lr->lr_blkptr, tx, first_txg)); +} + +/* ARGSUSED */ +static int +zil_free_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t claim_txg) +{ + zio_free_zil(zilog->zl_spa, dmu_tx_get_txg(tx), bp); + + return (0); +} + +static int +zil_free_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t claim_txg) +{ + lr_write_t *lr = (lr_write_t *)lrc; + blkptr_t *bp = &lr->lr_blkptr; + + /* + * If we previously claimed it, we need to free it. + */ + if (claim_txg != 0 && lrc->lrc_txtype == TX_WRITE && + bp->blk_birth >= claim_txg && zil_bp_tree_add(zilog, bp) == 0 && + !BP_IS_HOLE(bp)) + zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); + + return (0); +} + +static lwb_t * +zil_alloc_lwb(zilog_t *zilog, blkptr_t *bp, boolean_t slog, uint64_t txg, + boolean_t fastwrite) +{ + lwb_t *lwb; + + lwb = kmem_cache_alloc(zil_lwb_cache, KM_SLEEP); + lwb->lwb_zilog = zilog; + lwb->lwb_blk = *bp; + lwb->lwb_fastwrite = fastwrite; + lwb->lwb_slog = slog; + lwb->lwb_buf = zio_buf_alloc(BP_GET_LSIZE(bp)); + lwb->lwb_max_txg = txg; + lwb->lwb_zio = NULL; + lwb->lwb_tx = NULL; + if (BP_GET_CHECKSUM(bp) == ZIO_CHECKSUM_ZILOG2) { + lwb->lwb_nused = sizeof (zil_chain_t); + lwb->lwb_sz = BP_GET_LSIZE(bp); + } else { + lwb->lwb_nused = 0; + lwb->lwb_sz = BP_GET_LSIZE(bp) - sizeof (zil_chain_t); + } + + mutex_enter(&zilog->zl_lock); + list_insert_tail(&zilog->zl_lwb_list, lwb); + mutex_exit(&zilog->zl_lock); + + return (lwb); +} + +/* + * Called when we create in-memory log transactions so that we know + * to cleanup the itxs at the end of spa_sync(). + */ +void +zilog_dirty(zilog_t *zilog, uint64_t txg) +{ + dsl_pool_t *dp = zilog->zl_dmu_pool; + dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); + + if (ds->ds_is_snapshot) + panic("dirtying snapshot!"); + + if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) { + /* up the hold count until we can be written out */ + dmu_buf_add_ref(ds->ds_dbuf, zilog); + } +} + +/* + * Determine if the zil is dirty in the specified txg. Callers wanting to + * ensure that the dirty state does not change must hold the itxg_lock for + * the specified txg. Holding the lock will ensure that the zil cannot be + * dirtied (zil_itx_assign) or cleaned (zil_clean) while we check its current + * state. + */ +boolean_t +zilog_is_dirty_in_txg(zilog_t *zilog, uint64_t txg) +{ + dsl_pool_t *dp = zilog->zl_dmu_pool; + + if (txg_list_member(&dp->dp_dirty_zilogs, zilog, txg & TXG_MASK)) + return (B_TRUE); + return (B_FALSE); +} + +/* + * Determine if the zil is dirty. The zil is considered dirty if it has + * any pending itx records that have not been cleaned by zil_clean(). + */ +boolean_t +zilog_is_dirty(zilog_t *zilog) +{ + dsl_pool_t *dp = zilog->zl_dmu_pool; + int t; + + for (t = 0; t < TXG_SIZE; t++) { + if (txg_list_member(&dp->dp_dirty_zilogs, zilog, t)) + return (B_TRUE); + } + return (B_FALSE); +} + +/* + * Create an on-disk intent log. + */ +static lwb_t * +zil_create(zilog_t *zilog) +{ + const zil_header_t *zh = zilog->zl_header; + lwb_t *lwb = NULL; + uint64_t txg = 0; + dmu_tx_t *tx = NULL; + blkptr_t blk; + int error = 0; + boolean_t fastwrite = FALSE; + boolean_t slog = FALSE; + + /* + * Wait for any previous destroy to complete. + */ + txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); + + ASSERT(zh->zh_claim_txg == 0); + ASSERT(zh->zh_replay_seq == 0); + + blk = zh->zh_log; + + /* + * Allocate an initial log block if: + * - there isn't one already + * - the existing block is the wrong endianness + */ + if (BP_IS_HOLE(&blk) || BP_SHOULD_BYTESWAP(&blk)) { + tx = dmu_tx_create(zilog->zl_os); + VERIFY(dmu_tx_assign(tx, TXG_WAIT) == 0); + dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); + txg = dmu_tx_get_txg(tx); + + if (!BP_IS_HOLE(&blk)) { + zio_free_zil(zilog->zl_spa, txg, &blk); + BP_ZERO(&blk); + } + + error = zio_alloc_zil(zilog->zl_spa, txg, &blk, + ZIL_MIN_BLKSZ, &slog); + fastwrite = TRUE; + + if (error == 0) + zil_init_log_chain(zilog, &blk); + } + + /* + * Allocate a log write buffer (lwb) for the first log block. + */ + if (error == 0) + lwb = zil_alloc_lwb(zilog, &blk, slog, txg, fastwrite); + + /* + * If we just allocated the first log block, commit our transaction + * and wait for zil_sync() to stuff the block poiner into zh_log. + * (zh is part of the MOS, so we cannot modify it in open context.) + */ + if (tx != NULL) { + dmu_tx_commit(tx); + txg_wait_synced(zilog->zl_dmu_pool, txg); + } + + ASSERT(bcmp(&blk, &zh->zh_log, sizeof (blk)) == 0); + + return (lwb); +} + +/* + * In one tx, free all log blocks and clear the log header. + * If keep_first is set, then we're replaying a log with no content. + * We want to keep the first block, however, so that the first + * synchronous transaction doesn't require a txg_wait_synced() + * in zil_create(). We don't need to txg_wait_synced() here either + * when keep_first is set, because both zil_create() and zil_destroy() + * will wait for any in-progress destroys to complete. + */ +void +zil_destroy(zilog_t *zilog, boolean_t keep_first) +{ + const zil_header_t *zh = zilog->zl_header; + lwb_t *lwb; + dmu_tx_t *tx; + uint64_t txg; + + /* + * Wait for any previous destroy to complete. + */ + txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); + + zilog->zl_old_header = *zh; /* debugging aid */ + + if (BP_IS_HOLE(&zh->zh_log)) + return; + + tx = dmu_tx_create(zilog->zl_os); + VERIFY(dmu_tx_assign(tx, TXG_WAIT) == 0); + dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); + txg = dmu_tx_get_txg(tx); + + mutex_enter(&zilog->zl_lock); + + ASSERT3U(zilog->zl_destroy_txg, <, txg); + zilog->zl_destroy_txg = txg; + zilog->zl_keep_first = keep_first; + + if (!list_is_empty(&zilog->zl_lwb_list)) { + ASSERT(zh->zh_claim_txg == 0); + VERIFY(!keep_first); + while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { + ASSERT(lwb->lwb_zio == NULL); + if (lwb->lwb_fastwrite) + metaslab_fastwrite_unmark(zilog->zl_spa, + &lwb->lwb_blk); + list_remove(&zilog->zl_lwb_list, lwb); + if (lwb->lwb_buf != NULL) + zio_buf_free(lwb->lwb_buf, lwb->lwb_sz); + zio_free_zil(zilog->zl_spa, txg, &lwb->lwb_blk); + kmem_cache_free(zil_lwb_cache, lwb); + } + } else if (!keep_first) { + zil_destroy_sync(zilog, tx); + } + mutex_exit(&zilog->zl_lock); + + dmu_tx_commit(tx); +} + +void +zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx) +{ + ASSERT(list_is_empty(&zilog->zl_lwb_list)); + (void) zil_parse(zilog, zil_free_log_block, + zil_free_log_record, tx, zilog->zl_header->zh_claim_txg); +} + +int +zil_claim(dsl_pool_t *dp, dsl_dataset_t *ds, void *txarg) +{ + dmu_tx_t *tx = txarg; + uint64_t first_txg = dmu_tx_get_txg(tx); + zilog_t *zilog; + zil_header_t *zh; + objset_t *os; + int error; + + error = dmu_objset_own_obj(dp, ds->ds_object, + DMU_OST_ANY, B_FALSE, FTAG, &os); + if (error != 0) { + /* + * EBUSY indicates that the objset is inconsistent, in which + * case it can not have a ZIL. + */ + if (error != EBUSY) { + cmn_err(CE_WARN, "can't open objset for %llu, error %u", + (unsigned long long)ds->ds_object, error); + } + + return (0); + } + + zilog = dmu_objset_zil(os); + zh = zil_header_in_syncing_context(zilog); + + if (spa_get_log_state(zilog->zl_spa) == SPA_LOG_CLEAR) { + if (!BP_IS_HOLE(&zh->zh_log)) + zio_free_zil(zilog->zl_spa, first_txg, &zh->zh_log); + BP_ZERO(&zh->zh_log); + dsl_dataset_dirty(dmu_objset_ds(os), tx); + dmu_objset_disown(os, FTAG); + return (0); + } + + /* + * Claim all log blocks if we haven't already done so, and remember + * the highest claimed sequence number. This ensures that if we can + * read only part of the log now (e.g. due to a missing device), + * but we can read the entire log later, we will not try to replay + * or destroy beyond the last block we successfully claimed. + */ + ASSERT3U(zh->zh_claim_txg, <=, first_txg); + if (zh->zh_claim_txg == 0 && !BP_IS_HOLE(&zh->zh_log)) { + (void) zil_parse(zilog, zil_claim_log_block, + zil_claim_log_record, tx, first_txg); + zh->zh_claim_txg = first_txg; + zh->zh_claim_blk_seq = zilog->zl_parse_blk_seq; + zh->zh_claim_lr_seq = zilog->zl_parse_lr_seq; + if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) + zh->zh_flags |= ZIL_REPLAY_NEEDED; + zh->zh_flags |= ZIL_CLAIM_LR_SEQ_VALID; + dsl_dataset_dirty(dmu_objset_ds(os), tx); + } + + ASSERT3U(first_txg, ==, (spa_last_synced_txg(zilog->zl_spa) + 1)); + dmu_objset_disown(os, FTAG); + return (0); +} + +/* + * Check the log by walking the log chain. + * Checksum errors are ok as they indicate the end of the chain. + * Any other error (no device or read failure) returns an error. + */ +/* ARGSUSED */ +int +zil_check_log_chain(dsl_pool_t *dp, dsl_dataset_t *ds, void *tx) +{ + zilog_t *zilog; + objset_t *os; + blkptr_t *bp; + int error; + + ASSERT(tx == NULL); + + error = dmu_objset_from_ds(ds, &os); + if (error != 0) { + cmn_err(CE_WARN, "can't open objset %llu, error %d", + (unsigned long long)ds->ds_object, error); + return (0); + } + + zilog = dmu_objset_zil(os); + bp = (blkptr_t *)&zilog->zl_header->zh_log; + + /* + * Check the first block and determine if it's on a log device + * which may have been removed or faulted prior to loading this + * pool. If so, there's no point in checking the rest of the log + * as its content should have already been synced to the pool. + */ + if (!BP_IS_HOLE(bp)) { + vdev_t *vd; + boolean_t valid = B_TRUE; + + spa_config_enter(os->os_spa, SCL_STATE, FTAG, RW_READER); + vd = vdev_lookup_top(os->os_spa, DVA_GET_VDEV(&bp->blk_dva[0])); + if (vd->vdev_islog && vdev_is_dead(vd)) + valid = vdev_log_state_valid(vd); + spa_config_exit(os->os_spa, SCL_STATE, FTAG); + + if (!valid) + return (0); + } + + /* + * Because tx == NULL, zil_claim_log_block() will not actually claim + * any blocks, but just determine whether it is possible to do so. + * In addition to checking the log chain, zil_claim_log_block() + * will invoke zio_claim() with a done func of spa_claim_notify(), + * which will update spa_max_claim_txg. See spa_load() for details. + */ + error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, + zilog->zl_header->zh_claim_txg ? -1ULL : spa_first_txg(os->os_spa)); + + return ((error == ECKSUM || error == ENOENT) ? 0 : error); +} + +static int +zil_vdev_compare(const void *x1, const void *x2) +{ + const uint64_t v1 = ((zil_vdev_node_t *)x1)->zv_vdev; + const uint64_t v2 = ((zil_vdev_node_t *)x2)->zv_vdev; + + return (AVL_CMP(v1, v2)); +} + +void +zil_add_block(zilog_t *zilog, const blkptr_t *bp) +{ + avl_tree_t *t = &zilog->zl_vdev_tree; + avl_index_t where; + zil_vdev_node_t *zv, zvsearch; + int ndvas = BP_GET_NDVAS(bp); + int i; + + if (zfs_nocacheflush) + return; + + ASSERT(zilog->zl_writer); + + /* + * Even though we're zl_writer, we still need a lock because the + * zl_get_data() callbacks may have dmu_sync() done callbacks + * that will run concurrently. + */ + mutex_enter(&zilog->zl_vdev_lock); + for (i = 0; i < ndvas; i++) { + zvsearch.zv_vdev = DVA_GET_VDEV(&bp->blk_dva[i]); + if (avl_find(t, &zvsearch, &where) == NULL) { + zv = kmem_alloc(sizeof (*zv), KM_SLEEP); + zv->zv_vdev = zvsearch.zv_vdev; + avl_insert(t, zv, where); + } + } + mutex_exit(&zilog->zl_vdev_lock); +} + +static void +zil_flush_vdevs(zilog_t *zilog) +{ + spa_t *spa = zilog->zl_spa; + avl_tree_t *t = &zilog->zl_vdev_tree; + void *cookie = NULL; + zil_vdev_node_t *zv; + zio_t *zio; + + ASSERT(zilog->zl_writer); + + /* + * We don't need zl_vdev_lock here because we're the zl_writer, + * and all zl_get_data() callbacks are done. + */ + if (avl_numnodes(t) == 0) + return; + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + + zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL); + + while ((zv = avl_destroy_nodes(t, &cookie)) != NULL) { + vdev_t *vd = vdev_lookup_top(spa, zv->zv_vdev); + if (vd != NULL) + zio_flush(zio, vd); + kmem_free(zv, sizeof (*zv)); + } + + /* + * Wait for all the flushes to complete. Not all devices actually + * support the DKIOCFLUSHWRITECACHE ioctl, so it's OK if it fails. + */ + (void) zio_wait(zio); + + spa_config_exit(spa, SCL_STATE, FTAG); +} + +/* + * Function called when a log block write completes + */ +static void +zil_lwb_write_done(zio_t *zio) +{ + lwb_t *lwb = zio->io_private; + zilog_t *zilog = lwb->lwb_zilog; + dmu_tx_t *tx = lwb->lwb_tx; + + ASSERT(BP_GET_COMPRESS(zio->io_bp) == ZIO_COMPRESS_OFF); + ASSERT(BP_GET_TYPE(zio->io_bp) == DMU_OT_INTENT_LOG); + ASSERT(BP_GET_LEVEL(zio->io_bp) == 0); + ASSERT(BP_GET_BYTEORDER(zio->io_bp) == ZFS_HOST_BYTEORDER); + ASSERT(!BP_IS_GANG(zio->io_bp)); + ASSERT(!BP_IS_HOLE(zio->io_bp)); + ASSERT(BP_GET_FILL(zio->io_bp) == 0); + + /* + * Ensure the lwb buffer pointer is cleared before releasing + * the txg. If we have had an allocation failure and + * the txg is waiting to sync then we want want zil_sync() + * to remove the lwb so that it's not picked up as the next new + * one in zil_commit_writer(). zil_sync() will only remove + * the lwb if lwb_buf is null. + */ + abd_put(zio->io_abd); + zio_buf_free(lwb->lwb_buf, lwb->lwb_sz); + mutex_enter(&zilog->zl_lock); + lwb->lwb_zio = NULL; + lwb->lwb_fastwrite = FALSE; + lwb->lwb_buf = NULL; + lwb->lwb_tx = NULL; + mutex_exit(&zilog->zl_lock); + + /* + * Now that we've written this log block, we have a stable pointer + * to the next block in the chain, so it's OK to let the txg in + * which we allocated the next block sync. + */ + dmu_tx_commit(tx); +} + +/* + * Initialize the io for a log block. + */ +static void +zil_lwb_write_init(zilog_t *zilog, lwb_t *lwb) +{ + zbookmark_phys_t zb; + zio_priority_t prio; + + SET_BOOKMARK(&zb, lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_OBJSET], + ZB_ZIL_OBJECT, ZB_ZIL_LEVEL, + lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_SEQ]); + + if (zilog->zl_root_zio == NULL) { + zilog->zl_root_zio = zio_root(zilog->zl_spa, NULL, NULL, + ZIO_FLAG_CANFAIL); + } + + /* Lock so zil_sync() doesn't fastwrite_unmark after zio is created */ + mutex_enter(&zilog->zl_lock); + if (lwb->lwb_zio == NULL) { + abd_t *lwb_abd = abd_get_from_buf(lwb->lwb_buf, + BP_GET_LSIZE(&lwb->lwb_blk)); + if (!lwb->lwb_fastwrite) { + metaslab_fastwrite_mark(zilog->zl_spa, &lwb->lwb_blk); + lwb->lwb_fastwrite = 1; + } + if (!lwb->lwb_slog || zilog->zl_cur_used <= zil_slog_bulk) + prio = ZIO_PRIORITY_SYNC_WRITE; + else + prio = ZIO_PRIORITY_ASYNC_WRITE; + lwb->lwb_zio = zio_rewrite(zilog->zl_root_zio, zilog->zl_spa, + 0, &lwb->lwb_blk, lwb_abd, BP_GET_LSIZE(&lwb->lwb_blk), + zil_lwb_write_done, lwb, prio, + ZIO_FLAG_CANFAIL | ZIO_FLAG_DONT_PROPAGATE | + ZIO_FLAG_FASTWRITE, &zb); + } + mutex_exit(&zilog->zl_lock); +} + +/* + * Define a limited set of intent log block sizes. + * + * These must be a multiple of 4KB. Note only the amount used (again + * aligned to 4KB) actually gets written. However, we can't always just + * allocate SPA_OLD_MAXBLOCKSIZE as the slog space could be exhausted. + */ +uint64_t zil_block_buckets[] = { + 4096, /* non TX_WRITE */ + 8192+4096, /* data base */ + 32*1024 + 4096, /* NFS writes */ + UINT64_MAX +}; + +/* + * Start a log block write and advance to the next log block. + * Calls are serialized. + */ +static lwb_t * +zil_lwb_write_start(zilog_t *zilog, lwb_t *lwb) +{ + lwb_t *nlwb = NULL; + zil_chain_t *zilc; + spa_t *spa = zilog->zl_spa; + blkptr_t *bp; + dmu_tx_t *tx; + uint64_t txg; + uint64_t zil_blksz, wsz; + int i, error; + boolean_t slog; + + if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) { + zilc = (zil_chain_t *)lwb->lwb_buf; + bp = &zilc->zc_next_blk; + } else { + zilc = (zil_chain_t *)(lwb->lwb_buf + lwb->lwb_sz); + bp = &zilc->zc_next_blk; + } + + ASSERT(lwb->lwb_nused <= lwb->lwb_sz); + + /* + * Allocate the next block and save its address in this block + * before writing it in order to establish the log chain. + * Note that if the allocation of nlwb synced before we wrote + * the block that points at it (lwb), we'd leak it if we crashed. + * Therefore, we don't do dmu_tx_commit() until zil_lwb_write_done(). + * We dirty the dataset to ensure that zil_sync() will be called + * to clean up in the event of allocation failure or I/O failure. + */ + tx = dmu_tx_create(zilog->zl_os); + VERIFY(dmu_tx_assign(tx, TXG_WAIT) == 0); + dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); + txg = dmu_tx_get_txg(tx); + + lwb->lwb_tx = tx; + + /* + * Log blocks are pre-allocated. Here we select the size of the next + * block, based on size used in the last block. + * - first find the smallest bucket that will fit the block from a + * limited set of block sizes. This is because it's faster to write + * blocks allocated from the same metaslab as they are adjacent or + * close. + * - next find the maximum from the new suggested size and an array of + * previous sizes. This lessens a picket fence effect of wrongly + * guesssing the size if we have a stream of say 2k, 64k, 2k, 64k + * requests. + * + * Note we only write what is used, but we can't just allocate + * the maximum block size because we can exhaust the available + * pool log space. + */ + zil_blksz = zilog->zl_cur_used + sizeof (zil_chain_t); + for (i = 0; zil_blksz > zil_block_buckets[i]; i++) + continue; + zil_blksz = zil_block_buckets[i]; + if (zil_blksz == UINT64_MAX) + zil_blksz = SPA_OLD_MAXBLOCKSIZE; + zilog->zl_prev_blks[zilog->zl_prev_rotor] = zil_blksz; + for (i = 0; i < ZIL_PREV_BLKS; i++) + zil_blksz = MAX(zil_blksz, zilog->zl_prev_blks[i]); + zilog->zl_prev_rotor = (zilog->zl_prev_rotor + 1) & (ZIL_PREV_BLKS - 1); + + BP_ZERO(bp); + error = zio_alloc_zil(spa, txg, bp, zil_blksz, &slog); + if (slog) { + ZIL_STAT_BUMP(zil_itx_metaslab_slog_count); + ZIL_STAT_INCR(zil_itx_metaslab_slog_bytes, lwb->lwb_nused); + } else { + ZIL_STAT_BUMP(zil_itx_metaslab_normal_count); + ZIL_STAT_INCR(zil_itx_metaslab_normal_bytes, lwb->lwb_nused); + } + if (error == 0) { + ASSERT3U(bp->blk_birth, ==, txg); + bp->blk_cksum = lwb->lwb_blk.blk_cksum; + bp->blk_cksum.zc_word[ZIL_ZC_SEQ]++; + + /* + * Allocate a new log write buffer (lwb). + */ + nlwb = zil_alloc_lwb(zilog, bp, slog, txg, TRUE); + + /* Record the block for later vdev flushing */ + zil_add_block(zilog, &lwb->lwb_blk); + } + + if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) { + /* For Slim ZIL only write what is used. */ + wsz = P2ROUNDUP_TYPED(lwb->lwb_nused, ZIL_MIN_BLKSZ, uint64_t); + ASSERT3U(wsz, <=, lwb->lwb_sz); + zio_shrink(lwb->lwb_zio, wsz); + + } else { + wsz = lwb->lwb_sz; + } + + zilc->zc_pad = 0; + zilc->zc_nused = lwb->lwb_nused; + zilc->zc_eck.zec_cksum = lwb->lwb_blk.blk_cksum; + + /* + * clear unused data for security + */ + bzero(lwb->lwb_buf + lwb->lwb_nused, wsz - lwb->lwb_nused); + + zio_nowait(lwb->lwb_zio); /* Kick off the write for the old log block */ + + /* + * If there was an allocation failure then nlwb will be null which + * forces a txg_wait_synced(). + */ + return (nlwb); +} + +static lwb_t * +zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb) +{ + lr_t *lrcb, *lrc; + lr_write_t *lrwb, *lrw; + char *lr_buf; + uint64_t dlen, dnow, lwb_sp, reclen, txg; + + if (lwb == NULL) + return (NULL); + + ASSERT(lwb->lwb_buf != NULL); + + lrc = &itx->itx_lr; /* Common log record inside itx. */ + lrw = (lr_write_t *)lrc; /* Write log record inside itx. */ + if (lrc->lrc_txtype == TX_WRITE && itx->itx_wr_state == WR_NEED_COPY) { + dlen = P2ROUNDUP_TYPED( + lrw->lr_length, sizeof (uint64_t), uint64_t); + } else { + dlen = 0; + } + reclen = lrc->lrc_reclen; + zilog->zl_cur_used += (reclen + dlen); + txg = lrc->lrc_txg; + + zil_lwb_write_init(zilog, lwb); + +cont: + /* + * If this record won't fit in the current log block, start a new one. + * For WR_NEED_COPY optimize layout for minimal number of chunks. + */ + lwb_sp = lwb->lwb_sz - lwb->lwb_nused; + if (reclen > lwb_sp || (reclen + dlen > lwb_sp && + lwb_sp < ZIL_MAX_WASTE_SPACE && (dlen % ZIL_MAX_LOG_DATA == 0 || + lwb_sp < reclen + dlen % ZIL_MAX_LOG_DATA))) { + lwb = zil_lwb_write_start(zilog, lwb); + if (lwb == NULL) + return (NULL); + zil_lwb_write_init(zilog, lwb); + ASSERT(LWB_EMPTY(lwb)); + lwb_sp = lwb->lwb_sz - lwb->lwb_nused; + ASSERT3U(reclen + MIN(dlen, sizeof (uint64_t)), <=, lwb_sp); + } + + dnow = MIN(dlen, lwb_sp - reclen); + lr_buf = lwb->lwb_buf + lwb->lwb_nused; + bcopy(lrc, lr_buf, reclen); + lrcb = (lr_t *)lr_buf; /* Like lrc, but inside lwb. */ + lrwb = (lr_write_t *)lrcb; /* Like lrw, but inside lwb. */ + + ZIL_STAT_BUMP(zil_itx_count); + + /* + * If it's a write, fetch the data or get its blkptr as appropriate. + */ + if (lrc->lrc_txtype == TX_WRITE) { + if (txg > spa_freeze_txg(zilog->zl_spa)) + txg_wait_synced(zilog->zl_dmu_pool, txg); + if (itx->itx_wr_state == WR_COPIED) { + ZIL_STAT_BUMP(zil_itx_copied_count); + ZIL_STAT_INCR(zil_itx_copied_bytes, lrw->lr_length); + } else { + char *dbuf; + int error; + + if (itx->itx_wr_state == WR_NEED_COPY) { + dbuf = lr_buf + reclen; + lrcb->lrc_reclen += dnow; + if (lrwb->lr_length > dnow) + lrwb->lr_length = dnow; + lrw->lr_offset += dnow; + lrw->lr_length -= dnow; + ZIL_STAT_BUMP(zil_itx_needcopy_count); + ZIL_STAT_INCR(zil_itx_needcopy_bytes, + lrw->lr_length); + } else { + ASSERT(itx->itx_wr_state == WR_INDIRECT); + dbuf = NULL; + ZIL_STAT_BUMP(zil_itx_indirect_count); + ZIL_STAT_INCR(zil_itx_indirect_bytes, + lrw->lr_length); + } + error = zilog->zl_get_data( + itx->itx_private, lrwb, dbuf, lwb->lwb_zio); + if (error == EIO) { + txg_wait_synced(zilog->zl_dmu_pool, txg); + return (lwb); + } + if (error != 0) { + ASSERT(error == ENOENT || error == EEXIST || + error == EALREADY); + return (lwb); + } + } + } + + /* + * We're actually making an entry, so update lrc_seq to be the + * log record sequence number. Note that this is generally not + * equal to the itx sequence number because not all transactions + * are synchronous, and sometimes spa_sync() gets there first. + */ + lrcb->lrc_seq = ++zilog->zl_lr_seq; /* we are single threaded */ + lwb->lwb_nused += reclen + dnow; + lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg); + ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz); + ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t))); + + dlen -= dnow; + if (dlen > 0) { + zilog->zl_cur_used += reclen; + goto cont; + } + + return (lwb); +} + +itx_t * +zil_itx_create(uint64_t txtype, size_t lrsize) +{ + size_t itxsize; + itx_t *itx; + + lrsize = P2ROUNDUP_TYPED(lrsize, sizeof (uint64_t), size_t); + itxsize = offsetof(itx_t, itx_lr) + lrsize; + + itx = zio_data_buf_alloc(itxsize); + itx->itx_lr.lrc_txtype = txtype; + itx->itx_lr.lrc_reclen = lrsize; + itx->itx_lr.lrc_seq = 0; /* defensive */ + itx->itx_sync = B_TRUE; /* default is synchronous */ + itx->itx_callback = NULL; + itx->itx_callback_data = NULL; + itx->itx_size = itxsize; + + return (itx); +} + +void +zil_itx_destroy(itx_t *itx) +{ + zio_data_buf_free(itx, itx->itx_size); +} + +/* + * Free up the sync and async itxs. The itxs_t has already been detached + * so no locks are needed. + */ +static void +zil_itxg_clean(itxs_t *itxs) +{ + itx_t *itx; + list_t *list; + avl_tree_t *t; + void *cookie; + itx_async_node_t *ian; + + list = &itxs->i_sync_list; + while ((itx = list_head(list)) != NULL) { + if (itx->itx_callback != NULL) + itx->itx_callback(itx->itx_callback_data); + list_remove(list, itx); + zil_itx_destroy(itx); + } + + cookie = NULL; + t = &itxs->i_async_tree; + while ((ian = avl_destroy_nodes(t, &cookie)) != NULL) { + list = &ian->ia_list; + while ((itx = list_head(list)) != NULL) { + if (itx->itx_callback != NULL) + itx->itx_callback(itx->itx_callback_data); + list_remove(list, itx); + zil_itx_destroy(itx); + } + list_destroy(list); + kmem_free(ian, sizeof (itx_async_node_t)); + } + avl_destroy(t); + + kmem_free(itxs, sizeof (itxs_t)); +} + +static int +zil_aitx_compare(const void *x1, const void *x2) +{ + const uint64_t o1 = ((itx_async_node_t *)x1)->ia_foid; + const uint64_t o2 = ((itx_async_node_t *)x2)->ia_foid; + + return (AVL_CMP(o1, o2)); +} + +/* + * Remove all async itx with the given oid. + */ +static void +zil_remove_async(zilog_t *zilog, uint64_t oid) +{ + uint64_t otxg, txg; + itx_async_node_t *ian; + avl_tree_t *t; + avl_index_t where; + list_t clean_list; + itx_t *itx; + + ASSERT(oid != 0); + list_create(&clean_list, sizeof (itx_t), offsetof(itx_t, itx_node)); + + if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ + otxg = ZILTEST_TXG; + else + otxg = spa_last_synced_txg(zilog->zl_spa) + 1; + + for (txg = otxg; txg < (otxg + TXG_CONCURRENT_STATES); txg++) { + itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; + + mutex_enter(&itxg->itxg_lock); + if (itxg->itxg_txg != txg) { + mutex_exit(&itxg->itxg_lock); + continue; + } + + /* + * Locate the object node and append its list. + */ + t = &itxg->itxg_itxs->i_async_tree; + ian = avl_find(t, &oid, &where); + if (ian != NULL) + list_move_tail(&clean_list, &ian->ia_list); + mutex_exit(&itxg->itxg_lock); + } + while ((itx = list_head(&clean_list)) != NULL) { + if (itx->itx_callback != NULL) + itx->itx_callback(itx->itx_callback_data); + list_remove(&clean_list, itx); + zil_itx_destroy(itx); + } + list_destroy(&clean_list); +} + +void +zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx) +{ + uint64_t txg; + itxg_t *itxg; + itxs_t *itxs, *clean = NULL; + + /* + * Object ids can be re-instantiated in the next txg so + * remove any async transactions to avoid future leaks. + * This can happen if a fsync occurs on the re-instantiated + * object for a WR_INDIRECT or WR_NEED_COPY write, which gets + * the new file data and flushes a write record for the old object. + */ + if ((itx->itx_lr.lrc_txtype & ~TX_CI) == TX_REMOVE) + zil_remove_async(zilog, itx->itx_oid); + + /* + * Ensure the data of a renamed file is committed before the rename. + */ + if ((itx->itx_lr.lrc_txtype & ~TX_CI) == TX_RENAME) + zil_async_to_sync(zilog, itx->itx_oid); + + if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) + txg = ZILTEST_TXG; + else + txg = dmu_tx_get_txg(tx); + + itxg = &zilog->zl_itxg[txg & TXG_MASK]; + mutex_enter(&itxg->itxg_lock); + itxs = itxg->itxg_itxs; + if (itxg->itxg_txg != txg) { + if (itxs != NULL) { + /* + * The zil_clean callback hasn't got around to cleaning + * this itxg. Save the itxs for release below. + * This should be rare. + */ + zfs_dbgmsg("zil_itx_assign: missed itx cleanup for " + "txg %llu", itxg->itxg_txg); + clean = itxg->itxg_itxs; + } + itxg->itxg_txg = txg; + itxs = itxg->itxg_itxs = kmem_zalloc(sizeof (itxs_t), + KM_SLEEP); + + list_create(&itxs->i_sync_list, sizeof (itx_t), + offsetof(itx_t, itx_node)); + avl_create(&itxs->i_async_tree, zil_aitx_compare, + sizeof (itx_async_node_t), + offsetof(itx_async_node_t, ia_node)); + } + if (itx->itx_sync) { + list_insert_tail(&itxs->i_sync_list, itx); + } else { + avl_tree_t *t = &itxs->i_async_tree; + uint64_t foid = + LR_FOID_GET_OBJ(((lr_ooo_t *)&itx->itx_lr)->lr_foid); + itx_async_node_t *ian; + avl_index_t where; + + ian = avl_find(t, &foid, &where); + if (ian == NULL) { + ian = kmem_alloc(sizeof (itx_async_node_t), + KM_SLEEP); + list_create(&ian->ia_list, sizeof (itx_t), + offsetof(itx_t, itx_node)); + ian->ia_foid = foid; + avl_insert(t, ian, where); + } + list_insert_tail(&ian->ia_list, itx); + } + + itx->itx_lr.lrc_txg = dmu_tx_get_txg(tx); + zilog_dirty(zilog, txg); + mutex_exit(&itxg->itxg_lock); + + /* Release the old itxs now we've dropped the lock */ + if (clean != NULL) + zil_itxg_clean(clean); +} + +/* + * If there are any in-memory intent log transactions which have now been + * synced then start up a taskq to free them. We should only do this after we + * have written out the uberblocks (i.e. txg has been comitted) so that + * don't inadvertently clean out in-memory log records that would be required + * by zil_commit(). + */ +void +zil_clean(zilog_t *zilog, uint64_t synced_txg) +{ + itxg_t *itxg = &zilog->zl_itxg[synced_txg & TXG_MASK]; + itxs_t *clean_me; + + mutex_enter(&itxg->itxg_lock); + if (itxg->itxg_itxs == NULL || itxg->itxg_txg == ZILTEST_TXG) { + mutex_exit(&itxg->itxg_lock); + return; + } + ASSERT3U(itxg->itxg_txg, <=, synced_txg); + ASSERT(itxg->itxg_txg != 0); + ASSERT(zilog->zl_clean_taskq != NULL); + clean_me = itxg->itxg_itxs; + itxg->itxg_itxs = NULL; + itxg->itxg_txg = 0; + mutex_exit(&itxg->itxg_lock); + /* + * Preferably start a task queue to free up the old itxs but + * if taskq_dispatch can't allocate resources to do that then + * free it in-line. This should be rare. Note, using TQ_SLEEP + * created a bad performance problem. + */ + if (taskq_dispatch(zilog->zl_clean_taskq, + (void (*)(void *))zil_itxg_clean, clean_me, TQ_NOSLEEP) == 0) + zil_itxg_clean(clean_me); +} + +/* + * Get the list of itxs to commit into zl_itx_commit_list. + */ +static void +zil_get_commit_list(zilog_t *zilog) +{ + uint64_t otxg, txg; + list_t *commit_list = &zilog->zl_itx_commit_list; + + if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ + otxg = ZILTEST_TXG; + else + otxg = spa_last_synced_txg(zilog->zl_spa) + 1; + + /* + * This is inherently racy, since there is nothing to prevent + * the last synced txg from changing. That's okay since we'll + * only commit things in the future. + */ + for (txg = otxg; txg < (otxg + TXG_CONCURRENT_STATES); txg++) { + itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; + + mutex_enter(&itxg->itxg_lock); + if (itxg->itxg_txg != txg) { + mutex_exit(&itxg->itxg_lock); + continue; + } + + /* + * If we're adding itx records to the zl_itx_commit_list, + * then the zil better be dirty in this "txg". We can assert + * that here since we're holding the itxg_lock which will + * prevent spa_sync from cleaning it. Once we add the itxs + * to the zl_itx_commit_list we must commit it to disk even + * if it's unnecessary (i.e. the txg was synced). + */ + ASSERT(zilog_is_dirty_in_txg(zilog, txg) || + spa_freeze_txg(zilog->zl_spa) != UINT64_MAX); + list_move_tail(commit_list, &itxg->itxg_itxs->i_sync_list); + + mutex_exit(&itxg->itxg_lock); + } +} + +/* + * Move the async itxs for a specified object to commit into sync lists. + */ +static void +zil_async_to_sync(zilog_t *zilog, uint64_t foid) +{ + uint64_t otxg, txg; + itx_async_node_t *ian; + avl_tree_t *t; + avl_index_t where; + + if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ + otxg = ZILTEST_TXG; + else + otxg = spa_last_synced_txg(zilog->zl_spa) + 1; + + /* + * This is inherently racy, since there is nothing to prevent + * the last synced txg from changing. + */ + for (txg = otxg; txg < (otxg + TXG_CONCURRENT_STATES); txg++) { + itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; + + mutex_enter(&itxg->itxg_lock); + if (itxg->itxg_txg != txg) { + mutex_exit(&itxg->itxg_lock); + continue; + } + + /* + * If a foid is specified then find that node and append its + * list. Otherwise walk the tree appending all the lists + * to the sync list. We add to the end rather than the + * beginning to ensure the create has happened. + */ + t = &itxg->itxg_itxs->i_async_tree; + if (foid != 0) { + ian = avl_find(t, &foid, &where); + if (ian != NULL) { + list_move_tail(&itxg->itxg_itxs->i_sync_list, + &ian->ia_list); + } + } else { + void *cookie = NULL; + + while ((ian = avl_destroy_nodes(t, &cookie)) != NULL) { + list_move_tail(&itxg->itxg_itxs->i_sync_list, + &ian->ia_list); + list_destroy(&ian->ia_list); + kmem_free(ian, sizeof (itx_async_node_t)); + } + } + mutex_exit(&itxg->itxg_lock); + } +} + +static void +zil_commit_writer(zilog_t *zilog) +{ + uint64_t txg; + itx_t *itx; + lwb_t *lwb; + spa_t *spa = zilog->zl_spa; + int error = 0; + + ASSERT(zilog->zl_root_zio == NULL); + + mutex_exit(&zilog->zl_lock); + + zil_get_commit_list(zilog); + + /* + * Return if there's nothing to commit before we dirty the fs by + * calling zil_create(). + */ + if (list_head(&zilog->zl_itx_commit_list) == NULL) { + mutex_enter(&zilog->zl_lock); + return; + } + + if (zilog->zl_suspend) { + lwb = NULL; + } else { + lwb = list_tail(&zilog->zl_lwb_list); + if (lwb == NULL) + lwb = zil_create(zilog); + } + + DTRACE_PROBE1(zil__cw1, zilog_t *, zilog); + for (itx = list_head(&zilog->zl_itx_commit_list); itx != NULL; + itx = list_next(&zilog->zl_itx_commit_list, itx)) { + txg = itx->itx_lr.lrc_txg; + ASSERT3U(txg, !=, 0); + + /* + * This is inherently racy and may result in us writing + * out a log block for a txg that was just synced. This is + * ok since we'll end cleaning up that log block the next + * time we call zil_sync(). + */ + if (txg > spa_last_synced_txg(spa) || txg > spa_freeze_txg(spa)) + lwb = zil_lwb_commit(zilog, itx, lwb); + } + DTRACE_PROBE1(zil__cw2, zilog_t *, zilog); + + /* write the last block out */ + if (lwb != NULL && lwb->lwb_zio != NULL) + lwb = zil_lwb_write_start(zilog, lwb); + + zilog->zl_cur_used = 0; + + /* + * Wait if necessary for the log blocks to be on stable storage. + */ + if (zilog->zl_root_zio) { + error = zio_wait(zilog->zl_root_zio); + zilog->zl_root_zio = NULL; + zil_flush_vdevs(zilog); + } + + if (error || lwb == NULL) + txg_wait_synced(zilog->zl_dmu_pool, 0); + + while ((itx = list_head(&zilog->zl_itx_commit_list))) { + txg = itx->itx_lr.lrc_txg; + ASSERT(txg); + + if (itx->itx_callback != NULL) + itx->itx_callback(itx->itx_callback_data); + list_remove(&zilog->zl_itx_commit_list, itx); + zil_itx_destroy(itx); + } + + mutex_enter(&zilog->zl_lock); + + /* + * Remember the highest committed log sequence number for ztest. + * We only update this value when all the log writes succeeded, + * because ztest wants to ASSERT that it got the whole log chain. + */ + if (error == 0 && lwb != NULL) + zilog->zl_commit_lr_seq = zilog->zl_lr_seq; +} + +/* + * Commit zfs transactions to stable storage. + * If foid is 0 push out all transactions, otherwise push only those + * for that object or might reference that object. + * + * itxs are committed in batches. In a heavily stressed zil there will be + * a commit writer thread who is writing out a bunch of itxs to the log + * for a set of committing threads (cthreads) in the same batch as the writer. + * Those cthreads are all waiting on the same cv for that batch. + * + * There will also be a different and growing batch of threads that are + * waiting to commit (qthreads). When the committing batch completes + * a transition occurs such that the cthreads exit and the qthreads become + * cthreads. One of the new cthreads becomes the writer thread for the + * batch. Any new threads arriving become new qthreads. + * + * Only 2 condition variables are needed and there's no transition + * between the two cvs needed. They just flip-flop between qthreads + * and cthreads. + * + * Using this scheme we can efficiently wakeup up only those threads + * that have been committed. + */ +void +zil_commit(zilog_t *zilog, uint64_t foid) +{ + uint64_t mybatch; + + if (zilog->zl_sync == ZFS_SYNC_DISABLED) + return; + + ZIL_STAT_BUMP(zil_commit_count); + + /* move the async itxs for the foid to the sync queues */ + zil_async_to_sync(zilog, foid); + + mutex_enter(&zilog->zl_lock); + mybatch = zilog->zl_next_batch; + while (zilog->zl_writer) { + cv_wait(&zilog->zl_cv_batch[mybatch & 1], &zilog->zl_lock); + if (mybatch <= zilog->zl_com_batch) { + mutex_exit(&zilog->zl_lock); + return; + } + } + + zilog->zl_next_batch++; + zilog->zl_writer = B_TRUE; + ZIL_STAT_BUMP(zil_commit_writer_count); + zil_commit_writer(zilog); + zilog->zl_com_batch = mybatch; + zilog->zl_writer = B_FALSE; + + /* wake up one thread to become the next writer */ + cv_signal(&zilog->zl_cv_batch[(mybatch+1) & 1]); + + /* wake up all threads waiting for this batch to be committed */ + cv_broadcast(&zilog->zl_cv_batch[mybatch & 1]); + + mutex_exit(&zilog->zl_lock); +} + +/* + * Called in syncing context to free committed log blocks and update log header. + */ +void +zil_sync(zilog_t *zilog, dmu_tx_t *tx) +{ + zil_header_t *zh = zil_header_in_syncing_context(zilog); + uint64_t txg = dmu_tx_get_txg(tx); + spa_t *spa = zilog->zl_spa; + uint64_t *replayed_seq = &zilog->zl_replayed_seq[txg & TXG_MASK]; + lwb_t *lwb; + + /* + * We don't zero out zl_destroy_txg, so make sure we don't try + * to destroy it twice. + */ + if (spa_sync_pass(spa) != 1) + return; + + mutex_enter(&zilog->zl_lock); + + ASSERT(zilog->zl_stop_sync == 0); + + if (*replayed_seq != 0) { + ASSERT(zh->zh_replay_seq < *replayed_seq); + zh->zh_replay_seq = *replayed_seq; + *replayed_seq = 0; + } + + if (zilog->zl_destroy_txg == txg) { + blkptr_t blk = zh->zh_log; + + ASSERT(list_head(&zilog->zl_lwb_list) == NULL); + + bzero(zh, sizeof (zil_header_t)); + bzero(zilog->zl_replayed_seq, sizeof (zilog->zl_replayed_seq)); + + if (zilog->zl_keep_first) { + /* + * If this block was part of log chain that couldn't + * be claimed because a device was missing during + * zil_claim(), but that device later returns, + * then this block could erroneously appear valid. + * To guard against this, assign a new GUID to the new + * log chain so it doesn't matter what blk points to. + */ + zil_init_log_chain(zilog, &blk); + zh->zh_log = blk; + } + } + + while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { + zh->zh_log = lwb->lwb_blk; + if (lwb->lwb_buf != NULL || lwb->lwb_max_txg > txg) + break; + + ASSERT(lwb->lwb_zio == NULL); + + list_remove(&zilog->zl_lwb_list, lwb); + zio_free_zil(spa, txg, &lwb->lwb_blk); + kmem_cache_free(zil_lwb_cache, lwb); + + /* + * If we don't have anything left in the lwb list then + * we've had an allocation failure and we need to zero + * out the zil_header blkptr so that we don't end + * up freeing the same block twice. + */ + if (list_head(&zilog->zl_lwb_list) == NULL) + BP_ZERO(&zh->zh_log); + } + + /* + * Remove fastwrite on any blocks that have been pre-allocated for + * the next commit. This prevents fastwrite counter pollution by + * unused, long-lived LWBs. + */ + for (; lwb != NULL; lwb = list_next(&zilog->zl_lwb_list, lwb)) { + if (lwb->lwb_fastwrite && !lwb->lwb_zio) { + metaslab_fastwrite_unmark(zilog->zl_spa, &lwb->lwb_blk); + lwb->lwb_fastwrite = 0; + } + } + + mutex_exit(&zilog->zl_lock); +} + +void +zil_init(void) +{ + zil_lwb_cache = kmem_cache_create("zil_lwb_cache", + sizeof (struct lwb), 0, NULL, NULL, NULL, NULL, NULL, 0); + + zil_ksp = kstat_create("zfs", 0, "zil", "misc", + KSTAT_TYPE_NAMED, sizeof (zil_stats) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + if (zil_ksp != NULL) { + zil_ksp->ks_data = &zil_stats; + kstat_install(zil_ksp); + } +} + +void +zil_fini(void) +{ + kmem_cache_destroy(zil_lwb_cache); + + if (zil_ksp != NULL) { + kstat_delete(zil_ksp); + zil_ksp = NULL; + } +} + +void +zil_set_sync(zilog_t *zilog, uint64_t sync) +{ + zilog->zl_sync = sync; +} + +void +zil_set_logbias(zilog_t *zilog, uint64_t logbias) +{ + zilog->zl_logbias = logbias; +} + +zilog_t * +zil_alloc(objset_t *os, zil_header_t *zh_phys) +{ + zilog_t *zilog; + int i; + + zilog = kmem_zalloc(sizeof (zilog_t), KM_SLEEP); + + zilog->zl_header = zh_phys; + zilog->zl_os = os; + zilog->zl_spa = dmu_objset_spa(os); + zilog->zl_dmu_pool = dmu_objset_pool(os); + zilog->zl_destroy_txg = TXG_INITIAL - 1; + zilog->zl_logbias = dmu_objset_logbias(os); + zilog->zl_sync = dmu_objset_syncprop(os); + zilog->zl_next_batch = 1; + + mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); + + for (i = 0; i < TXG_SIZE; i++) { + mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, + MUTEX_DEFAULT, NULL); + } + + list_create(&zilog->zl_lwb_list, sizeof (lwb_t), + offsetof(lwb_t, lwb_node)); + + list_create(&zilog->zl_itx_commit_list, sizeof (itx_t), + offsetof(itx_t, itx_node)); + + mutex_init(&zilog->zl_vdev_lock, NULL, MUTEX_DEFAULT, NULL); + + avl_create(&zilog->zl_vdev_tree, zil_vdev_compare, + sizeof (zil_vdev_node_t), offsetof(zil_vdev_node_t, zv_node)); + + cv_init(&zilog->zl_cv_writer, NULL, CV_DEFAULT, NULL); + cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); + cv_init(&zilog->zl_cv_batch[0], NULL, CV_DEFAULT, NULL); + cv_init(&zilog->zl_cv_batch[1], NULL, CV_DEFAULT, NULL); + + return (zilog); +} + +void +zil_free(zilog_t *zilog) +{ + int i; + + zilog->zl_stop_sync = 1; + + ASSERT0(zilog->zl_suspend); + ASSERT0(zilog->zl_suspending); + + ASSERT(list_is_empty(&zilog->zl_lwb_list)); + list_destroy(&zilog->zl_lwb_list); + + avl_destroy(&zilog->zl_vdev_tree); + mutex_destroy(&zilog->zl_vdev_lock); + + ASSERT(list_is_empty(&zilog->zl_itx_commit_list)); + list_destroy(&zilog->zl_itx_commit_list); + + for (i = 0; i < TXG_SIZE; i++) { + /* + * It's possible for an itx to be generated that doesn't dirty + * a txg (e.g. ztest TX_TRUNCATE). So there's no zil_clean() + * callback to remove the entry. We remove those here. + * + * Also free up the ziltest itxs. + */ + if (zilog->zl_itxg[i].itxg_itxs) + zil_itxg_clean(zilog->zl_itxg[i].itxg_itxs); + mutex_destroy(&zilog->zl_itxg[i].itxg_lock); + } + + mutex_destroy(&zilog->zl_lock); + + cv_destroy(&zilog->zl_cv_writer); + cv_destroy(&zilog->zl_cv_suspend); + cv_destroy(&zilog->zl_cv_batch[0]); + cv_destroy(&zilog->zl_cv_batch[1]); + + kmem_free(zilog, sizeof (zilog_t)); +} + +/* + * Open an intent log. + */ +zilog_t * +zil_open(objset_t *os, zil_get_data_t *get_data) +{ + zilog_t *zilog = dmu_objset_zil(os); + + ASSERT(zilog->zl_clean_taskq == NULL); + ASSERT(zilog->zl_get_data == NULL); + ASSERT(list_is_empty(&zilog->zl_lwb_list)); + + zilog->zl_get_data = get_data; + zilog->zl_clean_taskq = taskq_create("zil_clean", 1, defclsyspri, + 2, 2, TASKQ_PREPOPULATE); + + return (zilog); +} + +/* + * Close an intent log. + */ +void +zil_close(zilog_t *zilog) +{ + lwb_t *lwb; + uint64_t txg = 0; + + zil_commit(zilog, 0); /* commit all itx */ + + /* + * The lwb_max_txg for the stubby lwb will reflect the last activity + * for the zil. After a txg_wait_synced() on the txg we know all the + * callbacks have occurred that may clean the zil. Only then can we + * destroy the zl_clean_taskq. + */ + mutex_enter(&zilog->zl_lock); + lwb = list_tail(&zilog->zl_lwb_list); + if (lwb != NULL) + txg = lwb->lwb_max_txg; + mutex_exit(&zilog->zl_lock); + if (txg) + txg_wait_synced(zilog->zl_dmu_pool, txg); + + if (zilog_is_dirty(zilog)) + zfs_dbgmsg("zil (%p) is dirty, txg %llu", zilog, txg); + if (txg < spa_freeze_txg(zilog->zl_spa)) + VERIFY(!zilog_is_dirty(zilog)); + + taskq_destroy(zilog->zl_clean_taskq); + zilog->zl_clean_taskq = NULL; + zilog->zl_get_data = NULL; + + /* + * We should have only one LWB left on the list; remove it now. + */ + mutex_enter(&zilog->zl_lock); + lwb = list_head(&zilog->zl_lwb_list); + if (lwb != NULL) { + ASSERT(lwb == list_tail(&zilog->zl_lwb_list)); + ASSERT(lwb->lwb_zio == NULL); + if (lwb->lwb_fastwrite) + metaslab_fastwrite_unmark(zilog->zl_spa, &lwb->lwb_blk); + list_remove(&zilog->zl_lwb_list, lwb); + zio_buf_free(lwb->lwb_buf, lwb->lwb_sz); + kmem_cache_free(zil_lwb_cache, lwb); + } + mutex_exit(&zilog->zl_lock); +} + +static char *suspend_tag = "zil suspending"; + +/* + * Suspend an intent log. While in suspended mode, we still honor + * synchronous semantics, but we rely on txg_wait_synced() to do it. + * On old version pools, we suspend the log briefly when taking a + * snapshot so that it will have an empty intent log. + * + * Long holds are not really intended to be used the way we do here -- + * held for such a short time. A concurrent caller of dsl_dataset_long_held() + * could fail. Therefore we take pains to only put a long hold if it is + * actually necessary. Fortunately, it will only be necessary if the + * objset is currently mounted (or the ZVOL equivalent). In that case it + * will already have a long hold, so we are not really making things any worse. + * + * Ideally, we would locate the existing long-holder (i.e. the zfsvfs_t or + * zvol_state_t), and use their mechanism to prevent their hold from being + * dropped (e.g. VFS_HOLD()). However, that would be even more pain for + * very little gain. + * + * if cookiep == NULL, this does both the suspend & resume. + * Otherwise, it returns with the dataset "long held", and the cookie + * should be passed into zil_resume(). + */ +int +zil_suspend(const char *osname, void **cookiep) +{ + objset_t *os; + zilog_t *zilog; + const zil_header_t *zh; + int error; + + error = dmu_objset_hold(osname, suspend_tag, &os); + if (error != 0) + return (error); + zilog = dmu_objset_zil(os); + + mutex_enter(&zilog->zl_lock); + zh = zilog->zl_header; + + if (zh->zh_flags & ZIL_REPLAY_NEEDED) { /* unplayed log */ + mutex_exit(&zilog->zl_lock); + dmu_objset_rele(os, suspend_tag); + return (SET_ERROR(EBUSY)); + } + + /* + * Don't put a long hold in the cases where we can avoid it. This + * is when there is no cookie so we are doing a suspend & resume + * (i.e. called from zil_vdev_offline()), and there's nothing to do + * for the suspend because it's already suspended, or there's no ZIL. + */ + if (cookiep == NULL && !zilog->zl_suspending && + (zilog->zl_suspend > 0 || BP_IS_HOLE(&zh->zh_log))) { + mutex_exit(&zilog->zl_lock); + dmu_objset_rele(os, suspend_tag); + return (0); + } + + dsl_dataset_long_hold(dmu_objset_ds(os), suspend_tag); + dsl_pool_rele(dmu_objset_pool(os), suspend_tag); + + zilog->zl_suspend++; + + if (zilog->zl_suspend > 1) { + /* + * Someone else is already suspending it. + * Just wait for them to finish. + */ + + while (zilog->zl_suspending) + cv_wait(&zilog->zl_cv_suspend, &zilog->zl_lock); + mutex_exit(&zilog->zl_lock); + + if (cookiep == NULL) + zil_resume(os); + else + *cookiep = os; + return (0); + } + + /* + * If there is no pointer to an on-disk block, this ZIL must not + * be active (e.g. filesystem not mounted), so there's nothing + * to clean up. + */ + if (BP_IS_HOLE(&zh->zh_log)) { + ASSERT(cookiep != NULL); /* fast path already handled */ + + *cookiep = os; + mutex_exit(&zilog->zl_lock); + return (0); + } + + zilog->zl_suspending = B_TRUE; + mutex_exit(&zilog->zl_lock); + + zil_commit(zilog, 0); + + zil_destroy(zilog, B_FALSE); + + mutex_enter(&zilog->zl_lock); + zilog->zl_suspending = B_FALSE; + cv_broadcast(&zilog->zl_cv_suspend); + mutex_exit(&zilog->zl_lock); + + if (cookiep == NULL) + zil_resume(os); + else + *cookiep = os; + return (0); +} + +void +zil_resume(void *cookie) +{ + objset_t *os = cookie; + zilog_t *zilog = dmu_objset_zil(os); + + mutex_enter(&zilog->zl_lock); + ASSERT(zilog->zl_suspend != 0); + zilog->zl_suspend--; + mutex_exit(&zilog->zl_lock); + dsl_dataset_long_rele(dmu_objset_ds(os), suspend_tag); + dsl_dataset_rele(dmu_objset_ds(os), suspend_tag); +} + +typedef struct zil_replay_arg { + zil_replay_func_t *zr_replay; + void *zr_arg; + boolean_t zr_byteswap; + char *zr_lr; +} zil_replay_arg_t; + +static int +zil_replay_error(zilog_t *zilog, lr_t *lr, int error) +{ + char name[ZFS_MAX_DATASET_NAME_LEN]; + + zilog->zl_replaying_seq--; /* didn't actually replay this one */ + + dmu_objset_name(zilog->zl_os, name); + + cmn_err(CE_WARN, "ZFS replay transaction error %d, " + "dataset %s, seq 0x%llx, txtype %llu %s\n", error, name, + (u_longlong_t)lr->lrc_seq, + (u_longlong_t)(lr->lrc_txtype & ~TX_CI), + (lr->lrc_txtype & TX_CI) ? "CI" : ""); + + return (error); +} + +static int +zil_replay_log_record(zilog_t *zilog, lr_t *lr, void *zra, uint64_t claim_txg) +{ + zil_replay_arg_t *zr = zra; + const zil_header_t *zh = zilog->zl_header; + uint64_t reclen = lr->lrc_reclen; + uint64_t txtype = lr->lrc_txtype; + int error = 0; + + zilog->zl_replaying_seq = lr->lrc_seq; + + if (lr->lrc_seq <= zh->zh_replay_seq) /* already replayed */ + return (0); + + if (lr->lrc_txg < claim_txg) /* already committed */ + return (0); + + /* Strip case-insensitive bit, still present in log record */ + txtype &= ~TX_CI; + + if (txtype == 0 || txtype >= TX_MAX_TYPE) + return (zil_replay_error(zilog, lr, EINVAL)); + + /* + * If this record type can be logged out of order, the object + * (lr_foid) may no longer exist. That's legitimate, not an error. + */ + if (TX_OOO(txtype)) { + error = dmu_object_info(zilog->zl_os, + LR_FOID_GET_OBJ(((lr_ooo_t *)lr)->lr_foid), NULL); + if (error == ENOENT || error == EEXIST) + return (0); + } + + /* + * Make a copy of the data so we can revise and extend it. + */ + bcopy(lr, zr->zr_lr, reclen); + + /* + * If this is a TX_WRITE with a blkptr, suck in the data. + */ + if (txtype == TX_WRITE && reclen == sizeof (lr_write_t)) { + error = zil_read_log_data(zilog, (lr_write_t *)lr, + zr->zr_lr + reclen); + if (error != 0) + return (zil_replay_error(zilog, lr, error)); + } + + /* + * The log block containing this lr may have been byteswapped + * so that we can easily examine common fields like lrc_txtype. + * However, the log is a mix of different record types, and only the + * replay vectors know how to byteswap their records. Therefore, if + * the lr was byteswapped, undo it before invoking the replay vector. + */ + if (zr->zr_byteswap) + byteswap_uint64_array(zr->zr_lr, reclen); + + /* + * We must now do two things atomically: replay this log record, + * and update the log header sequence number to reflect the fact that + * we did so. At the end of each replay function the sequence number + * is updated if we are in replay mode. + */ + error = zr->zr_replay[txtype](zr->zr_arg, zr->zr_lr, zr->zr_byteswap); + if (error != 0) { + /* + * The DMU's dnode layer doesn't see removes until the txg + * commits, so a subsequent claim can spuriously fail with + * EEXIST. So if we receive any error we try syncing out + * any removes then retry the transaction. Note that we + * specify B_FALSE for byteswap now, so we don't do it twice. + */ + txg_wait_synced(spa_get_dsl(zilog->zl_spa), 0); + error = zr->zr_replay[txtype](zr->zr_arg, zr->zr_lr, B_FALSE); + if (error != 0) + return (zil_replay_error(zilog, lr, error)); + } + return (0); +} + +/* ARGSUSED */ +static int +zil_incr_blks(zilog_t *zilog, blkptr_t *bp, void *arg, uint64_t claim_txg) +{ + zilog->zl_replay_blks++; + + return (0); +} + +/* + * If this dataset has a non-empty intent log, replay it and destroy it. + */ +void +zil_replay(objset_t *os, void *arg, zil_replay_func_t replay_func[TX_MAX_TYPE]) +{ + zilog_t *zilog = dmu_objset_zil(os); + const zil_header_t *zh = zilog->zl_header; + zil_replay_arg_t zr; + + if ((zh->zh_flags & ZIL_REPLAY_NEEDED) == 0) { + zil_destroy(zilog, B_TRUE); + return; + } + + zr.zr_replay = replay_func; + zr.zr_arg = arg; + zr.zr_byteswap = BP_SHOULD_BYTESWAP(&zh->zh_log); + zr.zr_lr = vmem_alloc(2 * SPA_MAXBLOCKSIZE, KM_SLEEP); + + /* + * Wait for in-progress removes to sync before starting replay. + */ + txg_wait_synced(zilog->zl_dmu_pool, 0); + + zilog->zl_replay = B_TRUE; + zilog->zl_replay_time = ddi_get_lbolt(); + ASSERT(zilog->zl_replay_blks == 0); + (void) zil_parse(zilog, zil_incr_blks, zil_replay_log_record, &zr, + zh->zh_claim_txg); + vmem_free(zr.zr_lr, 2 * SPA_MAXBLOCKSIZE); + + zil_destroy(zilog, B_FALSE); + txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); + zilog->zl_replay = B_FALSE; +} + +boolean_t +zil_replaying(zilog_t *zilog, dmu_tx_t *tx) +{ + if (zilog->zl_sync == ZFS_SYNC_DISABLED) + return (B_TRUE); + + if (zilog->zl_replay) { + dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); + zilog->zl_replayed_seq[dmu_tx_get_txg(tx) & TXG_MASK] = + zilog->zl_replaying_seq; + return (B_TRUE); + } + + return (B_FALSE); +} + +/* ARGSUSED */ +int +zil_vdev_offline(const char *osname, void *arg) +{ + int error; + + error = zil_suspend(osname, NULL); + if (error != 0) + return (SET_ERROR(EEXIST)); + return (0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zil_alloc); +EXPORT_SYMBOL(zil_free); +EXPORT_SYMBOL(zil_open); +EXPORT_SYMBOL(zil_close); +EXPORT_SYMBOL(zil_replay); +EXPORT_SYMBOL(zil_replaying); +EXPORT_SYMBOL(zil_destroy); +EXPORT_SYMBOL(zil_destroy_sync); +EXPORT_SYMBOL(zil_itx_create); +EXPORT_SYMBOL(zil_itx_destroy); +EXPORT_SYMBOL(zil_itx_assign); +EXPORT_SYMBOL(zil_commit); +EXPORT_SYMBOL(zil_vdev_offline); +EXPORT_SYMBOL(zil_claim); +EXPORT_SYMBOL(zil_check_log_chain); +EXPORT_SYMBOL(zil_sync); +EXPORT_SYMBOL(zil_clean); +EXPORT_SYMBOL(zil_suspend); +EXPORT_SYMBOL(zil_resume); +EXPORT_SYMBOL(zil_add_block); +EXPORT_SYMBOL(zil_bp_tree_add); +EXPORT_SYMBOL(zil_set_sync); +EXPORT_SYMBOL(zil_set_logbias); + +/* BEGIN CSTYLED */ +module_param(zil_replay_disable, int, 0644); +MODULE_PARM_DESC(zil_replay_disable, "Disable intent logging replay"); + +module_param(zfs_nocacheflush, int, 0644); +MODULE_PARM_DESC(zfs_nocacheflush, "Disable cache flushes"); + +module_param(zil_slog_bulk, ulong, 0644); +MODULE_PARM_DESC(zil_slog_bulk, "Limit in bytes slog sync writes per commit"); +/* END CSTYLED */ +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zio.c +++ linux-aws-4.15.0/zfs/module/zfs/zio.c @@ -0,0 +1,4222 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017 by Delphix. All rights reserved. + * Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ========================================================================== + * I/O type descriptions + * ========================================================================== + */ +const char *zio_type_name[ZIO_TYPES] = { + /* + * Note: Linux kernel thread name length is limited + * so these names will differ from upstream open zfs. + */ + "z_null", "z_rd", "z_wr", "z_fr", "z_cl", "z_ioctl" +}; + +int zio_dva_throttle_enabled = B_TRUE; + +/* + * ========================================================================== + * I/O kmem caches + * ========================================================================== + */ +kmem_cache_t *zio_cache; +kmem_cache_t *zio_link_cache; +kmem_cache_t *zio_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; +kmem_cache_t *zio_data_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; +#if defined(ZFS_DEBUG) && !defined(_KERNEL) +uint64_t zio_buf_cache_allocs[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; +uint64_t zio_buf_cache_frees[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; +#endif + +int zio_delay_max = ZIO_DELAY_MAX; + +#define ZIO_PIPELINE_CONTINUE 0x100 +#define ZIO_PIPELINE_STOP 0x101 + +#define BP_SPANB(indblkshift, level) \ + (((uint64_t)1) << ((level) * ((indblkshift) - SPA_BLKPTRSHIFT))) +#define COMPARE_META_LEVEL 0x80000000ul +/* + * The following actions directly effect the spa's sync-to-convergence logic. + * The values below define the sync pass when we start performing the action. + * Care should be taken when changing these values as they directly impact + * spa_sync() performance. Tuning these values may introduce subtle performance + * pathologies and should only be done in the context of performance analysis. + * These tunables will eventually be removed and replaced with #defines once + * enough analysis has been done to determine optimal values. + * + * The 'zfs_sync_pass_deferred_free' pass must be greater than 1 to ensure that + * regular blocks are not deferred. + */ +int zfs_sync_pass_deferred_free = 2; /* defer frees starting in this pass */ +int zfs_sync_pass_dont_compress = 5; /* don't compress starting in this pass */ +int zfs_sync_pass_rewrite = 2; /* rewrite new bps starting in this pass */ + +/* + * An allocating zio is one that either currently has the DVA allocate + * stage set or will have it later in its lifetime. + */ +#define IO_IS_ALLOCATING(zio) ((zio)->io_orig_pipeline & ZIO_STAGE_DVA_ALLOCATE) + +int zio_requeue_io_start_cut_in_line = 1; + +#ifdef ZFS_DEBUG +int zio_buf_debug_limit = 16384; +#else +int zio_buf_debug_limit = 0; +#endif + +static inline void __zio_execute(zio_t *zio); + +static void zio_taskq_dispatch(zio_t *, zio_taskq_type_t, boolean_t); + +void +zio_init(void) +{ + size_t c; + vmem_t *data_alloc_arena = NULL; + + zio_cache = kmem_cache_create("zio_cache", + sizeof (zio_t), 0, NULL, NULL, NULL, NULL, NULL, 0); + zio_link_cache = kmem_cache_create("zio_link_cache", + sizeof (zio_link_t), 0, NULL, NULL, NULL, NULL, NULL, 0); + + /* + * For small buffers, we want a cache for each multiple of + * SPA_MINBLOCKSIZE. For larger buffers, we want a cache + * for each quarter-power of 2. + */ + for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) { + size_t size = (c + 1) << SPA_MINBLOCKSHIFT; + size_t p2 = size; + size_t align = 0; + size_t cflags = (size > zio_buf_debug_limit) ? KMC_NODEBUG : 0; + +#if defined(_ILP32) && defined(_KERNEL) + /* + * Cache size limited to 1M on 32-bit platforms until ARC + * buffers no longer require virtual address space. + */ + if (size > zfs_max_recordsize) + break; +#endif + + while (!ISP2(p2)) + p2 &= p2 - 1; + +#ifndef _KERNEL + /* + * If we are using watchpoints, put each buffer on its own page, + * to eliminate the performance overhead of trapping to the + * kernel when modifying a non-watched buffer that shares the + * page with a watched buffer. + */ + if (arc_watch && !IS_P2ALIGNED(size, PAGESIZE)) + continue; + /* + * Here's the problem - on 4K native devices in userland on + * Linux using O_DIRECT, buffers must be 4K aligned or I/O + * will fail with EINVAL, causing zdb (and others) to coredump. + * Since userland probably doesn't need optimized buffer caches, + * we just force 4K alignment on everything. + */ + align = 8 * SPA_MINBLOCKSIZE; +#else + if (size < PAGESIZE) { + align = SPA_MINBLOCKSIZE; + } else if (IS_P2ALIGNED(size, p2 >> 2)) { + align = PAGESIZE; + } +#endif + + if (align != 0) { + char name[36]; + (void) sprintf(name, "zio_buf_%lu", (ulong_t)size); + zio_buf_cache[c] = kmem_cache_create(name, size, + align, NULL, NULL, NULL, NULL, NULL, cflags); + + (void) sprintf(name, "zio_data_buf_%lu", (ulong_t)size); + zio_data_buf_cache[c] = kmem_cache_create(name, size, + align, NULL, NULL, NULL, NULL, + data_alloc_arena, cflags); + } + } + + while (--c != 0) { + ASSERT(zio_buf_cache[c] != NULL); + if (zio_buf_cache[c - 1] == NULL) + zio_buf_cache[c - 1] = zio_buf_cache[c]; + + ASSERT(zio_data_buf_cache[c] != NULL); + if (zio_data_buf_cache[c - 1] == NULL) + zio_data_buf_cache[c - 1] = zio_data_buf_cache[c]; + } + + zio_inject_init(); + + lz4_init(); +} + +void +zio_fini(void) +{ + size_t c; + kmem_cache_t *last_cache = NULL; + kmem_cache_t *last_data_cache = NULL; + + for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) { +#ifdef _ILP32 + /* + * Cache size limited to 1M on 32-bit platforms until ARC + * buffers no longer require virtual address space. + */ + if (((c + 1) << SPA_MINBLOCKSHIFT) > zfs_max_recordsize) + break; +#endif +#if defined(ZFS_DEBUG) && !defined(_KERNEL) + if (zio_buf_cache_allocs[c] != zio_buf_cache_frees[c]) + (void) printf("zio_fini: [%d] %llu != %llu\n", + (int)((c + 1) << SPA_MINBLOCKSHIFT), + (long long unsigned)zio_buf_cache_allocs[c], + (long long unsigned)zio_buf_cache_frees[c]); +#endif + if (zio_buf_cache[c] != last_cache) { + last_cache = zio_buf_cache[c]; + kmem_cache_destroy(zio_buf_cache[c]); + } + zio_buf_cache[c] = NULL; + + if (zio_data_buf_cache[c] != last_data_cache) { + last_data_cache = zio_data_buf_cache[c]; + kmem_cache_destroy(zio_data_buf_cache[c]); + } + zio_data_buf_cache[c] = NULL; + } + + kmem_cache_destroy(zio_link_cache); + kmem_cache_destroy(zio_cache); + + zio_inject_fini(); + + lz4_fini(); +} + +/* + * ========================================================================== + * Allocate and free I/O buffers + * ========================================================================== + */ + +/* + * Use zio_buf_alloc to allocate ZFS metadata. This data will appear in a + * crashdump if the kernel panics, so use it judiciously. Obviously, it's + * useful to inspect ZFS metadata, but if possible, we should avoid keeping + * excess / transient data in-core during a crashdump. + */ +void * +zio_buf_alloc(size_t size) +{ + size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; + + VERIFY3U(c, <, SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); +#if defined(ZFS_DEBUG) && !defined(_KERNEL) + atomic_add_64(&zio_buf_cache_allocs[c], 1); +#endif + + return (kmem_cache_alloc(zio_buf_cache[c], KM_PUSHPAGE)); +} + +/* + * Use zio_data_buf_alloc to allocate data. The data will not appear in a + * crashdump if the kernel panics. This exists so that we will limit the amount + * of ZFS data that shows up in a kernel crashdump. (Thus reducing the amount + * of kernel heap dumped to disk when the kernel panics) + */ +void * +zio_data_buf_alloc(size_t size) +{ + size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; + + VERIFY3U(c, <, SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); + + return (kmem_cache_alloc(zio_data_buf_cache[c], KM_PUSHPAGE)); +} + +void +zio_buf_free(void *buf, size_t size) +{ + size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; + + VERIFY3U(c, <, SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); +#if defined(ZFS_DEBUG) && !defined(_KERNEL) + atomic_add_64(&zio_buf_cache_frees[c], 1); +#endif + + kmem_cache_free(zio_buf_cache[c], buf); +} + +void +zio_data_buf_free(void *buf, size_t size) +{ + size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; + + VERIFY3U(c, <, SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); + + kmem_cache_free(zio_data_buf_cache[c], buf); +} + +static void +zio_abd_free(void *abd, size_t size) +{ + abd_free((abd_t *)abd); +} + +/* + * ========================================================================== + * Push and pop I/O transform buffers + * ========================================================================== + */ +void +zio_push_transform(zio_t *zio, abd_t *data, uint64_t size, uint64_t bufsize, + zio_transform_func_t *transform) +{ + zio_transform_t *zt = kmem_alloc(sizeof (zio_transform_t), KM_SLEEP); + + /* + * Ensure that anyone expecting this zio to contain a linear ABD isn't + * going to get a nasty surprise when they try to access the data. + */ + IMPLY(abd_is_linear(zio->io_abd), abd_is_linear(data)); + + zt->zt_orig_abd = zio->io_abd; + zt->zt_orig_size = zio->io_size; + zt->zt_bufsize = bufsize; + zt->zt_transform = transform; + + zt->zt_next = zio->io_transform_stack; + zio->io_transform_stack = zt; + + zio->io_abd = data; + zio->io_size = size; +} + +void +zio_pop_transforms(zio_t *zio) +{ + zio_transform_t *zt; + + while ((zt = zio->io_transform_stack) != NULL) { + if (zt->zt_transform != NULL) + zt->zt_transform(zio, + zt->zt_orig_abd, zt->zt_orig_size); + + if (zt->zt_bufsize != 0) + abd_free(zio->io_abd); + + zio->io_abd = zt->zt_orig_abd; + zio->io_size = zt->zt_orig_size; + zio->io_transform_stack = zt->zt_next; + + kmem_free(zt, sizeof (zio_transform_t)); + } +} + +/* + * ========================================================================== + * I/O transform callbacks for subblocks and decompression + * ========================================================================== + */ +static void +zio_subblock(zio_t *zio, abd_t *data, uint64_t size) +{ + ASSERT(zio->io_size > size); + + if (zio->io_type == ZIO_TYPE_READ) + abd_copy(data, zio->io_abd, size); +} + +static void +zio_decompress(zio_t *zio, abd_t *data, uint64_t size) +{ + if (zio->io_error == 0) { + void *tmp = abd_borrow_buf(data, size); + int ret = zio_decompress_data(BP_GET_COMPRESS(zio->io_bp), + zio->io_abd, tmp, zio->io_size, size); + abd_return_buf_copy(data, tmp, size); + + if (ret != 0) + zio->io_error = SET_ERROR(EIO); + } +} + +/* + * ========================================================================== + * I/O parent/child relationships and pipeline interlocks + * ========================================================================== + */ +zio_t * +zio_walk_parents(zio_t *cio, zio_link_t **zl) +{ + list_t *pl = &cio->io_parent_list; + + *zl = (*zl == NULL) ? list_head(pl) : list_next(pl, *zl); + if (*zl == NULL) + return (NULL); + + ASSERT((*zl)->zl_child == cio); + return ((*zl)->zl_parent); +} + +zio_t * +zio_walk_children(zio_t *pio, zio_link_t **zl) +{ + list_t *cl = &pio->io_child_list; + + *zl = (*zl == NULL) ? list_head(cl) : list_next(cl, *zl); + if (*zl == NULL) + return (NULL); + + ASSERT((*zl)->zl_parent == pio); + return ((*zl)->zl_child); +} + +zio_t * +zio_unique_parent(zio_t *cio) +{ + zio_link_t *zl = NULL; + zio_t *pio = zio_walk_parents(cio, &zl); + + VERIFY3P(zio_walk_parents(cio, &zl), ==, NULL); + return (pio); +} + +void +zio_add_child(zio_t *pio, zio_t *cio) +{ + zio_link_t *zl = kmem_cache_alloc(zio_link_cache, KM_SLEEP); + int w; + + /* + * Logical I/Os can have logical, gang, or vdev children. + * Gang I/Os can have gang or vdev children. + * Vdev I/Os can only have vdev children. + * The following ASSERT captures all of these constraints. + */ + ASSERT(cio->io_child_type <= pio->io_child_type); + + zl->zl_parent = pio; + zl->zl_child = cio; + + mutex_enter(&cio->io_lock); + mutex_enter(&pio->io_lock); + + ASSERT(pio->io_state[ZIO_WAIT_DONE] == 0); + + for (w = 0; w < ZIO_WAIT_TYPES; w++) + pio->io_children[cio->io_child_type][w] += !cio->io_state[w]; + + list_insert_head(&pio->io_child_list, zl); + list_insert_head(&cio->io_parent_list, zl); + + pio->io_child_count++; + cio->io_parent_count++; + + mutex_exit(&pio->io_lock); + mutex_exit(&cio->io_lock); +} + +static void +zio_remove_child(zio_t *pio, zio_t *cio, zio_link_t *zl) +{ + ASSERT(zl->zl_parent == pio); + ASSERT(zl->zl_child == cio); + + mutex_enter(&cio->io_lock); + mutex_enter(&pio->io_lock); + + list_remove(&pio->io_child_list, zl); + list_remove(&cio->io_parent_list, zl); + + pio->io_child_count--; + cio->io_parent_count--; + + mutex_exit(&pio->io_lock); + mutex_exit(&cio->io_lock); + kmem_cache_free(zio_link_cache, zl); +} + +static boolean_t +zio_wait_for_children(zio_t *zio, enum zio_child child, enum zio_wait_type wait) +{ + uint64_t *countp = &zio->io_children[child][wait]; + boolean_t waiting = B_FALSE; + + mutex_enter(&zio->io_lock); + ASSERT(zio->io_stall == NULL); + if (*countp != 0) { + zio->io_stage >>= 1; + ASSERT3U(zio->io_stage, !=, ZIO_STAGE_OPEN); + zio->io_stall = countp; + waiting = B_TRUE; + } + mutex_exit(&zio->io_lock); + + return (waiting); +} + +__attribute__((always_inline)) +static inline void +zio_notify_parent(zio_t *pio, zio_t *zio, enum zio_wait_type wait) +{ + uint64_t *countp = &pio->io_children[zio->io_child_type][wait]; + int *errorp = &pio->io_child_error[zio->io_child_type]; + + mutex_enter(&pio->io_lock); + if (zio->io_error && !(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE)) + *errorp = zio_worst_error(*errorp, zio->io_error); + pio->io_reexecute |= zio->io_reexecute; + ASSERT3U(*countp, >, 0); + + (*countp)--; + + if (*countp == 0 && pio->io_stall == countp) { + zio_taskq_type_t type = + pio->io_stage < ZIO_STAGE_VDEV_IO_START ? ZIO_TASKQ_ISSUE : + ZIO_TASKQ_INTERRUPT; + pio->io_stall = NULL; + mutex_exit(&pio->io_lock); + /* + * Dispatch the parent zio in its own taskq so that + * the child can continue to make progress. This also + * prevents overflowing the stack when we have deeply nested + * parent-child relationships. + */ + zio_taskq_dispatch(pio, type, B_FALSE); + } else { + mutex_exit(&pio->io_lock); + } +} + +static void +zio_inherit_child_errors(zio_t *zio, enum zio_child c) +{ + if (zio->io_child_error[c] != 0 && zio->io_error == 0) + zio->io_error = zio->io_child_error[c]; +} + +int +zio_bookmark_compare(const void *x1, const void *x2) +{ + const zio_t *z1 = x1; + const zio_t *z2 = x2; + + if (z1->io_bookmark.zb_objset < z2->io_bookmark.zb_objset) + return (-1); + if (z1->io_bookmark.zb_objset > z2->io_bookmark.zb_objset) + return (1); + + if (z1->io_bookmark.zb_object < z2->io_bookmark.zb_object) + return (-1); + if (z1->io_bookmark.zb_object > z2->io_bookmark.zb_object) + return (1); + + if (z1->io_bookmark.zb_level < z2->io_bookmark.zb_level) + return (-1); + if (z1->io_bookmark.zb_level > z2->io_bookmark.zb_level) + return (1); + + if (z1->io_bookmark.zb_blkid < z2->io_bookmark.zb_blkid) + return (-1); + if (z1->io_bookmark.zb_blkid > z2->io_bookmark.zb_blkid) + return (1); + + if (z1 < z2) + return (-1); + if (z1 > z2) + return (1); + + return (0); +} + +/* + * ========================================================================== + * Create the various types of I/O (read, write, free, etc) + * ========================================================================== + */ +static zio_t * +zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, + abd_t *data, uint64_t lsize, uint64_t psize, zio_done_func_t *done, + void *private, zio_type_t type, zio_priority_t priority, + enum zio_flag flags, vdev_t *vd, uint64_t offset, + const zbookmark_phys_t *zb, enum zio_stage stage, + enum zio_stage pipeline) +{ + zio_t *zio; + + ASSERT3U(psize, <=, SPA_MAXBLOCKSIZE); + ASSERT(P2PHASE(psize, SPA_MINBLOCKSIZE) == 0); + ASSERT(P2PHASE(offset, SPA_MINBLOCKSIZE) == 0); + + ASSERT(!vd || spa_config_held(spa, SCL_STATE_ALL, RW_READER)); + ASSERT(!bp || !(flags & ZIO_FLAG_CONFIG_WRITER)); + ASSERT(vd || stage == ZIO_STAGE_OPEN); + + IMPLY(lsize != psize, (flags & ZIO_FLAG_RAW) != 0); + + zio = kmem_cache_alloc(zio_cache, KM_SLEEP); + bzero(zio, sizeof (zio_t)); + + mutex_init(&zio->io_lock, NULL, MUTEX_NOLOCKDEP, NULL); + cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL); + + list_create(&zio->io_parent_list, sizeof (zio_link_t), + offsetof(zio_link_t, zl_parent_node)); + list_create(&zio->io_child_list, sizeof (zio_link_t), + offsetof(zio_link_t, zl_child_node)); + metaslab_trace_init(&zio->io_alloc_list); + + if (vd != NULL) + zio->io_child_type = ZIO_CHILD_VDEV; + else if (flags & ZIO_FLAG_GANG_CHILD) + zio->io_child_type = ZIO_CHILD_GANG; + else if (flags & ZIO_FLAG_DDT_CHILD) + zio->io_child_type = ZIO_CHILD_DDT; + else + zio->io_child_type = ZIO_CHILD_LOGICAL; + + if (bp != NULL) { + zio->io_bp = (blkptr_t *)bp; + zio->io_bp_copy = *bp; + zio->io_bp_orig = *bp; + if (type != ZIO_TYPE_WRITE || + zio->io_child_type == ZIO_CHILD_DDT) + zio->io_bp = &zio->io_bp_copy; /* so caller can free */ + if (zio->io_child_type == ZIO_CHILD_LOGICAL) + zio->io_logical = zio; + if (zio->io_child_type > ZIO_CHILD_GANG && BP_IS_GANG(bp)) + pipeline |= ZIO_GANG_STAGES; + } + + zio->io_spa = spa; + zio->io_txg = txg; + zio->io_done = done; + zio->io_private = private; + zio->io_type = type; + zio->io_priority = priority; + zio->io_vd = vd; + zio->io_offset = offset; + zio->io_orig_abd = zio->io_abd = data; + zio->io_orig_size = zio->io_size = psize; + zio->io_lsize = lsize; + zio->io_orig_flags = zio->io_flags = flags; + zio->io_orig_stage = zio->io_stage = stage; + zio->io_orig_pipeline = zio->io_pipeline = pipeline; + zio->io_pipeline_trace = ZIO_STAGE_OPEN; + + zio->io_state[ZIO_WAIT_READY] = (stage >= ZIO_STAGE_READY); + zio->io_state[ZIO_WAIT_DONE] = (stage >= ZIO_STAGE_DONE); + + if (zb != NULL) + zio->io_bookmark = *zb; + + if (pio != NULL) { + if (zio->io_logical == NULL) + zio->io_logical = pio->io_logical; + if (zio->io_child_type == ZIO_CHILD_GANG) + zio->io_gang_leader = pio->io_gang_leader; + zio_add_child(pio, zio); + } + + taskq_init_ent(&zio->io_tqent); + + return (zio); +} + +static void +zio_destroy(zio_t *zio) +{ + metaslab_trace_fini(&zio->io_alloc_list); + list_destroy(&zio->io_parent_list); + list_destroy(&zio->io_child_list); + mutex_destroy(&zio->io_lock); + cv_destroy(&zio->io_cv); + kmem_cache_free(zio_cache, zio); +} + +zio_t * +zio_null(zio_t *pio, spa_t *spa, vdev_t *vd, zio_done_func_t *done, + void *private, enum zio_flag flags) +{ + zio_t *zio; + + zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private, + ZIO_TYPE_NULL, ZIO_PRIORITY_NOW, flags, vd, 0, NULL, + ZIO_STAGE_OPEN, ZIO_INTERLOCK_PIPELINE); + + return (zio); +} + +zio_t * +zio_root(spa_t *spa, zio_done_func_t *done, void *private, enum zio_flag flags) +{ + return (zio_null(NULL, spa, NULL, done, private, flags)); +} + +void +zfs_blkptr_verify(spa_t *spa, const blkptr_t *bp) +{ + int i; + + if (!DMU_OT_IS_VALID(BP_GET_TYPE(bp))) { + zfs_panic_recover("blkptr at %p has invalid TYPE %llu", + bp, (longlong_t)BP_GET_TYPE(bp)); + } + if (BP_GET_CHECKSUM(bp) >= ZIO_CHECKSUM_FUNCTIONS || + BP_GET_CHECKSUM(bp) <= ZIO_CHECKSUM_ON) { + zfs_panic_recover("blkptr at %p has invalid CHECKSUM %llu", + bp, (longlong_t)BP_GET_CHECKSUM(bp)); + } + if (BP_GET_COMPRESS(bp) >= ZIO_COMPRESS_FUNCTIONS || + BP_GET_COMPRESS(bp) <= ZIO_COMPRESS_ON) { + zfs_panic_recover("blkptr at %p has invalid COMPRESS %llu", + bp, (longlong_t)BP_GET_COMPRESS(bp)); + } + if (BP_GET_LSIZE(bp) > SPA_MAXBLOCKSIZE) { + zfs_panic_recover("blkptr at %p has invalid LSIZE %llu", + bp, (longlong_t)BP_GET_LSIZE(bp)); + } + if (BP_GET_PSIZE(bp) > SPA_MAXBLOCKSIZE) { + zfs_panic_recover("blkptr at %p has invalid PSIZE %llu", + bp, (longlong_t)BP_GET_PSIZE(bp)); + } + + if (BP_IS_EMBEDDED(bp)) { + if (BPE_GET_ETYPE(bp) > NUM_BP_EMBEDDED_TYPES) { + zfs_panic_recover("blkptr at %p has invalid ETYPE %llu", + bp, (longlong_t)BPE_GET_ETYPE(bp)); + } + } + + /* + * Pool-specific checks. + * + * Note: it would be nice to verify that the blk_birth and + * BP_PHYSICAL_BIRTH() are not too large. However, spa_freeze() + * allows the birth time of log blocks (and dmu_sync()-ed blocks + * that are in the log) to be arbitrarily large. + */ + for (i = 0; i < BP_GET_NDVAS(bp); i++) { + uint64_t vdevid = DVA_GET_VDEV(&bp->blk_dva[i]); + vdev_t *vd; + uint64_t offset, asize; + if (vdevid >= spa->spa_root_vdev->vdev_children) { + zfs_panic_recover("blkptr at %p DVA %u has invalid " + "VDEV %llu", + bp, i, (longlong_t)vdevid); + continue; + } + vd = spa->spa_root_vdev->vdev_child[vdevid]; + if (vd == NULL) { + zfs_panic_recover("blkptr at %p DVA %u has invalid " + "VDEV %llu", + bp, i, (longlong_t)vdevid); + continue; + } + if (vd->vdev_ops == &vdev_hole_ops) { + zfs_panic_recover("blkptr at %p DVA %u has hole " + "VDEV %llu", + bp, i, (longlong_t)vdevid); + continue; + } + if (vd->vdev_ops == &vdev_missing_ops) { + /* + * "missing" vdevs are valid during import, but we + * don't have their detailed info (e.g. asize), so + * we can't perform any more checks on them. + */ + continue; + } + offset = DVA_GET_OFFSET(&bp->blk_dva[i]); + asize = DVA_GET_ASIZE(&bp->blk_dva[i]); + if (BP_IS_GANG(bp)) + asize = vdev_psize_to_asize(vd, SPA_GANGBLOCKSIZE); + if (offset + asize > vd->vdev_asize) { + zfs_panic_recover("blkptr at %p DVA %u has invalid " + "OFFSET %llu", + bp, i, (longlong_t)offset); + } + } +} + +zio_t * +zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, + abd_t *data, uint64_t size, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, const zbookmark_phys_t *zb) +{ + zio_t *zio; + + zfs_blkptr_verify(spa, bp); + + zio = zio_create(pio, spa, BP_PHYSICAL_BIRTH(bp), bp, + data, size, size, done, private, + ZIO_TYPE_READ, priority, flags, NULL, 0, zb, + ZIO_STAGE_OPEN, (flags & ZIO_FLAG_DDT_CHILD) ? + ZIO_DDT_CHILD_READ_PIPELINE : ZIO_READ_PIPELINE); + + return (zio); +} + +zio_t * +zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, + abd_t *data, uint64_t lsize, uint64_t psize, const zio_prop_t *zp, + zio_done_func_t *ready, zio_done_func_t *children_ready, + zio_done_func_t *physdone, zio_done_func_t *done, + void *private, zio_priority_t priority, enum zio_flag flags, + const zbookmark_phys_t *zb) +{ + zio_t *zio; + + ASSERT(zp->zp_checksum >= ZIO_CHECKSUM_OFF && + zp->zp_checksum < ZIO_CHECKSUM_FUNCTIONS && + zp->zp_compress >= ZIO_COMPRESS_OFF && + zp->zp_compress < ZIO_COMPRESS_FUNCTIONS && + DMU_OT_IS_VALID(zp->zp_type) && + zp->zp_level < 32 && + zp->zp_copies > 0 && + zp->zp_copies <= spa_max_replication(spa)); + + zio = zio_create(pio, spa, txg, bp, data, lsize, psize, done, private, + ZIO_TYPE_WRITE, priority, flags, NULL, 0, zb, + ZIO_STAGE_OPEN, (flags & ZIO_FLAG_DDT_CHILD) ? + ZIO_DDT_CHILD_WRITE_PIPELINE : ZIO_WRITE_PIPELINE); + + zio->io_ready = ready; + zio->io_children_ready = children_ready; + zio->io_physdone = physdone; + zio->io_prop = *zp; + + /* + * Data can be NULL if we are going to call zio_write_override() to + * provide the already-allocated BP. But we may need the data to + * verify a dedup hit (if requested). In this case, don't try to + * dedup (just take the already-allocated BP verbatim). + */ + if (data == NULL && zio->io_prop.zp_dedup_verify) { + zio->io_prop.zp_dedup = zio->io_prop.zp_dedup_verify = B_FALSE; + } + + return (zio); +} + +zio_t * +zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, abd_t *data, + uint64_t size, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, zbookmark_phys_t *zb) +{ + zio_t *zio; + + zio = zio_create(pio, spa, txg, bp, data, size, size, done, private, + ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_IO_REWRITE, NULL, 0, zb, + ZIO_STAGE_OPEN, ZIO_REWRITE_PIPELINE); + + return (zio); +} + +void +zio_write_override(zio_t *zio, blkptr_t *bp, int copies, boolean_t nopwrite) +{ + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(zio->io_stage == ZIO_STAGE_OPEN); + ASSERT(zio->io_txg == spa_syncing_txg(zio->io_spa)); + + /* + * We must reset the io_prop to match the values that existed + * when the bp was first written by dmu_sync() keeping in mind + * that nopwrite and dedup are mutually exclusive. + */ + zio->io_prop.zp_dedup = nopwrite ? B_FALSE : zio->io_prop.zp_dedup; + zio->io_prop.zp_nopwrite = nopwrite; + zio->io_prop.zp_copies = copies; + zio->io_bp_override = bp; +} + +void +zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp) +{ + + /* + * The check for EMBEDDED is a performance optimization. We + * process the free here (by ignoring it) rather than + * putting it on the list and then processing it in zio_free_sync(). + */ + if (BP_IS_EMBEDDED(bp)) + return; + metaslab_check_free(spa, bp); + + /* + * Frees that are for the currently-syncing txg, are not going to be + * deferred, and which will not need to do a read (i.e. not GANG or + * DEDUP), can be processed immediately. Otherwise, put them on the + * in-memory list for later processing. + */ + if (BP_IS_GANG(bp) || BP_GET_DEDUP(bp) || + txg != spa->spa_syncing_txg || + spa_sync_pass(spa) >= zfs_sync_pass_deferred_free) { + bplist_append(&spa->spa_free_bplist[txg & TXG_MASK], bp); + } else { + VERIFY0(zio_wait(zio_free_sync(NULL, spa, txg, bp, 0))); + } +} + +zio_t * +zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, + enum zio_flag flags) +{ + zio_t *zio; + enum zio_stage stage = ZIO_FREE_PIPELINE; + + ASSERT(!BP_IS_HOLE(bp)); + ASSERT(spa_syncing_txg(spa) == txg); + ASSERT(spa_sync_pass(spa) < zfs_sync_pass_deferred_free); + + if (BP_IS_EMBEDDED(bp)) + return (zio_null(pio, spa, NULL, NULL, NULL, 0)); + + metaslab_check_free(spa, bp); + arc_freed(spa, bp); + + /* + * GANG and DEDUP blocks can induce a read (for the gang block header, + * or the DDT), so issue them asynchronously so that this thread is + * not tied up. + */ + if (BP_IS_GANG(bp) || BP_GET_DEDUP(bp)) + stage |= ZIO_STAGE_ISSUE_ASYNC; + + zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), + BP_GET_PSIZE(bp), NULL, NULL, ZIO_TYPE_FREE, ZIO_PRIORITY_NOW, + flags, NULL, 0, NULL, ZIO_STAGE_OPEN, stage); + + return (zio); +} + +zio_t * +zio_claim(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, + zio_done_func_t *done, void *private, enum zio_flag flags) +{ + zio_t *zio; + + dprintf_bp(bp, "claiming in txg %llu", txg); + + if (BP_IS_EMBEDDED(bp)) + return (zio_null(pio, spa, NULL, NULL, NULL, 0)); + + /* + * A claim is an allocation of a specific block. Claims are needed + * to support immediate writes in the intent log. The issue is that + * immediate writes contain committed data, but in a txg that was + * *not* committed. Upon opening the pool after an unclean shutdown, + * the intent log claims all blocks that contain immediate write data + * so that the SPA knows they're in use. + * + * All claims *must* be resolved in the first txg -- before the SPA + * starts allocating blocks -- so that nothing is allocated twice. + * If txg == 0 we just verify that the block is claimable. + */ + ASSERT3U(spa->spa_uberblock.ub_rootbp.blk_birth, <, spa_first_txg(spa)); + ASSERT(txg == spa_first_txg(spa) || txg == 0); + ASSERT(!BP_GET_DEDUP(bp) || !spa_writeable(spa)); /* zdb(1M) */ + + zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), + BP_GET_PSIZE(bp), done, private, ZIO_TYPE_CLAIM, ZIO_PRIORITY_NOW, + flags, NULL, 0, NULL, ZIO_STAGE_OPEN, ZIO_CLAIM_PIPELINE); + ASSERT0(zio->io_queued_timestamp); + + return (zio); +} + +zio_t * +zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd, + zio_done_func_t *done, void *private, enum zio_flag flags) +{ + zio_t *zio; + int c; + + if (vd->vdev_children == 0) { + zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private, + ZIO_TYPE_IOCTL, ZIO_PRIORITY_NOW, flags, vd, 0, NULL, + ZIO_STAGE_OPEN, ZIO_IOCTL_PIPELINE); + + zio->io_cmd = cmd; + } else { + zio = zio_null(pio, spa, NULL, NULL, NULL, flags); + + for (c = 0; c < vd->vdev_children; c++) + zio_nowait(zio_ioctl(zio, spa, vd->vdev_child[c], cmd, + done, private, flags)); + } + + return (zio); +} + +zio_t * +zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, + abd_t *data, int checksum, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, boolean_t labels) +{ + zio_t *zio; + + ASSERT(vd->vdev_children == 0); + ASSERT(!labels || offset + size <= VDEV_LABEL_START_SIZE || + offset >= vd->vdev_psize - VDEV_LABEL_END_SIZE); + ASSERT3U(offset + size, <=, vd->vdev_psize); + + zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done, + private, ZIO_TYPE_READ, priority, flags | ZIO_FLAG_PHYSICAL, vd, + offset, NULL, ZIO_STAGE_OPEN, ZIO_READ_PHYS_PIPELINE); + + zio->io_prop.zp_checksum = checksum; + + return (zio); +} + +zio_t * +zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, + abd_t *data, int checksum, zio_done_func_t *done, void *private, + zio_priority_t priority, enum zio_flag flags, boolean_t labels) +{ + zio_t *zio; + + ASSERT(vd->vdev_children == 0); + ASSERT(!labels || offset + size <= VDEV_LABEL_START_SIZE || + offset >= vd->vdev_psize - VDEV_LABEL_END_SIZE); + ASSERT3U(offset + size, <=, vd->vdev_psize); + + zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done, + private, ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_PHYSICAL, vd, + offset, NULL, ZIO_STAGE_OPEN, ZIO_WRITE_PHYS_PIPELINE); + + zio->io_prop.zp_checksum = checksum; + + if (zio_checksum_table[checksum].ci_flags & ZCHECKSUM_FLAG_EMBEDDED) { + /* + * zec checksums are necessarily destructive -- they modify + * the end of the write buffer to hold the verifier/checksum. + * Therefore, we must make a local copy in case the data is + * being written to multiple places in parallel. + */ + abd_t *wbuf = abd_alloc_sametype(data, size); + abd_copy(wbuf, data, size); + + zio_push_transform(zio, wbuf, size, size, NULL); + } + + return (zio); +} + +/* + * Create a child I/O to do some work for us. + */ +zio_t * +zio_vdev_child_io(zio_t *pio, blkptr_t *bp, vdev_t *vd, uint64_t offset, + abd_t *data, uint64_t size, int type, zio_priority_t priority, + enum zio_flag flags, zio_done_func_t *done, void *private) +{ + enum zio_stage pipeline = ZIO_VDEV_CHILD_PIPELINE; + zio_t *zio; + + ASSERT(vd->vdev_parent == + (pio->io_vd ? pio->io_vd : pio->io_spa->spa_root_vdev)); + + if (type == ZIO_TYPE_READ && bp != NULL) { + /* + * If we have the bp, then the child should perform the + * checksum and the parent need not. This pushes error + * detection as close to the leaves as possible and + * eliminates redundant checksums in the interior nodes. + */ + pipeline |= ZIO_STAGE_CHECKSUM_VERIFY; + pio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY; + } + + if (vd->vdev_children == 0) + offset += VDEV_LABEL_START_SIZE; + + flags |= ZIO_VDEV_CHILD_FLAGS(pio) | ZIO_FLAG_DONT_PROPAGATE; + + /* + * If we've decided to do a repair, the write is not speculative -- + * even if the original read was. + */ + if (flags & ZIO_FLAG_IO_REPAIR) + flags &= ~ZIO_FLAG_SPECULATIVE; + + /* + * If we're creating a child I/O that is not associated with a + * top-level vdev, then the child zio is not an allocating I/O. + * If this is a retried I/O then we ignore it since we will + * have already processed the original allocating I/O. + */ + if (flags & ZIO_FLAG_IO_ALLOCATING && + (vd != vd->vdev_top || (flags & ZIO_FLAG_IO_RETRY))) { + ASSERTV(metaslab_class_t *mc = spa_normal_class(pio->io_spa)); + + ASSERT(mc->mc_alloc_throttle_enabled); + ASSERT(type == ZIO_TYPE_WRITE); + ASSERT(priority == ZIO_PRIORITY_ASYNC_WRITE); + ASSERT(!(flags & ZIO_FLAG_IO_REPAIR)); + ASSERT(!(pio->io_flags & ZIO_FLAG_IO_REWRITE) || + pio->io_child_type == ZIO_CHILD_GANG); + + flags &= ~ZIO_FLAG_IO_ALLOCATING; + } + + + zio = zio_create(pio, pio->io_spa, pio->io_txg, bp, data, size, size, + done, private, type, priority, flags, vd, offset, &pio->io_bookmark, + ZIO_STAGE_VDEV_IO_START >> 1, pipeline); + ASSERT3U(zio->io_child_type, ==, ZIO_CHILD_VDEV); + + zio->io_physdone = pio->io_physdone; + if (vd->vdev_ops->vdev_op_leaf && zio->io_logical != NULL) + zio->io_logical->io_phys_children++; + + return (zio); +} + +zio_t * +zio_vdev_delegated_io(vdev_t *vd, uint64_t offset, abd_t *data, uint64_t size, + int type, zio_priority_t priority, enum zio_flag flags, + zio_done_func_t *done, void *private) +{ + zio_t *zio; + + ASSERT(vd->vdev_ops->vdev_op_leaf); + + zio = zio_create(NULL, vd->vdev_spa, 0, NULL, + data, size, size, done, private, type, priority, + flags | ZIO_FLAG_CANFAIL | ZIO_FLAG_DONT_RETRY | ZIO_FLAG_DELEGATED, + vd, offset, NULL, + ZIO_STAGE_VDEV_IO_START >> 1, ZIO_VDEV_CHILD_PIPELINE); + + return (zio); +} + +void +zio_flush(zio_t *zio, vdev_t *vd) +{ + zio_nowait(zio_ioctl(zio, zio->io_spa, vd, DKIOCFLUSHWRITECACHE, + NULL, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_DONT_PROPAGATE | ZIO_FLAG_DONT_RETRY)); +} + +void +zio_shrink(zio_t *zio, uint64_t size) +{ + ASSERT(zio->io_executor == NULL); + ASSERT(zio->io_orig_size == zio->io_size); + ASSERT(size <= zio->io_size); + + /* + * We don't shrink for raidz because of problems with the + * reconstruction when reading back less than the block size. + * Note, BP_IS_RAIDZ() assumes no compression. + */ + ASSERT(BP_GET_COMPRESS(zio->io_bp) == ZIO_COMPRESS_OFF); + if (!BP_IS_RAIDZ(zio->io_bp)) { + /* we are not doing a raw write */ + ASSERT3U(zio->io_size, ==, zio->io_lsize); + zio->io_orig_size = zio->io_size = zio->io_lsize = size; + } +} + +/* + * ========================================================================== + * Prepare to read and write logical blocks + * ========================================================================== + */ + +static int +zio_read_bp_init(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + + if (BP_GET_COMPRESS(bp) != ZIO_COMPRESS_OFF && + zio->io_child_type == ZIO_CHILD_LOGICAL && + !(zio->io_flags & ZIO_FLAG_RAW)) { + uint64_t psize = + BP_IS_EMBEDDED(bp) ? BPE_GET_PSIZE(bp) : BP_GET_PSIZE(bp); + zio_push_transform(zio, abd_alloc_sametype(zio->io_abd, psize), + psize, psize, zio_decompress); + } + + if (BP_IS_EMBEDDED(bp) && BPE_GET_ETYPE(bp) == BP_EMBEDDED_TYPE_DATA) { + int psize = BPE_GET_PSIZE(bp); + void *data = abd_borrow_buf(zio->io_abd, psize); + + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + decode_embedded_bp_compressed(bp, data); + abd_return_buf_copy(zio->io_abd, data, psize); + } else { + ASSERT(!BP_IS_EMBEDDED(bp)); + } + + if (!DMU_OT_IS_METADATA(BP_GET_TYPE(bp)) && BP_GET_LEVEL(bp) == 0) + zio->io_flags |= ZIO_FLAG_DONT_CACHE; + + if (BP_GET_TYPE(bp) == DMU_OT_DDT_ZAP) + zio->io_flags |= ZIO_FLAG_DONT_CACHE; + + if (BP_GET_DEDUP(bp) && zio->io_child_type == ZIO_CHILD_LOGICAL) + zio->io_pipeline = ZIO_DDT_READ_PIPELINE; + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_write_bp_init(zio_t *zio) +{ + + if (!IO_IS_ALLOCATING(zio)) + return (ZIO_PIPELINE_CONTINUE); + + ASSERT(zio->io_child_type != ZIO_CHILD_DDT); + + if (zio->io_bp_override) { + blkptr_t *bp = zio->io_bp; + zio_prop_t *zp = &zio->io_prop; + + ASSERT(bp->blk_birth != zio->io_txg); + ASSERT(BP_GET_DEDUP(zio->io_bp_override) == 0); + + *bp = *zio->io_bp_override; + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + + if (BP_IS_EMBEDDED(bp)) + return (ZIO_PIPELINE_CONTINUE); + + /* + * If we've been overridden and nopwrite is set then + * set the flag accordingly to indicate that a nopwrite + * has already occurred. + */ + if (!BP_IS_HOLE(bp) && zp->zp_nopwrite) { + ASSERT(!zp->zp_dedup); + ASSERT3U(BP_GET_CHECKSUM(bp), ==, zp->zp_checksum); + zio->io_flags |= ZIO_FLAG_NOPWRITE; + return (ZIO_PIPELINE_CONTINUE); + } + + ASSERT(!zp->zp_nopwrite); + + if (BP_IS_HOLE(bp) || !zp->zp_dedup) + return (ZIO_PIPELINE_CONTINUE); + + ASSERT((zio_checksum_table[zp->zp_checksum].ci_flags & + ZCHECKSUM_FLAG_DEDUP) || zp->zp_dedup_verify); + + if (BP_GET_CHECKSUM(bp) == zp->zp_checksum) { + BP_SET_DEDUP(bp, 1); + zio->io_pipeline |= ZIO_STAGE_DDT_WRITE; + return (ZIO_PIPELINE_CONTINUE); + } + + /* + * We were unable to handle this as an override bp, treat + * it as a regular write I/O. + */ + zio->io_bp_override = NULL; + *bp = zio->io_bp_orig; + zio->io_pipeline = zio->io_orig_pipeline; + } + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_write_compress(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + zio_prop_t *zp = &zio->io_prop; + enum zio_compress compress = zp->zp_compress; + blkptr_t *bp = zio->io_bp; + uint64_t lsize = zio->io_lsize; + uint64_t psize = zio->io_size; + int pass = 1; + + EQUIV(lsize != psize, (zio->io_flags & ZIO_FLAG_RAW) != 0); + + /* + * If our children haven't all reached the ready stage, + * wait for them and then repeat this pipeline stage. + */ + if (zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_READY) || + zio_wait_for_children(zio, ZIO_CHILD_LOGICAL, ZIO_WAIT_READY)) + return (ZIO_PIPELINE_STOP); + + if (!IO_IS_ALLOCATING(zio)) + return (ZIO_PIPELINE_CONTINUE); + + if (zio->io_children_ready != NULL) { + /* + * Now that all our children are ready, run the callback + * associated with this zio in case it wants to modify the + * data to be written. + */ + ASSERT3U(zp->zp_level, >, 0); + zio->io_children_ready(zio); + } + + ASSERT(zio->io_child_type != ZIO_CHILD_DDT); + ASSERT(zio->io_bp_override == NULL); + + if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg) { + /* + * We're rewriting an existing block, which means we're + * working on behalf of spa_sync(). For spa_sync() to + * converge, it must eventually be the case that we don't + * have to allocate new blocks. But compression changes + * the blocksize, which forces a reallocate, and makes + * convergence take longer. Therefore, after the first + * few passes, stop compressing to ensure convergence. + */ + pass = spa_sync_pass(spa); + + ASSERT(zio->io_txg == spa_syncing_txg(spa)); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(!BP_GET_DEDUP(bp)); + + if (pass >= zfs_sync_pass_dont_compress) + compress = ZIO_COMPRESS_OFF; + + /* Make sure someone doesn't change their mind on overwrites */ + ASSERT(BP_IS_EMBEDDED(bp) || MIN(zp->zp_copies + BP_IS_GANG(bp), + spa_max_replication(spa)) == BP_GET_NDVAS(bp)); + } + + /* If it's a compressed write that is not raw, compress the buffer. */ + if (compress != ZIO_COMPRESS_OFF && psize == lsize) { + void *cbuf = zio_buf_alloc(lsize); + psize = zio_compress_data(compress, zio->io_abd, cbuf, lsize); + if (psize == 0 || psize == lsize) { + compress = ZIO_COMPRESS_OFF; + zio_buf_free(cbuf, lsize); + } else if (!zp->zp_dedup && psize <= BPE_PAYLOAD_SIZE && + zp->zp_level == 0 && !DMU_OT_HAS_FILL(zp->zp_type) && + spa_feature_is_enabled(spa, SPA_FEATURE_EMBEDDED_DATA)) { + encode_embedded_bp_compressed(bp, + cbuf, compress, lsize, psize); + BPE_SET_ETYPE(bp, BP_EMBEDDED_TYPE_DATA); + BP_SET_TYPE(bp, zio->io_prop.zp_type); + BP_SET_LEVEL(bp, zio->io_prop.zp_level); + zio_buf_free(cbuf, lsize); + bp->blk_birth = zio->io_txg; + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + ASSERT(spa_feature_is_active(spa, + SPA_FEATURE_EMBEDDED_DATA)); + return (ZIO_PIPELINE_CONTINUE); + } else { + /* + * Round up compressed size up to the ashift + * of the smallest-ashift device, and zero the tail. + * This ensures that the compressed size of the BP + * (and thus compressratio property) are correct, + * in that we charge for the padding used to fill out + * the last sector. + */ + size_t rounded; + + ASSERT3U(spa->spa_min_ashift, >=, SPA_MINBLOCKSHIFT); + + rounded = (size_t)P2ROUNDUP(psize, + 1ULL << spa->spa_min_ashift); + if (rounded >= lsize) { + compress = ZIO_COMPRESS_OFF; + zio_buf_free(cbuf, lsize); + psize = lsize; + } else { + abd_t *cdata = abd_get_from_buf(cbuf, lsize); + abd_take_ownership_of_buf(cdata, B_TRUE); + abd_zero_off(cdata, psize, rounded - psize); + psize = rounded; + zio_push_transform(zio, cdata, + psize, lsize, NULL); + } + } + + /* + * We were unable to handle this as an override bp, treat + * it as a regular write I/O. + */ + zio->io_bp_override = NULL; + *bp = zio->io_bp_orig; + zio->io_pipeline = zio->io_orig_pipeline; + + } else { + ASSERT3U(psize, !=, 0); + + } + + /* + * The final pass of spa_sync() must be all rewrites, but the first + * few passes offer a trade-off: allocating blocks defers convergence, + * but newly allocated blocks are sequential, so they can be written + * to disk faster. Therefore, we allow the first few passes of + * spa_sync() to allocate new blocks, but force rewrites after that. + * There should only be a handful of blocks after pass 1 in any case. + */ + if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg && + BP_GET_PSIZE(bp) == psize && + pass >= zfs_sync_pass_rewrite) { + enum zio_stage gang_stages = zio->io_pipeline & ZIO_GANG_STAGES; + ASSERT(psize != 0); + zio->io_pipeline = ZIO_REWRITE_PIPELINE | gang_stages; + zio->io_flags |= ZIO_FLAG_IO_REWRITE; + } else { + BP_ZERO(bp); + zio->io_pipeline = ZIO_WRITE_PIPELINE; + } + + if (psize == 0) { + if (zio->io_bp_orig.blk_birth != 0 && + spa_feature_is_active(spa, SPA_FEATURE_HOLE_BIRTH)) { + BP_SET_LSIZE(bp, lsize); + BP_SET_TYPE(bp, zp->zp_type); + BP_SET_LEVEL(bp, zp->zp_level); + BP_SET_BIRTH(bp, zio->io_txg, 0); + } + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + } else { + ASSERT(zp->zp_checksum != ZIO_CHECKSUM_GANG_HEADER); + BP_SET_LSIZE(bp, lsize); + BP_SET_TYPE(bp, zp->zp_type); + BP_SET_LEVEL(bp, zp->zp_level); + BP_SET_PSIZE(bp, psize); + BP_SET_COMPRESS(bp, compress); + BP_SET_CHECKSUM(bp, zp->zp_checksum); + BP_SET_DEDUP(bp, zp->zp_dedup); + BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER); + if (zp->zp_dedup) { + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); + zio->io_pipeline = ZIO_DDT_WRITE_PIPELINE; + } + if (zp->zp_nopwrite) { + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); + zio->io_pipeline |= ZIO_STAGE_NOP_WRITE; + } + } + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_free_bp_init(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + + if (zio->io_child_type == ZIO_CHILD_LOGICAL) { + if (BP_GET_DEDUP(bp)) + zio->io_pipeline = ZIO_DDT_FREE_PIPELINE; + } + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * ========================================================================== + * Execute the I/O pipeline + * ========================================================================== + */ + +static void +zio_taskq_dispatch(zio_t *zio, zio_taskq_type_t q, boolean_t cutinline) +{ + spa_t *spa = zio->io_spa; + zio_type_t t = zio->io_type; + int flags = (cutinline ? TQ_FRONT : 0); + + /* + * If we're a config writer or a probe, the normal issue and + * interrupt threads may all be blocked waiting for the config lock. + * In this case, select the otherwise-unused taskq for ZIO_TYPE_NULL. + */ + if (zio->io_flags & (ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_PROBE)) + t = ZIO_TYPE_NULL; + + /* + * A similar issue exists for the L2ARC write thread until L2ARC 2.0. + */ + if (t == ZIO_TYPE_WRITE && zio->io_vd && zio->io_vd->vdev_aux) + t = ZIO_TYPE_NULL; + + /* + * If this is a high priority I/O, then use the high priority taskq if + * available. + */ + if (zio->io_priority == ZIO_PRIORITY_NOW && + spa->spa_zio_taskq[t][q + 1].stqs_count != 0) + q++; + + ASSERT3U(q, <, ZIO_TASKQ_TYPES); + + /* + * NB: We are assuming that the zio can only be dispatched + * to a single taskq at a time. It would be a grievous error + * to dispatch the zio to another taskq at the same time. + */ + ASSERT(taskq_empty_ent(&zio->io_tqent)); + spa_taskq_dispatch_ent(spa, t, q, (task_func_t *)zio_execute, zio, + flags, &zio->io_tqent); +} + +static boolean_t +zio_taskq_member(zio_t *zio, zio_taskq_type_t q) +{ + kthread_t *executor = zio->io_executor; + spa_t *spa = zio->io_spa; + zio_type_t t; + + for (t = 0; t < ZIO_TYPES; t++) { + spa_taskqs_t *tqs = &spa->spa_zio_taskq[t][q]; + uint_t i; + for (i = 0; i < tqs->stqs_count; i++) { + if (taskq_member(tqs->stqs_taskq[i], executor)) + return (B_TRUE); + } + } + + return (B_FALSE); +} + +static int +zio_issue_async(zio_t *zio) +{ + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); + + return (ZIO_PIPELINE_STOP); +} + +void +zio_interrupt(zio_t *zio) +{ + zio_taskq_dispatch(zio, ZIO_TASKQ_INTERRUPT, B_FALSE); +} + +void +zio_delay_interrupt(zio_t *zio) +{ + /* + * The timeout_generic() function isn't defined in userspace, so + * rather than trying to implement the function, the zio delay + * functionality has been disabled for userspace builds. + */ + +#ifdef _KERNEL + /* + * If io_target_timestamp is zero, then no delay has been registered + * for this IO, thus jump to the end of this function and "skip" the + * delay; issuing it directly to the zio layer. + */ + if (zio->io_target_timestamp != 0) { + hrtime_t now = gethrtime(); + + if (now >= zio->io_target_timestamp) { + /* + * This IO has already taken longer than the target + * delay to complete, so we don't want to delay it + * any longer; we "miss" the delay and issue it + * directly to the zio layer. This is likely due to + * the target latency being set to a value less than + * the underlying hardware can satisfy (e.g. delay + * set to 1ms, but the disks take 10ms to complete an + * IO request). + */ + + DTRACE_PROBE2(zio__delay__miss, zio_t *, zio, + hrtime_t, now); + + zio_interrupt(zio); + } else { + taskqid_t tid; + hrtime_t diff = zio->io_target_timestamp - now; + clock_t expire_at_tick = ddi_get_lbolt() + + NSEC_TO_TICK(diff); + + DTRACE_PROBE3(zio__delay__hit, zio_t *, zio, + hrtime_t, now, hrtime_t, diff); + + if (NSEC_TO_TICK(diff) == 0) { + /* Our delay is less than a jiffy - just spin */ + zfs_sleep_until(zio->io_target_timestamp); + } else { + /* + * Use taskq_dispatch_delay() in the place of + * OpenZFS's timeout_generic(). + */ + tid = taskq_dispatch_delay(system_taskq, + (task_func_t *)zio_interrupt, + zio, TQ_NOSLEEP, expire_at_tick); + if (tid == TASKQID_INVALID) { + /* + * Couldn't allocate a task. Just + * finish the zio without a delay. + */ + zio_interrupt(zio); + } + } + } + return; + } +#endif + DTRACE_PROBE1(zio__delay__skip, zio_t *, zio); + zio_interrupt(zio); +} + +/* + * Execute the I/O pipeline until one of the following occurs: + * (1) the I/O completes; (2) the pipeline stalls waiting for + * dependent child I/Os; (3) the I/O issues, so we're waiting + * for an I/O completion interrupt; (4) the I/O is delegated by + * vdev-level caching or aggregation; (5) the I/O is deferred + * due to vdev-level queueing; (6) the I/O is handed off to + * another thread. In all cases, the pipeline stops whenever + * there's no CPU work; it never burns a thread in cv_wait_io(). + * + * There's no locking on io_stage because there's no legitimate way + * for multiple threads to be attempting to process the same I/O. + */ +static zio_pipe_stage_t *zio_pipeline[]; + +/* + * zio_execute() is a wrapper around the static function + * __zio_execute() so that we can force __zio_execute() to be + * inlined. This reduces stack overhead which is important + * because __zio_execute() is called recursively in several zio + * code paths. zio_execute() itself cannot be inlined because + * it is externally visible. + */ +void +zio_execute(zio_t *zio) +{ + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + __zio_execute(zio); + spl_fstrans_unmark(cookie); +} + +/* + * Used to determine if in the current context the stack is sized large + * enough to allow zio_execute() to be called recursively. A minimum + * stack size of 16K is required to avoid needing to re-dispatch the zio. + */ +boolean_t +zio_execute_stack_check(zio_t *zio) +{ +#if !defined(HAVE_LARGE_STACKS) + dsl_pool_t *dp = spa_get_dsl(zio->io_spa); + + /* Executing in txg_sync_thread() context. */ + if (dp && curthread == dp->dp_tx.tx_sync_thread) + return (B_TRUE); + + /* Pool initialization outside of zio_taskq context. */ + if (dp && spa_is_initializing(dp->dp_spa) && + !zio_taskq_member(zio, ZIO_TASKQ_ISSUE) && + !zio_taskq_member(zio, ZIO_TASKQ_ISSUE_HIGH)) + return (B_TRUE); +#endif /* HAVE_LARGE_STACKS */ + + return (B_FALSE); +} + +__attribute__((always_inline)) +static inline void +__zio_execute(zio_t *zio) +{ + zio->io_executor = curthread; + + ASSERT3U(zio->io_queued_timestamp, >, 0); + + while (zio->io_stage < ZIO_STAGE_DONE) { + enum zio_stage pipeline = zio->io_pipeline; + enum zio_stage stage = zio->io_stage; + int rv; + + ASSERT(!MUTEX_HELD(&zio->io_lock)); + ASSERT(ISP2(stage)); + ASSERT(zio->io_stall == NULL); + + do { + stage <<= 1; + } while ((stage & pipeline) == 0); + + ASSERT(stage <= ZIO_STAGE_DONE); + + /* + * If we are in interrupt context and this pipeline stage + * will grab a config lock that is held across I/O, + * or may wait for an I/O that needs an interrupt thread + * to complete, issue async to avoid deadlock. + * + * For VDEV_IO_START, we cut in line so that the io will + * be sent to disk promptly. + */ + if ((stage & ZIO_BLOCKING_STAGES) && zio->io_vd == NULL && + zio_taskq_member(zio, ZIO_TASKQ_INTERRUPT)) { + boolean_t cut = (stage == ZIO_STAGE_VDEV_IO_START) ? + zio_requeue_io_start_cut_in_line : B_FALSE; + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, cut); + return; + } + + /* + * If the current context doesn't have large enough stacks + * the zio must be issued asynchronously to prevent overflow. + */ + if (zio_execute_stack_check(zio)) { + boolean_t cut = (stage == ZIO_STAGE_VDEV_IO_START) ? + zio_requeue_io_start_cut_in_line : B_FALSE; + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, cut); + return; + } + + zio->io_stage = stage; + zio->io_pipeline_trace |= zio->io_stage; + rv = zio_pipeline[highbit64(stage) - 1](zio); + + if (rv == ZIO_PIPELINE_STOP) + return; + + ASSERT(rv == ZIO_PIPELINE_CONTINUE); + } +} + + +/* + * ========================================================================== + * Initiate I/O, either sync or async + * ========================================================================== + */ +int +zio_wait(zio_t *zio) +{ + int error; + + ASSERT(zio->io_stage == ZIO_STAGE_OPEN); + ASSERT(zio->io_executor == NULL); + + zio->io_waiter = curthread; + ASSERT0(zio->io_queued_timestamp); + zio->io_queued_timestamp = gethrtime(); + + __zio_execute(zio); + + mutex_enter(&zio->io_lock); + while (zio->io_executor != NULL) + cv_wait_io(&zio->io_cv, &zio->io_lock); + mutex_exit(&zio->io_lock); + + error = zio->io_error; + zio_destroy(zio); + + return (error); +} + +void +zio_nowait(zio_t *zio) +{ + ASSERT(zio->io_executor == NULL); + + if (zio->io_child_type == ZIO_CHILD_LOGICAL && + zio_unique_parent(zio) == NULL) { + zio_t *pio; + + /* + * This is a logical async I/O with no parent to wait for it. + * We add it to the spa_async_root_zio "Godfather" I/O which + * will ensure they complete prior to unloading the pool. + */ + spa_t *spa = zio->io_spa; + kpreempt_disable(); + pio = spa->spa_async_zio_root[CPU_SEQID]; + kpreempt_enable(); + + zio_add_child(pio, zio); + } + + ASSERT0(zio->io_queued_timestamp); + zio->io_queued_timestamp = gethrtime(); + __zio_execute(zio); +} + +/* + * ========================================================================== + * Reexecute or suspend/resume failed I/O + * ========================================================================== + */ + +static void +zio_reexecute(zio_t *pio) +{ + zio_t *cio, *cio_next; + int c, w; + zio_link_t *zl = NULL; + + ASSERT(pio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(pio->io_orig_stage == ZIO_STAGE_OPEN); + ASSERT(pio->io_gang_leader == NULL); + ASSERT(pio->io_gang_tree == NULL); + + pio->io_flags = pio->io_orig_flags; + pio->io_stage = pio->io_orig_stage; + pio->io_pipeline = pio->io_orig_pipeline; + pio->io_reexecute = 0; + pio->io_flags |= ZIO_FLAG_REEXECUTED; + pio->io_pipeline_trace = 0; + pio->io_error = 0; + for (w = 0; w < ZIO_WAIT_TYPES; w++) + pio->io_state[w] = 0; + for (c = 0; c < ZIO_CHILD_TYPES; c++) + pio->io_child_error[c] = 0; + + if (IO_IS_ALLOCATING(pio)) + BP_ZERO(pio->io_bp); + + /* + * As we reexecute pio's children, new children could be created. + * New children go to the head of pio's io_child_list, however, + * so we will (correctly) not reexecute them. The key is that + * the remainder of pio's io_child_list, from 'cio_next' onward, + * cannot be affected by any side effects of reexecuting 'cio'. + */ + for (cio = zio_walk_children(pio, &zl); cio != NULL; cio = cio_next) { + cio_next = zio_walk_children(pio, &zl); + mutex_enter(&pio->io_lock); + for (w = 0; w < ZIO_WAIT_TYPES; w++) + pio->io_children[cio->io_child_type][w]++; + mutex_exit(&pio->io_lock); + zio_reexecute(cio); + } + + /* + * Now that all children have been reexecuted, execute the parent. + * We don't reexecute "The Godfather" I/O here as it's the + * responsibility of the caller to wait on it. + */ + if (!(pio->io_flags & ZIO_FLAG_GODFATHER)) { + pio->io_queued_timestamp = gethrtime(); + __zio_execute(pio); + } +} + +void +zio_suspend(spa_t *spa, zio_t *zio) +{ + if (spa_get_failmode(spa) == ZIO_FAILURE_MODE_PANIC) + fm_panic("Pool '%s' has encountered an uncorrectable I/O " + "failure and the failure mode property for this pool " + "is set to panic.", spa_name(spa)); + + cmn_err(CE_WARN, "Pool '%s' has encountered an uncorrectable I/O " + "failure and has been suspended.\n", spa_name(spa)); + + zfs_ereport_post(FM_EREPORT_ZFS_IO_FAILURE, spa, NULL, NULL, 0, 0); + + mutex_enter(&spa->spa_suspend_lock); + + if (spa->spa_suspend_zio_root == NULL) + spa->spa_suspend_zio_root = zio_root(spa, NULL, NULL, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | + ZIO_FLAG_GODFATHER); + + spa->spa_suspended = B_TRUE; + + if (zio != NULL) { + ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); + ASSERT(zio != spa->spa_suspend_zio_root); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + ASSERT(zio_unique_parent(zio) == NULL); + ASSERT(zio->io_stage == ZIO_STAGE_DONE); + zio_add_child(spa->spa_suspend_zio_root, zio); + } + + mutex_exit(&spa->spa_suspend_lock); +} + +int +zio_resume(spa_t *spa) +{ + zio_t *pio; + + /* + * Reexecute all previously suspended i/o. + */ + mutex_enter(&spa->spa_suspend_lock); + spa->spa_suspended = B_FALSE; + cv_broadcast(&spa->spa_suspend_cv); + pio = spa->spa_suspend_zio_root; + spa->spa_suspend_zio_root = NULL; + mutex_exit(&spa->spa_suspend_lock); + + if (pio == NULL) + return (0); + + zio_reexecute(pio); + return (zio_wait(pio)); +} + +void +zio_resume_wait(spa_t *spa) +{ + mutex_enter(&spa->spa_suspend_lock); + while (spa_suspended(spa)) + cv_wait(&spa->spa_suspend_cv, &spa->spa_suspend_lock); + mutex_exit(&spa->spa_suspend_lock); +} + +/* + * ========================================================================== + * Gang blocks. + * + * A gang block is a collection of small blocks that looks to the DMU + * like one large block. When zio_dva_allocate() cannot find a block + * of the requested size, due to either severe fragmentation or the pool + * being nearly full, it calls zio_write_gang_block() to construct the + * block from smaller fragments. + * + * A gang block consists of a gang header (zio_gbh_phys_t) and up to + * three (SPA_GBH_NBLKPTRS) gang members. The gang header is just like + * an indirect block: it's an array of block pointers. It consumes + * only one sector and hence is allocatable regardless of fragmentation. + * The gang header's bps point to its gang members, which hold the data. + * + * Gang blocks are self-checksumming, using the bp's + * as the verifier to ensure uniqueness of the SHA256 checksum. + * Critically, the gang block bp's blk_cksum is the checksum of the data, + * not the gang header. This ensures that data block signatures (needed for + * deduplication) are independent of how the block is physically stored. + * + * Gang blocks can be nested: a gang member may itself be a gang block. + * Thus every gang block is a tree in which root and all interior nodes are + * gang headers, and the leaves are normal blocks that contain user data. + * The root of the gang tree is called the gang leader. + * + * To perform any operation (read, rewrite, free, claim) on a gang block, + * zio_gang_assemble() first assembles the gang tree (minus data leaves) + * in the io_gang_tree field of the original logical i/o by recursively + * reading the gang leader and all gang headers below it. This yields + * an in-core tree containing the contents of every gang header and the + * bps for every constituent of the gang block. + * + * With the gang tree now assembled, zio_gang_issue() just walks the gang tree + * and invokes a callback on each bp. To free a gang block, zio_gang_issue() + * calls zio_free_gang() -- a trivial wrapper around zio_free() -- for each bp. + * zio_claim_gang() provides a similarly trivial wrapper for zio_claim(). + * zio_read_gang() is a wrapper around zio_read() that omits reading gang + * headers, since we already have those in io_gang_tree. zio_rewrite_gang() + * performs a zio_rewrite() of the data or, for gang headers, a zio_rewrite() + * of the gang header plus zio_checksum_compute() of the data to update the + * gang header's blk_cksum as described above. + * + * The two-phase assemble/issue model solves the problem of partial failure -- + * what if you'd freed part of a gang block but then couldn't read the + * gang header for another part? Assembling the entire gang tree first + * ensures that all the necessary gang header I/O has succeeded before + * starting the actual work of free, claim, or write. Once the gang tree + * is assembled, free and claim are in-memory operations that cannot fail. + * + * In the event that a gang write fails, zio_dva_unallocate() walks the + * gang tree to immediately free (i.e. insert back into the space map) + * everything we've allocated. This ensures that we don't get ENOSPC + * errors during repeated suspend/resume cycles due to a flaky device. + * + * Gang rewrites only happen during sync-to-convergence. If we can't assemble + * the gang tree, we won't modify the block, so we can safely defer the free + * (knowing that the block is still intact). If we *can* assemble the gang + * tree, then even if some of the rewrites fail, zio_dva_unallocate() will free + * each constituent bp and we can allocate a new block on the next sync pass. + * + * In all cases, the gang tree allows complete recovery from partial failure. + * ========================================================================== + */ + +static void +zio_gang_issue_func_done(zio_t *zio) +{ + abd_put(zio->io_abd); +} + +static zio_t * +zio_read_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, + uint64_t offset) +{ + if (gn != NULL) + return (pio); + + return (zio_read(pio, pio->io_spa, bp, abd_get_offset(data, offset), + BP_GET_PSIZE(bp), zio_gang_issue_func_done, + NULL, pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio), + &pio->io_bookmark)); +} + +static zio_t * +zio_rewrite_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, + uint64_t offset) +{ + zio_t *zio; + + if (gn != NULL) { + abd_t *gbh_abd = + abd_get_from_buf(gn->gn_gbh, SPA_GANGBLOCKSIZE); + zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, + gbh_abd, SPA_GANGBLOCKSIZE, zio_gang_issue_func_done, NULL, + pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio), + &pio->io_bookmark); + /* + * As we rewrite each gang header, the pipeline will compute + * a new gang block header checksum for it; but no one will + * compute a new data checksum, so we do that here. The one + * exception is the gang leader: the pipeline already computed + * its data checksum because that stage precedes gang assembly. + * (Presently, nothing actually uses interior data checksums; + * this is just good hygiene.) + */ + if (gn != pio->io_gang_leader->io_gang_tree) { + abd_t *buf = abd_get_offset(data, offset); + + zio_checksum_compute(zio, BP_GET_CHECKSUM(bp), + buf, BP_GET_PSIZE(bp)); + + abd_put(buf); + } + /* + * If we are here to damage data for testing purposes, + * leave the GBH alone so that we can detect the damage. + */ + if (pio->io_gang_leader->io_flags & ZIO_FLAG_INDUCE_DAMAGE) + zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; + } else { + zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, + abd_get_offset(data, offset), BP_GET_PSIZE(bp), + zio_gang_issue_func_done, NULL, pio->io_priority, + ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); + } + + return (zio); +} + +/* ARGSUSED */ +static zio_t * +zio_free_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, + uint64_t offset) +{ + return (zio_free_sync(pio, pio->io_spa, pio->io_txg, bp, + ZIO_GANG_CHILD_FLAGS(pio))); +} + +/* ARGSUSED */ +static zio_t * +zio_claim_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, + uint64_t offset) +{ + return (zio_claim(pio, pio->io_spa, pio->io_txg, bp, + NULL, NULL, ZIO_GANG_CHILD_FLAGS(pio))); +} + +static zio_gang_issue_func_t *zio_gang_issue_func[ZIO_TYPES] = { + NULL, + zio_read_gang, + zio_rewrite_gang, + zio_free_gang, + zio_claim_gang, + NULL +}; + +static void zio_gang_tree_assemble_done(zio_t *zio); + +static zio_gang_node_t * +zio_gang_node_alloc(zio_gang_node_t **gnpp) +{ + zio_gang_node_t *gn; + + ASSERT(*gnpp == NULL); + + gn = kmem_zalloc(sizeof (*gn), KM_SLEEP); + gn->gn_gbh = zio_buf_alloc(SPA_GANGBLOCKSIZE); + *gnpp = gn; + + return (gn); +} + +static void +zio_gang_node_free(zio_gang_node_t **gnpp) +{ + zio_gang_node_t *gn = *gnpp; + int g; + + for (g = 0; g < SPA_GBH_NBLKPTRS; g++) + ASSERT(gn->gn_child[g] == NULL); + + zio_buf_free(gn->gn_gbh, SPA_GANGBLOCKSIZE); + kmem_free(gn, sizeof (*gn)); + *gnpp = NULL; +} + +static void +zio_gang_tree_free(zio_gang_node_t **gnpp) +{ + zio_gang_node_t *gn = *gnpp; + int g; + + if (gn == NULL) + return; + + for (g = 0; g < SPA_GBH_NBLKPTRS; g++) + zio_gang_tree_free(&gn->gn_child[g]); + + zio_gang_node_free(gnpp); +} + +static void +zio_gang_tree_assemble(zio_t *gio, blkptr_t *bp, zio_gang_node_t **gnpp) +{ + zio_gang_node_t *gn = zio_gang_node_alloc(gnpp); + abd_t *gbh_abd = abd_get_from_buf(gn->gn_gbh, SPA_GANGBLOCKSIZE); + + ASSERT(gio->io_gang_leader == gio); + ASSERT(BP_IS_GANG(bp)); + + zio_nowait(zio_read(gio, gio->io_spa, bp, gbh_abd, SPA_GANGBLOCKSIZE, + zio_gang_tree_assemble_done, gn, gio->io_priority, + ZIO_GANG_CHILD_FLAGS(gio), &gio->io_bookmark)); +} + +static void +zio_gang_tree_assemble_done(zio_t *zio) +{ + zio_t *gio = zio->io_gang_leader; + zio_gang_node_t *gn = zio->io_private; + blkptr_t *bp = zio->io_bp; + int g; + + ASSERT(gio == zio_unique_parent(zio)); + ASSERT(zio->io_child_count == 0); + + if (zio->io_error) + return; + + /* this ABD was created from a linear buf in zio_gang_tree_assemble */ + if (BP_SHOULD_BYTESWAP(bp)) + byteswap_uint64_array(abd_to_buf(zio->io_abd), zio->io_size); + + ASSERT3P(abd_to_buf(zio->io_abd), ==, gn->gn_gbh); + ASSERT(zio->io_size == SPA_GANGBLOCKSIZE); + ASSERT(gn->gn_gbh->zg_tail.zec_magic == ZEC_MAGIC); + + abd_put(zio->io_abd); + + for (g = 0; g < SPA_GBH_NBLKPTRS; g++) { + blkptr_t *gbp = &gn->gn_gbh->zg_blkptr[g]; + if (!BP_IS_GANG(gbp)) + continue; + zio_gang_tree_assemble(gio, gbp, &gn->gn_child[g]); + } +} + +static void +zio_gang_tree_issue(zio_t *pio, zio_gang_node_t *gn, blkptr_t *bp, abd_t *data, + uint64_t offset) +{ + zio_t *gio = pio->io_gang_leader; + zio_t *zio; + int g; + + ASSERT(BP_IS_GANG(bp) == !!gn); + ASSERT(BP_GET_CHECKSUM(bp) == BP_GET_CHECKSUM(gio->io_bp)); + ASSERT(BP_GET_LSIZE(bp) == BP_GET_PSIZE(bp) || gn == gio->io_gang_tree); + + /* + * If you're a gang header, your data is in gn->gn_gbh. + * If you're a gang member, your data is in 'data' and gn == NULL. + */ + zio = zio_gang_issue_func[gio->io_type](pio, bp, gn, data, offset); + + if (gn != NULL) { + ASSERT(gn->gn_gbh->zg_tail.zec_magic == ZEC_MAGIC); + + for (g = 0; g < SPA_GBH_NBLKPTRS; g++) { + blkptr_t *gbp = &gn->gn_gbh->zg_blkptr[g]; + if (BP_IS_HOLE(gbp)) + continue; + zio_gang_tree_issue(zio, gn->gn_child[g], gbp, data, + offset); + offset += BP_GET_PSIZE(gbp); + } + } + + if (gn == gio->io_gang_tree) + ASSERT3U(gio->io_size, ==, offset); + + if (zio != pio) + zio_nowait(zio); +} + +static int +zio_gang_assemble(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + + ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == NULL); + ASSERT(zio->io_child_type > ZIO_CHILD_GANG); + + zio->io_gang_leader = zio; + + zio_gang_tree_assemble(zio, bp, &zio->io_gang_tree); + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_gang_issue(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + + if (zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_DONE)) + return (ZIO_PIPELINE_STOP); + + ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == zio); + ASSERT(zio->io_child_type > ZIO_CHILD_GANG); + + if (zio->io_child_error[ZIO_CHILD_GANG] == 0) + zio_gang_tree_issue(zio, zio->io_gang_tree, bp, zio->io_abd, + 0); + else + zio_gang_tree_free(&zio->io_gang_tree); + + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + + return (ZIO_PIPELINE_CONTINUE); +} + +static void +zio_write_gang_member_ready(zio_t *zio) +{ + zio_t *pio = zio_unique_parent(zio); + dva_t *cdva = zio->io_bp->blk_dva; + dva_t *pdva = pio->io_bp->blk_dva; + uint64_t asize; + int d; + ASSERTV(zio_t *gio = zio->io_gang_leader); + + if (BP_IS_HOLE(zio->io_bp)) + return; + + ASSERT(BP_IS_HOLE(&zio->io_bp_orig)); + + ASSERT(zio->io_child_type == ZIO_CHILD_GANG); + ASSERT3U(zio->io_prop.zp_copies, ==, gio->io_prop.zp_copies); + ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(zio->io_bp)); + ASSERT3U(pio->io_prop.zp_copies, <=, BP_GET_NDVAS(pio->io_bp)); + ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp)); + + mutex_enter(&pio->io_lock); + for (d = 0; d < BP_GET_NDVAS(zio->io_bp); d++) { + ASSERT(DVA_GET_GANG(&pdva[d])); + asize = DVA_GET_ASIZE(&pdva[d]); + asize += DVA_GET_ASIZE(&cdva[d]); + DVA_SET_ASIZE(&pdva[d], asize); + } + mutex_exit(&pio->io_lock); +} + +static void +zio_write_gang_done(zio_t *zio) +{ + abd_put(zio->io_abd); +} + +static int +zio_write_gang_block(zio_t *pio) +{ + spa_t *spa = pio->io_spa; + metaslab_class_t *mc = spa_normal_class(spa); + blkptr_t *bp = pio->io_bp; + zio_t *gio = pio->io_gang_leader; + zio_t *zio; + zio_gang_node_t *gn, **gnpp; + zio_gbh_phys_t *gbh; + abd_t *gbh_abd; + uint64_t txg = pio->io_txg; + uint64_t resid = pio->io_size; + uint64_t lsize; + int copies = gio->io_prop.zp_copies; + int gbh_copies = MIN(copies + 1, spa_max_replication(spa)); + zio_prop_t zp; + int g, error; + + int flags = METASLAB_HINTBP_FAVOR | METASLAB_GANG_HEADER; + if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { + ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); + ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA)); + + flags |= METASLAB_ASYNC_ALLOC; + VERIFY(refcount_held(&mc->mc_alloc_slots, pio)); + + /* + * The logical zio has already placed a reservation for + * 'copies' allocation slots but gang blocks may require + * additional copies. These additional copies + * (i.e. gbh_copies - copies) are guaranteed to succeed + * since metaslab_class_throttle_reserve() always allows + * additional reservations for gang blocks. + */ + VERIFY(metaslab_class_throttle_reserve(mc, gbh_copies - copies, + pio, flags)); + } + + error = metaslab_alloc(spa, mc, SPA_GANGBLOCKSIZE, + bp, gbh_copies, txg, pio == gio ? NULL : gio->io_bp, flags, + &pio->io_alloc_list, pio); + if (error) { + if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { + ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); + ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA)); + + /* + * If we failed to allocate the gang block header then + * we remove any additional allocation reservations that + * we placed here. The original reservation will + * be removed when the logical I/O goes to the ready + * stage. + */ + metaslab_class_throttle_unreserve(mc, + gbh_copies - copies, pio); + } + + pio->io_error = error; + return (ZIO_PIPELINE_CONTINUE); + } + + if (pio == gio) { + gnpp = &gio->io_gang_tree; + } else { + gnpp = pio->io_private; + ASSERT(pio->io_ready == zio_write_gang_member_ready); + } + + gn = zio_gang_node_alloc(gnpp); + gbh = gn->gn_gbh; + bzero(gbh, SPA_GANGBLOCKSIZE); + gbh_abd = abd_get_from_buf(gbh, SPA_GANGBLOCKSIZE); + + /* + * Create the gang header. + */ + zio = zio_rewrite(pio, spa, txg, bp, gbh_abd, SPA_GANGBLOCKSIZE, + zio_write_gang_done, NULL, pio->io_priority, + ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); + + /* + * Create and nowait the gang children. + */ + for (g = 0; resid != 0; resid -= lsize, g++) { + zio_t *cio; + + lsize = P2ROUNDUP(resid / (SPA_GBH_NBLKPTRS - g), + SPA_MINBLOCKSIZE); + ASSERT(lsize >= SPA_MINBLOCKSIZE && lsize <= resid); + + zp.zp_checksum = gio->io_prop.zp_checksum; + zp.zp_compress = ZIO_COMPRESS_OFF; + zp.zp_type = DMU_OT_NONE; + zp.zp_level = 0; + zp.zp_copies = gio->io_prop.zp_copies; + zp.zp_dedup = B_FALSE; + zp.zp_dedup_verify = B_FALSE; + zp.zp_nopwrite = B_FALSE; + + cio = zio_write(zio, spa, txg, &gbh->zg_blkptr[g], + abd_get_offset(pio->io_abd, pio->io_size - resid), lsize, + lsize, &zp, zio_write_gang_member_ready, NULL, NULL, + zio_write_gang_done, &gn->gn_child[g], pio->io_priority, + ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); + + if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { + ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); + ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA)); + + /* + * Gang children won't throttle but we should + * account for their work, so reserve an allocation + * slot for them here. + */ + VERIFY(metaslab_class_throttle_reserve(mc, + zp.zp_copies, cio, flags)); + } + zio_nowait(cio); + } + + /* + * Set pio's pipeline to just wait for zio to finish. + */ + pio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + + /* + * We didn't allocate this bp, so make sure it doesn't get unmarked. + */ + pio->io_flags &= ~ZIO_FLAG_FASTWRITE; + + zio_nowait(zio); + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * The zio_nop_write stage in the pipeline determines if allocating a + * new bp is necessary. The nopwrite feature can handle writes in + * either syncing or open context (i.e. zil writes) and as a result is + * mutually exclusive with dedup. + * + * By leveraging a cryptographically secure checksum, such as SHA256, we + * can compare the checksums of the new data and the old to determine if + * allocating a new block is required. Note that our requirements for + * cryptographic strength are fairly weak: there can't be any accidental + * hash collisions, but we don't need to be secure against intentional + * (malicious) collisions. To trigger a nopwrite, you have to be able + * to write the file to begin with, and triggering an incorrect (hash + * collision) nopwrite is no worse than simply writing to the file. + * That said, there are no known attacks against the checksum algorithms + * used for nopwrite, assuming that the salt and the checksums + * themselves remain secret. + */ +static int +zio_nop_write(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + blkptr_t *bp_orig = &zio->io_bp_orig; + zio_prop_t *zp = &zio->io_prop; + + ASSERT(BP_GET_LEVEL(bp) == 0); + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); + ASSERT(zp->zp_nopwrite); + ASSERT(!zp->zp_dedup); + ASSERT(zio->io_bp_override == NULL); + ASSERT(IO_IS_ALLOCATING(zio)); + + /* + * Check to see if the original bp and the new bp have matching + * characteristics (i.e. same checksum, compression algorithms, etc). + * If they don't then just continue with the pipeline which will + * allocate a new bp. + */ + if (BP_IS_HOLE(bp_orig) || + !(zio_checksum_table[BP_GET_CHECKSUM(bp)].ci_flags & + ZCHECKSUM_FLAG_NOPWRITE) || + BP_GET_CHECKSUM(bp) != BP_GET_CHECKSUM(bp_orig) || + BP_GET_COMPRESS(bp) != BP_GET_COMPRESS(bp_orig) || + BP_GET_DEDUP(bp) != BP_GET_DEDUP(bp_orig) || + zp->zp_copies != BP_GET_NDVAS(bp_orig)) + return (ZIO_PIPELINE_CONTINUE); + + /* + * If the checksums match then reset the pipeline so that we + * avoid allocating a new bp and issuing any I/O. + */ + if (ZIO_CHECKSUM_EQUAL(bp->blk_cksum, bp_orig->blk_cksum)) { + ASSERT(zio_checksum_table[zp->zp_checksum].ci_flags & + ZCHECKSUM_FLAG_NOPWRITE); + ASSERT3U(BP_GET_PSIZE(bp), ==, BP_GET_PSIZE(bp_orig)); + ASSERT3U(BP_GET_LSIZE(bp), ==, BP_GET_LSIZE(bp_orig)); + ASSERT(zp->zp_compress != ZIO_COMPRESS_OFF); + ASSERT(bcmp(&bp->blk_prop, &bp_orig->blk_prop, + sizeof (uint64_t)) == 0); + + *bp = *bp_orig; + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + zio->io_flags |= ZIO_FLAG_NOPWRITE; + } + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * ========================================================================== + * Dedup + * ========================================================================== + */ +static void +zio_ddt_child_read_done(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + ddt_entry_t *dde = zio->io_private; + ddt_phys_t *ddp; + zio_t *pio = zio_unique_parent(zio); + + mutex_enter(&pio->io_lock); + ddp = ddt_phys_select(dde, bp); + if (zio->io_error == 0) + ddt_phys_clear(ddp); /* this ddp doesn't need repair */ + + if (zio->io_error == 0 && dde->dde_repair_abd == NULL) + dde->dde_repair_abd = zio->io_abd; + else + abd_free(zio->io_abd); + mutex_exit(&pio->io_lock); +} + +static int +zio_ddt_read_start(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + int p; + + ASSERT(BP_GET_DEDUP(bp)); + ASSERT(BP_GET_PSIZE(bp) == zio->io_size); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + + if (zio->io_child_error[ZIO_CHILD_DDT]) { + ddt_t *ddt = ddt_select(zio->io_spa, bp); + ddt_entry_t *dde = ddt_repair_start(ddt, bp); + ddt_phys_t *ddp = dde->dde_phys; + ddt_phys_t *ddp_self = ddt_phys_select(dde, bp); + blkptr_t blk; + + ASSERT(zio->io_vsd == NULL); + zio->io_vsd = dde; + + if (ddp_self == NULL) + return (ZIO_PIPELINE_CONTINUE); + + for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) { + if (ddp->ddp_phys_birth == 0 || ddp == ddp_self) + continue; + ddt_bp_create(ddt->ddt_checksum, &dde->dde_key, ddp, + &blk); + zio_nowait(zio_read(zio, zio->io_spa, &blk, + abd_alloc_for_io(zio->io_size, B_TRUE), + zio->io_size, zio_ddt_child_read_done, dde, + zio->io_priority, ZIO_DDT_CHILD_FLAGS(zio) | + ZIO_FLAG_DONT_PROPAGATE, &zio->io_bookmark)); + } + return (ZIO_PIPELINE_CONTINUE); + } + + zio_nowait(zio_read(zio, zio->io_spa, bp, + zio->io_abd, zio->io_size, NULL, NULL, zio->io_priority, + ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark)); + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_ddt_read_done(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + + if (zio_wait_for_children(zio, ZIO_CHILD_DDT, ZIO_WAIT_DONE)) + return (ZIO_PIPELINE_STOP); + + ASSERT(BP_GET_DEDUP(bp)); + ASSERT(BP_GET_PSIZE(bp) == zio->io_size); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + + if (zio->io_child_error[ZIO_CHILD_DDT]) { + ddt_t *ddt = ddt_select(zio->io_spa, bp); + ddt_entry_t *dde = zio->io_vsd; + if (ddt == NULL) { + ASSERT(spa_load_state(zio->io_spa) != SPA_LOAD_NONE); + return (ZIO_PIPELINE_CONTINUE); + } + if (dde == NULL) { + zio->io_stage = ZIO_STAGE_DDT_READ_START >> 1; + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); + return (ZIO_PIPELINE_STOP); + } + if (dde->dde_repair_abd != NULL) { + abd_copy(zio->io_abd, dde->dde_repair_abd, + zio->io_size); + zio->io_child_error[ZIO_CHILD_DDT] = 0; + } + ddt_repair_done(ddt, dde); + zio->io_vsd = NULL; + } + + ASSERT(zio->io_vsd == NULL); + + return (ZIO_PIPELINE_CONTINUE); +} + +static boolean_t +zio_ddt_collision(zio_t *zio, ddt_t *ddt, ddt_entry_t *dde) +{ + spa_t *spa = zio->io_spa; + int p; + boolean_t do_raw = !!(zio->io_flags & ZIO_FLAG_RAW); + + ASSERT(!(zio->io_bp_override && do_raw)); + + /* + * Note: we compare the original data, not the transformed data, + * because when zio->io_bp is an override bp, we will not have + * pushed the I/O transforms. That's an important optimization + * because otherwise we'd compress/encrypt all dmu_sync() data twice. + * However, we should never get a raw, override zio so in these + * cases we can compare the io_data directly. This is useful because + * it allows us to do dedup verification even if we don't have access + * to the original data (for instance, if the encryption keys aren't + * loaded). + */ + + for (p = DDT_PHYS_SINGLE; p <= DDT_PHYS_TRIPLE; p++) { + zio_t *lio = dde->dde_lead_zio[p]; + + if (lio != NULL && do_raw) { + return (lio->io_size != zio->io_size || + abd_cmp(zio->io_abd, lio->io_abd) != 0); + } else if (lio != NULL) { + return (lio->io_orig_size != zio->io_orig_size || + abd_cmp(zio->io_orig_abd, lio->io_orig_abd) != 0); + } + } + + for (p = DDT_PHYS_SINGLE; p <= DDT_PHYS_TRIPLE; p++) { + ddt_phys_t *ddp = &dde->dde_phys[p]; + + if (ddp->ddp_phys_birth != 0 && do_raw) { + blkptr_t blk = *zio->io_bp; + uint64_t psize; + abd_t *tmpabd; + int error; + + ddt_bp_fill(ddp, &blk, ddp->ddp_phys_birth); + psize = BP_GET_PSIZE(&blk); + + if (psize != zio->io_size) + return (B_TRUE); + + ddt_exit(ddt); + + tmpabd = abd_alloc_for_io(psize, B_TRUE); + + error = zio_wait(zio_read(NULL, spa, &blk, tmpabd, + psize, NULL, NULL, ZIO_PRIORITY_SYNC_READ, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | + ZIO_FLAG_RAW, &zio->io_bookmark)); + + if (error == 0) { + if (abd_cmp(tmpabd, zio->io_abd) != 0) + error = SET_ERROR(ENOENT); + } + + abd_free(tmpabd); + ddt_enter(ddt); + return (error != 0); + } else if (ddp->ddp_phys_birth != 0) { + arc_buf_t *abuf = NULL; + arc_flags_t aflags = ARC_FLAG_WAIT; + blkptr_t blk = *zio->io_bp; + int error; + + ddt_bp_fill(ddp, &blk, ddp->ddp_phys_birth); + + if (BP_GET_LSIZE(&blk) != zio->io_orig_size) + return (B_TRUE); + + ddt_exit(ddt); + + error = arc_read(NULL, spa, &blk, + arc_getbuf_func, &abuf, ZIO_PRIORITY_SYNC_READ, + ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, + &aflags, &zio->io_bookmark); + + if (error == 0) { + if (abd_cmp_buf(zio->io_orig_abd, abuf->b_data, + zio->io_orig_size) != 0) + error = SET_ERROR(ENOENT); + arc_buf_destroy(abuf, &abuf); + } + + ddt_enter(ddt); + return (error != 0); + } + } + + return (B_FALSE); +} + +static void +zio_ddt_child_write_ready(zio_t *zio) +{ + int p = zio->io_prop.zp_copies; + ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); + ddt_entry_t *dde = zio->io_private; + ddt_phys_t *ddp = &dde->dde_phys[p]; + zio_t *pio; + zio_link_t *zl; + + if (zio->io_error) + return; + + ddt_enter(ddt); + + ASSERT(dde->dde_lead_zio[p] == zio); + + ddt_phys_fill(ddp, zio->io_bp); + + zl = NULL; + while ((pio = zio_walk_parents(zio, &zl)) != NULL) + ddt_bp_fill(ddp, pio->io_bp, zio->io_txg); + + ddt_exit(ddt); +} + +static void +zio_ddt_child_write_done(zio_t *zio) +{ + int p = zio->io_prop.zp_copies; + ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); + ddt_entry_t *dde = zio->io_private; + ddt_phys_t *ddp = &dde->dde_phys[p]; + + ddt_enter(ddt); + + ASSERT(ddp->ddp_refcnt == 0); + ASSERT(dde->dde_lead_zio[p] == zio); + dde->dde_lead_zio[p] = NULL; + + if (zio->io_error == 0) { + zio_link_t *zl = NULL; + while (zio_walk_parents(zio, &zl) != NULL) + ddt_phys_addref(ddp); + } else { + ddt_phys_clear(ddp); + } + + ddt_exit(ddt); +} + +static void +zio_ddt_ditto_write_done(zio_t *zio) +{ + int p = DDT_PHYS_DITTO; + blkptr_t *bp = zio->io_bp; + ddt_t *ddt = ddt_select(zio->io_spa, bp); + ddt_entry_t *dde = zio->io_private; + ddt_phys_t *ddp = &dde->dde_phys[p]; + ddt_key_t *ddk = &dde->dde_key; + ASSERTV(zio_prop_t *zp = &zio->io_prop); + + ddt_enter(ddt); + + ASSERT(ddp->ddp_refcnt == 0); + ASSERT(dde->dde_lead_zio[p] == zio); + dde->dde_lead_zio[p] = NULL; + + if (zio->io_error == 0) { + ASSERT(ZIO_CHECKSUM_EQUAL(bp->blk_cksum, ddk->ddk_cksum)); + ASSERT(zp->zp_copies < SPA_DVAS_PER_BP); + ASSERT(zp->zp_copies == BP_GET_NDVAS(bp) - BP_IS_GANG(bp)); + if (ddp->ddp_phys_birth != 0) + ddt_phys_free(ddt, ddk, ddp, zio->io_txg); + ddt_phys_fill(ddp, bp); + } + + ddt_exit(ddt); +} + +static int +zio_ddt_write(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + blkptr_t *bp = zio->io_bp; + uint64_t txg = zio->io_txg; + zio_prop_t *zp = &zio->io_prop; + int p = zp->zp_copies; + int ditto_copies; + zio_t *cio = NULL; + zio_t *dio = NULL; + ddt_t *ddt = ddt_select(spa, bp); + ddt_entry_t *dde; + ddt_phys_t *ddp; + + ASSERT(BP_GET_DEDUP(bp)); + ASSERT(BP_GET_CHECKSUM(bp) == zp->zp_checksum); + ASSERT(BP_IS_HOLE(bp) || zio->io_bp_override); + ASSERT(!(zio->io_bp_override && (zio->io_flags & ZIO_FLAG_RAW))); + + ddt_enter(ddt); + dde = ddt_lookup(ddt, bp, B_TRUE); + ddp = &dde->dde_phys[p]; + + if (zp->zp_dedup_verify && zio_ddt_collision(zio, ddt, dde)) { + /* + * If we're using a weak checksum, upgrade to a strong checksum + * and try again. If we're already using a strong checksum, + * we can't resolve it, so just convert to an ordinary write. + * (And automatically e-mail a paper to Nature?) + */ + if (!(zio_checksum_table[zp->zp_checksum].ci_flags & + ZCHECKSUM_FLAG_DEDUP)) { + zp->zp_checksum = spa_dedup_checksum(spa); + zio_pop_transforms(zio); + zio->io_stage = ZIO_STAGE_OPEN; + BP_ZERO(bp); + } else { + zp->zp_dedup = B_FALSE; + } + zio->io_pipeline = ZIO_WRITE_PIPELINE; + ddt_exit(ddt); + return (ZIO_PIPELINE_CONTINUE); + } + + ditto_copies = ddt_ditto_copies_needed(ddt, dde, ddp); + ASSERT(ditto_copies < SPA_DVAS_PER_BP); + + if (ditto_copies > ddt_ditto_copies_present(dde) && + dde->dde_lead_zio[DDT_PHYS_DITTO] == NULL) { + zio_prop_t czp = *zp; + + czp.zp_copies = ditto_copies; + + /* + * If we arrived here with an override bp, we won't have run + * the transform stack, so we won't have the data we need to + * generate a child i/o. So, toss the override bp and restart. + * This is safe, because using the override bp is just an + * optimization; and it's rare, so the cost doesn't matter. + */ + if (zio->io_bp_override) { + zio_pop_transforms(zio); + zio->io_stage = ZIO_STAGE_OPEN; + zio->io_pipeline = ZIO_WRITE_PIPELINE; + zio->io_bp_override = NULL; + BP_ZERO(bp); + ddt_exit(ddt); + return (ZIO_PIPELINE_CONTINUE); + } + + dio = zio_write(zio, spa, txg, bp, zio->io_orig_abd, + zio->io_orig_size, zio->io_orig_size, &czp, NULL, NULL, + NULL, zio_ddt_ditto_write_done, dde, zio->io_priority, + ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); + + zio_push_transform(dio, zio->io_abd, zio->io_size, 0, NULL); + dde->dde_lead_zio[DDT_PHYS_DITTO] = dio; + } + + if (ddp->ddp_phys_birth != 0 || dde->dde_lead_zio[p] != NULL) { + if (ddp->ddp_phys_birth != 0) + ddt_bp_fill(ddp, bp, txg); + if (dde->dde_lead_zio[p] != NULL) + zio_add_child(zio, dde->dde_lead_zio[p]); + else + ddt_phys_addref(ddp); + } else if (zio->io_bp_override) { + ASSERT(bp->blk_birth == txg); + ASSERT(BP_EQUAL(bp, zio->io_bp_override)); + ddt_phys_fill(ddp, bp); + ddt_phys_addref(ddp); + } else { + cio = zio_write(zio, spa, txg, bp, zio->io_orig_abd, + zio->io_orig_size, zio->io_orig_size, zp, + zio_ddt_child_write_ready, NULL, NULL, + zio_ddt_child_write_done, dde, zio->io_priority, + ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); + + zio_push_transform(cio, zio->io_abd, zio->io_size, 0, NULL); + dde->dde_lead_zio[p] = cio; + } + + ddt_exit(ddt); + + if (cio) + zio_nowait(cio); + if (dio) + zio_nowait(dio); + + return (ZIO_PIPELINE_CONTINUE); +} + +ddt_entry_t *freedde; /* for debugging */ + +static int +zio_ddt_free(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + blkptr_t *bp = zio->io_bp; + ddt_t *ddt = ddt_select(spa, bp); + ddt_entry_t *dde; + ddt_phys_t *ddp; + + ASSERT(BP_GET_DEDUP(bp)); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + + ddt_enter(ddt); + freedde = dde = ddt_lookup(ddt, bp, B_TRUE); + if (dde) { + ddp = ddt_phys_select(dde, bp); + if (ddp) + ddt_phys_decref(ddp); + } + ddt_exit(ddt); + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * ========================================================================== + * Allocate and free blocks + * ========================================================================== + */ + +static zio_t * +zio_io_to_allocate(spa_t *spa) +{ + zio_t *zio; + + ASSERT(MUTEX_HELD(&spa->spa_alloc_lock)); + + zio = avl_first(&spa->spa_alloc_tree); + if (zio == NULL) + return (NULL); + + ASSERT(IO_IS_ALLOCATING(zio)); + + /* + * Try to place a reservation for this zio. If we're unable to + * reserve then we throttle. + */ + if (!metaslab_class_throttle_reserve(spa_normal_class(spa), + zio->io_prop.zp_copies, zio, 0)) { + return (NULL); + } + + avl_remove(&spa->spa_alloc_tree, zio); + ASSERT3U(zio->io_stage, <, ZIO_STAGE_DVA_ALLOCATE); + + return (zio); +} + +static int +zio_dva_throttle(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + zio_t *nio; + + if (zio->io_priority == ZIO_PRIORITY_SYNC_WRITE || + !spa_normal_class(zio->io_spa)->mc_alloc_throttle_enabled || + zio->io_child_type == ZIO_CHILD_GANG || + zio->io_flags & ZIO_FLAG_NODATA) { + return (ZIO_PIPELINE_CONTINUE); + } + + ASSERT(zio->io_child_type > ZIO_CHILD_GANG); + + ASSERT3U(zio->io_queued_timestamp, >, 0); + ASSERT(zio->io_stage == ZIO_STAGE_DVA_THROTTLE); + + mutex_enter(&spa->spa_alloc_lock); + + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + avl_add(&spa->spa_alloc_tree, zio); + + nio = zio_io_to_allocate(zio->io_spa); + mutex_exit(&spa->spa_alloc_lock); + + if (nio == zio) + return (ZIO_PIPELINE_CONTINUE); + + if (nio != NULL) { + ASSERT(nio->io_stage == ZIO_STAGE_DVA_THROTTLE); + /* + * We are passing control to a new zio so make sure that + * it is processed by a different thread. We do this to + * avoid stack overflows that can occur when parents are + * throttled and children are making progress. We allow + * it to go to the head of the taskq since it's already + * been waiting. + */ + zio_taskq_dispatch(nio, ZIO_TASKQ_ISSUE, B_TRUE); + } + return (ZIO_PIPELINE_STOP); +} + +void +zio_allocate_dispatch(spa_t *spa) +{ + zio_t *zio; + + mutex_enter(&spa->spa_alloc_lock); + zio = zio_io_to_allocate(spa); + mutex_exit(&spa->spa_alloc_lock); + if (zio == NULL) + return; + + ASSERT3U(zio->io_stage, ==, ZIO_STAGE_DVA_THROTTLE); + ASSERT0(zio->io_error); + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_TRUE); +} + +static int +zio_dva_allocate(zio_t *zio) +{ + spa_t *spa = zio->io_spa; + metaslab_class_t *mc = spa_normal_class(spa); + blkptr_t *bp = zio->io_bp; + int error; + int flags = 0; + + if (zio->io_gang_leader == NULL) { + ASSERT(zio->io_child_type > ZIO_CHILD_GANG); + zio->io_gang_leader = zio; + } + + ASSERT(BP_IS_HOLE(bp)); + ASSERT0(BP_GET_NDVAS(bp)); + ASSERT3U(zio->io_prop.zp_copies, >, 0); + ASSERT3U(zio->io_prop.zp_copies, <=, spa_max_replication(spa)); + ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); + + flags |= (zio->io_flags & ZIO_FLAG_FASTWRITE) ? METASLAB_FASTWRITE : 0; + if (zio->io_flags & ZIO_FLAG_NODATA) + flags |= METASLAB_DONT_THROTTLE; + if (zio->io_flags & ZIO_FLAG_GANG_CHILD) + flags |= METASLAB_GANG_CHILD; + if (zio->io_priority == ZIO_PRIORITY_ASYNC_WRITE) + flags |= METASLAB_ASYNC_ALLOC; + + error = metaslab_alloc(spa, mc, zio->io_size, bp, + zio->io_prop.zp_copies, zio->io_txg, NULL, flags, + &zio->io_alloc_list, zio); + + if (error != 0) { + spa_dbgmsg(spa, "%s: metaslab allocation failure: zio %p, " + "size %llu, error %d", spa_name(spa), zio, zio->io_size, + error); + if (error == ENOSPC && zio->io_size > SPA_MINBLOCKSIZE) + return (zio_write_gang_block(zio)); + zio->io_error = error; + } + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_dva_free(zio_t *zio) +{ + metaslab_free(zio->io_spa, zio->io_bp, zio->io_txg, B_FALSE); + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_dva_claim(zio_t *zio) +{ + int error; + + error = metaslab_claim(zio->io_spa, zio->io_bp, zio->io_txg); + if (error) + zio->io_error = error; + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * Undo an allocation. This is used by zio_done() when an I/O fails + * and we want to give back the block we just allocated. + * This handles both normal blocks and gang blocks. + */ +static void +zio_dva_unallocate(zio_t *zio, zio_gang_node_t *gn, blkptr_t *bp) +{ + int g; + + ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp)); + ASSERT(zio->io_bp_override == NULL); + + if (!BP_IS_HOLE(bp)) + metaslab_free(zio->io_spa, bp, bp->blk_birth, B_TRUE); + + if (gn != NULL) { + for (g = 0; g < SPA_GBH_NBLKPTRS; g++) { + zio_dva_unallocate(zio, gn->gn_child[g], + &gn->gn_gbh->zg_blkptr[g]); + } + } +} + +/* + * Try to allocate an intent log block. Return 0 on success, errno on failure. + */ +int +zio_alloc_zil(spa_t *spa, uint64_t txg, blkptr_t *new_bp, uint64_t size, + boolean_t *slog) +{ + int error = 1; + zio_alloc_list_t io_alloc_list; + + ASSERT(txg > spa_syncing_txg(spa)); + + metaslab_trace_init(&io_alloc_list); + error = metaslab_alloc(spa, spa_log_class(spa), size, new_bp, 1, + txg, NULL, METASLAB_FASTWRITE, &io_alloc_list, NULL); + if (error == 0) { + *slog = TRUE; + } else { + error = metaslab_alloc(spa, spa_normal_class(spa), size, + new_bp, 1, txg, NULL, METASLAB_FASTWRITE, + &io_alloc_list, NULL); + if (error == 0) + *slog = FALSE; + } + metaslab_trace_fini(&io_alloc_list); + + if (error == 0) { + BP_SET_LSIZE(new_bp, size); + BP_SET_PSIZE(new_bp, size); + BP_SET_COMPRESS(new_bp, ZIO_COMPRESS_OFF); + BP_SET_CHECKSUM(new_bp, + spa_version(spa) >= SPA_VERSION_SLIM_ZIL + ? ZIO_CHECKSUM_ZILOG2 : ZIO_CHECKSUM_ZILOG); + BP_SET_TYPE(new_bp, DMU_OT_INTENT_LOG); + BP_SET_LEVEL(new_bp, 0); + BP_SET_DEDUP(new_bp, 0); + BP_SET_BYTEORDER(new_bp, ZFS_HOST_BYTEORDER); + } + + return (error); +} + +/* + * Free an intent log block. + */ +void +zio_free_zil(spa_t *spa, uint64_t txg, blkptr_t *bp) +{ + ASSERT(BP_GET_TYPE(bp) == DMU_OT_INTENT_LOG); + ASSERT(!BP_IS_GANG(bp)); + + zio_free(spa, txg, bp); +} + +/* + * ========================================================================== + * Read and write to physical devices + * ========================================================================== + */ + + +/* + * Issue an I/O to the underlying vdev. Typically the issue pipeline + * stops after this stage and will resume upon I/O completion. + * However, there are instances where the vdev layer may need to + * continue the pipeline when an I/O was not issued. Since the I/O + * that was sent to the vdev layer might be different than the one + * currently active in the pipeline (see vdev_queue_io()), we explicitly + * force the underlying vdev layers to call either zio_execute() or + * zio_interrupt() to ensure that the pipeline continues with the correct I/O. + */ +static int +zio_vdev_io_start(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + uint64_t align; + spa_t *spa = zio->io_spa; + + zio->io_delay = 0; + + ASSERT(zio->io_error == 0); + ASSERT(zio->io_child_error[ZIO_CHILD_VDEV] == 0); + + if (vd == NULL) { + if (!(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) + spa_config_enter(spa, SCL_ZIO, zio, RW_READER); + + /* + * The mirror_ops handle multiple DVAs in a single BP. + */ + vdev_mirror_ops.vdev_op_io_start(zio); + return (ZIO_PIPELINE_STOP); + } + + ASSERT3P(zio->io_logical, !=, zio); + + /* + * We keep track of time-sensitive I/Os so that the scan thread + * can quickly react to certain workloads. In particular, we care + * about non-scrubbing, top-level reads and writes with the following + * characteristics: + * - synchronous writes of user data to non-slog devices + * - any reads of user data + * When these conditions are met, adjust the timestamp of spa_last_io + * which allows the scan thread to adjust its workload accordingly. + */ + if (!(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && zio->io_bp != NULL && + vd == vd->vdev_top && !vd->vdev_islog && + zio->io_bookmark.zb_objset != DMU_META_OBJSET && + zio->io_txg != spa_syncing_txg(spa)) { + uint64_t old = spa->spa_last_io; + uint64_t new = ddi_get_lbolt64(); + if (old != new) + (void) atomic_cas_64(&spa->spa_last_io, old, new); + } + + align = 1ULL << vd->vdev_top->vdev_ashift; + + if (!(zio->io_flags & ZIO_FLAG_PHYSICAL) && + P2PHASE(zio->io_size, align) != 0) { + /* Transform logical writes to be a full physical block size. */ + uint64_t asize = P2ROUNDUP(zio->io_size, align); + abd_t *abuf = abd_alloc_sametype(zio->io_abd, asize); + ASSERT(vd == vd->vdev_top); + if (zio->io_type == ZIO_TYPE_WRITE) { + abd_copy(abuf, zio->io_abd, zio->io_size); + abd_zero_off(abuf, zio->io_size, asize - zio->io_size); + } + zio_push_transform(zio, abuf, asize, asize, zio_subblock); + } + + /* + * If this is not a physical io, make sure that it is properly aligned + * before proceeding. + */ + if (!(zio->io_flags & ZIO_FLAG_PHYSICAL)) { + ASSERT0(P2PHASE(zio->io_offset, align)); + ASSERT0(P2PHASE(zio->io_size, align)); + } else { + /* + * For physical writes, we allow 512b aligned writes and assume + * the device will perform a read-modify-write as necessary. + */ + ASSERT0(P2PHASE(zio->io_offset, SPA_MINBLOCKSIZE)); + ASSERT0(P2PHASE(zio->io_size, SPA_MINBLOCKSIZE)); + } + + VERIFY(zio->io_type != ZIO_TYPE_WRITE || spa_writeable(spa)); + + /* + * If this is a repair I/O, and there's no self-healing involved -- + * that is, we're just resilvering what we expect to resilver -- + * then don't do the I/O unless zio's txg is actually in vd's DTL. + * This prevents spurious resilvering with nested replication. + * For example, given a mirror of mirrors, (A+B)+(C+D), if only + * A is out of date, we'll read from C+D, then use the data to + * resilver A+B -- but we don't actually want to resilver B, just A. + * The top-level mirror has no way to know this, so instead we just + * discard unnecessary repairs as we work our way down the vdev tree. + * The same logic applies to any form of nested replication: + * ditto + mirror, RAID-Z + replacing, etc. This covers them all. + */ + if ((zio->io_flags & ZIO_FLAG_IO_REPAIR) && + !(zio->io_flags & ZIO_FLAG_SELF_HEAL) && + zio->io_txg != 0 && /* not a delegated i/o */ + !vdev_dtl_contains(vd, DTL_PARTIAL, zio->io_txg, 1)) { + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + zio_vdev_io_bypass(zio); + return (ZIO_PIPELINE_CONTINUE); + } + + if (vd->vdev_ops->vdev_op_leaf && + (zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE)) { + + if (zio->io_type == ZIO_TYPE_READ && vdev_cache_read(zio)) + return (ZIO_PIPELINE_CONTINUE); + + if ((zio = vdev_queue_io(zio)) == NULL) + return (ZIO_PIPELINE_STOP); + + if (!vdev_accessible(vd, zio)) { + zio->io_error = SET_ERROR(ENXIO); + zio_interrupt(zio); + return (ZIO_PIPELINE_STOP); + } + zio->io_delay = gethrtime(); + } + + vd->vdev_ops->vdev_op_io_start(zio); + return (ZIO_PIPELINE_STOP); +} + +static int +zio_vdev_io_done(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + vdev_ops_t *ops = vd ? vd->vdev_ops : &vdev_mirror_ops; + boolean_t unexpected_error = B_FALSE; + + if (zio_wait_for_children(zio, ZIO_CHILD_VDEV, ZIO_WAIT_DONE)) + return (ZIO_PIPELINE_STOP); + + ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE); + + if (zio->io_delay) + zio->io_delay = gethrtime() - zio->io_delay; + + if (vd != NULL && vd->vdev_ops->vdev_op_leaf) { + + vdev_queue_io_done(zio); + + if (zio->io_type == ZIO_TYPE_WRITE) + vdev_cache_write(zio); + + if (zio_injection_enabled && zio->io_error == 0) + zio->io_error = zio_handle_device_injection(vd, + zio, EIO); + + if (zio_injection_enabled && zio->io_error == 0) + zio->io_error = zio_handle_label_injection(zio, EIO); + + if (zio->io_error) { + if (!vdev_accessible(vd, zio)) { + zio->io_error = SET_ERROR(ENXIO); + } else { + unexpected_error = B_TRUE; + } + } + } + + ops->vdev_op_io_done(zio); + + if (unexpected_error) + VERIFY(vdev_probe(vd, zio) == NULL); + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * For non-raidz ZIOs, we can just copy aside the bad data read from the + * disk, and use that to finish the checksum ereport later. + */ +static void +zio_vsd_default_cksum_finish(zio_cksum_report_t *zcr, + const abd_t *good_buf) +{ + /* no processing needed */ + zfs_ereport_finish_checksum(zcr, good_buf, zcr->zcr_cbdata, B_FALSE); +} + +/*ARGSUSED*/ +void +zio_vsd_default_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *ignored) +{ + void *abd = abd_alloc_sametype(zio->io_abd, zio->io_size); + + abd_copy(abd, zio->io_abd, zio->io_size); + + zcr->zcr_cbinfo = zio->io_size; + zcr->zcr_cbdata = abd; + zcr->zcr_finish = zio_vsd_default_cksum_finish; + zcr->zcr_free = zio_abd_free; +} + +static int +zio_vdev_io_assess(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + + if (zio_wait_for_children(zio, ZIO_CHILD_VDEV, ZIO_WAIT_DONE)) + return (ZIO_PIPELINE_STOP); + + if (vd == NULL && !(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) + spa_config_exit(zio->io_spa, SCL_ZIO, zio); + + if (zio->io_vsd != NULL) { + zio->io_vsd_ops->vsd_free(zio); + zio->io_vsd = NULL; + } + + if (zio_injection_enabled && zio->io_error == 0) + zio->io_error = zio_handle_fault_injection(zio, EIO); + + /* + * If the I/O failed, determine whether we should attempt to retry it. + * + * On retry, we cut in line in the issue queue, since we don't want + * compression/checksumming/etc. work to prevent our (cheap) IO reissue. + */ + if (zio->io_error && vd == NULL && + !(zio->io_flags & (ZIO_FLAG_DONT_RETRY | ZIO_FLAG_IO_RETRY))) { + ASSERT(!(zio->io_flags & ZIO_FLAG_DONT_QUEUE)); /* not a leaf */ + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_BYPASS)); /* not a leaf */ + zio->io_error = 0; + zio->io_flags |= ZIO_FLAG_IO_RETRY | + ZIO_FLAG_DONT_CACHE | ZIO_FLAG_DONT_AGGREGATE; + zio->io_stage = ZIO_STAGE_VDEV_IO_START >> 1; + zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, + zio_requeue_io_start_cut_in_line); + return (ZIO_PIPELINE_STOP); + } + + /* + * If we got an error on a leaf device, convert it to ENXIO + * if the device is not accessible at all. + */ + if (zio->io_error && vd != NULL && vd->vdev_ops->vdev_op_leaf && + !vdev_accessible(vd, zio)) + zio->io_error = SET_ERROR(ENXIO); + + /* + * If we can't write to an interior vdev (mirror or RAID-Z), + * set vdev_cant_write so that we stop trying to allocate from it. + */ + if (zio->io_error == ENXIO && zio->io_type == ZIO_TYPE_WRITE && + vd != NULL && !vd->vdev_ops->vdev_op_leaf) { + vd->vdev_cant_write = B_TRUE; + } + + /* + * If a cache flush returns ENOTSUP or ENOTTY, we know that no future + * attempts will ever succeed. In this case we set a persistent bit so + * that we don't bother with it in the future. + */ + if ((zio->io_error == ENOTSUP || zio->io_error == ENOTTY) && + zio->io_type == ZIO_TYPE_IOCTL && + zio->io_cmd == DKIOCFLUSHWRITECACHE && vd != NULL) + vd->vdev_nowritecache = B_TRUE; + + if (zio->io_error) + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + + if (vd != NULL && vd->vdev_ops->vdev_op_leaf && + zio->io_physdone != NULL) { + ASSERT(!(zio->io_flags & ZIO_FLAG_DELEGATED)); + ASSERT(zio->io_child_type == ZIO_CHILD_VDEV); + zio->io_physdone(zio->io_logical); + } + + return (ZIO_PIPELINE_CONTINUE); +} + +void +zio_vdev_io_reissue(zio_t *zio) +{ + ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); + ASSERT(zio->io_error == 0); + + zio->io_stage >>= 1; +} + +void +zio_vdev_io_redone(zio_t *zio) +{ + ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_DONE); + + zio->io_stage >>= 1; +} + +void +zio_vdev_io_bypass(zio_t *zio) +{ + ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); + ASSERT(zio->io_error == 0); + + zio->io_flags |= ZIO_FLAG_IO_BYPASS; + zio->io_stage = ZIO_STAGE_VDEV_IO_ASSESS >> 1; +} + +/* + * ========================================================================== + * Generate and verify checksums + * ========================================================================== + */ +static int +zio_checksum_generate(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + enum zio_checksum checksum; + + if (bp == NULL) { + /* + * This is zio_write_phys(). + * We're either generating a label checksum, or none at all. + */ + checksum = zio->io_prop.zp_checksum; + + if (checksum == ZIO_CHECKSUM_OFF) + return (ZIO_PIPELINE_CONTINUE); + + ASSERT(checksum == ZIO_CHECKSUM_LABEL); + } else { + if (BP_IS_GANG(bp) && zio->io_child_type == ZIO_CHILD_GANG) { + ASSERT(!IO_IS_ALLOCATING(zio)); + checksum = ZIO_CHECKSUM_GANG_HEADER; + } else { + checksum = BP_GET_CHECKSUM(bp); + } + } + + zio_checksum_compute(zio, checksum, zio->io_abd, zio->io_size); + + return (ZIO_PIPELINE_CONTINUE); +} + +static int +zio_checksum_verify(zio_t *zio) +{ + zio_bad_cksum_t info; + blkptr_t *bp = zio->io_bp; + int error; + + ASSERT(zio->io_vd != NULL); + + if (bp == NULL) { + /* + * This is zio_read_phys(). + * We're either verifying a label checksum, or nothing at all. + */ + if (zio->io_prop.zp_checksum == ZIO_CHECKSUM_OFF) + return (ZIO_PIPELINE_CONTINUE); + + ASSERT(zio->io_prop.zp_checksum == ZIO_CHECKSUM_LABEL); + } + + if ((error = zio_checksum_error(zio, &info)) != 0) { + zio->io_error = error; + if (error == ECKSUM && + !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { + zfs_ereport_start_checksum(zio->io_spa, + zio->io_vd, zio, zio->io_offset, + zio->io_size, NULL, &info); + } + } + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * Called by RAID-Z to ensure we don't compute the checksum twice. + */ +void +zio_checksum_verified(zio_t *zio) +{ + zio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY; +} + +/* + * ========================================================================== + * Error rank. Error are ranked in the order 0, ENXIO, ECKSUM, EIO, other. + * An error of 0 indicates success. ENXIO indicates whole-device failure, + * which may be transient (e.g. unplugged) or permament. ECKSUM and EIO + * indicate errors that are specific to one I/O, and most likely permanent. + * Any other error is presumed to be worse because we weren't expecting it. + * ========================================================================== + */ +int +zio_worst_error(int e1, int e2) +{ + static int zio_error_rank[] = { 0, ENXIO, ECKSUM, EIO }; + int r1, r2; + + for (r1 = 0; r1 < sizeof (zio_error_rank) / sizeof (int); r1++) + if (e1 == zio_error_rank[r1]) + break; + + for (r2 = 0; r2 < sizeof (zio_error_rank) / sizeof (int); r2++) + if (e2 == zio_error_rank[r2]) + break; + + return (r1 > r2 ? e1 : e2); +} + +/* + * ========================================================================== + * I/O completion + * ========================================================================== + */ +static int +zio_ready(zio_t *zio) +{ + blkptr_t *bp = zio->io_bp; + zio_t *pio, *pio_next; + zio_link_t *zl = NULL; + + if (zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_READY) || + zio_wait_for_children(zio, ZIO_CHILD_DDT, ZIO_WAIT_READY)) + return (ZIO_PIPELINE_STOP); + + if (zio->io_ready) { + ASSERT(IO_IS_ALLOCATING(zio)); + ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp) || + (zio->io_flags & ZIO_FLAG_NOPWRITE)); + ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0); + + zio->io_ready(zio); + } + + if (bp != NULL && bp != &zio->io_bp_copy) + zio->io_bp_copy = *bp; + + if (zio->io_error != 0) { + zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; + + if (zio->io_flags & ZIO_FLAG_IO_ALLOCATING) { + ASSERT(IO_IS_ALLOCATING(zio)); + ASSERT(zio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); + /* + * We were unable to allocate anything, unreserve and + * issue the next I/O to allocate. + */ + metaslab_class_throttle_unreserve( + spa_normal_class(zio->io_spa), + zio->io_prop.zp_copies, zio); + zio_allocate_dispatch(zio->io_spa); + } + } + + mutex_enter(&zio->io_lock); + zio->io_state[ZIO_WAIT_READY] = 1; + pio = zio_walk_parents(zio, &zl); + mutex_exit(&zio->io_lock); + + /* + * As we notify zio's parents, new parents could be added. + * New parents go to the head of zio's io_parent_list, however, + * so we will (correctly) not notify them. The remainder of zio's + * io_parent_list, from 'pio_next' onward, cannot change because + * all parents must wait for us to be done before they can be done. + */ + for (; pio != NULL; pio = pio_next) { + pio_next = zio_walk_parents(zio, &zl); + zio_notify_parent(pio, zio, ZIO_WAIT_READY); + } + + if (zio->io_flags & ZIO_FLAG_NODATA) { + if (BP_IS_GANG(bp)) { + zio->io_flags &= ~ZIO_FLAG_NODATA; + } else { + ASSERT((uintptr_t)zio->io_abd < SPA_MAXBLOCKSIZE); + zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; + } + } + + if (zio_injection_enabled && + zio->io_spa->spa_syncing_txg == zio->io_txg) + zio_handle_ignored_writes(zio); + + return (ZIO_PIPELINE_CONTINUE); +} + +/* + * Update the allocation throttle accounting. + */ +static void +zio_dva_throttle_done(zio_t *zio) +{ + zio_t *pio = zio_unique_parent(zio); + vdev_t *vd = zio->io_vd; + int flags = METASLAB_ASYNC_ALLOC; + ASSERTV(zio_t *lio = zio->io_logical); + + ASSERT3P(zio->io_bp, !=, NULL); + ASSERT3U(zio->io_type, ==, ZIO_TYPE_WRITE); + ASSERT3U(zio->io_priority, ==, ZIO_PRIORITY_ASYNC_WRITE); + ASSERT3U(zio->io_child_type, ==, ZIO_CHILD_VDEV); + ASSERT(vd != NULL); + ASSERT3P(vd, ==, vd->vdev_top); + ASSERT(zio_injection_enabled || !(zio->io_flags & ZIO_FLAG_IO_RETRY)); + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REPAIR)); + ASSERT(zio->io_flags & ZIO_FLAG_IO_ALLOCATING); + ASSERT(!(lio->io_flags & ZIO_FLAG_IO_REWRITE)); + ASSERT(!(lio->io_orig_flags & ZIO_FLAG_NODATA)); + + /* + * Parents of gang children can have two flavors -- ones that + * allocated the gang header (will have ZIO_FLAG_IO_REWRITE set) + * and ones that allocated the constituent blocks. The allocation + * throttle needs to know the allocating parent zio so we must find + * it here. + */ + if (pio->io_child_type == ZIO_CHILD_GANG) { + /* + * If our parent is a rewrite gang child then our grandparent + * would have been the one that performed the allocation. + */ + if (pio->io_flags & ZIO_FLAG_IO_REWRITE) + pio = zio_unique_parent(pio); + flags |= METASLAB_GANG_CHILD; + } + + ASSERT(IO_IS_ALLOCATING(pio)); + ASSERT3P(zio, !=, zio->io_logical); + ASSERT(zio->io_logical != NULL); + ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REPAIR)); + ASSERT0(zio->io_flags & ZIO_FLAG_NOPWRITE); + + mutex_enter(&pio->io_lock); + metaslab_group_alloc_decrement(zio->io_spa, vd->vdev_id, pio, flags); + mutex_exit(&pio->io_lock); + + metaslab_class_throttle_unreserve(spa_normal_class(zio->io_spa), + 1, pio); + + /* + * Call into the pipeline to see if there is more work that + * needs to be done. If there is work to be done it will be + * dispatched to another taskq thread. + */ + zio_allocate_dispatch(zio->io_spa); +} + +static int +zio_done(zio_t *zio) +{ + /* + * Always attempt to keep stack usage minimal here since + * we can be called recurisvely up to 19 levels deep. + */ + const uint64_t psize = zio->io_size; + zio_t *pio, *pio_next; + int c, w; + zio_link_t *zl = NULL; + + /* + * If our children haven't all completed, + * wait for them and then repeat this pipeline stage. + */ + if (zio_wait_for_children(zio, ZIO_CHILD_VDEV, ZIO_WAIT_DONE) || + zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_DONE) || + zio_wait_for_children(zio, ZIO_CHILD_DDT, ZIO_WAIT_DONE) || + zio_wait_for_children(zio, ZIO_CHILD_LOGICAL, ZIO_WAIT_DONE)) + return (ZIO_PIPELINE_STOP); + + /* + * If the allocation throttle is enabled, then update the accounting. + * We only track child I/Os that are part of an allocating async + * write. We must do this since the allocation is performed + * by the logical I/O but the actual write is done by child I/Os. + */ + if (zio->io_flags & ZIO_FLAG_IO_ALLOCATING && + zio->io_child_type == ZIO_CHILD_VDEV) { + ASSERT(spa_normal_class( + zio->io_spa)->mc_alloc_throttle_enabled); + zio_dva_throttle_done(zio); + } + + /* + * If the allocation throttle is enabled, verify that + * we have decremented the refcounts for every I/O that was throttled. + */ + if (zio->io_flags & ZIO_FLAG_IO_ALLOCATING) { + ASSERT(zio->io_type == ZIO_TYPE_WRITE); + ASSERT(zio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); + ASSERT(zio->io_bp != NULL); + metaslab_group_alloc_verify(zio->io_spa, zio->io_bp, zio); + VERIFY(refcount_not_held( + &(spa_normal_class(zio->io_spa)->mc_alloc_slots), zio)); + } + + + for (c = 0; c < ZIO_CHILD_TYPES; c++) + for (w = 0; w < ZIO_WAIT_TYPES; w++) + ASSERT(zio->io_children[c][w] == 0); + + if (zio->io_bp != NULL && !BP_IS_EMBEDDED(zio->io_bp)) { + ASSERT(zio->io_bp->blk_pad[0] == 0); + ASSERT(zio->io_bp->blk_pad[1] == 0); + ASSERT(bcmp(zio->io_bp, &zio->io_bp_copy, + sizeof (blkptr_t)) == 0 || + (zio->io_bp == zio_unique_parent(zio)->io_bp)); + if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(zio->io_bp) && + zio->io_bp_override == NULL && + !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) { + ASSERT(!BP_SHOULD_BYTESWAP(zio->io_bp)); + ASSERT3U(zio->io_prop.zp_copies, <=, + BP_GET_NDVAS(zio->io_bp)); + ASSERT(BP_COUNT_GANG(zio->io_bp) == 0 || + (BP_COUNT_GANG(zio->io_bp) == + BP_GET_NDVAS(zio->io_bp))); + } + if (zio->io_flags & ZIO_FLAG_NOPWRITE) + VERIFY(BP_EQUAL(zio->io_bp, &zio->io_bp_orig)); + } + + /* + * If there were child vdev/gang/ddt errors, they apply to us now. + */ + zio_inherit_child_errors(zio, ZIO_CHILD_VDEV); + zio_inherit_child_errors(zio, ZIO_CHILD_GANG); + zio_inherit_child_errors(zio, ZIO_CHILD_DDT); + + /* + * If the I/O on the transformed data was successful, generate any + * checksum reports now while we still have the transformed data. + */ + if (zio->io_error == 0) { + while (zio->io_cksum_report != NULL) { + zio_cksum_report_t *zcr = zio->io_cksum_report; + uint64_t align = zcr->zcr_align; + uint64_t asize = P2ROUNDUP(psize, align); + abd_t *adata = zio->io_abd; + + if (asize != psize) { + adata = abd_alloc(asize, B_TRUE); + abd_copy(adata, zio->io_abd, psize); + abd_zero_off(adata, psize, asize - psize); + } + + zio->io_cksum_report = zcr->zcr_next; + zcr->zcr_next = NULL; + zcr->zcr_finish(zcr, adata); + zfs_ereport_free_checksum(zcr); + + if (asize != psize) + abd_free(adata); + } + } + + zio_pop_transforms(zio); /* note: may set zio->io_error */ + + vdev_stat_update(zio, psize); + + /* + * If this I/O is attached to a particular vdev is slow, exceeding + * 30 seconds to complete, post an error described the I/O delay. + * We ignore these errors if the device is currently unavailable. + */ + if (zio->io_delay >= MSEC2NSEC(zio_delay_max)) { + if (zio->io_vd != NULL && !vdev_is_dead(zio->io_vd)) + zfs_ereport_post(FM_EREPORT_ZFS_DELAY, zio->io_spa, + zio->io_vd, zio, 0, 0); + } + + if (zio->io_error) { + /* + * If this I/O is attached to a particular vdev, + * generate an error message describing the I/O failure + * at the block level. We ignore these errors if the + * device is currently unavailable. + */ + if (zio->io_error != ECKSUM && zio->io_vd != NULL && + !vdev_is_dead(zio->io_vd)) + zfs_ereport_post(FM_EREPORT_ZFS_IO, zio->io_spa, + zio->io_vd, zio, 0, 0); + + if ((zio->io_error == EIO || !(zio->io_flags & + (ZIO_FLAG_SPECULATIVE | ZIO_FLAG_DONT_PROPAGATE))) && + zio == zio->io_logical) { + /* + * For logical I/O requests, tell the SPA to log the + * error and generate a logical data ereport. + */ + spa_log_error(zio->io_spa, zio); + zfs_ereport_post(FM_EREPORT_ZFS_DATA, zio->io_spa, + NULL, zio, 0, 0); + } + } + + if (zio->io_error && zio == zio->io_logical) { + /* + * Determine whether zio should be reexecuted. This will + * propagate all the way to the root via zio_notify_parent(). + */ + ASSERT(zio->io_vd == NULL && zio->io_bp != NULL); + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + + if (IO_IS_ALLOCATING(zio) && + !(zio->io_flags & ZIO_FLAG_CANFAIL)) { + if (zio->io_error != ENOSPC) + zio->io_reexecute |= ZIO_REEXECUTE_NOW; + else + zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; + } + + if ((zio->io_type == ZIO_TYPE_READ || + zio->io_type == ZIO_TYPE_FREE) && + !(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && + zio->io_error == ENXIO && + spa_load_state(zio->io_spa) == SPA_LOAD_NONE && + spa_get_failmode(zio->io_spa) != ZIO_FAILURE_MODE_CONTINUE) + zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; + + if (!(zio->io_flags & ZIO_FLAG_CANFAIL) && !zio->io_reexecute) + zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; + + /* + * Here is a possibly good place to attempt to do + * either combinatorial reconstruction or error correction + * based on checksums. It also might be a good place + * to send out preliminary ereports before we suspend + * processing. + */ + } + + /* + * If there were logical child errors, they apply to us now. + * We defer this until now to avoid conflating logical child + * errors with errors that happened to the zio itself when + * updating vdev stats and reporting FMA events above. + */ + zio_inherit_child_errors(zio, ZIO_CHILD_LOGICAL); + + if ((zio->io_error || zio->io_reexecute) && + IO_IS_ALLOCATING(zio) && zio->io_gang_leader == zio && + !(zio->io_flags & (ZIO_FLAG_IO_REWRITE | ZIO_FLAG_NOPWRITE))) + zio_dva_unallocate(zio, zio->io_gang_tree, zio->io_bp); + + zio_gang_tree_free(&zio->io_gang_tree); + + /* + * Godfather I/Os should never suspend. + */ + if ((zio->io_flags & ZIO_FLAG_GODFATHER) && + (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) + zio->io_reexecute &= ~ZIO_REEXECUTE_SUSPEND; + + if (zio->io_reexecute) { + /* + * This is a logical I/O that wants to reexecute. + * + * Reexecute is top-down. When an i/o fails, if it's not + * the root, it simply notifies its parent and sticks around. + * The parent, seeing that it still has children in zio_done(), + * does the same. This percolates all the way up to the root. + * The root i/o will reexecute or suspend the entire tree. + * + * This approach ensures that zio_reexecute() honors + * all the original i/o dependency relationships, e.g. + * parents not executing until children are ready. + */ + ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); + + zio->io_gang_leader = NULL; + + mutex_enter(&zio->io_lock); + zio->io_state[ZIO_WAIT_DONE] = 1; + mutex_exit(&zio->io_lock); + + /* + * "The Godfather" I/O monitors its children but is + * not a true parent to them. It will track them through + * the pipeline but severs its ties whenever they get into + * trouble (e.g. suspended). This allows "The Godfather" + * I/O to return status without blocking. + */ + zl = NULL; + for (pio = zio_walk_parents(zio, &zl); pio != NULL; + pio = pio_next) { + zio_link_t *remove_zl = zl; + pio_next = zio_walk_parents(zio, &zl); + + if ((pio->io_flags & ZIO_FLAG_GODFATHER) && + (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) { + zio_remove_child(pio, zio, remove_zl); + zio_notify_parent(pio, zio, ZIO_WAIT_DONE); + } + } + + if ((pio = zio_unique_parent(zio)) != NULL) { + /* + * We're not a root i/o, so there's nothing to do + * but notify our parent. Don't propagate errors + * upward since we haven't permanently failed yet. + */ + ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); + zio->io_flags |= ZIO_FLAG_DONT_PROPAGATE; + zio_notify_parent(pio, zio, ZIO_WAIT_DONE); + } else if (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND) { + /* + * We'd fail again if we reexecuted now, so suspend + * until conditions improve (e.g. device comes online). + */ + zio_suspend(zio->io_spa, zio); + } else { + /* + * Reexecution is potentially a huge amount of work. + * Hand it off to the otherwise-unused claim taskq. + */ + ASSERT(taskq_empty_ent(&zio->io_tqent)); + spa_taskq_dispatch_ent(zio->io_spa, + ZIO_TYPE_CLAIM, ZIO_TASKQ_ISSUE, + (task_func_t *)zio_reexecute, zio, 0, + &zio->io_tqent); + } + return (ZIO_PIPELINE_STOP); + } + + ASSERT(zio->io_child_count == 0); + ASSERT(zio->io_reexecute == 0); + ASSERT(zio->io_error == 0 || (zio->io_flags & ZIO_FLAG_CANFAIL)); + + /* + * Report any checksum errors, since the I/O is complete. + */ + while (zio->io_cksum_report != NULL) { + zio_cksum_report_t *zcr = zio->io_cksum_report; + zio->io_cksum_report = zcr->zcr_next; + zcr->zcr_next = NULL; + zcr->zcr_finish(zcr, NULL); + zfs_ereport_free_checksum(zcr); + } + + if (zio->io_flags & ZIO_FLAG_FASTWRITE && zio->io_bp && + !BP_IS_HOLE(zio->io_bp) && !BP_IS_EMBEDDED(zio->io_bp) && + !(zio->io_flags & ZIO_FLAG_NOPWRITE)) { + metaslab_fastwrite_unmark(zio->io_spa, zio->io_bp); + } + + /* + * It is the responsibility of the done callback to ensure that this + * particular zio is no longer discoverable for adoption, and as + * such, cannot acquire any new parents. + */ + if (zio->io_done) + zio->io_done(zio); + + mutex_enter(&zio->io_lock); + zio->io_state[ZIO_WAIT_DONE] = 1; + mutex_exit(&zio->io_lock); + + zl = NULL; + for (pio = zio_walk_parents(zio, &zl); pio != NULL; pio = pio_next) { + zio_link_t *remove_zl = zl; + pio_next = zio_walk_parents(zio, &zl); + zio_remove_child(pio, zio, remove_zl); + zio_notify_parent(pio, zio, ZIO_WAIT_DONE); + } + + if (zio->io_waiter != NULL) { + mutex_enter(&zio->io_lock); + zio->io_executor = NULL; + cv_broadcast(&zio->io_cv); + mutex_exit(&zio->io_lock); + } else { + zio_destroy(zio); + } + + return (ZIO_PIPELINE_STOP); +} + +/* + * ========================================================================== + * I/O pipeline definition + * ========================================================================== + */ +static zio_pipe_stage_t *zio_pipeline[] = { + NULL, + zio_read_bp_init, + zio_write_bp_init, + zio_free_bp_init, + zio_issue_async, + zio_write_compress, + zio_checksum_generate, + zio_nop_write, + zio_ddt_read_start, + zio_ddt_read_done, + zio_ddt_write, + zio_ddt_free, + zio_gang_assemble, + zio_gang_issue, + zio_dva_throttle, + zio_dva_allocate, + zio_dva_free, + zio_dva_claim, + zio_ready, + zio_vdev_io_start, + zio_vdev_io_done, + zio_vdev_io_assess, + zio_checksum_verify, + zio_done +}; + + + + +/* + * Compare two zbookmark_phys_t's to see which we would reach first in a + * pre-order traversal of the object tree. + * + * This is simple in every case aside from the meta-dnode object. For all other + * objects, we traverse them in order (object 1 before object 2, and so on). + * However, all of these objects are traversed while traversing object 0, since + * the data it points to is the list of objects. Thus, we need to convert to a + * canonical representation so we can compare meta-dnode bookmarks to + * non-meta-dnode bookmarks. + * + * We do this by calculating "equivalents" for each field of the zbookmark. + * zbookmarks outside of the meta-dnode use their own object and level, and + * calculate the level 0 equivalent (the first L0 blkid that is contained in the + * blocks this bookmark refers to) by multiplying their blkid by their span + * (the number of L0 blocks contained within one block at their level). + * zbookmarks inside the meta-dnode calculate their object equivalent + * (which is L0equiv * dnodes per data block), use 0 for their L0equiv, and use + * level + 1<<31 (any value larger than a level could ever be) for their level. + * This causes them to always compare before a bookmark in their object + * equivalent, compare appropriately to bookmarks in other objects, and to + * compare appropriately to other bookmarks in the meta-dnode. + */ +int +zbookmark_compare(uint16_t dbss1, uint8_t ibs1, uint16_t dbss2, uint8_t ibs2, + const zbookmark_phys_t *zb1, const zbookmark_phys_t *zb2) +{ + /* + * These variables represent the "equivalent" values for the zbookmark, + * after converting zbookmarks inside the meta dnode to their + * normal-object equivalents. + */ + uint64_t zb1obj, zb2obj; + uint64_t zb1L0, zb2L0; + uint64_t zb1level, zb2level; + + if (zb1->zb_object == zb2->zb_object && + zb1->zb_level == zb2->zb_level && + zb1->zb_blkid == zb2->zb_blkid) + return (0); + + /* + * BP_SPANB calculates the span in blocks. + */ + zb1L0 = (zb1->zb_blkid) * BP_SPANB(ibs1, zb1->zb_level); + zb2L0 = (zb2->zb_blkid) * BP_SPANB(ibs2, zb2->zb_level); + + if (zb1->zb_object == DMU_META_DNODE_OBJECT) { + zb1obj = zb1L0 * (dbss1 << (SPA_MINBLOCKSHIFT - DNODE_SHIFT)); + zb1L0 = 0; + zb1level = zb1->zb_level + COMPARE_META_LEVEL; + } else { + zb1obj = zb1->zb_object; + zb1level = zb1->zb_level; + } + + if (zb2->zb_object == DMU_META_DNODE_OBJECT) { + zb2obj = zb2L0 * (dbss2 << (SPA_MINBLOCKSHIFT - DNODE_SHIFT)); + zb2L0 = 0; + zb2level = zb2->zb_level + COMPARE_META_LEVEL; + } else { + zb2obj = zb2->zb_object; + zb2level = zb2->zb_level; + } + + /* Now that we have a canonical representation, do the comparison. */ + if (zb1obj != zb2obj) + return (zb1obj < zb2obj ? -1 : 1); + else if (zb1L0 != zb2L0) + return (zb1L0 < zb2L0 ? -1 : 1); + else if (zb1level != zb2level) + return (zb1level > zb2level ? -1 : 1); + /* + * This can (theoretically) happen if the bookmarks have the same object + * and level, but different blkids, if the block sizes are not the same. + * There is presently no way to change the indirect block sizes + */ + return (0); +} + +/* + * This function checks the following: given that last_block is the place that + * our traversal stopped last time, does that guarantee that we've visited + * every node under subtree_root? Therefore, we can't just use the raw output + * of zbookmark_compare. We have to pass in a modified version of + * subtree_root; by incrementing the block id, and then checking whether + * last_block is before or equal to that, we can tell whether or not having + * visited last_block implies that all of subtree_root's children have been + * visited. + */ +boolean_t +zbookmark_subtree_completed(const dnode_phys_t *dnp, + const zbookmark_phys_t *subtree_root, const zbookmark_phys_t *last_block) +{ + zbookmark_phys_t mod_zb = *subtree_root; + mod_zb.zb_blkid++; + ASSERT(last_block->zb_level == 0); + + /* The objset_phys_t isn't before anything. */ + if (dnp == NULL) + return (B_FALSE); + + /* + * We pass in 1ULL << (DNODE_BLOCK_SHIFT - SPA_MINBLOCKSHIFT) for the + * data block size in sectors, because that variable is only used if + * the bookmark refers to a block in the meta-dnode. Since we don't + * know without examining it what object it refers to, and there's no + * harm in passing in this value in other cases, we always pass it in. + * + * We pass in 0 for the indirect block size shift because zb2 must be + * level 0. The indirect block size is only used to calculate the span + * of the bookmark, but since the bookmark must be level 0, the span is + * always 1, so the math works out. + * + * If you make changes to how the zbookmark_compare code works, be sure + * to make sure that this code still works afterwards. + */ + return (zbookmark_compare(dnp->dn_datablkszsec, dnp->dn_indblkshift, + 1ULL << (DNODE_BLOCK_SHIFT - SPA_MINBLOCKSHIFT), 0, &mod_zb, + last_block) <= 0); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zio_type_name); +EXPORT_SYMBOL(zio_buf_alloc); +EXPORT_SYMBOL(zio_data_buf_alloc); +EXPORT_SYMBOL(zio_buf_free); +EXPORT_SYMBOL(zio_data_buf_free); + +module_param(zio_delay_max, int, 0644); +MODULE_PARM_DESC(zio_delay_max, "Max zio millisec delay before posting event"); + +module_param(zio_requeue_io_start_cut_in_line, int, 0644); +MODULE_PARM_DESC(zio_requeue_io_start_cut_in_line, "Prioritize requeued I/O"); + +module_param(zfs_sync_pass_deferred_free, int, 0644); +MODULE_PARM_DESC(zfs_sync_pass_deferred_free, + "Defer frees starting in this pass"); + +module_param(zfs_sync_pass_dont_compress, int, 0644); +MODULE_PARM_DESC(zfs_sync_pass_dont_compress, + "Don't compress starting in this pass"); + +module_param(zfs_sync_pass_rewrite, int, 0644); +MODULE_PARM_DESC(zfs_sync_pass_rewrite, + "Rewrite new bps starting in this pass"); + +module_param(zio_dva_throttle_enabled, int, 0644); +MODULE_PARM_DESC(zio_dva_throttle_enabled, + "Throttle block allocations in the ZIO pipeline"); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zio_checksum.c +++ linux-aws-4.15.0/zfs/module/zfs/zio_checksum.c @@ -0,0 +1,520 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + * Copyright 2013 Saso Kiselkov. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Checksum vectors. + * + * In the SPA, everything is checksummed. We support checksum vectors + * for three distinct reasons: + * + * 1. Different kinds of data need different levels of protection. + * For SPA metadata, we always want a very strong checksum. + * For user data, we let users make the trade-off between speed + * and checksum strength. + * + * 2. Cryptographic hash and MAC algorithms are an area of active research. + * It is likely that in future hash functions will be at least as strong + * as current best-of-breed, and may be substantially faster as well. + * We want the ability to take advantage of these new hashes as soon as + * they become available. + * + * 3. If someone develops hardware that can compute a strong hash quickly, + * we want the ability to take advantage of that hardware. + * + * Of course, we don't want a checksum upgrade to invalidate existing + * data, so we store the checksum *function* in eight bits of the bp. + * This gives us room for up to 256 different checksum functions. + * + * When writing a block, we always checksum it with the latest-and-greatest + * checksum function of the appropriate strength. When reading a block, + * we compare the expected checksum against the actual checksum, which we + * compute via the checksum function specified by BP_GET_CHECKSUM(bp). + * + * SALTED CHECKSUMS + * + * To enable the use of less secure hash algorithms with dedup, we + * introduce the notion of salted checksums (MACs, really). A salted + * checksum is fed both a random 256-bit value (the salt) and the data + * to be checksummed. This salt is kept secret (stored on the pool, but + * never shown to the user). Thus even if an attacker knew of collision + * weaknesses in the hash algorithm, they won't be able to mount a known + * plaintext attack on the DDT, since the actual hash value cannot be + * known ahead of time. How the salt is used is algorithm-specific + * (some might simply prefix it to the data block, others might need to + * utilize a full-blown HMAC). On disk the salt is stored in a ZAP + * object in the MOS (DMU_POOL_CHECKSUM_SALT). + * + * CONTEXT TEMPLATES + * + * Some hashing algorithms need to perform a substantial amount of + * initialization work (e.g. salted checksums above may need to pre-hash + * the salt) before being able to process data. Performing this + * redundant work for each block would be wasteful, so we instead allow + * a checksum algorithm to do the work once (the first time it's used) + * and then keep this pre-initialized context as a template inside the + * spa_t (spa_cksum_tmpls). If the zio_checksum_info_t contains + * non-NULL ci_tmpl_init and ci_tmpl_free callbacks, they are used to + * construct and destruct the pre-initialized checksum context. The + * pre-initialized context is then reused during each checksum + * invocation and passed to the checksum function. + */ + +/*ARGSUSED*/ +static void +abd_checksum_off(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0); +} + +/*ARGSUSED*/ +void +abd_fletcher_2_native(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_init(zcp); + (void) abd_iterate_func(abd, 0, size, + fletcher_2_incremental_native, zcp); +} + +/*ARGSUSED*/ +void +abd_fletcher_2_byteswap(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_init(zcp); + (void) abd_iterate_func(abd, 0, size, + fletcher_2_incremental_byteswap, zcp); +} + +static inline void +abd_fletcher_4_impl(abd_t *abd, uint64_t size, zio_abd_checksum_data_t *acdp) +{ + fletcher_4_abd_ops.acf_init(acdp); + abd_iterate_func(abd, 0, size, fletcher_4_abd_ops.acf_iter, acdp); + fletcher_4_abd_ops.acf_fini(acdp); +} + +/*ARGSUSED*/ +void +abd_fletcher_4_native(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_4_ctx_t ctx; + + zio_abd_checksum_data_t acd = { + .acd_byteorder = ZIO_CHECKSUM_NATIVE, + .acd_zcp = zcp, + .acd_ctx = &ctx + }; + + abd_fletcher_4_impl(abd, size, &acd); + +} + +/*ARGSUSED*/ +void +abd_fletcher_4_byteswap(abd_t *abd, uint64_t size, + const void *ctx_template, zio_cksum_t *zcp) +{ + fletcher_4_ctx_t ctx; + + zio_abd_checksum_data_t acd = { + .acd_byteorder = ZIO_CHECKSUM_BYTESWAP, + .acd_zcp = zcp, + .acd_ctx = &ctx + }; + + abd_fletcher_4_impl(abd, size, &acd); +} + +zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS] = { + {{NULL, NULL}, NULL, NULL, 0, "inherit"}, + {{NULL, NULL}, NULL, NULL, 0, "on"}, + {{abd_checksum_off, abd_checksum_off}, + NULL, NULL, 0, "off"}, + {{abd_checksum_SHA256, abd_checksum_SHA256}, + NULL, NULL, ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_EMBEDDED, + "label"}, + {{abd_checksum_SHA256, abd_checksum_SHA256}, + NULL, NULL, ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_EMBEDDED, + "gang_header"}, + {{abd_fletcher_2_native, abd_fletcher_2_byteswap}, + NULL, NULL, ZCHECKSUM_FLAG_EMBEDDED, "zilog"}, + {{abd_fletcher_2_native, abd_fletcher_2_byteswap}, + NULL, NULL, 0, "fletcher2"}, + {{abd_fletcher_4_native, abd_fletcher_4_byteswap}, + NULL, NULL, ZCHECKSUM_FLAG_METADATA, "fletcher4"}, + {{abd_checksum_SHA256, abd_checksum_SHA256}, + NULL, NULL, ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_DEDUP | + ZCHECKSUM_FLAG_NOPWRITE, "sha256"}, + {{abd_fletcher_4_native, abd_fletcher_4_byteswap}, + NULL, NULL, ZCHECKSUM_FLAG_EMBEDDED, "zilog2"}, + {{abd_checksum_off, abd_checksum_off}, + NULL, NULL, 0, "noparity"}, + {{abd_checksum_SHA512_native, abd_checksum_SHA512_byteswap}, + NULL, NULL, ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_DEDUP | + ZCHECKSUM_FLAG_NOPWRITE, "sha512"}, + {{abd_checksum_skein_native, abd_checksum_skein_byteswap}, + abd_checksum_skein_tmpl_init, abd_checksum_skein_tmpl_free, + ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_DEDUP | + ZCHECKSUM_FLAG_SALTED | ZCHECKSUM_FLAG_NOPWRITE, "skein"}, + {{abd_checksum_edonr_native, abd_checksum_edonr_byteswap}, + abd_checksum_edonr_tmpl_init, abd_checksum_edonr_tmpl_free, + ZCHECKSUM_FLAG_METADATA | ZCHECKSUM_FLAG_SALTED | + ZCHECKSUM_FLAG_NOPWRITE, "edonr"}, +}; + +/* + * The flag corresponding to the "verify" in dedup=[checksum,]verify + * must be cleared first, so callers should use ZIO_CHECKSUM_MASK. + */ +spa_feature_t +zio_checksum_to_feature(enum zio_checksum cksum) +{ + VERIFY((cksum & ~ZIO_CHECKSUM_MASK) == 0); + + switch (cksum) { + case ZIO_CHECKSUM_SHA512: + return (SPA_FEATURE_SHA512); + case ZIO_CHECKSUM_SKEIN: + return (SPA_FEATURE_SKEIN); + case ZIO_CHECKSUM_EDONR: + return (SPA_FEATURE_EDONR); + default: + return (SPA_FEATURE_NONE); + } +} + +enum zio_checksum +zio_checksum_select(enum zio_checksum child, enum zio_checksum parent) +{ + ASSERT(child < ZIO_CHECKSUM_FUNCTIONS); + ASSERT(parent < ZIO_CHECKSUM_FUNCTIONS); + ASSERT(parent != ZIO_CHECKSUM_INHERIT && parent != ZIO_CHECKSUM_ON); + + if (child == ZIO_CHECKSUM_INHERIT) + return (parent); + + if (child == ZIO_CHECKSUM_ON) + return (ZIO_CHECKSUM_ON_VALUE); + + return (child); +} + +enum zio_checksum +zio_checksum_dedup_select(spa_t *spa, enum zio_checksum child, + enum zio_checksum parent) +{ + ASSERT((child & ZIO_CHECKSUM_MASK) < ZIO_CHECKSUM_FUNCTIONS); + ASSERT((parent & ZIO_CHECKSUM_MASK) < ZIO_CHECKSUM_FUNCTIONS); + ASSERT(parent != ZIO_CHECKSUM_INHERIT && parent != ZIO_CHECKSUM_ON); + + if (child == ZIO_CHECKSUM_INHERIT) + return (parent); + + if (child == ZIO_CHECKSUM_ON) + return (spa_dedup_checksum(spa)); + + if (child == (ZIO_CHECKSUM_ON | ZIO_CHECKSUM_VERIFY)) + return (spa_dedup_checksum(spa) | ZIO_CHECKSUM_VERIFY); + + ASSERT((zio_checksum_table[child & ZIO_CHECKSUM_MASK].ci_flags & + ZCHECKSUM_FLAG_DEDUP) || + (child & ZIO_CHECKSUM_VERIFY) || child == ZIO_CHECKSUM_OFF); + + return (child); +} + +/* + * Set the external verifier for a gang block based on , + * a tuple which is guaranteed to be unique for the life of the pool. + */ +static void +zio_checksum_gang_verifier(zio_cksum_t *zcp, const blkptr_t *bp) +{ + const dva_t *dva = BP_IDENTITY(bp); + uint64_t txg = BP_PHYSICAL_BIRTH(bp); + + ASSERT(BP_IS_GANG(bp)); + + ZIO_SET_CHECKSUM(zcp, DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva), txg, 0); +} + +/* + * Set the external verifier for a label block based on its offset. + * The vdev is implicit, and the txg is unknowable at pool open time -- + * hence the logic in vdev_uberblock_load() to find the most recent copy. + */ +static void +zio_checksum_label_verifier(zio_cksum_t *zcp, uint64_t offset) +{ + ZIO_SET_CHECKSUM(zcp, offset, 0, 0, 0); +} + +/* + * Calls the template init function of a checksum which supports context + * templates and installs the template into the spa_t. + */ +static void +zio_checksum_template_init(enum zio_checksum checksum, spa_t *spa) +{ + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; + + if (ci->ci_tmpl_init == NULL) + return; + if (spa->spa_cksum_tmpls[checksum] != NULL) + return; + + VERIFY(ci->ci_tmpl_free != NULL); + mutex_enter(&spa->spa_cksum_tmpls_lock); + if (spa->spa_cksum_tmpls[checksum] == NULL) { + spa->spa_cksum_tmpls[checksum] = + ci->ci_tmpl_init(&spa->spa_cksum_salt); + VERIFY(spa->spa_cksum_tmpls[checksum] != NULL); + } + mutex_exit(&spa->spa_cksum_tmpls_lock); +} + +/* + * Generate the checksum. + */ +void +zio_checksum_compute(zio_t *zio, enum zio_checksum checksum, + abd_t *abd, uint64_t size) +{ + static const uint64_t zec_magic = ZEC_MAGIC; + blkptr_t *bp = zio->io_bp; + uint64_t offset = zio->io_offset; + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; + zio_cksum_t cksum; + spa_t *spa = zio->io_spa; + + ASSERT((uint_t)checksum < ZIO_CHECKSUM_FUNCTIONS); + ASSERT(ci->ci_func[0] != NULL); + + zio_checksum_template_init(checksum, spa); + + if (ci->ci_flags & ZCHECKSUM_FLAG_EMBEDDED) { + zio_eck_t eck; + size_t eck_offset; + + if (checksum == ZIO_CHECKSUM_ZILOG2) { + zil_chain_t zilc; + abd_copy_to_buf(&zilc, abd, sizeof (zil_chain_t)); + + size = P2ROUNDUP_TYPED(zilc.zc_nused, ZIL_MIN_BLKSZ, + uint64_t); + eck = zilc.zc_eck; + eck_offset = offsetof(zil_chain_t, zc_eck); + } else { + eck_offset = size - sizeof (zio_eck_t); + abd_copy_to_buf_off(&eck, abd, eck_offset, + sizeof (zio_eck_t)); + } + + if (checksum == ZIO_CHECKSUM_GANG_HEADER) { + zio_checksum_gang_verifier(&eck.zec_cksum, bp); + abd_copy_from_buf_off(abd, &eck.zec_cksum, + eck_offset + offsetof(zio_eck_t, zec_cksum), + sizeof (zio_cksum_t)); + } else if (checksum == ZIO_CHECKSUM_LABEL) { + zio_checksum_label_verifier(&eck.zec_cksum, offset); + abd_copy_from_buf_off(abd, &eck.zec_cksum, + eck_offset + offsetof(zio_eck_t, zec_cksum), + sizeof (zio_cksum_t)); + } else { + bp->blk_cksum = eck.zec_cksum; + } + + abd_copy_from_buf_off(abd, &zec_magic, + eck_offset + offsetof(zio_eck_t, zec_magic), + sizeof (zec_magic)); + + ci->ci_func[0](abd, size, spa->spa_cksum_tmpls[checksum], + &cksum); + + abd_copy_from_buf_off(abd, &cksum, + eck_offset + offsetof(zio_eck_t, zec_cksum), + sizeof (zio_cksum_t)); + } else { + ci->ci_func[0](abd, size, spa->spa_cksum_tmpls[checksum], + &bp->blk_cksum); + } +} + +int +zio_checksum_error_impl(spa_t *spa, const blkptr_t *bp, + enum zio_checksum checksum, abd_t *abd, uint64_t size, uint64_t offset, + zio_bad_cksum_t *info) +{ + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; + zio_cksum_t actual_cksum, expected_cksum; + zio_eck_t eck; + int byteswap; + + if (checksum >= ZIO_CHECKSUM_FUNCTIONS || ci->ci_func[0] == NULL) + return (SET_ERROR(EINVAL)); + + zio_checksum_template_init(checksum, spa); + + if (ci->ci_flags & ZCHECKSUM_FLAG_EMBEDDED) { + zio_cksum_t verifier; + size_t eck_offset; + + if (checksum == ZIO_CHECKSUM_ZILOG2) { + zil_chain_t zilc; + uint64_t nused; + + abd_copy_to_buf(&zilc, abd, sizeof (zil_chain_t)); + + eck = zilc.zc_eck; + eck_offset = offsetof(zil_chain_t, zc_eck) + + offsetof(zio_eck_t, zec_cksum); + + if (eck.zec_magic == ZEC_MAGIC) { + nused = zilc.zc_nused; + } else if (eck.zec_magic == BSWAP_64(ZEC_MAGIC)) { + nused = BSWAP_64(zilc.zc_nused); + } else { + return (SET_ERROR(ECKSUM)); + } + + if (nused > size) { + return (SET_ERROR(ECKSUM)); + } + + size = P2ROUNDUP_TYPED(nused, ZIL_MIN_BLKSZ, uint64_t); + } else { + eck_offset = size - sizeof (zio_eck_t); + abd_copy_to_buf_off(&eck, abd, eck_offset, + sizeof (zio_eck_t)); + eck_offset += offsetof(zio_eck_t, zec_cksum); + } + + if (checksum == ZIO_CHECKSUM_GANG_HEADER) + zio_checksum_gang_verifier(&verifier, bp); + else if (checksum == ZIO_CHECKSUM_LABEL) + zio_checksum_label_verifier(&verifier, offset); + else + verifier = bp->blk_cksum; + + byteswap = (eck.zec_magic == BSWAP_64(ZEC_MAGIC)); + + if (byteswap) + byteswap_uint64_array(&verifier, sizeof (zio_cksum_t)); + + expected_cksum = eck.zec_cksum; + + abd_copy_from_buf_off(abd, &verifier, eck_offset, + sizeof (zio_cksum_t)); + + ci->ci_func[byteswap](abd, size, + spa->spa_cksum_tmpls[checksum], &actual_cksum); + + abd_copy_from_buf_off(abd, &expected_cksum, eck_offset, + sizeof (zio_cksum_t)); + + if (byteswap) { + byteswap_uint64_array(&expected_cksum, + sizeof (zio_cksum_t)); + } + } else { + byteswap = BP_SHOULD_BYTESWAP(bp); + expected_cksum = bp->blk_cksum; + ci->ci_func[byteswap](abd, size, + spa->spa_cksum_tmpls[checksum], &actual_cksum); + } + + if (info != NULL) { + info->zbc_expected = expected_cksum; + info->zbc_actual = actual_cksum; + info->zbc_checksum_name = ci->ci_name; + info->zbc_byteswapped = byteswap; + info->zbc_injected = 0; + info->zbc_has_cksum = 1; + } + + if (!ZIO_CHECKSUM_EQUAL(actual_cksum, expected_cksum)) + return (SET_ERROR(ECKSUM)); + + return (0); +} + +int +zio_checksum_error(zio_t *zio, zio_bad_cksum_t *info) +{ + blkptr_t *bp = zio->io_bp; + uint_t checksum = (bp == NULL ? zio->io_prop.zp_checksum : + (BP_IS_GANG(bp) ? ZIO_CHECKSUM_GANG_HEADER : BP_GET_CHECKSUM(bp))); + int error; + uint64_t size = (bp == NULL ? zio->io_size : + (BP_IS_GANG(bp) ? SPA_GANGBLOCKSIZE : BP_GET_PSIZE(bp))); + uint64_t offset = zio->io_offset; + abd_t *data = zio->io_abd; + spa_t *spa = zio->io_spa; + + error = zio_checksum_error_impl(spa, bp, checksum, data, size, + offset, info); + + if (zio_injection_enabled && error == 0 && zio->io_error == 0) { + error = zio_handle_fault_injection(zio, ECKSUM); + if (error != 0) + info->zbc_injected = 1; + } + + return (error); +} + +/* + * Called by a spa_t that's about to be deallocated. This steps through + * all of the checksum context templates and deallocates any that were + * initialized using the algorithm-specific template init function. + */ +void +zio_checksum_templates_free(spa_t *spa) +{ + enum zio_checksum checksum; + for (checksum = 0; checksum < ZIO_CHECKSUM_FUNCTIONS; + checksum++) { + if (spa->spa_cksum_tmpls[checksum] != NULL) { + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; + + VERIFY(ci->ci_tmpl_free != NULL); + ci->ci_tmpl_free(spa->spa_cksum_tmpls[checksum]); + spa->spa_cksum_tmpls[checksum] = NULL; + } + } +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zio_compress.c +++ linux-aws-4.15.0/zfs/module/zfs/zio_compress.c @@ -0,0 +1,156 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ +/* + * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. + */ + +/* + * Copyright (c) 2013, 2016 by Delphix. All rights reserved. + */ + +#include +#include +#include +#include +#include +#include + +/* + * Compression vectors. + */ +zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = { + {"inherit", 0, NULL, NULL}, + {"on", 0, NULL, NULL}, + {"uncompressed", 0, NULL, NULL}, + {"lzjb", 0, lzjb_compress, lzjb_decompress}, + {"empty", 0, NULL, NULL}, + {"gzip-1", 1, gzip_compress, gzip_decompress}, + {"gzip-2", 2, gzip_compress, gzip_decompress}, + {"gzip-3", 3, gzip_compress, gzip_decompress}, + {"gzip-4", 4, gzip_compress, gzip_decompress}, + {"gzip-5", 5, gzip_compress, gzip_decompress}, + {"gzip-6", 6, gzip_compress, gzip_decompress}, + {"gzip-7", 7, gzip_compress, gzip_decompress}, + {"gzip-8", 8, gzip_compress, gzip_decompress}, + {"gzip-9", 9, gzip_compress, gzip_decompress}, + {"zle", 64, zle_compress, zle_decompress}, + {"lz4", 0, lz4_compress_zfs, lz4_decompress_zfs} +}; + +enum zio_compress +zio_compress_select(spa_t *spa, enum zio_compress child, + enum zio_compress parent) +{ + enum zio_compress result; + + ASSERT(child < ZIO_COMPRESS_FUNCTIONS); + ASSERT(parent < ZIO_COMPRESS_FUNCTIONS); + ASSERT(parent != ZIO_COMPRESS_INHERIT); + + result = child; + if (result == ZIO_COMPRESS_INHERIT) + result = parent; + + if (result == ZIO_COMPRESS_ON) { + if (spa_feature_is_active(spa, SPA_FEATURE_LZ4_COMPRESS)) + result = ZIO_COMPRESS_LZ4_ON_VALUE; + else + result = ZIO_COMPRESS_LEGACY_ON_VALUE; + } + + return (result); +} + +/*ARGSUSED*/ +static int +zio_compress_zeroed_cb(void *data, size_t len, void *private) +{ + uint64_t *end = (uint64_t *)((char *)data + len); + uint64_t *word; + + for (word = data; word < end; word++) + if (*word != 0) + return (1); + + return (0); +} + +size_t +zio_compress_data(enum zio_compress c, abd_t *src, void *dst, size_t s_len) +{ + size_t c_len, d_len; + zio_compress_info_t *ci = &zio_compress_table[c]; + void *tmp; + + ASSERT((uint_t)c < ZIO_COMPRESS_FUNCTIONS); + ASSERT((uint_t)c == ZIO_COMPRESS_EMPTY || ci->ci_compress != NULL); + + /* + * If the data is all zeroes, we don't even need to allocate + * a block for it. We indicate this by returning zero size. + */ + if (abd_iterate_func(src, 0, s_len, zio_compress_zeroed_cb, NULL) == 0) + return (0); + + if (c == ZIO_COMPRESS_EMPTY) + return (s_len); + + /* Compress at least 12.5% */ + d_len = s_len - (s_len >> 3); + + /* No compression algorithms can read from ABDs directly */ + tmp = abd_borrow_buf_copy(src, s_len); + c_len = ci->ci_compress(tmp, dst, s_len, d_len, ci->ci_level); + abd_return_buf(src, tmp, s_len); + + if (c_len > d_len) + return (s_len); + + ASSERT3U(c_len, <=, d_len); + return (c_len); +} + +int +zio_decompress_data_buf(enum zio_compress c, void *src, void *dst, + size_t s_len, size_t d_len) +{ + zio_compress_info_t *ci = &zio_compress_table[c]; + if ((uint_t)c >= ZIO_COMPRESS_FUNCTIONS || ci->ci_decompress == NULL) + return (SET_ERROR(EINVAL)); + + return (ci->ci_decompress(src, dst, s_len, d_len, ci->ci_level)); +} + +int +zio_decompress_data(enum zio_compress c, abd_t *src, void *dst, + size_t s_len, size_t d_len) +{ + void *tmp = abd_borrow_buf_copy(src, s_len); + int ret = zio_decompress_data_buf(c, tmp, dst, s_len, d_len); + abd_return_buf(src, tmp, s_len); + + return (ret); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zio_inject.c +++ linux-aws-4.15.0/zfs/module/zfs/zio_inject.c @@ -0,0 +1,798 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015 by Delphix. All rights reserved. + * Copyright (c) 2017, Intel Corporation. + */ + +/* + * ZFS fault injection + * + * To handle fault injection, we keep track of a series of zinject_record_t + * structures which describe which logical block(s) should be injected with a + * fault. These are kept in a global list. Each record corresponds to a given + * spa_t and maintains a special hold on the spa_t so that it cannot be deleted + * or exported while the injection record exists. + * + * Device level injection is done using the 'zi_guid' field. If this is set, it + * means that the error is destined for a particular device, not a piece of + * data. + * + * This is a rather poor data structure and algorithm, but we don't expect more + * than a few faults at any one time, so it should be sufficient for our needs. + */ + +#include +#include +#include +#include +#include +#include + +uint32_t zio_injection_enabled = 0; + +/* + * Data describing each zinject handler registered on the system, and + * contains the list node linking the handler in the global zinject + * handler list. + */ +typedef struct inject_handler { + int zi_id; + spa_t *zi_spa; + zinject_record_t zi_record; + uint64_t *zi_lanes; + int zi_next_lane; + list_node_t zi_link; +} inject_handler_t; + +/* + * List of all zinject handlers registered on the system, protected by + * the inject_lock defined below. + */ +static list_t inject_handlers; + +/* + * This protects insertion into, and traversal of, the inject handler + * list defined above; as well as the inject_delay_count. Any time a + * handler is inserted or removed from the list, this lock should be + * taken as a RW_WRITER; and any time traversal is done over the list + * (without modification to it) this lock should be taken as a RW_READER. + */ +static krwlock_t inject_lock; + +/* + * This holds the number of zinject delay handlers that have been + * registered on the system. It is protected by the inject_lock defined + * above. Thus modifications to this count must be a RW_WRITER of the + * inject_lock, and reads of this count must be (at least) a RW_READER + * of the lock. + */ +static int inject_delay_count = 0; + +/* + * This lock is used only in zio_handle_io_delay(), refer to the comment + * in that function for more details. + */ +static kmutex_t inject_delay_mtx; + +/* + * Used to assign unique identifying numbers to each new zinject handler. + */ +static int inject_next_id = 1; + +/* + * Test if the requested frequency was triggered + */ +static boolean_t +freq_triggered(uint32_t frequency) +{ + /* + * zero implies always (100%) + */ + if (frequency == 0) + return (B_TRUE); + + /* + * Note: we still handle legacy (unscaled) frequecy values + */ + uint32_t maximum = (frequency <= 100) ? 100 : ZI_PERCENTAGE_MAX; + + return (spa_get_random(maximum) < frequency); +} + +/* + * Returns true if the given record matches the I/O in progress. + */ +static boolean_t +zio_match_handler(zbookmark_phys_t *zb, uint64_t type, + zinject_record_t *record, int error) +{ + /* + * Check for a match against the MOS, which is based on type + */ + if (zb->zb_objset == DMU_META_OBJSET && + record->zi_objset == DMU_META_OBJSET && + record->zi_object == DMU_META_DNODE_OBJECT) { + if (record->zi_type == DMU_OT_NONE || + type == record->zi_type) + return (freq_triggered(record->zi_freq)); + else + return (B_FALSE); + } + + /* + * Check for an exact match. + */ + if (zb->zb_objset == record->zi_objset && + zb->zb_object == record->zi_object && + zb->zb_level == record->zi_level && + zb->zb_blkid >= record->zi_start && + zb->zb_blkid <= record->zi_end && + error == record->zi_error) + return (freq_triggered(record->zi_freq)); + + return (B_FALSE); +} + +/* + * Panic the system when a config change happens in the function + * specified by tag. + */ +void +zio_handle_panic_injection(spa_t *spa, char *tag, uint64_t type) +{ + inject_handler_t *handler; + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + + if (spa != handler->zi_spa) + continue; + + if (handler->zi_record.zi_type == type && + strcmp(tag, handler->zi_record.zi_func) == 0) + panic("Panic requested in function %s\n", tag); + } + + rw_exit(&inject_lock); +} + +/* + * Determine if the I/O in question should return failure. Returns the errno + * to be returned to the caller. + */ +int +zio_handle_fault_injection(zio_t *zio, int error) +{ + int ret = 0; + inject_handler_t *handler; + + /* + * Ignore I/O not associated with any logical data. + */ + if (zio->io_logical == NULL) + return (0); + + /* + * Currently, we only support fault injection on reads. + */ + if (zio->io_type != ZIO_TYPE_READ) + return (0); + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + + if (zio->io_spa != handler->zi_spa || + handler->zi_record.zi_cmd != ZINJECT_DATA_FAULT) + continue; + + /* If this handler matches, return EIO */ + if (zio_match_handler(&zio->io_logical->io_bookmark, + zio->io_bp ? BP_GET_TYPE(zio->io_bp) : DMU_OT_NONE, + &handler->zi_record, error)) { + ret = error; + break; + } + } + + rw_exit(&inject_lock); + + return (ret); +} + +/* + * Determine if the zio is part of a label update and has an injection + * handler associated with that portion of the label. Currently, we + * allow error injection in either the nvlist or the uberblock region of + * of the vdev label. + */ +int +zio_handle_label_injection(zio_t *zio, int error) +{ + inject_handler_t *handler; + vdev_t *vd = zio->io_vd; + uint64_t offset = zio->io_offset; + int label; + int ret = 0; + + if (offset >= VDEV_LABEL_START_SIZE && + offset < vd->vdev_psize - VDEV_LABEL_END_SIZE) + return (0); + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + uint64_t start = handler->zi_record.zi_start; + uint64_t end = handler->zi_record.zi_end; + + if (handler->zi_record.zi_cmd != ZINJECT_LABEL_FAULT) + continue; + + /* + * The injection region is the relative offsets within a + * vdev label. We must determine the label which is being + * updated and adjust our region accordingly. + */ + label = vdev_label_number(vd->vdev_psize, offset); + start = vdev_label_offset(vd->vdev_psize, label, start); + end = vdev_label_offset(vd->vdev_psize, label, end); + + if (zio->io_vd->vdev_guid == handler->zi_record.zi_guid && + (offset >= start && offset <= end)) { + ret = error; + break; + } + } + rw_exit(&inject_lock); + return (ret); +} + + +int +zio_handle_device_injection(vdev_t *vd, zio_t *zio, int error) +{ + inject_handler_t *handler; + int ret = 0; + + /* + * We skip over faults in the labels unless it's during + * device open (i.e. zio == NULL). + */ + if (zio != NULL) { + uint64_t offset = zio->io_offset; + + if (offset < VDEV_LABEL_START_SIZE || + offset >= vd->vdev_psize - VDEV_LABEL_END_SIZE) + return (0); + } + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + + if (handler->zi_record.zi_cmd != ZINJECT_DEVICE_FAULT) + continue; + + if (vd->vdev_guid == handler->zi_record.zi_guid) { + if (handler->zi_record.zi_failfast && + (zio == NULL || (zio->io_flags & + (ZIO_FLAG_IO_RETRY | ZIO_FLAG_TRYHARD)))) { + continue; + } + + /* Handle type specific I/O failures */ + if (zio != NULL && + handler->zi_record.zi_iotype != ZIO_TYPES && + handler->zi_record.zi_iotype != zio->io_type) + continue; + + if (handler->zi_record.zi_error == error) { + /* + * limit error injection if requested + */ + if (!freq_triggered(handler->zi_record.zi_freq)) + continue; + + /* + * For a failed open, pretend like the device + * has gone away. + */ + if (error == ENXIO) + vd->vdev_stat.vs_aux = + VDEV_AUX_OPEN_FAILED; + + /* + * Treat these errors as if they had been + * retried so that all the appropriate stats + * and FMA events are generated. + */ + if (!handler->zi_record.zi_failfast && + zio != NULL) + zio->io_flags |= ZIO_FLAG_IO_RETRY; + + ret = error; + break; + } + if (handler->zi_record.zi_error == ENXIO) { + ret = SET_ERROR(EIO); + break; + } + } + } + + rw_exit(&inject_lock); + + return (ret); +} + +/* + * Simulate hardware that ignores cache flushes. For requested number + * of seconds nix the actual writing to disk. + */ +void +zio_handle_ignored_writes(zio_t *zio) +{ + inject_handler_t *handler; + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + + /* Ignore errors not destined for this pool */ + if (zio->io_spa != handler->zi_spa || + handler->zi_record.zi_cmd != ZINJECT_IGNORED_WRITES) + continue; + + /* + * Positive duration implies # of seconds, negative + * a number of txgs + */ + if (handler->zi_record.zi_timer == 0) { + if (handler->zi_record.zi_duration > 0) + handler->zi_record.zi_timer = ddi_get_lbolt64(); + else + handler->zi_record.zi_timer = zio->io_txg; + } + + /* Have a "problem" writing 60% of the time */ + if (spa_get_random(100) < 60) + zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; + break; + } + + rw_exit(&inject_lock); +} + +void +spa_handle_ignored_writes(spa_t *spa) +{ + inject_handler_t *handler; + + if (zio_injection_enabled == 0) + return; + + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) { + + if (spa != handler->zi_spa || + handler->zi_record.zi_cmd != ZINJECT_IGNORED_WRITES) + continue; + + if (handler->zi_record.zi_duration > 0) { + VERIFY(handler->zi_record.zi_timer == 0 || + ddi_time_after64( + (int64_t)handler->zi_record.zi_timer + + handler->zi_record.zi_duration * hz, + ddi_get_lbolt64())); + } else { + /* duration is negative so the subtraction here adds */ + VERIFY(handler->zi_record.zi_timer == 0 || + handler->zi_record.zi_timer - + handler->zi_record.zi_duration >= + spa_syncing_txg(spa)); + } + } + + rw_exit(&inject_lock); +} + +hrtime_t +zio_handle_io_delay(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + inject_handler_t *min_handler = NULL; + hrtime_t min_target = 0; + inject_handler_t *handler; + hrtime_t idle; + hrtime_t busy; + hrtime_t target; + + rw_enter(&inject_lock, RW_READER); + + /* + * inject_delay_count is a subset of zio_injection_enabled that + * is only incremented for delay handlers. These checks are + * mainly added to remind the reader why we're not explicitly + * checking zio_injection_enabled like the other functions. + */ + IMPLY(inject_delay_count > 0, zio_injection_enabled > 0); + IMPLY(zio_injection_enabled == 0, inject_delay_count == 0); + + /* + * If there aren't any inject delay handlers registered, then we + * can short circuit and simply return 0 here. A value of zero + * informs zio_delay_interrupt() that this request should not be + * delayed. This short circuit keeps us from acquiring the + * inject_delay_mutex unnecessarily. + */ + if (inject_delay_count == 0) { + rw_exit(&inject_lock); + return (0); + } + + /* + * Each inject handler has a number of "lanes" associated with + * it. Each lane is able to handle requests independently of one + * another, and at a latency defined by the inject handler + * record's zi_timer field. Thus if a handler in configured with + * a single lane with a 10ms latency, it will delay requests + * such that only a single request is completed every 10ms. So, + * if more than one request is attempted per each 10ms interval, + * the average latency of the requests will be greater than + * 10ms; but if only a single request is submitted each 10ms + * interval the average latency will be 10ms. + * + * We need to acquire this mutex to prevent multiple concurrent + * threads being assigned to the same lane of a given inject + * handler. The mutex allows us to perform the following two + * operations atomically: + * + * 1. determine the minimum handler and minimum target + * value of all the possible handlers + * 2. update that minimum handler's lane array + * + * Without atomicity, two (or more) threads could pick the same + * lane in step (1), and then conflict with each other in step + * (2). This could allow a single lane handler to process + * multiple requests simultaneously, which shouldn't be possible. + */ + mutex_enter(&inject_delay_mtx); + + for (handler = list_head(&inject_handlers); + handler != NULL; handler = list_next(&inject_handlers, handler)) { + if (handler->zi_record.zi_cmd != ZINJECT_DELAY_IO) + continue; + + if (!freq_triggered(handler->zi_record.zi_freq)) + continue; + + if (vd->vdev_guid != handler->zi_record.zi_guid) + continue; + + /* + * Defensive; should never happen as the array allocation + * occurs prior to inserting this handler on the list. + */ + ASSERT3P(handler->zi_lanes, !=, NULL); + + /* + * This should never happen, the zinject command should + * prevent a user from setting an IO delay with zero lanes. + */ + ASSERT3U(handler->zi_record.zi_nlanes, !=, 0); + + ASSERT3U(handler->zi_record.zi_nlanes, >, + handler->zi_next_lane); + + /* + * We want to issue this IO to the lane that will become + * idle the soonest, so we compare the soonest this + * specific handler can complete the IO with all other + * handlers, to find the lowest value of all possible + * lanes. We then use this lane to submit the request. + * + * Since each handler has a constant value for its + * delay, we can just use the "next" lane for that + * handler; as it will always be the lane with the + * lowest value for that particular handler (i.e. the + * lane that will become idle the soonest). This saves a + * scan of each handler's lanes array. + * + * There's two cases to consider when determining when + * this specific IO request should complete. If this + * lane is idle, we want to "submit" the request now so + * it will complete after zi_timer milliseconds. Thus, + * we set the target to now + zi_timer. + * + * If the lane is busy, we want this request to complete + * zi_timer milliseconds after the lane becomes idle. + * Since the 'zi_lanes' array holds the time at which + * each lane will become idle, we use that value to + * determine when this request should complete. + */ + idle = handler->zi_record.zi_timer + gethrtime(); + busy = handler->zi_record.zi_timer + + handler->zi_lanes[handler->zi_next_lane]; + target = MAX(idle, busy); + + if (min_handler == NULL) { + min_handler = handler; + min_target = target; + continue; + } + + ASSERT3P(min_handler, !=, NULL); + ASSERT3U(min_target, !=, 0); + + /* + * We don't yet increment the "next lane" variable since + * we still might find a lower value lane in another + * handler during any remaining iterations. Once we're + * sure we've selected the absolute minimum, we'll claim + * the lane and increment the handler's "next lane" + * field below. + */ + + if (target < min_target) { + min_handler = handler; + min_target = target; + } + } + + /* + * 'min_handler' will be NULL if no IO delays are registered for + * this vdev, otherwise it will point to the handler containing + * the lane that will become idle the soonest. + */ + if (min_handler != NULL) { + ASSERT3U(min_target, !=, 0); + min_handler->zi_lanes[min_handler->zi_next_lane] = min_target; + + /* + * If we've used all possible lanes for this handler, + * loop back and start using the first lane again; + * otherwise, just increment the lane index. + */ + min_handler->zi_next_lane = (min_handler->zi_next_lane + 1) % + min_handler->zi_record.zi_nlanes; + } + + mutex_exit(&inject_delay_mtx); + rw_exit(&inject_lock); + + return (min_target); +} + +/* + * Create a new handler for the given record. We add it to the list, adding + * a reference to the spa_t in the process. We increment zio_injection_enabled, + * which is the switch to trigger all fault injection. + */ +int +zio_inject_fault(char *name, int flags, int *id, zinject_record_t *record) +{ + inject_handler_t *handler; + int error; + spa_t *spa; + + /* + * If this is pool-wide metadata, make sure we unload the corresponding + * spa_t, so that the next attempt to load it will trigger the fault. + * We call spa_reset() to unload the pool appropriately. + */ + if (flags & ZINJECT_UNLOAD_SPA) + if ((error = spa_reset(name)) != 0) + return (error); + + if (record->zi_cmd == ZINJECT_DELAY_IO) { + /* + * A value of zero for the number of lanes or for the + * delay time doesn't make sense. + */ + if (record->zi_timer == 0 || record->zi_nlanes == 0) + return (SET_ERROR(EINVAL)); + + /* + * The number of lanes is directly mapped to the size of + * an array used by the handler. Thus, to ensure the + * user doesn't trigger an allocation that's "too large" + * we cap the number of lanes here. + */ + if (record->zi_nlanes >= UINT16_MAX) + return (SET_ERROR(EINVAL)); + } + + if (!(flags & ZINJECT_NULL)) { + /* + * spa_inject_ref() will add an injection reference, which will + * prevent the pool from being removed from the namespace while + * still allowing it to be unloaded. + */ + if ((spa = spa_inject_addref(name)) == NULL) + return (SET_ERROR(ENOENT)); + + handler = kmem_alloc(sizeof (inject_handler_t), KM_SLEEP); + + handler->zi_spa = spa; + handler->zi_record = *record; + + if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) { + handler->zi_lanes = kmem_zalloc( + sizeof (*handler->zi_lanes) * + handler->zi_record.zi_nlanes, KM_SLEEP); + handler->zi_next_lane = 0; + } else { + handler->zi_lanes = NULL; + handler->zi_next_lane = 0; + } + + rw_enter(&inject_lock, RW_WRITER); + + /* + * We can't move this increment into the conditional + * above because we need to hold the RW_WRITER lock of + * inject_lock, and we don't want to hold that while + * allocating the handler's zi_lanes array. + */ + if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) { + ASSERT3S(inject_delay_count, >=, 0); + inject_delay_count++; + ASSERT3S(inject_delay_count, >, 0); + } + + *id = handler->zi_id = inject_next_id++; + list_insert_tail(&inject_handlers, handler); + atomic_inc_32(&zio_injection_enabled); + + rw_exit(&inject_lock); + } + + /* + * Flush the ARC, so that any attempts to read this data will end up + * going to the ZIO layer. Note that this is a little overkill, but + * we don't have the necessary ARC interfaces to do anything else, and + * fault injection isn't a performance critical path. + */ + if (flags & ZINJECT_FLUSH_ARC) + /* + * We must use FALSE to ensure arc_flush returns, since + * we're not preventing concurrent ARC insertions. + */ + arc_flush(NULL, FALSE); + + return (0); +} + +/* + * Returns the next record with an ID greater than that supplied to the + * function. Used to iterate over all handlers in the system. + */ +int +zio_inject_list_next(int *id, char *name, size_t buflen, + zinject_record_t *record) +{ + inject_handler_t *handler; + int ret; + + mutex_enter(&spa_namespace_lock); + rw_enter(&inject_lock, RW_READER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) + if (handler->zi_id > *id) + break; + + if (handler) { + *record = handler->zi_record; + *id = handler->zi_id; + (void) strncpy(name, spa_name(handler->zi_spa), buflen); + ret = 0; + } else { + ret = SET_ERROR(ENOENT); + } + + rw_exit(&inject_lock); + mutex_exit(&spa_namespace_lock); + + return (ret); +} + +/* + * Clear the fault handler with the given identifier, or return ENOENT if none + * exists. + */ +int +zio_clear_fault(int id) +{ + inject_handler_t *handler; + + rw_enter(&inject_lock, RW_WRITER); + + for (handler = list_head(&inject_handlers); handler != NULL; + handler = list_next(&inject_handlers, handler)) + if (handler->zi_id == id) + break; + + if (handler == NULL) { + rw_exit(&inject_lock); + return (SET_ERROR(ENOENT)); + } + + if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) { + ASSERT3S(inject_delay_count, >, 0); + inject_delay_count--; + ASSERT3S(inject_delay_count, >=, 0); + } + + list_remove(&inject_handlers, handler); + rw_exit(&inject_lock); + + if (handler->zi_record.zi_cmd == ZINJECT_DELAY_IO) { + ASSERT3P(handler->zi_lanes, !=, NULL); + kmem_free(handler->zi_lanes, sizeof (*handler->zi_lanes) * + handler->zi_record.zi_nlanes); + } else { + ASSERT3P(handler->zi_lanes, ==, NULL); + } + + spa_inject_delref(handler->zi_spa); + kmem_free(handler, sizeof (inject_handler_t)); + atomic_dec_32(&zio_injection_enabled); + + return (0); +} + +void +zio_inject_init(void) +{ + rw_init(&inject_lock, NULL, RW_DEFAULT, NULL); + mutex_init(&inject_delay_mtx, NULL, MUTEX_DEFAULT, NULL); + list_create(&inject_handlers, sizeof (inject_handler_t), + offsetof(inject_handler_t, zi_link)); +} + +void +zio_inject_fini(void) +{ + list_destroy(&inject_handlers); + mutex_destroy(&inject_delay_mtx); + rw_destroy(&inject_lock); +} + +#if defined(_KERNEL) && defined(HAVE_SPL) +EXPORT_SYMBOL(zio_injection_enabled); +EXPORT_SYMBOL(zio_inject_fault); +EXPORT_SYMBOL(zio_inject_list_next); +EXPORT_SYMBOL(zio_clear_fault); +EXPORT_SYMBOL(zio_handle_fault_injection); +EXPORT_SYMBOL(zio_handle_device_injection); +EXPORT_SYMBOL(zio_handle_label_injection); +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zle.c +++ linux-aws-4.15.0/zfs/module/zfs/zle.c @@ -0,0 +1,86 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Zero-length encoding. This is a fast and simple algorithm to eliminate + * runs of zeroes. Each chunk of compressed data begins with a length byte, b. + * If b < n (where n is the compression parameter) then the next b + 1 bytes + * are literal values. If b >= n then the next (256 - b + 1) bytes are zero. + */ +#include +#include + +size_t +zle_compress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + uchar_t *src = s_start; + uchar_t *dst = d_start; + uchar_t *s_end = src + s_len; + uchar_t *d_end = dst + d_len; + + while (src < s_end && dst < d_end - 1) { + uchar_t *first = src; + uchar_t *len = dst++; + if (src[0] == 0) { + uchar_t *last = src + (256 - n); + while (src < MIN(last, s_end) && src[0] == 0) + src++; + *len = src - first - 1 + n; + } else { + uchar_t *last = src + n; + if (d_end - dst < n) + break; + while (src < MIN(last, s_end) - 1 && (src[0] | src[1])) + *dst++ = *src++; + if (src[0]) + *dst++ = *src++; + *len = src - first - 1; + } + } + return (src == s_end ? dst - (uchar_t *)d_start : s_len); +} + +int +zle_decompress(void *s_start, void *d_start, size_t s_len, size_t d_len, int n) +{ + uchar_t *src = s_start; + uchar_t *dst = d_start; + uchar_t *s_end = src + s_len; + uchar_t *d_end = dst + d_len; + + while (src < s_end && dst < d_end) { + int len = 1 + *src++; + if (len <= n) { + while (len-- != 0) + *dst++ = *src++; + } else { + len -= n; + while (len-- != 0) + *dst++ = 0; + } + } + return (dst == d_end ? 0 : -1); +} --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_ctldir.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_ctldir.c @@ -0,0 +1,569 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * LLNL-CODE-403049. + * Rewritten for Linux by: + * Rohan Puri + * Brian Behlendorf + */ + +#include +#include +#include +#include +#include + +/* + * Common open routine. Disallow any write access. + */ +/* ARGSUSED */ +static int +zpl_common_open(struct inode *ip, struct file *filp) +{ + if (filp->f_mode & FMODE_WRITE) + return (-EACCES); + + return (generic_file_open(ip, filp)); +} + +/* + * Get root directory contents. + */ +static int +zpl_root_iterate(struct file *filp, struct dir_context *ctx) +{ + zfsvfs_t *zfsvfs = ITOZSB(file_inode(filp)); + int error = 0; + + ZFS_ENTER(zfsvfs); + + if (!dir_emit_dots(filp, ctx)) + goto out; + + if (ctx->pos == 2) { + if (!dir_emit(ctx, ZFS_SNAPDIR_NAME, strlen(ZFS_SNAPDIR_NAME), + ZFSCTL_INO_SNAPDIR, DT_DIR)) + goto out; + + ctx->pos++; + } + + if (ctx->pos == 3) { + if (!dir_emit(ctx, ZFS_SHAREDIR_NAME, strlen(ZFS_SHAREDIR_NAME), + ZFSCTL_INO_SHARES, DT_DIR)) + goto out; + + ctx->pos++; + } +out: + ZFS_EXIT(zfsvfs); + + return (error); +} + +#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) +static int +zpl_root_readdir(struct file *filp, void *dirent, filldir_t filldir) +{ + struct dir_context ctx = DIR_CONTEXT_INIT(dirent, filldir, filp->f_pos); + int error; + + error = zpl_root_iterate(filp, &ctx); + filp->f_pos = ctx.pos; + + return (error); +} +#endif /* HAVE_VFS_ITERATE */ + +/* + * Get root directory attributes. + */ +/* ARGSUSED */ +static int +zpl_root_getattr_impl(const struct path *path, struct kstat *stat, + u32 request_mask, unsigned int query_flags) +{ + struct inode *ip = path->dentry->d_inode; + + generic_fillattr(ip, stat); + stat->atime = current_time(ip); + + return (0); +} +ZPL_GETATTR_WRAPPER(zpl_root_getattr); + +static struct dentry * +#ifdef HAVE_LOOKUP_NAMEIDATA +zpl_root_lookup(struct inode *dip, struct dentry *dentry, struct nameidata *nd) +#else +zpl_root_lookup(struct inode *dip, struct dentry *dentry, unsigned int flags) +#endif +{ + cred_t *cr = CRED(); + struct inode *ip; + int error; + + crhold(cr); + error = -zfsctl_root_lookup(dip, dname(dentry), &ip, 0, cr, NULL, NULL); + ASSERT3S(error, <=, 0); + crfree(cr); + + if (error) { + if (error == -ENOENT) + return (d_splice_alias(NULL, dentry)); + else + return (ERR_PTR(error)); + } + + return (d_splice_alias(ip, dentry)); +} + +/* + * The '.zfs' control directory file and inode operations. + */ +const struct file_operations zpl_fops_root = { + .open = zpl_common_open, + .llseek = generic_file_llseek, + .read = generic_read_dir, +#ifdef HAVE_VFS_ITERATE_SHARED + .iterate_shared = zpl_root_iterate, +#elif defined(HAVE_VFS_ITERATE) + .iterate = zpl_root_iterate, +#else + .readdir = zpl_root_readdir, +#endif +}; + +const struct inode_operations zpl_ops_root = { + .lookup = zpl_root_lookup, + .getattr = zpl_root_getattr, +}; + +#ifdef HAVE_AUTOMOUNT +static struct vfsmount * +zpl_snapdir_automount(struct path *path) +{ + int error; + + error = -zfsctl_snapshot_mount(path, 0); + if (error) + return (ERR_PTR(error)); + + /* + * Rather than returning the new vfsmount for the snapshot we must + * return NULL to indicate a mount collision. This is done because + * the user space mount calls do_add_mount() which adds the vfsmount + * to the name space. If we returned the new mount here it would be + * added again to the vfsmount list resulting in list corruption. + */ + return (NULL); +} +#endif /* HAVE_AUTOMOUNT */ + +/* + * Negative dentries must always be revalidated so newly created snapshots + * can be detected and automounted. Normal dentries should be kept because + * as of the 3.18 kernel revaliding the mountpoint dentry will result in + * the snapshot being immediately unmounted. + */ +static int +#ifdef HAVE_D_REVALIDATE_NAMEIDATA +zpl_snapdir_revalidate(struct dentry *dentry, struct nameidata *i) +#else +zpl_snapdir_revalidate(struct dentry *dentry, unsigned int flags) +#endif +{ + return (!!dentry->d_inode); +} + +dentry_operations_t zpl_dops_snapdirs = { +/* + * Auto mounting of snapshots is only supported for 2.6.37 and + * newer kernels. Prior to this kernel the ops->follow_link() + * callback was used as a hack to trigger the mount. The + * resulting vfsmount was then explicitly grafted in to the + * name space. While it might be possible to add compatibility + * code to accomplish this it would require considerable care. + */ +#ifdef HAVE_AUTOMOUNT + .d_automount = zpl_snapdir_automount, +#endif /* HAVE_AUTOMOUNT */ + .d_revalidate = zpl_snapdir_revalidate, +}; + +static struct dentry * +#ifdef HAVE_LOOKUP_NAMEIDATA +zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry, + struct nameidata *nd) +#else +zpl_snapdir_lookup(struct inode *dip, struct dentry *dentry, + unsigned int flags) +#endif + +{ + fstrans_cookie_t cookie; + cred_t *cr = CRED(); + struct inode *ip = NULL; + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfsctl_snapdir_lookup(dip, dname(dentry), &ip, + 0, cr, NULL, NULL); + ASSERT3S(error, <=, 0); + spl_fstrans_unmark(cookie); + crfree(cr); + + if (error && error != -ENOENT) + return (ERR_PTR(error)); + + ASSERT(error == 0 || ip == NULL); + d_clear_d_op(dentry); + d_set_d_op(dentry, &zpl_dops_snapdirs); +#ifdef HAVE_AUTOMOUNT + dentry->d_flags |= DCACHE_NEED_AUTOMOUNT; +#endif + + return (d_splice_alias(ip, dentry)); +} + +static int +zpl_snapdir_iterate(struct file *filp, struct dir_context *ctx) +{ + zfsvfs_t *zfsvfs = ITOZSB(file_inode(filp)); + fstrans_cookie_t cookie; + char snapname[MAXNAMELEN]; + boolean_t case_conflict; + uint64_t id, pos; + int error = 0; + + ZFS_ENTER(zfsvfs); + cookie = spl_fstrans_mark(); + + if (!dir_emit_dots(filp, ctx)) + goto out; + + pos = ctx->pos; + while (error == 0) { + dsl_pool_config_enter(dmu_objset_pool(zfsvfs->z_os), FTAG); + error = -dmu_snapshot_list_next(zfsvfs->z_os, MAXNAMELEN, + snapname, &id, &pos, &case_conflict); + dsl_pool_config_exit(dmu_objset_pool(zfsvfs->z_os), FTAG); + if (error) + goto out; + + if (!dir_emit(ctx, snapname, strlen(snapname), + ZFSCTL_INO_SHARES - id, DT_DIR)) + goto out; + + ctx->pos = pos; + } +out: + spl_fstrans_unmark(cookie); + ZFS_EXIT(zfsvfs); + + if (error == -ENOENT) + return (0); + + return (error); +} + +#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) +static int +zpl_snapdir_readdir(struct file *filp, void *dirent, filldir_t filldir) +{ + struct dir_context ctx = DIR_CONTEXT_INIT(dirent, filldir, filp->f_pos); + int error; + + error = zpl_snapdir_iterate(filp, &ctx); + filp->f_pos = ctx.pos; + + return (error); +} +#endif /* HAVE_VFS_ITERATE */ + +static int +zpl_snapdir_rename2(struct inode *sdip, struct dentry *sdentry, + struct inode *tdip, struct dentry *tdentry, unsigned int flags) +{ + cred_t *cr = CRED(); + int error; + + /* We probably don't want to support renameat2(2) in ctldir */ + if (flags) + return (-EINVAL); + + crhold(cr); + error = -zfsctl_snapdir_rename(sdip, dname(sdentry), + tdip, dname(tdentry), cr, 0); + ASSERT3S(error, <=, 0); + crfree(cr); + + return (error); +} + +#ifndef HAVE_RENAME_WANTS_FLAGS +static int +zpl_snapdir_rename(struct inode *sdip, struct dentry *sdentry, + struct inode *tdip, struct dentry *tdentry) +{ + return (zpl_snapdir_rename2(sdip, sdentry, tdip, tdentry, 0)); +} +#endif + +static int +zpl_snapdir_rmdir(struct inode *dip, struct dentry *dentry) +{ + cred_t *cr = CRED(); + int error; + + crhold(cr); + error = -zfsctl_snapdir_remove(dip, dname(dentry), cr, 0); + ASSERT3S(error, <=, 0); + crfree(cr); + + return (error); +} + +static int +zpl_snapdir_mkdir(struct inode *dip, struct dentry *dentry, zpl_umode_t mode) +{ + cred_t *cr = CRED(); + vattr_t *vap; + struct inode *ip; + int error; + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dip, mode | S_IFDIR, cr); + + error = -zfsctl_snapdir_mkdir(dip, dname(dentry), vap, &ip, cr, 0); + if (error == 0) { + d_clear_d_op(dentry); + d_set_d_op(dentry, &zpl_dops_snapdirs); + d_instantiate(dentry, ip); + } + + kmem_free(vap, sizeof (vattr_t)); + ASSERT3S(error, <=, 0); + crfree(cr); + + return (error); +} + +/* + * Get snapshot directory attributes. + */ +/* ARGSUSED */ +static int +zpl_snapdir_getattr_impl(const struct path *path, struct kstat *stat, + u32 request_mask, unsigned int query_flags) +{ + struct inode *ip = path->dentry->d_inode; + zfsvfs_t *zfsvfs = ITOZSB(ip); + + ZFS_ENTER(zfsvfs); + generic_fillattr(ip, stat); + + stat->nlink = stat->size = 2; + stat->ctime = stat->mtime = dmu_objset_snap_cmtime(zfsvfs->z_os); + stat->atime = current_time(ip); + ZFS_EXIT(zfsvfs); + + return (0); +} +ZPL_GETATTR_WRAPPER(zpl_snapdir_getattr); + +/* + * The '.zfs/snapshot' directory file operations. These mainly control + * generating the list of available snapshots when doing an 'ls' in the + * directory. See zpl_snapdir_readdir(). + */ +const struct file_operations zpl_fops_snapdir = { + .open = zpl_common_open, + .llseek = generic_file_llseek, + .read = generic_read_dir, +#ifdef HAVE_VFS_ITERATE_SHARED + .iterate_shared = zpl_snapdir_iterate, +#elif defined(HAVE_VFS_ITERATE) + .iterate = zpl_snapdir_iterate, +#else + .readdir = zpl_snapdir_readdir, +#endif + +}; + +/* + * The '.zfs/snapshot' directory inode operations. These mainly control + * creating an inode for a snapshot directory and initializing the needed + * infrastructure to automount the snapshot. See zpl_snapdir_lookup(). + */ +const struct inode_operations zpl_ops_snapdir = { + .lookup = zpl_snapdir_lookup, + .getattr = zpl_snapdir_getattr, +#ifdef HAVE_RENAME_WANTS_FLAGS + .rename = zpl_snapdir_rename2, +#else + .rename = zpl_snapdir_rename, +#endif + .rmdir = zpl_snapdir_rmdir, + .mkdir = zpl_snapdir_mkdir, +}; + +static struct dentry * +#ifdef HAVE_LOOKUP_NAMEIDATA +zpl_shares_lookup(struct inode *dip, struct dentry *dentry, + struct nameidata *nd) +#else +zpl_shares_lookup(struct inode *dip, struct dentry *dentry, + unsigned int flags) +#endif +{ + fstrans_cookie_t cookie; + cred_t *cr = CRED(); + struct inode *ip = NULL; + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfsctl_shares_lookup(dip, dname(dentry), &ip, + 0, cr, NULL, NULL); + ASSERT3S(error, <=, 0); + spl_fstrans_unmark(cookie); + crfree(cr); + + if (error) { + if (error == -ENOENT) + return (d_splice_alias(NULL, dentry)); + else + return (ERR_PTR(error)); + } + + return (d_splice_alias(ip, dentry)); +} + +static int +zpl_shares_iterate(struct file *filp, struct dir_context *ctx) +{ + fstrans_cookie_t cookie; + cred_t *cr = CRED(); + zfsvfs_t *zfsvfs = ITOZSB(file_inode(filp)); + znode_t *dzp; + int error = 0; + + ZFS_ENTER(zfsvfs); + cookie = spl_fstrans_mark(); + + if (zfsvfs->z_shares_dir == 0) { + dir_emit_dots(filp, ctx); + goto out; + } + + error = -zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp); + if (error) + goto out; + + crhold(cr); + error = -zfs_readdir(ZTOI(dzp), ctx, cr); + crfree(cr); + + iput(ZTOI(dzp)); +out: + spl_fstrans_unmark(cookie); + ZFS_EXIT(zfsvfs); + ASSERT3S(error, <=, 0); + + return (error); +} + +#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) +static int +zpl_shares_readdir(struct file *filp, void *dirent, filldir_t filldir) +{ + struct dir_context ctx = DIR_CONTEXT_INIT(dirent, filldir, filp->f_pos); + int error; + + error = zpl_shares_iterate(filp, &ctx); + filp->f_pos = ctx.pos; + + return (error); +} +#endif /* HAVE_VFS_ITERATE */ + +/* ARGSUSED */ +static int +zpl_shares_getattr_impl(const struct path *path, struct kstat *stat, + u32 request_mask, unsigned int query_flags) +{ + struct inode *ip = path->dentry->d_inode; + zfsvfs_t *zfsvfs = ITOZSB(ip); + znode_t *dzp; + int error; + + ZFS_ENTER(zfsvfs); + + if (zfsvfs->z_shares_dir == 0) { + generic_fillattr(path->dentry->d_inode, stat); + stat->nlink = stat->size = 2; + stat->atime = current_time(ip); + ZFS_EXIT(zfsvfs); + return (0); + } + + error = -zfs_zget(zfsvfs, zfsvfs->z_shares_dir, &dzp); + if (error == 0) { + error = -zfs_getattr_fast(ZTOI(dzp), stat); + iput(ZTOI(dzp)); + } + + ZFS_EXIT(zfsvfs); + ASSERT3S(error, <=, 0); + + return (error); +} +ZPL_GETATTR_WRAPPER(zpl_shares_getattr); + +/* + * The '.zfs/shares' directory file operations. + */ +const struct file_operations zpl_fops_shares = { + .open = zpl_common_open, + .llseek = generic_file_llseek, + .read = generic_read_dir, +#ifdef HAVE_VFS_ITERATE_SHARED + .iterate_shared = zpl_shares_iterate, +#elif defined(HAVE_VFS_ITERATE) + .iterate = zpl_shares_iterate, +#else + .readdir = zpl_shares_readdir, +#endif + +}; + +/* + * The '.zfs/shares' directory inode operations. + */ +const struct inode_operations zpl_ops_shares = { + .lookup = zpl_shares_lookup, + .getattr = zpl_shares_getattr, +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_export.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_export.c @@ -0,0 +1,177 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011 Gunnar Beutner + * Copyright (c) 2012 Cyril Plisko. All rights reserved. + */ + + +#include +#include +#include +#include + + +static int +#ifdef HAVE_ENCODE_FH_WITH_INODE +zpl_encode_fh(struct inode *ip, __u32 *fh, int *max_len, struct inode *parent) +{ +#else +zpl_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len, int connectable) +{ + /* CSTYLED */ + struct inode *ip = dentry->d_inode; +#endif /* HAVE_ENCODE_FH_WITH_INODE */ + fstrans_cookie_t cookie; + fid_t *fid = (fid_t *)fh; + int len_bytes, rc; + + len_bytes = *max_len * sizeof (__u32); + + if (len_bytes < offsetof(fid_t, fid_data)) + return (255); + + fid->fid_len = len_bytes - offsetof(fid_t, fid_data); + cookie = spl_fstrans_mark(); + + if (zfsctl_is_node(ip)) + rc = zfsctl_fid(ip, fid); + else + rc = zfs_fid(ip, fid); + + spl_fstrans_unmark(cookie); + len_bytes = offsetof(fid_t, fid_data) + fid->fid_len; + *max_len = roundup(len_bytes, sizeof (__u32)) / sizeof (__u32); + + return (rc == 0 ? FILEID_INO32_GEN : 255); +} + +static struct dentry * +zpl_dentry_obtain_alias(struct inode *ip) +{ + struct dentry *result; + +#ifdef HAVE_D_OBTAIN_ALIAS + result = d_obtain_alias(ip); +#else + result = d_alloc_anon(ip); + + if (result == NULL) { + iput(ip); + result = ERR_PTR(-ENOMEM); + } +#endif /* HAVE_D_OBTAIN_ALIAS */ + + return (result); +} + +static struct dentry * +zpl_fh_to_dentry(struct super_block *sb, struct fid *fh, + int fh_len, int fh_type) +{ + fid_t *fid = (fid_t *)fh; + fstrans_cookie_t cookie; + struct inode *ip; + int len_bytes, rc; + + len_bytes = fh_len * sizeof (__u32); + + if (fh_type != FILEID_INO32_GEN || + len_bytes < offsetof(fid_t, fid_data) || + len_bytes < offsetof(fid_t, fid_data) + fid->fid_len) + return (ERR_PTR(-EINVAL)); + + cookie = spl_fstrans_mark(); + rc = zfs_vget(sb, &ip, fid); + spl_fstrans_unmark(cookie); + + if (rc) { + /* + * If we see ENOENT it might mean that an NFSv4 * client + * is using a cached inode value in a file handle and + * that the sought after file has had its inode changed + * by a third party. So change the error to ESTALE + * which will trigger a full lookup by the client and + * will find the new filename/inode pair if it still + * exists. + */ + if (rc == ENOENT) + rc = ESTALE; + + return (ERR_PTR(-rc)); + } + + ASSERT((ip != NULL) && !IS_ERR(ip)); + + return (zpl_dentry_obtain_alias(ip)); +} + +static struct dentry * +zpl_get_parent(struct dentry *child) +{ + cred_t *cr = CRED(); + fstrans_cookie_t cookie; + struct inode *ip; + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_lookup(child->d_inode, "..", &ip, 0, cr, NULL, NULL); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + if (error) + return (ERR_PTR(error)); + + return (zpl_dentry_obtain_alias(ip)); +} + +#ifdef HAVE_COMMIT_METADATA +static int +zpl_commit_metadata(struct inode *inode) +{ + cred_t *cr = CRED(); + fstrans_cookie_t cookie; + int error; + + if (zfsctl_is_node(inode)) + return (0); + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_fsync(inode, 0, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} +#endif /* HAVE_COMMIT_METADATA */ + +const struct export_operations zpl_export_operations = { + .encode_fh = zpl_encode_fh, + .fh_to_dentry = zpl_fh_to_dentry, + .get_parent = zpl_get_parent, +#ifdef HAVE_COMMIT_METADATA + .commit_metadata = zpl_commit_metadata, +#endif /* HAVE_COMMIT_METADATA */ +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_file.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_file.c @@ -0,0 +1,900 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011, Lawrence Livermore National Security, LLC. + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + */ + + +#ifdef CONFIG_COMPAT +#include +#endif +#include +#include +#include +#include +#include + + +static int +zpl_open(struct inode *ip, struct file *filp) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + error = generic_file_open(ip, filp); + if (error) + return (error); + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_open(ip, filp->f_mode, filp->f_flags, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_release(struct inode *ip, struct file *filp) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + if (ITOZ(ip)->z_atime_dirty) + zfs_mark_inode_dirty(ip); + + crhold(cr); + error = -zfs_close(ip, filp->f_flags, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_iterate(struct file *filp, struct dir_context *ctx) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_readdir(file_inode(filp), ctx, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#if !defined(HAVE_VFS_ITERATE) && !defined(HAVE_VFS_ITERATE_SHARED) +static int +zpl_readdir(struct file *filp, void *dirent, filldir_t filldir) +{ + struct dir_context ctx = DIR_CONTEXT_INIT(dirent, filldir, filp->f_pos); + int error; + + error = zpl_iterate(filp, &ctx); + filp->f_pos = ctx.pos; + + return (error); +} +#endif /* HAVE_VFS_ITERATE */ + +#if defined(HAVE_FSYNC_WITH_DENTRY) +/* + * Linux 2.6.x - 2.6.34 API, + * Through 2.6.34 the nfsd kernel server would pass a NULL 'file struct *' + * to the fops->fsync() hook. For this reason, we must be careful not to + * use filp unconditionally. + */ +static int +zpl_fsync(struct file *filp, struct dentry *dentry, int datasync) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_fsync(dentry->d_inode, datasync, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_FILE_AIO_FSYNC +static int +zpl_aio_fsync(struct kiocb *kiocb, int datasync) +{ + struct file *filp = kiocb->ki_filp; + return (zpl_fsync(filp, file_dentry(filp), datasync)); +} +#endif + +#elif defined(HAVE_FSYNC_WITHOUT_DENTRY) +/* + * Linux 2.6.35 - 3.0 API, + * As of 2.6.35 the dentry argument to the fops->fsync() hook was deemed + * redundant. The dentry is still accessible via filp->f_path.dentry, + * and we are guaranteed that filp will never be NULL. + */ +static int +zpl_fsync(struct file *filp, int datasync) +{ + struct inode *inode = filp->f_mapping->host; + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_fsync(inode, datasync, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_FILE_AIO_FSYNC +static int +zpl_aio_fsync(struct kiocb *kiocb, int datasync) +{ + return (zpl_fsync(kiocb->ki_filp, datasync)); +} +#endif + +#elif defined(HAVE_FSYNC_RANGE) +/* + * Linux 3.1 - 3.x API, + * As of 3.1 the responsibility to call filemap_write_and_wait_range() has + * been pushed down in to the .fsync() vfs hook. Additionally, the i_mutex + * lock is no longer held by the caller, for zfs we don't require the lock + * to be held so we don't acquire it. + */ +static int +zpl_fsync(struct file *filp, loff_t start, loff_t end, int datasync) +{ + struct inode *inode = filp->f_mapping->host; + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + error = filemap_write_and_wait_range(inode->i_mapping, start, end); + if (error) + return (error); + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_fsync(inode, datasync, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_FILE_AIO_FSYNC +static int +zpl_aio_fsync(struct kiocb *kiocb, int datasync) +{ + return (zpl_fsync(kiocb->ki_filp, kiocb->ki_pos, -1, datasync)); +} +#endif + +#else +#error "Unsupported fops->fsync() implementation" +#endif + +static ssize_t +zpl_read_common_iovec(struct inode *ip, const struct iovec *iovp, size_t count, + unsigned long nr_segs, loff_t *ppos, uio_seg_t segment, int flags, + cred_t *cr, size_t skip) +{ + ssize_t read; + uio_t uio; + int error; + fstrans_cookie_t cookie; + + uio.uio_iov = iovp; + uio.uio_skip = skip; + uio.uio_resid = count; + uio.uio_iovcnt = nr_segs; + uio.uio_loffset = *ppos; + uio.uio_limit = MAXOFFSET_T; + uio.uio_segflg = segment; + + cookie = spl_fstrans_mark(); + error = -zfs_read(ip, &uio, flags, cr); + spl_fstrans_unmark(cookie); + if (error < 0) + return (error); + + read = count - uio.uio_resid; + *ppos += read; + task_io_account_read(read); + + return (read); +} + +inline ssize_t +zpl_read_common(struct inode *ip, const char *buf, size_t len, loff_t *ppos, + uio_seg_t segment, int flags, cred_t *cr) +{ + struct iovec iov; + + iov.iov_base = (void *)buf; + iov.iov_len = len; + + return (zpl_read_common_iovec(ip, &iov, len, 1, ppos, segment, + flags, cr, 0)); +} + +static ssize_t +zpl_iter_read_common(struct kiocb *kiocb, const struct iovec *iovp, + unsigned long nr_segs, size_t count, uio_seg_t seg, size_t skip) +{ + cred_t *cr = CRED(); + struct file *filp = kiocb->ki_filp; + ssize_t read; + + crhold(cr); + read = zpl_read_common_iovec(filp->f_mapping->host, iovp, count, + nr_segs, &kiocb->ki_pos, seg, filp->f_flags, cr, skip); + crfree(cr); + + file_accessed(filp); + return (read); +} + +#if defined(HAVE_VFS_RW_ITERATE) +static ssize_t +zpl_iter_read(struct kiocb *kiocb, struct iov_iter *to) +{ + ssize_t ret; + uio_seg_t seg = UIO_USERSPACE; + if (to->type & ITER_KVEC) + seg = UIO_SYSSPACE; + if (to->type & ITER_BVEC) + seg = UIO_BVEC; + ret = zpl_iter_read_common(kiocb, to->iov, to->nr_segs, + iov_iter_count(to), seg, to->iov_offset); + if (ret > 0) + iov_iter_advance(to, ret); + return (ret); +} +#else +static ssize_t +zpl_aio_read(struct kiocb *kiocb, const struct iovec *iovp, + unsigned long nr_segs, loff_t pos) +{ + ssize_t ret; + size_t count; + + ret = generic_segment_checks(iovp, &nr_segs, &count, VERIFY_WRITE); + if (ret) + return (ret); + + return (zpl_iter_read_common(kiocb, iovp, nr_segs, count, + UIO_USERSPACE, 0)); +} +#endif /* HAVE_VFS_RW_ITERATE */ + +static ssize_t +zpl_write_common_iovec(struct inode *ip, const struct iovec *iovp, size_t count, + unsigned long nr_segs, loff_t *ppos, uio_seg_t segment, int flags, + cred_t *cr, size_t skip) +{ + ssize_t wrote; + uio_t uio; + int error; + fstrans_cookie_t cookie; + + if (flags & O_APPEND) + *ppos = i_size_read(ip); + + uio.uio_iov = iovp; + uio.uio_skip = skip; + uio.uio_resid = count; + uio.uio_iovcnt = nr_segs; + uio.uio_loffset = *ppos; + uio.uio_limit = MAXOFFSET_T; + uio.uio_segflg = segment; + + cookie = spl_fstrans_mark(); + error = -zfs_write(ip, &uio, flags, cr); + spl_fstrans_unmark(cookie); + if (error < 0) + return (error); + + wrote = count - uio.uio_resid; + *ppos += wrote; + task_io_account_write(wrote); + + return (wrote); +} + +inline ssize_t +zpl_write_common(struct inode *ip, const char *buf, size_t len, loff_t *ppos, + uio_seg_t segment, int flags, cred_t *cr) +{ + struct iovec iov; + + iov.iov_base = (void *)buf; + iov.iov_len = len; + + return (zpl_write_common_iovec(ip, &iov, len, 1, ppos, segment, + flags, cr, 0)); +} + +static ssize_t +zpl_iter_write_common(struct kiocb *kiocb, const struct iovec *iovp, + unsigned long nr_segs, size_t count, uio_seg_t seg, size_t skip) +{ + cred_t *cr = CRED(); + struct file *filp = kiocb->ki_filp; + ssize_t wrote; + + crhold(cr); + wrote = zpl_write_common_iovec(filp->f_mapping->host, iovp, count, + nr_segs, &kiocb->ki_pos, seg, filp->f_flags, cr, skip); + crfree(cr); + + return (wrote); +} + +#if defined(HAVE_VFS_RW_ITERATE) +static ssize_t +zpl_iter_write(struct kiocb *kiocb, struct iov_iter *from) +{ + size_t count; + ssize_t ret; + uio_seg_t seg = UIO_USERSPACE; + +#ifndef HAVE_GENERIC_WRITE_CHECKS_KIOCB + struct file *file = kiocb->ki_filp; + struct address_space *mapping = file->f_mapping; + struct inode *ip = mapping->host; + int isblk = S_ISBLK(ip->i_mode); + + count = iov_iter_count(from); + ret = generic_write_checks(file, &kiocb->ki_pos, &count, isblk); + if (ret) + return (ret); +#else + /* + * XXX - ideally this check should be in the same lock region with + * write operations, so that there's no TOCTTOU race when doing + * append and someone else grow the file. + */ + ret = generic_write_checks(kiocb, from); + if (ret <= 0) + return (ret); + count = ret; +#endif + + if (from->type & ITER_KVEC) + seg = UIO_SYSSPACE; + if (from->type & ITER_BVEC) + seg = UIO_BVEC; + + ret = zpl_iter_write_common(kiocb, from->iov, from->nr_segs, + count, seg, from->iov_offset); + if (ret > 0) + iov_iter_advance(from, ret); + + return (ret); +} +#else +static ssize_t +zpl_aio_write(struct kiocb *kiocb, const struct iovec *iovp, + unsigned long nr_segs, loff_t pos) +{ + struct file *file = kiocb->ki_filp; + struct address_space *mapping = file->f_mapping; + struct inode *ip = mapping->host; + int isblk = S_ISBLK(ip->i_mode); + size_t count; + ssize_t ret; + + ret = generic_segment_checks(iovp, &nr_segs, &count, VERIFY_READ); + if (ret) + return (ret); + + ret = generic_write_checks(file, &pos, &count, isblk); + if (ret) + return (ret); + + return (zpl_iter_write_common(kiocb, iovp, nr_segs, count, + UIO_USERSPACE, 0)); +} +#endif /* HAVE_VFS_RW_ITERATE */ + +static loff_t +zpl_llseek(struct file *filp, loff_t offset, int whence) +{ +#if defined(SEEK_HOLE) && defined(SEEK_DATA) + fstrans_cookie_t cookie; + + if (whence == SEEK_DATA || whence == SEEK_HOLE) { + struct inode *ip = filp->f_mapping->host; + loff_t maxbytes = ip->i_sb->s_maxbytes; + loff_t error; + + spl_inode_lock_shared(ip); + cookie = spl_fstrans_mark(); + error = -zfs_holey(ip, whence, &offset); + spl_fstrans_unmark(cookie); + if (error == 0) + error = lseek_execute(filp, ip, offset, maxbytes); + spl_inode_unlock_shared(ip); + + return (error); + } +#endif /* SEEK_HOLE && SEEK_DATA */ + + return (generic_file_llseek(filp, offset, whence)); +} + +/* + * It's worth taking a moment to describe how mmap is implemented + * for zfs because it differs considerably from other Linux filesystems. + * However, this issue is handled the same way under OpenSolaris. + * + * The issue is that by design zfs bypasses the Linux page cache and + * leaves all caching up to the ARC. This has been shown to work + * well for the common read(2)/write(2) case. However, mmap(2) + * is problem because it relies on being tightly integrated with the + * page cache. To handle this we cache mmap'ed files twice, once in + * the ARC and a second time in the page cache. The code is careful + * to keep both copies synchronized. + * + * When a file with an mmap'ed region is written to using write(2) + * both the data in the ARC and existing pages in the page cache + * are updated. For a read(2) data will be read first from the page + * cache then the ARC if needed. Neither a write(2) or read(2) will + * will ever result in new pages being added to the page cache. + * + * New pages are added to the page cache only via .readpage() which + * is called when the vfs needs to read a page off disk to back the + * virtual memory region. These pages may be modified without + * notifying the ARC and will be written out periodically via + * .writepage(). This will occur due to either a sync or the usual + * page aging behavior. Note because a read(2) of a mmap'ed file + * will always check the page cache first even when the ARC is out + * of date correct data will still be returned. + * + * While this implementation ensures correct behavior it does have + * have some drawbacks. The most obvious of which is that it + * increases the required memory footprint when access mmap'ed + * files. It also adds additional complexity to the code keeping + * both caches synchronized. + * + * Longer term it may be possible to cleanly resolve this wart by + * mapping page cache pages directly on to the ARC buffers. The + * Linux address space operations are flexible enough to allow + * selection of which pages back a particular index. The trick + * would be working out the details of which subsystem is in + * charge, the ARC, the page cache, or both. It may also prove + * helpful to move the ARC buffers to a scatter-gather lists + * rather than a vmalloc'ed region. + */ +static int +zpl_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct inode *ip = filp->f_mapping->host; + znode_t *zp = ITOZ(ip); + int error; + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + error = -zfs_map(ip, vma->vm_pgoff, (caddr_t *)vma->vm_start, + (size_t)(vma->vm_end - vma->vm_start), vma->vm_flags); + spl_fstrans_unmark(cookie); + if (error) + return (error); + + error = generic_file_mmap(filp, vma); + if (error) + return (error); + + mutex_enter(&zp->z_lock); + zp->z_is_mapped = 1; + mutex_exit(&zp->z_lock); + + return (error); +} + +/* + * Populate a page with data for the Linux page cache. This function is + * only used to support mmap(2). There will be an identical copy of the + * data in the ARC which is kept up to date via .write() and .writepage(). + * + * Current this function relies on zpl_read_common() and the O_DIRECT + * flag to read in a page. This works but the more correct way is to + * update zfs_fillpage() to be Linux friendly and use that interface. + */ +static int +zpl_readpage(struct file *filp, struct page *pp) +{ + struct inode *ip; + struct page *pl[1]; + int error = 0; + fstrans_cookie_t cookie; + + ASSERT(PageLocked(pp)); + ip = pp->mapping->host; + pl[0] = pp; + + cookie = spl_fstrans_mark(); + error = -zfs_getpage(ip, pl, 1); + spl_fstrans_unmark(cookie); + + if (error) { + SetPageError(pp); + ClearPageUptodate(pp); + } else { + ClearPageError(pp); + SetPageUptodate(pp); + flush_dcache_page(pp); + } + + unlock_page(pp); + return (error); +} + +/* + * Populate a set of pages with data for the Linux page cache. This + * function will only be called for read ahead and never for demand + * paging. For simplicity, the code relies on read_cache_pages() to + * correctly lock each page for IO and call zpl_readpage(). + */ +static int +zpl_readpages(struct file *filp, struct address_space *mapping, + struct list_head *pages, unsigned nr_pages) +{ + return (read_cache_pages(mapping, pages, + (filler_t *)zpl_readpage, filp)); +} + +int +zpl_putpage(struct page *pp, struct writeback_control *wbc, void *data) +{ + struct address_space *mapping = data; + fstrans_cookie_t cookie; + + ASSERT(PageLocked(pp)); + ASSERT(!PageWriteback(pp)); + + cookie = spl_fstrans_mark(); + (void) zfs_putpage(mapping->host, pp, wbc); + spl_fstrans_unmark(cookie); + + return (0); +} + +static int +zpl_writepages(struct address_space *mapping, struct writeback_control *wbc) +{ + znode_t *zp = ITOZ(mapping->host); + zfsvfs_t *zfsvfs = ITOZSB(mapping->host); + enum writeback_sync_modes sync_mode; + int result; + + ZFS_ENTER(zfsvfs); + if (zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS) + wbc->sync_mode = WB_SYNC_ALL; + ZFS_EXIT(zfsvfs); + sync_mode = wbc->sync_mode; + + /* + * We don't want to run write_cache_pages() in SYNC mode here, because + * that would make putpage() wait for a single page to be committed to + * disk every single time, resulting in atrocious performance. Instead + * we run it once in non-SYNC mode so that the ZIL gets all the data, + * and then we commit it all in one go. + */ + wbc->sync_mode = WB_SYNC_NONE; + result = write_cache_pages(mapping, wbc, zpl_putpage, mapping); + if (sync_mode != wbc->sync_mode) { + ZFS_ENTER(zfsvfs); + ZFS_VERIFY_ZP(zp); + if (zfsvfs->z_log != NULL) + zil_commit(zfsvfs->z_log, zp->z_id); + ZFS_EXIT(zfsvfs); + + /* + * We need to call write_cache_pages() again (we can't just + * return after the commit) because the previous call in + * non-SYNC mode does not guarantee that we got all the dirty + * pages (see the implementation of write_cache_pages() for + * details). That being said, this is a no-op in most cases. + */ + wbc->sync_mode = sync_mode; + result = write_cache_pages(mapping, wbc, zpl_putpage, mapping); + } + return (result); +} + +/* + * Write out dirty pages to the ARC, this function is only required to + * support mmap(2). Mapped pages may be dirtied by memory operations + * which never call .write(). These dirty pages are kept in sync with + * the ARC buffers via this hook. + */ +static int +zpl_writepage(struct page *pp, struct writeback_control *wbc) +{ + if (ITOZSB(pp->mapping->host)->z_os->os_sync == ZFS_SYNC_ALWAYS) + wbc->sync_mode = WB_SYNC_ALL; + + return (zpl_putpage(pp, wbc, pp->mapping)); +} + +/* + * The only flag combination which matches the behavior of zfs_space() + * is FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE. The FALLOC_FL_PUNCH_HOLE + * flag was introduced in the 2.6.38 kernel. + */ +#if defined(HAVE_FILE_FALLOCATE) || defined(HAVE_INODE_FALLOCATE) +long +zpl_fallocate_common(struct inode *ip, int mode, loff_t offset, loff_t len) +{ + int error = -EOPNOTSUPP; + +#if defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE) + cred_t *cr = CRED(); + flock64_t bf; + loff_t olen; + fstrans_cookie_t cookie; + + if (mode != (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) + return (error); + + if (offset < 0 || len <= 0) + return (-EINVAL); + + spl_inode_lock(ip); + olen = i_size_read(ip); + + if (offset > olen) { + spl_inode_unlock(ip); + return (0); + } + if (offset + len > olen) + len = olen - offset; + bf.l_type = F_WRLCK; + bf.l_whence = 0; + bf.l_start = offset; + bf.l_len = len; + bf.l_pid = 0; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_space(ip, F_FREESP, &bf, FWRITE, offset, cr); + spl_fstrans_unmark(cookie); + spl_inode_unlock(ip); + + crfree(cr); +#endif /* defined(FALLOC_FL_PUNCH_HOLE) && defined(FALLOC_FL_KEEP_SIZE) */ + + ASSERT3S(error, <=, 0); + return (error); +} +#endif /* defined(HAVE_FILE_FALLOCATE) || defined(HAVE_INODE_FALLOCATE) */ + +#ifdef HAVE_FILE_FALLOCATE +static long +zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len) +{ + return zpl_fallocate_common(file_inode(filp), + mode, offset, len); +} +#endif /* HAVE_FILE_FALLOCATE */ + +/* + * Map zfs file z_pflags (xvattr_t) to linux file attributes. Only file + * attributes common to both Linux and Solaris are mapped. + */ +static int +zpl_ioctl_getflags(struct file *filp, void __user *arg) +{ + struct inode *ip = file_inode(filp); + unsigned int ioctl_flags = 0; + uint64_t zfs_flags = ITOZ(ip)->z_pflags; + int error; + + if (zfs_flags & ZFS_IMMUTABLE) + ioctl_flags |= FS_IMMUTABLE_FL; + + if (zfs_flags & ZFS_APPENDONLY) + ioctl_flags |= FS_APPEND_FL; + + if (zfs_flags & ZFS_NODUMP) + ioctl_flags |= FS_NODUMP_FL; + + ioctl_flags &= FS_FL_USER_VISIBLE; + + error = copy_to_user(arg, &ioctl_flags, sizeof (ioctl_flags)); + + return (error); +} + +/* + * fchange() is a helper macro to detect if we have been asked to change a + * flag. This is ugly, but the requirement that we do this is a consequence of + * how the Linux file attribute interface was designed. Another consequence is + * that concurrent modification of files suffers from a TOCTOU race. Neither + * are things we can fix without modifying the kernel-userland interface, which + * is outside of our jurisdiction. + */ + +#define fchange(f0, f1, b0, b1) (!((f0) & (b0)) != !((f1) & (b1))) + +static int +zpl_ioctl_setflags(struct file *filp, void __user *arg) +{ + struct inode *ip = file_inode(filp); + uint64_t zfs_flags = ITOZ(ip)->z_pflags; + unsigned int ioctl_flags; + cred_t *cr = CRED(); + xvattr_t xva; + xoptattr_t *xoap; + int error; + fstrans_cookie_t cookie; + + if (copy_from_user(&ioctl_flags, arg, sizeof (ioctl_flags))) + return (-EFAULT); + + if ((ioctl_flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | FS_NODUMP_FL))) + return (-EOPNOTSUPP); + + if ((ioctl_flags & ~(FS_FL_USER_MODIFIABLE))) + return (-EACCES); + + if ((fchange(ioctl_flags, zfs_flags, FS_IMMUTABLE_FL, ZFS_IMMUTABLE) || + fchange(ioctl_flags, zfs_flags, FS_APPEND_FL, ZFS_APPENDONLY)) && + !capable(CAP_LINUX_IMMUTABLE)) + return (-EACCES); + + if (!zpl_inode_owner_or_capable(ip)) + return (-EACCES); + + xva_init(&xva); + xoap = xva_getxoptattr(&xva); + + XVA_SET_REQ(&xva, XAT_IMMUTABLE); + if (ioctl_flags & FS_IMMUTABLE_FL) + xoap->xoa_immutable = B_TRUE; + + XVA_SET_REQ(&xva, XAT_APPENDONLY); + if (ioctl_flags & FS_APPEND_FL) + xoap->xoa_appendonly = B_TRUE; + + XVA_SET_REQ(&xva, XAT_NODUMP); + if (ioctl_flags & FS_NODUMP_FL) + xoap->xoa_nodump = B_TRUE; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_setattr(ip, (vattr_t *)&xva, 0, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + + return (error); +} + +static long +zpl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case FS_IOC_GETFLAGS: + return (zpl_ioctl_getflags(filp, (void *)arg)); + case FS_IOC_SETFLAGS: + return (zpl_ioctl_setflags(filp, (void *)arg)); + default: + return (-ENOTTY); + } +} + +#ifdef CONFIG_COMPAT +static long +zpl_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case FS_IOC32_GETFLAGS: + cmd = FS_IOC_GETFLAGS; + break; + case FS_IOC32_SETFLAGS: + cmd = FS_IOC_SETFLAGS; + break; + default: + return (-ENOTTY); + } + return (zpl_ioctl(filp, cmd, (unsigned long)compat_ptr(arg))); +} +#endif /* CONFIG_COMPAT */ + + +const struct address_space_operations zpl_address_space_operations = { + .readpages = zpl_readpages, + .readpage = zpl_readpage, + .writepage = zpl_writepage, + .writepages = zpl_writepages, +}; + +const struct file_operations zpl_file_operations = { + .open = zpl_open, + .release = zpl_release, + .llseek = zpl_llseek, +#ifdef HAVE_VFS_RW_ITERATE +#ifdef HAVE_NEW_SYNC_READ + .read = new_sync_read, + .write = new_sync_write, +#endif + .read_iter = zpl_iter_read, + .write_iter = zpl_iter_write, +#else + .read = do_sync_read, + .write = do_sync_write, + .aio_read = zpl_aio_read, + .aio_write = zpl_aio_write, +#endif + .mmap = zpl_mmap, + .fsync = zpl_fsync, +#ifdef HAVE_FILE_AIO_FSYNC + .aio_fsync = zpl_aio_fsync, +#endif +#ifdef HAVE_FILE_FALLOCATE + .fallocate = zpl_fallocate, +#endif /* HAVE_FILE_FALLOCATE */ + .unlocked_ioctl = zpl_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = zpl_compat_ioctl, +#endif +}; + +const struct file_operations zpl_dir_file_operations = { + .llseek = generic_file_llseek, + .read = generic_read_dir, +#ifdef HAVE_VFS_ITERATE_SHARED + .iterate_shared = zpl_iterate, +#elif defined(HAVE_VFS_ITERATE) + .iterate = zpl_iterate, +#else + .readdir = zpl_readdir, +#endif + .fsync = zpl_fsync, + .unlocked_ioctl = zpl_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = zpl_compat_ioctl, +#endif +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_inode.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_inode.c @@ -0,0 +1,826 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011, Lawrence Livermore National Security, LLC. + * Copyright (c) 2015 by Chunwei Chen. All rights reserved. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + + +static struct dentry * +#ifdef HAVE_LOOKUP_NAMEIDATA +zpl_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) +#else +zpl_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) +#endif +{ + cred_t *cr = CRED(); + struct inode *ip; + int error; + fstrans_cookie_t cookie; + pathname_t *ppn = NULL; + pathname_t pn; + int zfs_flags = 0; + zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info; + + if (dlen(dentry) >= ZAP_MAXNAMELEN) + return (ERR_PTR(-ENAMETOOLONG)); + + crhold(cr); + cookie = spl_fstrans_mark(); + + /* If we are a case insensitive fs, we need the real name */ + if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { + zfs_flags = FIGNORECASE; + pn_alloc(&pn); + ppn = &pn; + } + + error = -zfs_lookup(dir, dname(dentry), &ip, zfs_flags, cr, NULL, ppn); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); + crfree(cr); + + spin_lock(&dentry->d_lock); + dentry->d_time = jiffies; +#ifndef HAVE_S_D_OP + d_set_d_op(dentry, &zpl_dentry_operations); +#endif /* HAVE_S_D_OP */ + spin_unlock(&dentry->d_lock); + + if (error) { + /* + * If we have a case sensitive fs, we do not want to + * insert negative entries, so return NULL for ENOENT. + * Fall through if the error is not ENOENT. Also free memory. + */ + if (ppn) { + pn_free(ppn); + if (error == -ENOENT) + return (NULL); + } + + if (error == -ENOENT) + return (d_splice_alias(NULL, dentry)); + else + return (ERR_PTR(error)); + } + + /* + * If we are case insensitive, call the correct function + * to install the name. + */ + if (ppn) { + struct dentry *new_dentry; + struct qstr ci_name; + + if (strcmp(dname(dentry), pn.pn_buf) == 0) { + new_dentry = d_splice_alias(ip, dentry); + } else { + ci_name.name = pn.pn_buf; + ci_name.len = strlen(pn.pn_buf); + new_dentry = d_add_ci(dentry, ip, &ci_name); + } + pn_free(ppn); + return (new_dentry); + } else { + return (d_splice_alias(ip, dentry)); + } +} + +void +zpl_vap_init(vattr_t *vap, struct inode *dir, zpl_umode_t mode, cred_t *cr) +{ + vap->va_mask = ATTR_MODE; + vap->va_mode = mode; + vap->va_uid = crgetfsuid(cr); + + if (dir && dir->i_mode & S_ISGID) { + vap->va_gid = KGID_TO_SGID(dir->i_gid); + if (S_ISDIR(mode)) + vap->va_mode |= S_ISGID; + } else { + vap->va_gid = crgetfsgid(cr); + } +} + +static int +#ifdef HAVE_CREATE_NAMEIDATA +zpl_create(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, + struct nameidata *nd) +#else +zpl_create(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, + bool flag) +#endif +{ + cred_t *cr = CRED(); + struct inode *ip; + vattr_t *vap; + int error; + fstrans_cookie_t cookie; + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dir, mode, cr); + + cookie = spl_fstrans_mark(); + error = -zfs_create(dir, dname(dentry), vap, 0, mode, &ip, cr, 0, NULL); + if (error == 0) { + d_instantiate(dentry, ip); + + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + if (error == 0) + error = zpl_init_acl(ip, dir); + + if (error) + (void) zfs_remove(dir, dname(dentry), cr, 0); + } + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_mknod(struct inode *dir, struct dentry *dentry, zpl_umode_t mode, + dev_t rdev) +{ + cred_t *cr = CRED(); + struct inode *ip; + vattr_t *vap; + int error; + fstrans_cookie_t cookie; + + /* + * We currently expect Linux to supply rdev=0 for all sockets + * and fifos, but we want to know if this behavior ever changes. + */ + if (S_ISSOCK(mode) || S_ISFIFO(mode)) + ASSERT(rdev == 0); + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dir, mode, cr); + vap->va_rdev = rdev; + + cookie = spl_fstrans_mark(); + error = -zfs_create(dir, dname(dentry), vap, 0, mode, &ip, cr, 0, NULL); + if (error == 0) { + d_instantiate(dentry, ip); + + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + if (error == 0) + error = zpl_init_acl(ip, dir); + + if (error) + (void) zfs_remove(dir, dname(dentry), cr, 0); + } + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_TMPFILE +static int +zpl_tmpfile(struct inode *dir, struct dentry *dentry, zpl_umode_t mode) +{ + cred_t *cr = CRED(); + struct inode *ip; + vattr_t *vap; + int error; + fstrans_cookie_t cookie; + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dir, mode, cr); + + cookie = spl_fstrans_mark(); + error = -zfs_tmpfile(dir, vap, 0, mode, &ip, cr, 0, NULL); + if (error == 0) { + /* d_tmpfile will do drop_nlink, so we should set it first */ + set_nlink(ip, 1); + d_tmpfile(dentry, ip); + + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + if (error == 0) + error = zpl_init_acl(ip, dir); + /* + * don't need to handle error here, file is already in + * unlinked set. + */ + } + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} +#endif + +static int +zpl_unlink(struct inode *dir, struct dentry *dentry) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_remove(dir, dname(dentry), cr, 0); + + /* + * For a CI FS we must invalidate the dentry to prevent the + * creation of negative entries. + */ + if (error == 0 && zfsvfs->z_case == ZFS_CASE_INSENSITIVE) + d_invalidate(dentry); + + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_mkdir(struct inode *dir, struct dentry *dentry, zpl_umode_t mode) +{ + cred_t *cr = CRED(); + vattr_t *vap; + struct inode *ip; + int error; + fstrans_cookie_t cookie; + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dir, mode | S_IFDIR, cr); + + cookie = spl_fstrans_mark(); + error = -zfs_mkdir(dir, dname(dentry), vap, &ip, cr, 0, NULL); + if (error == 0) { + d_instantiate(dentry, ip); + + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + if (error == 0) + error = zpl_init_acl(ip, dir); + + if (error) + (void) zfs_rmdir(dir, dname(dentry), NULL, cr, 0); + } + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_rmdir(struct inode *dir, struct dentry *dentry) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_rmdir(dir, dname(dentry), NULL, cr, 0); + + /* + * For a CI FS we must invalidate the dentry to prevent the + * creation of negative entries. + */ + if (error == 0 && zfsvfs->z_case == ZFS_CASE_INSENSITIVE) + d_invalidate(dentry); + + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_getattr_impl(const struct path *path, struct kstat *stat, u32 request_mask, + unsigned int query_flags) +{ + int error; + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + + /* + * XXX request_mask and query_flags currently ignored. + */ + + error = -zfs_getattr_fast(path->dentry->d_inode, stat); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); + + return (error); +} +ZPL_GETATTR_WRAPPER(zpl_getattr); + +static int +zpl_setattr(struct dentry *dentry, struct iattr *ia) +{ + struct inode *ip = dentry->d_inode; + cred_t *cr = CRED(); + vattr_t *vap; + int error; + fstrans_cookie_t cookie; + + error = setattr_prepare(dentry, ia); + if (error) + return (error); + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + vap->va_mask = ia->ia_valid & ATTR_IATTR_MASK; + vap->va_mode = ia->ia_mode; + vap->va_uid = KUID_TO_SUID(ia->ia_uid); + vap->va_gid = KGID_TO_SGID(ia->ia_gid); + vap->va_size = ia->ia_size; + vap->va_atime = ia->ia_atime; + vap->va_mtime = ia->ia_mtime; + vap->va_ctime = ia->ia_ctime; + + if (vap->va_mask & ATTR_ATIME) + ip->i_atime = timespec_trunc(ia->ia_atime, + ip->i_sb->s_time_gran); + + cookie = spl_fstrans_mark(); + error = -zfs_setattr(ip, vap, 0, cr); + if (!error && (ia->ia_valid & ATTR_MODE)) + error = zpl_chmod_acl(ip); + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_rename2(struct inode *sdip, struct dentry *sdentry, + struct inode *tdip, struct dentry *tdentry, unsigned int flags) +{ + cred_t *cr = CRED(); + int error; + fstrans_cookie_t cookie; + + /* We don't have renameat2(2) support */ + if (flags) + return (-EINVAL); + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_rename(sdip, dname(sdentry), tdip, dname(tdentry), cr, 0); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifndef HAVE_RENAME_WANTS_FLAGS +static int +zpl_rename(struct inode *sdip, struct dentry *sdentry, + struct inode *tdip, struct dentry *tdentry) +{ + return (zpl_rename2(sdip, sdentry, tdip, tdentry, 0)); +} +#endif + +static int +zpl_symlink(struct inode *dir, struct dentry *dentry, const char *name) +{ + cred_t *cr = CRED(); + vattr_t *vap; + struct inode *ip; + int error; + fstrans_cookie_t cookie; + + crhold(cr); + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + zpl_vap_init(vap, dir, S_IFLNK | S_IRWXUGO, cr); + + cookie = spl_fstrans_mark(); + error = -zfs_symlink(dir, dname(dentry), vap, (char *)name, &ip, cr, 0); + if (error == 0) { + d_instantiate(dentry, ip); + + error = zpl_xattr_security_init(ip, dir, &dentry->d_name); + if (error) + (void) zfs_remove(dir, dname(dentry), cr, 0); + } + + spl_fstrans_unmark(cookie); + kmem_free(vap, sizeof (vattr_t)); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#if defined(HAVE_PUT_LINK_COOKIE) +static void +zpl_put_link(struct inode *unused, void *cookie) +{ + kmem_free(cookie, MAXPATHLEN); +} +#elif defined(HAVE_PUT_LINK_NAMEIDATA) +static void +zpl_put_link(struct dentry *dentry, struct nameidata *nd, void *ptr) +{ + const char *link = nd_get_link(nd); + + if (!IS_ERR(link)) + kmem_free(link, MAXPATHLEN); +} +#elif defined(HAVE_PUT_LINK_DELAYED) +static void +zpl_put_link(void *ptr) +{ + kmem_free(ptr, MAXPATHLEN); +} +#endif + +static int +zpl_get_link_common(struct dentry *dentry, struct inode *ip, char **link) +{ + fstrans_cookie_t cookie; + cred_t *cr = CRED(); + struct iovec iov; + uio_t uio; + int error; + + crhold(cr); + *link = NULL; + iov.iov_len = MAXPATHLEN; + iov.iov_base = kmem_zalloc(MAXPATHLEN, KM_SLEEP); + + uio.uio_iov = &iov; + uio.uio_iovcnt = 1; + uio.uio_skip = 0; + uio.uio_resid = (MAXPATHLEN - 1); + uio.uio_segflg = UIO_SYSSPACE; + + cookie = spl_fstrans_mark(); + error = -zfs_readlink(ip, &uio, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + + if (error) + kmem_free(iov.iov_base, MAXPATHLEN); + else + *link = iov.iov_base; + + return (error); +} + +#if defined(HAVE_GET_LINK_DELAYED) +const char * +zpl_get_link(struct dentry *dentry, struct inode *inode, + struct delayed_call *done) +{ + char *link = NULL; + int error; + + if (!dentry) + return (ERR_PTR(-ECHILD)); + + error = zpl_get_link_common(dentry, inode, &link); + if (error) + return (ERR_PTR(error)); + + set_delayed_call(done, zpl_put_link, link); + + return (link); +} +#elif defined(HAVE_GET_LINK_COOKIE) +const char * +zpl_get_link(struct dentry *dentry, struct inode *inode, void **cookie) +{ + char *link = NULL; + int error; + + if (!dentry) + return (ERR_PTR(-ECHILD)); + + error = zpl_get_link_common(dentry, inode, &link); + if (error) + return (ERR_PTR(error)); + + return (*cookie = link); +} +#elif defined(HAVE_FOLLOW_LINK_COOKIE) +const char * +zpl_follow_link(struct dentry *dentry, void **cookie) +{ + char *link = NULL; + int error; + + error = zpl_get_link_common(dentry, dentry->d_inode, &link); + if (error) + return (ERR_PTR(error)); + + return (*cookie = link); +} +#elif defined(HAVE_FOLLOW_LINK_NAMEIDATA) +static void * +zpl_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + char *link = NULL; + int error; + + error = zpl_get_link_common(dentry, dentry->d_inode, &link); + if (error) + nd_set_link(nd, ERR_PTR(error)); + else + nd_set_link(nd, link); + + return (NULL); +} +#endif + +static int +zpl_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) +{ + cred_t *cr = CRED(); + struct inode *ip = old_dentry->d_inode; + int error; + fstrans_cookie_t cookie; + + if (ip->i_nlink >= ZFS_LINK_MAX) + return (-EMLINK); + + crhold(cr); + ip->i_ctime = current_time(ip); + igrab(ip); /* Use ihold() if available */ + + cookie = spl_fstrans_mark(); + error = -zfs_link(dir, ip, dname(dentry), cr, 0); + if (error) { + iput(ip); + goto out; + } + + d_instantiate(dentry, ip); +out: + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_INODE_TRUNCATE_RANGE +static void +zpl_truncate_range(struct inode *ip, loff_t start, loff_t end) +{ + cred_t *cr = CRED(); + flock64_t bf; + fstrans_cookie_t cookie; + + ASSERT3S(start, <=, end); + + /* + * zfs_freesp() will interpret (len == 0) as meaning "truncate until + * the end of the file". We don't want that. + */ + if (start == end) + return; + + crhold(cr); + + bf.l_type = F_WRLCK; + bf.l_whence = 0; + bf.l_start = start; + bf.l_len = end - start; + bf.l_pid = 0; + cookie = spl_fstrans_mark(); + zfs_space(ip, F_FREESP, &bf, FWRITE, start, cr); + spl_fstrans_unmark(cookie); + + crfree(cr); +} +#endif /* HAVE_INODE_TRUNCATE_RANGE */ + +#ifdef HAVE_INODE_FALLOCATE +static long +zpl_fallocate(struct inode *ip, int mode, loff_t offset, loff_t len) +{ + return (zpl_fallocate_common(ip, mode, offset, len)); +} +#endif /* HAVE_INODE_FALLOCATE */ + +static int +#ifdef HAVE_D_REVALIDATE_NAMEIDATA +zpl_revalidate(struct dentry *dentry, struct nameidata *nd) +{ + unsigned int flags = (nd ? nd->flags : 0); +#else +zpl_revalidate(struct dentry *dentry, unsigned int flags) +{ +#endif /* HAVE_D_REVALIDATE_NAMEIDATA */ + /* CSTYLED */ + zfsvfs_t *zfsvfs = dentry->d_sb->s_fs_info; + int error; + + if (flags & LOOKUP_RCU) + return (-ECHILD); + + /* + * Automounted snapshots rely on periodic dentry revalidation + * to defer snapshots from being automatically unmounted. + */ + if (zfsvfs->z_issnap) { + if (time_after(jiffies, zfsvfs->z_snap_defer_time + + MAX(zfs_expire_snapshot * HZ / 2, HZ))) { + zfsvfs->z_snap_defer_time = jiffies; + zfsctl_snapshot_unmount_delay(zfsvfs->z_os->os_spa, + dmu_objset_id(zfsvfs->z_os), zfs_expire_snapshot); + } + } + + /* + * After a rollback negative dentries created before the rollback + * time must be invalidated. Otherwise they can obscure files which + * are only present in the rolled back dataset. + */ + if (dentry->d_inode == NULL) { + spin_lock(&dentry->d_lock); + error = time_before(dentry->d_time, zfsvfs->z_rollback_time); + spin_unlock(&dentry->d_lock); + + if (error) + return (0); + } + + /* + * The dentry may reference a stale inode if a mounted file system + * was rolled back to a point in time where the object didn't exist. + */ + if (dentry->d_inode && ITOZ(dentry->d_inode)->z_is_stale) + return (0); + + return (1); +} + +const struct inode_operations zpl_inode_operations = { + .setattr = zpl_setattr, + .getattr = zpl_getattr, +#ifdef HAVE_GENERIC_SETXATTR + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, +#endif + .listxattr = zpl_xattr_list, +#ifdef HAVE_INODE_TRUNCATE_RANGE + .truncate_range = zpl_truncate_range, +#endif /* HAVE_INODE_TRUNCATE_RANGE */ +#ifdef HAVE_INODE_FALLOCATE + .fallocate = zpl_fallocate, +#endif /* HAVE_INODE_FALLOCATE */ +#if defined(CONFIG_FS_POSIX_ACL) +#if defined(HAVE_SET_ACL) + .set_acl = zpl_set_acl, +#endif +#if defined(HAVE_GET_ACL) + .get_acl = zpl_get_acl, +#elif defined(HAVE_CHECK_ACL) + .check_acl = zpl_check_acl, +#elif defined(HAVE_PERMISSION) + .permission = zpl_permission, +#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */ +#endif /* CONFIG_FS_POSIX_ACL */ +}; + +const struct inode_operations zpl_dir_inode_operations = { + .create = zpl_create, + .lookup = zpl_lookup, + .link = zpl_link, + .unlink = zpl_unlink, + .symlink = zpl_symlink, + .mkdir = zpl_mkdir, + .rmdir = zpl_rmdir, + .mknod = zpl_mknod, +#ifdef HAVE_RENAME_WANTS_FLAGS + .rename = zpl_rename2, +#else + .rename = zpl_rename, +#endif +#ifdef HAVE_TMPFILE + .tmpfile = zpl_tmpfile, +#endif + .setattr = zpl_setattr, + .getattr = zpl_getattr, +#ifdef HAVE_GENERIC_SETXATTR + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, +#endif + .listxattr = zpl_xattr_list, +#if defined(CONFIG_FS_POSIX_ACL) +#if defined(HAVE_SET_ACL) + .set_acl = zpl_set_acl, +#endif +#if defined(HAVE_GET_ACL) + .get_acl = zpl_get_acl, +#elif defined(HAVE_CHECK_ACL) + .check_acl = zpl_check_acl, +#elif defined(HAVE_PERMISSION) + .permission = zpl_permission, +#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */ +#endif /* CONFIG_FS_POSIX_ACL */ +}; + +const struct inode_operations zpl_symlink_inode_operations = { +#ifdef HAVE_GENERIC_READLINK + .readlink = generic_readlink, +#endif +#if defined(HAVE_GET_LINK_DELAYED) || defined(HAVE_GET_LINK_COOKIE) + .get_link = zpl_get_link, +#elif defined(HAVE_FOLLOW_LINK_COOKIE) || defined(HAVE_FOLLOW_LINK_NAMEIDATA) + .follow_link = zpl_follow_link, +#endif +#if defined(HAVE_PUT_LINK_COOKIE) || defined(HAVE_PUT_LINK_NAMEIDATA) + .put_link = zpl_put_link, +#endif + .setattr = zpl_setattr, + .getattr = zpl_getattr, +#ifdef HAVE_GENERIC_SETXATTR + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, +#endif + .listxattr = zpl_xattr_list, +}; + +const struct inode_operations zpl_special_inode_operations = { + .setattr = zpl_setattr, + .getattr = zpl_getattr, +#ifdef HAVE_GENERIC_SETXATTR + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, +#endif + .listxattr = zpl_xattr_list, +#if defined(CONFIG_FS_POSIX_ACL) +#if defined(HAVE_SET_ACL) + .set_acl = zpl_set_acl, +#endif +#if defined(HAVE_GET_ACL) + .get_acl = zpl_get_acl, +#elif defined(HAVE_CHECK_ACL) + .check_acl = zpl_check_acl, +#elif defined(HAVE_PERMISSION) + .permission = zpl_permission, +#endif /* HAVE_GET_ACL | HAVE_CHECK_ACL | HAVE_PERMISSION */ +#endif /* CONFIG_FS_POSIX_ACL */ +}; + +dentry_operations_t zpl_dentry_operations = { + .d_revalidate = zpl_revalidate, +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_super.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_super.c @@ -0,0 +1,342 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011, Lawrence Livermore National Security, LLC. + */ + + +#include +#include +#include +#include +#include + + +static struct inode * +zpl_inode_alloc(struct super_block *sb) +{ + struct inode *ip; + + VERIFY3S(zfs_inode_alloc(sb, &ip), ==, 0); + ip->i_version = 1; + + return (ip); +} + +static void +zpl_inode_destroy(struct inode *ip) +{ + ASSERT(atomic_read(&ip->i_count) == 0); + zfs_inode_destroy(ip); +} + +/* + * Called from __mark_inode_dirty() to reflect that something in the + * inode has changed. We use it to ensure the znode system attributes + * are always strictly update to date with respect to the inode. + */ +#ifdef HAVE_DIRTY_INODE_WITH_FLAGS +static void +zpl_dirty_inode(struct inode *ip, int flags) +{ + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + zfs_dirty_inode(ip, flags); + spl_fstrans_unmark(cookie); +} +#else +static void +zpl_dirty_inode(struct inode *ip) +{ + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + zfs_dirty_inode(ip, 0); + spl_fstrans_unmark(cookie); +} +#endif /* HAVE_DIRTY_INODE_WITH_FLAGS */ + +/* + * When ->drop_inode() is called its return value indicates if the + * inode should be evicted from the inode cache. If the inode is + * unhashed and has no links the default policy is to evict it + * immediately. + * + * Prior to 2.6.36 this eviction was accomplished by the vfs calling + * ->delete_inode(). It was ->delete_inode()'s responsibility to + * truncate the inode pages and call clear_inode(). The call to + * clear_inode() synchronously invalidates all the buffers and + * calls ->clear_inode(). It was ->clear_inode()'s responsibility + * to cleanup and filesystem specific data before freeing the inode. + * + * This elaborate mechanism was replaced by ->evict_inode() which + * does the job of both ->delete_inode() and ->clear_inode(). It + * will be called exactly once, and when it returns the inode must + * be in a state where it can simply be freed.i + * + * The ->evict_inode() callback must minimally truncate the inode pages, + * and call clear_inode(). For 2.6.35 and later kernels this will + * simply update the inode state, with the sync occurring before the + * truncate in evict(). For earlier kernels clear_inode() maps to + * end_writeback() which is responsible for completing all outstanding + * write back. In either case, once this is done it is safe to cleanup + * any remaining inode specific data via zfs_inactive(). + * remaining filesystem specific data. + */ +#ifdef HAVE_EVICT_INODE +static void +zpl_evict_inode(struct inode *ip) +{ + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + truncate_setsize(ip, 0); + clear_inode(ip); + zfs_inactive(ip); + spl_fstrans_unmark(cookie); +} + +#else + +static void +zpl_drop_inode(struct inode *ip) +{ + generic_delete_inode(ip); +} + +static void +zpl_clear_inode(struct inode *ip) +{ + fstrans_cookie_t cookie; + + cookie = spl_fstrans_mark(); + zfs_inactive(ip); + spl_fstrans_unmark(cookie); +} + +static void +zpl_inode_delete(struct inode *ip) +{ + truncate_setsize(ip, 0); + clear_inode(ip); +} +#endif /* HAVE_EVICT_INODE */ + +static void +zpl_put_super(struct super_block *sb) +{ + fstrans_cookie_t cookie; + int error; + + cookie = spl_fstrans_mark(); + error = -zfs_umount(sb); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); +} + +static int +zpl_sync_fs(struct super_block *sb, int wait) +{ + fstrans_cookie_t cookie; + cred_t *cr = CRED(); + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + error = -zfs_sync(sb, wait, cr); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_statfs(struct dentry *dentry, struct kstatfs *statp) +{ + fstrans_cookie_t cookie; + int error; + + cookie = spl_fstrans_mark(); + error = -zfs_statvfs(dentry, statp); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_remount_fs(struct super_block *sb, int *flags, char *data) +{ + zfs_mnt_t zm = { .mnt_osname = NULL, .mnt_data = data }; + fstrans_cookie_t cookie; + int error; + + cookie = spl_fstrans_mark(); + error = -zfs_remount(sb, flags, &zm); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +__zpl_show_options(struct seq_file *seq, zfsvfs_t *zfsvfs) +{ + seq_printf(seq, ",%s", + zfsvfs->z_flags & ZSB_XATTR ? "xattr" : "noxattr"); + +#ifdef CONFIG_FS_POSIX_ACL + switch (zfsvfs->z_acl_type) { + case ZFS_ACLTYPE_POSIXACL: + seq_puts(seq, ",posixacl"); + break; + default: + seq_puts(seq, ",noacl"); + break; + } +#endif /* CONFIG_FS_POSIX_ACL */ + + return (0); +} + +#ifdef HAVE_SHOW_OPTIONS_WITH_DENTRY +static int +zpl_show_options(struct seq_file *seq, struct dentry *root) +{ + return (__zpl_show_options(seq, root->d_sb->s_fs_info)); +} +#else +static int +zpl_show_options(struct seq_file *seq, struct vfsmount *vfsp) +{ + return (__zpl_show_options(seq, vfsp->mnt_sb->s_fs_info)); +} +#endif /* HAVE_SHOW_OPTIONS_WITH_DENTRY */ + +static int +zpl_fill_super(struct super_block *sb, void *data, int silent) +{ + zfs_mnt_t *zm = (zfs_mnt_t *)data; + fstrans_cookie_t cookie; + int error; + + cookie = spl_fstrans_mark(); + error = -zfs_domount(sb, zm, silent); + spl_fstrans_unmark(cookie); + ASSERT3S(error, <=, 0); + + return (error); +} + +#ifdef HAVE_MOUNT_NODEV +static struct dentry * +zpl_mount(struct file_system_type *fs_type, int flags, + const char *osname, void *data) +{ + zfs_mnt_t zm = { .mnt_osname = osname, .mnt_data = data }; + + return (mount_nodev(fs_type, flags, &zm, zpl_fill_super)); +} +#else +static int +zpl_get_sb(struct file_system_type *fs_type, int flags, + const char *osname, void *data, struct vfsmount *mnt) +{ + zfs_mnt_t zm = { .mnt_osname = osname, .mnt_data = data }; + + return (get_sb_nodev(fs_type, flags, &zm, zpl_fill_super, mnt)); +} +#endif /* HAVE_MOUNT_NODEV */ + +static void +zpl_kill_sb(struct super_block *sb) +{ + zfs_preumount(sb); + kill_anon_super(sb); + +#ifdef HAVE_S_INSTANCES_LIST_HEAD + sb->s_instances.next = &(zpl_fs_type.fs_supers); +#endif /* HAVE_S_INSTANCES_LIST_HEAD */ +} + +void +zpl_prune_sb(int64_t nr_to_scan, void *arg) +{ + struct super_block *sb = (struct super_block *)arg; + int objects = 0; + + (void) -zfs_prune(sb, nr_to_scan, &objects); +} + +#ifdef HAVE_NR_CACHED_OBJECTS +static int +zpl_nr_cached_objects(struct super_block *sb) +{ + return (0); +} +#endif /* HAVE_NR_CACHED_OBJECTS */ + +#ifdef HAVE_FREE_CACHED_OBJECTS +static void +zpl_free_cached_objects(struct super_block *sb, int nr_to_scan) +{ + /* noop */ +} +#endif /* HAVE_FREE_CACHED_OBJECTS */ + +const struct super_operations zpl_super_operations = { + .alloc_inode = zpl_inode_alloc, + .destroy_inode = zpl_inode_destroy, + .dirty_inode = zpl_dirty_inode, + .write_inode = NULL, +#ifdef HAVE_EVICT_INODE + .evict_inode = zpl_evict_inode, +#else + .drop_inode = zpl_drop_inode, + .clear_inode = zpl_clear_inode, + .delete_inode = zpl_inode_delete, +#endif /* HAVE_EVICT_INODE */ + .put_super = zpl_put_super, + .sync_fs = zpl_sync_fs, + .statfs = zpl_statfs, + .remount_fs = zpl_remount_fs, + .show_options = zpl_show_options, + .show_stats = NULL, +#ifdef HAVE_NR_CACHED_OBJECTS + .nr_cached_objects = zpl_nr_cached_objects, +#endif /* HAVE_NR_CACHED_OBJECTS */ +#ifdef HAVE_FREE_CACHED_OBJECTS + .free_cached_objects = zpl_free_cached_objects, +#endif /* HAVE_FREE_CACHED_OBJECTS */ +}; + +struct file_system_type zpl_fs_type = { + .owner = THIS_MODULE, + .name = ZFS_DRIVER, +#ifdef HAVE_MOUNT_NODEV + .mount = zpl_mount, +#else + .get_sb = zpl_get_sb, +#endif /* HAVE_MOUNT_NODEV */ + .kill_sb = zpl_kill_sb, +}; --- linux-aws-4.15.0.orig/zfs/module/zfs/zpl_xattr.c +++ linux-aws-4.15.0/zfs/module/zfs/zpl_xattr.c @@ -0,0 +1,1548 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2011, Lawrence Livermore National Security, LLC. + * + * Extended attributes (xattr) on Solaris are implemented as files + * which exist in a hidden xattr directory. These extended attributes + * can be accessed using the attropen() system call which opens + * the extended attribute. It can then be manipulated just like + * a standard file descriptor. This has a couple advantages such + * as practically no size limit on the file, and the extended + * attributes permissions may differ from those of the parent file. + * This interface is really quite clever, but it's also completely + * different than what is supported on Linux. It also comes with a + * steep performance penalty when accessing small xattrs because they + * are not stored with the parent file. + * + * Under Linux extended attributes are manipulated by the system + * calls getxattr(2), setxattr(2), and listxattr(2). They consider + * extended attributes to be name/value pairs where the name is a + * NULL terminated string. The name must also include one of the + * following namespace prefixes: + * + * user - No restrictions and is available to user applications. + * trusted - Restricted to kernel and root (CAP_SYS_ADMIN) use. + * system - Used for access control lists (system.nfs4_acl, etc). + * security - Used by SELinux to store a files security context. + * + * The value under Linux to limited to 65536 bytes of binary data. + * In practice, individual xattrs tend to be much smaller than this + * and are typically less than 100 bytes. A good example of this + * are the security.selinux xattrs which are less than 100 bytes and + * exist for every file when xattr labeling is enabled. + * + * The Linux xattr implementation has been written to take advantage of + * this typical usage. When the dataset property 'xattr=sa' is set, + * then xattrs will be preferentially stored as System Attributes (SA). + * This allows tiny xattrs (~100 bytes) to be stored with the dnode and + * up to 64k of xattrs to be stored in the spill block. If additional + * xattr space is required, which is unlikely under Linux, they will + * be stored using the traditional directory approach. + * + * This optimization results in roughly a 3x performance improvement + * when accessing xattrs because it avoids the need to perform a seek + * for every xattr value. When multiple xattrs are stored per-file + * the performance improvements are even greater because all of the + * xattrs stored in the spill block will be cached. + * + * However, by default SA based xattrs are disabled in the Linux port + * to maximize compatibility with other implementations. If you do + * enable SA based xattrs then they will not be visible on platforms + * which do not support this feature. + * + * NOTE: One additional consequence of the xattr directory implementation + * is that when an extended attribute is manipulated an inode is created. + * This inode will exist in the Linux inode cache but there will be no + * associated entry in the dentry cache which references it. This is + * safe but it may result in some confusion. Enabling SA based xattrs + * largely avoids the issue except in the overflow case. + */ + +#include +#include +#include +#include +#include +#include + +typedef struct xattr_filldir { + size_t size; + size_t offset; + char *buf; + struct dentry *dentry; +} xattr_filldir_t; + +static const struct xattr_handler *zpl_xattr_handler(const char *); + +static int +zpl_xattr_permission(xattr_filldir_t *xf, const char *name, int name_len) +{ + static const struct xattr_handler *handler; + struct dentry *d = xf->dentry; + + handler = zpl_xattr_handler(name); + if (!handler) + return (0); + + if (handler->list) { +#if defined(HAVE_XATTR_LIST_SIMPLE) + if (!handler->list(d)) + return (0); +#elif defined(HAVE_XATTR_LIST_DENTRY) + if (!handler->list(d, NULL, 0, name, name_len, 0)) + return (0); +#elif defined(HAVE_XATTR_LIST_HANDLER) + if (!handler->list(handler, d, NULL, 0, name, name_len)) + return (0); +#elif defined(HAVE_XATTR_LIST_INODE) + if (!handler->list(d->d_inode, NULL, 0, name, name_len)) + return (0); +#endif + } + + return (1); +} + +/* + * Determine is a given xattr name should be visible and if so copy it + * in to the provided buffer (xf->buf). + */ +static int +zpl_xattr_filldir(xattr_filldir_t *xf, const char *name, int name_len) +{ + /* Check permissions using the per-namespace list xattr handler. */ + if (!zpl_xattr_permission(xf, name, name_len)) + return (0); + + /* When xf->buf is NULL only calculate the required size. */ + if (xf->buf) { + if (xf->offset + name_len + 1 > xf->size) + return (-ERANGE); + + memcpy(xf->buf + xf->offset, name, name_len); + xf->buf[xf->offset + name_len] = '\0'; + } + + xf->offset += (name_len + 1); + + return (0); +} + +/* + * Read as many directory entry names as will fit in to the provided buffer, + * or when no buffer is provided calculate the required buffer size. + */ +int +zpl_xattr_readdir(struct inode *dxip, xattr_filldir_t *xf) +{ + zap_cursor_t zc; + zap_attribute_t zap; + int error; + + zap_cursor_init(&zc, ITOZSB(dxip)->z_os, ITOZ(dxip)->z_id); + + while ((error = -zap_cursor_retrieve(&zc, &zap)) == 0) { + + if (zap.za_integer_length != 8 || zap.za_num_integers != 1) { + error = -ENXIO; + break; + } + + error = zpl_xattr_filldir(xf, zap.za_name, strlen(zap.za_name)); + if (error) + break; + + zap_cursor_advance(&zc); + } + + zap_cursor_fini(&zc); + + if (error == -ENOENT) + error = 0; + + return (error); +} + +static ssize_t +zpl_xattr_list_dir(xattr_filldir_t *xf, cred_t *cr) +{ + struct inode *ip = xf->dentry->d_inode; + struct inode *dxip = NULL; + int error; + + /* Lookup the xattr directory */ + error = -zfs_lookup(ip, NULL, &dxip, LOOKUP_XATTR, cr, NULL, NULL); + if (error) { + if (error == -ENOENT) + error = 0; + + return (error); + } + + error = zpl_xattr_readdir(dxip, xf); + iput(dxip); + + return (error); +} + +static ssize_t +zpl_xattr_list_sa(xattr_filldir_t *xf) +{ + znode_t *zp = ITOZ(xf->dentry->d_inode); + nvpair_t *nvp = NULL; + int error = 0; + + mutex_enter(&zp->z_lock); + if (zp->z_xattr_cached == NULL) + error = -zfs_sa_get_xattr(zp); + mutex_exit(&zp->z_lock); + + if (error) + return (error); + + ASSERT(zp->z_xattr_cached); + + while ((nvp = nvlist_next_nvpair(zp->z_xattr_cached, nvp)) != NULL) { + ASSERT3U(nvpair_type(nvp), ==, DATA_TYPE_BYTE_ARRAY); + + error = zpl_xattr_filldir(xf, nvpair_name(nvp), + strlen(nvpair_name(nvp))); + if (error) + return (error); + } + + return (0); +} + +ssize_t +zpl_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size) +{ + znode_t *zp = ITOZ(dentry->d_inode); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + xattr_filldir_t xf = { buffer_size, 0, buffer, dentry }; + cred_t *cr = CRED(); + fstrans_cookie_t cookie; + int error = 0; + + crhold(cr); + cookie = spl_fstrans_mark(); + rrm_enter_read(&(zfsvfs)->z_teardown_lock, FTAG); + rw_enter(&zp->z_xattr_lock, RW_READER); + + if (zfsvfs->z_use_sa && zp->z_is_sa) { + error = zpl_xattr_list_sa(&xf); + if (error) + goto out; + } + + error = zpl_xattr_list_dir(&xf, cr); + if (error) + goto out; + + error = xf.offset; +out: + + rw_exit(&zp->z_xattr_lock); + rrm_exit(&(zfsvfs)->z_teardown_lock, FTAG); + spl_fstrans_unmark(cookie); + crfree(cr); + + return (error); +} + +static int +zpl_xattr_get_dir(struct inode *ip, const char *name, void *value, + size_t size, cred_t *cr) +{ + struct inode *dxip = NULL; + struct inode *xip = NULL; + loff_t pos = 0; + int error; + + /* Lookup the xattr directory */ + error = -zfs_lookup(ip, NULL, &dxip, LOOKUP_XATTR, cr, NULL, NULL); + if (error) + goto out; + + /* Lookup a specific xattr name in the directory */ + error = -zfs_lookup(dxip, (char *)name, &xip, 0, cr, NULL, NULL); + if (error) + goto out; + + if (!size) { + error = i_size_read(xip); + goto out; + } + + if (size < i_size_read(xip)) { + error = -ERANGE; + goto out; + } + + error = zpl_read_common(xip, value, size, &pos, UIO_SYSSPACE, 0, cr); +out: + if (xip) + iput(xip); + + if (dxip) + iput(dxip); + + return (error); +} + +static int +zpl_xattr_get_sa(struct inode *ip, const char *name, void *value, size_t size) +{ + znode_t *zp = ITOZ(ip); + uchar_t *nv_value; + uint_t nv_size; + int error = 0; + + ASSERT(RW_LOCK_HELD(&zp->z_xattr_lock)); + + mutex_enter(&zp->z_lock); + if (zp->z_xattr_cached == NULL) + error = -zfs_sa_get_xattr(zp); + mutex_exit(&zp->z_lock); + + if (error) + return (error); + + ASSERT(zp->z_xattr_cached); + error = -nvlist_lookup_byte_array(zp->z_xattr_cached, name, + &nv_value, &nv_size); + if (error) + return (error); + + if (!size) + return (nv_size); + + if (size < nv_size) + return (-ERANGE); + + memcpy(value, nv_value, nv_size); + + return (nv_size); +} + +static int +__zpl_xattr_get(struct inode *ip, const char *name, void *value, size_t size, + cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + int error; + + ASSERT(RW_LOCK_HELD(&zp->z_xattr_lock)); + + if (zfsvfs->z_use_sa && zp->z_is_sa) { + error = zpl_xattr_get_sa(ip, name, value, size); + if (error != -ENOENT) + goto out; + } + + error = zpl_xattr_get_dir(ip, name, value, size, cr); +out: + if (error == -ENOENT) + error = -ENODATA; + + return (error); +} + +#define XATTR_NOENT 0x0 +#define XATTR_IN_SA 0x1 +#define XATTR_IN_DIR 0x2 +/* check where the xattr resides */ +static int +__zpl_xattr_where(struct inode *ip, const char *name, int *where, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + int error; + + ASSERT(where); + ASSERT(RW_LOCK_HELD(&zp->z_xattr_lock)); + + *where = XATTR_NOENT; + if (zfsvfs->z_use_sa && zp->z_is_sa) { + error = zpl_xattr_get_sa(ip, name, NULL, 0); + if (error >= 0) + *where |= XATTR_IN_SA; + else if (error != -ENOENT) + return (error); + } + + error = zpl_xattr_get_dir(ip, name, NULL, 0, cr); + if (error >= 0) + *where |= XATTR_IN_DIR; + else if (error != -ENOENT) + return (error); + + if (*where == (XATTR_IN_SA|XATTR_IN_DIR)) + cmn_err(CE_WARN, "ZFS: inode %p has xattr \"%s\"" + " in both SA and dir", ip, name); + if (*where == XATTR_NOENT) + error = -ENODATA; + else + error = 0; + return (error); +} + +static int +zpl_xattr_get(struct inode *ip, const char *name, void *value, size_t size) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + cred_t *cr = CRED(); + fstrans_cookie_t cookie; + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + rrm_enter_read(&(zfsvfs)->z_teardown_lock, FTAG); + rw_enter(&zp->z_xattr_lock, RW_READER); + error = __zpl_xattr_get(ip, name, value, size, cr); + rw_exit(&zp->z_xattr_lock); + rrm_exit(&(zfsvfs)->z_teardown_lock, FTAG); + spl_fstrans_unmark(cookie); + crfree(cr); + + return (error); +} + +static int +zpl_xattr_set_dir(struct inode *ip, const char *name, const void *value, + size_t size, int flags, cred_t *cr) +{ + struct inode *dxip = NULL; + struct inode *xip = NULL; + vattr_t *vap = NULL; + ssize_t wrote; + int lookup_flags, error; + const int xattr_mode = S_IFREG | 0644; + loff_t pos = 0; + + /* + * Lookup the xattr directory. When we're adding an entry pass + * CREATE_XATTR_DIR to ensure the xattr directory is created. + * When removing an entry this flag is not passed to avoid + * unnecessarily creating a new xattr directory. + */ + lookup_flags = LOOKUP_XATTR; + if (value != NULL) + lookup_flags |= CREATE_XATTR_DIR; + + error = -zfs_lookup(ip, NULL, &dxip, lookup_flags, cr, NULL, NULL); + if (error) + goto out; + + /* Lookup a specific xattr name in the directory */ + error = -zfs_lookup(dxip, (char *)name, &xip, 0, cr, NULL, NULL); + if (error && (error != -ENOENT)) + goto out; + + error = 0; + + /* Remove a specific name xattr when value is set to NULL. */ + if (value == NULL) { + if (xip) + error = -zfs_remove(dxip, (char *)name, cr, 0); + + goto out; + } + + /* Lookup failed create a new xattr. */ + if (xip == NULL) { + vap = kmem_zalloc(sizeof (vattr_t), KM_SLEEP); + vap->va_mode = xattr_mode; + vap->va_mask = ATTR_MODE; + vap->va_uid = crgetfsuid(cr); + vap->va_gid = crgetfsgid(cr); + + error = -zfs_create(dxip, (char *)name, vap, 0, 0644, &xip, + cr, 0, NULL); + if (error) + goto out; + } + + ASSERT(xip != NULL); + + error = -zfs_freesp(ITOZ(xip), 0, 0, xattr_mode, TRUE); + if (error) + goto out; + + wrote = zpl_write_common(xip, value, size, &pos, UIO_SYSSPACE, 0, cr); + if (wrote < 0) + error = wrote; + +out: + + if (error == 0) { + ip->i_ctime = current_time(ip); + zfs_mark_inode_dirty(ip); + } + + if (vap) + kmem_free(vap, sizeof (vattr_t)); + + if (xip) + iput(xip); + + if (dxip) + iput(dxip); + + if (error == -ENOENT) + error = -ENODATA; + + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_xattr_set_sa(struct inode *ip, const char *name, const void *value, + size_t size, int flags, cred_t *cr) +{ + znode_t *zp = ITOZ(ip); + nvlist_t *nvl; + size_t sa_size; + int error = 0; + + mutex_enter(&zp->z_lock); + if (zp->z_xattr_cached == NULL) + error = -zfs_sa_get_xattr(zp); + mutex_exit(&zp->z_lock); + + if (error) + return (error); + + ASSERT(zp->z_xattr_cached); + nvl = zp->z_xattr_cached; + + if (value == NULL) { + error = -nvlist_remove(nvl, name, DATA_TYPE_BYTE_ARRAY); + if (error == -ENOENT) + error = zpl_xattr_set_dir(ip, name, NULL, 0, flags, cr); + } else { + /* Limited to 32k to keep nvpair memory allocations small */ + if (size > DXATTR_MAX_ENTRY_SIZE) + return (-EFBIG); + + /* Prevent the DXATTR SA from consuming the entire SA region */ + error = -nvlist_size(nvl, &sa_size, NV_ENCODE_XDR); + if (error) + return (error); + + if (sa_size > DXATTR_MAX_SA_SIZE) + return (-EFBIG); + + error = -nvlist_add_byte_array(nvl, name, + (uchar_t *)value, size); + } + + /* + * Update the SA for additions, modifications, and removals. On + * error drop the inconsistent cached version of the nvlist, it + * will be reconstructed from the ARC when next accessed. + */ + if (error == 0) + error = -zfs_sa_set_xattr(zp); + + if (error) { + nvlist_free(nvl); + zp->z_xattr_cached = NULL; + } + + ASSERT3S(error, <=, 0); + + return (error); +} + +static int +zpl_xattr_set(struct inode *ip, const char *name, const void *value, + size_t size, int flags) +{ + znode_t *zp = ITOZ(ip); + zfsvfs_t *zfsvfs = ZTOZSB(zp); + cred_t *cr = CRED(); + fstrans_cookie_t cookie; + int where; + int error; + + crhold(cr); + cookie = spl_fstrans_mark(); + rrm_enter_read(&(zfsvfs)->z_teardown_lock, FTAG); + rw_enter(&ITOZ(ip)->z_xattr_lock, RW_WRITER); + + /* + * Before setting the xattr check to see if it already exists. + * This is done to ensure the following optional flags are honored. + * + * XATTR_CREATE: fail if xattr already exists + * XATTR_REPLACE: fail if xattr does not exist + * + * We also want to know if it resides in sa or dir, so we can make + * sure we don't end up with duplicate in both places. + */ + error = __zpl_xattr_where(ip, name, &where, cr); + if (error < 0) { + if (error != -ENODATA) + goto out; + if (flags & XATTR_REPLACE) + goto out; + + /* The xattr to be removed already doesn't exist */ + error = 0; + if (value == NULL) + goto out; + } else { + error = -EEXIST; + if (flags & XATTR_CREATE) + goto out; + } + + /* Preferentially store the xattr as a SA for better performance */ + if (zfsvfs->z_use_sa && zp->z_is_sa && + (zfsvfs->z_xattr_sa || (value == NULL && where & XATTR_IN_SA))) { + error = zpl_xattr_set_sa(ip, name, value, size, flags, cr); + if (error == 0) { + /* + * Successfully put into SA, we need to clear the one + * in dir. + */ + if (where & XATTR_IN_DIR) + zpl_xattr_set_dir(ip, name, NULL, 0, 0, cr); + goto out; + } + } + + error = zpl_xattr_set_dir(ip, name, value, size, flags, cr); + /* + * Successfully put into dir, we need to clear the one in SA. + */ + if (error == 0 && (where & XATTR_IN_SA)) + zpl_xattr_set_sa(ip, name, NULL, 0, 0, cr); +out: + rw_exit(&ITOZ(ip)->z_xattr_lock); + rrm_exit(&(zfsvfs)->z_teardown_lock, FTAG); + spl_fstrans_unmark(cookie); + crfree(cr); + ASSERT3S(error, <=, 0); + + return (error); +} + +/* + * Extended user attributes + * + * "Extended user attributes may be assigned to files and directories for + * storing arbitrary additional information such as the mime type, + * character set or encoding of a file. The access permissions for user + * attributes are defined by the file permission bits: read permission + * is required to retrieve the attribute value, and writer permission is + * required to change it. + * + * The file permission bits of regular files and directories are + * interpreted differently from the file permission bits of special + * files and symbolic links. For regular files and directories the file + * permission bits define access to the file's contents, while for + * device special files they define access to the device described by + * the special file. The file permissions of symbolic links are not + * used in access checks. These differences would allow users to + * consume filesystem resources in a way not controllable by disk quotas + * for group or world writable special files and directories. + * + * For this reason, extended user attributes are allowed only for + * regular files and directories, and access to extended user attributes + * is restricted to the owner and to users with appropriate capabilities + * for directories with the sticky bit set (see the chmod(1) manual page + * for an explanation of the sticky bit)." - xattr(7) + * + * ZFS allows extended user attributes to be disabled administratively + * by setting the 'xattr=off' property on the dataset. + */ +static int +__zpl_xattr_user_list(struct inode *ip, char *list, size_t list_size, + const char *name, size_t name_len) +{ + return (ITOZSB(ip)->z_flags & ZSB_XATTR); +} +ZPL_XATTR_LIST_WRAPPER(zpl_xattr_user_list); + +static int +__zpl_xattr_user_get(struct inode *ip, const char *name, + void *value, size_t size) +{ + char *xattr_name; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + if (!(ITOZSB(ip)->z_flags & ZSB_XATTR)) + return (-EOPNOTSUPP); + + xattr_name = kmem_asprintf("%s%s", XATTR_USER_PREFIX, name); + error = zpl_xattr_get(ip, xattr_name, value, size); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_GET_WRAPPER(zpl_xattr_user_get); + +static int +__zpl_xattr_user_set(struct inode *ip, const char *name, + const void *value, size_t size, int flags) +{ + char *xattr_name; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + if (!(ITOZSB(ip)->z_flags & ZSB_XATTR)) + return (-EOPNOTSUPP); + + xattr_name = kmem_asprintf("%s%s", XATTR_USER_PREFIX, name); + error = zpl_xattr_set(ip, xattr_name, value, size, flags); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_SET_WRAPPER(zpl_xattr_user_set); + +xattr_handler_t zpl_xattr_user_handler = +{ + .prefix = XATTR_USER_PREFIX, + .list = zpl_xattr_user_list, + .get = zpl_xattr_user_get, + .set = zpl_xattr_user_set, +}; + +/* + * Trusted extended attributes + * + * "Trusted extended attributes are visible and accessible only to + * processes that have the CAP_SYS_ADMIN capability. Attributes in this + * class are used to implement mechanisms in user space (i.e., outside + * the kernel) which keep information in extended attributes to which + * ordinary processes should not have access." - xattr(7) + */ +static int +__zpl_xattr_trusted_list(struct inode *ip, char *list, size_t list_size, + const char *name, size_t name_len) +{ + return (capable(CAP_SYS_ADMIN)); +} +ZPL_XATTR_LIST_WRAPPER(zpl_xattr_trusted_list); + +static int +__zpl_xattr_trusted_get(struct inode *ip, const char *name, + void *value, size_t size) +{ + char *xattr_name; + int error; + + if (!capable(CAP_SYS_ADMIN)) + return (-EACCES); + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + xattr_name = kmem_asprintf("%s%s", XATTR_TRUSTED_PREFIX, name); + error = zpl_xattr_get(ip, xattr_name, value, size); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_GET_WRAPPER(zpl_xattr_trusted_get); + +static int +__zpl_xattr_trusted_set(struct inode *ip, const char *name, + const void *value, size_t size, int flags) +{ + char *xattr_name; + int error; + + if (!capable(CAP_SYS_ADMIN)) + return (-EACCES); + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + xattr_name = kmem_asprintf("%s%s", XATTR_TRUSTED_PREFIX, name); + error = zpl_xattr_set(ip, xattr_name, value, size, flags); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_SET_WRAPPER(zpl_xattr_trusted_set); + +xattr_handler_t zpl_xattr_trusted_handler = +{ + .prefix = XATTR_TRUSTED_PREFIX, + .list = zpl_xattr_trusted_list, + .get = zpl_xattr_trusted_get, + .set = zpl_xattr_trusted_set, +}; + +/* + * Extended security attributes + * + * "The security attribute namespace is used by kernel security modules, + * such as Security Enhanced Linux, and also to implement file + * capabilities (see capabilities(7)). Read and write access + * permissions to security attributes depend on the policy implemented + * for each security attribute by the security module. When no security + * module is loaded, all processes have read access to extended security + * attributes, and write access is limited to processes that have the + * CAP_SYS_ADMIN capability." - xattr(7) + */ +static int +__zpl_xattr_security_list(struct inode *ip, char *list, size_t list_size, + const char *name, size_t name_len) +{ + return (1); +} +ZPL_XATTR_LIST_WRAPPER(zpl_xattr_security_list); + +static int +__zpl_xattr_security_get(struct inode *ip, const char *name, + void *value, size_t size) +{ + char *xattr_name; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + xattr_name = kmem_asprintf("%s%s", XATTR_SECURITY_PREFIX, name); + error = zpl_xattr_get(ip, xattr_name, value, size); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_GET_WRAPPER(zpl_xattr_security_get); + +static int +__zpl_xattr_security_set(struct inode *ip, const char *name, + const void *value, size_t size, int flags) +{ + char *xattr_name; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") == 0) + return (-EINVAL); +#endif + xattr_name = kmem_asprintf("%s%s", XATTR_SECURITY_PREFIX, name); + error = zpl_xattr_set(ip, xattr_name, value, size, flags); + strfree(xattr_name); + + return (error); +} +ZPL_XATTR_SET_WRAPPER(zpl_xattr_security_set); + +#ifdef HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY +static int +__zpl_xattr_security_init(struct inode *ip, const struct xattr *xattrs, + void *fs_info) +{ + const struct xattr *xattr; + int error = 0; + + for (xattr = xattrs; xattr->name != NULL; xattr++) { + error = __zpl_xattr_security_set(ip, + xattr->name, xattr->value, xattr->value_len, 0); + + if (error < 0) + break; + } + + return (error); +} + +int +zpl_xattr_security_init(struct inode *ip, struct inode *dip, + const struct qstr *qstr) +{ + return security_inode_init_security(ip, dip, qstr, + &__zpl_xattr_security_init, NULL); +} + +#else +int +zpl_xattr_security_init(struct inode *ip, struct inode *dip, + const struct qstr *qstr) +{ + int error; + size_t len; + void *value; + char *name; + + error = zpl_security_inode_init_security(ip, dip, qstr, + &name, &value, &len); + if (error) { + if (error == -EOPNOTSUPP) + return (0); + + return (error); + } + + error = __zpl_xattr_security_set(ip, name, value, len, 0); + + kfree(name); + kfree(value); + + return (error); +} +#endif /* HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY */ + +/* + * Security xattr namespace handlers. + */ +xattr_handler_t zpl_xattr_security_handler = { + .prefix = XATTR_SECURITY_PREFIX, + .list = zpl_xattr_security_list, + .get = zpl_xattr_security_get, + .set = zpl_xattr_security_set, +}; + +/* + * Extended system attributes + * + * "Extended system attributes are used by the kernel to store system + * objects such as Access Control Lists. Read and write access permissions + * to system attributes depend on the policy implemented for each system + * attribute implemented by filesystems in the kernel." - xattr(7) + */ +#ifdef CONFIG_FS_POSIX_ACL +int +zpl_set_acl(struct inode *ip, struct posix_acl *acl, int type) +{ + char *name, *value = NULL; + int error = 0; + size_t size = 0; + + if (S_ISLNK(ip->i_mode)) + return (-EOPNOTSUPP); + + switch (type) { + case ACL_TYPE_ACCESS: + name = XATTR_NAME_POSIX_ACL_ACCESS; + if (acl) { + zpl_equivmode_t mode = ip->i_mode; + error = posix_acl_equiv_mode(acl, &mode); + if (error < 0) { + return (error); + } else { + /* + * The mode bits will have been set by + * ->zfs_setattr()->zfs_acl_chmod_setattr() + * using the ZFS ACL conversion. If they + * differ from the Posix ACL conversion dirty + * the inode to write the Posix mode bits. + */ + if (ip->i_mode != mode) { + ip->i_mode = mode; + ip->i_ctime = current_time(ip); + zfs_mark_inode_dirty(ip); + } + + if (error == 0) + acl = NULL; + } + } + break; + + case ACL_TYPE_DEFAULT: + name = XATTR_NAME_POSIX_ACL_DEFAULT; + if (!S_ISDIR(ip->i_mode)) + return (acl ? -EACCES : 0); + break; + + default: + return (-EINVAL); + } + + if (acl) { + size = posix_acl_xattr_size(acl->a_count); + value = kmem_alloc(size, KM_SLEEP); + + error = zpl_acl_to_xattr(acl, value, size); + if (error < 0) { + kmem_free(value, size); + return (error); + } + } + + error = zpl_xattr_set(ip, name, value, size, 0); + if (value) + kmem_free(value, size); + + if (!error) { + if (acl) + zpl_set_cached_acl(ip, type, acl); + else + zpl_forget_cached_acl(ip, type); + } + + return (error); +} + +struct posix_acl * +zpl_get_acl(struct inode *ip, int type) +{ + struct posix_acl *acl; + void *value = NULL; + char *name; + int size; + + /* + * As of Linux 3.14, the kernel get_acl will check this for us. + * Also as of Linux 4.7, comparing against ACL_NOT_CACHED is wrong + * as the kernel get_acl will set it to temporary sentinel value. + */ +#ifndef HAVE_KERNEL_GET_ACL_HANDLE_CACHE + acl = get_cached_acl(ip, type); + if (acl != ACL_NOT_CACHED) + return (acl); +#endif + + switch (type) { + case ACL_TYPE_ACCESS: + name = XATTR_NAME_POSIX_ACL_ACCESS; + break; + case ACL_TYPE_DEFAULT: + name = XATTR_NAME_POSIX_ACL_DEFAULT; + break; + default: + return (ERR_PTR(-EINVAL)); + } + + size = zpl_xattr_get(ip, name, NULL, 0); + if (size > 0) { + value = kmem_alloc(size, KM_SLEEP); + size = zpl_xattr_get(ip, name, value, size); + } + + if (size > 0) { + acl = zpl_acl_from_xattr(value, size); + } else if (size == -ENODATA || size == -ENOSYS) { + acl = NULL; + } else { + acl = ERR_PTR(-EIO); + } + + if (size > 0) + kmem_free(value, size); + + /* As of Linux 4.7, the kernel get_acl will set this for us */ +#ifndef HAVE_KERNEL_GET_ACL_HANDLE_CACHE + if (!IS_ERR(acl)) + zpl_set_cached_acl(ip, type, acl); +#endif + + return (acl); +} + +#if !defined(HAVE_GET_ACL) +static int +__zpl_check_acl(struct inode *ip, int mask) +{ + struct posix_acl *acl; + int error; + + acl = zpl_get_acl(ip, ACL_TYPE_ACCESS); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + + if (acl) { + error = posix_acl_permission(ip, acl, mask); + zpl_posix_acl_release(acl); + return (error); + } + + return (-EAGAIN); +} + +#if defined(HAVE_CHECK_ACL_WITH_FLAGS) +int +zpl_check_acl(struct inode *ip, int mask, unsigned int flags) +{ + return (__zpl_check_acl(ip, mask)); +} +#elif defined(HAVE_CHECK_ACL) +int +zpl_check_acl(struct inode *ip, int mask) +{ + return (__zpl_check_acl(ip, mask)); +} +#elif defined(HAVE_PERMISSION_WITH_NAMEIDATA) +int +zpl_permission(struct inode *ip, int mask, struct nameidata *nd) +{ + return (generic_permission(ip, mask, __zpl_check_acl)); +} +#elif defined(HAVE_PERMISSION) +int +zpl_permission(struct inode *ip, int mask) +{ + return (generic_permission(ip, mask, __zpl_check_acl)); +} +#endif /* HAVE_CHECK_ACL | HAVE_PERMISSION */ +#endif /* !HAVE_GET_ACL */ + +int +zpl_init_acl(struct inode *ip, struct inode *dir) +{ + struct posix_acl *acl = NULL; + int error = 0; + + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (0); + + if (!S_ISLNK(ip->i_mode)) { + if (ITOZSB(ip)->z_acl_type == ZFS_ACLTYPE_POSIXACL) { + acl = zpl_get_acl(dir, ACL_TYPE_DEFAULT); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + } + + if (!acl) { + ip->i_mode &= ~current_umask(); + ip->i_ctime = current_time(ip); + zfs_mark_inode_dirty(ip); + return (0); + } + } + + if ((ITOZSB(ip)->z_acl_type == ZFS_ACLTYPE_POSIXACL) && acl) { + umode_t mode; + + if (S_ISDIR(ip->i_mode)) { + error = zpl_set_acl(ip, acl, ACL_TYPE_DEFAULT); + if (error) + goto out; + } + + mode = ip->i_mode; + error = __posix_acl_create(&acl, GFP_KERNEL, &mode); + if (error >= 0) { + ip->i_mode = mode; + zfs_mark_inode_dirty(ip); + if (error > 0) + error = zpl_set_acl(ip, acl, ACL_TYPE_ACCESS); + } + } +out: + zpl_posix_acl_release(acl); + + return (error); +} + +int +zpl_chmod_acl(struct inode *ip) +{ + struct posix_acl *acl; + int error; + + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (0); + + if (S_ISLNK(ip->i_mode)) + return (-EOPNOTSUPP); + + acl = zpl_get_acl(ip, ACL_TYPE_ACCESS); + if (IS_ERR(acl) || !acl) + return (PTR_ERR(acl)); + + error = __posix_acl_chmod(&acl, GFP_KERNEL, ip->i_mode); + if (!error) + error = zpl_set_acl(ip, acl, ACL_TYPE_ACCESS); + + zpl_posix_acl_release(acl); + + return (error); +} + +static int +__zpl_xattr_acl_list_access(struct inode *ip, char *list, size_t list_size, + const char *name, size_t name_len) +{ + char *xattr_name = XATTR_NAME_POSIX_ACL_ACCESS; + size_t xattr_size = sizeof (XATTR_NAME_POSIX_ACL_ACCESS); + + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (0); + + if (list && xattr_size <= list_size) + memcpy(list, xattr_name, xattr_size); + + return (xattr_size); +} +ZPL_XATTR_LIST_WRAPPER(zpl_xattr_acl_list_access); + +static int +__zpl_xattr_acl_list_default(struct inode *ip, char *list, size_t list_size, + const char *name, size_t name_len) +{ + char *xattr_name = XATTR_NAME_POSIX_ACL_DEFAULT; + size_t xattr_size = sizeof (XATTR_NAME_POSIX_ACL_DEFAULT); + + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (0); + + if (list && xattr_size <= list_size) + memcpy(list, xattr_name, xattr_size); + + return (xattr_size); +} +ZPL_XATTR_LIST_WRAPPER(zpl_xattr_acl_list_default); + +static int +__zpl_xattr_acl_get_access(struct inode *ip, const char *name, + void *buffer, size_t size) +{ + struct posix_acl *acl; + int type = ACL_TYPE_ACCESS; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") != 0) + return (-EINVAL); +#endif + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (-EOPNOTSUPP); + + acl = zpl_get_acl(ip, type); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + if (acl == NULL) + return (-ENODATA); + + error = zpl_acl_to_xattr(acl, buffer, size); + zpl_posix_acl_release(acl); + + return (error); +} +ZPL_XATTR_GET_WRAPPER(zpl_xattr_acl_get_access); + +static int +__zpl_xattr_acl_get_default(struct inode *ip, const char *name, + void *buffer, size_t size) +{ + struct posix_acl *acl; + int type = ACL_TYPE_DEFAULT; + int error; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") != 0) + return (-EINVAL); +#endif + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (-EOPNOTSUPP); + + acl = zpl_get_acl(ip, type); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + if (acl == NULL) + return (-ENODATA); + + error = zpl_acl_to_xattr(acl, buffer, size); + zpl_posix_acl_release(acl); + + return (error); +} +ZPL_XATTR_GET_WRAPPER(zpl_xattr_acl_get_default); + +static int +__zpl_xattr_acl_set_access(struct inode *ip, const char *name, + const void *value, size_t size, int flags) +{ + struct posix_acl *acl; + int type = ACL_TYPE_ACCESS; + int error = 0; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") != 0) + return (-EINVAL); +#endif + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (-EOPNOTSUPP); + + if (!zpl_inode_owner_or_capable(ip)) + return (-EPERM); + + if (value) { + acl = zpl_acl_from_xattr(value, size); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + else if (acl) { + error = zpl_posix_acl_valid(ip, acl); + if (error) { + zpl_posix_acl_release(acl); + return (error); + } + } + } else { + acl = NULL; + } + + error = zpl_set_acl(ip, acl, type); + zpl_posix_acl_release(acl); + + return (error); +} +ZPL_XATTR_SET_WRAPPER(zpl_xattr_acl_set_access); + +static int +__zpl_xattr_acl_set_default(struct inode *ip, const char *name, + const void *value, size_t size, int flags) +{ + struct posix_acl *acl; + int type = ACL_TYPE_DEFAULT; + int error = 0; + /* xattr_resolve_name will do this for us if this is defined */ +#ifndef HAVE_XATTR_HANDLER_NAME + if (strcmp(name, "") != 0) + return (-EINVAL); +#endif + if (ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_POSIXACL) + return (-EOPNOTSUPP); + + if (!zpl_inode_owner_or_capable(ip)) + return (-EPERM); + + if (value) { + acl = zpl_acl_from_xattr(value, size); + if (IS_ERR(acl)) + return (PTR_ERR(acl)); + else if (acl) { + error = zpl_posix_acl_valid(ip, acl); + if (error) { + zpl_posix_acl_release(acl); + return (error); + } + } + } else { + acl = NULL; + } + + error = zpl_set_acl(ip, acl, type); + zpl_posix_acl_release(acl); + + return (error); +} +ZPL_XATTR_SET_WRAPPER(zpl_xattr_acl_set_default); + +/* + * ACL access xattr namespace handlers. + * + * Use .name instead of .prefix when available. xattr_resolve_name will match + * whole name and reject anything that has .name only as prefix. + */ +xattr_handler_t zpl_xattr_acl_access_handler = +{ +#ifdef HAVE_XATTR_HANDLER_NAME + .name = XATTR_NAME_POSIX_ACL_ACCESS, +#else + .prefix = XATTR_NAME_POSIX_ACL_ACCESS, +#endif + .list = zpl_xattr_acl_list_access, + .get = zpl_xattr_acl_get_access, + .set = zpl_xattr_acl_set_access, +#if defined(HAVE_XATTR_LIST_SIMPLE) || \ + defined(HAVE_XATTR_LIST_DENTRY) || \ + defined(HAVE_XATTR_LIST_HANDLER) + .flags = ACL_TYPE_ACCESS, +#endif +}; + +/* + * ACL default xattr namespace handlers. + * + * Use .name instead of .prefix when available. xattr_resolve_name will match + * whole name and reject anything that has .name only as prefix. + */ +xattr_handler_t zpl_xattr_acl_default_handler = +{ +#ifdef HAVE_XATTR_HANDLER_NAME + .name = XATTR_NAME_POSIX_ACL_DEFAULT, +#else + .prefix = XATTR_NAME_POSIX_ACL_DEFAULT, +#endif + .list = zpl_xattr_acl_list_default, + .get = zpl_xattr_acl_get_default, + .set = zpl_xattr_acl_set_default, +#if defined(HAVE_XATTR_LIST_SIMPLE) || \ + defined(HAVE_XATTR_LIST_DENTRY) || \ + defined(HAVE_XATTR_LIST_HANDLER) + .flags = ACL_TYPE_DEFAULT, +#endif +}; + +#endif /* CONFIG_FS_POSIX_ACL */ + +xattr_handler_t *zpl_xattr_handlers[] = { + &zpl_xattr_security_handler, + &zpl_xattr_trusted_handler, + &zpl_xattr_user_handler, +#ifdef CONFIG_FS_POSIX_ACL + &zpl_xattr_acl_access_handler, + &zpl_xattr_acl_default_handler, +#endif /* CONFIG_FS_POSIX_ACL */ + NULL +}; + +static const struct xattr_handler * +zpl_xattr_handler(const char *name) +{ + if (strncmp(name, XATTR_USER_PREFIX, + XATTR_USER_PREFIX_LEN) == 0) + return (&zpl_xattr_user_handler); + + if (strncmp(name, XATTR_TRUSTED_PREFIX, + XATTR_TRUSTED_PREFIX_LEN) == 0) + return (&zpl_xattr_trusted_handler); + + if (strncmp(name, XATTR_SECURITY_PREFIX, + XATTR_SECURITY_PREFIX_LEN) == 0) + return (&zpl_xattr_security_handler); + +#ifdef CONFIG_FS_POSIX_ACL + if (strncmp(name, XATTR_NAME_POSIX_ACL_ACCESS, + sizeof (XATTR_NAME_POSIX_ACL_ACCESS)) == 0) + return (&zpl_xattr_acl_access_handler); + + if (strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, + sizeof (XATTR_NAME_POSIX_ACL_DEFAULT)) == 0) + return (&zpl_xattr_acl_default_handler); +#endif /* CONFIG_FS_POSIX_ACL */ + + return (NULL); +} + +#if !defined(HAVE_POSIX_ACL_RELEASE) || defined(HAVE_POSIX_ACL_RELEASE_GPL_ONLY) +struct acl_rel_struct { + struct acl_rel_struct *next; + struct posix_acl *acl; + clock_t time; +}; + +#define ACL_REL_GRACE (60*HZ) +#define ACL_REL_WINDOW (1*HZ) +#define ACL_REL_SCHED (ACL_REL_GRACE+ACL_REL_WINDOW) + +/* + * Lockless multi-producer single-consumer fifo list. + * Nodes are added to tail and removed from head. Tail pointer is our + * synchronization point. It always points to the next pointer of the last + * node, or head if list is empty. + */ +static struct acl_rel_struct *acl_rel_head = NULL; +static struct acl_rel_struct **acl_rel_tail = &acl_rel_head; + +static void +zpl_posix_acl_free(void *arg) +{ + struct acl_rel_struct *freelist = NULL; + struct acl_rel_struct *a; + clock_t new_time; + boolean_t refire = B_FALSE; + + ASSERT3P(acl_rel_head, !=, NULL); + while (acl_rel_head) { + a = acl_rel_head; + if (ddi_get_lbolt() - a->time >= ACL_REL_GRACE) { + /* + * If a is the last node we need to reset tail, but we + * need to use cmpxchg to make sure it is still the + * last node. + */ + if (acl_rel_tail == &a->next) { + acl_rel_head = NULL; + if (cmpxchg(&acl_rel_tail, &a->next, + &acl_rel_head) == &a->next) { + ASSERT3P(a->next, ==, NULL); + a->next = freelist; + freelist = a; + break; + } + } + /* + * a is not last node, make sure next pointer is set + * by the adder and advance the head. + */ + while (ACCESS_ONCE(a->next) == NULL) + cpu_relax(); + acl_rel_head = a->next; + a->next = freelist; + freelist = a; + } else { + /* + * a is still in grace period. We are responsible to + * reschedule the free task, since adder will only do + * so if list is empty. + */ + new_time = a->time + ACL_REL_SCHED; + refire = B_TRUE; + break; + } + } + + if (refire) + taskq_dispatch_delay(system_delay_taskq, zpl_posix_acl_free, + NULL, TQ_SLEEP, new_time); + + while (freelist) { + a = freelist; + freelist = a->next; + kfree(a->acl); + kmem_free(a, sizeof (struct acl_rel_struct)); + } +} + +void +zpl_posix_acl_release_impl(struct posix_acl *acl) +{ + struct acl_rel_struct *a, **prev; + + a = kmem_alloc(sizeof (struct acl_rel_struct), KM_SLEEP); + a->next = NULL; + a->acl = acl; + a->time = ddi_get_lbolt(); + /* atomically points tail to us and get the previous tail */ + prev = xchg(&acl_rel_tail, &a->next); + ASSERT3P(*prev, ==, NULL); + *prev = a; + /* if it was empty before, schedule the free task */ + if (prev == &acl_rel_head) + taskq_dispatch_delay(system_delay_taskq, zpl_posix_acl_free, + NULL, TQ_SLEEP, ddi_get_lbolt() + ACL_REL_SCHED); +} +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zrlock.c +++ linux-aws-4.15.0/zfs/module/zfs/zrlock.c @@ -0,0 +1,197 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015 by Delphix. All rights reserved. + * Copyright 2016 The MathWorks, Inc. All rights reserved. + */ + +/* + * A Zero Reference Lock (ZRL) is a reference count that can lock out new + * references only when the count is zero and only without waiting if the count + * is not already zero. It is similar to a read-write lock in that it allows + * multiple readers and only a single writer, but it does not allow a writer to + * block while waiting for readers to exit, and therefore the question of + * reader/writer priority is moot (no WRWANT bit). Since the equivalent of + * rw_enter(&lock, RW_WRITER) is disallowed and only tryenter() is allowed, it + * is perfectly safe for the same reader to acquire the same lock multiple + * times. The fact that a ZRL is reentrant for readers (through multiple calls + * to zrl_add()) makes it convenient for determining whether something is + * actively referenced without the fuss of flagging lock ownership across + * function calls. + */ +#include +#include + +/* + * A ZRL can be locked only while there are zero references, so ZRL_LOCKED is + * treated as zero references. + */ +#define ZRL_LOCKED -1 +#define ZRL_DESTROYED -2 + +void +zrl_init(zrlock_t *zrl) +{ + mutex_init(&zrl->zr_mtx, NULL, MUTEX_DEFAULT, NULL); + zrl->zr_refcount = 0; + cv_init(&zrl->zr_cv, NULL, CV_DEFAULT, NULL); +#ifdef ZFS_DEBUG + zrl->zr_owner = NULL; + zrl->zr_caller = NULL; +#endif +} + +void +zrl_destroy(zrlock_t *zrl) +{ + ASSERT0(zrl->zr_refcount); + + mutex_destroy(&zrl->zr_mtx); + zrl->zr_refcount = ZRL_DESTROYED; + cv_destroy(&zrl->zr_cv); +} + +void +zrl_add_impl(zrlock_t *zrl, const char *zc) +{ + for (;;) { + uint32_t n = (uint32_t)zrl->zr_refcount; + while (n != ZRL_LOCKED) { + uint32_t cas = atomic_cas_32( + (uint32_t *)&zrl->zr_refcount, n, n + 1); + if (cas == n) { + ASSERT3S((int32_t)n, >=, 0); +#ifdef ZFS_DEBUG + if (zrl->zr_owner == curthread) { + DTRACE_PROBE2(zrlock__reentry, + zrlock_t *, zrl, uint32_t, n); + } + zrl->zr_owner = curthread; + zrl->zr_caller = zc; +#endif + return; + } + n = cas; + } + + mutex_enter(&zrl->zr_mtx); + while (zrl->zr_refcount == ZRL_LOCKED) { + cv_wait(&zrl->zr_cv, &zrl->zr_mtx); + } + mutex_exit(&zrl->zr_mtx); + } +} + +void +zrl_remove(zrlock_t *zrl) +{ + uint32_t n; + +#ifdef ZFS_DEBUG + if (zrl->zr_owner == curthread) { + zrl->zr_owner = NULL; + zrl->zr_caller = NULL; + } +#endif + n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount); + ASSERT3S((int32_t)n, >=, 0); +} + +int +zrl_tryenter(zrlock_t *zrl) +{ + uint32_t n = (uint32_t)zrl->zr_refcount; + + if (n == 0) { + uint32_t cas = atomic_cas_32( + (uint32_t *)&zrl->zr_refcount, 0, ZRL_LOCKED); + if (cas == 0) { +#ifdef ZFS_DEBUG + ASSERT3P(zrl->zr_owner, ==, NULL); + zrl->zr_owner = curthread; +#endif + return (1); + } + } + + ASSERT3S((int32_t)n, >, ZRL_DESTROYED); + + return (0); +} + +void +zrl_exit(zrlock_t *zrl) +{ + ASSERT3S(zrl->zr_refcount, ==, ZRL_LOCKED); + + mutex_enter(&zrl->zr_mtx); +#ifdef ZFS_DEBUG + ASSERT3P(zrl->zr_owner, ==, curthread); + zrl->zr_owner = NULL; + membar_producer(); /* make sure the owner store happens first */ +#endif + zrl->zr_refcount = 0; + cv_broadcast(&zrl->zr_cv); + mutex_exit(&zrl->zr_mtx); +} + +int +zrl_refcount(zrlock_t *zrl) +{ + int n; + + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); + + n = (int)zrl->zr_refcount; + return (n <= 0 ? 0 : n); +} + +int +zrl_is_zero(zrlock_t *zrl) +{ + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); + + return (zrl->zr_refcount <= 0); +} + +int +zrl_is_locked(zrlock_t *zrl) +{ + ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED); + + return (zrl->zr_refcount == ZRL_LOCKED); +} + +#ifdef ZFS_DEBUG +kthread_t * +zrl_owner(zrlock_t *zrl) +{ + return (zrl->zr_owner); +} +#endif + +#if defined(_KERNEL) && defined(HAVE_SPL) + +EXPORT_SYMBOL(zrl_add_impl); +EXPORT_SYMBOL(zrl_remove); + +#endif --- linux-aws-4.15.0.orig/zfs/module/zfs/zvol.c +++ linux-aws-4.15.0/zfs/module/zfs/zvol.c @@ -0,0 +1,2718 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Rewritten for Linux by Brian Behlendorf . + * LLNL-CODE-403049. + * + * ZFS volume emulation driver. + * + * Makes a DMU object look like a volume of arbitrary size, up to 2^64 bytes. + * Volumes are accessed through the symbolic links named: + * + * /dev// + * + * Volumes are persistent through reboot and module load. No user command + * needs to be run before opening and using a device. + * + * Copyright 2014 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2016 Actifio, Inc. All rights reserved. + * Copyright (c) 2012, 2017 by Delphix. All rights reserved. + */ + +/* + * Note on locking of zvol state structures. + * + * These structures are used to maintain internal state used to emulate block + * devices on top of zvols. In particular, management of device minor number + * operations - create, remove, rename, and set_snapdev - involves access to + * these structures. The zvol_state_lock is primarily used to protect the + * zvol_state_list. The zv->zv_state_lock is used to protect the contents + * of the zvol_state_t structures, as well as to make sure that when the + * time comes to remove the structure from the list, it is not in use, and + * therefore, it can be taken off zvol_state_list and freed. + * + * The zv_suspend_lock was introduced to allow for suspending I/O to a zvol, + * e.g. for the duration of receive and rollback operations. This lock can be + * held for significant periods of time. Given that it is undesirable to hold + * mutexes for long periods of time, the following lock ordering applies: + * - take zvol_state_lock if necessary, to protect zvol_state_list + * - take zv_suspend_lock if necessary, by the code path in question + * - take zv_state_lock to protect zvol_state_t + * + * The minor operations are issued to spa->spa_zvol_taskq queues, that are + * single-threaded (to preserve order of minor operations), and are executed + * through the zvol_task_cb that dispatches the specific operations. Therefore, + * these operations are serialized per pool. Consequently, we can be certain + * that for a given zvol, there is only one operation at a time in progress. + * That is why one can be sure that first, zvol_state_t for a given zvol is + * allocated and placed on zvol_state_list, and then other minor operations + * for this zvol are going to proceed in the order of issue. + * + * It is also worth keeping in mind that once add_disk() is called, the zvol is + * announced to the world, and zvol_open()/zvol_release() can be called at any + * time. Incidentally, add_disk() itself calls zvol_open()->zvol_first_open() + * and zvol_release()->zvol_last_close() directly as well. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +unsigned int zvol_inhibit_dev = 0; +unsigned int zvol_major = ZVOL_MAJOR; +unsigned int zvol_threads = 32; +unsigned int zvol_request_sync = 0; +unsigned int zvol_prefetch_bytes = (128 * 1024); +unsigned long zvol_max_discard_blocks = 16384; +unsigned int zvol_volmode = ZFS_VOLMODE_GEOM; + +static taskq_t *zvol_taskq; +static kmutex_t zvol_state_lock; +static list_t zvol_state_list; + +#define ZVOL_HT_SIZE 1024 +static struct hlist_head *zvol_htable; +#define ZVOL_HT_HEAD(hash) (&zvol_htable[(hash) & (ZVOL_HT_SIZE-1)]) + +static struct ida zvol_ida; + +/* + * The in-core state of each volume. + */ +struct zvol_state { + char zv_name[MAXNAMELEN]; /* name */ + uint64_t zv_volsize; /* advertised space */ + uint64_t zv_volblocksize; /* volume block size */ + objset_t *zv_objset; /* objset handle */ + uint32_t zv_flags; /* ZVOL_* flags */ + uint32_t zv_open_count; /* open counts */ + uint32_t zv_changed; /* disk changed */ + zilog_t *zv_zilog; /* ZIL handle */ + zfs_rlock_t zv_range_lock; /* range lock */ + dnode_t *zv_dn; /* dnode hold */ + dev_t zv_dev; /* device id */ + struct gendisk *zv_disk; /* generic disk */ + struct request_queue *zv_queue; /* request queue */ + list_node_t zv_next; /* next zvol_state_t linkage */ + uint64_t zv_hash; /* name hash */ + struct hlist_node zv_hlink; /* hash link */ + kmutex_t zv_state_lock; /* protects zvol_state_t */ + atomic_t zv_suspend_ref; /* refcount for suspend */ + krwlock_t zv_suspend_lock; /* suspend lock */ +}; + +typedef enum { + ZVOL_ASYNC_CREATE_MINORS, + ZVOL_ASYNC_REMOVE_MINORS, + ZVOL_ASYNC_RENAME_MINORS, + ZVOL_ASYNC_SET_SNAPDEV, + ZVOL_ASYNC_SET_VOLMODE, + ZVOL_ASYNC_MAX +} zvol_async_op_t; + +typedef struct { + zvol_async_op_t op; + char pool[MAXNAMELEN]; + char name1[MAXNAMELEN]; + char name2[MAXNAMELEN]; + zprop_source_t source; + uint64_t value; +} zvol_task_t; + +#define ZVOL_RDONLY 0x1 + +static uint64_t +zvol_name_hash(const char *name) +{ + int i; + uint64_t crc = -1ULL; + uint8_t *p = (uint8_t *)name; + ASSERT(zfs_crc64_table[128] == ZFS_CRC64_POLY); + for (i = 0; i < MAXNAMELEN - 1 && *p; i++, p++) { + crc = (crc >> 8) ^ zfs_crc64_table[(crc ^ (*p)) & 0xFF]; + } + return (crc); +} + +/* + * Find a zvol_state_t given the full major+minor dev_t. If found, + * return with zv_state_lock taken, otherwise, return (NULL) without + * taking zv_state_lock. + */ +static zvol_state_t * +zvol_find_by_dev(dev_t dev) +{ + zvol_state_t *zv; + + mutex_enter(&zvol_state_lock); + for (zv = list_head(&zvol_state_list); zv != NULL; + zv = list_next(&zvol_state_list, zv)) { + mutex_enter(&zv->zv_state_lock); + if (zv->zv_dev == dev) { + mutex_exit(&zvol_state_lock); + return (zv); + } + mutex_exit(&zv->zv_state_lock); + } + mutex_exit(&zvol_state_lock); + + return (NULL); +} + +/* + * Find a zvol_state_t given the name and hash generated by zvol_name_hash. + * If found, return with zv_suspend_lock and zv_state_lock taken, otherwise, + * return (NULL) without the taking locks. The zv_suspend_lock is always taken + * before zv_state_lock. The mode argument indicates the mode (including none) + * for zv_suspend_lock to be taken. + */ +static zvol_state_t * +zvol_find_by_name_hash(const char *name, uint64_t hash, int mode) +{ + zvol_state_t *zv; + struct hlist_node *p; + + mutex_enter(&zvol_state_lock); + hlist_for_each(p, ZVOL_HT_HEAD(hash)) { + zv = hlist_entry(p, zvol_state_t, zv_hlink); + mutex_enter(&zv->zv_state_lock); + if (zv->zv_hash == hash && + strncmp(zv->zv_name, name, MAXNAMELEN) == 0) { + /* + * this is the right zvol, take the locks in the + * right order + */ + if (mode != RW_NONE && + !rw_tryenter(&zv->zv_suspend_lock, mode)) { + mutex_exit(&zv->zv_state_lock); + rw_enter(&zv->zv_suspend_lock, mode); + mutex_enter(&zv->zv_state_lock); + /* + * zvol cannot be renamed as we continue + * to hold zvol_state_lock + */ + ASSERT(zv->zv_hash == hash && + strncmp(zv->zv_name, name, MAXNAMELEN) + == 0); + } + mutex_exit(&zvol_state_lock); + return (zv); + } + mutex_exit(&zv->zv_state_lock); + } + mutex_exit(&zvol_state_lock); + + return (NULL); +} + +/* + * Find a zvol_state_t given the name. + * If found, return with zv_suspend_lock and zv_state_lock taken, otherwise, + * return (NULL) without the taking locks. The zv_suspend_lock is always taken + * before zv_state_lock. The mode argument indicates the mode (including none) + * for zv_suspend_lock to be taken. + */ +static zvol_state_t * +zvol_find_by_name(const char *name, int mode) +{ + return (zvol_find_by_name_hash(name, zvol_name_hash(name), mode)); +} + + +/* + * Given a path, return TRUE if path is a ZVOL. + */ +boolean_t +zvol_is_zvol(const char *device) +{ + struct block_device *bdev; + unsigned int major; + + bdev = vdev_lookup_bdev(device); + if (IS_ERR(bdev)) + return (B_FALSE); + + major = MAJOR(bdev->bd_dev); + bdput(bdev); + + if (major == zvol_major) + return (B_TRUE); + + return (B_FALSE); +} + +/* + * ZFS_IOC_CREATE callback handles dmu zvol and zap object creation. + */ +void +zvol_create_cb(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx) +{ + zfs_creat_t *zct = arg; + nvlist_t *nvprops = zct->zct_props; + int error; + uint64_t volblocksize, volsize; + + VERIFY(nvlist_lookup_uint64(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLSIZE), &volsize) == 0); + if (nvlist_lookup_uint64(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE), &volblocksize) != 0) + volblocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE); + + /* + * These properties must be removed from the list so the generic + * property setting step won't apply to them. + */ + VERIFY(nvlist_remove_all(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLSIZE)) == 0); + (void) nvlist_remove_all(nvprops, + zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE)); + + error = dmu_object_claim(os, ZVOL_OBJ, DMU_OT_ZVOL, volblocksize, + DMU_OT_NONE, 0, tx); + ASSERT(error == 0); + + error = zap_create_claim(os, ZVOL_ZAP_OBJ, DMU_OT_ZVOL_PROP, + DMU_OT_NONE, 0, tx); + ASSERT(error == 0); + + error = zap_update(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize, tx); + ASSERT(error == 0); +} + +/* + * ZFS_IOC_OBJSET_STATS entry point. + */ +int +zvol_get_stats(objset_t *os, nvlist_t *nv) +{ + int error; + dmu_object_info_t *doi; + uint64_t val; + + error = zap_lookup(os, ZVOL_ZAP_OBJ, "size", 8, 1, &val); + if (error) + return (SET_ERROR(error)); + + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_VOLSIZE, val); + doi = kmem_alloc(sizeof (dmu_object_info_t), KM_SLEEP); + error = dmu_object_info(os, ZVOL_OBJ, doi); + + if (error == 0) { + dsl_prop_nvlist_add_uint64(nv, ZFS_PROP_VOLBLOCKSIZE, + doi->doi_data_block_size); + } + + kmem_free(doi, sizeof (dmu_object_info_t)); + + return (SET_ERROR(error)); +} + +static void +zvol_size_changed(zvol_state_t *zv, uint64_t volsize) +{ + struct block_device *bdev; + + ASSERT(MUTEX_HELD(&zv->zv_state_lock)); + + bdev = bdget_disk(zv->zv_disk, 0); + if (bdev == NULL) + return; + + set_capacity(zv->zv_disk, volsize >> 9); + zv->zv_volsize = volsize; + check_disk_size_change(zv->zv_disk, bdev); + + bdput(bdev); +} + +/* + * Sanity check volume size. + */ +int +zvol_check_volsize(uint64_t volsize, uint64_t blocksize) +{ + if (volsize == 0) + return (SET_ERROR(EINVAL)); + + if (volsize % blocksize != 0) + return (SET_ERROR(EINVAL)); + +#ifdef _ILP32 + if (volsize - 1 > SPEC_MAXOFFSET_T) + return (SET_ERROR(EOVERFLOW)); +#endif + return (0); +} + +/* + * Ensure the zap is flushed then inform the VFS of the capacity change. + */ +static int +zvol_update_volsize(uint64_t volsize, objset_t *os) +{ + dmu_tx_t *tx; + int error; + uint64_t txg; + + tx = dmu_tx_create(os); + dmu_tx_hold_zap(tx, ZVOL_ZAP_OBJ, TRUE, NULL); + dmu_tx_mark_netfree(tx); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + return (SET_ERROR(error)); + } + txg = dmu_tx_get_txg(tx); + + error = zap_update(os, ZVOL_ZAP_OBJ, "size", 8, 1, + &volsize, tx); + dmu_tx_commit(tx); + + txg_wait_synced(dmu_objset_pool(os), txg); + + if (error == 0) + error = dmu_free_long_range(os, + ZVOL_OBJ, volsize, DMU_OBJECT_END); + + return (error); +} + +static int +zvol_update_live_volsize(zvol_state_t *zv, uint64_t volsize) +{ + zvol_size_changed(zv, volsize); + + /* + * We should post a event here describing the expansion. However, + * the zfs_ereport_post() interface doesn't nicely support posting + * events for zvols, it assumes events relate to vdevs or zios. + */ + + return (0); +} + +/* + * Set ZFS_PROP_VOLSIZE set entry point. + */ +int +zvol_set_volsize(const char *name, uint64_t volsize) +{ + zvol_state_t *zv = NULL; + objset_t *os = NULL; + int error; + dmu_object_info_t *doi; + uint64_t readonly; + boolean_t owned = B_FALSE; + + error = dsl_prop_get_integer(name, + zfs_prop_to_name(ZFS_PROP_READONLY), &readonly, NULL); + if (error != 0) + return (SET_ERROR(error)); + if (readonly) + return (SET_ERROR(EROFS)); + + zv = zvol_find_by_name(name, RW_READER); + + ASSERT(zv == NULL || (MUTEX_HELD(&zv->zv_state_lock) && + RW_READ_HELD(&zv->zv_suspend_lock))); + + if (zv == NULL || zv->zv_objset == NULL) { + if (zv != NULL) + rw_exit(&zv->zv_suspend_lock); + if ((error = dmu_objset_own(name, DMU_OST_ZVOL, B_FALSE, + FTAG, &os)) != 0) { + if (zv != NULL) + mutex_exit(&zv->zv_state_lock); + return (SET_ERROR(error)); + } + owned = B_TRUE; + if (zv != NULL) + zv->zv_objset = os; + } else { + os = zv->zv_objset; + } + + doi = kmem_alloc(sizeof (dmu_object_info_t), KM_SLEEP); + + if ((error = dmu_object_info(os, ZVOL_OBJ, doi)) || + (error = zvol_check_volsize(volsize, doi->doi_data_block_size))) + goto out; + + error = zvol_update_volsize(volsize, os); + + if (error == 0 && zv != NULL) + error = zvol_update_live_volsize(zv, volsize); +out: + kmem_free(doi, sizeof (dmu_object_info_t)); + + if (owned) { + dmu_objset_disown(os, FTAG); + if (zv != NULL) + zv->zv_objset = NULL; + } else { + rw_exit(&zv->zv_suspend_lock); + } + + if (zv != NULL) + mutex_exit(&zv->zv_state_lock); + + return (SET_ERROR(error)); +} + +/* + * Sanity check volume block size. + */ +int +zvol_check_volblocksize(const char *name, uint64_t volblocksize) +{ + /* Record sizes above 128k need the feature to be enabled */ + if (volblocksize > SPA_OLD_MAXBLOCKSIZE) { + spa_t *spa; + int error; + + if ((error = spa_open(name, &spa, FTAG)) != 0) + return (error); + + if (!spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_BLOCKS)) { + spa_close(spa, FTAG); + return (SET_ERROR(ENOTSUP)); + } + + /* + * We don't allow setting the property above 1MB, + * unless the tunable has been changed. + */ + if (volblocksize > zfs_max_recordsize) + return (SET_ERROR(EDOM)); + + spa_close(spa, FTAG); + } + + if (volblocksize < SPA_MINBLOCKSIZE || + volblocksize > SPA_MAXBLOCKSIZE || + !ISP2(volblocksize)) + return (SET_ERROR(EDOM)); + + return (0); +} + +/* + * Set ZFS_PROP_VOLBLOCKSIZE set entry point. + */ +int +zvol_set_volblocksize(const char *name, uint64_t volblocksize) +{ + zvol_state_t *zv; + dmu_tx_t *tx; + int error; + + zv = zvol_find_by_name(name, RW_READER); + + if (zv == NULL) + return (SET_ERROR(ENXIO)); + + ASSERT(MUTEX_HELD(&zv->zv_state_lock) && + RW_READ_HELD(&zv->zv_suspend_lock)); + + if (zv->zv_flags & ZVOL_RDONLY) { + mutex_exit(&zv->zv_state_lock); + rw_exit(&zv->zv_suspend_lock); + return (SET_ERROR(EROFS)); + } + + tx = dmu_tx_create(zv->zv_objset); + dmu_tx_hold_bonus(tx, ZVOL_OBJ); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + } else { + error = dmu_object_set_blocksize(zv->zv_objset, ZVOL_OBJ, + volblocksize, 0, tx); + if (error == ENOTSUP) + error = SET_ERROR(EBUSY); + dmu_tx_commit(tx); + if (error == 0) + zv->zv_volblocksize = volblocksize; + } + + mutex_exit(&zv->zv_state_lock); + rw_exit(&zv->zv_suspend_lock); + + return (SET_ERROR(error)); +} + +/* + * Replay a TX_TRUNCATE ZIL transaction if asked. TX_TRUNCATE is how we + * implement DKIOCFREE/free-long-range. + */ +static int +zvol_replay_truncate(zvol_state_t *zv, lr_truncate_t *lr, boolean_t byteswap) +{ + uint64_t offset, length; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + offset = lr->lr_offset; + length = lr->lr_length; + + return (dmu_free_long_range(zv->zv_objset, ZVOL_OBJ, offset, length)); +} + +/* + * Replay a TX_WRITE ZIL transaction that didn't get committed + * after a system failure + */ +static int +zvol_replay_write(zvol_state_t *zv, lr_write_t *lr, boolean_t byteswap) +{ + objset_t *os = zv->zv_objset; + char *data = (char *)(lr + 1); /* data follows lr_write_t */ + uint64_t offset, length; + dmu_tx_t *tx; + int error; + + if (byteswap) + byteswap_uint64_array(lr, sizeof (*lr)); + + offset = lr->lr_offset; + length = lr->lr_length; + + /* If it's a dmu_sync() block, write the whole block */ + if (lr->lr_common.lrc_reclen == sizeof (lr_write_t)) { + uint64_t blocksize = BP_GET_LSIZE(&lr->lr_blkptr); + if (length < blocksize) { + offset -= offset % blocksize; + length = blocksize; + } + } + + tx = dmu_tx_create(os); + dmu_tx_hold_write(tx, ZVOL_OBJ, offset, length); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + } else { + dmu_write(os, ZVOL_OBJ, offset, length, data, tx); + dmu_tx_commit(tx); + } + + return (error); +} + +static int +zvol_replay_err(zvol_state_t *zv, lr_t *lr, boolean_t byteswap) +{ + return (SET_ERROR(ENOTSUP)); +} + +/* + * Callback vectors for replaying records. + * Only TX_WRITE and TX_TRUNCATE are needed for zvol. + */ +zil_replay_func_t zvol_replay_vector[TX_MAX_TYPE] = { + (zil_replay_func_t)zvol_replay_err, /* no such transaction type */ + (zil_replay_func_t)zvol_replay_err, /* TX_CREATE */ + (zil_replay_func_t)zvol_replay_err, /* TX_MKDIR */ + (zil_replay_func_t)zvol_replay_err, /* TX_MKXATTR */ + (zil_replay_func_t)zvol_replay_err, /* TX_SYMLINK */ + (zil_replay_func_t)zvol_replay_err, /* TX_REMOVE */ + (zil_replay_func_t)zvol_replay_err, /* TX_RMDIR */ + (zil_replay_func_t)zvol_replay_err, /* TX_LINK */ + (zil_replay_func_t)zvol_replay_err, /* TX_RENAME */ + (zil_replay_func_t)zvol_replay_write, /* TX_WRITE */ + (zil_replay_func_t)zvol_replay_truncate, /* TX_TRUNCATE */ + (zil_replay_func_t)zvol_replay_err, /* TX_SETATTR */ + (zil_replay_func_t)zvol_replay_err, /* TX_ACL */ +}; + +/* + * zvol_log_write() handles synchronous writes using TX_WRITE ZIL transactions. + * + * We store data in the log buffers if it's small enough. + * Otherwise we will later flush the data out via dmu_sync(). + */ +ssize_t zvol_immediate_write_sz = 32768; + +static void +zvol_log_write(zvol_state_t *zv, dmu_tx_t *tx, uint64_t offset, + uint64_t size, int sync) +{ + uint32_t blocksize = zv->zv_volblocksize; + zilog_t *zilog = zv->zv_zilog; + itx_wr_state_t write_state; + + if (zil_replaying(zilog, tx)) + return; + + if (zilog->zl_logbias == ZFS_LOGBIAS_THROUGHPUT) + write_state = WR_INDIRECT; + else if (!spa_has_slogs(zilog->zl_spa) && + size >= blocksize && blocksize > zvol_immediate_write_sz) + write_state = WR_INDIRECT; + else if (sync) + write_state = WR_COPIED; + else + write_state = WR_NEED_COPY; + + while (size) { + itx_t *itx; + lr_write_t *lr; + itx_wr_state_t wr_state = write_state; + ssize_t len = size; + + if (wr_state == WR_COPIED && size > ZIL_MAX_COPIED_DATA) + wr_state = WR_NEED_COPY; + else if (wr_state == WR_INDIRECT) + len = MIN(blocksize - P2PHASE(offset, blocksize), size); + + itx = zil_itx_create(TX_WRITE, sizeof (*lr) + + (wr_state == WR_COPIED ? len : 0)); + lr = (lr_write_t *)&itx->itx_lr; + if (wr_state == WR_COPIED && dmu_read_by_dnode(zv->zv_dn, + offset, len, lr+1, DMU_READ_NO_PREFETCH) != 0) { + zil_itx_destroy(itx); + itx = zil_itx_create(TX_WRITE, sizeof (*lr)); + lr = (lr_write_t *)&itx->itx_lr; + wr_state = WR_NEED_COPY; + } + + itx->itx_wr_state = wr_state; + lr->lr_foid = ZVOL_OBJ; + lr->lr_offset = offset; + lr->lr_length = len; + lr->lr_blkoff = 0; + BP_ZERO(&lr->lr_blkptr); + + itx->itx_private = zv; + itx->itx_sync = sync; + + (void) zil_itx_assign(zilog, itx, tx); + + offset += len; + size -= len; + } +} + +typedef struct zv_request { + zvol_state_t *zv; + struct bio *bio; + rl_t *rl; +} zv_request_t; + +static void +uio_from_bio(uio_t *uio, struct bio *bio) +{ + uio->uio_bvec = &bio->bi_io_vec[BIO_BI_IDX(bio)]; + uio->uio_skip = BIO_BI_SKIP(bio); + uio->uio_resid = BIO_BI_SIZE(bio); + uio->uio_iovcnt = bio->bi_vcnt - BIO_BI_IDX(bio); + uio->uio_loffset = BIO_BI_SECTOR(bio) << 9; + uio->uio_limit = MAXOFFSET_T; + uio->uio_segflg = UIO_BVEC; +} + +static void +zvol_write(void *arg) +{ + zv_request_t *zvr = arg; + struct bio *bio = zvr->bio; + uio_t uio; + zvol_state_t *zv = zvr->zv; + uint64_t volsize = zv->zv_volsize; + boolean_t sync; + int error = 0; + unsigned long start_jif; + + uio_from_bio(&uio, bio); + + ASSERT(zv && zv->zv_open_count > 0); + + start_jif = jiffies; + blk_generic_start_io_acct(zv->zv_queue, WRITE, bio_sectors(bio), + &zv->zv_disk->part0); + + sync = bio_is_fua(bio) || zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS; + + while (uio.uio_resid > 0 && uio.uio_loffset < volsize) { + uint64_t bytes = MIN(uio.uio_resid, DMU_MAX_ACCESS >> 1); + uint64_t off = uio.uio_loffset; + dmu_tx_t *tx = dmu_tx_create(zv->zv_objset); + + if (bytes > volsize - off) /* don't write past the end */ + bytes = volsize - off; + + dmu_tx_hold_write(tx, ZVOL_OBJ, off, bytes); + + /* This will only fail for ENOSPC */ + error = dmu_tx_assign(tx, TXG_WAIT); + if (error) { + dmu_tx_abort(tx); + break; + } + error = dmu_write_uio_dnode(zv->zv_dn, &uio, bytes, tx); + if (error == 0) + zvol_log_write(zv, tx, off, bytes, sync); + dmu_tx_commit(tx); + + if (error) + break; + } + zfs_range_unlock(zvr->rl); + if (sync) + zil_commit(zv->zv_zilog, ZVOL_OBJ); + + rw_exit(&zv->zv_suspend_lock); + blk_generic_end_io_acct(zv->zv_queue, WRITE, &zv->zv_disk->part0, + start_jif); + BIO_END_IO(bio, -error); + kmem_free(zvr, sizeof (zv_request_t)); +} + +/* + * Log a DKIOCFREE/free-long-range to the ZIL with TX_TRUNCATE. + */ +static void +zvol_log_truncate(zvol_state_t *zv, dmu_tx_t *tx, uint64_t off, uint64_t len, + boolean_t sync) +{ + itx_t *itx; + lr_truncate_t *lr; + zilog_t *zilog = zv->zv_zilog; + + if (zil_replaying(zilog, tx)) + return; + + itx = zil_itx_create(TX_TRUNCATE, sizeof (*lr)); + lr = (lr_truncate_t *)&itx->itx_lr; + lr->lr_foid = ZVOL_OBJ; + lr->lr_offset = off; + lr->lr_length = len; + + itx->itx_sync = sync; + zil_itx_assign(zilog, itx, tx); +} + +static void +zvol_discard(void *arg) +{ + zv_request_t *zvr = arg; + struct bio *bio = zvr->bio; + zvol_state_t *zv = zvr->zv; + uint64_t start = BIO_BI_SECTOR(bio) << 9; + uint64_t size = BIO_BI_SIZE(bio); + uint64_t end = start + size; + boolean_t sync; + int error = 0; + dmu_tx_t *tx; + unsigned long start_jif; + + ASSERT(zv && zv->zv_open_count > 0); + + start_jif = jiffies; + blk_generic_start_io_acct(zv->zv_queue, WRITE, bio_sectors(bio), + &zv->zv_disk->part0); + + sync = bio_is_fua(bio) || zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS; + + if (end > zv->zv_volsize) { + error = SET_ERROR(EIO); + goto unlock; + } + + /* + * Align the request to volume block boundaries when a secure erase is + * not required. This will prevent dnode_free_range() from zeroing out + * the unaligned parts which is slow (read-modify-write) and useless + * since we are not freeing any space by doing so. + */ + if (!bio_is_secure_erase(bio)) { + start = P2ROUNDUP(start, zv->zv_volblocksize); + end = P2ALIGN(end, zv->zv_volblocksize); + size = end - start; + } + + if (start >= end) + goto unlock; + + tx = dmu_tx_create(zv->zv_objset); + dmu_tx_mark_netfree(tx); + error = dmu_tx_assign(tx, TXG_WAIT); + if (error != 0) { + dmu_tx_abort(tx); + } else { + zvol_log_truncate(zv, tx, start, size, B_TRUE); + dmu_tx_commit(tx); + error = dmu_free_long_range(zv->zv_objset, + ZVOL_OBJ, start, size); + } +unlock: + zfs_range_unlock(zvr->rl); + if (error == 0 && sync) + zil_commit(zv->zv_zilog, ZVOL_OBJ); + + rw_exit(&zv->zv_suspend_lock); + blk_generic_end_io_acct(zv->zv_queue, WRITE, &zv->zv_disk->part0, + start_jif); + BIO_END_IO(bio, -error); + kmem_free(zvr, sizeof (zv_request_t)); +} + +static void +zvol_read(void *arg) +{ + zv_request_t *zvr = arg; + struct bio *bio = zvr->bio; + uio_t uio; + zvol_state_t *zv = zvr->zv; + uint64_t volsize = zv->zv_volsize; + int error = 0; + unsigned long start_jif; + + uio_from_bio(&uio, bio); + + ASSERT(zv && zv->zv_open_count > 0); + + start_jif = jiffies; + blk_generic_start_io_acct(zv->zv_queue, READ, bio_sectors(bio), + &zv->zv_disk->part0); + + while (uio.uio_resid > 0 && uio.uio_loffset < volsize) { + uint64_t bytes = MIN(uio.uio_resid, DMU_MAX_ACCESS >> 1); + + /* don't read past the end */ + if (bytes > volsize - uio.uio_loffset) + bytes = volsize - uio.uio_loffset; + + error = dmu_read_uio_dnode(zv->zv_dn, &uio, bytes); + if (error) { + /* convert checksum errors into IO errors */ + if (error == ECKSUM) + error = SET_ERROR(EIO); + break; + } + } + zfs_range_unlock(zvr->rl); + + rw_exit(&zv->zv_suspend_lock); + blk_generic_end_io_acct(zv->zv_queue, READ, &zv->zv_disk->part0, + start_jif); + BIO_END_IO(bio, -error); + kmem_free(zvr, sizeof (zv_request_t)); +} + +static MAKE_REQUEST_FN_RET +zvol_request(struct request_queue *q, struct bio *bio) +{ + zvol_state_t *zv = q->queuedata; + fstrans_cookie_t cookie = spl_fstrans_mark(); + uint64_t offset = BIO_BI_SECTOR(bio) << 9; + uint64_t size = BIO_BI_SIZE(bio); + int rw = bio_data_dir(bio); + zv_request_t *zvr; + + if (bio_has_data(bio) && offset + size > zv->zv_volsize) { + printk(KERN_INFO + "%s: bad access: offset=%llu, size=%lu\n", + zv->zv_disk->disk_name, + (long long unsigned)offset, + (long unsigned)size); + + BIO_END_IO(bio, -SET_ERROR(EIO)); + goto out; + } + + if (rw == WRITE) { + boolean_t need_sync = B_FALSE; + + if (unlikely(zv->zv_flags & ZVOL_RDONLY)) { + BIO_END_IO(bio, -SET_ERROR(EROFS)); + goto out; + } + + /* + * To be released in the I/O function. See the comment on + * zfs_range_lock below. + */ + rw_enter(&zv->zv_suspend_lock, RW_READER); + + /* bio marked as FLUSH need to flush before write */ + if (bio_is_flush(bio)) + zil_commit(zv->zv_zilog, ZVOL_OBJ); + + /* Some requests are just for flush and nothing else. */ + if (size == 0) { + rw_exit(&zv->zv_suspend_lock); + BIO_END_IO(bio, 0); + goto out; + } + + zvr = kmem_alloc(sizeof (zv_request_t), KM_SLEEP); + zvr->zv = zv; + zvr->bio = bio; + + /* + * To be released in the I/O function. Since the I/O functions + * are asynchronous, we take it here synchronously to make + * sure overlapped I/Os are properly ordered. + */ + zvr->rl = zfs_range_lock(&zv->zv_range_lock, offset, size, + RL_WRITER); + /* + * Sync writes and discards execute zil_commit() which may need + * to take a RL_READER lock on the whole block being modified + * via its zillog->zl_get_data(): to avoid circular dependency + * issues with taskq threads execute these requests + * synchronously here in zvol_request(). + */ + need_sync = bio_is_fua(bio) || + zv->zv_objset->os_sync == ZFS_SYNC_ALWAYS; + if (bio_is_discard(bio) || bio_is_secure_erase(bio)) { + if (zvol_request_sync || need_sync || + taskq_dispatch(zvol_taskq, zvol_discard, zvr, + TQ_SLEEP) == TASKQID_INVALID) + zvol_discard(zvr); + } else { + if (zvol_request_sync || need_sync || + taskq_dispatch(zvol_taskq, zvol_write, zvr, + TQ_SLEEP) == TASKQID_INVALID) + zvol_write(zvr); + } + } else { + zvr = kmem_alloc(sizeof (zv_request_t), KM_SLEEP); + zvr->zv = zv; + zvr->bio = bio; + + rw_enter(&zv->zv_suspend_lock, RW_READER); + + zvr->rl = zfs_range_lock(&zv->zv_range_lock, offset, size, + RL_READER); + if (zvol_request_sync || taskq_dispatch(zvol_taskq, + zvol_read, zvr, TQ_SLEEP) == TASKQID_INVALID) + zvol_read(zvr); + } + +out: + spl_fstrans_unmark(cookie); +#ifdef HAVE_MAKE_REQUEST_FN_RET_INT + return (0); +#elif defined(HAVE_MAKE_REQUEST_FN_RET_QC) + return (BLK_QC_T_NONE); +#endif +} + +static void +zvol_get_done(zgd_t *zgd, int error) +{ + if (zgd->zgd_db) + dmu_buf_rele(zgd->zgd_db, zgd); + + zfs_range_unlock(zgd->zgd_rl); + + if (error == 0 && zgd->zgd_bp) + zil_add_block(zgd->zgd_zilog, zgd->zgd_bp); + + kmem_free(zgd, sizeof (zgd_t)); +} + +/* + * Get data to generate a TX_WRITE intent log record. + */ +static int +zvol_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio) +{ + zvol_state_t *zv = arg; + uint64_t offset = lr->lr_offset; + uint64_t size = lr->lr_length; + dmu_buf_t *db; + zgd_t *zgd; + int error; + + ASSERT(zio != NULL); + ASSERT(size != 0); + + zgd = (zgd_t *)kmem_zalloc(sizeof (zgd_t), KM_SLEEP); + zgd->zgd_zilog = zv->zv_zilog; + + /* + * Write records come in two flavors: immediate and indirect. + * For small writes it's cheaper to store the data with the + * log record (immediate); for large writes it's cheaper to + * sync the data and get a pointer to it (indirect) so that + * we don't have to write the data twice. + */ + if (buf != NULL) { /* immediate write */ + zgd->zgd_rl = zfs_range_lock(&zv->zv_range_lock, offset, size, + RL_READER); + error = dmu_read_by_dnode(zv->zv_dn, offset, size, buf, + DMU_READ_NO_PREFETCH); + } else { /* indirect write */ + /* + * Have to lock the whole block to ensure when it's written out + * and its checksum is being calculated that no one can change + * the data. Contrarily to zfs_get_data we need not re-check + * blocksize after we get the lock because it cannot be changed. + */ + size = zv->zv_volblocksize; + offset = P2ALIGN_TYPED(offset, size, uint64_t); + zgd->zgd_rl = zfs_range_lock(&zv->zv_range_lock, offset, size, + RL_READER); + error = dmu_buf_hold_by_dnode(zv->zv_dn, offset, zgd, &db, + DMU_READ_NO_PREFETCH); + if (error == 0) { + blkptr_t *bp = &lr->lr_blkptr; + + zgd->zgd_db = db; + zgd->zgd_bp = bp; + + ASSERT(db != NULL); + ASSERT(db->db_offset == offset); + ASSERT(db->db_size == size); + + error = dmu_sync(zio, lr->lr_common.lrc_txg, + zvol_get_done, zgd); + + if (error == 0) + return (0); + } + } + + zvol_get_done(zgd, error); + + return (SET_ERROR(error)); +} + +/* + * The zvol_state_t's are inserted into zvol_state_list and zvol_htable. + */ +static void +zvol_insert(zvol_state_t *zv) +{ + ASSERT(MUTEX_HELD(&zvol_state_lock)); + ASSERT3U(MINOR(zv->zv_dev) & ZVOL_MINOR_MASK, ==, 0); + list_insert_head(&zvol_state_list, zv); + hlist_add_head(&zv->zv_hlink, ZVOL_HT_HEAD(zv->zv_hash)); +} + +/* + * Simply remove the zvol from to list of zvols. + */ +static void +zvol_remove(zvol_state_t *zv) +{ + ASSERT(MUTEX_HELD(&zvol_state_lock)); + list_remove(&zvol_state_list, zv); + hlist_del(&zv->zv_hlink); +} + +/* + * Setup zv after we just own the zv->objset + */ +static int +zvol_setup_zv(zvol_state_t *zv) +{ + uint64_t volsize; + int error; + uint64_t ro; + objset_t *os = zv->zv_objset; + + ASSERT(MUTEX_HELD(&zv->zv_state_lock) && + RW_LOCK_HELD(&zv->zv_suspend_lock)); + + error = dsl_prop_get_integer(zv->zv_name, "readonly", &ro, NULL); + if (error) + return (SET_ERROR(error)); + + error = zap_lookup(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize); + if (error) + return (SET_ERROR(error)); + + error = dnode_hold(os, ZVOL_OBJ, FTAG, &zv->zv_dn); + if (error) + return (SET_ERROR(error)); + + set_capacity(zv->zv_disk, volsize >> 9); + zv->zv_volsize = volsize; + zv->zv_zilog = zil_open(os, zvol_get_data); + + if (ro || dmu_objset_is_snapshot(os) || + !spa_writeable(dmu_objset_spa(os))) { + set_disk_ro(zv->zv_disk, 1); + zv->zv_flags |= ZVOL_RDONLY; + } else { + set_disk_ro(zv->zv_disk, 0); + zv->zv_flags &= ~ZVOL_RDONLY; + } + return (0); +} + +/* + * Shutdown every zv_objset related stuff except zv_objset itself. + * The is the reverse of zvol_setup_zv. + */ +static void +zvol_shutdown_zv(zvol_state_t *zv) +{ + ASSERT(MUTEX_HELD(&zv->zv_state_lock) && + RW_LOCK_HELD(&zv->zv_suspend_lock)); + + zil_close(zv->zv_zilog); + zv->zv_zilog = NULL; + + dnode_rele(zv->zv_dn, FTAG); + zv->zv_dn = NULL; + + /* + * Evict cached data + */ + if (dsl_dataset_is_dirty(dmu_objset_ds(zv->zv_objset)) && + !(zv->zv_flags & ZVOL_RDONLY)) + txg_wait_synced(dmu_objset_pool(zv->zv_objset), 0); + (void) dmu_objset_evict_dbufs(zv->zv_objset); +} + +/* + * return the proper tag for rollback and recv + */ +void * +zvol_tag(zvol_state_t *zv) +{ + ASSERT(RW_WRITE_HELD(&zv->zv_suspend_lock)); + return (zv->zv_open_count > 0 ? zv : NULL); +} + +/* + * Suspend the zvol for recv and rollback. + */ +zvol_state_t * +zvol_suspend(const char *name) +{ + zvol_state_t *zv; + + zv = zvol_find_by_name(name, RW_WRITER); + + if (zv == NULL) + return (NULL); + + /* block all I/O, release in zvol_resume. */ + ASSERT(MUTEX_HELD(&zv->zv_state_lock) && + RW_WRITE_HELD(&zv->zv_suspend_lock)); + + atomic_inc(&zv->zv_suspend_ref); + + if (zv->zv_open_count > 0) + zvol_shutdown_zv(zv); + + /* + * do not hold zv_state_lock across suspend/resume to + * avoid locking up zvol lookups + */ + mutex_exit(&zv->zv_state_lock); + + /* zv_suspend_lock is released in zvol_resume() */ + return (zv); +} + +int +zvol_resume(zvol_state_t *zv) +{ + int error = 0; + + ASSERT(RW_WRITE_HELD(&zv->zv_suspend_lock)); + + mutex_enter(&zv->zv_state_lock); + + if (zv->zv_open_count > 0) { + VERIFY0(dmu_objset_hold(zv->zv_name, zv, &zv->zv_objset)); + VERIFY3P(zv->zv_objset->os_dsl_dataset->ds_owner, ==, zv); + VERIFY(dsl_dataset_long_held(zv->zv_objset->os_dsl_dataset)); + dmu_objset_rele(zv->zv_objset, zv); + + error = zvol_setup_zv(zv); + } + + mutex_exit(&zv->zv_state_lock); + + rw_exit(&zv->zv_suspend_lock); + /* + * We need this because we don't hold zvol_state_lock while releasing + * zv_suspend_lock. zvol_remove_minors_impl thus cannot check + * zv_suspend_lock to determine it is safe to free because rwlock is + * not inherent atomic. + */ + atomic_dec(&zv->zv_suspend_ref); + + return (SET_ERROR(error)); +} + +static int +zvol_first_open(zvol_state_t *zv) +{ + objset_t *os; + int error, locked = 0; + + ASSERT(RW_READ_HELD(&zv->zv_suspend_lock)); + ASSERT(MUTEX_HELD(&zv->zv_state_lock)); + + /* + * In all other cases the spa_namespace_lock is taken before the + * bdev->bd_mutex lock. But in this case the Linux __blkdev_get() + * function calls fops->open() with the bdev->bd_mutex lock held. + * This deadlock can be easily observed with zvols used as vdevs. + * + * To avoid a potential lock inversion deadlock we preemptively + * try to take the spa_namespace_lock(). Normally it will not + * be contended and this is safe because spa_open_common() handles + * the case where the caller already holds the spa_namespace_lock. + * + * When it is contended we risk a lock inversion if we were to + * block waiting for the lock. Luckily, the __blkdev_get() + * function allows us to return -ERESTARTSYS which will result in + * bdev->bd_mutex being dropped, reacquired, and fops->open() being + * called again. This process can be repeated safely until both + * locks are acquired. + */ + if (!mutex_owned(&spa_namespace_lock)) { + locked = mutex_tryenter(&spa_namespace_lock); + if (!locked) + return (-SET_ERROR(ERESTARTSYS)); + } + + /* lie and say we're read-only */ + error = dmu_objset_own(zv->zv_name, DMU_OST_ZVOL, 1, zv, &os); + if (error) + goto out_mutex; + + zv->zv_objset = os; + + error = zvol_setup_zv(zv); + + if (error) { + dmu_objset_disown(os, zv); + zv->zv_objset = NULL; + } + +out_mutex: + if (locked) + mutex_exit(&spa_namespace_lock); + return (SET_ERROR(-error)); +} + +static void +zvol_last_close(zvol_state_t *zv) +{ + ASSERT(RW_READ_HELD(&zv->zv_suspend_lock)); + ASSERT(MUTEX_HELD(&zv->zv_state_lock)); + + zvol_shutdown_zv(zv); + + dmu_objset_disown(zv->zv_objset, zv); + zv->zv_objset = NULL; +} + +static int +zvol_open(struct block_device *bdev, fmode_t flag) +{ + zvol_state_t *zv; + int error = 0; + boolean_t drop_suspend = B_FALSE; + + ASSERT(!mutex_owned(&zvol_state_lock)); + + mutex_enter(&zvol_state_lock); + /* + * Obtain a copy of private_data under the zvol_state_lock to make + * sure that either the result of zvol free code path setting + * bdev->bd_disk->private_data to NULL is observed, or zvol_free() + * is not called on this zv because of the positive zv_open_count. + */ + zv = bdev->bd_disk->private_data; + if (zv == NULL) { + mutex_exit(&zvol_state_lock); + return (SET_ERROR(-ENXIO)); + } + + /* take zv_suspend_lock before zv_state_lock */ + rw_enter(&zv->zv_suspend_lock, RW_READER); + + mutex_enter(&zv->zv_state_lock); + + /* + * make sure zvol is not suspended during first open + * (hold zv_suspend_lock), otherwise, drop the lock + */ + if (zv->zv_open_count == 0) { + drop_suspend = B_TRUE; + } else { + rw_exit(&zv->zv_suspend_lock); + } + + mutex_exit(&zvol_state_lock); + + if (zv->zv_open_count == 0) { + error = zvol_first_open(zv); + if (error) + goto out_mutex; + } + + if ((flag & FMODE_WRITE) && (zv->zv_flags & ZVOL_RDONLY)) { + error = -EROFS; + goto out_open_count; + } + + zv->zv_open_count++; + + check_disk_change(bdev); + +out_open_count: + if (zv->zv_open_count == 0) + zvol_last_close(zv); +out_mutex: + mutex_exit(&zv->zv_state_lock); + if (drop_suspend) + rw_exit(&zv->zv_suspend_lock); + if (error == -ERESTARTSYS) + schedule(); + + return (SET_ERROR(error)); +} + +#ifdef HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID +static void +#else +static int +#endif +zvol_release(struct gendisk *disk, fmode_t mode) +{ + zvol_state_t *zv; + boolean_t drop_suspend = B_FALSE; + + ASSERT(!mutex_owned(&zvol_state_lock)); + + mutex_enter(&zvol_state_lock); + zv = disk->private_data; + ASSERT(zv && zv->zv_open_count > 0); + + /* take zv_suspend_lock before zv_state_lock */ + rw_enter(&zv->zv_suspend_lock, RW_READER); + + mutex_enter(&zv->zv_state_lock); + mutex_exit(&zvol_state_lock); + + /* + * make sure zvol is not suspended during last close + * (hold zv_suspend_lock), otherwise, drop the lock + */ + if (zv->zv_open_count == 1) + drop_suspend = B_TRUE; + else + rw_exit(&zv->zv_suspend_lock); + + zv->zv_open_count--; + if (zv->zv_open_count == 0) + zvol_last_close(zv); + + mutex_exit(&zv->zv_state_lock); + + if (drop_suspend) + rw_exit(&zv->zv_suspend_lock); + +#ifndef HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID + return (0); +#endif +} + +static int +zvol_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + zvol_state_t *zv = bdev->bd_disk->private_data; + int error = 0; + + ASSERT(zv && zv->zv_open_count > 0); + + switch (cmd) { + case BLKFLSBUF: + fsync_bdev(bdev); + invalidate_bdev(bdev); + rw_enter(&zv->zv_suspend_lock, RW_READER); + + if (dsl_dataset_is_dirty(dmu_objset_ds(zv->zv_objset)) && + !(zv->zv_flags & ZVOL_RDONLY)) + txg_wait_synced(dmu_objset_pool(zv->zv_objset), 0); + + rw_exit(&zv->zv_suspend_lock); + break; + + case BLKZNAME: + mutex_enter(&zv->zv_state_lock); + error = copy_to_user((void *)arg, zv->zv_name, MAXNAMELEN); + mutex_exit(&zv->zv_state_lock); + break; + + default: + error = -ENOTTY; + break; + } + + return (SET_ERROR(error)); +} + +#ifdef CONFIG_COMPAT +static int +zvol_compat_ioctl(struct block_device *bdev, fmode_t mode, + unsigned cmd, unsigned long arg) +{ + return (zvol_ioctl(bdev, mode, cmd, arg)); +} +#else +#define zvol_compat_ioctl NULL +#endif + +static int zvol_media_changed(struct gendisk *disk) +{ + zvol_state_t *zv = disk->private_data; + + ASSERT(zv && zv->zv_open_count > 0); + + return (zv->zv_changed); +} + +static int zvol_revalidate_disk(struct gendisk *disk) +{ + zvol_state_t *zv = disk->private_data; + + ASSERT(zv && zv->zv_open_count > 0); + + zv->zv_changed = 0; + set_capacity(zv->zv_disk, zv->zv_volsize >> 9); + + return (0); +} + +/* + * Provide a simple virtual geometry for legacy compatibility. For devices + * smaller than 1 MiB a small head and sector count is used to allow very + * tiny devices. For devices over 1 Mib a standard head and sector count + * is used to keep the cylinders count reasonable. + */ +static int +zvol_getgeo(struct block_device *bdev, struct hd_geometry *geo) +{ + zvol_state_t *zv = bdev->bd_disk->private_data; + sector_t sectors; + + ASSERT(zv && zv->zv_open_count > 0); + + sectors = get_capacity(zv->zv_disk); + + if (sectors > 2048) { + geo->heads = 16; + geo->sectors = 63; + } else { + geo->heads = 2; + geo->sectors = 4; + } + + geo->start = 0; + geo->cylinders = sectors / (geo->heads * geo->sectors); + + return (0); +} + +static struct kobject * +zvol_probe(dev_t dev, int *part, void *arg) +{ + zvol_state_t *zv; + struct kobject *kobj; + + zv = zvol_find_by_dev(dev); + kobj = zv ? get_disk(zv->zv_disk) : NULL; + ASSERT(zv == NULL || MUTEX_HELD(&zv->zv_state_lock)); + if (zv) + mutex_exit(&zv->zv_state_lock); + + return (kobj); +} + +#ifdef HAVE_BDEV_BLOCK_DEVICE_OPERATIONS +static struct block_device_operations zvol_ops = { + .open = zvol_open, + .release = zvol_release, + .ioctl = zvol_ioctl, + .compat_ioctl = zvol_compat_ioctl, + .media_changed = zvol_media_changed, + .revalidate_disk = zvol_revalidate_disk, + .getgeo = zvol_getgeo, + .owner = THIS_MODULE, +}; + +#else /* HAVE_BDEV_BLOCK_DEVICE_OPERATIONS */ + +static int +zvol_open_by_inode(struct inode *inode, struct file *file) +{ + return (zvol_open(inode->i_bdev, file->f_mode)); +} + +static int +zvol_release_by_inode(struct inode *inode, struct file *file) +{ + return (zvol_release(inode->i_bdev->bd_disk, file->f_mode)); +} + +static int +zvol_ioctl_by_inode(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + if (file == NULL || inode == NULL) + return (SET_ERROR(-EINVAL)); + + return (zvol_ioctl(inode->i_bdev, file->f_mode, cmd, arg)); +} + +#ifdef CONFIG_COMPAT +static long +zvol_compat_ioctl_by_inode(struct file *file, + unsigned int cmd, unsigned long arg) +{ + if (file == NULL) + return (SET_ERROR(-EINVAL)); + + return (zvol_compat_ioctl(file->f_dentry->d_inode->i_bdev, + file->f_mode, cmd, arg)); +} +#else +#define zvol_compat_ioctl_by_inode NULL +#endif + +static struct block_device_operations zvol_ops = { + .open = zvol_open_by_inode, + .release = zvol_release_by_inode, + .ioctl = zvol_ioctl_by_inode, + .compat_ioctl = zvol_compat_ioctl_by_inode, + .media_changed = zvol_media_changed, + .revalidate_disk = zvol_revalidate_disk, + .getgeo = zvol_getgeo, + .owner = THIS_MODULE, +}; +#endif /* HAVE_BDEV_BLOCK_DEVICE_OPERATIONS */ + +/* + * Allocate memory for a new zvol_state_t and setup the required + * request queue and generic disk structures for the block device. + */ +static zvol_state_t * +zvol_alloc(dev_t dev, const char *name) +{ + zvol_state_t *zv; + uint64_t volmode; + + if (dsl_prop_get_integer(name, "volmode", &volmode, NULL) != 0) + return (NULL); + + if (volmode == ZFS_VOLMODE_DEFAULT) + volmode = zvol_volmode; + + if (volmode == ZFS_VOLMODE_NONE) + return (NULL); + + zv = kmem_zalloc(sizeof (zvol_state_t), KM_SLEEP); + + list_link_init(&zv->zv_next); + + mutex_init(&zv->zv_state_lock, NULL, MUTEX_DEFAULT, NULL); + + zv->zv_queue = blk_alloc_queue(GFP_ATOMIC); + if (zv->zv_queue == NULL) + goto out_kmem; + + blk_queue_make_request(zv->zv_queue, zvol_request); + blk_queue_set_write_cache(zv->zv_queue, B_TRUE, B_TRUE); + + /* Limit read-ahead to a single page to prevent over-prefetching. */ + blk_queue_set_read_ahead(zv->zv_queue, 1); + + /* Disable write merging in favor of the ZIO pipeline. */ + queue_flag_set_unlocked(QUEUE_FLAG_NOMERGES, zv->zv_queue); + + zv->zv_disk = alloc_disk(ZVOL_MINORS); + if (zv->zv_disk == NULL) + goto out_queue; + + zv->zv_queue->queuedata = zv; + zv->zv_dev = dev; + zv->zv_open_count = 0; + strlcpy(zv->zv_name, name, MAXNAMELEN); + + zfs_rlock_init(&zv->zv_range_lock); + rw_init(&zv->zv_suspend_lock, NULL, RW_DEFAULT, NULL); + + zv->zv_disk->major = zvol_major; + if (volmode == ZFS_VOLMODE_DEV) { + /* + * ZFS_VOLMODE_DEV disable partitioning on ZVOL devices: set + * gendisk->minors = 1 as noted in include/linux/genhd.h. + * Also disable extended partition numbers (GENHD_FL_EXT_DEVT) + * and suppresses partition scanning (GENHD_FL_NO_PART_SCAN) + * setting gendisk->flags accordingly. + */ + zv->zv_disk->minors = 1; +#if defined(GENHD_FL_EXT_DEVT) + zv->zv_disk->flags &= ~GENHD_FL_EXT_DEVT; +#endif +#if defined(GENHD_FL_NO_PART_SCAN) + zv->zv_disk->flags |= GENHD_FL_NO_PART_SCAN; +#endif + } + zv->zv_disk->first_minor = (dev & MINORMASK); + zv->zv_disk->fops = &zvol_ops; + zv->zv_disk->private_data = zv; + zv->zv_disk->queue = zv->zv_queue; + snprintf(zv->zv_disk->disk_name, DISK_NAME_LEN, "%s%d", + ZVOL_DEV_NAME, (dev & MINORMASK)); + + return (zv); + +out_queue: + blk_cleanup_queue(zv->zv_queue); +out_kmem: + kmem_free(zv, sizeof (zvol_state_t)); + + return (NULL); +} + +/* + * Cleanup then free a zvol_state_t which was created by zvol_alloc(). + * At this time, the structure is not opened by anyone, is taken off + * the zvol_state_list, and has its private data set to NULL. + * The zvol_state_lock is dropped. + */ +static void +zvol_free(void *arg) +{ + zvol_state_t *zv = arg; + + ASSERT(!MUTEX_HELD(&zvol_state_lock)); + ASSERT(!RW_LOCK_HELD(&zv->zv_suspend_lock)); + ASSERT(!MUTEX_HELD(&zv->zv_state_lock)); + ASSERT(zv->zv_open_count == 0); + ASSERT(zv->zv_disk->private_data == NULL); + + rw_destroy(&zv->zv_suspend_lock); + zfs_rlock_destroy(&zv->zv_range_lock); + + del_gendisk(zv->zv_disk); + blk_cleanup_queue(zv->zv_queue); + put_disk(zv->zv_disk); + + ida_simple_remove(&zvol_ida, MINOR(zv->zv_dev) >> ZVOL_MINOR_BITS); + + mutex_destroy(&zv->zv_state_lock); + + kmem_free(zv, sizeof (zvol_state_t)); +} + +/* + * Create a block device minor node and setup the linkage between it + * and the specified volume. Once this function returns the block + * device is live and ready for use. + */ +static int +zvol_create_minor_impl(const char *name) +{ + zvol_state_t *zv; + objset_t *os; + dmu_object_info_t *doi; + uint64_t volsize; + uint64_t len; + unsigned minor = 0; + int error = 0; + int idx; + uint64_t hash = zvol_name_hash(name); + + if (zvol_inhibit_dev) + return (0); + + idx = ida_simple_get(&zvol_ida, 0, 0, kmem_flags_convert(KM_SLEEP)); + if (idx < 0) + return (SET_ERROR(-idx)); + minor = idx << ZVOL_MINOR_BITS; + + zv = zvol_find_by_name_hash(name, hash, RW_NONE); + if (zv) { + ASSERT(MUTEX_HELD(&zv->zv_state_lock)); + mutex_exit(&zv->zv_state_lock); + ida_simple_remove(&zvol_ida, idx); + return (SET_ERROR(EEXIST)); + } + + doi = kmem_alloc(sizeof (dmu_object_info_t), KM_SLEEP); + + error = dmu_objset_own(name, DMU_OST_ZVOL, B_TRUE, FTAG, &os); + if (error) + goto out_doi; + + error = dmu_object_info(os, ZVOL_OBJ, doi); + if (error) + goto out_dmu_objset_disown; + + error = zap_lookup(os, ZVOL_ZAP_OBJ, "size", 8, 1, &volsize); + if (error) + goto out_dmu_objset_disown; + + zv = zvol_alloc(MKDEV(zvol_major, minor), name); + if (zv == NULL) { + error = SET_ERROR(EAGAIN); + goto out_dmu_objset_disown; + } + zv->zv_hash = hash; + + if (dmu_objset_is_snapshot(os)) + zv->zv_flags |= ZVOL_RDONLY; + + zv->zv_volblocksize = doi->doi_data_block_size; + zv->zv_volsize = volsize; + zv->zv_objset = os; + + set_capacity(zv->zv_disk, zv->zv_volsize >> 9); + + blk_queue_max_hw_sectors(zv->zv_queue, (DMU_MAX_ACCESS / 4) >> 9); + blk_queue_max_segments(zv->zv_queue, UINT16_MAX); + blk_queue_max_segment_size(zv->zv_queue, UINT_MAX); + blk_queue_physical_block_size(zv->zv_queue, zv->zv_volblocksize); + blk_queue_io_opt(zv->zv_queue, zv->zv_volblocksize); + blk_queue_max_discard_sectors(zv->zv_queue, + (zvol_max_discard_blocks * zv->zv_volblocksize) >> 9); + blk_queue_discard_granularity(zv->zv_queue, zv->zv_volblocksize); + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zv->zv_queue); +#ifdef QUEUE_FLAG_NONROT + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zv->zv_queue); +#endif +#ifdef QUEUE_FLAG_ADD_RANDOM + queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, zv->zv_queue); +#endif + + if (spa_writeable(dmu_objset_spa(os))) { + if (zil_replay_disable) + zil_destroy(dmu_objset_zil(os), B_FALSE); + else + zil_replay(os, zv, zvol_replay_vector); + } + + /* + * When udev detects the addition of the device it will immediately + * invoke blkid(8) to determine the type of content on the device. + * Prefetching the blocks commonly scanned by blkid(8) will speed + * up this process. + */ + len = MIN(MAX(zvol_prefetch_bytes, 0), SPA_MAXBLOCKSIZE); + if (len > 0) { + dmu_prefetch(os, ZVOL_OBJ, 0, 0, len, ZIO_PRIORITY_SYNC_READ); + dmu_prefetch(os, ZVOL_OBJ, 0, volsize - len, len, + ZIO_PRIORITY_SYNC_READ); + } + + zv->zv_objset = NULL; +out_dmu_objset_disown: + dmu_objset_disown(os, FTAG); +out_doi: + kmem_free(doi, sizeof (dmu_object_info_t)); + + if (error == 0) { + mutex_enter(&zvol_state_lock); + zvol_insert(zv); + mutex_exit(&zvol_state_lock); + add_disk(zv->zv_disk); + } else { + ida_simple_remove(&zvol_ida, idx); + } + + return (SET_ERROR(error)); +} + +/* + * Rename a block device minor mode for the specified volume. + */ +static void +zvol_rename_minor(zvol_state_t *zv, const char *newname) +{ + int readonly = get_disk_ro(zv->zv_disk); + + ASSERT(MUTEX_HELD(&zvol_state_lock)); + ASSERT(MUTEX_HELD(&zv->zv_state_lock)); + + strlcpy(zv->zv_name, newname, sizeof (zv->zv_name)); + + /* move to new hashtable entry */ + zv->zv_hash = zvol_name_hash(zv->zv_name); + hlist_del(&zv->zv_hlink); + hlist_add_head(&zv->zv_hlink, ZVOL_HT_HEAD(zv->zv_hash)); + + /* + * The block device's read-only state is briefly changed causing + * a KOBJ_CHANGE uevent to be issued. This ensures udev detects + * the name change and fixes the symlinks. This does not change + * ZVOL_RDONLY in zv->zv_flags so the actual read-only state never + * changes. This would normally be done using kobject_uevent() but + * that is a GPL-only symbol which is why we need this workaround. + */ + set_disk_ro(zv->zv_disk, !readonly); + set_disk_ro(zv->zv_disk, readonly); +} + +typedef struct minors_job { + list_t *list; + list_node_t link; + /* input */ + char *name; + /* output */ + int error; +} minors_job_t; + +/* + * Prefetch zvol dnodes for the minors_job + */ +static void +zvol_prefetch_minors_impl(void *arg) +{ + minors_job_t *job = arg; + char *dsname = job->name; + objset_t *os = NULL; + + job->error = dmu_objset_own(dsname, DMU_OST_ZVOL, B_TRUE, FTAG, + &os); + if (job->error == 0) { + dmu_prefetch(os, ZVOL_OBJ, 0, 0, 0, ZIO_PRIORITY_SYNC_READ); + dmu_objset_disown(os, FTAG); + } +} + +/* + * Mask errors to continue dmu_objset_find() traversal + */ +static int +zvol_create_snap_minor_cb(const char *dsname, void *arg) +{ + minors_job_t *j = arg; + list_t *minors_list = j->list; + const char *name = j->name; + + ASSERT0(MUTEX_HELD(&spa_namespace_lock)); + + /* skip the designated dataset */ + if (name && strcmp(dsname, name) == 0) + return (0); + + /* at this point, the dsname should name a snapshot */ + if (strchr(dsname, '@') == 0) { + dprintf("zvol_create_snap_minor_cb(): " + "%s is not a shapshot name\n", dsname); + } else { + minors_job_t *job; + char *n = strdup(dsname); + if (n == NULL) + return (0); + + job = kmem_alloc(sizeof (minors_job_t), KM_SLEEP); + job->name = n; + job->list = minors_list; + job->error = 0; + list_insert_tail(minors_list, job); + /* don't care if dispatch fails, because job->error is 0 */ + taskq_dispatch(system_taskq, zvol_prefetch_minors_impl, job, + TQ_SLEEP); + } + + return (0); +} + +/* + * Mask errors to continue dmu_objset_find() traversal + */ +static int +zvol_create_minors_cb(const char *dsname, void *arg) +{ + uint64_t snapdev; + int error; + list_t *minors_list = arg; + + ASSERT0(MUTEX_HELD(&spa_namespace_lock)); + + error = dsl_prop_get_integer(dsname, "snapdev", &snapdev, NULL); + if (error) + return (0); + + /* + * Given the name and the 'snapdev' property, create device minor nodes + * with the linkages to zvols/snapshots as needed. + * If the name represents a zvol, create a minor node for the zvol, then + * check if its snapshots are 'visible', and if so, iterate over the + * snapshots and create device minor nodes for those. + */ + if (strchr(dsname, '@') == 0) { + minors_job_t *job; + char *n = strdup(dsname); + if (n == NULL) + return (0); + + job = kmem_alloc(sizeof (minors_job_t), KM_SLEEP); + job->name = n; + job->list = minors_list; + job->error = 0; + list_insert_tail(minors_list, job); + /* don't care if dispatch fails, because job->error is 0 */ + taskq_dispatch(system_taskq, zvol_prefetch_minors_impl, job, + TQ_SLEEP); + + if (snapdev == ZFS_SNAPDEV_VISIBLE) { + /* + * traverse snapshots only, do not traverse children, + * and skip the 'dsname' + */ + error = dmu_objset_find((char *)dsname, + zvol_create_snap_minor_cb, (void *)job, + DS_FIND_SNAPSHOTS); + } + } else { + dprintf("zvol_create_minors_cb(): %s is not a zvol name\n", + dsname); + } + + return (0); +} + +/* + * Create minors for the specified dataset, including children and snapshots. + * Pay attention to the 'snapdev' property and iterate over the snapshots + * only if they are 'visible'. This approach allows one to assure that the + * snapshot metadata is read from disk only if it is needed. + * + * The name can represent a dataset to be recursively scanned for zvols and + * their snapshots, or a single zvol snapshot. If the name represents a + * dataset, the scan is performed in two nested stages: + * - scan the dataset for zvols, and + * - for each zvol, create a minor node, then check if the zvol's snapshots + * are 'visible', and only then iterate over the snapshots if needed + * + * If the name represents a snapshot, a check is performed if the snapshot is + * 'visible' (which also verifies that the parent is a zvol), and if so, + * a minor node for that snapshot is created. + */ +static int +zvol_create_minors_impl(const char *name) +{ + int error = 0; + fstrans_cookie_t cookie; + char *atp, *parent; + list_t minors_list; + minors_job_t *job; + + if (zvol_inhibit_dev) + return (0); + + /* + * This is the list for prefetch jobs. Whenever we found a match + * during dmu_objset_find, we insert a minors_job to the list and do + * taskq_dispatch to parallel prefetch zvol dnodes. Note we don't need + * any lock because all list operation is done on the current thread. + * + * We will use this list to do zvol_create_minor_impl after prefetch + * so we don't have to traverse using dmu_objset_find again. + */ + list_create(&minors_list, sizeof (minors_job_t), + offsetof(minors_job_t, link)); + + parent = kmem_alloc(MAXPATHLEN, KM_SLEEP); + (void) strlcpy(parent, name, MAXPATHLEN); + + if ((atp = strrchr(parent, '@')) != NULL) { + uint64_t snapdev; + + *atp = '\0'; + error = dsl_prop_get_integer(parent, "snapdev", + &snapdev, NULL); + + if (error == 0 && snapdev == ZFS_SNAPDEV_VISIBLE) + error = zvol_create_minor_impl(name); + } else { + cookie = spl_fstrans_mark(); + error = dmu_objset_find(parent, zvol_create_minors_cb, + &minors_list, DS_FIND_CHILDREN); + spl_fstrans_unmark(cookie); + } + + kmem_free(parent, MAXPATHLEN); + taskq_wait_outstanding(system_taskq, 0); + + /* + * Prefetch is completed, we can do zvol_create_minor_impl + * sequentially. + */ + while ((job = list_head(&minors_list)) != NULL) { + list_remove(&minors_list, job); + if (!job->error) + zvol_create_minor_impl(job->name); + strfree(job->name); + kmem_free(job, sizeof (minors_job_t)); + } + + list_destroy(&minors_list); + + return (SET_ERROR(error)); +} + +/* + * Remove minors for specified dataset including children and snapshots. + */ +static void +zvol_remove_minors_impl(const char *name) +{ + zvol_state_t *zv, *zv_next; + int namelen = ((name) ? strlen(name) : 0); + taskqid_t t, tid = TASKQID_INVALID; + list_t free_list; + + if (zvol_inhibit_dev) + return; + + list_create(&free_list, sizeof (zvol_state_t), + offsetof(zvol_state_t, zv_next)); + + mutex_enter(&zvol_state_lock); + + for (zv = list_head(&zvol_state_list); zv != NULL; zv = zv_next) { + zv_next = list_next(&zvol_state_list, zv); + + mutex_enter(&zv->zv_state_lock); + if (name == NULL || strcmp(zv->zv_name, name) == 0 || + (strncmp(zv->zv_name, name, namelen) == 0 && + (zv->zv_name[namelen] == '/' || + zv->zv_name[namelen] == '@'))) { + /* + * By holding zv_state_lock here, we guarantee that no + * one is currently using this zv + */ + + /* If in use, leave alone */ + if (zv->zv_open_count > 0 || + atomic_read(&zv->zv_suspend_ref)) { + mutex_exit(&zv->zv_state_lock); + continue; + } + + zvol_remove(zv); + + /* + * clear this while holding zvol_state_lock so + * zvol_open won't open it + */ + zv->zv_disk->private_data = NULL; + + /* Drop zv_state_lock before zvol_free() */ + mutex_exit(&zv->zv_state_lock); + + /* try parallel zv_free, if failed do it in place */ + t = taskq_dispatch(system_taskq, zvol_free, zv, + TQ_SLEEP); + if (t == TASKQID_INVALID) + list_insert_head(&free_list, zv); + else + tid = t; + } else { + mutex_exit(&zv->zv_state_lock); + } + } + mutex_exit(&zvol_state_lock); + + /* + * Drop zvol_state_lock before calling zvol_free() + */ + while ((zv = list_head(&free_list)) != NULL) { + list_remove(&free_list, zv); + zvol_free(zv); + } + + if (tid != TASKQID_INVALID) + taskq_wait_outstanding(system_taskq, tid); +} + +/* Remove minor for this specific volume only */ +static void +zvol_remove_minor_impl(const char *name) +{ + zvol_state_t *zv = NULL, *zv_next; + + if (zvol_inhibit_dev) + return; + + mutex_enter(&zvol_state_lock); + + for (zv = list_head(&zvol_state_list); zv != NULL; zv = zv_next) { + zv_next = list_next(&zvol_state_list, zv); + + mutex_enter(&zv->zv_state_lock); + if (strcmp(zv->zv_name, name) == 0) { + /* + * By holding zv_state_lock here, we guarantee that no + * one is currently using this zv + */ + + /* If in use, leave alone */ + if (zv->zv_open_count > 0 || + atomic_read(&zv->zv_suspend_ref)) { + mutex_exit(&zv->zv_state_lock); + continue; + } + zvol_remove(zv); + + /* clear this so zvol_open won't open it */ + zv->zv_disk->private_data = NULL; + + mutex_exit(&zv->zv_state_lock); + break; + } else { + mutex_exit(&zv->zv_state_lock); + } + } + + /* Drop zvol_state_lock before calling zvol_free() */ + mutex_exit(&zvol_state_lock); + + if (zv != NULL) + zvol_free(zv); +} + +/* + * Rename minors for specified dataset including children and snapshots. + */ +static void +zvol_rename_minors_impl(const char *oldname, const char *newname) +{ + zvol_state_t *zv, *zv_next; + int oldnamelen, newnamelen; + + if (zvol_inhibit_dev) + return; + + oldnamelen = strlen(oldname); + newnamelen = strlen(newname); + + mutex_enter(&zvol_state_lock); + + for (zv = list_head(&zvol_state_list); zv != NULL; zv = zv_next) { + zv_next = list_next(&zvol_state_list, zv); + + mutex_enter(&zv->zv_state_lock); + + /* If in use, leave alone */ + if (zv->zv_open_count > 0) { + mutex_exit(&zv->zv_state_lock); + continue; + } + + if (strcmp(zv->zv_name, oldname) == 0) { + zvol_rename_minor(zv, newname); + } else if (strncmp(zv->zv_name, oldname, oldnamelen) == 0 && + (zv->zv_name[oldnamelen] == '/' || + zv->zv_name[oldnamelen] == '@')) { + char *name = kmem_asprintf("%s%c%s", newname, + zv->zv_name[oldnamelen], + zv->zv_name + oldnamelen + 1); + zvol_rename_minor(zv, name); + kmem_free(name, strlen(name + 1)); + } + + mutex_exit(&zv->zv_state_lock); + } + + mutex_exit(&zvol_state_lock); +} + +typedef struct zvol_snapdev_cb_arg { + uint64_t snapdev; +} zvol_snapdev_cb_arg_t; + +static int +zvol_set_snapdev_cb(const char *dsname, void *param) +{ + zvol_snapdev_cb_arg_t *arg = param; + + if (strchr(dsname, '@') == NULL) + return (0); + + switch (arg->snapdev) { + case ZFS_SNAPDEV_VISIBLE: + (void) zvol_create_minor_impl(dsname); + break; + case ZFS_SNAPDEV_HIDDEN: + (void) zvol_remove_minor_impl(dsname); + break; + } + + return (0); +} + +static void +zvol_set_snapdev_impl(char *name, uint64_t snapdev) +{ + zvol_snapdev_cb_arg_t arg = {snapdev}; + fstrans_cookie_t cookie = spl_fstrans_mark(); + /* + * The zvol_set_snapdev_sync() sets snapdev appropriately + * in the dataset hierarchy. Here, we only scan snapshots. + */ + dmu_objset_find(name, zvol_set_snapdev_cb, &arg, DS_FIND_SNAPSHOTS); + spl_fstrans_unmark(cookie); +} + +typedef struct zvol_volmode_cb_arg { + uint64_t volmode; +} zvol_volmode_cb_arg_t; + +static void +zvol_set_volmode_impl(char *name, uint64_t volmode) +{ + fstrans_cookie_t cookie = spl_fstrans_mark(); + + if (strchr(name, '@') != NULL) + return; + + /* + * It's unfortunate we need to remove minors before we create new ones: + * this is necessary because our backing gendisk (zvol_state->zv_disk) + * coule be different when we set, for instance, volmode from "geom" + * to "dev" (or vice versa). + * A possible optimization is to modify our consumers so we don't get + * called when "volmode" does not change. + */ + switch (volmode) { + case ZFS_VOLMODE_NONE: + (void) zvol_remove_minor_impl(name); + break; + case ZFS_VOLMODE_GEOM: + case ZFS_VOLMODE_DEV: + (void) zvol_remove_minor_impl(name); + (void) zvol_create_minor_impl(name); + break; + case ZFS_VOLMODE_DEFAULT: + (void) zvol_remove_minor_impl(name); + if (zvol_volmode == ZFS_VOLMODE_NONE) + break; + else /* if zvol_volmode is invalid defaults to "geom" */ + (void) zvol_create_minor_impl(name); + break; + } + + spl_fstrans_unmark(cookie); +} + +static zvol_task_t * +zvol_task_alloc(zvol_async_op_t op, const char *name1, const char *name2, + uint64_t value) +{ + zvol_task_t *task; + char *delim; + + /* Never allow tasks on hidden names. */ + if (name1[0] == '$') + return (NULL); + + task = kmem_zalloc(sizeof (zvol_task_t), KM_SLEEP); + task->op = op; + task->value = value; + delim = strchr(name1, '/'); + strlcpy(task->pool, name1, delim ? (delim - name1 + 1) : MAXNAMELEN); + + strlcpy(task->name1, name1, MAXNAMELEN); + if (name2 != NULL) + strlcpy(task->name2, name2, MAXNAMELEN); + + return (task); +} + +static void +zvol_task_free(zvol_task_t *task) +{ + kmem_free(task, sizeof (zvol_task_t)); +} + +/* + * The worker thread function performed asynchronously. + */ +static void +zvol_task_cb(void *param) +{ + zvol_task_t *task = (zvol_task_t *)param; + + switch (task->op) { + case ZVOL_ASYNC_CREATE_MINORS: + (void) zvol_create_minors_impl(task->name1); + break; + case ZVOL_ASYNC_REMOVE_MINORS: + zvol_remove_minors_impl(task->name1); + break; + case ZVOL_ASYNC_RENAME_MINORS: + zvol_rename_minors_impl(task->name1, task->name2); + break; + case ZVOL_ASYNC_SET_SNAPDEV: + zvol_set_snapdev_impl(task->name1, task->value); + break; + case ZVOL_ASYNC_SET_VOLMODE: + zvol_set_volmode_impl(task->name1, task->value); + break; + default: + VERIFY(0); + break; + } + + zvol_task_free(task); +} + +typedef struct zvol_set_prop_int_arg { + const char *zsda_name; + uint64_t zsda_value; + zprop_source_t zsda_source; + dmu_tx_t *zsda_tx; +} zvol_set_prop_int_arg_t; + +/* + * Sanity check the dataset for safe use by the sync task. No additional + * conditions are imposed. + */ +static int +zvol_set_snapdev_check(void *arg, dmu_tx_t *tx) +{ + zvol_set_prop_int_arg_t *zsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd; + int error; + + error = dsl_dir_hold(dp, zsda->zsda_name, FTAG, &dd, NULL); + if (error != 0) + return (error); + + dsl_dir_rele(dd, FTAG); + + return (error); +} + +/* ARGSUSED */ +static int +zvol_set_snapdev_sync_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + char dsname[MAXNAMELEN]; + zvol_task_t *task; + uint64_t snapdev; + + dsl_dataset_name(ds, dsname); + if (dsl_prop_get_int_ds(ds, "snapdev", &snapdev) != 0) + return (0); + task = zvol_task_alloc(ZVOL_ASYNC_SET_SNAPDEV, dsname, NULL, snapdev); + if (task == NULL) + return (0); + + (void) taskq_dispatch(dp->dp_spa->spa_zvol_taskq, zvol_task_cb, + task, TQ_SLEEP); + return (0); +} + +/* + * Traverse all child datasets and apply snapdev appropriately. + * We call dsl_prop_set_sync_impl() here to set the value only on the toplevel + * dataset and read the effective "snapdev" on every child in the callback + * function: this is because the value is not guaranteed to be the same in the + * whole dataset hierarchy. + */ +static void +zvol_set_snapdev_sync(void *arg, dmu_tx_t *tx) +{ + zvol_set_prop_int_arg_t *zsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd; + dsl_dataset_t *ds; + int error; + + VERIFY0(dsl_dir_hold(dp, zsda->zsda_name, FTAG, &dd, NULL)); + zsda->zsda_tx = tx; + + error = dsl_dataset_hold(dp, zsda->zsda_name, FTAG, &ds); + if (error == 0) { + dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_SNAPDEV), + zsda->zsda_source, sizeof (zsda->zsda_value), 1, + &zsda->zsda_value, zsda->zsda_tx); + dsl_dataset_rele(ds, FTAG); + } + dmu_objset_find_dp(dp, dd->dd_object, zvol_set_snapdev_sync_cb, + zsda, DS_FIND_CHILDREN); + + dsl_dir_rele(dd, FTAG); +} + +int +zvol_set_snapdev(const char *ddname, zprop_source_t source, uint64_t snapdev) +{ + zvol_set_prop_int_arg_t zsda; + + zsda.zsda_name = ddname; + zsda.zsda_source = source; + zsda.zsda_value = snapdev; + + return (dsl_sync_task(ddname, zvol_set_snapdev_check, + zvol_set_snapdev_sync, &zsda, 0, ZFS_SPACE_CHECK_NONE)); +} + +/* + * Sanity check the dataset for safe use by the sync task. No additional + * conditions are imposed. + */ +static int +zvol_set_volmode_check(void *arg, dmu_tx_t *tx) +{ + zvol_set_prop_int_arg_t *zsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd; + int error; + + error = dsl_dir_hold(dp, zsda->zsda_name, FTAG, &dd, NULL); + if (error != 0) + return (error); + + dsl_dir_rele(dd, FTAG); + + return (error); +} + +/* ARGSUSED */ +static int +zvol_set_volmode_sync_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) +{ + char dsname[MAXNAMELEN]; + zvol_task_t *task; + uint64_t volmode; + + dsl_dataset_name(ds, dsname); + if (dsl_prop_get_int_ds(ds, "volmode", &volmode) != 0) + return (0); + task = zvol_task_alloc(ZVOL_ASYNC_SET_VOLMODE, dsname, NULL, volmode); + if (task == NULL) + return (0); + + (void) taskq_dispatch(dp->dp_spa->spa_zvol_taskq, zvol_task_cb, + task, TQ_SLEEP); + return (0); +} + +/* + * Traverse all child datasets and apply volmode appropriately. + * We call dsl_prop_set_sync_impl() here to set the value only on the toplevel + * dataset and read the effective "volmode" on every child in the callback + * function: this is because the value is not guaranteed to be the same in the + * whole dataset hierarchy. + */ +static void +zvol_set_volmode_sync(void *arg, dmu_tx_t *tx) +{ + zvol_set_prop_int_arg_t *zsda = arg; + dsl_pool_t *dp = dmu_tx_pool(tx); + dsl_dir_t *dd; + dsl_dataset_t *ds; + int error; + + VERIFY0(dsl_dir_hold(dp, zsda->zsda_name, FTAG, &dd, NULL)); + zsda->zsda_tx = tx; + + error = dsl_dataset_hold(dp, zsda->zsda_name, FTAG, &ds); + if (error == 0) { + dsl_prop_set_sync_impl(ds, zfs_prop_to_name(ZFS_PROP_VOLMODE), + zsda->zsda_source, sizeof (zsda->zsda_value), 1, + &zsda->zsda_value, zsda->zsda_tx); + dsl_dataset_rele(ds, FTAG); + } + + dmu_objset_find_dp(dp, dd->dd_object, zvol_set_volmode_sync_cb, + zsda, DS_FIND_CHILDREN); + + dsl_dir_rele(dd, FTAG); +} + +int +zvol_set_volmode(const char *ddname, zprop_source_t source, uint64_t volmode) +{ + zvol_set_prop_int_arg_t zsda; + + zsda.zsda_name = ddname; + zsda.zsda_source = source; + zsda.zsda_value = volmode; + + return (dsl_sync_task(ddname, zvol_set_volmode_check, + zvol_set_volmode_sync, &zsda, 0, ZFS_SPACE_CHECK_NONE)); +} + +void +zvol_create_minors(spa_t *spa, const char *name, boolean_t async) +{ + zvol_task_t *task; + taskqid_t id; + + task = zvol_task_alloc(ZVOL_ASYNC_CREATE_MINORS, name, NULL, ~0ULL); + if (task == NULL) + return; + + id = taskq_dispatch(spa->spa_zvol_taskq, zvol_task_cb, task, TQ_SLEEP); + if ((async == B_FALSE) && (id != TASKQID_INVALID)) + taskq_wait_id(spa->spa_zvol_taskq, id); +} + +void +zvol_remove_minors(spa_t *spa, const char *name, boolean_t async) +{ + zvol_task_t *task; + taskqid_t id; + + task = zvol_task_alloc(ZVOL_ASYNC_REMOVE_MINORS, name, NULL, ~0ULL); + if (task == NULL) + return; + + id = taskq_dispatch(spa->spa_zvol_taskq, zvol_task_cb, task, TQ_SLEEP); + if ((async == B_FALSE) && (id != TASKQID_INVALID)) + taskq_wait_id(spa->spa_zvol_taskq, id); +} + +void +zvol_rename_minors(spa_t *spa, const char *name1, const char *name2, + boolean_t async) +{ + zvol_task_t *task; + taskqid_t id; + + task = zvol_task_alloc(ZVOL_ASYNC_RENAME_MINORS, name1, name2, ~0ULL); + if (task == NULL) + return; + + id = taskq_dispatch(spa->spa_zvol_taskq, zvol_task_cb, task, TQ_SLEEP); + if ((async == B_FALSE) && (id != TASKQID_INVALID)) + taskq_wait_id(spa->spa_zvol_taskq, id); +} + +int +zvol_init(void) +{ + int threads = MIN(MAX(zvol_threads, 1), 1024); + int i, error; + + list_create(&zvol_state_list, sizeof (zvol_state_t), + offsetof(zvol_state_t, zv_next)); + mutex_init(&zvol_state_lock, NULL, MUTEX_DEFAULT, NULL); + ida_init(&zvol_ida); + + zvol_taskq = taskq_create(ZVOL_DRIVER, threads, maxclsyspri, + threads * 2, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + if (zvol_taskq == NULL) { + printk(KERN_INFO "ZFS: taskq_create() failed\n"); + error = -ENOMEM; + goto out; + } + + zvol_htable = kmem_alloc(ZVOL_HT_SIZE * sizeof (struct hlist_head), + KM_SLEEP); + if (!zvol_htable) { + error = -ENOMEM; + goto out_taskq; + } + for (i = 0; i < ZVOL_HT_SIZE; i++) + INIT_HLIST_HEAD(&zvol_htable[i]); + + error = register_blkdev(zvol_major, ZVOL_DRIVER); + if (error) { + printk(KERN_INFO "ZFS: register_blkdev() failed %d\n", error); + goto out_free; + } + + blk_register_region(MKDEV(zvol_major, 0), 1UL << MINORBITS, + THIS_MODULE, zvol_probe, NULL, NULL); + + return (0); + +out_free: + kmem_free(zvol_htable, ZVOL_HT_SIZE * sizeof (struct hlist_head)); +out_taskq: + taskq_destroy(zvol_taskq); +out: + ida_destroy(&zvol_ida); + mutex_destroy(&zvol_state_lock); + list_destroy(&zvol_state_list); + + return (SET_ERROR(error)); +} + +void +zvol_fini(void) +{ + zvol_remove_minors_impl(NULL); + + blk_unregister_region(MKDEV(zvol_major, 0), 1UL << MINORBITS); + unregister_blkdev(zvol_major, ZVOL_DRIVER); + kmem_free(zvol_htable, ZVOL_HT_SIZE * sizeof (struct hlist_head)); + + taskq_destroy(zvol_taskq); + list_destroy(&zvol_state_list); + mutex_destroy(&zvol_state_lock); + + ida_destroy(&zvol_ida); +} + +/* BEGIN CSTYLED */ +module_param(zvol_inhibit_dev, uint, 0644); +MODULE_PARM_DESC(zvol_inhibit_dev, "Do not create zvol device nodes"); + +module_param(zvol_major, uint, 0444); +MODULE_PARM_DESC(zvol_major, "Major number for zvol device"); + +module_param(zvol_threads, uint, 0444); +MODULE_PARM_DESC(zvol_threads, "Max number of threads to handle I/O requests"); + +module_param(zvol_request_sync, uint, 0644); +MODULE_PARM_DESC(zvol_request_sync, "Synchronously handle bio requests"); + +module_param(zvol_max_discard_blocks, ulong, 0444); +MODULE_PARM_DESC(zvol_max_discard_blocks, "Max number of blocks to discard"); + +module_param(zvol_prefetch_bytes, uint, 0644); +MODULE_PARM_DESC(zvol_prefetch_bytes, "Prefetch N bytes at zvol start+end"); + +module_param(zvol_volmode, uint, 0644); +MODULE_PARM_DESC(zvol_volmode, "Default volmode property value"); +/* END CSTYLED */ --- linux-aws-4.15.0.orig/zfs/module/zpios/Makefile.in +++ linux-aws-4.15.0/zfs/module/zpios/Makefile.in @@ -0,0 +1,10 @@ +src = @abs_top_srcdir@/module/zpios +obj = @abs_builddir@ + +MODULE := zpios + +EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ + +obj-$(CONFIG_ZFS) := $(MODULE).o + +$(MODULE)-objs += pios.o --- linux-aws-4.15.0.orig/zfs/module/zpios/pios.c +++ linux-aws-4.15.0/zfs/module/zpios/pios.c @@ -0,0 +1,1298 @@ +/* + * ZPIOS is a heavily modified version of the original PIOS test code. + * It is designed to have the test code running in the Linux kernel + * against ZFS while still being flexibly controlled from user space. + * + * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Brian Behlendorf . + * LLNL-CODE-403049 + * + * Original PIOS Test Code + * Copyright (C) 2004 Cluster File Systems, Inc. + * Written by Peter Braam + * Atul Vidwansa + * Milind Dumbare + * + * This file is part of ZFS on Linux. + * For details, see . + * + * ZPIOS 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. + * + * ZPIOS 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. + * + * You should have received a copy of the GNU General Public License along + * with ZPIOS. If not, see . + * + * Copyright (c) 2015, Intel Corporation. + */ + +#include +#include +#include +#include +#include +#include +#include "zpios-internal.h" + + +static char *zpios_tag = "zpios_tag"; + +static int +zpios_upcall(char *path, char *phase, run_args_t *run_args, int rc) +{ + /* + * This is stack heavy but it should be OK since we are only + * making the upcall between tests when the stack is shallow. + */ + char id[16], chunk_size[16], region_size[16], thread_count[16]; + char region_count[16], offset[16], region_noise[16], chunk_noise[16]; + char thread_delay[16], flags[16], result[8]; + char *argv[16], *envp[4]; + + if ((path == NULL) || (strlen(path) == 0)) + return (-ENOENT); + + snprintf(id, 15, "%d", run_args->id); + snprintf(chunk_size, 15, "%lu", (long unsigned)run_args->chunk_size); + snprintf(region_size, 15, "%lu", (long unsigned) run_args->region_size); + snprintf(thread_count, 15, "%u", run_args->thread_count); + snprintf(region_count, 15, "%u", run_args->region_count); + snprintf(offset, 15, "%lu", (long unsigned)run_args->offset); + snprintf(region_noise, 15, "%u", run_args->region_noise); + snprintf(chunk_noise, 15, "%u", run_args->chunk_noise); + snprintf(thread_delay, 15, "%u", run_args->thread_delay); + snprintf(flags, 15, "0x%x", run_args->flags); + snprintf(result, 7, "%d", rc); + + /* Passing 15 args to registered pre/post upcall */ + argv[0] = path; + argv[1] = phase; + argv[2] = strlen(run_args->log) ? run_args->log : ""; + argv[3] = id; + argv[4] = run_args->pool; + argv[5] = chunk_size; + argv[6] = region_size; + argv[7] = thread_count; + argv[8] = region_count; + argv[9] = offset; + argv[10] = region_noise; + argv[11] = chunk_noise; + argv[12] = thread_delay; + argv[13] = flags; + argv[14] = result; + argv[15] = NULL; + + /* Passing environment for user space upcall */ + envp[0] = "HOME=/"; + envp[1] = "TERM=linux"; + envp[2] = "PATH=/sbin:/usr/sbin:/bin:/usr/bin"; + envp[3] = NULL; + + return (call_usermodehelper(path, argv, envp, UMH_WAIT_PROC)); +} + +static int +zpios_print(struct file *file, const char *format, ...) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + va_list adx; + int rc; + + ASSERT(info); + ASSERT(info->info_buffer); + + va_start(adx, format); + spin_lock(&info->info_lock); + + /* Don't allow the kernel to start a write in the red zone */ + if ((int)(info->info_head - info->info_buffer) > + (info->info_size - ZPIOS_INFO_BUFFER_REDZONE)) { + rc = -EOVERFLOW; + } else { + rc = vsprintf(info->info_head, format, adx); + if (rc >= 0) + info->info_head += rc; + } + + spin_unlock(&info->info_lock); + va_end(adx); + + return (rc); +} + +static uint64_t +zpios_dmu_object_create(run_args_t *run_args, objset_t *os) +{ + struct dmu_tx *tx; + uint64_t obj = 0ULL; + uint64_t blksize = run_args->block_size; + int rc; + + if (blksize < SPA_MINBLOCKSIZE || + blksize > spa_maxblocksize(dmu_objset_spa(os)) || + !ISP2(blksize)) { + zpios_print(run_args->file, + "invalid block size for pool: %d\n", (int)blksize); + return (obj); + } + + tx = dmu_tx_create(os); + dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, OBJ_SIZE); + rc = dmu_tx_assign(tx, TXG_WAIT); + if (rc) { + zpios_print(run_args->file, + "dmu_tx_assign() failed: %d\n", rc); + dmu_tx_abort(tx); + return (obj); + } + + obj = dmu_object_alloc(os, DMU_OT_UINT64_OTHER, 0, DMU_OT_NONE, 0, tx); + rc = dmu_object_set_blocksize(os, obj, blksize, 0, tx); + if (rc) { + zpios_print(run_args->file, + "dmu_object_set_blocksize to %d failed: %d\n", + (int)blksize, rc); + dmu_tx_abort(tx); + return (obj); + } + + dmu_tx_commit(tx); + + return (obj); +} + +static int +zpios_dmu_object_free(run_args_t *run_args, objset_t *os, uint64_t obj) +{ + struct dmu_tx *tx; + int rc; + + tx = dmu_tx_create(os); + dmu_tx_hold_free(tx, obj, 0, DMU_OBJECT_END); + rc = dmu_tx_assign(tx, TXG_WAIT); + if (rc) { + zpios_print(run_args->file, + "dmu_tx_assign() failed: %d\n", rc); + dmu_tx_abort(tx); + return (rc); + } + + rc = dmu_object_free(os, obj, tx); + if (rc) { + zpios_print(run_args->file, + "dmu_object_free() failed: %d\n", rc); + dmu_tx_abort(tx); + return (rc); + } + + dmu_tx_commit(tx); + + return (0); +} + +static int +zpios_dmu_setup(run_args_t *run_args) +{ + zpios_time_t *t = &(run_args->stats.cr_time); + objset_t *os; + char name[32]; + uint64_t obj = 0ULL; + int i, rc = 0, rc2; + + (void) zpios_upcall(run_args->pre, PHASE_PRE_CREATE, run_args, 0); + t->start = zpios_timespec_now(); + + (void) snprintf(name, 32, "%s/id_%d", run_args->pool, run_args->id); + rc = dmu_objset_create(name, DMU_OST_OTHER, 0, NULL, NULL); + if (rc) { + zpios_print(run_args->file, "Error dmu_objset_create(%s, ...) " + "failed: %d\n", name, rc); + goto out; + } + + rc = dmu_objset_own(name, DMU_OST_OTHER, 0, zpios_tag, &os); + if (rc) { + zpios_print(run_args->file, "Error dmu_objset_own(%s, ...) " + "failed: %d\n", name, rc); + goto out_destroy; + } + + if (!(run_args->flags & DMU_FPP)) { + obj = zpios_dmu_object_create(run_args, os); + if (obj == 0) { + rc = -EBADF; + zpios_print(run_args->file, "Error zpios_dmu_" + "object_create() failed, %d\n", rc); + goto out_destroy; + } + } + + for (i = 0; i < run_args->region_count; i++) { + zpios_region_t *region; + + region = &run_args->regions[i]; + mutex_init(®ion->lock, NULL, MUTEX_DEFAULT, NULL); + + if (run_args->flags & DMU_FPP) { + /* File per process */ + region->obj.os = os; + region->obj.obj = zpios_dmu_object_create(run_args, os); + ASSERT(region->obj.obj > 0); /* XXX - Handle this */ + region->wr_offset = run_args->offset; + region->rd_offset = run_args->offset; + region->init_offset = run_args->offset; + region->max_offset = run_args->offset + + run_args->region_size; + } else { + /* Single shared file */ + region->obj.os = os; + region->obj.obj = obj; + region->wr_offset = run_args->offset * i; + region->rd_offset = run_args->offset * i; + region->init_offset = run_args->offset * i; + region->max_offset = run_args->offset * + i + run_args->region_size; + } + } + + run_args->os = os; +out_destroy: + if (rc) { + rc2 = dsl_destroy_head(name); + if (rc2) + zpios_print(run_args->file, "Error dsl_destroy_head" + "(%s, ...) failed: %d\n", name, rc2); + } +out: + t->stop = zpios_timespec_now(); + t->delta = zpios_timespec_sub(t->stop, t->start); + (void) zpios_upcall(run_args->post, PHASE_POST_CREATE, run_args, rc); + + return (rc); +} + +static int +zpios_setup_run(run_args_t **run_args, zpios_cmd_t *kcmd, struct file *file) +{ + run_args_t *ra; + int rc, size; + + size = sizeof (*ra) + kcmd->cmd_region_count * sizeof (zpios_region_t); + + ra = vmem_zalloc(size, KM_SLEEP); + + *run_args = ra; + strncpy(ra->pool, kcmd->cmd_pool, ZPIOS_NAME_SIZE - 1); + strncpy(ra->pre, kcmd->cmd_pre, ZPIOS_PATH_SIZE - 1); + strncpy(ra->post, kcmd->cmd_post, ZPIOS_PATH_SIZE - 1); + strncpy(ra->log, kcmd->cmd_log, ZPIOS_PATH_SIZE - 1); + ra->id = kcmd->cmd_id; + ra->chunk_size = kcmd->cmd_chunk_size; + ra->thread_count = kcmd->cmd_thread_count; + ra->region_count = kcmd->cmd_region_count; + ra->region_size = kcmd->cmd_region_size; + ra->offset = kcmd->cmd_offset; + ra->region_noise = kcmd->cmd_region_noise; + ra->chunk_noise = kcmd->cmd_chunk_noise; + ra->thread_delay = kcmd->cmd_thread_delay; + ra->flags = kcmd->cmd_flags; + ra->block_size = kcmd->cmd_block_size; + ra->stats.wr_data = 0; + ra->stats.wr_chunks = 0; + ra->stats.rd_data = 0; + ra->stats.rd_chunks = 0; + ra->region_next = 0; + ra->file = file; + mutex_init(&ra->lock_work, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&ra->lock_ctl, NULL, MUTEX_DEFAULT, NULL); + + (void) zpios_upcall(ra->pre, PHASE_PRE_RUN, ra, 0); + + rc = zpios_dmu_setup(ra); + if (rc) { + mutex_destroy(&ra->lock_ctl); + mutex_destroy(&ra->lock_work); + vmem_free(ra, size); + *run_args = NULL; + } + + return (rc); +} + +static int +zpios_get_work_item(run_args_t *run_args, dmu_obj_t *obj, __u64 *offset, + __u32 *chunk_size, zpios_region_t **region, __u32 flags) +{ + int i, j, count = 0; + unsigned int random_int; + + get_random_bytes(&random_int, sizeof (unsigned int)); + + mutex_enter(&run_args->lock_work); + i = run_args->region_next; + + /* + * XXX: I don't much care for this chunk selection mechansim + * there's the potential to burn a lot of time here doing nothing + * useful while holding the global lock. This could give some + * misleading performance results. I'll fix it latter. + */ + while (count < run_args->region_count) { + __u64 *rw_offset; + zpios_time_t *rw_time; + + j = i % run_args->region_count; + *region = &(run_args->regions[j]); + + if (flags & DMU_WRITE) { + rw_offset = &((*region)->wr_offset); + rw_time = &((*region)->stats.wr_time); + } else { + rw_offset = &((*region)->rd_offset); + rw_time = &((*region)->stats.rd_time); + } + + /* test if region is fully written */ + if (*rw_offset + *chunk_size > (*region)->max_offset) { + i++; + count++; + + if (unlikely(rw_time->stop.ts_sec == 0) && + unlikely(rw_time->stop.ts_nsec == 0)) + rw_time->stop = zpios_timespec_now(); + + continue; + } + + *offset = *rw_offset; + *obj = (*region)->obj; + *rw_offset += *chunk_size; + + /* update ctl structure */ + if (run_args->region_noise) { + get_random_bytes(&random_int, sizeof (unsigned int)); + run_args->region_next += + random_int % run_args->region_noise; + } else { + run_args->region_next++; + } + + mutex_exit(&run_args->lock_work); + return (1); + } + + /* nothing left to do */ + mutex_exit(&run_args->lock_work); + + return (0); +} + +static void +zpios_remove_objset(run_args_t *run_args) +{ + zpios_time_t *t = &(run_args->stats.rm_time); + zpios_region_t *region; + char name[32]; + int rc = 0, i; + + (void) zpios_upcall(run_args->pre, PHASE_PRE_REMOVE, run_args, 0); + t->start = zpios_timespec_now(); + + (void) snprintf(name, 32, "%s/id_%d", run_args->pool, run_args->id); + + if (run_args->flags & DMU_REMOVE) { + if (run_args->flags & DMU_FPP) { + for (i = 0; i < run_args->region_count; i++) { + region = &run_args->regions[i]; + rc = zpios_dmu_object_free(run_args, + region->obj.os, region->obj.obj); + if (rc) + zpios_print(run_args->file, + "Error removing object %d, %d\n", + (int)region->obj.obj, rc); + } + } else { + region = &run_args->regions[0]; + rc = zpios_dmu_object_free(run_args, + region->obj.os, region->obj.obj); + if (rc) + zpios_print(run_args->file, + "Error removing object %d, %d\n", + (int)region->obj.obj, rc); + } + } + + dmu_objset_disown(run_args->os, zpios_tag); + + if (run_args->flags & DMU_REMOVE) { + rc = dsl_destroy_head(name); + if (rc) + zpios_print(run_args->file, "Error dsl_destroy_head" + "(%s, ...) failed: %d\n", name, rc); + } + + t->stop = zpios_timespec_now(); + t->delta = zpios_timespec_sub(t->stop, t->start); + (void) zpios_upcall(run_args->post, PHASE_POST_REMOVE, run_args, rc); +} + +static void +zpios_cleanup_run(run_args_t *run_args) +{ + int i, size = 0; + + if (run_args == NULL) + return; + + if (run_args->threads != NULL) { + for (i = 0; i < run_args->thread_count; i++) { + if (run_args->threads[i]) { + mutex_destroy(&run_args->threads[i]->lock); + kmem_free(run_args->threads[i], + sizeof (thread_data_t)); + } + } + + kmem_free(run_args->threads, + sizeof (thread_data_t *) * run_args->thread_count); + } + + for (i = 0; i < run_args->region_count; i++) + mutex_destroy(&run_args->regions[i].lock); + + mutex_destroy(&run_args->lock_work); + mutex_destroy(&run_args->lock_ctl); + size = run_args->region_count * sizeof (zpios_region_t); + + vmem_free(run_args, sizeof (*run_args) + size); +} + +static int +zpios_dmu_write(run_args_t *run_args, objset_t *os, uint64_t object, + uint64_t offset, uint64_t size, const void *buf) +{ + struct dmu_tx *tx; + int rc, how = TXG_WAIT; +// int flags = 0; + + if (run_args->flags & DMU_WRITE_NOWAIT) + how = TXG_NOWAIT; + + while (1) { + tx = dmu_tx_create(os); + dmu_tx_hold_write(tx, object, offset, size); + rc = dmu_tx_assign(tx, how); + + if (rc) { + if (rc == ERESTART && how == TXG_NOWAIT) { + dmu_tx_wait(tx); + dmu_tx_abort(tx); + continue; + } + zpios_print(run_args->file, + "Error in dmu_tx_assign(), %d", rc); + dmu_tx_abort(tx); + return (rc); + } + break; + } + +// if (run_args->flags & DMU_WRITE_ZC) +// flags |= DMU_WRITE_ZEROCOPY; + + dmu_write(os, object, offset, size, buf, tx); + dmu_tx_commit(tx); + + return (0); +} + +static int +zpios_dmu_read(run_args_t *run_args, objset_t *os, uint64_t object, + uint64_t offset, uint64_t size, void *buf) +{ + int flags = 0; + +// if (run_args->flags & DMU_READ_ZC) +// flags |= DMU_READ_ZEROCOPY; + + if (run_args->flags & DMU_READ_NOPF) + flags |= DMU_READ_NO_PREFETCH; + + return (dmu_read(os, object, offset, size, buf, flags)); +} + +static int +zpios_thread_main(void *data) +{ + thread_data_t *thr = (thread_data_t *)data; + run_args_t *run_args = thr->run_args; + zpios_time_t t; + dmu_obj_t obj; + __u64 offset; + __u32 chunk_size; + zpios_region_t *region; + char *buf; + unsigned int random_int; + int chunk_noise = run_args->chunk_noise; + int chunk_noise_tmp = 0; + int thread_delay = run_args->thread_delay; + int thread_delay_tmp = 0; + int i, rc = 0; + + if (chunk_noise) { + get_random_bytes(&random_int, sizeof (unsigned int)); + chunk_noise_tmp = (random_int % (chunk_noise * 2))-chunk_noise; + } + + /* + * It's OK to vmem_alloc() this memory because it will be copied + * in to the slab and pointers to the slab copy will be setup in + * the bio when the IO is submitted. This of course is not ideal + * since we want a zero-copy IO path if possible. It would be nice + * to have direct access to those slab entries. + */ + chunk_size = run_args->chunk_size + chunk_noise_tmp; + buf = (char *)vmem_alloc(chunk_size, KM_SLEEP); + ASSERT(buf); + + /* Trivial data verification pattern for now. */ + if (run_args->flags & DMU_VERIFY) + memset(buf, 'z', chunk_size); + + /* Write phase */ + mutex_enter(&thr->lock); + thr->stats.wr_time.start = zpios_timespec_now(); + mutex_exit(&thr->lock); + + while (zpios_get_work_item(run_args, &obj, &offset, + &chunk_size, ®ion, DMU_WRITE)) { + if (thread_delay) { + get_random_bytes(&random_int, sizeof (unsigned int)); + thread_delay_tmp = random_int % thread_delay; + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(thread_delay_tmp); /* In jiffies */ + } + + t.start = zpios_timespec_now(); + rc = zpios_dmu_write(run_args, obj.os, obj.obj, + offset, chunk_size, buf); + t.stop = zpios_timespec_now(); + t.delta = zpios_timespec_sub(t.stop, t.start); + + if (rc) { + zpios_print(run_args->file, "IO error while doing " + "dmu_write(): %d\n", rc); + break; + } + + mutex_enter(&thr->lock); + thr->stats.wr_data += chunk_size; + thr->stats.wr_chunks++; + thr->stats.wr_time.delta = zpios_timespec_add( + thr->stats.wr_time.delta, t.delta); + mutex_exit(&thr->lock); + + mutex_enter(®ion->lock); + region->stats.wr_data += chunk_size; + region->stats.wr_chunks++; + region->stats.wr_time.delta = zpios_timespec_add( + region->stats.wr_time.delta, t.delta); + + /* First time region was accessed */ + if (region->init_offset == offset) + region->stats.wr_time.start = t.start; + + mutex_exit(®ion->lock); + } + + mutex_enter(&run_args->lock_ctl); + run_args->threads_done++; + mutex_exit(&run_args->lock_ctl); + + mutex_enter(&thr->lock); + thr->rc = rc; + thr->stats.wr_time.stop = zpios_timespec_now(); + mutex_exit(&thr->lock); + wake_up(&run_args->waitq); + + set_current_state(TASK_UNINTERRUPTIBLE); + schedule(); + + /* Check if we should exit */ + mutex_enter(&thr->lock); + rc = thr->rc; + mutex_exit(&thr->lock); + if (rc) + goto out; + + /* Read phase */ + mutex_enter(&thr->lock); + thr->stats.rd_time.start = zpios_timespec_now(); + mutex_exit(&thr->lock); + + while (zpios_get_work_item(run_args, &obj, &offset, + &chunk_size, ®ion, DMU_READ)) { + if (thread_delay) { + get_random_bytes(&random_int, sizeof (unsigned int)); + thread_delay_tmp = random_int % thread_delay; + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(thread_delay_tmp); /* In jiffies */ + } + + if (run_args->flags & DMU_VERIFY) + memset(buf, 0, chunk_size); + + t.start = zpios_timespec_now(); + rc = zpios_dmu_read(run_args, obj.os, obj.obj, + offset, chunk_size, buf); + t.stop = zpios_timespec_now(); + t.delta = zpios_timespec_sub(t.stop, t.start); + + if (rc) { + zpios_print(run_args->file, "IO error while doing " + "dmu_read(): %d\n", rc); + break; + } + + /* Trivial data verification, expensive! */ + if (run_args->flags & DMU_VERIFY) { + for (i = 0; i < chunk_size; i++) { + if (buf[i] != 'z') { + zpios_print(run_args->file, + "IO verify error: %d/%d/%d\n", + (int)obj.obj, (int)offset, + (int)chunk_size); + break; + } + } + } + + mutex_enter(&thr->lock); + thr->stats.rd_data += chunk_size; + thr->stats.rd_chunks++; + thr->stats.rd_time.delta = zpios_timespec_add( + thr->stats.rd_time.delta, t.delta); + mutex_exit(&thr->lock); + + mutex_enter(®ion->lock); + region->stats.rd_data += chunk_size; + region->stats.rd_chunks++; + region->stats.rd_time.delta = zpios_timespec_add( + region->stats.rd_time.delta, t.delta); + + /* First time region was accessed */ + if (region->init_offset == offset) + region->stats.rd_time.start = t.start; + + mutex_exit(®ion->lock); + } + + mutex_enter(&run_args->lock_ctl); + run_args->threads_done++; + mutex_exit(&run_args->lock_ctl); + + mutex_enter(&thr->lock); + thr->rc = rc; + thr->stats.rd_time.stop = zpios_timespec_now(); + mutex_exit(&thr->lock); + wake_up(&run_args->waitq); + +out: + vmem_free(buf, chunk_size); + do_exit(0); + + return (rc); /* Unreachable, due to do_exit() */ +} + +static int +zpios_thread_done(run_args_t *run_args) +{ + ASSERT(run_args->threads_done <= run_args->thread_count); + return (run_args->threads_done == run_args->thread_count); +} + +static int +zpios_threads_run(run_args_t *run_args) +{ + struct task_struct *tsk, **tsks; + thread_data_t *thr = NULL; + zpios_time_t *tt = &(run_args->stats.total_time); + zpios_time_t *tw = &(run_args->stats.wr_time); + zpios_time_t *tr = &(run_args->stats.rd_time); + int i, rc = 0, tc = run_args->thread_count; + + tsks = kmem_zalloc(sizeof (struct task_struct *) * tc, KM_SLEEP); + + run_args->threads = kmem_zalloc(sizeof (thread_data_t *)*tc, KM_SLEEP); + + init_waitqueue_head(&run_args->waitq); + run_args->threads_done = 0; + + /* Create all the needed threads which will sleep until awoken */ + for (i = 0; i < tc; i++) { + thr = kmem_zalloc(sizeof (thread_data_t), KM_SLEEP); + + thr->thread_no = i; + thr->run_args = run_args; + thr->rc = 0; + mutex_init(&thr->lock, NULL, MUTEX_DEFAULT, NULL); + run_args->threads[i] = thr; + + tsk = kthread_create(zpios_thread_main, (void *)thr, + "%s/%d", "zpios_io", i); + if (IS_ERR(tsk)) { + rc = -EINVAL; + goto taskerr; + } + + tsks[i] = tsk; + } + + tt->start = zpios_timespec_now(); + + /* Wake up all threads for write phase */ + (void) zpios_upcall(run_args->pre, PHASE_PRE_WRITE, run_args, 0); + for (i = 0; i < tc; i++) + wake_up_process(tsks[i]); + + /* Wait for write phase to complete */ + tw->start = zpios_timespec_now(); + wait_event(run_args->waitq, zpios_thread_done(run_args)); + tw->stop = zpios_timespec_now(); + (void) zpios_upcall(run_args->post, PHASE_POST_WRITE, run_args, rc); + + for (i = 0; i < tc; i++) { + thr = run_args->threads[i]; + + mutex_enter(&thr->lock); + + if (!rc && thr->rc) + rc = thr->rc; + + run_args->stats.wr_data += thr->stats.wr_data; + run_args->stats.wr_chunks += thr->stats.wr_chunks; + mutex_exit(&thr->lock); + } + + if (rc) { + /* Wake up all threads and tell them to exit */ + for (i = 0; i < tc; i++) { + mutex_enter(&thr->lock); + thr->rc = rc; + mutex_exit(&thr->lock); + + wake_up_process(tsks[i]); + } + goto out; + } + + mutex_enter(&run_args->lock_ctl); + ASSERT(run_args->threads_done == run_args->thread_count); + run_args->threads_done = 0; + mutex_exit(&run_args->lock_ctl); + + /* Wake up all threads for read phase */ + (void) zpios_upcall(run_args->pre, PHASE_PRE_READ, run_args, 0); + for (i = 0; i < tc; i++) + wake_up_process(tsks[i]); + + /* Wait for read phase to complete */ + tr->start = zpios_timespec_now(); + wait_event(run_args->waitq, zpios_thread_done(run_args)); + tr->stop = zpios_timespec_now(); + (void) zpios_upcall(run_args->post, PHASE_POST_READ, run_args, rc); + + for (i = 0; i < tc; i++) { + thr = run_args->threads[i]; + + mutex_enter(&thr->lock); + + if (!rc && thr->rc) + rc = thr->rc; + + run_args->stats.rd_data += thr->stats.rd_data; + run_args->stats.rd_chunks += thr->stats.rd_chunks; + mutex_exit(&thr->lock); + } +out: + tt->stop = zpios_timespec_now(); + tt->delta = zpios_timespec_sub(tt->stop, tt->start); + tw->delta = zpios_timespec_sub(tw->stop, tw->start); + tr->delta = zpios_timespec_sub(tr->stop, tr->start); + +cleanup: + kmem_free(tsks, sizeof (struct task_struct *) * tc); + return (rc); + +taskerr: + /* Destroy all threads that were created successfully */ + for (i = 0; i < tc; i++) + if (tsks[i] != NULL) + (void) kthread_stop(tsks[i]); + + goto cleanup; +} + +static int +zpios_do_one_run(struct file *file, zpios_cmd_t *kcmd, + int data_size, void *data) +{ + run_args_t *run_args = { 0 }; + zpios_stats_t *stats = (zpios_stats_t *)data; + int i, n, m, size, rc; + + if ((!kcmd->cmd_chunk_size) || (!kcmd->cmd_region_size) || + (!kcmd->cmd_thread_count) || (!kcmd->cmd_region_count)) { + zpios_print(file, "Invalid chunk_size, region_size, " + "thread_count, or region_count, %d\n", -EINVAL); + return (-EINVAL); + } + + if (!(kcmd->cmd_flags & DMU_WRITE) || + !(kcmd->cmd_flags & DMU_READ)) { + zpios_print(file, "Invalid flags, minimally DMU_WRITE " + "and DMU_READ must be set, %d\n", -EINVAL); + return (-EINVAL); + } + + if ((kcmd->cmd_flags & (DMU_WRITE_ZC | DMU_READ_ZC)) && + (kcmd->cmd_flags & DMU_VERIFY)) { + zpios_print(file, "Invalid flags, DMU_*_ZC incompatible " + "with DMU_VERIFY, used for performance analysis " + "only, %d\n", -EINVAL); + return (-EINVAL); + } + + /* + * Opaque data on return contains structs of the following form: + * + * zpios_stat_t stats[]; + * stats[0] = run_args->stats; + * stats[1-N] = threads[N]->stats; + * stats[N+1-M] = regions[M]->stats; + * + * Where N is the number of threads, and M is the number of regions. + */ + size = (sizeof (zpios_stats_t) + + (kcmd->cmd_thread_count * sizeof (zpios_stats_t)) + + (kcmd->cmd_region_count * sizeof (zpios_stats_t))); + if (data_size < size) { + zpios_print(file, "Invalid size, command data buffer " + "size too small, (%d < %d)\n", data_size, size); + return (-ENOSPC); + } + + rc = zpios_setup_run(&run_args, kcmd, file); + if (rc) + return (rc); + + rc = zpios_threads_run(run_args); + zpios_remove_objset(run_args); + if (rc) + goto cleanup; + + if (stats) { + n = 1; + m = 1 + kcmd->cmd_thread_count; + stats[0] = run_args->stats; + + for (i = 0; i < kcmd->cmd_thread_count; i++) + stats[n+i] = run_args->threads[i]->stats; + + for (i = 0; i < kcmd->cmd_region_count; i++) + stats[m+i] = run_args->regions[i].stats; + } + +cleanup: + zpios_cleanup_run(run_args); + + (void) zpios_upcall(kcmd->cmd_post, PHASE_POST_RUN, run_args, 0); + + return (rc); +} + +static int +zpios_open(struct inode *inode, struct file *file) +{ + zpios_info_t *info; + + info = (zpios_info_t *)kmem_alloc(sizeof (*info), KM_SLEEP); + + spin_lock_init(&info->info_lock); + info->info_size = ZPIOS_INFO_BUFFER_SIZE; + info->info_buffer = + (char *)vmem_alloc(ZPIOS_INFO_BUFFER_SIZE, KM_SLEEP); + + info->info_head = info->info_buffer; + file->private_data = (void *)info; + + return (0); +} + +static int +zpios_release(struct inode *inode, struct file *file) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + + ASSERT(info); + ASSERT(info->info_buffer); + + vmem_free(info->info_buffer, ZPIOS_INFO_BUFFER_SIZE); + kmem_free(info, sizeof (*info)); + + return (0); +} + +static int +zpios_buffer_clear(struct file *file, zpios_cfg_t *kcfg, unsigned long arg) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + + ASSERT(info); + ASSERT(info->info_buffer); + + spin_lock(&info->info_lock); + memset(info->info_buffer, 0, info->info_size); + info->info_head = info->info_buffer; + spin_unlock(&info->info_lock); + + return (0); +} + +static int +zpios_buffer_size(struct file *file, zpios_cfg_t *kcfg, unsigned long arg) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + char *buf; + int min, size, rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + spin_lock(&info->info_lock); + if (kcfg->cfg_arg1 > 0) { + + size = kcfg->cfg_arg1; + buf = (char *)vmem_alloc(size, KM_SLEEP); + + /* Zero fill and truncate contents when coping buffer */ + min = ((size < info->info_size) ? size : info->info_size); + memset(buf, 0, size); + memcpy(buf, info->info_buffer, min); + vmem_free(info->info_buffer, info->info_size); + info->info_size = size; + info->info_buffer = buf; + info->info_head = info->info_buffer; + } + + kcfg->cfg_rc1 = info->info_size; + + if (copy_to_user((struct zpios_cfg_t __user *)arg, + kcfg, sizeof (*kcfg))) + rc = -EFAULT; + + spin_unlock(&info->info_lock); + + return (rc); +} + +static int +zpios_ioctl_cfg(struct file *file, unsigned long arg) +{ + zpios_cfg_t kcfg; + int rc = 0; + + if (copy_from_user(&kcfg, (zpios_cfg_t *)arg, sizeof (kcfg))) + return (-EFAULT); + + if (kcfg.cfg_magic != ZPIOS_CFG_MAGIC) { + zpios_print(file, "Bad config magic 0x%x != 0x%x\n", + kcfg.cfg_magic, ZPIOS_CFG_MAGIC); + return (-EINVAL); + } + + switch (kcfg.cfg_cmd) { + case ZPIOS_CFG_BUFFER_CLEAR: + /* + * cfg_arg1 - Unused + * cfg_rc1 - Unused + */ + rc = zpios_buffer_clear(file, &kcfg, arg); + break; + case ZPIOS_CFG_BUFFER_SIZE: + /* + * cfg_arg1 - 0 - query size; >0 resize + * cfg_rc1 - Set to current buffer size + */ + rc = zpios_buffer_size(file, &kcfg, arg); + break; + default: + zpios_print(file, "Bad config command %d\n", + kcfg.cfg_cmd); + rc = -EINVAL; + break; + } + + return (rc); +} + +static int +zpios_ioctl_cmd(struct file *file, unsigned long arg) +{ + zpios_cmd_t *kcmd; + void *data = NULL; + int rc = -EINVAL; + + kcmd = kmem_alloc(sizeof (zpios_cmd_t), KM_SLEEP); + + rc = copy_from_user(kcmd, (zpios_cfg_t *)arg, sizeof (zpios_cmd_t)); + if (rc) { + zpios_print(file, "Unable to copy command structure " + "from user to kernel memory, %d\n", rc); + goto out_cmd; + } + + if (kcmd->cmd_magic != ZPIOS_CMD_MAGIC) { + zpios_print(file, "Bad command magic 0x%x != 0x%x\n", + kcmd->cmd_magic, ZPIOS_CFG_MAGIC); + rc = (-EINVAL); + goto out_cmd; + } + + /* Allocate memory for any opaque data the caller needed to pass on */ + if (kcmd->cmd_data_size > 0) { + data = (void *)vmem_alloc(kcmd->cmd_data_size, KM_SLEEP); + + rc = copy_from_user(data, (void *)(arg + offsetof(zpios_cmd_t, + cmd_data_str)), kcmd->cmd_data_size); + if (rc) { + zpios_print(file, "Unable to copy data buffer " + "from user to kernel memory, %d\n", rc); + goto out_data; + } + } + + rc = zpios_do_one_run(file, kcmd, kcmd->cmd_data_size, data); + + if (data != NULL) { + /* If the test failed do not print out the stats */ + if (rc) + goto out_data; + + rc = copy_to_user((void *)(arg + offsetof(zpios_cmd_t, + cmd_data_str)), data, kcmd->cmd_data_size); + if (rc) { + zpios_print(file, "Unable to copy data buffer " + "from kernel to user memory, %d\n", rc); + rc = -EFAULT; + } + +out_data: + vmem_free(data, kcmd->cmd_data_size); + } +out_cmd: + kmem_free(kcmd, sizeof (zpios_cmd_t)); + + return (rc); +} + +static long +zpios_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + int rc = 0; + + /* Ignore tty ioctls */ + if ((cmd & 0xffffff00) == ((int)'T') << 8) + return (-ENOTTY); + + switch (cmd) { + case ZPIOS_CFG: + rc = zpios_ioctl_cfg(file, arg); + break; + case ZPIOS_CMD: + rc = zpios_ioctl_cmd(file, arg); + break; + default: + zpios_print(file, "Bad ioctl command %d\n", cmd); + rc = -EINVAL; + break; + } + + return (rc); +} + +#ifdef CONFIG_COMPAT +/* Compatibility handler for ioctls from 32-bit ELF binaries */ +static long +zpios_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + return (zpios_unlocked_ioctl(file, cmd, arg)); +} +#endif /* CONFIG_COMPAT */ + +/* + * I'm not sure why you would want to write in to this buffer from + * user space since its principle use is to pass test status info + * back to the user space, but I don't see any reason to prevent it. + */ +static ssize_t +zpios_write(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + int rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + spin_lock(&info->info_lock); + + /* Write beyond EOF */ + if (*ppos >= info->info_size) { + rc = -EFBIG; + goto out; + } + + /* Resize count if beyond EOF */ + if (*ppos + count > info->info_size) + count = info->info_size - *ppos; + + if (copy_from_user(info->info_buffer, buf, count)) { + rc = -EFAULT; + goto out; + } + + *ppos += count; + rc = count; +out: + spin_unlock(&info->info_lock); + return (rc); +} + +static ssize_t +zpios_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + int rc = 0; + + ASSERT(info); + ASSERT(info->info_buffer); + + spin_lock(&info->info_lock); + + /* Read beyond EOF */ + if (*ppos >= info->info_size) + goto out; + + /* Resize count if beyond EOF */ + if (*ppos + count > info->info_size) + count = info->info_size - *ppos; + + if (copy_to_user(buf, info->info_buffer + *ppos, count)) { + rc = -EFAULT; + goto out; + } + + *ppos += count; + rc = count; +out: + spin_unlock(&info->info_lock); + return (rc); +} + +static loff_t zpios_seek(struct file *file, loff_t offset, int origin) +{ + zpios_info_t *info = (zpios_info_t *)file->private_data; + int rc = -EINVAL; + + ASSERT(info); + ASSERT(info->info_buffer); + + spin_lock(&info->info_lock); + + switch (origin) { + case 0: /* SEEK_SET - No-op just do it */ + break; + case 1: /* SEEK_CUR - Seek from current */ + offset = file->f_pos + offset; + break; + case 2: /* SEEK_END - Seek from end */ + offset = info->info_size + offset; + break; + } + + if (offset >= 0) { + file->f_pos = offset; + file->f_version = 0; + rc = offset; + } + + spin_unlock(&info->info_lock); + + return (rc); +} + +static struct file_operations zpios_fops = { + .owner = THIS_MODULE, + .open = zpios_open, + .release = zpios_release, + .unlocked_ioctl = zpios_unlocked_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = zpios_compat_ioctl, +#endif + .read = zpios_read, + .write = zpios_write, + .llseek = zpios_seek, +}; + +static struct miscdevice zpios_misc = { + .minor = MISC_DYNAMIC_MINOR, + .name = ZPIOS_NAME, + .fops = &zpios_fops, +}; + +#ifdef DEBUG +#define ZFS_DEBUG_STR " (DEBUG mode)" +#else +#define ZFS_DEBUG_STR "" +#endif + +static int __init +zpios_init(void) +{ + int error; + + error = misc_register(&zpios_misc); + if (error) { + printk(KERN_INFO "ZPIOS: misc_register() failed %d\n", error); + } else { + printk(KERN_INFO "ZPIOS: Loaded module v%s-%s%s\n", + ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR); + } + + return (error); +} + +static void __exit +zpios_fini(void) +{ + misc_deregister(&zpios_misc); + + printk(KERN_INFO "ZPIOS: Unloaded module v%s-%s%s\n", + ZFS_META_VERSION, ZFS_META_RELEASE, ZFS_DEBUG_STR); +} + +module_init(zpios_init); +module_exit(zpios_fini); + +MODULE_AUTHOR("LLNL / Sun"); +MODULE_DESCRIPTION("Kernel PIOS implementation"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); --- linux-aws-4.15.0.orig/zfs/zfs.release.in +++ linux-aws-4.15.0/zfs/zfs.release.in @@ -0,0 +1 @@ +@ZFS_META_VERSION@-@ZFS_META_RELEASE@ --- linux-aws-4.15.0.orig/zfs/zfs_config.h.in +++ linux-aws-4.15.0/zfs/zfs_config.h.in @@ -0,0 +1,641 @@ +/* zfs_config.h.in. Generated from configure.ac by autoheader. */ + +/* bio_end_io_t wants 1 arg */ +#undef HAVE_1ARG_BIO_END_IO_T + +/* invalidate_bdev() wants 1 arg */ +#undef HAVE_1ARG_INVALIDATE_BDEV + +/* kmap_atomic wants 1 args */ +#undef HAVE_1ARG_KMAP_ATOMIC + +/* lookup_bdev() wants 1 arg */ +#undef HAVE_1ARG_LOOKUP_BDEV + +/* submit_bio() wants 1 arg */ +#undef HAVE_1ARG_SUBMIT_BIO + +/* bdi_setup_and_register() wants 2 args */ +#undef HAVE_2ARGS_BDI_SETUP_AND_REGISTER + +/* lookup_bdev() wants 2 args */ +#undef HAVE_2ARGS_LOOKUP_BDEV + +/* bdi_setup_and_register() wants 3 args */ +#undef HAVE_3ARGS_BDI_SETUP_AND_REGISTER + +/* blkdev_get() wants 3 args */ +#undef HAVE_3ARG_BLKDEV_GET + +/* sget() wants 5 args */ +#undef HAVE_5ARG_SGET + +/* security_inode_init_security wants 6 args */ +#undef HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY + +/* dops->automount() exists */ +#undef HAVE_AUTOMOUNT + +/* Define if host toolchain supports AVX */ +#undef HAVE_AVX + +/* Define if host toolchain supports AVX2 */ +#undef HAVE_AVX2 + +/* Define if host toolchain supports AVX512BW */ +#undef HAVE_AVX512BW + +/* Define if host toolchain supports AVX512CD */ +#undef HAVE_AVX512CD + +/* Define if host toolchain supports AVX512DQ */ +#undef HAVE_AVX512DQ + +/* Define if host toolchain supports AVX512ER */ +#undef HAVE_AVX512ER + +/* Define if host toolchain supports AVX512F */ +#undef HAVE_AVX512F + +/* Define if host toolchain supports AVX512IFMA */ +#undef HAVE_AVX512IFMA + +/* Define if host toolchain supports AVX512PF */ +#undef HAVE_AVX512PF + +/* Define if host toolchain supports AVX512VBMI */ +#undef HAVE_AVX512VBMI + +/* Define if host toolchain supports AVX512VL */ +#undef HAVE_AVX512VL + +/* struct block_device_operations use bdevs */ +#undef HAVE_BDEV_BLOCK_DEVICE_OPERATIONS + +/* bdev_logical_block_size() is available */ +#undef HAVE_BDEV_LOGICAL_BLOCK_SIZE + +/* bdev_physical_block_size() is available */ +#undef HAVE_BDEV_PHYSICAL_BLOCK_SIZE + +/* bio->bi_opf is defined */ +#undef HAVE_BIO_BI_OPF + +/* bio->bi_status exists */ +#undef HAVE_BIO_BI_STATUS + +/* bio has bi_iter */ +#undef HAVE_BIO_BVEC_ITER + +/* BIO_RW_BARRIER is defined */ +#undef HAVE_BIO_RW_BARRIER + +/* BIO_RW_DISCARD is defined */ +#undef HAVE_BIO_RW_DISCARD + +/* BIO_RW_FAILFAST_* are defined */ +#undef HAVE_BIO_RW_FAILFAST_DTD + +/* bio_set_dev() exists */ +#undef HAVE_BIO_SET_DEV + +/* bio_set_op_attrs is available */ +#undef HAVE_BIO_SET_OP_ATTRS + +/* blkdev_get_by_path() is available */ +#undef HAVE_BLKDEV_GET_BY_PATH + +/* blk queue backing_dev_info is dynamic */ +#undef HAVE_BLK_QUEUE_BDI_DYNAMIC + +/* blk_queue_flush() is available */ +#undef HAVE_BLK_QUEUE_FLUSH + +/* blk_queue_flush() is GPL-only */ +#undef HAVE_BLK_QUEUE_FLUSH_GPL_ONLY + +/* BIO_RW_UNPLUG is available */ +#undef HAVE_BLK_QUEUE_HAVE_BIO_RW_UNPLUG + +/* struct blk_plug is available */ +#undef HAVE_BLK_QUEUE_HAVE_BLK_PLUG + +/* blk_queue_max_hw_sectors() is available */ +#undef HAVE_BLK_QUEUE_MAX_HW_SECTORS + +/* blk_queue_max_segments() is available */ +#undef HAVE_BLK_QUEUE_MAX_SEGMENTS + +/* blk_queue_write_cache() exists */ +#undef HAVE_BLK_QUEUE_WRITE_CACHE + +/* blk_queue_write_cache() is GPL-only */ +#undef HAVE_BLK_QUEUE_WRITE_CACHE_GPL_ONLY + +/* struct block_device_operations.release returns void */ +#undef HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID + +/* security_inode_init_security wants callback */ +#undef HAVE_CALLBACK_SECURITY_INODE_INIT_SECURITY + +/* iops->check_acl() exists */ +#undef HAVE_CHECK_ACL + +/* iops->check_acl() wants flags */ +#undef HAVE_CHECK_ACL_WITH_FLAGS + +/* clear_inode() is available */ +#undef HAVE_CLEAR_INODE + +/* eops->commit_metadata() exists */ +#undef HAVE_COMMIT_METADATA + +/* dentry uses const struct dentry_operations */ +#undef HAVE_CONST_DENTRY_OPERATIONS + +/* super_block uses const struct xattr_handler */ +#undef HAVE_CONST_XATTR_HANDLER + +/* iops->create() passes nameidata */ +#undef HAVE_CREATE_NAMEIDATA + +/* current->bio_list exists */ +#undef HAVE_CURRENT_BIO_LIST + +/* current->bio_tail exists */ +#undef HAVE_CURRENT_BIO_TAIL + +/* current_time() exists */ +#undef HAVE_CURRENT_TIME + +/* DECLARE_EVENT_CLASS() is available */ +#undef HAVE_DECLARE_EVENT_CLASS + +/* sops->dirty_inode() wants flags */ +#undef HAVE_DIRTY_INODE_WITH_FLAGS + +/* ql->discard_granularity is available */ +#undef HAVE_DISCARD_GRANULARITY + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* d_make_root() is available */ +#undef HAVE_D_MAKE_ROOT + +/* d_obtain_alias() is available */ +#undef HAVE_D_OBTAIN_ALIAS + +/* d_prune_aliases() is available */ +#undef HAVE_D_PRUNE_ALIASES + +/* dops->d_revalidate() operation takes nameidata */ +#undef HAVE_D_REVALIDATE_NAMEIDATA + +/* d_set_d_op() is available */ +#undef HAVE_D_SET_D_OP + +/* elevator_change() is available */ +#undef HAVE_ELEVATOR_CHANGE + +/* eops->encode_fh() wants child and parent inodes */ +#undef HAVE_ENCODE_FH_WITH_INODE + +/* sops->evict_inode() exists */ +#undef HAVE_EVICT_INODE + +/* fops->aio_fsync() exists */ +#undef HAVE_FILE_AIO_FSYNC + +/* file_dentry() is available */ +#undef HAVE_FILE_DENTRY + +/* fops->fallocate() exists */ +#undef HAVE_FILE_FALLOCATE + +/* file_inode() is available */ +#undef HAVE_FILE_INODE + +/* kernel defines fmode_t */ +#undef HAVE_FMODE_T + +/* follow_down_one() is available */ +#undef HAVE_FOLLOW_DOWN_ONE + +/* iops->follow_link() cookie */ +#undef HAVE_FOLLOW_LINK_COOKIE + +/* iops->follow_link() nameidata */ +#undef HAVE_FOLLOW_LINK_NAMEIDATA + +/* kernel has interface */ +#undef HAVE_FPU_API_H + +/* sops->free_cached_objects() exists */ +#undef HAVE_FREE_CACHED_OBJECTS + +/* fops->fsync() with range */ +#undef HAVE_FSYNC_RANGE + +/* fops->fsync() without dentry */ +#undef HAVE_FSYNC_WITHOUT_DENTRY + +/* fops->fsync() with dentry */ +#undef HAVE_FSYNC_WITH_DENTRY + +/* generic_start_io_acct()/generic_end_io_acct() available */ +#undef HAVE_GENERIC_IO_ACCT_3ARG + +/* generic_start_io_acct()/generic_end_io_acct() 4 arg available */ +#undef HAVE_GENERIC_IO_ACCT_4ARG + +/* generic_readlink is global */ +#undef HAVE_GENERIC_READLINK + +/* generic_setxattr() exists */ +#undef HAVE_GENERIC_SETXATTR + +/* generic_write_checks() takes kiocb */ +#undef HAVE_GENERIC_WRITE_CHECKS_KIOCB + +/* iops->get_acl() exists */ +#undef HAVE_GET_ACL + +/* blk_disk_ro() is available */ +#undef HAVE_GET_DISK_RO + +/* get_gendisk() is available */ +#undef HAVE_GET_GENDISK + +/* iops->get_link() cookie */ +#undef HAVE_GET_LINK_COOKIE + +/* iops->get_link() delayed */ +#undef HAVE_GET_LINK_DELAYED + +/* fops->fallocate() exists */ +#undef HAVE_INODE_FALLOCATE + +/* inode_owner_or_capable() exists */ +#undef HAVE_INODE_OWNER_OR_CAPABLE + +/* inode_set_flags() exists */ +#undef HAVE_INODE_SET_FLAGS + +/* iops->truncate_range() exists */ +#undef HAVE_INODE_TRUNCATE_RANGE + +/* insert_inode_locked() is available */ +#undef HAVE_INSERT_INODE_LOCKED + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* is_owner_or_cap() exists */ +#undef HAVE_IS_OWNER_OR_CAP + +/* uncached_acl_sentinel() exists */ +#undef HAVE_KERNEL_GET_ACL_HANDLE_CACHE + +/* kernel does stack verification */ +#undef HAVE_KERNEL_OBJTOOL + +/* i_(uid|gid)_(read|write) exist */ +#undef HAVE_KUID_HELPERS + +/* kernel has large stacks */ +#undef HAVE_LARGE_STACKS + +/* Define if you have libattr */ +#undef HAVE_LIBATTR + +/* Define if you have libblkid */ +#undef HAVE_LIBBLKID + +/* Define if you have libtirpc */ +#undef HAVE_LIBTIRPC + +/* Define if you have libudev */ +#undef HAVE_LIBUDEV + +/* Define if udev_device_get_is_initialized is available */ +#undef HAVE_LIBUDEV_UDEV_DEVICE_GET_IS_INITIALIZED + +/* Define if you have libuuid */ +#undef HAVE_LIBUUID + +/* iops->lookup() passes nameidata */ +#undef HAVE_LOOKUP_NAMEIDATA + +/* lseek_execute() is available */ +#undef HAVE_LSEEK_EXECUTE + +/* makedev() is declared in sys/mkdev.h */ +#undef HAVE_MAKEDEV_IN_MKDEV + +/* makedev() is declared in sys/sysmacros.h */ +#undef HAVE_MAKEDEV_IN_SYSMACROS + +/* Noting that make_request_fn() returns int */ +#undef HAVE_MAKE_REQUEST_FN_RET_INT + +/* Noting that make_request_fn() returns blk_qc_t */ +#undef HAVE_MAKE_REQUEST_FN_RET_QC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* iops->create()/mkdir()/mknod() take umode_t */ +#undef HAVE_MKDIR_UMODE_T + +/* Define to 1 if you have the `mlockall' function. */ +#undef HAVE_MLOCKALL + +/* mount_nodev() is available */ +#undef HAVE_MOUNT_NODEV + +/* new_sync_read() is available */ +#undef HAVE_NEW_SYNC_READ + +/* sops->nr_cached_objects() exists */ +#undef HAVE_NR_CACHED_OBJECTS + +/* open_bdev_exclusive() is available */ +#undef HAVE_OPEN_BDEV_EXCLUSIVE + +/* iops->getattr() takes a path */ +#undef HAVE_PATH_IOPS_GETATTR + +/* iops->permission() exists */ +#undef HAVE_PERMISSION + +/* iops->permission() with nameidata exists */ +#undef HAVE_PERMISSION_WITH_NAMEIDATA + +/* posix_acl_chmod() exists */ +#undef HAVE_POSIX_ACL_CHMOD + +/* posix_acl_equiv_mode wants umode_t* */ +#undef HAVE_POSIX_ACL_EQUIV_MODE_UMODE_T + +/* posix_acl_from_xattr() needs user_ns */ +#undef HAVE_POSIX_ACL_FROM_XATTR_USERNS + +/* posix_acl_release() is available */ +#undef HAVE_POSIX_ACL_RELEASE + +/* posix_acl_release() is GPL-only */ +#undef HAVE_POSIX_ACL_RELEASE_GPL_ONLY + +/* posix_acl_valid() wants user namespace */ +#undef HAVE_POSIX_ACL_VALID_WITH_NS + +/* iops->put_link() cookie */ +#undef HAVE_PUT_LINK_COOKIE + +/* iops->put_link() delayed */ +#undef HAVE_PUT_LINK_DELAYED + +/* iops->put_link() nameidata */ +#undef HAVE_PUT_LINK_NAMEIDATA + +/* qat is enabled and existed */ +#undef HAVE_QAT + +/* iops->rename() wants flags */ +#undef HAVE_RENAME_WANTS_FLAGS + +/* REQ_FAILFAST_MASK is defined */ +#undef HAVE_REQ_FAILFAST_MASK + +/* REQ_OP_DISCARD is defined */ +#undef HAVE_REQ_OP_DISCARD + +/* REQ_OP_FLUSH is defined */ +#undef HAVE_REQ_OP_FLUSH + +/* REQ_OP_SECURE_ERASE is defined */ +#undef HAVE_REQ_OP_SECURE_ERASE + +/* setattr_prepare() is available */ +#undef HAVE_SETATTR_PREPARE + +/* iops->set_acl() exists */ +#undef HAVE_SET_ACL + +/* posix_acl_release() is usable */ +#undef HAVE_SET_CACHED_ACL_USABLE + +/* set_nlink() is available */ +#undef HAVE_SET_NLINK + +/* sops->show_options() with dentry */ +#undef HAVE_SHOW_OPTIONS_WITH_DENTRY + +/* struct super_block has s_shrink */ +#undef HAVE_SHRINK + +/* Define if host toolchain supports SSE */ +#undef HAVE_SSE + +/* Define if host toolchain supports SSE2 */ +#undef HAVE_SSE2 + +/* Define if host toolchain supports SSE3 */ +#undef HAVE_SSE3 + +/* Define if host toolchain supports SSE4.1 */ +#undef HAVE_SSE4_1 + +/* Define if host toolchain supports SSE4.2 */ +#undef HAVE_SSE4_2 + +/* Define if host toolchain supports SSSE3 */ +#undef HAVE_SSSE3 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* super_setup_bdi_name() exits */ +#undef HAVE_SUPER_SETUP_BDI_NAME + +/* super_block->s_user_ns exists */ +#undef HAVE_SUPER_USER_NS + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* struct super_block has s_d_op */ +#undef HAVE_S_D_OP + +/* struct super_block has s_instances list_head */ +#undef HAVE_S_INSTANCES_LIST_HEAD + +/* i_op->tmpfile() exists */ +#undef HAVE_TMPFILE + +/* truncate_setsize() is available */ +#undef HAVE_TRUNCATE_SETSIZE + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* iops->getattr() takes a vfsmount */ +#undef HAVE_VFSMOUNT_IOPS_GETATTR + +/* fops->iterate() is available */ +#undef HAVE_VFS_ITERATE + +/* fops->iterate_shared() is available */ +#undef HAVE_VFS_ITERATE_SHARED + +/* fops->readdir() is available */ +#undef HAVE_VFS_READDIR + +/* fops->read/write_iter() are available */ +#undef HAVE_VFS_RW_ITERATE + +/* xattr_handler->get() wants dentry */ +#undef HAVE_XATTR_GET_DENTRY + +/* xattr_handler->get() wants both dentry and inode */ +#undef HAVE_XATTR_GET_DENTRY_INODE + +/* xattr_handler->get() wants xattr_handler */ +#undef HAVE_XATTR_GET_HANDLER + +/* xattr_handler->get() wants inode */ +#undef HAVE_XATTR_GET_INODE + +/* xattr_handler has name */ +#undef HAVE_XATTR_HANDLER_NAME + +/* xattr_handler->list() wants dentry */ +#undef HAVE_XATTR_LIST_DENTRY + +/* xattr_handler->list() wants xattr_handler */ +#undef HAVE_XATTR_LIST_HANDLER + +/* xattr_handler->list() wants inode */ +#undef HAVE_XATTR_LIST_INODE + +/* xattr_handler->list() wants simple */ +#undef HAVE_XATTR_LIST_SIMPLE + +/* xattr_handler->set() wants dentry */ +#undef HAVE_XATTR_SET_DENTRY + +/* xattr_handler->set() wants both dentry and inode */ +#undef HAVE_XATTR_SET_DENTRY_INODE + +/* xattr_handler->set() wants xattr_handler */ +#undef HAVE_XATTR_SET_HANDLER + +/* xattr_handler->set() wants inode */ +#undef HAVE_XATTR_SET_INODE + +/* Define if you have zlib */ +#undef HAVE_ZLIB + +/* __posix_acl_chmod() exists */ +#undef HAVE___POSIX_ACL_CHMOD + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* make_request_fn() returns blk_qc_t */ +#undef MAKE_REQUEST_FN_RET + +/* hardened module_param_call */ +#undef MODULE_PARAM_CALL_CONST + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* struct shrink_control has nid */ +#undef SHRINK_CONTROL_HAS_NID + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* zfs debugging enabled */ +#undef ZFS_DEBUG + +/* using global_node_page_state() */ +#undef ZFS_GLOBAL_NODE_PAGE_STATE + +/* Define to 1 if GPL-only symbols can be used */ +#undef ZFS_IS_GPL_COMPATIBLE + +/* Define the project alias string. */ +#undef ZFS_META_ALIAS + +/* Define the project author. */ +#undef ZFS_META_AUTHOR + +/* Define the project release date. */ +#undef ZFS_META_DATA + +/* Define the project license. */ +#undef ZFS_META_LICENSE + +/* Define the libtool library 'age' version information. */ +#undef ZFS_META_LT_AGE + +/* Define the libtool library 'current' version information. */ +#undef ZFS_META_LT_CURRENT + +/* Define the libtool library 'revision' version information. */ +#undef ZFS_META_LT_REVISION + +/* Define the project name. */ +#undef ZFS_META_NAME + +/* Define the project release. */ +#undef ZFS_META_RELEASE + +/* Define the project version. */ +#undef ZFS_META_VERSION + + +#undef PACKAGE +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION +#undef STDC_HEADERS +#undef VERSION